[SCM] image display tool for astronomy branch, debian, updated. 5b8ce4906e80b306fc2ea88da386ba4f020ee837

Ole Streicher debian at liska.ath.cx
Thu Feb 2 16:07:02 UTC 2012


The following commit has been merged in the debian branch:
commit 7deb554bb7e51c424c2ec2c3a55f8f92e448606c
Author: Ole Streicher <debian at liska.ath.cx>
Date:   Mon Jan 30 10:55:24 2012 +0100

    Remove ast-5.3.1; it will be build separately.

diff --git a/ast-5.3-1/AST_ERR b/ast-5.3-1/AST_ERR
deleted file mode 100644
index b8dcae5..0000000
--- a/ast-5.3-1/AST_ERR
+++ /dev/null
@@ -1,555 +0,0 @@
-* FORTRAN error include file for facility AST (Code 1521)
-* Generated by the MESSGEN utility
-
-*     attribute getting error
-      INTEGER AST__ATGER
-      PARAMETER ( AST__ATGER = 233933154 )
-
-*     attribute setting error
-      INTEGER AST__ATSER
-      PARAMETER ( AST__ATSER = 233933162 )
-
-*     attribute value invalid
-      INTEGER AST__ATTIN
-      PARAMETER ( AST__ATTIN = 233933170 )
-
-*     axis index invalid
-      INTEGER AST__AXIIN
-      PARAMETER ( AST__AXIIN = 233933178 )
-
-*     bad attribute name
-      INTEGER AST__BADAT
-      PARAMETER ( AST__BADAT = 233933186 )
-
-*     zero-sized box given
-      INTEGER AST__BADBX
-      PARAMETER ( AST__BADBX = 233933194 )
-
-*     bad input data
-      INTEGER AST__BADIN
-      PARAMETER ( AST__BADIN = 233933202 )
-
-*     bad number of input coordinates
-      INTEGER AST__BADNI
-      PARAMETER ( AST__BADNI = 233933210 )
-
-*     bad number of output coordinates
-      INTEGER AST__BADNO
-      PARAMETER ( AST__BADNO = 233933218 )
-
-*     PolyMap contains illegal power value
-      INTEGER AST__BADPW
-      PARAMETER ( AST__BADPW = 233933226 )
-
-*     ShiftMap contains no shift information
-      INTEGER AST__BADSM
-      PARAMETER ( AST__BADSM = 233933234 )
-
-*     WinMap contains no bounds information
-      INTEGER AST__BADWM
-      PARAMETER ( AST__BADWM = 233933242 )
-
-*     bad break index
-      INTEGER AST__BDBRK
-      PARAMETER ( AST__BDBRK = 233933250 )
-
-*     bad field specifier
-      INTEGER AST__BDFMT
-      PARAMETER ( AST__BDFMT = 233933258 )
-
-*     invalid FITS keyword value found
-      INTEGER AST__BDFTS
-      PARAMETER ( AST__BDFTS = 233933266 )
-
-*     inappropriate Object supplied
-      INTEGER AST__BDOBJ
-      PARAMETER ( AST__BDOBJ = 233933274 )
-
-*     wrong number of clipping axes
-      INTEGER AST__CLPAX
-      PARAMETER ( AST__CLPAX = 233933282 )
-
-*     range of coordinates invalid
-      INTEGER AST__CORNG
-      PARAMETER ( AST__CORNG = 233933290 )
-
-*     too many breaks in a curve
-      INTEGER AST__CVBRK
-      PARAMETER ( AST__CVBRK = 233933298 )
-
-*     array dimensions invalid
-      INTEGER AST__DIMIN
-      PARAMETER ( AST__DIMIN = 233933306 )
-
-*     date/time error
-      INTEGER AST__DTERR
-      PARAMETER ( AST__DTERR = 233933314 )
-
-*     invalid use of astEnd
-      INTEGER AST__ENDIN
-      PARAMETER ( AST__ENDIN = 233933322 )
-
-*     end of input Channel encountered
-      INTEGER AST__EOCHN
-      PARAMETER ( AST__EOCHN = 233933330 )
-
-*     attempt to export Object pointer from level zero
-      INTEGER AST__EXPIN
-      PARAMETER ( AST__EXPIN = 233933338 )
-
-*     corrupted FitsChan supplied
-      INTEGER AST__FCRPT
-      PARAMETER ( AST__FCRPT = 233933346 )
-
-*     error while formatting coordinate value
-      INTEGER AST__FMTER
-      PARAMETER ( AST__FMTER = 233933354 )
-
-*     Frame index invalid
-      INTEGER AST__FRMIN
-      PARAMETER ( AST__FRMIN = 233933362 )
-
-*     FrameSet invalid
-      INTEGER AST__FRSIN
-      PARAMETER ( AST__FRSIN = 233933370 )
-
-*     cannot convert FITS data value type
-      INTEGER AST__FTCNV
-      PARAMETER ( AST__FTCNV = 233933378 )
-
-*     low level graphics error
-      INTEGER AST__GRFER
-      PARAMETER ( AST__GRFER = 233933386 )
-
-*     invalid Handle
-      INTEGER AST__INHAN
-      PARAMETER ( AST__INHAN = 233933394 )
-
-*     incompatible numbers of coordinates
-      INTEGER AST__INNCO
-      PARAMETER ( AST__INNCO = 233933402 )
-
-*     internal programming error
-      INTEGER AST__INTER
-      PARAMETER ( AST__INTER = 233933410 )
-
-*     incompatible transformation directions
-      INTEGER AST__INTRD
-      PARAMETER ( AST__INTRD = 233933418 )
-
-*     circular dependency between KeyMaps
-      INTEGER AST__KYCIR
-      PARAMETER ( AST__KYCIR = 233933426 )
-
-*     class loader error
-      INTEGER AST__LDERR
-      PARAMETER ( AST__LDERR = 233933434 )
-
-*     invalid lookup table increment
-      INTEGER AST__LUTII
-      PARAMETER ( AST__LUTII = 233933442 )
-
-*     invalid number of lookup table elements
-      INTEGER AST__LUTIN
-      PARAMETER ( AST__LUTIN = 233933450 )
-
-*     requested memory size invalid
-      INTEGER AST__MEMIN
-      PARAMETER ( AST__MEMIN = 233933458 )
-
-*     not a 2d or 3d MatrixMap
-      INTEGER AST__MTR23
-      PARAMETER ( AST__MTR23 = 233933466 )
-
-*     null rotation axis supplied
-      INTEGER AST__MTRAX
-      PARAMETER ( AST__MTRAX = 233933474 )
-
-*     bad matrix shapes for multiplication
-      INTEGER AST__MTRML
-      PARAMETER ( AST__MTRML = 233933482 )
-
-*     null matrix supplied
-      INTEGER AST__MTRMT
-      PARAMETER ( AST__MTRMT = 233933490 )
-
-*     number of axes invalid
-      INTEGER AST__NAXIN
-      PARAMETER ( AST__NAXIN = 233933498 )
-
-*     number of characters invalid
-      INTEGER AST__NCHIN
-      PARAMETER ( AST__NCHIN = 233933506 )
-
-*     number of coordinates invalid
-      INTEGER AST__NCOIN
-      PARAMETER ( AST__NCOIN = 233933514 )
-
-*     number of coordinates per point invalid
-      INTEGER AST__NCPIN
-      PARAMETER ( AST__NCPIN = 233933522 )
-
-*     number of array elements invalid
-      INTEGER AST__NELIN
-      PARAMETER ( AST__NELIN = 233933530 )
-
-*     number of output coordinates too small
-      INTEGER AST__NOCTS
-      PARAMETER ( AST__NOCTS = 233933538 )
-
-*     transformation not defined
-      INTEGER AST__NODEF
-      PARAMETER ( AST__NODEF = 233933546 )
-
-*     required FITS keywords missing
-      INTEGER AST__NOFTS
-      PARAMETER ( AST__NOFTS = 233933554 )
-
-*     unable to allocate memory
-      INTEGER AST__NOMEM
-      PARAMETER ( AST__NOMEM = 233933562 )
-
-*     number of output points too small
-      INTEGER AST__NOPTS
-      PARAMETER ( AST__NOPTS = 233933570 )
-
-*     attribute is read-only
-      INTEGER AST__NOWRT
-      PARAMETER ( AST__NOWRT = 233933578 )
-
-*     number of points invalid
-      INTEGER AST__NPTIN
-      PARAMETER ( AST__NPTIN = 233933586 )
-
-*     Object invalid
-      INTEGER AST__OBJIN
-      PARAMETER ( AST__OBJIN = 233933594 )
-
-*     invalid Plot option
-      INTEGER AST__OPT
-      PARAMETER ( AST__OPT = 233933602 )
-
-*     points data structure invalid
-      INTEGER AST__PDSIN
-      PARAMETER ( AST__PDSIN = 233933610 )
-
-*     no numerical labels can be produced
-      INTEGER AST__PLFMT
-      PARAMETER ( AST__PLFMT = 233933618 )
-
-*     permutation invalid
-      INTEGER AST__PRMIN
-      PARAMETER ( AST__PRMIN = 233933626 )
-
-*     pointer invalid
-      INTEGER AST__PTRIN
-      PARAMETER ( AST__PTRIN = 233933634 )
-
-*     range of points invalid
-      INTEGER AST__PTRNG
-      PARAMETER ( AST__PTRNG = 233933642 )
-
-*     read error
-      INTEGER AST__RDERR
-      PARAMETER ( AST__RDERR = 233933650 )
-
-*     invalid or corrupted Region structure supplied
-      INTEGER AST__REGIN
-      PARAMETER ( AST__REGIN = 233933658 )
-
-*     invalid attempt to remove last Frame
-      INTEGER AST__REMIN
-      PARAMETER ( AST__REMIN = 233933666 )
-
-*     sky coordinate system invalid
-      INTEGER AST__SCSIN
-      PARAMETER ( AST__SCSIN = 233933674 )
-
-*     axis selection invalid
-      INTEGER AST__SELIN
-      PARAMETER ( AST__SELIN = 233933682 )
-
-*     bad SLALIB transformation type
-      INTEGER AST__SLAIN
-      PARAMETER ( AST__SLAIN = 233933690 )
-
-*     coordinate transformation not defined
-      INTEGER AST__TRNND
-      PARAMETER ( AST__TRNND = 233933698 )
-
-*     unmatched quotes
-      INTEGER AST__UNMQT
-      PARAMETER ( AST__UNMQT = 233933706 )
-
-*     valid area too small
-      INTEGER AST__VSMAL
-      PARAMETER ( AST__VSMAL = 233933714 )
-
-*     non-existent longitude or latitude axis
-      INTEGER AST__WCSAX
-      PARAMETER ( AST__WCSAX = 233933722 )
-
-*     too few mapping coordinates
-      INTEGER AST__WCSNC
-      PARAMETER ( AST__WCSNC = 233933730 )
-
-*     invalid projection parameters
-      INTEGER AST__WCSPA
-      PARAMETER ( AST__WCSPA = 233933738 )
-
-*     unknown projection type
-      INTEGER AST__WCSTY
-      PARAMETER ( AST__WCSTY = 233933746 )
-
-*     too many Objects in use at once
-      INTEGER AST__XSOBJ
-      PARAMETER ( AST__XSOBJ = 233933754 )
-
-*     zoom factor invalid
-      INTEGER AST__ZOOMI
-      PARAMETER ( AST__ZOOMI = 233933762 )
-
-*     bad coordinate index
-      INTEGER AST__BADCI
-      PARAMETER ( AST__BADCI = 233933770 )
-
-*     FrameSet integrity lost
-      INTEGER AST__ILOST
-      PARAMETER ( AST__ILOST = 233933778 )
-
-*     error in IntraMap transformation function
-      INTEGER AST__ITFER
-      PARAMETER ( AST__ITFER = 233933786 )
-
-*     IntraMap transformation function name invalid
-      INTEGER AST__ITFNI
-      PARAMETER ( AST__ITFNI = 233933794 )
-
-*     Mapping bounding box not found
-      INTEGER AST__MBBNF
-      PARAMETER ( AST__MBBNF = 233933802 )
-
-*     multiple registration of IntraMap transformation function
-      INTEGER AST__MRITF
-      PARAMETER ( AST__MRITF = 233933810 )
-
-*     Object class unknown
-      INTEGER AST__OCLUK
-      PARAMETER ( AST__OCLUK = 233933818 )
-
-*     error while unformatting a coordinate value
-      INTEGER AST__UNFER
-      PARAMETER ( AST__UNFER = 233933826 )
-
-*     unregistered IntraMap transformation function
-      INTEGER AST__URITF
-      PARAMETER ( AST__URITF = 233933834 )
-
-*     grid bounds invalid
-      INTEGER AST__GBDIN
-      PARAMETER ( AST__GBDIN = 233933842 )
-
-*     number of grid dimensions invalid
-      INTEGER AST__NGDIN
-      PARAMETER ( AST__NGDIN = 233933850 )
-
-*     positional accuracy tolerance invalid
-      INTEGER AST__PATIN
-      PARAMETER ( AST__PATIN = 233933858 )
-
-*     sub-pixel interpolation scheme invalid
-      INTEGER AST__SISIN
-      PARAMETER ( AST__SISIN = 233933866 )
-
-*     scale size in pixels invalid
-      INTEGER AST__SSPIN
-      PARAMETER ( AST__SSPIN = 233933874 )
-
-*     error in user-supplied sub-pixel interpolation function
-      INTEGER AST__UINER
-      PARAMETER ( AST__UINER = 233933882 )
-
-*     error in user-supplied 1-d sub-pixel interpolation kernel
-      INTEGER AST__UK1ER
-      PARAMETER ( AST__UK1ER = 233933890 )
-
-*     invalid comma in expression
-      INTEGER AST__COMIN
-      PARAMETER ( AST__COMIN = 233933898 )
-
-*     invalid constant in expression
-      INTEGER AST__CONIN
-      PARAMETER ( AST__CONIN = 233933906 )
-
-*     duplicate variable name
-      INTEGER AST__DUVAR
-      PARAMETER ( AST__DUVAR = 233933914 )
-
-*     invalid number of transformation functions
-      INTEGER AST__INNTF
-      PARAMETER ( AST__INNTF = 233933922 )
-
-*     missing or invalid operand in expression
-      INTEGER AST__MIOPA
-      PARAMETER ( AST__MIOPA = 233933930 )
-
-*     missing or invalid operator in expression
-      INTEGER AST__MIOPR
-      PARAMETER ( AST__MIOPR = 233933938 )
-
-*     missing variable name
-      INTEGER AST__MISVN
-      PARAMETER ( AST__MISVN = 233933946 )
-
-*     missing left parenthesis in expression
-      INTEGER AST__MLPAR
-      PARAMETER ( AST__MLPAR = 233933954 )
-
-*     missing right parenthesis in expression
-      INTEGER AST__MRPAR
-      PARAMETER ( AST__MRPAR = 233933962 )
-
-*     missing right hand side in function
-      INTEGER AST__NORHS
-      PARAMETER ( AST__NORHS = 233933970 )
-
-*     undefined variable or function in expression
-      INTEGER AST__UDVOF
-      PARAMETER ( AST__UDVOF = 233933978 )
-
-*     variable name invalid
-      INTEGER AST__VARIN
-      PARAMETER ( AST__VARIN = 233933986 )
-
-*     wrong number of function arguments in expression
-      INTEGER AST__WRNFA
-      PARAMETER ( AST__WRNFA = 233933994 )
-
-*     invalid units specification
-      INTEGER AST__BADUN
-      PARAMETER ( AST__BADUN = 233934002 )
-
-*     no rest frequency is defined
-      INTEGER AST__NORSF
-      PARAMETER ( AST__NORSF = 233934010 )
-
-*     no standard of rest is defined
-      INTEGER AST__NOSOR
-      PARAMETER ( AST__NOSOR = 233934018 )
-
-*     invalid SpecMap
-      INTEGER AST__SPCIN
-      PARAMETER ( AST__SPCIN = 233934026 )
-
-*     invalid XML name or prefix
-      INTEGER AST__XMLNM
-      PARAMETER ( AST__XMLNM = 233934034 )
-
-*     invalid XML comment text
-      INTEGER AST__XMLCM
-      PARAMETER ( AST__XMLCM = 233934042 )
-
-*     invalid XML processing instruction target text
-      INTEGER AST__XMLPT
-      PARAMETER ( AST__XMLPT = 233934050 )
-
-*     invalid XML content item index
-      INTEGER AST__XMLIT
-      PARAMETER ( AST__XMLIT = 233934058 )
-
-*     supplied XML document is not well formed
-      INTEGER AST__XMLWF
-      PARAMETER ( AST__XMLWF = 233934066 )
-
-*     Range of log axis scale includes zero
-      INTEGER AST__ZERAX
-      PARAMETER ( AST__ZERAX = 233934074 )
-
-*     Invalid parameters for offset sky coordinate system
-      INTEGER AST__BADOC
-      PARAMETER ( AST__BADOC = 233934082 )
-
-*     error getting a named value from a KeyMap
-      INTEGER AST__MPGER
-      PARAMETER ( AST__MPGER = 233934090 )
-
-*     invalid integer index supplied for a KeyMap entry
-      INTEGER AST__MPIND
-      PARAMETER ( AST__MPIND = 233934098 )
-
-*     region cannot be re-centred
-      INTEGER AST__REGCN
-      PARAMETER ( AST__REGCN = 233934106 )
-
-*     attribute has no usable value
-      INTEGER AST__NOVAL
-      PARAMETER ( AST__NOVAL = 233934114 )
-
-*     incompatible time scales
-      INTEGER AST__INCTS
-      PARAMETER ( AST__INCTS = 233934122 )
-
-*     invalid TimeMap
-      INTEGER AST__TIMIN
-      PARAMETER ( AST__TIMIN = 233934130 )
-
-*     cannot use supplied AstroCoords info
-      INTEGER AST__STCKEY
-      PARAMETER ( AST__STCKEY = 233934138 )
-
-*     invalid AstroCoords index
-      INTEGER AST__STCIND
-      PARAMETER ( AST__STCIND = 233934146 )
-
-*     cannot conserve flux whilst resampling an array of data
-      INTEGER AST__CNFLX
-      PARAMETER ( AST__CNFLX = 233934154 )
-
-*     Unknown AST tuning parameter name supplied
-      INTEGER AST__TUNAM
-      PARAMETER ( AST__TUNAM = 233934162 )
-
-*     Bad value supplied for a public function parameter
-      INTEGER AST__BDPAR
-      PARAMETER ( AST__BDPAR = 233934170 )
-
-*     Supplied FrameSet does not contain any independent axes
-      INTEGER AST__3DFSET
-      PARAMETER ( AST__3DFSET = 233934178 )
-
-*     Attempt to delete original Plot3D base Frame
-      INTEGER AST__PXFRRM
-      PARAMETER ( AST__PXFRRM = 233934186 )
-
-*     Illegal syntax for string substitution template
-      INTEGER AST__BADSUB
-      PARAMETER ( AST__BADSUB = 233934194 )
-
-*     Incompatible flags for re-sampling or re-binning
-      INTEGER AST__BADFLG
-      PARAMETER ( AST__BADFLG = 233934202 )
-
-*     Error locking or unlocking an AST Object
-      INTEGER AST__LCKERR
-      PARAMETER ( AST__LCKERR = 233934210 )
-
-*     FITS keyword had undefined value
-      INTEGER AST__FUNDEF
-      PARAMETER ( AST__FUNDEF = 233934218 )
-
-*     invalid integer index supplied for a KeyMap vector element
-      INTEGER AST__MPVIN
-      PARAMETER ( AST__MPVIN = 233934226 )
-
-*     operation specifier invalid
-      INTEGER AST__OPRIN
-      PARAMETER ( AST__OPRIN = 233934234 )
-
-*     no inside point found
-      INTEGER AST__NONIN
-      PARAMETER ( AST__NONIN = 233934242 )
-
-*     requested key not found in KeyMap
-      INTEGER AST__MPKER
-      PARAMETER ( AST__MPKER = 233934250 )
-
diff --git a/ast-5.3-1/COPYING.LIB b/ast-5.3-1/COPYING.LIB
deleted file mode 100644
index eb685a5..0000000
--- a/ast-5.3-1/COPYING.LIB
+++ /dev/null
@@ -1,481 +0,0 @@
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
-                    675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-     Appendix: How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/ast-5.3-1/Ers.h b/ast-5.3-1/Ers.h
deleted file mode 100644
index 7ce821b..0000000
--- a/ast-5.3-1/Ers.h
+++ /dev/null
@@ -1,245 +0,0 @@
-#ifndef ERSINC
-#define ERSINC
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*			E r s . h
-
- *  Module name:
-      Ers.h
-
- *  Function:
-	Function header for the Ers routines
-
- *  Description:
-     Should be included by all files using the Ers routines.
-
- *  Language:
-      C
-
- *  Support: Tony Farrell, AAO
-
- *  Copyright (c) Anglo-Australian Telescope Board, 1995.
-    Not to be used for commercial purposes without AATB permission.
-  
- *     @(#) $Id: Ers.h,v 1.1.1.1 2009/11/02 16:01:15 joye Exp $
-  
-
- *  History:
-      04-Aug-1992 - TJF - Original version
-      25-Sep-1992 - TJF - Update comments
-      06-Oct-1992 - TJF - Rewrite for complete Ers package.
-      04-Aug-1993 - TJF - maxsize argument to ErsSPrintf needs a type
-      28-Sep-1993 - TJF - Use GNUC attribute to flag the ers calls
-			  as printf style.  Use drama.h for configuration
-			  stuff.
-
-      29-Sep-1993 - TJF - Add Sccs id
-      06-Mar-1994 - TJF - Add Task Id stuff.
-      05-Feb-1995 - TJF - Add BROADCAST flag
-      06-Aug-1996 - TJF - Add const to strings arguments of ErsVSPrintf
-      30-May-2001 - TJF - Add ErsSetLogRoutine.
-      15-Jun-2001 - TJF - Add ErsGetTaskId.
-      {@change entry@}
- 
- 
- */
-
-#ifdef ERS_STANDALONE
-/*
- *  DRAMA macros and types used by Ers.  They are defined here when we
- *  are building ers standalone.
- */
-#define DVOID void
-#define DVOIDP void *
-#define DPUBLIC extern
-#define DPRIVATE static
-#define DCONSTV const
-#define DCONSTR const
-#define STATUS__OK 0
-#define DPROTOTYPES_OK
-#define DFLOAT_OK
-#define DCONST_I
-typedef long int StatusType;
-#define StatusOkP(_value_)  (*(_value_) == STATUS__OK)
-#else
-/*
- *  Include the drama.h file for configuration macros. 
- */
-
-#include "drama.h"
-
-#include "status.h"		/* For StatusType etc	*/
-#endif
-
-/*
- *  Get around problems in Sparc include files, they are not ANSI compatible
- */
-#if defined(__sparc__) && !defined(sparc)
-#define sparc 1
-#endif
-
-/*
- *  Floating point stuff.  Only used in ErsVSPrintf.
- */
-#ifdef DFLOAT_OK
-/*
- *  These values taken from bsd floatio.h
- */
-#    define ERS_MAXEXP 308
-#    define ERS_MAXFRACT 39
-#endif
-
-/*
- *  Constants
- */
-
-#define ERS_C_LEN 200		/* Maximum length of reported messages */
-#define ERS_C_MAXMSG 30		/* Maximum number of reported messages */
-
-#define ERS_M_NOFMT (1<<0)	/* Message flag masks		*/
-#define ERS_M_HIGHLIGHT (1<<1)
-#define ERS_M_BELL (1<<2)
-#define ERS_M_ALARM (1<<3)
-#define ERS_M_BROADCAST (1<<4)
-
-
-/* 
- *  This structure is used to store details of a message
- */
-typedef struct {
-	    StatusType mesStatus;	    /* Status of message    */
-	    unsigned int context;	    /* Context message was written at */
-	    int    flags;		    /* Message flags	    */
-	    char   message[ERS_C_LEN];	    /* The formated message */
-	    } ErsMessageType;
-
-typedef DVOIDP ErsTaskIdType;
-
-#ifdef DPROTOTYPES_OK
-/* 
- *  This type is that required for log routines - called on each call to 
- *  ErsRep with details of a single message.
- * 
- *  The argument "logArg" is a user value supplied when ErsStart is called.
- *  It enables the user to pass any appropriate value to the log routine.
- */
-typedef DVOID (*ErsLogRoutineType)(
-		    DVOIDP logArg,	    /* Supplied to ErsStart  */
-		    DCONSTV ErsMessageType * message,/* The message  */
-		    StatusType * status);
-/*
- *  The type is that requried for the output routine - called to output 
- *  the messages to the user.  An array of message may be output by one
- *  call, with count being the number of message to output.
- *
- *  The argument "outArg" is a user value supplied when ErsStart is called.
- *  It enables the user to pass any appropriate value to the log routine.
- */
-typedef DVOID (*ErsOutRoutineType)(
-		    DVOIDP outArg,	    /* Supplied to ErsStart */
-		    unsigned int count,	    /* Number of messages   */
-		    DCONSTV ErsMessageType messages[],/* Array of messages */
-		    StatusType * status);
-
-
-/*
- *  Function prototypes.
- *
- * 
- *  We can't define these prorotype in the Ers main module unless we have
- *  stdarg.h.
- */
-#if !defined(ERS_MAIN) || defined(DSTDARG__OK)
-    DPUBLIC DVOID ErsRep(DCONSTV int flags, StatusType * status, 
-		       DCONSTV char * string , ...)
-#ifdef __GNUC__
-	__attribute__ ((format (printf, 3, 4)))
-#endif
-		;
-    DPUBLIC DVOID ErsOut(DCONSTV int flags, StatusType * status, 
-		          DCONSTV char * string, ...)
-#ifdef __GNUC__
-	__attribute__ ((format (printf, 3, 4)))
-#endif
-		;
-    DPUBLIC int  ErsSPrintf(DCONSTV int maxLength, 
-			char *string, 
-			DCONSTV char * fmt,...)
-#ifdef __GNUC__
-	__attribute__ ((format (printf, 3, 4)))
-#endif
-		;
-
-#endif /* DSTDARG_OK */
-
-DPUBLIC ErsTaskIdType ErsStart(
-		ErsOutRoutineType outRoutine,
-		DVOIDP outArg,
-		ErsLogRoutineType logRoutine,
-		DVOIDP logArg,
-		StatusType * status);
-DPUBLIC DVOID ErsStop(StatusType * status);
-DPUBLIC DVOID ErsPush(void);
-DPUBLIC DVOID ErsAnnul(StatusType * status);
-DPUBLIC DVOID ErsFlush(StatusType * status);
-DPUBLIC DVOID ErsClear(StatusType * status);
-DPUBLIC DVOID ErsPop(void);
-DPUBLIC DVOID ErsSetLogRoutine(
-    ErsLogRoutineType logRoutine,
-    DVOIDP logArg,
-    ErsLogRoutineType *oldLogRoutine,
-    DVOIDP *oldLogArg,
-    StatusType * status);
-
-DPUBLIC ErsTaskIdType ErsGetTaskId(StatusType *status);
-DPUBLIC DVOID ErsEnableTask(ErsTaskIdType TaskId,
-			    ErsTaskIdType * SavedTaskId);
-DPUBLIC DVOID ErsRestoreTask(ErsTaskIdType TaskId);
-
-
-#ifdef DSTDARG_OK
-#   include <stdarg.h>
-#else
-#   include <varargs.h>
-#endif
-DPUBLIC int ErsVSPrintf(
-		 int maxLength, 
-		 char *string , 
-		 DCONSTV char * fmt0, 
-		 va_list ap);
-#else
-/* Don't use prorotypes */
-typedef DVOID (*ErsLogRoutineType)();
-typedef DVOID (*ErsOutRoutineType)();
-
-DPUBLIC DVOID ErsRep();
-DPUBLIC DVOID ErsOut();
-
-DPUBLIC DVOID ErsStart();
-DPUBLIC DVOID ErsStop();
-DPUBLIC DVOID ErsPush();
-DPUBLIC DVOID ErsPop();
-DPUBLIC DVOID ErsAnnul();
-DPUBLIC DVOID ErsFlush();
-DPUBLIC DVOID ErsClear();
-DPUBLIC DVOID ErsSetLogRoutine();
-DPUBLIC ErsTaskIdType ErsGetTaskId();
-
-DPUBLIC int ErsVSPrintf();
-DPUBLIC int ErsSPrintf();
-
-DPUBLIC DVOID ErsEnableTask();
-DPUBLIC DVOID ErsRestoreTask();
-
-
-#endif	
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ast-5.3-1/GRF_PAR b/ast-5.3-1/GRF_PAR
deleted file mode 100644
index 23db670..0000000
--- a/ast-5.3-1/GRF_PAR
+++ /dev/null
@@ -1,124 +0,0 @@
-*+
-*  Name:
-*     GRF_PAR
-
-*  Purpose:
-*     Define the constants needed to implement Fortran GRF routines.
-
-*  Language:
-*     Fortran 77
-
-*  Type of Module:
-*     Include file.
-
-*  Description:
-*     This file contains definitions which are required by Fortran 77
-*     programs which implement their own grf routines (routines for
-*     drawing graphics primitive used by the AST Plot class).
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     13-JUN-2001 (DSB):
-*        Original version.
-*-
-
-*  Values identifying different graphics attributes.
-      INTEGER GRF__STYLE  
-      PARAMETER ( GRF__STYLE  = 0 )
-
-      INTEGER GRF__WIDTH  
-      PARAMETER ( GRF__WIDTH  = 1 )
-
-      INTEGER GRF__SIZE   
-      PARAMETER ( GRF__SIZE   = 2 )
-
-      INTEGER GRF__FONT   
-      PARAMETER ( GRF__FONT   = 3 )
-
-      INTEGER GRF__COLOUR 
-      PARAMETER ( GRF__COLOUR = 4 )
-
-*  Values identifying different graphics primatives.
-      INTEGER GRF__TEXT 
-      PARAMETER ( GRF__TEXT = 0 )
-
-      INTEGER GRF__LINE 
-      PARAMETER ( GRF__LINE = 1 )
-
-      INTEGER GRF__MARK 
-      PARAMETER ( GRF__MARK = 2 )
-
-*  The number of different graphics attributes.
-      INTEGER GRF__NATTR 
-      PARAMETER ( GRF__NATTR = 5 )
-
-*  Values identifying capabilities.
-      INTEGER GRF__ESC 
-      PARAMETER ( GRF__ESC = 0 )
-
-      INTEGER GRF__MJUST 
-      PARAMETER ( GRF__MJUST = 1 )
-
-      INTEGER GRF__SCALES
-      PARAMETER ( GRF__SCALES = 2 )
-
-* Values identifying types of graphics escape sequence
-      INTEGER GRF__ESPER
-      PARAMETER ( GRF__ESPER = 1 )
-
-      INTEGER GRF__ESSUP
-      PARAMETER ( GRF__ESSUP = 2 )
-
-      INTEGER GRF__ESSUB
-      PARAMETER ( GRF__ESSUB = 3 )
-
-      INTEGER GRF__ESGAP
-      PARAMETER ( GRF__ESGAP = 4 )
-
-      INTEGER GRF__ESBAC
-      PARAMETER ( GRF__ESBAC = 5 )
-
-      INTEGER GRF__ESSIZ
-      PARAMETER ( GRF__ESSIZ = 6 )
-
-      INTEGER GRF__ESWID
-      PARAMETER ( GRF__ESWID = 7 )
-
-      INTEGER GRF__ESFON
-      PARAMETER ( GRF__ESFON = 8 )
-
-      INTEGER GRF__ESCOL
-      PARAMETER ( GRF__ESCOL = 9 )
-
-      INTEGER GRF__ESSTY
-      PARAMETER ( GRF__ESSTY = 10 )
-
-      INTEGER GRF__ESPOP
-      PARAMETER ( GRF__ESPOP = 11 )
-
-      INTEGER GRF__ESPSH
-      PARAMETER ( GRF__ESPSH = 12 )
-
-
diff --git a/ast-5.3-1/LICENCE b/ast-5.3-1/LICENCE
deleted file mode 100644
index 5b6e7c6..0000000
--- a/ast-5.3-1/LICENCE
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/ast-5.3-1/Makefile.am b/ast-5.3-1/Makefile.am
deleted file mode 100644
index 21ec2e1..0000000
--- a/ast-5.3-1/Makefile.am
+++ /dev/null
@@ -1,500 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# First declare various groups of files.  These were initially extracted
-# from the grp.make file, as constructed by the SDT newdev command
-GRP_C_ROUTINES = \
-    axis.c \
-    box.c \
-    c2f77.c \
-    channel.c \
-    circle.c \
-    cmpframe.c \
-    cmpmap.c \
-    cmpregion.c \
-    dsbspecframe.c \
-    dssmap.c \
-    ellipse.c \
-    error.c \
-    fbox.c \
-    fchannel.c \
-    fcircle.c \
-    fcmpframe.c \
-    fcmpmap.c \
-    fcmpregion.c \
-    fdsbspecframe.c \
-    fdssmap.c \
-    fellipse.c \
-    ferror.c \
-    ffitschan.c \
-    ffluxframe.c \
-    fframe.c \
-    fframeset.c \
-    fgrismmap.c \
-    finterval.c \
-    fintramap.c \
-    fitschan.c \
-    fkeymap.c \
-    flutmap.c \
-    fluxframe.c \
-    fmapping.c \
-    fmathmap.c \
-    fmatrixmap.c \
-    fnullregion.c \
-    fobject.c \
-    fpcdmap.c \
-    fpermmap.c \
-    fplot.c \
-    fplot3d.c \
-    fpointlist.c \
-    fpolygon.c \
-    fpolymap.c \
-    fprism.c \
-    frame.c \
-    frameset.c \
-    fratemap.c \
-    fnormmap.c \
-    fregion.c \
-    fshiftmap.c \
-    fskyframe.c \
-    fslamap.c \
-    fspecfluxframe.c \
-    fspecframe.c \
-    fspecmap.c \
-    ftimeframe.c \
-    ftimemap.c \
-    fsphmap.c \
-    ftranmap.c \
-    fselectormap.c \
-    fswitchmap.c \
-    funitmap.c \
-    fwcsmap.c \
-    fwinmap.c \
-    fxmlchan.c \
-    fzoommap.c \
-    globals.c \
-    grismmap.c \
-    interval.c \
-    intramap.c \
-    keymap.c \
-    loader.c \
-    lutmap.c \
-    mapping.c \
-    mathmap.c \
-    matrixmap.c \
-    memory.c \
-    nullregion.c \
-    object.c \
-    pcdmap.c \
-    permmap.c \
-    plot.c \
-    plot3d.c \
-    pointlist.c \
-    pointset.c \
-    polygon.c \
-    polymap.c \
-    prism.c \
-    normmap.c \
-    ratemap.c \
-    region.c \
-    shiftmap.c \
-    skyaxis.c \
-    skyframe.c \
-    slamap.c \
-    specfluxframe.c \
-    specframe.c \
-    specmap.c \
-    sphmap.c \
-    stc.c \
-    stcresourceprofile.c \
-    stcsearchlocation.c \
-    stccatalogentrylocation.c \
-    stcobsdatalocation.c \
-    stcschan.c \
-    fstc.c \
-    fstcresourceprofile.c \
-    fstcsearchlocation.c \
-    fstccatalogentrylocation.c \
-    fstcobsdatalocation.c \
-    fstcschan.c \
-    timeframe.c \
-    timemap.c \
-    tranmap.c \
-    selectormap.c \
-    switchmap.c \
-    unit.c \
-    unitmap.c \
-    wcsmap.c \
-    winmap.c \
-    xml.c \
-    xmlchan.c \
-    zoommap.c
-
-# Header files which contribute to the "ast.h" file, organised to correspond
-# with the class hierarchy.
-AST_H_FILES = \
-    xml.h \
-    wcstrig.h \
-    proj.h \
-    memory.h \
-    error.h \
-    globals.h \
-    unit.h \
-    ast_err.h \
-    version.h \
-    object.h \
-       keymap.h \
-       pointset.h \
-       axis.h \
-          skyaxis.h \
-       mapping.h \
-          cmpmap.h \
-          dssmap.h \
-          grismmap.h \
-          intramap.h \
-          lutmap.h \
-          mathmap.h \
-          matrixmap.h \
-          pcdmap.h \
-          permmap.h \
-          polymap.h \
-          ratemap.h \
-          normmap.h \
-          shiftmap.h \
-          slamap.h \
-          specmap.h \
-          sphmap.h \
-          timemap.h \
-          selectormap.h \
-          switchmap.h \
-          tranmap.h \
-          unitmap.h \
-          wcsmap.h \
-          winmap.h \
-          zoommap.h \
-          frame.h \
-             cmpframe.h \
-                specfluxframe.h \
-             fluxframe.h \
-             frameset.h \
-                plot.h \
-                   plot3d.h \
-             skyframe.h \
-             specframe.h \
-                dsbspecframe.h \
-             region.h \
-                box.h \
-                circle.h \
-                cmpregion.h \
-                ellipse.h \
-                interval.h \
-                nullregion.h \
-                pointlist.h \
-                polygon.h \
-                prism.h \
-                stc.h \
-                    stcresourceprofile.h \
-                    stcsearchlocation.h \
-                    stccatalogentrylocation.h \
-                    stcobsdatalocation.h \
-             timeframe.h \
-       channel.h \
-          fitschan.h \
-          stcschan.h \
-          xmlchan.h 
-
-# All the (C) include files required to build the library.
-GRP_C_INCLUDE_FILES = \
-    $(AST_H_FILES) \
-    c2f77.h \
-    ems.h \
-    err.h \
-    Ers.h \
-    f77.h \
-    grf.h \
-    grf3d.h \
-    pg3d.h \
-    loader.h \
-    skyaxis.h \
-    pal.h \
-    slamac.h \
-    stc.h \
-    stcresourceprofile.h \
-    stcsearchlocation.h \
-    stccatalogentrylocation.h \
-    stcobsdatalocation.h \
-    wcsmath.h \
-    wcstrig.h \
-    xmlchan.h
-
-# The following list should include AST_PAR, but that must not be
-# distributed, and so it is listed separately in
-# nodist_libast_la_SOURCES below.
-GRP_F_INCLUDE_FILES = \
-    GRF_PAR \
-    AST_ERR
-
-## Following declaration isn't used
-## LATEX_DOCUMENTATION_FILES = \
-##     sun210.tex \
-##     sun211.tex
-
-DOCUMENTATION_PRODUCTS = $(PAPER_DOCUMENTATION) $(HYPER_DOCUMENTATION)
-PAPER_DOCUMENTATION = sun210.tex sun211.tex sun210.ps sun211.ps
-HYPER_DOCUMENTATION = sun210.htx_tar sun211.htx_tar
-
-POSTSCRIPT_FIGURES = \
-    cmpframe.eps \
-    complex.eps \
-    frames.eps \
-    frameset.eps \
-    fronta.eps \
-    fronta_bw.eps \
-    frontb.eps \
-    frontb_bw.eps \
-    frontc.eps \
-    frontc_bw.eps \
-    fsalign.eps \
-    fsconvert.eps \
-    fsexample.eps \
-    fsmerge.eps \
-    fsremap.eps \
-    gridplot.eps \
-    gridplot_bw.eps \
-    mapping.eps \
-    overgrid.eps \
-    overgrid_bw.eps \
-    parallel.eps \
-    series.eps \
-    simpexamp.eps
-
-WCSLIB_FILES = \
-    COPYING.LIB \
-    proj.c \
-    tpn.c \
-    proj.h \
-    wcstrig.c \
-    wcsmath.h \
-    wcstrig.h
-
-PAL_FILES = \
-    COPYING.LIB \
-    pal.c \
-    pal.h \
-    slamac.h
-
-
-bin_SCRIPTS = ast_link
-dist_bin_SCRIPTS = ast_link_adam
-noinst_SCRIPTS = ast_cpp
-dist_noinst_SCRIPTS = makeh
-# Scripts are not distributed by default (since they might be derived objects)
-# Add these to the distribution below.  In fact, it would be useful
-# and straightforward  to make ast_link{,_adam} derived, since they
-# could then have installation directories painlessly edited in to
-# them.  This might be a requirement for scripts which supported
-# linking against shared libraries.
-
-# Headers required by library users.  Both of the following lines
-# indicate headers which are installed.
-include_HEADERS = GRF_PAR grf.h
-# Following are generated, so should not be distributed.
-nodist_include_HEADERS = ast.h AST_PAR
-include_MESSAGES = AST_ERR ast_err.h
-
-lib_LTLIBRARIES = \
-    libast.la \
-    libast_err.la \
-    libast_ems.la \
-    libast_drama.la \
-    libast_grf3d.la \
-    libast_grf_2.0.la \
-    libast_grf_3.2.la \
-    libast_pgplot.la \
-    libast_pgplot3d.la \
-    libast_pal.la \
-    libast_wcslib.la
-
-
-stardocs_DATA = @STAR_LATEX_DOCUMENTATION@
-dist_starnews_DATA = ast.news
-dist_pkgdata_DATA = LICENCE
-
-# Make all library code position independent by default. This is handy for
-# creating shareable libraries from the static ones (Java JNI libraries). 
-# Note we do not simply set the AM_CFLAGS variable, as this would also
-# apply to programs compiled without using libtool, possibly causing the
-# compilation to fail.
-
-if !NOTHREADS
-
-if !NOPIC
-libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic -DTHREAD_SAFE
-else
-libast_la_CFLAGS = $(AM_CFLAGS) -DTHREAD_SAFE
-endif
-
-else
-libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-
-endif
-
-if !NOPIC
-libast_err_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_ems_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_drama_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_grf3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_grf_2.0_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_grf_3.2_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_pgplot_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_pgplot3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_pal_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-libast_wcslib_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-endif
-
-#  The module containing the main AST classes
-libast_la_SOURCES = \
-    $(GRP_C_ROUTINES) \
-    $(GRP_C_INCLUDE_FILES) \
-    $(GRP_F_INCLUDE_FILES) \
-    ast_err.h
-
-# AST_PAR is really part of GRP_F_INCLUDE_FILES, but it must not be
-# distributed, so list it separately.
-nodist_libast_la_SOURCES = \
-    ast.h \
-    AST_PAR
-
-#  The default error reporting module.
-libast_err_la_SOURCES = err_null.c
-
-#  The error reporting module that uses EMS to deliver errors.
-libast_ems_la_SOURCES = err_ems.c
-
-#  The error reporting module that uses DRAMA Ers to deliver errors.
-libast_drama_la_SOURCES = err_drama.c
-
-#  The module containing null implementations of the 3D graphics routines 
-#  required by AST 
-libast_grf3d_la_SOURCES = grf3d.c 
-
-#  The module containing null implementations of the graphics routines 
-#  required by AST V2.0
-libast_grf_2_0_la_SOURCES = grf_2.0.c 
-
-#  The module containing null implementations of the graphics routines 
-#  added by AST V3.2 and not present in V2.0
-libast_grf_3_2_la_SOURCES = grf_3.2.c 
-
-#  The graphics module that uses PGPLOT for 2D graphical output.
-libast_pgplot_la_SOURCES = grf_pgplot.c 
-
-#  The graphics module that uses PGPLOT for 3D graphical output.
-libast_pgplot3d_la_SOURCES = grf3d_pgplot.c
-
-#  Modules adapted from the wcslib library.
-libast_wcslib_la_SOURCES = proj.c wcstrig.c tpn.c
-
-#  Modules supplied by tpoint.
-libast_pal_la_SOURCES = pal.c
-
-# The following files are built by the targets in this makefile.
-MAINTAINERCLEANFILES = version.h builddocs addversion \
-	ast.h $(DOCUMENTATION_PRODUCTS)
-CLEANFILES = AST_PAR ast.h
-
-# Special cases start here
-
-# The AST_PAR include file is produced by compiling the astbad.c
-# program and editing its output into the ast_par.source file (while
-# also changing the "E" exponent character to a "D").  The astbad.c
-# and ast_par.source must be distributed (the generation of the
-# AST__BAD value must be done on the build host) but not installed.
-noinst_PROGRAMS = astbad
-astbad_SOURCES = astbad.c pointset.h
-AST_PAR: ast_par.source astbad
-	sed -e 's/<AST__BAD>/'`./astbad | tr 'E' 'D'`'/' ast_par.source >$@
-
-# ast_link is generated from ast_link.in; ast_link_adam does not
-# need configuration, and so is not mentioned in AC_CONFIG_FILES within
-# configure.ac, and so is not distributed automatically.
-#
-# makeh is required in order to build ast.h after distribution (see below).
-EXTRA_DIST = ast_par.source sun210_figures sun211_figures
-
-# ast.h depends on the error-facility files.  ast.h _could_ be made
-# before distribution, but since it's generated from other distributed
-# files, it's more robust to distribute makeh and make ast.h on the
-# build host.
-ast.h: $(AST_H_FILES) ast_err.h makeh config.h
-	@PERL@ ./makeh -s $(srcdir) $(AST_H_FILES) >$@
-
-# AST_ERR and ast_err.h are `generated source files', and so must be
-# generated before any other compilations are done.  Note that these
-# files are generated on the distribution host, and so this
-# declaration has no effect post-distribution.
-#
-# AST_PAR is also a generated source file, but it should _not_ be
-# included in the list of BUILT_SOURCES, otherwise `make' tries to make
-# it before it makes the `astbad' program it depends on.  Instead,
-# just rely on the dependencies expressed in the main body above to
-# have AST_PAR built before it is needed.
-#
-# version.h is included by object.h, and thus indirectly by most modules.
-# It's most straightforward to build it at the beginning.
-BUILT_SOURCES = AST_ERR ast_err.h version.h
-
-#  Form second links to the main object library (static and shared). This is 
-#  used when a second pass through the library is needed during linking.
-#  Do not forget to change the contents of the libast_pass2.la file to refer
-#  to the pass2 libraries rather than the original libraries. Use target 
-#  install-exec-hook rather than install-exec-local so that the soft links 
-#  and files are created *after* the main library has been installed. 
-install-exec-hook: libast.la
-	$(mkdir_p) $(DESTDIR)$(libdir) 
-	cd $(DESTDIR)$(libdir); \
-	for f in `ls libast.*`; do \
-	   ff=`echo $$f | sed -e 's/libast/libast_pass2/'`; \
-	   if test -f "$$ff"; then rm "$$ff"; fi; \
-	   $(LN_S) $$f $$ff; \
-	   $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(libdir)/$$ff" || :; \
-	done; \
-	if test -f "libast.la"; then \
-	   if test -f "libast_pass2.la"; then rm "libast_pass2.la"; fi; \
-	   sed -e 's/libast/libast_pass2/g' libast.la > libast_pass2.la; \
-	fi
-
-# Make pre-distribution files.  These are files which are required for
-# building the distribution, but are not themselves distributed.
-# The source files here should be mentioned in STAR_PREDIST_SOURCES in
-# configure.ac
- at PREDIST@predist_subs = sed \
- at PREDIST@    -e 's, at PACKAGE_VERSION\@,$(PACKAGE_VERSION),' \
- at PREDIST@    -e 's, at PACKAGE_VERSION_MAJOR\@,$(PACKAGE_VERSION_MAJOR),' \
- at PREDIST@    -e 's, at PACKAGE_VERSION_MINOR\@,$(PACKAGE_VERSION_MINOR),' \
- at PREDIST@    -e 's, at PACKAGE_VERSION_RELEASE\@,$(PACKAGE_VERSION_RELEASE),' \
- at PREDIST@    -e 's, at PERL\@,$(PERL),'
- at PREDIST@version.h: version.h.in configure.ac
- at PREDIST@	rm -f $@; $(predist_subs) version.h.in >$@
- at PREDIST@builddocs: builddocs.in configure.ac
- at PREDIST@	rm -f $@; $(predist_subs) builddocs.in >$@; chmod +x $@
- at PREDIST@addversion: addversion.in configure.ac
- at PREDIST@	rm -f $@; $(predist_subs) addversion.in >$@; chmod +x $@
-
-# Documentation
- at PREDIST@$(PAPER_DOCUMENTATION): sun211_figures builddocs addversion
- at PREDIST@	./builddocs
-
-# The contents of the sun211_figures directory is identical to that
-# sun210_figures
-sun211_figures: sun210_figures
-	$(LN_S) sun210_figures sun211_figures
-
-# Installation check
-
-TESTS = ast_test
-check_PROGRAMS = ast_test
-ast_test_SOURCES = ast_test.c
-
-#ast_test_LDADD = `ast_link`
-# Expand ast_link to avoid libast_pass2, which causes problems for Solaris
-ast_test_LDADD = libast.la libast_pal.la libast_grf_3.2.la libast_wcslib.la libast_grf_2.0.la libast_grf3d.la libast_err.la -lm
diff --git a/ast-5.3-1/Makefile.in b/ast-5.3-1/Makefile.in
deleted file mode 100644
index 6945d04..0000000
--- a/ast-5.3-1/Makefile.in
+++ /dev/null
@@ -1,2800 +0,0 @@
-# Makefile.in generated by automake 1.9.6-starlink from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  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@
-
-
-
-
-
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-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 = astbad$(EXEEXT)
-check_PROGRAMS = ast_test$(EXEEXT)
-DIST_COMMON = $(am__configure_deps) $(dist_bin_SCRIPTS) \
-	$(dist_noinst_SCRIPTS) $(dist_pkgdata_DATA) \
-	$(dist_starnews_DATA) $(include_HEADERS) $(include_MESSAGES) \
-	$(srcdir)/AST_ERR $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/ast_cpp.in $(srcdir)/ast_err.h $(srcdir)/ast_link.in \
-	$(srcdir)/component.xml.in $(srcdir)/config.h.in \
-	$(srcdir)/f77.h.in $(srcdir)/fac_1521_err \
-	$(srcdir)/object.h.in $(stardocs_DATA) $(top_srcdir)/configure \
-	COPYING.LIB compile config.guess config.sub depcomp install-sh \
-	ltmain.sh missing
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(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 configure.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = component.xml ast_link object.h f77.h ast_cpp
-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 = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
-	"$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" \
-	"$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(starnewsdir)" \
-	$(DESTDIR)$(stardocsdir) "$(DESTDIR)$(starfacsdir)" \
-	"$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"
-libLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(lib_LTLIBRARIES)
-libast_la_LIBADD =
-am__objects_1 = libast_la-axis.lo libast_la-box.lo libast_la-c2f77.lo \
-	libast_la-channel.lo libast_la-circle.lo libast_la-cmpframe.lo \
-	libast_la-cmpmap.lo libast_la-cmpregion.lo \
-	libast_la-dsbspecframe.lo libast_la-dssmap.lo \
-	libast_la-ellipse.lo libast_la-error.lo libast_la-fbox.lo \
-	libast_la-fchannel.lo libast_la-fcircle.lo \
-	libast_la-fcmpframe.lo libast_la-fcmpmap.lo \
-	libast_la-fcmpregion.lo libast_la-fdsbspecframe.lo \
-	libast_la-fdssmap.lo libast_la-fellipse.lo libast_la-ferror.lo \
-	libast_la-ffitschan.lo libast_la-ffluxframe.lo \
-	libast_la-fframe.lo libast_la-fframeset.lo \
-	libast_la-fgrismmap.lo libast_la-finterval.lo \
-	libast_la-fintramap.lo libast_la-fitschan.lo \
-	libast_la-fkeymap.lo libast_la-flutmap.lo \
-	libast_la-fluxframe.lo libast_la-fmapping.lo \
-	libast_la-fmathmap.lo libast_la-fmatrixmap.lo \
-	libast_la-fnullregion.lo libast_la-fobject.lo \
-	libast_la-fpcdmap.lo libast_la-fpermmap.lo libast_la-fplot.lo \
-	libast_la-fplot3d.lo libast_la-fpointlist.lo \
-	libast_la-fpolygon.lo libast_la-fpolymap.lo \
-	libast_la-fprism.lo libast_la-frame.lo libast_la-frameset.lo \
-	libast_la-fratemap.lo libast_la-fnormmap.lo \
-	libast_la-fregion.lo libast_la-fshiftmap.lo \
-	libast_la-fskyframe.lo libast_la-fslamap.lo \
-	libast_la-fspecfluxframe.lo libast_la-fspecframe.lo \
-	libast_la-fspecmap.lo libast_la-ftimeframe.lo \
-	libast_la-ftimemap.lo libast_la-fsphmap.lo \
-	libast_la-ftranmap.lo libast_la-fselectormap.lo \
-	libast_la-fswitchmap.lo libast_la-funitmap.lo \
-	libast_la-fwcsmap.lo libast_la-fwinmap.lo \
-	libast_la-fxmlchan.lo libast_la-fzoommap.lo \
-	libast_la-globals.lo libast_la-grismmap.lo \
-	libast_la-interval.lo libast_la-intramap.lo \
-	libast_la-keymap.lo libast_la-loader.lo libast_la-lutmap.lo \
-	libast_la-mapping.lo libast_la-mathmap.lo \
-	libast_la-matrixmap.lo libast_la-memory.lo \
-	libast_la-nullregion.lo libast_la-object.lo \
-	libast_la-pcdmap.lo libast_la-permmap.lo libast_la-plot.lo \
-	libast_la-plot3d.lo libast_la-pointlist.lo \
-	libast_la-pointset.lo libast_la-polygon.lo \
-	libast_la-polymap.lo libast_la-prism.lo libast_la-normmap.lo \
-	libast_la-ratemap.lo libast_la-region.lo libast_la-shiftmap.lo \
-	libast_la-skyaxis.lo libast_la-skyframe.lo libast_la-slamap.lo \
-	libast_la-specfluxframe.lo libast_la-specframe.lo \
-	libast_la-specmap.lo libast_la-sphmap.lo libast_la-stc.lo \
-	libast_la-stcresourceprofile.lo libast_la-stcsearchlocation.lo \
-	libast_la-stccatalogentrylocation.lo \
-	libast_la-stcobsdatalocation.lo libast_la-stcschan.lo \
-	libast_la-fstc.lo libast_la-fstcresourceprofile.lo \
-	libast_la-fstcsearchlocation.lo \
-	libast_la-fstccatalogentrylocation.lo \
-	libast_la-fstcobsdatalocation.lo libast_la-fstcschan.lo \
-	libast_la-timeframe.lo libast_la-timemap.lo \
-	libast_la-tranmap.lo libast_la-selectormap.lo \
-	libast_la-switchmap.lo libast_la-unit.lo libast_la-unitmap.lo \
-	libast_la-wcsmap.lo libast_la-winmap.lo libast_la-xml.lo \
-	libast_la-xmlchan.lo libast_la-zoommap.lo
-am__objects_2 =
-am__objects_3 = $(am__objects_2)
-am_libast_la_OBJECTS = $(am__objects_1) $(am__objects_3) \
-	$(am__objects_2)
-nodist_libast_la_OBJECTS =
-libast_la_OBJECTS = $(am_libast_la_OBJECTS) \
-	$(nodist_libast_la_OBJECTS)
-libast_drama_la_LIBADD =
-am_libast_drama_la_OBJECTS = libast_drama_la-err_drama.lo
-libast_drama_la_OBJECTS = $(am_libast_drama_la_OBJECTS)
-libast_ems_la_LIBADD =
-am_libast_ems_la_OBJECTS = libast_ems_la-err_ems.lo
-libast_ems_la_OBJECTS = $(am_libast_ems_la_OBJECTS)
-libast_err_la_LIBADD =
-am_libast_err_la_OBJECTS = libast_err_la-err_null.lo
-libast_err_la_OBJECTS = $(am_libast_err_la_OBJECTS)
-libast_grf3d_la_LIBADD =
-am_libast_grf3d_la_OBJECTS = libast_grf3d_la-grf3d.lo
-libast_grf3d_la_OBJECTS = $(am_libast_grf3d_la_OBJECTS)
-libast_grf_2_0_la_LIBADD =
-am_libast_grf_2_0_la_OBJECTS = grf_2.0.lo
-libast_grf_2_0_la_OBJECTS = $(am_libast_grf_2_0_la_OBJECTS)
-libast_grf_3_2_la_LIBADD =
-am_libast_grf_3_2_la_OBJECTS = grf_3.2.lo
-libast_grf_3_2_la_OBJECTS = $(am_libast_grf_3_2_la_OBJECTS)
-libast_pal_la_LIBADD =
-am_libast_pal_la_OBJECTS = libast_pal_la-pal.lo
-libast_pal_la_OBJECTS = $(am_libast_pal_la_OBJECTS)
-libast_pgplot_la_LIBADD =
-am_libast_pgplot_la_OBJECTS = libast_pgplot_la-grf_pgplot.lo
-libast_pgplot_la_OBJECTS = $(am_libast_pgplot_la_OBJECTS)
-libast_pgplot3d_la_LIBADD =
-am_libast_pgplot3d_la_OBJECTS = libast_pgplot3d_la-grf3d_pgplot.lo
-libast_pgplot3d_la_OBJECTS = $(am_libast_pgplot3d_la_OBJECTS)
-libast_wcslib_la_LIBADD =
-am_libast_wcslib_la_OBJECTS = libast_wcslib_la-proj.lo \
-	libast_wcslib_la-wcstrig.lo libast_wcslib_la-tpn.lo
-libast_wcslib_la_OBJECTS = $(am_libast_wcslib_la_OBJECTS)
-PROGRAMS = $(noinst_PROGRAMS)
-am_ast_test_OBJECTS = ast_test.$(OBJEXT)
-ast_test_OBJECTS = $(am_ast_test_OBJECTS)
-ast_test_DEPENDENCIES = libast.la libast_pal.la libast_grf_3.2.la \
-	libast_wcslib.la libast_grf_2.0.la libast_grf3d.la \
-	libast_err.la
-am_astbad_OBJECTS = astbad.$(OBJEXT)
-astbad_OBJECTS = $(am_astbad_OBJECTS)
-astbad_LDADD = $(LDADD)
-binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-SCRIPTS = $(bin_SCRIPTS) $(dist_bin_SCRIPTS) $(dist_noinst_SCRIPTS) \
-	$(noinst_SCRIPTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) \
-	$(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(STAR_LDFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libast_la_SOURCES) $(nodist_libast_la_SOURCES) \
-	$(libast_drama_la_SOURCES) $(libast_ems_la_SOURCES) \
-	$(libast_err_la_SOURCES) $(libast_grf3d_la_SOURCES) \
-	$(libast_grf_2_0_la_SOURCES) $(libast_grf_3_2_la_SOURCES) \
-	$(libast_pal_la_SOURCES) $(libast_pgplot_la_SOURCES) \
-	$(libast_pgplot3d_la_SOURCES) $(libast_wcslib_la_SOURCES) \
-	$(ast_test_SOURCES) $(astbad_SOURCES)
-DIST_SOURCES = $(libast_la_SOURCES) $(libast_drama_la_SOURCES) \
-	$(libast_ems_la_SOURCES) $(libast_err_la_SOURCES) \
-	$(libast_grf3d_la_SOURCES) $(libast_grf_2_0_la_SOURCES) \
-	$(libast_grf_3_2_la_SOURCES) $(libast_pal_la_SOURCES) \
-	$(libast_pgplot_la_SOURCES) $(libast_pgplot3d_la_SOURCES) \
-	$(libast_wcslib_la_SOURCES) $(ast_test_SOURCES) \
-	$(astbad_SOURCES)
-includeMESSAGES_INSTALL = $(INSTALL_MESSAGE)
-MESSAGES = $(include_MESSAGES)
-INSTALL_MESSAGE = $(INSTALL_DATA)
-dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
-dist_starnewsDATA_INSTALL = $(INSTALL_DATA)
-stardocsDATA_INSTALL = $(INSTALL_DATA)
-starfacsDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(dist_pkgdata_DATA) $(dist_starnews_DATA) $(stardocs_DATA) \
-	$(starfacs_DATA)
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-nodist_includeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS) $(nodist_include_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-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); }; }
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-# Use AM_MAKEFLAGS to pass the value of the MANIFEST variable into
-# submakes (not all makes do this automatically).  This can still be
-# overridden with a setting of this variable on the $(MAKE) command
-# line.  I think we really shouldn't be setting this variable -- if
-# it causes a problem for anyone, we should edit a new variable in to
-# the .am templates.
-AM_MAKEFLAGS = MANIFEST=$(MANIFEST)
-REAL_INSTALL = install-am
-# Set to : to emit manifest lines, too
-# (don't actually do this here -- it's done within install-manifest below).
-MANIFEST = false
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-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@
-C_FC_FCLINK_MAGIC = @C_FC_FCLINK_MAGIC@
-C_FC_PPFC_FCLINK_MAGIC = @C_FC_PPFC_FCLINK_MAGIC@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FCFLAGS = @FCFLAGS@
-FCLIBS = @FCLIBS@
-FFLAGS = @FFLAGS@
-GIT = @GIT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LATEX2DVI = @LATEX2DVI@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MESSGEN = @MESSGEN@
-NOPIC_FALSE = @NOPIC_FALSE@
-NOPIC_TRUE = @NOPIC_TRUE@
-NOTHREADS_FALSE = @NOTHREADS_FALSE@
-NOTHREADS_TRUE = @NOTHREADS_TRUE@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKAGE_VERSION_INTEGER = @PACKAGE_VERSION_INTEGER@
-PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
-PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
-PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PAX = @PAX@
-PERL = @PERL@
-PREDIST = @PREDIST@
-PROLAT = @PROLAT@
-RANLIB = @RANLIB@
-REAL_FUNCTION_TYPE = @REAL_FUNCTION_TYPE@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STAR2HTML = @STAR2HTML@
-STARLINK = @STARLINK@
-STAR_CPPFLAGS = @STAR_CPPFLAGS@
-STAR_DEPENDENCIES_ATTRIBUTES = @STAR_DEPENDENCIES_ATTRIBUTES@
-STAR_DEPENDENCIES_CHILDREN = @STAR_DEPENDENCIES_CHILDREN@
-STAR_DOCUMENTATION = @STAR_DOCUMENTATION@
-STAR_FCFLAGS = @STAR_FCFLAGS@
-STAR_FFLAGS = @STAR_FFLAGS@
-STAR_LATEX_DOCUMENTATION = @STAR_LATEX_DOCUMENTATION@
-STAR_LDFLAGS = @STAR_LDFLAGS@
-STAR_MANIFEST_DIR = @STAR_MANIFEST_DIR@
-STAR_SOURCE_ROOT_DIR = @STAR_SOURCE_ROOT_DIR@
-STRIP = @STRIP@
-TAR = @TAR@
-THREADS = @THREADS@
-TRAIL_TYPE = @TRAIL_TYPE@
-VERSION = @VERSION@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-ac_ct_FC = @ac_ct_FC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-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@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-stardocsdir = @stardocsdir@
-staretcdir = @staretcdir@
-starexamplesdir = @starexamplesdir@
-starfacsdir = @starfacsdir@
-starhelpdir = @starhelpdir@
-starnewsdir = @starnewsdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-
-# First declare various groups of files.  These were initially extracted
-# from the grp.make file, as constructed by the SDT newdev command
-GRP_C_ROUTINES = \
-    axis.c \
-    box.c \
-    c2f77.c \
-    channel.c \
-    circle.c \
-    cmpframe.c \
-    cmpmap.c \
-    cmpregion.c \
-    dsbspecframe.c \
-    dssmap.c \
-    ellipse.c \
-    error.c \
-    fbox.c \
-    fchannel.c \
-    fcircle.c \
-    fcmpframe.c \
-    fcmpmap.c \
-    fcmpregion.c \
-    fdsbspecframe.c \
-    fdssmap.c \
-    fellipse.c \
-    ferror.c \
-    ffitschan.c \
-    ffluxframe.c \
-    fframe.c \
-    fframeset.c \
-    fgrismmap.c \
-    finterval.c \
-    fintramap.c \
-    fitschan.c \
-    fkeymap.c \
-    flutmap.c \
-    fluxframe.c \
-    fmapping.c \
-    fmathmap.c \
-    fmatrixmap.c \
-    fnullregion.c \
-    fobject.c \
-    fpcdmap.c \
-    fpermmap.c \
-    fplot.c \
-    fplot3d.c \
-    fpointlist.c \
-    fpolygon.c \
-    fpolymap.c \
-    fprism.c \
-    frame.c \
-    frameset.c \
-    fratemap.c \
-    fnormmap.c \
-    fregion.c \
-    fshiftmap.c \
-    fskyframe.c \
-    fslamap.c \
-    fspecfluxframe.c \
-    fspecframe.c \
-    fspecmap.c \
-    ftimeframe.c \
-    ftimemap.c \
-    fsphmap.c \
-    ftranmap.c \
-    fselectormap.c \
-    fswitchmap.c \
-    funitmap.c \
-    fwcsmap.c \
-    fwinmap.c \
-    fxmlchan.c \
-    fzoommap.c \
-    globals.c \
-    grismmap.c \
-    interval.c \
-    intramap.c \
-    keymap.c \
-    loader.c \
-    lutmap.c \
-    mapping.c \
-    mathmap.c \
-    matrixmap.c \
-    memory.c \
-    nullregion.c \
-    object.c \
-    pcdmap.c \
-    permmap.c \
-    plot.c \
-    plot3d.c \
-    pointlist.c \
-    pointset.c \
-    polygon.c \
-    polymap.c \
-    prism.c \
-    normmap.c \
-    ratemap.c \
-    region.c \
-    shiftmap.c \
-    skyaxis.c \
-    skyframe.c \
-    slamap.c \
-    specfluxframe.c \
-    specframe.c \
-    specmap.c \
-    sphmap.c \
-    stc.c \
-    stcresourceprofile.c \
-    stcsearchlocation.c \
-    stccatalogentrylocation.c \
-    stcobsdatalocation.c \
-    stcschan.c \
-    fstc.c \
-    fstcresourceprofile.c \
-    fstcsearchlocation.c \
-    fstccatalogentrylocation.c \
-    fstcobsdatalocation.c \
-    fstcschan.c \
-    timeframe.c \
-    timemap.c \
-    tranmap.c \
-    selectormap.c \
-    switchmap.c \
-    unit.c \
-    unitmap.c \
-    wcsmap.c \
-    winmap.c \
-    xml.c \
-    xmlchan.c \
-    zoommap.c
-
-
-# Header files which contribute to the "ast.h" file, organised to correspond
-# with the class hierarchy.
-AST_H_FILES = \
-    xml.h \
-    wcstrig.h \
-    proj.h \
-    memory.h \
-    error.h \
-    globals.h \
-    unit.h \
-    ast_err.h \
-    version.h \
-    object.h \
-       keymap.h \
-       pointset.h \
-       axis.h \
-          skyaxis.h \
-       mapping.h \
-          cmpmap.h \
-          dssmap.h \
-          grismmap.h \
-          intramap.h \
-          lutmap.h \
-          mathmap.h \
-          matrixmap.h \
-          pcdmap.h \
-          permmap.h \
-          polymap.h \
-          ratemap.h \
-          normmap.h \
-          shiftmap.h \
-          slamap.h \
-          specmap.h \
-          sphmap.h \
-          timemap.h \
-          selectormap.h \
-          switchmap.h \
-          tranmap.h \
-          unitmap.h \
-          wcsmap.h \
-          winmap.h \
-          zoommap.h \
-          frame.h \
-             cmpframe.h \
-                specfluxframe.h \
-             fluxframe.h \
-             frameset.h \
-                plot.h \
-                   plot3d.h \
-             skyframe.h \
-             specframe.h \
-                dsbspecframe.h \
-             region.h \
-                box.h \
-                circle.h \
-                cmpregion.h \
-                ellipse.h \
-                interval.h \
-                nullregion.h \
-                pointlist.h \
-                polygon.h \
-                prism.h \
-                stc.h \
-                    stcresourceprofile.h \
-                    stcsearchlocation.h \
-                    stccatalogentrylocation.h \
-                    stcobsdatalocation.h \
-             timeframe.h \
-       channel.h \
-          fitschan.h \
-          stcschan.h \
-          xmlchan.h 
-
-
-# All the (C) include files required to build the library.
-GRP_C_INCLUDE_FILES = \
-    $(AST_H_FILES) \
-    c2f77.h \
-    ems.h \
-    err.h \
-    Ers.h \
-    f77.h \
-    grf.h \
-    grf3d.h \
-    pg3d.h \
-    loader.h \
-    skyaxis.h \
-    pal.h \
-    slamac.h \
-    stc.h \
-    stcresourceprofile.h \
-    stcsearchlocation.h \
-    stccatalogentrylocation.h \
-    stcobsdatalocation.h \
-    wcsmath.h \
-    wcstrig.h \
-    xmlchan.h
-
-
-# The following list should include AST_PAR, but that must not be
-# distributed, and so it is listed separately in
-# nodist_libast_la_SOURCES below.
-GRP_F_INCLUDE_FILES = \
-    GRF_PAR \
-    AST_ERR
-
-DOCUMENTATION_PRODUCTS = $(PAPER_DOCUMENTATION) $(HYPER_DOCUMENTATION)
-PAPER_DOCUMENTATION = sun210.tex sun211.tex sun210.ps sun211.ps
-HYPER_DOCUMENTATION = sun210.htx_tar sun211.htx_tar
-POSTSCRIPT_FIGURES = \
-    cmpframe.eps \
-    complex.eps \
-    frames.eps \
-    frameset.eps \
-    fronta.eps \
-    fronta_bw.eps \
-    frontb.eps \
-    frontb_bw.eps \
-    frontc.eps \
-    frontc_bw.eps \
-    fsalign.eps \
-    fsconvert.eps \
-    fsexample.eps \
-    fsmerge.eps \
-    fsremap.eps \
-    gridplot.eps \
-    gridplot_bw.eps \
-    mapping.eps \
-    overgrid.eps \
-    overgrid_bw.eps \
-    parallel.eps \
-    series.eps \
-    simpexamp.eps
-
-WCSLIB_FILES = \
-    COPYING.LIB \
-    proj.c \
-    tpn.c \
-    proj.h \
-    wcstrig.c \
-    wcsmath.h \
-    wcstrig.h
-
-PAL_FILES = \
-    COPYING.LIB \
-    pal.c \
-    pal.h \
-    slamac.h
-
-bin_SCRIPTS = ast_link
-dist_bin_SCRIPTS = ast_link_adam
-noinst_SCRIPTS = ast_cpp
-dist_noinst_SCRIPTS = makeh
-# Scripts are not distributed by default (since they might be derived objects)
-# Add these to the distribution below.  In fact, it would be useful
-# and straightforward  to make ast_link{,_adam} derived, since they
-# could then have installation directories painlessly edited in to
-# them.  This might be a requirement for scripts which supported
-# linking against shared libraries.
-
-# Headers required by library users.  Both of the following lines
-# indicate headers which are installed.
-include_HEADERS = GRF_PAR grf.h
-# Following are generated, so should not be distributed.
-nodist_include_HEADERS = ast.h AST_PAR
-include_MESSAGES = AST_ERR ast_err.h
-lib_LTLIBRARIES = \
-    libast.la \
-    libast_err.la \
-    libast_ems.la \
-    libast_drama.la \
-    libast_grf3d.la \
-    libast_grf_2.0.la \
-    libast_grf_3.2.la \
-    libast_pgplot.la \
-    libast_pgplot3d.la \
-    libast_pal.la \
-    libast_wcslib.la
-
-stardocs_DATA = @STAR_LATEX_DOCUMENTATION@
-dist_starnews_DATA = ast.news
-dist_pkgdata_DATA = LICENCE
-
-# Make all library code position independent by default. This is handy for
-# creating shareable libraries from the static ones (Java JNI libraries). 
-# Note we do not simply set the AM_CFLAGS variable, as this would also
-# apply to programs compiled without using libtool, possibly causing the
-# compilation to fail.
- at NOPIC_FALSE@@NOTHREADS_FALSE at libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic -DTHREAD_SAFE
- at NOPIC_TRUE@@NOTHREADS_FALSE at libast_la_CFLAGS = $(AM_CFLAGS) -DTHREAD_SAFE
- at NOTHREADS_TRUE@libast_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_err_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_ems_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_drama_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_grf3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_grf_2.0_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_grf_3.2_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_pgplot_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_pgplot3d_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_pal_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
- at NOPIC_FALSE@libast_wcslib_la_CFLAGS = $(AM_CFLAGS) -prefer-pic
-
-#  The module containing the main AST classes
-libast_la_SOURCES = \
-    $(GRP_C_ROUTINES) \
-    $(GRP_C_INCLUDE_FILES) \
-    $(GRP_F_INCLUDE_FILES) \
-    ast_err.h
-
-
-# AST_PAR is really part of GRP_F_INCLUDE_FILES, but it must not be
-# distributed, so list it separately.
-nodist_libast_la_SOURCES = \
-    ast.h \
-    AST_PAR
-
-
-#  The default error reporting module.
-libast_err_la_SOURCES = err_null.c
-
-#  The error reporting module that uses EMS to deliver errors.
-libast_ems_la_SOURCES = err_ems.c
-
-#  The error reporting module that uses DRAMA Ers to deliver errors.
-libast_drama_la_SOURCES = err_drama.c
-
-#  The module containing null implementations of the 3D graphics routines 
-#  required by AST 
-libast_grf3d_la_SOURCES = grf3d.c 
-
-#  The module containing null implementations of the graphics routines 
-#  required by AST V2.0
-libast_grf_2_0_la_SOURCES = grf_2.0.c 
-
-#  The module containing null implementations of the graphics routines 
-#  added by AST V3.2 and not present in V2.0
-libast_grf_3_2_la_SOURCES = grf_3.2.c 
-
-#  The graphics module that uses PGPLOT for 2D graphical output.
-libast_pgplot_la_SOURCES = grf_pgplot.c 
-
-#  The graphics module that uses PGPLOT for 3D graphical output.
-libast_pgplot3d_la_SOURCES = grf3d_pgplot.c
-
-#  Modules adapted from the wcslib library.
-libast_wcslib_la_SOURCES = proj.c wcstrig.c tpn.c
-
-#  Modules supplied by tpoint.
-libast_pal_la_SOURCES = pal.c
-
-# The following files are built by the targets in this makefile.
-MAINTAINERCLEANFILES = version.h builddocs addversion \
-	ast.h $(DOCUMENTATION_PRODUCTS)
-
-CLEANFILES = AST_PAR ast.h
-astbad_SOURCES = astbad.c pointset.h
-
-# ast_link is generated from ast_link.in; ast_link_adam does not
-# need configuration, and so is not mentioned in AC_CONFIG_FILES within
-# configure.ac, and so is not distributed automatically.
-#
-# makeh is required in order to build ast.h after distribution (see below).
-EXTRA_DIST = ast_par.source sun210_figures sun211_figures
-
-# AST_ERR and ast_err.h are `generated source files', and so must be
-# generated before any other compilations are done.  Note that these
-# files are generated on the distribution host, and so this
-# declaration has no effect post-distribution.
-#
-# AST_PAR is also a generated source file, but it should _not_ be
-# included in the list of BUILT_SOURCES, otherwise `make' tries to make
-# it before it makes the `astbad' program it depends on.  Instead,
-# just rely on the dependencies expressed in the main body above to
-# have AST_PAR built before it is needed.
-#
-# version.h is included by object.h, and thus indirectly by most modules.
-# It's most straightforward to build it at the beginning.
-BUILT_SOURCES = AST_ERR ast_err.h version.h
-
-# Make pre-distribution files.  These are files which are required for
-# building the distribution, but are not themselves distributed.
-# The source files here should be mentioned in STAR_PREDIST_SOURCES in
-# configure.ac
- at PREDIST@predist_subs = sed \
- at PREDIST@    -e 's, at PACKAGE_VERSION\@,$(PACKAGE_VERSION),' \
- at PREDIST@    -e 's, at PACKAGE_VERSION_MAJOR\@,$(PACKAGE_VERSION_MAJOR),' \
- at PREDIST@    -e 's, at PACKAGE_VERSION_MINOR\@,$(PACKAGE_VERSION_MINOR),' \
- at PREDIST@    -e 's, at PACKAGE_VERSION_RELEASE\@,$(PACKAGE_VERSION_RELEASE),' \
- at PREDIST@    -e 's, at PERL\@,$(PERL),'
-
-
-# Installation check
-TESTS = ast_test
-ast_test_SOURCES = ast_test.c
-
-#ast_test_LDADD = `ast_link`
-# Expand ast_link to avoid libast_pass2, which causes problems for Solaris
-ast_test_LDADD = libast.la libast_pal.la libast_grf_3.2.la libast_wcslib.la libast_grf_2.0.la libast_grf3d.la libast_err.la -lm
-starfacs_DATA = fac_1521_err
-all: $(BUILT_SOURCES) config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .dvi .htx_tar .lo .o .obj .pdf .ps .tex
-am--refresh:
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --startree '; \
-	      cd $(srcdir) && $(AUTOMAKE) --startree  \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --startree  Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --startree  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:  $(am__configure_deps)
-	cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
-config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) stamp-h1; \
-	else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in:  $(am__configure_deps) 
-	cd $(top_srcdir) && $(AUTOHEADER)
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-component.xml: $(top_builddir)/config.status $(srcdir)/component.xml.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-ast_link: $(top_builddir)/config.status $(srcdir)/ast_link.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-object.h: $(top_builddir)/config.status $(srcdir)/object.h.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-f77.h: $(top_builddir)/config.status $(srcdir)/f77.h.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-ast_cpp: $(top_builddir)/config.status $(srcdir)/ast_cpp.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    f=$(am__strip_dir) \
-	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-	    if $(MANIFEST); then \
-	      echo "MANIFEST:$(DESTDIR)$(libdir)/$$f"; \
-	      expr $$p : '.*\.la$$' >/dev/null || \
-		{ echo "Installing non-la file $$p!"; exit 1; }; \
-	      (. ./$$p; \
-		if test -n "$$library_names"; then \
-		  for l in $$library_names; do \
-		    echo "MANIFEST:$(DESTDIR)$$libdir/$$l"; \
-		  done; \
-		fi; \
-		if test -n "$$old_library"; then \
-		  echo "MANIFEST:$(DESTDIR)$$libdir/$$old_library"; \
-		else :; fi; \
-              ); \
-	    else :; fi; \
-	  else :; fi; \
-	done
-
-uninstall-libLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  p=$(am__strip_dir) \
-	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-	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
-libast.la: $(libast_la_OBJECTS) $(libast_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_la_LDFLAGS) $(libast_la_OBJECTS) $(libast_la_LIBADD)  $(LIBS)
-libast_drama.la: $(libast_drama_la_OBJECTS) $(libast_drama_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_drama_la_LDFLAGS) $(libast_drama_la_OBJECTS) $(libast_drama_la_LIBADD)  $(LIBS)
-libast_ems.la: $(libast_ems_la_OBJECTS) $(libast_ems_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_ems_la_LDFLAGS) $(libast_ems_la_OBJECTS) $(libast_ems_la_LIBADD)  $(LIBS)
-libast_err.la: $(libast_err_la_OBJECTS) $(libast_err_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_err_la_LDFLAGS) $(libast_err_la_OBJECTS) $(libast_err_la_LIBADD)  $(LIBS)
-libast_grf3d.la: $(libast_grf3d_la_OBJECTS) $(libast_grf3d_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_grf3d_la_LDFLAGS) $(libast_grf3d_la_OBJECTS) $(libast_grf3d_la_LIBADD)  $(LIBS)
-libast_grf_2.0.la: $(libast_grf_2_0_la_OBJECTS) $(libast_grf_2_0_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_grf_2_0_la_LDFLAGS) $(libast_grf_2_0_la_OBJECTS) $(libast_grf_2_0_la_LIBADD)  $(LIBS)
-libast_grf_3.2.la: $(libast_grf_3_2_la_OBJECTS) $(libast_grf_3_2_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_grf_3_2_la_LDFLAGS) $(libast_grf_3_2_la_OBJECTS) $(libast_grf_3_2_la_LIBADD)  $(LIBS)
-libast_pal.la: $(libast_pal_la_OBJECTS) $(libast_pal_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_pal_la_LDFLAGS) $(libast_pal_la_OBJECTS) $(libast_pal_la_LIBADD)  $(LIBS)
-libast_pgplot.la: $(libast_pgplot_la_OBJECTS) $(libast_pgplot_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_pgplot_la_LDFLAGS) $(libast_pgplot_la_OBJECTS) $(libast_pgplot_la_LIBADD)  $(LIBS)
-libast_pgplot3d.la: $(libast_pgplot3d_la_OBJECTS) $(libast_pgplot3d_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_pgplot3d_la_LDFLAGS) $(libast_pgplot3d_la_OBJECTS) $(libast_pgplot3d_la_LIBADD)  $(LIBS)
-libast_wcslib.la: $(libast_wcslib_la_OBJECTS) $(libast_wcslib_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libast_wcslib_la_LDFLAGS) $(libast_wcslib_la_OBJECTS) $(libast_wcslib_la_LIBADD)  $(LIBS)
-
-clean-checkPROGRAMS:
-	@list='$(check_PROGRAMS)'; for p in $$list; do \
-	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  echo " rm -f $$p $$f"; \
-	  rm -f $$p $$f ; \
-	done
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
-	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  echo " rm -f $$p $$f"; \
-	  rm -f $$p $$f ; \
-	done
-ast_test$(EXEEXT): $(ast_test_OBJECTS) $(ast_test_DEPENDENCIES) 
-	@rm -f ast_test$(EXEEXT)
-	$(LINK) $(ast_test_LDFLAGS) $(ast_test_OBJECTS) $(ast_test_LDADD) $(LIBS) 
-astbad$(EXEEXT): $(astbad_OBJECTS) $(astbad_DEPENDENCIES) 
-	@rm -f astbad$(EXEEXT)
-	$(LINK) $(astbad_LDFLAGS) $(astbad_OBJECTS) $(astbad_LDADD) $(LIBS) 
-install-binSCRIPTS: $(bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f $$d$$p; then \
-	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	    echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	    $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
-	    $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(bindir)/$$f" || :; \
-	  else :; fi; \
-	done
-
-uninstall-binSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
-install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-	@list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f $$d$$p; then \
-	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	    echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	    $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
-	    $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(bindir)/$$f" || :; \
-	  else :; fi; \
-	done
-
-uninstall-dist_binSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ast_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/astbad.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grf_2.0.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grf_3.2.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_drama_la-err_drama.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_ems_la-err_ems.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_err_la-err_null.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_grf3d_la-grf3d.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-axis.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-box.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-c2f77.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-channel.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-circle.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-cmpframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-cmpmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-cmpregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-dsbspecframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-dssmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ellipse.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-error.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fbox.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fchannel.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcircle.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcmpframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcmpmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fcmpregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fdsbspecframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fdssmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fellipse.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ferror.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ffitschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ffluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fframeset.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fgrismmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-finterval.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fintramap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fitschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fkeymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-flutmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fmapping.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fmathmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fmatrixmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fnormmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fnullregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fobject.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpcdmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpermmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fplot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fplot3d.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpointlist.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpolygon.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fpolymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fprism.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-frame.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-frameset.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fratemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fselectormap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fshiftmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fskyframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fslamap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fspecfluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fspecframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fspecmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fsphmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstccatalogentrylocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcobsdatalocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcresourceprofile.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fstcsearchlocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fswitchmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ftimeframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ftimemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ftranmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-funitmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fwcsmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fwinmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fxmlchan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-fzoommap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-globals.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-grismmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-interval.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-intramap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-keymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-loader.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-lutmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-mapping.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-mathmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-matrixmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-memory.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-normmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-nullregion.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-object.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-pcdmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-permmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-plot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-plot3d.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-pointlist.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-pointset.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-polygon.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-polymap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-prism.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-ratemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-region.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-selectormap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-shiftmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-skyaxis.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-skyframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-slamap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-specfluxframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-specframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-specmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-sphmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stccatalogentrylocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcobsdatalocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcresourceprofile.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcschan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-stcsearchlocation.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-switchmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-timeframe.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-timemap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-tranmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-unit.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-unitmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-wcsmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-winmap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-xml.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-xmlchan.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_la-zoommap.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_pal_la-pal.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_pgplot_la-grf_pgplot.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_wcslib_la-proj.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_wcslib_la-tpn.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libast_wcslib_la-wcstrig.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
- 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@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
- 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@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
- 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 $@ $<
-
-libast_la-axis.lo: axis.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-axis.lo -MD -MP -MF "$(DEPDIR)/libast_la-axis.Tpo" -c -o libast_la-axis.lo `test -f 'axis.c' || echo '$(srcdir)/'`axis.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-axis.Tpo" "$(DEPDIR)/libast_la-axis.Plo"; else rm -f "$(DEPDIR)/libast_la-axis.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='axis.c' object='libast_la-axis.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-axis.lo `test -f 'axis.c' || echo '$(srcdir)/'`axis.c
-
-libast_la-box.lo: box.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-box.lo -MD -MP -MF "$(DEPDIR)/libast_la-box.Tpo" -c -o libast_la-box.lo `test -f 'box.c' || echo '$(srcdir)/'`box.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-box.Tpo" "$(DEPDIR)/libast_la-box.Plo"; else rm -f "$(DEPDIR)/libast_la-box.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='box.c' object='libast_la-box.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-box.lo `test -f 'box.c' || echo '$(srcdir)/'`box.c
-
-libast_la-c2f77.lo: c2f77.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-c2f77.lo -MD -MP -MF "$(DEPDIR)/libast_la-c2f77.Tpo" -c -o libast_la-c2f77.lo `test -f 'c2f77.c' || echo '$(srcdir)/'`c2f77.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-c2f77.Tpo" "$(DEPDIR)/libast_la-c2f77.Plo"; else rm -f "$(DEPDIR)/libast_la-c2f77.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='c2f77.c' object='libast_la-c2f77.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-c2f77.lo `test -f 'c2f77.c' || echo '$(srcdir)/'`c2f77.c
-
-libast_la-channel.lo: channel.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-channel.lo -MD -MP -MF "$(DEPDIR)/libast_la-channel.Tpo" -c -o libast_la-channel.lo `test -f 'channel.c' || echo '$(srcdir)/'`channel.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-channel.Tpo" "$(DEPDIR)/libast_la-channel.Plo"; else rm -f "$(DEPDIR)/libast_la-channel.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='channel.c' object='libast_la-channel.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-channel.lo `test -f 'channel.c' || echo '$(srcdir)/'`channel.c
-
-libast_la-circle.lo: circle.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-circle.lo -MD -MP -MF "$(DEPDIR)/libast_la-circle.Tpo" -c -o libast_la-circle.lo `test -f 'circle.c' || echo '$(srcdir)/'`circle.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-circle.Tpo" "$(DEPDIR)/libast_la-circle.Plo"; else rm -f "$(DEPDIR)/libast_la-circle.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='circle.c' object='libast_la-circle.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-circle.lo `test -f 'circle.c' || echo '$(srcdir)/'`circle.c
-
-libast_la-cmpframe.lo: cmpframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-cmpframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-cmpframe.Tpo" -c -o libast_la-cmpframe.lo `test -f 'cmpframe.c' || echo '$(srcdir)/'`cmpframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-cmpframe.Tpo" "$(DEPDIR)/libast_la-cmpframe.Plo"; else rm -f "$(DEPDIR)/libast_la-cmpframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cmpframe.c' object='libast_la-cmpframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-cmpframe.lo `test -f 'cmpframe.c' || echo '$(srcdir)/'`cmpframe.c
-
-libast_la-cmpmap.lo: cmpmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-cmpmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-cmpmap.Tpo" -c -o libast_la-cmpmap.lo `test -f 'cmpmap.c' || echo '$(srcdir)/'`cmpmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-cmpmap.Tpo" "$(DEPDIR)/libast_la-cmpmap.Plo"; else rm -f "$(DEPDIR)/libast_la-cmpmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cmpmap.c' object='libast_la-cmpmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-cmpmap.lo `test -f 'cmpmap.c' || echo '$(srcdir)/'`cmpmap.c
-
-libast_la-cmpregion.lo: cmpregion.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-cmpregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-cmpregion.Tpo" -c -o libast_la-cmpregion.lo `test -f 'cmpregion.c' || echo '$(srcdir)/'`cmpregion.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-cmpregion.Tpo" "$(DEPDIR)/libast_la-cmpregion.Plo"; else rm -f "$(DEPDIR)/libast_la-cmpregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cmpregion.c' object='libast_la-cmpregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-cmpregion.lo `test -f 'cmpregion.c' || echo '$(srcdir)/'`cmpregion.c
-
-libast_la-dsbspecframe.lo: dsbspecframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-dsbspecframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-dsbspecframe.Tpo" -c -o libast_la-dsbspecframe.lo `test -f 'dsbspecframe.c' || echo '$(srcdir)/'`dsbspecframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-dsbspecframe.Tpo" "$(DEPDIR)/libast_la-dsbspecframe.Plo"; else rm -f "$(DEPDIR)/libast_la-dsbspecframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dsbspecframe.c' object='libast_la-dsbspecframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-dsbspecframe.lo `test -f 'dsbspecframe.c' || echo '$(srcdir)/'`dsbspecframe.c
-
-libast_la-dssmap.lo: dssmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-dssmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-dssmap.Tpo" -c -o libast_la-dssmap.lo `test -f 'dssmap.c' || echo '$(srcdir)/'`dssmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-dssmap.Tpo" "$(DEPDIR)/libast_la-dssmap.Plo"; else rm -f "$(DEPDIR)/libast_la-dssmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dssmap.c' object='libast_la-dssmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-dssmap.lo `test -f 'dssmap.c' || echo '$(srcdir)/'`dssmap.c
-
-libast_la-ellipse.lo: ellipse.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ellipse.lo -MD -MP -MF "$(DEPDIR)/libast_la-ellipse.Tpo" -c -o libast_la-ellipse.lo `test -f 'ellipse.c' || echo '$(srcdir)/'`ellipse.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ellipse.Tpo" "$(DEPDIR)/libast_la-ellipse.Plo"; else rm -f "$(DEPDIR)/libast_la-ellipse.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ellipse.c' object='libast_la-ellipse.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ellipse.lo `test -f 'ellipse.c' || echo '$(srcdir)/'`ellipse.c
-
-libast_la-error.lo: error.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-error.lo -MD -MP -MF "$(DEPDIR)/libast_la-error.Tpo" -c -o libast_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-error.Tpo" "$(DEPDIR)/libast_la-error.Plo"; else rm -f "$(DEPDIR)/libast_la-error.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='error.c' object='libast_la-error.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c
-
-libast_la-fbox.lo: fbox.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fbox.lo -MD -MP -MF "$(DEPDIR)/libast_la-fbox.Tpo" -c -o libast_la-fbox.lo `test -f 'fbox.c' || echo '$(srcdir)/'`fbox.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fbox.Tpo" "$(DEPDIR)/libast_la-fbox.Plo"; else rm -f "$(DEPDIR)/libast_la-fbox.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fbox.c' object='libast_la-fbox.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fbox.lo `test -f 'fbox.c' || echo '$(srcdir)/'`fbox.c
-
-libast_la-fchannel.lo: fchannel.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fchannel.lo -MD -MP -MF "$(DEPDIR)/libast_la-fchannel.Tpo" -c -o libast_la-fchannel.lo `test -f 'fchannel.c' || echo '$(srcdir)/'`fchannel.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fchannel.Tpo" "$(DEPDIR)/libast_la-fchannel.Plo"; else rm -f "$(DEPDIR)/libast_la-fchannel.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fchannel.c' object='libast_la-fchannel.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fchannel.lo `test -f 'fchannel.c' || echo '$(srcdir)/'`fchannel.c
-
-libast_la-fcircle.lo: fcircle.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcircle.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcircle.Tpo" -c -o libast_la-fcircle.lo `test -f 'fcircle.c' || echo '$(srcdir)/'`fcircle.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fcircle.Tpo" "$(DEPDIR)/libast_la-fcircle.Plo"; else rm -f "$(DEPDIR)/libast_la-fcircle.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fcircle.c' object='libast_la-fcircle.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcircle.lo `test -f 'fcircle.c' || echo '$(srcdir)/'`fcircle.c
-
-libast_la-fcmpframe.lo: fcmpframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcmpframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcmpframe.Tpo" -c -o libast_la-fcmpframe.lo `test -f 'fcmpframe.c' || echo '$(srcdir)/'`fcmpframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fcmpframe.Tpo" "$(DEPDIR)/libast_la-fcmpframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fcmpframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fcmpframe.c' object='libast_la-fcmpframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcmpframe.lo `test -f 'fcmpframe.c' || echo '$(srcdir)/'`fcmpframe.c
-
-libast_la-fcmpmap.lo: fcmpmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcmpmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcmpmap.Tpo" -c -o libast_la-fcmpmap.lo `test -f 'fcmpmap.c' || echo '$(srcdir)/'`fcmpmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fcmpmap.Tpo" "$(DEPDIR)/libast_la-fcmpmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fcmpmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fcmpmap.c' object='libast_la-fcmpmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcmpmap.lo `test -f 'fcmpmap.c' || echo '$(srcdir)/'`fcmpmap.c
-
-libast_la-fcmpregion.lo: fcmpregion.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fcmpregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-fcmpregion.Tpo" -c -o libast_la-fcmpregion.lo `test -f 'fcmpregion.c' || echo '$(srcdir)/'`fcmpregion.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fcmpregion.Tpo" "$(DEPDIR)/libast_la-fcmpregion.Plo"; else rm -f "$(DEPDIR)/libast_la-fcmpregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fcmpregion.c' object='libast_la-fcmpregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fcmpregion.lo `test -f 'fcmpregion.c' || echo '$(srcdir)/'`fcmpregion.c
-
-libast_la-fdsbspecframe.lo: fdsbspecframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fdsbspecframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fdsbspecframe.Tpo" -c -o libast_la-fdsbspecframe.lo `test -f 'fdsbspecframe.c' || echo '$(srcdir)/'`fdsbspecframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fdsbspecframe.Tpo" "$(DEPDIR)/libast_la-fdsbspecframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fdsbspecframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdsbspecframe.c' object='libast_la-fdsbspecframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fdsbspecframe.lo `test -f 'fdsbspecframe.c' || echo '$(srcdir)/'`fdsbspecframe.c
-
-libast_la-fdssmap.lo: fdssmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fdssmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fdssmap.Tpo" -c -o libast_la-fdssmap.lo `test -f 'fdssmap.c' || echo '$(srcdir)/'`fdssmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fdssmap.Tpo" "$(DEPDIR)/libast_la-fdssmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fdssmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdssmap.c' object='libast_la-fdssmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fdssmap.lo `test -f 'fdssmap.c' || echo '$(srcdir)/'`fdssmap.c
-
-libast_la-fellipse.lo: fellipse.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fellipse.lo -MD -MP -MF "$(DEPDIR)/libast_la-fellipse.Tpo" -c -o libast_la-fellipse.lo `test -f 'fellipse.c' || echo '$(srcdir)/'`fellipse.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fellipse.Tpo" "$(DEPDIR)/libast_la-fellipse.Plo"; else rm -f "$(DEPDIR)/libast_la-fellipse.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fellipse.c' object='libast_la-fellipse.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fellipse.lo `test -f 'fellipse.c' || echo '$(srcdir)/'`fellipse.c
-
-libast_la-ferror.lo: ferror.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ferror.lo -MD -MP -MF "$(DEPDIR)/libast_la-ferror.Tpo" -c -o libast_la-ferror.lo `test -f 'ferror.c' || echo '$(srcdir)/'`ferror.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ferror.Tpo" "$(DEPDIR)/libast_la-ferror.Plo"; else rm -f "$(DEPDIR)/libast_la-ferror.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ferror.c' object='libast_la-ferror.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ferror.lo `test -f 'ferror.c' || echo '$(srcdir)/'`ferror.c
-
-libast_la-ffitschan.lo: ffitschan.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ffitschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-ffitschan.Tpo" -c -o libast_la-ffitschan.lo `test -f 'ffitschan.c' || echo '$(srcdir)/'`ffitschan.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ffitschan.Tpo" "$(DEPDIR)/libast_la-ffitschan.Plo"; else rm -f "$(DEPDIR)/libast_la-ffitschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ffitschan.c' object='libast_la-ffitschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ffitschan.lo `test -f 'ffitschan.c' || echo '$(srcdir)/'`ffitschan.c
-
-libast_la-ffluxframe.lo: ffluxframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ffluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-ffluxframe.Tpo" -c -o libast_la-ffluxframe.lo `test -f 'ffluxframe.c' || echo '$(srcdir)/'`ffluxframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ffluxframe.Tpo" "$(DEPDIR)/libast_la-ffluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-ffluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ffluxframe.c' object='libast_la-ffluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ffluxframe.lo `test -f 'ffluxframe.c' || echo '$(srcdir)/'`ffluxframe.c
-
-libast_la-fframe.lo: fframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fframe.Tpo" -c -o libast_la-fframe.lo `test -f 'fframe.c' || echo '$(srcdir)/'`fframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fframe.Tpo" "$(DEPDIR)/libast_la-fframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fframe.c' object='libast_la-fframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fframe.lo `test -f 'fframe.c' || echo '$(srcdir)/'`fframe.c
-
-libast_la-fframeset.lo: fframeset.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fframeset.lo -MD -MP -MF "$(DEPDIR)/libast_la-fframeset.Tpo" -c -o libast_la-fframeset.lo `test -f 'fframeset.c' || echo '$(srcdir)/'`fframeset.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fframeset.Tpo" "$(DEPDIR)/libast_la-fframeset.Plo"; else rm -f "$(DEPDIR)/libast_la-fframeset.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fframeset.c' object='libast_la-fframeset.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fframeset.lo `test -f 'fframeset.c' || echo '$(srcdir)/'`fframeset.c
-
-libast_la-fgrismmap.lo: fgrismmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fgrismmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fgrismmap.Tpo" -c -o libast_la-fgrismmap.lo `test -f 'fgrismmap.c' || echo '$(srcdir)/'`fgrismmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fgrismmap.Tpo" "$(DEPDIR)/libast_la-fgrismmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fgrismmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fgrismmap.c' object='libast_la-fgrismmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fgrismmap.lo `test -f 'fgrismmap.c' || echo '$(srcdir)/'`fgrismmap.c
-
-libast_la-finterval.lo: finterval.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-finterval.lo -MD -MP -MF "$(DEPDIR)/libast_la-finterval.Tpo" -c -o libast_la-finterval.lo `test -f 'finterval.c' || echo '$(srcdir)/'`finterval.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-finterval.Tpo" "$(DEPDIR)/libast_la-finterval.Plo"; else rm -f "$(DEPDIR)/libast_la-finterval.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='finterval.c' object='libast_la-finterval.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-finterval.lo `test -f 'finterval.c' || echo '$(srcdir)/'`finterval.c
-
-libast_la-fintramap.lo: fintramap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fintramap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fintramap.Tpo" -c -o libast_la-fintramap.lo `test -f 'fintramap.c' || echo '$(srcdir)/'`fintramap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fintramap.Tpo" "$(DEPDIR)/libast_la-fintramap.Plo"; else rm -f "$(DEPDIR)/libast_la-fintramap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fintramap.c' object='libast_la-fintramap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fintramap.lo `test -f 'fintramap.c' || echo '$(srcdir)/'`fintramap.c
-
-libast_la-fitschan.lo: fitschan.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fitschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-fitschan.Tpo" -c -o libast_la-fitschan.lo `test -f 'fitschan.c' || echo '$(srcdir)/'`fitschan.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fitschan.Tpo" "$(DEPDIR)/libast_la-fitschan.Plo"; else rm -f "$(DEPDIR)/libast_la-fitschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fitschan.c' object='libast_la-fitschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fitschan.lo `test -f 'fitschan.c' || echo '$(srcdir)/'`fitschan.c
-
-libast_la-fkeymap.lo: fkeymap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fkeymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fkeymap.Tpo" -c -o libast_la-fkeymap.lo `test -f 'fkeymap.c' || echo '$(srcdir)/'`fkeymap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fkeymap.Tpo" "$(DEPDIR)/libast_la-fkeymap.Plo"; else rm -f "$(DEPDIR)/libast_la-fkeymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fkeymap.c' object='libast_la-fkeymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fkeymap.lo `test -f 'fkeymap.c' || echo '$(srcdir)/'`fkeymap.c
-
-libast_la-flutmap.lo: flutmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-flutmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-flutmap.Tpo" -c -o libast_la-flutmap.lo `test -f 'flutmap.c' || echo '$(srcdir)/'`flutmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-flutmap.Tpo" "$(DEPDIR)/libast_la-flutmap.Plo"; else rm -f "$(DEPDIR)/libast_la-flutmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='flutmap.c' object='libast_la-flutmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-flutmap.lo `test -f 'flutmap.c' || echo '$(srcdir)/'`flutmap.c
-
-libast_la-fluxframe.lo: fluxframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fluxframe.Tpo" -c -o libast_la-fluxframe.lo `test -f 'fluxframe.c' || echo '$(srcdir)/'`fluxframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fluxframe.Tpo" "$(DEPDIR)/libast_la-fluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fluxframe.c' object='libast_la-fluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fluxframe.lo `test -f 'fluxframe.c' || echo '$(srcdir)/'`fluxframe.c
-
-libast_la-fmapping.lo: fmapping.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fmapping.lo -MD -MP -MF "$(DEPDIR)/libast_la-fmapping.Tpo" -c -o libast_la-fmapping.lo `test -f 'fmapping.c' || echo '$(srcdir)/'`fmapping.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fmapping.Tpo" "$(DEPDIR)/libast_la-fmapping.Plo"; else rm -f "$(DEPDIR)/libast_la-fmapping.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fmapping.c' object='libast_la-fmapping.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fmapping.lo `test -f 'fmapping.c' || echo '$(srcdir)/'`fmapping.c
-
-libast_la-fmathmap.lo: fmathmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fmathmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fmathmap.Tpo" -c -o libast_la-fmathmap.lo `test -f 'fmathmap.c' || echo '$(srcdir)/'`fmathmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fmathmap.Tpo" "$(DEPDIR)/libast_la-fmathmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fmathmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fmathmap.c' object='libast_la-fmathmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fmathmap.lo `test -f 'fmathmap.c' || echo '$(srcdir)/'`fmathmap.c
-
-libast_la-fmatrixmap.lo: fmatrixmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fmatrixmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fmatrixmap.Tpo" -c -o libast_la-fmatrixmap.lo `test -f 'fmatrixmap.c' || echo '$(srcdir)/'`fmatrixmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fmatrixmap.Tpo" "$(DEPDIR)/libast_la-fmatrixmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fmatrixmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fmatrixmap.c' object='libast_la-fmatrixmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fmatrixmap.lo `test -f 'fmatrixmap.c' || echo '$(srcdir)/'`fmatrixmap.c
-
-libast_la-fnullregion.lo: fnullregion.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fnullregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-fnullregion.Tpo" -c -o libast_la-fnullregion.lo `test -f 'fnullregion.c' || echo '$(srcdir)/'`fnullregion.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fnullregion.Tpo" "$(DEPDIR)/libast_la-fnullregion.Plo"; else rm -f "$(DEPDIR)/libast_la-fnullregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fnullregion.c' object='libast_la-fnullregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fnullregion.lo `test -f 'fnullregion.c' || echo '$(srcdir)/'`fnullregion.c
-
-libast_la-fobject.lo: fobject.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fobject.lo -MD -MP -MF "$(DEPDIR)/libast_la-fobject.Tpo" -c -o libast_la-fobject.lo `test -f 'fobject.c' || echo '$(srcdir)/'`fobject.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fobject.Tpo" "$(DEPDIR)/libast_la-fobject.Plo"; else rm -f "$(DEPDIR)/libast_la-fobject.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fobject.c' object='libast_la-fobject.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fobject.lo `test -f 'fobject.c' || echo '$(srcdir)/'`fobject.c
-
-libast_la-fpcdmap.lo: fpcdmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpcdmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpcdmap.Tpo" -c -o libast_la-fpcdmap.lo `test -f 'fpcdmap.c' || echo '$(srcdir)/'`fpcdmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fpcdmap.Tpo" "$(DEPDIR)/libast_la-fpcdmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fpcdmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpcdmap.c' object='libast_la-fpcdmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpcdmap.lo `test -f 'fpcdmap.c' || echo '$(srcdir)/'`fpcdmap.c
-
-libast_la-fpermmap.lo: fpermmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpermmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpermmap.Tpo" -c -o libast_la-fpermmap.lo `test -f 'fpermmap.c' || echo '$(srcdir)/'`fpermmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fpermmap.Tpo" "$(DEPDIR)/libast_la-fpermmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fpermmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpermmap.c' object='libast_la-fpermmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpermmap.lo `test -f 'fpermmap.c' || echo '$(srcdir)/'`fpermmap.c
-
-libast_la-fplot.lo: fplot.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fplot.lo -MD -MP -MF "$(DEPDIR)/libast_la-fplot.Tpo" -c -o libast_la-fplot.lo `test -f 'fplot.c' || echo '$(srcdir)/'`fplot.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fplot.Tpo" "$(DEPDIR)/libast_la-fplot.Plo"; else rm -f "$(DEPDIR)/libast_la-fplot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fplot.c' object='libast_la-fplot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fplot.lo `test -f 'fplot.c' || echo '$(srcdir)/'`fplot.c
-
-libast_la-fplot3d.lo: fplot3d.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fplot3d.lo -MD -MP -MF "$(DEPDIR)/libast_la-fplot3d.Tpo" -c -o libast_la-fplot3d.lo `test -f 'fplot3d.c' || echo '$(srcdir)/'`fplot3d.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fplot3d.Tpo" "$(DEPDIR)/libast_la-fplot3d.Plo"; else rm -f "$(DEPDIR)/libast_la-fplot3d.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fplot3d.c' object='libast_la-fplot3d.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fplot3d.lo `test -f 'fplot3d.c' || echo '$(srcdir)/'`fplot3d.c
-
-libast_la-fpointlist.lo: fpointlist.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpointlist.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpointlist.Tpo" -c -o libast_la-fpointlist.lo `test -f 'fpointlist.c' || echo '$(srcdir)/'`fpointlist.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fpointlist.Tpo" "$(DEPDIR)/libast_la-fpointlist.Plo"; else rm -f "$(DEPDIR)/libast_la-fpointlist.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpointlist.c' object='libast_la-fpointlist.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpointlist.lo `test -f 'fpointlist.c' || echo '$(srcdir)/'`fpointlist.c
-
-libast_la-fpolygon.lo: fpolygon.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpolygon.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpolygon.Tpo" -c -o libast_la-fpolygon.lo `test -f 'fpolygon.c' || echo '$(srcdir)/'`fpolygon.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fpolygon.Tpo" "$(DEPDIR)/libast_la-fpolygon.Plo"; else rm -f "$(DEPDIR)/libast_la-fpolygon.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpolygon.c' object='libast_la-fpolygon.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpolygon.lo `test -f 'fpolygon.c' || echo '$(srcdir)/'`fpolygon.c
-
-libast_la-fpolymap.lo: fpolymap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fpolymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fpolymap.Tpo" -c -o libast_la-fpolymap.lo `test -f 'fpolymap.c' || echo '$(srcdir)/'`fpolymap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fpolymap.Tpo" "$(DEPDIR)/libast_la-fpolymap.Plo"; else rm -f "$(DEPDIR)/libast_la-fpolymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpolymap.c' object='libast_la-fpolymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fpolymap.lo `test -f 'fpolymap.c' || echo '$(srcdir)/'`fpolymap.c
-
-libast_la-fprism.lo: fprism.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fprism.lo -MD -MP -MF "$(DEPDIR)/libast_la-fprism.Tpo" -c -o libast_la-fprism.lo `test -f 'fprism.c' || echo '$(srcdir)/'`fprism.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fprism.Tpo" "$(DEPDIR)/libast_la-fprism.Plo"; else rm -f "$(DEPDIR)/libast_la-fprism.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fprism.c' object='libast_la-fprism.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fprism.lo `test -f 'fprism.c' || echo '$(srcdir)/'`fprism.c
-
-libast_la-frame.lo: frame.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-frame.lo -MD -MP -MF "$(DEPDIR)/libast_la-frame.Tpo" -c -o libast_la-frame.lo `test -f 'frame.c' || echo '$(srcdir)/'`frame.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-frame.Tpo" "$(DEPDIR)/libast_la-frame.Plo"; else rm -f "$(DEPDIR)/libast_la-frame.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='frame.c' object='libast_la-frame.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-frame.lo `test -f 'frame.c' || echo '$(srcdir)/'`frame.c
-
-libast_la-frameset.lo: frameset.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-frameset.lo -MD -MP -MF "$(DEPDIR)/libast_la-frameset.Tpo" -c -o libast_la-frameset.lo `test -f 'frameset.c' || echo '$(srcdir)/'`frameset.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-frameset.Tpo" "$(DEPDIR)/libast_la-frameset.Plo"; else rm -f "$(DEPDIR)/libast_la-frameset.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='frameset.c' object='libast_la-frameset.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-frameset.lo `test -f 'frameset.c' || echo '$(srcdir)/'`frameset.c
-
-libast_la-fratemap.lo: fratemap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fratemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fratemap.Tpo" -c -o libast_la-fratemap.lo `test -f 'fratemap.c' || echo '$(srcdir)/'`fratemap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fratemap.Tpo" "$(DEPDIR)/libast_la-fratemap.Plo"; else rm -f "$(DEPDIR)/libast_la-fratemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fratemap.c' object='libast_la-fratemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fratemap.lo `test -f 'fratemap.c' || echo '$(srcdir)/'`fratemap.c
-
-libast_la-fnormmap.lo: fnormmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fnormmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fnormmap.Tpo" -c -o libast_la-fnormmap.lo `test -f 'fnormmap.c' || echo '$(srcdir)/'`fnormmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fnormmap.Tpo" "$(DEPDIR)/libast_la-fnormmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fnormmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fnormmap.c' object='libast_la-fnormmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fnormmap.lo `test -f 'fnormmap.c' || echo '$(srcdir)/'`fnormmap.c
-
-libast_la-fregion.lo: fregion.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-fregion.Tpo" -c -o libast_la-fregion.lo `test -f 'fregion.c' || echo '$(srcdir)/'`fregion.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fregion.Tpo" "$(DEPDIR)/libast_la-fregion.Plo"; else rm -f "$(DEPDIR)/libast_la-fregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fregion.c' object='libast_la-fregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fregion.lo `test -f 'fregion.c' || echo '$(srcdir)/'`fregion.c
-
-libast_la-fshiftmap.lo: fshiftmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fshiftmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fshiftmap.Tpo" -c -o libast_la-fshiftmap.lo `test -f 'fshiftmap.c' || echo '$(srcdir)/'`fshiftmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fshiftmap.Tpo" "$(DEPDIR)/libast_la-fshiftmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fshiftmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fshiftmap.c' object='libast_la-fshiftmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fshiftmap.lo `test -f 'fshiftmap.c' || echo '$(srcdir)/'`fshiftmap.c
-
-libast_la-fskyframe.lo: fskyframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fskyframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fskyframe.Tpo" -c -o libast_la-fskyframe.lo `test -f 'fskyframe.c' || echo '$(srcdir)/'`fskyframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fskyframe.Tpo" "$(DEPDIR)/libast_la-fskyframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fskyframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fskyframe.c' object='libast_la-fskyframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fskyframe.lo `test -f 'fskyframe.c' || echo '$(srcdir)/'`fskyframe.c
-
-libast_la-fslamap.lo: fslamap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fslamap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fslamap.Tpo" -c -o libast_la-fslamap.lo `test -f 'fslamap.c' || echo '$(srcdir)/'`fslamap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fslamap.Tpo" "$(DEPDIR)/libast_la-fslamap.Plo"; else rm -f "$(DEPDIR)/libast_la-fslamap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fslamap.c' object='libast_la-fslamap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fslamap.lo `test -f 'fslamap.c' || echo '$(srcdir)/'`fslamap.c
-
-libast_la-fspecfluxframe.lo: fspecfluxframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fspecfluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fspecfluxframe.Tpo" -c -o libast_la-fspecfluxframe.lo `test -f 'fspecfluxframe.c' || echo '$(srcdir)/'`fspecfluxframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fspecfluxframe.Tpo" "$(DEPDIR)/libast_la-fspecfluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fspecfluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fspecfluxframe.c' object='libast_la-fspecfluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fspecfluxframe.lo `test -f 'fspecfluxframe.c' || echo '$(srcdir)/'`fspecfluxframe.c
-
-libast_la-fspecframe.lo: fspecframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fspecframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-fspecframe.Tpo" -c -o libast_la-fspecframe.lo `test -f 'fspecframe.c' || echo '$(srcdir)/'`fspecframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fspecframe.Tpo" "$(DEPDIR)/libast_la-fspecframe.Plo"; else rm -f "$(DEPDIR)/libast_la-fspecframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fspecframe.c' object='libast_la-fspecframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fspecframe.lo `test -f 'fspecframe.c' || echo '$(srcdir)/'`fspecframe.c
-
-libast_la-fspecmap.lo: fspecmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fspecmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fspecmap.Tpo" -c -o libast_la-fspecmap.lo `test -f 'fspecmap.c' || echo '$(srcdir)/'`fspecmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fspecmap.Tpo" "$(DEPDIR)/libast_la-fspecmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fspecmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fspecmap.c' object='libast_la-fspecmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fspecmap.lo `test -f 'fspecmap.c' || echo '$(srcdir)/'`fspecmap.c
-
-libast_la-ftimeframe.lo: ftimeframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ftimeframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-ftimeframe.Tpo" -c -o libast_la-ftimeframe.lo `test -f 'ftimeframe.c' || echo '$(srcdir)/'`ftimeframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ftimeframe.Tpo" "$(DEPDIR)/libast_la-ftimeframe.Plo"; else rm -f "$(DEPDIR)/libast_la-ftimeframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ftimeframe.c' object='libast_la-ftimeframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ftimeframe.lo `test -f 'ftimeframe.c' || echo '$(srcdir)/'`ftimeframe.c
-
-libast_la-ftimemap.lo: ftimemap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ftimemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-ftimemap.Tpo" -c -o libast_la-ftimemap.lo `test -f 'ftimemap.c' || echo '$(srcdir)/'`ftimemap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ftimemap.Tpo" "$(DEPDIR)/libast_la-ftimemap.Plo"; else rm -f "$(DEPDIR)/libast_la-ftimemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ftimemap.c' object='libast_la-ftimemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ftimemap.lo `test -f 'ftimemap.c' || echo '$(srcdir)/'`ftimemap.c
-
-libast_la-fsphmap.lo: fsphmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fsphmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fsphmap.Tpo" -c -o libast_la-fsphmap.lo `test -f 'fsphmap.c' || echo '$(srcdir)/'`fsphmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fsphmap.Tpo" "$(DEPDIR)/libast_la-fsphmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fsphmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fsphmap.c' object='libast_la-fsphmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fsphmap.lo `test -f 'fsphmap.c' || echo '$(srcdir)/'`fsphmap.c
-
-libast_la-ftranmap.lo: ftranmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ftranmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-ftranmap.Tpo" -c -o libast_la-ftranmap.lo `test -f 'ftranmap.c' || echo '$(srcdir)/'`ftranmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ftranmap.Tpo" "$(DEPDIR)/libast_la-ftranmap.Plo"; else rm -f "$(DEPDIR)/libast_la-ftranmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ftranmap.c' object='libast_la-ftranmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ftranmap.lo `test -f 'ftranmap.c' || echo '$(srcdir)/'`ftranmap.c
-
-libast_la-fselectormap.lo: fselectormap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fselectormap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fselectormap.Tpo" -c -o libast_la-fselectormap.lo `test -f 'fselectormap.c' || echo '$(srcdir)/'`fselectormap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fselectormap.Tpo" "$(DEPDIR)/libast_la-fselectormap.Plo"; else rm -f "$(DEPDIR)/libast_la-fselectormap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fselectormap.c' object='libast_la-fselectormap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fselectormap.lo `test -f 'fselectormap.c' || echo '$(srcdir)/'`fselectormap.c
-
-libast_la-fswitchmap.lo: fswitchmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fswitchmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fswitchmap.Tpo" -c -o libast_la-fswitchmap.lo `test -f 'fswitchmap.c' || echo '$(srcdir)/'`fswitchmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fswitchmap.Tpo" "$(DEPDIR)/libast_la-fswitchmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fswitchmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fswitchmap.c' object='libast_la-fswitchmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fswitchmap.lo `test -f 'fswitchmap.c' || echo '$(srcdir)/'`fswitchmap.c
-
-libast_la-funitmap.lo: funitmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-funitmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-funitmap.Tpo" -c -o libast_la-funitmap.lo `test -f 'funitmap.c' || echo '$(srcdir)/'`funitmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-funitmap.Tpo" "$(DEPDIR)/libast_la-funitmap.Plo"; else rm -f "$(DEPDIR)/libast_la-funitmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='funitmap.c' object='libast_la-funitmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-funitmap.lo `test -f 'funitmap.c' || echo '$(srcdir)/'`funitmap.c
-
-libast_la-fwcsmap.lo: fwcsmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fwcsmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fwcsmap.Tpo" -c -o libast_la-fwcsmap.lo `test -f 'fwcsmap.c' || echo '$(srcdir)/'`fwcsmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fwcsmap.Tpo" "$(DEPDIR)/libast_la-fwcsmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fwcsmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fwcsmap.c' object='libast_la-fwcsmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fwcsmap.lo `test -f 'fwcsmap.c' || echo '$(srcdir)/'`fwcsmap.c
-
-libast_la-fwinmap.lo: fwinmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fwinmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fwinmap.Tpo" -c -o libast_la-fwinmap.lo `test -f 'fwinmap.c' || echo '$(srcdir)/'`fwinmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fwinmap.Tpo" "$(DEPDIR)/libast_la-fwinmap.Plo"; else rm -f "$(DEPDIR)/libast_la-fwinmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fwinmap.c' object='libast_la-fwinmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fwinmap.lo `test -f 'fwinmap.c' || echo '$(srcdir)/'`fwinmap.c
-
-libast_la-fxmlchan.lo: fxmlchan.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fxmlchan.lo -MD -MP -MF "$(DEPDIR)/libast_la-fxmlchan.Tpo" -c -o libast_la-fxmlchan.lo `test -f 'fxmlchan.c' || echo '$(srcdir)/'`fxmlchan.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fxmlchan.Tpo" "$(DEPDIR)/libast_la-fxmlchan.Plo"; else rm -f "$(DEPDIR)/libast_la-fxmlchan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fxmlchan.c' object='libast_la-fxmlchan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fxmlchan.lo `test -f 'fxmlchan.c' || echo '$(srcdir)/'`fxmlchan.c
-
-libast_la-fzoommap.lo: fzoommap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fzoommap.lo -MD -MP -MF "$(DEPDIR)/libast_la-fzoommap.Tpo" -c -o libast_la-fzoommap.lo `test -f 'fzoommap.c' || echo '$(srcdir)/'`fzoommap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fzoommap.Tpo" "$(DEPDIR)/libast_la-fzoommap.Plo"; else rm -f "$(DEPDIR)/libast_la-fzoommap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fzoommap.c' object='libast_la-fzoommap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fzoommap.lo `test -f 'fzoommap.c' || echo '$(srcdir)/'`fzoommap.c
-
-libast_la-globals.lo: globals.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-globals.lo -MD -MP -MF "$(DEPDIR)/libast_la-globals.Tpo" -c -o libast_la-globals.lo `test -f 'globals.c' || echo '$(srcdir)/'`globals.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-globals.Tpo" "$(DEPDIR)/libast_la-globals.Plo"; else rm -f "$(DEPDIR)/libast_la-globals.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='globals.c' object='libast_la-globals.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-globals.lo `test -f 'globals.c' || echo '$(srcdir)/'`globals.c
-
-libast_la-grismmap.lo: grismmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-grismmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-grismmap.Tpo" -c -o libast_la-grismmap.lo `test -f 'grismmap.c' || echo '$(srcdir)/'`grismmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-grismmap.Tpo" "$(DEPDIR)/libast_la-grismmap.Plo"; else rm -f "$(DEPDIR)/libast_la-grismmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='grismmap.c' object='libast_la-grismmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-grismmap.lo `test -f 'grismmap.c' || echo '$(srcdir)/'`grismmap.c
-
-libast_la-interval.lo: interval.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-interval.lo -MD -MP -MF "$(DEPDIR)/libast_la-interval.Tpo" -c -o libast_la-interval.lo `test -f 'interval.c' || echo '$(srcdir)/'`interval.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-interval.Tpo" "$(DEPDIR)/libast_la-interval.Plo"; else rm -f "$(DEPDIR)/libast_la-interval.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='interval.c' object='libast_la-interval.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-interval.lo `test -f 'interval.c' || echo '$(srcdir)/'`interval.c
-
-libast_la-intramap.lo: intramap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-intramap.lo -MD -MP -MF "$(DEPDIR)/libast_la-intramap.Tpo" -c -o libast_la-intramap.lo `test -f 'intramap.c' || echo '$(srcdir)/'`intramap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-intramap.Tpo" "$(DEPDIR)/libast_la-intramap.Plo"; else rm -f "$(DEPDIR)/libast_la-intramap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='intramap.c' object='libast_la-intramap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-intramap.lo `test -f 'intramap.c' || echo '$(srcdir)/'`intramap.c
-
-libast_la-keymap.lo: keymap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-keymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-keymap.Tpo" -c -o libast_la-keymap.lo `test -f 'keymap.c' || echo '$(srcdir)/'`keymap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-keymap.Tpo" "$(DEPDIR)/libast_la-keymap.Plo"; else rm -f "$(DEPDIR)/libast_la-keymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keymap.c' object='libast_la-keymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-keymap.lo `test -f 'keymap.c' || echo '$(srcdir)/'`keymap.c
-
-libast_la-loader.lo: loader.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-loader.lo -MD -MP -MF "$(DEPDIR)/libast_la-loader.Tpo" -c -o libast_la-loader.lo `test -f 'loader.c' || echo '$(srcdir)/'`loader.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-loader.Tpo" "$(DEPDIR)/libast_la-loader.Plo"; else rm -f "$(DEPDIR)/libast_la-loader.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='loader.c' object='libast_la-loader.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-loader.lo `test -f 'loader.c' || echo '$(srcdir)/'`loader.c
-
-libast_la-lutmap.lo: lutmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-lutmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-lutmap.Tpo" -c -o libast_la-lutmap.lo `test -f 'lutmap.c' || echo '$(srcdir)/'`lutmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-lutmap.Tpo" "$(DEPDIR)/libast_la-lutmap.Plo"; else rm -f "$(DEPDIR)/libast_la-lutmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='lutmap.c' object='libast_la-lutmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-lutmap.lo `test -f 'lutmap.c' || echo '$(srcdir)/'`lutmap.c
-
-libast_la-mapping.lo: mapping.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-mapping.lo -MD -MP -MF "$(DEPDIR)/libast_la-mapping.Tpo" -c -o libast_la-mapping.lo `test -f 'mapping.c' || echo '$(srcdir)/'`mapping.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-mapping.Tpo" "$(DEPDIR)/libast_la-mapping.Plo"; else rm -f "$(DEPDIR)/libast_la-mapping.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mapping.c' object='libast_la-mapping.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-mapping.lo `test -f 'mapping.c' || echo '$(srcdir)/'`mapping.c
-
-libast_la-mathmap.lo: mathmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-mathmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-mathmap.Tpo" -c -o libast_la-mathmap.lo `test -f 'mathmap.c' || echo '$(srcdir)/'`mathmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-mathmap.Tpo" "$(DEPDIR)/libast_la-mathmap.Plo"; else rm -f "$(DEPDIR)/libast_la-mathmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mathmap.c' object='libast_la-mathmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-mathmap.lo `test -f 'mathmap.c' || echo '$(srcdir)/'`mathmap.c
-
-libast_la-matrixmap.lo: matrixmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-matrixmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-matrixmap.Tpo" -c -o libast_la-matrixmap.lo `test -f 'matrixmap.c' || echo '$(srcdir)/'`matrixmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-matrixmap.Tpo" "$(DEPDIR)/libast_la-matrixmap.Plo"; else rm -f "$(DEPDIR)/libast_la-matrixmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='matrixmap.c' object='libast_la-matrixmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-matrixmap.lo `test -f 'matrixmap.c' || echo '$(srcdir)/'`matrixmap.c
-
-libast_la-memory.lo: memory.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-memory.lo -MD -MP -MF "$(DEPDIR)/libast_la-memory.Tpo" -c -o libast_la-memory.lo `test -f 'memory.c' || echo '$(srcdir)/'`memory.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-memory.Tpo" "$(DEPDIR)/libast_la-memory.Plo"; else rm -f "$(DEPDIR)/libast_la-memory.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='memory.c' object='libast_la-memory.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-memory.lo `test -f 'memory.c' || echo '$(srcdir)/'`memory.c
-
-libast_la-nullregion.lo: nullregion.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-nullregion.lo -MD -MP -MF "$(DEPDIR)/libast_la-nullregion.Tpo" -c -o libast_la-nullregion.lo `test -f 'nullregion.c' || echo '$(srcdir)/'`nullregion.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-nullregion.Tpo" "$(DEPDIR)/libast_la-nullregion.Plo"; else rm -f "$(DEPDIR)/libast_la-nullregion.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nullregion.c' object='libast_la-nullregion.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-nullregion.lo `test -f 'nullregion.c' || echo '$(srcdir)/'`nullregion.c
-
-libast_la-object.lo: object.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-object.lo -MD -MP -MF "$(DEPDIR)/libast_la-object.Tpo" -c -o libast_la-object.lo `test -f 'object.c' || echo '$(srcdir)/'`object.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-object.Tpo" "$(DEPDIR)/libast_la-object.Plo"; else rm -f "$(DEPDIR)/libast_la-object.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='object.c' object='libast_la-object.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-object.lo `test -f 'object.c' || echo '$(srcdir)/'`object.c
-
-libast_la-pcdmap.lo: pcdmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-pcdmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-pcdmap.Tpo" -c -o libast_la-pcdmap.lo `test -f 'pcdmap.c' || echo '$(srcdir)/'`pcdmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-pcdmap.Tpo" "$(DEPDIR)/libast_la-pcdmap.Plo"; else rm -f "$(DEPDIR)/libast_la-pcdmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pcdmap.c' object='libast_la-pcdmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-pcdmap.lo `test -f 'pcdmap.c' || echo '$(srcdir)/'`pcdmap.c
-
-libast_la-permmap.lo: permmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-permmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-permmap.Tpo" -c -o libast_la-permmap.lo `test -f 'permmap.c' || echo '$(srcdir)/'`permmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-permmap.Tpo" "$(DEPDIR)/libast_la-permmap.Plo"; else rm -f "$(DEPDIR)/libast_la-permmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='permmap.c' object='libast_la-permmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-permmap.lo `test -f 'permmap.c' || echo '$(srcdir)/'`permmap.c
-
-libast_la-plot.lo: plot.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-plot.lo -MD -MP -MF "$(DEPDIR)/libast_la-plot.Tpo" -c -o libast_la-plot.lo `test -f 'plot.c' || echo '$(srcdir)/'`plot.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-plot.Tpo" "$(DEPDIR)/libast_la-plot.Plo"; else rm -f "$(DEPDIR)/libast_la-plot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plot.c' object='libast_la-plot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-plot.lo `test -f 'plot.c' || echo '$(srcdir)/'`plot.c
-
-libast_la-plot3d.lo: plot3d.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-plot3d.lo -MD -MP -MF "$(DEPDIR)/libast_la-plot3d.Tpo" -c -o libast_la-plot3d.lo `test -f 'plot3d.c' || echo '$(srcdir)/'`plot3d.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-plot3d.Tpo" "$(DEPDIR)/libast_la-plot3d.Plo"; else rm -f "$(DEPDIR)/libast_la-plot3d.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plot3d.c' object='libast_la-plot3d.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-plot3d.lo `test -f 'plot3d.c' || echo '$(srcdir)/'`plot3d.c
-
-libast_la-pointlist.lo: pointlist.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-pointlist.lo -MD -MP -MF "$(DEPDIR)/libast_la-pointlist.Tpo" -c -o libast_la-pointlist.lo `test -f 'pointlist.c' || echo '$(srcdir)/'`pointlist.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-pointlist.Tpo" "$(DEPDIR)/libast_la-pointlist.Plo"; else rm -f "$(DEPDIR)/libast_la-pointlist.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pointlist.c' object='libast_la-pointlist.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-pointlist.lo `test -f 'pointlist.c' || echo '$(srcdir)/'`pointlist.c
-
-libast_la-pointset.lo: pointset.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-pointset.lo -MD -MP -MF "$(DEPDIR)/libast_la-pointset.Tpo" -c -o libast_la-pointset.lo `test -f 'pointset.c' || echo '$(srcdir)/'`pointset.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-pointset.Tpo" "$(DEPDIR)/libast_la-pointset.Plo"; else rm -f "$(DEPDIR)/libast_la-pointset.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pointset.c' object='libast_la-pointset.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-pointset.lo `test -f 'pointset.c' || echo '$(srcdir)/'`pointset.c
-
-libast_la-polygon.lo: polygon.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-polygon.lo -MD -MP -MF "$(DEPDIR)/libast_la-polygon.Tpo" -c -o libast_la-polygon.lo `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-polygon.Tpo" "$(DEPDIR)/libast_la-polygon.Plo"; else rm -f "$(DEPDIR)/libast_la-polygon.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='polygon.c' object='libast_la-polygon.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-polygon.lo `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c
-
-libast_la-polymap.lo: polymap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-polymap.lo -MD -MP -MF "$(DEPDIR)/libast_la-polymap.Tpo" -c -o libast_la-polymap.lo `test -f 'polymap.c' || echo '$(srcdir)/'`polymap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-polymap.Tpo" "$(DEPDIR)/libast_la-polymap.Plo"; else rm -f "$(DEPDIR)/libast_la-polymap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='polymap.c' object='libast_la-polymap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-polymap.lo `test -f 'polymap.c' || echo '$(srcdir)/'`polymap.c
-
-libast_la-prism.lo: prism.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-prism.lo -MD -MP -MF "$(DEPDIR)/libast_la-prism.Tpo" -c -o libast_la-prism.lo `test -f 'prism.c' || echo '$(srcdir)/'`prism.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-prism.Tpo" "$(DEPDIR)/libast_la-prism.Plo"; else rm -f "$(DEPDIR)/libast_la-prism.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prism.c' object='libast_la-prism.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-prism.lo `test -f 'prism.c' || echo '$(srcdir)/'`prism.c
-
-libast_la-normmap.lo: normmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-normmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-normmap.Tpo" -c -o libast_la-normmap.lo `test -f 'normmap.c' || echo '$(srcdir)/'`normmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-normmap.Tpo" "$(DEPDIR)/libast_la-normmap.Plo"; else rm -f "$(DEPDIR)/libast_la-normmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='normmap.c' object='libast_la-normmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-normmap.lo `test -f 'normmap.c' || echo '$(srcdir)/'`normmap.c
-
-libast_la-ratemap.lo: ratemap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-ratemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-ratemap.Tpo" -c -o libast_la-ratemap.lo `test -f 'ratemap.c' || echo '$(srcdir)/'`ratemap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-ratemap.Tpo" "$(DEPDIR)/libast_la-ratemap.Plo"; else rm -f "$(DEPDIR)/libast_la-ratemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ratemap.c' object='libast_la-ratemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-ratemap.lo `test -f 'ratemap.c' || echo '$(srcdir)/'`ratemap.c
-
-libast_la-region.lo: region.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-region.lo -MD -MP -MF "$(DEPDIR)/libast_la-region.Tpo" -c -o libast_la-region.lo `test -f 'region.c' || echo '$(srcdir)/'`region.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-region.Tpo" "$(DEPDIR)/libast_la-region.Plo"; else rm -f "$(DEPDIR)/libast_la-region.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='region.c' object='libast_la-region.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-region.lo `test -f 'region.c' || echo '$(srcdir)/'`region.c
-
-libast_la-shiftmap.lo: shiftmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-shiftmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-shiftmap.Tpo" -c -o libast_la-shiftmap.lo `test -f 'shiftmap.c' || echo '$(srcdir)/'`shiftmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-shiftmap.Tpo" "$(DEPDIR)/libast_la-shiftmap.Plo"; else rm -f "$(DEPDIR)/libast_la-shiftmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='shiftmap.c' object='libast_la-shiftmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-shiftmap.lo `test -f 'shiftmap.c' || echo '$(srcdir)/'`shiftmap.c
-
-libast_la-skyaxis.lo: skyaxis.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-skyaxis.lo -MD -MP -MF "$(DEPDIR)/libast_la-skyaxis.Tpo" -c -o libast_la-skyaxis.lo `test -f 'skyaxis.c' || echo '$(srcdir)/'`skyaxis.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-skyaxis.Tpo" "$(DEPDIR)/libast_la-skyaxis.Plo"; else rm -f "$(DEPDIR)/libast_la-skyaxis.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='skyaxis.c' object='libast_la-skyaxis.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-skyaxis.lo `test -f 'skyaxis.c' || echo '$(srcdir)/'`skyaxis.c
-
-libast_la-skyframe.lo: skyframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-skyframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-skyframe.Tpo" -c -o libast_la-skyframe.lo `test -f 'skyframe.c' || echo '$(srcdir)/'`skyframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-skyframe.Tpo" "$(DEPDIR)/libast_la-skyframe.Plo"; else rm -f "$(DEPDIR)/libast_la-skyframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='skyframe.c' object='libast_la-skyframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-skyframe.lo `test -f 'skyframe.c' || echo '$(srcdir)/'`skyframe.c
-
-libast_la-slamap.lo: slamap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-slamap.lo -MD -MP -MF "$(DEPDIR)/libast_la-slamap.Tpo" -c -o libast_la-slamap.lo `test -f 'slamap.c' || echo '$(srcdir)/'`slamap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-slamap.Tpo" "$(DEPDIR)/libast_la-slamap.Plo"; else rm -f "$(DEPDIR)/libast_la-slamap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='slamap.c' object='libast_la-slamap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-slamap.lo `test -f 'slamap.c' || echo '$(srcdir)/'`slamap.c
-
-libast_la-specfluxframe.lo: specfluxframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-specfluxframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-specfluxframe.Tpo" -c -o libast_la-specfluxframe.lo `test -f 'specfluxframe.c' || echo '$(srcdir)/'`specfluxframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-specfluxframe.Tpo" "$(DEPDIR)/libast_la-specfluxframe.Plo"; else rm -f "$(DEPDIR)/libast_la-specfluxframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='specfluxframe.c' object='libast_la-specfluxframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-specfluxframe.lo `test -f 'specfluxframe.c' || echo '$(srcdir)/'`specfluxframe.c
-
-libast_la-specframe.lo: specframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-specframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-specframe.Tpo" -c -o libast_la-specframe.lo `test -f 'specframe.c' || echo '$(srcdir)/'`specframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-specframe.Tpo" "$(DEPDIR)/libast_la-specframe.Plo"; else rm -f "$(DEPDIR)/libast_la-specframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='specframe.c' object='libast_la-specframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-specframe.lo `test -f 'specframe.c' || echo '$(srcdir)/'`specframe.c
-
-libast_la-specmap.lo: specmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-specmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-specmap.Tpo" -c -o libast_la-specmap.lo `test -f 'specmap.c' || echo '$(srcdir)/'`specmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-specmap.Tpo" "$(DEPDIR)/libast_la-specmap.Plo"; else rm -f "$(DEPDIR)/libast_la-specmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='specmap.c' object='libast_la-specmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-specmap.lo `test -f 'specmap.c' || echo '$(srcdir)/'`specmap.c
-
-libast_la-sphmap.lo: sphmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-sphmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-sphmap.Tpo" -c -o libast_la-sphmap.lo `test -f 'sphmap.c' || echo '$(srcdir)/'`sphmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-sphmap.Tpo" "$(DEPDIR)/libast_la-sphmap.Plo"; else rm -f "$(DEPDIR)/libast_la-sphmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sphmap.c' object='libast_la-sphmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-sphmap.lo `test -f 'sphmap.c' || echo '$(srcdir)/'`sphmap.c
-
-libast_la-stc.lo: stc.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stc.lo -MD -MP -MF "$(DEPDIR)/libast_la-stc.Tpo" -c -o libast_la-stc.lo `test -f 'stc.c' || echo '$(srcdir)/'`stc.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-stc.Tpo" "$(DEPDIR)/libast_la-stc.Plo"; else rm -f "$(DEPDIR)/libast_la-stc.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stc.c' object='libast_la-stc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stc.lo `test -f 'stc.c' || echo '$(srcdir)/'`stc.c
-
-libast_la-stcresourceprofile.lo: stcresourceprofile.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcresourceprofile.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcresourceprofile.Tpo" -c -o libast_la-stcresourceprofile.lo `test -f 'stcresourceprofile.c' || echo '$(srcdir)/'`stcresourceprofile.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-stcresourceprofile.Tpo" "$(DEPDIR)/libast_la-stcresourceprofile.Plo"; else rm -f "$(DEPDIR)/libast_la-stcresourceprofile.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stcresourceprofile.c' object='libast_la-stcresourceprofile.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcresourceprofile.lo `test -f 'stcresourceprofile.c' || echo '$(srcdir)/'`stcresourceprofile.c
-
-libast_la-stcsearchlocation.lo: stcsearchlocation.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcsearchlocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcsearchlocation.Tpo" -c -o libast_la-stcsearchlocation.lo `test -f 'stcsearchlocation.c' || echo '$(srcdir)/'`stcsearchlocation.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-stcsearchlocation.Tpo" "$(DEPDIR)/libast_la-stcsearchlocation.Plo"; else rm -f "$(DEPDIR)/libast_la-stcsearchlocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stcsearchlocation.c' object='libast_la-stcsearchlocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcsearchlocation.lo `test -f 'stcsearchlocation.c' || echo '$(srcdir)/'`stcsearchlocation.c
-
-libast_la-stccatalogentrylocation.lo: stccatalogentrylocation.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stccatalogentrylocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-stccatalogentrylocation.Tpo" -c -o libast_la-stccatalogentrylocation.lo `test -f 'stccatalogentrylocation.c' || echo '$(srcdir)/'`stccatalogentrylocation.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-stccatalogentrylocation.Tpo" "$(DEPDIR)/libast_la-stccatalogentrylocation.Plo"; else rm -f "$(DEPDIR)/libast_la-stccatalogentrylocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stccatalogentrylocation.c' object='libast_la-stccatalogentrylocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stccatalogentrylocation.lo `test -f 'stccatalogentrylocation.c' || echo '$(srcdir)/'`stccatalogentrylocation.c
-
-libast_la-stcobsdatalocation.lo: stcobsdatalocation.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcobsdatalocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcobsdatalocation.Tpo" -c -o libast_la-stcobsdatalocation.lo `test -f 'stcobsdatalocation.c' || echo '$(srcdir)/'`stcobsdatalocation.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-stcobsdatalocation.Tpo" "$(DEPDIR)/libast_la-stcobsdatalocation.Plo"; else rm -f "$(DEPDIR)/libast_la-stcobsdatalocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stcobsdatalocation.c' object='libast_la-stcobsdatalocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcobsdatalocation.lo `test -f 'stcobsdatalocation.c' || echo '$(srcdir)/'`stcobsdatalocation.c
-
-libast_la-stcschan.lo: stcschan.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-stcschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-stcschan.Tpo" -c -o libast_la-stcschan.lo `test -f 'stcschan.c' || echo '$(srcdir)/'`stcschan.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-stcschan.Tpo" "$(DEPDIR)/libast_la-stcschan.Plo"; else rm -f "$(DEPDIR)/libast_la-stcschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stcschan.c' object='libast_la-stcschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-stcschan.lo `test -f 'stcschan.c' || echo '$(srcdir)/'`stcschan.c
-
-libast_la-fstc.lo: fstc.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstc.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstc.Tpo" -c -o libast_la-fstc.lo `test -f 'fstc.c' || echo '$(srcdir)/'`fstc.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fstc.Tpo" "$(DEPDIR)/libast_la-fstc.Plo"; else rm -f "$(DEPDIR)/libast_la-fstc.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fstc.c' object='libast_la-fstc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstc.lo `test -f 'fstc.c' || echo '$(srcdir)/'`fstc.c
-
-libast_la-fstcresourceprofile.lo: fstcresourceprofile.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcresourceprofile.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcresourceprofile.Tpo" -c -o libast_la-fstcresourceprofile.lo `test -f 'fstcresourceprofile.c' || echo '$(srcdir)/'`fstcresourceprofile.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fstcresourceprofile.Tpo" "$(DEPDIR)/libast_la-fstcresourceprofile.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcresourceprofile.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fstcresourceprofile.c' object='libast_la-fstcresourceprofile.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcresourceprofile.lo `test -f 'fstcresourceprofile.c' || echo '$(srcdir)/'`fstcresourceprofile.c
-
-libast_la-fstcsearchlocation.lo: fstcsearchlocation.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcsearchlocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcsearchlocation.Tpo" -c -o libast_la-fstcsearchlocation.lo `test -f 'fstcsearchlocation.c' || echo '$(srcdir)/'`fstcsearchlocation.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fstcsearchlocation.Tpo" "$(DEPDIR)/libast_la-fstcsearchlocation.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcsearchlocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fstcsearchlocation.c' object='libast_la-fstcsearchlocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcsearchlocation.lo `test -f 'fstcsearchlocation.c' || echo '$(srcdir)/'`fstcsearchlocation.c
-
-libast_la-fstccatalogentrylocation.lo: fstccatalogentrylocation.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstccatalogentrylocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstccatalogentrylocation.Tpo" -c -o libast_la-fstccatalogentrylocation.lo `test -f 'fstccatalogentrylocation.c' || echo '$(srcdir)/'`fstccatalogentrylocation.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fstccatalogentrylocation.Tpo" "$(DEPDIR)/libast_la-fstccatalogentrylocation.Plo"; else rm -f "$(DEPDIR)/libast_la-fstccatalogentrylocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fstccatalogentrylocation.c' object='libast_la-fstccatalogentrylocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstccatalogentrylocation.lo `test -f 'fstccatalogentrylocation.c' || echo '$(srcdir)/'`fstccatalogentrylocation.c
-
-libast_la-fstcobsdatalocation.lo: fstcobsdatalocation.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcobsdatalocation.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcobsdatalocation.Tpo" -c -o libast_la-fstcobsdatalocation.lo `test -f 'fstcobsdatalocation.c' || echo '$(srcdir)/'`fstcobsdatalocation.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fstcobsdatalocation.Tpo" "$(DEPDIR)/libast_la-fstcobsdatalocation.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcobsdatalocation.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fstcobsdatalocation.c' object='libast_la-fstcobsdatalocation.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcobsdatalocation.lo `test -f 'fstcobsdatalocation.c' || echo '$(srcdir)/'`fstcobsdatalocation.c
-
-libast_la-fstcschan.lo: fstcschan.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-fstcschan.lo -MD -MP -MF "$(DEPDIR)/libast_la-fstcschan.Tpo" -c -o libast_la-fstcschan.lo `test -f 'fstcschan.c' || echo '$(srcdir)/'`fstcschan.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-fstcschan.Tpo" "$(DEPDIR)/libast_la-fstcschan.Plo"; else rm -f "$(DEPDIR)/libast_la-fstcschan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fstcschan.c' object='libast_la-fstcschan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-fstcschan.lo `test -f 'fstcschan.c' || echo '$(srcdir)/'`fstcschan.c
-
-libast_la-timeframe.lo: timeframe.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-timeframe.lo -MD -MP -MF "$(DEPDIR)/libast_la-timeframe.Tpo" -c -o libast_la-timeframe.lo `test -f 'timeframe.c' || echo '$(srcdir)/'`timeframe.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-timeframe.Tpo" "$(DEPDIR)/libast_la-timeframe.Plo"; else rm -f "$(DEPDIR)/libast_la-timeframe.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='timeframe.c' object='libast_la-timeframe.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-timeframe.lo `test -f 'timeframe.c' || echo '$(srcdir)/'`timeframe.c
-
-libast_la-timemap.lo: timemap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-timemap.lo -MD -MP -MF "$(DEPDIR)/libast_la-timemap.Tpo" -c -o libast_la-timemap.lo `test -f 'timemap.c' || echo '$(srcdir)/'`timemap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-timemap.Tpo" "$(DEPDIR)/libast_la-timemap.Plo"; else rm -f "$(DEPDIR)/libast_la-timemap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='timemap.c' object='libast_la-timemap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-timemap.lo `test -f 'timemap.c' || echo '$(srcdir)/'`timemap.c
-
-libast_la-tranmap.lo: tranmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-tranmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-tranmap.Tpo" -c -o libast_la-tranmap.lo `test -f 'tranmap.c' || echo '$(srcdir)/'`tranmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-tranmap.Tpo" "$(DEPDIR)/libast_la-tranmap.Plo"; else rm -f "$(DEPDIR)/libast_la-tranmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tranmap.c' object='libast_la-tranmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-tranmap.lo `test -f 'tranmap.c' || echo '$(srcdir)/'`tranmap.c
-
-libast_la-selectormap.lo: selectormap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-selectormap.lo -MD -MP -MF "$(DEPDIR)/libast_la-selectormap.Tpo" -c -o libast_la-selectormap.lo `test -f 'selectormap.c' || echo '$(srcdir)/'`selectormap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-selectormap.Tpo" "$(DEPDIR)/libast_la-selectormap.Plo"; else rm -f "$(DEPDIR)/libast_la-selectormap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='selectormap.c' object='libast_la-selectormap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-selectormap.lo `test -f 'selectormap.c' || echo '$(srcdir)/'`selectormap.c
-
-libast_la-switchmap.lo: switchmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-switchmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-switchmap.Tpo" -c -o libast_la-switchmap.lo `test -f 'switchmap.c' || echo '$(srcdir)/'`switchmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-switchmap.Tpo" "$(DEPDIR)/libast_la-switchmap.Plo"; else rm -f "$(DEPDIR)/libast_la-switchmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='switchmap.c' object='libast_la-switchmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-switchmap.lo `test -f 'switchmap.c' || echo '$(srcdir)/'`switchmap.c
-
-libast_la-unit.lo: unit.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-unit.lo -MD -MP -MF "$(DEPDIR)/libast_la-unit.Tpo" -c -o libast_la-unit.lo `test -f 'unit.c' || echo '$(srcdir)/'`unit.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-unit.Tpo" "$(DEPDIR)/libast_la-unit.Plo"; else rm -f "$(DEPDIR)/libast_la-unit.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='unit.c' object='libast_la-unit.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-unit.lo `test -f 'unit.c' || echo '$(srcdir)/'`unit.c
-
-libast_la-unitmap.lo: unitmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-unitmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-unitmap.Tpo" -c -o libast_la-unitmap.lo `test -f 'unitmap.c' || echo '$(srcdir)/'`unitmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-unitmap.Tpo" "$(DEPDIR)/libast_la-unitmap.Plo"; else rm -f "$(DEPDIR)/libast_la-unitmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='unitmap.c' object='libast_la-unitmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-unitmap.lo `test -f 'unitmap.c' || echo '$(srcdir)/'`unitmap.c
-
-libast_la-wcsmap.lo: wcsmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-wcsmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-wcsmap.Tpo" -c -o libast_la-wcsmap.lo `test -f 'wcsmap.c' || echo '$(srcdir)/'`wcsmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-wcsmap.Tpo" "$(DEPDIR)/libast_la-wcsmap.Plo"; else rm -f "$(DEPDIR)/libast_la-wcsmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wcsmap.c' object='libast_la-wcsmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-wcsmap.lo `test -f 'wcsmap.c' || echo '$(srcdir)/'`wcsmap.c
-
-libast_la-winmap.lo: winmap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-winmap.lo -MD -MP -MF "$(DEPDIR)/libast_la-winmap.Tpo" -c -o libast_la-winmap.lo `test -f 'winmap.c' || echo '$(srcdir)/'`winmap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-winmap.Tpo" "$(DEPDIR)/libast_la-winmap.Plo"; else rm -f "$(DEPDIR)/libast_la-winmap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='winmap.c' object='libast_la-winmap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-winmap.lo `test -f 'winmap.c' || echo '$(srcdir)/'`winmap.c
-
-libast_la-xml.lo: xml.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-xml.lo -MD -MP -MF "$(DEPDIR)/libast_la-xml.Tpo" -c -o libast_la-xml.lo `test -f 'xml.c' || echo '$(srcdir)/'`xml.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-xml.Tpo" "$(DEPDIR)/libast_la-xml.Plo"; else rm -f "$(DEPDIR)/libast_la-xml.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xml.c' object='libast_la-xml.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-xml.lo `test -f 'xml.c' || echo '$(srcdir)/'`xml.c
-
-libast_la-xmlchan.lo: xmlchan.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-xmlchan.lo -MD -MP -MF "$(DEPDIR)/libast_la-xmlchan.Tpo" -c -o libast_la-xmlchan.lo `test -f 'xmlchan.c' || echo '$(srcdir)/'`xmlchan.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-xmlchan.Tpo" "$(DEPDIR)/libast_la-xmlchan.Plo"; else rm -f "$(DEPDIR)/libast_la-xmlchan.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xmlchan.c' object='libast_la-xmlchan.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-xmlchan.lo `test -f 'xmlchan.c' || echo '$(srcdir)/'`xmlchan.c
-
-libast_la-zoommap.lo: zoommap.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -MT libast_la-zoommap.lo -MD -MP -MF "$(DEPDIR)/libast_la-zoommap.Tpo" -c -o libast_la-zoommap.lo `test -f 'zoommap.c' || echo '$(srcdir)/'`zoommap.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_la-zoommap.Tpo" "$(DEPDIR)/libast_la-zoommap.Plo"; else rm -f "$(DEPDIR)/libast_la-zoommap.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='zoommap.c' object='libast_la-zoommap.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_la_CFLAGS) $(CFLAGS) -c -o libast_la-zoommap.lo `test -f 'zoommap.c' || echo '$(srcdir)/'`zoommap.c
-
-libast_drama_la-err_drama.lo: err_drama.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_drama_la_CFLAGS) $(CFLAGS) -MT libast_drama_la-err_drama.lo -MD -MP -MF "$(DEPDIR)/libast_drama_la-err_drama.Tpo" -c -o libast_drama_la-err_drama.lo `test -f 'err_drama.c' || echo '$(srcdir)/'`err_drama.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_drama_la-err_drama.Tpo" "$(DEPDIR)/libast_drama_la-err_drama.Plo"; else rm -f "$(DEPDIR)/libast_drama_la-err_drama.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='err_drama.c' object='libast_drama_la-err_drama.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_drama_la_CFLAGS) $(CFLAGS) -c -o libast_drama_la-err_drama.lo `test -f 'err_drama.c' || echo '$(srcdir)/'`err_drama.c
-
-libast_ems_la-err_ems.lo: err_ems.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_ems_la_CFLAGS) $(CFLAGS) -MT libast_ems_la-err_ems.lo -MD -MP -MF "$(DEPDIR)/libast_ems_la-err_ems.Tpo" -c -o libast_ems_la-err_ems.lo `test -f 'err_ems.c' || echo '$(srcdir)/'`err_ems.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_ems_la-err_ems.Tpo" "$(DEPDIR)/libast_ems_la-err_ems.Plo"; else rm -f "$(DEPDIR)/libast_ems_la-err_ems.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='err_ems.c' object='libast_ems_la-err_ems.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_ems_la_CFLAGS) $(CFLAGS) -c -o libast_ems_la-err_ems.lo `test -f 'err_ems.c' || echo '$(srcdir)/'`err_ems.c
-
-libast_err_la-err_null.lo: err_null.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_err_la_CFLAGS) $(CFLAGS) -MT libast_err_la-err_null.lo -MD -MP -MF "$(DEPDIR)/libast_err_la-err_null.Tpo" -c -o libast_err_la-err_null.lo `test -f 'err_null.c' || echo '$(srcdir)/'`err_null.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_err_la-err_null.Tpo" "$(DEPDIR)/libast_err_la-err_null.Plo"; else rm -f "$(DEPDIR)/libast_err_la-err_null.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='err_null.c' object='libast_err_la-err_null.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_err_la_CFLAGS) $(CFLAGS) -c -o libast_err_la-err_null.lo `test -f 'err_null.c' || echo '$(srcdir)/'`err_null.c
-
-libast_grf3d_la-grf3d.lo: grf3d.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_grf3d_la_CFLAGS) $(CFLAGS) -MT libast_grf3d_la-grf3d.lo -MD -MP -MF "$(DEPDIR)/libast_grf3d_la-grf3d.Tpo" -c -o libast_grf3d_la-grf3d.lo `test -f 'grf3d.c' || echo '$(srcdir)/'`grf3d.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_grf3d_la-grf3d.Tpo" "$(DEPDIR)/libast_grf3d_la-grf3d.Plo"; else rm -f "$(DEPDIR)/libast_grf3d_la-grf3d.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='grf3d.c' object='libast_grf3d_la-grf3d.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_grf3d_la_CFLAGS) $(CFLAGS) -c -o libast_grf3d_la-grf3d.lo `test -f 'grf3d.c' || echo '$(srcdir)/'`grf3d.c
-
-libast_pal_la-pal.lo: pal.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pal_la_CFLAGS) $(CFLAGS) -MT libast_pal_la-pal.lo -MD -MP -MF "$(DEPDIR)/libast_pal_la-pal.Tpo" -c -o libast_pal_la-pal.lo `test -f 'pal.c' || echo '$(srcdir)/'`pal.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_pal_la-pal.Tpo" "$(DEPDIR)/libast_pal_la-pal.Plo"; else rm -f "$(DEPDIR)/libast_pal_la-pal.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pal.c' object='libast_pal_la-pal.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pal_la_CFLAGS) $(CFLAGS) -c -o libast_pal_la-pal.lo `test -f 'pal.c' || echo '$(srcdir)/'`pal.c
-
-libast_pgplot_la-grf_pgplot.lo: grf_pgplot.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot_la_CFLAGS) $(CFLAGS) -MT libast_pgplot_la-grf_pgplot.lo -MD -MP -MF "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Tpo" -c -o libast_pgplot_la-grf_pgplot.lo `test -f 'grf_pgplot.c' || echo '$(srcdir)/'`grf_pgplot.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Tpo" "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Plo"; else rm -f "$(DEPDIR)/libast_pgplot_la-grf_pgplot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='grf_pgplot.c' object='libast_pgplot_la-grf_pgplot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot_la_CFLAGS) $(CFLAGS) -c -o libast_pgplot_la-grf_pgplot.lo `test -f 'grf_pgplot.c' || echo '$(srcdir)/'`grf_pgplot.c
-
-libast_pgplot3d_la-grf3d_pgplot.lo: grf3d_pgplot.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot3d_la_CFLAGS) $(CFLAGS) -MT libast_pgplot3d_la-grf3d_pgplot.lo -MD -MP -MF "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Tpo" -c -o libast_pgplot3d_la-grf3d_pgplot.lo `test -f 'grf3d_pgplot.c' || echo '$(srcdir)/'`grf3d_pgplot.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Tpo" "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Plo"; else rm -f "$(DEPDIR)/libast_pgplot3d_la-grf3d_pgplot.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='grf3d_pgplot.c' object='libast_pgplot3d_la-grf3d_pgplot.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_pgplot3d_la_CFLAGS) $(CFLAGS) -c -o libast_pgplot3d_la-grf3d_pgplot.lo `test -f 'grf3d_pgplot.c' || echo '$(srcdir)/'`grf3d_pgplot.c
-
-libast_wcslib_la-proj.lo: proj.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -MT libast_wcslib_la-proj.lo -MD -MP -MF "$(DEPDIR)/libast_wcslib_la-proj.Tpo" -c -o libast_wcslib_la-proj.lo `test -f 'proj.c' || echo '$(srcdir)/'`proj.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_wcslib_la-proj.Tpo" "$(DEPDIR)/libast_wcslib_la-proj.Plo"; else rm -f "$(DEPDIR)/libast_wcslib_la-proj.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='proj.c' object='libast_wcslib_la-proj.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -c -o libast_wcslib_la-proj.lo `test -f 'proj.c' || echo '$(srcdir)/'`proj.c
-
-libast_wcslib_la-wcstrig.lo: wcstrig.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -MT libast_wcslib_la-wcstrig.lo -MD -MP -MF "$(DEPDIR)/libast_wcslib_la-wcstrig.Tpo" -c -o libast_wcslib_la-wcstrig.lo `test -f 'wcstrig.c' || echo '$(srcdir)/'`wcstrig.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_wcslib_la-wcstrig.Tpo" "$(DEPDIR)/libast_wcslib_la-wcstrig.Plo"; else rm -f "$(DEPDIR)/libast_wcslib_la-wcstrig.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wcstrig.c' object='libast_wcslib_la-wcstrig.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -c -o libast_wcslib_la-wcstrig.lo `test -f 'wcstrig.c' || echo '$(srcdir)/'`wcstrig.c
-
-libast_wcslib_la-tpn.lo: tpn.c
- at am__fastdepCC_TRUE@	if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -MT libast_wcslib_la-tpn.lo -MD -MP -MF "$(DEPDIR)/libast_wcslib_la-tpn.Tpo" -c -o libast_wcslib_la-tpn.lo `test -f 'tpn.c' || echo '$(srcdir)/'`tpn.c; \
- at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libast_wcslib_la-tpn.Tpo" "$(DEPDIR)/libast_wcslib_la-tpn.Plo"; else rm -f "$(DEPDIR)/libast_wcslib_la-tpn.Tpo"; exit 1; fi
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tpn.c' object='libast_wcslib_la-tpn.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(STAR_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(libast_wcslib_la_CFLAGS) $(CFLAGS) -c -o libast_wcslib_la-tpn.lo `test -f 'tpn.c' || echo '$(srcdir)/'`tpn.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-distclean-libtool:
-	-rm -f libtool
-uninstall-info-am:
-install-includeMESSAGES: $(include_MESSAGES)
-	@$(NORMAL_INSTALL)
-	test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
-	@list='$(include_MESSAGES)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(includeMESSAGES_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
-	  $(includeMESSAGES_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
-	  $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(includedir)/$$f" || :; \
-	done
-
-uninstall-includeMESSAGES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(include_MESSAGES)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(includedir)/$$f"; \
-	done
-
-# Compile messages for message file ast_err.msg.  This requires that the 
-# @MESSGEN@ substitution was requested in configure.ac, probably implicitly
-# by the STAR_MESSGEN macro.
-#
-# These rules are usable only in the predist state (since the .msg files
-# are typically not distributed), so should be activated only when in that
-# state.
- at PREDIST@AST_ERR: ast_err.msg
- at PREDIST@	$(MESSGEN) -F ast_err.msg
- at PREDIST@ast_err.h: ast_err.msg
- at PREDIST@	$(MESSGEN) -c ast_err.msg
- at PREDIST@fac_1521_err: ast_err.msg
- at PREDIST@	$(MESSGEN) -e ast_err.msg
-install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)"
-	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
-	  $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
-	  $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(pkgdatadir)/$$f" || :; \
-	done
-
-uninstall-dist_pkgdataDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
-	done
-install-dist_starnewsDATA: $(dist_starnews_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(starnewsdir)" || $(mkdir_p) "$(DESTDIR)$(starnewsdir)"
-	@list='$(dist_starnews_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_starnewsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(starnewsdir)/$$f'"; \
-	  $(dist_starnewsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(starnewsdir)/$$f"; \
-	  $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(starnewsdir)/$$f" || :; \
-	done
-
-uninstall-dist_starnewsDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_starnews_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(starnewsdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(starnewsdir)/$$f"; \
-	done
-install-stardocsDATA: $(stardocs_DATA)
-	@$(NORMAL_INSTALL)
-	$(mkdir_p) $(DESTDIR)$(stardocsdir)
-	@list='$(stardocs_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f="`echo $$p | sed -e 's|^.*/||'`"; \
-	  if expr "x$$p" : 'x.*\.htx_tar$$' >/dev/null; then \
-	    if test -n "$(PAX)"; then \
-	      if $(MANIFEST); then \
-		$(PAX) -f $$d$$p | \
-		  sed 's+^+MANIFEST:$(DESTDIR)$(stardocsdir)/+'; \
-	      fi; \
-	      cat $$d$$p | (cd $(DESTDIR)$(stardocsdir); $(PAX) -r); \
-	    elif test -n "$(TAR)"; then \
-	      if $(MANIFEST); then \
-	        cat $$d$$p | (cd $(DESTDIR)$(stardocsdir); $(TAR) xBpvf -) | sed 's+^+MANIFEST:$(DESTDIR)$(stardocsdir)/+'; \
-	      else \
-	        cat $$d$$p | (cd $(DESTDIR)$(stardocsdir); $(TAR) xBpf -); \
-	      fi; \
-	    else \
-	      echo "Neither tar nor pax!!!" >&2; \
-	      exit 1; \
-	    fi; \
-	  else \
-	    echo " $(stardocsDATA_INSTALL) $$d$$p $(DESTDIR)$(stardocsdir)/$$f"; \
-	    $(stardocsDATA_INSTALL) $$d$$p $(DESTDIR)$(stardocsdir)/$$f; \
-	    $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(stardocsdir)/$$f" || :; \
-	  fi; \
-	done
-
-uninstall-stardocsDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(stardocs_DATA)'; for p in $$list; do \
-	  f="`echo $$p | sed -e 's|^.*/||'`"; \
-	  echo " rm -f $(DESTDIR)$(stardocsdir)/$$f"; \
-	  rm -f $(DESTDIR)$(stardocsdir)/$$f; \
-	done
-install-starfacsDATA: $(starfacs_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(starfacsdir)" || $(mkdir_p) "$(DESTDIR)$(starfacsdir)"
-	@list='$(starfacs_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(starfacsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(starfacsdir)/$$f'"; \
-	  $(starfacsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(starfacsdir)/$$f"; \
-	  $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(starfacsdir)/$$f" || :; \
-	done
-
-uninstall-starfacsDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(starfacs_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(starfacsdir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(starfacsdir)/$$f"; \
-	done
-install-includeHEADERS: $(include_HEADERS)
-	@$(NORMAL_INSTALL)
-	test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
-	@list='$(include_HEADERS)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
-	  $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
-	  $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(includedir)/$$f" || :; \
-	done
-
-uninstall-includeHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(include_HEADERS)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(includedir)/$$f"; \
-	done
-install-nodist_includeHEADERS: $(nodist_include_HEADERS)
-	@$(NORMAL_INSTALL)
-	test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
-	@list='$(nodist_include_HEADERS)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(nodist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
-	  $(nodist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
-	  $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(includedir)/$$f" || :; \
-	done
-
-uninstall-nodist_includeHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(nodist_include_HEADERS)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(includedir)/$$f"; \
-	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; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(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; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(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; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && 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)'; \
-	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`; \
-		echo "XPASS: $$tst"; \
-	      ;; \
-	      *) \
-		echo "PASS: $$tst"; \
-	      ;; \
-	      esac; \
-	    elif test $$? -ne 77; then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *" $$tst "*) \
-		xfail=`expr $$xfail + 1`; \
-		echo "XFAIL: $$tst"; \
-	      ;; \
-	      *) \
-		failed=`expr $$failed + 1`; \
-		echo "FAIL: $$tst"; \
-	      ;; \
-	      esac; \
-	    else \
-	      skip=`expr $$skip + 1`; \
-	      echo "SKIP: $$tst"; \
-	    fi; \
-	  done; \
-	  if test "$$failed" -eq 0; then \
-	    if test "$$xfail" -eq 0; then \
-	      banner="All $$all tests passed"; \
-	    else \
-	      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 \
-	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-	    fi; \
-	  fi; \
-	  dashes="$$banner"; \
-	  skipped=""; \
-	  if test "$$skip" -ne 0; then \
-	    skipped="($$skip tests were not run)"; \
-	    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`; \
-	  echo "$$dashes"; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes"; \
-	  test "$$failed" -eq 0; \
-	else :; fi
-
-# Don't express a dependency via the directory .htx, or else make
-# tries to delete it as an intermediate (we can't specify
-# .PRECIOUS targets within this file).
-#
-# Requires that the STAR2HTML substitution was made in
-# configure.ac, probably implicitly by the STAR_LATEX_DOCUMENTATION macro.
-#
-# We do not require that star2html be available on the build system,
-# and so we distribute built HTX documentation.  Thus the following rules
-# should be invoked only in the predist state.  However there isn't a
-# file we can use to test whether we're in that state, so write the
-# test so that it will fail if star2html isn't available.
-#
-# If file $(<:.tex=.htx_tar.extras) is present, then it contains a list
-# of files, each one of which should be added to the .htx directory before
-# it is rolled up into a tarball.
-#
-# Ignore the exit status of star2html, as it can sometimes fail harmlessly.
-.tex.dvi:
-	LATEX=latex; latex2dvi () { $(LATEX2DVI); }; \
-	  latex2dvi ${<:.tex=}
-.dvi.ps:
-	dvips -o $@ $<
-.tex.ps:
-	LATEX=latex; latex2dvi () { $(LATEX2DVI); }; \
-	  latex2dvi ${<:.tex=}
-	dvips -o $@ $(<:.tex=.dvi)
-.tex.pdf:
-	LATEX=pdflatex; latex2dvi () { $(LATEX2DVI); }; \
-	  latex2dvi ${<:.tex=}
-.tex.htx_tar:
-	- @STAR2HTML@ $(STAR2HTML_FLAGS) $<
-	test -d ${<:.tex=.htx}
-	if test -f ${<:.tex=.htx_tar.extras}; then \
-	  for f in `cat ${<:.tex=.htx_tar.extras}`; do \
-	    test -f "$$f" && cp "$$f" ${<:.tex=.htx} || true; \
-	  done; else :; fi
-	tar cf $@ ${<:.tex=.htx}
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	mkdir $(distdir)
-	$(mkdir_p) $(distdir)/.
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(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-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
-	$(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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(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)
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && 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
-	$(am__remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
-distuninstallcheck:
-	@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
-	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
-	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MESSAGES) \
-		$(DATA) $(HEADERS) config.h
-installdirs:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(starnewsdir)" $(DESTDIR)$(stardocsdir) "$(DESTDIR)$(starfacsdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-# If STAR_MANIFEST_DIR is defined and the MANIFEST variable has the
-# (default) string value 'false', then invoke the install-manifest
-# target, otherwise, do the real install rule.  This means that if
-# this is being invoked from within an install-manifest rule further
-# up the process tree, we don't create another manifest, which would
-# stomp on the original.
-#
-# Any Makefile which does special installations should check the
-# $(MANIFEST) variable, which will be ':' or 'false', and if it is
-# true, emit a line to stdout, consisting of the string 'MANIFEST:'
-# followed by the full path of the file being installed.
-install:  $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-	if test -n "$(STAR_MANIFEST_DIR)" -a $(MANIFEST) = false; then \
-	    $(MAKE) $(AM_MAKEFLAGS) install-manifest; \
-	else \
-	    $(MAKE) $(AM_MAKEFLAGS) $(REAL_INSTALL); \
-	fi
-
-install-manifest:
-	$(mkdir_p) $(DESTDIR)$(STAR_MANIFEST_DIR)
-	MFX=$${TMPDIR-/tmp}/manifest-$$$$-1; rm -f $$MFX; MF_INST_OK=:; \
-	  { $(MAKE) MANIFEST=: $(REAL_INSTALL) \
-	    || MF_INST_OK=false; } \
-	    | tee $$MFX | grep -v '^MANIFEST:' || :; \
-	  if $$MF_INST_OK; then \
-	    MF=$${TMPDIR-/tmp}/manifest-$$$$-2; rm -f $$MF; \
-	    ( echo "<?xml version='1.0'?>"; \
-	      echo "<!DOCTYPE manifest SYSTEM 'componentinfo.dtd'>"; \
-	      echo "<manifest component='$(PACKAGE)'>"; \
-	      echo "<version>$(PACKAGE_VERSION)</version>"; \
-	      echo "<files>"; \
-	      sed -n 's/^MANIFEST://p;' $$MFX; \
-	      echo "</files>"; \
-	      echo "</manifest>"; \
-	    ) >$$MF; \
-	    $(INSTALL_DATA) $$MF $(DESTDIR)$(STAR_MANIFEST_DIR)/$(PACKAGE); \
-	  else \
-	    echo "Installation of component $(DESTDIR)$(STAR_MANIFEST_DIR)/$(PACKAGE) failed" >&2; \
-	  fi; \
-	  rm -f $$MFX $$MF; \
-	  $$MF_INST_OK
-
-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:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-rm -f AST_ERR
-	-rm -f ast_err.h
-	-rm -f configure.log
-	-rm -f fac_1521_err
-	-rm -f make.log
-	-rm -f starconf.status
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
-	clean-libtool clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-hdr distclean-libtool distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-dist_pkgdataDATA install-dist_starnewsDATA \
-	install-includeHEADERS install-includeMESSAGES \
-	install-nodist_includeHEADERS install-stardocsDATA \
-	install-starfacsDATA
-
-install-exec-am: install-binSCRIPTS install-dist_binSCRIPTS \
-	install-libLTLIBRARIES
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-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: uninstall-binSCRIPTS uninstall-dist_binSCRIPTS \
-	uninstall-dist_pkgdataDATA uninstall-dist_starnewsDATA \
-	uninstall-includeHEADERS uninstall-includeMESSAGES \
-	uninstall-info-am uninstall-libLTLIBRARIES \
-	uninstall-nodist_includeHEADERS uninstall-stardocsDATA \
-	uninstall-starfacsDATA
-
-.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
-	clean clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
-	clean-libtool clean-noinstPROGRAMS ctags dist dist-all \
-	dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip distcheck \
-	distclean distclean-compile distclean-generic distclean-hdr \
-	distclean-libtool distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-binSCRIPTS install-data \
-	install-data-am install-dist_binSCRIPTS \
-	install-dist_pkgdataDATA install-dist_starnewsDATA \
-	install-exec install-exec-am install-exec-hook \
-	install-includeHEADERS install-includeMESSAGES install-info \
-	install-info-am install-libLTLIBRARIES install-man \
-	install-manifest install-nodist_includeHEADERS \
-	install-stardocsDATA install-starfacsDATA 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 uninstall-binSCRIPTS \
-	uninstall-dist_binSCRIPTS uninstall-dist_pkgdataDATA \
-	uninstall-dist_starnewsDATA uninstall-includeHEADERS \
-	uninstall-includeMESSAGES uninstall-info-am \
-	uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS \
-	uninstall-stardocsDATA uninstall-starfacsDATA
-
-AST_PAR: ast_par.source astbad
-	sed -e 's/<AST__BAD>/'`./astbad | tr 'E' 'D'`'/' ast_par.source >$@
-
-# ast.h depends on the error-facility files.  ast.h _could_ be made
-# before distribution, but since it's generated from other distributed
-# files, it's more robust to distribute makeh and make ast.h on the
-# build host.
-ast.h: $(AST_H_FILES) ast_err.h makeh config.h
-	@PERL@ ./makeh -s $(srcdir) $(AST_H_FILES) >$@
-
-#  Form second links to the main object library (static and shared). This is 
-#  used when a second pass through the library is needed during linking.
-#  Do not forget to change the contents of the libast_pass2.la file to refer
-#  to the pass2 libraries rather than the original libraries. Use target 
-#  install-exec-hook rather than install-exec-local so that the soft links 
-#  and files are created *after* the main library has been installed. 
-install-exec-hook: libast.la
-	$(mkdir_p) $(DESTDIR)$(libdir) 
-	cd $(DESTDIR)$(libdir); \
-	for f in `ls libast.*`; do \
-	   ff=`echo $$f | sed -e 's/libast/libast_pass2/'`; \
-	   if test -f "$$ff"; then rm "$$ff"; fi; \
-	   $(LN_S) $$f $$ff; \
-	   $(MANIFEST) && echo "MANIFEST:$(DESTDIR)$(libdir)/$$ff" || :; \
-	done; \
-	if test -f "libast.la"; then \
-	   if test -f "libast_pass2.la"; then rm "libast_pass2.la"; fi; \
-	   sed -e 's/libast/libast_pass2/g' libast.la > libast_pass2.la; \
-	fi
- at PREDIST@version.h: version.h.in configure.ac
- at PREDIST@	rm -f $@; $(predist_subs) version.h.in >$@
- at PREDIST@builddocs: builddocs.in configure.ac
- at PREDIST@	rm -f $@; $(predist_subs) builddocs.in >$@; chmod +x $@
- at PREDIST@addversion: addversion.in configure.ac
- at PREDIST@	rm -f $@; $(predist_subs) addversion.in >$@; chmod +x $@
-
-# Documentation
- at PREDIST@$(PAPER_DOCUMENTATION): sun211_figures builddocs addversion
- at PREDIST@	./builddocs
-
-# The contents of the sun211_figures directory is identical to that
-# sun210_figures
-sun211_figures: sun210_figures
-	$(LN_S) sun210_figures sun211_figures
-# 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/ast-5.3-1/acinclude.m4 b/ast-5.3-1/acinclude.m4
deleted file mode 100644
index 96fb878..0000000
--- a/ast-5.3-1/acinclude.m4
+++ /dev/null
@@ -1 +0,0 @@
-m4_define([OVERRIDE_PREFIX],[/usr/local])
diff --git a/ast-5.3-1/aclocal.m4 b/ast-5.3-1/aclocal.m4
deleted file mode 100644
index f28a927..0000000
--- a/ast-5.3-1/aclocal.m4
+++ /dev/null
@@ -1,8890 +0,0 @@
-# generated automatically by aclocal 1.9.6-starlink -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 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.
-
-# 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.
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-
-# serial 47 AC_PROG_LIBTOOL
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
-         [],
-         [m4_define([AC_PROVIDE_IFELSE],
-	         [m4_ifdef([AC_PROVIDE_$1],
-		           [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
-  AC_PROVIDE_IFELSE([AC_PROG_CXX],
-    [AC_LIBTOOL_CXX],
-    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
-  ])])
-dnl And a similar setup for Fortran 77 support
-  AC_PROVIDE_IFELSE([AC_PROG_F77],
-    [AC_LIBTOOL_F77],
-    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
-  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-    [AC_LIBTOOL_GCJ],
-    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-      [AC_LIBTOOL_GCJ],
-      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
-	[AC_LIBTOOL_GCJ],
-      [ifdef([AC_PROG_GCJ],
-	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-       ifdef([A][M_PROG_GCJ],
-	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-       ifdef([LT_AC_PROG_GCJ],
-	     [define([LT_AC_PROG_GCJ],
-		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-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
-
-# 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 to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
-    ;;
-  *)
-    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    AC_PATH_MAGIC
-  fi
-  ;;
-esac
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
-    [AC_HELP_STRING([--disable-libtool-lock],
-	[avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
-    [AC_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=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_AC_SYS_COMPILER
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-AC_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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/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.
-AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-])# _LT_LINKER_BOILERPLATE
-
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# 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.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_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.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-echo=${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 <<EOF
-[$]*
-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 "$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 &&
-       echo_test_string="`eval $cmd`" &&
-       (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.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-    [AC_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 __oline__ "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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|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-*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-*linux*)
-          LD="${LD-ld} -m elf_x86_64"
-          ;;
-        ppc*-*linux*|powerpc*-*linux*)
-          LD="${LD-ld} -m elf64ppc"
-          ;;
-        s390*-*linux*)
-          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_TRY_LINK([],[],[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
-  ;;
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-  ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   printf "$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}? :&$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 "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $rm conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    ifelse([$5], , :, [$5])
-else
-    ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                          [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   printf "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The compiler 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 "X$_lt_linker_boilerplate" | $Xsed > conftest.exp
-       $SED '/^$/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $rm conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    ifelse([$4], , :, [$4])
-else
-    ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# 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*)
-    # 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;
-    ;;
-
-  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 *BSD
-    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`
-    ;;
-  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
-    ;;
-  *)
-    # 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.
-    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-    while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
-	       = "XX$teststring") >/dev/null 2>&1 &&
-	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
-	    lt_cv_sys_max_cmd_len=$new_result &&
-	    test $i != 17 # 1/2 MB should be enough
-    do
-      i=`expr $i + 1`
-      teststring=$teststring$teststring
-    done
-    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`
-    ;;
-  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
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# --------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_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 <<EOF
-[#line __oline__ "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}]
-EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_unknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# -------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_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*)
-    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="-dld"],
-	[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="-dld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  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"
-    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_AC_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
-      LDFLAGS="$LDFLAGS $link_static_flag"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-    	  lt_cv_dlopen_self_static, [dnl
-	  _LT_AC_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
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $rm -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   printf "$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}? :&$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 "$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
-   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 > out/conftest.exp
-     $SED '/^$/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w .
-   $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 ..
-   rmdir conftest
-   $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_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
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_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
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
-   test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
-   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$_LT_AC_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_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_AC_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; 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
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[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"
-         AC_MSG_RESULT([yes])
-       else
-  AC_MSG_RESULT([no])
-fi
-       ;;
-   *)
-  AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_MSG_CHECKING([dynamic linker characteristics])
-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"
-if test "$GCC" = yes; then
-  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 ';' >/dev/null ; then
-    # 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.
-    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
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-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'
-  ;;
-
-aix4* | aix5*)
-  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*)
-  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'
-  ;;
-
-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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # 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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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)'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
-  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
-  ;;
-
-kfreebsd*-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='GNU ld.so'
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  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
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    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
-  ;;
-
-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'
-  ;;
-
-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*)
-  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
-  # 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
-
-  # 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)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
-  ;;
-
-knetbsd*-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='GNU 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=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
-  ;;
-
-openbsd*)
-  version_type=sunos
-  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"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  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
-  ;;
-
-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.2uw2* | sysv4.3* | sysv5*)
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-  ;;
-
-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
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_ARG_WITH([tags],
-    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
-        [include additional configurations @<:@automatic@:>@])],
-    [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
-  if test ! -f "${ofile}"; then
-    AC_MSG_WARN([output file `$ofile' does not exist])
-  fi
-
-  if test -z "$LTCC"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-    if test -z "$LTCC"; then
-      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
-    else
-      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
-    fi
-  fi
-
-  # Extract list of available tagged configurations in $ofile.
-  # Note that this assumes the entire list is on one line.
-  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
-  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-  for tagname in $tagnames; do
-    IFS="$lt_save_ifs"
-    # Check whether tagname contains only valid characters
-    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
-    "") ;;
-    *)  AC_MSG_ERROR([invalid tag name: $tagname])
-	;;
-    esac
-
-    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-    then
-      AC_MSG_ERROR([tag name \"$tagname\" already exists])
-    fi
-
-    # Update the list of available tags.
-    if test -n "$tagname"; then
-      echo appending configuration tag \"$tagname\" to $ofile
-
-      case $tagname in
-      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_LIBTOOL_LANG_CXX_CONFIG
-	else
-	  tagname=""
-	fi
-	;;
-
-      F77)
-	if test -n "$F77" && test "X$F77" != "Xno"; then
-	  AC_LIBTOOL_LANG_F77_CONFIG
-	else
-	  tagname=""
-	fi
-	;;
-
-      GCJ)
-	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-	  AC_LIBTOOL_LANG_GCJ_CONFIG
-	else
-	  tagname=""
-	fi
-	;;
-
-      RC)
-	AC_LIBTOOL_LANG_RC_CONFIG
-	;;
-
-      *)
-	AC_MSG_ERROR([Unsupported tag name: $tagname])
-	;;
-      esac
-
-      # Append the new tag name to the list of available tags.
-      if test -n "$tagname" ; then
-      available_tags="$available_tags $tagname"
-    fi
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  # Now substitute the updated list of available tags.
-  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-    mv "${ofile}T" "$ofile"
-    chmod +x "$ofile"
-  else
-    rm -f "${ofile}T"
-    AC_MSG_ERROR([unable to update list of available tagged configurations.])
-  fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 dll's
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
-    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-#- set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
-    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
-    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
-   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognise shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_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="ifelse([$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 <<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
-
-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
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognise a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_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
-    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
-    [AC_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])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])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 GNU ld's 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])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-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 ld's 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
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[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
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise 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
-aix4* | aix5*)
-  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'.
-  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | kfreebsd*-gnu | 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
-  ;;
-
-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]) 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
-  ;;
-
-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*)
-  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=unknown
-  ;;
-
-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
-  ;;
-
-sco3.2v5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  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
-    ;;
-  esac
-  ;;
-
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-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
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    tmp_nm="$ac_dir/${ac_tool_prefix}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"
-  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[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
-  ;;
-*-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_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
-# DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
-# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
-# '${top_srcdir}/' (note the single quotes!).  If your package is not
-# flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  case $enable_ltdl_convenience in
-  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-  "") enable_ltdl_convenience=yes
-      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-  esac
-  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
-  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-  # For backwards non-gettext consistent compatibility...
-  INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
-# DIRECTORY is not provided and an installed libltdl is not found, it is
-# assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
-# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
-# quotes!).  If your package is not flat and you're not using automake,
-# define top_builddir and top_srcdir appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  AC_CHECK_LIB(ltdl, lt_dlinit,
-  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-  [if test x"$enable_ltdl_install" = xno; then
-     AC_MSG_WARN([libltdl not installed, but installation disabled])
-   else
-     enable_ltdl_install=yes
-   fi
-  ])
-  if test x"$enable_ltdl_install" = x"yes"; then
-    ac_configure_args="$ac_configure_args --enable-ltdl-install"
-    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
-    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-  else
-    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-    LIBLTDL="-lltdl"
-    LTDLINCL=
-  fi
-  # For backwards non-gettext consistent compatibility...
-  INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-# _LT_AC_PROG_CXXCPP
-# ---------------
-AC_DEFUN([_LT_AC_PROG_CXXCPP],
-[
-AC_REQUIRE([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
-fi
-])# _LT_AC_PROG_CXXCPP
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
-    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
-      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
-	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
-	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# --------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[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_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
-
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-#
-# Check for any special shared library compilation flags.
-#
-_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
-if test "$GCC" = no; then
-  case $host_os in
-  sco3.2v5*)
-    _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
-    ;;
-  esac
-fi
-if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
-  AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
-  if echo "$old_CC $old_CFLAGS " | grep "[[ 	]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ 	]]" >/dev/null; then :
-  else
-    AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
-    _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
-  fi
-fi
-
-
-#
-# Check to make sure the static flag actually works.
-#
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
-  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
-  $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
-  [],
-  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-# Report which librarie types wil 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
-  ;;
-
-aix4* | aix5*)
-  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])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cc
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_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_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
-  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
-  unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
-  # Set up default GNU C++ configuration
-
-  AC_PROG_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-    _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_AC_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_AC_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 "\-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_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
-  aix3*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  aix4* | aix5*)
-    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]].*|aix5*)
-	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_AC_TAGVAR(archive_cmds, $1)=''
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-    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
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-	else
-	  # We have old collect2
-	  _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_AC_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
-
-    # It seems that -bexpall does not export symbols beginning with
-    # underscore (_), so it is better to generate a list of symbols to export.
-    _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-      # Determine the default libpath from the value encoded in an empty executable.
-      _LT_AC_SYS_LIBPATH_AIX
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-     else
-      if test "$host_cpu" = ia64; then
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-      else
-	# Determine the default libpath from the value encoded in an empty executable.
-	_LT_AC_SYS_LIBPATH_AIX
-	_LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	# -bexpall does not export symbols beginning with underscore (_)
-	_LT_AC_TAGVAR(always_export_symbols, $1)=yes
-	# Exported symbols can be pulled into shared objects from archives
-	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
-	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-	# This is similar to how AIX traditionally builds it's shared libraries.
-	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-      fi
-    fi
-    ;;
-  chorus*)
-    case $cc_basename in
-      *)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-    esac
-    ;;
-
-
-  cygwin* | mingw* | pw32*)
-    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-    # as there is no search path for DLLs.
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-    _LT_AC_TAGVAR(always_export_symbols, $1)=no
-    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-      # If the export-symbols file already is a .def file (1st line
-      # is EXPORTS), use it as is; otherwise, prepend...
-      _LT_AC_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}--image-base=0x10000000 ${wl}--out-implib,$lib'
-    else
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-  ;;
-      darwin* | rhapsody*)
-        case "$host_os" in
-        rhapsody* | darwin1.[[012]])
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[[012]])
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-        esac
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-    if test "$GXX" = yes ; then
-      lt_int_apple_cc_single_mod=no
-      output_verbose_link_cmd='echo'
-      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
-       lt_int_apple_cc_single_mod=yes
-      fi
-      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-      else
-          _LT_AC_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'
-        fi
-        _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          else
-            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          fi
-            _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-          ;;
-      esac
-      fi
-        ;;
-
-  dgux*)
-    case $cc_basename in
-      ec++*)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      ghcx*)
-	# Green Hills C++ Compiler
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      *)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-    esac
-    ;;
-  freebsd[[12]]*)
-    # C++ shared libraries reported to be fairly broken before switch to ELF
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  freebsd-elf*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    ;;
-  freebsd* | kfreebsd*-gnu | dragonfly*)
-    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-    # conventions
-    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-    ;;
-  gnu*)
-    ;;
-  hpux9*)
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    aCC*)
-      _LT_AC_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) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-      ;;
-    *)
-      if test "$GXX" = yes; then
-        _LT_AC_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'
-      else
-        # FIXME: insert proper C++ library support
-        _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-    ;;
-  hpux10*|hpux11*)
-    if test $with_gnu_ld = no; then
-      case "$host_cpu" in
-      hppa*64*)
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-        ;;
-      ia64*)
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        ;;
-      *)
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        ;;
-      esac
-    fi
-    case "$host_cpu" in
-    hppa*64*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-    ia64*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					      # but as the default
-					      # location of the library.
-      ;;
-    *)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      aCC*)
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
-	  ;;
-	*)
-	  _LT_AC_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; echo $list'
-	;;
-      *)
-	if test "$GXX" = yes; then
-	  if test $with_gnu_ld = no; then
-	    case "$host_cpu" in
-	    ia64*|hppa*64*)
-	      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
-	      ;;
-	    *)
-	      _LT_AC_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'
-	      ;;
-	    esac
-	  fi
-	else
-	  # FIXME: insert proper C++ library support
-	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-    esac
-    ;;
-  irix5* | irix6*)
-    case $cc_basename in
-      CC*)
-	# SGI C++
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	  else
-	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
-	  fi
-	fi
-	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-	;;
-    esac
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-    ;;
-  linux*)
-    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_AC_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_AC_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; echo $list'
-
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
-	_LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	;;
-      icpc*)
-	# 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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-  	  _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	  _LT_AC_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_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	;;
-      pgCC*)
-        # Portland Group C++ compiler
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-  	_LT_AC_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'
-
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	_LT_AC_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'
-        ;;
-      cxx*)
-	# Compaq C++
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	_LT_AC_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=`echo $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; echo $list'
-	;;
-    esac
-    ;;
-  lynxos*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  m88k*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  mvs*)
-    case $cc_basename in
-      cxx*)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      *)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-    esac
-    ;;
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-      wlarc=
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_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::"'
-    ;;
-  openbsd2*)
-    # C++ shared libraries are fairly broken
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  openbsd*)
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-    _LT_AC_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_AC_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_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    fi
-    output_verbose_link_cmd='echo'
-    ;;
-  osf3*)
-    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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	# Archives containing C++ object files must be created using
-	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
-	;;
-      RCC*)
-	# Rational C++ 2.4.1
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      cxx*)
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	_LT_AC_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=`echo $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; echo $list'
-	;;
-      *)
-	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	  _LT_AC_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 ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	  _LT_AC_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 "\-L"'
-
-	else
-	  # FIXME: insert proper C++ library support
-	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-    esac
-    ;;
-  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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	# Archives containing C++ object files must be created using
-	# the KAI C++ compiler.
-	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
-	;;
-      RCC*)
-	# Rational C++ 2.4.1
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      cxx*)
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	_LT_AC_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=`echo $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; echo $list'
-	;;
-      *)
-	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	 _LT_AC_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` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	  _LT_AC_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 "\-L"'
-
-	else
-	  # FIXME: insert proper C++ library support
-	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-    esac
-    ;;
-  psos*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  sco*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    case $cc_basename in
-      CC*)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      *)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-    esac
-    ;;
-  sunos4*)
-    case $cc_basename in
-      CC*)
-	# Sun C++ 4.x
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      lcc*)
-	# Lucid
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      *)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-    esac
-    ;;
-  solaris*)
-    case $cc_basename in
-      CC*)
-	# Sun C++ 4.2, 5.x and Centerline C++
-	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	_LT_AC_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} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-	case $host_os in
-	  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	  *)
-	    # The C++ compiler is used as linker so we must use $wl
-	    # flag to pass the commands to the underlying system
-	    # linker. We must also pass each convience library through
-	    # to the system linker between allextract/defaultextract.
-	    # The C++ compiler will combine linker options so we
-	    # cannot just pass the convience library names through
-	    # without $wl.
-	    # Supported since Solaris 2.6 (maybe 2.5.1?)
-	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
-	    ;;
-	esac
-	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-	# 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 -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
-	# 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	;;
-      gcx*)
-	# Green Hills C++ Compiler
-	_LT_AC_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_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	  if $CC --version | grep -v '^2\.7' > /dev/null; then
-	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	    _LT_AC_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'
-
-	    # 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\""
-	  else
-	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	    # platform.
-	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	    _LT_AC_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 \"\-L\""
-	  fi
-
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	fi
-	;;
-    esac
-    ;;
-  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    ;;
-  tandem*)
-    case $cc_basename in
-      NCC*)
-	# NonStop-UX NCC 3.20
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-      *)
-	# FIXME: insert proper C++ library support
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	;;
-    esac
-    ;;
-  vxworks*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  *)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-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
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([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.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
-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...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-EOF
-])
-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
-
-  # The `*' in the case matches for architectures that use `case' in
-  # $output_verbose_cmd can trigger glob expansion during the loop
-  # eval without this substitution.
-  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
-
-  for p in `eval $output_verbose_link_cmd`; do
-    case $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
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p 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_AC_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_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_AC_TAGVAR(postdeps, $1)"; then
-	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$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_AC_TAGVAR(predep_objects, $1)"; then
-	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
-	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_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
-
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_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_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="      program t\n      end\n"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_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"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-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
-  ;;
-aix4* | aix5*)
-  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])
-
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_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"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-
-# 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_AC_SYS_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"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then 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
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # 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
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    _LT_AC_TAGVAR(compiler, $1) \
-    _LT_AC_TAGVAR(CC, $1) \
-    _LT_AC_TAGVAR(LD, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
-    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
-    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
-    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
-    _LT_AC_TAGVAR(old_archive_cmds, $1) \
-    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
-    _LT_AC_TAGVAR(predep_objects, $1) \
-    _LT_AC_TAGVAR(postdep_objects, $1) \
-    _LT_AC_TAGVAR(predeps, $1) \
-    _LT_AC_TAGVAR(postdeps, $1) \
-    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
-    _LT_AC_TAGVAR(archive_cmds, $1) \
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
-    _LT_AC_TAGVAR(postinstall_cmds, $1) \
-    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
-    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
-    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
-    _LT_AC_TAGVAR(no_undefined_flag, $1) \
-    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
-    _LT_AC_TAGVAR(hardcode_automatic, $1) \
-    _LT_AC_TAGVAR(module_cmds, $1) \
-    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
-    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
-    _LT_AC_TAGVAR(exclude_expsyms, $1) \
-    _LT_AC_TAGVAR(include_expsyms, $1); do
-
-    case $var in
-    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
-    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
-    _LT_AC_TAGVAR(archive_cmds, $1) | \
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
-    _LT_AC_TAGVAR(module_cmds, $1) | \
-    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
-    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
-    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\[$]0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
-    ;;
-  esac
-
-ifelse([$1], [],
-  [cfgfile="${ofile}T"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  $rm -f "$cfgfile"
-  AC_MSG_NOTICE([creating $ofile])],
-  [cfgfile="$ofile"])
-
-  cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# 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//"
-
-# 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
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $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.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# 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=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# 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
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
-  case $host_os in
-  aix3*)
-    cat <<\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
-EOF
-    ;;
-  esac
-
-  # 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)
-
-  mv -f "$cfgfile" "$ofile" || \
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-])
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# 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]]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  ;;
-linux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDGIRSTW]]'
-    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris* | sysv5*)
-  symcode='[[BDRT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# 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
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, 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.
-  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-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 <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
-	  cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-	  cat <<\EOF >> conftest.$ac_ext
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_AC_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"
-	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 -f 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
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-    amigaos*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-      ;;
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | os2* | pw32*)
-      # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # 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*)
-	;;
-      *)
-	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix4* | aix5*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_AC_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
-	;;
-       darwin*)
-         # PIC is the default on this platform
-         # Common symbols not allowed in MH_DYLIB files
-         case $cc_basename in
-           xlc*)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           ;;
-         esac
-       ;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | kfreebsd*-gnu | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
-	    if test "$host_cpu" != ia64; then
-	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
-	    case "$host_cpu" in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux*)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  icpc* | ecpc*)
-	    # Intel C++
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC*)
-	    # Portland Group C++ compiler.
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      sco*)
-	case $cc_basename in
-	  CC*)
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      unixware*)
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | pw32* | os2*)
-      # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
-         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | pw32* | os2*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    newsos6)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    linux*)
-      case $cc_basename in
-      icc* | ecc*)
-	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      pgcc* | pgf77* | pgf90*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      ccc*)
-        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    sco3.2v5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
-      ;;
-
-    solaris*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    unicos*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
-    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
-    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case "$host_os" in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
-  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix4* | aix5*)
-    # 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
-    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-      _LT_AC_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'
-    else
-      _LT_AC_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_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw*)
-    _LT_AC_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'
-  ;;
-  *)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-],[
-  runpath_var=
-  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_AC_TAGVAR(archive_cmds, $1)=
-  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
-  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_AC_TAGVAR(hardcode_direct, $1)=no
-  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
-  _LT_AC_TAGVAR(module_cmds, $1)=
-  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
-  _LT_AC_TAGVAR(always_export_symbols, $1)=no
-  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_AC_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_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
-  # 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.
-  extract_expsyms_cmds=
-  # Just being paranoid about ensuring that cc_basename is set.
-  _LT_CC_BASENAME([$compiler])
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = 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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-    _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>/dev/null` in
-      *\ [[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
-    aix3* | aix4* | aix5*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
-      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	_LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(always_export_symbols, $1)=no
-      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_AC_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'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_AC_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}--image-base=0x10000000  ${wl}--out-implib,$lib'
-      else
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    linux*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	tmp_addflag=
-	case $cc_basename,$host_cpu in
-	pgcc*)				# Portland Group C compiler
-	  _LT_AC_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'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* )			# Portland Group f77 and f90 compilers
-	  _LT_AC_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'
-	  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' ;;
-	esac
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-	if test $supports_anon_versioning = yes; then
-	  _LT_AC_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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	fi
-      else
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris* | sysv5*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-	_LT_AC_TAGVAR(ld_shlibs, $1)=no
-	cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sunos4*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-      _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$link_static_flag"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix4* | aix5*)
-      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
-	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-	  _LT_AC_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'
-	else
-	  _LT_AC_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]].*|aix5*)
-	  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_AC_TAGVAR(archive_cmds, $1)=''
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-      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
-  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-	  else
-  	  # We have old collect2
-  	  _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-  	  _LT_AC_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
-
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       _LT_AC_SYS_LIBPATH_AIX
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-	if test "$host_cpu" = ia64; then
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an empty executable.
-	 _LT_AC_SYS_LIBPATH_AIX
-	 _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # -bexpall does not export symbols beginning with underscore (_)
-	  _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
-	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds it's shared libraries.
-	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      # see comment about different semantics on the GNU ld section
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    bsdi[[45]]*)
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case "$host_os" in
-        rhapsody* | darwin1.[[012]])
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[[012]])
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-    if test "$GCC" = yes ; then
-#        echo "G77=$G77,compiler=$compiler,tagname=$tagname"
-        if test "$tagname" = "F77"; then
-_LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        else
-_LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        fi
-    	output_verbose_link_cmd='echo'
-      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | kfreebsd*-gnu | dragonfly*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_AC_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'
-      else
-	_LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10* | hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	*)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*)
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
-	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	ia64*)
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
-	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	*)
-	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    openbsd*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      else
-       case $host_os in
-	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	   ;;
-	 *)
-	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	   ;;
-       esac
-      fi
-      ;;
-
-    os2*)
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_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_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_AC_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~
-	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    sco3.2v5*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ;;
-
-    solaris*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_AC_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}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-	wlarc=''
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_AC_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'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
- 	# The compiler driver will combine linker options so we
- 	# cannot just pass the convience library names through
- 	# without $wl, iff we do not link with $LD.
- 	# Luckily, gcc supports the same syntax we need for Sun Studio.
- 	# Supported since Solaris 2.6 (maybe 2.5.1?)
- 	case $wlarc in
- 	'')
- 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
- 	*)
- 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- 	esac ;;
-      esac
-      _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4.2uw2*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      hardcode_runpath_var=yes
-      runpath_var=LD_RUN_PATH
-      ;;
-
-   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
-      if test "$GCC" = yes; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      runpath_var='LD_RUN_PATH'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv5*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
-      # $CC -shared without GNU ld will not create a library from C++
-      # object files and a static libstdc++, better avoid it by now
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_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'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-      ;;
-
-    uts4*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-  fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = 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
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_AC_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_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $rm conftest*
-      printf "$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_AC_TAGVAR(lt_prog_compiler_wl, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
-        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# #  ifdef __CYGWIN32__
-# #    define __CYGWIN__ __CYGWIN32__
-# #  endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-#   __hDllInstance_base = hInst;
-#   return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
-  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-  AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-# 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.                               #
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-AC_DEFUN([LT_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
-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_MSG_RESULT([$SED])
-])
-
-# -*- mode: m4 -*-
-# Starlink M4 macros for autoconf
-# original starconf.m4, installed by starconf 1.3, rnum=1003000
-# DO NOT EDIT: it may be overwritten when starconf is next run
-
-
-# STAR_DEFAULTS(options='')
-# -------------------------
-# Defaults for Starlink configure.ac files.  The optional OPTIONS
-# argument holds a space-separated list of option keywords, of which
-# the only ones at present are `per-package-dirs', which causes
-# applications and help to be installed in a package-specific
-# directory, and 'docs-only', which indicates that the component contains
-# only documentation.
-#
-# Certain features of this macro are documented in SSN/78, in particular
-#   - Sets STARLINK
-#   - Sets AM_FCFLAGS, AM_FFLAGS, AM_CFLAGS, AM_LDFLAGS to appropriate values
-#   - Sets PACKAGE_VERSION_{MAJOR,MINOR,RELEASE,INTEGER}
-# The behaviour of these should not be changed without changing the
-# documentation, or without due consideration of the packages which use
-# the earlier behaviour.  Everything else is, in principle, private
-# (not that that's going to stop folk).
-AC_DEFUN([STAR_DEFAULTS],
-[##
-m4_ifval([$1],
-         [AC_FOREACH([Option], [$1],
-                     [m4_case(Option,
-                              [per-package-dirs], [_star_per_package_dirs=:],
-                              [docs-only], [m4_define([_poss_STAR_RESTFP_FIX],
-                                                      [])dnl
-                                           _star_docs_only=:],
-                              [AC_FATAL([$0: unrecognised option $1])])
-                      ])],
-         [])
-m4_ifdef([_poss_STAR_RESTFP_FIX],
-         [],
-         [m4_define([_poss_STAR_RESTFP_FIX], [_STAR_RESTFP_FIX])])
-
-m4_define([per_dir_PREFIX],   [m4_ifdef([OVERRIDE_PREFIX],
-                                        [OVERRIDE_PREFIX],
-                                        [/stardev/git/starlink/star])])
-m4_define([per_dir_STARLINK], [m4_ifdef([OVERRIDE_STARLINK],
-                                        [OVERRIDE_STARLINK],
-                                        [/stardev/git/starlink/star])])
-
-test -n "$_star_per_package_dirs" || _star_per_package_dirs=false
-test -n "$_star_docs_only"        || _star_docs_only=false
-
-
-# Ensure that STARLINK has a value, defaulting to
-# /stardev/git/starlink/star.  Note that this directory may be
-# different from /star, and reflects the value of
-# STARCONF_DEFAULT_STARLINK that the `starconf' package was configured
-# with before its installation. 
-#
-# We use $STARLINK as the location of any other Starlink tools we need
-# to use during the building of our packages, and for the location of
-# any manifests we need to check.  It is permissable for it to be
-# different from $(prefix): this is partly because we have no way of
-# enforcing that the two be the same, since the user can set
-# prefix=xxx on the `make install' command line, and partly so that it
-# is possible to make a test version of a new package, using tools
-# from an old installation, but installing in a new place.
-#
-# However, we install software in /stardev/git/starlink/star by
-# default.  This is so even if $STARLINK and STARCONF_DEFAULT_STARLINK
-# are different, because in this case we are planning to use a
-# previous installation in $STARLINK or $STARCONF_DEFAULT_STARLINK,
-# but install the newly built tool elsewhere. 
-#
-# In most cases, including the most important case where we are
-# building the tree from scratch, in a checked out directory,
-# STARLINK, STARCONF_DEFAULT_STARLINK and STARCONF_DEFAULT_PREFIX will
-# all be the same.  That's OK because a separate aspect of the build
-# process, respecting the various dependencies expresses in source
-# directories, ensures that we don't use (and install) any Starlink
-# tools in one component before that component has been build and
-# installed. 
-
-AC_PREFIX_DEFAULT(per_dir_PREFIX)dnl
-
-test -n "$STARLINK" || STARLINK=per_dir_STARLINK
-
-# Handle the --with-starlink option.  If --with-starlink is present
-# with no argument (the default), we do nothing as this simply
-# indicates that this is part of a Starlink tree.  If it has an
-# argument, then this overrides the location of the Starlink tree.
-# Option --without-starlink or --with-starlink=no indicates that this
-# is being built _not_ as part of a Starlink build (that is, it's
-# being distributed as something other than a Starlink package).  In
-# this case, the variable STARLINK is unset.
-AC_ARG_WITH(starlink,
-            AS_HELP_STRING([--with-starlink],
-                           [Starlink tree to use (default ${STARLINK:=per_dir_STARLINK})]),
-            [if test -z "$withval" -o "$withval" = yes; then
-                 : nothing needs to be done
-             elif test "X$withval" = Xno; then
-                 unset STARLINK
-             elif test -d "$withval"; then
-                 STARLINK="$withval"
-             else
-                 AC_MSG_WARN([--with-starlink given nonexistent directory; ignored: using default $STARLINK instead])
-             fi])
-if test -n "$STARLINK"; then
-    AC_MSG_NOTICE([Starlink tree located at $STARLINK])
-else
-    AC_MSG_NOTICE([Not being built as part of the Starlink tree])
-fi
-
-# Handle --without-stardocs.  Don't build and install documentation.
-# Default is --with-stardocs.
-_star_build_docs=:
-AC_ARG_WITH(stardocs,
-            AS_HELP_STRING([--without-stardocs],
-                           [Do not install built documentation (default --with)]),
-            [if test -z "$withval"; then
-                 _star_build_docs=: # default
-             elif test "X$withval" = Xno; then
-                 _star_build_docs=false
-             elif test "X$withval" = Xyes; then
-                 _star_build_docs=:
-             else
-                 AC_MSG_WARN([bad arg to --with-stardocs: using yes])
-                 _star_build_docs=:
-             fi])
-
-if $_star_docs_only; then
-    if $_star_build_docs; then
-        : OK
-    else
-        AC_MSG_WARN([Building without documentation in a docs-only directory])
-    fi
-fi
-
-# Everything depends on where /star is.  Declare STARLINK as a
-# `precious variable'.  Amongst other things, this will make
-# ./configure squeal if the package is re-configured with an
-# inconsistent value of this variable.
-AC_ARG_VAR(STARLINK, [Location of a current Starlink tree (used if necessary)])dnl
-
-# AC_SUBST the STARLINK variable.  Macro AC_ARG_VAR does this anyway,
-# but automake doesn't know that (in 1.6 at least): however any
-# variable that automake finds has been AC_SUBSTed, it includes in
-# Makefile.in, and we need that.
-AC_SUBST(STARLINK)
-
-# Use the above information: $STARLINK indicates a preexisting
-# Starlink tree.
-#
-# Avoid doing anything if $STARLINK was unset above.
-#
-# Add library search paths using STAR_LDFLAGS.  Do it this way, rather than
-# by defining LIBS (which is also a non-user variable): (a) these are
-# really options to the linker, rather than adjustments to the set of
-# libraries, so this makes sense; also (b) adding them to LIBS is too
-# late, since that adds -L _after_ any -l options found in *_LDADD.
-if test -n "$STARLINK"; then
-    STAR_CPPFLAGS="-I$STARLINK/include"
-    STAR_FCFLAGS="-I$STARLINK/include"
-    STAR_FFLAGS="-I$STARLINK/include"
-    STAR_LDFLAGS="-L$STARLINK/lib"
-else
-    STAR_CPPFLAGS=
-    STAR_FCFLAGS=
-    STAR_FFLAGS=
-    STAR_LDFLAGS=
-fi
-AC_SUBST(STAR_CPPFLAGS)
-AC_SUBST(STAR_FCFLAGS)
-AC_SUBST(STAR_FFLAGS)
-AC_SUBST(STAR_LDFLAGS)
-
-
-_poss_STAR_RESTFP_FIX
-
-# Installation directory options (these are no longer handled
-# by _STAR_EXTRADIR_COMMON).  There should be an entry here for each of
-# Starlink's special installation locations.
-AC_SUBST([stardocsdir],     ['${prefix}/docs'])dnl     documentation
-AC_SUBST([staretcdir],      ['${prefix}/etc'])dnl
-AC_SUBST([starexamplesdir], ['${prefix}/examples'])dnl
-AC_SUBST([starfacsdir],     ['${prefix}/help'])dnl     facilities files
-AC_SUBST([starhelpdir],     ['${prefix}/help'])dnl     other help files
-AC_SUBST([starnewsdir],     ['${prefix}/news'])dnl
-
-# Certain directories are affected by the $_star_per_package_dir variable;
-# if it's true, then add the $PACKAGE_NAME to the directory.
-# The directories currently adjusted by this are bin and help;
-# there are others: see PWD's message of 2004-02-16
-# <http://www.jiscmail.ac.uk/cgi-bin/wa.exe?A2=ind0402&L=stardev&T=0&F=&S=&P=5153>
-if $_star_per_package_dirs; then
-    bindir="$bindir/$PACKAGE_NAME"
-    starhelpdir="$starhelpdir/$PACKAGE_NAME"
-    staretcdir="$staretcdir/$PACKAGE_NAME"
-    AC_MSG_NOTICE([[STAR_DEFAULTS] has option per-package-dirs:])
-    AC_MSG_NOTICE([    bindir=$bindir starhelpdir=$starhelpdir staretcdir=$staretcdir])
-    # Note that starfacsdir is unaffected by per-package-dirs -- facility
-    # files must always be installed in .../help (this also facilitates
-    # changing this installation location in future, to somewhere with a
-    # more logical name than .../help).
-fi
-
-
-# Dependency declarations and checks.
-# Everything is dependent on starconf, so we don't have to declare that 
-# for each package separately.
-# STAR_DEPENDENCIES_ATTRIBUTES is currently not used.
-STAR_DEPENDENCIES_ATTRIBUTES=''
-STAR_DEPENDENCIES_CHILDREN=''
-AC_SUBST(STAR_DEPENDENCIES_ATTRIBUTES)
-AC_SUBST(STAR_DEPENDENCIES_CHILDREN)
-
-# List of documentation.  See [STAR_LATEX_DOCUMENTATION].
-# STAR_DOCUMENTATION is a list of document codes,
-STAR_DOCUMENTATION=
-AC_SUBST([STAR_DOCUMENTATION])
-
-# Create a PACKAGE_VERSION_INTEGER variable, which contains the
-# package's version number as an integer major*1e6+minor*1e3+release.
-eval [`echo $VERSION | sed -e 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/PACKAGE_VERSION_MAJOR=\1; PACKAGE_VERSION_MINOR=\2; PACKAGE_VERSION_RELEASE=\3;/'`]
-test -n "$PACKAGE_VERSION_MAJOR"   || PACKAGE_VERSION_MAJOR=0
-test -n "$PACKAGE_VERSION_MINOR"   || PACKAGE_VERSION_MINOR=0
-test -n "$PACKAGE_VERSION_RELEASE" || PACKAGE_VERSION_RELEASE=0
-PACKAGE_VERSION_INTEGER=`expr $PACKAGE_VERSION_MAJOR \* 1000000 + $PACKAGE_VERSION_MINOR \* 1000 + $PACKAGE_VERSION_RELEASE`
-AC_SUBST(PACKAGE_VERSION_MAJOR)
-AC_SUBST(PACKAGE_VERSION_MINOR)
-AC_SUBST(PACKAGE_VERSION_RELEASE)
-AC_SUBST(PACKAGE_VERSION_INTEGER)
-dnl Don't put this into config.h -- subst a .h file if required.
-dnl May change this in future
-dnl AC_DEFINE_UNQUOTED([PACKAGE_VERSION_INTEGER], $PACKAGE_VERSION_INTEGER,
-dnl                    [Integer version number, in the form major*1e6+minor*1e3+release])
-
-# When we do dependency checking, using the dependencies declared in
-# the package's configure.ac, we do so by looking at what tools have
-# already been installed in the Starlink tree.  The tree in question
-# is to be found under $STARLINK (see above), so we check that a
-# package is installed by checking that its manifest can be found in
-# $STARLINK/manifests.  We don't AC_SUBST this.
-current_MANIFESTS=$STARLINK/manifests
-
-# When we install manifests, however, they should go in the
-# installation directory.  Allow this to be defaulted from the environment.
-# In particular, if it is set to null in the environment, this will
-# suppress the installation of manifests.
-: ${STAR_MANIFEST_DIR='$(prefix)/manifests'}
-AC_SUBST(STAR_MANIFEST_DIR)
-
-# Each package updates the "starlink.version" file installed into the
-# manifests directory. This tracks the last git sha1 checkin for
-# the current code state by running the git show on the HEAD.
-# Define GIT as the program to run, but allow it to be overridden 
-# (most likely by ":" to avoid the overhead).
-# Also requires that STAR_SOURCE_ROOT_DIR is defined to locate the
-# head of the source tree.
-: ${GIT='git'}
-if test "${GIT}" = "git"; then
-   AC_PATH_PROG(GIT, git)
-fi
-AC_SUBST(GIT)
-
-: ${STAR_SOURCE_ROOT_DIR=''}
-AC_SUBST(STAR_SOURCE_ROOT_DIR)
-
-# Although PACKAGE_VERSION is a default output variable, it isn't
-# added as a Makefile variable by default.  We need it below, however,
-# so add it now.
-AC_SUBST(PACKAGE_VERSION)
-
-# Initialise state of predist/postdist flags (see STAR_PREDIST_SOURCES).
-# The value of _star_predist_status must be inherited by any
-# ./configure run in a subdirectory, so that we there avoid the predist
-# test of starconf.status: in a pre-distribution state, this file must
-# be present in the component directory (where we are running
-# ./configure), but must not be present in any subdirectory.
-_star_predist_status=unknown
-PREDIST='#'  # safe default
-AC_SUBST(PREDIST)
-
-# pax and/or tar are used in some install targets.
-# Note: value-if-not-found should be blank, so this can be tested for.
-AC_PATH_PROG(PAX, pax)
-AC_PATH_PROGS(TAR, [gnutar tar])
-
-ALL_TARGET=all-am-normal
-
-# Default $prefix.  This is done by the standard autoconf configure, but at
-# a slightly later stage than this.  Doing it here, as part of STAR_[]DEFAULTS
-# means that the defaulted value of $prefix can be used within the body of
-# the configure.ac, for example to pass it to a ./configure in a subdirectory.
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-])# STAR_DEFAULTS
-
-
-
-# STAR_MESSGEN([msgfile-list])
-# ----------------------------
-#
-# Handle generating message, error, and facility files.
-#
-# Declare that we will need to use the messgen utility.  This macro
-# does not by itself cause the messgen rules to be included in the
-# makefile -- that is done by automake, when it sees a
-# 'include_MESSAGES' or 'noinst_MESSAGES' variable.
-#
-# The optional argument is a space-separated list of files, each of
-# which has a set of message declarations in it, in the format
-# prescribed by the messgen utility.  If this is present, then the
-# named files are declared as pre-distribution files (the macro calls
-# STAR_PREDIST_SOURCES on them), and so the resulting configure script
-# should expect not to find them in an unpacked distribution.  This is
-# useful as documentation or as a shortcut for calling the latter
-# macro, but recall that it is the presence of the automake
-# 'include_MESSAGES' variable which does the work.
-#
-# The macro may be called more than once if you have more than one
-# .msg file in the directory.
-#
-# The files listed in the '_MESSAGES' variable will often have to be 
-# declared as `BUILT_SOURCES'.  
-#
-# The macro also implicitly declares a `sourceset' dependency on the
-# messgen package.
-AC_DEFUN([STAR_MESSGEN],
-   [#
-    $_star_docs_only &&
-        AC_MSG_ERROR([STAR[]_MESSGEN in docs-only directory])
-    STAR_DECLARE_DEPENDENCIES([sourceset], [messgen])
-    m4_ifval([$1], [STAR_PREDIST_SOURCES($1)])
-    STAR_CHECK_PROGS(messgen)
-])# STAR_MESSGEN
-
-
-# STAR_PREDIST_SOURCES(source-files)
-# ----------------------------------
-#
-# Give a (space-separated) list of files which should exist only in
-# the pre-distribution (ie, repository checkout) state.  If one of
-# these is found, then the substitution variable PREDIST is set to a
-# blank.  We should find either all of the marker files or none of
-# them; if only some of the marker files are found, this is probably
-# an error of some type, so warn about it.  This means, by the way,
-# that it is the presence or absence of the first marker file which
-# determines whether we are in the predist or postdist state, with the
-# rest providing consistency checks.
-#
-# The macro may be called more than once.  Multiple calls are
-# equivalent to a single call with all the marker files in the list.
-# Automake checks that the files listed here are not in the list of
-# distributed files, and issues a warning if they are.
-AC_DEFUN([STAR_PREDIST_SOURCES],
-[m4_ifval([$1], [], [AC_FATAL([$0: called with no stamp file])])dnl
-_star_tmp='$1'
-for marker in $_star_tmp
-do
-    if test -f $marker; then
-        _star_predist_marker_present=:
-        AC_MSG_NOTICE([found predist marker file $marker])
-    else
-        _star_predist_marker_present=false
-    fi
-    case $_star_predist_status in
-        unknown)
-            if $_star_predist_marker_present; then
-                # we do want to build sourceset files
-                _star_predist_status=predist
-                PREDIST=
-                AC_MSG_NOTICE([in pre-distribution state])
-            else
-                _star_predist_status=postdist
-                PREDIST='#'
-                AC_MSG_NOTICE([in post-distribution state])
-            fi
-            ;;
-        predist)
-            if $_star_predist_marker_present; then
-                : OK
-            else
-                AC_MSG_WARN([Building predist, but marker file $marker is not present])
-            fi
-            ;;
-        postdist)
-            if $_star_predist_marker_present; then
-                AC_MSG_WARN([In postdistribution state, but predist marker file $marker is present])
-            fi
-            ;;
-        *)
-            AC_MSG_ERROR([impossible predist status $_star_predist_status])
-            ;;
-    esac
-done
-])# STAR_PREDIST_SOURCES
-
-
-# STAR_CNF_COMPATIBLE_SYMBOLS
-# ---------------------------
-#
-# Work out what is required to have the Fortran compiler produce
-# library symbols which are compatible with those expected by the CNF
-# package.  If you are building a library in which C code refers to
-# Fortran libraries, then you should call this macro, which possibly
-# adjusts the AM_FCFLAGS variable.  That is, if you include cnf.h, you
-# should have this macro in the configure.ac.
-#
-# This macro deals with the following issue.  The cnf.h header
-# includes a macro F77_EXTERNAL_NAME which mangles a C name into the
-# corresponding name the Fortran compiler would generate; this
-# generally means no more than appending a single underscore.  As the
-# autoconf documentation for AC_FC_WRAPPERS points out, this is less
-# general than it could be, as some Fortrans fold symbols to
-# uppercase, and some (in particular g77) add two underscores to
-# symbols which already contain one (thus mangling 'ab' to 'ab_', but
-# 'a_b' to 'a_b__').  This behaviour would break the F77_EXTERNAL_NAME
-# macro, which is used throughout the Starlink code in both cases,
-# unless we compiled all the Starlink Fortran libraries in a mode which
-# suppressed this second underscore.  Working out how to do that --
-# if it's necessary at all -- is what this macro does.
-#
-# The more restricted interface of F77_EXTERNAL_NAME is, by the way,
-# the reason why we cannot simply copy the FC_FUNC definition to the
-# cnf.h file as F77_EXTERNAL_NAME: the latter macro is used for
-# symbols both with and without an underscore.
-#
-# If we ever have to migrate the Starlink software to a Fortran which
-# does more complicated name mangling, we'll almost certainly have to
-# perform more serious surgery on cnf.h, using the results of
-# AC_FC_WRAPPERS, along with similar surgery on the code which invokes
-# it.
-#
-# This macro is designed to work with CNF, however it does _not_
-# require the cnf.h headers to be installed, because it should remain
-# callable at configuration time before _anything_ has been installed.
-# In the test code below, we therefore emulate the definition of
-# F77_EXTERNAL_NAME in cnf.h, which appends a single underscore.
-# to the end of C symbols.
-#
-AC_DEFUN([STAR_CNF_COMPATIBLE_SYMBOLS],
-   [$_star_docs_only &&
-        AC_MSG_ERROR([STAR[]_CNF_COMPATIBLE_SYMBOLS in docs-only dir])
-    AC_CACHE_CHECK([how to make Fortran and C play nicely],
-       [star_cv_cnf_compatible_symbols],
-       [AC_REQUIRE([AC_PROG_FC])dnl
-        AC_REQUIRE([AC_PROG_CC])dnl
-        AC_LANG_PUSH([C])
-        AC_LANG_CONFTEST([AC_LANG_SOURCE([
-void funcone_() { return; }
-void func_two_() { return; }
-])])
-        if (eval $ac_compile) 2>&5
-        then
-            mv conftest.$ac_objext c-conftest.$ac_objext
-        else
-            AC_MSG_ERROR([cannot compile a C program!])
-        fi
-        AC_LANG_POP(C)
-        AC_LANG_PUSH([Fortran])
-        AC_LANG_CONFTEST([AC_LANG_SOURCE([
-      PROGRAM conftest
-      CALL funcone
-      CALL func_two
-      END
-])])
-        star_cv_cnf_compatible_symbols=cantlink
-        # The only Fortran we (need to) handle at present is
-        # g77, which has a -fno-second-underscore option for
-        # simplifying the mangling here.  Other Fortrans we've
-        # used do only the single-underscore mangling.
-        for opt in "" "-fno-second-underscore"
-        do
-            if $FC $FCFLAGS $opt -o conftest conftest.f c-conftest.$ac_objext 2>&5
-            then
-                star_cv_cnf_compatible_symbols=$opt
-                break
-            fi
-        done
-        AC_LANG_POP([Fortran])
-        rm -f conftest* c-conftest*
-])
-    if test "$star_cv_cnf_compatible_symbols" = cantlink
-    then
-        AC_MSG_ERROR([cannot work out how])
-    else
-        STAR_FCFLAGS="$STAR_FCFLAGS $star_cv_cnf_compatible_symbols"
-        STAR_FFLAGS="$STAR_FFLAGS $star_cv_cnf_compatible_symbols"
-    fi
-])# STAR_CNF_COMPATIBLE_SYMBOLS
-
-
-# STAR_CNF_F2C_COMPATIBLE
-# -----------------------
-#
-# Work out if the compiler is using 'f2c' compatible calling conventions.
-#
-# The `f2c' calling conventions, used by GNU Fortran compilers, require
-# functions that return type REAL to actually return the C type 'double'
-# (there is also special handling of COMPLEX returns, but that's not supported
-# by CNF). When operating in 'non-f2c' mode such functions return the expected
-# C type 'float'.
-#
-# The effect of this macro is subsitute the variable REAL_FUNCTION_TYPE
-# to either float or double as required.
-#
-# This function is not infallable and will usually return float for GNU
-# compilers, as the calling convention seems to not matter on 32-bit platforms
-# for the test in use. A stronger test would be to attempt calling a intrinsic
-# function, which is supposed to fail. Non-GNU compilers should always
-# return float. However, this test is used as it is all that is required.
-#
-AC_DEFUN([STAR_CNF_F2C_COMPATIBLE],
-   [$_star_docs_only &&
-        AC_MSG_ERROR([STAR[]_CNF_F2C_SYMBOLS in docs-only dir])
-    AC_CACHE_CHECK([if $FC is in strict f2c compatible mode],
-       [star_cv_cnf_f2c_compatible],
-       [AC_REQUIRE([AC_PROG_FC])dnl
-        if test "$ac_cv_fc_compiler_gnu" = yes; then
-           AC_REQUIRE([AC_PROG_CC])dnl
-           AC_LANG_PUSH([C])
-           AC_LANG_CONFTEST([AC_LANG_SOURCE([
-float fred_() {
-   return 1.0f;
-}
-])])
-           if (eval $ac_compile) 2>&5
-           then
-               mv conftest.$ac_objext c-conftest.$ac_objext
-           else
-               AC_MSG_ERROR([cannot compile a C function!])
-           fi
-           AC_LANG_POP(C)
-           AC_LANG_PUSH([Fortran])
-           AC_LANG_CONFTEST([AC_LANG_SOURCE([
-      PROGRAM F2CTEST
-      REAL FRED
-      REAL R
-      R = FRED()
-      IF ( R .NE. 0.0 ) THEN
-         WRITE(*,*) 'no'
-      ELSE
-         WRITE(*,*) 'yes'
-      ENDIF
-      END
-])])
-           star_cv_cnf_f2c_compatible=yes
-           $FC $FCFLAGS $opt -o conftest conftest.f c-conftest.$ac_objext 2>&5
-           if test -r conftest
-           then
-              star_cv_cnf_f2c_compatible=`eval conftest | sed 's/\ //g'` > /dev/null
-           else
-              AC_MSG_ERROR([failed to link program]) 
-           fi
-           AC_LANG_POP([Fortran])
-           rm -f conftest* c-conftest*
-      else
-         # Not a GNU compiler.
-         star_cv_cnf_f2c_compatible=no
-      fi
-])
-    if test "$star_cv_cnf_f2c_compatible" = "yes"
-    then
-        AC_SUBST(REAL_FUNCTION_TYPE, double)
-    else
-        AC_SUBST(REAL_FUNCTION_TYPE, float)
-    fi
-])# STAR_CNF_F2C_COMPATIBLE
-
-# STAR_CNF_BLANK_COMMON
-# ---------------------
-# Define the global symbol used to access the Fortran blank common block.
-# Usually under UNIX this is _BLNK__, but gfortran uses __BLNK__, so we
-# need to check for that. Gfortran is just detected by being a GNU compiler
-# and having "Fortran (GCC) 4.x[x].x[x]" as part of its --version output.
-#
-# The effect of this macro is to substitute BLANK_COMMON_SYMBOL with
-# the expected value.
-#
-AC_DEFUN([STAR_CNF_BLANK_COMMON],
-   [AC_CACHE_CHECK([symbol used for blank common in Fortran],
-       [star_cv_blank_common_symbol],
-       [AC_REQUIRE([AC_PROG_FC])
-       star_cv_blank_common_symbol=_BLNK__
-       if test "$ac_cv_fc_compiler_gnu" = yes; then
-            if "$FC" --version 2>&1 < /dev/null | grep 'GNU Fortran.*[[4-9]]\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*' > /dev/null; then
-                star_cv_blank_common_symbol=__BLNK__
-            fi
-       fi])
-    AC_SUBST([BLANK_COMMON_SYMBOL], $star_cv_blank_common_symbol )
-])# STAR_CNF_BLANK_COMMON
-
-# STAR_PRM_COMPATIBLE_SYMBOLS
-# ---------------------------
-#
-#  See if any special flags are required to support PRM and the use of the
-#  PRM_PAR constants. If a typeless BOZ descriptor is available (usually 'X)
-#  then this macro will have no effect, however, if there's no typeless BOZ
-#  support any special Fortran compiler flags that are required when using
-#  PRM_PAR will be defined as part of the STAR_FCFLAGS and STAR_FFLAGS
-#  variables.
-#
-#  In fact this macro is only currently used for the gfortran and Solaris f95
-#  compilers. Gfortran has no typeless BOZ support, so requires that the
-#  -fno-range-check flag is set so that assigments to integers can silently
-#  overflow (BOZ constants are replaced with their plain integer and floating
-#  point equivalents). The Solaris f95 compiler doesn't allow assignments to
-#  LOGICAL parameters, so we need to use the -f77 flag.
-#
-#  In general this macro should be used by all packages that include PRM_PAR,
-#  all monoliths are assumed to use this by default. 
-#
-AC_DEFUN([STAR_PRM_COMPATIBLE_SYMBOLS],
-   [$_star_docs_only &&
-        AC_MSG_ERROR([STAR[]_PRM_COMPATIBLE_SYMBOLS in docs-only dir])
-    AC_CACHE_CHECK([how to make compiler accept PRM constants],
-       [star_cv_prm_compatible_symbols],
-       [star_cv_prm_compatible_symbols="nocheck"
-        AC_MSG_NOTICE([ ])
-        AC_FC_HAVE_TYPELESS_BOZ 2>&5
-        if test $ac_cv_fc_have_typeless_boz = no; then
-           AC_FC_HAVE_OLD_TYPELESS_BOZ 2>&5
-           if test $ac_cv_fc_have_old_typeless_boz = no; then
-              #  Test if -f77 works. Note need to clear the cached variables
-              #  for these tests.
-              unset ac_cv_fc_have_typeless_boz
-              unset ac_cv_fc_have_old_typeless_boz
-              old_FCFLAGS="$FCFLAGS"
-              FCFLAGS="-f77 $FCFLAGS"
-              AC_FC_HAVE_TYPELESS_BOZ 2>&5
-              if test $ac_cv_fc_have_typeless_boz = no; then
-                 AC_FC_HAVE_OLD_TYPELESS_BOZ 2>&5
-                 if test $ac_cv_fc_have_old_typeless_boz = no; then
-                    star_cv_prm_compatible_symbols="nocheck"
-                 else
-                    star_cv_prm_compatible_symbols="-f77"
-                 fi
-              else
-                 star_cv_prm_compatible_symbols="-f77"
-              fi
-              FCFLAGS="$old_FCFLAGS"
-              if test "$star_cv_prm_compatible_symbols" = "nocheck"; then
-                 #  Test if "-fno-range-check" works.
-                 AC_REQUIRE([AC_PROG_FC])dnl
-                 AC_LANG_PUSH([Fortran])
-                 AC_LANG_CONFTEST([AC_LANG_SOURCE([
-      PROGRAM conftest
-      INTEGER*2 VAL__BADUW
-      PARAMETER ( VAL__BADUW = 65535 )
-      BYTE VAL__BADUB
-      PARAMETER ( VAL__BADUB = 255 )
-      END
-])])
-                 if $FC -c $FCFLAGS -fno-range-check -o conftest conftest.f 2>&5
-                 then
-                    star_cv_prm_compatible_symbols="-fno-range-check"
-                 fi              
-                 AC_LANG_POP([Fortran])
-                 rm -f conftest.f
-              fi
-           else
-              star_cv_prm_compatible_symbols=""
-           fi
-         else
-            star_cv_prm_compatible_symbols=""
-         fi])
-         if test "$star_cv_prm_compatible_symbols" = "nocheck"; then
-            AC_MSG_ERROR([cannot work out how])
-         else
-            STAR_FCFLAGS="$STAR_FCFLAGS $star_cv_prm_compatible_symbols"
-            STAR_FFLAGS="$STAR_FFLAGS $star_cv_prm_compatible_symbols"
-         fi
-])# STAR_PRM_COMPATIBLE_SYMBOLS
-
-# STAR_CNF_TRAIL_TYPE
-# -------------------
-#
-# Work out what type to use for the trailing lengths of character strings
-# passed from Fortran to C. See the "TRAIL" descriptions in SUN/209.
-#
-# For most compilers the maximum length of a string is limited to a 32bit
-# unsigned int, but for others, this can be a 64bit unsigned long. Currently
-# the only compilers with 64bit strings are 64bit Intel fortran and
-# Solaris studio12 with -m64.
-#
-# The test is only performed for 64bit compilers, all others are assumed
-# to use 32bit lengths. Various attempts to trap this issue permanently 
-# using a test program have failed (especially for the Intel compiler), so the
-# actual test is to check for a known 64 bit compiler first and then try a
-# program that has had some success. Note no GNU compilers seem to have this
-# problem so they are never tested.
-#
-# The side-effect of this macro is to substitute TRAIL_TYPE with
-# the derived value and define TRAIL_TYPE. See "f77.h" in CNF.
-#
-AC_DEFUN([STAR_CNF_TRAIL_TYPE],
-   [AC_CHECK_SIZEOF(void*)dnl
-    AC_FC_HAVE_PERCENTLOC dnl
-    AC_CACHE_CHECK([type used for Fortran string lengths],
-       [star_cv_cnf_trail_type],
-       [if test "$ac_cv_sizeof_voidp" = 8 -a "$ac_cv_fc_compiler_gnu" = no; then
-           if "$FC" -V 2>&1 < /dev/null | grep 'Intel.*64' > /dev/null; then
-              star_cv_cnf_trail_type=long
-           elif "$FC" -V 2>&1 < /dev/null | grep 'Sun.*Fortran' > /dev/null; then
-              star_cv_cnf_trail_type=long
-           else
-              AC_REQUIRE([AC_PROG_FC])dnl
-              AC_LANG_PUSH([Fortran])
-              if test "$ac_cv_fc_have_percentloc" = yes; then
-                 FORTRAN_GETLOC='%loc'
-              else 
-                 FORTRAN_GETLOC='loc'
-              fi
-              AC_LANG_CONFTEST([AC_LANG_SOURCE([
-      program conftest
-
-C  checks passing 4 byte character string lengths on 64bit compiler.
-
-      integer*8 ip1, ip2
-      integer*4 l1, l2
-      integer dummy1, dummy2
-      real dummy3, dummy4
-      double precision dummy5, dummy6
-
-      character str1*(1024)
-      character str2*(2048)
-
-      ip1 = $FORTRAN_GETLOC (str1)
-      ip2 = $FORTRAN_GETLOC (str2)
-
-      l1 = 1024
-      l2 = 2048
-
-      call report( dummy1, dummy2, %val(ip1), dummy3, dummy4,
-     :             %val(ip2), dummy5, dummy6, 
-     :             %val(l1), %val(l2) )
-
-      end
-
-      subroutine report( dummy1, dummy2, str1, dummy3, dummy4,
-     :                   str2, dummy5, dummy6 )
-      integer dummy1, dummy2
-      real dummy3, dummy4
-      double precision dummy5, dummy6
-
-      character*(*) str1
-      character*(*) str2
-
-      if ( [len(str1)] .eq. 1024 .and. [len(str2)] .eq. 2048 ) then
-         print *, 'int'
-      else
-         print *, 'long'
-      endif
-      end
-])])
-              star_cv_cnf_trail_type=int
-              $FC $FCFLAGS $opt -o conftest conftest.f 2>&5
-              if test -r conftest
-              then
-                 star_cv_cnf_trail_type=`eval conftest | sed 's/\ //g'` > /dev/null
-              else
-                 AC_MSG_ERROR([failed to link program]) 
-              fi
-              rm -f conftest*
-              AC_LANG_POP([Fortran])
-           fi
-        else
-dnl  sizeof(void *) != 8 or GNU so no problems.
-           star_cv_cnf_trail_type=int
-        fi
-])
-    AC_SUBST([TRAIL_TYPE], $star_cv_cnf_trail_type )
-    AC_DEFINE_UNQUOTED([TRAIL_TYPE], $star_cv_cnf_trail_type, 
-                       [Type of Fortran CNF TRAIL argument] )
-])# STAR_CNF_TRAIL_TYPE
-
-# STAR_PATH_TCLTK([minversion=0], [options=''])
-# ---------------------------------------------
-#
-# Finds a tclsh and wish, and the associated libraries.  Sets output variable
-# TCL_CFLAGS to the C compiler flags necessary to compile with Tcl, TCL_LIBS
-# to the required library flags, and TCLSH to the full path of the tclsh
-# executable, TCL_PREFIX to the installation root and TCL_LD_SEARCH_FLAGS
-# to the default search path for loading the shareable library; if Tk is  
-# requested, it similarly sets TK_CFLAGS, TK_LIBS and WISH.  Define the 
-# cpp variable TCL_MISSING to 1 if Tcl is not available.  Similar to 
-# macro AC_PATH_XTRA.
-#
-# If argument MINVERSION is present, it specifies the minimum Tcl/Tk
-# version number required.
-#
-# The macro searches first in the path, and
-# then in a selection of platform-specific standard locations.  The
-# configure option --with-tcl allows you to provide a path to a tclsh
-# binary, which is put at the head of the list of locations to search.
-# Option --without-tcl suppresses the search, and results in no
-# variables being substituted.
-#
-# If the argument OPTIONS is present, it is a space-separated list of
-# the words 'tk' or 'itcl'.  If one or both of these is present, then
-# the macro will find a Tcl location which also has Tk or itcl
-# installed (note that the itcl test doesn't do anything at present).
-AC_DEFUN([STAR_PATH_TCLTK],
-    [_star_use_tcl=:
-     AC_ARG_WITH([tcl],
-                 AS_HELP_STRING([--with-tcl],
-                                [give path to tclsh (dir which contains binary)]),
-                 [if test "X$withval" = Xno; then
-                      _star_use_tcl=false
-                  elif test "X$withval" = Xyes; then
-                      _star_use_tcl=:
-                  else
-                      _star_use_tcl=:
-                      _star_try_tcldir=$withval
-                  fi])
-     if $_star_use_tcl; then
-         _star_searchfor=Tcl
-         if expr "x m4_ifval([$2], [$2], []) " : 'x.* tk ' >/dev/null; then
-             search_tk=:
-             _star_searchfor="$_star_searchfor/Tk"
-         else
-             search_tk=false
-         fi
-         if expr "x m4_ifval([$2], [$2], []) " : 'x.* itcl ' >/dev/null; then
-             search_itcl=:
-             _star_searchfor="$_star_searchfor/itcl"
-             echo "Searching for itcl does nothing so far!"
-         else
-             search_itcl=false
-         fi
-         AC_MSG_CHECKING([where to find $_star_searchfor m4_ifval([$1], [$1+], [(any version)])])
-         AC_CACHE_VAL([star_cv_settcldir],
-             [star_cv_settcldir=unknown
-              reqversint=`echo m4_ifval([$1], [$1], 0.0)-0-0 | [sed 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/10000 \1* 100 \2*+ \3+p/']|dc`
-              tclsources=`echo $PATH | sed "s/$PATH_SEPARATOR/ /g"`
-              stdsources='
-dnl  Search in /usr and /usr/local at least
-/usr/bin
-/usr/local/bin
-dnl  /opt/local and /sw are the default installation locations for OpenDarwin
-dnl  and Fink on OSX
-/opt/local/bin
-/sw/bin'
-              for d in $_star_try_tcldir $STARCONF_DEFAULT_STARLINK/bin $tclsources $stdsources
-              do
-                  locok=:
-                  if test -d $d; then
-                      tcldir=`cd $d/..; pwd`
-                      test -f $d/tclsh -a -f $tcldir/include/tcl.h || locok=false
-                  else
-                      locok=false
-                  fi
-                  if $locok && $search_tk; then
-                      test -f $d/wish -a -f $tcldir/include/tk.h || locok=false
-                  fi
-                  if $locok && $search_itcl; then
-                      test -f $tcldir/lib/libitcl.aXXX || locok=false
-                  fi
-                  if $locok; then
-                       if test ! -f $tcldir/lib/tclConfig.sh; then
-                           echo "$tcldir/lib/tclConfig.sh unexpectedly missing"
-                           break
-                       fi
-                       if $search_tk && test ! -f $tcldir/lib/tkConfig.sh; then
-                           echo "$tcldir/lib/tkConfig.sh unexpectedly missing"
-                           break
-                       fi
-                       rm -f conftest.results
-                       # Run in a subshell, to isolate settings in tclConfig.sh
-                       # Send output to conftest.results, and return
-                       # 0 if all is ok
-                       (
-    . $tcldir/lib/tclConfig.sh
-    if $search_tk; then
-        . $tcldir/lib/tkConfig.sh
-    fi
-    tclversint=`[echo $TCL_VERSION$TCL_PATCH_LEVEL-0-0 | sed 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/10000 \1* 100 \2*+ \3+p/'|dc]`
-    if test $tclversint -gt $reqversint; then
-        # New enough version.
-
-        # Dereference the tclsh and wish links -- the "->" _is_ standard,
-        # mandated by POSIX.
-        lslink=`ls -l $tcldir/bin/tclsh`
-        tclsh_loc=`expr "x$lslink" : "x.*-> *\(.*\)"`
-        if test -n "$tclsh_loc" -a -x "$tclsh_loc"; then
-           : OK
-        elif test -x "$tcldir/bin/tclsh"; then
-            # Odd: either .../bin/tclsh isn't a link, or it doesn't point to an
-            # executable.  But .../bin/tclsh is OK, so use that.
-            tclsh_loc="$tcldir/bin/tclsh"
-        else
-            # This really shouldn't happen, since we checked above that
-            # $d/tclsh was executable.  Still, it clearly has happened,
-            # so don't go mad.
-            echo "Warning: found Tcl libraries, but not tclsh!" >&2
-            tclsh_loc=
-        fi
-
-        res="_star_tcldir=$tcldir;"
-
-        # Make the TCL version number available.
-        res="$res TCL_VERSION=\"$TCL_VERSION\";"
-
-        # Export the TCL_PREFIX value.
-        res="$res TCL_PREFIX=\"$TCL_PREFIX\";"
-
-        # Export the TCL_LD_SEARCH_FLAGS value (need LIB_RUNTIME_DIR
-        # which is part of the symbol).
-        res="$res LIB_RUNTIME_DIR=\"$TCL_PREFIX/lib\";"
-        res="$res TCL_LD_SEARCH_FLAGS=\"$TCL_LD_SEARCH_FLAGS\";"
-
-        # These envs include $TCL_DBGX -- expand this out.
-        eval "I=\"$TCL_INCLUDE_SPEC\"; L=\"$TCL_LIB_SPEC\""
-        res="$res TCL_CFLAGS=\"$I\"; TCL_LIBS=\"$L\"; TCLSH=\"$tclsh_loc\";"
-
-        if $search_tk; then
-            # Same for wish
-            lslink=`ls -l $tcldir/bin/wish`
-            wish_loc=`expr "x$lslink" : "x.*-> *\(.*\)"`
-            if test -n "$wish_loc" -a -x "$wish_loc"; then
-                : OK
-            elif test -x "$tcldir/bin/wish"; then
-                wish_loc="$tcldir/bin/wish"
-            else
-                echo "Warning: found Tk libraries, but not wish!" >&2
-                wish_loc=
-            fi
-            # These envs potentially include $TK_DBGX -- expand this out.
-            eval "I=\"$TK_XINCLUDES\"; L=\"$TK_LIB_SPEC\""
-            res="$res TK_CFLAGS=\"$I\"; TK_LIBS=\"$L\"; WISH=\"$wish_loc\";"
-        fi
-
-        # similarly for $search_itcl
-
-        echo $res >conftest.results
-        status=0
-    else
-        msg="$tcldir: found Tcl-$TCL_VERSION$TCL_PATCH_LEVEL"
-        if $search_tk; then
-            msg="$msg, Tk-$TK_VERSION$TK_PATCH_LEVEL"
-        fi
-        echo "$msg: older than required" >&2
-        status=1
-    fi
-    exit $status
-                       )
-                       teststat=$?
-                       if test $teststat = 0; then
-                           star_cv_settcldir=`cat conftest.results`
-                       fi
-                       if test "$star_cv_settcldir" != unknown; then
-                           break
-                       fi
-                  fi # $locok
-              done])
-
-        if test "$star_cv_settcldir" = unknown; then
-            AC_MSG_RESULT(unknown)
-        else
-            eval $star_cv_settcldir
-            AC_MSG_RESULT($_star_tcldir)
-        fi
-    else # $_star_use_tcl
-        AC_MSG_WARN(Compiling without Tcl/Tk)
-    fi # $_star_use_tcl
-
-    if $_star_use_tcl && test "$star_cv_settcldir" != unknown; then
-        :
-    else
-        AC_DEFINE(TCL_MISSING, 1,
-                  [Define to 1 if no Tcl/Tk libraries can be found])
-    fi
-
-    AC_SUBST(TCL_VERSION)
-
-    AC_SUBST(TCL_PREFIX)
-
-    AC_SUBST(TCL_LD_SEARCH_FLAGS)
-    AC_SUBST(TCL_CFLAGS)
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(TCLSH)
-
-    AC_SUBST(TK_CFLAGS)
-    AC_SUBST(TK_LIBS)
-    AC_SUBST(WISH)
-
-    # add itcl variables here
-
-])# STAR_PATH_TCLTK
-
-
-# STAR_LATEX_DOCUMENTATION(documentcode, [targets])
-# -------------------------------------------------
-# Generate the standard makefile targets to handle LaTeX documentation
-# source.  The parameter documentcode should be something like
-# `sun123' -- it should not include any .tex extension.
-#
-# The second, optional, argument gives an explicit list of the targets
-# which are build.  If this is _not_ specified, then a standard list
-# is used (.tex, .ps and .tar_htx) and corresponding rules added to
-# the generated makefile.  If it is specified, it must be non-null,
-# and its value is a list of files which are to be added to the
-# distribution, and no extra Makefile rules are added.  Thus if users need
-# anything complicated done, they should use this second argument and
-# provide rules for satisfying the given targets.
-#
-# In the latter case, the .tex -> htx_tar rule is still emitted, so
-# you can use it, but it requires the substitution variable
-# @STAR[]2HTML@, and so if you _do_ use it, you will have to make that
-# available, either through [STAR_CHECK_PROGS(star2html)] or otherwise.
-AC_DEFUN([STAR_LATEX_DOCUMENTATION],
-   [m4_ifval([$1], [], [AC_FATAL([$0: called with no documentcode])])dnl
-    m4_if(m4_bregexp([$1], [^ *\([a-z][a-z]*[0-9]*/? *\)*$]),
-          [0],
-          [],
-          [AC_FATAL([$0: bad doccode in $1 -- must be eg sun123 or sun123/])])
-    STAR_DOCUMENTATION="$STAR_DOCUMENTATION m4_bpatsubst([$1],[/])"
-    m4_ifval([$2],
-       [dnl non-empty second argument -- just add to variable
-        m4_if(m4_bregexp([$1], [/]), -1,
-              [],
-              [AC_FATAL([$0: do not mix non-null second argument and .../ syntax])])
-        if $_star_build_docs; then
-            STAR@&t at _LATEX_DOCUMENTATION="$2"
-        fi
-        ],
-       [dnl second arg empty -- use defaults
-        if $_star_build_docs; then
-            AC_FOREACH([DocCode], [$1],
-               [m4_if(m4_bregexp(DocCode,[/]), -1,
-                      [STAR@&t at _LATEX_DOCUMENTATION="$STAR@&t at _LATEX_DOCUMENTATION DocCode.tex DocCode.ps DocCode.htx_tar"
-],
-                      [m4_define([_T], m4_bpatsubst(DocCode,[/]))dnl
-                       STAR_LATEX_DOCUMENTATION_[]_STAR_UPCASE(_T)="_T.tex _T.ps _T.htx_tar"
-                       AC_SUBST(STAR_LATEX_DOCUMENTATION_[]_STAR_UPCASE(_T))])])
-        fi
-        STAR_DECLARE_DEPENDENCIES([sourceset], [star2html])
-        STAR_CHECK_PROGS([star2html])
-       ])
-    if $_star_build_docs; then
-        : ${LATEX2DVI='$$LATEX "\\batchmode\\input $$[]1" && $$LATEX "\\batchmode\\input $$[]1"'}
-        AC_SUBST(LATEX2DVI)
-    else
-        AC_MSG_WARN([not installing docs $1])
-    fi
-    AC_SUBST([STAR@&t at _LATEX_DOCUMENTATION])dnl
-])# STAR_LATEX_DOCUMENTATION
-
-# STAR_XML_DOCUMENTATION(documentcode, [targets])
-# -----------------------------------------------
-# Generate the standard makefile targets to handle XML documentation
-# source.  The parameter documentcode should be something like
-# `sun123' -- it should not include any .xml extension.  For each of the
-# documentcodes which does not end with a slash, append
-# <documentcode>.{texml_tar,htx_tar,ps} to STAR_XML_DOCUMENTATION;
-# for each which does end with a slash, define instead the
-# variable STAR_XML_DOCUMENTATION_<documentcode>.  In either case,
-# append the documentcode to STAR_DOCUMENTATION
-#
-# The second, optional, argument gives an explicit list of the targets
-# which are build.  If this is _not_ specified, then a standard list
-# is used (.texml_tar, .ps and .htx_tar) and corresponding rules added to
-# the generated makefile.  If it is specified, it must be non-null,
-# and its value is a list of files which are to be added to the
-# distribution, and no extra Makefile rules are added.  Thus if users need
-# anything complicated done, they should use this second argument and
-# provide rules for satisfying the given targets.
-#
-# In the latter case, the .tex -> htx_tar rule is still emitted, so
-# you can use it, but it requires the substitution variables JADE, SGMLNORM,
-# and SGMLKIT_HOME.  This is rather inconvenient, and it is fortunate that
-# you almost certainly won't need to use this.
-AC_DEFUN([STAR_XML_DOCUMENTATION],
-   [m4_ifval([$1], [], [AC_FATAL([$0: called with no documentcode])])dnl
-    m4_if(m4_bregexp([$1], [^ *\([a-z][a-z]*[0-9]*/? *\)*$]),
-          [0],
-          [],
-          [AC_FATAL([$0: bad doccode in $1 -- must be eg sun123 or sun123/])])
-    STAR_DOCUMENTATION="$STAR_DOCUMENTATION m4_bpatsubst([$1],[/])"
-    m4_ifval([$2],
-       [dnl non-empty second argument -- just add to variable
-        m4_if(m4_bregexp([$1], [/]), -1,
-              [],
-              [AC_FATAL([$0: do not mix non-null second argument and .../ syntax])])
-        if $_star_build_docs; then
-            STAR@&t at _XML_DOCUMENTATION="$2"
-        fi
-        ],
-       [dnl second arg empty -- use defaults
-        if $_star_build_docs; then
-            do_the_build=  # blank if we're to go ahead, string expl. otherwise
-            AC_PATH_PROGS(JADE, [openjade jade], NOJADE)
-            AC_PATH_PROGS(SGMLNORM, [osgmlnorm sgmlnorm], NOSGMLNORM)
-            STAR_CHECK_PROGS([sgml2docs])
-            if test "$JADE" = NOJADE -o "$SGMLNORM" = NOSGMLNORM -o "$SGML2DOCS" = "sgml2docs"; then
-                if $_star_docs_only; then
-                    # Building documentation is all we're supposed to do,
-                    # and we can't, so suppress further building.
-                    do_the_build=\
-"This docs-only component requires Jade, sgmlnorm and sgml2docs.  
-        All I could find were:
-        $JADE for Jade, 
-        $SGMLNORM for sgmlnorm and 
-        $SGML2DOCS for sgml2docs (requires full path).
-        Your system may have a way to install Jade and sgmlnorm as a package,
-        sgml2docs is part of the SGMLKIT package."
-                else
-                    AC_MSG_WARN([can't find (open)jade + (o)sgmlnorm + sgml2docs -- skipping XML documentation $1])
-                fi
-            else
-                # Test Jade version
-                AC_MSG_CHECKING([version of $JADE (need 1.3.2 or better)])
-                $JADE -v </dev/null >conftest.version 2>&1
-                JADEVERS=[`sed -n '/:I:.*[Jj]ade.*version/{
-    s/.*:I://
-    s/[^0-9][^0-9]*/ /gp
-}' conftest.version`]
-                # The following converts space-separated integers to a single
-                # one.  It's perhaps a leeettle funkier than necessary...
-                VERSINT=[`echo "[Ss[z0<a]x]sa $JADEVERS 0 0 0 lax Ls100* Ls+100* Ls+p" | dc`]
-                if test $VERSINT -ge 10302; then
-                  AC_MSG_RESULT([ok])
-                  AC_FOREACH([DocCode], [$1],
-                   [m4_if(m4_bregexp(DocCode,[/]), -1,
-                          [STAR@&t at _XML_DOCUMENTATION="$STAR@&t at _XML_DOCUMENTATION DocCode.texml_tar DocCode.htx_tar DocCode.ps DocCode.pdf"
-],
-                          [m4_define([_T], m4_bpatsubst(DocCode,[/]))dnl
-                           STAR_XML_DOCUMENTATION_[]_STAR_UPCASE(_T)="_T.texml_tar _T.htx_tar _T.ps _T.pdf"
-                           AC_SUBST(STAR_XML_DOCUMENTATION_[]_STAR_UPCASE(_T))])])
-                else
-                    AC_MSG_RESULT([too old])
-                    do_the_build="Your openjade is version $JADEVERS; need 1.3.2 or better"
-                fi
-                SGMLKIT_HOME=$prefix/lib/sgmlkit
-                AC_SUBST(SGMLKIT_HOME)
-            fi
-            STAR_SUPPRESS_BUILD_IF(test -n "$do_the_build", [$do_the_build])
-        fi
-        STAR_DECLARE_DEPENDENCIES([sourceset], [sgmlkit])
-       ])
-    if $_star_build_docs; then
-        : ${LATEX2DVI='$$LATEX "\\batchmode\\input $$[]1" && $$LATEX "\\batchmode\\input $$[]1"'}
-        AC_SUBST(LATEX2DVI)
-    else
-        AC_MSG_WARN([not installing docs $1])
-    fi
-    AC_SUBST([STAR@&t at _XML_DOCUMENTATION])dnl
-])# STAR_XML_DOCUMENTATION
-            
-
-
-# STAR_CHECK_PROGS(progs-to-check-for, [component=''])
-# --------------------------------------------------
-#
-# For each of the programs in PROGS-TO-CHECK-FOR, define a variable
-# whose name is the upcased version of the program name, and whose
-# value is the full path to that program, or the expected installation
-# location of that program if no absolute path can be found.  Because
-# of this default behaviour, this macro should _only_ be used for
-# locating Starlink programs such as messgen or alink, and not as a
-# general replacement for AC_CHECK_PROG.  Any characters in the
-# program outside of the set of alphanumerics and underscores are
-# normalised to underscores.
-#
-# The optional second argument gives the name of the component containing
-# the program in question.  Some packages install their binaries in
-# package-specific directories, and this argument allows this macro to
-# look there as well.
-#
-# For example:
-#     STAR_CHECK_PROGS(messgen)
-# would define the variable MESSGEN to have the full path to the
-# messgen application, and 
-#     STAR_CHECK_PROGS(prolat, sst)
-# would define the variable PROLAT to have the path to the prolat
-# application within the sst component.
-#
-# Calls AC_SUBST and AC_ARG_VAR on the generated variable name.  This
-# macro does _not_ automatically declare a configure dependency on any
-# component specified in the second argument.  These dependencies should
-# be kept to an absolute minimum, and therefore any such dependencies
-# must be declared obviously and explicitly, with rationale.
-#
-# The behaviour described below, for the result when the required program
-# is not found, is not final, and may change.  The documentation below is
-# contradictory, and should be regarded merely as a rather confused
-# discussion of the issues.  The current behaviour is that when the progam
-# is not found, the variable is defined to be the program's name without
-# any path at all.
-#
-# This is the analogue of AC_CHECK_PROG, except that: (1) the variable
-# name defaults to the program name, (2) the variable value if the
-# program is not found is the path to the anticipated installation
-# location of the program, so that the macro does not fail in this
-# case.  This is useful for locating Starlink programs, as it means we
-# can use this macro to produce absolute paths to programs, even
-# before they have been installed (in this case we are presumably
-# doing a top-level configure of the Starlink tree, and the Makefile
-# will ensure that the required files are installed before the current
-# package actually uses it.  NB: (2) is not true at present.
-#
-# The current value of the PATH variable is augmented by the location
-# of the binary installation directory, using the current default
-# value of the prefix (not ideal, since this may in principle change
-# when the component being configured is installed, but it's the best
-# we can do at configure time); and by the $STARLINK/bin directory.
-#
-# The default, if the program isn't in the augmented path, is the path
-# to the starconf-finder program if that's available, and the bare
-# program-name otherwise.  Is this the best default?  Would just 
-# program-name be better?  The program may not be in the augmented
-# path for two reasons: (1) we are doing the global configuration done
-# during bootstrapping, and noting has been installed yet; or (2) the
-# program is one of those installed in a subdirectory of the
-# `bindir'.  In case (2), there's not a lot we can do, short of
-# grubbing round manifest files at some point, but the
-# starconf-finder, which is the eventual default, knows about this
-# case, and could take care of it.
-#
-# No, I've changed my mind again.  If the program isn't found, then
-# simply have the AC_PATH_PROG default to bare ProgramName.  This is
-# probably adequate, and if so probably more robust than relying on
-# more and more layers of indirection.  We probably will need to
-# revisit this.  Again.
-AC_DEFUN([STAR_CHECK_PROGS],
-         [eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-          AC_FOREACH([ProgramName], [$1],
-                     [m4_define([star_prog],
-                                _STAR_UPCASE(m4_bpatsubst(ProgramName,
-                                                          [[^0-9a-zA-Z_]], 
-                                                          [_])))
-                      AC_PATH_PROG(star_prog,
-                                   ProgramName,
-                                   ProgramName,
-[$STARLINK/Perl/bin:]dnl
-[$STARLINK/starjava/bin:]dnl
-[$STARLINK/bin:]m4_ifval([$2],[$STARLINK/bin/$2:],)dnl
-[$default_bindir:]m4_ifval([$2],[$default_bindir/$2:],)dnl
-[$PATH])
-                      AC_ARG_VAR(star_prog,
-                                 [Location of the ]ProgramName[ application])])
-])# STAR_CHECK_PROGS
-
-
-# STAR_SPECIAL_INSTALL_COMMAND(cmd)
-# ---------------------------------
-# Declare a special install command.  Note that we do not examine the
-# actual command here -- that is done by automake.  All we do is find
-# a way of copying a directory tree, preserving symlinks, as used by
-# the install targets in automake/lib/am/install.am.  Try 'cp -R' and
-# variants, then pax, and if both fail, collapse.
-dnl Link test is `test -h': more portable than -L, according to autoconf notes.
-dnl `cp --no-dereference' is GNU cp: -P gives a compatibility warning.
-dnl Include broken link in test: some cp fail to copy these (OSX 10.2, Sol9).
-dnl Option -f is probably a good plan, but no failures spotted so far.
-dnl In pax, `-p e' fails with broken links; `-p p' is OK.
-AC_DEFUN([STAR_SPECIAL_INSTALL_COMMAND],
-   [AC_REQUIRE([AC_PROG_LN_S])dnl
-    AC_PATH_PROG(CP, cp)dnl
-    AC_PATH_PROG(PAX, pax)
-    AC_CACHE_CHECK([how to do a recursive directory copy],
-                   [star_cv_cp_r],
-                   [rm -Rf conftest*
-                    mkdir conftest-d1 conftest-d2
-                    mkdir conftest-d1/d
-                    date >conftest-d1/d/f
-                    (cd conftest-d1/d; $LN_S f l; $LN_S x broken)
-                    if test ! -h conftest-d1/d/l; then
-                        # We don't have links!  So plain cp -R will do
-                        star_cv_cp_r="$CP -R"
-                    else
-                        star_cv_cp_r=
-                        for try in "$CP -R --no-dereference -p -f" "$CP -R -P -p -f" "$CP -R -P -p" "$CP -R -p" "${PAX-false} -r -w -p p"
-                        do
-                            rm -Rf conftest-d2/*
-                            if (cd conftest-d1; $try . ../conftest-d2 2>/dev/null); then
-                                if test -h conftest-d2/d/l -a -h conftest-d2/d/broken; then
-                                    star_cv_cp_r="$try"
-                                    break
-                                fi
-                            fi
-                        done
-                    fi
-                    rm -Rf conftest*])
-    if test -z "$star_cv_cp_r"; then
-        AC_MSG_ERROR([unable to find working cp or pax])
-    fi
-    AC_SUBST(CP_RECURSIVE, $star_cv_cp_r)dnl
-])# STAR_SPECIAL_INSTALL_COMMAND
-    
-
-# STAR_MONOLITHS
-# --------------
-# Declare that we will be creating monoliths.  This does whatever
-# configuration is necessary to handle these.
-#
-# Note that the declarations done in the Makefile.am, declaring the
-# name of the monolith and the names and source files of the tasks,
-# are slightly redundant inasmuch as some of that information could be
-# implied.  However, this is required to be explicit for clarity and
-# consistency, and so accomodate the (currently unexploited)
-# possibility that the tasks and .ifl files longer have the
-# one-task-per-file relationship they have now.
-AC_DEFUN([STAR_MONOLITHS],
-         [$_star_docs_only &&
-             AC_MSG_ERROR([STAR[]_MONOLITHS in docs-only directory])
-          dnl Installation in monoliths.am uses $(LN_S)
-          AC_REQUIRE([AC_PROG_LN_S])dnl
-
-          # To build monoliths, we need both compifl to build the .ifc
-          # files (in the parsecon component), and alink
-          # to link the monoliths (in dtask).  Both are now part of
-          # the pcs component.
-          STAR_DECLARE_DEPENDENCIES(build, [pcs])
-
-          # So try to find alink and compifl.
-          STAR_CHECK_PROGS([compifl alink])
-
-          # When we're building monoliths, we will almost certainly be
-          # using Fortran, and so we might as well include this,
-          # partly in case the user forgets, but also because this is
-          # reasonably part of the default setup required for monoliths.
-          STAR_CNF_COMPATIBLE_SYMBOLS
-          STAR_PRM_COMPATIBLE_SYMBOLS
-])# STAR_MONOLITHS
-
-
-# STAR_HELP_FILES(helpfiles)
-# --------------------------
-# Declare a list of files to be installed into the Starlink help
-# directory.  This can be used both internally and in user
-# configure.ac files.
-AC_DEFUN([STAR_HELP_FILES],
-	 [_STAR_EXTRADIR_COMMON([help], [$1])])
-
-
-# STAR_ETC_FILES(etcfiles)
-# ------------------------
-# Declare a list of files to be installed into the Starlink etc
-# directory.  This can be used both internally and in user
-# configure.ac files.
-AC_DEFUN([STAR_ETC_FILES],
-         [_STAR_EXTRADIR_COMMON([etc], [$1])])
-
-
-# STAR_DOCS_FILES(docfiles)
-# -------------------------
-# Declare a list of files to be installed into the Starlink
-# documentation directory.  This can be used both internally and in
-# user configure.ac files.
-AC_DEFUN([STAR_DOCS_FILES],
-         [_STAR_EXTRADIR_COMMON([docs], [$1])])
-
-
-# STAR_EXAMPLES_FILES(examplesfiles)
-# ----------------------------------
-# Declare a list of files to be installed into the Starlink
-# examples directory.  This can be used both internally and in
-# user configure.ac files.
-AC_DEFUN([STAR_EXAMPLES_FILES],
-         [_STAR_EXTRADIR_COMMON([examples], [$1])])
-
-
-# STAR_DECLARE_DEPENDENCIES(type, deplist, option='')
-# ---------------------------------------------------
-#
-# Declare dependencies of this component.  The TYPE is one of
-# `sourceset', `build', `link', `use', `test' or `configure', and the
-# DEPLIST is a space separated list of component names, which this
-# component depends on in the given way.
-#
-# -- Sourceset dependencies are those components which must be
-# installed in order to build the complete set of sources, either for
-# building or for distribution.  This includes documentation, so it
-# would include star2html as well as messgen.
-#
-# -- Build dependencies are those which are required in order to build
-# this component.  This typically means include files, but if part of
-# the component is an executable file (such as compifl within the
-# parsecon component), then that's a build dependence also (but see
-# the discussion of `option', below).  You may not have two components
-# which have a build dependency on each other, since that would mean
-# that each would have to be built before the other, which is
-# impossible.
-#
-# -- Link dependencies are those required to link against the
-# libraries in a component.  That means all the libraries that this
-# component's libraries use.  These are not necessarily build
-# dependencies, since if you are building a library, any called
-# libraries don't have to be present in order to build this library;
-# you can have two components which have mutual link dependencies.  If
-# you are building an application, however, then all its link
-# dependencies will actually be build dependencies and should be
-# declared as such.  In other words, the distinction between build and
-# link dependencies is important only for library components.
-#
-# -- Use dependencies are those which are required in order for the
-# component to be used by something else, after it has been built and
-# installed.  For example a library which called another application
-# as part of its functionality would have only a use dependency on the
-# component which contained that application.  If no use dependencies
-# are declared, we take the use dependencies to be the same as the
-# link dependencies.
-#
-# -- Test dependencies are those which are required in order to run
-# any regression tests which come with the component.  It's generally
-# a good idea to avoid making this a larger set than the use
-# dependencies, but sometimes this is unavoidable.  If no test
-# dependencies are declared, we take the test dependencies to be the
-# same as the use dependencies.
-#
-# -- Configure dependencies are those which must be satisfied before
-# this component can be successfully configured.  In this case, we
-# also check that the corresponding manifest files have been installed
-# in current_MANIFESTS, and if not exit with a message, and the suggestion
-# that the user runs 'make configure-deps'.
-#
-# The point of this is that different dependencies are required at
-# different times.  The set of dependencies in the master makefile is
-# composed of all the `sourceset' and `build' dependencies, but not
-# `link' or `use' dependencies, and since the core Starlink libraries
-# are closely interdependent, the set of `build' dependencies needs to
-# be kept as small as possible in order to avoid circularities (that
-# is, A depending on B, which depends, possibly indirectly, on A).
-#
-# All these relationships are transitive: if A has a build dependency
-# on B, and B has one on C, then A has a build dependency on C.  You
-# can augment this by using the final `option' argument: if, in
-# component A's declaration element you say
-# STAR_DECLARE_DEPENDENCIES(build, B, link), then you declare that A
-# has a build-time dependency on B, but that (presumably because you
-# are building an application within a component which is mostly
-# libraries) you need to link against B, so component A has a
-# dependency on all of B's _link_ dependencies, not just its build
-# dependencies.  This is (I believe) the only case where this `option'
-# attribute is useful, though it is legal for each of the dependency types.
-#
-# You need only declare direct dependencies.  If package A depends on
-# package B, which depends in turn on package C, then package A need
-# not declare a dependency on C.
-#
-# The macro may be called more than once.  The results of this macro
-# are expressed in the file component.xml in the component directory.
-AC_DEFUN([STAR_DECLARE_DEPENDENCIES],
- [m4_ifval([$1], [], [AC_FATAL([$0: no type given])])dnl
-  m4_if(m4_bregexp([$1], 
-                   [^\(sourceset\|build\|link\|use\|test\|configure\)$]),
-        [0],
-        [],
-        [AC_FATAL([$0: unrecognised dependency type: $1])])dnl
-  m4_ifval([$2], [], [AC_FATAL([$0: no deplist given])])dnl
-  for _star_tmp in $2
-  do
-    STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<[$1]m4_ifval([$3], [ option='$3'], [])>$_star_tmp</$1>"
-  done
-  m4_if([$1], [configure], [# check that configure-deps ran...
-  for _star_tmp in $2
-  do
-    echo "$as_me:$LINENO: checking for configure-deps/$_star_tmp" >&5
-    echo $ECHO_N "checking for configure-deps/$_star_tmp... $ECHO_C" >&6
-    if test -f $current_MANIFESTS/$_star_tmp; then
-      echo "$as_me:$LINENO: result: ok" >&5
-      echo "${ECHO_T}ok" >&6
-    else
-      echo "$as_me:$LINENO: result: not found!" >&5
-      echo "${ECHO_T}not found" >&6
-      echo "*** This package has a configure dependency on $_star_tmp" >&6
-      echo "    but that component doesn't appear to be installed." >&6
-      echo "    (I can't find $current_MANIFESTS/$_star_tmp:" >&6
-      echo "    have you forgotten to run 'make configure-deps'?)" >&6
-      echo "    Giving up!" >&6
-      exit 1
-    fi
-  done
-])dnl
-])# STAR_DECLARE_DEPENDENCIES
-
-
-# STAR_PLATFORM_SOURCES(target-file-list, platform-list)
-# ------------------------------------------------------
-#
-# Generate the given target-file for each of the files in the list
-# TARGET-FILE-LIST, by selecting the appropriate element of the
-# PLATFORM-LIST based on the value of [AC_CANONICAL_BUILD].  Both
-# lists are space-separated lists.
-#
-# For each of the platforms, <p>, in platform-list, there should be a
-# file `<target-file><p>'.  There should always be a file
-# `<target-file>default', and if none of the platform-list strings
-# matches, this is the file which is used.  If the `default' file is
-# listed in the `platform-list', then it is matched in the normal run
-# of things; if it is not listed, it still matches, but a warning is
-# issued.
-#
-# If you wish no match _not_ to be an error -- perhaps because there
-# is a platform-dependent file which is redundant on unlisted platforms
-# -- then end the platform-list with `NONE'.  In this case, if no file
-# matches, then no link is made, with no error or warning.
-#
-# This macro uses the results of ./config.guess to determine the
-# current platform.  That returns a triple consisting of
-# cpu-vendor-os, such as `i686-pc-linux-gnu' (OS=linux-gnu),
-# `sparc-sun-solaris2.9', or `alphaev6-dec-osf5.1'
-#
-# The extensions <p> in platform-list should all have the form
-# `cpu_vendor[_os]', where each of the components `cpu', `vendor' and
-# `os' may be blank.  If not blank, they are matched as a prefix of
-# the corresponding part of the config.guess value.  Thus
-# `_sun_solaris' would match `sparc-sun-solaris2.9' but not
-# `sparc-sun-sunos', and `_sun' would match both.  For a <target-file>
-# file foo.c, this would result in `ln -s foo.c_sun foo.c'
-#
-# Calls AC_LIBSOURCE for each of the implied platform-specific files.
-#
-AC_DEFUN([STAR_PLATFORM_SOURCES],
-         [
-$_star_docs_only && AC_MSG_ERROR([STAR_[]PLATFORM_SOURCES in docs-only dir])
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_ifval([$1], [], [AC_FATAL([$0: no target-file-list given])])dnl
-m4_ifval([$2], [], [AC_FATAL([$0: no platform-list given])])dnl
-AC_FOREACH([TargetFile], [$1],
-  [AC_FOREACH([Ext], [$2], 
-    [m4_if(Ext, [NONE], , [AC_LIBSOURCE(TargetFile[]Ext)])])])dnl
-AC_MSG_CHECKING([platform-specific source for file(s) $1])
-_star_tmp=
-for platform in $2
-do
-    if test $platform = NONE; then
-        # Special case -- no file required
-        _star_tmp=NONE
-        break;
-    fi
-    if test $platform = default; then
-        _star_tmp=default
-        break;
-    fi
-    if expr $build : `echo $platform | sed 's/_/.*-/g'` >/dev/null; then
-        _star_tmp=$platform
-        break;
-    fi
-done
-if test -z "$_star_tmp"; then
-    # Use default, but it wasn't listed in the platform-list
-    # (though it should have been)
-    AC_MSG_WARN([build platform $build does not match any of ($2): using `default'])
-    _star_tmp=default
-fi    
-if test $_star_tmp = NONE; then
-    AC_MSG_RESULT([none required])
-else
-    AC_MSG_RESULT([using $_star_tmp])
-    for _t in $1
-    do
-        if test -f $srcdir/$_t$_star_tmp; then
-            (cd $srcdir; rm -f $_t; cp -p $_t$_star_tmp $_t)
-        else
-            AC_MSG_WARN([platform $_star_tmp matched, but no file $_t$_star_tmp found])
-        fi
-    done
-fi
-])# STAR_PLATFORM_SOURCES
-
-
-# STAR_INITIALISE_FORTRAN
-# -----------------------
-#
-# Define a macro which can be used in a C main program to initialise the
-# Fortran RTL, including, for example, doing whatever work is required so that
-# the Fortran getarg() function works.  This defines the macro
-# STAR_INITIALISE_FORTRAN(argc,argv).  The implementation necessarily uses
-# functions which are specific to the Fortran implementation, and the body of
-# this macro is basically a switch to determine the compiler and thus the
-# appropriate compiler-specific magic.  If no implementation is available,
-# then the macro should expand to nothing.
-#
-# Note that the Starlink functions wrapping getarg() are robust against
-# getarg() failing because this information is not available.  This function
-# is nonetheless necessary because some platforms have link problems otherwise
-# (specifically OSX, on which the most readily available compiler is g77,
-# cannot link properly if the getarg() function is referenced by a library,
-# but there is a C main function, so that the Fortran main function's call of
-# f_setarg is omitted).  Thus it is generally harmless to leave this function
-# unimplemented on those platforms which do not have these link problems, and
-# it is harmless that the test below is extremely compiler specific (though we
-# would probably have to add implementations for any other compilers used on
-# OSX).  It's also generally harmless not to call the defined function, or
-# invoke this macro, if your application doesn't have the link problems which
-# makeit necessary, though of course calling it will make getarg() work where
-# it otherwise wouldn't, which may be an advantage.
-#
-# All was well until g95 and gfortran, these are "gnu" compilers, but use
-# different semantics. In the case of g95 the calling the startup code is not
-# optional (docs say that heap initialisation relies on the startup call).
-#
-# The test for g95 relies on the output from `g95 --version' containing the
-# string "G95". Gfortran requires "GNU Fortran (GCC) 4+.x[x].x[x]".  Note that
-# this whole area probably needs rethinking as g95 also has a g95_runtime_stop()
-# function, that should be called.
-#
-# Intel Fortran needs the for_rtl_init_ function, there is also a
-# for_rtl_finish_ to run during closedown. The intel compiler signature
-# is to have "IFORT" in the --version string.
-#
-# Under Solaris and the studio compilers the argc and argv values are no
-# longer automatically shared, so we test for "Sun Fortran" and have a 
-# code section that copies the given argc and argv directly to the global
-# variable __xargc and __xargv, this may need fixing from time to time.
-# Doesn't seem to be a function for doing this job.
-#
-AC_DEFUN([STAR_INITIALISE_FORTRAN],
-   [AC_CACHE_CHECK([how to initialise the Fortran RTL],
-       [star_cv_initialise_fortran],
-       [AC_REQUIRE([AC_PROG_FC])
-       if test "$ac_cv_fc_compiler_gnu" = yes; then
-            if "$FC" --version 2>&1 < /dev/null | grep 'G95' > /dev/null; then
-                star_cv_initialise_fortran=g95-start
-            elif "$FC" --version 2>&1 < /dev/null | grep 'GNU Fortran.*[[4-9]]\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*' > /dev/null; then
-                star_cv_initialise_fortran=gfortran-setarg
-            else
-                star_cv_initialise_fortran=g77-setarg
-            fi
-        else
-            if "$FC" --version 2>&1 < /dev/null | grep 'IFORT' > /dev/null; then
-                star_cv_initialise_fortran=ifort-setarg
-            elif "$FC" -V 2>&1 < /dev/null | grep 'Sun Fortran' > /dev/null; then
-                star_cv_initialise_fortran=sunstudio-setarg
-            else
-                star_cv_initialise_fortran=
-            fi
-        fi])
-    AH_TEMPLATE([STAR_INITIALISE@&t at _FORTRAN],
-       [Define to a function call which will initialise the Fortran RTL])
-    case "$star_cv_initialise_fortran" in
-      g77-setarg)
-        AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-                  [{extern void f_setarg(int,char**); f_setarg(argc, argv);}])
-        ;;
-      g95-start)
-        AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-                  [{extern void g95_runtime_start(int,char**); g95_runtime_start(argc, argv);}])
-        ;;
-      gfortran-setarg)
-        AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-                  [{extern void _gfortran_set_args(int,char**); _gfortran_set_args(argc, argv);}])
-        ;;
-      ifort-setarg)
-        AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-                  [{extern void for_rtl_init_(int*,char**); for_rtl_init_(&argc, argv);}])
-        ;;
-      sunstudio-setarg)
-        AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-                  [{extern int __xargc; extern char **__xargv;__xargc = argc;__xargv = argv;}])
-        ;;
-      *) 
-        AC_DEFINE([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],[])
-        ;;
-    esac
-dnl    AC_DEFINE_UNQUOTED([STAR_INITIALISE@&t at _FORTRAN(argc,argv)],
-dnl                       $star_cv_initialise_fortran)
-])# STAR_INITIALISE_FORTRAN
-
-
-# STAR_SUPPRESS_BUILD_IF(test, message)
-# -------------------------------------
-# Call once at the end of the configure script.
-#
-# If the given shell test evaluates to true, then suppress the build,
-# without having ./configure fail.  The test is any command which
-# returns true if the build should be suppressed, and may be shell
-# commands `true' or `false', or might be a more complicated test,
-# such as `test -n "$SOMEENV"'.
-#
-# The macro communicates with the generated Makefile.in by creating a file
-# STAR_SUPPRESS_BUILD if the test evaluates to true.  The file contains
-# the text of the explanation.
-AC_DEFUN([STAR_SUPPRESS_BUILD_IF],
-   [m4_ifval([$1], [], [AC_FATAL([$0: needs two arguments])])dnl
-    m4_ifval([$2], [], [AC_FATAL([$0: needs two arguments])])dnl
-    rm -f STAR_SUPPRESS_BUILD
-    if [$1]; then
-        AC_MSG_WARN([Build inhibited:
-        $2])
-        echo "$2" >STAR_SUPPRESS_BUILD
-        ALL_TARGET=all-am-suppress
-    else
-        ALL_TARGET=all-am-normal
-    fi
-    AC_SUBST(ALL_TARGET)
-])# STAR_SUPPRESS_BUILD_IF
-
-
-# starconf internal macros
-
-
-# _STAR_UPCASE(string)
-# --------------------
-# Expands to STRING with all letters translated to uppercase.
-AC_DEFUN([_STAR_UPCASE],
-         [m4_translit([$1], [a-z], [A-Z])])
-
-
-# _STAR_EXTRADIR_COMMON(dir-type, file-list)
-# ------------------------------------------
-#
-# Common handler for STAR_HELP_FILES, etc.  DIR-TYPE is one of
-#
-#    help, etc, docs, examples
-#
-# and `FILE-LIST' is a list of files to be installed in
-# the directory STAR_[DIR-TYPE]_DIR.  This works by defining and
-# AC_SUBSTing the variables `starX_DATA for X=dir-type (eg, `stardocs_DATA').
-#
-# This is now obsolete -- components should use star<dir-type>_DATA in
-# the Makefile.am file instead.  Don't use AC_[]DIAGNOSE([obsolete],...),
-# since those warnings aren't turned on by default.
-AC_DEFUN([_STAR_EXTRADIR_COMMON],
-   [AC_FATAL([Macro STAR_]_STAR_UPCASE($1)[_FILES($2) is obsolete -- use star$1_DATA in Makefile.am instead])
-    AC_FATAL([For STAR@&t at _LATEX_DOCUMENTATION, use stardocs_DATA=@STAR@&t at _LATEX_DOCUMENTATION@ instead])]
-)# _STAR_EXTRADIR_COMMON
-
-
-# _STAR_RESTFP_FIX
-# ----------------
-# Determines if we need to make any library fixes to get things to link 
-# properly.  In fact, there's only a problem on OSX/Darwin, since the
-# GCC installation which provides g77 and the (system) GCC which provides
-# gcc can generate slightly incompatible object code.  The following test
-# is therefore pretty specific to OSX/Darwin.
-#
-# If there are any libraries that need to be added to the path, this adds
-# them to variables <x>_FCLINK_MAGIC.  Compare AC_FC_LIBRARY_LDFLAGS.
-#
-# See the thread: http://lists.apple.com/mhonarc/fortran-dev/msg00768.html
-AC_DEFUN([_STAR_RESTFP_FIX],
-   [AC_CACHE_CHECK([whether we need any library fixups],
-       [star_cv_restfp_fixup],
-       [AC_REQUIRE([AC_CANONICAL_BUILD])
-        AC_REQUIRE([AC_PROG_CC])
-        AC_REQUIRE([AC_PROG_FC])
-        if expr $build_os : 'darwin7' >/dev/null; then
-dnl Only affects OSX/Darwin
-            # Following uses undocumented (but probably fairly stable)
-            # autoconf internal variable.
-            if test "$ac_cv_fc_compiler_gnu" = yes; then
-dnl The problem only affects g77/gcc, so we know we're dealing with these below
-                AC_LANG_PUSH(C)
-                rm -f conftest*
-                star_cv_restfp_fixup=unknown
-                AC_LANG_CONFTEST(AC_LANG_PROGRAM([], restFP()))
-                { AC_TRY_COMMAND($CC -o conftest.x -S conftest.c)
-                  test $ac_status = 0
-                } &&
-                sed 's/_restFP/restFP/g' conftest.x>conftest.s &&
-                { AC_TRY_COMMAND($CC -c -o conftest.$ac_objext conftest.s)
-                  test $ac_status = 0
-                } || star_cv_restfp_fixup=broken
-                AC_LANG_POP(C)
-                if test $star_cv_restfp_fixup = broken; then
-                    AC_MSG_WARN([unable to assemble restFP test])
-                else
-                    # Link this with the C compiler
-                    AC_TRY_COMMAND($CC -o conftest conftest.$ac_objext)
-                    _s_cstatus=$ac_status
-                    # Link this with the Fortran compiler
-                    AC_TRY_COMMAND($FC -o conftest conftest.$ac_objext)
-                    if test $_s_cstatus = 0 -a $ac_status = 0; then
-                        # both compilers can compile it
-                        star_cv_restfp_fixup=no
-                    elif test $_s_cstatus != 0 -a $ac_status != 0; then
-                        # neither compiler can compile it
-                        star_cv_restfp_fixup=no
-                    elif test $_s_cstatus = 0; then
-                        # The C compiler can, but the Fortran cannot
-                        star_cv_restfp_fixup=yes
-                    else
-                        # The C compiler can't compile, but the Fortran can.
-                        # Haven't heard of this case!  Don't know what to do.
-                        star_cv_restfp_fixup=broken
-                    fi
-                fi
-                # Link with -lcc_dynamic.
-                # See http://www.astro.gla.ac.uk/users/norman/note/2004/restFP/
-                if test $star_cv_restfp_fixup = yes; then
-                    AC_TRY_COMMAND($FC -o conftest conftest.$ac_objext -lcc_dynamic)
-                    if test $ac_status = 0; then
-                        star_cv_restfp_fixup=cc_dynamic
-                    fi
-                fi
-                if test $star_cv_restfp_fixup = yes; then
-                    # ooops
-                    AC_MSG_WARN([unable to solve restFP problem])
-                    star_cv_restfp_fixup=broken
-                fi
-                rm -f conftest*
-            elif test -z "$FC"; then
-                # not g77, and indeed no Fortran at all
-                star_cv_restfp_fixup=nofortran
-            else
-                # There is a Fortran, but it's not g77, so either there's no
-                # problem, or it's a mixed-compiler problem that's harder
-                # than we know how to deal with.  But presumably the user
-                # has worked this out.
-                star_cv_restfp_fixup=no
-            fi
-        else # !Darwin
-            star_cv_restfp_fixup=no
-        fi
-        ])
-   C_FC_FCLINK_MAGIC=
-   C_FC_PPFC_FCLINK_MAGIC=
-   case $star_cv_restfp_fixup in
-     cc_dynamic)
-       # Add the required libraries to C_FC_... variables, which are
-       # generated in the required places by (our) automake.
-       C_FC_FCLINK_MAGIC="-lcc_dynamic"
-       C_FC_PPFC_FCLINK_MAGIC="-lcc_dynamic"
-       ;;
-     nofortran)
-       AC_MSG_NOTICE([No Fortran in path, so presumably no g77/gcc library problems])
-       ;;
-     *) ;;
-   esac
-   AC_SUBST(C_FC_FCLINK_MAGIC)
-   AC_SUBST(C_FC_PPFC_FCLINK_MAGIC)
-])# _STAR_RESTFP_FIX
-
-
-# STAR_LARGEFILE_SUPPORT
-# ----------------------
-#
-# Set C macros for compiling C routines that want to make use of large file 
-# support. This is a joining of AC_SYS_LARGEFILE and AC_FUNC_FSEEKO
-# so defines the macros _FILE_OFFSET_BITS, _LARGEFILE_SOURCE and _LARGE_FILES,
-# along with HAVE_FSEEKO. To use large file support you need to use fseeko and
-# ftello when HAVE_FSEEKO is defined (and use off_t for offsets) and compile
-# all C code with the other defines. 
-#
-# This function also gathers the values of _FILE_OFFSET_BITS, _LARGEFILE_SOURCE
-# and _LARGE_FILES and sets the STAR_LARGEFILE_CFLAGS variable (this in useful
-# for passing to packages which are not directly part of the starconf system).
-#
-AC_DEFUN([STAR_LARGEFILE_SUPPORT],
-[dnl Enable autoconf largefile support.
-AC_SYS_LARGEFILE
-AC_FUNC_FSEEKO
-
-# Gather state into a single variable for passing to other packages.
-STAR_LARGEFILE_CFLAGS=
-if test "$ac_cv_sys_file_offset_bits" != "no"; then
-   STAR_LARGEFILE_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
-fi
-
-if test "$ac_cv_sys_large_files" != "no"; then
-   STAR_LARGEFILE_CFLAGS="-D_LARGE_FILES_=$ac_cv_sys_large_files $STAR_LARGEFILE_CFLAGS"
-fi
-
-if test "$ac_cv_sys_largefile_source" != "no"; then
-   STAR_LARGEFILE_CFLAGS="-D_LARGEFILE_SOURCE=$ac_cv_sys_largefile_source $STAR_LARGEFILE_CFLAGS"
-fi
-])# STAR_LARGEFILE_SUPPORT
-
-
-# Obsolete macros
-# ===============
-
-# STAR_HAVE_FC_OPEN_READONLY
-# ---------------------------
-#
-# Tests if the Fortran compiler supports the READONLY option on the
-# OPEN command.  If it does, it defines HAVE_FC_OPEN_READONLY to 1.
-AC_DEFUN([STAR_HAVE_FC_OPEN_READONLY],
-   [AC_FATAL([Macro STAR_HAVE_FC_OPEN_READONLY is obsolete; use AC_FC_OPEN_SPECIFIERS(readonly) instead])])
-
-
-# STAR_FC_LIBRARY_LDFLAGS
-# -----------------------
-#
-# This was once a wrapper for AC_[]FC_LIBRARY_LDFLAGS which added
-# functionality.  That functionality is now incorporated into STAR_[]DEFAULTS,
-# using the helper macro _STAR_[]RESTFP_FIXUP.  Configure.ac files should use
-# use AC_[]FC_LIBRARY_LDFLAGS instead.
-AC_DEFUN([STAR_FC_LIBRARY_LDFLAGS],
-   [AC_FATAL([Macro STAR_FC_LIBRARY_LDFLAGS is obsolete: if necessary, use standard AC_FC_LIBRARY_LDFLAGS instead])])
-
-
-# end of starconf macros
-
-# Copyright (C) 2002, 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_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION so it can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-	 [AM_AUTOMAKE_VERSION([1.9.6-starlink])])
-
-# 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
-# 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 7
-
-# 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])
-AC_SUBST([$1_FALSE])
-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
-# 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 8
-
-# 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], 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
-  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
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} 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])
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 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 3
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; 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.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /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
-# 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 12
-
-# 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.58])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
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-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
- 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)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-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
-])
-])
-
-
-# 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_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $1 | $1:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-
-# 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_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-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])])
-
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 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 3
-
-# 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 done
-.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
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
-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, 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 4
-
-# 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
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# 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  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 whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-#
-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-# created by `make install' are always world readable, even if the
-# installer happens to have an overly restrictive umask (e.g. 077).
-# This was a mistake.  There are at least two reasons why we must not
-# use `-m 0755':
-#   - it causes special bits like SGID to be ignored,
-#   - it may be too restrictive (some setups expect 775 directories).
-#
-# Do not use -m 0755 and let people choose whatever they expect by
-# setting umask.
-#
-# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-# Some implementations (such as Solaris 8's) are not thread-safe: if a
-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-# concurrently, both version can detect that a/ is missing, but only
-# one can create it and the other will error out.  Consequently we
-# restrict ourselves to GNU make (using the --version option ensures
-# this.)
-AC_DEFUN([AM_PROG_MKDIR_P],
-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
-fi
-AC_SUBST([mkdir_p])])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 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 3
-
-# _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],
-[AC_FOREACH([_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
-# 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_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# 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="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# 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
-
-m4_include([acinclude.m4])
diff --git a/ast-5.3-1/ast.news b/ast-5.3-1/ast.news
deleted file mode 100644
index 0691e79..0000000
--- a/ast-5.3-1/ast.news
+++ /dev/null
@@ -1,451 +0,0 @@
-AST Library
------------
-   A new release (V5.3-1) of the Starlink AST (astrometry) library is
-now available.
-
-   AST provides a comprehensive range of facilities for attaching
-world coordinate systems (such as RA/Dec, frequency, etc) to astronomical 
-data, for retrieving and interpreting that information and for generating
-graphical output based on it.
-
-   The library should be of interest to anyone writing astronomical
-software which needs to manipulate coordinate system data, especially
-celestial coordinate systems. AST is portable and
-environment-independent.
-
-Main Changes in this Version
-----------------------------
-
-- The StcsChan class now ignores case when reading STC-S phrases (except
-that units strings are still case sensitive).
-
-
-Main Changes in Version 5.3
----------------------------
-
-- The details of how a Frame is aligned with another Frame by the
-astFindFrame and astConvert (AST_FINDFRAME and AST_CONVERT) functions
-have been changed. The changes mean that a Frame can now be aligned with
-an instance of a sub-class of Frame, so long as the number of axes and
-the Domain values are consistent. For instance, a basic 2-dimensional
-Frame with Domain "SKY" will now align succesfully with a SkyFrame,
-conversion between the two Frames being achieved using a UnitMap.
-
-- The arrays that supply input values to astMapPut1<X> are now declared
-"const".
-
-- Added method astMatchAxes (AST_MATCHAXES) to the Frame class. This
-allows corresponding axes in two Frames to be identified.
-
-- The astAddFrame (AST_ADDFRAME) method can now be used to append one or 
-more axes to all Frames in a FrameSet.
-
-
-Main Changes in Version 5.1
----------------------------
-
-- A new method called astSetFitsCM (AST_SETFITSCM) has been added to
-the FitsChan class. It stores a pure comment card in a FitsChan (that 
-is, a card with no keyword name or equals sign).
-
-- A new attribute called ObsAlt has been added to the Frame class. It
-records the geodetic altitude of the observer, in metres. It defaults to
-zero. It is used when converting times to or from the TDB timescale, or
-converting spectral positions to or from the topocentric rest frame, or
-converting sky positions to or from horizon coordinates. The FitsChan
-class will include its effect when creating a set of values for the 
-OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
-set of OBSGEO-X/Y/Z keyword values from a FITS header.
-
-- The TimeMap conversions "TTTOTDB" and "TDBTOTT", and the SpecMap
-conversions "TPF2HL" and "HLF2TP", now have an additional argument - 
-the observer's geodetic altitude.
-
-- The Polygon class has been modified to make it consistent with the
-IVOA STC definition of a Polygon. Specifically, the inside of a polygon
-is now the area to the left of each edge as the vertices are traversed in 
-an anti-clockwise manner, as seen from the inside of the celestial sphere.
-Previously, AST used the anti-clockwise convention, but viewed from the
-outside of the celestial sphere instead of the inside. Any Polygon saved 
-using previous versions of AST will be identified and negated automatically 
-when read by AST V5.2.
-
-- A new class of Channel, called StcsChan, has been added that allows
-conversion of suitable AST Objects to and from IVOA STC-S format.
-
-- A new method called astDownsize (AST_DOWNSIZE) has been added to the
-Polygon class. It produces a new Polygon that contains a subset of the
-vertices in the supplied Polygon. The subset is chosen to retain the main
-features of the supplied Polygion, in so far as that is possible, within
-specified constraints.
-
-- A new constructor called astOutline (AST_OUTLINE) has been added to the
-Polygon class. Given a 2D data array, it identifies the boundary of a
-region within the array that holds pixels with specified values. It then
-creates a new Polygon to describe this boundary to a specified accuracy.
-
-- A new method called astRemoveRegions (AST_REMOVEREGIONS) has been added
-to the Mapping class. It removes the masking effects of any Regions found
-within a (possibly compound) Mapping or Frame. In effect, it replaces
-each Region found within the Mapping or Frame with a UnitMap or
-equivalent Frame.
-
-- A new set of methods, called astMapGetElem<X> (AST_MAPGETELEM<X>) has
-been added to the KeyMap class. They allow a single element of a vector
-valued entry to be returned.
-
-- A new attribute called KeyError has been added to the KeyMap Class. It
-controls whether the astMapGet... (AST_MAPGET...) family of functions report
-an error if an entry with the requested key does not exist in the KeyMap.
-
-Main Changes in Version 5.1
----------------------------
-
-- The astUnlock function now has an extra parameter that controls whether 
-or not an error is reported if the Object is currently locked by another
-thread.
-
-- The values of the AST__THREADSAFE macro (defined in ast.h) have
-been changed from "yes" and "no" to "1" and "0".
-
-- The PointList class has a new method, astPoints, that copies the axis
-values from the PointList into a supplied array. 
-
-- The PointList class has a new (read-only) attribute, ListSize, that 
-gives the number of points stored in the PointList.
-
-- A new method (astIntersect) has been added to the Frame class. It
-determines the position at which two geodesic curves intersect.
-
-- The XmlStrict attribute and astXmlWarnings function have been removed. 
-The same functionality is now available via the existing Strict attribute, 
-a new attribute called ReportLevel, and a new function called astWarnings.
-
-- A bug in the type-checking of Objects passed as arguments to constructor
-functions has been fixed. This bug could lead to applications crashing or
-showing strange behaviour if an inappropriate class of Object was
-supplied as an argument to a constructor.
-
-- The astPickAxes function will now return a Region, if possible, when
-applied to a Region. If this is not possible, a Frame will be returned as
-before.
-
-- The default gap size between the ISO date/time labels used by the Plot 
-class when displaying an annotated axis described by a TimeFrame has been
-changed. The changes are meant to improve the labelling of calendar time 
-axes that span intervals from a day to a few years.
-
-Main Changes in Version 5.0
----------------------------
-
--  AST is now thread-safe. Many of the macro definitions in the "ast.h"
-header file have changed, and so all source code that include "ast.h"
-should be re-compiled. 
-
--  The TimeFrame class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called 
-LTOffset.
-
--  Addition of a new class called Plot3D that provides facilities for
-producing 3-dimensional annotated coordinate grids.
-
--  A correction for diurnal aberration is now included when
-converting between AZEL and other celestial coordinate systems. The
-correction is based on the value of the ObsLat Frame attribute (the
-geodetic latitude of the observer).
-
--  A bug has been fixed which caused the DUT1 attribute to be ignored
-by the SkyFrame class when finding conversions between AZEL and other
-celestial coordinate systems.
-
--  The Channel class has a new attribute called Strict which controls
-whether or not to report an error if unexpected data items are found
-within an AST Object description read from an external data source. Note,
-the default behaviour is now not to report such errors. This differs from
-previous versions of AST which always reported an error is unexpected
-input items were encountered.
-
-
-
-Main Changes in Version 4.5
----------------------------
-
-- All FITS-CLASS headers are now created with a frequency axis. If the
-FrameSet supplied to astWrite contains a velocity axis (or any other form
-of spectral axis) it will be converted to an equivalent frequency axis
-before being used to create the FITS-CLASS header.
-
-- The value stored in the FITS-CLASS keyword "VELO-LSR" has been changed
-from the velocity of the source to the velocity of the reference channel.
-
-- Addition of a new method call astPurgeWCS (AST_PURGEWCS) to the FitsChan 
-class. This method removes all WCS-related header cards from a FitsChan.
-
-- The astRebinSeq functions now have an extra parameter that is used to
-record the total number of input data val;ues added into the output
-array. This is necessary to correct a flaw in the calculation of output
-variances based on the spread of input values. NOTE, THIS CHANGE WILL
-REQUIRE EXISTING CODE THAT USES ASTREBINSEQ TO BE MODIFIED TO INCLUDE THE
-NEW PARAMETER (CALLED "NUSED").
-- The Plot class now honours the value of the LabelUp attribute even if
-numerical labels are placed around the edge of the Plot. Previously
-LabelUp was only used if the labels were drawn within the interior of 
-the plot. The LabelUp attribute controls whether numerical labels are 
-drawn horizontally or parallel to the axis they describe.
-- The Plot class has a new attribute called GrfContext that can be used
-to comminicate context information between an application and any
-graphics functions registered with the Plot class via the astGrfSet
-(AST_GRFSET) function.
-- Functions registered with the Plot class using astGrfSet (AST_GRFSET)
-now take a new additional integer parameter, "grfcon". The Plot class
-sets this parameter to value of the Plot's GrfContext attribute before
-calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING 
-CODE THAT USES astGrfSet (AST_GRFSET) TO BE MODIFIED TO INCLUDE THE
-NEW PARAMETER.
--  Support has been added for the FITS-WCS "HPX" projection (HEALPix).
--  A new flag "AST__VARWGT" can be supplied to astRebinSeq. This causes 
-the input data values to be weighted using the reciprocals of the input
-variances (if supplied).
-- The Frame class has a new read-only attribute called NormUnit that
-returns the normalised value of the Unit attribute for an axis. Here,
-"normalisation" means cancelling redundant units, etc. So for instance, a
-Unit value of "s*(m/s)" would result in a NormUnit value of "m".
-- A new method astShowMesh has been added to the Region class. It
-displays a mesh of points covering the surface of a Region by writing out
-a table of axis values to standard output.
-- A bug has been fixed that could segmentation violations when setting 
-attribute values.
-
-Main Changes in Version 4.4
----------------------------
-
-- The astFindFrame (AST_FINDFRAME) method can now be used to search a
-CmpFrame for an instance of a more specialised class of Frame (SkyFrame,
-TimeFrame, SpecFrame, DSBSpecFrame or FluxFrame). That is, if an instance
-of one of these classes is used as the "template" when calling
-astFindFrame, and the "target" being searched is a CmpFrame (or a
-FrameSet in which the current Frame is a CmpFrame), then the component
-Frames within the CmpFrame will be searched for an instance of the
-supplied template Frame, and, if found, a suitable Mapping (which will
-include a PermMap to select the required axes from the CmpFrame) will be
-returned by astFindFrame. Note, for this to work, the MaxAxes and MinAxes
-attributes of the template Frame must be set so that they cover a range
-that includes the number of axes in the target CmpFrame.
-
-- The DSBSpecFrame class has a new attribute called AlignSB that
-specifies whether or not to take account of the SideBand attributes when
-aligning two DSBSpecFrames using astConvert (AST_CONVERT).
-
-- The Frame class has a new attribute called Dut1 that can be used to
-store a value for the difference between the UT1 and UTC timescales at 
-the epoch referred to by the Frame. 
-
-- The number of digits used to format the Frame attributes ObsLat and 
-ObsLon has been increased.
-
-- The use of the SkyFrame attribute AlignOffset has been changed. This
-attribute is used to control how two SkyFrames are aligned by astConvert.
-If the template and target SkyFrames both have a non-zero value for 
-AlignOffset, then alignment occurs within the offset coordinate systems 
-(that is, a UnitMap will always be used to align the two SkyFrames).
-
-- The Plot class has a new attribute called ForceExterior that can be
-used to force exterior (rather than interior) tick marks to be produced,
-even if this would result in less than 3 tick marks being produced.
-
-- The TimeFrame class now supports conversion between angle based
-timescales such as UT1 and atomic based timescales such as UTC.
-
-
-Main Changes in Version 4.3
----------------------------
-
-- The SpecFrame class has a new attribute called SourceSys that specified
-whether the SourceVel attribute (which specifies the rest frame of the 
-source) should be accessed as an apparent radial velocity or a redshift.
-Note, any existing software that assumes that SourceVel always represents
-a velocity in km/s should be changed to allow for the possibility of
-SourceVel representing a redshift value.
-
--  The astGetFitsS (AST_GETFITSS) function now strips trailing white space
-from the returned string, if the original string contains 8 or fewer
-characters.
-
-
-Main Changes in Version 4.2
----------------------------
-
-- The SideBand attribute of the DSBSpecFrame class can now take the
-option "LO" in addition to "USB" and "LSB". The new option causes the
-DSBSpecFrame to represent the offset from the local oscillator frequency, 
-rather than either of the two sidebands.
-
-- The FitsChan class has been changed so that it writes out a VELOSYS
-keyword when creating a FITS-WCS encoding (VELOSYS indicates the
-topocentric apparent velocity of the standard of rest). FitsChan also
-strips out VELOSYS keywords when reading a FrameSet from a FITS-WCS
-encoding.
-
-- The FitsChan class has a new method called astRetainFits (AST_RETAINFITS)
-that indicates that the current card in the FitsChan should not be
-stripped out of the FitsChan when an AST Object is read from the FitsChan.
-Unless this method is used, all cards that were involved in the creation
-of the AST Object will be stripped from the FitsChan afte a read operation.
-
-- The ast_link_adam and ast_link scripts now ignore the -fsla and -csla
-options, and always link against the minimal cut-down version of SLALIB
-distributed as part of AST.
-
-- A problem with unaligned memory access that could cause bus errors on 
-Solaris has been fixed.
-
-- A new function called astTune (or AST_TUNE) has been added which can be 
-used to get and set global AST tuning parameters. At the moment there are 
-only two such parameter, both of which are concerned with memory management 
-within AST.
-
-- A new method called astTranGrid (AST_TRANGRID in Fortran) has been
-added to the Mapping class. This method creates a regular grid of points
-covering a rectangular region within the input space of a Mapping, and
-then transforms this set of points into the output space of the Mapping,
-using a piecewise-continuous linear approximation to the Mapping if
-appropriate in order to achive higher speed.
-
-- A new subclass of Mapping has been added called SwitchMap. A
-SwitchMap represents several alternate Mappings, each of which is used to
-transforms input positions within a different region of the input
-coordinate space.
-
-- A new subclass of Mapping has been added called SelectorMap. A
-SelectorMap tests each input position to see if it falls within one of
-several Regions. If it does, the index of the Region containing the
-input position is returned as the Mapping output.
-
-- The behaviour of the astConvert (AST_CONVERT) method when trying to
-align a CmpFrame with another Frame has been modified. If no conversion
-between positions in the Frame and CmpFrame can be found, an attempt is
-now made to find a conversion between the Frame and one of two component
-Frames contained within the CmpFrame. Thus is should now be possible to
-align a SkyFrame with a CmpFrame containing a SkyFrame and a SpecFrame
-(for instance). The returned Mapping produces bad values for the extra
-axes (i.e. for the SpecFrame axis in the above example).
-
-Main Changes in Version 4.1
----------------------------
-
-- A new control flag has been added to the AST_RESAMPLE<X>/astResample<X> 
-functions which produces approximate flux conservation.
-
-- The SkyFrame class now supports a System value of "AZEL" corresponding
-to horizon (azimuth/elevation) coordinates.
-
-- The FitsChan class allows the non-standard strings "AZ--" and "EL--" to 
-be used as axis types in FITS-WCS CTYPE keyword values.
-
-- The Frame class now has attributes ObsLon and ObsLat to specify
-the geodetic longitude and latitude of the observer.
-
-- The ClockLon and ClockLat attributes have been removed from the
-TimeFrame class. Likewise, the GeoLon and GeoLat attributes have been 
-removed from the SpecFrame class. Both classes now use the ObsLon and
-ObsLat attributes of the parent Frame class instead. However, the old
-attribute names can be used as synonyms for ObsLat and ObsLon. Also,
-dumps created using the old scheme can be read succesfully by AST V4.1
-and converted to the new form.
-
-- A new function astMapSplit has been added to the Mapping class. This
-splits a Mapping into two component Mappings which, when combined in
-parallel, are equivalent to the original Mapping.
-
-- The default value for the SkyRefIs attribute has been changed from
-"Origin" to "Ignored". This means that if you want to use a SkyFrame
-to represent offsets from some origin position, you must now set the
-SkyRefIs attribute explicitly to either "Pole" or "Origin", in addition 
-to assigning the required origin position to the SkyRef attribute.
-
-
-Main Changes in Version 4.0
----------------------------
-
-- Experimental support for reading IVOA Space-Time-Coordinates (STC)
-descriptions using the XmlChan class has been added. Support is included
-for a subset of V1.20 of the draft STC specification.
-
-- A new set of methods (AST_REBIN<X>/astRebin<X>) has been added to 
-the Mapping class. These are accurately flux-conserving alternatives to the 
-existing AST_RESAMPLE<X>/astResample<X> methods.
-
-
-Main Changes in Version 3.7
----------------------------
-
-- Support for time coordinate systems has been introduced throught the
-addition of two new classes, TimeFrame and TimeMap. The TimeFrame is a
-1-dimensional Frame which can be used to describe moments in time (either
-absolute or relative) in various systems (MJD, Julian Epoch, etc.) and
-referred to various time scales (TAI, UTC, UT1, GMST, etc). The TimeMap
-is a Mapping which can transform time values between these various
-systems and time scales.
-
-
-Main Changes in Version 3.6
----------------------------
-
-- If the Format attribute associated with an axis of a SkyFrame starts
-with a percent character (%), then axis values are now formatted and
-unformatted as a decimal radians value, using the Format syntax of a
-simple Frame.
-
-- The Plot class has a new attribute called Clip which controls the
-clipping performed by AST at the plot boundary.
-
-- The PolyMap class has been modified to allow a PolyMap to be written
-succesfully to a FitsChan using Native encoding. 
-
-- A mimimal cut down subset of the C version of SLALIB is now included
-with the AST distribution and built as part of building AST. This means
-that it is no longer necessary to have SLALIB installed separately at
-your site. The SLALIB code included with AST is distrubuted under the
-GPL. The default behaviour of the ast_link script is now to link with
-this internal slalib subset. However, the ``-csla'' option can still be
-used to force linking with an external full C SLALIB library. A new
-option ``-fsla'' has been introduced which forces linking with the
-external full Fortran SLALIB library.
-
-
-Main Changes in Version 3.5
----------------------------
-
-- AST now provides facilities for representing regions of various
-shapes within a coordinate system. The Region class provides general
-facilities which are independent of the specific shape of region being
-used. Various sub-classes of Region are also now available which provide 
-means of creating Regions of specific shape. Facilities provided by the
-Region class include testing points to see if they are inside the
-Region, testing two Regions for overlap, transforming Regions from one
-coordinate system to another, etc.
-
-- A new class of 1-dimensional Frame called FluxFrame has been added which 
-can be used to describe various systems for describing ovserved value at a 
-single fixed spectral position. 
-
-- A new class of 2-dimensional Frame called SpecFluxFrame has been added which 
-can be used to describe a 2-d frame spanned by a spectral position axis
-and and an observed value axis.
-
-- A new class of Mapping called RateMap has been added. A RateMap encapsulates
-a previously created Mapping. The inputs of the RateMap correspond to the
-inputs of the encapsulated Mapping. All RateMaps have just a single
-output which correspond to the rate of change of a specified output of
-the encapsulated Mapping with respect to a specified input.
-
-- The SkyFrame class now supports a value of "J2000" for System. This
-system is an equatorial system based on the mean dynamical equator and
-equinox at J2000, and differs slightly from an FK5(J2000) system.
-
-- Methods have been added to the FitsChan class to allow values for named
-keywords to be changed or added.
-
-- The parameter list for the astRate method of the Mapping class has been
-modified. It no longer returns a second derivative estimate. Existing
-code which uses the astRate (AST_RATE) method will need to be changed.
diff --git a/ast-5.3-1/ast_cpp.in b/ast-5.3-1/ast_cpp.in
deleted file mode 100644
index c4fb206..0000000
--- a/ast-5.3-1/ast_cpp.in
+++ /dev/null
@@ -1,11 +0,0 @@
-
-# Replacement for the C pre-processor command "cpp" which is not
-# always available. This uses the compiler command "cc" to do the same
-# thing.  Also, this reads from standard input (which "cc" won't do).
-#
-# The name of the CPP processor is substituted in by the ./configure script,
-# based on the result of the AC_PROG_CPP test.
-
-cat >/tmp/ast_cpp_$$.c
- at CPP@ /tmp/ast_cpp_$$.c
-rm -f /tmp/ast_cpp_$$.c
diff --git a/ast-5.3-1/ast_err.h b/ast-5.3-1/ast_err.h
deleted file mode 100644
index f31bbfc..0000000
--- a/ast-5.3-1/ast_err.h
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * C error define file for facility AST (1521)
- * Generated by the MESSGEN utility
- */
-
-#ifndef AST_ERROR_DEFINED
-#define AST_ERROR_DEFINED
-
-/* attribute getting error */
-enum { AST__ATGER           	= 233933154 };	/* messid=300 */
-
-/* attribute setting error */
-enum { AST__ATSER           	= 233933162 };	/* messid=301 */
-
-/* attribute value invalid */
-enum { AST__ATTIN           	= 233933170 };	/* messid=302 */
-
-/* axis index invalid */
-enum { AST__AXIIN           	= 233933178 };	/* messid=303 */
-
-/* bad attribute name */
-enum { AST__BADAT           	= 233933186 };	/* messid=304 */
-
-/* zero-sized box given */
-enum { AST__BADBX           	= 233933194 };	/* messid=305 */
-
-/* bad input data */
-enum { AST__BADIN           	= 233933202 };	/* messid=306 */
-
-/* bad number of input coordinates */
-enum { AST__BADNI           	= 233933210 };	/* messid=307 */
-
-/* bad number of output coordinates */
-enum { AST__BADNO           	= 233933218 };	/* messid=308 */
-
-/* PolyMap contains illegal power value */
-enum { AST__BADPW           	= 233933226 };	/* messid=309 */
-
-/* ShiftMap contains no shift information */
-enum { AST__BADSM           	= 233933234 };	/* messid=310 */
-
-/* WinMap contains no bounds information */
-enum { AST__BADWM           	= 233933242 };	/* messid=311 */
-
-/* bad break index */
-enum { AST__BDBRK           	= 233933250 };	/* messid=312 */
-
-/* bad field specifier */
-enum { AST__BDFMT           	= 233933258 };	/* messid=313 */
-
-/* invalid FITS keyword value found */
-enum { AST__BDFTS           	= 233933266 };	/* messid=314 */
-
-/* inappropriate Object supplied */
-enum { AST__BDOBJ           	= 233933274 };	/* messid=315 */
-
-/* wrong number of clipping axes */
-enum { AST__CLPAX           	= 233933282 };	/* messid=316 */
-
-/* range of coordinates invalid */
-enum { AST__CORNG           	= 233933290 };	/* messid=317 */
-
-/* too many breaks in a curve */
-enum { AST__CVBRK           	= 233933298 };	/* messid=318 */
-
-/* array dimensions invalid */
-enum { AST__DIMIN           	= 233933306 };	/* messid=319 */
-
-/* date/time error */
-enum { AST__DTERR           	= 233933314 };	/* messid=320 */
-
-/* invalid use of astEnd */
-enum { AST__ENDIN           	= 233933322 };	/* messid=321 */
-
-/* end of input Channel encountered */
-enum { AST__EOCHN           	= 233933330 };	/* messid=322 */
-
-/* attempt to export Object pointer from level zero */
-enum { AST__EXPIN           	= 233933338 };	/* messid=323 */
-
-/* corrupted FitsChan supplied */
-enum { AST__FCRPT           	= 233933346 };	/* messid=324 */
-
-/* error while formatting coordinate value */
-enum { AST__FMTER           	= 233933354 };	/* messid=325 */
-
-/* Frame index invalid */
-enum { AST__FRMIN           	= 233933362 };	/* messid=326 */
-
-/* FrameSet invalid */
-enum { AST__FRSIN           	= 233933370 };	/* messid=327 */
-
-/* cannot convert FITS data value type */
-enum { AST__FTCNV           	= 233933378 };	/* messid=328 */
-
-/* low level graphics error */
-enum { AST__GRFER           	= 233933386 };	/* messid=329 */
-
-/* invalid Handle */
-enum { AST__INHAN           	= 233933394 };	/* messid=330 */
-
-/* incompatible numbers of coordinates */
-enum { AST__INNCO           	= 233933402 };	/* messid=331 */
-
-/* internal programming error */
-enum { AST__INTER           	= 233933410 };	/* messid=332 */
-
-/* incompatible transformation directions */
-enum { AST__INTRD           	= 233933418 };	/* messid=333 */
-
-/* circular dependency between KeyMaps */
-enum { AST__KYCIR           	= 233933426 };	/* messid=334 */
-
-/* class loader error */
-enum { AST__LDERR           	= 233933434 };	/* messid=335 */
-
-/* invalid lookup table increment */
-enum { AST__LUTII           	= 233933442 };	/* messid=336 */
-
-/* invalid number of lookup table elements */
-enum { AST__LUTIN           	= 233933450 };	/* messid=337 */
-
-/* requested memory size invalid */
-enum { AST__MEMIN           	= 233933458 };	/* messid=338 */
-
-/* not a 2d or 3d MatrixMap */
-enum { AST__MTR23           	= 233933466 };	/* messid=339 */
-
-/* null rotation axis supplied */
-enum { AST__MTRAX           	= 233933474 };	/* messid=340 */
-
-/* bad matrix shapes for multiplication */
-enum { AST__MTRML           	= 233933482 };	/* messid=341 */
-
-/* null matrix supplied */
-enum { AST__MTRMT           	= 233933490 };	/* messid=342 */
-
-/* number of axes invalid */
-enum { AST__NAXIN           	= 233933498 };	/* messid=343 */
-
-/* number of characters invalid */
-enum { AST__NCHIN           	= 233933506 };	/* messid=344 */
-
-/* number of coordinates invalid */
-enum { AST__NCOIN           	= 233933514 };	/* messid=345 */
-
-/* number of coordinates per point invalid */
-enum { AST__NCPIN           	= 233933522 };	/* messid=346 */
-
-/* number of array elements invalid */
-enum { AST__NELIN           	= 233933530 };	/* messid=347 */
-
-/* number of output coordinates too small */
-enum { AST__NOCTS           	= 233933538 };	/* messid=348 */
-
-/* transformation not defined */
-enum { AST__NODEF           	= 233933546 };	/* messid=349 */
-
-/* required FITS keywords missing */
-enum { AST__NOFTS           	= 233933554 };	/* messid=350 */
-
-/* unable to allocate memory */
-enum { AST__NOMEM           	= 233933562 };	/* messid=351 */
-
-/* number of output points too small */
-enum { AST__NOPTS           	= 233933570 };	/* messid=352 */
-
-/* attribute is read-only */
-enum { AST__NOWRT           	= 233933578 };	/* messid=353 */
-
-/* number of points invalid */
-enum { AST__NPTIN           	= 233933586 };	/* messid=354 */
-
-/* Object invalid */
-enum { AST__OBJIN           	= 233933594 };	/* messid=355 */
-
-/* invalid Plot option */
-enum { AST__OPT             	= 233933602 };	/* messid=356 */
-
-/* points data structure invalid */
-enum { AST__PDSIN           	= 233933610 };	/* messid=357 */
-
-/* no numerical labels can be produced */
-enum { AST__PLFMT           	= 233933618 };	/* messid=358 */
-
-/* permutation invalid */
-enum { AST__PRMIN           	= 233933626 };	/* messid=359 */
-
-/* pointer invalid */
-enum { AST__PTRIN           	= 233933634 };	/* messid=360 */
-
-/* range of points invalid */
-enum { AST__PTRNG           	= 233933642 };	/* messid=361 */
-
-/* read error */
-enum { AST__RDERR           	= 233933650 };	/* messid=362 */
-
-/* invalid or corrupted Region structure supplied */
-enum { AST__REGIN           	= 233933658 };	/* messid=363 */
-
-/* invalid attempt to remove last Frame */
-enum { AST__REMIN           	= 233933666 };	/* messid=364 */
-
-/* sky coordinate system invalid */
-enum { AST__SCSIN           	= 233933674 };	/* messid=365 */
-
-/* axis selection invalid */
-enum { AST__SELIN           	= 233933682 };	/* messid=366 */
-
-/* bad SLALIB transformation type */
-enum { AST__SLAIN           	= 233933690 };	/* messid=367 */
-
-/* coordinate transformation not defined */
-enum { AST__TRNND           	= 233933698 };	/* messid=368 */
-
-/* unmatched quotes */
-enum { AST__UNMQT           	= 233933706 };	/* messid=369 */
-
-/* valid area too small */
-enum { AST__VSMAL           	= 233933714 };	/* messid=370 */
-
-/* non-existent longitude or latitude axis */
-enum { AST__WCSAX           	= 233933722 };	/* messid=371 */
-
-/* too few mapping coordinates */
-enum { AST__WCSNC           	= 233933730 };	/* messid=372 */
-
-/* invalid projection parameters */
-enum { AST__WCSPA           	= 233933738 };	/* messid=373 */
-
-/* unknown projection type */
-enum { AST__WCSTY           	= 233933746 };	/* messid=374 */
-
-/* too many Objects in use at once */
-enum { AST__XSOBJ           	= 233933754 };	/* messid=375 */
-
-/* zoom factor invalid */
-enum { AST__ZOOMI           	= 233933762 };	/* messid=376 */
-
-/* bad coordinate index */
-enum { AST__BADCI           	= 233933770 };	/* messid=377 */
-
-/* FrameSet integrity lost */
-enum { AST__ILOST           	= 233933778 };	/* messid=378 */
-
-/* error in IntraMap transformation function */
-enum { AST__ITFER           	= 233933786 };	/* messid=379 */
-
-/* IntraMap transformation function name invalid */
-enum { AST__ITFNI           	= 233933794 };	/* messid=380 */
-
-/* Mapping bounding box not found */
-enum { AST__MBBNF           	= 233933802 };	/* messid=381 */
-
-/* multiple registration of IntraMap transformation function */
-enum { AST__MRITF           	= 233933810 };	/* messid=382 */
-
-/* Object class unknown */
-enum { AST__OCLUK           	= 233933818 };	/* messid=383 */
-
-/* error while unformatting a coordinate value */
-enum { AST__UNFER           	= 233933826 };	/* messid=384 */
-
-/* unregistered IntraMap transformation function */
-enum { AST__URITF           	= 233933834 };	/* messid=385 */
-
-/* grid bounds invalid */
-enum { AST__GBDIN           	= 233933842 };	/* messid=386 */
-
-/* number of grid dimensions invalid */
-enum { AST__NGDIN           	= 233933850 };	/* messid=387 */
-
-/* positional accuracy tolerance invalid */
-enum { AST__PATIN           	= 233933858 };	/* messid=388 */
-
-/* sub-pixel interpolation scheme invalid */
-enum { AST__SISIN           	= 233933866 };	/* messid=389 */
-
-/* scale size in pixels invalid */
-enum { AST__SSPIN           	= 233933874 };	/* messid=390 */
-
-/* error in user-supplied sub-pixel interpolation function */
-enum { AST__UINER           	= 233933882 };	/* messid=391 */
-
-/* error in user-supplied 1-d sub-pixel interpolation kernel */
-enum { AST__UK1ER           	= 233933890 };	/* messid=392 */
-
-/* invalid comma in expression */
-enum { AST__COMIN           	= 233933898 };	/* messid=393 */
-
-/* invalid constant in expression */
-enum { AST__CONIN           	= 233933906 };	/* messid=394 */
-
-/* duplicate variable name */
-enum { AST__DUVAR           	= 233933914 };	/* messid=395 */
-
-/* invalid number of transformation functions */
-enum { AST__INNTF           	= 233933922 };	/* messid=396 */
-
-/* missing or invalid operand in expression */
-enum { AST__MIOPA           	= 233933930 };	/* messid=397 */
-
-/* missing or invalid operator in expression */
-enum { AST__MIOPR           	= 233933938 };	/* messid=398 */
-
-/* missing variable name */
-enum { AST__MISVN           	= 233933946 };	/* messid=399 */
-
-/* missing left parenthesis in expression */
-enum { AST__MLPAR           	= 233933954 };	/* messid=400 */
-
-/* missing right parenthesis in expression */
-enum { AST__MRPAR           	= 233933962 };	/* messid=401 */
-
-/* missing right hand side in function */
-enum { AST__NORHS           	= 233933970 };	/* messid=402 */
-
-/* undefined variable or function in expression */
-enum { AST__UDVOF           	= 233933978 };	/* messid=403 */
-
-/* variable name invalid */
-enum { AST__VARIN           	= 233933986 };	/* messid=404 */
-
-/* wrong number of function arguments in expression */
-enum { AST__WRNFA           	= 233933994 };	/* messid=405 */
-
-/* invalid units specification */
-enum { AST__BADUN           	= 233934002 };	/* messid=406 */
-
-/* no rest frequency is defined */
-enum { AST__NORSF           	= 233934010 };	/* messid=407 */
-
-/* no standard of rest is defined */
-enum { AST__NOSOR           	= 233934018 };	/* messid=408 */
-
-/* invalid SpecMap */
-enum { AST__SPCIN           	= 233934026 };	/* messid=409 */
-
-/* invalid XML name or prefix */
-enum { AST__XMLNM           	= 233934034 };	/* messid=410 */
-
-/* invalid XML comment text */
-enum { AST__XMLCM           	= 233934042 };	/* messid=411 */
-
-/* invalid XML processing instruction target text */
-enum { AST__XMLPT           	= 233934050 };	/* messid=412 */
-
-/* invalid XML content item index */
-enum { AST__XMLIT           	= 233934058 };	/* messid=413 */
-
-/* supplied XML document is not well formed */
-enum { AST__XMLWF           	= 233934066 };	/* messid=414 */
-
-/* Range of log axis scale includes zero */
-enum { AST__ZERAX           	= 233934074 };	/* messid=415 */
-
-/* Invalid parameters for offset sky coordinate system */
-enum { AST__BADOC           	= 233934082 };	/* messid=416 */
-
-/* error getting a named value from a KeyMap */
-enum { AST__MPGER           	= 233934090 };	/* messid=417 */
-
-/* invalid integer index supplied for a KeyMap entry */
-enum { AST__MPIND           	= 233934098 };	/* messid=418 */
-
-/* region cannot be re-centred */
-enum { AST__REGCN           	= 233934106 };	/* messid=419 */
-
-/* attribute has no usable value */
-enum { AST__NOVAL           	= 233934114 };	/* messid=420 */
-
-/* incompatible time scales */
-enum { AST__INCTS           	= 233934122 };	/* messid=421 */
-
-/* invalid TimeMap */
-enum { AST__TIMIN           	= 233934130 };	/* messid=422 */
-
-/* cannot use supplied AstroCoords info */
-enum { AST__STCKEY          	= 233934138 };	/* messid=423 */
-
-/* invalid AstroCoords index */
-enum { AST__STCIND          	= 233934146 };	/* messid=424 */
-
-/* cannot conserve flux whilst resampling an array of data */
-enum { AST__CNFLX           	= 233934154 };	/* messid=425 */
-
-/* Unknown AST tuning parameter name supplied */
-enum { AST__TUNAM           	= 233934162 };	/* messid=426 */
-
-/* Bad value supplied for a public function parameter */
-enum { AST__BDPAR           	= 233934170 };	/* messid=427 */
-
-/* Supplied FrameSet does not contain any independent axes */
-enum { AST__3DFSET          	= 233934178 };	/* messid=428 */
-
-/* Attempt to delete original Plot3D base Frame */
-enum { AST__PXFRRM          	= 233934186 };	/* messid=429 */
-
-/* Illegal syntax for string substitution template */
-enum { AST__BADSUB          	= 233934194 };	/* messid=430 */
-
-/* Incompatible flags for re-sampling or re-binning */
-enum { AST__BADFLG          	= 233934202 };	/* messid=431 */
-
-/* Error locking or unlocking an AST Object */
-enum { AST__LCKERR          	= 233934210 };	/* messid=432 */
-
-/* FITS keyword had undefined value */
-enum { AST__FUNDEF          	= 233934218 };	/* messid=433 */
-
-/* invalid integer index supplied for a KeyMap vector element */
-enum { AST__MPVIN           	= 233934226 };	/* messid=434 */
-
-/* operation specifier invalid */
-enum { AST__OPRIN           	= 233934234 };	/* messid=435 */
-
-/* no inside point found */
-enum { AST__NONIN           	= 233934242 };	/* messid=436 */
-
-/* requested key not found in KeyMap */
-enum { AST__MPKER           	= 233934250 };	/* messid=437 */
-
-#endif	/* AST_ERROR_DEFINED */
diff --git a/ast-5.3-1/ast_link.in b/ast-5.3-1/ast_link.in
deleted file mode 100644
index 4b472cd..0000000
--- a/ast-5.3-1/ast_link.in
+++ /dev/null
@@ -1,454 +0,0 @@
-
-#  N.B. the previous line should be blank.
-#++
-#  Name:
-#     ast_link
-
-#  Purpose:
-#     Link a program with the AST library.
-
-#  Type of Module:
-#     Shell script.
-
-#  Description:
-#     This command should be used when building programs which use the AST
-#     library, in order to generate the correct arguments to allow the compiler
-#     to link your program. The arguments generated are written to standard
-#     output but may be substituted into the compiler command line in the
-#     standard UNIX way using backward quotes (see below).
-#
-#     By default, it is assumed that you are building a stand-alone program
-#     which does not produce graphical output. However, switches are provided
-#     for linking other types of program.
-
-#  Invocation:
-#c     cc program.c -L/star/lib `ast_link [switches]` -o program
-#f     f77 program.f -L/star/lib `ast_link [switches]` -o program
-
-#  Switches:
-#     The following switches may optionally be given to this command to
-#     modify its behaviour:
-#
-#
-#     - ``-csla'': Ignored. Provided for backward compatibility only.
-#
-#     - ``-fsla'': Ignored. Provided for backward compatibility only.
-#
-#     - ``-ems'': Requests that the program be linked so that error messages
-#     produced by the AST library are delivered via the Starlink EMS (Error
-#     Message Service) library (Starlink System Note SSN/4). By default,
-#     error messages are simply written to standard error.
-#
-#     - ``-drama'': Requests that the program be linked so that error messages
-#     produced by the AST library are delivered via the DRAMA Ers (Error
-#     Reporting Service) library. By default, error messages are simply
-#     written to standard error.
-#
-#     - ``-grf'': Requests that no arguments be generated to specify which
-#     2D graphics system is used to display output from the AST library. You
-#     should use this option only if you have implemented an interface to a
-#     new graphics system yourself and wish to provide your own arguments for
-#     linking with it. This switch differs from the other ``grf'' switches in 
-#     that it assumes that your graphics module implements the complete 
-#     interface required by the current version of AST. If future versions of 
-#     AST introduce new functions to the graphics interface, this switch will 
-#     cause ``unresolved symbol'' errors to occur during linking, warning you 
-#     that you need to implement new functions in your graphics module. To 
-#     avoid such errors, you can use one of the other, version-specific, 
-#     switches in place of the ``-grf'' switch, but these will cause run-time 
-#     errors to be reported if any AST function is invoked which requires 
-#     facilities not in the implemented interface.
-#
-#     - ``-grf_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-#     It indicates that you want to link with your own graphics module 
-#     which implements the 2D graphics interface required by V2.0 of AST.
-#
-#     - ``-grf_v3.2'': Indicates that you want to link with your own 
-#     graphics module which implements the 2D graphics interface required by 
-#     V3.2 of AST.
-#
-#     - ``-myerr'': Requests that no arguments be generated to specify how
-#     error messages produced by the AST library should be delivered. You
-#     should use this option only if you have implemented an interface to a
-#     new error delivery system yourself and wish to provide your own
-#     arguments for linking with it.
-#
-#     - ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-#     but is retained in order to allow applications to be linked with a 
-#     graphics module which implements the 2D interface used by AST V2.0. It 
-#     is equivalent to the ``-grf_v2.0'' switch.
-#
-#     - ``-pgp'': Requests that the program be linked so that 2D 
-#     graphical output from the AST library is displayed via the
-#     Starlink version of the PGPLOT graphics package (which uses GKS
-#     for its output). By default, no 2D graphics package is linked and
-#     this will result in an error at run time if AST routines are
-#     invoked that attempt to generate graphical output.
-#
-#     - ``-pgplot'': Requests that the program be linked so that 2D
-#     graphical output from the AST library is displayed via 
-#     the standard (or ``native'') version of the PGPLOT graphics
-#     package. By default, no 2D graphics package is linked and this will
-#     result in an error at run time if AST routines are invoked that
-#     attempt to generate graphical output.
-#
-#     - ``-grf3d'': Requests that no arguments be generated to specify which
-#     3D graphics system is used to display output from the AST library. You
-#     should use this option only if you have implemented an interface to a
-#     new 3D graphics system yourself and wish to provide your own arguments 
-#     for linking with it. 
-#
-#     - ``-pgp3d'': Requests that the program be linked so that 3D 
-#     graphical output from the AST library is displayed via the
-#     Starlink version of the PGPLOT graphics package (which uses GKS
-#     for its output). By default, no 3D graphics package is linked and
-#     this will result in an error at run time if AST routines are
-#     invoked that attempt to generate graphical output.
-#
-#     - ``-pgplot3d'': Requests that the program be linked so that 3D
-#     graphical output from the AST library is displayed via 
-#     the standard (or ``native'') version of the PGPLOT graphics
-#     package. By default, no 3D graphics package is linked and this will
-#     result in an error at run time if AST routines are invoked that
-#     attempt to generate graphical output.
-
-#  SLALIB:
-#     The AST distribution includes a cut down subset of the C version of 
-#     the SLALIB library written by Pat Wallace. This subset contains only 
-#     the functions needed by the AST library. It is built as part of the 
-#     process of building AST and is distributed under GPL (and is thus 
-#     compatible with the AST license). Previous version of this script 
-#     allowed AST applications to be linked against external SLALIB 
-#     libraries (either Fortran or C) rather than the internal version.
-#     The current version of this script does not provide this option, 
-#     and always uses the internal SLALIB library. However, for backward 
-#     compatibility, this script still allows the "-fsla" and "-csla" flags 
-#     (previously used for selecting which version of SLALIB to use) to be 
-#     specified, but they will be ignored.
-
-#  Examples:
-#c     cc display.c -L/star/lib `ast_link -pgplot` -o display
-#c        Compiles and links a C program called ``display'' which uses
-#c        the standard version of PGPLOT for graphical output.
-#c     cc plotit.c -L. -L/star/lib `ast_link -grf` -lgrf -o plotit
-#c        Compiles and links a C program ``plotit''. The ``-grf''
-#c        switch indicates that graphical output will be delivered through
-#c        a graphical interface which you have implemented yourself, which 
-#c        corresponds to the interface required by the current version of AST. 
-#c        Here, this interface is supplied by means of the ``-lgrf'' library 
-#c        reference.
-#c     cc plotit.c -L. -L/star/lib `ast_link -grf_v2.0` -lgrf -o plotit
-#c        Compiles and links a C program ``plotit''. The ``-grf_v2.0''
-#c        switch indicates that graphical output will be delivered through
-#c        a graphical interface which you have implemented yourself, which 
-#c        corresponds to the interface required by version 2.0 of AST. 
-#c        Here, this interface is supplied by means of the ``-lgrf'' library 
-#c        reference.
-#f     f77 display.f -L/star/lib `ast_link -pgplot` -o display
-#f        Compiles and links a Fortran program called ``display'' which uses
-#f        the standard version of PGPLOT for graphical output.
-#f     f77 plotit.f -L. -L/star/lib `ast_link -grf` -lgrf -o plotit
-#f        Compiles and links a Fortran program ``plotit''. The ``-grf''
-#f        switch indicates that graphical output will be delivered through
-#f        a graphical interface which you have implemented yourself, which 
-#f        corresponds to the interface required by the current version of AST. 
-#f        Here, this interface is supplied by means of the ``-lgrf'' library 
-#f        reference.
-#f     f77 plotit.f -L. -L/star/lib `ast_link -grf_v2.0` -lgrf -o plotit
-#f        Compiles and links a Fortran program ``plotit''. The ``-grf_v2.0''
-#f        switch indicates that graphical output will be delivered through
-#f        a graphical interface which you have implemented yourself, which 
-#f        corresponds to the interface required by version 2.0 of AST. 
-#f        Here, this interface is supplied by means of the ``-lgrf'' library 
-#f        reference.
-
-#  Copyright:
-#     Copyright (C) 1997-2006 Council for the Central Laboratory of the Research Councils
-#     Copyright (C) 2007-2008 Science & Technology Facilities Council.
-#     All Rights Reserved.
-
-#  Authors:
-#     RFWS: R.F. Warren-Smith (STARLINK)
-#     DSB: David S. Berry (STARLINK)
-#     TIMJ: Tim Jenness (JAC, Hawaii)
-#     {enter_new_authors_here}
-
-#  History:
-#     11-JUN-1996 (RFWS):
-#        Original version.
-#     11-NOV-1996 (RFWS):
-#        Added switches.
-#     18-NOV-1997 (RFWS):
-#        Adapted prologue for document extraction.
-#     28-SEP-1998 (RFWS):
-#        Distinguish between -pgp and -pgplot options.
-#     12-JAN-2001 (DSB):
-#        Move terminating "}" in function "find" onto a new line to
-#        avoid error when run under bash 2.04.11(1) (redhat 7).
-#     3-MAY-2001 (DSB):
-#        Added a terminating ";" to the "done" statement at the end of 
-#        the "find" function, so that ast_link can be used on Debian Linux.
-#     23-JAN-2004 (DSB):
-#        Added switches to support older grf implementations.
-#     24-AUG-2004 (DSB):
-#        Removed f77='y' from -ems case.
-#     21-APR-2005 (DSB):
-#        Added "-fsla" option.
-#     16-JUN-2006 (DSB):
-#        Ignore "-fsla" and "-clsa" options, and always use PAL.
-#     26-JUN-2007 (DSB):
-#        Added "-grf3d", "-pgplot3d" and "-pgp3d" flags.
-#     13-NOV-2008 (TIMJ):
-#        Add -drama option for DRAMA Ers support.
-#     {enter_further_changes_here}
-
-#  Bugs:
-#     {note_any_bugs_here}
-
-#--
-
-#  This line is edited during configuration of this script to define a list
-#  of the libraries that must be linked in order to resolve Fortran 77
-#  references made from within a C main program. Typically, these will arise
-#  from libraries written in Fortran which the AST library (or the C
-#  program) calls.  The value here is worked out by the autoconf macro
-#  AC_FC_LIBRARY_LDFLAGS.
-      flibs='@FCLIBS@'
-
-#  This function searches the directory path specified in PATH, looking for
-#  an executable file which is not a directory. If found, it echos the full
-#  file name to standard output. Otherwise, it outputs nothing.
-      find() { IFS=':'; for d in $PATH; do f="${d:=.}/${1}"
-                  test -x "${f}" -a ! -d "${f}" && echo "${f}" && break
-               done;
-             }
-
-#  Initialise linking options.
-      err=''
-      grf=''
-      grf3d=''
-      sla=''
-      f77=''
-
-#  Interpret command line switches.
-#  --------------------------------
-      while :; do
-         case "${1}" in
-
-#  -csla - Previously used to request C version of SLALIB. Now ignored.
-         -csla)
-#            sla='c'
-            shift;;
-
-#  -fsla - Previously used to request Fortran version of SLALIB. Now ignored.
-         -fsla)
-#            sla='f'
-            shift;;
-
-#  -ems - Requests error reporting through EMS.
-         -ems)
-            err='ems'
-            shift;;
-
-#  -drama - Requests error reporting through DRAMA Ers.
-         -drama)
-            err='drama'
-            shift;;
-
-#  -myerr - Requests no error reporting.
-         -myerr)
-            err='my'
-            shift;;
-
-#  -grf - Requests no 2D graphics.
-         -grf)
-            grf='current'
-            shift;;
-
-#  -mygrf - Requests no 2D graphics, except for null implementations of 
-#  functions aded to the grf interface after AST V2.0.
-         -mygrf)
-            grf='v2.0'
-            shift;;
-
-#  -grf_v2.0 - Requests no 2D graphics, except for null implementations of 
-#  functions aded to the grf interface after AST V2.0.
-         -grf_v2.0)
-            grf='v2.0'
-            shift;;
-
-#  -grf_v3.2 - Requests no 2D graphics, except for null implementations of 
-#  functions aded to the grf interface after AST V3.2. 
-         -grf_v3.2)
-            grf='v3.2'
-            shift;;
-
-#  -pgp - Requests 2D graphical output through Starlink PGPLOT.
-         -pgp)
-            grf='pgp'
-            shift;;
-
-#  -pgplot - Requests 2D graphical output through native PGPLOT.
-         -pgplot)
-            grf='pgplot'
-            shift;;
-
-#  -grf3d - Requests no 3D graphics.
-         -grf3d)
-            grf3d='current'
-            shift;;
-
-#  -pgp3d - Requests 3D graphical output through Starlink PGPLOT.
-         -pgp3d)
-            grf3d='pgp'
-            shift;;
-
-#  -pgplot3d - Requests 3D graphical output through native PGPLOT.
-         -pgplot3d)
-            grf3d='pgplot'
-            shift;;
-
-#  Once all switches have been read, continue with the rest of the script.
-         '') break;;
-
-#  Catch unrecognised arguments and report an error.
-         *)
-            echo >&2 "ast_link: unknown argument \""${1}"\" given"
-            exit 1;;
-         esac
-      done
-
-#  Link with the main AST library.
-#  -------------------------------
-#  Start forming the list of arguments with the main AST library itself and
-#  the "wcslib" module.
-      args='-last -last_wcslib'
-
-#  Generate arguments for linking SLALIB.
-#  --------------------------------------
-      case "${sla}" in
-
-#  The full proprietary C version of SLALIB has no link script, so simply 
-#  specify the library itself.
-      c) args="${args} -lsla";;
-
-#  For Fortran, link with the AST SLALIB interface and the Fortran library via
-#  the SLALIB link script (if found).
-      f) args="${args} `\`find sla_link\``"
-         f77='y';;
-
-#  Otherwise, link with the internal GPLed cut down C version of SLALIB.
-      *) args="${args} -last_pal";;
-      esac
-
-#  Generate arguments for linking the 2D graphics system.
-#  ------------------------------------------------------
-      case "${grf}" in
-
-#  If using Starlink PGPLOT, link with the AST PGPLOT interface and
-#  the Fortran library via the PGP link script (if found).
-      pgp) args="${args} -last_pgplot `\`find pgp_link\``"
-           f77='y';;
-
-#  If using native PGPLOT, link with the AST PGPLOT interface and the
-#  Fortran library via the PGPLOT link script (if found).
-      pgplot) args="${args} -last_pgplot `\`find pgplot_link\``"
-              f77='y';;
-
-#  If using own graphics which conform to the requirements of the current 
-#  version of AST, do not produce any arguments.
-      current) :;;
-
-#  If using own graphics which conform to the requirements of version 3.2 
-#  of AST, produce arguments which link in dummy implementations of any 
-#  functions which are required by the current version of AST but which were 
-#  not required by version 3.2.
-      v3.2) :;;
-
-#  If using own graphics which conform to the requirements of version 2.0
-#  of AST, produce arguments which link in dummy implementations of any 
-#  functions which are required by the current version of AST but which were 
-#  not required by version 2.0.
-      v2.0) args="${args} -last_grf_3.2";;
-
-#  Default graphics (none) requires linking with all the default (null) AST 
-#  "grf" modules.
-      *) args="${args} -last_grf_2.0 -last_grf_3.2";;
-      esac
-
-
-#  Generate arguments for linking the 3D graphics system.
-#  ------------------------------------------------------
-      case "${grf3d}" in
-
-#  If using Starlink PGPLOT, link with the AST 3D PGPLOT interface and
-#  the Fortran library via the PGP link script (if found).
-      pgp) args="${args} -last_pgplot3d `\`find pgp_link\``"
-           f77='y';;
-
-#  If using native PGPLOT, link with the AST 3D PGPLOT interface and the
-#  Fortran library via the PGPLOT link script (if found).
-      pgplot) args="${args} -last_pgplot3d `\`find pgplot_link\``"
-              f77='y';;
-
-#  If using own 3D graphics which conform to the requirements of the current 
-#  version of AST, do not produce any arguments.
-      current) :;;
-
-#  Default graphics (none) requires linking with all the default (null) AST 
-#  "grf3d" modules.
-      *) args="${args} -last_grf3d";;
-      esac
-
-
-
-#  Make a second pass through the AST library.
-#  -------------------------------------------
-#  This library is a link to the main AST library and results in a second
-#  pass to resolve any backward references generated by the other modules
-#  used above. A different library name must be used to avoid the two passes
-#  being merged into one (either below, or by other link scripts).
-      args="${args} -last_pass2"
-
-#  Generate arguments for linking the error reporting system.
-#  ----------------------------------------------------------
-      case "${err}" in
-
-#  If using EMS, link with the AST EMS interface and the EMS library via the
-#  link script (if found).
-      ems) args="${args} -last_ems `\`find ems_link\``";;
-
-#  If using DRAMA, link with the AST DRAMA interface and the DRAMA Ers library
-#  via the link script (if found).
-      drama) args="${args} -last_drama -lers";;
-
-#  If using own error reporting, do not produce any arguments.
-      my) :;;
-
-#  Default error reporting requires linking with the default AST "err" module.
-      *) args="${args} -last_err";;
-      esac
-
-#  Link with the maths library.
-#  ----------------------------
-      args="${args} -lm"
-
-#  Link with the starmem library, if available. 
-#  --------------------------------------------
-      args="${args} `\`find starmem_link\``"
-
-#  Resolve Fortran 77 references.
-#  ------------------------------
-#  If libraries written in Fortran are being linked against, then include
-#  additional libaries needed to resolve the references these will produce
-#  (in the event that the main program is not Fortran).
-      if test "${f77}" = 'y'; then args="${args} ${flibs}"; fi
-
-#  Pass the resulting argument list through an awk script which eliminates
-#  all except the last reference to each library.
-      echo "${args}" \
-           | awk 'BEGIN{RS=" ";FS="\n"}
-                  {if($1)f[i++]=$1}
-                  END{for(;i--;)if(!w[f[i]]++)l=f[i]" "l;print l}'
-
-#  End of script.
diff --git a/ast-5.3-1/ast_link_adam b/ast-5.3-1/ast_link_adam
deleted file mode 100644
index 6468a2e..0000000
--- a/ast-5.3-1/ast_link_adam
+++ /dev/null
@@ -1,392 +0,0 @@
-
-#  N.B. the previous line should be blank.
-#++
-#  Name:
-#     ast_link_adam
-
-#  Purpose:
-#     Link an ADAM program with the AST library.
-
-#  Type of Module:
-#     Shell script.
-
-#  Description:
-#     This command should only be used when building Starlink ADAM programs
-#     which use the AST library, in order to generate the correct arguments
-#     to allow the ADAM ``alink'' command to link the program. The arguments
-#     generated are written to standard output but may be substituted into
-#     the ``alink'' command line in the standard UNIX way using backward
-#     quotes (see below).
-#
-#     By default, it is assumed that you are building an ADAM program which
-#     does not produce graphical output. However, switches are provided for
-#     linking other types of program. This command should not be used when
-#     building stand-alone (non-ADAM) programs. Use the ``ast_link'' command
-#     instead.
-
-#  Invocation:
-#c     alink program.o -L/star/lib `ast_link_adam [switches]`
-#f     alink program.f -L/star/lib `ast_link_adam [switches]`
-
-#  Switches:
-#     The following switches may optionally be given to this command to
-#     modify its behaviour:
-#
-#     - ``-csla'': Ignored. Provided for backward compatibility only.
-#
-#     - ``-fsla'': Ignored. Provided for backward compatibility only.
-#
-#     - ``-grf'': Requests that no arguments be generated to specify which
-#     2D graphics system is used to display output from the AST library. You
-#     should use this option only if you have implemented an interface to a
-#     new graphics system yourself and wish to provide your own arguments for
-#     linking with it. This switch differs from the other ``grf'' switches in 
-#     that it assumes that your graphics module implements the complete 
-#     interface required by the current version of AST. If future versions of 
-#     AST introduce new functions to the graphics interface, this switch will 
-#     cause ``unresolved symbol'' errors to occur during linking, warning you 
-#     that you need to implement new functions in your graphics module. To 
-#     avoid such errors, you can use one of the other, version-specific, 
-#     switches in place of the ``-grf'' switch, but these will cause run-time 
-#     errors to be reported if any AST function is invoked which requires 
-#     facilities not in the implemented interface.
-#
-#     - ``-grf_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-#     It indicates that you want to link with your own graphics module which 
-#     implements the 2D graphics interface required by V2.0 of AST.
-#
-#     - ``-grf_v3.2'': Indicates that you want to link with your own graphics 
-#     module which implements the 2D graphics interface required by V3.2 of AST.
-#
-#     - ``-myerr'': Requests that no arguments be generated to specify how
-#     error messages produced by the AST library should be delivered. You
-#     should use this option only if you have implemented an interface to a
-#     new error delivery system yourself and wish to provide your own
-#     arguments for linking with it. By default, error messages are delivered
-#     in the standard ADAM way via the EMS Error Message Service (Starlink
-#     System Note SSN/4).
-#
-#     - ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-#     but is retained in order to allow applications to be linked with a 
-#     graphics module which implements the interface used by AST V2.0. It is 
-#     equivalent to the ``-grf_v2.0'' switch.
-#
-#     - ``-pgp'': Requests that the program be linked so that 2D
-#     graphical output from the AST library is displayed via the
-#     Starlink version of the PGPLOT graphics package (which uses GKS
-#     for its output). By default, no graphics package is linked and
-#     this will result in an error at run time if AST routines are
-#     invoked that attempt to generate graphical output.
-#
-#     - ``-pgplot'': Requests that the program be linked so that 2D
-#     graphical output from the AST library is displayed via the
-#     standard (or ``native'') version of the PGPLOT graphics
-#     package. By default, no graphics package is linked and this will
-#     result in an error at run time if AST routines are invoked that
-#     attempt to generate graphical output.
-#
-#     - ``-grf3d'': Requests that no arguments be generated to specify which
-#     3D graphics system is used to display output from the AST library. You
-#     should use this option only if you have implemented an interface to a
-#     new 3D graphics system yourself and wish to provide your own arguments 
-#     for linking with it. 
-#
-#     - ``-pgp3d'': Requests that the program be linked so that 3D 
-#     graphical output from the AST library is displayed via the
-#     Starlink version of the PGPLOT graphics package (which uses GKS
-#     for its output). By default, no 3D graphics package is linked and
-#     this will result in an error at run time if AST routines are
-#     invoked that attempt to generate graphical output.
-#
-#     - ``-pgplot3d'': Requests that the program be linked so that 3D
-#     graphical output from the AST library is displayed via 
-#     the standard (or ``native'') version of the PGPLOT graphics
-#     package. By default, no 3D graphics package is linked and this will
-#     result in an error at run time if AST routines are invoked that
-#     attempt to generate graphical output.
-
-#  SLALIB:
-#     The AST distribution includes a cut down subset of the C version of 
-#     the SLALIB library written by Pat Wallace. This subset contains only 
-#     the functions needed by the AST library. It is built as part of the 
-#     process of building AST and is distributed under GPL (and is thus 
-#     compatible with the AST license). Previous version of this script 
-#     allowed AST applications to be linked against external SLALIB 
-#     libraries (either Fortran or C) rather than the internal version.
-#     The current version of this script does not provide this option, 
-#     and always uses the internal SLALIB library. However, for backward 
-#     compatibility, this script still allows the "-fsla" and "-csla" flags 
-#     (previously used for selecting which version of SLALIB to use) to be 
-#     specified, but they will be ignored.
-
-#  Examples:
-#c     alink display.o -L/star/lib `ast_link_adam -pgplot`
-#c        Links an ADAM program ``display'' which uses the standard
-#c        version of PGPLOT for graphical output.
-#c     alink plotit.o -L. -L/star/lib `ast_link_adam -grf` -lgrf
-#c        Links an ADAM program ``plotit'', written in C. The ``-grf''
-#c        switch indicates that graphical output will be delivered through
-#c        a graphical interface which you have implemented yourself, which 
-#c        corresponds to the interface required by the current version of AST. 
-#c        Here, this interface is supplied by means of the ``-lgrf'' library 
-#c        reference.
-#c     alink plotit.o -L. -L/star/lib `ast_link_adam -grf_v2.0` -lgrf
-#c        Links an ADAM program ``plotit'', written in C. The ``-grf_v2.0''
-#c        switch indicates that graphical output will be delivered through
-#c        a graphical interface which you have implemented yourself, which 
-#c        corresponds to the interface required by version 2.0 of AST. Here, 
-#c        this interface is supplied by means of the ``-lgrf'' library 
-#c        reference.
-#f     alink display.f -L/star/lib `ast_link_adam -pgplot`
-#f        Compiles and links an ADAM Fortran program called ``display'' which
-#f        uses the standard version of PGPLOT for graphical output.
-#f     alink plotit.f -L. -L/star/lib `ast_link_adam -grf` -lgrf
-#f        Compiles and links an ADAM Fortran program ``plotit''. The ``-grf''
-#f        switch indicates that graphical output will be delivered through
-#f        a graphical interface which you have implemented yourself, which 
-#f        corresponds to the interface required by the current version of AST. 
-#f        Here, this interface is supplied by means of the ``-lgrf'' library 
-#f        reference.
-#f     alink plotit.f -L. -L/star/lib `ast_link_adam -grf_v2.0` -lgrf
-#f        Compiles and links an ADAM Fortran program ``plotit''. The ``-grf_v2.0''
-#f        switch indicates that graphical output will be delivered through
-#f        a graphical interface which you have implemented yourself, which 
-#f        corresponds to the interface required by version 2.0 of AST. 
-#f        Here, this interface is supplied by means of the ``-lgrf'' library 
-#f        reference.
-
-#  Copyright:
-#     Copyright (C) 1997-2006 Council for the Central Laboratory of the Research Councils
-
-#  Authors:
-#     RFWS: R.F. Warren-Smith (STARLINK)
-#     {enter_new_authors_here}
-
-#  History:
-#     11-NOV-1996 (RFWS):
-#        Original version.
-#     18-NOV-1997 (RFWS):
-#        Adapted prologue for document extraction.
-#     28-SEP-1998 (RFWS):
-#        Distinguish between -pgp and -pgplot options.
-#     23-JAN-2004 (DSB):
-#        Added switches to support older grf implementations.
-#     21-APR-2005 (DSB):
-#        Added "-fsla" option.
-#     16-JUN-2006 (DSB):
-#        Ignore "-fsla" and "-clsa" options, and always use PAL.
-#     22-AUG-2007 (DSB):
-#        Added "-grf3d", "-pgplot3d" and "-pgp3d" flags.
-#     {enter_changes_here}
-
-#  Bugs:
-#     {note_any_bugs_here}
-
-#--
-
-#  This function searches the directory path specified in PATH, looking for
-#  an executable file which is not a directory. If found, it echos the full
-#  file name to standard output. Otherwise, it outputs nothing.
-      find() { IFS=':'; for d in $PATH; do f="${d:=.}/${1}"
-                  test -x "${f}" -a ! -d "${f}" && echo "${f}" && break
-               done;
-             }
-
-#  Initialise linking options.
-      err=''
-      grf=''
-      grf3d=''
-      sla=''
-
-#  Interpret command line switches.
-#  --------------------------------
-      while :; do
-         case "${1}" in
-
-#  -csla - Previously used to request C version of SLALIB. Now ignored.
-         -csla)
-#            sla='c'
-            shift;;
-
-#  -fsla - Previously used to request Fortran version of SLALIB. Now ignored.
-         -fsla)
-#            sla='f'
-            shift;;
-
-#  -myerr - Requests no error reporting.
-         -myerr)
-            err='my'
-            shift;;
-
-#  -grf - Requests no 2D graphics.
-         -grf)
-            grf='current'
-            shift;;
-
-#  -mygrf - Requests no 2D graphics, except for null implementations of 
-#  functions aded to the grf interface after AST V2.0.
-         -mygrf)
-            grf='v2.0'
-            shift;;
-
-#  -grf_v2.0 - Requests no 2D graphics, except for null implementations of 
-#  functions aded to the grf interface after AST V2.0.
-         -grf_v2.0)
-            grf='v2.0'
-            shift;;
-
-#  -grf_v3.2 - Requests no 2D graphics, except for null implementations of 
-#  functions aded to the grf interface after AST V3.2. 
-         -grf_v3.2)
-            grf='v3.2'
-            shift;;
-
-#  -pgp - Requests 2D graphical output through Starlink PGPLOT.
-         -pgp)
-            grf='pgp'
-            shift;;
-
-#  -pgplot - Requests 2D graphical output through native PGPLOT.
-         -pgplot)
-            grf='pgplot'
-            shift;;
-
-#  -grf3d - Requests no 3D graphics.
-         -grf3d)
-            grf3d='current'
-            shift;;
-
-#  -pgp3d - Requests 3D graphical output through Starlink PGPLOT.
-         -pgp3d)
-            grf3d='pgp'
-            shift;;
-
-#  -pgplot3d - Requests 3D graphical output through native PGPLOT.
-         -pgplot3d)
-            grf3d='pgplot'
-            shift;;
-
-#  Once all switches have been read, continue with the rest of the script.
-         '') break;;
-
-#  Catch unrecognised switches and report an error.
-         *)
-            echo >&2 "ast_link_adam: unknown argument \""${1}"\" given"
-            exit 1;;
-         esac
-      done
-
-#  Link with the main AST library.
-#  -------------------------------
-#  Start forming the list of arguments with the main AST library itself and
-#  the "wcslib" module.
-      args='-last -last_wcslib'
-
-#  Generate arguments for linking SLALIB.
-#  --------------------------------------
-      case "${sla}" in
-
-#  The full proprietary C version of SLALIB has no link script, so simply 
-#  specify the library itself.
-      c) args="${args} -lsla";;
-
-#  For Fortran, link with the AST SLALIB interface and the Fortran library via
-#  the SLALIB link script (if found).
-      f) args="${args} -last_slalib `sla_link_adam`";;
-
-#  Otherwise, link with the internal GPLed cut down C version of SLALIB.
-      *) args="${args} -last_pal";;
-      esac
-
-#  Generate arguments for linking the 2D graphics system.
-#  ------------------------------------------------------
-      case "${grf}" in
-
-#  If using Starlink PGPLOT, link with the AST PGPLOT interface and
-#  the Fortran library via the PGP link script.
-      pgp) args="${args} -last_pgplot `pgp_link_adam`";;
-
-#  If using native PGPLOT, link with the AST PGPLOT interface and
-#  the Fortran library via the PGPLOT link script.
-      pgplot) args="${args} -last_pgplot `pgplot_link_adam`";;
-
-#  If using own graphics which conform to the requirements of the current 
-#  version of AST, do not produce any arguments.
-      current) :;;
-
-#  If using own graphics which conform to the requirements of version 3.2 
-#  of AST, produce arguments which link in dummy implementations of any 
-#  functions which are required by the current version of AST but which were 
-#  not required by version 3.2.
-      v3.2) :;;
-
-#  If using own graphics which conform to the requirements of version 2.0
-#  of AST, produce arguments which link in dummy implementations of any 
-#  functions which are required by the current version of AST but which were 
-#  not required by version 2.0.
-      v2.0) args="${args} -last_grf_3.2";;
-
-#  Default graphics (none) requires linking with all the default (null) AST 
-#  "grf" modules.
-      *) args="${args} -last_grf_2.0 -last_grf_3.2";;
-      esac
-
-#  Generate arguments for linking the 3D graphics system.
-#  ------------------------------------------------------
-      case "${grf3d}" in
-
-#  If using Starlink PGPLOT, link with the AST 3D PGPLOT interface and
-#  the Fortran library via the PGP link script (if found).
-      pgp) args="${args} -last_pgplot3d `\`find pgp_link\``"
-           f77='y';;
-
-#  If using native PGPLOT, link with the AST 3D PGPLOT interface and the
-#  Fortran library via the PGPLOT link script (if found).
-      pgplot) args="${args} -last_pgplot3d `\`find pgplot_link\``"
-              f77='y';;
-
-#  If using own 3D graphics which conform to the requirements of the current 
-#  version of AST, do not produce any arguments.
-      current) :;;
-
-#  Default graphics (none) requires linking with all the default (null) AST 
-#  "grf3d" modules.
-      *) args="${args} -last_grf3d";;
-      esac
-
-#  Make a second pass through the AST library.
-#  -------------------------------------------
-#  This library is a link to the main AST library and results in a second
-#  pass to resolve any backward references generated by the other modules
-#  used above. A different library name must be used to avoid the two passes
-#  being merged into one (either below, or by other link scripts).
-      args="${args} -last_pass2"
-
-#  Generate arguments for linking the error reporting system.
-#  ----------------------------------------------------------
-      case "${err}" in
-
-#  If using own error reporting, do not produce any arguments.
-      my) :;;
-
-#  Default error reporting requires linking with the AST EMS interface and
-#  the EMS library via the link script.
-      *) args="${args} -last_ems `ems_link_adam`";;
-      esac
-
-#  Link with the maths library.
-#  ----------------------------
-      args="${args} -lm"
-
-#  Link with the starmem library, if available.
-#  --------------------------------------------
-      args="${args} `\`find starmem_link\``"
-
-#  Pass the resulting argument list through an awk script which eliminates
-#  all except the last reference to each library.
-      echo "${args}" \
-           | awk 'BEGIN{RS=" ";FS="\n"}
-                  {if($1)f[i++]=$1}
-                  END{for(;i--;)if(!w[f[i]]++)l=f[i]" "l;print l}'
-
-#  End of script.
diff --git a/ast-5.3-1/ast_par.source b/ast-5.3-1/ast_par.source
deleted file mode 100644
index 43ec25c..0000000
--- a/ast-5.3-1/ast_par.source
+++ /dev/null
@@ -1,627 +0,0 @@
-*+
-*  Name:
-*     AST_PAR
-
-*  Purpose:
-*     Define the Fortran 77 interface to the AST library.
-
-*  Language:
-*     Fortran 77
-
-*  Type of Module:
-*     Include file.
-
-*  Description:
-*     This file contains definitions which are required by Fortran 77
-*     programs which use the AST library.
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (STARLINK)
-*     MBT: Mark Taylor (STARLINK)
-*     DSB: David S. Berry
-
-*  History:
-*     12-NOV-1996 (RFWS):
-*        Original version.
-*     18-MAR-1998 (RFWS):
-*        Added definitions for the IntraMap class.
-*     21-DEC-1998 (RFWS):
-*        Added resampling definitions for the Mapping class.
-*     15-NOV-1999 (RFWS):
-*        Added definitions for PcdMap.
-*     24-NOV-2000 (MBT):
-*        Added AST__BLOCKAVE interpolation scheme.
-*     22-JUN-2001 (DSB):
-*        Added AST_OFFSET2 and AST_ANGLE to Frame class.
-*     6-SEP-2001 (DSB):
-*        Added AST_AXDISTANCE and AST_AXOFFSET to Frame class.
-*     12-SEP-2001 (DSB):
-*        Added AST_BEAR to Frame class.
-*     21-SEP-2001 (DSB):
-*        Replaced AST_BEAR by AST_AXANGLE.
-*     28-JAN-2003 (DSB):
-*        Added AST_GETACTIVEUNIT.
-*     14-FEB-2003 (DSB):
-*        Added new values for WcsMap projections.
-*     30-APR-2003 (DSB):
-*        Added AST_VERSION.
-*     15-JUL-2003 (DSB):
-*        Added AST_RATE, POLYMAP, SHIFTMAP and GRISMMAP functions.
-*     13-NOV-2003 (DSB):
-*        Added XmlChan class.
-*     9-NOV-2004 (DSB):
-*        Added all initial Region classes.
-*     19-NOV-2004 (DSB):
-*        Added KeyMap.
-*     16-JUN-2005 (DSB):
-*        Added TimeMap and TimeFrame.
-*     1-SEP-2005 (DSB):
-*        Added AST__REBININIT and AST__REBINNORM.
-*     17-FEB-2006 (DSB):
-*        Added AST_ESCAPES.
-*     9-FEB-2007 (DSB):
-*        Use a double precision constant to initialise AST__UNDEFF.
-*     4-DEC-2008 (TIMJ):
-*        Add AST_TESTFITS. Remove AST__UNDEF<X>
-*     6-FEB-2009 (DSB):
-*        Added StcsChan class.
-*-
-
-*  Length of character string returned by a character function.
-      INTEGER AST__SZCHR
-      PARAMETER ( AST__SZCHR = 200 )
-
-*  Bad coordinate value.
-      DOUBLE PRECISION AST__BAD
-      PARAMETER ( AST__BAD = <AST__BAD> )
-
-*  Error module.
-      LOGICAL AST_OK
-      INTEGER AST_STATUS
-
-*  Object class.
-      EXTERNAL AST_NULL
-      INTEGER AST__NULL
-      PARAMETER ( AST__NULL = 0 )
-
-      INTEGER AST__TUNULL
-      PARAMETER ( AST__TUNULL = -99999 )
-
-      CHARACTER * ( AST__SZCHR ) AST_GETC
-      DOUBLE PRECISION AST_GETD
-      INTEGER AST_CLONE
-      INTEGER AST_COPY
-      LOGICAL AST_EQUAL
-      INTEGER AST_GETI
-      INTEGER AST_VERSION
-      LOGICAL AST_GETL
-      LOGICAL AST_ISAOBJECT
-      LOGICAL AST_TEST
-      LOGICAL AST_SAME
-      INTEGER AST_TUNE
-      REAL AST_GETR
-      LOGICAL AST_CHRSUB
-
-*  Channel class.
-      INTEGER AST_CHANNEL
-      INTEGER AST_READ
-      INTEGER AST_WRITE
-      LOGICAL AST_ISACHANNEL
-      INTEGER AST_WARNINGS
-
-*  FitsChan class.
-      INTEGER AST_FITSCHAN
-      LOGICAL AST_FINDFITS
-      LOGICAL AST_ISAFITSCHAN
-      LOGICAL AST_GETFITSCF      
-      LOGICAL AST_GETFITSCI
-      LOGICAL AST_GETFITSF      
-      LOGICAL AST_GETFITSI
-      LOGICAL AST_GETFITSL
-      LOGICAL AST_GETFITSS
-      LOGICAL AST_GETFITSCN
-      LOGICAL AST_TESTFITS
-
-*  Mapping Class.
-      INTEGER AST__URESAMP1
-      PARAMETER ( AST__URESAMP1 = 1 )
-      INTEGER AST__URESAMP2
-      PARAMETER ( AST__URESAMP2 = 2 )
-      INTEGER AST__URESAMP3
-      PARAMETER ( AST__URESAMP3 = 4 )
-      INTEGER AST__URESAMP4
-      PARAMETER ( AST__URESAMP4 = 8 )
-      INTEGER AST__USEVAR
-      PARAMETER ( AST__USEVAR = 16 )
-      INTEGER AST__USEBAD
-      PARAMETER ( AST__USEBAD = 32 )
-      INTEGER AST__CONSERVEFLUX
-      PARAMETER ( AST__CONSERVEFLUX = 64 )
-      INTEGER AST__REBININIT
-      PARAMETER ( AST__REBININIT = 128 )
-      INTEGER AST__REBINEND
-      PARAMETER ( AST__REBINEND = 256 )
-      INTEGER AST__GENVAR
-      PARAMETER ( AST__GENVAR = 512 )
-      INTEGER AST__VARWGT
-      PARAMETER ( AST__VARWGT = 1024 )
-
-      INTEGER AST__UKERN1
-      PARAMETER ( AST__UKERN1 = 1 )
-c  Not yet implemented
-c      INTEGER AST__UKERNN
-c      PARAMETER ( AST__UKERNN = 2 )
-      INTEGER AST__UINTERP
-      PARAMETER ( AST__UINTERP = 3 )
-      INTEGER AST__NEAREST
-      PARAMETER ( AST__NEAREST = 4 )
-      INTEGER AST__LINEAR
-      PARAMETER ( AST__LINEAR = 5 )
-      INTEGER AST__SINC
-      PARAMETER ( AST__SINC = 6 )
-      INTEGER AST__SINCSINC
-      PARAMETER ( AST__SINCSINC = 7 )
-      INTEGER AST__SINCCOS
-      PARAMETER ( AST__SINCCOS = 8 )
-      INTEGER AST__SINCGAUSS
-      PARAMETER ( AST__SINCGAUSS = 9 )
-      INTEGER AST__BLOCKAVE
-      PARAMETER ( AST__BLOCKAVE = 10 )
-      INTEGER AST__GAUSS
-      PARAMETER ( AST__GAUSS = 11 )
-      INTEGER AST__SOMB
-      PARAMETER ( AST__SOMB = 12 )
-      INTEGER AST__SOMBCOS
-      PARAMETER ( AST__SOMBCOS = 13 )
-
-      INTEGER AST_RESAMPLEB
-      INTEGER AST_RESAMPLED
-      INTEGER AST_RESAMPLEI
-      INTEGER AST_RESAMPLER
-      INTEGER AST_RESAMPLES
-      INTEGER AST_RESAMPLEUB
-      INTEGER AST_RESAMPLEUI
-      INTEGER AST_RESAMPLEUS
-      INTEGER AST_RESAMPLEUW
-      INTEGER AST_RESAMPLEW
-      INTEGER AST_REMOVEREGIONS
-      INTEGER AST_SIMPLIFY
-      LOGICAL AST_ISAMAPPING
-      LOGICAL AST_LINEARAPPROX
-      DOUBLE PRECISION AST_RATE
-
-*  CmpMap class.
-      INTEGER AST_CMPMAP
-      LOGICAL AST_ISACMPMAP
-
-*  Frame class.
-      CHARACTER * ( AST__SZCHR ) AST_FORMAT
-      DOUBLE PRECISION AST_DISTANCE
-      INTEGER AST_CONVERT
-      INTEGER AST_FINDFRAME
-      INTEGER AST_FRAME
-      INTEGER AST_PICKAXES
-      INTEGER AST_UNFORMAT
-      LOGICAL AST_ISAFRAME
-      LOGICAL AST_GETACTIVEUNIT
-      DOUBLE PRECISION AST_ANGLE
-      DOUBLE PRECISION AST_OFFSET2
-      DOUBLE PRECISION AST_AXDISTANCE
-      DOUBLE PRECISION AST_AXOFFSET
-      DOUBLE PRECISION AST_AXANGLE
-
-*  CmpFrame class.
-      INTEGER AST_CMPFRAME
-      LOGICAL AST_ISACMPFRAME
-
-*  FrameSet class.
-      INTEGER AST__BASE
-      PARAMETER ( AST__BASE = 0 )
-      INTEGER AST__CURRENT
-      PARAMETER ( AST__CURRENT = -1 )
-      INTEGER AST__NOFRAME
-      PARAMETER ( AST__NOFRAME = -99 )
-
-      INTEGER AST_FRAMESET
-      INTEGER AST_GETFRAME
-      INTEGER AST_GETMAPPING
-      LOGICAL AST_ISAFRAMESET
-
-*  IntraMap class.
-      INTEGER AST__NOFWD
-      PARAMETER ( AST__NOFWD = 1 )
-      INTEGER AST__NOINV
-      PARAMETER ( AST__NOINV = 2 )
-      INTEGER AST__SIMPFI
-      PARAMETER ( AST__SIMPFI = 4 )
-      INTEGER AST__SIMPIF
-      PARAMETER ( AST__SIMPIF = 8 )
-      INTEGER AST__ANY
-      PARAMETER ( AST__ANY = -66 )
-
-      INTEGER AST_INTRAMAP
-      LOGICAL AST_ISAINTRAMAP
-
-*  LutMap class.
-      INTEGER AST_LUTMAP
-      LOGICAL AST_ISALUTMAP
-
-*  PcdMap class.
-      INTEGER AST_PCDMAP
-      LOGICAL AST_ISAPCDMAP
-
-*  Plot class.
-      INTEGER AST_PLOT
-      LOGICAL AST_BORDER
-      INTEGER AST_GETGRFCONTEXT
-      LOGICAL AST_ISAPLOT
-      INTEGER AST_ESCAPES
-      CHARACTER * ( AST__SZCHR ) AST_STRIPESCAPES
-
-*  SkyFrame class.
-      INTEGER AST_SKYFRAME
-      LOGICAL AST_ISASKYFRAME
-
-*  SpecFrame class.
-      INTEGER AST_SPECFRAME
-      LOGICAL AST_ISASPECFRAME
-
-*  DSBSpecFrame class.
-      INTEGER AST_DSBSPECFRAME
-      LOGICAL AST_ISADSBSPECFRAME
-
-*  MathMap class.
-      INTEGER AST_MATHMAP
-      LOGICAL AST_ISAMATHMAP
-
-*  MatrixMap class.
-      INTEGER AST_MATRIXMAP
-      LOGICAL AST_ISAMATRIXMAP
-
-*  PermMap class.
-      INTEGER AST_PERMMAP
-      LOGICAL AST_ISAPERMMAP
-
-*  PolyMap class.
-      INTEGER AST_POLYMAP
-      LOGICAL AST_ISAPOLYMAP
-
-*  SlaMap class.
-      INTEGER AST_SLAMAP
-      LOGICAL AST_ISASLAMAP
-
-*  SpecMap class.
-      INTEGER AST_SPECMAP
-      LOGICAL AST_ISASPECMAP
-
-*  SphMap class.
-      INTEGER AST_SPHMAP
-      LOGICAL AST_ISASPHMAP
-
-*  UnitMap class.
-      INTEGER AST_UNITMAP
-      LOGICAL AST_ISAUNITMAP
-
-*  WcsMap class.
-
-      INTEGER AST__WCSMX
-      PARAMETER ( AST__WCSMX = 10 )
-
-      DOUBLE PRECISION AST__DPI
-      PARAMETER ( AST__DPI = 3.1415926535897932384626433832795028842 )
-
-      DOUBLE PRECISION AST__DPIBY2
-      PARAMETER ( AST__DPIBY2 = 1.570796326794896619231321691639751442 )
-
-      DOUBLE PRECISION AST__DD2R
-      PARAMETER ( AST__DD2R = 0.01745329251994329576923690768488612713 )
-
-      DOUBLE PRECISION AST__DR2D
-      PARAMETER ( AST__DR2D = 57.2957795130823208767981548141051703324 )
-
-      INTEGER AST__AIR
-      PARAMETER ( AST__AIR = 9 )
-      INTEGER AST__AIT
-      PARAMETER ( AST__AIT = 17 )
-      INTEGER AST__ARC
-      PARAMETER ( AST__ARC = 6 )
-      INTEGER AST__AZP
-      PARAMETER ( AST__AZP = 1 )
-      INTEGER AST__BON
-      PARAMETER ( AST__BON = 22 )
-      INTEGER AST__CAR
-      PARAMETER ( AST__CAR = 12 )
-      INTEGER AST__CEA
-      PARAMETER ( AST__CEA = 11 )
-      INTEGER AST__COD
-      PARAMETER ( AST__COD = 20 )
-      INTEGER AST__COE
-      PARAMETER ( AST__COE = 19 )
-      INTEGER AST__COO
-      PARAMETER ( AST__COO = 21 )
-      INTEGER AST__COP
-      PARAMETER ( AST__COP = 18 )
-      INTEGER AST__CSC
-      PARAMETER ( AST__CSC = 25 )
-      INTEGER AST__CYP
-      PARAMETER ( AST__CYP = 10 )
-      INTEGER AST__GLS
-      PARAMETER ( AST__GLS = 28 )
-      INTEGER AST__MER
-      PARAMETER ( AST__MER = 13 )
-      INTEGER AST__MOL
-      PARAMETER ( AST__MOL = 16 )
-      INTEGER AST__NCP
-      PARAMETER ( AST__NCP = 27 )
-      INTEGER AST__PAR
-      PARAMETER ( AST__PAR = 15 )
-      INTEGER AST__PCO
-      PARAMETER ( AST__PCO = 23 )
-      INTEGER AST__QSC
-      PARAMETER ( AST__QSC = 26 )
-      INTEGER AST__SFL
-      PARAMETER ( AST__SFL = 14 )
-      INTEGER AST__SIN
-      PARAMETER ( AST__SIN = 5 )
-      INTEGER AST__STG
-      PARAMETER ( AST__STG = 4 )
-      INTEGER AST__SZP
-      PARAMETER ( AST__SZP = 2 )
-      INTEGER AST__TAN
-      PARAMETER ( AST__TAN = 3 )
-      INTEGER AST__TPN
-      PARAMETER ( AST__TPN = 29 )
-      INTEGER AST__TSC
-      PARAMETER ( AST__TSC = 24 )
-      INTEGER AST__ZEA
-      PARAMETER ( AST__ZEA = 8 )
-      INTEGER AST__ZPN
-      PARAMETER ( AST__ZPN = 7 )
-      INTEGER AST__WCSBAD 
-      PARAMETER ( AST__WCSBAD = 30 )
-
-      INTEGER AST_WCSMAP
-      LOGICAL AST_ISAWCSMAP
-
-*  ShiftMap class.
-      INTEGER AST_SHIFTMAP
-      LOGICAL AST_ISASHIFTMAP
-
-*  WinMap class.
-      INTEGER AST_WINMAP
-      LOGICAL AST_ISAWINMAP
-
-*  ZoomMap class.
-      INTEGER AST_ZOOMMAP
-      LOGICAL AST_ISAZOOMMAP
-
-*  GrismMap class.
-      INTEGER AST_GRISMMAP
-      LOGICAL AST_ISAGRISMMAP
-
-*  XmlChan class.
-      INTEGER AST_XMLCHAN
-      LOGICAL AST_ISAXMLCHAN
-
-*  TranMap class.
-      INTEGER AST_TRANMAP
-      LOGICAL AST_ISATRANMAP
-
-*  Region class.
-      INTEGER AST_REGION
-      INTEGER AST_GETUNC
-      INTEGER AST_GETREGIONFRAME
-      LOGICAL AST_ISAREGION
-      INTEGER AST_MAPREGION
-      INTEGER AST_OVERLAP
-      INTEGER AST_MASKB
-      INTEGER AST_MASKD
-      INTEGER AST_MASKI
-      INTEGER AST_MASKR
-      INTEGER AST_MASKS
-      INTEGER AST_MASKUB
-      INTEGER AST_MASKUI
-      INTEGER AST_MASKUS
-      INTEGER AST_MASKUW
-      INTEGER AST_MASKW
-
-*  Box class.
-      INTEGER AST_BOX
-      LOGICAL AST_ISABOX
-
-*  PointList class.
-      INTEGER AST_POINTLIST
-      LOGICAL AST_ISAPOINTLIST
-
-*  Polygon class.
-      INTEGER AST_POLYGON
-      LOGICAL AST_ISAPOLYGON
-      INTEGER AST_DOWNSIZE
-      INTEGER AST_OUTLINED
-      INTEGER AST_OUTLINER
-      INTEGER AST_OUTLINEI
-      INTEGER AST_OUTLINEUI
-      INTEGER AST_OUTLINES
-      INTEGER AST_OUTLINEUS
-      INTEGER AST_OUTLINEW
-      INTEGER AST_OUTLINEUW
-      INTEGER AST_OUTLINEB
-      INTEGER AST_OUTLINEUB
-
-      INTEGER AST__LE
-      PARAMETER( AST__LE = 2 )
-
-      INTEGER AST__EQ
-      PARAMETER( AST__EQ = 3 )
-
-      INTEGER AST__GE
-      PARAMETER( AST__GE = 4 )
-
-      INTEGER AST__GT
-      PARAMETER( AST__GT = 5 )
-
-      INTEGER AST__NE
-      PARAMETER( AST__NE = 6 )
-
-*  Circle class.
-      INTEGER AST_CIRCLE
-      LOGICAL AST_ISACIRCLE
-
-*  Ellipse class.
-      INTEGER AST_ELLIPSE
-      LOGICAL AST_ISAELLIPSE
-
-*  NullRegion class.
-      INTEGER AST_NULLREGION
-      LOGICAL AST_ISANULLREGION
-
-*  Interval class.
-      INTEGER AST_INTERVAL
-      LOGICAL AST_ISAINTERVAL
-
-*  Prism class.
-      INTEGER AST_PRISM
-      LOGICAL AST_ISAPRISM
-
-*  CmpRegion class.
-      INTEGER AST_CMPREGION
-      LOGICAL AST_ISACMPREGION
-
-      INTEGER AST__AND
-      PARAMETER( AST__AND = 1 )
-
-      INTEGER AST__OR
-      PARAMETER( AST__OR = 2 )
-
-      INTEGER AST__XOR
-      PARAMETER( AST__XOR = 3 )
-
-*  KeyMap class.
-      INTEGER AST_KEYMAP
-      LOGICAL AST_ISAKEYMAP
-      LOGICAL AST_MAPGET0I
-      LOGICAL AST_MAPGET0D
-      LOGICAL AST_MAPGET0R
-      LOGICAL AST_MAPGET0C
-      LOGICAL AST_MAPGET0A
-      LOGICAL AST_MAPGET1I
-      LOGICAL AST_MAPGET1D
-      LOGICAL AST_MAPGET1R
-      LOGICAL AST_MAPGET1C
-      LOGICAL AST_MAPGET1A
-      LOGICAL AST_MAPGETELEMI
-      LOGICAL AST_MAPGETELEMD
-      LOGICAL AST_MAPGETELEMR
-      LOGICAL AST_MAPGETELEMC
-      LOGICAL AST_MAPGETELEMA
-      INTEGER AST_MAPSIZE
-      INTEGER AST_MAPLENGTH
-      INTEGER AST_MAPLENC
-      INTEGER AST_MAPTYPE
-      LOGICAL AST_MAPHASKEY
-      CHARACTER * ( AST__SZCHR ) AST_MAPKEY
-
-      INTEGER AST__BADTYPE
-      PARAMETER ( AST__BADTYPE = 0)
-
-      INTEGER AST__INTTYPE
-      PARAMETER ( AST__INTTYPE = 1)
-
-      INTEGER AST__DOUBLETYPE
-      PARAMETER ( AST__DOUBLETYPE = 2)
-
-      INTEGER AST__STRINGTYPE
-      PARAMETER ( AST__STRINGTYPE = 3)
-
-      INTEGER AST__OBJECTTYPE
-      PARAMETER ( AST__OBJECTTYPE = 4)
-
-      INTEGER AST__FLOATTYPE
-      PARAMETER ( AST__FLOATTYPE = 5)
-
-*  FluxFrame class.
-      INTEGER AST_FLUXFRAME
-      LOGICAL AST_ISAFLUXFRAME
-
-*  SpecFluxFrame class.
-      INTEGER AST_SPECFLUXFRAME
-      LOGICAL AST_ISASPECFLUXFRAME
-
-*  NormMap class.
-      INTEGER AST_NORMMAP
-      LOGICAL AST_ISANORMMAP
-
-*  RateMap class.
-      INTEGER AST_RATEMAP
-      LOGICAL AST_ISARATEMAP
-
-*  TimeFrame class.
-      INTEGER AST_TIMEFRAME
-      LOGICAL AST_ISATIMEFRAME
-      DOUBLE PRECISION AST_CURRENTTIME
-
-      INTEGER AST__LT
-      PARAMETER( AST__LT = 11 )
-
-*  TimeMap class.
-      INTEGER AST_TIMEMAP
-      LOGICAL AST_ISATIMEMAP
-
-*  Stc class.
-      LOGICAL AST_ISASTC
-      INTEGER AST_GETSTCREGION
-      INTEGER AST_GETSTCCOORD
-      INTEGER AST_GETSTCNCOORD
-
-      CHARACTER AST__STCNAME*4
-      PARAMETER ( AST__STCNAME  = 'Name' )
-
-      CHARACTER AST__STCVALUE*5
-      PARAMETER ( AST__STCVALUE = 'Value' )
-
-      CHARACTER AST__STCERROR*5
-      PARAMETER ( AST__STCERROR = 'Error' )
-
-      CHARACTER AST__STCRES*10
-      PARAMETER ( AST__STCRES   = 'Resolution' )
-
-      CHARACTER AST__STCSIZE*4
-      PARAMETER ( AST__STCSIZE  = 'Size' )
-
-      CHARACTER AST__STCPIXSZ*7
-      PARAMETER ( AST__STCPIXSZ = 'PixSize' )
-
-*  StcSearchLocation class.
-      LOGICAL AST_ISASTCSEARCHLOCATION
-      INTEGER AST_STCSEARCHLOCATION
-
-*  StcCatalogEntryLocation class.
-      LOGICAL AST_ISASTCCATALOGENTRYLOCATION
-      INTEGER AST_STCCATALOGENTRYLOCATION
-
-*  StcResourceProfile class.
-      LOGICAL AST_ISASTCRESOURCEPROFILE
-      INTEGER AST_STCRESOURCEPROFILE
-
-*  StcObsDataLocation class.
-      LOGICAL AST_ISASTCOBSDATALOCATION
-      INTEGER AST_STCOBSDATALOCATION
-
-*  SwitchMap class.
-      INTEGER AST_SWITCHMAP
-      LOGICAL AST_ISASWITCHMAP
-
-*  SelectorMap class.
-      INTEGER AST_SELECTORMAP
-      LOGICAL AST_ISASELECTORMAP
-
-*  Plot3D class.
-      INTEGER AST_PLOT3D
-      LOGICAL AST_ISAPLOT3D
-
-*  StcsChan class.
-      INTEGER AST_STCSCHAN
-      LOGICAL AST_ISASTCSCHAN
-
-
-
diff --git a/ast-5.3-1/ast_test.c b/ast-5.3-1/ast_test.c
deleted file mode 100644
index 1a39f65..0000000
--- a/ast-5.3-1/ast_test.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "ast.h"                 /* AST C interface definition */
-
-/* C header files. */
-/* --------------- */
-#include <stdio.h>
-
-/* Main function. */
-/* ============== */
-int main( int argc, char *argv[] ) {
-/*
-*+
-*  Name:
-*     ast_test
-
-*  Purpose:
-*     Test installation of the AST library.
-
-*  Type:
-*     C program.
-
-*  Description:
-*     This program performs a simple test (without using graphics) of
-*     the AST library, to check that it is correctly installed. It is
-*     not an exhaustive test of the system.
-
-*  Arguments:
-*     None.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     19-NOV-1997 (RFWS);
-*        Original version.
-*-
-*/
-
-/* Local Constants: */
-#define NCOORD 10                /* Number of coordinates to transform */
-
-/* Local Variables: */
-   AstFrameSet *cvt;             /* Pointer to conversion FrameSet */
-   AstSkyFrame *sky1;            /* Pointer to first SkyFrame */
-   AstSkyFrame *sky2;            /* Pointer to second SkyFrame */
-   double xin[ NCOORD ];         /* Input coordinate array */
-   double xout[ NCOORD ];        /* Output coordinate array */
-   double yin[ NCOORD ];         /* Input coordinate array */
-   double yout[ NCOORD ];        /* Output coordinate array */
-   int i;                        /* Loop counter for coordinates */
-
-/* Begin an AST context. */
-   astBegin;
-
-/* Create two SkyFrames. */
-   sky1 = astSkyFrame( "system = FK4_NO_E, equinox = B1920, epoch = B1958" );
-   sky2 = astSkyFrame( "system = ecliptic, equinox = J2001" );
-
-/* Create a FrameSet describing the conversion between them. */
-   cvt = astConvert( sky1, sky2, "" );
-
-/* If successful, set up some input coordinates. */
-   if ( cvt != AST__NULL ) {
-      for ( i = 0; i < NCOORD; i++ ) {
-         xin[ i ] = 0.1 * (double) i;
-         yin[ i ] = 0.2 * (double) i;
-      }
-
-/* Display the FrameSet. */
-      astShow( cvt );
-      printf( "\n");
-
-/* Activate reporting of coordinate transformations. */
-      astSet( cvt, "Report = 1" );
-
-/* Perform the forward transformation. */
-      astTran2( cvt, 10, xin, yin, 1, xout, yout );
-      printf( "\n");
-
-/* Perform the inverse transformation. */
-      astTran2( cvt, 10, xout, yout, 0, xin, yin );
-   }
-
-/* End the AST context. */
-   astEnd;
-
-/* Return an error status. */
-   return astOK ? 0 : 1;
-
-/* Undefine local macros. */
-#undef NCOORD
-}
diff --git a/ast-5.3-1/astbad.c b/ast-5.3-1/astbad.c
deleted file mode 100644
index 7e66d19..0000000
--- a/ast-5.3-1/astbad.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pointset.h"           /* declaration of AST__BAD */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <stdio.h>
-
-/* Main function. */
-/* ============== */
-int main( void ) {
-/*
-*+
-*  Name:
-*     astbad
-
-*  Purpose:
-*     Generate a string representing the AST__BAD value.
-
-*  Type:
-*     C program.
-
-*  Description:
-*     This program writes a string to standard output containing a
-*     formatted decimal representation of the C double value
-*     AST__BAD. This is intended for use in defining the AST__BAD
-*     constant for use from languages other than C.
-*
-*     The value written should contain sufficient decimal digits so
-*     that a routine that uses it to generate a value in another
-*     language will produce exactly the same value as a C program
-*     using the AST__BAD macro.
-
-*  Arguments:
-*     None.
-
-*  Copyright:
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-*     TIMJ: Tim Jenness (JAC, Hawaii)
-
-*  History:
-*     18-NOV-1997 (RFWS);
-*        Original version.
-*     24-OCT-2000 (DSB):
-*        Ensure that the number of digits used is at least the minimum
-*        required by IEEE for a conversion from binary to string and back 
-*        to binary to be an identity. 
-*     31-MAR-2009 (TIMJ):
-*        Does not take any arguments so don't try to read arguments.
-*-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN ( 2 * DBL_DIG + 20 ) /* Buffer length */
-#define IEEE_DIG 17                   /* Minimum number of digits required by 
-                                         IEEE for conversion from binary to 
-                                         string and back again to be an
-                                         identity. */
-
-/* Local Variables: */
-   char buff[ BUFF_LEN + 1 ];    /* Buffer for formatted string */
-   double ast__bad;              /* Value read back from string */
-   int digits;                   /* Number of digits of precision */
-
-/* Vary the precision over a reasonable range to see how many decimal
-   digits are required. The initial number of digits is the larger of
-   DBL_DIG and IEEE_DIG. */
-   for ( digits = ( DBL_DIG > IEEE_DIG )?DBL_DIG:IEEE_DIG; 
-         digits <= ( 2 * DBL_DIG ); digits++ ) {
-
-/* Format the AST__BAD value using this precision and then read it
-   back. */
-      (void) sprintf( buff, "%.*G", digits, AST__BAD );
-      (void) sscanf( buff, "%lg", &ast__bad );
-
-/* Quit looping when the original value is read back. */
-      if ( ast__bad == AST__BAD ) break;
-   }
-
-/* Write the AST__BAD value to standard output, with one extra digit
-   for good measure. */
-   (void) printf( "%.*G\n", digits + 1, AST__BAD );
-
-/* Exit. */
-   return 0;
-}
diff --git a/ast-5.3-1/axis.c b/ast-5.3-1/axis.c
deleted file mode 100644
index e844dad..0000000
--- a/ast-5.3-1/axis.c
+++ /dev/null
@@ -1,3256 +0,0 @@
-/*
-*class++
-*  Name:
-*     Axis
-
-*  Purpose:
-*     Store axis information.
-
-*  Constructor Function:
-*     None.
-
-*  Description:
-*     The Axis class is used to store information associated with a
-*     particular axis of a Frame. It is used internally by the AST
-*     library and has no constructor function. You should encounter it
-c     only within textual output (e.g. from astWrite).
-f     only within textual output (e.g. from AST_WRITE).
-
-*  Inheritance:
-*     The Axis class inherits from the Object class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: B.S. Berry (Starlink)
-
-*  History:
-*     1-MAR-1996 (RFWS):
-*        Original version.
-*     10-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     11-SEP-1996 (RFWS):
-*        Added astAxisGap (written by DSB).
-*     25-FEB-1998 (RFWS):
-*        Added astAxisUnformat.
-*     29-AUG-2001 (DSB):
-*        Added AxisDistance and AxisOffset.
-*     20-OCT-2002 (DSB):
-*        Added Top and Bottom attributes.
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitAxisVtab
-*        method.
-*        - Include descriptive label for units string within a Dump.
-*     24-JAN-2004 (DSB):
-*        - Added astAxisFields.
-*        - Added argument "fmt" to definition of AxisAbbrev.
-*     3-FEB-2004 (DSB):
-*        - Added "log" formatting using the "&" flag character in the
-*        Format string.  
-*     15-SEP-2004 (DSB):
-*        - If a format string is set which includes a wildcard precision
-*        value (".*"), then use the Digits value to determine the precision 
-*        to be used.
-*        - If the conversion code is of integer type (e.g. "%d") cast value 
-*        to integer before printing. 
-*     2-FEB-2005 (DSB):
-*        - Avoid using astStore to allocate more storage than is supplied
-*        in the "data" pointer. This can cause access violations since 
-*        astStore will then read beyond the end of the "data" area.
-*     15-MAR-2005 (DSB):
-*        - Avoid exponents in log format labels which are close to zero but 
-*        not quite zero.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     30-JUN-2006 (DSB):
-*        Guard against a null "str1" value in AxisAbbrev.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Axis
-
-
-/* Header files. */
-/* ============= */
-#include "ast_err.h"             /* Error code definitions */
-
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Object interface (parent class) */
-#include "pointset.h"            /* Sets of coordinates (for AST__BAD) */
-#include "channel.h"             /* I/O channels */
-#include "axis.h"                /* Interface definition for this class */
-#include "unit.h"                /* Definitions of physical units */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Strings used as field delimiters when producing graphical labels.
-   These strings include escape sequences which the Plot class interprets
-   to produce super-scripts, sub-scripts, etc.*/
-static const char *log_esc  = "10%-%^50+%s70+";     
-
-/* Plain text equivalents. */
-static const char *log_txt  = "10^";     
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetDefaultFormat_Buff[ 0 ] = 0; \
-   globals->AxisFormat_Buff[ 0 ] = 0; \
-   globals->GetAxisNormUnit_Buff[ 0 ] = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Axis)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Axis,Class_Init)
-#define class_vtab astGLOBAL(Axis,Class_Vtab)
-#define getdefaultformat_buff astGLOBAL(Axis,GetDefaultFormat_Buff)
-#define axisformat_buff astGLOBAL(Axis,AxisFormat_Buff)
-#define getaxisnormunit_buff astGLOBAL(Axis,GetAxisNormUnit_Buff)
-#define getattrib_buff astGLOBAL(Axis,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getdefaultformat_buff[ AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN + 1 ]; 
-static char axisformat_buff[ AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN + 1 ]; 
-static char getaxisnormunit_buff[ AST__AXIS_GETAXISNORMUNIT_BUFF_LEN + 1 ]; 
-static char getattrib_buff[ AST__AXIS_GETATTRIB_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstAxisVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstAxis *astAxisId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static const char *AxisAbbrev( AstAxis *, const char *, const char *, const char *, int * );
-static const char *AxisFormat( AstAxis *, double, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetAxisFormat( AstAxis *, int * );
-static const char *GetAxisLabel( AstAxis *, int * );
-static const char *GetAxisSymbol( AstAxis *, int * );
-static const char *GetAxisUnit( AstAxis *, int * );
-static const char *GetAxisNormUnit( AstAxis *, int * );
-static const char *GetDefaultFormat( AstAxis *, int * );
-static char *ParseAxisFormat( const char *, int, int *, int *, int *, int *, int * );
-static double AxisDistance( AstAxis *, double, double, int * );
-static double AxisGap( AstAxis *, double, int *, int * );
-static double AxisOffset( AstAxis *, double, double, int * );
-static int AxisFields( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-static int AxisIn( AstAxis *, double, double, double, int, int * );
-static int AxisUnformat( AstAxis *, const char *, double *, int * );
-static int GetAxisDigits( AstAxis *, int * );
-static int GetAxisDirection( AstAxis *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestAxisDigits( AstAxis *, int * );
-static int TestAxisDirection( AstAxis *, int * );
-static int TestAxisFormat( AstAxis *, int * );
-static int TestAxisLabel( AstAxis *, int * );
-static int TestAxisSymbol( AstAxis *, int * );
-static int TestAxisUnit( AstAxis *, int * );
-static int TestAxisNormUnit( AstAxis *, int * );
-static void AxisNorm( AstAxis *, double *, int * );
-static void AxisOverlay( AstAxis *, AstAxis *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearAxisDigits( AstAxis *, int * );
-static void ClearAxisDirection( AstAxis *, int * );
-static void ClearAxisFormat( AstAxis *, int * );
-static void ClearAxisLabel( AstAxis *, int * );
-static void ClearAxisSymbol( AstAxis *, int * );
-static void ClearAxisUnit( AstAxis *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxisDigits( AstAxis *, int, int * );
-static void SetAxisDirection( AstAxis *, int, int * );
-static void SetAxisFormat( AstAxis *, const char *, int * );
-static void SetAxisLabel( AstAxis *, const char *, int * );
-static void SetAxisSymbol( AstAxis *, const char *, int * );
-static void SetAxisUnit( AstAxis *, const char *, int * );
-
-static double GetAxisTop( AstAxis *, int * );
-static int TestAxisTop( AstAxis *, int * );
-static void ClearAxisTop( AstAxis *, int * );
-static void SetAxisTop( AstAxis *, double, int * );
-
-static double GetAxisBottom( AstAxis *, int * );
-static int TestAxisBottom( AstAxis *, int * );
-static void ClearAxisBottom( AstAxis *, int * );
-static void SetAxisBottom( AstAxis *, double, int * );
-
-
-/* Member functions. */
-/* ================= */
-static const char *AxisAbbrev( AstAxis *this, const char *fmt,
-                               const char *str1, const char *str2, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisAbbrev
-
-*  Purpose:
-*     Abbreviate a formatted Axis value by skipping leading fields.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     const char *astAxisAbbrev( AstAxis *this, const char *fmt,
-*                                const char *str1, const char *str2 )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function compares two Axis values that have been formatted
-*     (using astAxisFormat) and determines if they have any redundant
-*     leading fields (i.e. leading fields in common which can be
-*     suppressed when tabulating the values or plotting them on the
-*     axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specifier used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value. If this is null, the returned pointer
-*        points to the start of the final field in str2.
-*     str2
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - This function assumes that the format specification used was
-*     the same when both values were formatted.
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *result;           /* Result pointer to return */
-
-/* Initialise. */
-   result = str2;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* In the Axis class, there is only one field in a formatted value.
-   We return the value of "str2", unless the two strings are
-   identical, in which case we return a pointer to the final null in
-   "str2". */
-   if( str1 && !strcmp( str1, str2 ) ) result += strlen( str2 );
-
-/* Return the result. */
-   return result;
-}
-
-static double AxisDistance( AstAxis *this, double v1, double v2, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisDistance
-
-*  Purpose:
-*     Find the distance between two axis values.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     AxisDistance( AstAxis *this, double v1, double v2 )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function returns a signed value representing the axis increment 
-*     from axis value v1 to axis value v2.
-*
-*     For a simple Axis, this is a trivial operation. But for other
-*     derived classes of Axis (such as a SkyAxis) this is not the case.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     v1
-*        The first axis value
-*     v2
-*        The second axis value
-
-*  Returned Value:
-*     The axis increment from v1 to v2.
-
-*  Notes:
-*     - A value of AST__BAD is returned if either axis value is AST__BAD.
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   double result;                /* Returned gap size */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned increment. */
-   if( v1 != AST__BAD && v2 != AST__BAD ) result = v2 - v1;
-
-/* Return the result. */
-   return result;
-}
-
-static int AxisFields( AstAxis *this, const char *fmt0, const char *str, 
-                       int maxfld, char **fields, int *nc, double *val, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisFields
-
-*  Purpose:
-*     Identify numerical fields within a formatted Axis value.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     int astAxisFields( AstAxis *this, const char *fmt0, const char *str, 
-*                        int maxfld, char **fields, int *nc, double *val ) 
-
-*  Class Membership:
-*     Axis member function.
-
-*  Description:
-*     This function identifies the numerical fields within an Axis value
-*     that have been formatted using astAxisFormat. It assumes that the
-*     value was formatted using the supplied format string. It also
-*     returns the equivalent floating point value.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     fmt0
-*        Pointer to a constant null-terminated string containing the
-*        format used when creating "str".
-*     str
-*        Pointer to a constant null-terminated string containing the
-*        formatted value.
-*     maxfld
-*        The maximum number of fields to identify within "str".
-*     fields
-*        A pointer to an array of at least "maxfld" character pointers. 
-*        Each element is returned holding a pointer to the start of the 
-*        corresponding field  in "str" (in the order in which they occur 
-*        within "str"), or NULL if no corresponding field can be found. 
-*     nc
-*        A pointer to an array of at least "maxfld" integers. Each
-*        element is returned holding the number of characters in the
-*        corresponding field, or zero if no corresponding field can be
-*        found.
-*     val
-*        Pointer to a location at which to store the value
-*        equivalent to the returned field values. If this is NULL, 
-*        it is ignored.
-
-*  Returned Value:
-*     The number of fields succesfully identified and returned.
-
-*  Notes:
-*     - Leading and trailing spaces are ignored.
-*     - If the formatted value is not consistent with the supplied format
-*     string, then a value of zero will be returned, "fields" will be
-*     returned holding NULLs, "nc" will be returned holding zeros, and
-*     "val" is returned holding VAL__BAD.
-*     - Fields are counted from the start of the formatted string. If the
-*     string contains more than "maxfld" fields, then trailing fields are
-*     ignored.
-*     - If this function is invoked with the global error status set, or 
-*     if it should fail for any reason, then a value of zero will be returned 
-*     as the function value, and "fields", "nc" and "val"  will be returned 
-*     holding their supplied values
-*-
-*/
-
-/* Local Variables: */
-   const char *fmt;              /* Pointer to parsed Format string */
-   const char *log_del;          /* Pointer to delimiter string */
-   const char *p;                /* Pointer to next character */
-   double value;                 /* Equivalent radians value */
-   int ifld;                     /* Field index */
-   int integ;                    /* Cast axis value to integer before printing? */
-   int len;                      /* Length of formatted string */
-   int log;                      /* Format as "10**x"? */
-   int n;                        /* Number of characters read */
-   int neg;                      /* Negate final value? */
-   int result;                   /* Result fields count to return */
-   int sign;                     /* Include leading sign in front of "10**x"? */
-   int space;                    /* Include leading space in front of "10**x"? */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   result = 0;
-   for( ifld = 0; ifld < maxfld; ifld++ ) {
-      fields[ ifld ] = NULL;
-      nc[ ifld ] = 0;
-   }
-   if( val ) *val = AST__BAD;
-
-/* Parse the Format string. This returns a collection of flags indicating
-   if any AST specific formatting features are specified in the Format
-   string. It also returns a pointer to a new Format string which is a
-   standard C printf format specifier. Currently the only flags are "log"
-   which indicates if the value should be formatted as "10**x" using
-   the graphical escape sequences defined within the Plot class to produce 
-   "x" as a superscript of "10", "sign" which is used with log to indicate 
-   if a sign should always be included infront of the "10", and "space"
-   which indicates if a leading space should be included infronyt of "10" if
-   no sign is included. */
-   fmt = ParseAxisFormat( fmt0, astGetAxisDigits( this ), &log, &sign,
-                          &space, &integ, status );
-   fmt = astFree( (void *) fmt );
-
-   if( astOK ) {
-
-/* Obtain the length of the formatted string. */
-      len = (int) strlen( str );
-
-/* First deal with "log" format. */
-      if( log ) {
-
-/* We need room for at least 2 fields. */
-         if( maxfld > 1 ) {
-
-/* Return a pointer to the first non-blank character. */
-            p = str;
-            while( *p == ' ' ) p++;
-            fields[ 0 ] = (char *) p;
-
-/* If the first non-blank character is a minus sign, note it and skip it. */
-            neg = 0;
-            if( *p == '-' ) {
-               neg = 1;
-               p++;
-
-/* If the first non-blank character is a plus sign, and skip it. */
-            } else if( *p == '+' ) {
-               p++;
-            }
-
-/* Select the delimter.*/
-            log_del = astEscapes( -1 ) ? log_esc : log_txt;
-
-/* Check the remaining string starts with the correct delimiter. If
-   so, store the number of characters in the first field and skip over the
-   delimiter. */
-            n = 0;
-            if( strstr( p, log_del ) == p ) {
-               nc[ 0 ] = p + 2  - fields[ 0 ];
-               p += strlen( log_del );
-
-/* Attempt to read a floating point value from the start of the remaining
-   string. */
-               if( 1 == sscanf( p, "%lg%n", &value, &n ) ) {
-
-/* If succesfull, store the returned values. */
-                  result = 2;
-                  fields[ 1 ] = (char *) p;
-                  nc[ 1 ] = n;
-                  if( val ) {
-                     *val = pow( 10.0, value );
-                     if( neg ) *val = -(*val);
-                  }
-
-/* Otherwise, see if the string starts with <bad> */
-               } else if( strstr( p, "<bad>" ) == p ) {
-
-/* If succesfull, store the returned values. */
-                  result = 2;
-                  fields[ 1 ] = (char *) p;
-                  nc[ 1 ] = 5;
-                  if( val ) *val = 0.0;
-               }
-
-/* Zero is never formatted as an exponent. If the string starts with zero, 
-   return a single zero field. */
-            } else if( 1 == sscanf( p, "%lg%n", &value, &n ) ) {
-               if( value == 0.0 ) {
-                  result = 1;
-                  nc[ 0 ] = p + n  - fields[ 0 ];
-                  if( val ) *val = 0.0;
-               }
-            }
-         }
-
-/* Now deal with normal decimal format */
-      } else {
-
-/* Attempt to read a floating point value from the formatted string. */
-         if ( n = 0,
-              ( 1 == sscanf( str, "%lg %n", &value, &n ) )
-              && ( n >= len ) && maxfld > 0 ) {
-
-/* If succesful, return a pointer to the first non-blank character. */
-            p = str;
-            while( *p == ' ' ) p++;
-            fields[ 0 ] = (char *) p;
-
-/* Find the last non-blank character. */
-            p += len;
-            while( p[ -1 ] == ' ' ) p--;
-
-/* Return the number of characters in the field. */
-            nc[ 0 ] = p - fields[ 0 ];
-
-/* Return the field value. */
-            if( val ) *val = value;
-
-/* Indicate that we are returning one field. */
-            result = 1;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *AxisFormat( AstAxis *this, double value, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisFormat
-
-*  Purpose:
-*     Format a coordinate value for an Axis.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     const char *astAxisFormat( AstAxis *this, double value )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function returns a pointer to a string containing the formatted
-*     (character) version of a coordinate value for an Axis. The formatting
-*     applied is that specified by a previous invocation of the
-*     astSetAxisFormat method. A suitable default format is applied if
-*     necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     value
-*        The coordinate value to be formatted.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted value.
-
-*  Notes:
-*     -  The returned string pointer may point at memory allocated within
-*     the Axis object, or at static memory. The contents of the string may be
-*     over-written or the pointer may become invalid following a further
-*     invocation of the same function or deletion of the Axis. A copy of the
-*     string should therefore be made if necessary.
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Constants: */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   char errbuf[ ERRBUF_LEN ];   /* Buffer for system error message */
-   char *errstat;               /* Pointer for system error message */
-   const char *fmt0;            /* Pointer to original Format string */
-   const char *fmt;             /* Pointer to parsed Format string */
-   const char *result;          /* Pointer to formatted value */
-   double x;                    /* The value to be formatted by sprintf */
-   int integ;                   /* Cast axis value to integer before printing? */
-   int log;                     /* Format as "10**x"? */
-   int nc;                      /* Total number of characters written */
-   int ncc;                     /* Number of characters written */
-   int sign;                    /* Include leading sign in front of "10**x"? */
-   int space;                   /* Include leading space in front of "10**x"? */
-   int stat;                    /* Value of errno after error */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-   nc = 0;
-   x = value;
-
-/* Check if a bad coordinate value was supplied and return a pointer to an
-   appropriate string if necessary. */
-   if ( value == AST__BAD ) {
-      result = "<bad>";
-
-/* Otherwise, obtain a pointer to the Format string. Note a private member
-   function is used here in preference to an object method. This is because the
-   syntax of the Format string may be extended by derived classes and we do not
-   want to obtain a string that we cannot interpret here (where we are
-   restricted to C format specifiers capable of formatting double values).
-   Classes that extend the syntax should provide their own astAxisFormat method
-   and may need to store the string in a separate location. The original
-   location should not be re-used as the string it contains may be needed by
-   the Axis astOverlay method when overlaying attributes on to another Axis
-   object. */
-   } else {
-      fmt0 = GetAxisFormat( this, status );
-
-/* Parse the Format string. This returns a collection of flags indicating
-   if any AST specific formatting features are specified in the Format
-   string. It also returns a pointer to a new Format string which is a
-   standard C printf format specifier. Currently the only flags are "log"
-   which indicates if the value should be formatted as "10**x" using
-   the graphical escape sequences defined within the Plot class to produce 
-   "x" as a superscript of "10", "sign" which is used with log to indicate 
-   if a sign should always be included infront of the "10", and "space"
-   which indicates if a leading space should be included infronyt of "10"
-   if no sign is included. It also modifies ".*" precision fields by
-   replacing the "*" by the current vale of the Digits attribute. */
-      fmt = ParseAxisFormat( fmt0, astGetAxisDigits( this ), &log, &sign, 
-                             &space, &integ, status );
-      if( astOK ) {
-
-/* Format zero normally. */
-         if( value == 0.0 ) log = 0;
-
-/* If log format is required, find the value of the exponent "x", and
-   initialise the returned string to hold the exponent and the graphical
-   escape sequence which produces a superscript. Otherwise just format the 
-   supplied value. */
-         if( log ) {
-   
-            if( sign ) {
-               axisformat_buff[ 0 ] ='+';
-               nc = 1;
-   
-            } else if( space ) {
-               axisformat_buff[ 0 ] =' ';
-               nc = 1;
-            }
-   
-            if( value > 0 ) {
-               x = log10( integ ? (int) value : value );
-   
-            } else {
-               x = log10( integ ? (int) -value : -value );
-               axisformat_buff[ 0 ] ='-';
-               nc = 1;
-            }
-
-            nc += sprintf( axisformat_buff + nc, "%s", 
-                           astEscapes( -1 ) ? log_esc : log_txt );
-
-/* Round small exponents to zero. */
-            if( fabs( x ) < 1.0E-10 ) x = 0.0;
-         }
-      }
-
-/* Clear errno and attempt to format the value as if the Format string were
-   a standard "sprintf" format. */
-      if ( astOK ) {
-         errno = 0;
-         if( integ ) {
-            ncc = sprintf( axisformat_buff + nc, fmt, (int) x );
-         } else {
-            ncc = sprintf( axisformat_buff + nc, fmt, x );
-         }
-         nc += ncc;
-
-/* If log format is being used, terminate the string with an escape
-   sequence which resets the graphical attributes to what they were at the
-   start of the string. */
-         if( log ) nc += sprintf( axisformat_buff + nc, "%%+" );
-
-/* The possibilities for error detection are limited here, but check if an
-   error value was returned and report an error. Include information from
-   errno if it was set. */
-         if ( ncc < 0 ) {
-            stat = errno;
-            if( stat ) {
-#if HAVE_STRERROR_R
-               strerror_r( stat, errbuf, ERRBUF_LEN );
-               errstat = errbuf;
-#else
-               errstat = strerror( stat );
-#endif
-            } else {
-               *errbuf = 0;
-               errstat = errbuf;
-            }
-            astError( AST__FMTER, "astAxisFormat(%s): Error formatting a "
-                      "coordinate value of %1.*G%s%s.", status, astGetClass( this ),
-                      DBL_DIG, value, stat? " - " : "", errstat );
-            astError( AST__FMTER, "The format string was \"%s\".", status, fmt );
-
-/* Also check that the result buffer did not overflow. If it did, memory will
-   probably have been corrupted but this cannot be prevented with "sprintf".
-   Report the error and abort. */
-         } else if ( nc > AST__AXIS_AXISFORMAT_BUFF_LEN ) {
-            astError( AST__FMTER, "astAxisFormat(%s): Internal buffer "
-                      "overflow while formatting a coordinate value of %1.*G "
-                      "- result exceeds %d characters.", status, astGetClass( this ),
-                      DBL_DIG, value, AST__AXIS_AXISFORMAT_BUFF_LEN );
-            astError( AST__FMTER, "The format string was \"%s\".", status, fmt );
-
-/* If succesfull, return a pointer to the buffer. */
-         } else {
-            result = axisformat_buff;
-         }
-      }
-
-/* Free resources. */
-      fmt = astFree( (void *) fmt );
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-#undef ERRBUF_LEN
-
-static double AxisGap( AstAxis *this, double gap, int *ntick, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisGap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating Axis values.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     double astAxisGap( AstAxis *this, double gap, int *ntick )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted Axis values, the returned gap size being as
-*     close as possible to the supplied target gap size. It also
-*     returns a convenient number of divisions into which the gap can
-*     be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the supplied gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   double absgap;                /* Absolute supplied gap size */
-   double b;                     /* Decimal step size */
-   double result;                /* Returned gap size */
-   int index;                    /* Index into tables */
-   int positive;                 /* Value is positive (or zero)? */
-
-/* Local Data: */
-   static double table1[ 10 ] =  /* Table of nice decimal gaps */
-            { 1.0, 2.0, 2.0, 5.0, 5.0, 5.0, 5.0, 10.0, 10.0, 10.0 };
-   static int table2[ 10 ] =     /* Table giving number of divisions */
-            {   5,   4,   4,   5,   5,   5,   5,    5,    5,    5 };
-
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the supplied gap size is not zero. */
-   if ( gap != 0.0 ) {
-   
-/* Determine if the supplied gap size is positive and obtain its
-   absolute value. */
-      positive = ( gap >= 0.0 );
-      absgap = positive ? gap : -gap;
-
-/* Obtain a value which has a 1 at the position of the most
-   significant decimal digit in the target gap size and zeros at all
-   other positions. */
-      b = pow( 10.0, floor( log10( absgap ) ) );
-
-/* This value is the basic "step size". Find the nearest whole number
-   of steps in the supplied gap, and then use the look-up-table in
-   "table1" to find the closest acceptable gap size. Convert this gap
-   size back to an absolute value by multiplying by the step size. */
-      index = (int) ( absgap / b + 0.5 ) - 1;  
-      result = b * table1[ index ];
-
-/* If the target gap was negative, negate the result. */
-      if( !positive ) result = -result;
-
-/* Store the number of divisions in the gap. */
-      if ( ntick ) *ntick = table2[ index ];
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int AxisIn( AstAxis *this, double lo, double hi, double val, int closed, int *status ){
-/*
-*+
-*  Name:
-*     astAxisIn
-
-*  Purpose:
-*     Test if an axis value lies within a given interval.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     int AxisIn( AstAxis *this, double lo, double hi, double val, int closed )
-
-*  Class Membership:
-*     Axis member function.
-
-*  Description:
-*     This function returns non-zero if a given axis values lies within a
-*     given axis interval.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     lo
-*        The lower axis limit of the interval.
-*     hi
-*        The upper axis limit of the interval.
-*     val
-*        The axis value to be tested.
-*     closed
-*        If non-zero, then the lo and hi axis values are themselves
-*        considered to be within the interval. Otherwise they are outside.
-
-*  Returned Value:
-*     Non-zero if the test value is inside the interval. 
-
-*  Class Applicability:
-*     Axis
-*        Uses simple Euclidean test
-*     SkyAxis
-*        All angles which are numerically between "lo" and "hi" are within 
-*        the interval. Angle outside this range are also within the interval 
-*        if they can be brought into the range by addition or subtraction
-*        of a multiple of 2.PI.
-*-
-*/
-
-/* For speed, omit the astOK check since no pointers are being used. */
-   if( closed ) {
-      return ( lo <= val && val <= hi );
-   } else {
-      return ( lo < val && val < hi );
-   }
-}
-
-static void AxisNorm( AstAxis *this, double *value, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisNorm
-
-*  Purpose:
-*     Normalise an Axis coordinate value.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     void astAxisNorm( AstAxis *this, double *value )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function converts an Axis coordinate value which might
-*     potentially be unsuitable for display to a user (for instance,
-*     may lie outside the expected range of values) into an acceptable
-*     alternative value suitable for display.
-*
-*     Typically, for axes that represent cyclic values such as angles,
-*     this function wraps an arbitrary coordinate value so that it
-*     lies within the first cycle (say zero to 2*pi). For an ordinary
-*     linear Axis, without constraints, this function will typically
-*     return the original value unchanged.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     value
-*        Pointer to the coordinate value to be normalised, which will
-*        be modified in place.
-*-
-*/
-
-/* In the Axis class there are no constraints, so simply return
-   without action. */
-   return;
-}
-
-static double AxisOffset( AstAxis *this, double v1, double dist, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisOffset
-
-*  Purpose:
-*     Add an increment onto a supplied axis value.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     AxisOffset( AstAxis *this, double v1, double dist ) 
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function returns an axis value formed by adding a signed axis
-*     increment onto a supplied axis value.
-*
-*     For a simple Axis, this is a trivial operation. But for other
-*     derived classes of Axis (such as a SkyAxis) this is not the case.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     v1
-*        The supplied axis value
-*     dist
-*        The axis increment
-
-*  Returned Value:
-*     The axis value which is the specified increment away from v1.
-
-*  Notes:
-*     - A value of AST__BAD is returned if either axis value is AST__BAD.
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   double result;                /* Returned gap size */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned axis value. */
-   if( v1 != AST__BAD && dist != AST__BAD ) result = v1 + dist;
-
-/* Return the result. */
-   return result;
-}
-
-static void AxisOverlay( AstAxis *template, AstAxis *result, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisOverlay
-
-*  Purpose:
-*     Overlay the attributes of a template Axis on to another Axis.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     void astAxisOverlay( AstAxis *template, AstAxis *result )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function overlays attributes of one Axis (the "template") on to
-*     another Axis, so as to over-ride selected attributes of that second
-*     Axis. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which an Axis acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-
-*  Parameters:
-*     template
-*        Pointer to the template Axis, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     result
-*        Pointer to the Axis which is to receive the new attribute values.
-
-*  Returned Value:
-*     void
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Define a macro to overlay a single attribute. This tests if the attribute
-   is set in the template Axis. If it is, its value is obtained and set in the
-   result Axis also. */
-#define OVERLAY(par) \
-   if ( astTestAxis##par( template ) ) { \
-      astSetAxis##par( result, astGetAxis##par( template ) ); \
-   }
-/* Overlay each Axis attribute in turn. */
-   OVERLAY(Digits);
-   OVERLAY(Direction);
-   OVERLAY(Label);
-   OVERLAY(Symbol);
-   OVERLAY(Unit);
-
-/* Handle the Format string slightly differently by using a private member
-   function to obtain it. This is necessary in case derived classes have
-   extended the string syntax (see the AxisFormat function for more
-   details). */
-   if ( TestAxisFormat( template, status ) ) {
-      SetAxisFormat( result, GetAxisFormat( template, status ), status );  
-   }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static int AxisUnformat( AstAxis *this, const char *string, double *value, int *status ) {
-/*
-*+
-*  Name:
-*     astAxisUnformat
-
-*  Purpose:
-*     Read a formatted coordinate value for an Axis.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     int astAxisUnformat( AstAxis *this, const char *string, double *value )
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function reads a formatted coordinate value for an Axis
-*     (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will be
-*        returned.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   double coord;                 /* Coordinate value read */
-   int nc;                       /* Number of characters read */
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* See if the string can be read as a floating point number. If so,
-   return its value. Also obtain the number of characters read,
-   including any leading and trailing white space. */
-   if ( 1 == astSscanf( string, "%lf %n", &coord, &nc ) ) {
-      *value = coord;
-
-/* Otherwise, see if the string starts with "<bad>", allowing mixed
-   case and leading, embedded and trailing white space. If so, return
-   the value AST__BAD. */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( string, " < %*1[Bb] %*1[Aa] %*1[Dd] > %n", &nc )
-               && ( nc > 0 ) ) ) {
-      *value = AST__BAD;
-
-/* If the string cannot be read, return a function result of zero. */
-   } else {
-      nc = 0;
-   }
-   
-/* Return the number of characters read. */
-   return nc;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Axis member function (over-rides the astClearAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function clears the value of a specified attribute for an
-*     Axis, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstAxis *this;                /* Pointer to the Axis structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Axis structure. */
-   this = (AstAxis *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
-   if ( !strcmp( attrib, "digits" ) ) {
-      astClearAxisDigits( this );
-
-/* Direction. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "direction" ) ) {
-      astClearAxisDirection( this );
-
-/* Format. */
-/* ------- */
-   } else if ( !strcmp( attrib, "format" ) ) {
-      astClearAxisFormat( this );
-
-/* Label. */
-/* ------ */
-   } else if ( !strcmp( attrib, "label" ) ) {
-      astClearAxisLabel( this );
-
-/* Top. */
-/* ---- */
-   } else if ( !strcmp( attrib, "top" ) ) {
-      astClearAxisTop( this );
-
-/* Bottom. */
-/* ------- */
-   } else if ( !strcmp( attrib, "bottom" ) ) {
-      astClearAxisBottom( this );
-
-/* Symbol. */
-/* ------- */
-   } else if ( !strcmp( attrib, "symbol" ) ) {
-      astClearAxisSymbol( this );
-
-/* Unit. */
-/* ----- */
-   } else if ( !strcmp( attrib, "unit" ) ) {
-      astClearAxisUnit( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then report an error. */
-   } else if ( !strcmp( attrib, "normunit" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static const char *GetAxisNormUnit( AstAxis *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetAxisNormUnit
-
-*  Purpose:
-*     Return the normalised Unit attribute for an Axis.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     const char *astGetAxisNormUnit( AstAxis *this ){
-
-*  Class Membership:
-*     Axis method.
-
-*  Description:
-*     This function normalised and returns the axis Unit attribute.
-*     Normalisation refers to transformations such as "s*(m/s)" -> "m".
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the normalised
-*     unit string.
-
-*  Notes:
-*     - The returned pointer points to a static memory buffer. The
-*     contents of this buffer will be over-written on each invocation of 
-*     this function. A copy of the returned string should therefore be
-*     taken if it will be needed later.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-   const char *result;       /* Pointer to dynamic memory holding returned text */
-   int nc;                   /* Length of normalised Unit string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Get the Axis Unit attrribute and normalise it. */
-   result = astUnitNormaliser( astGetAxisUnit( this ) );
-
-/* If successful, check that the resulting string will fit in the buffer.
-   If not, report an error. */
-   if( result ) {
-      nc = strlen( result );
-      if( nc > AST__AXIS_GETAXISNORMUNIT_BUFF_LEN ) {
-         astError( AST__FMTER, "astGetAxisNormUnit(%s): Internal buffer "
-                      "overflow while normalising the units string '%s' "
-                      "- result exceeds %d characters.", status, astGetClass( this ),
-                      result, AST__AXIS_GETAXISNORMUNIT_BUFF_LEN );
-         result = astFree( (void *) result );
-
-/* If so, copy it into the static buffer and free the dynamic memory returned 
-   by astUnitNormaliser. */
-      } else {
-         strcpy( getaxisnormunit_buff, result );
-      }
-      astFree( (void *) result );
-
-      result = getaxisnormunit_buff;
-   }
-
-/* Return the answer. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     Axis member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied Axis,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstAxis *this;             /* Pointer to Axis structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the Axis structure. */
-   this = (AstAxis *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astTSizeOf( this->label );
-   result += astTSizeOf( this->format );
-   result += astTSizeOf( this->symbol );
-   result += astTSizeOf( this->unit );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Axis member function (over-rides the protected astGetAttrib
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for an Axis, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Axis, or at static memory. The contents of the string
-*     may be over-written or the pointer may become invalid following
-*     a further invocation of the same function or any modification of
-*     the Axis. A copy of the string should therefore be made if
-*     necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstAxis*this;                 /* Pointer to the Axis structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Double attribute value */
-   int digits;                   /* Digits attribute value */
-   int direction;                /* Direction attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Axis structure. */
-   this = (AstAxis *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an 
-   appropriate format.  Set "result" to point at the result string. */
-
-/* Digits. */
-/* ------- */
-   if ( !strcmp( attrib, "digits" ) ) {
-      digits = astGetAxisDigits( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", digits );
-         result = getattrib_buff;
-      }
-
-/* Direction. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "direction" ) ) {
-      direction = astGetAxisDirection( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", direction );
-         result = getattrib_buff;
-      }
-
-/* Top. */
-/* ---- */
-   } else if ( !strcmp( attrib, "top" ) ) {
-      dval = astGetAxisTop( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Bottom. */
-/* ------- */
-   } else if ( !strcmp( attrib, "bottom" ) ) {
-      dval = astGetAxisBottom( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Format. */
-/* ------- */
-   } else if ( !strcmp( attrib, "format" ) ) {
-      result = astGetAxisFormat( this );
-
-/* Label. */
-/* ------ */
-   } else if ( !strcmp( attrib, "label" ) ) {
-      result = astGetAxisLabel( this );
-
-/* Symbol. */
-/* ------- */
-   } else if ( !strcmp( attrib, "symbol" ) ) {
-      result = astGetAxisSymbol( this );
-
-/* Unit. */
-/* ----- */
-   } else if ( !strcmp( attrib, "unit" ) ) {
-      result = astGetAxisUnit( this );
-
-/* NormUnit. */
-/* --------- */
-   } else if ( !strcmp( attrib, "normunit" ) ) {
-      result = astGetAxisNormUnit( this );
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static const char *GetDefaultFormat( AstAxis *this, int *status ){
-/*
-*  Name:
-*     GetDefaultFormat
-
-*  Purpose:
-*     Return a pointer to a string holding the default Format value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     const char *GetDefaultFormat( AstAxis *this, int *status )
-
-*  Class Membership:
-*     Axis member function 
-
-*  Description:
-*     This function returns a pointer to a string holding the default
-*     Format value, which is based on the current Digits value.
-
-*  Parameters:
-*     this 
-*        A pointer to the Axis structure.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a static null-terminated character string containing 
-*     the default Format string. 
-
-*  Notes:
-*     - A null string will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS         /* Pointer to thread-specific global data */
-
-/* Check the global error status. */   
-   if ( !astOK ) return "";
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Create the default format value and store it in the "format_buff"
-   static variable. */
-   (void) sprintf( getdefaultformat_buff, "%%1.%dG", astGetAxisDigits( this ) );
-
-/* Return a pointer to the "format_buff" static variable. */
-   return getdefaultformat_buff;
-}
-
-void astInitAxisVtab_(  AstAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitAxisVtab
-
-*  Purpose:
-*     Initialise a virtual function table for an Axis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     void astInitAxisVtab( AstAxisVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Axis vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Axis class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAAxis) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->AxisAbbrev = AxisAbbrev;
-   vtab->AxisFields = AxisFields;
-   vtab->AxisFormat = AxisFormat;
-   vtab->AxisDistance = AxisDistance;
-   vtab->AxisOffset = AxisOffset;
-   vtab->AxisGap = AxisGap;
-   vtab->AxisIn = AxisIn;
-   vtab->AxisNorm = AxisNorm;
-   vtab->AxisOverlay = AxisOverlay;
-   vtab->AxisUnformat = AxisUnformat;
-   vtab->ClearAxisDigits = ClearAxisDigits;
-   vtab->ClearAxisDirection = ClearAxisDirection;
-   vtab->ClearAxisFormat = ClearAxisFormat;
-   vtab->ClearAxisLabel = ClearAxisLabel;
-   vtab->ClearAxisSymbol = ClearAxisSymbol;
-   vtab->ClearAxisUnit = ClearAxisUnit;
-   vtab->GetAxisDigits = GetAxisDigits;
-   vtab->GetAxisDirection = GetAxisDirection;
-   vtab->GetAxisFormat = GetAxisFormat;
-   vtab->GetAxisLabel = GetAxisLabel;
-   vtab->GetAxisSymbol = GetAxisSymbol;
-   vtab->GetAxisUnit = GetAxisUnit;
-   vtab->GetAxisNormUnit = GetAxisNormUnit;
-   vtab->SetAxisDigits = SetAxisDigits;
-   vtab->SetAxisDirection = SetAxisDirection;
-   vtab->SetAxisFormat = SetAxisFormat;
-   vtab->SetAxisLabel = SetAxisLabel;
-   vtab->SetAxisSymbol = SetAxisSymbol;
-   vtab->SetAxisUnit = SetAxisUnit;
-   vtab->TestAxisDigits = TestAxisDigits;
-   vtab->TestAxisDirection = TestAxisDirection;
-   vtab->TestAxisFormat = TestAxisFormat;
-   vtab->TestAxisLabel = TestAxisLabel;
-   vtab->TestAxisSymbol = TestAxisSymbol;
-   vtab->TestAxisUnit = TestAxisUnit;
-   vtab->TestAxisNormUnit = TestAxisNormUnit;
-
-   vtab->ClearAxisTop = ClearAxisTop;
-   vtab->GetAxisTop = GetAxisTop;
-   vtab->SetAxisTop = SetAxisTop;
-   vtab->TestAxisTop = TestAxisTop;
-
-   vtab->ClearAxisBottom = ClearAxisBottom;
-   vtab->GetAxisBottom = GetAxisBottom;
-   vtab->SetAxisBottom = SetAxisBottom;
-   vtab->TestAxisBottom = TestAxisBottom;
-
-/* Save the inherited pointers to methods that will be extended, and replace
-   them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-/* Declare the destructor, copy constructor and dump function. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Axis", "Coordinate axis" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static char *ParseAxisFormat( const char *fmt0, int digs, int *log, int *sign,
-                              int *lspace, int *integ, int *status ){
-/*
-*  Name:
-*     ParseAxisFormat
-
-*  Purpose:
-*     Parse the Format string for an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     char *ParseAxisFormat( const char *fmt0, int digs, int *log, int *sign, 
-*                            int *lspace, int *integ, int *status )
-
-*  Class Membership:
-*     Axis member function 
-
-*  Description:
-*     This function returns a collection of flags indicating if any AST 
-*     specific formatting features are specified in the supplied Format
-*     string. It also returns a pointer to a new Format string which is a
-*     standard C printf format specifier. 
-
-*  Parameters:
-*     fmt0
-*        The value of the Format attribute.
-*     digs 
-*        The default number of digits of precision to use. This is used
-*        if the given format specifier includes a wildcard precision (".*").
-*        In this case, the returned format specifier will be modified to
-*        include an explicit precision value equal to the supplied value
-*        of "digs".
-*     log
-*        Pointer to an integer in which to store a flag indicating if the 
-*        if the axis value should be formatted as "10**x" using the graphical 
-*        escape sequences defined within the Plot class to produce "x" as a 
-*        superscript of "10". A non-zero value will be returned if the
-*        supplied Format string has a '&' character in its printf <flags> 
-*        field (that is, between the leading '%' sign and the optional
-*        printf field width).
-*     sign
-*        Pointer to an integer in which to store a flag indicating if a
-*        sign character ('+' or '-') should always be included in front
-*        of the "10" if "log" is returned non-zero. If "log" is returned
-*        zero, then "sign" will also be zero. If "log" is non-zero, then
-*        a non-zero value for "sign" will be returned if the supplied Format 
-*        string has a '+' character in its printf <flags> field (that is, 
-*        between the leading '%' sign and the optional printf field width).
-*     lspace
-*        Pointer to an integer in which to store a flag indicating if a
-*        leading space should be included in front of the "10" if "log" is 
-*        returned non-zero and "sign" is returned zero. Otherwise, "lspace" 
-*        will also be zero. If "log" is non-zero, then a non-zero value for 
-*        "lspace" will be returned if the supplied Format string has a ' ' 
-*        character in its printf <flags> field (that is, between the leading 
-*        '%' sign and the optional printf field width).
-*     integ
-*        Pointer to an integer in which to store a flag indicating if the
-*        returned format specifier includes an integer conversion code
-*        (e.g. %d) or floating point conversion code (e.g. "%.7G").
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a dynamically allocated null-terminated string containing 
-*     the modified Format string. This will be a copy of the supplied
-*     Format string, but with any '&' flag removed. Any '+' or ' ' flag will
-*     also be removed if "log" is returned as non-zero. An explicit
-*     precision field will be included if the supplied format includes a
-*     ".*" precision field.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   char *a;             /* Pointer to next char read from original format */
-   char *b;             /* Pointer to next char to write to new format */
-   char *c;             /* Pointer to next char read from original format */
-   char *new;           /* Pointer to new returned string */
-   char *perc;          /* Pointer to percent sign */
-   char *result;        /* Pointer to the returned string */
-   int hash;            /* Was a '#' flag found? */
-   int len;             /* Used length of format string */
-   int minus;           /* Was a '-' flag found? */
-   int plus;            /* Was a '+' flag found? */
-   int rlen;            /* Length of result */
-   int space;           /* Was a ' ' flag found? */
-
-/* Initialise. */
-   result = NULL;
-   *log = 0;
-   *sign = 0;
-   *lspace = 0;
-   *integ = 0;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Take a copy of the supplied string. Check the pointer can be used
-   safely. */
-   len = astChrLen( fmt0 );
-   result = astStore( NULL, fmt0, len + 1 );
-   if( astOK ) {
-      result[ len ] = 0;
-
-/* Find the first percent sign. Do nothing if none is found. */
-      perc = strchr( result, '%' );
-      if( perc ) {   
-
-/* Check each character following the percent sign until one is found
-   which is not a legal printf flag, or a legal AST extension flag. Note
-   which ones are present. */
-         minus = 0;
-         plus = 0;
-         space = 0;
-         hash = 0;
-   
-         a = perc;
-         while( ++a ){
-            if( *a == '-' ){
-               minus = 1;
-            } else if( *a == '+' ){
-               plus = 1;
-            } else if( *a == ' ' ){
-               space = 1;
-            } else if( *a == '#' ){
-               hash = 1;
-            } else if( *a == '&' ){
-               *log = 1;
-            } else {
-               break;
-            }
-         }
-
-/* If no '&' flag was found just return the unaltered copy of the
-   supplied Format string. Otherwise, remove any '+' or ' ' flag. */
-         if( *log ) {
-            if( plus ) *sign = 1;
-            if( space ) *lspace = 1;
-
-/* Append any remaining flag characters to the output string. */
-            perc++;
-            if( minus ) *(perc++) = '-';
-            if( hash ) *(perc++) = '#';
-
-/* Copy the remaining characters down to fill up the gap left by the
-   removed flags. */
-            while( *a ) *(perc++) = *(a++);
-
-/* Terminate the returned string. */
-            *perc = 0;
-
-         }
-      }
-   }
-
-/* If the format specifier being returned does include a ".*" precision,
-   replace the "*" with the value of the Digits attribute. */
-   if( result ) {
-
-/* Find the first percent sign. Do nothing if none is found. */
-      a = strchr( result, '%' );
-      if( a ) {   
- 
-/* Check each character following the percent sign until one is found
-   which is not a legal printf flag. */
-         while( ++a ){
-            if( *a != '-' && *a != '+' && *a != ' ' && *a != '#' ) break;
-         }
-
-/* Skip any field width (a decimal integer) following the flags. */
-         a--;
-         while( ++a ) { 
-            if( !isdigit( *a ) ) break;
-         }
-
-/* Get a pointer to the next alphabetic character. This will be the
-   conversion code. If it an integer code, return *integ non-zero. */
-         c = a - 1;
-         while( ++c ) { 
-            if( isalpha( *c ) ) {
-               if( *c == 'd' || *c == 'i' || *c == 'u' || *c == 'o' || 
-                   *c == 'x' || *c == 'X' || *c == 'c' ) *integ = 1;
-               break;
-            }
-         }
-
-/* Go back to the end of the field width. If the next two characters are
-   "." and "*", change the asterisk to the supplied "digs" value. */
-         if( a[ 0 ] == '.' && a[ 1 ] == '*' ) {
-
-/* Allocate memory to hold the extended format string (allowing 20
-   characters for formatting the digs value - just in case something like
-   INT_MAX is supplied by mistake), and store the existing string in it. */
-            rlen = strlen( result );
-            new = astMalloc( rlen + 22 );
-            if( new ) memcpy( new, result, rlen + 1 );
-
-/* Put the precision into the new string, following the field width. */
-            b = new + ( a - result );
-            b += sprintf( b, ".%d", digs );
-
-/* Copy the remainder of the original format string to the new format
-   string. */
-            if( a[ 2 ] != 0 ) strcpy( b, a + 2 );
-
-/* Use the new format string in place of the old.*/
-            astFree( result );
-            result = new;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     Axis member function (over-rides the protected astSetAttrib
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns an attribute value for an Axis, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     setting
-*        Pointer to a null terminated string specifying the new
-*        attribute value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstAxis *this;                /* Pointer to Axis structure */
-   double dval;                  /* Double attribute value */
-   int digits;                   /* Number of digits of precision */
-   int direction;                /* Plot axis in normal direction? */
-   int format;                   /* Offset of Format string */
-   int label;                    /* Offset of Label string */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read from setting */
-   int symbol;                   /* Offset of Symbol string */
-   int unit;                     /* Offset of Unit string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Axis structure. */
-   this = (AstAxis *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Digits. */
-/* ------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "digits= %d %n", &digits, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisDigits( this, digits );
-
-/* Direction. */
-/* ---------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "direction= %d %n", &direction, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisDirection( this, direction );
-
-/* Top. */
-/* ---- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "top= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisTop( this, dval );
-
-/* Bottom. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "bottom= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisBottom( this, dval );
-
-/* Format. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "format=%n%*[^\n]%n", &format, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisFormat( this, setting + format );
-
-/* Label. */
-/* ------ */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "label=%n%*[^\n]%n", &label, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisLabel( this, setting + label );
-
-/* Symbol. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "symbol=%n%*[^\n]%n", &symbol, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisSymbol( this, setting + symbol );
-
-/* Unit. */
-/* ----- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "unit=%n%*[^\n]%n", &unit, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisUnit( this, setting + unit );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
-   specified. */
-   } else if ( MATCH( "normunit" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass any unrecognised attribute setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Axis member function (over-rides the astTestAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate
-*     whether a value has been set for one of an Axis' attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstAxis *this;                /* Pointer to the Axis structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Axis structure. */
-   this = (AstAxis *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
-   if ( !strcmp( attrib, "digits" ) ) {
-      result = astTestAxisDigits( this );
-
-/* Direction. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "direction" ) ) {
-      result = astTestAxisDirection( this );
-
-/* Top. */
-/* ---- */
-   } else if ( !strcmp( attrib, "top" ) ) {
-      result = astTestAxisTop( this );
-
-/* Bottom. */
-/* ------- */
-   } else if ( !strcmp( attrib, "bottom" ) ) {
-      result = astTestAxisBottom( this );
-
-/* Format. */
-/* ------- */
-   } else if ( !strcmp( attrib, "format" ) ) {
-      result = astTestAxisFormat( this );
-
-/* Label. */
-/* ------ */
-   } else if ( !strcmp( attrib, "label" ) ) {
-      result = astTestAxisLabel( this );
-
-/* Symbol. */
-/* ------- */
-   } else if ( !strcmp( attrib, "symbol" ) ) {
-      result = astTestAxisSymbol( this );
-
-/* Unit. */
-/* ----- */
-   } else if ( !strcmp( attrib, "unit" ) ) {
-      result = astTestAxisUnit( this );
-
-/* NormUnit. */
-/* --------- */
-   } else if ( !strcmp( attrib, "normunit" ) ) {
-      result = astTestAxisNormUnit( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int TestAxisNormUnit( AstAxis *this, int *status ){
-/*
-*  Name:
-*     TestAxisNormUnit
-
-*  Purpose:
-*     Test if a NormUnit attribute value is set for an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     int TestAxisNormUnit( AstAxis *this, int *status )
-
-*  Class Membership:
-*     Axis member function 
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate
-*     whether a value has been set for the NormUnit string.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-   return astTestAxisUnit( this );
-}
-
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with this
-   class using the macros defined for this purpose in the "object.h" file. For
-   a description of each attribute, see the class interface (in the associated
-   .h file). */
-
-/* Digits. */
-/* ------- */
-/* Clear the Digits value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Axis,AxisDigits,digits,-INT_MAX)
-
-/* Supply a default of 7 digits if no value has been set. */
-astMAKE_GET(Axis,AxisDigits,int,0,( this->digits != -INT_MAX ?
-                                    this->digits : 7 ))
-
-/* Constrain the Digits value being set to be at least 1. */
-astMAKE_SET(Axis,AxisDigits,int,digits,( value > 1 ? value : 1 ))
-
-/* The Digits value is set if it is not -INT_MAX. */
-astMAKE_TEST(Axis,AxisDigits,( this->digits != -INT_MAX ))
-
-/* Direction. */
-/* ---------- */
-/* Clear the Direction value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Axis,AxisDirection,direction,-INT_MAX)
-
-/* Supply a default value of 1 if the Direction value is not set. */
-astMAKE_GET(Axis,AxisDirection,int,0,( this->direction != -INT_MAX ?
-                                       this->direction : 1 ))
-
-/* Set a Direction value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Axis,AxisDirection,int,direction,( value != 0 ))
-
-/* The Direction value is set if it is not -INT_MAX. */
-astMAKE_TEST(Axis,AxisDirection,( this->direction != -INT_MAX ))
-
-/* Top. */
-/* -----*/
-/* Clear the Top Direction value by setting it to AST__BAD. */
-astMAKE_CLEAR(Axis,AxisTop,top,AST__BAD)
-
-/* Supply a default value of DBL_MAX if the Top value is not set.*/
-astMAKE_GET(Axis,AxisTop,double,0,( this->top != AST__BAD ? this->top : DBL_MAX))
-
-/* Set the Top value. */
-astMAKE_SET(Axis,AxisTop,double,top,(value))
-
-/* The Top value is set if it is not AST__BAD. */
-astMAKE_TEST(Axis,AxisTop,( this->top != AST__BAD ))
-
-/* Bottom. */
-/* --------*/
-/* Clear the Bottom Direction value by setting it to AST__BAD. */
-astMAKE_CLEAR(Axis,AxisBottom,bottom,AST__BAD)
-
-/* Supply a default value of -DBL_MAX if the Bottom value is not set.*/
-astMAKE_GET(Axis,AxisBottom,double,0.0,( this->bottom != AST__BAD ? this->bottom : -DBL_MAX))
-
-/* Set the Bottom value. */
-astMAKE_SET(Axis,AxisBottom,double,bottom,(value))
-
-/* The Bottom value is set if it is not AST__BAD. */
-astMAKE_TEST(Axis,AxisBottom,( this->bottom != AST__BAD ))
-
-/* Format. */
-/* ------- */
-/* Clear the Format value by freeing the allocated memory and assigning a NULL
-   pointer. */
-astMAKE_CLEAR(Axis,AxisFormat,format,astFree( this->format ))
-
-/* If the Format value is not set, return a pointer to a default Format
-   string. */
-astMAKE_GET(Axis,AxisFormat,const char *,NULL,( this->format ? this->format :
-            GetDefaultFormat( this, status ) ) )
-
-/* Set a Format value by freeing any previously allocated memory, allocating
-   new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisFormat,const char *,format,astStore( this->format, value,
-                                                strlen( value ) + (size_t) 1 ))
-
-/* The Format value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisFormat,( this->format != NULL ))
-
-/* Label. */
-/* ------ */
-/* Clear the Label value by freeing the allocated memory and assigning a NULL
-   pointer. */
-astMAKE_CLEAR(Axis,AxisLabel,label,astFree( this->label ))
-
-/* If the Label value is not set, supply a default value by way of a pointer
-   to the constant string "Coordinate Axis". */
-astMAKE_GET(Axis,AxisLabel,const char *,NULL,( this->label ? this->label :
-                                               "Coordinate axis" ))
-
-/* Set a Label value by freeing any previously allocated memory, allocating
-   new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisLabel,const char *,label,astStore( this->label, value,
-                                              strlen( value ) + (size_t) 1 ))
-
-/* The Label value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisLabel,( this->label != NULL ))
-
-/* Symbol. */
-/* ------- */
-/* Clear the Symbol value by freeing the allocated memory and assigning a NULL
-   pointer. */
-astMAKE_CLEAR(Axis,AxisSymbol,symbol,astFree( this->symbol ))
-
-/* If the Symbol value is not set, supply a default value by way of a pointer
-   to the constant string "x". */
-astMAKE_GET(Axis,AxisSymbol,const char *,NULL,( this->symbol ? this->symbol :
-                                                               "x" ))
-
-/* Set a Symbol value by freeing any previously allocated memory, allocating
-   new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisSymbol,const char *,symbol,astStore( this->symbol, value,
-                                                strlen( value ) + (size_t) 1 ))
-
-/* The Symbol value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisSymbol,( this->symbol != NULL ))
-
-/* Unit. */
-/* ----- */
-/* Clear the Unit value by freeing the allocated memory and assigning a NULL
-   pointer. */
-astMAKE_CLEAR(Axis,AxisUnit,unit,astFree( this->unit ))
-
-/* If the Unit value is not set, supply a default value by way of a pointer
-   to the constant string "". */
-astMAKE_GET(Axis,AxisUnit,const char *,NULL,( this->unit ? this->unit : "" ))
-
-/* Set a Unit value by freeing any previously allocated memory, allocating
-   new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Axis,AxisUnit,const char *,unit,astStore( this->unit, value,
-                                            strlen( value ) + (size_t) 1 ))
-
-/* The Unit value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Axis,AxisUnit,( this->unit != NULL ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Axis objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Axis objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstAxis *in;                  /* Pointer to input Axis */
-   AstAxis *out;                 /* Pointer to output Axis */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Axis structures. */
-   in = (AstAxis *) objin;
-   out = (AstAxis *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Axis. */
-   out->format = NULL;
-   out->label = NULL;
-   out->symbol = NULL;
-   out->unit = NULL;
-
-/* Make copies of the allocated strings and Objects. */
-   if ( in->label ) out->label = astStore( NULL, in->label,
-                                 strlen( in->label ) + (size_t) 1 );
-   if ( in->format ) out->format = astStore( NULL, in->format,
-                                   strlen( in->format ) + (size_t) 1 );
-   if ( in->symbol ) out->symbol = astStore( NULL, in->symbol,
-                                   strlen( in->symbol ) + (size_t) 1 );
-   if ( in->unit ) out->unit = astStore( NULL, in->unit,
-                               strlen( in->unit ) + (size_t) 1 );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
-   if ( !astOK ) {
-      out->format = astFree( out->format );
-      out->label = astFree( out->label );
-      out->symbol = astFree( out->symbol );
-      out->unit = astFree( out->unit );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Axis objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Axis objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstAxis *this;                /* Pointer to Axis */
-
-/* Obtain a pointer to the Axis structure. */
-   this = (AstAxis *) obj;
-
-/* Free all allocated memory. */
-   this->format = astFree( this->format );
-   this->label = astFree( this->label );
-   this->symbol = astFree( this->symbol );
-   this->unit = astFree( this->unit );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Axis objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Axis class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Axis whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstAxis *this;                /* Pointer to the Axis structure */
-   char comment[ 80 ];           /* Buffer for comment string */
-   const char *sval;             /* Pointer to string value */
-   const char *lab;              /* Pointer to unit label */
-   double dval;                  /* Double value */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Axis structure. */
-   this = (AstAxis *) this_object;
-
-/* Write out values representing the instance variables for the
-   Axis class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Label. */
-/* ------ */
-   set = TestAxisLabel( this, status );
-   sval = set ? GetAxisLabel( this, status ) : astGetAxisLabel( this );
-   astWriteString( channel, "Label", set, 1, sval, "Axis Label" );
-
-/* Symbol. */
-/* ------- */
-   set = TestAxisSymbol( this, status );
-   sval = set ? GetAxisSymbol( this, status ) : astGetAxisSymbol( this );
-   astWriteString( channel, "Symbol", set, 1, sval, "Axis symbol" );
-
-/* Unit. */
-/* ----- */
-   set = TestAxisUnit( this, status );
-   sval = set ? GetAxisUnit( this, status ) : astGetAxisUnit( this );
-
-/* Get any label associated with the unit string. */
-   lab = astUnitLabel( sval );
-
-/* Construct a comment including the above label (but only if it is not
-   the same as the unit string) . */
-   if( lab && strcmp( lab, sval ) ) {
-      (void) sprintf( comment, "Axis units (%s)", lab );
-   } else {
-      (void) sprintf( comment, "Axis units" );
-   }
-
-/* Write out the Unit value. */
-   astWriteString( channel, "Unit", set, 0, sval, comment );
-
-/* Digits. */
-/* ------- */
-   set = TestAxisDigits( this, status );
-   ival = set ? GetAxisDigits( this, status ) : astGetAxisDigits( this );
-   astWriteInt( channel, "Digits", set, 0, ival,
-                "Default formatting precision" );
-
-/* Format. */
-/* ------- */
-   set = TestAxisFormat( this, status );
-   sval = set ? GetAxisFormat( this, status ) : astGetAxisFormat( this );
-   astWriteString( channel, "Format", set, 0, sval, "Format specifier" );
-
-/* Direction. */
-/* ---------- */
-   set = TestAxisDirection( this, status );
-   ival = set ? GetAxisDirection( this, status ) : astGetAxisDirection( this );
-   astWriteInt( channel, "Dirn", set, 0, ival,
-                ival ? "Plot in conventional direction (hint)" :
-                       "Plot in reverse direction (hint)" );
-/* Top. */
-/* ---- */
-   set = TestAxisTop( this, status );
-   dval = set ? GetAxisTop( this, status ) : astGetAxisTop( this );
-   astWriteDouble( channel, "Top", set, 0, dval, "Maximum legal axis value" );
-
-/* Bottom. */
-/* ------- */
-   set = TestAxisBottom( this, status );
-   dval = set ? GetAxisBottom( this, status ) : astGetAxisBottom( this );
-   astWriteDouble( channel, "Bottom", set, 0, dval, "Minimum legal axis value" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAAxis and astCheckAxis functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Axis,Object)
-astMAKE_CHECK(Axis)
-
-AstAxis *astAxis_( const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astAxis
-
-*  Purpose:
-*     Create an Axis.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     AstAxis *astAxis( const char *options, int *status, ... )
-
-*  Class Membership:
-*     Axis constructor.
-
-*  Description:
-*     This function creates a new Axis and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Axis. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new Axis.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstAxis *new;                 /* Pointer to new Axis */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the Axis, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitAxis( NULL, sizeof( AstAxis ), !class_init, &class_vtab,
-                      "Axis" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new Axis'
-   attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Axis. */
-   return new;
-}
-
-AstAxis *astAxisId_( const char *options, ... ) {
-/*
-*  Name:
-*     astAxisId_
-
-*  Purpose:
-*     Create an Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     AstAxis *astAxisId_( const char *options, ... );
-
-*  Class Membership:
-*     Axis constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astAxis constructor function. It returns an ID value (instead of
-*     a true C pointer) to external users, and must be provided
-*     because astAxis_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astAxis_ directly, so it must be a re-implementation of
-*     it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astAxis_.
-
-*  Returned Value:
-*     The ID value associated with the new Axis.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstAxis *new;                 /* Pointer to new Axis */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the Axis, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitAxis( NULL, sizeof( AstAxis ), !class_init, &class_vtab,
-                      "Axis" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new Axis'
-   attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Axis. */
-   return astMakeId( new );
-}
-
-AstAxis *astInitAxis_( void *mem, size_t size, int init,
-                       AstAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitAxis
-
-*  Purpose:
-*     Initialise an Axis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     AstAxis *astInitAxis( void *mem, size_t size, int init,
-*                           AstAxisVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Axis initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Axis object. It allocates memory (if necessary) to accommodate
-*     the Axis plus any additional data associated with the derived class.
-*     It then initialises an Axis structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for an Axis at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Axis is to be created. This
-*        must be of sufficient size to accommodate the Axis data
-*        (sizeof(Axis)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Axis (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Axis
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Axis's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Axis.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new Axis.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *new;                 /* Pointer to new Axis */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitAxisVtab( vtab, name );
-
-/* Initialise an Object structure (the parent class) as the first component
-   within the Axis structure, allocating memory if necessary. */
-   new = (AstAxis *) astInitObject( mem, size, 0, (AstObjectVtab *) vtab,
-                                    name );
-
-   if ( astOK ) {
-
-/* Initialise the Axis data. */
-/* ------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->digits = -INT_MAX;
-      new->direction = -INT_MAX;
-      new->format = NULL;
-      new->label = NULL;
-      new->symbol = NULL;
-      new->unit = NULL;
-      new->top = AST__BAD;
-      new->bottom = AST__BAD;
-
-/* If an error occurred, clean up by deleting the new Axis. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Axis. */
-   return new;
-}
-
-AstAxis *astLoadAxis_( void *mem, size_t size,
-                       AstAxisVtab *vtab, const char *name,
-                       AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadAxis
-
-*  Purpose:
-*     Load an Axis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "axis.h"
-*     AstAxis *astLoadAxis( void *mem, size_t size,
-*                           AstAxisVtab *vtab, const char *name,
-*                           AstChannel *channel )
-
-*  Class Membership:
-*     Axis loader.
-
-*  Description:
-*     This function is provided to load a new Axis using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Axis structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Axis at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Axis is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Axis data (sizeof(Axis)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Axis (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Axis structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstAxis) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Axis. If this is NULL, a pointer
-*        to the (static) virtual function table for the Axis class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Axis" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Axis.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstAxis *new;                 /* Pointer to the new Axis */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Axis. In this case the
-   Axis belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstAxis );
-      vtab = &class_vtab;
-      name = "Axis";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitAxisVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Axis. */
-   new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Axis" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Label. */
-/* ------ */
-/* Note that string values do not require any additional processing. */
-      new->label = astReadString( channel, "label", NULL );
-
-/* Symbol. */
-/* ------- */
-      new->symbol = astReadString( channel, "symbol", NULL );
-
-/* Unit. */
-/* ----- */
-      new->unit = astReadString( channel, "unit", NULL );
-
-/* Digits. */
-/* ------- */
-      new->digits = astReadInt( channel, "digits", -INT_MAX );
-      if ( TestAxisDigits( new, status ) ) SetAxisDigits( new, new->digits, status );
-      
-/* Format. */
-/* ------- */
-      new->format = astReadString( channel, "format", NULL );
-
-/* Direction. */
-/* ---------- */
-      new->direction = astReadInt( channel, "dirn", -INT_MAX );
-      if ( TestAxisDirection( new, status ) ) SetAxisDirection( new, new->direction, status );
-
-/* Top. */
-/* ---- */
-      new->top = astReadDouble( channel, "top", AST__BAD );
-      if ( TestAxisTop( new, status ) ) SetAxisTop( new, new->top, status );
-
-/* Bottom. */
-/* ---- */
-      new->bottom = astReadDouble( channel, "bottom", AST__BAD );
-      if ( TestAxisBottom( new, status ) ) SetAxisBottom( new, new->bottom, status );
-
-/* If an error occurred, clean up by deleting the new Axis. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Axis pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* External interfaces for the attribute access functions are generated
-   automatically by the macros that implement the access functions themselves.
-   Hence, we need only provide external interfaces for a few additional
-   functions here. */
-const char *astAxisAbbrev_( AstAxis *this, const char *fmt,
-                            const char *str1, const char *str2, int *status ) {
-   if ( !astOK ) return str2;
-   return (**astMEMBER(this,Axis,AxisAbbrev))( this, fmt, str1, str2, status );
-}
-const char *astAxisFormat_( AstAxis *this, double value, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Axis,AxisFormat))( this, value, status );
-}
-double astAxisDistance_( AstAxis *this, double v1, double v2, int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Axis,AxisDistance))( this, v1, v2, status );
-}
-double astAxisOffset_( AstAxis *this, double v1, double dist, int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Axis,AxisOffset))( this, v1, dist, status );
-}
-double astAxisGap_( AstAxis *this, double gap, int *ntick, int *status ) {
-   if ( !astOK ) return 0.0;
-   return (**astMEMBER(this,Axis,AxisGap))( this, gap, ntick, status );
-}
-void astAxisNorm_( AstAxis *this, double *value, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Axis,AxisNorm))( this, value, status );
-}
-void astAxisOverlay_( AstAxis *template, AstAxis *result, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(template,Axis,AxisOverlay))( template, result, status );
-}
-int astAxisUnformat_( AstAxis *this, const char *string, double *value, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Axis,AxisUnformat))( this, string, value, status );
-}
-int astAxisFields_( AstAxis *this, const char *fmt, const char *str, 
-                    int maxfld, char **fields, int *nc, double *val, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Axis,AxisFields))( this, fmt, str, maxfld, fields, nc, val, status );
-}
-int astAxisIn_( AstAxis *this, double lo, double hi, double val, int closed, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Axis,AxisIn))( this, lo, hi, val, closed, status );
-}
-const char *astGetAxisNormUnit_( AstAxis *this, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Axis,GetAxisNormUnit))( this, status );
-}
-int astTestAxisNormUnit_( AstAxis *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Axis,TestAxisNormUnit))( this, status );
-}
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/axis.h b/ast-5.3-1/axis.h
deleted file mode 100644
index 2697e9b..0000000
--- a/ast-5.3-1/axis.h
+++ /dev/null
@@ -1,605 +0,0 @@
-#if !defined( AXIS_INCLUDED )    /* Include this file only once */
-#define AXIS_INCLUDED
-/*
-*+
-*  Name:
-*     axis.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Axis class.
-
-*  Invocation:
-*     #include "axis.h"
-
-*  Description:
-*     This include file defines the interface to the Axis class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Axis class implements the basic behaviour of a coordinate
-*     axis, several of which may be assembled to represent a
-*     coordinate system.
-
-*  Inheritance:
-*     The Axis class inherits from the Object class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Bottom (double)
-*        Lowest legal value for axis.
-*     Digits (integer)
-*        Specifies how many digits of precision are required by
-*        default when a coordinate value for an Axis is formatted
-*        (e.g. using the astAxisFormat method). The Digits value acts
-*        as a default only and is over-ridden if a Format string is
-*        specified explicitly (using the astSetAxisFormat method). The
-*        default supplied by the Axis class for the Digits attribute
-*        itself is 7.
-*     Direction (integer)
-*        Specifies how coordinate values for an Axis should be
-*        displayed. By default, it has the value one, indicating that
-*        they should be shown in the conventional sense
-*        (i.e. increasing left to right for an abscissa and bottom to
-*        top for an ordinate). If set to zero, this attribute
-*        indicates that the direction should be reversed (as would
-*        often be done for an astronomical magnitude or a right
-*        ascension axis, for example).
-*     Format (string)
-*        Specifies the format to be used to display coordinate values
-*        for an Axis (i.e. to convert them from binary to character
-*        form). The interpretation of this string (e.g. by derived
-*        classes) is left to the astAxisFormat method, but the Axis
-*        class interprets this parameter as a C "printf" format string
-*        which should be capable of formatting a single coordinate
-*        value stored as a double (e.g.  "%1.7G"). If no Format string
-*        is set, the default supplied by the Axis class is based on
-*        the value of the Digits attribute.
-*     Label (string)
-*        Specifies the label to be attached to an Axis when it is
-*        represented in (e.g.) a graph. It is intended purely for
-*        interpretation by human readers and not by software. The
-*        default supplied by the Axis class is the string "Coordinate
-*        Axis".
-*     Symbol (string)
-*        Specifies the symbol to be used to represent coordinate
-*        values for an Axis in "short form", such as in algebraic
-*        expressions where a full description of the Axis would be
-*        inappropriate. Examples include "RA" and "Dec" (for Right
-*        Ascension and Declination). The default supplied by the Axis
-*        class is the string "x".
-*     Top (double)
-*        Highest legal value for axis.
-*     Unit (string)
-*        Describes the units used to represent coordinate values on an
-*        Axis.  The default supplied by the Axis class is an empty
-*        string "".
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-
-*     Protected:
-*        astSetAttrib
-*           Set an attribute value for an Axis.
-
-*  New Methods Defined:
-*     Public:
-*        astAxisFormat
-*           Format a coordinate value for an Axis.
-*        astAxisNorm
-*           Normalise an Axis coordinate value.
-*        astAxisUnformat
-*           Read a formatted coordinate value for an Axis.
-
-*     Protected:
-*        astAxisAbbrev
-*           Abbreviate a formatted Axis value by skipping leading fields.
-*        astAxisDistance
-*           Find the distance between two axis values.
-*        astAxisFields
-*           Identify the fields within a formatted SkyAxis value.
-*        astAxisGap
-*           Find a "nice" gap for tabulating Axis values.
-*        astAxisOffset
-*           Add an increment onto a supplied axis value.
-*        astAxisOverlay
-*           Overlay the attributes of a template Axis on to another Axis.
-*        astClearAxisDigits
-*           Clear the Digits attribute for an Axis.
-*        astClearAxisDirection
-*           Clear the Direction attribute for an Axis.
-*        astClearAxisFormat
-*           Clear the Format attribute for an Axis.
-*        astClearAxisLabel
-*           Clear the Label attribute for an Axis.
-*        astClearAxisSymbol
-*           Clear the Symbol attribute for an Axis.
-*        astClearAxisUnit
-*           Clear the Unit attribute for an Axis.
-*        astGetAxisDigits
-*           Get the value of the Digits attribute for an Axis.
-*        astGetAxisDirection
-*           Get the value of the Direction attribute for an Axis.
-*        astGetAxisFormat
-*           Get a pointer to the Format attribute for an Axis.
-*        astGetAxisLabel
-*           Get a pointer to the Label attribute for an Axis.
-*        astGetAxisSymbol
-*           Get a pointer to the Symbol attribute for an Axis.
-*        astGetAxisUnit
-*           Get a pointer to the Unit attribute for an Axis.
-*        astSetAxisDigits
-*           Set the value of the Digits attribute for an Axis.
-*        astSetAxisDirection
-*           Set the value of the Direction attribute for an Axis.
-*        astSetAxisFormat
-*           Set the value of the Format attribute for an Axis.
-*        astSetAxisLabel
-*           Set the value of the Label attribute for an Axis.
-*        astSetAxisSymbol
-*           Set the value of the Symbol attribute for an Axis.
-*        astSetAxisUnit
-*           Set the value of the Unit attribute for an Axis.
-*        astTestAxisDigits
-*           Test whether a value has been set for the Digits attribute of an
-*           Axis.
-*        astTestAxisDirection
-*           Test whether a value has been set for the Direction attribute of an
-*           Axis.
-*        astTestAxisFormat
-*           Test whether a value has been set for the Format attribute of an
-*           Axis.
-*        astTestAxisLabel
-*           Test whether a value has been set for the Label attribute of an
-*           Axis.
-*        astTestAxisSymbol
-*           Test whether a value has been set for the Symbol attribute of an
-*           Axis.
-*        astTestAxisUnit
-*           Test whether a value has been set for the Unit attribute of an
-*           Axis.
-
-*  Other Class Functions:
-*     Public:
-*        astAxis
-*           Create an Axis.
-*        astIsAAxis
-*           Test class membership.
-
-*     Protected:
-*        astCheckAxis
-*           Validate class membership.
-*        astInitAxis
-*           Initialise an Axis.
-*        astLoadAxis
-*           Load an Axis.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstAxis
-*           Axis object type.
-
-*     Protected:
-*        AstAxisVtab
-*           Axis virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: B.S. Berry (Starlink)
-
-*  History:
-*     1-MAR-1996 (RFWS):
-*        Original version.
-*     25-APR-1996 (RFWS):
-*        Made all attribute access functions protected.
-*     10-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     11-SEP-1996 (RFWS):
-*        Added astAxisGap (written by DSB).
-*     25-FEB-1998 (RFWS):
-*        Added astAxisUnformat.
-*     29-AUG-2001 (DSB):
-*        Added AxisDistance and AxisOffset.
-*     10-OCT-2002 (DSB):
-*        Added Top and Bottom.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitAxisVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"
-#endif
-
-
-/* Macros */
-/* ====== */
-#if defined(astCLASS)
-#define AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN 50       
-#define AST__AXIS_AXISFORMAT_BUFF_LEN 127 
-#define AST__AXIS_GETAXISNORMUNIT_BUFF_LEN 127 
-#define AST__AXIS_GETATTRIB_BUFF_LEN 50
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Axis structure. */
-/* --------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstAxis {
-
-/* Attributes inherited from the parent class. */
-   AstObject object;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   char *label;                  /* Pointer to label string */
-   char *format;                 /* Pointer to format string */
-   char *symbol;                 /* Pointer to symbol string */
-   char *unit;                   /* Pointer to unit string */
-   int digits;                   /* Default digits of precision */
-   int direction;                /* Plot in conventional direction? */
-   double top;                   /* Highest legal axis value */
-   double bottom;                /* Lowest legal axis value */
-} AstAxis;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-
-typedef struct AstAxisVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstObjectVtab object_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   const char *(* AxisAbbrev)( AstAxis *, const char *, const char *, const char *, int * );
-   const char *(* AxisFormat)( AstAxis *, double, int * );
-   const char *(* GetAxisFormat)( AstAxis *, int * );
-   const char *(* GetAxisLabel)( AstAxis *, int * );
-   const char *(* GetAxisSymbol)( AstAxis *, int * );
-   const char *(* GetAxisUnit)( AstAxis *, int * );
-   const char *(* GetAxisNormUnit)( AstAxis *, int * );
-   double (* AxisGap)( AstAxis *, double, int *, int * );
-   double (* AxisDistance)( AstAxis *, double, double, int * );
-   double (* AxisOffset)( AstAxis *, double, double, int * );
-   int (* AxisIn)( AstAxis *, double, double, double, int, int * );
-   int (* AxisFields)( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-   int (* AxisUnformat)( AstAxis *, const char *, double *, int * );
-   int (* GetAxisDigits)( AstAxis *, int * );
-   int (* GetAxisDirection)( AstAxis *, int * );
-   int (* TestAxisDigits)( AstAxis *, int * );
-   int (* TestAxisDirection)( AstAxis *, int * );
-   int (* TestAxisFormat)( AstAxis *, int * );
-   int (* TestAxisLabel)( AstAxis *, int * );
-   int (* TestAxisSymbol)( AstAxis *, int * );
-   int (* TestAxisUnit)( AstAxis *, int * );
-   int (* TestAxisNormUnit)( AstAxis *, int * );
-   void (* AxisNorm)( AstAxis *, double *, int * );
-   void (* AxisOverlay)( AstAxis *, AstAxis *, int * );
-   void (* ClearAxisDigits)( AstAxis *, int * );
-   void (* ClearAxisDirection)( AstAxis *, int * );
-   void (* ClearAxisFormat)( AstAxis *, int * );
-   void (* ClearAxisLabel)( AstAxis *, int * );
-   void (* ClearAxisSymbol)( AstAxis *, int * );
-   void (* ClearAxisUnit)( AstAxis *, int * );
-   void (* SetAxisDigits)( AstAxis *, int, int * );
-   void (* SetAxisDirection)( AstAxis *, int, int * );
-   void (* SetAxisFormat)( AstAxis *, const char *, int * );
-   void (* SetAxisLabel)( AstAxis *, const char *, int * );
-   void (* SetAxisSymbol)( AstAxis *, const char *, int * );
-   void (* SetAxisUnit)( AstAxis *, const char *, int * );
-
-   double (* GetAxisTop)( AstAxis *, int * );
-   int (* TestAxisTop)( AstAxis *, int * );
-   void (* ClearAxisTop)( AstAxis *, int * );
-   void (* SetAxisTop)( AstAxis *, double, int * );
-
-   double (* GetAxisBottom)( AstAxis *, int * );
-   int (* TestAxisBottom)( AstAxis *, int * );
-   void (* ClearAxisBottom)( AstAxis *, int * );
-   void (* SetAxisBottom)( AstAxis *, double, int * );
-
-} AstAxisVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstAxisGlobals {
-   AstAxisVtab Class_Vtab;
-   int Class_Init;
-   char GetDefaultFormat_Buff[ AST__AXIS_GETDEFAULTFORMAT_BUFF_LEN + 1 ];  
-   char AxisFormat_Buff[ AST__AXIS_AXISFORMAT_BUFF_LEN + 1 ];  
-   char GetAxisNormUnit_Buff[ AST__AXIS_GETAXISNORMUNIT_BUFF_LEN + 1 ];  
-   char GetAttrib_Buff[ AST__AXIS_GETATTRIB_BUFF_LEN + 1 ];
-} AstAxisGlobals;
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Axis)             /* Check class membership */
-astPROTO_ISA(Axis)               /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstAxis *astAxis_( const char *, int *, ...);
-#else
-AstAxis *astAxisId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstAxis *astInitAxis_( void *, size_t, int, AstAxisVtab *, const char *, int * );
-
-/* Vtab initialiser. */
-void astInitAxisVtab_( AstAxisVtab *, const char *, int * );
-
-/* Loader. */
-AstAxis *astLoadAxis_( void *, size_t, AstAxisVtab *, const char *,
-                       AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitAxisGlobals_( AstAxisGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-const char *astAxisFormat_( AstAxis *, double, int * );
-int astAxisUnformat_( AstAxis *, const char *, double *, int * );
-void astAxisNorm_( AstAxis *, double *, int * );
-
-#if defined(astCLASS)            /* Protected */
-const char *astAxisAbbrev_( AstAxis *, const char *, const char *, const char *, int * );
-const char *astGetAxisFormat_( AstAxis *, int * );
-const char *astGetAxisLabel_( AstAxis *, int * );
-const char *astGetAxisSymbol_( AstAxis *, int * );
-const char *astGetAxisUnit_( AstAxis *, int * );
-const char *astGetAxisNormUnit_( AstAxis *, int * );
-double astAxisGap_( AstAxis *, double, int *, int * );
-double astAxisDistance_( AstAxis *, double, double, int * );
-double astAxisOffset_( AstAxis *, double, double, int * );
-int astGetAxisDigits_( AstAxis *, int * );
-int astGetAxisDirection_( AstAxis *, int * );
-int astTestAxisDigits_( AstAxis *, int * );
-int astTestAxisDirection_( AstAxis *, int * );
-int astAxisFields_( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-int astAxisIn_( AstAxis *, double, double, double, int, int * );
-int astTestAxisFormat_( AstAxis *, int * );
-int astTestAxisLabel_( AstAxis *, int * );
-int astTestAxisSymbol_( AstAxis *, int * );
-int astTestAxisUnit_( AstAxis *, int * );
-int astTestAxisNormUnit_( AstAxis *, int * );
-void astAxisOverlay_( AstAxis *, AstAxis *, int * );
-void astClearAxisDigits_( AstAxis *, int * );
-void astClearAxisDirection_( AstAxis *, int * );
-void astClearAxisFormat_( AstAxis *, int * );
-void astClearAxisLabel_( AstAxis *, int * );
-void astClearAxisSymbol_( AstAxis *, int * );
-void astClearAxisUnit_( AstAxis *, int * );
-void astSetAxisDigits_( AstAxis *, int, int * );
-void astSetAxisDirection_( AstAxis *, int, int * );
-void astSetAxisFormat_( AstAxis *, const char *, int * );
-void astSetAxisLabel_( AstAxis *, const char *, int * );
-void astSetAxisSymbol_( AstAxis *, const char *, int * );
-void astSetAxisUnit_( AstAxis *, const char *, int * );
-
-double astGetAxisTop_( AstAxis *, int * );
-int astTestAxisTop_( AstAxis *, int * );
-void astClearAxisTop_( AstAxis *, int * );
-void astSetAxisTop_( AstAxis *, double, int * );
-
-double astGetAxisBottom_( AstAxis *, int * );
-int astTestAxisBottom_( AstAxis *, int * );
-void astClearAxisBottom_( AstAxis *, int * );
-void astSetAxisBottom_( AstAxis *, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckAxis(this) astINVOKE_CHECK(Axis,this,0)
-#define astVerifyAxis(this) astINVOKE_CHECK(Axis,this,1)
-
-/* Test class membership. */
-#define astIsAAxis(this) astINVOKE_ISA(Axis,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astAxis astINVOKE(F,astAxis_)
-#else
-#define astAxis astINVOKE(F,astAxisId_)
-#endif
-
-#if defined(astCLASS)            /* Protected. */
-
-/* Initialiser. */
-#define astInitAxis(mem,size,init,vtab,name) \
-astINVOKE(O,astInitAxis_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitAxisVtab(vtab,name) astINVOKE(V,astInitAxisVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadAxis(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadAxis_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckAxis to validate Axis pointers before
-   use. This provides a contextual error report if a pointer to the
-   wrong sort of object is supplied. */
-#define astAxisFormat(this,value) \
-astINVOKE(V,astAxisFormat_(astCheckAxis(this),value,STATUS_PTR))
-#define astAxisNorm(this,value) \
-astINVOKE(V,astAxisNorm_(astCheckAxis(this),value,STATUS_PTR))
-#define astAxisUnformat(this,string,value) \
-astINVOKE(V,astAxisUnformat_(astCheckAxis(this),string,value,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astAxisAbbrev(this,fmt,str1,str2) \
-astINVOKE(V,astAxisAbbrev_(astCheckAxis(this),fmt,str1,str2,STATUS_PTR))
-#define astAxisGap(this,gap,ntick) \
-astINVOKE(V,astAxisGap_(astCheckAxis(this),gap,ntick,STATUS_PTR))
-#define astAxisFields(this,fmt,str,maxfld,fields,nc,val) \
-astINVOKE(V,astAxisFields_(astCheckAxis(this),fmt,str,maxfld,fields,nc,val,STATUS_PTR))
-#define astAxisIn(this,lo,hi,val,closed) \
-astINVOKE(V,astAxisIn_(astCheckAxis(this),lo,hi,val,closed,STATUS_PTR))
-#define astAxisDistance(this,v1,v2) \
-astINVOKE(V,astAxisDistance_(astCheckAxis(this),v1,v2,STATUS_PTR))
-#define astAxisOffset(this,v1,dist) \
-astINVOKE(V,astAxisOffset_(astCheckAxis(this),v1,dist,STATUS_PTR))
-#define astAxisOverlay(template,result) \
-astINVOKE(V,astAxisOverlay_(astCheckAxis(template),astCheckAxis(result),STATUS_PTR))
-#define astClearAxisDigits(this) \
-astINVOKE(V,astClearAxisDigits_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisDirection(this) \
-astINVOKE(V,astClearAxisDirection_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisFormat(this) \
-astINVOKE(V,astClearAxisFormat_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisLabel(this) \
-astINVOKE(V,astClearAxisLabel_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisSymbol(this) \
-astINVOKE(V,astClearAxisSymbol_(astCheckAxis(this),STATUS_PTR))
-#define astClearAxisUnit(this) \
-astINVOKE(V,astClearAxisUnit_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisDigits(this) \
-astINVOKE(V,astGetAxisDigits_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisDirection(this) \
-astINVOKE(V,astGetAxisDirection_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisFormat(this) \
-astINVOKE(V,astGetAxisFormat_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisLabel(this) \
-astINVOKE(V,astGetAxisLabel_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisSymbol(this) \
-astINVOKE(V,astGetAxisSymbol_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisUnit(this) \
-astINVOKE(V,astGetAxisUnit_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisNormUnit(this) \
-astINVOKE(V,astGetAxisNormUnit_(astCheckAxis(this),STATUS_PTR))
-#define astSetAxisDigits(this,digits) \
-astINVOKE(V,astSetAxisDigits_(astCheckAxis(this),digits,STATUS_PTR))
-#define astSetAxisDirection(this,direction) \
-astINVOKE(V,astSetAxisDirection_(astCheckAxis(this),direction,STATUS_PTR))
-#define astSetAxisFormat(this,format) \
-astINVOKE(V,astSetAxisFormat_(astCheckAxis(this),format,STATUS_PTR))
-#define astSetAxisLabel(this,label) \
-astINVOKE(V,astSetAxisLabel_(astCheckAxis(this),label,STATUS_PTR))
-#define astSetAxisSymbol(this,symbol) \
-astINVOKE(V,astSetAxisSymbol_(astCheckAxis(this),symbol,STATUS_PTR))
-#define astSetAxisUnit(this,unit) \
-astINVOKE(V,astSetAxisUnit_(astCheckAxis(this),unit,STATUS_PTR))
-#define astTestAxisDigits(this) \
-astINVOKE(V,astTestAxisDigits_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisDirection(this) \
-astINVOKE(V,astTestAxisDirection_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisFormat(this) \
-astINVOKE(V,astTestAxisFormat_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisLabel(this) \
-astINVOKE(V,astTestAxisLabel_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisSymbol(this) \
-astINVOKE(V,astTestAxisSymbol_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisUnit(this) \
-astINVOKE(V,astTestAxisUnit_(astCheckAxis(this),STATUS_PTR))
-#define astTestAxisNormUnit(this) \
-astINVOKE(V,astTestAxisNormUnit_(astCheckAxis(this),STATUS_PTR))
-
-#define astClearAxisTop(this) \
-astINVOKE(V,astClearAxisTop_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisTop(this) \
-astINVOKE(V,astGetAxisTop_(astCheckAxis(this),STATUS_PTR))
-#define astSetAxisTop(this,top) \
-astINVOKE(V,astSetAxisTop_(astCheckAxis(this),top,STATUS_PTR))
-#define astTestAxisTop(this) \
-astINVOKE(V,astTestAxisTop_(astCheckAxis(this),STATUS_PTR))
-
-#define astClearAxisBottom(this) \
-astINVOKE(V,astClearAxisBottom_(astCheckAxis(this),STATUS_PTR))
-#define astGetAxisBottom(this) \
-astINVOKE(V,astGetAxisBottom_(astCheckAxis(this),STATUS_PTR))
-#define astSetAxisBottom(this,bottom) \
-astINVOKE(V,astSetAxisBottom_(astCheckAxis(this),bottom,STATUS_PTR))
-#define astTestAxisBottom(this) \
-astINVOKE(V,astTestAxisBottom_(astCheckAxis(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/box.c b/ast-5.3-1/box.c
deleted file mode 100644
index 0bfc0fb..0000000
--- a/ast-5.3-1/box.c
+++ /dev/null
@@ -1,5202 +0,0 @@
-/*
-*class++
-*  Name:
-*     Box
-
-*  Purpose:
-*     A box region with sides parallel to the axes of a Frame.
-
-*  Constructor Function:
-c     astBox
-f     AST_BOX
-
-*  Description:
-*     The Box class implements a Region which represents a box with sides 
-*     parallel to the axes of a Frame (i.e. an area which encloses a given 
-*     range of values on each axis). A Box is similar to an Interval, the
-*     only real difference being that the Interval class allows some axis
-*     limits to be unspecified. Note, a Box will only look like a box if
-*     the Frame geometry is approximately flat. For instance, a Box centred
-*     close to a pole in a SkyFrame will look more like a fan than a box
-*     (the Polygon class can be used to create a box-like region close to a 
-*     pole).
-
-*  Inheritance:
-*     The Box class inherits from the Region class.
-
-*  Attributes:
-*     The Box class does not define any new attributes beyond
-*     those which are applicable to all Regions.
-
-*  Functions:
-c     The Box class does not define any new functions beyond those
-f     The Box class does not define any new routines beyond those
-*     which are applicable to all Regions.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008-2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-MAR-2004 (DSB):
-*        Original version.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     5-JUN-2007 (DSB):
-*        Improve astSimplify algorithm.
-*     6-JUN-2007 (DSB):
-*        Change the iterating algorithm in MakeGrid so that it uses
-*        pixel index rather than axis value. This is more robust against 
-*        rounding errors.
-*     9-OCT-2007 (DSB):
-*        - Fix bug in RegBaseMesh that could cause incorrect meshes for 2D
-*        Boxes.
-*        - In RegBaseMesh, use flat geometry if all axes come from simple
-*        frames or from 1-dimensional specialist frames.
-*     26-MAY-2008 (DSB):
-*        Fix bug in RegBaseMesh that caused an error to be reported if
-*        the Box occupies a single point.
-*     20-JAN-2009 (DSB):
-*        Over-ride astRegBasePick.
-*     26-JAN-2009 (DSB):
-*        Over-ride astMapMerge.
-*     12-JUL-2009 (DSB):
-*        Modify Simplify so that if a Box can be split into two
-*        simpler components and then joined together into a Prism, it
-*        does so. This is because being able to express a Region in 
-*        its current Frame is more important than having the simplest
-*        possible structure. 
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Box
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "cmpframe.h"            /* Compound Frames */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "box.h"                 /* Interface definition for this class */
-#include "polygon.h"             /* Interface definition for this class */
-#include "mapping.h"             /* Position mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Axis permutation Mappings */
-#include "interval.h"            /* Axis interval regions */
-#include "nullregion.h"          /* Empty regions */
-#include "pointlist.h"           /* List of points in a Frame */
-#include "prism.h"               /* Extruded regions */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setnegated)( AstRegion *, int, int * );
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_clearnegated)( AstRegion *, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_setunc)( AstRegion *, AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
- 
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Box)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Box,Class_Init)
-#define class_vtab astGLOBAL(Box,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstBoxVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstBox *astBoxId_( void *, int, const double[], const double[], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstBox *BestBox( AstFrame *, AstPointSet *, AstRegion *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseGrid( AstRegion *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *MergeBox( AstBox *, AstRegion *, int, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static double *GeoCorner( AstFrame *, int, double *, double *, double *, int * );
-static double *GeoLengths( AstFrame *, int, double *, double *, double *, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static double SetShrink( AstBox *, double, int * );
-static int GetObjSize( AstObject *, int * );
-static int MakeGrid( int, double **, int, double *, double *, int, int, double, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void BoxPoints( AstBox *, double *, double *, int *);
-static void Cache( AstBox *, int, int * );
-static void ClearClosed( AstRegion *, int * );
-static void ClearNegated( AstRegion *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetClosed( AstRegion *, int, int * );
-static void SetNegated( AstRegion *, int, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void SetUnc( AstRegion *, AstRegion *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void BoxPoints( AstBox *this, double *centre, double *corner, int *status) {
-/*
-*+
-*  Name:
-*     astBoxPoints
-
-*  Purpose:
-*     Return the defining points of a Box.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "box.h"
-*     astBoxPoints( AstBox *this, double *centre, double *corner )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns the axis values at the points defining the
-*     supplied Box.
-
-*  Parameters:
-*     this
-*        Pointer to the Box.
-*     centre
-*        A pointer to an array in which to return the centre position of 
-*        the Box, in the base Frame of the encapsulated FrameSet.
-*     corner
-*        A pointer to an array in which to return the position of a corner
-*        of the Box, in the base Frame of the encapsulated FrameSet.
-
-*  Notes:
-*     - It is assumed that the length of the supplied arrays is at least
-*     equal to the number of axes in the base frame of the encapsulated
-*     FrameSet.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset;        
-   double **ptr;
-   int nc;
-   int i;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the PointSet holding the points defining the Box. */
-   pset = ((AstRegion *) this)->points;
-
-/* Get a pointer to the PointSet's data arrays. */
-   ptr = astGetPoints( pset );
-
-/* See how many axes each point in the PointSet has. */
-   nc = astGetNcoord( pset );
-
-/* Copy the centre and corner positions form the PointSet into the
-   supplied arrays. */
-   for( i = 0; i < nc; i++ ) {
-      centre[ i ] = ptr[ i ] [ 0 ];
-      corner[ i ] = ptr[ i ] [ 1 ];
-   }
-
-}
-
-static void ClearClosed( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ClearClosed
-
-*  Purpose:
-*     Clear the Closed attribute of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void ClearClosed( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the protected astClearClosed
-*     method inherited from the Region class).
-
-*  Description:
-*     This function clears the Closed attribute of the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int old;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the original attribute value */
-   old = astGetClosed( this );
-
-/* Invoke the clear method inherited from the parent Region class */
-   (*parent_clearclosed)( this, status );
-
-/* If the new value is not the same as the old value, inidcatethat we
-   need to re-calculate the cached information in the Box. */
-   if( astGetClosed( this ) != old ) astResetCache( this );
-}
-
-static void ClearNegated( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ClearNegated
-
-*  Purpose:
-*     Clear the Negated attribute of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void ClearNegated( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the protected astClearNegated
-*     method inherited from the Region class).
-
-*  Description:
-*     This function clears the Negated attribute of the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int old;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the original attribute value */
-   old = astGetNegated( this );
-
-/* Invoke the clear method inherited from the parent Region class */
-   (*parent_clearnegated)( this, status );
-
-/* If the new value is not the same as the old value, inidcatethat we
-   need to re-calculate the cached information in the Box. */
-   if( astGetNegated( this ) != old ) astResetCache( this );
-}
-
-static AstBox *BestBox( AstFrame *frm, AstPointSet *mesh, AstRegion *unc, int *status ){
-/*
-*  Name:
-*     BestBox
-
-*  Purpose:
-*     Find the best fitting Box through a given mesh of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstBox *BestBox( AstFrame *frm, AstPointSet *mesh, AstRegion *unc, int *status )
-
-*  Class Membership:
-*     Box member function 
-
-*  Description:
-*     This function finds the best fitting Box through a given mesh of points.
-
-*  Parameters:
-*     frm
-*        Defines the geometry of the axes.
-*     mesh
-*        Pointer to a PointSet holding the mesh of points. They are
-*        assumed to be in the Frame represented by "unc".
-*     unc
-*        A Region representing the uncertainty associated with each point
-*        on the mesh.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the best fitting Region. It will inherit the positional
-*     uncertainty and Frame represented by "unc".
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   AstBox *result; 
-   double **ptr;
-   double *axval;
-   double *blbnd;
-   double *bubnd;
-   double *lbnd;
-   double *p;
-   double *ubnd;
-   double eps;
-   double lb;
-   double lim2;
-   double lim;
-   double liml;
-   double limu;
-   double mxl;
-   double mxu;
-   double org;
-   double sxl2;
-   double sxl;
-   double sxu2;
-   double sxu;
-   double ub;
-   double p0;
-   double d;
-   double dinc;
-   int ic;
-   int ip;
-   int nc;
-   int np;
-   int nxl;
-   int nxu;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get no. of points in the mesh, and the number of axis values per point. */
-   np = astGetNpoint( mesh );
-   nc = astGetNcoord( mesh );
-
-/* Get pointers to the axis values. */
-   ptr = astGetPoints( mesh );   
-
-/* Allocate work space. */
-   lbnd = astMalloc( sizeof( double )*(size_t) nc );
-   ubnd = astMalloc( sizeof( double )*(size_t) nc );
-
-   blbnd = astMalloc( sizeof( double )*(size_t) nc );
-   bubnd = astMalloc( sizeof( double )*(size_t) nc );
-
-   axval = astMalloc( sizeof( double )*(size_t) np );
-
-/* Check pointers can be used safely */
-   if( axval ) {
-
-/* Get the bounding box of the uncertainty region. */
-      astGetRegionBounds( unc, lbnd, ubnd ); 
-
-/* We fit the box one axis at a time. */
-      for( ic = 0; ic < nc; ic++ ) {
-
-/* Find the upper and lower limits of the supplied mesh on this axis. */
-         org = ptr[ ic ][ 0 ];
-         lb = 0.0;
-         ub = 0.0;
-         p = ptr[ ic ] + 1;
-         p0 = org;
-         d = 0.0;
-         axval[ 0 ] = org;
-         for( ip = 1; ip < np; ip++, p++ ) {
-            dinc = astAxDistance( frm, ic + 1, p0, *p );        
-            if( dinc != AST__BAD ) {   
-               d += dinc;
-               if( d < lb ) lb = d;
-               if( d > ub ) ub = d;
-            }
-            axval[ ip ] = org + d;
-            p0 = *p;
-         }
-
-/* Now convert these relative offsets to actual axis values. */
-         lb += org;
-         ub += org;
-
-/* Now scan the list of axis values again, looking for values which are
-   "close to" either lower or upper bound. These will be the points which
-   are on the faces of the box which are orthogonal to the current axis. Here 
-   "close to" means within 20 times the uncertainty associated with this 
-   axis, or one tenth of the box size (which ever is smaller). We find the 
-   mean and standard deviation of such "close" values, and then do a
-   single sigma-clipping iteration (at 3-sigma) to get rid of any values 
-   which are on one of the other faces of the box. */
-
-         lim = 20*( ubnd[ ic ] - lbnd[ ic ] );
-         lim2 = 0.1*( ub - lb );
-         if( lim2 < lim ) lim = lim2;
-         
-         sxl = 0.0;
-         sxl2 = 0.0;
-         nxl = 0;
-         sxu = 0.0;
-         sxu2 = 0.0;
-         nxu = 0;
-
-         p = axval;
-         for( ip = 0; ip < np; ip++, p++ ) {
-            if( *p != AST__BAD ) {
-               if( fabs( *p - lb ) <= lim ) {
-                  sxl += *p;
-                  sxl2 += (*p)*(*p);
-                  nxl++;
-               } else if( fabs( *p - ub ) <= lim ) {
-                  sxu += *p;
-                  sxu2 += (*p)*(*p);
-                  nxu++;
-               }
-            }
-         }
-
-         if( nxl > 0 ) {
-            mxl = sxl/nxl;
-            liml = sxl2/nxl - mxl*mxl;
-            eps = 100*mxl*DBL_EPSILON;
-            if( liml < eps*eps ) {
-               liml = eps;
-            } else {
-               liml = 3.0*sqrt( liml );
-            }
-         } else {
-            mxl = lb;
-            liml = 0.0;
-         }
-
-         if( nxu > 0 ) {
-            mxu = sxu/nxu;
-            limu = sxu2/nxu - mxu*mxu;
-            eps = 100*mxu*DBL_EPSILON;
-            if( limu < eps*eps ) {
-               limu = eps;
-            } else {
-               limu = 3.0*sqrt( limu );
-            }
-
-         } else {
-            mxu = ub;
-            limu = 0.0;
-         }
-
-         sxl = 0.0;
-         nxl = 0;
-         sxu = 0.0;
-         nxu = 0;
-
-         p = axval;
-         for( ip = 0; ip < np; ip++, p++ ) {
-            if( *p != AST__BAD ) {
-               if( fabs( *p - mxl ) <= liml ) {
-                  sxl += *p;
-                  nxl++;
-               } else if( fabs( *p - mxu ) <= limu ) {
-                  sxu += *p;
-                  nxu++;
-               }
-            }
-         }
-
-         if( nxl > 0 ) {
-            mxl = sxl/nxl;
-         } else {
-            mxl = lb;
-         }
-
-         if( nxu > 0 ) {
-            mxu = sxu/nxu;
-         } else {
-            mxu = ub;
-         }
-
-/* The resulting mean axis values are the bounds of the required box on
-   the current axis.*/
-         blbnd[ ic ] = mxl;
-         bubnd[ ic ] = mxu;
-      }
-
-/* Create the returned Box. */
-      result = astBox( unc, 1, blbnd, bubnd, unc, "", status );
-   }
-
-/* Free resources */
-   lbnd = astFree( lbnd );
-   ubnd = astFree( ubnd );
-   blbnd = astFree( blbnd );
-   bubnd = astFree( bubnd );
-   axval = astFree( axval );
-
-/* Return NULL if anything went wrong. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
-   return result;
-}
-
-static void Cache( AstBox *this, int lohi, int *status ){
-/*
-*  Name:
-*     Cache
-
-*  Purpose:
-*     Calculate intermediate values and cache them in the Box structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void Cache( AstRegion *this, int lohi, int *status )
-
-*  Class Membership:
-*     Box member function 
-
-*  Description:
-*     This function uses the PointSet stored in the parent Region to calculate 
-*     some intermediate values which are useful in other methods. These
-*     values are stored within the Box structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Box.
-*     lohi
-*        Are the lo and hi arrays to be used?
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstPointSet *pset;
-   AstRegion *unc;  
-   double **ptr;
-   double *centre;
-   double *extent;
-   double *hi;
-   double *lbnd_unc;
-   double *geolen;
-   double *lo;
-   double *shextent;
-   double *ubnd_unc;
-   double wid;
-   int i;
-   int nc;
-
-/* Check the global error status. Also return if the currently cached
-   information is usable. */
-   if ( !astOK || !this->stale ) return;
-
-/* Get the number of base Frame axes. */
-   nc = astGetNin( ((AstRegion *)this)->frameset );
-
-/* Allocate memory to store the half-width of the box on each axis. */
-   extent = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-
-/* Allocate memory to store the half-width of the box on each axis,
-   taking account of the current shrink factor stored in this->shrink. */
-   shextent = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-
-/* Allocate memory to store the centre of the box on each axis. */
-   centre = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-
-/* Allocate memory to store the high and low bounds taking account of the
-   shrink factor. */
-   hi = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-   lo = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-
-/* Memory to store the uncertainty bounding box */
-   lbnd_unc = astMalloc( sizeof( double)*(size_t) nc );
-   ubnd_unc = astMalloc( sizeof( double)*(size_t) nc );
-
-/* Memory to store the geodesic half-dimensions of the box. */
-   geolen = astMalloc( sizeof( double)*(size_t) nc );
-
-/* Get pointers to the coordinate data in the parent Region structure. */
-   pset = ((AstRegion *) this)->points;
-   ptr = astGetPoints( pset );
-
-/* Check pointers can be used safely. */
-   if( ptr ) {
-
-/* Store the centre and corner axis values. */
-      for( i = 0; i < nc; i++ ) {
-         centre[ i ] = ptr[ i ][ 0 ];
-         hi[ i ] = ptr[ i ][ 1 ];
-      }
-
-/* Calculate the geodesic half-dimensions of the box. */
-      frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-      GeoLengths( frm, nc, centre, hi, geolen, status );
-      frm = astAnnul( frm );
-
-/* Calculate the half-width and store in the above array. Also store the
-   shrunk half-widths, and the shrunk lower and upper bounds. */
-      for( i = 0; i < nc; i++ ) {
-         extent[ i ] = fabs( ptr[ i ][ 1 ] - centre[ i ] );
-         shextent[ i ] = extent[ i ]*this->shrink;
-         lo[ i ] = centre[ i ] - shextent[ i ];
-         hi[ i ] = centre[ i ] + shextent[ i ];
-      }
-
-/* Store the pointers to these arrays in the Box structure, and indicate
-   the information is usable. */
-      if( astOK ) {
-         astFree( this->extent );
-         astFree( this->centre );
-         astFree( this->shextent );
-         astFree( this->lo );
-         astFree( this->hi );
-         astFree( this->geolen );
-         this->extent = extent;
-         this->centre = centre;
-         this->shextent = shextent;
-         this->lo = lo;
-         this->hi = hi;
-         this->geolen = geolen;
-         this->stale = 0;
-         extent = NULL;
-         centre = NULL;
-         shextent = NULL;
-         lo = NULL;
-         hi = NULL;
-         geolen = NULL;
-      }
-
-/* If lo and hi values are to be used, ensure they are expanded to at
-   least the width of an uncertainty box. */
-      if( lohi ) {
-
-/* If we are dealing with an unnegated closed Box or a negated open
-   Box, ensure that the box does not have zero width on any axis. We do
-   this by ensuring that the shrunk extent on all axes is at least half the 
-   width  of the bounding box of the uncertainty Region. */
-         if(  astGetNegated( this ) != astGetClosed( this ) ) {
-
-/* Get the bounding box of the uncertainty Region in the base Frame of
-   the supplied Box. */
-            unc = astGetUncFrm( this, AST__BASE );
-            astGetRegionBounds( unc, lbnd_unc, ubnd_unc ); 
-
-/* Ensure the shrunk extents are at least half the width of the uncertainty 
-   bounding box. */
-            for ( i = 0; i < nc; i++ ) {
-               wid = 0.5*( ubnd_unc[ i ] - lbnd_unc[ i ] );
-               if( this->shextent[ i ] < wid ) {
-                  this->shextent[ i ] = wid;
-                  this->lo[ i ] = this->centre[ i ] - wid;
-                  this->hi[ i ] = this->centre[ i ] + wid;
-               }
-            }
-
-/* Free resources. */
-            unc = astAnnul( unc );
-         }
-      }
-   }
-
-/* Annul the memory allocated above if an error occurred. */
-   if( !astOK ) {
-      extent = astFree( extent );
-      centre = astFree( centre );
-      shextent = astFree( shextent );
-      lo = astFree( lo );
-      hi = astFree( hi );
-   }
-
-/* Free other resources */
-   lbnd_unc = astFree( lbnd_unc );
-   ubnd_unc = astFree( ubnd_unc );
-
-}
-
-static double *GeoCorner( AstFrame *frm, int nc, double *centre, 
-                          double *geolen, double *corner, int *status ){
-/*
-*  Name:
-*     GeoCorner
-
-*  Purpose:
-*     Find the corner position implied by the supplied centre position
-*     and geodesic box dimensions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     double *GeoCorner( AstFrame *frm, int nc, double *centre, 
-*                        double *geolen, double *corner, int *status )
-
-*  Class Membership:
-*     Box member function 
-
-*  Description:
-*     This function returns the corner position that is implied by the
-*     supplied centre position and geodesic box dimensions. The returned
-*     corner position is found by offsetting away from the supplied
-*     centre position along each axis in turn, by the geodesic distance
-*     specified in "geolen".
-
-*  Parameters:
-*     frm
-*        Defines the geometry of the axes.
-*     nc
-*        The number of Frame axes.
-*     centre
-*        Pointer to an array holding the box centre axis values.
-*     geolen
-*        Pointer to an array holding the geodesic distance corresponding
-*        to each half axis of the box.
-*     corner
-*        Pointer to an array in which to store the axis values at the
-*        returned corner position. If this is NULL a new array is
-*        allocated and a pointer to it returned as the function value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the array holding the corner axis values. If a non-NULL
-*     value is supplied for parameter "corner", then the same value will
-*     be returned as the function value. Otherwise, the returned value
-*     will be a pointer to a newly allocated array that should be freed
-*     using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
-   double *p1;
-   double *p2;
-   double *p3;
-   double *pt;
-   double *result; 
-   double *work1;
-   double *work2;
-   double off;
-   double off0;
-   int i;            
-
-/* Initialise */
-   result = corner;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Ensure we have a results array. */
-   if( ! result ) result = astMalloc( sizeof( double )*nc );
-
-/* Also allocate two work arrays to hold a single position. */
-   work1 = astMalloc( sizeof( double )*nc );
-   work2 = astMalloc( sizeof( double )*nc );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Select which array to use as the initial results array so that the
-   final results end up in the returned array. */
-      if( ( nc % 2 ) == 0 ) {
-         p1 = result;
-         p2 = work1;
-         p3 = work2;
-      } else {
-         p1 = work2;
-         p2 = work1;
-         p3 = result;
-      }
-
-/* Initialise the current corner position to be at the centre of the box. */
-      for( i = 0; i < nc; i++ ) p1[ i ] = centre[ i ];
-
-/* Loop round offsetting along each side of the box. */
-      for( i = 0; i < nc; i++ ) {
-
-/* In the p2 array put the axis values at a point which is offset 
-   slightly along the current axis away from the current "corner" 
-   position (p1). */
-         memcpy( p2, p1, sizeof( double )*nc );
-
-         if( geolen[ i ] != 0.0 ) {
-            off = 0.0001*fabs( geolen[ i ] );
-         } else {
-            off = 1.0E-6;
-         }
-
-         off0 = fabs( 1.0E-10*centre[ i ] );
-         if( off < off0 ) off = off0;
-         p2[ i ] += off;
-
-/* Offset away from the current corner position (p1) towards the position
-   found above (p2), moving by the geodesic distance supplied for this axis. 
-   Put the resulting axis values in p3. */
-         astOffset( frm, p1, p2, geolen[ i ], p3 );
-
-/* Swap the p3 and p1 arrays so that the offset position found above (p3)
-   becomes the starting position (p1) for the next offset. */
-         pt = p1;
-         p1 = p3;
-         p3 = pt;
-      }
-   }
-
-/* Free resources */
-   work1 = astFree( work1 );
-   work2 = astFree( work2 );
-
-/* Return the result */
-   return result;
-}
-
-static double *GeoLengths( AstFrame *frm, int nc, double *centre, 
-                           double *corner, double *geolen, int *status ){
-/*
-*  Name:
-*     GeoLengths
-
-*  Purpose:
-*     Find the geodesic dimensions of a box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*      double *GeoLengths( AstFrame *frm, int nc, double *centre, 
-*                          double *corner, double *geolen, int *status )
-
-*  Class Membership:
-*     Box member function 
-
-*  Description:
-*     This function returns half the geodesic distance along each edge of
-*     the supplied box.
-
-*  Parameters:
-*     frm
-*        Defines the geometry of the axes.
-*     nc
-*        The number of Frame axes.
-*     centre
-*        Pointer to an array holding rhe box centre axis values.
-*     corner
-*        Pointer to an array holding the axis values at the corner 
-*        position. 
-*     geolen
-*        Pointer to an array in which to return the geodesic distances 
-*        corresponding to each half axis of the box. If this is NULL a 
-*        new array is allocated and a pointer to it returned as the 
-*        function value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the array holding the geodesic half-dimensions of the box. 
-*     If a non-NULL value is supplied for parameter "corner", then the same 
-*     value will be returned as the function value. Otherwise, the 
-*     returned value will be a pointer to a newly allocated array that 
-*     should be freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
-   double *result; 
-   double *p1;
-   double *p2;
-   int i;            
-
-/* Initialise */
-   result = geolen;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Ensure we have a results array. */
-   if( ! result ) result = astMalloc( sizeof( double )*nc );
-
-/* Also allocate two work arrays to hold a single position. */
-   p1 = astMalloc( sizeof( double )*nc );
-   p2 = astMalloc( sizeof( double )*nc );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Initialise the coords as the start and end of the line. */
-      memcpy( p1, centre, sizeof( double )*nc );
-      memcpy( p2, centre, sizeof( double )*nc );
-
-/* Loop round finding the geodesic half-length of each side of the box. */
-      for( i = 0; i < nc; i++ ) {
-
-/* The end of the line is the same as the start of the line, except that
-   it has the corner value for the current axis. */
-         p2[ i ] = corner[ i ];
-
-/* Find and return the geodesic distance along the line (i.e. from p1 to
-   p2). */
-         result[ i ] = astDistance( frm, p1, p2 );
-
-/* The start of the next line wil lbe at the end of the current line. */
-         p1[ i ] = corner[ i ];
-      }
-   }
-
-/* Free resources */
-   p1 = astFree( p1 );
-   p2 = astFree( p2 );
-
-/* Return the result */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     Box member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied Box,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Box.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstBox *this;         /* Pointer to Box structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the Box structure. */
-   this = (AstBox *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astTSizeOf( this->extent );  
-   result += astTSizeOf( this->shextent );
-   result += astTSizeOf( this->centre );  
-   result += astTSizeOf( this->lo );      
-   result += astTSizeOf( this->hi );      
-   result += astTSizeOf( this->geolen );      
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-void astInitBoxVtab_(  AstBoxVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitBoxVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Box.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void astInitBoxVtab( AstBoxVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Box vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Box class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsABox) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->BoxPoints = BoxPoints;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_setnegated = region->SetNegated;
-   region->SetNegated = SetNegated;
-
-   parent_setunc = region->SetUnc;
-   region->SetUnc = SetUnc;
-
-   parent_setclosed = region->SetClosed;
-   region->SetClosed = SetClosed;
-
-   parent_clearnegated = region->ClearNegated;
-   region->ClearNegated = ClearNegated;
-
-   parent_clearclosed = region->ClearClosed;
-   region->ClearClosed = ClearClosed;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_resetcache = region->ResetCache;
-   region->ResetCache = ResetCache;
-
-   mapping->MapMerge = MapMerge;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   region->RegBaseGrid = RegBaseGrid;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegBasePick = RegBasePick;
-   region->RegBaseBox = RegBaseBox;
-   region->RegPins = RegPins;
-   region->RegTrace = RegTrace;
-   region->RegCentre = RegCentre;
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Box", "Axis intervals" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MakeGrid( int naxes, double **ptr, int ip, double *lbnd,
-                     double *ubnd, int np_axis, int iaxis, double axval, int *status ){
-/*
-*  Name:
-*     MakeGrid
-
-*  Purpose:
-*     Create a grid covering the entire volume of a specified box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     int MakeGrid( int naxes, double **ptr, int ip, double *lbnd,
-*                   double *ubnd, int np_axis, int iaxis, double axval, int *status )
-
-*  Class Membership:
-*     Box member function 
-
-*  Description:
-*     This function creates an evenly sampled grid covering a given
-*     volume of n-D space, putting the coordinates at the sample points
-*     into a supplied array and returning the number of samples added.
-*     The volume is assumed to have a constant value on a specified axis.
-
-*  Parameters:
-*     naxes
-*        The number of axes.
-*     ptr
-*        Pointer to an array with "naxes" elements. Each element is a
-*        pointer to an array in which to store the values for the axis.
-*     ip
-*        The index of the first point to be added to the "ptr" arrays.
-*     lbnd
-*        Pointer to an array containing the lower axis bounds of the
-*        volume to be sampled.
-*     ubnd
-*        Pointer to an array containing the upper axis bounds of the
-*        volume to be sampled.
-*     np_axis
-*        The number of samples along each axis (except the axis specified
-*        by "iaxis"). The first sample (sample 0) for each axis will be at 
-*        the lower bound given in "lbnd" and the last sample (sample 
-*        "np_axis-1") will be at the upper bound given in "ubnd".
-*     iaxis
-*        The index of an axis which has constant value in the volume.
-*        The values in "lbnd" and "ubnd" are ignored for this axis and all
-*        sample positions will have the axis value given by "axval".
-*     axval
-*        The constant value for the axis with index "iaxis".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of points added to the "ptr" arrays.
-
-*/
-
-/* Local Variables: */
-   double *step;         /* Pointer to array holding axis step sizes */
-   int *maxi;            /* Pointer to array of maximum index values */
-   int *pi;              /* Pointer to array holding current sample indices */
-   int i;                /* Axis index */
-   int ipp;              /* Index of next point */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Allocate memory to hold the max indices on each axis. */
-   maxi = astMalloc( sizeof( int )*(size_t) naxes );
-
-/* Allocate memory to hold the indices of the current position.*/
-   pi = astMalloc( sizeof( int )*(size_t) naxes );
-
-/* Allocate memory to hold the step size for each axis. */
-   step = astMalloc( sizeof( double )*(size_t) naxes );
-   if( astOK ) {
-
-/* For every axis, set up the step size, initialise the current position to 
-   the lower bound, and store a modified upper limit which includes some 
-   safety marging to allow for rounding errors. */
-      for( i = 0; i < naxes; i++ ) {
-         step[ i ] = ( ubnd[ i ] - lbnd[ i ] )/(np_axis-1);
-         pi[ i ] = 0;
-         maxi[ i ] = np_axis - 1;
-      }
-      maxi[ iaxis ] = 0;
-      step[ iaxis ] = 0.0;
-      pi[ iaxis ] = 0;
-
-/* Initialise the index of the next position to store. */
-      ipp = ip;
-
-/* Loop round adding points to the array until the whole volume has been
-   done. */
-      i = 0;
-      while( i < naxes ) {
-
-/* Add the current point to the supplied array,and increment the index of
-   the next point to add. */
-         for( i = 0; i < naxes; i++ ) {
-            if( i == iaxis ) {
-               ptr[ i ][ ipp ] = axval;
-            } else {
-               ptr[ i ][ ipp ] = lbnd[ i ] + pi[ i ]*step[ i ];
-            }
-         }
-         ipp++;      
-
-/* We now move the current position on to the next sample */
-         i = 0;
-         while( i < naxes ) {
-            pi[ i ]++;
-            if( pi[ i ] > maxi[ i ] ) {
-               pi[ i ] = 0;
-               i++;
-            } else {
-               break;
-            }
-         }
-      }
-   } else {
-      ipp = ip;
-   }
-
-/* Free resources. */
-   maxi = astFree( maxi );
-   pi = astFree( pi );
-   step = astFree( step );
-
-/* Return the result. */
-   return astOK ? ( ipp - ip ): 0 ;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a Box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     Box method (over-rides the protected astMapMerge method
-*     inherited from the Region class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated Box in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated Box with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated Box which is to be merged with
-*        its neighbours. This should be a cloned copy of the Box
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        Box it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated Box resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstBox *oldbox;       /* Pointer to supplied Box */
-   AstMapping *map;      /* Pointer to adjacent Mapping */
-   AstMapping *new;      /* Simplified or merged Region */
-   int i1;               /* Index of first Mapping merged */
-   int i;                /* Loop counter */
-   int result;           /* Result value to return */
-
-/* Initialise. */
-   result = -1;
-   i1 = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Box. */
-   oldbox = (AstBox *) this;
-
-/* First of all, see if the Box can be replaced by a simpler Region,
-   without reference to the neighbouring Regions in the list.           */
-/* =====================================================================*/
-
-/* Try to simplify the box. If the pointer value has changed, we assume
-   some simplification took place. */
-   new = astSimplify( oldbox );
-   if( new != (AstMapping *) oldbox ) {
-
-/* Annul the Box pointer in the list and replace it with the new Region
-   pointer, and indicate that the forward transformation of the returned
-   Region should be used (not really needed but keeps things clean). */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = new;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-
-/* If the Box itself could not be simplified, see if it can be merged
-   with the Regions on either side of it in the list. We can only merge
-   in parallel. */
-/* =====================================================================*/
-   } else if( ! series ){
-      new = astAnnul( new );
-
-/* Attempt to merge the Box with its lower neighbour (if any). */
-      if( where > 0 ) {
-         i1 = where - 1;
-         map = ( *map_list )[ where - 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergeBox( oldbox, (AstRegion *) map, 0, 
-                                           status );
-         }
-      }
-
-/* If this did not produced a merged Region, attempt to merge the Box with its 
-   upper neighbour (if any). */
-      if( !new && where < *nmap - 1 ) {
-         i1 = where;
-         map = ( *map_list )[ where + 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergeBox( oldbox, (AstRegion *) map, 1, 
-                                           status );
-         }
-      }
-
-/* If succesfull... */
-      if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   Region. Also clear the invert flag. */ 
-         (void) astAnnul( ( *map_list )[ i1 ] );
-         ( *map_list )[ i1 ] = new;
-         ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-         (void) astAnnul( ( *map_list )[ i1 + 1 ] );
-         for ( i = i1 + 2; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-
-/* Clear the vacated element at the end. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap )--;
-         result = i1;
-      }
-
-   } else {
-      new = astAnnul( new );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *MergeBox( AstBox *this, AstRegion *reg, int boxfirst, 
-                            int *status ) {
-/*
-*  Name:
-*     MergeBox
-
-*  Purpose:
-*     Attempt to merge a Box with another Region to form a Region of higher 
-*     dimensionality.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstRegion *MergeBox( AstBox *this, AstRegion *reg, int boxfirst, int *status ) 
-
-*  Class Membership:
-*     Box member function.
-
-*  Description:
-*     This function attempts to combine the supplied Regions together
-*     into a Region of higher dimensionality. 
-
-*  Parameters:
-*     this
-*        Pointer to a Box.
-*     reg
-*        Pointer to another Region.
-*     boxfirst
-*        If non-zero, then the Box axes are put first in the new Region.
-*        Otherwise, the other Region's axes are put first.
-*     status
-*        Pointer to the inherited status value.
-
-*  Returned Value:
-*     A pointer to a new region, or NULL if the supplied Regions could
-*     not be merged.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;           /* Pointer to base Frame for "result" */
-   AstFrame *cfrm;           /* Pointer to current Frame for "result" */
-   AstFrame *frm_reg;        /* Pointer to Frame from "reg" */
-   AstFrame *frm_this;       /* Pointer to Frame from "this" */
-   AstMapping *bcmap;        /* Base->current Mapping for "result" */
-   AstMapping *map_reg;      /* Base->current Mapping from "reg" */
-   AstMapping *map_this;     /* Base->current Mapping from "this" */
-   AstMapping *sbunc;        /* Simplified uncertainty */
-   AstPointSet *pset_new;    /* PointSet holding PointList axis values for new */
-   AstPointSet *pset_reg;    /* PointSet holding PointList axis values for reg */
-   AstRegion *bunc;          /* Base Frame uncertainty Region */
-   AstRegion *new;           /* Pointer to new Interval in base Frame */
-   AstRegion *result;        /* Pointer to returned Interval in current Frame */
-   AstRegion *unc_reg;       /* Current Frame uncertainty Region from "reg" */
-   AstRegion *unc_this;      /* Current Frame uncertainty Region from "this" */
-   double **ptr_new;         /* Pointers to arrays holding new axis values */
-   double **ptr_reg;         /* Pointers to arrays holding reg axis values */
-   double *centre;           /* Array to hold box centre axis values */
-   double *corner;           /* Array to hold box corner axis values */
-   double *lbnd;             /* Array to hold lower axis bounds */
-   double *p;                /* Pointer to next input value */
-   double *q;                /* Pointer to next output value */
-   double *ubnd;             /* Array to hold upper axis bounds */
-   double fac_reg;           /* Ratio of used to default MeshSize for "reg" */
-   double fac_this;          /* Ratio of used to default MeshSize for "this" */
-   double temp;              /* Temporary storage */
-   int i;                    /* Loop count */
-   int j;                    /* Loop count */
-   int msz_reg;              /* Original MeshSize for "reg" */
-   int msz_reg_set;          /* Was MeshSize originally set for "reg"? */
-   int msz_this;             /* Original MeshSize for "this" */
-   int msz_this_set;         /* Was MeshSize originally set for "this"? */
-   int nax;                  /* Number of axes in "result" */
-   int nax_reg;              /* Number of axes in "reg" */
-   int nax_this;             /* Number of axes in "this" */
-   int neg_reg;              /* Negated attribute value for other supplied Region */
-   int neg_this;             /* Negated attribute value for supplied Box  */
-   int npnt;                 /* Number of points in PointList */
-   int ok;                   /* Can supplied Regions be merged? */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in 
-   each Region if we are to merge the Regions. In addition, in order to 
-   merge, either both Regions must have a defined uncertainty, or neither 
-   Region must have a defined Uncertainty. */
-   if( astGetClosed( this ) == astGetClosed( reg ) &&
-       astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
-      neg_this = astGetNegated( this );
-      neg_reg = astGetNegated( reg );
-
-/* Get the number of axes in the two supplied Regions. */
-      nax_reg = astGetNaxes( reg );
-      nax_this = astGetNaxes( this );
-   
-/* If the Regions can be combined, get the number of axes the
-   combination will have. */
-      nax = nax_reg + nax_this;
-   
-/* Get the base Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame that will be used to create any new Region. */
-      frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-      frm_reg = astGetFrame( reg->frameset, AST__BASE );
-   
-      if( boxfirst ) {
-         bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-      } else {
-         bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-      }
-   
-      frm_this = astAnnul( frm_this );
-      frm_reg = astAnnul( frm_reg );
-   
-/* Indicate we do not yet have a merged Region. */
-      new = NULL;
-   
-/* First attempt to merge with another Box. The result will be a Box. Both
-   Boxes must be un-negated. */
-      if( astIsABox( reg ) && !neg_this && !neg_reg ) {
-   
-/* Allocate memory to store the centre and corner of the returned Box. */
-         centre = astMalloc( sizeof( double )*(size_t) nax );
-         corner = astMalloc( sizeof( double )*(size_t) nax );
-   
-/* Copy the centres and corners from the supplied Boxes into the above 
-   arrays, in the requested order. */
-         if( boxfirst ) {
-            astBoxPoints( this, centre, corner );
-            astBoxPoints( reg, centre + nax_this, corner + nax_this );
-         } else {
-            astBoxPoints( reg, centre, corner );
-            astBoxPoints( this, centre + nax_reg, corner + nax_reg );
-         }
-   
-/*  Create the new Box, initially with no uncertainty. */
-         new = (AstRegion *) astBox( bfrm, 0, centre, corner, NULL, "", 
-                                     status );
-   
-/* Free resources .*/
-         centre = astFree( centre );
-         corner = astFree( corner );
-   
-/* Now attempt to merge with an Interval. The result will be an Interval. 
-   Both Intervals must be un-negated. */
-      } else if( astIsAInterval( reg )  && !neg_this && !neg_reg ) {
-   
-/* Allocate memory to store the bounds of the returned Interval. */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax );
-   
-/* Copy the centre and corner from the supplied Box into the required part
-   of the above arrays. */
-         if( boxfirst ) {
-            centre = lbnd;
-            corner = ubnd;
-         } else {
-            centre = lbnd + nax_reg;
-            corner = ubnd + nax_reg;
-         }
-         astBoxPoints( this, centre, corner );
-
-/* Convert these centre and corner positions into upper and lower bounds. */
-         if( astOK ) {
-            for( i = 0; i < nax_this; i++ ) {
-               centre[ i ] = 2*centre[ i ] - corner[ i ];
-               if( centre[ i ] > corner[ i ] ) {
-                  temp = centre[ i ];
-                  centre[ i ] = corner[ i ];
-                  corner[ i ] = temp;
-               }
-            }
-         }
-
-/* Get the bounds from the interval and add them into the above arrays. */
-         if( boxfirst ) {
-            astIntervalPoints( reg, lbnd + nax_this, ubnd + nax_this );
-         } else {
-            astIntervalPoints( reg, lbnd, ubnd );
-         }
-
-/*  Create the new Interval, initially with no uncertainty. */
-         new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "", 
-                                          status );
-   
-/* Free resources .*/
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-   
-/* Now attempt to merge with a NullRegion. The result will be an
-   Interval. The NullRegion must be negated and the Box must not. */
-      } else if( astIsANullRegion( reg ) && !neg_this && neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax );
-   
-/* Copy the centre and corner from the supplied Box into the required part
-   of the above arrays. */
-         if( boxfirst ) {
-            centre = lbnd;
-            corner = ubnd;
-         } else {
-            centre = lbnd + nax_reg;
-            corner = ubnd + nax_reg;
-         }
-         astBoxPoints( this, centre, corner );
-
-/* Convert these centre and corner positions into upper and lower bounds. */
-         if( astOK ) {
-            for( i = 0; i < nax_this; i++ ) {
-               centre[ i ] = 2*centre[ i ] - corner[ i ];
-               if( centre[ i ] > corner[ i ] ) {
-                  temp = centre[ i ];
-                  centre[ i ] = corner[ i ];
-                  corner[ i ] = temp;
-               }
-            }
-
-/* Fill the other axes with bad values to indicate they are unbounded. */
-            if( boxfirst ) {
-               for( i = nax_this; i < nax; i++ ) {
-                  lbnd[ i ] = AST__BAD;
-                  ubnd[ i ] = AST__BAD;
-               }
-            } else {
-               for( i = 0; i < nax_reg; i++ ) {
-                  lbnd[ i ] = AST__BAD;
-                  ubnd[ i ] = AST__BAD;
-               }
-            }
-
-/*  Create the new Interval, initially with no uncertainty. */
-            new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "", 
-                                             status );
-         }
-
-/* Free resources .*/
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a PointList. The result will be a PointList. 
-   Both Regions must be un-negated. */
-      } else if( astIsAPointList( reg ) && !neg_this && !neg_reg ) {
-   
-/* We can only do this if the Box has zero width on each axis (i.e.
-   represents a point). Get the Box centre and corner. */
-         centre = astMalloc( sizeof( double )*(size_t) nax_this );
-         corner = astMalloc( sizeof( double )*(size_t) nax_this );
-         astBoxPoints( this, centre, corner );
-
-/* Get the size of the Box's uncertainty region. */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax_this );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax_this );
-         bunc = astGetUncFrm( this, AST__BASE );
-         astGetRegionBounds( bunc, lbnd, ubnd );
-
-/* Set "ok" to zero if the Box does not have zero width on any axis. Here
-   "zero width" means a width less than half the uncertainty on the axis. */
-         if( astOK ) {
-   
-            ok = 1;
-            for( i = 0; i < nax_this; i++ ) {
-               if( fabs( centre[ i ] - corner[ i ] ) > 
-                   0.25*fabs( ubnd[ i ] - lbnd[ i ] ) ) {
-                  ok = 0;
-                  break;
-               }
-            }
-   
-/* If the Box is a point, we go on to create a new PointList. */
-            if( ok ) {
-   
-/* Get a PointSet holding the axis values in the supplied PointList data.
-   Also get the number of points in the PointSet and pointers to the arrays
-   holding the axis values. */
-               astPointListPoints( reg, &pset_reg );
-               npnt = astGetNpoint( pset_reg );
-               ptr_reg = astGetPoints( pset_reg );
-
-/*  Create a new PointSet with room for the same number of points, but
-    with the extra required axes. Get pointers to its axis arrays. */
-               pset_new = astPointSet( npnt, nax, "", status );
-               ptr_new = astGetPoints( pset_new );
-                
-/* Copy the PointList axis values into the new PointSet, and then include
-   the extra axis values defined by the Box to each point. */
-               if( astOK ) {
-
-                  for( j = 0; j < nax_reg; j++ ) {
-                     p = ptr_reg[ j ];
-                     q = ptr_new[ boxfirst ? nax_this + j : j ];
-                     for( i = 0; i < npnt; i++ ) *(q++) = *(p++);
-                  }   
-
-                  for( j = 0; j < nax_this; j++ ) {
-                     p = centre + j;
-                     q = ptr_new[ boxfirst ? j : nax_reg + j ];
-                     for( i = 0; i < npnt; i++ ) *(q++) = *p;
-                  }   
-
-/*  Create the new PointList, initially with no uncertainty. */
-                  new = (AstRegion *) astPointList( bfrm, pset_new, NULL, 
-                                                    "", status );
-               }   
-
-/* Free resources .*/
-               pset_new = astAnnul( pset_new );
-               pset_reg = astAnnul( pset_reg );
-            }
-         }
-         centre = astFree( centre );
-         corner = astFree( corner );
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-         bunc = astAnnul( bunc );
-
-      }
-
-/* If a new Region was created above, propagate remaining attributes of
-   the supplied Region to it. */
-      if( new ) {
-         astRegOverlay( new, this, 1 );
-
-/* The above Prism constructors create the Prism with the correct value
-   for the Nagated attribute (i.e. zero). Ensure the above call to
-   astRegOverlay has not changed this. */
-         astClearNegated( new );
-
-/* If both the supplied Regions have uncertainty, assign the new Region an 
-   uncertainty. */
-         if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
-            unc_this = astGetUncFrm( this, AST__BASE );
-            unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
-            if( boxfirst ) {
-               bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
-            } else {
-               bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
-            }
-
-/* Attempt to simplify the Prism. */
-            sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
-            astSetUnc( new, sbunc );
-
-/* Free resources. */
-            sbunc = astAnnul( sbunc );
-            bunc = astAnnul( bunc );
-            unc_reg = astAnnul( unc_reg );
-            unc_this = astAnnul( unc_this );
-         }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame. */
-         frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
-         frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-      
-         if( boxfirst ) {
-            cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-         } else {
-            cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-         }
-      
-/* Get the base -> current Mappings from the two Region FrameSets, and 
-   combine them into a single parallel CmpMap that connects bfrm and cfrm. */
-         map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE, 
-                                   AST__CURRENT );
-         map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-      
-         if( boxfirst ) {
-            bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "", 
-                                              status );
-         } else {
-            bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "", 
-                                              status );
-         }
-      
-/* Map the new Region into the new current Frame. */
-         result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
-   factors for the two supplied Regions. */
-         if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
-            astSetFillFactor( result, astGetFillFactor( reg )*
-                                      astGetFillFactor( this ) );
-         }
-
-/* If the MeshSize value is set in either supplied Region, set a value
-   for the returned Region which scales the default value by the
-   product of the scaling factors for the two supplied Regions. First see
-   if either MeshSize value is set. */
-         msz_this_set = astTestMeshSize( this );
-         msz_reg_set = astTestMeshSize( reg );
-         if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
-   value), and then clear them so that the default value will be returned
-   in future. */
-            msz_this = astGetMeshSize( this );
-            msz_reg = astGetMeshSize( reg );
-            astClearMeshSize( this );
-            astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
-   Regions. */
-            fac_this = (double)msz_this/(double)astGetMeshSize( this );
-            fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
-   the product of the two ratios found above. */ 
-            astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
-   set) */
-            if( msz_this_set ) astSetMeshSize( this, msz_this );
-            if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
-         }
-
-/* Free remaining resources */
-         frm_this = astAnnul( frm_this );
-         frm_reg = astAnnul( frm_reg );
-         map_this = astAnnul( map_this );
-         map_reg = astAnnul( map_reg );
-         bcmap = astAnnul( bcmap );
-         new = astAnnul( new );
-         cfrm = astAnnul( cfrm );
-      }
-      bfrm = astAnnul( bfrm );
-   }
-
-/* If an error has occurred, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstBox *this;                 /* Pointer to Box structure */
-   double axcen;                 /* Central axis value */
-   double axlen;                 /* Half width of box on axis */
-   int i;                        /* Axis index */
-   int nc;                       /* No. of axes in base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Box structure */
-   this = (AstBox *) this_region;
-
-/* Ensure cached information is up to date. */
-   Cache( this, 0, status );
-
-/* Get the number of base Frame axes in the Region. */
-   nc = astGetNin( this_region->frameset );
-
-/* The first point is the centre of the box, the second point is the half
-   size of the box on each axis.*/
-   for( i = 0; i < nc; i++ ) {
-      axcen = this->centre[ i ];
-      axlen = this->extent[ i ]*this->shrink;
-      lbnd[ i ] = axcen - axlen;
-      ubnd[ i ] = axcen + axlen;
-   }
-}
-
-static AstPointSet *RegBaseGrid( AstRegion *this, int *status ){
-/*
-*  Name:
-*     RegBaseGrid
-
-*  Purpose:
-*     Return a PointSet containing points spread through the volume of a 
-*     Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstPointSet *RegBaseGrid( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astRegBaseGrid protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a set of points spread
-*     through the volume of the supplied Box. The points refer to the base 
-*     Frame of the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. If the Region is unbounded, a NULL pointer
-*     will be returned.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                 /* Base Frame in encapsulated FrameSet */
-   AstPointSet *newps;            /* New results PointSet */
-   AstPointSet *ps;               /* New boundary mesh */
-   AstPointSet *result;           /* Returned pointer */
-   double **ptr;                  /* Pointers to data */
-   double *ax;                    /* Pointer to next first axis value */
-   double *lbnd;                  /* Pointer to array of lower bounds of box */
-   double *ubnd;                  /* Pointer to array of lower bounds of box */
-   double dx;                     /* Increment along first axis of 2D box */
-   double shrink0;                /* Original shrink factor */
-   int i;                         /* Loop count */
-   int ii;                        /* Loop count */
-   int ik;                        /* Next value to add to "is" */
-   int ip;                        /* Index of next point */
-   int is;                        /* Sum of first "m-1" integers raised to power of (naxes-1) */
-   int k1;                        /* Intermediate constant */
-   int m;                         /* No. of times to invoke astRegBaseMesh */
-   int naxes;                     /* No. of axes in base Frame */
-   int np;                        /* Original MeshSize value */
-   int npp;                       /* Current MeshSize value */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return NULL;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created grid, return it. */
-   if( this->basegrid ) {
-      result = astClone( this->basegrid );
-
-/* Otherwise, create a new one, but only if the Box is bounded. */
-   } else if( astGetBounded( this ) ) {
-
-/* Get the base Frame in the Region's FrameSet. */
-      frm = astGetFrame( this->frameset, AST__BASE );
-
-/* Get the number of axes in the base Frame */
-      naxes = astGetNaxes( frm );
-
-/* Get the bounds of the Region in the base Frame. */
-      lbnd = astMalloc( sizeof( double )*(size_t) naxes );
-      ubnd = astMalloc( sizeof( double )*(size_t) naxes );
-      astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the number of points which would be used to create a boundary
-   mesh. We use the same number to determine the number of points in the
-   grid. */
-      np = astGetMeshSize( this );
-
-/* First deal with the simple case of 1-D boxes. Store "np" axis values
-   evenly spaced between lbnd and ubnd. */
-      if( naxes == 1 ) {
-         result = astPointSet( np, 1, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-            ax = ptr[ 0 ];
-            dx = ( ubnd[ 0 ] - lbnd[ 0 ] )/( np - 1 );
-            for( ip = 0; ip < np; ip++ ) *(ax++) = lbnd[ 0 ] + ip*dx;
-         }
-
-/* Now deal with boxes with more than 1 axis. The algorithm uses the
-   astRegBaseMesh method to create a boundary mesh covering the box. 
-   The box is then shrunk slightly and a new boundary mesh created, which
-   is appended to the first mesh. This process of shrinking the box and
-   appending the new boundary mesh is continued until the box has zero 
-   size. The final mesh represents the required volume grid like a series
-   of "onion skins". We reduce the MeshSize attribute each time prior to 
-   calling the astRegBaseMesh method in order to retain a roughly constant 
-   density of points throughout the final grid, and so that the final number 
-   of points in the grid is close to "np". */
-      } else {
-
-/* First find the number of times ("m") the astRegBaseMesh method should be
-   called. This is calculated on the basis of the MeshSize value ("np")
-   and the number of axes in the Region. */
-         k1 = naxes;
-         for( ii = 0; ii < naxes; ii++ ) k1 *= 2;
-   
-         is = 1;
-         for( m = 2; m < 100; m++ ) {
-            if( is*k1 >= np ) {
-               m--;
-               break;
-            }
-            ik = m;
-            for( ii = 2; ii < naxes; ii++ ) ik *= m;
-            is += ik;
-         }
-
-/* Save the original shrink factor. */
-         shrink0 = ((AstBox *) this)->shrink;
-
-/* Loop round invoking the astRegBaseMesh method. */
-         for( i = 1; i <= m; i++ ) {
-
-/* Shrink the Box temporarily. */
-            SetShrink( (AstBox *) this, (shrink0*i)/m, status );
-
-/* Set the new MeshSize. */
-            npp = k1;
-            for( ii = 1; ii < naxes; ii++ ) npp *= i;
-            astSetMeshSize( this, npp );
-
-/* Invoke the astRegBaseMesh method to create a new boundary mesh. */
-            ps = astRegBaseMesh( this );
-
-/* If this is the first PointSet created, use it as the returned
-   PointSet. Otherwise, append this PointSet to the results PointSet. */
-            if( !result ) {
-               result = astClone( ps );
-            } else {
-               newps = astAppendPoints( result, ps );
-               (void) astAnnul( result );
-               result = newps;
-            }
-
-/* Free resources. */
-            ps = astAnnul( ps ); 
-         }
-
-/* Unshrink the Box. */
-         SetShrink( (AstBox *) this, shrink0, status );
-
-/* Reinstate the original MeshSize. */
-         astSetMeshSize( this, np );
-
-      }
-
-/* Same the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-      if( astOK && result ) this->basegrid = astClone( result );
-
-/* Free resources. */
-      frm = astAnnul( frm );
-      lbnd = astFree( lbnd );
-      ubnd = astFree( ubnd );
-   }
-
-/* Annul the result if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstPointSet *RegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the accuracies which were
-*     supplied when the Region was created.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Constants: */
-#define NP_EDGE 50                /* No. of points for determining geodesic
-                                     length of each axis. */
-
-/* Local Variables: */
-   AstFrame *frm;                 /* Base Frame in encapsulated FrameSet */
-   AstFrame *pfrm0;               /* Primary Frame defining axis 0 */
-   AstFrame *pfrm1;               /* Primary Frame defining axis 1 */
-   AstPointSet *result;           /* Returned pointer */
-   const char *class0;            /* Pointer to class string from pfrm0 */
-   const char *class1;            /* Pointer to class string from pfrm1 */
-   double **ptr;                  /* Pointers to data */
-   double *ax;                    /* Pointer to next first axis value */
-   double *ay;                    /* Pointer to next second axis value */
-   double *lbnd;                  /* Pointer to array of lower bounds of box */
-   double *ubnd;                  /* Pointer to array of lower bounds of box */
-   double c[ 5 ][ 2 ];            /* Positions of corners for 2D boxes */
-   double dx;                     /* Increment along first axis of 2D box */
-   double dy;                     /* Increment along second axis of 2D box */
-   double edge_len[ 4 ];          /* Length of each edge of 2D boundary */
-   double lax;                    /* Previous value on first axis */
-   double lay;                    /* Previous value on second axis */
-   double len;                    /* Length of edge of 2D boundary */
-   double p0[ 2 ];                /* Position in 2D Frame */
-   double p1[ 2 ];                /* Position in 2D Frame */
-   double ppd;                    /* Points per unit distance */
-   double total_len;              /* Total length of 2D boundary */
-   int flat;                      /* Assume Frame geometry is flat? */
-   int i;                         /* Point index */
-   int iaxis;                     /* Axis index */
-   int iedge;                     /* Edge index */
-   int ip;                        /* Index of next point */
-   int metric;                    /* Does Frame have a usable metric? */
-   int nax0;                      /* No. of axes in first primary Frame */
-   int nax1;                      /* No. of axes in second primary Frame */
-   int naxes;                     /* No. of axes in base Frame */
-   int np;                        /* No. of points in returned PointSet */
-   int np0;                       /* No. of points per edge */
-   int np_axis;                   /* No. of points per axis in ND box */
-   int np_edge[ 4 ];              /* No. of points per edge in 2D box */
-   int paxis;                     /* Axis index in primary Frame */
-   int single;                    /* Does the Box occupy a single point? */
-
-/* Initialise */
-   result= NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this->basemesh ) {
-      result = astClone( this->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Get the base Frame in the Region's FrameSet. */
-      frm = astGetFrame( this->frameset, AST__BASE );
-
-/* Get the number of axes in the base Frame */
-      naxes = astGetNaxes( frm );
-
-/* Get the bounds of the Region in the base Frame. */
-      lbnd = astMalloc( sizeof( double )*(size_t) naxes );
-      ubnd = astMalloc( sizeof( double )*(size_t) naxes );
-      astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the requested number of points to put on the mesh. */
-      np = astGetMeshSize( this );
-
-/* See if the box occupies a single point. */
-      single = 1;
-      for( i = 0; i < naxes; i++ ) {
-         if( ubnd[ i ] > lbnd[ i ] ) {
-            single = 0;
-            break;
-         }
-      }
-
-/* If so, we return a PointSet holding a single point. */
-      if( single ) {
-         result = astPointSet( 1, naxes, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-            for( i = 0; i < naxes; i++ ) {
-               ptr[ i ][ 0 ] = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
-            }
-         }
-             
-/* Otherwise, first deal with 1-D boxes. */
-      } else if( naxes == 1 ) {
-
-/* The boundary of a 1-D box consists of 2 points - the two extreme values. 
-   Create a PointSet to hold 2 1-D values, and store the extreme values. */
-         result = astPointSet( 2, 1, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-            ptr[ 0 ][ 0 ] = lbnd[ 0 ];
-            ptr[ 0 ][ 1 ] = ubnd[ 0 ];
-         }
-
-/* Now deal with 2-D boxes. */
-      } else if( naxes == 2 ){
-
-/* Store the coords of each corner for easy access. */
-         c[ 0 ][ 0 ] = lbnd[ 0 ];
-         c[ 0 ][ 1 ] = lbnd[ 1 ];
-         c[ 1 ][ 0 ] = lbnd[ 0 ];
-         c[ 1 ][ 1 ] = ubnd[ 1 ];
-         c[ 2 ][ 0 ] = ubnd[ 0 ];
-         c[ 2 ][ 1 ] = ubnd[ 1 ];
-         c[ 3 ][ 0 ] = ubnd[ 0 ];
-         c[ 3 ][ 1 ] = lbnd[ 1 ];
-         c[ 4 ][ 0 ] = lbnd[ 0 ];
-         c[ 4 ][ 1 ] = lbnd[ 1 ];
-
-/* See if we can assume that the frame has flat geometry. This is the case 
-   if both axes belong to simple Frames, or are 1D, but may not be the case 
-   if either axis does not belong to a simple Frame that has more than 1
-   axis. */
-         astPrimaryFrame( frm, 0, &pfrm0, &paxis );
-         astPrimaryFrame( frm, 1, &pfrm1, &paxis );
-         class0 = astGetClass( pfrm0 );
-         class1 = astGetClass( pfrm1 );
-         nax0 = astGetNaxes( pfrm0 );
-         nax1 = astGetNaxes( pfrm1 );
-         if( astOK ) {
-            flat = ( !strcmp( class0, "Frame" ) || nax0 == 1 ) &&
-                   ( !strcmp( class1, "Frame" ) || nax1 == 1 );
-         } else {
-            flat = 0;
-         }
-
-/* Our choice of distribution of points depends on whether the axes have the 
-   same units or not. If the axes have the same units, or if they share the 
-   same primary Frame, then we assume that the axes span some space in which 
-   a single "distance" is defined. If not, (e.g. for a Frame representing 
-   frequency in Hz on one axis - typical value 1.0E10, and slit position in 
-   metres on the other axis - typical value 1.0E-2) we assume that "distance" 
-   is defined differently for each axis. The primary frame requirement is 
-   because some classes of Frame (e.g. SkyFrame) have a defined distance, 
-   even though the Units attributes for its axes may differ (since Units 
-   refers to the external representation - e.g. hours and degrees for a 
-   SkyFrame - rather than the internal representation). */
-         if( astOK && !strcmp( astGetUnit( frm, 0 ), astGetUnit( frm, 1 ) ) ) {
-            metric = 1;
-         } else {
-            metric = ( pfrm0 == pfrm1 );
-         }
-
-/* If we have a usable metric, distribute the points according to the aspect 
-   ratio of the box (i.e. the shorter box sides gets fewer points). */
-         if( metric ){
-
-/* Find the approximate geodesic length of each edge of the box. Since
-   the edges of the box may not correspond to single geodesic (e.g. a
-   line of constant latitude is not a geodesic), we do this by testing 
-   a set of points along each edge of the box and finding the total of the
-   geodesic distances between each pair of adjacent points. Initialise the 
-   total length round all edges. */
-            total_len = 0.0;
-
-/* Do each edge in turn.*/
-            for( iedge = 0; iedge < 4; iedge++ ) {
-
-/* Find the increment in x and y between adjacent points along this edge.
-   We put a point at each end of the edge. Note, one of dx or dy will be
-   zero since the edges are parallel to the axes. */
-               dx = ( c[ iedge + 1 ][ 0 ] - c[ iedge ][ 0 ] )/( NP_EDGE - 1 );
-               dy = ( c[ iedge + 1 ][ 1 ] - c[ iedge ][ 1 ] )/( NP_EDGE - 1 );
-
-/* Store the coords of the first point. */
-               p0[ 0 ] = c[ iedge ][ 0 ];
-               p0[ 1 ] = c[ iedge ][ 1 ];
-
-/* Initialise the length of this edge and loop round the remaining points. */
-               len = 0.0;
-               for( i = 1; i < NP_EDGE; i++ ) {
-
-/* Save the position of the previous point. */
-                  p1[ 0 ] = p0[ 0 ];
-                  p1[ 1 ] = p0[ 1 ];
-
-/* Find the position of the new point. */
-                  p0[ 0 ] = p1[ 0 ] + dx;
-                  p0[ 1 ] = p1[ 1 ] + dy;
-
-/* Increment the length of the edge by the geodesic distance from this point 
-   to the previous point. If the Frame is flat, this is simple (given that we
-   know that one of dx and dy must be zero). */
-                  if( flat ) {
-                     len += fabs( dx + dy );
-                  } else {
-                     len += astDistance( frm, p0, p1 );
-                  }
-               }
-
-/* Save the length of this edge, and also form the total length round all
-   edges. */
-               edge_len[ iedge ] = len;
-               total_len += len;
-            }
-
-/* Find the average number of points per unit geodesic distance around the
-   boundary. */
-            if( total_len > 0.0 ) {
-               ppd = np / total_len;
-
-/* Use this, with the geodesic length of each edge found above, to find the 
-   number of points to put along each edge of the boundary, and update the 
-   total number of points to use. In the returned boundary we put a point at 
-   the start of each edge but not at the end (since the end of one edge will 
-   be the start of the next edge). */
-               np = 0;
-               for( iedge = 0; iedge < 4; iedge++ ) {
-                  np_edge[ iedge ] = (int) ( edge_len[ iedge ]*ppd );
-                  if( np_edge[ iedge ] == 0 ) np_edge[ iedge ] = 1;
-                  np += np_edge[ iedge ];
-               }
-
-/* Report error if total length round box is zero. */
-            } else if( astOK ) {
-               astError( AST__INTER, "astRegBaseMesh(%s): Distance around "
-                         "box perimeter is zero (internal AST programming "
-                         "error).", status, astGetClass( this ) );
-            }
-
-/* If the Frame has no usable metric, give an equal number of points
-   (equal to a quarter of the total) to all 4 sides of the box. */
-         } else {
-            np0 = (int) ( 0.25*np );
-            np = 0;
-            for( iedge = 0; iedge < 4; iedge++ ) {
-               np_edge[ iedge ] = np0;
-               np += np_edge[ iedge ];
-            }
-         }
-
-/* Create a PointSet with enough room and get a pointer to its data arrays. */
-         result = astPointSet( np, 2, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-
-/* Initialise pointers to the first element for each axis in the returned 
-   PointSet. */
-            ax = ptr[ 0 ];
-            ay = ptr[ 1 ];
-
-/* Loop round each edge. */
-            for( iedge = 0; iedge < 4; iedge++ ) {
-
-/* Find the increment in x and y between adjacent points along this edge. */
-               dx = ( c[ iedge + 1 ][ 0 ] - c[ iedge ][ 0 ] )/ np_edge[ iedge ];
-               dy = ( c[ iedge + 1 ][ 1 ] - c[ iedge ][ 1 ] )/ np_edge[ iedge ];
-
-/* Store the first point. */
-               lax = c[ iedge ][ 0 ];
-               lay = c[ iedge ][ 1 ];
-               *(ax++) = lax;
-               *(ay++) = lay;
-
-/* Loop round the remaining points, incrementing the pointers at the same
-   time. */
-               for( i = 1; i < np_edge[ iedge ]; i++, ax++, ay++ ) {
-
-/* Find the position of the new point and store it. */
-                  lax += dx;
-                  lay += dy;
-                  *ax = lax;
-                  *ay = lay;
-               }
-            }
-         }
-
-/* Free resources. */
-         pfrm0 = astAnnul( pfrm0 );
-         pfrm1 = astAnnul( pfrm1 );
-
-/* Now deal with boxes with more than 2 dimensions. */
-      } else {
-
-/* Number of samples along each edge of the hyper-cube. */
-         np_axis = 1 + (int) pow( np/(2*naxes), 1.0/(naxes-1) );
-         if( np_axis < 2 ) np_axis = 2;
-
-/* Each face of the hyper-cube will have np_axis**(naxes-1) points, and there
-   are 2*naxes faces. Create a PointSet with the correct number of
-   points. */
-         np = 2*naxes;
-         for( iaxis = 1; iaxis < naxes; iaxis++ ) np *= np_axis;
-         result = astPointSet( np, naxes, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-
-/* Initialise the index of the next point to add into the PointSet. */
-            ip = 0;
-
-/* Create the upper and lower faces for each axis in turn. */
-            for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-
-/* First do the upper face for this axis. */
-               ip += MakeGrid( naxes, ptr, ip, lbnd, ubnd, np_axis, iaxis, 
-                               ubnd[ iaxis ], status );
-
-/* Now do the lower face for this axis. */
-               ip += MakeGrid( naxes, ptr, ip, lbnd, ubnd, np_axis, iaxis, 
-                               lbnd[ iaxis ], status );
-            }
-
-/* Remove any unused space at the end of the PointSet. */
-            if( ip < np ) astSetNpoint( result, ip );
-         }
-      }
-
-/* Same the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-      if( astOK && result ) this->basemesh = astClone( result );
-
-/* Free resources. */
-      frm = astAnnul( frm );
-      lbnd = astFree( lbnd );
-      ubnd = astFree( ubnd );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-/* Undefine macros local to this function. */
-#undef NP_EDGE
-
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, const int *axes, 
-                               int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;         /* The base Frame in the supplied Region */
-   AstFrame *frm;          /* The base Frame in the returned Region */
-   AstPointSet *pset;      /* Holds axis values defining the supplied Region */
-   AstRegion *bunc;        /* The uncertainty in the supplied Region */
-   AstRegion *result;      /* Returned Region */
-   AstRegion *unc;         /* The uncertainty in the returned Region */
-   double **ptr;           /* Holds axis values defining the supplied Region */
-   double *cen;            /* Base Frm axis values at centre of returned Box */
-   double *cor;            /* Base Frm axis values at a corner of returned Box */
-   int i;                  /* Index of axis within returned Region */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
-   bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
-   encapsulated FrameSet. */
-   frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
-   Region, and select the required axes from it. If the resulting Object
-   is not a Region, annul it so that the returned Region will have no 
-   uncertainty. */
-   if( astTestUnc( this_region ) ) {
-      bunc = astGetUncFrm( this_region, AST__BASE );
-      unc = astPickAxes( bunc, naxes, axes, NULL );
-      bunc = astAnnul( bunc );
-
-      if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
-   } else {
-      unc = NULL;
-   }
-
-/* Get pointers to the coordinate data in the parent Region structure. */
-   pset = this_region->points;
-   ptr = astGetPoints( pset );
-
-/* Get space to hold the centre and corner of the Box in the new Frame. */
-   cen = astMalloc( sizeof( *cen )*naxes );
-   cor = astMalloc( sizeof( *cor )*naxes );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Copy the centre and corner axis values for the selected axes into the
-   arrays allocated above. */
-      for( i = 0; i < naxes; i++ ) {
-         cen[ i ] = ptr[ axes[ i ] ][ 0 ];
-         cor[ i ] = ptr[ axes[ i ] ][ 1 ];
-      }
-
-/* Create the new Box. */
-      result = (AstRegion *) astBox( frm, 0, cen, cor, unc, "", status );
-   }
-
-/* Free resources */
-   frm = astAnnul( frm );      
-   bfrm = astAnnul( bfrm );      
-   if( unc ) unc = astAnnul( unc );
-   cen = astFree( cen );
-   cor = astFree( cor );
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr, 
-                          int index, int ifrm, int *status ){
-/*
-*  Name:
-*     RegCentre
-
-*  Purpose:
-*     Re-centre a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     double *RegCentre( AstRegion *this, double *cen, double **ptr, 
-*                        int index, int ifrm, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astRegCentre protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function shifts the centre of the supplied Region to a
-*     specified position, or returns the current centre of the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     cen
-*        Pointer to an array of axis values, giving the new centre.
-*        Supply a NULL value for this in order to use "ptr" and "index" to 
-*        specify the new centre.
-*     ptr
-*        Pointer to an array of points, one for each axis in the Region.
-*        Each pointer locates an array of axis values. This is the format
-*        returned by the PointSet method astGetPoints. Only used if "cen"
-*        is NULL.
-*     index
-*        The index of the point within the arrays identified by "ptr" at
-*        which is stored the coords for the new centre position. Only used 
-*        if "cen" is NULL.
-*     ifrm
-*        Should be AST__BASE or AST__CURRENT. Indicates whether the centre 
-*        position is supplied and returned in the base or current Frame of 
-*        the FrameSet encapsulated within "this".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If both "cen" and "ptr" are NULL then a pointer to a newly
-*     allocated dynamic array is returned which contains the centre
-*     coords of the Region. This array should be freed using astFree when
-*     no longer needed. If either of "ptr" or "cen" is not NULL, then a
-*     NULL pointer is returned.
-
-*  Notes:
-*    - Some Region sub-classes do not have a centre. Such classes will report 
-*    an AST__INTER error code if this method is called with either "ptr" or 
-*    "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-*    reported if this method is invoked on a Region of an unsuitable class,
-*    but NULL is always returned.
-
-*/
-
-/* Local Variables: */
-   AstBox *this;       /* Pointer to Box structure */
-   AstFrame *frm;      /* Pointer to Box's base Frame */
-   double **rptr;      /* Data pointers for Region PointSet */
-   double *bc;         /* Base Frame centre position */
-   double *corner;     /* Array holding corner axis values */
-   double *result;     /* Returned pointer */
-   double *tmp;        /* Temporary array pointer */
-   double axval;       /* Axis value */
-   int ic;             /* Coordinate index */
-   int ncb;            /* Number of base frame coordinate values per point */
-   int ncc;            /* Number of current frame coordinate values per point */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Box structure. */
-   this = (AstBox *) this_region;
-
-/* First ensure cached information (which includes the centre coords) 
-   is up to date. */
-   Cache( this, 0, status );
-
-/* Get the number of axis values per point in the base and current Frames. */
-   ncb = astGetNin( this_region->frameset );
-   ncc = astGetNout( this_region->frameset );
-
-/* If the centre coords are to be returned, return either a copy of the 
-   base Frame centre coords, or transform the base Frame centre coords
-   into the current Frame. First ensure cached information (which
-   includes the centre coords) is up to date. */
-   if( !ptr && !cen ) {
-      if( ifrm == AST__CURRENT ) {
-         result = astRegTranPoint( this_region, this->centre, 1, 1 );
-      } else {
-         result = astStore( NULL, this->centre, sizeof( double )*ncb );
-      }
-
-/* Otherwise, we store the supplied new centre coords and return a NULL 
-   pointer. */
-   } else {
-
-/* Get a pointer to the axis values stored in the Region structure. */
-      rptr = astGetPoints( this_region->points );
-
-/* Check pointers can be used safely */
-      if( astOK ) {
-
-/* If the centre position was supplied in the current Frame, find the 
-   corresponding base Frame position... */
-         if( ifrm == AST__CURRENT ) {
-            if( cen ) {
-               bc = astRegTranPoint( this_region, cen, 1, 0 );
-            } else {
-               tmp = astMalloc( sizeof( double)*(size_t)ncc );
-               if( astOK ) {
-                  for( ic = 0; ic < ncc; ic++ ) tmp[ ic ] = ptr[ ic ][ index ];
-               }
-               bc = astRegTranPoint( this_region, tmp, 1, 0 );
-               tmp = astFree( tmp );
-            }
-
-/* Replace any bad centre values with their current values. */
-            for( ic = 0; ic < ncb; ic++ ) {
-               if( bc[ ic ] ==  AST__BAD ) bc[ ic ] = this->centre[ ic ];
-            }
-
-/* If the centre position was supplied in the base Frame, store the
-   centre coords in this->centre, skipping bad values. */
-         } else {
-            bc = this->centre;
-            for( ic = 0; ic < ncb; ic++ ) {
-               axval = cen ? cen[ ic ] : ptr[ ic ][ index ];
-               if( axval != AST__BAD ) bc[ ic ] = axval;
-            }
-         }            
-
-/* Find the coordinates at the new box corner. */
-         frm = astGetFrame( this_region->frameset, AST__BASE );
-         corner = GeoCorner( frm, ncb, bc, this->geolen, NULL, status );
-         frm = astAnnul( frm );
-
-/* ... and change the coords in the parent Region structure. */
-         for( ic = 0; ic < ncb; ic++ ) {
-            rptr[ ic ][ 0 ] = bc[ ic ];
-            rptr[ ic ][ 1 ] = corner[ ic ];
-         }
-
-/* Free resources */
-         if( ifrm == AST__CURRENT ) bc = astFree( bc );
-         corner = astFree( corner );
-
-/* Indicate the cached info in the Box structure is out of date. */
-         astResetCache( this );
-
-/* Any base Frame mesh or grid is now no good, so annul it. */
-         if( this_region->basemesh ) this_region->basemesh = astAnnul( this_region->basemesh );
-         if( this_region->basegrid ) this_region->basegrid = astAnnul( this_region->basegrid );
-
-      }
-   }
-
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Box. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Box "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Box.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstBox *large_box;           /* Box slightly larger than "this" */
-   AstBox *small_box;           /* Box slightly smaller than "this" */
-   AstBox *this;                /* Pointer to the Box structure. */
-   AstFrame *frm;               /* Base Frame in supplied Box */
-   AstPointSet *ps1;            /* Points masked by larger Box */
-   AstPointSet *ps2;            /* Points masked by larger and smaller Boxes */
-   AstRegion *tunc;             /* Uncertainity Region from "this" */
-   double **ptr;                /* Pointer to axis values in "ps2" */
-   double *large;               /* A corner position in the larger Box */
-   double *lbnd_tunc;           /* Lower bounds of "this" uncertainty Region */ 
-   double *lbnd_unc;            /* Lower bounds of supplied uncertainty Region */ 
-   double *p;                   /* Pointer to next axis value */
-   double *small;               /* A corner position in the smaller Box */
-   double *ubnd_tunc;           /* Upper bounds of "this" uncertainty Region */ 
-   double *ubnd_unc;            /* Upper bounds of supplied uncertainty Region */ 
-   double *wid;                 /* Widths of "this" border */
-   int i;                       /* Axis index */
-   int j;                       /* Point index */
-   int nc;                      /* No. of axes in Box base frame */
-   int np;                      /* No. of supplied points */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Box structure. */
-   this = (AstBox *) this_region;
-
-/* Ensure cached information is up to date. */
-   Cache( this, 0, status );
-
-/* Get the number of base Frame axes in the Box, and check the supplied 
-   PointSet has the same number of axis values per point. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-   nc = astGetNaxes( frm );
-   if( astGetNcoord( pset ) != nc && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
-                "values per point (%d) in the supplied PointSet - should be "
-                "%d (internal AST programming error).", status, astGetClass( this ),
-                astGetNcoord( pset ), nc );
-   }
-
-/* Get the number of axes in the uncertainty Region and check it is the 
-   same as above. */
-   if( unc && astGetNaxes( unc ) != nc && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
-                "in the supplied uncertainty Region - should be "
-                "%d (internal AST programming error).", status, astGetClass( this ),
-                astGetNaxes( unc ), nc );
-   }
-
-/* We now find the maximum distance on each axis that a point can be from the 
-   boundary of the Box for it still to be considered to be on the boundary. 
-   First get the Region which defines the uncertainty within the Box being
-   checked (in its base Frame), and get its bounding box. */
-   tunc = astGetUncFrm( this, AST__BASE );      
-   lbnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
-   ubnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
-   astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc ); 
-
-/* Also get the Region which defines the uncertainty of the supplied points
-   and get its bounding box. */
-   if( unc ) {
-      lbnd_unc = astMalloc( sizeof( double )*(size_t) nc );
-      ubnd_unc = astMalloc( sizeof( double )*(size_t) nc );
-      astGetRegionBounds( unc, lbnd_unc, ubnd_unc ); 
-   } else {
-      lbnd_unc = NULL;
-      ubnd_unc = NULL;
-   }
-
-/* The required border width for each axis is half of the total width of
-   the two bounding boxes. Use a zero sized box "unc" if no box was supplied. */   
-   wid = astMalloc( sizeof( double )*(size_t) nc );
-   large = astMalloc( sizeof( double )*(size_t) nc );
-   small = astMalloc( sizeof( double )*(size_t) nc );
-   if( astOK ) {
-      if( unc ) {
-         for( i = 0; i < nc; i++ ) {
-            wid[ i ] = 0.5*( fabs( astAxDistance( frm, i + 1, lbnd_tunc[ i ], ubnd_tunc[ i ] ) )
-                           + fabs( astAxDistance( frm, i + 1, lbnd_unc[ i ], ubnd_unc[ i ] ) ) );
-         }
-      } else {
-         for( i = 0; i < nc; i++ ) {
-            wid[ i ] = fabs( 0.5*astAxDistance( frm, i + 1, lbnd_tunc[ i ], ubnd_tunc[ i ] ) );
-         }
-      }
-
-/* Create two new Boxes, one of which is larger than "this" by the widths 
-   found above, and the other of which is smaller than "this" by the widths 
-   found above. */
-      for( i = 0; i < nc; i++ ) {
-         large[ i ] = this->centre[ i ]  + this->extent[ i ]*this->shrink + wid[ i ];
-         small[ i ] = this->extent[ i ]*this->shrink - wid[ i ];
-         if( small[ i ] < 0.0 ) small[ i ] = 0.0;
-         small[ i ] += this->centre[ i ];
-      }
-
-      large_box = astBox( frm, 0, this->centre, large, NULL, "", status );
-      small_box = astBox( frm, 0, this->centre, small, NULL, "", status );
-
-/* Negate the smaller region.*/
-      astNegate( small_box );
-
-/* Points are on the boundary of "this" if they are inside both the large
-   box and the negated smallbox. First transform the supplied PointSet
-   using the large box, then transform them using the negated smaller Box. */
-      ps1 = astTransform( large_box, pset, 1, NULL );
-      ps2 = astTransform( small_box, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
-   values per axis. */
-      ptr = astGetPoints( ps2 );
-      np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
-      if( mask ) {
-         *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
-         if( astOK ) {
-   
-/* Initialise the mask elements on the basis of the first axis values */
-            result = 1;
-            p = ptr[ 0 ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  (*mask)[ j ] = 0;
-               } else {
-                  (*mask)[ j ] = 1;
-               }
-            }
-
-/* Now check for bad values on other axes. */
-            for( i = 1; i < nc; i++ ) {
-               p = ptr[ i ];
-               for( j = 0; j < np; j++ ) {
-                  if( *(p++) == AST__BAD ) {
-                     result = 0;
-                     (*mask)[ j ] = 0;
-                  }
-               }
-            }
-         }
-
-/* If no output mask is to be made, we can break out of the check as soon
-   as the first bad value is found. */
-      } else if( astOK ) {
-         result = 1;
-         for( i = 0; i < nc && result; i++ ) {
-            p = ptr[ i ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-      }
-
-/* Free resources. */
-      large_box = astAnnul( large_box );
-      small_box = astAnnul( small_box );
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-   }
-
-   tunc = astAnnul( tunc );
-   frm = astAnnul( frm );
-   lbnd_tunc = astFree( lbnd_tunc );
-   ubnd_tunc = astFree( ubnd_tunc );
-   if( unc ) lbnd_unc = astFree( lbnd_unc );
-   if( unc ) ubnd_unc = astFree( ubnd_unc );
-   wid = astFree( wid );
-   large = astFree( large );
-   small = astFree( small );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr, 
-                     int *status ){
-/*
-*+
-*  Name:
-*     RegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     Box member function (overrides the astTraceRegion method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astTraceRegion method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
-   AstMapping *map;
-   AstPointSet *bpset;
-   AstPointSet *cpset;
-   double **bptr;
-   double d;
-   double lbnd[ 2 ];
-   double ubnd[ 2 ];
-   int i;
-   int ncur;
-   int result;         
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( ! astOK ) return result;
-
-/* Check it is 2-dimensional. */
-   if( astGetNin( this_region->frameset ) == 2 ) result = 1;
-
-/* Check we have some points to find. */
-   if( result && n > 0 ) {
-
-/* We first determine the required positions in the base Frame of the
-   Region, and then transform them into the current Frame. Get the 
-   base->current Mapping, and the number of current Frame axes. */
-      map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
-   base Frame positions directly into the supplied arrays. */
-      if( astIsAUnitMap( map ) ) {
-         bpset = NULL;
-         bptr = ptr;
-         ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions. */
-      } else {
-         bpset = astPointSet( n, 2, " ", status );
-         bptr = astGetPoints( bpset );
-         ncur = astGetNout( map );
-      }
-
-/* Check the pointers can be used safely. */
-      if( astOK ) {
-
-/* Get the bounds of the Region in the base Frame. */
-         astRegBaseBox( this_region, lbnd, ubnd );
-
-/* Loop round each point. Each edge of the box covers a parameteric
-   distance of 0.25, regardless of the aspect ratio of the box. */
-         for( i = 0; i < n; i++ ) {
-
-/* The right hand edge starts at 0.75 (parameter increases top to bottom). */
-            d = 4*dist[ i ] - 3;
-            if( d > 0 ) {
-               bptr[ 0 ][ i ] = ubnd[ 0 ];
-               bptr[ 1 ][ i ] = ( 1.0 - d )*ubnd[ 1 ] + d*lbnd[ 1 ];
-
-/* The top edge starts at 0.5 (parameter increases left to right). */
-            } else {
-               d += 1.0;
-               if( d > 0 ) {
-                  bptr[ 0 ][ i ] = ( 1.0 - d )*lbnd[ 0 ] + d*ubnd[ 0 ];
-                  bptr[ 1 ][ i ] = ubnd[ 1 ];
-
-/* The left hand edge starts at 0.25 (parameter increases bottom to top). */
-               } else {
-                  d += 1.0;
-                  if( d > 0 ) {
-                     bptr[ 0 ][ i ] = lbnd[ 0 ];
-                     bptr[ 1 ][ i ] = ( 1.0 - d )*lbnd[ 1 ] + d*ubnd[ 1 ];
-
-/* The bottom edge starts at 0.0 (parameter increases right to left). */
-                  } else {
-                     d += 1.0;
-                     bptr[ 0 ][ i ] = ( 1.0 - d )*ubnd[ 0 ] + d*lbnd[ 0 ];
-                     bptr[ 1 ][ i ] = lbnd[ 1 ];
-                  }
-               }
-            }
-         }
-      }
-
-/* If required, transform the base frame positions into the current
-   Frame, storing them in the supplied array. Then free resources. */
-      if( bpset ) {
-         cpset = astPointSet( n, ncur, " ", status );
-         astSetPoints( cpset, ptr );
-   
-         (void) astTransform( map, bpset, 1, cpset );
-   
-         cpset = astAnnul( cpset );
-         bpset = astAnnul( bpset );
-      }
-
-/* Free remaining resources. */
-      map = astAnnul( map );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void ResetCache( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Region member function (overrides the astResetCache method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   if( this ) {
-      ((AstBox *) this )->stale = 1;
-      (*parent_resetcache)( this, status );
-   }
-}
-
-static void SetClosed( AstRegion *this, int value, int *status ){
-/*
-*  Name:
-*     SetClosed
-
-*  Purpose:
-*     Set a value for the Closed attribute of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void SetClosed( AstRegion *this, int value, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the protected astSetClosed
-*     method inherited from the Region class).
-
-*  Description:
-*     This function sets a new value for the Closed attribute of a Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     value
-*        The new attribute value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int old;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the original attribute value */
-   old = astGetClosed( this );
-
-/* Invoke the set method inherited from the parent Region class */
-   (*parent_setclosed)( this, value, status );
-
-/* If the new value is not the same as the old value, indicate that we
-   need to re-calculate the cached information in the Box. */
-   if( value != old ) astResetCache( this );
-}
-
-static void SetNegated( AstRegion *this, int value, int *status ){
-/*
-*  Name:
-*     SetNegated
-
-*  Purpose:
-*     Set a value for the Negated attribute of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void SetNegated( AstRegion *this, int value, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the protected astSetNegated
-*     method inherited from the Region class).
-
-*  Description:
-*     This function sets a new value for the Negated attribute of a Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     value
-*        The new attribute value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int old;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the original attribute value */
-   old = astGetNegated( this );
-
-/* Invoke the set method inherited from the parent Region class */
-   (*parent_setnegated)( this, value, status );
-
-/* If the new value is not the same as the old value, indicate that we
-   need to re-calculate the cached information in the Box. */
-   if( value != old ) astResetCache( this );
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Box method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate that we need to re-calculate the cached information in the Box. */
-   astResetCache( this_region );
-}
-
-static double SetShrink( AstBox *this, double shrink, int *status ){
-/*
-*  Name:
-*     SetShrink
-
-*  Purpose:
-*     Store a new temporary shrink factor for a Box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     double SetShrink( AstBox *this, double shrink, int *status );
-
-*  Class Membership:
-*     Box method 
-
-*  Description:
-*     Boxes can be shrunk from their original size by calling this function. 
-*     The original shrink factor is 1.0. This function should be used for 
-*     assigning new values to since it also re-calculates Cahced information
-*     which depends on the current shrink factor.
-
-*  Parameters:
-*     this
-*        Pointer to the Box.
-*     shrink
-*        The new Shrink factor.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The original shrink factor.
-
-*/
-
-/* Local Variables: */
-   double result;
-
-/* Check the inherited status. */
-   if( !astOK ) return 1.0;
-
-/* Store the orignal shrink factor. */
-   result = this->shrink;
-
-/* Set the new value. */
-   this->shrink = shrink;
-
-/* If the new value is not the same as the old value, indicate that we
-   need to re-calculate the cached information in the Box. */
-   if( result != shrink ) astResetCache( this );
-
-/* Return the original value */
-   return result;
-}
-
-static void SetUnc( AstRegion *this, AstRegion *unc, int *status ){
-/*
-*  Name:
-*     SetUnc
-
-*  Purpose:
-*     Store uncertainty information in a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     void SetUnc( AstRegion *this, AstRegion *unc, int *status )
-
-*  Class Membership:
-*     Box method (over-rides the astSetUnc method inherited from the 
-*     Region class).
-
-*  Description:
-*     Each Region (of any class) can have an "uncertainty" which specifies 
-*     the uncertainties associated with the boundary of the Region. This
-*     information is supplied in the form of a second Region. The uncertainty 
-*     in any point on the boundary of a Region is found by shifting the 
-*     associated "uncertainty" Region so that it is centred at the boundary 
-*     point being considered. The area covered by the shifted uncertainty 
-*     Region then represents the uncertainty in the boundary position. 
-*     The uncertainty is assumed to be the same for all points.
-*
-*     The uncertainty is usually specified when the Region is created, but
-*     this function allows it to be changed at any time. 
-
-*  Parameters:
-*     this
-*        Pointer to the Region which is to be assigned a new uncertainty.
-*     unc
-*        Pointer to the new uncertainty Region. This must be either a Box, 
-*        a Circle or an Ellipse. A deep copy of the supplied Region will be 
-*        taken, so subsequent changes to the uncertainty Region using the 
-*        supplied pointer will have no effect on the Region "this".
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Invoke the astSetUnc method inherited from the parent Region class. */
-   (*parent_setunc)( this, unc, status );
-
-/* Indicate that we need to re-calculate the cached information in the Box. */
-   astResetCache( this );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Box method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstBox *box;                  /* Pointer to Box structure */
-   AstBox *newbox;               /* Pointer to simpler Box */
-   AstFrame *frm;                /* Pointer to current Frame */
-   AstMapping *map;              /* Base -> current Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstPointSet *basemesh;        /* Mesh of base Frame positions */
-   AstPointSet *mesh;            /* Mesh of current Frame positions */
-   AstPointSet *ps1;             /* Box corners in base Frame */
-   AstPointSet *ps2;             /* Box corners in current Frame */
-   AstPolygon *newpoly;          /* New Polygon to replace Box */
-   AstRegion *prism;             /* Prism combining all axes */
-   AstRegion *new;               /* Pointer to simplified Region */
-   AstRegion *this;              /* Pointer to supplied Region structure */
-   AstRegion *unc;               /* Pointer to uncertainty Region */
-   double **ptr1;                /* Pointers to axis values in ps1 */
-   double **ptr2;                /* Pointers to axis values in ps2 */
-   double *constants;            /* Axis constants array */
-   double *lbnd;                 /* Lower bounds for new Box */
-   double *ubnd;                 /* Upper bounds for new Box */
-   double corners[8];            /* Box corners in current Frame */
-   double k;                     /* Axis constant value */
-   double lb;                    /* Lower axis bound */
-   double rxx;                   /* Element of the Jacobian matrix */
-   double rxy;                   /* Element of the Jacobian matrix */
-   double ryx;                   /* Element of the Jacobian matrix */
-   double ryy;                   /* Element of the Jacobian matrix */
-   double ub;                    /* Upper axis bound */
-   int *inperm;                  /* Input axis permutation array */
-   int *outperm;                 /* Output axis permutation array */
-   int closed;                   /* Was original Region closed? */
-   int feed;                     /* Source of value for current axis */
-   int right_handed;             /* Is the new Frame right handed? */
-   int ic;                       /* Axis index */
-   int isInterval;               /* Is the simplified Box an Interval */
-   int isNull;                   /* Is the simplified Box a NullRegion? */
-   int neg;                      /* Was original Region negated? */
-   int nin;                      /* No. of base Frame axes (Mapping inputs) */
-   int nout;                     /* No. of current Frame axes (Mapping outputs) */
-   int olddir0;                  /* Original value of Direction(1) attribute */
-   int olddir1;                  /* Original value of Direction(2) attribute */
-   int simpler;                  /* Has some simplication taken place? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-   new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-   simpler = ( new != this );
-
-/* Get the Mapping from base to current Frame. */
-   map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-
-/* Get the number of inputs and outputs for the PermMap */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* If the Mapping from base to current Frame is a PermMap, we now explicitly 
-   how to swap the axes of the Box to produce either a new Box or an 
-   Interval. */
-   if( astIsAPermMap( map ) ){
-
-/* See if the new Box is Negated and/or Closed.*/
-      neg = astGetNegated( new );
-      closed = astGetClosed( new );
-
-/* Get a pointer to the Box structure. */
-      newbox = (AstBox *) new;
-
-/* Ensure cached information is up to date. */
-      Cache( newbox, 0, status );
-
-/* Get the input and output permutation arrays and the array of constants
-   from the PermMap. */
-      inperm = astGetInPerm( map );
-      outperm = astGetOutPerm( map );
-      constants = astGetConstants( map );
-
-/* Allocate memory to hold the axis bounds for the box in the current
-   Frame. */
-      lbnd = astMalloc( sizeof( double )*(size_t) nout );
-      ubnd = astMalloc( sizeof( double )*(size_t) nout );
-
-/* Check pointers can be used safely. */
-      if( astOK ) {
-
-/* Set flags indicating that the Box can be simplified, and does not result
-   in a NullRegion or an Interval. */
-         simpler = 1; 
-         isNull = 0; 
-         isInterval = 0; 
-
-/* Check each output (which corresponds to an axis in the current Frame
-   of the Box). */
-         for( ic = 0; ic < nout; ic++ ) {
-
-/* Find the input (a base Frame axis) which feeds this output when the
-   forward transformation of the PermMap is used. */
-            feed = outperm[ ic ];
-
-/* If this output is fed a constant (i.e. does not depend on any of the
-   inputs), then the output axis limits are equal to this constant. */
-            if( feed < 0 ) {
-               lbnd[ ic ] = constants[ (-feed) - 1 ];
-               ubnd[ ic ] = constants[ (-feed) - 1 ];
-
-/* If this output is fed the constant AST__BAD (i.e. does not depend on any of 
-   the inputs), then the output axis is unbounded and we will consequently
-   create an Interval rather than a Box. */
-            } else if( feed >= nin ) {
-               lbnd[ ic ] = AST__BAD;
-               ubnd[ ic ] = AST__BAD;
-
-/* If this output is fed the value of an input, then the output limits
-   are equal to the corresponding input limits. */
-            } else {
-               lbnd[ ic ] = newbox->centre[ feed ] - newbox->extent[ feed ]*newbox->shrink;
-               ubnd[ ic ] = newbox->centre[ feed ] + newbox->extent[ feed ]*newbox->shrink;
-            }
-
-/* If either bound is missing we will produce an Interval rather than a
-   Box. */
-            if( lbnd[ ic ] == AST__BAD || ubnd[ ic ] == AST__BAD ) {
-               isInterval = 1;
-            }
-         }
-
-/* If any base Frame axes are not present in the current Frame, we need
-   to check that the PermMap selects a slice which intersects the base
-   Frame box. If the slice does not intersect the base Frame box, then
-   the resulting Region willbe NullRegion. To do this, we check each
-   element in the input axis permutation array, "inperm". */
-         for( ic = 0; ic < nin; ic++ ) {
-
-/* Find the output (a current Frame axis) which feeds this input when the
-   inverse transformation of the PermMap is used. */
-            feed = inperm[ ic ];
-
-/* If this input is fed a constant (i.e. does not depend on any of the
-   outputs), then we must check that this constant is within the range of
-   axis values covered by the Box. If not then the simplified Box represents 
-   a slice through the coordinate system which does not pass through the 
-   original Box. In this case the simplified Region is a NullRegion
-   instead of a Box. */
-            if( feed < 0 ) {
-               k = constants[ (-feed) - 1 ];
-               lb = newbox->centre[ ic ] - newbox->extent[ ic ]*newbox->shrink;
-               ub = newbox->centre[ ic ] + newbox->extent[ ic ]*newbox->shrink;
-
-               if( closed == neg ) {
-                  isNull = ( k <= lb || k >= ub );
-               } else {
-                  isNull = ( k < lb || k > ub );
-               }
-
-/* If this input is fed the constant AST__BAD (i.e. does not depend on any of 
-   the outputs), then the input axis is unbounded and will consequently
-   extend beyond the Box. In this case the simplified Region will be a
-   NullRegion. */
-            } else if( feed >= nout ) {
-               isNull = 1;
-
-/* If this input is fed the value of an output, then check that the
-   relationship is bi-directional. If it is not, we cannot simplify the
-   Box. */
-            } else if( outperm[ feed ] != ic ) {
-               simpler = 0; 
-               break;
-            }
-         }
-
-/* If the Box can be simplified, create a new Region of an appropriate
-   class. */
-         if( simpler ) {
-
-/* Get any uncertainty from the supplied Box (it will already have been
-   simplified by the parent Simplify method). */
-            unc = astTestUnc( new ) ? astGetUncFrm( new, AST__CURRENT ) : NULL;
-
-/* Get the Frame represented by the Region. */
-            frm = astGetFrame( new->frameset, AST__CURRENT );
-
-/* We can now replace the original Region with the simplified Region so annul 
-   the original pointer. */
-            new = astAnnul( new );
- 
-/* Create a new Region of the required class. */
-            if( isNull ) {
-               new = (AstRegion *) astNullRegion( frm, unc, "", status );
-
-            } else if( isInterval ){
-               new = (AstRegion *) astInterval( frm, lbnd, ubnd, unc, "", status );
-
-            } else {
-               new = (AstRegion *) astBox( frm, 1, lbnd, ubnd, unc, "", status );
-            }
-
-/* If the original box was Negated. Negate the new one. */
-            if( neg ) astNegate( new );
-
-/* Free resources */
-            if( unc ) unc = astAnnul( unc );
-            frm = astAnnul( frm );
-
-         }
-      }
-
-/* Free resources */
-      inperm = astFree( inperm );
-      outperm = astFree( outperm );
-      constants = astFree( constants );
-      lbnd = astFree( lbnd );
-      ubnd = astFree( ubnd );
-
-/* If the Mapping from base to current Frame is not a PermMap or a UnitMap, we 
-   attempt to simplify the Box by re-defining it within its current Frame.
-   Transforming the box from its base to its current FRame may result in
-   the region no longer being a box. We test this by transforming a set of
-   bounds on the box boundary. */
-   } else if( !astIsAUnitMap( map ) ){
-
-/* Get pointer to current Frame. */
-      frm = astGetFrame( new->frameset, AST__CURRENT );
-
-/* Get a mesh of points covering the Box in its current Frame. */
-      mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty within the Box in
-   its current Frame. */
-      unc = astGetUncFrm( new, AST__CURRENT );
- 
-/* Find the best fitting box (defined in the current Frame) through these 
-   points */
-      newbox = BestBox( frm, mesh, unc, status );
-
-/* See if all points within this mesh fall on the boundary of the best
-   fitting Box, to within the uncertainty of the Region. */
-      if( astRegPins( newbox, mesh, NULL, NULL ) ) {
-
-/* If so, check that the inverse is true (we need to transform the
-   simplified boxes mesh into the base Frame of he original box for use by
-   astRegPins). */
-         (void) astAnnul( mesh );
-         mesh = astRegMesh( newbox );
-         basemesh = astTransform( map, mesh, 0, NULL );
-         if( astRegPins( new, basemesh, NULL, NULL ) ) {
-
-/* If so, use the new Box in place of the original Box. */
-            (void) astAnnul( new );
-            new = astClone( newbox );
-            simpler = 1;
-         }
-
-/* Free resources. */
-         basemesh = astAnnul( basemesh );
-
-/* If the transformed Box is not itself a Box, see if it can be
-   represented accurately by a Polygon. This is only possible for
-   2-dimensional Boxes. */
-      } else if( nin == 2 && nout == 2 ) {
-
-/* Create a PointSet holding the base Frame axis values at the four
-   corners of the Box. */
-         ps1 = astPointSet( 4, 2, "", status );
-         ptr1 = astGetPoints( ps1 );
-         if( astOK ) {
-            box = (AstBox *) new;
-            Cache( box, 0, status );
-
-/* For a "normal" right handed coordinate system, rotation from the positive 
-   first axis to the positive second axis is anti-clockwise. But for left
-   handed coordinate systems, it's the opposite. Determine if the required 
-   system is left or right handed by looking at the default values for
-   the Direction attribute. If the default values are equal, then the
-   system is right handed - otherwise it is left handed. We need to clear
-   any set Direction value first in order to get the default value, but
-   take care to re-instate any set Direction values afterwards. */
-            if( astTestDirection( frm, 0 )  ) {
-               olddir0 = astGetDirection( frm, 0 ) ? 1 : 0;
-               astClearDirection( frm, 0 );
-            } else {
-               olddir0 = -1;
-            }
-
-            if( astTestDirection( frm, 1 )  ) {
-               olddir1 = astGetDirection( frm, 1 ) ? 1 : 0;
-               astClearDirection( frm, 1 );
-            } else {
-               olddir1 = -1;
-            }
-
-            right_handed = ( astGetDirection( frm, 0 ) == astGetDirection( frm, 1 ) );
-
-            if( olddir0 != - 1 ) astSetDirection( frm, 0, olddir0 );
-            if( olddir1 != - 1 ) astSetDirection( frm, 1, olddir1 );
-
-/* The Mapping may change the handedness of the axes. That is, the
-   Mapping may reverse one axis without reversing the other. This will be
-   the case if the determinant of the Jacobian matrix of the Mapping is 
-   negative. Get the determinant. If it is negative, reverse the
-   handedness of the axes. */
-            rxx = astRate( map, box->centre, 0, 0 );
-            rxy = astRate( map, box->centre, 0, 1 );
-            ryx = astRate( map, box->centre, 1, 0 );
-            ryy = astRate( map, box->centre, 1, 1 );
-            if( rxx*ryy - rxy*ryx < 0 ) right_handed = ! right_handed;
-
-/* The order in which the polygon vertices are stored determines whether
-   the interior or exterior of the polygon forms the inside of the
-   Region. We want the inside to be the interior so we must store the
-   vertices in anti-clockwise order within the new coordinate Frame. Do
-   right handed systems first. */
-            if( right_handed ) {
-               ptr1[ 0 ][ 0 ] = box->centre[ 0 ] - box->extent[ 0 ];
-               ptr1[ 1 ][ 0 ] = box->centre[ 1 ] + box->extent[ 1 ];
-   
-               ptr1[ 0 ][ 1 ] = box->centre[ 0 ] - box->extent[ 0 ];
-               ptr1[ 1 ][ 1 ] = box->centre[ 1 ] - box->extent[ 1 ];
-   
-               ptr1[ 0 ][ 2 ] = box->centre[ 0 ] + box->extent[ 0 ];
-               ptr1[ 1 ][ 2 ] = box->centre[ 1 ] - box->extent[ 1 ];
-   
-               ptr1[ 0 ][ 3 ] = box->centre[ 0 ] + box->extent[ 0 ];
-               ptr1[ 1 ][ 3 ] = box->centre[ 1 ] + box->extent[ 1 ];
-
-/* For left handed systems, "anti-clockwise" implies the opposite order */
-            } else {
-               ptr1[ 0 ][ 3 ] = box->centre[ 0 ] - box->extent[ 0 ];
-               ptr1[ 1 ][ 3 ] = box->centre[ 1 ] + box->extent[ 1 ];
-   
-               ptr1[ 0 ][ 2 ] = box->centre[ 0 ] - box->extent[ 0 ];
-               ptr1[ 1 ][ 2 ] = box->centre[ 1 ] - box->extent[ 1 ];
-   
-               ptr1[ 0 ][ 1 ] = box->centre[ 0 ] + box->extent[ 0 ];
-               ptr1[ 1 ][ 1 ] = box->centre[ 1 ] - box->extent[ 1 ];
-   
-               ptr1[ 0 ][ 0 ] = box->centre[ 0 ] + box->extent[ 0 ];
-               ptr1[ 1 ][ 0 ] = box->centre[ 1 ] + box->extent[ 1 ];
-            }
-         }
-
-/* Transform the Box corners into the current Frame. */
-         ps2 = astTransform( map, ps1, 1, NULL );
-         ptr2 = astGetPoints( ps2 );
-         if( astOK ) {
-
-/* Create a Polygon from these points. */
-            for( ic = 0; ic < 4; ic++ ) {
-               corners[ ic ] = ptr2[ 0 ][ ic ];
-               corners[ 4 + ic ] = ptr2[ 1 ][ ic ];
-            }
-            newpoly = astPolygon( frm, 4, 4, corners, unc, "", status );
-
-/* See if all points within the Box mesh fall on the boundary of this
-   Polygon, to within the uncertainty of the Region. */
-            if( astRegPins( newpoly, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Polygon in place of the original Box. */
-               (void) astAnnul( new );
-               new = astClone( newpoly );
-               simpler = 1;
-            }
-
-/* Free resources. */
-            newpoly = astAnnul( newpoly );
-         }
-
-         ps1 = astAnnul( ps1 );
-         ps2 = astAnnul( ps2 );
-      } 
-
-/* If we have yet been able to produce a simpler region, we now try
-   splitting the Box into two separate Boxes defined in separate
-   coordinate Frames. If either of these two Boxes can be simplified,
-   create a Prism containing the two simplified Boxes, and attempt to
-   simplify the Prism. Otherwise a clone of "new" is returned by
-   astConvertToPrism. */
-      if( !simpler ) {
-         prism = astConvertToPrism( new );
-
-         if( prism != new ) {
-            simpler = 1;
-            (void) astAnnul( new );
-            new = prism;
-
-         } else {
-            prism = astAnnul( prism );
-         }
-      }
-
-      frm = astAnnul( frm );
-      mesh = astAnnul( mesh );
-      unc = astAnnul( unc );
-      newbox = astAnnul( newbox );
-   }
-
-   map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-   if( simpler ){
-      astRegOverlay( new, this, 1 );
-      result = (AstMapping *) new;
-
-   } else {
-      new = astAnnul( new );
-      result = astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Box to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Box member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a Box and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the Box.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the Box.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstBox *box;                  /* Pointer to Box */
-   AstFrame *frm;                /* Pointer to base Frame in FrameSet */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstRegion *reg;               /* Pointer to Region */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double **ptr_tmp;             /* Pointer to base Frame coordinate data */
-   double axval;                 /* Input axis value */
-   int closed;                   /* Is the boundary part of the Region? */
-   int coord;                    /* Zero-based index for coordinates */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int ncoord_tmp;               /* No. of coordinates per base Frame point */
-   int neg;                      /* Is the Box negated?*/
-   int npoint;                   /* No. of points */
-   int ok;                       /* Is the point inside the Region? */
-   int point;                    /* Loop counter for points */
-
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain pointers to the Regionand to the Box. */
-   reg = (AstRegion *) this;
-   box = (AstBox *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
-   from the current Frame in the encapsulated FrameSet (the Frame
-   represented by the Region), to the base Frame (the Frame in which the
-   Region is defined). This call also returns a pointer to the base Frame
-   of the encapsulated FrameSet. Note, the returned pointer may be a
-   clone of the "in" pointer, and so we must be carefull not to modify the
-   contents of the returned PointSet. */
-   pset_tmp = astRegTransform( reg, in, 0, NULL, &frm );
-
-/* Determine the numbers of points and coordinates per point from the base
-   Frame PointSet and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-   npoint = astGetNpoint( pset_tmp );
-   ncoord_tmp = astGetNcoord( pset_tmp );
-   ptr_tmp = astGetPoints( pset_tmp );      
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* See if the boundary is part of the Region. */
-   closed = astGetClosed( reg );
-
-/* See if the Box is negated */
-   neg = astGetNegated( reg );
-
-/* Ensire the cached information is up to date. */
-   Cache( box, 1, status );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* The logic used to combine axis values for negated and un-negated boxes
-   is different. For negated boxes, a position is in the region if *any
-   one* axis is not "close" to the box centre. */
-      if( neg ) {   
-
-/* Loop round each point */
-         for ( point = 0; point < npoint; point++ ) {
-
-/* Assume the point is outside the Region (since the Region is
-   negated, this means assuming it is within the box). */
-            ok = 0;
-
-/* Loop round each axis value at this point. We break as soon as we find
-   a bad axis value or an axis value which is outside the box. */
-            for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-
-/* The point is definiately not in the Region if any input axis value is bad. */
-               axval = ptr_tmp[ coord ][ point ];
-               if( axval == AST__BAD ) {
-                  break;
-
-/* Otherwise check the current axis value, depending on whether the
-   boundary is included in the Region or not. Break as soon as an axis
-   value is found which is outside the box limits (i.e. in the Region). */
-               } else if( !astAxIn( frm, coord, box->lo[ coord ], box->hi[ coord ], 
-                                    axval, !closed ) ) {
-                  ok = 1;
-                  break;
-               }
-            }
-
-/* If this point is not inside the Region store bad output axis values. */
-            if( !ok ) {
-               for ( coord = 0; coord < ncoord_out; coord++ ) {
-                  ptr_out[ coord ][ point ] = AST__BAD;
-               }
-            }
-         }
-
-/* For un-negated boxes, a position is in the region if *all* axes are "close"
-   to the box centre. */
-      } else {
-
-/* Loop round each point */
-         for ( point = 0; point < npoint; point++ ) {
-
-/* Assume the point is within the Region (i.e.inside the box). */
-            ok = 1;
-
-/* Loop round each axis value at this point. We break when we find a bad
-   input point or if any axis value is outside the box. */
-            for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-
-/* The point is not in the Region if any input axis value is bad. */
-               axval = ptr_tmp[ coord ][ point ];
-               if( axval == AST__BAD ) {
-                  ok = 0;
-                  break;
-
-/* Otherwise check the current axis value, depending on whether the
-   boundary is included in the Region or not. Break as soon as an axis
-   value is found which is outside the box limits (i.e. outside the Region). */
-               } else if( !astAxIn( frm, coord, box->lo[ coord ], box->hi[ coord ], 
-                                    axval, closed ) ) {
-                  ok = 0;
-                  break;
-               }
-            }
-
-/* If this point is outside the Region store bad output axis values. */
-            if( !ok ) {
-               for ( coord = 0; coord < ncoord_out; coord++ ) {
-                  ptr_out[ coord ][ point ] = AST__BAD;
-               }
-            }
-         }
-      }
-   }
-
-/* Free resources */
-   pset_tmp = astAnnul( pset_tmp );
-   frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Region objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Region objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstBox *in;                /* Pointer to input Box */
-   AstBox *out;               /* Pointer to output Box */
-   int nax;                   /* Number of base Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Boxs. */
-   in = (AstBox *) objin;
-   out = (AstBox *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Box. */
-   out->extent = NULL;
-   out->shextent = NULL;
-   out->centre = NULL;
-   out->lo = NULL;
-   out->hi = NULL;
-   out->geolen = NULL;
-
-/* Copy dynamic memory contents */
-   nax = astGetNin( ((AstRegion *) in)->frameset );
-   out->extent = astStore( NULL, in->extent, 
-                           sizeof( double )*(size_t)nax );
-   out->centre = astStore( NULL, in->centre, 
-                           sizeof( double )*(size_t)nax );
-   out->shextent = astStore( NULL, in->shextent, 
-                           sizeof( double )*(size_t)nax );
-   out->lo = astStore( NULL, in->lo, 
-                           sizeof( double )*(size_t)nax );
-   out->hi = astStore( NULL, in->hi, 
-                           sizeof( double )*(size_t)nax );
-   out->geolen = astStore( NULL, in->geolen, 
-                           sizeof( double )*(size_t)nax );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Box objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Box objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstBox *this;                 /* Pointer to Box */
-
-/* Obtain a pointer to the Box structure. */
-   this = (AstBox *) obj;
-
-/* Annul all resources. */
-   this->extent = astFree( this->extent );
-   this->centre = astFree( this->centre );
-   this->shextent = astFree( this->shextent );
-   this->lo = astFree( this->lo );
-   this->hi = astFree( this->hi );
-   this->geolen = astFree( this->geolen );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Box objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Box class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Box whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstBox *this;                 /* Pointer to the Box structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Box structure. */
-   this = (AstBox *) this_object;
-
-/* Write out values representing the instance variables for the
-   Box class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsABox and astCheckBox functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Box,Region)
-astMAKE_CHECK(Box)
-
-AstBox *astBox_( void *frame_void, int form, const double point1[], 
-                 const double point2[], AstRegion *unc, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astBox
-f     AST_BOX
-
-*  Purpose:
-*     Create a Box.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "box.h"
-c     AstBox *astBox( AstFrame *frame, int form, const double point1[], 
-c                     const double point2[], AstRegion *unc,
-c                     const char *options, ... )
-f     RESULT = AST_BOX( FRAME, FORM, POINT1, POINT2, UNC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Box constructor.
-
-*  Description:
-*     This function creates a new Box and optionally initialises its
-*     attributes.
-*
-*     The Box class implements a Region which represents a box with sides 
-*     parallel to the axes of a Frame (i.e. an area which encloses a given 
-*     range of values on each axis). A Box is similar to an Interval, the
-*     only real difference being that the Interval class allows some axis
-*     limits to be unspecified. Note, a Box will only look like a box if
-*     the Frame geometry is approximately flat. For instance, a Box centred
-*     close to a pole in a SkyFrame will look more like a fan than a box
-*     (the Polygon class can be used to create a box-like region close to a 
-*     pole).
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. A deep
-*        copy is taken of the supplied Frame. This means that any
-*        subsequent changes made to the Frame using the supplied pointer
-*        will have no effect the Region.
-c     form
-f     FORM = INTEGER (Given)
-*        Indicates how the box is described by the remaining parameters.
-*        A value of zero indicates that the box is specified by a centre 
-*        position and a corner position. A value of one indicates that the 
-*        box is specified by a two opposite corner positions.
-c     point1
-f     POINT1( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). If
-c        "form"
-f        FORM
-*        is zero, this array should contain the coordinates at the centre of
-*        the box.
-c        If "form"
-f        If FORM
-*        is one, it should contain the coordinates at the corner of the box
-*        which is diagonally opposite the corner specified by
-c        "point2".
-f        POINT2.
-c     point2
-f     POINT2( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates at any corner of the
-*        box.
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with the boundary of the Box being created. 
-*        The uncertainty in any point on the boundary of the Box is found by 
-*        shifting the supplied "uncertainty" Region so that it is centred at 
-*        the boundary point being considered. The area covered by the
-*        shifted uncertainty Region then represents the uncertainty in the
-*        boundary position. The uncertainty is assumed to be the same for
-*        all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-*        The uncertainty Region has two uses: 1) when the 
-c        astOverlap
-f        AST_OVERLAP 
-*        function compares two Regions for equality the uncertainty
-*        Region is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using 
-c        astSimplify),
-f        AST_SIMPLIFY),
-*        the uncertainties are used to determine if the transformed boundary 
-*        can be accurately represented by a specific shape of Region.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Box. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Box. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astBox()
-f     AST_BOX = INTEGER
-*        A pointer to the new Box.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstBox *new;                  /* Pointer to new Box */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the Box, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitBox( NULL, sizeof( AstBox ), !class_init, &class_vtab,
-                     "Box", frame, form, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Box's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Box. */
-   return new;
-}
-
-AstBox *astBoxId_( void *frame_void, int form, const double point1[], 
-                   const double point2[], void *unc_void, const char *options, 
-                   ... ) {
-/*
-*  Name:
-*     astBoxId_
-
-*  Purpose:
-*     Create a Box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstBox *astBoxId_( AstFrame *frame, int form, const double point1[], 
-*                        const double point2[], AstRegion *unc, 
-*                        const char *options, ... )
-
-*  Class Membership:
-*     Box constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astBox constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astBox_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astBox_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astBox_.
-
-*  Returned Value:
-*     The ID value associated with the new Box.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstBox *new;                  /* Pointer to new Box */
-   AstRegion *unc;               /* Pointer to Region structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Box, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitBox( NULL, sizeof( AstBox ), !class_init, &class_vtab,
-                     "Box", frame, form, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Box's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Box. */
-   return astMakeId( new );
-}
-
-AstBox *astInitBox_( void *mem, size_t size, int init, AstBoxVtab *vtab, 
-                     const char *name, AstFrame *frame, int form,
-                     const double point1[], const double point2[],
-                     AstRegion *unc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitBox
-
-*  Purpose:
-*     Initialise a Box.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstBox *astInitBox_( void *mem, size_t size, int init, AstBoxVtab *vtab, 
-*                         const char *name, AstFrame *frame, int form,
-*                         const double point1[], const double point2[],
-*                         AstRegion *unc )
-
-*  Class Membership:
-*     Box initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Box object. It allocates memory (if necessary) to accommodate
-*     the Box plus any additional data associated with the derived class.
-*     It then initialises a Box structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Box at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Box is to be initialised.
-*        This must be of sufficient size to accommodate the Box data
-*        (sizeof(Box)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Box (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Box
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Box's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Box.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     form
-*        Indicates how the box is described by the remaining parameters.
-*        A value of zero indicates that the box is specified by a centre 
-*        position and a corner position. A value of one indicates that the 
-*        box is specified by a two opposite corner positions.
-*     point1
-*        An array of double, with one element for each Frame axis (Naxes 
-*        attribute). If "form" is zero, this array should contain the 
-*        coordinates at the centre of the box. If "form" is one, it should 
-*        contain the coordinates at the corner of the box which is diagonally 
-*        opposite the corner specified by "point2".
-*     point2
-*        An array of double, with one element for each Frame axis (Naxes 
-*        attribute) containing the coordinates at any of the corners of
-*        the box.
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points on the boundary of the new Box
-*        being initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal to 
-*        1.0E-6 of the dimensions of the new Box's bounding box are used. 
-*        If an uncertainty Region is supplied, it must be either a Box, a 
-*        Circle or an Ellipse, and its encapsulated Frame must be related
-*        to the Frame supplied for parameter "frame" (i.e. astConvert
-*        should be able to find a Mapping between them). Two positions 
-*        the "frame" Frame are considered to be co-incident if their 
-*        uncertainty Regions overlap. The centre of the supplied
-*        uncertainty Region is immaterial since it will be re-centred on the 
-*        point being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new Box.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstBox *new;              /* Pointer to new Box */
-   AstPointSet *pset;        /* PointSet to pass to Region initialiser */
-   double **ptr;             /* Pointer to coords data in pset */
-   int i;                    /* axis index */
-   int nc;                   /* No. of axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitBoxVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Get the number of axis values required for each position. */
-   nc = astGetNaxes( frame );
-
-/* Create a PointSet to hold the supplied values, and get points to the
-   data arrays. */
-   pset = astPointSet( 2, nc, "", status );
-   ptr = astGetPoints( pset );
-
-/* Copy the supplied coordinates into the PointSet, checking that no bad 
-   values have been supplied. */
-   for( i = 0; astOK && i < nc; i++ ) {
-      if( point1[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitBox(%s): The value of axis %d is "
-                   "undefined at point 1 of the box.", status, name, i + 1 );
-         break;
-      } 
-      if( point2[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitBox(%s): The value of axis %d is "
-                   "undefined at point 2 of the box.", status, name, i + 1 );
-         break;
-      }
-      ptr[ i ][ 0 ] = point1[ i ];
-      ptr[ i ][ 1 ] = point2[ i ];
-   }
-
-/* If two corners were supplied, find and store the centre. */
-   if( form == 1 ) {
-      for( i = 0; i < nc; i++ ) {
-         ptr[ i ][ 0 ] = 0.5*( point1[ i ] + point2[ i ] );
-      }
-   }
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the Box structure, allocating memory if necessary. */
-      new = (AstBox *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                      name, frame, pset, unc );
-
-      if ( astOK ) {
-
-/* Initialise the Box data. */
-/* ------------------------ */
-         new->shrink = 1.0;
-         new->extent = NULL;  
-         new->shextent = NULL;
-         new->centre = NULL;  
-         new->lo = NULL;      
-         new->hi = NULL;      
-         new->geolen = NULL;      
-         new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Box. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free resources. */
-   pset = astAnnul( pset );
-
-/* Return a pointer to the new Box. */
-   return new;
-}
-
-AstBox *astLoadBox_( void *mem, size_t size, AstBoxVtab *vtab, 
-                     const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadBox
-
-*  Purpose:
-*     Load a Box.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstBox *astLoadBox( void *mem, size_t size, AstBoxVtab *vtab, 
-*                         const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Box loader.
-
-*  Description:
-*     This function is provided to load a new Box using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Box structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Box at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Box is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Box data (sizeof(Box)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Box (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Box structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstBox) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Box. If this is NULL, a pointer
-*        to the (static) virtual function table for the Box class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Box" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Box.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstBox *new;              /* Pointer to the new Box */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Box. In this case the
-   Box belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstBox );
-      vtab = &class_vtab;
-      name = "Box";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-          astInitBoxVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Box. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Box" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* Initialise Box data */
-      new->shrink = 1.0;
-      new->extent = NULL;  
-      new->shextent = NULL;
-      new->centre = NULL;  
-      new->lo = NULL;      
-      new->hi = NULL;      
-      new->geolen = NULL;      
-      new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Box. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Box pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-void astBoxPoints_( AstBox *this, double *centre, double *corner, 
-                    int *status) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Box,BoxPoints))( this, centre, corner, status );
-   return;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/box.h b/ast-5.3-1/box.h
deleted file mode 100644
index f7d313e..0000000
--- a/ast-5.3-1/box.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#if !defined( BOX_INCLUDED ) /* Include this file only once */
-#define BOX_INCLUDED
-/*
-*+
-*  Name:
-*     box.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Box class.
-
-*  Invocation:
-*     #include "box.h"
-
-*  Description:
-*     This include file defines the interface to the Box class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Box class implement a Region which represents a simple interval
-*     on each axis of the encapsulated Frame
-
-*  Inheritance:
-*     The Box class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-MAR-2003 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Box structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstBox {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *extent;               /* Original axis half-widths */
-   double *shextent;             /* Shrunk axis half-widths */
-   double *centre;               /* Box centre coords */
-   double shrink;                /* Temporary shrink factor */
-   double *lo;                   /* Shrunk low limits */
-   double *hi;                   /* Shrunk high limits */
-   double *geolen;               /* Geodesic half-dimensions of box */
-   int stale;                    /* Is other info out of date? */
-} AstBox;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstBoxVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* BoxPoints)( AstBox *, double *, double *, int *);
-} AstBoxVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstBoxGlobals {
-   AstBoxVtab Class_Vtab;
-   int Class_Init;
-} AstBoxGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitBoxGlobals_( AstBoxGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Box)          /* Check class membership */
-astPROTO_ISA(Box)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstBox *astBox_( void *, int, const double[], const double[], AstRegion *, const char *, int *, ...);
-#else
-AstBox *astBoxId_( void *, int, const double[], const double[], AstRegion *, const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstBox *astInitBox_( void *, size_t, int, AstBoxVtab *,
-                     const char *, AstFrame *, int, const double[],
-                     const double[], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitBoxVtab_( AstBoxVtab *, const char *, int * );
-
-/* Loader. */
-AstBox *astLoadBox_( void *, size_t, AstBoxVtab *,
-                     const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-void astBoxPoints_( AstBox *, double *, double *, int *);
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckBox(this) astINVOKE_CHECK(Box,this,0)
-#define astVerifyBox(this) astINVOKE_CHECK(Box,this,1)
-
-/* Test class membership. */
-#define astIsABox(this) astINVOKE_ISA(Box,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astBox astINVOKE(F,astBox_)
-#else
-#define astBox astINVOKE(F,astBoxId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitBox(mem,size,init,vtab,name,frame,form,p1,p2,unc) \
-astINVOKE(O,astInitBox_(mem,size,init,vtab,name,frame,form,p1,p2,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitBoxVtab(vtab,name) astINVOKE(V,astInitBoxVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadBox(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadBox_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckBox to validate Box pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astBoxPoints(this,centre,corner) astINVOKE(V,astBoxPoints_(astCheckBox(this),centre,corner,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/c2f77.c b/ast-5.3-1/c2f77.c
deleted file mode 100644
index 28696c9..0000000
--- a/ast-5.3-1/c2f77.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-*  Name:
-*     c2f77.c
-
-*  Purpose:
-*     Implement the interface between the C and FORTRAN 77 languages.
-
-*  Description:
-*     This file implements language-specific functions which support
-*     the FORTRAN 77 interface to the AST library.
-*
-*     Note that this module is not a class implementation, although it
-*     resembles one.
-
-*  Notes:
-*     - Some of the functions in this module are potentially platform
-*     dependent and may need to be re-implemented when porting the AST
-*     library to new platforms.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     15-NOV-1996 (RFWS):
-*        Original version (based on work by DSB and on code from the
-*        Starlink CNF library).
-*/
-
-/* Define the astCLASS macro (even although this is not a class
-   implementation) to obtain access to protected interfaces. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"               /* Error reporting facilities */
-#include "c2f77.h"               /* Interface to this module */
-
-/* Function implementations. */
-/* ========================= */
-void astStringExport_( const char *source_c, char *dest_f, int dest_len ) {
-/*
-*+
-*  Name:
-*     astStringExport
-
-*  Purpose:
-*     Export a C string to a FORTRAN string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "c2f77.h"
-*     void astStringExport( const char *source_c, char *dest_f, int dest_len )
-
-*  Description:
-*     This function creates a FORTRAN string from a C string, storing
-*     it in the supplied memory. If the C string is shorter than the
-*     space allocated for the FORTRAN string, then it is padded with
-*     blanks. If the C string is longer than the space allocated for
-*     the FORTRAN string, then the string is truncated.
-
-*  Parameters:
-*     source_c 
-*        A pointer to the input C string.
-*     dest_f 
-*        A pointer to the output FORTRAN string.
-*     dest_len 
-*        The length of the output FORTRAN string.
-
-*  Notes:
-*     - This function is potentially platform-specific. For example,
-*     if FORTRAN strings were passed by descriptor, then the
-*     descriptor address would be passed as "dest_f" and this must
-*     then be used to locate the actual FORTRAN character data.
-*     - This function is described as protected but is in fact
-*     available through the public interface so that it may be used in
-*     constructing the FORTRAN 77 public interface.
-*     - This is the UNIX version of this function.
-*-
-*/
-
-/* Local Variables:*/
-   int i;                        /* Loop counter for characters */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Copy the characters of the input C string to the output FORTRAN
-   string, taking care not to go beyond the end of the FORTRAN
-   string.*/
-   for ( i = 0; source_c[ i ] && ( i < dest_len ); i++ ) {
-      dest_f[ i ] = source_c[ i ];
-   }
-
-/* Fill the rest of the output FORTRAN string with blanks. */
-   for ( ; i < dest_len; i++ ) dest_f[ i ] = ' ';
-}
diff --git a/ast-5.3-1/c2f77.h b/ast-5.3-1/c2f77.h
deleted file mode 100644
index a06494e..0000000
--- a/ast-5.3-1/c2f77.h
+++ /dev/null
@@ -1,166 +0,0 @@
-#if !defined( C2F77_INCLUDED )   /* Include this file only once */
-#define C2F77_INCLUDED
-/*
-*+
-*  Name:
-*     c2f77.h
-
-*  Purpose:
-*     Define the interface to the c2f77 module.
-
-*  Description:
-*     This file defines language-specific functions which support the
-*     FORTRAN 77 interface to the AST library.
-*
-*     Note that this module is not a class implementation, although it
-*     resembles one.
-
-*  Functions Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astStringExport
-*           Export a C string to a FORTRAN string.
-
-*  Macros Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astWatchSTATUS
-*           Execute C code while watching a FORTRAN STATUS variable.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     15-NOV-1996 (RFWS):
-*        Original version.
-*     16-JUL-1997 (RFWS):
-*        Added astWatchSTATUS.
-*     13-JUN-2001 (DSB):
-*        Make astStringExport available to F77 interface modules as well
-*        as AST classes.
-*-
-*/
-
-/* Macros. */
-/* ======= */
-/*
-*+
-*  Name:
-*     astWatchSTATUS
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Execute C code while watching a FORTRAN STATUS variable.
-
-*  Synopsis:
-*     #include "c2f77.h"
-*     astWatchSTATUS(code)
-
-*  Description:
-*     This macro expands to code which executes the C code supplied
-*     via the "code" argument in a new C scope (delimited by
-*     {...}). The code supplied executes while the AST error status is
-*     equated to a variable called STATUS, which is an error status
-*     argument passed from a FORTRAN routine using the macros defined
-*     in the "f77.h" include file.
-*
-*     The effect of this is roughly as if the astWatch function had
-*     been used to locally declare the FORTRAN STATUS argument as a
-*     new AST error status variable, except that this macro also works
-*     if STATUS is not an int.
-
-*  Parameters:
-*     code
-*        The C code to be executed.
-
-*  Examples:
-*     F77_SUBROUTINE(ast_doit)( INTEGER(STATUS) ) {
-*        astWatchSTATUS(
-*           astDoit();
-*        )
-*     }
-*        Causes the astDoit function to be invoked as if the AST error
-*        status were equated to the STATUS argument passed from
-*        FORTRAN.  Typically, if STATUS is set to an error value,
-*        astDoit would detect this by means of the astOK macro and
-*        would not then execute.  If an error occurs in astDoit,
-*        causing the AST error status to be set, then that value is
-*        transferred to STATUS after the C code has executed (i.e. at
-*        the end of the astWatchSTATUS macro).
-
-*  Notes:
-*     - The FORTRAN argument must be called STATUS and must appear in
-*     the C function's parameter list as an argument of the INTEGER()
-*     macro defined in the "f77.h" include file.
-*     - The C code supplied executes in a new scope, in which
-*     automatic variables may be declared. However, such variables
-*     will not exist after the macro's expansion has been executed.
-*     - The AST error status variable and its value remain unchanged
-*     after the expansion of this macro has executed.
-*-
-*/
-
-/* Define the macro. */
-#define astWatchSTATUS(code) \
-\
-/* Begin a new C scope. */ \
-{ \
-\
-/* Ensure that a pointer to the STATUS argument exists. */ \
-   GENPTR_INTEGER(STATUS) \
-\
-/* Store the STATUS value in a local int. */ \
-   int ast_local_status = *STATUS; \
-   int *status = &ast_local_status; \
-\
-/* Make this int the AST error status variable, saving the address of \
-   the previous variable. */ \
-   int *ast_previous_status = astWatch( &ast_local_status ); \
-\
-/* Execute the code supplied using the new error status variable. */ \
-   code \
-\
-/* Restore the original error status variable. */ \
-   (void) astWatch( ast_previous_status ); \
-\
-/* Return the final error status to STATUS. */ \
-   *STATUS = ast_local_status; \
-}
-
-/* Function prototypes. */
-/* ==================== */
-void astStringExport_( const char *, char *, int );
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module to make them
-   easier to use. */
-#define astStringExport astStringExport_
-#endif
diff --git a/ast-5.3-1/channel.c b/ast-5.3-1/channel.c
deleted file mode 100644
index 708ed28..0000000
--- a/ast-5.3-1/channel.c
+++ /dev/null
@@ -1,5898 +0,0 @@
-/*
-*class++
-*  Name:
-*     Channel
-
-*  Purpose:
-*     Basic (textual) I/O channel.
-
-*  Constructor Function:
-c     astChannel
-f     AST_CHANNEL
-
-*  Description:
-*     The Channel class implements low-level input/output for the AST
-*     library.  Writing an Object to a Channel will generate a textual
-*     representation of that Object, and reading from a Channel will
-*     create a new Object from its textual representation.
-*
-*     Normally, when you use a Channel, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-f     and "sink" routines which connect it to an external data store
-*     by reading and writing the resulting text. By default, however,
-*     a Channel will read from standard input and write to standard
-*     output.
-
-*  Inheritance:
-*     The Channel class inherits from the Object class.
-
-*  Attributes:
-*     In addition to those attributes common to all Objects, every
-*     Channel also has the following attributes:
-*
-*     - Comment: Include textual comments in output?
-*     - Full: Set level of output detail
-*     - ReportLevel: Selects the level of error reporting
-*     - Skip: Skip irrelevant data?
-*     - Strict: Generate errors instead of warnings?
-
-*  Functions:
-c     In addition to those functions applicable to all Objects, the
-c     following functions may also be applied to all Channels:
-f     In addition to those routines applicable to all Objects, the
-f     following routines may also be applied to all Channels:
-*
-c     - astWarnings: Return warnings from the previous read or write
-c     - astPutChannelData: Store data to pass to source or sink functions
-c     - astRead: Read an Object from a Channel
-c     - astWrite: Write an Object to a Channel
-f     - AST_WARNINGS: Return warnings from the previous read or write
-f     - AST_READ: Read an Object from a Channel
-f     - AST_WRITE: Write an Object to a Channel
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     12-AUG-1996 (RFWS):
-*        Original version.
-*     6-SEP-1996:
-*        Finished initial implementation.
-*     11-DEC-1996 (RFWS):
-*        Added support for foreign language source and sink functions.
-*     28-APR-1997 (RFWS):
-*        Prevent "-0" being written (use "0" instead).
-*     27-NOV-2002 (DSB):
-*        Added astWriteInvocations.
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitChannelVtab
-*        method.
-*        - Modified to use protected Vtab initialisation methods when
-*        loading an Object.
-*     1-NOV-2003 (DSB):
-*        Change the initialiser so that it accepts source and sink
-*        wrapper functions as arguments (for use by derived classes).
-*     16-AUG-2006 (DSB):
-*        - Document non-destructive nature of unsuccessful astRead calls
-*        on a FitsChan.
-*     3-OCT-2008 (DSB):
-*        Added "Strict" attribute.
-*     11-DEC-2008 (DSB):
-*        Added astPutChannelData and astChannelData functions.
-*     16-JAN-2009 (DSB):
-*        Added astAddWarning and astWarnings.
-*     11-JUN-2009 (DSB):
-*        Enable astChannelData to be used from within astRead.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Channel
-
-/* Define a string containing the maximum length of keywords used to
-   identify values in the external representation of data. This is
-   deliberately kept small so as to simplify integration with
-   standards such as FITS. */
-#define MAX_NAME "8"
-
-/* Define the increment used for indenting output text. */
-#define INDENT_INC 3
-
-/* Max length of string returned by GetAttrib */
-#define GETATTRIB_BUFF_LEN 50    
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "channel.h"             /* Interface definition for this class */
-#include "loader.h"              /* Interface to the global loader */
-#include "keymap.h"              /* Storing arbitrary data in an AST Object */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->AstReadClassData_Msg = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->Items_Written = 0; \
-   globals->Current_Indent = 0; \
-   globals->Nest = -1; \
-   globals->Nwrite_Invoc = 0; \
-   globals->Object_Class = NULL; \
-   globals->Values_List = NULL; \
-   globals->Values_Class = NULL; \
-   globals->Values_OK = NULL; \
-   globals->End_Of_Object = NULL; \
-   globals->Channel_Data  = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Channel)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Channel,Class_Init)
-#define class_vtab astGLOBAL(Channel,Class_Vtab)
-#define astreadclassdata_msg astGLOBAL(Channel,AstReadClassData_Msg)
-#define getattrib_buff astGLOBAL(Channel,GetAttrib_Buff)
-#define items_written  astGLOBAL(Channel,Items_Written)
-#define current_indent astGLOBAL(Channel,Current_Indent)
-#define nest           astGLOBAL(Channel,Nest)
-#define nwrite_invoc   astGLOBAL(Channel,Nwrite_Invoc)
-#define object_class   astGLOBAL(Channel,Object_Class)
-#define values_list    astGLOBAL(Channel,Values_List)
-#define values_class   astGLOBAL(Channel,Values_Class)
-#define values_ok      astGLOBAL(Channel,Values_OK)
-#define end_of_object  astGLOBAL(Channel,End_Of_Object)
-#define channel_data   astGLOBAL(Channel,Channel_Data)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 ); 
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Contextual error message reported in astReadClassData? */
-static int astreadclassdata_msg = 0;
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Count of the number of output items written since the last "Begin"
-   or "IsA" item. */
-static int items_written = 0;
-
-/* Amount of indentation to be applied to the next output item. */
-static int current_indent = 0;
-
-/* Nesting level, used to keep track of data associated with building
-   Objects when they contain other Objects. */
-static int nest = -1;
-
-/* The number of times astWrite has been invoked. */
-static int nwrite_invoc = 0;
-
-/* Pointer to a user-supplied block of memory to be made available to 
-   source or sink functions via the astChannelData function. */
-static void *channel_data = NULL;
-
-/***
-   The following items are all pointers to dynamically allocated
-   arrays (stacks) that grow as necessary to accommodate one element
-   for each level of nesting (one more than the value of "nest").
-***/
-
-/* Stack of pointers to null-terminated character strings giving the
-   names of the classes of the Objects being built at each nesting
-   level. */
-static char **object_class = NULL;
-
-/* Stack of pointers to the elements designated as the "heads" of
-   circular, doubly linked lists of name-value associations. */
-static AstChannelValue **values_list = NULL;
-
-/* Stack of pointers to null-terminated character strings giving the
-   names of the classes for which the values held in the values lists
-   are intended. */
-static char **values_class = NULL;
-
-/* Stack of flags indicating whether the values held in the values
-   lists are intended for the class loaders currently executing to
-   build Objects at each nesting level. */
-static int *values_ok = NULL;
-
-/* Stack of flags indicating whether "End" items have been read for
-   the Objects being built at each nesting level. */
-static int *end_of_object = NULL;
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstChannelVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstChannel *astChannelForId_( const char *(*)( void ),
-                              char *(*)( const char *(*)( void ), int * ),
-                              void (*)( const char * ),
-                              void (*)( void (*)( const char * ),
-                                        const char *, int * ),
-                              const char *, ... );
-AstChannel *astChannelId_( const char *(*)( void ), void (*)( const char * ), const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstObject *Read( AstChannel *, int * );
-static AstObject *ReadObject( AstChannel *, const char *, AstObject *, int * );
-static AstChannelValue *FreeValue( AstChannelValue *, int * );
-static AstChannelValue *LookupValue( const char *, int * );
-static AstKeyMap *Warnings( AstChannel *, int * );
-static char *GetNextText( AstChannel *, int * );
-static char *InputTextItem( AstChannel *, int * );
-static char *ReadString( AstChannel *, const char *, const char *, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double ReadDouble( AstChannel *, const char *, double, int * );
-static int GetComment( AstChannel *, int * );
-static int GetFull( AstChannel *, int * );
-static int GetReportLevel( AstChannel *, int * );
-static int GetSkip( AstChannel *, int * );
-static int GetStrict( AstChannel *, int * );
-static int ReadInt( AstChannel *, const char *, int, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestComment( AstChannel *, int * );
-static int TestFull( AstChannel *, int * );
-static int TestReportLevel( AstChannel *, int * );
-static int TestSkip( AstChannel *, int * );
-static int TestStrict( AstChannel *, int * );
-static int Use( AstChannel *, int, int, int * );
-static int Write( AstChannel *, AstObject *, int * );
-static void AddWarning( AstChannel *, int, const char *, const char *, int * );
-static void AppendValue( AstChannelValue *, AstChannelValue **, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearComment( AstChannel *, int * );
-static void ClearFull( AstChannel *, int * );
-static void ClearReportLevel( AstChannel *, int * );
-static void ClearSkip( AstChannel *, int * );
-static void ClearStrict( AstChannel *, int * );
-static void ClearValues( AstChannel *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetNextData( AstChannel *, int, char **, char **, int * );
-static void OutputTextItem( AstChannel *, const char *, int * );
-static void PutChannelData( AstChannel *, void *, int * );
-static void PutNextText( AstChannel *, const char *, int * );
-static void ReadClassData( AstChannel *, const char *, int * );
-static void RemoveValue( AstChannelValue *, AstChannelValue **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetComment( AstChannel *, int, int * );
-static void SetFull( AstChannel *, int, int * );
-static void SetReportLevel( AstChannel *, int, int * );
-static void SetSkip( AstChannel *, int, int * );
-static void SetStrict( AstChannel *, int, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void Unquote( AstChannel *, char *, int * );
-static void WriteBegin( AstChannel *, const char *, const char *, int * );
-static void WriteDouble( AstChannel *, const char *, int, int, double, const char *, int * );
-static void WriteEnd( AstChannel *, const char *, int * );
-static void WriteInt( AstChannel *, const char *, int, int, int, const char *, int * );
-static void WriteIsA( AstChannel *, const char *, const char *, int * );
-static void WriteObject( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-static void WriteString( AstChannel *, const char *, int, int, const char *, const char *, int * );
-
-/* Member functions. */
-/* ================= */
-static void AddWarning( AstChannel *this, int level, const char *msg, 
-                        const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astAddWarning
-
-*  Purpose:
-*     Add a warning to a Channel.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astAddWarning( AstChannel *this, int level, const char *msg, 
-*                         const char *method, int status, ... )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function stores a warning message inside a Channel. These
-*     messages can be retirieved using astWarnings.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     level
-*        Ignore the warning if the ReportLevel attribute value is less
-*        than "level".
-*     msg
-*        The wanting message to store. It may contain printf format
-*        specifiers. If a NULL pointer is supplied, all warnings
-*        currently stored in the Channel are removed.
-*     method
-*        The method name.
-*     status 
-*        Inherited status value.
-*     ...
-*        Extra values to substitute into the message string as
-*        replacements for the printf format specifiers.
-*-
-
-*  Note: The expansion of the printf format specifiers is done in the
-*     astAddWarning_ wrapper function. The AddWarning functions defined by
-*     each class receives the fully expanded message and does not have a
-*     variable argument list. The variable argument list is included in the
-*     above prologue in order to document the wrapper function.
-
-*/
-
-/* Local Variables: */
-   int i;          /* Message index */
-   char *a;        /* Pointer to copy of message */
-
-/* If a NULL pointer was supplied, free all warnings currently in the
-   Channel. Do this before checking the inherited status so that it works
-   even if an error has occurred. */
-   if( !msg ) {
-      for( i = 0; i < this->nwarn; i++ ) {
-         (this->warnings)[ i ] = astFree( (this->warnings)[ i ] );
-      }
-      this->warnings = astFree( this->warnings );
-      this->nwarn = 0;
-      return;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Only proceed if the message level is sufficiently important. */
-   if( astGetReportLevel( this ) >= level ) {
-
-/* If we are being strict, issue an error rather than a warning. */
-      if( astGetStrict( this ) ) {
-         if( astOK ) {
-            astError( AST__BADIN, "%s(%s): %s", status, method, 
-                      astGetClass( this ), msg );
-         }
-
-/* Otherwise, we store a copy of the message in the Channel. */
-      } else {
-
-/* Allocate memory and store a copy of th supplied string in it. */
-         a = astStore( NULL, msg, strlen( msg ) + 1 );
-
-/* Expand the array of warning pointers in ther Channel structure. */
-         this->warnings = astGrow( this->warnings, this->nwarn + 1, 
-                                   sizeof( char * ) );
-
-/* If all is OK so far, store the new warning pointer, and increment the
-   number of warnings in the Channel. */
-         if( astOK ) {
-            (this->warnings)[ (this->nwarn)++ ] = a;
-
-/* Otherwise, attempt to free the memory holding the copy of the warning. */
-         } else {
-            a = astFree( a );
-         }
-      }
-   }
-}
-
-static void AppendValue( AstChannelValue *value, AstChannelValue **head, int *status ) {
-/*
-*  Name:
-*     AppendValue
-
-*  Purpose:
-*     Append a Value structure to a list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void AppendValue( AstChannelValue *value, AstChannelValue **head, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function appends a Value structure to a doubly linked
-*     circular list of such structures. The new list element is
-*     inserted just in front of the element occupying the "head of
-*     list" position (i.e. it becomes the new last element in the
-*     list).
-
-*  Parameters:
-*     value
-*        Pointer to the new element. This must not already be in the
-*        list.
-*     head
-*        Address of a pointer to the element at the head of the list
-*        (this pointer should be NULL if the list is initially
-*        empty). This pointer will only be updated if a new element is
-*        being added to an empty list.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error chacking and does not
-*     generate errors.
-*/
-
-/* If the list is initially empty, the sole new element points at
-   itself. */
-   if ( !*head ) {
-      value->flink = value;
-      value->blink = value;
-
-/* Update the list head to identify the new element. */
-      *head = value;
-
-/* Otherwise, insert the new element in front of the element at the
-   head of the list. */
-   } else {
-      value->flink = *head;
-      value->blink = ( *head )->blink;
-      ( *head )->blink = value;
-      value->blink->flink = value;
-   }
-}
-
-void *astChannelData_( void ) {
-/*
-c++
-*  Name:
-*     astChannelData
-
-*  Purpose:
-*     Return a pointer to user-supplied data stored with a Channel.
-
-*  Type:
-*     Public macro.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void *astChannelData
-
-*  Class Membership:
-*     Channel macro.
-
-*  Description:
-*     This macro is intended to be used within the source or sink 
-*     functions associated with a Channel. It returns any pointer 
-*     previously stored in the Channel (that is, the Channel that has
-*     invoked the source or sink function) using astPutChannelData. 
-*
-*     This mechanism is a thread-safe alternative to passing file
-*     descriptors, etc, via static global variables.
-
-*  Returned Value:
-*     astChannelData
-*        The pointer previously stored with the Channel using
-*        astPutChannelData. A NULL pointer will be returned if no such
-*        pointer has been stored with the Channel.
-
-*  Applicability:
-*     Channel
-*        This macro applies to all Channels.
-
-*  Notes:
-*     - This routine is not available in the Fortran 77 interface to
-*     the AST library.
-c--
-*/
-   astDECLARE_GLOBALS;
-   astGET_GLOBALS(NULL);
-   return channel_data;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Channel member function (over-rides the astClearAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Channel, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstChannel *this;              /* Pointer to the Channel structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Channel structure. */
-   this = (AstChannel *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Comment. */
-/* -------- */
-   if ( !strcmp( attrib, "comment" ) ) {
-      astClearComment( this );
-
-/* Full. */
-/* ----- */
-   } else if ( !strcmp( attrib, "full" ) ) {
-      astClearFull( this );
-
-/* ReportLevel. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "reportlevel" ) ) {
-      astClearReportLevel( this );
-
-/* Skip. */
-/* ----- */
-   } else if ( !strcmp( attrib, "skip" ) ) {
-      astClearSkip( this );
-
-/* Strict. */
-/* ------- */
-   } else if ( !strcmp( attrib, "strict" ) ) {
-      astClearStrict( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearValues( AstChannel *this, int *status ) {
-/*
-*  Name:
-*     ClearValues
-
-*  Purpose:
-*     Clear the current values list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void ClearValues( AstChannel *this, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function clears any (un-read) Value structures remaining in
-*     the current values list (i.e. at the current nesting level). It
-*     should be invoked after all required values have been read.
-*
-*     If the values list has not been read, or if any remaining values
-*     are found (i.e. the list is not empty) then this indicates an
-*     unrecognised input class or an input value that has not been
-*     read by a class loader. This implies an error in the loader, or
-*     bad input data, so an error is reported.
-*
-*     All resources used by any remaining Value structures are freed
-*     and the values list is left in an empty state.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel being read. This is only used for
-*        constructing error messages. It must not be NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set on entry, although no further error report will be
-*     made if it subsequently fails under these circumstances.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstChannelValue **head;       /* Address of pointer to values list */
-   AstChannelValue *value;       /* Pointer to value list element */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* If "values_class" is non-NULL, then the values list has previously
-   been filled with Values for a class. */
-   if ( values_class[ nest ] ) {
-
-/* If "values_ok" is zero, however, then these Values have not yet
-   been read by a class loader. This must be due to a bad class name
-   associated with them or because the class data are not available in
-   the correct order. If we are using strict error reporting, then report 
-   an error (unless the error status is already set). */
-      if ( astGetStrict( this ) && !values_ok[ nest ] && astOK ) {
-         astError( AST__BADIN,
-                   "astRead(%s): Invalid class structure in input data.", status,
-                   astGetClass( this ) );
-         astError( AST__BADIN,
-                   "Class \"%s\" is invalid or out of order within a %s.", status,
-                   values_class[ nest ], object_class[ nest ] );
-      }
-
-/* Free the memory holding the class string. */
-      values_class[ nest ] = astFree( values_class[ nest ] );
-   }
-
-/* Reset the "values_ok" flag. */
-   values_ok[ nest ] = 0;
-
-/* Now clear any Values remaining in the values list. Obtain the
-   address of the pointer to the head of this list (at the current
-   nesting level) and loop to remove Values from the list while it is
-   not empty. */
-   head = values_list + nest;
-   while ( *head ) {
-
-/* Obtain a pointer to the first element. */
-      value = *head;
-
-/* Issue a warning. */
-      if ( value->is_object ) {
-         astAddWarning( this, 1, "The Object \"%s = <%s>\" was "
-                        "not recognised as valid input.", "astRead", status,
-                        value->name, astGetClass( value->ptr.object ) );
-      } else {
-         astAddWarning( this, 1, "The value \"%s = %s\" was not "
-                        "recognised as valid input.", "astRead", status,
-                        value->name, value->ptr.string );
-      }
-
-/* Remove the Value structure from the list (which updates the head of
-   list pointer) and free its resources. */
-      RemoveValue( value, head, status );
-      value = FreeValue( value, status );
-   }
-}
-
-static AstChannelValue *FreeValue( AstChannelValue *value, int *status ) {
-/*
-*  Name:
-*     FreeValue
-
-*  Purpose:
-*     Free a dynamically allocated Value structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstChannelValue *FreeValue( AstChannelValue *value, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function frees a dynamically allocated Value structure,
-*     releasing all resources used by it. The structure contents must
-*     have been correctly initialised.
-
-*  Parameters:
-*     value
-*        Pointer to the Value structure to be freed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A NULL pointer is always returned.
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set on entry, although no further error report will be
-*     made if it subsequently fails under these circumstances.
-*/
-
-/* Check that a non-NULL pointer has been supplied. */
-   if ( value ) {
-
-/* If the "name" component has been allocated, then free it. */
-      if ( value->name ) value->name = astFree( value->name );
-
-/* If the "ptr" component identifies an Object, then annul the Object
-   pointer. */
-      if ( value->is_object ) {
-         if ( value->ptr.object ) {
-            value->ptr.object = astAnnul( value->ptr.object );
-         }
-
-/* Otherwise, if it identifies a string, then free the string. */
-      } else {
-         if ( value->ptr.string ) {
-            value->ptr.string = astFree( value->ptr.string );
-         }
-      }
-
-/* Free the Value structure itself. */
-      value = astFree( value );
-   }
-
-/* Return a NULL pointer. */
-   return NULL;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Channel member function (over-rides the protected astGetAttrib
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Channel, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Channel, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Channel. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstChannel *this;             /* Pointer to the Channel structure */
-   const char *result;           /* Pointer value to return */
-   int comment;                  /* Comment attribute value */
-   int full;                     /* Full attribute value */
-   int report_level;             /* ReportLevel attribute value */
-   int skip;                     /* Skip attribute value */
-   int strict;                   /* Report errors insead of warnings? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Channel structure. */
-   this = (AstChannel *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Comment. */
-/* -------- */
-   if ( !strcmp( attrib, "comment" ) ) {
-      comment = astGetComment( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", comment );
-         result = getattrib_buff;
-      }
-
-/* Full. */
-/* ----- */
-   } else if ( !strcmp( attrib, "full" ) ) {
-      full = astGetFull( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", full );
-         result = getattrib_buff;
-      }
-
-/* ReportLevel. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "reportlevel" ) ) {
-      report_level = astGetReportLevel( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", report_level );
-         result = getattrib_buff;
-      }
-
-/* Skip. */
-/* ----- */
-   } else if ( !strcmp( attrib, "skip" ) ) {
-      skip = astGetSkip( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", skip );
-         result = getattrib_buff;
-      }
-
-/* Strict. */
-/* ------- */
-   } else if ( !strcmp( attrib, "strict" ) ) {
-      strict = astGetStrict( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", strict );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void GetNextData( AstChannel *this, int skip, char **name,
-                         char **val, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNextData
-
-*  Purpose:
-*     Read the next item of data from a data source.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astGetNextData( AstChannel *this, int skip, char **name,
-*                          char **val )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function reads the next item of input data from a data
-*     source associated with a Channel and returns the result.
-*
-*     It is layered conceptually on the astGetNextText method, but
-*     instead of returning the raw input text, it decodes it and
-*     returns name/value pairs ready for use. Note that in some
-*     derived classes, where the data are not stored as text, this
-*     function may not actually use astGetNextText, but will access
-*     the data directly.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     skip
-*        A non-zero value indicates that a new Object is to be read,
-*        and that all input data up to the next "Begin" item are to be
-*        skipped in order to locate it. This is useful if the data
-*        source contains AST objects interspersed with other data (but
-*        note that these other data cannot appear inside AST Objects,
-*        only between them).
-*
-*        A zero value indicates that all input data are significant
-*        and the next item will therefore be read and an attempt made
-*        to interpret it whatever it contains. Any other data
-*        inter-mixed with AST Objects will then result in an error.
-*     name
-*        An address at which to store a pointer to a null-terminated
-*        dynamically allocated string containing the name of the next
-*        item in the input data stream. This name will be in lower
-*        case with no surrounding white space.  It is the callers
-*        responsibilty to free the memory holding this string (using
-*        astFree) when it is no longer required.
-*
-*        A NULL pointer value will be returned (without error) to
-*        indicate when there are no further input data items to be
-*        read.
-*     val
-*        An address at which to store a pointer to a null-terminated
-*        dynamically allocated string containing the value associated
-*        with the next item in the input data stream. No case
-*        conversion is performed on this string and all white space is
-*        potentially significant.  It is the callers responsibilty to
-*        free the memory holding this string (using astFree) when it
-*        is no longer required.
-*
-*        The returned pointer will be NULL if an Object data item is
-*        read (see the "Data Representation" section).
-
-*  Data Representation:
-*     The returned data items fall into the following categories:
-*
-*     - Begin: Identified by the name string "begin", this indicates
-*     the start of an Object definition. The associated value string
-*     gives the class name of the Object being defined.
-*
-*     - IsA: Identified by the name string "isa", this indicates the
-*     end of the data associated with a particular class structure
-*     within the definiton of a larger Object. The associated value
-*     string gives the name of the class whose data have just been
-*     read.
-*
-*     - End: Identified by the name string "end", this indicates the
-*     end of the data associated with a complete Object
-*     definition. The associated value string gives the class name of
-*     the Object whose definition is being ended.
-*
-*     - Non-Object: Identified by any other name string plus a
-*     non-NULL "val" pointer, this gives the value of a non-Object
-*     structure component (instance variable). The name identifies
-*     which instance variable it is (within the context of the class
-*     whose data are being read) and the value is encoded as a string.
-*
-*     - Object: Identified by any other name string plus a NULL "val"
-*     pointer, this identifies the value of an Object structure
-*     component (instance variable).  The name identifies which
-*     instance variable it is (within the context of the class whose
-*     data are being read) and the value is given by subsequent data
-*     items (so the next item should be a "Begin" item).
-
-*  Notes:
-*     - NULL pointer values will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*     - This method is provided primarily so that derived classes may
-*     over-ride it in order to read from alternative data sources. It
-*     provides a higher-level interface than astGetNextText, so is
-*     suitable for classes that either need to read textual data in a
-*     different format, or to read from non-textual data sources.
-*-
-*/
-
-/* Local Variables: */
-   char *line;                   /* Pointer to input text line */
-   int done;                     /* Data item read? */
-   int i;                        /* Loop counter for string characters */
-   int len;                      /* Length of input text line */
-   int nc1;                      /* Offset to start of first field */
-   int nc2;                      /* Offset to end of first field */
-   int nc3;                      /* Offset to start of second field */
-   int nc;                       /* Number of charaters read by "astSscanf" */
-
-/* Initialise the returned values. */
-   *name = NULL;
-   *val = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Read the next input line as text (the loop is needed to allow
-   initial lines to be skipped if the "skip" flag is set). */
-   done = 0;
-   while ( !done && ( line = InputTextItem( this, status ) ) && astOK ) {
-
-/* If OK, determine the line length. */
-      len = strlen( line );
-
-/* Non-Object value. */
-/* ----------------- */
-/* Test for lines of the form " name = value" (or similar), where the
-   name is no more than MAX_NAME characters long (the presence of a
-   value on the right hand side indicates that this is a non-Object
-   value, encoded as a string). Ignore these lines if the "skip" flag
-   is set. */
-      if ( nc = 0,
-           ( !skip
-             && ( 0 == astSscanf( line,
-                               " %n%*" MAX_NAME "[^ \t=]%n = %n%*[^\n]%n",
-                               &nc1, &nc2, &nc3, &nc ) )
-             && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-         done = 1;
-
-/* Extract the name and value fields. */
-         *name = astString( line + nc1, nc2 - nc1 );
-         *val = astString( line + nc3, len - nc3 );
-
-/* If OK, truncate the value to remove any trailing white space. */
-         if ( astOK ) {
-            i = len - nc3 - 1;
-            while ( ( i >= 0 ) && isspace( ( *val )[ i ] ) ) i--;
-            ( *val )[ i + 1 ] = '\0';
-
-/* Also remove any quotes from the string. */
-            Unquote( this, *val, status );
-         }
-
-/* Object value. */
-/* ------------- */
-/* Test for lines of the form " name = " (or similar), where the name
-   is no more than MAX_NAME characters long (the absence of a value on
-   the right hand side indicates that this is an Object, whose
-   definition follows on subsequent input lines). Ignore these lines
-   if the "skip" flag is set. */
-      } else if ( nc = 0,
-                  ( !skip
-                    && ( 0 == astSscanf( line,
-                                      " %n%*" MAX_NAME "[^ \t=]%n = %n",
-                                      &nc1, &nc2, &nc ) )
-                    && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-         done = 1;
-
-/* Extract the name field but leave the value pointer as NULL. */
-         *name = astString( line + nc1, nc2 - nc1 );
-
-/* Begin. */
-/* ------ */
-/* Test for lines of the form " Begin Class " (or similar). */
-      } else if ( nc = 0,
-             ( ( 0 == astSscanf( line,
-                             " %*1[Bb]%*1[Ee]%*1[Gg]%*1[Ii]%*1[Nn] %n%*s%n %n",
-                              &nc1, &nc2, &nc ) )
-               && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-         done = 1;
-
-/* Set the returned name to "begin" and extract the associated class
-   name for the value. Store both of these in dynamically allocated
-   strings. */
-         *name = astString( "begin", 5 );
-         *val = astString( line + nc1, nc2 - nc1 );
-
-/* IsA. */
-/* ---- */
-/* Test for lines of the form " IsA Class " (or similar). Ignore these
-   lies if the "skip" flag is set. */
-      } else if ( nc = 0,
-                  ( !skip
-                    && ( 0 == astSscanf( line,
-                                      " %*1[Ii]%*1[Ss]%*1[Aa] %n%*s%n %n",
-                                      &nc1, &nc2, &nc ) )
-                    && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-         done = 1;
-
-/* Set the returned name to "isa" and extract the associated class
-   name for the value. */
-         *name = astString( "isa", 3 );
-         *val = astString( line + nc1, nc2 - nc1 );
-
-/* End. */
-/* ---- */
-/* Test for lines of the form " End Class " (or similar). Ignore these
-   lines if the "skip" flag is set. */
-      } else if ( nc = 0,
-                  ( !skip
-                    && ( 0 == astSscanf( line,
-                                      " %*1[Ee]%*1[Nn]%*1[Dd] %n%*s%n %n",
-                                      &nc1, &nc2, &nc ) )
-                    && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-         done = 1;
-
-/* If found, set the returned name to "end" and extract the associated
-   class name for the value. */
-         *name = astString( "end", 3 );
-         *val = astString( line + nc1, nc2 - nc1 );
-
-/* If the input line didn't match any of the above and the "skip" flag
-   is not set, then report an error. */
-      } else if ( !skip ) {
-         astError( AST__BADIN,
-                   "astRead(%s): Cannot interpret the input data: \"%s\".", status,
-                   astGetClass( this ), line );
-      }
-
-/* Free the memory holding the input data as text. */
-      line = astFree( line );
-   }
-
-/* If successful, convert the name to lower case. */
-   if ( astOK && *name ) {
-      for ( i = 0; ( *name )[ i ]; i++ ) {
-         ( *name )[ i ] = tolower( ( *name )[ i ] );
-      }
-   }
-
-/* If an error occurred, ensure that any memory allocated is freed and
-   that NULL pointer values are returned. */
-   if ( !astOK ) {
-      *name = astFree( *name );
-      *val = astFree( *val );
-   }
-}
-
-static char *GetNextText( AstChannel *this, int *status ) {
-/*
-*+
-*  Name:
-*     GetNextText
-
-*  Purpose:
-*     Read the next line of input text from a data source.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     char *astGetNextText( AstChannel *this )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function reads the next "raw" input line of text from the
-*     data source associated with a Channel.
-*
-*     Each line is returned as a pointer to a null-terminated string
-*     held in dynamic memory, and it is the caller's responsibility to
-*     free this memory (using astFree) when it is no longer
-*     required. A NULL pointer is returned if there are no more input
-*     lines to be read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-
-*  Returned Value:
-*     Pointer to a null-terminated string containing the input line
-*     (held in dynamically allocated memory, which must be freed by
-*     the caller when no longer required). A NULL pointer is returned
-*     if there are no more input lines to be read.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - This method is provided primarily so that derived classes may
-*     over-ride it in order to read from alternative (textual) data
-*     sources.
-*-
-*/
-
-/* Local Constants: */
-#define MIN_CHARS 81             /* Initial size for allocating memory */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
-   char errbuf[ ERRBUF_LEN ];    /* Buffer for system error message */
-   char *errstat;                /* Pointer for system error message */
-   char *line;                   /* Pointer to line data to be returned */
-   int c;                        /* Input character */
-   int len;                      /* Length of input line */
-   int readstat;                 /* "errno" value set by "getchar" */
-   int size;                     /* Size of allocated memory */
-
-/* Initialise. */
-   line = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return line;
-
-/* About to call an externally supplied function which may not be
-   thread-safe, so lock a mutex first. */
-   LOCK_MUTEX3;
-
-/* Source function defined. */
-/* ------------------------ */
-/* If a source function (and its wrapper function) is defined for the
-   Channel, use the wrapper function to invoke the source function to
-   read a line of input text. This is returned in a dynamically
-   allocated string. */
-   if ( this->source && this->source_wrap ) {
-      line = ( *this->source_wrap )( this->source, status );
-
-/* No source function. */
-/* ------------------- */
-/* Read the line from standard input. */
-   } else {
-      c = '\0';
-      len = 0;
-      size = 0;
-
-/* Loop to read input characters, saving any "errno" value that may be
-   set by "getchar" if an error occurs. Quit if an end of file (or
-   error) occurs or if a newline character is read. */
-      while ( errno = 0, c = getchar(), readstat = errno,
-              ( c != EOF ) && ( c != '\n' ) ) {
-
-/* If no memory has yet been allocated to hold the line, allocate some
-   now, using MIN_CHARS as the initial line length. */
-         if ( !line ) {
-            line = astMalloc( sizeof( char ) * (size_t) MIN_CHARS );
-            size = MIN_CHARS;
-
-/* If memory has previously been allocated, extend it when necessary
-   to hold the new input character (plus a terminating null) and note
-   the new size. */
-         } else if ( ( len + 2 ) > size ) {
-            line = astGrow( line, len + 2, sizeof( char ) );
-            if ( !astOK ) break;
-            size = (int) astSizeOf( line );
-         }
-
-/* Store the character just read. */
-         line[ len++ ] = c;
-      }
-
-/* If the above loop completed without setting the global error
-   status, check the last character read and use "ferror" to see if a
-   read error occurred. If so, report the error, using the saved
-   "errno" value (but only if one was set). */
-      if ( astOK && ( c == EOF ) && ferror( stdin ) ) {
-         if ( readstat ) {
-#if HAVE_STRERROR_R
-            strerror_r( readstat, errbuf, ERRBUF_LEN );
-            errstat = errbuf;
-#else
-            errstat = strerror( readstat );
-#endif
-            astError( AST__RDERR,
-                      "astRead(%s): Read error on standard input - %s.", status,
-                      astGetClass( this ), errbuf );
-         } else {
-            astError( AST__RDERR,
-                      "astRead(%s): Read error on standard input.", status,
-                      astGetClass( this ) );
-         }
-      }
-
-/* If an empty line has been read, allocate memory to hold an empty
-   string. */
-      if ( !line && ( c == '\n' ) ) {
-         line = astMalloc( sizeof( char ) );
-      }
-
-/* If memory has been allocated and there has been no error,
-   null-terminate the string of input characters. */
-      if ( line ) {
-         if ( astOK ) {
-            line[ len ] = '\0';
-
-/* If there has been an error, free the allocated memory. */
-         } else {
-            line = astFree( line );
-         }
-      }
-   }
-
-   UNLOCK_MUTEX3;
-
-/* Return the result pointer. */
-   return line;
-
-/* Undefine macros local to this function. */
-#undef MIN_CHARS
-#undef ERRBUF_LEN
-}
-
-static AstKeyMap *Warnings( AstChannel *this, int *status ){
-/*
-*++
-*  Name:
-c     astWarnings
-f     AST_WARNINGS
-
-*  Purpose:
-*     Returns any warnings issued by the previous read or write operation.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "channel.h"
-c     AstKeyMap *astWarnings( AstChannel *this )
-f     RESULT = AST_WARNINGS( THIS, STATUS )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function returns an AST KeyMap object holding the text of any
-*     warnings issued as a result of the previous invocation of the 
-c     astRead or astWrite
-f     AST_READ or AST_WRITE
-*     function on the Channel. If no warnings were issued, a 
-c     a NULL value
-f     AST__NULL 
-*     will be returned. 
-*
-*     Such warnings are non-fatal and will not prevent the
-*     read or write operation succeeding. However, the converted object
-*     may not be identical to the original object in all respects.
-*     Differences which would usually be deemed as insignificant in most 
-*     usual cases will generate a warning, whereas more significant 
-*     differences will generate an error.
-*
-*     The "Strict" attribute allows this warning facility to be switched
-*     off, so that a fatal error is always reported for any conversion
-*     error.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Channel.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astWarnings()
-f     AST_WARNINGS = INTEGER
-*        A pointer to the KeyMap holding the warning messages, or 
-c        NULL
-f        AST__NULL
-*        if no warnings were issued during the previous read operation. 
-
-*  Applicability:
-*     Channel
-*        The basic Channel class generates a warning when ever an
-*        un-recognised item is encountered whilst reading an Object from
-*        an external data source. If Strict is zero (the default), then
-*        unexpected items in the Object description are simply ignored,
-*        and any remaining items are used to construct the returned
-*        Object. If Strict is non-zero, an error will be reported and a
-*        NULL Object pointer returned if any unexpected items are
-*        encountered.
-*
-*        As AST continues to be developed, new attributes are added
-*        occasionally to selected classes. If an older version of AST is
-*        used to read external Object descriptions created by a more
-*        recent version of AST, then the Channel class will, by default,
-*        ignore the new attributes, using the remaining attributes to
-*        construct the Object. This is usually a good thing. However,
-*        since external Object descriptions are often stored in plain
-*        text, it is possible to edit them using a text editor. This
-*        gives rise to the possibility of genuine errors in the
-*        description due to finger-slips, typos, or simple
-*        mis-understanding. Such inappropriate attributes will be ignored
-*        if Strict is left at its default zero value. This will cause the
-*        mis-spelled attribute to revert to its default value,
-*        potentially causing subtle changes in the behaviour of
-*        application software. If such an effect is suspected, the Strict
-*        attribute can be set non-zero, resulting in the erroneous
-*        attribute being identified in an error message.
-*     FitsChan
-*        The returned KeyMap will contain warnings for all conditions
-*        listed in the Warnings attribute.
-*     XmlChan
-*        Reports conversion errors that result in what are usally 
-*        insignificant  changes.
-
-*  Notes:
-*     - The returned KeyMap uses keys of the form "Warning_1",
-*     "Warning_2", etc.
-*     - A value of 
-c     NULL will be returned if this function is invoked with the AST
-c     error status set,
-f     AST__NULL will be returned if this function is invoked with STATUS 
-f     set to an error value, 
-*     or if it should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstKeyMap *result;
-   char key[ 20 ];
-   int i;
-
-/* Check the global status, and supplied keyword name. */
-   result = NULL;
-   if( !astOK ) return result;
-
-/* Check there are some warnings to return. */
-   if( this->nwarn && this->warnings ) {
-
-/* Create the KeyMap. */
-      result = astKeyMap( "", status );
-
-/* Loop round all warnings, adding them into the KeyMap. */      
-      for( i = 0; i < this->nwarn; i++ ){
-         sprintf( key, "Warning_%d", i + 1 );
-         astMapPut0C( result, key, (this->warnings)[ i ], " " );
-      }
-   }
-
-/* Return the KeyMap. */
-   return result;
-}
-
-AstChannel *astInitChannel_( void *mem, size_t size, int init,
-                             AstChannelVtab *vtab, const char *name,
-                             const char *(* source)( void ),
-                             char *(* source_wrap)( const char *(*)( void ), int * ),
-                             void (* sink)( const char * ),
-                             void (* sink_wrap)( void (*)( const char * ),
-                                                 const char *, int * ), int *status ) {
-/*
-*+
-*  Name:
-*     astInitChannel
-
-*  Purpose:
-*     Initialise a Channel.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstChannel *astInitChannel( void *mem, size_t size, int init,
-*                                 AstChannelVtab *vtab, const char *name,
-*                                 const char *(* source)( void ),
-*                                 char *(* source_wrap)( const char *(*)( void ), int * ),
-*                                 void (* sink)( const char * ),
-*                                 void (* sink_wrap)( void (*)( const char * ),
-*                                                     const char *, int * ) )
-
-*  Class Membership:
-*     Channel initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new Channel object. It allocates memory (if
-*     necessary) to accommodate the Channel plus any additional data
-*     associated with the derived class.  It then initialises a
-*     Channel structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a Channel at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Channel is to be
-*        initialised.  This must be of sufficient size to accommodate
-*        the Channel data (sizeof(Channel)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Channel (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Channel structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A boolean flag indicating if the Channel's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Channel.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        lines of input text. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the Channel will read from standard
-*        input instead.
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next line of input
-*        text. The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source_wrap" is NULL, the Channel will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        lines of output text. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the Channel will write to standard output
-*        instead.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the Channel will write to standard
-*        output instead.
-
-*  Returned Value:
-*     A pointer to the new Channel.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstChannel *new;              /* Pointer to new Channel */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitChannelVtab( vtab, name );
-
-/* Initialise an Object structure (the parent class) as the first
-   component within the Channel structure, allocating memory if
-   necessary. */
-   new = (AstChannel *) astInitObject( mem, size, 0,
-                                       (AstObjectVtab *) vtab, name );
-
-   if ( astOK ) {
-
-/* Initialise the Channel data. */
-/* ---------------------------- */
-/* Save the pointers to the source and sink functions and the wrapper
-   functions that invoke them. */
-      new->source = source;
-      new->source_wrap = source_wrap;
-      new->sink = sink;
-      new->sink_wrap = sink_wrap;
-
-/* Set all attributes to their undefined values. */
-      new->comment = -INT_MAX;
-      new->full = -INT_MAX;
-      new->report_level = -INT_MAX;
-      new->skip = -INT_MAX;
-      new->strict = -INT_MAX;
-      new->data = NULL;
-      new->warnings = NULL;
-      new->nwarn = 0;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-void astInitChannelVtab_(  AstChannelVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitChannelVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Channel.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astInitChannelVtab( AstChannelVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Channel vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Channel class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAChannel) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->AddWarning = AddWarning;
-   vtab->ClearComment = ClearComment;
-   vtab->ClearFull = ClearFull;
-   vtab->ClearSkip = ClearSkip;
-   vtab->ClearStrict = ClearStrict;
-   vtab->GetComment = GetComment;
-   vtab->GetFull = GetFull;
-   vtab->GetNextData = GetNextData;
-   vtab->GetNextText = GetNextText;
-   vtab->GetSkip = GetSkip;
-   vtab->GetStrict = GetStrict;
-   vtab->Warnings = Warnings;
-   vtab->PutNextText = PutNextText;
-   vtab->Read = Read;
-   vtab->ReadClassData = ReadClassData;
-   vtab->ReadDouble = ReadDouble;
-   vtab->ReadInt = ReadInt;
-   vtab->ReadObject = ReadObject;
-   vtab->ReadString = ReadString;
-   vtab->SetComment = SetComment;
-   vtab->SetFull = SetFull;
-   vtab->SetSkip = SetSkip;
-   vtab->SetStrict = SetStrict;
-   vtab->TestComment = TestComment;
-   vtab->TestFull = TestFull;
-   vtab->TestSkip = TestSkip;
-   vtab->TestStrict = TestStrict;
-   vtab->Write = Write;
-   vtab->WriteBegin = WriteBegin;
-   vtab->WriteDouble = WriteDouble;
-   vtab->WriteEnd = WriteEnd;
-   vtab->WriteInt = WriteInt;
-   vtab->WriteIsA = WriteIsA;
-   vtab->WriteObject = WriteObject;
-   vtab->WriteString = WriteString;
-   vtab->PutChannelData = PutChannelData;
-
-   vtab->ClearReportLevel = ClearReportLevel;
-   vtab->GetReportLevel = GetReportLevel;
-   vtab->SetReportLevel = SetReportLevel;
-   vtab->TestReportLevel = TestReportLevel;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-/* Declare the destructor and copy constructor. */
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the Dump function for this class. There is no destructor or
-   copy constructor. */
-   astSetDump( vtab, Dump, "Channel", "Basic I/O Channel" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static char *InputTextItem( AstChannel *this, int *status ) {
-/*
-*  Name:
-*     InputTextItem
-
-*  Purpose:
-*     Read the next item from a data source as text.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     char *InputTextItem( AstChannel *this )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function reads the next input data item as text from the
-*     data source associated with a Channel. It is similar to the
-*     astGetNextText method (which it invokes), except that it strips
-*     off any comments along with leading and trailing white
-*     space. Input lines which are empty or do not contain significant
-*     characters (e.g. all comment) are skipped, so that only
-*     significant lines are returned.
-*
-*     Each line is returned as a pointer to a null-terminated string
-*     held in dynamic memory, and it is the caller's responsibility to
-*     free this memory (using astFree) when it is no longer
-*     required. A NULL pointer is returned if there are no more input
-*     lines to be read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-
-*  Returned Value:
-*     Pointer to a null-terminated string containing the input line
-*     (held in dynamically allocated memory, which must be freed by
-*     the caller when no longer required). A NULL pointer is returned
-*     if there are no more input lines to be read.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   char *line;                   /* Pointer to line data to be returned */
-   int i;                        /* Loop counter for line characters */
-   int j;                        /* Counter for characters */
-   int len;                      /* Length of result line */
-   int nonspace;                 /* Non-space character encountered? */
-   int quoted;                   /* Character is inside quotes? */
-
-/* Initialise. */
-   line = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return line;
-
-/* Loop to read input lines until one is found which contains useful
-   characters or end of file is reached (or a read error occurs). */
-   while ( !line && ( line = astGetNextText( this ) ) && astOK ) {
-
-/* Loop to remove comments and leading and trailing white space. */
-      len = 0;
-      nonspace = 0;
-      quoted = 0;
-      for ( i = j = 0; line[ i ]; i++ ) {
-
-/* Note quote characters and ignore all text after the first unquoted
-   comment character. */
-         if ( line[ i ] == '"' ) quoted = !quoted;
-         if ( ( line[ i ] == '#' ) && !quoted ) break;
-
-/* Note the first non-space character and ignore everything before
-   it. */
-         if ( ( nonspace = nonspace || !isspace( line[ i ] ) ) ) {
-
-/* Move each character to its new position in the string. */
-            line[ j++ ] = line[ i ];
-
-/* Note the final length of the string (ignoring trailing spaces). */
-            if ( !isspace( line[ i ] ) ) len = j;
-         }
-      }
-
-/* If the string is not empty, terminate it. */
-     if ( len ) {
-        line[ len ] = '\0';
-
-/* Otherwise, free the memory used for the string so that another
-   input line will be read. */
-      } else {
-         line = astFree( line );
-      }
-   }
-
-/* Return the result pointer. */
-   return line;
-
-/* Undefine macros local to this function. */
-#undef MIN_CHARS
-}
-
-static AstChannelValue *LookupValue( const char *name, int *status ) {
-/*
-*  Name:
-*     LookupValue
-
-*  Purpose:
-*     Look up a Value structure by name.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstChannelValue *LookupValue( const char *name )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function searches the current values list (i.e. at the
-*     current nesting level) to identify a Value structure with a
-*     specified name. If one is found, it is removed from the list and
-*     a pointer to it is returned. If no suitable Value can be found,
-*     a NULL pointer is returned instead.
-
-*  Parameters:
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required Value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than NAME_MAX characters will not match any Value.
-
-*  Returned value:
-*     Pointer to the required Value structure, or NULL if no suitable
-*     Value exists.
-
-*  Notes:
-*     - The returned pointer refers to a dynamically allocated
-*     structure and it is the callers responsibility to free this when
-*     no longer required. The FreeValue function must be used for this
-*     purpose.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstChannelValue **head;       /* Address of head of list pointer */
-   AstChannelValue *result;      /* Pointer value to return */
-   AstChannelValue *value;       /* Pointer to list element */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Check that the "values_ok" flag is set. If not, the Values in the
-   values list belong to a different class to that of the current
-   class loader, so we cannot return any Value. */
-   if ( values_ok[ nest ] ) {
-
-/* Obtain the address of the current "head of list" pointer for the
-   values list (at the current nesting level). */
-      head = values_list + nest;
-
-/* Obtain the head of list pointer itself and check the list is not
-   empty. */
-      if ( ( value = *head ) ) {
-
-/* Loop to inspect each list element. */
-         while ( 1 ) {
-
-/* If a name match is found, remove the element from the list, return
-   a pointer to it and quit searching. */
-            if ( !strcmp( name, value->name ) ) {
-               RemoveValue( value, head, status );
-               result = value;
-               break;
-            }
-
-/* Follow the list until we return to the head. */
-            value = value->flink;
-            if ( value == *head ) break;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void OutputTextItem( AstChannel *this, const char *line, int *status ) {
-/*
-*  Name:
-*     OutputTextItem
-
-*  Purpose:
-*     Output a data item formatted as text.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void OutputTextItem( AstChannel *this, const char *line, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function outputs a data item formatted as a text string to
-*     a data sink associated with a Channel. It keeps track of the
-*     number of items written.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     line
-*        Pointer to a constant null-terminated string containing the
-*        data item to be output (no newline character should be
-*        appended).
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Write out the line of text using the astPutNextText method (which
-   may be over-ridden). */
-   astPutNextText( this, line );
-
-/* If successful, increment the count of items written. */
-   if ( astOK ) items_written++;
-}
-
-static void PutChannelData( AstChannel *this, void *data, int *status ) {
-/*
-c++
-*  Name:
-*     astPutChannelData
-
-*  Purpose:
-*     Store arbitrary data to be passed to a source or sink function.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astPutChannelData( AstChannel *this, void *data )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function stores a supplied arbitrary pointer in the Channel.
-*     When a source or sink function is invoked by the Channel, the
-*     invoked function can use the astChannelData macro to retrieve the 
-*     pointer. This provides a thread-safe alternative to passing file
-*     descriptors, etc, via global static variables.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     data
-*        A pointer to be made available to the source and sink functions
-*        via the astChannelData macro. May be NULL.
-
-*  Applicability:
-*     Channel
-*        All Channels have this function.
-
-*  Notes:
-*     - This routine is not available in the Fortran 77 interface to
-*     the AST library.
-c--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store the pointer. */
-   this->data = data;
-}
-
-static void PutNextText( AstChannel *this, const char *line, int *status ) {
-/*
-*+
-*  Name:
-*     astPutNextText
-
-*  Purpose:
-*     Write a line of output text to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astPutNextText( AstChannel *this, const char *line )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes an output line of text to a data sink
-*     associated with a Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     line
-*        Pointer to a constant null-terminated string containing the
-*        line of output text to be written (no newline character
-*        should be appended).
-
-*  Notes:
-*     - This method is provided primarily so that derived classes may
-*     over-ride it in order to write to alternative (textual) data
-*     sinks.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* About to call an externally supplied function which may not be
-   thread-safe, so lock a mutex first. */
-   LOCK_MUTEX2;
-
-/* If a sink function (and its wrapper function) is defined for the
-   Channel, use the wrapper function to invoke the sink function to
-   output the text line. */
-   if ( this->sink && this->sink_wrap ) {
-      ( *this->sink_wrap )( *this->sink, line, status );
-
-/* Otherwise, simply write the text to standard output with a newline
-   appended. */
-   } else {
-      (void) printf( "%s\n", line );
-   }
-
-   UNLOCK_MUTEX2;
-
-}
-
-static AstObject *Read( AstChannel *this, int *status ) {
-/*
-*++
-*  Name:
-c     astRead
-f     AST_READ
-
-*  Purpose:
-*     Read an Object from a Channel.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "channel.h"
-c     AstObject *astRead( AstChannel *this )
-f     RESULT = AST_READ( THIS, STATUS )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function reads the next Object from a Channel and returns a
-*     pointer to the new Object.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Channel.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astRead()
-f     AST_READ = INTEGER
-*        A pointer to the new Object. The class to which this will
-*        belong is determined by the input data, so is not known in
-*        advance.
-
-*  Applicability:
-*     FitsChan
-c        All successful use of astRead on a FitsChan is destructive, so that
-f        All successful use of AST_READ on a FitsChan is destructive, so that 
-*        FITS header cards are consumed in the process of reading an Object, 
-*        and are removed from the FitsChan (this deletion can be prevented 
-*        for specific cards by calling the FitsChan
-c        astRetainFits function).
-f        AST_RETAINFITS routine).
-*        An unsuccessful call of 
-c        astRead
-f        AST_READ
-*        (for instance, caused by the FitsChan not containing the necessary
-*        FITS headers cards needed to create an Object) results in the
-*        contents of the FitsChan being left unchanged.
-*     StcsChan
-*        The AST Object returned by a successful use of 
-c        astRead 
-f        AST_READ
-*        on an StcsChan, will be either a Region or a KeyMap, depending
-*        on the values of the StcsArea, StcsCoords and StcsProps
-*        attributes. See the documentation for these attributes for further
-*        information.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned, without
-*     error, if the Channel contains no further Objects to be read.
-*     - A null Object pointer will also be returned if this function
-c     is invoked with the AST error status set, or if it should fail
-f     is invoked with STATUS set to an error value, or if it should fail
-*     for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstLoaderType *loader;        /* Pointer to loader for Object */
-   AstObject *new;               /* Pointer to new Object */
-   char *class;                  /* Pointer to Object class name string */
-   char *name;                   /* Pointer to data item name */
-   int skip;                     /* Skip non-AST data? */
-   int top;                      /* Reading top-level Object definition? */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Determine if we are reading a top-level (i.e. user-level) Object
-   definition, as opposed to the definition of an Object contained
-   within another Object. This is indicated by the current nesting
-   level. */
-   top = ( nest == -1 );
-
-/* If reading a top-level object, determine if data lying in between
-   Object definitions in the input data stream are to be skipped. */
-   skip = ( top && astGetSkip( this ) );
-
-/* Read the next input data item. If we are reading a top-level Object
-   definition, skip any unrelated data beforehand. Otherwise read the
-   data strictly as it comes (there should be no unrelated data
-   embedded within Object definitions themselves). */
-   astGetNextData( this, skip, &name, &class );
-
-/* If no suitable data item was found (and no error occurred), we have
-   reached the end of data. For a top-level Object a NULL Object
-   pointer is simply returned, but for a nested Object this indicates
-   that part of the Object definition is missing, so report an
-   error. */
-   if ( astOK ) {
-      if ( !name ) {
-         if ( !top ) {
-            astError( AST__EOCHN,
-                      "astRead(%s): End of input encountered while trying to "
-                      "read an AST Object.", status, astGetClass( this ) );
-         }
-
-/* If a data item was found, check it is a "Begin" item. If not, there
-   is a data item missing, so report an error and free all memory. */
-      } else if ( strcmp( name, "begin" ) ) {
-         astError( AST__BADIN,
-                   "astRead(%s): Missing \"Begin\" when expecting an Object.", status,
-                   astGetClass( this ) );
-         name = astFree( name );
-         if ( class ) class = astFree( class );
-
-/* If the required "Begin" item was found, free the memory used for the
-   name string. */
-      } else {
-         name = astFree( name );
-
-/* Use the associated class name to locate the loader for that
-   class. This function will then be used to build the Object. */
-         loader = astGetLoader( class, status );
-
-/* Extend all necessary stack arrays to accommodate entries for the
-   next nesting level (this allocates space if none has yet been
-   allocated). */
-         end_of_object = astGrow( end_of_object, nest + 2, sizeof( int ) );
-         object_class = astGrow( object_class, nest + 2, sizeof( char * ) );
-         values_class = astGrow( values_class, nest + 2, sizeof( char * ) );
-         values_list = astGrow( values_list, nest + 2, sizeof( AstChannelValue * ) );
-         values_ok = astGrow( values_ok, nest + 2, sizeof( int ) );
-
-/* If an error occurred, free the memory used by the class string,
-   which will not now be used. */
-         if ( !astOK ) {
-            class = astFree( class );
-
-/* Otherwise, increment the nesting level and initialise the new stack
-   elements for this new level. This includes clearing the
-   "end_of_object" flag so that ReadClassData can read more data, and
-   storing the class name of the object we are about to read. */
-         } else {
-            nest++;
-            end_of_object[ nest ] = 0;
-            object_class[ nest ] = class;
-            values_class[ nest ] = NULL;
-            values_list[ nest ] = NULL;
-            values_ok[ nest ] = 0;
-
-/* Invoke the loader, which reads the Object definition from the input
-   data stream and builds the Object. Supply NULL/zero values to the
-   loader so that it will substitute values appropriate to its own
-   class. */
-            new = (*loader)( NULL, (size_t) 0, NULL, NULL, this, status );
-
-/* Clear the values list for the current nesting level. If the list
-   has not been read or any Values remain in it, an error will
-   result. */
-            ClearValues( this, status );
-
-/* If no error has yet occurred, check that the "end_of_object" flag
-   has been set. If not, the input data were not correctly terminated,
-   so report an error. */
-            if ( astOK && !end_of_object[ nest ] ) {
-               astError( AST__BADIN,
-                         "astRead(%s): Unexpected end of input (missing end "
-                         "of %s).", status,
-                         astGetClass( this ), object_class[ nest ] );
-            }
-
-/* If an error occurred, report contextual information. Only do this
-   for top-level Objects to avoid multple messages. */
-            if ( !astOK && top ) {
-               astError( astStatus, "Error while reading a %s from a %s.", status,
-                         class, astGetClass( this ) );
-            }
-
-/* Clear the Object's class string, freeing the associated memory
-   (note this is the memory allocated for the "class" string
-   earlier). */
-            object_class[ nest ] = astFree( object_class[ nest ] );
-
-/* Restore the previous nesting level. */
-            nest--;
-         }
-
-/* Once the top-level Object has been built, free the memory used by
-   the stack arrays. */
-         if ( top ) {
-            end_of_object = astFree( end_of_object );
-            object_class = astFree( object_class );
-            values_class = astFree( values_class );
-            values_list = astFree( values_list );
-            values_ok = astFree( values_ok );
-         }
-      }
-   }
-
-/* If an error occurred, clean up by deleting the new Object and
-   return a NULL pointer. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the pointer to the new Object. */
-   return new;
-}
-
-static void ReadClassData( AstChannel *this, const char *class, int *status ) {
-/*
-*+
-*  Name:
-*     astReadClassData
-
-*  Purpose:
-*     Read values from a data source for a class loader.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astReadClassData( AstChannel *this, const char *class )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function reads the data for a class from the data source
-*     associated with a Channel, so as to provide values for
-*     initialising the instance variables of that class as part of
-*     building a complete Object. This function should be invoked by
-*     the loader for each class immediately before it attempts to read
-*     these values.
-*
-*     The values read are placed into the current values list by this
-*     function. They may then be read from this list by the class
-*     loader making calls to astReadDouble, astReadInt, astReadObject
-*     and astReadString. The order in which values are read by the
-*     loader is unimportant (although using the same order for reading
-*     as for writing will usually be more efficient) and values are
-*     removed from the list as they are read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        A pointer to a constant null-terminated string containing the
-*        name of the class whose loader is requesting the data (note
-*        this is not usually the same as the class name of the Object
-*        being built). This value allows the class structure of the
-*        input data to be validated.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstObject *object;            /* Pointer to new Object */
-   AstChannelValue *value;       /* Pointer to Value structure */
-   char *name;                   /* Pointer to data item name string */
-   char *val;                    /* Pointer to data item value string */
-   int done;                     /* All class data read? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* If the "values_ok" flag is set, this indicates that the values list
-   (at the current nesting level) has been filled by a previous
-   invocation of this function and has then been read by the
-   appropriate class loader. In this case, clear any entries which may
-   remain in the current values list. If any such entries are found,
-   they represent input data that were not read, so an error will
-   result. */
-   if ( values_ok[ nest ] ) ClearValues( this, status );
-
-/* If "values_class" is non-NULL, this indicates that the values list
-   (at the current nesting level) has been filled by a previous
-   invocation of this function, but that the values belong to a class
-   whose loader has not yet tried to read them. In this case, we must
-   continue to keep the values until they are needed, so we do not
-   read any more input data this time. */
-   if ( values_class[ nest ] ) {
-
-/* If the class to which the previously saved values belong matches
-   the class we now want values for, set the "values_ok" flag. This
-   then allows the values to be accessed (by LookupValue). */
-      values_ok[ nest ] = !strcmp( values_class[ nest ], class );
-
-/* If the current values list is empty, we must read in values for the
-   next class that appears in the input data. However, first check
-   that the "end_of_object" flag has not been set. If it has, we have
-   already reached the end of this Object's data, so there is some
-   kind of problem with the order in which class loaders have been
-   invoked. This will probably never happen, but report an error if
-   necessary. */
-   } else if ( end_of_object[ nest ] ) {
-      astError( AST__LDERR,
-                "astRead(%s): Invalid attempt to read further %s data "
-                "following an end of %s.", status,
-                astGetClass( this ), class, object_class[ nest ] );
-      astError( AST__LDERR,
-                "Perhaps the wrong class loader has been invoked?" , status);
-
-/* If we need new values, loop to read input data items until the end
-   of the data for a class is reached. */
-   } else {
-      done = 0;   
-      while ( astOK && !done ) {
-
-/* Read the next input data item. */
-         astGetNextData( this, 0, &name, &val );
-         if ( astOK ) {
-
-/* Unexpected end of input. */
-/* ------------------------ */
-/* If no "name" value is returned, we have reached the end of the
-   input data stream without finding the required end of class
-   terminator, so report an error. */
-            if ( !name ) {
-               astError( AST__EOCHN,
-                         "astRead(%s): Unexpected end of input (missing end "
-                         "of %s).", status,
-                         astGetClass( this ), object_class[ nest ] );
-
-/* "IsA" item. */
-/* ----------- */
-/* Otherwise, if an "IsA" item was read, it indicates the end of the
-   data for a class. Store the pointer to the name of this class in
-   "values_class" and note whether this is the class whose data we
-   wanted in "values_ok". If the data we have read do not belong to
-   the class we wanted, they will simply be kept until the right class
-   comes looking for them. */
-            } else if ( !strcmp( name, "isa" ) ) {
-               values_class[ nest ] = val;
-               values_ok[ nest ] = !strcmp( val, class );
-
-/* Free the memory holding the name string. */
-               name = astFree( name );
-
-/* Note we have finished reading class data. */
-               done = 1;
-
-/* "End" item. */
-/* ----------- */
-/* If an "End" item was read, it indicates the end of the data both
-   for a class and for the current Object definition as a whole. Set
-   the "end_of_object" flag (for the current nesting level) which
-   prevents any further data being read for this Object. This flag is
-   also used (by Read) to check that an "End" item was actually
-   read. */
-            } else if ( !strcmp( name, "end" ) ) {
-               end_of_object[ nest ] = 1;
-
-/* Check that the class name in the "End" item matches that of the
-   Object being built. If so, store the pointer to the name of this
-   class in "values_class" and note whether this is the class whose
-   data we wanted in "values_ok". If the data we have read do not
-   belong to the class we wanted, they will simply be kept until the
-   right class comes looking for them. */
-               if ( !strcmp( val, object_class[ nest ] ) ) {
-                  values_class[ nest ] = val;
-                  values_ok[ nest ] = !strcmp( class, val );
-
-/* If the "End" item contains the wrong class name (i.e. not matching
-   the corresponding "Begin" item), then report an error. */
-               } else {
-                  astError( AST__BADIN,
-                            "astRead(%s): Bad class structure in input data.", status,
-                            astGetClass( this ) );
-                  astError( AST__BADIN,
-                            "End of %s read when expecting end of %s.", status,
-                            val, object_class[ nest ] );
-
-/* Free the memory used by the class string, which will not now be
-   used. */
-                  val = astFree( val );
-               }
-
-/* Free the memory holding the name string. */
-               name = astFree( name );
-
-/* Note we have finished reading class data. */
-               done = 1;
-
-/* String value. */
-/* ------------- */
-/* If any other name is obtained and "val" is not NULL, we have read a
-   non-Object value, encoded as a string. Allocate memory for a Value
-   structure to describe it. */
-            } else if ( val ) {
-               value = astMalloc( sizeof( AstChannelValue ) );
-               if ( astOK ) {
-
-/* Store pointers to the name and value string in the Value structure
-   and note this is not an Object value. */
-                  value->name = name;
-                  value->ptr.string = val;
-                  value->is_object = 0;
-
-/* Append the Value structure to the values list for the current
-   nesting level. */
-                  AppendValue( value, values_list + nest, status );
-
-/* If an error occurred, free the memory holding the "name" and "val"
-   strings. */
-               } else {
-                  name = astFree( name );
-                  val = astFree( val );
-               }
-
-/* Object value. */
-/* ------------- */
-/* If "val" is NULL, we have read an Object item, and the Object
-   definition should follow. Allocate memory for a Value structure to
-   describe it. */
-            } else {
-               value = astMalloc( sizeof( AstChannelValue ) );
-
-/* Invoke astRead to read the Object definition from subsequent data
-   items and to build the Object, returning a pointer to it. This will
-   result in recursive calls to the current function, but as these
-   will use higher nesting levels they will not interfere with the
-   current invocation. */
-               astreadclassdata_msg = 0;
-               object = astRead( this );
-               if ( astOK ) {
-
-/* Store pointers to the name and Object in the Value structure and
-   note this is an Object value. */
-                  value->name = name;
-                  value->ptr.object = object;
-                  value->is_object = 1;
-
-/* Append the Value structure to the values list for the current
-   nesting level. */
-                  AppendValue( value, values_list + nest, status );
-
-/* If an error occurred, report a contextual error maessage and set
-   the "astreadclassdata_msg" flag (this prevents multiple messages if this function is
-   invoked recursively to deal with nested Objects). */
-               } else {
-                  if ( !astreadclassdata_msg ) {
-                     astError( astStatus,
-                               "Failed to read the \"%s\" Object value.", status,
-                               name );
-                     astreadclassdata_msg = 1;
-                  }
-
-/* Free the memory holding the "name" string and any Value structure
-   that was allocated. */
-                  name = astFree( name );
-                  value = astFree( value );
-               }
-            }
-         }
-      }
-   }
-}
-
-static double ReadDouble( AstChannel *this, const char *name, double def, int *status ) {
-/*
-*+
-*  Name:
-*     astReadDouble
-
-*  Purpose:
-*     Read a double value as part of loading a class.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     double astReadDouble( AstChannel *this, const char *name, double def )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function searches the current values list of a Channel to
-*     identify a double value with a specified name. If such a value
-*     is found, it is returned, otherwise a default value is returned
-*     instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return a double
-*     value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function, which loads
-*     the values associated with the class into the current values
-*     list from the input data source.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable value can be found (e.g. it is absent from the
-*        data stream being read), then this value will be returned
-*        instead.
-
-*  Returned Value:
-*     The required value, or the default if the value was not found.
-
-*  Notes:
-*     - A value of 0.0 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstChannelValue *value;       /* Pointer to required Value structure */
-   double result;                /* Value to be returned */
-   int nc;                       /* Number of characters read by astSscanf */
-   
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
-   values list.*/
-   value = LookupValue( name, status );
-   if ( astOK ) {
-
-/* If a Value was found, check that it describes a string (as opposed
-   to an Object). */
-      if ( value ) {
-         if ( !value->is_object ) {
-
-/* If so, then attempt to decode the string to give a double value,
-   checking that the entire string is read. If this fails, then the
-   wrong name has probably been given, or the input data are corrupt,
-   so report an error. */
-            nc = 0;
-            if ( !( ( 1 == astSscanf( value->ptr.string, " %lf %n",
-                                                      &result, &nc ) )
-                    && ( nc >= (int) strlen( value->ptr.string ) ) ) ) {
-               astError( AST__BADIN,
-                         "astRead(%s): The value \"%s = %s\" cannot "
-                         "be read as a double precision floating point "
-                         "number.", status, astGetClass( this ),
-                         value->name, value->ptr.string );
-            }
-
-/* Report a similar error if the Value does not describe a string. */
-         } else {
-            astError( AST__BADIN,
-                      "astRead(%s): The Object \"%s = <%s>\" cannot "
-                      "be read as a double precision floating point number.", status,
-                      astGetClass( this ),
-                      value->name, astGetClass( value->ptr.object ) );
-         }
-
-/* Free the Value structure and the resources it points at. */
-         value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, then use the default
-   value instead. */
-      } else {
-         result = def;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int ReadInt( AstChannel *this, const char *name, int def, int *status ) {
-/*
-*+
-*  Name:
-*     astReadInt
-
-*  Purpose:
-*     Read an int value as part of loading a class.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int astReadInt( AstChannel *this, const char *name, int def )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function searches the current values list of a Channel to
-*     identify an int value with a specified name. If such a value is
-*     found, it is returned, otherwise a default value is returned
-*     instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return an int
-*     value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function, which loads
-*     the values associated with the class into the current values
-*     list from the input data source.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable value can be found (e.g. it is absent from the
-*        data stream being read), then this value will be returned
-*        instead.
-
-*  Returned Value:
-*     The required value, or the default if the value was not found.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstChannelValue *value;       /* Pointer to required Value structure */
-   int nc;                       /* Number of characters read by astSscanf */
-   int result;                   /* Value to be returned */
-   
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
-   values list.*/
-   value = LookupValue( name, status );
-   if ( astOK ) {
-
-/* If a Value was found, check that it describes a string (as opposed
-   to an Object). */
-      if ( value ) {
-         if ( !value->is_object ) {
-
-/* If so, then attempt to decode the string to give an int value,
-   checking that the entire string is read. If this fails, then the
-   wrong name has probably been given, or the input data are corrupt,
-   so report an error. */
-            nc = 0;
-            if ( !( ( 1 == astSscanf( value->ptr.string, " %d %n",
-                                                      &result, &nc ) )
-                    && ( nc >= (int) strlen( value->ptr.string ) ) ) ) {
-               astError( AST__BADIN,
-                         "astRead(%s): The value \"%s = %s\" cannot "
-                         "be read as an integer.", status, astGetClass( this ),
-                         value->name, value->ptr.string );
-            }
-
-/* Report a similar error if the Value does not describe a string. */
-         } else {
-            astError( AST__BADIN,
-                      "astRead(%s): The Object \"%s = <%s>\" cannot "
-                      "be read as an integer.", status, astGetClass( this ),
-                      value->name, astGetClass( value->ptr.object ) );
-         }
-
-/* Free the Value structure and the resources it points at. */
-         value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, then use the default
-   value instead. */
-      } else {
-         result = def;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstObject *ReadObject( AstChannel *this, const char *name,
-                              AstObject *def, int *status ) {
-/*
-*+
-*  Name:
-*     astReadObject
-
-*  Purpose:
-*     Read a (sub)Object as part of loading a class.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstObject *astReadObject( AstChannel *this, const char *name,
-*                               AstObject *def )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function searches the current values list of a Channel to
-*     identify an Object with a specified name. If such an Object is
-*     found, a pointer to it is returned, otherwise a default pointer
-*     is returned instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return an Object
-*     pointer value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function, which loads
-*     the values associated with the class into the current values
-*     list from the input data source.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required Object. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any Object.
-*     def
-*        If no suitable Object can be found (e.g. the Object is absent
-*        from the data stream being read), then a clone of this
-*        default Object pointer will be returned instead (or NULL if
-*        this default pointer is NULL).
-
-*  Returned Value:
-*     A pointer to the Object, or a clone of the default pointer if
-*     the Object was not found.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *result;            /* Pointer value to return */
-   AstChannelValue *value;       /* Pointer to required Value structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
-   values list.*/
-   value = LookupValue( name, status );
-   if ( astOK ) {
-
-/* If a Value was found, check that it describes an Object (as opposed to
-   a string). */
-      if ( value ) {
-         if ( value->is_object ) {
-
-/* If so, then extract the Object pointer, replacing it with NULL. */
-            result = value->ptr.object;
-            value->ptr.object = NULL;
-
-/* If the Value does not describe an Object, then the wrong name has
-   probably been given, or the input data are corrupt, so report an
-   error. */
-         } else {
-            astError( AST__BADIN,
-                      "astRead(%s): The value \"%s = %s\" cannot be "
-                      "read as an Object.", status, astGetClass( this ),
-                      value->name, value->ptr.string );
-         }
-
-/* Free the Value structure and the resources it points at. */
-         value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, clone the default
-   pointer, if given. */
-      } else if ( def ) {
-         result = astClone( def );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static char *ReadString( AstChannel *this, const char *name,
-                         const char *def, int *status ) {
-/*
-*+
-*  Name:
-*     astReadString
-
-*  Purpose:
-*     Read a string value as part of loading a class.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     char *astReadString( AstChannel *this, const char *name,
-*                          const char *def )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function searches the current values list of a Channel to
-*     identify a string value with a specified name. If such a value
-*     is found, a pointer to the string is returned, otherwise a
-*     pointer to a copy of a default string is returned instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return a string
-*     pointer value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function, which loads
-*     the values associated with the class into the current values
-*     list from the input data source.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable string can be found (e.g. the value is absent
-*        from the data stream being read), then a dynamically
-*        allocated copy of the null-terminated string pointed at by
-*        "def" will be made, and a pointer to this copy will be
-*        returned instead (or NULL if this default pointer is NULL).
-
-*  Returned Value:
-*     A pointer to a dynamically allocated null-terminated string
-*     containing the value required, or to a copy of the default
-*     string if the value was not found (or NULL if the "def" pointer
-*     was NULL).
-
-*  Notes:
-*     - It is the caller's responsibility to arrange for the memory
-*     holding the returned string to be freed (using astFree) when it
-*     is no longer required.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstChannelValue *value;       /* Pointer to required Value structure */
-   char *result;                 /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;   
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search for a Value structure with the required name in the current
-   values list.*/
-   value = LookupValue( name, status );
-   if ( astOK ) {
-
-/* If a Value was found, check that it describes a string (as opposed
-   to an Object). */
-      if ( value ) {
-         if ( !value->is_object ) {
-
-/* If so, then extract the string pointer, replacing it with NULL. */
-            result = value->ptr.string;
-            value->ptr.string = NULL;
-
-/* If the Value does not describe a string, then the wrong name has
-   probably been given, or the input data are corrupt, so report an
-   error. */
-         } else {
-            astError( AST__BADIN,
-                      "astRead(%s): The Object \"%s = <%s>\" cannot "
-                      "be read as a string.", status, astGetClass( this ),
-                      value->name, astGetClass( value->ptr.object ) );
-         }
-
-/* Free the Value structure and the resources it points at. */
-         value = FreeValue( value, status );
-
-/* If no suitable Value structure was found, then make a dynamic copy
-   of the default string (if given) and return a pointer to this. */
-      } else if ( def ) {
-         result = astStore( NULL, def, strlen( def ) + (size_t) 1 );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void RemoveValue( AstChannelValue *value, AstChannelValue **head, int *status ) {
-/*
-*  Name:
-*     RemoveValue
-
-*  Purpose:
-*     Remove a Value structure from a circular linked list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void RemoveValue( AstChannelValue *value, AstChannelValue **head, int *status );
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function removes a Value structure from a doubly linked
-*     circular list of such structures. The "head of list" pointer is
-*     updated to point at the element following the one removed.
-
-*  Parameters:
-*     value
-*        Pointer to the structure to be removed (note that this must
-*        actually be in the list, although this function does not
-*        check).
-*     head
-*        Address of a pointer to the element at the head of the
-*        list. This pointer will be updated to point at the list
-*        element that follows the one removed. If the list becomes
-*        empty, the pointer will be set to NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error chacking and does not
-*     generate errors.
-*/
-
-/* Remove the Value structure from the list by re-establishing links
-   between the elements on either side of it. */
-   value->blink->flink = value->flink;
-   value->flink->blink = value->blink;
-
-/* Update the head of list pointer to identify the following
-   element. */
-   *head = value->flink;
-
-/* If the head of list identifies the removed element, then note that
-   the list is now empty. */
-   if ( *head == value ) *head = NULL;
-
-/* Make the removed element point at itself. */
-   value->flink = value;
-   value->blink = value;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     Channel member function (over-rides the astSetAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns an attribute value for a Channel, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstChannel *this;             /* Pointer to the Channel structure */
-   int comment;                  /* Comment attribute value */
-   int full;                     /* Full attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by "astSscanf" */
-   int report_level;             /* Skip attribute value */
-   int skip;                     /* Skip attribute value */
-   int strict;                   /* Report errors instead of warnings? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Channel structure. */
-   this = (AstChannel *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Comment. */
-/* ---------*/
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "comment= %d %n", &comment, &nc ) )
-        && ( nc >= len ) ) {
-      astSetComment( this, comment );
-
-/* Full. */
-/* ----- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "full= %d %n", &full, &nc ) )
-               && ( nc >= len ) ) {
-      astSetFull( this, full );
-
-/* ReportLavel. */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "reportlevel= %d %n", &report_level, &nc ) )
-               && ( nc >= len ) ) {
-      astSetReportLevel( this, report_level );
-
-/* Skip. */
-/* ----- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "skip= %d %n", &skip, &nc ) )
-               && ( nc >= len ) ) {
-      astSetSkip( this, skip );
-
-/* Strict. */
-/* ------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "strict= %d %n", &strict, &nc ) )
-               && ( nc >= len ) ) {
-      astSetStrict( this, strict );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-*  Name:
-*     SinkWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C Channel sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function invokes the sink function whose pointer is
-*     supplied in order to write an output line to an external data
-*     store.
-
-*  Parameters:
-*     sink
-*        Pointer to a sink function, whose single parameter is a
-*        pointer to a const, null-terminated string containing the
-*        text to be written, and which returns void. This is the form
-*        of Channel sink function employed by the C language interface
-*        to the AST library.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the sink function. */
-   ( *sink )( line );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-*  Name:
-*     SourceWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C Channel source function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     char *SourceWrap( const char *, int *status(* source)( void ) )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function invokes the source function whose pointer is
-*     supplied in order to read the next input line from an external
-*     data store. It then returns a pointer to a dynamic string
-*     containing a copy of the text that was read.
-
-*  Parameters:
-*     source
-*        Pointer to a source function, with no parameters, that
-*        returns a pointer to a const, null-terminated string
-*        containing the text that it read. This is the form of Channel
-*        source function employed by the C language interface to the
-*        AST library.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated, null terminated string
-*     containing a copy of the text that was read. This string must be
-*     freed by the caller (using astFree) when no longer required.
-*
-*     A NULL pointer will be returned if there is no more input text
-*     to read.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   const char *line;             /* Pointer to input line */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
-   pointer to the resulting string. */
-   line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
-   resulting pointer. */
-   if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
-   return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Channel member function (over-rides the astTestAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Channel's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstChannel *this;             /* Pointer to the Channel structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Channel structure. */
-   this = (AstChannel *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Comment. */
-/* -------- */
-   if ( !strcmp( attrib, "comment" ) ) {
-      result = astTestComment( this );
-
-/* Full. */
-/* ----- */
-   } else if ( !strcmp( attrib, "full" ) ) {
-      result = astTestFull( this );
-
-/* ReportLevel. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "reportlevel" ) ) {
-      result = astTestReportLevel( this );
-
-/* Skip. */
-/* ----- */
-   } else if ( !strcmp( attrib, "skip" ) ) {
-      result = astTestSkip( this );
-
-/* Strict. */
-/* ------- */
-   } else if ( !strcmp( attrib, "strict" ) ) {
-      result = astTestStrict( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static void Unquote( AstChannel *this, char *str, int *status ) {
-/*
-*  Name:
-*     Unquote
-
-*  Purpose:
-*     Remove quotes from a (possibly) quoted string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void Unquote( AstChannel *this, char *str, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function removes one layer of quote characters (") from a
-*     string which is possibly quoted. Any quotes within quotes (which
-*     should have been doubled when the string was originally quoted)
-*     are also converted back to single quotes again.
-*
-*     The quotes need not start or end at the ends of the string, and
-*     there may be any number of quoted sections within the string. No
-*     error results if the string does not contain any quotes at all
-*     (it is simply returned unchanged), but an error results if any
-*     unmatched quotes are found.
-
-*  Parameters:
-*     this
-*        Pointer to a Channel. This is only used for constructing error
-*        messages and has no influence on the string processing.
-*     str
-*        Pointer to the null-terminated string to be processed. This
-*        is modified in place. The new string starts at the same
-*        location as the original but has a new null character
-*        appended if necessary (it will usually be shorter than the
-*        original).
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int i;                        /* Loop counter for "input" characters */
-   int j;                        /* Counter for "output" characters */
-   int quoted;                   /* Inside a quoted string? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Loop to inspect each character in the string. */
-   quoted = 0;
-   for ( i = j = 0; str[ i ]; i++ ) {
-
-/* Non-quote characters are simply copied to their new location in the
-   string. */
-      if ( str[ i ] != '"' ) {
-         str[ j++ ] = str[ i ];
-
-/* If a quote character '"' is encountered and we are not already in a
-   quoted string, then note the start of a quoted string (and discard
-   the quote). */
-      } else if ( !quoted ) {
-         quoted = 1;
-
-/* If a quote character is encountered inside a quoted string, then
-   check if the next character is also a quote. If so, convert this
-   double quote to a single one. */
-      } else if ( str[ i + 1 ] == '"' ) {
-         str[ j++ ] = '"';
-         i++;
-
-/* If a single quote character is encountered inside a quoted string,
-   then note the end of the quoted string (and discard the quote). */
-      } else {
-         quoted = 0;
-      }
-   }
-
-/* Append a null to terminate the processed string. */
-   str[ j ] = '\0';
-
-/* If the "quoted" flag is still set, then there were unmatched
-   quotes, so report an error. */
-   if ( quoted ) {
-      astError( AST__UNMQT,
-                "astRead(%s): Unmatched quotes in input data: %s.", status,
-                astGetClass( this ), str );
-   }
-}
-
-static int Use( AstChannel *this, int set, int helpful, int *status ) {
-/*
-*  Name:
-*     Use
-
-*  Purpose:
-*     Decide whether to write a value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int Use( AstChannel *this, int set, int helpful, int *status )
-
-*  Class Membership:
-*     Channel member function.
-
-*  Description:
-*     This function decides whether a value supplied by a class "Dump"
-*     function, via a call to one of the astWrite... protected
-*     methods, should actually be written to the data sink associated
-*     with a Channel.
-*
-*     This decision is based on the settings of the "set" and
-*     "helpful" flags supplied to the astWrite... method, plus the
-*     attribute settings of the Channel.
-
-*  Parameters:
-*     this
-*        A pointer to the Channel.
-*     set
-*        The "set" flag supplied.
-*     helpful
-*        The "helpful" value supplied.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the value should be written out, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int full;                     /* Full attribute value */
-   int result;                   /* Result value to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If "set" is non-zero, then so is the result ("set" values must
-   always be written out). */
-   result = ( set != 0 );
-
-/* Otherwise, obtain the value of the Channel's Full attribute. */
-   if ( !set ) {
-      full = astGetFull( this );
-
-/* If Full is positive, display all values, if zero, display only
-   "helpful" values, if negative, display no (un-"set") values. */
-      if ( astOK ) result = ( ( helpful && ( full > -1 ) ) || ( full > 0 ) );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Write( AstChannel *this, AstObject *object, int *status ) {
-/*
-*++
-*  Name:
-c     astWrite
-f     AST_WRITE
-
-*  Purpose:
-*     Write an Object to a Channel.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "channel.h"
-c     int astWrite( AstChannel *this, AstObject *object )
-f     RESULT = AST_WRITE( THIS, OBJECT, STATUS )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes an Object to a Channel, appending it to any
-*     previous Objects written to that Channel.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Channel.
-c     object
-f     OBJECT = INTEGER (Given)
-*        Pointer to the Object which is to be written.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astWrite()
-f     AST_WRITE = INTEGER
-*        The number of Objects written to the Channel by this
-c        invocation of astWrite (normally, this will be one).
-f        invocation of AST_WRITE (normally, this will be one).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-c     with the AST error status set, or if it should fail for any
-f     with STATUS set to an error value, or if it should fail for any
-*     reason.
-*     - Invoking this function will usually cause the sink function 
-*     associated with the channel to be called in order to transfer a
-*     textual description of the supplied object to some external data
-*     store. However, the FitsChan class behaves differently. Invoking
-*     this function on a FitsChan causes new FITS header cards to be
-*     added to an internal buffer (the sink function is not invoked). 
-*     This buffer is written out through the sink function only when the 
-*     FitsChan is deleted.
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* The work of this function is actually performed by the protected
-   astDump method of the Object. The fact that this is further
-   encapsulated within the astWrite method (which belongs to the
-   Channel) is simply a trick to allow it to be over-ridden either by
-   a derived Channel, or a derived Object (or both), and hence to
-   adapt to the nature of either argument. */
-   astDump( object, this );
-
-/* Return the number of Objects written. */
-   return astOK ? 1 : 0;
-}
-
-static void WriteBegin( AstChannel *this, const char *class,
-                        const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteBegin
-
-*  Purpose:
-*     Write a "Begin" data item to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteBegin( AstChannel *this, const char *class,
-*                         const char *comment )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes a "Begin" data item to the data sink
-*     associated with a Channel, so as to begin the output of a new
-*     Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        name of the class to which the Object belongs.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the "Begin"
-*        item. Normally, this will describe the purpose of the Object.
-
-*  Notes:
-*     - The comment supplied may not actually be used, depending on
-*     the nature of the Channel supplied.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   int i;                        /* Loop counter for indentation characters */
-   int nc;                       /* Number of output characters */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Start building a dynamic string with an initial space. Then add
-   further spaces to suit the current indentation level. */
-   line = astAppendString( NULL, &nc, " " );
-   for ( i = 0; i < current_indent; i++ ) {
-      line = astAppendString( line, &nc, " " );
-   }
-
-/* Append the "Begin" keyword followed by the class name. */
-   line = astAppendString( line, &nc, "Begin " );
-   line = astAppendString( line, &nc, class );
-
-/* If required, also append the comment. */
-   if ( astGetComment( this ) && *comment ) {
-      line = astAppendString( line, &nc, " \t# " );
-      line = astAppendString( line, &nc, comment );
-   }
-
-/* Write out the resulting line of text. */
-   OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-   line = astFree( line );
-
-/* Increment the indentation level and clear the count of items written
-   for this Object. */
-   current_indent += INDENT_INC;
-   items_written = 0;
-}
-
-static void WriteDouble( AstChannel *this, const char *name,
-                         int set, int helpful,
-                         double value, const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteDouble
-
-*  Purpose:
-*     Write a double value to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteDouble( AstChannel *this, const char *name,
-*                          int set, int helpful,
-*                          double value, const char *comment )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes a named double value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a Channel. It is intended for use by class "Dump" functions
-*     when writing out class information which will subsequently be
-*     re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        The value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 100             /* Size of local formatting buffer */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   char buff[ BUFF_LEN + 1 ];    /* Local formatting buffer */
-   int i;                        /* Loop counter for indentation characters */
-   int nc;                       /* Number of output characters */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
-   character if "set" is zero. Then add further spaces to suit the
-   current indentation level. */
-      line = astAppendString( NULL, &nc, set ? " " : "#" );
-      for ( i = 0; i < current_indent; i++ ) {
-         line = astAppendString( line, &nc, " " );
-      }
-
-/* Append the name string followed by " = ". */
-      line = astAppendString( line, &nc, name );
-      line = astAppendString( line, &nc, " = " );
-
-/* Format the value as a string and append this. Make sure "-0" isn't
-   produced. */
-      (void) sprintf( buff, "%.*g", DBL_DIG, value );
-      if ( !strcmp( buff, "-0" ) ) {
-         buff[ 0 ] = '0';
-         buff[ 1 ] = '\0';
-      }
-      line = astAppendString( line, &nc, buff );
-
-/* If required, also append the comment. */
-      if ( astGetComment( this ) && *comment ) {
-         line = astAppendString( line, &nc, " \t# " );
-         line = astAppendString( line, &nc, comment );
-      }
-
-/* Write out the resulting line of text. */
-      OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-      line = astFree( line );
-   }
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static void WriteEnd( AstChannel *this, const char *class, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteEnd
-
-*  Purpose:
-*     Write an "End" data item to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteEnd( AstChannel *this, const char *class )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes an "End" data item to the data sink
-*     associated with a Channel. This item delimits the end of an
-*     Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        class name of the Object whose definition is being terminated
-*        by the "End" item.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   int i;                        /* Loop counter for indentation characters */
-   int nc;                       /* Number of output characters */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Decrement the indentation level so that the "End" item matches the
-   corresponding "Begin" item. */
-   current_indent -= INDENT_INC;
-
-/* Start building a dynamic string with an initial space. Then add
-   further spaces to suit the current indentation level. */
-   line = astAppendString( NULL, &nc, " " );
-   for ( i = 0; i < current_indent; i++ ) {
-      line = astAppendString( line, &nc, " " );
-   }
-
-/* Append the "End" keyword followed by the class name. */
-   line = astAppendString( line, &nc, "End " );
-   line = astAppendString( line, &nc, class );
-
-/* Write out the resulting line of text. */
-   OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-   line = astFree( line );
-}
-
-static void WriteInt( AstChannel *this, const char *name, int set, int helpful,
-                      int value, const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteInt
-
-*  Purpose:
-*     Write an integer value to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteInt( AstChannel *this, const char *name,
-*                       int set, int helpful,
-*                       int value, const char *comment )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes a named integer value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a Channel. It is intended for use by class "Dump" functions
-*     when writing out class information which will subsequently be
-*     re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        The value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50              /* Size of local formatting buffer */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   char buff[ BUFF_LEN + 1 ];    /* Local formatting buffer */
-   int i;                        /* Loop counter for indentation characters */
-   int nc;                       /* Number of output characters */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
-   character if "set" is zero. Then add further spaces to suit the
-   current indentation level. */
-      line = astAppendString( NULL, &nc, set ? " " : "#" );
-      for ( i = 0; i < current_indent; i++ ) {
-         line = astAppendString( line, &nc, " " );
-      }
-
-/* Append the name string followed by " = ". */
-      line = astAppendString( line, &nc, name );
-      line = astAppendString( line, &nc, " = " );
-
-/* Format the value as a decimal string and append this. */
-      (void) sprintf( buff, "%d", value );
-      line = astAppendString( line, &nc, buff );
-
-/* If required, also append the comment. */
-      if ( astGetComment( this ) && *comment ) {
-         line = astAppendString( line, &nc, " \t# " );
-         line = astAppendString( line, &nc, comment );
-      }
-
-/* Write out the resulting line of text. */
-      OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-      line = astFree( line );
-   }
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-int astWriteInvocations_( int *status ){
-/*
-*+
-*  Name:
-*     astWriteInvocations
-
-*  Purpose:
-*     Returns the number of invocations of the astWrite method.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int astWriteInvocations
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function returns the number of invocations of astWrite which
-*     have been made so far, excluding those made from within the
-*     astWriteObject method. An example of its use is to allow a Dump
-*     function to determine if a sub-object has already been dumped
-*     during the current invocation of astWrite. See the Dump method for
-*     the AstUnit class as an example.
-*-
-*/
-   astDECLARE_GLOBALS;
-   astGET_GLOBALS(NULL);
-   return nwrite_invoc;
-}
-
-static void WriteIsA( AstChannel *this, const char *class,
-                      const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteIsA
-
-*  Purpose:
-*     Write an "IsA" data item to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteIsA( AstChannel *this, const char *class,
-*                       const char *comment )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes an "IsA" data item to the data sink
-*     associated with a Channel. This item delimits the end of the
-*     data associated with the instance variables of a class, as part
-*     of an overall Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        name of the class whose data are terminated by the "IsA"
-*        item.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the "IsA"
-*        item. Normally, this will describe the purpose of the class
-*        whose data are being terminated.
-
-*  Notes:
-*     - The comment supplied may not actually be used, depending on
-*     the nature of the Channel supplied.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   int i;                        /* Loop counter for indentation characters */
-   int nc;                       /* Number of output characters */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Output an "IsA" item only if there has been at least one item
-   written since the last "Begin" or "IsA" item, or if the Full
-   attribute for the Channel is greater than zero (requesting maximum
-   information). */
-   if ( items_written || astGetFull( this ) > 0 ) {
-
-/* Start building a dynamic string with an initial space. Then add
-   further spaces to suit the current indentation level, but reduced
-   by one to allow the "IsA" item to match the "Begin" and "End" items
-   which enclose it. */
-      line = astAppendString( NULL, &nc, " " );
-      for ( i = 0; i < ( current_indent - INDENT_INC ); i++ ) {
-         line = astAppendString( line, &nc, " " );
-      }
-
-/* Append the "IsA" keyword followed by the class name. */
-      line = astAppendString( line, &nc, "IsA " );
-      line = astAppendString( line, &nc, class );
-
-/* If required, also append the comment. */
-      if ( astGetComment( this ) && *comment ) {
-         line = astAppendString( line, &nc, " \t# " );
-         line = astAppendString( line, &nc, comment );
-      }
-
-/* Write out the resulting line of text. */
-      OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-      line = astFree( line );
-
-/* Clear the count of items written for this class. */
-      items_written = 0;
-   }
-}
-
-static void WriteObject( AstChannel *this, const char *name,
-                         int set, int helpful,
-                         AstObject *value, const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteObject
-
-*  Purpose:
-*     Write an Object as a value to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteObject( AstChannel *this, const char *name,
-*                          int set, int helpful,
-*                          AstObject *value, const char *comment )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes an Object as a named value, representing
-*     the value of a class instance variable, to the data sink
-*     associated with a Channel. It is intended for use by class
-*     "Dump" functions when writing out class information which will
-*     subsequently be re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        A Pointer to the Object to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   int i;                        /* Loop counter for indentation characters */
-   int nc;                       /* Number of output characters */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
-   character if "set" is zero. Then add further spaces to suit the
-   current indentation level. */
-      line = astAppendString( NULL, &nc, set ? " " : "#" );
-      for ( i = 0; i < current_indent; i++ ) {
-         line = astAppendString( line, &nc, " " );
-      }
-
-/* Append the name string followed by " =". The absence of a value on
-   the right hand side indicates an Object value, whose definition
-   follows. */
-      line = astAppendString( line, &nc, name );
-      line = astAppendString( line, &nc, " =" );
-
-/* If required, also append the comment. */
-      if ( astGetComment( this ) && *comment ) {
-         line = astAppendString( line, &nc, " \t# " );
-         line = astAppendString( line, &nc, comment );
-      }
-
-/* Write out the resulting line of text. */
-      OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-      line = astFree( line );
-
-/* If the value is not a default, write the Object to the Channel as
-   well, suitably indented (this is omitted if the value is commented
-   out). */
-      if ( set ) {
-         current_indent += INDENT_INC;
-         (void) astWrite( this, value );
-         current_indent -= INDENT_INC;
-      }
-   }
-}
-
-static void WriteString( AstChannel *this, const char *name,
-                         int set, int helpful,
-                         const char *value, const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astWriteString
-
-*  Purpose:
-*     Write a string value to a data sink.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void astWriteString( AstChannel *this, const char *name,
-*                          int set, int helpful,
-*                          const char *value, const char *comment )
-
-*  Class Membership:
-*     Channel method.
-
-*  Description:
-*     This function writes a named string value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a Channel. It is intended for use by class "Dump" functions
-*     when writing out class information which will subsequently be
-*     re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        Pointer to a constant null-terminated string containing the
-*        value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *line;                   /* Pointer to dynamic output string */
-   int i;                        /* Loop counter for characters */
-   int nc;                       /* Number of output characters */
-   int quote;                    /* Quote character found? */
-   int size;                     /* Size of allocated memory */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Start building a dynamic string with an initial space, or a comment
-   character if "set" is zero. Then add further spaces to suit the
-   current indentation level. */
-      line = astAppendString( NULL, &nc, set ? " " : "#" );
-      for ( i = 0; i < current_indent; i++ ) {
-         line = astAppendString( line, &nc, " " );
-      }
-
-/* Append the name string followed by " = " and an opening quote
-   character (the string will be quoted to protect leading and
-   trailing spaces). */
-      line = astAppendString( line, &nc, name );
-      line = astAppendString( line, &nc, " = \"" );
-
-/* We now append the value string, but must inspect each character so
-   that quotes (appearing inside quotes) can be doubled. Determine the
-   current size of memory allocated for the dynamic string. */
-      size = (int) astSizeOf( line );
-
-/* Loop to inspect each character and see if it is a quote. */
-      for ( i = 0; value[ i ]; i++ ) {
-         quote = ( value[ i ] == '"' );
-
-/* If more memory is required, extend the dynamic string (allowing for
-   doubling of quotes and the final null) and save its new size. */
-         if ( nc + 2 + quote > size ) {
-            line = astGrow( line, nc + 2 + quote, sizeof( char ) );
-            if ( astOK ) {
-               size = (int) astSizeOf( line );
-
-/* Quit if an error occurs. */
-            } else {
-               break;
-            }
-         }
-
-/* Append the value character to the dynamic string, duplicating each
-   quote character. */
-         line[ nc++ ] = value[ i ];
-         if ( quote ) line[ nc++ ] = '"';
-      }
-
-/* Append the closing quote. */
-      line = astAppendString( line, &nc, "\"" );
-
-/* If required, also append the comment. */
-      if ( astGetComment( this ) && *comment ) {
-         line = astAppendString( line, &nc, " \t# " );
-         line = astAppendString( line, &nc, comment );
-      }
-
-/* Write out the resulting line of text. */
-      OutputTextItem( this, line, status );
-
-/* Free the dynamic string. */
-      line = astFree( line );
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. */
-
-/*
-*att++
-*  Name:
-*     Comment
-
-*  Purpose:
-*     Include textual comments in output?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which controls whether textual
-*     comments are to be included in the output generated by a
-*     Channel. If included, they will describe what each item of
-*     output represents.
-*
-*     If Comment is non-zero, then comments will be included. If 
-*     it is zero, comments will be omitted.
-
-*  Applicability:
-*     Channel
-*        The default value is non-zero for a normal Channel.
-*     FitsChan
-*        The default value is non-zero for a FitsChan.
-*     XmlChan
-*        The default value is zero for an XmlChan.
-
-*att--
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of one. */
-astMAKE_CLEAR(Channel,Comment,comment,-INT_MAX)
-astMAKE_GET(Channel,Comment,int,0,( this->comment != -INT_MAX ? this->comment : 1 ))
-astMAKE_SET(Channel,Comment,int,comment,( value != 0 ))
-astMAKE_TEST(Channel,Comment,( this->comment != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Full
-
-*  Purpose:
-*     Set level of output detail.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute is a three-state flag and takes values of -1, 0
-*     or +1.  It controls the amount of information included in the
-*     output generated by a Channel.
-*
-*     If Full is zero, then a modest amount of
-*     non-essential but useful information will be included in the
-*     output. If Full is negative, all non-essential information will
-*     be suppressed to minimise the amount of output, while if it is
-*     positive, the output will include the maximum amount of detailed
-*     information about the Object being written.
-
-*  Applicability:
-*     Channel
-*        The default value is zero for a normal Channel.
-*     FitsChan
-*        The default value is zero for a FitsChan.
-*     XmlChan
-*        The default value is -1 for an XmlChan.
-*     StcsChan
-*        The default value is zero for an StcsChan. Set a positive value
-*        to cause default values to be included in STC-S descriptions.
-
-*  Notes:
-*     - All positive values supplied for this attribute are converted
-*     to +1 and all negative values are converted to -1.
-*att--
-*/
-
-/* This ia a 3-state value (-1, 0 or +1) with a value of -INT_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(Channel,Full,full,-INT_MAX)
-astMAKE_GET(Channel,Full,int,0,( this->full != -INT_MAX ? this->full : 0 ))
-astMAKE_SET(Channel,Full,int,full,( value > 0 ? 1 : ( value < 0 ? -1 : 0 ) ))
-astMAKE_TEST(Channel,Full,( this->full != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     ReportLevel
-
-*  Purpose:
-*     Determines which read/write conditions are reported.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute determines which, if any, of the conditions that occur
-*     whilst reading or writing an Object should be reported. These
-*     conditions will generate either a fatal error or a warning, as
-*     determined by attribute Strict. ReportLevel can take any of the
-*     following values:
-*
-*     0 - Do not report any conditions.
-*
-*     1 - Report only conditions where significant information content has been
-*     changed. For instance, an unsupported time-scale has been replaced by a
-*     supported near-equivalent time-scale. Another example is if a basic
-*     Channel unexpected encounters data items that may have been introduced 
-*     by later versions of AST.
-*
-*     2 - Report the above, and in addition report significant default
-*     values. For instance, if no time-scale was specified when reading an
-*     Object from an external data source, report the default time-scale
-*     that is being used.
-*
-*     3 - Report the above, and in addition report any other potentially
-*     interesting conditions that have no significant effect on the
-*     conversion. For instance, report if a time-scale of "TT"
-*     (terrestrial time) is used in place of "ET" (ephemeris time). This
-*     change has no signficiant effect because ET is the predecessor of, 
-*     and is continuous with, TT. Synonyms such as "IAT" and "TAI" are
-*     another example.
-*
-*     The default value is 1. Note, there are many other conditions that
-*     can occur whilst reading or writing an Object that completely
-*     prevent the conversion taking place. Such conditions will always 
-*     generate errors, irrespective of the ReportLevel and Strict attributes.
-
-*  Applicability:
-*     Channel
-*        All Channels have this attribute.
-*     FitsChan
-*        All the conditions selected by the FitsChan Warnings attribute are
-*        reported at level 1.
-*att--
-*/
-
-/* This is an integer value with a value of -INT_MAX when undefined,
-   yielding a default of one. */
-astMAKE_CLEAR(Channel,ReportLevel,report_level,-INT_MAX)
-astMAKE_GET(Channel,ReportLevel,int,1,( this->report_level != -INT_MAX ? this->report_level : 1 ))
-astMAKE_SET(Channel,ReportLevel,int,report_level,value)
-astMAKE_TEST(Channel,ReportLevel,( this->report_level != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Skip
-
-*  Purpose:
-*     Skip irrelevant data?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which indicates whether the Object
-*     data being read through a Channel are inter-mixed with other,
-*     irrelevant, external data.
-*
-*     If Skip is zero (the default), then the source of input data is
-*     expected to contain descriptions of AST Objects and comments and
-*     nothing else (if anything else is read, an error will
-*     result). If Skip is non-zero, then any non-Object data
-*     encountered between Objects will be ignored and simply skipped
-*     over in order to reach the next Object.
-
-*  Applicability:
-*     Channel
-*        All Channels have this attribute.
-*     FitsChan
-*        The FitsChan class sets the default value of this attribute
-*        to 1, so that all irrelevant FITS headers will normally be
-*        ignored.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(Channel,Skip,skip,-INT_MAX)
-astMAKE_GET(Channel,Skip,int,0,( this->skip != -INT_MAX ? this->skip : 0 ))
-astMAKE_SET(Channel,Skip,int,skip,( value != 0 ))
-astMAKE_TEST(Channel,Skip,( this->skip != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Strict
-
-*  Purpose:
-*     Report an error if any unexpeted data items are found?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which indicates whether a warning
-*     rather than an error should be issed for insignificant conversion
-*     problems. If it is set non-zero, then fatal errors are issued
-*     instead of warnings, resulting in the 
-c     AST error status being set.
-f     inherited STATUS variable being set to an error value.
-*     If Strict is zero (the default), then execution continues after minor
-*     conversion problems, and a warning message is added to the Channel
-*     structure. Such messages can be retrieved using the 
-c     astWarnings
-f     AST_WARNINGS
-*     function.
-
-*  Notes:
-*     - This attribute was introduced in AST version 5.0. Prior to this
-*     version of AST unexpected data items read by a basic Channel always 
-*     caused an error to be reported. So applications linked against 
-*     versions of AST prior to version 5.0 may not be able to read Object 
-*     descriptions created by later versions of AST, if the Object's class 
-*     description has changed.
-
-*  Applicability:
-*     Channel
-*        All Channels have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(Channel,Strict,strict,-INT_MAX)
-astMAKE_GET(Channel,Strict,int,0,( this->strict != -INT_MAX ? this->strict : 0 ))
-astMAKE_SET(Channel,Strict,int,strict,( value != 0 ))
-astMAKE_TEST(Channel,Strict,( this->strict != -INT_MAX ))
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Channel objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Channel objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstChannel *this;               /* Pointer to Channel */
-
-/* Obtain a pointer to the Channel structure. */
-   this = (AstChannel *) obj;
-
-/* Free memory used to store warnings. */
-   astAddWarning( this, 0, NULL, NULL, status );
-
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Channel objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Channel objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstChannel *in;                 /* Pointer to input Channel */
-   AstChannel *out;                /* Pointer to output Channel */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Channels. */
-   in = (AstChannel *) objin;
-   out = (AstChannel *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Channel. */
-   out->warnings = NULL;
-   out->nwarn = 0;
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Channel objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Channel class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Object whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstChannel *this;             /* Pointer to the Channel structure */
-   const char *comment;          /* Pointer to comment string */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Channel structure. */
-   this = (AstChannel *) this_object;
-
-/* Write out values representing the instance variables for the
-   Channel class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* ReportLevel. */
-/* ------------ */
-   set = TestReportLevel( this, status );
-   ival = set ? GetReportLevel( this, status ) : astGetReportLevel( this );
-   astWriteInt( channel, "RpLev", set, 0, ival, "Error reporting level" );
-
-/* Skip. */
-/* ----- */
-   set = TestSkip( this, status );
-   ival = set ? GetSkip( this, status ) : astGetSkip( this );
-   astWriteInt( channel, "Skip", set, 0, ival,
-                ival ? "Ignore data between Objects" :
-                       "No data allowed between Objects" );
-
-/* Strict. */
-/* ------- */
-   set = TestStrict( this, status );
-   ival = set ? GetStrict( this, status ) : astGetStrict( this );
-   astWriteInt( channel, "Strict", set, 0, ival,
-                ival ? "Report errors insead of warnings" :
-                       "Report warnings instead of errors" );
-
-/* Full. */
-/* ----- */
-   set = TestFull( this, status );
-   ival = set ? GetFull( this, status ) : astGetFull( this );
-   if ( ival < 0 ) {
-      comment = "Suppress non-essential output";
-   }else if ( ival == 0 ) {
-      comment = "Output standard information";
-   } else {
-      comment = "Output maximum information";
-   }
-   astWriteInt( channel, "Full", set, 0, ival, comment );
-
-/* Comment. */
-/* -------- */
-   set = TestComment( this, status );
-   ival = set ? GetComment( this, status ) : astGetComment( this );
-   astWriteInt( channel, "Comm", set, 0, ival,
-                ival ? "Display comments" :
-                       "Omit comments" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAChannel and astCheckChannel functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Channel,Object)
-astMAKE_CHECK(Channel)
-
-AstChannel *astChannel_( const char *(* source)( void ),
-                         void (* sink)( const char * ),
-                         const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astChannel
-
-*  Purpose:
-*     Create a Channel.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstChannel *astChannel( const char *(* source)( void ),
-*                             void (* sink)( const char * ),
-*                             const char *options, ..., int *status )
-
-*  Class Membership:
-*     Channel constructor.
-
-*  Description:
-*     This function creates a new Channel and optionally initialises
-*     its attributes.
-*
-*     A Channel implements low-level input/output for the AST library.
-*     Writing an Object to a Channel (using astWrite) will generate a
-*     textual representation of that Object, and reading from a
-*     Channel (using astRead) will create a new Object from its
-*     textual representation.
-*
-*     Normally, when you use a Channel, you should provide "source"
-*     and "sink" functions which connect it to an external data store
-*     by reading and writing the resulting text. By default, however,
-*     a Channel will read from standard input and write to standard
-*     output.
-
-*  Parameters:
-*     source
-*        Pointer to a "source" function that takes no arguments and
-*        returns a pointer to a null-terminated string.
-*
-*        This function will be used by the Channel to obtain lines of
-*        input text. On each invocation, it should return a pointer to
-*        the next input line read from some external data store, and a
-*        NULL pointer when there are no more lines to read.
-*
-*        If "source" is NULL, the Channel will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function that takes a pointer to a
-*        null-terminated string as an argument and returns void.
-*
-*        This function will be used by the Channel to deliver lines of
-*        output text. On each invocation, it should deliver the
-*        contents of the string supplied to some external data store.
-*
-*        If "sink" is NULL, the Channel will write to standard output
-*        instead.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Channel. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     astChannel()
-*        A pointer to the new Channel.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic Channel constructor which
-*     is available via the protected interface to the Channel class.
-*     A public interface is provided by the astChannelId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstChannel *new;              /* Pointer to new Channel */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the Channel, allocating memory and initialising the
-   virtual function table as well if necessary. Supply pointers to
-   (local) wrapper functions that can invoke the source and sink
-   functions with appropriate arguments for the C language. */
-   new = astInitChannel( NULL, sizeof( AstChannel ), !class_init, &class_vtab,
-                         "Channel", source, SourceWrap, sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Channel's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Channel. */
-   return new;
-}
-
-AstChannel *astChannelId_( const char *(* source)( void ),
-                           void (* sink)( const char * ),
-                           const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astChannel
-f     AST_CHANNEL
-
-*  Purpose:
-*     Create a Channel.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "channel.h"
-c     AstChannel *astChannel( const char *(* source)( void ),
-c                             void (* sink)( const char * ),
-c                             const char *options, ... )
-f     RESULT = AST_CHANNEL( SOURCE, SINK, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Channel constructor.
-
-*  Description:
-*     This function creates a new Channel and optionally initialises
-*     its attributes.
-*
-*     A Channel implements low-level input/output for the AST library.
-c     Writing an Object to a Channel (using astWrite) will generate a
-f     Writing an Object to a Channel (using AST_WRITE) will generate a
-*     textual representation of that Object, and reading from a
-c     Channel (using astRead) will create a new Object from its
-f     Channel (using AST_READ) will create a new Object from its
-*     textual representation.
-*
-*     Normally, when you use a Channel, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-f     and "sink" routines which connect it to an external data store
-*     by reading and writing the resulting text. By default, however,
-*     a Channel will read from standard input and write to standard
-*     output.
-
-*  Parameters:
-c     source
-f     SOURCE = SUBROUTINE (Given)
-c        Pointer to a source function that takes no arguments and
-c        returns a pointer to a null-terminated string.  This function
-c        will be used by the Channel to obtain lines of input text. On
-c        each invocation, it should return a pointer to the next input
-c        line read from some external data store, and a NULL pointer
-c        when there are no more lines to read.
-c
-c        If "source" is NULL, the Channel will read from standard
-c        input instead.
-f        A source routine, which is a subroutine which takes a single
-f        integer error status argument.  This routine will be used by
-f        the Channel to obtain lines of input text. On each
-f        invocation, it should read the next input line from some
-f        external data store, and then return the resulting text to
-f        the AST library by calling AST_PUTLINE. It should supply a
-f        negative line length when there are no more lines to read.
-f        If an error occurs, it should set its own error status
-f        argument to an error value before returning.
-f
-f        If the null routine AST_NULL is suppied as the SOURCE value,
-f        the Channel will read from standard input instead.
-c     sink
-f     SINK = SUBROUTINE (Given)
-c        Pointer to a sink function that takes a pointer to a
-c        null-terminated string as an argument and returns void.  This
-c        function will be used by the Channel to deliver lines of
-c        output text. On each invocation, it should deliver the
-c        contents of the string supplied to some external data store.
-c
-c        If "sink" is NULL, the Channel will write to standard output
-c        instead.
-f        A sink routine, which is a subroutine which takes a single
-f        integer error status argument.  This routine will be used by
-f        the Channel to deliver lines of output text. On each
-f        invocation, it should obtain the next output line from the
-f        AST library by calling AST_GETLINE, and then deliver the
-f        resulting text to some external data store.  If an error
-f        occurs, it should set its own error status argument to an
-f        error value before returning.
-f
-f        If the null routine AST_NULL is suppied as the SINK value,
-f        the Channel will write to standard output instead.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Channel. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Channel. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astChannel()
-f     AST_CHANNEL = INTEGER
-*        A pointer to the new Channel.
-
-*  Notes:
-c     - Application code can pass arbitrary data (such as file
-c     descriptors, etc) to source and sink functions using the
-c     astPutChannelData function. The source or sink function should use
-c     the astChannelData macro to retrieve this data.
-f     - The names of the routines supplied for the SOURCE and SINK
-f     arguments should appear in EXTERNAL statements in the Fortran
-f     routine which invokes AST_CHANNEL. However, this is not generally
-f     necessary for the null routine AST_NULL (so long as the AST_PAR
-f     include file has been used).
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-f     - Note that the null routine AST_NULL (one underscore) is
-f     different to AST__NULL (two underscores), which is the null Object
-f     pointer.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astChannel constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astChannel_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astChanel_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstChannel *new;              /* Pointer to new Channel */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the Channel, allocating memory and initialising the
-   virtual function table as well if necessary. Supply pointers to
-   (local) wrapper functions that can invoke the source and sink
-   functions with appropriate arguments for the C language. */
-   new = astInitChannel( NULL, sizeof( AstChannel ), !class_init, &class_vtab,
-                         "Channel", source, SourceWrap, sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Channel's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Channel. */
-   return astMakeId( new );
-}
-
-AstChannel *astChannelForId_( const char *(* source)( void ),
-                              char *(* source_wrap)( const char *(*)( void ), int * ),
-                              void (* sink)( const char * ),
-                              void (* sink_wrap)( void (*)( const char * ),
-                                                  const char *, int * ),
-                              const char *options, ... ) {
-/*
-*+
-*  Name:
-*     astChannelFor
-
-*  Purpose:
-*     Initialise a Channel from a foreign language interface.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstChannel *astChannelFor( const char *(* source)( void ),
-*                                char *(* source_wrap)( const char *(*)
-*                                                       ( void ), int * ),
-*                                void (* sink)( const char * ),
-*                                void (* sink_wrap)( void (*)( const char * ),
-*                                                    const char *, int * ),
-*                                const char *options, ... )
-
-*  Class Membership:
-*     Channel constructor.
-
-*  Description:
-*     This function creates a new Channel from a foreign language
-*     interface and optionally initialises its attributes.
-*
-*     A Channel implements low-level input/output for the AST library.
-*     Writing an Object to a Channel (using astWrite) will generate a
-*     textual representation of that Object, and reading from a
-*     Channel (using astRead) will create a new Object from its
-*     textual representation.
-*
-*     Normally, when you use a Channel, you should provide "source"
-*     and "sink" functions which connect it to an external data store
-*     by reading and writing the resulting text. This function also
-*     requires you to provide "wrapper" functions which will invoke
-*     the source and sink functions. By default, however, a Channel
-*     will read from standard input and write to standard output.
-
-*  Parameters:
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        lines of input text. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the Channel will read from standard
-*        input instead.
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next line of input
-*        text. The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source_wrap" is NULL, the Channel will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        lines of output text. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the Channel will write to standard output
-*        instead.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the Channel will write to standard
-*        output instead.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Channel. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     astChannelFor()
-*        A pointer to the new Channel.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*     - This function is only available through the public interface
-*     to the Channel class (not the protected interface) and is
-*     intended solely for use in implementing foreign language
-*     interfaces to this class.
-*-
-
-*  Implememtation Notes:
-*     - This function behaves exactly like astChannelId_, in that it
-*     returns ID values and not true C pointers, but it has two
-*     additional arguments. These are pointers to the "wrapper
-*     functions" which are needed to accommodate foreign language
-*     interfaces.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstChannel *new;              /* Pointer to new Channel */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the Channel, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitChannel( NULL, sizeof( AstChannel ), !class_init, &class_vtab,
-                         "Channel", source, source_wrap, sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Channel's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Channel. */
-   return astMakeId( new );
-}
-
-AstChannel *astLoadChannel_( void *mem, size_t size,
-                             AstChannelVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadChannel
-
-*  Purpose:
-*     Load a Channel.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     AstChannel *astLoadChannel( void *mem, size_t size,
-*                                 AstChannelVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     Channel loader.
-
-*  Description:
-*     This function is provided to load a new Channel using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Channel structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Channel at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Channel is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Channel data (sizeof(Channel)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Channel (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Channel structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstChannel) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Channel. If this is NULL, a pointer
-*        to the (static) virtual function table for the Channel class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Channel" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Channel.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstChannel *new;              /* Pointer to the new Channel */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Channel. In this case the
-   Channel belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstChannel );
-      vtab = &class_vtab;
-      name = "Channel";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitChannelVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Channel. */
-   new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Channel" );
-
-/* Set the pointers to the source and sink functions, and their
-   wrapper functions, to NULL (we cannot restore these since they
-   refer to process-specific addresses). */
-      new->source = NULL;
-      new->source_wrap = NULL;
-      new->sink = NULL;
-      new->sink_wrap = NULL;
-
-/* We do not have any data to pass to the source and sink functions. */
-      new->data = NULL;
-
-/* No warnings yet. */
-      new->warnings = NULL;
-      new->nwarn = 0;
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* ReportLevel. */
-/* ------------ */
-      new->report_level = astReadInt( channel, "rplev", -INT_MAX );
-      if ( TestReportLevel( new, status ) ) SetReportLevel( new,
-                                                            new->report_level, 
-                                                            status );
-
-/* Skip. */
-/* ----- */
-      new->skip = astReadInt( channel, "skip", -INT_MAX );
-      if ( TestSkip( new, status ) ) SetSkip( new, new->skip, status );
-
-/* Strict. */
-/* ------- */
-      new->strict = astReadInt( channel, "strict", -INT_MAX );
-      if ( TestStrict( new, status ) ) SetStrict( new, new->strict, status );
-
-/* Full. */
-/* ----- */
-      new->full = astReadInt( channel, "full", -INT_MAX );
-      if ( TestFull( new, status ) ) SetFull( new, new->full, status );
-
-/* Comment. */
-/* -------- */
-      new->comment = astReadInt( channel, "comm", -INT_MAX );
-      if ( TestComment( new, status ) ) SetComment( new, new->comment, status );
-
-/* If an error occurred, clean up by deleting the new Channel. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Channel pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
-   defined by this class. Each simply checks the global error status
-   and then locates and executes the appropriate member function,
-   using the function pointer stored in the object's virtual function
-   table (this pointer is located using the astMEMBER macro defined in
-   "object.h").
-
-   Note that the member function may not be the one defined here, as
-   it may have been over-ridden by a derived class. However, it should
-   still have the same interface. */
-void astGetNextData_( AstChannel *this, int begin, char **name, char **val, int *status ) {
-   *name = NULL;
-   *val = NULL;
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,GetNextData))( this, begin, name, val, status );
-}
-char *astGetNextText_( AstChannel *this, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Channel,GetNextText))( this, status );
-}
-void astPutNextText_( AstChannel *this, const char *line, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,PutNextText))( this, line, status );
-}
-AstObject *astRead_( AstChannel *this, int *status ) {
-   astDECLARE_GLOBALS            
-   if ( !astOK ) return NULL;
-   astGET_GLOBALS(this);
-   astAddWarning( this, 0, NULL, NULL, status );
-   channel_data = this->data;
-   return (**astMEMBER(this,Channel,Read))( this, status );
-}
-void astReadClassData_( AstChannel *this, const char *class, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,ReadClassData))( this, class, status );
-}
-double astReadDouble_( AstChannel *this, const char *name, double def, int *status ) {
-   if ( !astOK ) return 0.0;
-   return (**astMEMBER(this,Channel,ReadDouble))( this, name, def, status );
-}
-int astReadInt_( AstChannel *this, const char *name, int def, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Channel,ReadInt))( this, name, def, status );
-}
-AstObject *astReadObject_( AstChannel *this, const char *name,
-                           AstObject *def, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Channel,ReadObject))( this, name, def, status );
-}
-char *astReadString_( AstChannel *this, const char *name, const char *def, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Channel,ReadString))( this, name, def, status );
-}
-void astWriteBegin_( AstChannel *this, const char *class,
-                     const char *comment, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,WriteBegin))( this, class, comment, status );
-}
-void astWriteDouble_( AstChannel *this, const char *name, int set, int helpful,
-                      double value, const char *comment, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,WriteDouble))( this, name, set, helpful, value,
-                                            comment, status );
-}
-void astWriteEnd_( AstChannel *this, const char *class, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,WriteEnd))( this, class, status );
-}
-void astWriteInt_( AstChannel *this, const char *name, int set, int helpful,
-                   int value, const char *comment, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,WriteInt))( this, name, set, helpful, value,
-                                         comment, status );
-}
-void astWriteIsA_( AstChannel *this, const char *class, const char *comment, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,WriteIsA))( this, class, comment, status );
-}
-void astWriteString_( AstChannel *this, const char *name, int set, int helpful,
-                      const char *value, const char *comment, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,WriteString))( this, name, set, helpful, value,
-                                            comment, status );
-}
-void astPutChannelData_( AstChannel *this, void *data, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Channel,PutChannelData))( this, data, status );
-}
-
-AstKeyMap *astWarnings_( AstChannel *this, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,Channel,Warnings))( this, status );
-}
-
-/* Because of the variable argument list, we need to work a bit harder on
-   astAddWarning. Functions that provide implementations of the
-   astAddWarning method recieve the fully expanded message and so do not
-   need a variable argument list. */
-
-void astAddWarning_( void *this_void, int level, const char *fmt, 
-                     const char *method, int *status, ... ) {
-   AstChannel *this;
-   char buff[ 201 ];
-   va_list args;                 
-   int nc;
-
-   this = astCheckChannel( this_void );
-
-   if( fmt ) {
-      if( astOK ) {
-         va_start( args, status );
-         nc = vsprintf( buff, fmt, args );
-         va_end( args );
-         if( nc > 200 ) {
-            astError( AST__INTER, "astAddWarning(%s): Message buffer size "
-                      "exceeded (internal AST programming error).",
-                      status, astGetClass( this ) );
-         } else {
-            (**astMEMBER(this,Channel,AddWarning))( this, level, buff, method, status );
-         }
-      }
-   } else {
-      (**astMEMBER(this,Channel,AddWarning))( this, level, NULL, method, status );
-   }
-}
-
-/* Count the number of times astWrite is invoked (excluding invocations
-   made from within the astWriteObject method - see below). The count is 
-   done here so that invocations of astWrite within a sub-class will be 
-   included. Also store pointer to channel data in a thread-specific global 
-   variable. */
-int astWrite_( AstChannel *this, AstObject *object, int *status ) {
-   astDECLARE_GLOBALS            
-   if ( !astOK ) return 0;
-   astGET_GLOBALS(this);
-   nwrite_invoc++;
-   channel_data = this->data;
-   astAddWarning( this, 0, NULL, NULL, status );
-   return (**astMEMBER(this,Channel,Write))( this, object, status );
-}
-
-/* We do not want to count invocations of astWrite made from within the
-   astWriteObject method. So decrement the number of invocations first
-   (this assumes that each invocation of astWriteObject will only invoke
-   astWrite once). Also store pointer to channel data in a thread-specific 
-   global variable. */
-void astWriteObject_( AstChannel *this, const char *name, int set,
-                      int helpful, AstObject *value, const char *comment, int *status ) {
-   astDECLARE_GLOBALS            
-   if ( !astOK ) return;
-   astGET_GLOBALS(this);
-   nwrite_invoc--;
-   channel_data = this->data;
-   (**astMEMBER(this,Channel,WriteObject))( this, name, set, helpful, value,
-                                            comment, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/channel.h b/ast-5.3-1/channel.h
deleted file mode 100644
index 0e58de5..0000000
--- a/ast-5.3-1/channel.h
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
-*+
-*  Name:
-*     channel.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Channel class.
-
-*  Invocation:
-*     #include "channel.h"
-
-*  Description:
-*     This include file defines the interface to the Channel class and
-*     provides the type definitions, function prototypes and macros,
-*     etc. needed to use this class.
-*
-*     A Channel is the basic form of AST I/O channel, through which
-*     Objects may be written and later read back. It causes I/O to
-*     take place using a textual format via standard input and
-*     standard output.
-*
-*     Writing to a Channel will result in a textual representation of
-*     an Object being produced on standard output. Reading from a
-*     Channel will causes a textual description of an Object to be
-*     read from standard input, and that Object to be
-*     re-created. Channel I/O is stream based, and multiple objects
-*     may be written or read in succession through the same Channel. A
-*     null Object pointer is returned if there is no more input to
-*     read.
-
-*  Inheritance:
-*     The Channel class inherits from the Object class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Comment (integer)
-*        A boolean value (0 or 1) which controls whether comments are
-*        to be included in textual output generated by a Channel. If
-*        this value is non-zero (the default), then comments will be
-*        included. If it is zero, comments will be omitted.
-*     Full (integer)
-*        A three-state flag (taking values -1, 0 or +1) which controls
-*        the amount of information included in textual output
-*        generated by a Channel. If this value is zero (the default),
-*        then a modest amount of non-essential but useful information
-*        will be included along with the output. If Full is negative,
-*        all non-essential information will be suppressed, while if it
-*        is positive, the output will include the maximum amount of
-*        information about the Object being written.
-*     Skip (integer)
-*        A boolean value which indicates whether the Objects being
-*        read through a Channel are inter-mixed with other external
-*        data. If this value is zero (the default), then the source of
-*        input data is expected to contain descriptions of AST Objects
-*        and comments and nothing else (if anything else is read, an
-*        error will result). If Skip is non-zero, then any non-Object
-*        data encountered between Objects will simply be skipped over
-*        in order to reach the next Object.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a Mapping.
-*        astGetAttrib
-*           Get an attribute value for a Mapping.
-*        astSetAttrib
-*           Set an attribute value for a Mapping.
-*        astTestAttrib
-*           Test if an attribute value has been set for a Mapping.
-
-*  New Methods Defined:
-*     Public:
-*        astRead
-*           Read an Object from a Channel.
-*        astWrite
-*           Write an Object to a Channel.
-*
-*     Protected:
-*        astClearComment
-*           Clear the Comment attribute for a Channel.
-*        astClearFull
-*           Clear the Full attribute for a Channel.
-*        astClearSkip
-*           Clear the Skip attribute for a Channel.
-*        astGetComment
-*           Get the value of the Comment attribute for a Channel.
-*        astGetFull
-*           Get the value of the Full attribute for a Channel.
-*        astGetNextData
-*           Read the next item of data from a data source.
-*        astGetNextText
-*           Read the next line of input text from a data source.
-*        astGetSkip
-*           Get the value of the Skip attribute for a Channel.
-*        astPutNextText
-*           Write a line of output text to a data sink.
-*        astReadClassData
-*           Read values from a data source for a class loader.
-*        astReadDouble
-*           Read a double value as part of loading a class.
-*        astReadInt
-*           Read an int value as part of loading a class.
-*        astReadObject
-*           Read a (sub)Object as part of loading a class.
-*        astReadString
-*           Read a string value as part of loading a class.
-*        astSetComment
-*           Set the value of the Comment attribute for a Channel.
-*        astSetFull
-*           Set the value of the Full attribute for a Channel.
-*        astSetSkip
-*           Set the value of the Skip attribute for a Channel.
-*        astTestComment
-*           Test whether a value has been set for the Comment attribute of a
-*           Channel.
-*        astTestFull
-*           Test whether a value has been set for the Full attribute of a
-*           Channel.
-*        astTestSkip
-*           Test whether a value has been set for the Skip attribute of a
-*           Channel.
-*        astWriteBegin
-*           Write a "Begin" data item to a data sink.
-*        astWriteDouble
-*           Write a double value to a data sink.
-*        astWriteEnd
-*           Write an "End" data item to a data sink.
-*        astWriteInt
-*           Write an integer value to a data sink.
-*        astWriteIsA
-*           Write an "IsA" data item to a data sink.
-*        astWriteObject
-*           Write an Object as a value to a data sink.
-*        astWriteString
-*           Write a string value to a data sink.
-
-*  Other Class Functions:
-*     Public:
-*        astChannel
-*           Create a Channel.
-*        astChannelFor
-*           Create a Channel from a foreign language interface.
-*        astIsAChannel
-*           Test class membership.
-*
-*     Protected:
-*        astCheckChannel
-*           Validate class membership.
-*        astInitChannel
-*           Initialise a Channel.
-*        astInitChannelVtab
-*           Initialise the virtual function table for the Channel class.
-*        astLoadChannel
-*           Load a Channel.
-
-*  Type Definitions:
-*     Public:
-*        AstChannel
-*           Channel object type.
-*
-*     Protected:
-*        AstChannelVtab
-*           Channel virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     12-AUG-1996 (RFWS):
-*        Original version.
-*     12-DEC-1996 (RFWS):
-*        Added the astChannelFor function.
-*     11-NOV-2002 (DSB):
-*        Added astWriteInvocations.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitAxisVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-
-/* Note that the usual setting of the CHANNEL_INCLUDED flag, which
-   prevents this file being included more than once, must be deferred
-   until after including the "object.h" file. This is because
-   "object.h" needs to include the present interface definition (as a
-   form of "forward reference") in order to have access to I/O
-   Channels itself. */
-#if !defined( CHANNEL_INCLUDED )
-#define CHANNEL_INCLUDED
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros */
-/* ====== */
-/* Define constants used to size global arrays in this module. */
-#define AST__CHANNEL_GETATTRIB_BUFF_LEN 50    
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* The astWarnings function returns a KeyMap pointer, but we cannot
-   include keymap.h here to define the AstKeyMap type since keymap.h
-   itself include sthis file. So we make a temporary declaration which
-   will be replaced by the full one when the keymap.h file is included. */
-struct AstKeyMap;
-
-/* Channel structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstChannel {
-
-/* Attributes inherited from the parent class. */
-   AstObject object;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   const char *(* source)( void ); /* Pointer to source function */
-   char *(* source_wrap)( const char *(*)(void), int * );
-                                 /* Source wrapper function pointer */
-   void (* sink)( const char * ); /* Pointer to sink function */
-   void (* sink_wrap)( void (*)( const char *), const char *, int * );
-                                 /* Sink wrapper function pointer */
-   int comment;                  /* Output comments? */
-   int full;                     /* Set max/normal/min information level */
-   int skip;                     /* Skip data between Objects? */
-   int report_level;             /* Skip data between Objects? */
-   int strict;                   /* Report unexpected data items? */
-   void *data;                   /* Data to pass to source/sink functions */
-   char **warnings;              /* Array of warning strings */
-   int nwarn;                    /* Size of warnings array */
-} AstChannel;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstChannelVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstObjectVtab object_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   struct AstKeyMap *(* Warnings)( AstChannel *, int * );
-   AstObject *(* Read)( AstChannel *, int * );
-   AstObject *(* ReadObject)( AstChannel *, const char *, AstObject *, int * );
-   char *(* GetNextText)( AstChannel *, int * );
-   char *(* ReadString)( AstChannel *, const char *, const char *, int * );
-   double (* ReadDouble)( AstChannel *, const char *, double, int * );
-   int (* GetComment)( AstChannel *, int * );
-   int (* GetFull)( AstChannel *, int * );
-   int (* GetStrict)( AstChannel *, int * );
-   int (* ReadInt)( AstChannel *, const char *, int, int * );
-   int (* TestComment)( AstChannel *, int * );
-   int (* TestFull)( AstChannel *, int * );
-   int (* TestStrict)( AstChannel *, int * );
-   int (* Write)( AstChannel *, AstObject *, int * );
-   void (* AddWarning)( AstChannel *, int, const char *, const char *, int * );
-   void (* ClearComment)( AstChannel *, int * );
-   void (* ClearFull)( AstChannel *, int * );
-   void (* ClearStrict)( AstChannel *, int * );
-   void (* GetNextData)( AstChannel *, int, char **, char **, int * );
-   void (* PutChannelData)( AstChannel *, void *, int * );
-   void (* PutNextText)( AstChannel *, const char *, int * );
-   void (* ReadClassData)( AstChannel *, const char *, int * );
-   void (* SetComment)( AstChannel *, int, int * );
-   void (* SetFull)( AstChannel *, int, int * );
-   void (* SetStrict)( AstChannel *, int, int * );
-   void (* WriteBegin)( AstChannel *, const char *, const char *, int * );
-   void (* WriteDouble)( AstChannel *, const char *, int, int, double, const char *, int * );
-   void (* WriteEnd)( AstChannel *, const char *, int * );
-   void (* WriteInt)( AstChannel *, const char *, int, int, int, const char *, int * );
-   void (* WriteIsA)( AstChannel *, const char *, const char *, int * );
-   void (* WriteObject)( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-   void (* WriteString)( AstChannel *, const char *, int, int, const char *, const char *, int * );
-
-   int (* GetSkip)( AstChannel *, int * );
-   int (* TestSkip)( AstChannel *, int * );
-   void (* ClearSkip)( AstChannel *, int * );
-   void (* SetSkip)( AstChannel *, int, int * );
-
-   int (* GetReportLevel)( AstChannel *, int * );
-   int (* TestReportLevel)( AstChannel *, int * );
-   void (* ClearReportLevel)( AstChannel *, int * );
-   void (* SetReportLevel)( AstChannel *, int, int * );
-
-} AstChannelVtab;
-
-/* Define a private structure type used to store linked lists of
-   name-value associations. */
-typedef struct AstChannelValue {
-   struct AstChannelValue *flink; /* Link to next element */
-   struct AstChannelValue *blink; /* Link to previous element */
-   char *name;                    /* Pointer to name string */
-   union {                        /* Holds pointer to value */
-      char *string;               /* Pointer to string value */
-      AstObject *object;          /* Pointer to Object value */
-   } ptr;
-   int is_object;                 /* Whether value is an Object (else string) */
-} AstChannelValue;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstChannelGlobals {
-   AstChannelVtab Class_Vtab;
-   int Class_Init;
-   int AstReadClassData_Msg;
-   char GetAttrib_Buff[ AST__CHANNEL_GETATTRIB_BUFF_LEN + 1 ];
-   int Items_Written;
-   int Current_Indent;
-   int Nest;
-   int Nwrite_Invoc;
-   char **Object_Class;
-   AstChannelValue **Values_List;
-   char **Values_Class;
-   int *Values_OK;
-   int *End_Of_Object;
-   void *Channel_Data;
-} AstChannelGlobals;
-
-#endif
-
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Channel)          /* Check class membership */
-astPROTO_ISA(Channel)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstChannel *astChannel_( const char *(*)( void ), void (*)( const char * ),
-                         const char *, int *, ...);
-#else
-AstChannel *astChannelId_( const char *(*)( void ), void (*)( const char * ),
-                           const char *, ... )__attribute__((format(printf,3,4)));
-AstChannel *astChannelForId_( const char *(*)( void ),
-                              char *(*)( const char *(*)( void ), int * ),
-                              void (*)( const char * ),
-                              void (*)( void (*)( const char * ),
-                                        const char *, int * ),
-                              const char *, ... );
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstChannel *astInitChannel_( void *, size_t, int, AstChannelVtab *,
-                             const char *, const char *(*)( void ), 
-                             char *(*)( const char *(*)( void ), int * ), 
-                             void (*)( const char * ), 
-                             void (*)( void (*)( const char * ), 
-                             const char *, int * ), int * );
-
-
-/* Vtab initialiser. */
-void astInitChannelVtab_( AstChannelVtab *, const char *, int * );
-
-/* Loader. */
-AstChannel *astLoadChannel_( void *, size_t, AstChannelVtab *,
-                             const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitChannelGlobals_( AstChannelGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstObject *astRead_( AstChannel *, int * );
-int astWrite_( AstChannel *, AstObject *, int * );
-void astPutChannelData_( AstChannel *, void *, int * );
-void *astChannelData_( void );
-struct AstKeyMap *astWarnings_( AstChannel *, int * );
-
-char *astSourceWrap_( const char *(*)( void ), int * );
-void astSinkWrap_( void (*)( const char * ), const char *, int * );
-
-# if defined(astCLASS)           /* Protected */
-AstObject *astReadObject_( AstChannel *, const char *, AstObject *, int * );
-char *astGetNextText_( AstChannel *, int * );
-char *astReadString_( AstChannel *, const char *, const char *, int * );
-double astReadDouble_( AstChannel *, const char *, double, int * );
-int astGetComment_( AstChannel *, int * );
-int astGetFull_( AstChannel *, int * );
-int astGetStrict_( AstChannel *, int * );
-int astReadInt_( AstChannel *, const char *, int, int * );
-int astTestComment_( AstChannel *, int * );
-int astTestFull_( AstChannel *, int * );
-int astTestStrict_( AstChannel *, int * );
-void astAddWarning_( void *, int, const char *, const char *, int *, ... )__attribute__((format(printf,3,6)));
-void astClearComment_( AstChannel *, int * );
-void astClearFull_( AstChannel *, int * );
-void astClearStrict_( AstChannel *, int * );
-void astGetNextData_( AstChannel *, int, char **, char **, int * );
-void astPutNextText_( AstChannel *, const char *, int * );
-void astReadClassData_( AstChannel *, const char *, int * );
-void astSetComment_( AstChannel *, int, int * );
-void astSetFull_( AstChannel *, int, int * );
-void astSetStrict_( AstChannel *, int, int * );
-void astWriteBegin_( AstChannel *, const char *, const char *, int * );
-void astWriteDouble_( AstChannel *, const char *, int, int, double, const char *, int * );
-void astWriteEnd_( AstChannel *, const char *, int * );
-void astWriteInt_( AstChannel *, const char *, int, int, int, const char *, int * );
-int astWriteInvocations_( int * );
-void astWriteIsA_( AstChannel *, const char *, const char *, int * );
-void astWriteObject_( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-void astWriteString_( AstChannel *, const char *, int, int, const char *, const char *, int * );
-
-int astGetSkip_( AstChannel *, int * );
-int astTestSkip_( AstChannel *, int * );
-void astClearSkip_( AstChannel *, int * );
-void astSetSkip_( AstChannel *, int, int * );
-
-int astGetReportLevel_( AstChannel *, int * );
-int astTestReportLevel_( AstChannel *, int * );
-void astClearReportLevel_( AstChannel *, int * );
-void astSetReportLevel_( AstChannel *, int, int * );
-
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
-   validate their own arguments. We must use a cast when passing object
-   pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckChannel(this) astINVOKE_CHECK(Channel,this,0)
-#define astVerifyChannel(this) astINVOKE_CHECK(Channel,this,1)
-
-/* Test class membership. */
-#define astIsAChannel(this) astINVOKE_ISA(Channel,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astChannel astINVOKE(F,astChannel_)
-#else
-#define astChannel astINVOKE(F,astChannelId_)
-#define astChannelFor astINVOKE(F,astChannelForId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitChannel(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap) \
-astINVOKE(O,astInitChannel_(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitChannelVtab(vtab,name) astINVOKE(V,astInitChannelVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadChannel(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadChannel_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckChannel to validate Channel pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astRead(this) \
-astINVOKE(O,astRead_(astCheckChannel(this),STATUS_PTR))
-#define astWrite(this,object) \
-astINVOKE(V,astWrite_(astCheckChannel(this),astCheckObject(object),STATUS_PTR))
-#define astPutChannelData(this,data) \
-astINVOKE(V,astPutChannelData_(astCheckChannel(this),data,STATUS_PTR))
-#define astWarnings(this) \
-astINVOKE(O,astWarnings_(astCheckChannel(this),STATUS_PTR))
-
-#define astSourceWrap astSourceWrap_
-#define astSinkWrap astSinkWrap_
-#define astChannelData astChannelData_()
-
-#if defined(astCLASS)            /* Protected */
-#define astAddWarning astAddWarning_
-
-#define astClearComment(this) \
-astINVOKE(V,astClearComment_(astCheckChannel(this),STATUS_PTR))
-#define astClearFull(this) \
-astINVOKE(V,astClearFull_(astCheckChannel(this),STATUS_PTR))
-#define astClearStrict(this) \
-astINVOKE(V,astClearStrict_(astCheckChannel(this),STATUS_PTR))
-#define astGetComment(this) \
-astINVOKE(V,astGetComment_(astCheckChannel(this),STATUS_PTR))
-#define astGetFull(this) \
-astINVOKE(V,astGetFull_(astCheckChannel(this),STATUS_PTR))
-#define astGetNextData(this,begin,name,val) \
-astINVOKE(V,astGetNextData_(astCheckChannel(this),begin,name,val,STATUS_PTR))
-#define astGetNextText(this) \
-astINVOKE(V,astGetNextText_(astCheckChannel(this),STATUS_PTR))
-#define astGetStrict(this) \
-astINVOKE(V,astGetStrict_(astCheckChannel(this),STATUS_PTR))
-#define astPutNextText(this,line) \
-astINVOKE(V,astPutNextText_(astCheckChannel(this),line,STATUS_PTR))
-#define astReadClassData(this,class) \
-astINVOKE(V,astReadClassData_(astCheckChannel(this),class,STATUS_PTR))
-#define astReadDouble(this,name,def) \
-astINVOKE(V,astReadDouble_(astCheckChannel(this),name,def,STATUS_PTR))
-#define astReadInt(this,name,def) \
-astINVOKE(V,astReadInt_(astCheckChannel(this),name,def,STATUS_PTR))
-#define astReadObject(this,name,def) \
-astINVOKE(O,astReadObject_(astCheckChannel(this),name,(def)?astCheckObject(def):NULL,STATUS_PTR))
-#define astReadString(this,name,def) \
-astINVOKE(V,astReadString_(astCheckChannel(this),name,def,STATUS_PTR))
-#define astSetComment(this,value) \
-astINVOKE(V,astSetComment_(astCheckChannel(this),value,STATUS_PTR))
-#define astSetFull(this,value) \
-astINVOKE(V,astSetFull_(astCheckChannel(this),value,STATUS_PTR))
-#define astSetStrict(this,value) \
-astINVOKE(V,astSetStrict_(astCheckChannel(this),value,STATUS_PTR))
-#define astTestComment(this) \
-astINVOKE(V,astTestComment_(astCheckChannel(this),STATUS_PTR))
-#define astTestFull(this) \
-astINVOKE(V,astTestFull_(astCheckChannel(this),STATUS_PTR))
-#define astTestStrict(this) \
-astINVOKE(V,astTestStrict_(astCheckChannel(this),STATUS_PTR))
-#define astWriteBegin(this,class,comment) \
-astINVOKE(V,astWriteBegin_(astCheckChannel(this),class,comment,STATUS_PTR))
-#define astWriteDouble(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteDouble_(astCheckChannel(this),name,set,helpful,value,comment,STATUS_PTR))
-#define astWriteEnd(this,class) \
-astINVOKE(V,astWriteEnd_(astCheckChannel(this),class,STATUS_PTR))
-#define astWriteInt(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteInt_(astCheckChannel(this),name,set,helpful,value,comment,STATUS_PTR))
-#define astWriteIsA(this,class,comment) \
-astINVOKE(V,astWriteIsA_(astCheckChannel(this),class,comment,STATUS_PTR))
-#define astWriteObject(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteObject_(astCheckChannel(this),name,set,helpful,astCheckObject(value),comment,STATUS_PTR))
-#define astWriteString(this,name,set,helpful,value,comment) \
-astINVOKE(V,astWriteString_(astCheckChannel(this),name,set,helpful,value,comment,STATUS_PTR))
-
-#define astWriteInvocations astWriteInvocations_(STATUS_PTR)
-
-#define astClearSkip(this) \
-astINVOKE(V,astClearSkip_(astCheckChannel(this),STATUS_PTR))
-#define astGetSkip(this) \
-astINVOKE(V,astGetSkip_(astCheckChannel(this),STATUS_PTR))
-#define astSetSkip(this,value) \
-astINVOKE(V,astSetSkip_(astCheckChannel(this),value,STATUS_PTR))
-#define astTestSkip(this) \
-astINVOKE(V,astTestSkip_(astCheckChannel(this),STATUS_PTR))
-
-#define astClearReportLevel(this) \
-astINVOKE(V,astClearReportLevel_(astCheckChannel(this),STATUS_PTR))
-#define astGetReportLevel(this) \
-astINVOKE(V,astGetReportLevel_(astCheckChannel(this),STATUS_PTR))
-#define astSetReportLevel(this,value) \
-astINVOKE(V,astSetReportLevel_(astCheckChannel(this),value,STATUS_PTR))
-#define astTestReportLevel(this) \
-astINVOKE(V,astTestReportLevel_(astCheckChannel(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/circle.c b/ast-5.3-1/circle.c
deleted file mode 100644
index a45d2e2..0000000
--- a/ast-5.3-1/circle.c
+++ /dev/null
@@ -1,2894 +0,0 @@
-/*
-*class++
-*  Name:
-*     Circle
-
-*  Purpose:
-*     A circular or spherical region within a Frame.
-
-*  Constructor Function:
-c     astCircle
-f     AST_CIRCLE
-
-*  Description:
-*     The Circle class implements a Region which represents a circle or
-*     sphere within a Frame.
-
-*  Inheritance:
-*     The Circle class inherits from the Region class.
-
-*  Attributes:
-*     The Circle class does not define any new attributes beyond
-*     those which are applicable to all Regions.
-
-*  Functions:
-c     In addition to those functions applicable to all Regions, the
-c     following functions may also be applied to all Circles:
-f     In addition to those routines applicable to all Regions, the
-f     following routines may also be applied to all Circles:
-*
-c     - astCirclePars: Get the geometric parameters of the Circle
-c     - AST_CIRCLEPARS: Get the geometric parameters of the Circle
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     31-AUG-2004 (DSB):
-*        Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Circle
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "box.h"                 /* Box Regions */
-#include "wcsmap.h"              /* Definitons of AST__DPI etc */
-#include "circle.h"              /* Interface definition for this class */
-#include "ellipse.h"             /* Interface definition for ellipse class */
-#include "mapping.h"             /* Position mappings */
-#include "unitmap.h"             /* Unit Mapping */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Circle)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Circle,Class_Init)
-#define class_vtab astGLOBAL(Circle,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstCircleVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstCircle *astCircleId_( void *, int, const double[], const double[], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *CircumPoint( AstFrame *, int, const double *, double, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Cache( AstCircle *, int * );
-static void CalcPars( AstFrame *, AstPointSet *, double *, double *, double *, int * );
-static void CirclePars( AstCircle *, double *, double *, double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-
-AstRegion *astBestCircle_( AstPointSet *mesh, double *cen, AstRegion *unc, int *status ){
-/*
-*+
-*  Name:
-*     astBestCircle
-
-*  Purpose:
-*     Find the best fitting Circle through a given mesh of points.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstRegion *astBestCircle( AstPointSet *mesh, double *cen, AstRegion *unc )
-
-*  Class Membership:
-*     Circle member function 
-
-*  Description:
-*     This function finds the best fitting Circle through a given mesh of 
-*     points.
-
-*  Parameters:
-*     mesh
-*        Pointer to a PointSet holding the mesh of points. They are
-*        assumed to be in the Frame represented by "unc".
-*     cen
-*        Pointer to an array holding the coordinates of the new Circle
-*        centre.
-*     unc
-*        A Region representing the uncertainty associated with each point
-*        on the mesh.
-
-*  Returned Value:
-*     Pointer to the best fitting Circle. It will inherit the positional
-*     uncertainty and Frame represented by "unc".
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
-   AstRegion *result; 
-   double *p;
-   double rad;
-   double **ptr;
-   double d;
-   double s2r;
-   double p0;
-   int ic;
-   int ip;
-   int n;
-   int nc;
-   int np;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get no. of points in the mesh, and the number of axis values per point. */
-   np = astGetNpoint( mesh );
-   nc = astGetNcoord( mesh );
-
-/* Get pointers to the axis values. */
-   ptr = astGetPoints( mesh );   
-
-/* Check pointers can be used safely */
-   if( astOK ) {
-
-/* We find ther sum of the squared axis increments from the supplied
-   centre to each of the supplied points. Initialise the sum to zero. */
-      s2r = 0.0;
-      n = 0;
-
-/* Loop round all axes. */
-      for( ic = 0; ic < nc; ic++ ) {
-         p = ptr[ ic ];
-         p0 = cen[ ic ];
-
-/* Loop round all values for this axis. */
-         for( ip = 0; ip < np; ip++, p++ ) {
-            if( *p != AST__BAD ) {
-
-/* Increment the sums */
-               d = *p - p0;
-               s2r += d*d;
-               n++;
-
-            }
-         }
-      }
-
-/* Find the RMS distance of the points from the supplied centre. This is
-   the radius of the best fitting circle. */
-      if( n > 0 ) {
-         rad = sqrt( nc*s2r/n );
-
-/* Create the returned Region. */
-         result = (AstRegion *) astCircle( unc, 1, cen, &rad, unc, "", status );
-      }
-   }
-
-/* Return NULL if anything went wrong. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
-   return result;
-}
-
-static void Cache( AstCircle *this, int *status ){
-/*
-*  Name:
-*     Cache
-
-*  Purpose:
-*     Calculate intermediate values and cache them in the Circle structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     void Cache( AstCircle *this, int *status )
-
-*  Class Membership:
-*     Circle member function 
-
-*  Description:
-*     This function uses the PointSet stored in the parent Region to calculate 
-*     some intermediate values which are useful in other methods. These
-*     values are stored within the Circle structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Circle.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   double *centre;
-   double *lb;
-   double *ub;
-   double radius;
-   int i;
-   int nc;     
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do Nothing if the cached information is up to date. */
-   if( this->stale ) {
-
-/* Get a pointer to the base Frame and the number of base axes. */
-      frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-      nc = astGetNaxes( frm );
-
-/* Allocate memory to hold the centre coords. */
-      centre = astMalloc( sizeof( double )*astGetNaxes( frm ) );
-
-/* Get the radius and centre of the Circle in the base Frame, using the
-   centre and circumference positions stored in the parent Region structure. */
-      CalcPars( frm, ( (AstRegion *) this)->points, centre, &radius, NULL, 
-                status );
-
-/* Allocate memory to store the base frame bounding box. This is just
-   initialised here. It is set properly when the astRegBaseMesh
-   function is called. This box should not be used unless the "basemesh" 
-   component of the parent Region structure is set to a non-null value. */
-      lb = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-      ub = (double *) astMalloc( sizeof( double )*(size_t) nc );   
-
-/* Initialise the bounding box. */
-      for( i = 0; astOK && i < nc; i++ ) {
-         lb[ i ] = -DBL_MAX;
-         ub[ i ] = DBL_MAX;
-      }
-
-/* If everything went OK, store these values in the Circle structure. */
-      if( astOK ) {
-         this->radius = radius;
-
-         astFree( this->centre );
-         this->centre = centre;
-         centre = NULL;
-
-         astFree( this->lb );
-         this->lb = lb;
-         lb = NULL;
-
-         astFree( this->ub );
-         this->ub = ub;
-         ub = NULL;
-      }
-
-/* Free resources */
-      frm = astAnnul( frm );
-      if( centre ) centre = astFree( centre );
-
-/* Indicate cached information is up to date. */
-      this->stale = 0;
-   }
-}
-
-static void CalcPars( AstFrame *frm, AstPointSet *pset, double *centre, 
-                      double *radius, double *p1, int *status ){
-/*
-*  Name:
-*     CalcPars
-
-*  Purpose:
-*     Calculate the geometric parameters of the supplied Circle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     double *CalcPars( AstFrame *frm, AstPointSet *pset, double *centre,
-*                       double *radius, double *p1, int *status )
-
-*  Class Membership:
-*     Circle member function 
-
-*  Description:
-*     This function uses the supplied PointSet to calculate the geometric 
-*     parameters that describe the a crcle. These values are returned in 
-*     a newly allocated dynamic array.
-
-*  Parameters:
-*     frm
-*        Pointer to the Frame in which the circle is defined.
-*     pset
-*        Pointer to a PointSet. The first point should be the circle
-*        centre, and the second point should be a point on the circle 
-*        circumference.
-*     centre
-*        An array in which to return the axis values at the circle centre. 
-*        The length of this array should be no less than the number of
-*        axes in "frm".
-*     radius
-*        Pointer to a double in which to return the circle radius,
-*        expressed as a geodesic distance in the supplied Frame.
-*     p1
-*        An array in which to return the coordinates of a point on the
-*        circumference of the circle. The length of this array should be 
-*        no less than the number of axes in "frm". Can be NULL if the
-*        circumference position is not needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double **ptr;
-   double *circum;
-   int i;
-   int nc;       
- 
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get and the number of axes. */
-   nc = astGetNaxes( frm );
-
-/* Get pointers to the coordinate data in the supplied PointSet. */
-   ptr = astGetPoints( pset );
-
-/* If no p1 array was supplied, create a temporary work array to hold the
-   circumference position. */
-   if( !p1 ) {
-      circum = astMalloc( sizeof( double )*nc );
-   } else {
-      circum = p1;
-   }
-
-/* Check pointers can be used safely. */
-   if( ptr ) {
-
-/* Copy the two points in to the allocated memory. */
-      for( i = 0; i < nc; i++ ) {
-         centre[ i ] = ptr[ i ][ 0 ];
-         circum[ i ] = ptr[ i ][ 1 ];
-      }
-
-/* Return the geodesic distance between these two points as the radius. */
-      *radius = astDistance( frm, centre, circum );      
-   }
-
-/* Free any work array. */
-   if( !p1 ) circum = astFree( circum );
-}
-
-static void CirclePars( AstCircle *this, double *centre, double *radius,
-                        double *p1, int *status ){
-/*
-*++
-*  Name:
-c     astCirclePars
-f     AST_CIRCLEPARS
-
-*  Purpose:
-*     Returns the geometric parameters of an Circle.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "circle.h"
-c     void astCirclePars( AstCircle *this, double *centre, double *radius, 
-c                         double *p1 )
-f     CALL AST_CIRCLEPARS( THIS, CENTRE, RADIUS, P1, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-c     This function 
-f     This routine
-*     returns the geometric parameters describing the supplied Circle. 
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     centre
-f     CENTRE( * ) = DOUBLE PRECISION (Returned)
-c        Pointer to an array
-f        An array
-*        in which to return the coordinates of the Circle centre.
-*        The length of this array should be no less than the number of
-*        axes in the associated coordinate system.
-c     radius
-f     RADIUS = DOUBLE PRECISION (Returned)
-*        Returned holding the radius of the Circle, as an geodesic
-*        distance in the associated coordinate system.
-c     p1
-f     P1( * ) = DOUBLE PRECISION (Returned)
-c        Pointer to an array
-f        An array
-*        in which to return the coordinates of a point on the
-*        circumference of the Circle. The length of this array should be 
-*        no less than the number of axes in the associated coordinate system.
-c        A NULL pointer can be supplied if the circumference position is
-c        not needed.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes: 
-*     - If the coordinate system represented by the Circle has been
-*     changed since it was first created, the returned parameters refer 
-*     to the new (changed) coordinate system, rather than the original
-*     coordinate system. Note however that if the transformation from
-*     original to new coordinate system is non-linear, the shape
-*     represented by the supplied Circle object may not be an accurate
-*     circle.
-*--
-*/
-
-/* Local Variables: */
-   AstRegion *this_region;  /* Parent Region pointer */
-   AstFrame *frm;           /* Current Frame represented by the Circle */
-   AstPointSet *pset;       /* PointSet holding PointList axis values */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Store a pointer to the parent region structure. */
-   this_region = (AstRegion *) this;
-
-/* Transform the base Frame axis values into the current Frame. */
-   pset = astTransform( this_region->frameset, this_region->points, 1, NULL );
-
-/* Get the Circle frame. */
-   frm = astGetFrame( this_region->frameset, AST__CURRENT );
-
-/* Calculate the required parameters. */
-   CalcPars( frm, pset, centre, radius, p1, status );
-   
-/* Free resources */
-   frm = astAnnul( frm );
-   pset = astAnnul( pset );
-}
-
-static double *CircumPoint( AstFrame *frm, int nax, const double *centre, 
-                            double radius, int *status ){
-/*
-*  Name:
-*     CircumPoint
-
-*  Purpose:
-*     Find a point on the circumference of the circle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     double *CircumPoint( AstFrame *frm, int nax, const double *centre, 
-*                          double radius, int *status )
-
-*  Class Membership:
-*     Circle member function 
-
-*  Description:
-*     This function returns a dynamically allocated array containing the
-*     axis values at a point on the circumference of the circle specified
-*     by a given centre and radius. The returned point is the point at
-*     which the circle crosses the first axis.
-
-*  Parameters:
-*     frm
-*        Pointer to the Frame in which the circle is defined.
-*     nax
-*        The number of axes in the Frame.
-*     centre
-*        An array holding the axis values at the circle centre. 
-*     radius
-*        The circle radius, expressed as a geodesic distance in the 
-*        supplied Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a 1D array holding the axis values at the point where
-*     the circle crosses the first frame axis. The length of this array 
-*     will equal the number of axes in the supsplied Frame. It should be 
-*     freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
-   double *circum;
-   double *work;
-   int i;
- 
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Allocate the returned array. */
-   circum = astMalloc( sizeof( double)*(size_t) nax );
-
-/* Allocate work space */
-   work = astMalloc( sizeof( double)*(size_t) nax );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Find the coords of a point that is offset away from the centre
-   position along the first axis. We use the supplied radius value as a
-   convenient offset length, but the actual length used is not critical. */
-      for( i = 0; i < nax; i++ ) work[ i ] = centre[ i ];
-      work[ 0 ] = astAxOffset( frm, 1, work[ 0 ], radius );
-
-/* Offset away from the centre position, towards the position found
-   above, going the distance specified by the supplied radius. */
-      astOffset( frm, centre, work, radius, (double *) circum );
-   }
-
-/* Free resources. */
-   work = astFree( work );
-
-/* Return the result. */
-   return circum;
-}
-
-void astInitCircleVtab_(  AstCircleVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCircleVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Circle.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     void astInitCircleVtab( AstCircleVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Circle vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Circle class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsACircle) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->CirclePars = CirclePars;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_resetcache = region->ResetCache;
-   region->ResetCache = ResetCache;
-
-   region->RegPins = RegPins;
-   region->RegTrace = RegTrace;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegBaseBox = RegBaseBox;
-   region->RegCentre = RegCentre;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Circle", "Circular or spherical region" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Circle member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCircle *this;              /* Pointer to Circle structure */
-   AstFrame *frm;                /* Pointer to base Frame */
-   const char *class;            /* Pointer to class name */
-   int i;                        /* Axis index */
-   int nb;                       /* No. of axes in base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Circle structure */
-   this = (AstCircle *) this_region;
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* Get a pointer to the base Frame in the Region, and get the number of
-   axes. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-   nb = astGetNaxes( frm );
-
-/* If the Frame is a simple Frame, we can assume plane geometry. */
-   class = astGetClass( frm );
-   if( class && !strcmp( class, "Frame" ) ) {
-      for( i = 0; i < nb; i++ ) {
-         lbnd[ i ] = ( this->centre )[ i ] - this->radius;
-         ubnd[ i ] = ( this->centre )[ i ] + this->radius;
-      }
-
-/* If the Frame is not a simple Frame we cannot assume plane geometry. */
-   } else {
-
-/* The bounding box of the mesh returned by astRegBaseMesh is used as the
-   bounding box of the Circle. These bounds are cached in the Circle
-   structure by astRegBaseMesh. Ensure astRegBaseMesh has been invoked,
-   so that it is safe to use the cached bounding box. */
-      if( !this_region->basemesh ) (void) astAnnul( astRegBaseMesh( this ) );
-
-/* Store the bounding box. */
-      for( i = 0; i < nb; i++ ) {
-         lbnd[ i ] = this->lb[ i ];
-         ubnd[ i ] = this->ub[ i ];
-      }
-   }
-
-/* Free resources. */
-   frm = astAnnul( frm );
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Circle member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the accuracies which were
-*     supplied when the Region was created.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Constants: */
-#define NP_EDGE 50                /* No. of points for determining geodesic */
-
-/* Local Variables: */
-   AstBox *box;                   /* Bounding box for this Circle */
-   AstCircle *this;               /* The Circle structure */
-   AstRegion *reg;                /* Copy of supplied Circle */
-   AstFrame *frm;                 /* Base Frame in encapsulated FrameSet */
-   AstPointSet *result;           /* Returned pointer */
-   double **ptr;                  /* Pointers to data */
-   double *p1;                    /* Pointer to array holding a single point */
-   double *p2;                    /* Pointer to array holding a single point */
-   double angle;                  /* Angular position of point */
-   double delta;                  /* Angular separation of points */
-   double dist;                   /* Offset along an axis */
-   double lbx;                    /* Lower x bound of mesh bounding box */
-   double lby;                    /* Lower y bound of mesh bounding box */
-   double p[ 2 ];                 /* Position in 2D Frame */
-   double ubx;                    /* Upper x bound of mesh bounding box */
-   double uby;                    /* Upper y bound of mesh bounding box */
-   int i;                         /* Point index */
-   int j;                         /* Axis index */
-   int naxes;                     /* No. of axes in base Frame */
-   int np;                        /* No. of points in returned PointSet */
-
-/* Initialise */
-   result= NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this_region->basemesh ) {
-      result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Get a pointer to the Circle structure. */
-      this = (AstCircle *) this_region;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-      frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the number of axes in the base Frame */
-      naxes = astGetNaxes( frm );
-
-/* Get the requested number of points to put on the mesh. */
-      np = astGetMeshSize( this );
-
-/* Ensure cached information is available. */
-      Cache( (AstCircle *) this, status );
-
-/* First deal with 1-D "circles" (where we ignore MeshSize). */
-      if( naxes == 1 ) {
-
-/* The boundary of a 1-D circle consists of 2 points - the two extreme values. 
-   Create a PointSet to hold 2 1-D values, and store the extreme values. */
-         result = astPointSet( 2, 1, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-            ptr[ 0 ][ 0 ] = ( this->centre )[ 0 ] - this->radius;
-            ptr[ 0 ][ 1 ] = ( this->centre )[ 0 ] + this->radius;
-         }
-
-/* Store the bounding box in the Circle structure. */
-         this->lb[ 0 ] = ptr[ 0 ][ 0 ];
-         this->ub[ 0 ] = ptr[ 0 ][ 1 ];
-
-/* Now deal with 2-D circles. */
-      } else if( naxes == 2 ){
-
-/* Store the angular increment between points. */
-         delta = 2*AST__DPI/np;
-
-/* Create a suitable PointSet to hold the returned positions. */
-         result = astPointSet( np, 2, "", status );
-         ptr = astGetPoints( result );
-         if( astOK ) {
-
-/* Initialise the bounding box of the mesh points. */
-            lbx = DBL_MAX;
-            ubx = -DBL_MAX;
-            lby = DBL_MAX;
-            uby = -DBL_MAX;
-
-/* Loop round each point. */
-            angle = 0.0;
-            for( i = 0; i < np; i++ ) {
-
-/* Work out where the end of the radius vector at this angle is, and
-   store in the returned PointSet. */
-               astOffset2( frm, this->centre, angle, this->radius, p );
-               ptr[ 0 ][ i ] = p[ 0 ];
-               ptr[ 1 ][ i ] = p[ 1 ];
-
-/* Update the bounds of the mesh bounding box. The box is expressed in
-   terms of axis offsets from the centre, in order to avoid problems with
-   boxes that cross RA=0 or RA=12h */
-               if( p[ 0 ] != AST__BAD && p[ 1 ] != AST__BAD ){
-                  dist =  astAxDistance( frm, 1, this->centre[ 0 ], p[ 0 ] );
-                  if( dist < lbx ) {
-                     lbx = dist;
-                  } else if( dist > ubx ) {
-                     ubx = dist;
-                  }
-                  dist =  astAxDistance( frm, 2, this->centre[ 1 ], p[ 1 ] );
-                  if( dist < lby ) {
-                     lby = dist;
-                  } else if( dist > uby ) {
-                     uby = dist;
-                  }
-               }
-
-/* Increment the angular position of the next mesh point. */
-               angle += delta;
-            }
-
-/* Store the bounding box in the Circle structure. */
-            this->lb[ 0 ] = this->centre[ 0 ] + lbx;
-            this->lb[ 1 ] = this->centre[ 1 ] + lby;
-            this->ub[ 0 ] = this->centre[ 0 ] + ubx;
-            this->ub[ 1 ] = this->centre[ 1 ] + uby;
-         }
-
-/* Now deal with circles with more than 2 dimensions. Producing an evenly
-   spread mesh of points over a sphere is a complex task (see e.g.
-   http://www.eso.org/science/healpix/ ). This implementation does not
-   attempt to produce a genuinely even spread. Instead it simply uses the 
-   mesh for the bounding box of the sphere, and projects each point on to
-   the surface of the sphere. */
-      } else {
-
-/* Allocate memory to hold an approximation of the circle bounding box. */
-         p1 = astMalloc( sizeof( double )*(size_t) naxes );
-         p2 = astMalloc( sizeof( double )*(size_t) naxes );
-
-/* Get an approximation to the bounding box, and initialise the real 
-   bounding box of the mesh points. */
-         if( astOK ) {
-            memcpy( p1, this->centre, sizeof( double )*(size_t) naxes );
-            for( j = 0; j < naxes; j++ ) {
-               p1[ j ] += this->radius;
-               astOffset( frm, this->centre, p1, this->radius, p2 );
-               p1[ j ] = this->centre[ j ];
-               this->ub[ j ] = p2[ j ];
-            }
-         }
-
-/* Create a Box region which just encompasses the circle. */
-         box = astBox( frm, 0, this->centre, this->ub, NULL, "", status );
-
-/* Get a mesh covering this box. */
-         astSetMeshSize( box, np );
-         result = astRegBaseMesh( box );
-         ptr = astGetPoints( result );
-         np = astGetNpoint( result  );
-
-/* Allocate memory for a single point */
-         if( astOK ) {
-
-/* Initialise the real bounding box of the mesh points. */
-            for( j = 0; j < naxes; j++ ) {
-               this->lb[ j ] = DBL_MAX;
-               this->ub[ j ] = -DBL_MAX;
-            }
-
-/* Move each point in this mesh radially so that its distance from the centre
-   equals the radius of this Circle. */
-            for( i = 0; i < np; i++ ) {
-               for( j = 0; j < naxes; j++ ) p1[ j ] = ptr[ j ][ i ];
-               astOffset( frm, this->centre, p1, this->radius, p2 );
-
-               for( j = 0; j < naxes; j++ ) {
-                  ptr[ j ][ i ] = p2[ j ];
-
-/* Update the bounds of the mesh bounding box. */
-                  if( p2[ j ] != AST__BAD ){
-                     if( p2[ j ] < this->lb[ j ] ) {
-                        this->lb[ j ] = p2[ j ];
-                     } else if( p2[ j ] > this->ub[ j ] ) {
-                        this->ub[ j ] = p2[ j ];
-                     }
-                  }
-               }
-            }    
-         }
-
-/* Same the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-         if( astOK && result ) this_region->basemesh = astClone( result );
-
-/* Free resources. */
-         p1 = astFree( p1 );
-         p2 = astFree( p2 );
-         box = astAnnul( box );
-      }
-
-/* Extend the bounding box if it contains any singularies. The astNormBox 
-   requires a Mapping which can be used to test points in the base Frame. 
-   Create a copy of the Circle and then set its FrameSet so that the current 
-   Frame in the copy is the same as the base Frame in the original. */
-      reg = astCopy( this );
-      astSetRegFS( reg, frm );
-      astSetNegated( reg, 0 );
-
-/* Normalise this box. */
-      astNormBox( frm, this->lb, this->ub, reg );
-
-/* Free resources. */
-      reg = astAnnul( reg );
-      frm = astAnnul( frm );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr, 
-                          int index, int ifrm, int *status ){
-/*
-*  Name:
-*     RegCentre
-
-*  Purpose:
-*     Re-centre a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     double *RegCentre( AstRegion *this, double *cen, double **ptr, 
-*                        int index, int ifrm, int *status )
-
-*  Class Membership:
-*     Circle member function (over-rides the astRegCentre protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function shifts the centre of the supplied Region to a
-*     specified position, or returns the current centre of the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     cen
-*        Pointer to an array of axis values, giving the new centre.
-*        Supply a NULL value for this in order to use "ptr" and "index" to 
-*        specify the new centre.
-*     ptr
-*        Pointer to an array of pointers, one for each axis in the Region.
-*        Each pointer locates an array of axis values. This is the format
-*        returned by the PointSet method astGetPoints. Only used if "cen"
-*        is NULL.
-*     index
-*        The index of the point within the arrays identified by "ptr" at
-*        which is stored the coords for the new centre position. Only used 
-*        if "cen" is NULL.
-*     ifrm
-*        Should be AST__BASE or AST__CURRENT. Indicates whether the centre 
-*        position is supplied and returned in the base or current Frame of 
-*        the FrameSet encapsulated within "this".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If both "cen" and "ptr" are NULL then a pointer to a newly
-*     allocated dynamic array is returned which contains the centre
-*     coords of the Region. This array should be freed using astFree when
-*     no longer needed. If either of "ptr" or "cen" is not NULL, then a
-*     NULL pointer is returned.
-
-*  Notes:
-*    - Some Region sub-classes do not have a centre. Such classes will report 
-*    an AST__INTER error code if this method is called.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;      /* Pointer to base Frame */
-   AstCircle *this;    /* Pointer to Circle structure */
-   double **rptr;      /* Data pointers for Region PointSet */
-   double *bc;         /* Base Frame centre position */
-   double *circum;     /* Base frame circumference position */
-   double *result;     /* Returned pointer */
-   double *tmp;        /* Temporary array pointer */
-   double axval;       /* Axis value */
-   int ic;             /* Coordinate index */
-   int ncb;            /* Number of base frame coordinate values per point */
-   int ncc;            /* Number of current frame coordinate values per point */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Circle structure. */
-   this = (AstCircle *) this_region;
-
-/* Get the number of axis values per point in the base and current Frames. */
-   ncb = astGetNin( this_region->frameset );
-   ncc = astGetNout( this_region->frameset );
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* If the centre coords are to be returned, return either a copy of the 
-   base Frame centre coords, or transform the base Frame centre coords
-   into the current Frame. */
-   if( !ptr && !cen ) {
-      if( ifrm == AST__CURRENT ) {
-         result = astRegTranPoint( this_region, this->centre, 1, 1 );
-      } else {
-         result = astStore( NULL, this->centre, sizeof( double )*ncb );
-      }
-
-/* Otherwise, we store the supplied new centre coords and return a NULL 
-   pointer. */
-   } else {
-
-/* Get a pointer to the base Frame in the Region's FrameSet. */
-      frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get a pointer to the axis values stored in the Region structure. */
-      rptr = astGetPoints( this_region->points );
-
-/* Check pointers can be used safely */
-      if( astOK ) {
-
-/* If the centre position was supplied in the current Frame, find the 
-   corresponding base Frame position... */
-         if( ifrm == AST__CURRENT ) {
-            if( cen ) {
-               bc = astRegTranPoint( this_region, cen, 1, 0 );
-            } else {
-               tmp = astMalloc( sizeof( double)*(size_t)ncc );
-               if( astOK ) {
-                  for( ic = 0; ic < ncc; ic++ ) tmp[ ic ] = ptr[ ic ][ index ];
-               }
-               bc = astRegTranPoint( this_region, tmp, 1, 0 );
-               tmp = astFree( tmp );
-            }
-
-/* Replace any bad centre values with their current values. */
-            for( ic = 0; ic < ncb; ic++ ) {
-               if( bc[ ic ] ==  AST__BAD ) bc[ ic ] = this->centre[ ic ];
-            }
-
-/* ... and change the coords in the parent Region structure and the cached 
-   coords in the Circle structure. */
-            circum = CircumPoint( frm, ncb, bc, this->radius, status );
-            if( circum ) {
-               for( ic = 0; ic < ncb; ic++ ) {
-                  rptr[ ic ][ 0 ] = bc[ ic ];
-                  rptr[ ic ][ 1 ] = circum[ ic ];
-                  this->centre[ ic ] = bc[ ic ];
-               }
-            }
-
-/* Free resources */
-            circum = astFree( circum );
-            bc = astFree( bc );
-
-/* If the centre position was supplied in the base Frame, use the
-   supplied "cen" or "ptr" pointer directly to change the coords in the 
-   parent Region structure and the cached coords in the Circle structure. */
-         } else {
-            for( ic = 0; ic < ncb; ic++ ) {
-               axval = cen ? cen[ ic ] : ptr[ ic ][ index ];
-               if( axval != AST__BAD ) this->centre[ ic ] = axval;
-            }
-
-            circum = CircumPoint( frm, ncb, this->centre, this->radius, 
-                                  status );
-            if( circum ) {
-               for( ic = 0; ic < ncb; ic++ ) {
-                  rptr[ ic ][ 0 ] = this->centre[ ic ];
-                  rptr[ ic ][ 1 ] = circum[ ic ];
-               }
-               circum = astFree( circum );
-            }
-         }
-      }
-
-/* Free resources */
-      frm = astAnnul( frm );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Circle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status ){
-
-*  Class Membership:
-*     Circle member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Circle. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Circle "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Circle.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstCircle *large_circle;     /* Circle slightly larger than "this" */
-   AstCircle *small_circle;     /* Circle slightly smaller than "this" */
-   AstCircle *this;             /* Pointer to the Circle structure. */
-   AstFrame *frm;               /* Base Frame in supplied Circle */
-   AstPointSet *ps1;            /* Points masked by larger Circle */
-   AstPointSet *ps2;            /* Points masked by larger and smaller Circlees */
-   AstRegion *tunc;             /* Uncertainity Region from "this" */
-   double **ptr;                /* Pointer to axis values in "ps2" */
-   double *lbnd_tunc;           /* Lower bounds of "this" uncertainty Region */ 
-   double *lbnd_unc;            /* Lower bounds of supplied uncertainty Region */ 
-   double *p;                   /* Pointer to next axis value */
-   double *ubnd_tunc;           /* Upper bounds of "this" uncertainty Region */ 
-   double *ubnd_unc;            /* Upper bounds of supplied uncertainty Region */ 
-   double drad;                 /* Radius increment corresponding to border width */
-   double l1;                   /* Length of bounding box diagonal */
-   double l2;                   /* Length of bounding box diagonal */
-   double rad;                  /* Radius of Circle */
-   int i;                       /* Axis index */
-   int j;                       /* Point index */
-   int nc;                      /* No. of axes in Circle base frame */
-   int np;                      /* No. of supplied points */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Circle structure. */
-   this = (AstCircle *) this_region;
-
-/* Get the number of base Frame axes in the Circle, and check the supplied 
-   PointSet has the same number of axis values per point. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-   nc = astGetNaxes( frm );
-   if( astGetNcoord( pset ) != nc && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
-                "values per point (%d) in the supplied PointSet - should be "
-                "%d (internal AST programming error).", status, astGetClass( this ),
-                astGetNcoord( pset ), nc );
-   }
-
-/* Get the number of axes in the uncertainty Region and check it is the 
-   same as above. */
-   if( unc && astGetNaxes( unc ) != nc && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
-                "in the supplied uncertainty Region - should be "
-                "%d (internal AST programming error).", status, astGetClass( this ),
-                astGetNaxes( unc ), nc );
-   }
-
-/* We now find the maximum distance on each axis that a point can be from the 
-   boundary of the Circle for it still to be considered to be on the boundary. 
-   First get the Region which defines the uncertainty within the Circle being
-   checked (in its base Frame), and get its bounding box. */
-   tunc = astGetUncFrm( this, AST__BASE );      
-
-   lbnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
-   ubnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
-   astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc ); 
-
-/* Find the geodesic length withi the base Frame of "this" of the diagonal of 
-   the bounding box. */
-   l1 = astDistance( frm, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
-   and get its bounding box. */
-   if( unc ) {
-      lbnd_unc = astMalloc( sizeof( double )*(size_t) nc );
-      ubnd_unc = astMalloc( sizeof( double )*(size_t) nc );
-      astGetRegionBounds( unc, lbnd_unc, ubnd_unc ); 
-
-/* Find the geodesic length of the diagonal of this bounding box. */
-      l2 = astDistance( frm, lbnd_unc, ubnd_unc );
-
-/* Use a zero sized box "unc" if no box was supplied. */      
-   } else {
-      lbnd_unc = NULL;
-      ubnd_unc = NULL;
-      l2 = 0.0;
-   }
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* The required border width is half of the total diagonal of the two bounding 
-   boxes. */   
-   if( astOK ) {
-      drad = 0.5*( l1 + l2 );
-
-/* Create two new Circle, one of which is larger than "this" by the amount
-   found above, and the other of which is smaller than "this" by the amount
-   found above. */
-      rad = this->radius + 0.5*drad;
-      large_circle = astCircle( frm, 1, this->centre, &rad, NULL, "", status );
-      rad = this->radius - 0.5*drad;
-      small_circle = astCircle( frm, 1, this->centre, &rad, NULL, "", status );
-
-/* Negate the smaller region.*/
-      astNegate( small_circle );
-
-/* Points are on the boundary of "this" if they are inside both the large
-   Circle and the negated small Circle. First transform the supplied PointSet
-   using the large Circle, then transform them using the negated smaller
-   Circle. */
-      ps1 = astTransform( large_circle, pset, 1, NULL );
-      ps2 = astTransform( small_circle, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
-   values per axis. */
-      ptr = astGetPoints( ps2 );
-      np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
-      if( mask ) {
-         *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
-         if( astOK ) {
-   
-/* Initialise the mask elements on the basis of the first axis values */
-            result = 1;
-            p = ptr[ 0 ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  (*mask)[ j ] = 0;
-               } else {
-                  (*mask)[ j ] = 1;
-               }
-            }
-
-/* Now check for bad values on other axes. */
-            for( i = 1; i < nc; i++ ) {
-               p = ptr[ i ];
-               for( j = 0; j < np; j++ ) {
-                  if( *(p++) == AST__BAD ) {
-                     result = 0;
-                     (*mask)[ j ] = 0;
-                  }
-               }
-            }
-         }
-
-/* If no output mask is to be made, we can break out of the check as soon
-   as the first bad value is found. */
-      } else if( astOK ) {
-         result = 1;
-         for( i = 0; i < nc && result; i++ ) {
-            p = ptr[ i ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-      }
-
-/* Free resources. */
-      large_circle = astAnnul( large_circle );
-      small_circle = astAnnul( small_circle );
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-   }
-
-   tunc = astAnnul( tunc );
-   frm = astAnnul( frm );
-   lbnd_tunc = astFree( lbnd_tunc );
-   ubnd_tunc = astFree( ubnd_tunc );
-   if( unc ) lbnd_unc = astFree( lbnd_unc );
-   if( unc ) ubnd_unc = astFree( ubnd_unc );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr, 
-                     int *status ){
-/*
-*+
-*  Name:
-*     RegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     Circle member function (overrides the astTraceRegion method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astTraceRegion method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
-   AstCircle *this;
-   AstFrame *frm;
-   AstMapping *map;
-   AstPointSet *bpset;
-   AstPointSet *cpset;
-   double **bptr;
-   double angle;
-   double p[ 2 ];
-   int i;
-   int ncur;
-   int result;         
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( ! astOK ) return result;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Check it is 2-dimensional. */
-   if( astGetNaxes( frm ) == 2 ) result = 1;
-
-/* Check we have some points to find. */
-   if( result && n > 0 ) {
-
-/* Get a pointer to the Circle structure. */
-      this = (AstCircle *) this_region;
-
-/* Ensure cached information is available. */
-      Cache( this, status );
-
-/* We first determine the required positions in the base Frame of the
-   Region, and then transform them into the current Frame. Get the 
-   base->current Mapping, and the number of current Frame axes. */
-      map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
-   base Frame positions directly into the supplied arrays. */
-      if( astIsAUnitMap( map ) ) {
-         bpset = NULL;
-         bptr = ptr;
-         ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions. */
-      } else {
-         bpset = astPointSet( n, 2, " ", status );
-         bptr = astGetPoints( bpset );
-         ncur = astGetNout( map );
-      }
-
-/* Check the pointers can be used safely. */
-      if( astOK ) {
-
-/* Loop round each point. Get the angle around the circle, and offset
-   along that angle to find the point that is one radius away from the
-   centre. Copy the results into the required arrays. */
-         for( i = 0; i < n; i++ ) {
-            angle = dist[ i ]*2*AST__DPI;
-            astOffset2( frm, this->centre, angle, this->radius, p );
-            bptr[ 0 ][ i ] = p[ 0 ];
-            bptr[ 1 ][ i ] = p[ 1 ];
-         }
-
-      }
-
-/* If required, transform the base frame positions into the current
-   Frame, storing them in the supplied array. Then free resources. */
-      if( bpset ) {
-         cpset = astPointSet( n, ncur, " ", status );
-         astSetPoints( cpset, ptr );
-   
-         (void) astTransform( map, bpset, 1, cpset );
-   
-         cpset = astAnnul( cpset );
-         bpset = astAnnul( bpset );
-      }
-
-/* Free remaining resources. */
-      map = astAnnul( map );
-   }
-   frm = astAnnul( frm );
-
-/* Return the result. */
-   return result;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     void ResetCache( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Region member function (overrides the astResetCache method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   if( this ) {
-      ( (AstCircle *) this )->stale = 1;
-      (*parent_resetcache)( this, status );
-   }
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Circle method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* Re-calculate cached information. */
-   astResetCache( this_region );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Circle method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;           /* Base -> current Mapping */
-   AstMapping *result;        /* Result pointer to return */
-   AstPointSet *mesh;         /* Mesh of current Frame positions */
-   AstPointSet *ps2;          /* Circle PointSet in current Frame */
-   AstRegion *new;            /* Pointer to simplified Region */
-   AstRegion *newreg;         /* Equivalent circle or ellipse */
-   AstRegion *this;           /* Pointer to supplied Region structure */
-   AstRegion *unc;            /* Pointer to uncertainty Region */
-   double **ptr2;             /* Pointer axis values in "ps2" */
-   double *cen;               /* Pointer to array holding new centre coords */
-   int ic;                    /* Axis index */
-   int nc;                    /* No. of axis values per point */
-   int ok;                    /* Was the new centre found OK? */
-   int simpler;               /* Has some simplication taken place? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-   new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-   simpler = ( new != this );
-
-/* If the Mapping from base to current Frame is not a UnitMap, we attempt
-   to simplify the Circle by re-defining it within its current Frame.
-   Transforming the Circle from its base to its current Frame may result in
-   the region no longer being a circle. We test this by transforming a set of
-   bounds on the Circle boundary. */
-   map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-   if( !astIsAUnitMap( map ) ){
-
-/* Get a mesh of points covering the Circle in its current Frame. */
-      mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty within the Circle in
-   its current Frame. */
-      unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Transform the PointSet holding the circle centre into the current
-   Frame, and copy the axis values into a new array. */
-      ps2 = astRegTransform( this, this->points, 1, NULL, NULL );
-      nc = astGetNcoord( ps2 );
-      cen = astMalloc( sizeof( double )*(size_t) nc );
-      ptr2 = astGetPoints( ps2 );
-      if( astOK ) {
-
-         ok = 1;
-         for( ic = 0; ic < nc; ic++ ) {
-            cen[ ic ] = ptr2[ ic ][ 0 ];
-            if( cen[ ic ] == AST__BAD ) ok = 0;
-         }
-
-/* Find the best fitting Circle (defined in the current Frame) through these 
-   points */
-         newreg = ok ? astBestCircle( mesh, cen, unc ) : NULL;
-
-/* See if all points within this mesh fall on the boundary of the best
-   fitting Circle, to within the uncertainty of the Region. */
-         if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Circle in place of the original. */
-            (void) astAnnul( new );
-            new = astClone( newreg );
-
-/* Otherwise, if the region is 2-d we see if an Ellipse can represent the 
-   mesh. */
-         } else if( ok && nc == 2 ){
-
-/* Find the best fitting Ellipse (defined in the current Frame) through these 
-   points */
-            if( newreg ) (void) astAnnul( newreg );
-            newreg = astBestEllipse( mesh, cen, unc );
- 
-/* See if all points within this mesh fall on the boundary of the best
-   fitting Ellipse, to within the uncertainty of the Region. */
-            if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Ellipse in place of the original. */
-               (void) astAnnul( new );
-               new = astClone( newreg );
-               simpler = 1;
-            }
-         }
-
-/* Free resources. */
-         if( newreg ) newreg = astAnnul( newreg );
-      }
-
-      ps2 = astAnnul( ps2 );
-      cen = astFree( cen );
-      mesh = astAnnul( mesh );
-      unc = astAnnul( unc );
-   }
-   map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-   if( simpler ){
-      astRegOverlay( new, this, 1 );
-      result = (AstMapping *) new;
-
-   } else {
-      new = astAnnul( new );
-      result = astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Circle to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Circle member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a Circle and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the Circle.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the Circle.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstCircle *this;            /* Pointer to Circle */
-   AstFrame *frm;                /* Pointer to base Frame in FrameSet */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double **ptr_tmp;             /* Pointer to base Frame coordinate data */
-   double *work;                 /* Pointer to array holding single base point */
-   double d;                     /* Base-Frame distance from centre to point */
-   int closed;                   /* Is the boundary part of the Region? */
-   int coord;                    /* Zero-based index for coordinates */
-   int inside;                   /* Is the point inside the Region? */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int ncoord_tmp;               /* No. of coordinates per base Frame point */
-   int neg;                      /* Has the Region been negated? */
-   int npoint;                   /* No. of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Circle structure. */
-   this = (AstCircle *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
-   from the current Frame in the encapsulated FrameSet (the Frame
-   represented by the Region), to the base Frame (the Frame in which the
-   Region is defined). This call also returns a pointer to the base Frame
-   of the encapsulated FrameSet. Note, the returned pointer may be a
-   clone of the "in" pointer, and so we must be carefull not to modify the
-   contents of the returned PointSet. */
-   pset_tmp = astRegTransform( this, in, 0, NULL, &frm );
-
-/* Determine the numbers of points and coordinates per point from the base
-   Frame PointSet and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-   npoint = astGetNpoint( pset_tmp );
-   ncoord_tmp = astGetNcoord( pset_tmp );
-   ptr_tmp = astGetPoints( pset_tmp );      
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* Get work space for one base Frame position */
-   work = astMalloc( sizeof( double )*(size_t) ncoord_tmp );
-
-/* See if the boundary is part of the Region. */
-   closed = astGetClosed( this );
-
-/* See if the Region has been negated. */
-   neg = astGetNegated( this );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* Ensure cached information is available. */
-      Cache( this, status );
-
-/* Loop round each point */
-      for ( point = 0; point < npoint; point++ ) {
-
-/* Copy the base Frame position into a work array. */
-         for ( coord = 0; coord < ncoord_tmp; coord++ ) {    
-            work[ coord ] = ptr_tmp[ coord ][ point ];
-         }
-
-/* Find the geodesic distance from the centre of the Circle in the base 
-   Frame. */
-         d = astDistance( frm, this->centre, work );  
-
-/* Now consider whether this radius value puts the point in or out of the
-   Circle. */
-         if( d != AST__BAD ){
-            if( neg ) {
-               if( closed ) {
-                  inside = ( d >= this->radius );
-               } else {
-                  inside = ( d > this->radius );
-               }
-            } else {
-               if( closed ) {
-                  inside = ( d <= this->radius );
-               } else {
-                  inside = ( d < this->radius );
-               }
-            }
-         } else {
-            inside = 0;
-         }
-
-/* If the point is outside, store bad output values. */
-         if( !inside ) {
-            for ( coord = 0; coord < ncoord_out; coord++ ) {
-               ptr_out[ coord ][ point ] = AST__BAD;
-            }
-         }
-      } 
-   }
-
-/* Free resources */
-   work = astFree( work );
-   pset_tmp = astAnnul( pset_tmp );
-   frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Region objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Region objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstCircle *in;             /* Pointer to input Circle */
-   AstCircle *out;            /* Pointer to output Circle */
-   int nax;                   /* Number of base Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Circles. */
-   in = (AstCircle *) objin;
-   out = (AstCircle *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Circle. */
-   out->centre = NULL;
-   out->lb = NULL;
-   out->ub = NULL;
-
-/* Copy dynamic memory contents */
-   nax = astGetNin( ((AstRegion *) in)->frameset );
-   out->centre = astStore( NULL, in->centre, 
-                           sizeof( double )*(size_t)nax );
-   out->lb = astStore( NULL, in->lb, sizeof( double )*(size_t)nax );
-   out->ub = astStore( NULL, in->ub, sizeof( double )*(size_t)nax );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Circle objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Circle objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstCircle *this;                 /* Pointer to Circle */
-
-/* Obtain a pointer to the Circle structure. */
-   this = (AstCircle *) obj;
-
-/* Annul all resources. */
-   this->centre = astFree( this->centre );
-   this->lb = astFree( this->lb );
-   this->ub = astFree( this->ub );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Circle objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Circle class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Circle whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstCircle *this;                 /* Pointer to the Circle structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Circle structure. */
-   this = (AstCircle *) this_object;
-
-/* Write out values representing the instance variables for the
-   Circle class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACircle and astCheckCircle functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Circle,Region)
-astMAKE_CHECK(Circle)
-
-AstCircle *astCircle_( void *frame_void, int form, const double centre[], 
-                       const double point[], AstRegion *unc, 
-                       const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astCircle
-f     AST_CIRCLE
-
-*  Purpose:
-*     Create a Circle.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "circle.h"
-c     AstCircle *astCircle( AstFrame *frame, int form, const double centre[], 
-c                           const double point[], AstRegion *unc, 
-c                           const char *options, ... )
-f     RESULT = AST_CIRCLE( FRAME, FORM, CENTRE, POINT, UNC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Circle constructor.
-
-*  Description:
-*     This function creates a new Circle and optionally initialises its
-*     attributes.
-*
-*     A Circle is a Region which represents a circle or sphere within the
-*     supplied Frame.
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. A deep
-*        copy is taken of the supplied Frame. This means that any
-*        subsequent changes made to the Frame using the supplied pointer
-*        will have no effect the Region.
-c     form
-f     FORM = INTEGER (Given)
-*        Indicates how the circle is described by the remaining parameters.
-*        A value of zero indicates that the circle is specified by a
-*        centre position and a position on the circumference. A value of one 
-*        indicates that the circle is specified by a centre position and a 
-*        scalar radius.
-c     centre
-f     CENTRE( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates at the centre of
-*        the circle or sphere.
-c     point
-f     POINT( * ) = DOUBLE PRECISION (Given)
-c        If "form" 
-f        If FORM
-*        is zero, then this array should have one element for each Frame
-*        axis (Naxes attribute), and should be supplied holding the 
-*        coordinates at a point on the circumference of the circle or sphere. 
-c        If "form" 
-f        If FORM
-*        is one, then this array should have one element only which should 
-*        be supplied holding the scalar radius of the circle or sphere,
-*        as a geodesic distance within the Frame.
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with the boundary of the Circle being created. 
-*        The uncertainty in any point on the boundary of the Circle is found by 
-*        shifting the supplied "uncertainty" Region so that it is centred at 
-*        the boundary point being considered. The area covered by the
-*        shifted uncertainty Region then represents the uncertainty in the
-*        boundary position. The uncertainty is assumed to be the same for
-*        all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Circle. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the Circle being created.
-*
-*        The uncertainty Region has two uses: 1) when the 
-c        astOverlap
-f        AST_OVERLAP 
-*        function compares two Regions for equality the uncertainty
-*        Region is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using 
-c        astSimplify),
-f        AST_SIMPLIFY),
-*        the uncertainties are used to determine if the transformed boundary 
-*        can be accurately represented by a specific shape of Region.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Circle. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Circle. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astCircle()
-f     AST_CIRCLE = INTEGER
-*        A pointer to the new Circle.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstCircle *new;               /* Pointer to new Circle */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the Circle, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitCircle( NULL, sizeof( AstCircle ), !class_init, &class_vtab,
-                     "Circle", frame, form, centre, point, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Circle's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Circle. */
-   return new;
-}
-
-AstCircle *astCircleId_( void *frame_void, int form, const double centre[], 
-                         const double point[], void *unc_void,
-                         const char *options, ... ) {
-/*
-*  Name:
-*     astCircleId_
-
-*  Purpose:
-*     Create a Circle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstCircle *astCircleId_( AstFrame *frame, int form, const double centre[], 
-*                              const double point[], AstRegion *unc,
-*                              const char *options, ... )
-
-*  Class Membership:
-*     Circle constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astCircle constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astCircle_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astCircle_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astCircle_.
-
-*  Returned Value:
-*     The ID value associated with the new Circle.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstCircle *new;               /* Pointer to new Circle */
-   AstRegion *unc;               /* Pointer to Region structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Circle, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitCircle( NULL, sizeof( AstCircle ), !class_init, &class_vtab,
-                        "Circle", frame, form, centre, point, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Circle's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Circle. */
-   return astMakeId( new );
-}
-
-AstCircle *astInitCircle_( void *mem, size_t size, int init, AstCircleVtab *vtab, 
-                           const char *name, AstFrame *frame, int form,
-                           const double centre[], const double point[],
-                           AstRegion *unc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCircle
-
-*  Purpose:
-*     Initialise a Circle.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstCircle *astInitCircle_( void *mem, size_t size, int init, AstCircleVtab *vtab, 
-*                                const char *name, AstFrame *frame, int form,
-*                                const double centre[], const double point[],
-*                                AstRegion *unc )
-
-*  Class Membership:
-*     Circle initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Circle object. It allocates memory (if necessary) to accommodate
-*     the Circle plus any additional data associated with the derived class.
-*     It then initialises a Circle structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Circle at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Circle is to be initialised.
-*        This must be of sufficient size to accommodate the Circle data
-*        (sizeof(Circle)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Circle (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Circle
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Circle's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Circle.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     form
-*        Indicates how the "point" parameter should be interpreted.
-*        Should be either 0 or 1.
-*     centre
-*        An array of double, with one element for each Frame axis (Naxes 
-*        attribute) containing the coordinates of the circle centre.
-*     point
-*        If "form" is zero, this should be an array of double, with one 
-*        element for each Frame axis (Naxes attribute) containing the 
-*        coordinates at any point on the circumference. If "form" is one, 
-*        this should be the address of a double containing the scalar
-*        radius of the circle or sphere.
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points on the boundary of the new Circle
-*        being initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal to 
-*        1.0E-6 of the dimensions of the new Circle's bounding box are used. 
-*        If an uncertainty Region is supplied, it must be either a Box, a 
-*        Circle or an Ellipse, and its encapsulated Frame must be related
-*        to the Frame supplied for parameter "frame" (i.e. astConvert
-*        should be able to find a Mapping between them). Two positions 
-*        the "frame" Frame are considered to be co-incident if their 
-*        uncertainty Regions overlap. The centre of the supplied
-*        uncertainty Region is immaterial since it will be re-centred on the 
-*        point being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new Circle.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstCircle *new;           /* Pointer to new Circle */
-   AstPointSet *pset;        /* PointSet to pass to Region initialiser */
-   const double *circum;     /* Pointer to circumference position */
-   double **ptr;             /* Pointer to coords data in pset */
-   int i;                    /* Axis index */
-   int nc;                   /* No. of axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitCircleVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the supplied value for "form" is legal. */
-   if( form != 0 && form != 1 && astOK ) {
-      astError( AST__BADIN, "astInitCircle(%s): The value supplied for "
-                "parameter \"form\" (%d) is illegal - it should be 0 or 1 "
-                "(programming error).", status, name, form );
-   }
-
-/* Get the number of axis values required for each position. */
-   nc = astGetNaxes( frame );
-
-/* If the circle radius has been supplied, find a point on the circle
-   circumference. */
-   if( form == 1 ) {
-      circum = CircumPoint( frame, nc, centre, *point, status );
-
-/* Otherwise, use the supplied circumference point. */
-   } else {
-      circum = point;
-   }
-
-/* Create a PointSet to hold the centre position, and a point on the
-   circumference, and get points to the data arrays. */
-   pset = astPointSet( 2, nc, "", status );
-   ptr = astGetPoints( pset );
-
-/* Copy the centre and circumference coordinates into the PointSet, checking 
-   that no bad values have been supplied. */
-   for( i = 0; astOK && i < nc; i++ ) {
-      if( centre[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitCircle(%s): The value of axis %d is "
-                   "undefined at the circle centre.", status, name, i + 1 );
-      } 
-      if( astOK && circum[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitCircle(%s): The value of axis %d is "
-                   "undefined on the circumference of the circle.", status, name, i + 1 );
-      }
-      ptr[ i ][ 0 ] = centre[ i ];
-      ptr[ i ][ 1 ] = circum[ i ];
-   }
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the Circle structure, allocating memory if necessary. */
-      new = (AstCircle *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                         name, frame, pset, unc );
-
-      if ( astOK ) {
-
-/* Initialise the Circle data. */
-/* ------------------------ */
-         new->stale = 1;
-         new->centre = NULL;
-         new->lb = NULL;
-         new->ub = NULL;
-         Cache( new, status );
-
-/* If an error occurred, clean up by deleting the new Circle. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free resources. */
-   pset = astAnnul( pset );
-   if( form == 1 ) circum = astFree( (void *) circum );
-
-/* Return a pointer to the new Circle. */
-   return new;
-}
-
-AstCircle *astLoadCircle_( void *mem, size_t size, AstCircleVtab *vtab, 
-                           const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadCircle
-
-*  Purpose:
-*     Load a Circle.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstCircle *astLoadCircle( void *mem, size_t size, AstCircleVtab *vtab, 
-*                               const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Circle loader.
-
-*  Description:
-*     This function is provided to load a new Circle using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Circle structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Circle at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Circle is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Circle data (sizeof(Circle)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Circle (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Circle structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstCircle) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Circle. If this is NULL, a pointer
-*        to the (static) virtual function table for the Circle class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Circle" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Circle.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCircle *new;              /* Pointer to the new Circle */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Circle. In this case the
-   Circle belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstCircle );
-      vtab = &class_vtab;
-      name = "Circle";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitCircleVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Circle. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Circle" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* Cache intermediate results in the Circle structure */
-      new->centre = NULL;
-      new->lb = NULL;
-      new->ub = NULL;
-      new->stale = 1;
-      Cache( new, status );
-
-/* If an error occurred, clean up by deleting the new Circle. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Circle pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-void astCirclePars_( AstCircle *this, double *centre, double *radius,
-                     double *p1, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Circle,CirclePars))( this, centre, radius,
-                                          p1, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/circle.h b/ast-5.3-1/circle.h
deleted file mode 100644
index badc8a5..0000000
--- a/ast-5.3-1/circle.h
+++ /dev/null
@@ -1,241 +0,0 @@
-#if !defined( CIRCLE_INCLUDED ) /* Include this file only once */
-#define CIRCLE_INCLUDED
-/*
-*+
-*  Name:
-*     circle.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Circle class.
-
-*  Invocation:
-*     #include "circle.h"
-
-*  Description:
-*     This include file defines the interface to the Circle class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Circle class implement a Region which represents a simple interval
-*     on each axis of the encapsulated Frame
-
-*  Inheritance:
-*     The Circle class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     31-AUG-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Circle structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstCircle {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *centre;               /* Circle centre coords */
-   double radius;                /* Circle radius */
-   double *lb;                   /* Lower limits of mesh bounding box */
-   double *ub;                   /* Upper limit of mesh bounding box */
-   int stale;                    /* Is Cached information stale? */
-
-} AstCircle;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstCircleVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* CirclePars)( AstCircle *, double *, double *, double *, int * );
-} AstCircleVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstCircleGlobals {
-   AstCircleVtab Class_Vtab;
-   int Class_Init;
-} AstCircleGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitCircleGlobals_( AstCircleGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Circle)          /* Check class membership */
-astPROTO_ISA(Circle)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstCircle *astCircle_( void *, int, const double[], const double[], AstRegion *, const char *, int *, ...);
-#else
-AstCircle *astCircleId_( void *, int, const double[], const double[], 
-                         AstRegion *, const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstCircle *astInitCircle_( void *, size_t, int, AstCircleVtab *,
-                           const char *, AstFrame *, int, const double[],
-                           const double[], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitCircleVtab_( AstCircleVtab *, const char *, int * );
-
-/* Loader. */
-AstCircle *astLoadCircle_( void *, size_t, AstCircleVtab *,
-                           const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astCirclePars_( AstCircle *, double *, double *, double *, int * );
-
-# if defined(astCLASS)           /* Protected */
-AstRegion *astBestCircle_( AstPointSet *, double *, AstRegion *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckCircle(this) astINVOKE_CHECK(Circle,this,0)
-#define astVerifyCircle(this) astINVOKE_CHECK(Circle,this,1)
-
-/* Test class membership. */
-#define astIsACircle(this) astINVOKE_ISA(Circle,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astCircle astINVOKE(F,astCircle_)
-#else
-#define astCircle astINVOKE(F,astCircleId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitCircle(mem,size,init,vtab,name,frame,form,p1,p2,unc) \
-astINVOKE(O,astInitCircle_(mem,size,init,vtab,name,frame,form,p1,p2,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCircleVtab(vtab,name) astINVOKE(V,astInitCircleVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCircle(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCircle_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCircle to validate Circle pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astCirclePars(this,centre,radius,p1) \
-astINVOKE(V,astCirclePars_(astCheckCircle(this),centre,radius,p1,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astBestCircle(pset,cen,unc) astBestCircle_(pset,cen,unc,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/cmpframe.c b/ast-5.3-1/cmpframe.c
deleted file mode 100644
index a31fe35..0000000
--- a/ast-5.3-1/cmpframe.c
+++ /dev/null
@@ -1,10273 +0,0 @@
-/*
-*class++
-*  Name:
-*     CmpFrame
-
-*  Purpose:
-*     Compound Frame.
-
-*  Constructor Function:
-c     astCmpFrame
-f     AST_CMPFRAME
-
-*  Description:
-*     A CmpFrame is a compound Frame which allows two component Frames
-*     (of any class) to be merged together to form a more complex
-*     Frame. The axes of the two component Frames then appear together
-*     in the resulting CmpFrame (those of the first Frame, followed by
-*     those of the second Frame).
-*
-*     Since a CmpFrame is itself a Frame, it can be used as a
-*     component in forming further CmpFrames. Frames of arbitrary
-*     complexity may be built from simple individual Frames in this
-*     way.
-*
-*     Also since a Frame is a Mapping, a CmpFrame can also be used as a 
-*     Mapping. Normally, a CmpFrame is simply equivalent to a UnitMap,
-*     but if either of the component Frames within a CmpFrame is a Region 
-*     (a sub-class of Frame), then the CmpFrame will use the Region as a
-*     Mapping when transforming values for axes described by the Region. 
-*     Thus input axis values corresponding to positions which are outside the 
-*     Region will result in bad output axis values.
-
-*  Inheritance:
-*     The CmpFrame class inherits from the Frame class.
-
-*  Attributes:
-*     The CmpFrame class does not define any new attributes beyond
-*     those which are applicable to all Frames. However, the attributes 
-*     of the component Frames can be accessed as if they were attributes
-*     of the CmpFrame. For instance, if a CmpFrame contains a SpecFrame
-*     and a SkyFrame, then the CmpFrame will recognise the "Equinox"
-*     attribute and forward access requests to the component SkyFrame.
-*     Likewise, it will recognise the "RestFreq" attribute and forward
-*     access requests to the component SpecFrame. An axis index can
-*     optionally be appended to the end of any attribute name, in which
-*     case the request to access the attribute will be forwarded to the
-*     primary Frame defining the specified axis.
-
-*  Functions:
-c     The CmpFrame class does not define any new functions beyond those
-f     The CmpFrame class does not define any new routines beyond those
-*     which are applicable to all Frames.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     4-MAR-1996 (RFWS):
-*        Original version.
-*     27-FEB-1997 (RFWS):
-*        Improved public prologues.
-*     25-FEB-1998 (RFWS):
-*        Over-ride the astUnformat method.
-*     6-APR-1998 (RFWS):
-*        Fixed bug in returned value of GenAxisSelection.
-*     22-SEP-1998 (RFWS):
-*        Fixed bug in Match function - was not checking Domain values
-*        for equality.
-*     11-JUN-1999 (RFWS):
-*        Fixed bug in GenAxisSelection-  some selections were being omitted.
-*     5-FEB-2001 (DSB):
-*        Ensure that Title and Domain values appropriate to a CmpFrame
-*        are preserved if a CmpFrame result is generated by SubFrame.
-*     27-FEB-2001 (DSB):
-*        Modified Match so that all the frames have some axes in order to
-*        match. Otherwise, null pointers are created (for zero axes),
-*        resulting in a seg vio.
-*     21-JUN-2001 (DSB):
-*        Added astAngle.
-*     7-SEP-2001 (DSB):
-*        Added astResolve.
-*     26-SEP-2001 (DSB):
-*        Over-ride the astDecompose method.
-*     20-DEC-2002 (DSB):
-*        Allows any attribute of a component frame to be accessed as though
-*        it were an attribute of the CmpFrame by including an axis index in 
-*        the attribute name (e.g. "System(3)").
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitCmpFrameVtab
-*        method.
-*        - Override astGetAttrib, astClearAttrib, astTestAttrib,
-*        astSetAttrib to allow attributes to be set for individual
-*        axes.
-*        - Override astGetEpoch astGetSystem, astGetAlignSystem.
-*        astValidateSystem, astSystemString, astSystemCode.
-*     27-FEB-2003 (DSB):
-*        - Modify the default Domain name for a CmpFrame to be the
-*        domains of the two subFrames separated by a "-".
-*     24-JAN-2004 (DSB):
-*        o  Override the astFields method.
-*        o  Added argument "fmt" to Abbrev.
-*     24-MAR-2004 (DSB):
-*        Over-ride the astSimplify and astTransform methods.
-*     8-SEP-2004 (DSB):
-*        Over-ride astResolvePoints method.
-*     21-JAN-2005 (DSB):
-*        Over-ride the astGetActiveUnit and astSetActiveUnit methods.
-*     23-FEB-2005 (DSB):
-*        Modify GetDomain to avoid over-writing the static "buff" array
-*        if called recursively.
-*     29-MAR-2005 (DSB):
-*        Override astSetEpoch and astClearEpoch by implementations which
-*        propagate the changed epoch value to the component Frames.
-*     5-APR-2005 (DSB):
-*        Correct error checking in Clear/Get/Set/TestAttrib.
-*     12-MAY-2005 (DSB):
-*        Override astNormBox method.
-*     12-AUG-2005 (DSB):
-*        Override astSetObsLat/Lon and astClearObslat/Lon by implementations 
-*        which propagate the changed value to the component Frames.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     3-APR-2006 (DSB):
-*        Modify Match so that an attempt is made to align the target with
-*        each of the two component Frames if the target cannot be matched
-*        with the CmpFrame as a whole.
-*     3-MAY-2006 (DSB):
-*        Fix bug in Match that could cause segvio when matching a target
-*        against the second component of a CmpFrame.
-*     31-OCT-2006 (DSB):
-*        Over-ride the SetFrameFlags method.
-*     1-NOV-2005 (DSB):
-*        Override astSetDut1, astGetDut1 and astClearDut1.
-*     15-MAR-2007 (DSB):
-*        Override astClearAlignSystem by an implementation that clears 
-*        AlignSystem in the component Frames.
-*     7-FEB-2008 (DSB):
-*        Allow the MaxAxes and MinAxes attributes to be specified for a
-*        CmpFrame (rather than just being the sum of the attribute values
-*        in the component frames). This enables, for instance, a (detector 
-*        index,mjd) frame to match with a ((velocity,detector index),mjd) 
-*        frame.
-*     5-MAY-2009 (DSB):
-*        In GetAttrib, if an index is included in the attribute name, attempt 
-*        to use the GetAttrib method of the primary frame before using the 
-*        parent GetAttrib method. This is because the Frame getattrib
-*        method will dissociate axes from their parent class. Thus, a
-*        SkyAxis attribute such as AsTime will come out wrong since its
-*        value is managed by the SkyFrame class rather than the SkyAxis
-*        class.
-*     18-JUN-2009 (DSB):
-*        Override astSetObsAlt and astClearObsAlt.
-*     29-SEP-2009 (DSB):
-*        Ensure the astMatch method provided by this class honours the
-*        PreserveAxes, MaxAxes and MinAxes attribute settings.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS CmpFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__COMP
-#define LAST_SYSTEM AST__COMP
-
-/* Define macros to implement member functions for accessing axis
-   attributes. */
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a function to clear an attribute value for a CmpFrame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     MAKE_CLEAR(attribute)
-
-*  Class Membership:
-*     Defined by the CmpFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member
-*     function of the form:
-*
-*        static void Clear<Attribute>( AstFrame *this, int axis )
-*
-*     which clears an attribute value for a specified axis of a CmpFrame.
-
-*  Parameters:
-*      attribute
-*         The name of the attribute to be cleared, as it appears in the
-*         function name (e.g. Label in "ClearLabel").
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           void astClear<Attribute>( AstFrame *this, int axis )
-*
-*     which clears the required attribute for a Frame object.
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int axis, int *status ) { \
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */ \
-   int naxes1;                   /* Number of axes in frame1 */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
-   this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and alidateAxispermute the axis index supplied. */ \
-   axis = astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
-   naxes1 = astGetNaxes( this->frame1 ); \
-   if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and invoke its astClear... method to \
-   clear the attribute value. */ \
-      if ( axis < naxes1 ) { \
-         astClear##attribute( this->frame1, axis ); \
-      } else { \
-         astClear##attribute( this->frame2, axis - naxes1 ); \
-      } \
-   } \
-}
-
-/*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a function to get an attribute value for a CmpFrame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-#     #include "cmpframe.h"
-*     MAKE_GET(attribute,type,bad_value,default,assign_default)
-
-*  Class Membership:
-*     Defined by the CmpFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member
-*     function of the form:
-*
-*        static <Type> Get<Attribute>( AstFrame *this, int axis )
-*
-*     which gets an attribute value for a specified axis of a
-*     CmpFrame.
-
-*  Parameters:
-*     attribute
-*        The name of the attribute whose value is to be obtained, as
-*        it appears in the function name (e.g. Label in "GetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set,
-*        or if the function fails.
-*     default
-*        A boolean (int) value that indicates whether a new default
-*        value should be returned if the requested attribute has not
-*        been set for the appropriate axis of the appropriate
-*        component Frame. If this value is zero, the component Frame's
-*        default (for the appropriate axis) will be used instead.
-*     assign_default
-*        An expression that evaluates to the new default value to be
-*        assigned. This value is ignored if "default" is zero, but a
-*        valid (e.g. constant) value should nevertheless be supplied.
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           <Type> astGet<Attribute>( AstFrame *this, int axis )
-*
-*     which gets the required attribute for a Frame object.
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type,bad_value,default,assign_default) \
-static type Get##attribute( AstFrame *this_frame, int axis, int *status ) { \
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */ \
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */ \
-   AstFrame *frame;              /* Pointer to Frame containing axis */\
-   int axis_p;                   /* Permuted axis index */ \
-   int naxes1;                   /* Number of axes in frame1 */ \
-   int set;                      /* Digits attribute set? */ \
-   type result;                  /* Result value to return */ \
- \
-/* Initialise. */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Get a pointer to the structure holding thread-specific global data. */ \
-   astGET_GLOBALS(this_frame); \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
-   this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and permute the axis index supplied. */ \
-   axis_p = astValidateAxis( this, axis, "astGet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
-   naxes1 = astGetNaxes( this->frame1 ); \
-   if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and adjust the axis index if \
-   necessary. */ \
-      frame = ( axis_p < naxes1 ) ? this->frame1 : this->frame2; \
-      axis_p = ( axis_p < naxes1 ) ? axis_p : axis_p - naxes1; \
-\
-/* Since the component Frame is "managed" by the enclosing CmpFrame, we next \
-   test if any Frame attributes which may affect the result are undefined \
-   (i.e. have not been explicitly set). If so, we over-ride them, giving \
-   them temporary values dictated by the CmpFrame. Only the Digits attribute \
-   is relevant here. */ \
-      set = astTestDigits( frame ); \
-      if ( !set ) astSetDigits( frame, astGetDigits( this ) ); \
-\
-/* If the default value is to be over-ridden, test if the Frame's axis \
-   attribute has been set. Then, if required, obtain the attribute value from \
-   the Frame. */ \
-      if ( !(default) || astTest##attribute( frame, axis_p ) ) { \
-         result = astGet##attribute( frame, axis_p ); \
-\
-/* If required, assign the new default value. */ \
-      } else { \
-         result = (assign_default); \
-      } \
-\
-/* Clear Frame attributes which were temporarily over-ridden. */ \
-      if ( !set ) astClearDigits( frame ); \
-   } \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a function to set an attribute value for a CmpFrame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     MAKE_SET(attribute,type)
-
-*  Class Membership:
-*     Defined by the CmpFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member
-*     function of the form:
-*
-*        static void Set<Attribute>( AstFrame *this, int axis, <Type> value )
-*
-*     which sets an attribute value for a specified axis of a CmpFrame.
-
-*  Parameters:
-*      attribute
-*         The name of the attribute to be set, as it appears in the
-*         function name (e.g. Label in "SetLabel").
-*      type
-*         The C type of the attribute.
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           void astSet<Attribute>( AstFrame *this, int axis, <Type> value )
-*
-*     which sets the required attribute for a Frame object.
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type) \
-static void Set##attribute( AstFrame *this_frame, int axis, type value, int *status ) { \
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */ \
-   int naxes1;                   /* Number of axes in frame1 */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
-   this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and permute the axis index supplied. */ \
-   axis = astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
-   naxes1 = astGetNaxes( this->frame1 ); \
-   if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and invoke its astSet... method to \
-   set the attribute value. */ \
-      if ( axis < naxes1 ) { \
-         astSet##attribute( this->frame1, axis, value ); \
-      } else { \
-         astSet##attribute( this->frame2, axis - naxes1, value ); \
-      } \
-   } \
-}
-
-/*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a function to test if an attribute is set for a CmpFrame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     MAKE_TEST(attribute)
-
-*  Class Membership:
-*     Defined by the CmpFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member
-*     function of the form:
-*
-*        static int Test<Attribute>( AstFrame *this, int axis )
-*
-*     which tests whether an attribute value is set for a specified
-*     axis of a CmpFrame.
-
-*  Parameters:
-*      attribute
-*         The name of the attribute to be tested, as it appears in the
-*         function name (e.g. Label in "TestLabel").
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           int astTest<Attribute>( AstFrame *this, int axis )
-*
-*     which tests the required attribute for a Frame object.
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstFrame *this_frame, int axis, int *status ) { \
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */ \
-   int naxes1;                   /* Number of axes in frame1 */ \
-   int result;                   /* Result value to return */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Obtain a pointer to the CmpFrame structure. */ \
-   this = (AstCmpFrame *) this_frame; \
-\
-/* Validate and permute the axis index supplied. */ \
-   axis = astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Determine the number of axes in the first component Frame. */ \
-   naxes1 = astGetNaxes( this->frame1 ); \
-   if ( astOK ) { \
-\
-/* Decide which Frame contains the axis and invoke its astTest... method to \
-   test the attribute. */ \
-      if ( axis < naxes1 ) { \
-         result = astTest##attribute( this->frame1, axis ); \
-      } else { \
-         result = astTest##attribute( this->frame2, axis - naxes1 ); \
-      } \
-   } \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "pointset.h"            /* Sets of points */
-#include "object.h"              /* Base Object class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Coordinate permutation Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "axis.h"                /* Coordinate axes */
-#include "frame.h"               /* Parent Frame class */
-#include "cmpframe.h"            /* Interface definition for this class */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <limits.h>
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static double (* parent_angle)( AstFrame *, const double[], const double[], const double[], int * );
-static double (* parent_getdut1)( AstFrame *, int * );
-static double (* parent_getepoch)( AstFrame *, int * );
-static double (* parent_getobsalt)( AstFrame *, int * );
-static double (* parent_getobslat)( AstFrame *, int * );
-static double (* parent_getobslon)( AstFrame *, int * );
-static int (* parent_getactiveunit)( AstFrame *, int * );
-static int (* parent_getmaxaxes)( AstFrame *, int * );
-static int (* parent_getminaxes)( AstFrame *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearalignsystem)( AstFrame *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_cleardut1)( AstFrame *, int * );
-static void (* parent_clearepoch)( AstFrame *, int * );
-static void (* parent_clearobsalt)( AstFrame *, int * );
-static void (* parent_clearobslat)( AstFrame *, int * );
-static void (* parent_clearobslon)( AstFrame *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setactiveunit)( AstFrame *, int, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setdut1)( AstFrame *, double, int * );
-static void (* parent_setepoch)( AstFrame *, double, int * );
-static void (* parent_setframeflags)( AstFrame *, int, int * );
-static void (* parent_setobsalt)( AstFrame *, double, int * );
-static void (* parent_setobslat)( AstFrame *, double, int * );
-static void (* parent_setobslon)( AstFrame *, double, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->Label_Buff[ 0 ] = 0; \
-   globals->Symbol_Buff[ 0 ] = 0; \
-   globals->GetDomain_Buff[ 0 ] = 0; \
-   globals->GetTitle_Buff[ 0 ] = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(CmpFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(CmpFrame,Class_Init)
-#define class_vtab astGLOBAL(CmpFrame,Class_Vtab)
-#define getdomain_buff astGLOBAL(CmpFrame,GetDomain_Buff)
-#define gettitle_buff astGLOBAL(CmpFrame,GetTitle_Buff)
-#define label_buff astGLOBAL(CmpFrame,Label_Buff)
-#define symbol_buff astGLOBAL(CmpFrame,Symbol_Buff)
-#define qsort_axes astGLOBAL(CmpFrame,qsort_axes)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Pointer to axis index array accessed by "qsort". */
-static int *qsort_axes;
-
-/* Default Label string buffer */
-static char label_buff[ 101 ];
-
-/* Default Symbol buffer */
-static char symbol_buff[ 51 ];
-
-/* Buffer for returned domain name in GetDomain */
-static char getdomain_buff[ 101 ];
-
-/* Buffer for returned title in GetTitle */
-static char gettitle_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstCmpFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstCmpFrame *astCmpFrameId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType GetSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static int ComponentMatch( AstCmpFrame *, AstFrame *, int, int **, int **, AstMapping **, AstFrame **, int * ); 
-static int Fields( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-static int GenAxisSelection( int, int, int [], int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetMaxAxes( AstFrame *, int * );
-static int GetMinAxes( AstFrame *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetObjSize( AstObject *, int * );
-static int GetUseDefs( AstObject *, int * );                         
-static int GoodPerm( int, const int [], int, const int [], int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int PartMatch( AstCmpFrame *, AstFrame *, int, const int [], int, const int [], int **, int **, AstMapping **, AstFrame **, int * );
-static int QsortCmpAxes( const void *, const void * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestDirection( AstFrame *, int, int * );
-static int TestFormat( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static int TestUnit( AstFrame *, int, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static void AddExtraAxes( int, int [], int, int, int, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Norm( AstFrame *, double [], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double [], const double [], double, double [], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PartitionSelection( int, const int [], const int [], int, int, int [], int, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void PrimaryFrame( AstFrame *, int, AstFrame **, int *, int * );
-static void RenumberAxes( int, int [], int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-static void SetFrameFlags( AstFrame *, int, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetDut1( AstFrame *, int * );
-static void ClearDut1( AstFrame *, int * );
-static void SetDut1( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static void ClearAlignSystem( AstFrame *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this_frame, int axis,  const char *fmt,
-                           const char *str1, const char *str2, int *status ) {
-/*
-*  Name:
-*     Abbrev
-
-*  Purpose:
-*     Abbreviate a formatted CmpFrame axis value by skipping leading fields.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     const char *Abbrev( AstFrame *this, int axis,  const char *fmt,
-*                         const char *str1, const char *str2, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astAbbrev
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function compares two CmpFrame axis values that have been
-*     formatted (using astFormat) and determines if they have any
-*     redundant leading fields (i.e. leading fields in common which
-*     can be suppressed when tabulating the values or plotting them on
-*     the axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The number of the CmpFrame axis for which the values have
-*        been formatted (axis numbering starts at zero for the first
-*        axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specification used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value. If this is null, the returned pointer
-*        points to the start of the final field in str2.
-*     str2
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - This function assumes that the format specification used was
-*     the same when both values were formatted and that they both
-*     apply to the same CmpFrame axis.
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstFrame *frame;              /* Pointer to Frame containing axis */
-   const char *result;           /* Pointer value to return */
-   int naxes1;                   /* Number of axes in frame1 */
-   int set;                      /* Digits attribute set? */
-
-/* Initialise. */
-   result = str2;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astAbbrev" );
-
-/* Determine the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
-   index if necessary. */
-      frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
-      axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
-   we next test if any Frame attributes which may affect the result
-   are undefined (i.e. have not been explicitly set). If so, we
-   over-ride them, giving them temporary values dictated by the
-   CmpFrame. Only the Digits attribute is relevant here. */
-      set = astTestDigits( frame );
-      if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astAbbrev method to perform the processing. */
-      result = astAbbrev( frame, axis, fmt, str1, str2 );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
-      if ( !set ) astClearDigits( frame );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = str2;
-
-/* Return the result. */
-   return result;
-}
-
-static void AddExtraAxes( int naxes, int axes[], int i1, int i2,
-                          int following, int *status ) {
-/*
-*  Name:
-*     AddExtraAxes
-
-*  Purpose:
-*     Add extra axis indices in place of missing ones.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void AddExtraAxes( int naxes, int axes[], int i1, int i2,
-*                        int following, int *status )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This function takes an array of axis indices that refer to the
-*     axes of a Frame, and which may have values missing (denoted by
-*     an index of -1). It replaces each occurrence of -1 by a new axis
-*     index (and re-numbers the others to avoid duplication) in such a
-*     way that the new indices introduced are "associated" with
-*     certain of the pre-existing indices, by virtue of being numbered
-*     consecutively with them.
-*
-*     The purpose of this operation is to establish the relative
-*     location of new axes in relation to the pre-existing ones.
-*
-*     Normally, each new axis will be associated with (i.e. numbered
-*     one more than) the pre-existing index which precedes
-*     it. However, if the "following" parameter is non-zero, it will
-*     instead be associated with (numbered one less than) the one
-*     which follows it. If there is no preceding (or following)
-*     pre-existing index, the following (or preceding) one is used
-*     instead. If several adjacent occurrences of -1 must be replaced,
-*     they are numbered consecutively in their order of occurrence.
-
-*  Parameters:
-*     naxes
-*        The number of axis indices in the array.
-*     axes
-*        The array containing the axis indices.
-*     i1
-*        Index of the first element of the array to be processed.
-*     i2
-*        Index of the last element of the array to be processed.
-*     following
-*        Boolean flag to determine if new indices are associated with
-*        the preceding index (if zero) or the following index (if
-*        non-zero).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The values of "i1" and "i2" dictate the range of array
-*     elements where values of -1 will be replaced, but all array
-*     elements are candidates for renumbering in order to avoid
-*     duplicate axis indices.
-*     - This function aims to establish the location of new axes only
-*     by means of the relative numerical value of the indices assigned
-*     to them. It does not constrain the actual indices assigned in
-*     any further way.
-*     - Because axis indices are always incremented (never
-*     decremented) in order to avoid duplicates, where a number of new
-*     indices have been introduced, the maximum index present in the
-*     result array may exceed the original maximum.
-*     - Some axis indices may remain unused (i.e. not present) in the
-*     result array.
-*/
-
-/* Local Variables: */
-   int end;                      /* Loop termination value */
-   int extra;                    /* Index to apply to next "extra" axis */
-   int found;                    /* Default value found? */
-   int i;                        /* Main loop counter */
-   int inc;                      /* Loop increment value */
-   int j;                        /* Loop counter for eliminating duplicates */
-   int start;                    /* Loop starting value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise the default index of the next extra axis to add. This
-   will apply only if there are no valid axis indices from which to
-   obtain a better default. */
-   extra = 0;
-
-/* Initialise loop parameters so as to scan the axis indices provided
-   in either the forward or reverse direction, according to the value
-   of "following". Start with the section of the array being processed,
-   but continue looking for a default right up to the end of the array
-   (this prevents the current section being numbered inconsistently
-   with respect to adjacent ones that may already have been
-   processed). */
-   start = following ? i2 : i1;
-   end = following ? -1 : naxes;
-   inc = following ? -1 : 1;
-
-/* Search for the first (in whichever direction this is) valid axis
-   index and use it to set a new default index for the next extra axis
-   to add. If scanning forward, use the valid axis index (causing any
-   preceding extra axis to displace it upwards). If scanning
-   backwards, use one more than the valid axis index (causing any
-   following extra axis to tag on the end). */
-   found = 0;
-   for ( i = start; i != end; i += inc ) {
-      if ( axes[ i ] != -1 ) {
-         found = 1;
-         extra = axes[ i ] + ( following ? 1 : 0 );
-         break;
-      }
-   }
-
-/* If no default has yet been found, repeat the above process by
-   scanning in the opposite direction (by inverting the "following"
-   value used). Again, this prevents inconsistency with neighbouring
-   regions. This time a default must be found unless the entire array
-   is filled with -1's (in which case a default of zero is used). */
-   if ( !found ) {
-      start = !following ? i2 : i1;
-      end = !following ? -1 : naxes;
-      inc = !following ? -1 : 1;
-      for ( i = start; i != end; i += inc ) {
-         if ( axes[ i ] != -1 ) {
-            extra = axes[ i ] + ( !following ? 1 : 0 );
-            break;
-         }
-      }
-   }
-
-/* Reset the loop parameters to scan just the region of interest in
-   the original (correct) direction. */
-   start = following ? i2 : i1;
-   end = following ? i1 - 1 : i2 + 1;
-   inc = following ? -1 : 1;
-
-/* Identify those indices which are not valid. */
-   for ( i = start; i != end; i += inc ) {
-      if ( axes[ i ] == -1 ) {
-
-/* We wish to assign the value "extra" in place of this invalid axis
-   index.  However, this may duplicate an index already present, so
-   increment by one all valid indices which are not less than the new
-   index. This eliminates any possibility duplication, although it may
-   leave an axis index value unused (if no duplication would actually
-   have occurred). */
-         for ( j = 0; j < naxes; j++ ) {
-            if ( axes[ j ] != -1 ) {
-               if ( axes[ j ] >= extra ) axes[ j ]++;
-            }
-         }
-
-/* We can now assign the new axis index. */
-         axes[ i ] = extra;
-
-/* Assign the value to be used for the next extra axis index. If
-   scanning forward, this will be one more than the last one used (so
-   it will follow it).  If scanning backwards, it is equal to the last
-   one (so that it will displace the last one upwards). */
-         extra += ( following ? 0 : 1 );
-
-/* When a valid axis index is encountered, reset the value to be used
-   for the next extra axis index. If scanning forward, this is one
-   more than the last valid index (so the extra axis will follow
-   it). If scanning backwards, it is equal to the last valid index (so
-   it will displace the valid index upwards). */
-      } else {
-         extra = axes[ i ] + ( following ? 0 : 1 );
-      }
-   }
-}
-
-static double Angle( AstFrame *this_frame, const double a[], 
-                     const double b[], const double c[], int *status ) {
-/*
-*  Name:
-*     Angle
-
-*  Purpose:
-*     Calculate the angle subtended by two points at a third point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double Angle( AstFrame *this_frame, const double a[], 
-*                   const double b[], const double c[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astAngle method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the angle at point B between the line joining 
-*     points A and B, and the line joining points C and B, in the context 
-*     of a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     a 
-*        An array of double, with one element for each CmpFrame axis,
-*        containing the coordinates of the first point.
-*     b 
-*        An array of double, with one element for each CmpFrame axis,
-*        containing the coordinates of the second point.
-*     c 
-*        An array of double, with one element for each CmpFrame axis,
-*        containing the coordinates of the third point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The required angle, or AST__BAD if the angle is undefined.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   AstFrame *pframe;             /* Pointer to the primary Frame for an axis */
-   const int *perm;              /* Pointer to axis permutation array */
-   double *pa;                   /* Permuted coordinates for point a */
-   double *pb;                   /* Permuted coordinates for point b */
-   double *pc;                   /* Permuted coordinates for point c */
-   double ang1;                  /* Angle between input points in frame1 */
-   double ang2;                  /* Angle between input points in frame2 */
-   double result;                /* Required angle */
-   int axis;                     /* Loop counter for axes */
-   int iscart;                   /* Is the CmpFrame a Cartesian system? */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes;                    /* Total number of axes in CmpFrame */
-   int paxis;                    /* Axis index within primary Frame */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the CmpFrame. */
-   naxes = astGetNaxes( this );
-
-/* See if all axes within the CmpFrame belong to a simple Frame, in which 
-   case we assume that the CmpFrame describes a Cartesian coordinate system. */
-   iscart = 1;
-   for( axis = 0; axis < naxes; axis++ ){
-      PrimaryFrame( this_frame, axis, &pframe, &paxis, status );
-      if( strcmp( astGetClass( pframe ), "Frame" ) ) {
-         iscart = 0;
-         pframe = astAnnul( pframe );
-         break;
-      }
-      pframe = astAnnul( pframe );
-   }
-
-/* If the CmpFrame describes a Cartesian coordinate system, we can use the 
-   Angle method from the parent Frame class. */
-   if( iscart ) {
-      result = (*parent_angle)( this_frame, a, b, c, status ); 
-
-/* If the CmpFrame is not Cartesian... */
-   } else {
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
-      perm = astGetPerm( this );
-
-/* Get workspace. */
-      pa = (double *) astMalloc( sizeof(double)*naxes );
-      pb = (double *) astMalloc( sizeof(double)*naxes );
-      pc = (double *) astMalloc( sizeof(double)*naxes );
-
-/* If OK, apply the axis permutation array to obtain the coordinates in the 
-   required order. */
-      if( astOK ) {
-         for( axis = 0; axis < naxes; axis++ ) {
-            pa[ perm[ axis ] ] = a[ axis ];
-            pb[ perm[ axis ] ] = b[ axis ];
-            pc[ perm[ axis ] ] = c[ axis ];
-         }
-
-/* Obtain the number of axes in the first component Frame. */
-         naxes1 = astGetNaxes( this->frame1 );
-
-/* Project the two input points into the two component Frames and
-   determine the angle between the points in each Frame. */
-         ang1 = astAngle( this->frame1, pa, pb, pc ); 
-         ang2 = astAngle( this->frame2, pa + naxes1, pb + naxes1, 
-                          pc + naxes1 ); 
-
-/* The required angle is defined if one and only one of the two component
-   frames gives a defined angle between the two points. */
-         if( ang1 == AST__BAD ) {
-            result = ang2;
-         } else if( ang2 == AST__BAD ) {
-            result = ang1;
-         }
-      }
-
-/* Free the workspace */
-      pa = (double *) astFree( (void *) pa );
-      pb = (double *) astFree( (void *) pb );
-      pc = (double *) astFree( (void *) pc );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Cast
-
-*  Purpose:
-*     Cast an Object into an instance of a sub-class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstObject *Cast( AstObject *this, AstObject *obj, int *status ) 
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astCast
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a deep copy of an ancestral component of the
-*     supplied object. The required class of the ancestral component is
-*     specified by another object. Specifically, if "this" and "new" are 
-*     of the same class, a copy of "this" is returned. If "this" is an 
-*     instance of a subclass of "obj", then a copy of the component
-*     of "this" that matches the class of "obj" is returned. Otherwise, 
-*     a NULL pointer is returned without error.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cast.
-*     obj
-*        Pointer to an Object that defines the class of the returned Object. 
-*        The returned Object will be of the same class as "obj". 
-
-*  Returned Value:
-*     A pointer to the new Object. NULL if "this" is not a sub-class of 
-*     "obj", or if an error occurs.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables; */
-   AstAxis *newaxis;
-   AstFrame *cfrm;
-   AstFrame *this;
-   AstObject *new;
-   astDECLARE_GLOBALS       
-   int generation_gap;
-   int i;
-   int naxes;
-
-/* Initialise */
-   new = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj" 
-   to this class (CmpFrame). A positive value is returned if CmpFrame
-   is a sub-class of "obj". A negative value is returned if "obj" is 
-   a sub-class of CmpFrame. Zero is returned if "obj" is a CmpFrame. 
-   AST__COUSIN is returned if "obj" is not on the same line of descent 
-   as CmpFrame. */
-   generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab, 
-                                     astVTAB( obj ) );
-
-/* If "obj" is a CmpFrame or a sub-class of CmpFrame, we can cast by 
-   truncating the vtab for "this" so that it matches the vtab of "obJ", 
-   and then taking a deep copy of "this". */
-   if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
-      new = astCastCopy( this_object, obj );
-
-/* If "obj" is not a CmpFrame or a sub-class of CmpFrame (e.g. it's a 
-   Frame), we create a basic Frame containing the same axes and attributes 
-   as the CmpFrame, and then attempt to cast this Frame into the class 
-   indicated by "obj". */
-   } else {
-      this = (AstFrame *) this_object;
-
-/* Create a basic Frame with the right number of axes. */
-      naxes = astGetNaxes( this );
-      cfrm = astFrame( naxes, " ", status );
-
-/* Replace the Axis structures in the basic Frame with those in the
-   CmpFrame. */
-      for( i = 0; i < naxes; i++ ) {
-         newaxis = astGetAxis( this, i );
-         astSetAxis( cfrm, i, newaxis );
-         newaxis = astAnnul( newaxis );
-      }
-
-/* Overlay the properties of the CmpFrame onto the basic Frame. */
-      astOverlay( this, NULL, cfrm );
-
-/* Try to cast the basic Frame to the class of "obj". */
-      new = astCast( cfrm, obj );
-
-/* Annull the basic Frame. */
-      cfrm = astAnnul( cfrm );
-   }
-
-/* Return the new pointer. */
-   return new;
-}
-
-static void ClearAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearAlignSystem
-
-*  Purpose:
-*     Clear the value of the AlignSystem attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearAlignSystem( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearAlignSystem method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the AlignSystem value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame AlignSystem value. */
-   (*parent_clearalignsystem)( this_frame, status );
-
-/* Now clear the AlignSystem attribute in the two component Frames. */
-   astClearAlignSystem( this->frame1 );
-   astClearAlignSystem( this->frame2 );
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     CmpFrame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   char buf1[80];                /* For for un-indexed attribute name */
-   char buf2[80];                /* For for indexed attribute name */
-   int axis;                     /* Sipplied (1-based) axis index */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* Number of characters used so dar */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Index of primary Frame axis */
-   int ok;                       /* Has the attribute been accessed succesfully? */
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
-   ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
-   names defined by this class. In fact there is nothing to do here
-   since the CmpFrame class currently defines no extra attributes, but 
-   this may change in the future. */
-   if( 0 ) {
-
-
-
-/* If the attribute is not a CmpFrame specific attribute... */
-   } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
-   That is, we do not want it to be necessary to extract a Frame from
-   its parent CmpFrame in order to access its attributes. For this reason 
-   we first temporarily switch off error reporting so that if an attempt 
-   to access the attribute fails, we can try a different approach. */
-      oldrep = astReporting( 0 );
-      
-/* Our first attempt is to see if the attribute is recognised by the parent
-   class (Frame). */
-      (*parent_clearattrib)( this_object, attrib, status );
-
-/* Indicate success. */
-      if( astOK ) {
-         ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different 
-   approach. */
-      } else {
-         astClearStatus;
-
-/* If the attribute is qualified by an axis index, try accessing it as an
-   attribute of the primary Frame containing the specified index. */
-         if ( nc = 0,
-             ( 2 == astSscanf( attrib, "%[^(](%d)%n", buf1, &axis, &nc ) )
-             && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
-            astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-            if( astOK ) {
-
-/* Create a new attribute with the same name but with the axis index
-   appropriate to the primary Frame. */
-               sprintf( buf2, "%s(%d)", buf1, paxis + 1 );
-
-/* Attempt to access the attribute. */
-               astClearAttrib( pfrm, buf2 );
-
-/* Indicate success. */
-               if( astOK ) {
-                  ok = 1;
-
-/* Otherwise clear the status value, and try again without any axis index. */
-               } else {               
-                  astClearStatus;
-                  astClearAttrib( pfrm, buf1 );
-
-/* Indicate success, or clear the status value. */
-                  if( astOK ) {
-                     ok = 1;
-                  } else {
-                     astClearStatus;
-                  }
-               }
-
-/* Free the primary frame pointer. */
-               pfrm = astAnnul( pfrm );
-            }
-
-/* If the attribute is not qualified by an axis index, try accessing it
-   using the primary Frame of each axis in turn. */
-         } else {
-
-/* Loop round all axes attribute. */
-	    for( axis = 0; axis < astGetNaxes( this ); axis++ ) {
-
-/* Get the primary Frame containing this axis. */
-               astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
-               astClearAttrib( pfrm, attrib );
-
-/* Free the primary Frame pointer. */
-               pfrm = astAnnul( pfrm );
-
-/* Indicate success, or clear the status value. */
-               if( astOK ) {
-                  ok = 1;
-               } else {
-                  astClearStatus;
-               }
-            }
-         }
-      }
-
-/* Re-instate the original error reporting state. */
-      astReporting( oldrep );
-
-   }
-
-/* Report an error if the attribute could not be accessed. */
-   if( !ok && astOK ) {
-      astError( AST__BADAT, "astClear: The %s given does not have an attribute "
-                "called \"%s\".", status, astGetClass( this ), attrib );
-   }
-
-}
-
-static void ClearDut1( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearDut1
-
-*  Purpose:
-*     Clear the value of the Dut1 attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearDut1( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearDut1 method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the Dut1 value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame Dut1 value. */
-   (*parent_cleardut1)( this_frame, status );
-
-/* Now clear the Dut1 attribute in the two component Frames. */
-   astClearDut1( this->frame1 );
-   astClearDut1( this->frame2 );
-}
-
-static void ClearEpoch( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearEpoch
-
-*  Purpose:
-*     Clear the value of the Epoch attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearEpoch( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearEpoch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the Epoch value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame epoch. */
-   (*parent_clearepoch)( this_frame, status );
-
-/* Now clear the Epoch attribute in the two component Frames. */
-   astClearEpoch( this->frame1 );
-   astClearEpoch( this->frame2 );
-}
-
-static void ClearObsAlt( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearObsAlt
-
-*  Purpose:
-*     Clear the value of the ObsAlt attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearObsAlt( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearObsAlt method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the ObsAlt value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame ObsAlt. */
-   (*parent_clearobsalt)( this_frame, status );
-
-/* Now clear the ObsAlt attribute in the two component Frames. */
-   astClearObsAlt( this->frame1 );
-   astClearObsAlt( this->frame2 );
-}
-
-static void ClearObsLat( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearObsLat
-
-*  Purpose:
-*     Clear the value of the ObsLat attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearObsLat( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearObsLat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the ObsLat value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame ObsLat. */
-   (*parent_clearobslat)( this_frame, status );
-
-/* Now clear the ObsLat attribute in the two component Frames. */
-   astClearObsLat( this->frame1 );
-   astClearObsLat( this->frame2 );
-}
-
-static void ClearObsLon( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearObsLon
-
-*  Purpose:
-*     Clear the value of the ObsLon attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void ClearObsLon( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astClearObsLon method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the ObsLon value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to clear the CmpFrame ObsLon. */
-   (*parent_clearobslon)( this_frame, status );
-
-/* Now clear the ObsLon attribute in the two component Frames. */
-   astClearObsLon( this->frame1 );
-   astClearObsLon( this->frame2 );
-}
-
-static int ComponentMatch( AstCmpFrame *template, AstFrame *target,
-                           int icomp, int **template_axes, int **target_axes,
-                           AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     ComponentMatch
-
-*  Purpose:
-*     Determine if conversion is possible between a component Frame in a
-*     template CmpFrame and another target Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int ComponentMatch( AstCmpFrame *template, AstFrame *target,
-*                         int icomp, int **template_axes, int **target_axes,
-*                         AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     CmpFrame member function 
-
-*  Description:
-*     This function is like astMatch, but it compares the supplied target
-*     Frame with a specified component Frame of the supplied template 
-*     CmpFrame, rather than with the entire template CmpFrame. If a match
-*     is found, the returned Mapping, Frame and axis lists are adjusted so 
-*     that they refer to the entire template CmpFrame.
-
-*  Parameters:
-*     template
-*        Pointer to the template CmpFrame. This describes the
-*        coordinate system (or set of possible coordinate systems)
-*        into which we wish to convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     icomp
-*        The index of the component Frame to use within the template
-*        CmpFrame; 0 or 1.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        template CmpFrame axis from which it is derived. If it is not
-*        derived from any template axis, a value of -1 will be
-*        returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        target Frame axis from which it is derived. If it is not
-*        derived from any target axis, a value of -1 will be returned
-*        instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the
-*        "target" Frame and the "result" Frame (see below) and the
-*        inverse transformation will convert in the opposite
-*        direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target Frame and the template
-*        CmpFrame. In particular, when the template allows the
-*        possibility of transformaing to any one of a set of
-*        alternative coordinate systems, the "result" Frame will
-*        indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - By default, the "result" Frame will have its number of axes
-*     and axis order determined by the "template" CmpFrame. However,
-*     if the PreserveAxes attribute of the template CmpFrame is
-*     non-zero, then the axis count and axis order of the "target"
-*     Frame will be used instead.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *ctemplate;
-   AstFrame *fother;
-   AstFrame *fresult;
-   AstMapping *fmap;
-   AstPermMap *pm;       
-   const int *perm;
-   int *ftarget_axes;
-   int *ftemplate_axes;
-   int *inperm;
-   int *operm;
-   int *outperm;
-   int axis;             
-   int match;            
-   int nax1;
-   int nax2;
-   int naxr;
-   int prax;
-   int praxo;
-   int result_naxes;     
-   int template_naxes;
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-   
-/* Get a pointer to the requested component Frame of the template CmpFrame. */
-   ctemplate = icomp ? template->frame2 :template->frame1;
-
-/* Temporarily set the component Frame PreserveAxes value to that of the
-   template CmpFrame. PreserveAxes determines whether astMatch returns a
-   result Frame that looks like the template or the target. */
-   if( astTestPreserveAxes( ctemplate ) ) {
-      praxo = astGetPreserveAxes( ctemplate ) ? 1 : 0;
-   } else {
-      praxo = -1;
-   }
-   prax = astGetPreserveAxes( template );
-   astSetPreserveAxes( ctemplate, prax );
-
-/* Attempt to find a match between the axes of the supplied target Frame
-   and the axes of the selected component Frame in the template. */
-   match = astMatch( ctemplate, target, &ftemplate_axes, &ftarget_axes, &fmap,
-                     &fresult );
-
-/* Restore the original PreserveAxes value in the component template
-   Frame. */
-   if( praxo == -1 ) {
-      astClearPreserveAxes( ctemplate );
-   } else {
-      astSetPreserveAxes( ctemplate, praxo );
-   }
-
-/* If a match was found, we need to adjust the Mapping, Frame and axis
-   lists returned by the above call to astMatch so that they refer to the 
-   full template CmpFrame or target (depending on PreserveAxes). */
-   if( match ) {
-
-/* Get the number of axes in each component Frame and the total number of
-   axes in the template CmpFrame. */
-      nax1 = astGetNaxes( template->frame1 );
-      nax2 = astGetNaxes( template->frame2 );
-      template_naxes = nax1 + nax2;
-
-/* Get the axis permutation array from the template and get its inverse.
-   The "perm" array holds the internal axis index at each external axis
-   index. The "operm" array holds the external axis index at each 
-   internal axis index. */
-      perm = astGetPerm( template );
-      operm = astMalloc( sizeof( int )*(size_t)template_naxes );
-      if( astOK) {
-         for( axis = 0; axis < template_naxes; axis++ ) {
-            operm[ perm[ axis ] ] = axis;
-         }
-
-/* The PreserveAxes attribute is used by astMatch to decide whether the
-   result Frame should inherit its axes from the target frame or the
-   template frame. First deal with cases where the order and count of axes 
-   in the result frame is the same as the target. */
-         if( prax ) {
-
-/* Return the result Frame and Mapping unchanged since they already refer
-   to the full target Frame used in the above call to astMatch. */
-            *result = astClone( fresult );
-            *map = astClone( fmap );
-
-/* Also return the lists of target axes unchanged. */
-            *target_axes = ftarget_axes;
-
-/* The values in the template axes list refer to the component template
-   Frame, but we want to return values that refer to the full template
-   CmpFrame. This involve sup to two setps 1) for the second component
-   Frame only, increase the axis numbers by the number of axes in the
-   first component Frame, and 2) take account of any axis permutation in 
-   the template. First allocate memory for the returned list (which,
-   because PreserveAxes is zero, will have an entry for each template axis). */
-            *template_axes = astMalloc( sizeof( int )*template_naxes );
-
-/* Now, if the second component of the template has been selected, increment 
-   the template axes so that they give the internal axis indices of the 
-   second component Frame within the CmpFrame. The first component axes
-   will be unchanged. */
-            result_naxes = astGetNaxes( fresult );
-            if( icomp ) {
-               for( axis = 0; axis < result_naxes; axis++ ) {
-                  ftemplate_axes[ axis ] += nax1;
-               }
-            }
-
-/* Now copy the internal axis value into the returned array, modifying them 
-   in the process from internal to external axis ordering. */
-            for( axis = 0; axis < result_naxes; axis++ ) {
-               (*template_axes)[ axis ] = operm[ ftemplate_axes[ axis ] ];
-            }
-
-/* If the order and count of axes in the result frame is the same as the 
-   template CmpFrame... */
-         } else {
-
-/* We need to adjust the Mapping, Frame and axis lists returned by the
-   above call to astMatch so that they refer to the supplied template
-   CmpFrame rather than to the selected component Frame. Get the number
-   of axes in the result Frame returned by astMatch (naxr) and the number
-   in the result Frame returned by this function (result-naxes). */
-            naxr = astGetNaxes( fresult );
-            result_naxes = ( icomp ? nax1 : nax2 ) + naxr;
-   
-/* Create the full result Frame by combining the partial result Frame 
-   returned by astMatch above with the other component Frame from the 
-   template. */
-            if( icomp ) {
-               fother = astCopy( template->frame1 );
-               *result = (AstFrame *) astCmpFrame( fother, fresult, "", status );
-            } else {
-               fother = astCopy( template->frame2 );
-               *result = (AstFrame *) astCmpFrame( fresult, fother, "", status );
-            } 
-            fother = astAnnul( fother );
-
-/* Modify the Mapping returned by the above call to astMatch so that it
-   produces positions within the full result Frame created above. */
-            if( icomp ) {
-               inperm = astMalloc( sizeof( int )*(size_t) naxr );
-               outperm = astMalloc( sizeof( int )*(size_t) result_naxes );
-               if( astOK ) {
-                  for( axis = 0; axis < nax1; axis++ ) outperm[ axis ] = -1;
-                  for( axis = 0; axis < naxr; axis++ ) {
-                     outperm[ axis + nax1 ] = axis;
-                     inperm[ axis ] = axis + nax1;
-                  }
-               }
-   
-            } else {
-               inperm = NULL;
-               outperm = NULL;
-            }
-   
-            pm = astPermMap( naxr, inperm, result_naxes, outperm, NULL, "", status );
-            *map = (AstMapping *) astCmpMap( fmap, pm, 1, "", status );
-
-/* Free resources. */
-            pm = astAnnul( pm );
-            if( inperm ) inperm = astFree( inperm );
-            if( outperm ) outperm = astFree( outperm );
-
-/* Allocate memory for the returned list of axes. */
-            *template_axes = astMalloc( sizeof( int )*(size_t)result_naxes );
-            *target_axes = astMalloc( sizeof( int )*(size_t)result_naxes );
-   
-/* The axis indices returned by astMatch above will refer to the selected
-   component Frame rather than the permuted (i.e. external) axis indices for 
-   the template CmpFrame. Change the template axes list so that they describe 
-   the axes in the full result Frame in terms of the external template axis 
-   numbering. This involves shifting the indices for the second component
-   Frame to leave room for the axes of the first component Frame, and
-   also permuting the axis indicies from internal to external order. */
-            if( icomp ) {
-               for( axis = 0; axis < nax1; axis++ ) {
-                  (*template_axes)[ axis ] = operm[ axis ];
-               }
-   
-               for( ; axis < result_naxes; axis++ ) {
-                  (*template_axes)[ axis ] = operm[ nax1 + ftemplate_axes[ axis - nax1 ] ];
-               }
-
-            } else {
-               for( axis = 0; axis < nax1; axis++ ) {
-                  (*template_axes)[ axis ] = operm[ ftemplate_axes[ axis ] ];
-               }
-   
-               for( ; axis < result_naxes; axis++ ) {
-                  (*template_axes)[ axis ] = operm[ axis ];
-               }
-            }
-
-/* Change the target axes list so that they describe the axes in the
-   full result Frame (this just means padding with -1 to indicate that 
-   the extra axes do not correspond to any axis in the target). */
-            for( axis = 0; axis < naxr; axis++ ) {
-               (*target_axes)[ axis ] = ftarget_axes[ axis ];
-            }
-      
-            for( ; axis < result_naxes; axis++ ) {
-               (*target_axes)[ axis ] = -1;
-            }
-
-/* Free resources */
-            ftarget_axes = astFree( ftarget_axes );
-         }
-      }
-
-      operm = astFree( operm );
-      ftemplate_axes = astFree( ftemplate_axes );
-      fmap = astAnnul( fmap );
-      fresult = astAnnul( fresult );
-
-   }
-
-/* If an error occurred, free all allocated memory, annul the result
-   Object pointers and clear all returned values. */
-   if ( !astOK ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void Decompose( AstMapping *this_cmpframe, AstMapping **map1, 
-                       AstMapping **map2, int *series, int *invert1, 
-                       int *invert2, int *status ) {
-/*
-*
-*  Name:
-*     Decompose
-
-*  Purpose:
-*     Decompose a CmpFrame into two component CmpFrames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void Decompose( AstMapping *this, AstMapping **map1, 
-*                     AstMapping **map2, int *series,
-*                     int *invert1, int *invert2, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astDecompose
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns pointers to two Mappings which, when applied
-*     either in series or parallel, are equivalent to the supplied Mapping.
-*
-*     Since the Frame class inherits from the Mapping class, Frames can
-*     be considered as special types of Mappings and so this method can
-*     be used to decompose either CmpMaps or CmpFrames.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     map1
-*        Address of a location to receive a pointer to first component
-*        Mapping. 
-*     map2
-*        Address of a location to receive a pointer to second component
-*        Mapping. 
-*     series
-*        Address of a location to receive a value indicating if the
-*        component Mappings are applied in series or parallel. A non-zero
-*        value means that the supplied Mapping is equivalent to applying map1 
-*        followed by map2 in series. A zero value means that the supplied
-*        Mapping is equivalent to applying map1 to the lower numbered axes
-*        and map2 to the higher numbered axes, in parallel.
-*     invert1
-*        The value of the Invert attribute to be used with map1. 
-*     invert2
-*        The value of the Invert attribute to be used with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the component rames using the returned
-*     pointers will be reflected in the supplied CmpFrame.
-
-*-
-*/
-
-
-/* Local Variables: */
-   AstCmpFrame *this;              /* Pointer to CmpMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpFrame *) this_cmpframe;
-
-/* The components Frames of a CmpFrame are considered to be parallel
-   Mappings. */
-   if( series ) *series = 0;
-
-/* The Frames are returned in their original order whether or not the
-   CmpFrame has been inverted. */
-   if( map1 ) *map1 = astClone( this->frame1 );
-   if( map2 ) *map2 = astClone( this->frame2 );
-
-/* If the CmpFrame has been inverted, return inverted Invert flags. */
-   if( astGetInvert( this ) ) {
-      if( invert1 ) *invert1 = astGetInvert( this->frame1 ) ? 0 : 1;
-      if( invert2 ) *invert2 = astGetInvert( this->frame2 ) ? 0 : 1;
-
-/* If the CmpFrame has not been inverted, return the current Invert flags. */
-   } else {
-      if( invert1 ) *invert1 = astGetInvert( this->frame1 );
-      if( invert2 ) *invert2 = astGetInvert( this->frame2 );
-   }
-}
-
-static double Distance( AstFrame *this_frame,
-                        const double point1[], const double point2[], int *status ) {
-/*
-*  Name:
-*     Distance
-
-*  Purpose:
-*     Calculate the distance between two points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double Distance( AstFrame *this,
-*                      const double point1[], const double point2[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astDistance method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the distance between two points whose
-*     CmpFrame coordinates are given. The distance calculated is that
-*     along the geodesic curve that joins the two points. This is
-*     computed as the Cartesian sum of the distances between the
-*     points when their coordinates are projected into each of the
-*     CmpFrame's component Frames.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     point1
-*        An array of double, with one element for each CmpFrame axis,
-*        containing the coordinates of the first point.
-*     point2
-*        An array of double, with one element for each CmpFrame axis,
-*        containing the coordinates of the second point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The distance between the two points.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input coordinates has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   const int *perm;              /* Axis permutation array */
-   double *p1;                   /* Pointer to permuted point1 coordinates */
-   double *p2;                   /* Pointer to permuted point2 coordinates */
-   double dist1;                 /* Distance in frame1 */
-   double dist2;                 /* Distance in frame2 */
-   double result;                /* Value to return */
-   int axis;                     /* Loop counter for axes */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes;                    /* Number of axes in CmpFrame */
-   int ok;                       /* No "bad" coordinates found? */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
-   perm = astGetPerm( this );
-
-/* Obtain the number of axes in the CmpFrame and in the first
-   component Frame. */
-   naxes = astGetNaxes( this );
-   naxes1 = astGetNaxes( this->frame1 );
-
-/* Allocate memory to hold the permuted coordinates of each point. */
-   p1 = astMalloc( sizeof( double ) * (size_t) naxes );
-   p2 = astMalloc( sizeof( double ) * (size_t) naxes );
-   if ( astOK ) {
-
-/* Examine the coordinates of both points and note if any coordinate
-   value is "bad". */
-      ok = 1;
-      for ( axis = 0; axis < naxes; axis++ ) {
-         if ( ( point1[ axis ] == AST__BAD ) ||
-              ( point2[ axis ] == AST__BAD ) ) {
-            ok = 0;
-            break;
-
-/* Permute good coordinates using the CmpFrame's axis permutation
-   array to put them into the order required internally (i.e. by the
-   two component Frames). */
-         } else {
-            p1[ perm[ axis ] ] = point1[ axis ];
-            p2[ perm[ axis ] ] = point2[ axis ];
-         }
-      }
-
-/* If no "bad" coordinates were found, obtain the distance between the
-   two points when their coordinates are projected into each component
-   Frame. */
-      if ( ok ) {
-         dist1 = astDistance( this->frame1, p1, p2 );
-         dist2 = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* If the distances found were OK, compute the distance between the
-   two points as the Cartesian sum of the two component distances. */
-         if ( astOK && ( dist1 != AST__BAD ) && ( dist2 != AST__BAD ) ) {
-            result = sqrt( ( dist1 * dist1 ) + ( dist2 * dist2 ) );
-         }
-      }
-   }
-
-/* Free the memory used for the permuted coordinates. */
-   p1 = astFree( p1 );
-   p2 = astFree( p2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static int Fields( AstFrame *this_frame, int axis, const char *fmt, 
-                   const char *str, int maxfld, char **fields, 
-                   int *nc, double *val, int *status ) {
-/*
-*+
-*  Name:
-*     astFields
-
-*  Purpose:
-*     Identify numerical fields within a formatted CmpFrame axis value.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int astFields( AstFrame *this, int axis, const char *fmt, 
-*                    const char *str, int maxfld, char **fields, 
-*                    int *nc, double *val ) 
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astFields
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function identifies the numerical fields within a CmpFrame axis 
-*     value that has been formatted using astAxisFormat. It assumes that 
-*     the value was formatted using the supplied format string. It also
-*     returns the equivalent floating point value.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The number of the CmpFrame axis for which the values have been
-*        formatted (axis numbering starts at zero for the first axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format used when creating "str".
-*     str
-*        Pointer to a constant null-terminated string containing the
-*        formatted value.
-*     maxfld
-*        The maximum number of fields to identify within "str".
-*     fields
-*        A pointer to an array of at least "maxfld" character pointers. 
-*        Each element is returned holding a pointer to the start of the 
-*        corresponding field  in "str" (in the order in which they occur 
-*        within "str"), or NULL if no corresponding field can be found. 
-*     nc
-*        A pointer to an array of at least "maxfld" integers. Each
-*        element is returned holding the number of characters in the
-*        corresponding field, or zero if no corresponding field can be
-*        found.
-*     val
-*        Pointer to a location at which to store the value
-*        equivalent to the returned field values. If this is NULL, 
-*        it is ignored.
-
-*  Returned Value:
-*     The number of fields succesfully identified and returned.
-
-*  Notes:
-*     - Leading and trailing spaces are ignored.
-*     - If the formatted value is not consistent with the supplied format
-*     string, then a value of zero will be returned, "fields" will be
-*     returned holding NULLs, "nc" will be returned holding zeros, and
-*     "val" is returned holding VAL__BAD.
-*     - Fields are counted from the start of the formatted string. If the
-*     string contains more than "maxfld" fields, then trailing fields are
-*     ignored.
-*     - If this function is invoked with the global error status set, or 
-*     if it should fail for any reason, then a value of zero will be returned 
-*     as the function value, and "fields", "nc" and "val"  will be returned 
-*     holding their supplied values
-*-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstFrame *frame;              /* Pointer to Frame containing axis */
-   int naxes1;                   /* Number of axes in frame1 */
-   int result;                   /* Result field count to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astFields" );
-
-/* Determine the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
-   index if necessary. */
-      frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
-      axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Invoke the Frame's astFields method to perform the processing. */
-      result = astFields( frame, axis, fmt, str, maxfld, fields, 
-                          nc, val );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-*  Name:
-*     Format
-
-*  Purpose:
-*     Format a coordinate value for a CmpFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     const char *Format( AstFrame *this, int axis, double value, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astFormat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to a string containing the
-*     formatted (character) version of a coordinate value for a
-*     CmpFrame axis. The formatting applied is that specified by a
-*     previous invocation of the astSetFormat method (or a default
-*     format appropriate to the axis in question).
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The number of the axis (zero-based) for which formatting is
-*        to be performed.
-*     value
-*        The coordinate value to be formatted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted
-*     value.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstFrame *frame;              /* Pointer to Frame containing axis */
-   const char *result;           /* Pointer value to return */
-   int naxes1;                   /* Number of axes in frame1 */
-   int set;                      /* Digits attribute set? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astFormat" );
-
-/* Determine the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
-   index if necessary. */
-      frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
-      axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
-   we next test if any Frame attributes which may affect the result
-   are undefined (i.e. have not been explicitly set). If so, we
-   over-ride them, giving them temporary values dictated by the
-   CmpFrame. Only the Digits attribute is relevant here. */
-      set = astTestDigits( frame );
-      if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astFormat method to format the value. */
-      result = astFormat( frame, axis, value );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
-      if ( !set ) astClearDigits( frame );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     Gap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating CmpFrame axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astGap method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted values for a CmpFrame axis, the returned gap
-*     size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The number of the axis (zero-based) for which a gap is to be found.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstFrame *frame;              /* Pointer to Frame containing axis */
-   double result;                /* Result value to return */
-   int naxes1;                   /* Number of axes in frame1 */
-   int set;                      /* Digits attribute set? */
-
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astGap" );
-
-/* Determine the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
-   index if necessary. */
-      frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
-      axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
-   we next test if any Frame attributes which may affect the result
-   are undefined (i.e. have not been explicitly set). If so, we
-   over-ride them, giving them temporary values dictated by the
-   CmpFrame. Only the Digits attribute is relevant here. */
-      set = astTestDigits( frame );
-      if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astGap method to find the gap size. */
-      result = astGap( frame, axis, gap, ntick );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
-      if ( !set ) astClearDigits( frame );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0.0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied CmpFrame,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;         /* Pointer to CmpFrame structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->frame1 );
-   result += astGetObjSize( this->frame2 );
-   result += astTSizeOf( this->perm );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetAlignSystem
-
-*  Purpose:
-*     Obtain the AlignSystem attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetAlignSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the AlignSystem attribute for a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The AlignSystem value.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestAlignSystem( this ) ) {
-      result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__COMP;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "CmpFrame.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a CmpFrame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - The returned string pointer may point at memory allocated
-*     within the CmpFrame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the CmpFrame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   char buf1[80];                /* For for un-indexed attribute name */
-   char buf2[80];                /* For for indexed attribute name */
-   const char *result;           /* Pointer value to return */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   int axis;                     /* Supplied (1-base) axis index */
-   int paxis;                    /* Index of primary Frame axis */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* Length of string used so far */
-   int oldrep;                   /* Original error reporting state */
-   int ok;                       /* Has the attribute been accessed succesfully? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
-   ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
-   names defined by this class. In fact there is nothing to do here
-   since the CmpFrame class currently defines no extra attributes, but 
-   this may change in the future. */
-   if( 0 ) {
-
-/* If the attribute is not a CmpFrame specific attribute... */
-   } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
-   That is, we do not want it to be necessary to extract a Frame from
-   its parent CmpFrame in order to access its attributes. For this reason 
-   we first temporarily switch off error reporting so that if an attempt 
-   to access the attribute fails, we can try a different approach. */
-      oldrep = astReporting( 0 );
-      
-/* If the attribute is qualified by an axis index, try accessing it as an
-   attribute of the primary Frame containing the specified index. */
-      if ( nc = 0,
-          ( 2 == astSscanf( attrib, "%[^(](%d)%n", buf1, &axis, &nc ) )
-          && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
-         astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-         if( astOK ) {
-
-/* Create a new attribute with the same name but with the axis index
-   appropriate to the primary Frame. */
-            sprintf( buf2, "%s(%d)", buf1, paxis + 1 );
-
-/* Attempt to access the attribute. */
-            result = astGetAttrib( pfrm, buf2 );
-   
-/* Indicate success. */
-            if( astOK ) {
-               ok = 1;
-   
-/* Otherwise clear the status value, and try again without any axis index. */
-            } else {               
-               astClearStatus;
-               result = astGetAttrib( pfrm, buf1 );
-   
-/* Indicate success, or clear the status value. */
-               if( astOK ) {
-                  ok = 1;
-               } else {
-                  astClearStatus;
-               }
-            }
-   
-/* Free the primary frame pointer. */
-            pfrm = astAnnul( pfrm );
-         }
-
-/* If the attribute is not qualified by an axis index, try accessing it
-   using the parent Frame method. */
-      } else if( astOK ){
-         result = (*parent_getattrib)( this_object, attrib, status );
-
-/* Indicate success. */
-         if( astOK ) {
-            ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different 
-   approach. */
-         } else {
-            astClearStatus;
-
-/* Next try accessing it using the primary Frame of each axis in turn. 
-   Loop round all axes, until one is found which defines the specified
-   attribute. */
-	    for( axis = 0; axis < astGetNaxes( this ) && !ok; axis++ ) {
-
-/* Get the primary Frame containing this axis. */
-               astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
-               result = astGetAttrib( pfrm, attrib );
-
-/* Indicate success, or clear the status value. */
-               if( astOK ) {
-                  ok = 1;
-               } else {
-                  astClearStatus;
-               }
-
-/* Free the primary Frame pointer. */
-               pfrm = astAnnul( pfrm );
-
-            }
-         }
-      }
-
-/* Re-instate the original error reporting state. */
-      astReporting( oldrep );
-
-   }
-
-/* Report an error if the attribute could not be accessed. */
-   if( !ok && astOK ) {
-      astError( AST__BADAT, "astGet: The %s given does not have an attribute "
-                "called \"%s\".", status, astGetClass( this ), attrib );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GenAxisSelection( int naxes, int nselect, int axes[], int *status ) {
-/*
-*  Name:
-*     GenAxisSelection
-
-*  Purpose:
-*     Generate a sequence of axis selections.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GenAxisSelection( int naxes, int nselect, int axes[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This function generates a sequence of axis selections covering
-*     all possible ways of selecting a specified number of axes from a
-*     Frame.
-
-*  Parameters:
-*     naxes
-*        The number of axes in the Frame.
-*     nselect
-*        The number of axes to be selected (between zero and "naxes").
-*     axes
-*        An array with "nselect" elements. On entry it should contain
-*        the (zero-based) indices of the initial set of distinct axes
-*        to be selected, in increasing order (initiallly this should
-*        just be the sequence [0,1,...nselect-1]). On exit, these
-*        indices will be updated to identify the next possible axis
-*        selection.
-*
-*        By invoking the function repeatedly, and passing this array
-*        each time, all possible selections will be covered.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a new axis selection has been returned. Zero if all
-*     possible selections have already been returned (in which case
-*     the selection returned this time is not valid and should not be
-*     used).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int i;                        /* Loop counter for axes */
-   int iselect;                  /* Selection index */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Start with the first axis index and loop until the selection has
-   been updated. */
-   iselect = 0;
-   while ( 1 ) {
-
-/* Increment the current axis index if it is the final one or it can
-   be incremented without equalling the one which follows (this ensures
-   the indices remain in increasing order). */
-      if ( ( iselect == ( nselect - 1 ) ) ||
-           ( axes[ iselect + 1 ] > ( axes[ iselect ] + 1 ) ) ) {
-         axes[ iselect ]++;
-
-/* After incrementing an index, reset all previous indices to their
-   starting values. */
-         for ( i = 0; i < iselect; i++ ) axes[ i ] = i;
-         break;
-
-/* If this axis index can't be incremented, consider the next one.
-   Quit if we go beyond the end of the selection array. */
-      } else if ( ++iselect >= nselect ) {
-         break;
-      }
-   }   
-
-/* Return a result to indicate if we've reached the final selection
-   (when the final axis index goes out of range). */
-   return ( nselect > 0 ) && ( axes[ nselect - 1 ] < naxes );
-}
-
-static AstAxis *GetAxis( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetAxis
-
-*  Purpose:
-*     Obtain a pointer to a specified Axis from a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstAxis *GetAxis( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetAxis method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Axis object associated
-*     with one of the axes of a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The number of the axis (zero-based) for which an Axis pointer
-*        is required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the requested Axis object.
-
-*  Notes:
-*     - The reference count of the requested Axis object will be
-*     incremented by one to reflect the additional pointer returned by
-*     this function.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Vaiables: */
-   AstAxis *result;              /* Pointer value to return */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   int naxes1;                   /* Number of axes for frame1 */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astGetAxis" );
-
-/* Obtain the number of axes for frame1. */
-   naxes1 = astGetNaxes( this->frame1 );
-
-/* Decide which Frame the axis belongs to and obtain the required
-   Axis pointer. */
-   if ( axis < naxes1 ) {
-      result = astGetAxis( this->frame1, axis );
-   } else {
-      result = astGetAxis( this->frame2, axis - naxes1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDomain
-
-*  Purpose:
-*     Obtain a pointer to the Domain attribute string for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     const char *GetDomain( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetDomain protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns a pointer to the Domain attribute string
-*    for a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Domain value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the CmpFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   char *dom1;                   /* Pointer to first sub domain */
-   char *dom2;                   /* Pointer to second sub domain */
-   const char *result;           /* Pointer value to return */
-   const char *t;                /* Temporary pointer */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestDomain( this ) ) {
-      result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
-   } else {
-
-/* Get the Domain value for the two component Frames and store new
-   copies of them. This is necessary because the component Frames may
-   themselves be CmpFrames, resulting in this function being called
-   recursively and so causing the static "getdomain_buff" array to be used in
-   multiple contexts. */
-      t = astGetDomain( this->frame1 );
-      dom1 = t ? astStore( NULL, t, strlen(t) + 1 ) : NULL;
-      t = astGetDomain( this->frame2 );
-      dom2 = t ? astStore( NULL, t, strlen(t) + 1 ) : NULL;
-
-      if( dom2 ) {
-         if( strlen( dom1 ) > 0 || strlen( dom2 ) > 0 ) {
-            sprintf( (char *) getdomain_buff, "%s-%s", dom1, dom2 );
-            result = getdomain_buff;         
-         } else {
-            result = "CMP";
-         }
-      }
-
-      dom1 = astFree( dom1 );
-      dom2 = astFree( dom2 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetMaxAxes( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetMaxAxes
-
-*  Purpose:
-*     Get a value for the MaxAxes attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GetMaxAxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetMaxAxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the MaxAxes attribute of a
-*     CmpFrame.  A large default value is supplied that is much larger 
-*     than the maximum likely number of axes in a Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The MaxAxes attribute value.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If a value has been set explicitly for the CmpFrame, return it.
-   Otherwise returned a large default value. */
-   if( astTestMaxAxes( this ) ) {
-      result = (*parent_getmaxaxes)( this_frame, status );
-   } else {
-      result = 1000000;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetMinAxes( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetMinAxes
-
-*  Purpose:
-*     Get a value for the MinAxes attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GetMinAxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetMinAxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the MinAxes attribute of a
-*     CmpFrame.  A default value of zero is used.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The MinAxes attribute value.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If a value has been set explicitly for the CmpFrame, return it.
-   Otherwise returned a default value of zero. */
-   if( astTestMinAxes( this ) ) {
-      result = (*parent_getminaxes)( this_frame, status );
-   } else {
-      result = 0;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetDut1( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDut1
-
-*  Purpose:
-*     Get a value for the Dut1 attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double GetDut1( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetDut1 method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the Dut1 attribute of a
-*     CmpFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Dut1 attribute value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   double result;                /* Result value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If an Dut1 attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestDut1( this ) ) {
-      result = (*parent_getdut1)( this_frame, status );
-
-/* Otherwise, if the Dut1 value is set in the first component Frame,
-   return it. */
-   } else if( astTestDut1( this->frame1 ) ){
-      result = astGetDut1( this->frame1 );
-
-/* Otherwise, if the Dut1 value is set in the second component Frame,
-   return it. */
-   } else if( astTestDut1( this->frame2 ) ){
-      result = astGetDut1( this->frame2 );
-
-/* Otherwise, return the default Dut1 value from the first component
-   Frame. */
-   } else {
-      result = astGetDut1( this->frame1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetEpoch( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetEpoch
-
-*  Purpose:
-*     Get a value for the Epoch attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double GetEpoch( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetEpoch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the Epoch attribute of a
-*     CmpFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Epoch attribute value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   double result;                /* Result value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If an Epoch attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestEpoch( this ) ) {
-      result = (*parent_getepoch)( this_frame, status );
-
-/* Otherwise, if the Epoch value is set in the first component Frame,
-   return it. */
-   } else if( astTestEpoch( this->frame1 ) ){
-      result = astGetEpoch( this->frame1 );
-
-/* Otherwise, if the Epoch value is set in the second component Frame,
-   return it. */
-   } else if( astTestEpoch( this->frame2 ) ){
-      result = astGetEpoch( this->frame2 );
-
-/* Otherwise, return the default Epoch value from the first component
-   Frame. */
-   } else {
-      result = astGetEpoch( this->frame1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetObsAlt( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetObsAlt
-
-*  Purpose:
-*     Get a value for the ObsAlt attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double GetObsAlt( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetObsAlt method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the ObsAlt attribute of a
-*     CmpFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ObsAlt attribute value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   double result;                /* Result value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If an ObsAlt attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestObsAlt( this ) ) {
-      result = (*parent_getobsalt)( this_frame, status );
-
-/* Otherwise, if the ObsAlt value is set in the first component Frame,
-   return it. */
-   } else if( astTestObsAlt( this->frame1 ) ){
-      result = astGetObsAlt( this->frame1 );
-
-/* Otherwise, if the ObsAlt value is set in the second component Frame,
-   return it. */
-   } else if( astTestObsAlt( this->frame2 ) ){
-      result = astGetObsAlt( this->frame2 );
-
-/* Otherwise, return the default ObsAlt value from the first component
-   Frame. */
-   } else {
-      result = astGetObsAlt( this->frame1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetObsLat( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetObsLat
-
-*  Purpose:
-*     Get a value for the ObsLat attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double GetObsLat( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetObsLat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the ObsLat attribute of a
-*     CmpFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ObsLat attribute value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   double result;                /* Result value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If an ObsLat attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestObsLat( this ) ) {
-      result = (*parent_getobslat)( this_frame, status );
-
-/* Otherwise, if the ObsLat value is set in the first component Frame,
-   return it. */
-   } else if( astTestObsLat( this->frame1 ) ){
-      result = astGetObsLat( this->frame1 );
-
-/* Otherwise, if the ObsLat value is set in the second component Frame,
-   return it. */
-   } else if( astTestObsLat( this->frame2 ) ){
-      result = astGetObsLat( this->frame2 );
-
-/* Otherwise, return the default ObsLat value from the first component
-   Frame. */
-   } else {
-      result = astGetObsLat( this->frame1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetObsLon( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetObsLon
-
-*  Purpose:
-*     Get a value for the ObsLon attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     double GetObsLon( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetObsLon method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the ObsLon attribute of a
-*     CmpFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ObsLon attribute value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   double result;                /* Result value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If an ObsLon attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestObsLon( this ) ) {
-      result = (*parent_getobslon)( this_frame, status );
-
-/* Otherwise, if the ObsLon value is set in the first component Frame,
-   return it. */
-   } else if( astTestObsLon( this->frame1 ) ){
-      result = astGetObsLon( this->frame1 );
-
-/* Otherwise, if the ObsLon value is set in the second component Frame,
-   return it. */
-   } else if( astTestObsLon( this->frame2 ) ){
-      result = astGetObsLon( this->frame2 );
-
-/* Otherwise, return the default ObsLon value from the first component
-   Frame. */
-   } else {
-      result = astGetObsLon( this->frame1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetNaxes( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetNaxes
-
-*  Purpose:
-*     Determine how many axes a CmpFrame has.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GetNaxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetNaxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns the number of axes for a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of CmpFrame axes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   int naxes1;                   /* Number of axes for frame1 */
-   int naxes2;                   /* Number of axes for frame2 */
-   int result;                   /* Number of CmpFrame axes */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes for each component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   naxes2 = astGetNaxes( this->frame2 );
-
-/* If OK, calculate the total number of axes. */
-   if ( astOK ) result = naxes1 + naxes2;
-
-/* Return the result. */
-   return result;
-}
-
-static const int *GetPerm( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetPerm
-
-*  Purpose:
-*     Access the axis permutation array for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     const int *astGetPerm( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astGetPerm
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the axis permutation array
-*     for a CmpFrame. This array constitutes a lookup-table that
-*     converts between an axis number supplied externally and the
-*     corresponding index in the CmpFrame's internal data.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the CmpFrame's axis permutation array (a constant
-*     array of int).  Each element of this contains the (zero-based)
-*     internal axis index to be used in place of the external index
-*     which is used to address the permutation array. If the CmpFrame
-*     has zero axes, this pointer will be NULL.
-
-*  Notes:
-*     - This protected method is provided to assist class
-*     implementations which need to implement axis-dependent
-*     extensions to CmpFrame methods, and which therefore need to know
-*     how a CmpFrames's external axis index is converted for internal
-*     use.
-*     - The pointer returned by this function gives direct access to
-*     data internal to the CmpFrame object. It remains valid only so
-*     long as the CmpFrame exists. The permutation array contents may
-*     be modified by other functions which operate on the CmpFrame and
-*     this may render the returned pointer invalid.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Implementation Notes:
-*     - This function performs essentially the same operation as the
-*     Frame member function which it over-rides. However, it returns a
-*     pointer to the "perm" array held in the CmpFrame structure
-*     (rather than the one in the parent Frame structure). This
-*     duplication of the array is necessary because the one in the
-*     Frame structure is of zero length, the number of axes in the
-*     Frame structure having been set to zero to prevent unnecessary
-*     allocation of Axis objects which are not needed by the CmpFrame.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Return a pointer to the axis permutation array. */
-   return this->perm;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetSystem
-
-*  Purpose:
-*     Obtain the System attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the System attribute for a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestSystem( this ) ) {
-      result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__COMP;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetTitle
-
-*  Purpose:
-*     Obtain a pointer to the Title attribute string for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     const char *GetTitle( AstFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetTitle protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns a pointer to the Title attribute string for
-*    a CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Title value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the CmpFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* If a Title attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestTitle( this ) ) {
-      result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, create a suitable default string and return a pointer to
-   this. */
-   } else {
-      (void) sprintf( gettitle_buff, "%d-d compound coordinate system",
-                      astGetNaxes( this ) );
-      if ( astOK ) result = gettitle_buff;
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetUseDefs
-
-*  Purpose:
-*     Get a value for the UseDefs attribute of a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GetUseDefs( AstCmpFrame *this, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetUseDefs method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the UseDefs attribute of a
-*     CmpFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The UseDefs attribute value.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* If an UseDefs attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestUseDefs( this ) ) {
-      result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, use the UseDefs value in the first component Frame as the
-   default. */
-   } else {
-      result = (*parent_getusedefs)( (AstObject *) this->frame1, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GoodPerm( int ncoord_in, const int inperm[],
-                     int ncoord_out, const int outperm[], int *status ) {
-/*
-*  Name:
-*     GoodPerm
-
-*  Purpose:
-*     Test if a PermMap will be non-null.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GoodPerm( int ncoord_in, const int inperm[],
-*                   int ncoord_out, const int outperm[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This function tests if a pair of permutation arrays will, when
-*     used to create a PermMap, result in a PermMap which has a
-*     non-null effect (i.e. one which is not simply equivalent to a
-*     unit Mapping).
-
-*  Parameters:
-*     ncoord_in
-*        The number of input coordinates for the PermMap.
-*     inperm
-*        The input permutation array for the PermMap (with "ncoord_in"
-*        elements).
-*     ncoord_out
-*        The number of output coordinates for the PermMap.
-*     outperm
-*        The output permutation array for the PermMap (with
-*        "ncoord_out" elements).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the PermMap would be equivalent to a unit Mapping,
-*     otherwise one.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int axis;                     /* Loop counter for axes */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* First test if the number of input and output coordinates are
-   different. */
-   result = ( ncoord_in != ncoord_out );
-
-/* If they are not, examine the contents of the "inperm" array. */
-   if ( !result ) {
-      for ( axis = 0; axis < ncoord_in; axis++ ) {
-
-/* We have a non-null Mapping if any element of this array selects an
-   output axis with a different index to the input axis (or selects an
-   invalid axis or a constant). */
-         if ( inperm[ axis ] != axis ) {
-            result = 1;
-            break;
-         }
-      }
-   }
-
-/* If the Mapping still appears to be null, also examine the "outperm"
-   array in the same way. */
-   if ( !result ) {
-      for ( axis = 0; axis < ncoord_out; axis++ ) {
-         if ( outperm[ axis ] != axis ) {
-            result = 1;
-            break;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitCmpFrameVtab_(  AstCmpFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCmpFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a CmpFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void astInitCmpFrameVtab( AstCmpFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     CmpFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the CmpFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsACmpFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_getusedefs = object->GetUseDefs;
-   object->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   mapping->RemoveRegions = RemoveRegions;
-   mapping->Simplify = Simplify;
-   mapping->Transform = Transform;
-
-   parent_getdomain = frame->GetDomain;
-   frame->GetDomain = GetDomain;
-
-   parent_gettitle = frame->GetTitle;
-   frame->GetTitle = GetTitle;
-
-   parent_getepoch = frame->GetEpoch;
-   frame->GetEpoch = GetEpoch;
-
-   parent_setepoch = frame->SetEpoch;
-   frame->SetEpoch = SetEpoch;
-
-   parent_clearepoch = frame->ClearEpoch;
-   frame->ClearEpoch = ClearEpoch;
-
-   parent_getdut1 = frame->GetDut1;
-   frame->GetDut1 = GetDut1;
-
-   parent_setdut1 = frame->SetDut1;
-   frame->SetDut1 = SetDut1;
-
-   parent_cleardut1 = frame->ClearDut1;
-   frame->ClearDut1 = ClearDut1;
-
-   parent_getobslon = frame->GetObsLon;
-   frame->GetObsLon = GetObsLon;
-
-   parent_setobslon = frame->SetObsLon;
-   frame->SetObsLon = SetObsLon;
-
-   parent_clearobslon = frame->ClearObsLon;
-   frame->ClearObsLon = ClearObsLon;
-
-   parent_getobslat = frame->GetObsLat;
-   frame->GetObsLat = GetObsLat;
-
-   parent_setobslat = frame->SetObsLat;
-   frame->SetObsLat = SetObsLat;
-
-   parent_clearobslat = frame->ClearObsLat;
-   frame->ClearObsLat = ClearObsLat;
-
-   parent_getobsalt = frame->GetObsAlt;
-   frame->GetObsAlt = GetObsAlt;
-
-   parent_setobsalt = frame->SetObsAlt;
-   frame->SetObsAlt = SetObsAlt;
-
-   parent_clearobsalt = frame->ClearObsAlt;
-   frame->ClearObsAlt = ClearObsAlt;
-
-   parent_angle = frame->Angle;
-   frame->Angle = Angle;
-
-   parent_getsystem = frame->GetSystem;
-   frame->GetSystem = GetSystem;
-
-   parent_getalignsystem = frame->GetAlignSystem;
-   frame->GetAlignSystem = GetAlignSystem;
-
-   parent_clearalignsystem = frame->ClearAlignSystem;
-   frame->ClearAlignSystem = ClearAlignSystem;
-
-   parent_overlay = frame->Overlay;
-   frame->Overlay = Overlay;
-
-   parent_setactiveunit = frame->SetActiveUnit;
-   frame->SetActiveUnit = SetActiveUnit;
-
-   parent_getactiveunit = frame->GetActiveUnit;
-   frame->GetActiveUnit = GetActiveUnit;
-
-   parent_setframeflags = frame->SetFrameFlags;
-   frame->SetFrameFlags = SetFrameFlags;
-
-   parent_getmaxaxes = frame->GetMaxAxes;
-   frame->GetMaxAxes = GetMaxAxes;
-
-   parent_getminaxes = frame->GetMinAxes;
-   frame->GetMinAxes = GetMinAxes;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Cast = Cast;
-   mapping->Decompose = Decompose;
-   frame->Abbrev = Abbrev;
-   frame->ClearDirection = ClearDirection;
-   frame->ClearFormat = ClearFormat;
-   frame->ClearLabel = ClearLabel;
-   frame->ClearSymbol = ClearSymbol;
-   frame->ClearUnit = ClearUnit;
-   frame->Distance = Distance;
-   frame->Fields = Fields;
-   frame->Format = Format;
-   frame->Gap = Gap;
-   frame->GetAxis = GetAxis;
-   frame->GetDirection = GetDirection;
-   frame->GetFormat = GetFormat;
-   frame->GetLabel = GetLabel;
-   frame->GetNaxes = GetNaxes;
-   frame->GetPerm = GetPerm;
-   frame->GetSymbol = GetSymbol;
-   frame->GetUnit = GetUnit;
-   frame->IsUnitFrame = IsUnitFrame;
-   frame->Match = Match;
-   frame->Norm = Norm;
-   frame->NormBox = NormBox;
-   frame->Offset = Offset;
-   frame->PermAxes = PermAxes;
-   frame->PrimaryFrame = PrimaryFrame;
-   frame->Resolve = Resolve;
-   frame->ResolvePoints = ResolvePoints;
-   frame->SetAxis = SetAxis;
-   frame->SetDirection = SetDirection;
-   frame->SetFormat = SetFormat;
-   frame->SetLabel = SetLabel;
-   frame->SetSymbol = SetSymbol;
-   frame->SetUnit = SetUnit;
-   frame->SubFrame = SubFrame;
-   frame->TestDirection = TestDirection;
-   frame->TestFormat = TestFormat;
-   frame->TestLabel = TestLabel;
-   frame->TestSymbol = TestSymbol;
-   frame->TestUnit = TestUnit;
-   frame->Unformat = Unformat;
-   frame->ValidateSystem = ValidateSystem;
-   frame->SystemString = SystemString;
-   frame->SystemCode = SystemCode;
-   frame->MatchAxesX = MatchAxesX;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "CmpFrame",
-               "Compound coordinate system description" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int IsUnitFrame( AstFrame *this_frame, int *status ){
-/*
-*  Name:
-*     IsUnitFrame
-
-*  Purpose:
-*     Is this Frame equivalent to a UnitMap?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int IsUnitFrame( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astIsUnitFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied Frame is
-*     equivalent to a UnitMap when treated as a Mapping (note, the Frame
-*     class inherits from Mapping and therefore every Frame is also a Mapping).
-
-*  Parameters:
-*     this 
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied Frame is equivalent to
-*     a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Return the result. */
-   return astIsUnitFrame( this->frame1 ) && astIsUnitFrame( this->frame2 );
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;       /* Pointer to CmpFrame structure */
-   int result;              /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->frame1, mode, extra, fail );
-   if( !result ) result = astManageLock( this->frame2, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes,
-                  AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astMatch
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function matches a "template" CmpFrame to a "target" Frame
-*     and determines whether it is possible to convert coordinates
-*     between them.  If it is, a Mapping that performs the
-*     transformation is returned along with a new Frame that describes
-*     the coordinate system that results when this Mapping is applied
-*     to the "target" coordinate system. In addition, information is
-*     returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" Frame and
-*     "template" CmpFrame from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template CmpFrame. This describes the
-*        coordinate system (or set of possible coordinate systems)
-*        into which we wish to convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        template CmpFrame axis from which it is derived. If it is not
-*        derived from any template axis, a value of -1 will be
-*        returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        target Frame axis from which it is derived. If it is not
-*        derived from any target axis, a value of -1 will be returned
-*        instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the
-*        "target" Frame and the "result" Frame (see below) and the
-*        inverse transformation will convert in the opposite
-*        direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target Frame and the template
-*        CmpFrame. In particular, when the template allows the
-*        possibility of transformaing to any one of a set of
-*        alternative coordinate systems, the "result" Frame will
-*        indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - By default, the "result" Frame will have its number of axes
-*     and axis order determined by the "template" CmpFrame. However,
-*     if the PreserveAxes attribute of the template CmpFrame is
-*     non-zero, then the axis count and axis order of the "target"
-*     Frame will be used instead.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *template;        /* Pointer to template CmpFrame structure */
-   char *template_domain;        /* Pointer to copy of template domain */
-   const char *ptr;              /* Pointer to domain string */
-   const char *target_domain;    /* Pointer to target domain string */
-   int *axes1;                   /* Pointer to axis selection 1 */
-   int *axes2;                   /* Pointer to axis selection 2 */
-   int *used;                    /* Pointer to flags array */
-   int axis2;                    /* Index for axis selection 2 */
-   int axis;                     /* Index for axis arrays */
-   int last_target;              /* Last target axis association */
-   int last_template;            /* Last template axis associateion */
-   int match;                    /* Match obtained (returned result)? */
-   int maxax1;                   /* MaxAxes attribute for component 1 */
-   int maxax2;                   /* MaxAxes attribute for component 2 */
-   int maxax;                    /* Max axes that can be matched by template */
-   int minax1;                   /* MinAxes attribute for component 1 */
-   int minax2;                   /* MinAxes attribute for component 2 */
-   int minax;                    /* Min axes that can be matched by template */
-   int naxes1;                   /* Number of axes assigned to component 1 */
-   int naxes2;                   /* Number of axes assigned to component 2 */
-   int naxes;                    /* Total number of target axes */
-   int naxes_max1;               /* First estimate of naxes_max */
-   int naxes_max2;               /* Second estimate of naxes_max */
-   int naxes_max;                /* Max number of axes to match component 1 */
-   int naxes_min1;               /* First estimate of naxes_min */
-   int naxes_min2;               /* Second estimate of naxes_min */
-   int naxes_min;                /* Min number of axes to match component 1 */
-   int permute;                  /* Permute attribute for template */
-   int result_naxes;             /* Number of result Frame axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-   
-/* Obtain a pointer to the template CmpFrame structure. */
-   template = (AstCmpFrame *) template_frame;
-
-/* Obtain the maximum number of axes that the template CmpFrame, and each 
-   component Frame of the template CmpFrame, can match. If the MaxAxes
-   attribute is set for the template, use it and assume that each
-   component Frame can match any number of axes. */
-   if( astTestMaxAxes( template ) ) {
-      maxax = astGetMaxAxes( template );
-      maxax1 = 100000;
-      maxax2 = 100000;
-   } else {      
-      maxax1 = astGetMaxAxes( template->frame1 );
-      maxax2 = astGetMaxAxes( template->frame2 );
-      maxax = maxax1 + maxax2;
-   }
-
-/* Do the same for the minimum number of axes that can be matched by the
-   template CmpFrame. */
-   if( astTestMinAxes( template ) ) {
-      minax = astGetMinAxes( template );
-      minax1 = 1;
-      minax2 = 1;
-   } else {      
-      minax1 = astGetMinAxes( template->frame1 );
-      minax2 = astGetMinAxes( template->frame2 );
-      minax = minax1 + minax2;
-   }
-
-/* Obtain the number of axes in the target Frame and test to see if it
-   is possible for the template to match it on the basis of axis
-   counts. */
-   naxes = astGetNaxes( target );
-   match = ( naxes >= minax && naxes <= maxax );
-
-/* The next requirement is that all the frames have some axes. */
-   if( naxes == 0 || maxax1 == 0 || maxax2 == 0 ) match = 0;
-
-/* The next requirement is that if the template CmpFrame has its
-   Domain attribute defined, then the target Frame must also have the
-   same Domain (although it need not be set - the default will
-   do). First check if the template has a domain. */
-   if ( astOK && match ) {
-      if ( astTestDomain( template ) ) {
-
-/* Obtain a pointer to the template domain. Then allocate memory and
-   make a copy of it (this is necessary as we will next inquire the
-   domain of the target and may over-write the buffer holding the
-   template's domain). */
-         ptr = astGetDomain( template );
-         if ( astOK ) {
-            template_domain = astStore( NULL, ptr,
-                                        strlen( ptr ) + (size_t) 1 );
-
-/* Obtain a pointer to the target domain. */
-            target_domain = astGetDomain( target );
-            
-/* Compare the domain strings for equality. Then free the memory
-   allocated above. */
-            match = astOK && !strcmp( template_domain, target_domain );
-            template_domain = astFree( template_domain );
-         }
-      }
-   }
-
-/* If a match still appears possible, determine the minimum number of
-   target axes that will have to match the first component Frame of
-   the template CmpFrame. */
-   if ( astOK && match ) {
-      naxes_min1 = minax1;
-      naxes_min2 = naxes - maxax2;
-      naxes_min = ( naxes_min1 > naxes_min2 ) ? naxes_min1 : naxes_min2;
-
-/* Also determine the maximum number of target axes that may match
-   this component of the template. */
-      naxes_max1 = maxax1;
-      naxes_max2 = naxes - minax2;
-      naxes_max = ( naxes_max1 < naxes_max2 ) ? naxes_max1 : naxes_max2;
-
-/* No match possible if the number of axes are inconsistent. */
-      if( naxes_min > naxes_max ) match = 0;
-   }
-
-/* If a match is still possible, allocate workspace. */
-   if( match ) {
-      axes1 = astMalloc( sizeof( int ) * (size_t) naxes );
-      axes2 = astMalloc( sizeof( int ) * (size_t) naxes );
-      used = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* Obtain the value of the template's Permute attribute. */
-      permute = astGetPermute( template );
-      if ( astOK ) {
-
-/* Loop to consider all possible choices of the number of template
-   axes that might match the first component Frame of the template,
-   and derive the corresponding number of axes that must match the
-   second component at the same time. */
-         for ( naxes1 = naxes_max; naxes1 >= naxes_min; naxes1-- ) {
-            naxes2 = naxes - naxes1;
-
-/* Initialise the selection of target axes that we will attempt to
-   match against the first template component (to [0,1,2,...]). */
-            for ( axis = 0; axis < naxes1; axis++ ) axes1[ axis ] = axis;
-
-/* Loop to consider all possible selections with this number of axes,
-   until a match is found. */
-            while ( 1 ) {
-
-/* Initialise an array of flags to zero for each target axis. Then set
-   the flag to 1 for each axis which is in the first selection.*/
-               for ( axis = 0; axis < naxes; axis++ ) used[ axis ] = 0;
-               for( axis = 0; axis < naxes1; axis++ ) {
-                  used[ axes1[ axis ] ] = 1;
-               }
-
-/* Generate the second selection by including all target axes that are
-   not in the first selection. */
-               axis2 = 0;
-               for ( axis = 0; axis < naxes; axis++ ) {
-                  if ( !used[ axis ] ) axes2[ axis2++ ] = axis;
-               }
-
-/* Attempt to match the target axes partitioned in this way to the two
-   template components. */
-               match = PartMatch( template, target,
-                                  naxes1, axes1, naxes2, axes2,
-                                  template_axes, target_axes, map, result, status );
-
-/* If a match was obtained but the template's Permute attribute is zero,
-   then we must check to see if the match involves permuting the target
-   axes. */
-               if ( astOK && match && !permute ) {
-
-/* Obtain the number of result Frame axes. */
-                  result_naxes = astGetNaxes( *result );
-
-/* Loop to check the target and template axis associations for all the
-   result Frame axes. The match will only be accepted if both of these
-   are monotonically increasing (indicating no axis permutation) after
-   allowing for any absent associations . */
-                  last_template = -1;
-                  last_target = -1;
-                  for ( axis = 0; axis < result_naxes; axis++ ) {
-
-/* Check the template axis association against the previous value,
-   omitting any axes witout valid associations. */
-                     if ( ( *template_axes )[ axis ] != -1 ) {
-                        if ( ( *template_axes )[ axis ] <= last_template ) {
-                           match = 0;
-                           break;
-
-/* Update the previous association value. */
-                        } else {
-                           last_template = ( *template_axes )[ axis ];
-                        }
-                     }
-
-/* Repeat this process for the target axis associations. */
-                     if ( ( *target_axes )[ axis ] != -1 ) {
-                        if ( ( *target_axes )[ axis ] <= last_target ) {
-                           match = 0;
-                           break;
-                        } else {
-                           last_target = ( *target_axes )[ axis ];
-                        }
-                     }
-                  }
-
-/* If the match was rejected because it involves an axis permutation,
-   then free the allocated memory and annul the Object pointers
-   associated with the match. */
-                  if ( !match ) {
-                     *template_axes = astFree( *template_axes );
-                     *target_axes = astFree( *target_axes );
-                     *map = astAnnul( *map );
-                     *result = astAnnul( *result );
-                  }
-               }
-
-/* If an error occurred or a match was found, quit searching,
-   otherwise generate the next axis selection and try that
-   instead. Quit if there are no more selections to try. */
-               if ( !astOK || match || 
-                    !GenAxisSelection( naxes, naxes1, axes1, status ) ) break;
-            }
-
-/* Quit the outer loop if an error occurs or a match is found. */
-            if ( !astOK || match ) break;
-         }
-      }
-
-/* Free the workspace arrays. */
-      axes1 = astFree( axes1 );
-      axes2 = astFree( axes2 );
-      used = astFree( used );
-   }
-
-/* If the target did not match the supplied template CmpFrame, see if it
-   will match either of the component Frames. First try matching it against 
-   the first component Frame. */
-   if( !match ) match = ComponentMatch( template, target, 0, template_axes, 
-                                        target_axes, map, result, status );
-
-/* If we still dont have a mcth, try matching it against the second 
-   component Frame. */
-   if( !match ) match = ComponentMatch( template, target, 1, template_axes, 
-                                        target_axes, map, result, status );
-
-/* If an error occurred, free all allocated memory, annul the result
-   Object pointers and clear all returned values. */
-   if ( !astOK ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes, 
-                        int *status ) {
-/*
-*  Name:
-*     MatchAxesX
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-*                      int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astMatchAxesX
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-*     frm2
-*        Pointer to the second Frame.
-*     frm1
-*        Pointer to the first Frame.
-*     axes
-*        Pointer to an integer array in which to return the indices of 
-*        the axes (within the first Frame) that correspond to each axis 
-*        within the second Frame. Axis indices start at 1. A value of zero 
-*        will be stored in the returned array for each axis in the second
-*        Frame that has no corresponding axis in the first Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the second Frame.
-*     status
-*        Pointer to inherited status value.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping 
-*     can be found between them using astFindFrame or astConvert. Thus, 
-*     "corresponding axes" are not necessarily identical. For instance, 
-*     SkyFrame axes in two Frames will match even if they describe 
-*     different celestial coordinate systems
-*/
-
-/* Local Variables: */
-   AstCmpFrame *frm2;
-   const int *perm;
-   int *work;
-   int i;
-   int nax2;
-   int nax1;
-   int nax;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the CmpFrame. */
-   frm2 = (AstCmpFrame *) frm2_frame;   
-
-/* Get the number of axes in the two component Frames, and the total
-   number of axes in the CmpFrame. */
-   nax2 = astGetNaxes( frm2->frame1 );
-   nax1 = astGetNaxes( frm2->frame2 );
-   nax = nax2 + nax1;
-
-/* Allocate a work array to hold the unpermuted axis indices */
-   work = astMalloc( sizeof( int )*nax );
-   if( astOK ) {
-
-/* Use the astMatchAxes method to match axes in the first component Frame 
-   within CmpFrame "frm2". Write the associated axis indices into the first 
-   part of the work array. */
-      astMatchAxes( frm1, frm2->frame1, work );
-
-/* Use the MatchAxes method to match axes in the second component 
-   Frame. Write the associated axis indices into the work array
-   following the end of the values already in there. */
-      astMatchAxes( frm1, frm2->frame2, work + nax2 );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. The index
-   into "perm" represents the external axis index, and the value held in
-   each element of "perm" represents the corresponding internal axis index. */
-      perm = astGetPerm( frm2 );
-      if( astOK ) {
-
-/* Copy the frm2 axis indices from the work array into the returned "axes" 
-   array, permuting their order into the external axis order of the 
-   CmpFrame. */
-         for( i = 0; i < nax; i++ ) axes[ i ] = work[ perm[ i ] ];
-      }
-
-/* Free resources */
-      work = astFree( work );
-   }
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-*  Name:
-*     Norm
-
-*  Purpose:
-*     Normalise a set of CmpFrame coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void Norm( AstAxis *this, double value[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astNorm method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a set of CmpFrame coordinate values,
-*     which might potentially be unsuitable for display to a user (for
-*     instance, may lie outside the expected range of values) into a
-*     set of acceptable alternative values suitable for display.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     value
-*        An array of double, with one element for each CmpFrame axis.
-*        This should contain the initial set of coordinate values,
-*        which will be modified in place.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   const int *perm;              /* Axis permutation array */
-   double *v;                    /* Pointer to permuted coordinates */
-   int axis;                     /* Loop counter for axes */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes;                    /* Number of axes in CmpFrame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
-   perm = astGetPerm( this );
-
-/* Obtain the number of axes in the CmpFrame and in the first
-   component Frame. */
-   naxes = astGetNaxes( this );
-   naxes1 = astGetNaxes( this->frame1 );
-
-/* Allocate memory to hold the permuted coordinates. */
-   v = astMalloc( sizeof( double ) * (size_t) naxes );
-   if ( astOK ) {
-
-/* Permute the coordinates using the CmpFrame's axis permutation array
-   to put them into the order required internally (i.e. by the two
-   component Frames). */
-      for ( axis = 0; axis < naxes; axis++ ) v[ perm[ axis ] ] = value[ axis ];
-
-/* Invoke the astNorm method of both component Frames, passing the
-   relevant (permuted) coordinate values for normalisation. */
-      astNorm( this->frame1, v );
-      astNorm( this->frame2, v + naxes1 );
-
-/* Copy the normalised values back into the original coordinate array,
-   un-permuting them in the process. */
-      for ( axis = 0; axis < naxes; axis++ ) value[ axis ] = v[ perm[ axis ] ];
-   }
-
-/* Free the memory used for the permuted coordinates. */
-   v = astFree( v );
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
-                     AstMapping *reg, int *status ) {
-/*
-*  Name:
-*     NormBox
-
-*  Purpose:
-*     Extend a box to include effect of any singularities in the Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-*                      AstMapping *reg, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astNormBox method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function modifies a supplied box to include the effect of any
-*     singularities in the co-ordinate system represented by the Frame.
-*     For a normal Cartesian coordinate system, the box will be returned
-*     unchanged. Other classes of Frame may do other things. For instance,
-*     a SkyFrame will check to see if the box contains either the north
-*     or south pole and extend the box appropriately.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     lbnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        lower axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     ubnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        upper axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     reg
-*        A Mapping which should be used to test if any singular points are
-*        inside or outside the box. The Mapping should leave an input
-*        position unchanged if the point is inside the box, and should
-*        set all bad if the point is outside the box.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;
-   AstCmpMap *m1;
-   AstCmpMap *m2;
-   AstCmpMap *m3;
-   AstCmpMap *m4;
-   AstCmpMap *m5;
-   AstCmpMap *m6;
-   AstPermMap *pm1;
-   AstPermMap *pm2;
-   AstPermMap *pm3;
-   const int *perm;  
-   double *vl;       
-   double *vu;       
-   int *inperm;
-   int axis;         
-   int naxes1;       
-   int naxes;        
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
-   perm = astGetPerm( this );
-
-/* Obtain the number of axes in the CmpFrame and in the first
-   component Frame. */
-   naxes = astGetNaxes( this );
-   naxes1 = astGetNaxes( this->frame1 );
-
-/* Allocate memory to hold the permuted coordinates. */
-   vl = astMalloc( sizeof( double ) * (size_t) naxes );
-   vu = astMalloc( sizeof( double ) * (size_t) naxes );
-   inperm = astMalloc( sizeof( int ) * (size_t) naxes );
-   if( inperm ) {
-
-/* Permute the coordinates using the CmpFrame's axis permutation array
-   to put them into the order required internally (i.e. by the two
-   component Frames). */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         vl[ perm[ axis ] ] = lbnd[ axis ];
-         vu[ perm[ axis ] ] = ubnd[ axis ];
-      }
-
-/* Create a PermMap with a forward transformation which reorders a position 
-   which uses internal axis ordering into a position which uses external axis 
-   ordering. */
-      pm1 = astPermMap( naxes, NULL, naxes, perm, NULL, "", status );
-
-/* Put it in front of the supplied Mapping. The combination transforms an
-   input internal position into an output external position.  */
-      m1 = astCmpMap( pm1, reg, 1, "", status );
-
-/* Invert it and add it to the end. This combination now transforms an
-   input internal position into an output internal position.  */
-      astInvert( pm1 );
-      m2 = astCmpMap( m1, pm1, 1, "", status );
-
-/* Create a PermMap with a forward transformation which copies the lower
-   naxes1 inputs to the same outputs, and supplies AST__BAD for the other
-   outputs. */
-      for( axis = 0; axis < naxes1; axis++ ) inperm[ axis ] = axis;
-      pm2 = astPermMap( naxes1, inperm, naxes, NULL, NULL, "", status );
-
-/* Put it in front of the Mapping created above, then invert it and add
-   it at the end. */
-      m3 = astCmpMap( pm2, m2, 1, "", status );
-      astInvert( pm2 );
-      m4 = astCmpMap( m3, pm2, 1, "", status );
-
-/* Invoke the astNormBox method of the first component Frame, passing the
-   relevant (permuted) coordinate values for normalisation. */
-      astNormBox( this->frame1, vl, vu, m4 );
-
-/* Create a PermMap with a forward transformation which copies the upper
-   inputs to the same outputs, and supplied AST__BAD for the other
-   outputs. */
-      for( axis = 0; axis < naxes - naxes1; axis++ ) inperm[ axis ] = naxes1 + axis;
-      pm3 = astPermMap( naxes1, inperm, naxes, NULL, NULL, "", status );
-
-/* Put it in front of the Mapping created above, then invert it and add
-   it at the end. */
-      m5 = astCmpMap( pm3, m2, 1, "", status );
-      astInvert( pm3 );
-      m6 = astCmpMap( m5, pm3, 1, "", status );
-
-/* Invoke the astNormBox method of the seond component Frame, passing the
-   relevant (permuted) coordinate values for normalisation. */
-      astNormBox( this->frame2, vl + naxes1, vu + naxes1, m6 );
-
-/* Copy the normalised values back into the original coordinate array,
-   un-permuting them in the process. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         lbnd[ axis ] = vl[ perm[ axis ] ];
-         ubnd[ axis ] = vu[ perm[ axis ] ];
-      }
-
-/* Free resources. */
-      pm1 = astAnnul( pm1 );
-      pm2 = astAnnul( pm2 );
-      pm3 = astAnnul( pm3 );
-      m1 = astAnnul( m1 );
-      m2 = astAnnul( m2 );
-      m3 = astAnnul( m3 );
-      m4 = astAnnul( m4 );
-      m5 = astAnnul( m5 );
-      m6 = astAnnul( m6 );
-   }
-   inperm = astFree( inperm );
-   vl = astFree( vl );
-   vu = astFree( vu );
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
-                    const double point2[], double offset, double point3[], int *status ) {
-/*
-*  Name:
-*     Offset
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void Offset( AstFrame *this,
-*                  const double point1[], const double point2[],
-*                  double offset, double point3[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astOffset method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the CmpFrame coordinate values of a point
-*     which is offset a specified distance along the geodesic curve
-*     between two other points.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     point1
-*        An array of double, with one element for each CmpFrame axis.
-*        This should contain the coordinates of the point marking the
-*        start of the geodesic curve.
-*     point2
-*        An array of double, with one element for each CmpFrame axis.
-*        This should contain the coordinates of the point marking the
-*        end of the geodesic curve.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be towards the second
-*        point. If it is negative, it will be in the opposite
-*        direction. This offset need not imply a position lying
-*        between the two points given, as the curve will be
-*        extrapolated if necessary.
-*     point3
-*        An array of double, with one element for each CmpFrame axis
-*        in which the coordinates of the required point will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - "Bad" coordinate values will also be returned if the two
-*     points supplied are coincident (or otherwise fail to uniquely
-*     specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   const int *perm;              /* Pointer to axis permutation array */
-   double *p1;                   /* Permuted coordinates for point1 */
-   double *p2;                   /* Permuted coordinates for point2 */
-   double *p3;                   /* Permuted coordinates for point3 */
-   double dist1;                 /* Distance between input points in frame1 */
-   double dist2;                 /* Distance between input points in frame2 */
-   double dist;                  /* Total distance between input points */
-   double offset1;               /* Offset distance required in frame1 */
-   double offset2;               /* Offset distance required in frame2 */
-   int axis;                     /* Loop counter for axes */
-   int bad;                      /* Set bad output coordinates? */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes;                    /* Total number of axes in CmpFrame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the CmpFrame. */
-   naxes = astGetNaxes( this );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
-   perm = astGetPerm( this );
-
-/* Allocate workspace. */
-   p1 = astMalloc( sizeof( double ) * (size_t) naxes );
-   p2 = astMalloc( sizeof( double ) * (size_t) naxes );
-   p3 = astMalloc( sizeof( double ) * (size_t) naxes );
-   
-/* Initialise variables to avoid compiler warnings. */
-   dist1 = 0.0;
-   dist2 = 0.0;
-   offset1 = 0.0;
-   offset2 = 0.0;
-   naxes1 = 0;
-
-/* Initialise a flag to indicate whether "bad" coordinates should be
-   returned. */
-   bad = 0;
-
-/* Check that all the coordinates of both input points are OK. If not,
-   set the "bad" flag and quit checking. */
-   if ( astOK ) {
-      for ( axis = 0; axis < naxes; axis++ ) {
-         if ( ( point1[ axis ] == AST__BAD ) ||
-              ( point2[ axis ] == AST__BAD ) ) {
-            bad = 1;
-            break;
-
-/* If the coordinates are OK, apply the axis permutation array to
-   obtain them in the required order. */
-         } else {
-            p1[ perm[ axis ] ] = point1[ axis ];
-            p2[ perm[ axis ] ] = point2[ axis ];
-         }
-      }
-   }
-
-/* If OK, obtain the number of axes in the first component Frame. */
-   if ( astOK && !bad ) {
-      naxes1 = astGetNaxes( this->frame1 );
-
-/* Project the two input points into the two component Frames and
-   determine the distance between the points in each Frame. */
-      dist1 = astDistance( this->frame1, p1, p2 );
-      dist2 = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* Check that the returned distances are not bad. */
-      if ( astOK ) bad = ( ( dist1 == AST__BAD ) || ( dist2 == AST__BAD ) );
-   }
-
-/* If OK, calculate the total distance between the two points. */
-   if ( astOK && !bad ) {
-      dist = sqrt( dist1 * dist1 + dist2 * dist2 );
-
-/* If the points are co-incident, but "offset" is non-zero, then set
-   the "bad" flag. */
-      if ( dist == 0.0 ) {
-         if ( offset != 0.0 ) {
-            bad = 1;
-
-/* Otherwise, set the offset distance required in each Frame to
-   zero. */
-         } else {
-            offset1 = 0.0;
-            offset2 = 0.0;
-         }
-
-/* If the points are not co-incident, divide the total offset required
-   between each component Frame in such a way that the path being
-   followed will pass through the second point. */
-      } else {
-         offset1 = offset * dist1 / dist;
-         offset2 = offset * dist2 / dist;
-      }
-   }
-
-/* If OK, apply the separate offsets to each component Frame. */
-   if ( astOK && !bad ) {
-      astOffset( this->frame1, p1, p2, offset1, p3 );
-      astOffset( this->frame2, p1 + naxes1, p2 + naxes1, offset2,
-                 p3 + naxes1 );
-
-/* Copy the resulting coordinates into the output array "point3",
-   permuting them back into the required order. */
-      if ( astOK ) {
-         for ( axis = 0; axis < naxes; axis++ ) {
-            point3[ axis ] = p3[ perm[ axis ] ];
-
-/* If any of the result coordinates is bad, set the "bad" flag and
-   quit copying. */
-            if ( point3[ axis ] == AST__BAD ) {
-               bad = 1;
-               break;
-            }
-         }
-      }
-   }
-
-/* Free the workspace arrays. */
-   p1 = astFree( p1 );
-   p2 = astFree( p2 );
-   p3 = astFree( p3 );
-
-/* If no error has occurred, but bad coordinates must be returned,
-   then set these in the output array. */
-   if ( astOK && bad ) {
-      for ( axis = 0; axis < naxes; axis++ ) point3[ axis ] = AST__BAD;
-   }
-}
-
-static void Overlay( AstFrame *template_frame, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template CmpFrame on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astOverlay
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes from a CmpFrame on to another Frame, 
-*     so as to over-ride selected attributes of that second Frame. Normally 
-*     only those attributes which have been specifically set in the template 
-*     will be transferred. This implements a form of defaulting, in which 
-*     a Frame acquires attributes from the template, but retains its
-*     original attributes (as the default) if new values have not previously 
-*     been explicitly set in the template.
-
-*  Parameters:
-*     template
-*        Pointer to the template CmpFrame, for whose current Frame
-*        values should have been explicitly set for any attribute
-*        which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of
-*        the "result" Frame (see below). For each axis in the result
-*        frame, the corresponding element of this array should contain
-*        the (zero-based) index of the axis in the current Frame of
-*        the template CmpFrame to which it corresponds. This array is
-*        used to establish from which template Frame axis any
-*        axis-dependent attributes should be obtained.
-*
-*        If any axis in the result Frame is not associated with a
-*        template Frame axis, the corresponding element of this array
-*        should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *res;             /* Pointer to the result CmpFrame structure */
-   AstCmpFrame *template;        /* Pointer to the template CmpFrame structure */
-   AstFrame *sub1;               /* Template subframe for 1st result subframe */
-   AstFrame *sub2;               /* Template subframe for 2nd result subframe */
-   const int *perm;              /* Template axis permutation array */
-   const int *rperm;             /* Result axis permutation array */
-   int *axes1;                   /* Axis associations with template frame1 */
-   int *axes2;                   /* Axis associations with template frame2 */
-   int done;                     /* Have attributes been overlayed yet? */
-   int i;                        /* Index of result axis */
-   int icmp;                     /* Internal template axis number */
-   int isfirst;                  /* Res. subframe -> 1st template subframe? */ 
-   int issecond;                 /* Res. subframe -> 2nd template subframe? */ 
-   int j;                        /* Index of template axis */
-   int nc1;                      /* Number of axes in template frame1 */
-   int nres1;                    /* Number of axes in first result subframe */
-   int nres2;                    /* Number of axes in second result subframe */
-   int nres;                     /* Number of axes in result Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   template = (AstCmpFrame *) template_frame;
-
-/* Get the axis permutation array for the template CmpFrame. */
-   perm = astGetPerm( template );
-
-/* Get the number of axes in the first component Frame in the template
-   CmpFrame. */
-   nc1 = astGetNaxes( template->frame1 );
-
-/* Indicate we have not yet overlayed any attributes. */
-   done = 0;
-
-/* If the result Frame is a CmpFrame... */
-   if( astIsACmpFrame( result ) ) {
-
-/* Get the number of axes in the two component Frames of the result CmpFrame. */
-      res = (AstCmpFrame *) result;
-      nres1 = astGetNaxes( res->frame1 );
-      nres2 = astGetNaxes( res->frame2 );
-
-/* Get the total number of axes in the result CmpFrame. */
-      nres = nres1 + nres2;
-
-/* Get the axis permutation array for the result CmpFrame. */
-      rperm = astGetPerm( result );
-
-/* Allocate memory for two new axes arrays, one for each result sub-frame. */
-      axes1 = astMalloc( sizeof(int)*(size_t)nres1 );
-      axes2 = astMalloc( sizeof(int)*(size_t)nres2 );
-      if( astOK ) {
-
-/* Assume that there is a 1-to-1 correspondence between axes in the
-   subframes of the result and template CmpFrame. That is, all the axes
-   in each result sub-frame are overlayed from the same template sub-frame. */
-         done = 1;
-
-/* Loop round each axis in the first result sub-frame. */
-         isfirst = 0;
-         issecond = 0;
-         for( i = 0; i < nres1; i++ ) {
-
-/* Find the external result CmpFrame axis index (j) for internal axis i. */
-            for( j = 0; j < nres; j++ ) {
-               if( rperm[ j ] == i ) break;
-            }
-
-/* Get the internal axis number within the template CmpFrame which
-   provides attribute values for the current result axis. */
-            icmp = perm[ template_axes ? template_axes[ j ] : j ];
-
-/* If this template axis is in the first template subframe, store the 
-   corresponding internal frame axis index in "axes1" and set a flag
-   indicating that the first result subframe corresponds to the first
-   template subframe. If the correspondance has already been established, 
-   but is broken by this axis, then set "done" false and exit the axis
-   loop. */
-            if( icmp < nc1 ) { 
-               if( issecond ) {
-                  done = 0;
-                  break;
-               } else {
-                  isfirst = 1;
-                  axes1[ i ] = icmp;
-               }
-         
-            } else {
-               if( isfirst ) {
-                  done = 0;
-                  break;
-               } else {
-                  issecond = 1;
-                  axes1[ i ] = icmp - nc1;
-               }
-            }         
-         }
-
-/* Save a pointer to the template subframe which is associated with the first 
-   result subframe.*/
-         sub1 = isfirst ?  template->frame1 :template->frame2;
-
-/* Now do the same for the axes in the second result sub-frame. */
-         isfirst = 0;
-         issecond = 0;
-         for( i = 0; i < nres2; i++ ) {
-            for( j = 0; j < nres; j++ ) {
-               if( rperm[ j ] == i + nres1 ) break;
-            }
-
-            icmp = perm[ template_axes ? template_axes[ j ] : j ];
-
-            if( icmp < nc1 ) { 
-               if( issecond ) {
-                  done = 0;
-                  break;
-               } else {
-                  isfirst = 1;
-                  axes2[ i ] = icmp;
-               }
-         
-            } else {
-               if( isfirst ) {
-                  done = 0;
-                  break;
-               } else {
-                  issecond = 1;
-                  axes2[ i ] = icmp - nc1;
-               }
-            }         
-         }
-
-/* Save a pointer to the template subframe which is associated with the
-   second result subframe.*/
-         sub2 = isfirst ?  template->frame1 :template->frame2;
-
-/* If the two used template subframes are the same, something has gone
-   wrong. */
-         if( sub1 == sub2 ) done = 0;
-
-/* If all axes within each result subframe are associated with the same
-   template subframe we continue to use the subframe astOverlay methods. */
-         if( done ) {
-
-/* Overlay the first result subframe. */
-            astOverlay( sub1, axes1, res->frame1 );
-            astOverlay( sub2, axes2, res->frame2 );
-         }
-      }
-
-/* Free the axes arrays. */
-      axes1 = astFree( axes1 );
-      axes2 = astFree( axes2 );
-   }
-
-/* If we have not yet overlayed any attributes... */
-   if( !done ) {
-
-/* Get the number of axes in the result Frame. */
-      nres = astGetNaxes( result );
-
-/* Allocate memory for two new template_axes arrays. */
-      axes1 = astMalloc( sizeof(int)*(size_t)nres );
-      axes2 = astMalloc( sizeof(int)*(size_t)nres );
-      if( astOK ) {
-
-/* Set elements to -1 in "axes1" if they do not refer to the first component 
-   Frame in the template CmpFrame. Likewise, set elements to -1 in "axes2" if 
-   they do not refer to the second component Frame in the template CmpFrame. */
-         for( i = 0; i < nres; i++ ) {
-
-/* Get the internal axis number within the template CmpFrame which
-   provides attribute values for the current results axis. */
-            icmp = perm[ template_axes ? template_axes[ i ] : i ];
-
-/* If this template axis is in the first component Frame, store the 
-   corresponding internal frame axis index in "axes1" and set "axis2" to
-   -1. */
-            if( icmp < nc1 ) { 
-               axes1[ i ] = icmp;
-               axes2[ i ] = -1;
-         
-/* If this template axis is in the second component Frame, store the 
-   corresponding internal frame axis index in "axes2" and set "axis1" to
-   -1. */
-            } else {
-               axes1[ i ] = -1;
-               axes2[ i ] = icmp - nc1;
-            }         
-         }
-
-/* Now use the astOverlay methods of the two component Frames to overlay
-   attributes onto the appropriate axes of the results Frame. */
-         astOverlay( template->frame1, axes1, result );
-         astOverlay( template->frame2, axes2, result );
-      }
-
-/* Free the axes arrays. */
-      axes1 = astFree( axes1 );
-      axes2 = astFree( axes2 );
-   }
-}
-
-static void PartitionSelection( int nselect, const int select[],
-                                const int perm[], int naxes1, int naxes2,
-                                int iframe[], int following, int *status ) {
-/*
-*  Name:
-*     PartitionSelection
-
-*  Purpose:
-*     Partition a CmpFrame axis selection into two component Frame selections.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void PartitionSelection( int nselect, const int select[],
-*                              const int perm[], int naxes1, int naxes2,
-*                              int iframe[], int following, int *status )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This function accepts an array containing the indices of axes
-*     which are to be selected from a CmpFrame, and partitions these
-*     indices to indicate which must be selected from each of the
-*     CmpFrame's two component Frames.
-*
-*     This operation is trivial if all the axis indices supplied refer
-*     to valid CmpFrame axes. However, if some of them do not (these
-*     should generally be set to -1), this function assigns these
-*     "extra" axes to one or other of the component Frames by
-*     associating them with the axes selected immediately before (or
-*     after). Allowance is made for the possibility that several
-*     consecutive selected axes may be "extra" ones, or even that they
-*     may all be. The CmpFrame's axis permutation array is also taken
-*     into account.
-
-*  Parameters:
-*     nselect
-*        The number of axes to be selected.
-*     select
-*        An array containing the (zero-based) indices of the CmpFrame
-*        axes to be selected, or -1 where "extra" axes are required.
-*     perm
-*        The CmpFrame's axis permutation array.
-*     naxes1
-*        The number of axes in the CmpFrame's first component Frame.
-*     naxes2
-*        The number of axes in the CmpFrame's second component Frame.
-*     iframe
-*        An array with "nselect" elements in which to return a number
-*        (either 1 or 2) to indicate to which component Frame (frame1
-*        or frame2) each selected axis belongs.
-*     following
-*        If this is zero, "extra" axes will be associated with the
-*        preceding normal selected axis which appears in the "select"
-*        array (if any), otherwise they will be associated with the
-*        following normal selected axis.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int end;                      /* Loop termination value */
-   int ifr;                      /* Choice of Frame for next "extra" axis */
-   int inc;                      /* Loop increment value */
-   int iselect;                  /* Loop counter for axis selections */
-   int naxes;                    /* Total number of CmpFrame axes */
-   int start;                    /* Loop starting value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the total number of CmpFrame axes. */
-   naxes = naxes1 + naxes2;
-
-/* Loop through each axis selection and identify those which refer to
-   valid CmpFrame axes. */
-   for ( iselect = 0; iselect < nselect; iselect++ ) {
-      if ( ( select[ iselect ] >= 0 ) && ( select[ iselect ] < naxes ) ) {
-
-/* For these selections (only), enter a flag into the "iframe" array
-   which indicates which component Frame the selected axis resides
-   in. Permute each axis index before deciding this. */
-         iframe[ iselect ] = 1 + ( perm[ select[ iselect ] ] >= naxes1 );
-      }
-   }
-
-/* Set up a start, end, and increment value for looping through the
-   array of axis selections forward (if "following" is 0) or backwards
-   (otherwise). */
-   start = following ? nselect - 1 : 0;
-   end = following ? -1 : nselect;
-   inc = following ? -1 : 1;
-
-/* Set the default choice of component Frame. This will be used if
-   there are no normal axis selections to guide the choice at all. */
-   ifr = following ? 2 : 1;
-
-/* Search for the first normal axis selection so that we can replace
-   this default, if possible. (Here, "first" actually means "last" if
-   "following" is set, because we will then be scanning the array of
-   selections in reverse.) */
-   for ( iselect = start; iselect != end; iselect += inc ) {
-
-/* Identify normal axis selections and obtain the choice of component
-   Frame for the first one found. The resulting value "ifr" will be
-   used for initial (or final, if "following" is set) "extra"
-   selections for which no earlier normal selection exists - see
-   below. */
-      if ( ( select[ iselect ] >= 0 ) && ( select[ iselect ] < naxes ) ) {
-         ifr = iframe[ iselect ];
-         break;
-      }
-   }
-
-/* Loop through the selections again to allocate a choice of Frame to
-   the "extra" selected axes. */
-   for ( iselect = start; iselect != end; iselect += inc ) {
-
-/* Remember the component Frame used by the most recently encountered
-   normal axis selection. */
-      if ( ( select[ iselect ] >= 0 ) && ( select[ iselect ] < naxes ) ) {
-         ifr = iframe[ iselect ];
-
-/* For "extra" axes, allocate the most recent Frame choice. The
-   default choice (found above) will apply if no "most recent" choice
-   has been encountered. */
-      } else {
-         iframe[ iselect ] = ifr;
-      }
-   }
-}
-
-static int PartMatch( AstCmpFrame *template, AstFrame *target,
-                      int naxes1, const int axes1[],
-                      int naxes2, const int axes2[],
-                      int **template_axes, int **target_axes,
-                      AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     PartMatch
-
-*  Purpose:
-*     Match a CmpFrame template to partitioned target axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int PartMatch( AstCmpFrame *template, AstFrame *target,
-*                    int naxes1, const int axes1[],
-*                    int naxes2, const int axes2[],
-*                    int **template_axes, int **target_axes,
-*                    AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This function matches a "template" CmpFrame to a "target" Frame
-*     and determines whether it is possible to convert coordinates
-*     between them.  If it is, a Mapping that performs the
-*     transformation is returned along with a new Frame that describes
-*     the coordinate system that results when this Mapping is applied
-*     to the "target" coordinate system. In addition, information is
-*     returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" Frame and
-*     "template" CmpFrame from which they are derived.
-*
-*     To simplify the matching process for a CmpFrame template, this
-*     function requires the caller to specify how the axes of the
-*     target Frame should be partitioned between the two component
-*     Frames of the template. The function attempts to find a match
-*     using this axis partitioning only. In general, the way in which
-*     the target axes must be partitioned is not known in advance, so
-*     this function must be invoked several times with alternative
-*     partitioning before a match will be found.
-
-*  Parameters:
-*     template
-*        Pointer to the template CmpFrame. This describes the
-*        coordinate system (or set of possible coordinate systems)
-*        into which we wish to convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     naxes1
-*        The number of target axes to be matched against the first
-*        component Frame of the template CmpFrame.
-*     axes1
-*        An array with "naxes1" elements containing the (zero-based)
-*        indices of the target axes to be matched against the first
-*        component Frame. Order is not significant.
-*     naxes2
-*        The number of target axes to be matched against the second
-*        component Frame of the template CmpFrame.
-*     axes2
-*        An array with "naxes2" elements containing the (zero-based)
-*        indices of the target axes to be matched against the second
-*        component Frame. Order is not significant.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        template CmpFrame axis from which it is derived. If it is not
-*        derived from any template axis, a value of -1 will be
-*        returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        target Frame axis from which it is derived. If it is not
-*        derived from any target Frame axis, a value of -1 will be
-*        returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the
-*        "target" Frame and the "result" Frame (see below) and the
-*        inverse transformation will convert in the opposite
-*        direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target Frame and the template
-*        CmpFrame. In particular, when the template allows the
-*        possibility of transformaing to any one of a set of
-*        alternative coordinate systems, the "result" Frame will
-*        indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - The "axes1" and "axes2" arrays should not contain any axis
-*     indices in common and should, taken together, list all the axes
-*     of the target Frame.
-*     - By default, the "result" Frame will have its number of axes
-*     and axis order determined by the "template" CmpFrame. However,
-*     if the PreserveAxes attribute of the template is non-zero, then
-*     the axis count and axis order of the "target" Frame will be used
-*     instead.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frame1;             /* Pointer to first sub-Frame from target */
-   AstFrame *frame2;             /* Pointer to second sub-Frame from target */
-   AstFrame *result1;            /* Result Frame pointer from first match */
-   AstFrame *result2;            /* Result Frame pointer from second match */
-   AstFrame *tmp_frame;          /* Temporary Frame pointer */
-   AstMapping *junk_map;         /* Mapping pointer returned by astSubFrame */
-   AstMapping *map1;             /* Mapping pointer from first match */
-   AstMapping *map2;             /* Mapping pointer from second match */
-   AstMapping *permmap;          /* Pointer to PermMap */
-   AstMapping *tmp_map;          /* Temporary Mapping pointer */
-   const int *perm;              /* Template axis permutation array pointer */
-   int *inperm;                  /* Pointer to temporary permutation array */
-   int *invperm;                 /* Inverse axis permutation array pointer */
-   int *outperm;                 /* Pointer to temporary permutation array */
-   int *pick;                    /* Pointer to array of axis selections */
-   int *result_order;            /* Relative result axis order array pointer */
-   int *result_perm;             /* Result axis permutation array pointer */
-   int *target_assoc;            /* Target axis association array pointer */
-   int *target_axes1;            /* Target axis associations from 1st match */
-   int *target_axes2;            /* Target axis associations from 2nd match */
-   int *template_assoc;          /* Template axis association array pointer */
-   int *template_axes1;          /* Template axis associations, 1st match */
-   int *template_axes2;          /* Template axis associations, 2nd match */
-   int first;                    /* Axis in 1st component? */
-   int full_axis;                /* Result Frame axis index, before sub-set */
-   int match1;                   /* First match successful? */
-   int match2;                   /* Second match successful? */
-   int match;                    /* Both matches successful? (result) */
-   int match_end1;               /* MatchEnd attribute for component 1 */
-   int match_end2;               /* MatchEnd attribute for component 2 */
-   int match_end;                /* MatchEnd attribute for template */
-   int match_end_set;            /* Component MatchEnd attribute set? */
-   int output_axis;              /* Output axis index */
-   int part_result_axis;         /* Result Frame component axis index */
-   int part_target_axis;         /* Target Frame component axis index */
-   int part_template_axis;       /* Template CmpFrame component axis index */
-   int permute_set;              /* Component Permute attribute set? */
-   int permute_value;            /* Component Permute attribute value */
-   int preserve_axes;            /* Template PreserveAxes attribute value */
-   int preserve_axes_set;        /* Component PreserveAxes attribute set? */
-   int ref_naxes;                /* Number of reference Frame axes */
-   int result_axis;              /* Result Frame axis index */
-   int result_naxes1;            /* Number of result Frame axes, component 1 */
-   int result_naxes2;            /* Number of result Frame axes, component 2 */
-   int result_naxes;             /* Total number of result Frame axes */
-   int target_axis;              /* Target Frame axis index */
-   int target_naxes;             /* Number of target Frame axes */
-   int template_axis;            /* Template CmpFrame axis index */
-   int template_naxes1;          /* Number of template axes, component 1 */
-   int template_naxes;           /* Total number of template axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Initialise other variables to avoid compiler errors. */
-   ref_naxes = 0;
-
-/* Select the required sub-Frames from the target. */
-/* ----------------------------------------------- */
-/* We first create two sub-Frames (that can be matched against the two
-   template component Frames) by selecting the two specified sets of
-   axes from the target. This is done without overlaying any template
-   attributes. Annul the Mappings produced by this process, as these
-   are not needed. */
-
-   frame1 = NULL;
-   junk_map = NULL;
-   (void) astSubFrame( target, NULL, naxes1, axes1, NULL, &junk_map, &frame1 );
-   if( junk_map ) junk_map = astAnnul( junk_map );
-
-   frame2 = NULL;
-   junk_map = NULL;
-   (void) astSubFrame( target, NULL, naxes2, axes2, NULL, &junk_map, &frame2 );
-   if( junk_map ) junk_map = astAnnul( junk_map );
-
-/* Match the sub-Frames with the template component Frames. */
-/* -------------------------------------------------------- */
-/* We now have two sub-Frames obtained from the target, and will
-   attempt to match these with the component Frames contained within
-   the template CmpFrame. */
-
-/* Before using each template component Frame, see whether any of its
-   attributes that control matching is "un-set". If so, over-ride it
-   with the attribute value of the template CmpFrame as a whole. */
-   match_end_set = astTestMatchEnd( template->frame1 );
-   if ( !match_end_set ) {
-      astSetMatchEnd( template->frame1, astGetMatchEnd( template ) );
-   }
-   preserve_axes_set = astTestPreserveAxes( template->frame1 );
-   if ( !preserve_axes_set ) {
-      astSetPreserveAxes( template->frame1, astGetPreserveAxes( template ) );
-   }
-
-/* We must also temporarily set the Permute attribute to 1 (this is
-   normally the default, but might have been set otherwise). This is
-   needed so that permutations of the target axes will be considered.
-   Without this, the order in which the axes are presented is
-   significant and we would have to test all the permutations. If the
-   Permute attribute of the template CmpFrame as a whole is zero, then
-   the resulting match may still have to be rejected, but this must be
-   done at a higher level. */
-   permute_set = astTestPermute( template->frame1 );
-   permute_value = ( permute_set ) ? astGetPermute( template->frame1 ) : 0;
-   astSetPermute( template->frame1, 1 );
-
-/* Test for a match with the first template component Frame. */
-   match1 = astMatch( template->frame1, frame1,
-                      &template_axes1, &target_axes1, &map1, &result1 );
-
-/* Clear the attribute values again afterwards if necessary. */
-   if ( !match_end_set ) astClearMatchEnd( template->frame1 );
-   if ( !preserve_axes_set ) astClearPreserveAxes( template->frame1 );
-
-/* Also restore the original Permute attribute setting. */
-   if ( permute_set ) {
-      astSetPermute( template->frame1, permute_value );
-   } else {
-      astClearPermute( template->frame1 );
-   }
-
-/* Repeat the whole process for the second component Frame. */
-   match_end_set = astTestMatchEnd( template->frame2 );
-   if ( !match_end_set ) {
-      astSetMatchEnd( template->frame2, astGetMatchEnd( template ) );
-   }
-   preserve_axes_set = astTestPreserveAxes( template->frame2 );
-   if ( !preserve_axes_set ) {
-      astSetPreserveAxes( template->frame2, astGetPreserveAxes( template ) );
-   }
-   permute_set = astTestPermute( template->frame2 );
-   if ( permute_set ) permute_value = astGetPermute( template->frame2 );
-   astSetPermute( template->frame2, 1 );
-
-   match2 = astMatch( template->frame2, frame2,
-                      &template_axes2, &target_axes2, &map2, &result2 );
-
-   if ( !match_end_set ) astClearMatchEnd( template->frame2 );
-   if ( !preserve_axes_set ) astClearPreserveAxes( template->frame2 );
-   if ( permute_set ) {
-      astSetPermute( template->frame2, permute_value );
-   } else {
-      astClearPermute( template->frame2 );
-   }
-
-/* See if both matches were successful. */
-   if ( astOK && match1 && match2 ) {
-      match = 1;
-
-/* Obtain the number of target axes. */
-      target_naxes = astGetNaxes( target );
-
-/* Obtain the number of axes in each of the result Frames produced by
-   the matching operation. */
-      result_naxes1 = astGetNaxes( result1 );
-      result_naxes2 = astGetNaxes( result2 );
-
-/* Obtain the number of axes in the first template component Frame and
-   in the template CmpFrame as a whole. */
-      template_naxes1 = astGetNaxes( template->frame1 );
-      template_naxes = astGetNaxes( template );
-
-/* Obtain the value of the MatchEnd attribute for each of the
-   template's component Frames and for the template CmpFrame as a
-   whole. */
-      match_end1 = astGetMatchEnd( template->frame1 );
-      match_end2 = astGetMatchEnd( template->frame2 );
-      match_end = astGetMatchEnd( template );
-
-/* Obtain a pointer to the template CmpFrame's axis permutation
-   array. Allocate space for a further array and fill it with the
-   inverse of this axis permutation. */
-      perm = astGetPerm( template );
-      invperm = astMalloc( sizeof( int ) * (size_t) template_naxes );
-      if ( astOK ) {
-         for ( template_axis = 0; template_axis < template_naxes;
-                                  template_axis++ ) {
-            invperm[ perm[ template_axis ] ] = template_axis;
-         }
-      }
-
-/* Generate template and target axis associations. */
-/* ----------------------------------------------- */
-/* We now construct two arrays which identify the axis associations
-   between the result axes (in the order obtained from the matching
-   process above) and the axes of the template and target. This
-   involves tracing back through several steps. */
-
-/* First calculate the total number of result axes and allocate memory
-   for the association arrays. */
-      result_naxes = result_naxes1 + result_naxes2;
-      template_assoc = astMalloc( sizeof( int ) * (size_t) result_naxes );
-      target_assoc = astMalloc( sizeof( int ) * (size_t) result_naxes );
-      if ( astOK ) {
-
-/* Produce associations for each result axis in turn. */
-         for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-
-/* Decide whether this result axis is contained in the first (or
-   second) individual result Frame. */
-            first = ( result_axis < result_naxes1 );
-
-/* Obtain the index of the axis within the individual result Frame.
-   This involves adjusting for the axis numbering offset of the second
-   result Frame if necessary. */
-            part_result_axis = first ? result_axis :
-                                       result_axis - result_naxes1;
-
-/* Find the template and target axis associations for this axis by
-   looking them up in the association arrays returned from the
-   matching process. This gives axis indices that apply to the
-   individual template/target Frames supplied as input to the matching
-   process. */
-            part_template_axis = first ? template_axes1[ part_result_axis ] :
-                                         template_axes2[ part_result_axis ];
-            part_target_axis = first ? target_axes1[ part_result_axis ] :
-                                       target_axes2[ part_result_axis ];
-
-/* Check that the resulting template association identifies a valid
-   template axis. */
-            if ( part_template_axis != -1 ) {
-
-/* If so, obtain the template axis index. This involves adjusting for
-   the axis numbering offset of the second template component Frame
-   (if necessary) and then applying the inverse template axis
-   permutation to convert to the external template axis
-   numbering. Store the result in the template association array. */
-               template_assoc[ result_axis ] =
-                  invperm[ first ? part_template_axis :
-                                   part_template_axis + template_naxes1 ];
-
-/* Indicate if there is no template axis association by storing an
-   index of -1. */
-            } else {
-               template_assoc[ result_axis ] = -1;
-            }
-
-/* Similarly, check that the target association identifies a valid
-   target axis. */
-            if ( part_target_axis != -1 ) {
-
-/* If so, obtain the target axis index. This simply involves using the
-   axis selection arrays provided by the caller to look up which
-   target axes were involved in the matching process. */
-               target_assoc[ result_axis ] =
-                  first ? axes1[ part_target_axis ] :
-                          axes2[ part_target_axis ];
-
-/* Indicate if there is no target axis association by storing an index
-   of -1. */
-            } else {
-               target_assoc[ result_axis ] = -1;
-            }
-         }
-      }
-
-/* Free the inverse axis permutation array. */
-      invperm = astFree( invperm );
-
-/* Create the output Frame. */
-/* ------------------------ */
-/* Initialise. */
-      result_order = NULL;
-      result_perm = NULL;
-
-/* Construct the basis of the final result Frame by combining the two
-   individual result Frames (from the matching process) using a
-   CmpFrame. */
-      if ( astOK ) {
-         *result = (AstFrame *) astCmpFrame( result1, result2, "", status );
-
-/* The next step is to permute the result Frame's axis order so that
-   it corresponds with the axis order of the "reference Frame". The
-   reference Frame is either the template or the target, depending on
-   whether the template's PreserveAxes attribute is non-zero. Obtain
-   the value of this attribute. */
-         preserve_axes = astGetPreserveAxes( template );
-
-/* Decide how many axes the reference Frame contains. */
-         ref_naxes = preserve_axes ? target_naxes : template_naxes;
-
-/* Make a copy of the axis association array that refers to the
-   reference Frame. */
-         result_order = astStore( NULL,
-                                  preserve_axes ? target_assoc :
-                                                  template_assoc,
-                                  sizeof( int ) * (size_t) result_naxes );
-
-/* The intention is to use this axis association array to permute the
-   result axes into the same order as the reference Frame's axes. It
-   is not that simple, however, because some of the axis associations
-   may be null (i.e. result axes may exist that are not associated
-   with reference axes) and they may also be incomplete (i.e. not
-   every reference axis may be associated with a result axis).
-
-   This prevents us from permuting the result axis order using this
-   array directly, essentially because we haven't yet defined where
-   any "extra" result axes (those with no association) should appear
-   in the final axis order. */
-
-/* To overcome this, we replace all the null (-1) entries in the
-   "result_order" array with new values which define their position
-   relative to the other entries. This also involves re-numbering
-   other entries to avoid clashes. The new numbers assigned depend on
-   the MatchEnd attribute for each of the template component Frames,
-   so we handle the associations for each of these components
-   separately. */
-         AddExtraAxes( result_naxes, result_order,
-                       0, result_naxes1 - 1, match_end1, status );
-         AddExtraAxes( result_naxes, result_order,
-                       result_naxes1, result_naxes - 1, match_end2, status );
-
-/* There may now be some reference Frame axes which are not referenced
-   in this array, so we renumber the entries starting at zero (but
-   preserving their relative order) so that there are no missing
-   values due to these. */
-         RenumberAxes( result_naxes, result_order, status );
-
-/* The resulting "result_order" array no longer describes the original
-   reference Frame axis associations, but is now suitable for
-   permuting the result axes into the required order. However, we
-   require the inverse of this permutation, so allocate an array and
-   fill it with the inverse. */
-         result_perm = astMalloc( sizeof( int ) * (size_t) result_naxes );
-         if ( astOK ) {
-            for ( result_axis = 0; result_axis < result_naxes;
-                                   result_axis++ ) {
-               result_perm[ result_order[ result_axis ] ] = result_axis;
-            }
-         }
-
-/* Apply the inverse permutation to the result CmpFrame to put its
-   axes into the required order. */
-         astPermAxes( *result, result_perm );
-
-/* Check if the number of result Frame axes differs from the number of
-   reference axes. This can arise if the PreserveAxes attribute of
-   either template component Frame is set to a value that differs from
-   that of the template CmpFrame as a whole. If this is the case, we
-   must select a sub-set (or super-set) of the result axes, so that we
-   end up with the same number of axes as the reference Frame. */
-         if ( ref_naxes != result_naxes ) {
-
-/* Allocate an array to hold the indices of the axes required. */
-            pick = astMalloc( sizeof( int ) * (size_t) ref_naxes );
-            if ( astOK ) {
-
-/* Generate the axis indices, using the template CmpFrame's MatchEnd
-   attribute to decide which ones to use. */
-               for ( output_axis = 0; output_axis < ref_naxes;
-                                      output_axis++ ) {
-                  full_axis =
-                     match_end ? output_axis + ( result_naxes - ref_naxes ) :
-                                 output_axis;
-
-/* If the index is valid (i.e. the required axis is available), store
-   it. Otherwise, use an index of -1, which requests that new
-   (default) axes be supplied where needed. */
-                  if ( ( full_axis >= 0 ) && ( full_axis < result_naxes ) ) {
-                     pick[ output_axis ] = full_axis;
-                  } else {
-                     pick[ output_axis ] = -1;
-                  }
-               }
-            }
-
-/* Pick the required axes from the result Frame and replace it with
-   the new one. */
-            tmp_frame = astPickAxes( *result, ref_naxes, pick, NULL );
-            *result = astAnnul( *result );
-            *result = tmp_frame;
-
-/* Free the array of axis indices. */
-            pick = astFree( pick );
-         }
-      }
-
-/* Create output axis association arrays. */
-/* -------------------------------------- */
-/* We now construct the two arrays that are returned to identify which
-   template and target axes (if any) are associated with each final
-   result Frame axis. Allocate memory for these arrays. */
-      if ( astOK ) {
-         *target_axes = astMalloc( sizeof( int ) * (size_t) ref_naxes );
-         *template_axes = astMalloc( sizeof( int ) * (size_t) ref_naxes );
-         if ( astOK ) {
-
-/* For each output axis, obtain the original result axis index (before
-   any sub-set or super-set of the output axes was selected). */
-            for ( output_axis = 0; output_axis < ref_naxes; output_axis++ ) {
-               full_axis =
-                  match_end ? output_axis + ( result_naxes - ref_naxes ) :
-                              output_axis;
-
-/* Derive the result axis index before the axes were permuted into
-   their final order. */
-               if ( ( full_axis >= 0 ) && ( full_axis < result_naxes ) ) {
-                  result_axis = result_perm[ full_axis ];
-
-/* Use this axis index and the axis association arrays generated
-   earlier to obtain the required associations, and store these in the
-   output arrays. */
-                  ( *template_axes )[ output_axis ] =
-                     template_assoc[ result_axis ];
-                  ( *target_axes )[ output_axis ] =
-                     target_assoc[ result_axis ];
-
-/* Store a value of -1 if there is no association. */
-               } else {
-                  ( *template_axes )[ output_axis ] = -1;
-                  ( *target_axes )[ output_axis ] = -1;
-               }
-            }
-         }
-      }
-
-/* Free the original (un-permuted) axis association arrays. */
-      template_assoc = astFree( template_assoc );
-      target_assoc = astFree( target_assoc );
-
-/* Create the output Mapping. */
-/* -------------------------- */
-/* Construct the basis of the final output Mapping by combining the
-   Mappings produced by the individual matching processes in parallel,
-   using a CmpMap. */
-      *map = (AstMapping *) astCmpMap( map1, map2, 0, "", status );
-
-/* It is now necessary to prefix and suffix this CmpMap with two
-   PermMaps, which correct the input and output axis order to
-   correspond with the target and result Frame axes.
-
-   At the target end, this reflects the partitioning of the target
-   axes into two groups, as specified by the caller. At the result
-   end, it reflects the axis permutation applied (above) to put the
-   final result Frame axes into the required order, together with the
-   selection of any sub-set or super-set of these axes. */
-
-/* Allocate memory for permutation arrays to describe the prefix
-   PermMap. */
-      inperm = astMalloc( sizeof( int ) * (size_t) target_naxes );
-      outperm = astMalloc( sizeof( int ) * (size_t) target_naxes );
-      if ( astOK ) {
-
-/* Consider the target axes in the order that they were supplied to
-   the matching processes (i.e. the order that corresponds with the
-   input coordinates of the CmpMap produced above). */
-         for ( target_axis = 0; target_axis < target_naxes; target_axis++ ) {
-
-/* Decide whether each axis belongs to the first (or second) selected
-   group of target axes. */
-            first = ( target_axis < naxes1 );
-
-/* Obtain the index of the target axis within the group. This involves
-   allowing for the numbering offset of the second group if
-   necessary. */
-            part_target_axis = first ? target_axis :
-                                       target_axis - naxes1;
-
-/* Obtain the original target axis index by looking up the axis in the
-   appropriate axis selection array provided by the caller. */
-            outperm[ target_axis ] = first ? axes1[ part_target_axis ] :
-                                             axes2[ part_target_axis ];
-
-/* Fill the "inperm" array with the inverse of this permutation. */
-            inperm[ outperm[ target_axis ] ] = target_axis;
-         }
-      }
-
-/* If the permutation is not null, use these permutation arrays to
-   construct the required prefix PermMap. */
-      if ( GoodPerm( target_naxes, inperm, target_naxes, outperm, status ) ) {
-         permmap = (AstMapping *) astPermMap( target_naxes, inperm,
-                                              target_naxes, outperm,
-                                              NULL, "", status );
-
-/* Add the PermMap as a prefix to the result Mapping and then annul
-   the original Mapping pointers. */
-         tmp_map = (AstMapping *) astCmpMap( permmap, *map, 1, "", status );
-         (void) astAnnul( *map );
-         *map = tmp_map;
-         permmap = astAnnul( permmap );
-      }
-
-/* Free the permutation arrays. */
-      inperm = astFree( inperm );
-      outperm = astFree( outperm );
-
-/* Allocate memory for permutation arrays to describe the suffix
-   PermMap. */
-      inperm = astMalloc( sizeof( int ) * (size_t) result_naxes );
-      outperm = astMalloc( sizeof( int ) * (size_t) ref_naxes );
-      if ( astOK ) {
-
-/* Initialise the "inperm" array. */         
-         for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-            inperm[ result_axis ] = -1;
-         }
-
-/* For each output axis, obtain the index of the corresponding result
-   axis before any sub-set or super-set was selected. */
-         for ( output_axis = 0; output_axis < ref_naxes; output_axis++ ) {
-            full_axis =
-               match_end ? output_axis + ( result_naxes - ref_naxes ) :
-                           output_axis;
-
-/* Store the axis index before the result axes were permuted, and also
-   construct the inverse permutation. */
-            if ( ( full_axis >= 0 ) && ( full_axis < result_naxes ) ) {
-               outperm[ output_axis ] = result_perm[ full_axis ];
-               inperm[ outperm[ output_axis ] ] = output_axis;
-
-/* Note which output axes do not exist in the result Frame
-   (e.g. because a super-set was selected). */
-            } else {
-               outperm[ output_axis ] = -1;
-            }
-         }
-      }
-
-/* If the permutation is not null, use these permutation arrays to
-   construct the required suffix PermMap. */
-      if ( GoodPerm( target_naxes, inperm, target_naxes, outperm, status ) ) {
-         permmap = (AstMapping *) astPermMap( result_naxes, inperm,
-                                              ref_naxes, outperm,
-                                              NULL, "", status );
-
-/* Add the PermMap as a suffix to the result Mapping and then annul
-   the original Mapping pointers. */
-         tmp_map = (AstMapping *) astCmpMap( *map, permmap, 1, "", status );
-         (void) astAnnul( *map );
-         *map = tmp_map;
-         permmap = astAnnul( permmap );
-      }
-
-/* Free the permutation arrays. */
-      inperm = astFree( inperm );
-      outperm = astFree( outperm );
-
-/* Free the result axis permutation arrays. */
-      result_order = astFree( result_order );
-      result_perm = astFree( result_perm );
-   }
-
-/* If necessary, free the results of the first matching process. */
-   if ( match1 ) {
-      template_axes1 = astFree( template_axes1 );
-      target_axes1 = astFree( target_axes1 );
-      map1 = astAnnul( map1 );
-      result1 = astAnnul( result1 );
-   }
-
-/* If necessary, free the results of the second matching process. */
-   if ( match2 ) {
-      template_axes2 = astFree( template_axes2 );
-      target_axes2 = astFree( target_axes2 );
-      map2 = astAnnul( map2 );
-      result2 = astAnnul( result2 );
-   }
-
-/* Annul the pointers to the sub-Frames selected from the target. */
-   frame1 = astAnnul( frame1 );
-   frame2 = astAnnul( frame2 );
-
-/* If an error occurred, free all allocated memory, annul the result
-   Object pointers and clear all returned values. */
-   if ( !astOK ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      *map = astAnnul( *map );;
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
-/*
-*  Name:
-*     PermAxes
-
-*  Purpose:
-*     Permute the order of a CmpFrame's axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void astPermAxes( AstFrame *this, const int perm[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astPermAxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function permutes the order in which a CmpFrame's axes occur.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     perm
-*        An array of int (with one element for each axis of the
-*        CmpFrame) which lists the axes in their new order. Each
-*        element of this array should be a (zero-based) axis index
-*        identifying the axes according to their old (un-permuted)
-*        order.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Only genuine permutations of the axis order are permitted, so
-*     each axis must be referenced exactly once in the "perm" array.
-*     - If more than one axis permutation is applied to a CmpFrame,
-*     the effects are cumulative.
-
-*  Implementation Notes:
-*     - This function performs essentially the same operation as the
-*     Frame member function which it over-rides. However, it operates
-*     on a "perm" array held in the CmpFrame structure (rather than
-*     the one in the parent Frame structure). This duplication of the
-*     array is necessary because the one in the Frame structure is of
-*     zero length, the number of axes in the Frame structure having
-*     been set to zero to prevent unnecessary allocation of Axis
-*     objects which are not needed by the CmpFrame.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   int *old;                     /* Pointer to copy of old permutation array */
-   int axis;                     /* Loop counter for CmpFrame axes */
-   int naxes;                    /* Number of CmpFrame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate the permutation array, to check that it describes a
-   genuine permutation. */
-   astCheckPerm( this, perm, "astPermAxes" );
-
-/* Obtain the number of CmpFrame axes. */
-   naxes = astGetNaxes( this );
-
-/* Allocate memory and use it to store a copy of the old permutation
-   array for the CmpFrame. */
-   old = astStore( NULL, this->perm, sizeof( int ) * (size_t) naxes );
-
-/* Apply the new axis permutation cumulatively to the old one and
-   store the result in the CmpFrame. */
-   if ( astOK ) {
-      for ( axis = 0; axis < naxes; axis++ ) {
-         this->perm[ axis ] = old[ perm[ axis ] ];
-      }
-   }
-
-/* Free the temporary copy of the old array. */
-   old = astFree( old );
-}
-
-static void PrimaryFrame( AstFrame *this_frame, int axis1,
-                          AstFrame **frame, int *axis2, int *status ) {
-/*
-*  Name:
-*     PrimaryFrame
-
-*  Purpose:
-*     Uniquely identify a primary Frame and one of its axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void astPrimaryFrame( AstFrame *this, int axis1, AstFrame **frame,
-*                           int *axis2, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected
-*     astPrimaryFrame method inherited from the Frame class).
-
-*  Description:
-*     This function returns information about the underlying (primary)
-*     Frame corresponding to a specified CmpFrame axis.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis1
-*        An axis index (zero-based) identifying the CmpFrame axis for
-*        which information is required.
-*     frame
-*        Address of a location to receive a pointer to the underlying
-*        (primary) Frame to which the requested axis belongs
-*        (i.e. this will not be a compound Frame).
-*     axis2
-*        Pointer to an int which is to receive the (zero-based) axis
-*        index within "frame" which identifies the axis being referred
-*        to, using the axis order that applied when the primary Frame
-*        was originally constructed (i.e. this function undoes all
-*        subsequent axis pemutations and the effects of combining
-*        Frames, in order to reveal the original underlying axis
-*        order).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This protected method is provided so that class
-*     implementations can distinguish the axes of Frames from one
-*     another (e.g. can distinguish a longitude axis as being
-*     different from a latitide axis) even after their order has been
-*     permuted and they have been combined with axes from other
-*     Frames.
-*     - The reference count of the primary Frame will be incremented
-*     by one to reflect the new pointer returned.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   int naxes1;                   /* Number of axes in frame1 */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis1 = astValidateAxis( this, axis1, "astPrimaryFrame" );
-
-/* Obtain the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which Frame contains the axis and invoke its astPrimaryFrame
-   method to obtain the required information. */
-      if ( axis1 < naxes1 ) {
-         astPrimaryFrame( this->frame1, axis1, frame, axis2 );
-      } else {
-         astPrimaryFrame( this->frame2, axis1 - naxes1, frame, axis2 );
-      }
-   }
-}
-
-static int QsortCmpAxes( const void *a, const void *b ) {
-/*
-*  Name:
-*     QsortCmpAxes
-
-*  Purpose:
-*     Compare two axis indices for "qsort".
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int QsortCmpAxes( const void *a, const void *b )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This is a service function for the C RTL routine "qsort". It
-*     takes the two values supplied and interprets them as integer
-*     indices into the static "qsort_axes" array. It compares the
-*     values of these two array elements and returns the result
-*     required by "qsort".
-*
-*     This function is used when sorting an array of indices so that
-*     they access the "qsort_axes" array in ascending order.
-
-*  Parameters:
-*     As required by "qsort".
-
-*  Returned Value:
-*     As required by "qsort".
-*/
-
-/* Local Variables. */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   int result;                   /* Result value to return */
-   int val_a;                    /* First axis index */
-   int val_b;                    /* Second axis index */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Convert the values passed by "qsort" into integer array indices and
-   use these to access the "qsort_axes" array (this pointer to the
-   array being assigned by the caller of "qsort"). Extract the two
-   values being compared. */
-   val_a = qsort_axes[ *( (const int *) a ) ];
-   val_b = qsort_axes[ *( (const int *) b ) ];
-
-/* Compare the two values as required by "qsort". */
-   if ( val_a < val_b ) {
-      result = -1;
-   } else if ( val_a == val_b ) {
-      result = 0;
-   } else {
-      result = 1;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     CmpFrame method (over-rides the astRemoveRegions method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a CmpMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel CmpMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the CmpFrame class invokes the
-*     astRemoveRegions method on the two component Frames, and joins
-*     the results together into a new CmpFrame. This replaces any Regions
-*     with their equivalent Frames.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *new;             /* Pointer to new CmpFrame */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstFrame *newfrm1;            /* New first component Frame */
-   AstFrame *newfrm2;            /* New second component Frame */
-   AstMapping *result;           /* Result pointer to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpFrame. */
-   this = (AstCmpFrame *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the two component Frames. */
-   newfrm1 = astRemoveRegions( this->frame1 );
-   newfrm2 = astRemoveRegions( this->frame2 );
-
-/* If neither component was modified, just return a clone of the supplied
-   pointer. */
-   if( this->frame1 == newfrm1 && this->frame2 == newfrm2 ) {
-      result = astClone( this );
-
-/* Annul new new Frame pointers. */
-      newfrm1 = astAnnul( newfrm1 );
-      newfrm2 = astAnnul( newfrm2 );
-
-/* Otherwise, we need to create a new CmpFrame to return. */
-   } else {
-
-/* Make a copy of the supplied CmpFrame so that the new CmpFrame retains
-   any attribute settings of the supplied CmpFrame. */
-      new = astCopy( this );
-      result = (AstMapping *) new;
-
-/* Replace the two component Frames with the simplified Frames. */
-      (void) astAnnul( new->frame1 );
-      (void) astAnnul( new->frame2 );
-      new->frame1 = (AstFrame *) newfrm1;
-      new->frame2 = (AstFrame *) newfrm2;
-   }
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void RenumberAxes( int naxes, int axes[], int *status ) {
-/*
-*  Name:
-*     RenumberAxes
-
-*  Purpose:
-*     Renumber axis indices to eliminate missing ones.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void RenumberAxes( int naxes, int axes[], int *status )
-
-*  Class Membership:
-*     CmpFrame member function.
-
-*  Description:
-*     This function takes an array containing a list of (zero-based)
-*     axis indices referring to the axes of a Frame, some of whose
-*     axes may not be referenced. It renumbers the axis indices, to
-*     eliminate any which are missing (i.e. not referenced), while
-*     preserving the original order. It does this by replacing each
-*     axis index by its rank (starting at zero) when the indices are
-*     sorted into ascending order.
-
-*  Parameters:
-*     naxes
-*        The number of axis indices present.
-*     axes
-*        An array, with "naxes" elements, containing the indices. This
-*        is modified by this function to contain the new indices.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   int *work;                    /* Pointer to workspace array */
-   int i;                        /* Loop counter */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Allocate workspace. */
-   work = astMalloc( sizeof( int ) * (size_t) naxes );
-   if ( astOK ) {
-
-/* Fill the workspace with indices which address the axis index values
-   in their natural order. */
-      for ( i = 0; i < naxes; i++ ) work[ i ] = i;
-
-/* Make the "axes" values available to the C RTL function "qsort" via
-   the static "qsort_axes" pointer. Then use "qsort" to permute the
-   contents of "work" so that it addresses the axis indices in
-   ascending order. */
-      qsort_axes = axes;
-      qsort( work, (size_t) naxes, sizeof( int ), QsortCmpAxes );
-
-/* Use the result to replace each axis index by its rank when sorted
-   into ascending order (starting with zero). */
-      for ( i = 0; i < naxes; i++ ) axes[ work[ i ] ] = i;
-   }
-
-/* Free the workspace array. */
-   work = astFree( work );
-}
-
-static void Resolve( AstFrame *this_frame, const double point1[], 
-                     const double point2[], const double point3[],
-                     double point4[], double *d1, double *d2, int *status ){
-/*
-*  Name:
-*     Resolve
-
-*  Purpose:
-*     Resolve a vector into two orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void Resolve( AstFrame *this, const double point1[], 
-*                   const double point2[], const double point3[],
-*                   double point4[], double *d1, double *d2, int *status );
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astOffset method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function resolves a vector into two perpendicular components.
-*     The vector from point 1 to point 2 is used as the basis vector.
-*     The vector from point 1 to point 3 is resolved into components 
-*     parallel and perpendicular to this basis vector. The lengths of the 
-*     two components are returned, together with the position of closest 
-*     aproach of the basis vector to point 3.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vector to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     point3
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the vector to be
-*        resolved.
-*     point4
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the point of closest approach of the
-*        basis vector to point 3 will be returned.
-*     d1
-*        The address of a location at which to return the distance from
-*        point 1 to point 4 (that is, the length of the component parallel 
-*        to the basis vector). Positive values are in the same sense as 
-*        movement from point 1 to point 2.
-*     d2
-*        The address of a location at which to return the distance from
-*        point 4 to point 3 (that is, the length of the component
-*        perpendicular to the basis vector). The returned value is always
-*        positive.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Each vector used in this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the required
-*     output values are undefined.
-*--
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   const int *perm;              /* Pointer to axis permutation array */
-   double *p1;                   /* Permuted coordinates for point1 */
-   double *p2;                   /* Permuted coordinates for point2 */
-   double *p3;                   /* Permuted coordinates for point3 */
-   double *p4;                   /* Permuted coordinates for point4 */
-   double d1a;                   /* Parallel distance in frame1 */
-   double d1b;                   /* Parallel distance in frame2 */
-   double d2a;                   /* Perpendicular distance in frame1 */
-   double d2b;                   /* Perpendicular distance in frame2 */
-   double d;                     /* Total length of basis vector */
-   double da;                    /* Length of basis vector in frame1 */
-   double db;                    /* Length of basis vector in frame2 */
-   int axis;                     /* Loop counter for axes */
-   int bad;                      /* Set bad output coordinates? */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes;                    /* Total number of axes in CmpFrame */
-
-/* Check the global error status. */
-   *d1 = AST__BAD;
-   *d2 = AST__BAD;
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the CmpFrame. */
-   naxes = astGetNaxes( this );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. */
-   perm = astGetPerm( this );
-
-/* Allocate workspace. */
-   p1 = astMalloc( sizeof( double ) * (size_t) naxes );
-   p2 = astMalloc( sizeof( double ) * (size_t) naxes );
-   p3 = astMalloc( sizeof( double ) * (size_t) naxes );
-   p4 = astMalloc( sizeof( double ) * (size_t) naxes );
-   
-/* Initialise a flag to indicate whether "bad" coordinates should be
-   returned. */
-   bad = 0;
-
-/* Initialise ther variables to avoid compiler warnings. */
-   da = 0.0;
-   db = 0.0;
-
-/* Check that all the coordinates of both input points are OK. If not,
-   set the "bad" flag and quit checking. */
-   if ( astOK ) {
-      for ( axis = 0; axis < naxes; axis++ ) {
-         if ( ( point1[ axis ] == AST__BAD ) ||
-              ( point2[ axis ] == AST__BAD ) ||
-              ( point3[ axis ] == AST__BAD ) ) {
-            bad = 1;
-            break;
-
-/* If the coordinates are OK, apply the axis permutation array to
-   obtain them in the required order. */
-         } else {
-            p1[ perm[ axis ] ] = point1[ axis ];
-            p2[ perm[ axis ] ] = point2[ axis ];
-            p3[ perm[ axis ] ] = point3[ axis ];
-         }
-      }
-   }
-
-/* If OK, obtain the number of axes in the first component Frame. */
-   if ( astOK && !bad ) {
-      naxes1 = astGetNaxes( this->frame1 );
-
-/* Find the projection of the required parallel distance into each of the
-   two Frames. */
-      astResolve( this->frame1, p1, p2, p3, p4, &d1a, &d2a );
-      astResolve( this->frame2, p1 + naxes1, p2 + naxes1, p3 + naxes1, 
-                  p4 + naxes1, &d1b, &d2b );
-
-/* Project the first two input points into the two component Frames and
-   determine the length of the basis vector in each Frame. */
-      da = astDistance( this->frame1, p1, p2 );
-      db = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* Check that the returned distances are not bad. */
-      if ( astOK ) bad = ( bad || ( da == AST__BAD ) || ( db == AST__BAD ) );
-
-/* We can tolerate a bad parallel distance within a sub-Frame if the
-   basis vector has zero length in the sub-Frame, because the bad
-   parallel distance will have zero weight in the calculation. Set such
-   bad parallel distanced arbitrarily to zero. */
-      if( d1a == AST__BAD && da == 0.0 ) d1a = 0.0;
-      if( d1b == AST__BAD && db == 0.0 ) d1b = 0.0;
-
-/* Check that the final parallel distances are not bad. */
-      if ( astOK ) bad = ( bad || ( d1a == AST__BAD ) || ( d1b == AST__BAD ) );
-
-   }
-
-/* If OK, calculate the total distance between the two points. */
-   if ( astOK && !bad ) {
-      d = sqrt( da * da + db * db );
-
-/* If the points are co-incident, then set the "bad" flag. */
-      if ( d == 0.0 ) {
-         bad = 1;
-
-/* If the points are not co-incident, combine the parallel distances for
-   the individual Frames into a single parallel distance for the entire
-   CmpFrame. */
-      } else {
-         *d1 = ( da*d1a + db*d1b )/d;
-
-/*  Offset this distance away from point 1 towards point 2 to get point 4. */
-         astOffset( this, point1, point2, *d1, point4 );
-
-/* Now find the perpendicular distance (the distance between point4 and
-   point3). */
-         *d2 = astDistance( this, point4, point3 );
-
-      }
-   }
-
-/* Free the workspace arrays. */
-   p1 = astFree( p1 );
-   p2 = astFree( p2 );
-   p3 = astFree( p3 );
-   p4 = astFree( p4 );
-
-/* If no error has occurred, but bad coordinates must be returned,
-   then set these in the output array. */
-   if ( astOK && bad ) {
-      *d1 = AST__BAD;
-      *d2 = AST__BAD;
-      for ( axis = 0; axis < naxes; axis++ ) point4[ axis ] = AST__BAD;
-   }
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[], 
-                                   const double point2[], AstPointSet *in,
-                                   AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     ResolvePoints
-
-*  Purpose:
-*     Resolve a set of vectors into orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstPointSet *ResolvePoints( AstFrame *this, const double point1[], 
-*                                 const double point2[], AstPointSet *in,
-*                                 AstPointSet *out )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astResolvePoints method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function takes a CmpFrame and a set of vectors encapsulated
-*     in a PointSet, and resolves each one into two orthogonal components,
-*     returning these two components in another PointSet.
-*
-*     This is exactly the same as the public astResolve method, except
-*     that this method allows many vectors to be processed in a single call,
-*     thus reducing the computational cost of overheads of many
-*     individual calls to astResolve.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vectors to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     in
-*        Pointer to the PointSet holding the ends of the vectors to be
-*        resolved.
-*     out
-*        Pointer to a PointSet which will hold the length of the two
-*        resolved components. A NULL value may also be given, in which 
-*        case a new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet. The first axis will 
-*     hold the lengths of the vector components parallel to the basis vector. 
-*     These values will be signed (positive values are in the same sense as 
-*     movement from point 1 to point 2. The second axis will hold the lengths 
-*     of the vector components perpendicular to the basis vector. These
-*     values will always be positive.
-
-*  Notes:
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of axes in the supplied Frame.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and 2 coordinate values per point.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   AstPointSet *in1;             /* Pointer to input PointSet for frame1 */
-   AstPointSet *in2;             /* Pointer to input PointSet for frame2 */
-   AstPointSet *out1;            /* Pointer to output PointSet for frame1 */
-   AstPointSet *out2;            /* Pointer to output PointSet for frame2 */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   const int *perm;              /* Pointer to axis permutation array */
-   double **ptr_in;              /* Pointers to input axis values */
-   double **ptr_out1;            /* Pointers to frame1 component lengths */
-   double **ptr_out2;            /* Pointers to frame2 component lengths */
-   double **ptr_out;             /* Pointers to returned component lengths */
-   double *d1;                   /* Pointer to next parallel component value */
-   double *d1_1;                 /* arallel distance in frame1 */
-   double *d1_2;                 /* Parallel distance in frame2 */
-   double *d2;                   /* Pointer to next perpendicular component value */
-   double *d2_1;                 /* Perpendicular distance in frame1 */
-   double *d2_2;                 /* Perpendicular distance in frame2 */
-   double *p1;                   /* Permuted coordinates for point1 */
-   double *p2;                   /* Permuted coordinates for point2 */
-   double *p3;                   /* Supplied vector */
-   double *p4;                   /* Closest approach to supplied vector */
-   double b1;                    /* Length of basis vector in frame1 */
-   double b2;                    /* Length of basis vector in frame2 */
-   double b;                     /* Length of basis vector */
-   int axis;                     /* Loop counter for axes */
-   int ipoint;                   /* Index of next point */
-   int nax;                      /* Number of Frame axes */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes2;                   /* Number of axes in frame2 */
-   int ncoord_in;                /* Number of input PointSet coordinates */
-   int ncoord_out;               /* Number of coordinates in output PointSet */
-   int npoint;                   /* Number of points to transform */
-   int npoint_out;               /* Number of points in output PointSet */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialise to prevent compiler "uninitialised use" messages. */
-   d1 = NULL;
-   d2 = NULL;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Obtain the number of axes in the two component Frames */
-   naxes1 = astGetNaxes( this->frame1 );
-   naxes2 = astGetNaxes( this->frame2 );
-
-/* For the total number of axes. */
-   nax = naxes1 + naxes2;
-
-/* Obtain the number of input vectors to resolve and the number of coordinate
-   values per vector. */
-   npoint = astGetNpoint( in );
-   ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
-   required by the Frame. Report an error if these numbers do not match. */
-   if ( astOK && ( ncoord_in != nax ) ) {
-      astError( AST__NCPIN, "astResolvePoints(%s): Bad number of coordinate "
-                "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
-                astGetClass( in ) );
-      astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
-                "each input point.", status, astGetClass( this ), nax );
-   }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
-   then obtain the number of points and number of coordinates per point for
-   this PointSet. */
-   if ( astOK && out ) {
-      npoint_out = astGetNpoint( out );
-      ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
-   output coordinate values and report an error if they are not. */
-      if ( astOK ) {
-         if ( npoint_out < npoint ) {
-            astError( AST__NOPTS, "astResolvePoints(%s): Too few points (%d) in "
-                      "output %s.", status, astGetClass( this ), npoint_out,
-                      astGetClass( out ) );
-            astError( AST__NOPTS, "The %s needs space to hold %d transformed "
-                      "point(s).", status, astGetClass( this ), npoint );
-         } else if ( ncoord_out < 2 ) {
-            astError( AST__NOCTS, "astResolvePoints(%s): Too few coordinate "
-                      "values per point (%d) in output %s.", status,
-                      astGetClass( this ), ncoord_out, astGetClass( out ) );
-            astError( AST__NOCTS, "The %s supplied needs space to store 2 "
-                      "coordinate value(s) per transformed point.", status,
-                      astGetClass( this ) );
-         }
-      }
-   }
-
-/* If all the validation stages are passed successfully, and a NULL output
-   pointer was given, then create a new PointSet to encapsulate the output
-   coordinate data. */
-   if ( astOK ) {
-      if ( !out ) {
-         result = astPointSet( npoint, 2, "", status );
-
-/* Otherwise, use the PointSet supplied. */
-      } else {
-         result = out;
-      }
-   }
-
-/* Store points to the first two axis arrays in the returned PointSet. */
-   ptr_out = astGetPoints( result );
-   if( astOK ) {
-      d1 = ptr_out[ 0 ];
-      d2 = ptr_out[ 1 ];
-   }
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. This array
-   holds the original axis index for each current Frame axis index. */
-   perm = astGetPerm( this );
-
-/* Temporarily permute the coordinates within the supplied PointSet back
-   in to the axis order which existed when the CmpFrame was created. */
-   astPermPoints( in, 0, perm );
-
-/* Extract the axis values relevant to each of the two sub-Frames from the 
-   point1 and point2 arrays, at the same time undoing any axis permutation 
-   applied to the CmpFrame as a whole. */
-   p1 = astMalloc( sizeof( double )*( size_t )nax );
-   p2 = astMalloc( sizeof( double )*( size_t )nax );
-   if( astOK ) {
-      for( axis = 0; axis < nax; axis++ ) {
-         p1[ perm[ axis ] ] = point1[ axis ];
-         p2[ perm[ axis ] ] = point2[ axis ];
-      }
-   }
-
-/* Project the first two input points into the two component Frames and
-   determine the length of the basis vector in each Frame. */
-   b1 = astDistance( this->frame1, p1, p2 );
-   b2 = astDistance( this->frame2, p1 + naxes1, p2 + naxes1 );
-
-/* If either of these distances is bad or if both are zero, then fill the
-   returned PointSet with bad values. */
-   if( b1 == AST__BAD || b2 == AST__BAD || ( b1 == 0.0 && b2 == 0.0 ) ) {
-     for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
-        *d1 = AST__BAD;
-        *d2 = AST__BAD;
-     }
-
-/* Otherwise we continue to calculate the resolved components */       
-   } else if( astOK ){
-
-/* Calculate the total distance between the two points. */
-      b = sqrt( b1*b1 + b2*b2 );
-
-/* Create PointSets holding the input values which refer to each of the
-   two component Frames. */
-      in1 = astPointSet( npoint, naxes1, "", status );
-      in2 = astPointSet( npoint, naxes2, "", status );
-
-/* Associated the appropriate subset of the data in the supplied input 
-   PointSet with each of these two PointSets. */ 
-      astSetSubPoints( in, 0, 0, in1 );
-      astSetSubPoints( in, 0, naxes1, in2 );
-
-/* Invoke the astResolvePoints method on each of the sub-Frames. These
-   invocations create two new PointSets containing the output values.  */
-      out1 = astResolvePoints( this->frame1, p1, p2, in1, NULL );
-      out2 = astResolvePoints( this->frame2, p1 + naxes1, p2 + naxes1, in2, NULL );
-
-/* Get pointers to the axis values in these pointsets. */
-      ptr_out1 = astGetPoints( out1 );
-      ptr_out2 = astGetPoints( out2 );
-
-/* More work space */
-      p3 = astMalloc( sizeof( double )*( size_t )nax );
-      p4 = astMalloc( sizeof( double )*( size_t )nax );
-
-/* Get pointers to the input axis values (these are still permuted to
-   undo any axis permutation applied to the CmpFrame). */
-      ptr_in = astGetPoints( in );
-
-/* Check pointers can be used safely. */
-      if( astOK ) {
-
-/* Get pointers to the parallel (d1) and perpendiclar (d2) components 
-   within the two sub-Frames (_1 and _2). */
-         d1_1 = ptr_out1[ 0 ];
-         d2_1 = ptr_out1[ 1 ];
-         d1_2 = ptr_out2[ 0 ];
-         d2_2 = ptr_out2[ 1 ];
-
-/* Loop round each supplied vector. */
-         for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++,
-                                                     d1_1++, d2_1++, 
-                                                     d1_2++, d2_2++ ) {
-
-/* We can tolerate a bad parallel distance within a sub-Frame if the
-   basis vector has zero length in the sub-Frame, because the bad
-   parallel distance will have zero weight in the calculation. Set such
-   bad parallel distanced arbitrarily to zero. */
-            if( *d1_1 == AST__BAD && b1 == 0.0 ) *d1_1 = 0.0;
-            if( *d1_2 == AST__BAD && b2 == 0.0 ) *d1_2 = 0.0;
-
-/* Combine the parallel distances for the individual Frames into a single 
-   parallel distance for the entire CmpFrame. */
-            if( *d1_1 != AST__BAD && *d1_2 != AST__BAD ) {
-               *d1 = ( b1*(*d1_1) + b2*(*d1_2) )/b;
-
-/*  Offset this distance away from point 1 towards point 2 to get point 4. */
-               astOffset( this, p1, p2, *d1, p4 );
-
-/* Now find the perpendicular distance (the distance between point4 and
-   point3). */
-               for( axis = 0; axis < nax; axis++ ) p3[ axis ] = ptr_in[ axis ][ ipoint ];
-               *d2 = astDistance( this, p4, p3 );
-
-            } else {
-               *d1 = AST__BAD;
-               *d2 = AST__BAD;
-            }
-         }
-      }
-
-/* Free resources */
-      in1 = astAnnul( in1 );
-      in2 = astAnnul( in2 );
-      out1 = astAnnul( out1 );
-      out2 = astAnnul( out2 );
-      p3 = astFree( p3 );
-      p4 = astFree( p4 );
-   }
-
-/* Free resources */
-   p1 = astFree( p1 );
-   p2 = astFree( p2 );
-
-/* Re-instate the original ordering of the coordinates within the
-   supplied PointSet. */
-   astPermPoints( in, 1, perm );
-
-/* Annul the returned PointSet if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void SetActiveUnit( AstFrame *this_frame, int value, int *status ){
-/*
-*  Name:
-*     SetActiveUnit
-
-*  Purpose:
-*     Specify how the Unit attribute should be used.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetActiveUnit( AstFrame *this, int value, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetActiveUnit method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the current value of the ActiveUnit flag for a 
-*     CmpFrame, which controls how the Frame behaves when it is used (by 
-*     astFindFrame) as a template to match another (target) Frame, or is 
-*     used as the "to" Frame by astConvert. It determines if the Mapping 
-*     between the template and target Frames should take differences in 
-*     axis units into account. 
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     value
-*        The new value to use.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to set the ActiveUnitFlag for the CmpFrame,
-   then set the same value for the component Frames. */
-   (*parent_setactiveunit)( this_frame, value, status );
-   astSetActiveUnit( ((AstCmpFrame *)this_frame)->frame1, value );
-   astSetActiveUnit( ((AstCmpFrame *)this_frame)->frame2, value );
-}
-
-static void SetFrameFlags( AstFrame *this_frame, int value, int *status ){
-/*
-*  Name:
-*     SetFrameFlags
-
-*  Purpose:
-*     Set flags that control current Frame behaviour.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetFrameFlags( AstFrame *this, int value, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetFrameFlags method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets values for the bit mask of flags that control
-*     how the CmpFrame behaves. It ensures that both component Frames use
-*     the the same bitmask as the parent CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     value
-*        The new value to use.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to set the FrameFlags for the CmpFrame,
-   then set the same value for the component Frames. */
-   (*parent_setframeflags)( this_frame, value, status );
-   astSetFrameFlags( ((AstCmpFrame *)this_frame)->frame1, value );
-   astSetFrameFlags( ((AstCmpFrame *)this_frame)->frame2, value );
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ){
-/*
-*  Name:
-*     GetActiveUnit
-
-*  Purpose:
-*     Determines how the Unit attribute will be used.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int GetActiveUnit( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astGetActiveUnit method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns the current value of the ActiveUnit flag for a 
-*     CmpFrame. See the description of the astSetActiveUnit function
-*     for a description of the ActiveUnit flag.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The current value of the ActiveUnit flag.
-
-*/
-
-/* Local Variables; */
-   int result;      /* The ActiveUnit flag for the CmpFrame */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If the ActiveUnit value has been set for the CmpFrame use the parent
-   implementation to get its value. */
-   if( astTestActiveUnit( this_frame ) ) {
-      result = (*parent_getactiveunit)( this_frame, status );
-
-/* Otherwise, the default is determined by the component Frames. If both
-   components have active units, the default for the CmpFrame is "on" */
-   } else {
-      result = astGetActiveUnit( ((AstCmpFrame *)this_frame)->frame1 ) || 
-               astGetActiveUnit( ((AstCmpFrame *)this_frame)->frame2 );
-   }
-
-/* Return the result */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (extends the astSetAttrib method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a CmpFrame, the attribute
-*     and its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This protected method is intended to be invoked by the Object astSet
-*     method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   char buf1[80];                /* For for un-indexed attribute name */
-   char buf2[80];                /* For for indexed attribute name */
-   int axis;                     /* Supplied (1-base) axis index */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Index of primary Frame axis */
-   int ok;                       /* Have we accessed the attribute succesfully? */
-   int value;                    /* Offset to start fo value string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
-   ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
-   names defined by this class. In fact there is nothing to do here
-   since the CmpFrame class currently defines no extra attributes, but 
-   this may change in the future. */
-   if( 0 ) {
-
-
-
-/* If the attribute is not a CmpFrame specific attribute... */
-   } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
-   That is, we do not want it to be necessary to extract a Frame from
-   its parent CmpFrame in order to access its attributes. For this reason 
-   we first temporarily switch off error reporting so that if an attempt 
-   to access the attribute fails, we can try a different approach. */
-      oldrep = astReporting( 0 );
-      
-/* Our first attempt is to see if the attribute is recognised by the parent
-   class (Frame). */
-      (*parent_setattrib)( this_object, setting, status );
-
-/* Indicate success. */
-      if( astOK ) {
-         ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different 
-   approach. */
-      } else {
-         astClearStatus;
-
-/* If the attribute is qualified by an axis index, try accessing it as an
-   attribute of the primary Frame containing the specified index. */
-         if ( nc = 0,
-             ( 2 == astSscanf( setting, "%[^(](%d)= %n%*s %n", buf1, &axis, 
-                               &value, &nc ) ) && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
-            astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-            if( astOK ) {
-
-/* Create a new setting with the same name but with the axis index
-   appropriate to the primary Frame. */
-               sprintf( buf2, "%s(%d)=%s", buf1, paxis + 1, setting+value );
-   
-/* Attempt to access the attribute. */
-               astSetAttrib( pfrm, buf2 );
-   
-/* Indicate success. */
-               if( astOK ) {
-                  ok = 1;
-   
-/* Otherwise clear the status value, and try again without any axis index. */
-               } else {               
-                  astClearStatus;
-                  sprintf( buf2, "%s=%s", buf1, setting+value );
-                  astSetAttrib( pfrm, buf2 );
-   
-/* Indicate success, or clear the status value. */
-                  if( astOK ) {
-                     ok = 1;
-                  } else {
-                     astClearStatus;
-                  }
-               }
-   
-/* Free the primary frame pointer. */
-               pfrm = astAnnul( pfrm );
-            }
-
-/* If the attribute is not qualified by an axis index, try accessing it
-   using the primary Frame of each axis in turn. */
-         } else {
-
-/* Loop round all axes attribute. */
-	    for( axis = 0; axis < astGetNaxes( this ); axis++ ) {
-
-/* Get the primary Frame containing this axis. */
-               astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
-               astSetAttrib( pfrm, setting );
-
-/* Free the primary Frame pointer. */
-               pfrm = astAnnul( pfrm );
-
-/* Indicate success, or clear the status value. */
-               if( astOK ) {
-                  ok = 1;
-               } else {
-                  astClearStatus;
-               }
-            }
-         }
-      }
-
-/* Re-instate the original error reporting state. */
-      astReporting( oldrep );
-
-   }
-
-/* Report an error if the attribute could not be accessed. */
-   if( !ok && astOK ) {
-      astError( AST__BADAT, "astSet: The attribute setting \"%s\" is invalid "
-               "for the given %s.", status, setting, astGetClass( this ) );
-   }
-}
-
-static void SetAxis( AstFrame *this_frame, int axis, AstAxis *newaxis, int *status ) {
-/*
-*  Name:
-*     SetAxis
-
-*  Purpose:
-*     Set a new Axis for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void astSetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetAxis method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function allows a new Axis object to be associated with one
-*     of the axes of a CmpFrame, replacing the previous one. Each Axis
-*     object contains a description of the quantity represented along
-*     one of the CmpFrame's axes, so this function allows this
-*     description to be exchanged for another one.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The index (zero-based) of the CmpFrame axis whose associated
-*        Axis object is to be replaced.
-*     newaxis
-*        Pointer to the new Axis object.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   int naxes1;                   /* Number of axes in frame1 */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astSetAxis" );
-
-/* Determine the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which Frame contains the axis and invoke its astSetAxis
-   method to set the new Axis. */
-      if ( axis < naxes1 ) {
-         astSetAxis( this->frame1, axis, newaxis );
-      } else {
-         astSetAxis( this->frame2, axis - naxes1, newaxis );
-      }
-   }
-}
-
-static void SetDut1( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetDut1
-
-*  Purpose:
-*     Set the value of the Dut1 attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetDut1( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetDut1 method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the Dut1 value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     val
-*        New Dut1 value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame Dut1 value. */
-   (*parent_setdut1)( this_frame, val, status );
-
-/* Now set the Dut1 attribute in the two component Frames. */
-   astSetDut1( this->frame1, val );
-   astSetDut1( this->frame2, val );
-}
-
-static void SetEpoch( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetEpoch
-
-*  Purpose:
-*     Set the value of the Epoch attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetEpoch( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetEpoch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the Epoch value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     val
-*        New Epoch value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame epoch. */
-   (*parent_setepoch)( this_frame, val, status );
-
-/* Now set the Epoch attribute in the two component Frames. */
-   astSetEpoch( this->frame1, val );
-   astSetEpoch( this->frame2, val );
-}
-
-static void SetObsAlt( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetObsAlt
-
-*  Purpose:
-*     Set the value of the ObsAlt attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetObsAlt( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetObsAlt method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the ObsAlt value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     val
-*        New ObsAlt value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame ObsAlt. */
-   (*parent_setobsalt)( this_frame, val, status );
-
-/* Now set the ObsAlt attribute in the two component Frames. */
-   astSetObsAlt( this->frame1, val );
-   astSetObsAlt( this->frame2, val );
-}
-
-static void SetObsLat( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetObsLat
-
-*  Purpose:
-*     Set the value of the ObsLat attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetObsLat( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetObsLat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the ObsLat value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     val
-*        New ObsLat value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame ObsLat. */
-   (*parent_setobslat)( this_frame, val, status );
-
-/* Now set the ObsLat attribute in the two component Frames. */
-   astSetObsLat( this->frame1, val );
-   astSetObsLat( this->frame2, val );
-}
-
-static void SetObsLon( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetObsLon
-
-*  Purpose:
-*     Set the value of the ObsLon attribute for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     void SetObsLon( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSetObsLon method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the ObsLon value in the component Frames as
-*     well as this CmpFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     val
-*        New ObsLon value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Invoke the parent method to set the CmpFrame ObsLon. */
-   (*parent_setobslon)( this_frame, val, status );
-
-/* Now set the ObsLon attribute in the two component Frames. */
-   astSetObsLon( this->frame1, val );
-   astSetObsLon( this->frame2, val );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     CmpFrame method (over-rides the astSimplify method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function simplifies the Mapping represented by a CmpFrame,
-*     by using the astSimplify method on each of the component Frames and
-*     combining the resulting Mappings together.
-
-*  Parameters:
-*     this
-*        Pointer to the original CmpFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new pointer to the simplified CmpFrame. 
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *new;         /* Pointer to new CmpFrame structure */
-   AstCmpFrame *this;        /* Pointer to original CmpFrame structure */
-   AstMapping *map1;         /* Intermediate Mapping */
-   AstMapping *map2;         /* Intermediate Mapping */
-   AstMapping *result;       /* Result pointer to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_mapping;
-
-/* Simplify each of the component Frames. */
-   map1 = astSimplify( this->frame1 );
-   map2 = astSimplify( this->frame2 );
-
-/* Did any usable simplification occur? */
-   if( astIsAFrame( map1 ) &&  astIsAFrame( map2 )  &&
-       ( map1 != (AstMapping *) this->frame1 || 
-         map2 != (AstMapping *) this->frame2 ) ) {
-
-/* Make a copy of the supplied CmpFrame. */
-      new = astCopy( this );
-      result = (AstMapping *) new;
-
-/* Replace the two component Frames with the simplified Frames. */
-      (void) astAnnul( new->frame1 );
-      (void) astAnnul( new->frame2 );
-      new->frame1 = (AstFrame *) map1;
-      new->frame2 = (AstFrame *) map2;
-
-/* If no simplication took place, annul the Mapping pointers and return a
-   clone of the supplied pointer. */
-   } else {
-       map1 = astAnnul( map1 );
-       map2 = astAnnul( map2 );
-       result= astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSystemCode method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external
-*     description of a coordinate system into a CmpFrame
-*     coordinate system type code (System attribute value). It is the
-*     inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the coordinate
-*     system description was not recognised. This does not produce an
-*     error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
-   result. The CmpFrame class only supports a single system "Compound". */
-   if ( astChrMatch( "Compound", system ) ) {
-      result = AST__COMP;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astSystemString method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a CmpFrame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. (Where possible, return the same string as would be
-   used in the FITS WCS representation of the coordinate system). A 
-   CmpFrame only allows a single System value, "Compound". */
-   switch ( system ) {
-   case AST__COMP:
-      result = "Compound";
-      break;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a CmpFrame and convert to the new coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the protected astSubFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the
-*     axes from a "target" CmpFrame and creates a new Frame with
-*     copies of the selected axes assembled in the requested order. It
-*     then optionally overlays the attributes of a "template" Frame on
-*     to the result. It returns both the resulting Frame and a Mapping
-*     that describes how to convert between the coordinate systems
-*     described by the target and result Frames. If necessary, this
-*     Mapping takes account of any differences in the Frames'
-*     attributes due to the influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target CmpFrame, from which axes are to be selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for
-*        the result Frame are to be obtained. Optionally, this may be
-*        NULL, in which case no overlaying of template attributes will
-*        be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This
-*        number may be greater than or less than the number of axes in
-*        this Frame (or equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving
-*        a list of the (zero-based) axis indices of the axes to be
-*        selected from the target CmpFrame. The order in which these
-*        are given determines the order in which the axes appear in
-*        the result Frame. If any of the values in this array is set
-*        to -1, the corresponding result axis will not be derived from
-*        the target Frame, but will be assigned default attributes
-*        instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This
-*        should contain a list of the template axes (given as
-*        zero-based axis indices) with which the axes of the result
-*        Frame are to be associated. This array determines which axes
-*        are used when overlaying axis-dependent attributes of the
-*        template on to the result. If any element of this array is
-*        set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not
-*        used and a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned
-*        Mapping.  The forward transformation of this Mapping will
-*        describe how to convert coordinates from the coordinate
-*        system described by the target CmpFrame to that described by
-*        the result Frame. The inverse transformation will convert in
-*        the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is
-*     possible between the target and the result Frame. Otherwise zero
-*     is returned and *map and *result are returned as NULL (but this
-*     will not in itself result in an error condition). In general,
-*     coordinate conversion should always be possible if no template
-*     Frame is supplied but may not always be possible otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Implementation Deficiencies:
-*     - It is not clear that the method of handling "extra" axes is
-*     the best one, nor is the method of setting the "following" flag
-*     necessarily correct.  However, it is also not obvious that this
-*     feature will ever be needed, so improvements have been left
-*     until the requirement is clearer.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *target;          /* Pointer to target CmpFrame structure */
-   AstFrame *sub_result1;        /* Pointer to result Frame for frame1 */
-   AstFrame *sub_result2;        /* Pointer to result Frame for frame2 */
-   AstMapping *permmap_pref;     /* Pointer to PermMap used as a prefix */
-   AstMapping *permmap_suff;     /* Pointer to PermMap used as a suffix */
-   AstMapping *sub_map1;         /* Pointer to Mapping from frame1 */
-   AstMapping *sub_map2;         /* Pointer to Mapping from frame2 */
-   AstMapping *sub_map;          /* Pointer to combined component Mappings */
-   AstMapping *tmp_map;          /* Temporary Mapping pointer */
-   const int *perm;              /* Pointer to axis permutation array */
-   int *frame_choice;            /* Pointer to flag array for partitioning */
-   int *inperm_pref;             /* Pointer to prefix permutation array */
-   int *inperm_suff;             /* Pointer to suffix permutation array */
-   int *outperm_pref;            /* Pointer to prefix permutation array */
-   int *outperm_suff;            /* Pointer to suffix permutation array */
-   int *target_axes1;            /* Pointer to frame1 axis selection array */
-   int *target_axes2;            /* Pointer to frame2 axis selection array */
-   int *template_axes1;          /* Pointer to frame1 template axis array */
-   int *template_axes2;          /* Pointer to frame2 template axis array */
-   int axis_p;                   /* Permuted axis index */
-   int following;                /* Associate extra axis and following axis? */
-   int i1;                       /* Count of axes obtained from frame1 */
-   int i2;                       /* Count of axes obtained from frame2 */
-   int match;                    /* Result value to return */
-   int n1;                       /* Number of axes obtained from frame1 */
-   int n2;                       /* Number of axes obtained from frame2 */
-   int naxes1;                   /* Number of axes in frame1 */
-   int naxes2;                   /* Number of axes in frame2 */
-   int naxes;                    /* Number of axes in target */
-   int result_axis;              /* Result axis index */
-   int target_axis;              /* Target axis index */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the target CmpFrame structure. */
-   target = (AstCmpFrame *) target_frame;
-
-/* Obtain the number of axes in the target CmpFrame and in each of its
-   component Frames. */
-   naxes = astGetNaxes( target );
-   naxes1 = astGetNaxes( target->frame1 );
-   naxes2 = astGetNaxes( target->frame2 );
-
-/* Iinitialise variables to avoid compiler warnings. */
-   template_axes1 = NULL;
-   template_axes2 = NULL;
-   n1 = 0;
-   n2 = 0;
-
-/* Obtain the axis permutation array for the target CmpFrame. */
-   perm = astGetPerm( target );
-
-/* Determine how any "extra" axes should be associated with existing
-   axes (i.e. whether to associate with the preceding or following
-   axis). */
-   following = astGetMatchEnd( target );
-
-/* Split selected axes into two groups. */
-/* ------------------------------------ */
-/* Allocate a workspace array to hold the choice of component Frame
-   for each selected target axis. */
-   frame_choice = astMalloc( sizeof( int ) * (size_t) result_naxes );
-
-/* Obtain an array of flags indicating whether each selected target
-   axis should be obtained from the first or second component
-   Frame. */
-   PartitionSelection( result_naxes, target_axes, perm, naxes1, naxes2,
-                       frame_choice, following, status );
-
-/* Allocate two arrays to hold the axis indices that refer to each of
-   the component Frames. The maximum number of indices is given by
-   "result_naxes" (if all the selected axes come from one component
-   Frame alone). */
-   target_axes1 = astMalloc( sizeof( int ) * (size_t) result_naxes );
-   target_axes2 = astMalloc( sizeof( int ) * (size_t) result_naxes );
-
-/* If a template Frame has been provided, allocate similar arrays to
-   hold the indices of the two groups of template axes. */
-   if ( template ) {
-      template_axes1 = astMalloc( sizeof( int ) * (size_t) result_naxes );
-      template_axes2 = astMalloc( sizeof( int ) * (size_t) result_naxes );
-   }
-
-/* Initialise the count of axes selected from each component Frame. */
-   if ( astOK ) {
-      n1 = n2 = 0;
-
-/* Loop through each axis index to be selected from the CmpFrame. */
-      for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-         target_axis = target_axes[ result_axis ];
-
-/* Determine if the index refers to a valid CmpFrame axis. If it does,
-   then permute the index, otherwise set it to -1. */
-         if ( ( target_axis >= 0 ) && ( target_axis < naxes ) ) {
-            axis_p = perm[ target_axis ];
-         } else {
-            axis_p = -1;
-         }
-
-/* If the axis is to be selected from the first component Frame, store
-   the index of the axis to be selected. Also store the associated
-   template axis index (if any). */
-         if ( frame_choice[ result_axis ] == 1 ) {
-            target_axes1[ n1 ] = axis_p;
-            if ( template ) {
-               template_axes1[ n1 ] = template_axes[ result_axis ];
-            }
-
-/* Count the axes selected from the first component Frame. */
-            n1++;
-
-/* If the axis is to be selected from the second component Frame,
-   store the index of the index to be selected (adjusting for the
-   offset in axis numbering). Also store the associated template axis
-   index (if any) and count the axes selected. */
-         } else {
-            target_axes2[ n2 ] = ( axis_p == -1 ) ? -1 : axis_p - naxes1;
-            if ( template ) {
-               template_axes2[ n2 ] = template_axes[ result_axis ];
-            }
-            n2++;
-         }
-      }
-   }
-
-/* Select from first component Frame only. */
-/* --------------------------------------- */
-/* If all the selected axes come from the first component Frame, use
-   that Frame's astSubFrame method to select them (and overlay the
-   template attributes if required). */
-   if ( astOK ) {
-      if ( n1 && !n2 ) {
-         sub_map1 = NULL;
-         match = astSubFrame( target->frame1, template, n1, target_axes1,
-                              template_axes1, &sub_map1, result );
-
-/* If this is successful, the "result" Frame will be ready to return
-   and "sub_map1" will point at a Mapping that converts from the first
-   component Frame to the "result" Frame. We must now modify this
-   mapping to account for the CmpFrame's axis permutation array
-   (i.e. make it refer back to the CmpFrame's original axis order). */
-         if ( astOK && match ) {
-
-/* To do this we must prefix the Mapping with a PermMap which converts
-   between the target CmpFrame axes and those of the first component
-   Frame. Allocate space for the permutation arrays required. */
-            inperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
-            outperm_pref = astMalloc( sizeof( int ) * (size_t) naxes1 );
-            if ( astOK ) {
-
-/* Permute each target axis index. */
-               for ( target_axis = 0; target_axis < naxes; target_axis++ ) {
-                  axis_p = perm[ target_axis ];
-
-/* Set up arrays that describe this permutation and its inverse. */
-                  if ( axis_p < naxes1 ) {
-                     inperm_pref[ target_axis ] = axis_p;
-                     outperm_pref[ axis_p ] = target_axis;
-
-/* Note which target axes do not correspond with axes in the first
-   component Frame and assign -1 (so the PermMap will assign "bad"
-   coordinate values to these axes). */
-                  } else {
-                     inperm_pref[ target_axis ] = -1;
-                  }
-               }
-
-/* Use these permutation arrays to construct the PermMap. Prefix this
-   to the Mapping obtained earlier to give the final Mapping to be
-   returned. */
-               permmap_pref =
-                  (AstMapping *) astPermMap( naxes, inperm_pref,
-                                             naxes1, outperm_pref, NULL, "", status );
-               *map = (AstMapping *) astCmpMap( permmap_pref, sub_map1, 1, "", status );
-
-/* Annul the PermMap pointer. */
-               permmap_pref = astAnnul( permmap_pref );
-            }
-
-/* Free the permutation arrays and annul the original Mapping pointer. */
-            inperm_pref = astFree( inperm_pref );
-            outperm_pref = astFree( outperm_pref );
-            sub_map1 = astAnnul( sub_map1 );
-         }
-
-/* Select from second component Frame only. */
-/* ---------------------------------------- */
-/* If all the selected axes come from the second component Frame, use
-   that Frame's astSubFrame method to select them (and overlay the
-   template attributes if required). */
-      } else if ( n2 && !n1 ) {
-         sub_map2 = NULL;
-         match = astSubFrame( target->frame2, template, n2, target_axes2,
-                              template_axes2, &sub_map2, result );
-
-/* If this is successful, the "result" Frame will be ready to return
-   and "sub_map2" will point at a Mapping that converts from the second
-   component Frame to the "result" Frame. We must now modify this
-   mapping to account for the CmpFrame's axis permutation array
-   (i.e. make it refer back to the CmpFrame's original axis order). */
-         if ( astOK && match ) {
-
-/* To do this we must prefix the Mapping with a PermMap which converts
-   between the target CmpFrame axes and those of the second component
-   Frame. Allocate space for the permutation arrays required. */
-            inperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
-            outperm_pref = astMalloc( sizeof( int ) * (size_t) naxes2 );
-            if ( astOK ) {
-
-/* Permute each target axis index. */
-               for ( target_axis = 0; target_axis < naxes; target_axis++ ) {
-                  axis_p = perm[ target_axis ];
-
-/* Set up arrays that describe this permutation and its inverse,
-   allowing for the shift in axis numbering for the second component
-   Frame. */
-                  if ( axis_p >= naxes1 ) {
-                     inperm_pref[ target_axis ] = axis_p - naxes1;
-                     outperm_pref[ axis_p - naxes1 ] = target_axis;
-
-/* Note which target axes do not correspond with axes in the second
-   component Frame and assign -1 (so the PermMap will assign "bad"
-   coordinate values to these axes). */
-                  } else {
-                     inperm_pref[ target_axis ] = -1;
-                  }
-               }
-
-/* Use these permutation arrays to construct the PermMap. Prefix this
-   to the Mapping obtained earlier to give the final Mapping to be
-   returned. */
-               permmap_pref =
-                  (AstMapping *) astPermMap( naxes, inperm_pref,
-                                             naxes2, outperm_pref, NULL, "", status );
-
-               *map = (AstMapping *) astCmpMap( permmap_pref, sub_map2, 1, "", status );
-
-/* Annul the PermMap pointer. */
-               permmap_pref = astAnnul( permmap_pref );
-            }
-
-/* Free the permutation arrays and annul the original Mapping pointer. */
-            inperm_pref = astFree( inperm_pref );
-            outperm_pref = astFree( outperm_pref );
-            sub_map2 = astAnnul( sub_map2 );
-         }
-
-/* Select from both component Frames. */
-/* ---------------------------------- */
-/* If the selected axes come from both component Frames, then use both
-   Frames' astSubFrame methods to select the required axes from each
-   of them (and overlay the template attributes if required). */
-      } else {
-         sub_map1 = NULL;
-         sub_map2 = NULL;
-         sub_result1 = NULL;
-         sub_result2 = NULL;
-         match = astSubFrame( target->frame1, template, n1, target_axes1,
-                              template_axes1, &sub_map1, &sub_result1 );
-         if ( match ) {
-            match = astSubFrame( target->frame2, template, n2, target_axes2,
-                                 template_axes2, &sub_map2, &sub_result2 );
-         }
-
-/* If this is successful, the two "result" Frames will need to be
-   combined together (in a CmpFrame) in order to produce the required
-   result, and the two accompanying Mappings will also need to be
-   applied in parallel (in a CmpMap). However, the axis order
-   resulting from this will still not match that required.
-
-   On the target side, this is because of the target's axis
-   permutation array.  On the result side, it is because the result
-   axes cannot be inter-mingled (as may be required) simply by joining
-   the Frames and Mappings in parallel. The resulting CmpFrame axes
-   will therefore need permuting into the required final order. */
-         if ( astOK && match ) {
-
-/* In addition, the Mappings will need to be both prefixed and
-   suffixed with suitable PermMaps which re-order the axes. Allocate
-   space for the permutation arrays required. */
-            inperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
-            outperm_pref = astMalloc( sizeof( int ) * (size_t) naxes );
-            inperm_suff = astMalloc( sizeof( int ) * (size_t) result_naxes );
-            outperm_suff = astMalloc( sizeof( int ) * (size_t) result_naxes );
-            if ( astOK ) {
-
-/* Set up permutation arrays to construct the prefix PermMap. This
-   simply represents the target CmpFrame's axis permutation array and
-   its inverse. */
-               for ( target_axis = 0; target_axis < naxes; target_axis++ ) {
-                  axis_p = perm[ target_axis ];
-                  inperm_pref[ target_axis ] = axis_p;
-                  outperm_pref[ axis_p ] = target_axis;
-               }
-
-/* Set up permutation arrays to construct the suffix PermMap. This
-   represents the way the original axis selections were partitioned
-   between the two component frames. */
-               i1 = i2 = 0;
-               for ( result_axis = 0; result_axis < result_naxes;
-                                      result_axis++ ) {
-
-/* For each result axis derived from the first component Frame, set up
-   permutation array elements to link the output axis with the next
-   component Frame axis. Count the number of component Frame axes
-   used. */
-                  if ( frame_choice[ result_axis ] == 1 ) {
-                     inperm_suff[ i1 ] = result_axis;
-                     outperm_suff[ result_axis ] = i1;
-                     i1++;
-
-/* Similarly link the axes derived from the second component Frame
-   with the appropriate axes of that Frame. */
-                  } else {
-                     inperm_suff[ n1 + i2 ] = result_axis;
-                     outperm_suff[ result_axis ] = n1 + i2;
-                     i2++;
-                  }
-               }
-
-/* Combine the Mappings supplied by the two component Frames in
-   parallel. */
-               sub_map = (AstMapping *) astCmpMap( sub_map1, sub_map2, 0, "", status );
-
-/* Create the PermMaps which are to be used as a prefix and a suffix. */
-               permmap_pref =
-                  (AstMapping *) astPermMap( naxes, inperm_pref,
-                                             naxes, outperm_pref, NULL, "", status );
-               permmap_suff =
-                  (AstMapping *) astPermMap( result_naxes, inperm_suff,
-                                             result_naxes, outperm_suff,
-                                             NULL, "", status );
-
-/* Add the prefix and suffix PermMaps. */
-               tmp_map = (AstMapping *) astCmpMap( permmap_pref, sub_map,
-                                                   1, "", status );
-               *map = (AstMapping *) astCmpMap( tmp_map, permmap_suff, 1, "", status );
-
-/* Annul the Mapping pointers that are no longer required. */
-               sub_map = astAnnul( sub_map );
-               permmap_pref = astAnnul( permmap_pref );
-               permmap_suff = astAnnul( permmap_suff );
-               tmp_map = astAnnul( tmp_map );
-
-/* Create the result CmpFrame by combining the two component result
-   Frames and permuting the resulting axes into the required order. */
-               *result = (AstFrame *) astCmpFrame( sub_result1, sub_result2,
-                                                   "", status );
-               astPermAxes( *result, outperm_suff );
-
-/* ADDED BY DSB (5-FEB-2001). Without this, properties of the target frame
-   (most importantly, Domain) are not transferred to the result frame.
-   This results in Frames not matching which should match.
-   =================================================================== */
-
-/* If the result CmpFrame includes all the axes of the target CmpFrame,
-   then it should inherit any Domain and Title attributes set in the target
-   CmpFrame. */
-               if( result_naxes == naxes ) {
-
-                  if( astTestDomain( target ) ) {
-                     astSetDomain( *result, astGetDomain( target ) );
-                  }
-
-                  if( astTestTitle( target ) ) {
-                     astSetTitle( *result, astGetTitle( target ) );
-                  }
-               }
-
-/* End of DSB insertion (5/2/01).
-   =================================================================== */
-            }
-
-/* Free the temporary permutation arrays. */
-            inperm_pref = astFree( inperm_pref );
-            inperm_suff = astFree( inperm_suff );
-            outperm_pref = astFree( outperm_pref );
-            outperm_suff = astFree( outperm_suff );
-         }
-
-/* Annul the Mapping and Frame pointers obtained from each component
-   Frame. */
-         if( sub_map1 ) sub_map1 = astAnnul( sub_map1 );
-         if( sub_map2 ) sub_map2 = astAnnul( sub_map2 );
-         if( sub_result1 ) sub_result1 = astAnnul( sub_result1 );
-         if( sub_result2 ) sub_result2 = astAnnul( sub_result2 );
-      }
-   }
-
-/* Free the workspace used to store the choice of component Frame and the
-   axis indices for each component Frame. */
-   frame_choice = astFree( frame_choice );
-   target_axes1 = astFree( target_axes1 );
-   target_axes2 = astFree( target_axes2 );
-
-/* If necessary, also free the memory used for the template axis
-   indices. */
-   if ( template ) {
-      template_axes1 = astFree( template_axes1 );
-      template_axes2 = astFree( template_axes2 );
-   }
-
-/* If an error occurred, clean up by annulling the result pointers and
-   returning appropriate null values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a CmpFrame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   char buf1[80];                /* For for un-indexed attribute name */
-   char buf2[80];                /* For for indexed attribute name */
-   int axis;                     /* Supplied (1-base) axis index */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* Length of string used so far */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Index of primary Frame axis */
-   int result;                   /* Result value to return */
-   int ok;                       /* Has the attribute been accessed succesfully? */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Indicate we have not yet acessed the attribute succesfully. */
-   ok = 0;
-
-/* First check the supplied attribute name against each of the attribute
-   names defined by this class. In fact there is nothing to do here
-   since the CmpFrame class currently defines no extra attributes, but 
-   this may change in the future. */
-   if( 0 ) {
-
-
-
-/* If the attribute is not a CmpFrame specific attribute... */
-   } else if( astOK ) {
-
-/* We want to allow easy access to the attributes of the component Frames.
-   That is, we do not want it to be necessary to extract a Frame from
-   its parent CmpFrame in order to access its attributes. For this reason 
-   we first temporarily switch off error reporting so that if an attempt 
-   to access the attribute fails, we can try a different approach. */
-      oldrep = astReporting( 0 );
-      
-/* Our first attempt is to see if the attribute is recognised by the parent
-   class (Frame). */
-      result = (*parent_testattrib)( this_object, attrib, status );
-
-/* Indicate success. */
-      if( astOK ) {
-         ok = 1;
-
-/* Otherwise, clear the error condition so that we can try a different 
-   approach. */
-      } else {
-         astClearStatus;
-
-/* If the attribute is qualified by an axis index, try accessing it as an
-   attribute of the primary Frame containing the specified index. */
-         if ( nc = 0,
-             ( 2 == astSscanf( attrib, "%[^(](%d)%n", buf1, &axis, &nc ) )
-             && ( nc >= len ) ) {
-
-/* Find the primary Frame containing the specified axis. */
-            astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-            if( astOK ) {
-
-/* Create a new attribute with the same name but with the axis index
-   appropriate to the primary Frame. */
-               sprintf( buf2, "%s(%d)", buf1, paxis + 1 );
-
-/* Attempt to access the attribute. */
-               result = astTestAttrib( pfrm, buf2 );
-
-/* Indicate success. */
-               if( astOK ) {
-                  ok = 1;
-
-/* Otherwise clear the status value, and try again without any axis index. */
-               } else {               
-                  astClearStatus;
-                  result = astTestAttrib( pfrm, buf1 );
-
-/* Indicate success, or clear the status value. */
-                  if( astOK ) {
-                     ok = 1;
-                  } else {
-                     astClearStatus;
-                  }
-               }
-
-/* Free the primary frame pointer. */
-               pfrm = astAnnul( pfrm );
-            }
-
-/* If the attribute is not qualified by an axis index, try accessing it
-   using the primary Frame of each axis in turn. */
-         } else {
-
-/* Loop round all axes, until one is found which defines the specified
-   attribute. */
-	    for( axis = 0; axis < astGetNaxes( this ) && !ok; axis++ ) {
-
-/* Get the primary Frame containing this axis. */
-               astPrimaryFrame( this, axis, &pfrm, &paxis );
-
-/* Attempt to access the attribute as an attribute of the primary Frame. */
-               result = astTestAttrib( pfrm, attrib );
-
-/* Indicate success, or clear the status value. */
-               if( astOK ) {
-                  ok = 1;
-               } else {
-                  astClearStatus;
-               }
-
-/* Free the primary Frame pointer. */
-               pfrm = astAnnul( pfrm );
-
-            }
-         }
-      }
-
-/* Re-instate the original error reporting state. */
-      astReporting( oldrep );
-
-   }
-
-/* Report an error if the attribute could not be accessed. */
-   if( !ok && astOK ) {
-      astError( AST__BADAT, "astTest: The %s given does not have an attribute "
-                "called \"%s\".", status, astGetClass( this ), attrib );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astTransform method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function takes a CmpFrame and a set of points encapsulated
-*     in a PointSet, and applies the coordinate transformation equivalent
-*     to the CmpFrame (this will normally be a UnitMap but may not be if
-*     the CmpFrame contains any Regions).
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation. 
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of axes in the CmpFrame. 
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and coordinate values per point to
-*     accommodate the result (e.g. the number of CmpFrame axes). Any 
-*     excess space will be ignored.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;        /* Pointer to original CmpFrame structure */
-   AstCmpMap *map2;          /* Intermediate Mapping */
-   AstCmpMap *map;           /* Equivalent Mapping */
-   AstPermMap *pmap;         /* Intermediate PermMap */
-   AstPointSet *result;      /* Pointer value to return */
-   const int *inperm;        /* Pointer to axis permutation array */
-   int *outperm;             /* Pointer to inverse axis permutation array */
-   int i;                    /* External axis index */
-   int naxes;                /* Number of axes in CmpFrame */
-   int perm;                 /* Is there an axis permutation to undo? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_mapping;
-
-/* Form a parallel CmpMap from the two component Frames. */
-   map = astCmpMap( this->frame1, this->frame2, 0, "", status );
-
-/* The above CmpMap does not take into account any axis permutation 
-   which has been applied to the CmpFrame as a whole (as opposed to axis
-   permutations applied to the individual component Frames, which are taken
-   care of by the Transform methods of the individual Frames). Therefore
-   we need to modify the Mapping by adding a PermMap at the start which 
-   converts from external axis numbering to internal axis numbering, and a 
-   corresponding PermMap at the end which converts from internal to external
-   axis numbering. Obtain the number of axes in the CmpFrame */
-   naxes = astGetNaxes( this );
-
-/* Obtain a pointer to the CmpFrame's axis permutation array. This
-   contains internal axis numbers and is indexed by external axis number. */
-   inperm = astGetPerm( this );
-
-/* Check if there is any axis permutation to be performed. */
-   perm = 0;
-   for( i = 0; i < naxes; i++ ) {
-      if( inperm[ i ] != i ) {
-         perm = 1;
-         break;
-      }
-   }
-
-/* If so, create an array holding the inverse permutation - one which 
-   contains external axis numbers and is indexed by internal axis number. */
-   if( perm ) {
-      outperm = astMalloc( sizeof( int )*(size_t) naxes );
-      if( astOK ) for( i = 0; i < naxes; i++ ) outperm[ inperm[ i ] ] = i;
-
-/* Create a PermMap from these permutation arrays. The forward
-   transformation maps from external axis indices to internal axis 
-   indices. */
-      pmap = astPermMap( naxes, inperm, naxes, outperm, NULL, "", status );
-      outperm = astFree( outperm );
-
-/* Combine this PermMap with the CmpMap created above, adding it in the
-   forward direction at the start and in the inverse direction at the end. */
-      map2 = astCmpMap( pmap, map, 1, "", status );
-      map = astAnnul( map );
-      astInvert( pmap );
-      map = astCmpMap( map2, pmap, 1, "", status );
-      map2 = astAnnul( map2 );
-      pmap = astAnnul( pmap );
-
-   }
-
-/* Apply the Mapping to the input PointSet. */
-   result = astTransform( map, in, forward, out );
-
-/* Annul the Mapping pointer. */
-   map = astAnnul( map );
-
-/* If an error has occurred and a new PointSet may have been created, then
-   clean up by annulling it. In any case, ensure that a NULL result is
-   returned.*/
-   if ( !astOK ) {
-      if ( !out ) result = astAnnul( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     Unformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a CmpFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int Unformat( AstFrame *this, int axis, const char *string,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the public astUnformat
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reads a formatted coordinate value for a CmpFrame
-*     axis (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame.
-*     axis
-*        The number of the CmpFrame axis for which the coordinate
-*        value is to be read (axis numbering starts at zero for the
-*        first axis).
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-   AstFrame *frame;              /* Pointer to Frame containing axis */
-   double coord;                 /* Coordinate value read */
-   int naxes1;                   /* Number of axes in frame1 */
-   int nc;                       /* Number of characters read */
-   int set;                      /* Digits attribute set? */
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_frame;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astUnformat" );
-
-/* Determine the number of axes in the first component Frame. */
-   naxes1 = astGetNaxes( this->frame1 );
-   if ( astOK ) {
-
-/* Decide which component Frame contains the axis and adjust the axis
-   index if necessary. */
-      frame = ( axis < naxes1 ) ? this->frame1 : this->frame2;
-      axis = ( axis < naxes1 ) ? axis : axis - naxes1;
-
-/* Since the component Frame is "managed" by the enclosing CmpFrame,
-   we next test if any Frame attributes which may affect the result
-   are undefined (i.e. have not been explicitly set). If so, we
-   over-ride them, giving them temporary values dictated by the
-   CmpFrame. Only the Digits attribute is potentially relevant
-   here. */
-      set = astTestDigits( frame );
-      if ( !set ) astSetDigits( frame, astGetDigits( this ) );
-
-/* Invoke the Frame's astUnformat method to read the coordinate value. */
-      nc = astUnformat( frame, axis, string, &coord );
-
-/* Clear Frame attributes which were temporarily over-ridden. */
-      if ( !set ) astClearDigits( frame );
-   }
-
-/* If an error occurred, clear the number of characters read. */
-   if ( !astOK ) {
-      nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
-   } else if ( nc ) {
-      *value = coord;
-   }
-
-/* Return the number of chracters read. */
-   return nc;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a CmpFrame's System attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system, 
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     CmpFrame member function (over-rides the astValidateSystem method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked. 
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;              /* Validated system value */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
-   if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
-         astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
-                   "or AlignSystem attribute of a %s.", status, method, 
-                   astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
-   } else {
-      result = system;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   the axes of a CmpFrame using the private macros defined for this
-   purpose at the start of this file. */
-
-/* Direction(axis). */
-/* ---------------- */
-MAKE_CLEAR(Direction)
-MAKE_GET(Direction,int,0,0,0)
-MAKE_SET(Direction,int)
-MAKE_TEST(Direction)
-
-/* Format(axis). */
-/* ------------- */
-MAKE_CLEAR(Format)
-MAKE_GET(Format,const char *,NULL,0,NULL)
-MAKE_SET(Format,const char *)
-MAKE_TEST(Format)
-
-/* Label(axis). */
-/* ------------ */
-MAKE_CLEAR(Label)
-
-/* Over-ride the default axis labels produced by Frame class objects
-   and substitute the axis numbering of the enclosing CmpFrame
-   instead. */
-static const char *label_class;
-MAKE_GET(Label,const char *,NULL,( label_class = astGetClass( frame ),
-                                   ( astOK && !strcmp( label_class,
-                                                       "Frame" ) ) ),
-         ( (void) sprintf( label_buff, "Axis %d", axis + 1 ), label_buff ))
-MAKE_SET(Label,const char *)
-MAKE_TEST(Label)
-
-/* Symbol(axis). */
-/* ------------- */
-MAKE_CLEAR(Symbol)
-
-/* Over-ride the default axis symbols produced by Frame class objects
-   and substitute the axis numbering of the enclosing CmpFrame
-   instead. */
-static const char *symbol_class;
-MAKE_GET(Symbol,const char *,NULL,( symbol_class = astGetClass( frame ),
-                                    ( astOK && !strcmp( symbol_class,
-                                                        "Frame" ) ) ),
-         ( (void) sprintf( symbol_buff, "x%d", axis + 1 ), symbol_buff ))
-MAKE_SET(Symbol,const char *)
-MAKE_TEST(Symbol)
-
-/* Unit(axis). */
-/* ----------- */
-MAKE_CLEAR(Unit)
-MAKE_GET(Unit,const char *,NULL,0,NULL)
-MAKE_SET(Unit,const char *)
-MAKE_TEST(Unit)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for CmpFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for CmpFrame objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *in;              /* Pointer to input CmpFrame */
-   AstCmpFrame *out;             /* Pointer to output CmpFrame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output CmpFrames. */
-   in = (AstCmpFrame *) objin;
-   out = (AstCmpFrame *) objout;
-
-/* Copy the two component Frames. */
-   out->frame1 = astCopy( in->frame1 );
-   out->frame2 = astCopy( in->frame2 );
-
-/* Determine the number of axes and copy the axis permutation
-   array. */
-   out->perm = astStore( NULL, in->perm, sizeof( int ) *
-                         (size_t) GetNaxes( (AstFrame *) in, status ) );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for CmpFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for CmpFrame objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error
-*     status is set.
-*/
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to CmpFrame structure */
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) obj;
-
-/* Annul the two component Frame pointers. */
-   if ( this->frame1 ) this->frame1 = astAnnul( this->frame1 );
-   if ( this->frame2 ) this->frame2 = astAnnul( this->frame2 );
-
-/* Free the axis permutation array. */
-   if ( this->perm ) this->perm = astFree( this->perm );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for CmpFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the CmpFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150          /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstCmpFrame *this;            /* Pointer to the CmpFrame structure */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keywords */
-   int axis;                     /* Loop counter for CmpFrame axes */
-   int full;                     /* Full attribute value */
-   int full_set;                 /* Full attribute set? */
-   int ival;                     /* Integer value */
-   int naxes;                    /* Number of CmpFrame axes */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpFrame structure. */
-   this = (AstCmpFrame *) this_object;
-
-/* Write out values representing the instance variables for the
-   CmpFrame class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Obtain the number of CmpFrame axes. */
-   naxes = GetNaxes( (AstFrame *) this, status );
-
-/* Write out the CmpFrame axis permutation array value for each axis,
-   converting to 1-based axis numbering. */
-   for ( axis = 0; axis < naxes; axis++ ) {
-      set = ( this->perm[ axis ] != axis );
-      ival = this->perm[ axis ] + 1;
-
-/* Create a keyword and comment appropriate to the axis. */
-      (void) sprintf( key, "Axp%d", axis + 1 );
-      if ( set ) {
-         (void) sprintf( comment,
-                         "Axis %d permuted to use internal axis %d",
-                         axis + 1, ival );
-      } else {
-         (void) sprintf( comment, "Axis %d not permuted", axis + 1 );
-      }
-      astWriteInt( channel, key, set, 0, ival, comment );
-   }
-
-/* Component Frames. */
-/* ----------------- */
-/* Temporarily set the Channel's Full attribute to -1 (unless it is +1
-   to start with), remembering the original setting. This prevents any
-   unnecessary "un-set" Frame values being output that would otherwise
-   simply duplicate the CmpFrame's attributes which have already been
-   written. "Set" Frame values are still written, however (and all
-   values are written if Full is set to 1). */
-   full_set = astTestFull( channel );
-   full = astGetFull( channel );
-   if ( full <= 0 ) astSetFull( channel, -1 );
-
-/* Write out Object descriptions for the two component Frames. */
-   astWriteObject( channel, "FrameA", 1, 1, this->frame1,
-                   "First component Frame" );
-   astWriteObject( channel, "FrameB", 1, 1, this->frame2,
-                   "Second component Frame" );
-
-/* Restore the Channel's original Full attribute setting. */
-   if ( full_set ) {
-      astSetFull( channel, full );
-   } else {
-      astClearFull( channel );
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACmpFrame and astCheckCmpFrame functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(CmpFrame,Frame)
-astMAKE_CHECK(CmpFrame)
-
-AstCmpFrame *astCmpFrame_( void *frame1_void, void *frame2_void,
-                           const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astCmpFrame
-f     AST_CMPFRAME
-
-*  Purpose:
-*     Create a CmpFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "cmpframe.h"
-c     AstCmpFrame *astCmpFrame( AstFrame *frame1, AstFrame *frame2,
-c                               const char *options, ... )
-f     RESULT = AST_CMPFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
-
-*  Class Membership:
-*     CmpFrame constructor.
-
-*  Description:
-*     This function creates a new CmpFrame and optionally initialises
-*     its attributes.
-*
-*     A CmpFrame is a compound Frame which allows two component Frames
-*     (of any class) to be merged together to form a more complex
-*     Frame. The axes of the two component Frames then appear together
-*     in the resulting CmpFrame (those of the first Frame, followed by
-*     those of the second Frame).
-*
-*     Since a CmpFrame is itself a Frame, it can be used as a
-*     component in forming further CmpFrames. Frames of arbitrary
-*     complexity may be built from simple individual Frames in this
-*     way.
-*
-*     Also since a Frame is a Mapping, a CmpFrame can also be used as a 
-*     Mapping. Normally, a CmpFrame is simply equivalent to a UnitMap,
-*     but if either of the component Frames within a CmpFrame is a Region 
-*     (a sub-class of Frame), then the CmpFrame will use the Region as a
-*     Mapping when transforming values for axes described by the Region. 
-*     Thus input axis values corresponding to positions which are outside the 
-*     Region will result in bad output axis values.
-
-*  Parameters:
-c     frame1
-f     FRAME1 = INTEGER (Given)
-*        Pointer to the first component Frame.
-c     frame2
-f     FRAME2 = INTEGER (Given)
-*        Pointer to the second component Frame.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new CmpFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new CmpFrame. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astCmpFrame()
-f     AST_CMPFRAME = INTEGER
-*        A pointer to the new CmpFrame.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-
-*  Implementation Notes:
-*     - This function implements the basic CmpFrame constructor which
-*     is available via the protected interface to the CmpFrame class.
-*     A public interface is provided by the astCmpFrameId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "frame1" and "frame2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpFrame *new;             /* Pointer to new CmpFrame */
-   AstFrame *frame1;             /* Pointer to first Frame structure */
-   AstFrame *frame2;             /* Pointer to second Frame structure */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   new = NULL;
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Frame structures provided. */
-   frame1 = astCheckFrame( frame1_void );
-   frame2 = astCheckFrame( frame2_void );
-   if ( astOK ) {
-
-/* Initialise the CmpFrame, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitCmpFrame( NULL, sizeof( AstCmpFrame ), !class_init,
-                             &class_vtab, "CmpFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   CmpFrame's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new CmpFrame. */
-   return new;
-}
-
-AstCmpFrame *astCmpFrameId_( void *frame1_void, void *frame2_void,
-                             const char *options, ... ) {
-/*
-*  Name:
-*     astCmpFrameId_
-
-*  Purpose:
-*     Create a CmpFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstCmpFrame *astCmpFrameId_( void *frame1_void, void *frame2_void,
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     CmpFrame constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astCmpFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astCmpFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur). For the same reason, the "frame1" and "frame2"
-*     parameters are of type (void *) and are converted and validated
-*     within the function itself.
-*
-*     The variable argument list also prevents this function from
-*     invoking astCmpFrame_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-
-*  Parameters:
-*     As for astCmpFrame_.
-
-*  Returned Value:
-*     The ID value associated with the new CmpFrame.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpFrame *new;             /* Pointer to new CmpFrame */
-   AstFrame *frame1;             /* Pointer to first Frame structure */
-   AstFrame *frame2;             /* Pointer to second Frame structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   new = NULL;
-   if ( !astOK ) return new;
-
-/* Obtain the Frame pointers from the ID's supplied and validate the
-   pointers to ensure they identify valid Frames. */
-   frame1 = astVerifyFrame( astMakePointer( frame1_void ) );
-   frame2 = astVerifyFrame( astMakePointer( frame2_void ) );
-   if ( astOK ) {
-
-/* Initialise the CmpFrame, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitCmpFrame( NULL, sizeof( AstCmpFrame ), !class_init,
-                             &class_vtab, "CmpFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   CmpFrame's attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new CmpFrame. */
-   return astMakeId( new );
-}
-
-AstCmpFrame *astInitCmpFrame_( void *mem, size_t size, int init,
-                               AstCmpFrameVtab *vtab, const char *name,
-                               AstFrame *frame1, AstFrame *frame2, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCmpFrame
-
-*  Purpose:
-*     Initialise a CmpFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstCmpFrame *astInitCmpFrame( void *mem, size_t size, int init,
-*                                   AstCmpFrameVtab *vtab, const char *name,
-*                                   AstFrame *frame1, AstFrame *frame2 )
-
-*  Class Membership:
-*     CmpFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new CmpFrame object. It allocates memory (if
-*     necessary) to accommodate the CmpFrame plus any additional data
-*     associated with the derived class.  It then initialises a
-*     CmpFrame structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a CmpFrame at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the CmpFrame is to be
-*        created. This must be of sufficient size to accommodate the
-*        CmpFrame data (sizeof(CmpFrame)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the CmpFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the CmpFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the CmpFrame's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new CmpFrame.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the Object astClass function).
-*     frame1
-*        Pointer to the first Frame to be included in the new CmpFrame.
-*     frame2
-*        Pointer to the second Frame to be included in the new CmpFrame.
-
-*  Returned Value:
-*     A pointer to the new CmpFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *new;             /* Pointer to new CmpFrame */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of CmpFrame axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitCmpFrameVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first
-   component within the CmpFrame structure, allocating memory if
-   necessary. Set the number of Frame axes to zero, since all axis
-   information is stored within the component Frames. */
-   new = (AstCmpFrame *) astInitFrame( mem, size, 0, (AstFrameVtab *) vtab,
-                                       name, 0 );
-
-   if ( astOK ) {
-
-/* Initialise the CmpFrame data. */
-/* ----------------------------- */
-/* Clone the component Frame pointers. */
-      new->frame1 = astClone( frame1 );
-      new->frame2 = astClone( frame2 );
-
-/* Determine the number of CmpFrame axes. */
-      naxes = astGetNaxes( frame1 ) + astGetNaxes( frame2 );
-
-/* Allocate memory to hold the axis permutation array and initialise
-   this array. */
-      new->perm = astMalloc( sizeof( int ) * (size_t) naxes );
-      if ( astOK ) {
-         for ( axis = 0; axis < naxes; axis++ ) new->perm[ axis ] = axis;
-      }
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstCmpFrame *astLoadCmpFrame_( void *mem, size_t size,
-                               AstCmpFrameVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadCmpFrame
-
-*  Purpose:
-*     Load a CmpFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpframe.h"
-*     AstCmpFrame *astLoadCmpFrame( void *mem, size_t size,
-*                                   AstCmpFrameVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     CmpFrame loader.
-
-*  Description:
-*     This function is provided to load a new CmpFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     CmpFrame structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the CmpFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        CmpFrame data (sizeof(CmpFrame)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the CmpFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the CmpFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstCmpFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new CmpFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the CmpFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "CmpFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new CmpFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstCmpFrame *new;             /* Pointer to the new CmpFrame */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keywords */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of CmpFrame axes */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this CmpFrame. In this case the
-   CmpFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstCmpFrame );
-      vtab = &class_vtab;
-      name = "CmpFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitCmpFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built CmpFrame. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "CmpFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Component Frames. */
-/* ----------------- */
-/* Read both component Frames, supplying a default 1-dimensional Frame
-   if necessary. */
-      new->frame1 = astReadObject( channel, "framea", NULL );
-      if ( !new->frame1 ) new->frame1 = astFrame( 1, "", status );
-
-      new->frame2 = astReadObject( channel, "frameb", NULL );
-      if ( !new->frame2 ) new->frame2 = astFrame( 1, "", status );
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Obtain the number of CmpFrame axes and allocate memory to hold the
-   axis permutation array. */
-      naxes = GetNaxes( (AstFrame *) new, status );
-      new->perm = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* If OK, loop to read the array value for each axis. */
-      if ( astOK ) {
-         for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Convert from 1-based to zero-based axis numbering at this
-   point. The default is the "un-permuted" value. */
-            sprintf( key, "axp%d", axis + 1 );
-            new->perm[ axis ] = astReadInt( channel, key, axis + 1 ) - 1;
-
-/* Quit looping if an error occurs. */
-            if ( !astOK ) break;
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new CmpFrame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new CmpFrame pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/cmpframe.h b/ast-5.3-1/cmpframe.h
deleted file mode 100644
index a4d6b33..0000000
--- a/ast-5.3-1/cmpframe.h
+++ /dev/null
@@ -1,428 +0,0 @@
-#if !defined( CMPFRAME_INCLUDED ) /* Include this file only once */
-#define CMPFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     cmpframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the CmpFrame class.
-
-*  Invocation:
-*     #include "cmpframe.h"
-
-*  Description:
-*     This include file defines the interface to the CmpFrame class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-*
-*     A CmpFrame is a compound Frame which allows two component Frames
-*     (of any class) to be merged together to form a more complex
-*     Frame. The axes of the two component Frames then appear together
-*     in the resulting CmpFrame (those of the first Frame, followed by
-*     those of the second Frame).
-*
-*     Since a CmpFrame is itself a Frame, it can be used as a
-*     component in forming further CmpFrames. Frames of arbitrary
-*     complexity may be built from simple individual Frames in this
-*     way.
-
-*  Inheritance:
-*     The CmpFrame class inherits from the Frame class.
-
-*  Attributes Over-Ridden:
-*     Domain (string)
-*        A string which may be used to identify a CmpFrame and used as
-*        an additional key when matching a target CmpFrame with a
-*        template.  The CmpFrame class re-defines the default value to
-*        "CMP".
-*     MaxAxes (integer)
-*        Specifies the maximum number of axes in a target Frame that
-*        can be matched when using the CmpFrame as a template. The
-*        CmpFrame class sets this to be the sum of the MaxAxes
-*        attribute values for the two component Frames contained by
-*        the CmpFrame. Any attempt to alter this value (other than
-*        through the component Frames) is simply ignored.
-*     MinAxes (integer)
-*        Specifies the minimum number of axes in a target Frame that
-*        can be matched when using the CmpFrame as a template. The
-*        CmpFrame class sets this to be the sum of the MinAxes
-*        attribute values for the two component Frames contained by
-*        the CmpFrame. Any attempt to alter this value (other than
-*        through the component Frames) is simply ignored.
-*     Naxes (integer)
-*        A read-only attribute that gives the number of axes in a
-*        CmpFrame (i.e. the number of dimensions of the space which
-*        the CmpFrame describes). This value is determined when the
-*        CmpFrame is created and is equal to the sum of the Naxes
-*        attributes of the two component Frames.
-*     Title (string)
-*        Specifies a string to be used as a title on (e.g.) graphs to
-*        describe the coordinate system which the CmpFrame
-*        represents. The CmpFrame class re-defines the default value
-*        to "<n>-D Compound Coordinate System", where <n> is the
-*        number of CmpFrame axes.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astDistance
-*           Calculate the distance between two points.
-*        astFormat
-*           Format a coordinate value for a CmpFrame axis.
-*        astNorm
-*           Normalise a set of CmpFrame coordinates.
-*        astOffset
-*           Calculate an offset along a geodesic curve.
-*        astPermAxes
-*           Permute the order of a CmpFrame's axes.
-*        astUnformat
-*           Read a formatted coordinate value for a CmpFrame axis.
-*
-*     Protected:
-*        astAbbrev
-*           Abbreviate a formatted CmpFrame axis value by skipping leading
-*           fields.
-*        astClearDirection
-*           Clear the value of the Direction attribute for a CmpFrame axis.
-*        astClearFormat
-*           Clear the value of the Format attribute for a CmpFrame axis.
-*        astClearLabel
-*           Clear the value of the Label attribute for a CmpFrame axis.
-*        astClearMaxAxes
-*           Clear the value of the MaxAxes attribute for a CmpFrame.
-*        astClearMinAxes
-*           Clear the value of the MinAxes attribute for a CmpFrame.
-*        astClearSymbol
-*           Clear the value of the Symbol attribute for a CmpFrame axis.
-*        astClearUnit
-*           Clear the value of the Unit attribute for a CmpFrame axis.
-*        astGap
-*           Find a "nice" gap for tabulating CmpFrame axis values.
-*        astGetAxis
-*           Obtain a pointer to a specified Axis from a CmpFrame.
-*        astGetDirection
-*           Obtain the value of the Direction attribute for a CmpFrame axis.
-*        astGetDomain
-*           Obtain a pointer to the Domain attribute string for a CmpFrame.
-*        astGetFormat
-*           Obtain the value of the Format attribute for a CmpFrame axis.
-*        astGetLabel
-*           Obtain the value of the Label attribute for a CmpFrame axis.
-*        astGetMaxAxes
-*           Obtain the value of the MaxAxes attribute for a CmpFrame.
-*        astGetMinAxes
-*           Obtain the value of the MinAxes attribute for a CmpFrame.
-*        astGetNaxes
-*           Obtain the value of the Naxes attribute for a CmpFrame.
-*        astGetPerm
-*           Access the axis permutation array for a CmpFrame.
-*        astGetSymbol
-*           Obtain the value of the Symbol attribute for a CmpFrame axis.
-*        astGetTitle
-*           Obtain a pointer to the Title attribute string for a CmpFrame.
-*        astGetUnit
-*           Obtain the value of the Unit attribute for a CmpFrame axis.
-*        astMatch
-*           Determine if conversion is possible between two coordinate
-*           systems.
-*        astPrimaryFrame
-*           Uniquely identify a primary Frame and one of its axes.
-*        astSetAxis
-*           Set a new Axis for a CmpFrame.
-*        astSetDirection
-*           Set the value of the Direction attribute for a CmpFrame axis.
-*        astSetFormat
-*           Set the value of the Format attribute for a CmpFrame axis.
-*        astSetLabel
-*           Set the value of the Label attribute for a CmpFrame axis.
-*        astSetMaxAxes
-*           Set a value for the MaxAxes attribute of a CmpFrame.
-*        astSetMinAxes
-*           Set a value for the MinAxes attribute of a CmpFrame.
-*        astSetSymbol
-*           Set the value of the Symbol attribute for a CmpFrame axis.
-*        astSetUnit
-*           Set the value of the Unit attribute for a CmpFrame axis.
-*        astSubFrame
-*           Select axes from a CmpFrame and convert to the new coordinate
-*           system.
-*        astTestDirection
-*           Test if a Direction attribute value has been set for a CmpFrame
-*           axis.
-*        astTestFormat
-*           Test if a Format attribute value has been set for a CmpFrame axis.
-*        astTestLabel
-*           Test if a Label attribute value has been set for a CmpFrame axis.
-*        astTestMaxAxes
-*           Test if a value has been set for the MaxAxes attribute of a
-*           CmpFrame.
-*        astTestMinAxes
-*           Test if a value has been set for the MinAxes attribute of a
-*           CmpFrame.
-*        astTestSymbol
-*           Test if a Symbol attribute value has been set for a CmpFrame axis.
-*        astTestUnit
-*           Test if a Unit attribute value has been set for a CmpFrame axis.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsACmpFrame
-*           Test class membership.
-*        astCmpFrame
-*           Create a CmpFrame.
-*
-*     Protected:
-*        astCheckCmpFrame
-*           Validate class membership.
-*        astInitCmpFrame
-*           Initialise a CmpFrame.
-*        astInitCmpFrameVtab
-*           Initialise the virtual function table for the CmpFrame class.
-*        astLoadCmpFrame
-*           Load a CmpFrame.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstCmpFrame
-*           CmpFrame object type.
-*
-*     Protected:
-*        AstCmpFrameVtab
-*           CmpFrame virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     6-MAR-1996 (RFWS):
-*        Original version.
-*     27-FEB-1997 (RFWS):
-*        Improved the prologue.
-*     25-FEB-1998 (RFWS):
-*        Over-ride the astUnformat method.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitCmpFrameVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Parent Frame class */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* The legal System values recognized by this class of Frame. */
-#define AST__COMP 0
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* CmpFrame structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstCmpFrame {
-
-/* Attributes inherited from the parent class. */
-   AstFrame frame;               /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstFrame *frame1;             /* First component frame */
-   AstFrame *frame2;             /* Second component Frame */
-   int *perm;                    /* Pointer to axis permutation array */
-} AstCmpFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstCmpFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstCmpFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstCmpFrameGlobals {
-   AstCmpFrameVtab Class_Vtab;
-   int Class_Init;
-   int *qsort_axes;
-   char Label_Buff[ 101 ];
-   char Symbol_Buff[ 51 ];
-   char GetDomain_Buff[ 101 ];
-   char GetTitle_Buff[ 101 ];
-} AstCmpFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(CmpFrame)         /* Check class membership */
-astPROTO_ISA(CmpFrame)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstCmpFrame *astCmpFrame_( void *, void *, const char *, int *, ...);
-#else
-AstCmpFrame *astCmpFrameId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstCmpFrame *astInitCmpFrame_( void *, size_t, int, AstCmpFrameVtab *,
-                               const char *, AstFrame *, AstFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitCmpFrameVtab_( AstCmpFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstCmpFrame *astLoadCmpFrame_( void *, size_t, AstCmpFrameVtab *,
-                               const char *, AstChannel *, int * );
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitCmpFrameGlobals_( AstCmpFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckCmpFrame(this) astINVOKE_CHECK(CmpFrame,this,0)
-#define astVerifyCmpFrame(this) astINVOKE_CHECK(CmpFrame,this,1)
-
-/* Test class membership. */
-#define astIsACmpFrame(this) astINVOKE_ISA(CmpFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astCmpFrame astINVOKE(F,astCmpFrame_)
-#else
-#define astCmpFrame astINVOKE(F,astCmpFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitCmpFrame(mem,size,init,vtab,name,frame1,frame2) \
-astINVOKE(O,astInitCmpFrame_(mem,size,init,vtab,name,astCheckFrame(frame1),astCheckFrame(frame2),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCmpFrameVtab(vtab,name) astINVOKE(V,astInitCmpFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCmpFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCmpFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCmpFrame to validate CmpFrame pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/cmpmap.c b/ast-5.3-1/cmpmap.c
deleted file mode 100644
index bf2e482..0000000
--- a/ast-5.3-1/cmpmap.c
+++ /dev/null
@@ -1,4402 +0,0 @@
-/*
-*class++
-*  Name:
-*     CmpMap
-
-*  Purpose:
-*     Compound Mapping.
-
-*  Constructor Function:
-c     astCmpMap
-f     AST_CMPMAP
-
-*  Description:
-*     A CmpMap is a compound Mapping which allows two component
-*     Mappings (of any class) to be connected together to form a more
-*     complex Mapping. This connection may either be "in series"
-*     (where the first Mapping is used to transform the coordinates of
-*     each point and the second mapping is then applied to the
-*     result), or "in parallel" (where one Mapping transforms the
-*     earlier coordinates for each point and the second Mapping
-*     simultaneously transforms the later coordinates).
-*
-*     Since a CmpMap is itself a Mapping, it can be used as a
-*     component in forming further CmpMaps. Mappings of arbitrary
-*     complexity may be built from simple individual Mappings in this
-*     way.
-
-*  Inheritance:
-*     The CmpMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The CmpMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The CmpMap class does not define any new functions beyond those
-f     The CmpMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     1-FEB-1996 (RFWS):
-*        Original version.
-*     25-SEP-1996 (RFWS):
-*        Implemented external interface and I/O facilities.
-*     12-DEC-1996 (RFWS):
-*        Over-ride the astMapList method.
-*     13-DEC-1996 (RFWS):
-*        Over-ride the astSimplify method.
-*     4-JUN-1997 (RFWS):
-*        Eliminate any simplification when MapList is used. Instead,
-*        over-ride the MapMerge method and implement all
-*        simplification in this.
-*     24-MAR-1998 (RFWS):
-*        Fixed bug in testing of simplified invert flag in Simplify.
-*     15-APR-1998 (RFWS):
-*        Improved the MapMerge method to allow parallel combinations
-*        of series CmpMaps to be replaced by series combinations of
-*        parallel CmpMaps, and vice versa.
-*     26-SEP-2001 (DSB):
-*        Over-ride the astDecompose method.
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitCmpMapVtab
-*        method.
-*     8-JAN-2003 (DSB):
-*        - Modified MapMerge so that a parallel CmpMap can swap with a
-*        suitable PermMap lower neighbour.
-*     23-APR-2004 (DSB):
-*        - Modified Simplify to avoid infinite loops.
-*     27-APR-2004 (DSB):
-*        - Correction to MapMerge to prevent segvio if CmpMap and PermMap
-*        cannot be swapped.
-*     4-OCT-2004 (DSB):
-*        Modify astMapList to return flag indicating presence of inverted
-*        CmpMaps in supplied Mapping.
-*     20-APR-2005 (DSB):
-*        Modify MapMerge so that it will attempt to merge the first
-*        and second CmpMaps in a list of series CmpMaps.
-*     8-FEB-2006 (DSB):
-*        Corrected logic within MapMerge for cases where a PermMap is
-*        followed by a parallel CmpMap.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     14-MAR-2006 (DSB):
-*        - When checking for patterns in the simplification process,
-*        require at least 30 samples in the waveform for evidence of a
-*        pattern.
-*        - Override astEqual.
-*        - The constructor no longer reports an error if the resulting
-*	 CmpMap cannot transform points in either direction. This is
-*	 because it may be possible to simplify such a CmpMap and the
-*	 simplified Mapping may have defined transformations. E.g. if a
-*	 Mapping which has only a forward transformation is combined in
-*	 series with its own inverse, the combination will simplify to a
-*	 UnitMap (usually).
-*     9-MAY-2006 (DSB):
-*        - In Simplify, remove checks for patterns in the number of atomic
-*        mappings when calling astSimplify recursively.
-*     23-AUG-2006 (DSB):
-*        - In Simplify, add checks for re-appearance of a Mapping that is
-*        already being simplified at a higher levelin the call stack.
-*     18-APR-2007 (DSB):
-*        In Simplify: if the returned Mapping is not a CmpMap, always copy 
-*        the returned component Mapping (rather than cloning it) so that 
-*        the returned Mapping is not affected if user code subsequently 
-*        inverts the component Mapping via some other pointer.
-*     12-MAR-2008 (DSB):
-*        Modify MapSplit so that attempts to split the inverse
-*        transformation if it cannot split the forward transformation.
-*     30-JUL-2009 (DSB):
-*        Ensure the PermMap has equal number of inputs and outputs when
-*        swapping a PermMap and a CmpMap in astMapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS CmpMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "permmap.h"             /* Coordinate permutation Mappings */
-#include "unitmap.h"             /* Unit transformations */
-#include "cmpmap.h"              /* Interface definition for this class */
-#include "frameset.h"            /* Interface definition for FrameSets */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int (* parent_maplist)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->Simplify_Depth = 0; \
-   globals->Simplify_Stackmaps = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(CmpMap)
-
-#define class_init astGLOBAL(CmpMap,Class_Init)
-#define class_vtab astGLOBAL(CmpMap,Class_Vtab)
-#define simplify_depth astGLOBAL(CmpMap,Simplify_Depth)
-#define simplify_stackmaps astGLOBAL(CmpMap,Simplify_Stackmaps)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static int simplify_depth  = 0;
-static AstMapping **simplify_stackmaps = NULL;
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstCmpMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstCmpMap *astCmpMapId_( void *, void *, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *CombineMaps( AstMapping *, int, AstMapping *, int, int, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int *MapSplit1( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapList( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int PatternCheck( int, int, int **, int *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int GetObjSize( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two CmpMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two CmpMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a CmpMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the CmpMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *that;        
-   AstCmpMap *this;        
-   AstMapping **that_map_list;        
-   AstMapping **this_map_list;        
-   int *that_invert_list;             
-   int *this_invert_list;             
-   int i;
-   int result;
-   int that_inv;
-   int that_nmap;                     
-   int this_inv;
-   int this_nmap;                     
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two CmpMap structures. */
-   this = (AstCmpMap *) this_object;
-   that = (AstCmpMap *) that_object;
-
-/* Check the second object is a CmpMap. We know the first is a
-   CmpMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsACmpMap( that ) ) {
-
-/* Check they are both either parallel or series. */
-      if( that->series == that->series ) {
-
-/* Decompose the first CmpMap into a sequence of Mappings to be applied in
-   series or parallel, as appropriate, and an associated list of
-   Invert flags. */
-         this_nmap = 0;
-         this_map_list = NULL;
-         this_invert_list = NULL;
-         astMapList( (AstMapping *) this, this->series, astGetInvert( this ), 
-                     &this_nmap, &this_map_list, &this_invert_list );
-
-/* Similarly decompose the second CmpMap. */
-         that_nmap = 0;
-         that_map_list = NULL;
-         that_invert_list = NULL;
-         astMapList( (AstMapping *) that, that->series, astGetInvert( that ), 
-                     &that_nmap, &that_map_list, &that_invert_list );
-
-/* Check the decompositions yielded the same number of component
-   Mappings. */
-         if( that_nmap == this_nmap ) {
-
-/* Check equality of every component. */
-            for( i = 0; i < this_nmap; i++ ) {
-
-/* Temporarily set the Mapping Invert flags to the required values,
-   saving the original values so that they can be re-instated later.*/
-               this_inv = astGetInvert( this_map_list[ i ] );
-               astSetInvert( this_map_list[ i ], this_invert_list[ i ] );
-               that_inv = astGetInvert( that_map_list[ i ] );
-               astSetInvert( that_map_list[ i ], that_invert_list[ i ] );
-
-/* Compare the two component Mappings for equality. */
-               result = astEqual( this_map_list[ i ], that_map_list[ i ] );
-
-/* Re-instate the original Invert flags. */
-               astSetInvert( this_map_list[ i ], this_inv );
-               astSetInvert( that_map_list[ i ], that_inv );
-
-/* Leave the loop if the Mappings are not equal. */
-               if( !result ) break;
-            }
-         }
-
-/* Free resources */
-         for( i = 0; i < this_nmap; i++ ) {
-            this_map_list[ i ] = astAnnul( this_map_list[ i ] );
-         }
-         this_map_list = astFree( this_map_list );
-         this_invert_list = astFree( this_invert_list );
-
-         for( i = 0; i < that_nmap; i++ ) {
-            that_map_list[ i ] = astAnnul( that_map_list[ i ] );
-         }
-         that_map_list = astFree( that_map_list );
-         that_invert_list = astFree( that_invert_list );
-
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a CmpMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     CmpMap member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is one if both component Mappings have a value of 1
-*     for the IsLinear attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpqMap.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   AstCmpMap *this;
-   this = (AstCmpMap *) this_mapping;
-   return astGetIsLinear( this->map1 ) && astGetIsLinear( this->map2 );
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied CmpMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *this;         /* Pointer to CmpMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the CmpMap structure. */
-   this = (AstCmpMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->map1 );
-   result += astGetObjSize( this->map2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
-                                AstMapping *mapping2, int invert2,
-                                int series, int *status ) {
-/*
-*  Name:
-*     CombineMaps
-
-*  Purpose:
-*     Combine two Mappings with specified Invert flags into a CmpMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
-*                              AstMapping *mapping2, int invert2,
-*                              int series, int *status )
-
-*  Class Membership:
-*     CmpMap member function.
-
-*  Description:
-*     This function combines two Mappings into a CmpMap (compound
-*     Mapping) as if their Invert flags were set to specified values
-*     when the CmpMap is created. However, the individual Mappings are
-*     returned with their Invert flag values unchanged from their
-*     original state.
-
-*  Parameters:
-*     mapping1
-*        Pointer to the first Mapping.
-*     invert1
-*        The (boolean) Invert flag value required for the first Mapping.
-*     mapping2
-*        Pointer to the second Mapping.
-*     invert2
-*        The (boolean) Invert flag value required for the second Mapping.
-*     series
-*        Whether the Mappings are to be combined in series (as opposed to
-*        in parallel).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the resulting compound Mapping (a CmpMap).
-
-*  Notes:
-*     - This function is a wrap-up for the astCmpMap constructor and
-*     temporarily assigns the required Invert flag values while
-*     creating the required CmpMap. However, it also takes account of
-*     the possibility that the two Mapping pointers supplied may point
-*     at the same Mapping.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map1;             /* First temporary Mapping pointer */
-   AstMapping *map2;             /* Second temporary Mapping pointer */
-   AstMapping *result;           /* Pointer to result Mapping */
-   int copy;                     /* Copy needed? */
-   int inv1;                     /* First original Invert flag value */
-   int inv2;                     /* Second original Invert flag value */
-   int set1;                     /* First Invert flag originally set? */
-   int set2;                     /* Second Invert flag originally set? */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Limit incoming values to 0 or 1. */
-   invert1 = ( invert1 != 0 );
-   invert2 = ( invert2 != 0 );
-
-/* Obtain the Invert flag values for each Mapping. */
-   inv1 = astGetInvert( mapping1 );
-   inv2 = astGetInvert( mapping2 );
-
-/* Also determine if these values are explicitly set. */
-   set1 = astTestInvert( mapping1 );
-   set2 = astTestInvert( mapping2 );
-
-/* If both Mappings are actually the same but we need different Invert
-   flag values to be set, then this can only be achieved by making a
-   copy. Note if this is necessary. */
-   copy = ( ( mapping1 == mapping2 ) && ( invert1 != invert2 ) );
-
-/* Clone the first Mapping pointer. Do likewise for the second but
-   make a copy instead if necessary. */
-   map1 = astClone( mapping1 );
-   map2 = copy ? astCopy( mapping2 ) : astClone( mapping2 );
-
-/* If the Invert value for the first Mapping needs changing, make the
-   change. */
-   if ( invert1 != inv1 ) {
-      if ( invert1 ) {
-         astSetInvert( map1, 1 );
-      } else {
-         astClearInvert( map1 );
-      }
-   }
-
-/* Similarly, change the Invert flag for the second Mapping if
-   necessary. */
-   if ( invert2 != inv2 ) {
-      if ( invert2 ) {
-         astSetInvert( map2, 1 );
-      } else {
-         astClearInvert( map2 );
-      }
-   }
-
-/* Combine the two Mappings into a CmpMap. */
-   result = (AstMapping *) astCmpMap( map1, map2, series, "", status );
-   
-/* If the first Mapping's Invert value was changed, restore it to its
-   original state. */
-   if ( invert1 != inv1 ) {
-      if ( set1 ) {
-         astSetInvert( map1, inv1 );
-      } else {
-         astClearInvert( map1 );
-      }
-   }
-
-/* Similarly, restore the second Mapping's Invert value if
-   necessary. This step is not needed, however, if a copy was made. */
-   if ( ( invert2 != inv2 ) && !copy ) {
-      if ( set2 ) {
-         astSetInvert( map2, inv2 );
-      } else {
-         astClearInvert( map2 );
-      }
-   }
-
-/* Annul the temporary Mapping pointers. */
-   map1 = astAnnul( map1 );
-   map2 = astAnnul( map2 );
-
-/* If an error occurred, then annul the result pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1, 
-                       AstMapping **map2, int *series, int *invert1, 
-                       int *invert2, int *status ) {
-/*
-*
-*  Name:
-*     Decompose
-
-*  Purpose:
-*     Decompose a Mapping into two component Mappings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void Decompose( AstMapping *this, AstMapping **map1, 
-*                     AstMapping **map2, int *series,
-*                     int *invert1, int *invert2, int *status )
-
-*  Class Membership:
-*     CmpMap member function (over-rides the protected astDecompose
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns pointers to two Mappings which, when applied
-*     either in series or parallel, are equivalent to the supplied Mapping.
-*
-*     Since the Frame class inherits from the Mapping class, Frames can
-*     be considered as special types of Mappings and so this method can
-*     be used to decompose either CmpMaps or CmpFrames.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     map1
-*        Address of a location to receive a pointer to first component
-*        Mapping. 
-*     map2
-*        Address of a location to receive a pointer to second component
-*        Mapping. 
-*     series
-*        Address of a location to receive a value indicating if the
-*        component Mappings are applied in series or parallel. A non-zero
-*        value means that the supplied Mapping is equivalent to applying map1 
-*        followed by map2 in series. A zero value means that the supplied
-*        Mapping is equivalent to applying map1 to the lower numbered axes
-*        and map2 to the higher numbered axes, in parallel.
-*     invert1
-*        The value of the Invert attribute to be used with map1. 
-*     invert2
-*        The value of the Invert attribute to be used with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the component Mappings using the returned
-*     pointers will be reflected in the supplied Mapping.
-
-*-
-*/
-
-
-/* Local Variables: */
-   AstCmpMap *this;              /* Pointer to CmpMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpMap *) this_mapping;
-
-/* First deal with series mappings. */
-   if( this->series ) {
-      if( series ) *series = 1;
-
-/* If the CmpMap has been inverted, return the Mappings in reverse
-   order with inverted Invert falgs. */
-      if( astGetInvert( this ) ) {
-         if( map1 ) *map1 = astClone( this->map2 );
-         if( map2 ) *map2 = astClone( this->map1 );
-         if( invert1 ) *invert1 = this->invert2 ? 0 : 1;
-         if( invert2 ) *invert2 = this->invert1 ? 0 : 1;
-
-/* If the CmpMap has not been inverted, return the Mappings in their
-   original order with their original Invert flags. */
-      } else {
-         if( map1 ) *map1 = astClone( this->map1 );
-         if( map2 ) *map2 = astClone( this->map2 );
-         if( invert1 ) *invert1 = this->invert1;
-         if( invert2 ) *invert2 = this->invert2;
-      }
-
-/* Now deal with parallel mappings. */
-   } else {
-      if( series ) *series = 0;
-
-/* The mappings are returned in their original order whether or not the
-   CmpMap has been inverted. */
-      if( map1 ) *map1 = astClone( this->map1 );
-      if( map2 ) *map2 = astClone( this->map2 );
-
-/* If the CmpMap has been inverted, return inverted Invert flags. */
-      if( astGetInvert( this ) ) {
-         if( invert1 ) *invert1 = this->invert1 ? 0 : 1;
-         if( invert2 ) *invert2 = this->invert2 ? 0 : 1;
-
-/* If the CmpMap has not been inverted, return the original Invert flags. */
-      } else {
-         if( invert1 ) *invert1 = this->invert1;
-         if( invert2 ) *invert2 = this->invert2;
-      }
-      
-   }
-}
-
-void astInitCmpMapVtab_(  AstCmpMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCmpMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a CmpMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     void astInitCmpMapVtab( AstCmpMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     CmpMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the CmpMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsACmpMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_maplist = mapping->MapList;
-   mapping->MapList = MapList;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_mapsplit = mapping->MapSplit;
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->Decompose = Decompose;
-   mapping->MapMerge = MapMerge;
-   mapping->Simplify = Simplify;
-   mapping->RemoveRegions = RemoveRegions;
-   mapping->Rate = Rate;
-   mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "CmpMap", "Compound Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstCmpMap *this;       /* Pointer to CmpMap structure */
-   int result;            /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the CmpMap structure. */
-   this = (AstCmpMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->map1, mode, extra, fail );
-   if( !result ) result = astManageLock( this->map2, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MapList( AstMapping *this_mapping, int series, int invert,
-                     int *nmap, AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapList
-
-*  Purpose:
-*     Decompose a CmpMap into a sequence of simpler Mappings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapList( AstMapping *this, int series, int invert, int *nmap,
-*                  AstMapping ***map_list, int **invert_list )
-
-*  Class Membership:
-*     CmpMap member function (over-rides the protected astMapList
-*     method inherited from the Maping class).
-
-*  Description:
-*     This function decomposes a CmpMap into a sequence of simpler
-*     Mappings which may be applied in sequence to achieve the same
-*     effect. The CmpMap is decomposed as far as possible, but it is
-*     not guaranteed that this will necessarily yield any more than
-*     one Mapping, which may actually be the original CmpMap supplied.
-*
-*     This function is provided to support both the simplification of
-*     CmpMaps, and the analysis of CmpMap structure so that particular
-*     forms can be recognised.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpMap to be decomposed (the CmpMap is not
-*        actually modified by this function).
-*     series
-*        If this value is non-zero, an attempt will be made to
-*        decompose the CmpMap into a sequence of equivalent Mappings
-*        which can be applied in series (i.e. one after the other). If
-*        it is zero, the decomposition will instead yield Mappings
-*        which can be applied in parallel (i.e. on successive sub-sets
-*        of the input/output coordinates).
-*     invert
-*        The value to which the CmpMap's Invert attribute is to be
-*        (notionally) set before performing the
-*        decomposition. Normally, the value supplied here will be the
-*        actual Invert value obtained from the CmpMap (e.g. using
-*        astGetInvert).  Sometimes, however, when a CmpMap is
-*        encapsulated within another structure, that structure may
-*        retain an Invert value (in order to prevent external
-*        interference) which should be used instead.
-*
-*        Note that the actual Invert value of the CmpMap supplied is
-*        not used (or modified) by this function.
-*     nmap
-*        The address of an int which holds a count of the number of
-*        individual Mappings in the decomposition. On entry, this
-*        should count the number of Mappings already in the
-*        "*map_list" array (below). On exit, it is updated to include
-*        any new Mappings appended by this function.
-*     map_list
-*        Address of a pointer to an array of Mapping pointers. On
-*        entry, this array pointer should either be NULL (if no
-*        Mappings have yet been obtained) or should point at a
-*        dynamically allocated array containing Mapping pointers
-*        ("*nmap" in number) which have been obtained from a previous
-*        invocation of this function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Mapping pointers that result from the decomposition
-*        requested. These pointers will be appended to any previously
-*        present, and the array pointer will be updated as necessary
-*        to refer to the enlarged array (any space released by the
-*        original array will be freed automatically).
-*
-*        The new Mapping pointers returned will identify a sequence of
-*        Mappings which, when applied in order, will perform a forward
-*        transformation equivalent to that of the original CmpMap
-*        (after its Invert flag has first been set to the value
-*        requested above). The Mappings should be applied in series or
-*        in parallel according to the type of decomposition requested.
-*
-*        All the Mapping pointers returned by this function should be
-*        annulled by the caller, using astAnnul, when no longer
-*        required. The dynamic array holding these pointers should
-*        also be freed, using astFree.
-*     invert_list
-*        Address of a pointer to an array of int. On entry, this array
-*        pointer should either be NULL (if no Mappings have yet been
-*        obtained) or should point at a dynamically allocated array
-*        containing Invert attribute values ("*nmap" in number) which
-*        have been obtained from a previous invocation of this
-*        function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Invert attribute values that result from the
-*        decomposition requested. These values will be appended to any
-*        previously present, and the array pointer will be updated as
-*        necessary to refer to the enlarged array (any space released
-*        by the original array will be freed automatically).
-*
-*        The new Invert values returned identify the values which must
-*        be assigned to the Invert attributes of the corresponding
-*        Mappings (whose pointers are in the "*map_list" array) before
-*        they are applied. Note that these values may differ from the
-*        actual Invert attribute values of these Mappings, which are
-*        not relevant.
-*
-*        The dynamic array holding these values should be freed by the
-*        caller, using astFree, when no longer required.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied Mapping contained any
-*     inverted CmpMaps.
-
-*  Notes:
-*     - It is unspecified to what extent the original CmpMap and the
-*     individual (decomposed) Mappings are
-*     inter-dependent. Consequently, the individual Mappings cannot be
-*     modified without risking modification of the original CmpMap.
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then the *nmap value, the
-*     list of Mapping pointers and the list of Invert values will all
-*     be returned unchanged.
-*/
-
-/* Local Variables: */
-   AstCmpMap *this;              /* Pointer to CmpMap structure */
-   int invert1;                  /* Invert flag for first component Mapping */
-   int invert2;                  /* Invert flag for second component Mapping */
-   int r1;                       /* Value returned from first map list */
-   int r2;                       /* Value returned from second map list */
-   int result;                   /* Returned value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpMap *) this_mapping;
-
-/* Check if the CmpMap combines its component Mappings in the same way
-   (series or parallel) as the decomposition requires. */
-   if ( this->series == series ) {
-
-/* If so, obtain the Invert attribute values to be applied to each
-   component Mapping. */
-      invert1 = this->invert1;
-      invert2 = this->invert2;
-
-/* If the CmpMap itself is inverted, also invert the Invert values to be
-   applied to its components. */
-      if ( invert ) {
-         invert1 = !invert1;
-         invert2 = !invert2;
-      }
-
-/* If the component Mappings are applied in series, then concatenate
-   the Mapping lists obtained from each of them. Do this in reverse
-   order if the CmpMap is inverted, since the second Mapping would be
-   applied first in this case. */
-      if ( series ) {
-         if ( !invert ) {
-            r1 = astMapList( this->map1, series, invert1,
-                             nmap, map_list, invert_list );
-            r2 = astMapList( this->map2, series, invert2,
-                             nmap, map_list, invert_list );
-         } else {
-            r1 = astMapList( this->map2, series, invert2,
-                             nmap, map_list, invert_list );
-            r2 = astMapList( this->map1, series, invert1,
-                             nmap, map_list, invert_list );
-         }
-
-/* If the component Mappings are applied in parallel, then concatenate
-   the Mapping lists obtained from each of them. In this case,
-   inverting the CmpMap has no effect on the order in which they are
-   applied. */
-      } else {
-         r1 = astMapList( this->map1, series, invert1,
-                          nmap, map_list, invert_list );
-         r2 = astMapList( this->map2, series, invert2,
-                          nmap, map_list, invert_list );
-      }
-
-/* Did we find any inverted CmpMaps? */
-      result = invert || r1 || r2;
-
-/* If the CmpMap does not combine its components in the way required
-   by the decomposition (series or parallel), then we cannot decompose
-   it. In this case it must be appended to the Mapping list as a
-   single entity. We can use the parent class method to do this. */
-   } else {
-      result = ( *parent_maplist )( this_mapping, series, invert, nmap,
-                                    map_list, invert_list, status );
-   }
-
-   return result;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a CmpMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list )
-
-*  Class Membership:
-*     CmpMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated CmpMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated CmpMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated CmpMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the CmpMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        CmpMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated CmpMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *cmpmap1;           /* Pointer to first CmpMap */
-   AstCmpMap *cmpmap2;           /* Pointer to second CmpMap */
-   AstCmpMap *cmpmap;            /* Pointer to nominated CmpMap */
-   AstCmpMap *new_cm;            /* Pointer to new CmpMap */
-   AstMapping **new_map_list;    /* Extended Mapping list */
-   AstMapping *map;              /* Pointer to nominated CmpMap */
-   AstMapping *new1;             /* Pointer to new CmpMap */
-   AstMapping *new2;             /* Pointer to new CmpMap */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   AstMapping *simp1;            /* Pointer to simplified Mapping */
-   AstMapping *simp2;            /* Pointer to simplified Mapping */
-   AstPermMap *new_pm;           /* Pointer to new PermMap */
-   AstPermMap *permmap1;         /* Pointer to first PermMap */
-   AstUnitMap *unit;             /* UnitMap that feeds const PermMap i/p's */
-   const char *class;            /* Pointer to Mapping class string */
-   double *conperm;              /* Pointer to PermMap constants array */
-   double *const_new;            /* Pointer to new PermMap constants array */
-   double *p;                    /* Pointer to PermMap input position */
-   double *q;                    /* Pointer to PermMap output position */
-   double *qa;                   /* Pointer to 1st component output position */
-   double *qb;                   /* Pointer to 2nd component output position */
-   int *inperm;                  /* Pointer to copy of PermMap inperm array */
-   int *inperm_new;              /* Pointer to new PermMap inperm array */
-   int *new_invert_list;         /* Extended Invert flag list */
-   int *outperm;                 /* Pointer to copy of PermMap outperm array */
-   int *outperm_new;             /* Pointer to new PermMap outperm array */
-   int aconstants;               /* Are all 1st component outputs constant? */
-   int bconstants;               /* Are all 2nd component outputs constant? */
-   int canswap;                  /* Can nominated Mapping swap with lower neighbour? */
-   int i;                        /* Coordinate index */
-   int iconid;                   /* Constant identifier in supplied PermMap */
-   int imap1;                    /* Index of first Mapping */
-   int imap2;                    /* Index of second Mapping */
-   int imap;                     /* Loop counter for Mappings */
-   int invert1;                  /* Invert flag for first CmpMap */
-   int invert1a;                 /* Invert flag for sub-Mapping */
-   int invert1b;                 /* Invert flag for sub-Mapping */
-   int invert2;                  /* Invert flag for second CmpMap */
-   int invert2a;                 /* Invert flag for sub-Mapping */
-   int invert2b;                 /* Invert flag for sub-Mapping */
-   int invert;                   /* Invert attribute value */
-   int j;                        /* Coordinate index */
-   int new_invert;               /* New Invert attribute value */
-   int nin2a;                    /* No. input coordinates for sub-Mapping */
-   int nin2b;                    /* No. input coordinates for sub-Mapping */
-   int nout1a;                   /* No. output coordinates for sub-Mapping */
-   int nout1b;                   /* No. output coordinates for sub-Mapping */
-   int nout2a;                   /* No. of outputs for 1st component Mapping */
-   int nout2b;                   /* No. of outputs for 2nd component Mapping */
-   int npin;                     /* No. of inputs for original PermMap */
-   int npin_new;                 /* No. of inputs for new PermMap */
-   int npout;                    /* No. of outputs for original PermMap */
-   int npout_new;                /* No. of outputs for new PermMap */
-   int nunit;                    /* No. of PermMap i/p's fed by UnitMap */
-   int oconid;                   /* Constant identifier in returned PermMap */
-   int result;                   /* Result value to return */
-   int set;                      /* Invert attribute set? */
-   int simpler;                  /* Simplification possible? */
-
-/* Initialise.*/
-   result = -1;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Simplify the CmpMap on its own. */
-/* =============================== */
-/* Obtain a pointer to the nominated Mapping (which is a CmpMap). */
-   map = ( *map_list )[ where ];
-   cmpmap = (AstCmpMap *) map;
-
-/* Determine if the Mapping's Invert attribute is set and obtain its
-   value. */
-   set = astTestInvert( map );
-   invert = astGetInvert( map );
-
-/* If necessary, change the Invert attribute to the value we want. We
-   do this so that simplification (below) has a chance to absorb a
-   non-zero Invert value into the implementation of the simplified
-   Mapping (the preference being to have an Invert value of zero after
-   simplification, if possible). */
-   if ( invert != ( *invert_list )[ where ] ) {
-      astSetInvert( map, ( *invert_list )[ where ] );
-   }
-
-/* Simplify the Mapping and obtain the new Invert value. */
-   new = astSimplify( map );
-   new_invert = astGetInvert( new );
-
-/* If necessary, restore the original Mapping's Invert attribute to
-   its initial state. */
-   if ( invert != ( *invert_list )[ where ] ) {
-      if ( set ) {
-         astSetInvert( map, invert );
-      } else {
-         astClearInvert( map );
-      }
-   }
-
-/* We must now determine if simplification has occurred. Since this is
-   internal code, we can compare the two Mapping pointers directly to
-   see whether "astSimplify" just cloned the pointer we gave it. If it
-   did, then simplification was probably not possible, but check to
-   see if the Invert attribute has changed to be sure. */
-   if ( astOK ) {
-      simpler = ( new != map ) || ( new_invert != ( *invert_list )[ where ] );
-
-/* If simplification was successful, annul the original pointer in the
-   Mapping list and replace it with the new one, together with its
-   invert flag. */
-      if ( simpler ) {
-         (void) astAnnul( ( *map_list )[ where ] );
-         ( *map_list )[ where ] = new;
-         ( *invert_list )[ where ] = new_invert;
-
-/* Return the result. */
-         result = where;
-
-/* Otherwise, annul the new Mapping pointer. */
-      } else {
-         new = astAnnul( new );
-
-/* If the nominated CmpMap is a series CmpMap and the sequence of
-   Mappings are being combined in series, or if the nominated CmpMap is 
-   a parallel CmpMap and the sequence of Mappings are being combined in 
-   parallel, replace the single CmpMap with the two component Mappings. */
-         if( ( series && cmpmap->series ) ||
-             ( !series && !cmpmap->series ) ) {
-
-/* We are increasing the number of Mappings in the list, so we need to create 
-   new, larger, arrays to hold the list of Mapping pointers and invert flags. */
-            new_map_list = astMalloc( ( *nmap + 1 )*sizeof( AstMapping * ) );
-            new_invert_list = astMalloc( ( *nmap + 1 )*sizeof( int ) );
-            if( astOK ) {
-
-/* Copy the values prior to the nominated CmpMap. */
-               for( i = 0; i < where; i++ ) {
-                  new_map_list[ i ] = astClone( ( *map_list )[ i ] );
-                  new_invert_list[ i ] = ( *invert_list )[ i ];
-               }
-
-/* Next insert the two components of the nominated CmpMap */
-               new_map_list[ where ] = astClone( cmpmap->map1 );
-               new_invert_list[ where ] = cmpmap->invert1;
-               new_map_list[ where + 1 ] = astClone( cmpmap->map2 );
-               new_invert_list[ where + 1 ] = cmpmap->invert2;
-
-/* Now copy any values after the nominated CmpMap. */
-               for( i = where + 1; i < *nmap; i++ ) {
-                  new_map_list[ i + 1 ] = astClone( ( *map_list )[ i ] );
-                  new_invert_list[ i + 1 ] = ( *invert_list )[ i ];
-               }
-
-/* Now annul the Object pointers in the supplied map list. */
-               for( i = 0; i < *nmap; i++ ) {
-                  (* map_list )[ i ] = astAnnul( ( *map_list )[ i ] );
-               }
-
-/* Free the memory holding the supplied Mapping and invert flag lists. */
-               astFree( *map_list );
-               astFree( *invert_list );
-
-/* Return pointers to the new extended lists. */
-               *map_list = new_map_list;
-               *invert_list = new_invert_list;
-
-/* Increase the number of Mappings in the list, and the index of
-   the first modified Mapping. */
-               (*nmap)++;
-               result = where;        
-
-/* Indicate some simplification has taken place */
-               simpler = 1;
-            }
-         }
-      }
-
-/* If no simplification has been done, merge adjacent CmpMaps. */
-/* ========================================================== */
-/* If the CmpMap would not simplify on its own, we now look for a
-   neighbouring CmpMap with which it might merge. We use the previous
-   Mapping, if suitable, since this will normally also have been fully
-   simplified on its own. Check if a previous Mapping exists. */
-      if( !simpler ) {
-         if ( astOK && *nmap > 1 ) {
-
-/* Obtain the indices of the two potential Mappings to be merged. imap1
-   is the first Mapping, imap2 is the second. imapc is the CmpMap, imapn is
-   the neighbouring Mapping. */
-            if( where == 0 ) {
-               imap1 = 0;
-               imap2 = 1;
-            } else {
-               imap1 = where - 1;
-               imap2 = where;
-            }
-
-/* Obtain the Class string of the neighbouring Mapping and determine if it 
-   is a CmpMap. */
-            class = astGetClass( ( *map_list )[ (where>0)?where-1:1 ] );
-            if ( astOK && !strcmp( class, "CmpMap" ) ) {
-
-/* If suitable, obtain pointers to the two CmpMaps. */
-               cmpmap1 = (AstCmpMap *) ( *map_list )[ imap1 ];
-               cmpmap2 = (AstCmpMap *) ( *map_list )[ imap2 ];
-
-/* Obtain the associated invert flag values. */
-               invert1 = ( *invert_list )[ imap1 ];
-               invert2 = ( *invert_list )[ imap2 ];
-
-/* Extract the invert flags associated with each CmpMap sub-Mapping
-   and combine these with the flag values obtained above so as to give
-   the invert flag to be used with each individual sub-Mapping. */
-               invert1a = cmpmap1->invert1;
-               invert1b = cmpmap1->invert2;
-               if ( invert1 ) {
-                  invert1a = !invert1a;
-                  invert1b = !invert1b;
-               }
-               invert2a = cmpmap2->invert1;
-               invert2b = cmpmap2->invert2;
-               if ( invert2 ) {
-                  invert2a = !invert2a;
-                  invert2b = !invert2b;
-               }
-
-/* Series CmpMaps in parallel. */
-/* =========================== */
-/* Now check if the CmpMaps can be merged. This may be possible if we
-   are examining a list of Mappings combined in parallel and the two
-   adjacent CmpMaps both combine their sub-Mappings in series. */
-               if ( !series && cmpmap1->series && cmpmap2->series ) {
-
-/* Form two new parallel CmpMaps with the sub-Mappings re-arranged so
-   that when combined in series these new CmpMaps are equivalent to
-   the original ones. In doing this, we must take account of the
-   invert flags which apply to each sub-Mapping and also of the fact
-   that the order in which the sub-Mappings are applied depends on the
-   invert flags of the original CmpMaps. */
-                  new1 = CombineMaps( invert1 ? cmpmap1->map2 : cmpmap1->map1,
-                                      invert1 ? invert1b      : invert1a,
-                                      invert2 ? cmpmap2->map2 : cmpmap2->map1,
-                                      invert2 ? invert2b      : invert2a, 0, status );
-                  new2 = CombineMaps( invert1 ? cmpmap1->map1 : cmpmap1->map2,
-                                      invert1 ? invert1a      : invert1b,
-                                      invert2 ? cmpmap2->map1 : cmpmap2->map2,
-                                      invert2 ? invert2a      : invert2b, 0, status );
-
-/* Having converted the parallel combination of series CmpMaps into a
-   pair of equivalent parallel CmpMaps that can be combined in series,
-   try and simplify each of these new CmpMaps. */
-                  simp1 = astSimplify( new1 );
-                  simp2 = astSimplify( new2 );
-
-/* Test if either could be simplified by checking if its pointer value
-   has changed. Also check if the Invert attribute has changed (not
-   strictly necessary, but a useful safety feature in case of any
-   rogue code which just changes this attribute instead of issuing a
-   new pointer). */
-                  simpler = ( simp1 != new1 ) || ( simp2 != new2 ) ||
-                            astGetInvert( simp1 ) || astGetInvert( simp2 );
-
-/* If either CmpMap was simplified, then combine the resulting
-   Mappings in series to give the replacement CmpMap. */
-                  if ( simpler ) new =
-                               (AstMapping *) astCmpMap( simp1, simp2, 1, "", status );
-
-/* Annul the temporary Mapping pointers. */
-                  new1 = astAnnul( new1 );
-                  new2 = astAnnul( new2 );
-                  simp1 = astAnnul( simp1 );
-                  simp2 = astAnnul( simp2 );
-
-/* Parallel CmpMaps in series. */
-/* =========================== */
-/* A pair of adjacent CmpMaps can also potentially be merged if we are
-   examining a list of Mappings combined in series and the two
-   adjacent CmpMaps both combine their sub-Mappings in parallel. */
-               } else if ( series && !cmpmap1->series && !cmpmap2->series ) {
-
-/* In this case, we must check that the number of input and output
-   coordinates associated with the sub-Mappings are
-   compatible. Determine the effective number of output coordinates
-   produced by each sub-Mapping of the first CmpMap. Take account of
-   the invert flags to be applied and the current setting of the
-   Invert attributes. */
-                  if ( astGetInvert( cmpmap1->map1 ) ) {
-                     nout1a = invert1a ? astGetNout( cmpmap1->map1 ) :
-                                         astGetNin( cmpmap1->map1 );
-                  } else {
-                     nout1a = invert1a ? astGetNin( cmpmap1->map1 ) :
-                                         astGetNout( cmpmap1->map1 );
-                  }
-                  if ( astGetInvert( cmpmap1->map2 ) ) {
-                     nout1b = invert1b ? astGetNout( cmpmap1->map2 ) :
-                                         astGetNin( cmpmap1->map2 );
-                  } else {
-                     nout1b = invert1b ? astGetNin( cmpmap1->map2 ) :
-                                         astGetNout( cmpmap1->map2 );
-                  }
-
-/* Repeat this to obtain the effective number of input coordinates for
-   each sub-Mapping of the second CmpMap. */
-                  if ( astGetInvert( cmpmap2->map1 ) ) {
-                     nin2a = invert2a ? astGetNin( cmpmap2->map1 ) :
-                                        astGetNout( cmpmap2->map1 );
-                  } else {
-                     nin2a = invert2a ? astGetNout( cmpmap2->map1 ) :
-                                        astGetNin( cmpmap2->map1 );
-                  }
-                  if ( astGetInvert( cmpmap2->map2 ) ) {
-                     nin2b = invert2b ? astGetNin( cmpmap2->map2 ) :
-                                        astGetNout( cmpmap2->map2 );
-                  } else {
-                     nin2b = invert2b ? astGetNout( cmpmap2->map2 ) :
-                                        astGetNin( cmpmap2->map2 );
-                  }
-
-/* Check if the numbers of coordinates are compatible. */
-                  if ( astOK && ( nout1a == nin2a ) && ( nout1b == nin2b ) ) {
-
-/* If so, combine the sub-Mappings into a pair of series CmpMaps
-   which, when combined in parallel, are equivalent to the original
-   ones. */
-                     new1 = CombineMaps( cmpmap1->map1, invert1a,
-                                         cmpmap2->map1, invert2a, 1, status );
-                     new2 = CombineMaps( cmpmap1->map2, invert1b,
-                                         cmpmap2->map2, invert2b, 1, status );
-
-/* Having converted the series combination of parallel CmpMaps into a
-   pair of equivalent series CmpMaps that can be combined in parallel,
-   try and simplify each of these new CmpMaps. */
-                     simp1 = astSimplify( new1 );
-                     simp2 = astSimplify( new2 );
-
-/* Test if either could be simplified by checking if its pointer value
-   has changed. Also check if the Invert attribute has changed. */
-                     simpler = ( simp1 != new1 ) || ( simp2 != new2 ) ||
-                               astGetInvert( simp1 ) || astGetInvert( simp2 );
-
-/* If either CmpMap was simplified, then combine the resulting
-   Mappings in parallel to give the replacement CmpMap. */
-                     if ( simpler ) new =
-                               (AstMapping *) astCmpMap( simp1, simp2, 0, "", status );
-
-/* Annul the temporary Mapping pointers. */
-                     new1 = astAnnul( new1 );
-                     new2 = astAnnul( new2 );
-                     simp1 = astAnnul( simp1 );
-                     simp2 = astAnnul( simp2 );
-                  }
-               }
-            }
-
-/* Update Mapping list. */
-/* ==================== */
-/* If adjacent CmpMaps can be combined, then annul the original pointers. */
-            if ( astOK && simpler ) {
-               ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
-               ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement CmpMap and initialise its
-   invert flag. */
-               ( *map_list )[ imap1 ] = new;
-               ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
-   in the arrays. */
-               for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
-                  ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
-               }
-                        
-/* Clear the vacated elements at the end. */
-               ( *map_list )[ *nmap - 1 ] = NULL;
-               ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-               ( *nmap )--;
-               result = imap1;
-            }
-         }
-      }
-   }
-
-/* If we are merging the Mappings in series, and if the nominated CmpMap 
-   is a parallel CmpMap, and if the lower neighbour is a PermMap, it may 
-   be possible to swap the PermMap and the CmpMap. This may allow one of 
-   the two swapped Mappings to merge with its new neighbour. 
-   ==================================================================== */
-
-/* Only do this if no simplification occurred above, and if the Mappings
-   are being merged in series, and if the nominated Mapping is not the
-   first in the list. */
-   if( result == -1 && where > 0 ){
-
-/* Obtain the indices of the two potential Mappings to be swapped. */
-      imap1 = where - 1;
-      imap2 = where;
-
-/* Obtain a pointer to the CmpMap. */
-      cmpmap2 = (AstCmpMap *) ( *map_list )[ imap2 ];
-
-/* Obtain the Class string of the first (previous) Mapping and
-   determine if it is a PermMap. Also check that the nominated Mapping is 
-   a parallel CmpMap. */
-      class = astGetClass( ( *map_list )[ imap1 ] );
-      if ( astOK && !strcmp( class, "PermMap" ) && !cmpmap2->series) {
-
-/* Indicate we have no new Mapping to store. */
-         new = NULL;
-
-/* If suitable, obtain a pointer to the PermMap. */
-         permmap1 = (AstPermMap *) ( *map_list )[ imap1 ];
-
-/* Obtain the current values of the Invert attribute in the Mappings. */
-         invert1 = astGetInvert( permmap1 );
-         invert2 = astGetInvert( cmpmap2 );
-
-/* Temporarily set the Invert attributes of both Mappings to the values 
-   supplied in the "invert_list" parameter. */
-         astSetInvert( permmap1, ( *invert_list )[ imap1 ] );     
-         astSetInvert( cmpmap2, ( *invert_list )[ imap2 ] );     
-
-/* Get the number of inputs and outputs for the PermMap.*/
-         npout = astGetNout( permmap1 );
-         npin = astGetNin( permmap1 );
-
-/* Get the number of inputs and outputs for the two components of the 
-   nominated parallel CmpMap. */
-         nin2a = astGetNin( cmpmap2->map1 );
-         nin2b = astGetNin( cmpmap2->map2 );
-         nout2a = astGetNout( cmpmap2->map1 );
-         nout2b = astGetNout( cmpmap2->map2 );
-
-/* Get the input and output axis permutation arrays and the constants
-   array from the PermMap */
-         inperm =astGetInPerm( permmap1 );
-         outperm =astGetOutPerm( permmap1 );
-         conperm = astGetConstants( permmap1 );
-
-/* In order to swap the Mappings, the PermMap outputs which feed the
-   inputs of the first component of the parallel CmpMap must be copied
-   from a contiguous block at the end of the list of PermMap inputs, or
-   must all be assigned constant values. Likewise, the PermMap outputs which 
-   feed the inputs of the second component of the parallel CmpMap must be 
-   copied from a contiguous block at the beggining of the list of PermMap 
-   inputs or must be assigned constant values. Also, there must be a
-   one-to-one correspondance between inputs and outputs in the PermMap.
-   Check that the first block of nin2a PermMap outputs are copied from
-   the last block of nin2a PermMap inputs (and vica-versa) or are constant. */
-         canswap = ( npin == npout );
-         aconstants = ( outperm[ 0 ] < 0 );
-
-         for( i = 0, j = npin - nin2a; i < nin2a; i++, j++ ) {
-            if( aconstants ) {
-               if( outperm[ i ] >= 0 ) {
-                  canswap = 0;
-                  break;
-               }
-
-            } else if( outperm[ i ] != j || inperm[ j ] != i ) {
-               canswap = 0;
-               break;
-            }
-         }
-
-/* Check that the first block of nin2b PermMap inputs are copied from
-   the last block of nin2b PermMap outputs, and vica-versa. */
-         bconstants = ( outperm[ nin2a ] < 0 );
-         for( i = 0, j = npout - nin2b; i < nin2b; i++, j++ ) {
-            if( bconstants ) {
-               if( outperm[ j ] >= 0 ) {
-                  canswap = 0;
-                  break;
-               }
-            } else if( inperm[ i ] != j || outperm[ j ] != i ) {
-               canswap = 0;
-               break;
-            }
-         }
-
-/* If the Mappings can be swapped.. */
-         new_pm = NULL;
-         new_cm = NULL;
-         qa = NULL;
-         qb = NULL;
-         if( canswap ) {
-
-/* Temporarily set the Invert attributes of the component Mappings to the 
-   values they had when the CmpMap was created. */
-            invert2a = astGetInvert( cmpmap2->map1 );
-            invert2b = astGetInvert( cmpmap2->map2 );
-            astSetInvert( cmpmap2->map1, cmpmap2->invert1 );
-            astSetInvert( cmpmap2->map2, cmpmap2->invert2 );
-
-/* If any PermMap outputs are constant, we will need the results of
-   transforming these constants using the CmpMap which follows. */
-            if( aconstants || bconstants ) {
-
-/* Transform a set of bad inputs using the PermMap. This will assign the
-   PermMap constant to any fixed outputs. */
-               p = astMalloc( sizeof( double )*(size_t) npin );
-               q = astMalloc( sizeof( double )*(size_t) npout );
-               qa = astMalloc( sizeof( double )*(size_t) nout2a );
-               qb = astMalloc( sizeof( double )*(size_t) nout2b );
-               if( astOK ) {
-                  for( i = 0; i < npin; i++ ) p[ i ] = AST__BAD;
-                  astTranN( permmap1, 1, npin, 1, p, 1, npout, 1, q );
-
-/* Transform the PermMap outputs using the two component Mappings in the
-   CmpMap. */
-                  astTranN( cmpmap2->map1, 1, nin2a, 1, q, 1, nout2a, 1, qa );
-                  astTranN( cmpmap2->map2, 1, nin2b, 1, q + nin2a, 1, nout2b, 1, qb );
-
-               }
-               p = astFree( p );
-               q = astFree( q );
-            }
-
-/* If necessary, create a UnitMap to replace a Mapping which has constant
-   outputs. The number of axes for the UnitMap is chosen to give the
-   correct total number of inputs for the final parallel CmpMap. At the
-   same time determine the number of inputs needed by the final PermMap. */
-            if( aconstants ) {
-               nunit = npin - nin2b;
-               npin_new = nout2b + nunit;
-            } else if( bconstants ) {
-               nunit = npin - nin2a;
-               npin_new = nout2a + nunit;
-            } else {
-               nunit = 0;
-               npin_new = nout2a + nout2b;
-            }
-            unit = nunit ? astUnitMap( nunit, "", status ) : NULL;
-
-/* Determine the number of outputs for the final PermMap and allocate memory 
-   for its permutation arrays. */
-            npout_new = nout2a + nout2b;
-            outperm_new = astMalloc( sizeof( int )*(size_t) npout_new );
-            inperm_new = astMalloc( sizeof( int )*(size_t) npin_new );
-            const_new = astMalloc( sizeof( double )*(size_t) ( npout_new + npin_new ) );
-            if( astOK ) {
-               oconid = 0;
-
-/* First assign permutations for the second component Mapping, if used. */
-               if( !bconstants ) {
-                  for( i = 0, j = npout_new - nout2b; i < nout2b; i++,j++ ) {
-                     inperm_new[ i ] = j;
-                     outperm_new[ j ] = i;
-                  }
-
-/* Otherwise, store constants */
-               } else {
-
-                  for( i = 0; i < nunit; i++ ){
-                     iconid = inperm[ i ];
-                     if( iconid >= npout ) {
-                        inperm_new[ i ] = npout_new;
-
-                     } else if( iconid >= 0 ) {
-                        astError( AST__INTER, "astMapMerge(CmpMap): Swapped PermMap "
-                                  "input is not constant (internal AST programming "
-                                  "error)." , status);
-                        break;
-
-                     } else {
-                        inperm_new[ i ] = --oconid;
-                        const_new[ -( oconid + 1 ) ] = conperm[ -( iconid + 1 ) ];
-                     }                      
-                  }
-
-                  for( i = 0, j = npout_new - nout2b; i < nout2b; i++,j++ ) {
-                     outperm_new[ j ] = --oconid;
-                     const_new[ -( oconid + 1 ) ] = qb[ i ];
-                  }
-
-               }
-
-/* Now assign permutations for the first component Mapping, if used. */
-               if( !aconstants ) {
-                  for( i = 0, j = npin_new - nout2a; i < nout2a; i++,j++ ) {
-                     inperm_new[ j ] = i;
-                     outperm_new[ i ] = j;
-                  }
-
-/* Otherwise, store constants */
-               } else {
-
-                  for( i = nout2b; i < npin_new; i++ ){
-                     iconid = inperm[ i - nout2b + nin2b ];
-                     if( iconid >= npout ) {
-                        inperm_new[ i ] = npout_new;
-
-                     } else if( iconid >= 0 ) {
-                        astError( AST__INTER, "astMapMerge(CmpMap): Swapped PermMap "
-                                  "input is not constant (internal AST programming "
-                                  "error)." , status);
-                        break;
-
-                     } else {
-                        inperm_new[ i ] = --oconid;
-                        const_new[ -( oconid + 1 ) ] = conperm[ -( iconid + 1 ) ];
-                     }                      
-                  }
-
-                  for( i = 0; i < nout2a; i++ ) {
-                     outperm_new[ i ] = --oconid;
-                     const_new[ -( oconid + 1 ) ] = qa[ i ];
-                  }
-
-               }
-
-/* Create the new PermMap */
-               new_pm = astPermMap( npin_new, inperm_new, npout_new,
-                                    outperm_new, const_new, "", status );
-
-/* Create the new CmpMap.*/
-               if( aconstants ) {
-                  if( unit ) {
-                     new_cm = astCmpMap( cmpmap2->map2, unit, 0, "", status );
-                  } else {
-                     new_cm = astCopy( cmpmap2->map2 );
-                  }
-
-               } else if( bconstants ) {
-                  if( unit ) {
-                     new_cm = astCmpMap( unit, cmpmap2->map1, 0, "", status );
-                  } else {
-                     new_cm = astCopy( cmpmap2->map1 );
-                  }
-
-               } else{
-                  new_cm = astCmpMap( cmpmap2->map2, cmpmap2->map1, 0, "", status );
-               }
-
-            }
-
-/* Free Memory. */
-            if( unit ) unit = astAnnul( unit );
-            outperm_new = astFree( outperm_new );
-            inperm_new = astFree( inperm_new );
-            const_new = astFree( const_new );
-            if( aconstants || bconstants ) {
-               qa = astFree( qa );
-               qb = astFree( qb );
-            }
-
-/* Re-instate the original Invert attributes in the component Mappings. */
-            astSetInvert( cmpmap2->map1, invert2a );
-            astSetInvert( cmpmap2->map2, invert2b );
-
-         }
-
-/* Release the arrays holding the input and output permutation arrays
-   and constants copied from the PermMap. */
-         inperm = astFree( inperm );
-         outperm = astFree( outperm );
-         conperm = astFree( conperm );
-
-/* Re-instate the original values of the Invert attributes of both
-   Mappings. */
-         astSetInvert( permmap1, invert1 );     
-         astSetInvert( cmpmap2, invert2 );     
-
-/* If the Mappings can be swapped... */
-         if( astOK && canswap ) {
-
-/* Annul the supplied pointer to the two Mappings. */
-            ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
-            ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Store the new PermMap pointer in the slot previously occupied by the
-   nominated CmpMap pointer. Likewise, store the invert flag. */
-            ( *map_list )[ imap2 ] = (AstMapping *) new_pm;
-            ( *invert_list )[ imap2 ] = astGetInvert( new_pm );
-
-/* Store the new PermMap pointer in the slot previously occupied by the
-   nominated CmpMap pointer. Likewise, store the invert flag. */
-            ( *map_list )[ imap1 ] = (AstMapping *) new_cm;
-            ( *invert_list )[ imap1 ] = astGetInvert( new_cm );
-
-/* Return the index of the first modified element. */
-            result = imap1;
-
-         }
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     CmpMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map )
-
-*  Class Membership:
-*     CmpMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function performs the work for the astMapSplit method. It
-*     first simply invokes the private MapSplit1 function to see if the
-*     forward transformation of the supplied CmpMap can be split as
-*     requested. If this is not possible it attempts an inverse approach
-*     to the problem. For each possible sub-sets of the Mapping outputs 
-*     it call MapSplit1 to see if the sub-set of outputs are generated 
-*     from the selected inputs.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpMap to be split (the CmpMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied CmpMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied CmpMap has no subset of outputs which 
-*        depend only on the selected inputs.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied CmpMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstMapping *map2;  /* Subset Mapping */
-   AstMapping *this2; /* Inverted copy of the supplied Mapping */
-   int *out;          /* Selected output indices */
-   int *result;       /* Axis order to return */
-   int *result2;      /* Axis order for current output subset */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-   int mout;          /* Number of selected outputs */
-   int nin2;          /* Number of inputs fed by current outputs */
-   int nout;          /* The number of outputs from the supplied Mapping */
-   int ok;            /* Are all required inputs fed by current outputs? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* First see if the forward transformation can be split as requested. */
-   result = MapSplit1( this, nin, in, map, status );
-
-/* If forward transformation could not be split, we attempt to split the
-   inverse transformation by selecting every possible sub-set of Mapping
-   outputs until one is found which is fed by the requested mapping inputs. */
-   if( !result ) {
-
-/* Get the number of Mapping outputs. */
-      nout = astGetNout( this );
-
-/* Get an inverted copy of the Mapping. We do this rather than inverting
-   the supplied Maping in case an error occurs which may leave the
-   supplied Mapping inverted. */
-      this2 = astCopy( this );
-      astInvert( this2 );      
-
-/* Allocate memory to hold the selected output indices. */
-      out = astMalloc( nout*sizeof( int ) );
-
-/* Loop round all useful subset sizes. */
-      if( out ) {
-         for( mout = 1; mout < nout && !result; mout++ ) {
-
-/* Initialise the first subset of outputs to check at the current subset
-   size. */
-            for( i = 0; i < mout; i++ ) out[ i ] = 0;
-
-/* Loop round all ways of picking a subset of "mout" outputs from the total 
-   available "nout" outputs. */
-            while( ! result ) {            
-
-/* Skip this subset if it refers to any axis index more than once. */
-               ok = 1;
-               for( i = 1; i < mout && ok; i++ ) {
-                  for( j = 0; j < i; j++ ) {
-                     if( out[ i ] == out[ j ] ) {
-                        ok = 0;
-                        break;
-                     }
-                  }
-               }
-               if( ok ) {
-
-/* Attempt to split the inverted Mapping using the current subset of
-   outputs. */
-                  result2 = MapSplit1( this2, mout, out, &map2, status );
-
-/* If succesful... */
-                  if( result2 ) {
-
-/* See if the inputs that feed the current subset of outputs are the same
-   as the inputs specified by the caller (and in the same order). */
-                     nin2 = astGetNout( map2 );
-                     ok = ( nin2 == nin );                
-                     if( ok ) {
-                        for( i = 0; i < nin; i++ ) {
-                           if( in[ i ] != result2[ i ] ) {
-                              ok = 0;
-                              break;
-                           }
-                        }
-                     }
-
-/* If so, set up the values returned to the caller. */
-                     if( ok ) {            
-                        result = astStore( result, out, mout*sizeof(int) );
-                        astInvert( map2 );
-                        *map = astClone( map2 );
-                     }
-
-/* Free resources. */
-                     result2 = astFree( result2 );
-                     map2 = astAnnul( map2 );
-                  }
-               }
-
-/* Increment the first axis index. */
-               i = 0;
-               out[ i ]++;
-
-/* If the incremented axis index is now too high, reset it to zero and
-   increment the next higher axis index. Do this until an incremented axis
-   index is not too high. */
-               while( out[ i ] == nout ) {
-                  out[ i++ ] = 0;
-
-                  if( i < mout ) {                  
-                     out[ i ]++;
-                  } else {
-                     break;
-                  }
-               }
-
-/* If all subsets have been checked break out of the loop. */
-               if( i == mout ) break;
-
-            }
-         }
-      }
-
-/* Free resources. */
-      out = astFree( out );
-      this2 = astAnnul( this2 );      
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static int *MapSplit1( AstMapping *this_map, int nin, const int *in, AstMapping **map, 
-                       int *status ){
-/*
-*  Name:
-*     MapSplit1
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     CmpMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     int *MapSplit1( AstMapping *this, int nin, const int *in, AstMapping **map, 
-*                     int *status )
-
-*  Class Membership:
-*     CmpMap method 
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing CmpMap. This is only possible if the specified inputs
-*     correspond to some subset of the CmpMap outputs. That is, there
-*     must exist a subset of the CmpMap outputs for which each output
-*     depends only on the selected CmpMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied CmpMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpMap to be split (the CmpMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied CmpMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied CmpMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied CmpMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstCmpMap *this;      /* Pointer to CmpMap structure */
-   AstCmpMap *tmap;      /* Pointer to partial Mapping */
-   AstMapping *amap;     /* Pointer to ealier Mapping split by given inputs */
-   AstMapping *bmap;     /* Pointer to later Mapping split by earlier outputs */
-   AstMapping *map1;     /* Pointer to 1st component Mapping */
-   AstMapping *map2;     /* Pointer to 2nd component Mapping */
-   AstMapping *rmap1;    /* Pointer to split lower Mapping */
-   AstMapping *rmap2;    /* Pointer to split higher Mapping */
-   AstPermMap *pmap;     /* Input permutation */
-   int *bin;             /* Inputs to use with later Mapping */
-   int *inp;             /* Pointer to inperm work array */
-   int *outp;            /* Pointer to outperm work array */
-   int *p;               /* Pointer to next element */
-   int *pb;              /* Pointer to first input for higher Mapping */
-   int *res1;            /* Pointer to outputs used from lower Mapping */
-   int *res2;            /* Pointer to outputs used from higher Mapping */
-   int *result;          /* Pointer to returned array */
-   int doperm;           /* Is input permutation needed? */
-   int i;                /* Loop count */
-   int inv;              /* Has the CmpMap been inverted? */
-   int j;                /* Loop count */
-   int nbin;             /* Number of inputs to pick from later Mapping */
-   int nin1;             /* No. of inputs to lower Mapping */
-   int nin2;             /* No. of inputs to higher Mapping */
-   int noff;             /* No. of outputs from total lower Mapping */
-   int nout1;            /* No. of outputs from split lower Mapping */
-   int nout2;            /* No. of outputs from split higher Mapping */
-   int npin;             /* Total no. of CmpMap inputs */
-   int ok;               /* Can required Mapping be created? */
-   int old_inv1;         /* Original Invert flag for map1 */
-   int old_inv2;         /* Original Invert flag for map2 */
-   int t;                /* Temporary storage */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpMap structure. */
-   this = (AstCmpMap *) this_map;
-
-/* Get the number of inputs in the supplied CmpMap. */
-   npin = astGetNin( this );
-
-/* Check all input axis indices are valid. */
-   ok = 1;
-   for( i = 0; i < nin; i++ ) {
-      if( in[ i ] < 0 || in[ i ] >= npin ) {
-         ok = 0;
-         break;
-      }
-   }
-
-/* If OK, proceed. */
-   if( ok ) {
-
-/* Get the component Mapping pointers. Set the Invert flags as they were when 
-   the CmpMap was created, first saving the current Invert flags so they can 
-   be re-instated later. */
-      map1 = this->map1;
-      old_inv1 = astGetInvert( map1 );
-      astSetInvert( map1, this->invert1 );
-      map2 = this->map2;
-      old_inv2 = astGetInvert( map2 );
-      astSetInvert( map2, this->invert2 );
-
-/* If the CmpMap has been inverted, invert the components. */
-      inv = astGetInvert( this );
-      if( inv ) {
-         astInvert( map1 );
-         astInvert( map2 );
-      }
-
-/* First deal with series CmpMaps. */
-      if( this->series ) {
-
-/* Try to split the first (or second if the CmpMap has been inverted)
-   component Mapping. */
-         bin = astMapSplit( inv ? map2 : map1, nin, in, &amap );
-
-/* Check the split was done. */
-         if( bin ) {
-
-/* Split the other component using the outputs generated by splitting the
-   first component. */
-            nbin = astGetNout( amap );
-            result = astMapSplit( inv ? map1 : map2, nbin, bin, &bmap );
-
-/* Check the split was done. */
-            if( result ) {
-
-/* Form the required CmpMap. */
-               *map = (AstMapping *) astCmpMap( amap, bmap, 1, "", status );
-
-/* Free resources. */
-               bmap = astAnnul( bmap );
-            }
-
-            bin = astFree( bin );
-            amap = astAnnul( amap );
-         }
-
-/* Now deal with parallel CmpMaps. */
-      } else {
-
-/* Allocate work space. */
-         outp = astMalloc( sizeof(int)*(size_t)nin );
-         inp = astMalloc( sizeof(int)*(size_t)nin );
-         if( astOK ) {
-
-/* Initialise pointers. */
-            res1 = NULL;
-            rmap1 = NULL;
-            res2 = NULL;
-            rmap2 = NULL;
-
-/* The caller may have selected the Mapping inputs in any order, so we
-   need to create a PermMap which will permute the inputs from the
-   requested order to the order used by the CmpMap. First fill the outperm 
-   work array with its own indices. */
-            for( i = 0; i < nin; i++ ) outp[ i ] = i;
-
-/* Sort the outperm work array so that it accesses the array of input indices 
-   in ascending order */
-            for( j = nin - 1; j > 0; j-- ) {
-               p = outp;
-               for( i = 0; i < j; i++,p++ ) {
-                  if( in[ p[0] ] > in[ p[1] ] ) {
-                     t = p[0];
-                     p[0] = p[1];
-                     p[1] = t;
-                  }
-               }
-            }
-
-/* Create the inperm array which is the inverse of the above outperm
-   array. Note if the permutation is necessary. */
-            doperm = 0;
-            for( i = 0; i < nin; i++ ) {
-               if( outp[ i ] != i ) doperm = 1;
-               inp[ outp[ i ] ] = i;
-            }              
-
-/* Create a PermMap which reorders the inputs into ascending order. */
-            pmap = doperm ? astPermMap( nin, inp, nin, outp, NULL, "", status ) : NULL;
-
-/* Store the sorted input indices in the inp work array, get a pointer
-   to the first input relating to the second component Mapping, and shift
-   all the indices relating to the second component Mapping so they are
-   zero based. */
-            nin1 = astGetNin( map1 );
-            pb = NULL;
-            for( i = 0; i < nin; i++ ) { 
-               inp[ i ] = in[ outp[ i ] ];
-               if( inp[ i ] >= nin1 ) {
-                  inp[ i ] -= nin1;
-                  if( !pb ) pb = inp + i;
-               }
-            }
-
-/* If any of the selected inputs relate to the first component Mapping, try 
-   to split the first component Mapping using the input indices stored
-   at the start of the sorted array. */
-            nin1 = pb ? ( pb - inp ) : nin;
-            if( nin1 ) {
-               res1 = astMapSplit( map1, nin1, inp, &rmap1 );
-               ok = ( res1 != NULL );
-            } else {
-               ok = 1;
-            }
-
-/* If OK, see if any of the selected inputs relate to the second component 
-   Mapping, try to split the second component Mapping using the input indices 
-   stored at the end of the sorted array. */
-            if( ok ) {
-               nin2 = nin - nin1;
-               if( nin2 ) {
-                  res2 = astMapSplit( map2, nin2, pb, &rmap2 );
-                  ok = ( res2 != NULL );
-               } else {
-                  ok = 1;
-               }
-            } 
-
-/* If OK, combine the two resulting Mappings in parallel and construct
-   the returned results array. */
-            if( ok ) {
-               if( res1 && res2 ) {
-                  tmap = astCmpMap( rmap1, rmap2, 0, "", status );
-                  nout1 = astGetNout( rmap1 );
-                  nout2 = astGetNout( rmap2 );
-                  result = astMalloc( sizeof(int)*(size_t) (nout1+nout2) );
-                  for( i = 0; i < nout1; i++ ) result[ i ] = res1[ i ];
-                  noff = astGetNout( map1 );
-                  for( i = 0; i < nout2; i++ ) result[ i + nout1 ] = res2[ i ] + noff;
-
-               } else if( res1 ) {
-                  tmap = astCopy( rmap1 );
-                  nout1 = astGetNout( rmap1 );
-                  result = astMalloc( sizeof(int)*(size_t) nout1 );
-                  for( i = 0; i < nout1; i++ ) result[ i ] = res1[ i ];
-
-               } else if( res2 ) {
-                  tmap = astCopy( rmap2 );
-                  nout2 = astGetNout( rmap2 );
-                  result = astMalloc( sizeof(int)*(size_t) nout2 );
-                  noff = astGetNout( map1 );
-                  for( i = 0; i < nout2; i++ ) result[ i ] = res2[ i ] + noff;
-
-               } else {
-                  ok = 0;
-                  tmap = NULL;
-               }
-
-/* If required, add in the PermMap which re-orders the inputs. */
-               if( ok ) {
-                  if( doperm ) {
-                     *map = (AstMapping *) astCmpMap( pmap, tmap, 1, "", status );
-                  } else {
-                     *map = astCopy( tmap );
-                  }
-               }
-
-/* Free resources */
-               if( tmap ) tmap = astAnnul( tmap );
-            }
-
-            if( res1 ) res1 = astFree( res1 );
-            if( rmap1 ) rmap1 = astAnnul( rmap1 );
-            if( res2 ) res2 = astFree( res2 );
-            if( rmap2 ) rmap2 = astAnnul( rmap2 );
-            if( pmap ) pmap = astAnnul( pmap );
-         }
-
-         inp = astFree( inp );
-         outp = astFree( outp );
-      }
-
-/* Reset the original values of the Invert flags of the component
-   Mappings. */
-      astSetInvert( map1, old_inv1 );
-      astSetInvert( map2, old_inv2 );
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static int PatternCheck( int val, int check, int **list, int *list_len, int *status ){
-/*
-*  Name:
-*     Looping
-
-*  Purpose:
-*     Check for repeating patterns in a set of integer values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     int PatternCheck( int val, int nmap, int **mlist, int **nlist, int *list_len )
-
-*  Class Membership:
-*     CmpMap member function.
-
-*  Description:
-*     This function appends a supplied integer to a dynamic list, creating 
-*     or expanding the list if necessary.It then optionally, check the
-*     list for evidence of repeating patterns. If such a pattern is
-*     found, its wavelength is returned.
-
-*  Parameters:
-*     val
-*        The integer value to add to the list.
-*     check
-*        Should a check for reating patterns be performed?
-*     list
-*        Address of a location at which is stored a pointer to an array
-*        holding the values supplied on previous invocations of this 
-*        function. If a NULL pointer is supplied a new array is allocated.
-*        On exit, the supplied value is appended to the end of the array. The 
-*        array is extended as necessary. The returned pointer should be
-*        freed using astFree when no longer needed.
-*     list_len
-*        Address of a location at which is stored the number of elements
-*        in the "list" array.
-
-*  Returned Value:
-*     A non-zero "wavelength" value is returned if there is a repeating
-*     pattern is found in the "list" array. Otherwise, zero is returned.
-*     The "wavelength" is the number of integer values which constitute a
-*     single instance of the pattern.
-
-*  Notes:
-*     - A value of 1 is returned if this function is invoked with the AST 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   int *wave[ 30 ];          /* Pointers to start of waves */
-   int iat;                  /* Index of elements added by this invocation */
-   int jat;                  /* Index of element condiered next */
-   int jlo;                  /* Earliest "mlist" entry to consider */
-   int k;                    /* Index of element within pattern */
-   int mxwave;               /* Max pattern length to consider */
-   int iwave;                /* Index of current wave */
-   int nwave;                /* Number of waves required to mark a pattern */
-   int result;               /* Returned flag */
-   int wavelen;              /* Current pattern length */
-
-/* Check the global status. */
-   if ( !astOK ) return 1;
-
-/* Initialise */
-   result = 0;
-
-/* If no array has been supplied, create a new array. */
-   if( !(*list) ) {
-      *list = astMalloc( 100*sizeof( int ) );
-      *list_len = 0;
-   }
-
-/* Store the new value in the array, extending it if necessary. */
-   iat = (*list_len)++;
-   *list = astGrow( *list, *list_len, sizeof( int ) );
-   if( astOK ) {
-      (*list)[ iat ] = val;
-
-/* If required, determine the maximum "wavelength" for looping patterns to be 
-   checked, and store the earliest list entry to consider. We take 3 complete 
-   patterns as evidence of looping, but we only do the check when the
-   list length is at least 30. */
-      if( check && *list_len > 29 ){
-         mxwave = iat/3;
-         if( mxwave > 50 ) mxwave = 50;
-         jlo = iat - 3*mxwave;
-
-/* Search backwards from the end of "list" looking for the most recent
-   occurence of the supplied "val" value. Limit the search to
-   wavelengths of no more than the above limit. */
-         jat = iat - 1;
-         while( jat >= jlo ) {
-            if( (*list)[ jat ] == val ) {
-
-/* When an earlier occurrence of "val" is found, see if the values
-   which preceed it are the same as the values which preceed the new
-   element if "list" added by this invocation. We use 3 complete
-   patterns as evidence of looping, unless the wavelength is 1 in which
-   case we use 30 patterns (this is because wavelengths of 1 can occur
-   in short sequences legitamately). */
-               wavelen = iat - jat;
-
-               if( wavelen == 1 ) {
-                  nwave = 30;
-                  if( nwave > iat ) nwave = iat;
-               } else {
-                  nwave = 3;
-               }
-
-               if( nwave*wavelen <= *list_len ) {
-                  result = wavelen;
-                  wave[ 0 ] = *list + *list_len - wavelen;
-                  for( iwave = 1; iwave < nwave; iwave++ ) {
-                     wave[ iwave ] = wave[ iwave - 1 ] - wavelen;
-                  }
-
-                  for( k = 0; k < wavelen; k++ ) {
-                     for( iwave = 1; iwave < nwave; iwave++ ) {
-                        if( *wave[ iwave ] != *wave[ 0 ] ) {
-                           result = 0;
-                           break;
-                        }
-                        wave[ iwave ]++;
-                     }
-                     wave[ 0 ]++;
-                  }   
-               }
-
-/* Break if we have found a repeating pattern. */
-               if( result ) break;
-
-            }
-            jat--;
-         }
-      }
-   }
-
-   if( !astOK ) result= 1;
-
-/* Return the result.*/
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     CmpMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   AstMapping *c1;
-   AstMapping *c2;
-   AstCmpMap *map;
-   double result;
-   int old_inv1;
-   int old_inv2;
-   int nin1;
-   int nin2;
-   double *at2;
-   double r1;
-   double r2;
-   int nout1;
-   int i;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the CmpMap structure. */
-   map = (AstCmpMap *) this;
-
-/* Note the current Invert flags of the two component Mappings. */
-   old_inv1 = astGetInvert( map->map1 );
-   old_inv2 = astGetInvert( map->map2 );
-
-/* Temporarily reset them to the values they had when the CmpMap was 
-   created. */
-   astSetInvert( map->map1, map->invert1 );
-   astSetInvert( map->map2, map->invert2 );
-
-/* If the CmpMap itself has been inverted, invert the component Mappings.
-   Also note the order in which the Mappings should be applied if in series. */
-   if( !astGetInvert( this ) ) {
-      c1 = map->map1;
-      c2 = map->map2;
-   } else {
-      c1 = map->map2;
-      c2 = map->map1;
-      astInvert( c1 );
-      astInvert( c2 );
-   }
-
-/* First deal with Mappings in series. */
-   if( map->series ) {
-
-/* Get the number of inputs to the two component Mappings. */
-      nin1 = astGetNin( c1 );
-      nin2 = astGetNin( c2 );
-
-/* Allocate workspace to hold the result of transforming the supplied "at" 
-   position using the first component. */
-      at2 = astMalloc( sizeof( double )*(size_t) nin2 );
-
-/* Transform the supplied "at" position using the first component. */
-      astTranN( c1, 1, nin1, 1, at, 1, nin2, 1, at2 );
-
-/* The required rate of change is the sum of the products of the rate of
-   changes of the two component mappings, summed over all the output axes
-   of the first componment. */
-      result = 0.0;
-      for( i = 0; i < nin2; i++ ) {
-
-/* Find the rate of change of output "i" of the first component with
-   respect to input "ax2" at the supplied "at" position. */
-         r1 = astRate( c1, at, i, ax2 );
-
-/* Find the rate of change of output "ax1" of the second component with
-   respect to input "i" at the transformed "at2" position. */
-         r2 = astRate( c2, at2, ax1, i );
-
-/* If both are good, increment the ryunning total by the product of the
-   two rates. Otherwise, break. */
-         if( r1 != AST__BAD && r2 != AST__BAD ) {
-            result += r1*r2;
-         } else {
-            result = AST__BAD;
-            break;
-         }
-      }
-
-/* Free the workspace. */
-      at2 = astFree( at2 );
-
-/* Now deal with Mappings in parallel. */
-   } else {
-
-/* Get the number of inputs and outputs for the lower component Mappings. */
-      nin1 = astGetNin( map->map1 );
-      nout1 = astGetNout( map->map1 );
-
-/* If both input and output relate to the lower component Mappings, use its
-   astRate method. */
-      if( ax1 < nout1 && ax2 < nin1 ) {
-         result = astRate( map->map1, at, ax1, ax2 );
-         
-/* If both input and output relate to the upper component Mappings, use its
-   astRate method. */
-      } else if( ax1 >= nout1 && ax2 >= nin1 ) {
-         result = astRate( map->map2, at + nin1, ax1 - nout1, ax2 - nin1 );
-         
-/* If input and output relate to different component Mappings, return
-   zero. */
-      } else {
-         result = 0.0;
-      }         
-   }
-
-/* Reinstate the original Invert flags of the component Mappings .*/
-   astSetInvert( map->map1, old_inv1 );
-   astSetInvert( map->map2, old_inv2 );
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     CmpMap method (over-rides the astRemoveRegions method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a CmpMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel CmpMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the CmpMap class invokes the
-*     astRemoveRegions method on the two component Mappings, and joins
-*     the results together into a new CmpMap.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *new;               /* Pointer to new CmpMap */
-   AstCmpMap *this;              /* Pointer to CmpMap structure */
-   AstMapping *newmap1;          /* New first component Mapping */
-   AstMapping *newmap2;          /* New second component Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   int nax;                      /* Number of Frame axes */
-   int unit1;                    /* Is new first Mapping a UnitMap? */
-   int unit2;                    /* Is new second Mapping a UnitMap? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpMap. */
-   this = (AstCmpMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the two component Mappings. */
-   newmap1 = astRemoveRegions( this->map1 );
-   newmap2 = astRemoveRegions( this->map2 );
-
-/* If neither component was modified, just return a clone of the supplied
-   pointer. */
-   if( this->map1 == newmap1 && this->map2 == newmap2 ) {
-      result = astClone( this );
-
-/* Otherwise, we need to create a new Mapping to return. */
-   } else {
-
-/* The implementation of the astRemoveRegions method provided by the
-   Region class returns a Frame rather than a UnitMap. But we need
-   Mappings here, not Frames. So if either of these new Mappings is 
-   a Frame, replace it with an equivalent UnitMap. Also, get flags
-   indicating if either Mapping is a UnitMap.*/
-      if( astIsAFrame( newmap1 ) ) {
-         nax = astGetNin( newmap1 );
-         (void) astAnnul( newmap1 );
-         newmap1 = (AstMapping *) astUnitMap( nax, " ", status );
-         unit1 = 1;
-      } else {
-         unit1 = astIsAUnitMap( newmap1 );
-      }
-   
-      if( astIsAFrame( newmap2 ) ) {
-         nax = astGetNin( newmap2 );
-         (void) astAnnul( newmap2 );
-         newmap2 = (AstMapping *) astUnitMap( nax, " ", status );
-         unit2 = 1;
-      } else {
-         unit2 = astIsAUnitMap( newmap2 );
-      }
-
-/* First handle series CmpMaps. */
-      if( this->series ) {
-
-/* Otherwise, if the second new Mapping is a UnitMap, return a copy of the 
-   first new Mapping (with the original Invert attribute) since the second 
-   one will have no effect. */
-         if( unit1 ) {
-            result = astCopy( newmap2 );
-            astSetInvert( result, this->invert2 );
-            if( astGetInvert( this ) ) astInvert( result );
-
-/* Otherwise, if the second new Mapping is a UnitMap, return a copy of the 
-   first new Mapping (with the original Invert attribute) since the second 
-   one will have no effect. */
-         } else if( unit2 ) {
-            result = astCopy( newmap1 );
-            astSetInvert( result, this->invert1 );
-            if( astGetInvert( this ) ) astInvert( result );
-
-/* If neither of the new Mappings is a UnitMap, return a new CmpMap
-   containing the two new Mappings. We take a deep copy of the supplied
-   CmpMap and then modify the Mappings os that we retain any extra
-   information (such as invert flags) in the supplied CmpMap. */
-         } else {
-            new = astCopy( this );
-            (void) astAnnul( new->map1 );
-            (void) astAnnul( new->map2 );
-            new->map1 = astClone( newmap1 );
-            new->map2 = astClone( newmap2 );
-            result = (AstMapping *) new;
-         }
-
-/* Now handle parallel CmpMaps. */
-      } else {
-
-/* If both new Mappings are UnitMaps, return an equivalent UnitMap. */
-         if( unit1 && unit2 ) {
-            result = (AstMapping *) astUnitMap( astGetNin( newmap1 ) + 
-                                                astGetNin( newmap2 ), " ", 
-                                                status );
-
-/* Otherwise, return a new CmpMap containing the two new Mappings. */
-         } else {
-            new = astCopy( this );
-            (void) astAnnul( new->map1 );
-            (void) astAnnul( new->map2 );
-            new->map1 = astClone( newmap1 );
-            new->map2 = astClone( newmap2 );
-            result = (AstMapping *) new;
-         }
-      }
-   }
-
-/* Free resources. */
-   newmap1 = astAnnul( newmap1 );
-   newmap2 = astAnnul( newmap2 );
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     CmpMap method (over-rides the astSimplify method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function simplifies a CmpMap to eliminate redundant
-*     computational steps, or to merge separate steps which can be
-*     performed more efficiently in a single operation.
-
-*  Parameters:
-*     this
-*        Pointer to the original Mapping.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new pointer to the (possibly simplified) Mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpMap *this;              /* Pointer to CmpMap structure */
-   AstMapping **map_list;        /* Mapping array pointer */
-   AstMapping *map;              /* Pointer to cloned Mapping pointer */
-   AstMapping *result;           /* Result pointer to return */
-   AstMapping *tmp;              /* Temporary Mapping pointer */
-   int *invert_list;             /* Invert array pointer */
-   int *mlist;                   /* Point to list of modified Mapping indices */
-   int *nlist;                   /* Point to list of Mapping counts */
-   int i;                        /* Loop counter for Mappings */
-   int improved;                 /* Simplification achieved? */
-   int invert;                   /* Invert attribute value */
-   int invert_n;                 /* Invert value for final Mapping */
-   int mlist_len;                /* No. of entries in mlist */
-   int nlist_len;                /* No. of entries in nlist */
-   int modified;                 /* Index of first modified Mapping */
-   int nmap;                     /* Mapping count */
-   int nominated;                /* Index of nominated Mapping */
-   int set;                      /* Invert attribute set? */
-   int set_n;                    /* Invert set for final Mapping? */
-   int simpler;                  /* Simplification possible? */
-   int t;                        /* Temporary storage */
-   int wlen1;                    /* Pattern wavelength for "modified" values */
-   int wlen2;                    /* Pattern wavelength for "nmap" values */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_mapping);
-
-/* It is possible for the astSimplify method to be called recursively from
-   within astSimplify. It is also possible that the Mapping being
-   simplified by the current invocation is the same as the Mapping being
-   simplified by some recursive invocation higher up the call stack. If
-   this happens we will get into an infinite loop, since we already know
-   that simplifying the supplied Mapping will involve (eventually) a 
-   recursive call to astSimplify with the same Mapping. To avoid this
-   looping, we note the Mappings supplied at each depth and first compare
-   the supplied Mapping with the Mappings which are currently being 
-   simplified higher up the call stack. If the supplied Mapping is
-   already being simplified at a higher level, then we return immediately
-   without doing any simplification. Otherwise, we record the supplied
-   Mapping pointer in a static list so that it is available to subsequent
-   recursive invocations of this function. First compare the supplied
-   Mapping with the Mappingsbeing simpliied higher up. Return without
-   action if a match is found. */
-   for( i = 0; i < simplify_depth; i++ ) {
-      if( astEqual( this_mapping, simplify_stackmaps[ i ] ) ) {
-         return astClone( this_mapping );
-      }
-   }
-
-/* We have further work to do, so increment the recursion depth, extend
-   the simplify_stackmaps array, and store the new Mapping in it for future use. */
-   simplify_depth++;
-   simplify_stackmaps = astGrow( simplify_stackmaps, simplify_depth, sizeof( AstMapping * ) );
-   if( astOK ) {
-      simplify_stackmaps[ simplify_depth - 1 ] = astClone( this_mapping );
-   }   
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpMap *) this_mapping;
-
-/* Initialise dynamic arrays of Mapping pointers and associated Invert
-   flags. */
-   nmap = 0;
-   map_list = NULL;
-   invert_list = NULL;
-
-/* Decompose the CmpMap into a sequence of Mappings to be applied in
-   series or parallel, as appropriate, and an associated list of
-   Invert flags. If any inverted CmpMaps are found in the Mapping, then
-   we can at least simplify the returned Mapping by swapping and
-   inverting the components. Set "simpler" to indicate this. */
-   simpler = astMapList( this_mapping, this->series, astGetInvert( this ), &nmap,
-                         &map_list, &invert_list );
-
-/* Initialise pointers to memory used to hold lists of the modified
-   Mapping index and the number of mappings after each call of
-   astMapMerge. */
-   mlist = NULL;
-   nlist = NULL;
-
-/* Loop to simplify the sequence until a complete pass through it has
-   been made without producing any improvement. */
-   improved = 1;
-   while ( astOK && improved ) {
-      improved = 0;
-
-/* Loop to nominate each Mapping in the sequence in turn. */
-      nominated = 0;
-      while ( astOK && ( nominated < nmap ) ) {
-
-
-/* Clone a pointer to the nominated Mapping and attempt to merge it
-   with its neighbours. Annul the cloned pointer afterwards. */
-         map = astClone( map_list[ nominated ] );
-         modified = astMapMerge( map, nominated, this->series,
-                                 &nmap, &map_list, &invert_list );
-         map = astAnnul( map );
-
-/* Move on to nominate the next Mapping in the sequence. */
-         nominated++;
-
-/* Note if any simplification occurred above. */
-         if( modified >= 0 ) {
-
-/* Append the index of the first modified Mapping in the list and and check 
-   that there is no repreating pattern in the list. If there is, we are 
-   probably in a loop where one mapping class is making a change, and another 
-   is undoing the change. The Looping function returns the "wavelength"
-   of any pattern found. If a pattern was discovered, we ignore it unless 
-   there is also a pattern in the "nmap" values - the wavelengths of the
-   two patterns must be related by a integer factor. */
-            wlen1 = PatternCheck( modified, 1, &mlist, &mlist_len, status );
-            wlen2 = PatternCheck( nmap, wlen1, &nlist, &nlist_len, status );
-            if( wlen1 && wlen2 ) {
-
-/* Ensure wlen2 is larger tnan or equal to wlen1. */
-               if( wlen1 > wlen2 ) {
-                  t = wlen1;
-                  wlen1 = wlen2;
-                  wlen2 = wlen1;
-               }
-
-/* See if wlen2 is an integer multiple of wlen1. If not, ignore the
-   patterns. */
-               if( ( wlen2 % wlen1 ) != 0 ) wlen1 = 0;
-            }
-
-/* Ignore the simplication if a repeating pattern is occurring. */
-            if( wlen1 == 0 ) {
-               improved = 1;
-               simpler = 1;
-
-/* If the simplification resulted in modification of an earlier
-   Mapping than would normally be considered next, then go back to
-   consider the modified one first. */
-               if ( modified < nominated ) nominated = modified;
-            }
-         }
-      }
-   }
-
-/* Free resources */
-   if( mlist ) mlist = astFree( mlist );
-   if( nlist ) nlist = astFree( nlist );
-
-/* Construct the output Mapping. */
-/* ============================= */
-/* If no simplification occurred above, then simply clone a pointer to
-   the original Mapping. */
-   if ( astOK ) {
-      if ( !simpler ) {
-         result = astClone( this );
-
-/* Otherwise, we must construct the result from the contents of the
-   Mapping list. */
-      } else {
-
-/* If the simplified Mapping list has only a single element, then the
-   output Mapping will not be a CmpMap. In this case, we cannot
-   necessarily set the Invert flag of the Mapping to the value we want
-   (because we must not modify the Mapping itself. */
-         if ( nmap == 1 ) {
-
-/* We must make a copy. Cloning is no good (even if the Mapping already
-   has the Invert attribute value we want), since we want the returned
-   Mapping to be independent of the original component Mappings, so that
-   if user code inverts a component Mapping (via some other pre-existing 
-   pointer), the returned simplified Mapping is not affected. */
-            result = astCopy( map_list[ 0 ] );
-
-/* Either clear the copy's Invert attribute, or set it to 1, as
-   required. */
-            if ( invert_list[ 0 ] ) {
-               astSetInvert( result, 1 );
-            } else {
-               astClearInvert( result );
-            }
-
-/* If the simplified Mapping sequence has more than one element, the
-   output Mapping will be a CmpMap. In this case, we can set each
-   individual Mapping element to have the Invert attribute value we
-   want, so long as we return these attribute values to their original
-   state again afterwards (once a Mapping is encapsulated inside a
-   CmpMap, further external changes to its Invert attribute do not
-   affect the behaviour of the CmpMap). */
-         } else {
-
-/* Determine if the Invert attribute for the last Mapping is set, and
-   obtain its value. */
-            set_n = astTestInvert( map_list[ nmap - 1 ] );
-            invert_n = astGetInvert( map_list[ nmap - 1 ] );
-
-/* Set this attribute to the value we want. */
-            astSetInvert( map_list[ nmap - 1 ], invert_list[ nmap - 1 ] );
-
-/* Loop through the Mapping sequence in reverse to merge it into an
-   equivalent CmpMap. */
-            for ( i = nmap - 1; i >= 0; i-- ) {
-
-/* Simply clone the pointer to the last Mapping in the sequence (which
-   will be encountered first). */
-              if ( !result ) {
-                  result = astClone( map_list[ i ] );
-
-/* For subsequent Mappings, test if the Invert attribute is set and
-   save its value. */
-               } else {
-                  set = astTestInvert( map_list[ i ] );
-                  invert = astGetInvert( map_list[ i ] );
-
-/* Set this attribute to the value required. */
-                  astSetInvert( map_list[ i ], invert_list[ i ] );
-               
-/* Combine the Mapping with the CmpMap formed so far and replace the
-   result pointer with the new pointer this produces, annulling the
-   previous pointer. */
-                  tmp = (AstMapping *) astCmpMap( map_list[ i ], result,
-                                                  this->series, "", status );
-                  (void) astAnnul( result );
-                  result = tmp;
-
-/* Restore the Invert attribute of the Mapping to its original
-   state. */
-                  if ( !set ) {
-                     astClearInvert( map_list[ i ] );
-                  } else {
-                     astSetInvert( map_list[ i ], invert );
-                  }
-               }
-            }
-
-/* When all the Mappings have been merged into the CmpMap, restore the
-   state of the Invert attribute for the final Mapping in the
-   sequence. */
-            if ( !set_n ) {
-               astClearInvert( map_list[ nmap - 1  ] );
-            } else {
-               astSetInvert( map_list[ nmap - 1 ], invert_n );
-            }
-         }
-      }
-   }
-
-/* Clean up. */
-/* ========= */
-/* Loop to annul all the Mapping pointers in the simplified list. */
-   for ( i = 0; i < nmap; i++ ) map_list[ i ] = astAnnul( map_list[ i ] );
-
-/* Free the dynamic arrays. */
-   map_list = astFree( map_list );
-   invert_list = astFree( invert_list );
-
-/* Decrement the recursion depth and free the pointer to the supplied 
-   Mapping currently stored at the end of the simplify_stackmaps array. */
-   simplify_depth--;
-   if( astOK ) {
-      simplify_stackmaps[ simplify_depth ] = astAnnul( simplify_stackmaps[ simplify_depth ] );
-   }   
-
-/* If we are now at depth zero, free the simplify_stackmaps array. */
-   if( simplify_depth == 0 ) simplify_stackmaps = astFree( simplify_stackmaps );
-
-/* If an error occurred, annul the returned Mapping. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a CmpMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a CmpMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Mapping.
-*     This implies applying each of the CmpMap's component Mappings in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpMap.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the CmpMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstCmpMap *map;               /* Pointer to CmpMap to be applied */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstPointSet *temp1;           /* Pointer to temporary PointSet */
-   AstPointSet *temp2;           /* Pointer to temporary PointSet */
-   AstPointSet *temp;            /* Pointer to temporary PointSet */
-   int forward1;                 /* Use forward direction for Mapping 1? */
-   int forward2;                 /* Use forward direction for Mapping 2? */
-   int ipoint1;                  /* Index of first point in batch */
-   int ipoint2;                  /* Index of last point in batch */
-   int nin1;                     /* No. input coordinates for Mapping 1 */
-   int nin2;                     /* No. input coordinates for Mapping 2 */
-   int nin;                      /* No. input coordinates supplied */
-   int nout1;                    /* No. output coordinates for Mapping 1 */
-   int nout2;                    /* No. output coordinates for Mapping 2 */
-   int nout;                     /* No. output coordinates supplied */
-   int np;                       /* Number of points in batch */
-   int npoint;                   /* Number of points to be transformed */
-
-/* Local Constants: */
-   const int nbatch = 2048;      /* Maximum points in a batch */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the CmpMap. */
-   map = (AstCmpMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
-   Mappings of the CmpMap to generate the output coordinate values. */
-
-/* Determine whether to apply the forward or inverse Mapping, according to the
-   direction specified and whether the Mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Check if either component Mapping's inversion flag has changed since it was
-   used to construct the CmpMap. Set a "forward" flag for each Mapping to
-   change the direction we will use, to compensate if necessary. (Such changes
-   may have occurred if other pointers to the component Mappings are in
-   circulation). */
-   forward1 = forward;
-   forward2 = forward;
-   if ( map->invert1 != astGetInvert( map->map1 ) ) forward1 = !forward1;
-   if ( map->invert2 != astGetInvert( map->map2 ) ) forward2 = !forward2;
-
-/* Determine the number of points being transformed. */
-   npoint = astGetNpoint( in );
-
-/* Mappings in series. */
-/* ------------------- */
-/* If required, use the two component Mappings in series. To do this, we must
-   apply one Mapping followed by the other, which means storing an intermediate
-   result. Since this function may be invoked recursively and have to store an
-   intermediate result on each occasion, the memory required may become
-   excessive when transforming large numbers of points. To overcome this, we
-   split the points up into smaller batches. */
-   if ( astOK ) {
-      if ( map->series ) {
-
-/* Obtain the numbers of input and output coordinates. */
-         nin = astGetNcoord( in );
-         nout = astGetNcoord( result );
-
-/* Loop to process all the points in batches, of maximum size nbatch points. */
-         for ( ipoint1 = 0; ipoint1 < npoint; ipoint1 += nbatch ) {
-
-/* Calculate the index of the final point in the batch and deduce the number of
-   points (np) to be processed in this batch. */
-            ipoint2 = ipoint1 + nbatch - 1;
-            if ( ipoint2 > npoint - 1 ) ipoint2 = npoint - 1;
-            np = ipoint2 - ipoint1 + 1;
-
-/* Create temporary PointSets to describe the input and output points for this
-   batch. */
-            temp1 = astPointSet( np, nin, "", status );
-            temp2 = astPointSet( np, nout, "", status );
-
-/* Associate the required subsets of the input and output coordinates with the
-   two PointSets. */
-            astSetSubPoints( in, ipoint1, 0, temp1 );
-            astSetSubPoints( result, ipoint1, 0, temp2 );
-
-/* Apply the two Mappings in sequence and in the required order and direction.
-   Store the intermediate result in a temporary PointSet (temp) which is
-   created by the first Mapping applied. */
-            if ( forward ) {
-               temp = astTransform( map->map1, temp1, forward1, NULL );
-               (void) astTransform( map->map2, temp, forward2, temp2 );
-            } else {
-               temp = astTransform( map->map2, temp1, forward2, NULL );
-               (void) astTransform( map->map1, temp, forward1, temp2 );
-            }
-
-/* Delete the temporary PointSets after processing each batch of points. */
-            temp = astDelete( temp );
-            temp1 = astDelete( temp1 );
-            temp2 = astDelete( temp2 );
-
-/* Quit processing batches if an error occurs. */
-            if ( !astOK ) break;
-         }
-
-/* Mappings in parallel. */
-/* --------------------- */
-/* If required, use the two component Mappings in parallel. Since we do not
-   need to allocate any memory to hold intermediate coordinate values here,
-   there is no need to process the points in batches. */
-      } else {
-
-/* Get the effective number of input and output coordinates per point for each
-   Mapping (taking account of the direction in which each will be used to
-   transform points). */
-         nin1 = forward1 ? astGetNin( map->map1 ) : astGetNout( map->map1 );
-         nout1 = forward1 ? astGetNout( map->map1 ) : astGetNin( map->map1 );
-         nin2 = forward2 ? astGetNin( map->map2 ) : astGetNout( map->map2 );
-         nout2 = forward2 ? astGetNout( map->map2 ) : astGetNin( map->map2 );
-
-/* Create temporary PointSets to describe the input and output coordinates for
-   the first Mapping. */
-         temp1 = astPointSet( npoint, nin1, "", status );
-         temp2 = astPointSet( npoint, nout1, "", status );
-
-/* Associate the required subsets of the input and output coordinates with
-   these PointSets. */
-         astSetSubPoints( in, 0, 0, temp1 );
-         astSetSubPoints( result, 0, 0, temp2 );
-
-/* Use the astTransform method to apply the coordinate transformation described
-   by the first Mapping. */
-         (void) astTransform( map->map1, temp1, forward1, temp2 );
-
-/* Delete the temporary PointSets. */
-         temp1 = astDelete( temp1 );
-         temp2 = astDelete( temp2 );
-
-/* Create a new pair of temporary PointSets to describe the input and output
-   coordinates for the second Mapping, and associate the required subsets of
-   the input and output coordinates with these PointSets. */
-         temp1 = astPointSet( npoint, nin2, "", status );
-         temp2 = astPointSet( npoint, nout2, "", status );
-         astSetSubPoints( in, 0, nin1, temp1 );
-         astSetSubPoints( result, 0, nout1, temp2 );
-
-/* Apply the coordinate transformation described by the second Mapping. */
-         (void) astTransform( map->map2, temp1, forward2, temp2 );
-
-/* Delete the two temporary PointSets. */
-         temp1 = astDelete( temp1 );
-         temp2 = astDelete( temp2 );
-      }
-   }
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for CmpMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for CmpMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Mappings within the CmpMap.
-*/
-
-/* Local Variables: */
-   AstCmpMap *in;                /* Pointer to input CmpMap */
-   AstCmpMap *out;               /* Pointer to output CmpMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output CmpMaps. */
-   in = (AstCmpMap *) objin;
-   out = (AstCmpMap *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Mappings from the output CmpMap. */
-   out->map1 = NULL;
-   out->map2 = NULL;
-
-/* Make copies of these Mappings and store pointers to them in the output
-   CmpMap structure. */
-   out->map1 = astCopy( in->map1 );
-   out->map2 = astCopy( in->map2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for CmpMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for CmpMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstCmpMap *this;              /* Pointer to CmpMap */
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpMap *) obj;
-
-/* Annul the pointers to the component Mappings. */
-   this->map1 = astAnnul( this->map1 );
-   this->map2 = astAnnul( this->map2 );
-
-/* Clear the remaining CmpMap variables. */
-   this->invert1 = 0;
-   this->invert2 = 0;
-   this->series = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for CmpMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the CmpMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstCmpMap *this;              /* Pointer to the CmpMap structure */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpMap *) this_object;
-
-/* Write out values representing the instance variables for the CmpMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Series. */
-/* ------- */
-   ival = this->series;
-   set = ( ival == 0 );
-   astWriteInt( channel, "Series", set, 0, ival,
-                ival ? "Component Mappings applied in series" :
-                       "Component Mappings applied in parallel" );
-
-/* First Invert flag. */
-/* ------------------ */
-   ival = this->invert1;
-   set = ( ival != 0 );
-   astWriteInt( channel, "InvA", set, 0, ival,
-                ival ? "First Mapping used in inverse direction" :
-                       "First Mapping used in forward direction" );
-
-/* Second Invert flag. */
-/* ------------------- */
-   ival = this->invert2;
-   set = ( ival != 0 );
-   astWriteInt( channel, "InvB", set, 0, ival,
-                ival ? "Second Mapping used in inverse direction" :
-                       "Second Mapping used in forward direction" );
-
-/* First Mapping. */
-/* -------------- */
-   astWriteObject( channel, "MapA", 1, 1, this->map1,
-                   "First component Mapping" );
-
-/* Second Mapping. */
-/* --------------- */
-   astWriteObject( channel, "MapB", 1, 1, this->map2,
-                   "Second component Mapping" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACmpMap and astCheckCmpMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(CmpMap,Mapping)
-astMAKE_CHECK(CmpMap)
-
-AstCmpMap *astCmpMap_( void *map1_void, void *map2_void, int series,
-                       const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astCmpMap
-
-*  Purpose:
-*     Create a CmpMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     AstCmpMap *astCmpMap( AstMapping *map1, AstMapping *map2, int series,
-*                           const char *options, ... )
-
-*  Class Membership:
-*     CmpMap constructor.
-
-*  Description:
-*     This function creates a new CmpMap and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     map1
-*        Pointer to the first Mapping.
-*     map2
-*        Pointer to the second Mapping.
-*     series
-*        If a non-zero value is given, the two Mappings will be connected
-*        together in series. A zero value requests that they be connected in
-*        parallel.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new CmpMap. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new CmpMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic CmpMap constructor which is
-*     available via the protected interface to the CmpMap class.  A
-*     public interface is provided by the astCmpMapId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "map1" and "map2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpMap *new;               /* Pointer to new CmpMap */
-   AstMapping *map1;             /* Pointer to first Mapping structure */
-   AstMapping *map2;             /* Pointer to second Mapping structure */
-   va_list args;                 /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Mapping structures provided. */
-   map1 = astCheckMapping( map1_void );
-   map2 = astCheckMapping( map2_void );
-   if ( astOK ) {
-
-/* Initialise the CmpMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitCmpMap( NULL, sizeof( AstCmpMap ), !class_init, &class_vtab,
-                           "CmpMap", map1, map2, series );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new CmpMap's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new CmpMap. */
-   return new;
-}
-
-AstCmpMap *astCmpMapId_( void *map1_void, void *map2_void, int series,
-                         const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astCmpMap
-f     AST_CMPMAP
-
-*  Purpose:
-*     Create a CmpMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "cmpmap.h"
-c     AstCmpMap *astCmpMap( AstMapping *map1, AstMapping *map2, int series,
-c                           const char *options, ... )
-f     RESULT = AST_CMPMAP( MAP1, MAP2, SERIES, OPTIONS, STATUS )
-
-*  Class Membership:
-*     CmpMap constructor.
-
-*  Description:
-*     This function creates a new CmpMap and optionally initialises
-*     its attributes.
-*
-*     A CmpMap is a compound Mapping which allows two component
-*     Mappings (of any class) to be connected together to form a more
-*     complex Mapping. This connection may either be "in series"
-*     (where the first Mapping is used to transform the coordinates of
-*     each point and the second mapping is then applied to the
-*     result), or "in parallel" (where one Mapping transforms the
-*     earlier coordinates for each point and the second Mapping
-*     simultaneously transforms the later coordinates).
-*
-*     Since a CmpMap is itself a Mapping, it can be used as a
-*     component in forming further CmpMaps. Mappings of arbitrary
-*     complexity may be built from simple individual Mappings in this
-*     way.
-
-*  Parameters:
-c     map1
-f     MAP1 = INTEGER (Given)
-*        Pointer to the first component Mapping.
-c     map2
-f     MAP2 = INTEGER (Given)
-*        Pointer to the second component Mapping.
-c     series
-f     SERIES = LOGICAL (Given)
-c        If a non-zero value is given for this parameter, the two
-c        component Mappings will be connected in series. A zero
-c        value requests that they are connected in parallel.
-f        If a .TRUE. value is given for this argument, the two
-f        component Mappings will be connected in series. A
-f        .FALSE. value requests that they are connected in parallel.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new CmpMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new CmpMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astCmpMap()
-f     AST_CMPMAP = INTEGER
-*        A pointer to the new CmpMap.
-
-*  Notes:
-*     - If the component Mappings are connected in series, then using
-*     the resulting CmpMap to transform coordinates will cause the
-*     first Mapping to be applied, followed by the second Mapping. If
-*     the inverse CmpMap transformation is requested, the two
-*     component Mappings will be applied in both the reverse order and
-*     the reverse direction.
-*     - When connecting two component Mappings in series, the number
-*     of output coordinates generated by the first Mapping (its Nout
-*     attribute) must equal the number of input coordinates accepted
-*     by the second Mapping (its Nin attribute).
-*     - If the component Mappings of a CmpMap are connected in
-*     parallel, then the first Mapping will be used to transform the
-*     earlier input coordinates for each point (and to produce the
-*     earlier output coordinates) and the second Mapping will be used
-*     simultaneously to transform the remaining input coordinates (to
-*     produce the remaining output coordinates for each point). If the
-*     inverse transformation is requested, each Mapping will still be
-*     applied to the same coordinates, but in the reverse direction.
-*     - When connecting two component Mappings in parallel, there is
-*     no restriction on the number of input and output coordinates for
-*     each Mapping.
-c     - Note that the component Mappings supplied are not copied by
-c     astCmpMap (the new CmpMap simply retains a reference to
-c     them). They may continue to be used for other purposes, but
-c     should not be deleted. If a CmpMap containing a copy of its
-c     component Mappings is required, then a copy of the CmpMap should
-c     be made using astCopy.
-f     - Note that the component Mappings supplied are not copied by
-f     AST_CMPMAP (the new CmpMap simply retains a reference to
-f     them). They may continue to be used for other purposes, but
-f     should not be deleted. If a CmpMap containing a copy of its
-f     component Mappings is required, then a copy of the CmpMap should
-f     be made using AST_COPY.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astCmpMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astCmpMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "map1" and "map2" parameters
-*     are of type (void *) and are converted from an ID value to a
-*     pointer and validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astCmpMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpMap *new;               /* Pointer to new CmpMap */
-   AstMapping *map1;             /* Pointer to first Mapping structure */
-   AstMapping *map2;             /* Pointer to second Mapping structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain the Mapping pointers from the ID's supplied and validate the
-   pointers to ensure they identify valid Mappings. */
-   map1 = astVerifyMapping( astMakePointer( map1_void ) );
-   map2 = astVerifyMapping( astMakePointer( map2_void ) );
-   if ( astOK ) {
-
-/* Initialise the CmpMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitCmpMap( NULL, sizeof( AstCmpMap ), !class_init, &class_vtab,
-                           "CmpMap", map1, map2, series );
-
-/* If successful, note that the virtual function table has been initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new CmpMap's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new CmpMap. */
-   return astMakeId( new );
-}
-
-AstCmpMap *astInitCmpMap_( void *mem, size_t size, int init,
-                           AstCmpMapVtab *vtab, const char *name,
-                           AstMapping *map1, AstMapping *map2, int series, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCmpMap
-
-*  Purpose:
-*     Initialise a CmpMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     AstCmpMap *astInitCmpMap( void *mem, size_t size, int init,
-*                               AstCmpMapVtab *vtab, const char *name,
-*                               AstMapping *map1, AstMapping *map2,
-*                               int series )
-
-*  Class Membership:
-*     CmpMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new CmpMap object. It allocates memory (if necessary) to
-*     accommodate the CmpMap plus any additional data associated with the
-*     derived class. It then initialises a CmpMap structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a CmpMap at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the CmpMap is to be initialised.
-*        This must be of sufficient size to accommodate the CmpMap data
-*        (sizeof(CmpMap)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the CmpMap (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        CmpMap structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the CmpMap's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new CmpMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     map1
-*        Pointer to the first Mapping.
-*     map2
-*        Pointer to the second Mapping.
-*     series
-*        If a non-zero value is given, the two Mappings will be connected
-*        together in series. A zero value requests that they be connected in
-*        parallel.
-
-*  Returned Value:
-*     A pointer to the new CmpMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstCmpMap *new;               /* Pointer to new CmpMap */
-   int map_f;                    /* Forward transformation defined? */
-   int map_i;                    /* Inverse transformation defined? */
-   int nin2;                     /* No. input coordinates for Mapping 2 */
-   int nin;                      /* No. input coordinates for CmpMap */
-   int nout1;                    /* No. output coordinates for Mapping 1 */
-   int nout;                     /* No. output coordinates for CmpMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitCmpMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Determine in which directions each component Mapping is able to transform
-   coordinates. Combine these results to obtain a result for the overall
-   CmpMap. */
-   map_f = astGetTranForward( map1 ) && astGetTranForward( map2 );
-   map_i = astGetTranInverse( map1 ) && astGetTranInverse( map2 );
-   if ( astOK ) {
-
-/* If connecting the Mappings in series, check that the number of coordinates
-   are compatible and report an error if they are not. */
-      if ( series ) {
-         nout1 = astGetNout( map1 );
-         nin2 = astGetNin( map2 );
-         if ( astOK && ( nout1 != nin2 ) ) {
-            astError( AST__INNCO, "astInitCmpMap(%s): The number of output "
-                      "coordinates per point (%d) for the first Mapping "
-                      "supplied does not match the number of input "
-                      "coordinates (%d) for the second Mapping.", status, name, nout1,
-                      nin2 );
-         }
-      }
-   }
-
-/* If OK, determine the total number of input and output coordinates per point
-   for the CmpMap. */
-   if ( astOK ) {
-      if ( series ) {
-         nin = astGetNin( map1 );
-         nout = astGetNout( map2 );
-      } else {
-         nin = astGetNin( map1 ) + astGetNin( map2 );
-         nout = astGetNout( map1 ) + astGetNout( map2 );
-      }
-
-   } else {
-      nin = 0;
-      nout = 0;
-   }
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the CmpMap structure, allocating memory if necessary. Specify
-   the number of input and output coordinates and in which directions the
-   Mapping should be defined. */
-   if ( astOK ) {
-      new = (AstCmpMap *) astInitMapping( mem, size, 0,
-                                          (AstMappingVtab *) vtab, name,
-                                          nin, nout, map_f, map_i );
-
-      if ( astOK ) {
-
-/* Initialise the CmpMap data. */
-/* --------------------------- */
-/* Store pointers to the component Mappings. Extract Mappings if
-   FrameSets are provided. */
-         if( astIsAFrameSet( map1 ) ) {
-            new->map1 = astGetMapping( (AstFrameSet *) map1, AST__BASE, 
-                                       AST__CURRENT );
-         } else {
-            new->map1 = astClone( map1 );
-         }
-
-         if( astIsAFrameSet( map2 ) ) {
-            new->map2 = astGetMapping( (AstFrameSet *) map2, AST__BASE, 
-                                       AST__CURRENT );
-         } else {
-            new->map2 = astClone( map2 );
-         }
-
-
-/* Save the initial values of the inversion flags for these Mappings. */
-         new->invert1 = astGetInvert( new->map1 );
-         new->invert2 = astGetInvert( new->map2 );
-
-/* Note whether the Mappings are joined in series (instead of in parallel),
-   constraining this flag to be 0 or 1. */
-         new->series = ( series != 0 );
-
-/* If an error occurred, clean up by annulling the Mapping pointers and
-   deleting the new object. */
-         if ( !astOK ) {
-            new->map1 = astAnnul( new->map1 );
-            new->map2 = astAnnul( new->map2 );
-            new = astDelete( new );
-         }
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstCmpMap *astLoadCmpMap_( void *mem, size_t size,
-                           AstCmpMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadCmpMap
-
-*  Purpose:
-*     Load a CmpMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpmap.h"
-*     AstCmpMap *astLoadCmpMap( void *mem, size_t size,
-*                               AstCmpMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     CmpMap loader.
-
-*  Description:
-*     This function is provided to load a new CmpMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     CmpMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a CmpMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the CmpMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        CmpMap data (sizeof(CmpMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the CmpMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the CmpMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstCmpMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new CmpMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the CmpMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "CmpMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new CmpMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpMap *new;               /* Pointer to the new CmpMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this CmpMap. In this case the
-   CmpMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstCmpMap );
-      vtab = &class_vtab;
-      name = "CmpMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitCmpMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built CmpMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "CmpMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Series. */
-/* ------- */
-      new->series = astReadInt( channel, "series", 1 );
-      new->series = ( new->series != 0 );
-
-/* First Invert flag. */
-/* ------------------ */
-      new->invert1 = astReadInt( channel, "inva", 0 );
-      new->invert1 = ( new->invert1 != 0 );
-
-/* Second Invert flag. */
-/* ------------------- */
-      new->invert2 = astReadInt( channel, "invb", 0 );
-      new->invert2 = ( new->invert2 != 0 );
-
-/* First Mapping. */
-/* -------------- */
-      new->map1 = astReadObject( channel, "mapa", NULL );
-
-/* Second Mapping. */
-/* --------------- */
-      new->map2 = astReadObject( channel, "mapb", NULL );
-
-/* If an error occurred, clean up by deleting the new CmpMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new CmpMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* None. */
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/cmpmap.h b/ast-5.3-1/cmpmap.h
deleted file mode 100644
index 3e74846..0000000
--- a/ast-5.3-1/cmpmap.h
+++ /dev/null
@@ -1,300 +0,0 @@
-#if !defined( CMPMAP_INCLUDED )  /* Include this file only once */
-#define CMPMAP_INCLUDED
-/*
-*+
-*  Name:
-*     cmpmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the CmpMap class.
-
-*  Invocation:
-*     #include "cmpmap.h"
-
-*  Description:
-*     This include file defines the interface to the CmpMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc. needed to use this class.
-*
-*     A CmpMap is a compound Mapping which allows two component
-*     Mappings (of any class) to be connected together to form a more
-*     complex Mapping. This connection may either be "in series"
-*     (where the first Mapping is used to transform the coordinates of
-*     each point and the second mapping is then applied to the
-*     result), or "in parallel" (where one Mapping transforms the
-*     earlier coordinates for each point and the second Mapping
-*     simultaneously transforms the later coordinates).
-*
-*     Since a CmpMap is itself a Mapping, it can be used as a
-*     component in forming further CmpMaps. Mappings of arbitrary
-*     complexity may be built from simple individual Mappings in this
-*     way.
-
-*  Inheritance:
-*     The CmpMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astSimplify
-*           Simplify a CmpMap.
-*
-*     Protected:
-*        astMapList
-*           Decompose a CmpMap into a sequence of simpler Mappings.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsACmpMap
-*           Test class membership.
-*        astCmpMap
-*           Create a CmpMap.
-*
-*     Protected:
-*        astCheckCmpMap
-*           Validate class membership.
-*        astInitCmpMap
-*           Initialise a CmpMap.
-*        astInitCmpMapVtab
-*           Initialise the virtual function table for the CmpMap class.
-*        astLoadCmpMap
-*           Load a CmpMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstCmpMap
-*           CmpMap object type.
-*
-*     Protected:
-*        AstCmpMapVtab
-*           CmpMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     6-FEB-1996 (RFWS):
-*        Original version.
-*     25-SEP-1996 (RFWS):
-*        Implemented external interface and I/O facilities.
-*     13-DEC-1996 (RFWS):
-*        Over-ride the astSimplify method.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitCmpMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* CmpMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstCmpMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstMapping *map1;              /* Pointer to first Mapping */
-   AstMapping *map2;              /* Pointer to second Mapping */
-   char invert1;                  /* Inversion flag for first Mapping */
-   char invert2;                  /* Inversion flag for second Mapping */
-   char series;                   /* Connect in series (else in parallel)? */
-} AstCmpMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstCmpMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstCmpMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstCmpMapGlobals {
-   AstCmpMapVtab Class_Vtab;
-   int Class_Init;
-   int Simplify_Depth;
-   AstMapping **Simplify_Stackmaps; 
-} AstCmpMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(CmpMap)           /* Check class membership */
-astPROTO_ISA(CmpMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstCmpMap *astCmpMap_( void *, void *, int, const char *, int *, ...);
-#else
-AstCmpMap *astCmpMapId_( void *, void *, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstCmpMap *astInitCmpMap_( void *, size_t, int, AstCmpMapVtab *,
-                           const char *, AstMapping *, AstMapping *, int, int * );
-
-/* Vtab initialiser. */
-void astInitCmpMapVtab_( AstCmpMapVtab *, const char *, int * );
-
-/* Loader. */
-AstCmpMap *astLoadCmpMap_( void *, size_t, AstCmpMapVtab *,
-                           const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitCmpMapGlobals_( AstCmpMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckCmpMap(this) astINVOKE_CHECK(CmpMap,this,0)
-#define astVerifyCmpMap(this) astINVOKE_CHECK(CmpMap,this,1)
-
-/* Test class membership. */
-#define astIsACmpMap(this) astINVOKE_ISA(CmpMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astCmpMap astINVOKE(F,astCmpMap_)
-#else
-#define astCmpMap astINVOKE(F,astCmpMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitCmpMap(mem,size,init,vtab,name,map1,map2,series) \
-astINVOKE(O,astInitCmpMap_(mem,size,init,vtab,name,astCheckMapping(map1),astCheckMapping(map2),series,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCmpMapVtab(vtab,name) astINVOKE(V,astInitCmpMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCmpMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCmpMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCmpMap to validate CmpMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/cmpregion.c b/ast-5.3-1/cmpregion.c
deleted file mode 100644
index a46e93d..0000000
--- a/ast-5.3-1/cmpregion.c
+++ /dev/null
@@ -1,4829 +0,0 @@
-/*
-*class++
-*  Name:
-*     CmpRegion
-
-*  Purpose:
-*     A combination of two regions within a single Frame
-
-*  Constructor Function:
-c     astCmpRegion
-f     AST_CMPREGION
-
-*  Description:
-*     A CmpRegion is a Region which allows two component
-*     Regions (of any class) to be combined to form a more complex 
-*     Region. This combination may be performed a boolean AND, OR 
-*     or XOR (exclusive OR) operator. If the AND operator is 
-*     used, then a position is inside the CmpRegion only if it is 
-*     inside both of its two component Regions. If the OR operator is 
-*     used, then a position is inside the CmpRegion if it is inside 
-*     either (or both) of its two component Regions. If the XOR operator 
-*     is used, then a position is inside the CmpRegion if it is inside 
-*     one but not both of its two component Regions. Other operators can
-*     be formed by negating one or both component Regions before using 
-*     them to construct a new CmpRegion.
-*
-*     The two component Region need not refer to the same coordinate
-*     Frame, but it must be possible for the 
-c     astConvert 
-f     AST_CONVERT 
-*     function to determine a Mapping between them (an error will be
-*     reported otherwise when the CmpRegion is created). For instance,
-*     a CmpRegion may combine a Region defined within an ICRS SkyFrame
-*     with a Region defined within a Galactic SkyFrame. This is
-*     acceptable because the SkyFrame class knows how to convert between
-*     these two systems, and consequently the 
-c     astConvert 
-f     AST_CONVERT 
-*     function will also be able to convert between them. In such cases,
-*     the second component Region will be mapped into the coordinate Frame
-*     of the first component Region, and the Frame represented by the 
-*     CmpRegion as a whole will be the Frame of the first component Region.
-*
-*     Since a CmpRegion is itself a Region, it can be used as a
-*     component in forming further CmpRegions. Regions of arbitrary
-*     complexity may be built from simple individual Regions in this
-*     way.
-
-*  Inheritance:
-*     The CmpRegion class inherits from the Region class.
-
-*  Attributes:
-*     The CmpRegion class does not define any new attributes beyond those
-*     which are applicable to all Regions.
-
-*  Functions:
-c     The CmpRegion class does not define any new functions beyond those
-f     The CmpRegion class does not define any new routines beyond those
-*     which are applicable to all Regions.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     7-OCT-2004 (DSB):
-*        Original version.
-*     28-MAY-2007 (DSB):
-*        - Corrected RegBaseMesh.
-*        - In RegBaseBox, if the CmpRegion is bounded find the box by
-*        finding the extreme position sin a mesh covering the boundary.
-*     20-JAN-2009 (DSB):
-*        Over-ride astRegBasePick.
-*     19-MAR-2009 (DSB):
-*        Over-ride the astDecompose method.
-*     8-SEP-2009 (DSB):
-*        Fix logic in RegTrace.
-*     9-SEP-2009 (DSB):
-*        - Added astCmpRegionList
-*        - Added support for XOR 
-*        - Override astGetObjSize.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS CmpRegion
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "nullregion.h"          /* Boundless Regions */
-#include "cmpregion.h"           /* Interface definition for this class */
-#include "unitmap.h"             /* Unit Mapings */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *(* parent_getdefunc)( AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_setmeshsize)( AstRegion *, int, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_clearmeshsize)( AstRegion *, int * );
-static double (*parent_getfillfactor)( AstRegion *, int * );
-static void (*parent_regsetattrib)( AstRegion *, const char *, char **, int * );
-static void (*parent_regclearattrib)( AstRegion *, const char *, char **, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(CmpRegion)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(CmpRegion,Class_Init)
-#define class_vtab astGLOBAL(CmpRegion,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstCmpRegionVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstCmpRegion *astCmpRegionId_( void *, void *, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *MatchRegion( AstRegion *, int, AstRegion *, const char *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static double GetFillFactor( AstRegion *, int * );
-static int CmpRegionList( AstCmpRegion *, int *, AstRegion ***, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetBounded( AstRegion *, int * );
-static int GetObjSize( AstObject *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void ClearClosed( AstRegion *, int * );
-static void ClearMeshSize( AstRegion *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegions( AstCmpRegion *, AstRegion **, AstRegion **, int *, int *, int *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegBaseBox2( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetBreakInfo( AstCmpRegion *, int, int * );
-static void SetClosed( AstRegion *, int, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void XORCheck( AstCmpRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-int CmpRegionList( AstCmpRegion *this, int *nreg, AstRegion ***reg_list, 
-                   int *status ) {
-/*
-*+
-*  Name:
-*     astCmpRegionList
-
-*  Purpose:
-*     Decompose a CmpRegion into a sequence of simpler Regions.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     int astCmpRegionList( AstCmpRegion *this, int *nreg, 
-*                           AstRegion ***reg_list, int *status )
-
-*  Class Membership:
-*     CmpRegion method.
-
-*  Description:
-*     This function decomposes a CmpRegion into a sequence of simpler 
-*     Regions which may be applied in sequence to achieve the same 
-*     effect. 
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion to be decomposed (the CmpRegion is not
-*        actually modified by this function).
-*     nreg 
-*        The address of an int which holds a count of the number of
-*        individual Regions in the decomposition. On entry, this
-*        should count the number of Regions already in the
-*        "*reg_list" array (below). On exit, it is updated to include
-*        any new Regions appended by this function.
-*     reg_list
-*        Address of a pointer to an array of Region pointers. On
-*        entry, this array pointer should either be NULL (if no
-*        Regions have yet been obtained) or should point at a
-*        dynamically allocated array containing Region pointers
-*        ("*nreg" in number) which have been obtained from a previous
-*        invocation of this function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Region pointers that result from the decomposition
-*        requested. These pointers will be appended to any previously
-*        present, and the array pointer will be updated as necessary
-*        to refer to the enlarged array (any space released by the
-*        original array will be freed automatically).
-*
-*        The new Region pointers returned will identify a sequence of
-*        Region which, when applied in order, will represent an area
-*        equivalent to that of the original Region. 
-*
-*        All the Region pointers returned by this function should be
-*        annulled by the caller, using astAnnul, when no longer
-*        required. The dynamic array holding these pointers should
-*        also be freed, using astFree.
-
-*  Returned Value:
-*     An integer identifying the boolean operation that should be used to
-*     combine the Regions returned in "reg_list". This will be AST__AND
-*     or AST__OR.
-
-*- 
-*/
-
-/* Local Variables: */
-   AstCmpRegion *cmpreg;
-   int add;
-   int result;
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__AND;
-
-/* Check if this CmpRegion has an equivalent XOR representation. Is so,
-   store details of the XOR representation in the CmpRegion. */
-   XORCheck( this, status );
-
-/* The CmpRegion class only has full support for AND and OR operators.
-   However, it can also represent XOR operators, but it does this by 
-   an equivalent set of AND and OR operators. When an XOR CmpRegion is
-   created, the original supplied argument regions are stored in
-   "this->xor1" and "this->xor2", and the component Regions placed in the 
-   new CmpRegion are actually CmpRegions that implement the equivalent
-   of an XOR operation, using AND and OR operators. We want to hide this
-   to the outside world, so if the supplied CmpRegion represents an XOR 
-   operation, add the XOR regions to the returned list, and return an 
-   XOR operator. */
-   if( this->xor1 ) {
-      *reg_list = astGrow( *reg_list, *nreg + 2, sizeof( AstRegion * ) );
-      if( astOK ) {
-         ( *reg_list )[ (*nreg)++ ] = astClone( this->xor1 );
-         ( *reg_list )[ (*nreg)++ ] = astClone( this->xor2 );
-      }
-      result = AST__XOR;
-
-/* For AND and OR operators, we deal with the component Regions directly. */
-   } else {
-
-/* If the first component of the supplied CmpRegion is itself a CmpRegion
-   that uses the same boolean operator as "this", call this function 
-   recursively to add its component Regions to the returned list. */
-      add = 1;
-      if( astIsACmpRegion( this->region1 ) ) {
-         cmpreg = (AstCmpRegion *) this->region1;
-         if( cmpreg->oper == this->oper ) {
-            (void) CmpRegionList( cmpreg, nreg, reg_list, status );
-            add = 0;
-         } 
-      }
-
-/* Otherwise, add the component Region directly into the returned list of 
-   Regions. */
-      if( add ) {
-         *reg_list = astGrow( *reg_list, *nreg + 1, sizeof( AstRegion * ) );
-         if( astOK ) {
-            ( *reg_list )[ *nreg ] = astClone( this->region1 );
-            ( *nreg )++;
-         }
-      }
-
-/* Do the same for the second component region */
-      add = 1;
-      if( astIsACmpRegion( this->region2 ) ) {
-         cmpreg = (AstCmpRegion *) this->region2;
-         if( cmpreg->oper == this->oper ) {
-            (void) CmpRegionList( cmpreg, nreg, reg_list, status );
-            add = 0;
-         } 
-      }
-   
-      if( add ) {
-         *reg_list = astGrow( *reg_list, *nreg + 1, sizeof( AstRegion * ) );
-         if( astOK ) {
-            ( *reg_list )[ *nreg ] = astClone( this->region2 );
-            ( *nreg )++;
-         }
-      }
-
-      result = this->oper;
-   }
-
-/* Return the boolean operator used to combine the regions in the
-   returned array. */
-   return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1, 
-                       AstMapping **map2, int *series, int *invert1, 
-                       int *invert2, int *status ) {
-/*
-*
-*  Name:
-*     Decompose
-
-*  Purpose:
-*     Decompose a CmpRegion into two component Regions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void Decompose( AstMapping *this, AstMapping **map1, 
-*                     AstMapping **map2, int *series,
-*                     int *invert1, int *invert2, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the protected astDecompose
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns pointers to two Mappings which, when applied
-*     either in series or parallel, are equivalent to the supplied Mapping.
-*
-*     Since the Frame class inherits from the Mapping class, Frames can
-*     be considered as special types of Mappings and so this method can
-*     be used to decompose either CmpMaps, CmpFrames, CmpRegions or Prisms.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     map1
-*        Address of a location to receive a pointer to first component
-*        Mapping. 
-*     map2
-*        Address of a location to receive a pointer to second component
-*        Mapping. 
-*     series
-*        Address of a location to receive a value indicating if the
-*        component Mappings are applied in series or parallel. A non-zero
-*        value means that the supplied Mapping is equivalent to applying map1 
-*        followed by map2 in series. A zero value means that the supplied
-*        Mapping is equivalent to applying map1 to the lower numbered axes
-*        and map2 to the higher numbered axes, in parallel.
-*     invert1
-*        The value of the Invert attribute to be used with map1. 
-*     invert2
-*        The value of the Invert attribute to be used with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the component rames using the returned
-*     pointers will be reflected in the supplied CmpFrame.
-
-*-
-*/
-
-
-/* Local Variables: */
-   AstCmpRegion *this;              /* Pointer to CmpRegion structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstCmpRegion *) this_mapping;
-
-/* The components Frames of a CmpRegion are considered to be series
-   Mappings. */
-   if( series ) *series = 1;
-
-/* The Frames are returned in their original order whether or not the
-   CmpRegion has been inverted. */
-   if( map1 ) *map1 = astClone( this->region1 );
-   if( map2 ) *map2 = astClone( this->region2 );
-
-/* The invert flags dont mean anything for a Region, but we return them
-   anyway. If the CmpRegion has been inverted, return inverted Invert flags. */
-   if( astGetInvert( this ) ) {
-      if( invert1 ) *invert1 = astGetInvert( this->region1 ) ? 0 : 1;
-      if( invert2 ) *invert2 = astGetInvert( this->region2 ) ? 0 : 1;
-
-/* If the CmpRegion has not been inverted, return the current Invert flags. */
-   } else {
-      if( invert1 ) *invert1 = astGetInvert( this->region1 );
-      if( invert2 ) *invert2 = astGetInvert( this->region2 );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Objects are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     int Equal( AstObject *this_object, AstObject *that_object, int *status ) 
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astEqual protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two CmpRegions are equivalent. 
-
-*  Parameters:
-*     this
-*        Pointer to the first CmpRegion.
-*     that
-*        Pointer to the second CmpRegion.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the CmpRegions are equivalent, zero otherwise.
-
-*  Notes:
-*     - The CmpRegions are equivalent if their component Regions are
-*     equivalent and if they have the same boolean operation, negation
-*     and closed flags.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *that;              
-   AstCmpRegion *this;              
-   int result;                   
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Region class. This checks
-   that the Objects are both of the same class, and have the same Negated
-   and Closed flags (amongst other things). */
-   if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two CmpRegion structures. */
-      this = (AstCmpRegion *) this_object;
-      that = (AstCmpRegion *) that_object;
-
-/* Test their first component Regions for equality. */
-      if( astEqual( this->region1, that->region1 ) ) {
-
-/* Test their second component Regions for equality. */
-         if( astEqual( this->region2, that->region2 ) ) {
-
-/* Test their boolean operator for equality. */
-            if( this->oper == that->oper ) result = 1;
-         }
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Define a function to set an attribute value for a CmpRegion.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     MAKE_SET(attribute,lattribute,type)
-
-*  Class Membership:
-*     Defined by the CmpRegion class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstRegion *this, <Type> value )
-*
-*     that sets the value of a specified Region attribute in the parent
-*     Region structure and also in the component Regions.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     lattribute
-*        Name of the attribute, all in lower case.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,lattribute,type) \
-static void Set##attribute( AstRegion *this_region, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstCmpRegion *this;         /* Pointer to the CmpRegion structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Use the parent method to set the value in the parent Region structure. */ \
-   (*parent_set##lattribute)( this_region, value, status ); \
-\
-/* Also set the value in the two component Regions. */ \
-   this = (AstCmpRegion *) this_region; \
-   astSet##attribute( this->region1, value ); \
-   astSet##attribute( this->region2, value ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed attributes. */
-MAKE_SET(MeshSize,meshsize,int)
-MAKE_SET(Closed,closed,int)
-
-/* Undefine the macro. */
-#undef MAKE_SET
-
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Define a function to clear an attribute value for a CmpRegion.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     MAKE_CLEAR(attribute,lattribute)
-
-*  Class Membership:
-*     Defined by the CmpRegion class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstRegion *this )
-*
-*     that sets the value of a specified Region attribute in the parent
-*     Region structure and also in the component Regions.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     lattribute
-*        Name of the attribute, all in lower case.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute,lattribute) \
-static void Clear##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
-   AstCmpRegion *this;         /* Pointer to the CmpRegion structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Use the parent method to clear the value in the parent Region structure. */ \
-   (*parent_clear##lattribute)( this_region, status ); \
-\
-/* Also clear the value in the two component Regions. */ \
-   this = (AstCmpRegion *) this_region; \
-   astClear##attribute( this->region1 ); \
-   astClear##attribute( this->region2 ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed attributes. */
-MAKE_CLEAR(MeshSize,meshsize)
-MAKE_CLEAR(Closed,closed)
-
-/* Undefine the macro. */
-#undef MAKE_CLEAR
-
-static int GetBounded( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetBounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     int GetBounded( AstRegion *this, int *status ) 
-
-*  Class Membership:
-*     CmpRegion method (over-rides the astGetBounded method inherited from
-*     the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the Region is bounded.
-*     The implementation provided by the base Region class is suitable
-*     for Region sub-classes representing the inside of a single closed 
-*     curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-*     CmpRegion, PointList, etc ) may need to provide their own
-*     implementations.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;        /* Pointer to CmpRegion structure */
-   AstRegion *reg1;           /* Pointer to first component Region */
-   AstRegion *reg2;           /* Pointer to second component Region */
-   int neg1;                  /* Negated flag to use with first component */
-   int neg1_old;              /* Original Negated flag for first component */
-   int neg2;                  /* Negated flag to use with second component */
-   int neg2_old;              /* Original Negated flag for second component */
-   int oper;                  /* Combination operator */
-   int overlap;               /* Nature of overlap between components */
-   int reg1b;                 /* Is the first component Region bounded?*/
-   int reg2b;                 /* Is the second component Region bounded?*/
-   int result;                /* Returned result */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;   
-
-/* Get the component Regions, how they should be combined, and the
-   Negated values which should be used with them. The returned values
-   take account of whether the supplied CmpRegion has itself been Negated 
-   or not. The returned Regions represent regions within the base Frame 
-   of the FrameSet encapsulated by the parent Region structure. */
-   GetRegions( this, &reg1, &reg2, &oper, &neg1, &neg2, status );
-
-/* Temporarily set their Negated attributes to the required values.*/
-   neg1_old = astGetNegated( reg1 );
-   neg2_old = astGetNegated( reg2 );
-   astSetNegated( reg1, neg1 );
-   astSetNegated( reg2, neg2 );
-
-/* See if either of the component Regions is bounded. */
-   reg1b = astGetBounded( reg1 );
-   reg2b = astGetBounded( reg2 );
-
-/* If the regions are ANDed... */
-   if( oper == AST__AND ) {
-
-/* If either one of the two components are bounded, then the AND region is
-   bounded. */
-      if( reg1b || reg2b ) {
-         result = 1;
-
-/* If neither of the two components is bounded, then the AND region is 
-   unbounded if there is partial or no overlap between them and is bounded
-   otherwise. */
-      } else {
-         overlap = astOverlap( reg1, reg2 );
-         if( overlap == 1 || overlap == 4 || overlap == 6 ) {
-            result = 0;
-         } else {
-            result = 1;
-         }
-      }
-
-/* If the regions are ORed... */
-   } else {
-
-/* If either one of the two components is unbounded, then the OR region is
-   unbounded. */
-      if( !reg1b || !reg2b ) {
-         result = 0;
-
-/* If both of the two components are bounded, then the OR region is also
-   bounded. */
-      } else {
-         result = 1;
-      }
-   }
-
-/* Re-instate the original values for the Negated attributes of the two
-   component Regions. */
-   if( reg1 ) astSetNegated( reg1, neg1_old );
-   if( reg2 ) astSetNegated( reg2, neg2_old );
-   
-/* Free resources. */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-
-/* Return zero if an error occurred. */
-   if( !astOK ) result = 0;
-
-/* Return the required pointer. */
-   return result;
-}
-
-static double GetFillFactor( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetFillFactor
-
-*  Purpose:
-*     Obtain the value of the FillFactor attribute for a CmpRegion.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     double GetFillFactor( AstRegion *this, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astGetFillFactor method inherited
-*     from the Region class).
-
-*  Description:
-*     This function returns the value of the FillFactor attribute for a
-*     CmpRegion.  A suitable default value is returned if no value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The FillFactor value to use.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;
-   double result; 
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Obtain a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;
-
-/* See if a FillFactor value has been set. If so, use the parent
-   astGetFillFactor  method to obtain it. */
-   if ( astTestFillFactor( this ) ) {
-      result = (*parent_getfillfactor)( this_region, status );
-
-/* Otherwise, we will generate a default value equal to the FillFactor values 
-   of the first component Region. */
-   } else {
-      result = astGetFillFactor( this->region1 );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied CmpRegion,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;        /* Pointer to CmpRegion structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by this class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->region1 );
-   result += astGetObjSize( this->region2 );
-   if( this->xor1 ) result += astGetObjSize( this->xor1 );
-   if( this->xor2 ) result += astGetObjSize( this->xor2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void GetRegions( AstCmpRegion *this, AstRegion **reg1, AstRegion **reg2,
-                        int *oper, int *neg1, int *neg2, int *status ) {
-/*
-*
-*  Name:
-*     GetRegions
-
-*  Purpose:
-*     Get the component Regions of a CmpRegion.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void GetRegions( AstCmpRegion *this, AstRegion **reg1, AstRegion **reg2,
-*                      int *oper, int *neg1, int *neg2, int *status )
-
-*  Class Membership:
-*     CmpRegion member function 
-
-*  Description:
-*     This function returns pointers to two Regions which, when applied
-*     using the returned boolean operator, are equivalent to the supplied 
-*     Region. If the CmpRegion has been negated, then the returned operator 
-*     and "negated" flags will be set such that they represent the
-*     negated CmpRegion.
-*
-*     The current Frames in both the returned component Regions will be 
-*     equivalent to the base Frame in the FrameSet encapsulated by the 
-*     parent Region structure.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion.
-*     reg1
-*        Address of a location to receive a pointer to first component
-*        Region. The current Frame in this region will be equivalent to
-*        the base Frame in the FrameSet 
-*     reg2
-*        Address of a location to receive a pointer to second component
-*        Region.
-*     oper
-*        Address of a location to receive a value indicating how the
-*        component Regions are combined together. This will be one of
-*        AST__AND or AST__OR
-*     neg1
-*        The value of the Negated attribute to be used with reg1. 
-*     neg2
-*        The value of the Negated attribute to be used with reg2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the component Regions using the returned
-*     pointers will be reflected in the supplied CmpRegion.
-
-*-
-*/
-
-/* Initialise */
-   if( reg1 ) *reg1 = NULL;
-   if( reg2 ) *reg2 = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Return the component Region pointers. */
-   if( reg1 ) *reg1 = astClone( this->region1 );
-   if( reg2 ) *reg2 = astClone( this->region2 );
-
-/* Initialise the other returned items. Note, the CmpRegion initialiser
-   stored a deep copy of the supplied component Regions, and so we do not
-   need to worry about attributes of the components having been changed 
-   after the creation of the CmpRegion. This is different to the CmpMap
-   class which merely clones its supplied component pointers and so has
-   to save copies of the original Invert settings within the CmpMap
-   structure. */
-   if( oper ) *oper = this->oper;
-   if( neg1 ) *neg1 = astGetNegated( this->region1 );
-   if( neg2 ) *neg2 = astGetNegated( this->region2 );
-
-/* If the CmpRegion has been inverted, we modify the boolean operator and
-   negation flags so that they reflect the inverted CmpRegion. */
-   if( astGetNegated( this ) ) {
-
-/* If the component Regions are combined using AND, then the negated 
-   CmpRegion combines its negated components using  OR. */
-      if( this->oper == AST__AND ){
-         if( oper ) *oper = AST__OR;
-         if( neg1 ) *neg1 = *neg1 ? 0 : 1;
-         if( neg2 ) *neg2 = *neg2 ? 0 : 1;
-
-/* If the component Regions are combined using OR, then the negated CmpRegion
-   combines its negated components using  AND. */
-      } else if( this->oper == AST__OR ){
-         if( oper ) *oper = AST__AND;
-         if( neg1 ) *neg1 = *neg1 ? 0 : 1;
-         if( neg2 ) *neg2 = *neg2 ? 0 : 1;
-
-      } else if( astOK ) {
-         astError( AST__INTER, "GetRegions(%s): The %s refers to an unknown "
-                   "boolean operator with identifier %d (internal AST "
-                   "programming error).", status, astGetClass( this ), 
-                   astGetClass( this ), this->oper );
-      }
-   }
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetDefUnc
-
-*  Purpose:
-*     Obtain a pointer to the default uncertainty Region for a given Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstRegion *GetDefUnc( AstRegion *this ) 
-
-*  Class Membership:
-*     CmpRegion method (over-rides the astGetDefUnc method inherited from
-*     the Region class).
-
-*     This function returns a pointer to a Region which represents the
-*     default uncertainty associated with a position on the boundary of the 
-*     given  Region. The returned Region refers to the base Frame within the 
-*     FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;        /* Pointer to CmpRegion structure */
-   AstRegion *result;         /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;   
-
-/* If the first component region has non-default uncertainty, use it as
-   the default uncertainty for the CmpRegion. Note, the current Frame of
-   an uncertainty Region is assumed to be the same as the base Frame in the 
-   CmpRegion. */
-   if( astTestUnc( this->region1 ) ) {
-      result = astGetUncFrm( this->region1, AST__CURRENT );
-
-/* Otherwise, if the second component region has non-default uncertainty, 
-   use it as the default uncertainty for the CmpRegion. */
-   } else if( astTestUnc( this->region2 ) ) {
-      result = astGetUncFrm( this->region2, AST__CURRENT );
-
-/* Otherwise, use the parent method to determine the default uncertainty. */ 
-   } else {
-      result = (* parent_getdefunc)( this_region, status );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-void astInitCmpRegionVtab_(  AstCmpRegionVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCmpRegionVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a CmpRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void astInitCmpRegionVtab( AstCmpRegionVtab *vtab, const char *name )
-
-*  Class Membership:
-*     CmpRegion vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the CmpRegion class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsACmpRegion) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-   vtab->CmpRegionList = CmpRegionList;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_getdefunc = region->GetDefUnc;
-   region->GetDefUnc = GetDefUnc;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_resetcache = region->ResetCache;
-   region->ResetCache = ResetCache;
-
-   parent_equal = object->Equal;
-   object->Equal = Equal;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_clearclosed = region->ClearClosed;
-   region->ClearClosed = ClearClosed;
-
-   parent_clearmeshsize = region->ClearMeshSize;
-   region->ClearMeshSize = ClearMeshSize;
-
-   parent_setclosed = region->SetClosed;
-   region->SetClosed = SetClosed;
-
-   parent_setmeshsize = region->SetMeshSize;
-   region->SetMeshSize = SetMeshSize;
-
-   parent_getfillfactor = region->GetFillFactor;
-   region->GetFillFactor = GetFillFactor;
-
-   parent_regsetattrib = region->RegSetAttrib;
-   region->RegSetAttrib = RegSetAttrib;
-
-   parent_regclearattrib = region->RegClearAttrib;
-   region->RegClearAttrib = RegClearAttrib;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping->Decompose = Decompose;
-   region->RegBaseBox = RegBaseBox;
-   region->RegBaseBox2 = RegBaseBox2;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegPins = RegPins;
-   region->RegTrace = RegTrace;
-   region->GetBounded = GetBounded;
-   region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "CmpRegion", "Combination of two Regions" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;       /* Pointer to CmpRegion structure */
-   int result;               /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->region1, mode, extra, fail );
-   if( !result ) result = astManageLock( this->region2, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static AstRegion *MatchRegion( AstRegion *this, int ifrm, AstRegion *that,
-                               const char *method, int *status ) {
-/*
-*  Name:
-*     MatchRegion
-
-*  Purpose:
-*     Map a Region into the Frame of another Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstRegion *MatchRegion( AstRegion *this, int ifrm, AstRegion *that,
-*                             const char *method, int *status )
-
-*  Class Membership:
-*     CmpRegion method.
-
-*  Description:
-*     This function returns a pointer to a new Region which is a copy of
-*     "that" mapped into either the base or current Frame of "this".
-
-*  Parameters:
-*     this
-*        Pointer to a Region defining the Frame of the returned Region.
-*     ifrm
-*        The index of a Frame within the FrameSet encapsulated by "this".
-*        The returned Region will refer to the requested Frame. It should
-*        be either AST__CURRENT or AST__BASE.
-*     that
-*        Pointer to a Region defining the shape and extent of the
-*        returned Region.
-*     method
-*        Pointer to a string holding the calling method.This is only used
-*        in error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a new Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;             /* Current Frame from "fs" */
-   AstFrameSet *fs;           /* FrameSet connecting that to this */
-   AstMapping *map;           /* Base->Current Mapping from "fs" */
-   AstRegion *result;         /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. Also return NULL if no Regions were
-   supplied. */
-   if ( !astOK || !this || !that ) return result;
-
-/* Temporarily invert "this" if we are matching its base Frame (since the 
-   astConvert method matches current Frames). */
-   if( ifrm == AST__BASE ) astInvert( this );
-
-/* Find a FrameSet connecting the current Frames of the two Regions */
-   fs = astConvert( that, this, "" );
-
-/* Re-instate the original Frame indices in "this" if required. */
-   if( ifrm == AST__BASE ) astInvert( this );
-
-/* Check a conversion path was found. */
-   if( fs ) {
-
-/* Get the Frame and Mapping form the FrameSet. */
-      frm = astGetFrame( fs, AST__CURRENT );
-      map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Re-map the Region. */
-      result = astMapRegion( that, map, frm );
-
-/* Free resources. */
-      frm = astAnnul( frm );  
-      map = astAnnul( map );  
-      fs = astAnnul( fs );  
-
-/* Report an error if there is no conversion between the two Frames. */
-   } else {
-      astError( AST__INTER, "%s(%s): MatchRegion cannot convert between "
-                "the two supplied coordinate Frames (internal AST "
-                "programming error).", status, method, astGetClass( this ) );
-   }
-
-/* Annul the returned pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;          /* Pointer to CmpRegion structure */
-   AstPointSet *ps;             /* Mesh pointset */
-   AstRegion *reg1;             /* Pointer to first component Region */
-   AstRegion *reg2;             /* Pointer to second component Region */
-   double **ptr;                /* Pointer to mesh data */
-   double *clbnd1;              /* Point to 1st comp lower bounds array */
-   double *clbnd2;              /* Point to 2nd comp lower bounds array */
-   double *cubnd1;              /* Point to 1st comp upper bounds array */
-   double *cubnd2;              /* Point to 2nd comp upper bounds array */
-   double *p;                   /* Pointer to next coordinate value */
-   double lb;                   /* Lower limit */
-   double ub;                   /* Upper limit */
-   int i;                       /* Axis index */
-   int icoord;                  /* Coordinate index */
-   int inc1;                    /* First component interval is included? */
-   int inc2;                    /* Second component interval is included? */
-   int ipoint;                  /* Point index */
-   int nax;                     /* Number of axes in Frame */
-   int ncoord;                  /* Number of coords */
-   int neg1;                    /* First component negated? */
-   int neg2;                    /* Second component negated? */
-   int npoint;                  /* Number of points */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure */
-   this = (AstCmpRegion *) this_region;
-
-/* If the CmpRegion is bounded, we find the bounding box using a mesh of
-   points spread evenly over the boundary of the CmpRegion. */
-   if( astGetBounded( this ) ) {
-      ps = astRegBaseMesh( this_region );
-      ptr = astGetPoints( ps );
-      ncoord = astGetNcoord( ps );
-      npoint = astGetNpoint( ps );
-
-      if( astOK ) {
-         for( icoord = 0; icoord < ncoord; icoord++ ) {
-            lbnd[ icoord ] = DBL_MAX;
-            ubnd[ icoord ] = -DBL_MAX;
-            p = ptr[ icoord ];
-            for( ipoint = 0; ipoint < npoint; ipoint++, p++ ) {
-               if( *p != AST__BAD ) {
-                  if( *p < lbnd[ icoord ] )  lbnd[ icoord ] = *p;
-                  if( *p > ubnd[ icoord ] )  ubnd[ icoord ] = *p;
-               }   
-            }   
-         }
-      }
-      ps = astAnnul( ps );
-
-/* If the CmpRegion is not bounded we look at each axis individually. */
-   } else {
-
-/* Get pointers to the component Regions. */
-      reg1 = this->region1;
-      reg2 = this->region2;
-
-/* Get their negated flags */
-      neg1 = astGetNegated( reg1 );
-      neg2 = astGetNegated( reg2 );
-
-/* The base Frame of the parent Region structure is the current Frame of
-   the component Regions. Get the no. of axes in this Frame. */
-      nax = astGetNaxes( reg1 );
-
-/* Get the bounding boxes of the component Regions in this Frame. */
-      clbnd1 = astMalloc( sizeof( double )*(size_t) nax );
-      cubnd1 = astMalloc( sizeof( double )*(size_t) nax );
-      clbnd2 = astMalloc( sizeof( double )*(size_t) nax );
-      cubnd2 = astMalloc( sizeof( double )*(size_t) nax );
-      if( astOK ) {
-         astGetRegionBounds( reg1, clbnd1, cubnd1 ); 
-         astGetRegionBounds( reg2, clbnd2, cubnd2 ); 
-
-/* Loop round every axis. */
-         for( i = 0; i < nax; i++ ) {
-            double ub1, lb1;
-            double ub2, lb2;
-            lb1 = clbnd1[ i ];
-            ub1 = cubnd1[ i ];
-            lb2 = clbnd2[ i ];
-            ub2 = cubnd2[ i ];
-
-/* If the first component Region has been negated, the lower and upper
-   bounds from the first component are the bounds of an *excluded* axis 
-   interval, not an included interval. If either of the bounds are
-   infinite, we can swap it to an included interval. If both bounds are
-   finite, we cannot convert to an included interval. In this case, we
-   assume that the gap will be filled at some point on another axis, if
-   there is more than 1 axis, and convert it to an unbouded included
-   interval. */
-            inc1 = 1;
-            if( neg1 ) {
-               lb = clbnd1[ i ];
-               ub = cubnd1[ i ];
-               if( lb == -DBL_MAX ) clbnd1[ i ] = ub;
-               if( ub == DBL_MAX ) cubnd1[ i ] = lb;
-               if( lb != -DBL_MAX && ub != DBL_MAX ) {
-                  if( nax == 1 ) {
-                     inc1 = 0;
-                  } else {
-                     clbnd1[ i ] = -DBL_MAX;
-                     cubnd1[ i ] = DBL_MAX;
-                  }
-               }
-            }
-
-/* Likewise attempt to convert an excluded interval into an included
-   interval for the second component Region. */   
-            inc2 = 1;
-            if( neg2 ) {
-               lb = clbnd2[ i ];
-               ub = cubnd2[ i ];
-               if( lb == -DBL_MAX ) clbnd2[ i ] = ub;
-               if( ub == DBL_MAX ) cubnd2[ i ] = lb;
-               if( lb != -DBL_MAX && ub != DBL_MAX ) {
-                  if( nax == 1 ) {
-                     inc2 = 0;
-                  } else {
-                     clbnd2[ i ] = -DBL_MAX;
-                     cubnd2[ i ] = DBL_MAX;
-                  }
-               }
-            }
-
-/* If the component Regions are combined using AND, find the overlap of
-   the axis intervals. This depends on whether the intervals are included
-   or excluded. */
-            if( this->oper == AST__AND ) {
-   
-               if( inc1 ) {
-                  if( inc2 ) {
-                     lbnd[ i ] = MAX( clbnd1[ i ], clbnd2[ i ] );
-                     ubnd[ i ] = MIN( cubnd1[ i ], cubnd2[ i ] );
-                  } else {
-                     lbnd[ i ] = clbnd1[ i ] < clbnd2[ i ] ? clbnd1[ i ] : cubnd2[ i ];
-                     ubnd[ i ] = cubnd1[ i ] > cubnd2[ i ] ? cubnd1[ i ] : clbnd2[ i ];
-                  }
-               } else {
-                  if( inc2 ) {
-                     lbnd[ i ] = clbnd2[ i ] < clbnd1[ i ] ? clbnd2[ i ] : cubnd1[ i ];
-                     ubnd[ i ] = cubnd2[ i ] > cubnd1[ i ] ? cubnd2[ i ] : clbnd1[ i ];
-                  } else {
-                     lbnd[ i ] = clbnd1[ i ] < clbnd2[ i ] ? clbnd1[ i ] : cubnd2[ i ];
-                     ubnd[ i ] = cubnd1[ i ] > cubnd2[ i ] ? cubnd1[ i ] : clbnd2[ i ];
-                  }
-               }
-
-/* If the component Regions are not combined using AND, find the union of
-   the axis intervals. */
-            } else {
-               if( inc1 && inc2 ) {
-                  lbnd[ i ] = MIN( clbnd1[ i ], clbnd2[ i ] );
-                  ubnd[ i ] = MAX( cubnd1[ i ], cubnd2[ i ] );
-               } else {
-                  lbnd[ i ] = -DBL_MAX;
-                  ubnd[ i ] = DBL_MAX;
-               } 
-            }
-         }
-      }   
-
-/* Free resources. */
-      clbnd1 = astFree( clbnd1 );
-      cubnd1 = astFree( cubnd1 );
-      clbnd2 = astFree( clbnd2 );
-      cubnd2 = astFree( cubnd2 );
-   }
-}
-
-static void RegBaseBox2( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox2
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void RegBaseBox2( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astRegBaseBox2 protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function is similar to astRegBaseBox in that it returns the 
-*     upper and lower axis bounds of a Region in the base Frame of the 
-*     encapsulated FrameSet. But, in addition to assuming that the
-*     supplied Region has not been negated, it also assumes that any
-*     component Regions contained within the supplied Region have not been
-*     negated.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;          /* Pointer to CmpRegion structure */
-   AstRegion *reg1;             /* Pointer to first component Region */
-   AstRegion *reg2;             /* Pointer to second component Region */
-   double *clbnd1;              /* Point to 1st comp lower bounds array */
-   double *clbnd2;              /* Point to 2nd comp lower bounds array */
-   double *cubnd1;              /* Point to 1st comp upper bounds array */
-   double *cubnd2;              /* Point to 2nd comp upper bounds array */
-   int i;                       /* Axis index */
-   int nax;                     /* Number of axes in Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure */
-   this = (AstCmpRegion *) this_region;
-
-/* Get pointers to the component Regions. */
-   reg1 = this->region1;
-   reg2 = this->region2;
-
-/* The base Frame of the parent Region structure is the current Frame of
-   the component Regions. Get the no. of axes in this Frame. */
-   nax = astGetNaxes( reg1 );
-
-/* Get the bounding boxes of the component Regions in this Frame. */
-   clbnd1 = astMalloc( sizeof( double )*(size_t) nax );
-   cubnd1 = astMalloc( sizeof( double )*(size_t) nax );
-   clbnd2 = astMalloc( sizeof( double )*(size_t) nax );
-   cubnd2 = astMalloc( sizeof( double )*(size_t) nax );
-   if( astOK ) {
-      astGetRegionBounds2( reg1, clbnd1, cubnd1 ); 
-      astGetRegionBounds2( reg2, clbnd2, cubnd2 ); 
-
-/* How we combine the two bounding boxes depends on the boolean operator
-   associated with this CmpRegion.  For AND find the overlap of the two
-   bounding boxes. For other operators find the union. */
-      if( this->oper == AST__AND ) {
-         for( i = 0; i < nax; i++ ) {
-            lbnd[ i ]= MAX( clbnd1[ i ], clbnd2[ i ] );
-            ubnd[ i ]= MIN( cubnd1[ i ], cubnd2[ i ] );
-         }
-
-      } else {
-         for( i = 0; i < nax; i++ ) {
-            lbnd[ i ]= MIN( clbnd1[ i ], clbnd2[ i ] );
-            ubnd[ i ]= MAX( cubnd1[ i ], cubnd2[ i ] );
-         }
-      }
-   }   
-
-/* Free resources. */
-   clbnd1 = astFree( clbnd1 );
-   cubnd1 = astFree( cubnd1 );
-   clbnd2 = astFree( clbnd2 );
-   cubnd2 = astFree( cubnd2 );
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. Annul the pointer using astAnnul when it 
-*     is no longer needed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-
-/* Local Variables: */
-   AstCmpRegion *this;            /* The CmpRegion structure */
-   AstPointSet *mesh1;            /* PointSet holding mesh for 1st component */
-   AstPointSet *mesh1b;           /* Mesh for 1st component mapped by 2nd comp. */
-   AstPointSet *mesh2;            /* PointSet holding mesh for 2nd component */
-   AstPointSet *mesh2b;           /* Mesh for 2nd component mapped by 1st comp. */
-   AstPointSet *result;           /* Returned pointer */
-   AstRegion *reg1;               /* Pointer to first component Region */
-   AstRegion *reg2;               /* Pointer to second component Region */
-   double **ptr1;                 /* Pointer to array of mesh1b axis value pointers */
-   double **ptr2;                 /* Pointer to array of mesh2b axis value pointers */
-   double **ptr;                  /* Pointer to array of total axis value pointers */
-   double *lbnd;                  /* Pointer to array of bounding box lower bounds */
-   double *ubnd;                  /* Pointer to array of bounding box upper bounds */
-   double v;                      /* Axis value */
-   int hasMesh1;                  /* Does 1st component Region have a mesh? */
-   int hasMesh2;                  /* Does 2nd component Region have a mesh? */
-   int ic;                        /* Axis index */
-   int ip;                        /* Input point index */
-   int jp;                        /* Output point index */
-   int nc;                        /* No. of axis values per point */
-   int np1;                       /* No. of points in mesh1b */
-   int np2;                       /* No. of points in mesh2b */
-   int np;                        /* No. of points in returned PointSet */
-   int ok;                        /* Were all axis values good at this point? */
-
-/* Initialise */
-   result= NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this_region->basemesh ) {
-      result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Get pointers to the component regions. */
-      reg1 = this->region1;
-      reg2 = this->region2;
-
-/* A mesh can only be produced for a Region if it is bounded when either
-   negated or un-negated. See if meshes can be produced for the component
-   Regions. */
-      hasMesh1 = astGetBounded( reg1 );
-      if( !hasMesh1 ){
-         astNegate( reg1 );
-         hasMesh1 = astGetBounded( reg1 );
-         astNegate( reg1 );
-      }
-
-      hasMesh2 = astGetBounded( reg2 );
-      if( !hasMesh2 ){
-         astNegate( reg2 );
-         hasMesh2 = astGetBounded( reg2 );
-         astNegate( reg2 );
-      }
-
-/* If neither Region has a mesh we cannot produce a mesh. */
-      if( !hasMesh1 && !hasMesh2 && astOK ) {
-         astError( AST__INTER, "astRegBaseMesh(%s): No mesh can be "
-                   "produced for the %s bacause neither of its component "
-                   "Regions has a mesh (internal AST programming error).", status, 
-                   astGetClass( this ), astGetClass( this ) );
-
-/* If only one Region has a mesh, we can produce a mesh so long as the
-    boolean operator is not OR. */
-      } else if( ( !hasMesh1 || !hasMesh2 ) && this->oper == AST__OR && astOK ) {
-         astError( AST__INTER, "astRegBaseMesh(%s): No mesh can be produced "
-                   "for the %s bacause one its component Regions has no "
-                   "mesh and the union of the Regions is required (internal "
-                   "AST programming error).", status, astGetClass( this ), astGetClass( this ) );
-      }
-
-/* Allocate memory to hold a bounding box in the base Frame of the CmpRegion. */
-      nc = astGetNin( this_region->frameset );
-      lbnd = astMalloc( sizeof( double )*(size_t) nc );
-      ubnd = astMalloc( sizeof( double )*(size_t) nc );
-
-/* Get current Frame meshes covering the two component Regions (the current
-   Frame of the component Regions is the same as the base Frame of the parent
-   Region). We now know that at least one Region has a mesh. If the other
-   one does not have a mesh we may be able to create a mesh by taking the
-   intersection of the Region with the bounding box of the bounded Region. */
-      if( hasMesh1 ) {
-         mesh1 = astRegMesh( reg1 );
-         if( hasMesh2 ) {
-            mesh2 = astRegMesh( reg2 );
-         } else {            
-            astGetRegionBounds( reg1, lbnd, ubnd );
-            mesh2 = astBndMesh( reg2, lbnd, ubnd );
-         }
-
-      } else {
-         mesh2 = astRegMesh( reg2 );
-         astGetRegionBounds( reg2, lbnd, ubnd );
-         mesh1 = astBndMesh( reg1, lbnd, ubnd );
-      }
-
-/* If the CmpRegion represents the intersection of the two component Regions 
-   (AND operator), the total mesh is the sum of the component mesh points 
-   which are inside the other component region. If the CmpRegion represents 
-   the union of the two component Regions (OR operator), the total mesh is 
-   the sum of the component mesh points which are outside the other component 
-   region. So temporarily negate the component Regions if they are
-   combined using OR. */
-      if( this->oper == AST__OR ) {
-         astNegate( reg1 );
-         astNegate( reg2 );
-      }
-
-/* Transform the mesh for the first component using the second component
-   as a Mapping. Mesh points outside (or inside if "oper" is OR) the bounds 
-   of the second component will be set bad. */
-      mesh1b = astTransform( reg2, mesh1, 1, NULL );
-
-/* Transform the mesh for the second component using the first component
-   as a Mapping. Mesh points outside (or inside if "oper" is OR) the bounds 
-   of the first component will be set bad. */
-      mesh2b = astTransform( reg1, mesh2, 1, NULL );
-
-/* If required, negate them again to bring them back to their original state.*/
-      if( this->oper == AST__OR ) {
-         astNegate( reg1 );
-         astNegate( reg2 );
-      }
-
-/* The required mesh contains all the good points form both mesh1b and
-   mesh2b (i.e. all boundary points which are inside -or inside if "oper"
-   is OR- the other component Region). Create a PointSet assuming that all 
-   points are good. First allocate an array to hold pointers to the arrays 
-   holding coordinate values for each axis. */
-      nc = astGetNcoord( mesh1b );
-      np1 = astGetNpoint( mesh1b );
-      np2 = astGetNpoint( mesh2b );
-      np = np1 + np2;
-      result = astPointSet( np, nc, "", status );
-      ptr = astGetPoints( result );
-
-/* Get points to the axis values of the mapped meshes. */
-      ptr1 = astGetPoints( mesh1b );
-      ptr2 = astGetPoints( mesh2b );
-
-/* Check pointers can be used safely. */
-      if( astOK ) {
-
-/* Initialise the index of the next point in the total mesh. */
-         jp = 0;
-
-/* Loop round all the points in the transformed mesh for the first
-   component. */
-         for( ip = 0; ip < np1; ip++ ) {
-
-/* Assume this point has good axis values */
-            ok = 1;
-
-/* Copy the axis values into the total mesh. Break if a bad axis value is
-   found. */
-            for( ic = 0; ic < nc; ic++ ) {
-               v = ptr1[ ic ][ ip ];
-               if( v != AST__BAD ) {
-                  ptr[ ic ][ jp ] = v;
-               } else {
-                  ok = 0;
-                  break;      
-               }
-            }
-
-/* If no bad axis values were found, increment the index of the next
-   point in the total mesh. */
-            if( ok ) jp++;
-         }
-
-/* Now similarly copy the good values from the second transformed mesh onto 
-   the end of the total mesh array. */
-         for( ip = 0; ip < np2; ip++ ) {
-            ok = 1;
-            for( ic = 0; ic < nc; ic++ ) {
-               v = ptr2[ ic ][ ip ];
-               if( v != AST__BAD ) {
-                  ptr[ ic ][ jp ] = v;
-               } else {
-                  ok = 0;
-                  break;      
-               }
-            }
-            if( ok ) jp++;
-         }
-
-/* If the total mesh contains no good points, we will create a PointSet
-   holding a single bad position. */
-         if( jp == 0 ) {
-            np = 1;
-            for( ic = 0; ic < nc; ic++ ) ptr[ ic ][ 0 ] = AST__BAD;
-         } else {
-            np = jp;
-         }
-
-/* Adjust the size of the returned PointSet to exclude the extra space 
-   caused by any axis values being bad in the transformed meshes. */
-         astSetNpoint( result, np );
-
-      }
-
-/* Free resources. */
-      mesh1 = astAnnul( mesh1 );
-      mesh2 = astAnnul( mesh2 );
-      mesh1b = astAnnul( mesh1b );
-      mesh2b = astAnnul( mesh2b );
-      lbnd = astFree( lbnd );
-      ubnd = astFree( ubnd );
-
-/* Save the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-      if( astOK && result ) this_region->basemesh = astClone( result );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, 
-                               const int *axes, int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;     /* Pointer to CmpRegion structure */
-   AstFrame *frm1;         /* Axes picked from the 1st encapsulated Region */
-   AstFrame *frm2;         /* Axes picked from the 2nd encapsulated Region */
-   AstRegion *result;      /* Returned Region */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion information. */
-   this = (AstCmpRegion *) this_region;
-
-/* Both encapsulated regions refer to the same Frame (the base Frame of
-   the parent Region), so attempt to pick the requested axs from them. 
-   If the resulting Frames are not Regions, we cannot pick the requested
-   axes so return the NULL Frame pointer initialised above. */
-   frm1 = astPickAxes( this->region1, naxes, axes, NULL );
-   if( astIsARegion( frm1 ) ) {
-      frm2 = astPickAxes( this->region2, naxes, axes, NULL );
-      if( astIsARegion( frm2 ) ) {
-
-/* Create the new CmpRegion. */
-         result = (AstRegion *) astCmpRegion( (AstRegion *) frm1, 
-                                              (AstRegion *) frm2, 
-                                              this->oper, "", status );
-      }
-
-/* Free resources */
-      frm2 = astAnnul( frm2 );      
-   }
-   frm1 = astAnnul( frm1 );      
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given CmpRegion.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given CmpRegion. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied CmpRegion "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstCmpRegion *this;          /* Pointer to the CmpRegion structure. */
-   AstPointSet *pset1;          /* Points masked by 1st component Region */
-   AstPointSet *pset2;          /* Points masked by 2nd component Region */
-   AstPointSet *psetb1;         /* Points in base Frame of 1st component Region */
-   AstPointSet *psetb2;         /* Points in base Frame of 2nd component Region */
-   AstRegion *reg1;             /* Pointer to first component Region */
-   AstRegion *reg2;             /* Pointer to second component Region */
-   AstRegion *unc1;             /* Base Frame uncertainty in 1st component Region */
-   AstRegion *unc2;             /* Base Frame uncertainty in 2nd component Region */
-   double **ptr1;               /* Pointer to axis values in "pset1" */
-   double **ptr2;               /* Pointer to axis values in "pset2" */
-   double *p1;                  /* Pointer to next axis zero value for pset1 */
-   double *p2;                  /* Pointer to next axis zero value for pset2 */
-   int *mask1;                  /* Mask for first component boundary */
-   int *mask2;                  /* Mask for second component boundary */
-   int ip;                      /* Point index */
-   int np;                      /* Number of points */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;
-
-/* Get pointers to the two component Regions. */
-   reg1 = this->region1;
-   reg2 = this->region2;
-
-/* Get a mask which indicates if each supplied point is on or off the 
-   boundary of the first component Region. astRegPins expects its "pset"
-   argument to contain positions in the base Frame of the Region, so
-   we must first transform the supplied points into the base Frame of
-   "reg1". We must also map the uncertainty into the base Frame of the
-   component Region. */
-   psetb1 = astRegTransform( reg1, pset, 0, NULL, NULL );
-   unc1 = MatchRegion( reg1, AST__BASE, unc, "astRegPins", status );
-   astRegPins( reg1, psetb1, unc1, &mask1 );
-
-/* Likewise, get a mask which indicates if each supplied point is on or off 
-   the boundary of the second component Region. */
-   psetb2 = astRegTransform( reg2, pset, 0, NULL, NULL );
-   unc2 = MatchRegion( reg2, AST__BASE, unc, "astRegPins", status );
-   astRegPins( reg2, psetb2, unc2, &mask2 );
-
-/* The criteria for a point to be on the boundary of the CmpRegion depend
-   on the boolean operator being used. If component regions A and B are
-   ANDed together, then a point is on the boundary of the CmpRegion if
-   either 1) it is on the boundary of A and inside B, or 2) it is on the 
-   boundary of B and inside A. If the component regions are ORed together, 
-   then a point is on the boundary of the CmpRegion if either 1) it is on 
-   the boundary of A and outside B, or 2) it is on the boundary of B and 
-   outside A. Either we need to transform the supplied PointSet using each 
-   component Region as a Mapping. But if using OR we temporarily negate
-   the Regions. */
-   if( this->oper == AST__OR ) {
-      astNegate( reg1 );
-      astNegate( reg2 );
-   }
-   pset1 = astTransform( reg1, pset, 1, NULL );
-   pset2 = astTransform( reg2, pset, 1, NULL );
-   if( this->oper == AST__OR ) {
-      astNegate( reg1 );
-      astNegate( reg2 );
-   }
-
-/* Get pointers to the axis values in these PointSets */
-   ptr1 = astGetPoints( pset1 );
-   ptr2 = astGetPoints( pset2 );
-
-/* If required, create an output mask array */
-   np = astGetNpoint( pset );
-   if( mask ) *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* We can use the values for the first axis to indicate if a point is
-   inside or outside a Region. So store pointers to the first axis arrays. */
-      p1 = ptr1[ 0 ];
-      p2 = ptr2[ 0 ];
-
-/* Assume all points are on the boundary of the CmpRegion. */
-      result = 1;
-
-/* If we are creating an output mask, we must check every point. Otherwise 
-   we can stop checking when we find the first point which is not on the 
-   boundary of the CmpRegion. */
-      if( mask ) {
-
-         for( ip = 0; ip < np; ip++ ) {
-            if( ( mask1[ ip ] && p2[ ip ] != AST__BAD ) ||
-                ( mask2[ ip ] && p1[ ip ] != AST__BAD ) ){
-               (*mask)[ ip ] = 1;
-            } else {
-               (*mask)[ ip ] = 0;
-               result = 0;
-            }
-         }
-
-      } else {
-
-         for( ip = 0; ip < np; ip++ ) {
-            if( ( !mask1[ ip ] || p2[ ip ] == AST__BAD ) &&
-                ( !mask2[ ip ] || p1[ ip ] == AST__BAD ) ){
-               result = 0;
-               break;
-            }
-         }
-      }
-   }
-
-/* Free resources */
-   mask1 = astFree( mask1 );
-   mask2 = astFree( mask2 );
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-   psetb1 = astAnnul( psetb1 );
-   psetb2 = astAnnul( psetb2 );
-   if( unc1 ) unc1 = astAnnul( unc1 );
-   if( unc2 ) unc2 = astAnnul( unc2 );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void RegSetAttrib( AstRegion *this_region, const char *setting, 
-                          char **base_setting, int *status ) {
-/*
-*  Name:
-*     RegSetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void RegSetAttrib( AstRegion *this, const char *setting, 
-*                        char **base_setting, int *status )
-
-*  Class Membership:
-*     CmpRegion method (over-rides the astRegSetAttrib method inherited from
-*     the Region class).
-
-*  Description:
-*     This function assigns an attribute value to both the base and
-*     current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     setting
-*        Pointer to a null terminated attribute setting string. NOTE, IT 
-*        SHOULD BE ENTIRELY LOWER CASE. The supplied string will be 
-*        interpreted using the public interpretation implemented by
-*        astSetAttrib. This can be different to the interpretation of the 
-*        protected accessor functions. For instance, the public
-*        interpretation of an unqualified floating point value for the 
-*        Epoch attribute is to interpet the value as a gregorian year,
-*        but the protected interpretation is to interpret the value as an 
-*        MJD.
-*     base_setting
-*        Address of a location at which to return a pointer to the null 
-*        terminated attribute setting string which was applied to the
-*        base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied setting if the supplied setting contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this; 
-   char *bset;
-   int rep;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;
-
-/* Use the RegSetAttrib method inherited from the parent class to apply the 
-   setting to the current and base Frames in the FrameSet encapsulated by the 
-   parent Region structure. */
-   (*parent_regsetattrib)( this_region, setting, &bset, status );
-
-/* Now apply the base Frame setting to the component Regions (the current 
-   Frame within the component Regions is equivalent to the base Frame in the
-   parent Region structure). Annul any "attribute unknown" error that results 
-   from attempting to do this. */
-   if( astOK ) {
-      rep = astReporting( 0 );
-      astRegSetAttrib( this->region1, bset, NULL );
-      astRegSetAttrib( this->region2, bset, NULL );
-      if( astStatus == AST__BADAT ) astClearStatus;
-      astReporting( rep );
-   }
-
-/* If required, return the base Frame setting string, otherwise free it. */
-   if( base_setting ) {
-      *base_setting = bset;
-   } else {
-      bset = astFree( bset );
-   }
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr, 
-                     int *status ){
-/*
-*+
-*  Name:
-*     RegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     int astRegTrace( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     CmpRegion member function (overrides the astRegTrace method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astRegTrace method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
-   AstCmpRegion *this;
-   AstFrame *frm;
-   AstMapping *map;
-   AstPointSet *bpset;
-   AstPointSet *cpset;
-   double **bptr;
-   int i;
-   int j;
-   int ncur;
-   int result;         
-   double *rval;
-   double *off;
-   double *r1d;
-   double *r2d;
-   double *r1ptr[ 2 ];
-   double *r2ptr[ 2 ];
-   double **r1ptrb;
-   double **r2ptrb;
-   double dbreak;
-   double dtot;
-   double x;
-   double x0;
-   int r1n;
-   int r2n;
-   AstPointSet *r1pset;
-   AstPointSet *r2pset;
-   AstPointSet *r1psetb;
-   AstPointSet *r2psetb;
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( ! astOK ) return result;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Check it is 2-dimensional. */
-   result = 1;
-   if( astGetNaxes( frm ) != 2 ) result = 0;
-
-/* Check the component Regions can be traced. */
-   if( !astRegTrace( this->region1, 0, NULL, NULL ) || 
-       !astRegTrace( this->region1, 0, NULL, NULL ) ) result = 0;
-
-/* Check we have some points to find. */
-   if( result && n > 0 ) {
-
-/* We first determine the required positions in the base Frame of the
-   Region, and then transform them into the current Frame. Get the 
-   base->current Mapping, and the number of current Frame axes. */
-      map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
-   base Frame positions directly into the supplied arrays. */
-      if( astIsAUnitMap( map ) ) {
-         bpset = NULL;
-         bptr = ptr;
-         ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions. */
-      } else {
-         bpset = astPointSet( n, 2, " ", status );
-         bptr = astGetPoints( bpset );
-         ncur = astGetNout( map );
-      }
-
-      r1d = astMalloc( sizeof( double )*n );
-      r2d = astMalloc( sizeof( double )*n );
-
-/* Ensure information about the breaks in the boundary of each component
-   region is available within the CmpRegion structure. These breaks are
-   the points at which the two boundaries cross. */
-      SetBreakInfo( this, 0, status );
-      SetBreakInfo( this, 1, status );
-
-/* Get the constants needed to convert the supplied distances (normalised
-   so that the border of the entire CmpRegion has a length of 1.0), into
-   distances around the border of each component Region. */
-      dtot = this->d0[ 0 ] + this->d0[ 1 ];
-      dbreak = this->d0[ 0 ]/dtot;
-
-/* Initialise here to avoid compiler warnings. */
-      r1n = 0;
-      r2n = 0;
-
-/* Check the pointers can be used safely. */
-      if( astOK ) {
-
-/* Loop round all supplied distances, determining if they represent a
-   position on the first or second component Region. */
-         for( i = 0; i < n; i++ ) {
-
-/* If the current distance represents a point in the second component
-   Region... */
-            if( dist[ i ] > dbreak ) {
-
-/* Find the correspond distance around the used sections of the second
-   component region (normalised so that the entire border of the 
-   component region has a length of "this->d0[1]"). */
-               x0 = ( dist[ i ] - dbreak )*dtot;
-               x = x0;
-
-/* Convert this into the correspond distance around the entire border of 
-   the second component region (normalised so that the entire border of the 
-   component region has unit length). */
-               rval = this->rvals[ 1 ];
-               off = this->offs[ 1 ];
-
-               for( j = 0; j < this->nbreak[ 1 ]; j++,rval++,off++ ) {
-                  if( *rval >= x0 ) break;
-                  x += *off;                  
-               }
-
-/* Store this as the next distance to move around the second component
-   Region. */
-               r2d[ r2n++ ] = x;
-
-/* Now we do the same if the current distance corresponds to a position
-   in the first component Region. */
-            } else {
-
-               x0 = dist[ i ]*dtot;
-               x = x0;
-
-               rval = this->rvals[ 0 ];
-               off = this->offs[ 0 ];
-
-               for( j = 0; j < this->nbreak[ 0 ]; j++,rval++,off++ ) {
-                  if( *rval >= x0 ) break;
-                  x += *off;                  
-               }
-
-               r1d[ r1n++ ] = x;
-
-            }
-
-         }                     
-      }
-
-/* Allocate memory to hold the axis values at the corresponding positions
-   in the first component Region. */
-      r1ptr[ 0 ] = astMalloc( sizeof( double )*r1n );
-      r1ptr[ 1 ] = astMalloc( sizeof( double )*r1n );
-
-/* Allocate memory to hold the axis values at the corresponding positions
-   in the second component Region. */
-      r2ptr[ 0 ] = astMalloc( sizeof( double )*r2n );
-      r2ptr[ 1 ] = astMalloc( sizeof( double )*r2n );
-         
-/* Check the pointers can be used safely. */
-      if( astOK ) {
-
-/* Find the axis values at each of the required positions that fall in
-   the first component Region. Negate it first if needed to ensure the
-   Region is bounded (not guaranteed, but likely). */ 
-         if( astGetBounded( this->region1 ) ) {  
-            (void) astRegTrace( this->region1, r1n, r1d, r1ptr );
-         } else {
-            astNegate( this->region1 );
-            (void) astRegTrace( this->region1, r1n, r1d, r1ptr );
-            astNegate( this->region1 );
-         }
-
-/* Do the same for the second component Region. */
-         if( astGetBounded( this->region2 ) ) {  
-            (void) astRegTrace( this->region2, r2n, r2d, r2ptr );
-         } else {
-            astNegate( this->region2 );
-            (void) astRegTrace( this->region2, r2n, r2d, r2ptr );
-            astNegate( this->region2 );
-         }
-
-/* If the two component Regions are ANDed together, we want to remove the
-   positions from the boundary of the required component Region that fall 
-   outside the other region. We can do this by simply using the other Region 
-   as a Mapping. If the two component Regions are ORed together, we want to 
-   remove the position that fall within (rather than outside) the other 
-   Region. To do this we need to negate the other region  first. */
-         if( this->oper == AST__OR ) {
-            astNegate( this->region1 );
-            astNegate( this->region2 );
-         }
-   
-/* Now transform the points on the boundary of the first Region in order 
-   to set invalid those positions which are not on the boundary of the 
-   supplied CmpRegion. */
-         if( r1n > 0 ) {
-            r1pset = astPointSet( r1n, 2, " ", status );
-            astSetPoints( r1pset, r1ptr );
-            r1psetb = astTransform( this->region2, r1pset, 1, NULL );
-            r1ptrb = astGetPoints( r1psetb );
-         } else {
-            r1pset = NULL;
-            r1psetb = NULL;
-            r1ptrb = NULL;
-         }
-
-/* Now transform the points on the boundary of the second Region in order 
-   to set invalid those positions which are not on the boundary of the 
-   supplied CmpRegion. */
-         if( r2n > 0 ) {
-            r2pset = astPointSet( r2n, 2, " ", status );
-            astSetPoints( r2pset, r2ptr );
-            r2psetb = astTransform( this->region1, r2pset, 1, NULL );
-            r2ptrb = astGetPoints( r2psetb );
-         } else {
-            r2pset = NULL;
-            r2psetb = NULL;
-            r2ptrb = NULL;
-         }
-
-/* Re-instate the original Negated values */
-         if( this->oper == AST__OR ) {
-            astNegate( this->region1 );
-            astNegate( this->region2 );
-         }
-
-/* Check pointer can be used safely. */
-         if( astOK ) {
-
-/* Copy the boundary positions from each component Region into a single
-   PointSet. These positions are in the base Frame of the CmpRegion. */
-            r1n = 0;
-            r2n = 0;
-            for( i = 0; i < n; i++ ) {
-               if( dist[ i ] > dbreak ) {
-                  bptr[ 0 ][ i ] = r2ptrb[ 0 ][ r2n ];
-                  bptr[ 1 ][ i ] = r2ptrb[ 1 ][ r2n++ ];
-               } else {
-                  bptr[ 0 ][ i ] = r1ptrb[ 0 ][ r1n ];
-                  bptr[ 1 ][ i ] = r1ptrb[ 1 ][ r1n++ ];
-               }
-            }                     
-
-         }
-
-/* Free resources. */
-         if( r1pset ) r1pset = astAnnul( r1pset );
-         if( r2pset ) r2pset = astAnnul( r2pset );
-         if( r1psetb ) r1psetb = astAnnul( r1psetb );
-         if( r2psetb ) r2psetb = astAnnul( r2psetb );
-
-      }
-
-
-/* If required, transform the base frame positions into the current
-   Frame of the CmpRegion, storing them in the supplied array. Then 
-   free resources. */
-      if( bpset ) {
-         cpset = astPointSet( n, ncur, " ", status );
-         astSetPoints( cpset, ptr );
-   
-         (void) astTransform( map, bpset, 1, cpset );
-   
-         cpset = astAnnul( cpset );
-         bpset = astAnnul( bpset );
-      }
-
-/* Free remaining resources. */
-      map = astAnnul( map );
-   }
-   frm = astAnnul( frm );
-
-/* Return the result. */
-   return result;
-}
-
-static void RegClearAttrib( AstRegion *this_region, const char *attrib, 
-                            char **base_attrib, int *status ) {
-/*
-*  Name:
-*     RegClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void RegClearAttrib( AstRegion *this, const char *attrib, 
-*                          char **base_attrib, int *status ) 
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astRegClearAttrib method 
-*     inherited from the Region class).
-
-*  Description:
-*     This function clears the value of a named attribute in both the base 
-*     and current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     attrib
-*        Pointer to a null terminated string holding the attribute name.
-*        NOTE, IT SHOULD BE ENTIRELY LOWER CASE. 
-*     base_attrib
-*        Address of a location at which to return a pointer to the null 
-*        terminated string holding the attribute name which was cleared in 
-*        the base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied attribute if the supplied attribute contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this; 
-   char *batt;
-   int rep;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_region;
-
-/* Use the RegClearAttrib method inherited from the parent class to clear the 
-   attribute in the current and base Frames in the FrameSet encapsulated by 
-   the parent Region structure. */
-   (*parent_regclearattrib)( this_region, attrib, &batt, status );
-
-/* Now clear the base Frame attribute to the component Regions (the current 
-   Frame within the component Regions is equivalent to the base Frame in the
-   parent Region structure). Annul any "attribute unknown" error that results 
-   from attempting to do this. */
-   if( astOK ) {
-      rep = astReporting( 0 );
-      astRegClearAttrib( this->region1, batt, NULL );
-      astRegClearAttrib( this->region2, batt, NULL );
-      if( astStatus == AST__BADAT ) astClearStatus;
-      astReporting( rep );
-   }
-
-/* If required, return the base Frame attribute name, otherwise free it. */
-   if( base_attrib ) {
-      *base_attrib = batt;
-   } else {
-      batt = astFree( batt );
-   }
-}
-
-static void ResetCache( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     ResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void ResetCache( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Region member function (overrides the astResetCache method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables *: */
-   AstCmpRegion *this;
-   int i;
-
-/* Check a Region was supplied. */
-   if( this_region ) {
-
-/* Get a pointer to the CmpRegion structure. */
-      this = (AstCmpRegion *) this_region;
-
-/* Clear information cached in the CmpRegion structure. */
-      for( i = 0; i < 2; i++ ) {
-         this->rvals[ i ] = astFree(  this->rvals[ i ] );
-         this->offs[ i ] = astFree(  this->offs[ i ] );
-         this->nbreak[ i ] = 0;
-         this->d0[ i ] = AST__BAD;
-      }
-
-/* Clear information cached in the component regions. */
-      if( this->region1 ) astResetCache( this->region1 );
-      if( this->region2 ) astResetCache( this->region2 );
-
-/* Clear information cached in the parent Region structure. */
-      (*parent_resetcache)( this_region, status );
-   }
-}
-
-static void SetBreakInfo( AstCmpRegion *this, int comp, int *status ){
-/*
-*  Name:
-*     SetBreakInfo
-
-*  Purpose:
-*     Ensure that a CmpRegion has information about the breaks in the
-*     boundaries of one of the two component Regions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void SetBreakInfo( AstCmpRegion *this, int comp, int *status )
-
-*  Class Membership:
-*     CmpRegion method.
-
-*  Description:
-*     This function returns without action if the supplied CmpRegion
-*     already contains break information for the specified component Region. 
-*     Otherwise, it creates the required information and stores it in the 
-*     CmpRegion.
-*
-*     Each component Region in the CmpRegion has a boundary. But in
-*     general only part of the boundary of a component Region will also
-*     be included in the CmpRegion boundary. Thus the component Region
-*     boundary can be broken up into sections; sections that form part
-*     of the CmpRegion boundary, and sections that do not. This function
-*     stores information about the breaks between these sections.
-*
-*     The complete boundary of a component Region is parameterised by a
-*     distance that goes from 0.0 to 1.0. This function find the ranges
-*     of this parameter that correspond to the sections of the boundary that
-*     are also on the CmpRegion boundary, and thus finds the total length
-*     that the component boundary contributes to the CmpRegion boundary.
-*     This length is stored in "this->d0" (a two element array, one for
-*     each component Region).
-*
-*     It also find two arrays "this->rvals" and "this->offs" that allow a 
-*     distance value in the range 0.0 to "this->d0" (i.e. a distance
-*     measured by skipping over the parts of the component boundary that 
-*     are not on the CmpRegion boundary), to be converted into the
-*     corresponding distance value in the range 0.0 to 1.0 (i.e. a distance
-*     measured round the complete component boundary, including the parts
-*     not on the CmpRegion boundary).
-
-*  Parameters:
-*     this
-*        Pointer to a CmpRegion.
-*     comp
-*        Zero or one, indicating which component Region is to be checked.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* The number of points to be spread evenly over the entire boundary of the 
-   component Region. */
-#define NP 101 
-
-/* Local Variables: */
-   AstPointSet *pset1;
-   AstPointSet *pset2;
-   AstRegion *other;
-   AstRegion *reg;
-   double **ptr1;
-   double **ptr2;
-   double *d;
-   double *offs;        
-   double *p;
-   double *q;
-   double *rvals;
-   double delta;
-   double rval;
-   int i;
-   int j;
-   double rbad;
-   int nn;
-   int prevgood;
-   
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* If the information describing breaks in the component boundary has not
-   yet been set up, do so now. */
-   if( this->d0[ comp ] == AST__BAD ) {
-
-/* Get a pointer to the component Region for which break information is 
-   required. */
-      reg = comp ? this->region2 : this->region1;
-
-/* Check the component class implements the astRegTrace method. */
-      if( astRegTrace( reg, 0, NULL, NULL ) ) {
-
-/* Create a pointSet to hold axis values at evenly spaced positions along 
-   the entire boundary of the selected component region. */
-         pset1 = astPointSet( NP, 2, " ", status );
-         ptr1 = astGetPoints( pset1 );
-
-/* Allocate memory to hold an array of corresponding scalar distances around 
-   the boundary. */
-         d = astMalloc( NP*sizeof( double ) );
-
-/* Check pointers can be used safely. */
-         if( astOK ) {
-
-/* Get the distance increment between points (the entire boundary has
-   unit length). */
-            delta = 1.0/( NP - 1 );
-
-/* Set up the array of evenly spaced distances around the boundary of the
-   component region. */
-            for( i = 0; i < NP; i++ ) d[ i ] = i*delta;
-
-/* Get the corresponding Frame positions. If the Region is unbounded
-   (e.g. a negated circle, etc), then negate it first in the hope that
-   this may produced a bounded Region. */
-            if( astGetBounded( reg ) ) {  
-               (void) astRegTrace( reg, NP, d, ptr1 );
-            } else {
-               astNegate( reg );
-               (void) astRegTrace( reg, NP, d, ptr1 );
-               astNegate( reg );
-            }
-
-/* Get a pointer to the other component Region. */
-            other = comp ? this->region1 : this->region2;
-
-/* If the two component Regions are ANDed together, we want to remove the
-   positions from the boundary of the required component Region that fall 
-   outside the other region. We can do this by simply using the other Region 
-   as a Mapping. If the two component Regions are ORed together, we want to 
-   remove the position that fall within (rather than outside) the other 
-   Region. To do this we need to negate the other region  first. */
-            if( this->oper == AST__OR ) astNegate( other );
-
-/* Now transform the points on the boundary of the selected Region in
-   order to set invalid those positions which are not on the boundary of 
-   the supplied CmpRegion. */
-            pset2 = astTransform( other, pset1, 1, NULL );
-         
-/* Negate the other region again to revert it to is original state */
-            if( this->oper == AST__OR ) astNegate( other );
-
-/* Modify the distance array by setting invalid each element that is not 
-   on the boundary of the CmpRegion. */
-            ptr2 = astGetPoints( pset2 );
-            if( astOK ) {
-               p = ptr2[ 0 ];
-               q = ptr2[ 1 ];
-               for( i = 0; i < NP; i++,p++,q++ ) {
-                  if( *p == AST__BAD || *q == AST__BAD ) d[ i ] = AST__BAD;
-               }
-
-/* At each good/bad junction in this list, extend the good section by one
-   point. This ensures that the good sections of the curve do in fact
-   touch each other (they may in fact overlap a little but that does not
-   matter). */
-               prevgood = ( d[ 0 ] != AST__BAD );
-               for( i = 1; i < NP; i++,p++,q++ ) {
-                  if( d[ i ] == AST__BAD ) {
-                     if( prevgood ) d[ i ] = i*delta;
-                     prevgood = 0;
-
-                  } else {
-                     if( !prevgood ) d[ i - 1 ] = ( i - 1 )*delta;
-                     prevgood = 1;
-                  }
-               }
-
-/* Now create two arrays - "rvals" holds the distance travelled around
-   the used parts of the border at which breaks occur, "offs" holds the jump
-   in distance around the complete border at each break. The distance
-   around the complete border is normalised to the range [0.0,1.0].
-   Therefore the total distance around the used parts of the border will in
-   general be less than 1.0 */
-
-               if( d[ 0 ] == AST__BAD ) {
-                  nn = 1;
-                  j = 0;
-                  rvals = astMalloc( sizeof( double ) );
-                  offs = astMalloc( sizeof( double ) );
-                  if( astOK ) rvals[ 0 ] = -0.5*delta;
-                  rbad = 0.5;
-                  prevgood = 0;
-                  rval = -0.5*delta;
-
-               } else {
-                  nn = 0;
-                  rvals = NULL;
-                  offs = NULL;
-                  prevgood = 1;
-                  rbad = 0.0;
-                  rval = 0.0;
-               }
-               
-               for( i = 1; i < NP; i++,p++,q++ ) {
-
-                  if( d[ i ] == AST__BAD ) {
-                     if( prevgood ) {
-                        j = nn++;
-                        rvals = astGrow( rvals, nn, sizeof( double ) );
-                        offs = astGrow( offs, nn, sizeof( double ) );
-                        if( astOK ) {
-                           rvals[ j ] = rval + 0.5*delta;
-                           rbad = 0.0;
-                        } else {
-                           break;
-                        }
-                        prevgood = 0;
-                     }
-
-                     rbad += 1.0;
-
-                  } else {
-                     if( !prevgood ) {
-                        offs[ j ] = rbad*delta;
-                        prevgood = 1;
-                     }
-                     rval += delta;
-                  }
-               }
-
-               if( !prevgood ) {
-                  rval += 0.5*delta;
-                  offs[ j ] = rbad*delta;
-               }
-
-/* Record the information in the CmpRegion structure. */
-               this->rvals[ comp ] = rvals;
-               this->offs[ comp ] = offs;
-               this->nbreak[ comp ] = nn;
-               this->d0[ comp ] = rval;
-            }
-
-/* Free resources. */
-            pset2 = astAnnul( pset2 );
-         }
-
-         pset1 = astAnnul( pset1 );
-         d = astFree( d );
-
-      }
-   }
-}
-
-#undef NP 
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     CmpRegion method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstRegion *creg;        /* Pointer to component Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* If either component Region has a dummy FrameSet use this method
-   recursively to give them the same FrameSet. */
-   creg = ((AstCmpRegion *) this_region )->region1;
-   if( creg && !astGetRegionFS( creg ) ) astSetRegFS( creg, frm );
-
-   creg = ((AstCmpRegion *) this_region )->region2;
-   if( creg && !astGetRegionFS( creg ) ) astSetRegFS( creg, frm );
-
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     CmpRegion method (over-rides the astSimplify method inherited from
-*     the Region class).
-
-*  Description:
-*     This function simplifies a CmpRegion to eliminate redundant
-*     computational steps, or to merge separate steps which can be
-*     performed more efficiently in a single operation.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new pointer to the (possibly simplified) Region.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-
-*  Deficiencies:
-*     - Currently, this function does not attempt to map the component
-*     Regions into the current Frame of the parent Region structure.
-*     Both components should be mapped into the current Frame, and if the
-*     resulting base->current Mappings in *both* remapped component Regions are
-*     UnitMaps, then a new CmpRegion should be created from the re-mapped
-*     Regions.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *newb;           /* New CmpRegion defined in base Frame */
-   AstCmpRegion *newc;           /* New CmpRegion defined in current Frame */
-   AstFrame *frm;                /* Current Frame */
-   AstMapping *map;              /* Base->current Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstRegion *csreg1;            /* Copy of simplified first component Region */
-   AstRegion *csreg2;            /* Copy of simplified second component Region */
-   AstRegion *nullreg;           /* Null or infinfite Region */
-   AstRegion *othereg;           /* Non-Null and non-infinfite Region */
-   AstRegion *reg1;              /* First component Region */
-   AstRegion *reg2;              /* Second component Region */
-   AstRegion *sreg1;             /* Simplified first component Region */
-   AstRegion *sreg2;             /* Simplified second component Region */
-   int neg1;                     /* Negated flag to use with first component */
-   int neg1_old;                 /* Original Negated flag for first component */
-   int neg2;                     /* Negated flag to use with second component */
-   int neg2_old;                 /* Original Negated flag for second component */
-   int oper;                     /* Boolean operator used to combine components */
-   int overlap;                  /* Nature of overlap between components */
-   int rep;                      /* Original error reporting status */
-   int simpler;                  /* Has any simplification taken place? */
-   int status_value;                   /* AST status value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. The
-   returned pointer identifies a region within the current Frame of the 
-   FrameSet encapsulated by the parent Region structure. Note this by
-   storing the pointer in the "newc" ("c" for "current") variable. */
-   newc = (AstCmpRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-   simpler = ( (AstMapping *) newc != this_mapping );
-
-/* Below we may create a new simplified region which identifies a region 
-   within the base Frame of the FrameSet encapsulated by the parent Region 
-   structure. Such a result will need to be mapped into the current Frame
-   before being returned. The "newb" variable ("b" for "base") will be
-   used to store a pointer to such a result. Initialise this variable to
-   indicate that we do not yet have a base Frame result. */
-   newb = NULL;
-
-/* Get the component Regions, how they should be combined, and the
-   Negated values which should be used with them. The returned values
-   take account of whether the supplied CmpRegion has itself been Negated 
-   or not. The returned Regions represent regions within the base Frame 
-   of the FrameSet encapsulated by the parent Region structure. */
-   GetRegions( newc, &reg1, &reg2, &oper, &neg1, &neg2, status );
-
-/* Temporarily set their Negated attributes to the required values.*/
-   neg1_old = astGetNegated( reg1 );
-   neg2_old = astGetNegated( reg2 );
-   astSetNegated( reg1, neg1 );
-   astSetNegated( reg2, neg2 );
-
-/* Simplify each of the two components. */
-   sreg1 = astSimplify( reg1 );
-   sreg2 = astSimplify( reg2 );
-
-/* Note if any simplification took place. */
-   simpler = simpler || ( sreg1 != reg1 || sreg2 != reg2 );
-
-/* If either component is null or infinite we can exclude it from the 
-   returned Region. */
-   if( astIsANullRegion( sreg1 ) || astIsANullRegion( sreg2 ) ) {
-
-/* Get a pointer to the non-null Region. The following is still valid
-   even if both regions are null or infinite. */      
-      if( astIsANullRegion( sreg1 ) ){
-         nullreg = sreg1;
-         othereg = sreg2;
-      } else {
-         nullreg = sreg2;
-         othereg = sreg1;
-      } 
-
-/* If null.. */
-      if( !astGetNegated( nullreg ) ){
-         if( oper == AST__AND ) {
-            newb = (AstCmpRegion *) astNullRegion( othereg, 
-                                             astGetUnc( othereg, 0 ), "", status );
-
-         } else if( oper == AST__OR ) {
-            newb = astCopy( othereg );
-
-         } else {
-            astError( AST__INTER, "astSimplify(%s): The %s refers to an "
-                      "unknown boolean operator with identifier %d (internal "
-                      "AST programming error).", status, astGetClass( newc ), 
-                      astGetClass( newc ), oper );
-         }            
-
-/* If infinite.. */
-      } else {
-         if( oper == AST__AND ) {
-            newb = astCopy( othereg );
-
-         } else if( oper == AST__OR ) {
-            newb = (AstCmpRegion *) astNullRegion( othereg, 
-                                      astGetUnc( othereg, 0 ), "negated=1", status );
-
-         } else {
-            astError( AST__INTER, "astSimplify(%s): The %s refers to an "
-                      "unknown boolean operator with identifier %d (internal "
-                      "AST programming error).", status, astGetClass( newc ), 
-                      astGetClass( newc ), oper );
-         }            
-      }
-
-/* Flag that we have done some simplication.*/
-      simpler = 1;
-
-/* If neither component is null or infinite, see if it is possible to 
-   remove one or both of the components on the basis of the overlap
-   between them. */
-   } else {
-      overlap = astOverlap( sreg1, sreg2 );
-
-/* If the components have no overlap, and they are combined using AND, then 
-   the CmpRegion is null. */
-      if( ( overlap == 1 || overlap == 6 ) && oper == AST__AND ) {
-         newb = (AstCmpRegion *) astNullRegion( sreg1, astGetUnc( sreg1, 0 ),
-                                                "", status );
-         simpler = 1;
-
-/* If one component is the negation of the other component, and they are 
-   combined using OR, then the CmpRegion is infinite. This is represented 
-   by a negated null region.*/
-      } else if( overlap == 6 && oper == AST__OR ) {
-         newb = (AstCmpRegion  *) astNullRegion( sreg1, astGetUnc( sreg1, 0 ),
-                                                 "negated=1", status );
-         simpler = 1;
-
-/* If the two components are identical... */
-      } else if( overlap == 5 ) {
-         simpler = 1;
-
-/* If combined with AND or OR, the CmpRegion can be replaced by the first
-   (or second) component Region. */
-         if( oper == AST__AND || oper == AST__OR ) {
-            newb = astCopy( sreg1 );
-         } else {
-            astError( AST__INTER, "astSimplify(%s): The %s refers to an "
-                      "unknown boolean operator with identifier %d (internal "
-                      "AST programming error).", status, astGetClass( newc ), 
-                      astGetClass( newc ), oper );
-         }
-
-/* If the first component is entirely contained within the second
-   component, and they are combined using AND or OR, then the CmpRegion
-   can be replaced by the first or second component. */
-      } else if( overlap == 2 && ( oper == AST__AND || oper == AST__OR ) ){
-         newb = astCopy( ( oper == AST__AND ) ? sreg1 : sreg2 );
-         simpler = 1;
-
-/* If the second component is entirely contained within the first
-   component, and they are combined using AND or OR, then the CmpRegion
-   can be replaced by the second or first component. */
-      } else if( overlap == 3 && ( oper == AST__AND || oper == AST__OR ) ){
-         newb = astCopy( ( oper == AST__AND ) ? sreg2 : sreg1 );
-         simpler = 1;
-
-/* Otherwise, no further simplication is possible, so either create a new 
-   CmpRegion or leave the "newb" pointer NULL (which will cause "newc" to
-   be used), depending on whether the components were simplified. */
-      } else if( simpler ){
-         csreg1 = astCopy( sreg1 );
-         csreg2 = astCopy( sreg2 );
-         newb = astCmpRegion( csreg1, csreg2, oper, "", status );
-         csreg1 = astAnnul( csreg1 );
-         csreg2 = astAnnul( csreg2 );
-   
-      }
-   }
-
-/* Re-instate the original values for the Negated attributes of the two
-   component Regions. Do this even if an error has occurred. */
-   status_value = astStatus;
-   astClearStatus;
-   rep = astReporting( 0 );
-   if( reg1 ) astSetNegated( reg1, neg1_old );
-   if( reg2 ) astSetNegated( reg2, neg2_old );
-   astReporting( rep );
-   astSetStatus( status_value );
-   
-/* If any simplification took place, decide whether to use the "newc" or
-   "newb" pointer for the returned Mapping. If "newb" is non-NULL we use
-   it, otherwise we use "newc". If "newb" is used we must first map the
-   result Region from the base Frame of the FrameSet encapsulated
-   by the parent Region structure, to the current Frame. */
-   if( simpler ) {
-      if( newb ){
-         frm = astGetFrame( ((AstRegion *) newc)->frameset, AST__CURRENT );
-         map = astGetMapping( ((AstRegion *) newc)->frameset, AST__BASE, AST__CURRENT );
-         result = astMapRegion( newb, map, frm );
-         frm = astAnnul( frm );
-         map = astAnnul( map );
-         newb = astAnnul( newb );
-      } else {
-         result = astClone( newc );
-      }
-
-/* If no simplification took place, return a clone of the supplied pointer. */
-   } else {
-      result = astClone( this_mapping );
-   }
-
-/* Free resources. */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-   sreg1 = astAnnul( sreg1 );
-   sreg2 = astAnnul( sreg2 );
-   newc = astAnnul( newc );
-
-/* If an error occurred, annul the returned Mapping. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a CmpRegion to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     CmpRegion member function (over-rides the astTransform method inherited
-*     from the Region class).
-
-*  Description:
-*     This function takes a CmpRegion and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Region.
-*     This implies applying each of the CmpRegion's component Regions in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the CmpRegion being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;           /* Pointer to the CmpRegion structure */
-   AstPointSet *ps1;             /* Pointer to PointSet for first component */
-   AstPointSet *ps2;             /* Pointer to PointSet for second component */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstRegion *reg1;              /* Pointer to first component Region */
-   AstRegion *reg2;              /* Pointer to second component Region */
-   double **ptr1;                /* Pointer to first component axis values */
-   double **ptr2;                /* Pointer to second component axis values */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int coord;                    /* Zero-based index for coordinates */
-   int good;                     /* Is the point inside the CmpRegion? */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int ncoord_tmp;               /* No. of coordinates per base Frame point */
-   int neg1;                     /* Negated value for first component Region */
-   int neg1_old;                 /* Original Negated flag for first component */
-   int neg2;                     /* Negated value for second component Region */
-   int neg2_old;                 /* Original Negated flag for second component */
-   int npoint;                   /* No. of points */
-   int oper;                     /* Boolean operator to use */
-   int point;                    /* Loop counter for points */
-   int rep;                      /* Original error reporting status */
-   int status_value;                   /* AST status value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a Pointer to the CmpRegion structure */
-   this = (AstCmpRegion *) this_mapping;
-
-/* Get the component Regions, how they should be combined, and the
-   Negated values which should be used with them. The returned values
-   take account of whether the supplied CmpRegion has itself been Negated 
-   or not. The returned Regions represent regions within the base Frame 
-   of the FrameSet encapsulated by the parent Region structure. */
-   GetRegions( this, &reg1, &reg2, &oper, &neg1, &neg2, status );
-
-/* Temporarily set their Negated attributes to the required values.*/
-   neg1_old = astGetNegated( reg1 );
-   neg2_old = astGetNegated( reg2 );
-   astSetNegated( reg1, neg1 );
-   astSetNegated( reg2, neg2 );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary, containing 
-   a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet in the parent Region structure to 
-   transform the supplied positions from the current Frame in the 
-   encapsulated FrameSet (the Frame represented by the CmpRegion), to the 
-   base Frame (the Frame in which the component Regions are defined). Note,
-   the returned pointer may be a clone of the "in" pointer, and so we 
-   must be carefull not to modify the contents of the returned PointSet. */
-   pset_tmp = astRegTransform( this, in, 0, NULL, NULL );
-
-/* Now transform this PointSet using each of the two component Regions in
-   turn. */
-   ps1 = astTransform( reg1, pset_tmp, 0, NULL );
-   ps2 = astTransform( reg2, pset_tmp, 0, NULL );
-
-/* Determine the numbers of points and coordinates per point for these base
-   Frame PointSets and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-   npoint = astGetNpoint( pset_tmp );
-   ncoord_tmp = astGetNcoord( pset_tmp );
-   ptr1 = astGetPoints( ps1 );      
-   ptr2 = astGetPoints( ps2 );      
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* First deal with ANDed Regions */
-      if( oper == AST__AND ) {   
-         for ( point = 0; point < npoint; point++ ) {
-            good = 0;
-
-            for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-               if( ptr1[ coord ][ point ] != AST__BAD &&
-                   ptr2[ coord ][ point ] != AST__BAD ) {
-                  good = 1;
-                  break;
-               }
-            }      
-
-            if( !good ) {
-               for ( coord = 0; coord < ncoord_out; coord++ ) {
-                  ptr_out[ coord ][ point ] = AST__BAD;
-               }
-            }      
-         }
-
-/* Now deal with ORed Regions */
-      } else if( oper == AST__OR ) {   
-         for ( point = 0; point < npoint; point++ ) {
-            good = 0;
-
-            for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-               if( ptr1[ coord ][ point ] != AST__BAD ||
-                   ptr2[ coord ][ point ] != AST__BAD ) {
-                  good = 1;
-                  break;
-               }
-            }      
-
-            if( !good ) {
-               for ( coord = 0; coord < ncoord_out; coord++ ) {
-                  ptr_out[ coord ][ point ] = AST__BAD;
-               }
-            }      
-         }
-
-/* Report error for any unknown operator. */
-      } else if( astOK ) {
-         astError( AST__INTER, "astTransform(%s): The %s refers to an unknown "
-                   "boolean operator with identifier %d (internal AST "
-                   "programming error).", status, astGetClass( this ), 
-                    astGetClass( this ), oper );
-      }
-   }
-
-/* Re-instate the original values for the Negated attributes of the two
-   component Regions. Do this even if an error has occurred. */
-   status_value = astStatus;
-   astClearStatus;
-   rep = astReporting( 0 );
-   if( reg1 ) astSetNegated( reg1, neg1_old );
-   if( reg2 ) astSetNegated( reg2, neg2_old );
-   astReporting( rep );
-   astSetStatus( status_value );
-   
-/* Free resources. */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-   ps1 = astAnnul( ps1 );
-   ps2 = astAnnul( ps2 );
-   pset_tmp = astAnnul( pset_tmp );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void XORCheck( AstCmpRegion *this, int *status ) {
-/*
-*  Name:
-*     XORCheck
-
-*  Purpose:
-*     Check if the supplied CmpRegion represents an XOR operation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*      void XORCheck( AstCmpRegion *this, int *status )
-
-*  Class Membership:
-*     CmpRegion method 
-
-*  Decription:
-*     This function analyses the component Regions within the supplied
-*     CmpRegion to see if the CmpRegion is equivalent to an XOR operation
-*     on two other Regions. If it is, teh Regions that are XORed are
-*     stored in the supplied CmpRegion.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion.
-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *cmpreg1;
-   AstCmpRegion *cmpreg2;
-   int xor;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If the CmpRegion is already known to be an XOR operation, return
-   without action. */
-   if( this->xor1 ) return;
-
-/* To be equivalent to an XOR operation, the supplied CmpRegion must be an 
-   OR operation and each component Region must be a CmpRegion. */
-   if( this->oper == AST__OR && astIsACmpRegion( this->region1 )
-                             && astIsACmpRegion( this->region2 ) ) {
-      cmpreg1 = (AstCmpRegion *) this->region1;
-      cmpreg2 = (AstCmpRegion *) this->region2;
-
-/* Each component CmpRegion must be an AND operation. */
-      if( cmpreg1->oper == AST__AND && cmpreg2->oper == AST__AND ) {
-
-/* Temporarily negate the first component of the first CmpRegion. */
-         astNegate( cmpreg1->region1 );
-
-/* Initially, assume the supplied CmpRegion is not equivalent to an XOR 
-   operation. */
-         xor = 0;
-
-/* This negated region must be equal to one of the two component Regions
-   in the second component CmpRegion. Check the first. */
-         if( astEqual( cmpreg1->region1, cmpreg2->region1 ) ) {
-
-/* We now check that the other two Regions are equal (after negating the
-   first). If so, set "xor" non-zero. */
-            astNegate( cmpreg1->region2 );
-            if( astEqual( cmpreg1->region2, cmpreg2->region2 ) ) xor = 1;
-            astNegate( cmpreg1->region2 );
-
-/* Do equiovalent checks the other way round. */
-         } else if( astEqual( cmpreg1->region1, cmpreg2->region2 ) ) {
-            astNegate( cmpreg1->region2 );
-            if( astEqual( cmpreg1->region2, cmpreg2->region1 ) ) xor = 1;
-            astNegate( cmpreg1->region2 );
-         }
-
-/* Re-instate the original state of the Negated attribute in the first 
-   component of the first CmpRegion. */
-         astNegate( cmpreg1->region1 );
-
-/* If the supplied CmpRegion is equivalent to an XOR operation, store
-   copies of the components in the supplied CmpRegion. */
-         if( xor ) {
-            this->xor1 = astCopy( cmpreg1->region1 );
-            this->xor2 = astCopy( cmpreg1->region2 );
-
-/* We need to negate one of these two Region (it doesn't matter which),
-   and we choose to negate which ever of them is already negated (so that
-   it becomes un-negated). */
-            if( astGetNegated( this->xor1 ) ) {
-               astNegate( this->xor1 );
-            } else {
-               astNegate( this->xor2 );
-            }
-         }
-      }
-   }
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for CmpRegion objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for CmpRegion objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Regions within the CmpRegion.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *in;                /* Pointer to input CmpRegion */
-   AstCmpRegion *out;               /* Pointer to output CmpRegion */
-   int i;                           /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output CmpRegions. */
-   in = (AstCmpRegion *) objin;
-   out = (AstCmpRegion *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Regions from the output CmpRegion. */
-   out->region1 = NULL;
-   out->region2 = NULL;
-   out->xor1 = NULL;
-   out->xor2 = NULL;
-
-   for( i = 0; i < 2; i++ ) {
-      out->rvals[ i ] = NULL;
-      out->offs[ i ] = NULL;
-      out->nbreak[ i ] = 0;
-      out->d0[ i ] = AST__BAD;
-   }
-
-/* Make copies of these Regions and store pointers to them in the output
-   CmpRegion structure. */
-   out->region1 = astCopy( in->region1 );
-   out->region2 = astCopy( in->region2 );
-   if( in->xor1 ) out->xor1 = astCopy( in->xor1 );
-   if( in->xor2 ) out->xor2 = astCopy( in->xor2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for CmpRegion objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for CmpRegion objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstCmpRegion *this;              /* Pointer to CmpRegion */
-   int i;
-
-/* Obtain a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) obj;
-
-/* Free arrays holding cached information. */
-   for( i = 0; i < 2; i++ ) {
-      this->rvals[ i ] = astFree( this->rvals[ i ] );
-      this->offs[ i ] = astFree( this->offs[ i ] );
-   }
-
-/* Annul the pointers to the component Regions. */
-   this->region1 = astAnnul( this->region1 );
-   this->region2 = astAnnul( this->region2 );
-   if( this->xor1 ) this->xor1 = astAnnul( this->xor1 );
-   if( this->xor2 ) this->xor2 = astAnnul( this->xor2 );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for CmpRegion objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the CmpRegion class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the CmpRegion whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstRegion *reg1;              /* First Region to include in dump */
-   AstRegion *reg2;              /* Second Region to include in dump */
-   AstCmpRegion *this;           /* Pointer to the CmpRegion structure */
-   const char *comment;          /* Pointer to comment string */
-   int ival;                     /* Integer value */
-   int oper;                     /* The operator to include in the dump */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpRegion structure. */
-   this = (AstCmpRegion *) this_object;
-
-/* Check if this CmpRegion has an equivalent XOR representation. Is so,
-   store details of the XOR representation in the CmpRegion. */
-   XORCheck( this, status );
-
-/* Choose the operator and component regions to include in the dump. If
-   the CmpRegion originally used an XOR operator, then save the XORed
-   regions. Otherwise, store the real component Regions. */
-   if( this->xor1 ) {
-      oper = AST__XOR;
-      reg1 = this->xor1;
-      reg2 = this->xor2;
-   } else {
-      oper = this->oper;
-      reg1 = this->region1;
-      reg2 = this->region2;
-   }
-
-/* Write out values representing the instance variables for the CmpRegion
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Oper */
-/* ------- */
-   ival = oper;
-   if( ival == AST__AND ) {
-      comment = "Regions combined using Boolean AND";
-   } else if( ival == AST__OR ) {
-      comment = "Regions combined using Boolean OR";
-   } else if( ival == AST__XOR ) {
-      comment = "Regions combined using Boolean XOR";
-   } else {
-      comment = "Regions combined using unknown operator";
-   }
-   astWriteInt( channel, "Operator", 1, 0, ival, comment );
-
-/* First Region. */
-/* -------------- */
-   astWriteObject( channel, "RegionA", 1, 1, reg1,
-                   "First component Region" );
-
-/* Second Region. */
-/* --------------- */
-   astWriteObject( channel, "RegionB", 1, 1, reg2,
-                   "Second component Region" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsACmpRegion and astCheckCmpRegion functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(CmpRegion,Region)
-astMAKE_CHECK(CmpRegion)
-
-AstCmpRegion *astCmpRegion_( void *region1_void, void *region2_void, int oper,
-                             const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astCmpRegion
-
-*  Purpose:
-*     Create a CmpRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstCmpRegion *astCmpRegion( AstRegion *region1, AstRegion *region2, 
-*                                 int oper, const char *options, ..., int *status )
-
-*  Class Membership:
-*     CmpRegion constructor.
-
-*  Description:
-*     This function creates a new CmpRegion and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     region1
-*        Pointer to the first Region.
-*     region2
-*        Pointer to the second Region.
-*     oper
-*        The boolean operator with which to combine the two Regions. Either
-*        AST__AND or AST__OR.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new CmpRegion. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new CmpRegion.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic CmpRegion constructor which is
-*     available via the protected interface to the CmpRegion class.  A
-*     public interface is provided by the astCmpRegionId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "region1" and "region2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpRegion *new;              /* Pointer to new CmpRegion */
-   AstRegion *region1;             /* Pointer to first Region structure */
-   AstRegion *region2;             /* Pointer to second Region structure */
-   va_list args;                   /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Region structures provided. */
-   region1 = astCheckRegion( region1_void );
-   region2 = astCheckRegion( region2_void );
-   if ( astOK ) {
-
-/* Initialise the CmpRegion, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitCmpRegion( NULL, sizeof( AstCmpRegion ), !class_init, 
-                              &class_vtab, "CmpRegion", region1, region2, 
-                              oper );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new CmpRegion's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new CmpRegion. */
-   return new;
-}
-
-AstCmpRegion *astCmpRegionId_( void *region1_void, void *region2_void, 
-                               int oper, const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astCmpRegion
-f     AST_CMPREGION
-
-*  Purpose:
-*     Create a CmpRegion.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "cmpregion.h"
-c     AstCmpRegion *astCmpRegion( AstRegion *region1, AstRegion *region2, 
-c                                 int oper, const char *options, ... )
-f     RESULT = AST_CMPREGION( REGION1, REGION2, OPER, OPTIONS, STATUS )
-
-*  Class Membership:
-*     CmpRegion constructor.
-
-*  Description:
-*     This function creates a new CmpRegion and optionally initialises
-*     its attributes.
-*
-*     A CmpRegion is a Region which allows two component
-*     Regions (of any class) to be combined to form a more complex 
-*     Region. This combination may be performed a boolean AND, OR 
-*     or XOR (exclusive OR) operator. If the AND operator is 
-*     used, then a position is inside the CmpRegion only if it is 
-*     inside both of its two component Regions. If the OR operator is 
-*     used, then a position is inside the CmpRegion if it is inside 
-*     either (or both) of its two component Regions. If the XOR operator 
-*     is used, then a position is inside the CmpRegion if it is inside 
-*     one but not both of its two component Regions. Other operators can
-*     be formed by negating one or both component Regions before using 
-*     them to construct a new CmpRegion.
-*
-*     The two component Region need not refer to the same coordinate
-*     Frame, but it must be possible for the 
-c     astConvert 
-f     AST_CONVERT 
-*     function to determine a Mapping between them (an error will be
-*     reported otherwise when the CmpRegion is created). For instance,
-*     a CmpRegion may combine a Region defined within an ICRS SkyFrame
-*     with a Region defined within a Galactic SkyFrame. This is
-*     acceptable because the SkyFrame class knows how to convert between
-*     these two systems, and consequently the 
-c     astConvert 
-f     AST_CONVERT 
-*     function will also be able to convert between them. In such cases,
-*     the second component Region will be mapped into the coordinate Frame
-*     of the first component Region, and the Frame represented by the 
-*     CmpRegion as a whole will be the Frame of the first component Region.
-*
-*     Since a CmpRegion is itself a Region, it can be used as a
-*     component in forming further CmpRegions. Regions of arbitrary
-*     complexity may be built from simple individual Regions in this
-*     way.
-
-*  Parameters:
-c     region1
-f     REGION1 = INTEGER (Given)
-*        Pointer to the first component Region.
-c     region2
-f     REGION2 = INTEGER (Given)
-*        Pointer to the second component Region. This Region will be
-*        transformed into the coordinate Frame of the first region before 
-*        use. An error will be reported if this is not possible.
-c     oper
-f     OPER = INTEGER (Given)
-*        The boolean operator with which to combine the two Regions. This
-*        must be one of the symbolic constants AST__AND, AST__OR or AST__XOR.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new CmpRegion. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new CmpRegion. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astCmpRegion()
-f     AST_CMPREGION = INTEGER
-*        A pointer to the new CmpRegion.
-
-*  Notes:
-*     - If one of the supplied Regions has an associated uncertainty,
-*     that uncertainty will also be used for the returned CmpRegion.
-*     If both supplied Regions have associated uncertainties, the
-*     uncertainty associated with the first Region will be used for the 
-*     returned CmpRegion.
-*     - Deep copies are taken of the supplied Regions. This means that
-*     any subsequent changes made to the component Regions using the 
-*     supplied pointers will have no effect on the CmpRegion.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astCmpRegion constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astCmpRegion_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "region1" and "region2" parameters
-*     are of type (void *) and are converted from an ID value to a
-*     pointer and validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astCmpRegion_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstCmpRegion *new;              /* Pointer to new CmpRegion */
-   AstRegion *region1;             /* Pointer to first Region structure */
-   AstRegion *region2;             /* Pointer to second Region structure */
-   va_list args;                   /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain the Region pointers from the ID's supplied and validate the
-   pointers to ensure they identify valid Regions. */
-   region1 = astVerifyRegion( astMakePointer( region1_void ) );
-   region2 = astVerifyRegion( astMakePointer( region2_void ) );
-   if ( astOK ) {
-
-/* Initialise the CmpRegion, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitCmpRegion( NULL, sizeof( AstCmpRegion ), !class_init, 
-                              &class_vtab, "CmpRegion", region1, region2, 
-                              oper );
-
-/* If successful, note that the virtual function table has been initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new CmpRegion's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new CmpRegion. */
-   return astMakeId( new );
-}
-
-AstCmpRegion *astInitCmpRegion_( void *mem, size_t size, int init,
-                                 AstCmpRegionVtab *vtab, const char *name,
-                                 AstRegion *region1, AstRegion *region2, 
-                                 int oper, int *status ) {
-/*
-*+
-*  Name:
-*     astInitCmpRegion
-
-*  Purpose:
-*     Initialise a CmpRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstCmpRegion *astInitCmpRegion_( void *mem, size_t size, int init,
-*                                      AstCmpRegionVtab *vtab, const char *name,
-*                                      AstRegion *region1, AstRegion *region2, 
-*                                      int oper )
-
-*  Class Membership:
-*     CmpRegion initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new CmpRegion object. It allocates memory (if necessary) to
-*     accommodate the CmpRegion plus any additional data associated with the
-*     derived class. It then initialises a CmpRegion structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a CmpRegion at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the CmpRegion is to be initialised.
-*        This must be of sufficient size to accommodate the CmpRegion data
-*        (sizeof(CmpRegion)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the CmpRegion (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        CmpRegion structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the CmpRegion's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new CmpRegion.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     region1
-*        Pointer to the first Region.
-*     region2
-*        Pointer to the second Region.
-*     oper
-*        The boolean operator to use. Must be one of AST__AND, AST__OR or
-*        AST__XOR.
-
-*  Returned Value:
-*     A pointer to the new CmpRegion.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *new;            /* Pointer to new CmpRegion */
-   AstFrame *frm;                /* Frame encapsulated by first Region */
-   AstFrameSet *fs;              /* FrameSet connecting supplied Regions */
-   AstMapping *map;              /* Mapping between two supplied Regions */
-   AstMapping *smap;             /* Simplified Mapping between two supplied Regions */
-   AstRegion *new_reg1;          /* Replacement for first region */
-   AstRegion *new_reg2;          /* Replacement for second region */
-   AstRegion *reg1;              /* First Region to store in the CmpRegion */
-   AstRegion *reg2;              /* Second Region to store in the CmpRegion */
-   AstRegion *xor1;              /* Copy of first supplied Region or NULL */
-   AstRegion *xor2;              /* Copy of second supplied Region or NULL */
-   int i;                        /* Loop count */
-   int used_oper;                /* The boolean operation actually used */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitCmpRegionVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the supplied oper value. */
-   if( oper != AST__AND && oper != AST__OR && oper != AST__XOR && astOK ) {
-      astError( AST__INTRD, "astInitCmpRegion(%s): Illegal "
-                "boolean operator value (%d) supplied.", status, name, oper );
-   }
-
-/* Take copies of the supplied Regions. */
-   reg1 = astCopy( region1 );
-   reg2 = astCopy( region2 );
-
-/* Get the Mapping from the second to the first Region. */
-   fs = astConvert( reg2, reg1, "" );
-
-/* Report an error if not possible. */
-   if( fs == NULL ) {
-      frm = NULL;
-      if( astOK ) astError( AST__INTRD, "astInitCmpRegion(%s): No Mapping can "
-                            "be found between the two supplied Regions.", status, name );
-
-/* Otherwise, map the second Region into the Frame of the first (unless
-   they are already in the same Frame). This results in both component
-   Frames having the same current Frame. This current Frame is used as the
-   encapsulated Frame within the parent Region structure. */
-   } else {
-      frm = astGetFrame( fs, AST__CURRENT );
-      map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-      smap = astSimplify( map );
-      if( !astIsAUnitMap( smap ) ) {
-         new_reg2 = astMapRegion( reg2, smap, frm );
-         (void) astAnnul( reg2 );
-         reg2 = new_reg2;
-      }
-      smap = astAnnul( smap );
-      map = astAnnul( map );
-      fs = astAnnul( fs );
-   }
-
-/* The CmpRegion class does not implement XOR directly (as it does for
-   AND and OR). Instead, when requested to create an XOR CmpRegion, it
-   creates a CmpRegion that uses AND and OR to simulate XOR. The top
-   level XOR CmpRegion actually uses AST__OR and the two component
-   regions within it are CmpRegions formed by combing the two supplied
-   Regions (one being negated first) using AND. Create the required
-   component Regions. */
-   if( oper == AST__XOR ) {
-      astNegate( reg1 );
-      new_reg1 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND, " ", 
-                                             status );
-      astNegate( reg1 );
-
-      astNegate( reg2 );
-      new_reg2 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND, " ", 
-                                             status );
-      astNegate( reg2 );
-
-      xor1 = reg1;
-      xor2 = reg2;
-
-      reg1 = new_reg1;
-      reg2 = new_reg2;
-
-      used_oper = AST__OR;
-
-/* For AND and OR, use the supplied operator. */
-   } else {
-      xor1 = NULL;
-      xor2 = NULL;
-      used_oper = oper;
-   }
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the CmpRegion structure, allocating memory if necessary. A NULL
-   PointSet is suppled as the two component Regions will perform the function
-   of defining the Region shape. The base Frame of the FrameSet in the
-   parent Region structure will be the same as the current Frames of the 
-   FrameSets in the two component Regions. */
-   if ( astOK ) {
-      new = (AstCmpRegion *) astInitRegion( mem, size, 0,
-                                          (AstRegionVtab *) vtab, name,
-                                          frm, NULL, NULL );
-
-/* Initialise the CmpRegion data. */
-/* --------------------------- */
-/* Store pointers to the component Regions. */
-      new->region1 = astClone( reg1 );
-      new->region2 = astClone( reg2 );
-
-/* Note the operator used to combine the somponent Regions. */
-      new->oper = used_oper;
-
-/* If we are creating an XOR CmpRegion, save copies of the supplied
-   Regions (i.e. the supplied Regions which are XORed). These will not 
-   be the same as "reg1" and "reg2" since each of those two regions will
-   be CmpRegions that combine the supplied Regions using AST__AND. */
-      if( oper == AST__XOR ) {
-         new->xor1 = xor1;
-         new->xor2 = xor2;
-      } else {
-         new->xor1 = NULL;
-         new->xor2 = NULL;
-      } 
-
-/* Initialised cached values to show they have not yet been found. */
-      for( i = 0; i < 2; i++ ) {
-         new->rvals[ i ] = NULL;
-         new->offs[ i ] = NULL;
-         new->nbreak[ i ] = 0;
-         new->d0[ i ] = AST__BAD;
-      }
-
-/* If the base->current Mapping in the FrameSet within each component Region 
-   is a UnitMap, then the FrameSet does not need to be included in the
-   Dump of the new CmpRegion. Set the RegionFS attribute of the component
-   Region to zero to flag this. */
-      map = astGetMapping( reg1->frameset, AST__BASE, AST__CURRENT );
-      if( astIsAUnitMap( map ) ) astSetRegionFS( reg1, 0 );
-      map = astAnnul( map );
-
-      map = astGetMapping( reg2->frameset, AST__BASE, AST__CURRENT );
-      if( astIsAUnitMap( map ) ) astSetRegionFS( reg2, 0 );
-      map = astAnnul( map );
-
-/* Copy attribute values from the first component Region to the parent
-   Region. */
-      if( astTestMeshSize( new->region1 ) ) {
-         astSetMeshSize( new,  astGetMeshSize( new->region1 ) );
-      }
-      if( astTestClosed( new->region1 ) ) {
-         astSetClosed( new,  astGetClosed( new->region1 ) );
-      }
-
-/* If an error occurred, clean up by annulling the Region pointers and
-   deleting the new object. */
-      if ( !astOK ) {
-         new->region1 = astAnnul( new->region1 );
-         new->region2 = astAnnul( new->region2 );
-         new = astDelete( new );
-      }
-   }
-
-/* Free resources */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-   if( frm ) frm = astAnnul( frm );
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstCmpRegion *astLoadCmpRegion_( void *mem, size_t size,
-                                 AstCmpRegionVtab *vtab, const char *name,
-                                 AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadCmpRegion
-
-*  Purpose:
-*     Load a CmpRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     AstCmpRegion *astLoadCmpRegion( void *mem, size_t size,
-*                                     AstCmpRegionVtab *vtab, const char *name,
-*                                     AstChannel *channel )
-
-*  Class Membership:
-*     CmpRegion loader.
-
-*  Description:
-*     This function is provided to load a new CmpRegion using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     CmpRegion structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a CmpRegion at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the CmpRegion is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        CmpRegion data (sizeof(CmpRegion)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the CmpRegion (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the CmpRegion structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstCmpRegion) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new CmpRegion. If this is NULL, a pointer to
-*        the (static) virtual function table for the CmpRegion class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "CmpRegion" is used instead.
-
-*  Returned Value:
-*     A pointer to the new CmpRegion.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstCmpRegion *new;            /* Pointer to the new CmpRegion */
-   AstRegion *reg1;              /* First Region read from dump */
-   AstRegion *reg2;              /* Second Region read from dump */
-   AstFrame *f1;                 /* Base Frame in parent Region */
-   AstRegion *creg;              /* Pointer to component Region */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   int i;                        /* Loop count */
-   int oper;                     /* The operator to include in the dump */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this CmpRegion. In this case the
-   CmpRegion belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstCmpRegion );
-      vtab = &class_vtab;
-      name = "CmpRegion";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitCmpRegionVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built CmpRegion. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "CmpRegion" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Operator */
-/* -------- */
-      oper = astReadInt( channel, "operator", AST__AND );
-
-/* First Region. */
-/* -------------- */
-      reg1 = astReadObject( channel, "regiona", NULL );
-
-/* Second Region. */
-/* --------------- */
-      reg2 = astReadObject( channel, "regionb", NULL );
-
-/* Initialised cached values to show they have not yet been found. */
-      for( i = 0; i < 2; i++ ) {
-         new->rvals[ i ] = NULL;
-         new->offs[ i ] = NULL;
-         new->nbreak[ i ] = 0;
-         new->d0[ i ] = AST__BAD;
-      }
-
-/* The CmpRegion class does not implement XOR directly (as it does for
-   AND and OR). Instead, when requested to create an XOR CmpRegion, it
-   creates a CmpRegion that uses AND and OR to simulate XOR. The top
-   level XOR CmpRegion actually uses AST__OR and the two component
-   regions within it are CmpRegions formed by combing the two supplied
-   Regions (one being negated first) using AND. Create the required
-   component Regions. */
-      if( oper == AST__XOR ) {
-         astNegate( reg1 );
-         new->region1 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND, 
-                                                    " ", status );
-         astNegate( reg1 );
-   
-         astNegate( reg2 );
-         new->region2 = (AstRegion *) astCmpRegion( reg1, reg2, AST__AND, 
-                                                    " ", status );
-         astNegate( reg2 );
-   
-         new->xor1 = reg1;
-         new->xor2 = reg2;
-   
-         new->oper = AST__OR;
-   
-/* For AND and OR, use the supplied Regions and operator. */
-      } else {
-         new->region1 = reg1;
-         new->region2 = reg2;
-         new->xor1 = NULL;
-         new->xor2 = NULL;
-         new->oper = oper;
-      }
-
-/* If either component Region has a dummy FrameSet rather than the correct
-   FrameSet, the correct FrameSet will have copies of the base Frame of the 
-   new CmpRegion as both its current and base Frames, connected by a UnitMap 
-   (this is equivalent to a FrameSet containing a single Frame). However if 
-   the new CmpRegion being loaded has itself got a dummy FrameSet, then we do 
-   not do this since we do not yet know what the correct FrameSet is. In this 
-   case we wait until the parent Region invokes the astSetRegFS method on the 
-   new CmpRegion. */
-      if( !astRegDummyFS( new ) ) {
-         f1 = astGetFrame( ((AstRegion *) new)->frameset, AST__BASE );
-         creg = new->region1;
-         if( astRegDummyFS( creg ) ) astSetRegFS( creg, f1 );
-         creg = new->region2;
-         if( astRegDummyFS( creg ) ) astSetRegFS( creg, f1 );
-         f1 = astAnnul( f1 );
-      }
-
-/* If an error occurred, clean up by deleting the new CmpRegion. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new CmpRegion pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-int astCmpRegionList_( AstCmpRegion *this, int *nreg, AstRegion ***reg_list,
-                       int *status ) {
-   if ( !astOK ) return AST__AND;
-   return (**astMEMBER(this,CmpRegion,CmpRegionList))( this, nreg, reg_list, 
-                                                       status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/cmpregion.h b/ast-5.3-1/cmpregion.h
deleted file mode 100644
index 7c782b3..0000000
--- a/ast-5.3-1/cmpregion.h
+++ /dev/null
@@ -1,250 +0,0 @@
-#if !defined( CMPREGION_INCLUDED ) /* Include this file only once */
-#define CMPREGION_INCLUDED
-/*
-*+
-*  Name:
-*     cmpregion.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the CmpRegion class.
-
-*  Invocation:
-*     #include "cmpregion.h"
-
-*  Description:
-*     This include file defines the interface to the CmpRegion class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The CmpRegion class implement a Region which represents a simple interval
-*     on each axis of the encapsulated Frame
-
-*  Inheritance:
-*     The CmpRegion class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-OCT-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-/* Boolean operators */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__AND 1
-#define AST__OR 2
-#define AST__XOR 3
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* CmpRegion structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstCmpRegion {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstRegion *region1;           /* First component Region */
-   AstRegion *region2;           /* Second component Region */
-   int oper;                     /* Boolean operator */
-   double *rvals[ 2 ];           /* Used boundary length at each break */
-   double *offs[ 2 ];            /* Jump at each break */
-   int nbreak[ 2 ];              /* Number of breaks */
-   double d0[ 2 ];               /* Total used boundary length */
-   AstRegion *xor1;              /* First XORed Region */
-   AstRegion *xor2;              /* Second XORed Region */
-
-} AstCmpRegion;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstCmpRegionVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* CmpRegionList)(  AstCmpRegion *, int *, AstRegion ***, int * );
-
-} AstCmpRegionVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstCmpRegionGlobals {
-   AstCmpRegionVtab Class_Vtab;
-   int Class_Init;
-} AstCmpRegionGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitCmpRegionGlobals_( AstCmpRegionGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(CmpRegion)          /* Check class membership */
-astPROTO_ISA(CmpRegion)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstCmpRegion *astCmpRegion_( void *, void *, int, const char *, int *, ...);
-#else
-AstCmpRegion *astCmpRegionId_( void *, void *, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstCmpRegion *astInitCmpRegion_( void *, size_t, int, AstCmpRegionVtab *,
-                     const char *, AstRegion *, AstRegion *, int, int * );
-
-/* Vtab initialiser. */
-void astInitCmpRegionVtab_( AstCmpRegionVtab *, const char *, int * );
-
-/* Loader. */
-AstCmpRegion *astLoadCmpRegion_( void *, size_t, AstCmpRegionVtab *,
-                                 const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-int astCmpRegionList_(  AstCmpRegion *, int *, AstRegion ***, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckCmpRegion(this) astINVOKE_CHECK(CmpRegion,this,0)
-#define astVerifyCmpRegion(this) astINVOKE_CHECK(CmpRegion,this,1)
-
-/* Test class membership. */
-#define astIsACmpRegion(this) astINVOKE_ISA(CmpRegion,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astCmpRegion astINVOKE(F,astCmpRegion_)
-#else
-#define astCmpRegion astINVOKE(F,astCmpRegionId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitCmpRegion(mem,size,init,vtab,name,reg1,reg2,oper) \
-astINVOKE(O,astInitCmpRegion_(mem,size,init,vtab,name,reg1,reg2,oper,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitCmpRegionVtab(vtab,name) astINVOKE(V,astInitCmpRegionVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadCmpRegion(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadCmpRegion_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckCmpRegion to validate CmpRegion pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astCmpRegionList(this,nreg,reg_list) \
-astINVOKE(V,astCmpRegionList_(this,nreg,reg_list,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/compile b/ast-5.3-1/compile
deleted file mode 100755
index 1b1d232..0000000
--- a/ast-5.3-1/compile
+++ /dev/null
@@ -1,142 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
-
-scriptversion=2005-05-14.22
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey at cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake at gnu.org> or send patches to
-# <automake-patches at gnu.org>.
-
-case $1 in
-  '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand `-c -o'.
-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file `INSTALL'.
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "compile $scriptversion"
-    exit $?
-    ;;
-esac
-
-ofile=
-cfile=
-eat=
-
-for arg
-do
-  if test -n "$eat"; then
-    eat=
-  else
-    case $1 in
-      -o)
-	# configure might choose to run compile as `compile cc -o foo foo.c'.
-	# So we strip `-o arg' only if arg is an object.
-	eat=1
-	case $2 in
-	  *.o | *.obj)
-	    ofile=$2
-	    ;;
-	  *)
-	    set x "$@" -o "$2"
-	    shift
-	    ;;
-	esac
-	;;
-      *.c)
-	cfile=$1
-	set x "$@" "$1"
-	shift
-	;;
-      *)
-	set x "$@" "$1"
-	shift
-	;;
-    esac
-  fi
-  shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-  # If no `-o' option was seen then we might have been invoked from a
-  # pattern rule where we don't need one.  That is ok -- this is a
-  # normal compilation that the losing compiler can handle.  If no
-  # `.c' file was seen then we are probably linking.  That is also
-  # ok.
-  exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
-while true; do
-  if mkdir "$lockdir" >/dev/null 2>&1; then
-    break
-  fi
-  sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
-  mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/component.xml.in b/ast-5.3-1/component.xml.in
deleted file mode 100644
index 35f79c2..0000000
--- a/ast-5.3-1/component.xml.in
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE component SYSTEM "componentinfo.dtd">
-
-<component id="@PACKAGE@" support="S">
-  <version>@PACKAGE_VERSION@</version>
-  <path>libraries/ast</path>
-  <description>WCS library</description>
-  <abstract>
-    <p>The AST library provides a comprehensive range of facilities for
-      attaching world coordinate systems to astronomical data, for
-      retrieving and interpreting that information in a variety of formats,
-      including FITS-WCS, and for generating graphical output based on it.</p>
-    <p>This library should be of interest to anyone writing
-      astronomical applications which need to manipulate coordinate system
-      data, especially celestial or spectral coordinate systems. AST
-      is portable and environment-independent.</p>
-  </abstract>
-  <dependencies @STAR_DEPENDENCIES_ATTRIBUTES@>
-    @STAR_DEPENDENCIES_CHILDREN@
-  </dependencies>
-  <developers>
-    <person>
-      <name>Rodney Warren-Smith</name>
-      <uname>rfws</uname>
-    </person>
-    <person>
-      <name>David Berry</name>
-      <uname>dsb</uname>
-      <email>dsb at ast.man.ac.uk</email>
-      <role>owner</role>
-    </person>
-    <person>
-      <name>Norman Gray</name>
-      <uname>nxg</uname>
-      <email>norman at astro.gla.ac.uk</email>
-    </person>
-  </developers>
-  <documentation>@STAR_DOCUMENTATION@</documentation>
-  <bugreports>@PACKAGE_BUGREPORT@</bugreports>
-  <copyright>
-    <year></year>
-    <name>Council for the Central Laboratory of the Research Councils</name>
-  </copyright>
-</component>
diff --git a/ast-5.3-1/config.guess b/ast-5.3-1/config.guess
deleted file mode 100755
index 21a7ad8..0000000
--- a/ast-5.3-1/config.guess
+++ /dev/null
@@ -1,1495 +0,0 @@
-#! /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 Free Software Foundation, Inc.
-
-timestamp='2005-05-15'
-
-# 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 <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <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
-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 -q "$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 ;'
-
-# 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 ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-	        os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit ;;
-    amd64:OpenBSD:*:*)
-	echo x86_64-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    cats:OpenBSD:*:*)
-	echo arm-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    hp300:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    luna88k:OpenBSD:*:*)
-    	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    mvmeppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    sgi:OpenBSD:*:*)
-	echo mips64-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    sun3:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerppc-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 ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <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:*:[45])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <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
-	    # avoid double evaluation of $set_cc_for_build
-	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <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:*:*)
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    i*:MINGW*:* | i*:windows32*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    x86:Interix*:[34]*)
-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    cris:Linux:*:*)
-	echo cris-axis-linux-gnu
-	exit ;;
-    crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
-	exit ;;
-    frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    mips:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips
-	#undef mipsel
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
-	esac
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
-	exit ;;
-    sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
-	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#ifdef __INTEL_COMPILER
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </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 i386.
-	echo i386-pc-msdosdjgpp
-        exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <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 ;;
-    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 ;;
-    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
-	    *86) UNAME_PROCESSOR=i686 ;;
-	    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 ;;
-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://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-
-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/ast-5.3-1/config.h.in b/ast-5.3-1/config.h.in
deleted file mode 100644
index 50a5837..0000000
--- a/ast-5.3-1/config.h.in
+++ /dev/null
@@ -1,104 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the `backtrace' function. */
-#undef HAVE_BACKTRACE
-
-/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ISNAN
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <execinfo.h> header file. */
-#undef HAVE_EXECINFO_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `isnan' function. */
-#undef HAVE_ISNAN
-
-/* Define to 1 if you have the `pthread' library (-lpthread). */
-#undef HAVE_LIBPTHREAD
-
-/* Define to 1 if the system has the type `long double'. */
-#undef HAVE_LONG_DOUBLE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* The sscanf shows the non-ANSI behaviour reported by Bill Joye */
-#undef HAVE_NONANSI_SSCANF
-
-/* Define to 1 if the Fortran compiler supports the VAX %LOC extension */
-#undef HAVE_PERCENTLOC
-
-/* Use the starmem library for memory management */
-#undef HAVE_STAR_MEM_H
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strerror_r' function. */
-#undef HAVE_STRERROR_R
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strtok_r' function. */
-#undef HAVE_STRTOK_R
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the <varargs.h> header file. */
-#undef HAVE_VARARGS_H
-
-/* enable AST memory leak debugging functions in memory.c */
-#undef MEM_DEBUG
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* The size of a `void*', as computed by sizeof. */
-#undef SIZEOF_VOIDP
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Type of Fortran CNF TRAIL argument */
-#undef TRAIL_TYPE
-
-/* Version number of package */
-#undef VERSION
diff --git a/ast-5.3-1/config.sub b/ast-5.3-1/config.sub
deleted file mode 100755
index 519f2cd..0000000
--- a/ast-5.3-1/config.sub
+++ /dev/null
@@ -1,1570 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-timestamp='2005-05-12'
-
-# 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 ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <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
-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-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
-		os=
-		basic_machine=$1
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
- 	-chorusrdb)
- 		os=-chorusrdb
-		basic_machine=$1
- 		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-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/'`
-		;;
-	-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 \
-	| bfin \
-	| c4x | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
-	| mips64orion | mips64orionel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| msp430 \
-	| ns16k | ns32k \
-	| openrisc | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-	| pyramid \
-	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b \
-	| strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
-	| we32k \
-	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-	| z8k)
-		basic_machine=$basic_machine-unknown
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-
-	# 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-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| msp430-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-	| pyramid-* \
-	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tron-* \
-	| v850-* | v850e-* | vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-	| xstormy16-* | xtensa-* \
-	| ymp-* \
-	| z8k-*)
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-    	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16c)
-		basic_machine=cr16c-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	mingw32)
-		basic_machine=i386-pc
-		os=-mingw32
-		;;
-	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
-		;;
-	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
-		;;
-	or32 | or32-*)
-		basic_machine=or32-unknown
-		os=-coff
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	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
-		;;
-	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
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-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*)
-	# 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* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-        -os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-        -tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-kaos*)
-		os=-kaos
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	*-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
-		;;
-	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
-		;;
-	*-ibm)
-		os=-aix
-		;;
-    	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/ast-5.3-1/configure b/ast-5.3-1/configure
deleted file mode 100755
index 9010b10..0000000
--- a/ast-5.3-1/configure
+++ /dev/null
@@ -1,25174 +0,0 @@
-#! /bin/sh
-# From configure.ac Revision.
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by Starlink Autoconf 2.59 for ast 5.3-1.
-#
-# Report bugs to <ussc at star.rl.ac.uk>.
-#
-# Copyright (C) 2003 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 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+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; 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
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# 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
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  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
-
-       ;;
-  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
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); 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 sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# 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'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-echo=${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 <<EOF
-$*
-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 "$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 &&
-       echo_test_string="`eval $cmd`" &&
-       (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.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
-tagnames=${tagnames+${tagnames},}CXX
-
-tagnames=${tagnames+${tagnames},}F77
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME='ast'
-PACKAGE_TARNAME='ast'
-PACKAGE_VERSION='5.3-1'
-PACKAGE_STRING='ast 5.3-1'
-PACKAGE_BUGREPORT='ussc at star.rl.ac.uk'
-
-ac_unique_file="ast_link.in"
-ac_default_prefix=/usr/local
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar STARLINK STAR_CPPFLAGS STAR_FCFLAGS STAR_FFLAGS STAR_LDFLAGS build build_cpu build_vendor build_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE FC FCFLAGS ac_ct_FC C_FC_FCLINK_MAGIC C_FC_PPFC_FCLINK_MAGIC stardocsdir staretcdir starexamplesdir starfacsdir starhelpdir starnewsdir STAR_DEPENDENCIES_ATTRIBUTES STAR_DEPENDENCIES_CHILDREN STAR_DOCUMENTATION PACKAGE_VERSION_MAJOR PACKAGE_VERSION_MINOR PACKAGE_VERSION_RELEASE PACKAGE_VERSION_INTEGER STAR_MANIFEST_DIR GIT STAR_SOURCE_ROOT_DIR PREDIST PAX TAR CPP host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL NOPIC_TRUE NOPIC_FALSE NOTHREADS_TRUE NOTHREADS_FALSE THREADS FCLIBS PERL REAL_FUNCTION_TYPE TRAIL_TYPE MESSGEN LATEX2DVI STAR_LATEX_DOCUMENTATION STAR2HTML PROLAT LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# 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.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-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
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -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 | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$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 ;;
-
-  -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 ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    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 ;;
-
-  -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=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 ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      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'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-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
-    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
-
-
-# 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 its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    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
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_STARLINK_set=${STARLINK+set}
-ac_env_STARLINK_value=$STARLINK
-ac_cv_env_STARLINK_set=${STARLINK+set}
-ac_cv_env_STARLINK_value=$STARLINK
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_FC_set=${FC+set}
-ac_env_FC_value=$FC
-ac_cv_env_FC_set=${FC+set}
-ac_cv_env_FC_value=$FC
-ac_env_FCFLAGS_set=${FCFLAGS+set}
-ac_env_FCFLAGS_value=$FCFLAGS
-ac_cv_env_FCFLAGS_set=${FCFLAGS+set}
-ac_cv_env_FCFLAGS_value=$FCFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-ac_env_CXX_set=${CXX+set}
-ac_env_CXX_value=$CXX
-ac_cv_env_CXX_set=${CXX+set}
-ac_cv_env_CXX_value=$CXX
-ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_env_CXXFLAGS_value=$CXXFLAGS
-ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_cv_env_CXXFLAGS_value=$CXXFLAGS
-ac_env_CXXCPP_set=${CXXCPP+set}
-ac_env_CXXCPP_value=$CXXCPP
-ac_cv_env_CXXCPP_set=${CXXCPP+set}
-ac_cv_env_CXXCPP_value=$CXXCPP
-ac_env_F77_set=${F77+set}
-ac_env_F77_value=$F77
-ac_cv_env_F77_set=${F77+set}
-ac_cv_env_F77_value=$F77
-ac_env_FFLAGS_set=${FFLAGS+set}
-ac_env_FFLAGS_value=$FFLAGS
-ac_cv_env_FFLAGS_set=${FFLAGS+set}
-ac_cv_env_FFLAGS_value=$FFLAGS
-ac_env_MESSGEN_set=${MESSGEN+set}
-ac_env_MESSGEN_value=$MESSGEN
-ac_cv_env_MESSGEN_set=${MESSGEN+set}
-ac_cv_env_MESSGEN_value=$MESSGEN
-ac_env_STAR2HTML_set=${STAR2HTML+set}
-ac_env_STAR2HTML_value=$STAR2HTML
-ac_cv_env_STAR2HTML_set=${STAR2HTML+set}
-ac_cv_env_STAR2HTML_value=$STAR2HTML
-ac_env_PROLAT_set=${PROLAT+set}
-ac_env_PROLAT_value=$PROLAT
-ac_cv_env_PROLAT_set=${PROLAT+set}
-ac_cv_env_PROLAT_value=$PROLAT
-
-#
-# 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 ast 5.3-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 \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-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]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --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]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_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 ast 5.3-1:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --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)
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-starlink         Starlink tree to use (default
-                          ${STARLINK:=/stardev/git/starlink/star})
-  --without-stardocs      Do not install built documentation (default --with)
-  --with-starmem          use starmem library for memory management
-  --with-memdebug         enable AST memory leak debugging functions
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-tags[=TAGS]
-                          include additional configurations [automatic]
- --without-pthreads   Build package without POSIX threads support
-
-Some influential environment variables:
-  STARLINK    Location of a current Starlink tree (used if necessary)
-  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>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  FC          Fortran compiler command
-  FCFLAGS     Fortran compiler flags
-  CPP         C preprocessor
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  CXXCPP      C++ preprocessor
-  F77         Fortran 77 compiler command
-  FFLAGS      Fortran 77 compiler flags
-  MESSGEN     Location of the messgen application
-  STAR2HTML   Location of the star2html application
-  PROLAT      Location of the prolat application
-
-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 <ussc at star.rl.ac.uk>.
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style 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
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd $ac_popdir
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-ast configure 5.3-1
-generated by Starlink Autoconf 2.59
-
-Copyright (C) 2003 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 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by ast $as_me 5.3-1, which was
-generated by Starlink Autoconf 2.59.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-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`
-hostinfo               = `(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=.
-  echo "PATH: $as_dir"
-done
-
-} >&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_sep=
-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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$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
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h | sort
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >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
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  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.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-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 `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-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
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`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.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-am__api_version="1.9"
-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
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# 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.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$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
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-done
-
-
-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.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL=$ac_install_sh
-  fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$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'
-
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# 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".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
-   fi
-
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}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 $.  echo might interpret backslashes.
-# By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
-fi
-
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AWK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$AWK" && break
-done
-
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.make <<\_ACEOF
-all:
-	@echo 'ac_maketemp="$(MAKE)"'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
-  eval ac_cv_prog_make_${ac_make}_set=yes
-else
-  eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-  SET_MAKE=
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
-   { (exit 1); exit 1; }; }
-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='ast'
- VERSION='5.3-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"}
-
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-
-# 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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  STRIP=$ac_ct_STRIP
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-
-# 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 -'
-
-
-
-
-
-
-
-
-#   Include defaults for Starlink configurations
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
-   { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
-  ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-DEPDIR="${am__leading_dot}deps"
-
-          ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
-fi
-
-
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking or --disable-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$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"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-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
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out 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.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
-	break;;
-    * )
-	break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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 | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$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
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 -std1 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 -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 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
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext 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
-
-depcc="$CC"   am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-  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
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} 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
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$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=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran f90 xlf90 pgf90 epcf90 g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77'
-  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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_FC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$FC"; then
-  ac_cv_prog_FC="$FC" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-FC=$ac_cv_prog_FC
-if test -n "$FC"; then
-  echo "$as_me:$LINENO: result: $FC" >&5
-echo "${ECHO_T}$FC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$FC" && break
-  done
-fi
-if test -z "$FC"; then
-  ac_ct_FC=$FC
-  for ac_prog in g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran f90 xlf90 pgf90 epcf90 g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77'
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_FC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_FC"; then
-  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_FC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_FC=$ac_cv_prog_ac_ct_FC
-if test -n "$ac_ct_FC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_FC" >&5
-echo "${ECHO_T}$ac_ct_FC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_FC" && break
-done
-
-  FC=$ac_ct_FC
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:3221:" \
-     "checking for Fortran compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-rm -f a.out
-
-
-ac_mod_ext=
-ac_fc_mod_uppercase=no
-cat > conftest.$ac_ext << \_ACEOF
-      module conftest
-       implicit none
-       integer :: i
-      end module conftest
-_ACEOF
-{ (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-echo "$as_me:$LINENO: checking for suffix of module files" >&5
-echo $ECHO_N "checking for suffix of module files... $ECHO_C" >&6
-for ac_mod_file in conftest.mod conftest.MOD conftest.M CONFTEST.MOD none
-do
-  if test -f $ac_mod_file; then
-    break;
-  fi
-done
-rm -f conftest.$ac_ext conftest.$ac_exe_ext conftest.mod conftest.MOD conftest.M CONFTEST.MOD
-#
-case $ac_mod_file in
-  conftest.mod)
-    ac_mod_ext=mod
-    ;;
-  conftest.MOD)
-    ac_mod_ext=MOD
-    ;;
-  conftest.M)
-    ac_mod_ext=M
-    ;;
-  CONFTEST.MOD)
-    ac_mod_ext=MOD
-    ac_fc_mod_uppercase=yes
-    ;;
-  none)
-    { echo "$as_me:$LINENO: WARNING: Could not find Fortran module file extension." >&5
-echo "$as_me: WARNING: Could not find Fortran module file extension." >&2;}
-    ;;
-esac
-
-if test $ac_mod_file != none; then
-  echo "$as_me:$LINENO: result: $ac_mod_ext" >&5
-echo "${ECHO_T}$ac_mod_ext" >&6
-fi
-if test $ac_fc_mod_uppercase = yes; then
-  { echo "$as_me:$LINENO: Fortran module filenames are uppercase." >&5
-echo "$as_me: Fortran module filenames are uppercase." >&6;}
-fi
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file.  (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6
-if test "${ac_cv_fc_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-      program main
-#ifndef __GNUC__
-       choke me
-#endif
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_fc_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_fc_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FCFLAGS+set}
-ac_save_FFLAGS=$FCFLAGS
-FCFLAGS=
-echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5
-echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_fc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  FCFLAGS=-g
-cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_fc_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_fc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_fc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_fc_g" >&6
-if test "$ac_test_FFLAGS" = set; then
-  FCFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_fc_g = yes; then
-  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
-    FCFLAGS="-g -O2"
-  else
-    FCFLAGS="-g"
-  fi
-else
-  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
-    FCFLAGS="-O2"
-  else
-    FCFLAGS=
-  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
-
-##
-
-
-
-
-
-
-test -n "$_star_per_package_dirs" || _star_per_package_dirs=false
-test -n "$_star_docs_only"        || _star_docs_only=false
-
-
-# Ensure that STARLINK has a value, defaulting to
-# /stardev/git/starlink/star.  Note that this directory may be
-# different from /star, and reflects the value of
-# STARCONF_DEFAULT_STARLINK that the `starconf' package was configured
-# with before its installation.
-#
-# We use $STARLINK as the location of any other Starlink tools we need
-# to use during the building of our packages, and for the location of
-# any manifests we need to check.  It is permissable for it to be
-# different from $(prefix): this is partly because we have no way of
-# enforcing that the two be the same, since the user can set
-# prefix=xxx on the `make install' command line, and partly so that it
-# is possible to make a test version of a new package, using tools
-# from an old installation, but installing in a new place.
-#
-# However, we install software in /stardev/git/starlink/star by
-# default.  This is so even if $STARLINK and STARCONF_DEFAULT_STARLINK
-# are different, because in this case we are planning to use a
-# previous installation in $STARLINK or $STARCONF_DEFAULT_STARLINK,
-# but install the newly built tool elsewhere.
-#
-# In most cases, including the most important case where we are
-# building the tree from scratch, in a checked out directory,
-# STARLINK, STARCONF_DEFAULT_STARLINK and STARCONF_DEFAULT_PREFIX will
-# all be the same.  That's OK because a separate aspect of the build
-# process, respecting the various dependencies expresses in source
-# directories, ensures that we don't use (and install) any Starlink
-# tools in one component before that component has been build and
-# installed.
-
-
-test -n "$STARLINK" || STARLINK=/stardev/git/starlink/star
-
-# Handle the --with-starlink option.  If --with-starlink is present
-# with no argument (the default), we do nothing as this simply
-# indicates that this is part of a Starlink tree.  If it has an
-# argument, then this overrides the location of the Starlink tree.
-# Option --without-starlink or --with-starlink=no indicates that this
-# is being built _not_ as part of a Starlink build (that is, it's
-# being distributed as something other than a Starlink package).  In
-# this case, the variable STARLINK is unset.
-
-# Check whether --with-starlink or --without-starlink was given.
-if test "${with_starlink+set}" = set; then
-  withval="$with_starlink"
-  if test -z "$withval" -o "$withval" = yes; then
-                 : nothing needs to be done
-             elif test "X$withval" = Xno; then
-                 unset STARLINK
-             elif test -d "$withval"; then
-                 STARLINK="$withval"
-             else
-                 { echo "$as_me:$LINENO: WARNING: --with-starlink given nonexistent directory; ignored: using default $STARLINK instead" >&5
-echo "$as_me: WARNING: --with-starlink given nonexistent directory; ignored: using default $STARLINK instead" >&2;}
-             fi
-fi;
-if test -n "$STARLINK"; then
-    { echo "$as_me:$LINENO: Starlink tree located at $STARLINK" >&5
-echo "$as_me: Starlink tree located at $STARLINK" >&6;}
-else
-    { echo "$as_me:$LINENO: Not being built as part of the Starlink tree" >&5
-echo "$as_me: Not being built as part of the Starlink tree" >&6;}
-fi
-
-# Handle --without-stardocs.  Don't build and install documentation.
-# Default is --with-stardocs.
-_star_build_docs=:
-
-# Check whether --with-stardocs or --without-stardocs was given.
-if test "${with_stardocs+set}" = set; then
-  withval="$with_stardocs"
-  if test -z "$withval"; then
-                 _star_build_docs=: # default
-             elif test "X$withval" = Xno; then
-                 _star_build_docs=false
-             elif test "X$withval" = Xyes; then
-                 _star_build_docs=:
-             else
-                 { echo "$as_me:$LINENO: WARNING: bad arg to --with-stardocs: using yes" >&5
-echo "$as_me: WARNING: bad arg to --with-stardocs: using yes" >&2;}
-                 _star_build_docs=:
-             fi
-fi;
-
-if $_star_docs_only; then
-    if $_star_build_docs; then
-        : OK
-    else
-        { echo "$as_me:$LINENO: WARNING: Building without documentation in a docs-only directory" >&5
-echo "$as_me: WARNING: Building without documentation in a docs-only directory" >&2;}
-    fi
-fi
-
-# Everything depends on where /star is.  Declare STARLINK as a
-# `precious variable'.  Amongst other things, this will make
-# ./configure squeal if the package is re-configured with an
-# inconsistent value of this variable.
-
-# AC_SUBST the STARLINK variable.  Macro AC_ARG_VAR does this anyway,
-# but automake doesn't know that (in 1.6 at least): however any
-# variable that automake finds has been AC_SUBSTed, it includes in
-# Makefile.in, and we need that.
-
-
-# Use the above information: $STARLINK indicates a preexisting
-# Starlink tree.
-#
-# Avoid doing anything if $STARLINK was unset above.
-#
-# Add library search paths using STAR_LDFLAGS.  Do it this way, rather than
-# by defining LIBS (which is also a non-user variable): (a) these are
-# really options to the linker, rather than adjustments to the set of
-# libraries, so this makes sense; also (b) adding them to LIBS is too
-# late, since that adds -L _after_ any -l options found in *_LDADD.
-if test -n "$STARLINK"; then
-    STAR_CPPFLAGS="-I$STARLINK/include"
-    STAR_FCFLAGS="-I$STARLINK/include"
-    STAR_FFLAGS="-I$STARLINK/include"
-    STAR_LDFLAGS="-L$STARLINK/lib"
-else
-    STAR_CPPFLAGS=
-    STAR_FCFLAGS=
-    STAR_FFLAGS=
-    STAR_LDFLAGS=
-fi
-
-
-
-
-
-
-echo "$as_me:$LINENO: checking whether we need any library fixups" >&5
-echo $ECHO_N "checking whether we need any library fixups... $ECHO_C" >&6
-if test "${star_cv_restfp_fixup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
-        if expr $build_os : 'darwin7' >/dev/null; then
-            # Following uses undocumented (but probably fairly stable)
-            # autoconf internal variable.
-            if test "$ac_cv_fc_compiler_gnu" = yes; then
-                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
-
-                rm -f conftest*
-                star_cv_restfp_fixup=unknown
-                cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-restFP()
-  ;
-  return 0;
-}
-_ACEOF
-                { { ac_try='$CC -o conftest.x -S conftest.c'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }
-                  test $ac_status = 0
-                } &&
-                sed 's/_restFP/restFP/g' conftest.x>conftest.s &&
-                { { ac_try='$CC -c -o conftest.$ac_objext conftest.s'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }
-                  test $ac_status = 0
-                } || star_cv_restfp_fixup=broken
-                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 $star_cv_restfp_fixup = broken; then
-                    { echo "$as_me:$LINENO: WARNING: unable to assemble restFP test" >&5
-echo "$as_me: WARNING: unable to assemble restFP test" >&2;}
-                else
-                    # Link this with the C compiler
-                    { ac_try='$CC -o conftest conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }
-                    _s_cstatus=$ac_status
-                    # Link this with the Fortran compiler
-                    { ac_try='$FC -o conftest conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }
-                    if test $_s_cstatus = 0 -a $ac_status = 0; then
-                        # both compilers can compile it
-                        star_cv_restfp_fixup=no
-                    elif test $_s_cstatus != 0 -a $ac_status != 0; then
-                        # neither compiler can compile it
-                        star_cv_restfp_fixup=no
-                    elif test $_s_cstatus = 0; then
-                        # The C compiler can, but the Fortran cannot
-                        star_cv_restfp_fixup=yes
-                    else
-                        # The C compiler can't compile, but the Fortran can.
-                        # Haven't heard of this case!  Don't know what to do.
-                        star_cv_restfp_fixup=broken
-                    fi
-                fi
-                # Link with -lcc_dynamic.
-                # See http://www.astro.gla.ac.uk/users/norman/note/2004/restFP/
-                if test $star_cv_restfp_fixup = yes; then
-                    { ac_try='$FC -o conftest conftest.$ac_objext -lcc_dynamic'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }
-                    if test $ac_status = 0; then
-                        star_cv_restfp_fixup=cc_dynamic
-                    fi
-                fi
-                if test $star_cv_restfp_fixup = yes; then
-                    # ooops
-                    { echo "$as_me:$LINENO: WARNING: unable to solve restFP problem" >&5
-echo "$as_me: WARNING: unable to solve restFP problem" >&2;}
-                    star_cv_restfp_fixup=broken
-                fi
-                rm -f conftest*
-            elif test -z "$FC"; then
-                # not g77, and indeed no Fortran at all
-                star_cv_restfp_fixup=nofortran
-            else
-                # There is a Fortran, but it's not g77, so either there's no
-                # problem, or it's a mixed-compiler problem that's harder
-                # than we know how to deal with.  But presumably the user
-                # has worked this out.
-                star_cv_restfp_fixup=no
-            fi
-        else # !Darwin
-            star_cv_restfp_fixup=no
-        fi
-
-fi
-echo "$as_me:$LINENO: result: $star_cv_restfp_fixup" >&5
-echo "${ECHO_T}$star_cv_restfp_fixup" >&6
-   C_FC_FCLINK_MAGIC=
-   C_FC_PPFC_FCLINK_MAGIC=
-   case $star_cv_restfp_fixup in
-     cc_dynamic)
-       # Add the required libraries to C_FC_... variables, which are
-       # generated in the required places by (our) automake.
-       C_FC_FCLINK_MAGIC="-lcc_dynamic"
-       C_FC_PPFC_FCLINK_MAGIC="-lcc_dynamic"
-       ;;
-     nofortran)
-       { echo "$as_me:$LINENO: No Fortran in path, so presumably no g77/gcc library problems" >&5
-echo "$as_me: No Fortran in path, so presumably no g77/gcc library problems" >&6;}
-       ;;
-     *) ;;
-   esac
-
-
-
-
-# Installation directory options (these are no longer handled
-# by _STAR_EXTRADIR_COMMON).  There should be an entry here for each of
-# Starlink's special installation locations.
-stardocsdir='${prefix}/docs'
-staretcdir='${prefix}/etc'
-starexamplesdir='${prefix}/examples'
-starfacsdir='${prefix}/help'
-starhelpdir='${prefix}/help'
-starnewsdir='${prefix}/news'
-
-# Certain directories are affected by the $_star_per_package_dir variable;
-# if it's true, then add the $PACKAGE_NAME to the directory.
-# The directories currently adjusted by this are bin and help;
-# there are others: see PWD's message of 2004-02-16
-# <http://www.jiscmail.ac.uk/cgi-bin/wa.exe?A2=ind0402&L=stardev&T=0&F=&S=&P=5153>
-if $_star_per_package_dirs; then
-    bindir="$bindir/$PACKAGE_NAME"
-    starhelpdir="$starhelpdir/$PACKAGE_NAME"
-    staretcdir="$staretcdir/$PACKAGE_NAME"
-    { echo "$as_me:$LINENO: STAR_DEFAULTS has option per-package-dirs:" >&5
-echo "$as_me: STAR_DEFAULTS has option per-package-dirs:" >&6;}
-    { echo "$as_me:$LINENO:     bindir=$bindir starhelpdir=$starhelpdir staretcdir=$staretcdir" >&5
-echo "$as_me:     bindir=$bindir starhelpdir=$starhelpdir staretcdir=$staretcdir" >&6;}
-    # Note that starfacsdir is unaffected by per-package-dirs -- facility
-    # files must always be installed in .../help (this also facilitates
-    # changing this installation location in future, to somewhere with a
-    # more logical name than .../help).
-fi
-
-
-# Dependency declarations and checks.
-# Everything is dependent on starconf, so we don't have to declare that
-# for each package separately.
-# STAR_DEPENDENCIES_ATTRIBUTES is currently not used.
-STAR_DEPENDENCIES_ATTRIBUTES=''
-STAR_DEPENDENCIES_CHILDREN=''
-
-
-
-# List of documentation.  See [STAR_LATEX_DOCUMENTATION].
-# STAR_DOCUMENTATION is a list of document codes,
-STAR_DOCUMENTATION=
-
-
-# Create a PACKAGE_VERSION_INTEGER variable, which contains the
-# package's version number as an integer major*1e6+minor*1e3+release.
-eval `echo $VERSION | sed -e 's/\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\).*/PACKAGE_VERSION_MAJOR=\1; PACKAGE_VERSION_MINOR=\2; PACKAGE_VERSION_RELEASE=\3;/'`
-test -n "$PACKAGE_VERSION_MAJOR"   || PACKAGE_VERSION_MAJOR=0
-test -n "$PACKAGE_VERSION_MINOR"   || PACKAGE_VERSION_MINOR=0
-test -n "$PACKAGE_VERSION_RELEASE" || PACKAGE_VERSION_RELEASE=0
-PACKAGE_VERSION_INTEGER=`expr $PACKAGE_VERSION_MAJOR \* 1000000 + $PACKAGE_VERSION_MINOR \* 1000 + $PACKAGE_VERSION_RELEASE`
-
-
-
-
-
-# When we do dependency checking, using the dependencies declared in
-# the package's configure.ac, we do so by looking at what tools have
-# already been installed in the Starlink tree.  The tree in question
-# is to be found under $STARLINK (see above), so we check that a
-# package is installed by checking that its manifest can be found in
-# $STARLINK/manifests.  We don't AC_SUBST this.
-current_MANIFESTS=$STARLINK/manifests
-
-# When we install manifests, however, they should go in the
-# installation directory.  Allow this to be defaulted from the environment.
-# In particular, if it is set to null in the environment, this will
-# suppress the installation of manifests.
-: ${STAR_MANIFEST_DIR='$(prefix)/manifests'}
-
-
-# Each package updates the "starlink.version" file installed into the
-# manifests directory. This tracks the last git sha1 checkin for
-# the current code state by running the git show on the HEAD.
-# Define GIT as the program to run, but allow it to be overridden
-# (most likely by ":" to avoid the overhead).
-# Also requires that STAR_SOURCE_ROOT_DIR is defined to locate the
-# head of the source tree.
-: ${GIT='git'}
-if test "${GIT}" = "git"; then
-   # Extract the first word of "git", so it can be a program name with args.
-set dummy git; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_GIT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $GIT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GIT="$GIT" # Let the user override the test with a path.
-  ;;
-  *)
-  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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GIT="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  ;;
-esac
-fi
-GIT=$ac_cv_path_GIT
-
-if test -n "$GIT"; then
-  echo "$as_me:$LINENO: result: $GIT" >&5
-echo "${ECHO_T}$GIT" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-
-
-: ${STAR_SOURCE_ROOT_DIR=''}
-
-
-# Although PACKAGE_VERSION is a default output variable, it isn't
-# added as a Makefile variable by default.  We need it below, however,
-# so add it now.
-
-
-# Initialise state of predist/postdist flags (see STAR_PREDIST_SOURCES).
-# The value of _star_predist_status must be inherited by any
-# ./configure run in a subdirectory, so that we there avoid the predist
-# test of starconf.status: in a pre-distribution state, this file must
-# be present in the component directory (where we are running
-# ./configure), but must not be present in any subdirectory.
-_star_predist_status=unknown
-PREDIST='#'  # safe default
-
-
-# pax and/or tar are used in some install targets.
-# Note: value-if-not-found should be blank, so this can be tested for.
-# Extract the first word of "pax", so it can be a program name with args.
-set dummy pax; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PAX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $PAX in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PAX="$PAX" # Let the user override the test with a path.
-  ;;
-  *)
-  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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PAX="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  ;;
-esac
-fi
-PAX=$ac_cv_path_PAX
-
-if test -n "$PAX"; then
-  echo "$as_me:$LINENO: result: $PAX" >&5
-echo "${ECHO_T}$PAX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-for ac_prog in gnutar tar
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_TAR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $TAR in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_TAR="$TAR" # Let the user override the test with a path.
-  ;;
-  *)
-  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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  ;;
-esac
-fi
-TAR=$ac_cv_path_TAR
-
-if test -n "$TAR"; then
-  echo "$as_me:$LINENO: result: $TAR" >&5
-echo "${ECHO_T}$TAR" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$TAR" && break
-done
-
-
-ALL_TARGET=all-am-normal
-
-# Default $prefix.  This is done by the standard autoconf configure, but at
-# a slightly later stage than this.  Doing it here, as part of STAR_[]DEFAULTS
-# means that the defaulted value of $prefix can be used within the body of
-# the configure.ac, for example to pass it to a ./configure in a subdirectory.
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-
-#   See if the --with-starmem option has been provided. This sets the
-#   preprocesor macro HAVE_STAR_MEM_H.
-
-# Check whether --with-starmem or --without-starmem was given.
-if test "${with_starmem+set}" = set; then
-  withval="$with_starmem"
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STAR_MEM_H 1
-_ACEOF
-
-fi;
-
-#   See if the --with-memdebug option has been provided. This sets the
-#   preprocesor macro MEM_DEBUG which enables facilities used to track
-#   down memory leaks, etc.
-
-# Check whether --with-memdebug or --without-memdebug was given.
-if test "${with_memdebug+set}" = set; then
-  withval="$with_memdebug"
-
-cat >>confdefs.h <<\_ACEOF
-#define MEM_DEBUG 1
-_ACEOF
-
-fi;
-
-#   Checks for programs
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$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"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-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
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$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
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 -std1 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 -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 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
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext 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
-
-depcc="$CC"   am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-  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
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} 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
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$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
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f 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
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-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
-
-# Check whether --enable-shared or --disable-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 or --disable-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 --enable-fast-install or --disable-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;
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
-  ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
-if test "${lt_cv_path_SED+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # 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
-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
-
-fi
-
-SED=$lt_cv_path_SED
-echo "$as_me:$LINENO: result: $SED" >&5
-echo "${ECHO_T}$SED" >&6
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-
-# Check whether --with-gnu-ld or --without-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.
-  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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
-  echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-else
-  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-fi
-if test "${lt_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 GNU ld's 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
-  echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # I'd rather use --version here, but apparently some GNU ld's 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
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
-if test "${lt_cv_ld_reload_flag+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_ld_reload_flag='-r'
-fi
-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-echo "${ECHO_T}$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
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-
-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
-if test "${lt_cv_path_NM+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    tmp_nm="$ac_dir/${ac_tool_prefix}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"
-  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi
-fi
-echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-echo "${ECHO_T}$lt_cv_path_NM" >&6
-NM="$lt_cv_path_NM"
-
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
-echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
-if test "${lt_cv_deplibs_check_method+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-aix4* | aix5*)
-  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'.
-  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | kfreebsd*-gnu | 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
-  ;;
-
-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]) 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
-  ;;
-
-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*)
-  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=unknown
-  ;;
-
-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
-  ;;
-
-sco3.2v5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  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
-    ;;
-  esac
-  ;;
-
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
-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 no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check whether --enable-libtool-lock or --disable-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:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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 5621 "configure"' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-    case "`/usr/bin/file conftest.o`" in
-    *32-bit*)
-      case $host in
-        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-*linux*)
-          LD="${LD-ld} -m elf_x86_64"
-          ;;
-        ppc*-*linux*|powerpc*-*linux*)
-          LD="${LD-ld} -m elf64ppc"
-          ;;
-        s390*-*linux*)
-          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"
-  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
-if test "${lt_cv_cc_needs_belf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  lt_cv_cc_needs_belf=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-lt_cv_cc_needs_belf=no
-fi
-rm -f 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
-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-echo "${ECHO_T}$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
-  ;;
-
-esac
-
-need_locks="$enable_libtool_lock"
-
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.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))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in dlfcn.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to ussc at star.rl.ac.uk ##
-## --------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-ac_ext=cc
-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 -n "$ac_tool_prefix"; then
-  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CXX" && break
-done
-test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
-
-  CXX=$ac_ct_CXX
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
-GXX=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-CXXFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cxx_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cxx_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cxx_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$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
-for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-ac_ext=cc
-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
-
-depcc="$CXX"  am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-  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
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} 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
-echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-echo "${ECHO_T}$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=cc
-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
-echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_cxx_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_cxx_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f 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
-echo "$as_me:$LINENO: result: $CXXCPP" >&5
-echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_cxx_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_cxx_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=cc
-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
-
-fi
-
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77' f90 xlf90 pgf90 epcf90 g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran
-  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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$F77"; then
-  ac_cv_prog_F77="$F77" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-F77=$ac_cv_prog_F77
-if test -n "$F77"; then
-  echo "$as_me:$LINENO: result: $F77" >&5
-echo "${ECHO_T}$F77" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$F77" && break
-  done
-fi
-if test -z "$F77"; then
-  ac_ct_F77=$F77
-  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 'f77 -old_f77' f90 xlf90 pgf90 epcf90 g95 lf95 f95 fort xlf95 ifc efc pgf95 gfortran
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_F77"; then
-  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_F77="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_F77=$ac_cv_prog_ac_ct_F77
-if test -n "$ac_ct_F77"; then
-  echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
-echo "${ECHO_T}$ac_ct_F77" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_F77" && break
-done
-
-  F77=$ac_ct_F77
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:6966:" \
-     "checking for Fortran 77 compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-rm -f a.out
-
-
-ac_mod_ext=
-ac_fc_mod_uppercase=no
-cat > conftest.$ac_ext << \_ACEOF
-      module conftest
-       implicit none
-       integer :: i
-      end module conftest
-_ACEOF
-{ (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-echo "$as_me:$LINENO: checking for suffix of module files" >&5
-echo $ECHO_N "checking for suffix of module files... $ECHO_C" >&6
-for ac_mod_file in conftest.mod conftest.MOD conftest.M CONFTEST.MOD none
-do
-  if test -f $ac_mod_file; then
-    break;
-  fi
-done
-rm -f conftest.$ac_ext conftest.$ac_exe_ext conftest.mod conftest.MOD conftest.M CONFTEST.MOD
-#
-case $ac_mod_file in
-  conftest.mod)
-    ac_mod_ext=mod
-    ;;
-  conftest.MOD)
-    ac_mod_ext=MOD
-    ;;
-  conftest.M)
-    ac_mod_ext=M
-    ;;
-  CONFTEST.MOD)
-    ac_mod_ext=MOD
-    ac_fc_mod_uppercase=yes
-    ;;
-  none)
-    { echo "$as_me:$LINENO: WARNING: Could not find Fortran module file extension." >&5
-echo "$as_me: WARNING: Could not find Fortran module file extension." >&2;}
-    ;;
-esac
-
-if test $ac_mod_file != none; then
-  echo "$as_me:$LINENO: result: $ac_mod_ext" >&5
-echo "${ECHO_T}$ac_mod_ext" >&6
-fi
-if test $ac_fc_mod_uppercase = yes; then
-  { echo "$as_me:$LINENO: Fortran module filenames are uppercase." >&5
-echo "$as_me: Fortran module filenames are uppercase." >&6;}
-fi
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file.  (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
-if test "${ac_cv_f77_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-      program main
-#ifndef __GNUC__
-       choke me
-#endif
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_f77_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_f77_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FFLAGS+set}
-ac_save_FFLAGS=$FFLAGS
-FFLAGS=
-echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
-echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_f77_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  FFLAGS=-g
-cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_f77_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_f77_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_f77_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
-echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
-if test "$ac_test_FFLAGS" = set; then
-  FFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_f77_g = yes; then
-  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-    FFLAGS="-g -O2"
-  else
-    FFLAGS="-g"
-  fi
-else
-  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-    FFLAGS="-O2"
-  else
-    FFLAGS=
-  fi
-fi
-
-G77=`test $ac_compiler_gnu = yes && echo 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
-
-
-
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-
-# find the maximum length of command line arguments
-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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*)
-    # 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;
-    ;;
-
-  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 *BSD
-    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`
-    ;;
-  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
-    ;;
-  *)
-    # 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.
-    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-    while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
-	       = "XX$teststring") >/dev/null 2>&1 &&
-	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
-	    lt_cv_sys_max_cmd_len=$new_result &&
-	    test $i != 17 # 1/2 MB should be enough
-    do
-      i=`expr $i + 1`
-      teststring=$teststring$teststring
-    done
-    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`
-    ;;
-  esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
-  echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
-else
-  echo "$as_me:$LINENO: result: none" >&5
-echo "${ECHO_T}none" >&6
-fi
-
-
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw* | pw32*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDEGRST]'
-  fi
-  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  ;;
-linux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDGIRSTW]'
-    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[BCDEGRST]'
-  ;;
-osf*)
-  symcode='[BCDEGQRST]'
-  ;;
-solaris* | sysv5*)
-  symcode='[BDRT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# 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
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Try without a prefix undercore, 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.
-  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { (eval echo "$as_me:$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=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && 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 <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
-	  cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-	  cat <<\EOF >> conftest.$ac_ext
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_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 -f 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
-  echo "$as_me:$LINENO: result: failed" >&5
-echo "${ECHO_T}failed" >&6
-else
-  echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6
-fi
-
-echo "$as_me:$LINENO: checking for objdir" >&5
-echo $ECHO_N "checking for objdir... $ECHO_C" >&6
-if test "${lt_cv_objdir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-echo "${ECHO_T}$lt_cv_objdir" >&6
-objdir=$lt_cv_objdir
-
-
-
-
-
-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
-
-# 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 to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="ar"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-echo "${ECHO_T}$ac_ct_AR" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  AR=$ac_ct_AR
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  RANLIB=$ac_ct_RANLIB
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  STRIP=$ac_ct_STRIP
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
-    ;;
-  *)
-    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<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
-
-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
-  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    echo "$as_me:$LINENO: checking for file" >&5
-echo $ECHO_N "checking for file... $ECHO_C" >&6
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<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
-
-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
-  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  else
-    MAGIC_CMD=:
-  fi
-fi
-
-  fi
-  ;;
-esac
-
-enable_dlopen=no
-enable_win32_dll=no
-
-# Check whether --enable-libtool-lock or --disable-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
-
-
-# Check whether --with-pic or --without-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
-
-# Use C for the default configuration in the libtool script
-tagname=
-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;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-#
-# Check for any special shared library compilation flags.
-#
-lt_prog_cc_shlib=
-if test "$GCC" = no; then
-  case $host_os in
-  sco3.2v5*)
-    lt_prog_cc_shlib='-belf'
-    ;;
-  esac
-fi
-if test -n "$lt_prog_cc_shlib"; then
-  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
-echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
-  if echo "$old_CC $old_CFLAGS " | grep "[ 	]$lt_prog_cc_shlib[ 	]" >/dev/null; then :
-  else
-    { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
-echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
-    lt_cv_prog_cc_can_build_shared=no
-  fi
-fi
-
-
-#
-# Check to make sure the static flag actually works.
-#
-echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
-if test "${lt_prog_compiler_static_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
-   printf "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The compiler 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 "X$_lt_linker_boilerplate" | $Xsed > conftest.exp
-       $SED '/^$/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_prog_compiler_static_works=yes
-       fi
-     else
-       lt_prog_compiler_static_works=yes
-     fi
-   fi
-   $rm conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
-echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
-
-if test x"$lt_prog_compiler_static_works" = xyes; then
-    :
-else
-    lt_prog_compiler_static=
-fi
-
-
-
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
-
-echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_rtti_exceptions=no
-  ac_outfile=conftest.$ac_objext
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8120: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:8124: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_rtti_exceptions=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$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=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
-  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*)
-      # 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'
-      ;;
-
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | pw32* | os2*)
-      # 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'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic='-fno-common'
-      ;;
-
-    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
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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='-fPIC'
-	;;
-      esac
-      ;;
-
-    *)
-      lt_prog_compiler_pic='-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
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         lt_prog_compiler_pic='-qnocommon'
-         lt_prog_compiler_wl='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | pw32* | os2*)
-      # 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'
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    linux*)
-      case $cc_basename in
-      icc* | ecc*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-KPIC'
-	lt_prog_compiler_static='-static'
-        ;;
-      pgcc* | pgf77* | pgf90*)
-        # 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='-static'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static='-non_shared'
-        ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    sco3.2v5*)
-      lt_prog_compiler_pic='-Kpic'
-      lt_prog_compiler_static='-dn'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	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* | sysv5*)
-      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
-      ;;
-
-    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
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_prog_compiler_pic_works=no
-  ac_outfile=conftest.$ac_objext
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8382: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:8386: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_prog_compiler_pic_works=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
-
-if test x"$lt_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
-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
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $rm -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8444: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:8448: \$? = $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 > out/conftest.exp
-     $SED '/^$/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w .
-   $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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-echo "${ECHO_T}$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
-  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
-  runpath_var=
-  allow_undefined_flag=
-  enable_shared_with_static_runtimes=no
-  archive_cmds=
-  archive_expsym_cmds=
-  old_archive_From_new_cmds=
-  old_archive_from_expsyms_cmds=
-  export_dynamic_flag_spec=
-  whole_archive_flag_spec=
-  thread_safe_flag_spec=
-  hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
-  hardcode_libdir_separator=
-  hardcode_direct=no
-  hardcode_minus_L=no
-  hardcode_shlibpath_var=unsupported
-  link_all_deplibs=unknown
-  hardcode_automatic=no
-  module_cmds=
-  module_expsym_cmds=
-  always_export_symbols=no
-  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # 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_"
-  # 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.
-  extract_expsyms_cmds=
-  # Just being paranoid about ensuring that cc_basename is set.
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs=yes
-  if test "$with_gnu_ld" = 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>/dev/null` in
-      *\ [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
-    aix3* | aix4* | aix5*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	ld_shlibs=no
-	cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      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
-
-      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      ld_shlibs=no
-      ;;
-
-    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*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      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'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$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}--image-base=0x10000000  ${wl}--out-implib,$lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    linux*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	tmp_addflag=
-	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'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* )			# 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'
-	  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' ;;
-	esac
-	archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-	if test $supports_anon_versioning = yes; 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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	fi
-      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 $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'
-      fi
-      ;;
-
-    solaris* | sysv5*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-	ld_shlibs=no
-	cat <<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.
-
-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'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    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 $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
-
-    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 "$link_static_flag"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	hardcode_direct=unsupported
-      fi
-      ;;
-
-    aix4* | aix5*)
-      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
-	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'
-	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].*|aix5*)
-	  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_libdir_separator=':'
-      link_all_deplibs=yes
-
-      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
-  	  hardcode_direct=yes
-	  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
-
-      # 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.
-       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${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 $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an empty executable.
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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'
-	  # -bexpall does not export symbols beginning with underscore (_)
-	  always_export_symbols=yes
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec=' '
-	  archive_cmds_need_lc=yes
-	  # This is similar to how AIX traditionally builds it's shared libraries.
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      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
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs=no
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      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 "$deplibs" | $SED -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
-      ;;
-
-    darwin* | rhapsody*)
-      case "$host_os" in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      archive_cmds_need_lc=no
-      hardcode_direct=no
-      hardcode_automatic=yes
-      hardcode_shlibpath_var=unsupported
-      whole_archive_flag_spec=''
-      link_all_deplibs=yes
-    if test "$GCC" = yes ; then
-#        echo "G77=$G77,compiler=$compiler,tagname=$tagname"
-        if test "$tagname" = "F77"; then
-archive_cmds='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        else
-archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        fi
-    	output_verbose_link_cmd='echo'
-      module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-      archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-         module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-         archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs=no
-          ;;
-      esac
-    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* | kfreebsd*-gnu | dragonfly*)
-      archive_cmds='$CC -shared -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 -fPIC ${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* | hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -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'
-	  ;;
-	esac
-      else
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	*)
-	  archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*)
-	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_flag_spec_ld='+b $libdir'
-	  hardcode_libdir_separator=:
-	  hardcode_direct=no
-	  hardcode_shlibpath_var=no
-	  ;;
-	ia64*)
-	  hardcode_libdir_flag_spec='-L$libdir'
-	  hardcode_direct=no
-	  hardcode_shlibpath_var=no
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L=yes
-	  ;;
-	*)
-	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_separator=:
-	  hardcode_direct=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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec_ld='-rpath $libdir'
-      fi
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      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
-      ;;
-
-    openbsd*)
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      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
-      ;;
-
-    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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~
-	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_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
-      hardcode_libdir_separator=:
-      ;;
-
-    sco3.2v5*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var=no
-      export_dynamic_flag_spec='${wl}-Bexport'
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ;;
-
-    solaris*)
-      no_undefined_flag=' -z text'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	archive_cmds='$CC -shared ${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}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-	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'
-      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 linker options so we
- 	# cannot just pass the convience library names through
- 	# without $wl, iff we do not link with $LD.
- 	# Luckily, gcc supports the same syntax we need for Sun Studio.
- 	# Supported since Solaris 2.6 (maybe 2.5.1?)
- 	case $wlarc in
- 	'')
- 	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
- 	*)
- 	  whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- 	esac ;;
-      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.2uw2*)
-      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_minus_L=no
-      hardcode_shlibpath_var=no
-      hardcode_runpath_var=yes
-      runpath_var=LD_RUN_PATH
-      ;;
-
-   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
-      no_undefined_flag='${wl}-z ${wl}text'
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv5*)
-      no_undefined_flag=' -z text'
-      # $CC -shared without GNU ld will not create a library from C++
-      # object files and a static libstdc++, better avoid it by now
-      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'
-      hardcode_libdir_flag_spec=
-      hardcode_shlibpath_var=no
-      runpath_var='LD_RUN_PATH'
-      ;;
-
-    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
-  fi
-
-echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-echo "${ECHO_T}$ld_shlibs" >&6
-test "$ld_shlibs" = 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
-
-#
-# 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.
-      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-      $rm conftest*
-      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-        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:$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=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        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*
-      echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-echo "${ECHO_T}$archive_cmds_need_lc" >&6
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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"
-if test "$GCC" = yes; then
-  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 ';' >/dev/null ; then
-    # 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.
-    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
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-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'
-  ;;
-
-aix4* | aix5*)
-  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*)
-  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'
-  ;;
-
-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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # 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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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)'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
-  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
-  ;;
-
-kfreebsd*-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='GNU ld.so'
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  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
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    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
-  ;;
-
-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'
-  ;;
-
-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*)
-  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
-  # 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
-
-  # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
-  ;;
-
-knetbsd*-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='GNU 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=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
-  ;;
-
-openbsd*)
-  version_type=sunos
-  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"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  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
-  ;;
-
-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.2uw2* | sysv4.3* | sysv5*)
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-  ;;
-
-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
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
-   test -n "$runpath_var" || \
-   test "X$hardcode_automatic" = "Xyes" ; then
-
-  # We can hardcode non-existant 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_AC_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
-echo "$as_me:$LINENO: result: $hardcode_action" >&5
-echo "${ECHO_T}$hardcode_action" >&6
-
-if test "$hardcode_action" = relink; 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
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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"
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}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"
-         echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-       else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-       ;;
-   *)
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-    ;;
-  esac
-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*)
-    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
-    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; 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
-
-   ;;
-
-  *)
-    echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); 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 shl_load
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-/* 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_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-char (*f) () = shl_load;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shl_load;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
-  lt_cv_dlopen="shl_load"
-else
-  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-int
-main ()
-{
-shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
-  echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); 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 dlopen
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-/* 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_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != dlopen;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
-  lt_cv_dlopen="dlopen"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_svld_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dld_link ();
-int
-main ()
-{
-dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_dld_link=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-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"
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<EOF
-#line 10689 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      LDFLAGS="$LDFLAGS $link_static_flag"
-      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<EOF
-#line 10787 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$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
-
-
-# Report which librarie types wil actually be built
-echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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
-  ;;
-
-aix4* | aix5*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  fi
-    ;;
-esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # 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
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler \
-    CC \
-    LD \
-    lt_prog_compiler_wl \
-    lt_prog_compiler_pic \
-    lt_prog_compiler_static \
-    lt_prog_compiler_no_builtin_flag \
-    export_dynamic_flag_spec \
-    thread_safe_flag_spec \
-    whole_archive_flag_spec \
-    enable_shared_with_static_runtimes \
-    old_archive_cmds \
-    old_archive_from_new_cmds \
-    predep_objects \
-    postdep_objects \
-    predeps \
-    postdeps \
-    compiler_lib_search_path \
-    archive_cmds \
-    archive_expsym_cmds \
-    postinstall_cmds \
-    postuninstall_cmds \
-    old_archive_from_expsyms_cmds \
-    allow_undefined_flag \
-    no_undefined_flag \
-    export_symbols_cmds \
-    hardcode_libdir_flag_spec \
-    hardcode_libdir_flag_spec_ld \
-    hardcode_libdir_separator \
-    hardcode_automatic \
-    module_cmds \
-    module_expsym_cmds \
-    lt_cv_prog_compiler_c_o \
-    exclude_expsyms \
-    include_expsyms; do
-
-    case $var in
-    old_archive_cmds | \
-    old_archive_from_new_cmds | \
-    archive_cmds | \
-    archive_expsym_cmds | \
-    module_cmds | \
-    module_expsym_cmds | \
-    old_archive_from_expsyms_cmds | \
-    export_symbols_cmds | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="${ofile}T"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  $rm -f "$cfgfile"
-  { echo "$as_me:$LINENO: creating $ofile" >&5
-echo "$as_me: creating $ofile" >&6;}
-
-  cat <<__EOF__ >> "$cfgfile"
-#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# 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//"
-
-# 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
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# 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
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# 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
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# 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 and install a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-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
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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 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
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# 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
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# 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
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_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
-
-# ### END LIBTOOL CONFIG
-
-__EOF__
-
-
-  case $host_os in
-  aix3*)
-    cat <<\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
-EOF
-    ;;
-  esac
-
-  # 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)
-
-  mv -f "$cfgfile" "$ofile" || \
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-
-# Check whether --with-tags or --without-tags was given.
-if test "${with_tags+set}" = set; then
-  withval="$with_tags"
-  tagnames="$withval"
-fi;
-
-if test -f "$ltmain" && test -n "$tagnames"; then
-  if test ! -f "${ofile}"; then
-    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
-echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
-  fi
-
-  if test -z "$LTCC"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-    if test -z "$LTCC"; then
-      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
-echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
-    else
-      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
-echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
-    fi
-  fi
-
-  # Extract list of available tagged configurations in $ofile.
-  # Note that this assumes the entire list is on one line.
-  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
-  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-  for tagname in $tagnames; do
-    IFS="$lt_save_ifs"
-    # Check whether tagname contains only valid characters
-    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
-    "") ;;
-    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
-echo "$as_me: error: invalid tag name: $tagname" >&2;}
-   { (exit 1); exit 1; }; }
-	;;
-    esac
-
-    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-    then
-      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
-echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-
-    # Update the list of available tags.
-    if test -n "$tagname"; then
-      echo appending configuration tag \"$tagname\" to $ofile
-
-      case $tagname in
-      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_ext=cc
-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=
-export_dynamic_flag_spec_CXX=
-hardcode_direct_CXX=no
-hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
-hardcode_libdir_separator_CXX=
-hardcode_minus_L_CXX=no
-hardcode_automatic_CXX=no
-module_cmds_CXX=
-module_expsym_cmds_CXX=
-link_all_deplibs_CXX=unknown
-old_archive_cmds_CXX=$old_archive_cmds
-no_undefined_flag_CXX=
-whole_archive_flag_spec_CXX=
-enable_shared_with_static_runtimes_CXX=no
-
-# 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=
-
-# Source file extension for C++ test sources.
-ac_ext=cc
-
-# Object file extension for compiled C++ test sources.
-objext=o
-objext_CXX=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-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
-  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
-  unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# We don't want -fno-exception wen 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 or --without-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.
-  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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
-  echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-else
-  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-fi
-if test "${lt_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 GNU ld's 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
-  echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # I'd rather use --version here, but apparently some GNU ld's 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
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$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 -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'
-
-    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 "\-L"'
-
-else
-  GXX=no
-  with_gnu_ld=no
-  wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-ld_shlibs_CXX=yes
-case $host_os in
-  aix3*)
-    # FIXME: insert proper C++ library support
-    ld_shlibs_CXX=no
-    ;;
-  aix4* | aix5*)
-    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].*|aix5*)
-	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_libdir_separator_CXX=':'
-    link_all_deplibs_CXX=yes
-
-    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
-	  hardcode_direct_CXX=yes
-	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
-
-    # 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.
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-      archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${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 $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-      else
-	# Determine the default libpath from the value encoded in an empty executable.
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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'
-	# -bexpall does not export symbols beginning with underscore (_)
-	always_export_symbols_CXX=yes
-	# Exported symbols can be pulled into shared objects from archives
-	whole_archive_flag_spec_CXX=' '
-	archive_cmds_need_lc_CXX=yes
-	# This is similar to how AIX traditionally builds it's shared libraries.
-	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-      fi
-    fi
-    ;;
-  chorus*)
-    case $cc_basename in
-      *)
-	# FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-    esac
-    ;;
-
-
-  cygwin* | mingw* | pw32*)
-    # _LT_AC_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}--image-base=0x10000000 ${wl}--out-implib,$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}--image-base=0x10000000 ${wl}--out-implib,$lib'
-    else
-      ld_shlibs_CXX=no
-    fi
-  ;;
-      darwin* | rhapsody*)
-        case "$host_os" in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-        esac
-      archive_cmds_need_lc_CXX=no
-      hardcode_direct_CXX=no
-      hardcode_automatic_CXX=yes
-      hardcode_shlibpath_var_CXX=unsupported
-      whole_archive_flag_spec_CXX=''
-      link_all_deplibs_CXX=yes
-
-    if test "$GXX" = yes ; then
-      lt_int_apple_cc_single_mod=no
-      output_verbose_link_cmd='echo'
-      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
-       lt_int_apple_cc_single_mod=yes
-      fi
-      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-       archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-      else
-          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'
-        fi
-        module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-            archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          else
-            archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          fi
-            module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-          archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-          module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-          archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs_CXX=no
-          ;;
-      esac
-      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* | kfreebsd*-gnu | dragonfly*)
-    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-    # conventions
-    ld_shlibs_CXX=yes
-    ;;
-  gnu*)
-    ;;
-  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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $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'
-      else
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-      fi
-      ;;
-    esac
-    ;;
-  hpux10*|hpux11*)
-    if test $with_gnu_ld = no; then
-      case "$host_cpu" in
-      hppa*64*)
-	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
-	hardcode_libdir_separator_CXX=:
-        ;;
-      ia64*)
-	hardcode_libdir_flag_spec_CXX='-L$libdir'
-        ;;
-      *)
-	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-	hardcode_libdir_separator_CXX=:
-	export_dynamic_flag_spec_CXX='${wl}-E'
-        ;;
-      esac
-    fi
-    case "$host_cpu" in
-    hppa*64*)
-      hardcode_direct_CXX=no
-      hardcode_shlibpath_var_CXX=no
-      ;;
-    ia64*)
-      hardcode_direct_CXX=no
-      hardcode_shlibpath_var_CXX=no
-      hardcode_minus_L_CXX=yes # Not in the search PATH,
-					      # but as the default
-					      # location of the library.
-      ;;
-    *)
-      hardcode_direct_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*|ia64*)
-	  archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
-	  ;;
-	*)
-	  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; echo $list'
-	;;
-      *)
-	if test "$GXX" = yes; then
-	  if test $with_gnu_ld = no; then
-	    case "$host_cpu" in
-	    ia64*|hppa*64*)
-	      archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
-	      ;;
-	    *)
-	      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'
-	      ;;
-	    esac
-	  fi
-	else
-	  # FIXME: insert proper C++ library support
-	  ld_shlibs_CXX=no
-	fi
-	;;
-    esac
-    ;;
-  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" && echo -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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 ${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=:
-    ;;
-  linux*)
-    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; echo $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*)
-	# 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*)
-        # Portland Group C++ compiler
-	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'
-
-	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'
-        ;;
-      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=`echo $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; echo $list'
-	;;
-    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::"'
-    ;;
-  openbsd2*)
-    # C++ shared libraries are fairly broken
-    ld_shlibs_CXX=no
-    ;;
-  openbsd*)
-    hardcode_direct_CXX=yes
-    hardcode_shlibpath_var_CXX=no
-    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='echo'
-    ;;
-  osf3*)
-    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
-	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-
-	;;
-      RCC*)
-	# Rational C++ 2.4.1
-	# FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-      cxx*)
-	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 ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	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.
-	#
-	# 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=`echo $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; echo $list'
-	;;
-      *)
-	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	  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 ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-	  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 "\-L"'
-
-	else
-	  # FIXME: insert proper C++ library support
-	  ld_shlibs_CXX=no
-	fi
-	;;
-    esac
-    ;;
-  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.
-	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
-	;;
-      RCC*)
-	# Rational C++ 2.4.1
-	# FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-      cxx*)
-	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 -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'
-	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=`echo $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; echo $list'
-	;;
-      *)
-	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	 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` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-	  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 "\-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
-    ;;
-  sco*)
-    archive_cmds_need_lc_CXX=no
-    case $cc_basename in
-      CC*)
-	# FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-      *)
-	# FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-    esac
-    ;;
-  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*)
-	# Sun C++ 4.2, 5.x and Centerline C++
-	no_undefined_flag_CXX=' -zdefs'
-	archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -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} -nolib ${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 C++ compiler is used as linker so we must use $wl
-	    # flag to pass the commands to the underlying system
-	    # linker. We must also pass each convience library through
-	    # to the system linker between allextract/defaultextract.
-	    # The C++ compiler will combine linker options so we
-	    # cannot just pass the convience library names through
-	    # without $wl.
-	    # Supported since Solaris 2.6 (maybe 2.5.1?)
-	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
-	    ;;
-	esac
-	link_all_deplibs_CXX=yes
-
-	# 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 -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
-	# 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 -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'
-
-	    # 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\""
-	  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 \"\-L\""
-	  fi
-
-	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
-	fi
-	;;
-    esac
-    ;;
-  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
-    archive_cmds_need_lc_CXX=no
-    ;;
-  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
-echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-GCC_CXX="$GXX"
-LD_CXX="$LD"
-
-
-cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-EOF
-
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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
-
-  # The `*' in the case matches for architectures that use `case' in
-  # $output_verbose_cmd can trigger glob expansion during the loop
-  # eval without this substitution.
-  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
-
-  for p in `eval $output_verbose_link_cmd`; do
-    case $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
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p 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
-       ;;
-
-    *.$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
-
-case " $postdeps_CXX " in
-*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-esac
-
-lt_prog_compiler_wl_CXX=
-lt_prog_compiler_pic_CXX=
-lt_prog_compiler_static_CXX=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
-  # 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*)
-      # 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'
-      ;;
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | os2* | pw32*)
-      # 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'
-      ;;
-    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=
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic_CXX=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # 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*)
-	;;
-      *)
-	lt_prog_compiler_pic_CXX='-fPIC'
-	;;
-      esac
-      ;;
-    *)
-      lt_prog_compiler_pic_CXX='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix4* | aix5*)
-	# 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_AC_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
-	;;
-       darwin*)
-         # PIC is the default on this platform
-         # Common symbols not allowed in MH_DYLIB files
-         case $cc_basename in
-           xlc*)
-           lt_prog_compiler_pic_CXX='-qnocommon'
-           lt_prog_compiler_wl_CXX='-Wl,'
-           ;;
-         esac
-       ;;
-      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* | kfreebsd*-gnu | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_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="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
-	    case "$host_cpu" in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      lt_prog_compiler_pic_CXX='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      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*)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    lt_prog_compiler_wl_CXX='--backend -Wl,'
-	    lt_prog_compiler_pic_CXX='-fPIC'
-	    ;;
-	  icpc* | ecpc*)
-	    # Intel C++
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-static'
-	    ;;
-	  pgCC*)
-	    # Portland Group C++ compiler.
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-fpic'
-	    lt_prog_compiler_static_CXX='-static'
-	    ;;
-	  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'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    lt_prog_compiler_pic_CXX='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      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*)
-	;;
-      sco*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_pic_CXX='-fPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # 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
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      unixware*)
-	;;
-      vxworks*)
-	;;
-      *)
-	lt_prog_compiler_can_build_shared_CXX=no
-	;;
-    esac
-  fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_CXX"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_prog_compiler_pic_works_CXX=no
-  ac_outfile=conftest.$ac_objext
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13035: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:13039: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_prog_compiler_pic_works_CXX=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
-
-if test x"$lt_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
-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
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_c_o_CXX=no
-   $rm -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13097: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:13101: \$? = $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 > out/conftest.exp
-     $SED '/^$/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_CXX=yes
-     fi
-   fi
-   chmod u+w .
-   $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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-echo "${ECHO_T}$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
-  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
-  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix4* | aix5*)
-    # 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
-    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'
-    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*)
-    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'
-  ;;
-  *)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-
-echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6
-test "$ld_shlibs_CXX" = 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
-
-#
-# 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.
-      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-      $rm conftest*
-      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_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:$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=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        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*
-      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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"
-if test "$GCC" = yes; then
-  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 ';' >/dev/null ; then
-    # 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.
-    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
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-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'
-  ;;
-
-aix4* | aix5*)
-  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*)
-  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'
-  ;;
-
-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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # 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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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)'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
-  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
-  ;;
-
-kfreebsd*-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='GNU ld.so'
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  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
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    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
-  ;;
-
-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'
-  ;;
-
-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*)
-  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
-  # 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
-
-  # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
-  ;;
-
-knetbsd*-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='GNU 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=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
-  ;;
-
-openbsd*)
-  version_type=sunos
-  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"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  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
-  ;;
-
-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.2uw2* | sysv4.3* | sysv5*)
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-  ;;
-
-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
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&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-existant 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_AC_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
-echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-echo "${ECHO_T}$hardcode_action_CXX" >&6
-
-if test "$hardcode_action_CXX" = relink; 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
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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"
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}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"
-         echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-       else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-       ;;
-   *)
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-    ;;
-  esac
-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*)
-    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
-    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; 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
-
-   ;;
-
-  *)
-    echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); 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 shl_load
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-/* 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_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-char (*f) () = shl_load;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shl_load;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
-  lt_cv_dlopen="shl_load"
-else
-  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-int
-main ()
-{
-shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
-  echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); 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 dlopen
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-/* 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_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != dlopen;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
-  lt_cv_dlopen="dlopen"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_svld_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dld_link ();
-int
-main ()
-{
-dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_dld_link=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-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"
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<EOF
-#line 14466 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      LDFLAGS="$LDFLAGS $link_static_flag"
-      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<EOF
-#line 14564 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$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
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # 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
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_CXX \
-    CC_CXX \
-    LD_CXX \
-    lt_prog_compiler_wl_CXX \
-    lt_prog_compiler_pic_CXX \
-    lt_prog_compiler_static_CXX \
-    lt_prog_compiler_no_builtin_flag_CXX \
-    export_dynamic_flag_spec_CXX \
-    thread_safe_flag_spec_CXX \
-    whole_archive_flag_spec_CXX \
-    enable_shared_with_static_runtimes_CXX \
-    old_archive_cmds_CXX \
-    old_archive_from_new_cmds_CXX \
-    predep_objects_CXX \
-    postdep_objects_CXX \
-    predeps_CXX \
-    postdeps_CXX \
-    compiler_lib_search_path_CXX \
-    archive_cmds_CXX \
-    archive_expsym_cmds_CXX \
-    postinstall_cmds_CXX \
-    postuninstall_cmds_CXX \
-    old_archive_from_expsyms_cmds_CXX \
-    allow_undefined_flag_CXX \
-    no_undefined_flag_CXX \
-    export_symbols_cmds_CXX \
-    hardcode_libdir_flag_spec_CXX \
-    hardcode_libdir_flag_spec_ld_CXX \
-    hardcode_libdir_separator_CXX \
-    hardcode_automatic_CXX \
-    module_cmds_CXX \
-    module_expsym_cmds_CXX \
-    lt_cv_prog_compiler_c_o_CXX \
-    exclude_expsyms_CXX \
-    include_expsyms_CXX; do
-
-    case $var in
-    old_archive_cmds_CXX | \
-    old_archive_from_new_cmds_CXX | \
-    archive_cmds_CXX | \
-    archive_expsym_cmds_CXX | \
-    module_cmds_CXX | \
-    module_expsym_cmds_CXX | \
-    old_archive_from_expsyms_cmds_CXX | \
-    export_symbols_cmds_CXX | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# 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
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_CXX
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_CXX
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_CXX
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_CXX
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_CXX
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# 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 and install a shared archive.
-archive_cmds=$lt_archive_cmds_CXX
-archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_CXX
-module_expsym_cmds=$lt_module_expsym_cmds_CXX
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_CXX
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-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
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_CXX
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_CXX
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_CXX
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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 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
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_CXX
-
-# 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
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_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
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# 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
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-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
-
-	else
-	  tagname=""
-	fi
-	;;
-
-      F77)
-	if test -n "$F77" && test "X$F77" != "Xno"; then
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-
-archive_cmds_need_lc_F77=no
-allow_undefined_flag_F77=
-always_export_symbols_F77=no
-archive_expsym_cmds_F77=
-export_dynamic_flag_spec_F77=
-hardcode_direct_F77=no
-hardcode_libdir_flag_spec_F77=
-hardcode_libdir_flag_spec_ld_F77=
-hardcode_libdir_separator_F77=
-hardcode_minus_L_F77=no
-hardcode_automatic_F77=no
-module_cmds_F77=
-module_expsym_cmds_F77=
-link_all_deplibs_F77=unknown
-old_archive_cmds_F77=$old_archive_cmds
-no_undefined_flag_F77=
-whole_archive_flag_spec_F77=
-enable_shared_with_static_runtimes_F77=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-objext_F77=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="      program t\n      end\n"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-compiler_F77=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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
-  ;;
-aix4* | aix5*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  fi
-  ;;
-esac
-echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6
-
-echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6
-
-test "$ld_shlibs_F77" = no && can_build_shared=no
-
-GCC_F77="$G77"
-LD_F77="$LD"
-
-lt_prog_compiler_wl_F77=
-lt_prog_compiler_pic_F77=
-lt_prog_compiler_static_F77=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl_F77='-Wl,'
-    lt_prog_compiler_static_F77='-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_F77='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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_F77='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | pw32* | os2*)
-      # 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_F77='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic_F77='-fno-common'
-      ;;
-
-    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_F77=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic_F77=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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_F77='-fPIC'
-	;;
-      esac
-      ;;
-
-    *)
-      lt_prog_compiler_pic_F77='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static_F77='-Bstatic'
-      else
-	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         lt_prog_compiler_pic_F77='-qnocommon'
-         lt_prog_compiler_wl_F77='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | pw32* | os2*)
-      # 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_F77='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl_F77='-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_F77='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static_F77='-non_shared'
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    linux*)
-      case $cc_basename in
-      icc* | ecc*)
-	lt_prog_compiler_wl_F77='-Wl,'
-	lt_prog_compiler_pic_F77='-KPIC'
-	lt_prog_compiler_static_F77='-static'
-        ;;
-      pgcc* | pgf77* | pgf90*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	lt_prog_compiler_wl_F77='-Wl,'
-	lt_prog_compiler_pic_F77='-fpic'
-	lt_prog_compiler_static_F77='-static'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl_F77='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static_F77='-non_shared'
-        ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static_F77='-non_shared'
-      ;;
-
-    sco3.2v5*)
-      lt_prog_compiler_pic_F77='-Kpic'
-      lt_prog_compiler_static_F77='-dn'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	lt_prog_compiler_wl_F77='-Qoption ld ';;
-      *)
-	lt_prog_compiler_wl_F77='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl_F77='-Qoption ld '
-      lt_prog_compiler_pic_F77='-PIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	lt_prog_compiler_pic_F77='-Kconform_pic'
-	lt_prog_compiler_static_F77='-Bstatic'
-      fi
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      lt_prog_compiler_can_build_shared_F77=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic_F77='-pic'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared_F77=no
-      ;;
-    esac
-  fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_F77"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_prog_compiler_pic_works_F77=no
-  ac_outfile=conftest.$ac_objext
-   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_F77"
-   # 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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15449: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:15453: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_prog_compiler_pic_works_F77=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
-
-if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
-    case $lt_prog_compiler_pic_F77 in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
-     esac
-else
-    lt_prog_compiler_pic_F77=
-     lt_prog_compiler_can_build_shared_F77=no
-fi
-
-fi
-case "$host_os" in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_F77=
-    ;;
-  *)
-    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
-    ;;
-esac
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_c_o_F77=no
-   $rm -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15511: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:15515: \$? = $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 > out/conftest.exp
-     $SED '/^$/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_F77=yes
-     fi
-   fi
-   chmod u+w .
-   $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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
-  runpath_var=
-  allow_undefined_flag_F77=
-  enable_shared_with_static_runtimes_F77=no
-  archive_cmds_F77=
-  archive_expsym_cmds_F77=
-  old_archive_From_new_cmds_F77=
-  old_archive_from_expsyms_cmds_F77=
-  export_dynamic_flag_spec_F77=
-  whole_archive_flag_spec_F77=
-  thread_safe_flag_spec_F77=
-  hardcode_libdir_flag_spec_F77=
-  hardcode_libdir_flag_spec_ld_F77=
-  hardcode_libdir_separator_F77=
-  hardcode_direct_F77=no
-  hardcode_minus_L_F77=no
-  hardcode_shlibpath_var_F77=unsupported
-  link_all_deplibs_F77=unknown
-  hardcode_automatic_F77=no
-  module_cmds_F77=
-  module_expsym_cmds_F77=
-  always_export_symbols_F77=no
-  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms_F77=
-  # 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_F77="_GLOBAL_OFFSET_TABLE_"
-  # 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.
-  extract_expsyms_cmds=
-  # Just being paranoid about ensuring that cc_basename is set.
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs_F77=yes
-  if test "$with_gnu_ld" = 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_F77='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-  	whole_archive_flag_spec_F77=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>/dev/null` in
-      *\ [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
-    aix3* | aix4* | aix5*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	ld_shlibs_F77=no
-	cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_F77='$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_F77='-L$libdir'
-      hardcode_minus_L_F77=yes
-
-      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      ld_shlibs_F77=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	allow_undefined_flag_F77=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	ld_shlibs_F77=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      allow_undefined_flag_F77=unsupported
-      always_export_symbols_F77=no
-      enable_shared_with_static_runtimes_F77=yes
-      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	archive_expsym_cmds_F77='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}--image-base=0x10000000  ${wl}--out-implib,$lib'
-      else
-	ld_shlibs_F77=no
-      fi
-      ;;
-
-    linux*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	tmp_addflag=
-	case $cc_basename,$host_cpu in
-	pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec_F77='${wl}--whole-archive,`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* )			# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec_F77='${wl}--whole-archive,`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;;
-	esac
-	archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-	if test $supports_anon_versioning = yes; then
-	  archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
-  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-  $echo "local: *; };" >> $output_objdir/$libname.ver~
-	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	fi
-      else
-	ld_shlibs_F77=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris* | sysv5*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-	ld_shlibs_F77=no
-	cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs_F77=no
-      fi
-      ;;
-
-    sunos4*)
-      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs_F77=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs_F77" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec_F77=
-      export_dynamic_flag_spec_F77=
-      whole_archive_flag_spec_F77=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag_F77=unsupported
-      always_export_symbols_F77=yes
-      archive_expsym_cmds_F77='$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_F77=yes
-      if test "$GCC" = yes && test -z "$link_static_flag"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	hardcode_direct_F77=unsupported
-      fi
-      ;;
-
-    aix4* | aix5*)
-      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
-	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-	else
-	  export_symbols_cmds_F77='$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].*|aix5*)
-	  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_F77=''
-      hardcode_direct_F77=yes
-      hardcode_libdir_separator_F77=':'
-      link_all_deplibs_F77=yes
-
-      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
-  	  hardcode_direct_F77=yes
-	  else
-  	  # We have old collect2
-  	  hardcode_direct_F77=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_F77=yes
-  	  hardcode_libdir_flag_spec_F77='-L$libdir'
-  	  hardcode_libdir_separator_F77=
-	  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
-
-      # 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_F77=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_F77='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_f77_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
-	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-	if test "$host_cpu" = ia64; then
-	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
-	  allow_undefined_flag_F77="-z nodefs"
-	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an empty executable.
-	 cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_f77_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-	 hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok'
-	  allow_undefined_flag_F77=' ${wl}-berok'
-	  # -bexpall does not export symbols beginning with underscore (_)
-	  always_export_symbols_F77=yes
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec_F77=' '
-	  archive_cmds_need_lc_F77=yes
-	  # This is similar to how AIX traditionally builds it's shared libraries.
-	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_F77='$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_F77='-L$libdir'
-      hardcode_minus_L_F77=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs_F77=no
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec_F77=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      hardcode_libdir_flag_spec_F77=' '
-      allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_From_new_cmds_F77='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes_F77=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case "$host_os" in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      archive_cmds_need_lc_F77=no
-      hardcode_direct_F77=no
-      hardcode_automatic_F77=yes
-      hardcode_shlibpath_var_F77=unsupported
-      whole_archive_flag_spec_F77=''
-      link_all_deplibs_F77=yes
-    if test "$GCC" = yes ; then
-#        echo "G77=$G77,compiler=$compiler,tagname=$tagname"
-        if test "$tagname" = "F77"; then
-archive_cmds_F77='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        else
-archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        fi
-    	output_verbose_link_cmd='echo'
-      module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-      archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-         module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-         archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs_F77=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_F77=yes
-      hardcode_minus_L_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | kfreebsd*-gnu | dragonfly*)
-      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	archive_cmds_F77='$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'
-      else
-	archive_cmds_F77='$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_F77='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      hardcode_direct_F77=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L_F77=yes
-      export_dynamic_flag_spec_F77='${wl}-E'
-      ;;
-
-    hpux10* | hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	*)
-	  archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*)
-	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
-	  hardcode_libdir_separator_F77=:
-	  hardcode_direct_F77=no
-	  hardcode_shlibpath_var_F77=no
-	  ;;
-	ia64*)
-	  hardcode_libdir_flag_spec_F77='-L$libdir'
-	  hardcode_direct_F77=no
-	  hardcode_shlibpath_var_F77=no
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L_F77=yes
-	  ;;
-	*)
-	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_separator_F77=:
-	  hardcode_direct_F77=yes
-	  export_dynamic_flag_spec_F77='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L_F77=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
-      fi
-      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      link_all_deplibs_F77=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    newsos6)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_F77=yes
-      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    openbsd*)
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-	export_dynamic_flag_spec_F77='${wl}-E'
-      else
-       case $host_os in
-	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	   hardcode_libdir_flag_spec_F77='-R$libdir'
-	   ;;
-	 *)
-	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-	   ;;
-       esac
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_minus_L_F77=yes
-      allow_undefined_flag_F77=unsupported
-      archive_cmds_F77='$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_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	allow_undefined_flag_F77=' -expect_unresolved \*'
-	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      else
-	allow_undefined_flag_F77=' -expect_unresolved \*'
-	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir'
-      fi
-      hardcode_libdir_separator_F77=:
-      ;;
-
-    sco3.2v5*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var_F77=no
-      export_dynamic_flag_spec_F77='${wl}-Bexport'
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ;;
-
-    solaris*)
-      no_undefined_flag_F77=' -z text'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-	wlarc=''
-	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	archive_expsym_cmds_F77='$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'
-      fi
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_shlibpath_var_F77=no
-      case $host_os in
-      solaris2.[0-5] | solaris2.[0-5].*) ;;
-      *)
- 	# The compiler driver will combine linker options so we
- 	# cannot just pass the convience library names through
- 	# without $wl, iff we do not link with $LD.
- 	# Luckily, gcc supports the same syntax we need for Sun Studio.
- 	# Supported since Solaris 2.6 (maybe 2.5.1?)
- 	case $wlarc in
- 	'')
- 	  whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
- 	*)
- 	  whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- 	esac ;;
-      esac
-      link_all_deplibs_F77=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_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_direct_F77=yes
-      hardcode_minus_L_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct_F77=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  reload_cmds_F77='$CC -r -o $output$reload_objs'
-	  hardcode_direct_F77=no
-        ;;
-	motorola)
-	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var_F77=no
-      export_dynamic_flag_spec_F77='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	hardcode_shlibpath_var_F77=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	ld_shlibs_F77=yes
-      fi
-      ;;
-
-    sysv4.2uw2*)
-      archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_F77=yes
-      hardcode_minus_L_F77=no
-      hardcode_shlibpath_var_F77=no
-      hardcode_runpath_var=yes
-      runpath_var=LD_RUN_PATH
-      ;;
-
-   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
-      no_undefined_flag_F77='${wl}-z ${wl}text'
-      if test "$GCC" = yes; then
-	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    sysv5*)
-      no_undefined_flag_F77=' -z text'
-      # $CC -shared without GNU ld will not create a library from C++
-      # object files and a static libstdc++, better avoid it by now
-      archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      archive_expsym_cmds_F77='$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'
-      hardcode_libdir_flag_spec_F77=
-      hardcode_shlibpath_var_F77=no
-      runpath_var='LD_RUN_PATH'
-      ;;
-
-    uts4*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    *)
-      ld_shlibs_F77=no
-      ;;
-    esac
-  fi
-
-echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-echo "${ECHO_T}$ld_shlibs_F77" >&6
-test "$ld_shlibs_F77" = 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
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_F77" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc_F77=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds_F77 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.
-      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-      $rm conftest*
-      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_F77
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
-        allow_undefined_flag_F77=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-	  archive_cmds_need_lc_F77=no
-        else
-	  archive_cmds_need_lc_F77=yes
-        fi
-        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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"
-if test "$GCC" = yes; then
-  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 ';' >/dev/null ; then
-    # 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.
-    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
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-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'
-  ;;
-
-aix4* | aix5*)
-  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*)
-  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'
-  ;;
-
-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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # 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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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)'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
-  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
-  ;;
-
-kfreebsd*-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='GNU ld.so'
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  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
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    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
-  ;;
-
-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'
-  ;;
-
-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*)
-  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
-  # 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
-
-  # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
-  ;;
-
-knetbsd*-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='GNU 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=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
-  ;;
-
-openbsd*)
-  version_type=sunos
-  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"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  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
-  ;;
-
-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.2uw2* | sysv4.3* | sysv5*)
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-  ;;
-
-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
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action_F77=
-if test -n "$hardcode_libdir_flag_spec_F77" || \
-   test -n "$runpath_var_F77" || \
-   test "X$hardcode_automatic_F77" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct_F77" != 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_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
-     test "$hardcode_minus_L_F77" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_F77=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_F77=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_F77=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-echo "${ECHO_T}$hardcode_action_F77" >&6
-
-if test "$hardcode_action_F77" = relink; 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
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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"
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}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"
-         echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-       else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-       ;;
-   *)
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-    ;;
-  esac
-fi
-
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # 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
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_F77 \
-    CC_F77 \
-    LD_F77 \
-    lt_prog_compiler_wl_F77 \
-    lt_prog_compiler_pic_F77 \
-    lt_prog_compiler_static_F77 \
-    lt_prog_compiler_no_builtin_flag_F77 \
-    export_dynamic_flag_spec_F77 \
-    thread_safe_flag_spec_F77 \
-    whole_archive_flag_spec_F77 \
-    enable_shared_with_static_runtimes_F77 \
-    old_archive_cmds_F77 \
-    old_archive_from_new_cmds_F77 \
-    predep_objects_F77 \
-    postdep_objects_F77 \
-    predeps_F77 \
-    postdeps_F77 \
-    compiler_lib_search_path_F77 \
-    archive_cmds_F77 \
-    archive_expsym_cmds_F77 \
-    postinstall_cmds_F77 \
-    postuninstall_cmds_F77 \
-    old_archive_from_expsyms_cmds_F77 \
-    allow_undefined_flag_F77 \
-    no_undefined_flag_F77 \
-    export_symbols_cmds_F77 \
-    hardcode_libdir_flag_spec_F77 \
-    hardcode_libdir_flag_spec_ld_F77 \
-    hardcode_libdir_separator_F77 \
-    hardcode_automatic_F77 \
-    module_cmds_F77 \
-    module_expsym_cmds_F77 \
-    lt_cv_prog_compiler_c_o_F77 \
-    exclude_expsyms_F77 \
-    include_expsyms_F77; do
-
-    case $var in
-    old_archive_cmds_F77 | \
-    old_archive_from_new_cmds_F77 | \
-    archive_cmds_F77 | \
-    archive_expsym_cmds_F77 | \
-    module_cmds_F77 | \
-    module_expsym_cmds_F77 | \
-    old_archive_from_expsyms_cmds_F77 | \
-    export_symbols_cmds_F77 | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_F77
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_F77
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_F77
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_F77
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_F77
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_F77
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_F77
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_F77
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_F77
-archive_expsym_cmds=$lt_archive_expsym_cmds_F77
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_F77
-module_expsym_cmds=$lt_module_expsym_cmds_F77
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_F77
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_F77
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_F77
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_F77
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_F77
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_F77
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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_F77
-
-# 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_F77
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_F77
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_F77
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
-
-# 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_F77
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_F77
-
-# 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
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_F77"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_F77
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_F77
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_F77
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_F77
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-	else
-	  tagname=""
-	fi
-	;;
-
-      GCJ)
-	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-
-
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-objext_GCJ=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-compiler_GCJ=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-archive_cmds_need_lc_GCJ=no
-
-old_archive_cmds_GCJ=$old_archive_cmds
-
-
-lt_prog_compiler_no_builtin_flag_GCJ=
-
-if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
-
-
-echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_rtti_exceptions=no
-  ac_outfile=conftest.$ac_objext
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:17638: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:17642: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_rtti_exceptions=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
-else
-    :
-fi
-
-fi
-
-lt_prog_compiler_wl_GCJ=
-lt_prog_compiler_pic_GCJ=
-lt_prog_compiler_static_GCJ=
-
-echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl_GCJ='-Wl,'
-    lt_prog_compiler_static_GCJ='-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_GCJ='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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_GCJ='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | pw32* | os2*)
-      # 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_GCJ='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic_GCJ='-fno-common'
-      ;;
-
-    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_GCJ=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic_GCJ=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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_GCJ='-fPIC'
-	;;
-      esac
-      ;;
-
-    *)
-      lt_prog_compiler_pic_GCJ='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static_GCJ='-Bstatic'
-      else
-	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         lt_prog_compiler_pic_GCJ='-qnocommon'
-         lt_prog_compiler_wl_GCJ='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | pw32* | os2*)
-      # 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_GCJ='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl_GCJ='-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_GCJ='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static_GCJ='-non_shared'
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    linux*)
-      case $cc_basename in
-      icc* | ecc*)
-	lt_prog_compiler_wl_GCJ='-Wl,'
-	lt_prog_compiler_pic_GCJ='-KPIC'
-	lt_prog_compiler_static_GCJ='-static'
-        ;;
-      pgcc* | pgf77* | pgf90*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	lt_prog_compiler_wl_GCJ='-Wl,'
-	lt_prog_compiler_pic_GCJ='-fpic'
-	lt_prog_compiler_static_GCJ='-static'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl_GCJ='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static_GCJ='-non_shared'
-        ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static_GCJ='-non_shared'
-      ;;
-
-    sco3.2v5*)
-      lt_prog_compiler_pic_GCJ='-Kpic'
-      lt_prog_compiler_static_GCJ='-dn'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	lt_prog_compiler_wl_GCJ='-Qoption ld ';;
-      *)
-	lt_prog_compiler_wl_GCJ='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl_GCJ='-Qoption ld '
-      lt_prog_compiler_pic_GCJ='-PIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	lt_prog_compiler_pic_GCJ='-Kconform_pic'
-	lt_prog_compiler_static_GCJ='-Bstatic'
-      fi
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      lt_prog_compiler_can_build_shared_GCJ=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic_GCJ='-pic'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared_GCJ=no
-      ;;
-    esac
-  fi
-
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_GCJ"; then
-
-echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
-if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_prog_compiler_pic_works_GCJ=no
-  ac_outfile=conftest.$ac_objext
-   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
-   # 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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:17900: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:17904: \$? = $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 >conftest.exp
-     $SED '/^$/d' conftest.err >conftest.er2
-     if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_prog_compiler_pic_works_GCJ=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
-
-if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
-    case $lt_prog_compiler_pic_GCJ in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
-     esac
-else
-    lt_prog_compiler_pic_GCJ=
-     lt_prog_compiler_can_build_shared_GCJ=no
-fi
-
-fi
-case "$host_os" in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_GCJ=
-    ;;
-  *)
-    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
-    ;;
-esac
-
-echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_c_o_GCJ=no
-   $rm -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   printf "$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}? :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:17962: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:17966: \$? = $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 > out/conftest.exp
-     $SED '/^$/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_GCJ=yes
-     fi
-   fi
-   chmod u+w .
-   $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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-
-  runpath_var=
-  allow_undefined_flag_GCJ=
-  enable_shared_with_static_runtimes_GCJ=no
-  archive_cmds_GCJ=
-  archive_expsym_cmds_GCJ=
-  old_archive_From_new_cmds_GCJ=
-  old_archive_from_expsyms_cmds_GCJ=
-  export_dynamic_flag_spec_GCJ=
-  whole_archive_flag_spec_GCJ=
-  thread_safe_flag_spec_GCJ=
-  hardcode_libdir_flag_spec_GCJ=
-  hardcode_libdir_flag_spec_ld_GCJ=
-  hardcode_libdir_separator_GCJ=
-  hardcode_direct_GCJ=no
-  hardcode_minus_L_GCJ=no
-  hardcode_shlibpath_var_GCJ=unsupported
-  link_all_deplibs_GCJ=unknown
-  hardcode_automatic_GCJ=no
-  module_cmds_GCJ=
-  module_expsym_cmds_GCJ=
-  always_export_symbols_GCJ=no
-  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms_GCJ=
-  # 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_GCJ="_GLOBAL_OFFSET_TABLE_"
-  # 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.
-  extract_expsyms_cmds=
-  # Just being paranoid about ensuring that cc_basename is set.
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs_GCJ=yes
-  if test "$with_gnu_ld" = 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_GCJ='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-  	whole_archive_flag_spec_GCJ=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>/dev/null` in
-      *\ [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
-    aix3* | aix4* | aix5*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	ld_shlibs_GCJ=no
-	cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_GCJ='$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_GCJ='-L$libdir'
-      hardcode_minus_L_GCJ=yes
-
-      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      ld_shlibs_GCJ=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	allow_undefined_flag_GCJ=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      allow_undefined_flag_GCJ=unsupported
-      always_export_symbols_GCJ=no
-      enable_shared_with_static_runtimes_GCJ=yes
-      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	archive_expsym_cmds_GCJ='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}--image-base=0x10000000  ${wl}--out-implib,$lib'
-      else
-	ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    linux*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	tmp_addflag=
-	case $cc_basename,$host_cpu in
-	pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec_GCJ='${wl}--whole-archive,`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* )			# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec_GCJ='${wl}--whole-archive,`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;;
-	esac
-	archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-	if test $supports_anon_versioning = yes; then
-	  archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
-  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-  $echo "local: *; };" >> $output_objdir/$libname.ver~
-	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	fi
-      else
-	ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris* | sysv5*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-	ld_shlibs_GCJ=no
-	cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    sunos4*)
-      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs_GCJ=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs_GCJ" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec_GCJ=
-      export_dynamic_flag_spec_GCJ=
-      whole_archive_flag_spec_GCJ=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag_GCJ=unsupported
-      always_export_symbols_GCJ=yes
-      archive_expsym_cmds_GCJ='$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_GCJ=yes
-      if test "$GCC" = yes && test -z "$link_static_flag"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	hardcode_direct_GCJ=unsupported
-      fi
-      ;;
-
-    aix4* | aix5*)
-      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
-	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-	  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-	else
-	  export_symbols_cmds_GCJ='$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].*|aix5*)
-	  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_GCJ=''
-      hardcode_direct_GCJ=yes
-      hardcode_libdir_separator_GCJ=':'
-      link_all_deplibs_GCJ=yes
-
-      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
-  	  hardcode_direct_GCJ=yes
-	  else
-  	  # We have old collect2
-  	  hardcode_direct_GCJ=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_GCJ=yes
-  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
-  	  hardcode_libdir_separator_GCJ=
-	  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
-
-      # 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_GCJ=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_GCJ='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
-	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-	if test "$host_cpu" = ia64; then
-	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
-	  allow_undefined_flag_GCJ="-z nodefs"
-	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an empty executable.
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-	 hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok'
-	  allow_undefined_flag_GCJ=' ${wl}-berok'
-	  # -bexpall does not export symbols beginning with underscore (_)
-	  always_export_symbols_GCJ=yes
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec_GCJ=' '
-	  archive_cmds_need_lc_GCJ=yes
-	  # This is similar to how AIX traditionally builds it's shared libraries.
-	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_GCJ='$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_GCJ='-L$libdir'
-      hardcode_minus_L_GCJ=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs_GCJ=no
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec_GCJ=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      hardcode_libdir_flag_spec_GCJ=' '
-      allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_From_new_cmds_GCJ='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes_GCJ=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case "$host_os" in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      archive_cmds_need_lc_GCJ=no
-      hardcode_direct_GCJ=no
-      hardcode_automatic_GCJ=yes
-      hardcode_shlibpath_var_GCJ=unsupported
-      whole_archive_flag_spec_GCJ=''
-      link_all_deplibs_GCJ=yes
-    if test "$GCC" = yes ; then
-#        echo "G77=$G77,compiler=$compiler,tagname=$tagname"
-        if test "$tagname" = "F77"; then
-archive_cmds_GCJ='$CC -dynamiclib -single_module -nostdlib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        else
-archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        fi
-    	output_verbose_link_cmd='echo'
-      module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-      archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-         module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-         archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs_GCJ=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_GCJ=yes
-      hardcode_minus_L_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | kfreebsd*-gnu | dragonfly*)
-      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	archive_cmds_GCJ='$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'
-      else
-	archive_cmds_GCJ='$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_GCJ='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      hardcode_direct_GCJ=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L_GCJ=yes
-      export_dynamic_flag_spec_GCJ='${wl}-E'
-      ;;
-
-    hpux10* | hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case "$host_cpu" in
-	hppa*64*|ia64*)
-	  archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	*)
-	  archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	case "$host_cpu" in
-	hppa*64*)
-	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
-	  hardcode_libdir_separator_GCJ=:
-	  hardcode_direct_GCJ=no
-	  hardcode_shlibpath_var_GCJ=no
-	  ;;
-	ia64*)
-	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
-	  hardcode_direct_GCJ=no
-	  hardcode_shlibpath_var_GCJ=no
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L_GCJ=yes
-	  ;;
-	*)
-	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_separator_GCJ=:
-	  hardcode_direct_GCJ=yes
-	  export_dynamic_flag_spec_GCJ='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L_GCJ=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
-      fi
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      link_all_deplibs_GCJ=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    newsos6)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_GCJ=yes
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    openbsd*)
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-	export_dynamic_flag_spec_GCJ='${wl}-E'
-      else
-       case $host_os in
-	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
-	   ;;
-	 *)
-	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-	   ;;
-       esac
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_minus_L_GCJ=yes
-      allow_undefined_flag_GCJ=unsupported
-      archive_cmds_GCJ='$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_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	allow_undefined_flag_GCJ=' -expect_unresolved \*'
-	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      else
-	allow_undefined_flag_GCJ=' -expect_unresolved \*'
-	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir'
-      fi
-      hardcode_libdir_separator_GCJ=:
-      ;;
-
-    sco3.2v5*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var_GCJ=no
-      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ;;
-
-    solaris*)
-      no_undefined_flag_GCJ=' -z text'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-	wlarc=''
-	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	archive_expsym_cmds_GCJ='$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'
-      fi
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_shlibpath_var_GCJ=no
-      case $host_os in
-      solaris2.[0-5] | solaris2.[0-5].*) ;;
-      *)
- 	# The compiler driver will combine linker options so we
- 	# cannot just pass the convience library names through
- 	# without $wl, iff we do not link with $LD.
- 	# Luckily, gcc supports the same syntax we need for Sun Studio.
- 	# Supported since Solaris 2.6 (maybe 2.5.1?)
- 	case $wlarc in
- 	'')
- 	  whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
- 	*)
- 	  whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- 	esac ;;
-      esac
-      link_all_deplibs_GCJ=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_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_minus_L_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct_GCJ=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
-	  hardcode_direct_GCJ=no
-        ;;
-	motorola)
-	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var_GCJ=no
-      export_dynamic_flag_spec_GCJ='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	hardcode_shlibpath_var_GCJ=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	ld_shlibs_GCJ=yes
-      fi
-      ;;
-
-    sysv4.2uw2*)
-      archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_GCJ=yes
-      hardcode_minus_L_GCJ=no
-      hardcode_shlibpath_var_GCJ=no
-      hardcode_runpath_var=yes
-      runpath_var=LD_RUN_PATH
-      ;;
-
-   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
-      no_undefined_flag_GCJ='${wl}-z ${wl}text'
-      if test "$GCC" = yes; then
-	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    sysv5*)
-      no_undefined_flag_GCJ=' -z text'
-      # $CC -shared without GNU ld will not create a library from C++
-      # object files and a static libstdc++, better avoid it by now
-      archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      archive_expsym_cmds_GCJ='$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'
-      hardcode_libdir_flag_spec_GCJ=
-      hardcode_shlibpath_var_GCJ=no
-      runpath_var='LD_RUN_PATH'
-      ;;
-
-    uts4*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    *)
-      ld_shlibs_GCJ=no
-      ;;
-    esac
-  fi
-
-echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-echo "${ECHO_T}$ld_shlibs_GCJ" >&6
-test "$ld_shlibs_GCJ" = 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
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_GCJ" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc_GCJ=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds_GCJ 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.
-      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-      $rm conftest*
-      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_GCJ
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
-        allow_undefined_flag_GCJ=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-	  archive_cmds_need_lc_GCJ=no
-        else
-	  archive_cmds_need_lc_GCJ=yes
-        fi
-        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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"
-if test "$GCC" = yes; then
-  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 ';' >/dev/null ; then
-    # 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.
-    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
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-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'
-  ;;
-
-aix4* | aix5*)
-  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*)
-  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'
-  ;;
-
-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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # 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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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)'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
-  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
-  ;;
-
-kfreebsd*-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='GNU ld.so'
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  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
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    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
-  ;;
-
-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'
-  ;;
-
-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*)
-  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
-  # 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
-
-  # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
-  ;;
-
-knetbsd*-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='GNU 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=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
-  ;;
-
-openbsd*)
-  version_type=sunos
-  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"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  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
-  ;;
-
-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.2uw2* | sysv4.3* | sysv5*)
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-  ;;
-
-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
-echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-hardcode_action_GCJ=
-if test -n "$hardcode_libdir_flag_spec_GCJ" || \
-   test -n "$runpath_var_GCJ" || \
-   test "X$hardcode_automatic_GCJ" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct_GCJ" != 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_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
-     test "$hardcode_minus_L_GCJ" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_GCJ=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_GCJ=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_GCJ=unsupported
-fi
-echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-echo "${ECHO_T}$hardcode_action_GCJ" >&6
-
-if test "$hardcode_action_GCJ" = relink; 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
-
-striplib=
-old_striplib=
-echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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"
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}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"
-         echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-       else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-       ;;
-   *)
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-    ;;
-  esac
-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*)
-    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
-    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; 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
-
-   ;;
-
-  *)
-    echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-if test "${ac_cv_func_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); 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 shl_load
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-/* 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_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-char (*f) () = shl_load;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != shl_load;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-if test $ac_cv_func_shl_load = yes; then
-  lt_cv_dlopen="shl_load"
-else
-  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char shl_load ();
-int
-main ()
-{
-shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_shl_load=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-if test $ac_cv_lib_dld_shl_load = yes; then
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-else
-  echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-if test "${ac_cv_func_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); 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 dlopen
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-/* 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_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-char (*f) () = dlopen;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != dlopen;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-if test $ac_cv_func_dlopen = yes; then
-  lt_cv_dlopen="dlopen"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dl_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-if test $ac_cv_lib_dl_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlopen ();
-int
-main ()
-{
-dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_svld_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_svld_dlopen=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-if test $ac_cv_lib_svld_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dld_link ();
-int
-main ()
-{
-dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dld_dld_link=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_dld_dld_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-if test $ac_cv_lib_dld_dld_link = yes; then
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-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"
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<EOF
-#line 20207 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      LDFLAGS="$LDFLAGS $link_static_flag"
-      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<EOF
-#line 20305 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 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_unknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$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
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # 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
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_GCJ \
-    CC_GCJ \
-    LD_GCJ \
-    lt_prog_compiler_wl_GCJ \
-    lt_prog_compiler_pic_GCJ \
-    lt_prog_compiler_static_GCJ \
-    lt_prog_compiler_no_builtin_flag_GCJ \
-    export_dynamic_flag_spec_GCJ \
-    thread_safe_flag_spec_GCJ \
-    whole_archive_flag_spec_GCJ \
-    enable_shared_with_static_runtimes_GCJ \
-    old_archive_cmds_GCJ \
-    old_archive_from_new_cmds_GCJ \
-    predep_objects_GCJ \
-    postdep_objects_GCJ \
-    predeps_GCJ \
-    postdeps_GCJ \
-    compiler_lib_search_path_GCJ \
-    archive_cmds_GCJ \
-    archive_expsym_cmds_GCJ \
-    postinstall_cmds_GCJ \
-    postuninstall_cmds_GCJ \
-    old_archive_from_expsyms_cmds_GCJ \
-    allow_undefined_flag_GCJ \
-    no_undefined_flag_GCJ \
-    export_symbols_cmds_GCJ \
-    hardcode_libdir_flag_spec_GCJ \
-    hardcode_libdir_flag_spec_ld_GCJ \
-    hardcode_libdir_separator_GCJ \
-    hardcode_automatic_GCJ \
-    module_cmds_GCJ \
-    module_expsym_cmds_GCJ \
-    lt_cv_prog_compiler_c_o_GCJ \
-    exclude_expsyms_GCJ \
-    include_expsyms_GCJ; do
-
-    case $var in
-    old_archive_cmds_GCJ | \
-    old_archive_from_new_cmds_GCJ | \
-    archive_cmds_GCJ | \
-    archive_expsym_cmds_GCJ | \
-    module_cmds_GCJ | \
-    module_expsym_cmds_GCJ | \
-    old_archive_from_expsyms_cmds_GCJ | \
-    export_symbols_cmds_GCJ | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_GCJ
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_GCJ
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_GCJ
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_GCJ
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_GCJ
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_GCJ
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_GCJ
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_GCJ
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_GCJ
-archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_GCJ
-module_expsym_cmds=$lt_module_expsym_cmds_GCJ
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_GCJ
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_GCJ
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_GCJ
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_GCJ
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_GCJ
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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_GCJ
-
-# 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_GCJ
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_GCJ
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_GCJ
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
-
-# 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_GCJ
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_GCJ
-
-# 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
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_GCJ"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_GCJ
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_GCJ
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_GCJ
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_GCJ
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-	else
-	  tagname=""
-	fi
-	;;
-
-      RC)
-
-
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-objext_RC=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-
-# 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.
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-
-ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
-
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-compiler_RC=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-lt_cv_prog_compiler_c_o_RC=yes
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # 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
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_RC \
-    CC_RC \
-    LD_RC \
-    lt_prog_compiler_wl_RC \
-    lt_prog_compiler_pic_RC \
-    lt_prog_compiler_static_RC \
-    lt_prog_compiler_no_builtin_flag_RC \
-    export_dynamic_flag_spec_RC \
-    thread_safe_flag_spec_RC \
-    whole_archive_flag_spec_RC \
-    enable_shared_with_static_runtimes_RC \
-    old_archive_cmds_RC \
-    old_archive_from_new_cmds_RC \
-    predep_objects_RC \
-    postdep_objects_RC \
-    predeps_RC \
-    postdeps_RC \
-    compiler_lib_search_path_RC \
-    archive_cmds_RC \
-    archive_expsym_cmds_RC \
-    postinstall_cmds_RC \
-    postuninstall_cmds_RC \
-    old_archive_from_expsyms_cmds_RC \
-    allow_undefined_flag_RC \
-    no_undefined_flag_RC \
-    export_symbols_cmds_RC \
-    hardcode_libdir_flag_spec_RC \
-    hardcode_libdir_flag_spec_ld_RC \
-    hardcode_libdir_separator_RC \
-    hardcode_automatic_RC \
-    module_cmds_RC \
-    module_expsym_cmds_RC \
-    lt_cv_prog_compiler_c_o_RC \
-    exclude_expsyms_RC \
-    include_expsyms_RC; do
-
-    case $var in
-    old_archive_cmds_RC | \
-    old_archive_from_new_cmds_RC | \
-    archive_cmds_RC | \
-    archive_expsym_cmds_RC | \
-    module_cmds_RC | \
-    module_expsym_cmds_RC | \
-    old_archive_from_expsyms_cmds_RC | \
-    export_symbols_cmds_RC | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_RC
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_compiler_RC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_RC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_RC
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_RC
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_RC
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_RC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_RC
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_RC
-archive_expsym_cmds=$lt_archive_expsym_cmds_RC
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_RC
-module_expsym_cmds=$lt_module_expsym_cmds_RC
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_RC
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_RC
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_RC
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_RC
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_RC
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_RC
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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_RC
-
-# 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_RC
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_RC
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_RC
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
-
-# 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_RC
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_RC
-
-# 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
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path_RC"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_RC
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_RC
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_RC
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_RC
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-	;;
-
-      *)
-	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
-echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
-   { (exit 1); exit 1; }; }
-	;;
-      esac
-
-      # Append the new tag name to the list of available tags.
-      if test -n "$tagname" ; then
-      available_tags="$available_tags $tagname"
-    fi
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  # Now substitute the updated list of available tags.
-  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-    mv "${ofile}T" "$ofile"
-    chmod +x "$ofile"
-  else
-    rm -f "${ofile}T"
-    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
-echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-fi
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-# Prevent multiple expansion
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-
-#   If --with-pic=no is set we should honour that.
-
-
-if test x$pic_mode = xno; then
-  NOPIC_TRUE=
-  NOPIC_FALSE='#'
-else
-  NOPIC_TRUE='#'
-  NOPIC_FALSE=
-fi
-
-
-#  Conditional defining whether we build with POSIX thread support.
-
-# Check whether --with-pthreads or --without-pthreads was given.
-if test "${with_pthreads+set}" = set; then
-  withval="$with_pthreads"
-  if test "$withval" = "yes"; then
-           use_pthreads="1"
-        else
-           use_pthreads="0"
-        fi
-else
-  use_pthreads="1"
-fi;
-if test "$use_pthreads" = "1"; then
-
-echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
-echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
-if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char pthread_create ();
-int
-main ()
-{
-pthread_create ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_pthread_pthread_create=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_pthread_pthread_create=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
-echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
-if test $ac_cv_lib_pthread_pthread_create = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
-  LIBS="-lpthread $LIBS"
-
-else
-  use_pthreads="0"
-fi
-
-fi
-
-
-if test x$use_pthreads = x0; then
-  NOTHREADS_TRUE=
-  NOTHREADS_FALSE='#'
-else
-  NOTHREADS_TRUE='#'
-  NOTHREADS_FALSE=
-fi
-
-THREADS=$use_pthreads
-
-
-# See which variadic function API to use
-
-
-for ac_header in stdarg.h varargs.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to ussc at star.rl.ac.uk ##
-## --------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- break
-fi
-
-done
-
-
-# Can we use backtrace?
-
-for ac_header in execinfo.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to ussc at star.rl.ac.uk ##
-## --------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_func in backtrace
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); 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 $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* 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_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-# Do we have reentrant strerror and strtok?
-
-
-for ac_func in strerror_r strtok_r
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); 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 $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* 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_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-#  See if we have long doubles (used by the Mapping and Region classes)
-echo "$as_me:$LINENO: checking for long double" >&5
-echo $ECHO_N "checking for long double... $ECHO_C" >&6
-if test "${ac_cv_type_long_double+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if ((long double *) 0)
-  return 0;
-if (sizeof (long double))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_long_double=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_long_double=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5
-echo "${ECHO_T}$ac_cv_type_long_double" >&6
-if test $ac_cv_type_long_double = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONG_DOUBLE 1
-_ACEOF
-
-
-fi
-
-
-#   ast_link needs to be able to link against the Fortran runtime if
-#   necessary
-
-ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-echo "$as_me:$LINENO: checking how to get verbose linking output from $FC" >&5
-echo $ECHO_N "checking how to get verbose linking output from $FC... $ECHO_C" >&6
-if test "${ac_cv_prog_fc_v+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_fc_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_fc_v=
-# Try some options frequently used verbose output
-for ac_verb in -v -verbose --verbose -V -\#\#\#; do
-  cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FCFLAGS
-FCFLAGS="$FCFLAGS $ac_verb"
-(eval echo $as_me:22116: \"$ac_link\") >&5
-ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'`
-echo "$ac_fc_v_output" >&5
-FCFLAGS=$ac_save_FFLAGS
-
-rm -f conftest*
-
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_fc_v_output="`echo $ac_fc_v_output |
-	grep 'LPATH is:' |
-	sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_fc_v_output"
-
-case $ac_fc_v_output in
-  # If we are using xlf then replace all the commas with spaces.
-  *xlfentry*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
-
-  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
-  # $LIBS confuse us, and the libraries appear later in the output anyway).
-  *mGLOB_options_string*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;;
-
-  # If we are using Cray Fortran then delete quotes.
-  # Use "\"" instead of '"' for font-lock-mode.
-  # FIXME: a more general fix for quoted arguments with spaces?
-  *cft90*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed "s/\"//g"` ;;
-esac
-
-
-  # look for -l* and *.a constructs in the output
-  for ac_arg in $ac_fc_v_output; do
-     case $ac_arg in
-        [\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
-          ac_cv_prog_fc_v=$ac_verb
-          break 2 ;;
-     esac
-  done
-done
-if test -z "$ac_cv_prog_fc_v"; then
-   { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $FC" >&5
-echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;}
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ echo "$as_me:$LINENO: WARNING: compilation failed" >&5
-echo "$as_me: WARNING: compilation failed" >&2;}
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_fc_v" >&5
-echo "${ECHO_T}$ac_cv_prog_fc_v" >&6
-echo "$as_me:$LINENO: checking for Fortran libraries of $FC" >&5
-echo $ECHO_N "checking for Fortran libraries of $FC... $ECHO_C" >&6
-if test "${ac_cv_fc_libs+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "x$FCLIBS" != "x"; then
-  ac_cv_fc_libs="$FCLIBS" # Let the user override the test.
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FCFLAGS
-FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v"
-(eval echo $as_me:22194: \"$ac_link\") >&5
-ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'`
-echo "$ac_fc_v_output" >&5
-FCFLAGS=$ac_save_FFLAGS
-
-rm -f conftest*
-
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_fc_v_output="`echo $ac_fc_v_output |
-	grep 'LPATH is:' |
-	sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_fc_v_output"
-
-case $ac_fc_v_output in
-  # If we are using xlf then replace all the commas with spaces.
-  *xlfentry*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
-
-  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
-  # $LIBS confuse us, and the libraries appear later in the output anyway).
-  *mGLOB_options_string*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;;
-
-  # If we are using Cray Fortran then delete quotes.
-  # Use "\"" instead of '"' for font-lock-mode.
-  # FIXME: a more general fix for quoted arguments with spaces?
-  *cft90*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed "s/\"//g"` ;;
-esac
-
-
-
-ac_cv_fc_libs=
-
-# Save positional arguments (if any)
-ac_save_positional="$@"
-
-set X $ac_fc_v_output
-while test $# != 1; do
-  shift
-  ac_arg=$1
-  case $ac_arg in
-        [\\/]*.a | ?:[\\/]*.a)
-            ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
-
-  if test x"$ac_exists" = xtrue; then
-  :
-else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-
-          ;;
-        -bI:*)
-            ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
-
-  if test x"$ac_exists" = xtrue; then
-  :
-else
-  if test "$ac_compiler_gnu" = yes; then
-  for ac_link_opt in $ac_arg; do
-    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
-  done
-else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-fi
-
-          ;;
-          # Ignore these flags.
-        -lang* | -lcrt*.o | -lc | -lgcc | -libmil | -LANG:=*)
-          ;;
-        -lkernel32)
-          test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-          ;;
-        -[LRuY])
-          # These flags, when seen by themselves, take an argument.
-          # We remove the space between option and argument and re-iterate
-          # unless we find an empty arg or a new option (starting with -)
-	  case $2 in
-	     "" | -*);;
-	     *)
-		ac_arg="$ac_arg$2"
-		shift; shift
-		set X $ac_arg "$@"
-		;;
-	  esac
-          ;;
-        -YP,*)
-          for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
-              ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_j" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
-
-  if test x"$ac_exists" = xtrue; then
-  :
-else
-  ac_arg="$ac_arg $ac_j"
-                               ac_cv_fc_libs="$ac_cv_fc_libs $ac_j"
-fi
-
-          done
-          ;;
-        -[lLR]*)
-            ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
-
-  if test x"$ac_exists" = xtrue; then
-  :
-else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-
-          ;;
-          # Ignore everything else.
-  esac
-done
-# restore positional arguments
-set X $ac_save_positional; shift
-
-# We only consider "LD_RUN_PATH" on Solaris systems.  If this is seen,
-# then we insist that the "run path" must be an absolute path (i.e. it
-# must begin with a "/").
-case `(uname -sr) 2>/dev/null` in
-   "SunOS 5"*)
-      ac_ld_run_path=`echo $ac_fc_v_output |
-                        sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
-      test "x$ac_ld_run_path" != x &&
-        if test "$ac_compiler_gnu" = yes; then
-  for ac_link_opt in $ac_ld_run_path; do
-    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
-  done
-else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path"
-fi
-      ;;
-esac
-fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_fc_libs" >&5
-echo "${ECHO_T}$ac_cv_fc_libs" >&6
-FCLIBS="$ac_cv_fc_libs"
-
-
-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
-
-
-#   Find an absolute path to the Perl binary, augmenting the path with the
-#   location of the Starlink Perl build.  If this fails, then set @PERL@
-#   to the backup `/usr/bin/env perl', which will find Perl if it exists
-#   in the path at runtime.
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PERL+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $PERL in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$PATH"
-for as_dir in $as_dummy
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="/usr/bin/env perl"
-  ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-
-if test -n "$PERL"; then
-  echo "$as_me:$LINENO: result: $PERL" >&5
-echo "${ECHO_T}$PERL" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-#   Function and declaration checks
-
-for ac_func in isnan
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); 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 $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* 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_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-echo "$as_me:$LINENO: checking whether isnan is declared" >&5
-echo $ECHO_N "checking whether isnan is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_isnan+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <math.h>
-
-
-int
-main ()
-{
-#ifndef isnan
-  char *p = (char *) isnan;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_isnan=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_isnan=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_isnan" >&5
-echo "${ECHO_T}$ac_cv_have_decl_isnan" >&6
-if test $ac_cv_have_decl_isnan = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ISNAN 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ISNAN 0
-_ACEOF
-
-
-fi
-
-
-      for _star_tmp in sst htx
-  do
-    STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<sourceset>$_star_tmp</sourceset>"
-  done
-
-      for _star_tmp in sla
-  do
-    STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<build>$_star_tmp</build>"
-  done
-
-
-#  Perform the check that configures f77.h.in for the return type of REAL
-#  Fortran functions. On 64-bit g77 with f2c compatibility this is double
-#  not float.
-$_star_docs_only &&
-        { { echo "$as_me:$LINENO: error: STAR_CNF_F2C_SYMBOLS in docs-only dir" >&5
-echo "$as_me: error: STAR_CNF_F2C_SYMBOLS in docs-only dir" >&2;}
-   { (exit 1); exit 1; }; }
-    echo "$as_me:$LINENO: checking if $FC is in strict f2c compatible mode" >&5
-echo $ECHO_N "checking if $FC is in strict f2c compatible mode... $ECHO_C" >&6
-if test "${star_cv_cnf_f2c_compatible+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-          if test "$ac_cv_fc_compiler_gnu" = yes; then
-                      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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-float fred_() {
-   return 1.0f;
-}
-
-_ACEOF
-           if (eval $ac_compile) 2>&5
-           then
-               mv conftest.$ac_objext c-conftest.$ac_objext
-           else
-               { { echo "$as_me:$LINENO: error: cannot compile a C function!" >&5
-echo "$as_me: error: cannot compile a C function!" >&2;}
-   { (exit 1); exit 1; }; }
-           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
-
-           ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
-           cat >conftest.$ac_ext <<_ACEOF
-
-      PROGRAM F2CTEST
-      REAL FRED
-      REAL R
-      R = FRED()
-      IF ( R .NE. 0.0 ) THEN
-         WRITE(*,*) 'no'
-      ELSE
-         WRITE(*,*) 'yes'
-      ENDIF
-      END
-
-_ACEOF
-           star_cv_cnf_f2c_compatible=yes
-           $FC $FCFLAGS $opt -o conftest conftest.f c-conftest.$ac_objext 2>&5
-           if test -r conftest
-           then
-              star_cv_cnf_f2c_compatible=`eval conftest | sed 's/\ //g'` > /dev/null
-           else
-              { { echo "$as_me:$LINENO: error: failed to link program" >&5
-echo "$as_me: error: failed to link program" >&2;}
-   { (exit 1); exit 1; }; }
-           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
-
-           rm -f conftest* c-conftest*
-      else
-         # Not a GNU compiler.
-         star_cv_cnf_f2c_compatible=no
-      fi
-
-fi
-echo "$as_me:$LINENO: result: $star_cv_cnf_f2c_compatible" >&5
-echo "${ECHO_T}$star_cv_cnf_f2c_compatible" >&6
-    if test "$star_cv_cnf_f2c_compatible" = "yes"
-    then
-        REAL_FUNCTION_TYPE=double
-
-    else
-        REAL_FUNCTION_TYPE=float
-
-    fi
-
-
-# Determine the type of Fortran character string lengths.
-echo "$as_me:$LINENO: checking for void*" >&5
-echo $ECHO_N "checking for void*... $ECHO_C" >&6
-if test "${ac_cv_type_voidp+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if ((void* *) 0)
-  return 0;
-if (sizeof (void*))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_voidp=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_voidp=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_voidp" >&5
-echo "${ECHO_T}$ac_cv_type_voidp" >&6
-
-echo "$as_me:$LINENO: checking size of void*" >&5
-echo $ECHO_N "checking size of void*... $ECHO_C" >&6
-if test "${ac_cv_sizeof_voidp+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$ac_cv_type_voidp" = yes; then
-  # The cast to unsigned long works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) >= 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_hi=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_lo=`expr $ac_mid + 1`
-		    if test $ac_lo -le $ac_mid; then
-		      ac_lo= ac_hi=
-		      break
-		    fi
-		    ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_hi=`expr '(' $ac_mid ')' - 1`
-		       if test $ac_mid -le $ac_hi; then
-			 ac_lo= ac_hi=
-			 break
-		       fi
-		       ac_mid=`expr 2 '*' $ac_mid`
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_lo= ac_hi=
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_voidp=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; } ;;
-esac
-else
-  if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-long longval () { return (long) (sizeof (void*)); }
-unsigned long ulongval () { return (long) (sizeof (void*)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    exit (1);
-  if (((long) (sizeof (void*))) < 0)
-    {
-      long i = longval ();
-      if (i != ((long) (sizeof (void*))))
-	exit (1);
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long i = ulongval ();
-      if (i != ((long) (sizeof (void*))))
-	exit (1);
-      fprintf (f, "%lu\n", i);
-    }
-  exit (ferror (f) || fclose (f) != 0);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_voidp=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void*), 77
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-rm -f conftest.val
-else
-  ac_cv_sizeof_voidp=0
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_voidp" >&5
-echo "${ECHO_T}$ac_cv_sizeof_voidp" >&6
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
-_ACEOF
-
-              echo "$as_me:$LINENO: checking whether ${FC} has the %LOC extension" >&5
-echo $ECHO_N "checking whether ${FC} has the %LOC extension... $ECHO_C" >&6
-if test "${ac_cv_fc_have_percentloc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
-                          cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      INTEGER I, ADDR
-      I = 1
-      ADDR = %LOC( I )
-
-      end
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_fc_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_fc_have_percentloc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_fc_have_percentloc=no
-fi
-rm -f conftest.err conftest.$ac_objext 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
-echo "$as_me:$LINENO: result: $ac_cv_fc_have_percentloc" >&5
-echo "${ECHO_T}$ac_cv_fc_have_percentloc" >&6
-          if test $ac_cv_fc_have_percentloc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_PERCENTLOC 1
-_ACEOF
-
-          fi
-     echo "$as_me:$LINENO: checking type used for Fortran string lengths" >&5
-echo $ECHO_N "checking type used for Fortran string lengths... $ECHO_C" >&6
-if test "${star_cv_cnf_trail_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$ac_cv_sizeof_voidp" = 8 -a "$ac_cv_fc_compiler_gnu" = no; then
-           if "$FC" -V 2>&1 < /dev/null | grep 'Intel.*64' > /dev/null; then
-              star_cv_cnf_trail_type=long
-           elif "$FC" -V 2>&1 < /dev/null | grep 'Sun.*Fortran' > /dev/null; then
-              star_cv_cnf_trail_type=long
-           else
-                            ac_ext=${FC_SRCEXT-f}
-ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
-              if test "$ac_cv_fc_have_percentloc" = yes; then
-                 FORTRAN_GETLOC='%loc'
-              else
-                 FORTRAN_GETLOC='loc'
-              fi
-              cat >conftest.$ac_ext <<_ACEOF
-
-      program conftest
-
-C  checks passing 4 byte character string lengths on 64bit compiler.
-
-      integer*8 ip1, ip2
-      integer*4 l1, l2
-      integer dummy1, dummy2
-      real dummy3, dummy4
-      double precision dummy5, dummy6
-
-      character str1*(1024)
-      character str2*(2048)
-
-      ip1 = $FORTRAN_GETLOC (str1)
-      ip2 = $FORTRAN_GETLOC (str2)
-
-      l1 = 1024
-      l2 = 2048
-
-      call report( dummy1, dummy2, %val(ip1), dummy3, dummy4,
-     :             %val(ip2), dummy5, dummy6,
-     :             %val(l1), %val(l2) )
-
-      end
-
-      subroutine report( dummy1, dummy2, str1, dummy3, dummy4,
-     :                   str2, dummy5, dummy6 )
-      integer dummy1, dummy2
-      real dummy3, dummy4
-      double precision dummy5, dummy6
-
-      character*(*) str1
-      character*(*) str2
-
-      if ( len(str1) .eq. 1024 .and. len(str2) .eq. 2048 ) then
-         print *, 'int'
-      else
-         print *, 'long'
-      endif
-      end
-
-_ACEOF
-              star_cv_cnf_trail_type=int
-              $FC $FCFLAGS $opt -o conftest conftest.f 2>&5
-              if test -r conftest
-              then
-                 star_cv_cnf_trail_type=`eval conftest | sed 's/\ //g'` > /dev/null
-              else
-                 { { echo "$as_me:$LINENO: error: failed to link program" >&5
-echo "$as_me: error: failed to link program" >&2;}
-   { (exit 1); exit 1; }; }
-              fi
-              rm -f conftest*
-              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
-        else
-           star_cv_cnf_trail_type=int
-        fi
-
-fi
-echo "$as_me:$LINENO: result: $star_cv_cnf_trail_type" >&5
-echo "${ECHO_T}$star_cv_cnf_trail_type" >&6
-    TRAIL_TYPE=$star_cv_cnf_trail_type
-
-
-cat >>confdefs.h <<_ACEOF
-#define TRAIL_TYPE $star_cv_cnf_trail_type
-_ACEOF
-
-
-
-#   Declare the message file.
-#
-    $_star_docs_only &&
-        { { echo "$as_me:$LINENO: error: STAR_MESSGEN in docs-only directory" >&5
-echo "$as_me: error: STAR_MESSGEN in docs-only directory" >&2;}
-   { (exit 1); exit 1; }; }
-          for _star_tmp in messgen
-  do
-    STAR_DEPENDENCIES_CHILDREN="$STAR_DEPENDENCIES_CHILDREN<sourceset>$_star_tmp</sourceset>"
-  done
-
-    _star_tmp='ast_err.msg'
-for marker in $_star_tmp
-do
-    if test -f $marker; then
-        _star_predist_marker_present=:
-        { echo "$as_me:$LINENO: found predist marker file $marker" >&5
-echo "$as_me: found predist marker file $marker" >&6;}
-    else
-        _star_predist_marker_present=false
-    fi
-    case $_star_predist_status in
-        unknown)
-            if $_star_predist_marker_present; then
-                # we do want to build sourceset files
-                _star_predist_status=predist
-                PREDIST=
-                { echo "$as_me:$LINENO: in pre-distribution state" >&5
-echo "$as_me: in pre-distribution state" >&6;}
-            else
-                _star_predist_status=postdist
-                PREDIST='#'
-                { echo "$as_me:$LINENO: in post-distribution state" >&5
-echo "$as_me: in post-distribution state" >&6;}
-            fi
-            ;;
-        predist)
-            if $_star_predist_marker_present; then
-                : OK
-            else
-                { echo "$as_me:$LINENO: WARNING: Building predist, but marker file $marker is not present" >&5
-echo "$as_me: WARNING: Building predist, but marker file $marker is not present" >&2;}
-            fi
-            ;;
-        postdist)
-            if $_star_predist_marker_present; then
-                { echo "$as_me:$LINENO: WARNING: In postdistribution state, but predist marker file $marker is present" >&5
-echo "$as_me: WARNING: In postdistribution state, but predist marker file $marker is present" >&2;}
-            fi
-            ;;
-        *)
-            { { echo "$as_me:$LINENO: error: impossible predist status $_star_predist_status" >&5
-echo "$as_me: error: impossible predist status $_star_predist_status" >&2;}
-   { (exit 1); exit 1; }; }
-            ;;
-    esac
-done
-
-    eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-
-                      # Extract the first word of "messgen", so it can be a program name with args.
-set dummy messgen; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_MESSGEN+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $MESSGEN in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MESSGEN="$MESSGEN" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$STARLINK/starjava/bin:$STARLINK/bin:$default_bindir:$PATH"
-for as_dir in $as_dummy
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MESSGEN="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_MESSGEN" && ac_cv_path_MESSGEN="messgen"
-  ;;
-esac
-fi
-MESSGEN=$ac_cv_path_MESSGEN
-
-if test -n "$MESSGEN"; then
-  echo "$as_me:$LINENO: result: $MESSGEN" >&5
-echo "${ECHO_T}$MESSGEN" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-
-
-
-#   Test for non-ANSI behaviour in sscanf on some platforms, reported by
-#   Bill Joye. Also check for bad MINGW sscanf. That returns nc=0 in the
-#   System test.
-echo "$as_me:$LINENO: checking whether the sscanf function is ANSI-compatible" >&5
-echo $ECHO_N "checking whether the sscanf function is ANSI-compatible... $ECHO_C" >&6
-if test "$cross_compiling" = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NONANSI_SSCANF 1
-_ACEOF
-
-
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int main() {
-  char foo[] = " name 1111.1 ";
-  char mingw[] = "system= FK4_NO_E";
-
-  char bar[8];
-  float ff;
-  int system;
-  int nc;
-  int r;
-
-  nc = 0;
-  r = sscanf(foo, " %s %f %n", bar, &ff, &nc);
-
-  if ( nc == 13 ) {
-     nc = 0;
-     r = sscanf( mingw, "system= %n%*s %n", &system, &nc );
-     if ( nc != 0 ) nc = 13;
-  }
-  exit( ( nc != 13 ) ? 0 : 1 );
-}
-
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-   echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NONANSI_SSCANF 1
-_ACEOF
-
-
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-#   Declare the documentation.  We need to do complicated things to
-#   satisfy these targets, so give a non-null value
-#   for the second argument, to suppress automatic generation of
-#   rules.
-
-    STAR_DOCUMENTATION="$STAR_DOCUMENTATION sun210 sun211"
-
-        if $_star_build_docs; then
-            STAR_LATEX_DOCUMENTATION="sun210.ps sun210.tex sun211.ps sun211.tex sun210.htx_tar sun211.htx_tar"
-        fi
-
-    if $_star_build_docs; then
-        : ${LATEX2DVI='$$LATEX "\\batchmode\\input $$1" && $$LATEX "\\batchmode\\input $$1"'}
-
-    else
-        { echo "$as_me:$LINENO: WARNING: not installing docs sun210 sun211" >&5
-echo "$as_me: WARNING: not installing docs sun210 sun211" >&2;}
-    fi
-
-_star_tmp='sun_master.tex'
-for marker in $_star_tmp
-do
-    if test -f $marker; then
-        _star_predist_marker_present=:
-        { echo "$as_me:$LINENO: found predist marker file $marker" >&5
-echo "$as_me: found predist marker file $marker" >&6;}
-    else
-        _star_predist_marker_present=false
-    fi
-    case $_star_predist_status in
-        unknown)
-            if $_star_predist_marker_present; then
-                # we do want to build sourceset files
-                _star_predist_status=predist
-                PREDIST=
-                { echo "$as_me:$LINENO: in pre-distribution state" >&5
-echo "$as_me: in pre-distribution state" >&6;}
-            else
-                _star_predist_status=postdist
-                PREDIST='#'
-                { echo "$as_me:$LINENO: in post-distribution state" >&5
-echo "$as_me: in post-distribution state" >&6;}
-            fi
-            ;;
-        predist)
-            if $_star_predist_marker_present; then
-                : OK
-            else
-                { echo "$as_me:$LINENO: WARNING: Building predist, but marker file $marker is not present" >&5
-echo "$as_me: WARNING: Building predist, but marker file $marker is not present" >&2;}
-            fi
-            ;;
-        postdist)
-            if $_star_predist_marker_present; then
-                { echo "$as_me:$LINENO: WARNING: In postdistribution state, but predist marker file $marker is present" >&5
-echo "$as_me: WARNING: In postdistribution state, but predist marker file $marker is present" >&2;}
-            fi
-            ;;
-        *)
-            { { echo "$as_me:$LINENO: error: impossible predist status $_star_predist_status" >&5
-echo "$as_me: error: impossible predist status $_star_predist_status" >&2;}
-   { (exit 1); exit 1; }; }
-            ;;
-    esac
-done
-
-eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-
-                      # Extract the first word of "star2html", so it can be a program name with args.
-set dummy star2html; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_STAR2HTML+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $STAR2HTML in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_STAR2HTML="$STAR2HTML" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$STARLINK/starjava/bin:$STARLINK/bin:$default_bindir:$PATH"
-for as_dir in $as_dummy
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_STAR2HTML="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_STAR2HTML" && ac_cv_path_STAR2HTML="star2html"
-  ;;
-esac
-fi
-STAR2HTML=$ac_cv_path_STAR2HTML
-
-if test -n "$STAR2HTML"; then
-  echo "$as_me:$LINENO: result: $STAR2HTML" >&5
-echo "${ECHO_T}$STAR2HTML" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-
-eval default_bindir=`echo $bindir | sed 's,\${exec_prefix},$ac_default_prefix,'`
-
-                      # Extract the first word of "prolat", so it can be a program name with args.
-set dummy prolat; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_PROLAT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $PROLAT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PROLAT="$PROLAT" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$STARLINK/Perl/bin:$STARLINK/starjava/bin:$STARLINK/bin:$STARLINK/bin/sst:$default_bindir:$default_bindir/sst:$PATH"
-for as_dir in $as_dummy
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PROLAT="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_PROLAT" && ac_cv_path_PROLAT="prolat"
-  ;;
-esac
-fi
-PROLAT=$ac_cv_path_PROLAT
-
-if test -n "$PROLAT"; then
-  echo "$as_me:$LINENO: result: $PROLAT" >&5
-echo "${ECHO_T}$PROLAT" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-   # prolat is part of SST
-
-          ac_config_headers="$ac_config_headers config.h"
-
-
-                                                  ac_config_files="$ac_config_files Makefile component.xml ast_link object.h f77.h"
-
-          ac_config_files="$ac_config_files ast_cpp"
-
-#   Following are files which are substituted by the Makefile at
-#   distribution time, rather than by configure.  They are not distributed.
-_star_tmp='version.h.in builddocs.in addversion.in'
-for marker in $_star_tmp
-do
-    if test -f $marker; then
-        _star_predist_marker_present=:
-        { echo "$as_me:$LINENO: found predist marker file $marker" >&5
-echo "$as_me: found predist marker file $marker" >&6;}
-    else
-        _star_predist_marker_present=false
-    fi
-    case $_star_predist_status in
-        unknown)
-            if $_star_predist_marker_present; then
-                # we do want to build sourceset files
-                _star_predist_status=predist
-                PREDIST=
-                { echo "$as_me:$LINENO: in pre-distribution state" >&5
-echo "$as_me: in pre-distribution state" >&6;}
-            else
-                _star_predist_status=postdist
-                PREDIST='#'
-                { echo "$as_me:$LINENO: in post-distribution state" >&5
-echo "$as_me: in post-distribution state" >&6;}
-            fi
-            ;;
-        predist)
-            if $_star_predist_marker_present; then
-                : OK
-            else
-                { echo "$as_me:$LINENO: WARNING: Building predist, but marker file $marker is not present" >&5
-echo "$as_me: WARNING: Building predist, but marker file $marker is not present" >&2;}
-            fi
-            ;;
-        postdist)
-            if $_star_predist_marker_present; then
-                { echo "$as_me:$LINENO: WARNING: In postdistribution state, but predist marker file $marker is present" >&5
-echo "$as_me: WARNING: In postdistribution state, but predist marker file $marker is present" >&2;}
-            fi
-            ;;
-        *)
-            { { echo "$as_me:$LINENO: error: impossible predist status $_star_predist_status" >&5
-echo "$as_me: error: impossible predist status $_star_predist_status" >&2;}
-   { (exit 1); exit 1; }; }
-            ;;
-    esac
-done
-
-
-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, don't put newlines in cache variables' values.
-# 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.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *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 \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\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" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  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}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ 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[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${NOPIC_TRUE}" && test -z "${NOPIC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"NOPIC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"NOPIC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${NOTHREADS_TRUE}" && test -z "${NOTHREADS_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"NOTHREADS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"NOTHREADS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $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}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# 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+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; 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
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# 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
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  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
-
-       ;;
-  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
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); 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 sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# 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'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by ast $as_me 5.3-1, which was
-generated by Starlink Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -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
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf at gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-ast config.status 5.3-1
-configured by $0, generated by Starlink Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-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=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  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
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-#
-# INIT-COMMANDS section.
-#
-
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "component.xml" ) CONFIG_FILES="$CONFIG_FILES component.xml" ;;
-  "ast_link" ) CONFIG_FILES="$CONFIG_FILES ast_link" ;;
-  "object.h" ) CONFIG_FILES="$CONFIG_FILES object.h" ;;
-  "f77.h" ) CONFIG_FILES="$CONFIG_FILES f77.h" ;;
-  "ast_cpp" ) CONFIG_FILES="$CONFIG_FILES ast_cpp" ;;
-  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  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 to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s, at SHELL@,$SHELL,;t t
-s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s, at exec_prefix@,$exec_prefix,;t t
-s, at prefix@,$prefix,;t t
-s, at program_transform_name@,$program_transform_name,;t t
-s, at bindir@,$bindir,;t t
-s, at sbindir@,$sbindir,;t t
-s, at libexecdir@,$libexecdir,;t t
-s, at datadir@,$datadir,;t t
-s, at sysconfdir@,$sysconfdir,;t t
-s, at sharedstatedir@,$sharedstatedir,;t t
-s, at localstatedir@,$localstatedir,;t t
-s, at libdir@,$libdir,;t t
-s, at includedir@,$includedir,;t t
-s, at oldincludedir@,$oldincludedir,;t t
-s, at infodir@,$infodir,;t t
-s, at mandir@,$mandir,;t t
-s, at build_alias@,$build_alias,;t t
-s, at host_alias@,$host_alias,;t t
-s, at target_alias@,$target_alias,;t t
-s, at DEFS@,$DEFS,;t t
-s, at ECHO_C@,$ECHO_C,;t t
-s, at ECHO_N@,$ECHO_N,;t t
-s, at ECHO_T@,$ECHO_T,;t t
-s, at LIBS@,$LIBS,;t t
-s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s, at INSTALL_DATA@,$INSTALL_DATA,;t t
-s, at CYGPATH_W@,$CYGPATH_W,;t t
-s, at PACKAGE@,$PACKAGE,;t t
-s, at VERSION@,$VERSION,;t t
-s, at ACLOCAL@,$ACLOCAL,;t t
-s, at AUTOCONF@,$AUTOCONF,;t t
-s, at AUTOMAKE@,$AUTOMAKE,;t t
-s, at AUTOHEADER@,$AUTOHEADER,;t t
-s, at MAKEINFO@,$MAKEINFO,;t t
-s, at install_sh@,$install_sh,;t t
-s, at STRIP@,$STRIP,;t t
-s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-s, at mkdir_p@,$mkdir_p,;t t
-s, at AWK@,$AWK,;t t
-s, at SET_MAKE@,$SET_MAKE,;t t
-s, at am__leading_dot@,$am__leading_dot,;t t
-s, at AMTAR@,$AMTAR,;t t
-s, at am__tar@,$am__tar,;t t
-s, at am__untar@,$am__untar,;t t
-s, at STARLINK@,$STARLINK,;t t
-s, at STAR_CPPFLAGS@,$STAR_CPPFLAGS,;t t
-s, at STAR_FCFLAGS@,$STAR_FCFLAGS,;t t
-s, at STAR_FFLAGS@,$STAR_FFLAGS,;t t
-s, at STAR_LDFLAGS@,$STAR_LDFLAGS,;t t
-s, at build@,$build,;t t
-s, at build_cpu@,$build_cpu,;t t
-s, at build_vendor@,$build_vendor,;t t
-s, at build_os@,$build_os,;t t
-s, at CC@,$CC,;t t
-s, at CFLAGS@,$CFLAGS,;t t
-s, at LDFLAGS@,$LDFLAGS,;t t
-s, at CPPFLAGS@,$CPPFLAGS,;t t
-s, at ac_ct_CC@,$ac_ct_CC,;t t
-s, at EXEEXT@,$EXEEXT,;t t
-s, at OBJEXT@,$OBJEXT,;t t
-s, at DEPDIR@,$DEPDIR,;t t
-s, at am__include@,$am__include,;t t
-s, at am__quote@,$am__quote,;t t
-s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
-s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
-s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-s, at CCDEPMODE@,$CCDEPMODE,;t t
-s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-s, at FC@,$FC,;t t
-s, at FCFLAGS@,$FCFLAGS,;t t
-s, at ac_ct_FC@,$ac_ct_FC,;t t
-s, at C_FC_FCLINK_MAGIC@,$C_FC_FCLINK_MAGIC,;t t
-s, at C_FC_PPFC_FCLINK_MAGIC@,$C_FC_PPFC_FCLINK_MAGIC,;t t
-s, at stardocsdir@,$stardocsdir,;t t
-s, at staretcdir@,$staretcdir,;t t
-s, at starexamplesdir@,$starexamplesdir,;t t
-s, at starfacsdir@,$starfacsdir,;t t
-s, at starhelpdir@,$starhelpdir,;t t
-s, at starnewsdir@,$starnewsdir,;t t
-s, at STAR_DEPENDENCIES_ATTRIBUTES@,$STAR_DEPENDENCIES_ATTRIBUTES,;t t
-s, at STAR_DEPENDENCIES_CHILDREN@,$STAR_DEPENDENCIES_CHILDREN,;t t
-s, at STAR_DOCUMENTATION@,$STAR_DOCUMENTATION,;t t
-s, at PACKAGE_VERSION_MAJOR@,$PACKAGE_VERSION_MAJOR,;t t
-s, at PACKAGE_VERSION_MINOR@,$PACKAGE_VERSION_MINOR,;t t
-s, at PACKAGE_VERSION_RELEASE@,$PACKAGE_VERSION_RELEASE,;t t
-s, at PACKAGE_VERSION_INTEGER@,$PACKAGE_VERSION_INTEGER,;t t
-s, at STAR_MANIFEST_DIR@,$STAR_MANIFEST_DIR,;t t
-s, at GIT@,$GIT,;t t
-s, at STAR_SOURCE_ROOT_DIR@,$STAR_SOURCE_ROOT_DIR,;t t
-s, at PREDIST@,$PREDIST,;t t
-s, at PAX@,$PAX,;t t
-s, at TAR@,$TAR,;t t
-s, at CPP@,$CPP,;t t
-s, at host@,$host,;t t
-s, at host_cpu@,$host_cpu,;t t
-s, at host_vendor@,$host_vendor,;t t
-s, at host_os@,$host_os,;t t
-s, at EGREP@,$EGREP,;t t
-s, at LN_S@,$LN_S,;t t
-s, at ECHO@,$ECHO,;t t
-s, at AR@,$AR,;t t
-s, at ac_ct_AR@,$ac_ct_AR,;t t
-s, at RANLIB@,$RANLIB,;t t
-s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s, at CXX@,$CXX,;t t
-s, at CXXFLAGS@,$CXXFLAGS,;t t
-s, at ac_ct_CXX@,$ac_ct_CXX,;t t
-s, at CXXDEPMODE@,$CXXDEPMODE,;t t
-s, at am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
-s, at am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
-s, at CXXCPP@,$CXXCPP,;t t
-s, at F77@,$F77,;t t
-s, at FFLAGS@,$FFLAGS,;t t
-s, at ac_ct_F77@,$ac_ct_F77,;t t
-s, at LIBTOOL@,$LIBTOOL,;t t
-s, at NOPIC_TRUE@,$NOPIC_TRUE,;t t
-s, at NOPIC_FALSE@,$NOPIC_FALSE,;t t
-s, at NOTHREADS_TRUE@,$NOTHREADS_TRUE,;t t
-s, at NOTHREADS_FALSE@,$NOTHREADS_FALSE,;t t
-s, at THREADS@,$THREADS,;t t
-s, at FCLIBS@,$FCLIBS,;t t
-s, at PERL@,$PERL,;t t
-s, at REAL_FUNCTION_TYPE@,$REAL_FUNCTION_TYPE,;t t
-s, at TRAIL_TYPE@,$TRAIL_TYPE,;t t
-s, at MESSGEN@,$MESSGEN,;t t
-s, at LATEX2DVI@,$LATEX2DVI,;t t
-s, at STAR_LATEX_DOCUMENTATION@,$STAR_LATEX_DOCUMENTATION,;t t
-s, at STAR2HTML@,$STAR2HTML,;t t
-s, at PROLAT@,$PROLAT,;t t
-s, at LIBOBJS@,$LIBOBJS,;t t
-s, at LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-  esac
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  # 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.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s, at configure_input@,$configure_input,;t t
-s, at srcdir@,$ac_srcdir,;t t
-s, at abs_srcdir@,$ac_abs_srcdir,;t t
-s, at top_srcdir@,$ac_top_srcdir,;t t
-s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s, at builddir@,$ac_builddir,;t t
-s, at abs_builddir@,$ac_abs_builddir,;t t
-s, at top_builddir@,$ac_top_builddir,;t t
-s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
-s, at INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-  # Run the commands associated with the file.
-  case $ac_file in
-    ast_cpp ) chmod +x ast_cpp ;;
-  esac
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
-ac_dB='[	 ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 # Do quote $f, to prevent DOS paths from being IFS'd.
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # 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.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
-  if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
-    fi
-  else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
-  fi
-# Compute $ac_file's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $ac_file | $ac_file:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X$ac_file : 'X\(//\)[^/]' \| \
-	 X$ac_file : 'X\(//\)$' \| \
-	 X$ac_file : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X$ac_file |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_dest" : 'X\(//\)[^/]' \| \
-	 X"$ac_dest" : 'X\(//\)$' \| \
-	 X"$ac_dest" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
-  case $ac_dest in
-    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`(dirname "$mf") 2>/dev/null ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-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=`(dirname "$file") 2>/dev/null ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    { if $as_mkdir_p; then
-    mkdir -p $dirpart/$fdir
-  else
-    as_dir=$dirpart/$fdir
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
-  done
-done
- ;;
-  esac
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# 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 || { (exit 1); exit 1; }
-fi
-
diff --git a/ast-5.3-1/configure.ac b/ast-5.3-1/configure.ac
deleted file mode 100644
index 074bc21..0000000
--- a/ast-5.3-1/configure.ac
+++ /dev/null
@@ -1,160 +0,0 @@
-dnl  Process this file with autoconf to produce a configure script
-AC_REVISION($Revision: 1.1.1.1 $)
-
-dnl   This configure file is known to work with autoconf-2.57,
-dnl   automake versions 1.6.3 and 1.7.5, and libtool versions 1.4.2 and
-dnl   1.5.  It should work with autoconf versions 2.50 or better, and
-dnl   automake 1.6 or better.
-
-dnl   Initialisation: package name and version number
-AC_INIT(ast, 5.3-1, ussc at star.rl.ac.uk)
-
-dnl   Require autoconf-2.50 at least
-AC_PREREQ(2.50)
-dnl   Require Starlink automake
-AM_INIT_AUTOMAKE(1.8.2-starlink)
-
-dnl   Sanity-check: name a file in the source directory
-AC_CONFIG_SRCDIR([ast_link.in])
-
-#   Include defaults for Starlink configurations
-STAR_DEFAULTS
-
-#   See if the --with-starmem option has been provided. This sets the
-#   preprocesor macro HAVE_STAR_MEM_H. 
-AC_ARG_WITH(
-      [starmem],
-      AC_HELP_STRING([--with-starmem],
-                     [use starmem library for memory management]),
-      AC_DEFINE([HAVE_STAR_MEM_H],[1],[Use the starmem library for memory management]),
-)
-
-#   See if the --with-memdebug option has been provided. This sets the
-#   preprocesor macro MEM_DEBUG which enables facilities used to track
-#   down memory leaks, etc.
-AC_ARG_WITH(
-      [memdebug],
-      AC_HELP_STRING([--with-memdebug],
-                     [enable AST memory leak debugging functions]),
-      AC_DEFINE([MEM_DEBUG],[1],[enable AST memory leak debugging functions in memory.c]),
-)
-
-#   Checks for programs
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_LIBTOOL
-AC_PROG_LN_S
-
-#   If --with-pic=no is set we should honour that.
-AM_CONDITIONAL(NOPIC, test x$pic_mode = xno)
-
-#  Conditional defining whether we build with POSIX thread support.
-AC_ARG_WITH([pthreads],
-            [ --without-pthreads   Build package without POSIX threads support],
-        if test "$withval" = "yes"; then
-           use_pthreads="1"
-        else
-           use_pthreads="0"
-        fi,
-        use_pthreads="1")
-if test "$use_pthreads" = "1"; then
-AC_CHECK_LIB([pthread], [pthread_create], ,[use_pthreads="0"])
-fi
-AM_CONDITIONAL(NOTHREADS, test x$use_pthreads = x0)
-AC_SUBST(THREADS, $use_pthreads)
-
-# See which variadic function API to use
-AC_CHECK_HEADERS(stdarg.h varargs.h, break)
-
-# Can we use backtrace?
-AC_CHECK_HEADERS([execinfo.h])
-AC_CHECK_FUNCS([backtrace])
-
-# Do we have reentrant strerror and strtok?
-AC_CHECK_FUNCS([strerror_r strtok_r])
-
-#  See if we have long doubles (used by the Mapping and Region classes)
-AC_CHECK_TYPES([long double])
-
-#   ast_link needs to be able to link against the Fortran runtime if
-#   necessary
-AC_FC_LIBRARY_LDFLAGS
-
-#   Find an absolute path to the Perl binary, augmenting the path with the
-#   location of the Starlink Perl build.  If this fails, then set @PERL@
-#   to the backup `/usr/bin/env perl', which will find Perl if it exists
-#   in the path at runtime.
-AC_PATH_PROG(PERL, perl, [/usr/bin/env perl], [$STARLINK/Perl/bin:$PATH])
-
-#   Function and declaration checks
-AC_CHECK_FUNCS([isnan])
-AC_CHECK_DECLS([isnan],,,[#include <math.h>
-                         ])
-STAR_DECLARE_DEPENDENCIES(sourceset, [sst htx])
-STAR_DECLARE_DEPENDENCIES(build, sla)
-
-#  Perform the check that configures f77.h.in for the return type of REAL
-#  Fortran functions. On 64-bit g77 with f2c compatibility this is double
-#  not float.
-STAR_CNF_F2C_COMPATIBLE
-
-# Determine the type of Fortran character string lengths.
-STAR_CNF_TRAIL_TYPE
-
-#   Declare the message file.  
-STAR_MESSGEN(ast_err.msg)
-
-#   Test for non-ANSI behaviour in sscanf on some platforms, reported by
-#   Bill Joye. Also check for bad MINGW sscanf. That returns nc=0 in the
-#   System test.
-AC_MSG_CHECKING([whether the sscanf function is ANSI-compatible])
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int main() {
-  char foo[] = " name 1111.1 ";
-  char mingw[] = "system= FK4_NO_E";
-
-  char bar[8];
-  float ff;
-  int system;
-  int nc;
-  int r;
-
-  nc = 0;
-  r = sscanf(foo, " %s %f %n", bar, &ff, &nc);
-
-  if ( nc == 13 ) {
-     nc = 0;
-     r = sscanf( mingw, "system= %n%*s %n", &system, &nc );
-     if ( nc != 0 ) nc = 13;
-  }
-  exit( ( nc != 13 ) ? 0 : 1 );
-}
-
-]])],[
-   AC_MSG_RESULT([no]);AC_DEFINE([HAVE_NONANSI_SSCANF],[1],[The sscanf shows the non-ANSI behaviour reported by Bill Joye])
-],[AC_MSG_RESULT([yes])],[
-   AC_DEFINE([HAVE_NONANSI_SSCANF],[1],[The sscanf may show the non-ANSI behaviour reported by Bill Joye])
-])
-
-#   Declare the documentation.  We need to do complicated things to
-#   satisfy these targets, so give a non-null value
-#   for the second argument, to suppress automatic generation of
-#   rules.
-STAR_LATEX_DOCUMENTATION([sun210 sun211], [sun210.ps sun210.tex sun211.ps sun211.tex sun210.htx_tar sun211.htx_tar])
-STAR_PREDIST_SOURCES(sun_master.tex)
-STAR_CHECK_PROGS(star2html)
-STAR_CHECK_PROGS(prolat, sst)   # prolat is part of SST
-
-AC_CONFIG_HEADERS(config.h)
-
-AC_CONFIG_FILES(Makefile component.xml ast_link object.h f77.h)
-AC_CONFIG_FILES([ast_cpp], [chmod +x ast_cpp])
-#   Following are files which are substituted by the Makefile at
-#   distribution time, rather than by configure.  They are not distributed.
-STAR_PREDIST_SOURCES(version.h.in builddocs.in addversion.in)
-
-AC_OUTPUT
diff --git a/ast-5.3-1/depcomp b/ast-5.3-1/depcomp
deleted file mode 100755
index 04701da..0000000
--- a/ast-5.3-1/depcomp
+++ /dev/null
@@ -1,530 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2005-07-09.11
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
-
-case $1 in
-  '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
-  depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
-  DEPDIR      directory where to store dependencies.
-  depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff.  Hmm.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-sgi)
-  if test "$libtool" = yes; then
-    "$@" "-Wp,-MDupdate,$tmpdepfile"
-  else
-    "$@" -MDupdate "$tmpdepfile"
-  fi
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-
-  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
-    echo "$object : \\" > "$depfile"
-
-    # Clip off the initial element (the dependent).  Don't try to be
-    # clever and replace this with sed code, as IRIX sed won't handle
-    # lines with more than a fixed number of characters (4096 in
-    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
-    # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> $depfile
-    echo >> $depfile
-
-    # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-aix)
-  # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
-  # start of each line; $object doesn't have directory information.
-  # Version 6 uses the directory in both cases.
-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
-  if test "$libtool" = yes; then
-    "$@" -Wc,-M
-  else
-    "$@" -M
-  fi
-  stat=$?
-
-  if test -f "$tmpdepfile"; then :
-  else
-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
-    tmpdepfile="$stripped.u"
-  fi
-
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-
-  if test -f "$tmpdepfile"; then
-    outname="$stripped.o"
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
-
-#nosideeffect)
-  # This comment above is used by automake to tell side-effect
-  # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove `-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
-  # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
-  "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # X makedepend
-  shift
-  cleared=no
-  for arg in "$@"; do
-    case $cleared in
-    no)
-      set ""; shift
-      cleared=yes ;;
-    esac
-    case "$arg" in
-    -D*|-I*)
-      set fnord "$@" "$arg"; shift ;;
-    # Strip any option that makedepend may not understand.  Remove
-    # the object too, otherwise makedepend will parse it as a source file.
-    -*|$object)
-      ;;
-    *)
-      set fnord "$@" "$arg"; shift ;;
-    esac
-  done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
-  touch "$tmpdepfile"
-  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove `-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  cat < "$tmpdepfile" >> "$depfile"
-  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvisualcpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
-  "$@" || exit $?
-  IFS=" "
-  for arg
-  do
-    case "$arg" in
-    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
-    *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
-    esac
-  done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-none)
-  exec "$@"
-  ;;
-
-*)
-  echo "Unknown depmode $depmode" 1>&2
-  exit 1
-  ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/dsbspecframe.c b/ast-5.3-1/dsbspecframe.c
deleted file mode 100644
index 12a2a3a..0000000
--- a/ast-5.3-1/dsbspecframe.c
+++ /dev/null
@@ -1,3172 +0,0 @@
-/*
-*class++
-*  Name:
-*     DSBSpecFrame
-
-*  Purpose:
-*     Dual sideband spectral coordinate system description.
-
-*  Constructor Function:
-c     astDSBSpecFrame
-f     AST_DSBSPECFRAME
-
-*  Description:
-*     A DSBSpecFrame is a specialised form of SpecFrame which represents 
-*     positions in a spectrum obtained using a dual sideband instrument.
-*     Such an instrument produces a spectrum in which each point contains 
-*     contributions from two distinctly different frequencies, one from
-*     the "lower side band" (LSB) and one from the "upper side band" (USB). 
-*     Corresponding LSB and USB frequencies are connected by the fact
-*     that they are an equal distance on either side of a fixed central
-*     frequency known as the "Local Oscillator" (LO) frequency.
-*
-*     When quoting a position within such a spectrum, it is necessary to
-*     indicate whether the quoted position is the USB position or the 
-*     corresponding LSB position. The SideBand attribute provides this
-*     indication. Another option that the SideBand attribute provides is
-*     to represent a spectral position by its topocentric offset from the 
-*     LO frequency.
-*
-*     In practice, the LO frequency is specified by giving the distance
-*     from the LO frequency to some "central" spectral position. Typically 
-*     this central position is that of some interesting spectral feature. 
-*     The distance from this central position to the LO frequency is known 
-*     as the "intermediate frequency" (IF). The value supplied for IF can
-*     be a signed value in order to indicate whether the LO frequency is
-*     above or below the central position.
-
-*  Inheritance:
-*     The DSBSpecFrame class inherits from the SpecFrame class.
-
-*  Attributes:
-*     In addition to those attributes common to all SpecFrames, every
-*     DSBSpecFrame also has the following attributes:
-*
-*     - AlignSideBand: Should alignment occur between sidebands?
-*     - DSBCentre: The central position of interest.
-*     - IF: The intermediate frequency used to define the LO frequency.
-*     - ImagFreq: The image sideband equivalent of the rest frequency.
-*     - SideBand: Indicates which sideband the DSBSpecFrame represents.
-
-*  Functions:
-c     The DSBSpecFrame class does not define any new functions beyond those
-f     The DSBSpecFrame class does not define any new routines beyond those
-*     which are applicable to all SpecFrames.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     5-AUG-2004 (DSB):
-*        Original version.
-*     7-OCT-2004 (DSB):
-*        Fixed SetAttrib code which assigns values to SideBand. Previously 
-*        all supplied values were ignored, leaving SideBand unchanged.
-*     2-SEP-2005 (DSB):
-*        Allow conversion in any Domain within TopoMap (sometimes
-*        SpecFrames have a new Domain set which is not equal to SPECTRUM").
-*     12-SEP-2005 (DSB):
-*        Set all attributes required to described the RestFreq value
-*        before determining Mapping from RestFreq to ImagFreq in
-*        GetImageFreq.
-*     2-DEC-2005 (DSB):
-*        Change default Domain from SPECTRUM to DSBSPECTRUM 
-*     3-APR-2006 (DSB):
-*        Fix memory leak in astLoadDSBSpecFrame.
-*     6-OCT-2006 (DSB):
-*        Guard against annulling null pointers in subFrame.
-*     27-OCT-2006 (DSB):
-*        Added AlignSideBand attribute.
-*     31-OCT-2006 (DSB):
-*        Use AlignSideBand attribute in SubFrame only if we are not
-*        currently restoring a FrameSet's integrity.
-*     31-JAN-2007 (DSB):
-*        Modified so that a DSBSpecFrame can be used as a template to find a
-*        DSBSpecFrame (or SpecFrame) contained within a CmpFrame. This
-*        involves changes in Match.
-*     1-MAY-2007 (DSB):
-*        The default for AlignSideband has been changed from 1 to 0.
-*     8-MAY-2007 (DSB):
-*        Correct initialisation of alignsideband in astInitDSBSpecFrame_.
-*     19-OCT-2007 (DSB):
-*        Ignore SideBand alignment if the AlignSideBand attribute is zero
-*        in either the target or the template.
-*     16-JAN-2007 (DSB):
-*        Modify SubFrame so that DSBSpecFrames are aligned in the
-*        observed sideband (LSB or USB) rather than always being aligned
-*        in the USB.
-*class--
-
-*  Implementation Deficiencies:
-*     - The default values for System and StdOfRest inherited from the
-*     SpecFrame class are "Wave" and "Heliocentric". These are not
-*     usually what is wanted for a DSB instrument. Defaults such as
-*     "Freq" and "Topo" may be more appropriate. However, changing the
-*     defaults inherited from SpecFrame may cause problems in the
-*     astConvert algorithm. The astConvertX function in frame.c includes
-*     the following implementation deficiency warning: "One likely
-*     problem is with attributes which default in both the source and
-*     destination Frames. This means they also default in the common
-*     coordinate system. If these default values were to differ when
-*     matching different target Frames, however, we would be in trouble,
-*     because the common coordinate system would not then be remaining
-*     constant. The longer-term solution to this is probably to provide
-*     some mechanism to "fix" all attribute values for a Frame, by taking
-*     any attributes that are un-set and explicitly setting a firm value
-*     (equal to the default) so they cannot then change". So the defaults
-*     should probably be left unchanged until this fix is made.
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS DSBSpecFrame
-
-#define BADSB -9999
-#define FIRST_SB -1
-#define LSB -1
-#define LO  0
-#define USB 1
-#define LAST_SB 1
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "object.h"              /* Base Object class */
-#include "channel.h"             /* I/O channels */
-#include "specframe.h"           /* Spectral frames (parent class) */
-#include "unit.h"                /* Unit handling */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "winmap.h"              /* Window Mappings */
-#include "dsbspecframe.h"        /* Interface definition for this class */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetLabel_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(DSBSpecFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(DSBSpecFrame,Class_Init)
-#define class_vtab astGLOBAL(DSBSpecFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(DSBSpecFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(DSBSpecFrame,GetLabel_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Define the thread-specific globals for this class. */ 
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 101 ];
-
-/* Default Label string buffer */
-static char getlabel_buff[ 101 ]; 
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstDSBSpecFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstDSBSpecFrame *astDSBSpecFrameId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstMapping *TopoMap( AstDSBSpecFrame *, int, const char *, int * );
-static AstMapping *ToLOMapping( AstDSBSpecFrame *, const char *, int * )__attribute__((unused));
-static AstMapping *ToLSBMapping( AstDSBSpecFrame *, const char *, int * );
-static AstMapping *ToUSBMapping( AstDSBSpecFrame *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static double GetImagFreq( AstDSBSpecFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void VerifyAttrs( AstDSBSpecFrame *, const char *, const char *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-
-static double GetIF( AstDSBSpecFrame *, int * );
-static int TestIF( AstDSBSpecFrame *, int * );
-static void ClearIF( AstDSBSpecFrame *, int * );
-static void SetIF( AstDSBSpecFrame *, double, int * );
-
-static double GetDSBCentre( AstDSBSpecFrame *, int * );
-static int TestDSBCentre( AstDSBSpecFrame *, int * );
-static void ClearDSBCentre( AstDSBSpecFrame *, int * );
-static void SetDSBCentre( AstDSBSpecFrame *, double, int * );
-
-static int GetSideBand( AstDSBSpecFrame *, int * );
-static int TestSideBand( AstDSBSpecFrame *, int * );
-static void ClearSideBand( AstDSBSpecFrame *, int * );
-static void SetSideBand( AstDSBSpecFrame *, int, int * );
-
-static int GetAlignSideBand( AstDSBSpecFrame *, int * );
-static int TestAlignSideBand( AstDSBSpecFrame *, int * );
-static void ClearAlignSideBand( AstDSBSpecFrame *, int * );
-static void SetAlignSideBand( AstDSBSpecFrame *, int, int * );
-
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a DSBSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the astClearAttrib protected
-*     method inherited from the SpecFrame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     DSBSpecFrame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *this;        /* Pointer to the DSBSpecFrame structure */
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
-   this = (AstDSBSpecFrame *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* DSBCentre. */
-/* ---------- */
-   if ( !strcmp( attrib, "dsbcentre" ) ) {
-      astClearDSBCentre( this );
-
-/* IF */
-/* -- */
-   } else if ( !strcmp( attrib, "if" ) ) {
-      astClearIF( this );
-
-/* SideBand */
-/* -------- */
-   } else if ( !strcmp( attrib, "sideband" ) ) {
-      astClearSideBand( this );
-
-/* AlignSideBand */
-/* ------------- */
-   } else if ( !strcmp( attrib, "alignsideband" ) ) {
-      astClearAlignSideBand( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then report an error. */
-   } else if ( !strcmp( attrib, "imagfreq" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a DSBSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the protected astGetAttrib
-*     method inherited from the SpecFrame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a DSBSpecFrame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the DSBSpecFrame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the DSBSpecFrame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstDSBSpecFrame *this;        /* Pointer to the DSBSpecFrame structure */
-   AstMapping *tmap;             /* Ptr to Mapping from topofreq to this */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Attribute value */
-   double dtemp;                 /* Attribute value */
-   int ival;                     /* Attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstDSBSpecFrame *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* DSBCentre */
-/* --------- */
-   if ( !strcmp( attrib, "dsbcentre" ) ) {
-
-/* Get the value as topocentric frequency in Hz. */
-      dval = astGetDSBCentre( this );
-
-/* Find the Mapping from topocentric frequency in Hz to the spectral system 
-   described by this SpecFrame. */
-      tmap = TopoMap( this, 0, "astGetAttrib", status );         
-      if ( astOK ) {
-
-/* Transform the internal value from topocentric frequency into the required 
-   system. */
-         astTran1( tmap, 1, &dval, 1, &dtemp );
-         if( dtemp == AST__BAD ) {
-            astError( AST__INTER, "astGetAttrib(%s): Cannot convert DSBCentre "
-                      "value from topocentric frequency to the required "
-                      "system.", status, astGetClass( this ) );
-         } else {
-
-/* Format it. */
-            (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dtemp );
-            result = getattrib_buff;
-         }
-         tmap = astAnnul( tmap );
-      }
-
-/* IF */
-/* -- */
-   } else if ( !strcmp( attrib, "if" ) ) {
-      dval = astGetIF( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval*1.0E-9 );
-         result = getattrib_buff;
-      }
-
-/* ImagFreq */
-/* -------- */
-   } else if ( !strcmp( attrib, "imagfreq" ) ) {
-      dval = astGetImagFreq( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval*1.0E-9 );
-         result = getattrib_buff;
-      }
-
-/* SideBand */
-/* -------- */
-   } else if ( !strcmp( attrib, "sideband" ) ) {
-      ival = astGetSideBand( this );
-      if ( astOK ) {
-         result = ( ival == USB ) ? "USB" : (( ival == LO ) ? "LO" : "LSB" );
-      }
-
-/* AlignSideBand */
-/* ------------- */
-   } else if ( !strcmp( attrib, "alignsideband" ) ) {
-      ival = astGetAlignSideBand( this ) ? 1 : 0;
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDomain
-
-*  Purpose:
-*     Obtain a pointer to the Domain attribute string for a DSBSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     const char *GetDomain( AstFrame *this, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the astGetDomain protected
-*     method inherited from the SpecFrame class).
-
-*  Description:
-*    This function returns a pointer to the Domain attribute string
-*    for a DSBSpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Domain value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the DSBSpecFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *this;        /* Pointer to DSBSpecFrame structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
-   this = (AstDSBSpecFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestDomain( this ) ) {
-      result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
-   } else {
-      result = "DSBSPECTRUM";
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetImagFreq( AstDSBSpecFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetImagFreq
-
-*  Purpose:
-*     Get the value of the ImagFreq attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     double GetImagFreq( AstDSBSpecFrame *this )
-
-*  Class Membership:
-*     DSBSpecFrame method.
-
-*  Description:
-*     This function returns the image sideband frequency corresponding to
-*     the rest frequency.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-
-*  Returned Value:
-*     The required frequency, in Hz.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *rf_frame;/* DSBSpecFrame describing the rest frequency */
-   AstMapping *map;          /* Pointer to "Observed to Image" mapping */
-   double result;            /* The returned frequency */
-   double rf;                /* Rest frequency in observed sideband */
-   int sb;                   /* SideBand value */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* The RestFreq attribute is an observed sideband frequency in the
-   source's standard of rest, measured in Hz. Temporaily set attributes
-   to these values. Create a copy of the supplied DSBSpecFrame and set
-   its attributes to these values.  */
-   rf_frame = astCopy( this );
-   astSetStdOfRest( rf_frame, AST__SCSOR );
-   astSetSystem( rf_frame, AST__FREQ );
-   astSetUnit( rf_frame, 0, "Hz" );
-   astSetC( rf_frame, "SideBand", "observed" );
-
-/* Create a Mapping which transforms positions from the observed to the
-   image sideband. */
-   sb = astGetSideBand( rf_frame );
-   if( sb == USB ) {
-      map = ToLSBMapping( rf_frame, "astGetImagFreq", status );
-
-   } else if( sb == LSB ) {
-      map = ToUSBMapping( rf_frame, "astGetImagFreq", status );
-
-   } else {
-      map = NULL;
-      astError( AST__INTER, "astGetImagFreq(%s): Illegal sideband value "
-                "(%d) encountered (internal AST programming error).", status, 
-                astGetClass( this ), sb );
-   }
-
-/* Get the rest frequency in Hz, and transform it using the above Mapping. */
-   rf = astGetRestFreq( rf_frame );
-   astTran1( map, 1, &rf, 1, &result );
-
-/* Free resources */
-   map = astAnnul( map );
-   rf_frame = astAnnul( rf_frame );
-
-/* If an error has occurrred, return AST__BAD. */
-   if( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetLabel
-
-*  Purpose:
-*     Access the Label string for a DSBSpecFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     const char *GetLabel( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the astGetLabel method inherited
-*     from the SpecFrame class).
-
-*  Description:
-*     This function returns a pointer to the Label string for a specified axis
-*     of a DSBSpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   const char *result;           /* Pointer to label string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetLabel" );
-
-/* Invoke the parent astGetLabel method to obtain a pointer to it. */
-   result = (*parent_getlabel)( this, axis, status );
-
-/* Check if this is a default value. If so, append a string indicating
-   the sideband. */
-   if ( !astTestLabel( this, axis ) ) {
-
-/* If OK, supply a pointer to a suitable default label string. */
-      sprintf( getlabel_buff, "%s (%s)", result, astGetAttrib( this, "sideband" ) );
-      result = getlabel_buff;
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-void astInitDSBSpecFrameVtab_(  AstDSBSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitDSBSpecFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a DSBSpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     void astInitDSBSpecFrameVtab( AstDSBSpecFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     DSBSpecFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the DSBSpecFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitSpecFrameVtab( (AstSpecFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsADSBSpecFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstSpecFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearDSBCentre = ClearDSBCentre;
-   vtab->TestDSBCentre = TestDSBCentre;
-   vtab->GetDSBCentre = GetDSBCentre;
-   vtab->SetDSBCentre = SetDSBCentre;
-
-   vtab->ClearIF = ClearIF;
-   vtab->TestIF = TestIF;
-   vtab->GetIF = GetIF;
-   vtab->SetIF = SetIF;
-
-   vtab->ClearSideBand = ClearSideBand;
-   vtab->TestSideBand = TestSideBand;
-   vtab->GetSideBand = GetSideBand;
-   vtab->SetSideBand = SetSideBand;
-
-   vtab->ClearAlignSideBand = ClearAlignSideBand;
-   vtab->TestAlignSideBand = TestAlignSideBand;
-   vtab->GetAlignSideBand = GetAlignSideBand;
-   vtab->SetAlignSideBand = SetAlignSideBand;
-
-   vtab->GetImagFreq = GetImagFreq;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_getdomain = frame->GetDomain;
-   frame->GetDomain = GetDomain;
-
-   parent_overlay = frame->Overlay;
-   frame->Overlay = Overlay; 
-
-   parent_match = frame->Match;
-   frame->Match = Match;
-
-   parent_subframe = frame->SubFrame;
-   frame->SubFrame = SubFrame;
-
-   parent_getlabel = frame->GetLabel;
-   frame->GetLabel = GetLabel;
-
-/* Declare the class delete function.*/
-   astSetDump( vtab, Dump, "DSBSpecFrame", "Dual sideband spectral axis" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes, AstMapping **map,
-                  AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the protected astMatch method
-*     inherited from the SpecFrame class).
-
-*  Description:
-*     This function matches a "template" DSBSpecFrame to a "target" Frame and
-*     determines whether it is possible to convert coordinates between them.
-*     If it is, a mapping that performs the transformation is returned along
-*     with a new Frame that describes the coordinate system that results when
-*     this mapping is applied to the "target" coordinate system. In addition,
-*     information is returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" and "template"
-*     Frames from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template DSBSpecFrame. This describes the coordinate 
-*        system (or set of possible coordinate systems) into which we wish to 
-*        convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate system in
-*        which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the template DSBSpecFrame axis from 
-*        which it is derived. If it is not derived from any template 
-*        DSBSpecFrame axis, a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the target Frame axis from which it
-*        is derived. If it is not derived from any target Frame axis, a value
-*        of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will be
-*        returned if the requested coordinate conversion is possible. If
-*        returned, the forward transformation of this Mapping may be used to
-*        convert coordinates between the "target" Frame and the "result"
-*        Frame (see below) and the inverse transformation will convert in the
-*        opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be returned
-*        if the requested coordinate conversion is possible. If returned, this
-*        Frame describes the coordinate system that results from applying the
-*        returned Mapping (above) to the "target" coordinate system. In
-*        general, this Frame will combine attributes from (and will therefore
-*        be more specific than) both the target and the template Frames. In
-*        particular, when the template allows the possibility of transformaing
-*        to any one of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate conversion is
-*     possible. Otherwise zero is returned (this will not in itself result in
-*     an error condition).
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     This implementation addresses the matching of a DSBSpecFrame class 
-*     object to any other class of Frame. A DSBSpecFrame will match any class 
-*     of DSBSpecFrame (i.e. possibly from a derived class) but will not match 
-*     a less specialised class of Frame (except for a SpecFrame).
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *template;    /* Pointer to template DSBSpecFrame structure */
-   AstFrame *frame0;             /* Pointer to Frame underlying axis 0 */
-   int iaxis0;                   /* Axis index underlying axis 0 */
-   int match;                    /* Coordinate conversion possible? */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the template DSBSpecFrame structure. */
-   template = (AstDSBSpecFrame *) template_frame;
-
-/* The first criterion for a match is that the template matches as a
-   SpecFrame class object. This ensures that the number of axes (1) and
-   domain, class, etc. of the target Frame are suitable. Invoke the parent
-   "astMatch" method to verify this. */
-   match = (*parent_match)( template_frame, target,
-                            template_axes, target_axes, map, result, status );
-
-/* If a match was found, the target Frame must be (or contain) a SpecFrame,
-   but this target SpecFrame may be a simple SpecFrame rather than a 
-   DSBSpecFrame. We use the returned objects directly if the target 
-   SpecFrame is not a DSBSpecFrame. So if a DSBSpecFrame and a base 
-   SpecFrame are aligned, this will result in the DSBSpecFrame behaving as 
-   a normal SpecFrame. */
-   if ( astOK && match ) {
-
-/* Get the primary Frame associated with the matching target axis. */
-      astPrimaryFrame( target, (*target_axes)[ 0 ], &frame0, &iaxis0 );
-
-/* Skip this next section, thus retaining the values returned by the
-   parent Match method above, if the target axis is not a DSBSpecFrame. */
-      if( astIsADSBSpecFrame( frame0 ) ) {      
-
-/* Annul the returned objects, which are not needed, but keep the axis 
-   association arrays which already hold the correct values. */
-         *map = astAnnul( *map );
-         *result = astAnnul( *result );
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
-   result Frame) with a copy of of the target axis. This process also 
-   overlays the template attributes on to the target Frame and returns a 
-   Mapping between the target and result Frames which effects the required 
-   coordinate conversion. */
-         match = astSubFrame( target, template, 1, *target_axes, *template_axes,
-                              map, result );
-      }
-
-/* Free resources. */
-      frame0 = astAnnul( frame0 );
-
-   }
-
-/* If an error occurred, or conversion to the result Frame's coordinate 
-   system was not possible, then free all memory, annul the returned 
-   objects, and reset the returned value. */
-   if ( !astOK || !match ) {
-      if( *template_axes ) *template_axes = astFree( *template_axes );
-      if( *target_axes ) *target_axes = astFree( *target_axes );
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template DSBSpecFrame on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the protected astOverlay method
-*     inherited from the SpecFrame class).
-
-*  Description:
-*     This function overlays attributes of a DSBSpecFrame (the "template") on to
-*     another Frame, so as to over-ride selected attributes of that second
-*     Frame. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which a Frame acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-*
-*     Note that if the result Frame is a DSBSpecFrame and a change of spectral
-*     coordinate system occurs as a result of overlaying its System
-*     attribute, then some of its original attribute values may no
-*     longer be appropriate (e.g. the Title, or attributes describing
-*     its axes). In this case, these will be cleared before overlaying
-*     any new values.
-
-*  Parameters:
-*     template
-*        Pointer to the template DSBSpecFrame, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of the
-*        "result" Frame (see below). For each axis in the result frame, the
-*        corresponding element of this array should contain the (zero-based)
-*        index of the template axis to which it corresponds. This array is used
-*        to establish from which template axis any axis-dependent attributes
-*        should be obtained.
-*
-*        If any axis in the result Frame is not associated with a template
-*        axis, the corresponding element of this array should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  In general, if the result Frame is not from the same class as the
-*     template DSBSpecFrame, or from a class derived from it, then attributes may
-*     exist in the template DSBSpecFrame which do not exist in the result Frame. 
-*     In this case, these attributes will not be transferred.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
-   from the parent class. */
-   (*parent_overlay)( template, template_axes, result, status );
-
-/* Check if the result Frame is a DSBSpecFrame or from a class derived from
-   DSBSpecFrame. If not, we cannot transfer DSBSpecFrame attributes to it as it is
-   insufficiently specialised. In this case simply omit these attributes. */
-   if( astIsADSBSpecFrame( result ) && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
-   if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
-   if ( astTest##attribute( template ) ) { \
-      astSet##attribute( result, astGet##attribute( template ) ); \
-   }
-
-/* Use the macro to transfer each DSBSpecFrame attribute in turn. */
-      OVERLAY(DSBCentre)
-      OVERLAY(IF)
-      OVERLAY(SideBand)
-      OVERLAY(AlignSideBand)
-   }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a DSBSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the astSetAttrib protected
-*     method inherited from the SpecFrame class).
-
-*  Description:
-*     This function assigns an attribute value for a DSBSpecFrame, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *this;        /* Pointer to the DSBSpecFrame structure */
-   AstMapping *tmap;             /* Ptr to Mapping from this to topofreq */
-   AstMapping *umap;             /* Ptr to Mapping between units */
-   double dtemp;                 /* Attribute value */
-   double dval;                  /* Attribute value */
-   int ival;                     /* Attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Used length */
-   int off;                      /* Offset to start of string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
-   this = (AstDSBSpecFrame *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* DSBCentre */
-/* --------- */
-   if ( strstr( setting, "dsbcentre=" ) ) {
-
-/* Without any units indication - assume it is supplied in the system of
-   the DSBSpecFrame. */
-      int ok = 0;
-      if( nc = 0,
-           ( 1 == astSscanf( setting, "dsbcentre= %lg %n", &dval, &nc ) )
-           && ( nc >= len ) ) {
-         ok = 1;
-
-/* With units indication. Is there a Mapping from the supplied units to the 
-   units used by the DSBSpecFrame? If so, use the Mapping to convert the 
-   supplied value to the required units. */
-      } else if ( nc = 0,
-           ( 1 == astSscanf( setting, "dsbcentre= %lg %n%*s %n", &dval, &off, &nc ) )
-           && ( nc >= len ) ) {
-
-         if( ( umap = astUnitMapper( setting + off, astGetUnit( this, 0 ), NULL, NULL ) ) ) {
-            astTran1( umap, 1, &dval, 1, &dtemp );
-            dval = dtemp;
-            umap = astAnnul( umap );
-            if( astOK && dval != AST__BAD ) ok = 1;
-
-/* Otherwise report an error. */
-         } else if( astOK ) {
-            astError( AST__ATTIN, "astSetAttrib(%s): Value supplied for "
-                      "attribute \"DSBCentre\" (%s) uses units which are "
-                      "inappropriate for the current spectral system (%s).", status, 
-                       astGetClass( this ), setting + 10, 
-                       astGetTitle( this ) );
-         }
-      }
-
-/* Convert the value from the supplied system to topocentric frequency in
-   Hx, and store. */
-      if( ok ) {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to 
-   topocentric frequency in Hz. */
-         tmap = TopoMap( this, 1, "astSetAttrib", status );         
-         if ( astOK ) {
-
-/* Transform the supplied value to topocentric frequency. */
-            astTran1( tmap, 1, &dval, 1, &dtemp );
-            if( dtemp == AST__BAD ) {
-               astError( AST__ATTIN, "astSetAttrib(%s): The setting \"%s\" is "
-                         "invalid for a %s.", status, astGetClass( this ), setting,
-                         astGetClass( this ) );
-            } else {
-
-/* Store it. */
-               astSetDSBCentre( this, dtemp );
-   
-            }
-            tmap = astAnnul( tmap );
-         }
-
-      } else if( astOK ) {
-         astError( AST__ATTIN, "astSetAttrib(%s): The setting \"%s\" is "
-                   "invalid for a %s.", status, astGetClass( this ), setting,
-                   astGetClass( this ) );
-      }
-
-/* IF */
-/* -- */
-/* Without any units indication - assume GHz. Convert to Hz for storage. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "if= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetIF( this, dval*1.0E9 );
-
-/* With units indication. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "if= %lg %n%*s %n", &dval, &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Is there a Mapping from the supplied units to Hz? If so, use the
-   Mapping to convert the supplied value to Hz. */
-      if( ( umap = astUnitMapper( setting + off, "Hz", NULL, NULL ) ) ) {
-         astTran1( umap, 1, &dval, 1, &dtemp );
-         umap = astAnnul( umap );
-
-/* Otherwise report an error. */
-      } else if( astOK ) {
-         astError( AST__ATTIN, "astSetAttrib(%s): Intermediate frequency given "
-                   "in an inappropriate system of units \"%g %s\".", status, 
-                   astGetClass( this ), dval, setting + off );
-      }
-
-/* Set the intermediate frequency. */
-      astSetIF( this, dtemp );
-
-/* SideBand */
-/* -------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "sideband= %n%*s %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-
-      if( astChrMatch( "usb", setting+ival ) ) {
-         astSetSideBand( this, USB );
-
-      } else if( astChrMatch( "lsb", setting+ival ) ) {
-         astSetSideBand( this, LSB );
-
-      } else if( astChrMatch( "lo", setting+ival ) ) {
-         astSetSideBand( this, LO );
-
-      } else if( astChrMatch( "observed", setting+ival ) ) {
-         astSetSideBand( this, ( astGetIF( this ) > 0 ) ? LSB : USB );
-
-      } else if( astChrMatch( "image", setting+ival ) ) {
-         astSetSideBand( this, ( astGetIF( this ) <= 0 ) ? LSB : USB );
-
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): The setting \"%s\" is "
-                   "invalid for a %s.", status, astGetClass( this ), setting,
-                   astGetClass( this ) );
-      }
-
-/* AlignSideBand */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "alignsideband= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAlignSideBand( this, ival );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
-   specified. */
-   } else if ( MATCH( "imagfreq" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass any unrecognised setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a DSBSpecFrame and convert to the new coordinate 
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the protected astSubFrame 
-*     method inherited from the SpecFrame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the axes
-*     from a "target" DSBSpecFrame and creates a new Frame with copies of
-*     the selected axes assembled in the requested order. It then
-*     optionally overlays the attributes of a "template" Frame on to the
-*     result. It returns both the resulting Frame and a Mapping that
-*     describes how to convert between the coordinate systems described by
-*     the target and result Frames. If necessary, this Mapping takes
-*     account of any differences in the Frames' attributes due to the
-*     influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target DSBSpecFrame, from which axes are to be 
-*        selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for the
-*        result Frame are to be obtained. Optionally, this may be NULL, in
-*        which case no overlaying of template attributes will be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This number may
-*        be greater than or less than the number of axes in this Frame (or
-*        equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving a list
-*        of the (zero-based) axis indices of the axes to be selected from the
-*        target DSBSpecFrame. The order in which these are given determines
-*        the order in which the axes appear in the result Frame. If any of the
-*        values in this array is set to -1, the corresponding result axis will
-*        not be derived from the target Frame, but will be assigned default
-*        attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This should
-*        contain a list of the template axes (given as zero-based axis indices)
-*        with which the axes of the result Frame are to be associated. This
-*        array determines which axes are used when overlaying axis-dependent
-*        attributes of the template on to the result. If any element of this
-*        array is set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not used and
-*        a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned Mapping.
-*        The forward transformation of this Mapping will describe how to
-*        convert coordinates from the coordinate system described by the target
-*        DSBSpecFrame to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is possible
-*     between the target and the result Frame. Otherwise zero is returned and
-*     *map and *result are returned as NULL (but this will not in itself
-*     result in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not always
-*     be possible otherwise.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     -  This implementation addresses the selection of axes from a 
-*     DSBSpecFrame object. This results in another object of the same class 
-*     only if the single DSBSpecFrame axis is selected exactly once. 
-*     Otherwise, the result is a Frame class object which inherits the 
-*     DSBSpecFrame's axis information (if appropriate) but none of the other 
-*     properties of a DSBSpecFrame.
-*     -  In the event that a DSBSpecFrame results, the returned Mapping will 
-*     take proper account of the relationship between the target and result 
-*     coordinate systems.
-*     -  In the event that a Frame class object results, the returned Mapping
-*     will only represent a selection/permutation of axes.
-
-*  Implementation Deficiencies:
-*     -  Any axis selection is currently permitted. Probably this should be
-*     restricted so that each axis can only be selected once. The
-*     astValidateAxisSelection method will do this but currently there are bugs
-*     in the CmpFrame class that cause axis selections which will not pass this
-*     test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *dsbresult;/* Pointer to the DSBSpecFrame result Frame */
-   AstDSBSpecFrame *dsbtarget;/* Pointer to the DSBSpecFrame target Frame */
-   AstMapping *map1;          /* Intermediate Mapping */
-   AstMapping *map2;          /* Intermediate Mapping */
-   AstMapping *map3;          /* Intermediate Mapping */
-   int alignsb;               /* Use sidebands to align the Frames? */
-   int match;                 /* Coordinate conversion is possible? */
-   int obs_sb;                /* The observed sideband value */
-   int old_sb;                /* The original Sideband value */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Invoke the astSubFrame method inherited from the parent SpecFrame
-   class. This will (if possible) create a result Frame which is a
-   DSBSpecFrame (since the supplied target Frame is a DSBSpecFrame).
-   However, the Mapping from target to result Frame will take no account
-   of any differences in the values of the attributes specific to the 
-   DSBSpecFrame class. */
-   match = (*parent_subframe)( target_frame, template, result_naxes, 
-                               target_axes, template_axes, map, result, status );
-
-/* If a match occurred, and the result and template Frames are both
-   DSBSpecFrames, we now modify the Mapping to take account of 
-   DSBSpecFrame-specific attributes. */
-   if( match && template && astIsADSBSpecFrame( template ) &&
-                            astIsADSBSpecFrame( *result ) ) {
-
-/* Get pointers to the two DSBSpecFrames */
-      dsbtarget = (AstDSBSpecFrame *) target_frame;      
-
-/* See whether alignment occurs between sidebands. If the current call to 
-   this function is part of the process of restoring a FrameSet's integrity 
-   following changes to the FrameSet's current Frame, then we ignore the 
-   setting of the AlignSideBand attributes and use 1. This ensures that
-   when the SideBand attribute (for instance) is changed via a FrameSet
-   pointer, the Mappings within the FrameSet are modified to produce
-   frequencies in the new SideBand. In most other cases, astronomers
-   usually want to align the DSBSpecFrames as if they were basic SpecFrames
-   (that is, ignoring the setting of the SideBand attribute). */
-      if( astGetFrameFlags( target_frame ) & AST__INTFLAG ) {
-         alignsb = 1;
-      } else {
-         alignsb = astGetAlignSideBand( dsbtarget ) && 
-                   astGetAlignSideBand( (AstDSBSpecFrame *) template );
-      }         
-
-/* If we are aligning the sidebands we need to modify the Mapping
-   returned above by the parent SubFrame method. The existing Mapping
-   will convert between the spectral systems represented by the two
-   DSBSpecFrames but will not take account of any difference in
-   sidebands. */
-      if( alignsb ) {
-
-/* We assume that alignment occurs in the observed sideband. Determine
-   which side band is the observed sideband in the target. */
-         old_sb = astGetSideBand( dsbtarget );
-         astSetC( dsbtarget, "SideBand", "observed" );
-         obs_sb = astGetSideBand( dsbtarget );
-         astSetSideBand( dsbtarget, old_sb );
-
-/* Create a Mapping which transforms positions from the target to an exact 
-   copy of the target in which the SideBand attribute is set to the
-   observed (USB or LSB) sideband. This will be a UnitMap if the target 
-   already represents the observed sideband. */
-         if( obs_sb == USB ) {
-            map1 = ToUSBMapping( dsbtarget, "astSubFrame", status );
-   
-         } else if( obs_sb == LSB ) {
-            map1 = ToLSBMapping( dsbtarget, "astSubFrame", status );
-   
-         } else {
-            map1 = NULL;
-            astError( AST__INTER, "astGetImagFreq(%s): Illegal sideband value "
-                      "(%d) encountered (internal AST programming error).", status, 
-                      astGetClass( target_frame ), obs_sb );
-         }  
-
-/* Determine which side band is the observed sideband in the result. */
-         dsbresult = (AstDSBSpecFrame *) *result;
-         old_sb = astGetSideBand( dsbresult );
-         astSetC( dsbresult, "SideBand", "observed" );
-         obs_sb = astGetSideBand( dsbresult );
-         astSetSideBand( dsbresult, old_sb );
-
-/* Create a Mapping which transforms positions from the result to an exact 
-   copy of the result in which the SideBand attribute is set to the
-   obserfed sideband. This will be a UnitMap if the target already represents
-   the observed sideband. */
-         if( obs_sb == USB ) {
-            map2 = ToUSBMapping( dsbresult, "astSubFrame", status );
-   
-         } else if( obs_sb == LSB ) {
-            map2 = ToLSBMapping( dsbresult, "astSubFrame", status );
-   
-         } else {
-            map2 = NULL;
-            astError( AST__INTER, "astGetImagFreq(%s): Illegal sideband value "
-                      "(%d) encountered (internal AST programming error).", status, 
-                      astGetClass( target_frame ), obs_sb );
-         }  
-
-/* Invert it to get the mapping from the observed sideband to the result. */
-         astInvert( map2 );
-
-/* Form a Mapping which first maps target values to the observed sideband, 
-   then applies the Mapping returned by the parent SubFrame method in
-   order to convert between spectral systems, and then converts from the 
-   observed sideband to the SideBand of the result. */
-         map3 = (AstMapping *) astCmpMap( map1, *map, 1, "", status );
-         map1 = astAnnul( map1 );
-         *map = astAnnul( *map );
-         map1 = (AstMapping *) astCmpMap( map3, map2, 1, "", status );
-         map3 = astAnnul( map3 );
-         map2 = astAnnul( map2 );
-
-/* Returned the simplified Mapping. */
-         *map = astSimplify( map1 );
-         map1 = astAnnul( map1 );
-      }
-   }
-
-/* If an error occurred or no match was found, annul the returned
-   objects and reset the returned result. */
-   if ( !astOK || !match ) {
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a DSBSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function (over-rides the astTestAttrib protected
-*     method inherited from the SpecFrame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a DSBSpecFrame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *this;        /* Pointer to the DSBSpecFrame structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
-   this = (AstDSBSpecFrame *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* DSBCentre */
-/* --------- */
-   if ( !strcmp( attrib, "dsbcentre" ) ) {
-      result = astTestDSBCentre( this );
-
-/* IF */
-/* -- */
-   } else if ( !strcmp( attrib, "if" ) ) {
-      result = astTestIF( this );
-
-/* SideBand */
-/* -------- */
-   } else if ( !strcmp( attrib, "sideband" ) ) {
-      result = astTestSideBand( this );
-
-/* AlignSideBand */
-/* ------------- */
-   } else if ( !strcmp( attrib, "alignsideband" ) ) {
-      result = astTestAlignSideBand( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then return zero. */
-   } else if ( !strcmp( attrib, "imagfreq" ) ) {
-      result = 0;
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstMapping *ToLOMapping( AstDSBSpecFrame *this, const char *method, int *status ){
-/*
-*  Name:
-*     ToLOMapping
-
-*  Purpose:
-*     Create a Mapping which transforms a DSBSpecFrame to offset from the
-*     local oscillator frequency.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstMapping *ToLOMapping( AstDSBSpecFrame *this, const char *method, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function 
-
-*  Description:
-*     This function returns a pointer to a new Mapping which transforms
-*     positions in the supplied DSBSpecFrame into an offset from the local 
-*     oscillator frequency. This will be a UnitMap if the DSBSpecFrame 
-*     already represents offset from the local oscillator frequency.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     method
-*        Pointer to a null-terminated string containing the name of the
-*        public invoking method. This is only used in the construction of
-*        error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a new Mapping.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *fmap;         /* LSB to USB (topo freq) */
-   AstMapping *map1;         /* This to USB (topo freq) */
-   AstMapping *map2;         /* This (LSB) to This (USB) */
-   AstMapping *result;       /* Pointer to the returned Mapping */
-   AstMapping *tmap;         /* This to topocentric freq */
-   double f_lo;              /* Local oscillator freq (topo Hz) */
-   double f_in_a;            /* First LSB or USB freq */
-   double f_in_b;            /* Second LSB or USB freq */
-   double f_out_a;           /* First LO freq */
-   double f_out_b;           /* Second LO freq */
-   int sb;                   /* SideBand value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the DSBSpecFrame already represents LO offset, return a UnitMap.*/
-   sb = astGetSideBand( this );
-   if( sb == LO ) {
-      result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If the DSBSpecFrame represents the USB or LSB, create a suitable WinMap. */
-   } else {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to 
-   topocentric frequency in Hz. */
-      tmap = TopoMap( this, 1, method, status );         
-
-/* Calculate the local oscillator frequency (topocentric in Hertz). */
-      VerifyAttrs( this, "create a Mapping to upper sideband", 
-                   "IF DSBCentre", "astGetImagFreq", status );
-      f_lo = astGetDSBCentre( this ) + astGetIF( this );
-
-/* Create a 1D WinMap which converts f_in to f_out. */
-      if( sb == LSB ) {
-         f_in_a = 0.0;
-         f_in_b = f_lo;
-         f_out_a = f_lo;
-         f_out_b = 0.0;
-      } else {
-         f_in_a = 0.0;
-         f_in_b = -f_lo;
-         f_out_a = f_lo;
-         f_out_b = 0.0;
-      }
-
-      fmap = (AstMapping *) astWinMap( 1, &f_in_a, &f_in_b, &f_out_a, &f_out_b, "", status );
-      
-/* Construct the Mapping: input to f_in, f_in to f_out, f_out to input */
-      map1 = (AstMapping *) astCmpMap( tmap, fmap, 1, "", status );
-      astInvert( tmap );
-      map2 = (AstMapping *) astCmpMap( map1, tmap, 1, "", status );
-
-/* Simplify */
-      result = astSimplify( map2 );
-
-/* Free resources */
-      tmap = astAnnul( tmap );
-      fmap = astAnnul( fmap );
-      map1 = astAnnul( map1 );
-      map2 = astAnnul( map2 );
-   }
-
-/* Return NULL if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static AstMapping *ToLSBMapping( AstDSBSpecFrame *this, const char *method, int *status ){
-/*
-*  Name:
-*     ToLSBMapping
-
-*  Purpose:
-*     Create a Mapping which transforms a DSBSpecFrame to the lower
-*     sideband.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstMapping *ToLSBMapping( AstDSBSpecFrame *this, const char *method, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function 
-
-*  Description:
-*     This function returns a pointer to a new Mapping which transforms
-*     positions in the supplied DSBSpecFrame to the lower sideband. This
-*     will be a UnitMap if the DSBSpecFrame already represents the lower
-*     sideband.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     method
-*        Pointer to a null-terminated string containing the name of the
-*        public invoking method. This is only used in the construction of
-*        error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a new Mapping.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *fmap;         /* LSB to USB (topo freq) */
-   AstMapping *map1;         /* This to USB (topo freq) */
-   AstMapping *map2;         /* This (LSB) to This (USB) */
-   AstMapping *result;       /* Pointer to the returned Mapping */
-   AstMapping *tmap;         /* This to topocentric freq */
-   double f_lo;              /* Local oscillator freq (topo Hz) */
-   double f_out_a;           /* First LSB freq */
-   double f_out_b;           /* Second LSB freq */
-   double f_in_a;            /* First USB or LO freq */
-   double f_in_b;            /* Second USB or LO freq */
-   int sb;                   /* SideBand value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the DSBSpecFrame already represents the LSB, return a UnitMap.*/
-   sb = astGetSideBand( this );
-   if( sb == LSB ) {
-      result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If the DSBSpecFrame represents the USB or LO offset, create a suitable 
-   WinMap. */
-   } else {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to 
-   topocentric frequency in Hz. */
-      tmap = TopoMap( this, 1, method, status );         
-
-/* Calculate the local oscillator frequency (topocentric in Hertz). */
-      VerifyAttrs( this, "create a Mapping to lower sideband", 
-                   "IF DSBCentre", "astGetImagFreq", status );
-      f_lo = astGetDSBCentre( this ) + astGetIF( this );
-
-/* Create a 1D WinMap which converts USB or LO to LSB. */
-      if( sb == USB ) {
-         f_in_a = 0.0;
-         f_in_b = 2*f_lo;
-         f_out_a = 2*f_lo;
-         f_out_b = 0.0;
-      } else {
-         f_in_a = 0.0;
-         f_in_b = f_lo;
-         f_out_a = f_lo;
-         f_out_b = 0.0;
-      }
-
-      fmap = (AstMapping *) astWinMap( 1, &f_in_a, &f_in_b, &f_out_a, &f_out_b, "", status );
-      
-/* Construct the Mapping: input to f_in, f_in to f_out, f_out to input */
-      map1 = (AstMapping *) astCmpMap( tmap, fmap, 1, "", status );
-      astInvert( tmap );
-      map2 = (AstMapping *) astCmpMap( map1, tmap, 1, "", status );
-
-/* Simplify */
-      result = astSimplify( map2 );
-
-/* Free resources */
-      tmap = astAnnul( tmap );
-      fmap = astAnnul( fmap );
-      map1 = astAnnul( map1 );
-      map2 = astAnnul( map2 );
-   }
-
-/* Return NULL if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static AstMapping *TopoMap( AstDSBSpecFrame *this, int forward, 
-                            const char *method, int *status ){
-/*
-*  Name:
-*     TopoMap
-
-*  Purpose:
-*     Create a Mapping which transforms a DSBSpecFrame to topocentric
-*     frequency.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstMapping *TopoMap( AstDSBSpecFrame *this, int forward, 
-*                          const char *method, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function 
-
-*  Description:
-*     This function returns a pointer to a new Mapping which transforms
-*     positions in the supplied DSBSpecFrame to the corresponding
-*     topocentric frequency values in Hz (or the inverse of this).
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     forward
-*        If zero, the calcuated Mapping is inverted before being returned.
-*     method
-*        Pointer to a null-terminated string containing the name of the
-*        public invoking method. This is only used in the construction of
-*        error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a new Mapping.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *result;       /* The returned Mapping */
-   AstFrameSet *fs;          /* FrameSet connecting tf1 and tf2 */
-   AstSpecFrame *tf1;        /* SpecFrame corresponding to this DSBSpecFrame */
-   AstSpecFrame *tf2;        /* Topocentric frequency SpecFrame */
-   int template_axis;        /* The axis to overlay */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Make a SpecFrame and then overlay the SpecFrame attributes of this 
-   DSBSpecFrame onto the new SpecFrame. This means it inherits the current 
-   values of things like ObsLon and ObsLat. */
-   tf1 = astSpecFrame( "", status );
-   template_axis = 0;
-   (*parent_overlay)( (AstFrame *) this, &template_axis, (AstFrame *) tf1, status );
-
-/* Copy this new SpecFrame and set its attributes to describe topocentric
-   frequency in Hz. Ensure that alignment occurs in the topocentric Frame. */
-   astSetAlignStdOfRest( tf1, AST__TPSOR);
-   tf2 = astCopy( tf1 );
-   astSetSystem( tf2, AST__FREQ );
-   astSetStdOfRest( tf2, AST__TPSOR );
-   astSetUnit( tf2, 0, "Hz" );
-
-/* Find the Mapping from the spectral system described by this SpecFrame to 
-   topocentric frequency in Hz. */
-   fs = astConvert( tf1, tf2, "" );
-   if ( astOK ) {
-      if( !fs ) {
-         astError( AST__INTER, "%s(%s): Cannot convert DSBCentre "
-                   "value from the supplied system to topocentric frequency "
-                   "(internal AST programming error).", status, method, 
-                   astGetClass( this ) );
-      } else {
-         result = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         if( !forward ) astInvert( result );
-      }
-      fs = astAnnul( fs );
-   }
-
-/* Free resources */
-   tf1 = astAnnul( tf1 );
-   tf2 = astAnnul( tf2 );
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static AstMapping *ToUSBMapping( AstDSBSpecFrame *this, const char *method, int *status ){
-/*
-*  Name:
-*     ToUSBMapping
-
-*  Purpose:
-*     Create a Mapping which transforms a DSBSpecFrame to the upper
-*     sideband.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstMapping *ToUSBMapping( AstDSBSpecFrame *this, const char *method, int *status )
-
-*  Class Membership:
-*     DSBSpecFrame member function 
-
-*  Description:
-*     This function returns a pointer to a new Mapping which transforms
-*     positions in the supplied DSBSpecFrame to the upper sideband. This
-*     will be a UnitMap if the DSBSpecFrame already represents the upper
-*     sideband.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame.
-*     method
-*        Pointer to a null-terminated string containing the name of the
-*        public invoking method. This is only used in the construction of
-*        error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a new Mapping.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *fmap;         /* LSB to USB (topo freq) */
-   AstMapping *map1;         /* This to USB (topo freq) */
-   AstMapping *map2;         /* This (LSB) to This (USB) */
-   AstMapping *result;       /* Pointer to the returned Mapping */
-   AstMapping *tmap;         /* This to topocentric freq */
-   double f_lo;              /* Local oscillator freq (topo Hz) */
-   double f_in_a;            /* First LSB or LO freq */
-   double f_in_b;            /* Second LSB or LO freq */
-   double f_out_a;           /* First USB freq */
-   double f_out_b;           /* Second USB freq */
-   int sb;                   /* SideBand value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the DSBSpecFrame already represents the USB, return a UnitMap.*/
-   sb = astGetSideBand( this );
-   if( sb == USB ) {
-      result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* If the DSBSpecFrame represents the LSB, or LO offset, create a suitable 
-   WinMap. */
-   } else {
-
-/* Find the Mapping from the spectral system described by this SpecFrame to 
-   topocentric frequency in Hz. */
-      tmap = TopoMap( this, 1, method, status );         
-
-/* Calculate the local oscillator frequency (topocentric in Hertz). */
-      VerifyAttrs( this, "create a Mapping to upper sideband", 
-                   "IF DSBCentre", "astGetImagFreq", status );
-      f_lo = astGetDSBCentre( this ) + astGetIF( this );
-
-/* Create a 1D WinMap which converts f_in to f_out. */
-      if( sb == LSB ) {
-         f_in_a = 0.0;
-         f_in_b = 2*f_lo;
-         f_out_a = 2*f_lo;
-         f_out_b = 0.0;
-      } else {
-         f_in_a = 0.0;
-         f_in_b = -f_lo;
-         f_out_a = f_lo;
-         f_out_b = 0.0;
-      }
-
-      fmap = (AstMapping *) astWinMap( 1, &f_in_a, &f_in_b, &f_out_a, &f_out_b, "", status );
-      
-/* Construct the Mapping: input to f_in, f_in to f_out, f_out to input */
-      map1 = (AstMapping *) astCmpMap( tmap, fmap, 1, "", status );
-      astInvert( tmap );
-      map2 = (AstMapping *) astCmpMap( map1, tmap, 1, "", status );
-
-/* Simplify */
-      result = astSimplify( map2 );
-
-/* Free resources */
-      tmap = astAnnul( tmap );
-      fmap = astAnnul( fmap );
-      map1 = astAnnul( map1 );
-      map2 = astAnnul( map2 );
-   }
-
-/* Return NULL if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static void VerifyAttrs( AstDSBSpecFrame *this, const char *purp, 
-                         const char *attrs, const char *method, int *status ) {
-/*
-*  Name:
-*     VerifyAttrs
-
-*  Purpose:
-*     Verify that usable attribute values are available.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     void VerifyAttrs( AstDSBSpecFrame *this, const char *purp, 
-*                       const char *attrs, const char *method, int *status  )
-
-*  Class Membership:
-*     DSBSpecFrame member function 
-
-*  Description:
-*     This function tests each attribute listed in "attrs". It returns
-*     without action if 1) an explicit value has been set for each attribute
-*     or 2) the UseDefs attribute of the supplied DSBSpecFrame is non-zero.
-*
-*     If UseDefs is zero (indicating that default values should not be
-*     used for attributes), and any of the named attributes does not have
-*     an explicitly set value, then an error is reported.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame. 
-*     purp
-*        Pointer to a text string containing a message which will be
-*        included in any error report. This shouldindicate the purpose
-*        for which the attribute value is required. 
-*     attrs
-*        A string holding a space separated list of attribute names.
-*     method
-*        A string holding the name of the calling method for use in error
-*        messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   const char *a;
-   const char *desc;
-   const char *p;
-   int len;
-   int set;
-   int state;
-
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* If the DSBSpecFrame has a non-zero value for its UseDefs attribute, then
-   all attributes are assumed to have usable values, since the defaults 
-   will be used if no explicit value has been set. So we only need to do
-   any checks if UseDefs is zero. */
-   if( !astGetUseDefs( this ) ) {   
-
-/* Initialise variables to avoid compiler warnings. */
-      a = NULL;
-      desc = NULL;
-      len = 0;
-      set = 0;
-
-/* Loop round the "attrs" string identifying the start and length of each
-   non-blank word in the string. */
-      state = 0;
-      p = attrs;
-      while( 1 ) {
-         if( state == 0 ) {
-            if( !isspace( *p ) ) {
-               a = p;
-               len = 1;
-               state = 1;
-            }
-         } else {
-            if( isspace( *p ) || !*p ) {
-   
-/* The end of a word has just been reached. Compare it to each known
-   attribute value. Get a flag indicating if the attribute has a set
-   value, and a string describing the attribute.*/
-               if( len > 0 ) {
-
-                  if( !strncmp( "DSBCentre", a, len ) ) {
-                     set = astTestDSBCentre( this );
-                     desc = "central position of interest";
-
-                  } else if( !strncmp( "IF", a, len ) ) {
-                     set = astTestIF( this );
-                     desc = "intermediate frequency";
-
-                  } else {
-                     astError( AST__INTER, "VerifyAttrs(DSBSpecFrame): "
-                               "Unknown attribute name \"%.*s\" supplied (AST "
-                               "internal programming error).", status, len, a );
-                  }
-
-/* If the attribute does not have a set value, report an error. */
-                  if( !set && astOK ) {
-                     astError( AST__NOVAL, "%s(%s): Cannot %s.", status, method,
-                               astGetClass( this ), purp );
-                     astError( AST__NOVAL, "No value has been set for "
-                               "the AST \"%.*s\" attribute (%s).", status, len, a,
-                               desc );
-                  }
-
-/* Continue the word search algorithm. */
-               }
-               len = 0;
-               state = 0;
-            } else {
-               len++;
-            }
-         }
-         if( !*(p++) ) break;
-      }
-   }
-}
-
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     ImagFreq
-
-*  Purpose:
-*     The image sideband equivalent of the rest frequency.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point, read-only.
-
-*  Description:
-*     This is a read-only attribute giving the frequency which
-*     corresponds to the rest frequency but is in the opposite sideband.
-
-*     The value is calculated by first transforming the rest frequency
-*     (given by the RestFreq attribute) from the standard of rest of the
-*     source (given by the SourceVel and SourceVRF attributes) to the
-*     standard of rest of the observer (i.e. the topocentric standard of
-*     rest). The resulting topocentric frequency is assumed to be in the
-*     same sideband as the value given for the DSBCentre attribute (the
-*     "observed" sideband), and is transformed to the other sideband (the
-*     "image" sideband). The new frequency is converted back to the standard
-*     of rest of the source, and the resulting value is returned as the
-*     attribute value, in units of GHz.
-
-*  Applicability:
-*     DSBSpecFrame
-*        All DSBSpecFrames have this attribute.
-
-*att--
-*/
-
-
-/*
-*att++
-*  Name:
-*     DSBCentre
-
-*  Purpose:
-*     The central position of interest in a dual sideband spectrum.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the central position of interest in a dual 
-*     sideband spectrum. Its sole use is to determine the local oscillator 
-*     frequency (the frequency which marks the boundary between the lower 
-*     and upper sidebands). See the description of the IF (intermediate 
-*     frequency) attribute for details of how the local oscillator frequency
-*     is calculated. The sideband containing this central position is
-*     referred to as the "observed" sideband, and the other sideband as 
-*     the "image" sideband. 
-*
-*     The value is accessed as a position in the spectral system
-*     represented by the SpecFrame attributes inherited by this class, but
-*     is stored internally as topocentric frequency. Thus, if the System
-*     attribute of the DSBSpecFrame is set to "VRAD", the Unit attribute
-*     set to "m/s" and the StdOfRest attribute set to "LSRK", then values
-*     for the DSBCentre attribute should be supplied as radio velocity in
-*     units of "m/s" relative to the kinematic LSR (alternative units may
-*     be used by appending a suitable units string to the end of the value). 
-*     This value is then converted to topocentric frequency and stored. If 
-*     (say) the Unit attribute is subsequently changed to "km/s" before 
-*     retrieving the current value of the DSBCentre attribute, the stored 
-*     topocentric frequency will be converted back to LSRK radio velocity, 
-*     this time in units of "km/s", before being returned.
-*
-*     The default value for this attribute is 30 GHz.
-
-*  Applicability:
-*     DSBSpecFrame
-*        All DSBSpecFrames have this attribute.
-
-*  Note:
-*     - The attributes which define the transformation to or from topocentric 
-*     frequency should be assigned their correct values before accessing
-*     this attribute. These potentially include System, Unit, StdOfRest, 
-*     ObsLon, ObsLat, ObsAlt, Epoch, RefRA, RefDec and RestFreq.
-
-*att--
-*/
-/* The central frequency (topocentric frequency in Hz). */
-astMAKE_CLEAR(DSBSpecFrame,DSBCentre,dsbcentre,AST__BAD)
-astMAKE_GET(DSBSpecFrame,DSBCentre,double,3.0E10,((this->dsbcentre!=AST__BAD)?this->dsbcentre:3.0E10))
-astMAKE_SET(DSBSpecFrame,DSBCentre,double,dsbcentre,value)
-astMAKE_TEST(DSBSpecFrame,DSBCentre,( this->dsbcentre != AST__BAD ))
-
-
-/*
-*att++
-*  Name:
-*     IF
-
-*  Purpose:
-*     The intermediate frequency in a dual sideband spectrum.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the (topocentric) intermediate frequency in 
-*     a dual sideband spectrum. Its sole use is to determine the local 
-*     oscillator (LO) frequency (the frequency which marks the boundary 
-*     between the lower and upper sidebands). The LO frequency is
-*     equal to the sum of the centre frequency and the intermediate
-*     frequency. Here, the "centre frequency" is the topocentric
-*     frequency in Hz corresponding to the current value of the DSBCentre
-*     attribute. The value of the IF attribute may be positive or
-*     negative: a positive value results in the LO frequency being above
-*     the central frequency, whilst a negative IF value results in the LO
-*     frequency being below the central frequency. The sign of the IF
-*     attribute value determines the default value for the SideBand 
-*     attribute.
-*
-*     When setting a new value for this attribute, the units in which the
-*     frequency value is supplied may be indicated by appending a suitable 
-*     string to the end of the formatted value. If the units are not 
-*     specified, then the supplied value is assumed to be in units of GHz. 
-*     For instance, the following strings all result in an IF of 4 GHz being 
-*     used: "4.0", "4.0 GHz", "4.0E9 Hz", etc.
-*
-*     When getting the value of this attribute, the returned value is
-*     always in units of GHz. The default value for this attribute is 4 GHz.
-
-*  Applicability:
-*     DSBSpecFrame
-*        All DSBSpecFrames have this attribute.
-
-*att--
-*/
-/* The intermediate frequency (topocentric in Hz). */
-astMAKE_CLEAR(DSBSpecFrame,IF,ifr,AST__BAD)
-astMAKE_GET(DSBSpecFrame,IF,double,4.0E9,((this->ifr!=AST__BAD)?this->ifr:4.0E9))
-astMAKE_SET(DSBSpecFrame,IF,double,ifr,value)
-astMAKE_TEST(DSBSpecFrame,IF,( this->ifr != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     SideBand
-
-*  Purpose:
-*     Indicates which sideband a dual sideband spectrum represents.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute indicates whether the DSBSpecFrame currently
-*     represents its lower or upper sideband, or an offset from the local
-*     oscillator frequency. When querying the current value, the returned 
-*     string is always one of "usb" (for upper sideband), "lsb" (for lower
-*     sideband), or "lo" (for offset from the local oscillator frequency). 
-*     When setting a new value, any of the strings "lsb", "usb", "observed",
-*     "image" or "lo" may be supplied (case insensitive). The "observed" 
-*     sideband is which ever sideband (upper or lower) contains the central 
-*     spectral position given by attribute DSBCentre, and the "image" 
-*     sideband is the other sideband. It is the sign of the IF attribute 
-*     which determines if the observed sideband is the upper or lower 
-*     sideband. The default value for SideBand is the observed sideband.
-
-*  Applicability:
-*     DSBSpecFrame
-*        All DSBSpecFrames have this attribute.
-
-*att--
-*/
-/* Protected access to the SideBand attribute uses BADSB to indicate
-   "unset". Other negative values mean "LSB", zero means "LO" and
-   positive values mean "USB". */
-astMAKE_CLEAR(DSBSpecFrame,SideBand,sideband,BADSB)
-astMAKE_SET(DSBSpecFrame,SideBand,int,sideband,((value<0)?LSB:((value==0)?LO:USB)))
-astMAKE_TEST(DSBSpecFrame,SideBand,( this->sideband != BADSB ))
-astMAKE_GET(DSBSpecFrame,SideBand,int,USB,(this->sideband == BADSB ? ((astGetIF( this )>0)?LSB:USB):this->sideband))
-
-/*
-*att++
-*  Name:
-*     AlignSideBand
-
-*  Purpose:
-*     Should the SideBand attribute be taken into account when aligning
-*     this DSBSpecFrame with another DSBSpecFrame?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls how a DSBSpecFrame behaves when an attempt
-*     is made to align it with another DSBSpecFrame using 
-c     astFindFrame or astConvert.
-f     AST_FINDFRAME or AST_CONVERT.
-*     If both DSBSpecFrames have a non-zero value for AlignSideBand, the 
-*     value of the SideBand attribute in each DSBSpecFrame is used so that 
-*     alignment occurs between sidebands. That is, if one DSBSpecFrame 
-*     represents USB and the other represents LSB then 
-c     astFindFrame and astConvert
-f     AST_FINDFRAME and AST_CONVERT
-*     will recognise that the DSBSpecFrames represent different sidebands
-*     and will take this into account when constructing the Mapping that
-*     maps positions in one DSBSpecFrame into the other. If AlignSideBand
-*     in either DSBSpecFrame is set to zero, then the values of the SideBand 
-*     attributes are ignored. In the above example, this would result in a 
-*     frequency in the first DSBSpecFrame being mapped onto the same 
-*     frequency in the second DSBSpecFrame, even though those frequencies 
-*     refer to different sidebands. In other words, if either AlignSideBand 
-*     attribute is zero, then the two DSBSpecFrames aligns like basic 
-*     SpecFrames. The default value for AlignSideBand is zero.
-*
-c     When astFindFrame or astConvert 
-f     When AST_FINDFRAME or AST_CONVERT 
-*     is used on two DSBSpecFrames (potentially describing different spectral 
-*     coordinate systems and/or sidebands), it returns a Mapping which can be 
-*     used to transform a position in one DSBSpecFrame into the corresponding 
-*     position in the other. The Mapping is made up of the following steps in 
-*     the indicated order:
-*
-*     - If both DSBSpecFrames have a value of 1 for the AlignSideBand
-*     attribute, map values from the target's current sideband (given by its 
-*     SideBand attribute) to the observed sideband (whether USB or LSB). If 
-*     the target already represents the observed sideband, this step will 
-*     leave the values unchanged. If either of the two DSBSpecFrames have a 
-*     value of zero for its AlignSideBand attribute, then this step is omitted.
-*
-*     - Map the values from the spectral system of the target to the spectral 
-*     system of the template. This Mapping takes into account all the
-*     inherited SpecFrame attributes such as System, StdOfRest, Unit, etc.
-*
-*     - If both DSBSpecFrames have a value of 1 for the AlignSideBand
-*     attribute, map values from the result's observed sideband to the 
-*     result's current sideband (given by its SideBand attribute). If the 
-*     result already represents the observed sideband, this step will leave 
-*     the values unchanged. If either of the two DSBSpecFrames have a value 
-*     of zero for its AlignSideBand attribute, then this step is omitted.
-
-*  Applicability:
-*     DSBSpecFrame
-*        All DSBSpecFrames have this attribute.
-
-*att--
-*/
-/* The AlignSideBand value has a value of -1 when not set yielding a 
-   default of 0. */
-astMAKE_TEST(DSBSpecFrame,AlignSideBand,( this->alignsideband != -1 ))
-astMAKE_CLEAR(DSBSpecFrame,AlignSideBand,alignsideband,-1)
-astMAKE_GET(DSBSpecFrame,AlignSideBand,int,-1,((this->alignsideband==-1)?0:this->alignsideband) )
-astMAKE_SET(DSBSpecFrame,AlignSideBand,int,alignsideband,(value?1:0))
-
-/* Copy constructor. */
-/* ----------------- */
-/* None needed */
-
-/* Destructor. */
-/* ----------- */
-/* None needed */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for DSBSpecFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the DSBSpecFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the DSBSpecFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *this;        /* Pointer to the DSBSpecFrame structure */
-   const char *cval;             /* Attribute value */
-   const char *comm;             /* Attribute comment */
-   double dval;                  /* Attribute value */
-   int ival;                     /* Attribute value */
-   int set;                      /* Is attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the DSBSpecFrame structure. */
-   this = (AstDSBSpecFrame *) this_object;
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* DSBCentre */
-/* --------- */
-   set = TestDSBCentre( this, status );
-   dval = set ? GetDSBCentre( this, status ) : astGetDSBCentre( this );
-   astWriteDouble( channel, "DSBCen", set, 1, dval, "Central frequency (Hz topo)" );
-
-/* IF */
-/* -- */
-   set = TestIF( this, status );
-   dval = set ? GetIF( this, status ) : astGetIF( this );
-   astWriteDouble( channel, "IF", set, 1, dval, "Intermediate frequency (Hz)" );
-
-/* SideBand */
-/* -------- */
-   set = TestSideBand( this, status );
-   ival = set ? GetSideBand( this, status ) : astGetSideBand( this );
-   if( ival == LSB ) {
-      cval = "LSB";
-      comm = "Represents lower sideband";
-
-   } else if( ival == LO ) {
-      cval = "LO";
-      comm = "Represents offset from LO frequency";
-
-   } else {
-      cval = "USB";
-      comm = "Represents upper sideband";
-   }
-   astWriteString( channel, "SideBn", set, 1, cval, comm );
-
-/* AlignSideBand */
-/* ------------- */
-   set = TestAlignSideBand( this, status );
-   ival = set ? GetAlignSideBand( this, status ) : astGetAlignSideBand( this );
-   astWriteInt( channel, "AlSdBn", set, 1, ival, "Align sidebands?" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsADSBSpecFrame and astCheckDSBSpecFrame functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(DSBSpecFrame,SpecFrame)
-astMAKE_CHECK(DSBSpecFrame)
-
-AstDSBSpecFrame *astDSBSpecFrame_( const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astDSBSpecFrame
-f     AST_DSBSPECFRAME
-
-*  Purpose:
-*     Create a DSBSpecFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "dsbspecframe.h"
-c     AstDSBSpecFrame *astDSBSpecFrame( const char *options, ... )
-f     RESULT = AST_DSBSPECFRAME( OPTIONS, STATUS )
-
-*  Class Membership:
-*     DSBSpecFrame constructor.
-
-*  Description:
-*     This function creates a new DSBSpecFrame and optionally initialises its
-*     attributes.
-*
-*     A DSBSpecFrame is a specialised form of SpecFrame which represents 
-*     positions in a spectrum obtained using a dual sideband instrument.
-*     Such an instrument produces a spectrum in which each point contains 
-*     contributions from two distinctly different frequencies, one from
-*     the "lower side band" (LSB) and one from the "upper side band" (USB). 
-*     Corresponding LSB and USB frequencies are connected by the fact
-*     that they are an equal distance on either side of a fixed central
-*     frequency known as the "Local Oscillator" (LO) frequency.
-*
-*     When quoting a position within such a spectrum, it is necessary to
-*     indicate whether the quoted position is the USB position or the 
-*     corresponding LSB position. The SideBand attribute provides this
-*     indication. Another option that the SideBand attribute provides is
-*     to represent a spectral position by its topocentric offset from the 
-*     LO frequency.
-*
-*     In practice, the LO frequency is specified by giving the distance
-*     from the LO frequency to some "central" spectral position. Typically 
-*     this central position is that of some interesting spectral feature. 
-*     The distance from this central position to the LO frequency is known 
-*     as the "intermediate frequency" (IF). The value supplied for IF can
-*     be a signed value in order to indicate whether the LO frequency is
-*     above or below the central position.
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new DSBSpecFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new DSBSpecFrame. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astDSBSpecFrame()
-f     AST_DSBSPECFRAME = INTEGER
-*        A pointer to the new DSBSpecFrame.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstDSBSpecFrame *new;        /* Pointer to new DSBSpecFrame */
-   va_list args;                /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the DSBSpecFrame, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitDSBSpecFrame( NULL, sizeof( AstDSBSpecFrame ), !class_init, &class_vtab,
-                              "DSBSpecFrame" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new DSBSpecFrame's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new DSBSpecFrame. */
-   return new;
-}
-
-AstDSBSpecFrame *astDSBSpecFrameId_( const char *options, ... ) {
-/*
-*  Name:
-*     astDSBSpecFrameId_
-
-*  Purpose:
-*     Create a DSBSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstDSBSpecFrame *astDSBSpecFrameId_( const char *options, ... ) 
-
-*  Class Membership:
-*     DSBSpecFrame constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astDSBSpecFrame constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astDSBSpecFrame_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astDSBSpecFrame_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astDSBSpecFrame_.
-
-*  Returned Value:
-*     The ID value associated with the new DSBSpecFrame.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstDSBSpecFrame *new;        /* Pointer to new DSBSpecFrame */
-   va_list args;                /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the DSBSpecFrame, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitDSBSpecFrame( NULL, sizeof( AstDSBSpecFrame ), !class_init, &class_vtab,
-                              "DSBSpecFrame" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new DSBSpecFrame's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new DSBSpecFrame. */
-   return astMakeId( new );
-}
-
-AstDSBSpecFrame *astInitDSBSpecFrame_( void *mem, size_t size, int init,
-                                       AstDSBSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitDSBSpecFrame
-
-*  Purpose:
-*     Initialise a DSBSpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstDSBSpecFrame *astInitDSBSpecFrame( void *mem, size_t size, int init,
-*                               AstDSBSpecFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     DSBSpecFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new DSBSpecFrame object. It allocates memory (if necessary) to accommodate
-*     the DSBSpecFrame plus any additional data associated with the derived class.
-*     It then initialises a DSBSpecFrame structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a DSBSpecFrame at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the DSBSpecFrame is to be initialised.
-*        This must be of sufficient size to accommodate the DSBSpecFrame data
-*        (sizeof(DSBSpecFrame)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the DSBSpecFrame (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the DSBSpecFrame
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the DSBSpecFrame's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new DSBSpecFrame.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new DSBSpecFrame.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *new;        /* Pointer to new DSBSpecFrame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitDSBSpecFrameVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a SpecFrame structure (the parent class) as the first component
-   within the DSBSpecFrame structure, allocating memory if necessary. Specify that
-   the SpecFrame should be defined in both the forward and inverse directions. */
-   new = (AstDSBSpecFrame *) astInitSpecFrame( mem, size, 0,
-                                       (AstSpecFrameVtab *) vtab, name );
-   if ( astOK ) {
-
-/* Initialise the DSBSpecFrame data. */
-/* --------------------------------- */
-      new->dsbcentre = AST__BAD;
-      new->ifr = AST__BAD;
-      new->sideband = BADSB;
-      new->alignsideband = -1;
-
-/* If an error occurred, clean up by deleting the new DSBSpecFrame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new DSBSpecFrame. */
-   return new;
-}
-
-AstDSBSpecFrame *astLoadDSBSpecFrame_( void *mem, size_t size,
-                           AstDSBSpecFrameVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadDSBSpecFrame
-
-*  Purpose:
-*     Load a DSBSpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dsbspecframe.h"
-*     AstDSBSpecFrame *astLoadDSBSpecFrame( void *mem, size_t size,
-*                               AstDSBSpecFrameVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     DSBSpecFrame loader.
-
-*  Description:
-*     This function is provided to load a new DSBSpecFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     DSBSpecFrame structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a DSBSpecFrame at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the DSBSpecFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        DSBSpecFrame data (sizeof(DSBSpecFrame)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the DSBSpecFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the DSBSpecFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstDSBSpecFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new DSBSpecFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the DSBSpecFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "DSBSpecFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new DSBSpecFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants. */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstDSBSpecFrame *new;         /* Pointer to the new DSBSpecFrame */
-   char *text;                   /* Pointer to string value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this DSBSpecFrame. In this case the
-   DSBSpecFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstDSBSpecFrame );
-      vtab = &class_vtab;
-      name = "DSBSpecFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitDSBSpecFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built DSBSpecFrame. */
-   new = astLoadSpecFrame( mem, size, (AstSpecFrameVtab *) vtab, name,
-                           channel );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-       astReadClassData( channel, "DSBSpecFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* DSBCentre */
-/* --------- */
-      new->dsbcentre = astReadDouble( channel, "dsbcen", AST__BAD );
-      if ( TestDSBCentre( new, status ) ) SetDSBCentre( new, new->dsbcentre, status );
-
-/* IF */
-/* -- */
-      new->ifr = astReadDouble( channel, "if", AST__BAD );
-      if ( TestIF( new, status ) ) SetIF( new, new->ifr, status );
-
-/* SideBand */
-/* -------- */
-      text = astReadString( channel, "sidebn", " " );
-      if( astOK ) {
-         if( !strcmp( text, " " ) ) {
-            new->sideband = BADSB;
-         } else if( !strcmp( text, "USB" ) ) {
-            new->sideband = USB;
-         } else if( !strcmp( text, "LSB" ) ) {
-            new->sideband = LSB;
-         } else if( !strcmp( text, "LO" ) ) {
-            new->sideband = LO;
-         } else {
-            astError( AST__ATTIN, "astRead(%s): Invalid SideBand description "
-                      "\"%s\".", status, astGetClass( channel ), text );
-         }
-         if ( TestSideBand( new, status ) ) SetSideBand( new, new->sideband, status );
-         text = astFree( text );
-      }
-
-/* AlignSideBand */
-/* ------------- */
-      new->alignsideband = astReadInt( channel, "alsdbn", -1 );
-      if( TestAlignSideBand( new, status ) ) SetAlignSideBand( new, new->alignsideband, status );
-
-/* If an error occurred, clean up by deleting the new DSBSpecFrame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new DSBSpecFrame pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-double astGetImagFreq_( AstDSBSpecFrame *this, int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,DSBSpecFrame,GetImagFreq))( this, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/dsbspecframe.h b/ast-5.3-1/dsbspecframe.h
deleted file mode 100644
index 3ed0446..0000000
--- a/ast-5.3-1/dsbspecframe.h
+++ /dev/null
@@ -1,298 +0,0 @@
-#if !defined( DSBSPECFRAME_INCLUDED ) /* Include this file only once */
-#define DSBSPECFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     dsbspecframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the DSBSpecFrame class.
-
-*  Invocation:
-*     #include "dsbspecframe.h"
-
-*  Description:
-*     This include file defines the interface to the DSBSpecFrame class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-
-*  Inheritance:
-*     The DSBSpecFrame class inherits from the SpecFrame class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     5-AUG-2004 (DSB):
-*        Original version.
-*     27-OCT-2006 (DSB):
-*        Added AlignSideBand.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "specframe.h"           /* Spectral coord systems (parent class) */
-
-/* C header files. */
-/* --------------- */
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* DSBSpecFrame structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstDSBSpecFrame {
-
-/* Attributes inherited from the parent class. */
-   AstSpecFrame specframe;      /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double dsbcentre;            /* Centre frequency */
-   double ifr;                  /* Intermediate frequency */
-   int sideband;                /* Current sideband */
-   int alignsideband;           /* Aligns sidebands? */
-
-} AstDSBSpecFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstDSBSpecFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstSpecFrameVtab specframe_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double (* GetDSBCentre)( AstDSBSpecFrame *, int * );
-   int (* TestDSBCentre)( AstDSBSpecFrame *, int * );
-   void (* ClearDSBCentre)( AstDSBSpecFrame *, int * );
-   void (* SetDSBCentre)( AstDSBSpecFrame *, double, int * );
-
-   double (* GetIF)( AstDSBSpecFrame *, int * );
-   int (* TestIF)( AstDSBSpecFrame *, int * );
-   void (* ClearIF)( AstDSBSpecFrame *, int * );
-   void (* SetIF)( AstDSBSpecFrame *, double, int * );
-
-   int (* GetSideBand)( AstDSBSpecFrame *, int * );
-   int (* TestSideBand)( AstDSBSpecFrame *, int * );
-   void (* ClearSideBand)( AstDSBSpecFrame *, int * );
-   void (* SetSideBand)( AstDSBSpecFrame *, int, int * );
-
-   int (* GetAlignSideBand)( AstDSBSpecFrame *, int * );
-   int (* TestAlignSideBand)( AstDSBSpecFrame *, int * );
-   void (* ClearAlignSideBand)( AstDSBSpecFrame *, int * );
-   void (* SetAlignSideBand)( AstDSBSpecFrame *, int, int * );
-
-   double (* GetImagFreq)( AstDSBSpecFrame *, int * );
-
-} AstDSBSpecFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstDSBSpecFrameGlobals {
-   AstDSBSpecFrameVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-   char GetLabel_Buff[ 101 ];
-} AstDSBSpecFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(DSBSpecFrame)          /* Check class membership */
-astPROTO_ISA(DSBSpecFrame)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstDSBSpecFrame *astDSBSpecFrame_( const char *, int *, ...);
-#else
-AstDSBSpecFrame *astDSBSpecFrameId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstDSBSpecFrame *astInitDSBSpecFrame_( void *, size_t, int, AstDSBSpecFrameVtab *,
-                                       const char *, int * );
-
-/* Vtab initialiser. */
-void astInitDSBSpecFrameVtab_( AstDSBSpecFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstDSBSpecFrame *astLoadDSBSpecFrame_( void *, size_t, AstDSBSpecFrameVtab *,
-                                       const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitDSBSpecFrameGlobals_( AstDSBSpecFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-   double astGetDSBCentre_( AstDSBSpecFrame *, int * );
-   int astTestDSBCentre_( AstDSBSpecFrame *, int * );
-   void astClearDSBCentre_( AstDSBSpecFrame *, int * );
-   void astSetDSBCentre_( AstDSBSpecFrame *, double, int * );
-
-   double astGetIF_( AstDSBSpecFrame *, int * );
-   int astTestIF_( AstDSBSpecFrame *, int * );
-   void astClearIF_( AstDSBSpecFrame *, int * );
-   void astSetIF_( AstDSBSpecFrame *, double, int * );
-
-   int astGetSideBand_( AstDSBSpecFrame *, int * );
-   int astTestSideBand_( AstDSBSpecFrame *, int * );
-   void astClearSideBand_( AstDSBSpecFrame *, int * );
-   void astSetSideBand_( AstDSBSpecFrame *, int, int * );
-
-   int astGetAlignSideBand_( AstDSBSpecFrame *, int * );
-   int astTestAlignSideBand_( AstDSBSpecFrame *, int * );
-   void astClearAlignSideBand_( AstDSBSpecFrame *, int * );
-   void astSetAlignSideBand_( AstDSBSpecFrame *, int, int * );
-
-   double astGetImagFreq_( AstDSBSpecFrame *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckDSBSpecFrame(this) astINVOKE_CHECK(DSBSpecFrame,this,0)
-#define astVerifyDSBSpecFrame(this) astINVOKE_CHECK(DSBSpecFrame,this,1)
-
-/* Test class membership. */
-#define astIsADSBSpecFrame(this) astINVOKE_ISA(DSBSpecFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astDSBSpecFrame astINVOKE(F,astDSBSpecFrame_)
-#else
-#define astDSBSpecFrame astINVOKE(F,astDSBSpecFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define \
-astInitDSBSpecFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitDSBSpecFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitDSBSpecFrameVtab(vtab,name) astINVOKE(V,astInitDSBSpecFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadDSBSpecFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadDSBSpecFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckDSBSpecFrame to validate DSBSpecFrame pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGetDSBCentre(this) \
-astINVOKE(V,astGetDSBCentre_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestDSBCentre(this) \
-astINVOKE(V,astTestDSBCentre_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearDSBCentre(this) \
-astINVOKE(V,astClearDSBCentre_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetDSBCentre(this,val) \
-astINVOKE(V,astSetDSBCentre_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-				                                   
-#define astGetIF(this) \
-astINVOKE(V,astGetIF_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestIF(this) \
-astINVOKE(V,astTestIF_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearIF(this) \
-astINVOKE(V,astClearIF_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetIF(this,val) \
-astINVOKE(V,astSetIF_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-				                                   
-#define astGetSideBand(this) \
-astINVOKE(V,astGetSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestSideBand(this) \
-astINVOKE(V,astTestSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearSideBand(this) \
-astINVOKE(V,astClearSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetSideBand(this,val) \
-astINVOKE(V,astSetSideBand_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-
-#define astGetAlignSideBand(this) \
-astINVOKE(V,astGetAlignSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astTestAlignSideBand(this) \
-astINVOKE(V,astTestAlignSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astClearAlignSideBand(this) \
-astINVOKE(V,astClearAlignSideBand_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#define astSetAlignSideBand(this,val) \
-astINVOKE(V,astSetAlignSideBand_(astCheckDSBSpecFrame(this),val,STATUS_PTR))
-
-#define astGetImagFreq(this) \
-astINVOKE(V,astGetImagFreq_(astCheckDSBSpecFrame(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/dssmap.c b/ast-5.3-1/dssmap.c
deleted file mode 100644
index e727f1d..0000000
--- a/ast-5.3-1/dssmap.c
+++ /dev/null
@@ -1,2287 +0,0 @@
-/*
-*class++
-*  Name:
-*     DssMap
-
-*  Purpose:
-*     Map points using a Digitised Sky Survey plate solution.
-
-*  Constructor Function:
-*     The DssMap class does not have a constructor function.  A DssMap
-*     is created only as a by-product of reading a FrameSet (using
-c     astRead) from a FitsChan which contains FITS header cards
-f     AST_READ) from a FitsChan which contains FITS header cards
-*     describing a DSS plate solution, and whose Encoding attribute is
-*     set to "DSS". The result of such a read, if successful, is a
-*     FrameSet whose base and current Frames are related by a DssMap.
-
-*  Description:
-*     The DssMap class implements a Mapping which transforms between
-*     2-dimensional pixel coordinates and an equatorial sky coordinate
-*     system (right ascension and declination) using a Digitised Sky
-*     Survey (DSS) astrometric plate solution.
-*
-*     The input coordinates are pixel numbers along the first and
-*     second dimensions of an image, where the centre of the first
-*     pixel is located at (1,1) and the spacing between pixel centres
-*     is unity.
-*
-*     The output coordinates are right ascension and declination in
-*     radians. The celestial coordinate system used (FK4, FK5, etc.)
-*     is unspecified, and will usually be indicated by appropriate
-*     keywords in a FITS header.
-
-*  Inheritance:
-*     The DssMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The DssMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The DssMap class does not define any new functions beyond those
-f     The DssMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-*     (except for code supplied by Doug Mink, as noted in this file)
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink, RAL)
-
-*  History:
-*     18-FEB-1997 (DSB):
-*        Original version.
-*     30-JUN-1997 (DSB):
-*        astDssFits and astDssMap made protected instead of public.
-*     15-JUL-1997 (RFWS):
-*        Tidied public prologues.
-*     5-SEP-197 (RFWS):
-*        Added prototypes for platepos and platepix.
-*     4-NOV-1997 (DSB):
-*        o  A copy of the supplied FitsChan is no longer stored inside
-*        the DssMap. The FitsChan returned by DssFits is now derived from 
-*        the wcs information stored in the SAOimage "WorldCoor" structure
-*        (stored within the DssMap), and only contains the keywords
-*        necessary to reconstruct the DssMap.
-*        o  The external representation of a DssMap is now stored in a set
-*        of scalar values, rather than a FitsChan.
-*     22-DEC-1997 (DSB):
-*        Bug fixed in MapMerge which caused a core dump when a
-*        DssMap/WinMap combination is succesfully simplified.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitDssMapVtab
-*        method.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS DssMap
-
-/* Macro which returns the nearest integer to a given floating point 
-   value. */
-#define NINT(x) (int)((x)+(((x)>0.0)?0.5:-0.5))
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "memory.h"              /* Memory allocation facilities */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "fitschan.h"            /* Manipulation of FITS header cards */
-#include "wcsmap.h"              /* Degrees/radians conversion factors */
-#include "winmap.h"              /* Shift and scale mappings */
-#include "dssmap.h"              /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(DssMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(DssMap,Class_Init)
-#define class_vtab astGLOBAL(DssMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstDssMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstFitsChan *DssFits( AstDssMap *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int platepix( double, double, struct WorldCoor *, double *, double * );
-static int platepos( double, double, struct WorldCoor *, double *, double * );
-static struct WorldCoor *BuildWcs( AstFitsChan *, const char *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two DssMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     DssMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two DssMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a DssMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the DssMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstDssMap *that;        
-   AstDssMap *this;        
-   int i;           
-   int nin;
-   int nout;
-   int result;
-   struct WorldCoor *this_wcs;
-   struct WorldCoor *that_wcs;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two DssMap structures. */
-   this = (AstDssMap *) this_object;
-   that = (AstDssMap *) that_object;
-
-/* Check the second object is a DssMap. We know the first is a
-   DssMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsADssMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two DssMaps differ, it may still be possible 
-   for them to be equivalent. First compare the DssMaps if their Invert 
-   flags are the same. In this case all the attributes of the two DssMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-            this_wcs = ( struct WorldCoor *) this->wcs;
-            that_wcs = ( struct WorldCoor *) that->wcs;
-
-            if( this_wcs->x_pixel_offset == that_wcs->x_pixel_offset &&
-                this_wcs->y_pixel_offset == that_wcs->y_pixel_offset &&
-                this_wcs->ppo_coeff[2] == that_wcs->ppo_coeff[2] &&
-                this_wcs->ppo_coeff[5] == that_wcs->ppo_coeff[5] &&
-                this_wcs->x_pixel_size == that_wcs->x_pixel_size &&
-                this_wcs->y_pixel_size == that_wcs->y_pixel_size &&
-                this_wcs->plate_dec == that_wcs->plate_dec &&
-                this_wcs->plate_ra == that_wcs->plate_ra ) {
-
-                result = 1;
-                for( i = 0; i < 13; i++ ) {
-                   if( this_wcs->amd_x_coeff[i] != that_wcs->amd_x_coeff[i] ||
-                       this_wcs->amd_y_coeff[i] != that_wcs->amd_y_coeff[i] ) {
-                      result = 0;
-                      break;
-                   }
-                } 
-
-             }
-
-/* If the Invert flags for the two DssMaps differ, the attributes of the two 
-   DssMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a DssMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     DssMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied DssMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the DssMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstDssMap *this;         /* Pointer to DssMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the DssMap structure. */
-   this = (AstDssMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astTSizeOf( this->wcs );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-
-static struct WorldCoor *BuildWcs( AstFitsChan *fits, const char *method,
-                                   const char *class, int *status ) {
-/*
-*  Name:
-*     BuildWcs
-
-*  Purpose:
-*     Copy DSS plate fit information from a FitsChan to a SAOimage
-*     WorldCoor structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     struct WorldCoor *BuildWcs( AstFitsChan *fits, const char *method,
-*                                 const char *class )
-
-*  Class Membership:
-*     DssMap member function.
-
-*  Description:
-*     This creates a WorldCoor structure and copies the required data
-*     from the supplied FitsChan into the new WorldCoor structure. Note,
-*     only those components of the WorldCoor structure which are needed to
-*     transform between pixel and sky coordinates are initialised in the
-*     returned structure.
-
-*  Parameters:
-*     fits
-*        Pointer to the FitsChan containing the FITS header describing
-*        the DSS plate fit.
-*     method
-*        The calling method (for error messages).
-*     class 
-*        The object class (for error messages).
-
-*  Returned Value:
-*     A pointer to the new WorldCoor structure. This should be freed
-*     using astFree when no longer needed.
-
-*  Notes:
-*     -  A NULL pointer is returned if an error has already occurred, or
-*     if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   char name_buff[ 10 ];          /* Buffer for keyword name */
-   char *name;                    /* Pointer to jeyword name string */
-   char *ckeyval;                 /* Pointer to string keyword value */
-   struct WorldCoor *ret;         /* Pointer to the returned structure */
-   double rah,ram,ras;            /* Centre RA hours, minutes and seconds */
-   double dsign;                  /* Sign of centre dec */
-   double decd,decm,decs;         /* Centre Dec degrees, minutes, seconds */
-   double dec_deg;                /* Centre Dec in degrees */
-   double ra_hours;               /* Centre RA in hours */
-   int i;                         /* Coefficient index */
-
-/* Check the local error status. */
-   if ( !astOK ) return NULL;
-
-/* Get memory to hold the returned structure. */
-   ret = (struct WorldCoor *) astMalloc( sizeof( struct WorldCoor ) );
-
-/* Check the memory can be used. */
-   if( astOK ){
-
-/* The following code is based on the "wcsinit" function in SAOimage file 
-   wcs.c. Note, only the values needed in the platepos and platepix
-   functions are set up. The FITS keywords are accessed in the order in
-   which they are usually stored in a FITS file. This will cut down the
-   time spent searching for keywords. Report an error if any required
-   keyword is not found. */
- 
-/* Plate center RA */
-      rah = 0.0;
-      ram = 0.0;
-      ras = 0.0;
-
-      name = "PLTRAH";
-      if( !astGetFitsF( fits, name, &rah ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                   "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      name = "PLTRAM";
-      if( !astGetFitsF( fits, name, &ram ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      name = "PLTRAS";
-      if( !astGetFitsF( fits, name, &ras ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      ra_hours = rah + (ram / (double)60.0) + (ras / (double)3600.0);
-      ret->plate_ra = AST__DD2R*15.0*ra_hours;
-
-
-/* Plate center Dec */
-      name = "PLTDECSN";
-      if( !astGetFitsS( fits, name, &ckeyval ) && astOK ){
-         dsign = 1.0;
-
-      } else {
-         if( *ckeyval == '-' ){
-            dsign = -1.0;
-         } else {
-            dsign = 1.0;
-         }
-
-      }
-
-      decd = 0.0;
-      decm = 0.0;
-      decs = 0.0;
-
-      name = "PLTDECD";
-      if( !astGetFitsF( fits, name, &decd ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      name = "PLTDECM";
-      if( !astGetFitsF( fits, name, &decm ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      name = "PLTDECS";
-      if( !astGetFitsF( fits, name, &decs ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      dec_deg = dsign * (decd+(decm/(double)60.0)+(decs/(double)3600.0));
-      ret->plate_dec = AST__DD2R*dec_deg;
-
-/* Plate Scale arcsec per mm  */
-      name = "PLTSCALE";
-      if( !astGetFitsF( fits, name, &ret->plate_scale ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-/* X and Y corners (in pixels) */
-      name = "CNPIX1";
-      if( !astGetFitsF( fits, name, &ret->x_pixel_offset ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      name = "CNPIX2";
-      if( !astGetFitsF( fits, name, &ret->y_pixel_offset ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-/* X and Y pixel sizes (microns). */
-      name = "XPIXELSZ";
-      if( !astGetFitsF( fits, name, &ret->x_pixel_size ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-      name = "YPIXELSZ";
-      if( !astGetFitsF( fits, name, &ret->y_pixel_size ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): No value has been supplied for the "
-                  "FITS keyword '%s'.", status, method, class, name );
-      }
-
-/* Orientation Coefficients. Only report an error if PPO3 or PPO6 are
-   missing (these are the only two which are actually used). Assume a
-   value of zero for any of the others which are missing. */
-      name = name_buff;
-      for ( i = 0; i < 6; i++ ) {
-         sprintf( name_buff, "PPO%d", i + 1 );
-         if( !astGetFitsF( fits, name, &ret->ppo_coeff[i] ) ) {
-            ret->ppo_coeff[i] = 0.0;
-            if( ( i == 2 || i == 5 ) && astOK ) {
-               astError( AST__BDFTS, "%s(%s): No value has been supplied "
-                         "for the FITS keyword '%s'.", status, method, class, 
-                         name );
-               break;
-            }
-         }
-      }
-
-/* Plate solution x and y coefficients. Report an error if any of
-   coefficients 1 to 14 are missing. Assume a value of zero for any
-   others which are missing.  */
-      name = name_buff;
-      for( i = 0; i < 19; i++ ){ 
-         sprintf( name_buff, "AMDX%d", i + 1 );
-         if( !astGetFitsF( fits, name, &ret->amd_x_coeff[i] ) ) {
-            ret->amd_x_coeff[i] = 0.0;
-            if( i < 13 && astOK ){
-               astError( AST__BDFTS, "%s(%s): No value has been supplied "
-                         "for the FITS keyword '%s'.", status, method, class, name );
-               break;
-            }
-         }
-      }
-
-      for( i = 0; i < 19; i++ ){ 
-         sprintf( name_buff, "AMDY%d", i + 1 );
-         if( !astGetFitsF( fits, name, &ret->amd_y_coeff[i] ) ){
-            ret->amd_y_coeff[i] = 0.0;
-            if( i < 13 && astOK ){
-               astError( AST__BDFTS, "%s(%s): No value has been supplied "
-                         "for the FITS keyword '%s'.", status, method, class, name );
-               break;
-            }
-         }
-      }
-
-/* If anything went wrong, free the returned structure. */
-      if( !astOK ) ret = (struct WorldCoor *) astFree( (void *) ret );
-   }
-
-/* Return the pointer. */
-   return ret;
-}
-
-static AstFitsChan *DssFits( AstDssMap *this, int *status ) {
-/*
-*+
-*  Name:
-*     astDssFits
-
-*  Purpose:
-*     Return a pointer to a FitsChan describing a DssMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     AstFitsChan *DssFits( AstDssMap *this )
-
-*  Class Membership:
-*     DssMap method.
-
-*  Description:
-*     This function returns a pointer to a DSS-encoded FitsChan containing 
-*     cards generated from the information stored with the DssMap. The 
-*     keywords contained in the FitsChan are those which would ne needed to
-*     re-create the DssMap (see astDSSMap).
-
-*  Parameters:
-*     this
-*        Pointer to the DssMap.
-
-*  Returned Value:
-*     astDssFits()
-*        A pointer to the FitsChan.
-
-*  Notes:
-*     - The returned pointer should be annuled using astAnnul when no longer 
-*     needed.
-*     - A value of NULL will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFitsChan *ret;              /* Pointer to the returned FitsChan  */
-   char *comm;                    /* Pointer to keyword comment string */
-   char *name;                    /* Pointer to keyword name string */
-   char name_buff[ 10 ];          /* Buffer for keyword name */
-   double dec;                    /* Centre Dec in degrees */
-   double decd,decm,decs;         /* Centre Dec degrees, minutes, seconds */
-   double ra;                     /* Centre RA in hours */
-   double rah,ram,ras;            /* Centre RA hours, minutes and seconds */
-   int i;                         /* Coefficient index */
-   struct WorldCoor *wcs;         /* WCS information from the DssMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Store a pointer to the WCS information stored in the DSSMap. */
-   wcs = (struct WorldCoor *) this->wcs,
-
-/* Create a new empty FitsChan, using DSS encoding. */
-   ret = astFitsChan( NULL, NULL, "Encoding=DSS", status );
-
-/* Create the keyword values and stored them in the returned FitsChan... */
-
-/* Plate centre RA. */
-   ra = wcs->plate_ra/( AST__DD2R*15.0 );
-   ra = modf( ra, &rah );
-   ra = modf( 60.0*ra, &ram );
-   ras = 60.0*ra;
-
-   astSetFitsI( ret, "PLTRAH", NINT( rah ), "Plate centre RA", 0 );
-   astSetFitsI( ret, "PLTRAM", NINT( ram ), " ", 0 );
-   astSetFitsF( ret, "PLTRAS", ras, " ", 0 );
-
-/* Plate centre DEC. */
-   dec = wcs->plate_dec/AST__DD2R;
-   if( dec < 0.0 ) {
-      dec = -dec;
-      astSetFitsS( ret, "PLTDECSN", "-", "Plate centre DEC", 0 );
-   } else {
-      astSetFitsS( ret, "PLTDECSN", "+", "Plate centre DEC", 0 );
-   }
-
-   dec = modf( dec, &decd );
-   dec = modf( 60.0*dec, &decm );
-   decs = 60.0*dec;
-
-   astSetFitsI( ret, "PLTDECD", NINT( decd ), " ", 0 );
-   astSetFitsI( ret, "PLTDECM", NINT( decm ), " ", 0 );
-   astSetFitsF( ret, "PLTDECS", decs, " ", 0 );
-
-/* Plate Scale arcsec per mm  */
-   astSetFitsF( ret, "PLTSCALE", wcs->plate_scale, "Plate Scale arcsec per mm",
-                0 );
-
-/* X and Y corners (in pixels) */
-   astSetFitsI( ret, "CNPIX1", NINT( wcs->x_pixel_offset ), 
-                "X corner  (pixels)", 0 );
-   astSetFitsI( ret, "CNPIX2", NINT( wcs->y_pixel_offset ), 
-                "Y corner", 0 );
-
-/* X and Y pixel sizes (microns). */
-   astSetFitsF( ret, "XPIXELSZ", wcs->x_pixel_size, 
-                "X pixel size (microns)", 0 );
-   astSetFitsF( ret, "YPIXELSZ", wcs->y_pixel_size, 
-                "Y pixel size (microns)", 0 );
-
-/* Orientation Coefficients. */
-   name = name_buff;
-   comm = "Orientation Coefficients";
-   for ( i = 0; i < 6; i++ ) {
-      sprintf( name_buff, "PPO%d", i + 1 );
-      astSetFitsF( ret, name, wcs->ppo_coeff[i], comm, 0 );
-      comm = " ";
-   }
-
-/* Plate solution x and y coefficients. */
-   comm = "Plate solution x coefficients";
-   for( i = 0; i < 19; i++ ){ 
-      sprintf( name_buff, "AMDX%d", i + 1 );
-      astSetFitsF( ret, name, wcs->amd_x_coeff[i], comm, 0 );
-      comm = " ";
-   }
-
-   comm = "Plate solution y coefficients";
-   for( i = 0; i < 19; i++ ){ 
-      sprintf( name_buff, "AMDY%d", i + 1 );
-      astSetFitsF( ret, name, wcs->amd_y_coeff[i], comm, 0 );
-      comm = " ";
-   }
-
-/* Return a pointer to the FitsChan. */   
-   return ret;
-}
-
-void astInitDssMapVtab_(  AstDssMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitDssMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a DssMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     void astInitDssMapVtab( AstDssMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     DssMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the DssMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsADssMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->DssFits = DssFits;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   object = (AstObjectVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge; 
-
-/* Declare the class dump, copy and delete function. */
-   astSetDump( object, Dump, "DssMap", "DSS plate fit mapping" );
-   astSetCopy( object, Copy );
-   astSetDelete( object, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a DssMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     DssMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated DssMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated DssMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated DssMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the DssMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        DssMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated DssMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstDssMap *dm;        /* Pointer to supplied DssMap */
-   AstDssMap *dmnew;     /* Pointer to replacement DssMap */
-   AstFitsChan *fits;    /* FITS headers for replacement DssMap */
-   AstFitsChan *fits_dss;/* FITS headers for supplied DssMap */
-   AstWinMap *wm;        /* Pointer to the adjacent WinMap */
-   double *a;            /* Pointer to shift terms */
-   double *b;            /* Pointer to scale terms */
-   double cnpix1;        /* X pixel origin */
-   double cnpix2;        /* Y pixel origin */
-   double xpixelsz;      /* X pixel size */
-   double ypixelsz;      /* Y pixel size */
-   int i;                /* Loop counter */
-   int ok;               /* All FITS keywords found? */
-   int old_winv;         /* original Invert value for supplied WinMap */
-   int result;           /* Result value to return */
-   int wmi;              /* Index of adjacent WinMap in map list */
-   struct WorldCoor *wcs;/* Pointer to SAOimage wcs structure */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* The only simplification easily possible is if a WinMap maps the pixel
-   coordinates prior to a DssMap. If the DssMap has not been inverted, the 
-   WinMap must be applied before the DssMap, otherwise the WinMap must be
-   applied after the DssMap. */
-   if( series ){
-
-      if( !( *invert_list )[ where ] ){
-         wmi = where - 1;
-      } else {
-         wmi = where + 1;
-      }
-
-      if( wmi >= 0 && wmi < *nmap ){
-         if( !strcmp( astGetClass( ( *map_list )[ wmi ] ), "WinMap" ) ){
-
-/* Temporarily set the Invert attribute of the WinMap to the supplied value. */
-            wm = (AstWinMap *) ( *map_list )[ wmi ];
-            old_winv = astGetInvert( wm );
-            astSetInvert( wm, ( *invert_list )[ wmi ] );
-
-/* Get a copy of the scale and shift terms from the WinMap. */
-            astWinTerms( wm, &a, &b );   
-
-/* Check that the scale and shift terms are usable. */
-            if( astOK &&
-                a[ 0 ] != AST__BAD && b[ 0 ] != AST__BAD && b[ 0 ] != 0.0 &&
-                a[ 1 ] != AST__BAD && b[ 1 ] != AST__BAD && b[ 1 ] != 0.0 ){
-
-/* Get the values of the keywords which define the origin and scales of
-   the DssMap pixel coordinate system. */
-               dm = (AstDssMap *) ( *map_list )[ where ];
-               wcs = (struct WorldCoor *) ( dm->wcs );
-
-               cnpix1 = wcs->x_pixel_offset;
-               cnpix2 = wcs->y_pixel_offset;
-               xpixelsz = wcs->x_pixel_size;
-               ypixelsz = wcs->y_pixel_size;
-
-/* Calculate new values which take into account the WinMap. */
-               if( wmi == where - 1 ){
-                  xpixelsz *= b[ 0 ];
-                  ypixelsz *= b[ 1 ];
-                  cnpix1 = 0.5 + ( cnpix1 + a[ 0 ] - 0.5 )/b[ 0 ];
-                  cnpix2 = 0.5 + ( cnpix2 + a[ 1 ] - 0.5 )/b[ 1 ];
-   
-               } else {
-                  xpixelsz /= b[ 0 ];
-                  ypixelsz /= b[ 1 ];
-                  cnpix1 = b[ 0 ]*( cnpix1 - 0.5 ) - a[ 0 ] + 0.5;
-                  cnpix2 = b[ 1 ]*( cnpix2 - 0.5 ) - a[ 1 ] + 0.5;
-               }
-
-/* The CNPIX1 and CNPIX2 keywords are integer keywords. Therefore, we can
-   only do the simplification if the new values are integer to a good
-   approximation. We use one hundredth of a pixel. */
-               if( fabs( cnpix1 - NINT( cnpix1 ) ) < 0.01 &&
-                   fabs( cnpix2 - NINT( cnpix2 ) ) < 0.01 ){
-
-/* Get a copy of the FitsChan holding the header cards which define the
-   DssMap. */
-                  fits_dss = astDssFits( dm );
-                  fits = astCopy( fits_dss );
-                  fits_dss = astAnnul( fits_dss );
-
-/* Update the value of each of the changed keywords. */
-                  ok = 1;
-
-                  astClearCard( fits );
-                  if( astFindFits( fits, "CNPIX1", NULL, 0 ) ){
-                     astSetFitsI( fits, "CNPIX1", NINT( cnpix1 ), NULL, 1 );
-                  } else {
-                     ok = 0;
-                  }                  
-
-                  astClearCard( fits );
-                  if( astFindFits( fits, "CNPIX2", NULL, 0 ) ){
-                     astSetFitsI( fits, "CNPIX2", NINT( cnpix2 ), NULL, 1 );
-                  } else {
-                     ok = 0;
-                  }                  
-
-                  astClearCard( fits );
-                  if( astFindFits( fits, "XPIXELSZ", NULL, 0 ) ){
-                     astSetFitsF( fits, "XPIXELSZ", xpixelsz, NULL, 1 );
-                  } else {
-                     ok = 0;
-                  }                  
-
-                  astClearCard( fits );
-                  if( astFindFits( fits, "YPIXELSZ", NULL, 0 ) ){
-                     astSetFitsF( fits, "YPIXELSZ", ypixelsz, NULL, 1 );
-                  } else {
-                     ok = 0;
-                  }                  
-
-/* If all the keywords were updated succesfully, create the new DssMap
-   based on the modified FITS header cards. */
-                  if( ok ){
-		     dmnew = astDssMap( fits, "", status );
-
-/* Anull the DssMap pointer in the list and replace it with the new one.
-   The invert flag is left unchanged. */
-                     dm = astAnnul( dm );
-                     ( *map_list )[ where ] = (AstMapping *) dmnew;
-
-/* Annul the WinMap pointer in the list, and shuffle any remaining
-   Mappings down to fill the gap. */            
-                     wm = astAnnul( wm );
-                     for ( i = wmi + 1; i < *nmap; i++ ) {
-                        ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-                        ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-                     }
-
-/* Clear the vacated element at the end. */
-                     ( *map_list )[ *nmap - 1 ] = NULL;
-                     ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-                     ( *nmap )--;
-                     result = MIN( wmi, where );
-
-                  }
-
-/* Annul the FitsChan holding the modified header cards. */
-                  fits = astAnnul( fits );
-               }
-            }
-
-/* Free the arrays holding scale and shift terms from the WinMap. */
-            a = (double *) astFree( (void *) a );
-            b = (double *) astFree( (void *) b );
-
-/* Reinstate the original setting of the Invert attribute of the WinMap (if
-   it still exists). */
-            if( wm ) astSetInvert( wm, old_winv );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a DssMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     DssMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a DssMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required DSS
-*     plate fit.
-
-*  Parameters:
-*     this
-*        Pointer to the DssMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     be 2.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstDssMap *map;               /* Pointer to DssMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *aa;                   /* Pointer to next longitude value */
-   double *bb;                   /* Pointer to next latitude value */
-   double *xx;                   /* Pointer to next pixel X value */
-   double *yy;                   /* Pointer to next pixel Y value */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the DssMap. */
-   map = (AstDssMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain 
-   pointers for accessing the input and output coordinate values. */
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* First deal with forward transformations. */
-      if( forward ){
-
-/* Store pointers to the next value on each axis. */
-         xx = ptr_in[ 0 ];
-         yy = ptr_in[ 1 ];
-         aa = ptr_out[ 0 ];
-         bb = ptr_out[ 1 ];
-
-/* Loop to apply the plate fit to all the points, checking for (and 
-   propagating) bad values in the process. */
-         for ( point = 0; point < npoint; point++ ) {
-            if( *xx != AST__BAD && *yy != AST__BAD ){
-
-/* If the pixel position is transformed succesfully, convert the returned
-   RA/DEC from degrees to radians. Otherwise, store bad values. NB,
-   platepos returns zero for success. */
-               if( !platepos( *xx, *yy, (struct WorldCoor *) map->wcs,
-                              aa, bb ) ){
-                  (*aa) *= AST__DD2R;
-                  (*bb) *= AST__DD2R;
-
-               } else {
-                  *aa = AST__BAD;
-                  *bb = AST__BAD;
-               }
-
-            } else {
-               *aa = AST__BAD;
-               *bb = AST__BAD;
-            }
-
-/* Move on to the next point. */
-            xx++;
-            yy++;
-            aa++;
-            bb++;
-         }
-
-/* Now deal with inverse transformations in the same way. */
-      } else {
-         aa = ptr_in[ 0 ];
-         bb = ptr_in[ 1 ];
-         xx = ptr_out[ 0 ];
-         yy = ptr_out[ 1 ];
-
-         for ( point = 0; point < npoint; point++ ) {
-            if( *aa != AST__BAD && *bb != AST__BAD ){
-
-               if( platepix( AST__DR2D*(*aa), AST__DR2D*(*bb), 
-                             (struct WorldCoor *) map->wcs, xx, yy ) ){
-                  *xx = AST__BAD;
-                  *yy = AST__BAD;
-               }
-
-            } else {
-               *xx = AST__BAD;
-               *yy = AST__BAD;
-            }
-
-            xx++;
-            yy++;
-            aa++;
-            bb++;
-         }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for DssMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for DssMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-
-/* Local Variables: */
-   AstDssMap *in;                /* Pointer to input DssMap */
-   AstDssMap *out;               /* Pointer to output DssMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output DssMaps. */
-   in = (AstDssMap *) objin;
-   out = (AstDssMap *) objout;
-
-/* Store a copy of the input SAOIMAGE WorldCoor structure in the output. */
-   out->wcs = astStore( NULL, in->wcs, sizeof( struct WorldCoor ) );
-
-   return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for DssMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for DssMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstDssMap *this;            /* Pointer to DssMap */
-
-/* Obtain a pointer to the DssMap structure. */
-   this = (AstDssMap *) obj;
-
-/* Free the SAOIMAGE WorldCoor structure. */
-   this->wcs = astFree( this->wcs );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for DssMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the DssMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the DssMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-   AstDssMap *this;          /* Pointer to the DssMap structure */
-   struct WorldCoor *wcs;    /* Pointer to SAOimage wcs structure */
-   char name_buff[ 11 ];     /* Buffer for keyword string */
-   int i;                    /* Coefficient index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the DssMap structure. */
-   this = (AstDssMap *) this_object;
-
-/* Get a pointer to the WorldCoor structure holding the description of the
-   DssMap. */
-   wcs = (struct WorldCoor *) ( this->wcs );
-
-/* Write out values representing the contents of the WorldCoor structure.
-   Only the components which are required to re-create the DssMap are
-   written out. */
-   astWriteDouble( channel, "PltRA", 1, 1, wcs->plate_ra, "Plate centre RA (radians)" );
-   astWriteDouble( channel, "PltDec", 1, 1, wcs->plate_dec, "Plate centre Dec (radians)" );
-   astWriteDouble( channel, "PltScl", 1, 1, wcs->plate_scale, "Plate scale (arcsec/mm)" );
-   astWriteDouble( channel, "CNPix1", 1, 1, wcs->x_pixel_offset, "X Pixel offset (pixels)" );
-   astWriteDouble( channel, "CNPix2", 1, 1, wcs->y_pixel_offset, "Y Pixel offset (pixels)" );
-   astWriteDouble( channel, "XPixSz", 1, 1, wcs->x_pixel_size, "X Pixel size (microns)" );
-   astWriteDouble( channel, "YPixSz", 1, 1, wcs->y_pixel_size, "Y Pixel size (microns)" );
-
-   for( i = 0; i < 6; i++ ) {
-      sprintf( name_buff, "PPO%d", i + 1 );
-      astWriteDouble( channel, name_buff, 1, 1, wcs->ppo_coeff[i], 
-                      "Orientation coefficients" );
-   }
-
-   for( i = 0; i < 19; i++ ) {
-      sprintf( name_buff, "AMDX%d", i + 1 );
-      astWriteDouble( channel, name_buff, 1, 1, wcs->amd_x_coeff[i], 
-                      "Plate solution X coefficients" );
-   }
-
-   for( i = 0; i < 19; i++ ) {
-      sprintf( name_buff, "AMDY%d", i + 1 );
-      astWriteDouble( channel, name_buff, 1, 1, wcs->amd_y_coeff[i], 
-                      "Plate solution Y coefficients" );
-   }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsADssMap and astCheckDssMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(DssMap,Mapping)
-astMAKE_CHECK(DssMap)
-
-AstDssMap *astDssMap_( void *fits_void, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astDssMap
-
-*  Purpose:
-*     Create a DssMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     AstDssMap *astDssMap( AstFitsChan *fits, const char *options, int *status, ... )
-
-*  Class Membership:
-*     DssMap constructor.
-
-*  Description:
-*     This function creates a new DssMap and optionally initialises its
-*     attributes.
-*
-*     A DssMap is a Mapping which uses a Digitised Sky Survey plate fit to
-*     transform a set of points from pixel coordinates to equatorial
-*     coordinates (i.e. Right Ascension and Declination).
-
-*  Parameters:
-*     fits
-*        A pointer to a FitsChan holding a set of FITS header cards
-*        describing the plate fit to be used. The FitsChan may contain
-*        other header cards which will be ignored, and it is unchanged on
-*        exit. The required information is copied from the FitsChan, and
-*        so the supplied FitsChan may subsequently be changed or deleted 
-*        without changing the DssMap.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new DssMap. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     astDssMap()
-*        A pointer to the new DssMap.
-
-*  Attributes:
-*     The DssMap class has no additional attributes over and above those 
-*     common to all Mappings.
-
-*  Notes:
-*     - The supplied FitsChan must contain values for the following FITS
-*     keywords: CNPIX1, CNPIX2, PPO3, PPO6, XPIXELSZ, YPIXELSZ, PLTRAH,
-*     PLTRAM, PLTRAS, PLTDECD, PLTDECM, PLTDECS, PLTDECSN, PLTSCALE,
-*     AMDX1, AMDX2, ..., AMDX13, AMDY1, AMDY2, ..., AMDY13.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFitsChan *fits;            /* Pointer to supplied FitsChan */
-   AstDssMap *new;               /* Pointer to new DssMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   new = NULL;
-   if ( !astOK ) return new;
-
-/* Obtain and validate a pointer to the FitsChan structure provided. */
-   fits = astCheckFitsChan( fits_void );
-   if ( astOK ) {
-
-/* Initialise the DssMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitDssMap( NULL, sizeof( AstDssMap ), !class_init, &class_vtab,
-                           "DssMap", fits );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new DssMap's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new DssMap. */
-   return new;
-}
-
-AstDssMap *astInitDssMap_( void *mem, size_t size, int init,
-                           AstDssMapVtab *vtab, const char *name,
-                           AstFitsChan *fits, int *status ) {
-/*
-*+
-*  Name:
-*     astInitDssMap
-
-*  Purpose:
-*     Initialise a DssMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     AstDssMap *astInitDssMap( void *mem, size_t size, int init,
-*                               AstDssMapVtab *vtab, const char *name,
-*                               AstFitsChan *fits )
-
-*  Class Membership:
-*     DssMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new DssMap object. It allocates memory (if necessary) to accommodate
-*     the DssMap plus any additional data associated with the derived class.
-*     It then initialises a DssMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a DssMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the DssMap is to be initialised.
-*        This must be of sufficient size to accommodate the DssMap data
-*        (sizeof(DssMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the DssMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the DssMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the DssMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new DssMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     fits
-*        Pointer to a FitsChan containing the DSS FITS Header.
-
-*  Returned Value:
-*     A pointer to the new DssMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstDssMap *new;              /* Pointer to new DssMap */
-   struct WorldCoor *wcs;       /* Pointer to SAOIMAGE wcs structure */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitDssMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Create a structure holding the information required by the SAOIMAGE
-   "platepos" function. The required values are extracted from the
-   supplied FitsChan. An error is reported and NULL returned if any required 
-   keywords are missing or unusable. */
-   if ( ( wcs = BuildWcs( fits, "astInitDssMap", name, status ) ) ) {
-
-/* Initialise a 2-D Mapping structure (the parent class) as the first component
-   within the DssMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-      new = (AstDssMap *) astInitMapping( mem, size, 0,
-                                          (AstMappingVtab *) vtab, name,
-                                          2, 2, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the DssMap data. */
-/* --------------------------- */
-/* Store a copy of the SAOIMAGE wcs structure. */
-         new->wcs = astStore( NULL, (void *) wcs, sizeof( struct WorldCoor ) );
-
-/* If an error occurred, clean up by deleting the new DssMap. */
-         if ( !astOK ) new = astDelete( new );
-      }
-
-/* Free the SAOIMAGE wcs structure. */
-      wcs = (struct WorldCoor *) astFree( (void *) wcs );      
-
-   }
-
-/* Return a pointer to the new DssMap. */
-   return new;
-}
-
-AstDssMap *astLoadDssMap_( void *mem, size_t size,
-                             AstDssMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadDssMap
-
-*  Purpose:
-*     Load a DssMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "dssmap.h"
-*     AstDssMap *astLoadDssMap( void *mem, size_t size,
-*                                 AstDssMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     DssMap loader.
-
-*  Description:
-*     This function is provided to load a new DssMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     DssMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a DssMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the DssMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        DssMap data (sizeof(DssMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the DssMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the DssMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstDssMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new DssMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the DssMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "DssMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new DssMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstDssMap *new;              /* Pointer to the new DssMap */
-   char name_buff[ 11 ];        /* Buffer for item name */
-   int i;                       /* Coefficient index */
-   struct WorldCoor *wcs;       /* Pointer to Wcs information */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this DssMap. In this case the
-   DssMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstDssMap );
-      vtab = &class_vtab;
-      name = "DssMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitDssMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built DssMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "DssMap" );
-
-/* Allocate memory to hold the WorldCoor structure which holds the wcs
-   information in a form usable by the SAOimage projection functions. */
-      new->wcs = astMalloc( sizeof(struct WorldCoor) );
-      if( astOK ) {
-
-/* Get a pointer to the WorldCoor structure holding the description of the
-   DssMap. */
-         wcs = (struct WorldCoor *) ( new->wcs );
-
-/* Read the values representing the contents of the WorldCoor structure.
-   Only the components which are required to re-create the DssMap are
-   read. */
-         wcs->plate_ra = astReadDouble( channel, "pltra", AST__BAD );
-         if( wcs->plate_ra == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'PltRA' object (Plate "
-                      "centre RA) missing from input." , status);
-         }
-        
-         wcs->plate_dec = astReadDouble( channel, "pltdec", AST__BAD );
-         if( wcs->plate_dec == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'PltDec' object (Plate "
-                      "centre Dec) missing from input." , status);
-         }
-        
-         wcs->plate_scale = astReadDouble( channel, "pltscl", AST__BAD );
-         if( wcs->plate_scale == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'PltScl' object (Plate "
-                      "scale) missing from input." , status);
-         }
-        
-         wcs->x_pixel_offset = astReadDouble( channel, "cnpix1", AST__BAD );
-         if( wcs->x_pixel_offset == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'CNPix1' object (X pixel "
-                      "offset) missing from input." , status);
-         }
-        
-         wcs->y_pixel_offset = astReadDouble( channel, "cnpix2", AST__BAD );
-         if( wcs->y_pixel_offset == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'CNPix2' object (Y pixel "
-                      "offset) missing from input." , status);
-         }
-        
-         wcs->x_pixel_size = astReadDouble( channel, "xpixsz", AST__BAD );
-         if( wcs->x_pixel_size == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'XPixSz' object (X pixel "
-                      "size) missing from input." , status);
-         }
-        
-         wcs->y_pixel_size = astReadDouble( channel, "ypixsz", AST__BAD );
-         if( wcs->y_pixel_size == AST__BAD && astOK ){
-            astError( AST__RDERR, "astRead(DssMap): 'YPixSz' object (Y pixel "
-                      "size) missing from input." , status);
-         }
-        
-         for( i = 0; i < 6 && astOK; i++ ) {
-            sprintf( name_buff, "ppo%d", i + 1 );
-            wcs->ppo_coeff[i] = astReadDouble( channel, name_buff, AST__BAD );
-            if( wcs->ppo_coeff[i] == AST__BAD ){
-               if( i == 2 || i == 5 ) {
-                  if( astOK ) astError( AST__RDERR, "astRead(DssMap): 'PPO%d' "
-                                        "object (orientation coefficient %d) "
-                                        "missing from input.", status, i + 1, i + 1 );
-               } else {
-                  wcs->ppo_coeff[i] = 0.0;
-               }
-            }
-         }
-      
-         for( i = 0; i < 19 && astOK; i++ ) {
-            sprintf( name_buff, "amdx%d", i + 1 );
-            wcs->amd_x_coeff[i] = astReadDouble( channel, name_buff, AST__BAD );
-            if( wcs->amd_x_coeff[i] == AST__BAD ){
-               if( i < 13 ){
-                  if( astOK ) astError( AST__RDERR, "astRead(DssMap): 'AMDX%d' "
-                                        "object (plate solution X coefficient "
-                                        "%d) missing from input.", status, i + 1, i + 1 );
-               } else {
-                  wcs->amd_x_coeff[i] = 0.0;
-               }
-            }
-         }
-      
-         for( i = 0; i < 19 && astOK; i++ ) {
-            sprintf( name_buff, "amdy%d", i + 1 );
-            wcs->amd_y_coeff[i] = astReadDouble( channel, name_buff, AST__BAD );
-            if( wcs->amd_y_coeff[i] == AST__BAD ){
-               if( i < 13 ){
-                  if( astOK ) astError( AST__RDERR, "astRead(DssMap): 'AMDY%d' "
-                                        "object (plate solution Y coefficient "
-                                        "%d) missing from input.", status, i + 1, i + 1 );
-               } else {
-                  wcs->amd_y_coeff[i] = 0.0;
-               }
-            }
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new DssMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new DssMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-AstFitsChan *astDssFits_( AstDssMap *this, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,DssMap,DssFits))( this, status );
-}
-
-/* The code which follows in this file is covered by the following
-   statement of terms and conditions, which differ from the terms and
-   conditions which apply above.
-
-***************************************************************************
-*
-* Copyright:   1988 Smithsonian Astrophysical Observatory                 
-*              You may do anything you like with these files except remove
-*              this copyright.  The Smithsonian Astrophysical Observatory
-*              makes no representations about the suitability of this
-*              software for any purpose.  It is provided "as is" without
-*              express or implied warranty.
-*
-*****************************************************************************
-*/
-
-/* >>>>>>>>>>>>>>>>>>>>>>  platepos.c <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
-
-/* File saoimage/wcslib/platepos.c
- * February 25, 1996
- * By Doug Mink, Harvard-Smithsonian Center for Astrophysics
-
- * Module:	platepos.c (Plate solution WCS conversion
- * Purpose:	Compute WCS from Digital Sky Survey plate fit
- * Subroutine:	platepos() converts from pixel location to RA,Dec 
- * Subroutine:	platepix() converts from RA,Dec to pixel location   
-
-    These functions are based on the astrmcal.c portion of GETIMAGE by
-    J. Doggett and the documentation distributed with the Digital Sky Survey.
-
-    >>>>>>>   STARLINK VERSION <<<<<<<<
-
-*/
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-  Changed by R.F. Warren-Smith (Starlink) to make the function static. */
-
-static int
-platepos (xpix, ypix, wcs, xpos, ypos)
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
-
-/* Routine to determine accurate position for pixel coordinates */
-/* returns 0 if successful otherwise 1 = angle too large for projection; */
-/* based on amdpos() from getimage */
-
-/* Input: */
-double	xpix;		/* x pixel number  (RA or long without rotation) */
-double	ypix;		/* y pixel number  (dec or lat without rotation) */
-struct WorldCoor *wcs;	/* WCS parameter structure */
-
-/* Output: */
-double	*xpos;		/* Right ascension or longitude in degrees */
-double	*ypos;		/* Declination or latitude in degrees */
-
-{
-  double x, y, xmm, ymm, xmm2, ymm2, xmm3, ymm3, x2y2;
-  double xi, xir, eta, etar, raoff, ra, dec;
-  double cond2r = 1.745329252e-2;
-  double cons2r = 206264.8062470964;
-  double twopi = 6.28318530717959;
-  double ctan, ccos;
-
-/*  Ignore magnitude and color terms 
-  double mag = 0.0;
-  double color = 0.0; */
-
-/* Convert from image pixels to plate pixels */
-  x = xpix + wcs->x_pixel_offset - 1.0 + 0.5;
-  y = ypix + wcs->y_pixel_offset - 1.0 + 0.5;
-
-/* Convert from pixels to millimeters */
-  xmm = (wcs->ppo_coeff[2] - x * wcs->x_pixel_size) / 1000.0;
-  ymm = (y * wcs->y_pixel_size - wcs->ppo_coeff[5]) / 1000.0;
-  xmm2 = xmm * xmm;
-  ymm2 = ymm * ymm;
-  xmm3 = xmm * xmm2;
-  ymm3 = ymm * ymm2;
-  x2y2 = xmm2 + ymm2;
-
-/*  Compute coordinates from x,y and plate model */
-
-  xi =  wcs->amd_x_coeff[ 0]*xmm	+ wcs->amd_x_coeff[ 1]*ymm +
-	wcs->amd_x_coeff[ 2]		+ wcs->amd_x_coeff[ 3]*xmm2 +
-	wcs->amd_x_coeff[ 4]*xmm*ymm	+ wcs->amd_x_coeff[ 5]*ymm2 +
-	wcs->amd_x_coeff[ 6]*(x2y2)	+ wcs->amd_x_coeff[ 7]*xmm3 +
-	wcs->amd_x_coeff[ 8]*xmm2*ymm	+ wcs->amd_x_coeff[ 9]*xmm*ymm2 +
-	wcs->amd_x_coeff[10]*ymm3	+ wcs->amd_x_coeff[11]*xmm*(x2y2) +
-	wcs->amd_x_coeff[12]*xmm*x2y2*x2y2;
-
-/*  Ignore magnitude and color terms 
-	+ wcs->amd_x_coeff[13]*mag	+ wcs->amd_x_coeff[14]*mag*mag +
-	wcs->amd_x_coeff[15]*mag*mag*mag + wcs->amd_x_coeff[16]*mag*xmm +
-	wcs->amd_x_coeff[17]*mag*x2y2	+ wcs->amd_x_coeff[18]*mag*xmm*x2y2 +
-	wcs->amd_x_coeff[19]*color; */
-
-  eta =	wcs->amd_y_coeff[ 0]*ymm	+ wcs->amd_y_coeff[ 1]*xmm +
-	wcs->amd_y_coeff[ 2]		+ wcs->amd_y_coeff[ 3]*ymm2 +
-	wcs->amd_y_coeff[ 4]*xmm*ymm	+ wcs->amd_y_coeff[ 5]*xmm2 +
-	wcs->amd_y_coeff[ 6]*(x2y2)	+ wcs->amd_y_coeff[ 7]*ymm3 +
-	wcs->amd_y_coeff[ 8]*ymm2*xmm	+ wcs->amd_y_coeff[ 9]*ymm*xmm2 +
-	wcs->amd_y_coeff[10]*xmm3	+ wcs->amd_y_coeff[11]*ymm*(x2y2) +
-	wcs->amd_y_coeff[12]*ymm*x2y2*x2y2;
-
-/*  Ignore magnitude and color terms 
-	+ wcs->amd_y_coeff[13]*mag	+ wcs->amd_y_coeff[14]*mag*mag +
-	wcs->amd_y_coeff[15]*mag*mag*mag + wcs->amd_y_coeff[16]*mag*ymm +
-	wcs->amd_y_coeff[17]*mag*x2y2)	+ wcs->amd_y_coeff[18]*mag*ymm*x2y2 +
-	wcs->amd_y_coeff[19]*color; */
-
-/* Convert to radians */
-
-  xir = xi / cons2r;
-  etar = eta / cons2r;
-
-/* Convert to RA and Dec */
-
-  ctan = tan (wcs->plate_dec);
-  ccos = cos (wcs->plate_dec);
-  raoff = atan2 (xir / ccos, 1.0 - etar * ctan);
-  ra = raoff + wcs->plate_ra;
-  if (ra < 0.0) ra = ra + twopi;
-  *xpos = ra / cond2r;
-
-  dec = atan (cos (raoff) / ((1.0 - (etar * ctan)) / (etar + ctan)));
-  *ypos = dec / cond2r;
-  return 0;
-}
-
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-  Changed by R.F. Warren-Smith (Starlink) to make the function static. */
-
-static int
-platepix (xpos, ypos, wcs, xpix, ypix)
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
-
-/* Routine to determine pixel coordinates for sky position */
-/* returns 0 if successful otherwise 1 = angle too large for projection; */
-/* based on amdinv() from getimage */
-
-/* Input: */
-double	xpos;		/* Right ascension or longitude in degrees */
-double	ypos;		/* Declination or latitude in degrees */
-struct WorldCoor *wcs;	/* WCS parameter structure */
-
-/* Output: */
-double	*xpix;		/* x pixel number  (RA or long without rotation) */
-double	*ypix;		/* y pixel number  (dec or lat without rotation) */
-
-{
-  double div,xi,eta,x,y,xy,x2,y2,x2y,y2x,x3,y3,x4,y4,x2y2,cjunk,dx,dy;
-  double sypos,cypos,syplate,cyplate,sxdiff,cxdiff;
-  double f,fx,fy,g,gx,gy, xmm, ymm;
-  double conr2s = 206264.8062470964;
-  double tolerance = 0.0000005;
-  int    max_iterations = 50;
-  int    i;
-  double xr, yr; 	/* position in radians */
-  double cond2r = 1.745329252e-2;
-
-/* Convert RA and Dec in radians to standard coordinates on a plate */
-  xr = xpos * cond2r;
-  yr = ypos * cond2r;
-  sypos = sin (yr);
-  cypos = cos (yr);
-  syplate = sin (wcs->plate_dec);
-  cyplate = cos (wcs->plate_dec);
-  sxdiff = sin (xr - wcs->plate_ra);
-  cxdiff = cos (xr - wcs->plate_ra);
-  div = (sypos * syplate) + (cypos * cyplate * cxdiff);
-  xi = cypos * sxdiff * conr2s / div;
-  eta = ((sypos * cyplate) - (cypos * syplate * cxdiff)) * conr2s / div;
-
-/* Set initial value for x,y */
-  xmm = xi / wcs->plate_scale;
-  ymm = eta / wcs->plate_scale;
-
-/* Iterate by Newton's method */
-  for (i = 0; i < max_iterations; i++) {
-
-    /* X plate model */
-    xy = xmm * ymm;
-    x2 = xmm * xmm;
-    y2 = ymm * ymm;
-    x2y = x2 * ymm;
-    y2x = y2 * xmm;
-    x2y2 = x2 + y2;
-    cjunk = x2y2 * x2y2;
-    x3 = x2 * xmm;
-    y3 = y2 * ymm;
-    x4 = x2 * x2;
-    y4 = y2 * y2;
-    f = wcs->amd_x_coeff[0]*xmm      + wcs->amd_x_coeff[1]*ymm +
-        wcs->amd_x_coeff[2]          + wcs->amd_x_coeff[3]*x2 +
-        wcs->amd_x_coeff[4]*xy       + wcs->amd_x_coeff[5]*y2 +
-        wcs->amd_x_coeff[6]*x2y2     + wcs->amd_x_coeff[7]*x3 +
-        wcs->amd_x_coeff[8]*x2y      + wcs->amd_x_coeff[9]*y2x +
-        wcs->amd_x_coeff[10]*y3      + wcs->amd_x_coeff[11]*xmm*x2y2 +
-        wcs->amd_x_coeff[12]*xmm*cjunk;
-    /* magnitude and color terms ignored
-      + wcs->amd_x_coeff[13]*mag +
-        wcs->amd_x_coeff[14]*mag*mag   + wcs->amd_x_coeff[15]*mag*mag*mag +
-        wcs->amd_x_coeff[16]*mag*xmm   + wcs->amd_x_coeff[17]*mag*(x2+y2) +
-        wcs->amd_x_coeff[18]*mag*xmm*(x2+y2)  + wcs->amd_x_coeff[19]*color;
-    */
-
-    /*  Derivative of X model wrt x */
-    fx = wcs->amd_x_coeff[0]           + wcs->amd_x_coeff[3]*2.0*xmm +
-         wcs->amd_x_coeff[4]*ymm       + wcs->amd_x_coeff[6]*2.0*xmm +
-         wcs->amd_x_coeff[7]*3.0*x2    + wcs->amd_x_coeff[8]*2.0*xy +
-         wcs->amd_x_coeff[9]*y2        + wcs->amd_x_coeff[11]*(3.0*x2+y2) +
-         wcs->amd_x_coeff[12]*(5.0*x4 +6.0*x2*y2+y4);
-    /* magnitude and color terms ignored
-         wcs->amd_x_coeff[16]*mag      + wcs->amd_x_coeff[17]*mag*2.0*xmm +
-         wcs->amd_x_coeff[18]*mag*(3.0*x2+y2);
-    */
-
-    /* Derivative of X model wrt y */
-    fy = wcs->amd_x_coeff[1]           + wcs->amd_x_coeff[4]*xmm +
-         wcs->amd_x_coeff[5]*2.0*ymm   + wcs->amd_x_coeff[6]*2.0*ymm +
-         wcs->amd_x_coeff[8]*x2        + wcs->amd_x_coeff[9]*2.0*xy +
-         wcs->amd_x_coeff[10]*3.0*y2   + wcs->amd_x_coeff[11]*2.0*xy +
-         wcs->amd_x_coeff[12]*4.0*xy*x2y2;
-    /* magnitude and color terms ignored
-         wcs->amd_x_coeff[17]*mag*2.0*ymm +
-         wcs->amd_x_coeff[18]*mag*2.0*xy;
-    */
-
-    /* Y plate model */
-    g = wcs->amd_y_coeff[0]*ymm       + wcs->amd_y_coeff[1]*xmm +
-       wcs->amd_y_coeff[2]            + wcs->amd_y_coeff[3]*y2 +
-       wcs->amd_y_coeff[4]*xy         + wcs->amd_y_coeff[5]*x2 +
-       wcs->amd_y_coeff[6]*x2y2       + wcs->amd_y_coeff[7]*y3 +
-       wcs->amd_y_coeff[8]*y2x        + wcs->amd_y_coeff[9]*x2y +
-       wcs->amd_y_coeff[10]*x3        + wcs->amd_y_coeff[11]*ymm*x2y2 +
-       wcs->amd_y_coeff[12]*ymm*cjunk;
-    /* magnitude and color terms ignored
-       wcs->amd_y_coeff[13]*mag        + wcs->amd_y_coeff[14]*mag*mag +
-       wcs->amd_y_coeff[15]*mag*mag*mag + wcs->amd_y_coeff[16]*mag*ymm +
-       wcs->amd_y_coeff[17]*mag*x2y2 +
-       wcs->amd_y_coeff[18]*mag*ymm*x2y2 + wcs->amd_y_coeff[19]*color;
-    */
-
-    /* Derivative of Y model wrt x */
-    gx = wcs->amd_y_coeff[1]           + wcs->amd_y_coeff[4]*ymm +
-         wcs->amd_y_coeff[5]*2.0*xmm   + wcs->amd_y_coeff[6]*2.0*xmm +
-         wcs->amd_y_coeff[8]*y2       + wcs->amd_y_coeff[9]*2.0*xy +
-         wcs->amd_y_coeff[10]*3.0*x2  + wcs->amd_y_coeff[11]*2.0*xy +
-         wcs->amd_y_coeff[12]*4.0*xy*x2y2;
-    /* magnitude and color terms ignored
-         wcs->amd_y_coeff[17]*mag*2.0*xmm +
-         wcs->amd_y_coeff[18]*mag*ymm*2.0*xmm;
-    */
-
-    /* Derivative of Y model wrt y */
-    gy = wcs->amd_y_coeff[0]            + wcs->amd_y_coeff[3]*2.0*ymm +
-         wcs->amd_y_coeff[4]*xmm        + wcs->amd_y_coeff[6]*2.0*ymm +
-         wcs->amd_y_coeff[7]*3.0*y2     + wcs->amd_y_coeff[8]*2.0*xy +
-         wcs->amd_y_coeff[9]*x2         + wcs->amd_y_coeff[11]*(x2+3.0*y2) +
-         wcs->amd_y_coeff[12]*(5.0*y4 + 6.0*x2*y2 + x4);
-    /* magnitude and color terms ignored
-         wcs->amd_y_coeff[16]*mag       + wcs->amd_y_coeff[17]*mag*2.0*ymm +
-         wcs->amd_y_coeff[18]*mag*(x2+3.0*y2);
-    */
-
-    f = f - xi;
-    g = g - eta;
-    dx = ((-f * gy) + (g * fy)) / ((fx * gy) - (fy * gx));
-    dy = ((-g * fx) + (f * gx)) / ((fx * gy) - (fy * gx));
-    xmm = xmm + dx;
-    ymm = ymm + dy;
-    if ((fabs(dx) < tolerance) && (fabs(dy) < tolerance)) break;
-    }
-
-/* Convert mm from plate center to plate pixels */
-  x = (wcs->ppo_coeff[2] - xmm*1000.0) / wcs->x_pixel_size;
-  y = (wcs->ppo_coeff[5] + ymm*1000.0) / wcs->y_pixel_size;
-
-/* Convert from plate pixels to image pixels */
-  *xpix = x - wcs->x_pixel_offset + 1.0 - 0.5;
-  *ypix = y - wcs->y_pixel_offset + 1.0 - 0.5;
-
-/* If position is off of the image, return offscale code */
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-  Commented out by D.Berry (Starlink) in order to remove dependancy
-  on NAXIS1/NAXIS2 keywords >>>>>>>>
-
-  if (*xpix < 0.5 || *xpix > wcs->nxpix+0.5)
-    return -1;
-  if (*ypix < 0.5 || *ypix > wcs->nypix+0.5)
-    return -1;
-
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
-
-  return 0;
-}
-/* Mar  6 1995	Original version of this code
-   May  4 1995	Fix eta cross terms which were all in y
-   Jun 21 1995	Add inverse routine
-   Oct 17 1995	Fix inverse routine (degrees -> radians)
-   Nov  7 1995	Add half pixel to image coordinates to get astrometric
-                  plate coordinates
-   Feb 26 1996	Fix plate to image pixel conversion error
-   Feb 18 1997  Modified by D.S. Berry (Starlink) to avoid use of the image 
-                  dimensions stored in wcs->nxpix and wcs->nypix.
-   Sep  5 1997  Modified by R.F. Warren-Smith (Starlink) to make the
-                platepos and platepix functions static.
- */
-
-
-
-
diff --git a/ast-5.3-1/dssmap.h b/ast-5.3-1/dssmap.h
deleted file mode 100644
index 858238e..0000000
--- a/ast-5.3-1/dssmap.h
+++ /dev/null
@@ -1,401 +0,0 @@
-#if !defined( DSSMAP_INCLUDED ) /* Include this file only once */
-#define DSSMAP_INCLUDED
-/*
-*+
-*  Name:
-*     dssmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the DssMap class.
-
-*  Invocation:
-*     #include "dssmap.h"
-
-*  Description:
-*     This include file defines the interface to the DssMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The DssMap class implements Mappings which use a Digitised Sky
-*     Survey plate fit to transform between pixel coordinates and
-*     Equatorial coordinates.
-
-*  Inheritance:
-*     The DssMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astTransform
-*           Apply a DssMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        astDssFits
-*           Create a FitsChan holding a FITS description of the DSS plate fit.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsADssMap
-*           Test class membership.
-*        astDssMap
-*           Create a DssMap.
-*
-*     Protected:
-*        astCheckDssMap
-*           Validate class membership.
-*        astInitDssMap
-*           Initialise a DssMap.
-*        astInitDssMapVtab
-*           Initialise the virtual function table for the DssMap class.
-*        astLoadDssMap
-*           Load a DssMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstDssMap
-*           DssMap object type.
-*
-*     Protected:
-*        AstDssMapVtab
-*           DssMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-*     (except for code supplied by Doug Mink, as noted in this file)
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     18-FEB-1997 (DSB):
-*        Original version.
-*     30-JUN-1997 (DSB):
-*        All public functions made protected.
-*     4-NOV-1997 (DSB):
-*        Removed copy of supplied FitsChan from DssMap structure.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitDssMapVtab method.
-*     21-OCT-2004 (DSB):
-*        Removed wcstools prototypes which clash with the MS Windows
-*        runtime library.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#if defined(astCLASS)            /* Protected */
-
-/* The code within this #if...#endif block is covered by the following
-   statement of terms and conditions, which differ from the terms and
-   conditions which apply elsewhere in this file.
-
-***************************************************************************
-*
-* Copyright:   1988 Smithsonian Astrophysical Observatory                 
-*              You may do anything you like with these files except remove
-*              this copyright.  The Smithsonian Astrophysical Observatory
-*              makes no representations about the suitability of this
-*              software for any purpose.  It is provided "as is" without
-*              express or implied warranty.
-*
-*****************************************************************************
-*/
-
-/* >>>>>>>>>>>>>>>>>> SAOimage wcs.h header file <<<<<<<<<<<<<<<<<< */
-
-/* libwcs/wcs.h
-   November 1, 1996
-   By Doug Mink, Harvard-Smithsonian Center for Astrophysics */
-
-struct WorldCoor {
-  double	xref;		/* x reference coordinate value (deg) */
-  double	yref;		/* y reference coordinate value (deg) */
-  double	xrefpix;	/* x reference pixel */
-  double	yrefpix;	/* y reference pixel */
-  double	xinc;		/* x coordinate increment (deg) */
-  double	yinc;		/* y coordinate increment (deg) */
-  double	rot;		/* rotation (deg)  (from N through E) */
-  double	crot,srot;	/* Cosine and sine of rotation angle */
-  double	cd11,cd12,cd21,cd22;
-				/* rotation matrix */
-  double	dc11,dc12,dc21,dc22;
-				/* inverse rotation matrix */
-  double	equinox;	/* Equinox of coordinates default to 1950.0 */
-  double	epoch;		/* Epoch of coordinates default to equinox */
-  double	nxpix;		/* Number of pixels in X-dimension of image */
-  double	nypix;		/* Number of pixels in Y-dimension of image */
-  double	plate_ra;	/* Right ascension of plate center */
-  double	plate_dec;	/* Declination of plate center */
-  double	plate_scale;	/* Plate scale in arcsec/mm */
-  double	x_pixel_offset;	/* X pixel offset of image lower right */
-  double	y_pixel_offset;	/* Y pixel offset of image lower right */
-  double	x_pixel_size;	/* X pixel_size */
-  double	y_pixel_size;	/* Y pixel_size */
-  double	ppo_coeff[6];
-  double	amd_x_coeff[20]; /* X coefficients for plate model */
-  double	amd_y_coeff[20]; /* Y coefficients for plate model */
-  double	xpix;		/* x (RA) coordinate (pixels) */
-  double	ypix;		/* y (dec) coordinate (pixels) */
-  double	xpos;		/* x (RA) coordinate (deg) */
-  double	ypos;		/* y (dec) coordinate (deg) */
-  int		pcode;		/* projection code (1-8) */
-  int		changesys;	/* 1 for FK4->FK5, 2 for FK5->FK4 */
-  				/* 3 for FK4->galactic, 4 for FK5->galactic */
-  int		printsys;	/* 1 to print coordinate system, else 0 */
-  int		ndec;		/* Number of decimal places in PIX2WCST */
-  int		degout;		/* 1 to always print degrees in PIX2WCST */
-  int		tabsys;		/* 1 to put tab between RA & Dec, else 0 */
-  int		rotmat;		/* 0 if CDELT, CROTA; 1 if CD */
-  int		coorflip;	/* 0 if x=RA, y=Dec; 1 if x=Dec, y=RA */
-  int		offscl;		/* 0 if OK, 1 if offscale */
-  int		plate_fit;	/* 1 if plate fit, else 0 */
-  int		wcson;		 /* 1 if WCS is set, else 0 */
-  char		c1type[8];	/*  1st coordinate type code:
-					RA--, GLON, ELON */
-  char		c2type[8];	/*  2nd coordinate type code:
-					DEC-, GLAT, ELAT */
-  char		ptype[8];	/*  projection type code:
-				    -SIN, -TAN, -ARC, -NCP, -GLS, -MER, -AIT */
-  char		radecsys[16];	/* Reference frame: FK4, FK4-NO-E, FK5, GAPPT*/
-  char		sysout[16];	/* Reference frame for output: FK4, FK5 */
-  char		center[32];	/* Center coordinates (with frame) */
-  char		search_format[120];	/* search command format */
-				/* where %s is replaced by WCS coordinates */
-};
-
-#ifndef PI
-#define PI		3.141592653589793
-#endif
-
-/* Conversions among hours of RA, degrees and radians. */
-#define degrad(x)	((x)*PI/180.)
-#define raddeg(x)	((x)*180./PI)
-#define hrdeg(x)	((x)*15.)
-#define deghr(x)	((x)/15.)
-#define hrrad(x)	degrad(hrdeg(x))
-#define radhr(x)	deghr(raddeg(x))
-
-
-/* WCS subroutines in wcs.c */
-
-/* >>>>> DSB: Prototypes for "subroutines in wcs.c" have been removed since 
-   they clash with prototypes defined by the MS windows runtime library and
-   are not needed by AST. */ 
-
-/* Oct 26 1994	New file
- * Dec 21 1994	Add rotation matrix
- * Dec 22 1994	Add flag for coordinate reversal
-
- * Mar  6 1995	Add parameters for Digital Sky Survey plate fit
- * Jun  8 1995	Add parameters for coordinate system change
- * Jun 21 1995	Add parameter for plate scale
- * Jul  6 1995	Add parameter to note whether WCS is set
- * Aug  8 1995	Add parameter to note whether to print coordinate system
- * Oct 16 1995	Add parameters to save image dimensions and center coordinates
-
- * Feb 15 1996	Add coordinate conversion functions
- * Feb 20 1996	Add flag for tab tables
- * Apr 26 1996	Add epoch of positions (actual date of image)
- * Jul  5 1996	Add subroutine declarations
- * Jul 19 1996	Add WCSFULL declaration
- * Aug  5 1996	Add WCSNINIT to initialize WCS for non-terminated header
- * Oct 31 1996	Add DCnn inverse rotation matrix
- * Nov  1 1996	Add NDEC number of decimal places in output
- */
-/* >>>>>>>>>>>>>>>>>>>> End of SAOimage wcs.h header file <<<<<<<<<<<<<<<< */
-#endif
-
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "fitschan.h"            /* Storage for FITS header cards */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* DssMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstDssMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   void *wcs;                    /* Pointer to structure holding plate fit info */
-
-} AstDssMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstDssMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstFitsChan *(* DssFits)( AstDssMap *, int * );
-
-} AstDssMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstDssMapGlobals {
-   AstDssMapVtab Class_Vtab;
-   int Class_Init;
-} AstDssMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitDssMapGlobals_( AstDssMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(DssMap)          /* Check class membership */
-astPROTO_ISA(DssMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstDssMap *astDssMap_( void *, const char *, int *, ...);
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstDssMap *astInitDssMap_( void *, size_t, int, AstDssMapVtab *,
-                             const char *, AstFitsChan *, int * );
-
-/* Vtab initialiser. */
-void astInitDssMapVtab_( AstDssMapVtab *, const char *, int * );
-
-/* Loader. */
-AstDssMap *astLoadDssMap_( void *, size_t, AstDssMapVtab *,
-                             const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-AstFitsChan *astDssFits_( AstDssMap *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckDssMap(this) astINVOKE_CHECK(DssMap,this,0)
-#define astVerifyDssMap(this) astINVOKE_CHECK(DssMap,this,1)
-
-/* Test class membership. */
-#define astIsADssMap(this) astINVOKE_ISA(DssMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astDssMap astINVOKE(F,astDssMap_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitDssMap(mem,size,init,vtab,name,fits) \
-astINVOKE(O,astInitDssMap_(mem,size,init,vtab,name,astCheckFitsChan(fits),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitDssMapVtab(vtab,name) astINVOKE(V,astInitDssMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadDssMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadDssMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckDssMap to validate DssMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astDssFits(this) astINVOKE(O,astDssFits_(astCheckDssMap(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/ellipse.c b/ast-5.3-1/ellipse.c
deleted file mode 100644
index ae14b31..0000000
--- a/ast-5.3-1/ellipse.c
+++ /dev/null
@@ -1,3045 +0,0 @@
-/*
-*class++
-*  Name:
-*     Ellipse
-
-*  Purpose:
-*     An elliptical region within a 2-dimensional Frame.
-
-*  Constructor Function:
-c     astEllipse
-f     AST_ELLIPSE
-
-*  Description:
-*     The Ellipse class implements a Region which represents a ellipse 
-*     within a 2-dimensional Frame.
-
-*  Inheritance:
-*     The Ellipse class inherits from the Region class.
-
-*  Attributes:
-*     The Ellipse class does not define any new attributes beyond
-*     those which are applicable to all Regions.
-
-*  Functions:
-c     In addition to those functions applicable to all Regions, the
-c     following functions may also be applied to all Ellipses:
-f     In addition to those routines applicable to all Regions, the
-f     following routines may also be applied to all Ellipses:
-*
-c     - astEllipsePars: Get the geometric parameters of the Ellipse
-c     - AST_ELLIPSEPARS: Get the geometric parameters of the Ellipse
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     7-SEP-2004 (DSB):
-*        Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Ellipse
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "box.h"                 /* Box Regions */
-#include "wcsmap.h"              /* Definitons of AST__DPI etc */
-#include "circle.h"              /* Interface definition for circle class */
-#include "ellipse.h"             /* Interface definition for this class */
-#include "mapping.h"             /* Position mappings */
-#include "unitmap.h"             /* Unit Mapping */
-#include "pal.h"              /* SLALIB library interface */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Ellipse)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Ellipse,Class_Init)
-#define class_vtab astGLOBAL(Ellipse,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstEllipseVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstEllipse *astEllipseId_( void *, int, const double[2], const double[2], const double[2], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Cache( AstEllipse *, int * );
-static void CalcPars( AstFrame *, double[2], double[2], double[2], double *, double *, double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void EllipsePars( AstEllipse *, double[2], double *, double *, double *, double[2], double[2], int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-
-AstRegion *astBestEllipse_( AstPointSet *mesh, double *cen, AstRegion *unc, int *status ){
-/*
-*+
-*  Name:
-*     astBestEllipse
-
-*  Purpose:
-*     Find the best fitting Ellipse through a given mesh of points.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstRegion *astBestEllipse( AstPointSet *mesh, double *cen, AstRegion *unc )
-
-*  Class Membership:
-*     Ellipse member function 
-
-*  Description:
-*     This function finds the best fitting Ellipse through a given mesh of 
-*     points. Ellispes are always 2-dimensional. 
-
-*  Parameters:
-*     mesh
-*        Pointer to a PointSet holding the mesh of points. They are
-*        assumed to be in the Frame represented by "unc".
-*     cen
-*        Pointer to an array holding the coordinates of the new Ellipse
-*        centre.
-*     unc
-*        A Region representing the uncertainty associated with each point
-*        on the mesh.
-
-*  Returned Value:
-*     Pointer to the best fitting Ellipse. It will inherit the positional
-*     uncertainty and Frame represented by "unc".
-
-*  Implementation Deficiencies:
-*    - The method used by this function is not very accurate, and assumes 
-*    that the supplied mesh provides uniform coverage of the entire ellipse.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstPointSet *ps2;
-   AstRegion *result; 
-   double **ptr2;
-   double **ptr;
-   double *ang;
-   double *dist;
-   double *px;    
-   double *py;
-   double a0;
-   double a;
-   double aa[2];
-   double at;
-   double b;
-   double c0;
-   double c1;
-   double c2;
-   double c;
-   double d;
-   double den;
-   double e;
-   double f;
-   double mn;       
-   double mx;
-   double p[2];
-   double pa[2];
-   double pb[2];
-   double r1;
-   double r2;
-   double r3;
-   double smn;
-   double t1;
-   double t2;
-   double t3;
-   int ip;
-   int maxat;
-   int np;
-   double sw;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get no. of points in the mesh. */
-   np = astGetNpoint( mesh );
-
-/* Get pointers to the axis values. */
-   ptr = astGetPoints( mesh );   
-
-/* Allocate work space */
-   dist = astMalloc( sizeof( double )*(size_t) np );
-   ang = astMalloc( sizeof( double )*(size_t) np );
-
-/* Get a pointer to the Frame represented by "unc". This is the Frame to
-   which the supplied mesh points refer. */
-   frm = astGetFrame( unc->frameset, AST__CURRENT );
-
-/* Check pointers can be used safely */
-   if( astOK ) {
-
-/* Find the first mesh point which is at a non-zero distance from the
-   centre. */
-      px = ptr[ 0 ];
-      py = ptr[ 1 ];
-      for( ip = 0; ip < np; ip++, px++, py++ ) {
-         p[ 0 ] = *px;
-         p[ 1 ] = *py;
-         dist[ ip ] = astDistance( frm, cen, p );
-         if( dist[ ip ] != AST__BAD && dist[ ip ] != 0.0 ) {
-            break;
-         } else {
-            ang[ ip ] = AST__BAD;
-            dist[ ip ] = AST__BAD;
-         }
-      }
-
-/* Find a point which is this distance away from the centre along the second 
-   axis. This point is used to define zero angle when calling astAngle
-   below. */
-      astOffset2( frm, cen, 0.0, dist[ ip ], aa );
-      ang[ ip ] = astAngle( frm, aa, cen, p );
-
-/* Get the distance from the centre to each of the remaining mesh points. Also 
-   find the orientation of the radial lines through the centre to each mesh 
-   point. At the same time, find the index of the point with the largest
-   radial distance. */
-      maxat = ip;
-      r2 = dist[ maxat ];
-      ip++;
-      px++;
-      py++;
-      for( ; ip < np; ip++, px++, py++ ) {
-         p[ 0 ] = *px;
-         p[ 1 ] = *py;
-         dist[ ip ] = astDistance( frm, cen, p );
-         ang[ ip ] = astAngle( frm, aa, cen, p );
-         if( dist[ ip ] != AST__BAD && dist[ ip ] > r2 ) {
-            r2 = dist[ ip ];
-            maxat = ip;
-         }
-      }
-
-/* Find the higher index neighbouring point, wrapping back to the start
-   of the list when the end is reached. Note the radius and position angle
-   at this neighbouring point. */
-      t2 = 0.0;
-      r3 = AST__BAD;
-      t3 = AST__BAD;
-      a0 = ang[ maxat ];
-      for( ip = maxat + 1; ip < np; ip++ ) {
-         if( dist[ ip ] != AST__BAD ) {
-            r3 = dist[ ip ];
-            t3 = palSlaDrange( ang[ ip ] - a0 );
-            break;
-         }
-      }
-      if( r3 == AST__BAD ) {
-         for( ip = 0; ip < maxat; ip++ ) {
-            if( dist[ ip ] != AST__BAD ) {
-               r3 = dist[ ip ];
-               t3 = palSlaDrange( ang[ ip ] - a0 );
-               break;
-            }
-         }
-      }
-
-/* Find the lower index neighbouring point, wrapping back to the end
-   of the list when the start is reached. Note the radius and position angle
-   at this neighbouring point. */
-      r1 = AST__BAD;
-      t1 = AST__BAD;
-      for( ip = maxat - 1; ip > -1; ip-- ) {
-         if( dist[ ip ] != AST__BAD ) {
-            r1 = dist[ ip ];
-            t1 = palSlaDrange( ang[ ip ] - a0 );
-            break;
-         }
-      }
-      if( r1 == AST__BAD ) {
-         for( ip = np - 1; ip > maxat; ip-- ) {
-            if( dist[ ip ] != AST__BAD ) {
-               r1 = dist[ ip ];
-               t1 = palSlaDrange( ang[ ip ] - a0 );
-               break;
-            }
-         }
-      }
-
-/* Fit a quadratic through the three pairs of (radius,angle) values. The
-   centre point (r2,t2) is the point which is furthest from the centre,
-   and the other two are the neighbouring points found above. */
-      a = r2 - r1;
-      b = t2 - t1;
-      c = t2*t2 - t1*t1;
-      d = r3 - r2;
-      e = t3 - t2;
-      f = t3*t3 - t2*t2;
-
-      den = c*e - b*f;
-      if( den != 0.0 ) {
-
-/* The co-efficients of the interpolating polynomial... */
-         c1 = ( d*c - a*f )/den;
-         c2 = ( a*e - d*b )/den;
-         c0 = r1 - c1*t1 - c2*t1*t1;
-
-/* Find the largest radius (the turning point of the quadratic), and the 
-   angle at which it occurs. */
-         if( c2 < 0.0 ) {
-            mx = ( 4*c0*c2 - c1*c1 )/( 4*c2 );
-            at = a0 - c1/( 2*c2 );
-         } else {
-            mx = r2;
-            at = a0 - t2;
-         }
-
-/* This point is the end of the ellipse primary axis. Find its (x,y)
-   coords, and store in "pa". */
-         astOffset2( frm, cen, at, mx, pa );
-
-/* Resolve all the supplied points into components parallel and
-   perpendicular to the line joining the centre and "pa". */
-         ps2 = astResolvePoints( frm, cen, pa, mesh, NULL );
-         ptr2 = astGetPoints( ps2 );
-         if( astOK ) {
-
-/* For each other mesh point, work out the length of the secondary
-   axis which would result if we used that point to define the ellipse.
-   Find the mean of these secondary axis lengths, weighted by the length
-   of the y component to reduce influence of poor conditioning at very 
-   low y. */
-            smn = 0.0; 
-            sw = 0.0;
-            px = ptr2[ 0 ];
-            py = ptr2[ 1 ];
-            for( ip = 0; ip < np; ip++, px++, py++ ) {
-               if( *px != AST__BAD && *py != AST__BAD ) {
-                  den = mx*mx - (*px)*(*px);
-                  if( den > 0.0 ) {
-                     smn += fabs( mx*(*py)*(*py) )/sqrt( den );
-                     sw += fabs( *py );
-                  }
-               } 
-            }
-
-            if( sw > 0 ) {
-               mn = smn/sw;
-
-/* Find the coords at the end of the mean secondary axis. */
-               astOffset2( frm, cen, at + AST__DPIBY2, mn, pb );
-
-/* Create the Ellipse to return. */
-               result = (AstRegion *) astEllipse( frm, 0, cen, pa, pb, unc, "", status );
-            } 
-         }
-
-/* Free resources. */
-         ps2 = astAnnul( ps2 );
-
-      }
-   }
-
-   dist = astFree( dist );
-   ang = astFree( ang );
-   frm = astAnnul( frm );
-
-/* Return NULL if anything went wrong. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
-   return result;
-}
-
-void astInitEllipseVtab_(  AstEllipseVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitEllipseVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Ellipse.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     void astInitEllipseVtab( AstEllipseVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Ellipse vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Ellipse class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAEllipse) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->EllipsePars = EllipsePars;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_resetcache = region->ResetCache;
-   region->ResetCache = ResetCache;
-
-   region->RegPins = RegPins;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegBaseBox = RegBaseBox;
-   region->RegCentre = RegCentre;
-   region->RegTrace = RegTrace;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Ellipse", "Elliptical region" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void Cache( AstEllipse *this, int *status ){
-/*
-*  Name:
-*     Cache
-
-*  Purpose:
-*     Calculate intermediate values and cache them in the Ellipse structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     void Cache( AstEllipse *this, int *status )
-
-*  Class Membership:
-*     Ellipse member function 
-
-*  Description:
-*     This function uses the PointSet stored in the parent Region to calculate 
-*     some intermediate values which are useful in other methods. These
-*     values are stored within the Ellipse structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Ellipse.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;       /* Pointer to base Frame in Ellipse */
-   double **ptr;        /* Pointer to data in the encapsulated PointSet */
-   double *centre;      /* Array holding centre coords */
-   double *point1;      /* Array holding coords at end of primary axis */
-   double *point2;      /* Array holding coords at another point on ellipse */
-   double a;            /* The half-length of the primary axis */
-   double angle;        /* Orientation of primary axis */
-   double b;            /* The half-length of the secondary axis */
-   int i;               /* Axis index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do Nothing if the cached information is up to date. */
-   if( this->stale ) {
-
-/* Get a pointer to the base Frame. */
-      frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-   
-/* Allocate memory. */
-      centre = (double *) astMalloc( sizeof( double )*2 );   
-      point1 = (double *) astMalloc( sizeof( double )*2 );   
-      point2 = (double *) astMalloc( sizeof( double )*2 );   
-   
-/* Get pointers to the coordinate data in the parent Region structure. */
-      ptr = astGetPoints( ((AstRegion *) this)->points );
-   
-/* Check pointers can be used safely. */
-      if( astOK ) {
-   
-/* Copy the points in to the allocated memory. */
-         for( i = 0; i < 2; i++ ) {
-            centre[ i ] = ptr[ i ][ 0 ];
-            point1[ i ] = ptr[ i ][ 1 ];
-            point2[ i ] = ptr[ i ][ 2 ];
-         }
-   
-/* Calculate the geometric parameters of the ellipse. */
-         CalcPars( frm, centre, point1, point2, &a, &b, &angle, status );
-
-/* Check the returned values. */
-         if( a <= 0.0 || a == AST__BAD || b <= 0.0 || b == AST__BAD ) {
-            if( astOK ) astError( AST__BADIN, "astInitEllipse(%s): The "
-                                  "supplied points do not determine an "
-                                  "ellipse.", status, astGetClass( this ) );
-         }
-
-/* Store useful things in the Ellipse structure. */
-         if( astOK ) {
-           astFree( this->centre );
-           this->centre = centre;
-           centre = NULL;
-   
-           astFree( this->point1 );
-           this->point1 = point1;
-           point1 = NULL;
-   
-           this->a = a;
-           this->b = b;
-           this->angle = angle;
-         }
-      }
-   
-/* Initialise the bounding box. This is set properly when the astRegBaseMesh
-   function is called. These variables should not be used unless the
-   "basemesh" component of the parent Region structure is set to a non-null
-   value. */
-      this->lbx = -DBL_MAX;
-      this->ubx = DBL_MAX;
-      this->lby = -DBL_MAX;
-      this->uby = DBL_MAX;
-   
-/* Free resources */
-      frm = astAnnul( frm );
-      if( centre ) centre = astFree( centre );
-      if( point1 ) point1 = astFree( point1 );
-      point2 = astFree( point2 );
-
-/* Indicate cached information is up to date. */
-      this->stale = 0;
-
-   }
-}
-
-static void CalcPars( AstFrame *frm, double centre[2], double point1[2], 
-                      double point2[2], double *a, double *b, 
-                      double *angle, int *status ){
-/*
-*  Name:
-*     CalcPars
-
-*  Purpose:
-*     Calculate ellipse parameters.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     void CalcPars( AstFrame *frm, double centre[2], double point1[2], 
-*                    double point2[2], double *a, double *b, double *angle, 
-*                    int *status )
-
-*  Class Membership:
-*     Ellipse member function 
-
-*  Description:
-*     This function uses the supplied positions to calculate the
-*     geometric parameters of an ellipse.
-
-*  Parameters:
-*     frm
-*        Pointer to the Frame in which the positions are defined.
-*     centre;      
-*        Array holding centre coords.
-*     point1
-*        Array holding coords at end of primary axis 
-*     point2
-*        Array holding coords at another point on ellipse. On exit it
-*        holds the coords at the end of the secondary axis.
-*     a
-*        Pointer to location at which to store the half-length of the
-*        primary axis.
-*     b
-*        Pointer to location at which to store the half-length of the
-*        secondary axis.
-*     angle
-*        Pointer to location at which to store the angle from the 
-*        positive direction of the second Frame axis to the primary 
-*        ellipse axis, in radians. Rotation from the second to the first
-*        Frame axis is positive.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double point3[ 2 ];  /* Array holding a point on the primary axis */
-   double x;            /* The offset parallel to the primary axis */
-   double y;            /* The offset perpendicular to the primary axis */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the geodesic distance between the centre and point 1 (the end of
-   the primary axis of the ellipse). This is the half length of the
-   primary axis of the ellipse (the axis which joins the centre position to 
-   point 1). */
-   *a = astDistance( frm, centre, point1 );      
-   
-/* Find the point (point3) on the primary axis which is closest to point 2, 
-   and thus get the geodesic offsets (resolved parallel and perpendicular to
-   the primary axis) between the centre and point 2. */
-   if( *a > 0.0 ) {
-      astResolve( frm, centre, point1, point2, point3, &x, &y );
-   
-/* Find the half-length of the secondary ellipse axis. */
-      if( astOK ) {
-         *b = (*a)*(*a) - x*x;
-         if( *b > 0.0 ) *b = (*a)*y/sqrt( *b );
-      } else {
-         *b = *a;
-      }
-
-/* Find the angle from the positive direction of the second axis to the
-   primary ellipse axis. */
-      point3[ 0 ] = centre[ 0 ];
-      point3[ 1 ] = centre[ 1 ] + fabs( 0.1*(*a) );
-      *angle = astAngle( frm, point3, centre, point1 );
-
-/* Find the end point of the secondary axis. */
-      (void) astOffset2( frm, centre, *angle + AST__DPIBY2, *b, point2 ); 
-   }
-}
-
-static void EllipsePars( AstEllipse *this, double centre[2], double *a,
-                         double *b, double *angle, double p1[2], 
-                         double p2[2], int *status ){
-/*
-*++
-*  Name:
-c     astEllipsePars
-f     AST_ELLIPSEPARS
-
-*  Purpose:
-*     Returns the geometric parameters of an Ellipse.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "ellipse.h"
-c     void astEllipsePars( AstEllipse *this, double centre[2], double *a,
-c                          double *b, double *angle, double p1[2], double p2[2] )
-f     CALL AST_ELLIPSEPARS( THIS, CENTRE, A, B, ANGLE, P1, P2, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-c     This function 
-f     This routine
-*     returns the geometric parameters describing the supplied ellipse. 
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     centre
-f     CENTRE( 2 ) = DOUBLE PRECISION (Returned)
-*        The coordinates of the Ellipse centre are returned in this arrays.
-c     a
-f     A = DOUBLE PRECISION (Returned)
-*        Returned holding the half-length of the first axis of the
-*        ellipse. 
-c     b
-f     B = DOUBLE PRECISION (Returned)
-*        Returned holding the half-length of the second axis of the
-*        ellipse. 
-c     angle
-f     ANGLE = DOUBLE PRECISION (Returned)
-*        If the coordinate system in which the Ellipse is defined has 
-*        axes (X,Y), then 
-c        "*angle"
-f        ANGLE
-*        is returned holding the angle from the positive direction of 
-*        the Y axis to the first axis of the ellipse, in radians.
-*        Positive rotation is in the same sense as rotation from the 
-*        positive direction of Y to the positive direction of X.
-c     p1
-f     P1( 2 ) = DOUBLE PRECISION (Returned)
-*        An array in which to return the coordinates at one of the two ends 
-*        of the first axis  of the ellipse. 
-c        A NULL pointer can be supplied if these coordinates are not needed.
-c     p2
-f     P2( 2 ) = DOUBLE PRECISION (Returned)
-*        An array in which to return the coordinates at one of the two ends 
-*        of the second axis  of the ellipse.
-c        A NULL pointer can be supplied if these coordinates are not needed.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes: 
-*     - If the coordinate system represented by the Ellipse has been
-*     changed since it was first created, the returned parameters refer 
-*     to the new (changed) coordinate system, rather than the original
-*     coordinate system. Note however that if the transformation from
-*     original to new coordinate system is non-linear, the shape
-*     represented by the supplied Ellipse object may not be an accurate
-*     ellipse.
-*     - Values of AST__BAD are returned for the parameters without error 
-*     if the ellipse is degenerate or undefined.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frm;           /* Current Frame represented by the Ellipse */
-   AstPointSet *pset;       /* PointSet holding PointList axis values */
-   AstRegion *this_region;  /* Parent Region pointer */
-   double **ptr;            /* Pointer to axes values in the PointList */
-   double *point1;          /* Pointer to "p1" or "buf1" */
-   double *point2;          /* Pointer to "p2" or "buf2" */
-   double buf1[2];          /* Local substitute array for "p1" */
-   double buf2[2];          /* Local substitute array for "p2" */
-   int i;                   /* Axis index */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Store a pointer to the parent region structure. */
-   this_region = (AstRegion *) this;
-
-/* Transform the base Frame axis values into the current Frame. */
-   pset = astTransform( this_region->frameset, this_region->points, 1, NULL );
-
-/* Get pointers to the coordinate data. */
-   ptr = astGetPoints( pset );
-
-/* Choose the arrays to use - supplied arrays if possible, local arrays
-   otherwise. */
-   if( p1 ) {
-      point1 = p1;
-   } else {   
-      point1 = buf1;
-   }
-   if( p2 ) {
-      point2 = p2;
-   } else {   
-      point2 = buf2;
-   }
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-   
-/* Copy the points in to separate arrays. */
-      for( i = 0; i < 2; i++ ) {
-         centre[ i ] = ptr[ i ][ 0 ];
-         point1[ i ] = ptr[ i ][ 1 ];
-         point2[ i ] = ptr[ i ][ 2 ];
-      }
-   
-/* Get the Ellipse frame. */
-      frm = astGetFrame( this_region->frameset, AST__CURRENT );
-
-/* Calculate the geometric parameters of the ellipse. */
-      CalcPars( frm, centre, point1, point2, a, b, angle, status );
-
-/* Ensure no zero values are returned. */
-      if( *a <= 0.0  || *b <= 0.0 ) {
-         *a = AST__BAD;
-         *b = AST__BAD;
-         *angle = AST__BAD;
-      }
-   
-/* Free resources */
-      frm = astAnnul( frm );
-   }
-   pset = astAnnul( pset );
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Ellipse member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated 
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstEllipse *this;             /* Pointer to Ellipse structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Ellipse structure */
-   this = (AstEllipse *) this_region;
-
-/* The bounding box of the mesh returned by astRegBaseMesh is used as the
-   bounding box of the Ellipse. These bounds are cached in the Ellipse
-   structure by astRegBaseMesh. Ensure astRegBaseMesh has been invoked,
-   so that it is safe to use the cached bounding box. */
-   if( !this_region->basemesh ) (void) astAnnul( astRegBaseMesh( this ) );
-
-/* Store the bounding box. */
-   lbnd[ 0 ] = this->lbx;
-   ubnd[ 0 ] = this->ubx;
-   lbnd[ 1 ] = this->lby;
-   ubnd[ 1 ] = this->uby;
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Ellipse member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. Annul the pointer using astAnnul when it 
-*     is no longer needed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Constants: */
-#define NP_EDGE 50                /* No. of points for determining geodesic */
-
-/* Local Variables: */
-   AstEllipse *this;              /* The Ellipse structure */
-   AstFrame *frm;                 /* Base Frame in encapsulated FrameSet */
-   AstPointSet *result;           /* Returned pointer */
-   AstRegion *reg;                /* Copy of supplied Ellipse */
-   double **ptr;                  /* Pointers to data */
-   double ang;                    /* Position angular of primary axis at "dx" */
-   double angle;                  /* Ellipse parametric angle at point */
-   double delta;                  /* Angular separation of points */
-   double dist;                   /* Offset along an axis */
-   double dx;                     /* Primary axis offset */
-   double dy;                     /* Secondary axis offset */
-   double lbnd[2];                /* Lower bounding box bounds */
-   double lbx;                    /* Lower x bound of mesh bounding box */
-   double lby;                    /* Lower y bound of mesh bounding box */
-   double p2[ 2 ];                /* Position in 2D Frame */
-   double p[ 2 ];                 /* Position in 2D Frame */
-   double ubnd[2];                /* Upper bounding box bounds */
-   double ubx;                    /* Upper x bound of mesh bounding box */
-   double uby;                    /* Upper y bound of mesh bounding box */
-   int i;                         /* Point index */
-   int np;                        /* No. of points in returned PointSet */
-
-/* Initialise */
-   result= NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this_region->basemesh ) {
-      result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Initialise the bounding box of the mesh points. */
-      lbx = DBL_MAX;
-      ubx = -DBL_MAX;
-      lby = DBL_MAX;
-      uby = -DBL_MAX;
-
-/* Get a pointer to the Ellipse structure. */
-      this = (AstEllipse *) this_region;
-
-/* Ensure cached information is available. */
-      Cache( this, status );
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-      frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the requested number of points to put on the mesh. */
-      np = astGetMeshSize( this );
-
-/* Store the angular increment between points. */
-      delta = 2*AST__DPI/np;
-
-/* Create a suitable PointSet to hold the returned positions. */
-      result = astPointSet( np, 2, "", status );
-      ptr = astGetPoints( result );
-      if( astOK ) {
-
-/* Loop round each point. The angle is the parametric angle, phi, where
-   the ellipse is defined by:
-
-   dx = a.cos( phi )
-   dy = a.sin( phi )
-
-   measured from the primary ellipse. Positive in the sense of rotation from
-   axis 2 to axis 1.  */
-         angle = 0.0;
-         for( i = 0; i < np; i++ ) {
-
-/* Find the offsets from the centre. "dx" is geodesic distance along the
-   primary axis, and dy is geodesic distance along the secondary axis. */
-            dx = this->a*cos( angle );
-            dy = this->b*sin( angle );
-
-/* Now find the point which corresponds to this dx and dy, taking account
-   of the potential spherical geometry of hte coordinate system. First
-   move a distance "dx" from the centre along the primary axis. The
-   function value returned is the direction of the geodesic curve at the 
-   end point. That is, the angle (in radians) between the positive direction 
-   of the second axis and the continuation of the geodesic curve at the 
-   requested end point. */
-            ang = astOffset2( frm, this->centre, this->angle, dx, p );
-
-/* Now move a distance "dy" from the point found above at right angles to
-   the primary axis. */
-            astOffset2( frm, p, ang + AST__DPIBY2, dy, p2 );
-
-/* Store the resulting axis values. */
-            ptr[ 0 ][ i ] = p2[ 0 ];
-            ptr[ 1 ][ i ] = p2[ 1 ];
-
-/* Update the bounds of the mesh bounding box. The box is expressed in
-   terms of axis offsets from the centre, in order to avoid problems with
-   boxes that cross RA=0 or RA=12h */
-            if( p2[ 0 ] != AST__BAD && p2[ 1 ] != AST__BAD ){
-
-               dist =  astAxDistance( frm, 1, this->centre[ 0 ], p2[ 0 ] );
-               if( dist < lbx ) {
-                  lbx = dist;
-               } else if( dist > ubx ) {
-                  ubx = dist;
-               }
-
-               dist =  astAxDistance( frm, 1, this->centre[ 1 ], p2[ 1 ] );
-               if( dist < lby ) {
-                  lby = dist;
-               } else if( dist > uby ) {
-                  uby = dist;
-               }
-            }
-
-/* Increment the angular position of the next mesh point. */
-            angle += delta;
-         }
-      }
-
-/* Save the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. Also cache
-   the bounding box in the Ellipse structure. */
-      if( astOK && result ) {
-         this_region->basemesh = astClone( result );
-
-/* Extend the bounding box if it contains any singularies. The astNormBox 
-   requires a Mapping which can be used to test points in the base Frame. 
-   Create a copy of the Circle and then set its FrameSet so that the current 
-   Frame in the copy is the same as the base Frame in the original. */
-         reg = astCopy( this );
-         astSetRegFS( reg, frm );
-         astSetNegated( reg, 0 );
-
-/* Normalise this box. */
-         lbnd[ 0 ] = this->centre[ 0 ] + lbx;
-         lbnd[ 1 ] = this->centre[ 1 ] + lby;
-         ubnd[ 0 ] = this->centre[ 0 ] + ubx;
-         ubnd[ 1 ] = this->centre[ 1 ] + uby;
-         astNormBox( frm, lbnd, ubnd, reg );
-
-/* Save this box */
-         this->lbx = lbnd[ 0 ];
-         this->ubx = ubnd[ 0 ];
-         this->lby = lbnd[ 1 ];
-         this->uby = ubnd[ 1 ];
-
-/* Free resources. */
-         reg = astAnnul( reg );
-      }
-      frm = astAnnul( frm );
-
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr, 
-                          int index, int ifrm, int *status ){
-/*
-*  Name:
-*     RegCentre
-
-*  Purpose:
-*     Re-centre a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     double *RegCentre( AstRegion *this, double *cen, double **ptr, 
-*                        int index, int ifrm, int *status )
-
-*  Class Membership:
-*     Ellipse member function (over-rides the astRegCentre protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function shifts the centre of the supplied Region to a
-*     specified position, or returns the current centre of the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     cen
-*        Pointer to an array of axis values, giving the new centre.
-*        Supply a NULL value for this in order to use "ptr" and "index" to 
-*        specify the new centre.
-*     ptr
-*        Pointer to an array of points, one for each axis in the Region.
-*        Each pointer locates an array of axis values. This is the format
-*        returned by the PointSet method astGetPoints. Only used if "cen"
-*        is NULL.
-*     index
-*        The index of the point within the arrays identified by "ptr" at
-*        which is stored the coords for the new centre position. Only used 
-*        if "cen" is NULL.
-*     ifrm
-*        Should be AST__BASE or AST__CURRENT. Indicates whether the centre 
-*        position is supplied and returned in the base or current Frame of 
-*        the FrameSet encapsulated within "this".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If both "cen" and "ptr" are NULL then a pointer to a newly
-*     allocated dynamic array is returned which contains the centre
-*     coords of the Region. This array should be freed using astFree when
-*     no longer needed. If either of "ptr" or "cen" is not NULL, then a
-*     NULL pointer is returned.
-
-*  Notes:
-*    - Some Region sub-classes do not have a centre. Such classes will report 
-*    an AST__INTER error code if this method is called.
-*/
-
-/* Local Variables: */
-   AstEllipse *this;   /* Pointer to Ellipse structure */
-   AstFrame *frm;      /* Base Frame */
-   double **rptr;      /* Data pointers for Region PointSet */
-   double *bc;         /* Base Frame centre position */
-   double *result;     /* Returned pointer */
-   double *tmp;        /* Temporary array pointer */
-   double a[ 2 ];      /* Original position */
-   double angle;       /* Orietentation of offset from old to new centre */
-   double axval;       /* Axis value */
-   double b[ 2 ];      /* New position */
-   double dist;        /* Distance from old to new centre */
-   double newcen[ 2 ]; /* New centre */
-   int ic;             /* Coordinate index */
-   int ip;             /* Position index */
-   int ncb;            /* Number of base frame coordinate values per point */
-   int ncc;            /* Number of current frame coordinate values per point */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Ellipse structure. */
-   this = (AstEllipse *) this_region;
-
-/* Get the number of axis values per point in the current Frame. */
-   ncc = astGetNout( this_region->frameset );
-
-/* An ellipse always has 2 base frame axes. */
-   ncb = 2;
-
-/* If the centre coords are to be returned, return either a copy of the 
-   base Frame centre coords, or transform the base Frame centre coords
-   into the current Frame. */
-   if( !ptr && !cen ) {
-      if( ifrm == AST__CURRENT ) {
-         result = astRegTranPoint( this_region, this->centre, 1, 1 );
-      } else {
-         result = astStore( NULL, this->centre, sizeof( double )*ncb );
-      }
-
-/* Otherwise, we store the supplied new centre coords and return a NULL 
-   pointer. */
-   } else {
-
-/* Ensure cached information is available. */
-      Cache( this, status );
-
-/* Get a pointer to the axis values stored in the Region structure. */
-      rptr = astGetPoints( this_region->points );
-
-/* Check pointers can be used safely */
-      if( astOK ) {
-
-/* If the centre position was supplied in the current Frame, find the 
-   corresponding base Frame position... */
-         if( ifrm == AST__CURRENT ) {
-            if( cen ) {
-               bc = astRegTranPoint( this_region, cen, 1, 0 );
-            } else {
-               tmp = astMalloc( sizeof( double)*(size_t)ncc );
-               if( astOK ) {
-                  for( ic = 0; ic < ncc; ic++ ) tmp[ ic ] = ptr[ ic ][ index ];
-               }
-               bc = astRegTranPoint( this_region, tmp, 1, 0 );
-               tmp = astFree( tmp );
-            }
-
-/* Replace any bad centre values with their current values. */
-            for( ic = 0; ic < ncb; ic++ ) {
-               if( bc[ ic ] ==  AST__BAD ) bc[ ic ] = this->centre[ ic ];
-            }
-
-/* If the centre position was supplied in the base Frame, use the
-   supplied "cen" or "ptr" pointer directly to change the coords in the 
-   parent Region structure and the cached coords in the Ellipse structure. */
-         } else {
-            bc = newcen;
-            for( ic = 0; ic < ncb; ic++ ) {
-               axval = cen ? cen[ ic ] : ptr[ ic ][ index ];
-               newcen[ ic ] = ( axval != AST__BAD ) ? axval : this->centre[ ic ];
-            }
-         }
-
-/* Find the direction and length of the offset between the old and new
-   centre. */
-         frm = astGetFrame( this_region->frameset, AST__BASE );
-         angle = astAxAngle( frm, this->centre, bc, 2 );
-         dist = astDistance( frm, this->centre, bc );
-
-/* Shift each point in the parent Region structure by the same length and
-   direction. */
-         for( ip = 0; ip < 3; ip++ ) {
-            a[ 0 ] = rptr[ ip ][ 0 ];
-            a[ 1 ] = rptr[ ip ][ 1 ];
-            astOffset2( frm, a, angle, dist, b );
-            rptr[ ip ][ 0 ] = b[ 0 ];
-            rptr[ ip ][ 1 ] = b[ 1 ];
-         }
-
-/* Indicate that the cache is stale. */
-         astResetCache( this );
-
-/* Free resources */
-         frm = astAnnul( frm );
-         if( bc != newcen ) bc = astFree( bc );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Ellipse.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     Ellipse member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Ellipse.
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Ellipse "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Ellipse.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstEllipse *large_ellipse;   /* Ellipse slightly larger than "this" */
-   AstEllipse *small_ellipse;   /* Ellipse slightly smaller than "this" */
-   AstEllipse *this;            /* Pointer to the Ellipse structure. */
-   AstFrame *frm;               /* Base Frame in supplied Ellipse */
-   AstPointSet *ps1;            /* Points masked by larger Ellipse */
-   AstPointSet *ps2;            /* Points masked by larger and smaller Ellipsees */
-   AstRegion *tunc;             /* Uncertainity Region from "this" */
-   double **ptr;                /* Pointer to axis values in "ps2" */
-   double *p;                   /* Pointer to next axis value */
-   double drad;                 /* Radius increment corresponding to border width */
-   double l1;                   /* Length of bounding box diagonal */
-   double l2;                   /* Length of bounding box diagonal */
-   double lbnd_tunc[2];         /* Lower bounds of "this" uncertainty Region */ 
-   double lbnd_unc[2];          /* Lower bounds of supplied uncertainty Region */ 
-   double lim;                  /* Smallest semi-minor/major axis length */
-   double p1[2];                /* New ellipse axis lengths */
-   double ubnd_tunc[2];         /* Upper bounds of "this" uncertainty Region */ 
-   double ubnd_unc[2];          /* Upper bounds of supplied uncertainty Region */ 
-   int i;                       /* Axis index */
-   int j;                       /* Point index */
-   int np;                      /* No. of supplied points */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Ellipse structure. */
-   this = (AstEllipse *) this_region;
-
-/* Check the supplied PointSet has 2 axis values per point. */
-   if( astGetNcoord( pset ) != 2 && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
-                "values per point (%d) in the supplied PointSet - should be "
-                "2 (internal AST programming error).", status, astGetClass( this ),
-                astGetNcoord( pset ) );
-   }
-
-/* Get the number of axes in the uncertainty Region and check it is also 2. */
-   if( unc && astGetNaxes( unc ) != 2 && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
-                "in the supplied uncertainty Region - should be 2 "
-                "(internal AST programming error).", status, astGetClass( this ),
-                astGetNaxes( unc ) );
-   }
-
-/* We now find the maximum distance on each axis that a point can be from the 
-   boundary of the Ellipse for it still to be considered to be on the boundary.
-   First get the Region which defines the uncertainty within the Ellipse being
-   checked (in its base Frame), and get its bounding box. */
-   tunc = astGetUncFrm( this, AST__BASE );      
-   astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc ); 
-
-/* Find the geodesic length within the base Frame of "this" of the diagonal of 
-   the bounding box. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-   l1 = astDistance( frm, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
-   and get its bounding box in the same Frame. */
-   if( unc ) {
-      astGetRegionBounds( unc, lbnd_unc, ubnd_unc ); 
-
-/* Find the geodesic length of the diagonal of this bounding box. */
-      l2 = astDistance( frm, lbnd_unc, ubnd_unc );
-
-/* Assume zero uncertainty if no "unc" Region was supplied. */
-   } else {
-      l2 = 0.0;
-   }
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* The required border width is half of the total diagonal of the two bounding 
-   boxes. */   
-   if( astOK ) {
-      drad = 0.5*( l1 + l2 );
-
-/* Create two new Ellipse, one of which is larger than "this" by the amount
-   found above, and the other of which is smaller than "this" by the amount
-   found above. */
-      p1[ 0 ] = this->a + 0.5*drad;
-      p1[ 1 ] = this->b + 0.5*drad;
-      large_ellipse = astEllipse( frm, 1, this->centre, p1, &(this->angle), 
-                                  NULL, " ", status );
-
-      p1[ 0 ] = this->a - 0.5*drad;
-      p1[ 1 ] = this->b - 0.5*drad;
-      lim = 1.0E-6*drad;
-      if( p1[ 0 ] < lim ) p1[ 0 ] = lim;
-      if( p1[ 1 ] < lim ) p1[ 1 ] = lim;
-      small_ellipse = astEllipse( frm, 1, this->centre, p1, &(this->angle), 
-                                  NULL, " ", status );
-
-/* Negate the smaller region.*/
-      astNegate( small_ellipse );
-
-/* Points are on the boundary of "this" if they are inside both the large
-   Ellipse and the negated small Ellipse. First transform the supplied PointSet
-   using the large Ellipse, then transform them using the negated smaller
-   Ellipse. */
-      ps1 = astTransform( large_ellipse, pset, 1, NULL );
-      ps2 = astTransform( small_ellipse, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
-   values per axis. */
-      ptr = astGetPoints( ps2 );
-      np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
-      if( mask ) {
-         *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
-         if( astOK ) {
-   
-/* Initialise the mask elements on the basis of the first axis values */
-            result = 1;
-            p = ptr[ 0 ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  (*mask)[ j ] = 0;
-               } else {
-                  (*mask)[ j ] = 1;
-               }
-            }
-
-/* Now check for bad values on other axes. */
-            for( i = 1; i < 2; i++ ) {
-               p = ptr[ i ];
-               for( j = 0; j < np; j++ ) {
-                  if( *(p++) == AST__BAD ) {
-                     result = 0;
-                     (*mask)[ j ] = 0;
-                  }
-               }
-            }
-         }
-
-/* If no output mask is to be made, we can break out of the check as soon
-   as the first bad value is found. */
-      } else if( astOK ) {
-         result = 1;
-         for( i = 0; i < 2 && result; i++ ) {
-            p = ptr[ i ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-      }
-
-/* Free resources. */
-      large_ellipse = astAnnul( large_ellipse );
-      small_ellipse = astAnnul( small_ellipse );
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-   }
-
-   tunc = astAnnul( tunc );
-   frm = astAnnul( frm );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr, 
-                     int *status ){
-/*
-*+
-*  Name:
-*     RegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     Ellipse member function (overrides the astTraceRegion method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astTraceRegion method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
-   AstEllipse *this;
-   AstFrame *frm;
-   AstMapping *map;
-   AstPointSet *bpset;
-   AstPointSet *cpset;
-   double **bptr;
-   double ang;
-   double angle;
-   double dx;
-   double dy;
-   double p2[ 2 ];
-   double p[ 2 ];
-   int i;
-   int ncur;
-
-/* Check inherited status, and the number of points to return, returning
-   a non-zero value to indicate that this class supports the astRegTrace 
-   method. */
-   if( ! astOK || n == 0 ) return 1;
-
-/* Get a pointer to the Ellipse structure. */
-   this = (AstEllipse *) this_region;
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* We first determine the required positions in the base Frame of the
-   Region, and then transform them into the current Frame. Get the 
-   base->current Mapping, and the number of current Frame axes. */
-   map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
-   base Frame positions directly into the supplied arrays. */
-   if( astIsAUnitMap( map ) ) {
-      bpset = NULL;
-      bptr = ptr;
-      ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions (known
-   to be 2D since this is an ellipse). */
-   } else {
-      bpset = astPointSet( n, 2, " ", status );
-      bptr = astGetPoints( bpset );
-      ncur = astGetNout( map );
-   }
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Loop round each point. */
-      for( i = 0; i < n; i++ ) {
-
-/* The supplied scalar parameter values are the parametric angles, phi, 
-   where the ellipse is defined by:
-
-   dx = a.cos( phi )
-   dy = a.sin( phi )
-
-   measured from the primary ellipse. Positive in the sense of rotation from
-   axis 2 to axis 1.  */
-         angle = dist[ i ]*2*AST__DPI;
-
-/* Find the offsets from the centre. "dx" is geodesic distance along the
-   primary axis, and dy is geodesic distance along the secondary axis. */
-         dx = this->a*cos( angle );
-         dy = this->b*sin( angle );
-
-/* Now find the point which corresponds to this dx and dy, taking account
-   of the potential spherical geometry of hte coordinate system. First
-   move a distance "dx" from the centre along the primary axis. The
-   function value returned is the direction of the geodesic curve at the 
-   end point. That is, the angle (in radians) between the positive direction 
-   of the second axis and the continuation of the geodesic curve at the 
-   requested end point. */
-         ang = astOffset2( frm, this->centre, this->angle, dx, p );
-
-/* Now move a distance "dy" from the point found above at right angles to
-   the primary axis. */
-         astOffset2( frm, p, ang + AST__DPIBY2, dy, p2 );
-
-/* Store the resulting axis values. */
-         bptr[ 0 ][ i ] = p2[ 0 ];
-         bptr[ 1 ][ i ] = p2[ 1 ];
-      }
-   }
-
-/* If required, transform the base frame positions into the current
-   Frame, storing them in the supplied array. Then free resources. */
-   if( bpset ) {
-      cpset = astPointSet( n, ncur, " ", status );
-      astSetPoints( cpset, ptr );
-
-      (void) astTransform( map, bpset, 1, cpset );
-
-      cpset = astAnnul( cpset );
-      bpset = astAnnul( bpset );
-   }
-
-/* Free remaining resources. */
-   map = astAnnul( map );
-   frm = astAnnul( frm );
-
-/* Return a non-zero value to indicate that this class supports the
-   astRegTrace method. */
-   return 1;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     void ResetCache( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Region member function (overrides the astResetCache method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   if( this ) {
-      ( (AstEllipse *) this )->stale = 1;
-      (*parent_resetcache)( this, status );
-   }
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Ellipse method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate that cached information will need to be re-calculated before
-   it is next used. */
-   astResetCache( this_region );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Ellipse method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;           /* Base -> current Mapping */
-   AstMapping *result;        /* Result pointer to return */
-   AstPointSet *mesh;         /* Mesh of current Frame positions */
-   AstPointSet *ps2;          /* Ellipse PointSet in current Frame */
-   AstRegion *new;            /* Pointer to simplified Region */
-   AstRegion *newreg;         /* Equivalent circle or ellipse */
-   AstRegion *this;           /* Pointer to supplied Region structure */
-   AstRegion *unc;            /* Pointer to uncertainty Region */
-   double **ptr2;             /* Pointer axis values in "ps2" */
-   double *cen;               /* Pointer to array holding new centre coords */
-   int ic;                    /* Axis index */
-   int nc;                    /* No. of axis values per point */
-   int ok;                    /* Was the new centre found OK? */
-   int simpler;               /* Has some simplication taken place? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-   new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-   simpler = ( new != this );
-
-/* We attempt to simplify the Ellipse by re-defining it within its current 
-   Frame. Transforming the Ellipse from its base to its current Frame may 
-   result in the region no longer being an ellipse. We test this by 
-   transforming a set of bounds on the Ellipse boundary. */
-   map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-
-/* Get a mesh of points covering the Ellipse in its current Frame. */
-   mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty within the Ellipse in
-   its current Frame. */
-   unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Transform the PointSet holding the ellipse centre into the current
-   Frame, and copy the axis values into a new array. */
-   ps2 = astRegTransform( this, this->points, 1, NULL, NULL );
-   nc = astGetNcoord( ps2 );
-   cen = astMalloc( sizeof( double )*(size_t) nc );
-   ptr2 = astGetPoints( ps2 );
-   if( astOK ) {
-      ok = 1;
-      for( ic = 0; ic < nc; ic++ ) {
-         cen[ ic ] = ptr2[ ic ][ 0 ];
-         if( cen[ ic ] == AST__BAD ) ok = 0;
-      }
-
-/* Find the best fitting Circle (defined in the current Frame) through these 
-   points */
-      newreg = ok ? astBestCircle( mesh, cen, unc ) : NULL;
-
-/* See if all points within this mesh fall on the boundary of the best
-   fitting Circle, to within the uncertainty of the Region. */
-      if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Circle in place of the original Region. */
-         (void) astAnnul( new );
-         new = astClone( newreg );
-         simpler =1;
-
-/* Otherwise, if the region is 2-d we see if an Ellipse can represent the 
-   mesh. */
-      } else if( ok && nc == 2 ){
-
-/* Find the best fitting Ellipse (defined in the current Frame) through these 
-   points */
-         if( newreg ) (void) astAnnul( newreg );
-         newreg = astBestEllipse( mesh, cen, unc );
- 
-/* See if all points within this mesh fall on the boundary of the best
-   fitting Ellipse, to within the uncertainty of the Region. */
-         if( newreg && astRegPins( newreg, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Ellipse in place of the original Region. */
-            (void) astAnnul( new );
-            new = astClone( newreg );
-            simpler = 1;
-         }
-      }
-
-/* Free resources. */
-      if( newreg ) newreg = astAnnul( newreg );
-   }
-
-   ps2 = astAnnul( ps2 );
-   cen = astFree( cen );
-   mesh = astAnnul( mesh );
-   unc = astAnnul( unc );
-   map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-   if( simpler ){
-      astRegOverlay( new, this, 1 );
-      result = (AstMapping *) new;
-
-   } else {
-      new = astAnnul( new );
-      result = astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Ellipse to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Ellipse member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a Ellipse and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the Ellipse.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the Ellipse.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstEllipse *this;             /* Pointer to Ellipse */
-   AstFrame *frm;                /* Pointer to base Frame in FrameSet */
-   AstPointSet *pset_res;        /* Pointer to PointSet holding resolved components */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double **ptr_res;             /* Pointer to resolved components coordinate data */
-   double *px;                   /* Pointer to array of primary axis components */
-   double *py;                   /* Pointer to array of secondary axis components */
-   double c1;                    /* Constant */
-   double c2;                    /* Constant */
-   double d;                     /* Elliptical distance to current point */
-   int closed;                   /* Is the boundary part of the Region? */
-   int coord;                    /* Zero-based index for coordinates */
-   int inside;                   /* Is the point inside the Region? */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int neg;                      /* Has the Region been negated? */
-   int npoint;                   /* No. of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Ellipse structure. */
-   this = (AstEllipse *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
-   from the current Frame in the encapsulated FrameSet (the Frame
-   represented by the Region), to the base Frame (the Frame in which the
-   Region is defined). This call also returns a pointer to the base Frame
-   of the encapsulated FrameSet. Note, the returned pointer may be a
-   clone of the "in" pointer, and so we must be carefull not to modify the
-   contents of the returned PointSet. */
-   pset_tmp = astRegTransform( this, in, 0, NULL, &frm );
-
-/* Resolve all the base Frame positions into components parallel to and 
-   perpendicular to the primary axis, relative to the ellipse centre. The 
-   components are returned in a new PointSet. */
-   pset_res = astResolvePoints( frm, this->centre, this->point1, pset_tmp, NULL );
-
-/* Determine the numbers of points from the component PointSet and obtain 
-   pointers for accessing the component and output coordinate values. */
-   npoint = astGetNpoint( pset_res );
-   ptr_res = astGetPoints( pset_res );      
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* See if the boundary is part of the Region. */
-   closed = astGetClosed( this );
-
-/* See if the Region has been negated. */
-   neg = astGetNegated( this );
-
-/* Form some frequently needed constants. */
-   c1 = 1.0/(this->a*this->a);
-   c2 = 1.0/(this->b*this->b);
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-      px = ptr_res[ 0 ];
-      py = ptr_res[ 1 ];
-
-/* Loop round each point */
-      for ( point = 0; point < npoint; point++, px++, py++ ) {
-
-/* Bad input points result in bad output points */
-         if( *px == AST__BAD || *py == AST__BAD ) {
-            inside = 0;
-
-/* If the input points are good... */
-         } else {
-
-/* Find the elliptical distance from the centre to the supplied point (the
-   ellipse circumference has an "elliptical distance" of 1.0 at all points).*/
-            d = c1*(*px)*(*px) + c2*(*py)*(*py);
-
-/* Now consider whether this radius value puts the point in or out of the
-   Ellipse. */
-            if( d != AST__BAD ){
-               if( neg ) {
-                  if( closed ) {
-                     inside = ( d >= 1.0 );
-                  } else {
-                     inside = ( d > 1.0 );
-                  }
-               } else {
-                  if( closed ) {
-                     inside = ( d <= 1.0 );
-                  } else {
-                     inside = ( d < 1.0 );
-                  }
-               }
-            } else {
-               inside = 0;
-            }
-         }
-
-/* If the point is outside, store bad output values. */
-         if( !inside ) {
-            for ( coord = 0; coord < ncoord_out; coord++ ) {
-               ptr_out[ coord ][ point ] = AST__BAD;
-            }
-         }
-      } 
-   }
-
-/* Free resources */
-   pset_tmp = astAnnul( pset_tmp );
-   pset_res = astAnnul( pset_res );
-   frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Ellipse objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Ellipse objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstEllipse *in;             /* Pointer to input Ellipse */
-   AstEllipse *out;            /* Pointer to output Ellipse */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Ellipses. */
-   in = (AstEllipse *) objin;
-   out = (AstEllipse *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Ellipse. */
-   out->centre = NULL;
-   out->point1 = NULL;
-
-/* Copy dynamic memory contents */
-   out->centre = astStore( NULL, in->centre, sizeof( double )*2 );
-   out->point1 = astStore( NULL, in->point1, sizeof( double )*2 );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Ellipse objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Ellipse objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstEllipse *this;                 /* Pointer to Ellipse */
-
-/* Obtain a pointer to the Ellipse structure. */
-   this = (AstEllipse *) obj;
-
-/* Annul all resources. */
-   this->centre = astFree( this->centre );
-   this->point1 = astFree( this->point1 );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Ellipse objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Ellipse class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Ellipse whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstEllipse *this;                 /* Pointer to the Ellipse structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Ellipse structure. */
-   this = (AstEllipse *) this_object;
-
-/* Write out values representing the instance variables for the
-   Ellipse class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAEllipse and astCheckEllipse functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Ellipse,Region)
-astMAKE_CHECK(Ellipse)
-
-AstEllipse *astEllipse_( void *frame_void, int form, const double centre[2], 
-                         const double point1[2], const double point2[2], 
-                         AstRegion *unc, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astEllipse
-f     AST_ELLIPSE
-
-*  Purpose:
-*     Create a Ellipse.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "ellipse.h"
-c     AstEllipse *astEllipse( AstFrame *frame, int form, const double centre[2], 
-c                             const double point1[2], const double point2[2], 
-c                             AstRegion *unc, const char *options, ... )
-f     RESULT = AST_ELLIPSE( FRAME, FORM, CENTRE, POINT1, POINT2, UNC, OPTIONS, 
-f                           STATUS )
-
-*  Class Membership:
-*     Ellipse constructor.
-
-*  Description:
-*     This function creates a new Ellipse and optionally initialises its
-*     attributes.
-*
-*     A Ellipse is a Region which represents a elliptical area within the
-*     supplied 2-dimensional Frame.
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. It must
-*        have exactly 2 axes. A deep copy is taken of the supplied Frame. 
-*        This means that any subsequent changes made to the Frame using the 
-*        supplied pointer will have no effect the Region.
-c     form
-f     FORM = INTEGER (Given)
-*        Indicates how the ellipse is described by the remaining parameters.
-*        A value of zero indicates that the ellipse is specified by a
-*        centre position and two positions on the circumference. A value of 
-*        one indicates that the ellipse is specified by its centre position, 
-*        the half-lengths of its two axes, and the orientation of its first 
-*        axis.
-c     centre
-f     CENTRE( 2 ) = DOUBLE PRECISION (Given)
-c        An array of 2 doubles, 
-f        An array 
-*        containing the coordinates at the centre of
-*        the ellipse.
-c     point1
-f     POINT1( 2 ) = DOUBLE PRECISION (Given)
-c        An array of 2 doubles. If "form" 
-f        If FORM 
-*        is zero, this array should contain the coordinates of one of the four 
-*        points where an axis of the ellipse crosses the circumference of the 
-*        ellipse.
-c        If "form" 
-f        If FORM 
-*        is one, it should contain the lengths of semi-major and
-*        semi-minor axes of the ellipse, given as geodesic distances
-*        within the Frame.
-c     point2
-f     POINT2( 2 ) = DOUBLE PRECISION (Given)
-c        An array of 2 doubles. If "form" 
-f        If FORM
-*        is zero, this array should containing the coordinates at some other 
-*        point on the circumference of the ellipse, distinct from 
-c        "point1". If "form"
-f        POINT1. If FORM
-*        is one, the first element of this array should hold the angle
-*        between the second axis of the Frame and the first ellipse axis
-*        (i.e. the ellipse axis which is specified first in the 
-c        "point1" 
-f        POINT1
-*        array), and the second element will be ignored. The angle should be 
-*        given in radians, measured positive in the same sense as rotation 
-*        from the positive direction of the second Frame axis to the positive
-*        direction of the first Frame axis.
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with the boundary of the Box being created. 
-*        The uncertainty in any point on the boundary of the Box is found by 
-*        shifting the supplied "uncertainty" Region so that it is centred at 
-*        the boundary point being considered. The area covered by the
-*        shifted uncertainty Region then represents the uncertainty in the
-*        boundary position. The uncertainty is assumed to be the same for
-*        all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-*        The uncertainty Region has two uses: 1) when the 
-c        astOverlap
-f        AST_OVERLAP 
-*        function compares two Regions for equality the uncertainty
-*        Region is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using 
-c        astSimplify),
-f        AST_SIMPLIFY),
-*        the uncertainties are used to determine if the transformed boundary 
-*        can be accurately represented by a specific shape of Region.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Ellipse. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Ellipse. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astEllipse()
-f     AST_ELLIPSE = INTEGER
-*        A pointer to the new Ellipse.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstEllipse *new;              /* Pointer to new Ellipse */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the Ellipse, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitEllipse( NULL, sizeof( AstEllipse ), !class_init, &class_vtab,
-                         "Ellipse", frame, form, centre, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Ellipse's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Ellipse. */
-   return new;
-}
-
-AstEllipse *astEllipseId_( void *frame_void, int form, const double centre[2], 
-                         const double point1[2], const double point2[2], 
-                         void *unc_void, const char *options, ... ) {
-/*
-*  Name:
-*     astEllipseId_
-
-*  Purpose:
-*     Create a Ellipse.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstEllipse *astEllipseId( void *frame_void, int form, const double centre[2],
-*                         const double point1[2], const double point2[2], 
-*                         void *unc_void, const char *options, ..., int *status )
-
-*  Class Membership:
-*     Ellipse constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astEllipse constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astEllipse_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astEllipse_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astEllipse_.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ID value associated with the new Ellipse.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstEllipse *new;              /* Pointer to new Ellipse */
-   AstRegion *unc;               /* Pointer to Region structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Ellipse, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitEllipse( NULL, sizeof( AstEllipse ), !class_init, &class_vtab,
-                        "Ellipse", frame, form, centre, point1, point2, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Ellipse's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Ellipse. */
-   return astMakeId( new );
-}
-
-AstEllipse *astInitEllipse_( void *mem, size_t size, int init, AstEllipseVtab *vtab, 
-                             const char *name, AstFrame *frame, int form,
-                             const double centre[2], const double point1[2],
-                             const double point2[2], AstRegion *unc, int *status ){
-/*
-*+
-*  Name:
-*     astInitEllipse
-
-*  Purpose:
-*     Initialise a Ellipse.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstEllipse *astInitEllipse( void *mem, size_t size, int init, 
-*                                 AstEllipseVtab *vtab, const char *name, 
-*                                 AstFrame *frame, const double centre[2], 
-*                                 const double point1[2], const double point2[2],
-*                                 AstRegion *unc )
-
-*  Class Membership:
-*     Ellipse initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Ellipse object. It allocates memory (if necessary) to accommodate
-*     the Ellipse plus any additional data associated with the derived class.
-*     It then initialises a Ellipse structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Ellipse at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Ellipse is to be initialised.
-*        This must be of sufficient size to accommodate the Ellipse data
-*        (sizeof(Ellipse)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Ellipse (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Ellipse
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Ellipse's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Ellipse.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     form
-*        Indicates how the "point" parameter should be interpreted.
-*        Should be either 0 or 1.
-*     centre
-*        An array of double, with one element for each Frame axis (Naxes 
-*        attribute) containing the coordinates of the ellipse centre.
-*     point1
-*        An array of double, with one element for each Frame axis (Naxes 
-*        attribute). If "form" is zero, it should contain the coordinates at 
-*        the end of one of the axes of the ellipse. If "form" is one, it
-*        should contain the semi-major and semi-minor axes of the ellipse.
-*     point2
-*        An array of double, with one element for each Frame axis (Naxes 
-*        attribute). If "form" is zero, it should contain the coordinates at 
-*        some other point on the circumference of the ellipse. If "form" is 
-*        one, element [1] is ignored and element [0] should contain the
-*        angle from the second frame axis to the first ellipse axis, given in 
-*        radians, measured positive in the same sense as rotation from the 
-*        positive direction of the second Frame axis to the positive 
-*        direction of the first Frame axis. The "first" ellipse axis is 
-*        whichever of the semi-major or semi-minor axis is specified first in 
-*        the "point1" array.
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points on the boundary of the new Ellipse
-*        being initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal to 
-*        1.0E-6 of the dimensions of the new Ellipse's bounding box are used. 
-*        If an uncertainty Region is supplied, it must be either a Box, a 
-*        Circle or an Ellipse, and its encapsulated Frame must be related
-*        to the Frame supplied for parameter "frame" (i.e. astConvert
-*        should be able to find a Mapping between them). Two positions 
-*        the "frame" Frame are considered to be co-incident if their 
-*        uncertainty Regions overlap. The centre of the supplied
-*        uncertainty Region is immaterial since it will be re-centred on the 
-*        point being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new Ellipse.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstEllipse *new;          /* Pointer to new Ellipse */
-   AstPointSet *pset;        /* PointSet to pass to Region initialiser */
-   double **ptr;             /* Pointer to coords data in pset */
-   const double *p1;         /* Pointer to circumference point 1 */
-   const double *p2;         /* Pointer to circumference point 2 */
-   int i;                    /* axis index */
-   int nc;                   /* No. of axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitEllipseVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the supplied value for "form" is legal. */
-   if( form != 0 && form != 1 && astOK ) {
-      astError( AST__BADIN, "astInitEllipse(%s): The value supplied for "
-                "parameter \"form\" (%d) is illegal - it should be 0 or 1 "
-                "(programming error).", status, name, form );
-   }
-
-/* Get the number of axis values required for each position. */
-   nc = astGetNaxes( frame );
-
-/* Report an error if the Frame is not 2-dimensional. */
-   if( nc != 2 ) {
-      astError( AST__BADIN, "astInitEllipse(%s): The supplied %s has %d "
-                "axes - ellipses must have exactly 2 axes.", status, name,
-                astGetClass( frame ), nc );
-   }
-
-/* If the ellipse is specified by axis lengths and orientation, find two
-   points on the circumference (ends of the two ellipse axes). */
-   if( form == 1 ) {
-      p1 = astMalloc( sizeof( double )*2 );
-      p2 = astMalloc( sizeof( double )*2 );
-      if( astOK ) {
-         astOffset2( frame, centre, *point2, point1[ 0 ], (double *) p1 );
-         astOffset2( frame, centre, *point2 + AST__DPIBY2, point1[ 1 ],
-                     (double *) p2 );
-      }
-
-/* If the ellipse is specified by two points on the circumference, use
-   them. */
-   } else {
-      p1 = point1;
-      p2 = point2;
-   }
-
-/* Create a PointSet to hold the supplied values, and get points to the
-   data arrays. */
-   pset = astPointSet( 3, nc, " ", status );
-   ptr = astGetPoints( pset );
-
-/* Copy the supplied coordinates into the PointSet, checking that no bad 
-   values have been supplied. */
-   for( i = 0; astOK && i < nc; i++ ) {
-      if( centre[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitEllipse(%s): The value of axis %d is "
-                   "undefined at the ellipse centre.", status, name, i + 1 );
-      } 
-      if( astOK && p1[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitEllipse(%s): The value of axis %d is "
-                   "undefined at point 1 on the circumference of "
-                   "the ellipse.", status, name, i + 1 );
-      }
-      if( astOK && p2[ i ] == AST__BAD ) {
-         astError( AST__BADIN, "astInitEllipse(%s): The value of axis %d is "
-                   "undefined at point 2 on the circumference of "
-                   "the ellipse.", status, name, i + 1 );
-      }
-      ptr[ i ][ 0 ] = centre[ i ];
-      ptr[ i ][ 1 ] = p1[ i ];
-      ptr[ i ][ 2 ] = p2[ i ];
-   }
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the Ellipse structure, allocating memory if necessary. */
-      new = (AstEllipse *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                         name, frame, pset, unc );
-
-      if ( astOK ) {
-
-/* Initialise the Ellipse data. */
-/* ------------------------ */
-         new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Ellipse. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free resources. */
-   pset = astAnnul( pset );
-   if( form == 1 ) {
-      p1 = astFree( (void *) p1 );
-      p2 = astFree( (void *) p2 );
-   }
-
-/* Return a pointer to the new Ellipse. */
-   return new;
-}
-
-AstEllipse *astLoadEllipse_( void *mem, size_t size, AstEllipseVtab *vtab, 
-                           const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadEllipse
-
-*  Purpose:
-*     Load a Ellipse.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ellipse.h"
-*     AstEllipse *astLoadEllipse( void *mem, size_t size, AstEllipseVtab *vtab, 
-*                               const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Ellipse loader.
-
-*  Description:
-*     This function is provided to load a new Ellipse using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Ellipse structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Ellipse at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Ellipse is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Ellipse data (sizeof(Ellipse)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Ellipse (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Ellipse structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstEllipse) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Ellipse. If this is NULL, a pointer
-*        to the (static) virtual function table for the Ellipse class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Ellipse" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Ellipse.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstEllipse *new;              /* Pointer to the new Ellipse */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Ellipse. In this case the
-   Ellipse belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstEllipse );
-      vtab = &class_vtab;
-      name = "Ellipse";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitEllipseVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Ellipse. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Ellipse" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* Indicate that no cache intermediate results are yet available in the 
-   Ellipse structure */
-      new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Ellipse. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Ellipse pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astEllipsePars_( AstEllipse *this, double centre[2], double *a,
-                      double *b, double *angle, double p1[2], double p2[2],
-                      int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Ellipse,EllipsePars))( this, centre, a, b,
-                                            angle, p1, p2, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/ellipse.h b/ast-5.3-1/ellipse.h
deleted file mode 100644
index d9857c0..0000000
--- a/ast-5.3-1/ellipse.h
+++ /dev/null
@@ -1,244 +0,0 @@
-#if !defined( ELLIPSE_INCLUDED ) /* Include this file only once */
-#define ELLIPSE_INCLUDED
-/*
-*+
-*  Name:
-*     ellipse.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Ellipse class.
-
-*  Invocation:
-*     #include "ellipse.h"
-
-*  Description:
-*     This include file defines the interface to the Ellipse class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Ellipse class implement a Region which represents a simple interval
-*     on each axis of the encapsulated Frame
-
-*  Inheritance:
-*     The Ellipse class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     7-SEP-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Ellipse structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstEllipse {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *centre;               /* Ellipse centre coords */
-   double *point1;               /* Point at end of primary axis */
-   double angle;                 /* Orientation of primary axis */
-   double a;                     /* Half-length of primary axis */
-   double b;                     /* Half-length of secondary axis */
-   double lbx;                   /* Lower x limit of mesh bounding box */
-   double ubx;                   /* Upper y limit of mesh bounding box */
-   double lby;                   /* Lower x limit of mesh bounding box */
-   double uby;                   /* Upper y limit of mesh bounding box */
-   int stale;                    /* Is cached information stale? */
-
-} AstEllipse;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstEllipseVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* EllipsePars)( AstEllipse *, double[2], double *, double *, double *, double[2], double[2], int * );
-
-} AstEllipseVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstEllipseGlobals {
-   AstEllipseVtab Class_Vtab;
-   int Class_Init;
-} AstEllipseGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitEllipseGlobals_( AstEllipseGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Ellipse)          /* Check class membership */
-astPROTO_ISA(Ellipse)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstEllipse *astEllipse_( void *, int, const double[2], const double[2], const double[2], AstRegion *, const char *, int *, ...);
-#else
-AstEllipse *astEllipseId_( void *, int, const double[2], const double[2], const double[2], AstRegion *, const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstEllipse *astInitEllipse_( void *, size_t, int, AstEllipseVtab *,
-                           const char *, AstFrame *, int, const double[2],
-                           const double[2], const double[2], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitEllipseVtab_( AstEllipseVtab *, const char *, int * );
-
-/* Loader. */
-AstEllipse *astLoadEllipse_( void *, size_t, AstEllipseVtab *,
-                             const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astEllipsePars_( AstEllipse *, double[2], double *, double *, double *, double[2], double[2], int * );
-# if defined(astCLASS)           /* Protected */
-AstRegion *astBestEllipse_( AstPointSet *, double *, AstRegion *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckEllipse(this) astINVOKE_CHECK(Ellipse,this,0)
-#define astVerifyEllipse(this) astINVOKE_CHECK(Ellipse,this,1)
-
-/* Test class membership. */
-#define astIsAEllipse(this) astINVOKE_ISA(Ellipse,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astEllipse astINVOKE(F,astEllipse_)
-#else
-#define astEllipse astINVOKE(F,astEllipseId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitEllipse(mem,size,init,vtab,name,frame,form,p1,p2,p3,unc) \
-astINVOKE(O,astInitEllipse_(mem,size,init,vtab,name,frame,form,p1,p2,p3,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitEllipseVtab(vtab,name) astINVOKE(V,astInitEllipseVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadEllipse(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadEllipse_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckEllipse to validate Ellipse pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#define astEllipsePars(this,centre,a,b,angle,p1,p2) \
-astINVOKE(V,astEllipsePars_(astCheckEllipse(this),centre,a,b,angle,p1,p2,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astBestEllipse(pset,cen,unc) astBestEllipse_(pset,cen,unc,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/ems.h b/ast-5.3-1/ems.h
deleted file mode 100644
index b12651d..0000000
--- a/ast-5.3-1/ems.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*+
- *  Name:
- *     ems.h
-
- *  Purpose:
- *     EMS_ C interface header file.
-
- *  Language:
- *     Starlink ANSI C
-
- *  Description:
- *     This include file contains the function prototypes for all 
- *     EMS C interface routines and defines EMS__VERSN to be the major
- *     version number
-
- *  Authors:
- *     PCTR: P.C.T. Rees (STARLINK)
- *     AJC: A.J.Chipperfield (STARLINK)
- *     TIMJ: Tim Jenness (JAC, Hawaii)
- *     {enter_new_authors_here}
-
- *  History:
- *     19-SEP-1990 (PCTR):
- *        Original version.
- *     21-JUN-1991 (PCTR):
- *        Made all given character strings type "const".
- *     5-OCT-1993 (PCTR):
- *        Updated for Vn. 1.2-3
- *     28-SEP-1994 (AJC):
- *        V1.4 Added ems_facer_c and ems_errno_c
- *     21-JUN-1995 (AJC):
- *        V1.5 Added ems1_starf_c
- *     13-MAY-1999 (AJC):
- *        Added the emsXxx form of name
- *        and #define old_names = new_names 
- *        Removed ems_tune/gtune/show/_c
- *        Added ems1_get_facility_error
- *     27-JUL-2001 (AJC):
- *        Removed emsFmtx
- *        Add emsExpnd, emsTune
- *     13-AUG-2001 (AJC):
- *        Removed emsFioer
- *        #define EMS__VERSN
- *     20-SEP-2001 (AJC):
- *        Added emsSetnc and point ems_setc_c at it
- *      3-MAR-2006 (TIMJ):
- *        Add emsSetu / emsSetp / emsSeti64
- *     30-JUL-2008 (PWD):
- *        Added emsGtune.
- *     31-JUL-2008 (PWD):
- *        Added emsStune and changed emsGtune to return the value as a result.
- *        Marked emsTune as deprecated.
- *     10-SEP-2008 (TIMJ):
- *        Remove fortran prototypes. Should not be in a public include file.
- *     16-SEP-2008 (TIMJ):
- *        Remove 3 arg version of emsSetc
- *     {enter_changes_here}
-
- *  Bugs:
- *     {note_any_bugs_here}
-
- *- */
-
-#ifndef EMS_DEFINED
-#define EMS_DEFINED
-
-/* ANSI types */
-#include <stdarg.h>
-#include <stddef.h>
-#include <inttypes.h>
-
-
-/* EMS Major Version */
-#define EMS__VERSN 2
-
-/* Function Prototypes: */
-void emsAnnul( int *status );     
-
-void emsBegin( int *status );     
-
-void emsEload( char *param,       
-               int *parlen,
-               char *opstr,
-               int *oplen,
-               int *status );
-
-void emsEnd( int * status );      
-
-void emsErrno( const char *token, 
-               int errval );
-
-void emsExpnd( const char *text,
-               char *opstr,
-               const int maxlen,
-               int *oplen,
-               int *status );
-
-void emsFacer( const char *token, 
-               int status );
-
-int emsGtune( const char *key,  
-              int *status );
-
-void emsLevel( int *level );      
-
-void emsMark( void );             
-
-void emsMload( const char *msg,   
-               const char *text,
-               char *opstr,
-               int *oplen,
-               int *status );
-
-void emsRenew( void );            
-
-void emsRep( const char *err,     
-             const char *text,
-             int *status );
-
-void emsRlse( void );             
-
-void emsSetc( const char *token,  
-              const char *cvalue );
-
-void emsSetnc( const char *token,  
-               const char *cvalue,
-               int mxchar );
-
-void emsSetd( const char *token,  
-              double dvalue );
-
-void emsSeti( const char *token,  
-              int ivalue );
-
-void emsSeti64( const char *token,  
-                int64_t ivalue );
-
-void emsSetl( const char *token,  
-              int lvalue );
-
-void emsSetr( const char *token,  
-              float rvalue );
-
-void emsSetp( const char *token,  
-              void * pvalue );
-
-void emsSetu( const char *token,  
-              unsigned int ivalue );
-
-void emsStat( int *status );      
-
-void emsSyser( const char *token, 
-               int systat );
-
-int emsStune( const char *key,
-              const int value,
-              int *status );
-
-/*  Deprecated function. */
-void emsTune( const char *key, 
-              const int value, 
-              int *status );
-
-/* Internal Functions */
-/* Not for general use */
-int ems1Starf( const char *envar,       
-               const char *relpath, 
-               const char *acmode, 
-               char **filename, 
-               int *pathlen );
-
-void ems1_get_facility_error( unsigned int errcode,
-                              char **facility_name,
-                              char **error_ident,
-                              char **error_text );
-
-/* Required by MERS. Not to be used by anyone else */
-
-void ems1Rform( const char *text, const int maxlen, int *iposn, char *string, int *strlength  );
-
-void ems1Gesc( const char *escchr, const char *string, int *iposn );
-
-void ems1Gnam( const char *string, int *iposn, char *name, int *namlen, int *status);
-
-#endif	/* EMS_DEFINED */
diff --git a/ast-5.3-1/err.h b/ast-5.3-1/err.h
deleted file mode 100644
index 5c59a5a..0000000
--- a/ast-5.3-1/err.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#if !defined( ERR_INCLUDED ) /* Include this file only once */
-#define ERR_INCLUDED
-/*
-*+
-*  Name:
-*     err.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the err module.
-
-*  Invocation:
-*     #include "err.h"
-
-*  Description:
-*     This include file defines the interface to the err module and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this module.
-
-*  Inheritance:
-*     The err module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (STARLINK)
-*     {enter_new_authors_here}
-
-*  History:
-*     6-NOV-1996 (DSB):
-*        Original version.
-*     {enter_changes_here}
-*-
-*/
-
-/* Function prototypes. */
-/* ==================== */
-#if defined(astCLASS)            /* Protected */
-void astPutErr_( int, const char * );
-
-/* Function interfaces. */
-/* ==================== */
-#define astPutErr(status,message) astPutErr_(status,message)
-#endif
-
-#endif
diff --git a/ast-5.3-1/err_drama.c b/ast-5.3-1/err_drama.c
deleted file mode 100644
index 8395bfa..0000000
--- a/ast-5.3-1/err_drama.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-*  Name:
-*     err_ems.c
-
-*  Purpose:
-*     Implement the "err" module for the DRAMA ERS error system.
-
-*  Description:
-*     This file implements an alternative "err" module for the AST
-*     library. It is used to deliver error messages through the
-*     DRAMA ERS error message system rather than by the default mechanism.
-
-*  Copyright:
-*     Copyright (C) 2008 Science and Technology Facilities Council.
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (UCLan)
-*     TIMJ: Tim Jenness (JAC, Hawaii)
-*     RFWS: R.F. Warren-Smith (STARLINK)
-*     {enter_new_authors_here}
-
-*  History:
-*     6-NOV-1996 (DSB):
-*        Original version.
-*     16-SEP-2008 (TIMJ):
-*        Use modern EMS interface
-*     13-NOV-2008 (TIMJ):
-*        Modify for DRAMA
-*     {enter_changes_here}
-*/
-
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
-   implementation). This indicates to header files that they should
-   make "protected" symbols available. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h"                 /* Interface to this module */
-
-/* Need to define these for DRAMA. Otherwise we have to include drama.h
-   in the distribution as well */
-#if HAVE_STDARG_H
-# define DSTDARG_OK
-#endif
-#define ERS_STANDALONE
-#include "Ers.h"                 /* Interface to the Ers system */
-
-/* Function implementations. */
-/* ========================= */
-void astPutErr_( int status, const char *message ) {
-/*
-*+
-*  Name:
-*     astPutErr
-
-*  Purpose:
-*     Deliver an error message.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "err.h"
-*     void astPutErr( int status, const char *message )
-
-*  Description:
-*     This function delivers an error message and (optionally) an
-*     accompanying status value to the user. It may be re-implemented
-*     in order to deliver error messages in different ways, according
-*     to the environment in which the AST library is being used.
-
-*  Parameters:
-*     status
-*        The error status value.
-*     message
-*        A pointer to a null-terminated character string containing
-*        the error message to be delivered. This should not contain
-*        newline characters.
-
-*  Notes:
-*     - This function is documented as "protected" but, in fact, is
-*     publicly accessible so that it may be re-implemented as
-*     required.
-*-
-*/
-
-/* Local Variables: */
-   StatusType local_status;             /* Local status value */
-
-/* Make a copy of the status value supplied. Then invoke ems_rep_c to
-   report the error message through EMS and to associate the error
-   status with it. Ignore any returned status value. */
-   local_status = status;
-   ErsRep( 0, &local_status, message );
-}
diff --git a/ast-5.3-1/err_ems.c b/ast-5.3-1/err_ems.c
deleted file mode 100644
index 7439175..0000000
--- a/ast-5.3-1/err_ems.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-*  Name:
-*     err_ems.c
-
-*  Purpose:
-*     Implement the "err" module for the EMS error system.
-
-*  Description:
-*     This file implements an alternative "err" module for the AST
-*     library. It is used to deliver error messages through the
-*     Starlink EMS error message system (Starlink System Note 4)
-*     rather than by the default mechanism.
-
-*  Copyright:
-*     Copyright (C) 2008 Science and Technology Facilities Council.
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (STARLINK)
-*     {enter_new_authors_here}
-
-*  History:
-*     6-NOV-1996 (DSB):
-*        Original version.
-*     16-SEP-2008 (TIMJ):
-*        Use modern EMS interface
-*     {enter_changes_here}
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
-   implementation). This indicates to header files that they should
-   make "protected" symbols available. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h"                 /* Interface to this module */
-#include "ems.h"                 /* Interface to the EMS system */
-
-/* Function implementations. */
-/* ========================= */
-void astPutErr_( int status, const char *message ) {
-/*
-*+
-*  Name:
-*     astPutErr
-
-*  Purpose:
-*     Deliver an error message.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "err.h"
-*     void astPutErr( int status, const char *message )
-
-*  Description:
-*     This function delivers an error message and (optionally) an
-*     accompanying status value to the user. It may be re-implemented
-*     in order to deliver error messages in different ways, according
-*     to the environment in which the AST library is being used.
-
-*  Parameters:
-*     status
-*        The error status value.
-*     message
-*        A pointer to a null-terminated character string containing
-*        the error message to be delivered. This should not contain
-*        newline characters.
-
-*  Notes:
-*     - This function is documented as "protected" but, in fact, is
-*     publicly accessible so that it may be re-implemented as
-*     required.
-*-
-*/
-
-/* Local Variables: */
-   int local_status;             /* Local status value */
-
-/* Make a copy of the status value supplied. Then invoke ems_rep_c to
-   report the error message through EMS and to associate the error
-   status with it. Ignore any returned status value. */
-   local_status = status;
-   emsRep( "AST_ERROR", message, &local_status );
-}
diff --git a/ast-5.3-1/err_null.c b/ast-5.3-1/err_null.c
deleted file mode 100644
index 868db8d..0000000
--- a/ast-5.3-1/err_null.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-*  Name:
-*     err_null.c
-
-*  Purpose:
-*     Implement the default "err" module.
-
-*  Description:
-*     This file implements the default "err" module for the AST
-*     library. It is used to deliver error messages if no alternative
-*     error delivery mechanism is provided.
-*
-*     To provide an alternative mechanism, re-implement this module
-*     and link your program against the resulting library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (STARLINK)
-*     {enter_new_authors_here}
-
-*  History:
-*     6-NOV-1996 (DSB):
-*        Original version.
-*     {enter_changes_here}
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
-   implementation). This indicates to header files that they should
-   make "protected" symbols available. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h"                 /* Interface to this module */
-#include "error.h"               /* Interface to the error module */
-
-/* C header files. */
-/* --------------- */
-#include <stdio.h>
-
-/* Function implementations. */
-/* ========================= */
-void astPutErr_( int status_value, const char *message ) {
-/*
-*+
-*  Name:
-*     astPutErr
-
-*  Purpose:
-*     Deliver an error message.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "err.h"
-*     void astPutErr( int status_value, const char *message )
-
-*  Description:
-*     This function delivers an error message and (optionally) an
-*     accompanying status value to the user. It may be re-implemented
-*     in order to deliver error messages in different ways, according
-*     to the environment in which the AST library is being used.
-
-*  Parameters:
-*     status_value
-*        The error status value.
-*     message
-*        A pointer to a null-terminated character string containing
-*        the error message to be delivered. This should not contain
-*        newline characters.
-
-*  Notes:
-*     - This function is documented as "protected" but, in fact, is
-*     publicly accessible so that it may be re-implemented as
-*     required.
-*-
-*/
-
-
-/* This is the default implementation. Simply write the message to
-   standard error with a newline appended. Ignore the status value. */
-   int *status = astGetStatusPtr;
-   (void) fprintf( stderr, "%s%s\n", astOK ? "!! " : "!  ", message );
-}
diff --git a/ast-5.3-1/error.c b/ast-5.3-1/error.c
deleted file mode 100644
index 663340e..0000000
--- a/ast-5.3-1/error.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/*
-*  Name:
-*     error.c
-
-*  Purpose:
-*     Implement error handling functions.
-
-*  Description:
-*     This file implements the Error module which provides functions
-*     for handling error conditions in the AST library.  For a
-*     description of the module and its interface, see the .h file of
-*     the same name.
-*
-*     Since its initial release, AST has used a global status variable
-*     rather than adding an explicit status parameter to the argument
-*     list of each AST function. This caused problems for the thread-safe
-*     version of AST since each thread needs its own status value. Whilst
-*     it would have been possible for each function to access a global 
-*     status value via the pthreads "thread speific data key" mechanism, 
-*     the huge number of status checks performed within AST caused this
-*     option to be slow. Instead AST has been modified so that every
-*     function has an explicit status pointer parameter. This though
-*     causes problems in that we cannot change the public interface to
-*     AST because doing so would break large amounts of external software. 
-*     To get round this, the macros that define the public interface to
-*     AST have been modified so that they provide a status pointer
-*     automatically to the function that is being invoked. This is how
-*     the system works...
-*
-*     All AST functions have an integer inherited status pointer parameter
-*     called "status". This parameter is "hidden" in AST functions that
-*     are invoked via macros (typically public and protected functions).
-*     This means that whilst "int *status" appears explicitly at the end
-*     of the function argument list (in both prototype and definition), it
-*     is not included in the prologue documentation, and is not included
-*     explicitly in the argument list when invoking the function. Instead,
-*     the macro that is used to invoke the function adds in the required
-*     status parameter to the function invocation.
-*
-*     Macros which are invoked within AST (the protected interface) expand 
-*     to include ", status" at the end of the function parameter list. For
-*     backward compatability with previous versions of AST, macros which 
-*     are invoked from outside AST (the public interface) expand to include 
-*     ", astGetStatusPtr" at the end of the function parameter list. The 
-*     astGetStatusPtr function returns a pointer to the interbal AST
-*     status variable or to the external variable specified via astWatch.
-*
-*     Parameter lists for functions that have variable argument lists 
-*     (such as astError) cannot be handled in this way, since macros cannot 
-*     have variable numbers of arguments. Instead, separate public and
-*     protected implementations of such functions are provided within AST.
-*     Protected implementations include an explicit, documented status
-*     pointer parameter that must be given explicitly when invoking the 
-*     function. Public implementations do not have a status pointer 
-*     parameter. Instead they obtain the status pointer internally using
-*     astGetStatusPtr.
-*
-*     Private functions are called directly rather than via macros, and so
-*     they have a documented status pointer parameter that should be
-*     included explicitly in the parameter list when invoking the
-*     function.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008-2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     2-JAN-1996 (RFWS):
-*        Original version.
-*     8-JAN-1996 (RFWS):
-*        Tidied up.
-*     26-JAN-1996 (RFWS):
-*        Incorporated changes to prologue style.
-*     14-JUN-1996 (RFWS):
-*        Added astAt.
-*     20-JUN-1996 (RFWS):
-*        Added astSetStatus.
-*     15-JUL-1996 (RFWS):
-*        Sorted out the public interface.
-*     16-JUL-1996 (RFWS):
-*        Added astWatch.
-*     18-MAR-1998 (RFWS):
-*        Added notes about functions being available for writing
-*        foreign language and graphics interfaces, etc.
-*     27-NOV-2002 (DSB):
-*        Added suppression of error reporting using astReporting.
-*     11-MAR-2004 (DSB):
-*        Add facility to astAt to allow astAt to be called from public
-*        interface without private interface settings over-riding the
-*        public interface settings.
-*     30-MAR-2005 (DSB):
-*        Added facility to report deferred messages when reporting is
-*        switched back on.
-*     16-FEB-2006 (DSB):
-*        Improve efficiency by replacing the astOK_ function with a macro
-*        which tests the value of status variable. The pointer which points 
-*        to the AST status variable are now global rather than static. 
-*     19-SEP-2008 (DSB):
-*        Big changes for the thread-safe version of AST.
-*     3-FEB-2009 (DSB):
-*        Added astBacktrace.
-*/
-
-/* Define the astCLASS macro (even although this is not a class
-   implementation) to obtain access to protected interfaces. */
-#define astCLASS
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "err.h"                 /* Interface to the err module */
-#include "error.h"               /* Interface to this module */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Select the appropriate memory management functions. These will be the
-   system's malloc, free and realloc unless AST was configured with the
-   "--with-starmem" option, in which case they will be the starmem
-   malloc, free and realloc. */
-#ifdef HAVE_STAR_MEM_H
-#  include <star/mem.h>
-#  define MALLOC starMalloc
-#  define FREE starFree
-#  define REALLOC starRealloc
-#else
-#  define MALLOC malloc
-#  define FREE free
-#  define REALLOC realloc
-#endif
-
-/* Include execinfo.h if the backtrace function is available */
-#if HAVE_EXECINFO_H
-#include <execinfo.h>
-#endif
-
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Define macros for accessing all items of thread-safe global data 
-   used by this module. */
-#ifdef THREAD_SAFE
-
-#define reporting astGLOBAL(Error,Reporting)
-#define current_file astGLOBAL(Error,Current_File)
-#define current_routine astGLOBAL(Error,Current_Routine)
-#define current_line astGLOBAL(Error,Current_Line)
-#define foreign_set astGLOBAL(Error,Foreign_Set)
-#define message_stack astGLOBAL(Error,Message_Stack)
-#define mstack_size astGLOBAL(Error,Mstack_Size)
-
-/* Since the external astPutErr function may not be thread safe, we need 
-   to ensure that it cannot be invoked simultaneously from two different
-   threads. So we lock a mutex before each call to astPutErr. */
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-
-#define INVOKE_ASTPUTERR( status, buff ) \
-   ( pthread_mutex_lock( &mutex1 ), \
-     astPutErr( (status), (buff) ), \
-     (void) pthread_mutex_unlock( &mutex1 ) )
-
-/* Define the initial values for the global data for this module. */
-#define GLOBAL_inits \
-   globals->Reporting = 1; \
-   globals->Current_File = NULL;  \
-   globals->Current_Routine = NULL;  \
-   globals->Current_Line = 0; \
-   globals->Foreign_Set = 0; \
-   globals->Mstack_Size = 0; \
-
-/* Create the global initialisation function. */
-astMAKE_INITGLOBALS(Error)
-
-
-/* If thread safety is not needed, declare globals at static variables. */ 
-/* -------------------------------------------------------------------- */ 
-#else
-
-/* Status variable. */
-static int internal_status = 0;  /* Internal error status */
-int *starlink_ast_status_ptr = &internal_status; /* Pointer to status variable */
-
-/* Reporting flag: delivery of message is supressed if zero. */
-static int reporting = 1;         
-
-/* Error context. */
-static const char *current_file = NULL; /* Current file name pointer */
-static const char *current_routine = NULL; /* Current routine name pointer */
-static int current_line = 0;     /* Current line number */
-static int foreign_set = 0;      /* Have foreign values been set? */
-
-/* Un-reported message stack */
-static char *message_stack[ AST__ERROR_MSTACK_SIZE ];
-static int mstack_size = 0;
-
-/* If thread-safety is not needed, we can invoke the external astPutErr 
-   function directly. */
-#define INVOKE_ASTPUTERR( status, buff ) \
-   astPutErr( (status), (buff) ); 
-
-#endif
-
-
-/* Function prototypes. */
-/* ==================== */
-static void EmptyStack( int, int * );
-
-/* Function implementations. */
-/* ========================= */
-void astAt_( const char *routine, const char *file, int line, int forn,
-             int *status) {
-/*
-*+
-*  Name:
-*     astAt
-
-*  Purpose:
-*     Store a routine, file and line number context in case of error.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "error.h"
-*     void astAt( const char *routine, const char *file, int line, int forn)
-
-*  Description:
-*     This function stores a pointer to two strings containing the
-*     names of a routine and a file, together with an integer line
-*     number. These values are retained for subsequent use in
-*     reporting the context of any error that may arise.
-
-*  Parameters:
-*     routine
-*        Pointer to a null terminated C string containing a routine
-*        name (which should reside in static memory).
-*     file
-*        Pointer to a null terminated C string containing a file name
-*        (which should reside in static memory).
-*     line
-*        The line number in the file.
-*     for
-*        Is this call being made from a foreign language interface?
-*        If so any values supplied will take precedence of the values
-*        set by the C interface.
-
-*  Notes:
-*     - This function returns without action (i.e. without changing
-*     the stored values) if the global error status is set. It
-*     performs no other error checking.
-*     - Any (or all) of the arguments may be omitted by supplying a
-*     NULL or zero value (as appropriate) and will then not be included
-*     in any error report.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS             /* Pointer to thread-specific global data */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* If the values refer to a foreign interface, or if no foreign values
-   have yet been set, store the supplied values. */
-   if( forn|| !foreign_set ) {   
-      current_routine = routine;
-      current_file = file;
-      current_line = line;
-   }
-
-/* If the values relate to a foreign interface, set a flag which prevents
-   local values set later replacing them. */
-   foreign_set = forn;
-}
-
-void astBacktrace_( int *status ) {
-/*
-c+
-*  Name:
-*     astBacktrace
-
-*  Purpose:
-*     Display a backtrace on standard output.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "error.h"
-*     astBacktrace;
-
-*  Description:
-*     This macro displays a set of messages on standard output that
-*     give a backtrace of the caller. It can be useful for debugging AST
-*     code in situations when it is not easy or possible to use a
-*     debugger (for instance, when debugging JNIAST).
-
-*  Notes:
-*     - Only non-static function names are included in the backtrace.
-*     - This function requires the GNU C library. When called, it will 
-*     just issue a warning if the GNU 'backtrace' function was not 
-*     available when AST was configured.
-c-
-*/
-#if HAVE_BACKTRACE
-
-#define MAX_ADDR 100
-
-/* Local Variables: */
-   char **strings;           /* Pointer to array of formated strings */
-   char buf[ 120 ];          /* Output line buffer */
-   int j;                    /* String index */
-   int np;                   /* Number of used return addresses */
-   void *buffer[ MAX_ADDR ]; /* Array of return addresses */
-
-/* Get the array of return addresses. */
-   np = backtrace( buffer, MAX_ADDR );
-
-/* Convert them into strings. */
-   strings = backtrace_symbols( buffer, np );
-
-/* If succesful, display them and then free the array. Note we skip the
-   first one since that will refer to this function. */
-   if( strings ) {
-      INVOKE_ASTPUTERR( astStatus, " " );
-      for( j = 1; j < np; j++ ) {
-         sprintf( buf, "%d: %s", j, strings[j] );
-         INVOKE_ASTPUTERR( astStatus, buf );
-      }      
-      free( strings );
-      INVOKE_ASTPUTERR( astStatus, " " );
-
-/* If not succesful, issue a warning. */
-   } else {
-      INVOKE_ASTPUTERR( astStatus, "Cannot convert backtrace addresses into formatted strings" );
-   }
-
-#else
-   INVOKE_ASTPUTERR( astStatus, "Backtrace functionality is not available "
-                     "on the current operating system." );
-#endif
-}
-
-void astClearStatus_( int *status ) {
-/*
-c++
-*  Name:
-*     astClearStatus
-
-*  Purpose:
-*     Clear the AST error status.
-
-*  Type:
-*     Public macro.
-
-*  Synopsis:
-*     #include "error.h"
-*     void astClearStatus
-
-*  Description:
-*     This macro resets the AST error status to an OK value,
-*     indicating that an error condition (if any) has been cleared.
-
-*  Notes:
-*     - If the AST error status is set to an error value (after an
-*     error), most AST functions will not execute and will simply
-*     return without action. Using astClearStatus will restore normal
-*     behaviour.
-c--
-*/
-
-/* Empty the deferred error stack without displaying the messages on the
-   stack. */
-   EmptyStack( 0, status );
-
-/* Reset the error status value. */
-   *status = 0;
-}
-
-static void EmptyStack( int display, int *status ) {
-/*
-*  Name:
-*     EmptyStack
-
-*  Purpose:
-*     Empty the stack of deferred error messages, optionally displaying
-*     them.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "error.h"
-*     void EmptyStack( int display, int *status ) 
-
-*  Description:
-*     This function removes all messages from the stack of deferred error
-*     messages. If "display" is non-zero it reports them using astPutErr
-*     before deleting them.
-
-*  Parameters:
-*     display
-*        Report messages before deleting them?
-*     status
-*        Pointer to the integer holding the inherited status value.
-
-*/
-
-/* Local variables; */
-   astDECLARE_GLOBALS         /* Pointer to thread-specific global data */
-   int i;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Loop round all messages on the stack. */
-   for( i = 0; i < mstack_size; i++ ) {
-
-/* Display the message if required. */
-      if( display ) INVOKE_ASTPUTERR( astStatus, message_stack[ i ] );
-
-/* Free the memory used to hold the message. */
-      FREE( message_stack[ i ] );
-      message_stack[ i ] = NULL;
-   }
-
-/* Reset the stack size to zero. */
-   mstack_size = 0;
-
-}
-
-void astErrorPublic_( int status_value, const char *fmt, ... ) {
-/*
-*+
-*  Name:
-*     astError
-
-*  Purpose:
-*     Set the AST error status and report an error message.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "error.h"
-*     void astError( int status_value, const char *fmt, ... )
-
-*  Description:
-*     This function sets the AST error status to a specified value and
-*     reports an associated error message.
-
-*  Parameters:
-*     status_value
-*        The new error status value to be set.
-*     fmt
-*        Pointer to a null-terminated character string containing the
-*        format specification for the error message, in the same way
-*        as for a call to the C "printf" family of functions.
-*     ...
-*        Additional optional arguments (as used by e.g. "printf")
-*        which specify values which are to appear in the error
-*        message.
-
-*  Notes:
-*     This function operates just like "printf", except that:
-*     - The first argument is an error status.
-*     - The return value is void.
-*     - A newline is automatically appended to the error message
-*     (there is no need to add one).
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-
-*  This is the public implementation of astError. It does not have an
-   status pointer parameter, but instead obtains the status pointer
-   explicitly using the astGetStatusPtr function.  This is different to
-   other public functions, which typically have a status pointer parameter
-   that is supplied via a call to astGetStatusPtr within the associated 
-   interface macro. The benefit of doing it the usual way is that the
-   public and protected implementations are the same, with the
-   differences between public and protecte dinterfaces wrapped up in the
-   associated interface macro. We cannot do this with this function
-   because of the variale argument list. The prologue for the astError_ 
-   function defines the interface for use internally within AST. 
-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 1023            /* Max. length of an error message */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   char buff[ BUFF_LEN + 1 ];    /* Message buffer */
-   int *status;                  /* Pointer to inherited status value */
-   int imess;                    /* Index into deferred message stack */
-   int nc;                       /* Number of characters written */
-   va_list args;                 /* Variable argument list pointer */
-
-/* Initialise the variable argument list pointer. */
-   va_start( args, fmt );
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);   
-
-/* Get a pointer to the integer holding the inherited status value. */
-   status = astGetStatusPtr;
-
-/* If this is the first report of an error (the global status has not
-   previously been set) and error context information is available,
-   then construct an error context message. */
-   if ( astOK &&
-        ( current_routine || current_file || current_line ) ) {
-      nc = sprintf( buff, "AST: Error" );
-      if ( current_routine ) {
-         nc += sprintf( buff + nc, " in routine %s", current_routine );
-      }
-      if ( current_line ) {
-         nc += sprintf( buff + nc, " at line %d", current_line );
-      }
-      if ( current_file ) {
-         nc += sprintf( buff + nc, " in file %s", current_file );
-      }
-      nc += sprintf( buff + nc, "." );
-
-/* Deliver the error message unless reporting has been switched off using
-   astReporting. In which case store them in a static array. */
-      if( reporting ) {
-         INVOKE_ASTPUTERR( status_value, buff );
-      } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
-         imess = mstack_size++;
-         message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
-         if( message_stack[ imess ] ) {
-            strcpy( message_stack[ imess ], buff );                 
-         }
-      }
-
-/* Set the global status. */
-      astSetStatus( status_value );
-   }
-
-/* Write the error message supplied to the formatting buffer. */
-   nc = vsprintf( buff, fmt, args );
-
-/* Tidy up the argument pointer. */
-   va_end( args );
-
-/* Deliver the error message unless reporting has been switched off using
-   astReporting. */
-   if( reporting ) {
-      INVOKE_ASTPUTERR( status_value, buff );
-   } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
-      imess = mstack_size++;
-      message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
-      if( message_stack[ imess ] ) {
-         strcpy( message_stack[ imess ], buff );                 
-      }
-   }
-
-/* Set the error status value. */
-   astSetStatus( status_value );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-void astError_( int status_value, const char *fmt, int *status, ... ) {
-/*
-*+
-*  Name:
-*     astError
-
-*  Purpose:
-*     Set the AST error status and report an error message.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "error.h"
-*     void astError( int status_value, const char *fmt, int *status, ... )
-
-*  Description:
-*     This function sets the AST error status to a specified value and
-*     reports an associated error message.
-
-*  Parameters:
-*     status_value
-*        The error status value to be set.
-*     fmt
-*        Pointer to a null-terminated character string containing the
-*        format specification for the error message, in the same way
-*        as for a call to the C "printf" family of functions.
-*     status
-*        Pointer to the integer holding the inherited status value.
-*     ...
-*        Additional optional arguments (as used by e.g. "printf")
-*        which specify values which are to appear in the error
-*        message.
-
-*  Notes:
-*     This function operates just like "printf", except that:
-*     - The first argument is an error status.
-*     - The return value is void.
-*     - A newline is automatically appended to the error message
-*     (there is no need to add one).
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-
-*  This is the protected implementation of astError. It has a status
-   pointer parameter that is not present in the public form. Different
-   implementations for protected and public interfaces are required
-   because of the variable argument list. 
-
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 1023            /* Max. length of an error message */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   char buff[ BUFF_LEN + 1 ];    /* Message buffer */
-   int imess;                    /* Index into deferred message stack */
-   int nc;                       /* Number of characters written */
-   va_list args;                 /* Variable argument list pointer */
-
-/* Initialise the variable argument list pointer. */
-   va_start( args, status );
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);   
-
-/* If this is the first report of an error (the global status has not
-   previously been set) and error context information is available,
-   then construct an error context message. */
-   if ( astOK &&
-        ( current_routine || current_file || current_line ) ) {
-      nc = sprintf( buff, "AST: Error" );
-      if ( current_routine ) {
-         nc += sprintf( buff + nc, " in routine %s", current_routine );
-      }
-      if ( current_line ) {
-         nc += sprintf( buff + nc, " at line %d", current_line );
-      }
-      if ( current_file ) {
-         nc += sprintf( buff + nc, " in file %s", current_file );
-      }
-      nc += sprintf( buff + nc, "." );
-
-/* Deliver the error message unless reporting has been switched off using
-   astReporting. In which case store them in a static array. */
-      if( reporting ) {
-         INVOKE_ASTPUTERR( status_value, buff );
-      } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
-         imess = mstack_size++;
-         message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
-         if( message_stack[ imess ] ) {
-            strcpy( message_stack[ imess ], buff );                 
-         }
-      }
-
-/* Set the global status. */
-      astSetStatus( status_value );
-   }
-
-/* Write the error message supplied to the formatting buffer. */
-   nc = vsprintf( buff, fmt, args );
-
-/* Tidy up the argument pointer. */
-   va_end( args );
-
-/* Deliver the error message unless reporting has been switched off using
-   astReporting. */
-   if( reporting ) {
-      INVOKE_ASTPUTERR( status_value, buff );
-   } else if( mstack_size < AST__ERROR_MSTACK_SIZE ){
-      imess = mstack_size++;
-      message_stack[ imess ] = MALLOC( strlen( buff ) + 1 );
-      if( message_stack[ imess ] ) {
-         strcpy( message_stack[ imess ], buff );                 
-      }
-   }
-
-/* Set the error status value. */
-   astSetStatus( status_value );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-int *astGetStatusPtr_(){ 
-/*
-*+
-*  Name:
-*     astGetStatusPtr
-
-*  Purpose:
-*     Return a pointer to the integer holding the inherited status value.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "error.h"
-*     int *astGetStatusPtr;
-
-*  Description:
-*     This macro returns a pointer to the integer holding the inherited
-*     status pointer. This will either be an internal global integer 
-*     (possibly stored as thread specific data), or an ineger specified
-*     via the astWatch function.
-
-*  Returned Value:
-*      A pointer to the integer holding the inherited status value.
-
-*-
-*/
-
-/* The thread-safe version of AST stores the status pointer in thread
-   specific data, using the key stored in the global variable
-   "starlink_ast_status_key". */
-#if defined(THREAD_SAFE)
-   astDECLARE_GLOBALS         
-   AstStatusBlock *sb;
-
-   astGET_GLOBALS(NULL);
-   sb = (AstStatusBlock *) pthread_getspecific(starlink_ast_status_key);
-   return sb->status_ptr;
-
-/* The non thread-safe version of AST stores the status pointer in the
-   global variable "starlink_ast_status_ptr". */
-#else
-   return starlink_ast_status_ptr;
-#endif
-}
-
-/*
-c++
-*  Name:
-*     astOK
-
-*  Purpose:
-*     Test whether AST functions have been successful.
-
-*  Type:
-*     Public macro.
-
-*  Synopsis:
-*     #include "error.h"
-*     int astOK
-
-*  Description:
-*     This macro returns a boolean value (0 or 1) to indicate if
-*     preceding AST functions have completed successfully
-*     (i.e. without setting the AST error status). If the error status
-*     is set to an error value, a value of zero is returned, otherwise
-*     the result is one.
-
-*  Returned Value:
-*     astOK
-*        One if the AST error status is OK, otherwise zero.
-
-*  Notes:
-*     - If the AST error status is set to an error value (after an
-*     error), most AST functions will not execute and will simply
-*     return without action. To clear the error status and restore
-*     normal behaviour, use astClearStatus.
-c--
-*/
-
-
-int astReporting_( int report, int *status ) {
-/*
-c+
-*  Name:
-*     astReporting
-
-*  Purpose:
-*     Controls the reporting of error messages.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "error.h"
-*     int astReporting( int report )
-
-*  Description:
-*     Error messages supplied to astError will only be delivered to the
-*     underlying error system if the "Reporting" flag is set to a
-*     non-zero value. Setting this flag to zero suppresses the reporting
-*     of error messages (the value of the AST error status however is
-*     unaffected). Instead, the reports are saved in an internal message
-*     stack. When reporting is switched back on again, any messages on this 
-*     stack of deferred messages will be reported (and the stack emptied) 
-*     if the AST error status is not astOK. Also the stack is emptied each 
-*     time astClearStatus is called (the stacked messages are not displayed 
-*     in this case).
-
-*  Parameters:
-*     report
-*        The new value for the Reporting flag.
-
-*  Returned Value:
-*     The original value of the Reporting flag.
-
-*  Notes:
-*     - The Reporting flag is initially set to 1.
-c-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS         /* Pointer to thread-specific global data */
-   int oldval;                /* Original "reporting" value */
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Save the original reporting value, and then store the new value. */
-   oldval = reporting;
-   reporting = report;
-
-/* If we are now reporting errors, flush any messages on the error stack.
-   This causes the messages to be displayed and the stack emptied. */
-   if( reporting ) EmptyStack( 1, status );
-
-/* Return the original reporting value. */
-   return oldval;
-}
-
-/*
-c++
-*  Name:
-*     astSetStatus
-
-*  Purpose:
-*     Set the AST error status to an explicit value.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "error.h"
-*     void astSetStatus( int status_value )
-
-*  Description:
-*     This function sets the AST error status to the value supplied.
-*     It does not cause any error message to be produced and should
-*     not be used as part of normal error reporting. Its purpose is
-*     simply to communicate to AST that an error has occurred in some
-*     other item of software.
-*
-*     For example, a source or sink function supplied as an argument
-*     to astChannel or astFitsChan might use this to signal that an
-*     input/output error has occurred. AST could then respond by
-*     terminating the current read or write operation.
-
-*  Parameters:
-*     status_value
-*        The new error status value to be set.
-
-*  Notes:
-*     - If the AST error status is set to an error value, most AST
-*     functions will not execute and will simply return without
-*     action. To clear the error status and restore normal behaviour,
-*     use astClearStatus.
-c--
-*/
-
-/*
-c++
-*  Name:
-*     astStatus
-
-*  Purpose:
-*     Obtain the current AST error status value.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "error.h"
-*     int astStatus
-
-*  Description:
-*     This function returns the current value of the AST error status.
-
-*  Returned Value:
-*     astStatus
-*        The AST error status value.
-
-*  Notes:
-*     - If the AST error status is set to an error value (after an
-*     error), most AST functions will not execute and will simply
-*     return without action. To clear the error status and restore
-*     normal behaviour, use astClearStatus.
-c--
-*/
-
-int *astWatch_( int *status_ptr ) {
-/*
-c++
-*  Name:
-*     astWatch
-
-*  Purpose:
-*     Identify a new error status variable for the AST library.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "error.h"
-*     int *astWatch( int *status_ptr )
-
-*  Description:
-*     This function allows a new error status variable to be accessed
-*     by the AST library when checking for and reporting error
-*     conditions.
-*
-*     By default, the library uses an internal integer error status
-*     which is set to an error value if an error occurs. Use of
-*     astWatch allows the internal error status to be replaced by an
-*     integer variable of your choosing, so that the AST library can
-*     share its error status directly with other code which uses the
-*     same error detection convention.
-*
-*     If an alternative error status variable is supplied, it is used
-*     by all related AST functions and macros (e.g. astOK, astStatus
-*     and astClearStatus).
-
-*  Parameters:
-*     status_ptr
-*        Pointer to an int whose value is to be used subsequently as
-*        the AST inherited status value. If a NULL pointer is supplied, 
-*        the AST library will revert to using its own internal error status.
-
-*  Returned Value:
-*     astWatch()
-*        Address of the previous error status variable. This may later
-*        be passed back to astWatch to restore the previous behaviour
-*        of the library. (Note that on the first invocation of
-*        astWatch the returned value will be the address of the
-*        internal error status variable.)
-
-*  Notes:
-*     - This function is not available in the FORTRAN 77 interface to
-*     the AST library.
-c--
-*/
-
-/* Local Variables: */
-   int *result;               /* Value to be returned */
-   astDECLARE_GLOBALS         /* Pointer to thread-specific global data */
-
-#if defined(THREAD_SAFE)
-       AstStatusBlock *sb = NULL;
-#endif
-
-/* Ensure that the thread-specific status block has been created and
-   ininitialised. */
-   astGET_GLOBALS(NULL);
-
-#if defined(THREAD_SAFE)
-   sb = (AstStatusBlock *) pthread_getspecific( starlink_ast_status_key );
-   result = sb->status_ptr;
-   sb->status_ptr = status_ptr ? status_ptr : &(sb->internal_status);
-#else
-   result = starlink_ast_status_ptr;
-   starlink_ast_status_ptr = status_ptr ? status_ptr : &internal_status;
-#endif
-
-/* Return the old address. */
-   return result;
-}
-
-
diff --git a/ast-5.3-1/error.h b/ast-5.3-1/error.h
deleted file mode 100644
index 8e37f46..0000000
--- a/ast-5.3-1/error.h
+++ /dev/null
@@ -1,327 +0,0 @@
-#if !defined( ERROR_INCLUDED )   /* Include this file only once */
-#define ERROR_INCLUDED 1
-/*
-*+
-*  Name:
-*     error.h
-
-*  Purpose:
-*     Define the interface to the Error module.
-
-*  Description:
-*     This module defines functions which implement error handling and
-*     reporting of error messages from within the AST library. A
-*     simple public interface is included to allow the AST error
-*     status to be tested and cleared after an error.
-*
-*     Note that this module is not a class implementation, although it
-*     resembles one.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S Berry (Starlink)
-*     NG: Norman Gray (Starlink)
-
-*  History:
-*     2-JAN-1996 (RFWS):
-*        Original version.
-*     26-JAN-1996 (RFWS):
-*        Added function interfaces.
-*     14-JUN-1996 (RFWS):
-*        Added AST__FAC and astAt.
-*     20-JUN-1996 (RFWS):
-*        Added astSetStatus.
-*     16-JUL-1996 (RFWS):
-*        Added astWatch.
-*     18-MAR-1998 (RFWS):
-*        Make interface available for writing foreign language and
-*        graphics interfaces, etc.
-*     27-NOV-2002 (DSB):
-*        Added astReporting.
-*     14-MAR-2005 (NG):
-*        Added astAssert
-*     20-MAY-2005 (DSB):
-*        Modified astAssert so that it does nothing if the AST error
-*        status is already set, and also so that does nothing unless 
-*        the DEBUG macro is defined.
-*     16-FEB-2006 (DSB):
-*        Improve efficiency by replacing the astOK_ function with a macro
-*        which tests the value of status variable. The pointer which points
-*        to the status variable are now global rather than static. 
-*     1-MAR-2006 (DSB):
-*        Remove astAssert.
-*     19-SEP-2008 (DSB)
-*        Big changes for thread-safe version of AST.
-*-
-*/
-
-/* Suppress "operands are evaluated in unspecified order" warnings from
-   the Intel icc compiler. These are caused by the astGetStatusPtr_
-   function being called several times within each of the macros that 
-   form the public interface for AST. */
-#ifdef __INTEL_COMPILER
-#pragma warning(disable:981)
-#endif
-
-
-/* Include files. */
-/* ============== */
-#if defined(THREAD_SAFE)
-#include <pthread.h>
-#endif
-
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77) /* Protected */
-
-/* Define a facility number that is unique to this library.  The number here
- * is the facility code assigned to the AST library, but it doesn't have to
- * be this number -- it only has to be probably unique.  If that code were
- * ever to change, then you can update this number if you feel it's tidier
- * that way. */
-#define AST__FAC (1521)
-
-/* Max number of messages which can be deferred when reporting is
-   switched off. */
-#define AST__ERROR_MSTACK_SIZE 100
-
-#endif
-
-/* This macro expands to an invocation of a specified function, together
-   with a call to astAt to record the file and line number at which the
-   invocation occurs. These are included in public error reports. This is
-   only done for invocations from outside of AST (i.e. public invocations).*/
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define astERROR_INVOKE(function) (function)
-#else
-#define astERROR_INVOKE(function) (astAt_(NULL,__FILE__,__LINE__,0,astGetStatusPtr),(function))
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type definitions */
-/* ================ */
-
-/* Define a structure to hold information about an error context. */
-typedef struct AstErrorContext {
-   int reporting;   /* Value of error reporting flag at start of context */
-   int ok;          /* Was the status value OK at start of context? */
-   int status;      /* The status value at the start of the context */
-} AstErrorContext;
-
-#if defined(THREAD_SAFE) && ( defined(astCLASS) || defined(astFORTRAN77) )
-
-/* Define a structure holding all data items that are global within the
-   error.c file. */
-typedef struct AstErrorGlobals {
-
-/* Reporting flag: delivery of message is supressed if zero. */
-   int Reporting;
-
-/* Error context. */
-   const char *Current_File;     /* Current file name pointer */
-   const char *Current_Routine;  /* Current routine name pointer */
-   int Current_Line;             /* Current line number */
-   int Foreign_Set;              /* Have foreign values been set? */
-
-/* Un-reported message stack */
-   char *Message_Stack[ AST__ERROR_MSTACK_SIZE ];
-   int Mstack_Size;
-
-} AstErrorGlobals;
-
-/* Structure to hold the internal status variable, and the status
-   pointer for a single thread. */
-typedef struct AstStatusBlock {
-   int internal_status;
-   int *status_ptr;
-} AstStatusBlock;
-
-#endif
-
-
-/* Function Macros. */
-/* ================ */
-
-#if defined(astCLASS)
-
-/*
-*+
-*  Name:
-*     astErrorBegin
-
-*  Purpose:
-*     Begin a new error reporting context.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "error.h"
-*     astErrorBegin( AstErrorContext *context );
-
-*  Description:
-*     This macro starts a new error reporting context. It saves any 
-*     existing error status in the supplied ontext structure, and then 
-*     clears the status value. It also defers further error reporting. 
-*
-*     Each invocation of this macro should be followed (eventually) by a
-*     matching invocation of astErrorEnd.
-
-*  Parameters:
-*     context
-*        Pointer to a structure in which to to storeinformation about the
-*        current error reporting context. This structure should be passed
-*        unchanged to the corresponding invocation of astErrorEnd.
-
-*-
-*/
-#define astErrorBegin(context) {\
-\
-/* Save the original error status value. */ \
-   (context)->status = astStatus; \
-\
-/* Save a flag indicating if the original error status was good. */ \
-   (context)->ok = astOK; \
-\
-/* Switch off the immediate delivery of error messages, recording the  \
-   original value of the reporting flag. */ \
-   (context)->reporting = astReporting( 0 ); \
-\
-/* Clear any existing error condition. */ \
-   astClearStatus; \
-}
-
-
-/*
-*+
-*  Name:
-*     astErrorEnd
-
-*  Purpose:
-*     End an error reporting context.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "error.h"
-*     astErrorEnd( AstErrorContext *context );
-
-*  Description:
-*     This macro ends an error reporting context started using
-*     astErrorBegin. 
-*
-*     Each invocation of this macro should correspond to an earlier 
-*     invocation of astErrorBegin.
-
-*  Parameters:
-*     context
-*        Pointer to a structure holding information returned by the
-*        matching invocation of astErrorBegin.
-
-*-
-*/
-#define astErrorEnd(context) { \
-\
-/* If an error condition existed when astErrorBegin was called, and \
-   another error has since occurred, clear the deferred messages \
-   reported during the error context without displaying them. */ \
-   if( !(context)->ok && !astOK ) astClearStatus; \
-\
-/* Put the error reporting flag back to its original value. This will \
-   have the effect of displaying any remaining errors reported within \
-   the error context (they will already have been cleared if an error \
-   condition existed at the start of the context). */ \
-   astReporting( (context)->reporting ); \
-\
-/* If an error condition existed at the start of the context, re-instate \
-   the original status value. */ \
-   if( !(context)->ok ) astSetStatus( (context)->status ); \
-}
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-
-int *astWatch_( int * );
-void astClearStatus_( int * );
-int *astGetStatusPtr_( void )__attribute__((pure));
-void astAt_( const char *, const char *, int, int, int * );
-
-#if defined(astCLASS) || defined(astFORTRAN77)      /* Protected only */
-int astReporting_( int, int * );
-void astError_( int, const char *, int *, ... )__attribute__((format(printf,2,4)));
-void astBacktrace_( int * );
-#if defined(THREAD_SAFE) 
-void astInitErrorGlobals_( AstErrorGlobals * );
-#endif
-#endif
-
-void astErrorPublic_( int, const char *, ... )__attribute__((format(printf,2,3)));
-
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module to make them
-   easier to use. */
-
-#define astWatch(status_ptr) astWatch_(status_ptr)
-#define astGetStatusPtr astGetStatusPtr_()
-#define astOK (astStatus==0)
-#define astSetStatus(status_value) (astStatus=(status_value))
-
-#if defined(astCLASS)     /* Protected */
-
-#define astAt(routine,file,line) astAt_(routine,file,line,0,status)
-#define astClearStatus astClearStatus_(status)
-#define astStatus (*status)
-#define astError astError_
-#define astReporting(report) astReporting_(report,status)
-#define astBacktrace astBacktrace_(status)
-
-#elif defined(astFORTRAN77)
-
-#define astAt(routine,file,line) astAt_(routine,file,line,1,STATUS)
-#define astClearStatus astClearStatus_(status)
-#define astStatus (*status)
-#define astError astError_
-#define astReporting(report) astReporting_(report,status)
-
-#else
-
-#define astAt(routine,file,line) astAt_(routine,file,line,1,astGetStatusPtr)
-#define astClearStatus astClearStatus_(astGetStatusPtr)
-#define astStatus (*astGetStatusPtr)
-#define astError astErrorPublic_
-
-#endif
-
-#endif
diff --git a/ast-5.3-1/f77.h b/ast-5.3-1/f77.h
deleted file mode 100644
index f518cbc..0000000
--- a/ast-5.3-1/f77.h
+++ /dev/null
@@ -1,1038 +0,0 @@
-/*
-*+
-*  Name:
-*     f77.h and cnf.h
-
-*  Purpose:
-*     C - FORTRAN interace macros and prototypes
-
-*  Language:
-*     C (part ANSI, part not)
-
-*  Type of Module:
-*     C include file
-
-*  Description:
-*     For historical reasons two files, F77.h and cnf.h are required
-*     but the have now been combined and for new code, only one is 
-*     necessary.
-*
-*     This file defines the macros needed to write C functions that are
-*     designed to be called from FORTRAN programs, and to do so in a
-*     portable way. Arguments are normally passed by reference from a
-*     FORTRAN program, and so the F77 macros arrange for a pointer to
-*     all arguments to be available. This requires no work on most
-*     machines, but will actually generate the pointers on a machine
-*     that passes FORTRAN arguments by value.
-
-*  Notes:
-*     -  Macros are provided to handle the conversion of logical data
-*        values between the way that FORTRAN represents a value and the
-*        way that C represents it.
-*     -  Macros are provided to convert variables between the FORTRAN and
-*        C method of representing them. In most cases there is no
-*        conversion required, the macros just arrange for a pointer to
-*        the FORTRAN variable to be set appropriately. The possibility that
-*        FORTRAN and C might use different ways of representing integer
-*        and floating point values is considered remote, the macros are
-*        really only there for completeness and to assist in the automatic 
-*        generation of C interfaces.
-*     -  For character variables the macros convert between
-*        the FORTRAN method of representing them (fixed length, blank
-*        filled strings) and the C method (variable length, null
-*        terminated strings) using calls to the CNF functions.
-
-*  Implementation Deficiencies:
-*     -  The macros support the K&R style of function definition, but
-*        this file may not work with all K&R compilers as it contains
-*        "#if defined" statements. These could be replaced with #ifdef's
-*        if necessary. This has not been done as is would make the code
-*        less clear and the need for support for K&R sytle definitions
-*        should disappear as ANSI compilers become the default.
-
-*  Copyright:
-*     Copyright (C) 1991, 1993 Science & Engineering Research Council
-*     Copyright (C) 2006 Particle Physics and Astronomy Research Council
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public License as
-*     published by the Free Software Foundation; either version 2 of
-*     the License, or (at your option) any later version.
-*     
-*     This program is distributed in the hope that it will be
-*     useful,but WITHOUT ANY WARRANTY; without even the implied
-*     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-*     PURPOSE. See the GNU General Public License for more details.
-*     
-*     You should have received a copy of the GNU General Public License
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     PMA: Peter Allan (Starlink, RAL)
-*     AJC: Alan Chipperfield (Starlink, RAL)
-*     PWD: Peter W. Draper (JAC, Durham University)
-*     {enter_new_authors_here}
-
-*  History:
-*     23-MAY-1991 (PMA):
-*        Original version.
-*     19-JUN-1991 (PMA):
-*        Removed VMS versions of IM(EX)PORT_LOGICAL macros that tried
-*        to convert data representations.
-*     24-JUN-1991 (PMA):
-*        Changed the names of IMPORT macros to GENPTR.
-*        Removed the EXPORT macros.
-*     27-JUN-1991 (PMA):
-*        Modified DECstation specific stuff to allow use of the c89
-*        compiler.
-*      8-JUL-1991 (PMA):
-*        Added macros to call FORTRAN from C.
-*     16-OCT-1991 (PMA):
-*        Remove type_ARRAY2 definitions.
-*        Remove the length argument from CHARACTER_ARRAY and the
-*        dimension specifier from GENPTR_type_ARRAY.
-*        Add extra brackets to F77_ISFALSE and F77_ISTRUE.
-*     25-OCT-1991 (PMA):
-*        Changed "if defined(sun4)" to "if defined(sun)"
-*     2-JUN-1992 (PMA):
-*        Changed "if defined(mips)" to "if defined(ultrix)" to prevent
-*        those definitions being used on a Silicon Graphics machine.
-*     11-JUN-1992 (PMA):
-*        Changed "if defined(ultrix)" back to "if defined(mips)" so that
-*        it still works on OSF/1 on a DECstation.
-*        Add support for general non-ANSI compilers, but not basic K&R
-*        ones.
-*     12-JUN-1992 (PMA):
-*        Change declaration of dummy scalar arguments to be const
-*        pointers.  Change declaration of dummy array arguments to be
-*        const pointers.
-*     5-JAN-1993 (PMA):
-*        Changed "if defined(mips)" so that it will recognise a
-*        DECstation running Ultrix or OSF/1, but not a Silicon Graphics
-*        workstation.
-*        Change the definition of F77_BYTE_TYPE to add "signed".
-*        Redefine this on VMS where signed is invalid syntax.
-*        Add new types of UBYTE and UWORD.
-*     8-JAN-1993 (PMA):
-*        Fix bug in the definition of CHARACTER_RETURN_VALUE. There was
-*        an extraneous space.
-*        Add a macro F77_POINTER_TYPE and use it to define POINTER.
-*     13-JAN-1993 (PMA):
-*        Start to add support for K&R function definitions. These are
-*        done on a per machine basis.
-*     16-APR-1993 (PMA):
-*        Change the definition of F77_POINTER_TYPE from int to unsigned
-*        int.
-*     7-MAY-1993 (PMA):
-*        Change from using a null comment as a token concatenation
-*        operator to using the internal macro _f77_x on non-ANSI
-*        systems.
-*     10-MAY-1993 (PMA):
-*        Finish adding K&R support. This will form version 2.0 of F77.
-*     10-MAY-1993 (PMA):
-*        Add support for Alpha OSF/1.
-*     9-JUL-1993 (PMA):
-*        Add further POINTER macros: POINTER_ARRAY,
-*        GENPTR_POINTER_ARRAY, DECLARE_POINTER, DECLARE_POINTER_ARRAY,
-*        POINTER_ARG, POINTER_ARRAY_ARG, F77_POINTER_FUNCTION,
-*        KR_POINTER_ARRAY.
-*     24-AUG-1993 (PMA):
-*        Add const to the VMS definitions of CHARACTER and CHARACTER_ARRAY.
-*     3-NOV-1993 (PMA):
-*        Remove K&R stuff to a separate file.
-*        Released on Unix as version 2.0 of CNF.
-*     11-NOV-1993 (PMA):
-*        Return to using the null comment to concatenate text on non-ANSI
-*        systems as _f77_x caused problems with the c89 -common flag on
-*        DECstations.
-*     23-JAN-1996 (AJC):
-*        Add SUBROUTINE, type_FUNCTION, SUBROUTINE_ARG,
-*        type_FUNCTION_ARG, GENPTR_SUBROUTINE and GENPTR_type_FUNCTION
-*        required for passed subroutine and function name.
-*     29-JAN-1996 (AJC):
-*        Add the dynamic CHARACTER_ macros
-*        and CHARACTER_ARG_TYPE
-*     22-FEB-1996 (AJC):
-*        Add CHARACTER_RETURN_ARG
-*     23-MAY-1996 (AJC):
-*        Add DECLARE_CHARACTER_ARRAY_DYN
-*            F77_CREATE_CHARACTER_ARRAY
-*            F77_CHARACTER_ARG_TYPE
-*     14-JUN-1996 (AJC):
-*        Add DECLARE_LOGICAL_ARRAY_DYN
-*            F77_CREATE_LOGICAL_ARRAY
-*     21-JUN-1996 (AJC):
-*        Add cast to _ARRAY_ARGs to allow multidimensional arrays
-*     17-MAR-1998 (AJC):
-*        Add DECLARE, CREATE and FREE dynamic array macros for all types
-*        Changed CREATE_CHARACTER_ARRAY and CREATE_LOGICAL_ARRAY to use
-*         number of elements rather than dimensions.
-*        Add IMPORT, EXPORT and ASSOC macros
-*     22-JUL-1998 (AJC):
-*        Combined F77.h and cnf.h
-*     23-SEP-1998 (AJC):
-*        Input strings for cnf -> const char *
-*        Input int arrays for cnf -> const int *
-*      4-NOV-1998 (AJC):
-*        Bring cnf prototypes in line with .c routines
-*      8-FEB-1999 (AJC):
-*        Added cnf_mem stuff
-*      9-FEB-1999 (AJC):
-*        Use cnf_cptr/fptr for IMPORT/EXPORT_POINTER
-*     16-FEB-1999 (AJC):
-*        Added missing cnf_fptr prototype
-*     23-JUN-1999 (AJC):
-*        Change cnf_name to cnfName
-*        and add macros for cnf_name
-*      1-DEC-1999 (AJC):
-*        Add define cnf_free
-*      7-JAN-2000 (AJC):
-*        Correct omission of F77_ASSOC_UBYTE_ARRAY
-*        Correct F77_EXPORT_UWORD_ARRAY
-*      21-JUN-2006 (PWD):
-*        Changed to use a different return type for REAL functions. This
-*        effects g77 under 64-bit, when the f2c bindings expect the return
-*        value of a REAL function to be a double, not a float. Note this 
-*        file is now a branch of the CNF version (no starmem dependency).
-*      13-JUL-2007 (PWD):
-*        Parameterise the type of Fortran character string lengths. Can
-*        be long.
-*     {enter_further_changes_here}
-*        
-
-*  Bugs:
-*     {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-#if !defined(CNF_MACROS)
-#define CNF_MACROS
-
-#include <stdlib.h>
-/*  This initial sections defines values for all macros. These are the	    */
-/*  values that are generally appropriate to an ANSI C compiler on Unix.    */
-/*  For macros that have different values on other systems, the macros	    */
-/*  should be undefined and then redefined in the system specific sections. */
-/*  At the end of this section, some macros are redefined if the compiler   */
-/*  is non-ANSI.							    */
-
-
-#if defined(__STDC__) || defined(VMS)
-#define CNF_CONST const
-#else
-#define CNF_CONST
-#endif
-
-/*  -----  Macros common to calling C from FORTRAN and FORTRAN from C  ---- */
-
-
-/*  ---  External Names  ---						    */
-
-/*  Macro to define the name of a Fortran routine or common block. This	    */
-/*  ends in an underscore on many Unix systems.				    */
-
-#define F77_EXTERNAL_NAME(X) X ## _
-
-
-/*  ---  Logical Values  ---						    */
-
-/*  Define the values that are used to represent the logical values TRUE    */
-/*  and FALSE in Fortran.						    */
-
-#define F77_TRUE 1
-#define F77_FALSE 0
-
-/*  Define macros that evaluate to C logical values, given a FORTRAN	    */
-/*  logical value.							    */
-
-#define F77_ISTRUE(X) ( X )
-#define F77_ISFALSE(X) ( !( X ) )
-
-
-/*  ---  Common Blocks  ---						    */
-
-/*  Macros used in referring to FORTRAN common blocks.			    */
-
-#define F77_BLANK_COMMON                _BLNK__
-#define F77_NAMED_COMMON(B)             F77_EXTERNAL_NAME(B)
-
-
-
-/*  ------------------  Calling C from FORTRAN  --------------------------- */
-
-
-/*  ---  Data Types  ---						    */
-
-/*  Define macros for all the Fortran data types (except COMPLEX, which is  */
-/*  not handled by this package).					    */
-
-#define F77_INTEGER_TYPE   int 
-#define F77_REAL_TYPE      float 
-#define F77_REAL_FUNCTION_TYPE      float
-#define F77_DOUBLE_TYPE    double 
-#define F77_LOGICAL_TYPE   int
-#define F77_CHARACTER_TYPE char
-#define F77_BYTE_TYPE      signed char
-#define F77_WORD_TYPE      short int
-#define F77_UBYTE_TYPE     unsigned char
-#define F77_UWORD_TYPE     unsigned short int
-
-/*  Define macros for the type of a CHARACTER and CHARACTER_ARRAY argument  */
-#define F77_CHARACTER_ARG_TYPE char
-#define F77_CHARACTER_ARRAY_ARG_TYPE char
-
-/*  Define a macro to use when passing arguments that STARLINK FORTRAN	    */
-/*  treats as a pointer. From the point of view of C, this type should be   */
-/*  (void *), but it is declared as type unsigned int as we actually pass   */
-/*  an INTEGER from the FORTRAN routine. The distinction is important for   */
-/*  architectures where the size of an INTEGER is not the same as the size  */
-/*  of a pointer.							    */
-
-#define F77_POINTER_TYPE   unsigned int
-
-
-/*  ---  Subroutine Names  ---						    */
-
-/* This declares that the C function returns a value of void.		    */
-
-#define F77_SUBROUTINE(X)  void F77_EXTERNAL_NAME(X)
-
-
-/*  ---  Function Names  ---						    */
-
-/*  Macros to define the types and names of functions that return values.   */
-/*  Due the the different ways that function return values could be	    */
-/*  implemented, it is better not to use functions, but to stick to using   */
-/*  subroutines.							    */
-
-/*  Character functions are implemented, but in a way that cannot be	    */
-/*  guaranteed to be portable although it will work on VMS, SunOS, Ultrix   */
-/*  and DEC OSF/1. It would be better to return the character value as a    */
-/*  subroutine argument where possible, rather than use a character	    */
-/*  function.								    */
-
-#define F77_INTEGER_FUNCTION(X)   F77_INTEGER_TYPE F77_EXTERNAL_NAME(X)
-#define F77_REAL_FUNCTION(X)      F77_REAL_FUNCTION_TYPE F77_EXTERNAL_NAME(X)
-#define F77_DOUBLE_FUNCTION(X)    F77_DOUBLE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_LOGICAL_FUNCTION(X)   F77_LOGICAL_TYPE F77_EXTERNAL_NAME(X)
-#define F77_CHARACTER_FUNCTION(X) void F77_EXTERNAL_NAME(X)
-#define F77_BYTE_FUNCTION(X)      F77_BYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_WORD_FUNCTION(X)      F77_WORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UBYTE_FUNCTION(X)     F77_UBYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UWORD_FUNCTION(X)     F77_UWORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_POINTER_FUNCTION(X)   F77_POINTER_TYPE F77_EXTERNAL_NAME(X)
-
-
-/*  ---  Character return value for a function  ---			    */
-
-#define CHARACTER_RETURN_VALUE(X) CHARACTER(X) TRAIL(X)
-#define CHARACTER_RETURN_ARG(X) CHARACTER_ARG(X) TRAIL_ARG(X)
-
-/*  ---  Dummy Arguments  ---						    */
-
-/*  Macros for defining subroutine arguments. All these macros take a	    */
-/*  single argument; the name of the parameter. On most systems, a numeric  */
-/*  argument is passed as a pointer.					    */
-
-#define INTEGER(X)     F77_INTEGER_TYPE *CNF_CONST X
-#define REAL(X)        F77_REAL_TYPE    *CNF_CONST X
-#define DOUBLE(X)      F77_DOUBLE_TYPE  *CNF_CONST X
-#define LOGICAL(X)     F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE(X)        F77_BYTE_TYPE    *CNF_CONST X
-#define WORD(X)        F77_WORD_TYPE    *CNF_CONST X
-#define UBYTE(X)       F77_UBYTE_TYPE   *CNF_CONST X
-#define UWORD(X)       F77_UWORD_TYPE   *CNF_CONST X
-
-/*  Pointer arguments. Define a pointer type for passing pointer values	    */
-/*  between subroutines.						    */
-
-#define POINTER(X)     F77_POINTER_TYPE *CNF_CONST X
-
-/*  EXTERNAL arguments. Define a passed subroutine or function name */
-#define SUBROUTINE(X)  void (*X)()
-#define INTEGER_FUNCTION(X)  F77_INTEGER_TYPE (*X)()
-#define REAL_FUNCTION(X)  F77_REAL_TYPE (*X)()
-#define DOUBLE_FUNCTION(X)  F77_DOUBLE_TYPE (*X)()
-#define LOGICAL_FUNCTION(X)  F77_LOGICAL_TYPE (*X)()
-#define CHARACTER_FUNCTION(X)  F77_CHARACTER_TYPE (*X)()
-#define BYTE_FUNCTION(X)  F77_BYTE_TYPE (*X)()
-#define WORD_FUNCTION(X)  F77_WORD_TYPE (*X)()
-#define UBYTE_FUNCTION(X)  F77_UBYTE_TYPE (*X)()
-#define UWORD_FUNCTION(X)  F77_UWORD_TYPE (*X)()
-#define POINTER_FUNCTION(X)  F77_POINTER_TYPE (*X)()
-
-/*  Array arguments.							    */
-
-#define INTEGER_ARRAY(X)     F77_INTEGER_TYPE *CNF_CONST X
-#define REAL_ARRAY(X)        F77_REAL_TYPE    *CNF_CONST X
-#define DOUBLE_ARRAY(X)      F77_DOUBLE_TYPE  *CNF_CONST X
-#define LOGICAL_ARRAY(X)     F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE_ARRAY(X)        F77_BYTE_TYPE    *CNF_CONST X
-#define WORD_ARRAY(X)        F77_WORD_TYPE    *CNF_CONST X
-#define UBYTE_ARRAY(X)       F77_UBYTE_TYPE   *CNF_CONST X
-#define UWORD_ARRAY(X)       F77_UWORD_TYPE   *CNF_CONST X
-
-#define POINTER_ARRAY(X)     F77_POINTER_TYPE *CNF_CONST X
-
-/*  Macros to handle character arguments.				    */
-
-/*  Character arguments can be passed in many ways. The purpose of these    */
-/*  macros and the GENPTR_CHARACTER macro (defined in the next section) is  */
-/*  to generate a pointer to a character variable called ARG and an integer */
-/*  ARG_length containing the length of ARG. If these two variables are	    */
-/*  available directly from the argument list of the routine, then the	    */
-/*  GENPTR_CHARACTER macro is null, otherwise it works on intermediate	    */
-/*  variables.								    */
-
-#define CHARACTER(X)             F77_CHARACTER_TYPE *CNF_CONST X
-#define TRAIL(X)                 ,int X ## _length
-#define CHARACTER_ARRAY(X)       F77_CHARACTER_TYPE *CNF_CONST X
-
-
-/*  ---  Getting Pointers to Arguments  ---				    */
-
-/*  Macros that ensure that a pointer to each argument is available for the */
-/*  programmer to use. Usually this means that these macros are null. On    */
-/*  VMS, a pointer to a character variable has to be generated. If a	    */
-/*  particular machine were to pass arguments by reference, rather than by  */
-/*  value, then these macros would construct the appropriate pointers.	    */
-
-#define GENPTR_INTEGER(X)
-#define GENPTR_REAL(X)
-#define GENPTR_DOUBLE(X)
-#define GENPTR_CHARACTER(X)
-#define GENPTR_LOGICAL(X)
-#define GENPTR_BYTE(X)
-#define GENPTR_WORD(X)
-#define GENPTR_UBYTE(X)
-#define GENPTR_UWORD(X)
-#define GENPTR_POINTER(X)
-
-#define GENPTR_INTEGER_ARRAY(X)
-#define GENPTR_REAL_ARRAY(X)
-#define GENPTR_DOUBLE_ARRAY(X)
-#define GENPTR_CHARACTER_ARRAY(X)
-#define GENPTR_LOGICAL_ARRAY(X)
-#define GENPTR_BYTE_ARRAY(X)
-#define GENPTR_WORD_ARRAY(X)
-#define GENPTR_UBYTE_ARRAY(X)
-#define GENPTR_UWORD_ARRAY(X)
-#define GENPTR_POINTER_ARRAY(X)
-
-#define GENPTR_SUBROUTINE(X)
-#define GENPTR_INTEGER_FUNCTION(X)
-#define GENPTR_REAL_FUNCTION(X)
-#define GENPTR_DOUBLE_FUNCTION(X)
-#define GENPTR_CHARACTER_FUNCTION(X)
-#define GENPTR_LOGICAL_FUNCTION(X)
-#define GENPTR_BYTE_FUNCTION(X)
-#define GENPTR_WORD_FUNCTION(X)
-#define GENPTR_UBYTE_FUNCTION(X)
-#define GENPTR_UWORD_FUNCTION(X)
-#define GENPTR_POINTER_FUNCTION(X)
-
-
-
-/*  ------------------  Calling FORTRAN from C  --------------------------- */
-
-
-/*  ---  Declare variables  ---						    */
-
-#define DECLARE_INTEGER(X) F77_INTEGER_TYPE X
-#define DECLARE_REAL(X)    F77_REAL_TYPE X
-#define DECLARE_DOUBLE(X)  F77_DOUBLE_TYPE X
-#define DECLARE_LOGICAL(X) F77_LOGICAL_TYPE X
-#define DECLARE_BYTE(X)    F77_BYTE_TYPE X
-#define DECLARE_WORD(X)    F77_WORD_TYPE X
-#define DECLARE_UBYTE(X)   F77_UBYTE_TYPE X
-#define DECLARE_UWORD(X)   F77_UWORD_TYPE X
-
-#define DECLARE_POINTER(X) F77_POINTER_TYPE X
-
-#define DECLARE_CHARACTER(X,L) F77_CHARACTER_TYPE X[L]; \
-   const int X##_length = L
-
-
-/*  ---  Declare arrays ---						    */
-
-#define DECLARE_INTEGER_ARRAY(X,D) F77_INTEGER_TYPE X[D]
-#define DECLARE_REAL_ARRAY(X,D)    F77_REAL_TYPE X[D]
-#define DECLARE_DOUBLE_ARRAY(X,D)  F77_DOUBLE_TYPE X[D]
-#define DECLARE_LOGICAL_ARRAY(X,D) F77_LOGICAL_TYPE X[D]
-#define DECLARE_BYTE_ARRAY(X,D)    F77_BYTE_TYPE X[D]
-#define DECLARE_WORD_ARRAY(X,D)    F77_WORD_TYPE X[D]
-#define DECLARE_UBYTE_ARRAY(X,D)   F77_UBYTE_TYPE X[D]
-#define DECLARE_UWORD_ARRAY(X,D)   F77_UWORD_TYPE X[D]
-#define DECLARE_POINTER_ARRAY(X,D) F77_POINTER_TYPE X[D]
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
-   const int X##_length = L
-
-/*  ---  Declare and construct dynamic CHARACTER arguments ---                      */
-#define DECLARE_CHARACTER_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X##_length
-#define F77_CREATE_CHARACTER(X,L)  X=cnfCref(L);\
-   X##_length = L
-
-/* Declare Dynamic Fortran arrays */
-#define DECLARE_INTEGER_ARRAY_DYN(X) F77_INTEGER_TYPE *X
-#define DECLARE_REAL_ARRAY_DYN(X)    F77_REAL_TYPE *X
-#define DECLARE_DOUBLE_ARRAY_DYN(X)  F77_DOUBLE_TYPE *X
-#define DECLARE_LOGICAL_ARRAY_DYN(X) F77_LOGICAL_TYPE *X
-#define DECLARE_BYTE_ARRAY_DYN(X)    F77_BYTE_TYPE *X
-#define DECLARE_WORD_ARRAY_DYN(X)    F77_WORD_TYPE *X
-#define DECLARE_UBYTE_ARRAY_DYN(X)   F77_UBYTE_TYPE *X
-#define DECLARE_UWORD_ARRAY_DYN(X)   F77_UWORD_TYPE *X
-#define DECLARE_POINTER_ARRAY_DYN(X) F77_POINTER_TYPE *X
-#define DECLARE_CHARACTER_ARRAY_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X##_length
-
-/* Create arrays dynamic Fortran arrays for those types which require */
-/* Separate space for Fortran and C arrays                            */
-/* Character and logical are already defined                          */
-/* For most types there is nothing to do                              */
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
-        {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X##_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D)  X=cnfCrefa(L,N,D);\
-   X##_length = L
-#define F77_CREATE_LOGICAL_ARRAY(X,N) \
-        {int f77dims[1];f77dims[0]=N;X=cnfCrela(1,f77dims);}
-#define F77_CREATE_LOGICAL_ARRAY_M(X,N,D) X=cnfCrela(N,D)
-#define F77_CREATE_INTEGER_ARRAY(X,N)
-#define F77_CREATE_REAL_ARRAY(X,N)
-#define F77_CREATE_DOUBLE_ARRAY(X,N)
-#define F77_CREATE_BYTE_ARRAY(X,N)
-#define F77_CREATE_UBYTE_ARRAY(X,N)
-#define F77_CREATE_WORD_ARRAY(X,N)
-#define F77_CREATE_UWORD_ARRAY(X,N)
-#define F77_CREATE_POINTER_ARRAY(X,N)\
-        X=(F77_POINTER_TYPE *) malloc(N*sizeof(F77_POINTER_TYPE))
-
-/* Associate Fortran arrays with C arrays                             */
-/* These macros ensure that there is space somewhere for the Fortran  */
-/* array. They are complemetary to the CREATE_type_ARRAY macros       */
-#define F77_ASSOC_CHARACTER_ARRAY(F,C)
-#define F77_ASSOC_LOGICAL_ARRAY(F,C)
-#define F77_ASSOC_INTEGER_ARRAY(F,C) F=C
-#define F77_ASSOC_REAL_ARRAY(F,C) F=C
-#define F77_ASSOC_DOUBLE_ARRAY(F,C) F=C
-#define F77_ASSOC_BYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_UBYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_WORD_ARRAY(F,C) F=C
-#define F77_ASSOC_UWORD_ARRAY(F,C) F=C
-#define F77_ASSOC_POINTER_ARRAY(F,C)
-
-/* Free created dynamic arrays */
-/* Character and logical are already defined */
-/* For most types there is nothing to do */
-#define F77_FREE_INTEGER(X)
-#define F77_FREE_REAL(X)
-#define F77_FREE_DOUBLE(X)
-#define F77_FREE_BYTE(X)
-#define F77_FREE_UBYTE(X)
-#define F77_FREE_WORD(X)
-#define F77_FREE_UWORD(X)
-#define F77_FREE_POINTER(X) cnfFree((void *)X);
-#define F77_FREE_CHARACTER(X) cnfFreef( X )
-#define F77_FREE_LOGICAL(X) cnfFree( (char *)X )
-
-/*  ---  IMPORT and EXPORT of values  --- */
-/* Export C variables to Fortran variables */
-#define F77_EXPORT_CHARACTER(C,F,L) cnfExprt(C,F,L)
-#define F77_EXPORT_DOUBLE(C,F) F=C
-#define F77_EXPORT_INTEGER(C,F) F=C
-#define F77_EXPORT_LOGICAL(C,F) F=C?F77_TRUE:F77_FALSE
-#define F77_EXPORT_REAL(C,F) F=C
-#define F77_EXPORT_BYTE(C,F) F=C
-#define F77_EXPORT_WORD(C,F) F=C
-#define F77_EXPORT_UBYTE(C,F) F=C
-#define F77_EXPORT_UWORD(C,F) F=C
-#define F77_EXPORT_POINTER(C,F) F=cnfFptr(C)
-#define F77_EXPORT_LOCATOR(C,F) cnfExpch(C,F,DAT__SZLOC)
-
-/* Export C arrays to Fortran */
-/* Arrays are assumed to be 1-d so just the number of elements is given  */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_EXPORT_CHARACTER_ARRAY(C,LC,F,LF,N) \
-        {int f77dims[1];f77dims[0]=N;cnfExprta(C,LC,F,LF,1,f77dims);}
-#define F77_EXPORT_CHARACTER_ARRAY_P(C,F,LF,N) \
-        {int f77dims[1];f77dims[0]=N;cnfExprtap(C,F,LF,1,f77dims);}
-#define F77_EXPORT_DOUBLE_ARRAY(C,F,N) F=(F77_DOUBLE_TYPE *)C
-#define F77_EXPORT_INTEGER_ARRAY(C,F,N) F=(F77_INTEGER_TYPE *)C
-#define F77_EXPORT_LOGICAL_ARRAY(C,F,N) \
-        {int f77dims[1];f77dims[0]=N;cnfExpla(C,F,1,f77dims);}
-#define F77_EXPORT_REAL_ARRAY(C,F,N) F=(F77_REAL_TYPE *)C
-#define F77_EXPORT_BYTE_ARRAY(C,F,N) F=(F77_BYTE_TYPE *)C
-#define F77_EXPORT_WORD_ARRAY(C,F,N) F=(F77_WORD_TYPE *)C
-#define F77_EXPORT_UBYTE_ARRAY(C,F,N) F=(F77_UBYTE_TYPE *)C
-#define F77_EXPORT_UWORD_ARRAY(C,F,N) F=(F77_UWORD_TYPE * )C
-#define F77_EXPORT_POINTER_ARRAY(C,F,N) \
-     {int f77i;for (f77i=0;f77i<N;f77i++)F[f77i]=cnfFptr(C[f77i]);}
-#define F77_EXPORT_LOCATOR_ARRAY(C,F,N) \
-        {int f77i;for (f77i=0;f77i<N;f77i++)cnfExpch(C,F,DAT__SZLOC);}
-
-/* Import Fortran variables to C */
-#define F77_IMPORT_CHARACTER(F,L,C) cnfImprt(F,L,C)
-#define F77_IMPORT_DOUBLE(F,C) C=F
-#define F77_IMPORT_INTEGER(F,C) C=F
-#define F77_IMPORT_LOGICAL(F,C) C=F77_ISTRUE(F)
-#define F77_IMPORT_REAL(F,C) C=F
-#define F77_IMPORT_BYTE(F,C) C=F
-#define F77_IMPORT_WORD(F,C) C=F
-#define F77_IMPORT_UBYTE(F,C) C=F
-#define F77_IMPORT_UWORD(F,C) C=F
-#define F77_IMPORT_POINTER(F,C) C=cnfCptr(F)
-#define F77_IMPORT_LOCATOR(F,C) cnfImpch(F,DAT__SZLOC,C)
-
-/* Import Fortran arrays to C */
-/* Arrays are assumed to be 1-d so just the number of elements is given  */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_IMPORT_CHARACTER_ARRAY(F,LF,C,LC,N) \
-        {int f77dims[1];f77dims[0]=N;cnfImprta(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_CHARACTER_ARRAY_P(F,LF,C,LC,N) \
-        {int f77dims[1];f77dims[0]=N;cnfImprtap(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_DOUBLE_ARRAY(F,C,N)
-#define F77_IMPORT_INTEGER_ARRAY(F,C,N)
-#define F77_IMPORT_LOGICAL_ARRAY(F,C,N) \
-        {int f77dims[1];f77dims[0]=N;cnfImpla(F,C,1,f77dims);}
-#define F77_IMPORT_REAL_ARRAY(F,C,N)
-#define F77_IMPORT_BYTE_ARRAY(F,C,N)
-#define F77_IMPORT_WORD_ARRAY(F,C,N)
-#define F77_IMPORT_UBYTE_ARRAY(F,C,N)
-#define F77_IMPORT_UWORD_ARRAY(F,C,N)
-#define F77_IMPORT_POINTER_ARRAY(F,C,N) \
-        {int f77i;for (f77i=0;f77i<N;f77i++)C[f77i]=cnfCptr(F[f77i]);}
-#define F77_IMPORT_LOCATOR_ARRAY(F,C,N) \
-        {int f77i;for (f77i=0;f77i<N;f77i++)cnfImpch(F,DAT__SZLOC,C);}
-
-/*  ---  Call a FORTRAN routine  ---					    */
-
-#define F77_CALL(X)  F77_EXTERNAL_NAME(X)
-
-
-/*  ---  Pass arguments to a FORTRAN routine  ---			    */
-
-#define INTEGER_ARG(X)   X
-#define REAL_ARG(X)      X
-#define DOUBLE_ARG(X)    X
-#define LOGICAL_ARG(X)   X
-#define BYTE_ARG(X)      X
-#define WORD_ARG(X)      X
-#define UBYTE_ARG(X)     X
-#define UWORD_ARG(X)     X
-#define POINTER_ARG(X)   X
-#define CHARACTER_ARG(X) X
-#define TRAIL_ARG(X)     ,X##_length
-
-#define SUBROUTINE_ARG(X)  X
-#define INTEGER_FUNCTION_ARG(X)  X
-#define REAL_FUNCTION_ARG(X)  X
-#define DOUBLE_FUNCTION_ARG(X)  X
-#define LOGICAL_FUNCTION_ARG(X)  X
-#define CHARACTER_FUNCTION_ARG(X)  X
-#define BYTE_FUNCTION_ARG(X)  X
-#define WORD_FUNCTION_ARG(X)  X
-#define UBYTE_FUNCTION_ARG(X)  X
-#define UWORD_FUNCTION_ARG(X)  X
-#define POINTER_FUNCTION_ARG(X)  X
-
-#define INTEGER_ARRAY_ARG(X)   (F77_INTEGER_TYPE *)X
-#define REAL_ARRAY_ARG(X)      (F77_REAL_TYPE *)X
-#define DOUBLE_ARRAY_ARG(X)    (F77_DOUBLE_TYPE *)X
-#define LOGICAL_ARRAY_ARG(X)   (F77_LOGICAL_TYPE *)X
-#define BYTE_ARRAY_ARG(X)      (F77_BYTE_TYPE *)X
-#define WORD_ARRAY_ARG(X)      (F77_WORD_TYPE *)X
-#define UBYTE_ARRAY_ARG(X)     (F77_UBYTE_TYPE *)X
-#define UWORD_ARRAY_ARG(X)     (F77_UWORD_TYPE *)X
-#define POINTER_ARRAY_ARG(X)   (F77_POINTER_TYPE *)X
-#define CHARACTER_ARRAY_ARG(X) (F77_CHARACTER_ARRAY_ARG_TYPE *)X
-
-
-/* ------------------------ Non-ansi section ------------------------------ */
-
-/*  The difference between ANSI and non-ANSI compilers, as far as macro	    */
-/*  definition is concerned, is that non-ANSI compilers do not support the  */
-/*  token concatenation operator (##). To work around this, we use the fact */
-/*  that the null comment is preprocessed to produce no characters at all   */
-/*  by our non-ANSI compilers.						    */
-/*  This section does not deal with the fact that some non-ANSI compilers   */
-/*  cannot handle function prototypes. That is handled in the machine 	    */
-/*  specific sections.							    */
-
-#if !defined(__STDC__)
-
-/*  ---  External Name  ---						    */
-
-/*  Macro to define the name of a Fortran routine or common block. This	    */
-/*  ends in an underscore on many Unix systems.				    */
-
-#undef  F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X/**/_
-
-
-/*  ---  Dummy Arguments  ---						    */
-
-/*  Macros to handle character dummy arguments.				    */
-
-#undef  TRAIL
-#define TRAIL(X) ,int X/**/_length
-
-
-/*  ---  Declare variables  ---						    */
-
-#undef  DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L)         F77_CHARACTER_TYPE X[L]; \
-   const int X/**/_length = L
-#undef  DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
-   const int X/**/_length = L
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X/**/_length
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X/**/_length
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L)  X=cnfCref(L);\
-   X/**/_length = L
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
-        {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-
-/*  ---  Pass arguments to a FORTRAN routine  ---			    */
-
-#undef  TRAIL_ARG
-#define TRAIL_ARG(X)     ,X/**/_length
-
-
-#endif  /* of non ANSI redefinitions					    */
-
-
-/* -----------------------------------------------------------------------  */
-
-/* The standard macros defined above are known to work with the following   */
-/* systems:								    */
- 
-/*--------
-|   Sun   |
----------*/
-
-/*  On SunOS, the ANSI definitions work with the acc and gcc compilers.     */
-/*  The cc compiler uses the non ANSI definitions. It also needs the K&R    */
-/*  definitions in the file kr.h.					    */
-/*  On Solaris, the standard definitions work with the cc compiler.	    */
-
-#if defined(sun)
-
-#if !defined(__STDC__)
-#if !defined(_F77_KR)
-#define _F77_KR
-#endif
-#endif
-
-#endif	/* Sun								    */
-
-/* -------------------- System dependent sections ------------------------- */
-
-/*------------
-|   VAX/VMS   |
--------------*/
-
-/* Many macros need to be changed due to the way that VMS handles external  */
-/* names, passes character arguments and handles logical values.	    */
-
-
-#if defined(VMS)
-
-/*  ---  Data Types  ---						    */
-
-/*  Redefine the macro for the byte data type as signed is not valid syntax */
-/*  as the VMS compiler is not ANSI compliant.				    */
-
-#undef  F77_BYTE_TYPE
-#define F77_BYTE_TYPE      char
-
-
-/*  ---  External Names  ---						    */
-
-/*  Macro to define the name of a Fortran routine or common block.	    */
-/*  Fortran and C routines names are the same on VMS.			    */
-
-#undef  F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X
-
-
-/*  ---  Dummy Arguments  ---						    */
-
-/*  Macros to handle character arguments.				    */
-/*  Character string arguments are pointers to character string descriptors */
-/*  and there are no trailing arguments.				    */
-
-#if( VMS != 0 )
-#include <descrip.h>
-#endif
-
-
-#undef  F77_CHARACTER_ARG_TYPE
-#define F77_CHARACTER_ARG_TYPE struct dsc$descriptor_s
-#undef  F77_CHARACTER_ARRAY_ARG_TYPE
-#define F77_CHARACTER_ARRAY_ARG_TYPE struct dsc$descriptor_a
-#undef  CHARACTER
-#define CHARACTER(X) F77_CHARACTER_ARG_TYPE *CNF_CONST X/**/_arg
-#undef  TRAIL
-#define TRAIL(X)
-#undef  CHARACTER_ARRAY
-#define CHARACTER_ARRAY(X)  F77_CHARACTER_ARRAY_ARG_TYPE *CNF_CONST X/**/_arg
-#undef  GENPTR_CHARACTER
-#define GENPTR_CHARACTER(X) \
-   F77_CHARACTER_TYPE *X = X/**/_arg->dsc$a_pointer; \
-   int X/**/_length = X/**/_arg->dsc$w_length;
-#undef  GENPTR_CHARACTER_ARRAY
-#define GENPTR_CHARACTER_ARRAY(X)   GENPTR_CHARACTER(X)
-
-
-/*  ---  Logical Values  ---						    */
-
-#undef  F77_TRUE
-#define F77_TRUE -1
-#undef  F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef  F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-/*  ---  Common Blocks  ---						    */
-
-#undef  F77_BLANK_COMMON
-#define F77_BLANK_COMMON  $BLANK
-
-
-/*  ---  Declare Variables  ---						    */
-
-#undef  DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L) \
-   F77_CHARACTER_TYPE X[L];    const int X/**/_length = L; \
-   F77_CHARACTER_ARG_TYPE X/**/_descr = \
-      { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
-   F77_CHARACTER_ARG_TYPE *X/**/_arg = &X/**/_descr
-#undef  DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) \
-   F77_CHARACTER_TYPE X[D][L]; const int X/**/_length = L; \
-   F77_CHARACTER_ARRAY_ARG_TYPE X/**/_descr = \
-      { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
-   F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg = &X/**/_descr
-
-
-/*  ---  The dynamic allocation of character arguments  ---                 */
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X) int X/**/_length;\
-                                  F77_CHARACTER_ARG_TYPE *X/**/_arg;\
-                                  F77_CHARACTER_TYPE *X
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X) int X/**/_length;\
-                                  F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg;\
-                                  F77_CHARACTER_TYPE *X
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L) X/**/_arg = cnfCref(L);\
-                                  X = X/**/_arg->dsc$a_pointer; \
-                                  X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
-  {int f77dims[1];f77dims[0]=N;X/**/_arg=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D) X/**/_arg = cnfCrefa(L,N,D);\
-                                  X = X/**/_arg->dsc$a_pointer; \
-                                  X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_FREE_CHARACTER
-#define F77_FREE_CHARACTER(X)     cnfFreef( X/**/_arg )
-
-/*  ---  Pass arguments to a FORTRAN routine  ---			    */
-
-#undef  CHARACTER_ARG
-#define CHARACTER_ARG(X) X/**/_arg
-#undef  CHARACTER_ARRAY_ARG
-#define CHARACTER_ARRAY_ARG(X) X/**/_arg
-#undef  TRAIL_ARG
-#define TRAIL_ARG(X)
-
-#endif  /* VMS								    */
-
-/* -----------------------------------------------------------------------  */
-
-/*--------------------------
-|   DECstation Ultrix (cc)  |
-|   DECstation Ultrix (c89) |
-|   DECstation OSF/1        |
-|   Alpha OSF/1             |
- --------------------------*/
-
-/* Do this complicated set of definitions as a single #if cannot be	    */
-/* continued across multiple lines.					    */
-
-#if defined(mips) && defined(ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips) && defined(__ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips__) && defined(__osf__)
-#define _dec_unix 1
-#endif
-#if defined(__alpha) && defined(__osf__)
-#define _dec_unix 1
-#endif
-
-#if _dec_unix
-
-/*  The macros for Ultrix are the same as the standard ones except for ones */
-/*  dealing with logical values. The ANSI definitions work with the c89	    */
-/*  compiler, and the non ANSI definitions work with the cc compiler.	    */
-/*  The same applies to DEC OSF/1, except that its cc compiler is ANSI	    */
-/*  compliant.								    */
-
-
-/*  ---  Logical Values  ---						    */
-
-/*  Redefine macros that evaluate to a C logical value, given a FORTRAN	    */
-/*  logical value. These definitions are only valid when used with the DEC  */
-/*  FORTRAN for RISC compiler. If you are using the earlier FORTRAN for	    */
-/*  RISC compiler from MIPS, then these macros should be deleted.	    */
-
-#undef  F77_TRUE
-#define F77_TRUE -1
-#undef  F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef  F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-#endif  /* DEC Unix							    */
-
-/*
-*+
-*  Name:
-*     cnf.h
-
-*  Purpose:
-*     Function prototypes for cnf routines
-
-*  Language:
-*     ANSI C
-
-*  Type of Module:
-*     C include file
-
-*  Description:
-*     These are the prototype definitions for the functions in the CNF
-*     library. They are used used in mixing C and FORTRAN programs.
-
-*  Copyright:
-*     Copyright (C) 1991 Science & Engineering Research Council
-
-*  Authors:
-*     PMA: Peter Allan (Starlink, RAL)
-*     AJC: Alan Chipperfield (Starlink, RAL)
-*     {enter_new_authors_here}
-
-*  History:
-*     23-MAY-1991 (PMA):
-*        Original version.
-*     12-JAN-1996 (AJC):
-*        Add cnf_cref and cnf_freef
-*     14-JUN-1996 (AJC):
-*        Add cnf_crefa, imprta, exprta
-*                crela, impla, expla
-*     18-JUL-1996 (AJC):
-*        Add impch and expch
-*     17-MAR-1998 (AJC):
-*        Add imprtap and exprtap
-*     {enter_changes_here}
-
-*  Bugs:
-*     {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-void *cnfCalloc( size_t, size_t );
-void cnfCopyf( const char *source_f, int source_len, char *dest_f,
-                int dest_len );
-void *cnfCptr( F77_POINTER_TYPE );
-char *cnfCreat( int length );
-F77_CHARACTER_ARG_TYPE *cnfCref( int length );
-F77_CHARACTER_ARG_TYPE *cnfCrefa( int length, int ndims, const int *dims );
-char *cnfCreib( const char *source_f, int source_len );
-char *cnfCreim( const char *source_f, int source_len );
-F77_LOGICAL_TYPE *cnfCrela( int ndims, const int *dims );
-void cnfExpch( const char *source_c, char *dest_f, int nchars );
-void cnfExpla( const int *source_c, F77_LOGICAL_TYPE *dest_f, int ndims,
-                const int *dims );
-void cnfExpn( const char *source_c, int max, char *dest_f, int dest_len );
-void cnfExprt( const char *source_c, char *dest_f, int dest_len );
-void cnfExprta( const char *source_c, int source_len, char *dest_f,
-                 int dest_len, int ndims, const int *dims );
-void cnfExprtap( char *const *source_c, char *dest_f, int dest_len, 
-                  int ndims, const int *dims );
-F77_POINTER_TYPE cnfFptr( void *cpointer );
-void cnfFree( void * );
-void cnfFreef( F77_CHARACTER_ARG_TYPE *temp );
-void cnfImpb( const char *source_f, int source_len, char *dest_c );
-void cnfImpbn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImpch( const char *source_f, int nchars, char *dest_c );
-void cnfImpla( const F77_LOGICAL_TYPE *source_f, int *dest_c,
-                int ndims, const int *dims );
-void cnfImpn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImprt( const char *source_f, int source_len, char *dest_c );
-void cnfImprta( const char *source_f, int source_len, char *dest_c,
-                 int dest_len, int ndims, const int *dims );
-void cnfImprtap( const char *source_f, int source_len, char *const *dest_c,
-                  int dest_len, int ndims, const int *dims );
-int cnfLenc( const char *source_c );
-int cnfLenf( const char *source_f, int source_len );
-void *cnfMalloc( size_t );
-int cnfRegp( void * );
-void cnfUregp( void * );
-#endif
-
-#ifndef CNF_OLD_DEFINED
-#define CNF_OLD_DEFINED
-/* Define old names to be new names */
-#define cnf_calloc cnfCalloc
-#define cnf_copyf cnfCopyf
-#define cnf_cptr cnfCptr
-#define cnf_creat cnfCreat
-#define cnf_cref cnfCref
-#define cnf_crefa cnfCrefa
-#define cnf_creib cnfCreib
-#define cnf_creim cnfCreim
-#define cnf_crela cnfCrela
-#define cnf_expch cnfExpch
-#define cnf_expla cnfExpla
-#define cnf_expn cnfExpn
-#define cnf_exprt cnfExprt
-#define cnf_exprta cnfExprta
-#define cnf_exprtap cnfExprtap
-#define cnf_fptr cnfFptr
-#define cnf_free cnfFree
-#define cnf_freef cnfFreef
-#define cnf_impb cnfImpb
-#define cnf_impbn cnfImpbn
-#define cnf_impch cnfImpch
-#define cnf_impla cnfImpla
-#define cnf_impn cnfImpn
-#define cnf_imprt cnfImprt
-#define cnf_imprta cnfImprta
-#define cnf_imprtap cnfImprtap
-#define cnf_lenc cnfLenc
-#define cnf_lenf cnfLenf
-#define cnf_malloc cnfMalloc
-#define cnf_regp cnfRegp
-#define cnf_uregp cnfUregp
-
-#endif
diff --git a/ast-5.3-1/f77.h.in b/ast-5.3-1/f77.h.in
deleted file mode 100644
index 712ca8d..0000000
--- a/ast-5.3-1/f77.h.in
+++ /dev/null
@@ -1,1038 +0,0 @@
-/*
-*+
-*  Name:
-*     f77.h and cnf.h
-
-*  Purpose:
-*     C - FORTRAN interace macros and prototypes
-
-*  Language:
-*     C (part ANSI, part not)
-
-*  Type of Module:
-*     C include file
-
-*  Description:
-*     For historical reasons two files, F77.h and cnf.h are required
-*     but the have now been combined and for new code, only one is 
-*     necessary.
-*
-*     This file defines the macros needed to write C functions that are
-*     designed to be called from FORTRAN programs, and to do so in a
-*     portable way. Arguments are normally passed by reference from a
-*     FORTRAN program, and so the F77 macros arrange for a pointer to
-*     all arguments to be available. This requires no work on most
-*     machines, but will actually generate the pointers on a machine
-*     that passes FORTRAN arguments by value.
-
-*  Notes:
-*     -  Macros are provided to handle the conversion of logical data
-*        values between the way that FORTRAN represents a value and the
-*        way that C represents it.
-*     -  Macros are provided to convert variables between the FORTRAN and
-*        C method of representing them. In most cases there is no
-*        conversion required, the macros just arrange for a pointer to
-*        the FORTRAN variable to be set appropriately. The possibility that
-*        FORTRAN and C might use different ways of representing integer
-*        and floating point values is considered remote, the macros are
-*        really only there for completeness and to assist in the automatic 
-*        generation of C interfaces.
-*     -  For character variables the macros convert between
-*        the FORTRAN method of representing them (fixed length, blank
-*        filled strings) and the C method (variable length, null
-*        terminated strings) using calls to the CNF functions.
-
-*  Implementation Deficiencies:
-*     -  The macros support the K&R style of function definition, but
-*        this file may not work with all K&R compilers as it contains
-*        "#if defined" statements. These could be replaced with #ifdef's
-*        if necessary. This has not been done as is would make the code
-*        less clear and the need for support for K&R sytle definitions
-*        should disappear as ANSI compilers become the default.
-
-*  Copyright:
-*     Copyright (C) 1991, 1993 Science & Engineering Research Council
-*     Copyright (C) 2006 Particle Physics and Astronomy Research Council
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public License as
-*     published by the Free Software Foundation; either version 2 of
-*     the License, or (at your option) any later version.
-*     
-*     This program is distributed in the hope that it will be
-*     useful,but WITHOUT ANY WARRANTY; without even the implied
-*     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-*     PURPOSE. See the GNU General Public License for more details.
-*     
-*     You should have received a copy of the GNU General Public License
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     PMA: Peter Allan (Starlink, RAL)
-*     AJC: Alan Chipperfield (Starlink, RAL)
-*     PWD: Peter W. Draper (JAC, Durham University)
-*     {enter_new_authors_here}
-
-*  History:
-*     23-MAY-1991 (PMA):
-*        Original version.
-*     19-JUN-1991 (PMA):
-*        Removed VMS versions of IM(EX)PORT_LOGICAL macros that tried
-*        to convert data representations.
-*     24-JUN-1991 (PMA):
-*        Changed the names of IMPORT macros to GENPTR.
-*        Removed the EXPORT macros.
-*     27-JUN-1991 (PMA):
-*        Modified DECstation specific stuff to allow use of the c89
-*        compiler.
-*      8-JUL-1991 (PMA):
-*        Added macros to call FORTRAN from C.
-*     16-OCT-1991 (PMA):
-*        Remove type_ARRAY2 definitions.
-*        Remove the length argument from CHARACTER_ARRAY and the
-*        dimension specifier from GENPTR_type_ARRAY.
-*        Add extra brackets to F77_ISFALSE and F77_ISTRUE.
-*     25-OCT-1991 (PMA):
-*        Changed "if defined(sun4)" to "if defined(sun)"
-*     2-JUN-1992 (PMA):
-*        Changed "if defined(mips)" to "if defined(ultrix)" to prevent
-*        those definitions being used on a Silicon Graphics machine.
-*     11-JUN-1992 (PMA):
-*        Changed "if defined(ultrix)" back to "if defined(mips)" so that
-*        it still works on OSF/1 on a DECstation.
-*        Add support for general non-ANSI compilers, but not basic K&R
-*        ones.
-*     12-JUN-1992 (PMA):
-*        Change declaration of dummy scalar arguments to be const
-*        pointers.  Change declaration of dummy array arguments to be
-*        const pointers.
-*     5-JAN-1993 (PMA):
-*        Changed "if defined(mips)" so that it will recognise a
-*        DECstation running Ultrix or OSF/1, but not a Silicon Graphics
-*        workstation.
-*        Change the definition of F77_BYTE_TYPE to add "signed".
-*        Redefine this on VMS where signed is invalid syntax.
-*        Add new types of UBYTE and UWORD.
-*     8-JAN-1993 (PMA):
-*        Fix bug in the definition of CHARACTER_RETURN_VALUE. There was
-*        an extraneous space.
-*        Add a macro F77_POINTER_TYPE and use it to define POINTER.
-*     13-JAN-1993 (PMA):
-*        Start to add support for K&R function definitions. These are
-*        done on a per machine basis.
-*     16-APR-1993 (PMA):
-*        Change the definition of F77_POINTER_TYPE from int to unsigned
-*        int.
-*     7-MAY-1993 (PMA):
-*        Change from using a null comment as a token concatenation
-*        operator to using the internal macro _f77_x on non-ANSI
-*        systems.
-*     10-MAY-1993 (PMA):
-*        Finish adding K&R support. This will form version 2.0 of F77.
-*     10-MAY-1993 (PMA):
-*        Add support for Alpha OSF/1.
-*     9-JUL-1993 (PMA):
-*        Add further POINTER macros: POINTER_ARRAY,
-*        GENPTR_POINTER_ARRAY, DECLARE_POINTER, DECLARE_POINTER_ARRAY,
-*        POINTER_ARG, POINTER_ARRAY_ARG, F77_POINTER_FUNCTION,
-*        KR_POINTER_ARRAY.
-*     24-AUG-1993 (PMA):
-*        Add const to the VMS definitions of CHARACTER and CHARACTER_ARRAY.
-*     3-NOV-1993 (PMA):
-*        Remove K&R stuff to a separate file.
-*        Released on Unix as version 2.0 of CNF.
-*     11-NOV-1993 (PMA):
-*        Return to using the null comment to concatenate text on non-ANSI
-*        systems as _f77_x caused problems with the c89 -common flag on
-*        DECstations.
-*     23-JAN-1996 (AJC):
-*        Add SUBROUTINE, type_FUNCTION, SUBROUTINE_ARG,
-*        type_FUNCTION_ARG, GENPTR_SUBROUTINE and GENPTR_type_FUNCTION
-*        required for passed subroutine and function name.
-*     29-JAN-1996 (AJC):
-*        Add the dynamic CHARACTER_ macros
-*        and CHARACTER_ARG_TYPE
-*     22-FEB-1996 (AJC):
-*        Add CHARACTER_RETURN_ARG
-*     23-MAY-1996 (AJC):
-*        Add DECLARE_CHARACTER_ARRAY_DYN
-*            F77_CREATE_CHARACTER_ARRAY
-*            F77_CHARACTER_ARG_TYPE
-*     14-JUN-1996 (AJC):
-*        Add DECLARE_LOGICAL_ARRAY_DYN
-*            F77_CREATE_LOGICAL_ARRAY
-*     21-JUN-1996 (AJC):
-*        Add cast to _ARRAY_ARGs to allow multidimensional arrays
-*     17-MAR-1998 (AJC):
-*        Add DECLARE, CREATE and FREE dynamic array macros for all types
-*        Changed CREATE_CHARACTER_ARRAY and CREATE_LOGICAL_ARRAY to use
-*         number of elements rather than dimensions.
-*        Add IMPORT, EXPORT and ASSOC macros
-*     22-JUL-1998 (AJC):
-*        Combined F77.h and cnf.h
-*     23-SEP-1998 (AJC):
-*        Input strings for cnf -> const char *
-*        Input int arrays for cnf -> const int *
-*      4-NOV-1998 (AJC):
-*        Bring cnf prototypes in line with .c routines
-*      8-FEB-1999 (AJC):
-*        Added cnf_mem stuff
-*      9-FEB-1999 (AJC):
-*        Use cnf_cptr/fptr for IMPORT/EXPORT_POINTER
-*     16-FEB-1999 (AJC):
-*        Added missing cnf_fptr prototype
-*     23-JUN-1999 (AJC):
-*        Change cnf_name to cnfName
-*        and add macros for cnf_name
-*      1-DEC-1999 (AJC):
-*        Add define cnf_free
-*      7-JAN-2000 (AJC):
-*        Correct omission of F77_ASSOC_UBYTE_ARRAY
-*        Correct F77_EXPORT_UWORD_ARRAY
-*      21-JUN-2006 (PWD):
-*        Changed to use a different return type for REAL functions. This
-*        effects g77 under 64-bit, when the f2c bindings expect the return
-*        value of a REAL function to be a double, not a float. Note this 
-*        file is now a branch of the CNF version (no starmem dependency).
-*      13-JUL-2007 (PWD):
-*        Parameterise the type of Fortran character string lengths. Can
-*        be long.
-*     {enter_further_changes_here}
-*        
-
-*  Bugs:
-*     {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-#if !defined(CNF_MACROS)
-#define CNF_MACROS
-
-#include <stdlib.h>
-/*  This initial sections defines values for all macros. These are the	    */
-/*  values that are generally appropriate to an ANSI C compiler on Unix.    */
-/*  For macros that have different values on other systems, the macros	    */
-/*  should be undefined and then redefined in the system specific sections. */
-/*  At the end of this section, some macros are redefined if the compiler   */
-/*  is non-ANSI.							    */
-
-
-#if defined(__STDC__) || defined(VMS)
-#define CNF_CONST const
-#else
-#define CNF_CONST
-#endif
-
-/*  -----  Macros common to calling C from FORTRAN and FORTRAN from C  ---- */
-
-
-/*  ---  External Names  ---						    */
-
-/*  Macro to define the name of a Fortran routine or common block. This	    */
-/*  ends in an underscore on many Unix systems.				    */
-
-#define F77_EXTERNAL_NAME(X) X ## _
-
-
-/*  ---  Logical Values  ---						    */
-
-/*  Define the values that are used to represent the logical values TRUE    */
-/*  and FALSE in Fortran.						    */
-
-#define F77_TRUE 1
-#define F77_FALSE 0
-
-/*  Define macros that evaluate to C logical values, given a FORTRAN	    */
-/*  logical value.							    */
-
-#define F77_ISTRUE(X) ( X )
-#define F77_ISFALSE(X) ( !( X ) )
-
-
-/*  ---  Common Blocks  ---						    */
-
-/*  Macros used in referring to FORTRAN common blocks.			    */
-
-#define F77_BLANK_COMMON                _BLNK__
-#define F77_NAMED_COMMON(B)             F77_EXTERNAL_NAME(B)
-
-
-
-/*  ------------------  Calling C from FORTRAN  --------------------------- */
-
-
-/*  ---  Data Types  ---						    */
-
-/*  Define macros for all the Fortran data types (except COMPLEX, which is  */
-/*  not handled by this package).					    */
-
-#define F77_INTEGER_TYPE   int 
-#define F77_REAL_TYPE      float 
-#define F77_REAL_FUNCTION_TYPE      @REAL_FUNCTION_TYPE@
-#define F77_DOUBLE_TYPE    double 
-#define F77_LOGICAL_TYPE   int
-#define F77_CHARACTER_TYPE char
-#define F77_BYTE_TYPE      signed char
-#define F77_WORD_TYPE      short int
-#define F77_UBYTE_TYPE     unsigned char
-#define F77_UWORD_TYPE     unsigned short int
-
-/*  Define macros for the type of a CHARACTER and CHARACTER_ARRAY argument  */
-#define F77_CHARACTER_ARG_TYPE char
-#define F77_CHARACTER_ARRAY_ARG_TYPE char
-
-/*  Define a macro to use when passing arguments that STARLINK FORTRAN	    */
-/*  treats as a pointer. From the point of view of C, this type should be   */
-/*  (void *), but it is declared as type unsigned int as we actually pass   */
-/*  an INTEGER from the FORTRAN routine. The distinction is important for   */
-/*  architectures where the size of an INTEGER is not the same as the size  */
-/*  of a pointer.							    */
-
-#define F77_POINTER_TYPE   unsigned int
-
-
-/*  ---  Subroutine Names  ---						    */
-
-/* This declares that the C function returns a value of void.		    */
-
-#define F77_SUBROUTINE(X)  void F77_EXTERNAL_NAME(X)
-
-
-/*  ---  Function Names  ---						    */
-
-/*  Macros to define the types and names of functions that return values.   */
-/*  Due the the different ways that function return values could be	    */
-/*  implemented, it is better not to use functions, but to stick to using   */
-/*  subroutines.							    */
-
-/*  Character functions are implemented, but in a way that cannot be	    */
-/*  guaranteed to be portable although it will work on VMS, SunOS, Ultrix   */
-/*  and DEC OSF/1. It would be better to return the character value as a    */
-/*  subroutine argument where possible, rather than use a character	    */
-/*  function.								    */
-
-#define F77_INTEGER_FUNCTION(X)   F77_INTEGER_TYPE F77_EXTERNAL_NAME(X)
-#define F77_REAL_FUNCTION(X)      F77_REAL_FUNCTION_TYPE F77_EXTERNAL_NAME(X)
-#define F77_DOUBLE_FUNCTION(X)    F77_DOUBLE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_LOGICAL_FUNCTION(X)   F77_LOGICAL_TYPE F77_EXTERNAL_NAME(X)
-#define F77_CHARACTER_FUNCTION(X) void F77_EXTERNAL_NAME(X)
-#define F77_BYTE_FUNCTION(X)      F77_BYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_WORD_FUNCTION(X)      F77_WORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UBYTE_FUNCTION(X)     F77_UBYTE_TYPE F77_EXTERNAL_NAME(X)
-#define F77_UWORD_FUNCTION(X)     F77_UWORD_TYPE F77_EXTERNAL_NAME(X)
-#define F77_POINTER_FUNCTION(X)   F77_POINTER_TYPE F77_EXTERNAL_NAME(X)
-
-
-/*  ---  Character return value for a function  ---			    */
-
-#define CHARACTER_RETURN_VALUE(X) CHARACTER(X) TRAIL(X)
-#define CHARACTER_RETURN_ARG(X) CHARACTER_ARG(X) TRAIL_ARG(X)
-
-/*  ---  Dummy Arguments  ---						    */
-
-/*  Macros for defining subroutine arguments. All these macros take a	    */
-/*  single argument; the name of the parameter. On most systems, a numeric  */
-/*  argument is passed as a pointer.					    */
-
-#define INTEGER(X)     F77_INTEGER_TYPE *CNF_CONST X
-#define REAL(X)        F77_REAL_TYPE    *CNF_CONST X
-#define DOUBLE(X)      F77_DOUBLE_TYPE  *CNF_CONST X
-#define LOGICAL(X)     F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE(X)        F77_BYTE_TYPE    *CNF_CONST X
-#define WORD(X)        F77_WORD_TYPE    *CNF_CONST X
-#define UBYTE(X)       F77_UBYTE_TYPE   *CNF_CONST X
-#define UWORD(X)       F77_UWORD_TYPE   *CNF_CONST X
-
-/*  Pointer arguments. Define a pointer type for passing pointer values	    */
-/*  between subroutines.						    */
-
-#define POINTER(X)     F77_POINTER_TYPE *CNF_CONST X
-
-/*  EXTERNAL arguments. Define a passed subroutine or function name */
-#define SUBROUTINE(X)  void (*X)()
-#define INTEGER_FUNCTION(X)  F77_INTEGER_TYPE (*X)()
-#define REAL_FUNCTION(X)  F77_REAL_TYPE (*X)()
-#define DOUBLE_FUNCTION(X)  F77_DOUBLE_TYPE (*X)()
-#define LOGICAL_FUNCTION(X)  F77_LOGICAL_TYPE (*X)()
-#define CHARACTER_FUNCTION(X)  F77_CHARACTER_TYPE (*X)()
-#define BYTE_FUNCTION(X)  F77_BYTE_TYPE (*X)()
-#define WORD_FUNCTION(X)  F77_WORD_TYPE (*X)()
-#define UBYTE_FUNCTION(X)  F77_UBYTE_TYPE (*X)()
-#define UWORD_FUNCTION(X)  F77_UWORD_TYPE (*X)()
-#define POINTER_FUNCTION(X)  F77_POINTER_TYPE (*X)()
-
-/*  Array arguments.							    */
-
-#define INTEGER_ARRAY(X)     F77_INTEGER_TYPE *CNF_CONST X
-#define REAL_ARRAY(X)        F77_REAL_TYPE    *CNF_CONST X
-#define DOUBLE_ARRAY(X)      F77_DOUBLE_TYPE  *CNF_CONST X
-#define LOGICAL_ARRAY(X)     F77_LOGICAL_TYPE *CNF_CONST X
-#define BYTE_ARRAY(X)        F77_BYTE_TYPE    *CNF_CONST X
-#define WORD_ARRAY(X)        F77_WORD_TYPE    *CNF_CONST X
-#define UBYTE_ARRAY(X)       F77_UBYTE_TYPE   *CNF_CONST X
-#define UWORD_ARRAY(X)       F77_UWORD_TYPE   *CNF_CONST X
-
-#define POINTER_ARRAY(X)     F77_POINTER_TYPE *CNF_CONST X
-
-/*  Macros to handle character arguments.				    */
-
-/*  Character arguments can be passed in many ways. The purpose of these    */
-/*  macros and the GENPTR_CHARACTER macro (defined in the next section) is  */
-/*  to generate a pointer to a character variable called ARG and an integer */
-/*  ARG_length containing the length of ARG. If these two variables are	    */
-/*  available directly from the argument list of the routine, then the	    */
-/*  GENPTR_CHARACTER macro is null, otherwise it works on intermediate	    */
-/*  variables.								    */
-
-#define CHARACTER(X)             F77_CHARACTER_TYPE *CNF_CONST X
-#define TRAIL(X)                 , at TRAIL_TYPE@ X ## _length
-#define CHARACTER_ARRAY(X)       F77_CHARACTER_TYPE *CNF_CONST X
-
-
-/*  ---  Getting Pointers to Arguments  ---				    */
-
-/*  Macros that ensure that a pointer to each argument is available for the */
-/*  programmer to use. Usually this means that these macros are null. On    */
-/*  VMS, a pointer to a character variable has to be generated. If a	    */
-/*  particular machine were to pass arguments by reference, rather than by  */
-/*  value, then these macros would construct the appropriate pointers.	    */
-
-#define GENPTR_INTEGER(X)
-#define GENPTR_REAL(X)
-#define GENPTR_DOUBLE(X)
-#define GENPTR_CHARACTER(X)
-#define GENPTR_LOGICAL(X)
-#define GENPTR_BYTE(X)
-#define GENPTR_WORD(X)
-#define GENPTR_UBYTE(X)
-#define GENPTR_UWORD(X)
-#define GENPTR_POINTER(X)
-
-#define GENPTR_INTEGER_ARRAY(X)
-#define GENPTR_REAL_ARRAY(X)
-#define GENPTR_DOUBLE_ARRAY(X)
-#define GENPTR_CHARACTER_ARRAY(X)
-#define GENPTR_LOGICAL_ARRAY(X)
-#define GENPTR_BYTE_ARRAY(X)
-#define GENPTR_WORD_ARRAY(X)
-#define GENPTR_UBYTE_ARRAY(X)
-#define GENPTR_UWORD_ARRAY(X)
-#define GENPTR_POINTER_ARRAY(X)
-
-#define GENPTR_SUBROUTINE(X)
-#define GENPTR_INTEGER_FUNCTION(X)
-#define GENPTR_REAL_FUNCTION(X)
-#define GENPTR_DOUBLE_FUNCTION(X)
-#define GENPTR_CHARACTER_FUNCTION(X)
-#define GENPTR_LOGICAL_FUNCTION(X)
-#define GENPTR_BYTE_FUNCTION(X)
-#define GENPTR_WORD_FUNCTION(X)
-#define GENPTR_UBYTE_FUNCTION(X)
-#define GENPTR_UWORD_FUNCTION(X)
-#define GENPTR_POINTER_FUNCTION(X)
-
-
-
-/*  ------------------  Calling FORTRAN from C  --------------------------- */
-
-
-/*  ---  Declare variables  ---						    */
-
-#define DECLARE_INTEGER(X) F77_INTEGER_TYPE X
-#define DECLARE_REAL(X)    F77_REAL_TYPE X
-#define DECLARE_DOUBLE(X)  F77_DOUBLE_TYPE X
-#define DECLARE_LOGICAL(X) F77_LOGICAL_TYPE X
-#define DECLARE_BYTE(X)    F77_BYTE_TYPE X
-#define DECLARE_WORD(X)    F77_WORD_TYPE X
-#define DECLARE_UBYTE(X)   F77_UBYTE_TYPE X
-#define DECLARE_UWORD(X)   F77_UWORD_TYPE X
-
-#define DECLARE_POINTER(X) F77_POINTER_TYPE X
-
-#define DECLARE_CHARACTER(X,L) F77_CHARACTER_TYPE X[L]; \
-   const int X##_length = L
-
-
-/*  ---  Declare arrays ---						    */
-
-#define DECLARE_INTEGER_ARRAY(X,D) F77_INTEGER_TYPE X[D]
-#define DECLARE_REAL_ARRAY(X,D)    F77_REAL_TYPE X[D]
-#define DECLARE_DOUBLE_ARRAY(X,D)  F77_DOUBLE_TYPE X[D]
-#define DECLARE_LOGICAL_ARRAY(X,D) F77_LOGICAL_TYPE X[D]
-#define DECLARE_BYTE_ARRAY(X,D)    F77_BYTE_TYPE X[D]
-#define DECLARE_WORD_ARRAY(X,D)    F77_WORD_TYPE X[D]
-#define DECLARE_UBYTE_ARRAY(X,D)   F77_UBYTE_TYPE X[D]
-#define DECLARE_UWORD_ARRAY(X,D)   F77_UWORD_TYPE X[D]
-#define DECLARE_POINTER_ARRAY(X,D) F77_POINTER_TYPE X[D]
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
-   const int X##_length = L
-
-/*  ---  Declare and construct dynamic CHARACTER arguments ---                      */
-#define DECLARE_CHARACTER_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X##_length
-#define F77_CREATE_CHARACTER(X,L)  X=cnfCref(L);\
-   X##_length = L
-
-/* Declare Dynamic Fortran arrays */
-#define DECLARE_INTEGER_ARRAY_DYN(X) F77_INTEGER_TYPE *X
-#define DECLARE_REAL_ARRAY_DYN(X)    F77_REAL_TYPE *X
-#define DECLARE_DOUBLE_ARRAY_DYN(X)  F77_DOUBLE_TYPE *X
-#define DECLARE_LOGICAL_ARRAY_DYN(X) F77_LOGICAL_TYPE *X
-#define DECLARE_BYTE_ARRAY_DYN(X)    F77_BYTE_TYPE *X
-#define DECLARE_WORD_ARRAY_DYN(X)    F77_WORD_TYPE *X
-#define DECLARE_UBYTE_ARRAY_DYN(X)   F77_UBYTE_TYPE *X
-#define DECLARE_UWORD_ARRAY_DYN(X)   F77_UWORD_TYPE *X
-#define DECLARE_POINTER_ARRAY_DYN(X) F77_POINTER_TYPE *X
-#define DECLARE_CHARACTER_ARRAY_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X##_length
-
-/* Create arrays dynamic Fortran arrays for those types which require */
-/* Separate space for Fortran and C arrays                            */
-/* Character and logical are already defined                          */
-/* For most types there is nothing to do                              */
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
-        {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X##_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D)  X=cnfCrefa(L,N,D);\
-   X##_length = L
-#define F77_CREATE_LOGICAL_ARRAY(X,N) \
-        {int f77dims[1];f77dims[0]=N;X=cnfCrela(1,f77dims);}
-#define F77_CREATE_LOGICAL_ARRAY_M(X,N,D) X=cnfCrela(N,D)
-#define F77_CREATE_INTEGER_ARRAY(X,N)
-#define F77_CREATE_REAL_ARRAY(X,N)
-#define F77_CREATE_DOUBLE_ARRAY(X,N)
-#define F77_CREATE_BYTE_ARRAY(X,N)
-#define F77_CREATE_UBYTE_ARRAY(X,N)
-#define F77_CREATE_WORD_ARRAY(X,N)
-#define F77_CREATE_UWORD_ARRAY(X,N)
-#define F77_CREATE_POINTER_ARRAY(X,N)\
-        X=(F77_POINTER_TYPE *) malloc(N*sizeof(F77_POINTER_TYPE))
-
-/* Associate Fortran arrays with C arrays                             */
-/* These macros ensure that there is space somewhere for the Fortran  */
-/* array. They are complemetary to the CREATE_type_ARRAY macros       */
-#define F77_ASSOC_CHARACTER_ARRAY(F,C)
-#define F77_ASSOC_LOGICAL_ARRAY(F,C)
-#define F77_ASSOC_INTEGER_ARRAY(F,C) F=C
-#define F77_ASSOC_REAL_ARRAY(F,C) F=C
-#define F77_ASSOC_DOUBLE_ARRAY(F,C) F=C
-#define F77_ASSOC_BYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_UBYTE_ARRAY(F,C) F=C
-#define F77_ASSOC_WORD_ARRAY(F,C) F=C
-#define F77_ASSOC_UWORD_ARRAY(F,C) F=C
-#define F77_ASSOC_POINTER_ARRAY(F,C)
-
-/* Free created dynamic arrays */
-/* Character and logical are already defined */
-/* For most types there is nothing to do */
-#define F77_FREE_INTEGER(X)
-#define F77_FREE_REAL(X)
-#define F77_FREE_DOUBLE(X)
-#define F77_FREE_BYTE(X)
-#define F77_FREE_UBYTE(X)
-#define F77_FREE_WORD(X)
-#define F77_FREE_UWORD(X)
-#define F77_FREE_POINTER(X) cnfFree((void *)X);
-#define F77_FREE_CHARACTER(X) cnfFreef( X )
-#define F77_FREE_LOGICAL(X) cnfFree( (char *)X )
-
-/*  ---  IMPORT and EXPORT of values  --- */
-/* Export C variables to Fortran variables */
-#define F77_EXPORT_CHARACTER(C,F,L) cnfExprt(C,F,L)
-#define F77_EXPORT_DOUBLE(C,F) F=C
-#define F77_EXPORT_INTEGER(C,F) F=C
-#define F77_EXPORT_LOGICAL(C,F) F=C?F77_TRUE:F77_FALSE
-#define F77_EXPORT_REAL(C,F) F=C
-#define F77_EXPORT_BYTE(C,F) F=C
-#define F77_EXPORT_WORD(C,F) F=C
-#define F77_EXPORT_UBYTE(C,F) F=C
-#define F77_EXPORT_UWORD(C,F) F=C
-#define F77_EXPORT_POINTER(C,F) F=cnfFptr(C)
-#define F77_EXPORT_LOCATOR(C,F) cnfExpch(C,F,DAT__SZLOC)
-
-/* Export C arrays to Fortran */
-/* Arrays are assumed to be 1-d so just the number of elements is given  */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_EXPORT_CHARACTER_ARRAY(C,LC,F,LF,N) \
-        {int f77dims[1];f77dims[0]=N;cnfExprta(C,LC,F,LF,1,f77dims);}
-#define F77_EXPORT_CHARACTER_ARRAY_P(C,F,LF,N) \
-        {int f77dims[1];f77dims[0]=N;cnfExprtap(C,F,LF,1,f77dims);}
-#define F77_EXPORT_DOUBLE_ARRAY(C,F,N) F=(F77_DOUBLE_TYPE *)C
-#define F77_EXPORT_INTEGER_ARRAY(C,F,N) F=(F77_INTEGER_TYPE *)C
-#define F77_EXPORT_LOGICAL_ARRAY(C,F,N) \
-        {int f77dims[1];f77dims[0]=N;cnfExpla(C,F,1,f77dims);}
-#define F77_EXPORT_REAL_ARRAY(C,F,N) F=(F77_REAL_TYPE *)C
-#define F77_EXPORT_BYTE_ARRAY(C,F,N) F=(F77_BYTE_TYPE *)C
-#define F77_EXPORT_WORD_ARRAY(C,F,N) F=(F77_WORD_TYPE *)C
-#define F77_EXPORT_UBYTE_ARRAY(C,F,N) F=(F77_UBYTE_TYPE *)C
-#define F77_EXPORT_UWORD_ARRAY(C,F,N) F=(F77_UWORD_TYPE * )C
-#define F77_EXPORT_POINTER_ARRAY(C,F,N) \
-     {int f77i;for (f77i=0;f77i<N;f77i++)F[f77i]=cnfFptr(C[f77i]);}
-#define F77_EXPORT_LOCATOR_ARRAY(C,F,N) \
-        {int f77i;for (f77i=0;f77i<N;f77i++)cnfExpch(C,F,DAT__SZLOC);}
-
-/* Import Fortran variables to C */
-#define F77_IMPORT_CHARACTER(F,L,C) cnfImprt(F,L,C)
-#define F77_IMPORT_DOUBLE(F,C) C=F
-#define F77_IMPORT_INTEGER(F,C) C=F
-#define F77_IMPORT_LOGICAL(F,C) C=F77_ISTRUE(F)
-#define F77_IMPORT_REAL(F,C) C=F
-#define F77_IMPORT_BYTE(F,C) C=F
-#define F77_IMPORT_WORD(F,C) C=F
-#define F77_IMPORT_UBYTE(F,C) C=F
-#define F77_IMPORT_UWORD(F,C) C=F
-#define F77_IMPORT_POINTER(F,C) C=cnfCptr(F)
-#define F77_IMPORT_LOCATOR(F,C) cnfImpch(F,DAT__SZLOC,C)
-
-/* Import Fortran arrays to C */
-/* Arrays are assumed to be 1-d so just the number of elements is given  */
-/* This may be OK for n-d arrays also */
-/* CHARACTER arrays may be represented in C as arrays of arrays of char or */
-/* as arrays of pointers to char (the _P variant) */
-#define F77_IMPORT_CHARACTER_ARRAY(F,LF,C,LC,N) \
-        {int f77dims[1];f77dims[0]=N;cnfImprta(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_CHARACTER_ARRAY_P(F,LF,C,LC,N) \
-        {int f77dims[1];f77dims[0]=N;cnfImprtap(F,LF,C,LC,1,f77dims);}
-#define F77_IMPORT_DOUBLE_ARRAY(F,C,N)
-#define F77_IMPORT_INTEGER_ARRAY(F,C,N)
-#define F77_IMPORT_LOGICAL_ARRAY(F,C,N) \
-        {int f77dims[1];f77dims[0]=N;cnfImpla(F,C,1,f77dims);}
-#define F77_IMPORT_REAL_ARRAY(F,C,N)
-#define F77_IMPORT_BYTE_ARRAY(F,C,N)
-#define F77_IMPORT_WORD_ARRAY(F,C,N)
-#define F77_IMPORT_UBYTE_ARRAY(F,C,N)
-#define F77_IMPORT_UWORD_ARRAY(F,C,N)
-#define F77_IMPORT_POINTER_ARRAY(F,C,N) \
-        {int f77i;for (f77i=0;f77i<N;f77i++)C[f77i]=cnfCptr(F[f77i]);}
-#define F77_IMPORT_LOCATOR_ARRAY(F,C,N) \
-        {int f77i;for (f77i=0;f77i<N;f77i++)cnfImpch(F,DAT__SZLOC,C);}
-
-/*  ---  Call a FORTRAN routine  ---					    */
-
-#define F77_CALL(X)  F77_EXTERNAL_NAME(X)
-
-
-/*  ---  Pass arguments to a FORTRAN routine  ---			    */
-
-#define INTEGER_ARG(X)   X
-#define REAL_ARG(X)      X
-#define DOUBLE_ARG(X)    X
-#define LOGICAL_ARG(X)   X
-#define BYTE_ARG(X)      X
-#define WORD_ARG(X)      X
-#define UBYTE_ARG(X)     X
-#define UWORD_ARG(X)     X
-#define POINTER_ARG(X)   X
-#define CHARACTER_ARG(X) X
-#define TRAIL_ARG(X)     ,X##_length
-
-#define SUBROUTINE_ARG(X)  X
-#define INTEGER_FUNCTION_ARG(X)  X
-#define REAL_FUNCTION_ARG(X)  X
-#define DOUBLE_FUNCTION_ARG(X)  X
-#define LOGICAL_FUNCTION_ARG(X)  X
-#define CHARACTER_FUNCTION_ARG(X)  X
-#define BYTE_FUNCTION_ARG(X)  X
-#define WORD_FUNCTION_ARG(X)  X
-#define UBYTE_FUNCTION_ARG(X)  X
-#define UWORD_FUNCTION_ARG(X)  X
-#define POINTER_FUNCTION_ARG(X)  X
-
-#define INTEGER_ARRAY_ARG(X)   (F77_INTEGER_TYPE *)X
-#define REAL_ARRAY_ARG(X)      (F77_REAL_TYPE *)X
-#define DOUBLE_ARRAY_ARG(X)    (F77_DOUBLE_TYPE *)X
-#define LOGICAL_ARRAY_ARG(X)   (F77_LOGICAL_TYPE *)X
-#define BYTE_ARRAY_ARG(X)      (F77_BYTE_TYPE *)X
-#define WORD_ARRAY_ARG(X)      (F77_WORD_TYPE *)X
-#define UBYTE_ARRAY_ARG(X)     (F77_UBYTE_TYPE *)X
-#define UWORD_ARRAY_ARG(X)     (F77_UWORD_TYPE *)X
-#define POINTER_ARRAY_ARG(X)   (F77_POINTER_TYPE *)X
-#define CHARACTER_ARRAY_ARG(X) (F77_CHARACTER_ARRAY_ARG_TYPE *)X
-
-
-/* ------------------------ Non-ansi section ------------------------------ */
-
-/*  The difference between ANSI and non-ANSI compilers, as far as macro	    */
-/*  definition is concerned, is that non-ANSI compilers do not support the  */
-/*  token concatenation operator (##). To work around this, we use the fact */
-/*  that the null comment is preprocessed to produce no characters at all   */
-/*  by our non-ANSI compilers.						    */
-/*  This section does not deal with the fact that some non-ANSI compilers   */
-/*  cannot handle function prototypes. That is handled in the machine 	    */
-/*  specific sections.							    */
-
-#if !defined(__STDC__)
-
-/*  ---  External Name  ---						    */
-
-/*  Macro to define the name of a Fortran routine or common block. This	    */
-/*  ends in an underscore on many Unix systems.				    */
-
-#undef  F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X/**/_
-
-
-/*  ---  Dummy Arguments  ---						    */
-
-/*  Macros to handle character dummy arguments.				    */
-
-#undef  TRAIL
-#define TRAIL(X) , at TRAIL_TYPE@ X/**/_length
-
-
-/*  ---  Declare variables  ---						    */
-
-#undef  DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L)         F77_CHARACTER_TYPE X[L]; \
-   const int X/**/_length = L
-#undef  DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) F77_CHARACTER_TYPE X[D][L]; \
-   const int X/**/_length = L
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X/**/_length
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X)   F77_CHARACTER_TYPE *X;\
-   int X/**/_length
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L)  X=cnfCref(L);\
-   X/**/_length = L
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
-        {int f77dims[1];f77dims[0]=N;X=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-
-/*  ---  Pass arguments to a FORTRAN routine  ---			    */
-
-#undef  TRAIL_ARG
-#define TRAIL_ARG(X)     ,X/**/_length
-
-
-#endif  /* of non ANSI redefinitions					    */
-
-
-/* -----------------------------------------------------------------------  */
-
-/* The standard macros defined above are known to work with the following   */
-/* systems:								    */
- 
-/*--------
-|   Sun   |
----------*/
-
-/*  On SunOS, the ANSI definitions work with the acc and gcc compilers.     */
-/*  The cc compiler uses the non ANSI definitions. It also needs the K&R    */
-/*  definitions in the file kr.h.					    */
-/*  On Solaris, the standard definitions work with the cc compiler.	    */
-
-#if defined(sun)
-
-#if !defined(__STDC__)
-#if !defined(_F77_KR)
-#define _F77_KR
-#endif
-#endif
-
-#endif	/* Sun								    */
-
-/* -------------------- System dependent sections ------------------------- */
-
-/*------------
-|   VAX/VMS   |
--------------*/
-
-/* Many macros need to be changed due to the way that VMS handles external  */
-/* names, passes character arguments and handles logical values.	    */
-
-
-#if defined(VMS)
-
-/*  ---  Data Types  ---						    */
-
-/*  Redefine the macro for the byte data type as signed is not valid syntax */
-/*  as the VMS compiler is not ANSI compliant.				    */
-
-#undef  F77_BYTE_TYPE
-#define F77_BYTE_TYPE      char
-
-
-/*  ---  External Names  ---						    */
-
-/*  Macro to define the name of a Fortran routine or common block.	    */
-/*  Fortran and C routines names are the same on VMS.			    */
-
-#undef  F77_EXTERNAL_NAME
-#define F77_EXTERNAL_NAME(X) X
-
-
-/*  ---  Dummy Arguments  ---						    */
-
-/*  Macros to handle character arguments.				    */
-/*  Character string arguments are pointers to character string descriptors */
-/*  and there are no trailing arguments.				    */
-
-#if( VMS != 0 )
-#include <descrip.h>
-#endif
-
-
-#undef  F77_CHARACTER_ARG_TYPE
-#define F77_CHARACTER_ARG_TYPE struct dsc$descriptor_s
-#undef  F77_CHARACTER_ARRAY_ARG_TYPE
-#define F77_CHARACTER_ARRAY_ARG_TYPE struct dsc$descriptor_a
-#undef  CHARACTER
-#define CHARACTER(X) F77_CHARACTER_ARG_TYPE *CNF_CONST X/**/_arg
-#undef  TRAIL
-#define TRAIL(X)
-#undef  CHARACTER_ARRAY
-#define CHARACTER_ARRAY(X)  F77_CHARACTER_ARRAY_ARG_TYPE *CNF_CONST X/**/_arg
-#undef  GENPTR_CHARACTER
-#define GENPTR_CHARACTER(X) \
-   F77_CHARACTER_TYPE *X = X/**/_arg->dsc$a_pointer; \
-   int X/**/_length = X/**/_arg->dsc$w_length;
-#undef  GENPTR_CHARACTER_ARRAY
-#define GENPTR_CHARACTER_ARRAY(X)   GENPTR_CHARACTER(X)
-
-
-/*  ---  Logical Values  ---						    */
-
-#undef  F77_TRUE
-#define F77_TRUE -1
-#undef  F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef  F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-/*  ---  Common Blocks  ---						    */
-
-#undef  F77_BLANK_COMMON
-#define F77_BLANK_COMMON  $BLANK
-
-
-/*  ---  Declare Variables  ---						    */
-
-#undef  DECLARE_CHARACTER
-#define DECLARE_CHARACTER(X,L) \
-   F77_CHARACTER_TYPE X[L];    const int X/**/_length = L; \
-   F77_CHARACTER_ARG_TYPE X/**/_descr = \
-      { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
-   F77_CHARACTER_ARG_TYPE *X/**/_arg = &X/**/_descr
-#undef  DECLARE_CHARACTER_ARRAY
-#define DECLARE_CHARACTER_ARRAY(X,L,D) \
-   F77_CHARACTER_TYPE X[D][L]; const int X/**/_length = L; \
-   F77_CHARACTER_ARRAY_ARG_TYPE X/**/_descr = \
-      { L, DSC$K_DTYPE_T, DSC$K_CLASS_S, X }; \
-   F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg = &X/**/_descr
-
-
-/*  ---  The dynamic allocation of character arguments  ---                 */
-#undef DECLARE_CHARACTER_DYN
-#define DECLARE_CHARACTER_DYN(X) int X/**/_length;\
-                                  F77_CHARACTER_ARG_TYPE *X/**/_arg;\
-                                  F77_CHARACTER_TYPE *X
-#undef DECLARE_CHARACTER_ARRAY_DYN
-#define DECLARE_CHARACTER_ARRAY_DYN(X) int X/**/_length;\
-                                  F77_CHARACTER_ARRAY_ARG_TYPE *X/**/_arg;\
-                                  F77_CHARACTER_TYPE *X
-#undef F77_CREATE_CHARACTER
-#define F77_CREATE_CHARACTER(X,L) X/**/_arg = cnfCref(L);\
-                                  X = X/**/_arg->dsc$a_pointer; \
-                                  X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_CREATE_CHARACTER_ARRAY
-#define F77_CREATE_CHARACTER_ARRAY(X,L,N) \
-  {int f77dims[1];f77dims[0]=N;X/**/_arg=cnfCrefa(L,1,f77dims);X/**/_length=L;}
-#define F77_CREATE_CHARACTER_ARRAY_M(X,L,N,D) X/**/_arg = cnfCrefa(L,N,D);\
-                                  X = X/**/_arg->dsc$a_pointer; \
-                                  X/**/_length = X/**/_arg->dsc$w_length
-#undef F77_FREE_CHARACTER
-#define F77_FREE_CHARACTER(X)     cnfFreef( X/**/_arg )
-
-/*  ---  Pass arguments to a FORTRAN routine  ---			    */
-
-#undef  CHARACTER_ARG
-#define CHARACTER_ARG(X) X/**/_arg
-#undef  CHARACTER_ARRAY_ARG
-#define CHARACTER_ARRAY_ARG(X) X/**/_arg
-#undef  TRAIL_ARG
-#define TRAIL_ARG(X)
-
-#endif  /* VMS								    */
-
-/* -----------------------------------------------------------------------  */
-
-/*--------------------------
-|   DECstation Ultrix (cc)  |
-|   DECstation Ultrix (c89) |
-|   DECstation OSF/1        |
-|   Alpha OSF/1             |
- --------------------------*/
-
-/* Do this complicated set of definitions as a single #if cannot be	    */
-/* continued across multiple lines.					    */
-
-#if defined(mips) && defined(ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips) && defined(__ultrix)
-#define _dec_unix 1
-#endif
-#if defined(__mips__) && defined(__osf__)
-#define _dec_unix 1
-#endif
-#if defined(__alpha) && defined(__osf__)
-#define _dec_unix 1
-#endif
-
-#if _dec_unix
-
-/*  The macros for Ultrix are the same as the standard ones except for ones */
-/*  dealing with logical values. The ANSI definitions work with the c89	    */
-/*  compiler, and the non ANSI definitions work with the cc compiler.	    */
-/*  The same applies to DEC OSF/1, except that its cc compiler is ANSI	    */
-/*  compliant.								    */
-
-
-/*  ---  Logical Values  ---						    */
-
-/*  Redefine macros that evaluate to a C logical value, given a FORTRAN	    */
-/*  logical value. These definitions are only valid when used with the DEC  */
-/*  FORTRAN for RISC compiler. If you are using the earlier FORTRAN for	    */
-/*  RISC compiler from MIPS, then these macros should be deleted.	    */
-
-#undef  F77_TRUE
-#define F77_TRUE -1
-#undef  F77_ISTRUE
-#define F77_ISTRUE(X) ( (X)&1 )
-#undef  F77_ISFALSE
-#define F77_ISFALSE(X) ( ! ( (X)&1 ) )
-
-
-#endif  /* DEC Unix							    */
-
-/*
-*+
-*  Name:
-*     cnf.h
-
-*  Purpose:
-*     Function prototypes for cnf routines
-
-*  Language:
-*     ANSI C
-
-*  Type of Module:
-*     C include file
-
-*  Description:
-*     These are the prototype definitions for the functions in the CNF
-*     library. They are used used in mixing C and FORTRAN programs.
-
-*  Copyright:
-*     Copyright (C) 1991 Science & Engineering Research Council
-
-*  Authors:
-*     PMA: Peter Allan (Starlink, RAL)
-*     AJC: Alan Chipperfield (Starlink, RAL)
-*     {enter_new_authors_here}
-
-*  History:
-*     23-MAY-1991 (PMA):
-*        Original version.
-*     12-JAN-1996 (AJC):
-*        Add cnf_cref and cnf_freef
-*     14-JUN-1996 (AJC):
-*        Add cnf_crefa, imprta, exprta
-*                crela, impla, expla
-*     18-JUL-1996 (AJC):
-*        Add impch and expch
-*     17-MAR-1998 (AJC):
-*        Add imprtap and exprtap
-*     {enter_changes_here}
-
-*  Bugs:
-*     {note_any_bugs_here}
-
-*-
-------------------------------------------------------------------------------
-*/
-void *cnfCalloc( size_t, size_t );
-void cnfCopyf( const char *source_f, int source_len, char *dest_f,
-                int dest_len );
-void *cnfCptr( F77_POINTER_TYPE );
-char *cnfCreat( int length );
-F77_CHARACTER_ARG_TYPE *cnfCref( int length );
-F77_CHARACTER_ARG_TYPE *cnfCrefa( int length, int ndims, const int *dims );
-char *cnfCreib( const char *source_f, int source_len );
-char *cnfCreim( const char *source_f, int source_len );
-F77_LOGICAL_TYPE *cnfCrela( int ndims, const int *dims );
-void cnfExpch( const char *source_c, char *dest_f, int nchars );
-void cnfExpla( const int *source_c, F77_LOGICAL_TYPE *dest_f, int ndims,
-                const int *dims );
-void cnfExpn( const char *source_c, int max, char *dest_f, int dest_len );
-void cnfExprt( const char *source_c, char *dest_f, int dest_len );
-void cnfExprta( const char *source_c, int source_len, char *dest_f,
-                 int dest_len, int ndims, const int *dims );
-void cnfExprtap( char *const *source_c, char *dest_f, int dest_len, 
-                  int ndims, const int *dims );
-F77_POINTER_TYPE cnfFptr( void *cpointer );
-void cnfFree( void * );
-void cnfFreef( F77_CHARACTER_ARG_TYPE *temp );
-void cnfImpb( const char *source_f, int source_len, char *dest_c );
-void cnfImpbn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImpch( const char *source_f, int nchars, char *dest_c );
-void cnfImpla( const F77_LOGICAL_TYPE *source_f, int *dest_c,
-                int ndims, const int *dims );
-void cnfImpn( const char *source_f, int source_len, int max, char *dest_c );
-void cnfImprt( const char *source_f, int source_len, char *dest_c );
-void cnfImprta( const char *source_f, int source_len, char *dest_c,
-                 int dest_len, int ndims, const int *dims );
-void cnfImprtap( const char *source_f, int source_len, char *const *dest_c,
-                  int dest_len, int ndims, const int *dims );
-int cnfLenc( const char *source_c );
-int cnfLenf( const char *source_f, int source_len );
-void *cnfMalloc( size_t );
-int cnfRegp( void * );
-void cnfUregp( void * );
-#endif
-
-#ifndef CNF_OLD_DEFINED
-#define CNF_OLD_DEFINED
-/* Define old names to be new names */
-#define cnf_calloc cnfCalloc
-#define cnf_copyf cnfCopyf
-#define cnf_cptr cnfCptr
-#define cnf_creat cnfCreat
-#define cnf_cref cnfCref
-#define cnf_crefa cnfCrefa
-#define cnf_creib cnfCreib
-#define cnf_creim cnfCreim
-#define cnf_crela cnfCrela
-#define cnf_expch cnfExpch
-#define cnf_expla cnfExpla
-#define cnf_expn cnfExpn
-#define cnf_exprt cnfExprt
-#define cnf_exprta cnfExprta
-#define cnf_exprtap cnfExprtap
-#define cnf_fptr cnfFptr
-#define cnf_free cnfFree
-#define cnf_freef cnfFreef
-#define cnf_impb cnfImpb
-#define cnf_impbn cnfImpbn
-#define cnf_impch cnfImpch
-#define cnf_impla cnfImpla
-#define cnf_impn cnfImpn
-#define cnf_imprt cnfImprt
-#define cnf_imprta cnfImprta
-#define cnf_imprtap cnfImprtap
-#define cnf_lenc cnfLenc
-#define cnf_lenf cnfLenf
-#define cnf_malloc cnfMalloc
-#define cnf_regp cnfRegp
-#define cnf_uregp cnfUregp
-
-#endif
diff --git a/ast-5.3-1/fac_1521_err b/ast-5.3-1/fac_1521_err
deleted file mode 100644
index 0be574c..0000000
--- a/ast-5.3-1/fac_1521_err
+++ /dev/null
@@ -1,139 +0,0 @@
-FACILITY AST
-300,ATGER,attribute getting error
-301,ATSER,attribute setting error
-302,ATTIN,attribute value invalid
-303,AXIIN,axis index invalid
-304,BADAT,bad attribute name
-305,BADBX,zero-sized box given
-306,BADIN,bad input data
-307,BADNI,bad number of input coordinates
-308,BADNO,bad number of output coordinates
-309,BADPW,PolyMap contains illegal power value
-310,BADSM,ShiftMap contains no shift information
-311,BADWM,WinMap contains no bounds information
-312,BDBRK,bad break index
-313,BDFMT,bad field specifier
-314,BDFTS,invalid FITS keyword value found
-315,BDOBJ,inappropriate Object supplied
-316,CLPAX,wrong number of clipping axes
-317,CORNG,range of coordinates invalid
-318,CVBRK,too many breaks in a curve
-319,DIMIN,array dimensions invalid
-320,DTERR,date/time error
-321,ENDIN,invalid use of astEnd
-322,EOCHN,end of input Channel encountered
-323,EXPIN,attempt to export Object pointer from level zero
-324,FCRPT,corrupted FitsChan supplied
-325,FMTER,error while formatting coordinate value
-326,FRMIN,Frame index invalid
-327,FRSIN,FrameSet invalid
-328,FTCNV,cannot convert FITS data value type
-329,GRFER,low level graphics error
-330,INHAN,invalid Handle
-331,INNCO,incompatible numbers of coordinates
-332,INTER,internal programming error
-333,INTRD,incompatible transformation directions
-334,KYCIR,circular dependency between KeyMaps
-335,LDERR,class loader error
-336,LUTII,invalid lookup table increment
-337,LUTIN,invalid number of lookup table elements
-338,MEMIN,requested memory size invalid
-339,MTR23,not a 2d or 3d MatrixMap
-340,MTRAX,null rotation axis supplied
-341,MTRML,bad matrix shapes for multiplication
-342,MTRMT,null matrix supplied
-343,NAXIN,number of axes invalid
-344,NCHIN,number of characters invalid
-345,NCOIN,number of coordinates invalid
-346,NCPIN,number of coordinates per point invalid
-347,NELIN,number of array elements invalid
-348,NOCTS,number of output coordinates too small
-349,NODEF,transformation not defined
-350,NOFTS,required FITS keywords missing
-351,NOMEM,unable to allocate memory
-352,NOPTS,number of output points too small
-353,NOWRT,attribute is read-only
-354,NPTIN,number of points invalid
-355,OBJIN,Object invalid
-356,OPT,invalid Plot option
-357,PDSIN,points data structure invalid
-358,PLFMT,no numerical labels can be produced
-359,PRMIN,permutation invalid
-360,PTRIN,pointer invalid
-361,PTRNG,range of points invalid
-362,RDERR,read error
-363,REGIN,invalid or corrupted Region structure supplied
-364,REMIN,invalid attempt to remove last Frame
-365,SCSIN,sky coordinate system invalid
-366,SELIN,axis selection invalid
-367,SLAIN,bad SLALIB transformation type
-368,TRNND,coordinate transformation not defined
-369,UNMQT,unmatched quotes
-370,VSMAL,valid area too small
-371,WCSAX,non-existent longitude or latitude axis
-372,WCSNC,too few mapping coordinates
-373,WCSPA,invalid projection parameters
-374,WCSTY,unknown projection type
-375,XSOBJ,too many Objects in use at once
-376,ZOOMI,zoom factor invalid
-377,BADCI,bad coordinate index
-378,ILOST,FrameSet integrity lost
-379,ITFER,error in IntraMap transformation function
-380,ITFNI,IntraMap transformation function name invalid
-381,MBBNF,Mapping bounding box not found
-382,MRITF,multiple registration of IntraMap transformation function
-383,OCLUK,Object class unknown
-384,UNFER,error while unformatting a coordinate value
-385,URITF,unregistered IntraMap transformation function
-386,GBDIN,grid bounds invalid
-387,NGDIN,number of grid dimensions invalid
-388,PATIN,positional accuracy tolerance invalid
-389,SISIN,sub-pixel interpolation scheme invalid
-390,SSPIN,scale size in pixels invalid
-391,UINER,error in user-supplied sub-pixel interpolation function
-392,UK1ER,error in user-supplied 1-d sub-pixel interpolation kernel
-393,COMIN,invalid comma in expression
-394,CONIN,invalid constant in expression
-395,DUVAR,duplicate variable name
-396,INNTF,invalid number of transformation functions
-397,MIOPA,missing or invalid operand in expression
-398,MIOPR,missing or invalid operator in expression
-399,MISVN,missing variable name
-400,MLPAR,missing left parenthesis in expression
-401,MRPAR,missing right parenthesis in expression
-402,NORHS,missing right hand side in function
-403,UDVOF,undefined variable or function in expression
-404,VARIN,variable name invalid
-405,WRNFA,wrong number of function arguments in expression
-406,BADUN,invalid units specification
-407,NORSF,no rest frequency is defined
-408,NOSOR,no standard of rest is defined
-409,SPCIN,invalid SpecMap
-410,XMLNM,invalid XML name or prefix
-411,XMLCM,invalid XML comment text
-412,XMLPT,invalid XML processing instruction target text
-413,XMLIT,invalid XML content item index
-414,XMLWF,supplied XML document is not well formed
-415,ZERAX,Range of log axis scale includes zero
-416,BADOC,Invalid parameters for offset sky coordinate system
-417,MPGER,error getting a named value from a KeyMap
-418,MPIND,invalid integer index supplied for a KeyMap entry
-419,REGCN,region cannot be re-centred
-420,NOVAL,attribute has no usable value
-421,INCTS,incompatible time scales
-422,TIMIN,invalid TimeMap
-423,STCKEY,cannot use supplied AstroCoords info
-424,STCIND,invalid AstroCoords index
-425,CNFLX,cannot conserve flux whilst resampling an array of data
-426,TUNAM,Unknown AST tuning parameter name supplied
-427,BDPAR,Bad value supplied for a public function parameter
-428,3DFSET,Supplied FrameSet does not contain any independent axes
-429,PXFRRM,Attempt to delete original Plot3D base Frame
-430,BADSUB,Illegal syntax for string substitution template
-431,BADFLG,Incompatible flags for re-sampling or re-binning
-432,LCKERR,Error locking or unlocking an AST Object
-433,FUNDEF,FITS keyword had undefined value
-434,MPVIN,invalid integer index supplied for a KeyMap vector element
-435,OPRIN,operation specifier invalid
-436,NONIN,no inside point found
-437,MPKER,requested key not found in KeyMap
diff --git a/ast-5.3-1/fbox.c b/ast-5.3-1/fbox.c
deleted file mode 100644
index e727a07..0000000
--- a/ast-5.3-1/fbox.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-*  Name:
-*     fbox.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Box class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Box class.
-
-*  Routines Defined:
-*     AST_ISABOX
-*     AST_BOX
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-MAR-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "box.h"                 /* C interface to the Box class */
-
-F77_LOGICAL_FUNCTION(ast_isabox)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISABOX", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsABox( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_box)( INTEGER(FRAME),
-                               INTEGER(FORM),
-                               DOUBLE_ARRAY(POINT1),
-                               DOUBLE_ARRAY(POINT2),
-                               INTEGER(UNC),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_INTEGER(FORM)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_BOX", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astBox( astI2P( *FRAME ), *FORM, POINT1, POINT2, 
-                               astI2P( *UNC ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fchannel.c b/ast-5.3-1/fchannel.c
deleted file mode 100644
index d238f2f..0000000
--- a/ast-5.3-1/fchannel.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
-*+
-*  Name:
-*     fchannel.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Channel class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Channel class.
-
-*  Routines Defined:
-*     AST_CHANNEL
-*     AST_ISACHANNEL
-*     AST_READ
-*     AST_WRITE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     6-SEP-1996 (RFWS):
-*        Original version.
-*     12-DEC-1996 (RFWS):
-*        Added SOURCE and SINK arguments to AST_CHANNEL.
-*     13-NOV-2003 (DSB):
-*        Made SourceWrap and SinkWrap into protected functions rather
-*        than private functions, so that they can be used in fxmlchan.c
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "channel.h"             /* C interface to the Channel class */
-
-#include <stddef.h>
-
-/* Module Variables. */
-/* ================= */
-static char *line_in = NULL;     /* Pointer to incoming line of text */
-static const char *line_out = NULL; /* Pointer to outgoing line of text */
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* Source and sink function interfaces. */
-/* ==================================== */
-/* These functions are concerned with allowing FORTRAN implementations
-   of Channel source and sink functions to be passed to the Channel
-   class and invoked when necessary by C code in the main class
-   implementation. All FORTRAN-specific aspects of this interface are
-   encapsulated here. */
-F77_SUBROUTINE(ast_getline)( CHARACTER(LINE),
-                             INTEGER(L),
-                             INTEGER(STATUS)
-                             TRAIL(LINE) ) {
-/*
-f++
-*  Name:
-*     AST_GETLINE
-
-*  Purpose:
-*     Obtain text to be written by a Channel sink routine.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     CALL AST_GETLINE( LINE, L, STATUS )
-
-*  Description:
-*     This routine should only be used when implementing a routine
-*     which will be passed as the SINK argument to AST_CHANNEL. It
-*     should be used to obtain (from the AST library) each line of
-*     text which is to be written to the external data sink. One such
-*     line should be obtained in this way for each invocation of the
-*     sink routine.
-
-*  Parameters:
-*     LINE = CHARACTER * ( * ) (Returned)
-*        The line of text to be written. Depending on the length of
-*        character variable supplied, the returned text may be
-*        truncated if necessary. Note, however, that it will not be
-*        padded with blanks in order to fill this variable.
-*     L = INTEGER (Returned)
-*        The number of characters returned, which may be zero. Note
-*        that characters beyond the L'th character in the LINE
-*        variable are not modified and may therefore contain junk.
-*     STATUS = INTEGER (Given and Returned)
-*        The global status.
-
-*  Notes:
-*     - This routine is only available in the Fortran interface to the
-*     AST library.
-f--
-*/
-
-/* Argument Pointers: */
-   GENPTR_CHARACTER(LINE)
-   GENPTR_INTEGER(L)
-
-/* Local Variables: */
-   int i;                        /* Loop counter for characters */
-
-/* Set the error context and watch the STATUS value. */
-   astAt( "AST_GETLINE", NULL, 0 );
-   astWatchSTATUS(
-
-/* Initialise the returned string length. */
-      *L = 0;
-
-/* Check the global error status. */
-      if ( !astOK ) return;
-
-/* If there is no outgoing line ready (e.g. if this routine has been
-   called at an inappropriate point), we simply return
-   nothing. Otherwise, loop to copy the text into the character
-   argument supplied, ensuring that its length is not exceeded. */
-      if ( line_out ) {
-         for ( i = 0; line_out[ i ] && ( i < LINE_length ); i++ ) {
-            LINE[ i ] = line_out[ i ];
-         }
-
-/* Return the number of characters copied. */
-         *L = i;
-      }
-   )
-}
-
-F77_SUBROUTINE(ast_putline)( CHARACTER(LINE),
-                             INTEGER(L),
-                             INTEGER(STATUS)
-                             TRAIL(LINE) ) {
-/*
-f++
-*  Name:
-*     AST_PUTLINE
-
-*  Purpose:
-*     Store a text line read by a Channel source routine.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     CALL AST_PUTLINE( LINE, L, STATUS )
-
-*  Description:
-*     This routine should only be used when implementing a routine
-*     which will be passed as the SOURCE argument to AST_CHANNEL. It
-*     should be used to pass back (to the AST library) each line of
-*     text read from the external data source. One such line should be
-*     passed back in this way for each invocation of the source
-*     routine.
-
-*  Parameters:
-*     LINE = CHARACTER * ( * ) (Given)
-*        A character string containing the line of input text which
-*        has been read.
-*     L = INTEGER (Given)
-*        The number of characters in the input line, which may be
-*        zero. If there is no more input available (e.g. an end of
-*        file has been reached), this value should be set negative and
-*        this will terminate the read operation on the Channel.
-*     STATUS = INTEGER (Given and Returned)
-*        The global status.
-
-*  Notes:
-*     - This routine is only available in the Fortran interface to the
-*     AST library.
-f--
-*/
-
-/* Argument Pointers: */
-   GENPTR_CHARACTER(LINE)
-   GENPTR_INTEGER(L)
-
-/* Local Variables: */
-   int l;                        /* Number of characters in line */
-
-/* Set the error context and watch the STATUS value. */
-   astAt( "AST_PUTLINE", NULL, 0 );
-   astWatchSTATUS(
-
-/* Initialise the incoming line pointer. */
-      line_in = NULL;
-
-/* Check the global error status. */
-      if ( !astOK ) return;
-
-/* Obtain the number of characters in the line. */
-      l = *L;
-
-/* Negative values (or STATUS set) indicate end of input. If the value
-   is not negative, limit the number of characters to the length of
-   the character variable supplied. */
-      if ( l >= 0 ) {
-         if ( l > LINE_length ) l = LINE_length;
-
-/* Create a dynamic string and fill it with the incoming data. Store
-   the resulting pointer, which will be picked up by the SourceWrap
-   function. */
-         line_in = astString( LINE, l );
-      }
-   )
-}
-
-void astSinkWrap_( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-*+
-*  Name:
-*     astSinkWrap
-
-*  Purpose:
-*     Wrapper function to invoke a FORTRAN Channel sink function.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     void astSinkWrap( void (* sink)( const char * ), const char *line )
-
-*  Description:
-*     This function invokes the sink function whose pointer is
-*     supplied in order to write an output line to an external data
-*     store.
-
-*  Parameters:
-*     sink
-*        Pointer to a sink function. This should result from a cast
-*        applied to a pointer to a function, with a single FORTRAN
-*        INTEGER error status argument, that returns void.  This is
-*        the form of Channel sink function employed by the FORTRAN
-*        language interface to the AST library.
-*     line
-*        Pointer to a constant null-terminated string containing the
-*        line of output text.
-*-
-*/
-
-/* Local Variables; */
-   DECLARE_INTEGER(STATUS);      /* FORTRAN error status variable */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store the pointer to the output text line in the (static)
-   "line_out" variable, where it will be accessed by the sink function
-   invoking AST_GETLINE. */
-   line_out = line;
-
-/* Cast the sink function pointer to a pointer to the FORTRAN
-   subroutine and then invoke it. Transfer the AST error status to and
-   from the subroutine's error status argument. */
-   STATUS = astStatus;
-   ( *(void (*)()) sink )( INTEGER_ARG(&STATUS) );
-   astSetStatus( STATUS );
-
-/* Clear the outgoing line pointer. */
-   line_out = NULL;
-}
-
-char *astSourceWrap_( const char *(* source)( void ), int *status ) {
-/*
-*+
-*  Name:
-*     astSourceWrap
-
-*  Purpose:
-*     Wrapper function to invoke a FORTRAN Channel source function.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     char *astSourceWrap( const char *(* source)( void ) )
-
-*  Description:
-*     This function invokes the source function whose pointer is
-*     supplied in order to read the next input line from an external
-*     data store. It then returns a pointer to a dynamic string
-*     containing a copy of the text that was read.
-
-*  Parameters:
-*     source
-*        Pointer to a source function. This should result from a cast
-*        applied to a pointer to a function, with a single FORTRAN
-*        INTEGER error status argument, that returns void.  This is
-*        the form of Channel source function employed by the FORTRAN
-*        language interface to the AST library.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated, null terminated string
-*     containing a copy of the text that was read. This string must be
-*     freed by the caller (using astFree) when no longer required.
-*
-*     A NULL pointer will be returned if there is no more input text
-*     to read.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*-
-*/
-
-/* Local Variables: */
-   DECLARE_INTEGER(STATUS);      /* FORTRAN error status variable */
-   char *result;                 /* Result pointer to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise the incoming line pointer. */
-   line_in = NULL;
-
-/* Cast the source function pointer to a pointer to the FORTRAN
-   subroutine and then invoke it. Transfer the AST error status to and
-   from the subroutine's error status argument. */
-   STATUS = astStatus;
-   ( *(void (*)()) source )( INTEGER_ARG(&STATUS) );
-   astSetStatus( STATUS );
-
-/* This should result in a pointer to a dynamic string containing the
-   input text being stored in the (static) "line_in" variable as a
-   result of the source function invoking AST_PUTLINE. Save this
-   string pointer and clear the original. */
-   result = line_in;
-   line_in = NULL;
-
-/* If an error occurred, free the returned string. */
-   if ( ! astOK ) result = astFree( result );
-
-/* Return the result. */
-   return result;
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_channel)( void (* SOURCE)(),
-                                   void (* SINK)(),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   const char *(* source)( void );
-   int i;
-   void (* sink)( const char * );
-
-   astAt( "AST_CHANNEL", NULL, 0 );
-   astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
-   the null routine AST_NULL has been supplied. */
-      source = (const char *(*)( void )) SOURCE;
-      if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
-         source = NULL;
-      }
-      sink = (void (*)( const char * )) SINK;
-      if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
-         sink = NULL;
-      }
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astChannelFor( source, astSourceWrap, sink, astSinkWrap,
-                                      "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isachannel)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISACHANNEL", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAChannel( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_read)( INTEGER(THIS),
-                                INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_READ", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astRead( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_write)( INTEGER(THIS),
-                                 INTEGER(OBJECT),
-                                 INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(OBJECT)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_WRITE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astWrite( astI2P( *THIS ), astI2P( *OBJECT ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_warnings)( INTEGER(THIS),
-                                    INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_WARNINGS", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astWarnings( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-
-
diff --git a/ast-5.3-1/fcircle.c b/ast-5.3-1/fcircle.c
deleted file mode 100644
index 3ad88dd..0000000
--- a/ast-5.3-1/fcircle.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-*+
-*  Name:
-*     fcircle.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Circle class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Circle class.
-
-*  Routines Defined:
-*     AST_ISACIRCLE
-*     AST_CIRCLE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     31-AUG-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "circle.h"              /* C interface to the Circle class */
-
-
-F77_LOGICAL_FUNCTION(ast_isacircle)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISACIRCLE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsACircle( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_circle)( INTEGER(FRAME),
-                               INTEGER(FORM),
-                               DOUBLE_ARRAY(POINT1),
-                               DOUBLE_ARRAY(POINT2),
-                               INTEGER(UNC),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_INTEGER(FORM)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_CIRCLE", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astCircle( astI2P( *FRAME ), *FORM, POINT1, POINT2, 
-                                  astI2P( *UNC ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_circlepars)( INTEGER(THIS),
-                                DOUBLE_ARRAY(CENTRE),
-                                DOUBLE(RADIUS),
-                                DOUBLE_ARRAY(P1),
-                                INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(CENTRE)
-   GENPTR_DOUBLE(RADIUS)
-   GENPTR_DOUBLE_ARRAY(P1)
-
-   astAt( "AST_CIRCLEPARS", NULL, 0 );
-   astWatchSTATUS(
-      astCirclePars( astI2P( *THIS ), CENTRE, RADIUS, P1 );
-   )
-}
-
diff --git a/ast-5.3-1/fcmpframe.c b/ast-5.3-1/fcmpframe.c
deleted file mode 100644
index 2bc16a9..0000000
--- a/ast-5.3-1/fcmpframe.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-*  Name:
-*     fcmpframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST CmpFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the CmpFrame class.
-
-*  Routines Defined:
-*     AST_CMPFRAME
-*     AST_ISACMPFRAME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     30-SEP-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "cmpframe.h"            /* C interface to the CmpFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isacmpframe)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISACMPFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsACmpFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_cmpframe)( INTEGER(FRAME1),
-                                    INTEGER(FRAME2),
-                                    CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME1)
-   GENPTR_INTEGER(FRAME2)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_CMPFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astCmpFrame( astI2P( *FRAME1 ), astI2P( *FRAME2 ),
-                                    "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fcmpmap.c b/ast-5.3-1/fcmpmap.c
deleted file mode 100644
index 279a35c..0000000
--- a/ast-5.3-1/fcmpmap.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-*+
-*  Name:
-*     fcmpmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST CmpMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the CmpMap class.
-
-*  Routines Defined:
-*     AST_ISACMPMAP
-*     AST_CMPMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     25-SEP-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "cmpmap.h"              /* C interface to the CmpMap class */
-
-F77_LOGICAL_FUNCTION(ast_isacmpmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astWatchSTATUS(
-   astAt( "AST_ISACMPMAP", NULL, 0 );
-      RESULT = astIsACmpMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_cmpmap)( INTEGER(MAP1),
-                                  INTEGER(MAP2),
-                                  LOGICAL(SERIES),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(MAP1)
-   GENPTR_INTEGER(MAP2)
-   GENPTR_LOGICAL(SERIES)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_CMPMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astCmpMap( astI2P( *MAP1 ), astI2P( *MAP2 ),
-                                  F77_ISTRUE( *SERIES ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fcmpregion.c b/ast-5.3-1/fcmpregion.c
deleted file mode 100644
index fdc5c90..0000000
--- a/ast-5.3-1/fcmpregion.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-*+
-*  Name:
-*     fcmpregion.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST CmpRegion class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the CmpRegion class.
-
-*  Routines Defined:
-*     AST_ISACMPREGION
-*     AST_CMPREGION
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     12-OCT-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "cmpregion.h"           /* C interface to the CmpRegion class */
-
-
-F77_LOGICAL_FUNCTION(ast_isacmpregion)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISACMPREGION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsACmpRegion( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_cmpregion)( INTEGER(REG1),
-                                     INTEGER(REG2),
-                                     INTEGER(OPER),
-                                     CHARACTER(OPTIONS),
-                                     INTEGER(STATUS)
-                                     TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(REG1)
-   GENPTR_INTEGER(REG2)
-   GENPTR_INTEGER(OPER)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_CMPREGION", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astCmpRegion( astI2P( *REG1 ), astI2P( *REG2 ), 
-                                     *OPER, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fdsbspecframe.c b/ast-5.3-1/fdsbspecframe.c
deleted file mode 100644
index 510322f..0000000
--- a/ast-5.3-1/fdsbspecframe.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-*+
-*  Name:
-*     fdsbspecframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST DSBSpecFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the DSBSpecFrame class.
-
-*  Routines Defined:
-*     AST_ISADSBSPECFRAME
-*     AST_DSBSPECFRAME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     5-AUG-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "dsbspecframe.h"        /* C interface to the DSBSpecFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isadsbspecframe)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISADSBSPECFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsADSBSpecFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_dsbspecframe)( CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_DSBSPECFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astDSBSpecFrame( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
diff --git a/ast-5.3-1/fdssmap.c b/ast-5.3-1/fdssmap.c
deleted file mode 100644
index 2454364..0000000
--- a/ast-5.3-1/fdssmap.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-*+
-*  Name:
-*     fdssmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST DssMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the DssMap class.
-
-*  Routines Defined:
-*     AST_ISADSSMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     19-FEB-1997 (DSB):
-*        Original version.
-*     5-SEP-1997 (RFWS)
-*        Removed the AST_DSSMAP function (now protected, so not
-*        required in the Fortran interface).
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "dssmap.h"              /* C interface to the DssMap class */
-
-F77_LOGICAL_FUNCTION(ast_isadssmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISADSSMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsADssMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fellipse.c b/ast-5.3-1/fellipse.c
deleted file mode 100644
index 3a0ea91..0000000
--- a/ast-5.3-1/fellipse.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-*+
-*  Name:
-*     fellipse.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Ellipse class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Ellipse class.
-
-*  Routines Defined:
-*     AST_ISAELLIPSE
-*     AST_ELLIPSE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     31-AUG-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "ellipse.h"             /* C interface to the Ellipse class */
-
-
-F77_LOGICAL_FUNCTION(ast_isaellipse)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAELLIPSE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAEllipse( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_ellipse)( INTEGER(FRAME),
-                               INTEGER(FORM),
-                               DOUBLE_ARRAY(POINT1),
-                               DOUBLE_ARRAY(POINT2),
-                               DOUBLE_ARRAY(POINT3),
-                               INTEGER(UNC),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_INTEGER(FORM)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   GENPTR_DOUBLE_ARRAY(POINT3)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_ELLIPSE", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astEllipse( astI2P( *FRAME ), *FORM, POINT1, POINT2, 
-                                  POINT3, astI2P( *UNC ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_ellipsepars)( INTEGER(THIS),
-                                 DOUBLE_ARRAY(CENTRE),
-                                 DOUBLE(A),
-                                 DOUBLE(B),
-                                 DOUBLE(ANGLE),
-                                 DOUBLE_ARRAY(P1),
-                                 DOUBLE_ARRAY(P2),
-                                 INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(CENTRE)
-   GENPTR_DOUBLE(A)
-   GENPTR_DOUBLE(B)
-   GENPTR_DOUBLE(ANGLE)
-   GENPTR_DOUBLE_ARRAY(P1)
-   GENPTR_DOUBLE_ARRAY(P2)
-
-   astAt( "AST_ELLIPSEPARS", NULL, 0 );
-   astWatchSTATUS(
-      astEllipsePars( astI2P( *THIS ), CENTRE, A, B, ANGLE, P1, P2 );
-   )
-}
-
diff --git a/ast-5.3-1/ferror.c b/ast-5.3-1/ferror.c
deleted file mode 100644
index 9eecb90..0000000
--- a/ast-5.3-1/ferror.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-*+
-*  Name:
-*     ferror.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Error module.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Error module.
-
-*  Routines Defined:
-*     None.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     15-JUL-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "error.h"               /* C interface to the Error module */
-
-/* At present there are no Fortran callable routines in this module. */
diff --git a/ast-5.3-1/ffitschan.c b/ast-5.3-1/ffitschan.c
deleted file mode 100644
index 54271ca..0000000
--- a/ast-5.3-1/ffitschan.c
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
-*+
-*  Name:
-*     ffitschan.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST FitsChan class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the FitsChan class.
-
-*  Routines Defined:
-*     AST_DELFITS
-*     AST_PURGEWCS
-*     AST_FINDFITS
-*     AST_FITSCHAN
-*     AST_ISAFITSCHAN
-*     AST_PUTCARDS
-*     AST_PUTFITS
-*     AST_RETAINFITS
-*     AST_SETFITS<X>
-*     AST_GETFITS<X>
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     11-DEC-1996 (DSB):
-*        Original version.
-*     21-FEB-1997 (DSB):
-*        Added source and sink functions to AST_FITSCHAN.
-*     20-MAR-1997 (DSB):
-*        Functions for accessing named keywords removed. Others renamed.
-*     28-APR-1997 (DSB):
-*        FindFits and GetFits merged.
-*     10-SEP-2004 (TIMJ):
-*        Only copy the fits header to fortran string if it was found
-*        by astFindFits.
-*     17-NOV-2004 (DSB):
-*        Added AST_SETFITS<X>
-*     7-OCT-2005 (DSB):
-*        Added AST_GETFITS<X>
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "fitschan.h"            /* C interface to the FitsChan class */
-
-#include <stddef.h>
-#include <string.h>
-
-/* Prototypes for private functions. */
-/* ================================= */
-static char *SourceWrap( const char *(*)( void ), int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* Source and sink function interfaces. */
-/* ==================================== */
-/* These functions are concerned with allowing FORTRAN implementations
-   of FitsChan source and sink functions to be passed to the FitsChan 
-   class and invoked when necessary by C code in the main class
-   implementation. All FORTRAN-specific aspects of this interface are
-   encapsulated here. */
-static void SinkWrap( void (* sink)( const char * ), const char *line,
-                      int *status ) {
-/*
-*  Name:
-*     SinkWrap
-
-*  Purpose:
-*     Wrapper function to invoke a FORTRAN FitsChan sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     static void SinkWrap( void (* sink)( const char * ), const char *line, 
-*                           int *status )
-
-*  Description:
-*     This function invokes the sink function whose pointer is
-*     supplied in order to write an output line to an external data
-*     store.
-
-*  Parameters:
-*     sink
-*        Pointer to a sink function. This should result from a cast
-*        applied to a pointer to a function (with two FORTRAN
-*        arguments: a character string of length 80 to receive a FITS
-*        card and an integer error status), that returns void.  This
-*        is the form of FitsChan sink function employed by the FORTRAN
-*        language interface to the AST library.
-*     status
-*        Pointer to inherited status value.
-*/
-
-/* Local Variables: */
-   DECLARE_CHARACTER(CARD,80);
-   DECLARE_INTEGER(STATUS);
-   char *d;
-   const char *c;
-   int i,lim;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Copy the supplied null terminated string to a fixed length, blank
-   padded string which can be passed to the Fortran routine. */
-   c = line;
-   d = CARD;
-
-   lim = (int) strlen( line );
-   if( lim > 80 ) lim = 80;
-
-   for( i = 0; i < lim; i++ ){
-      *(d++) = (*c++);
-   }
-
-   for( ; i < 80; i++ ){
-      *(d++) = ' ';
-   }
-
-/* Cast the sink function pointer to a pointer to the FORTRAN
-   subroutine and then invoke it. Transfer the AST error status to and
-   from the subroutine's error status argument. */
-   STATUS = astStatus;
-   ( ( void (*)() ) sink )( CHARACTER_ARG(CARD), INTEGER_ARG(&STATUS)
-                            TRAIL_ARG(CARD) );
-   astSetStatus( STATUS );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-*  Name:
-*     SourceWrap
-
-*  Purpose:
-*     Wrapper function to invoke a FORTRAN FitsChan source function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     static char *SourceWrap( const char *(* source)( void ), int *status )
-
-*  Description:
-*     This function invokes the source function whose pointer is
-*     supplied in order to read the next input line from an external
-*     data store. It then returns a pointer to a dynamic string
-*     containing a copy of the text that was read.
-
-*  Parameters:
-*     source
-*        Pointer to a source function. This should result from a cast
-*        applied to a pointer to a function (with two FORTRAN
-*        arguments: a character string of length 80 to return a FITS
-*        card and an integer error status), that returns a Fortran
-*        integer.  This is the form of FitsChan source function
-*        employed by the FORTRAN language interface to the AST
-*        library.
-*     status
-*        Pointer to inherited status.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated, null terminated string
-*     containing a copy of the text that was read. This string must be
-*     freed by the caller (using astFree) when no longer required.
-*
-*     A NULL pointer will be returned if there is no more input text
-*     to read.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   DECLARE_CHARACTER(CARD,81);   /* Fixed length Fortran string */
-   DECLARE_INTEGER(STATUS);      /* Fortran error status value */
-   char *result;                 /* Result pointer to return */
-   int retval;                   /* Value returned by source subroutine */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Cast the source function pointer to a pointer to the FORTRAN
-   function and then invoke it. Transfer the AST error status to and
-   from the subroutine's error status argument. */
-   STATUS = astStatus;
-   retval = ( *(F77_INTEGER_TYPE (*)()) source )( CHARACTER_ARG(CARD),
-                                                  INTEGER_ARG(&STATUS)
-                                                  TRAIL_ARG(CARD) );
-   astSetStatus( STATUS );
-
-/* If a card was returned, make a dynamic copy of it. */
-   if ( astOK && retval ) result = astString( CARD, 80 );
-
-/* Return the result. */
-   return result;
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_fitschan)( F77_INTEGER_TYPE (* SOURCE)(),
-                                    void (* SINK)(),
-                                    CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   const char *(* source)( void );
-   int i;
-   void (* sink)( const char * );
-
-   astAt( "AST_FITSCHAN", NULL, 0 );
-   astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
-   the null routine AST_NULL has been supplied. */
-      source = (const char *(*)( void )) SOURCE;
-      if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
-         source = NULL;
-      }
-      sink = (void (*)( const char * )) SINK;
-      if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
-         sink = NULL;
-      }
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astFitsChanFor( source, SourceWrap, sink, SinkWrap,
-                                       "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isafitschan)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAFITSCHAN", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAFitsChan( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_putcards)( INTEGER(THIS),
-                              CHARACTER(CARDS),
-                              INTEGER(STATUS)
-                              TRAIL(CARDS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(CARDS)
-   char *cards;
-
-   astAt( "AST_PUTCARDS", NULL, 0 );
-   astWatchSTATUS(
-      cards = astString( CARDS, CARDS_length );
-      astPutCards( astI2P( *THIS ), cards );   
-      (void) astFree( (void *) cards );
-   )
-}
-
-F77_SUBROUTINE(ast_putfits)( INTEGER(THIS),
-                             CHARACTER(CARD),
-                             LOGICAL(OVERWRITE),
-                             INTEGER(STATUS)
-                             TRAIL(CARD) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(CARD)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *card;
-
-   astAt( "AST_PUTFITS", NULL, 0 );
-   astWatchSTATUS(
-      card = astString( CARD, CARD_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astPutFits( astI2P( *THIS ), card, overwrite );   
-      (void) astFree( (void *) card );
-   )
-}
-
-F77_SUBROUTINE(ast_delfits)( INTEGER(THIS),
-                             INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_DELFITS", NULL, 0 );
-   astWatchSTATUS(
-      astDelFits( astI2P( *THIS ) );   
-   )
-}
-
-F77_SUBROUTINE(ast_purgewcs)( INTEGER(THIS),
-                             INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_PURGEWCS", NULL, 0 );
-   astWatchSTATUS(
-      astPurgeWCS( astI2P( *THIS ) );   
-   )
-}
-
-F77_SUBROUTINE(ast_retainfits)( INTEGER(THIS),
-                             INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_RETAINFITS", NULL, 0 );
-   astWatchSTATUS(
-      astRetainFits( astI2P( *THIS ) );   
-   )
-}
-
-F77_LOGICAL_FUNCTION(ast_findfits)( INTEGER(THIS),
-                                    CHARACTER(NAME),
-                                    CHARACTER(CARD),
-                                    LOGICAL(INC),
-                                    INTEGER(STATUS)
-                                    TRAIL(NAME)
-                                    TRAIL(CARD) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_CHARACTER(CARD)
-   GENPTR_LOGICAL(INC)
-   F77_LOGICAL_TYPE(RESULT);
-   int i, len;
-   char *name;
-   char card[ 81 ];
-   int inc;
-
-   astAt( "AST_FINDFITS", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      inc = F77_ISTRUE( *INC );
-      RESULT = astFindFits( astI2P( *THIS ), name, card, inc ) ?
-               F77_TRUE : F77_FALSE;
-      i = 0;
-      if ( astOK && F77_ISTRUE(RESULT) ) {
-         len = (int) strlen( card );
-         for( i = 0; i < CARD_length && i < len; i++ ) CARD[i] = card[i];
-      }
-      for( ; i < CARD_length; i++ ) CARD[i] = ' ';
-      (void) astFree( (void *) name );
-   )
-   return RESULT;
-}
-
-
-F77_SUBROUTINE(ast_setfitsf)( INTEGER(THIS),
-                              CHARACTER(NAME),
-                              DOUBLE(VALUE),
-                              CHARACTER(COMMENT),
-                              LOGICAL(OVERWRITE),
-                              INTEGER(STATUS)
-                              TRAIL(NAME)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_DOUBLE(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment;
-
-   astAt( "AST_SETFITSF", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsF( astI2P( *THIS ), name, *VALUE, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) comment );
-   )
-}
-
-F77_SUBROUTINE(ast_setfitsu)( INTEGER(THIS),
-                              CHARACTER(NAME),
-                              CHARACTER(COMMENT),
-                              LOGICAL(OVERWRITE),
-                              INTEGER(STATUS)
-                              TRAIL(NAME)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment;
-
-   astAt( "AST_SETFITSU", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsU( astI2P( *THIS ), name, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) comment );
-   )
-}
-
-F77_SUBROUTINE(ast_setfitscm)( INTEGER(THIS),
-                               CHARACTER(COMMENT),
-                               LOGICAL(OVERWRITE),
-                               INTEGER(STATUS)
-                               TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *comment;
-
-   astAt( "AST_SETFITSCM", NULL, 0 );
-   astWatchSTATUS(
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsCM( astI2P( *THIS ), comment, overwrite );   
-      (void) astFree( (void *) comment );
-   )
-}
-
-
-F77_SUBROUTINE(ast_setfitsi)( INTEGER(THIS),
-                              CHARACTER(NAME),
-                              INTEGER(VALUE),
-                              CHARACTER(COMMENT),
-                              LOGICAL(OVERWRITE),
-                              INTEGER(STATUS)
-                              TRAIL(NAME)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_INTEGER(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment;
-
-   astAt( "AST_SETFITSI", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsI( astI2P( *THIS ), name, *VALUE, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) comment );
-   )
-}
-
-
-F77_SUBROUTINE(ast_setfitscf)( INTEGER(THIS),
-                               CHARACTER(NAME),
-                               DOUBLE_ARRAY(VALUE),
-                               CHARACTER(COMMENT),
-                               LOGICAL(OVERWRITE),
-                               INTEGER(STATUS)
-                               TRAIL(NAME)
-                               TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_DOUBLE_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment;
-
-   astAt( "AST_SETFITSCF", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsCF( astI2P( *THIS ), name, VALUE, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) comment );
-   )
-}
-
-
-F77_SUBROUTINE(ast_setfitsci)( INTEGER(THIS),
-                               CHARACTER(NAME),
-                               INTEGER_ARRAY(VALUE),
-                               CHARACTER(COMMENT),
-                               LOGICAL(OVERWRITE),
-                               INTEGER(STATUS)
-                               TRAIL(NAME)
-                               TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment;
-
-   astAt( "AST_SETFITSCI", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsCI( astI2P( *THIS ), name, VALUE, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) comment );
-   )
-}
-
-
-F77_SUBROUTINE(ast_setfitsl)( INTEGER(THIS),
-                              CHARACTER(NAME),
-                              LOGICAL(VALUE),
-                              CHARACTER(COMMENT),
-                              LOGICAL(OVERWRITE),
-                              INTEGER(STATUS)
-                              TRAIL(NAME)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_LOGICAL(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite, value;
-   char *name, *comment;
-
-   astAt( "AST_SETFITSL", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      value = F77_ISTRUE( *VALUE );
-      astSetFitsL( astI2P( *THIS ), name, value, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) comment );
-   )
-}
-
-
-F77_SUBROUTINE(ast_setfitss)( INTEGER(THIS),
-                              CHARACTER(NAME),
-                              CHARACTER(VALUE),
-                              CHARACTER(COMMENT),
-                              LOGICAL(OVERWRITE),
-                              INTEGER(STATUS)
-                              TRAIL(NAME)
-                              TRAIL(VALUE)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_CHARACTER(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment, *value;
-
-   astAt( "AST_SETFITSS", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      value = astString( VALUE, VALUE_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsS( astI2P( *THIS ), name, value, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) value );
-      (void) astFree( (void *) comment );
-   )
-}
-
-F77_SUBROUTINE(ast_setfitscn)( INTEGER(THIS),
-                               CHARACTER(NAME),
-                               CHARACTER(VALUE),
-                               CHARACTER(COMMENT),
-                               LOGICAL(OVERWRITE),
-                               INTEGER(STATUS)
-                               TRAIL(NAME)
-                               TRAIL(VALUE)
-                               TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   GENPTR_CHARACTER(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   GENPTR_LOGICAL(OVERWRITE)
-   int overwrite;
-   char *name, *comment, *value;
-
-   astAt( "AST_SETFITSS", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      value = astString( VALUE, VALUE_length );
-      comment = astString( COMMENT, COMMENT_length );
-      overwrite = F77_ISTRUE( *OVERWRITE );
-      astSetFitsCN( astI2P( *THIS ), name, value, comment, overwrite );   
-      (void) astFree( (void *) name );
-      (void) astFree( (void *) value );
-      (void) astFree( (void *) comment );
-   )
-}
-
-#define MAKE_AST_GETFITS(f,F,Ftype,X,Xtype) \
-F77_LOGICAL_FUNCTION(ast_getfits##f)( INTEGER(THIS), \
-                                      CHARACTER(NAME), \
-                                      Ftype(VALUE), \
-                                      INTEGER(STATUS) \
-                                      TRAIL(NAME) ){ \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_CHARACTER(NAME) \
-   GENPTR_##Ftype(VALUE) \
-   GENPTR_INTEGER(STATUS) \
-   F77_LOGICAL_TYPE(RESULT); \
-\
-   char *name; \
-   Xtype *value; \
-\
-   value = (Xtype *) VALUE; \
-\
-   astAt( "AST_GETFITS"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-      name = astString( NAME, NAME_length ); \
-      RESULT = astGetFits##X( astI2P( *THIS ), name, value ) ? \
-               F77_TRUE : F77_FALSE; \
-      (void) astFree( (void *) name ); \
-   ) \
-   return RESULT; \
-}
-
-MAKE_AST_GETFITS(f,F,DOUBLE,F,double)
-MAKE_AST_GETFITS(i,I,INTEGER,I,int)
-MAKE_AST_GETFITS(l,L,LOGICAL,L,int)
-#undef MAKE_AST_GETFITS
-
-
-F77_LOGICAL_FUNCTION(ast_testfits)( INTEGER(THIS), 
-                                    CHARACTER(NAME), 
-                                    LOGICAL(THERE),
-                                    INTEGER(STATUS) 
-                                    TRAIL(NAME) ){ 
-   GENPTR_INTEGER(THIS) 
-   GENPTR_CHARACTER(NAME) 
-   GENPTR_LOGICAL(THERE)
-   GENPTR_INTEGER(STATUS) 
-   F77_LOGICAL_TYPE(RESULT); 
-
-   char *name; 
-   int there;
-
-   astAt( "AST_TESTFITS", NULL, 0 ); 
-   astWatchSTATUS( 
-      name = astString( NAME, NAME_length ); 
-      RESULT = astTestFits( astI2P( *THIS ), name, &there ) ? 
-               F77_TRUE : F77_FALSE; 
-      (void) astFree( (void *) name ); 
-   ) 
-   *THERE = there ? F77_TRUE : F77_FALSE;
-   return RESULT; 
-}
-
-
-#define MAKE_AST_GETFITS(f,F,Ftype,X,Xtype) \
-F77_LOGICAL_FUNCTION(ast_getfits##f)( INTEGER(THIS), \
-                                      CHARACTER(NAME), \
-                                      Ftype##_ARRAY(VALUE), \
-                                      INTEGER(STATUS) \
-                                      TRAIL(NAME) ){ \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_CHARACTER(NAME) \
-   GENPTR_##Ftype##_ARRAY(VALUE) \
-   GENPTR_INTEGER(STATUS) \
-   F77_LOGICAL_TYPE(RESULT); \
-\
-   char *name; \
-   Xtype value[2]; \
-\
-   astAt( "AST_GETFITS"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-      name = astString( NAME, NAME_length ); \
-      RESULT = astGetFits##X( astI2P( *THIS ), name, value ) ? \
-               F77_TRUE : F77_FALSE; \
-      VALUE[ 0 ] = (F77_DOUBLE_TYPE) value[ 0 ]; \
-      VALUE[ 1 ] = (F77_DOUBLE_TYPE) value[ 1 ]; \
-      (void) astFree( (void *) name ); \
-   ) \
-   return RESULT; \
-}
-
-
-MAKE_AST_GETFITS(cf,CF,DOUBLE,CF,double)
-MAKE_AST_GETFITS(ci,CI,INTEGER,CI,int)
-
-#undef MAKE_AST_GETFITS
-
-#define MAKE_AST_GETFITS(f,F,X) \
-F77_LOGICAL_FUNCTION(ast_getfits##f)( INTEGER(THIS), \
-                                      CHARACTER(NAME), \
-                                      CHARACTER(VALUE), \
-                                      INTEGER(STATUS) \
-                                      TRAIL(NAME) \
-                                      TRAIL(VALUE) ){ \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_CHARACTER(NAME) \
-   GENPTR_CHARACTER(VALUE) \
-   GENPTR_INTEGER(STATUS) \
-   F77_LOGICAL_TYPE(RESULT); \
-\
-   char *name; \
-   int i, len; \
-   char *value; \
-\
-   astAt( "AST_GETFITS"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-      name = astString( NAME, NAME_length ); \
-      RESULT = astGetFits##X( astI2P( *THIS ), name, &value ) ? \
-               F77_TRUE : F77_FALSE; \
-      if ( astOK && F77_ISTRUE(RESULT) ) { \
-         len = (int) strlen( value ); \
-         for( i = 0; i < VALUE_length && i < len; i++ ) VALUE[i] = value[i]; \
-      } else { \
-         i = 0; \
-      } \
-      for( ; i < VALUE_length; i++ ) VALUE[i] = ' '; \
-      (void) astFree( (void *) name ); \
-   ) \
-   return RESULT; \
-}
-
-MAKE_AST_GETFITS(s,S,S)
-MAKE_AST_GETFITS(cn,CN,CN)
-
-#undef MAKE_AST_GETFITS
-
-
-
diff --git a/ast-5.3-1/ffluxframe.c b/ast-5.3-1/ffluxframe.c
deleted file mode 100644
index 4b40f2f..0000000
--- a/ast-5.3-1/ffluxframe.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-*  Name:
-*     ffluxframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST FluxFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the FluxFrame class.
-
-*  Routines Defined:
-*     AST_ISAFLUXFRAME
-*     AST_FLUXFRAME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     1-DEC-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "fluxframe.h"           /* C interface to the FluxFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isafluxframe)( INTEGER(THIS),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAFLUXFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAFluxFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_fluxframe)( DOUBLE(SPECVAL),
-                                     INTEGER(SPECFRM),
-                                     CHARACTER(OPTIONS),
-                                     INTEGER(STATUS)
-                                     TRAIL(OPTIONS) ) {
-   GENPTR_DOUBLE(SPECVAL)
-   GENPTR_INTEGER(SPECFRM)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_FLUXFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astFluxFrame( *SPECVAL, astI2P( *SPECFRM ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
diff --git a/ast-5.3-1/fframe.c b/ast-5.3-1/fframe.c
deleted file mode 100644
index 37aa725..0000000
--- a/ast-5.3-1/fframe.c
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
-*+
-*  Name:
-*     fframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Frame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Frame class.
-
-*  Routines Defined:
-*     AST_ANGLE
-*     AST_AXANGLE
-*     AST_AXDISTANCE
-*     AST_AXOFFSET
-*     AST_CONVERT
-*     AST_DISTANCE
-*     AST_FORMAT
-*     AST_FRAME
-*     AST_GETACTIVEUNIT
-*     AST_INTERSECT
-*     AST_ISAFRAME
-*     AST_NORM
-*     AST_OFFSET
-*     AST_OFFSET2
-*     AST_PERMAXES
-*     AST_PICKAXES
-*     AST_RESOLVE
-*     AST_SETACTIVEUNIT
-*     AST_UNFORMAT         
-
-*  Copyright:
-*     Copyright (C) 1997-2009 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-JUL-1996 (RFWS):
-*        Original version.
-*     16-SEP-1996 (RFWS):
-*        Added AST_DISTANCE and AST_OFFSET.
-*     25-FEB-1998 (RFWS):
-*        Added AST_UNFORMAT.
-*     21-JUN-2001 (DSB):
-*        Added AST_ANGLE and AST_OFFSET2.
-*     29-AUG-2001 (DSB):
-*        Added AST_AXDISTANCE and AST_AXOFFSET.
-*     9-SEP-2001 (DSB):
-*        Added AST_RESOLVE and AST_BEAR.
-*     21-SEP-2001 (DSB):
-*        Replaced AST_BEAR by AST_AXANGLE.
-*     17-DEC-2002 (DSB):
-*        Added AST_GETACTIVEUNIT and AST_SETACTIVEUNIT.
-*     14-JAN-2009 (DSB):
-*        Added AST_INTERSECT.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "mapping.h"             /* C interface to the Mapping class */
-#include "frame.h"               /* C interface to the Frame class */
-
-
-F77_INTEGER_FUNCTION(ast_convert)( INTEGER(FROM),
-                                   INTEGER(TO),
-                                   CHARACTER(NAMELIST),
-                                   INTEGER(STATUS)
-                                   TRAIL(NAMELIST) ) {
-   GENPTR_INTEGER(FROM)
-   GENPTR_INTEGER(TO)
-   GENPTR_INTEGER(NAMELIST)
-   F77_INTEGER_TYPE(RESULT);
-   char *namelist;
-
-   astAt( "AST_CONVERT", NULL, 0 );
-   astWatchSTATUS(
-      namelist = astString( NAMELIST, NAMELIST_length );
-      RESULT = astP2I( astConvert( astI2P( *FROM ), astI2P( *TO ),
-                                   namelist ) );
-      namelist = astFree( namelist );
-   )
-   return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_angle)( INTEGER(THIS),
-                                   DOUBLE_ARRAY(A),
-                                   DOUBLE_ARRAY(B),
-                                   DOUBLE_ARRAY(C),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(A)
-   GENPTR_DOUBLE_ARRAY(B)
-   GENPTR_DOUBLE_ARRAY(C)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_ANGLE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astAngle( astI2P( *THIS ), A, B, C );
-   )
-   return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_axangle)( INTEGER(THIS),
-                                  DOUBLE_ARRAY(A),
-                                  DOUBLE_ARRAY(B),
-                                  INTEGER(AXIS),
-                                  INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(A)
-   GENPTR_DOUBLE_ARRAY(B)
-   GENPTR_INTEGER(AXIS)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_AXANGLE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astAxAngle( astI2P( *THIS ), A, B, *AXIS );
-   )
-   return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_distance)( INTEGER(THIS),
-                                   DOUBLE_ARRAY(POINT1),
-                                   DOUBLE_ARRAY(POINT2),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_DISTANCE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astDistance( astI2P( *THIS ), POINT1, POINT2 );
-   )
-   return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_axdistance)( INTEGER(THIS),
-                                     INTEGER(AXIS),
-                                     DOUBLE(V1),
-                                     DOUBLE(V2),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(AXIS)
-   GENPTR_DOUBLE(V1)
-   GENPTR_DOUBLE(V2)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_AXDISTANCE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astAxDistance( astI2P( *THIS ), *AXIS, *V1, *V2 );
-   )
-   return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_axoffset)( INTEGER(THIS),
-                                   INTEGER(AXIS),
-                                   DOUBLE(V1),
-                                   DOUBLE(DIST),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(AXIS)
-   GENPTR_DOUBLE(V1)
-   GENPTR_DOUBLE(DIST)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_AXOFFSET", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astAxOffset( astI2P( *THIS ), *AXIS, *V1, *DIST );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_findframe)( INTEGER(TARGET),
-                                     INTEGER(TEMPLATE),
-                                     CHARACTER(NAMELIST),
-                                     INTEGER(STATUS)
-                                     TRAIL(NAMELIST) ) {
-   GENPTR_INTEGER(TARGET)
-   GENPTR_INTEGER(TEMPLATE)
-   GENPTR_INTEGER(NAMELIST)
-   F77_INTEGER_TYPE(RESULT);
-   char *namelist;
-
-   astAt( "AST_FINDFRAME", NULL, 0 );
-   astWatchSTATUS(
-      namelist = astString( NAMELIST, NAMELIST_length );
-      RESULT = astP2I( astFindFrame( astI2P( *TARGET ), astI2P( *TEMPLATE ),
-                                     namelist ) );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_matchaxes)( INTEGER(FRM1),
-                               INTEGER(FRM2),
-                               INTEGER_ARRAY(AXES),
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(FRM1)
-   GENPTR_INTEGER(FRM2)
-   GENPTR_INTEGER_ARRAY(AXES)
-
-   astAt( "AST_MATCHAXES", NULL, 0 );
-   astWatchSTATUS(
-      astMatchAxes( astI2P( *FRM1 ), astI2P( *FRM2 ), AXES );
-   )
-}
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
-   character result doesn't work, so add an extra argument instead and
-   wrap this function up in a normal FORTRAN 77 function (in the file
-   frame.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_format_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_format)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
-                            INTEGER(THIS),
-                            INTEGER(AXIS),
-                            DOUBLE(VALUE),
-                            INTEGER(STATUS)
-#if NO_CHAR_FUNCTION
-                            TRAIL(RESULT)
-#endif
-                              ) {
-   GENPTR_CHARACTER(RESULT)
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(AXIS)
-   GENPTR_DOUBLE(VALUE)
-   const char *result;
-   int i;
-
-   astAt( "AST_FORMAT", NULL, 0 );
-   astWatchSTATUS(
-      result = astFormat( astI2P( *THIS ), *AXIS, *VALUE );
-      i = 0;
-      if ( astOK ) {             /* Copy result */
-         for ( ; result[ i ] && i < RESULT_length; i++ ) {
-            RESULT[ i ] = result[ i ];
-         }
-      }
-      while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_frame)( INTEGER(NAXES),
-                                 CHARACTER(OPTIONS),
-                                 INTEGER(STATUS)
-                                 TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NAXES)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_FRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astFrame( *NAXES, "%s", options ) );
-      (void) astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaframe)( INTEGER(THIS),
-                                    INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_getactiveunit)( INTEGER(THIS),
-                                         INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_GETACTIVEUNIT", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astGetActiveUnit( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_setactiveunit)( INTEGER(THIS),
-                                   LOGICAL(VALUE),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_LOGICAL(VALUE)
-
-   astAt( "AST_SETACTIVEUNIT", NULL, 0 );
-   astWatchSTATUS(
-      astSetActiveUnit( astI2P( *THIS ), F77_ISTRUE( *VALUE ) ? 1 : 0 );   
-   )
-}
-
-F77_SUBROUTINE(ast_norm)( INTEGER(THIS),
-                          DOUBLE_ARRAY(VALUE),
-                          INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(VALUE)
-
-   astAt( "AST_NORM", NULL, 0 );
-   astWatchSTATUS(
-      astNorm( astI2P( *THIS ), VALUE );   
-   )
-}
-
-F77_SUBROUTINE(ast_offset)( INTEGER(THIS),
-                            DOUBLE_ARRAY(POINT1),
-                            DOUBLE_ARRAY(POINT2),
-                            DOUBLE(OFFSET),
-                            DOUBLE_ARRAY(POINT3),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   GENPTR_DOUBLE(OFFSET)
-   GENPTR_DOUBLE_ARRAY(POINT3)
-
-   astAt( "AST_OFFSET", NULL, 0 );
-   astWatchSTATUS(
-      astOffset( astI2P( *THIS ), POINT1, POINT2, *OFFSET, POINT3 );
-   )
-}
-
-F77_DOUBLE_FUNCTION(ast_offset2)( INTEGER(THIS),
-                             DOUBLE_ARRAY(POINT1),
-                             DOUBLE(ANGLE),
-                             DOUBLE(OFFSET),
-                             DOUBLE_ARRAY(POINT2),
-                             INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE(ANGLE)
-   GENPTR_DOUBLE(OFFSET)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_OFFSET2", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astOffset2( astI2P( *THIS ), POINT1, *ANGLE, *OFFSET, POINT2 );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_resolve)( INTEGER(THIS),
-                             DOUBLE_ARRAY(POINT1),
-                             DOUBLE_ARRAY(POINT2),
-                             DOUBLE_ARRAY(POINT3),
-                             DOUBLE_ARRAY(POINT4),
-                             DOUBLE(D1),
-                             DOUBLE(D2),
-                             INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(POINT1)
-   GENPTR_DOUBLE_ARRAY(POINT2)
-   GENPTR_DOUBLE_ARRAY(POINT3)
-   GENPTR_DOUBLE_ARRAY(POINT4)
-   GENPTR_DOUBLE(D1)
-   GENPTR_DOUBLE(D2)
-
-   astAt( "AST_RESOLVE", NULL, 0 );
-   astWatchSTATUS(
-      astResolve( astI2P( *THIS ), POINT1, POINT2, POINT3, POINT4, D1, D2 );
-   )
-}
-
-F77_SUBROUTINE(ast_intersect)( INTEGER(THIS),
-                               DOUBLE_ARRAY(A1),
-                               DOUBLE_ARRAY(A2),
-                               DOUBLE_ARRAY(B1),
-                               DOUBLE_ARRAY(B2),
-                               DOUBLE_ARRAY(CROSS),
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(A1)
-   GENPTR_DOUBLE_ARRAY(A2)
-   GENPTR_DOUBLE_ARRAY(B1)
-   GENPTR_DOUBLE_ARRAY(B2)
-   GENPTR_DOUBLE_ARRAY(CROSS)
-
-   astAt( "AST_INTERSECT", NULL, 0 );
-   astWatchSTATUS(
-      astIntersect( astI2P( *THIS ), A1, A2, B1, B2, CROSS );
-   )
-}
-
-F77_SUBROUTINE(ast_permaxes)( INTEGER(THIS),
-                              INTEGER_ARRAY(PERM),
-                              INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER_ARRAY(PERM)
-
-   astAt( "AST_PERMAXES", NULL, 0 );
-   astWatchSTATUS(
-      astPermAxes( astI2P( *THIS ), PERM );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_pickaxes)( INTEGER(THIS),
-                                    INTEGER(NAXES),
-                                    INTEGER_ARRAY(AXES),
-                                    INTEGER(MAP),
-                                    INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NAXES)
-   GENPTR_INTEGER_ARRAY(AXES)
-   GENPTR_INTEGER(MAP)
-   F77_INTEGER_TYPE(RESULT);
-   AstMapping *map;
-
-   astAt( "AST_PICKAXES", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astPickAxes( astI2P( *THIS ), *NAXES, AXES, &map ) );
-      *MAP = astP2I( map );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_unformat)( INTEGER(THIS),
-                                    INTEGER(AXIS),
-                                    CHARACTER(STRING),
-                                    DOUBLE(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(STRING) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(AXIS)
-   GENPTR_CHARACTER(STRING)
-   GENPTR_DOUBLE(VALUE)
-   GENPTR_INTEGER(STATUS)
-   F77_INTEGER_TYPE(RESULT);
-   char *string;
-   double value;
-
-   astAt( "AST_UNFORMAT", NULL, 0 );
-   astWatchSTATUS(
-      string = astString( STRING, STRING_length );
-      
-      RESULT = astUnformat( astI2P( *THIS ), *AXIS, string, &value );
-      *VALUE = value;
-      (void) astFree( string );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fframeset.c b/ast-5.3-1/fframeset.c
deleted file mode 100644
index e1dbd6a..0000000
--- a/ast-5.3-1/fframeset.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-*+
-*  Name:
-*     fframeset.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST FrameSet class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the FrameSet class.
-
-*  Routines Defined:
-*     AST_ADDFRAME
-*     AST_FRAMESET
-*     AST_GETFRAME
-*     AST_GETMAPPING
-*     AST_ISAFRAMESET
-*     AST_REMAPFRAME
-*     AST_REMOVEFRAME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     1-AUG-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "mapping.h"             /* C interface to the Mapping class */
-#include "frame.h"               /* C interface to the Frame class */
-#include "frameset.h"            /* C interface to the FrameSet class */
-
-F77_SUBROUTINE(ast_addframe)( INTEGER(THIS),
-                              INTEGER(IFRAME),
-                              INTEGER(MAP),
-                              INTEGER(FRAME),
-                              INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(IFRAME)
-   GENPTR_INTEGER(MAP)
-   GENPTR_INTEGER(FRAME)
-
-   astAt( "AST_ADDFRAME", NULL, 0 );
-   astWatchSTATUS(
-      astAddFrame( astI2P( *THIS ), *IFRAME, astI2P( *MAP ),
-                   astI2P( *FRAME ) );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_frameset)( INTEGER(FRAME),
-                                    CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_FRAMESET", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astFrameSet( astI2P( *FRAME ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getframe)( INTEGER(THIS),
-                                    INTEGER(IFRAME),
-                                    INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(IFRAME)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetFrame( astI2P( *THIS ), *IFRAME ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getmapping)( INTEGER(THIS),
-                                      INTEGER(IFRAME1),
-                                      INTEGER(IFRAME2),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(IFRAME1)
-   GENPTR_INTEGER(IFRAME2)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETMAPPING", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetMapping( astI2P( *THIS ), *IFRAME1, *IFRAME2 ) );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaframeset)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAFRAMESET", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAFrameSet( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_remapframe)( INTEGER(THIS),
-                                INTEGER(IFRAME),
-                                INTEGER(MAP),
-                                INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(IFRAME)
-   GENPTR_INTEGER(MAP)
-
-   astAt( "AST_REMAPFRAME", NULL, 0 );
-   astWatchSTATUS(
-      astRemapFrame( astI2P( *THIS ), *IFRAME, astI2P( *MAP ) );
-   )
-}
-
-F77_SUBROUTINE(ast_removeframe)( INTEGER(THIS),
-                                 INTEGER(IFRAME),
-                                 INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(IFRAME)
-
-   astAt( "AST_REMOVEFRAME", NULL, 0 );
-   astWatchSTATUS(
-      astRemoveFrame( astI2P( *THIS ), *IFRAME );
-   )
-}
diff --git a/ast-5.3-1/fgrismmap.c b/ast-5.3-1/fgrismmap.c
deleted file mode 100644
index cd3b5d6..0000000
--- a/ast-5.3-1/fgrismmap.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-*+
-*  Name:
-*     fgrismmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST GrismMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the GrismMap class.
-
-*  Routines Defined:
-*     AST_ISAGRISMMAP
-*     AST_GRISMMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     10-JUL-2003 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "grismmap.h"            /* C interface to the GrismMap class */
-
-F77_LOGICAL_FUNCTION(ast_isagrismmap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAGRISMMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAGrismMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_grismmap)( CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_GRISMMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astGrismMap( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/finterval.c b/ast-5.3-1/finterval.c
deleted file mode 100644
index f10b074..0000000
--- a/ast-5.3-1/finterval.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-*+
-*  Name:
-*     finterval.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Interval class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Interval class.
-
-*  Routines Defined:
-*     AST_ISAINTERVAL
-*     AST_INTERVAL
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     31-AUG-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "interval.h"              /* C interface to the Interval class */
-
-
-F77_LOGICAL_FUNCTION(ast_isainterval)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAINTERVAL", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAInterval( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_interval)( INTEGER(FRAME),
-                                    DOUBLE_ARRAY(LBND),
-                                    DOUBLE_ARRAY(UBND),
-                                    INTEGER(UNC),
-                                    CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_DOUBLE_ARRAY(LBND)
-   GENPTR_DOUBLE_ARRAY(UBND)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_INTERVAL", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astInterval( astI2P( *FRAME ), LBND, UBND, 
-                                    astI2P( *UNC ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fintramap.c b/ast-5.3-1/fintramap.c
deleted file mode 100644
index 46c79e0..0000000
--- a/ast-5.3-1/fintramap.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
-*+
-*  Name:
-*     fintramap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST IntraMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the IntraMap class.
-
-*  Routines Defined:
-*     AST_INTRAMAP
-*     AST_INTRAREG
-*     AST_ISAINTRAMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     18-MAR-1998 (RFWS):
-*        Original version.
-*     15-SEP-1999 (RFWS):
-*        Added a THIS pointer to the external transformation function
-*        used by an IntraMap.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "intramap.h"            /* C interface to the IntraMap class */
-
-#include <stddef.h>
-#include <string.h>
-
-/* Prototypes for private functions. */
-/* ================================= */
-static void TranWrap( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * );
-
-/* Transformation function interface. */
-/* ================================== */
-/* This is concerned with allowing FORTRAN implementations of
-   transformation functions to be passed to the IntraMap class and
-   invoked when necessary by C code in the main class
-   implementation. All FORTRAN-specific aspects of this interface are
-   encapsulated here. */
-static void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
-                                     int, int, double *[] ),
-                      AstMapping *this, int npoint, int ncoord_in,
-                      const double *ptr_in[], int forward, int ncoord_out,
-                      double *ptr_out[], int *status ) {
-/*
-*  Name:
-*     TranWrap
-
-*  Purpose:
-*     Wrapper function to invoke a FORTRAN transformation function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
-*                                   int, int, double *[] ),
-*                    AstMapping *this, int npoint, int ncoord_in,
-*                    const double *ptr_in[], int forward, int ncoord_out,
-*                    double *ptr_out[], int *status )
-
-*  Description:
-*     This function invokes a FORTRAN implementation of a
-*     transformation function (which resembles AST_TRANN from the
-*     Mapping class FORTRAN interface) in order to make it callable by
-*     C code which would prefer to call a C function that resembles
-*     astTranP (from the Mapping class C interface).
-
-*  Parameters:
-*     tran
-*        Pointer to the FORTRAN transformation function to be invoked.
-*        This should result from a cast applied to a pointer to a
-*        function that resembles AST_TRANN (but with the first
-*        argument omitted).
-*     this
-*        An external Mapping ID associated with the internal (true C) pointer
-*        for the IntraMap whose transformation is being evaluated.
-*     npoint
-*        The number of points to be transformed.
-*     ncoord_in
-*        The number of coordinates being supplied for each input point
-*        (i.e. the number of dimensions of the space in which the
-*        input points reside).
-*     ptr_in
-*        An array of pointers to double, with "ncoord_in"
-*        elements. Element "ptr_in[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contain the values of coordinate number "coord" for each
-*        input (untransformed) point. The value of coordinate number
-*        "coord" for input point number "point" is therefore given by
-*        "ptr_in[coord][point]".
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation is to be applied, while a zero value indicates
-*        that the inverse transformation should be used.
-*     ncoord_out
-*        The number of coordinates being generated for each output
-*        point (i.e. the number of dimensions of the space in which
-*        the output points reside). This need not be the same as
-*        "ncoord_in".
-*     ptr_out
-*        An array of pointers to double, with "ncoord_out"
-*        elements. Element "ptr_out[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) into
-*        which the values of coordinate number "coord" for each output
-*        (transformed) point will be written.  The value of coordinate
-*        number "coord" for output point number "point" will therefore
-*        be found in "ptr_out[coord][point]".
-*     status
-*        Pointer to the inherited status value.
-*/
-
-/* Local Variables; */
-   DECLARE_INTEGER(INDIM);       /* First dimension size of input array */
-   DECLARE_INTEGER(NCOORD_IN);   /* Number of input coordinates */
-   DECLARE_INTEGER(NCOORD_OUT);  /* Number of output coordinates */
-   DECLARE_INTEGER(NPOINT);      /* Number of points */
-   DECLARE_INTEGER(OUTDIM);      /* First dimension size of output array */
-   DECLARE_INTEGER(STATUS);      /* FORTRAN error status variable */
-   DECLARE_INTEGER(THIS);        /* External ID for the IntraMap */
-   DECLARE_LOGICAL(FORWARD);     /* Use forward transformation? */
-   F77_DOUBLE_TYPE *IN;          /* Input coordinate array for FORTRAN */
-   F77_DOUBLE_TYPE *OUT;         /* Output coordinate array for FORTRAN */
-   int coord;                    /* Loop counter for coordinates */
-   int i;                        /* Index into FORTRAN arrays */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Assign input values to the arguments for the FORTRAN transformation
-   function. */
-   THIS = astP2I( this );
-   NPOINT = npoint;
-   NCOORD_IN = ncoord_in;
-   INDIM = npoint;
-   FORWARD = forward ? F77_TRUE : F77_FALSE;
-   NCOORD_OUT = ncoord_out;
-   OUTDIM = npoint;
-
-/* Since the input/output coordinate values may be stored in separate
-   arrays, we must move them temporarily into new 2-dimensional
-   arrays, as required by the FORTRAN transformation function
-   interface. Allocate memory for these arrays. */
-   IN = astMalloc( (size_t) ( npoint * ncoord_in ) *
-                   sizeof( F77_DOUBLE_TYPE ) );
-   OUT = astMalloc( (size_t) ( npoint * ncoord_out ) *
-                    sizeof( F77_DOUBLE_TYPE ) );
-
-/* If OK, fill the input array with coordinate values. Use "memcpy" to
-   avoid numerical errors if the data contain junk - this allows the
-   transformation function to produce the appropriate error instead of
-   it happening here. */
-   if ( astOK ) {
-      i = 0;
-      for ( coord = 0; coord < ncoord_in; coord++ ) {
-         (void) memcpy( IN + i, ptr_in[ coord ],
-                        (size_t) npoint * sizeof( F77_DOUBLE_TYPE ) );
-         i += npoint;
-      }
-   }
-
-/* Cast the transformation function pointer to a pointer to the
-   FORTRAN subroutine and then invoke it. Transfer the AST error
-   status to and from the subroutine's error status argument. */
-   if ( astOK ) {
-      STATUS = astStatus;
-      ( *(void (*)()) tran )( INTEGER_ARG(&THIS),
-                              INTEGER_ARG(&NPOINT),
-                              INTEGER_ARG(&NCOORD_IN),
-                              INTEGER_ARG(&INDIM),
-                              DOUBLE_ARRAY_ARG(IN),
-                              LOGICAL_ARG(&FORWARD),
-                              INTEGER_ARG(&NCOORD_OUT),
-                              INTEGER_ARG(&OUTDIM),
-                              DOUBLE_ARRAY_ARG(OUT),
-                              INTEGER_ARG(&STATUS) );
-      astSetStatus( STATUS );
-   }
-
-
-/* If OK, transfer the transformed coordinate values to the output
-   arrays. */
-   if ( astOK ) {
-      i = 0;
-      for ( coord = 0; coord < ncoord_out; coord++ ) {
-         (void) memcpy( ptr_out[ coord ], OUT + i,
-                        (size_t) npoint * sizeof( F77_DOUBLE_TYPE ) );
-         i += npoint;
-      }
-   }
-
-/* Free the temporary arrays. */
-   astFree( IN );
-   astFree( OUT );
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_SUBROUTINE(ast_intrareg)( CHARACTER(NAME),
-                              INTEGER(NIN),
-                              INTEGER(NOUT),
-                              void (* TRAN)(),
-                              INTEGER(FLAGS),
-                              CHARACTER(PURPOSE),
-                              CHARACTER(AUTHOR),
-                              CHARACTER(CONTACT),
-                              INTEGER(STATUS)
-                              TRAIL(NAME)
-                              TRAIL(PURPOSE)
-                              TRAIL(AUTHOR)
-                              TRAIL(CONTACT) ) {
-   GENPTR_CHARACTER(NAME)
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER(NOUT)
-   GENPTR_INTEGER(FLAGS)
-   GENPTR_CHARACTER(PURPOSE)
-   GENPTR_CHARACTER(AUTHOR)
-   GENPTR_CHARACTER(CONTACT)
-   char *name;
-   void (* tran)( AstMapping *, int, int, const double *[], int, int,
-                  double *[] );
-   char *purpose;
-   char *author;
-   char *contact;
-
-   astAt( "AST_INTRAREG", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      tran =
-         (void (*)( AstMapping *, int, int, const double *[], int, int,
-                    double *[] )) TRAN;
-      purpose = astString( PURPOSE, PURPOSE_length );
-      author = astString( AUTHOR, AUTHOR_length );
-      contact = astString( CONTACT, CONTACT_length );
-      astIntraRegFor( name, *NIN, *NOUT, tran, TranWrap, *FLAGS, purpose,
-                      author, contact );
-      astFree( name );
-      astFree( purpose );
-      astFree( author );
-      astFree( contact );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_intramap)( CHARACTER(NAME),
-                                    INTEGER(NIN),
-                                    INTEGER(NOUT),
-                                    CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(NAME)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(NAME)
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER(NOUT)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *name;
-   char *options;
-   int i;
-
-   astAt( "AST_INTRAMAP", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astIntraMap( name, *NIN, *NOUT, "%s", options ) );
-      astFree( name );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaintramap)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAINTRAMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAIntraMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fitschan.c b/ast-5.3-1/fitschan.c
deleted file mode 100644
index 04b5c15..0000000
--- a/ast-5.3-1/fitschan.c
+++ /dev/null
@@ -1,35993 +0,0 @@
-/*
-*class++
-*  Name:
-*     FitsChan
-
-*  Purpose:
-*     I/O Channel using FITS header cards to represent Objects.
-
-*  Constructor Function:
-c     astFitsChan
-f     AST_FITSCHAN
-
-*  Description:
-*     A FitsChan is a specialised form of Channel which supports I/O
-*     operations involving the use of FITS (Flexible Image Transport
-*     System) header cards. Writing an Object to a FitsChan (using
-c     astWrite) will, if the Object is suitable, generate a
-f     AST_WRITE) will, if the Object is suitable, generate a
-*     description of that Object composed of FITS header cards, and
-*     reading from a FitsChan will create a new Object from its FITS
-*     header card description.
-*
-*     While a FitsChan is active, it represents a buffer which may
-*     contain zero or more 80-character "header cards" conforming to
-*     FITS conventions. Any sequence of FITS-conforming header cards
-*     may be stored, apart from the "END" card whose existence is
-*     merely implied.  The cards may be accessed in any order by using
-*     the FitsChan's integer Card attribute, which identifies a "current"
-*     card, to which subsequent operations apply. Searches
-c     based on keyword may be performed (using astFindFits), new
-c     cards may be inserted (astPutFits, astPutCards, astSetFits<X>) and 
-c     existing ones may be deleted (astDelFits), extracted (astGetFits<X>),
-c     or changed (astSetFits<X>).
-f     based on keyword may be performed (using AST_FINDFITS), new
-f     cards may be inserted (AST_PUTFITS, AST_PUTCARDS, AST_SETFITS<X>) and 
-f     existing ones may be deleted (AST_DELFITS), extracted
-f     (AST_GETFITS<X>) or changed (AST_SETFITS<X>).
-*
-*     When you create a FitsChan, you have the option of specifying
-*     "source" and "sink" functions which connect it to external data
-*     stores by reading and writing FITS header cards. If you provide
-*     a source function, it is used to fill the FitsChan with header cards
-*     when it is accessed for the first time. If you do not provide a 
-*     source function, the FitsChan remains empty until you explicitly enter
-c     data into it (e.g. using astPutFits, astPutCards or astWrite). If you
-f     data into it (e.g. using AST_PUTFITS, AST_PUTCARDS or AST_WRITE). If you
-*     provide a sink function, it is used to deliver any remaining
-*     contents of a FitsChan to an external data store when the
-*     FitsChan is deleted. If you do not provide a sink function, any
-*     header cards remaining when the FitsChan is deleted will be
-*     lost, so you should arrange to extract them first if necessary
-c     (e.g. using astFindFits or astRead).
-f     (e.g. using AST_FINDFITS or AST_READ).
-*     
-*     Coordinate system information may be described using FITS header
-*     cards using several different conventions, termed
-*     "encodings". When an AST Object is written to (or read from) a
-*     FitsChan, the value of the FitsChan's Encoding attribute
-*     determines how the Object is converted to (or from) a
-*     description involving FITS header cards. In general, different
-*     encodings will result in different sets of header cards to
-*     describe the same Object. Examples of encodings include the DSS
-*     encoding (based on conventions used by the STScI Digitised Sky
-*     Survey data), the FITS-WCS encoding (based on a proposed FITS
-*     standard) and the NATIVE encoding (a near loss-less way of
-*     storing AST Objects in FITS headers).
-*
-*     The available encodings differ in the range of Objects they can
-*     represent, in the number of Object descriptions that can coexist
-*     in the same FitsChan, and in their accessibility to other
-*     (external) astronomy applications (see the Encoding attribute
-*     for details). Encodings are not necessarily mutually exclusive
-*     and it may sometimes be possible to describe the same Object in
-*     several ways within a particular set of FITS header cards by
-*     using several different encodings.
-*
-c     The detailed behaviour of astRead and astWrite, when used with
-f     The detailed behaviour of AST_READ and AST_WRITE, when used with
-*     a FitsChan, depends on the encoding in use. In general, however,
-c     all successful use of astRead is destructive, so that FITS header cards
-f     all successful use of AST_READ is destructive, so that FITS header cards
-*     are consumed in the process of reading an Object, and are
-*     removed from the FitsChan (this deletion can be prevented for 
-*     specific cards by calling the 
-c     astRetainFits function).
-f     AST_RETAINFITS routine).
-*     An unsuccessful call of 
-c     astRead
-f     AST_READ
-*     (for instance, caused by the FitsChan not containing the necessary
-*     FITS headers cards needed to create an Object) results in the
-*     contents of the FitsChan being left unchanged.
-*
-*     If the encoding in use allows only a single Object description
-*     to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-c     encodings), then write operations using astWrite will
-f     encodings), then write operations using AST_WRITE will
-*     over-write any existing Object description using that
-*     encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-*     descriptions are written sequentially and may later be read
-*     back in the same sequence.
-
-*  Inheritance:
-*     The FitsChan class inherits from the Channel class.
-
-*  Attributes:
-*     In addition to those attributes common to all Channels, every
-*     FitsChan also has the following attributes:
-*
-*     - AllWarnings: A list of the available conditions
-*     - Card: Index of current FITS card in a FitsChan
-*     - CarLin: Ignore spherical rotations on CAR projections?
-*     - CDMatrix: Use a CD matrix instead of a PC matrix?
-*     - Clean: Remove cards used whilst reading even if an error occurs?
-*     - DefB1950: Use FK4 B1950 as default equatorial coordinates?
-*     - Encoding: System for encoding Objects as FITS headers
-*     - FitsDigits: Digits of precision for floating-point FITS values
-*     - Iwc: Add a Frame describing Intermediate World Coords?
-*     - Ncard: Number of FITS header cards in a FitsChan
-*     - Warnings: Produces warnings about selected conditions
-
-*  Functions:
-c     In addition to those functions applicable to all Channels, the
-c     following functions may also be applied to all FitsChans:
-f     In addition to those routines applicable to all Channels, the
-f     following routines may also be applied to all FitsChans:
-*
-c     - astDelFits: Delete the current FITS card in a FitsChan
-f     - AST_DELFITS: Delete the current FITS card in a FitsChan
-c     - astFindFits: Find a FITS card in a FitsChan by keyword
-f     - AST_FINDFITS: Find a FITS card in a FitsChan by keyword
-c     - astGetFits<X>: Get a keyword value from a FitsChan
-f     - AST_GETFITS<X>: Get a keyword value from a FitsChan
-c     - astSetFits<X>: Store a new keyword value in a FitsChan
-f     - AST_SETFITS<X>: Store a new keyword value in a FitsChan
-c     - astPurgeWCS: Delete all WCS-related cards in a FitsChan
-c     - AST_PURGEWCS: Delete all WCS-related cards in a FitsChan
-c     - astPutFits: Store a FITS header card in a FitsChan
-f     - AST_PUTFITS: Store a FITS header card in a FitsChan
-c     - astPutCards: Stores a set of FITS header card in a FitsChan
-f     - AST_PUTCARDS: Stores a set of FITS header card in a FitsChan
-c     - astRetainFits: Ensure current card is retained in a FitsChan
-f     - AST_RETAINFITS: Ensure current card is retained in a FitsChan
-c     - astTestFits: Test if a keyword has a defined value in a FitsChan
-f     - AST_TESTFITS: Test if a keyword has a defined value in a FitsChan
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink, RAL)
-*     TIMJ: Tim Jenness (JAC, Hawaii)
-
-*  History:
-*     11-DEC-1996 (DSB):
-*        Original version.
-*     20-MAR-1997 (DSB):
-*        Made keyword setting and getting functions protected instead of
-*        public. Renamed public methods. Added Ncard attribute.
-*     20-MAY-1997 (RFWS):
-*        Tidied public prologues.
-*     30-JUN-1997 (DSB):
-*        Added support for reading post-2000 DATE-OBS strings. Reading DSS
-*        or FITS-WCS objects now returns NULL unless the FitsChan is
-*        positioned at the start-of-file prior to the read. Bug fixed
-*        which caused Ncard to be returned too large by one. Removed
-*        dependancy on hard-wired header and footer text in Native
-*        FitsChans.
-*     18-AUG-1997 (DSB):
-*        Bug fixed in WcsNative which caused incorrect CRVAL values
-*        to be used if the axes needed permuting. Values assigned to the
-*        Projection attribute fo the SkyFrames created by astRead.
-*     2-SEP-1997 (DSB):
-*        Added the IRAF convention that EPOCH=0.0 really means EPOCH=1950.0
-*        (the EPOCH keyword is deprecated in the new FITS-WCS conventions
-*        and is taken always as a Besselian epoch).
-*     19-SEP-1997 (DSB):
-*        Corrected interpretation of the FITS CD matrix. 
-*     25-SEP-1997 (DSB):
-*        o  Fix bug in LinearMap which caused it always to detect a linear
-*        mapping. For instance, this allowed DssMaps to be erroneously 
-*        written out using FITS-WCS encoding with a CAR projection.
-*        o  Assign a full textual description to SkyFrame's Projection
-*        attribute instead of a 3 letter acronym.
-*        o  If DATE-OBS >= 1999.0 then DATE-OBS is now written in new 
-*        Y2000 format. For DATE-OBS < 1999.0, the old format is written.
-*        o  Add new attribute CDMatrix to determine whether PC or CD
-*        matrices should be used when writing objects using FITS-WCS
-*        encoding.
-*        o  Modified the way floating point values are formatted to omit
-*        unnecessary leading zeros from the exponent (i.e. E-5 instead of
-*        E-05).
-*        o  New-line characters at the end of supplied header cards are now 
-*        ignored.
-*        o  Cater for EQUINOX specified as a string prefixed by B or J
-*        rather than as a floating point value (some HST data does this).
-*        o  Corrected SetValue so that it always inserts comment cards 
-*        rather than over-write existing comment cards. Previously,
-*        writing a FrameSet to a DSS encoded FitsChan resulted in all
-*        comments cards being stripped except for the last one.
-*        o  Reading a FrameSet from a DSS-encoded FrameSet now only
-*        removes the keywords actually required to construct the FrameSet.
-*        Previously, all keywords were removed.
-*        o  The EPOCH and EQUINOX keywords created when a FrameSet is
-*        written to a DSS-encoded FitsChan are now determined from the 
-*        epoch and equinox of the current Frame, instead of from a copy
-*        of the original FitsChan stored within the DssMap.
-*        o  The Encoding and CDMatrix attributes, and keyword types are 
-*        now stored as strings externally instead of integers.
-*     11-NOV-1997 (DSB):
-*        o  Assume default of j2000 for DSS EQUINOX value.
-*        o  Check for null object pointers in the interfaces for 
-*        virtual functions which execute even if an error has previously
-*        occurred. Otherwise, a segmentation violation can occur when 
-*        trying to find the member function pointer.
-*        o  Trailing spaces ignored in Encoding attribute.
-*        o  Bugs fixed in FindWcs and SetValue which resulted in WCS cards
-*        being written at the wrong place if the supplied FitsChan does not 
-*        contain any WCS keywords.
-*        o  Default for CDMatrix (if no axis rotation keywords can be found) 
-*        changed to 2 (i.e. use "CDi_j" form keywords).
-*        o  Write now leaves the current card unchanged if nothing is 
-*        written to the FitsChan.
-*     17-NOV-1997 (RFWS):
-*        Disabled use of CDmatrix. Fixed initialisation problems in
-*        astLoadFitsChan.
-*     24-NOV-1997 (DSB):
-*        Replace references to error code AST__OPT with AST__RDERR.
-*     28-NOV-1997 (DSB):
-*        o  Function WcsValues modified to prevent it from changing the 
-*        current card. Previously, this could cause new cards to be 
-*        written to the wrong place in a FITS-WCS encoded FitsChan.
-*        o  Description of argument "value" corrected in prologue of
-*        function SetFits.
-*        o  Argument "lastkey" removed from function SetValue since it
-*        was never used (it was a relic from a previous method of
-*        determining where to store new cards). Corresponding changes 
-*        have been made to all the functions which create "lastkey" values 
-*        or pass them on to SetValue (i.e DescWcs, WcsPrimary, WcsSecondary, 
-*        WriteWcs and WriteDss).
-*     10-DEC-1997 (DSB):
-*        Bug fixed which caused the initial character designating the system 
-*        within CTYPE value (eg E in ELON, G in GLON, etc) to be omitted.
-*     1-JUN-1998 (DSB):
-*        CDELT values of zero are now replaced by a small non-zero value
-*        when creating the "pixel-to-relative physical" transformation
-*        matrix. Previously, zero CDELT values could cause the matrix to
-*        be non-invertable.
-*     4-SEP-1998 (DSB):
-*        - Indicate that SphMaps created by this class when using FITS-WCS
-*        encoding all operate on the unit sphere. This aids simplification.
-*        - Fix a bug in StoreFits which caused CD matrices to be indexed 
-*        incorrectly (sometimes causing floating exceptions) if they do not
-*        describe a celestial longitude/latitude system.
-*        - Changed astFindFits to ignore trailing spaces in the keyword 
-*        template.
-*        - astSplit changed so that an error is not reported if a textual
-*        keyword value ends before column 20.
-*     7-OCT-1998 (DSB):
-*        - Corrected test for linearity in LinearMap to include a factor
-*        of the test vector length. Also LinearMap now uses a simplified 
-*        Mapping.
-*     5-NOV-1998 (DSB):
-*        Added FITS-IRAF encoding.
-*     9-NOV-1998 (DSB):
-*        - Corrected values of macros DSS_ENCODING and MAX_ENCODING.
-*        - Corrected erroneous success indication in IrafStore.
-*        - Included checks for bad values in function LinearMap.
-*     17-NOV-1998 (DSB):
-*        The Domain name GRID is now given to the Base Frame in any FrameSets
-*        created by astRead when using FitsChans with DSS, FITS-WCS or
-*        FITS-IRAF encodings.
-*     18-DEC-1998 (DSB):
-*        Check for "D" exponents in floating point keyword strings.
-*     12-FEB-1998 (DSB):
-*        Modified EncodeFloat to avoid exceeding the 20 character FITS 
-*        limit wherever possible if FitsDigits is positive.
-*     10-MAY-1998 (DSB):
-*        Bug fixed in astSplit which caused comments associated with string
-*        keywords to be lost when storing the card in a FitsChan.
-*     15-JUN-1999 (DSB):
-*        Report an error if an unrecognised projection name is supplied.
-*     9-DEC-1999 (DSB):
-*        - Fixed bug in WcsNatPole which could result in longitude values
-*        being out by 180 degrees for cylindrical projections such as CAR.
-*        - Only report an "unrecognised projection" error for CTYPE values
-*        which look like celestial longitude or latitude axes (i.e. if the 
-*        first 4 characters are "RA--", "DEC-", "xLON" or "xLAT", and the
-*        fifth character is "-").
-*        - Added function SpecTrans to translated keywords related to the 
-*        IRAF ZPX projection into keyword for the standard ZPN projection.
-*        - Add ICRS as a valid value for the RADECSYS keyword. Since the
-*        SkyFrame class does not yet support ICRS, an FK5 SkyFrame is
-*        created if RADECSYS=ICRS.
-*     16-DEC-1999 (DSB):
-*        - Modified SpecTrans so that all keywords used to created a 
-*        standard WCS representation from a non-standard one are consumed 
-*        by the astRead operation.
-*        - Changed the text of ASTWARN cards added to the FitsChan if an
-*        IRAF ZPX projection is found to require unsupported corrections.
-*        - Simplified the documentation describing the handling of the IRAF 
-*        ZPX projection.
-*        - Fixed code which assumed that the 10 FITS-WCS projection
-*        parameters were PROJP1 -> PROJP10. In fact they are PROJP0 -
-*        PROJP9. This could cause projection parameter values to be
-*        incorrectly numbered when they are written out upon deletion of 
-*        the FitsChan.
-*     1-FEB-2000 (DSB):
-*        Check that FITS_IRAF encoding is not being used before using a
-*        PC matrix when reading WCS information from a header. This is
-*        important if the header contains both PC and CD matrices.
-*     8-FEB-2000 (DSB):
-*        - Header cards are now only consumed by an astRead operation if the
-*        operation succeeds (i.e. returns a non-null Object).
-*        - The original FITS-WCS encoding has been renamed as FITS-PC (to
-*        indicate the use of a PCiiijjj matrix), and a new FITS-WCS
-*        encoding has been added.
-*        - The disabled CDMatrix attribute has been removed.
-*        - Bug in LinearMap corrected which prevented genuinely linear 
-*        Mappings from being judged to be linear. This bug was previously
-*        fudged (so it now appears) by the introduction of the test vector
-*        length factor (see History entry for 7-OCT-1998). This test
-*        vector length scale factor has consequently now been removed.
-*        - Added FITS-AIPS encoding.
-*        - The critical keywords used to select default encoding have been
-*        changed.
-*        - Support for common flavours of IRAF TNX projections added.
-*        - The algorithm used to find a WcsMap in the supplied FrameSet 
-*        has been improved so that compound Mappings which contain complex
-*        mixtures of parallel and serial Mappings can be translated into
-*        FITS-WCS encoding.
-*        - Trailing white space in string keyword values is now retained
-*        when using foreign encodings to enable correct concatenation where 
-*        a string has been split over several keywords. E.g. if 2 string 
-*        keywords contain a list of formatted numerical values (e.g. IRAF 
-*        WAT... keywords), and the 1st one ends "0.123 " and the next one 
-*        begins "1234.5 ", the trailing space at the end of the first keyword 
-*        is needed to prevent the two numbers being merged into "0.1231234.5". 
-*        Trailing spaces in native encodings is still protected by enclosing 
-*        the whole string in double quotes. 
-*        - The Channel methods WriteString and GetNextData can now save
-*        and restore strings of arbitary length. This is done by storing
-*        as much of the string as possible in the usual way, and then
-*        storing any remaining characters in subsequent CONTINUE cards,
-*        using the FITSIO conventions. This storage and retrieval of long
-*        strings is only available for native encodings.
-*     19-MAY-2000 (DSB):
-*        Added attribute Warnings. Lowered DSS in the priority list
-*        of encodings implemented by GetEncoding.
-*     6-OCT-2000 (DSB):
-*        Increased size of buffers used to store CTYPE values to take
-*        account of the possiblity of lots of trailing spaces.
-*     5-DEC-2000 (DSB):
-*        Add support for the WCSNAME FITS keyword.
-*     12-DEC-2000 (DSB):
-*        Add a title to each physical, non-celestial coord Frame based on 
-*        its Domain name (if any).
-*     3-APR-2001 (DSB):
-*        -  Use an "unknown" celestial coordinate system, instead of a
-*        Cartesian coordinate system, if the CTYPE keywords specify an
-*        unknown celestial coordinate system.
-*        -  Do not report an error if there are no CTYPE keywords in the 
-*        header (assume a unit mapping, like in La Palma FITS files).
-*        -  Add a NoCTYPE warning condition.
-*        -  Added AllWarnings attribute.
-*        -  Ensure multiple copies of identical warnings are not produced.
-*        -  Use the Object Ident attribute to store the identifier letter
-*        associated with each Frame read from a secondary axis description,
-*        so that they can be given the same letter when they are written
-*        out to a new FITS file.
-*     10-AUG-2001 (DSB):
-*        - Corrected function value returned by SkySys to be 1 unless an
-*        error occurs. This error resulted in CAR headers being produced
-*        by astWrite with CRVAL and CD values till in radians rather than 
-*        degrees.
-*        - Introduced SplitMap2 in order to guard against producing
-*        celestial FITS headers for a Mapping which includes more than
-*        one WcsMap.
-*     13-AUG-2001 (DSB):
-*        - Modified FixNew so that it retains the current card index if possible.
-*        This fixed a bug which could cause headers written out using Native 
-*        encodings to be non-contiguous.
-*        - Corrected ComBlock to correctly remove AST comment blocks in
-*        native encoded fitschans.
-*     14-AUG-2001 (DSB):
-*        - Modified FixUsed so that it it does not set the current card
-*        back to the start of file if the last card in the FitsChan is 
-*        deleted.
-*     16-AUG-2001 (DSB):
-*        Modified WcsNative to limit reference point latitude to range
-*        +/-90 degs (previously values outside this range were wrapped
-*        round onto the opposite meridian). Also added new warning
-*        condition "badlat".
-*     23-AUG-2001 (DSB):
-*        - Re-write LinearMap to use a least squares fit.
-*        - Check that CDj_i is not AST__BAD within WcsWithWcs when
-*        forming the increments along each physical axis.
-*     28-SEP-2001 (DSB):
-*        GoodWarns changed so that no error is reported if a blank list
-*        of conditions is supplied.
-*     12-OCT-2001 (DSB):
-*        - Added DefB1950 attribute.
-*        - Corrected equations which calculate CROTA when writing 
-*        FITS-AIPS encodings.
-*        - Corrected equations which turn a CROTA value into a CD matrix.
-*     29-NOV-2001 (DSB):
-*        Corrected use of "_" and "-" characters when referring to FK4-NO-E
-*        system in function SkySys.
-*     20-FEB-2002 (DSB)
-*        Added CarLin attribute.
-*     8-MAY-2002 (DSB):
-*        Correct DSSToStore to ignore trailing blanks in the PLTDECSN
-*        keyword value.
-*     9-MAY-2002 (DSB):
-*        Correct GetCard to avoid infinite loop if the current card has
-*        been marked as deleted.
-*     25-SEP-2002 (DSB):
-*        AIPSFromStore: use larger of coscro and sincro when determining
-*        CDELT values. Previously a non-zero coscro was always used, even
-*        if it was a s small as 1.0E-17.
-*     3-OCT-2002 (DSB):
-*        - SkySys: Corrected calculation of longitude axis index for unknown
-*        celestial systems.
-*        - SpecTrans: Corrected check for latcor terms for ZPX projections.
-*        - WcsFrame: Only store an explicit equinox value in a skyframe if 
-*        it needs one (i.e. if the system is ecliptic or equatorial).
-*        - WcsWithWcs: For Zenithal projections, always use the default
-*        LONPOLE value, and absorb any excess rotation caused by this
-*        into the CD matrix.
-*        - WcsWithWcs: Improve the check that the native->celestial mapping 
-*        is a pure rotation, allowing for rotations which change the
-*        handed-ness of the system (if possible).
-*        - WcsWithWcs: Avoid using LONPOLE keywords when creating headers
-*        for a zenithal projection. Instead, add the corresponding rotation 
-*        into the CD matrix.
-*     22-OCT-2002 (DSB):
-*        - Retain leading and trailing white space within COMMENT cards.
-*        - Only use CTYPE comments as axis labels if all non-celestial
-*          axes have a unique non-blank comment (otherwise use CTYPE
-*          values as labels).
-*        - Updated to use latest FITS-WCS projections. This means that the
-*          "TAN with projection terms" is no longer a standard FITS
-*          projection. It is now represented using the AST-specific TPN
-*          projection (until such time as FITS-WCS paper IV is finished).
-*        - Remove trailing "Z" from DATE-OBS values created by astWrite.
-*     14-NOV-2002 (DSB):
-*        - WcsWithWcs: Corrected to ignore longitude axis returned by
-*        astPrimaryFrame since it does not take into account any axis
-*        permutation.
-*     26-NOV-2002 (DSB):
-*        - SpecTrans: Corrected no. of characters copied from CTYPE to PRJ,
-*        (from 5 to 4), and terminate PRJ correctly. 
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitFitsChanVtab
-*        method.
-*     22-JAN-2003 (DSB):
-*        Restructured the functions used for reading FITS_WCS headers to
-*        make the distinction between the generic parts (pixel->intermediate 
-*        world coordinates) and the specialised parts (e.g. celestial,
-*        spectral, etc) clearer.
-*     31-JAN-2003 (DSB)
-*        - Added Clean attribute.
-*        - Corrected initialisation and defaulting of CarLin and DefB1950 
-*        attributes.
-*        - Extensive changes to allow foreign encodings to be produced in
-*        cases where the Base Frame has fewer axes than the Current Frame.
-*     12-FEB-2003 (DSB)
-*        - Modified SetFits so that the existing card comment is retained
-*        if the new data value equals the existing data value.
-*     30-APR-2003 (DSB):
-*        - Revert to standard "TAN" code for distorted tan projections,
-*        rather than using the "TPN" code. Also recognise QVi_m (produced
-*        by AUTOASTROM) as an alternative to PVi_m when reading distorted 
-*        TAN headers. 
-*     22-MAY-2003 (DSB):
-*        Modified GetEncoding so that the presence of RADECSYS and/or
-*        PROJPm is only considered significant if the modern equivalent 
-*        keyword (REDESYS or PVi_m) is *NOT* present.
-*     2-JUN-2003 (DSB):
-*        - Added support for PCi_j kewwords within FITS-WCS encoding
-*        - Added CDMatrix attribute
-*        - Changed internal FitsStore usage to use PC/CDELT instead of CD
-*        (as preparation for FITS-WCS paper IV).
-*        - Added warning "BadMat".
-*     11-JUN-2003 (DSB):
-*        - Modified WcsNative to use the new SphMap PolarLong attribute 
-*        in order to ensure correct propagation of the longitude CRVAL
-*        value in cases where the fiducial point is coincident with a pole.
-*        - Use PVi_3 and PVi_4 for longitude axis "i" (if present) in 
-*        preference to LONPOLE and LATPOLE when reading a FITS-WCS header. 
-*        Note, these projection values are never written out (LONPOLE and 
-*        LATPOLE are written instead).
-*        - Associate "RADESYS=ICRS" with SkyFrame( "System=ICRS" ), rather
-*        than SkyFrame( "System=FK5" ).
-*        - If DefB1950 is zero, use ICRS instead of FK5 as the default RADESYS 
-*        if no EQUINOX is present.
-*     1-SEP-2003 (DSB):
-*        - Modify Dump so that it dumps all cards including those flagged as 
-*        having been read.
-*        - Added "reset" parameter to FixUsed.
-*        - WcsMapFrm: store an Ident of ' ' for the primary coordinate 
-*        description (previously Ident was left unset)
-*        - Default value for DefB1950 attribute now depends on the value
-*        of the Encoding attribute. 
-*     15-SEP-2003 (DSB):
-*        - Added Warnings "BadVal", "Distortion".
-*        - Ignore FITS-WCS paper IV CTYPE distortion codes (except for
-*          "-SIP" which is interpreted correctly on reading).
-*     22-OCT-2003 (DSB):
-*        - GetEncoding: If the header contains CDi_j but does not contain
-*        any of the old IRAF keywords (RADECSYS, etc) then assume FITS-WCS
-*        encoding. This allows a FITS-WCS header to have both CDi_j *and*
-*        CROTA keywords.
-*     5-JAN-2004 (DSB):
-*        - SpecTrans: Use 1.0 (instead of the CDELT value) as the
-*        diagonal PCi_j term for non-celestial axes with associated CROTA 
-*        values.  
-*     12-JAN-2004 (DSB):
-*        - CelestialAxes: Initialise "tmap1" pointer to NULL in case of error 
-*        (avoids a segvio happening in the case of an error).
-*        - AddVersion: Do not attempt to add a Frame into the FITS header
-*        if the mapping from grid to frame is not invertable.
-*        - WorldAxes: Initialise the returned "perm" values to safe values, 
-*        and return these values if no basis vectors cen be created.
-*     19-JAN-2004 (DSB):
-*        - When reading a FITS-WCS header, allow all keywords to be defaulted 
-*        as decribed in paper I.
-*     27-JAN-2004 (DSB):
-*        - Modify FitLine to use correlation between actual and estimated
-*        axis value as the test for linearity.
-*        - Modify RoundFString to avoid writing beyond the end of the
-*        supplied buffer if the supplied string contains a long list of 9's.
-*     11-MAR-2004 (DSB):
-*        - Modified SpecTrans to check all axis descriptions for keywords
-*        to be translated.
-*     19-MAR-2004 (DSB):
-*        - Added astPutCards to support new fits_hdr2str function in
-*        CFITSIO.
-*     25-MAR-2004 (DSB):
-*        - Corrected bug in astSplit which causes legal cards to be
-*        rejected because characters beyond the 80 char limit are being
-*        considered significant.
-*        - Corrected bug in SpecTrans which caused QV keywords to be
-*        ignored.
-*     15-APR-2004 (DSB):
-*        - SpecTrans modified to include translation of old "-WAV", "-FRQ"
-*        and "-VEL" spectral algorithm codes to modern "-X2P" form.
-*        - WcsFromStore modified to supress creation of WCSAXES keywords
-*        for un-used axis versions.
-*        - IsMapLinear modified to improve fit by doing a second least
-*        squares fit to the residualleft by the first least squares fit.
-*     16-APR-2004 (DSB):
-*        - NonLinSpecWcs: Issue a warning if an illegal non-linear
-*        spectral code is encountered.
-*        - Add a BadCTYPE warning condition.
-*        - Corrected default value for Clean so that it is zero (as
-*        documented).
-*     21-APR-2004 (DSB):
-*        - FindWcs: Corrected to use correct OBSGEO template. This bug
-*        caused OBSGEO keywords to be misplaced in written headers.
-*     23-APR-2004 (DSB):
-*        - SplitMap: Modified so that a Mapping which has celestial axes 
-*        with constant values (such as produced by a PermMap) are treated 
-*        as a valid sky coordinate Mapping.
-*        - AddFrame modified so that WCS Frames with a different number
-*        of axes ot the pixel Frame can be added into the FrameSet.
-*        - IRAFFromStore and AIPSFromStore modified so that they do not
-*        create any output keywords if the number of WCS axes is different 
-*        to the number of pixel axes. 
-*        - Handling of OBSGEO-X/Y/Z corrected again.
-*        - WCSFromStore modified to avouid writing partial axis descriptions.
-*     26-APR-2004 (DSB):
-*        - Corrected text of output SPECSYS keyword values.
-*     17-MAY-2004 (DSB):
-*        - Added IWC attribute.
-*     15-JUN-2004 (DSB):
-*        - Ensure out-of-bounds longitude CRPIX values for CAR
-*        projections are wrapped back into bounds.
-*     21-JUN-2004 (DSB):
-*        - Ensure primary MJD-OBS value is used when reading foreign FITS
-*        headers.
-*     7-JUL-2004 (DSB):
-*        - Issue errors if an un-invertable PC/CD matrix is supplied in a
-*        FITS-WCS Header.
-*     11-JUL-2004 (DSB):
-*        - Re-factor code for checking spectral axis CTYPE values into
-*        new function IsSpectral.
-*        - Modify AIPSFromSTore to create spectral axis keywords if
-*        possible.
-*        - Modify SpecTrans to recognize AIPS spectral axis keywords, and
-*        to convert "HZ" to "Hz".
-*        - Added FITS-AIPS++ encoding.
-*     12-AUG-2004 (DSB):
-*        - Convert GLS projection codes to equivalent SFL in SpecTrans.
-*        - Added FITS-CLASS encoding.
-*     16-AUG-2004 (DSB):
-*        - Removed support for paper III keyword VSOURCE, and added
-*        support for SSYSSRC keyword.
-*        - Added initial support for CLASS encoding.
-*        - In FitOK: Changed tolerance for detecting constant values
-*        from 1.0E-10 to 1.0E-8.
-*     17-AUG-2004 (DSB):
-*        Correct GetFiducialNSC so that the stored values for longitude
-*        parameters 1 and 2 are ignored unless the value of parameter 0 is 
-*        not zero.
-*     19-AUG-2004 (DSB):
-*        Modify SpecTrans to ignore any CDELT values if the header
-*        includes some CDi_j values.
-*     26-AUG-2004 (DSB):
-*        Modify astSplit_ to allow floating point keyword values which
-*        include an exponent to be specified with no decimal point 
-*        (e.g. "2E-4").
-*     27-AUG-2004 (DSB):
-*        Completed initial attempt at a FITS-CLASS encoding.
-*     9-SEP-2004 (DSB):
-*        Fixed usage of uninitialised values within ReadCrval.
-*     13-SEP-2004 (DSB):
-*        Check the "text" pointer can be used safely before using it in
-*        DSSToStore.
-*     27-SEP-2004 (DSB):
-*        In SpecTrans, before creating new PCi_j values,  check that no 
-*        PCi_j values have been created via an earlier translation.
-*     28-SEP-2004 (DSB):
-*        In AIPSPPFromStore only get projection parameters values if there
-*        are some celestialaxes. Also allow CROTA to describe rotation of
-*        non-celestial axes (same for AIPSFromSTore).
-*     4-OCT-2004 (DSB):
-*        Correct rounding of CRPIX in AddVersion to avoid integer overflow.
-*     11-NOV-2004 (DSB):
-*        - WcsFcRead: Avoid issuing warnings about bad keywords which
-*        have already been translated into equivalent good forms.
-*        - SpecTrans: If both PROJP and PV keywords are present, use PV
-*        in favour of PROJP only if the PV values look correct.
-*     17-NOV-2004 (DSB):
-*        - Make astSetFits<X> public.
-*     16-MAR-2005 (DSB):
-*        - Primary OBSGEO-X/Y/Z, MJD-AVG and MJDOBS keywords are associated 
-*        with all axis descriptions and should not have a trailing single 
-*        character indicating an alternate axis set.
-*     9-AUG-2005 (DSB):
-*        In WcsMapFrm, check reffrm is used before annulling it.
-*     8-SEP-2005 (DSB):
-*        - Change "if( a < b < c )" constructs to "if( a < b && b < c )"
-*        - DSBSetup: correct test on FrameSet pointer state
-*        - Ensure CLASS keywords written to a FitsChan do not come before
-*        the final fixed position keyword.
-*     9-SEP-2005 (DSB):
-*        - Added "AZ--" and "EL--" as allowed axis types in FITS-WCS
-*        ctype values.
-*     12-SEP-2005 (DSB):
-*        - Cast difference between two pointers to (int)
-*        - CLASSFromStore:Check source velocity is defined before
-*          storing it in the output header.
-*     13-SEP-2005 (DSB):
-*        - Corrected B1940 to B1950 in AddEncodingFrame. This bug
-*        prevented some FrameSets being written out using FITS-CLASS.
-*        - Rationalise the use of the "mapping" pointer in AddVersion.
-*        - WcsCelestial: Modified so that the FITS reference point is
-*        stored as the SkyFrame SkyRef attribute value.
-*     7-OCT-2005 (DSB):
-*        Make astGetFits<X> public.
-*     30-NOV-2005 (DSB):
-*        Add support for undefined FITS keyword values.
-*     5-DEC-2005 (DSB):
-*        - Include an IMAGFREQ keyword in the output when writing a 
-*        DSBSpecFrame out using FITS-WCS encoding.
-*        - Correct test for constant values in FitOK.
-*     7-DEC-2005 (DSB):
-*        Free memory allocated by calls to astReadString.
-*     30-JAN-2006 (DSB):
-*        Modify astSplit so that it does no read the supplied card beyond 
-*        column 80.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     28-FEB-2006 (DSB):
-*        Correct documentation typo ("NCards" -> "Ncard").
-*     5-APR-2006 (DSB):
-*        Modify SpecTrans to convert CTYPE="LAMBDA" to CTYPE="WAVE".
-*     26-MAY-2006 (DSB):
-*        Guard against NULL comment pointer when converting RESTFREQ to 
-*        RESTFRQ in SpecTrans.
-*     29-JUN-2006 (DSB):
-*        - Added astRetainFits.
-*        - Consume VELOSYS FITS-WCS keywords when reading an object.
-*        - Write out VELOSYS FITS-WCS keywords when writing an object.
-*     7-AUG-2006 (DSB):
-*        Remove trailing spaces from the string returned by astGetFitsS
-*        if the original string contains 8 or fewer characters.
-*     16-AUG-2006 (DSB):
-*        Document non-destructive nature of unsuccessful astRead calls.
-*     17-AUG-2006 (DSB):
-*        Fix bugs so that the value of the Clean attribute is honoured
-*        even if an error has occurred.
-*     4-SEP-2006 (DSB):
-*        Modify GetClean so that it ignores the inherited status.
-*     20-SEP-2006 (DSB):
-*        Fix memory leak in WcsSpectral.
-*     6-OCT-2006 (DSB):
-*        Modify IsSpectral and IsAIPSSpectral to allow for CTYPE values that 
-*        are shorter than eight characters.
-*     13-OCT-2006 (DSB):
-*        - Ensure SpecFrames and SkyFrames created from a foreign FITS header
-*        are consistent in their choice of Epoch.
-*        - Convert MJD-OBS and MJD-AVG values from TIMESYS timescale to
-*        TDB before using as the Epoch value in an AstFrame. Use UTC if
-*        TIMESYS is absent.
-*        - Convert Epoch values from TDB to UTC before storing as the
-*        value of an MJD-OBS or MJD-AVG keyword (no TIMESYS keyword is
-*        written).
-*     23-OCT-2006 (DSB):
-*        Prefer MJD-AVG over MJD-OBS.
-*     30-OCT-2006 (DSB):
-*        In FitOK: Changed lower limit on acceptbale correlation from
-*        0.999999 to 0.99999.
-*     1-NOV-2006 (DSB):
-*        - When reading a foreign header that contains a DUT1 keyword,
-*        use it to set the Dut1 attribute in the SkyFrame. Note, JACH
-*        store DUT1 in units of days. This may clash with the FITS-WCS
-*        standard (when its produced). Also note that DUT1 is not written
-*        out as yet when writing a FrameSet to a foreign FITS header.
-*        - Correct bug that prevented ZSOURCE keyword being added to the
-*        output header if the source velocity was negative.
-*     9-NOV-2006 (DSB):
-*        Add STATUS argument to docs for F77 AST_SETx.
-*     20-DEC-2006 (DSB):
-*        Correct FK5 to ICRS in error message issued if no RADESYS or
-*        EQUINOX is found.
-*     16-JAN-2007 (DSB):
-*        Cast ignored function return values to (void) to avoid compiler
-*        warnings.
-*     31-JAN-2007 (DSB):
-*        Change SpecTrans to ignore blank unit strings (previously
-*        converted them to "Hz").
-*     16-APR-2007 (DSB):
-*        In SplitMat, increase the allowed level of rounding erros from 
-*        1.0E-10 to 1.0E-7 (to avoid spurious low CDi_j values being
-*        created that should be zero).
-*     30-APR-2007 (DSB):
-*        - Change DSBSetup so that the central DSBSpecFrame frequency is
-*        CRVAL and the IF is the difference between CRVAL and LO.
-*        - Change tolerance in FitOK from 0.99999 to 0.995 to handle data from Nicolas 
-*        Peretto.
-*     1-MAY-2007 (DSB):
-*        - In astSplit, if a keyword value looks like an int but is too long to 
-*         fit in an int, then treat it as a float instead.
-*     18-MAY-2007 (DSB):
-*        In CnvType, use input type rather than output type when checking
-*        for a COMMENT card. Also, return a null data value buffer for a
-*        COMMENT card.
-*     4-JUN-2007 (DSB):
-*        In CLASSFromStore, create a DELTAV header even if it is equal to
-*        the spectral CDELT value. Also, convert spatial reference point
-*        to (az,el) and write out as headers AZIMUTH and ELEVATIO.
-*     9-JUL-2007 (DSB):
-*        Fixed bug in DSBSetUp - previously, this function assumed that
-*        the supplied DSBSpecFrame represented frequency, and so gave
-*        incorrect values for IF and DSBCentre if the header described
-*        velocity.
-*     9-AUG-2007 (DSB):
-*        Changed GetEncoding so that critcal keywords are ignored if
-*        there are no CTYPE, CRPIX or CRVAL keywords in the header.
-*     10-AUG-2007 (DSB):
-*        - Changed GetEncoding so that FITS_PC is not returned if there are
-*        any CDi_j or PCi_j keywords in the header.
-*        - Added astPurgeWCS method.
-*     13-AUG-2007 (DSB):
-*        - Include the DSS keywords AMDX%d and AMDY%d in FindWCS.
-*     16-AUG-2007 (DSB):
-*        - Force all FITS-CLASS headers to contain frequency axes
-*        (velocity axes seem not to be recognised properly by CLASS).
-*        - Change the CLASS "VELO-LSR" header to be the velocity at the
-*        reference channel, not the source velocity.
-*     22-AUG-2007 (DSB):
-*        - Remove debugging printf statements.
-*     20-SEP-2007 (DSB):
-*        Changed FitOK to check that the RMS residual is not more than
-*        a fixed small fraction of the pixel size.
-*     4-DEC-2007 (DSB):
-*        Changed CreateKeyword so that it uses a KeyMap to search for
-*        existing keywords. This is much faster than checking every
-*        FitsCard in the FitsChan explicitly.
-*     18-DEC-2007 (DSB):
-*        Add keyword VLSR to the CLASS encoding. It holds the same value
-*        as VELO-LSR, but different versions of class use different names.
-*        Also write out the DELTAV keyword in the LSR rest frame rather
-*        than the source rest frame.
-*     31-JAN-2008 (DSB):
-*        Correct calculation of redshift from radio velocity in ClassTrans.
-*     25-FEB-2008 (DSB):
-*        Ensure a SkyFrame represents absolute (rather than offset)
-*        coords before writing it out in any non-native encoding.
-*     28-FEB-2008 (DSB):
-*        Test for existing of SkyRefIs attribute before accessing it.
-*     2-APR-2008 (DSB):
-*        In CLASSFromStore, adjust the spatial CRVAL and CRPIX values to be 
-*        the centre of the first pixel if the spatial axes are degenerate.
-*     17-APR-2008 (DSB):
-*        Ignore latitude axis PV terms supplied in a TAN header
-*        (previously, such PV terms were used as polynomial correction
-*        terms in a TPN projection).
-*     30-APR-2008 (DSB):
-*        SetValue changed so that new keywords are inserted before the
-*        current card.
-*     1-MAY-2008 (DSB):
-*        Added UndefRead warning.
-*     7-MAY-2008 (DSB):
-*        Correct conversion of CDi_j to PCi_j/CDELT in SpecTrans.
-*     8-MAY-2008 (DSB):
-*        When writing out a FITS-WCS header, allow linear grid->WCS
-*        mapping to be represented by a CAR projection.
-*     9-MAY-2008 (DSB):
-*        Make class variables IgnoreUsed and MarkNew static.
-*     30-JUN-2008 (DSB):
-*        Improve efficiency of FindWcs.
-*     2-JUL-2008 (DSB):
-*        FitsSof now returns non-zero if the FitsChan is empty.
-*     16-JUL-2008 (DSB):
-*        Plug memory leak caused by failure to free the Warnings
-*        attribute string when a FitsChan is deleted.
-*     24-JUL-2008 (TIMJ):
-*        Fix buffer overrun in astGetFits when writing the keyword
-*        to the buffer (occurred if the input string was 80 characters).
-*     1-OCT-2008 (DSB):
-*        When reading a FITS-WCS header, spurious PVi_j keywords no
-*        longer generate an error. Instead they generate warnings via the
-*        new "BadPV" warning type.
-*     21-NOV-2008 (DSB):
-*        Do not remove keywords from read headers if they may be of
-*        relevance to things other than WCS (e.g. MJD-OBS, OBSGEO, etc).
-*     2-DEC-2008 (DSB):
-*        - astGetFits<X> now reports an error if the keyword value is undefined.
-*        - Add new functions astTestFits and astSetFitsU.
-*        - Remove use of AST__UNDEF<X> constants.
-*        - Remove "undefread" warning.
-*     16-JAN-2009 (DSB):
-*        Use astAddWarning to store each warning in the parent Channel
-*        structure.
-*     4-MAR-2009 (DSB):
-*        DATE-OBS and MJD-OBS cannot have an axis description character.
-*     13-MAR-2009 (DSB):
-*        The VELOSYS value read from the header is never used, so do not 
-*        report an error if VELOSYS has an undefined value.
-*     11-JUN-2009 (DSB):
-*        Delay reading cards from the source until they are actually
-*        needed. Previously, the source function was called in the
-*        FitsChan initialiser, but this means it is not possible for 
-*        application code to call astPutChannelData before the source 
-*        function is called. The ReadFromSource function is now called
-*        at the start of each (nearly) public or protected function to 
-*        ensure the source function has been called (the source function
-*        pointer in the FitsChan is then nullified to ensure it is not 
-*        called again).
-*     18-JUN-2009 (DSB):
-*        Include the effect of observer height (in the ObsAlt attribute)
-*        when creating OBSGEO-X/Y/Z headers, and store a value for
-*        ObsAlt when reading a set of OBSGEO-X/Y/Z headers.
-*     2-JUL-2009 (DSB):
-*        Check FitsChan is not empty at start of FindWcs.
-*     7-JUL-2009 (DSB):
-*        Add new function astSetFitsCM.
-*     30-JUL-2009 (DSB):
-*        Fix axis numbering in SkyPole.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS FitsChan
-
-/* A macro which tests a character to see if it can be used within a FITS 
-   keyword. We include lower case letters here, but they are considered
-   as equivalent to upper case letter. */
-#define isFits(a) ( islower(a) || isupper(a) || isdigit(a) || (a)=='-' || (a)=='_' )
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro which takes a pointer to a FitsCard and returns non-zero if the 
-   card has been used and so should be ignored. */
-#define CARDUSED(card)  ( \
-             ( ignore_used == 2 && \
-                ( (FitsCard *) (card) )->flags & PROVISIONALLY_USED ) || \
-             ( ignore_used >= 1 && \
-                ( (FitsCard *) (card) )->flags & USED ) )
-
-/* Set of characters used to encode a "sequence number" at the end of
-   FITS keywords in an attempt to make them unique.. */
-#define SEQ_CHARS "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
-/* A general tolerance for equality between floating point values. */
-#define TOL1 10.0*DBL_EPSILON
-
-/* A tolerance for equality between angular values in radians. */
-#define TOL2 1.0E-10
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Macro to check for equality of floating point angular values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. The smallest
-   significant angle is assumed to be 1E-9 radians (0.0002 arc-seconds).*/
-#define EQUALANG(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=MAX(1.0E5*(fabs(aa)+fabs(bb))*DBL_EPSILON,1.0E-9))))
-
-/* Macro to compare an angle in radians with zero, allowing some tolerance. */
-#define ZEROANG(aa) (fabs(aa)<1.0E-9)
-
-/* Constants: */
-#define UNKNOWN_ENCODING  -1
-#define NATIVE_ENCODING    0
-#define FITSPC_ENCODING    1
-#define DSS_ENCODING       2
-#define FITSWCS_ENCODING   3
-#define FITSIRAF_ENCODING  4
-#define FITSAIPS_ENCODING  5
-#define FITSAIPSPP_ENCODING 6
-#define FITSCLASS_ENCODING 7
-#define MAX_ENCODING       7
-#define UNKNOWN_STRING     "UNKNOWN"
-#define NATIVE_STRING      "NATIVE"
-#define FITSPC_STRING      "FITS-PC"
-#define FITSPC_STRING2     "FITS_PC"
-#define DSS_STRING         "DSS"
-#define FITSWCS_STRING     "FITS-WCS"
-#define FITSWCS_STRING2    "FITS_WCS"
-#define FITSIRAF_STRING    "FITS-IRAF"
-#define FITSIRAF_STRING2   "FITS_IRAF"
-#define FITSAIPS_STRING    "FITS-AIPS"
-#define FITSAIPS_STRING2   "FITS_AIPS"
-#define FITSAIPSPP_STRING  "FITS-AIPS++"
-#define FITSAIPSPP_STRING2 "FITS_AIPS++"
-#define FITSCLASS_STRING  "FITS-CLASS"
-#define FITSCLASS_STRING2 "FITS_CLASS"
-#define INDENT_INC         3
-#define PREVIOUS           0
-#define NEXT               1
-#define HEADER_TEXT        "Beginning of AST data for "
-#define FOOTER_TEXT        "End of AST data for "
-#define FITSNAMLEN         8
-#define FITSSTCOL          20
-#define FITSRLCOL          30
-#define FITSIMCOL          50
-#define FITSCOMCOL         32
-#define NORADEC            0
-#define FK4                1
-#define FK4NOE             2
-#define FK5                3
-#define GAPPT              4
-#define ICRS               5
-#define NOCEL              0
-#define RADEC              1
-#define ECLIP              2
-#define GALAC              3
-#define SUPER              4
-#define HECLIP             5
-#define AZEL               6
-#define LONAX             -1
-#define NONAX              0
-#define LATAX              1
-#define NDESC              9
-#define MXCTYPELEN        81
-#define ALLWARNINGS       " distortion noequinox noradesys nomjd-obs nolonpole nolatpole tnx zpx badcel noctype badlat badmat badval badctype badpv "
-#define NPFIT             10
-#define SPD               86400.0
-
-#define FL  1.0/298.257  /*  Reference spheroid flattening factor */
-#define A0  6378140.0    /*  Earth equatorial radius (metres) */
-
-/* Each card in the fitschan has a set of flags associated with it,
-   stored in different bits of the "flags" item within each FitsCard
-   structure (note, in AST V1.4 these flags were stored in the "del"
-   item... Dump and LoadFitsChan will need to be changed to use a
-   correspondingly changed name for the external representation of this
-   item). The following flags are currently defined: */
-
-/* "USED" - This flag indicates that the the card has been used in the
-   construction of an AST Object returned by astRead. Such cards should
-   usually be treated as if they do not exist, i.e. they should not be 
-   used again by subsequent calls to astRead, they should not be recognised
-   by public FitsChan methods which search the FitsChan for specified
-   cards, and they should not be written out when the FitsChan is deleted.
-   This flag was the only flag available in AST V1.4, and was called
-   "Del" (for "deleted"). Used cards are retained in order to give an
-   indication of where abouts within the header new cards should be placed
-   when astWrite is called (i.e. new cards should usually be placed at
-   the same point within the header as the cards which they replace). */
-#define USED 	1
-
-/* "PROVISIONALLY_USED" - This flag indicates that the the card is being
-   considered as a candidate for inclusion in the construction of an AST 
-   Object. If the Object is constructed succesfully, cards flagged as 
-   "provisionally used" will be changed to be flagged as "definitely used"
-   (using the USED flag). If the Object fails to be constructed
-   succesfully (if some required cards are missing from the FitsChan
-   for instance), then "provisionally used" cards will be returned to the
-   former state which they had prior to the attempt to construct the
-   object. */
-#define PROVISIONALLY_USED 2
-
-/* "NEW" - This flag indicates that the the card has just been added to
-   the FitsChan and may yet proove to be unrequired. For instance if the
-   supplied Object is not of an appropriate flavour to be stored using
-   the requested encoding, all "new" cards which were added before the 
-   inappropriateness was discovered will be removed from the FitsChan.
-   Two different levels of "newness" are available. */
-#define NEW1 4
-#define NEW2 8
-
-/* "PROTECTED" - This flag indicates that the the card should not be
-   removed form the FitsChan when an Object is read using astRead. If
-   this flag is not set, then the card will dehave as if it has been 
-   deleted if it was used in the construction of the returned AST Object. */
-#define PROTECTED 16
-
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"  
-#include "cmpframe.h" 
-#include "cmpmap.h"
-#include "dssmap.h"   
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"    
-#include "fitschan.h" 
-#include "frame.h" 
-#include "frameset.h" 
-#include "grismmap.h"
-#include "mathmap.h"
-#include "matrixmap.h"
-#include "memory.h"   
-#include "object.h"   
-#include "permmap.h"
-#include "pointset.h" 
-#include "shiftmap.h" 
-#include "skyframe.h" 
-#include "timeframe.h" 
-#include "keymap.h" 
-#include "pal.h" 
-#include "slamap.h"
-#include "specframe.h"
-#include "dsbspecframe.h"
-#include "specmap.h"
-#include "sphmap.h"
-#include "unitmap.h"  
-#include "polymap.h"  
-#include "wcsmap.h"   
-#include "winmap.h"
-#include "zoommap.h"
-#include "globals.h"             
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Type Definitions */
-/* ================ */
-/* This structure contains information describing a single FITS header card
-   in a circular list of such structures. */
-
-typedef struct FitsCard {
-   char name[ FITSNAMLEN + 1 ];/* Keyword name (plus terminating null). */
-   int type;                  /* Data type. */
-   void *data;                /* Pointer to the keyword's data value. */
-   char *comment;             /* Pointer to a comment for the keyword. */
-   int flags;                 /* Flags for each card */
-   size_t size;               /* Size of data value */
-   struct FitsCard *next;     /* Pointer to next structure in list. */
-   struct FitsCard *prev;     /* Pointer to previous structure in list. */
-} FitsCard;   
-
-
-/* Structure used to store information derived from the FITS WCS keyword 
-   values in a form more convenient to further processing. Conventions
-   for units, etc, for values in a FitsStore follow FITS-WCS (e.g. angular 
-   values are stored in degrees, equinox is B or J depending on RADECSYS, 
-   etc). */
-typedef struct FitsStore {
-   char ***cname;
-   char ***ctype;
-   char ***ctype_com;
-   char ***cunit;
-   char ***radesys;
-   char ***wcsname;
-   char ***specsys;
-   char ***ssyssrc;
-   double ***pc;
-   double ***cdelt;
-   double ***crpix;
-   double ***crval;
-   double ***equinox;
-   double ***latpole;
-   double ***lonpole;
-   double ***mjdobs;
-   double ***dut1;
-   double ***mjdavg;
-   double ***pv;
-   double ***wcsaxes;
-   double ***obsgeox;
-   double ***obsgeoy;
-   double ***obsgeoz;
-   double ***restfrq;
-   double ***restwav;
-   double ***zsource;
-   double ***velosys;
-   double ***asip;
-   double ***bsip;
-   double ***apsip;
-   double ***bpsip;
-   double ***imagfreq;
-   int naxis;
-   AstTimeScaleType timesys;
-} FitsStore;
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_getfull)( AstChannel *, int * );
-static int (* parent_getskip)( AstChannel *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_write)( AstChannel *, AstObject *, int * );
-static AstObject *(* parent_read)( AstChannel *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Strings to describe each data type. These should be in the order implied
-   by the corresponding macros (eg AST__FLOAT, etc). */
-static const char *type_names[] = {"comment", "integer", "floating point",
-                                    "string", "complex floating point",
-                                    "complex integer", "logical",
-                                    "continuation string", "undef" };
-
-/* Text values used to represent Encoding values externally. */
-static const char *xencod[8] = { NATIVE_STRING, FITSPC_STRING,
-                                 DSS_STRING, FITSWCS_STRING, 
-                                 FITSIRAF_STRING, FITSAIPS_STRING,
-                                 FITSAIPSPP_STRING, FITSCLASS_STRING };
-
-/* Define two variables to hold TimeFrames which will be used for converting 
-   MJD values between time scales. */
-static AstTimeFrame *tdbframe = NULL;      
-static AstTimeFrame *timeframe = NULL;      
-
-/* Max number of characters in a formatted int */ 
-static int int_dig; 
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->Items_Written = 0; \
-   globals->Write_Nest = -1; \
-   globals->Current_Indent = 0; \
-   globals->Ignore_Used = 1; \
-   globals->Mark_New = 0; \
-   globals->CnvType_Text[ 0 ] = 0; \
-   globals->CnvType_Text0[ 0 ] = 0; \
-   globals->CnvType_Text1[ 0 ] = 0; \
-   globals->CreateKeyword_Seq_Nchars = -1; \
-   globals->FormatKey_Buff[ 0 ] = 0; \
-   globals->FitsGetCom_Sval[ 0 ] = 0; \
-   globals->IsSpectral_Ret = NULL; \
-   globals->Match_Fmt[ 0 ] = 0; \
-   globals->Match_Template = NULL; \
-   globals->Match_PA = 0; \
-   globals->Match_PB = 0; \
-   globals->Match_NA = 0; \
-   globals->Match_NB = 0; \
-   globals->Match_Nentry = 0; \
-   globals->WcsCelestial_Type[ 0 ] = 0; \
-   globals->Ignore_Used = 1; \
-   globals->Mark_New = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(FitsChan)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(FitsChan,Class_Init)
-#define class_vtab astGLOBAL(FitsChan,Class_Vtab)
-#define getattrib_buff astGLOBAL(FitsChan,GetAttrib_Buff)
-#define items_written astGLOBAL(FitsChan,Items_Written)
-#define write_nest astGLOBAL(FitsChan,Write_Nest)
-#define current_indent astGLOBAL(FitsChan,Current_Indent)
-#define ignore_used astGLOBAL(FitsChan,Ignore_Used)
-#define mark_new astGLOBAL(FitsChan,Mark_New)
-#define cnvtype_text astGLOBAL(FitsChan,CnvType_Text)
-#define cnvtype_text0 astGLOBAL(FitsChan,CnvType_Text0)
-#define cnvtype_text1 astGLOBAL(FitsChan,CnvType_Text1)
-#define createkeyword_seq_nchars astGLOBAL(FitsChan,CreateKeyword_Seq_Nchars)
-#define formatkey_buff astGLOBAL(FitsChan,FormatKey_Buff)
-#define fitsgetcom_sval astGLOBAL(FitsChan,FitsGetCom_Sval)
-#define isspectral_ret astGLOBAL(FitsChan,IsSpectral_Ret)
-#define match_fmt astGLOBAL(FitsChan,Match_Fmt)
-#define match_template astGLOBAL(FitsChan,Match_Template)
-#define match_pa astGLOBAL(FitsChan,Match_PA)
-#define match_pb astGLOBAL(FitsChan,Match_PB)
-#define match_na astGLOBAL(FitsChan,Match_NA)
-#define match_nb astGLOBAL(FitsChan,Match_NB)
-#define match_nentry  astGLOBAL(FitsChan,Match_Nentry)
-#define wcscelestial_type astGLOBAL(FitsChan,WcsCelestial_Type)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 ); 
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 ); 
-
-static pthread_mutex_t mutex4 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX4 pthread_mutex_lock( &mutex4 ); 
-#define UNLOCK_MUTEX4 pthread_mutex_unlock( &mutex4 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ AST__FITSCHAN_GETATTRIB_BUFF_LEN + 1 ];
-
-/* Buffer for returned text string in CnvType */
-static char cnvtype_text[ AST__FITSCHAN_FITSCARDLEN + 1 ]; 
-
-/* Buffer for real value in CnvType */
-static char cnvtype_text0[ AST__FITSCHAN_FITSCARDLEN + 1 ]; 
-
-/* Buffer for imaginary value in CnvType */
-static char cnvtype_text1[ AST__FITSCHAN_FITSCARDLEN + 1 ]; 
-
-/* Number of output items written since the last "Begin" or "IsA"
-   output item, and level of Object nesting during recursive
-   invocation of the astWrite method. */
-static int items_written = 0;
-static int write_nest = -1;
-
-/* Indentation level for indented comments when writing Objects to a
-   FitsChan. */
-static int current_indent = 0;
-
-/* Ignore_Used: If 2, then cards which have been marked as either "definitely 
-   used" or "provisionally used" (see the USED flag above) will be ignored 
-   when searching the FitsChan, etc (i.e. they will be treated as if they 
-   have been removed from the FitsChan). If 1, then cards which have been 
-   "definitely used" will be skipped over. If zero then no cards will be 
-   skipped over. */
-static int ignore_used = 1;
-
-/* Mark_New: If non-zero, then all cards added to the FitsChan will be
-   marked with both the NEW1 and NEW2 flags (see above). If zero then 
-   new cards will not be marked with either NEW1 or NEW2. */
-static int mark_new = 0;
-
-/* Number of characters used for encoding */
-static int createkeyword_seq_nchars = -1;
-
-/* Buffer for value returned by FormatKey */
-static char formatkey_buff[ 10 ];
-
-/* Buffer for value returned by FitsGetCom */
-static char fitsgetcom_sval[ AST__FITSCHAN_FITSCARDLEN + 1 ];
-
-/* Pointer returned by IsSpectral */
-static const char *isspectral_ret = NULL;
-
-/* Format specifier for reading an integer field in Match */
-static char match_fmt[ 10 ];
-
-/* Pointer to start of template in Match */
-static const char *match_template = NULL;
-
-/* Pointer to first returned field value in Match */
-static int *match_pa = 0;
-
-/* Pointer to last returned field value in Match */
-static int *match_pb = 0;
-
-/* No. of characters read from the test string in Match */
-static int match_na = 0;
-
-/* No. of characters read from the template string in Match */
-static int match_nb = 0;
-
-/* Number of recursive entries into Match */
-static int match_nentry = 0;
-
-/* Buffer for celestial system in WcsCelestial */
-static char wcscelestial_type[ 4 ];
-
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstFitsChanVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-#define LOCK_MUTEX4
-#define UNLOCK_MUTEX4
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstFitsChan *astFitsChanForId_( const char *(*)( void ), 
-                           char *(*)( const char *(*)( void ), int * ), 
-                           void (*)( const char * ), 
-                           void (*)( void (*)( const char * ), const char *, int * ),
-                           const char *, ... );
-AstFitsChan *astFitsChanId_( const char *(* source)( void ),
-                             void (* sink)( const char * ),
-                             const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-
-static void ClearCard( AstFitsChan *, int * );
-static int GetCard( AstFitsChan *, int * );
-static int TestCard( AstFitsChan *, int * );
-static void SetCard( AstFitsChan *, int, int * );
-
-static void ClearEncoding( AstFitsChan *, int * );
-static int GetEncoding( AstFitsChan *, int * );
-static int TestEncoding( AstFitsChan *, int * );
-static void SetEncoding( AstFitsChan *, int, int * );
-
-static void ClearCDMatrix( AstFitsChan *, int * );
-static int GetCDMatrix( AstFitsChan *, int * );
-static int TestCDMatrix( AstFitsChan *, int * );
-static void SetCDMatrix( AstFitsChan *, int, int * );
-
-static void ClearFitsDigits( AstFitsChan *, int * );
-static int GetFitsDigits( AstFitsChan *, int * );
-static int TestFitsDigits( AstFitsChan *, int * );
-static void SetFitsDigits( AstFitsChan *, int, int * );
-
-static void ClearDefB1950( AstFitsChan *, int * );
-static int GetDefB1950( AstFitsChan *, int * );
-static int TestDefB1950( AstFitsChan *, int * );
-static void SetDefB1950( AstFitsChan *, int, int * );
-
-static void ClearCarLin( AstFitsChan *, int * );
-static int GetCarLin( AstFitsChan *, int * );
-static int TestCarLin( AstFitsChan *, int * );
-static void SetCarLin( AstFitsChan *, int, int * );
-
-static void ClearIwc( AstFitsChan *, int * );
-static int GetIwc( AstFitsChan *, int * );
-static int TestIwc( AstFitsChan *, int * );
-static void SetIwc( AstFitsChan *, int, int * );
-
-static void ClearClean( AstFitsChan *, int * );
-static int GetClean( AstFitsChan *, int * );
-static int TestClean( AstFitsChan *, int * );
-static void SetClean( AstFitsChan *, int, int * );
-
-static void ClearWarnings( AstFitsChan *, int * );
-static const char *GetWarnings( AstFitsChan *, int * );
-static int TestWarnings( AstFitsChan *, int * );
-static void SetWarnings( AstFitsChan *, const char *, int * );
-
-static int GetNcard( AstFitsChan *, int * );
-static const char *GetAllWarnings( AstFitsChan *, int * );
-
-static AstFitsChan *SpecTrans( AstFitsChan *, int, const char *, const char *, int * );
-static AstFrameSet *MakeFitsFrameSet( AstFrameSet *, int, int, int * );
-static AstGrismMap *ExtractGrismMap( AstMapping *, int, AstMapping **, int * );
-static AstMapping *AddUnitMaps( AstMapping *, int, int, int * );
-static AstMapping *CelestialAxes( AstFrameSet *, double *, int *, char, FitsStore *, int *, const char *, const char *, int * );
-static AstMapping *GrismSpecWcs( char *, FitsStore *, int, char, AstSpecFrame *, const char *, const char *, int * );
-static AstMapping *LinearWcs( FitsStore *, int, char, const char *, const char *, int * );
-static AstMapping *LogAxis( AstMapping *, int, int, double *, double *, double, int * );
-static AstMapping *LogWcs( FitsStore *, int, char, const char *, const char *, int * );
-static AstMapping *NonLinSpecWcs( AstFitsChan *, char *, FitsStore *, int, char, AstSpecFrame *, const char *, const char *, int * );
-static AstMapping *OtherAxes( AstFrameSet *, double *, int *, char, FitsStore *, double *, int *, const char *, const char *, int * );
-static AstMapping *SIPMapping( FitsStore *, char, int, const char *, const char *, int * );
-static AstMapping *SpectralAxes( AstFrameSet *, double *, int *, char, FitsStore *, double *, int *, const char *, const char *, int * );
-static AstMapping *WcsCelestial( AstFitsChan *, FitsStore *, char, AstFrame **, AstFrame *, double *, double *, AstSkyFrame **, const char *, const char *, int * );
-static AstMapping *WcsIntWorld( AstFitsChan *, FitsStore *, char, int, const char *, const char *, int * );
-static AstMapping *WcsMapFrm( AstFitsChan *, FitsStore *, char, AstFrame **, const char *, const char *, int * );
-static AstMapping *WcsNative( AstFitsChan *, FitsStore *, char, AstWcsMap *, int, int, const char *, const char *, int * );
-static AstMapping *WcsOthers( AstFitsChan *, FitsStore *, char, AstFrame **, AstFrame *, const char *, const char *, int * );
-static AstMapping *WcsSpectral( AstFitsChan *, FitsStore *, char, AstFrame **, AstFrame *, double, double, AstSkyFrame *, const char *, const char *, int * );
-static AstMatrixMap *WcsCDeltMatrix( FitsStore *, char, int, const char *, const char *, int * );
-static AstMatrixMap *WcsPCMatrix( FitsStore *, char, int, const char *, const char *, int * );
-static AstObject *FsetFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static AstObject *Read( AstChannel *, int * );
-static AstSkyFrame *WcsSkyFrame( AstFitsChan *, FitsStore *, char, int, char *, int, int, const char *, const char *, int * );
-static AstTimeScaleType TimeSysToAst( AstFitsChan *, const char *, const char *, const char *, int * );
-static AstWinMap *WcsShift( FitsStore *, char, int, const char *, const char *, int * );
-static FitsCard *GetLink( FitsCard *, int, const char *, const char *, int * );
-static FitsStore *FitsToStore( AstFitsChan *, int, const char *, const char *, int * );
-static FitsStore *FreeStore( FitsStore *, int * );
-static FitsStore *FsetToStore( AstFitsChan *, AstFrameSet *, int, double *, const char *, const char *, int * );
-static char *CardComm( AstFitsChan *, int * );
-static char *CardName( AstFitsChan *, int * );
-static char *FormatKey( const char *, int, int, char, int * );
-static char *GetItemC( char ****, int, char, char *, const char *method, const char *class, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static char *UnPreQuote( const char *, int * );
-static char GetMaxS( double ****item, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetFitsSor( const char *, int * );
-static const char *IsSpectral( const char *, char[5], char[5], int * );
-static double **OrthVectorSet( int, int, double **, int * );
-static double *FitLine( AstMapping *, double *, double *, double *, double, double *, int * );
-static double *OrthVector( int, int, double **, int * );
-static double *ReadCrval( AstFitsChan *, AstFrame *, char, const char *, const char *, int * );
-static double ChooseEpoch( FitsStore *, char, const char *, const char *, int * );
-static double DateObs( const char *, int * );
-static double GetItem( double ****, int, int, char, char *, const char *method, const char *class, int * );
-static double NearestPix( AstMapping *, double, int, int * );
-static double TDBConv( double, int, int, const char *, const char *, int * );
-static int *CardFlags( AstFitsChan *, int * );
-static int AIPSFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int AIPSPPFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int AddEncodingFrame( AstFitsChan *, AstFrameSet *, int, const char *, const char *, int * );
-static int AddVersion( AstFitsChan *, AstFrameSet *, int, int, FitsStore *, double *, char, const char *, const char *, int * );
-static int CLASSFromStore( AstFitsChan *, FitsStore *, AstFrameSet *, double *, const char *, const char *, int * );
-static int CardType( AstFitsChan *, int * );
-static int CheckFitsName( const char *, const char *, const char *, int * );
-static int ChrLen( const char *, int * );
-static int CnvType( int, void *, size_t, int, int, void *, const char *, const char *, const char *, int * );
-static int CnvValue( AstFitsChan *, int , int, void *, const char *, int * );
-static int FindFits( AstFitsChan *, const char *, char[ AST__FITSCHAN_FITSCARDLEN + 1 ], int, int * );
-static int ComBlock( AstFitsChan *, int, const char *, const char *, int * );
-static int CountFields( const char *, char, const char *, const char *, int * );
-static int DSSFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int EncodeFloat( char *, int, int, int, double, int * );
-static int EncodeValue( AstFitsChan *, char *, int, int, const char *, int * );
-static int FindBasisVectors( AstMapping *, int, int, double *, AstPointSet *, AstPointSet *, int * );
-static int FindKeyCard( AstFitsChan *, const char *, const char *, const char *, int * );
-static int FindLonLatSpecAxes( FitsStore *, char, int *, int *, int *, const char *, const char *, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int FitOK( int, double *, double *, double, int * );
-static int FitsEof( AstFitsChan *, int * );
-static int FitsSof( AstFitsChan *, int * );
-static int FitsFromStore( AstFitsChan *, FitsStore *, int, double *, AstFrameSet *, const char *, const char *, int * );
-static int FitsGetCom( AstFitsChan *, const char *, char **, int * );
-static int FullForm( const char *, const char *, int, int * );
-static int GetFiducialWCS( AstWcsMap *, AstMapping *, int, int, double *, double *, int * );
-static int GetFitsCF( AstFitsChan *, const char *, double *, int * );
-static int GetFitsCI( AstFitsChan *, const char *, int *, int * );
-static int GetFitsCN( AstFitsChan *, const char *, char **, int * );
-static int GetFitsF( AstFitsChan *, const char *, double *, int * );
-static int GetFitsI( AstFitsChan *, const char *, int *, int * );
-static int GetFitsL( AstFitsChan *, const char *, int *, int * );
-static int GetFitsS( AstFitsChan *, const char *, char **, int * );
-static int GetFull( AstChannel *, int * );
-static int GetMaxI( double ****item, char, int * );
-static int GetMaxJM( double ****item, char, int * );
-static int GetSkip( AstChannel *, int * );
-static int GetValue( AstFitsChan *, const char *, int, void *, int, int, const char *, const char *, int * );
-static int GetValue2( AstFitsChan *, AstFitsChan *, const char *, int, void *, int, const char *, const char *, int * );
-static int GoodWarns( const char *, int * );
-static int HasAIPSSpecAxis( AstFitsChan *, const char *, const char *, int * );
-static int IRAFFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int IsAIPSSpectral( const char *, char **, char **, int * );
-static int IsMapLinear( AstMapping *, const double [], const double [], int, int * );
-static int KeyFields( AstFitsChan *, const char *, int, int *, int *, int * );
-static int LooksLikeClass( AstFitsChan *, const char *, const char *, int * );
-static int MakeBasisVectors( AstMapping *, int, int, double *, AstPointSet *, AstPointSet *, int * );
-static int MakeIntWorld( AstMapping *, AstFrame *, int *, char, FitsStore *, double *, const char *, const char *, int * );
-static int Match( const char *, const char *, int, int *, int *, const char *, const char *, int * );
-static int MatchChar( char, char, const char *, const char *, const char *, int * );
-static int MatchFront( const char *, const char *, char *, int *, int *, int *, const char *, const char *, const char *, int * );
-static int MoveCard( AstFitsChan *, int, const char *, const char *, int * );
-static int PCFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int HasCard( AstFitsChan *, const char *, const char *, const char *, int * );
-static int SearchCard( AstFitsChan *, const char *, const char *, const char *, int * );
-static int SetFits( AstFitsChan *, const char *, void *, int, const char *, int, int * );
-static int Similar( const char *, const char *, int * );
-static int SkySys( AstSkyFrame *, int, FitsStore *, int, int, char c, const char *, const char *, int * );
-static int SplitMap( AstMapping *, int, int, int, AstMapping **, AstWcsMap **, AstMapping **, int * );
-static int SplitMap2( AstMapping *, int, AstMapping **, AstWcsMap **, AstMapping **, int * );
-static int SplitMat( int , double *, double *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestFits( AstFitsChan *, const char *, int *, int * );
-static int Use( AstFitsChan *, int, int, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static int WcsFromStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static int WcsNatPole( AstFitsChan *, AstWcsMap *, double, double, double, double *, double *, double *, int * );
-static int Write( AstChannel *, AstObject *, int * );
-static int Split( const char *, char **, char **, char **, const char *, const char *, int * );
-static void *CardData( AstFitsChan *, size_t *, int * );
-static void AddFrame( AstFitsChan *, AstFrameSet *, int, int, FitsStore *, char, const char *, const char *, int * );  
-static void CheckZero( char *, double, int, int * );
-static void ClassTrans( AstFitsChan *, AstFitsChan *, int, int, const char *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CreateKeyword( AstFitsChan *, const char *, char [ FITSNAMLEN + 1 ], int * );
-static void DSBSetUp( AstFitsChan *, FitsStore *, AstDSBSpecFrame *, char, double, const char *, const char *, int * );
-static void DSSToStore( AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static void DelFits( AstFitsChan *, int * );
-static void PurgeWCS( AstFitsChan *, int * );
-static void Delete( AstObject *, int * );
-static void DeleteCard( AstFitsChan *, const char *, const char *, int * );
-static void DistortMaps( AstFitsChan *, FitsStore *, char, int , AstMapping **, AstMapping **, AstMapping **, AstMapping **, const char *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Empty( AstFitsChan *, int * );
-static void FindWcs( AstFitsChan *, int, int, int, const char *, const char *, int * );
-static void FixNew( AstFitsChan *, int, int, const char *, const char *, int * );
-static void FixUsed( AstFitsChan *, int, int, int, const char *, const char *, int * );
-static void FormatCard( AstFitsChan *, char *, const char *, int * );
-static void FreeItem( double ****, int * );
-static void FreeItemC( char ****, int * );
-static void Geod( double[3], double *, double *, double *, int * );
-static void GetFiducialNSC( AstWcsMap *, double *, double *, int * );
-static void GetFiducialPPC( AstWcsMap *, double *, double *, int * );
-static void GetNextData( AstChannel *, int, char **, char **, int * );
-static void InsCard( AstFitsChan *, int, const char *, int, void *, const char *, const char *, const char *, int * );
-static void MakeBanner( const char *, const char *, const char *, char [ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ], int * );
-static void MakeIndentedComment( int, char, const char *, const char *, char [ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1], int * );
-static void MakeIntoComment( AstFitsChan *, const char *, const char *, int * );
-static void MarkCard( AstFitsChan *, int * );
-static void NewCard( AstFitsChan *, const char *, int, const void *, const char *, int, int * );
-static void PreQuote( const char *, char [ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ], int * );
-static void PutCards( AstFitsChan *, const char *, int * );
-static void PutFits( AstFitsChan *, const char [ AST__FITSCHAN_FITSCARDLEN + 1 ], int, int * );
-static void ReadFromSource( AstFitsChan *, int * );
-static void RetainFits( AstFitsChan *, int * );
-static void RoundFString( char *, int, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetFitsCF( AstFitsChan *, const char *, double *, const char *, int, int * );
-static void SetFitsCI( AstFitsChan *, const char *, int *, const char *, int, int * );
-static void SetFitsCN( AstFitsChan *, const char *, const char *, const char *, int, int * );
-static void SetFitsCom( AstFitsChan *, const char *, const char *, int, int * );
-static void SetFitsF( AstFitsChan *, const char *, double, const char *, int, int * );
-static void SetFitsI( AstFitsChan *, const char *, int, const char *, int, int * );
-static void SetFitsL( AstFitsChan *, const char *, int, const char *, int, int * );
-static void SetFitsS( AstFitsChan *, const char *, const char *, const char *, int, int * );
-static void SetFitsU( AstFitsChan *, const char *, const char *, int, int * );
-static void SetFitsCM( AstFitsChan *, const char *, int, int * );
-static void SetItem( double ****, int, int, char, double, int * );
-static void SetItemC( char ****, int, char, const char *, int * );
-static void SetValue( AstFitsChan *, const char *, void *, int, const char *, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void SkyPole( AstWcsMap *, AstMapping *, int, int, int *, char, FitsStore *, const char *, const char *, int * );
-static void Warn( AstFitsChan *, const char *, const char *, const char *, const char *, int * );
-static void WcsFcRead( AstFitsChan *, AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static void WcsToStore( AstFitsChan *, AstFitsChan *, FitsStore *, const char *, const char *, int * );
-static void WorldAxes( AstMapping *, double *, int *, int * );
-static void WriteBegin( AstChannel *, const char *, const char *, int * );
-static void WriteDouble( AstChannel *, const char *, int, int, double, const char *, int * );
-static void WriteEnd( AstChannel *, const char *, int * );
-static void WriteInt( AstChannel *, const char *, int, int, int, const char *, int * );
-static void WriteIsA( AstChannel *, const char *, const char *, int * );
-static void WriteObject( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-static void WriteString( AstChannel *, const char *, int, int, const char *, const char *, int * );
-static void WriteToSink( AstFitsChan *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-static int AddEncodingFrame( AstFitsChan *this, AstFrameSet *fs, int encoding, 
-                             const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     AddEncodingFrame
-
-*  Purpose:
-*     Add a Frame which conforms to the requirements of the specified encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int AddEncodingFrame( AstFitsChan *this, AstFrameSet *fs, int encoding, 
-*                           const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function attempts to create a Frame based on the current Frame
-*     of the supplied FrameSet, which conforms to the requirements of the
-*     specified Encoding. If created, this Frame is added into the
-*     FrameSet as the new current Frame, and the index of the original current
-*     Frame is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     fs
-*        Pointer to the FrameSet.
-*     encoding
-*        The encoding in use.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the original current Frame in the FrameSet. A value of
-*     AST__NOFRAME is returned if no new Frame is added to the FrameSet,
-*     or if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *cmpfrm;   /* Pointer to spectral cube frame */
-   AstFrame *cfrm;        /* Pointer to original current Frame */
-   AstFrame *newfrm;      /* Frame describing coord system to be used */
-   AstFrame *pfrm;        /* Pointer to primary Frame containing axis */
-   AstFrameSet *fsconv;   /* FrameSet converting what we have to what we want */
-   AstMapping *map;       /* Mapping from what we have to what we want */
-   AstSkyFrame *skyfrm;   /* Pointer to SkyFrame */
-   AstSpecFrame *specfrm; /* Pointer to SpecFrame */
-   AstSystemType sys;     /* Frame coordinate system */
-   int i;                 /* Axis index */
-   int naxc;              /* No. of axes in original current Frame */
-   int paxis;             /* Axis index in primary frame */
-   int result;            /* Returned value */
-
-/* Initialise */
-   result = AST__NOFRAME;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the current Frame and note how many axes it has. */
-   cfrm = astGetFrame( fs, AST__CURRENT );
-   naxc = astGetNaxes( cfrm );   
-
-/* FITS-CLASS */
-/* ========== */
-   if( encoding == FITSCLASS_ENCODING ) {
-
-/* Try to locate a SpecFrame and a SkyFrame in the current Frame. */
-      specfrm = NULL;
-      skyfrm = NULL;
-      for( i = 0; i < naxc; i++ ) {
-         astPrimaryFrame( cfrm, i, &pfrm, &paxis );
-         if( astIsASpecFrame( pfrm ) ) {
-            if( !specfrm ) specfrm = astCopy( pfrm );
-         } else if( astIsASkyFrame( pfrm ) ) {
-            if( !skyfrm ) skyfrm = astCopy( pfrm );
-         } 
-         pfrm = astAnnul( pfrm );
-      }
-
-/* Cannot do anything if either is missing. */
-      if( specfrm && skyfrm ) {
-
-/* If the spectral axis is not frequency, set it to frequency. Also set 
-   spectral units of "Hz". */
-         sys = astGetSystem( specfrm );
-         if( sys != AST__FREQ ) {
-            astSetSystem( specfrm, AST__FREQ );
-            sys = AST__FREQ;
-         }
-
-/* Ensure the standard of rest is Source and units are "Hz". */       
-         astSetUnit( specfrm, 0, "Hz" );
-         astSetStdOfRest( specfrm, AST__SCSOR );
- 
-/* The celestial axes must be either FK4, FK5 or galactic. */
-         sys = astGetSystem( skyfrm );
-         if( sys != AST__FK4 && sys != AST__FK5 && sys != AST__GALACTIC ) {
-            astSetSystem( skyfrm, AST__FK5 );
-            sys = AST__FK5;
-         }
-
-/* FK5 systems must be J2000, and FK4 must be B1950. */
-         if( sys == AST__FK5 ) {
-            astSetC( skyfrm, "Equinox", "J2000.0" );
-         } else if( sys == AST__FK4 ) {
-            astSetC( skyfrm, "Equinox", "B1950.0" );
-         }
-
-/* Combine the spectral and celestial Frames into a single CmpFrame with
-   the spectral axis being the first axis. */
-         cmpfrm = astCmpFrame( specfrm, skyfrm, "", status );
-
-/* Attempt to obtain the current Frame of the supplied FrameSet to this
-   new Frame. */
-         fsconv = astConvert( cfrm, cmpfrm, "" );
-         if( fsconv ) {
-
-/* Get the Mapping and current Frame from the rconversion FrameSet. */
-            newfrm = astGetFrame( fsconv, AST__CURRENT );
-            map = astGetMapping( fsconv, AST__BASE, AST__CURRENT );
-
-/* Save the original current Frame index. */
-            result = astGetCurrent( fs );     
-
-/* Add the new Frame into the supplied FrameSet using the above Mapping
-   to connect it to the original current Frame. The new Frame becomes the
-   current Frame. */
-            astAddFrame( fs, AST__CURRENT, map, newfrm );
-
-/* Free resources */
-            map = astAnnul( map );
-            newfrm = astAnnul( newfrm );
-            fsconv = astAnnul( fsconv );
-         }
-
-/* Free resources */
-         cmpfrm = astAnnul( cmpfrm );
-
-      }
-
-/* Release resources. */
-      if( specfrm ) specfrm = astAnnul( specfrm );
-      if( skyfrm ) skyfrm = astAnnul( skyfrm );
-
-   }
-
-/* Free reources. */
-   cfrm = astAnnul( cfrm );
-
-/* Return the result */
-   return result;
-}
-
-static void AddFrame( AstFitsChan *this, AstFrameSet *fset, int pixel, 
-                      int npix, FitsStore *store, char s, const char *method, 
-                      const char *class, int *status ){
-/*
-*  Name:
-*     AddFrame
-
-*  Purpose:
-*     Create a Frame describing a set of axes with a given co-ordinate 
-*     version, and add it to the supplied FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void AddFrame( AstFitsChan *this, AstFrameSet *fset, int pixel, 
-*                    int npix, FitsStore *store, char s, const char *method, 
-*                    const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A Frame is created describing axis with a specific co-ordinate
-*     version character, reading information from the supplied FitsStore. 
-*     A suitable Mapping is created to connect the new Frame to the pixel 
-*     (GRID) Frame in the supplied FrameSet, and the Frame is added into 
-*     the FrameSet using this Mapping.
-
-*  Parameters:
-*     this
-*        The FitsChan from which the keywords were read. Warning messages
-*        are added to this FitsChan if the celestial co-ordinate system is 
-*        not recognized. 
-*     fset
-*        Pointer to the FrameSet to be extended.
-*     pixel
-*        The index of the pixel (GRID) Frame within fset.
-*     npix
-*        The number of pixel axes.
-*     store
-*        The FitsStore containing the required information extracted from 
-*        the FitsChan.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *frame;            /* Requested Frame */
-   AstMapping *mapping;        /* Mapping from pixel to requested Frame */
-   AstMapping *tmap;           /* Temporary Mapping pointer */
-   AstPermMap *pmap;           /* PermMap pointer to add or remove axes */
-   double con;                 /* Value to be assigned to missing axes */
-   int *inperm;                /* Pointer to input axis permutation array */
-   int *outperm;               /* Pointer to output axis permutation array */
-   int i;                      /* Axis index */
-   int nwcs;                   /* Number of wcs axes */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Get a Mapping between pixel coordinates and physical coordinates, using
-   the requested axis descriptions. Also returns a Frame describing the
-   physical coordinate system. */
-   mapping = WcsMapFrm( this, store, s, &frame, method, class, status );
-
-/* Add the Frame into the FrameSet, and annul the mapping and frame. If
-   the new Frame has more axes than the pixel Frame, use a PermMap which
-   assigns constant value 1.0 to the extra axes. If the new Frame has less 
-   axes than the pixel Frame, use a PermMap which throws away the extra
-   axes. */
-   if( mapping != NULL ) {
-      nwcs = astGetNin( mapping );
-      if( nwcs != npix ) {
-         inperm = astMalloc( sizeof(int)*(size_t)npix );
-         outperm = astMalloc( sizeof(int)*(size_t)nwcs );
-         if( astOK ) {
-            for( i = 0; i < npix; i++ ) {
-               inperm[ i ] = ( i < nwcs ) ? i : -1;
-            }
-            for( i = 0; i < nwcs; i++ ) {
-               outperm[ i ] = ( i < npix ) ? i : -1;
-            }
-            con = 1.0;
-            pmap = astPermMap( npix, inperm, nwcs, outperm, &con, "", status );
-            tmap = (AstMapping *) astCmpMap( pmap, mapping, 1, "", status );
-            pmap = astAnnul( pmap );
-            (void) astAnnul( mapping );
-            mapping = tmap;
-         }
-         inperm = astFree( inperm );
-         outperm = astFree( outperm );
-      }
-
-      astAddFrame( fset, pixel, mapping, frame );
-
-/* Annul temporary resources. */
-      frame = astAnnul( frame );
-      mapping = astAnnul( mapping );
-   }
-}
-
-static int AddVersion( AstFitsChan *this, AstFrameSet *fs, int ipix, int iwcs, 
-                       FitsStore *store, double *dim, char s, 
-                       const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     AddVersion
-
-*  Purpose:
-*     Add values to a FitsStore describing a specified Frame in a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int AddVersion( AstFitsChan *this, AstFrameSet *fs, int ipix, int iwcs, 
-*                     FitsStore *store, double *dim, char s, 
-*                     const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Values are added to the supplied FitsStore describing the specified
-*     WCS Frame, and its relationship to the specified pixel Frame. These 
-*     values are based on the standard FITS-WCS conventions.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     fs
-*        Pointer to the FrameSet.
-*     ipix
-*        The index of the pixel (GRID) Frame within fset.
-*     iwcs
-*        The index of the Frame within fset to use as the WCS co-ordinate 
-*        Frame.
-*     store
-*        The FitsStore in which to store the information extracted from 
-*        the FrameSet.
-*     dim 
-*        Pointer to an array of pixel axis dimensions. Individual elements 
-*        will be AST__BAD if dimensions are not known. The number of
-*        elements should equal the number of axes in the base Frame of the
-*        supplied FrameSet. 
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Retuned Value:
-*     A value of 1 is returned if the WCS Frame was succesfully added to
-*     the FitsStore. A value of zero is returned otherwise.
-
-*/
-
-/* Local Variables: */
-
-   AstFrame *wcsfrm;        /* WCS Frame */
-   AstFrameSet *fset;       /* Temporary FrameSet */
-   AstMapping *iwcmap;      /* Mapping from WCS to IWC Frame */
-   AstMapping *pixiwcmap;   /* Mapping from pixel to IWC Frame */
-   AstMapping *mapping;     /* Mapping from pixel to WCS Frame */
-   AstMapping *tmap2;       /* Temporary Mapping */
-   AstMapping *tmap;        /* Temporary Mapping */
-   const char *old_skyrefis;/* Old value of SkyRefIs attribute */
-   double *crvals;          /* Pointer to array holding default CRVAL values */
-   double cdelt2;           /* Sum of squared PC values */
-   double cdelt;            /* CDELT value for axis */
-   double crpix;            /* CRPIX value for axis */
-   double crval;            /* CRVAL value for axis */
-   double pc;               /* Element of the PC array */
-   int *axis_done;          /* Flags indicating which axes have been done */
-   int *wperm;              /* FITS axis for each Mapping output (Frame axis) */
-   int fits_i;              /* FITS WCS axis index */
-   int fits_j;              /* FITS pixel axis index */
-   int has_skyrefis;        /* Does the FrameSet have a SkyRefIs attribute? */
-   int iax;                 /* Frame axis index */
-   int nwcs;                /* No. of axes in WCS frame */
-   int oldrep;              /* Old error reporting flag */
-   int ret;                 /* Returned value */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* We need to ensure that any SkyFrame represents absolute coords rather 
-   than offset coords. Since the current Frame may not contain a
-   SkyFrame, we temporarily switch off error reporting. */
-   oldrep = astReporting( 0 );
-
-/* If the SkyRefIs attribute is set, remember the original value so that 
-   it can be re-instated later. */
-   has_skyrefis = 1;
-   if( astTest( fs, "SkyRefIs" ) ) {
-      old_skyrefis = astGetC( fs, "SkyRefIs" );
-
-/* Take a copy of the string value because the pointer returned by
-   astGetC points to static memory and may be changed by future calls 
-   to astGetC. */
-      if( old_skyrefis ) {
-         old_skyrefis = astStore( NULL, old_skyrefis, 
-                                  strlen( old_skyrefis ) + 1 );
-
-/* Set the new value. The Mapping inside the FrameSet is adjusted to take 
-   account of the changed Frame properties. */
-         astSet( fs, "SkyRefIs=Ignored", status ); 
-      }
-
-   } else {
-      old_skyrefis = NULL;
-      if( !astOK ) has_skyrefis = 0;
-   }
-
-/* Cancel any error and switch error reporting back on again. */
-   astClearStatus;
-   astReporting( oldrep );
-
-/* Construct a new FrameSet holding the pixel and WCS Frames from the 
-   supplied FrameSet, but in which the current Frame is a copy of the 
-   supplied WCS Frame, but optionally extended to include any extra axes 
-   needed to conform to the FITS model. For instance, if the WCS Frame 
-   consists of a single 1D SpecFrame with a defined celestial reference 
-   position (SpecFrame attributes RefRA and RefDec), then FITS-WCS paper 
-   III requires there to be a pair of celestial axes in the WCS Frame in 
-   which the celestial reference point for the spectral axis is defined. */
-   fset = MakeFitsFrameSet( fs, ipix, iwcs, status );
-
-/* Abort if the FrameSet could not be produced. */
-   if( !fset ) return ret;
-
-/* Get the Mapping from base to current Frame and check its inverse is
-   defined. Return if not. */
-   mapping = astGetMapping( fset, AST__BASE, AST__CURRENT );
-   if( !astGetTranInverse( mapping ) ) {
-      mapping = astAnnul( mapping );
-      fset = astAnnul( fset );
-      return ret;
-   }
-
-/* We now need to choose the "FITS WCS axis" (i.e. the number that is included 
-   in FITS keywords such as CRVAL2) for each axis of the output Frame. For 
-   each WCS axis, we use the index of the pixel axis which is most closely 
-   aligned with it. Allocate memory to store these indices, and then fill
-   the memory. */
-   nwcs= astGetNout( mapping );
-   wperm = astMalloc( sizeof(int)*(size_t) nwcs );
-   WorldAxes( mapping, dim, wperm, status );
-
-/* Allocate an array of flags, one for each axis, which indicate if a
-   description of the corresponding axis has yet been stored in the
-   FitsStore. Initialise them to indicate that no axes have yet been
-   described. */ 
-   axis_done = astMalloc( sizeof(int)*(size_t) nwcs );
-   if( astOK ) for( iax = 0; iax < nwcs; iax++ ) axis_done[ iax ] = 0;
-
-/* Get the original reference point from the FitsChan and convert it into
-   the require WCS Frame. This is used as the default reference point (some
-   algorithms may choose to ignore this default reference point ). */
-   wcsfrm = astGetFrame( fset, AST__CURRENT );
-   crvals = ReadCrval( this, wcsfrm, s, method, class, status );
-
-/* For each class of FITS conventions (celestial, spectral, others), 
-   identify any corresponding axes within the WCS Frame and add
-   descriptions of them to the FitsStore. These descriptions are in terms
-   of the FITS keywords defined in the corresponding FITS-WCS paper. Note,
-   the keywords which descirbed the pixel->IWC mapping (CRPIX, CD, PC,
-   CDELT) are not stored by these functions, instead each function
-   returns a Mapping from WCS to IWC coords (these Mappings 
-   pass on axes of the wrong class without change). These Mappings are 
-   combined in series to get the final WCS->IWC Mapping. First do 
-   celestial axes. */
-   iwcmap = CelestialAxes( fset, dim, wperm, s, store, axis_done, method, class, status );
-
-/* Now look for spectral axes, and update the iwcmap. */
-   tmap = SpectralAxes( fset, dim, wperm, s, store, crvals, axis_done, method, 
-                        class, status );
-   tmap2 = (AstMapping *) astCmpMap( iwcmap, tmap, 1, "", status );
-   tmap = astAnnul( tmap );
-   (void) astAnnul( iwcmap );
-   iwcmap = tmap2;
-
-/* Finally add descriptions of any axes not yet described (they are
-   assumed to be linear), and update the iwcmap. */
-   tmap = OtherAxes( fset, dim, wperm, s, store, crvals, axis_done, method, class, status );
-   tmap2 = (AstMapping *) astCmpMap( iwcmap, tmap, 1, "", status );
-   tmap = astAnnul( tmap );
-   (void) astAnnul( iwcmap );
-   iwcmap = tmap2;
-
-/* The "iwcmap" Mapping found above converts from the WCS Frame to the IWC 
-   Frame. Combine the pixel->WCS Mapping with this WCS->IWC Mapping to
-   get the pixel->IWC Mapping. */
-   pixiwcmap = (AstMapping *) astCmpMap( mapping, iwcmap, 1, "", status );
-   mapping = astAnnul( mapping );
-   iwcmap = astAnnul( iwcmap );
-
-/* Now attempt to store values for the keywords describing the pixel->IWC 
-   Mapping (CRPIX, CD, PC, CDELT). This tests that the iwcmap is linear.
-   Zero is returned if the test fails. */
-   ret = MakeIntWorld( pixiwcmap, wcsfrm, wperm, s, store, dim, method, class, status );
-
-/* If succesfull... */
-   if( ret ) {
-
-/* Store the Domain name as the WCSNAME keyword (if set). */
-      if( astTestDomain( wcsfrm ) ) { 
-         SetItemC( &(store->wcsname), 0, s, (char *) astGetDomain( wcsfrm ), status );
-      }
-
-/* Store the UT1-UTC correction, if set, converting from seconds to days
-   (as used by JACH). */
-      if( astTestDut1( wcsfrm ) && s == ' ' ) {
-         SetItem( &(store->dut1), 0, 0, ' ', astGetDut1( wcsfrm )/SPD, status );
-      }
-
-/* Set CRVAL values which are very small compared to the pixel size to
-   zero. */
-      for( iax = 0; iax < nwcs; iax++ ) {
-         fits_i = wperm[ iax ];
-         crval = GetItem( &(store->crval), fits_i, 0, s, NULL, method, class, status );
-         if( crval != AST__BAD ) {   
-   
-            cdelt2 = 0.0;
-            for( fits_j = 0; fits_j < nwcs; fits_j++ ){
-               pc = GetItem( &(store->pc), fits_i, fits_j, s, NULL, method, class, status );
-               if( pc == AST__BAD ) pc = ( fits_i == fits_j ) ? 1.0 : 0.0;
-               cdelt2 += pc*pc;
-            }
-   
-            cdelt = GetItem( &(store->cdelt), fits_i, 0, s, NULL, method, class, status );
-            if( cdelt == AST__BAD ) cdelt = 1.0;
-            cdelt2 *= ( cdelt*cdelt );
-      
-            if( fabs( crval ) < sqrt( DBL_EPSILON*cdelt2 ) ) {
-               SetItem( &(store->crval), fits_i, 0, s, 0.0, status );
-            }   
-         }
-      }
-
-/* Round CRPIX values to the nearest millionth of a pixel. */
-      for( iax = 0; iax < nwcs; iax++ ) {
-         crpix = GetItem( &(store->crpix), 0, iax, s, NULL, method, class, status );
-         if( crpix != AST__BAD ) {   
-            SetItem( &(store->crpix), 0, iax, s, 
-                     floor( crpix*1.0E6 + 0.5 )*1.0E-6, status );
-         }
-      }
-   }
-
-/* If required, re-instate the original value of the SkyRefIs attribute. */
-   if( has_skyrefis ) {
-      if( old_skyrefis ) {
-         astSetC( fs, "SkyRefIs", old_skyrefis ); 
-         old_skyrefis = astFree( (void *) old_skyrefis );
-      } else {
-         astClear( fs, "SkyRefIs" ); 
-      }
-   }
-
-/* Free remaining resources. */
-   if( crvals ) crvals = astFree( crvals );
-   wcsfrm = astAnnul( wcsfrm );
-   pixiwcmap = astAnnul( pixiwcmap );
-   axis_done = astFree( axis_done );
-   wperm = astFree( wperm );
-   fset = astAnnul( fset );
-
-/* If an error has occurred, return zero */
-   return astOK ? ret : 0;
-
-}
-
-static AstMapping *AddUnitMaps( AstMapping *map, int iax, int nax, int *status ) {
-/*
-*  Name:
-*     AddUnitMaps
-
-*  Purpose:
-*     Embed a Mapping within a pair of parallel UnitMaps.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *AddUnitMaps( AstMapping *map, int iax, int nax, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns a Mapping which consists of the supplied Mapping 
-*     in parallel with a pair of UnitMaps so that he first axis of the
-*     supplied Mapping is at a specified axis number in the returned Mapping.
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping. The Mapping must have equal numbers of
-*        input and output coordinates.
-*     iax
-*        The index for the first input of "map" within the returned
-*        Mapping.
-*     nax
-*        The number of axes for the returned Mapping.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A Mapping which has "nax" axes, and in which the "iax" axis
-*     corresponds to the first axis of "map". Axes lower than "iax" are
-*     transformed using a UnitMap, and axes higher than the last axis of 
-*     "map" are transformed using a UnitMap.
-
-*/
-
-/* Local Variables: */
-   AstMapping *ret;      /* Returned Mapping */
-   AstMapping *tmap0;    /* Temporary Mapping */
-   AstMapping *tmap1;    /* Temporary Mapping */
-   AstMapping *tmap2;    /* Temporary Mapping */
-   int nmap;             /* Number of supplied Mapping inputs */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Initialise the returned Mapping to be a clone of the supplied Mapping. */
-   ret = astClone( map );
-
-/* Note the number of inputs of the supplied Mapping (assumed to be equal 
-   to the number of outputs). */
-   nmap = astGetNin( map );
-
-/* If necessary produce a parallel CmpMap which combines the Mapping with a 
-   UnitMap representing the axes lower than "iax". */
-   if( iax > 0 ) {
-      tmap0 = (AstMapping *) astUnitMap( iax, "", status );
-      tmap1 = (AstMapping *) astCmpMap( tmap0, ret, 0, "", status );
-      ret = astAnnul( ret );
-      tmap0 = astAnnul( tmap0 );
-      ret = tmap1;
-   }
-
-/* If necessary produce a parallel CmpMap which combines the Mapping with a 
-   UnitMap representing the axes higher than "iax+nmap". */
-   if( iax + nmap < nax ) {
-      tmap1 = (AstMapping *) astUnitMap( nax - iax - nmap, "", status );
-      tmap2 = (AstMapping *) astCmpMap( ret, tmap1, 0, "", status );
-      ret = astAnnul( ret );
-      tmap1 = astAnnul( tmap1 );
-      ret = tmap2;
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static int AIPSFromStore( AstFitsChan *this, FitsStore *store, 
-                          const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     AIPSFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using FITS-AIPS encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int AIPSFromStore( AstFitsChan *this, FitsStore *store, 
-*                        const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using FITS-AIPS encoding.
-*
-*     AIPS encoding is like FITS-WCS encoding but with the following
-*     restrictions:
-*
-*     1) The celestial projection must not have any projection parameters
-*     which are not set to their default values. The one exception to this 
-*     is that SIN projections are acceptable if the associated projection 
-*     parameter PV<axlat>_1 is zero and PV<axlat>_2 = cot( reference point 
-*     latitude). This is encoded using the string "-NCP". The SFL projection 
-*     is encoded using the string "-GLS". Note, the original AIPS WCS
-*     system only recognised a small subset of the currently available
-*     projections, but some more recent AIPS-like software recognizes some 
-*     of the new projections included in the FITS-WCS encoding. The AIT, 
-*     GLS and MER can only be written if the CRVAL keywords are zero for 
-*     both longitude and latitude axes.
-*
-*     2) The celestial axes must be RA/DEC, galactic or ecliptic.   
-*
-*     3) LONPOLE and LATPOLE must take their default values.
-*
-*     4) Only primary axis descriptions are written out.
-*
-*     5) EPOCH is written instead of EQUINOX & RADECSYS, and uses the 
-*        IAU 1984 rule ( EPOCH < 1984.0 is treated as a Besselian epoch 
-*        and implies RADECSYS=FK4,  EPOCH >= 1984.0 is treated as a 
-*        Julian epoch and implies RADECSYS=FK5). The RADECSYS & EQUINOX
-*        values in the FitsStore must be consistent with this rule.
-*
-*     6) Any rotation produced by the PC matrix must be restricted to
-*        the celestial plane, and must involve no shear. A CROTA keyword
-*        with associated CDELT values are produced instead of the PC
-*        matrix.
-*     
-*     7) ICRS is not supported.
-*
-*     8) Spectral axes can be created only for FITS-WCS CTYPE values of "FREQ"
-*        "VRAD" and "VOPT-F2W" and with standards of rest of LSRK, LSRD, 
-*        BARYCENT and GEOCENTR.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   char *comm;         /* Pointer to comment string */
-   const char *cval;   /* Pointer to string keyword value */
-   const char *specunit;/* Pointer to corrected spectral units string */
-   char combuf[80];    /* Buffer for FITS card comment */
-   char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
-   char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
-   char s;             /* Co-ordinate version character */
-   char sign[2];       /* Fraction's sign character */
-   char spectype[MXCTYPELEN];/* Spectral axis CTYPE */
-   double *cdelt;      /* Pointer to CDELT array */
-   double cdl;         /* CDELT term */
-   double cdlat_lon;   /* Off-diagonal CD element */
-   double cdlon_lat;   /* Off-diagonal CD element */
-   double coscro;      /* Cos( CROTA ) */
-   double crota;       /* CROTA value to use */
-   double epoch;       /* Epoch of reference equinox */
-   double fd;          /* Fraction of a day */
-   double latval;      /* CRVAL for latitude axis */
-   double lonval;      /* CRVAL for longitude axis */
-   double mjd99;       /* MJD at start of 1999 */
-   double p1, p2;      /* Projection parameters */
-   double rho_a;       /* First estimate of CROTA */
-   double rho_b;       /* Second estimate of CROTA */
-   double sincro;      /* Sin( CROTA ) */
-   double specfactor;  /* Factor for converting internal spectral units */
-   double val;         /* General purpose value */
-   int axlat;          /* Index of latitude FITS WCS axis */
-   int axlon;          /* Index of longitude FITS WCS axis */
-   int axrot1;         /* Index of first CROTA rotation axis */
-   int axrot2;         /* Index of second CROTA rotation axis */
-   int axspec;         /* Index of spectral FITS WCS axis */
-   int i;              /* Axis index */
-   int ihmsf[ 4 ];     /* Hour, minute, second, fractional second */
-   int iymdf[ 4 ];     /* Year, month, date, fractional day */
-   int j;              /* Axis index */
-   int jj;             /* SlaLib status */
-   int naxis;          /* No. of axes */
-   int ok;             /* Is FitsSTore OK for IRAF encoding? */
-   int prj;            /* Projection type */
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Initialise */
-   specunit = "";
-   specfactor = 1.0;
-
-/* First check that the values in the FitsStore conform to the
-   requirements of the AIPS encoding. Assume they do to begin with. */
-   ok = 1;
-
-/* Just do primary axes. */
-   s = ' '; 
-
-/* Look for the primary celestial axes. */
-   FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
-   if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CRVAL values for both axes. */
-      latval = GetItem( &( store->crval ), axlat, 0, s, NULL, method, class, status );
-      if( latval == AST__BAD ) ok = 0;
-      
-      lonval = GetItem( &( store->crval ), axlon, 0, s, NULL, method, class, status );
-      if( lonval == AST__BAD ) ok = 0;
-      
-/* Get the CTYPE values for both axes. Extract the projection type as 
-   specified by the last 4 characters in the latitude CTYPE keyword value. */
-      cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         strcpy( lontype, cval );
-      }
-
-      cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-         prj = AST__WCSBAD;
-      } else {
-         strcpy( lattype, cval );
-         prj = astWcsPrjType( cval + 4 );
-      }
-
-/* Check the projection type is OK. */
-      if( prj != AST__SIN ){
-   
-/* There must be no projection parameters. */
-         if( GetMaxJM( &(store->pv), ' ', status ) >= 0 ) {
-            ok = 0;
-
-/* FITS-AIPS cannot handle the AST-specific TPN projection. */
-         } else if( prj == AST__TPN ) {
-            ok = 0;
-
-/* For AIT, MER and GLS, check that the reference point is the origin of
-   the celestial co-ordinate system. */
-         } else if( prj == AST__MER ||
-                    prj == AST__AIT ||
-                    prj == AST__SFL ) {
-            if( latval != 0.0 || lonval != 0.0 ){
-               ok = 0;     
-
-/* Change the new SFL projection code to to the older equivalent GLS */
-            } else if( prj == AST__SFL ){
-               (void) strcpy( lontype + 4, "-GLS" );
-               (void) strcpy( lattype + 4, "-GLS" );
-            }
-         }
-
-/* SIN projections are only acceptable if the associated projection
-   parameters are both zero, or if the first is zero and the second 
-   = cot( reference point latitude )  (the latter case is equivalent to 
-   the old NCP projection). */
-      } else {
-         p1 = GetItem( &( store->pv ), axlat, 1, s, NULL, method, class, status );
-         p2 = GetItem( &( store->pv ), axlat, 2, s, NULL, method, class, status );
-         if( p1 == AST__BAD ) p1 = 0.0;   
-         if( p2 == AST__BAD ) p2 = 0.0;   
-         ok = 0;
-
-         if( p1 == 0.0 ) {
-            if( p2 == 0.0 ) {
-               ok = 1;
-   
-            } else if( fabs( p2 ) >= 1.0E14 && latval == 0.0 ){
-               ok = 1;
-               (void) strcpy( lontype + 4, "-NCP" );
-               (void) strcpy( lattype + 4, "-NCP" );
-   
-            } else if( fabs( p2*tan( AST__DD2R*latval ) - 1.0 ) 
-                       < 0.01 ){
-               ok = 1;
-               (void) strcpy( lontype + 4, "-NCP" );
-               (void) strcpy( lattype + 4, "-NCP" );
-            }
-         }
-      }
-
-/* Identify the celestial coordinate system from the first 4 characters of the
-   longitude CTYPE value. Only RA, galactic longitude, and ecliptic
-   longitude can be stored using FITS-AIPS. */
-      if( ok && strncmp( lontype, "RA--", 4 ) &&
-               strncmp( lontype, "GLON", 4 ) &&
-               strncmp( lontype, "ELON", 4 ) ) ok = 0;
-
-/* If the physical Frame requires a LONPOLE or LATPOLE keyword, it cannot
-   be encoded using FITS-IRAF. */
-      if( GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status )
-          != AST__BAD || 
-          GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status )
-          != AST__BAD ) ok = 0;
-   }
-
-/* If a spectral axis is present ...*/
-   if( ok && axspec >= 0 ) {
-
-/* Get the CTYPE values for the axis, and find the AIPS equivalent, if
-   possible. */
-      cval = GetItemC( &(store->ctype), axspec, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         if( !strncmp( cval, "FREQ", astChrLen( cval ) ) ) {
-            strcpy( spectype, "FREQ" );
-         } else if( !strncmp( cval, "VRAD", astChrLen( cval ) ) ) {
-            strcpy( spectype, "VELO" );
-         } else if( !strncmp( cval, "VOPT-F2W", astChrLen( cval ) ) ) {
-            strcpy( spectype, "FELO" );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* If OK, check the SPECSYS value and add the AIPS equivalent onto the
-   end of the CTYPE value.*/
-      cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else if( ok ) {
-         if( !strncmp( cval, "LSRK", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-LSR" );
-         } else if( !strncmp( cval, "LSRD", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-LSD" );
-         } else if( !strncmp( cval, "BARYCENT", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-HEL" );
-         } else if( !strncmp( cval, "GEOCENTR", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-GEO" );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* If still OK, ensure the spectral axis units are Hz or m/s. */
-      cval = GetItemC( &(store->cunit), axspec, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else if( ok ) {
-         if( !strcmp( cval, "Hz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0;
-         } else if( !strcmp( cval, "kHz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0E3;
-         } else if( !strcmp( cval, "MHz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0E6;
-         } else if( !strcmp( cval, "GHz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0E9;
-         } else if( !strcmp( cval, "m/s" ) ) {
-            specunit = "m/s";
-            specfactor = 1.0;
-         } else if( !strcmp( cval, "km/s" ) ) {
-            specunit = "m/s";
-            specfactor = 1.0E3;
-         } else {
-            ok = 0;
-         }
-      }
-   }
-
-/* Save the number of axes */
-   naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* If this is different to the value of NAXIS abort since this encoding
-   does not support WCSAXES keyword. */
-   if( naxis != store->naxis ) ok = 0;
-
-/* Allocate memory to store the CDELT values */
-   if( ok ) {
-      cdelt = (double *) astMalloc( sizeof(double)*naxis );
-      if( !cdelt ) ok = 0;
-   } else {
-      cdelt = NULL;
-   }
-
-/* Check that rotation is restricted to the celestial plane, and extract
-   the CDELT (diagonal) terms, etc. If there are no celestial
-   axes, restrict rotation to the first two non-spectral axes. */
-   if( axlat < 0 && axlon < 0 ) {
-      if( axspec >= 0 && naxis > 2 ) {
-         axrot2 = ( axspec == 0 ) ? 1 : 0;
-         axrot1 = axrot2 + 1;
-         if( axrot1 == axspec ) axrot1++;
-      } else if( naxis > 1 ){
-         axrot2 = 0;
-         axrot1 = 1; 
-      } else {
-         axrot2 = -1;
-         axrot1 = -1;
-      }
-   } else {
-      axrot1 = axlon;
-      axrot2 = axlat; 
-   }
-
-   cdlat_lon = 0.0;
-   cdlon_lat = 0.0;
-   for( i = 0; i < naxis && ok; i++ ){
-      cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-      if( cdl == AST__BAD ) cdl = 1.0;
-
-      for( j = 0; j < naxis && ok; j++ ){
-          val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-          if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
-          val *= cdl;
-
-          if( i == j ){
-             cdelt[ i ] = val;
-
-          } else if( i == axrot2 && j == axrot1 ){
-             cdlat_lon = val;
-
-          } else if( i == axrot1 && j == axrot2 ){
-             cdlon_lat = val;
-
-          } else if( val != 0.0 ){
-             ok = 0;
-          }
-      }
-   }
-
-/* Find the CROTA and CDELT values for the celestial axes. */
-   if( ok && axrot1 >= 0 && axrot2 >= 0 ) {
-
-      if( cdlat_lon > 0.0 ) {
-         rho_a = atan2( cdlat_lon, cdelt[ axrot1 ] );
-      } else if( cdlat_lon == 0.0 ) {
-         rho_a = 0.0;
-      } else {
-         rho_a = atan2( -cdlat_lon, -cdelt[ axrot1 ] );
-      }
-
-      if( cdlon_lat > 0.0 ) {
-         rho_b = atan2( cdlon_lat, -cdelt[ axrot2 ] );
-      } else if( cdlon_lat == 0.0 ) {
-         rho_b = 0.0;
-      } else {
-         rho_b = atan2( -cdlon_lat, cdelt[ axrot2 ] );
-      }
-
-      if( fabs( palSlaDrange( rho_a - rho_b ) ) < 1.0E-2 ){
-         crota = 0.5*( palSlaDranrm( rho_a ) + palSlaDranrm( rho_b ) );
-         coscro = cos( crota );
-         sincro = sin( crota );
-
-         if( fabs( coscro ) > fabs( sincro ) ){
-            cdelt[ axrot2 ] /= coscro;
-            cdelt[ axrot1 ] /= coscro;
-         } else {
-            cdelt[ axrot2 ] = -cdlon_lat/sincro;
-            cdelt[ axrot1 ] = cdlat_lon/sincro;
-         }      
-         crota *= AST__DR2D;
-
-      } else {
-         ok = 0;
-      }
-
-   } else {
-      crota = 0.0;
-   }
-
-/* Get RADECSYS and the reference equinox (called EPOCH in FITS-AIPS). */
-   cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-   epoch = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* If RADECSYS was available... */
-   if( cval ){
-
-/* ICRS is not supported in this encoding. */
-      if( !strcmp( "ICRS", cval ) ) ok = 0;
-      
-/* If epoch was not available, set a default epoch. */
-      if( epoch == AST__BAD ){
-
-         if( !strcmp( "FK4", cval ) ){
-            epoch = 1950.0;
-         } else if( !strcmp( "FK5", cval ) ){
-            epoch = 2000.0;
-         } else {
-            ok = 0;
-         }
-
-/* If an epoch was supplied, check it is consistent with the IAU 1984
-   rule. */
-      } else {
-         if( !strcmp( "FK4", cval ) ){
-            if( epoch >= 1984.0 ) ok = 0;
-         } else if( !strcmp( "FK5", cval ) ){
-            if( epoch < 1984.0 ) ok = 0;
-         } else {
-            ok = 0;
-         }
-      }
-   }
-
-/* Only create the keywords if the FitsStore conforms to the requirements
-   of the FITS-AIPS encoding. */
-   if( ok ) {
-
-/* Get and save CRPIX for all pixel axes. These are required, so break
-   if they are not available. */
-      for( j = 0; j < naxis && ok; j++ ){
-         val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-         } else {
-            sprintf( combuf, "Reference pixel on axis %d", j + 1 );
-            SetValue( this, FormatKey( "CRPIX", j + 1, -1, s, status ), &val, 
-                      AST__FLOAT, combuf, status );
-         }
-      }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so 
-   break if they are not available. */
-      for( i = 0; i < naxis && ok; i++ ){
-         val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-         } else {
-            if( i == axspec ) val *= specfactor;
-            sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
-            SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val, 
-                      AST__FLOAT, combuf, status );
-         }
-      }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so 
-   break if they are not available. Use the potentially modified versions 
-   saved above for the celestial axes. */
-      for( i = 0; i < naxis && ok; i++ ){
-         if( i == axlat ) {
-            cval = lattype;
-         } else if( i == axlon ) {
-            cval = lontype;
-         } else if( i == axspec ) {
-            cval = spectype;
-         } else {
-            cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-         }
-         if( cval ){
-            comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-            if( !comm ) {            
-               sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
-               comm = combuf;
-            }
-            SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, 
-                      AST__STRING, comm, status );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* CDELT values */
-      if( axspec != -1 ) cdelt[ axspec ] *= specfactor;
-      for( i = 0; i < naxis; i++ ){
-         SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), cdelt + i, 
-                   AST__FLOAT, "Pixel size", status );
-      }
-
-/* CUNIT values. */
-      for( i = 0; i < naxis; i++ ) {
-         cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-         if( cval ) {
-            if( i == axspec ) cval = specunit;
-            sprintf( combuf, "Units for axis %d", i + 1 );
-            SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING, 
-                      combuf, status );
-         }
-      }
-
-/* CROTA */
-      if( axrot2 != -1 ){
-         SetValue( this, FormatKey( "CROTA", axrot2 + 1, -1, s, status ), &crota, 
-                   AST__FLOAT, "Axis rotation", status );
-      } else if( ( axspec == -1 && naxis > 1 ) || 
-                  ( axspec != -1 && naxis > 2 ) )  {
-         SetValue( this, "CROTA1", &crota, AST__FLOAT, "Axis rotation", status );
-      }
-
-/* Reference equinox */
-      if( epoch != AST__BAD ) SetValue( this, "EPOCH", &epoch, AST__FLOAT, 
-                                        "Epoch of reference equinox", status );
-
-/* Date of observation. */
-      val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
-      if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
-   keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
-   Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
-         palSlaCaldj( 99, 1, 1, &mjd99, &jj );
-         if( val < mjd99 ) {
-            palSlaDjcal( 0, val, iymdf, &jj );
-            sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ], 
-                     iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) ); 
-         } else {
-            palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
-            palSlaDd2tf( 3, fd, sign, ihmsf );
-            sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
-                     iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
-                     ihmsf[2], ihmsf[3] ); 
-         }
-
-/* Now store the formatted string in the FitsChan. */
-         cval = combuf;
-         SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
-                   "Date of observation", status );
-      }
-
-/* Spectral stuff.. */
-      if( axspec >= 0 ) {
-
-/* Rest frequency */
-         val = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) SetValue( this, FormatKey( "RESTFREQ", -1, -1, s, status ),
-                                         &val, AST__FLOAT, "[Hz] Rest frequency", status );
-      }
-   }
-
-/* Release CDELT workspace */
-   if( cdelt ) cdelt = (double *) astFree( (void *) cdelt );
-
-/* Return zero or ret depending on whether an error has occurred. */
-   return astOK ? ok : 0;
-}
-
-static int AIPSPPFromStore( AstFitsChan *this, FitsStore *store, 
-                            const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     AIPSPPFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using FITS-AIPS++ encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int AIPSPPFromStore( AstFitsChan *this, FitsStore *store, 
-*                        const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using FITS-AIPS++ encoding.
-*
-*     AIPS++ encoding is like FITS-WCS encoding but with the following
-*     restrictions:
-*
-*     1) The celestial axes must be RA/DEC, galactic or ecliptic.   
-*
-*     2) Only primary axis descriptions are written out.
-*
-*     3) RADESYS is not written and so the RADECSYS & EQUINOX values in the 
-*        FitsStore must be consistent with the "1984" rule.
-*
-*     4) Any rotation produced by the PC matrix must be restricted to
-*        the celestial plane, and must involve no shear. A CROTA keyword
-*        with associated CDELT values are produced instead of the PC
-*        matrix.
-*     
-*     5) ICRS is not supported.
-*
-*     6) Spectral axes can be created only for FITS-WCS CTYPE values of "FREQ"
-*        "VRAD" and "VOPT-F2W" and with standards of rest of LSRK, LSRD, 
-*        BARYCENT and GEOCENTR.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   char *comm;         /* Pointer to comment string */
-   const char *cval;   /* Pointer to string keyword value */
-   const char *specunit;/* Pointer to corrected spectral units string */
-   char combuf[80];    /* Buffer for FITS card comment */
-   char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
-   char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
-   char s;             /* Co-ordinate version character */
-   char sign[2];       /* Fraction's sign character */
-   char spectype[MXCTYPELEN];/* Spectral axis CTYPE */
-   double *cdelt;      /* Pointer to CDELT array */
-   double cdl;         /* CDELT term */
-   double cdlat_lon;   /* Off-diagonal CD element */
-   double cdlon_lat;   /* Off-diagonal CD element */
-   double coscro;      /* Cos( CROTA ) */
-   double crota;       /* CROTA value to use */
-   double epoch;       /* Epoch of reference equinox */
-   double fd;          /* Fraction of a day */
-   double mjd99;       /* MJD at start of 1999 */
-   double rho_a;       /* First estimate of CROTA */
-   double rho_b;       /* Second estimate of CROTA */
-   double sincro;      /* Sin( CROTA ) */
-   double specfactor;  /* Factor for converting internal spectral units */
-   double val;         /* General purpose value */
-   int axlat;          /* Index of latitude FITS WCS axis */
-   int axlon;          /* Index of longitude FITS WCS axis */
-   int axrot1;         /* Index of first CROTA rotation axis */
-   int axrot2;         /* Index of second CROTA rotation axis */
-   int axspec;         /* Index of spectral FITS WCS axis */
-   int i;              /* Axis index */
-   int ihmsf[ 4 ];     /* Hour, minute, second, fractional second */
-   int iymdf[ 4 ];     /* Year, month, date, fractional day */
-   int j;              /* Axis index */
-   int jj;             /* SlaLib status */
-   int m;              /* Projection parameter index */
-   int maxm;           /* Max projection parameter index */
-   int naxis;          /* No. of axes */
-   int ok;             /* Is FitsSTore OK for IRAF encoding? */
-   int prj;            /* Projection type */
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Initialise */
-   specunit = "";
-   specfactor = 1.0;
-   maxm = 0;
-
-/* First check that the values in the FitsStore conform to the
-   requirements of the AIPS++ encoding. Assume they do to begin with. */
-   ok = 1;
-
-/* Just do primary axes. */
-   s = ' '; 
-
-/* Save the number of axes */
-   naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* Look for the primary celestial and spectral axes. */
-   FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
-   if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CTYPE values for both axes. Extract the projection type as 
-   specified by the last 4 characters in the latitude CTYPE keyword value. */
-      cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         strcpy( lontype, cval );
-      }
-
-      cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-         prj = AST__WCSBAD;
-      } else {
-         strcpy( lattype, cval );
-         prj = astWcsPrjType( cval + 4 );
-      }
-
-/* FITS-AIPS++ cannot handle the AST-specific TPN projection. */
-      if( prj == AST__TPN ) ok = 0;
-
-/* Projection parameters. FITS-AIPS++ encoding ignores projection parameters 
-   associated with the longitude axis. The number of parameters is limited to 
-   10. */
-      maxm = GetMaxJM( &(store->pv), ' ', status );
-      for( i = 0; i < naxis && ok; i++ ){
-         if( i != axlon ) {
-            for( m = 0; m <= maxm; m++ ){
-               val = GetItem( &(store->pv), i, m, s, NULL, method, class, status );
-               if( val != AST__BAD ) {
-                  if( i != axlat || m >= 10 ){
-                     ok = 0;
-                     break;
-                  }
-               } 
-            }
-         }
-      }
-
-/* Identify the celestial coordinate system from the first 4 characters of the
-   longitude CTYPE value. Only RA, galactic longitude, and ecliptic
-   longitude can be stored using FITS-AIPS++. */
-      if( ok && strncmp( lontype, "RA--", 4 ) &&
-                strncmp( lontype, "GLON", 4 ) &&
-                strncmp( lontype, "ELON", 4 ) ) ok = 0;
-
-   }
-
-/* If a spectral axis is present ...*/
-   if( axspec >= 0 ) {
-
-/* Get the CTYPE values for the axis, and find the AIPS equivalent, if
-   possible. */
-      cval = GetItemC( &(store->ctype), axspec, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         if( !strncmp( cval, "FREQ", astChrLen( cval ) ) ) {
-            strcpy( spectype, "FREQ" );
-         } else if( !strncmp( cval, "VRAD", astChrLen( cval ) ) ) {
-            strcpy( spectype, "VELO" );
-         } else if( !strncmp( cval, "VOPT-F2W", astChrLen( cval ) ) ) {
-            strcpy( spectype, "FELO" );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* If OK, check the SPECSYS value and add the AIPS equivalent onto the
-   end of the CTYPE value.*/
-      cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         if( !strncmp( cval, "LSRK", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-LSR" );
-         } else if( !strncmp( cval, "LSRD", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-LSD" );
-         } else if( !strncmp( cval, "BARYCENT", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-HEL" );
-         } else if( !strncmp( cval, "GEOCENTR", astChrLen( cval ) ) ) {
-            strcpy( spectype+4, "-GEO" );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* If still OK, ensure the spectral axis units are Hz or m/s. */
-      cval = GetItemC( &(store->cunit), axspec, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else if( ok ) {
-         if( !strcmp( cval, "Hz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0;
-         } else if( !strcmp( cval, "kHz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0E3;
-         } else if( !strcmp( cval, "MHz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0E6;
-         } else if( !strcmp( cval, "GHz" ) ) {
-            specunit = "HZ";
-            specfactor = 1.0E9;
-         } else if( !strcmp( cval, "m/s" ) ) {
-            specunit = "m/s";
-            specfactor = 1.0;
-         } else if( !strcmp( cval, "km/s" ) ) {
-            specunit = "m/s";
-            specfactor = 1.0E3;
-         } else {
-            ok = 0;
-         }
-      }
-   }
-
-/* If this is different to the value of NAXIS abort since this encoding
-   does not support WCSAXES keyword. */
-   if( naxis != store->naxis ) ok = 0;
-
-/* Allocate memory to store the CDELT values */
-   if( ok ) {
-      cdelt = (double *) astMalloc( sizeof(double)*naxis );
-      if( !cdelt ) ok = 0;
-   } else {
-      cdelt = NULL;
-   }
-
-/* Check that rotation is restricted to the celestial plane, and extract
-   the CDELT (diagonal) terms, etc. If there are no celestial
-   axes, restrict rotation to the first two non-spectral axes. */
-   if( axlat < 0 && axlon < 0 ) {
-      if( axspec >= 0 && naxis > 2 ) {
-         axrot2 = ( axspec == 0 ) ? 1 : 0;
-         axrot1 = axrot2 + 1;
-         if( axrot1 == axspec ) axrot1++;
-      } else if( naxis > 1 ){
-         axrot2 = 0;
-         axrot1 = 1; 
-      } else {
-         axrot2 = -1;
-         axrot1 = -1; 
-      }
-   } else {
-      axrot1 = axlon;
-      axrot2 = axlat; 
-   }
- 
-
-   cdlat_lon = 0.0;
-   cdlon_lat = 0.0;
-   for( i = 0; i < naxis && ok; i++ ){
-      cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-      if( cdl == AST__BAD ) cdl = 1.0;
-
-      for( j = 0; j < naxis && ok; j++ ){
-          val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-          if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
-          val *= cdl;
-
-          if( i == j ){
-             cdelt[ i ] = val;
-
-          } else if( i == axrot2 && j == axrot1 ){
-             cdlat_lon = val;
-
-          } else if( i == axrot1 && j == axrot2 ){
-             cdlon_lat = val;
-
-          } else if( val != 0.0 ){
-             ok = 0;
-          }
-      }
-   }
-
-/* Find the CROTA and CDELT values for the celestial axes. */
-   if( ok && axrot1 >= 0 && axrot2 >= 0 ) {
-
-      if( cdlat_lon > 0.0 ) {
-         rho_a = atan2( cdlat_lon, cdelt[ axrot1 ] );
-      } else if( cdlat_lon == 0.0 ) {
-         rho_a = 0.0;
-      } else {
-         rho_a = atan2( -cdlat_lon, -cdelt[ axrot1 ] );
-      }
-
-      if( cdlon_lat > 0.0 ) {
-         rho_b = atan2( cdlon_lat, -cdelt[ axrot2 ] );
-      } else if( cdlon_lat == 0.0 ) {
-         rho_b = 0.0;
-      } else {
-         rho_b = atan2( -cdlon_lat, cdelt[ axrot2 ] );
-      }
-
-      if( fabs( palSlaDrange( rho_a - rho_b ) ) < 1.0E-2 ){
-         crota = 0.5*( palSlaDranrm( rho_a ) + palSlaDranrm( rho_b ) );
-         coscro = cos( crota );
-         sincro = sin( crota );
-
-         if( fabs( coscro ) > fabs( sincro ) ){
-            cdelt[ axrot2 ] /= coscro;
-            cdelt[ axrot1 ] /= coscro;
-         } else {
-            cdelt[ axrot2 ] = -cdlon_lat/sincro;
-            cdelt[ axrot1 ] = cdlat_lon/sincro;
-         }      
-         crota *= AST__DR2D;
-
-/* Use AST__BAD to indicate that CDi_j values should be produced
-   instead of CROTA/CDELT. (I am told AIPS++ can understand CD matrices) */
-      } else {
-         crota = AST__BAD;
-      }
-
-   } else {
-      crota = 0.0;
-   }
-
-/* Get RADECSYS and the reference equinox. */
-   cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-   epoch = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* If RADECSYS was available... */
-   if( cval ){
-
-/* ICRS is not supported in this encoding. */
-      if( !strcmp( "ICRS", cval ) ) ok = 0;
-      
-/* If epoch was not available, set a default epoch. */
-      if( epoch == AST__BAD ){
-
-         if( !strcmp( "FK4", cval ) ){
-            epoch = 1950.0;
-         } else if( !strcmp( "FK5", cval ) ){
-            epoch = 2000.0;
-         } else {
-            ok = 0;
-         }
-
-/* If an equinox was supplied, check it is consistent with the IAU 1984
-   rule. */
-      } else {
-         if( !strcmp( "FK4", cval ) ){
-            if( epoch >= 1984.0 ) ok = 0;
-         } else if( !strcmp( "FK5", cval ) ){
-            if( epoch < 1984.0 ) ok = 0;
-         } else {
-            ok = 0;
-         }
-      }
-   }
-
-/* Only create the keywords if the FitsStore conforms to the requirements
-   of the FITS-AIPS++ encoding. */
-   if( ok ) {
-
-/* Get and save CRPIX for all pixel axes. These are required, so break
-   if they are not available. */
-      for( j = 0; j < naxis && ok; j++ ){
-         val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-         } else {
-            sprintf( combuf, "Reference pixel on axis %d", j + 1 );
-            SetValue( this, FormatKey( "CRPIX", j + 1, -1, s, status ), &val, 
-                      AST__FLOAT, combuf, status );
-         }
-      }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so 
-   break if they are not available. */
-      for( i = 0; i < naxis && ok; i++ ){
-         val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-         } else {
-            if( i == axspec ) val *= specfactor;
-            sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
-            SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val, 
-                      AST__FLOAT, combuf, status );
-         }
-      }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so 
-   break if they are not available. Use the potentially modified versions 
-   saved above for the celestial axes. */
-      for( i = 0; i < naxis && ok; i++ ){
-         if( i == axlat ) {
-            cval = lattype;
-         } else if( i == axlon ) {
-            cval = lontype;
-         } else if( i == axspec ) {
-            cval = spectype;
-         } else {
-            cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-         }
-         if( cval ){
-            comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-            if( !comm ) {            
-               sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
-               comm = combuf;
-            }
-            SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, 
-                      AST__STRING, comm, status );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* CDELT values */
-      if( axspec != -1 ) cdelt[ axspec ] *= specfactor;
-      for( i = 0; i < naxis; i++ ){
-         SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), cdelt + i, 
-                   AST__FLOAT, "Pixel size", status );
-      }
-
-/* CUNIT values. [Spectral axis units should be upper-case] */
-      for( i = 0; i < naxis; i++ ) {
-         cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-         if( cval ) {
-            if( i == axspec ) cval = specunit;
-            sprintf( combuf, "Units for axis %d", i + 1 );
-            SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING, 
-                      combuf, status );
-         }
-      }
-
-/* CD matrix. Multiply the row of the PC matrix by the CDELT value. */
-      if( crota == AST__BAD ) {
-
-         for( i = 0; i < naxis; i++ ) {
-            cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-            if( cdl == AST__BAD ) cdl = 1.0;
-       
-            for( j = 0; j < naxis; j++ ){
-               val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-               if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
-               val *= cdl;
-
-               if( val != 0.0 ) {
-                   SetValue( this, FormatKey( "CD", i + 1, j + 1, s, status ), &val, 
-                             AST__FLOAT, "Transformation matrix element", status );
-               }
-            }
-         }
-
-/* CROTA */
-      } else if( crota != 0.0 ) {
-         if( axrot2 != -1 ){
-            SetValue( this, FormatKey( "CROTA", axrot2 + 1, -1, s, status ), &crota, 
-                      AST__FLOAT, "Axis rotation", status );
-         } else if( ( axspec == -1 && naxis > 1 ) || 
-                    ( axspec != -1 && naxis > 2 ) ) {
-            SetValue( this, "CROTA1", &crota, AST__FLOAT, "Axis rotation", status );
-         }
-      }
-
-/* Reference equinox */
-      if( epoch != AST__BAD ) SetValue( this, "EPOCH", &epoch, AST__FLOAT, 
-                                        "Epoch of reference equinox", status );
-
-/* Latitude of native north pole. */
-      val = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, "LATPOLE", &val, AST__FLOAT, 
-                                      "Latitude of native north pole", status );
-
-/* Longitude of native north pole. */
-      val = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, "LONPOLE", &val, AST__FLOAT, 
-                                      "Longitude of native north pole", status );
-
-/* Date of observation. */
-      val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
-      if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
-   keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
-   Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
-         palSlaCaldj( 99, 1, 1, &mjd99, &jj );
-         if( val < mjd99 ) {
-            palSlaDjcal( 0, val, iymdf, &jj );
-            sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ], 
-                     iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) ); 
-         } else {
-            palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
-            palSlaDd2tf( 3, fd, sign, ihmsf );
-            sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
-                     iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
-                     ihmsf[2], ihmsf[3] ); 
-         }
-
-/* Now store the formatted string in the FitsChan. */
-         cval = combuf;
-         SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
-                   "Date of observation", status );
-      }
-
-/* Projection parameters. */
-      if( axlat >= 0 && axlon >= 0 ) {
-         for( m = 0; m <= maxm; m++ ){
-            val = GetItem( &(store->pv), axlat, m, s, NULL, method, class, status );
-            if( val != AST__BAD ) SetValue( this, FormatKey( "PROJP", m, -1, ' ', status ), 
-                                            &val, AST__FLOAT, "Projection parameter", status );
-         }
-      }
-
-/* Spectral stuff.. */
-      if( axspec >= 0 ) {
-
-/* Rest frequency */
-         val = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) SetValue( this, FormatKey( "RESTFREQ", -1, -1, s, status ),
-                                         &val, AST__FLOAT, "[Hz] Rest frequency", status );
-      }
-   }
-
-/* Release CDELT workspace */
-   if( cdelt ) cdelt = (double *) astFree( (void *) cdelt );
-
-/* Return zero or ret depending on whether an error has occurred. */
-   return astOK ? ok : 0;
-}
-
-static char *CardComm( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     CardComm
-
-*  Purpose:
-*     Return the keyword comment from the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char *CardComm( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns a pointer to a string holding the keyword comment from the
-*     current card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the keyword comment, or NULL if the FitsChan is at
-*     end-of-file, or does not have a comment.
-
-*  Notes:
-*     -  The current card is not changed by this function.
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   char *ret;
-
-/* Check the supplied object. */
-   if( !this ) return NULL;
-
-/* If the current card is defined, store a pointer to its keyword comment. */
-   if( this->card ){
-      ret = ( (FitsCard *) this->card )->comment;
-
-/* Otherwise store a NULL pointer. */
-   } else {
-      ret =  NULL;
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void *CardData( AstFitsChan *this, size_t *size, int *status ){
-/*
-*  Name:
-*     CardData
-
-*  Purpose:
-*     Return a pointer to the keyword data value for the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void *CardData( AstFitsChan *this, size_t *size, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns a pointer to keyword data value from the current card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     size
-*        A pointer to a location at which to return the number of bytes
-*        occupied by the data value. NULL can be supplied if this
-*        information is not required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the keyword data, or NULL if the FitsChan is at
-*     end-of-file, or if the keyword does not have any data.
-
-*  Notes:
-*     -  For text data, the returned value for "size" includes the
-*     terminating null character.
-*     -  The current card is not changed by this function.
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   void *ret;
-
-/* Check the supplied object. */
-   if( !this ) return NULL;
-
-/* If the current card is defined, store a pointer to its keyword data. */
-   if( this->card ){
-      ret = ( (FitsCard *) this->card )->data;
-      if( size ) *size = ( (FitsCard *) this->card )->size;
-
-/* Otherwise store a NULL pointer. */
-   } else {
-      ret =  NULL;
-      if( size ) *size = 0;
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int *CardFlags( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     CardFlags
-
-*  Purpose:
-*     Return a pointer to the flags mask for the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int *CardFlags( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns a pointer to the flags mask for the current card. 
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The pointer to the flags mask.
-
-*  Notes:
-*     -  The current card is not changed by this function.
-*     -  NULL is returned if the current card is not defined.
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   int *ret;
-
-/* Check the supplied object. */
-   if( !this ) return NULL;
-
-/* If the current card is defined, store its deletion flag. */
-   if( this->card ){
-      ret = &( ( (FitsCard *) this->card )->flags );
-
-/* Otherwise store zero. */
-   } else {
-      ret =  NULL;
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static char *CardName( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     CardName
-
-*  Purpose:
-*     Return the keyword name from the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char *CardName( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns a pointer to a string holding the keyword name from the
-*     current card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the keyword name, or NULL if the FitsChan is at
-*     end-of-file.
-
-*  Notes:
-*     -  The current card is not changed by this function.
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   char *ret;
-
-/* Check the supplied object. */
-   if( !this ) return NULL;
-
-/* If the current card is defined, store a pointer to its keyword name. */
-   if( this->card ){
-      ret = ( (FitsCard *) this->card )->name;
-
-/* Otherwise store a NULL pointer. */
-   } else {
-      ret =  NULL;
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int CardType( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     CardType
-
-*  Purpose:
-*     Return the keyword type from the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int CardType( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns the keyword type from the current card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The keyword type.
-
-*  Notes:
-*     -  The current card is not changed by this function.
-*     -  AST__NOTYPE is returned if the current card is not defined.
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Check the supplied object. */
-   if( !this ) return AST__NOTYPE;
-
-/* If the current card is defined, store the keyword type. */
-   if( this->card ){
-      ret = ( (FitsCard *) this->card )->type;
-
-/* Otherwise store AST__NOTYPE. */
-   } else {
-      ret =  AST__NOTYPE;
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static AstMapping *CelestialAxes( AstFrameSet *fs, double *dim, int *wperm, 
-                                  char s, FitsStore *store, int *axis_done, 
-                                  const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     CelestialAxes
-
-*  Purpose:
-*     Add values to a FitsStore describing celestial axes in a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *CelestialAxes( AstFrameSet *fs, double *dim, int *wperm, 
-*                                char s, FitsStore *store, int *axis_done, 
-*                                const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The current Frame of the supplied FrameSet is searched for celestial
-*     axes. If any are found, FITS WCS keyword values describing the axis
-*     are added to the supplied FitsStore, if possible (the conventions
-*     of FITS-WCS paper II are used). Note, this function does not store
-*     values for keywords which define the transformation from pixel
-*     coords to Intermediate World Coords (CRPIX, PC and CDELT), but a
-*     Mapping is returned which embodies these values. This Mapping is
-*     from the current Frame in the FrameSet (WCS coords) to a Frame 
-*     representing IWC. The IWC Frame has the same number of axes as the 
-*     WCS Frame which may be greater than the number of base Frame (i.e. 
-*     pixel) axes. 
-
-*  Parameters:
-*     fs
-*        Pointer to the FrameSet. The base Frame should represent FITS pixel
-*        coordinates, and the current Frame should represent FITS WCS
-*        coordinates. The number of base Frame axes should not exceed the
-*        number of current Frame axes.
-*     dim
-*        An array holding the image dimensions in pixels. AST__BAD can be 
-*        supplied for any unknwon dimensions.
-*     wperm
-*        Pointer to an array of integers with one element for each axis of 
-*        the current Frame. Each element holds the zero-based 
-*        index of the FITS-WCS axis (i.e. the value of "i" in the keyword 
-*        names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     store
-*        The FitsStore in which to store the FITS WCS keyword values.
-*     axis_done 
-*        An array of flags, one for each Frame axis, which indicate if a
-*        description of the corresponding axis has yet been stored in the
-*        FitsStore. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If celestial axes were found which can be described using the
-*     conventions of FITS-WCS paper II, then a Mapping from the current Frame 
-*     of the supplied FrameSet, to the IWC Frame is returned. Otherwise,
-*     a UnitMap is returned. Note, the Mapping only defines the IWC
-*     transformation for celestial axes. Any non-celestial axes are passed
-*     unchanged by the returned Mapping.
-
-*/
-
-/* Local Variables: */
-   AstFrame *pframe;       /* Primary Frame containing current WCS axis*/
-   AstFrame *wcsfrm;       /* WCS Frame within FrameSet */
-   AstMapping *map1;       /* Pointer to pre-WcsMap Mapping */
-   AstMapping *map3;       /* Pointer to post-WcsMap Mapping */
-   AstMapping *map;        /* Pixel -> WCS mapping */
-   AstMapping *ret;        /* Returned Mapping */
-   AstMapping *tmap0;      /* A temporary Mapping */
-   AstMapping *tmap1;      /* A temporary Mapping */
-   AstMapping *tmap2;      /* A temporary Mapping */
-   AstMapping *tmap3;      /* A temporary Mapping */
-   AstMapping *tmap4;      /* A temporary Mapping */
-   AstSkyFrame *skyfrm;    /* The SkyFrame defining current WCS axis */
-   AstWcsMap *map2;        /* Pointer to WcsMap */
-   AstWcsMap *map2b;       /* Pointer to WcsMap with cleared lat/lonpole */
-   char *cval;             /* Pointer to keyword value */
-   char *temp;             /* Pointer to temporary string */
-   double *ppcfid;         /* Pointer to array holding PPC at fiducial point */
-   double *mat;            /* Pointer to matrix diagonal elements */
-   double con;             /* Constant value for unassigned axes */
-   double pv;              /* Projection parameter value */
-   double skyfid[ 2 ];     /* Sky coords of fiducial point */
-   double val;             /* Keyword value */
-   int *inperm;            /* Input axis permutation array */
-   int *outperm;           /* Output axis permutation array */
-   int *tperm;             /* Pointer to new FITS axis numbering array */
-   int axlat;              /* Index of latitude output from WcsMap */
-   int axlon;              /* Index of longitude output from WcsMap */
-   int fits_ilat;          /* FITS WCS axis index for latitude axis */
-   int fits_ilon;          /* FITS WCS axis index for longitude axis */
-   int i;                  /* Loop index */
-   int iax;                /* Axis index */
-   int ilat;               /* Index of latitude axis within total WCS Frame */
-   int ilon;               /* Index of longitude axis within total WCS Frame */
-   int m;                  /* Projection parameter index */
-   int maxm;               /* Largest used "m" value */
-   int npix;               /* Number of pixel axes */
-   int nwcs;               /* Number of WCS axes */
-   int nwcsmap;            /* Number of inputs/outputs for the WcsMap */
-   int paxis;              /* Axis index within primary Frame */
-   int skylataxis;         /* Index of latitude axis within SkyFrame */
-   int skylonaxis;         /* Index of longitude axis within SkyFrame */
-   int tpn;                /* Is the WCS projectiona TPN projection? */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Get a pointer to the WCS Frame. */
-   wcsfrm = astGetFrame( fs, AST__CURRENT );
-
-/* Store the number of pixel and WCS axes. */
-   npix = astGetNin( fs );
-   nwcs = astGetNout( fs );
-
-/* Check each axis in the WCS Frame to see if it is a celestial axis. */
-   skyfrm = NULL;
-   map = NULL;
-   ilon = -1;
-   ilat = -1;
-   for( iax = 0; iax < nwcs; iax++ ) {
-
-/* Obtain a pointer to the primary Frame containing the current WCS axis. */
-      astPrimaryFrame( wcsfrm, iax, &pframe, &paxis );
-
-/* If the current axis belongs to a SkyFrame, we have found a celestial
-   axis. Keep a pointer to it, and note the indices of the celestial axes
-   within the complete WCS Frame. The MakeFitsFrameSet function will have
-   ensured that the WCS Frame only contains at most a single SkyFrame. */
-      if( astIsASkyFrame( pframe ) ) {
-         if( !skyfrm ) skyfrm = astClone( pframe );
-         if( paxis == 0 ) {
-            ilon = iax;
-         } else {
-            ilat = iax;
-         }
-
-/* Indicate that this axis has been classified. */
-         axis_done[ iax ] = 1;
-      }
-
-/* Release resources. */
-      pframe = astAnnul( pframe );
-   }
-
-/* Only proceed if we found celestial axes. */
-   if( ilon != -1 && ilat != -1 ) {
-
-/* Create an array to hold the Projection Plane Coords corresponding to the 
-   CRVALi keywords. */
-      ppcfid = (double *) astMalloc( sizeof( double )*nwcs );
-
-/* Get the pixel->wcs Mapping. */
-      map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Some of the required FITS Keyword values are defined by the WcsMap
-   contained within the Mapping. Split the mapping up into a list of serial 
-   component mappings, and locate the first WcsMap in this list. The first 
-   Mapping returned by this call is the result of compounding all the 
-   Mappings up to (but not including) the WcsMap, the second returned Mapping 
-   is the (inverted) WcsMap, and the third returned Mapping is anything 
-   following the WcsMap. Only proceed if one and only one WcsMap is found. */
-      if( SplitMap( map, astGetInvert( map ), ilon, ilat, &map1, &map2, &map3, status ) ){
-
-/* Get the indices of the latitude and longitude axes within the SkyFrame
-   (not necessarily (1,0) because they may have been permuted). */
-         skylataxis = astGetLatAxis( skyfrm );
-         skylonaxis = astGetLonAxis( skyfrm );
-
-/* The reference point in the celestial coordinate system is found by
-   transforming the fiducial point in native spherical co-ordinates
-   into WCS coordinates using map3. */
-         if( GetFiducialWCS( map2, map3, ilon,  ilat, skyfid + skylonaxis, 
-                         skyfid + skylataxis, status ) ){
-
-/* We also need to find the indices of the longitude and latitude outputs 
-   from the WcsMap. These may not be the same as ilat and ilon because of 
-   axis permutations in "map3". */
-            axlon = astGetWcsAxis( map2, 0 );
-            axlat = astGetWcsAxis( map2, 1 );
-
-/* Note the FITS WCS axis indices for the longitude and latitude axes */
-            fits_ilon = wperm[ ilon ];
-            fits_ilat = wperm[ ilat ];
-
-/* Normalise the latitude and longitude values at the fiducial point. The
-   longitude and latitude values found above will be in radians, but after
-   normalization we convert them to degrees, as expected by other functions 
-   which handle FitsStores. */
-            if( skyfid[ skylonaxis ] == AST__BAD ) skyfid[ skylonaxis ] = 0.0;
-            if( skyfid[ skylataxis ] == AST__BAD ) skyfid[ skylataxis ] = 0.0;
-
-            if( ZEROANG( skyfid[ 0 ] ) ) skyfid[ 0 ] = 0.0;
-            if( ZEROANG( skyfid[ 1 ] ) ) skyfid[ 1 ] = 0.0;
-
-            astNorm( skyfrm, skyfid );          
-
-            SetItem( &(store->crval), fits_ilon, 0, s, AST__DR2D*skyfid[ skylonaxis ], status );
-            SetItem( &(store->crval), fits_ilat, 0, s, AST__DR2D*skyfid[ skylataxis ], status );
-
-/* Set a flag if we have a TPN projection. This is an AST-specific
-   projection which mimicks the old "TAN with correction terms" projection
-   which was removed from the final version of the FITS-WCS paper II. */
-            tpn = ( astGetWcsType( map2 ) == AST__TPN );
-
-/* Store the WCS projection parameters. Except for TPN projections, always 
-   exclude parameters 3 and 4 on the longitude axis since these are
-   reserved to hold copies of LONPOLE and LATPOLE. */
-            for( m = 0; m < WCSLIB_MXPAR; m++ ){
-               if( astTestPV( map2, axlon, m ) ) {
-                  if( m < 3 || m > 4 || tpn ) {
-                     pv = astGetPV( map2, axlon, m );
-                     if( pv != AST__BAD ) SetItem( &(store->pv), fits_ilon, m, 
-                                                   s, pv, status );
-                  }
-               }
-               if( astTestPV( map2, axlat, m ) ) {
-                  pv = astGetPV( map2, axlat, m );
-                  if( pv != AST__BAD ) SetItem( &(store->pv), fits_ilat, m, 
-                                                s, pv, status );
-               }
-            }
-
-/* If PVi_0 (for the longitude axis) is non-zero, the Cartesian coordinates 
-   used by the WcsMap (Projection Plane Coordinates, PPC) need to be shifted
-   to produce Intermediate World Coordinates (IWC). This shift results in 
-   the pixel reference position specified by the CRPIXi values (and which
-   corresponds to the origin of IWC) mapping on to the fiducial position 
-   specified by the CRVALi values. The required shifts are just the PPC 
-   coordinates of the fiducial point. The AST-specific "TPN" projection uses 
-   longitude projection parameters to define correction terms, and so cannot 
-   use the above convention (which is part of FITS-WCS paper II). Therefore 
-   TPN projections always use zero shift between PPC and IWC. */
-            for( iax = 0; iax < nwcs; iax++ ) ppcfid[ iax ] = 0.0;
-            if( !tpn && astGetPV( map2, axlon, 0 ) != 0.0 ) {
-               GetFiducialPPC( (AstWcsMap *) map2, ppcfid + ilon, ppcfid + ilat, status );
-               if( ppcfid[ ilon ] == AST__BAD ) ppcfid[ ilon ] = 0.0;
-               if( ppcfid[ ilat ] == AST__BAD ) ppcfid[ ilat ] = 0.0;
-               ppcfid[ ilon ] *= AST__DR2D;
-               ppcfid[ ilat ] *= AST__DR2D;
-            }
-
-/* Store the CTYPE, CNAME, EQUINOX, MJDOBS, and RADESYS values. */
-            SkySys( skyfrm, astGetWcsType( map2 ), store, fits_ilon, 
-                    fits_ilat, s, method, class, status );
-
-/* Store the LONPOLE and LATPOLE values in the FitsStore. */
-            SkyPole( map2, map3, ilon, ilat, wperm, s, store, method, class, status );
-
-/* The values of LONPOLE and LATPOLE stored above (in the FitsStore) will be 
-   ignored by WcsNative if the WcsMap contains set values for projection 
-   parameters PVi_3a and/or PVi_4a (these will be used in preference to
-   the values in the FitsStore). To avoid this happening we take a copy
-   of the WcsMap and clear the relevant parameters (but not if the WcsMap is
-   for a TPN projection because TPN uses PVi_3a and PVi_4a for other
-   purposes). */
-            if( astGetWcsType( map2 ) != AST__TPN ) {
-               map2b = astCopy( map2 );
-               astClearPV( map2b, axlon, 3 );
-               astClearPV( map2b, axlon, 4 );
-            } else {
-               map2b = astClone( map2 );
-            }
-
-/* We will now create the Mapping from WCS coords to IWC coords. In fact,
-   we produce the Mapping from IWC to WCS and then invert it. Create the 
-   first component of this Mapping which implements any shift of origin 
-   from IWC to PPC. */
-            tmap0 = (AstMapping *) astShiftMap( nwcs, ppcfid, "", status );
-
-/* The next component of this Mapping scales the PPC coords from degrees 
-   to radians on the celestial axes. */
-            mat = astMalloc( sizeof( double )*(size_t) nwcs );
-            if( astOK ) {
-               for( iax = 0; iax < nwcs; iax++ ) mat[ iax ] = 1.0;
-               mat[ ilon ] = AST__DD2R;
-               mat[ ilat ] = AST__DD2R;
-               tmap1 = (AstMapping *) astMatrixMap( nwcs, nwcs, 1, mat, "", status );
-               mat = astFree( mat );
-            } else {
-               tmap1 = NULL;
-            }
-
-/* Now create the Mapping from Native Spherical Coords to WCS. */
-            tmap2 = WcsNative( NULL, store, s, map2b, fits_ilon, fits_ilat, 
-                               method, class, status );
-
-/* Combine the WcsMap with the above Mapping, to get the Mapping from PPC
-   to WCS. */
-            tmap3 = (AstMapping *) astCmpMap( map2b, tmap2, 1, "", status );
-            tmap2 = astAnnul( tmap2 );
-
-/* If there are more WCS axes than IWC axes, create aUnitMapfor the extra
-   WCS axes and add it in parallel with tmap3. */
-            nwcsmap = astGetNin( map3 );
-            if( nwcsmap < nwcs ) {
-               tmap2 = (AstMapping *) astUnitMap( nwcs - nwcsmap, "", status );
-               tmap4 = (AstMapping *) astCmpMap( tmap3, tmap2, 0, "", status );
-               tmap3 = astAnnul( tmap3 );
-               tmap2 = astAnnul( tmap2 );
-               tmap3 = tmap4;
-               nwcsmap = nwcs;
-            } 
-
-/* The pixel->wcs mapping may include a PermMap which selects some sub-set 
-   or super-set of the orignal WCS axes. In this case the number of inputs 
-   and outputs for "tmap3" created above may not equal "nwcs". To avoid this, 
-   we embed "tmap3" between 2 PermMaps which select the required axes. */
-            if( nwcsmap != nwcs || ilon != axlon || ilat != axlat ) {
-               inperm = astMalloc( sizeof( int )*(size_t) nwcs );
-               outperm = astMalloc( sizeof( int )*(size_t) nwcsmap );
-               if( astOK ) {
-
-/* Indicate that no inputs of the PermMap have yet been assigned to any
-   outputs */
-                  for( i = 0; i < nwcs; i++ ) inperm[ i ] = -1;
-
-/* Assign the WcsMap long/lat axes to the WCS Frame long/lat axes */
-                  inperm[ ilon ] = axlon;
-                  inperm[ ilat ] = axlat;
-
-/* Assign the remaining inputs arbitrarily (doesn't matter how we do this
-   since the WcsMap is effectively a UnitMap on all non-celestial axes). */
-                  iax = 0;
-                  for( i = 0; i < nwcs; i++ ) {
-                     while( iax == axlon || iax == axlat ) iax++;
-                     if( inperm[ i ] == -1 ) inperm[ i ] = iax++;
-                  }
-
-/* Do the same for the outputs. */
-                  for( i = 0; i < nwcsmap; i++ ) outperm[ i ] = -1;
-                  outperm[ axlon ] = ilon;
-                  outperm[ axlat ] = ilat;
-                  iax = 0;
-                  for( i = 0; i < nwcsmap; i++ ) {
-                     while( iax == ilon || iax == ilat ) iax++;
-                     if( outperm[ i ] == -1 ) outperm[ i ] = iax++;
-                  }
-
-/* Create the PermMap. */
-                  con = AST__BAD;
-                  tmap2 = (AstMapping *) astPermMap( nwcs, inperm, nwcsmap,
-                                                     outperm, &con, "", status );
-
-/* Sandwich the WcsMap between the PermMap and its inverse. */
-                  tmap4 = (AstMapping *) astCmpMap( tmap2, tmap3, 1, "", status );
-                  tmap3 = astAnnul( tmap3 );
-                  astInvert( tmap2 );
-                  tmap3 = (AstMapping *) astCmpMap( tmap4, tmap2, 1, "", status );
-                  tmap2 = astAnnul( tmap2 );
-                  tmap4 = astAnnul( tmap4 );
-
-               }
-
-               inperm = astFree( inperm );
-               outperm = astFree( outperm );
-
-            }
-
-/* Combine these Mappings together. */
-            tmap4 = (AstMapping *) astCmpMap( tmap0, tmap1, 1, "", status );
-            tmap0 = astAnnul( tmap0 );
-            tmap1 = astAnnul( tmap1 );
-            ret = (AstMapping *) astCmpMap( tmap4, tmap3, 1, "", status );
-            tmap3 = astAnnul( tmap3 );
-            tmap4 = astAnnul( tmap4 );
-
-/* Invert this Mapping to get the Mapping from WCS to IWC. */
-            astInvert( ret );
-
-/* The spherical rotation involved in converting WCS to IWC can result in
-   in appropriate numbering of the FITS axes. For instance, a LONPOLE
-   value of 90 degrees causes the IWC axes to be transposed. For this
-   reason we re-asses the FITS axis numbers assigned to the celestial
-   axes in order to make the IWC axes as close as possible to the pixel
-   axes with the same number. To do this, we need the Mapping from pixel
-   to IWC, which is formed by concatenating the pixel->WCS Mapping with the
-   WCS->IWC Mapping. */
-            tmap0 = (AstMapping *) astCmpMap( map, ret, 1, "", status );
-
-/* Find the outputs of this Mapping which should be associated with each
-   input. */
-            tperm = astMalloc( sizeof(int)*(size_t) nwcs );
-            WorldAxes( tmap0, dim, tperm, status );
-
-/* If the index associated with the celestial axes appear to have been 
-   swapped... */
-            if( astOK && fits_ilon == tperm[ ilat ] && 
-                         fits_ilat == tperm[ ilon ] ) {
-
-/* Swap the fits axis indices associated with each WCS axis to match. */
-               wperm[ ilon ] = fits_ilat;
-               wperm[ ilat ] = fits_ilon;
-
-/* Swap the stored CRVAL value for the longitude and latitude axis. */
-               val = GetItem( &(store->crval), fits_ilat, 0, s, NULL, method, class, status );
-               SetItem( &(store->crval), fits_ilat, 0, s, 
-                        GetItem( &(store->crval), fits_ilon, 0, s, NULL, 
-                        method, class, status ), status );
-               SetItem( &(store->crval), fits_ilon, 0, s, val, status );
-
-/* Swap the stored CTYPE value for the longitude and latitude axis. */
-               cval = GetItemC( &(store->ctype), fits_ilat, s, NULL, method, class, status );
-               if( cval ) {
-                  temp = astStore( NULL, (void *) cval, strlen( cval ) + 1 );
-                  cval = GetItemC( &(store->ctype), fits_ilon, s, NULL, method, class, status );
-                  if( cval ) {
-                     SetItemC( &(store->ctype), fits_ilat, s, cval, status );
-                     SetItemC( &(store->ctype), fits_ilon, s, temp, status );
-                  }
-                  temp = astFree( temp );
-               }
-
-/* Swap the stored CNAME value for the longitude and latitude axis. */
-               cval = GetItemC( &(store->cname), fits_ilat, s, NULL, method, class, status );
-               if( cval ) {
-                  temp = astStore( NULL, (void *) cval, strlen( cval ) + 1 );
-                  cval = GetItemC( &(store->cname), fits_ilon, s, NULL, method, class, status );
-                  if( cval ) {
-                     SetItemC( &(store->cname), fits_ilat, s, cval, status );
-                     SetItemC( &(store->cname), fits_ilon, s, temp, status );
-                  }
-                  temp = astFree( temp );
-               }
-
-/* Swap the projection parameters asociated with the longitude and latitude 
-   axes. */
-               maxm = GetMaxJM( &(store->pv), s, status );
-               for( m = 0; m <= maxm; m++ ){
-                  val = GetItem( &(store->pv), fits_ilat, m, s, NULL, method, class, status );
-                  SetItem( &(store->pv), fits_ilat, m, s, 
-                           GetItem( &(store->pv), fits_ilon, m, s, NULL, 
-                           method, class, status ), status );
-                  SetItem( &(store->pv), fits_ilon, m, s, val, status );
-               }
-            }
-             
-/* Release resources. */
-            map2b = astAnnul( map2b );
-            tperm = astFree( tperm );
-
-         }
-
-/* Release resources. */
-         map1 = astAnnul( map1 );
-         map2 = astAnnul( map2 );
-         map3 = astAnnul( map3 );
-      }
-      ppcfid = astFree( ppcfid );
-
-   }
-
-/* Release resources. */
-   wcsfrm = astAnnul( wcsfrm );
-   if( skyfrm ) skyfrm = astAnnul( skyfrm );
-   if( map ) map = astAnnul( map );
-
-/* If we have a Mapping to return, simplify it. Otherwise, create
-   a UnitMap to return. */
-   if( ret ) {
-      tmap0 = ret;
-      ret = astSimplify( tmap0 ); 
-      tmap0 =  astAnnul( tmap0 );
-   } else {
-      ret = (AstMapping *) astUnitMap( nwcs, "", status );
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int CheckFitsName( const char *name, const char *method, 
-                          const char *class, int *status ){
-/*
-*  Name:
-*     CheckFitsName
-
-*  Purpose:
-*     Check a keyword name conforms to FITS standards.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int CheckFitsName( const char *name, const char *method, 
-*                        const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     FITS keywords must contain between 1 and 8 characters, and each
-*     character must be an upper-case Latin alphabetic character, a digit,
-*     an underscore, or a hyphen. Leading, trailing or embedded white space
-*     is not allowed, with the exception of totally blank or null keyword 
-*     names.
-
-*  Parameters:
-*     name
-*        Pointer to a string holding the name to check. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 0 is returned if the supplied name was blank. A value of 1
-*     is returned otherwise.
-
-*  Notes:
-*     -  An error is reported if the supplied keyword name does not
-*     conform to FITS requirements, and zero is returned.
-
-*/
-
-/* Local Variables: */
-   const char *c;     /* Pointer to next character in name */
-   size_t n;          /* No. of characters in supplied name */
-   int ret;           /* Returned value */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise the returned value to indicate that the supplied name was
-   blank. */
-   ret = 0;
-
-/* Check that the supplied pointer is not NULL. */
-   if( name ){
-
-/* Get the number of characters in the name. */
-      n = strlen( name );
-
-/* Report an error if the name has too many characters in it. */
-      if( n > FITSNAMLEN ){
-         astError( AST__BDFTS, "%s(%s): The supplied FITS keyword name ('%s') "
-                   "has %d characters. FITS only allows up to %d.", status, method, 
-                   class, name, (int) n, FITSNAMLEN );                
-
-/* If the name has no characters in it, then assume it is a legal blank
-   keyword name. Otherwise, check that no illegal characters occur in the 
-   name. */
-      } else if( n != 0 ) {
-
-/* Whitespace is only allowed in the special case of a name consisting
-   entirely of whitespace. Such keywords are used to indicate that the rest 
-   of the card is a comment. Find the first non-whitespace character in the 
-   name. */
-         c = name;
-         while( isspace( ( int ) *(c++) ) );
-
-/* If the name is filled entirely with whitespace, then the name is acceptable 
-   as the special case. Otherwise, we need to do more checks. */
-         if( c - name - 1 < n ){
-
-/* Indicate that the supplied name is not blank. */
-            ret = 1;
-
-/* Loop round every character checking that it is one of the legal characters. 
-   Report an error if any illegal characters are found. */
-            c = name;
-            while( *c ){
-
-               if( !isFits( (int) *c ) ){
-
-                  if( *c == '=' ){
-                     astError( AST__BDFTS, "%s(%s): An equals sign ('=') was found "
-                               "before column %d within a FITS keyword name or header "
-                               "card.", status, method, class, FITSNAMLEN + 1 );                
-                  } else if( *c < ' ' ) {   
-                     astError( AST__BDFTS, "%s(%s): The supplied FITS keyword "
-                               "name ('%s') contains an illegal non-printing "
-                               "character (ascii value %d).", status, method, class, 
-                               name, *c );
-                  } else if( *c < ' ' ) {   
-                     astError( AST__BDFTS, "%s(%s): The supplied FITS keyword "
-                               "name ('%s') contains an illegal character ('%c').",
-                               status, method, class, name, *c );
-                  }
-                  break;
-               }
-               c++;
-            }         
-         }
-   
-      }
-      
-/* Report an error if no pointer was supplied. */
-   } else if( astOK ){
-      astError( AST__INTER, "CheckFitsName(fitschan): AST internal "
-                "error; a NULL pointer was supplied for the keyword name. ", 
-                status );
-   }
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void CheckZero( char *text, double value, int width, int *status ){
-/*
-*  Name:
-*     CheckZero
-
-*  Purpose:
-*     Ensure that the formatted value zero has no minus sign.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void CheckZero( char *text, double value, int width, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     There is sometimes a problem (perhaps only on DEC UNIX) when formatting 
-*     the floating-point value 0.0 using C. Sometimes it gives the string 
-*     "-0". This function fixed this by checking the first character of
-*     the supplied string (if the supplied value is zero), and shunting the
-*     remaining text one character to the right if it is a minus sign. It
-*     returns without action if the supplied value is not zero.
-*
-*     In addition, this function also rounds out long sequences of
-*     adjacent zeros or nines in the number.
-
-*  Parameters:
-*     text
-*        The formatted value.
-*     value
-*        The floating value which was formatted.
-*     width
-*        The minimum field width to use. The value is right justified in 
-*        this field width. Ignored if zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   char *c;
-
-/* Return if no text was supplied. */
-   if( !text ) return;
-
-/* If the numerical value is zero, check for the leading minus sign. */
-   if( value == 0.0 ) {
-
-/* Find the first non-space character. */
-      c = text;
-      while( *c && isspace( (int) *c ) ) c++;
-
-/* If the first non-space character is a minus sign, replace it with a
-      space. */
-      if( *c == '-' ) *c = ' ';
-
-/* Otherwise, round out sequences of zeros or nines. */
-   } else {
-      RoundFString( text, width, status );
-   }
-}
-
-static double ChooseEpoch( FitsStore *store, char s, const char *method, 
-                           const char *class, int *status ){
-/*
-*  Name:
-*     ChooseEpoch
-
-*  Purpose:
-*     Choose a FITS keyword value to use for the AST Epoch attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     double ChooseEpoch( FitsStore *store, char s, const char *method, 
-*                         const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function returns an MJD value in the TDB timescale, which can 
-*     be used as the Epoch value in an AST Frame. It uses the following 
-*     preference order: secondary MJD-AVG, primary MJD-AVG, secondary MJD-OBS, 
-*     primary MJD-OBS. Note, DATE-OBS keywords are converted into MJD-OBS 
-*     keywords by the SpecTrans function before this function is called.
-
-*  Parameters:
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     method
-*        The calling method. Used only in error messages.
-*     class 
-*        The object class. Used only in error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The MJD value.
-
-*  Notes:
-*     -  A value of AST__BAD is returned if an error occurs, or if none
-
-*     of the required keywords can be found in the FitsChan.
-
-*/
-
-/* Local Variables: */
-   double mjd;         /* The returned MJD */
-
-/* Initialise the returned value. */
-   mjd = AST__BAD;
-
-/* Check the global status. */
-   if( !astOK ) return mjd;
-
-/* Otherwise, try to get the secondary MJD-AVG value. */
-   mjd = GetItem( &(store->mjdavg), 0, 0, s, NULL, method, class, status );
-
-/* Otherwise, try to get the primary MJD-AVG value. */
-   if( mjd == AST__BAD ) mjd = GetItem( &(store->mjdavg), 0, 0, ' ', NULL, 
-                                        method, class, status );
-
-/* If the secondary MJD-OBS keyword is present in the FitsChan, gets its
-   value. */
-   if( mjd == AST__BAD ) mjd = GetItem( &(store->mjdobs), 0, 0, s, NULL, 
-                                        method, class, status );
-
-/* Otherwise, try to get the primary MJD-OBS value. */
-   if( mjd == AST__BAD ) mjd = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, 
-                                        method, class, status );
-
-/* Now convert the MJD value to the TDB timescale. */
-   mjd = TDBConv( mjd, store->timesys, 0, method, class, status );
-
-/* Return the answer. */
-   return mjd;
-}
-
-static int ChrLen( const char *string, int *status ){
-/*
-*  Name:
-*     ChrLen
-
-*  Purpose:
-*     Return the length of a string excluding any trailing white space.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int ChrLen( const char *string, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function returns the length of a string excluding any trailing
-*     white space, or non-printable characters.
-
-*  Parameters:
-*     string
-*        Pointer to the string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The length of a string excluding any trailing white space and
-*     non-printable characters.
-
-*  Notes:
-*     -  A value of zero is returned if a NULL pointer is supplied, or if an
-*     error has already occurred.
-
-*/
-
-/* Local Variables: */
-   const char *c;      /* Pointer to the next character to check */
-   int ret;            /* The returned string length */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise the returned string length. */
-   ret = 0;
-
-/* Check a string has been supplied. */
-   if( string ){
-
-/* Check each character in turn, starting with the last one. */
-      ret = strlen( string );
-      c = string + ret - 1;
-      while( ret ){
-         if( isprint( (int) *c ) && !isspace( (int) *c ) ) break;
-         c--;
-         ret--;
-      }
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int CLASSFromStore( AstFitsChan *this, FitsStore *store, 
-                           AstFrameSet *fs, double *dim, const char *method, 
-                           const char *class, int *status ){
-/*
-*  Name:
-*     CLASSFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using FITS-CLASS encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int CLASSFromStore( AstFitsChan *this, FitsStore *store, 
-*                         AstFrameSet *fs, double *dim, const char *method, 
-*                         const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using FITS-CLASS encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     fs
-*        Pointer to the FrameSet from which the values in the FitsStore
-*        were derived.
-*     dim
-*        Pointer to an array holding the main array dimensions (AST__BAD
-*        if a dimension is not known).
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   AstFrame *azelfrm;  /* (az,el) frame */
-   AstFrame *curfrm;   /* Current Frame in supplied FrameSet */
-   AstFrame *freqfrm;  /* Frame for reference frequency value */
-   AstFrame *radecfrm; /* Spatial frame for CRVAL values */
-   AstFrame *velofrm;  /* Frame for reference velocity value */
-   AstFrameSet *fsconv1;/* FrameSet connecting "curfrm" & "radecfrm" */
-   AstFrameSet *fsconv2;/* FrameSet connecting "curfrm" & "azelfrm" */
-   AstMapping *map1;   /* Axis permutation to get (lonaxis,lataxis) = (0,1) */
-   AstMapping *map2;   /* Mapping from FITS CTYPE to (az,el) */
-   AstMapping *map3;   /* Mapping from (lon,lat) to (az,el) */
-   char *comm;         /* Pointer to comment string */
-   char *cval;         /* Pointer to string keyword value */
-   char combuf[80];    /* Buffer for FITS card comment */
-   char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
-   char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
-   char s;             /* Co-ordinate version character */
-   char sign[2];       /* Fraction's sign character */
-   char spectype[MXCTYPELEN];/* Spectral axis CTYPE */
-   const char *srcsys; /* Pointer to rest frame string for source velocity */
-   double *cdelt;      /* Pointer to CDELT array */
-   double aval[ 2 ];   /* General purpose array */
-   double azel[ 2 ];   /* Reference (az,el) values */
-   double cdl;         /* CDELT term */
-   double cdlat_lon;   /* Off-diagonal CD element */
-   double cdlon_lat;   /* Off-diagonal CD element */
-   double crval[ 3 ];  /* CRVAL values converted to rads, etc */
-   double delta;       /* Spectral axis increment */
-   double equ;         /* Epoch of reference equinox */
-   double fd;          /* Fraction of a day */
-   double latval;      /* CRVAL for latitude axis */
-   double lonpole;     /* LONPOLE value */
-   double lonval;      /* CRVAL for longitude axis */
-   double mjd99;       /* MJD at start of 1999 */
-   double p1, p2;      /* Projection parameters */
-   double radec[ 2 ];  /* Reference (lon,lat) values */
-   double rf;          /* Rest freq (Hz) */
-   double specfactor;  /* Factor for converting internal spectral units */
-   double val;         /* General purpose value */
-   double xin[ 3 ];    /* Grid coords at centre of first pixel */
-   double xout[ 3 ];   /* WCS coords at centre of first pixel */
-   int axlat;          /* Index of latitude FITS WCS axis */
-   int axlon;          /* Index of longitude FITS WCS axis */
-   int axspec;         /* Index of spectral FITS WCS axis */
-   int i;              /* Axis index */
-   int ihmsf[ 4 ];     /* Hour, minute, second, fractional second */
-   int iymdf[ 4 ];     /* Year, month, date, fractional day */
-   int j;              /* Axis index */
-   int jj;             /* SlaLib status */
-   int naxis2;         /* Length of pixel axis 2 */
-   int naxis3;         /* Length of pixel axis 3 */
-   int naxis;          /* No. of axes */
-   int ok;             /* Is FitsSTore OK for IRAF encoding? */
-   int prj;            /* Projection type */
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Initialise */ 
-   specfactor = 1.0;
-   srcsys = NULL;
-
-/* First check that the values in the FitsStore conform to the
-   requirements of the CLASS encoding. Assume they do not to begin with. */
-   ok = 0;
-
-/* Just do primary axes. */
-   s = ' '; 
-
-/* Look for the primary celestial axes. */
-   FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* Spectral and celestial axes must be present in axes 1,2 and 3. */
-   if( axspec >= 0 && axspec < 3 &&
-       axlon >= 0 && axlon < 3 &&
-       axlat >= 0 && axlat < 3 ) {
-      ok = 1;
-
-/* If the spatial pixel axes are degenerate (i.e. span only a single
-   pixel), modify the CRPIX and CRVAL values in the FitsStore to put
-   the reference point at the centre of the one and only spatial pixel. */
-      if( dim[ axlon ] == 1.0 && dim[ axlat ] == 1.0 ){
-
-         xin[ 0 ] = 1.0;
-         xin[ 1 ] = 1.0;
-         xin[ 2 ] = 1.0;
-         astTranN( fs, 1, 3, 1, xin, 1, 3, 1, xout );
-
-         if( xout[ axlon ] != AST__BAD && xout[ axlat ] != AST__BAD ) {
-
-            SetItem( &(store->crval), axlon, 0, ' ', xout[ axlon ]*AST__DR2D, status );
-            SetItem( &(store->crval), axlat, 0, ' ', xout[ axlat ]*AST__DR2D, status );
-
-/* This assumes that the indices of the pixel axes that correspond to
-   WCS axes "axlon" and "axlat" are also "axlon" and "axlat". */
-            SetItem( &(store->crpix), 0, axlon, ' ', 1.0, status );
-            SetItem( &(store->crpix), 0, axlat, ' ', 1.0, status );
-
-         }
-      }
-
-/* Get the CRVAL values for both spatial axes. */
-      latval = GetItem( &( store->crval ), axlat, 0, s, NULL, method, class, status );
-      if( latval == AST__BAD ) ok = 0;
-      
-      lonval = GetItem( &( store->crval ), axlon, 0, s, NULL, method, class, status );
-      if( lonval == AST__BAD ) ok = 0;
-      
-/* Get the CTYPE values for both axes. Extract the projection type as 
-   specified by the last 4 characters in the latitude CTYPE keyword value. */
-      cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         strcpy( lontype, cval );
-      }
-
-      cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-         prj = AST__WCSBAD;
-      } else {
-         strcpy( lattype, cval );
-         prj = astWcsPrjType( cval + 4 );
-      }
-
-/* Check the projection type is OK. */
-      if( prj != AST__SIN ){
-   
-/* Check the projection code is OK. */
-         ok = 0;
-         if( prj == AST__TAN ||
-             prj == AST__ARC ||
-             prj == AST__STG ||
-             prj == AST__AIT ||
-             prj == AST__SFL ) {
-            ok = 1;
-
-/* For AIT, and SFL, check that the reference point is the origin of
-   the celestial co-ordinate system. */
-            if( prj == AST__AIT ||
-                prj == AST__SFL ) {
-               if( latval != 0.0 || lonval != 0.0 ){
-                  ok = 0;     
-
-/* Change the new SFL projection code to to the older equivalent GLS */
-               } else if( prj == AST__SFL ){
-                  (void) strcpy( lontype + 4, "-GLS" );
-                  (void) strcpy( lattype + 4, "-GLS" );
-
-/* Change the new AIT projection code to to the older equivalent ATF */
-               } else if( prj == AST__AIT ){
-                  (void) strcpy( lontype + 4, "-ATF" );
-                  (void) strcpy( lattype + 4, "-ATF" );
-               }
-            }
-         }
-
-/* SIN projections are only acceptable if the associated projection
-   parameters are both zero. */
-      } else {
-         p1 = GetItem( &( store->pv ), axlat, 1, s, NULL, method, class, status );
-         p2 = GetItem( &( store->pv ), axlat, 2, s, NULL, method, class, status );
-         if( p1 == AST__BAD ) p1 = 0.0;   
-         if( p2 == AST__BAD ) p2 = 0.0;   
-         ok = ( p1 == 0.0 && p2 == 0.0 );
-      }
-
-
-/* Identify the celestial coordinate system from the first 4 characters of the
-   longitude CTYPE value. Only RA and galactic longitude can be stored using 
-   FITS-CLASS. */
-      if( ok && strncmp( lontype, "RA--", 4 ) &&
-               strncmp( lontype, "GLON", 4 ) ) ok = 0;
-
-/* Get the CTYPE values for the spectral axis, and find the CLASS equivalent, 
-   if possible. */
-      cval = GetItemC( &(store->ctype), axspec, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else {
-         if( !strncmp( cval, "FREQ", astChrLen( cval ) ) ) {
-            strcpy( spectype, "FREQ" );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* If OK, check the SPECSYS value is SOURCE. */
-      cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else if( ok ) {
-         if( strncmp( cval, "SOURCE", astChrLen( cval ) ) ) ok = 0;
-      }
-
-/* If still OK, ensure the spectral axis units are Hz. */
-      cval = GetItemC( &(store->cunit), axspec, s, NULL, method, class, status );
-      if( !cval ) {
-         ok = 0;
-      } else if( ok ) {
-         if( !strcmp( cval, "Hz" ) ) {
-            specfactor = 1.0;
-         } else if( !strcmp( cval, "kHz" ) ) {
-            specfactor = 1.0E3;
-         } else if( !strcmp( cval, "MHz" ) ) {
-            specfactor = 1.0E6;
-         } else if( !strcmp( cval, "GHz" ) ) {
-            specfactor = 1.0E9;
-         } else {
-            ok = 0;
-         }
-      }
-   }
-
-/* Save the number of WCS axes */
-   naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* If this is larger than the number of pixel axes, ignore the surplus
-   WCS axes. */
-   if( naxis > store->naxis ) naxis = store->naxis;
-
-/* Allocate memory to store the CDELT values */
-   if( ok ) {
-      cdelt = (double *) astMalloc( sizeof(double)*naxis );
-      if( !cdelt ) ok = 0;
-   } else {
-      cdelt = NULL;
-   }
-
-/* Check that there is no rotation, and extract the CDELT (diagonal) terms, 
-   etc. If the spatial axes are degenerate (i.e. cover only a single pixel)
-   then ignore any rotation. */
-   if( !GetValue( this, FormatKey( "NAXIS", axlon + 1, -1, s, status ), AST__INT, 
-                  &naxis2, 0, 0, method, class, status ) ) {
-      naxis2 = 0;
-   }
-   if( !GetValue( this, FormatKey( "NAXIS", axlat + 1, -1, s, status ), AST__INT, 
-                  &naxis3, 0, 0, method, class, status ) ) {
-      naxis3 = 0;
-   }
-
-   cdlat_lon = 0.0;
-   cdlon_lat = 0.0;
-   for( i = 0; i < naxis && ok; i++ ){
-      cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-      if( cdl == AST__BAD ) cdl = 1.0;
-   
-      for( j = 0; j < naxis && ok; j++ ){
-          val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-          if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
-          val *= cdl;
-   
-          if( i == j ){
-             cdelt[ i ] = val;
-   
-          } else if( val != 0.0 ){
-             if( naxis2 != 1 || naxis3 != 1 ) ok = 0;
-          }
-      }
-   }
-
-/* Get RADECSYS and the reference equinox. */
-   cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-   equ = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* If RADECSYS was available... */
-   if( cval ){
-
-/* Only FK4 and FK5 are supported in this encoding. */
-      if( strcmp( "FK4", cval ) && strcmp( "FK5", cval ) ) ok = 0;
-      
-/* If epoch was not available, set a default epoch. */
-      if( equ == AST__BAD ){
-
-         if( !strcmp( "FK4", cval ) ){
-            equ = 1950.0;
-         } else if( !strcmp( "FK5", cval ) ){
-            equ = 2000.0;
-         } else {
-            ok = 0;
-         }
-
-/* If an epoch was supplied, check it is consistent with the IAU 1984
-   rule. */
-      } else {
-         if( !strcmp( "FK4", cval ) ){
-            if( equ >= 1984.0 ) ok = 0;
-         } else if( !strcmp( "FK5", cval ) ){
-            if( equ < 1984.0 ) ok = 0;
-         } else {
-            ok = 0;
-         }
-      }
-
-/* Check we have a rest frequency */
-      rf = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
-      if( rf == AST__BAD ) ok = 0;
-
-   }
-
-/* If the spatial Frame covers more than a single Frame and requires a LONPOLE 
-   or LATPOLE keyword, it cannot be encoded using FITS-CLASS. However since 
-   FITS-CLASS imposes a no rotation restriction, it can tolerate lonpole 
-   values of +/- 180 degrees. */
-   if( ok && ( naxis2 != 1 || naxis3 != 1 ) ) {
-      lonpole =  GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
-      if( lonpole != AST__BAD && lonpole != -180.0 && lonpole == 180 ) ok = 0;
-      if( GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status )
-          != AST__BAD ) ok = 0;
-   }
-
-/* Only create the keywords if the FitsStore conforms to the requirements
-   of the FITS-CLASS encoding. */
-   if( ok ) {
-
-/* Find the last WCS related card. */
-      FindWcs( this, 1, 1, 0, method, class, status );
-
-/* Get and save CRPIX for all pixel axes. These are required, so break
-   if they are not available. */
-      for( j = 0; j < naxis && ok; j++ ){
-         val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-         } else {
-            sprintf( combuf, "Reference pixel on axis %d", j + 1 );
-            SetValue( this, FormatKey( "CRPIX", j + 1, -1, s, status ), &val, 
-                      AST__FLOAT, combuf, status );
-         }
-      }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so 
-   break if they are not available. Note, the frequency axis CRVAL is
-   redefined by FITS-CLASS by reducing it by the RESTFREQ value. */
-      for( i = 0; i < naxis && ok; i++ ){
-         val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-         } else {
-            crval[ i ] = val;
-            if( i == axspec ) {
-               val *= specfactor;
-               val -= rf;
-            }
-            sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
-            SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val, 
-                      AST__FLOAT, combuf, status );
-         }
-      }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so 
-   break if they are not available. Use the potentially modified versions 
-   saved above for the celestial axes. */
-      for( i = 0; i < naxis && ok; i++ ){
-         if( i == axlat ) {
-            cval = lattype;
-         } else if( i == axlon ) {
-            cval = lontype;
-         } else if( i == axspec ) {
-            cval = spectype;
-         } else {
-            cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-         }
-         if( cval ){
-            comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-            if( !comm ) {            
-               sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
-               comm = combuf;
-            }
-            SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, 
-                      AST__STRING, comm, status );
-         } else {
-            ok = 0;
-         }
-      }
-
-/* CDELT values */
-      if( axspec != -1 ) cdelt[ axspec ] *= specfactor;
-      for( i = 0; i < naxis; i++ ){
-         SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), cdelt + i, 
-                   AST__FLOAT, "Pixel size", status );
-      }
-
-/* Reference equinox */
-      if( equ != AST__BAD ) SetValue( this, "EQUINOX", &equ, AST__FLOAT, 
-                                        "Epoch of reference equinox", status );
-
-/* Date of observation. */
-      val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
-      if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
-   keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
-   Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
-         palSlaCaldj( 99, 1, 1, &mjd99, &jj );
-         if( val < mjd99 ) {
-            palSlaDjcal( 0, val, iymdf, &jj );
-            sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ], 
-                     iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) ); 
-         } else {
-            palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
-            palSlaDd2tf( 3, fd, sign, ihmsf );
-            sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
-                     iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
-                     ihmsf[2], ihmsf[3] ); 
-         }
-
-/* Now store the formatted string in the FitsChan. */
-         cval = combuf;
-         SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
-                   "Date of observation", status );
-      }
-
-/* Rest frequency */
-      SetValue( this, "RESTFREQ", &rf, AST__FLOAT, "[Hz] Rest frequency", status );
-
-/* The image frequency corresponding to the rest frequency (only used for
-   double sideband data). */
-      val = GetItem( &(store->imagfreq), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) {
-         SetValue( this, "IMAGFREQ", &val, AST__FLOAT, "[Hz] Image frequency", status );
-      }      
-
-/* Ensure the FitsChan contains OBJECT and LINE headers */
-      if( !HasCard( this, "OBJECT", method, class, status ) ) {
-         cval = " ";
-         SetValue( this, "OBJECT", &cval, AST__STRING, NULL, status );
-      }
-      if( !HasCard( this, "LINE", method, class, status ) ) {
-         cval = " ";
-         SetValue( this, "LINE", &cval, AST__STRING, NULL, status );
-      }
-
-/* CLASS expects the VELO-LSR keyword to hold the radio velocity of the
-   reference channel (NOT of the source as I was told!!) with respect to
-   the LSRK rest frame. The "crval" array holds the frequency of the
-   reference channel in the source rest frame, so we need to convert this
-   to get the value for VELO-LSR. Create a SpecFrame describing the
-   required frame (other attributes such as Epoch etc are left unset and
-   so will be picked up from the supplied FrameSet). We set MinAxes
-   and MaxAxes so that the Frame can be used as a template to match the 3D
-   current Frame in the supplied FrameSet. */
-      velofrm = (AstFrame *) astSpecFrame( "System=vrad,StdOfRest=lsrk,"
-                                           "Unit=m/s,MinAxes=3,MaxAxes=3", status );
-
-/* Get the current Frame from the supplied FrameSet and find the spectral
-   axis using the above "velofrm" as a template. */
-      curfrm = astGetFrame( fs, AST__CURRENT );
-      fsconv1 = astFindFrame( curfrm, velofrm, "" );
-
-/* If OK, extract the SpecFrame from the returned FraneSet (this will
-   have the attribute values that were assigned explicitly to "velofrm"
-   and will have inherited all unset attributes from the supplied
-   FrameSet). */
-      if( fsconv1 ) {
-         velofrm = astAnnul( velofrm );
-         velofrm = astGetFrame( fsconv1, AST__CURRENT );
-         fsconv1 = astAnnul( fsconv1 );
-
-/* Take a copy of the velofrm and modify its attributes so that it
-   describes frequency in the sources rest frame in units of Hz. This is
-   the system that CLASS expects for the CRVAL3 keyword. */
-         freqfrm = astCopy( velofrm );
-         astSet( freqfrm, "System=freq,StdOfRest=Source,Unit=Hz", status );       
-
-/* Get a Mapping from frequency to velocity. */
-         fsconv1 = astConvert( freqfrm, velofrm, "" );
-         if( fsconv1 ) {
-
-/* Use this Mapping to convert the spectral crval value from frequency to
-   velocity. Also convert the value for the neighbouring channel. */
-            aval[ 0 ] = crval[ axspec ]*specfactor;
-            aval[ 1 ] = aval[ 0 ] + cdelt[ axspec ]*specfactor;
-            astTran1( fsconv1, 2, aval, 1, aval );
-
-/* Store the value. Also store it as VLSR since this keyword seems to be
-   used for the same thing. */
-            SetValue( this, "VELO-LSR", aval, AST__FLOAT, "[m/s] Reference velocity", status );
-            SetValue( this, "VLSR", aval, AST__FLOAT, "[m/s] Reference velocity", status );
-
-/* The DELTAV keyword holds the radio velocity channel spacing in the
-   LSR. */ 
-            delta = aval[ 1 ] - aval[ 0 ];
-            SetValue( this, "DELTAV", &delta, AST__FLOAT, "[m/s] Velocity resolution", status );
-
-/* Free remaining resources. */
-            fsconv1 = astAnnul( fsconv1 );            
-         }
-      }
-      velofrm = astAnnul( velofrm );
-
-/* AZIMUTH and ELEVATIO - the (az,el) equivalent of CRVAL. We need a
-   Mapping from the CTYPE spatial system to (az,el). This depends on all 
-   the extra info like telescope position, epoch, etc.  This info is in
-   the current Frame in the supplied FrameSet. First get a conversion 
-   from a sky frame with default axis ordering to the supplied Frame. All
-   the extra info is picked up from the supplied Frame since it is not set
-   in the template. */
-      radecfrm = (AstFrame *) astSkyFrame( "Permute=0,MinAxes=3,MaxAxes=3", status );
-      fsconv1 = astFindFrame( curfrm, radecfrm, "" );
-
-/* Now get conversion from the an (az,el) Frame to the supplied Frame. */
-      azelfrm = (AstFrame *) astSkyFrame( "System=AZEL,Permute=0,MinAxes=3,MaxAxes=3", status );
-      fsconv2 = astFindFrame( curfrm, azelfrm, "" );
-
-/* If both conversions werew possible, concatenate their Mappings to get
-   a Mapping from (lon,lat) in the CTYPE system, to (az,el). */
-      if( fsconv1 && fsconv2 ) {
-         map1 = astGetMapping( fsconv1, AST__CURRENT, AST__BASE );
-         map2 = astGetMapping( fsconv2, AST__BASE, AST__CURRENT );
-         map3 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-
-/* Store the CTYPE (ra,dec) values in the default order. */
-         radec[ 0 ] = crval[ axlon ]*AST__DD2R;
-         radec[ 1 ] = crval[ axlat ]*AST__DD2R;
-
-/* Transform to (az,el), normalise, convert to degrees and store. */
-         astTranN( map3, 1, 2, 1, radec, 1, 2, 1, azel );
-         if( azel[ 0 ] != AST__BAD && azel[ 1 ] != AST__BAD ) {
-            astNorm( azelfrm, azel );
-            azel[ 0 ] *= AST__DR2D;
-            azel[ 1 ] *= AST__DR2D;
-            SetValue( this, "AZIMUTH", azel, AST__FLOAT, "[Deg] Telescope azimuth", status );
-            SetValue( this, "ELEVATIO", azel + 1, AST__FLOAT, "[Deg] Telescope elevation", status );
-         }
-
-/* Free resources */
-         map1 = astAnnul( map1 );
-         map2 = astAnnul( map2 );
-         map3 = astAnnul( map3 );
-         fsconv1 = astAnnul( fsconv1 );
-         fsconv2 = astAnnul( fsconv2 );
-      }
-      radecfrm = astAnnul( radecfrm );
-      azelfrm = astAnnul( azelfrm );
-      curfrm = astAnnul( curfrm );
-
-   }
-
-/* Release CDELT workspace */
-   if( cdelt ) cdelt = (double *) astFree( (void *) cdelt );
-
-/* Return zero or ret depending on whether an error has occurred. */
-   return astOK ? ok : 0;
-}
-
-static void ClassTrans( AstFitsChan *this, AstFitsChan *ret, int axlat,
-                        int axlon, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     ClassTrans
-
-*  Purpose:
-*     Translated non-standard FITS-CLASS headers into equivalent standard
-*     ones.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void ClassTrans( AstFitsChan *this, AstFitsChan *ret, int axlat,
-*                      int axlon, const char *method, const char *class )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function extends the functionality of the SpecTrans function,
-*     by converting non-standard WCS keywords into standard FITS-WCS
-*     keywords, using the conventions of the FITS-CLASS encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the original header cards.
-*     ret
-*        Pointer to a FitsChan in which to return the standardised header 
-*        cards.
-*     axlat
-*        Zero-based index of the celestial latitude axis.
-*     axlon
-*        Zero-based index of the celestial longitude axis.
-*     method
-*        Pointer to string holding name of calling method.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-
-*/
-
-/* Local Variables: */
-   char *cval;                    /* Pointer to character string */
-   char newtype[ 10 ];            /* New CTYPE value */
-   const char *keyname;           /* Pointer to keyword name */
-   const char *ssyssrc;           /* Pointer to SSYSSRC keyword value string */
-   double crval;                  /* CRVAL value */
-   double restfreq;               /* Rest frequency (Hz) */
-   double v0;                     /* Ref channel velocity in source frame */
-   double vref;                   /* Ref channel velocity in LSR or whatever */
-   double vsource;                /* Source velocity */
-   double zsource;                /* Source redshift */
-   int axspec;                    /* Index of spectral axis */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the rest frequency. */
-   restfreq = AST__BAD;
-   if( !GetValue2( ret, this, "RESTFRQ", AST__FLOAT, (void *) &restfreq, 0, 
-                  method, class, status ) ){
-      GetValue2( ret, this, "RESTFREQ", AST__FLOAT, (void *) &restfreq, 0, 
-                  method, class, status );
-   }
-
-   if( restfreq == AST__BAD ) {
-      astError( AST__BDFTS, "%s(%s): Keyword RESTFREQ not found in CLASS "
-                "FITS header.", status, method, class );
-   }
-
-/* Get the index of the spectral axis. */
-   if( axlat + axlon == 1 ) {
-      axspec = 2;
-   } else if( axlat + axlon == 3 ) {
-      axspec = 0;
-   } else {
-      axspec = 1;
-   }
-
-/* Get the spectral CTYPE value */
-   if( GetValue2( ret, this, FormatKey( "CTYPE", axspec + 1, -1, ' ', status ),
-                  AST__STRING, (void *) &cval, 0, method, class, status ) ){
-
-/* We can only handle frequency axes at the moment. */
-      if( strcmp( "FREQ    ", cval ) ) {
-         astError( AST__BDFTS, "%s(%s): FITS-CLASS keyword %s has value "
-                   "\"%s\" - CLASS support in AST only includes \"FREQ\" axes.", status,
-                   method, class, FormatKey( "CTYPE", axspec + 1, -1, ' ', status ),
-                   cval );
-
-/* CRVAL for the spectral axis needs to be incremented by RESTFREQ if the
-   axis represents frequency. */
-      } else {
-         keyname = FormatKey( "CRVAL", axspec + 1, -1, ' ', status );
-         if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &crval, 1, 
-                        method, class, status ) ) {
-            crval += restfreq;      
-            SetValue( ret, keyname, (void *) &crval, AST__FLOAT, NULL, status );
-         }
-      } 
-
-/* CLASS frequency axes describe source frame frequencies. */
-      cval = "SOURCE";
-      SetValue( ret, "SPECSYS", (void *) &cval, AST__STRING, NULL, status );
-
-   }
-
-/* If no projection code is supplied for the longitude and latitude axes, 
-   use "-GLS". This will be translated to "-SFL" by SpecTrans. */
-   keyname = FormatKey( "CTYPE", axlon + 1, -1, ' ', status );
-   if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, method, 
-                  class, status ) ){
-      if( !strncmp( "    ", cval + 4, 4 ) ) {
-         strncpy( newtype, cval, 4 );
-         strcpy( newtype + 4, "-GLS" );
-         cval = newtype;
-         SetValue( ret, keyname, (void *) &cval, AST__STRING, NULL, status );
-      }
-   }
-
-   keyname = FormatKey( "CTYPE", axlat + 1, -1, ' ', status );
-   if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, method, 
-                  class, status ) ){
-      if( !strncmp( "    ", cval + 4, 4 ) ) {
-         strncpy( newtype, cval, 4 );
-         strcpy( newtype + 4, "-GLS" );
-         cval = newtype;
-         SetValue( ret, keyname, (void *) &cval, AST__STRING, NULL, status );
-      }
-   }
-
-/* Look for a keyword with name "VELO-...". This specifies the radio velocity
-   at the reference channel, in a standard of rest specified by the "..." 
-   in the keyword name. */
-   if( GetValue2( ret, this, "VELO-%3c", AST__FLOAT, (void *) &vref, 0, 
-                  method, class, status ) ){
-
-/* Calculate the radio velocity (in the rest frame of the source) corresponding
-   to the frequency at the reference channel. */
-      v0 = AST__C*( restfreq - crval )/restfreq;
-
-/* Assume that the source velocity is the difference between this velocity 
-   and the reference channel velocity given by "VELO-..." */
-      vsource = vref - v0;
-
-/* Get the keyword name and find the corresponding SSYSSRC keyword value. */
-      keyname = CardName( this, status );
-      if( !strcmp( keyname, "VELO-HEL" ) ) {
-         ssyssrc = "BARYCENT";
-      } else if( !strcmp( keyname, "VELO-OBS" ) || !strcmp( keyname, "VELO-TOP" ) ) {
-         ssyssrc = "TOPOCENT";
-      } else if( !strcmp( keyname, "VELO-EAR" ) || !strcmp( keyname, "VELO-GEO" ) ) {
-         ssyssrc = "GEOCENTR";
-      } else {
-         ssyssrc = "LSRK";
-      }
-      SetValue( ret, "SSYSSRC", (void *) &ssyssrc, AST__STRING, NULL, status );
-
-/* Convert from radio velocity to redshift and store as ZSOURCE */
-      zsource = ( AST__C / (AST__C - vsource) ) - 1.0;
-      SetValue( ret, "ZSOURCE", (void *) &zsource, AST__FLOAT, NULL, status );
-   }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astClearAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     FitsChan, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   int len;                      /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Card. */
-/* ----- */
-   if ( !strcmp( attrib, "card" ) ) {
-      astClearCard( this );
-
-/* Encoding. */
-/* --------- */
-   } else if ( !strcmp( attrib, "encoding" ) ) {
-      astClearEncoding( this );
-
-/* CDMatrix */
-/* -------- */
-   } else if ( !strcmp( attrib, "cdmatrix" ) ) {
-      astClearCDMatrix( this );
-
-/* FitsDigits. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "fitsdigits" ) ) {
-      astClearFitsDigits( this );
-
-/* DefB1950 */
-/* -------- */
-   } else if ( !strcmp( attrib, "defb1950" ) ) {
-      astClearDefB1950( this );
-
-/* CarLin */
-/* ------ */
-   } else if ( !strcmp( attrib, "carlin" ) ) {
-      astClearCarLin( this );
-
-/* Iwc */
-/* --- */
-   } else if ( !strcmp( attrib, "iwc" ) ) {
-      astClearIwc( this );
-
-/* Clean */
-/* ----- */
-   } else if ( !strcmp( attrib, "clean" ) ) {
-      astClearClean( this );
-
-/* Warnings. */
-/* -------- */
-   } else if ( !strcmp( attrib, "warnings" ) ) {
-      astClearWarnings( this );
-
-/* If the name was not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then report an
-   error. */
-   } else if ( astOK && ( !strcmp( attrib, "ncard" ) || 
-                          !strcmp( attrib, "allwarnings" ) ) ){
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearCard( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astClearCard
-
-*  Purpose:
-*     Clear the Card attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void astClearCard( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function clears the Card attribute for the supplied FitsChan by 
-*     setting it to the index of the first un-used card in the FitsChan. 
-*     This causes the next read operation performed on the FitsChan to 
-*     read the first card. Thus, it is equivalent to "rewinding" the FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has occurred.
-*-
-*/
-
-/* Local Variables; */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Check the supplied FitsChan. If its is empty, return. */
-   if ( !this || !(this->head) ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Set the pointer to the current card so that it points to the card at
-   the head of the list. */
-   this->card = this->head;
-
-/* If the current card has been read into an AST object, move on to the 
-   first card which has not, unless we are not skipping such cards. */
-
-   if( CARDUSED(this->card) ){
-      MoveCard( this, 1, "astClearCard", astGetClass( this ), status );
-   }
-
-}
-
-static int CnvValue( AstFitsChan *this, int type, int undef, void *buff, 
-                     const char *method, int *status ){
-/*
-*
-*  Name:
-*     CnvValue
-
-*  Purpose:
-*     Convert a data value into a given FITS data type.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int CnvValue( AstFitsChan *this, int type, int undef, void *buff, 
-*                   const char *method, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function produces a copy of the data value for the current card 
-*     converted from its stored data type to the supplied data type.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     type
-*        The FITS data type in which to return the data value of the
-*        current card.
-*     undef
-*        Determines what happens if the current card has an undefined
-*        value. If "undef" is zero, an error will be reported identifying 
-*        the undefined keyword value. If "undef" is non-zero, no error is
-*        reported and the contents of the output buffer are left unchanged.
-*     buf
-*        A pointer to a buffer to recieve the converted value. It is the
-*        responsibility of the caller to ensure that a suitable buffer is
-*        supplied.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the conversion was not possible (in which case NO error is
-*     reported), one otherwise.
-
-*  Notes: 
-*     -  When converting from floating point to integer, the  floating
-*     point value is truncated using a C cast.
-*     -  Non-zero numerical values are considered TRUE, and zero
-*     numerical values are considered FALSE. Any string starting with a
-*     'T' or a 'Y' (upper or lower case) is considered TRUE, and anything 
-*     starting with an 'F' or an 'N' (upper or lower case) is considered
-*     FALSE. In addition, a dot ('.') may be placed in front of a 'T' or an
-*     'F'.
-*     -  A logical TRUE value is represented as a real numerical value of
-*     one and the character string "Y". A logical FALSE value is represented 
-*     by a real numerical value of zero and the character string "N".
-*     -  When converting from a string to any numerical value, zero is
-*     returned if the string is not a formatted value which can be converted 
-*     into the corresponding type using astSscanf.
-*     - Real and imaginary parts of a complex value should be separated by 
-*     spaces within strings. If a string does contains only a single numerical 
-*     value, it is assumed to be the real part, and the imaginary part is 
-*     assumed to be zero.
-*     -  When converting a complex numerical type to a non-complex numerical 
-*     type, the returned value is derived from the real part only, the 
-*     imaginary part is ignored.
-*     -  Zero is returned if an error has occurred, or if this function
-*     should fail for any reason.
-*     - If the supplied value is undefined an error will be reported.
-*/
-
-/* Local Variables: */
-   int otype;               /* Stored data type */
-   size_t osize;            /* Size of stored data */
-   void *odata;             /* Pointer to stored data */
-
-/* Check the global error status, and the supplied buffer. */
-   if ( !astOK || !buff ) return 0; 
-
-/* Get the type in which the data value is stored. */
-   otype = CardType( this, status );
-
-/* Get a pointer to the stored data value, and its size. */
-   osize = 0;
-   odata = CardData( this, &osize, status );
-
-/* Do the conversion. */
-   return CnvType( otype, odata, osize, type, undef, buff, 
-                   CardName( this, status ), method, astGetClass( this ), 
-                   status );
-}
-
-static int CnvType( int otype, void *odata, size_t osize, int type, int undef,
-                     void *buff, const char *name, const char *method, 
-                     const char *class, int *status ){
-/*
-*
-*  Name:
-*     CnvType
-
-*  Purpose:
-*     Convert a data value into a given FITS data type.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int CnvType( int otype, void *odata, size_t osize, int type, int undef,
-*                   void *buff, const char *name, const char *method, 
-*                   const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function produces a copy of the data value for the current card 
-*     converted from its stored data type to the supplied data type.
-
-*  Parameters:
-*     otype
-*        The type of the supplied data value.
-*     odata
-*        Pointer to a buffer holding the supplied data value.
-*     osize
-*        The size of the data value (in bytes - strings include the
-*        terminating null).
-*     type
-*        The FITS data type in which to return the data value of the
-*        current card.
-*     undef
-*        Determines what happens if the supplied data value type is 
-*        undefined If "undef" is zero, an error will be reported identifying 
-*        the undefined keyword value. If "undef" is non-zero, no error is
-*        reported and the contents of the output buffer are left unchanged.
-*     buff
-*        A pointer to a buffer to recieve the converted value. It is the
-*        responsibility of the caller to ensure that a suitable buffer is
-*        supplied.
-*     name
-*        A pointer to a string holding a keyword name to include in error
-*        messages.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class
-*        Pointer to a string holding the name of the object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the conversion was not possible (in which case NO error is
-*     reported), one otherwise.
-
-*  Notes: 
-*     -  When converting from floating point to integer, the  floating
-*     point value is truncated using a C cast.
-*     -  Non-zero numerical values are considered TRUE, and zero
-*     numerical values are considered FALSE. Any string starting with a
-*     'T' or a 'Y' (upper or lower case) is considered TRUE, and anything 
-*     starting with an 'F' or an 'N' (upper or lower case) is considered
-*     FALSE. In addition, a dot ('.') may be placed in front of a 'T' or an
-*     'F'.
-*     -  A logical TRUE value is represented as a real numerical value of
-*     one and the character string "Y". A logical FALSE value is represented 
-*     by a real numerical value of zero and the character string "N".
-*     -  When converting from a string to any numerical value, zero is
-*     returned if the string isn not a formatted value which can be converted 
-*     into the corresponding type using astSscanf.
-*     - Real and imaginary parts of a complex value should be separated by 
-*     spaces within strings. If a string does contains only a single numerical 
-*     value, it is assumed to be the real part, and the imaginary part is 
-*     assumed to be zero.
-*     -  When converting a complex numerical type to a non-complex numerical 
-*     type, the returned value is derived from the real part only, the 
-*     imaginary part is ignored.
-*     -  Zero is returned if an error has occurred, or if this function
-*     should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   const char *c;           /* Pointer to next character */
-   const char *ostring;     /* String data value */
-   double odouble;          /* Double data value */
-   int oint;                /* Integer data value */
-   int ival;                /* Integer value read from string */
-   int len;                 /* Length of character string */
-   int nc;                  /* No. of characetsr used */
-   int ret;                 /* Returned success flag */
-
-/* Check the global error status, and the supplied buffer. */
-   if ( !astOK || !buff ) return 0; 
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Assume success. */
-   ret = 1;
-
-/* If the supplied data type is undefined, report an error unless the
-   returned data type is also undefined or an undefined value is
-   acceptable for the keyword. */
-   if( otype == AST__UNDEF ) {
-      if( type != AST__UNDEF && !undef ) {
-         ret = 0;
-         astError( AST__FUNDEF, "The FITS keyword '%s' has an undefined "
-                   "value.", status, name );
-      }
-
-/* If the returned data type is undefined, the returned value is
-   immaterial, so leave the buffer contents unchanged. */
-   } else if( type == AST__UNDEF ) {
-
-/* If there is no data value and this is not a COMMENT keyword, or if
-   there is a data value and this is a COMMENT card, conversion is not
-   possible. */
-   } else if( ( odata && otype == AST__COMMENT ) ||
-              ( !odata && otype != AST__COMMENT ) ) {
-      ret = 0;
-
-/* If there is no data (and therefore this is a comment card), leave the 
-   supplied buffers unchanged. */
-   } else if( odata ) {
-
-/* Do each possible combination of supplied and stored data types... */
-
-/* Convert a AST__FLOAT data value to ... */
-      if( otype == AST__FLOAT ){
-         odouble = *( (double *) odata );
-
-         if( type == AST__FLOAT ){
-            (void) memcpy( buff, odata, osize );
-   
-         } else if( type == AST__STRING || type == AST__CONTINUE  ){
-            (void) sprintf( cnvtype_text, "%.*g", DBL_DIG, odouble );
-            CheckZero( cnvtype_text, odouble, 0, status );
-            *( (char **) buff ) = cnvtype_text;
-
-         } else if( type == AST__INT      ){
-            *( (int *) buff ) = (int) odouble;
-
-         } else if( type == AST__LOGICAL  ){
-            *( (int *) buff ) = ( odouble == 0.0 ) ? 0 : 1;
-
-         } else if( type == AST__COMPLEXF ){
-            ( (double *) buff )[ 0 ] = odouble;
-            ( (double *) buff )[ 1 ] = 0.0;
-
-         } else if( type == AST__COMPLEXI ){
-            ( (int *) buff )[ 0 ] = (int) odouble;
-            ( (int *) buff )[ 1 ] = 0;
-
-         } else if( astOK ){
-            ret = 0;
-            astError( AST__INTER, "CnvType: AST internal programming error - "
-                      "FITS data-type no. %d not yet supported.", status, type );
-         }
-
-/* Convert a AST__STRING data value to ... */
-      } else if( otype == AST__STRING || type == AST__CONTINUE ){
-         ostring = (char *) odata;
-         len = (int) strlen( ostring );
-
-         if( type == AST__FLOAT ){
-            if( nc = 0, 
-                     ( 1 != astSscanf( ostring, "%lf %n", (double *) buff, &nc ) )
-                  || (nc < len ) ){
-               ret = 0;
-            }
-
-         } else if( type == AST__STRING || type == AST__CONTINUE  ){
-            strncpy( cnvtype_text, (char *) odata, AST__FITSCHAN_FITSCARDLEN );
-            *( (char **) buff ) = cnvtype_text;
-
-         } else if( type == AST__INT      ){
-            if( nc = 0, 
-                     ( 1 != astSscanf( ostring, "%d %n", (int *) buff, &nc ) )
-                  || (nc < len ) ){
-               ret = 0;
-            }
-
-         } else if( type == AST__LOGICAL  ){
-            if( nc = 0, 
-                     ( 1 == astSscanf( ostring, "%d %n", &ival, &nc ) )
-                  && (nc >= len ) ){
-               *( (int *) buff ) = ival ? 1 : 0;               
-
-            } else {
-               c = ostring;
-               while( *c && isspace( (int) *c ) ) c++;
-
-               if( *c == 'y' || *c == 'Y' || *c == 't' || *c == 'T' ||
-                   ( *c == '.' && ( c[1] == 't' || c[1] == 'T' ) ) ){
-                  *( (int *) buff ) = 1;
-
-               } else if( *c == 'n' || *c == 'N' || *c == 'f' || *c == 'F' ||
-                   ( *c == '.' && ( c[1] == 'f' || c[1] == 'F' ) ) ){
-                  *( (int *) buff ) = 0;
-               } else {
-                  ret = 0;
-               }
-            } 
-
-         } else if( type == AST__COMPLEXF ){
-            if( nc = 0, 
-                     ( 1 != astSscanf( ostring, "%lf %lf %n", (double *) buff, 
-                                    (double *) buff + 1, &nc ) )
-                  || (nc < len ) ){
-
-               if( nc = 0, 
-                        ( 1 != astSscanf( ostring, "%lf %n", (double *) buff, 
-                                       &nc ) )
-                     || (nc < len ) ){
-                  ret = 0;
-               } else {
-                  ( (double *) buff )[ 1 ] = 0.0;
-               }
-
-            }
-
-         } else if( type == AST__COMPLEXI ){
-            if( nc = 0, 
-                    ( 1 != astSscanf( ostring, "%d %d %n", (int *) buff, 
-                                   (int *) buff + 1, &nc ) )
-                   || (nc < len ) ){
-
-               if( nc = 0, 
-                        ( 1 != astSscanf( ostring, "%d %n", (int *) buff, &nc ) )
-                     || (nc < len ) ){
-
-                  ret = 0;
-               } else {
-                  ( (int *) buff )[ 1 ] = 0;
-               }
-
-            }
-
-         } else if( astOK ){
-            ret = 0;
-            astError( AST__INTER, "CnvType: AST internal programming error - "
-                      "FITS data-type no. %d not yet supported.", status, type );
-         }
-
-/* Convert an AST__INT data value to ... */
-      } else if( otype == AST__INT      ){
-         oint = *( (int *) odata );
-
-         if( type == AST__FLOAT ){
-            *( (double *) buff ) = (double) oint;
-
-         } else if( type == AST__STRING || type == AST__CONTINUE  ){
-            (void) sprintf( cnvtype_text, "%d", oint );
-            *( (char **) buff ) = cnvtype_text;
-
-         } else if( type == AST__INT      ){
-            (void) memcpy( buff, odata, osize );
-
-         } else if( type == AST__LOGICAL  ){
-            *( (int *) buff ) = oint ? 1 : 0;
-
-         } else if( type == AST__COMPLEXF ){
-            ( (double *) buff )[ 0 ] = (double) oint;
-            ( (double *) buff )[ 1 ] = 0.0;
-
-         } else if( type == AST__COMPLEXI ){
-            ( (int *) buff )[ 0 ] = oint;
-            ( (int *) buff )[ 1 ] = 0;
-
-         } else if( astOK ){
-            ret = 0;
-            astError( AST__INTER, "CnvType: AST internal programming error - "
-                      "FITS data-type no. %d not yet supported.", status, type );
-         }
-
-/* Convert a LOGICAL data value to ... */
-      } else if( otype == AST__LOGICAL  ){
-         oint = *( (int *) odata );
-         
-         if( type == AST__FLOAT ){
-            *( (double *) buff ) = oint ? 1.0 : 0.0;
-
-         } else if( type == AST__STRING || type == AST__CONTINUE  ){
-            if( oint ){
-               strcpy( cnvtype_text, "Y" );
-            } else {
-               strcpy( cnvtype_text, "N" );
-            }
-            *( (char **) buff ) = cnvtype_text;
-
-         } else if( type == AST__INT      ){
-            *( (int *) buff ) = oint;
-
-         } else if( type == AST__LOGICAL  ){
-            (void) memcpy( buff, odata, osize );
-
-         } else if( type == AST__COMPLEXF ){
-            ( (double *) buff )[ 0 ] = oint ? 1.0 : 0.0;
-            ( (double *) buff )[ 1 ] = 0.0;
-
-         } else if( type == AST__COMPLEXI ){
-            ( (int *) buff )[ 0 ] = oint ? 1 : 0;
-            ( (int *) buff )[ 1 ] = 0;
-
-         } else if( astOK ){
-            ret = 0;
-            astError( AST__INTER, "CnvType: AST internal programming error - "
-                      "FITS data-type no. %d not yet supported.", status, type );
-         }
-
-/* Convert a AST__COMPLEXF data value to ... */
-      } else if( otype == AST__COMPLEXF ){
-         odouble = ( (double *) odata )[ 0 ];
-
-         if( type == AST__FLOAT ){
-            *( (double *) buff ) = odouble;
-   
-         } else if( type == AST__STRING || type == AST__CONTINUE  ){
-            (void) sprintf( cnvtype_text0, "%.*g", DBL_DIG, ( (double *) odata )[ 0 ] );
-            CheckZero( cnvtype_text0, ( (double *) odata )[ 0 ], 0, status );
-            (void) sprintf( cnvtype_text1, "%.*g", DBL_DIG, ( (double *) odata )[ 1 ] );
-            CheckZero( cnvtype_text1, ( (double *) odata )[ 1 ], 0, status );
-            (void) sprintf( cnvtype_text, "%s %s", cnvtype_text0, cnvtype_text1 );
-            *( (char **) buff ) = cnvtype_text;
-
-         } else if( type == AST__INT      ){
-            *( (int *) buff ) = (int) odouble;
-
-         } else if( type == AST__LOGICAL  ){
-            *( (int *) buff ) = ( odouble == 0.0 ) ? 0 : 1;
-
-         } else if( type == AST__COMPLEXF ){
-            (void) memcpy( buff, odata, osize );
-
-         } else if( type == AST__COMPLEXI ){
-            ( (int *) buff )[ 0 ] = (int) odouble;
-            ( (int *) buff )[ 1 ] = (int) ( (double *) odata )[ 1 ];
-
-         } else if( astOK ){
-            ret = 0;
-            astError( AST__INTER, "CnvType: AST internal programming error - "
-                      "FITS data-type no. %d not yet supported.", status, type );
-         }
-
-/* Convert a AST__COMPLEXI data value to ... */
-      } else if( otype == AST__COMPLEXI ){
-         oint = ( (int *) odata )[ 0 ];
-
-         if( type == AST__FLOAT ){
-            *( (double *) buff ) = (double) oint;
-
-         } else if( type == AST__STRING || type == AST__CONTINUE  ){
-            (void) sprintf( cnvtype_text, "%d %d", ( (int *) odata )[ 0 ],
-                                           ( (int *) odata )[ 1 ] );
-            *( (char **) buff ) = cnvtype_text;
-
-         } else if( type == AST__INT      ){
-            *( (int *) buff ) = oint;
-
-         } else if( type == AST__LOGICAL  ){
-            *( (int *) buff ) = oint ? 1 : 0;
-
-         } else if( type == AST__COMPLEXF ){
-            ( (double *) buff )[ 0 ] = (double) oint;
-            ( (double *) buff )[ 1 ] = (double) ( (int *) odata )[ 1 ];
-
-         } else if( type == AST__COMPLEXI ){
-            (void) memcpy( buff, odata, osize );
-
-         } else if( astOK ){
-            ret = 0;
-            astError( AST__INTER, "CnvType: AST internal programming error - "
-                      "FITS data-type no. %d not yet supported.", status, type );
-         }
-
-      } else if( astOK ){
-         ret = 0;
-         astError( AST__INTER, "CnvType: AST internal programming error - "
-                   "FITS data-type no. %d not yet supported.", status, type );
-      }
-
-   }
-
-   return ret;
-
-}
-
-static int ComBlock( AstFitsChan *this, int incr, const char *method,
-                     const char *class, int *status ){
-/*
-*  Name:
-*     ComBlock
-
-*  Purpose:
-*     Delete a AST comment block in a Native-encoded FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int ComBlock( AstFitsChan *this, int incr, const char *method,
-*                   const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function looks for a block of comment cards as defined below,
-*     and deletes all the cards in the block, if a suitable block is found.
-*
-*     Comment blocks consist of a contiguous sequence of COMMENT cards. The 
-*     text of each card should start and end with the 3 characters "AST".
-*     The block is delimited above by a card containing all +'s (except
-*     for the two "AST" strings), and below by a card containing all -'s.
-*     
-*     The block is assumed to start on the card which is adjacent to the
-*     current card on entry.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     incr
-*        This should be either +1 or -1, and is the increment between
-*        adjacent cards in the comment block. A value of +1 means
-*        that the card following the current card is taken as the first in 
-*        the block, and subsequent cards are checked. The block must then
-*        end with a line of -'s. If -1 is supplied, then the card
-*        preceding the current card is taken as the first in the block,
-*        and preceding cards are checked. The block must then end with
-*        a row of +'s.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if a block was found and deleted, 0 otherwise.
-
-*  Notes:
-*     -  The pointer to the current card is returned unchanged.
-*/
-
-/* Local Variables: */
-   FitsCard *card0;              /* Pointer to current FitsCard on entry */
-   char del;                     /* Delimiter character */
-   char *text;                   /* Pointer to the comment text */
-   int i;                        /* Card index within the block */
-   int ncard;                    /* No. of cards in the block */
-   int ret;                      /* The returned flag */   
-   size_t len;                   /* Length of the comment text */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Save the pointer to the current card. */
-   card0 = this->card;
-
-/* Initialise the returned flag to indicate that we have not found a
-   comment block. */
-   ret = 0;
-
-/* Move on to the first card in the block. If this is not possible (due to 
-   us already being at the start or end of the FitsChan), then return. */
-   if( MoveCard( this, incr, method, class, status ) == 1 ) {
-
-/* Store the character which is used in the delimiter line for the
-   comment block. */
-      del = ( incr == 1 ) ? '-' : '+';
-
-/* Initialise the number of cards in the comment block to zero. */
-      ncard = 0;
-
-/* Loop round until the end (or start) of the comment block is found.
-   Leave the loop if an error occurs.  */
-      while( astOK ) {
-
-/* Is this card a comment card? If not, then we have failed to find a 
-   complete comment block. Break out of the loop. */
-         if( CardType( this, status ) != AST__COMMENT ) break;
-
-/* Increment the number of cards in the comment block. */
-         ncard++;
-
-/* Get the text of the comment, and its length. */
-         text = CardComm( this, status );
-         if( text ){
-            len = strlen( text );
-
-/* Check the first 3 characters. Break out of the loop if they are not
-   "AST". */
-            if( strncmp( "AST", text, 3 ) ) break;
-
-/* Check the last 3 characters. Break out of the loop if they are not
-   "AST". */
-            if( strcmp( "AST", text + len - 3 ) ) break;
-
-/* If the comment is the appropriate block delimiter (a line of +'s or
-   -'s depending on the direction), then set the flag to indicate that we
-   have a complete comment block and leave the loop. Allow spaces to be
-   included. Exclude the "AST" strings at begining and end from the check. */
-            ret = 1;
-            for( i = 3; i < len - 3; i++ ) {
-               if( text[ i ] != del && text[ i ] != ' ' ) {
-                  ret = 0;
-                  break;
-               }
-            }
-         }
-
-         if( ret ) break;
-
-/* Move on to the next card. If this is not possible (due to us already
-   being at the start or end of the FitsChan), then break out of the loop. */
-         if( MoveCard( this, incr, method, class, status ) == 0 ) break;
-
-      }
-
-/* Re-instate the original current card. */
-      this->card = card0;
-
-/* If we found a complete comment block, mark it (which is equivalent to
-   deleting it except that memory of the cards location within the
-   FitsChan is preserved for future use), and then re-instate the original 
-   current card. */
-      if( ret && astOK ) {
-
-         for( i = 0; i < ncard; i++ ) {
-            MoveCard( this, incr, method, class, status );
-            MarkCard( this, status );
-         }
-
-         this->card = card0;
-
-      }
-   }
-
-/* If an error occurred, indicate that coment block has been deleted. */
-   if( !astOK ) ret = 0;
-
-   return ret;
-
-}
-
-static int CountFields( const char *temp, char type, const char *method, 
-                        const char *class, int *status ){
-/*
-*  Name:
-*     CountFields
-
-*  Purpose:
-*     Count the number of field specifiers in a template string. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int CountFields( const char *temp, char type, const char *method, 
-*                      const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns the number of fields which include the
-*     specified character type in the supplied string.
-
-*  Parameters:
-*     temp
-*        Pointer to a null terminated string holding the template.
-*     type
-*        A single character giving the field type to be counted (e.g.
-*        'd', 'c' or 'f').
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of fields.
-
-*  Notes:
-*     -  No error is reported if the parameter "type" is not a valid
-*     field type specifier, but zero will be returned.
-*     -  An error is reported if the template has any invalid field 
-*     specifiers in it.
-*     -  A value of zero is returned if an error has already occurred,
-*     or if this function should fail for any reason.
-
-*/
-/* Local Variables: */
-   const char *b;         /* Pointer to next template character */
-   int nf;                /* No. of fields found so far */
-
-/* Check global status. */
-   if( !astOK ) return 0;
-
-/* Initialise a pointer to the start of the template string. */
-   b = temp;
-
-/* Initialise the number of fields found so far. */
-   nf = 0;
-
-/* Go through the string. */
-   while( *b && astOK ){
-
-/* If the current character is a '%', a field is starting. */   
-      if( *b == '%' ){
-
-/* Skip over the field width (if supplied). */
-         if( isdigit( (int) *(++b) ) ) b++;
-
-/* Report an error if the end of the string occurs within the field. */
-         if( !*b ) {
-            astError( AST__BDFMT, "%s(%s): Incomplete field specifier found "
-                      "at end of filter template '%s'.", status, method, class, 
-                      temp );
-            break;
-
-/* Report an error if the field type is illegal. */
-         } else if( *b != 'd' && *b != 'c' && *b != 'f' ) {
-            astError( AST__BDFMT, "%s(%s): Illegal field type or width "
-                      "specifier '%c' found in filter template '%s'.", status, 
-                      method, class, *b, temp );
-            break;
-         }
-
-/* Compare the field type with the supplied type, and increment the 
-   number of fields found if it is the correct type. */
-         if( *b == type ) nf++;
-
-      }
-
-/* Move on to the next character. */
-      b++;   
-
-   }
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) nf = 0;
-
-/* Return the answer. */
-   return nf;
-
-}
-
-static void CreateKeyword( AstFitsChan *this, const char *name,
-                           char keyword[ FITSNAMLEN + 1 ], int *status ){
-/*
-*  Name:
-*     CreateKeyword
-
-*  Purpose:
-*     Create a unique un-used keyword for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void CreateKeyword( AstFitsChan *this, const char *name,
-*                         char keyword[ FITSNAMLEN + 1 ], int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function takes a name which forms the basis of a FITS
-*     keyword and appends a sequence number (encoded as a pair of
-*     legal FITS keyword characters) so as to generate a unique FITS
-*     keyword which has not previously been used in the FitsChan
-*     supplied.
-*
-*     It is intended for use when several keywords with the same name
-*     must be stored in a FitsChan, since to comply strictly with the
-*     FITS standard keywords should normally be unique (otherwise
-*     external software which processes the keywords might omit one or
-*     other of the values).
-*
-*     An attempt is also made to generate keywords in a form that is
-*     unlikely to clash with those from other sources (in as far as
-*     this is possible with FITS). In any event, a keyword that
-*     already appears in the FitsChan will not be re-used.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name on which the new keyword should be based. This should be
-*        a legal FITS keyword in itself, except that it should be at
-*        least two characters shorter than the maximum length, in
-*        order to accommodate the sequence number characters.
-*
-*        If this string is too long, it will be silently
-*        truncated. Mixed case is permitted, as all characters
-*        supplied are converted to upper case before use.
-*     keyword
-*        A character array in which the generated unique keyword will
-*        be returned, null terminated.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   const char *seq_chars = SEQ_CHARS;/* Pointer to characters used for encoding */
-   char seq_char;                /* The first sequence character */
-   const char *class;            /* Object clas */
-   int found;                    /* Keyword entry found in list? */
-   int limit;                    /* Sequence number has reached limit? */
-   int nc;                       /* Number of basic keyword characters */
-   int seq;                      /* The sequence number */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Store the object class. */
-   class = astGetClass( this );
-
-/* On the first invocation only, determine the number of characters
-   being used to encode sequence number information and save this
-   value. */
-   if( createkeyword_seq_nchars < 0 ) createkeyword_seq_nchars = (int) strlen( seq_chars );
-
-/* Copy the name supplied into the output array, converting to upper
-   case. Leave space for two characters to encode a sequence
-   number. Terminate the resulting string. */
-   for( nc = 0; name[ nc ] && ( nc < ( FITSNAMLEN - 2 ) ); nc++ ) {
-      keyword[ nc ] = toupper( name[ nc ] );
-   }
-   keyword[ nc ] = '\0';
-
-/* We now search the list of sequence numbers already allocated to
-   find the next one to use for this keyword. */
-   if( this->keyseq ) {
-      found = astMapGet0I( this->keyseq, keyword, &seq );
-   } else {
-      found = 0;
-      this->keyseq = astKeyMap( "", status );
-   }
-
-/* If the keyword was not found in the list, create a new list entry
-   to describe it. */
-   if( !found ) seq = 0;
-
-/* If OK, loop to find a new sequence number which results in a FITS
-   keyword that hasn't already been used to store data in the
-   FitsChan. */
-   if( astOK ) {
-      while( 1 ) {
-
-/* Determine if the sequence number just obtained has reached the
-   upper limit. This is unlikely to happen in practice, but if it
-   does, we simply re-use this maximum value. Otherwise, we increment
-   the sequence number last used for this keyword to obtain a new
-   one. */
-         limit = ( seq >= ( createkeyword_seq_nchars * createkeyword_seq_nchars - 1 ) );
-         if( !limit ) seq++;
-
-/* Encode the sequence number into two characters and append them to
-   the original keyword (with a terminating null). */
-         seq_char = seq_chars[ seq / createkeyword_seq_nchars ];
-         keyword[ nc ] = seq_char;
-         keyword[ nc + 1 ] = seq_chars[ seq % createkeyword_seq_nchars ];
-         keyword[ nc + 2 ] = '\0';
-
-/* If the upper sequence number limit has not been reached, try to
-   look up the resulting keyword in the FitsChan to see if it has
-   already been used. Quit searching when a suitable keyword is
-   found. */
-         if ( limit || !HasCard( this, keyword, "astWrite", class, status ) ) break;
-      }
-
-/* Store the update sequence number in the keymap. The keys into this
-   keymap are the base keyword name without the appended sequence string, so
-   temporaily terminate the returned keyword name to exclude the sequence
-   string. */
-      keyword[ nc ] = '\0';
-      astMapPut0I( this->keyseq, keyword, seq, NULL );
-      keyword[ nc ] = seq_char;
-   }
-}
-
-static double DateObs( const char *dateobs, int *status ) {
-/*
-*  Name:
-*     DateObs
-
-*  Purpose:
-*     Convert a FITS DATE-OBS keyword value to a MJD.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double DateObs( const char *dateobs, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Extracts the date and time fields from the supplied string and converts 
-*     them into a modified Julian Date. Supports both old "dd/mm/yy"
-*     format, and the new "ccyy-mm-ddThh:mm:ss[.sss...]" format.
-
-*  Parameters:
-*     dateobs
-*        Pointer to the DATE-OBS string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Modified Julian Date corresponding to the supplied DATE-OBS
-*     string.
-
-*  Notes:
-*     -  The value AST__BAD is returned (without error) if the supplied 
-*     string does not conform to the requirements of a FITS DATE-OBS value,
-*     or if an error has already occurred.
-*/
-
-/* Local Variables: */
-   double days;               /* The hours, mins and secs as a fraction of a day */
-   double ret;                /* The returned MJD value */
-   double secs;               /* The total value of the two seconds fields */
-   int dd;                    /* The day field from the supplied string */
-   int fsc;                   /* The fractional seconds field from the supplied string */
-   int hr;                    /* The hour field from the supplied string */
-   int j;                     /* SLALIB status */
-   int len;                   /* The length of the supplied string */
-   int mm;                    /* The month field from the supplied string */
-   int mn;                    /* The minute field from the supplied string */
-   int nc;                    /* Number of characters used */
-   int ok;                    /* Was the string of a legal format? */
-   int rem;                   /* The least significant digit in fsc */
-   int sc;                    /* The whole seconds field from the supplied string */
-   int yy;                    /* The year field from the supplied string */
-
-
-/* Check the global status. */
-   if( !astOK ) return AST__BAD;
-
-/* Initialise the returned value. */
-   ret = AST__BAD;
-
-/* Save the length of the supplied string. */
-   len = (int) strlen( dateobs );
-
-/* Extract the year, month, day, hour, minute, second and fractional
-   seconds fields from the supplied string. Assume initially that the 
-   string does not match any format. */
-   ok = 0;   
-
-/* First check for the old "dd/mm/yy" format. */
-   if( nc = 0,
-        ( astSscanf( dateobs, " %2d/%2d/%d %n", &dd, &mm, &yy, &nc ) == 3 ) &&
-        ( nc >= len )  ){
-      ok = 1;
-      hr = 0;
-      mn = 0;
-      sc = 0;
-      fsc = 0;
-
-/* Otherwise, check for the new short format "ccyy-mm-dd". */
-   } else if( nc = 0,
-        ( astSscanf( dateobs, " %4d-%2d-%2d %n", &yy, &mm, &dd, &nc ) == 3 ) &&
-        ( nc >= len )  ){
-      ok = 1;
-      hr = 0;
-      mn = 0;
-      sc = 0;
-      fsc = 0;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ss" without a 
-   fractional seconds field or the trailing Z. */
-   } else if( nc = 0,
-        ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2d %n", &yy, &mm, &dd,
-                  &hr, &mn, &sc, &nc ) == 6 ) && ( nc >= len )  ){
-      ok = 1;
-      fsc = 0;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ss.sss" with a 
-   fractional seconds field but without the trailing Z. */
-   } else if( nc = 0,
-        ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2d.%d %n", &yy, &mm, &dd,
-                  &hr, &mn, &sc, &fsc, &nc ) == 7 ) && ( nc >= len )  ){
-      ok = 1;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ssZ" without a 
-   fractional seconds field but with the trailing Z. */
-   } else if( nc = 0,
-        ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2dZ %n", &yy, &mm, &dd,
-                  &hr, &mn, &sc, &nc ) == 6 ) && ( nc >= len )  ){
-      ok = 1;
-      fsc = 0;
-
-/* Otherwise, check for the new format "ccyy-mm-ddThh:mm:ss.sssZ" with a 
-   fractional seconds field and the trailing Z. */
-   } else if( nc = 0,
-        ( astSscanf( dateobs, " %4d-%2d-%2dT%2d:%2d:%2d.%dZ %n", &yy, &mm, &dd,
-                  &hr, &mn, &sc, &fsc, &nc ) == 7 ) && ( nc >= len )  ){
-      ok = 1;
-   }
-
-/* If the supplied string was legal, create a MJD from the separate fields. */
-   if( ok ) { 
-
-/* Get the MJD at the start of the day. */
-      palSlaCaldj( yy, mm, dd, &ret, &j );
-
-/* If succesful, convert the hours, minutes and seconds to a fraction of
-    a day, and add it onto the MJD found above. */
-      if( j == 0 ) {
-
-/* Obtain a floating point representation of the fractional seconds
-   field. */
-         secs = 0.0;
-         while ( fsc > 0 ) {
-             rem = ( fsc % 10  );
-             fsc /= 10;
-             secs = 0.1 * ( secs + (double) rem );
-         }
-
-/* Add on the whole seconds field. */
-         secs += (double) sc;
-
-/*Convert the hours, minutes and seconds to a fractional day. */
-         palSlaDtf2d( hr, mn, secs, &days, &j );
-
-/* If succesful, add this onto the returned MJD. */
-         if( j == 0 ) {
-            ret = ret + days;         
-
-/* If the conversion to MJD failed, return AST__BAD. */
-         } else {
-            ret = AST__BAD;
-         }
-
-      } else {
-         ret = AST__BAD;
-      }
-   } 
-
-/* Return the result. */
-   return ret;   
-
-}
-
-static void DeleteCard( AstFitsChan *this, const char *method, 
-                        const char *class, int *status ){
-/*
-*  Name:
-*     DeleteCard
-
-*  Purpose:
-*     Delete the current card from a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void DeleteCard( AstFitsChan *this, const char *method,
-*                      const char *class )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The current card is removed from the circular linked list of structures 
-*     stored in the supplied FitsChan, and the memory used to store the 
-*     structure is then freed.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the list.
-*     method
-*        Name of calling method.
-*     class
-*        Object class.
-
-*  Notes:
-*     -  This function returns without action if the FitsChan is
-*     currently at "end-of-file".
-*     -  The next card becomes the current card.
-*     -  This function attempts to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
-   FitsCard *card;            /* Pointer to the current card */
-   FitsCard *next;            /* Pointer to next card in list */
-   FitsCard *prev;            /* Pointer to previous card in list */
-
-/* Return if the supplied object or current card is NULL. */
-   if( !this || !this->card ) return;
-
-/* Get a pointer to the card to be deleted (the current card). */
-   card = (FitsCard *) this->card;
-
-/* Remove it from the KeyMap holding all keywords. */
-   astMapRemove( this->keywords, card->name );
-
-/* Move the current card on to the next card. */
-   MoveCard( this, 1, method, class, status );
-
-/* Save pointers to the previous and next cards in the list. */
-   prev = GetLink( card, PREVIOUS, method, class, status );
-   next = GetLink( card, NEXT, method, class, status );
-
-/* If the backwards link points back to the supplied card, then it must
-   be the only one left on the list. */
-   if( prev == card ) prev = NULL;
-   if( next == card ) next = NULL;
-
-/* If the list head is to be deleted, store a value for the new list
-   head. */
-   if( this->head == (void *) card ) this->head = (void *) next;
-
-/* Free the memory used to hold the data value. */
-   (void) astFree( card->data );
-
-/* Free the memory used to hold any comment. */
-   if( card->comment ) (void) astFree( (void *) card->comment );
-
-/* Free the memory used to hold the whole structure. */
-   (void) astFree( (void *) card );
-
-/* Fix up the links between the two adjacent cards in the list, unless the 
-   supplied card was the last one in the list. */
-   if( prev && next ){
-      next->prev = prev;
-      prev->next = next;
-
-   } else {
-      this->head = NULL;
-      this->card = NULL;
-   }
-
-/* Return. */
-   return;
-
-}
-
-static void DelFits( AstFitsChan *this, int *status ){
-/*
-*++
-*  Name:
-c     astDelFits
-f     AST_DELFITS
-
-*  Purpose:
-*     Delete the current FITS card in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astDelFits( AstFitsChan *this )
-f     CALL AST_DELFITS( THIS, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-c     This function deletes the current FITS card from a FitsChan. The
-f     This routine deletes the current FITS card from a FitsChan. The
-*     current card may be selected using the Card attribute (if its index
-c     is known) or by using astFindFits (if only the FITS keyword is
-f     is known) or by using AST_FINDFITS (if only the FITS keyword is
-*     known).
-*
-*     After deletion, the following card becomes the current card.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - This function returns without action if the FitsChan is
-*     initially positioned at the "end-of-file" (i.e. if the Card
-*     attribute exceeds the number of cards in the FitsChan).
-*     - If there are no subsequent cards in the FitsChan, then the
-*     Card attribute is left pointing at the "end-of-file" after
-*     deletion (i.e. is set to one more than the number of cards in
-*     the FitsChan).
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Delete the current card. The next card will be made the current card. */
-   DeleteCard( this, "astDelFits", astGetClass( this ), status );
-
-}
-
-static void DistortMaps( AstFitsChan *this, FitsStore *store, char s, 
-                         int naxes, AstMapping **map1, AstMapping **map2, 
-                         AstMapping **map3, AstMapping **map4, 
-                         const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     DistortMap
-
-*  Purpose:
-*     Create a Mapping representing a FITS-WCS Paper IV distortion code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void DistortMaps( AstFitsChan *this, FitsStore *store, char s, 
-*                       int naxes, AstMapping **map1, AstMapping **map2, 
-*                       AstMapping **map3, AstMapping **map4, 
-*                       const char *method, const char *class )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function checks the CTYPE keywords in the supplied FitsStore to see 
-*     if they contain a known distortion code (following the syntax described 
-*     in FITS-WCS paper IV). If so, Mappings are returned which represent the 
-*     distortions to be applied at each stage in the pixel->IWC chain. If
-*     any distortion codes are found in the FitsStore CTYPE values, whether 
-*     recognised or not, the CTYPE values in the FitsStore are modified to 
-*     remove the distortion code. Warnings about any unknown or inappropriate 
-*     distortion codes are added to the FitsChan.
-
-*  Parameters:
-*     this
-*        The FitsChan. ASTWARN cards may be added to this FitsChan if any
-*        anomalies are found in the keyword values in the FitsStore.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     naxes
-*        The number of intermediate world coordinate axes (WCSAXES).
-*     map1
-*        Address of a location at which to store a pointer to a Mapping
-*        which describes any distortion to be applied to pixel
-*        coordinates, prior to performing the translation specified by the 
-*        CRPIXj keywords. NULL is returned if no distortion is necessary.
-*     map2
-*        Address of a location at which to store a pointer to a Mapping
-*        which describes any distortion to be applied to translated pixel
-*        coordinates, prior to performing the PC matrix multiplication.
-*        NULL is returned if no distortion is necessary.
-*     map3
-*        Address of a location at which to store a pointer to a Mapping
-*        which describes any distortion to be applied to unscaled IWC 
-*        coordinates, prior to performing the CDELT matrix multiplication.
-*        NULL is returned if no distortion is necessary.
-*     map4
-*        Address of a location at which to store a pointer to a Mapping
-*        which describes any distortion to be applied to scaled IWC 
-*        coordinates, after performing the CDELT matrix multiplication.
-*        NULL is returned if no distortion is necessary.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-
-*/
-
-/* Local Variables: */
-   AstMapping *tmap1;        /* Mapping pointer */
-   AstMapping *tmap2;        /* Mapping pointer */
-   char msgbuf[ 250 ];       /* Buffer for warning message */
-   int i;                    /* FITS axis index */
-   char *ctype;              /* Pointer to CTYPE value */
-   char type[ 5 ];           /* Axis type extracted from CTYPE */
-   char code[ 4 ];           /* Projection code extracted from CTYPE */
-   char dist[ 4 ];           /* Distortion code extracted from CTYPE */
-   int warned;               /* Have any ASTWARN cards been issued? */
-
-/* Initialise pointers to the returned Mappings. */
-   *map1 = NULL;
-   *map2 = NULL;
-   *map3 = NULL;
-   *map4 = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return;
-
-/* First check each known distortion type... */
-
-/* "-SIP": SIRTF (http://sirtf.caltech.edu/SSC/documents/WCSkeywords_v1.3.pdf)
-   ============= */
-
-/* SIRTF distortion is limited to 2D. Check the first two axes to see if
-   they have "-SIP" codes in their CTYPE values. If they do, terminate the
-   ctype string in order to exclude the distortion code (this is so that
-   later functions do not need to allow for the possibility of a distortion
-   code  being present in the CTYPE value)*/
-   ctype = GetItemC( &(store->ctype), 0, s, NULL, method, class, status );
-   if( ctype && 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
-      if( !strcmp( "SIP", dist ) ) {
-         ctype[ 8 ] = 0;
-         ctype = GetItemC( &(store->ctype), 1, s, NULL, method, class, status );
-         if( ctype && 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
-            if( !strcmp( "SIP", dist ) ) {
-               ctype[ 8 ] = 0;
-
-/* Create a Mapping describing the distortion (other axes are passed
-   unchanged by this Mapping), and add it in series with the returned map2 
-   (SIRTF distortion is applied to the translated pixel coordinates). */
-               tmap1 = SIPMapping( store, s, naxes, method, class, status );
-               if( ! *map2 ) {
-                  *map2 = tmap1;
-               } else {
-                  tmap2 = (AstMapping *) astCmpMap( *map2, tmap1, 1, "", status );
-                  *map2 = astAnnul( *map2 );                  
-                  tmap1 = astAnnul( tmap1 );                  
-                  *map2 = tmap2;
-               }
-            }
-         }
-      }      
-   }
-
-/* Check that the "-SIP" code is not included in any axes other than axes
-   0 and 1. Issue a warning if it is, and remove it. */
-   warned = 0;
-   for( i = 2; i < naxes; i++ ){
-      ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-      if( ctype && 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
-         if( !strcmp( "SIP", dist ) ){
-            if( !warned ){
-               warned = 1;
-               sprintf( msgbuf, "The \"-SIP\" distortion code can only be "
-                        "used on axes 1 and 2, but was found in keyword "
-                        "%s (='%s'). The distortion will be ignored.", 
-                        FormatKey( "CTYPE", i + 1, -1, ' ', status ),  ctype );
-               Warn( this, "distortion", msgbuf, method, class, status );
-            }
-            ctype[ 8 ] = 0;
-         }
-      }
-   }   
-
-
-/* (There are currently no other supported distortion codes.) */
-
-
-/* Finally, check all axes looking for any remaining (and therefore
-   unsupported) distortion codes. Issue a warning about them and remove 
-   them. 
-   =================================================================== */
-
-/* Indicate that we have not yet issued a warning. */
-   warned = 0;
-
-/* Do each IWC axis. */
-   for( i = 0; i < naxes; i++ ){
-
-/* Get the CTYPE value for this axis. */
-      ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-      if( ctype ) {
-
-/* See if has the "4-3-3" form described in FITS-WCS paper IV. */
-         if( 3 == astSscanf( ctype, "%4s-%3s-%3s", type, code, dist ) ){
-
-/* Add an ASTWARN card to the FitsChan. Only issue one warning (this avoids 
-   multiple warnings about the same distortion code in multiple CTYPE values). */
-            if( !warned ){
-               warned = 1;
-               sprintf( msgbuf, "The header contains CTYPE values (e.g. "
-                        "%s = '%s') which "
-                        "include a distortion code \"-%s\". AST "
-                        "currently ignores this distortion. The code "
-                        "has been removed from the CTYPE values.",
-                        FormatKey( "CTYPE", i + 1, -1, ' ', status ),  ctype, dist );
-               Warn( this, "distortion", msgbuf, method, class, status );
-            }
-
-/* Terminate the CTYPE value in the FitsStore in order to exclude the distortion 
-   code. This means that later functions will not need to take account of
-   distortion codes. */
-            ctype[ 8 ] = 0;
-         }
-      }
-   }   
-}
-
-static void DSBSetUp( AstFitsChan *this, FitsStore *store, 
-                      AstDSBSpecFrame *dsb, char s, double crval,
-                      const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     DSBSetUp
-
-*  Purpose:
-*     Modify an AstDSBSpecFrame object to reflect the contents of a FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void DSBSetUp( AstFitsChan *this, FitsStore *store, 
-*                    AstDSBSpecFrame *dsb, char s, double crval,
-*                    const char *method, const char *class, int *status  )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function sets the attributes of the supplied DSBSpecFrame to
-*     reflect the values in the supplied FitsStore.
-
-*  Parameters:
-*     this
-*        The FitsChan.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     dsb
-*        Pointer to the DSBSpecFrame.
-*     s
-*        Alternate axis code.
-*     crval
-*        The spectral CRVAL value, in the spectral system represented by
-*        the supplied DSBSPecFrame.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This implementation follows the conventions of the FITS-CLASS encoding. 
-
-*/
-
-/* Local Variables: */
-   AstDSBSpecFrame *dsb_src; /* New DSBSpecFrame in which StdOfRest is source */
-   AstDSBSpecFrame *dsb_topo;/* New DSBSpecFrame in which StdOfRest is topo */
-   AstFrameSet *fs;        /* FrameSet connecting two standards of rest */
-   double dsbcentre;       /* Topocentric reference (CRVAL) frequency */
-   double in[2];           /* Source rest and image frequencies */
-   double lo;              /* Topocentric Local Oscillator frequency */
-   double out[2];          /* Topocentric rest and image frequencies */
-   
-/* Check the global status. */
-   if ( !astOK ) return;
-
-/* In order to determine the topocentric IF, we need the topocentric 
-   frequencies corresponding to the RESTFREQ and IMAGFREQ values in the 
-   FITS header. The values stored in the FITS header are measured in Hz, 
-   in the source's rest frame, so we need a mapping from frequency in the
-   source rest frame to topocentric frequency. Take a copy of the supplied
-   DSBSpecFrame and then set its attributes to represent frequency in the
-   sources rest frame. */
-   dsb_src = astCopy( dsb );
-   astSetStdOfRest( dsb_src, AST__SCSOR );
-   astSetSystem( dsb_src, AST__FREQ );
-   astSetUnit( dsb_src, 0, "Hz" );
-
-/* Take a copy of this DSBSpecFrame and set its standard of rest to
-   topocentric. */
-   dsb_topo = astCopy( dsb_src );
-   astSetStdOfRest( dsb_topo, AST__TPSOR );
-      
-/* Now get the Mapping between these. */
-   fs = astConvert( dsb_src, dsb_topo, "" );
-   dsb_src = astAnnul( dsb_src );
-   dsb_topo = astAnnul( dsb_topo );
-
-/* Check a conversion was found. */
-   if( fs != NULL ) {
-
-/* Use this Mapping to transform the rest frequency and the image
-   frequency from the standard of rest of the source to that of the
-   observer. */
-      in[ 0 ] = astGetRestFreq( dsb );
-      in[ 1 ] = GetItem( &(store->imagfreq), 0, 0, s, NULL, method, class, status );
-      astTran1( fs, 2, in, 1, out );
-      
-/* The intermediate frequency is half the distance between these two
-   frequencies. Note, the IF value is signed so as to put the rest
-   frequency in the observed sideband. */
-      if( out[ 0 ] != AST__BAD && out[ 1 ] != AST__BAD ) {
-
-/* Store the spectral CRVAL value as the centre frequency of the
-   DSBSpecFrame. The public astSetD method interprets the supplied value
-   as a value in the spectral system described by the other SpecFrame
-   attributes. */
-         astSetD( dsb, "DSBCentre", crval );
-
-/* To calculate the topocentric IF we need the topocentric frequency
-   equivalent of CRVAL. So take a copy of the DSBSpecFrame, then set it to
-   represent topocentric frequency, and read back the DSBCentre value. */
-         dsb_topo = astCopy( dsb );
-         astSetStdOfRest( dsb_topo, AST__TPSOR );
-         astSetSystem( dsb_topo, AST__FREQ );
-         astSetUnit( dsb_topo, 0, "Hz" );
-         dsbcentre = astGetD( dsb_topo, "DSBCentre" );
-         dsb_topo = astAnnul( dsb_topo );
-
-/* We also need the topocentric Local Oscillator frequency. This is
-   assumed to be half way between the topocentric IMAGFREQ and RESTFREQ
-   values. */
-         lo = 0.5*( out[ 1 ] + out[ 0 ] );
-
-/* Set the IF to be the difference between the Local Oscillator frequency
-   and the CRVAL frequency. */
-         astSetIF( dsb, lo - dsbcentre );
-
-/* Set the DSBSpecFrame to represent the observed sideband */
-         astSetC( dsb, "SideBand", "observed" );
-      }
-
-/* Free resources. */
-      fs = astAnnul( fs );
-
-   }
-}
-
-static int DSSFromStore( AstFitsChan *this, FitsStore *store, 
-                         const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     DSSFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using DSS encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int DSSFromStore( AstFitsChan *this, FitsStore *store, 
-*                       const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using DSS encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   const char *comm;   /* Pointer to comment string */
-   char *cval;         /* Pointer to string keyword value */
-   const char *pltdecsn;/* PLTDECSN keyword value */
-   double amdx[20];    /* AMDXi keyword value */
-   double amdy[20];    /* AMDYi keyword value */
-   double cdelt;       /* CDELT element */
-   double cnpix1;      /* CNPIX1 keyword value */
-   double cnpix2;      /* CNPIX2 keyword value */
-   double pc;          /* PC element */
-   double pltdecd;     /* PLTDECD keyword value */
-   double pltdecm;     /* PLTDECM keyword value */
-   double pltdecs;     /* PLTDECS keyword value */
-   double pltrah;      /* PLTRAH keyword value */
-   double pltram;      /* PLTRAM keyword value */
-   double pltras;      /* PLTRAS keyword value */
-   double pltscl;      /* PLTSCL keyword value */
-   double ppo1;        /* PPO1 keyword value */
-   double ppo2;        /* PPO2 keyword value */
-   double ppo3;        /* PPO3 keyword value */
-   double ppo4;        /* PPO4 keyword value */
-   double ppo5;        /* PPO5 keyword value */
-   double ppo6;        /* PPO6 keyword value */
-   double pvx[22];     /* X projection parameter values */
-   double pvy[22];     /* Y projection parameter values */
-   double val;         /* General purpose value */
-   double xpixelsz;    /* XPIXELSZ keyword value */
-   double ypixelsz;    /* YPIXELSZ keyword value */
-   int i;              /* Loop count */
-   int gottpn;         /* Is the projection a "TPN" projection? */
-   int m;              /* Parameter index */
-   int ret;            /* Returned value. */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Check the image is 2 dimensional. */
-   if( GetMaxJM( &(store->crpix), ' ', status ) != 1 ) return ret;
-
-/* Check the first axis is RA with a TAN or TPN projection. */
-   cval = GetItemC( &(store->ctype), 0, ' ', NULL, method, class, status );
-   if( !cval ) return ret;
-   gottpn = !strcmp( "RA---TPN", cval );
-   if( strcmp( "RA---TAN", cval ) && !gottpn ) return ret;
-
-/* Check the second axis is DEC with a TAN or TPN projection. */
-   cval = GetItemC( &(store->ctype), 1, ' ', NULL, method, class, status );
-   if( !cval ) return ret;
-   if( gottpn ) {
-      if( strcmp( "DEC--TPN", cval ) ) return ret;
-   } else {
-      if( strcmp( "DEC--TAN", cval ) ) return ret;
-   }
-
-/* Check that LONPOLE is undefined or is 180 degrees. */
-   val = GetItem( &(store->lonpole), 0, 0, ' ', NULL, method, class, status );
-   if( val != AST__BAD && val != 180.0 ) return ret;
-
-/* Check that the RA/DEC system is FK5. */
-   cval = GetItemC( &(store->radesys), 0, ' ', NULL, method, class, status );
-   if( !cval || strcmp( "FK5", cval ) ) return ret;
-
-/* Check that equinox is not defined or is 2000.0 */
-   val = GetItem( &(store->equinox), 0, 0, ' ', NULL, method, class, status );
-   if( val != AST__BAD && val != 2000.0 ) return ret;
-
-/* Get the pixel sizes from the PC/CDELT keywords. They must be defined and 
-   not be zero.  */
-   cdelt = GetItem( &(store->cdelt), 0, 0, ' ', NULL, method, class, status );
-   if( cdelt == AST__BAD ) return ret;
-
-   pc = GetItem( &(store->pc), 0, 0, ' ', NULL, method, class, status );
-   if( pc == AST__BAD ) pc = 1.0;
-
-   xpixelsz = cdelt*pc;
-
-   cdelt = GetItem( &(store->cdelt), 1, 0, ' ', NULL, method, class, status );
-   if( cdelt == AST__BAD ) return ret;
-
-   pc = GetItem( &(store->pc), 1, 1, ' ', NULL, method, class, status );
-   if( pc == AST__BAD ) pc = 1.0;
-
-   ypixelsz = cdelt*pc;
-
-   if( xpixelsz == 0.0 || ypixelsz == 0.0 ) return ret;
-
-   xpixelsz *= -1000.0;
-   ypixelsz *= 1000.0;
-
-/* Check the off-diagonal PC terms are zero. DSS does not allow any rotation. */
-   val = GetItem( &(store->pc), 0, 1, ' ', NULL, method, class, status );
-   if( val != AST__BAD && val != 0.0 ) return ret;
-   
-   val = GetItem( &(store->pc), 1, 0, ' ', NULL, method, class, status );
-   if( val != AST__BAD && val != 0.0 ) return ret;
-   
-/* Get the required projection parameter values from the store, supplying
-   appropriate values if a simple TAN projection is being used. */
-   for( m = 0; m < 22; m++ ){
-      pvx[ m ] = GetItem( &(store->pv), 0, m, ' ', NULL, method, class, status );
-      if( pvx[ m ] == AST__BAD || !gottpn ) pvx[ m ] = ( m == 1 ) ? 1.0 : 0.0;
-
-      pvy[ m ] = GetItem( &(store->pv), 1, m, ' ', NULL, method, class, status );
-      if( pvy[ m ] == AST__BAD || !gottpn ) pvy[ m ] = ( m == 1 ) ? 1.0 : 0.0;
-   }
-
-/* Check that no other projection parameters have been set. */
-   if( GetMaxJM( &(store->pv), ' ', status ) > 21 ) return ret;
-
-/* Check that specific parameters take their required zero value. */
-   if( pvx[ 3 ] != 0.0 || pvy[ 3 ] != 0.0 ) return ret;
-
-   for( m = 11; m < 17; m++ ){
-      if( pvx[ m ] != 0.0 || pvy[ m ] != 0.0 ) return ret;
-   }
-
-   if( pvx[ 18 ] != 0.0 || pvy[ 18 ] != 0.0 ) return ret;
-   if( pvx[ 20 ] != 0.0 || pvy[ 20 ] != 0.0 ) return ret;
-
-/* Check that other projection parameters are related correctly. */
-   if( !EQUAL( 2*pvx[ 17 ], pvx[ 19 ] ) ) return ret;
-   if( !EQUAL( pvx[ 17 ], pvx[ 21 ] ) ) return ret;
-
-   if( !EQUAL( 2*pvy[ 17 ], pvy[ 19 ] ) ) return ret;
-   if( !EQUAL( pvy[ 17 ], pvy[ 21 ] ) ) return ret;
-
-/* Initialise all polynomial co-efficients to zero. */
-   for( m = 0; m < 20; m++ ){
-      amdx[ m ] = 0.0;
-      amdy[ m ] = 0.0;
-   }
-
-/* Polynomial co-efficients. There is redundancy here too, so we
-   arbitrarily choose to leave AMDX/Y7 and AMDX/Y12 set to zero.  */
-   amdx[ 0 ] = 3600.0*pvx[ 1 ];
-   amdx[ 1 ] = 3600.0*pvx[ 2 ];
-   amdx[ 2 ] = 3600.0*pvx[ 0 ];
-   amdx[ 3 ] = 3600.0*pvx[ 4 ];
-   amdx[ 4 ] = 3600.0*pvx[ 5 ];
-   amdx[ 5 ] = 3600.0*pvx[ 6 ];
-   amdx[ 7 ] = 3600.0*pvx[ 7 ];
-   amdx[ 8 ] = 3600.0*pvx[ 8 ];
-   amdx[ 9 ] = 3600.0*pvx[ 9 ];
-   amdx[ 10 ] = 3600.0*pvx[ 10 ];
-   amdx[ 12 ] = 3600.0*pvx[ 17 ];
-
-   amdy[ 0 ] = 3600.0*pvy[ 1 ];
-   amdy[ 1 ] = 3600.0*pvy[ 2 ];
-   amdy[ 2 ] = 3600.0*pvy[ 0 ];
-   amdy[ 3 ] = 3600.0*pvy[ 4 ];
-   amdy[ 4 ] = 3600.0*pvy[ 5 ];
-   amdy[ 5 ] = 3600.0*pvy[ 6 ];
-   amdy[ 7 ] = 3600.0*pvy[ 7 ];
-   amdy[ 8 ] = 3600.0*pvy[ 8 ];
-   amdy[ 9 ] = 3600.0*pvy[ 9 ];
-   amdy[ 10 ] = 3600.0*pvy[ 10 ];
-   amdy[ 12 ] = 3600.0*pvy[ 17 ];
-
-/* The plate scale is the mean of the first X and Y co-efficients. */
-   pltscl = 0.5*( amdx[ 0 ] + amdy[ 0 ] );
-
-/* There is redundancy in the DSS encoding. We can choose an arbitrary 
-   pixel corner (CNPIX1, CNPIX2) so long as we use the corresponding origin 
-   for the cartesian co-ordinate system in which the plate centre is 
-   specified (PPO3, PPO6). Arbitrarily set CNPIX1 and CNPIX2 to one. */
-   cnpix1 = 1.0;
-   cnpix2 = 1.0;
-
-/* Find the corresponding plate centre PPO3 and PPO6 (other co-efficients
-   are set to zero). */
-   ppo1 = 0.0;
-   ppo2 = 0.0;
-
-   val = GetItem( &(store->crpix), 0, 0, ' ', NULL, method, class, status );
-   if( val == AST__BAD ) return ret;
-   ppo3 = xpixelsz*( val + cnpix1 - 0.5 );
-
-   ppo4 = 0.0;
-   ppo5 = 0.0;
-
-   val = GetItem( &(store->crpix), 0, 1, ' ', NULL, method, class, status );
-   if( val == AST__BAD ) return ret;
-   ppo6 = ypixelsz*( val + cnpix2 - 0.5 );
-
-/* The reference RA. Get it in degrees. */
-   val = GetItem( &(store->crval), 0, 0, ' ', NULL, method, class, status );
-   if( val == AST__BAD ) return ret;
-
-/* Convert to hours and ensure it is in the range 0 to 24 */
-   val /= 15.0;
-   while( val < 0 ) val += 24.0;
-   while( val >= 24.0 ) val -= 24.0;
-
-/* Split into hours, mins and seconds. */
-   pltrah = (int) val;
-   val = 60.0*( val - pltrah );
-   pltram = (int) val;
-   pltras = 60.0*( val - pltram );
-
-/* The reference DEC. Get it in degrees. */
-   val = GetItem( &(store->crval), 1, 0, ' ', NULL, method, class, status );
-   if( val == AST__BAD ) return ret;
-
-/* Ensure it is in the range -180 to +180 */
-   while( val < -180.0 ) val += 360.0;
-   while( val >= 180.0 ) val -= 360.0;
-
-/* Save the sign. */
-   if( val > 0.0 ){
-      pltdecsn = "+";
-   } else {
-      pltdecsn = "-";
-      val = -val;
-   }
-
-/* Split into degrees, mins and seconds. */
-   pltdecd = (int) val;
-   val = 60.0*( val - pltdecd );
-   pltdecm = (int) val;
-   pltdecs = 60.0*( val - pltdecm );
-
-/* Store the DSS keywords in the FitsChan. */
-   SetValue( this, "CNPIX1", &cnpix1, AST__FLOAT, "X corner (pixels)", status );
-   SetValue( this, "CNPIX2", &cnpix2, AST__FLOAT, "Y corner (pixels)", status );
-   SetValue( this, "PPO1", &ppo1, AST__FLOAT, "Orientation co-efficients", status );
-   SetValue( this, "PPO2", &ppo2, AST__FLOAT, "", status );
-   SetValue( this, "PPO3", &ppo3, AST__FLOAT, "", status );
-   SetValue( this, "PPO4", &ppo4, AST__FLOAT, "", status );
-   SetValue( this, "PPO5", &ppo5, AST__FLOAT, "", status );
-   SetValue( this, "PPO6", &ppo6, AST__FLOAT, "", status );
-   SetValue( this, "XPIXELSZ", &xpixelsz, AST__FLOAT, "X pixel size (microns)", status );
-   SetValue( this, "YPIXELSZ", &ypixelsz, AST__FLOAT, "Y pixel size (microns)", status );
-   SetValue( this, "PLTRAH", &pltrah, AST__FLOAT, "RA at plate centre", status );
-   SetValue( this, "PLTRAM", &pltram, AST__FLOAT, "", status );
-   SetValue( this, "PLTRAS", &pltras, AST__FLOAT, "", status );
-   SetValue( this, "PLTDECD", &pltdecd, AST__FLOAT, "DEC at plate centre", status );
-   SetValue( this, "PLTDECM", &pltdecm, AST__FLOAT, "", status );
-   SetValue( this, "PLTDECS", &pltdecs, AST__FLOAT, "", status );
-   SetValue( this, "PLTDECSN", &pltdecsn, AST__STRING, "", status );
-   SetValue( this, "PLTSCALE", &pltscl, AST__FLOAT, "Plate scale (arcsec/mm)", status );
-
-   comm = "Plate solution x co-efficients";
-   for( i = 0; i < 20; i++ ){
-      SetValue( this, FormatKey( "AMDX", i + 1, -1, ' ', status ), amdx + i, 
-                AST__FLOAT, comm, status );
-      comm = NULL;
-   }
-
-   comm = "Plate solution y co-efficients";
-   for( i = 0; i < 20; i++ ){
-      SetValue( this, FormatKey( "AMDY", i + 1, -1, ' ', status ), amdy + i, 
-                AST__FLOAT, comm, status );
-      comm = NULL;
-   }
-
-/* If no error has occurred, return one. */
-   if( astOK ) ret = 1;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void DSSToStore( AstFitsChan *this, FitsStore *store, 
-                        const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     DSSToStore
-
-*  Purpose:
-*     Extract WCS information from the supplied FitsChan using a DSS
-*     encoding, and store it in the supplied FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void DSSToStore( AstFitsChan *this, FitsStore *store, 
-                       const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function extracts DSS keywords from the supplied FitsChan, and
-*     stores the corresponding WCS information in the supplied FitsStore.
-*     The conversion from DSS encoding to standard WCS encoding is
-*     described in an ear;y draft of the Calabretta & Greisen paper 
-*     "Representations of celestial coordinates in FITS" (A&A, in prep.),
-*     and uses the now deprecated "TAN with polynomial corrections",
-*     which is still supported by the WcsMap class as type AST__TPN.
-*     Here we use "lambda=1" (i.e. plate co-ordinate are measured in mm, 
-*     not degrees).
-*
-*     It is assumed that DSS images are 2 dimensional.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore structure.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   char *text;         /* Pointer to textual keyword value */
-   char pltdecsn[11];  /* First 10 non-blank characters from PLTDECSN keyword */
-   char keyname[10];   /* Buffer for keyword name */
-   double amdx[20];    /* AMDXi keyword value */
-   double amdy[20];    /* AMDYi keyword value */
-   double cnpix1;      /* CNPIX1 keyword value */
-   double cnpix2;      /* CNPIX2 keyword value */
-   double crval2;      /* Equivalent CRVAL2 keyword value */
-   double dummy;       /* Unused keyword value */
-   double pltdecd;     /* PLTDECD keyword value */
-   double pltdecm;     /* PLTDECM keyword value */
-   double pltdecs;     /* PLTDECS keyword value */
-   double pltrah;      /* PLTRAH keyword value */
-   double pltram;      /* PLTRAM keyword value */
-   double pltras;      /* PLTRAS keyword value */
-   double ppo3;        /* PPO3 keyword value */
-   double ppo6;        /* PPO6 keyword value */
-   double pv;          /* Projection parameter value */
-   double xpixelsz;    /* XPIXELSZ keyword value */
-   double ypixelsz;    /* YPIXELSZ keyword value */
-   int i;              /* Loop count */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Get the required DSS keywords. Report an error if any are missing. */
-   GetValue( this, "CNPIX1", AST__FLOAT, &cnpix1, 1, 1, method, class, status );
-   GetValue( this, "CNPIX2", AST__FLOAT, &cnpix2, 1, 1, method, class, status );
-   GetValue( this, "PPO3", AST__FLOAT, &ppo3, 1, 1, method, class, status );
-   GetValue( this, "PPO6", AST__FLOAT, &ppo6, 1, 1, method, class, status );
-   GetValue( this, "XPIXELSZ", AST__FLOAT, &xpixelsz, 1, 1, method, class, status );
-   GetValue( this, "YPIXELSZ", AST__FLOAT, &ypixelsz, 1, 1, method, class, status );
-   GetValue( this, "PLTRAH", AST__FLOAT, &pltrah, 1, 1, method, class, status );
-   GetValue( this, "PLTRAM", AST__FLOAT, &pltram, 1, 1, method, class, status );
-   GetValue( this, "PLTRAS", AST__FLOAT, &pltras, 1, 1, method, class, status );
-   GetValue( this, "PLTDECD", AST__FLOAT, &pltdecd, 1, 1, method, class, status );
-   GetValue( this, "PLTDECM", AST__FLOAT, &pltdecm, 1, 1, method, class, status );
-   GetValue( this, "PLTDECS", AST__FLOAT, &pltdecs, 1, 1, method, class, status );
-
-/* Copy the first 10 non-blank characters from the PLTDECSN keyword. */
-   GetValue( this, "PLTDECSN", AST__STRING, &text, 1, 1, method, class, status );
-   if( astOK ) {
-      text += strspn( text, " " );
-      text[ strcspn( text, " " ) ] = 0;
-      strncpy( pltdecsn, text, 10 );
-   }
-
-/* Read other related keywords. We do not need these, but we read them
-   so that they are not propagated to any output FITS file. */
-   GetValue( this, "PLTSCALE", AST__FLOAT, &dummy, 0, 1, method, class, status );
-   GetValue( this, "PPO1", AST__FLOAT, &dummy, 0, 1, method, class, status );
-   GetValue( this, "PPO2", AST__FLOAT, &dummy, 0, 1, method, class, status );
-   GetValue( this, "PPO4", AST__FLOAT, &dummy, 0, 1, method, class, status );
-   GetValue( this, "PPO5", AST__FLOAT, &dummy, 0, 1, method, class, status );
-
-/* Get the polynomial co-efficients. These can be defaulted if they are 
-   missing, so do not report an error. */
-   for( i = 0; i < 20; i++ ){
-      (void) sprintf( keyname, "AMDX%d", i + 1 );
-      amdx[i] = AST__BAD;
-      GetValue( this, keyname, AST__FLOAT, amdx + i, 0, 1, method, class, status );
-
-      (void) sprintf( keyname, "AMDY%d", i + 1 );
-      amdy[i] = AST__BAD;
-      GetValue( this, keyname, AST__FLOAT, amdy + i, 0, 1, method, class, status );
-   }
-
-/* Check the above went OK. */
-   if( astOK ) {
-
-/* Calculate and store the equivalent PV projection parameters. */
-      if( amdx[2] != AST__BAD ) {
-         pv = amdx[2]/3600.0;
-         SetItem( &(store->pv), 0, 0, ' ', pv, status );
-      }
-      if( amdx[0] != AST__BAD ) {
-         pv = amdx[0]/3600.0;
-         SetItem( &(store->pv), 0, 1, ' ', pv, status );
-      }
-      if( amdx[1] != AST__BAD ) {
-         pv = amdx[1]/3600.0;
-         SetItem( &(store->pv), 0, 2, ' ', pv, status );
-      }
-      if( amdx[3] != AST__BAD && amdx[6] != AST__BAD ) {
-         pv = ( amdx[3] + amdx[6] )/3600.0;
-         SetItem( &(store->pv), 0, 4, ' ', pv, status );
-      }
-      if( amdx[4] != AST__BAD ) {
-         pv = amdx[4]/3600.0;
-         SetItem( &(store->pv), 0, 5, ' ', pv, status );
-      }
-      if( amdx[5] != AST__BAD && amdx[6] != AST__BAD ) {
-         pv = ( amdx[5] + amdx[6] )/3600.0;
-         SetItem( &(store->pv), 0, 6, ' ', pv, status );
-      }
-      if( amdx[7] != AST__BAD && amdx[11] != AST__BAD ) {
-         pv = ( amdx[7] + amdx[11] )/3600.0;
-         SetItem( &(store->pv), 0, 7, ' ', pv, status );
-      }
-      if( amdx[8] != AST__BAD ) {
-         pv = amdx[8]/3600.0;
-         SetItem( &(store->pv), 0, 8, ' ', pv, status );
-      }
-      if( amdx[9] != AST__BAD && amdx[11] != AST__BAD ) {
-         pv = ( amdx[9] + amdx[11] )/3600.0;
-         SetItem( &(store->pv), 0, 9, ' ', pv, status );
-      }
-      if( amdx[10] != AST__BAD ) {
-         pv = amdx[10]/3600.0;
-         SetItem( &(store->pv), 0, 10, ' ', pv, status );
-      }
-      if( amdx[12] != AST__BAD ) {
-         pv = amdx[12]/3600.0;
-         SetItem( &(store->pv), 0, 17, ' ', pv, status );
-         SetItem( &(store->pv), 0, 19, ' ', 2*pv, status );
-         SetItem( &(store->pv), 0, 21, ' ', pv, status );
-      }
-      
-      if( amdy[2] != AST__BAD ) {
-         pv = amdy[2]/3600.0;
-         SetItem( &(store->pv), 1, 0, ' ', pv, status );
-      }
-      if( amdy[0] != AST__BAD ) {
-         pv = amdy[0]/3600.0;
-         SetItem( &(store->pv), 1, 1, ' ', pv, status );
-      }
-      if( amdy[1] != AST__BAD ) {
-         pv = amdy[1]/3600.0;
-         SetItem( &(store->pv), 1, 2, ' ', pv, status );
-      }
-      if( amdy[3] != AST__BAD && amdy[6] != AST__BAD ) {
-         pv = ( amdy[3] + amdy[6] )/3600.0;
-         SetItem( &(store->pv), 1, 4, ' ', pv, status );
-      }
-      if( amdy[4] != AST__BAD ) {
-         pv = amdy[4]/3600.0;
-         SetItem( &(store->pv), 1, 5, ' ', pv, status );
-      }
-      if( amdy[5] != AST__BAD && amdy[6] != AST__BAD ) {
-         pv = ( amdy[5] + amdy[6] )/3600.0;
-         SetItem( &(store->pv), 1, 6, ' ', pv, status );
-      }
-      if( amdy[7] != AST__BAD && amdy[11] != AST__BAD ) {
-         pv = ( amdy[7] + amdy[11] )/3600.0;
-         SetItem( &(store->pv), 1, 7, ' ', pv, status );
-      }
-      if( amdy[8] != AST__BAD ) {
-         pv = amdy[8]/3600.0;
-         SetItem( &(store->pv), 1, 8, ' ', pv, status );
-      }
-      if( amdy[9] != AST__BAD && amdy[11] != AST__BAD ) {
-         pv = ( amdy[9] + amdy[11] )/3600.0;
-         SetItem( &(store->pv), 1, 9, ' ', pv, status );
-      }
-      if( amdy[10] != AST__BAD ) {
-         pv = amdy[10]/3600.0;
-         SetItem( &(store->pv), 1, 10, ' ', pv, status );
-      }
-      if( amdy[12] != AST__BAD ) {
-         pv = amdy[12]/3600.0;
-         SetItem( &(store->pv), 1, 17, ' ', pv, status );
-         SetItem( &(store->pv), 1, 19, ' ', 2*pv, status );
-         SetItem( &(store->pv), 1, 21, ' ', pv, status );
-      }
-
-/* Calculate and store the equivalent CRPIX values. */
-      if( xpixelsz != 0.0 ) {
-         SetItem( &(store->crpix), 0, 0, ' ', 
-                  ( ppo3/xpixelsz ) - cnpix1 + 0.5, status );
-      } else if( astOK ){      
-         astError( AST__BDFTS, "%s(%s): FITS keyword XPIXELSZ has illegal "
-                   "value 0.0", status, method, class );
-      }   
-
-      if( ypixelsz != 0.0 ) {
-         SetItem( &(store->crpix), 0, 1, ' ', 
-                  ( ppo6/ypixelsz ) - cnpix2 + 0.5, status );
-      } else if( astOK ){      
-         astError( AST__BDFTS, "%s(%s): FITS keyword YPIXELSZ has illegal "
-                   "value 0.0", status, method, class );
-      }   
-
-/* Calculate and store the equivalent CRVAL values. */
-      SetItem( &(store->crval), 0, 0, ' ', 
-               15.0*( pltrah + pltram/60.0 + pltras/3600.0 ), status );
-      crval2 = pltdecd + pltdecm/60.0 + pltdecs/3600.0;
-      if( !strcmp( pltdecsn, "-") ) crval2 = -crval2;
-      SetItem( &(store->crval), 1, 0, ' ', crval2, status );
-
-/* Calculate and store the equivalent PC matrix. */
-      SetItem( &(store->pc), 0, 0, ' ', -0.001*xpixelsz, status );
-      SetItem( &(store->pc), 1, 1, ' ', 0.001*ypixelsz, status );
-
-/* Set values of 1.0 for the CDELT values. */
-      SetItem( &(store->cdelt), 0, 0, ' ', 1.0, status );
-      SetItem( &(store->cdelt), 1, 0, ' ', 1.0, status );
-
-/* Store remaining constant items */
-      SetItem( &(store->lonpole), 0, 0, ' ', 180.0, status );
-      SetItem( &(store->equinox), 0, 0, ' ', 2000.0, status );
-      SetItemC( &(store->radesys), 0, ' ', "FK5", status );
-      SetItem( &(store->wcsaxes), 0, 0, ' ', 2.0, status );
-      store->naxis = 2;
-      SetItemC( &(store->ctype), 0, ' ', "RA---TPN", status );
-      SetItemC( &(store->ctype), 1, ' ', "DEC--TPN", status );
-   }
-}
-
-static void Empty( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astEmpty
-
-*  Purpose:
-*     Remove all cards and related data from a FitsChan. 
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void astEmpty( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function removes all cards and associated information from the 
-*     supplied FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS         /* Declare the thread specific global data */
-   const char *class;         /* Pointer to string holding object class */
-   const char *method;        /* Pointer to string holding calling method */
-   int old_ignore_used;       /* Original setting of ignore_used variable */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Store the method and class strings. */
-   method = "astEmpty";
-   class = astGetClass( this );
-
-/* Delete all cards from the circular linked list stored in the FitsChan,
-   starting with the card at the head of the list. */
-   old_ignore_used = ignore_used;
-   ignore_used = 0;
-   astClearCard( this );
-   while( !astFitsEof( this ) ) DeleteCard( this, method, class, status );   
-   ignore_used = old_ignore_used;
-
-/* Delete the KeyMap which holds keywords and the latest sequence number
-   used by each of them. */
-   if( this->keyseq ) this->keyseq = astAnnul( this->keyseq );
-
-/* Delete the KeyMap holding the keyword names. */
-   if( this->keywords ) this->keywords = astAnnul( this->keywords );
-
-}
-
-static int EncodeFloat( char *buf, int digits, int width, int maxwidth,
-                        double value, int *status ){
-/*
-*
-*  Name:
-*     EncodeFloat
-
-*  Purpose:
-*     Formats a floating point value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int EncodeFloat( char *buf, int digits, int width, int maxwidth,
-*                      double value, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function formats the value using a G format specified in order
-*     to use the minimum field width (trailing zeros are not printed). 
-*     However, the G specifier does not include a decimal point unless it
-*     is necessary. FITS requires that floating point values always include
-*     a decimal point, so this function inserts one, if necessary. 
-
-*  Parameters:
-*     buf
-*        A character string into which the value is written. 
-*     digits
-*        The number of digits after the decimal point. If the supplied value
-*        is negative, the number of digits actually used may be reduced if 
-*        the string would otherwise extend beyond the number of columns 
-*        allowed by the FITS standard. If the value is positive, the 
-*        specified number of digits are always produced, even if it means 
-*        breaking the FITS standard.
-*     width
-*        The minimum field width to use. The value is right justified in 
-*        this field width.
-*     maxwidth
-*        The maximum field width to use. A value of zero is returned if 
-*        the maximum field width is exceeded.
-*     value
-*        The value to format.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The field width actually used, or zero if the value could not be
-*     formatted. This does not include the trailing null character.
-
-*  Notes:
-*     -  If there is room, a trailing zero is also added following the 
-*     inserted decimal point. 
-
-*/
-
-/* Local Variables: */
-   char *c;
-   char *w, *r;
-   int i;
-   int ldigits;
-   int n;
-   int ret;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0; 
-
-/* The supplied value of "digits" may be negative. Obtain the positive
-   value giving the initial number of decimal digits to use. */   
-   ldigits = ( digits > 0 ) ? digits : -digits;
-
-/* Loop until a suitably encoded value has been obtained. */
-   while( 1 ){
-
-/* Write the value into the buffer.  Most are formatted with a G specifier.
-   This will result in values between  -0.001 and -0.0001 being formatted
-   without an exponent, and thus occupying (ldigits+6) characters. With
-   an exponent, these values would be formatted in (ldigits+5) characters
-   thus saving one character. This is important because the default value
-   of ldigits is 15, resulting in 21 characters being used by the G
-   specifier. This is one more than the maximum allowed by the FITS
-   standard. Using an exponent instead would result in 20 characters
-   being used without any loss of precision, thus staying within the FITS
-   limit. Note, the precision used with the E specifier is one less than
-   with the G specifier because the digit to the left of the decimal place
-   is significant with the E specifier, and so we only need (ldigits-1)
-   significant digits to the right of the decimal point. */
-      if( value > -0.001 && value < -0.0001 ) {
-         (void) sprintf( buf, "%*.*E", width, ldigits - 1, value );
-      } else {
-         (void) sprintf( buf, "%*.*G", width, ldigits, value );
-      }
-
-/* Check that the value zero is not encoded with a minus sign (e.g. "-0.").
-   This also rounds out long sequences of zeros or nines.  */
-      CheckZero( buf, value, width, status );
-
-/* If the formatted value includes an exponent, it will have 2 digits.
-   If the exponent includes a leading zero, remove it. */
-      if( ( w = strstr( buf, "E-0" ) ) ) {
-         w += 2;
-      } else if( ( w = strstr( buf, "E+0" ) ) ){
-         w += 2;
-      } else if( ( w = strstr( buf, "E0" ) ) ){
-         w += 1;
-      } 
-
-/* If a leading zero was found, shuffle everything down from the start of
-   the string by one character, over-writing the redundant zero, and insert
-   a space at the start of the string. */
-      if( w ) {
-         r = w - 1 ;
-         while( w != buf ) *(w--) = *(r--);
-         *w = ' ';
-      }
-
-/* If the used field width was too large, reduce it and try again, so
-   long as we are allowed to change the number of digits being used. */
-      ret = strlen( buf );
-      if( ret > width && digits < 0 ){
-         ldigits -= ( ret - width );
-       
-/* Otherwise leave the loop. Return zero field width if the maximum field 
-   width was exceeded. */
-      } else {
-         if( ret > maxwidth ) ret = 0;
-         break;
-      }
-
-   }
-
-/* If a formatted value was obtained, we need to ensure that the it includes 
-   a decimal point. */
-   if( ret ){
-
-/* Get a pointer to the first digit in the buffer. */
-      c = strpbrk( buf, "0123456789" );
-
-/* Something funny is going on if there are no digits in the buffer,
-   so return a zero field width. */
-      if( !c ){
-         ret = 0;
-
-/* Otherwise... */
-      } else {
-
-/* Find the number of digits following and including the first digit. */
-         n = strspn( c, "0123456789" );
-
-/* If the first non-digit character is a decimal point, do nothing. */
-         if( c[ n ] != '.' ){
-
-/* If there are two or more leading spaces, move the start of the string
-   two character to the left, and insert ".0" in the gap created. This
-   keeps the field right justified within the desired field width. */
-            if( buf[ 0 ] == ' ' && buf[ 1 ] == ' ' ){
-               for( i = 2; i < c - buf + n; i++ ) buf[ i - 2 ] = buf[ i ];
-               c[ n - 2 ] = '.';
-               c[ n - 1 ] = '0';
-
-/* If there is just one leading space, move the start of the string
-   one character to the left, and insert "." in the gap created. This
-   keeps the field right justified within the desired field width. */
-            } else if( buf[ 0 ] == ' ' ){
-               for( i = 0; i < n; i++ ) c[ i - 1 ] = c[ i ];
-               c[ n - 1 ] = '.';
-  
-/* If there are no leading spaces we need to move the end of the string
-   to the right. This will result in the string no longer being right 
-   justified in the required field width. Return zero if there is 
-   insufficient room for an extra character. */
-            } else {
-               ret++;
-               if( ret > maxwidth ){
-                  ret = 0;
-
-/* Otherwise, more the end of the string one place to the right and insert 
-   the decimal point. */
-               } else {
-                  for( i = strlen( c ); i >= n; i-- ) c[ i + 1 ] = c[ i ];
-                  c[ n ] = '.';
-               }
-            }
-         }
-      }
-   }
-
-/* Return the field width. */
-   return ret;
-
-}
-
-static int EncodeValue( AstFitsChan *this, char *buf, int col, int digits,
-                        const char *method, int *status ){
-/*
-*  Name:
-*     EncodeValue
-
-*  Purpose:
-*     Encode the current card's keyword value into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int EncodeValue( AstFitsChan *this, char *buf, int col, int digits,
-*                      const char *method, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function encodes the keyword value defined in the current card
-*     of the supplied FitsChan and stores it at the start of the supplied 
-*     buffer. The number of characters placed in the buffer is returned
-*     (not including a terminating null).
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     buf
-*        The buffer to receive the formatted value. This should be at least
-*        70 characters long.
-*     col
-*        The column number within the FITS header card corresponding to the
-*        start of "buf".
-*     digits
-*        The number of digits to use when formatting floating point
-*        values. If the supplied value is negative, the number of digits
-*        actually used may be reduced if the string would otherwise extend
-*        beyond the number of columns allowed by the FITS standard. If the
-*        value is positive, the specified number of digits are always
-*        produced, even if it means breaking the FITS standard.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of columns used by the encoded value.
-
-*  Notes:
-*     -  The function returns 0 if an error has already occurred
-*     or if an error occurs for any reason within this function.
-*/
-
-/* Local Variables: */
-   char *c;         /* Pointer to next character */
-   char *name;      /* Pointer to the keyword name */
-   double dval;     /* Keyword value */
-   void *data;      /* Pointer to keyword value */
-   int i;           /* Loop count */
-   int ilen;        /* Length of imaginary part */
-   int len;         /* Returned length */
-   int quote;       /* Quote character found? */
-   int rlen;        /* Length of real part */
-   int type;        /* Data type for keyword in current card */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise returned length. */
-   len = 0;
-
-/* Get the data type of the keyword. */
-   type = CardType( this, status );
-
-/* Get a pointer to the data value in the current card. */
-   data = CardData( this, NULL, status );
-
-/* Return if there is no defined value associated with the keyword in the 
-   current card. */
-   if( type != AST__UNDEF ) {
-
-/* Get the name of the keyword. */
-      name = CardName( this, status );
-
-/* Go through each supported data type (roughly in the order of
-   decreasing usage)... */
-
-/* AST__FLOAT - stored internally in a variable of type "double".  Right 
-   justified to column 30 in the header card. */
-      if( type == AST__FLOAT ){
-         dval = *( (double *) data );
-   
-         len = EncodeFloat( buf, digits, FITSRLCOL - FITSNAMLEN - 2, 
-                            AST__FITSCHAN_FITSCARDLEN - col + 1, dval, status );
-   
-         if( len <= 0 && astOK ) {
-            astError( AST__BDFTS, "%s(%s): Cannot encode floating point value "
-                      "%g into a FITS header card for keyword '%s'.", status, method,
-                      astGetClass( this ), dval, name );
-         }
-
-/* AST__STRING & AST__CONTINUE - stored internally in a null terminated array of 
-   type "char".  The encoded string is enclosed in single quotes, starting
-   at FITS column 11 and ending in at least column 20. Single quotes
-   in the string are replaced by two adjacent single quotes. */
-      } else if( type == AST__STRING || type == AST__CONTINUE ){
-         c = (char *) data;
-
-/* Enter the opening quote. */
-         len = 0;
-         buf[ len++ ] = '\'';
-
-/* Inspect each character, looking for quotes. */
-         for ( i = 0; c[ i ]; ) {
-            quote = ( c[ i ] == '\'' );
-
-/* If it will not fit into the header card (allowing for doubled
-   quotes), give up here. */
-            if ( len + ( quote ? 2 : 1 ) > AST__FITSCHAN_FITSCARDLEN - col ) break;
-
-/* Otherwise, copy it into the output buffer and double any quotes. */
-            buf[ len++ ] = c[ i ];
-            if ( quote ) buf[ len++ ] = '\'';
-
-/* Look at the next character. */
-            i++;
-         }
-
-/* Pad the string out to the required minimum length with blanks and
-   add the final quote. */
-         while( len < FITSSTCOL - col ) buf[ len++ ] = ' ';
-         buf[ len++ ] = '\'';
-
-/* Inspect any characters that weren't used. If any are non-blank,
-   report an error. */
-         for ( ; c[ i ]; i++ ) {
-            if ( !isspace( c[ i ] ) ) {
-               astError( AST__BDFTS,
-                         "%s(%s): Cannot encode string '%s' into a FITS "
-                         "header card for keyword '%s'.", status, method, astGetClass( this ), 
-                         (char *) data, name );
-               break;
-            }
-         }
-
-/* INTEGER - stored internally in a variable of type "int". Right justified
-   to column 30 in the header card. */
-      } else if( type == AST__INT ){
-         len = sprintf(  buf, "%*d", FITSRLCOL - col + 1, 
-                         *( (int *) data ) );
-         if( len < 0 || len > AST__FITSCHAN_FITSCARDLEN - col ) {
-            astError( AST__BDFTS, "%s(%s): Cannot encode integer value %d into a "
-                      "FITS header card for keyword '%s'.", status, method, astGetClass( this ), 
-                      *( (int *) data ), name );
-         }
-
-/* LOGICAL - stored internally in a variable of type "int". Represented by
-   a "T" or "F" in column 30 of the FITS header card. */
-      } else if( type == AST__LOGICAL ){
-         for( i = 0; i < FITSRLCOL - col; i++ ) buf[ i ] = ' ';
-         if( *( (int *) data ) ){
-            buf[ FITSRLCOL - col ] = 'T';
-         } else {
-            buf[ FITSRLCOL - col ] = 'F';
-         }
-         len = FITSRLCOL - col + 1;
-
-/* AST__COMPLEXF - stored internally in an array of two "doubles". The real
-   part is right justified to FITS column 30. The imaginary part is right
-   justified to FITS column 50. */
-      } else if( type == AST__COMPLEXF ){
-         dval = ( (double *) data )[ 0 ];
-   
-         rlen = EncodeFloat( buf, digits, FITSRLCOL - FITSNAMLEN - 2, 
-                             AST__FITSCHAN_FITSCARDLEN - col + 1, dval, status );
-         if( rlen <= 0 || rlen > AST__FITSCHAN_FITSCARDLEN - col ) {
-            astError( AST__BDFTS, "%s(%s): Cannot encode real part of a complex "
-                      "floating point value [%g,%g] into a FITS header card "
-                      "for keyword '%s'.", status, method, astGetClass( this ), dval, 
-                      ( (double *) data )[ 1 ], name );
-         } else {
-   
-            dval = ( (double *) data )[ 1 ];
-            ilen = EncodeFloat( buf + rlen, digits, 
-                                FITSIMCOL - FITSRLCOL, 
-                                AST__FITSCHAN_FITSCARDLEN - col - rlen, dval, status );
-   
-            if( ilen <= 0 ) {
-               astError( AST__BDFTS, "%s(%s): Cannot encode imaginary part of a "
-                         "complex floating point value [%g,%g] into a FITS header "
-                         "card for keyword '%s'.", status, method, astGetClass( this ),
-                         ( (double *) data )[ 0 ], dval, name );
-            } else {
-               len = ilen + rlen;   
-            }
-   
-         }      
-
-/* AST__COMPLEXI - stored internally in a an array of two "ints". */
-      } else if( type == AST__COMPLEXI ){
-         rlen = sprintf(  buf, "%*d", FITSRLCOL - col + 1, 
-                          ( (int *) data )[ 0 ] );
-         if( rlen < 0 || rlen > AST__FITSCHAN_FITSCARDLEN - col ) {
-            astError( AST__BDFTS, "%s(%s): Cannot encode real part of a complex "
-                      "integer value [%d,%d] into a FITS header card "
-                      "for keyword '%s'.", status, method, astGetClass( this ), 
-                      ( (int *) data )[ 0 ], 
-                      ( (int *) data )[ 1 ], name );
-         } else {
-   
-            ilen = sprintf(  buf + rlen, "%*d",  FITSIMCOL - FITSRLCOL + 1,
-                             ( (int *) data )[ 1 ] );
-            if( ilen < 0 || ilen > AST__FITSCHAN_FITSCARDLEN - col - rlen ) {
-               astError( AST__BDFTS, "%s(%s): Cannot encode imaginary part of a "
-                         "complex integer value [%d,%d] into a FITS header card "
-                         "for keyword '%s'.", status, method, astGetClass( this ), 
-                         ( (int *) data )[ 0 ],
-                         ( (int *) data )[ 1 ], name );
-            } else {
-               len = ilen + rlen;   
-   
-            }
-   
-         }
-   
-/* Report an internal (ast) programming error if the keyword is of none of the
-   above types. */
-      } else if( astOK ){
-         astError( AST__INTER, "EncodeValue: AST internal programming error - "
-                   "FITS %s data-type not yet supported.", status, 
-                   type_names[ type ] );
-      }
-
-   }
-
-/* If an error has occurred, return zero length. */
-   if( !astOK ) len = 0;
-
-/* Return the answer. */
-   return len;
-}
-
-static AstGrismMap *ExtractGrismMap( AstMapping *map, int iax, 
-                                     AstMapping **new_map, int *status ){
-/*
-*  Name:
-*     ExtractGrismMap
-
-*  Purpose:
-*     Extract a GrismMap from the end of the supplied Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstGrismMap *ExtractGrismMap( AstMapping *map, int iax, 
-*                                   AstMapping **new_map, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function examines the supplied Mapping; if the specified output
-*     coordinate of the Mapping is created directly by an un-inverted GrismMap,
-*     then a pointer to the GrismMap is returned as the function value. A new 
-*     Mapping is also returned via parameter "new_map" which is a copy of 
-*     the supplied Mapping, except that the GrismMap is replaced with a 
-*     UnitMap. If no GrismMap is found, NULL is returned for both Mappings.
-
-*     The condition that "the specified output coordinate of the Mapping is 
-*     created directly by an un-inverted GrismMap" means that the output
-*     of the GrismMap is no subsequently modified by any further Mappings
-*     before being returned as the "iax"th output of the supplied Mapping.
-*     This means the GrismMap must be "at the end of" a CmpMap, not in
-*     the middle of the CmpMap.
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping to check.
-*     iax
-*        The index for the output coordinate to be checked.
-*     new_map
-*        Pointer to a location at which to return a pointer to a new
-*        Mapping which is a copy of "map" except that the GrismMap is 
-*        replaced by a UnitMap. NULL is returned if the specified output 
-*        was not created by a GrismMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The extracted GrismMap, or NULL if the specified output was not
-*     created by a GrismMap.
-
-*/
-
-/* Local Variables: */
-   AstMapping *mapa;     /* First component Mapping */
-   AstMapping *mapb;     /* Second component Mapping */
-   AstMapping *new_mapa; /* Replacement for first component Mapping */
-   AstMapping *new_mapb; /* Replacement for second component Mapping */
-   AstGrismMap *ret;     /* Returned GrismMap */
-   int inva;             /* Invert attribute for mapa within the CmpMap */
-   int invb;             /* Invert attribute for mapb within the CmpMap */
-   int na;               /* Number of outputs for mapa */
-   int old_inva;         /* Current Invert attribute for mapa */
-   int old_invb;         /* Current Invert attribute for mapb */
-   int series;           /* Are component Mappings applied in series? */
-
-/* Initialise */
-   ret = NULL;
-   *new_map = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* If the supplied Mapping is a GrismMap which has not been inverted, 
-   return it as the function value and return a UnitMap as the new 
-   Mapping. */
-   if( astIsAGrismMap( map ) ) {
-      if( !astGetInvert( map ) ) {
-         ret = astClone( map );
-         *new_map = (AstMapping *) astUnitMap( 1, "", status );
-      }
-
-/* If the supplied Mapping is a CmpMap, get its two component Mappings,
-   see if they are applied in parallel or series, and get the Invert
-   attribute values which the component Mappings had at the time the 
-   CmpMap was created. */
-   } else if(  astIsACmpMap( map ) ) {
-      astDecompose( map, &mapa, &mapb, &series, &inva, &invb );
-
-/* Temporaily reset the Invert attributes of the component Mappings back to 
-   the values they had when the CmpMap was created. */
-      old_inva = astGetInvert( mapa );
-      old_invb = astGetInvert( mapb );
-      astSetInvert( mapa, inva );
-      astSetInvert( mapb, invb );
-
-/* If the supplied Mapping is a series CmpMap, attempt to extract a
-   GrismMap from the second component Mapping ("mapb"). The first
-   component Mapping ("mapa") is unchanged. We do not need to consdier
-   the first component since we are only interested in GrismMaps which are
-   at the end of the CmpMap. */
-      if( series ) {
-         ret = ExtractGrismMap( mapb, iax, &new_mapb, status );
-         if( ret ) new_mapa = astClone( mapa );
-
-/* If the supplied Mapping is a parallel CmpMap, attempt to extract a
-   GrismMap from the component Mapping which produces output "iax". The
-   other component Mapping is unchanged. */
-      } else {
-         na = astGetNout( mapa );
-         if( iax < na ) {
-            ret = ExtractGrismMap( mapa, iax, &new_mapa, status );
-            if( ret ) new_mapb = astClone( mapb );
-         } else {
-            ret = ExtractGrismMap( mapb, iax - na, &new_mapb, status );
-            if( ret ) new_mapa = astClone( mapa );
-         }
-      }
-
-/* If succesful, create a new CmpMap to return. */
-      if( ret ) {
-         *new_map = (AstMapping *) astCmpMap( new_mapa, new_mapb, series, "", status );
-         new_mapa = astAnnul( new_mapa );                           
-         new_mapb = astAnnul( new_mapb );                           
-      } 
-
-/* Re-instate the original Invert attributes of the component Mappings. */
-      astSetInvert( mapa, old_inva );
-      astSetInvert( mapb, old_invb );
-
-/* Annul the component Mapping pointers. */
-      mapa = astAnnul( mapa );
-      mapb = astAnnul( mapb );
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int MakeBasisVectors( AstMapping *map, int nin, int nout, 
-                             double *g0, AstPointSet *psetg, 
-                             AstPointSet *psetw, int *status ){
-/*
-*  Name:
-*     MakeBasisVectors
-
-*  Purpose:
-*     Create a set of basis vectors in grid coordinates
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int MakeBasisVectors( AstMapping *map, int nin, int nout, 
-*                           double *g0, AstPointSet *psetg, 
-*                           AstPointSet *psetw, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns a set of unit vectors in grid coordinates,
-*     one for each grid axis. Each unit vector is parallel to the
-*     corresponding grid axis, and rooted at a specified grid position
-*     ("g0"). The IWC coordinates corresponding to "g0" and to the end of 
-*     each of the unit vectors are also returned, together with a flag
-*     indicating if all the IWC coordinate values are good.
-
-*  Parameters:
-*     map
-*        A pointer to a Mapping which transforms grid coordinates into
-*        intermediate world coordinates (IWC). The number of outputs must 
-*        be greater than or equal to the number of inputs.
-*     nin
-*        The number of inputs for "map" (i.e. the number of grid axes).
-*     nout
-*        The number of outputs for "map" (i.e. the number of IWC axes).
-*     g0
-*        Pointer to an array of holding the grid coordinates at the
-*        "root" position.
-*     psetg
-*        A pointer to a PointSet which can be used to hold the required
-*        grid positions. This should have room for nin+1 positions. On
-*        return, the first position holds "g0", and the subsequent "nin" 
-*        positions hold are offset from "g0" by unit vectors along the
-*        corresponding grid axis. 
-*     psetw
-*        A pointer to a PointSet which can be used to hold the required
-*        IWC position. This should also have room for nin+1 positions. On
-*        return, the values are the IWC coordinates corresponding to the
-*        grid positions returned in "psetg".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if all the axis values in "psetw" are good.
-*     Zero is returned otherwise.
-
-*  Notes:
-*     -  Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
-   double **ptrg;
-   double **ptrw;
-   double *c;
-   int i;
-   int ii;
-   int j;
-   int ret;               
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Get pointers to the data in the two supplied PointSets. */
-   ptrg = astGetPoints( psetg );
-   ptrw = astGetPoints( psetw );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Assume success. */
-      ret = 1;
-
-/* Store the required grid positions in PointSet "pset1". The first
-   position is the supplied root grid position, g0. The next "nin" 
-   positions are offset from the root position by a unit vector along 
-   each grid axis in turn. Store values for each grid axis in turn. */
-      for( i = 0; i < nin; i++ ) {
-
-/* Get a pointer to the first axis value for this grid axis. */
-         c = ptrg[ i ];         
-
-/* Initially set all values for this axis to the supplied root grid value. */
-         for( ii = 0; ii < nin + 1; ii++ ) c[ ii ] = g0[ i ];
-
-/* Modify the value corresponding to the vector along this grid axis. */
-         c[ i + 1 ] += 1.0;
-      }
-
-/* Transform these grid positions in IWC positions using the supplied 
-   Mapping. */
-      (void) astTransform( map, psetg, 1, psetw );
-
-/* Check that all the transformed positions are good. */
-      for( j = 0; j < nout; j++ ) {
-         c = ptrw[ j ];
-         for( ii = 0; ii < nin + 1; ii++, c++ ) {
-            if( *c == AST__BAD ) {
-               ret = 0;
-               break;
-            }            
-         }
-      }
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static int FindBasisVectors( AstMapping *map, int nin, int nout, 
-                             double *dim, AstPointSet *psetg, 
-                             AstPointSet *psetw, int *status ){
-/*
-*  Name:
-*     FindBasisVectors
-
-*  Purpose:
-*     Find the a set of basis vectors in grid coordinates
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int FindBasisVectors( AstMapping *map, int nin, int nout, 
-*                           double *dim, AstPointSet *psetg, 
-*                           AstPointSet *psetw, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns a set of unit vectors in grid coordinates,
-*     one for each grid axis. Each unit vector is parallel to the
-*     corresponding grid axis, and rooted at a specified grid position
-*     ("g0"). The IWC coordinates corresponding to "g0" and to the end of 
-*     each of the unit vectors are also returned, together with a flag
-*     indicating if all the IWC coordinate values are good.
-
-*  Parameters:
-*     map
-*        A pointer to a Mapping which transforms grid coordinates into
-*        intermediate world coordinates (IWC). The number of outputs must 
-*        be greater than or equal to the number of inputs.
-*     nin
-*        The number of inputs for "map" (i.e. the number of grid axes).
-*     nout
-*        The number of outputs for "map" (i.e. the number of IWC axes).
-*     dim
-*        Array dimensions, in pixels, if known (otherwise supplied a NULL
-*        pointer to values of AST__BAD).
-*     psetg
-*        A pointer to a PointSet which can be used to hold the required
-*        grid position. This should have room for nin+1 positions. On
-*        return, the first position holds the "root" position and the 
-*        subsequent "nin" positions hold are offset from root position 
-*        by unit vectors along the corresponding grid axis. 
-*     psetw
-*        A pointer to a PointSet which can be used to hold the required
-*        IWC position. This should also have room for nin+1 positions. On
-*        return, the values are the IWC coordinates corresponding to the
-*        grid positions returned in "psetg".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if a set of basis vectors was found
-*     succesfully. Zero is returned otherwise.
-
-*  Notes:
-*     -  Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
-   double *g0;
-   double dd;
-   double ddlim;
-   int i;
-   int ii;
-   int ret;               
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Allocate an array to store the candidate root position. */
-   g0 = astMalloc( sizeof( double )*(size_t) nin );
-   if( astOK ) {
-
-/* First try the grid centre, if known. */
-      ddlim = 0;
-      ret = 0;
-      if( dim ) {
-         ret = 1;
-         for( i = 0; i < nin; i++ ) {
-            if( dim[ i ] != AST__BAD ) {
-               g0[ i ] = 0.5*dim[ i ];
-               if( dim[ i ] > ddlim ) ddlim = dim[ i ];               
-            } else {
-               ret = 0;
-               break;
-            }
-         }
-      }
-
-      if( ret ) ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
-       
-/* If this did not produce a set of good IWC positions, try grid position
-   (1,1,1...). */
-      if( !ret ) {
-         for( i = 0; i < nin; i++ ) g0[ i ] = 1.0;
-         ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
-      }       
-
-/* If this did not produce a set of good IWC positions, try a sequence of
-   grid positions which move an increasing distance along each grid axis
-   from (1,1,1,...). Stop when we get further than "ddlim" from the
-   origin. */
-      dd = 10.0;
-      if( ddlim == 0.0 ) ddlim = 10240.0;
-      while( !ret && dd <= ddlim ) {
-
-/* First try positions which extend across the middle of the data set.
-   If the image dimensions are known, make the line go from the "bottom
-   left corner" towards the "top right corner", taking the aspect ratio
-   of the image into account. Otherise, just use a vector of (1,1,1,..) */
-         for( i = 0; i < nin; i++ ) {
-            if( dim && dim[ i ] != AST__BAD ) {
-               g0[ i ] = dd*dim[ i ]/ddlim;
-            } else {
-               g0[ i ] = dd;
-            }
-         }
-
-         ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
-
-/* If the above didn't produce good positions, try moving out along each
-   grid axis in turn. */
-         for( ii = 0; !ret && ii < nin; ii++ ) {
-            for( i = 0; i < nin; i++ ) g0[ i ] = 1.0;
-            g0[ ii ] = dd;
-            ret = MakeBasisVectors( map, nin, nout, g0, psetg, psetw, status );
-         }
-
-/* Go further out from the origin for the next set of tests (if any). */
-         dd *= 2.0;
-      }       
-
-   }
-
-/* Free resources. */
-   g0 = astFree( g0 );
-
-/* Return the result. */
-   return ret;
-}
-
-static int FindLonLatSpecAxes( FitsStore *store, char s, int *axlon, int *axlat, 
-                           int *axspec, const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     FindLonLatSpecAxes
-
-*  Purpose:
-*     Search the CTYPE values in a FitsStore for celestial and spectral axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int FindLonLatSpecAxes( FitsStore *store, char s, int *axlon, int *axlat,
-*                             int *axspec, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     The supplied FitsStore is searched for axes with a specified axis
-*     description character which describe celestial longitude or latitude
-*     or spectral position.
-
-*  Parameters:
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     axlon
-*        Address of a location at which to return the index of the
-*        longitude axis (if found). This is the value of "i" within the
-*        keyword name "CTYPEi". A value of -1 is returned if no longitude
-*        axis is found.
-*     axlat
-*        Address of a location at which to return the index of the
-*        latitude axis (if found). This is the value of "i" within the
-*        keyword name "CTYPEi". A value of -1 is returned if no latitude
-*        axis is found.
-*     axspec
-*        Address of a location at which to return the index of the
-*        spectral axis (if found). This is the value of "i" within the
-*        keyword name "CTYPEi". A value of -1 is returned if no spectral 
-*        axis is found.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One is returned if both celestial axes were found. Zero is returned if 
-*     either axis was not found. The presence of a spectral axis does not
-*     affect the returned value.
-
-*  Notes:
-*     -  If an error occurs, zero is returned.
-
-*/
-
-/* Local Variables: */
-   char *assys;                   
-   char *astype;                  
-   char algcode[5];
-   char stype[5];
-   const char *ctype;
-   double dval;
-   int i;
-   int wcsaxes;     
-
-/* Initialise */
-   *axlon = -1;
-   *axlat = -1;
-   *axspec = -1;
-
-/* Check the global status. */
-   if ( !astOK ) return 0;
-
-/* Obtain the number of FITS WCS axes in the header. If the WCSAXES header 
-   was specified, use it. Otherwise assume it is the same as the number
-   of pixel axes. */
-   dval = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
-   if( dval != AST__BAD ) {
-      wcsaxes = (int) dval + 0.5;
-   } else {
-      wcsaxes = store->naxis;
-   }
-
-/* Loop round the FITS WCS axes, getting each CTYPE value. */
-   for( i = 0; i < wcsaxes && astOK; i++ ){
-      ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-
-/* Check a value was found. */
-      if( ctype ) {
-
-/* First check for spectral axes, either FITS-WCS or AIPS-like. */
-         if( IsSpectral( ctype, stype, algcode, status ) ||
-             IsAIPSSpectral( ctype, &astype, &assys, status ) ) {
-            *axspec = i;
-
-/* Otherwise look for celestial axes. Celestial axes must have a "-" as the 
-   fifth character in CTYPE. */
-         } else if( ctype[4] == '-' ) {
-
-/* See if this is a longitude axis (e.g. if the first 4 characters of CTYPE 
-   are "RA--" or "xLON" or "yzLN" ). */
-            if( !strncmp( ctype, "RA--", 4 ) ||
-                !strncmp( ctype, "AZ--", 4 ) ||
-                !strncmp( ctype + 1, "LON", 3 ) ||
-                !strncmp( ctype + 2, "LN", 2 ) ){
-               *axlon = i;
-
-/* Otherwise see if it is a latitude axis. */
-            } else if( !strncmp( ctype, "DEC-", 4 ) ||
-                       !strncmp( ctype, "EL--", 4 ) ||
-                       !strncmp( ctype + 1, "LAT", 3 ) ||
-                       !strncmp( ctype + 2, "LT", 2 ) ){
-               *axlat = i;
-            }
-         }
-      }
-   }
-
-/* Indicate failure if an error occurred. */
-   if( !astOK ) {
-      *axlon = -1;
-      *axlat = -1;
-      *axspec = -1;
-   }
-
-/* Return the result. */
-   return ( *axlat != -1 && *axlon != -1 );
-
-}
-
-static void FindWcs( AstFitsChan *this, int last, int all, int rewind, 
-                     const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     FindWcs
-
-*  Purpose:
-*     Find the first or last FITS WCS related keyword in a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void FindWcs( AstFitsChan *this, int last, int all, int rewind,
-*                   const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A search is made through the FitsChan for the first or last card 
-*     which relates to a FITS WCS keyword (any encoding). If "last" is
-*     non-zero, the next card becomes the current card. If "last" is
-*     zero, the WCS card is left as the current card. Cards marked as 
-*     having been read are included or not, as specified by "all".
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     last
-*        If non-zero, the last WCS card is searched for. Otherwise, the
-*        first WCS card is searched for.
-*     all
-*        If non-zero, then cards marked as having been read are included
-*        in the search. Otherwise such cards are ignored.
-*     rewind
-*        Only used if "last" is zero (i.e. the first card is being
-*        searched for). If "rewind" is non-zero, then the search starts 
-*        from the first card in the FitsChan. If zero, the search starts 
-*        from the current card.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The FitsChan is left at end-of-file if no FITS-WCS keyword cards 
-*     are found in the FitsChan.
-
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS       /* Declare the thread specific global data */
-   const char *keyname;     /* Keyword name from current card */
-   int nfld;                /* Number of fields in keyword template */
-   int old_ignore_used;     /* Original value of variable ignore_used */
-
-/* Check the global status. Also check the FitsChan is not empty. */
-   if( !astOK || !this->head ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Indicate that we should, or should not, skip over cards marked as having 
-   been read. */
-   old_ignore_used = ignore_used;
-   ignore_used = all ? 0 : 1;
-
-/* If required, set the FitsChan to start or end of file. */
-   if( last ) {
-      astSetCard( this, INT_MAX );
-   } else if( rewind ) {
-      astClearCard( this );
-   }
-
-/* If the current card is marked as used, and we are skipping used cards,
-   move on to the next unused card */
-   if( CARDUSED( this->card ) ) MoveCard( this, last?-1:1, method, class, status );
-
-/* Check each card moving backwards from the end to the start, or
-   forwards from the start to the end, until a WCS keyword is found, 
-   or the other end of the FitsChan is reached. */
-   while( astOK ){   
-
-/* Get the keyword name from the current card. */
-      keyname = CardName( this, status );
-
-/* Save a pointer to the keyword if it is the first non-null, non-comment
-   card. */
-      if( keyname ) { 
-
-/* If it matches any of the WCS keywords, move on one card 
-   and break out of the loop. */
-         if( Match( keyname, "CRVAL%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CRPIX%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CDELT%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CROTA%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CTYPE%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CUNIT%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PC%3d%3d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CD%3d%3d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CD%1d_%1d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PC%1d_%1d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "LONGPOLE", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "LONPOLE%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "LATPOLE%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PROJP%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PV%d_%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PS%d_%d%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "EPOCH", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "EQUINOX%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "MJD-OBS",  0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "DATE-OBS", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "RADECSYS", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "RADESYS%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "C%1dVAL%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "C%1dPIX%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "C%1dELT%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "C%1dYPE%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "C%1dNIT%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CNPIX1", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "CNPIX2", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PPO%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "AMDX%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "AMDY%d", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "XPIXELSZ", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "YPIXELSZ", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTRAH", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTRAM", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTRAS", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTDECD", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTDECM", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTDECS", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTDECSN", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PLTSCALE", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PPO1", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PPO2", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PPO4", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "PPO5", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "WCSNAME%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "SPECSYS%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "SSYSSRC%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "ZSOURCE%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "VELOSYS%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "RESTFRQ%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "MJD_AVG%0c", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "OBSGEO-X", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "OBSGEO-Y", 0, NULL, &nfld, method, class, status ) ||
-             Match( keyname, "OBSGEO-Z", 0, NULL, &nfld, method, class, status ) ) {
-
-            if( last ) MoveCard( this, 1, method, class, status );
-            break;
-         }
-      }
-
-/* Leave the FitsChan at end-of-file if no WCS cards were found. */
-      if( (last && FitsSof( this, status ) ) ||
-          (!last && astFitsEof( this ) ) ) {
-         astSetCard( this, INT_MAX );
-         break;
-      } else {
-         MoveCard( this, last?-1:1, method, class, status );
-      }
-
-   }
-
-/* Re-instate the original flag indicating if cards marked as having been 
-   read should be skipped over. */
-   ignore_used = old_ignore_used;
-
-/* Return. */
-   return;
-}
-
-static int FindString( int n, const char *list[], const char *test, 
-                       const char *text, const char *method, 
-                       const char *class, int *status ){
-/*
-*  Name:
-*     FindString
-
-*  Purpose:
-*     Find a given string within an array of character strings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int FindString( int n, const char *list[], const char *test, 
-*                     const char *text, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function identifies a supplied string within a supplied
-*     array of valid strings, and returns the index of the string within
-*     the array. The test option may not be abbreviated, but case is
-*     insignificant.
-
-*  Parameters:
-*     n
-*        The number of strings in the array pointed to be "list".
-*     list
-*        A pointer to an array of legal character strings.
-*     test
-*        A candidate string.
-*     text
-*        A string giving a description of the object, parameter,
-*        attribute, etc, to which the test value refers.
-*        This is only for use in constructing error messages. It should
-*        start with a lower case letter.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the identified string within the supplied array, starting
-*     at zero.
-
-*  Notes:
-*     -  A value of -1 is returned if an error has already occurred, or
-*     if this function should fail for any reason (for instance if the
-*     supplied option is not specified in the supplied list). 
-
-*/
-
-/* Local Variables: */
-   int ret;                /* The returned index */
-
-/* Check global status. */
-   if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
-   the loop when a match is found. */
-   for( ret = 0; ret < n; ret++ ) {
-      if( !Ustrcmp( test, list[ ret ], status ) ) break;
-   }
-
-/* Report an error if the supplied test string does not match any element
-   in the supplied list. */
-   if( ret >= n && astOK ) {
-      astError( AST__RDERR, "%s(%s): Illegal value '%s' supplied for %s.", status,
-                method, class, test, text );
-      ret = -1;
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static int FitOK( int n, double *act, double *est, double tol, int *status ) {
-/*
-*  Name:
-*     FitOK
-
-*  Purpose:
-*     See if a fit is usable.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int FitOK( int n, double *act, double *est, double tol, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function is supplied with a set of actual data values, and the
-*     corresponding values estimated by some fitting process. It tests
-*     that the RMS residual between them is no more than "tol".
-
-*  Parameters:
-*     n
-*        Number of data points.
-*     act
-*        Pointer to the start of the actual data values.
-*     est
-*        Pointer to the start of the estimated data values.
-*     tol
-*        The largest acceptable RMS error between "act" and "est".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if the two sets of values agree. Zero is
-*     returned otherwise.
-
-*  Notes:
-*     -  Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
-   int ret, i;   
-   double s1, s2;
-   double *px, *py, diff, mserr;
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Initialise the sum of the squared residuals, and the number summed. */
-   s1 = 0.0;
-   s2 = 0.0;
-
-/* Initialise pointers to the next actual and estimated values to use. */
-   px = act;
-   py = est;
-
-/* Loop round all pairs of good actual and estimate value. */
-   for( i = 0; i < n; i++, px++, py++ ){
-      if( *px != AST__BAD && *py != AST__BAD ) {
-
-/* Increment the sums need to find the RMS residual between the actual
-   and estimated values. */
-         diff = *px - *py;
-         s1 += diff*diff;
-         s2 += 1.0;
-      }
-   }
-
-/* If the sums are usable... */
-   if( s2 > 0.0 ) {
-
-/* Form the mean squared residual, and check if it is less than the
-   squared error limit. */
-      mserr = s1/s2;
-      if( mserr < tol*tol ) ret = 1;
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static int FitsFromStore( AstFitsChan *this, FitsStore *store, int encoding, 
-                          double *dim, AstFrameSet *fs, const char *method, 
-                          const char *class, int *status ){
-/*
-*  Name:
-*     FitsFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int FitsFromStore( AstFitsChan *this, FitsStore *store, int encoding, 
-*                        double *dim, AstFrameSet *fs, const char *method, 
-*                        const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using a specified encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     encoding
-*        The encoding to use.
-*     dim
-*        Pointer to an array holding the array dimensions (AST__BAD
-*        indicates that the dimenson is not known).
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Set the current card so that it points to the last WCS-related keyword
-   in the FitsChan (whether previously read or not). Any new WCS related
-   keywords either over-write pre-existing cards for the same keyword, or
-   (if no pre-existing card exists) are inserted after the last WCS related
-   keyword. */
-   FindWcs( this, 1, 1, 0, method, class, status );
-
-/* Do each non-standard FITS encoding... */
-   if( encoding == DSS_ENCODING ){
-      ret = DSSFromStore( this, store, method, class, status );
-
-   } else if( encoding == FITSPC_ENCODING ){
-      ret = PCFromStore( this, store, method, class, status );
-
-   } else if( encoding == FITSIRAF_ENCODING ){
-      ret = IRAFFromStore( this, store, method, class, status );
-
-   } else if( encoding == FITSAIPS_ENCODING ){
-      ret = AIPSFromStore( this, store, method, class, status );
-
-   } else if( encoding == FITSAIPSPP_ENCODING ){
-      ret = AIPSPPFromStore( this, store, method, class, status );
-
-   } else if( encoding == FITSCLASS_ENCODING ){
-      ret = CLASSFromStore( this, store, fs, dim, method, class, status );
-
-/* Standard FITS-WCS encoding */
-   } else {
-      ret = WcsFromStore( this, store, method, class, status );
-
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static FitsStore *FitsToStore( AstFitsChan *this, int encoding,
-                               const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     FitsToStore
-
-*  Purpose:
-*     Return a pointer to a FitsStore structure containing WCS information
-*     read from the supplied FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     FitsStore *FitsToStore( AstFitsChan *this, int encoding,
-*                             const char *method, const char *class )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function creates a new FitsStore containing WCS information
-*     read from the supplied FitsChan using the specified encoding. An
-*     error is reported and a null pointer returned if the FitsChan does 
-*     not contain usable WCS information with the specified encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     encoding
-*        The encoding to use.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*  Returned Value:
-*     A pointer to a new FitsStore, or NULL if an error has occurred. The 
-*     FitsStore should be released using FreeStore function when it is no 
-*     longer needed.
-
-*/
-
-/* Local Variables: */
-   AstFitsChan *trans;
-   FitsStore *ret;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Allocate memory for the new FitsStore, and store NULL pointers in it. */
-   ret = (FitsStore *) astMalloc( sizeof(FitsStore) );
-   if( ret ) {
-      ret->cname = NULL;
-      ret->ctype = NULL;
-      ret->ctype_com = NULL;
-      ret->cunit = NULL;
-      ret->radesys = NULL;
-      ret->wcsname = NULL;
-      ret->wcsaxes = NULL;
-      ret->pc = NULL;
-      ret->cdelt = NULL;
-      ret->crpix = NULL;
-      ret->crval = NULL;
-      ret->equinox = NULL;
-      ret->latpole = NULL;
-      ret->lonpole = NULL;
-      ret->mjdobs = NULL;
-      ret->mjdavg = NULL;
-      ret->dut1 = NULL;
-      ret->pv = NULL;
-      ret->specsys = NULL;
-      ret->ssyssrc = NULL;
-      ret->obsgeox = NULL;
-      ret->obsgeoy = NULL;
-      ret->obsgeoz = NULL;
-      ret->restfrq = NULL;
-      ret->restwav = NULL;
-      ret->zsource = NULL;
-      ret->velosys = NULL;
-      ret->asip = NULL;
-      ret->bsip = NULL;
-      ret->apsip = NULL;
-      ret->bpsip = NULL;
-      ret->imagfreq = NULL;
-      ret->naxis = 0;
-      ret->timesys = AST__UTC;
-   }
-
-/* Call the routine apropriate to the encoding. */
-   if( encoding == DSS_ENCODING ){
-      DSSToStore( this, ret, method, class, status );
-
-/* All other foreign encodings are treated as variants of FITS-WCS. */
-   } else {
-
-/* Create a new FitsChan containing standard translations for any
-   non-standard keywords in the supplied FitsChan. The non-standard
-   keywords are marked as provisionally read in the supplied FitsChan. */
-      trans = SpecTrans( this, encoding, method, class, status );
-
-/* Copy the required values to the FitsStore, using keywords in "trans"
-   in preference to those in "this". */
-      WcsToStore( this, trans, ret, method, class, status );
-
-/* Delete the temporary FitsChan holding translations of non-standard
-   keywords. */
-      if( trans ) trans = (AstFitsChan *) astDelete( trans );
-
-/* Store the number of pixel axes. This is taken as the highest index used
-   in any primary CRPIX keyword. */
-      ret->naxis = GetMaxJM( &(ret->crpix), ' ', status ) + 1;
-   }
-
-/* If an error has occurred, free the returned FitsStore, and return a null 
-   pointer. */
-   if( !astOK ) ret = FreeStore( ret, status );
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void FreeItem( double ****item, int *status ){
-/*
-*  Name:
-*     FreeItem
-
-*  Purpose:
-*     Frees all dynamically allocated memory associated with a specified
-*     item in a FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void FreeItem( double ****item, int *status );
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Frees all dynamically allocated memory associated with the specified
-*     item in a FitsStore. A NULL pointer is stored in the FitsStore.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (j), and the pointer locates an
-*        array of axis keyword values. These arrays of keyword values have 
-*        one element for every pixel axis (i) or projection parameter (m). 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*    - This function attempt to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
-   int si;               /* Integer co-ordinate version index */
-   int j;                /* Intermediate co-ordinate axis index */
-
-/* Check the supplied pointer */
-   if( item && *item ){
-
-/* Loop round each coordinate version. */
-      for( si = 0; si < astSizeOf( (void *) *item )/sizeof(double **);
-           si++ ){
-
-/* Check the pointer stored for this co-ordinate version is not null. */
-         if( (*item)[si] ) {
-
-/* Loop round the intermediate axes. */
-            for( j = 0; j < astSizeOf( (void *) (*item)[si] )/sizeof(double *);
-                 j++ ){
-
-/* Free the pixel axis/parameter index pointer. */
-               (*item)[si][j] = (double *) astFree( (void *) (*item)[si][j] );
-            }
-
-/* Free the intermediate axes pointer */
-            (*item)[si] = (double **) astFree( (void *) (*item)[si] );
-         }
-      }
-
-/* Free the co-ordinate versions pointer */
-      *item = (double ***) astFree( (void *) *item );
-
-   }
-
-}
-
-static void FreeItemC( char ****item, int *status ){
-/*
-*  Name:
-*     FreeItemC
-
-*  Purpose:
-*     Frees all dynamically allocated memory associated with a specified
-*     string item in a FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void FreeItemC( char ****item, int *status );
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Frees all dynamically allocated memory associated with the specified
-*     string item in a FitsStore. A NULL pointer is stored in the FitsStore.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (j), and the pointer locates a
-*        character string. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*    - This function attempt to execute even if an error has occurred.
-
-*/
-
-/* Local Variables: */
-   int si;               /* Integer co-ordinate version index */
-   int j;                /* Intermediate co-ordinate axis index */
-
-/* Check the supplied pointer */
-   if( item && *item ){
-
-/* Loop round each coordinate version. */
-      for( si = 0; si < astSizeOf( (void *) *item )/sizeof(char **);
-           si++ ){
-
-/* Check the pointer stored for this co-ordinate version is not null. */
-         if( (*item)[si] ) {
-
-/* Loop round the intermediate axes. */
-            for( j = 0; j < astSizeOf( (void *) (*item)[si] )/sizeof(char *);
-                 j++ ){
-
-/* Free the character string pointer. */
-               (*item)[si][j] = (char *) astFree( (void *) (*item)[si][j] );
-            }
-
-/* Free the intermediate axes pointer */
-            (*item)[si] = (char **) astFree( (void *) (*item)[si] );
-         }
-      }
-
-/* Free the co-ordinate versions pointer */
-      *item = (char ***) astFree( (void *) *item );
-
-   }
-
-}
-
-static FitsStore *FreeStore( FitsStore *store, int *status ){
-/*
-*  Name:
-*     FreeStore
-
-*  Purpose:
-*     Free dynamic arrays stored in a FitsStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     FitsStore *FreeStore( FitsStore *store, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function frees all dynamically allocated arrays stored in the
-*     supplied FitsStore structure, and returns a NULL pointer.
-
-*  Parameters:
-*     store
-*        Pointer to the structure to clean.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function attempts to execute even if an error exists on entry.
-
-*/
-
-/* Return if no FitsStore was supplied. */
-   if( !store ) return NULL;
-
-/* Free each of the dynamic arrays stored in the FitsStore. */
-   FreeItemC( &(store->cname), status );
-   FreeItemC( &(store->ctype), status );
-   FreeItemC( &(store->ctype_com), status );
-   FreeItemC( &(store->cunit), status );
-   FreeItemC( &(store->radesys), status );
-   FreeItemC( &(store->wcsname), status );
-   FreeItemC( &(store->specsys), status );
-   FreeItemC( &(store->ssyssrc), status );
-
-   FreeItem( &(store->pc), status );
-   FreeItem( &(store->cdelt), status );
-   FreeItem( &(store->crpix), status );
-   FreeItem( &(store->crval), status );
-   FreeItem( &(store->equinox), status );
-   FreeItem( &(store->latpole), status );
-   FreeItem( &(store->lonpole), status );
-   FreeItem( &(store->mjdobs), status );
-   FreeItem( &(store->dut1), status );
-   FreeItem( &(store->mjdavg), status );
-   FreeItem( &(store->pv), status );
-   FreeItem( &(store->wcsaxes), status );
-   FreeItem( &(store->obsgeox), status );
-   FreeItem( &(store->obsgeoy), status );
-   FreeItem( &(store->obsgeoz), status );
-   FreeItem( &(store->restfrq), status );
-   FreeItem( &(store->restwav), status );
-   FreeItem( &(store->zsource), status );
-   FreeItem( &(store->velosys), status );
-   FreeItem( &(store->asip), status );
-   FreeItem( &(store->bsip), status );
-   FreeItem( &(store->apsip), status );
-   FreeItem( &(store->bpsip), status );
-   FreeItem( &(store->imagfreq), status );
-
-   return (FitsStore *) astFree( (void *) store );
-}
-
-static char *FormatKey( const char *key, int c1, int c2, char s, int *status ){
-/*
-*  Name:
-*     FormatKey
-
-*  Purpose:
-*     Format a keyword name with indices and co-ordinate version character.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     char *FormatKey( const char *key, int c1, int c2, char s, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function formats a keyword name by including the supplied
-*     axis/parameter indices and co-ordinate version character.
-
-*  Parameters:
-*     key
-*        The base name of the keyword (e.g. "CD", "CRVAL", etc).
-*     c1
-*        An integer value to append to the end of the keyword. Ignored if
-*        less than zero.
-*     c2
-*        A second integer value to append to the end of the keyword. Ignored if
-*        less than zero. This second integer is preceeded by an underscore.
-*     s
-*        The co-ordinate version character to append to the end of the
-*        final string. Ignored if blank.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value;
-*     A pointer to a static character buffer containing the final string.
-*     NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            
-   char *ret;
-   int len;
-   int nc; 
-
-/* Initialise */
-   ret = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return ret;   
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* No characters stored yet. A value of -1 is used to indicate that an 
-   error has occurred. */
-   len = 0;
-
-/* Store the supplied keyword base name. */
-   if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "%s", key ) ) >= 0 ){
-      len += nc;
-   } else {
-      len = -1;
-   }
-
-/* If index c1 has been supplied, append it to the end of the string. */
-   if( c1 >= 0 ) {
-      if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "%d", c1 ) ) >= 0 ){
-         len += nc;
-      } else {
-         len = -1;
-      }
-
-/* If index c2 has been supplied, append it to the end of the string,
-   preceeded by an underscore. */
-      if( c2 >= 0 ) {
-         if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "_%d", c2 ) ) >= 0 ){
-            len += nc;
-         } else {
-            len = -1;
-         }
-      }
-   }
-
-/* If a co-ordinate version character has been supplied, append it to the end 
-   of the string. */
-   if( s != ' ' ) {
-      if( len >= 0 && ( nc = sprintf( formatkey_buff + len, "%c", s ) ) >= 0 ){
-         len += nc;
-      } else {
-         len = -1;
-      }
-   }
-
-/* Report an error if necessary */
-   if( len < 0 && astOK ) {
-      astError( AST__INTER, "FormatKey(fitschan): AST internal error; failed "
-                "to format the keyword %s with indices %d and %d, and "
-                "co-ordinate version %c.", status, key, c1, c2, s );
-      ret = NULL;
-
-   } else {
-      ret = formatkey_buff;
-   }
-
-   return formatkey_buff;
-}
-
-static AstObject *FsetFromStore( AstFitsChan *this, FitsStore *store, 
-                                 const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     FsetFromStore
-
-*  Purpose:
-*     Create a FrameSet using the the information previously stored in
-*     the suppllied FitsStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstObject *FsetFromStore( AstFitsChan *this, FitsStore *store, 
-*                               const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function creates a new FrameSet containing WCS information
-*     stored in the supplied FitsStore. A null pointer is returned and no
-*     error is reported if this is not possible.
-
-*  Parameters:
-*     this
-*        The FitsChan from which the keywords were read. Warning messages
-*        are added to this FitsChan if the celestial co-ordinate system is 
-*        not recognized. 
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new FrameSet, or a null pointer if no FrameSet
-*     could be constructed.
-
-*  Notes:
-*     -  The pixel Frame is given a title of "Pixel Coordinates", and
-*     each axis in the pixel Frame is given a label of the form "Pixel
-*     axis <n>", where <n> is the axis index (starting at one).
-*     -  The FITS CTYPE keyword values are used to set the labels for any
-*     non-celestial axes in the physical coordinate Frames, and the FITS 
-*     CUNIT keywords are used to set the corresponding units strings.
-*     -  On exit, the pixel Frame is the base Frame, and the physical
-*     Frame derived from the primary axis descriptions is the current Frame.
-*     - Extra Frames are added to hold any secondary axis descriptions. All
-*     axes within such a Frame refer to the same coordinate version ('A',
-*     'B', etc).
-
-*/
-
-/* Local Variables: */
-   AstFrame *frame;   /* Pointer to pixel Frame */
-   AstFrameSet *ret;  /* Pointer to returned FrameSet */
-   char buff[ 20 ];   /* Buffer for axis label */
-   char s;            /* Co-ordinate version character */
-   int i;             /* Pixel axis index */
-   int physical;      /* Index of primary physical co-ordinate Frame */
-   int pixel;         /* Index of pixel Frame in returned FrameSet */
-   int use;           /* Has this co-ordinate version been used? */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return (AstObject *) ret;
-
-/* Only proceed if there are some axes. */
-   if( store->naxis ) {
-
-/* Create a Frame describing the pixel coordinate system. Give it the Domain 
-   GRID. */
-      frame = astFrame( store->naxis, "Title=Pixel Coordinates,Domain=GRID", status );
-
-/* Store labels for each pixel axis. */
-      if( astOK ){
-         for( i = 0; i < store->naxis; i++ ){
-            sprintf( buff, "Pixel axis %d", i + 1 );
-            astSetLabel( frame, i, buff );
-         }
-      }
-
-/* Create the FrameSet initially holding just the pixel coordinate frame
-   (this becomes the base Frame). */
-      ret = astFrameSet( frame, "", status );
-
-/* Annul the pointer to the pixel coordinate Frame. */
-      frame = astAnnul( frame );
-
-/* Get the index of the pixel Frame in the FrameSet. */
-      pixel = astGetCurrent( ret );
-
-/* Produce the Frame describing the primary axis descriptions, and add it
-   into the FrameSet. */
-      AddFrame( this, ret, pixel, store->naxis, store, ' ', method, class, status );  
-
-/* Get the index of the primary physical co-ordinate Frame in the FrameSet. */
-      physical = astGetCurrent( ret );
-
-/* Loop, producing secondary axis Frames for each of the co-ordinate 
-   versions stored in the FitsStore. */
-      for( s = 'A'; s <= GetMaxS( &(store->crval), status ) && astOK; s++ ){      
-
-/* Only use this co-ordinate version character if any of the required
-   keywords (for any axis) are stored in the FitsStore. */
-         use = 0;
-         for( i = 0; i < store->naxis; i++ ){
-            if( GetItem( &(store->crval), i, 0, s, NULL, method, class, status ) != AST__BAD ||
-                GetItem( &(store->crpix), 0, i, s, NULL, method, class, status ) != AST__BAD ||
-                GetItemC( &(store->ctype), i, s, NULL, method, class, status ) != NULL ){
-               use = 1;
-               break;
-            }
-         }
-
-/* If this co-ordinate version has been used, add a Frame to the returned
-   FrameSet holding this co-ordinate version. */
-         if( use ) AddFrame( this, ret, pixel, store->naxis, store, s, method, class, status );  
-
-      }
-
-/* Ensure the pixel Frame is the Base Frame and the primary physical
-   Frame is the Current Frame. */
-      astSetBase( ret, pixel );
-      astSetCurrent( ret, physical );
-   }
-
-/* If an error has occurred, free the returned FrameSet and return a null 
-   pointer. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the answer. */
-   return (AstObject *) ret;
-
-}
-
-static FitsStore *FsetToStore( AstFitsChan *this, AstFrameSet *fset, int naxis,
-                               double *dim, const char *class, 
-                               const char *method, int *status ){
-/*
-*  Name:
-*     FsetToStore
-
-*  Purpose:
-*     Fill a FitsStore structure with a description of the supplied
-*     FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     FitsStore *FsetToStore( AstFitsChan *this, AstFrameSet *fset, int naxis,
-*                             double *dim, const char *class, 
-*                             const char *method, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function creates a new FitsStore containing WCS information
-*     read from the supplied FitsChan using the specified encoding. An
-*     error is reported and a null pointer returned if the FitsChan does 
-*     not contain usable WCS information with the specified encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     fset
-*        Pointer to the FrameSet.
-*     naxis
-*        The number of axes in the Base Frame of the supplied FrameSet.
-*     dim 
-*        Pointer to an array of pixel axis dimensions. Individual elements 
-*        will be AST__BAD if dimensions are not known.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a new FitsStore, or NULL if an error has occurred. The 
-*     FitsStore should be released using FreeStore function when it is no 
-*     longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the AST error status set, or if it should fail for any
-*     reason.
-*     - The Base Frame in the FrameSet is used as the pixel Frame, and
-*     the Current Frame is used to create the primary axis descriptions.
-*     Attempts are made to create secondary axis descriptions for any 
-*     other Frames in the FrameSet (up to a total of 26).
-*/
-
-/* Local Variables: */
-   AstFrame *frame;     /* A Frame */
-   const char *id;      /* Frame Ident string */
-   int nfrm;            /* Number of Frames in FrameSet */
-   char *sid;           /* Pointer to array of version letters */
-   int frms[ 'Z' + 1 ]; /* Array of Frame indices */
-   FitsStore *ret;      /* Returned FitsStore */
-   char s;              /* Co-ordinate version character */
-   int ibase;           /* Base Frame index */
-   int icurr;           /* Current Frame index */
-   int ifrm;            /* Next Frame index */
-   int primok;          /* Primary Frame stored succesfully? */
-   int secok;           /* Secondary Frame stored succesfully? */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Allocate memory for the new FitsStore, and store NULL pointers in it. */
-   ret = (FitsStore *) astMalloc( sizeof(FitsStore) );
-   if( astOK ) {
-      ret->cname = NULL;
-      ret->ctype = NULL;
-      ret->ctype_com = NULL;
-      ret->cunit = NULL;
-      ret->radesys = NULL;
-      ret->wcsname = NULL;
-      ret->wcsaxes = NULL;
-      ret->pc = NULL;
-      ret->cdelt = NULL;
-      ret->crpix = NULL;
-      ret->crval = NULL;
-      ret->equinox = NULL;
-      ret->latpole = NULL;
-      ret->lonpole = NULL;
-      ret->dut1 = NULL;
-      ret->mjdobs = NULL;
-      ret->mjdavg = NULL;
-      ret->pv = NULL;
-      ret->specsys = NULL;
-      ret->ssyssrc = NULL;
-      ret->obsgeox = NULL;
-      ret->obsgeoy = NULL;
-      ret->obsgeoz = NULL;
-      ret->restfrq = NULL;
-      ret->restwav = NULL;
-      ret->zsource = NULL;
-      ret->velosys = NULL;
-      ret->asip = NULL;
-      ret->bsip = NULL;
-      ret->apsip = NULL;
-      ret->bpsip = NULL;
-      ret->imagfreq = NULL;
-      ret->naxis = naxis;
-      ret->timesys = AST__UTC;
-
-/* Obtain the index of the Base Frame (i.e. the pixel frame ). */
-      ibase = astGetBase( fset );
-
-/* Obtain the index of the Current Frame (i.e. the Frame to use as the 
-   primary physical coordinate frame). */
-      icurr = astGetCurrent( fset );
-
-/* Add a description of the primary axes to the FitsStore, based on the
-   Current Frame in the FrameSet. */
-      primok = AddVersion( this, fset, ibase, icurr, ret, dim, ' ', method, 
-                           class, status );
-
-/* Do not add any alternate axis descriptions if the primary axis
-   descriptions could not be produced. */
-      if( primok && astOK ) {
-
-/* Get the number of Frames in the FrameSet. */
-         nfrm = astGetNframe( fset );
-
-/* We now need to allocate a version letter to each Frame. Allocate
-   memory to hold the version letter assigned to each Frame. */
-         sid = (char *) astMalloc( ( nfrm + 1 )*sizeof( char ) );
-
-/* The frms array has an entry for each of the 26 possible version
-   letters (starting at A and ending at Z). Each entry holds the index of 
-   the Frame which has been assigned that version character. Initialise
-   this array to indicate that no version letters have yet been assigned. */
-         for( s = 'A'; s <= 'Z'; s++ ) {
-            frms[ (int) s ] = 0;
-         }
-
-/* Loop round all frames (excluding the current and base and IWC Frames which 
-   do not need version letters). If the Frame has an Ident attribute consisting 
-   of a single upper case letter, use it as its version letter unless that
-   letter has already been given to an earlier frame. IWC Frames are not
-   written out - identify them by giving thema a "sid" value of 1 (an
-   illegal FITS axis description character). */
-         for( ifrm = 1; ifrm <= nfrm; ifrm++ ){
-            sid[ ifrm ] = 0;
-            if( ifrm != icurr && ifrm != ibase ) { 
-               frame = astGetFrame( fset, ifrm );
-               if( astChrMatchN( astGetDomain( frame ), "IWC", 3 ) ) {
-                  sid[ ifrm ] = 1;
-               } else {
-                  id = astGetIdent( frame );
-                  if( strlen( id ) == 1 && isupper( id[ 0 ] ) ) {
-                     if( frms[ (int) id[ 0 ] ] == 0 ) {
-                        frms[ (int) id[ 0 ] ] = ifrm;
-                        sid[ ifrm ] = id[ 0 ];
-                     }
-                  }
-               }
-               (void) astAnnul( frame );
-            }
-         }
-
-/* Now go round all the Frames again, looking for Frames which did not
-   get a version letter assigned to it on the previous loop. Assign them
-   letters now, selected them from the letters not already assigned
-   (lowest to highest). */
-         s = 'A' - 1;
-         for( ifrm = 1; ifrm <= nfrm; ifrm++ ){
-            if( ifrm != icurr && ifrm != ibase && sid[ ifrm ] != 1 ) { 
-               if( sid[ ifrm ] == 0 ){
-                  while( frms[ (int) ++s ] != 0 );
-                  if( s <= 'Z' ) { 
-                     sid[ ifrm ] = s;
-                     frms[ (int) s ] = ifrm;
-                  }
-               }
-            }
-         }
-
-/* Now go through all the other Frames in the FrameSet, attempting to
-   create alternate axis descriptions for each one. */
-         for( ifrm = 1; ifrm <= nfrm; ifrm++ ){
-            s = sid[ ifrm ];
-            if( s != 0 && s != 1 ) {
-               secok = AddVersion( this, fset, ibase, ifrm, ret, dim, 
-                                   s, method, class, status );
-            }
-         }
-
-/* Free memory holding version letters */
-         sid = (char *) astFree( (void *) sid );
-
-      }
-
-/* If an error has occurred, or if the primary Frame could not be cerated, 
-   free the returned FitsStore, and return a null pointer. */
-      if( !astOK || !primok ) ret = FreeStore( ret, status );
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void Geod( double pos[3], double *phi, double *h, double *lambda, int *status ){
-/*
-*  Name:
-*     Geod
-
-*  Purpose:
-*     Convert a terrestrial Cartesian (x,y,z) position to geodetic lat/long 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void Geod( double pos[3], double *phi, double *h, double *lambda, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function converts a position supplied as terrestrial Cartesian
-*     (x,y,z) values into geodetic longitude, latitude and height above the
-*     reference spheroid. The (x,y,z) system has origin at the centre of
-*     the earth, Z axis going through the north pole, X axis at
-*     (long,lat)=(0,0), and Y axis at (long,lat) = (E90,0).
-*
-*     The algorithm is due to Borkowski, and is described in the
-*     Explanatory Supplement to the Astronomical Almanac (p206).
-
-*  Parameters:
-*     pos
-*        Array holding the (x,y,z) values, in metres.
-*     phi
-*        Pointer at a location at which to return the geodetic latitude,
-*        in radians.
-*     h
-*        Pointer at a location at which to return the height above the
-*        reference spheroid (geodetic, metres).
-*     lambda
-*        Pointer at a location at which to return the geodetic longitude,
-*        in radians, positive east.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables... */
-   double r, e, f, p, q, d, n, g, t, rp, rd, sn, b0, boa, ab2oa;
-
-/* Initialise */
-   *phi = 0.0;
-   *h = 0.0;
-   *lambda = 0.0;
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Earth polar radius (metres) */
-   b0 = A0*( 1.0 - FL );
-
-/* Useful functions */
-   boa = b0/A0;
-   ab2oa = ( A0*A0 - b0*b0)/A0;
-
-/* To obtain the proper sign and polynomial solution, the sign of b is
-   set to that of z. Note the sign of z. */
-   if( pos[ 2 ] > 0.0 ) {
-      sn = 1.0;
-   } else {
-      sn = -1.0;
-   }
-
-/* If the supplied position is on the polar axis, the returned values are 
-   trivial. We check this case because it corresponds to a singularity in
-   the main algorithm. */
-   r = sqrt( pos[ 0 ]*pos[ 0 ] + pos[ 1 ]*pos[ 1 ] );
-   if( r == 0 ) {
-      *lambda = 0.0;
-      *phi = AST__DPIBY2;
-      *h = pos[ 2 ] - sn*b0;
-
-   } else {   
-
-/* The longitude is simple. */
-      *lambda = atan2( pos[ 1 ], pos[ 0 ] );
-
-/* The equator is also a singularity in the main algorithm. If the
-   supplied point is on the equator, the answers are trivial. */
-      if( pos[ 2 ] == 0.0 ) {
-         *phi = 0.0;
-         *h = r - A0;
-
-/* For all other cases, use the main Borkowski algorithm. */
-      } else {
-         e = ( sn*boa*pos[ 2 ] - ab2oa )/r;
-         f = ( sn*boa*pos[ 2 ] + ab2oa )/r;
-         p = 4.0*( e*f + 1.0 )/3.0;
-         q = 2.0*( e*e - f*f );
-         d = p*p*p + q*q;
-
-         if( d < 0.0 ) {
-            rp = sqrt( -p );
-            n = 2.0*rp*cos( acos( q/(p*rp) )/3.0 );
-         } else {
-            rd = sqrt( d );
-            n = pow( ( rd - q ), 1.0/3.0 ) - pow( (rd + q ), 1.0/3.0 );
-         }
-
-         g = 0.5* ( sqrt( e*e + n ) + e );
-         t = sqrt( g*g + ( f - n*g )/( 2*g - e ) ) - g;
-
-         *phi = atan( A0*( 1.0 - t*t  )/( 2.0*sn*b0*t ) );
-         *h = ( r - A0*t )*cos( *phi ) + ( pos[ 2 ] - sn*b0 )*sin( *phi );
-
-      }
-   }
-}
-
-static int GetClean( AstFitsChan *this, int *status ) {
-/*
-*  Name:
-*     GetClean
-
-*  Purpose:
-*     Return the value of the Clean attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetClean( AstFitsChan *this, int *status ) 
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns the value of the Clean attribute. Since this
-*     attribute controls the behaviour of the FitsChan in the event of an 
-*     error condition, it is is necessary to ignore any inherited error 
-*     condition when getting the attribute value. This is why the 
-*     astMAKE_GET macro is not used.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Clean value to use.
-
-*/
-
-/* Return if no FitsChan pointer was supplied. */
-   if ( !this ) return 0;
-
-/* Return the attribute value, supplying a default value of 0 (false). */
-   return ( this->clean == -1 ) ? 0 : (this->clean ? 1 : 0 );
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied FitsChan,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;         /* Pointer to FitsChan structure */
-   FitsCard *card;            /* Pointer to next FitsCard */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astTSizeOf( this->warnings );
-   result += astGetObjSize( this->keyseq );
-   result += astGetObjSize( this->keywords );
-
-   card = (FitsCard *) ( this->head );
-   while( card ) {
-      result += astTSizeOf( card );
-      result += card->size;
-      result += astTSizeOf( card->comment );
-      card = GetLink( card, NEXT, "astGetObjSize", "FitsChan", status );
-      if( (void *) card == this->head ) break;
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetCDMatrix( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     GetCDMatrix
-
-*  Purpose:
-*     Get the value of the CDMatrix attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetCDMatrix( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     If the CDMatrix attribute has been set, then its value is returned. 
-*     Otherwise, the supplied FitsChan is searched for keywords of the
-*     form CDi_j. If any are found a non-zero value is returned. Otherwise 
-*     a zero value is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The attribute value to use.
-
-*  Notes:
-*     -  A value of zero is returned if an error has already occurred
-*     or if an error occurs for any reason within this function.
-*/
-
-/* Local Variables... */
-   int ret;            /* Returned value */
-   int icard;          /* Index of current card on entry */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* If a value has been supplied for the CDMatrix attribute, use it. */
-   if( astTestCDMatrix( this ) ) {
-      ret = this->cdmatrix;
-
-/* Otherwise, check for the existence of CDi_j keywords... */
-   } else {
-
-/* Save the current card index, and rewind the FitsChan. */
-      icard = astGetCard( this );
-      astClearCard( this );
-
-/* If the FitsChan contains any keywords with the format "CDi_j" then return 
-   1. Otherwise return zero. */
-      ret = astKeyFields( this, "CD%1d_%1d", 0, NULL, NULL ) ? 1 : 0;
-
-/* Reinstate the original current card index. */
-      astSetCard( this, icard );
-
-   }
-
-/* Return  the result. */
-   return astOK ? ret : 0;
-}
-
-static int GetEncoding( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     GetEncoding
-
-*  Purpose:
-*     Get the value of the Encoding attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetEncoding( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     If the Encoding attribute has been set, then its value is returned. 
-*     Otherwise, an attempt is made to determine the encoding scheme by 
-*     looking for selected keywords within the FitsChan. Checks are made
-*     for the following keywords in the order specified, and the
-*     corresponding encoding is adopted when the first one is found ( where
-*     i, j and m are integers and s is a single upper case character):
-*
-*     1) Any keywords starting with "BEGAST" = Native encoding 
-*     2) DELTAV and VELO-xxx keywords = FITS-CLASS.
-*     3) Any AIPS spectral CTYPE values:
-*         Any of CDi_j, PROJP, LONPOLE, LATPOLE = FITS-AIPS++ encoding:
-*         None of the above = FITS-AIPS encoding.
-*     4) Any keywords matching PCiiijjj = FITS-PC encoding
-*     5) Any keywords matching CDiiijjj = FITS-IRAF encoding
-*     6) Any keywords matching CDi_j, AND at least one of RADECSYS, PROJPi
-*        or CmVALi = FITS-IRAF encoding
-*     7) Any keywords RADECSYS, PROJPi or CmVALi, and no CDi_j or PCi_j
-*        keywords, = FITS-PC encoding
-*     8) Any keywords matching CROTAi = FITS-AIPS encoding
-*     9) Keywords matching CRVALi = FITS-WCS encoding
-*     10) The PLTRAH keyword = DSS encoding
-*     11) If none of the above keywords are found, Native encoding is assumed.
-*
-*     For cases 2) to 9), a check is also made that the header contains
-*     at least one of each keyword CTYPE, CRPIX and CRVAL. If not, then
-*     the checking process continues to the next case. This goes some way
-*     towards ensuring that the critical keywords used to determine the
-*     encoding are part of a genuine WCS description and have not just been 
-*     left in the header by accident.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The encoding scheme identifier.
-
-*  Notes:
-*     -  The function returns UNKNOWN_ENCODING if an error has already occurred
-*     or if an error occurs for any reason within this function.
-*/
-
-/* Local Variables... */
-   int hascd;          /* Any CDi_j keywords found? */
-   int haspc;          /* Any PCi_j keywords found? */
-   int haswcs;         /* Any CRVAL, CTYPE and CRPIX found? */
-   int icard;          /* Index of current card on entry */
-   int ret;            /* Returned value */
-
-/* Check the global status. */
-   if( !astOK ) return UNKNOWN_ENCODING;
-
-/* If a value has been supplied for the Encoding attribute, use it. */
-   if( astTestEncoding( this ) ) {
-      ret = this->encoding;
-
-/* Otherwise, check for the existence of certain critcal keywords... */
-   } else {
-
-/* See if the header contains some CTYPE, CRPIX and CRVAL keywords. */
-      haswcs = astKeyFields( this, "CTYPE%d", 0, NULL, NULL ) &&
-               astKeyFields( this, "CRPIX%d", 0, NULL, NULL ) &&
-               astKeyFields( this, "CRVAL%d", 0, NULL, NULL );
-
-/* See if there are any CDi_j keywords. */
-      hascd = astKeyFields( this, "CD%1d_%1d", 0, NULL, NULL );
-
-/* See if there are any PCi_j keywords. */
-      haspc = astKeyFields( this, "PC%1d_%1d", 0, NULL, NULL );
-
-/* Save the current card index, and rewind the FitsChan. */
-      icard = astGetCard( this );
-      astClearCard( this );
-
-/* If the FitsChan contains any keywords starting with "BEGAST", then return
-   "Native" encoding. */
-      if( astKeyFields( this, "BEGAST%2f", 0, NULL, NULL ) ){
-         ret = NATIVE_ENCODING;
-
-/* Otherwise, look for a FITS-CLASS signature... */
-      } else if( haswcs && LooksLikeClass( this, "astGetEncoding", "AstFitsChan", status ) ){
-         ret = FITSCLASS_ENCODING;
-
-/* Otherwise, if the FitsChan contains any CTYPE keywords which have the
-   peculiar form used by AIPS, then use "FITS-AIPS" or "FITS-AIPS++" encoding. */
-      } else if( haswcs && HasAIPSSpecAxis( this, "astGetEncoding", "AstFitsChan", status ) ){
-         if( hascd ||
-             astKeyFields( this, "PROJP%d", 0, NULL, NULL ) ||
-             astKeyFields( this, "LONPOLE", 0, NULL, NULL ) ||
-             astKeyFields( this, "LATPOLE", 0, NULL, NULL ) ) {
-            ret = FITSAIPSPP_ENCODING;
-         } else {
-            ret = FITSAIPS_ENCODING;
-         }
-
-/* Otherwise, if the FitsChan contains any keywords with the format 
-   "PCiiijjj" then return "FITS-PC" encoding. */
-      } else if( haswcs && astKeyFields( this, "PC%3d%3d", 0, NULL, NULL ) ){
-         ret = FITSPC_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format 
-   "CDiiijjj" then return "FITS-IRAF" encoding. */
-      } else if( haswcs && astKeyFields( this, "CD%3d%3d", 0, NULL, NULL ) ){
-         ret = FITSIRAF_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format 
-   "CDi_j"  AND there is a RADECSYS. PROJPi or CmVALi keyword, then return 
-   "FITS-IRAF" encoding. If "CDi_j" is present but none of the others
-   are, return "FITS-WCS" encoding. */
-      } else if( haswcs && hascd ) {
-
-         if( (  astKeyFields( this, "RADECSYS", 0, NULL, NULL ) &&
-               !astKeyFields( this, "RADESYS", 0, NULL, NULL ) ) ||
-
-             ( astKeyFields( this, "PROJP%d", 0, NULL, NULL ) &&
-              !astKeyFields( this, "PV%d_%d", 0, NULL, NULL ) ) ||
-
-             ( astKeyFields( this, "C%1dVAL%d", 0, NULL, NULL )) ){
-            ret = FITSIRAF_ENCODING;
-
-         } else {
-            ret = FITSWCS_ENCODING;
-         }
-
-/* Otherwise, if the FitsChan contains any keywords with the format 
-   RADECSYS. PROJPi or CmVALi keyword, then return "FITS-PC" encoding, 
-   so long as there are no FITS-WCS equivalent keywords. */
-      } else if( haswcs && !haspc && !hascd && (
-                   ( astKeyFields( this, "RADECSYS", 0, NULL, NULL ) &&
-                   !astKeyFields( this, "RADESYS", 0, NULL, NULL ) ) ||
-
-                 ( astKeyFields( this, "PROJP%d", 0, NULL, NULL ) &&
-                   !astKeyFields( this, "PV%d_%d", 0, NULL, NULL ) ) ||
-
-                 astKeyFields( this, "C%1dVAL%d", 0, NULL, NULL ) ) ) {
-         ret = FITSPC_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format 
-   "CROTAi" then return "FITS-AIPS" encoding. */
-      } else if( haswcs && astKeyFields( this, "CROTA%d", 0, NULL, NULL ) ){
-         ret = FITSAIPS_ENCODING;
-
-/* Otherwise, if the FitsChan contains any keywords with the format 
-   "CRVALi" then return "FITS-WCS" encoding. */
-      } else if( haswcs && astKeyFields( this, "CRVAL%d", 0, NULL, NULL ) ){
-         ret = FITSWCS_ENCODING;
-
-/* Otherwise, if the FitsChan contains the "PLTRAH" keywords, use "DSS" 
-   encoding. */
-      } else if( astKeyFields( this, "PLTRAH", 0, NULL, NULL ) ){
-         ret = DSS_ENCODING;
-
-/* If none of these conditions is met, assume Native encoding. */
-      } else {
-         ret = NATIVE_ENCODING;
-      }
-
-/* Reinstate the original current card index. */
-      astSetCard( this, icard );
-
-   }
-
-/* Return  the encoding scheme. */
-   return astOK ? ret : UNKNOWN_ENCODING;
-}
-
-static void GetFiducialNSC( AstWcsMap *map, double *phi, double *theta, int *status ){
-/*
-*  Name:
-*     GetFiducialNSC
-
-*  Purpose:
-*     Return the Native Spherical Coordinates at the fiducial point of a 
-*     WcsMap projection.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void GetFiducialNSC( AstWcsMap *map, double *phi, double *theta, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns the native spherical coords corresponding at
-*     the fiducial point of a WcsMap. 
-*
-*     The values of parameters 1 and 2 on the longitude axis of the WcsMap 
-*     are usually used as the native spherical coordinates of the 
-*     fiducial point. The default values for these parameters are equal
-*     to the native spherical coordinates of the projection reference point.
-*     The exception is that a TPN projection always uses the default
-*     values, since the projection parameters are used to store polynomial
-*     coefficients.
-
-*  Parameters:
-*     map
-*        Pointer to the WcsMap.
-*     phi
-*        Address of a location at which to return the native spherical
-*        longitude at the fiducial point (radians).
-*     theta
-*        Address of a location at which to return the native spherical
-*        latitude at the fiducial point (radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int axlon;                /* Index of longitude axis */
-
-/* Initialise */
-   *phi = AST__BAD;
-   *theta = AST__BAD;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* If this is not a TPN projection get he value of the required
-   projection parameters (the default values for these are equal to the
-   fixed native shperical coordinates at the projection reference point). */
-   if( astGetWcsType( map ) != AST__TPN ) {
-      axlon = astGetWcsAxis( map, 0 );
-      if( astGetPV( map, axlon, 0 ) != 0.0 ) {
-         *phi = AST__DD2R*astGetPV( map, axlon, 1 );
-         *theta = AST__DD2R*astGetPV( map, axlon, 2 );
-      } else {
-         *phi = astGetNatLon( map );
-         *theta = astGetNatLat( map );
-      }
-
-/* If this is a TPN projection, the returned values are always the fixed 
-   native shperical coordinates at the projection reference point). */
-   } else {
-      *phi = astGetNatLon( map );
-      *theta = astGetNatLat( map );
-   }
-}
-
-static void GetFiducialPPC( AstWcsMap *map, double *x0, double *y0, int *status ){
-/*
-*  Name:
-*     GetFiducialPPC
-
-*  Purpose:
-*     Return the IWC at the fiducial point of a WcsMap projection.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void GetFiducialPPC( AstWcsMap *map, double *x0, double *y0, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns the projection plane coords corresponding to 
-*     the native spherical coords of the fiducial point of a FITS-WCS
-*     header. Note, projection plane coordinates (PPC) are equal to
-*     Intermediate World Coordinates (IWC) except for cases where the
-*     fiducial point does not correspond to the projection reference point.
-*     In these cases, IWC and PPC will be connected by a translation
-*     which ensures that the fiducial point corresponds to the origin of
-*     IWC.
-*
-*     The values of parameters 1 and 2 on the longitude axis of 
-*     the WcsMap are used as the native spherical coordinates of the 
-*     fiducial point. The default values for these parameters are equal
-*     to the native spherical coordinates of the projection reference point.
-
-*  Parameters:
-*     map
-*        Pointer to the WcsMap.
-*     x0
-*        Address of a location at which to return the PPC X axis value at
-*        the fiducial point (radians).
-*     y0
-*        Address of a location at which to return the PPC Y axis value at
-*        the fiducial point (radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* Pointer to the native spherical PointSet */
-   AstPointSet *pset2;       /* Pointer to the intermediate world PointSet */
-   double **ptr1;            /* Pointer to pset1 data */
-   double **ptr2;            /* Pointer to pset2 data */
-   int axlat;                /* Index of latitude axis */
-   int axlon;                /* Index of longitude axis */
-   int i;                    /* Loop count */
-   int naxes;                /* Number of axes */
-
-/* Initialise */
-   *x0 = AST__BAD;
-   *y0 = AST__BAD;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Save number of axes in the WcsMap. */
-   naxes = astGetNin( map );
-
-/* Allocate resources. */
-   pset1 = astPointSet( 1, naxes, "", status );
-   ptr1 = astGetPoints( pset1 );
-   
-   pset2 = astPointSet( 1, naxes, "", status );
-   ptr2 = astGetPoints( pset2 );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Get the indices of the longitude and latitude axes in WcsMap. */
-      axlon = astGetWcsAxis( map, 0 );
-      axlat = astGetWcsAxis( map, 1 );
-
-/* Use zero on all non-celestial axes. */
-      for( i = 0; i < naxes; i++ ) ptr1[ i ][ 0 ] = 0.0;
-
-/* Get the native spherical coords at the fiducial point. */
-      GetFiducialNSC( map, ptr1[ axlon ], ptr1[ axlat ], status );
-
-/* Use the inverse WcsMap to convert the native longitude and latitude of 
-   the fiducial point into PPC (x,y). */
-      (void) astTransform( map, pset1, 0, pset2 );
-
-/* Return the calculated PPC coords. */
-      *x0 = ptr2[ axlon ][ 0 ];
-      *y0 = ptr2[ axlat ][ 0 ];
-   }
-
-/* Free resources. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-}
-
-static int GetFiducialWCS( AstWcsMap *wcsmap, AstMapping *map2, int colon,  
-                           int colat, double *fidlon, double *fidlat, int *status ){
-/*
-*  Name:
-*     GetFiducialWCS
-
-*  Purpose:
-*     Decide on the celestial coordinates of the fiducial point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetFiducialWCS( AstWcsMap wcsmap, AstMapping map2, int colon,  
-*                         int colat, double *fidlon, double *fidlat, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns the celestial longitude and latitude values
-*     to use for the fiducial point. These are the values stored in FITS 
-*     keywords CRVALi.
-
-*  Parameters:
-*     wcsmap
-*        The WcsMap which converts Projection Plane Coordinates into 
-*        native spherical coordinates. The number of outputs from this
-*        Mapping should match the number of inputs to "map2".
-*     map2
-*        The Mapping which converts native spherical coordinates into WCS
-*        coordinates. 
-*     colon
-*        The index of the celestial longitude output from "map2".
-*     colat
-*        The index of the celestial latitude output from "map2".
-*     fidlon
-*        Pointer to a location at which to return the celestial longitude 
-*        value at the fiducial point. The value is returned in radians.
-*     fidlat
-*        Pointer to a location at which to return the celestial latitude 
-*        value at the fiducial point. The value is returned in radians.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the fiducial point longitude or latitude could not be
-*     determined. One otherwise.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* Pointer to the native spherical PointSet */
-   AstPointSet *pset2;       /* Pointer to the WCS PointSet */
-   double **ptr1;            /* Pointer to pset1 data */
-   double **ptr2;            /* Pointer to pset2 data */
-   int axlat;                /* Index of latitude axis */
-   int axlon;                /* Index of longitude axis */
-   int iax;                  /* Axis index */
-   int naxin;                /* Number of IWC axes */
-   int naxout;               /* Number of WCS axes */
-   int ret;                  /* The returned FrameSet */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Allocate resources. */
-   naxin = astGetNin( map2 );
-   naxout = astGetNout( map2 );
-   pset1 = astPointSet( 1, naxin, "", status );
-   ptr1 = astGetPoints( pset1 );
-   pset2 = astPointSet( 1, naxout, "", status );
-   ptr2 = astGetPoints( pset2 );
-   if( astOK ) {
-
-/* Get the indices of the latitude and longitude outputs in the WcsMap.
-   These are not necessarily the same as "colat" and "colon" because "map2"
-   may contain a PermMap. */
-      axlon = astGetWcsAxis( wcsmap, 0 );
-      axlat = astGetWcsAxis( wcsmap, 1 );
-
-/* Use zero on all non-celestial axes. */
-      for( iax = 0; iax < naxin; iax++ ) ptr1[ iax ][ 0 ] = 0.0;
-
-/* Get the native spherical coords at the fiducial point. */
-      GetFiducialNSC( wcsmap, ptr1[ axlon ], ptr1[ axlat ], status );
-
-/* The fiducial point in the celestial coordinate system is found by
-   transforming the fiducial point in native spherical co-ordinates
-   into absolute physical coordinates using map2. */
-      (void) astTransform( map2, pset1, 1, pset2 );
-
-/* Store the returned WCS values. */
-      *fidlon = ptr2[ colon ][ 0 ];      
-      *fidlat = ptr2[ colat ][ 0 ];      
-
-/* Indicate if we have been succesfull. */
-      if( astOK && *fidlon != AST__BAD && *fidlat != AST__BAD ) ret = 1;
-
-   }
-
-/* Free resources. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Return the result. */
-   return ret;
-
-}
-
-static const char *GetFitsSor( const char *string, int *status ) {
-/*
-*  Name:
-*     GetFitsSor
-
-*  Purpose:
-*     Get the string used to represent an AST spectral standard of rest.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     const char *GetFitsSor( const char *string, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function returns a pointer to a static string which is the
-*     FITS equivalent to a given SpecFrame StdOfRest value.
-
-*  Parameters:
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        SpecFrame StdOfRest value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a static null-terminated string containing the FITS
-*     equivalent to the supplied string. NULL is returned if the supplied
-*     string has no FITS equivalent.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked wth the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Compare the supplied string with SpecFrame value for which there is a 
-   known FITS equivalent. */
-   if( !strcmp( string, "Topocentric" ) ){
-      result = "TOPOCENT";
-   } else if( !strcmp( string, "Geocentric" )){
-      result = "GEOCENTR";
-   } else if( !strcmp( string, "Barycentric" )){
-      result = "BARYCENT";
-   } else if( !strcmp( string, "Heliocentric" )){
-      result = "HELIOCEN";
-   } else if( !strcmp( string, "LSRK" )){
-      result = "LSRK";
-   } else if( !strcmp( string, "LSRD" )){
-      result = "LSRD";
-   } else if( !strcmp( string, "Galactic" )){
-      result = "GALACTOC";
-   } else if( !strcmp( string, "Local_group" )){
-      result = "LOCALGRP";
-   } else if( !strcmp( string, "Source" )){
-      result = "SOURCE";
-   } else {
-      result = NULL;
-   }
-
-/* Return the answer. */
-   return result; 
-
-}
-
-static double GetItem( double ****item, int i, int jm, char s, char *name,
-                       const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     GetItem
-
-*  Purpose:
-*     Retrieve a value for a axis keyword value from a FitStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double GetItem( double ****item, int i, int jm, char s, char *name,
-*                     const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The requested keyword value is retrieved from the specified array,
-*     at a position indicated by the axis and co-ordinate version.
-*     AST__BAD is returned if the array does not contain the requested
-*     value. 
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates an
-*        array of axis keyword values. These arrays of keyword values have 
-*        one element for every pixel axis (j) or projection parameter (m). 
-*     i
-*        The zero based intermediate axis index in the range 0 to 98. Set 
-*        this to zero for keywords (e.g. CRPIX) which are not indexed by 
-*        intermediate axis number.
-*     jm
-*        The zero based pixel axis index (in the range 0 to 98) or parameter 
-*        index (in the range 0 to WCSLIB_MXPAR-1). Set this to zero for 
-*        keywords (e.g. CRVAL) which are not indexed by either pixel axis or 
-*        parameter number.
-*     s
-*        The co-ordinate version character (A to Z, or space), case
-*        insensitive
-*     name 
-*        A string holding a name for the item of information. A NULL
-*        pointer may be supplied, in which case it is ignored. If a
-*        non-NULL pointer is supplied, an error is reported if the item
-*        of information has not been stored, and the supplied name is
-*        used to identify the information within the error message.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-
-*  Returned Value:
-*     The required keyword value, or AST__BAD if no value has previously
-*     been stored for the keyword (or if an error has occurred).
-
-*/
-
-/* Local Variables: */
-   double ret;           /* Returned keyword value */
-   int si;               /* Integer co-ordinate version index */
-
-/* Initialise */
-   ret = AST__BAD;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Convert the character co-ordinate version into an integer index, and
-   check it is within range. The primary axis description (s=' ') is
-   given index zero. 'A' is 1, 'B' is 2, etc. */
-   if( s == ' ' ) {
-      si = 0;
-   } else if( islower(s) ){
-      si = (int) ( s - 'a' ) + 1;
-   } else {
-      si = (int) ( s - 'A' ) + 1;
-   }
-
-   if( si < 0 || si > 26 ) {
-      astError( AST__INTER, "GetItem(fitschan): AST internal error; "
-                "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
-   } else if( i < 0 || i > 98 ) {
-      astError( AST__INTER, "GetItem(fitschan): AST internal error; "
-                "intermediate axis index %d is invalid.", status, i );
-
-/* Check the pixel axis or parameter index is within range. */
-   } else if( jm < 0 || jm > 99 ) {
-      astError( AST__INTER, "GetItem(fitschan): AST internal error; "
-                "pixel axis or parameter index %d is invalid.", status, jm );
-
-/* Otherwise, if the array holding the required keyword is not null, 
-   proceed... */
-   } else if( *item ){
-
-/* Find the number of coordinate versions in the supplied array.
-   Only proceed if it encompasses the requested co-ordinate
-   version. */
-      if( astSizeOf( (void *) *item )/sizeof(double **) > si ){
-
-/* Find the number of intermediate axes in the supplied array.
-   Only proceed if it encompasses the requested intermediate axis. */
-         if( astSizeOf( (void *) (*item)[si] )/sizeof(double *) > i ){
-
-/* Find the number of pixel axes or parameters in the supplied array.
-   Only proceed if it encompasses the requested index. */
-            if( astSizeOf( (void *) (*item)[si][i] )/sizeof(double) > jm ){
-
-/* Return the required keyword value. */
-               ret = (*item)[si][i][jm];
-            }
-         }
-      }
-   }
-
-/* If required, report an error if the requested item of information has
-   not been stored. */
-   if( ret == AST__BAD && name && astOK ){
-      astError( AST__NOFTS, "%s(%s): No value can be found for %s.", status,
-                method, class, name );
-   }
-
-   return ret;
-}
-
-static int GetMaxJM( double ****item, char s, int *status ){
-/*
-*  Name:
-*     GetMaxJM
-
-*  Purpose:
-*     Return the largest pixel axis or parameter index stored for an axis 
-*     keyword value in a FitStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetMaxJM( double ****item, char s, int *status)
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The number of pixel axis numbers or projection parameters stored for
-*     a specified axis keyword is found and returned.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crpix) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates an
-*        array of axis keyword values. These arrays of keyword values have 
-*        one element for every pixel axis (j) or projection parameter (m). 
-*     s
-*        The co-ordinate version character (A to Z, or space), case
-*        insensitive
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The maximum pixel axis number or projection parameter index (zero 
-*     based).
-
-*/
-
-/* Local Variables: */
-   int jm;               /* Number of parameters/pixel axes */
-   int i;                /* Intermediate axis index */
-   int ret;              /* Returned axis index */
-   int si;               /* Integer co-ordinate version index */
-
-/* Initialise */
-   ret = -1;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* If the array holding the required keyword is not null, proceed... */
-   if( *item ){
-
-/* Convert the character co-ordinate version into an integer index, and
-   check it is within range. The primary axis description (s=' ') is
-   given index zero. 'A' is 1, 'B' is 2, etc. */
-      if( s == ' ' ) {
-         si = 0;
-      } else if( islower(s) ){
-         si = (int) ( s - 'a' ) + 1;
-      } else {
-         si = (int) ( s - 'A' ) + 1;
-      }
-
-      if( si < 0 || si > 26 ) {
-         astError( AST__INTER, "GetMaxJM(fitschan): AST internal error; "
-                   "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-         return ret;
-      }
-
-/* Find the number of coordinate versions in the supplied array.
-   Only proceed if it encompasses the requested co-ordinate
-   version. */
-      if( astSizeOf( (void *) *item )/sizeof(double **) > si ){
-
-/* Check that the pointer to the array of intermediate axis values is not null. */
-         if( (*item)[si] ){
-
-/* Loop round each used element in this array. */
-            for( i = 0; i < astSizeOf( (void *) (*item)[si] )/sizeof(double *);
-                 i++ ){
-               if( (*item)[si][i] ){
-
-/* Get the size of the pixel axis/projection parameter array for the
-   current intermediate axis, and subtract 1 to get the largest index. */
-                  jm = astSizeOf( (void *) (*item)[si][i] )/sizeof(double) - 1;
-
-/* Ignore any trailing unused (AST__BAD) values. */
-                  while( jm >= 0 && (*item)[si][i][jm] == AST__BAD ) jm--;
-
-/* Update the returned value if the current value is larger. */
-                  if( jm > ret ) ret = jm;
-
-               }
-            }
-         }
-      }
-   }
-
-   return ret;
-
-}
-
-static int GetMaxI( double ****item, char s, int *status ){
-/*
-*  Name:
-*     GetMaxI
-
-*  Purpose:
-*     Return the largest WCS axis index stored for an axis keyword value in 
-*     a FitStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetMaxJM( double ****item, char s)
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The number of Wcs axis numbers stored for a specified axis keyword is 
-*     found and returned.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates an
-*        array of axis keyword values. These arrays of keyword values have 
-*        one element for every pixel axis (j) or projection parameter (m). 
-*     s
-*        The co-ordinate version character (A to Z, or space), case
-*        insensitive
-
-*  Returned Value:
-*     The maximum WCS axis index (zero based).
-
-*/
-
-/* Local Variables: */
-   int ret;              /* Returned axis index */
-   int si;               /* Integer co-ordinate version index */
-
-/* Initialise */
-   ret = -1;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* If the array holding the required keyword is not null, proceed... */
-   if( *item ){
-
-/* Convert the character co-ordinate version into an integer index, and
-   check it is within range. The primary axis description (s=' ') is
-   given index zero. 'A' is 1, 'B' is 2, etc. */
-      if( s == ' ' ) {
-         si = 0;
-      } else if( islower(s) ){
-         si = (int) ( s - 'a' ) + 1;
-      } else {
-         si = (int) ( s - 'A' ) + 1;
-      }
-
-      if( si < 0 || si > 26 ) {
-         astError( AST__INTER, "GetMaxI(fitschan): AST internal error; "
-                   "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-         return ret;
-      }
-
-/* Find the number of coordinate versions in the supplied array.
-   Only proceed if it encompasses the requested co-ordinate
-   version. */
-      if( astSizeOf( (void *) *item )/sizeof(double **) > si ){
-
-/* Check that the pointer to the array of intermediate axis values is not null. */
-         if( (*item)[si] ){
-
-/* Get the size of the intermediate axis array and subtract 1 to get the largest 
-   index. */
-            ret = astSizeOf( (void *) (*item)[si] )/sizeof(double *) - 1;
-
-/* Ignore any trailing unused (NULL) values. */
-            while( ret >= 0 && (*item)[si][ret] == NULL ) ret--;
-         }
-      }
-   }
-
-   return ret;
-
-}
-
-static char GetMaxS( double ****item, int *status ){
-/*
-*  Name:
-*     GetMaxS
-
-*  Purpose:
-*     Return the largest (i.e. closest to Z) coordinate version character 
-*     stored for a axis keyword value in a FitStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char GetMaxS( double ****item, int *status)
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The largest (i.e. closest to Z) coordinate version character 
-*     stored for a axis keyword value in a FitStore structure is found
-*     and returned.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates an
-*        array of axis keyword values. These arrays of keyword values have 
-*        one element for every pixel axis (j) or projection parameter (m). 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The highest coordinate version character.
-
-*/
-
-/* Local Variables: */
-   char ret;              /* Returned axis index */
-   int si;                /* Integer index into alphabet */
-
-/* Initialise */
-   ret = ' ';
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* If the array holding the required keyword is not null, proceed... */
-   if( *item ){
-
-/* Find the length of this array, and subtract 1 to get the largest index
-   in the array. */
-      si = astSizeOf( (void *) *item )/sizeof(double **) - 1;
-
-/* Ignore any trailing null (i.e. unused) values. */
-      while( si >= 0 && !(*item)[si] ) si--;
-
-/* Store the corresponding character */
-      if( si == 0 ) {
-         ret = ' ';
-      } else {
-         ret = 'A' + si - 1;
-      }
-   }
-
-   return ret;
-
-}
-
-static char *GetItemC( char ****item, int i, char s, char *name,
-                       const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     GetItemC
-
-*  Purpose:
-*     Retrieve a string value for a axis keyword value from a FitStore 
-*     structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char *GetItemC( char ****item, int i, char s, char *name,
-*                     const char *method, const char *class, int *status  )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The requested keyword string value is retrieved from the specified 
-*     array, at a position indicated by the axis and co-ordinate version.
-*     NULL is returned if the array does not contain the requested
-*     value. 
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates a
-*        character string. 
-*     i
-*        The zero based intermediate axis index in the range 0 to 98. Set 
-*        this to zero for keywords (e.g. CRPIX) which are not indexed by 
-*        intermediate axis number.
-*     s
-*        The co-ordinate version character (A to Z, or space), case
-*        insensitive
-*     name 
-*        A string holding a name for the item of information. A NULL
-*        pointer may be supplied, in which case it is ignored. If a
-*        non-NULL pointer is supplied, an error is reported if the item
-*        of information has not been stored, and the supplied name is
-*        used to identify the information within the error message.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the required keyword string value, or NULL if no value 
-*     has previously been stored for the keyword (or if an error has 
-*     occurred).
-
-*/
-
-/* Local Variables: */
-   char *ret;            /* Returned keyword value */
-   int si;               /* Integer co-ordinate version index */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Convert the character co-ordinate version into an integer index, and
-   check it is within range. The primary axis description (s=' ') is
-   given index zero. 'A' is 1, 'B' is 2, etc. */
-   if( s == ' ' ) {
-      si = 0;
-   } else if( islower(s) ){
-      si = (int) ( s - 'a' ) + 1;
-   } else {
-      si = (int) ( s - 'A' ) + 1;
-   }
-
-   if( si < 0 || si > 26 ) {
-      astError( AST__INTER, "GetItemC(fitschan): AST internal error; "
-                "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
-   } else if( i < 0 || i > 98 ) {
-      astError( AST__INTER, "GetItemC(fitschan): AST internal error; "
-                "intermediate axis index %d is invalid.", status, i );
-
-/* Otherwise, if the array holding the required keyword is not null, 
-   proceed... */
-   } else if( *item ){
-
-/* Find the number of coordinate versions in the supplied array.
-   Only proceed if it encompasses the requested co-ordinate
-   version. */
-      if( astSizeOf( (void *) *item )/sizeof(char **) > si ){
-
-/* Find the number of intermediate axes in the supplied array.
-   Only proceed if it encompasses the requested intermediate axis. */
-         if( astSizeOf( (void *) (*item)[si] )/sizeof(char *) > i ){
-
-/* Return the required keyword value. */
-            ret = (*item)[si][i];
-         }
-      }
-   }
-
-/* If required, report an error if the requested item of information has
-   not been stored. */
-   if( !ret && name && astOK ){
-      astError( AST__NOFTS, "%s(%s): No value can be found for %s.", status,
-                method, class, name );
-   }
-
-   return ret;
-
-}
-
-static int GoodWarns( const char *value, int *status ){
-/*
-*  Name:
-*     GoodWarns
-
-*  Purpose:
-*     Checks a string to ensure it is a legal list of warning conditions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GoodWarns( const char *value, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function checks the supplied string to ensure it contains a space
-*     separated list of zero or more recognised warning conditions. An
-*     error is reported if it does not.
-
-*  Parameters:
-*     value
-*        The string to check.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the supplied string is not a legal list of
-*     conditions, or if an error has already occurred. One is returned 
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   char *b;              /* Pointer to next buffer element */
-   const char *c  ;      /* Pointer to next character */
-   char buf[100];        /* Buffer for condition name */
-   int inword;           /* Are we in a word? */
-   int n;                /* Number of conditions supplied */
-   int ret;              /* Returned value */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Report an error and return if the pointer is null. */
-   if( !value ){
-      astError( AST__ATTIN, "astSetWarnings(fitschan): Null pointer "
-                "supplied for the Warnings attribute." , status);
-      return ret;
-   }
-
-/* Initialise things */
-   inword = 0;
-   buf[ 0 ] = ' ';
-   b = buf + 1;
-   n = 0;
-   ret = 1;
-
-/* Loop round each character in the supplied string. */
-   for( c = value ; c < value + strlen( value ) + 1; c++ ){
-
-/* Have we found the first space or null following a word? */
-      if( ( !(*c) || isspace( *c ) ) && inword ){
-
-/* Add a space to the end of the buffer and terminate it. */
-         *(b++) = ' ';
-         *b = 0;
-
-/* Check the word is legal by searching for it in the string of all
-   conditions, which should be lower case and have spaces at start and end. 
-   The word in the buffer is delimited by spaces and so it will not match 
-   a substring within a condition. If it is legal increment the number of 
-   conditions found. */
-         if( strstr( ALLWARNINGS, buf ) ){         
-            n++;
-
-/* Otherwise, report an error and break. */
-         } else {
-            ret = 0;
-            *(--b) = 0;
-            astError( AST__ATTIN, "astSetWarnings(fitschan): Unknown "
-                      "condition '%s' specified when setting the Warnings "
-                      "attribute.", status, buf + 1 );
-            break;
-         }
-
-/* Reset the pointer to the next character in the buffer, retaining the
-   initial space in the buffer. */
-         b = buf + 1;
-
-/* Indicate we are no longer in a word. */
-         inword = 0;
-
-/* Have we found the first non-space, non-null character following a space? */
-      } else if( *c && !isspace( *c ) && !inword ){
-
-/* Note we are now in a word. */
-         inword = 1;
-         
-      }
-
-/* If we are in a word, copy the lowercase character to the buffer. */
-      if( inword ) *(b++) = tolower( *c );
-      
-   }
-
-   return ret;
-
-}
-
-static AstMapping *GrismSpecWcs( char *algcode, FitsStore *store, int i, 
-                                 char s, AstSpecFrame *specfrm, 
-                                 const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     GrismSpecWcs
-
-*  Purpose:
-*     Create a Mapping describing a FITS-WCS grism-dispersion algorithm
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *GrismSpecWcs( char *algcode, FitsStore *store, int i, char s, 
-*                               AstSpecFrame *specfrm, const char *method, 
-*                               const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function uses the contents of the supplied FitsStore to create
-*     a Mapping which goes from Intermediate World Coordinate (known as "w" 
-*     in the context of FITS-WCS paper III) to the spectral system
-*     described by the supplied SpecFrame.
-*
-*     The returned Mapping implements the grism "GRA" and "GRI" algorithms
-*     described in FITS-WCS paper III. 
-
-*  Parameters:
-*     algcode
-*        Pointer to a string holding the code for the required algorithm
-*        ("-GRA" or "-GRI").
-*     store
-*        Pointer to the FitsStore structure holding the values to use for 
-*        the WCS keywords. 
-*     i 
-*        The zero-based index of the spectral axis within the FITS header
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     specfrm
-*        Pointer to the SpecFrame. This specifies the "S" system - the
-*        system in which the CRVAL kewyords (etc) are specified.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;
-   AstMapping *gmap;
-   AstMapping *map1;
-   AstMapping *map2;
-   AstMapping *map2a;
-   AstMapping *map2b;
-   AstMapping *ret;
-   AstMapping *smap;
-   AstSpecFrame *wfrm;
-   double crv;
-   double dg;
-   double gcrv;
-   double pv;
-   double wcrv;
-
-/* Check the global status. */
-   ret = NULL;
-   if( !astOK ) return ret;
-
-/* The returned Mapping will be a CmpMap including a GrismMap. This
-   GrismMap will produced wavelength as output. We also need the Mapping 
-   from wavelength to the system represented by the supplied SpecFrame. 
-   To get this, we first create a copy of the supplied SpecFrame (in order 
-   to inherit the standard of rest, epoch, etc), and set its System to
-   wavlength in vacuum (for "-GRI") or air (for "-GRA"), and then use
-   astConvert to get the Mapping from the SpecFrame system to relevant
-   form of wavelength. */
-   wfrm = astCopy( specfrm );
-   astSetSystem( wfrm, strcmp( algcode, "-GRI" )?AST__AIRWAVE:AST__WAVELEN );
-   astSetUnit( wfrm, 0, "m" );
-
-   fs = astConvert( specfrm, wfrm, "" );
-   if( fs ) {
-      smap = astGetMapping( fs, AST__BASE, AST__CURRENT );
-      fs = astAnnul( fs );
-
-/* Get the CRVAL value for the spectral axis (this will be in the S system). */
-      crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-      if( crv == AST__BAD ) crv = 0.0;
-
-/* Convert it to the wavelength system (vacuum or air) in metres. */
-      astTran1( smap, 1, &crv, 1, &wcrv );
-
-/* Create a GrismMap, and then use the projection parameters stored in
-   the FitsStore to set its attributes (convert degrees values to radians
-   and supply the defaults specified in FITS-WCS paper III). The FITS
-   paper specifies units in which these parameters should be stored in a
-   FITS header - distances are in metres and angles in degrees. */
-      gmap = (AstMapping *) astGrismMap( "", status );
-
-      pv = GetItem( &(store->pv), i, 0, s, NULL, method, class, status );
-      astSetGrismG( gmap, ( pv != AST__BAD )?pv:0.0 );
-   
-      pv = GetItem( &(store->pv), i, 1, s, NULL, method, class, status );
-      astSetGrismM( gmap, ( pv != AST__BAD )?(int) ( pv + 0.5 ):0);
-   
-      pv = GetItem( &(store->pv), i, 2, s, NULL, method, class, status );
-      astSetGrismAlpha( gmap, ( pv != AST__BAD )?pv*AST__DD2R:0.0 );
-   
-      pv = GetItem( &(store->pv), i, 3, s, NULL, method, class, status );
-      astSetGrismNR( gmap, ( pv != AST__BAD )?pv:1.0 );
-   
-      pv = GetItem( &(store->pv), i, 4, s, NULL, method, class, status );
-      astSetGrismNRP( gmap, ( pv != AST__BAD )?pv:0.0 );
-   
-      pv = GetItem( &(store->pv), i, 5, s, NULL, method, class, status );
-      astSetGrismEps( gmap, ( pv != AST__BAD )?pv*AST__DD2R:0.0 );
-   
-      pv = GetItem( &(store->pv), i, 6, s, NULL, method, class, status );
-      astSetGrismTheta( gmap, ( pv != AST__BAD )?pv*AST__DD2R:0.0 );
-
-/* Store the reference wavelength found above as an attribute of the
-   GrismMap. */   
-      astSetGrismWaveR( gmap, wcrv );
-
-/* Invert the GrismMap to get the (Wavelength -> grism parameter) Mapping, and 
-   then combine it with the (S -> Wavelength) Mapping to get the (S -> grism
-   parameter) Mapping. */
-      astInvert( gmap );
-      map1 = (AstMapping *) astCmpMap( smap, gmap, 1, "", status );
-      
-/* Convert the reference point value from wavelength to grism parameter. */
-      astTran1( gmap, 1, &wcrv, 1, &gcrv );
-
-/* Find the rate of change of grism parameter with respect to the S
-   system at the reference point, dg/dS. */
-      dg = astRate( map1, &crv, 0, 0 );
-      if( dg != AST__BAD && dg != 0.0 ) {
-
-/* FITS-WCS paper II requires headers to be constructed so that dS/dw = 1.0 
-   at the reference point. Therefore dg/dw = dg/dS. Create a WinMap which
-   scales and shifts the "w" value to get the grism parameter value. */
-         map2a = (AstMapping *) astZoomMap( 1, dg, "", status );
-         map2b = (AstMapping *) astShiftMap( 1, &gcrv, "", status );
-         map2 = (AstMapping *) astCmpMap( map2a, map2b, 1, "", status );
-         map2a = astAnnul( map2a );
-         map2b = astAnnul( map2b );
-         
-/* The Mapping to be returned is the concatenation of the above Mapping
-   (from w to g) with the Mapping from g to S. */
-         astInvert( map1 );   
-         ret = (AstMapping *) astCmpMap( map2, map1, 1, "", status );
-         map2 = astAnnul( map2 );
-
-      }
-
-      map1 = astAnnul( map1 );
-      smap = astAnnul( smap );
-      gmap = astAnnul( gmap );
-   } 
-   wfrm = astAnnul( wfrm );
-
-
-/* Return the result */
-   return ret;
-}
-
-static int KeyFields( AstFitsChan *this, const char *filter, int maxfld, 
-                    int *ubnd, int *lbnd, int *status ){
-/*
-*+
-*  Name:
-*     astKeyFields
-
-*  Purpose:
-*     Find the ranges taken by integer fields within the keyword names 
-*     in a FitsChan.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int astKeyFields( AstFitsChan *this, const char *filter, int maxfld, 
-*                       int *ubnd, int *lbnd )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function returns the number of cards within a FitsChan which
-*     refer to keywords which match the supplied filter template. If the
-*     filter contains any integer field specifiers (e.g. "%d", "%3d", etc),
-*     it also returns the upper and lower bounds found for the integer 
-*     fields.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     filter
-*        The filter string. 
-*     maxfld
-*        The size of the "ubnd" and "lbnd" arrays.
-*     ubnd
-*        A pointer to an integer array in which to return the
-*        upper bound found for each integer field in the filter.
-*        They are stored in the order in which they occur in the filter.
-*        If the filter contains too many fields to fit in the supplied
-*        array, the excess trailing fields are ignored.
-*     lbnd
-*        A pointer to an integer array in which to return the
-*        lower bound found for each integer field in the filter.
-
-*  Returned Value:
-*     astKeyFields()
-*        The total number of cards matching the supplied filter in the
-*        FitsChan.
-
-*  Filter Syntax:
-*     -  The criteria for a keyword name to match a filter template are
-*     as follows:
-*     -  All characters in the template other than "%" (and the field width
-*     and type specifiers which follow a "%") must be matched by an 
-*     identical character in the test string. 
-      -  If a "%" occurs in the template, then the next character in the 
-*     template should be a single digit specifying a field width. If it is 
-*     zero, then the test string may contain zero or more matching characters. 
-*     Otherwise, the test string must contain exactly the specified number 
-*     of matching characters (i.e. 1 to 9). The field width digit may be 
-*     omitted, in which case the test string must contain one or more matching 
-*     characters. The next character in the template specifies the type of 
-*     matching characters and must be one of "d", "c" or "f". Decimal digits 
-*     are matched by "d", all upper (but not lower) case alphabetical 
-*     characters are matched by "c", and all characters which may legally be 
-*     found within a FITS keyword name are matched by "f".
-
-*  Examples:
-*     -  The filter "CRVAL1" accepts the single keyword CRVAL1.
-*     -  The filter "CRVAL%1d" accepts the single keyword CRVAL0, CRVAL1,
-*     CRVAL2, up to CRVAL9.
-*     -  The filter "CRVAL%d" accepts any keyword consisting of the string
-*     "CRVAL" followed by any integer value.
-*     -  The filter "CR%0s1" accepts any keyword starting with the string "CR"
-*     and ending with the character "1" (including CR1).
-
-*  Notes:
-*     -  The entire FitsChan is searched, irrespective of the setting of
-*     the Card attribute.
-*     -  If "maxfld" is supplied as zero, "ubnd" and "lbnd" are ignored,
-*     but the number of matching cards is still returned as the function value.
-*     -  If no matching cards are found in the FitsChan, or if there are no 
-*     integer fields in the filter, then the lower and upper bounds are 
-*     returned as zero and -1 (i.e. reversed). 
-*     -  If an error has already occured, or if this function should fail 
-*     for any reason, a value of zero is returned for the function value,
-*     and the lower and upper bounds are set to zero and -1.
-
-*-
-*/
-
-/* Local Variables: */
-   const char *class;     /* Object class */
-   const char *method;    /* Method name */
-   int *fields;           /* Pointer to array of field values */
-   int i;                 /* Field index */
-   int icard;             /* Index of current card on entry */
-   int nmatch;            /* No. of matching cards */
-   int nf;                /* No. of integer fields in the filter */
-   int nfld;              /* No. of integer fields in current keyword name */
-
-/* Initialise the returned values. */
-   nmatch = 0;
-   for( i = 0; i < maxfld; i++ ){
-      lbnd[ i ] = 0;
-      ubnd[ i ] = -1;
-   }
-   nf = 0;
-
-/* Check the global error status. */
-   if ( !astOK || !filter ) return nf;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the method name and object class for use in error messages. */
-   method = "astKeyFields";
-   class = astGetClass( this );
-
-/* Count the number of integer fields in the filter string. */
-   nf = CountFields( filter, 'd', method, class, status );
-
-/* If this is larger than the supplied arrays, use the size of the arrays 
-   instead. */
-   if( nf > maxfld ) nf = maxfld;
-
-/* Allocate memory to hold the integer field values extracted from 
-   each matching keyword. */
-   fields = (int *) astMalloc( sizeof( int )*(size_t) nf );
-
-/* Save the current card index, and rewind the FitsChan. */
-   icard = astGetCard( this );
-   astClearCard( this );
-
-/* Check that the FitsChan is not empty and the pointer can be used. */
-   if( !astFitsEof( this ) && astOK ){
-
-/* Initialise the returned bounds. Any excess elements in the array are left
-   at the previously initialised values. */
-      for( i = 0; i < nf; i++ ){
-         lbnd[ i ] = INT_MAX;
-         ubnd[ i ] = -INT_MAX;
-      }
-
-/* Initialise the number of matching keywords. */
-      nmatch = 0;
-      
-/* Loop round all the cards in the FitsChan. */
-      while( !astFitsEof( this ) && astOK ){
-
-/* If the current keyword name matches the filter, update the returned
-   bounds and increment the number of matches. */
-         if( Match( CardName( this, status ), filter, nf, fields, &nfld, 
-                    method, class, status ) ){
-
-            for( i = 0; i < nf; i++ ){
-               if( fields[ i ] > ubnd[ i ] ) ubnd[ i ] = fields[ i ];
-               if( fields[ i ] < lbnd[ i ] ) lbnd[ i ] = fields[ i ];
-            }
-
-            nmatch++;
-                    
-         }
-                    
-/* Move on to the next card. */
-         MoveCard( this, 1, method, class, status );
-         
-      }
-
-/* If bounds were not found, returned 0 and -1. */
-      for( i = 0; i < nf; i++ ){
-         if( lbnd[ i ] == INT_MAX ){
-            lbnd[ i ] = 0;
-            ubnd[ i ] = -1;
-         }
-      }
-
-   }
-
-/* Reinstate the original current card index. */
-   astSetCard( this, icard );
-
-/* Free the memory used to hold the integer field values extracted from 
-   each matching keyword. */
-   fields = (int *) astFree( (void *) fields );
-
-/* If an error has occurred, returned no matches and reversed bounds. */
-   if( !astOK ){
-      nmatch = 0;
-      for( i = 0; i < maxfld; i++ ){
-         lbnd[ i ] = 0;
-         ubnd[ i ] = -1;
-      }
-   }
-
-/* Returned the answer. */
-   return nmatch;
-
-}
-
-static int FindFits( AstFitsChan *this, const char *name, 
-                     char card[ AST__FITSCHAN_FITSCARDLEN + 1 ], int inc, int *status ){
-/*
-*++
-*  Name:
-c     astFindFits
-f     AST_FINDFITS
-
-*  Purpose:
-*     Find a FITS card in a FitsChan by keyword.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     int astFindFits( AstFitsChan *this, const char *name, char card[ 81 ],
-c                      int inc )
-f     RESULT = AST_FINDFITS( THIS, NAME, CARD, INC, STATUS )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function searches for a card in a FitsChan by keyword. The
-*     search commences at the current card (identified by the Card
-*     attribute) and ends when a card is found whose FITS keyword
-*     matches the template supplied, or when the last card in the
-*     FitsChan has been searched.
-*
-*     If the search is successful (i.e. a card is found which matches
-c     the template), the contents of the card are (optionally)
-f     the template), the contents of the card are
-*     returned and the Card attribute is adjusted to identify the card
-*     found or, if required, the one following it. If the search is
-c     not successful, the function returns zero and the Card attribute
-f     not successful, the function returns .FALSE. and the Card attribute
-*     is set to the "end-of-file".
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing a
-f        A character string containing a
-*        template for the keyword to be found. In the simplest case,
-*        this should simply be the keyword name (the search is case
-*        insensitive and trailing spaces are ignored). However, this
-*        template may also contain "field specifiers" which are
-*        capable of matching a range of characters (see the "Keyword
-*        Templates" section for details). In this case, the first card
-*        with a keyword which matches the template will be found. To
-*        find the next FITS card regardless of its keyword, you should
-*        use the template "%f".
-c     card
-f     CARD = CHARACTER * ( 80 ) (Returned)
-c        An array of at least 81 characters (to allow room for a
-c        terminating null)
-f        A character variable with at least 80 characters
-*        in which the FITS card which is found will be returned.  If
-c        the search is not successful (or a NULL pointer is given), a
-f        the search is not successful, a
-*        card will not be returned.
-c     inc
-f     INC = LOGICAL (Given)
-c        If this value is zero (and the search is successful), the
-f        If this value is .FALSE. (and the search is successful), the
-*        FitsChan's Card attribute will be set to the index of the card
-c        that was found. If it is non-zero, however, the Card
-f        that was found. If it is .TRUE., however, the Card
-*        attribute will be incremented to identify the card which
-*        follows the one found.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFindFits()
-f     AST_FINDFITS = LOGICAL
-c        One if the search was successful, otherwise zero.
-f        .TRUE. if the search was successful, otherwise .FALSE..
-
-*  Notes:
-*     - The search always starts with the current card, as identified
-*     by the Card attribute. To ensure you search the entire contents
-*     of a FitsChan, you should first clear the Card attribute (using
-c     astClear). This effectively "rewinds" the FitsChan.
-f     AST_CLEAR). This effectively "rewinds" the FitsChan.
-*     - If a search is unsuccessful, the Card attribute is set to the
-*     "end-of-file" (i.e. to one more than the number of cards in the
-*     FitsChan). No error occurs.
-c     - A value of zero will be returned if this function is invoked
-f     - A value of .FALSE. will be returned if this function is invoked
-*     with the AST error status set, or if it should fail for any
-*     reason.
-
-*  Examples:
-c     result = astFindFits( fitschan, "%f", card, 1 );
-f     RESULT = AST_FINDFITS( FITSCHAN, '%f', CARD, .TRUE., STATUS )
-*        Returns the current card in a FitsChan and advances the Card
-*        attribute to identify the card that follows (the "%f"
-*        template matches any keyword).
-c     result = astFindFits( fitschan, "BITPIX", card, 1 );
-f     RESULT = AST_FINDFITS( FITSCHAN, 'BITPIX', CARD, .TRUE., STATUS )
-*        Searches a FitsChan for a FITS card with the "BITPIX" keyword
-*        and returns that card. The Card attribute is then incremented
-*        to identify the card that follows it.
-c     result = astFindFits( fitschan, "COMMENT", NULL, 0 );
-f     RESULT = AST_FINDFITS( FITSCHAN, 'COMMENT', CARD, .FALSE., STATUS )
-*        Sets the Card attribute of a FitsChan to identify the next
-c        COMMENT card (if any). The card itself is not returned.
-f        COMMENT card (if any) and returns that card.
-c     result = astFindFits( fitschan, "CRVAL%1d", card, 1 );
-f     RESULT = AST_FINDFITS( FITSCHAN, 'CRVAL%1d', CARD, .TRUE., STATUS )
-*        Searches a FitsChan for the next card with a keyword of the
-*        form "CRVALi" (for example, any of the keywords "CRVAL1",
-*        "CRVAL2" or "CRVAL3" would be matched). The card found (if
-*        any) is returned, and the Card attribute is then incremented
-*        to identify the following card (ready to search for another
-*        keyword with the same form, perhaps).
-
-*  Keyword Templates:
-*     The templates used to match FITS keywords are normally composed
-*     of literal characters, which must match the keyword exactly
-*     (apart from case). However, a template may also contain "field
-*     specifiers" which can match a range of possible characters. This
-*     allows you to search for keywords that contain (for example)
-*     numbers, where the digits comprising the number are not known in
-*     advance.
-*
-*     A field specifier starts with a "%" character. This is followed
-*     by an optional single digit (0 to 9) specifying a field
-*     width. Finally, there is a single character which specifies the
-*     type of character to be matched, as follows:
-*
-*     - "c": matches all upper case letters,
-*     - "d": matches all decimal digits,
-*     - "f": matches all characters which are permitted within a FITS
-*     keyword (upper case letters, digits, underscores and hyphens).
-*
-*     If the field width is omitted, the field specifier matches one
-*     or more characters. If the field width is zero, it matches zero
-*     or more characters. Otherwise, it matches exactly the number of
-*     characters specified. In addition to this:
-*
-*     - The template "%f" will match a blank FITS keyword consisting
-*     of 8 spaces (as well as matching all other keywords).
-*     - A template consisting of 8 spaces will match a blank keyword
-*     (only).
-*
-*     For example:
-*
-*     - The template "BitPix" will match the keyword "BITPIX" only.
-*     - The template "crpix%1d" will match keywords consisting of
-*     "CRPIX" followed by one decimal digit.
-*     - The template "P%c" will match any keyword starting with "P"
-*     and followed by one or more letters.
-*     - The template "E%0f" will match any keyword beginning with "E".
-*     - The template "%f" will match any keyword at all (including a
-*     blank one).
-*--
-*/
-
-/* Local Variables: */
-   char *c;               /* Pointer to next character to check */
-   char *lname;           /* Pointer to copy of name without trailing spaces */
-   const char *class;     /* Object class */ 
-   const char *method;    /* Calling method */ 
-   int ret;               /* Was a card found? */
-
-/* Check the global status, and supplied keyword name. */
-   if( !astOK ) return 0;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the calling method and object class. */ 
-   method = "astFindFits";
-   class = astGetClass( this ); 
-
-/* Get a local copy of the keyword template. */
-   lname = (char *) astStore( NULL, (void *) name, strlen(name) + 1 );
-
-/* Terminate it to exclude trailing spaces. */
-   c = lname + strlen(lname) - 1;
-   while( *c == ' ' && c >= lname ) *(c--) = 0;
-
-/* Use the private FindKeyCard function to find the card and make it the
-   current card. Always use the supplied current card (if any) if the 
-   template is "%f" or "%0f". */
-   if ( !strcmp( lname, "%f" ) || !strcmp( lname, "%0f" ) ){ 
-      ret = astFitsEof( this ) ? 0 : 1;
-   } else {
-      ret = FindKeyCard( this, lname, method, class, status );
-   }
-
-/* Only proceed if the card was found. */
-   if( ret && astOK ){
-
-/* Format the current card if a destination string was supplied. */
-      if( card ) FormatCard( this, card, method, status );
-
-/* Increment the current card pointer if required. */
-      if( inc ) MoveCard( this, 1, method, class, status );
-
-/* Indicate that a card has been formatted. */
-      ret = 1;
-
-   }
-
-/* Free the memory holding the local copy of the keyword template. */
-   lname = (char *) astFree( (void *) lname );
-
-/* If an errror has occurred, return zero. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int FindKeyCard( AstFitsChan *this, const char *name, 
-                        const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     FindKeyCard
-
-*  Purpose:
-*     Find the next card refering to given keyword.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int FindKeyCard( AstFitsChan *this, const char *name, 
-*                      const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Finds the next card which refers to the supplied keyword and makes
-*     it the current card. The search starts with the current card and ends 
-*     when it reaches the last card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a string holding the keyword template (using the
-*        syntax expected by the Match function).
-*     method
-*        Pointer to string holding name of calling method.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if a card was found refering to the given
-*     keyword. Otherwise zero is returned.
-
-*  Notes:
-*     -  If a NULL pointer is supplied for "name" then the current card
-*     is left unchanged.
-*     -  The current card is set to NULL (end-of-file) if no card can be
-*     found for the supplied keyword.
-
-*/
-
-/* Local Variables: */
-   int nfld;             /* Number of fields in keyword template */
-   int ret;              /* Was a card found? */
-
-/* Check the global status, and supplied keyword name. */
-   if( !astOK || !name ) return 0;
-
-/* Indicate that no card has been found yet. */
-   ret = 0;
-
-/* Search forward through the list until all cards have been checked. */
-   while( !astFitsEof( this ) && astOK ){
-
-/* Break out of the loop if the keyword name from the current card matches 
-   the supplied keyword name. */
-      if( Match( CardName( this, status ), name, 0, NULL, &nfld, method, class, status ) ){
-         ret = 1;
-         break;
-
-/* Otherwise, move the current card on to the next card. */
-      } else {
-         MoveCard( this, 1, method, class, status );
-      }
-
-   }
-
-/* Return. */
-   return ret;
-
-}
-
-static double *FitLine( AstMapping *map, double *g, double *g0, double *w0, 
-                        double dim, double *tol, int *status ){
-/*
-*  Name:
-*     FitLine
-
-*  Purpose:
-*     Check a Mapping for linearity.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double *FitLine( AstMapping *map, double *g, double *g0, double *w0, 
-*                      double dim, double *tol, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function applies the supplied Mapping to a set of points along
-*     a straight line in the input space. It checks to see if the transformed 
-*     positions also lie on a straight line (in the output space). If so,
-*     it returns the vector along this line in the output space which
-*     corresponds to a unit vector along the line in the input space. If
-*     not, a NULL pointer is returned.
-*
-*     The returned vector is found by doing a least squares fit.
-
-*  Parameters:
-*     map
-*        A pointer to the Mapping to test. The number of outputs must be
-*        greater than or equal to the number of inputs.
-*     g
-*        A pointer to an array holding a unit vector within the input space 
-*        defining the straight line to be checked. The number of elements
-*        within this array should equal the number of inputs for "map".
-*     g0
-*        A pointer to an array holding a position within the input space 
-*        giving the central position of the vector "g". The number of elements
-*        within this array should equal the number of inputs for "map".
-*     w0
-*        A pointer to an array holding a vector within the output space 
-*        which corresponds to "g0". The number of elements within this array 
-*        should equal the number of outputs for "map".
-*     dim
-*        The length of the pixel axis, or AST__BAD if unknown.
-*     tol
-*        Pointer to an array holding the tolerance for equality on each 
-*        output axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to dynamically allocated memory holding the required vector
-*     in the output space. The number of elements in this vector will equal
-*     the number of outputs for "map". The memory should be freed using
-*     astFree when no longer needed. If the Mapping is not linear, NULL
-*     is returned.
-
-*  Notes:
-*     -  NULL is returned if an error occurs.
-*/
-
-/* Local Constants: */
-#define NPO2 50
-#define NP (2*NPO2+1)
-
-/* Local Variables: */
-   AstPointSet *pset1;
-   AstPointSet *pset2;
-   double **ptr1;
-   double **ptr2;
-   double *offset;
-   double *pax;
-   double *ret;
-   double *voffset;
-   double dax;
-   double denom;
-   double gap;
-   double sd2;
-   double sd;
-   double sdw;
-   double sw;
-   int i;
-   int j;
-   int n;
-   int nin;
-   int nout;
-   int ok;              
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status and supplied axis size. */
-   if( !astOK || dim == 0.0 ) return ret;
-
-/* Get the number of inputs and outputs for the Mapping. Return if the
-   number of outputs is smaller than the number of inputs. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-   if( nout < nin ) return ret;
-
-/* Check the supplied position is good on all axes. */
-   for( j = 0; j < nout; j++ ) {
-      if( w0[ j ] == AST__BAD ) return ret;
-   }
-
-/* We use NP points in the fit. If a value for "dim" has been supplied,
-   we use points evenly distributed over one tenth of this size, If 
-   not, we use a gap of 1.0 (corresponds to an axis length of 100 pixels). 
-   Choose the gap. */
-   gap = ( dim != AST__BAD ) ? 0.1*dim/NP : 1.0;
-
-/* Create PointSets to hold the input and output positions. */
-   pset1 = astPointSet( NP, nin, "", status );
-   ptr1 = astGetPoints( pset1 );
-   pset2 = astPointSet( NP, nout, "", status );
-   ptr2 = astGetPoints( pset2 );
-   
-/* Allocate the returned array. */
-   ret = astMalloc( sizeof( double )*(size_t) nout );
-   
-/* Allocate workspace to hold the constant offsets of the fit. */
-   offset = astMalloc( sizeof( double )*(size_t) nout );
-   voffset = astMalloc( sizeof( double )*(size_t) nout );
-
-/* Indicate we have not yet got a usable returned vector. */
-   ok = 0;
-     
-/* Check we can use the pointers safely. */
-   if( astOK ) {
-
-/* Set up the input positions: NP evenly spaced points along a line with
-   unit direction vector given by "g", centred at position given by "g0". */
-      for( j = 0; j < nin; j++ ) {
-         pax = ptr1[ j ];
-         dax = g[ j ]*gap;
-         for( i = -NPO2; i <= NPO2; i++ ) *(pax++) = g0[ j ] + dax*i;
-      }
-
-/* Transform these positions into the output space. */
-      (void) astTransform( map, pset1, 1, pset2 );
-
-/* Loop over all output axes, finding the component of the returned vector. */
-      ok = 1;
-      for( j = 0; j < nout; j++ ) {
-         pax = ptr2[ j ];
-
-/* Now loop over all the transformed points to form the other required
-   sums. We also form the sums needed to estimate the variance in the 
-   calculated offset. */
-         sdw = 0.0;
-         sw = 0.0;
-         sd = 0.0;
-         sd2 = 0.0;
-         n = 0;
-         
-         for( i = -NPO2; i <= NPO2; i++, pax++ ) {
-            if( *pax != AST__BAD ) {
-
-/* Increment the required sums. */
-               sdw += i*(*pax);           
-               sw += (*pax);           
-               sd += i;
-               sd2 += i*i;
-               n++;
-            }
-         }
-
-/* If a reasonable number of good points were found, find the component of 
-   the returned vector (excluding a scale factor of 1/gap). */
-         denom = sd2*n - sd*sd;
-         if( n > NP/4 && denom != 0.0 ) {
-
-/* Find the constant scale factor to return for this axis. */
-            ret[ j ] = (sdw*n - sw*sd)/denom;
-
-/* Now find the constant offset for this axis. */
-            offset[ j ] = (sw*sd2 - sdw*sd)/denom;
-
-         } else {
-            ok = 0;
-            break;
-         }
-      }
-
-/* Now check that the fit is good enough. Each axis is checked separately.
-   All axes must be good. */
-      if( ok ) {
-         for( j = 0; j < nout; j++ ) {
-
-/* Store the axis values implied by the linear fit in the now un-needed ptr1[0]
-   array. */
-            pax = ptr1[ 0 ];
-            for( i = -NPO2; i <= NPO2; i++, pax++ ) {
-               *pax = i*ret[ j ] + offset[ j ];
-            }
-
-/* Test the fit to see if we beleive that the mapping is linear. If
-   it is, scale the returned value from units of "per gap" to units of 
-   "per pixel". Otherwise,indicate that he returned vector is unusable. */
-            if( FitOK( NP, ptr2[ j ], ptr1[ 0 ], tol[ j ], status ) ) {
-               ret[ j ] /= gap;
-            } else {
-               ok = 0; 
-               break;
-            }
-         }
-      }
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free memory. */
-   offset = astFree( offset );
-   
-/* If an error has occurred, or if the returned vector is unusable, 
-   free any returned memory */
-   if( !astOK || !ok ) ret = astFree( ret );
-
-/* Return the answer. */
-   return ret;
-
-/* Undefine local constants: */
-#undef NP 
-#undef NPO2
-}
-
-static int FitsEof( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astFitsEof
-
-*  Purpose:
-*     See if the FitsChan is at "end-of-file".
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int astFitsEof( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     A value of zero is returned if any more cards remain to be read from the
-*     FitsChan. Otherwise a value of 1 is returned. Thus, it is
-*     equivalent to testing the FitsChan for an "end-of-file" condition.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Returned Value:
-*     One if no more cards remain to be read, otherwise zero.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-
-*-
-*/
-
-/* Check the supplied object. */
-   if( !this ) return 1;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* If no more cards remain to be read, the current card pointer in the
-   FitsChan will be NULL. Return an appropriate integer value. */
-   return  this->card ? 0 : 1;
-
-}
-static int FitsSof( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     FitsSof
-
-*  Purpose:
-*     See if the FitsChan is at "start-of-file".
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int FitsSof( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A value of 1 is returned if the current card is the first card in
-*     the FitsChan. Otherwise a value of zero is returned.  This function
-*     is much more efficient than "astGetCard(this) <= 1" .
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the current card is the first card.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*     - A non-zero value is returned if the FitsChan is empty.
-*-
-*/
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
-   if ( !this || !this->head ) return 1;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* If the current card is at the head of the linked list, it is the first
-   card. */
-   return  this->card == this->head;
-}
-
-/*
-*++
-*  Name:
-c     astGetFits<X>
-f     AST_GETFITS<X>
-
-*  Purpose:
-*     Get a named keyword value from a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     int astGetFits<X>( AstFitsChan *this, const char *name, <X>type *value )
-f     RESULT = AST_GETFITS<X>( THIS, NAME, VALUE, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This is a family of functions which gets a value for a named keyword 
-*     from a FitsChan using one of several different data types. The data 
-*     type of the returned value is selected by replacing <X> in the function 
-*     name by one of the following strings representing the recognised FITS 
-*     data types:
-*
-*     The data type of the returned value is selected by replacing <X> in the 
-*     function name by one of the following strings representing the 
-*     recognised FITS data types:
-*
-*     - CF - Complex floating point values.
-*     - CI - Complex integer values.
-*     - F  - Floating point values.
-*     - I  - Integer values.
-*     - L  - Logical (i.e. boolean) values.
-*     - S  - String values.
-*     - CN - A "CONTINUE" value, these are treated like string values, but
-*            are encoded without an equals sign.
-*
-*     The data type of the "value" 
-c     parameter 
-f     argument
-*     depends on <X> as follows:
-*
-c     - CF - "double *" (a pointer to a 2 element array to hold the real and
-c            imaginary parts of the complex value).
-c     - CI - "int *" (a pointer to a 2 element array to hold the real and
-c            imaginary parts of the complex value).
-c     - F  - "double *".
-c     - I  - "int *".
-c     - L  - "int *".
-c     - S  - "char **" (a pointer to a static "char" array is returned at the
-c            location given by the "value" parameter, Note, the stored string
-c            may change on subsequent invocations of astGetFitsS so a
-c            permanent copy should be taken of the string if necessary). 
-c     - CN - Like"S".
-f     - CF - DOUBLE PRECISION(2) (a 2 element array to hold the real and
-f            imaginary parts of the complex value).
-f     - CI - INTEGER(2) (a 2 element array to hold the real and imaginary 
-f            parts of the complex value).
-f     - F  - DOUBLE PRECISION.
-f     - I  - INTEGER
-f     - L  - LOGICAL
-f     - S  - CHARACTER
-f     - CN - CHARACTER
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string
-f        A character string 
-*        containing the FITS keyword name. This may be a complete FITS
-*        header card, in which case the keyword to use is extracted from 
-*        it. No more than 80 characters are read from this string.
-c     value
-f     VALUE = <X>type (Given)
-c        A pointer to a 
-f        A
-*        buffer to receive the keyword value. The data type depends on <X> 
-*        as described above.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetFits<X><X>()
-f     AST_GETFITS<X> = LOGICAL
-c        A value of zero 
-f        .FALSE.
-*        is returned if the keyword was not found in the FitsChan (no error 
-*        is reported). Otherwise, a value of 
-c        one 
-f        .TRUE.
-*        is returned. 
-
-*  Notes:
-*     -  The card following the current card is checked first. If this is
-*     not the required card, then the rest of the FitsChan is searched,
-*     starting with the first card added to the FitsChan. Therefore cards
-*     should be accessed in the order they are stored in the FitsChan (if
-*     possible) as this will minimise the time spent searching for cards. 
-*     -  If the requested card is found, it becomes the current card, 
-*     otherwise the current card is left pointing at the "end-of-file".
-*     -  If the stored keyword value is not of the requested type, it is
-*     converted into the requested type.
-*     -  If the keyword is found in the FitsChan, but has no associated
-*     value, an error is reported. If necessary, the
-c     astTestFits
-f     AST_TESTFITS
-*     function can be used to determine if the keyword has a defined
-*     value in the FitsChan prior to calling this function.
-*     -  An error will be reported if the keyword name does not conform
-*     to FITS requirements.
-c     -  Zero 
-*     -  .FALSE.
-*     is returned as the function value if an error has already occurred, 
-*     or if this function should fail for any reason.
-*     - The FITS standard says that string keyword values should be
-*     padded with trailing spaces if they are shorter than 8 characters.
-*     For this reason, trailing spaces are removed from the string
-*     returned by 
-c     astGetFitsS
-f     AST_GETFITSS
-*     if the original string (including any trailing spaces) contains 8 
-*     or fewer characters. Trailing spaces are not removed from longer
-*     strings.
-*--
-*/
-
-/* Define a macro which expands to the implementation of the astGetFits<X>
-   routine for a given data type. */
-
-#define MAKE_FGET(code,ctype,ftype) \
-static int GetFits##code( AstFitsChan *this, const char *name, ctype value, int *status ){ \
-\
-/* Local Variables: */ \
-   const char *class;     /* Object class */ \
-   const char *method;    /* Calling method */ \
-   char *lcom;            /* Supplied keyword comment */ \
-   char *lname;           /* Supplied keyword name */ \
-   char *lvalue;          /* Supplied keyword value */ \
-   char *string;          /* Pointer to returned string value */ \
-   char *c;               /* Pointer to next character */ \
-   int cl;                /* Length of string value */ \
-   int ret;               /* The returned value */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Ensure the source function has been called */ \
-   ReadFromSource( this, status ); \
-\
-/* Store the calling method and object class. */ \
-   method = "astGetFits"#code; \
-   class = astGetClass( this ); \
-\
-/* Initialise the returned value. */ \
-   ret = 0; \
-\
-/* Extract the keyword name from the supplied string. */ \
-   (void) Split( name, &lname, &lvalue, &lcom, method, class, status ); \
-\
-/* Attempt to find a card in the FitsChan refering to this keyword, \
-   and make it the current card. Only proceed if a card was found. */ \
-   if( SearchCard( this, lname, method, class, status ) ){ \
-\
-/* Convert the stored data value to the requested type, and store it in \
-   the supplied buffer. */ \
-      if( !CnvValue( this, ftype, 0, value, method, status ) && astOK ) { \
-         astError( AST__FTCNV, "%s(%s): Cannot convert FITS keyword " \
-                   "'%s' to %s.", status, method, class, \
-                   lname, type_names[ ftype ] ); \
-      } \
-\
-/* If the returned value is a string containing 8 or fewer characters, \
-   replace trailing spaces with null characters. */ \
-      if( astOK ) { \
-         if( ftype == AST__STRING ) { \
-            string = *( (char **) value ); \
-            if( string ) { \
-               cl =strlen( string ); \
-               if( cl <= 8 ) { \
-                  c = string + cl - 1; \
-                  while( *c == ' ' && c > string ) { \
-                     *c = 0; \
-                     c--; \
-                  } \
-               } \
-            } \
-         } \
-\
-/* Indicate that a value is available. */ \
-         ret = 1; \
-      } \
-\
-   } \
-\
-/* Context error message. */ \
-   if( !astOK && lname && *lname ) { \
-      astError( astStatus, "%s(%s): Cannot get value for FITS keyword " \
-                   "'%s'.", status, method, class, lname ); \
-   } \
-\
-/* Release the memory used to hold keyword name, value and comment strings. */ \
-   lname = (char *) astFree( (void *) lname ); \
-   lvalue = (char *) astFree( (void *) lvalue ); \
-   lcom = (char *) astFree( (void *) lcom ); \
-\
-/* Return the answer. */ \
-   return ret; \
-\
-}
-
-/* Use the above macro to give defintions for the astGetFits<X> method
-   for each FITS data type. */
-
-MAKE_FGET(CF,double *,AST__COMPLEXF)
-MAKE_FGET(CI,int *,AST__COMPLEXI)
-MAKE_FGET(F,double *,AST__FLOAT)
-MAKE_FGET(I,int *,AST__INT)
-MAKE_FGET(L,int *,AST__LOGICAL)
-MAKE_FGET(S,char **,AST__STRING)
-MAKE_FGET(CN,char **,AST__CONTINUE)
-
-#undef MAKE_FGET
-
-static int FitsGetCom( AstFitsChan *this, const char *name,  
-                       char **comment, int *status ){
-/*
-*+
-*  Name:
-*     astFitsGetCom
-
-*  Purpose:
-*     Get a keyword comment from a FitsChan.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int astFitsGetCom( AstFitsChan *this, const char *name, 
-*                        char **comment )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function gets the comment associated with the next occurrence of 
-*     a named keyword in a FitsChan. 
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        A pointer to a 
-*        string holding the keyword name. This may be a complete FITS
-*        header card, in which case the keyword to use is extracted from 
-*        it. No more than 80 characters are read from this string.
-*     comment
-*        A pointer to a location at which to return a pointer to a string
-*        holding the keyword comment. Note, the stored string will change on 
-*        subsequent invocations of astFitsGetCom so a permanent copy 
-*        should be taken of the string if necessary. 
-
-*  Returned Value:
-*     astFitsGetCom()
-*        A value of zero is returned if the keyword was not found before
-*        the end of the FitsChan was reached (no error is reported). 
-*        Otherwise, a value of one is returned. 
-
-*  Notes:
-*     -  If a NULL pointer is supplied for "name" then the comment from
-*     the current card is returned.
-*     -  The returned value is obtained from the next card refering to 
-*     the required keyword, starting the search with the current card.
-*     Any cards occuring before the current card are not seached. If
-*     the entire contents of the FitsChan must be searched, then ensure
-*     the current card is the first card in the FitsChan by clearing the Card
-*     attribute. This effectively "rewinds" the FitsChan.
-*     -  The current card is updated to become the card following the one 
-*     read by this function. If the card read by this function is the
-*     last one in the FitsChan, then the current card is left pointing at the
-*     "end-of-file".
-*     -  An error will be reported if the keyword name does not conform
-*     to FITS requirements.
-*     -  A NULL pointer is returned for the comment string if the keyword
-*     has no comment.
-*     -  Zero is returned as the function value if an error has already 
-*     occurred, or if this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */ 
-   astDECLARE_GLOBALS     /* Declare the thread specific global data */
-   const char *method;    /* Calling method */
-   const char *class;     /* Object class */
-   char *lcom;            /* Supplied keyword comment */ 
-   char *lname;           /* Supplied keyword name */ 
-   char *lvalue;          /* Supplied keyword value */ 
-   int ret;               /* The returned value */ 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return 0; 
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Initialise the returned value. */ 
-   ret = 0; 
-
-/* Store the method name and object class. */
-   method = "astFitsGetCom";
-   class = astGetClass( this );
-
-/* Extract the keyword name from the supplied string (if supplied). */ 
-   if( name ){
-      (void) Split( name, &lname, &lvalue, &lcom, method, class, status );
-   } else {
-      lname = NULL;
-      lcom = NULL;
-      lvalue = NULL;
-   }
-
-/* Find the next card in the FitsChan refering to this keyword. This will
-   be the current card if no keyword name was supplied. The matching card
-   is made the current card. Only proceed if a card was found. */ 
-   if( FindKeyCard( this, lname, method, class, status ) ){ 
-
-/* Copy the comment into a static buffer, and return a pointer to it. */ 
-      if( CardComm( this, status ) ){
-         (void) strncpy( fitsgetcom_sval, CardComm( this, status ), AST__FITSCHAN_FITSCARDLEN ); 
-         fitsgetcom_sval[ AST__FITSCHAN_FITSCARDLEN ] = 0; 
-         if( comment ) *comment = fitsgetcom_sval;
-      } else {
-         if( comment ) *comment = NULL;
-      }        
-
-/* Move on to the next card. */
-      MoveCard( this, 1, method, class, status );
-
-/* Indicate that a value is available. */ 
-      if( astOK ) ret = 1; 
-
-   } 
-
-/* Release the memory used to hold keyword name, value and comment strings. */ 
-   lname = (char *) astFree( (void *) lname ); 
-   lvalue = (char *) astFree( (void *) lvalue ); 
-   lcom = (char *) astFree( (void *) lcom ); 
-
-/* Return the answer. */ 
-   return ret; 
-
-}
-
-static int SetFits( AstFitsChan *this, const char *keyname, void *value, 
-                    int type, const char *comment, int overwrite, int *status ){
-/*
-*  Name:
-*     SetFits
-
-*  Purpose:
-*     Store a keyword value of any type in a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int SetFits( AstFitsChan *this, const char *keyname, void *value, 
-*                  int type, const char *comment, int overwrite, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function stores the supplied value for the supplied keyword 
-*     in the supplied FitsChan, assuming it is of the supplied data type.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        A pointer to a string holding the keyword name. 
-*     value
-*        A pointer to a buffer holding the keyword value. For strings,
-*        the buffer should hold the address of a pointer to the character 
-*        string.
-*     type 
-*        The keyword type.
-*     comment
-*        A pointer to a string holding a comment to associated with the 
-*        keyword. If a NULL pointer or a blank string is supplied, then
-*        any comment included in the string supplied for the "name" parameter 
-*        is used instead. If "name" contains no comment, then any existing 
-*        comment in the card being over-written is retained, or a NULL
-*        pointer is stored if a new card is being inserted. If the data
-*        value being stored for the card is the same as the card being
-*        over-written, then any existing comment is retained.
-*     overwrite
-*        If non-zero, the new card formed from the supplied keyword name,
-*        value and comment string over-writes the current card, and the 
-*        current card is incremented to refer to the next card. If zero, the 
-*        new card is inserted in front of the current card and the current 
-*        card is left unchanged. In either case, if the current card on 
-*        entry points to the "end-of-file", the new card is appended to the 
-*        end of the list. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 0 is returned if the value could not be stored for any
-*     reason. A value of 1 is returned otherwise.
-
-*  Notes:
-*     -  Nothing is stored in the FitsChan and a value of zero is returned 
-*     (but no error is reported) if an AST__FLOAT value is supplied equal 
-*     to AST__BAD.
-
-*/
-
-/* Local Variables: */
-   const char *cval; 
-   const char *ecval; 
-   double dval;
-   double ecdval[ 2 ];
-   double edval;
-   int ecival[ 2 ];
-   int eival;
-   int ival;
-   int ret;          
-
-/* Check the global status, and the supplied pointer. */
-   if( !astOK || !value ) return 0;
-
-/* Initialise the returned value to indicate that the supplied name was
-   stored. */
-   ret = 1;
-
-/* Check each data type in turn. */
-   if( type == AST__FLOAT ){
-      dval = *( (double *) value );
-      if( dval != AST__BAD ) {
-
-/* If the data value has not changed, and the card has a coment, 
-   set the comment pointer NULL so that the existing comment will be
-   retained. */
-         if( overwrite && CnvValue( this, type, 0, &edval, "SetFits",
-                                    status ) && 
-             CardComm( this, status ) ) {
-            if( EQUAL( edval, dval ) ) comment = NULL;
-         }
-
-         astSetFitsF( this, keyname, dval, comment, overwrite );
-      } else {
-         ret = 0;
-      }
-
-   } else if( type == AST__STRING ){
-      cval = *( (char **) value);
-      if( cval ){      
-
-/* If the data value has not changed, retain the original comment. */
-         if( overwrite && CnvValue( this, type, 0, &ecval, "SetFits", 
-                                    status ) && 
-             CardComm( this, status ) ) {
-            if( Similar( ecval, cval, status ) ) comment = NULL;
-         }
-
-/* Ignore comments if they are identical to the keyword value. */
-         if( comment && !strcmp( cval, comment ) ) comment = NULL;
-
-         astSetFitsS( this, keyname, cval, comment, overwrite );
-      } else {
-         ret = 0;
-      }
-
-   } else if( type == AST__CONTINUE ){
-      cval = *( (char **) value);
-      if( cval ){      
-         astSetFitsCN( this, keyname, cval, comment, overwrite );
-      } else {
-         ret = 0;
-      }
-
-   } else if( type == AST__COMMENT ){
-      astSetFitsCom( this, keyname, comment, overwrite );
-
-   } else if( type == AST__INT ){
-      ival = *( (int *) value );
-
-/* If the data value has not changed, retain the original comment. */
-      if( overwrite && CnvValue( this, type, 0, &eival, "SetFits", 
-                                 status ) && 
-         CardComm( this, status ) ) {
-         if( eival == ival ) comment = NULL;
-      }
-
-      astSetFitsI( this, keyname, ival, comment, overwrite );
-
-   } else if( type == AST__COMPLEXF ){
-      if( ( (double *) value )[0] != AST__BAD &&
-          ( (double *) value )[1] != AST__BAD ) {
-
-/* If the data value has not changed, retain the original comment. */
-         if( overwrite && CnvValue( this, type, 0, ecdval, "SetFits", 
-                                    status ) && 
-             CardComm( this, status ) ) {
-            if( EQUAL( ecdval[ 0 ], ( (double *) value )[ 0 ] ) &&
-                EQUAL( ecdval[ 1 ], ( (double *) value )[ 1 ] ) ) comment = NULL;
-         }
-
-         astSetFitsCF( this, keyname, (double *) value, comment, overwrite );
-      } else {
-         ret = 0;
-      }
-
-   } else if( type == AST__COMPLEXI ){
-
-/* If the data value has not changed, retain the original comment. */
-      if( overwrite && CnvValue( this, type, 0, ecival, "SetFits", 
-                                 status ) && 
-          CardComm( this, status ) ) {
-         if( ecival[ 0 ] == ( (int *) value )[ 0 ] &&
-             ecival[ 1 ] == ( (int *) value )[ 1 ] ) comment = NULL;
-      }
-
-      astSetFitsCI( this, keyname, (int *) value, comment, overwrite );
-
-   } else if( type == AST__LOGICAL ){
-      ival = ( *( (int *) value ) != 0 );
-
-/* If the data value has not changed, retain the original comment. */
-      if( overwrite && CnvValue( this, type, 0, &eival, "SetFits", 
-                                 status ) && 
-          CardComm( this, status ) ) {
-         if( eival == ival ) comment = NULL;
-      }
-
-      astSetFitsL( this, keyname, ival, comment, overwrite );
-
-
-   } else if( type == AST__UNDEF ){
-      if( overwrite && CardType( this, status ) == AST__UNDEF && CardComm( this, status ) ) {
-         comment = NULL;
-      }
-      astSetFitsU( this, keyname, comment, overwrite );
-
-   } 
-
-   return ret;
-}
-
-/*
-*++
-*  Name:
-c     astSetFits<X>
-f     AST_SETFITS<X>
-
-*  Purpose:
-*     Store a keyword value in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astSetFits<X>( AstFitsChan *this, const char *name, <X>type value, 
-c                         const char *comment, int overwrite )
-f     CALL AST_SETFITS<X>( THIS, NAME, VALUE, COMMENT, OVERWRITE, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-c     This is a family of functions which store values for named keywords
-f     This is a family of routines which store values for named keywords
-*     within a FitsChan at the current card position. The supplied keyword 
-*     value can either over-write an existing keyword value, or can be 
-*     inserted as a new header card into the FitsChan.
-*
-c     The keyword data type is selected by replacing <X> in the function name 
-f     The keyword data type is selected by replacing <X> in the routine name 
-*     by one of the following strings representing the recognised FITS data 
-*     types:
-*
-*     - CF - Complex floating point values.
-*     - CI - Complex integer values.
-*     - F  - Floating point values.
-*     - I  - Integer values.
-*     - L  - Logical (i.e. boolean) values.
-*     - S  - String values.
-*     - CN - A "CONTINUE" value, these are treated like string values, but
-*            are encoded without an equals sign.
-*
-*     The data type of the "value" parameter depends on <X> as follows:
-*
-c     - CF - "double *" (a pointer to a 2 element array holding the real and
-c            imaginary parts of the complex value).
-c     - CI - "int *" (a pointer to a 2 element array holding the real and
-c            imaginary parts of the complex value).
-c     - F  - "double".
-c     - I  - "int".
-c     - L  - "int".
-c     - S  - "const char *".
-c     - CN - "const char *".
-*
-f     - CF - DOUBLE PRECISION(2) (a 2 element array holding the real and
-f            imaginary parts of the complex value).
-f     - CI - INTEGER(2) (a 2 element array holding the real and imaginary 
-f            parts of the complex value).
-f     - F  - DOUBLE PRECISION.
-f     - I  - INTEGER
-f     - L  - LOGICAL
-f     - S  - CHARACTER
-f     - CN - CHARACTER
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string
-f        A character string 
-*        containing the FITS keyword name. This may be a complete FITS
-*        header card, in which case the keyword to use is extracted from 
-*        it. No more than 80 characters are read from this string.
-c     value
-f     VALUE = <X>type (Given)
-*        The keyword value to store with the named keyword. The data type
-*        of this parameter depends on <X> as described above. 
-c     comment
-f     COMMENT = CHARACTER * ( * ) (Given)
-c        A pointer to a null terminated string 
-f        A string 
-*        holding a comment to associated with the keyword. 
-c        If a NULL pointer or 
-f        If 
-*        a blank string is supplied, then any comment included in the string 
-*        supplied for the 
-c        "name" parameter is used instead. If "name" 
-f        NAME parameter is used instead. If NAME
-*        contains no comment, then any existing comment in the card being 
-*        over-written is retained. Otherwise, no comment is stored with
-*        the card.
-c     overwrite
-f     OVERWRITE = LOGICAL (Given)
-c        If non-zero, 
-f        If .TRUE.,
-*        the new card formed from the supplied keyword name, value and comment 
-*        string over-writes the current card, and the current card is 
-*        incremented to refer to the next card (see the "Card" attribute). If 
-c        zero, 
-f        .FALSE.,
-*        the new card is inserted in front of the current card and the current 
-*        card is left unchanged. In either case, if the current card on entry 
-*        points to the "end-of-file", the new card is appended to the end of 
-*        the list. 
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - The 
-c     function astSetFitsU
-f     routine AST_SETFITSU
-*     can be used to indicate that no value is associated with a keyword.
-*     - The
-c     function astSetFitsCM
-f     routine AST_SETFITSCM
-*     can be used to store a pure comment card (i.e. a card with a blank 
-*     keyword).
-*     -  To assign a new value for an existing keyword within a FitsChan,
-c     first find the card describing the keyword using astFindFits, and
-c     then use one of the astSetFits<X> family to over-write the old value.
-f     first find the card describing the keyword using AST_FINDFITS, and
-f     then use one of the AST_SETFITS<X> family to over-write the old value.
-*     -  If, on exit, there are no cards following the card written by
-c     this function, then the current card is left pointing at the 
-f     this routine, then the current card is left pointing at the 
-*     "end-of-file".
-*     -  An error will be reported if the keyword name does not conform
-*     to FITS requirements.
-*--
-*/
-
-/* Define a macro which expands to the implementation of the astSetFits<X>
-   routine for a given data type. */
-
-#define MAKE_FSET(code,ctype,ftype,valexp) \
-static void SetFits##code( AstFitsChan *this, const char *name, ctype value, const char *comment, int overwrite, int *status ) { \
-\
-/* Local variables: */ \
-   const char *class;     /* Object class */ \
-   const char *method;    /* Calling method */ \
-   const char *com;       /* Comment to use */ \
-   char *lcom;            /* Supplied keyword comment */ \
-   char *lname;           /* Supplied keyword name */ \
-   char *lvalue;          /* Supplied keyword value */ \
-   int free_com;          /* Should com be freed before returned? */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Ensure the source function has been called */ \
-   ReadFromSource( this, status ); \
-\
-/* Store the object clas and calling method. */ \
-   class = astGetClass( this ); \
-   method = "astSetFits"#code; \
-\
-/* Extract the keyword name from the supplied string. */ \
-   (void) Split( name, &lname, &lvalue, &lcom, method, class, status ); \
-\
-/* Initialise a pointer to the comment to be stored. If the supplied \
-   comment is blank, use the comment given with "name". */ \
-   com = ChrLen( comment, status ) ? comment : lcom; \
-\
-/* If the comment is still blank, use the existing comment if we are \
-   over-writing, or a NULL pointer otherwise. */ \
-   free_com = 0; \
-   if( !ChrLen( com, status ) ) { \
-      com = NULL; \
-      if( overwrite ) { \
-         if( CardComm( this, status ) ){ \
-            com = (const char *) astStore( NULL, (void *) CardComm( this, status ), \
-                                           strlen( CardComm( this, status ) ) + 1 ); \
-            free_com = 1; \
-         } \
-      } \
-   } \
-\
-/* Insert the new card. */ \
-   InsCard( this, overwrite, lname, ftype, valexp, com, method, class, status ); \
-\
-/* Release the memory used to hold keyword name, value and comment strings. */ \
-   lname = (char *) astFree( (void *) lname ); \
-   lvalue = (char *) astFree( (void *) lvalue ); \
-   lcom = (char *) astFree( (void *) lcom ); \
-\
-/* Release the memory holding the stored comment string, so long as it was \
-   allocated within this function. */ \
-   if( free_com ) com = (const char *) astFree( (void *) com ); \
-\
-}
-
-/* Use the above macro to give defintions for the astSetFits<X> method
-   for each FITS data type. */
-
-MAKE_FSET(I,int,AST__INT,(void *)&value)
-MAKE_FSET(F,double,AST__FLOAT,(void *)&value)
-MAKE_FSET(S,const char *,AST__STRING,(void *)value)
-MAKE_FSET(CN,const char *,AST__CONTINUE,(void *)value)
-MAKE_FSET(CF,double *,AST__COMPLEXF,(void *)value)
-MAKE_FSET(CI,int *,AST__COMPLEXI,(void *)value)
-MAKE_FSET(L,int,AST__LOGICAL,(void *)&value)
-
-#undef MAKE_FSET
-
-static void SetFitsU( AstFitsChan *this, const char *name, const char *comment,
-                      int overwrite, int *status ) { 
-/*
-*++
-*  Name:
-c     astSetFitsU
-f     AST_SETFITSU
-
-*  Purpose:
-*     Store an undefined keyword value in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astSetFitsU( AstFitsChan *this, const char *name, 
-c                       const char *comment, int overwrite )
-f     CALL AST_SETFITSU( THIS, NAME, COMMENT, OVERWRITE, STATUS )
-
-*  Description:
-*     This 
-c     function 
-f     routine
-*     stores an undefined value for a named keyword within 
-*     a FitsChan at the current card position. The new undefined value
-*     can either over-write an existing keyword value, or can be inserted 
-*     as a new header card into the FitsChan.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string
-f        A character string 
-*        containing the FITS keyword name. This may be a complete FITS
-*        header card, in which case the keyword to use is extracted from 
-*        it. No more than 80 characters are read from this string.
-c     comment
-f     COMMENT = CHARACTER * ( * ) (Given)
-c        A pointer to a null terminated string 
-f        A string 
-*        holding a comment to associated with the keyword. 
-c        If a NULL pointer or 
-f        If 
-*        a blank string is supplied, then any comment included in the string 
-*        supplied for the 
-c        "name" parameter is used instead. If "name" 
-f        NAME parameter is used instead. If NAME
-*        contains no comment, then any existing comment in the card being 
-*        over-written is retained. Otherwise, no comment is stored with
-*        the card.
-c     overwrite
-f     OVERWRITE = LOGICAL (Given)
-c        If non-zero, 
-f        If .TRUE.,
-*        the new card formed from the supplied keyword name and comment 
-*        string over-writes the current card, and the current card is 
-*        incremented to refer to the next card (see the "Card" attribute). If 
-c        zero, 
-f        .FALSE.,
-*        the new card is inserted in front of the current card and the current 
-*        card is left unchanged. In either case, if the current card on entry 
-*        points to the "end-of-file", the new card is appended to the end of 
-*        the list. 
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     -  If, on exit, there are no cards following the card written by
-*     this function, then the current card is left pointing at the 
-*     "end-of-file".
-*     -  An error will be reported if the keyword name does not conform
-*     to FITS requirements.
-*--
-*/
-
-/* Local variables: */ 
-   const char *class;     /* Object class */ 
-   const char *method;    /* Calling method */ 
-   const char *com;       /* Comment to use */ 
-   char *lcom;            /* Supplied keyword comment */ 
-   char *lname;           /* Supplied keyword name */ 
-   char *lvalue;          /* Supplied keyword value */ 
-   int free_com;          /* Should com be freed before returned? */ 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return; 
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the object clas and calling method. */ 
-   class = astGetClass( this ); 
-   method = "astSetFitsU";
-
-/* Extract the keyword name from the supplied string. */ 
-   (void) Split( name, &lname, &lvalue, &lcom, method, class, status ); 
-
-/* Initialise a pointer to the comment to be stored. If the supplied 
-   comment is blank, use the comment given with "name". */ 
-   com = ChrLen( comment, status ) ? comment : lcom; 
-
-/* If the comment is still blank, use the existing comment if we are 
-   over-writing, or a NULL pointer otherwise. */ 
-   free_com = 0; 
-   if( !ChrLen( com, status ) ) { 
-      com = NULL; 
-      if( overwrite ) { 
-         if( CardComm( this, status ) ){ 
-            com = (const char *) astStore( NULL, (void *) CardComm( this, status ), 
-                                           strlen( CardComm( this, status ) ) + 1 ); 
-            free_com = 1; 
-         } 
-      } 
-   } 
-
-/* Insert the new card. */ 
-   InsCard( this, overwrite, lname, AST__UNDEF, NULL, com, method, class, 
-            status ); 
-
-/* Release the memory used to hold keyword name, value and comment strings. */ 
-   lname = (char *) astFree( (void *) lname ); 
-   lvalue = (char *) astFree( (void *) lvalue ); 
-   lcom = (char *) astFree( (void *) lcom ); 
-
-/* Release the memory holding the stored comment string, so long as it was 
-   allocated within this function. */ 
-   if( free_com ) com = (const char *) astFree( (void *) com ); 
-
-}
-
-static void SetFitsCM( AstFitsChan *this, const char *comment,
-                       int overwrite, int *status ) { 
-/*
-*++
-*  Name:
-c     astSetFitsCM
-f     AST_SETFITSCM
-
-*  Purpose:
-*     Store a comment card in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astSetFitsCM( AstFitsChan *this, const char *comment, 
-c                        int overwrite )
-f     CALL AST_SETFITSCM( THIS, COMMENT, OVERWRITE, STATUS )
-
-*  Description:
-*     This 
-c     function 
-f     routine
-*     stores a comment card ( i.e. a card with no keyword name or equals
-*     sign) within a FitsChan at the current card position. The new card
-*     can either over-write an existing card, or can be inserted as a new 
-*     card into the FitsChan.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     comment
-f     COMMENT = CHARACTER * ( * ) (Given)
-c        A pointer to a null terminated string 
-f        A string 
-*        holding the text of the comment card.
-c        If a NULL pointer or 
-f        If 
-*        a blank string is supplied, then a totally blank card is produced.
-c     overwrite
-f     OVERWRITE = LOGICAL (Given)
-c        If non-zero, 
-f        If .TRUE.,
-*        the new card over-writes the current card, and the current card is 
-*        incremented to refer to the next card (see the "Card" attribute). If 
-c        zero, 
-f        .FALSE.,
-*        the new card is inserted in front of the current card and the current 
-*        card is left unchanged. In either case, if the current card on entry 
-*        points to the "end-of-file", the new card is appended to the end of 
-*        the list. 
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     -  If, on exit, there are no cards following the card written by
-*     this function, then the current card is left pointing at the 
-*     "end-of-file".
-*--
-*/
-
-/* Just call astSetFitsCom with a blank keyword name. */
-   astSetFitsCom( this, "", comment, overwrite );
-}
-
-static void SetFitsCom( AstFitsChan *this, const char *name, 
-                        const char *comment, int overwrite, int *status ){
-/*
-*+
-*  Name:
-*     astSetFitsCom
-
-*  Purpose:
-*     Store a comment for a keyword in a FitsChan.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void astSetFitsCom( AstFitsChan *this, const char *name, 
-*                         const char *comment, int overwrite ) 
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function replaces the comment within an existing card, or 
-*     stores a new comment card within a FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        A pointer to a 
-*        string holding the keyword name. This may be a complete FITS
-*        header card, in which case the keyword to use is extracted from 
-*        it. No more than 80 characters are read from this string.
-*     comment
-*        A pointer to a 
-*        string holding a comment to associated with the keyword.
-*        If a NULL or
-*        blank string is supplied, any existing comment associated with
-*        the keyword is removed.
-*     overwrite
-*        If non-zero, the new comment replaces the comment in the current 
-*        card, and the current card is then incremented to refer to the next 
-*        card. If zero, a new comment card is inserted in front of the current 
-*        card and the current card is left unchanged. In either case, if the 
-*        current card on entry points to the "end-of-file", the new card is 
-*        appended to the end of the list. 
-
-*  Notes:
-*     -  When replacing an existing comment, any existing keyword value is 
-*     retained only if the supplied keyword name is the same as the keyword 
-*     name in the current card. If the keyword names are different, then
-*     the new name replaces the old name, and any existing keyword data value 
-*     is deleted. The card thus becomes a comment card with the supplied 
-*     keyword name and comment, but no data value.
-*     -  If, on exit, there are no cards following the card written by
-*     this function, then the current card is left pointing at the 
-*     "end-of-file".
-*     -  The current card can be set explicitly before calling this function
-*     either by assigning a value to the Card attribute (if the index of the 
-*     required card is already known), or using astFindFits (if only the 
-*     keyword name is known).
-*     -  An error will be reported if the keyword name does not conform
-*     to FITS requirements.
-*-
-*/
-
-/* Local variables: */ 
-   const char *class;     /* Pointer to object class string */
-   const char *method;    /* Pointer to calling method string */
-   const char *cname;     /* The existing keyword name */ 
-   const char *com;       /* The comment to use */ 
-   char *lcom;            /* Supplied keyword comment */ 
-   char *lname;           /* Supplied keyword name */ 
-   char *lvalue;          /* Supplied keyword value */ 
-   void *old_data;        /* Pointer to the old data value */
-   void *data;            /* Pointer to data value to be stored */
-   size_t size;           /* The size of the data value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the calling method and object class. */
-   method = "astSetFitsCom";
-   class = astGetClass( this );
-
-/* Extract the keyword name, etc, from the supplied string. */ 
-   (void) Split( name, &lname, &lvalue, &lcom, method, class, status );
-
-/* If a blank comment has been supplied, use NULL instead. */
-   com = ChrLen( comment, status )? comment : NULL;
-
-/* If we are inserting a new card, or over-writing an old card with a
-   different name, create and store a comment card with the given keyword
-   name and comment, but no data value. */
-   cname = CardName( this, status );
-   if( !overwrite || !cname || strcmp( lname, cname ) ){
-      InsCard( this, overwrite, lname, AST__COMMENT, NULL, com, method, class, status );
-
-/* If we are overwriting an existing keyword comment, use the data type
-   and value from the existing current card. Note, we have to take a copy
-   of the old data value because InsCard over-writes by deleting the old 
-   card and then inserting a new one. */
-   } else {
-      old_data = CardData( this, &size, status );
-      data = astStore( NULL, old_data, size );
-      InsCard( this, 1, lname, CardType( this, status ), data, com, method, class, status );
-      data = astFree( data );
-   }
-
-/* Release the memory used to hold keyword name, value and comment strings. */
-   lname = (char *) astFree( (void *) lname );
-   lvalue = (char *) astFree( (void *) lvalue );
-   lcom = (char *) astFree( (void *) lcom );
-
-}
-
-static void FixNew( AstFitsChan *this, int flag, int remove, 
-                    const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     FixNew
-
-*  Purpose:
-*     Remove "new" flags from the whole FitsChan, and optionally remove
-*     "new" cards.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void FixNew( AstFitsChan *this, int flag, int remove, 
-*                  const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function searches the entire FitsChan for cards which are
-*     marked as new using the supplied flag (NEW1 or NEW2). If "remove"
-*     is non-zero, these cards are completely removed from the FitsChan 
-*     (not just marked as used). If "remove" is zero, they are retained
-*     and the specified flag is cleared.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     flag
-*        The flag to use; NEW1 or NEW2.
-*     remove
-*        Remove flagged cards from the FitsChan?
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function attempts to execute even if an error has occurred.
-*     - If any cards are removed, the current Card is left at "end-of-file" 
-*       on exit. If no cards are removed, the original current card is
-*       retained.
-
-*-
-*/
-
-/* Local Variables: */
-   int *flags;             /* Pointer to flags mask for the current card */
-   int icard;              /* Index of current card on entry */
-   int ndeleted;           /* Number of cards deleted by this call */
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
-   if ( !this || !this->head ) return;
-
-/* Save the current card index, and rewind the FitsChan. */
-   icard = astGetCard( this );
-   astClearCard( this );
-
-/* Indicate no cards have yet been deleted. */
-   ndeleted = 0;
-
-/* Loop through the list of FitsCards in the FitsChan until the final
-   card is reached. */
-   while( astOK && this->card ){
-
-/* Get a pointer to the flags mask for this card. */
-      flags = CardFlags( this, status );
-
-/* See if the Card has been marked with the requeste new flag. */
-      if( flags && ( (*flags) & flag ) ) {
-
-/* If requested, remove the card. This will automatically move the
-   current card on to the next card. */
-         if( remove ){
-            DeleteCard( this, method, class, status );
-            ndeleted++;
-
-/* Otherwise, clear the flag. */
-         } else {
-            *flags = (*flags) & ~flag;
-
-/* Increment the card count and move on to the next card. */
-            MoveCard( this, 1, method, class, status );
-
-         }
-
-/* Move on to the next card if this card is not marked with the requested 
-   new flag. */
-      } else {
-         MoveCard( this, 1, method, class, status );
-      }
-   }
-
-/* If no cards were removed, we can safely re-instate the original
-   current card. Otherwise, the current card is left at "end-of-file". */
-   if( ndeleted == 0 ) astSetCard( this, icard );
-
-/* Return */
-   return;
-
-}
-
-static void FixUsed( AstFitsChan *this, int reset, int used, int remove, 
-                     const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     FixUsed
-
-*  Purpose:
-*     Remove "provisionally used" flags from the whole FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void FixUsed( AstFitsChan *this, int reset, int used, int remove, 
-*                   const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function searches the entire FitsChan for cards which are
-*     marked as "provisionally used". The "provisionally used" flag is
-*     cleared for each such card. In addition, if "used" is non-zero then
-*     each such card is flagged as having been "definitely used". If
-*     "remove" is non-zero, then all "provisionally used" cards are deleted 
-*     from the FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     reset
-*        Set all cards so that they are neither provisionally used or
-*        definitely used. In this case neither the "used" nor the
-*        "remove" parameter are accssed.
-*     used
-*        Have the provisionally used cards definitely been used?
-*     remove
-*        Should provisionally used cards be deleted?
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Declare the thread specific global data */
-   FitsCard *card0;        /* Pointer to current FitsCard */
-   int *flags;             /* Pointer to flags mask for the current card */
-   int old_ignore_used;    /* Original value of variable ignore_used */
-   int old_status;         /* Original inherited status value */
-   int rep;                /* Original error reporting flag */
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
-   if ( !this || !this->head ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Temporarily clear any bad status value and supress error reporting in
-   this function. */
-   old_status = astStatus;
-   astClearStatus;
-   rep = astReporting( 0 );
-
-/* Indicate that we should not skip over cards marked as having been
-   read. */
-   old_ignore_used = ignore_used;
-   ignore_used = 0;
-
-/* Save a pointer to the current card, and the reset the current card to
-   be the first card. */
-   card0 = this->card;
-   astClearCard( this );
-
-/* Loop through the list of FitsCards in the FitsChan until the final
-   card is reached. */
-   while( this->card ){
-
-/* Get a pointer to the flags mask for this card. */
-      flags = CardFlags( this, status );
-
-/* Reset both used flags if required. */
-      if( reset ) {
-         *flags = (*flags) & ~PROVISIONALLY_USED;
-         *flags = (*flags) & ~USED;
-         MoveCard( this, 1, method, class, status );
-
-/* Otherwise perform the actions indicated by parameters "used" and
-   "remove". */
-      } else {
-
-/* See if the Card has been provisionally used. */
-         if( flags && ( (*flags) & PROVISIONALLY_USED ) ) {
-
-/* Clear the provisionally used flag. */
-            *flags = (*flags) & ~PROVISIONALLY_USED;
-
-/* If required, set the definitely used flag. */
-            if( used ) *flags = (*flags) | USED;
-
-/* If required, delete the card. The next card is made current. If we are
-   about to delete the original current card, we need to update the
-   pointer to the card to be made current at the end of this function.
-   If we end up back at the head of the chain, indicate that we have
-   reached the end of file by setting card0 NULL.  */
-            if( remove ) {
-               if( card0 == this->card && card0 ) {
-                  card0 = ( (FitsCard *) this->card )->next;
-                  if( (void *) card0 == this->head ) card0 = NULL;
-               }
-               DeleteCard( this, method, class, status );
-
-/* Otherwise, just move on to the next card. */
-            } else {
-               MoveCard( this, 1, method, class, status );
-            }
-
-/* If this card has not bee provisionally used, move on to the next card. */
-         } else {
-            MoveCard( this, 1, method, class, status );
-         }
-      }
-   }
-
-/* Re-instate the original current card. */
-   this->card = card0;
-
-/* If this card is now flagged as definitely used, move forward to the
-   next un-used card. */
-   flags = CardFlags( this, status );
-   if( flags && (*flags & USED ) ) {
-      ignore_used = 1;
-      MoveCard( this, 1, method, class, status );
-   }
-
-/* Re-instate the original flag indicating if cards marked as having been 
-   read should be skipped over. */
-   ignore_used = old_ignore_used;
-
-/* Re-instate the original status value and error reporting condition. */
-   astReporting( rep );
-   astSetStatus( old_status );
-
-}
-
-static void FormatCard( AstFitsChan *this, char *buf, const char *method, int *status ){
-/*
-*
-*  Name:
-*     FormatCard
-
-*  Purpose:
-*     Formats the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void FormatCard( AstFitsChan *this, char *buf, const char *method, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function write the current card into the supplied character 
-*     buffer as a complete FITS header card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     buf
-*        A character string into which the header card is written. This 
-*        should be at least 81 characters long. The returned string is 
-*        padded with spaces upto column 80. A terminating null character 
-*        is added. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  An error is reported if the requested header card does not conform to
-*     FITS standards.
-*
-*/
-
-/* Local Variables: */
-   const char *com;            /* Pointer to comment string to use */
-   int comlen;                 /* Length of comment string */
-   int comstart;               /* Column in which to start comment */
-   int i;                      /* Loop counter for characters */
-   int len;                    /* Output string length */
-   int digits;                 /* No. of digits to use when formatting floating point values */
-   int type;                   /* Card data type */
-
-/* Check the global error status, and check the current card is defined. */
-   if ( !astOK || astFitsEof( this ) ) return; 
-
-/* Get a pointer to the comment to use and determine its length. */
-   com = CardComm( this, status );
-   comlen = ChrLen( com, status );
-
-/* Copy the keyword name to the start of the output buffer, and store
-   its length. */
-   len = (int) strlen( strcpy( buf, CardName( this, status ) ) );
-
-/* Pad the name with spaces up to column 8. */
-   while ( len < FITSNAMLEN ) buf[ len++ ] = ' ';
-
-/* If the card contains a keyword value... */
-   type = CardType( this, status );
-   if( type != AST__COMMENT ){
-
-/* Get the number of digits to use when formatting floating point values. */
-      digits = astGetFitsDigits( this );
-
-/* Put an equals sign in column 9 (or a space if the keyword is a CONTINUE
-   card), followed by a space in column 10. */
-      buf[ len++ ] = ( type == AST__CONTINUE ) ? ' ' : '=';
-      buf[ len++ ] = ' ';
-
-/* Format and store the keyword value, starting at column 11 and update the
-   output string length. */
-      len += EncodeValue( this, buf + len, FITSNAMLEN + 3, digits, 
-                          method, status );
-
-/* If there is a comment, determine which column it should start in so that
-   it ends in column 80. */
-      if( com ){
-         comstart = AST__FITSCHAN_FITSCARDLEN - ( comlen - 2 ) + 1;
-
-/* Adjust the starting column to 32 if possible, avoiding over-writing
-   the value, or running off the end of the card unless this is
-   unavoidable. */
-         if ( comstart > FITSCOMCOL ) comstart = FITSCOMCOL;
-         if ( comstart < len + 1 ) comstart = len + 1;
-
-/* Pad the output buffer with spaces up to the start of the comment. */
-         while ( len < comstart - 1 ) buf[ len++ ] = ' ';
-
-/* Then append "/ " to introduce the comment, truncating if the card
-   length forces this. */
-         for ( i = 0; ( i < 2 ) && ( len < AST__FITSCHAN_FITSCARDLEN ); i++ ) {
-            buf[ len++ ] = "/ "[ i ];
-         }
-      }
-   }
-
-/* Append any comment, truncating it if the card length forces
-   this. */
-   if ( com ) {
-      for ( i = 0; com[ i ] && ( len < AST__FITSCHAN_FITSCARDLEN ); i++ ) {
-         buf[ len++ ] = com[ i ];
-      }
-   }
-
-/* Pad with spaces up to the end of the card. */      
-   while ( len < AST__FITSCHAN_FITSCARDLEN ) buf[ len++ ] = ' ';
-
-/* Terminate it. */
-   buf[ AST__FITSCHAN_FITSCARDLEN ] = 0;
-
-}
-
-static int FullForm( const char *list, const char *test, int abbrev, int *status ){
-/*
-*  Name:
-*     FullForm
-
-*  Purpose:
-*     Identify the full form of an option string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int FullForm( const char *list, const char *test, int abbrev, int *status )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function identifies a supplied test option within a supplied
-*     list of valid options, and returns the index of the option within
-*     the list. The test option may be abbreviated, and case is
-*     insignificant.
-
-*  Parameters:
-*     list
-*        A list of space separated option strings.
-*     test
-*        A candidate option string.
-*     abbrev
-*        1 if abbreviations are to be accepted. Zero otherwise.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the identified option within the supplied list, starting
-*     at zero. -1 is returned if the option is not recognised, and (if
-*     abbrev is 1 ) -2 if the option is ambiguous (no errors are reported 
-*     in these cases). If abbrev is zero, the returned index will be the
-*     index of the first matching string.
-*    
-
-*  Notes:
-*     -  A value of -1 is returned if an error has already occurred, or
-*     if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   char *context;          /* Context used by strtok_r */
-   char *llist;            /* Pointer to a local copy of the options list */
-   char *option;           /* Pointer to the start of the next option */
-   int i;                  /* Current option index */
-   int len;                /* Length of supplied option */
-   int nmatch;             /* Number of matching options */
-   int ret;                /* The returned index */
-
-/* Initialise the answer to indicate that the option has not been
-   identified. */
-   ret = -1;
-
-/* Avoid compiler warnings. */
-   context = NULL;
-
-/* Check global status. */
-   if( !astOK ) return ret;
-
-/* Take a local copy of the supplied options list. This is necessary since
-   "strtok" modified the string by inserting null characters. */
-   llist = (char *) astStore( NULL, (void *) list, strlen(list) + 1 );
-   if( astOK ){
-
-/* Save the number of characters in the supplied test option (excluding
-   trailing spaces). */
-      len = ChrLen( test, status );
-
-/* Compare the supplied test option against each of the known options in 
-   turn. Count the number of matches. */
-      nmatch = 0;
-#if HAVE_STRTOK_R
-      option = strtok_r( llist, " ", &context );
-#else
-      option = strtok( llist, " " );
-#endif
-      i = 0;
-      while( option ){
-      
-/* If every character in the supplied label matches the corresponding
-   character in the current test label we have a match. Increment the 
-   number of matches and save the current item index. If abbreviation is
-   not allowed ensure that the lengths of the strings are equal. */
-         if( !Ustrncmp( test, option, len, status ) && ( abbrev ||
-             len == ChrLen( option, status ) ) ) {
-            nmatch++;
-            ret = i;
-            if( !abbrev ) break;
-         }
-
-/* Get a pointer to the next option. */
-#if HAVE_STRTOK_R
-         option = strtok_r( NULL, " ", &context );
-#else
-         option = strtok( NULL, " " );
-#endif
-         i++;
-      }
-
-/* Return -1 if no match was found. */
-      if( !nmatch ){
-         ret = -1;
-
-/* Return -2 if the option was ambiguous. */
-      } else if( abbrev && nmatch > 1 ){
-         ret = -2;
-      }
-
-/* Free the local copy of the options list. */
-      llist = (char *) astFree( (void *) llist );
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static const char *GetAllWarnings( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetAllWarnings
-
-*  Purpose:
-*     Return a list of all condition names.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     const char *GetAllWarnings( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function returns a space separated lits of the condition names
-*     currently recognized by the Warnings attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Returned Value:
-*     A pointer to a static string holding the condition names.
-
-*  Notes:
-*     - This routine does not check the inherited status.
-
-*-
-*/
-
-/* Return the result. */
-   return ALLWARNINGS;
-
-}
-
-const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected astGetAttrib
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a FitsChan, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the FitsChan, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the FitsChan. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   const char *result;           /* Pointer value to return */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Card. */
-/* ----- */
-   if ( !strcmp( attrib, "card" ) ) {
-      ival = astGetCard( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Encoding. */
-/* --------- */
-   } else if ( !strcmp( attrib, "encoding" ) ) {
-      ival = astGetEncoding( this );
-      if ( astOK ) {
-         if( ival == NATIVE_ENCODING ){
-            result = NATIVE_STRING;
-
-         } else if( ival == FITSPC_ENCODING ){
-            result = FITSPC_STRING;
-
-         } else if( ival == FITSIRAF_ENCODING ){
-            result = FITSIRAF_STRING;
-
-         } else if( ival == FITSAIPS_ENCODING ){
-            result = FITSAIPS_STRING;
-
-         } else if( ival == FITSAIPSPP_ENCODING ){
-            result = FITSAIPSPP_STRING;
-
-         } else if( ival == FITSCLASS_ENCODING ){
-            result = FITSCLASS_STRING;
-
-         } else if( ival == FITSWCS_ENCODING ){
-            result = FITSWCS_STRING;
-
-         } else if( ival == DSS_ENCODING ){
-            result = DSS_STRING;
-
-         } else {
-            result = UNKNOWN_STRING;
-         }
-      }
-
-/* CDMatrix */
-/* -------- */
-   } else if ( !strcmp( attrib, "cdmatrix" ) ) {
-      ival = astGetCDMatrix( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* DefB1950 */
-/* -------- */
-   } else if ( !strcmp( attrib, "defb1950" ) ) {
-      ival = astGetDefB1950( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* CarLin */
-/* ------ */
-   } else if ( !strcmp( attrib, "carlin" ) ) {
-      ival = astGetCarLin( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Iwc */
-/* --- */
-   } else if ( !strcmp( attrib, "iwc" ) ) {
-      ival = astGetIwc( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Clean */
-/* ----- */
-   } else if ( !strcmp( attrib, "clean" ) ) {
-      ival = astGetClean( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* FitsDigits. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "fitsdigits" ) ) {
-      ival = astGetFitsDigits( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Ncard. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ncard" ) ) {
-      ival = astGetNcard( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* AllWarnings */
-/* ----------- */
-   } else if ( !strcmp( attrib, "allwarnings" ) ) {
-      result = astGetAllWarnings( this );
-
-/* Warnings. */
-/* -------- */
-   } else if ( !strcmp( attrib, "warnings" ) ) {
-      result = astGetWarnings( this );
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GetCard( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetCard
-
-*  Purpose:
-*     Get the value of the Card attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int astGetCard( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function returns the value of the Card attribute for the supplied 
-*     FitsChan. This is the index of the next card to be read from the
-*     FitsChan. The index of the first card is 1. If there are no more
-*     cards to be read, a value one greater than the number of cards in the
-*     FitsChan is returned. 
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Returned Value:
-*     The index of the next card to be read.
-
-*  Notes:
-*     - A value of zero will be returned if the current card is not defined.
-*     - This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Local Variables: */
-   const char *class;      /* Pointer to class string */
-   const char *method;     /* Pointer to method string */
-   FitsCard *card0;        /* Pointer to current FitsCard */
-   int index;              /* Index of next FitsCard */
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Return if no FitsChan was supplied, or if the FitsChan is empty. */
-   if ( !this || !this->head ) return 0;
-
-/* Store the method and object class. */
-   method = "astGetCard";
-   class = astGetClass( this );
-
-/* Save a pointer to the current card, and the reset the current card to
-   be the first card. */
-   card0 = this->card;
-   astClearCard( this );
-
-/* Count through the list of FitsCards in the FitsChan until the original
-   current card is reached. If the current card is not found (for instance 
-   if it has been marked as deleted and we are currently skipping such cards), 
-   this->card will be left null (end-of-file). */
-   index = 1;
-   while( this->card != card0 && astOK && this->card ){
-
-/* Increment the card count and move on to the next card. */
-      index++;
-      MoveCard( this, 1, method, class, status );
-
-   }
-
-/* Return the card index. */
-   return index;
-
-}
-
-static int GetFull( AstChannel *this_channel, int *status ) {
-/*
-*  Name:
-*     GetFull
-
-*  Purpose:
-*     Obtain the value of the Full attribute for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetFull( AstChannel *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected astGetFull
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function return the integer value of the Full attribute for
-*     a FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Full attribute value.
-
-*  Notes:
-*     - This function modifies the default Full value from 0 to -1 for
-*     the benefit of the FitsChan class. This prevents non-essential
-*     information being written by the astWrite method unless it is
-*     requested by explicitlt setting a Full value.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   int result;                   /* Result value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* If the Full attribute us set, obtain its value using the parent class
-   method. */
-   if ( astTestFull( this ) ) {
-      result = (* parent_getfull)( this_channel, status );
-
-/* Otherwise, supply a default value of -1. */
-   } else {
-      result = -1;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static FitsCard *GetLink( FitsCard *card, int next, const char *method, 
-                          const char *class, int *status ){
-/*
-*  Name:
-*     GetLink
-
-*  Purpose:
-*     Get a pointer to the next or previous card in the list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     FitsCard *GetLink( FitsCard *card, int next, const char *method, 
-*                        const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns the a pointer to either the next or previous FitsCard
-*     structure in the circular linked list of such structures stored in a
-*     FitsChan. A check is performed to ensure that the forward and 
-*     backward links from the supplied card are consistent and an error
-*     is reported if they are not (so long as no previous error has been
-*     reported). Memory corruption can result in inconsistent links
-*     which can result in infinite loops if an attempt is made to scan the
-*     list.
-
-*  Parameters:
-*     card
-*        The current card.
-*     next
-*        If non-zero, a pointer to the "next" card is returned. Otherwise
-*        a pointer to the "previous" card is returned.
-*     method
-*        Pointer to string holding the name of the calling method.
-*     class
-*        Pointer to string holding the object class.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the required card, or NULL if an error occurs.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   FitsCard *ret;               /* Pointer to the returned card */
-
-/* Check that the "next" link from the previous card points back to
-   the current card, and that the "prev" link from the next card points
-   back to the current card. */
-   if( card && ( card->prev->next != card || 
-                 card->next->prev != card ) ){
-
-/* Report an error so long as no previous error has been reported, and
-   return a NULL pointer. */
-      if( astOK ){
-         astError( AST__FCRPT, "%s(%s): A corrupted %s object has been "
-                   "supplied.", status, method, class, class );
-      }
-      ret = NULL;
-
-/* If the links are good, return a pointer to the required card. */
-   } else {
-      ret = next ? card->next : card->prev;
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int GetNcard( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetNcard
-
-*  Purpose:
-*     Get the value of the Ncard attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int astGetNcard( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function returns the value of the Ncard attribute for the supplied 
-*     FitsChan. This is the number of cards currently in the FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Returned Value:
-*     The number of cards currently in the FitsChan.
-
-*  Notes:
-*     - A value of zero will be returned if an error has already
-*     occurred, or if this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
-   const char *class;      /* Pointer to class string */
-   const char *method;     /* Pointer to method string */
-   FitsCard *card0;        /* Pointer to current card on entry */
-   int ncard;              /* Number of cards so far */
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Return zero if an error has already occurred, or no FitsChan was supplied, 
-   or the FitsChan is empty. */
-   if ( !astOK || !this || !this->head ) return 0;
-
-/* Store the method and object class. */
-   method = "astGetNcard";
-   class = astGetClass( this );
-
-/* Save a pointer to the current card, and then reset the current card to
-   be the first card. */
-   card0 = this->card;
-   astClearCard( this );
-
-/* Count through the cards in the FitsChan until the end of file is reached. */
-   ncard = 0;
-   while( astOK && this->card ){
-
-/* Increment the card count and move on to the next card. */
-      ncard++;
-      MoveCard( this, 1, method, class, status );
-
-   }
-
-/* Reset the current card to be the original current card. */
-   this->card = card0;
-
-/* Return the result. */
-   return astOK ? ncard : 0;
-
-}
-
-static void GetNextData( AstChannel *this_channel, int skip, char **name,
-                         char **val, int *status ) {
-/*
-*  Name:
-*     GetNextData
-
-*  Purpose:
-*     Read the next item of data from a data source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void GetNextData( AstChannel *this, int skip, char **name, char **val )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected
-*     astGetNextData method inherited from the Channel class).
-
-*  Description:
-*     This function reads the next item of input data from a data
-*     source associated with a FitsChan and returns the result.  It
-*     decodes the data item and returns name/value pairs ready for
-*     use.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     skip
-*        A non-zero value indicates that a new Object is to be read,
-*        and that all input data up to the next "Begin" item are to be
-*        skipped in order to locate it. This is useful if the data
-*        source contains AST objects interspersed with other data (but
-*        note that these other data cannot appear inside AST Objects,
-*        only between them).
-*
-*        A zero value indicates that all input data are significant
-*        and the next item will therefore be read and an attempt made
-*        to interpret it whatever it contains. Any other data
-*        inter-mixed with AST Objects will then result in an error.
-*     name
-*        An address at which to store a pointer to a null-terminated
-*        dynamically allocated string containing the name of the next
-*        item in the input data stream. This name will be in lower
-*        case with no surrounding white space.  It is the callers
-*        responsibilty to free the memory holding this string (using
-*        astFree) when it is no longer required.
-*
-*        A NULL pointer value will be returned (without error) to
-*        indicate when there are no further input data items to be
-*        read.
-*     val
-*        An address at which to store a pointer to a null-terminated
-*        dynamically allocated string containing the value associated
-*        with the next item in the input data stream. No case
-*        conversion is performed on this string and all white space is
-*        potentially significant.  It is the callers responsibilty to
-*        free the memory holding this string (using astFree) when it
-*        is no longer required.
-*
-*        The returned pointer will be NULL if an Object data item is
-*        read (see the "Data Representation" section).
-
-*  Data Representation:
-*     The returned data items fall into the following categories:
-*
-*     - Begin: Identified by the name string "begin", this indicates
-*     the start of an Object definition. The associated value string
-*     gives the class name of the Object being defined.
-*
-*     - IsA: Identified by the name string "isa", this indicates the
-*     end of the data associated with a particular class structure
-*     within the definiton of a larger Object. The associated value
-*     string gives the name of the class whose data have just been
-*     read.
-*
-*     - End: Identified by the name string "end", this indicates the
-*     end of the data associated with a complete Object
-*     definition. The associated value string gives the class name of
-*     the Object whose definition is being ended.
-*
-*     - Non-Object: Identified by any other name string plus a
-*     non-NULL "val" pointer, this gives the value of a non-Object
-*     structure component (instance variable). The name identifies
-*     which instance variable it is (within the context of the class
-*     whose data are being read) and the value is encoded as a string.
-*
-*     - Object: Identified by any other name string plus a NULL "val"
-*     pointer, this identifies the value of an Object structure
-*     component (instance variable).  The name identifies which
-*     instance variable it is (within the context of the class whose
-*     data are being read) and the value is given by subsequent data
-*     items (so the next item should be a "Begin" item).
-
-*  Notes:
-*     - NULL pointer values will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 100             /* Length of formatting buffer */
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   char *keyword;                /* Pointer to current keyword string */
-   char *newdata;                /* Pointer to stripped string value */
-   char *upq;                    /* Pointer to unprequoted string */
-   char buff[ BUFF_LEN + 1 ];    /* Buffer for formatting values */
-   const char *class;            /* Pointer to object class */
-   const char *method;           /* Pointer to method name */
-   int cont;                     /* String ends with an ampersand? */
-   int done;                     /* Data item found? */
-   int freedata;                 /* Should the data pointer be freed? */
-   int i;                        /* Loop counter for keyword characters */
-   int len;                      /* Length of current keyword */
-   int nc;                       /* Number of characters read by "astSscanf" */
-   int nn;                       /* No. of characters after UnPreQuoting */
-   int type;                     /* Data type code */
-   void *data;                   /* Pointer to current data value */
-
-/* Initialise the returned pointer values. */
-   *name = NULL;
-   *val = NULL;
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Store the method name and object class. */
-   method = "astRead";
-   class = astGetClass( this );
-
-/* Loop to consider successive cards stored in the FitsChan (starting
-   at the "current" card) until a valid data item is read or "end of
-   file" is reached. Also quit the loop if an error occurs. */
-   done = 0;
-   newdata = NULL;
-   while ( !done && !astFitsEof( this ) && astOK ){
-
-/* Obtain the keyword string, data type code and data value pointer
-   from the current card. */
-      keyword = CardName( this, status );
-      type = CardType( this, status );
-      data = CardData( this, NULL, status );
-
-/* Mark all cards as having been used unless we are skipping over cards which
-   may not be related to AST. */
-      if( !skip ) MarkCard( this, status );
-
-/* Ignore comment cards. */
-      if ( type != AST__COMMENT ) {
-
-/* Native encoding requires trailing white space to be removed from
-   string values (so that null strings can be distinguished from blank
-   strings). Do this now. */
-         freedata = 0;
-         if ( ( type == AST__STRING || type == AST__CONTINUE ) && data ){
-            newdata = (char *) astStore( NULL, data, strlen( (char *) data ) + 1 );
-            if( newdata ){
-               newdata[ ChrLen( data, status ) ] = 0;            
-               data = (void *) newdata;
-               freedata = 1;
-            }
-         }
-/* Obtain the keyword length and test the card to identify the type of
-   AST data item (if any) that it represents. */
-         len = (int) strlen( keyword );
-
-/* "Begin" item. */
-/* ------------- */
-/* This is identified by a string value and a keyword of the form
-   "BEGASTxx", where "xx" are characters encoding a sequence
-   number. */
-         if ( ( type == AST__STRING ) &&
-              ( nc = 0,
-                ( 0 == astSscanf( keyword, "BEGAST"
-                                        "%*1[" SEQ_CHARS "]"
-                                        "%*1[" SEQ_CHARS "]%n", &nc ) )
-                && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-            done = 1;
-
-/* Set the returned name to "begin" and extract the associated class
-   name from the string value. Store both of these in dynamically
-   allocated strings. */
-            *name = astString( "begin", 5 );
-            *val = UnPreQuote( (const char *) data, status );
-
-/* Indicate that the current card has been used. */
-            MarkCard( this, status );
-
-/* The "begin" item will be preceded by a header of COMMENT cards. Mark
-   them as having been used. */
-            ComBlock( this, -1, method, class, status );
-
-/* "IsA" item. */
-/* ----------- */
-/* This is identified by a string value and a keyword of the form
-   "ISAxx", where "xx" are characters encoding a sequence
-   number. Don't accept the item if we are skipping over cards looking
-   for a "Begin" item. */
-         } else if ( !skip &&
-                     ( type == AST__STRING ) &&
-                     ( nc = 0,
-                       ( 0 == astSscanf( keyword,
-                                      "ISA"
-                                      "%*1[" SEQ_CHARS "]"
-                                      "%*1[" SEQ_CHARS "]%n", &nc ) )
-                       && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-            done = 1;
-
-/* Set the returned name to "isa" and extract the associated class
-   name from the string value. Store both of these in dynamically
-   allocated strings. */
-            *name = astString( "isa", 3 );
-            *val = UnPreQuote( (const char *) data, status );
-
-/* "End" item. */
-/* ----------- */
-/* This is identified by a string value and a keyword of the form
-   "ENDASTxx", where "xx" are characters encoding a sequence
-   number. Don't accept the item if we are skipping over cards looking
-   for a "Begin" item. */
-         } else if ( !skip &&
-                     ( type == AST__STRING ) &&
-                     ( nc = 0,
-                       ( 0 == astSscanf( keyword,
-                                      "ENDAST"
-                                      "%*1[" SEQ_CHARS "]"
-                                      "%*1[" SEQ_CHARS "]%n", &nc ) )
-                       && ( nc >= len ) ) ) {
-
-/* Note we have found a data item. */
-            done = 1;
-
-/* Set the returned name to "end" and extract the associated class
-   name from the string value. Store both of these in dynamically
-   allocated strings. */
-            *name = astString( "end", 3 );
-            *val = UnPreQuote( (const char *) data, status );
-
-/* The "end" item eill be followed by a footer of COMMENT cards. Mark
-   these cards as having been used. */
-            ComBlock( this, 1, method, class, status );
-
-/* Object or data item. */
-/* -------------------- */
-/* These are identified by a string, int, or double value, and a
-   keyword ending in two characters encoding a sequence number. Don't
-   accept the item if we are skipping over cards looking for a "Begin"
-   item. */
-         } else if ( !skip &&
-                     ( ( type == AST__STRING ) ||
-                       ( type == AST__INT ) ||
-                       ( type == AST__FLOAT ) ) &&
-                     ( len > 2 ) &&
-                     strchr( SEQ_CHARS, keyword[ len - 1 ] ) &&
-                     strchr( SEQ_CHARS, keyword[ len - 2 ] ) ) {
-
-/* Note we have found a data item. */
-            done = 1;
-
-/* Set the returned name by removing the last two characters from the
-   keyword and converting to lower case. Store this in a dynamically
-   allocated string. */
-            *name = astString( keyword, len - 2 );
-            for ( i = 0; ( *name )[ i ]; i++ ) {
-               ( *name )[ i ] = tolower( ( *name )[ i ] );
-            }
-
-/* Classify the data type. */
-            switch ( type ) {
-
-/* If the value is a string, test if it is zero-length. If so, this
-   "null" value indicates an Object data item (whose definition
-   follows), so leave the returned value pointer as NULL. Otherwise,
-   we have a string data item, so extract its value and store it in a
-   dynamically allocated string. */
-            case AST__STRING:
-               if ( *( (char *) data ) ) {
-
-/* A long string value may be continued on subsequent CONTINUE cards. See
-   if the current string may be continued. This is the case if the final
-   non-blank character (before UnPreQuoting) is an ampersand. */
-                  cont = ( ((char *) data)[ ChrLen( data, status ) - 1 ] == '&' );
-
-/* If the string does not end with an ampersand, just UnPreQUote it and
-   return a copy. */
-                  if( !cont ) {
-                     *val = UnPreQuote( (const char *) data, status );
-
-/* Otherwise, initialise the returned string to hold a copy of the keyword 
-   value. */
-                  } else {
-                     nc = strlen( (const char *) data );
-                     *val = astStore( NULL, (const char *) data, nc + 1 );
-
-/* Loop round reading any subsequent CONTINUE cards. Leave the loop when
-   the end-of-file is hit, or an error occurs. */
-                     while( cont && MoveCard( this, 1, method, class, status ) &&
-                            astOK ){
-
-/* See if this is a CONTINUE card. If so, get its data pointer. */
-                        if( CardType( this, status ) == AST__CONTINUE ){
-                           data = CardData( this, NULL, status );
-
-/* See if the CONTINUE card ends with an ampersand (i.e. if there is
-   a possibility of there being any remaining CONTINUE cards). */
-                           cont = ( ( (char *) data)[ ChrLen( data, status ) - 1 ] == '&' );
-
-/* UnPreQUote it. */
-                           upq = UnPreQuote( (const char *) data, status );
-                           if( !astOK ) break;
-
-/* Expand the memory for the returned string to hold the new string. */
-                           nn = strlen( upq );
-                           *val = astRealloc( *val, nc + nn );
-                           if( !astOK ) break;
-                           
-/* Copy the new string into the expanded memory, so that the first
-   character of the new string over-writes the trailing ampersand 
-   currently in the buffer. */
-                           strcpy( *val + nc - 1, upq );
-
-/* Release the memory holding the UnPreQUoted string . */
-                           upq = astFree( upq );
-
-/* Update the current length of the returned string. */
-                           nc += nn - 1;
-
-/* Mark the current card as having been read. */
-                           MarkCard( this, status );
-
-/* Report an error if this is not a CONTINUE card. */
-                        } else {
-                           astError( AST__BADIN, "%s(%s): One or more "
-                                     "FITS \"CONTINUE\" cards are missing "
-                                     "after the card for keyword \"%s\".", status,
-                                     method, class, keyword );
-                        }
-                     }
-                  }
-               }
-               break;
-
-/* If the value is an int, format it and store the result in a
-   dynamically allocated string. */
-            case AST__INT:
-               (void) sprintf( buff, "%d", *( (int *) data ) );
-               *val = astString( buff, (int) strlen( buff ) );
-               break;
-
-/* If the value is a double, format it and store the result in a
-   dynamically allocated string. */
-            case AST__FLOAT:
-               (void) sprintf( buff, "%.*g", DBL_DIG, *( (double *) data ) );
-               CheckZero( buff,  *( (double *) data ), 0, status );
-               *val = astString( buff, (int) strlen( buff ) );
-               break;
-            }
-
-/* Anything else. */
-/* -------------- */
-/* If the input line didn't match any of the above and the "skip" flag
-   is not set, then report an error.. */
-         } else if ( !skip ) {
-            astError( AST__BADIN,
-                      "%s(%s): Cannot interpret the input data given by "
-                      "FITS keyword \"%s\".", status, method, class, keyword );
-         }
-
-/* Free any memory used to hold stripped string data. */
-         if( freedata ) newdata = (char *) astFree( (void *) newdata );
-
-      }
-
-/* Increment the current card. */
-      MoveCard( this, 1, method, class, status );
-   }
-
-/* If an error occurred, ensure that any allocated memory is freed and
-   that NULL pointer values are returned. */
-   if ( !astOK ) {
-      *name = astFree( *name );
-      *val = astFree( *val );
-   }
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static int GetSkip( AstChannel *this_channel, int *status ) {
-/*
-*  Name:
-*     GetSkip
-
-*  Purpose:
-*     Obtain the value of the Skip attribute for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int GetSkip( AstChannel *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected astGetSkip
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function return the (boolean) integer value of the Skip
-*     attribute for a FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Skip attribute value.
-
-*  Notes:
-*     - This function modifies the default Skip value from 0 to 1 for
-*     the benefit of the FitsChan class. This default value allows the
-*     astRead method to skip over unrelated FITS keywords when
-*     searching for the next Object to read.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   int result;                   /* Result value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* If the Skip attribute us set, obtain its value using the parent class
-   method. */
-   if ( astTestSkip( this ) ) {
-      result = (* parent_getskip)( this_channel, status );
-
-/* Otherwise, supply a default value of 1. */
-   } else {
-      result = 1;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetValue( AstFitsChan *this, const char *keyname, int type, 
-                     void *value, int report, int mark, const char *method, 
-                     const char *class, int *status ){
-/*
-*  Name:
-*     GetValue
-
-*  Purpose:
-*     Obtain a FITS keyword value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int GetValue( AstFitsChan *this, const char *keyname, int type, void *value, 
-*                   int report, int mark, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function gets a value for the specified keyword from the
-*     supplied FitsChan, and stores it in the supplied buffer. Optionally, 
-*     the keyword is marked as having been read into an AST object so that 
-*     it is not written out when the FitsChan is deleted.
-
-*  Parameters:
-*     this
-*        A pointer to the FitsChan containing the keyword values to be
-*        read.
-*     keyname
-*        A pointer to a string holding the keyword name.
-*     type
-*        The FITS data type in which to return the keyword value. If the
-*        stored value is not of the requested type, it is converted if
-*        possible. 
-*     value
-*        A pointer to a buffer of suitable size to receive the keyword
-*        value. The supplied value is left unchanged if the keyword is
-*        not found.
-*     report
-*        Should an error be reported if the keyword cannot be found, or
-*        cannot be converted to the requested type?
-*     mark 
-*        Should the card be marked as having been used?
-*     method
-*        A string holding the name of the calling method.
-*     class
-*        A string holding the object class.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the keyword does not exist in "this", or cannot be
-*     converted to the requested type. One is returned otherwise.
-
-*  Notes:
-*     - An error is reported if the keyword value is undefined.
-*     - A value of zero is returned if an error has already occurred,
-*     or if an error occurs within this function.
-
-*/
-
-/* Local Variables: */
-   int ret;                           /* Returned value */
-
-/* Check the status */
-   if( !astOK ) return 0;
-
-/* Attempt to find the supplied keyword. */
-   ret = SearchCard( this, keyname, method, class, status );
-
-/* If the keyword was found, convert the current card's data value and copy 
-   it to the supplied buffer. */
-   if( ret ){
-      if( CnvValue( this, type, 0, value, method, status ) ) {
-
-/* If required, mark it as having been read into an AST object. */
-         if( mark ) MarkCard( this, status );
-
-/* If the value is undefined, report an error if "report" is non-zero. */
-         if( type == AST__UNDEF && report && astOK ) {
-            ret = 0;
-            astError( AST__FUNDEF, "%s(%s): FITS keyword \"%s\" has no value.",
-                      status, method, class, keyname );
-         }
-    
-/* If the value could not be converted to the requested data, type report
-   an error if reporting is enabled. */
-      } else {
-         ret = 0;
-         if( report && astOK ){
-            astError( AST__FTCNV, "%s(%s): Cannot convert FITS keyword '%s' to %s.", 
-                      status, method, class, keyname, type_names[ type ] ); 
-         }
-      }
-
-/* If the keyword was not found, report an error if "report" is non-zero. */
-   } else if( report && astOK ){
-      astError( AST__BDFTS, "%s(%s): Unable to find a value for FITS "
-                "keyword \"%s\".", status, method, class, keyname );
-   }
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int GetValue2( AstFitsChan *this1, AstFitsChan *this2, const char *keyname, 
-                      int type, void *value, int report, const char *method, 
-                      const char *class, int *status ){
-/*
-*  Name:
-*     GetValue2
-
-*  Purpose:
-*     Obtain a FITS keyword value from one of two FitsChans.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int GetValue2( AstFitsChan *this1, AstFitsChan *this2, const char *keyname, 
-*                    int type, void *value, int report, const char *method, 
-*                    const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function attempts to get a value for the specified keyword from 
-*     the first supplied FitsChan. If this fails (due to the FitsChan not
-*     containing a value for the ketword) then an attempt is made to get
-*     a value for the keyword from the second supplied FitsChan.
-
-*  Parameters:
-*     this1
-*        A pointer to the first FitsChan to be used.
-*     this2
-*        A pointer to the second FitsChan to be used.
-*     keyname
-*        A pointer to a string holding the keyword name.
-*     type
-*        The FITS data type in which to return the keyword value. If the
-*        stored value is not of the requested type, it is converted if
-*        possible. 
-*     value
-*        A pointer to a buffer of suitable size to receive the keyword
-*        value. The supplied value is left unchanged if the keyword is
-*        not found.
-*     report
-*        Should an error be reported if the keyword cannot be found, or
-*        cannot be converted to the requested type?
-*     method
-*        A string holding the name of the calling method.
-*     class
-*        A string holding the object class.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the keyword does not exist in either FitsChan, or cannot be
-*     converted to the requested type. One is returned otherwise.
-
-*  Notes:
-*     -  A value of zero is returned if an error has already occurred,
-*     or if an error occurs within this function.
-*     -  If the card is found in the first FitsChan, it is not marked as
-*     having been used. If the card is found in the second FitsChan, it is 
-*     marked as having been used.
-
-*/
-
-/* Local Variables: */
-   int ret;                           /* Returned value */
-
-/* Check the status */
-   if( !astOK ) return 0;
-
-/* Try the first FitsChan. If this fails try the second. Do not report
-   an error if the keyword is not found in the first FitsChan (this will
-   be done, if required, once the second FitsChan has been searched). */
-   ret = GetValue( this1, keyname, type, value, 0, 0, method, class, status );
-   if( ! ret ) {
-      ret = GetValue( this2, keyname, type, value, report, 1, method, class, status );
-   }
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int HasAIPSSpecAxis( AstFitsChan *this, const char *method, 
-                            const char *class, int *status ){
-/*
-*  Name:
-*     HasAIPSSpecAxis
-
-*  Purpose:
-*     Does the FitsChan contain an AIPS spectral CTYPE keyword?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int HasAIPSSpecAxis( AstFitsChan *this, const char *method, 
-*                          const char *class, int *status  )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function returns a non-zero value if the FitsCHan contains a
-*     CTYPE value which conforms to the non-standard system used by AIPS.
-
-*  Parameters:
-*     this
-*        A pointer to the FitsChan to be used.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if an AIPS spectral CTYPE keyword was found.
-
-*/
-
-/* Local Variables: */
-   char *assys;                   /* AIPS standard of rest type */
-   char *astype;                  /* AIPS spectral type */
-   char *cval;                    /* Pointer to character string */
-   int j;                         /* Current axis index */
-   int jhi;                       /* Highest axis index with a CTYPE */
-   int jlo;                       /* Lowest axis index with a CTYPE */
-   int ret;                       /* Returned value */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the status */
-   if( !astOK ) return ret;
-
-/* If the FitsChan contains any CTYPE values, convert the bounds from
-   one-based to zero-based, and loop round them all. */   
-   if( astKeyFields( this, "CTYPE%1d", 1, &jhi, &jlo ) ) {
-      jlo--;
-      jhi--;
-      for( j = jlo; j <= jhi; j++ ) {
-
-/* Get the next CTYPE value. If found, see if it is an AIPS spectral
-   CTYPE value. */
-         if( GetValue( this, FormatKey( "CTYPE", j + 1, -1, ' ', status ),
-                       AST__STRING, (void *) &cval, 0, 0, method, 
-                       class, status ) ){
-            if( IsAIPSSpectral( cval, &astype, &assys, status ) ) {
-               ret = 1;
-               break;
-            }
-         }
-      }
-   }
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int HasCard( AstFitsChan *this, const char *name, 
-                    const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     HasCard
-
-*  Purpose:
-*     Check if the FitsChan contains a specified keyword.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int HasCard( AstFitsChan *this, const char *name, 
-*                  const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns a non-zero value if the FitsChan contains the given keyword,
-*     and zero otherwise. The current card is unchanged.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a string holding the keyword name.
-*     method
-*        Pointer to string holding name of calling method.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if a card was found refering to the given
-*     keyword. Otherwise zero is returned.
-
-*/
-
-/* Check the supplied pointers (we can rely on astMapHasKey to check the
-   inherited status). */
-   if( !name || !this || !this->keywords ) return 0;
-
-/* Search the KeyMap holding the keywords currently in the FitsChan,
-   returning non-zero if the keyword was found. A KeyMap is used because
-   it uses a hashing algorithm to find the entries and is therefore a lot
-   quicker than searching through the list of linked FitsCards. */
-   return astMapHasKey( this->keywords, name );
-
-}
-
-void astInitFitsChanVtab_(  AstFitsChanVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFitsChanVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a FitsChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void astInitFitsChanVtab( AstFitsChanVtab *vtab, const char *name )
-
-*  Class Membership:
-*     FitsChan vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the FitsChan class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstChannelVtab *channel;      /* Pointer to Channel component of Vtab */
-   char buf[ 100 ];              /* Buffer large enough to store formatted INT_MAX */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitChannelVtab( (AstChannelVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAFitsChan) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstChannelVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->PutCards = PutCards;   
-   vtab->PutFits = PutFits;   
-   vtab->DelFits = DelFits;   
-   vtab->PurgeWCS = PurgeWCS;
-   vtab->RetainFits = RetainFits;   
-   vtab->FindFits = FindFits;   
-   vtab->KeyFields = KeyFields;
-   vtab->Empty = Empty;
-   vtab->FitsEof = FitsEof;
-   vtab->GetFitsCF = GetFitsCF;
-   vtab->GetFitsCI = GetFitsCI;
-   vtab->GetFitsF = GetFitsF;
-   vtab->GetFitsI = GetFitsI;
-   vtab->GetFitsL = GetFitsL;
-   vtab->TestFits = TestFits;
-   vtab->GetFitsS = GetFitsS;
-   vtab->GetFitsCN = GetFitsCN;
-   vtab->FitsGetCom = FitsGetCom;
-   vtab->SetFitsCom = SetFitsCom;
-   vtab->SetFitsCF = SetFitsCF;
-   vtab->SetFitsCI = SetFitsCI;
-   vtab->SetFitsF = SetFitsF;
-   vtab->SetFitsI = SetFitsI;
-   vtab->SetFitsL = SetFitsL;
-   vtab->SetFitsU = SetFitsU;
-   vtab->SetFitsS = SetFitsS;
-   vtab->SetFitsCN = SetFitsCN;
-   vtab->SetFitsCM = SetFitsCM;
-   vtab->ClearCard = ClearCard;
-   vtab->TestCard = TestCard;
-   vtab->SetCard = SetCard;
-   vtab->GetCard = GetCard;
-   vtab->ClearFitsDigits = ClearFitsDigits;
-   vtab->TestFitsDigits = TestFitsDigits;
-   vtab->SetFitsDigits = SetFitsDigits;
-   vtab->GetFitsDigits = GetFitsDigits;
-   vtab->ClearDefB1950 = ClearDefB1950;
-   vtab->TestDefB1950 = TestDefB1950;
-   vtab->SetDefB1950 = SetDefB1950;
-   vtab->GetDefB1950 = GetDefB1950;
-   vtab->ClearCarLin = ClearCarLin;
-   vtab->TestCarLin = TestCarLin;
-   vtab->SetCarLin = SetCarLin;
-   vtab->GetCarLin = GetCarLin;
-   vtab->ClearIwc = ClearIwc;
-   vtab->TestIwc = TestIwc;
-   vtab->SetIwc = SetIwc;
-   vtab->GetIwc = GetIwc;
-   vtab->ClearWarnings = ClearWarnings;
-   vtab->TestWarnings = TestWarnings;
-   vtab->SetWarnings = SetWarnings;
-   vtab->GetWarnings = GetWarnings;
-   vtab->GetNcard = GetNcard;
-   vtab->GetAllWarnings = GetAllWarnings;
-   vtab->ClearEncoding = ClearEncoding;
-   vtab->TestEncoding = TestEncoding;
-   vtab->SetEncoding = SetEncoding;
-   vtab->GetEncoding = GetEncoding;
-   vtab->ClearClean = ClearClean;
-   vtab->TestClean = TestClean;
-   vtab->SetClean = SetClean;
-   vtab->GetClean = GetClean;
-   vtab->ClearCDMatrix = ClearCDMatrix;
-   vtab->TestCDMatrix = TestCDMatrix;
-   vtab->SetCDMatrix = SetCDMatrix;
-   vtab->GetCDMatrix = GetCDMatrix;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   channel = (AstChannelVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
- 
-   parent_write = channel->Write;
-   channel->Write = Write;
-   parent_read = channel->Read;
-   channel->Read = Read;
-   parent_getskip = channel->GetSkip;
-   channel->GetSkip = GetSkip;
-   parent_getfull = channel->GetFull;
-   channel->GetFull = GetFull;
-
-   channel->WriteBegin = WriteBegin;
-   channel->WriteIsA = WriteIsA;
-   channel->WriteEnd = WriteEnd;
-   channel->WriteInt = WriteInt;
-   channel->WriteDouble = WriteDouble;
-   channel->WriteString = WriteString;
-   channel->WriteObject = WriteObject;
-   channel->GetNextData = GetNextData;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetDump( vtab, Dump, "FitsChan", "I/O channels to FITS files" );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* Max number of characters needed to format an int. */
-   LOCK_MUTEX4
-   sprintf( buf, "%d", INT_MAX );
-   int_dig = strlen( buf );
-
-/* Create a pair of MJD TimeFrames which will be used for converting to and 
-   from TDB. */
-   astBeginPM;
-   tdbframe = astTimeFrame( "system=MJD,timescale=TDB", status );
-   timeframe = astTimeFrame( "system=MJD", status );
-   astEndPM;
-
-   UNLOCK_MUTEX4
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void InsCard( AstFitsChan *this, int overwrite, const char *name, 
-                     int type, void *data, const char *comment, 
-                     const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     InsCard
-
-*  Purpose:
-*     Inserts a card into a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void InsCard( AstFitsChan *this, int overwrite, const char *name, 
-*                   int type, void *data, const char *comment, 
-*                   const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Either appends a new card to a FitsChan, or over-writes an existing 
-*     card, holding the supplied keyword name, value and comment. 
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the filters to apply to the
-*        keyword name. If a NULL pointer is supplied, no filtering is applied.
-*     overwrite
-*        If non-zero, the new card over-writes the current card given by 
-*        the "Card" attribute, and the current card is incremented so
-*        that it refers to the next card. Otherwise, the new card is 
-*        inserted in front of the current card and the current card is
-*        left unchanged.
-*     name
-*        Pointer to a string holding the keyword name of the new card.
-*     type
-*        An integer value representing the data type of the keyword.
-*     data
-*        Pointer to the data associated with the keyword. 
-*     comment
-*        Pointer to a null-terminated string holding a comment.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  An error is reported if an attempt is made to change the data type 
-*     of an existing card.
-*     -  If a type of AST__COMMENT is supplied, then any data value (of any 
-*     type) associated with an existing card is left unchanged.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS     /* Declare the thread specific global data */
-   int flags;             /* Flags to assign to new card */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* If the current card is to be over-written, delete the current card (the 
-   next card in the list, if any, will become the new current card). */
-   if( overwrite ) DeleteCard( this, method, class, status );
-
-/* If requested, set both NEW flags for the new card. */
-   flags = ( mark_new ) ? ( NEW1 | NEW2 ): 0;
-
-/* Insert the new card into the list, just before the current card. */
-   NewCard( this, name, type, data, comment, flags, status );
-
-}
-
-static int IRAFFromStore( AstFitsChan *this, FitsStore *store, 
-                          const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     IRAFFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using FITS-IRAF encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int IRAFFromStore( AstFitsChan *this, FitsStore *store, 
-*                        const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using FITS-IRAF encoding.
-*
-*     IRAF encoding is like FITS-WCS encoding but with the following
-*     restrictions:
-*
-*     1) The celestial projection must not have any projection parameters
-*     which are not set to their default values. The one exception to this 
-*     is that SIN projections are acceptable if the associated projection 
-*     parameter PV<axlat>_1 is zero and PV<axlat>_2 = cot( reference point 
-*     latitude). This is encoded using the string "-NCP". The SFL projection 
-*     is encoded using the string "-GLS". Note, the original IRAF WCS
-*     system only recognised a small subset of the currently available
-*     projections, but some more recent IRAF-like software recognizes some 
-*     of the new projections included in the FITS-WCS encoding.
-*
-*     2) The celestial axes must be RA/DEC, galactic or ecliptic.   
-*
-*     3) LONPOLE and LATPOLE cannot be used. 
-*
-*     4) Only primary axis descriptions are written out.
-*
-*     5) RADECSYS is used in place of RADESYS.
-*     
-*     6) PC/CDELT keywords are not allowed (CD must be used)
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   char *comm;         /* Pointer to comment string */
-   char *cval;         /* Pointer to string keyword value */
-   char combuf[80];    /* Buffer for FITS card comment */
-   char lattype[MXCTYPELEN];/* Latitude axis CTYPE */
-   char lontype[MXCTYPELEN];/* Longitude axis CTYPE */
-   char s;             /* Co-ordinate version character */
-   char sign[2];       /* Fraction's sign character */
-   double cdelt;       /* A CDELT value */
-   double fd;          /* Fraction of a day */
-   double mjd99;       /* MJD at start of 1999 */
-   double p1, p2;      /* Projection parameters */
-   double val;         /* General purpose value */
-   int axlat;          /* Index of latitude FITS WCS axis */
-   int axlon;          /* Index of longitude FITS WCS axis */
-   int axspec;         /* Index of spectral FITS WCS axis */
-   int i;              /* Axis index */
-   int ihmsf[ 4 ];     /* Hour, minute, second, fractional second */
-   int iymdf[ 4 ];     /* Year, month, date, fractional day */
-   int j;              /* Axis index */
-   int jj;             /* SlaLib status */
-   int naxis;          /* No. of axes */
-   int ok;             /* Is FitsSTore OK for IRAF encoding? */
-   int prj;            /* Projection type */
-   int ret;            /* Returned value. */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* First check that the values in the FitsStore conform to the
-   requirements of the IRAF encoding. Assume they do to begin with. */
-   ok = 1;
-
-/* Just do primary axes. */
-   s = ' '; 
-
-/* Look for the primary celestial and spectral axes. */
-   FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
-   if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CTYPE values for both axes. */
-      cval = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
-      if( !cval ) return ret;
-      strcpy( lontype, cval );
-
-      cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-      if( !cval ) return ret;
-      strcpy( lattype, cval );
-
-/* Extract the projection type as specified by the last 4 characters 
-   in the CTYPE keyword value. */
-      prj = astWcsPrjType( lattype + 4 );
-
-/* Check the projection type is OK. Assume not initially. */
-      ok = 0;
-
-/* FITS-IRAF cannot handle the AST-specific TPN projection. */
-      if( prj == AST__TPN ) {
-         ok = 0;
-
-/* SIN projections are handled later. */
-      } else if( prj != AST__SIN ){
-   
-/* There must be no projection parameters. */
-         if( GetMaxJM( &(store->pv), ' ', status ) == -1 ) ok = 1;
-
-/* Change the new SFL projection code to to the older equivalent GLS */
-         if( prj == AST__SFL ){
-            (void) strcpy( lontype + 4, "-GLS" );
-            (void) strcpy( lattype + 4, "-GLS" );
-         }
-
-/* SIN projections are only acceptable if the associated projection
-   parameters are both zero, or if the first is zero and the second 
-   = cot( reference point latitude )  (the latter case is equivalent to 
-   the old NCP projection). */
-      } else {
-         p1 = GetItem( &( store->pv ), axlat, 1, s, NULL, method, class, status );
-         p2 = GetItem( &( store->pv ), axlat, 2, s, NULL, method, class, status );
-         if( p1 == AST__BAD ) p1 = 0.0;   
-         if( p2 == AST__BAD ) p2 = 0.0;   
-
-         val = GetItem( &( store->crval ), axlat, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) {
-            if( p1 == 0.0 ) {
-               if( p2 == 0.0 ) {
-                  ok = 1;
-      
-               } else if( fabs( p2 ) >= 1.0E14 && val == 0.0 ){
-                  ok = 1;
-                  (void) strcpy( lontype + 4, "-NCP" );
-                  (void) strcpy( lattype + 4, "-NCP" );
-      
-               } else if( fabs( p2*tan( AST__DD2R*val ) - 1.0 ) 
-                          < 0.01 ){
-                  ok = 1;
-                  (void) strcpy( lontype + 4, "-NCP" );
-                  (void) strcpy( lattype + 4, "-NCP" );
-               }
-            }
-         }
-      }
-
-/* Identify the celestial coordinate system from the first 4 characters of the
-   longitude CTYPE value. Only RA, galactic longitude, and ecliptic
-   longitude can be stored using FITS-IRAF. */
-      if( strncmp( lontype, "RA--", 4 ) &&
-          strncmp( lontype, "GLON", 4 ) &&
-          strncmp( lontype, "ELON", 4 ) ) ok = 0;
-
-/* If the physical Frame requires a LONPOLE or LATPOLE keyword, it cannot
-   be encoded using FITS-IRAF. */
-      if( GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status )
-          != AST__BAD || 
-          GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status )
-          != AST__BAD ) ok = 0;
-
-/* If there are no celestial axes, the physical Frame can be written out
-   using FITS-IRAF. */
-   } else {
-      ok = 1;
-   }
-
-/* Save the number of axes */
-   naxis = GetMaxJM( &(store->crpix), ' ', status ) + 1;
-
-/* If this is different to the value of NAXIS abort since this encoding
-   does not support WCSAXES keyword. */
-   if( naxis != store->naxis ) ok = 0;
-
-/* Return if the FitsStore does not conform to IRAF encoding. */
-   if( !ok ) return ret;
-
-/* Get and save CRPIX for all pixel axes. These are required, so return
-   if they are not available. */
-   for( i = 0; i < naxis; i++ ){
-      val = GetItem( &(store->crpix), 0, i, s, NULL, method, class, status );
-      if( val == AST__BAD ) return ret;
-      sprintf( combuf, "Reference pixel on axis %d", i + 1 );
-      SetValue( this, FormatKey( "CRPIX", i + 1, -1, s, status ), &val, AST__FLOAT, 
-                combuf, status );
-   }
-
-/* Get and save CRVAL for all intermediate axes. These are required, so return
-   if they are not available. */
-   for( j = 0; j < naxis; j++ ){
-      val = GetItem( &(store->crval), j, 0, s, NULL, method, class, status );
-      if( val == AST__BAD ) return ret;
-      sprintf( combuf, "Value at ref. pixel on axis %d", j + 1 );
-      SetValue( this, FormatKey( "CRVAL", j + 1, -1, s, status ), &val, AST__FLOAT, 
-                combuf, status );
-   }
-
-/* Get and save CTYPE for all intermediate axes. These are required, so return
-   if they are not available. Use the potentially modified versions saved
-   above for the celestial axes. */
-   for( i = 0; i < naxis; i++ ){
-      if( i == axlat ) {
-         cval = lattype;
-      } else if( i == axlon ) {
-         cval = lontype;
-      } else {
-         cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-         if( !cval ) return ret;
-      }
-      comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-      if( !comm ) {            
-         sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
-         comm = combuf;
-      }
-      SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, AST__STRING, 
-                comm, status );
-   }
-
-/* CD matrix (the product of the CDELT and PC matrices). */
-   for( i = 0; i < naxis; i++ ){
-      cdelt = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-      if( cdelt == AST__BAD ) cdelt = 1.0;
-
-      for( j = 0; j < naxis; j++ ){
-         val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-         if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
-         val *= cdelt;
-
-         if( val != 0.0 ) {
-             SetValue( this, FormatKey( "CD", i + 1, j + 1, s, status ), &val, 
-                       AST__FLOAT, "Transformation matrix element", status );
-         }
-      }
-   }
-
-/* Get and save CUNIT for all intermediate axes. These are NOT required, so 
-   do not return if they are not available. */
-   for( i = 0; i < naxis; i++ ){
-      cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-      if( cval ) {
-         sprintf( combuf, "Units for axis %d", i + 1 );
-         SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING, 
-                   combuf, status );
-      }
-   }
-
-/* Get and save RADECSYS. This is NOT required, so do not return if it is 
-   not available. */
-   cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-   if( cval ) SetValue( this, "RADECSYS", &cval, AST__STRING, 
-                        "Reference frame for RA/DEC values", status );
-
-/* Reference equinox */
-   val = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-   if( val != AST__BAD ) SetValue( this, "EQUINOX", &val, AST__FLOAT, 
-                                   "Epoch of reference equinox", status );
-
-/* Date of observation */
-   val = GetItem( &(store->mjdobs), 0, 0, ' ', NULL, method, class, status );
-   if( val != AST__BAD ) {
-
-/* The format used for the DATE-OBS keyword depends on the value of the
-   keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
-   Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
-      palSlaCaldj( 99, 1, 1, &mjd99, &jj );
-      if( val < mjd99 ) {
-
-         palSlaDjcal( 0, val, iymdf, &jj );
-         sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ], 
-                  iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) ); 
-
-      } else {
-
-         palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
-         palSlaDd2tf( 3, fd, sign, ihmsf );
-         sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
-                  iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
-                  ihmsf[2], ihmsf[3] ); 
-      }
-
-/* Now store the formatted string in the FitsChan. */
-      cval = combuf;
-      SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
-                "Date of observation", status );
-   }
-
-/* If we get here we have succeeded. */
-   ret = 1;
-
-/* Return zero or ret depending on whether an error has occurred. */
-   return astOK ? ret : 0;
-}
-
-static int IsMapLinear( AstMapping *map, const double lbnd_in[], 
-                        const double ubnd_in[], int coord_out, int *status ) {
-/*
-*  Name:
-*     IsMapLinear
-
-*  Purpose:
-*     See if a specified Mapping output is linearly related to the
-*     Mapping inputs.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int IsMapLinear( AstMapping *map, const double lbnd_in[], 
-*                      const double ubnd_in[], int coord_out, int *status ) 
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns a flag indicating if the specified output of the supplied 
-*     Mapping is a linear function of the Mapping inputs. A set of output
-*     positions are created which are evenly spaced along the specified
-*     output coordinate. The spacing is chosen so that the entire range
-*     of the output coordinate is covered in 20 steps. The other output
-*     coordinates are held fixed at arbitrary values (actually, values
-*     at which the specified output coordinate achieves its minimum value).
-*     This set of output positions is transformed into the corresponding
-*     set of input coordinates using the inverse of the supplied Mapping.
-*     A least squares linear fit is then made which models each input 
-*     coordinate as a linear function of the specified output coordinate.
-*     The residual at every point in this fit must be less than some
-*     small fraction of the total range of the corresponding input
-*     coordinate for the Mapping to be considered linear.
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping.
-*     lbnd_in
-*        Pointer to an array of double, with one element for each
-*        Mapping input coordinate. This should contain the lower bound
-*        of the input box in each input dimension.
-*     ubnd_in
-*        Pointer to an array of double, with one element for each
-*        Mapping input coordinate. This should contain the upper bound
-*        of the input box in each input dimension.
-*     coord_out
-*        The zero-based index of the Mapping output which is to be checked.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the specified Mapping output is linear. Zero otherwise.
-
-*/
-
-/* Local Constants: */
-#define NP 20   
-
-/* Local Variables: */
-   AstPointSet *pset1;
-   AstPointSet *pset2;
-   double **ptr1;
-   double **ptr2;
-   double *p;
-   double *s;
-   double *xl;
-   double c;
-   double d;
-   double delta;
-   double in_lbnd;
-   double in_ubnd;
-   double lbnd_out;
-   double m;
-   double p0;
-   double pv;
-   double sn;
-   double sp;
-   double sps;
-   double ss2;
-   double ss;
-   double sv;
-   double tol;
-   double ubnd_out;
-   int boxok; 
-   int i;
-   int j;
-   int nin;
-   int nout;
-   int oldrep;
-   int ret;              
-
-/* Initialise */
-   ret = 0;
-
-/* Check inherited status */
-   if( !astOK ) return ret;
-
-/* Check the Mapping is defined in both directions. */
-   if( astGetTranForward( map ) && astGetTranInverse( map ) ) {
-
-/* Allocate resources. */
-      nin = astGetNin( map );
-      nout = astGetNout( map );
-      xl = astMalloc( sizeof( double )*(size_t) nin );
-      pset1 = astPointSet( NP, nin, "", status );
-      ptr1 = astGetPoints( pset1 );
-      pset2 = astPointSet( NP, nout, "", status );
-      ptr2 = astGetPoints( pset2 );
-
-/* Call astMapBox in a new error reporting context. */
-      boxok = 0;
-      if( astOK ) {
-
-/* Temporarily switch off error reporting so that no report is made if
-   astMapBox cannot find a bounding box (which can legitimately happen with
-   some non-linear Mappings). */
-         oldrep = astReporting( 0 );
-
-/* Find the upper and lower bounds on the specified Mapping output. This also
-   returns the input coords of a point at which the required output has its
-   lowest value. */
-         astMapBox( map, lbnd_in, ubnd_in, 1, coord_out, &lbnd_out, &ubnd_out,
-                    xl, NULL );
-
-/* If the box could not be found, clear the error status and pass on. */
-         if( !astOK ) {
-            astClearStatus;
-            
-/* If the box was found OK, flag this and check if the bounds are equal.
-   If so we cannot use them. In this case create new bounds. */
-         } else {
-            boxok = 1;
-
-            if( EQUAL( lbnd_out, ubnd_out ) ) {
-               m = 0.5*( lbnd_out + ubnd_out );             
-               if( fabs( m ) > 1.0E-15 ) {
-                  lbnd_out = 0.9*m;
-                  ubnd_out = 1.1*m;
-               } else {
-                  lbnd_out = -1.0;
-                  ubnd_out = 1.0;
-               }
-            }
-         }
-
-/* Re-instate error reporting. */
-         astReporting( oldrep );
-      }
-     
-/* Check pointers can be used safely and a box was obtained. */
-      if( astOK && boxok ) {
-
-/* Transform the input position returned by astMapBox using the supplied
-   Mapping to get the corresponding output position. Fill all unused
-   elements of the PointSet with AST__BAD. */
-         for( i = 0; i < nin; i++ ){
-            p = ptr1[ i ];
-            *(p++) = xl[ i ];
-            for( j = 1; j < NP; j++ ) *(p++) = AST__BAD;
-         }
-         (void) astTransform( map, pset1, 1, pset2 );
-
-/* Now create a set of NP points evenly spaced in output coordinates. The
-   first point is at the output position found above. Each subsequent
-   point is incremented by a fixed amount along the specified output
-   coordinate (the values on all other output coordinates is held fixed). */
-         delta = ( ubnd_out - lbnd_out )/ ( NP - 1 );
-         for( i = 0; i < nout; i++ ){
-            p = ptr2[ i ];
-            if( i == coord_out ) {
-               for( j = 0; j < NP; j++ ) *(p++) = lbnd_out + j*delta;
-            } else {
-               p0 = p[ 0 ];
-               for( j = 0; j < NP; j++ ) *(p++) = p0;
-            }
-         }
-
-/* Transform these output positions into input positions using the
-   inverse Mapping. */
-         (void) astTransform( map, pset2, 0, pset1 );
-
-/* Do a least squares fit to each input coordinate. Each fit gives the
-   corresponding input coordinate value as a linear function of the
-   specified output coordinate value. Note, linear function should never
-   produce bad values so abort if a bad value is found. */
-         ret = 1;
-         s = ptr2[ coord_out ];
-         for( i = 0; i < nin; i++ ) {
-            p = ptr1[ i ];
-
-/* Form the required sums. Also find the largest and smallest input
-   coordinate value achieved. */
-            sp = 0.0;
-            ss = 0.0;
-            sps = 0.0;
-            sn = 0.0;
-            ss2 = 0.0;
-            in_lbnd = DBL_MAX;
-            in_ubnd = DBL_MIN;
-
-            for( j = 0; j < NP; j++ ) {
-               sv = s[ j ];
-               pv = p[ j ];
-               if( pv != AST__BAD && sv != AST__BAD ) {
-                  sp += pv;
-                  ss += sv;
-                  sps += pv*sv;
-                  sn += 1.0;
-                  ss2 += sv*sv;
-                  if( pv < in_lbnd ) in_lbnd = pv;
-                  if( pv > in_ubnd ) in_ubnd = pv;
-               } else {
-                  sn = 0.0;
-                  break;
-               }
-            }
-
-/* Ignore input axes which are independant of the output axis. */
-            if( !EQUAL( in_lbnd, in_ubnd ) ) {
-
-/* Calculate the constants "input coord = m*output coord + c" */
-               d = ss*ss - sn*ss2;
-               if( sn > 0.0 && d != 0.0 ) {
-                  m = ( sp*ss - sps*sn )/d;
-                  c = ( sps*ss - sp*ss2 )/d;
-
-/* Subtract off the fit value form the "p" values to get the residuals of
-   the fit. */
-                  for( j = 0; j < NP; j++ ) p[ j ] -= m*s[ j ] + c;
-
-/* We now do a least squares fit to the residuals. This second fit is done
-   because the first least squares fit sometimes leaves the residuals with a
-   distinct non-zero gradient. We do not need to worry about bad values
-   here since we have checked above that there are no bad values. Also we
-   do not need to recalculate sums which only depend on the "s" values since
-   they have not changed. */
-                  sp = 0.0;
-                  sps = 0.0;
-                  for( j = 0; j < NP; j++ ) {
-                     pv = p[ j ];
-                     sp += pv;
-                     sps += pv*s[ j ];
-                  }
-
-/* Find the constants in "input residual = m*output coord + c" equation. */
-                  m = ( sp*ss - sps*sn )/d;
-                  c = ( sps*ss - sp*ss2 )/d;
-
-/* Subtract off the fit value form the "p residuals" values to get the 
-   residual redisuals of the fit. */
-                  for( j = 0; j < NP; j++ ) p[ j ] -= m*s[ j ] + c;
-
-/* The requirement for a linear relationship is that the absolute residual 
-   between the input coord produced by the above linear fit and the input 
-   coord produced by the actual Mapping should be less than some small
-   fraction of the total range of input coord value, at every point. Test 
-   this. */
-                  tol = 1.0E-8*( in_ubnd - in_lbnd );
-                  for( j = 0; j < NP; j++ ) {
-                     if( fabs( p[ j ] ) > tol ) {
-                        ret = 0;
-                        break;
-                     }
-                  }
-   
-               } else {
-                  ret = 0;
-               }
-            }
-            if( !ret ) break;
-         }
-      }
-
-/* Free resources. */
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-      xl = astFree( xl );
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static int IsAIPSSpectral( const char *ctype, char **wctype, char **wspecsys, int *status ){
-/*
-*  Name:
-*     IsAIPSSpectral
-
-*  Purpose:
-*     See if a given CTYPE value describes a FITS-AIPS spectral axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int IsAIPSSpectral( const char *ctype, char **wctype, char **wspecsys, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The given CTYPE value is checked to see if it conforms to the
-*     requirements of a spectral axis CTYPE value as specified by
-*     FITS-AIPS encoding. If so, the equivalent FITS-WCS CTYPE and
-*     SPECSYS values are returned. 
-
-*  Parameters:
-*     ctype
-*        Pointer to a null terminated string holding the CTYPE value to
-*        check.
-*     wctype
-*        The address of a location at which to return a pointer to a
-*        static string holding the corresponding FITS-WCS CTYPE value. A
-*        NULL pointer is returned if the supplied CTYPE string is not an
-*        AIPS spectral CTYPE value.
-*     wspecsys
-*        The address of a location at which to return a pointer to a
-*        static string holding the corresponding FITS-WCS SPECSYS value. A
-*        NULL pointer is returned if the supplied CTYPE string is not an
-*        AIPS spectral CTYPE value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Retuned Value:
-*     Non-zero fi the supplied CTYPE was an AIPS spectral CTYPE value.
-
-*  Note:
-*     - These translations are also used by the FITS-CLASS encoding.
-
-*/
-
-/* Local Variables: */
-   int ret;
-   
-/* Initialise */
-   ret = 0;
-   *wctype = NULL;
-   *wspecsys = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* If the length of the string is not 8, then it is not an AIPS spectral axis. */
-   if( strlen( ctype ) == 8 ) {
-
-/* Translate AIPS spectral CTYPE values to FITS-WCS paper III equivalents. 
-   These are of the form AAAA-BBB, where "AAAA" can be "FREQ", "VELO" (=VRAD!) 
-   or "FELO" (=VOPT-F2W), and BBB can be "LSR", "LSD", "HEL" (=*Bary*centric!) 
-   or "GEO". */
-      if( !strncmp( ctype, "FREQ", 4 ) ){
-         *wctype = "FREQ    ";
-      } else if( !strncmp( ctype, "VELO", 4 ) ){
-         *wctype = "VRAD    ";
-      } else if( !strncmp( ctype, "FELO", 4 ) ){
-         *wctype = "VOPT-F2W";
-      } else if( !strncmp( ctype, "WAVELENG", 8 ) ){
-         *wctype = "WAVE    ";
-      }
-   
-      if( !strcmp( ctype + 4, "-LSR" ) ){
-         *wspecsys = "LSRK";
-      } else if( !strcmp( ctype + 4, "LSRK" ) ){
-         *wspecsys = "LSRK";
-      } else if( !strcmp( ctype + 4, "-LSRK" ) ){
-         *wspecsys = "LSRK";
-      } else if( !strcmp( ctype + 4, "-LSD" ) ){
-         *wspecsys = "LSRD";
-      } else if( !strcmp( ctype + 4, "-HEL" ) ){
-         *wspecsys = "BARYCENT";
-      } else if( !strcmp( ctype + 4, "-EAR" ) || !strcmp( ctype + 4, "-GEO" ) ){
-         *wspecsys = "GEOCENTR";
-      } else if( !strcmp( ctype + 4, "-OBS" ) || !strcmp( ctype + 4, "-TOP" ) ){
-         *wspecsys = "TOPOCENT";
-      }
-   
-      if( *wctype && *wspecsys ) {
-         ret = 1;
-      } else {
-         *wctype = NULL;
-         *wspecsys = NULL;
-      }
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static const char *IsSpectral( const char *ctype, char stype[5], char algcode[5], int *status ) {
-/*
-*  Name:
-*     IsSpectral
-
-*  Purpose:
-*     See if a given FITS-WCS CTYPE value describes a spectral axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char *IsSpectral( const char *ctype, char stype[5], char algcode[5], int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The given CTYPE value is checked to see if it conforms to the
-*     requirements of a spectral axis CTYPE value as specified by
-*     FITS-WCS paper 3. If so, the spectral system and algorithm codes
-*     are extracted from it and returned, together with the default units 
-*     for the spectral system.
-
-*  Parameters:
-*     ctype
-*        Pointer to a null terminated string holding the CTYPE value to
-*        check.
-*     stype
-*        An array in which to return the null-terminated spectral system type 
-*        (e.g. "FREQ", "VELO", "WAVE", etc). A null string is returned if 
-*        the CTYPE value does not describe a spectral axis.
-*     algcode 
-*        An array in which to return the null-terminated algorithm code
-*        (e.g. "-LOG", "", "-F2W", etc). A null string is returned if the
-*        spectral axis is linear. A null string is returned if the CTYPE 
-*        value does not describe a spectral axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Retuned Value:
-*     A point to a static string holding the default units associated
-*     with the spectral system specified by the supplied CTYPE value.
-*     NULL is returned if the CTYPE value does not describe a spectral
-*     axis.
-
-*  Notes: 
-*     - The axis is considered to be a spectral axis if the first 4
-*     characters form one of the spectral system codes listed in FITS-WCS
-*     paper 3. The algorithm code is not checked, except to ensure that
-*     it begins with a minus sign, or is blank.
-*     - A NULL pointer is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS
-   int ctype_len;
-   
-/* Initialise */
-   stype[ 0 ] = 0;
-   algcode[ 0 ] = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Initialise more stuff */
-   isspectral_ret = NULL;
-
-/* If the length of the string is less than 4, then it is not a spectral
-   axis. */
-   ctype_len = strlen( ctype );
-   if( ctype_len >= 4 ) {
-
-/* Copy the first 4 characters (the coordinate system described by the
-   axis) into a null-terminated buffer. */
-      strncpy( stype, ctype, 4 );
-      stype[ 4 ] = 0;
-      stype[ astChrLen( stype ) ] = 0;
-
-/* Copy any remaining characters (the algorithm code) into a null-terminated 
-   buffer. Only copy a maximum of 4 characters. */
-      if( ctype_len > 4 ) {
-         if( ctype_len <= 8 ) {
-            strcpy( algcode, ctype + 4 );
-         } else {
-            strncpy( algcode, ctype + 4, 4 );
-            algcode[ 4 ] = 0;
-         }
-         algcode[ astChrLen( algcode ) ] = 0;
-
-      } else {
-         algcode[ 0 ] = 0;
-      }
-
-/* See if the first 4 characters of the CTYPE value form one of the legal
-   spectral coordinate type codes listed in FITS-WCS Paper III. Also note
-   the default units associated with the system. */
-      if( !strcmp( stype, "FREQ" ) ) {
-         isspectral_ret = "Hz";
-   
-      } else if( !strcmp( stype, "ENER" ) ) {
-         isspectral_ret = "J";
-   
-      } else if( !strcmp( stype, "WAVN" ) ) {
-         isspectral_ret = "/m";
-   
-      } else if( !strcmp( stype, "VRAD" ) ) {
-         isspectral_ret = "m/s";
-   
-      } else if( !strcmp( stype, "WAVE" ) ) {
-         isspectral_ret = "m";
-   
-      } else if( !strcmp( stype, "VOPT" ) ) {
-         isspectral_ret = "m/s";
-   
-      } else if( !strcmp( stype, "ZOPT" ) ) {
-         isspectral_ret = "";
-   
-      } else if( !strcmp( stype, "AWAV" ) ) {
-         isspectral_ret = "m";
-   
-      } else if( !strcmp( stype, "VELO" ) ) {
-         isspectral_ret = "m/s";
-   
-      } else if( !strcmp( stype, "BETA" ) ) {
-         isspectral_ret = "";
-      }
-
-/* Also check that the remaining part of CTYPE (the algorithm code) begins 
-   with a minus sign or is blank. */
-      if( algcode[ 0 ] != '-' && strlen( algcode ) > 0 ) isspectral_ret = NULL;
-   
-   }
-
-/* Return null strings if the axis is not a spectral axis. */
-   if( ! isspectral_ret ) {
-      stype[ 0 ] = 0;
-      algcode[ 0 ] = 0;
-   }
-
-/* Return the result. */
-   return isspectral_ret;
-}
-
-static AstMapping *LinearWcs( FitsStore *store, int i, char s, 
-                              const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     LinearWcs
-
-*  Purpose:
-*     Create a Mapping describing a FITS-WCS linear algorithm
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *LinearWcs( FitsStore *store, int i, char s, 
-*                            const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function uses the contents of the supplied FitsStore to create
-*     a Mapping which goes from Intermediate World Coordinate (known as "w" 
-*     in the context of FITS-WCS paper III) to a linearly related axis.
-*
-*     The returned Mapping is a ShiftMap which simply adds on the value of
-*     CRVALi.
-
-*  Parameters:
-*     store
-*        Pointer to the FitsStore structure holding the values to use for 
-*        the WCS keywords. 
-*     i 
-*        The zero-based index of the spectral axis within the FITS header
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstMapping *ret;
-   double crv;
-
-/* Check the global status. */
-   ret = NULL;
-   if( !astOK ) return ret;
-
-/* Get the CRVAL value for the specified axis. */
-   crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-   if( crv == AST__BAD ) crv = 0.0;
-
-/* Create a 1D ShiftMap which adds this value onto the IWCS value. */
-   if( crv != 0.0 ) {
-      ret = (AstMapping *) astShiftMap( 1, &crv, "", status );
-   } else {
-      ret = (AstMapping *) astUnitMap( 1, "", status );
-   }
-   return ret;
-}
-
-static AstMapping *LogAxis( AstMapping *map, int iax, int nwcs, double *lbnd_p, 
-                            double *ubnd_p, double crval, int *status ){
-/*
-*  Name:
-*     LogAxes
-
-*  Purpose:
-*     Test a Frame axis to see if it logarithmically spaced in pixel coords.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *LogAxis( AstMapping *map, int iax, int nwcs, double *lbnd_p, 
-*                          double *ubnd_p, double crval )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A specified axis of the supplied Mappinhg is tested to see if it
-*     corresponds to the form
-*
-*        S = Sr.exp( w/Sr )
-*
-*     where "w" is one of the Mapping inputs, "S" is the specified
-*     Mapping output, and "Sr" is the supplied value of "crval". This
-*     is the form for a FITS log axis as defined in FITS-WCS paper III.
-*     
-*     If the above test is passed, a Mapping is returned from "S" to "w"
-*     (the inverseof the above expression).
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping. This will usually be a Mapping from
-*        pixel coords to WCS coords.
-*     iax
-*        The index of the output of "map" which correspoinds to "S".
-*     nwcs
-*        The number of outputs from "map".
-*     lbnd_p
-*        Pointer to an array of double, with one element for each
-*        Mapping input coordinate. This should contain the lower bound
-*        of the input pixel box in each input dimension.
-*     ubnd_p
-*        Pointer to an array of double, with one element for each
-*        Mapping input coordinate. This should contain the upper bound
-*        of the input pixel box in each input dimension.
-*     crval
-*        The reference value ("Sr") to use. Must not be zero.
-
-*  Returned Value:
-*     If the specified axis is logarithmically spaced, a Mapping with
-*     "nwcs" inputs and "nwcs" outputs is returned. This Mapping transforms
-*     its "iax"th input using the transformation:
-*
-*        w = Sr.Log( S/Sr )
-*
-*     (where "S" is the Mapping is the "iax"th input and "w" is the
-*     "iax"th output). Other inputs are copied to the corresponding
-*     output without change. NULL is returned if the specified axis is 
-*     not logarithmically spaced.
-*/
-
-/* Local Variables: */
-   AstMapping *result;     /* Returned Mapping */
-   AstMapping *tmap0;      /* A temporary Mapping */
-   AstMapping *tmap1;      /* A temporary Mapping */
-   AstMapping *tmap2;      /* A temporary Mapping */
-   AstMapping *tmap3;      /* A temporary Mapping */
-   AstMapping *tmap4;      /* A temporary Mapping */
-   const char *fexps[ 1 ]; /* Forward MathMap expressions */
-   const char *iexps[ 1 ]; /* Inverse MathMap expressions */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the inherited status and crval value. */
-   if( !astOK || crval == 0.0 ) return result;
-
-/* If the "log" algorithm is appropriate, the supplied axis (s) is related 
-   to pixel coordinate (p) by s = Sr.EXP( a*p - b ). If this is the case, 
-   then the log of s will be linearly related to pixel coordinates. To test 
-   this, we create a CmpMap which produces log(s). */
-   fexps[ 0 ] = "logs=log(s)";
-   iexps[ 0 ] = "s=exp(logs)";
-   tmap1 = (AstMapping *) astMathMap( 1, 1, 1, fexps, 1, iexps, 
-                                      "simpfi=1,simpif=1", status );
-   tmap2 = AddUnitMaps( tmap1, iax, nwcs, status );
-   
-   tmap0 = (AstMapping *) astCmpMap( map, tmap2, 1, "", status );
-   tmap2 = astAnnul( tmap2 );
-
-/* See if this Mapping is linear. */
-   if( IsMapLinear( tmap0, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* Create the Mapping which defines the IWC axis. This is the Mapping from 
-   WCS to IWCS - "W = Sr.log( S/Sr )". Other axes are left unchanged by the 
-   Mapping. The IWC axis has the same axis index as the WCS axis. */
-      tmap2 = (AstMapping *) astZoomMap( 1, 1.0/crval, "", status );
-      tmap3 = (AstMapping *) astCmpMap( tmap2, tmap1, 1, "", status );
-      tmap2 = astAnnul( tmap2 );
-      tmap2 = (AstMapping *) astZoomMap( 1, crval, "", status );
-      tmap4 = (AstMapping *) astCmpMap( tmap3, tmap2, 1, "", status );
-      tmap3 = astAnnul( tmap3 );
-      tmap2 = astAnnul( tmap2 );
-      result = AddUnitMaps( tmap4, iax, nwcs, status );
-      tmap4 = astAnnul( tmap4 );   
-   }
-
-/* Free resources. */
-   tmap0 = astAnnul( tmap0 );
-   tmap1 = astAnnul( tmap1 );
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *LogWcs( FitsStore *store, int i, char s, 
-                           const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     LogWcs
-
-*  Purpose:
-*     Create a Mapping describing a FITS-WCS logarithmic algorithm
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *LogWcs( FitsStore *store, int i, char s, 
-*                         const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function uses the contents of the supplied FitsStore to create
-*     a Mapping which goes from Intermediate World Coordinate (known as "w" 
-*     in the context of FITS-WCS paper III) to a logarthmic version of w
-*     called "S" given by:
-*
-*     S = Sr.exp( w/Sr )
-*
-*     where Sr is the value of S corresponding to w=0.
-
-*  Parameters:
-*     store
-*        Pointer to the FitsStore structure holding the values to use for 
-*        the WCS keywords. 
-*     i 
-*        The zero-based index of the axis within the FITS header
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstMapping *ret;
-   char forexp[ 12 + DBL_DIG*2 ];
-   char invexp[ 12 + DBL_DIG*2 ];
-   const char *fexps[ 1 ];
-   const char *iexps[ 1 ];
-   double crv;
-
-/* Check the global status. */
-   ret = NULL;
-   if( !astOK ) return ret;
-
-/* Get the CRVAL value for the specified axis. Use a default of zero. */
-   crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-   if( crv == AST__BAD ) crv = 0.0;
-
-/* Create the MathMap, if possible. */
-   if( crv != 0.0 ) {
-      sprintf( forexp, "s=%.*g*exp(w/%.*g)", DBL_DIG, crv, DBL_DIG, crv );
-      sprintf( invexp, "w=%.*g*log(s/%.*g)", DBL_DIG, crv, DBL_DIG, crv );
-      fexps[ 0 ] = forexp;
-      iexps[ 0 ] = invexp;
-      ret = (AstMapping *) astMathMap( 1, 1, 1, fexps, 1, iexps, "simpfi=1,simpif=1", status );
-   }
-
-/* Return the result */
-   return ret;
-}
-
-static int LooksLikeClass( AstFitsChan *this, const char *method, 
-                           const char *class, int *status ){
-/*
-*  Name:
-*     LooksLikeClass
-
-*  Purpose:
-*     Does the FitsChan seem to use FITS-CLASS encoding?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*      int LooksLikeClass( AstFitsChan *this, const char *method, 
-*                          const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns non-zero if the supplied FitsChan probably uses FITS-CLASS
-*     encoding. This is the case if it contains a DELTAV keyword and a
-*     keyword of the form VELO-xxx", where xxx is one of the accepted
-*     standards of rest.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the encoding in use lookslike FITS-CLASS.
-
-*/
-
-/* Local Variables... */
-   int ret;            /* Returned value */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the global status. */
-   if( !astOK ) return ret;
-
-/* See if there is a "DELTAV" card, and a "VELO-xxx" card. */
-   if( astKeyFields( this, "DELTAV", 0, NULL, NULL ) && (
-          astKeyFields( this, "VELO-OBS", 0, NULL, NULL ) ||
-          astKeyFields( this, "VELO-HEL", 0, NULL, NULL ) ||
-          astKeyFields( this, "VELO-EAR", 0, NULL, NULL ) ||
-          astKeyFields( this, "VELO-LSR", 0, NULL, NULL ) ) ) {
-      ret = 1;
-   }
-
-/* Return  the result. */
-   return ret;
-}
-
-static void MakeBanner( const char *prefix, const char *middle,
-                        const char *suffix,
-                        char banner[ AST__FITSCHAN_FITSCARDLEN -
-                                     FITSNAMLEN + 1 ], int *status ) {
-/*
-*  Name:
-*     MakeBanner
-
-*  Purpose:
-*     Create a string containing a banner comment.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void MakeBanner( const char *prefix, const char *middle,
-*                      const char *suffix,
-*                      char banner[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ], int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function creates a string which can be written as a FITS
-*     comment card to produce a banner heading (or tail) for an AST
-*     Object when it is written to a FitsChan. The banner will occupy
-*     the maximum permitted width for text in a FITS comment card.
-
-*  Parameters:
-*     prefix
-*        A pointer to a constant null-terminated string containing the
-*        first part of the text to appear in the banner.
-*     middle
-*        A pointer to a constant null-terminated string containing the
-*        second part of the text to appear in the banner.
-*     suffix
-*        A pointer to a constant null-terminated string containing the
-*        third part of the text to appear in the banner.
-*     banner
-*        A character array to receive the null-terminated result string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The text to appear in the banner is constructed by
-*     concatenating the three input strings supplied.
-*/
-
-/* Local Variables: */
-   char token[] = "AST";         /* Identifying token */
-   int i;                        /* Loop counter for input characters */
-   int len;                      /* Number of output characters */
-   int ltok;                     /* Length of token string */
-   int mxlen;                    /* Maximum permitted output characters */
-   int start;                    /* Column number where text starts */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Calculate the maximum number of characters that the output banner
-   can hold and the length of the token string. */
-   mxlen = AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN;
-   ltok = (int) strlen( token );
-
-/* Calculate the column in which to start the text, so that it is
-   centred in the banner (with 4 non-text characters on each side). */
-   start = ltok + 2 + ( mxlen - ltok - 1 -
-                        (int) ( strlen( prefix ) +
-                                strlen( middle ) +
-                                strlen( suffix ) ) - 1 - ltok ) / 2;
-   if ( start < ltok + 2 ) start = ltok + 2;
-
-/* Start building the banner with the token string. */
-   len = 0;
-   for ( i = 0; token[ i ] && ( len < mxlen ); i++ ) {
-      banner[ len++ ] = token[ i ];
-   }
-
-/* Then pad with spaces up to the start of the text. */
-   while ( len < start - 1 ) banner[ len++ ] = ' ';
-
-/* Insert the prefix data, truncating it if it is too long. */
-   for ( i = 0; prefix[ i ] && ( len < mxlen - ltok - 1 ); i++ ) {
-      banner[ len++ ] = prefix[ i ];
-   }
-
-/* Insert the middle data, truncating it if it is too long. */
-   for ( i = 0; middle[ i ] && ( len < mxlen - ltok - 1 ); i++ ) {
-      banner[ len++ ] = middle[ i ];
-   }
-
-/* Insert the suffix data, truncating it if it is too long. */
-   for ( i = 0; suffix[ i ] && ( len < mxlen - ltok - 1 ); i++ ) {
-      banner[ len++ ] = suffix[ i ];
-   }
-
-/* Pad the end of the text with spaces. */
-   while ( len < mxlen - ltok ) banner[ len++ ] = ' ';
-
-/* Finish the banner with the token string. */
-   for ( i = 0; token[ i ] && ( len < mxlen ); i++ ) {
-      banner[ len++ ] = token[ i ];
-   }
-
-/* Terminate the output string. */
-   banner[ len ] = '\0';
-}
-
-static AstFrameSet *MakeFitsFrameSet( AstFrameSet *fset, int ipix, int iwcs, int *status ) {
-/*
-*  Name:
-*     MakeFitsFrameSet
-
-*  Purpose:
-*     Create a FrameSet which conforms to the requirements of the FITS-WCS 
-*     papers.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstFrameSet *MakeFitsFrameSet( AstFrameSet *fset, int ipix, int iwcs, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function constructs a new FrameSet holding the pixel and WCS 
-*     Frames from the supplied FrameSet, but optionally extends the WCS
-*     Frame to include any extra axes needed to conform to the FITS model. 
-*     Currently, this function does the following:
-*
-*     - if the WCS Frame contains a spectral axis with a defined celestial 
-*     reference position (SpecFrame attributes RefRA and RefDec), then 
-*     it ensures that the WCS Frame also contains a pair of celestial
-*     axes (such axes are added if they do not already exist within the 
-*     supplied WCS Frame). The pixel->WCS Mapping is adjusted accordingly.
-*
-*     - if the WCS Frame contains a spectral axis and a pair of celestial 
-*     axes, then the SpecFrame attributes RefRA and RefDec are set to the
-*     reference position defined by the celestial axes. The pixel->WCS
-*     Mapping is adjusted accordingly.
-*
-*     - NULL is returned if the WCS Frame contains more than one spectral
-*     axis.
-*
-*     - NULL is returned if the WCS Frame contains more than one pair of
-*     celestial axes.
-
-*  Parameters:
-*     fset
-*        The FrameSet to check.
-*     ipix
-*        The index of the FITS pixel Frame within "fset".
-*     iwcs
-*        The index of the WCS Frame within "fset".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new FrameSet which confoms to the requirements of the FITS-WCS
-*     papers. The base Frame in this FrameSet will be the FITS pixel
-*     Frame, and the current Frame will be the WCS Frame. NULL is
-*     returned if an error has already occurred, or if the FrameSet cannot 
-*     be produced for any reason.
-
-*/
-
-/* Local Variables: */
-   AstFitsChan *fc;        /* Pointer to temporary FitsChan */
-   AstFrame *pframe;       /* Pointer to the primary Frame */
-   AstFrame *pixfrm;       /* Pointer to the FITS pixel Frame */
-   AstFrame *tfrm0;        /* Pointer to a temporary Frame */
-   AstFrame *tfrm;         /* Pointer to a temporary Frame */
-   AstFrame *wcsfrm;       /* Pointer to the FITS WCS Frame */
-   AstFrameSet *ret;       /* The returned FrameSet */
-   AstFrameSet *tfs;       /* Pointer to a temporary FrameSet */
-   AstMapping *map1;       /* Pointer to pre-WcsMap Mapping */
-   AstMapping *map3;       /* Pointer to post-WcsMap Mapping */
-   AstMapping *map;        /* Pointer to the pixel->wcs Mapping */
-   AstMapping *tmap0;      /* Pointer to a temporary Mapping */
-   AstMapping *tmap1;      /* Pointer to a temporary Mapping */
-   AstMapping *tmap2;      /* Pointer to a temporary Mapping */
-   AstMapping *tmap;       /* Pointer to a temporary Mapping */
-   AstSpecFrame *skyfrm;   /* Pointer to the SkyFrame within WCS Frame */
-   AstSpecFrame *specfrm;  /* Pointer to the SpecFrame within WCS Frame */
-   AstWcsMap *map2;        /* Pointer to WcsMap */
-   char card[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* A FITS header card */
-   char equinox_attr[ 13 ];/* Name of Equinox attribute for sky axes */
-   char system_attr[ 12 ]; /* Name of System attribute for sky axes */
-   const char *eqn;              /* Pointer to original sky Equinox value */
-   const char *skysys;     /* Pointer to original sky System value */
-   double con;             /* Constant axis value */
-   double reflat;          /* Celestial latitude at reference point */
-   double reflon;          /* Celestial longitude at reference point */
-   int *perm;              /* Pointer to axis permutation array */
-   int iax;                /* Axis inex */
-   int ilat;               /* Celestial latitude index within WCS Frame */
-   int ilon;               /* Celestial longitude index within WCS Frame */
-   int ispec;              /* SpecFrame axis index within WCS Frame */
-   int npix;               /* Number of pixel axes */
-   int nwcs;               /* Number of WCS axes */
-   int ok;                 /* Is the supplied FrameSet usable? */
-   int paxis;              /* Axis index within the primary Frame */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Get copies of the pixel Frame, the WCS Frame and the Mapping. */
-   tfrm = astGetFrame( fset, ipix );
-   pixfrm = astCopy( tfrm );
-   tfrm = astAnnul( tfrm );   
-
-   tfrm = astGetFrame( fset, iwcs );
-   wcsfrm = astCopy( tfrm );
-   tfrm = astAnnul( tfrm );   
-
-   tmap = astGetMapping( fset, ipix, iwcs );
-   map = astCopy( tmap );
-   tmap = astAnnul( tmap );   
-
-/* Store the number of pixel and WCS axes. */
-   npix = astGetNaxes( pixfrm );
-   nwcs = astGetNaxes( wcsfrm );
-
-/* Search the WCS Frame for SkyFrames and SpecFrames. */
-   specfrm = NULL;
-   skyfrm = NULL;
-   ok = 1;
-   ilat = -1;
-   ilon = -1;
-   for( iax = 0; iax < nwcs; iax++ ) {
-
-/* Obtain a pointer to the primary Frame containing the current WCS axis. */
-      astPrimaryFrame( wcsfrm, iax, &pframe, &paxis );
-
-/* If the current axis is a SpecFrame, save a pointer to it, and its WCS
-   index. If we have already found a SpecFrame, abort. */
-      if( astIsASpecFrame( pframe ) ) {
-         if( specfrm ) {
-            ok = 0;
-            break;
-         }
-         specfrm = astClone( pframe );
-         ispec = iax;
-
-/* If the current axis is a SkyFrame, save a pointer to it, and its WCS
-   index. If we have already found a different SkyFrame, abort. */
-      } else if( astIsASkyFrame( pframe ) ) {
-         if( skyfrm ) {
-            if( pframe != (AstFrame *) skyfrm ) {
-               ok = 0;
-               break;
-            }
-         } else {
-            skyfrm = astClone( pframe );
-         }
-
-         if( paxis == 0 ) {
-            ilon = iax;
-         } else {
-            ilat = iax;
-         }
-
-      }
-
-/* Free resources. */
-      pframe = astAnnul( pframe );
-
-   }
-
-/* If the supplied FrameSet is usable... */
-   if( ok ) {
-
-/* If we did not find a SpecFrame, return a FrameSet made from the base
-   and current Frames in the supplied FrameSet. */
-      if( !specfrm ) {
-         ret = astFrameSet( pixfrm, "", status );
-         astAddFrame( ret, AST__BASE, map, wcsfrm );
-
-/* If we have a SpecFrame, proceed. */
-      } else {
-
-/* Check that both the RefRA and RefDec attributes of the SpecFrame are set. 
-   If not, return a FrameSet made from the base and current Frames in the 
-   supplied FrameSet.*/
-         if( !astTestRefRA( specfrm ) || !astTestRefDec( specfrm ) ) {
-            ret = astFrameSet( pixfrm, "", status );
-            astAddFrame( ret, AST__BASE, map, wcsfrm );
-
-/* If we have a celestial reference position for the spectral axis, ensure 
-   it is descirbed correctly by a pair of celestial axes. */
-         } else {
-
-/* If the WCS Frame does not contain any celestial axes, we add some now. */
-            if( !skyfrm ) {
-
-/* The easiest way to create the required mapping from pixel to celestial
-   to create a simple FITS header and read it in via a FitsChan to create a
-   FrameSet. */
-               fc = astFitsChan( NULL, NULL, "", status );
-               astPutFits( fc, "CRPIX1  = 0", 0 );
-               astPutFits( fc, "CRPIX2  = 0", 0 );
-               astPutFits( fc, "CDELT1  = 0.0003", 0 );
-               astPutFits( fc, "CDELT2  = 0.0003", 0 );
-               astPutFits( fc, "CTYPE1  = 'RA---TAN'", 0 );
-               astPutFits( fc, "CTYPE2  = 'DEC--TAN'", 0 );
-               astPutFits( fc, "RADESYS = 'FK5'", 0 );
-               astPutFits( fc, "EQUINOX = 2000.0", 0 );
-   
-               sprintf( card, "CRVAL1  = %.*g", DBL_DIG, 
-                        AST__DR2D*astGetRefRA( specfrm ) );
-               astPutFits( fc, card, 0 );
-   
-               sprintf( card, "CRVAL2  = %.*g", DBL_DIG, 
-                        AST__DR2D*astGetRefDec( specfrm ) );
-               astPutFits( fc, card, 0 );
-   
-               sprintf( card, "MJD-OBS = %.*g", DBL_DIG, 
-                        TDBConv( astGetEpoch( specfrm ), AST__UTC, 1, 
-                                 "astWrite", "FitsChan", status ) );
-               astPutFits( fc, card, 0 );
-
-               astClearCard( fc );
-               tfs = astRead( fc );
-               if( tfs ) {
-
-/* Create the new pixel->wcs Mapping. First get the 2-input,2-output
-   Mapping between pixel and sky coords from the above FrameSet. Then add
-   this Mapping in parallel with the original pixel->wcs Mapping. */
-                  tmap0 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
-                  tmap1 = (AstMapping *) astCmpMap( map, tmap0, 0, "", status );
-                  tmap0 = astAnnul( tmap0 );
-
-/* We now have a (npix+2)-input,(nwcs+2)-output Mapping. We now add a
-   PermMap in series with this which feeds the constant value 0.0 (the
-   CRPIX value in the above set of FITS headers) into the 2 pixel axes
-   corresponding to RA and Dec. This PermMap has npix-inputs and (npix+2)
-   outputs. The total Mapping then has npix inputs and (nwcs+2) outputs. */
-                  perm = astMalloc( sizeof( int )*(size_t) ( npix + 2 ) );
-                  if( astOK ) {
-                     for( iax = 0; iax < npix; iax++ ) perm[ iax ] = iax;
-                     perm[ npix ] = -1;
-                     perm[ npix + 1 ] = -1;
-                     con = 0.0;
-                     tmap0 = (AstMapping *) astPermMap( npix, perm, npix + 2, perm, &con, "", status );
-                     tmap2 = (AstMapping *) astCmpMap( tmap0, tmap1, 1, "", status );
-                     tmap0 = astAnnul( tmap0 );
-                     tmap1 = astAnnul( tmap1 );
-
-/* We now create the new WCS Frame with the extra RA and Dec axes. This
-   is just a CmpFrame made up of the original WCS Frame and the new
-   SkyFrame. */
-                     tfrm = astGetFrame( tfs, AST__CURRENT );               
-                     tfrm0 = (AstFrame *) astCmpFrame( wcsfrm, tfrm, "", status );
-                     tfrm = astAnnul( tfrm );
-
-/* Construct the returned FrameSet. */
-                     ret = astFrameSet( pixfrm, "", status );
-                     astAddFrame( ret, AST__BASE, tmap2, tfrm0 );
-                     tmap2 = astAnnul( tmap2 );
-                     tfrm0 = astAnnul( tfrm0 );
-
-/* Free remaining resources. */
-                     perm = astFree( perm );
-                  }
-   
-                  tfs = astAnnul( tfs );            
-               }
-   
-               fc = astAnnul( fc );
-
-/* If the WCS Frame does contain celestial axes we make sure that the 
-   SpecFrame uses the same reference point. */
-            } else {
-
-/* The returned FrameSet has no extra Frames (although some attributes
-   may be changed) so just create a new FrameSet equaivalent to the supplied 
-   FrameSet. */
-               tfs = astFrameSet( pixfrm, "", status );
-               astAddFrame( tfs, AST__BASE, map, wcsfrm );
-
-/* The RefRA and RefDec attributes of the SpecFrame must be set in FK5
-   J2000. Therefore we need to know the celestial reference point in
-   FK5 J2000. Modify the SkyFrame within the FrameSet to represent FK5
-   J2000, noting the original sky system and equinox first so that they
-   can be re-instated (if set) later on. */
-               sprintf( system_attr, "System(%d)", ilon + 1 );
-               if( astTest( tfs, system_attr ) ) {
-                  skysys = astGetC( tfs, system_attr );
-               } else {
-                  skysys = NULL;
-               }
-               astSetC( tfs, system_attr, "FK5" );
-   
-               sprintf( equinox_attr, "Equinox(%d)", ilon + 1 );
-               if( astTest( tfs, equinox_attr ) ) {
-                  eqn = astGetC( tfs, equinox_attr );
-               } else {
-                  eqn = NULL;
-               }
-               astSetC( tfs, equinox_attr, "J2000" );
-  
-/* The reference point for the celestial axes is defined by the WcsMap
-   contained within the Mapping. Split the mapping up into a list of serial 
-   component mappings, and locate the first WcsMap in this list. The first 
-   Mapping returned by this call is the result of compounding all the 
-   Mappings up to (but not including) the WcsMap, the second returned Mapping 
-   is the (inverted) WcsMap, and the third returned Mapping is anything 
-   following the WcsMap. Only proceed if one and only one WcsMap is found. */
-               tmap0 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
-               if( SplitMap( tmap0, astGetInvert( tmap0 ), ilon, ilat, &map1, &map2, &map3, status ) ){
-
-/* The reference point in the celestial coordinate system is found by
-   transforming the fiducial point in native spherical co-ordinates
-   into absolute physical coordinates using map3. */
-                  if( GetFiducialWCS( map2, map3, ilon,  ilat, &reflon, &reflat, status ) ){
-
-/* Use reflon and reflat (which represent FK5 J2000 RA and Dec) to set
-   the values of the SpecFrame RefRA and RefDec attributes. Format the
-   values first so that we can use the FrameSet astSetC method, and so
-   maintain the FrameSet integrity. */
-                     astSetC( tfs, "RefRA", astFormat( wcsfrm, ilon, reflon ) );
-                     astSetC( tfs, "RefDec", astFormat( wcsfrm, ilat, reflat ) );
-
-/* If succesfull, return a pointer to the FrameSet. */
-                     if( astOK ) ret = astClone( tfs );
-                  }
-
-/* Release resources. */
-                  map1 = astAnnul( map1 );
-                  map2 = astAnnul( map2 );
-                  map3 = astAnnul( map3 );
-               }
-               tmap0 = astAnnul( tmap0 );
-            
-/* Re-instate the original sky system and equinox. */
-               if( skysys ) astSetC( tfs, system_attr, skysys );
-               if( eqn ) astSetC( tfs, equinox_attr, eqn );
-
-/* Release resources. */
-               tfs = astAnnul( tfs );
-            }
-         }
-      }
-   }
-
-/* Free resources. */
-   if( specfrm ) specfrm = astAnnul( specfrm );
-   if( skyfrm ) skyfrm = astAnnul( skyfrm );
-   pixfrm = astAnnul( pixfrm );
-   wcsfrm = astAnnul( wcsfrm );
-   map = astAnnul( map );
-
-/* Return NULL if an error has occurred. */
-   if( !astOK && ret ) ret = astAnnul( ret );
-
-/* Return the result. */
-   return ret;
-}
-
-static void MakeIndentedComment( int indent, char token,
-                                 const char *comment, const char *data,
-                                 char string[ AST__FITSCHAN_FITSCARDLEN -
-                                              FITSNAMLEN + 1 ], int *status ) {
-/*
-*  Name:
-*     MakeIndentedComment
-
-*  Purpose:
-*     Create a comment string containing an indentation bar.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void MakeIndentedComment( int indent, char token,
-*                               const char *comment, const char *data,
-*                               char string[ AST__FITSCHAN_FITSCARDLEN -
-*                                            FITSNAMLEN + 1 ], int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function creates a string that may be used as text in a
-*     FITS comment card. The string contains a textual comment
-*     preceded by a bar (a line of characters) whose length can be
-*     used to indicate a level of indentation (in the absence of any
-*     way of indenting FITS keywords).
-
-*  Parameters:
-*     indent
-*        The level of indentation, in characters.
-*     token
-*        The character used to form the indentation bar.
-*     comment
-*        A pointer to a constant null-terminated string containing the text
-*        of the comment to be included.
-*     data
-*        A pointer to a constant null-terminated string containing any
-*        textual data to be appended to the comment.
-*     string
-*        A character array to receive the output string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*    - The comment text that appears in the output string is formed by
-*   concatenating the "comment" and "data" strings.
-*/
-
-/* Local Variables: */
-   int i;                        /* Loop counter for input characters */
-   int len;                      /* Number of output characters */
-   int mxlen;                    /* Maximum length of output string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Calculate the maximum number of characters that the output string
-   can accommodate. */
-   mxlen = AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN;
-
-/* Start the string with "indent" copies of the token character, but
-   without exceeding the output string length. */
-   len = 0;
-   while ( ( len < indent ) && ( len < mxlen ) ) string[ len++ ] = token;
-
-/* Pad with spaces up to the start of the comment, if necessary. */
-   while ( len < ( FITSCOMCOL - FITSNAMLEN - 1 ) ) {
-      string[ len++ ] = ' ';
-   }
-
-/* Add "/ " to introduce the comment (strictly not necessary as the
-   whole card will be a comment, but it matches the other non-comment
-   cards). Truncate if necessary. */
-   for ( i = 0; ( i < 2 ) && ( len < mxlen ); i++ ) {
-      string[ len++ ] = "/ "[ i ];
-   }
-
-/* Append the comment string, truncating it if it is too long. */
-   for ( i = 0; comment[ i ] && ( len < mxlen ); i++ ) {
-      string[ len++ ] = comment[ i ];
-   }
-
-/* Append the data string, again truncating if too long. */
-   for ( i = 0; data[ i ] && ( len < mxlen ); i++ ) {
-      string[ len++ ] = data[ i ];
-   }
-
-/* Terminate the output string. */
-   string[ len ] = '\0';
-}
-
-static void MakeIntoComment( AstFitsChan *this, const char *method, 
-                             const char *class, int *status ){
-/*
-*  Name:
-*     MakeIntoComment
-
-*  Purpose:
-*     Convert a card into a FITS COMMENT card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void MakeIntoComment( AstFitsChan *this, const char *method,
-*                           const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function formats the card stored just prior to the current card, 
-*     and re-stores it as a COMMENT card. It is used (when writing an Object 
-*     to a FitsChan) to output values that are not "set" and which are 
-*     therefore provided for information only, and should not be read back. 
-*     the COMMENT card has the effect of "commenting out" the value.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     method
-*        Calling method.
-*     class
-*        Object class.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   char card[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* Character buffer for FITS card data */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Move the current card backwards by one card. */
-   MoveCard( this, -1, method, class, status );    
-
-/* Format the new current card. */
-   FormatCard( this, card, method, status );
-
-/* Write the resulting string to the FitsChan as the contents of a COMMENT 
-   card, overwriting the existing card. The current card is incremented
-   by this call so that it refers to the same card as on entry. */
-   astSetFitsCom( this, "COMMENT", card, 1 );
-
-}
-
-static int MakeIntWorld( AstMapping *cmap, AstFrame *fr, int *wperm, char s, 
-                         FitsStore *store, double *dim, 
-                         const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     MakeIntWorld
-
-*  Purpose:
-*     Create FITS header values which map grid into intermediate world
-*     coords.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int MakeIntWorld( AstMapping *cmap, AstFrame *fr, int *wperm, char s, 
-*                       FitsStore *store, double *dim, 
-*                       const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function adds values to the supplied FitsStore which describe
-*     the transformation from grid (pixel) coords to intermediate world
-*     coords. The values added to the FitsStore correspond to the CRPIXj,
-*     PCi_j, CDELTi and WCSAXES keywords, and are determined by examining the 
-*     suppliedMapping, which must be linear with an optional shift of 
-*     origin (otherwise a value of zero is returned).
-*
-*     Much of the complication in the algorithm arises from the need to
-*     support cases where the supplied Mapping has more outputs than
-*     inputs. In these case we add some "degenerate" axes to the grid
-*     coord system, choosing their unit vectors to be orthogonal to all
-*     the other grid axes. It is assumed that degenerate axes will never
-*     be used to find a position other than at the axis value of 1.0.
-*
-*     NOTE, appropriate values for CRVAL keywords should have been stored 
-*     in the FitsStore before calling this function (since this function may
-*     modify them).
-
-*  Parameters:
-*     cmap
-*        A pointer to a Mapping which transforms grid coordinates into
-*        intermediate world coordinates. The number of outputs must be
-*        greater than or equal to the number of inputs.
-*     fr
-*        Pointer to the final WCS coordinate Frame.
-*     wperm
-*        Pointer to an array of integers with one element for each axis of 
-*        the "fr" Frame. Each element holds the zero-based index of the 
-*        FITS-WCS axis (i.e. the value of "i" in the keyword names "CTYPEi", 
-*        "CDi_j", etc) which describes the Frame axis.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     store
-*        A pointer to the FitsStore into which the calculated CRPIX and 
-*        CDi_j values are to be put.
-*     dim
-*        An array holding the image dimensions in pixels. AST__BAD can be 
-*        supplied for any unknwon dimensions.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if the CRPIX and CDi_j values are
-*     succesfully calculated. Zero is returned otherwise.
-
-*  Notes:
-*     -  Zero is returned if an error occurs.
-*/
-
-/* Local Variables: */
-   AstFrame *pfrm;
-   AstFrame *sfrm;
-   AstMapping *map;
-   AstPointSet *psetw;
-   AstPointSet *psetg;
-   double **fullmat;
-   double **partmat;
-   double **ptrg;
-   double **ptrw;
-   double *c;
-   double *cdelt;
-   double *cdmat;
-   double *colvec;
-   double *d;
-   double *g;
-   double *g0;
-   double *m;
-   double *mat;
-   double *tol;
-   double *w0;
-   double *y;
-   double cd;
-   double crp;
-   double crv;
-   double cv;
-   double det;
-   double err;
-   double k;
-   double mxcv;
-   double skydiag1;
-   double skydiag0;
-   double val; 
-   int *iw;
-   int *lin;
-   int *pperm;
-   int *skycol;
-   int i;
-   int ii;
-   int j;
-   int jax;
-   int jj;
-   int nin;
-   int nout;
-   int nwcs;
-   int paxis;
-   int ret;               
-   int sing;   
-   int skycol0;
-   int skycol1;
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Simplify the supplied Mapping to reduce rounding errors when
-   transforming points. */
-   map = astSimplify( cmap );
-
-/* Get the number of inputs and outputs for the Mapping. Return if the
-   number of outputs is smaller than the number of inputs. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-   if( nout < nin ) return ret;
-
-/* Note the number of final World Coordinate axes (not necessarily the
-   same as "nout", since some intermediate axes may be discarded by a
-   later PermMap. */
-   nwcs = astGetNaxes( fr );
-
-/* Allocate work space. */
-   g = astMalloc( sizeof(double)*(size_t) nin );
-   g0 = astMalloc( sizeof(double)*(size_t) nin );
-   w0 = astMalloc( sizeof(double)*(size_t) nout );
-   tol = astMalloc( sizeof(double)*(size_t) nout );
-   partmat = astMalloc( sizeof(double *)*(size_t) nout );
-   lin = astMalloc( sizeof(int)*(size_t) nout );
-   pperm = astMalloc( sizeof(int)*(size_t) nout );
-   skycol = astMalloc( sizeof(int)*(size_t) nout );
-   cdmat = astMalloc( sizeof(double)*(size_t) (nout*nout) );
-   cdelt = astMalloc( sizeof(double)*(size_t) nout );
-
-/* For safety, initialise all other pointers. */
-   if( partmat ) for( j = 0; j < nout; j++ ) partmat[ j ] = NULL;
-   fullmat = NULL;
-
-/* Create a PointSet to hold an input (grid) position for each axis, plus 
-   an extra one. Create two other PointSets to hold corresponding
-   output (IWC) coordinates. */
-   psetg = astPointSet( nin + 1, nin, "", status );
-   ptrg = astGetPoints( psetg );
-   psetw = astPointSet( nin + 1, nout, "", status );
-   ptrw = astGetPoints( psetw );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Assume success. */
-      ret = 1;
-
-/* The next section finds a 'root' grid position for which the 
-   corresponding IWC coordinates are all good. It also finds these IWC 
-   coordinates, together with the IWC coordinates of "nin" points which 
-   are a unit distance away from the root grid position along each
-   grid axis. It also finds an estimate of the rounding error in each
-   Mapping output. 
-   ================================================================= */
-      ret = FindBasisVectors( map, nin, nout, dim, psetg, psetw, status );
-
-/* Save the grid root position in "g0". */
-      for( j = 0; j < nin; j++ ) g0[ j ] = ptrg[ j ][ 0 ];
-
-/* Save the transformed root position in "w0". This is the grid root
-   position represented as a vector within the Intermediate World
-   Coordinate system. */
-      for( j = 0; j < nout; j++ ) {
-         w0[ j ] = ptrw[ j ][ 0 ];
-
-/* Find the tolerance for positions on the j'th IWC axis. This is one
-   hundredth of the largest change in the j'th IWC axis value caused by
-   moving out 1 pixel along any grid axis. */
-         tol[ j ] = 0.0;
-         for( i = 0; i < nin; i++ ) {
-            err = fabs( ptrw[ j ][ i + 1 ] - w0[ j ] );
-            if( err > tol[ j ] ) tol[ j ] = err;     
-         }
-         tol[ j ] *= 0.01;
-
-/* If the tolerance is zero (e.g. as is produced for degenerate axes),
-   then use a tolerance equal to a very small fraction of hte degenerate
-   axis value. If the axis value is zero use a fixed small value. */
-         if( tol[ j ] == 0.0 ) tol[ j ] = w0[ j ]*DBL_EPSILON*1.0E5;
-         if( tol[ j ] == 0.0 ) tol[ j ] = sqrt( DBL_MIN );
-      }       
-
-
-/* The next section finds the CD matrix. 
-   ===================================== */
-
-/* Initialise the CD matrix elements to "all missing". */
-      for( i = 0; i < nout*nout; i++ ) cdmat[ i ] = AST__BAD;
-
-/* The elements of column "j" of the CD matrix form a vector (in Intermediate 
-   World Coords) which corresponds to a unit vector along grid axis "j". 
-   We now find these vectors for all the grid axes represented by the
-   inputs to the supplied Mapping. */
-      for( i = 0; i < nin && ret; i++ ) {
-
-/* Form a unit vector along the current input axis. */
-         for( ii = 0; ii < nin; ii++ ) g[ ii ] = 0.0;
-         g[ i ] = 1.0;
-
-/* Fit a straight line (within IWC) to the current input axis of the Mapping. 
-   The IWC vector corresponding to a unit vector along the current input axis 
-   is returned if the Mapping is linear. A NULL pointer is returned if the 
-   Mapping is not linear. */
-         partmat[ i ] = FitLine( map, g, g0, w0, dim[ i ], tol, status );
-
-/* If unsuccesful, indicate failure and break out of the loop. */
-         if( !partmat[ i ] ) {
-            ret = 0;
-            break;
-         }
-      }
-
-/* If the number of outputs for "map" is larger than the number of inputs,
-   then we will still be missing some column vectors for the CDi_j matrix
-   (which has to be square). We invent these such that the they are
-   orthogonal to all the other column vectors. Only od this if the
-   Mapping is linear. */
-      if( ret ) {
-         fullmat = OrthVectorSet( nout, nin, partmat, status );
-         if( !fullmat ) ret = 0;
-      }
-
-/* Check everything is OK. */
-      if( ret ) {
-
-/* Set up an array holding index of the Mapping output corresponding to
-   each IWC axis (the inverse of "wperm"). Also look for matching pairs of
-   celestial WCS axes. For the first such pair, note the corresponding 
-   column indices and the diagonal element of the matrix which gives the
-   scaling for the axis (taking account of the permutation of WCS axes). 
-   Also note if the Mapping from intermediate world coords to final world
-   coords is linear for each axis (this is assumed to be the case if the
-   axis is part of a simple Frame). */
-         sfrm = NULL;
-         skydiag0 = AST__BAD;
-         skydiag1 = AST__BAD;
-         skycol0 = -1;
-         skycol1 = -1;
-         for( i = 0; i < nout; i++ ) {
-            pperm[ wperm[ i ] ] = i;
-
-            astPrimaryFrame( fr, i, &pfrm, &paxis );
-            if( astIsASkyFrame( pfrm ) ) {
-               skycol[ wperm[ i ] ] = paxis + 1;
-               lin[ i ] = 0;
-               if( !sfrm ) {
-                  sfrm = pfrm;
-                  skycol0 = wperm[ i ];
-                  skydiag0 = fullmat[ skycol0 ][ i ];
-               } else if( sfrm == pfrm ) {
-                  skycol1 = wperm[ i ];
-                  skydiag1 = fullmat[ skycol1 ][ i ];
-               } else {
-                  pfrm = astAnnul( pfrm );                  
-               }
-            } else {
-               skycol[ wperm[ i ] ] = 0;
-               lin[ i ] = !strcmp( astGetClass( pfrm ), "Frame" );
-               pfrm = astAnnul( pfrm );                  
-            }
-         }
-         if( sfrm ) sfrm = astAnnul( sfrm );
-
-/* We now have the complete CDi_j matrix. Now to find the CRPIX values.
-   These are the grid coords of the reference point (which corresponds to
-   the origin of Intermediate World Coords). The "w0" array currently holds 
-   the position of the root position, as a position within IWC, and the
-   "g0" array holds the corresponding position in grid coordinates. We 
-   also have IWC vectors which correspond to unit vectors on each grid 
-   axis. The CRPIX values are defined by the matrix equation
-
-        w0 = fullmat*( g0 - crpix )
-
-   The "g0" array only contains "nin" values. If nout>nin, then the
-   missing g0 values will be assumed to be zero when we come to find the
-   CRPIX values below. 
-
-   We use palSlaDmat to solve this system of simultaneous equations to get
-   crpix. The "y" array initially holds "w0" but is over-written to hold 
-   "g0 - crpix". */
-         mat = astMalloc( sizeof( double )*(size_t)( nout*nout ) );
-         y = astMalloc( sizeof( double )*(size_t) nout );
-         iw = astMalloc( sizeof( int )*(size_t) nout );
-         if( astOK ) {
-            m = mat;
-            for( i = 0; i < nout; i++ ) {
-               for( j = 0; j < nout; j++ ) *(m++) = fullmat[ j ][ i ];
-               y[ i ] = w0[ i ];
-            }               
-            palSlaDmat( nout, mat, y, &det, &sing, iw );
-         }
-         mat = astFree( mat );
-         iw = astFree( iw );
-
-/* Loop round all axes, storing the column vector pointer. */
-         for( j = 0; j < nout; j++ ) {
-            colvec = fullmat[ j ];
-
-/* Get the CRPIX values from the "y" vector created above by palSlaDmat.
-   First deal with axes for which there are Mapping inputs. */
-            if( j < nin ) {
-               crp = g0[ j ] - y[ j ];
-
-/* If this is a grid axis which has been created to represent a "missing" 
-   input to the mapping, we need to add on 1.0 to the crpix value found
-   above. This is because the "w0" vector corresponds to a value of zero
-   on any missing axes, but the FITS grid value for any missing axes is
-   1.0. */
-            } else {
-               crp = 1.0 - y[ j ];
-            }
-
-/* Store the CD and CRPIX values for axes which correspond to inputs 
-   of "map". The CD matrix elements are stored in an array and are 
-   converted later to the corresponding PC and CDELT values. */
-            if( j < nin || crp == 0.0 ) {
-               for( i = 0; i < nout; i++ ) {
-                  cdmat[ wperm[ i ]*nout+j ] = colvec[ i ] ;
-               }
-
-               SetItem( &(store->crpix), 0, j, s, crp, status );
-
-
-/* The length of the unit vector along any "degenerate" axes was fixed
-   arbitrarily at 1.0 by the call to OrthVectorSet. We can probably
-   choose a more appropriate vector length. The choice shouldn't make any
-   difference to the transformation, but an appropriate value will look 
-   more natural to human readers. */
-            } else {
-
-/* First, try to arrange for longitude/latitude axis pairs to have the same 
-   scale. Do we have a matching pair of celestial axes? */
-               k = AST__BAD;
-               if( skydiag0 != AST__BAD && skydiag1 != AST__BAD ) {
-
-/* Is the current column the one which corresponds to the first celestial
-   axis, and does the other sky column correspond to a Mapping input? */
-                  if( skycol0 == j && skycol1 < nin ) {
-
-/* If so, scale this column so that its diagonal element is the negative
-   of the diagonal element of the other axis. This is on the assumption that 
-   the scales on the two axes should be equal, and that longitude increases 
-   east whilst latitude increases north, and that the CD matrix does not 
-   introduce an axis permutation. */
-                     if( skydiag0 != 0.0 ) k = -skydiag1/skydiag0;
-
-/* Now see if the current column the one which corresponds to the second 
-   celestial axis. Do the same as above. */
-                  } else if( skycol1 == j && skycol0 < nin ) {
-                     if( skydiag1 != 0.0 ) k = -skydiag0/skydiag1;
-
-/* If neither of the above conditions was met, assume a diagonal element 
-   value of 1.0 degrees for latitude axes, and -1.0 degrees for longitude 
-   axes. */
-                  } 
-               }
-
-/* If this failed, the next choice is to arrange for diagonally opposite 
-   elements to be equal and opposite in value. Look for the element of the 
-   column which has the largest diagonally opposite element, and choose a 
-   scaling factor which makes this column element equal to the negative value 
-   of its diagonally opposite element. Be careful to take axis permutations 
-   into account when finding the value of the diagonal element. */
-               if( k == AST__BAD ) {
-                  mxcv = 0.0;
-                  ii = pperm[ j ];
-                  for( i = 0; i < nout; i++ ) {
-                     jj = wperm[ i ];
-                     if( jj < nin ) {
-                        cv = fullmat[ jj ][ ii ];
-                        if( !EQUAL( colvec[ i ], 0.0 ) && fabs( cv ) > mxcv ) {
-                           mxcv = fabs( cv );
-                           k = -cv/colvec[ i ];
-                        }
-                     }
-                  }
-               }
-
-/* If still no scaling factor is available, use a scaling factor which
-   produces a diagonal element of 1.0 degree if the corresponding row is a
-   sky latitude axis, -1.0 degree of sky longitude axes, and 1.0 for other 
-   axes. */
-               if( k == AST__BAD && colvec[ pperm[ j ] ] != 0.0 ) {
-                  if( skycol[ j ] ) { 
-                     k = AST__DD2R/colvec[ pperm[ j ] ];
-                     if( skycol[ j ] == 1 ) k = -k;
-                  } else {
-                     k = 1.0/colvec[ pperm[ j ] ];
-                  }
-               }
-
-/* If we still do not have a scaling, use 1.0 (no scaling). */
-               if( k == AST__BAD ) k = 1.0;
-
-/* Now scale and store the column elements. */
-               for( i = 0; i < nout; i++ ) {
-                  cdmat[ wperm[ i ]*nout+j ] = k*colvec[ i ];
-               }
-
-/* Find the corresponding modified CRPIX value and store it. */
-               crp = 1.0 + ( crp - 1.0 )/k;
-               SetItem( &(store->crpix), 0, j, s, crp, status );
-            }
-
-/* Free resources */
-            if( pfrm ) pfrm = astAnnul( pfrm );
-
-         }
-
-/* Any "degenerate" axes added in the above process for which the
-   intermediate->world mapping is linear, and which depend only on one
-   pixel axis, can be adjusted so that the reference point is at grid 
-   coord 1.0. */
-         for( i = 0; i < nout; i++ ) {
-            if( lin[ i ] ) {
-
-/* Check only one pixel axis contributes to this intermediate world axis
-   and find which one it is. */
-               jax = -1;
-               for( j = 0; j < nout; j++ ) {
-                  if( !EQUAL( fullmat[ j ][ i ], 0.0 ) ) {
-                     if( jax == -1 ) {
-                        jax = j;
-                     } else {
-                        jax = -1;
-                        break;
-                     }
-                  }
-               }
-
-/* We only adjust values for "degenerate" axes. */
-               if( jax >= nin ) {
-
-/* Check that this pixel axis only contributes to the single world axis
-   currently being considered. */
-                  for( ii = 0; ii < nout; ii++ ) { 
-                     if( ii != i ) {
-                        if( !EQUAL( fullmat[ jax ][ ii ], 0.0 ) ) {
-                           jax = -1;
-                           break;
-                        }
-                     }
-                  }
-
-                  if( jax != -1 ) {
-
-/* Get the original CRVAL, CRPIX and CD values. Check they are defined.*/
-                     crv = GetItem( &(store->crval), wperm[ i ], 0, s, NULL, 
-                                    method, class, status );
-                     cd = cdmat[ wperm[ i ]*nout + jax ];
-                     crp = GetItem( &(store->crpix), 0, jax, s, NULL, method, class, status );
-                     if( crv != AST__BAD && crp != AST__BAD && 
-                         cd != AST__BAD ) {
-
-/* Modify the CRPIX to be 1.0 and modify the CRVAL value accordingly. */
-                        SetItem( &(store->crpix), 0, jax, s, 1.0, status );
-                        SetItem( &(store->crval), wperm[ i ], 0, s, 
-                                 cd*( 1.0 - crp ) + crv, status );
-                     }
-                  }
-               }
-            }
-         }
-
-/* Finally, if there are fewer input axes than output axes, put a value for 
-   the WCSAXES keyword into the store. */
-         if( nin < nwcs ) SetItem( &(store->wcsaxes), 0, 0, s, nwcs, status );
-
-/* Release resources. */
-         y = astFree( y );
-      }
-
-/* Produce and store PC and CDELT values from the above CD matrix */
-      SplitMat( nout, cdmat, cdelt, status );
-      c = cdmat;
-      d = cdelt;
-      for( i = 0; i < nout; i++ ){
-         for( j = 0; j < nout; j++ ){
-            val = *(c++);
-            if( i == j ){
-               if( EQUAL( val, 1.0 ) ) val = AST__BAD;
-            } else {
-               if( EQUAL( val, 0.0 ) ) val = AST__BAD;
-            }
-            if( val != AST__BAD ) SetItem( &(store->pc), i, j, s, val, status );
-         }
-         SetItem( &(store->cdelt), i, 0, s, *(d++), status );
-      }
-   }
-
-/* Annul pointsets. */
-   psetg = astAnnul( psetg );
-   psetw = astAnnul( psetw );
-
-/* Free other resources*/
-   map = astAnnul( map );
-   if( fullmat ) for( j = 0; j < nout; j++ ) fullmat[ j ] = astFree( fullmat[ j ] );
-   if( partmat ) for( j = 0; j < nout; j++ ) partmat[ j ] = astFree( partmat[ j ] );
-   fullmat = astFree( fullmat );
-   partmat = astFree( partmat );
-   cdmat = astFree( cdmat );
-   cdelt = astFree( cdelt );
-   g = astFree( g );
-   g0 = astFree( g0 );
-   w0 = astFree( w0 );
-   tol = astFree( tol );
-   lin = astFree( lin );
-   skycol = astFree( skycol );
-   pperm = astFree( pperm );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;         /* Pointer to FitsChan structure */
-   int result;                /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NUL. */
-   if( ! this_object ) return result;
-
-/* Obtain a pointers to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->keyseq, mode, extra, fail );
-   if( !result ) result = astManageLock( this->keywords, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int Match( const char *test, const char *temp, int maxfld, int *fields,
-                  int *nfld, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Sees if a test keyword name matches a template.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Match( const char *test, const char *temp, int maxfld, int *fields,
-*                int *nfld, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     All characters in the template other than "%" (and the field width
-*     and type specifiers which follow a "%") must be matched by an 
-*     identical character (ignoring case) in the test string. If a "%" occurs 
-*     in the template, then the next character in the template should be a
-*     single digit specifying a field width. If it is zero, then the test 
-*     string may contain zero or more matching characters. Otherwise,
-*     the test string must contain exactly the specified number of matching 
-*     characters (i.e. 1 to 9). The field width digit may be omitted, in 
-*     which case the test string must contain one or more matching 
-*     characters. The next character in the template specifies the type of 
-*     matching characters and must be one of "d", "c" or "f". Decimal digits 
-*     are matched by "d", all upper (but not lower) case alphabetical 
-*     characters are matched by "c", and all characters which are legal within 
-*     a FITS keyword (i.e. upper case letters, digits, underscores and 
-*     hyphens) are matched by "f".
-
-*  Parameters:
-*     test
-*        Pointer to a null terminated string holding the keyword name to
-*        be tested.
-*     temp
-*        Pointer to a null terminated string holding the template.
-*     maxfld
-*        The maximum number of integer field values which should be
-*        returned in "fields".
-*     fields
-*        A pointer to an array of at least "maxfld" integers. This is
-*        returned holding the values of any integer fields specified
-*        in the template. The values are extracted from the test string,
-*        and stored in the order they appear in the template string.
-*     nfld
-*        Pointer to a location at which is returned the total number of 
-*        integer fields in the test string. This may be more than the 
-*        number returned in "fields" if "maxfld" is smaller than "*nfld".
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the test string does not match the template
-*     string, and one is returned if it does.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS     /* Declare the thread specific global data */
-   char type;             /* Field type specifier */
-   const char *a;         /* Pointer to next test character */
-   const char *b;         /* Pointer to next template character */
-   int extend;            /* Can the width of the first field be extended? */
-   int i;                 /* Field index */
-   int match;             /* Does "test" match "temp"? */ 
-   int nfret;             /* No. of fields returned */
-   int tmp;               /* Field value */
-
-/* Check global status. */
-   if( !astOK ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* On the first entry to this function, indicate that no integer fields 
-   have yet been returned, and save a pointer to the start of the template
-   string. */
-   if( !match_nentry ) {
-      *nfld = 0;
-      match_template = temp;
-   }
-
-/* Increment the number of entries into this function. */
-   match_nentry++;
-
-/* Initialise pointers to the start of each string. */
-   a = test;
-   b = temp;
-
-/* Initialise the returned flag to indicate that the two strings do not
-   match. */
-   match = 0;
-
-/* Check that the initial part of the test string can match the first 
-   field in the template. */
-   if( MatchFront( a, b, &type, &extend, &match_na, &match_nb, method, class, match_template, status ) ){
-
-/* If it does, increment the pointers to skip over the characters 
-   used up in the comparison. */
-      a += match_na;
-      b += match_nb;
-
-/* If the ends of both strings have been reached, they match. */
-      if( *a == 0 && *b == 0 ){
-         match = 1;
-
-/* Otherwise, if the end of the template has been reached but there are 
-   still characters to be read from the test string, we could still have 
-   a match if all the remaining test characters match an extandable field. */
-      } else if( *b == 0 && *a != 0 && extend ){
-
-/* Loop until all the matching characters have been read from the end of
-   the test string. */
-         while( *a != 0 && MatchChar( *a, type, method, class, match_template, status ) ) a++;
-
-/* If we reached the end of the test string, we have a match. */
-         if( *a == 0 ) match = 1;
-
-/* Otherwise, we need to carry on checking the remaining fields. */
-      } else {
-
-/* Call this function recursively to see if the remainder of the
-   strings match. */
-         if( Match( a, b, maxfld, fields, nfld, method, class, status ) ){
-            match = 1;
-
-/* If the remainder of the strings do not match, we may be able to make 
-   them match by using up some extra test characters on the first field.
-   This can only be done if the first field has an unspecified field width,
-   and if the next test character if of a type which matches the first
-   field in the template. */
-         } else if( extend ){
-
-/* Loop until all the suitable characters have been read from the 
-   test string. Break out of the loop early if we find a field width
-   which results in the whole string matching. */
-            while( MatchChar( *a, type, method, class, match_template, status ) ){
-               a++;
-
-               if( Match( a, b, maxfld, fields, nfld, method, class, status ) ){
-                  match = 1;
-                  break;
-               }
-
-            }
-         
-         }
-      
-      }
-   
-   }
-
-/* If the strings match and the leading field is an integer, decode
-   the field and store it in the supplied array (if there is room). */
-   if( match && type == 'd' && a > test ){
-      if( *nfld < maxfld ){
-         sprintf( match_fmt, "%%%dd", (int) ( a - test ) );
-         astSscanf( test, match_fmt, fields + *nfld );
-      }
-      (*nfld)++;
-   }
-
-/* Decrement the number of entries into this function. */
-   match_nentry--;
-
-/* If we are leaving this function for the last time, reverse the
-   order of the returned integer fields so that they are returned
-   in the same order that they occur in the template. */
-   if( !match_nentry ){
-      nfret = ( *nfld < maxfld ) ? (*nfld) : maxfld;
-      match_pa = fields;
-      match_pb = fields + nfret - 1;
-      for( i = 0; i < nfret/2; i++ ){
-         tmp = *match_pa;
-         *(match_pa++) = *match_pb;
-         *(match_pb--) = tmp;
-      }
-   }
-
-/* Return the result. */
-   return match;
-
-}
-
-static int MatchChar( char test, char type, const char *method, 
-                      const char *class, const char *template, int *status ){
-/*
-*  Name:
-*     MatchChar
-
-*  Purpose:
-*     See if a given character is of a specified type.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int MatchChar( char test, char type, const char *method, 
-*                    const char *class, const char *template, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function checks that the supplied test character belongs
-*     to the set of characters specified by the parameter "type".
-
-*  Parameters:
-*     test
-*        The character to test.
-*     type
-*        The character specifying the set of acceptable characters. This 
-*        should be one of the field type characters accepted by function 
-*        Match (e.g. "d", "c" or "f").
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     template
-*        Pointer to the start of the whole template string, for use in error
-*        messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the test character does not belongs to the 
-*     specified character set, and one is returned if it does.
-
-*  Notes:
-*     -  An error is reported if the type specifier is not legal.
-*     -  Zero is returned if an error has already occurred, or if ths
-*     function fails for any reason.
-
-*/
-
-/* Local Variables: */
-   int ret;            /* Returned flag */
-
-/* Check global status. */
-   ret = 0;
-   if( !astOK ) return ret;
-
-/* Check for "d" specifiers (digits). */
-   if( type == 'd' ){
-      ret = isdigit( (int) test );
-
-/* Check for "c" specifiers (upper case letters). */
-   } else if( type == 'c' ){
-      ret = isupper( (int) test );
-
-/* Check for "s" specifiers (any legal FITS keyword character). */
-   } else if( type == 'f' ){
-      ret = isFits( (int) test );
-
-/* Report an error for any other specifier. */      
-   } else if( astOK ){
-      ret = 0;
-      astError( AST__BDFMT, "%s(%s): Illegal field type or width "
-                "specifier '%c' found in filter template '%s'.", status, 
-                method, class, type, template );
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int MatchFront( const char *test, const char *temp, char *type, 
-                       int *extend, int *ntest, int *ntemp, 
-                       const char *method, const char *class,
-                       const char *template, int *status ){
-/*
-*  Name:
-*     MatchFront
-
-*  Purpose:
-*     Sees if the start of a test string matches the start of a template.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int MatchFront( const char *test, const char *temp, char *type, 
-*                     int *extend, int *ntest, int *ntemp, 
-*                     const char *method, const char *class,
-*                     const char *template )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function looks for a match between the first field in the 
-*     template string and the string at the start of the test string,
-*     using the syntax described in function Match.
-
-*  Parameters:
-*     test
-*        Pointer to a null terminated string holding the keyword name to
-*        be tested.
-*     temp
-*        Pointer to a null terminated string holding the template.
-*     type
-*        Pointer to a location at which to return a character specifying the
-*        sort of field that was matched. This will be one of the legal field
-*        types accepted by Match (e.g. "d", "c" or "f"), or null (zero) if
-*        the first field in the template string was a literal character (i.e. 
-*        did not start with a "%").
-*     extend
-*        Pointer to a location at which to return a flag which will be non-zero 
-*        if the further test characters could be matched by the first field in 
-*        the template. This will be the case if the template field only 
-*        specifies a minimum number of matching characters (i.e. if the field 
-*        width can be extended). For instance, "%d" can be extended, but "%1d" 
-*        cannot.
-*     ntest
-*        Pointer to a location at which to return the number of characters 
-*        matched in the test string. This will be the minimum number allowed 
-*        by the template field.
-*     ntemp
-*        Pointer to a location at which to return the number of characters 
-*        read from the template string (i.e. the number of characters in the 
-*        field specification).
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     template
-*        Pointer to the start of the whole template string, for use in error
-*        messages.
-
-*  Returned Value:
-*     Zero is returned if the test string starts with fewer than the 
-*     minimum number of characters matching the template string, and one 
-*     is returned if it does.
-
-*  Notes:
-*     -  Zero is returned if an error has already occurred, or if this
-*     function fails for any reason.
-
-*/
-
-/* Local Variables: */
-   const char *a;     /* Pointer to next test character */
-   const char *b;     /* Pointer to next template character */
-   int i;             /* Character index */
-   int match;         /* Does "test" match "temp"? */
-
-/* Check global status. */
-   if( !astOK ) return 0;
-
-/* Initialise pointers to the start of each string. */
-   a = test;
-   b = temp;
-
-/* Initialise the returned value to indicate that the strings match. */
-   match = 1;
-   
-/* If the current character in the template is not a % sign, it must 
-   match the current character in the test string (except for case). */
-   if( *b != '%' ){
-      if( toupper( (int) *b ) != toupper( (int) *a ) ) {
-         match = 0;
-
-/* If the characters match, return all the required information. */
-      } else {
-         *type = 0;
-         *extend = 0;
-         *ntest = 1;
-         *ntemp = 1;
-      }
-
-/* If the current character of the template is a %, we need to match
-   a field. */
-   } else {
-      *ntemp = 3;
-
-/* The next character in the template string determines the field width. 
-   Get the lowest number of characters which must match in the test string,
-   and set a flag indicating if this lowest limit can be extended. */
-      b++;         
-      if( *b == '0' ){
-         *ntest = 0;
-         *extend = 1;
-
-      } else if( *b == '1' ){
-         *ntest = 1;
-         *extend = 0;
-
-      } else if( *b == '2' ){
-         *ntest = 2;
-         *extend = 0;
-
-      } else if( *b == '3' ){
-         *ntest = 3;
-         *extend = 0;
-
-      } else if( *b == '4' ){
-         *ntest = 4;
-         *extend = 0;
-
-      } else if( *b == '5' ){
-         *ntest = 5;
-         *extend = 0;
-
-      } else if( *b == '6' ){
-         *ntest = 6;
-         *extend = 0;
-
-      } else if( *b == '7' ){
-         *ntest = 7;
-         *extend = 0;
-
-      } else if( *b == '8' ){
-         *ntest = 8;
-         *extend = 0;
-
-      } else if( *b == '9' ){
-         *ntest = 9;
-         *extend = 0;
-
-/* If no field width was given, one or more test characters are matched.
-   Step back a character so that the current character will be re-used as
-   the type specifier. */
-      } else {
-         *ntest = 1;
-         *extend = 1;      
-         b--;                
-         (*ntemp)--;
-      }
-
-/* The next template character gives the type of character which should 
-   be matched. */
-      b++;
-      *type = *b;
-
-/* Report an error if the template string ended within the field 
-   specifier. */
-      if( !*b ){
-         match = 0;
-         astError( AST__BDFMT, "%s(%s): Incomplete field specifier found "
-                   "at end of filter template '%s'.", status, method, class, 
-                   template );
-
-/* Otherwise, check that the test string starts with the minimum allowed 
-   number of characters matching the specified type. */
-      } else {
-
-         for( i = 0; i < *ntest; i++ ){
-            if( !MatchChar( *a, *type, method, class, template, status ) ){
-               match = 0;
-               break;
-            }
-            a++;
-         }
-
-      }
-
-   }
-
-/* Return the answer. */
-   return match;
-
-}
-
-static void MarkCard( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     MarkCard
-
-*  Purpose:
-*     Mark the current card as having been read into an AST object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void MarkCard( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The current card is marked as having been "provisionally used" in
-*     the construction of an AST object. If the Object is constructed 
-*     succesfully, such cards are marked as having been definitely used,
-*     and they are then considered to have been removed from the FitsChan.
- 
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the list of cards.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The card remains the current card even though it is now marked
-*     as having been read.
-
-*/
-   int flags;
-
-/* Return if the global error status has been set, or the current card
-   is not defined. */
-   if( !astOK || !this->card ) return;
-
-/* Set the PROVISIONALLY_USED flag in the current card, but only if the
-   PROTECTED flag is not set. */
-   flags = ( (FitsCard *) this->card )->flags;
-   if( !( flags & PROTECTED ) ) {
-      ( (FitsCard *) this->card )->flags = flags | PROVISIONALLY_USED;
-   }
-}
-
-static int MoveCard( AstFitsChan *this, int move, const char *method,
-                      const char *class, int *status ){
-/*
-*  Name:
-*     MoveCard
-
-*  Purpose:
-*     Move the current card a given number of cards forward or backwards.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int MoveCard( AstFitsChan *this, int move, const char *method,
-*                    const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The current card is increment by the given number of cards, ignoring
-*     cards which have been read into an AST object if the ignore_used flag 
-*     is set non-zero.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the list of cards.
-*     move
-*        The number of cards by which to move the current card. Positive
-*        values move towards the end-of-file. Negative values move
-*        towards the start of the file (i.e. the list head).
-*     method
-*        Pointer to string holding name of calling method.
-*     class
-*        Pointer to string holding object class.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of cards actually moved. This may not always be equal to
-*     the requested number (for instance, if the end or start of the
-*     FitsChan is encountered first).
-
-*  Notes:
-*     -  If the end-of-file is reached before the required number of
-*     cards have been skipped, the current card is set NULL, to indicate
-*     an end-of-file condition.
-*     -  If the start of the file is reached before the required number of
-*     cards have been skipped, the current card is left pointing to the
-*     first usable card.
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Declare the thread specific global data */
-   FitsCard *card;         /* The current card */
-   FitsCard *card0;        /* The previous non-deleted card */
-   int moved;              /* The number of cards moved by so far */
-
-/* Return if the supplied object is NULL or the FitsChan is
-   empty, or zero movement is requested. */
-   if( !this || !this->head || !move ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Get a pointer to the current card. */
-   card = (FitsCard *) this->card;
-
-/* Initialise the number of cards moved so far. */
-   moved = 0;
-
-/* First deal with positive movements (towards the end-of-file). */
-   if( move > 0 ){
-
-/* Loop round moving on to the next card until the correct number of
-   moves have been made, or the end-of-file is reached. */
-      while( moved < move && card ){
-
-/* Get a pointer to the next card in the list, reporting an error if the
-   links are inconsistent. */
-         card = GetLink( card, NEXT, method, class, status );
-
-/* If we have moved past the last card and are now pointing back at the
-   list head, then indicate that we are at end-of-file by setting the
-   card pointer NULL. */
-         if( (void *) card == this->head ){
-            card = NULL;
-
-/* Otherwise, increment the number of cards moved. We ignore cards which
-   have been read into an AST object if the external "ignore_used" flag is 
-   set. */
-         } else if( card ){
-            if( !CARDUSED(card) ) moved++;
-         }
-      }
-
-/* Now deal with negative movements (towards the list head), so long as
-   we are not currently at the list head. */
-   } else if( (void *) card != this->head ){
-
-/* If we are currently at end-of-file, replace the NULL pointer for the
-   current card with a pointer to the list head. The first step backwards
-   will make the last card the current card. */
-      if( !card ) card = (FitsCard *) this->head;
-
-/* Loop round until the correct number of cards have been moved. */
-      while( moved < -move && card ){
-
-/* If cards which have been read into an AST object are to be included in the 
-   count of moved cards, get a pointer to the previous card in the list, 
-   reporting an error if the links are inconsistent. */
-         if( !ignore_used ){
-            card = GetLink( card, PREVIOUS, method, class, status );
-
-/* If cards which have been read into an AST object are to be ignored... */
-         } else {
-
-/* We need to find the previous card which has not been read into an AST
-   object. We do not search beyond the start of the list. */
-            card0 = GetLink( card, PREVIOUS, method, class, status );
-            while( card0 && CARDUSED(card0) && (void *) card0 != this->head ){
-               card0 = GetLink( card0, PREVIOUS, method, class, status );
-            }
-
-/* If no such card was found we leave the card where it is. */
-            if( card0 && ( card0->flags & USED ) ) {
-               break;
-
-/* Otherwise, move back to card found above. */
-            } else {
-               card = card0;
-            }
-
-         }
-
-/* Increment the number of cards moved. */
-         moved++;
-
-/* If the current card is the list head, break out of the loop. */
-         if( (void *) card == this->head ) break;
-
-      }
-
-   }
-
-/* Store the new current card. */
-   this->card = (void *) card;
-
-/* Return the answer. */
-   return moved;
-
-}
-
-static double NearestPix( AstMapping *map, double val, int axis, int *status ){
-/*
-*  Name:
-*     NearestPix
-
-*  Purpose:
-*     Find an axis value which corresponds to an integer pixel value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double NearestPix( AstMapping *map, double val, int axis, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The supplied axis value is transformed using the inverse of the
-*     supplied Mapping (other axes are given the value AST__BAD). The
-*     resulting axis values are rounded to the nearest whole number, and
-*     then transformed back using the supplied Mapping in the forward
-*     direction. If the nominated axis value is good, it is returned as
-*     the function value, otherwise the supplied value is returned unchanged.
-
-*  Parameters:
-*     map
-*        A Mapping (usually the input coordinates will correspond to
-*        pixel coordinates).
-*     val
-*        A value for one of the outputs of the "map" Mapping.
-*     axis
-*        The index of the Mapping output to which "val" refers.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Retuned Value:
-*     The modified output axis value.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;     /* Pixel coords PointSet */
-   AstPointSet *pset2;     /* WCS coords PointSet */
-   double **ptr1;          /* Pointer to data in pset1 */
-   double **ptr2;          /* Pointer to data in pset2 */
-   double result;           /* Returned value */
-   int i;                   /* Loop count */
-   int nin;                 /* Number of Mapping inputs */
-   int nout;                /* Number of Mapping outputs */
-
-/* Initialise. */
-   result = val;
-
-/* Check inherited status, and that the supplied value is good. */
-   if( !astOK || result == AST__BAD ) return result;
-
-/* Get the number of input and output coordinates. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Create PointSets to hold a single input position and the corresponding 
-   output position. */
-   pset1 = astPointSet( 1, nin, "", status );
-   ptr1 = astGetPoints( pset1 );
-   pset2 = astPointSet( 1, nout, "", status );
-   ptr2 = astGetPoints( pset2 );
-   if( astOK ) {
-
-/* Assign AST__BAD values to all output axes, except for the specified 
-   axis, which is given the supplied axis value. */
-      for( i = 0; i < nout; i++ ) ptr2[ i ][ 0 ] = AST__BAD;
-      ptr2[ axis ][ 0 ] = val;
-
-/* Transform this output position into an input position. */
-      (void) astTransform( map, pset2, 0, pset1 );
-
-/* Round all good axis values in the resulting input position to the nearest 
-   integer. */
-      for( i = 0; i < nin; i++ ) {
-         if( ptr1[ i ][ 0 ] != AST__BAD ) {
-            ptr1[ i ][ 0 ] = (int) ( ptr1[ i ][ 0 ] + 0.5 );
-         }
-      }
-     
-/* Transform this input position back into output coords. */
-      (void) astTransform( map, pset1, 1, pset2 );
-
-/* If the resulting axis value is good, return it. */
-      if( ptr2[ axis ] [ 0 ] != AST__BAD ) result = ptr2[ axis ] [ 0 ];     
-
-   }
-
-/* Free resources. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Return the result. */
-   return result;
-}
-
-static void NewCard( AstFitsChan *this, const char *name, int type, 
-                     const void *data, const char *comment, int flags, 
-                     int *status ){
-/*
-*  Name:
-*     NewCard
-
-*  Purpose:
-*     Insert a new card in front of the current card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void NewCard( AstFitsChan *this, const char *name, int type, 
-*                   const void *data, const char *comment, int flags, 
-*                   int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The supplied keyword name, data type and value, and comment are
-*     stored in a new FitsCard structure, and this structure is
-*     inserted into the circular linked list stored in the supplied
-*     FitsChan. It is inserted in front of the current card.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the list of cards.
-*     name
-*        Pointer to a string holding the keyword name of the new card.
-*     type
-*        An integer value representing the data type of the keyword.
-*     data
-*        Pointer to the data associated with the keyword. 
-*     comment
-*        Pointer to a null-terminated string holding a comment. 
-*     flags
-*        The flags to assign to the card.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The new card is inserted into the list in front of the current card,
-*     so that the "next" link from the new card points to the current card. 
-*     If the FitsChan is currently at end-of-file (indicated by a NULL
-*     pointer being stored for the current card), then the card is appended
-*     to the end of the list. The pointer to the current card is left 
-*     unchanged.
-*     -  Keyword names are converted to upper case before being stored.
-*     -  Any trailing white space in a string value is saved as supplied.
-*     -  Logical values are converted to zero or one before being stored.
-*     -  The "comment" and/or "data" pointers may be supplied as NULL.
-
-*/
-
-/* Local Variables: */
-   FitsCard *new;             /* Pointer to the new card */
-   FitsCard *prev;            /* Pointer to the previous card in the list */
-   char *b;                   /* Pointer to next stored character */
-   const char *a;             /* Pointer to next supplied character */
-   int lval;                  /* Logical data value restricted to 0 or 1 */
-   int nc;                    /* No. of characters to store */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get memory to hold the new FitsCard structure. */
-   new = (FitsCard *) astMalloc( sizeof( FitsCard ) );
-
-/* Check the pointer can be used. */
-   if( astOK ){
-     
-/* Copy the keyword name, converting to upper case. */
-      a = name;
-      b = new->name;
-      while( *a ) *(b++) = (char) toupper( (int) *(a++) );
-      *b = 0;
-
-/* Ensure that a KeyMap exists to hold the keywords currently in the
-   FitsChan. */
-      if( !this->keywords ) this->keywords = astKeyMap( "", status );
-
-/* Add the keyword name to the KeyMap. The value associated with the
-   KeyMap entry is not used and is set arbitrarily to zero. */
-      astMapPut0I( this->keywords, new->name, 0, NULL );
-
-/* Copy the data type. */
-      new->type = type;
-
-/* Copy any data (ignore any data supplied for an UNDEF value). */
-      if( data && type != AST__UNDEF ){
-
-/* Logical values are converted to zero or one before being stored. */
-         if( type == AST__LOGICAL ){
-            lval = *( (int *) data ) ? 1 : 0;
-            new->size = sizeof( int );
-            new->data = astStore( NULL, (void *) &lval, sizeof( int ) );
-
-/* String values... */
-         } else if( type == AST__STRING || type == AST__CONTINUE ){
-
-/* Find the number of characters excluding the trailing null character. */
-            nc = strlen( data );
-
-/* Store the string, reserving room for a terminating null. */
-            new->size = (size_t)( nc + 1 );
-            new->data = astStore( NULL, (void *) data, (size_t)( nc + 1 ) );
-
-/* Terminate it. */
-            ( (char *) new->data)[ nc ] = 0;
-
-/* Other types are stored as supplied. */
-         } else if( type == AST__INT ){
-            new->size = sizeof( int );
-            new->data = astStore( NULL, (void *) data, sizeof( int ) );
-
-         } else if( type == AST__FLOAT ){
-            new->size = sizeof( double );
-            new->data = astStore( NULL, (void *) data, sizeof( double ) );
-
-         } else if( type == AST__COMPLEXF ){
-            new->size = 2*sizeof( double );
-            new->data = astStore( NULL, (void *) data, 2*sizeof( double ) );
-
-         } else if( type == AST__COMPLEXI ){
-            new->size = 2*sizeof( int );
-            new->data = astStore( NULL, (void *) data, 2*sizeof( int ) );
-
-         } else {
-            new->size = 0;
-            new->data = NULL;
-         }
-
-      } else {
-         new->size = 0;
-         new->data = NULL;
-      }
-
-/* Find the first non-blank character in the comment, and find the used
-   length of the remaining string. We retain leading and trailing white
-   space if the card is a COMMENT card. */
-      if( comment ){
-         a = comment;
-         if( type != AST__COMMENT ) {
-            while( isspace( *a ) ) a++;
-            nc = ChrLen( a, status );
-         } else {
-            nc = strlen( a );
-         }
-      } else {
-         nc = 0;
-      }
-
-/* Copy any comment, excluding leading and trailing white space unless
-   this is a COMMENT card */
-      if( nc > 0 ){
-         new->comment = astStore( NULL, (void *) a, (size_t)( nc + 1 ) );
-         ( (char *) new->comment)[ nc ] = 0;
-      } else {
-         new->comment = NULL;
-      }
-      
-/* Set the supplied flag values. */
-      new->flags = flags;
-
-/* Insert the copied card into the list, in front of the current card. If
-   the current card is the list head, make the new card the list head. */
-      if( this->card ){
-         prev = ( ( FitsCard *) this->card )->prev;
-         ( ( FitsCard *) this->card )->prev = new;
-         new->prev = prev;
-
-         prev->next = new;
-         new->next = (FitsCard *) this->card;
-
-         if( this->card == this->head ) this->head = (void *) new;
-
-/* If the FitsChan is at end-of-file, append the new card to the end of
-   the list (i.e. insert it just before the list head). */
-      } else {
-
-         if( this->head ){
-            prev = ( (FitsCard *) this->head )->prev;
-            ( (FitsCard *) this->head )->prev = new;
-            new->prev = prev;
-
-            prev->next = new;
-            new->next = (FitsCard *) this->head;
-
-/* If there are no cards in the list, start a new list. */
-         } else {
-            new->prev = new;
-            new->next = new;
-            this->head = (void *) new;
-            this->card = NULL;
-         }
-
-      }
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static AstMapping *NonLinSpecWcs( AstFitsChan *this, char *algcode, 
-                                  FitsStore *store, int i, char s, 
-                                  AstSpecFrame *specfrm, const char *method, 
-                                  const char *class, int *status ) {
-/*
-*  Name:
-*     NonLinSpecWcs
-
-*  Purpose:
-*     Create a Mapping describing a FITS-WCS non-linear spectral algorithm
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *NonLinSpecWcs( AstFitsChan *this, char *algcode, 
-*                                FitsStore *store, int i, char s, 
-*                                AstSpecFrame *specfrm, const char *method, 
-*                                const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function uses the contents of the supplied FitsStore to create
-*     a Mapping which goes from Intermediate World Coordinate (known as "w" 
-*     in the context of FITS-WCS paper III) to the spectral system
-*     described by the supplied SpecFrame.
-*
-*     The returned Mapping implements the non-linear "X2P" algorithms
-*     described in FITS-WCS paper III. The axis is linearly sampled in
-*     system "X" but expressed in some other system (specified by the
-*     supplied SpecFrame).
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     algcode
-*        Pointer to a string holding the non-linear "-X2P" code for the
-*        required algorithm. This includes aleading "-" character.
-*     store
-*        Pointer to the FitsStore structure holding the values to use for 
-*        the WCS keywords. 
-*     i 
-*        The zero-based index of the spectral axis within the FITS header
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     specfrm
-*        Pointer to the SpecFrame. This specified the "S" system - the
-*        system in which the CRVAL kewyords (etc) are specified.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a Mapping, or NULL if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;
-   AstMapping *map1;
-   AstMapping *ret;
-   AstSpecFrame *xfrm;
-   AstMapping *map2;
-   char buf[ 100 ];
-   char pc;
-   double crv;
-   double ds;
-   double in_a;
-   double in_b;
-   double out_a;
-   double out_b;
-   int ok;           
-   int s_sys;
-
-/* Check the global status. */
-   ret = NULL;
-   if( !astOK ) return ret;
-
-/* Identify the spectral "X" system within the "X2P" algorithm code, and  
-   create a SpecFrame describing the X system ("X" is the system in
-   which the axis is linearly sampled). This is done by copying the 
-   supplied SpecFrame and then setting its System attribute. Copying
-   the supplied SpecFrame ensures that all the other attributes (RestFreq,
-   etc.) are set correctly. */
-   ok = 1;
-   xfrm = astCopy( specfrm );
-   if( algcode[ 1 ] == 'F' ) {
-      astSetSystem( xfrm, AST__FREQ );
-      astSetUnit( xfrm, 0, "Hz" );
-
-   } else if( algcode[ 1 ] == 'W' ) {
-      astSetSystem( xfrm, AST__WAVELEN );
-      astSetUnit( xfrm, 0, "m" );
-
-   } else if( algcode[ 1 ] == 'V' ) {
-      astSetSystem( xfrm, AST__VREL );
-      astSetUnit( xfrm, 0, "m/s" );
-
-   } else if( algcode[ 1 ] == 'A' ) {
-      astSetSystem( xfrm, AST__AIRWAVE );
-      astSetUnit( xfrm, 0, "m" );
-
-   } else {
-      ok = 0;
-   }
-
-/* If the X system was identified, find a Mapping from the "S" (specfrm)
-   system to the X system. */
-   map1 = NULL;
-   if( ok ) { 
-      ok = 0;
-      fs = astConvert( specfrm, xfrm, "" );
-      if( fs ) {
-         map1 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         fs = astAnnul( fs );
-         ok = 1;
-      }
-
-/* Issue a warning if the "P" system is not the correct one for the given 
-   "S" system. We can however continue, sine AST interprets illegal "P" 
-   systems correctly. */
-      pc = 0;
-      s_sys = astGetSystem( specfrm );
-      if( s_sys == AST__FREQ || s_sys == AST__ENERGY || 
-          s_sys == AST__WAVENUM ||  s_sys == AST__VRADIO ) {
-         pc = 'F';
-
-      } else if( s_sys == AST__WAVELEN || s_sys == AST__VOPTICAL ||
-                 s_sys == AST__REDSHIFT ){
-         pc = 'W';
-
-      } else if( s_sys == AST__AIRWAVE ) {
-         pc = 'A';
-
-      } else if( s_sys == AST__BETA || s_sys == AST__VREL ) {
-         pc = 'V';
-
-      } else if( astOK ) {
-         pc = algcode[ 3 ];
-         astError( AST__INTER, "%s: Function NonLinSpecWcs does not yet "
-                   "support spectral axes of type %s (internal AST "
-                   "programming error).", status, method, astGetC( specfrm, "System" ) );
-      }
-
-      if( algcode[ 3 ] != pc ) {
-         sprintf( buf, "The spectral CTYPE value %s%s is not legal - "
-                 "using %s%.3s%c instead.", astGetC( specfrm, "System" ),
-                 algcode,  astGetC( specfrm, "System" ), algcode, pc );
-         Warn( this, "badctype", buf, method, class, status );
-      }
-   }
-
-/* If succesfull, use this Mapping to find the reference value (CRVAL)
-   in the "X" system. */
-   if( ok ) {
-
-/* Get the CRVAL value for the spectral axis (this will be in the S system). */
-      crv = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-      if( crv == AST__BAD ) crv = 0.0;
-
-/* Convert it to the X system. */
-      astTran1( map1, 1, &crv, 1, &crv );
-
-/* Invert this Mapping so that it forward transformation goes from X to S. */
-      astInvert( map1 );
-
-/* Find the rate of change of S with respect to X (dS/dX) at the reference 
-   point (x = crv). */
-      ds = astRate( map1, &crv, 0, 0 );
-      if( ds != AST__BAD && ds != 0.0 ) {
-
-/* FITS-WCS paper III says that dS/dw must be 1.0 at the reference point.
-   Therefore dX/dw = dX/dS at the reference point. Also, since the spectral
-   axis is linear in X, dX/dw must be constant. Therefore the Mapping from 
-   IWC to X is a WinMap which scales the IWC axis ("w") by dX/dw and adds
-   on the X value at the reference point. */
-         if( crv != 0.0 ) {
-            in_a = 0.0;   
-            out_a = crv;
-            in_b = crv*ds;
-            out_b = 2.0*crv;
-            map2 = (AstMapping *) astWinMap( 1, &in_a, &in_b, &out_a, &out_b, "", status );
-
-         } else {
-            map2 = (AstMapping *) astZoomMap( 1, 1.0/ds, "", status );
-         }
-
-/* The Mapping to be returned is the concatenation of the above Mapping
-   (from w to X) with the Mapping from X to S. */
-         ret = (AstMapping *) astCmpMap( map2, map1, 1, "", status );
-         map1 = astAnnul( map1 );
-         map2 = astAnnul( map2 );
-      }
-   }
-
-   xfrm = astAnnul( xfrm );
-
-/* Return the result */
-   return ret;
-}
-
-static double *OrthVector( int n, int m, double **in, int *status ){
-/*
-*  Name:
-*     OrthVector
-
-*  Purpose:
-*     Find a unit vector which is orthogonal to a set of supplied vectors.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double *OrthVector( int n, int m, double **in, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A set of M vectors is supplied, each vector being N-dimensional.
-*     It is assumed that M < N and that the supplied vectors span M 
-*     axes within the N dimensional space. An N-dimensional unit vector is 
-*     returned which is orthogonal to all the supplied vectors.
-*
-*     The required vector is orthogonal to all the supplied vectors.
-*     Therefore the dot product of the required vector with each of the
-*     supplied vectors must be zero. This gives us M equations of the
-*     form:
-*
-*     a1*r1 + a2*r2 + a3*r3 + .... + aN*rN = 0.0
-*     b1*r1 + b2*r2 + b3*r3 + .... + bN*rN = 0.0
-*     ...
-*
-*     where (a1,a2,..,aN), (b1,b2,..,bN), ... are the supplied vectors
-*     and (r1,r2,...,rN) is the required vector. Since M is less
-*     than N the system of linear simultaneous equations is under
-*     specified and we need to assign arbitrary values to some of the
-*     components of the required vector in order to allow the equations
-*     to be solved. We arbitrarily assume that 1 element of the required 
-*     vector has value 1.0 and (N-M-1) have value zero. The selection of 
-*     *which* elements to set constant is based on the magnitudes of the 
-*     columns of coefficients (a1,b1...), (a2,b2,...), etc. The M components
-*     of the required vector which are *not* set constant are the ones which 
-*     have coefficient columns with the *largest* magnitude. This choice is
-*     made in order to minimise the risk of the remaining matrix of
-*     coefficients being singular (for instance, if a component of the
-*     required vector has a coefficient of zero in every supplied vector
-*     then the column magnitude will be zero and that component will be
-*     set to 1.0). After choosing the M largest columns, the largest
-*     remaining column is assigned a value of 1.0 in the required vector,
-*     and all other columns are assigned the value zero in the required
-*     vector. This means that the above equations becomes:
-*
-*     a1*r1 + a2*r2 + a3*r3 + .... + aM*rM = -aM+1
-*     b1*r1 + b2*r2 + b3*r3 + .... + bM*rM = -bM+1
-*     ...
-*
-*     Where the indices are now not direct indices into the supplied and
-*     returned vectors, but indices into an array of indices which have
-*     been sorted into column magnitude order. This is now a set of MxM
-*     simultaneous linear equations which we can solve using palSlaDmat:
-*
-*     MAT.R = V
-*
-*     where MAT is the the matrix of columns (coefficients) on the left
-*     hand side of the above set of simultaneous equations, R is the
-*     required vector (just the components which have *not* been set
-*     constant), and V is a constant vector equal to the column of values
-*     on the right hand side in the above set of simultaneous equations.
-*     The palSlaDmat function solves this equation to obtain R.
-
-*  Parameters:
-*     n
-*        The number of dimensions
-*     m
-*        The number of supplied vectors.
-*     in
-*        A pointer to an array with "m" elements, each element being a
-*        pointer to an array with "n" elements. Each of these "n" element 
-*        array holds one of the supplied vectors.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The pointer to some newly allocated memory holding the returned N
-*     dimensional unit vector. The memory should be freed using astFree when 
-*     no longer needed.
-
-*  Notes:
-*     -  NULL is returned if an error occurs.
-*     -  NULL is returned (without error) if the required vector cannot
-*     be found (.e.g becuase the supplied M vectors span less than M axes).
-*/
-
-/* Local Variables: */
-   double *colmag;
-   double *d;
-   double *e;
-   double *mat;
-   double *mel;
-   double *ret;
-   double *rhs;
-   double det;
-   double sl;
-   int *colperm;
-   int *iw;
-   int done;
-   int i;
-   int ih;
-   int ii;
-   int il;
-   int j;
-   int sing;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Return if any of the M supplied vectors are NULL. */
-   for( i = 0; i < m; i++ ) {
-      if( !in[ i ] ) return ret;
-   }
-
-/* Allocate rquired memory. */
-   ret = astMalloc( sizeof( double )*(size_t) n );
-   rhs = astMalloc( sizeof( double )*(size_t) m );
-   mat = astMalloc( sizeof( double )*(size_t) m*m );
-   iw = astMalloc( sizeof( int )*(size_t) m );
-   colmag = astMalloc( sizeof( double )*(size_t) n );
-   colperm = astMalloc( sizeof( int )*(size_t) n );
-
-/* Check memory can be used safely. */
-   if( astOK ) {
-
-/* Find the magnitude of each column of coefficients in the full set of 
-   simultaneous linear equations (before setting any components of the
-   required vector constant). Also initialise the column permutation array
-   to indicate that the columns are in their original order. The outer
-   loop loops through the columns and the inner loop loops through rows
-   (i.e. equations). */
-      for( i = 0; i < n; i++ ) {
-         colperm[ i ] = i;
-         colmag[ i ] = 0.0;
-         for( j = 0; j < m; j++ ) {
-            colmag[ i ] += in[ j ][ i ]*in[ j ][ i ];
-         }
-      }
-
-/* Now re-arrange the column indices within the permutation array so that 
-   they are in order of decreasing ciolumn magnitude (i.e. colperm[0] will
-   be left holding the index of the column with the largest magnitude). A
-   simple bubble sort is used. */
-      ii = 1;
-      done = 0;
-      while( !done ) {
-         done = 1;
-         for( i = ii; i < n; i++ ) {
-            ih = colperm[ i ];
-            il = colperm[ i - 1 ];
-            if( colmag[ ih ] > colmag[ il ] ) {
-               colperm[ i ] = il;
-               colperm[ i - 1 ] = ih;
-               done = 0;
-            }
-         }
-         ii++;
-      }
-
-/* The first M elements in "colperm" now hold the indices of the
-   columns which are to be used within the MAT matrix, the next element
-   of "colperm" hold the index of the column which is to be included in the 
-   V vector (other elements hold the indices of the columns which are
-   being ignored because they will be mutiplied by a value of zero - the
-   assumed value of the corresponding components of the returned vector). We 
-   now copy the these values into arrays which can be passed to palSlaDmat. 
-   First, initialise a pointer used to step through the mat array. */
-      mel = mat;
-
-/* Loop through all the supplied vectors. Get a pointer to the first
-   element of the vector. */
-      for( i = 0; i < m; i++ ) {
-         d = in[ i ];
-
-/* Copy the required M elements of this supplied vector into the work array
-   which will be passed to palSlaDmat. */
-         for( j = 0; j < m; j++ ) *(mel++) = d[ colperm[ j ] ];
-
-/* Put the next right-hand side value into the "rhs" array. */
-         rhs[ i ] = -d[ colperm[ m ] ];
-      }   
-
-/* Use palSlaDmat to find the first M elements of the returned array. These
-   are stored in "rhs", over-writing the original right-hand side values. */
-      palSlaDmat( m, mat, rhs, &det, &sing, iw );
-
-/* If the supplied vectors span fewer than M axes, the above call will fail. 
-   In this case, annul the returned vector. */
-      if( sing != 0 ) {
-         ret = astFree( ret );
-
-/* If succesful, copy the M elements of the solution vector into the
-   required M elements of the returned vector. Also find the squared length 
-   of the vector. */
-      } else {
-         sl = 0.0;
-         e = rhs;
-         for( j = 0; j < m; j++ ) {
-            sl += (*e)*(*e);
-            ret[ colperm[ j ] ] = *(e++);
-         }
-
-/* Put 1.0 into the next element of the returned vector. */
-         sl += 1.0;
-         ret[ colperm[ m ] ] = 1.0;
-
-/* Fill up the rest of the returned vector with zeros. */
-         for( j = m + 1; j < n; j++ ) ret[ colperm[ j ] ] = 0.0;
-
-/* Normalise the returned vector so that it is a unit vector.Also ensure
-   that any zeros are "+0.0" insteasd of "-0.0". */
-         e = ret;
-         sl = sqrt( sl );
-         for( j = 0; j < n; e++,j++ ) {
-            *e /= sl;
-            if( *e == 0.0 ) *e = 0.0;
-         }
-      }
-   }
-
-/* Free workspace. */
-   rhs = astFree( rhs );
-   mat = astFree( mat );
-   iw = astFree( iw );
-   colmag = astFree( colmag );
-   colperm = astFree( colperm );
-
-/* Free the returned vector if an error has occurred. */
-   if( !astOK ) ret = astFree( ret );
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static double **OrthVectorSet( int n, int m, double **in, int *status ){
-/*
-*  Name:
-*     OrthVectorSet
-
-*  Purpose:
-*     Find a set of mutually orthogonal vectors.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double **OrthVectorSet( int n, int m, double **in, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A set of M vectors is supplied, each vector being N-dimensional.
-*     It is assumed that the supplied vectors span M axes within the
-*     N dimensional space. A pointer to a set of N vectors is returned.
-*     The first M returned vectors are copies of the M supplied vectors.
-*     The remaining returned vectors are unit vectors chosen to be 
-*     orthogonal to all other vectors in the returned set.
-
-*  Parameters:
-*     n
-*        The number of dimensions
-*     m
-*        The number of supplied vectors.
-*     in
-*        A pointer to an array with "m" elements, each element being a
-*        pointer to an array with "n" elements. Each of these "n" element 
-*        array holds one of the supplied vectors.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The pointer to some newly allocated memory holding the returned N
-*     vectors. The pointer locates an array of N elements, each of which
-*     is a pointer to an array holding the N elements of a single vector.
-*     The memory (including the inner pointers) should be freed using
-*     astFree when no longer needed.
-
-*  Notes:
-*     -  NULL is returned if an error occurs.
-*     -  NULL is returned (without error) if the required vectors cannot
-*     be found (e.g. becuase the supplied M vectors span less than M axes).
-*/
-
-/* Local Variables: */
-   double **ret;
-   int i;
-   int bad;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Allocate required memory. */
-   ret = astMalloc( sizeof( double * )*(size_t) n );
-
-/* Check memory can be used safely. */
-   bad = 0;
-   if( astOK ) {
-
-/* Copy the supplied vectors into the returned array. */
-      for( i = 0; i < m; i++ ) {
-         ret[ i ] = astStore( NULL, in[ i ], sizeof( double )*n );
-      }
-
-/* For the remaining vectors, find a vector which is orthogonal to all
-   the vectors currently in the returned set. */
-      for( ; i < n; i++ ) {
-         ret[ i ] = OrthVector( n, i, ret, status );
-         if( !ret[ i ] ) bad = 1;
-      }
-   }
-
-/* Free the returned vectors if an error has occurred. */
-   if( bad || !astOK ) {
-      for( i = 0; ret && i < n; i++ ) ret[ i ] = astFree( ret[ i ] );
-      ret = astFree( ret );
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static AstMapping *OtherAxes( AstFrameSet *fs, double *dim, int *wperm, 
-                              char s, FitsStore *store, double *crvals, 
-                              int *axis_done, const char *method, 
-                              const char *class, int *status ){
-/*
-*  Name:
-*     OtherAxes
-
-*  Purpose:
-*     Add values to a FitsStore describing unknown axes in a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *OtherAxes( AstFrameSet *fs, double *dim, int *wperm, 
-*                            char s, FitsStore *store, double *crvals,
-*                            int *axis_done, const char *method, 
-*                            const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     FITS WCS keyword values are added to the supplied FitsStore which 
-*     describe any as yet undescribed axes in the supplied FrameSet. These
-*     axes are assumed to be linear and to follow the conventions
-*     of FITS-WCS paper I. Note, this function does not store
-*     values for keywords which define the transformation from pixel
-*     coords to Intermediate World Coords (CRPIX, PC and CDELT), but a
-*     Mapping is returned which embodies these values. This Mapping is
-*     from the current Frame in the FrameSet (WCS coords) to a Frame 
-*     representing IWC. The IWC Frame has the same number of axes as the 
-*     WCS Frame which may be greater than the number of base Frame (i.e. 
-*     pixel) axes.
-
-*  Parameters:
-*     fs
-*        Pointer to the FrameSet. The base Frame should represent FITS pixel
-*        coordinates, and the current Frame should represent FITS WCS
-*        coordinates. The number of base Frame axes should not exceed the
-*        number of current Frame axes.
-*     dim
-*        An array holding the image dimensions in pixels. AST__BAD can be 
-*        supplied for any unknwon dimensions.
-*     wperm
-*        Pointer to an array of integers with one element for each axis of 
-*        the current Frame. Each element holds the zero-based 
-*        index of the FITS-WCS axis (i.e. the value of "i" in the keyword 
-*        names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     store
-*        The FitsStore in which to store the FITS WCS keyword values.
-*     crvals
-*        Pointer to an array holding the default CRVAL value for each
-*        axis in the WCS Frame.
-*     axis_done 
-*        An array of flags, one for each Frame axis, which indicate if a
-*        description of the corresponding axis has yet been stored in the
-*        FitsStore. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If any axis descriptions were added to the FitsStore, a Mapping from 
-*     the current Frame of the supplied FrameSet, to the IWC Frame is returned.
-*     Otherwise, a UnitMap is returned. Note, the Mapping only defines the IWC
-*     transformation for the described axes. Any other (previously
-*     described) axes are passed unchanged by the returned Mapping.
-
-*/
-
-/* Local Variables: */
-   AstFrame *wcsfrm;       /* WCS Frame within FrameSet */
-   AstMapping *axmap;      /* Mapping from WCS to IWC */
-   AstMapping *map;        /* FITS pixel->WCS Mapping */
-   AstMapping *ret;        /* Returned Mapping */
-   AstMapping *tmap0;      /* Pointer to a temporary Mapping */
-   AstPointSet *pset1;     /* PointSet holding central pixel position */
-   AstPointSet *pset2;     /* PointSet holding reference WCS position */
-   char buf[80];           /* Text buffer */
-   const char *lab;        /* Pointer to axis Label */
-   const char *sym;        /* Pointer to axis Symbol */
-   double **ptr1;          /* Pointer to data for pset1 */
-   double **ptr2;          /* Pointer to data for pset2 */
-   double *lbnd_p;         /* Pointer to array of lower pixel bounds */
-   double *ubnd_p;         /* Pointer to array of upper pixel bounds */
-   double crval;           /* The value for the FITS CRVAL keyword */
-   int fits_i;             /* FITS WCS axis index */
-   int iax;                /* WCS Frame axis index */
-   int log_axis;           /* Is the axis logarithmically spaced? */
-   int nother;             /* Number of axes still to be described */
-   int nc;                 /* Number of characters */
-   int npix;               /* Number of pixel axes */
-   int nwcs;               /* Number of WCS axes */
-   int ok;                 /* Are all remaining axes describable? */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Get the number of WCS axes. */
-   nwcs = astGetNaxes( fs );
-
-/* Count the number of WCS axes which have not yet been described. */
-   nother = 0;
-   for( iax = 0; iax < nwcs; iax++ ) {
-      if( ! axis_done[ iax ] ) nother++;
-   }
-
-/* Only proceed if there are some axes to described. */
-   if( nother ) {
-
-/* Get a pointer to the WCS Frame. */
-      wcsfrm = astGetFrame( fs, AST__CURRENT );
-
-/* Get a pointer to the pixel->wcs Mapping. */
-      map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Store the number of pixel and WCS axes. */
-      npix = astGetNin( fs );
-      nwcs = astGetNout( fs );
-
-/* Store the upper and lower pixel bounds. */
-      lbnd_p = astMalloc( sizeof( double )*(size_t) npix );
-      ubnd_p = astMalloc( sizeof( double )*(size_t) npix );
-      if( astOK ) {
-         for( iax = 0; iax < npix; iax++ ) {
-            lbnd_p[ iax ] = 1.0;
-            ubnd_p[ iax ] = ( dim[ iax ] != AST__BAD ) ? dim[ iax ] : 500;
-         }
-      }
- 
-/* Transform the central pixel coords into WCS coords */
-      pset1 = astPointSet( 1, npix, "", status );
-      ptr1 = astGetPoints( pset1 );
-      pset2 = astPointSet( 1, nwcs, "", status );
-      ptr2 = astGetPoints( pset2 );
-      if( astOK ) {
-         for( iax = 0; iax < npix; iax++ ) {
-            ptr1[ iax ][ 0 ] = ( dim[ iax ] != AST__BAD ) ? floor( 0.5*dim[ iax ] ) : 1.0;
-         }
-         (void) astTransform( map, pset1, 1, pset2 );
-      }
-
-/* Loop round all WCS axes, producing descriptions of any axes which have not
-   yet been described. */
-      ok = 1;
-      for( iax = 0; iax < nwcs && astOK; iax++ ) {
-         if( ! axis_done[ iax ] ) {
-
-/* Get the (one-based) FITS WCS axis index to use for this Frame axis. */
-            fits_i = wperm[ iax ];
-
-/* Use the supplied default CRVAL value. If bad, use the WCS value 
-   corresponding to the central pixel found above (if this value is bad,
-   abort). */
-            crval = crvals ? crvals[ iax ] : AST__BAD;
-            if( crval == AST__BAD ) crval = ptr2[ iax ][ 0 ];
-            if( crval == AST__BAD ) {
-               ok = 0;
-               break;
-            } else {
-               SetItem( &(store->crval), fits_i, 0, s, crval, status );
-            }
-
-/* If the "log" algorithm is appropriate (as defined in FITS-WCS paper III), 
-   the supplied Frame (s) is related to pixel coordinate (p) by 
-
-      s = Sr.EXP( a*p - b ). If this
-
-   is the case, the log of s will be linearly related to pixel coordinates. 
-   Test this. If the test is passed a Mapping is returned from WCS to IWC. */
-            axmap = LogAxis( map, iax, nwcs, lbnd_p, ubnd_p, crval, status );
-
-/* If the axis is not logarthmic, we assume it is linear. Create a ShiftMap
-   which subtracts off the CRVAL value. */
-            if( !axmap ) {
-               log_axis = 0;
-               crval = -crval;
-               tmap0 = (AstMapping *) astShiftMap( 1, &crval, "", status );
-               axmap = AddUnitMaps( tmap0, iax, nwcs, status );
-               tmap0 = astAnnul( tmap0 );
-               crval = -crval;
-            } else {
-               log_axis = 1;
-            }
-
-/* Combine the Mapping for this axis in series with those of earlier axes. */
-            if( ret ) {
-               tmap0 = (AstMapping *) astCmpMap( ret, axmap, 1, "", status );
-               (void) astAnnul( ret );
-               ret = tmap0;
-            } else {
-               ret = astClone( axmap );
-            }
-            
-/* Get axis label and symbol. */
-            sym =  astGetSymbol( wcsfrm, iax );
-            lab =  astGetLabel( wcsfrm, iax );
- 
-/* The axis symbols are taken as the CTYPE values. Append "-LOG" if the
-   axis is logarithmic and the symbold does not already end with "-LOG".  */
-            if( sym && strlen( sym ) ) {
-               nc = sprintf( buf, "%s", sym );
-            } else {            
-               nc = sprintf( buf, "AXIS%d", iax + 1 );
-            }
-            if( log_axis && strcmp( buf + nc - 4, "-LOG" ) ) strcpy( buf + nc, "-LOG" );
-            SetItemC( &(store->ctype), fits_i, s, buf, status );
-
-/* The axis labels are taken as the comment for the CTYPE keywords and as
-   the CNAME keyword (but only if a label has been set and is different to 
-   the symbol). */
-            if( lab && lab[ 0 ] && astTestLabel( wcsfrm, iax ) && strcmp( sym, lab ) ) {
-               SetItemC( &(store->ctype_com), fits_i, s, (char *) lab, status );
-               SetItemC( &(store->cname), fits_i, s, (char *) lab, status );
-            } else {
-               sprintf( buf, "Type of co-ordinate on axis %d", iax + 1 );
-               SetItemC( &(store->ctype_com), fits_i, s, buf, status );
-            }
-
-/* If a value has been set for the axis units, use it as CUNIT. */
-            if( astTestUnit( wcsfrm, iax ) ){
-               SetItemC( &(store->cunit), fits_i, s, (char *) astGetUnit( wcsfrm, iax ), status );
-            }
-
-/* Indicate this axis has now been described. */
-            axis_done[ iax ] = 1;
-
-/* Release Resources. */
-            axmap = astAnnul( axmap );
-         }
-      }
-
-/* Release Resources. */
-      wcsfrm = astAnnul( wcsfrm );
-      map = astAnnul( map );
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-      lbnd_p = astFree( lbnd_p );
-      ubnd_p = astFree( ubnd_p );
-   }
-
-/* If we have a Mapping to return, simplify it. Otherwise, create
-   a UnitMap to return. */
-   if( ret ) {
-      tmap0 = ret;
-      ret = astSimplify( tmap0 );
-      tmap0 =  astAnnul( tmap0 );
-   } else {
-      ret = (AstMapping *) astUnitMap( nwcs, "", status );
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int PCFromStore( AstFitsChan *this, FitsStore *store, 
-                        const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     PCFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using FITS-PC encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int PCFromStore( AstFitsChan *this, FitsStore *store, 
-*                      const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using FITS-PC encoding.
-*
-*     Zero is returned if the primary axis descriptions cannot be produced.
-*     Whether or not secondary axis descriptions can be produced does not
-*     effect the returned value (i.e. failure to produce a specific set of 
-*     secondary axes does not prevent other axis descriptions from being
-*     produced).
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   char *comm;         /* Pointer to comment string */
-   char *cval;         /* Pointer to string keyword value */
-   char combuf[80];    /* Buffer for FITS card comment */
-   char keyname[10];   /* Buffer for keyword name string */
-   char primsys[20];   /* Buffer for primnary RADECSYS value */
-   char type[MXCTYPELEN];/* Buffer for CTYPE value */
-   char s;             /* Co-ordinate version character */
-   char sign[2];       /* Fraction's sign character */
-   char sup;           /* Upper limit on s */
-   double *c;          /* Pointer to next array element */
-   double *d;          /* Pointer to next array element */
-   double *matrix;     /* Pointer to Frame PC/CD matrix */
-   double *primpc;     /* Pointer to primary PC/CD matrix */
-   double fd;          /* Fraction of a day */
-   double mjd99;       /* MJD at start of 1999 */
-   double primdt;      /* Primary mjd-obs value */
-   double primeq;      /* Primary equinox value */
-   double primln;      /* Primary lonpole value */
-   double primlt;      /* Primary latpole value */
-   double primpv[10];  /* Primary projection parameter values */
-   double val;         /* General purpose value */
-   int axlat;          /* Index of latitude FITS WCS axis */
-   int axlon;          /* Index of longitude FITS WCS axis */
-   int axspec;         /* Index of spectral FITS WCS axis */
-   int i;              /* Axis index */
-   int ihmsf[ 4 ];     /* Hour, minute, second, fractional second */
-   int is;             /* Co-ordinate version index */
-   int iymdf[ 4 ];     /* Year, month, date, fractional day */
-   int j;              /* Axis index */
-   int jj;             /* SlaLib status */
-   int m;              /* Parameter index */
-   int maxm;           /* Upper limit on m */
-   int naxis;          /* No. of axes */
-   int ok;             /* Frame written out succesfully? */
-   int prj;            /* Projection type */
-   int ret;            /* Returned value. */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Find the number of co-ordinate versions in the FitsStore. FITS-PC
-   can only encode 10 axis descriptions (including primary). */
-   sup = GetMaxS( &(store->crval), status ); 
-   if( sup > 'I' ) return ret;
-
-/* Initialise */
-   primdt = AST__BAD;
-   primeq = AST__BAD;
-   primln = AST__BAD;
-   primlt = AST__BAD;
-
-/* Loop round all co-ordinate versions (0-9) */
-   primpc = NULL;
-   for( s = ' '; s <= sup && astOK; s++ ){      
-      is = s - 'A' + 1;
-
-/* Assume the Frame can be created succesfully. */
-      ok = 1;
-
-/* Save the number of wcs axes */
-      val = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) {
-         naxis = (int) ( val + 0.5 );
-         SetValue( this, FormatKey( "WCSAXES", -1, -1, s, status ),
-                   &naxis, AST__INT, "Number of WCS axes", status );
-      } else {
-         naxis = GetMaxJM( &(store->crpix), s, status ) + 1;
-      }
-
-/* PC matrix:
-   --------- */
-
-/* This encoding does not allow the PC matrix to be specified for each
-   version - instead they all share the primary PC matrix. Therefore we
-   need to check that all versions can use the primary PC matrix. Allocate
-   memory to hold the PC matrix for this version. */
-      matrix = (double *) astMalloc( sizeof(double)*naxis*naxis );
-      if( matrix ){
-
-/* Fill these array with the values supplied in the FitsStore. */
-         c = matrix;
-         for( i = 0; i < naxis; i++ ){
-            for( j = 0; j < naxis; j++ ){
-               *c = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-               if( *c == AST__BAD ) *c = ( i == j ) ? 1.0 : 0.0;
-               c++;
-            }
-         }
-
-/* If we are currently processing the primary axis description, take
-   a copy of the PC matrix. */
-         if( s == ' ' ) {
-            primpc = (double *) astStore(  NULL, (void *) matrix, 
-                                           sizeof(double)*naxis*naxis );
-
-/* Store each matrix element in turn. */
-            c = matrix;
-            for( i = 0; i < naxis; i++ ){
-               for( j = 0; j < naxis; j++ ){
-
-/* Set the element bad if it takes its default value. */
-                  val = *(c++);
-                  if( i == j ){
-                     if( EQUAL( val, 1.0 ) ) val = AST__BAD;
-                  } else {
-                     if( EQUAL( val, 0.0 ) ) val = AST__BAD;
-                  }
-
-/* Only store elements which do not take their default values. */
-                  if( val != AST__BAD ){
-                     sprintf( keyname, "PC%.3d%.3d", i + 1, j + 1 );
-                     SetValue( this, keyname, &val, AST__FLOAT, NULL, status );
-                  }
-               }
-            }
-
-/* For secondary axis descriptions, a check is made that the PC values are 
-   the same as the primary PC values stored earlier. If not, the current 
-   Frame cannot be stored as a secondary axis description so continue on 
-   to the next Frame. */
-         } else {
-            if( primpc ){
-               c = matrix;
-               d = primpc;
-               for( i = 0; i < naxis; i++ ){
-                  for( j = 0; j < naxis; j++ ){
-                     if( !EQUAL( *c, *d ) ){
-                        ok = 0;
-                     } else {
-                        c++;
-                        d++;
-                     }
-                  }
-               }
-
-/* Continue with the next Frame if the PC matrix for this Frame is different 
-   to the primary PC matrix. */
-               if( !ok ) goto next;
-            }
-         }
-
-         matrix = (double *) astFree( (void *) matrix );
-      }
-
-/* CDELT: 
-   ------ */
-      for( i = 0; i < naxis; i++ ){
-         val = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-            goto next;
-         }
-         sprintf( combuf, "Pixel scale on axis %d", i + 1 );
-         if( s == ' ' ) {
-            sprintf( keyname, "CDELT%d", i + 1 );
-         } else {
-            sprintf( keyname, "C%dELT%d", is, i + 1 );
-         }
-         SetValue( this, keyname, &val, AST__FLOAT, combuf, status );
-      }
-
-/* CRPIX:
-   ------ */
-      for( j = 0; j < naxis; j++ ){
-         val = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-            goto next;
-         }
-         sprintf( combuf, "Reference pixel on axis %d", j + 1 );
-         if( s == ' ' ) {
-            sprintf( keyname, "CRPIX%d", j + 1 );
-         } else {
-            sprintf( keyname, "C%dPIX%d", is, j + 1 );
-         }
-         SetValue( this, keyname, &val, AST__FLOAT, combuf, status );
-      }
-
-/* CRVAL:
-   ------ */
-      for( i = 0; i < naxis; i++ ){
-         val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-            goto next;
-         }
-         sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
-         if( s == ' ' ) {
-            sprintf( keyname, "CRVAL%d", i + 1 );
-         } else {
-            sprintf( keyname, "C%dVAL%d", is, i + 1 );
-         }
-         SetValue( this, keyname, &val, AST__FLOAT, combuf, status );
-      }
-
-/* CTYPE:
-   ------ */
-      for( i = 0; i < naxis; i++ ){
-         cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-         if( !cval ) {
-            ok = 0;
-            goto next;
-         }
-
-         comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-         if( !comm ) {            
-            sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
-            comm = combuf;
-         }
-
-         if( s == ' ' ) {
-            sprintf( keyname, "CTYPE%d", i + 1 );
-         } else {
-            sprintf( keyname, "C%dYPE%d", is, i + 1 );
-         }
-
-/* FITS-PC cannot handle celestial axes of type "xxLT" or "xxLN". */
-         if( !strncmp( cval + 2, "LT-", 3 ) ||
-             !strncmp( cval + 2, "LN-", 3 ) ){
-            ok = 0;
-            goto next;
-         }
-
-/* Extract the projection type as specified by the last 4 characters 
-   in the CTYPE keyword value. This will be AST__WCSBAD for non-celestial
-   axes. */
-         prj = astWcsPrjType( cval + 4 );
-
-/* Change the new SFL projection code to to the older equivalent GLS */
-         if( prj == AST__SFL ) {
-            strcpy( type, cval );
-            (void) strcpy( type + 4, "-GLS" );
-            cval = type;
-         }
-
-/* FITS-PC cannot handle the AST-specific TPN projection. */
-         if( prj == AST__TPN ) {
-            ok = 0;
-            goto next;
-         }
-
-/* Store the CTYPE value */
-         SetValue( this, keyname, &cval, AST__STRING, comm, status );
-      }
-
-/* Get and save CUNIT for all intermediate axes. These are NOT required, so 
-   do not pass on if they are not available. */
-      for( i = 0; i < naxis; i++ ){
-         cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-         if( cval ) {
-            sprintf( combuf, "Units for axis %d", i + 1 );
-            if( s == ' ' ) {
-               sprintf( keyname, "CUNIT%d", i + 1 );
-            } else {
-               sprintf( keyname, "C%dNIT%d", is, i + 1 );
-            }
-            SetValue( this, keyname, &cval, AST__STRING, combuf, status );
-         }
-      }
-
-/* Get and save RADESYS. This is NOT required, so do not pass on if it is 
-   not available. If RADECSYS is provided for a secondary axis, it must
-   be the same as the primary axis RADECSYS value. If it is not, pass on to
-   the next Frame. */
-      cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-      if( cval ) {
-         if( s == ' ' ) {
-            strcpy( primsys, cval );
-            SetValue( this, "RADECSYS", &cval, AST__STRING, 
-                      "Reference frame for RA/DEC values", status );
-         } else if( strcmp( cval, primsys ) ) {
-            ok = 0;
-            goto next;
-         }
-      }
-
-/* Reference equinox. This is NOT required, so do not pass on if it is 
-   not available. If equinox is provided for a secondary axis, it must
-   be the same as the primary axis equinox value. If it is not, pass on to
-   the next Frame. */
-      val = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-      if( s == ' ' ) {
-         primeq = val;
-         if( val != AST__BAD ) SetValue( this, "EQUINOX", &val, AST__FLOAT, 
-                                         "Epoch of reference equinox", status );
-      } else if( !EQUAL( val, primeq ) ){
-         ok = 0;
-         goto next;
-      }
-
-/* Latitude of native north pole. This is NOT required, so do not pass on 
-   if it is not available. If latpole is provided for a secondary axis, it 
-   must be the same as the primary axis value. If it is not, pass on to
-   the next Frame. */
-      val = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
-      if( s == ' ' ) {
-         primlt = val;
-         if( val != AST__BAD ) SetValue( this, "LATPOLE", &val, AST__FLOAT, 
-                                         "Latitude of native north pole", status );
-      } else if( !EQUALANG( val, primlt ) ){
-         ok = 0;
-         goto next;
-      }
-
-/* Longitude of native north pole. This is NOT required, so do not pass on 
-   if it is not available. If lonpole is provided for a secondary axis, it 
-   must be the same as the primary axis value. If it is not, pass on to
-   the next Frame. */
-      val = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
-      if( s == ' ' ) {
-         primln = val;
-         if( val != AST__BAD ) SetValue( this, "LONGPOLE", &val, AST__FLOAT, 
-                                         "Longitude of native north pole", status );
-      } else if( !EQUALANG( val, primln ) ){
-         ok = 0;
-         goto next;
-      }
-
-/* Date of observation. This is NOT required, so do not pass on if it is 
-   not available. If mjd-obs is provided for a secondary axis, it must be 
-   the same as the primary axis value. If it is not, pass on to the next 
-   Frame. */
-      val = GetItem( &(store->mjdobs), 0, 0, s, NULL, method, class, status );
-      if( s == ' ' ) {
-         primdt = val;
-         if( val != AST__BAD ) {
-            SetValue( this, "MJD-OBS", &val, AST__FLOAT, 
-                      "Modified Julian Date of observation", status );
-
-/* The format used for the DATE-OBS keyword depends on the value of the
-   keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
-   Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
-            palSlaCaldj( 99, 1, 1, &mjd99, &jj );
-            if( val < mjd99 ) {
-               palSlaDjcal( 0, val, iymdf, &jj );
-               sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ], 
-                        iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) ); 
-      
-            } else {
-               palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
-               palSlaDd2tf( 3, fd, sign, ihmsf );
-               sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
-                        iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
-                        ihmsf[2], ihmsf[3] ); 
-            }
-
-/* Now store the formatted string in the FitsChan. */
-            cval = combuf;
-            SetValue( this, "DATE-OBS", &cval, AST__STRING,
-                      "Date of observation", status );
-         }
-
-      } else if( !EQUAL( val, primdt ) ){
-         ok = 0;
-         goto next;
-      }
-
-/* Look for the celestial and spectral axes. */
-      FindLonLatSpecAxes( store, s, &axlon, &axlat, &axspec, method, class, status );
-
-/* If both longitude and latitude axes are present ...*/
-      if( axlon >= 0 && axlat >= 0 ) {
-
-/* Get the CTYPE values for the latitude axis. */
-         cval = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-
-/* Extract the projection type as specified by the last 4 characters 
-   in the CTYPE keyword value. */
-         prj = ( cval ) ? astWcsPrjType( cval + 4 ) : AST__WCSBAD;
-
-/* Projection parameters. If provided for a secondary axis, they must be 
-   the same as the primary axis value. If it is not, pass on to the next 
-   Frame. PC encoding ignores parameters associated with the longitude
-   axis. The old PC TAN projection did not have any parameters.
-   Pass on if a TAN projection with parameters is found.  The number of
-   parameters was limited to 10. Pass on if more than 10 are supplied. */
-         maxm = GetMaxJM( &(store->pv), ' ', status );
-         for( i = 0; i < naxis; i++ ){
-            if( i != axlon ) {
-               for( m = 0; m <= maxm; m++ ){
-                  val = GetItem( &(store->pv), i, m, s, NULL, method, class, status );
-                  if( s == ' ' ){
-                     if( val != AST__BAD ) {
-                        if( i != axlat || prj == AST__TAN || m >= 10 ){
-                           ok = 0;
-                           goto next;
-                        } else {
-                           SetValue( this, FormatKey( "PROJP", m, -1, ' ', status ), &val, 
-                                     AST__FLOAT, "Projection parameter", status );
-                        }
-                     } 
-   
-                     if( i == axlat && m < 10 ) primpv[m] = val;
-   
-                  } else {
-                     if( ( ( i != axlat || m >= 10 ) && val != AST__BAD ) ||
-                         ( i == axlat && m < 10 && !EQUAL( val, primpv[m] ) ) ){
-                        ok = 0;
-                        goto next;
-                     }
-                  }
-               }
-            }
-         }
-      }
-
-/* See if a Frame was sucessfully written to the FitsChan. */
-next:
-      ok = ok && astOK;
-
-/* If so, indicate we have something to return. */
-      if( ok ) ret = 1;
-
-/* Clear any error status so we can continue to produce the next Frame.
-   Retain the error if the primary axes could not be produced. After the 
-   primary axes, do the A axes. */
-      if( s != ' ' ) {
-         astClearStatus;
-      } else {
-         s = 'A' - 1;
-      }
-
-/* Remove the secondary "new" flags from the FitsChan. This flag is
-   associated with cards which have been added to the FitsChan during
-   this pass through the main loop in this function. If the Frame was
-   written out succesfully, just clear the flags. If anything went wrong
-   with this Frame, remove the flagged cards from the FitsChan. */
-      FixNew( this, NEW2, !ok, method, class, status );
-
-/* Set the current card so that it points to the last WCS-related keyword
-   in the FitsChan (whether previously read or not). */
-      FindWcs( this, 1, 1, 0, method, class, status );
-   }
-
-/* Annul the array holding the primary PC matrix. */
-   primpc = (double *) astFree( (void *) primpc );
-
-/* Return zero or ret depending on whether an error has occurred. */
-   return astOK ? ret : 0;
-}
-
-static void PreQuote( const char *value,
-                      char string[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ], int *status ) {
-/*
-*  Name:
-*     PreQuote
-
-*  Purpose:
-*     Pre-quote FITS character data.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void PreQuote( const char *value,
-*                    char string[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ] )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function processes a string value in such a way that it can
-*     be stored as a FITS character value (associated with a keyword)
-*     and later retrieved unchanged, except for possible truncation.
-*
-*     This pre-processing is necessary because FITS does not regard
-*     trailing white space as significant, so it is lost. This
-*     function adds double quote (") characters around the string if
-*     it is necessary in order to prevent this loss. These quotes are
-*     also added to zero-length strings and to strings that are
-*     already quoted (so that the original quotes are not lost when
-*     they are later un-quoted).
-*
-*     This function will silently truncate any string that is too long
-*     to be stored as a FITS character value, but will ensure that the
-*     maximum number of characters are retained, taking account of any
-*     quoting required.
-
-*  Parameters:
-*     value
-*        Pointer to a constant null-terminated string containing the
-*        input character data to be quoted. All white space is
-*        significant.
-*     string
-*        A character array into which the result string will be
-*        written, with a terminating null. The maximum number of
-*        characters from the input string that can be accommodated in
-*        this is (AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 4), but this
-*        will be reduced if quoting is necessary.
-
-*  Notes:
-*     - The UnPreQuote function should be used to reverse the effect
-*     of this function on a string (apart from any truncation).
-*/
-   
-/* Local Variables: */
-   int dq;                       /* Number of double quotes needed */
-   int dquotes;                  /* Final number of double quotes */
-   int i;                        /* Loop counter for input characters */
-   int j;                        /* Counter for output characters */
-   int nc;                       /* Number of characters to be accommodated */
-   int sq;                       /* Number of single quotes needed */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise, setting the default number of double quotes (which
-   applies to a zero-length string) to 2. */
-   dquotes = 2;
-   nc = 0;
-   sq = 0;
-
-/* Loop to consider each input character to see if it will fit into
-   the result string. */
-   for ( i = 0; value[ i ]; i++ ) {
-
-/* If a single quote character is to be included, count it. When the
-   string is encoded as FITS character data, these quotes will be
-   doubled, so will increase the overall string length by one. */
-      if ( value[ i ] == '\'' ) sq++;
-
-/* See how many double quotes are needed around the string (0 or
-   2). These are needed if there is trailing white space that needs
-   protecting (this is not significant in FITS and will be removed),
-   or if the string already has quotes at either end (in which case an
-   extra set is needed to prevent the original ones being removed when
-   it is later un-quoted). Note we do not need to double existing
-   double quote characters within the string, because the position of
-   the ends of the string are known (from the quoting supplied by
-   FITS) so only the first and last characters need be inspected when
-   un-quoting the string.
-
-   In assessing the number of double quotes, assume the string will be
-   truncated after the current character. */
-      dq = ( isspace( value[ i ] ) ||
-             ( ( value[ 0 ] == '"' ) && ( value[ i ] == '"' ) ) ) ? 2 : 0;
-
-/* See if the length of the resulting string, including the current
-   character and all necessary quotes, is too long. If so, give up
-   here. */
-      if ( ( nc + 1 + dq + sq ) >
-           ( AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 4 ) ) break;
-
-/* If the string is not too long, accept the character and note the
-   number of double quotes needed. */
-      nc = i + 1;
-      dquotes = dq;
-   }
-
-/* If double quotes are needed, insert the opening quote into the
-   output string. */
-   j = 0;
-   if ( dquotes ) string[ j++ ] = '"';
-
-/* Follow this with the maximum number of input string characters that
-   can be accommodated. */
-   for ( i = 0; i < nc; i++ ) string[ j++ ] = value[ i ];
-
-/* Append the closing quote if necessary and terminate the output
-   string. */
-   if ( dquotes ) string[ j++ ] = '"';
-   string[ j ] = '\0';
-}
-
-static void PurgeWCS( AstFitsChan *this, int *status ){
-/*
-*++
-*  Name:
-c     astPurgeWCS
-f     AST_PURGEWCS
-
-*  Purpose:
-*     Delete all cards in the FitsChan describing WCS information.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astPurgeWCS( AstFitsChan *this )
-f     CALL AST_PURGEWCS( THIS, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-c     This function 
-f     This routine
-*     deletes all cards in a FitsChan that relate to any of the recognised 
-*     WCS encodings. On exit, the current card is the first remaining card 
-*     in the FitsChan.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*--
-*/
-
-/* Local Variables: */
-   AstObject *obj;
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Loop round attempting to read AST objects form the FitsChan. This will
-   flag cards as used that are involved in the creation of these object
-   (including NATIVE encodings). */
-   astClearCard( this );
-   obj = astRead( this );
-   while( obj ) {
-      obj = astAnnul( obj );
-      astClearCard( this );
-      obj = astRead( this );
-   }
-
-/* We now loop round to remove any spurious WCS-related cards left in the
-   FitsChan that did not form part of a complete WCS encoding. Find the 
-   first WCS-related card left in the FitsChan. */
-   FindWcs( this, 0, 0, 1, "DeleteWcs", "FitsChan", status );
-
-/* Loop round marking each WCS-related card as used until none are left */
-   while( this->card ) {
-
-/* Mark the current card as having been read. */
-      ( (FitsCard*) this->card )->flags = USED;
-
-/* Find the next WCS-related card. */
-      FindWcs( this, 0, 0, 0, "DeleteWcs", "FitsChan", status );
-   }
-
-/* Rewind the FitsChan. */
-   astClearCard( this );
-}
-
-static void PutCards( AstFitsChan *this, const char *cards, int *status ) {
-/*
-*++
-*  Name:
-c     astPutCards
-f     AST_PUTCARDS
-
-*  Purpose:
-*     Store a set of FITS header cards in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astPutCards( AstFitsChan *this, const char *cards )
-f     CALL AST_PUTCARDS( THIS, CARDS, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     stores a set of FITS header cards in a FitsChan. The cards are
-*     supplied concatenated together into a single character string.
-*     Any existing cards in the FitsChan are removed before the new cards
-*     are added. The FitsChan is "re-wound" on exit by clearing its Card 
-*     attribute. This means that a subsequent invocation of 
-c     astRead
-f     AST_READ
-*     can be made immediately without the need to re-wind the FitsChan
-*     first.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     cards
-f     CARDS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string
-f        A character string
-*        containing the FITS cards to be stored. Each individual card
-*        should occupy 80 characters in this string, and there should be
-*        no delimiters, new lines, etc, between adjacent cards. The final
-*        card may be less than 80 characters long.
-c        This is the format produced by the fits_hdr2str function in the
-c        CFITSIO library.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - An error will result if the supplied string contains any cards
-*     which cannot be interpreted.
-*--
-*/
-/* Local Variables: */
-   const char *a;         /* Pointer to start of next card */
-   const char *class;     /* Object class */
-   const char *method;    /* Current method */
-   int clen;              /* Length of supplied string */
-   int i;                 /* Card index */
-   int ncard;             /* No. of cards supplied */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astPutCards";
-   class = astGetClass( this );
-
-/* Empty the FitsChan. */
-   astEmpty( this );
-
-/* Loop round the supplied string in 80 character segments, inserting
-   each segment into the FitsChan as a header card. Allow the last card
-   to be less than 80 characters long. */
-   clen = strlen( cards );
-   ncard = clen/80;
-   if( ncard*80 < clen ) ncard++;
-   
-   a = cards;
-   for( i = 0; i < ncard; i++, a += 80 ) astPutFits( this, a, 1 );
-
-/* Rewind the FitsChan. */
-   astClearCard( this );
-
-}
-
-static void PutFits( AstFitsChan *this, const char card[ AST__FITSCHAN_FITSCARDLEN + 1 ], 
-                     int overwrite, int *status ){
-/*
-*++
-*  Name:
-c     astPutFits
-f     AST_PUTFITS
-
-*  Purpose:
-*     Store a FITS header card in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astPutFits( AstFitsChan *this, const char card[ 80 ],
-c                      int overwrite )
-f     CALL AST_PUTFITS( THIS, CARD, OVERWRITE, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-c     This function stores a FITS header card in a FitsChan. The card
-f     This routine stores a FITS header card in a FitsChan. The card
-*     is either inserted before the current card (identified by the
-*     Card attribute), or over-writes the current card, as required.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     card
-f     CARD = CHARACTER * ( 80 ) (Given)
-c        Pointer to a possibly null-terminated character string
-c        containing the FITS card to be stored. No more than 80
-c        characters will be used from this string (or fewer if a null
-c        occurs earlier).
-f        A character string string containing the FITS card to be
-f        stored. No more than 80 characters will be used from this
-f        string.
-c     overwrite
-f     OVERWRITE = LOGICAL (Given)
-c        If this value is zero, the new card is inserted in front of
-f        If this value is .FALSE., the new card is inserted in front of
-*        the current card in the FitsChan (as identified by the
-c        initial value of the Card attribute). If it is non-zero, the
-f        initial value of the Card attribute). If it is .TRUE., the
-*        new card replaces the current card. In either case, the Card
-*        attribute is then incremented by one so that it subsequently
-*        identifies the card following the one stored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - If the Card attribute initially points at the "end-of-file"
-*     (i.e. exceeds the number of cards in the FitsChan), then the new
-*     card is appended as the last card in the FitsChan.
-*     - An error will result if the supplied string cannot be interpreted
-*     as a FITS header card.
-*--
-*/
-/* Local Variables: */
-   char *comment;         /* The keyword comment */
-   char *name;            /* The keyword name */
-   char *value;           /* The keyword value */
-   const char *class;     /* Object class */
-   const char *method;    /* Current method */
-   double cfval[2];       /* Complex floating point keyword value */
-   double fval;           /* floating point keyword value */
-   int cival[2];          /* Complex integer keyword value */
-   int ival;              /* Integer keyword value */
-   int len;               /* No. of characters to read from the value string */
-   int nc;                /* No. of characters read from value string */
-   int type;              /* Keyword data type */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astPutFits";
-   class = astGetClass( this );
-
-/* Split the supplied card up into name, value and commment strings, and
-   get pointers to local copies of them. The data type associated with the
-   keyword is returned. */
-   type = Split( card, &name, &value, &comment, method, class, status );
-
-/* Check that the pointers can be used. */
-   if( astOK ){
-
-/* Initialise the number of characters read from the value string. */
-      nc = 0;
-
-/* Store the number of characters in the value string. */
-      len = strlen( value );
-
-/* Read and store floating point values from the value string. NB, this
-   list is roughly in the order of descreasing frequency of use (i.e.
-   most FITS keywords are simple floating point values, the next most
-   common are strings, etc). */
-      if( type == AST__FLOAT ){
-         if( 1 == astSscanf( value, " %lf %n", &fval, &nc ) && nc >= len ){
-            astSetFitsF( this, name, fval, comment, overwrite );
-         } else {
-            astError( AST__BDFTS, "%s(%s): Unable to read a floating point "
-                      "FITS keyword value.", status, method, class );
-         }
-
-/* Read and store string values from the value string. */
-      } else if( type == AST__STRING ){
-         astSetFitsS( this, name, value, comment, overwrite );
-
-/* Read and store string values from the value string. */
-      } else if( type == AST__CONTINUE ){
-         astSetFitsCN( this, name, value, comment, overwrite );
-
-/* Store comment card. */
-      } else if( type == AST__COMMENT ){
-         astSetFitsCom( this, name, comment, overwrite );
-
-/* Read and store integer values from the value string. */
-      } else if( type == AST__INT ){
-         if( 1 == astSscanf( value, " %d %n", &ival, &nc ) && nc >= len ){
-            astSetFitsI( this, name, ival, comment, overwrite );
-         } else {
-            astError( AST__BDFTS, "%s(%s): Unable to read an integer FITS "
-                      "keyword value.", status, method, class );
-         }
-
-/* Read and store logical values from the value string. */
-      } else if( type == AST__LOGICAL ){
-         astSetFitsL( this, name, (*value == 'T'), comment, overwrite );
-
-/* Read and store undefined values from the value string. */
-      } else if( type == AST__UNDEF ){
-         astSetFitsU( this, name, comment, overwrite );
-
-/* Read and store complex floating point values from the value string. */
-      } else if( type == AST__COMPLEXF ){
-         if( 2 == astSscanf( value, " %lf %lf %n", cfval, cfval + 1, &nc ) && 
-             nc >= len ){
-            astSetFitsCF( this, name, cfval, comment, overwrite );
-         } else {
-            astError( AST__BDFTS, "%s(%s): Unable to read a complex pair "
-                      "of floating point FITS keyword values.", status, method, class );
-         }
-
-/* Read and store complex integer values from the value string. */
-      } else if( type == AST__COMPLEXI ){
-         if( 2 == astSscanf( value, " %d %d %n", cival, cival + 1, &nc ) && 
-             nc >= len ){
-            astSetFitsCI( this, name, cival, comment, overwrite );
-         } else {
-            astError( AST__BDFTS, "%s(%s): Unable to read a complex pair "
-                      "of integer FITS keyword values.", status, method, class );
-         }
-
-/* Report an error for any other type. */
-      } else {
-         astError( AST__INTER, "%s: AST internal programming error - "
-                   "FITS data-type '%d' not yet supported.", status, method, type );
-      }
-
-/* Give a context message if an error occurred. */
-      if( !astOK ){
-         astError( astStatus, "%s(%s): Unable to store the following FITS "
-                   "header card:\n%s\n", status, method, class, card );
-      }
-
-   }
-
-/* Free the memory used to hold the keyword name, comment and value 
-   strings. */
-   (void) astFree( (void *) name );
-   (void) astFree( (void *) comment );
-   (void) astFree( (void *) value );
-
-}
-
-static AstObject *Read( AstChannel *this_channel, int *status ) {
-/*
-*  Name:
-*     Read
-
-*  Purpose:
-*     Read an Object from a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstObject *Read( AstChannel *this_channel, int *status ) 
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astRead method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function reads an Object from a FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object. This will always be a FrameSet.
-
-*  Notes:
-*     -  The pixel Frame is given a title of "Pixel Coordinates", and
-*     each axis in the pixel Frame is given a label of the form "Pixel
-*     axis <n>", where <n> is the axis index (starting at one).
-*     -  The FITS CTYPE keyword values are used to set the labels for any
-*     non-celestial axes in the physical coordinate Frames, and the FITS 
-*     CUNIT keywords are used to set the corresponding units strings.
-*     -  On exit, the pixel Frame is the base Frame, and the physical
-*     Frame derived from the primary axis descriptions is the current Frame.
-*     -  Extra Frames are added to hold any secondary axis descriptions. All
-*     axes within such a Frame refer to the same coordinate version ('A',
-*     'B', etc).
-*     -  For foreign encodings, the first card in the FitsChan must be 
-*     the current card on entry (otherwise a NULL pointer is returned),
-*     and the FitsChan is left at end-of-file on exit.
-*     -  For the Native encoding, reading commences from the current card 
-*     on entry (which need not be the first in the FitsChan), and the 
-*     current Card on exit is the first card following the last one read
-*     (or end-of-file).
-
-*/
-
-/* Local Variables: */
-   AstObject *new;               /* Pointer to returned Object */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   FitsStore *store;             /* Intermediate storage for WCS information */
-   const char *method;           /* Pointer to string holding calling method */
-   const char *class;            /* Pointer to string holding object class */
-   int encoding;                 /* The encoding scheme */
-   int remove;                   /* Remove used cards? */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the calling method, and object class. */
-   method = "astRead";
-   class = astGetClass( this );
-
-/* Get the encoding scheme used by the FitsChan. */
-   encoding = astGetEncoding( this );
-
-/* If we are reading from a FitsChan in which AST objects are encoded using
-   native AST-specific keywords, use the Read method inherited from the
-   Channel class. */
-   if( encoding == NATIVE_ENCODING ){
-      new = (*parent_read)( this_channel, status );
-
-/* Indicate that used cards should be removed from the FitsChan. */
-      remove = 1; 
-
-/* If we are reading from a FitsChan in which AST objects are encoded using
-   any of the other supported encodings, the header may only contain a 
-   single FrameSet. */
-   } else {
-      remove = 0;
-
-/* Only proceed if the FitsChan is at start-of-file. */
-      if( !astTestCard( this ) && astOK ){ 
-
-/* Extract the required information from the FITS header into a standard
-   intermediary structure called a FitsStore. */
-         store = FitsToStore( this, encoding, method, class, status );
-
-/* Now create a FrameSet from this FitsStore. */
-         new = FsetFromStore( this, store, method, class, status );
-
-/* Release the resources used by the FitsStore. */
-         store = FreeStore( store, status );      
-
-/* Indicate that used cards should be retained in the FitsChan. */
-         remove = 0;
-
-/* If no object is being returned, rewind the fitschan in order to
-   re-instate the original current Card. */
-         if( !new ) {
-            astClearCard( this );
-
-/*  Otherwise, ensure the current card is at "end-of-file". */
-         } else {
-            astSetCard( this, INT_MAX );
-         }
-      }
-   }
-
-/* If an error occurred, clean up by deleting the new Object and
-   return a NULL pointer. */
-   if ( !astOK ) new = astDelete( new );
-
-/* If no object is being returned, clear the "provisionally used" flags 
-   associated with cards which were read. We do not do this if the user
-   wants to clean WCS cards from the FitsChan even if an error occurs. */
-   if( !new && !astGetClean( this ) ) {
-      FixUsed( this, 0, 0, 0, method, class, status );
-
-/*  Otherwise, indicate that all the "provisionally used" cards have been 
-    "definitely used". If native encoding was used, these cards are
-    totally removed from the FitsChan. */
-   } else {
-      FixUsed( this, 0, 1, remove, method, class, status );
-   }      
-
-/* Return the pointer to the new Object. */
-   return new;
-}
-
-static double *ReadCrval( AstFitsChan *this, AstFrame *wcsfrm, char s, 
-                          const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     ReadCrval
-
-*  Purpose:
-*     Obtain the reference point from the supplied FitsChan  in the
-*     supplied WCS Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     double *ReadCrval( AstFitsChan *this, AstFrame *wcsfrm, char s, 
-*                        const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The original reference point in the "s" coordinate description is read 
-*     from the CRVAL keywords in the supplied FitsChan, and the original
-*     FrameSet is re-read from the FitsChan. If possible, the reference
-*     position is then converted from the "s" coordinate description to the 
-*     supplied WCS Frame, and a pointer to an array holding the axis
-*     values for the transformed reference point is returned.
-
-*  Parameters:
-*     this
-*        The FitsChan.
-*     wcsfrm
-*        The WCS Frame in the FitsChan being written to.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array holding the reference
-*     point in the supplied WCS Frame. NULL is returned if is is not
-*     possible to determine the reference point for any reason (for
-*     instance, if the FitsChan does not contain values for the CRVAL 
-*     keywords).
-
-*/
-
-/* Local Variables: */
-   AstFitsChan *fc;          /* A copy of the supplied FitsChan */
-   AstFrame *tfrm;           /* Temporary Frame pointer */
-   AstFrameSet *fs;          /* The FITS FrameSet */
-   AstFrameSet *tfs;         /* FrameSet connecting FITS and supplied WCS Frame */
-   const char *id;           /* Pointer to Object "Id" string */
-   char buf[ 11 ];           /* FITS keyword template buffer */
-   double *crval;            /* CRVAL keyword values in supplied FitsChan */
-   double *ret;              /* Returned array */
-   int hii;                  /* Highest found FITS axis index */
-   int iax;                  /* Axis index (zero based) */
-   int ifr;                  /* Frames index */
-   int loi;                  /* Lowest found FITS axis index */
-   int nax;                  /* Axis count */
-   int nfr;                  /* No. of Frames in FITS FrameSet */
-   int ok;                   /* Were CRVAL values found? */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* We want to re-create the original FrameSet represented by the original
-   contents of the supplied FitsChan. Some of the contents of the
-   FitsChan will already have been marked as "having been read" and so
-   will be ignored if we attempt to read a FrameSet directly from the
-   supplied FitsChan. Therefore we take a deep copy of the supplied
-   FitsChan and clear all the "previusly read" flags in the copy. */
-   fc = astCopy( this );
-   astClearEncoding( fc );
-   FixUsed( fc, 1, 0, 0, method, class, status );
-
-/* Copy the CRVAL values for the "s" axis descriptions into a dynamically
-   allocated array ("crval"). */
-   if( s == ' ' ) {
-      strcpy( buf, "CRVAL%d" );
-   } else {
-      sprintf( buf, "CRVAL%%d%c", s );
-   }
-   if( astKeyFields( fc, buf, 1, &hii, &loi ) > 0 ) {
-      crval = astMalloc( sizeof( double )*(size_t) hii );
-      ok = 1;
-      for( iax = 0; iax < hii; iax++ ){
-         ok = ok && GetValue( fc, FormatKey( "CRVAL", iax + 1, -1, s, status ), 
-                              AST__FLOAT, (void *) (crval + iax), 0, 0, method, 
-                              class, status );
-      }
-   } else {
-      crval = NULL;
-      ok = 0;
-   }
-
-/* If the CRVAL values were obtained succesfully, attempt to read a FrameSet 
-   from the FitsChan copy. */
-   if( ok ) {
-      astClearCard( fc );
-      fs = astRead( fc );
-      if( fs ) {
-
-/* We want to find a conversion from the Frame in this FrameSet which
-   represents the FITS-WCS "s" coordinate descriptions and the supplied WCS
-   Frame. So first find the Frame which has its Ident attribute set to
-   "s" and make it the current Frame. */
-         nfr = astGetNframe( fs );
-         for( ifr = 1; ifr <= nfr; ifr++ ) {
-            astSetCurrent( fs, ifr );
-            tfrm = astGetFrame( fs, ifr );
-            id = astTestIdent( tfrm ) ? astGetIdent( tfrm ) : NULL;
-            tfrm = astAnnul( tfrm );
-            if( id && strlen( id ) == 1 && id[ 0 ] == s ) break;
-         }                          
-
-/* Check a Frame was found, and that we have CRVAL values for all axes in
-   the Frame. */
-         if( ifr <= nfr && astGetNaxes( fs ) == hii ) {
-
-/* Attempt to find a conversion route from the Frame found above to the 
-   supplied WCS Frame. */
-            tfs = astConvert( fs, wcsfrm, astGetDomain( wcsfrm ) );
-            if( tfs ) {
-
-/* Allocate memory to hold the returned reference point. */
-               nax = astGetNaxes( wcsfrm );
-               ret = astMalloc( sizeof( double )*(size_t) nax );            
-
-/* Transform the original reference position from the "s" Frame to the
-   supplied WCS Frame using the Mapping returned by astConvert. */
-               astTranN( tfs, 1, hii, 1, crval, 1, nax, 1, ret );
-
-/* Free resources. */
-               tfs = astAnnul( tfs );
-            }
-         }
-
-/* Free resources. */
-         fs = astAnnul( fs );
-      }
-   }
-
-/* Free resources. */
-   if( crval ) crval = astFree( crval );
-   fc = astAnnul( fc );
-
-/* If an error occurred, free the returned array. */
-   if( !astOK ) ret = astFree( ret );
-
-/* Return the result. */
-   return ret;
-}
-
-static void ReadFromSource( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     ReadFromSource
-
-*  Purpose:
-*     Fill the FitsChan by reading cards from the source function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void ReadFromSource( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The source function specified when the FitsChan was created is
-*     called repeatedly until it returns a NULL pointer. The string
-*     returned by each such call is assumed to be a FITS header card,
-*     and is stored in the FitsChan using astPutFits.
-*
-*     If no source function was provided, the FitsChan is left as supplied.
-*     This is different to a standard Channel, which tries to read data
-*     from standard input if no source function is provided.
-*
-*     This function should be called at the start of most public or protected 
-*     FitsChan functions, and most private functions that are used to override
-*     methods inherited form the Channel class. Previously, this function
-*     was called only once, from the FitsChan initialiser (astInitFitschan). 
-*     However, calling it from astInitFitsChan means that application code
-*     cannot use the astPutChannelData function with a FitsChan, since the 
-*     source function would already have been called by the time the 
-*     FitsChan constructor returned (and thus before astPutChannelData
-*     could have been called). In order to ensure that teh source
-*     function is called only once, this function now nullifies the source
-*     function pointer after its first use.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The new cards are appended to the end of the FitsChan.
-*     -  The first of the new cards is made the current card on exit. If no
-*     source function is supplied, the current card is left unchanged.
-
-*/
-
-/* Local Variables: */
-   const char *(* source)( void ); /* Pointer to source function */
-   const char *card;               /* Pointer to externally-read header card */
-   int icard;                      /* Current card index on entry */
-
-/* Check the global status. */
-   if( !astOK || !this ) return;
-
-/* Only proceed if source function and wrapper were supplied when the FitsChan 
-   was created and are still available. */
-   if( this->source && this->source_wrap ){
-
-/* Save the source function pointer and then nullify the pointer in the
-   FitsChan structure. This avoids infinte loops. */
-      source = this->source;
-      this->source = NULL;
-
-/* Ensure the FitsChan is at end-of-file. This will result in the 
-   new cards being appended to the end of the FitsChan. */
-      astSetCard( this, INT_MAX );
-
-/* Store the current card index. */
-      icard = astGetCard( this );
-
-/* Obtain the first header card from the source function. This is an 
-   externally supplied function which may not be thread-safe, so lock a 
-   mutex first. */
-      LOCK_MUTEX2;
-      card = ( *this->source_wrap )( source, status );
-      UNLOCK_MUTEX2;
-
-/* Loop until a NULL pointer is returned by the source function, or an
-   error occurs. */
-      while( card && astOK ){
-
-/* Store the card in the FitsChan. */
-         astPutFits( this, card, 0 );
-
-/* Free the memory holding the header card. */
-         card = (char *) astFree( (void *) card );
-
-/* Obtain the next header card. */
-         card = ( *this->source_wrap )( source, status );
-
-      }
-
-/* Set the current card index so that the first of the new cards will be the 
-   next card to be read from the FitsChan. */
-      astSetCard( this, icard );
-   }
-}
-
-static void RetainFits( AstFitsChan *this, int *status ){
-/*
-*++
-*  Name:
-c     astRetainFits
-f     AST_RETAINFITS
-
-*  Purpose:
-*     Indicate that the current card in a FitsChan should be retained.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     void astRetainFits( AstFitsChan *this )
-f     CALL AST_RETAINFITS( THIS, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-c     This function 
-f     This routine
-*     stores a flag with the current card in the FitsChan indicating that
-*     the card should not be removed from the FitsChan when an Object is 
-*     read from the FitsChan using
-c     astRead.
-f     AST_READ.
-*
-*     Cards that have not been flagged in this way are removed when a
-*     read operation completes succesfully, but only if the card was used
-*     in the process of creating the returned AST Object. Any cards that
-*     are irrelevant to the creation of the AST Object are retained whether 
-*     or not they are flagged.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - This function returns without action if the FitsChan is
-*     initially positioned at the "end-of-file" (i.e. if the Card
-*     attribute exceeds the number of cards in the FitsChan).
-*     - The current card is not changed by this function.
-*--
-*/
-
-/* Local variables: */
-   int flags;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Return if the global error status has been set, or the current card
-   is not defined. */
-   if( !astOK || !this->card ) return;
-
-/* Set the PROTECTED flag in the current card. */
-   flags = ( (FitsCard *) this->card )->flags;
-   ( (FitsCard *) this->card )->flags = flags | PROTECTED;
-
-}
-
-static void RoundFString( char *text, int width, int *status ){
-/*
-*  Name:
-*     RoundString
-
-*  Purpose:
-*     Modify a formatted floating point number to round out long
-*     sequences of zeros or nines.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void RoundFString( char *text, int width )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The supplied string is assumed to be a valid decimal representation of 
-*     a floating point number. It is searched for sub-strings consisting
-*     of NSEQ or more adjacent zeros, or NSEQ or more adjacent nines. If found
-*     the string is modified to represent the result of rounding the
-*     number to remove the sequence of zeros or nines.
-
-*  Parameters:
-*     text
-*        The formatted number. Modified on exit to round out long
-*        sequences of zeros or nines. The returned string is right justified.
-*     width
-*        The minimum field width to use. The value is right justified in 
-*        this field width. Ignored if zero.
-
-*/
-
-/* Local Constants: */
-#define NSEQ  4    /* No. of adjacent 0's or 9's to produce rounding */
-
-/* Local Variables: */
-   char *a;
-   char *c;
-   char *dot;
-   char *exp;   
-   char *last;
-   char *start;
-   char *end;
-   int i;
-   int neg;
-   int nnine;
-   int nonzero;
-   int nzero;
-   int replace;
-   int started;
-   int len;
-   int bu;
-   int nls;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Save the original length of the text. */
-   len = strlen( text );
-
-/* Locate the start of any exponent string. */
-   exp = strpbrk( text, "dDeE" );
-
-/* First check for long strings of adjacent zeros. 
-   =============================================== */
-
-/* Indicate that we have not yet found a decimal point in the string. */
-   dot = NULL;
-
-/* The "started" flag controls whether *leading* zeros should be removed
-   if there are more than NSEQ of them. They are only removed if there is an
-   exponent. */
-   started = ( exp != NULL );
-
-/* We are not currently replacing digits with zeros. */
-   replace = 0;
-
-/* We have not yet found any adjacent zeros. */
-   nzero = 0;
-
-/* We have no evidence yet that the number is non-zero. */
-   nonzero = 0;
-
-/* Loop round the supplied text string. */
-   c = text;
-   while( *c && c != exp ){
-
-/* If this is a zero, increment the number of adjacent zeros found, so
-   long as we have previously found a non-zero digit (or there is an
-   exponent). If this is the NSEQ'th adjacent zero, indicate that
-   subsequent digits should be replaced by zeros. */
-      if( *c == '0' ){
-         if( started && ++nzero >= NSEQ ) replace = 1;
-
-/* Note if the number contains a decimal point. */
-      } else if( *c == '.' ){
-         dot = c;
-
-/* If this character is a non-zero digit, indicate that we have found a
-   non-zero digit. If we have previously found a long string of adjacent
-   zeros, replace the digit by '0'. Otherwise, reset the count of
-   adjacent zeros, and indicate the final number is non-zero. */
-      } else if( *c != ' ' && *c != '+' && *c != '-' ){
-         started = 1;
-         if( replace ) {
-            *c = '0';
-         } else {
-            nzero = 0;
-            nonzero = 1;
-         }
-      }
-
-/* Move on to the next character. */
-      c++;
-   }
-
-/* If the final number is zero, just return the most simple decimal zero
-   value. */
-   if( !nonzero ) {
-      strcpy( text, "0.0" );
-
-/* Otherwise, we remove any trailing zeros which occur to the right of a
-   decimal point. */
-   } else if( dot ) {
-
-/* Find the last non-zero digit. */
-      while( c-- > text && *c == '0' );
-
-/* If any trailing zeros were found... */
-      if( c > text ) {
-
-/* Retain one trailing zero before a decimal point. */
-         if( *c == '.' ) c++;
-
-/* We put a terminator folling the last non-zero character. The
-   terminator is the exponent, if there was one, or a null character. */
-         c++;
-         if( exp ) {
-            a = exp;
-            while( ( *(c++) = *(a++) ) );
-         } else {
-            *c = 0;
-         }
-      }
-   }
-
-/* Next check for long strings of adjacent nines. 
-   ============================================= */
-
-/* We have not yet found any adjacent nines. */
-   nnine = 0;
-
-/* We have not yet found a non-nine digit. */
-   a = NULL;
-
-/* We have not yet found a non-blank character */
-   start = NULL;
-   last = NULL;
-
-/* Number is assumed positive. */
-   neg = 0;
-
-/* Indicate that we have not yet found a decimal point in the string. */
-   dot = NULL;
-
-/* Loop round the supplied text string. */
-   c = text;
-   while( *c && c != exp ){
-
-/* Note the address of the first non-blank character. */
-      if( !start && *c != ' ' ) start = c;
-
-/* If this is a nine, increment the number of adjacent nines found. */
-      if( *c == '9' ){
-         ++nnine;
-
-/* Note if the number contains a decimal point. */
-      } else if( *c == '.' ){
-         dot = c;
-
-/* Note if the number is negative. */
-      } else if( *c == '-' ){
-         neg = 1;
-
-/* If this character is a non-nine digit, and we have not had a long
-   sequence of 9's, reset the count of adjacent nines, and update a pointer
-   to "the last non-nine digit prior to a long string of nines". */
-      } else if( *c != ' ' && *c != '+' ){
-         if( nnine < NSEQ ) {
-            nnine = 0;
-            a = c;
-         }
-      }
-
-/* Note the address of the last non-blank character. */
-      if( *c != ' ' ) last = c;
-
-/* Move on to the next character. */
-      c++;
-   }
-
-/* If a long string of adjacent nines was found... */
-   if( nnine >= NSEQ ) {
-      c = NULL;
-
-/* If we found at least one non-nine digit. */
-      if( a ) {
-
-/* "a" points to the last non-nine digit before the first of the group of 9's. 
-   Increment this digit by 1. Since we know the digit is not a nine, there
-   is no danger of a carry. */
-         *a = *a + 1;
-
-/* Fill with zeros up to the decimal point. */
-         c = a + 1;
-         while( dot && c < dot ) *(c++) = '0';
-
-/* Now make "c" point to the first character for the terminator. This is
-   usually the character following the last non-nine digit. However, if
-   the last non-nine digit appears immediately before a decimal point, then
-   we append ".0" to the string before appending the terminator. */
-         if( *c == '.' ) {
-            *(++c) = '0';
-            c++;
-         }       
-
-/* If all digits were nines, the rounded number will occupy one more
-   character than the supplied number. We can only do the rounding if there
-   is a spare character (i.e.a space) in the supplied string. */
-      } else if( last - start + 1 < len ) {
-
-/* Put the modified text at the left of the available space. */
-         c = text;
-
-/* Start with a munus sing if needed, followed by the leading "1" (caused
-   by the overflow from the long string of 9's). */
-         if( neg ) *(c++) = '-';
-         *(c++) = '1';
-
-/* Now put in the correct number of zeros. */
-         if( dot ) {
-            nzero = dot - start;
-         } else if( exp ) {
-            nzero = exp - start;
-         } else {
-            nzero = last - start;
-         }            
-         for( i = 0; i < nzero; i++ ) *(c++) = '0';
-
-/* If the original string containsed a decimal point, make sure the
-   returned string also contains one. */
-         if( dot ) {
-            *(c++) = '.';
-            if( *c ) *(c++) = '0';
-         } 
-
-      }
-
-/* We put a terminator folling the last non-zero character. The
-   terminator is the exponent, if there was one, or a null character. */
-      if( c ) {
-         if( exp ) {
-            while( ( *(c++) = *(exp++) ) );
-         } else {
-            *c = 0;
-         }
-      }
-   }
-
-/* Right justify the returned string in the original field width. */
-   end = text + len;
-   c = text + strlen( text );
-   if( c != end ) {
-      while( c >= text ) *(end--) = *(c--);
-      while( end >= text ) *(end--) = ' ';
-   }
-
-/* If a minimum field width was given, shunt the text to the left in
-   order to reduce the used field width to the specified value. This
-   requires there to be some leading spaces (because we do not want to
-   loose any non-blank characters from the left hand end of the string).
-   If there are insufficient leading spaces to allow the field width to
-   be reduced to the specified value, then reduce the field width as far
-   as possible. First find the number of spaces we would like to remove
-   from the front of the string (in order to reduce the used width to the
-   specified value). */
-   bu = len - width;
-
-/* If we need to remove any leading spaces... */
-   if( width > 0 && bu > 0 ) {
-
-/* Find the number of leading spaces which are available to be removed. */
-      c = text - 1;
-      while( *(++c) == ' ' );
-      nls = c - text;
-
-/* If there are insufficient leading spaces, just use however many there
-   are. */
-      if( bu > nls ) bu = nls;
-
-/* Shift the string. */
-      c = text;
-      a = c + bu;      
-      while( ( *(c++) = *(a++) ) );
-   }
-
-/* Undefine local constants. */
-#undef NSEQ  
-
-}
-
-static int SearchCard( AstFitsChan *this, const char *name, 
-                       const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     SearchCard
-
-*  Purpose:
-*     Search the whole FitsChan for a card refering to given keyword.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int SearchCard( AstFitsChan *this, const char *name, 
-*                     const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Searches the whole FitsChan for a card refering to the supplied keyword, 
-*     and makes it the current card. The card following the current card is
-*     checked first. If this is not the required card, then a search is
-*     performed starting with the first keyword in the FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a string holding the keyword name.
-*     method
-*        Pointer to string holding name of calling method.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if a card was found refering to the given
-*     keyword. Otherwise zero is returned.
-
-*  Notes:
-*     -  If a NULL pointer is supplied for "name" then the current card
-*     is left unchanged.
-*     -  The current card is set to NULL (end-of-file) if no card can be
-*     found for the supplied keyword.
-
-*/
-
-/* Local Variables: */
-   int ret;              /* Was a card found? */
-
-/* Check the global status, and supplied keyword name. */
-   if( !astOK || !name ) return 0;
-
-/* Indicate that no card has been found yet. */
-   ret = 0;
-
-/* The required card is very often the next card in the FitsChan, so check the 
-   next card, and only search the entire FitsChan if the check fails. */
-   MoveCard( this, 1, method, class, status );
-   if( !astFitsEof( this ) && 
-       !Ustrncmp( CardName( this, status ), name, FITSNAMLEN, status ) ){
-      ret = 1;
-
-/* If the next card is not the required card, rewind the FitsChan back to 
-   the first card. */
-   } else {
-      astClearCard( this );
-
-/* Attempt to find the supplied keyword, searching from the first card. */
-      ret = FindKeyCard( this, name, method, class, status );
-   } 
-
-/* Return. */
-   return ret;
-
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astSetAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function assigns an attribute value for a FitsChan, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   const char *class;            /* Object class */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-   int warn;                     /* Offset of Warnings string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Obtain the object class. */
-   class = astGetClass( this );
-
-/* Card. */
-/* ----- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "card= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetCard( this, ival );
-
-/* Encoding. */
-/* --------- */
-   } else if( nc = 0,
-        ( 0 == astSscanf( setting, "encoding=%n%*[^\n]%n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-
-      nc = ChrLen( setting + ival, status );
-
-      if( !Ustrncmp( setting + ival, NATIVE_STRING, nc, status ) ){
-         astSetEncoding( this, NATIVE_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSPC_STRING, nc, status ) ){
-         astSetEncoding( this, FITSPC_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSPC_STRING2, nc, status ) ){
-         astSetEncoding( this, FITSPC_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSWCS_STRING, nc, status ) ){
-         astSetEncoding( this, FITSWCS_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSWCS_STRING2, nc, status ) ){
-         astSetEncoding( this, FITSWCS_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSIRAF_STRING, nc, status ) ){
-         astSetEncoding( this, FITSIRAF_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSIRAF_STRING2, nc, status ) ){
-         astSetEncoding( this, FITSIRAF_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSAIPS_STRING, nc, status ) ){
-         astSetEncoding( this, FITSAIPS_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSAIPS_STRING2, nc, status ) ){
-         astSetEncoding( this, FITSAIPS_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSAIPSPP_STRING, nc, status ) ){
-         astSetEncoding( this, FITSAIPSPP_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSAIPSPP_STRING2, nc, status ) ){
-         astSetEncoding( this, FITSAIPSPP_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSCLASS_STRING, nc, status ) ){
-         astSetEncoding( this, FITSCLASS_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, FITSCLASS_STRING2, nc, status ) ){
-         astSetEncoding( this, FITSCLASS_ENCODING );
-
-      } else if( !Ustrncmp( setting + ival, DSS_STRING, nc, status ) ){
-         astSetEncoding( this, DSS_ENCODING );
-
-      } else {
-         astError( AST__BADAT, "astSet(%s): Unknown encoding system '%s' "
-                   "requested for a %s.", status, class, setting + ival, class );
-      }
-
-/* FitsDigits. */
-/* ----------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "fitsdigits= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetFitsDigits( this, ival );
-
-/* CDMatrix */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "cdmatrix= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetCDMatrix( this, ival );
-
-/* DefB1950 */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "defb1950= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetDefB1950( this, ival );
-
-/* CarLin */
-/* ------ */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "carlin= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetCarLin( this, ival );
-
-/* Iwc */
-/* --- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "iwc= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetIwc( this, ival );
-
-/* Clean */
-/* ----- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "clean= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetClean( this, ival );
-
-/* Warnings. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "warnings=%n%*[^\n]%n", &warn, &nc ) )
-               && ( nc >= len ) ) {
-      astSetWarnings( this, setting + warn );
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
-   if a read-only attribute has been specified. */
-   } else if ( MATCH( "ncard" ) ||
-               MATCH( "allwarnings" ) ){
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-}
-
-static void SetCard( AstFitsChan *this, int icard, int *status ){
-/*
-*+
-*  Name:
-*     astSetCard
-
-*  Purpose:
-*     Set the value of the Card attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void astSetCard( AstFitsChan *this, int icard )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function sets the value of the Card attribute for the supplied 
-*     FitsChan. This is the index of the next card to be read from the
-*     FitsChan. If a value of 1 or less is supplied, the first card in
-*     the FitsChan will be read next. If a value greater than the number
-*     of cards in the FitsChan is supplied, the FitsChan will be left in an
-*     "end-of-file" condition, in which no further read operations can be
-*     performed.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     icard
-*        The index of the next card to read.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has occurred.
-
-*-
-*/
-
-/* Check the supplied object. */
-   if ( !this ) return;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Rewind the FitsChan. */
-   astClearCard( this );
-
-/* Move forward the requested number of cards. */
-   MoveCard( this, icard - 1, "astSetCard", astGetClass( this ), status );
-
-/* Return. */
-   return;
-}
-
-static void SetItem( double ****item, int i, int jm, char s, double val, int *status ){
-/*
-*  Name:
-*     SetItem
-
-*  Purpose:
-*     Store a value for a axis keyword value in a FitStore structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void SetItem( double ****item, int i, int jm, char s, double val, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The supplied keyword value is stored in the specified array,
-*     at a position indicated by the axis and co-ordinate version.
-*     The array is created or extended as necessary to make room for 
-*     the new value. Any old value is over-written.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->crval) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates an
-*        array of axis keyword values. These arrays of keyword values have 
-*        one element for every pixel axis (j) or projection parameter (m). 
-*     i
-*        The zero based intermediate axis index in the range 0 to 98. Set 
-*        this to zero for keywords (e.g. CRPIX) which are not indexed by 
-*        intermediate axis number.
-*     jm
-*        The zero based pixel axis index (in the range 0 to 98) or parameter 
-*        index (in the range 0 to WCSLIB__MXPAR-1). Set this to zero for 
-*        keywords (e.g. CRVAL) which are not indexed by either pixel axis or 
-*        parameter number.
-*     val
-*        The keyword value to store.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int el;               /* Array index */
-   int nel;              /* Number of elements in array */
-   int si;               /* Integer co-ordinate version index */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Convert the character co-ordinate version into an integer index, and
-   check it is within range. The primary axis description (s=' ') is
-   given index zero. 'A' is 1, 'B' is 2, etc. */
-   if( s == ' ' ) {
-      si = 0;
-   } else if( islower(s) ){
-      si = (int) ( s - 'a' ) + 1;
-   } else {
-      si = (int) ( s - 'A' ) + 1;
-   }
-
-   if( si < 0 || si > 26 ) {
-      astError( AST__INTER, "SetItem(fitschan): AST internal error; "
-                "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
-   } else if( i < 0 || i > 98 ) {
-      astError( AST__INTER, "SetItem(fitschan): AST internal error; "
-                "intermediate axis index %d is invalid.", status, i );
-
-/* Check the pixel axis or parameter index is within range. */
-   } else if( jm < 0 || jm > 99 ) {
-      astError( AST__INTER, "SetItem(fitschan): AST internal error; "
-                "pixel axis or parameter index %d is invalid.", status, jm );
-
-/* Otherwise proceed... */
-   } else {
-
-/* Store the current number of coordinate versions in the supplied array */
-      nel = astSizeOf( (void *) *item )/sizeof(double **);
-
-/* If required, extend the array located by the supplied pointer so that
-   it is long enough to hold the specified co-ordinate version. */ 
-      if( nel < si + 1 ){
-         *item = (double ***) astGrow( (void *) *item, si + 1, 
-                                      sizeof(double **) ); 
-
-/* Check the pointer can be used. */
-         if( astOK ){
-
-/* Initialise the new elements to hold NULL. Note, astGrow may add more
-   elements to the array than is actually needed, so use the actual current
-   size of the array as implied by astSize rather than the index si. */
-            for( el = nel; 
-                 el < astSizeOf( (void *) *item )/sizeof(double **);
-                 el++ ) (*item)[el] = NULL;
-         }
-      }
-
-/* If the above went OK... */
-      if( astOK ){
-
-/* Store the currrent number of intermediate axes in the supplied array */
-         nel = astSizeOf( (void *) (*item)[si] )/sizeof(double *);
-
-/* If required, extend the array so that it is long enough to hold the 
-   specified intermediate axis. */ 
-         if( nel < i + 1 ){
-            (*item)[si] = (double **) astGrow( (void *) (*item)[si], i + 1, 
-                                      sizeof(double *) ); 
-
-/* Check the pointer can be used. */
-            if( astOK ){
-
-/* Initialise the new elements to hold NULL. */
-               for( el = nel; 
-                    el < astSizeOf( (void *) (*item)[si] )/sizeof(double *);
-                    el++ ) (*item)[si][el] = NULL;
-            }
-         }
-
-/* If the above went OK... */
-         if( astOK ){
-
-/* Store the current number of pixel axis or parameter values in the array. */
-            nel = astSizeOf( (void *) (*item)[si][i] )/sizeof(double);
-
-/* If required, extend the array so that it is long enough to hold the 
-   specified axis. */ 
-            if( nel < jm + 1 ){
-               (*item)[si][i] = (double *) astGrow( (void *) (*item)[si][i], 
-                                                    jm + 1, sizeof(double) ); 
-
-/* Check the pointer can be used. */
-               if( astOK ){
-
-/* Initialise the new elements to hold AST__BAD. */
-                  for( el = nel; 
-                       el < astSizeOf( (void *) (*item)[si][i] )/sizeof(double);
-                       el++ ) (*item)[si][i][el] = AST__BAD;
-               }
-            }
-
-/* If the above went OK, store the supplied keyword value. */
-            if( astOK ) (*item)[si][i][jm] = val;
-         }
-      }
-   }
-}
-
-static void SetItemC( char ****item, int i, char s, const char *val, int *status ){
-/*
-*  Name:
-*     SetItemC
-
-*  Purpose:
-*     Store a character string for an axis keyword value in a FitStore 
-*     structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void SetItemC( char ****item, int i, char s, const char *val, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The supplied keyword string value is stored in the specified array,
-*     at a position indicated by the axis and co-ordinate version.
-*     The array is created or extended as necessary to make room for 
-*     the new value. Any old value is over-written.
-
-*  Parameters:
-*     item
-*        The address of the pointer within the FitsStore which locates the 
-*        arrays of values for the required keyword (eg &(store->ctype) ).
-*        The array located by the supplied pointer contains a vector of
-*        pointers. Each of these pointers is associated with a particular
-*        co-ordinate version (s), and locates an array of pointers for that 
-*        co-ordinate version. Each such array of pointers has an element
-*        for each intermediate axis number (i), and the pointer locates a
-*        character string. 
-*     i
-*        The zero based intermediate axis index in the range 0 to 98. Set 
-*        this to zero for keywords (e.g. RADESYS) which are not indexed by 
-*        intermediate axis number.
-*     val
-*        The keyword string value to store. A copy of the supplied string
-*        is taken.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int el;               /* Array index */
-   int nel;              /* Number of elements in array */
-   int si;               /* Integer co-ordinate version index */
-
-/* Check the inherited status. Also return if a null pointer was supplied */
-   if( !astOK || !val ) return;
-
-/* Convert the character co-ordinate version into an integer index, and
-   check it is within range. The primary axis description (s=' ') is
-   given index zero. 'A' is 1, 'B' is 2, etc. */
-   if( s == ' ' ) {
-      si = 0;
-   } else if( islower(s) ){
-      si = (int) ( s - 'a' ) + 1;
-   } else {
-      si = (int) ( s - 'A' ) + 1;
-   }
-
-   if( si < 0 || si > 26 ) {
-      astError( AST__INTER, "SetItemC(fitschan): AST internal error; "
-                "co-ordinate version '%c' ( char(%d) ) is invalid.", status, s, s );
-
-/* Check the intermediate axis index is within range. */
-   } else if( i < 0 || i > 98 ) {
-      astError( AST__INTER, "SetItemC(fitschan): AST internal error; "
-                "intermediate axis index %d is invalid.", status, i );
-
-/* Otherwise proceed... */
-   } else {
-
-/* Store the current number of coordinate versions in the supplied array */
-      nel = astSizeOf( (void *) *item )/sizeof(char **);
-
-/* If required, extend the array located by the supplied pointer so that
-   it is long enough to hold the specified co-ordinate version. */ 
-      if( nel < si + 1 ){
-         *item = (char ***) astGrow( (void *) *item, si + 1, 
-                                      sizeof(char **) ); 
-
-/* Check the pointer can be used. */
-         if( astOK ){
-
-/* Initialise the new elements to hold NULL. */
-            for( el = nel; 
-                 el < astSizeOf( (void *) *item )/sizeof(char **);
-                 el++ ) (*item)[el] = NULL;
-         }
-      }
-
-/* If the above went OK... */
-      if( astOK ){
-
-/* Store the currrent number of intermediate axes in the supplied array */
-         nel = astSizeOf( (void *) (*item)[si] )/sizeof(char *);
-
-/* If required, extend the array so that it is long enough to hold the 
-   specified intermediate axis. */ 
-         if( nel < i + 1 ){
-            (*item)[si] = (char **) astGrow( (void *) (*item)[si], i + 1, 
-                                      sizeof(char *) ); 
-
-/* Check the pointer can be used. */
-            if( astOK ){
-
-/* Initialise the new elements to hold NULL. */
-               for( el = nel; 
-                    el < astSizeOf( (void *) (*item)[si] )/sizeof(char *);
-                    el++ ) (*item)[si][el] = NULL;
-            }
-         }
-
-/* If the above went OK... */
-         if( astOK ){
-
-/* Store a copy of the supplied string, using any pre-allocated memory. */
-            (*item)[si][i] = (char *) astStore( (void *) (*item)[si][i],
-                                                (void *) val, 
-                                                strlen( val ) + 1 );
-         }
-      }
-   }
-}
-
-static void SetValue( AstFitsChan *this, const char *keyname, void *value, 
-                      int type, const char *comment, int *status ){
-/*
-*  Name:
-*     SetValue
-
-*  Purpose:
-*     Save a FITS keyword value, over-writing any existing keyword value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void SetValue( AstFitsChan *this, char *keyname, void *value, 
-*                    int type, const char *comment, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function saves a keyword value as a card in the supplied
-*     FitsChan. Comment cards are always inserted in-front of the current
-*     card. If the keyword is not a comment card, any existing value 
-*     for the keyword is over-written with the new value (even if it is 
-*     marked as having been read). Otherwise, (i.e. if it is not a comment
-*     card, and no previous value exists) it is inserted in front 
-*     of the current card. 
-
-*  Parameters:
-*     this
-*        A pointer to the FitsChan.
-*     keyname
-*        A pointer to a string holding the keyword name.
-*     value
-*        A pointer to a buffer holding the keyword value. For strings,
-*        the buffer should hold a pointer to the character string.
-*     type
-*        The FITS data type of the supplied keyword value. 
-*     comment
-*        A comment to store with the keyword.
-*     status
-*        Pointer to the inherited status variable.
-
-*   Notes:
-*     -  Nothing is stored if a NULL pointer is supplied for "value".
-*     -  If the keyword has a value of AST__BAD then nothing is stored,
-*     and an error is reported.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS     /* Declare the thread specific global data */
-   FitsCard *card;        /* Pointer to original current card */
-   const char *class;     /* Class name to include in error messages */
-   const char *method;    /* Method name to include in error messages */
-   int newcard;           /* Has the original current card been deleted? */
-   int old_ignore_used;   /* Original setting of external ignore_used variable */
-   int stored;            /* Has the keyword been stored? */
-
-/* Check the status and supplied value pointer. */
-   if( !astOK || !value ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Set up the method and class names for inclusion in error mesages. */
-   method = "astWrite";
-   class = astGetClass( this );
-
-/* Comment card are always inserted in-front of the current card. */
-   if ( type == AST__COMMENT ) {
-      SetFits( this, keyname, value, type, comment, 0, status );
-
-/* Otherwise... */
-   } else {
-
-/* Report an error if a bad value is stored for a keyword. */
-      if( type == AST__FLOAT ){
-         if( *( (double *) value ) == AST__BAD && astOK ) {
-            astError( AST__BDFTS, "%s(%s): The required FITS keyword "
-                      "\"%s\" is indeterminate.", status, method, class, keyname );
-         }
-      }
-
-/* Save a pointer to the current card. */
-      card = (FitsCard *) this->card;
-
-/* Indicate that we should not skip over cards marked as having been
-   read. */
-      old_ignore_used = ignore_used;
-      ignore_used = 0;
-
-/* Indicate that we have not yet stored the keyword value. */
-      stored = 0;
-
-/* Attempt to find a card refering to the supplied keyword. If one is
-   found, it becomes the current card. */
-      if( SearchCard( this, keyname, "astWrite", astGetClass( this ), status ) ){
-
-/* If the card which was current on entry to this function will be
-   over-written, we will need to take account of this when re-instating the
-   original current card. Make a note of this. */
-         newcard = ( card == (FitsCard *) this->card );
-
-/* Replace the current card with a card holding the supplied information. */
-         SetFits( this, keyname, value, type, comment, 1, status );
-         stored = 1;
-
-/* If we have just replaced the original current card, back up a card 
-   so that the replacement card becomes the current card. */
-         if( newcard ) {
-            MoveCard( this, -1, "astWrite", astGetClass( this ), status );
-
-/* Otherwise, re-instate the original current card. */
-         } else {
-            this->card = (void *) card;
-         }
-      }
-
-/* If the keyword has not yet been stored (i.e. if it did not exist in the 
-   FitsChan), re-instate the original current card and insert the new card 
-   before the original current card, leaving the current card unchanged. */
-      if( !stored ) {
-         this->card = (void *) card;
-         SetFits( this, keyname, value, type, comment, 0, status );
-      }
-
-/* Re-instate the original flag indicating if cards marked as having been 
-   read should be skipped over. */
-      ignore_used = old_ignore_used;
-   }
-}
-
-static int Similar( const char *str1, const char *str2, int *status ){
-/*
-*  Name:
-*     Similar
-
-*  Purpose:
-*     Are two string effectively the same to human readers?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void Similar( const char *str1, const char *str2, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function returns a non-zero value if the two supplied strings 
-*     are equivalent to a human reader. This is assumed to be the case if
-*     the strings are equal apart from leading and trailing white space,
-*     multiple embedded space, and case.
-
-*  Parameters:
-*     str1
-*        The first string
-*     str2
-*        The second string
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the two supplied strings are equivalent, and zero
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   const char *ea;         /* Pointer to end of string a */
-   const char *eb;         /* Pointer to end of string b */
-   const char *a;          /* Pointer to next character in string a */
-   const char *b;          /* Pointer to next character in string b */
-   int result;             /* Are the two strings equivalent? */
-   int ss;                 /* Skip subsequent spaces? */
-
-/* Initialise */
-   result = 0;
-
-/* Check the status and supplied value pointer. */
-   if( !astOK ) return result;
-
-/* Initialise pointers into the two strings. */
-   a = str1;
-   b = str2;
-
-/* Get a pointer to the character following the last non-blank character in 
-   each string. */
-   ea = a + ChrLen( a, status ) - 1;
-   eb = b + ChrLen( b, status ) - 1;
-
-/* Set a flag indicating that spaces before the next non-blank character
-   should be ignored. */
-   ss = 1;
-
-/* Compare the strings. */
-   while( 1 ){
-
-/* Move on to the next significant character in both strings. */
-      while( a < ea && *a == ' ' && ss ) a++;      
-      while( b < eb && *b == ' ' && ss ) b++;      
-
-/* If one string has been exhausted but the other has not, the strings
-   are not equivalent. */
-      if( ( a < ea && b == eb ) || ( a == ea && b < eb ) ) {
-         break;
-
-/* If both strings have been exhausted simultaneously, the strings
-   are equivalent. */
-      } else if( b == eb && a == ea ) {
-         result = 1;
-         break;
-
-/* If neither string has been exhausted, compare the current character
-   for equality, ignoring case. Break if they are different. */
-      } else if( tolower( *a ) != tolower( *b ) ){
-         break;
-
-/* If the two characters are both spaces, indicate that subsequent spaces
-   should be skipped. */
-      } else if( *a == ' ' ) {
-         ss = 1;
-
-/* If the two characters are not spaces, indicate that subsequent spaces
-   should not be skipped. */
-      } else {
-         ss = 0;
-
-      }
-
-/* Move on to the next characters. */
-      a++;
-      b++;
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-*  Name:
-*     SinkWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C FitsChan sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function invokes the sink function whose pointer is
-*     supplied in order to write an output line to an external data
-*     store.
-
-*  Parameters:
-*     sink
-*        Pointer to a sink function, whose single parameter is a
-*        pointer to a const, null-terminated string containing the
-*        text to be written, and which returns void. This is the form
-*        of FitsChan sink function employed by the C language interface
-*        to the AST library.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the sink function. */
-   ( *sink )( line );
-}
-
-static AstMapping *SIPMapping( FitsStore *store, char s, int naxes, 
-                               const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     SIPMapping
-
-*  Purpose:
-*     Create a Mapping descriping "-SIP" (SIRTF) distortion.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *SIPMapping( FitsStore *store, char s, int naxes, 
-*                             const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function uses the values in the supplied FitsStore to create a
-*     Mapping which implements the "-SIP" distortion code. This is the
-*     code used by the SIRTF project and is described in:
-
-*     http://sirtf.caltech.edu/SSC/documents/WCSkeywords_v1.3.pdf
-*
-*     SIP distortion can only be applied to axes 0 and 1. Other axes are
-*     passed unchanged by the returned Mapping.
-
-*  Parameters:
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     naxes
-*        The number of intermediate world coordinate axes (WCSAXES).
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
-   AstMapping   *ret;        /* Pointer to the returned Mapping */
-   AstPolyMap *pmap;         /* PolyMap describing the distortion */
-   double ****item;          /* Address of FitsStore item to use */
-   double *c;                /* Pointer to start of coefficient description */
-   double *coeff_f;          /* Array of coeffs. for forward transformation */
-   double *coeff_i;          /* Array of coeffs. for inverse transformation */
-   double cof;               /* Coefficient value */
-   int def;                  /* Is transformation defined? */
-   int iin;                  /* Input (u or v) index */
-   int iout;                 /* Output (U or V) index */
-   int ncoeff_f;             /* No. of coeffs. for forward transformation */
-   int ncoeff_i;             /* No. of coeffs. for inverse transformation */
-   int p;                    /* Power of u or U */
-   int pmax;                 /* Max power of u or U */
-   int q;                    /* Power of v or V */
-   int qmax;                 /* Max power of v or V */
-
-/* Initialise the pointer to the returned Mapping. */
-   ret = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return ret;
-
-/* Store coefficients of the forward transformation:
-   ================================================ */
-
-/* Indicate that we have as yet no coefficients for the forward polynomials. */
-   ncoeff_f = 0;
-
-/* Indicate that we do not yet have any evidence that the forward
-   transformation is defined. */
-   def = 0;
-
-/* Allocate workspace to hold descriptions of (initially) 20 coefficients used 
-   within the forward polynomials. */
-   coeff_f = astMalloc( sizeof( double )*20 );
-
-/* Store the coefficients of the polynomial which produces each output 
-   axis (U or V) in turn. */
-   for( iout = 0; iout < 2; iout++ ){
-
-/* Get a pointer to the FitsStore item holding the values defining this
-   output. */
-      item = ( iout == 0 ) ? &(store->asip) : &(store->bsip);
-
-/* Get the largest powers used of u and v. */
-      pmax = GetMaxI( item, s, status );
-      qmax = GetMaxJM( item, s, status );
-
-/* Loop round all combination of powers. */
-      for( p = 0; p <= pmax; p++ ){
-         for( q = 0; q <= qmax; q++ ){
-
-/* Get the polynomial coefficient for this combination of powers. */
-            cof = GetItem( item, p, q, s, NULL, method, class, status );
-
-/* If there is no coefficient for this combination of powers, use a value
-   of zero. Otherwise indicate we have found at least one coefficient. */
-            if( cof == AST__BAD ) {
-               cof = 0.0;
-            } else {
-               def = 1;
-            }
-
-/* The distortion polynomial gives a correction to be added on to the
-   input value. On the other hand, the returned Mapping is a direct 
-   transformation from input to output. Therefore increment the coefficient 
-   value by 1 for the term which corresponds to the current output axis. */
-            if( p == ( 1 - iout ) && q == iout ) cof += 1.0;
-
-/* If the coefficient is not zero, store it in the array of coefficient
-   descriptions. */
-            if( cof != 0.0 ) {
-
-/* Increment the number of coefficients for the forward polynomials. */
-               ncoeff_f++;
-
-/* Ensure the "coeff_f" array is large enough to hold the new coefficient. */
-               coeff_f = astGrow( coeff_f, sizeof( double )*4, ncoeff_f );
-               if( astOK ) {
-
-/* Store it. Each coefficient is described by 4 values (since we have 2
-   inputs to the Mapping). The first is the coefficient value, the second
-   is the (1-based) index of the output to which the coefficient relates. 
-   The next is the power of input 0, and the last one is the power of input 1. */
-                  c = coeff_f + 4*( ncoeff_f - 1 );
-                  c[ 0 ] = cof;
-                  c[ 1 ] = iout + 1;
-                  c[ 2 ] = p;
-                  c[ 3 ] = q;
-               }
-            }
-         }
-      }
-   }
-
-/* If no coefficients were supplied in the FitsStore, the forward
-   transformation is undefined. */
-   if( !def ) ncoeff_f = 0;
-
-/* Store coefficients of the inverse transformation:
-   ================================================ */
-
-/* Indicate that we have as yet no coefficients for the inverse polynomials. */
-   ncoeff_i = 0;
-
-/* Indicate that we do not yet have any evidence that the forward
-   transformation is defined. */
-   def = 0;
-
-/* Allocate workspace to hold descriptions of (initially) 20 coefficients used 
-   within the inverse polynomials. */
-   coeff_i = astMalloc( sizeof( double )*20 );
-
-/* Store the coefficients of the polynomial which produces each input 
-   axis (u or v) in turn. */
-   for( iin = 0; iin < 2; iin++ ){
-
-/* Get a pointer to the FitsStore item holding the values defining this
-   output. */
-      item = ( iin == 0 ) ? &(store->apsip) : &(store->bpsip);
-
-/* Get the largest powers used of U and V. */
-      pmax = GetMaxI( item, s, status );
-      qmax = GetMaxJM( item, s, status );
-
-/* Loop round all combination of powers. */
-      for( p = 0; p <= pmax; p++ ){
-         for( q = 0; q <= qmax; q++ ){
-
-/* Get the polynomial coefficient for this combination of powers. */
-            cof = GetItem( item, p, q, s, NULL, method, class, status );
-
-/* If there is no coefficient for this combination of powers, use a value
-   of zero. Otherwise indicate we have found at least one coefficient. */
-            if( cof == AST__BAD ) {
-               cof = 0.0;
-            } else {
-               def = 1;
-            }
-
-/* The distortion polynomial gives a correction to be added on to the
-   output value. On the other hand, the returned Mapping is a direct 
-   transformation from output to input. Therefore increment the coefficient 
-   value by 1 for the term which corresponds to the current input axis. */
-            if( p == ( 1 - iin ) && q == iin ) cof += 1.0;
-
-/* If the coefficient is not zero, store it in the array of coefficient
-   descriptions. */
-            if( cof != 0.0 ) {
-
-/* Increment the number of coefficients for the inverse polynomials. */
-               ncoeff_i++;
-
-/* Ensure the "coeff_i" array is large enough to hold the new coefficient. */
-               coeff_i = astGrow( coeff_i, sizeof( double )*4, ncoeff_i );
-               if( astOK ) {
-
-/* Store it. Each coefficient is described by 4 values (since we have 2
-   outputs to the Mapping). The first is the coefficient value, the second
-   is the (1-based) index of the input to which the coefficient relates. The 
-   next is the power of output 0, and the last one is the power of output 1. */
-                  c = coeff_i + 4*( ncoeff_i - 1 );
-                  c[ 0 ] = cof;
-                  c[ 1 ] = iin + 1;
-                  c[ 2 ] = p;
-                  c[ 3 ] = q;
-               }
-            }
-         }
-      }
-   }
-
-/* If no coefficients were supplied in the FitsStore, the forward
-   transformation is undefined. */
-   if( !def ) ncoeff_f = 0;
-
-/* Create the returned Mapping:
-   ============================ */
-
-/* If neither transformation is defined, create a UnitMap. */
-   if( ncoeff_f == 0 && ncoeff_i == 0 ){
-      ret = (AstMapping *) astUnitMap( naxes, "", status );
-
-/* Otherwise, create a PolyMap to describe axes 0 and 1. */
-   } else {
-      pmap = astPolyMap( 2, 2, ncoeff_f, coeff_f, ncoeff_i, coeff_i, "", status );
-
-/* Add the above Mapping in parallel with a UnitMap which passes any
-   other axes unchanged. */
-      ret = AddUnitMaps( (AstMapping *) pmap, 0, naxes, status );
-      pmap = astAnnul( pmap );
-
-   }
-
-/* Free resources. */
-   coeff_f = astFree( coeff_f );
-   coeff_i = astFree( coeff_i );
-
-/* Return the result. */
-   return ret;
-}
-
-static void SkyPole( AstWcsMap *map2, AstMapping *map3, int ilon, int ilat, 
-                     int *wperm, char s, FitsStore *store, const char *method, 
-                     const char *class, int *status ){
-/*
-*  Name:
-*     SkyPole
-
-*  Purpose:
-*     Put values for FITS keywords LONPOLE and LATPOLE into a FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void SkyPole( AstWcsMap *map2, AstMapping *map3, int ilon, int ilat, 
-*                   int *wperm, char s, FitsStore *store, const char *method, 
-*                   const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function calculates values for the LONPOLE and LATPOLE FITS 
-*     keywords and stores them in the supplied FitsStore. LONPOLE and 
-*     LATPOLE are the longitude and latitude of the celestial north pole 
-*     in native spherical coordinates.
-
-*  Parameters:
-*     map2
-*        Pointer to the Mapping from Intermediate World Coordinates to Native 
-*        Spherical Coordinates.
-*     map3
-*        Pointer to the Mapping from Native Spherical Coordinates to celestial 
-*        coordinates.
-*     ilon
-*        Zero-based index of longitude output from "map3".
-*     ilat
-*        Zero-based index of latitude output from "map3".
-*     wperm
-*        Pointer to an array of integers with one element for each axis of 
-*        the current Frame. Each element holds the zero-based 
-*        index of the FITS-WCS axis (i.e. the value of "i" in the keyword 
-*        names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     store
-*        The FitsStore in which to store the FITS WCS keyword values.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;      /* PointSet holding intermediate wcs coords */
-   AstPointSet *pset2;      /* PointSet holding final WCS coords */
-   double **ptr1;           /* Pointer to coordinate data */
-   double **ptr2;           /* Pointer to coordinate data */
-   double alpha0;           /* Long. of fiducial point in standard system */
-   double alphap;           /* Celestial longitude of native north pole */
-   double deflonpole;       /* Default value for lonpole */
-   double delta0;           /* Lat. of fiducial point in standard system */
-   double latpole;          /* Native latitude of celestial north pole */
-   double lonpole;          /* Native longitude of celestial north pole */
-   double phi0;             /* Native longitude at fiducial point */
-   double theta0;           /* Native latitude at fiducial point */
-   int axlat;               /* Index of latitude output from "map2" */
-   int axlon;               /* Index of longitude output from "map2" */
-   int fits_ilat;           /* FITS WCS axis index for latitude axis */
-   int fits_ilon;           /* FITS WCS axis index for longitude axis */
-   int iax;                 /* Axis index */
-   int nax;                 /* Number of IWC axes */
-   int nax2;                /* Number of WCS axes */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Store the indices of the native longitude and latitude outputs of the
-   WcsMap. */
-   axlon = astGetWcsAxis( map2, 0 );
-   axlat = astGetWcsAxis( map2, 1 );
-
-/* Store the indices of the FITS WCS axes for longitude and latitude */
-   fits_ilon = wperm[ ilon ];
-   fits_ilat = wperm[ ilat ];
-
-/* To find the longitude and latitude of the celestial north pole in native 
-   spherical coordinates, we will transform the coords of the celestial north 
-   pole into spherical cords using the inverse of "map2", and if the resulting
-   native spherical coords differ from the default values of LONPOLE and 
-   LATPOLE, we store them in the FitsStore. However, for zenithal projections, 
-   any value can be used simply by introducing an extra rotation into the 
-   (X,Y) projection plane. If values have been set in the WcsMap (as
-   projection parameters PVi_3 and PVi_4 for longitude axis "i") uses
-   them. Otherwise, set the values bad to indicate that the default values
-   should be used. Note, these projection parameters are used for other
-   purposes in a TPN projection. */
-   lonpole = AST__BAD;
-   latpole = AST__BAD;
-   if( astIsZenithal( map2 ) ) {
-      if( astGetWcsType( map2 ) != AST__TPN ) {
-         lonpole = astTestPV( map2, axlon, 3 ) ? astGetPV( map2, axlon, 3 ) 
-                                                : AST__BAD;
-         latpole = astTestPV( map2, axlon, 4 ) ? astGetPV( map2, axlon, 4 ) 
-                                                : AST__BAD;
-      } 
-
-/* For non-zenithal projections, do the full calculation. */
-   } else {
-
-/* Allocate resources. */
-      nax = astGetNin( map2 );
-      pset1 = astPointSet( 1, nax, "", status );
-      ptr1 = astGetPoints( pset1 );
-
-      nax2 = astGetNout( map3 );
-      pset2 = astPointSet( 1, nax2, "", status );
-      ptr2 = astGetPoints( pset2 );
-      if( astOK ) {
-
-/* Calculate the longitude and latitude of the celestial north pole 
-   in native spherical coordinates (using the inverse of map3). These 
-   values correspond to the LONPOLE and LATPOLE keywords. */
-         for( iax = 0; iax < nax2; iax++ ) ptr2[ iax ][ 0 ] = 0.0;
-         ptr2[ ilat ][ 0 ] = AST__DPIBY2;
-         (void) astTransform( map3, pset2, 0, pset1 );
-
-/* Retrieve the latitude and longitude (in the standard system) of the 
-   fiducial point (i.e. CRVAL), in radians. */
-         delta0 = GetItem( &(store->crval), fits_ilat, 0, s, NULL, method, class, status );
-         if( delta0 == AST__BAD ) delta0 = 0.0;
-         delta0 *= AST__DD2R;
-   
-         alpha0 = GetItem( &(store->crval), fits_ilon, 0, s, NULL, method, class, status );
-         if( alpha0 == AST__BAD ) alpha0 = 0.0;
-         alpha0 *= AST__DD2R;
-
-/* The default value of the LATPOLE is defined by equation 8 of FITS-WCS 
-   paper II (taking the +ve signs). Find this value. */
-         if( WcsNatPole( NULL, map2, alpha0, delta0, 999.0, ptr1[ axlon ], 
-                         &alphap, &latpole, status ) ){
-
-/* If the default value is defined, compare it to the latitude of the 
-   north pole found above. If they are equal use a bad value instead to
-   prevent an explicit keyword from being added to the FitsChan. */
-            if( EQUALANG( ptr1[ axlat ][ 0 ], latpole ) ) {
-               latpole = AST__BAD;
-            } else {
-               latpole = ptr1[ axlat ][ 0 ];
-            }
-
-/* If the default value is not defined, always store an explicit LATPOLE 
-   value. */
-         } else {
-            latpole = ptr1[ axlat ][ 0 ];
-         }
-
-/* The default LONPOLE value is zero if the celestial latitude at the 
-   fiducial point is greater than or equal to the native latitude at the 
-   fiducial point. Otherwise, the default is (+ or -) 180 degrees. If LONPOLE 
-   takes the default value, replace it with AST__BAD to prevent an explicit 
-   keyword being stored in the FitsChan. */
-         GetFiducialNSC( map2, &phi0, &theta0, status );
-         lonpole = palSlaDranrm( ptr1[ axlon ][ 0 ] );
-         if( delta0 >= theta0 ){
-            deflonpole = 0.0;
-         } else {
-            deflonpole = AST__DPI;
-         }
-         if( EQUALANG( lonpole, deflonpole ) ) lonpole = AST__BAD;
-
-      }
-
-/* Convert from radians to degrees. */
-      if( lonpole != AST__BAD ) lonpole *= AST__DR2D;
-      if( latpole != AST__BAD ) latpole *= AST__DR2D;
-
-/* Free resources. */
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-
-   }
-
-/* Store these values. */
-   SetItem( &(store->lonpole), 0, 0, s, lonpole, status );
-   SetItem( &(store->latpole), 0, 0, s, latpole, status );
-
-/* FITS-WCS paper 2 recommends putting a copy of LONPOLE and LATPOLE in
-   projection parameters 3 and 4 associated with the longitude axis. Only do
-   this if the projection is not TPN (since this projection uses these
-   parameters for other purposes). */
-   if( astGetWcsType( map2 ) != AST__TPN ) {
-      SetItem( &(store->pv), fits_ilon, 3, s, lonpole, status );
-      SetItem( &(store->pv), fits_ilon, 4, s, latpole, status );
-   }
-}
-
-static int SkySys( AstSkyFrame *skyfrm, int wcstype, FitsStore *store,
-                   int axlon, int axlat, char s, 
-                   const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     SkySys
-
-*  Purpose:
-*     Return FITS-WCS values describing a sky coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int SkySys( AstSkyFrame *skyfrm, int wcstype, FitsStore *store,
-*                 int axlon, int axlat, char s, 
-*                 const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function sets values for the following FITS-WCS keywords
-*     within the supplied FitsStore structure: CTYPE, CNAME, RADECSYS, EQUINOX,
-*     MJDOBS, CUNIT, OBSGEO-X/Y/Z. The values are derived from the supplied 
-*     SkyFrame and WcsMap.
-
-*  Parameters:
-*     skyfrm
-*        A pointer to the SkyFrame to be described.
-*     wcstype
-*        An identifier for the type of WCS projection to use.
-*     store
-*        A pointer to the FitsStore structure in which to store the
-*        results.
-*     axlon
-*        The index of the FITS WCS longitude axis (i.e. the value of "i"
-*        in "CTYPEi").
-*     axlat
-*        The index of the FITS WCS latitude axis (i.e. the value of "i"
-*        in "CTYPEi").
-*     s
-*        Co-ordinate version character.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Are the keywords values in the FitsStore usable?
-
-*/
-
-/* Local Variables: */
-   char *label;             /* Pointer to axis label string */
-   char lattype[MXCTYPELEN];/* Latitude axis CTYPE value */
-   char lontype[MXCTYPELEN];/* Longitude axis CTYPE value */
-   const char *latsym;      /* SkyFrame latitude axis symbol */
-   const char *lonsym;      /* SkyFrame longitude axis symbol */
-   const char *prj_name;    /* Pointer to projection name string */
-   const char *sys;         /* Celestal coordinate system */
-   double ep;               /* Epoch of observation (MJD) */
-   double eq;               /* Epoch of reference equinox (MJD) */
-   double h;                /* Geodetic altitude of observer (metres) */
-   double geolat;           /* Geodetic latitude of observer (radians) */
-   double geolon;           /* Geodetic longitude of observer (radians) */
-   double r;                /* Distance (in AU) from earth axis */
-   double z;                /* Distance (in AU) above earth equator */
-   int defdate;             /* Can the date keywords be defaulted? */
-   int i;                   /* Character count */
-   int isys;                /* Celestial coordinate system */
-   int latax;               /* Index of latitude axis in SkyFrame */
-   int lonax;               /* Index of longitude axis in SkyFrame */
-   int radesys;             /* RA/DEC reference frame */
-   int ret;                 /* Returned flag */
-
-/* Check the status. */
-   if( !astOK ) return 0;
-
-/* Check we have a SkyFrame. */
-   if( !astIsASkyFrame( skyfrm ) ) return 0;
-
-/* Initialise */
-   ret = 1;
-
-/* Get the equinox, epoch of observation, and system of the SkyFrame. */
-   eq = astGetEquinox( skyfrm );               
-   if( astTestEpoch( skyfrm ) ) {
-      ep = TDBConv( astGetEpoch( skyfrm ), AST__UTC, 1, method, class, status );
-   } else {
-      ep = AST__BAD;
-   }
-   sys = astGetC( skyfrm, "system" );
-
-/* The MJD-OBS and DATE-OBS keywords default to the epoch of the
-   reference equinox if not supplied. Therefore MJD-OBS and DATE-OBS do
-   not need to be stored in the FitsChan if the epoch of observation is 
-   the same as the epoch of the reference equinox. This can avoid 
-   producing FITS headers which say unlikely things like
-   DATE-OBS = "01/01/50". Set a flag indicating if MJD-OBS and DATE-OBS
-   can be defaulted. */
-   defdate = EQUAL( ep, eq );
-
-/* Convert the equinox to a Julian or Besselian epoch. Also get the
-   reference frame and standard system. */
-   if( !Ustrcmp( sys, "FK4", status ) ){
-      eq = palSlaEpb( eq );
-      radesys = FK4;
-      isys = RADEC;
-      SetItemC( &(store->radesys), 0, s, "FK4", status );
-      
-   } else if( !Ustrcmp( sys, "FK4_NO_E", status ) || !Ustrcmp( sys, "FK4-NO-E", status ) ){
-      eq = palSlaEpb( eq );
-      radesys = FK4NOE;
-      isys = RADEC;
-      SetItemC( &(store->radesys), 0, s, "FK4-NO-E", status );
-
-   } else if( !Ustrcmp( sys, "FK5", status ) ){
-      eq = palSlaEpj( eq );
-      radesys = FK5;
-      isys = RADEC;
-      SetItemC( &(store->radesys), 0, s, "FK5", status );
-
-   } else if( !Ustrcmp( sys, "ICRS", status ) ){
-      eq = AST__BAD;
-      radesys = ICRS;
-      isys = RADEC;
-      SetItemC( &(store->radesys), 0, s, "ICRS", status );
-
-   } else if( !Ustrcmp( sys, "GAPPT", status ) ||
-              !Ustrcmp( sys, "Apparent", status ) ||
-              !Ustrcmp( sys, "Geocentric", status ) ){
-      eq = AST__BAD;
-      radesys = GAPPT;
-      isys = RADEC;
-      SetItemC( &(store->radesys), 0, s, "GAPPT", status );
-
-   } else if( !Ustrcmp( sys, "Helioecliptic", status ) ){
-      eq = AST__BAD;
-      radesys = NORADEC;
-      isys = HECLIP;
-
-   } else if( !Ustrcmp( sys, "Galactic", status ) ){
-      eq = AST__BAD;
-      radesys = NORADEC;
-      isys = GALAC;
-
-   } else if( !Ustrcmp( sys, "Supergalactic", status ) ){
-      eq = AST__BAD;
-      radesys = NORADEC;
-      isys = SUPER;
-
-   } else if( !Ustrcmp( sys, "AzEl", status ) ){
-      eq = AST__BAD;
-      radesys = NORADEC;
-      isys = AZEL;
-
-   } else {
-      eq = AST__BAD;
-      radesys = NORADEC;
-      isys = NOCEL;
-   }
-
-/* Store these values. Only store the date if it does not take its
-   default value. */
-   SetItem( &(store->equinox), 0, 0, s, eq, status );
-   if( !defdate ) SetItem( &(store->mjdobs), 0, 0, ' ', ep, status );
-
-/* Only proceed if we have usable values */
-   if( astOK ) {
-
-/* Get the indices of the latitude and longitude axes within the
-   SkyFrame. */
-      latax = astGetLatAxis( skyfrm );         
-      lonax = 1 - latax;
-
-/* The first 4 characters in CTYPE are determined by the celestial coordinate 
-   system and the second 4 by the projection type. */
-      if( isys == RADEC ){
-         strcpy( lontype, "RA--" );
-         strcpy( lattype, "DEC-" );
-
-      } else if( isys == ECLIP ){
-         strcpy( lontype, "ELON" );
-         strcpy( lattype, "ELAT" );
-
-      } else if( isys == HECLIP ){
-         strcpy( lontype, "HLON" );
-         strcpy( lattype, "HLAT" );
-
-      } else if( isys == GALAC ){
-         strcpy( lontype, "GLON" );
-         strcpy( lattype, "GLAT" );
-
-      } else if( isys == SUPER ){
-         strcpy( lontype, "SLON" );
-         strcpy( lattype, "SLAT" );
-
-      } else if( isys == AZEL ){
-         strcpy( lontype, "AZ--" );
-         strcpy( lattype, "EL--" );
-
-/* For unknown systems, use the axis symbols within CTYPE */
-      } else {
-
-         latsym = astGetSymbol( skyfrm, latax );
-         lonsym = astGetSymbol( skyfrm, lonax );
-
-         if( astOK ) { 
-            strncpy( lontype, lonsym, 4 );
-            for( i = strlen( lonsym ); i < 4; i++ ) {
-               lontype[ i ] = '-';
-            }
-
-            strncpy( lattype, latsym, 4 );
-            for( i = strlen( latsym ); i < 4; i++ ) {
-               lattype[ i ] = '-';
-            }
-         }
-      }                  
-
-/* Store the projection strings. */
-      prj_name = astWcsPrjName( wcstype );
-      if( astOK ) {
-         strcpy( lontype + 4, prj_name );
-         strcpy( lattype + 4, prj_name );
-      }
-
-/* Store the total CTYPE strings */
-      SetItemC( &(store->ctype), axlon, s, lontype, status );
-      SetItemC( &(store->ctype), axlat, s, lattype, status );
-
-/* If the Label attribute  has been set for an axis, use it as the CTYPE
-   comment and CNAME value. */
-      if( astTestLabel( skyfrm, latax ) ) {
-         label = (char *) astGetLabel( skyfrm, latax );
-         SetItemC( &(store->ctype_com), axlat, s, label, status );
-         SetItemC( &(store->cname), axlat, s, label, status );
-      }      
-      if( astTestLabel( skyfrm, lonax ) ) {
-         label = (char *) astGetLabel( skyfrm, lonax );
-         SetItemC( &(store->ctype_com), axlon, s, label, status );
-         SetItemC( &(store->cname), axlon, s, label, status );
-      }      
-
-/* Nullify any CUNITS strings for the longitude and latitude axes (they
-   always take the default value of degrees). */
-      SetItemC( &(store->cunit), axlat, s, NULL, status );
-      SetItemC( &(store->cunit), axlon, s, NULL, status );
-
-   }
-
-/* Store the Domain name as the WCSNAME keyword (if set). */
-   if( astTestDomain( skyfrm ) ) { 
-      SetItemC( &(store->wcsname), 0, s, (char *) astGetDomain( skyfrm ), status );
-   }
-
-/* Store the observer's position if set (needed for definition of AzEl
-   systems). */
-   if( astTestObsLon( skyfrm ) && astTestObsLat( skyfrm ) && s == ' ' ) {
-      geolon = astGetObsLon( skyfrm );
-      geolat = astGetObsLat( skyfrm );
-      h = astGetObsAlt( skyfrm );
-      if( geolat != AST__BAD && geolon != AST__BAD && h != AST__BAD ) {
-         palSlaGeoc( geolat, h, &r, &z );
-         r *= AST__AU;
-         SetItem( &(store->obsgeox), 0, 0, ' ', r*cos( geolon ), status );
-         SetItem( &(store->obsgeoy), 0, 0, ' ', r*sin( geolon ), status );
-         SetItem( &(store->obsgeoz), 0, 0, ' ', z*AST__AU, status );
-      }
-   }
-
-   if( !astOK ) ret = 0;
-   return ret;
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-*  Name:
-*     SourceWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C FitsChan source function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char *SourceWrap( const char *, int *status(* source)( void ) )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function invokes the source function whose pointer is
-*     supplied in order to read the next input line from an external
-*     data store. It then returns a pointer to a dynamic string
-*     containing a copy of the text that was read.
-
-*  Parameters:
-*     source
-*        Pointer to a source function, with no parameters, that
-*        returns a pointer to a const, null-terminated string
-*        containing the text that it read. This is the form of FitsChan
-*        source function employed by the C language interface to the
-*        AST library.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated, null terminated string
-*     containing a copy of the text that was read. This string must be
-*     freed by the caller (using astFree) when no longer required.
-*
-*     A NULL pointer will be returned if there is no more input text
-*     to read.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   const char *line;             /* Pointer to input line */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
-   pointer to the resulting string. */
-   line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
-   resulting pointer. */
-   if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *SpectralAxes( AstFrameSet *fs, double *dim, int *wperm, 
-                                 char s, FitsStore *store, double *crvals, 
-                                 int *axis_done, const char *method, 
-                                 const char *class, int *status ){
-/*
-*  Name:
-*     SpectralAxes
-
-*  Purpose:
-*     Add values to a FitsStore describing spectral axes in a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstMapping *SpectralAxes( AstFrameSet *fs, double *dim, int *wperm, 
-*                               char s, FitsStore *store, double *crvals, 
-*                               int *axis_done, const char *method, 
-*                               const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The current Frame of the supplied FrameSet is searched for spectral
-*     axes. If any are found, FITS WCS keyword values describing the axis
-*     are added to the supplied FitsStore, if possible (the conventions
-*     of FITS-WCS paper III are used). Note, this function does not store
-*     values for keywords which define the transformation from pixel
-*     coords to Intermediate World Coords (CRPIX, PC and CDELT), but a
-*     Mapping is returned which embodies these values. This Mapping is
-*     from the current Frame in the FrameSet (WCS coords) to a Frame 
-*     representing IWC. The IWC Frame has the same number of axes as the 
-*     WCS Frame which may be greater than the number of base Frame (i.e. 
-*     pixel) axes. 
-*
-*     If a spectral axis is found, the RafRA and RefDec attributes of the 
-*     SpecFrame describing the axis are ignored: it is assumed that the 
-*     WCS Frame also contains a pair of celestial axes which will result
-*     in appropriate celestial reference values being stored in the
-*     FitsStore (this asumption should be enforced by calling function
-*     MakeFitsFrameSet prior to calling this function).
-
-*  Parameters:
-*     fs
-*        Pointer to the FrameSet. The base Frame should represent FITS pixel
-*        coordinates, and the current Frame should represent FITS WCS
-*        coordinates. The number of base Frame axes should not exceed the
-*        number of current Frame axes. The spectral Unit in the returned 
-*        FrameSet will always be linearly related to the default Units for 
-*        the spectral System in use by the axis. If this requires a
-*        change to the existing spectral Unit, the integrity of the
-*        FrameSet will be maintained by suitable adjustments to the Mappings
-*        within the FrameSet.
-*     dim
-*        An array holding the image dimensions in pixels. AST__BAD can be 
-*        supplied for any unknwon dimensions.
-*     wperm
-*        Pointer to an array of integers with one element for each axis of 
-*        the current Frame. Each element holds the zero-based 
-*        index of the FITS-WCS axis (i.e. the value of "i" in the keyword 
-*        names "CTYPEi", "CRVALi", etc) which describes the Frame axis.
-*     s
-*        The co-ordinate version character. A space means the primary
-*        axis descriptions. Otherwise the supplied character should be 
-*        an upper case alphabetical character ('A' to 'Z'). 
-*     store
-*        The FitsStore in which to store the FITS WCS keyword values.
-*     crvals
-*        Pointer to an array holding the default CRVAL value for each
-*        axis in the WCS Frame.
-*     axis_done 
-*        An array of flags, one for each Frame axis, which indicate if a
-*        description of the corresponding axis has yet been stored in the
-*        FitsStore. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If a spectral axis was found which can be described using the
-*     conventions of FITS-WCS paper III, then a Mapping from the current Frame 
-*     of the supplied FrameSet, to the IWC Frame is returned. Otherwise,
-*     a UnitMap is returned. Note, the Mapping only defines the IWC
-*     transformation for spectral axes. Any non-spectral axes are passed
-*     unchanged by the returned Mapping.
-
-*/
-
-/* Local Variables: */
-   AstFrame *pframe;       /* Primary Frame containing current WCS axis*/
-   AstFrame *tfrm1;        /* A temporary Frame */
-   AstFrame *tfrm;         /* A temporary Frame */
-   AstFrame *wcsfrm;       /* WCS Frame within FrameSet */
-   AstFrameSet *tfs;       /* A temporary FrameSet */
-   AstGrismMap *gmap;      /* GrismMap defining the spectral axis */
-   AstMapping *axmap;      /* Mapping from WCS to IWC */
-   AstMapping *map;        /* Pixel -> WCS mapping */
-   AstMapping *ret;        /* Returned Mapping */
-   AstMapping *tmap0;      /* A temporary Mapping */
-   AstMapping *tmap1;      /* A temporary Mapping */
-   AstMapping *tmap2;      /* A temporary Mapping */
-   AstMapping *tmap3;      /* A temporary Mapping */
-   AstMapping *tmap4;      /* A temporary Mapping */
-   AstMapping *tmap5;      /* A temporary Mapping */
-   AstMapping *tmap6;      /* A temporary Mapping */
-   AstSpecFrame *specfrm;  /* The SpecFrame defining current WCS axis */
-   char *cname;            /* Pointer to CNAME value */
-   const char *x_sys[ 4 ]; /* Basic spectral systems */
-   char ctype[ MXCTYPELEN ]; /* The value for the FITS CTYPE keyword */
-   char lin_unit[ 20 ];    /* Linear spectral Units being used */
-   char orig_system[ 40 ]; /* Value of System attribute for current WCS axis */
-   char system_attr[ 10 ]; /* Name of System attribute for current WCS axis */
-   char unit_attr[ 10 ];   /* Name of Unit attribute for current WCS axis */
-   const char *cval;       /* Pointer to temporary character string */
-   double *lbnd_p;         /* Pointer to array of lower pixel bounds */
-   double *ubnd_p;         /* Pointer to array of upper pixel bounds */
-   double crval;           /* The value for the FITS CRVAL keyword */
-   double dgbyds;          /* Rate of change of grism parameter wrt "S" at ref. point */
-   double dsbydx;          /* Rate of change of "S" wrt "X" at ref. point */
-   double h;               /* Geodetic altitude of observer (metres) */
-   double geolat;          /* Geodetic latitude of observer (radians) */
-   double geolon;          /* Geodetic longitude of observer (radians) */
-   double gval;            /* Value of grism parameter at reference point  */
-   double imagfreq;        /* Image sideband equivalent to the rest frequency (Hz) */
-   double lbnd_s;          /* Lower bound on spectral axis */
-   double pv;              /* Value of projection parameter */
-   double r;               /* Distance (in AU) from earth axis */
-   double restfreq;        /* Rest frequency (Hz) */
-   double ubnd_s;          /* Upper bound on spectral axis */
-   double vsource;         /* Rel.vel. of source (m/s) */
-   double xval;            /* Value of "X" system at reference point  */
-   double z;               /* Distance (in AU) above earth equator */
-   double zsource;         /* Redshift of source */
-   int fits_i;             /* FITS WCS axis index for current WCS axis */
-   int iax;                /* Axis index */
-   int ix;                 /* System index */
-   int npix;               /* Number of pixel axes */
-   int nwcs;               /* Number of WCS axes */
-   int paxis;              /* Axis index within primary Frame */
-   int sourcevrf;          /* Rest Frame in which SourceVel is accesed */
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Every supported spectral system is linearly related to one of the
-   following four systems. */
-   x_sys[ 0 ] = "FREQ";
-   x_sys[ 1 ] = "WAVE";
-   x_sys[ 2 ] = "AWAV";
-   x_sys[ 3 ] = "VELO";
-
-/* Get a pointer to the WCS Frame. */
-   wcsfrm = astGetFrame( fs, AST__CURRENT );
-
-/* Store the number of pixel and WCS axes. */
-   npix = astGetNin( fs );
-   nwcs = astGetNout( fs );
-
-/* Store the upper and lower pixel bounds. */
-   lbnd_p = astMalloc( sizeof( double )*(size_t) npix );
-   ubnd_p = astMalloc( sizeof( double )*(size_t) npix );
-   if( astOK ) {
-      for( iax = 0; iax < npix; iax++ ) {
-         lbnd_p[ iax ] = 1.0;
-         ubnd_p[ iax ] = ( dim[ iax ] != AST__BAD ) ? dim[ iax ] : 500;
-      }
-   }
-
-/* Check each axis in the WCS Frame to see if it is a spectral axis. */
-   axmap = NULL;
-   for( iax = 0; iax < nwcs; iax++ ) {
-
-/* Obtain a pointer to the primary Frame containing the current WCS axis. */
-      astPrimaryFrame( wcsfrm, iax, &pframe, &paxis );
-
-/* If the current axis belongs to a SpecFrame, we have found a spectral
-   axis. */
-      if( astIsASpecFrame( pframe ) ) {
-         specfrm = (AstSpecFrame *) pframe;
-
-/* Note the (zero-based) FITS WCS axis index to be used for the current 
-   Frame axis. */
-         fits_i = wperm[ iax ];
-
-/* Note the name and original value of the System attribute for the spectral 
-   axis within the FrameSet current Frame. */
-         sprintf( system_attr, "System(%d)", iax + 1 );
-         cval = astGetC( wcsfrm, system_attr );
-         if( cval ) strcpy( orig_system, cval );
-
-/* Note the name of the Unit attribute for the spectral axis within the 
-   FrameSet current Frame. */
-         sprintf( unit_attr, "Unit(%d)", iax + 1 );
-
-/* Get a pointer to the Mapping from FITS pixel coordinates to SpecFrame. */
-         map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Find the bounds of the Spectral axis over the volume of the pixel grid. */
-         astMapBox( map, lbnd_p, ubnd_p, 1, iax, &lbnd_s, &ubnd_s,
-                    NULL, NULL );
-
-/* The Unit attribute of a SpecFrame can be set to arbitrary non-linear 
-   functions of standard linear spectral units.  FITS-WCS paper III requires 
-   CRVAL etc to be given in linear units. So first we ensure that we have a 
-   SpecFrame with linear Units. Create a copy of the SpecFrame and clear
-   its Unit attribute (this ensures the copy has the default linear units).
-   Then find a Mapping from the original spectral units to the default
-   linear units. If the conversion is possible, see if the Mapping
-   between the units is linear. If it is, then the original Unit attribute
-   of the SpecFrame is OK (i.e. the units are linear). If not, clear
-   the Unit attribute of the spectral axis in the FrameSet so that it
-   uses the default linear units (retaining the original value so that it
-   can be re-instated later). Using the clear method on the FrameSet 
-   pointer rather than the SpecFrame pointer causes the SpecFrame to be 
-   re-mapped within the FrameSet to maintain its correct relationship with 
-   the other Frames in the FrameSet. Also update the pixel->spectrum
-   Mapping to take account of the change in units and re-calculate the new
-   bounds on the spectral axis. Also update any supplied CRVAL value for
-   the spectral axis. */
-         tfrm = astCopy( specfrm );
-         astClearUnit( tfrm, 0 );
-         tfs = astConvert( specfrm, tfrm, "" );
-         tfrm = astAnnul( tfrm );
-         if( tfs ) {
-
-            crval = crvals ? crvals[ iax ] : AST__BAD;
-
-            tmap1 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
-            tfs = astAnnul( tfs );
-            if( !IsMapLinear( tmap1, &lbnd_s, &ubnd_s, 0, status ) ) {
-               astClear( fs, unit_attr ); 
-               (void) astAnnul( map );
-               map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-               astMapBox( map, lbnd_p, ubnd_p, 1, iax, &lbnd_s, &ubnd_s,
-                          NULL, NULL );
-               astTran1( tmap1, 1, &crval, 1, &crval );
-
-            }
-            tmap1 = astAnnul( tmap1 );
-
-/* Note the linear spectral Unit currently in use. */
-            cval = astGetUnit( specfrm, 0 );
-            if( cval ) strcpy( lin_unit, cval );
-
-/* For some of the algorithms, the reference value CRVAL is arbitrary. 
-   For these algorithms we choose to use the supplied default CRVAL value.
-   If no default CRVAL value was suppllied, we use the mid spectral value 
-   if the size of the spectral axis was given, or the lower bound (i.e. 
-   pixel 1) if the size of the spectral axis was not given. */
-            if( crval == AST__BAD ) {
-               if( dim[ iax ] != AST__BAD ) {
-                  crval = 0.5*( lbnd_s + ubnd_s );
-               } else {
-                  crval = lbnd_s;
-               }
-            }
-
-/* Modify this crval value so that it correpsonds to an integer pixel
-   coordinate. */
-            crval = NearestPix( map, crval, iax, status );
-
-/* We now check to see if the Mapping from pixel coords -> linear spectral 
-   coords corresponds to one of the algorithms supported in FITS-WCS paper 
-   III. First check for the "linear" algorithm in which the linear spectral
-   coordinate given by the SpecFrame is related linearly to the pixel 
-   coords. */
-            ctype[ 0 ] = 0;
-            if( IsMapLinear( map, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* The CTYPE value is just the spectral system. */
-               strcpy( ctype, orig_system );
-
-/* Create the Mapping which defines the spectral IWC axis. This is
-   initially the Mapping from WCS to IWCS - it subtracts the CRVAL value 
-   from the spectral WCS value to get the spectral IWC value (other 
-   non-spectral axes are left unchanged by this Mapping). This results 
-   in the spectral IWC axis having the same axis index as the spectral 
-   WCS axis. */
-               crval = -crval;
-               tmap0 = (AstMapping *) astShiftMap( 1, &crval, "", status );
-               crval = -crval;
-               axmap = AddUnitMaps( tmap0, iax, nwcs, status );
-               tmap0 = astAnnul( tmap0 );
-            }
-
-
-/* If the "linear" algorithm above is inappropriate, see if the "non-linear" 
-   algorithm defined in FITS-WCS paper III can be used, in which pixel 
-   coords are linearly related to some spectral system (called "X") other 
-   than the one represented by the supplied SpecFrame (called "S"). */
-            if( !ctype[ 0 ] ) { 
-
-/* Loop round each of the 4 allowed X systems. All other spectral systems 
-   are linearly related to one of these 4 systems and so do not need to be
-   tested. */
-               for( ix = 0; ix < 4 && !ctype[ 0 ]; ix++ ) {
-
-/* Set the system of the spectral WCS axis to the new trial X system. Clear 
-   the Unit attribute to ensure we are using the default linear units.
-   Using the FrameSet pointer "fs" ensures that the Mappings within the
-   FrameSet are modified to maintain the correct inter-Frame relationships. */
-                  astSetC( fs, system_attr, x_sys[ ix ] );
-                  astClear( fs, unit_attr );
-
-/* Now we check to see if the current X system is linearly related to
-   pixel coordinates. */
-                  tmap3 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-                  if( IsMapLinear( tmap3, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* CTYPE: First 4 characters specify the "S" system. */
-                     strcpy( ctype, orig_system );
-      
-/* The non-linear algorithm code to be appended to the "S" system is of the 
-   form "-X2P" ("P" is the system which is linearly related to "S"). */
-                     if( !strcmp( x_sys[ ix ], "FREQ" ) ) {
-                        strcpy( ctype + 4, "-F2" );
-
-                     } else if( !strcmp( x_sys[ ix ], "WAVE" ) ) {
-                        strcpy( ctype + 4, "-W2" );
-
-                     } else if( !strcmp( x_sys[ ix ], "AWAV" ) ) {
-                        strcpy( ctype + 4, "-A2" );
-
-                     } else {
-                        strcpy( ctype + 4, "-V2" );
-                     }
-
-                     if( !strcmp( orig_system, "FREQ" ) || 
-                         !strcmp( orig_system, "ENER" ) ||
-                         !strcmp( orig_system, "WAVN" ) ||
-                         !strcmp( orig_system, "VRAD" ) ) {
-                        strcpy( ctype + 7, "F" );
-            
-                     } else if( !strcmp( orig_system, "WAVE" ) || 
-                                !strcmp( orig_system, "VOPT" ) ||
-                                !strcmp( orig_system, "ZOPT" ) ) {
-                        strcpy( ctype + 7, "W" );
-            
-                     } else if( !strcmp( orig_system, "AWAV" ) ) {
-                        strcpy( ctype + 7, "A" );
-            
-                     } else {
-                        strcpy( ctype + 7, "V" );
-                     }       
-
-/* Create a Mapping which gives S as a function of X. */
-                     tfrm = astCopy( specfrm );
-                     astSetC( tfrm, "System(1)", orig_system );
-                     astSetC( tfrm, "Unit(1)", lin_unit );
-                     tfs = astConvert( specfrm, tfrm, "" );
-                     tmap5 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
-                     tfs = astAnnul( tfs );
-                     tfrm = astAnnul( tfrm );
-
-/* Use the inverse of this Mapping to get the X value at the reference S  
-   value. */
-                     astTran1( tmap5, 1, &crval, 0, &xval );
-
-/* Also use it to get the rate of change of S with respect to X at the
-   reference point. */
-                     dsbydx = astRate( tmap5, &xval, 0, 0 );
-
-/* Create the Mapping which defines the spectral IWC axis. This is the
-   Mapping from WCS to IWC - it first converts from S to X, then subtracts 
-   the X reference value value, and then scales the axis to ensure that
-   the rate of change of S with respect to IWC is unity (as required by
-   FITS-WCS paper III). Other non-spectral axes are left unchanged by 
-   the Mapping. The spectral IWC axis has the same axis index as the 
-   spectral WCS axis. */
-                     xval = -xval;
-                     tmap2 = (AstMapping *) astShiftMap( 1, &xval, "", status );
-                     astInvert( tmap5 );
-                     tmap0 = (AstMapping *) astCmpMap( tmap5, tmap2, 1, "", status );
-                     tmap5 = astAnnul( tmap5 );
-                     tmap2 = astAnnul( tmap2 );
-                     tmap2 = (AstMapping *) astZoomMap( 1, dsbydx, "", status );
-                     tmap1 = (AstMapping *) astCmpMap( tmap0, tmap2, 1, "", status );
-                     tmap0 = astAnnul( tmap0 );
-                     tmap2 = astAnnul( tmap2 );
-      
-                     axmap = AddUnitMaps( tmap1, iax, nwcs, status );
-                     tmap1 = astAnnul( tmap1 );
-                  }
-                  tmap3 = astAnnul( tmap3 );
-
-/* Re-instate the original system and unit attributes for the spectral axis. */
-                  astSetC( fs, system_attr, orig_system );
-                  astSetC( fs, unit_attr, lin_unit );
-               }
-            }
-
-/* If the "non-linear" algorithm above is inappropriate, see if the
-   "log-linear" algorithm defined in FITS-WCS paper III can be used, in 
-   which the spectral axis is logarithmically spaced in the spectral
-   system given by the SpecFrame. */
-            if( !ctype[ 0 ] ) { 
-
-/* If the "log-linear" algorithm is appropriate, the supplied SpecFrame (s) 
-   is related to pixel coordinate (p) by s = Sr.EXP( a*p - b ). If this
-   is the case, then the log of s will be linearly related to pixel
-   coordinates. Test this. If the test is passed a Mapping is returned from
-   WCS to IWC. */
-               axmap = LogAxis( map, iax, nwcs, lbnd_p, ubnd_p, crval, status );
-
-/* If the axis is logarithmic... */
-               if( axmap ) {
-
-/* CTYPE: First 4 characters specify the "S" system. */
-                  strcpy( ctype, orig_system );
-      
-/* The rest is "-LOG". */
-                  strcpy( ctype + 4, "-LOG" );
-
-               }
-            }
-
-/* If the "log-linear" algorithm above is inappropriate, see if the "grism" 
-   algorithm defined in FITS-WCS paper III can be used, in which pixel 
-   coords are related to wavelength using a grism dispersion function,
-   implemented in AST by a GrismMap. GrismMaps produce either vacuum 
-   wavelength or air wavelength as output. Temporarily set the SpecFrame 
-   to these two systems in turn before we do the check for a GrismMap. */
-            for( ix = 0; ix < 2 && !ctype[ 0 ]; ix++ ) {
-               astSetC( fs, system_attr, ( ix == 0 ) ? "WAVE" : "AWAV" );
-               astSetC( fs, unit_attr, "m" );
-
-/* Get the simplified Mapping from pixel to wavelength. If the Mapping is
-   a CmpMap containing a GrismMap, and if the output of the GrismMap is
-   scaled by a neighbouring ZoomMap (e.g. into different wavelength units), 
-   then the GrismMap will be modified to incorporate the effect of the 
-   ZoomMap, and the ZoomMap will be removed. */
-               tmap2 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-               tmap1 = astSimplify( tmap2 );
-               tmap2 = astAnnul( tmap2 );
-
-/* Analyse this Mapping to see if the iax'th output is created diretcly by a 
-   GrismMap (i.e. the output of theGrismMap must not subsequently be
-   modified by some other Mapping). If so, ExtractGrismMap returns a pointer 
-   to the GrismMap as its function value, and also returns "tmap2" as a copy 
-   of tmap1 in which the GrismMap has been replaced by a UnitMap. */
-               gmap = ExtractGrismMap( tmap1, iax, &tmap2, status );
-               if( gmap ) {
-
-/* The Mapping without the GrismMap must be linear on the spectral axis. */
-                  if( IsMapLinear( tmap2, lbnd_p, ubnd_p, iax, status ) ) {
-
-/* Get the reference wavelength (in "m") stored in the GrismMap. */
-                     crval = astGetGrismWaveR( gmap );
-
-/* Save a copy of the current Wavelength (in "m") SpecFrame. */
-                     tfrm1 = astCopy( specfrm );
-
-/* Re-instate the original System and Unit attributes for the SpecFrame. */
-                     astSetC( fs, system_attr, orig_system );
-                     astSetC( fs, unit_attr, lin_unit );
-
-/* Find the Mapping from the original "S" system to wavelength (in "m"). */
-                     tfs = astConvert( specfrm, tfrm1, "" );
-                     tfrm1 = astAnnul( tfrm1 );
-                     if( tfs ) {
-                        tmap3 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
-                        tfs = astAnnul( tfs );
-
-/* Use the inverse of this Mapping to convert the reference value from
-   wavelength to the "S" system. */
-                        astTran1( tmap3, 1, &crval, 0, &crval );
-
-/* Concatenate the "S"->wavelength Mapping with the inverse GrismMap (from 
-   wavelength to grism parameter), to get the "S" -> "grism parameter" 
-   Mapping. */
-                        astInvert( gmap );
-                        tmap4 = (AstMapping *) astCmpMap( tmap3, gmap, 1, "", status );
-                        tmap3 = astAnnul( tmap3 );
-
-/* Use this Mapping to find the grism parameter at the reference point. */
-                        astTran1( tmap4, 1, &crval, 1, &gval );
-
-/* Also use it to find the rate of change of grism parameter with respect 
-   to "S" at the reference point. */
-                        dgbyds = astRate( tmap4, &crval, 0, 0 );
-
-/* FITS-WCS paper III required ds/dw to be unity at the reference point.
-   Therefore the rate of change of grism parameter with respect to IWC ("w") 
-   is equal to the rate of change of grism parameter with respect to "S"
-   (at the reference point). The mapping from "w" to grism parameter is a
-   ZoomMap which scales "w" by "dgbyds" followed by a ShiftMap which adds
-   on "gval". */
-                        tmap5 = (AstMapping *) astZoomMap( 1, dgbyds, "", status );
-                        tmap6 = (AstMapping *) astShiftMap( 1, &gval, "", status );
-                        tmap3 = (AstMapping *) astCmpMap( tmap5, tmap6, 1, "", status );
-                        tmap5 = astAnnul( tmap5 );
-                        tmap6 = astAnnul( tmap6 );
-
-/* Create the Mapping which defines the spectral IWC axis. This is the
-   Mapping from WCS "S" to IWCS "w", formed by combining the Mapping from
-   "S" to grism parameter (tmap4), with the Mapping from grism parameter to 
-   "w" (inverse of tmap3). Other non-spectral axes are left unchanged by the 
-   Mapping. The spectral IWC axis has the same axis index as the spectral 
-   WCS axis. */
-                        astInvert( tmap3 );
-                        tmap5 = (AstMapping *) astCmpMap( tmap4, tmap3, 1, "", status );
-                        tmap3 = astAnnul( tmap3 );
-                        tmap4 = astAnnul( tmap4 );
-                        axmap = AddUnitMaps( tmap5, iax, nwcs, status );
-                        tmap5 = astAnnul( tmap5 );   
-
-/* CTYPE: First 4 characters specify the "S" system. */
-                        strcpy( ctype, orig_system );
-
-/* Last 4 characters are "-GRA" or "-GRI". */
-                        strcpy( ctype + 4, ( ix == 0 ) ? "-GRI" : "-GRA"  );
-      
-/* Store values for the projection parameters in the FitsStore. Ignore
-   parameters which are set to the default values defined in FITS-WCS 
-   paper III. */
-                        pv = astGetGrismG( gmap );
-                        if( pv != 0 ) SetItem( &(store->pv), fits_i, 0, s, pv, status );
-                        pv = (double) astGetGrismM( gmap );
-                        if( pv != 0 ) SetItem( &(store->pv), fits_i, 1, s, pv, status );
-                        pv = astGetGrismAlpha( gmap );
-                        if( pv != 0 ) SetItem( &(store->pv), fits_i, 2, s, pv*AST__DR2D, status );
-                        pv = astGetGrismNR( gmap );
-                        if( pv != 1.0 ) SetItem( &(store->pv), fits_i, 3, s, pv, status );
-                        pv = astGetGrismNRP( gmap );
-                        if( pv != 0 ) SetItem( &(store->pv), fits_i, 4, s, pv, status );
-                        pv = astGetGrismEps( gmap );
-                        if( pv != 0 ) SetItem( &(store->pv), fits_i, 5, s, pv*AST__DR2D, status );
-                        pv = astGetGrismTheta( gmap );
-                        if( pv != 0 ) SetItem( &(store->pv), fits_i, 6, s, pv*AST__DR2D, status );
-
-                     }
-                  }
-
-/* Release resources. */
-                  tmap2 = astAnnul( tmap2 );
-                  gmap = astAnnul( gmap );
-               }
-
-/* Release resources. */
-               tmap1 = astAnnul( tmap1 );
-
-/* Re-instate the original System and Unit attributes for the SpecFrame. */
-               astSetC( fs, system_attr, orig_system );
-               astSetC( fs, unit_attr, lin_unit );
-
-            }
-
-/* If this axis is a usable spectral axis... */
-            if( ctype[ 0 ] ) {
-
-/* Add the Mapping for this axis in series with any existing result Mapping. */
-               if( ret ) {
-                  tmap0 = (AstMapping *) astCmpMap( ret, axmap, 1, "", status );
-                  (void) astAnnul( ret );
-                  ret = tmap0;
-               } else {
-                  ret = astClone( axmap );
-               }
-               axmap = astAnnul( axmap );
-
-/* Store values for CTYPE, CRVAL and CUNIT in the FitsStore. */
-               SetItemC( &(store->ctype), fits_i, s, ctype, status );
-               SetItem( &(store->crval), fits_i, 0, s, crval, status );
-               SetItemC( &(store->cunit), fits_i, s, lin_unit, status );
-
-/* If the axis label has been set, use it as the CTYPE comment and CNAME
-   value. */
-               if( astTestLabel( specfrm, 0 ) ) {
-                  cname = (char *) astGetLabel( specfrm, 0 );
-                  SetItemC( &(store->ctype_com), fits_i, s, cname, status );
-                  SetItemC( &(store->cname), fits_i, s, cname, status );
-               }      
-               
-/* Store values for the other FITS-WCS keywords which describe the
-   spectral system. Only store values which have been explicitly set in
-   the SpecFrame, which are different to the default values defined by
-   FITS-WCS paper III (if any), and which are not bad. */
-               if( astTestObsLon( specfrm ) && astTestObsLat( specfrm ) &&
-                   s == ' ' ) {
-                  geolon = astGetObsLon( specfrm );
-                  geolat = astGetObsLat( specfrm );
-                  h = astGetObsAlt( specfrm );
-                  if( geolat != AST__BAD && geolon != AST__BAD && h != AST__BAD ) {
-                     palSlaGeoc( geolat, h, &r, &z );
-                     r *= AST__AU;
-                     SetItem( &(store->obsgeox), 0, 0, ' ', r*cos( geolon ), status );
-                     SetItem( &(store->obsgeoy), 0, 0, ' ', r*sin( geolon ), status );
-                     SetItem( &(store->obsgeoz), 0, 0, ' ', z*AST__AU, status );
-                  }
-               }
-       
-               if( astTestRestFreq( specfrm ) ) {
-                  restfreq = astGetRestFreq( specfrm );
-                  if( restfreq != AST__BAD ) {
-                     if( !strcmp( orig_system, "WAVE" ) ||
-                         !strcmp( orig_system, "VOPT" ) ||
-                         !strcmp( orig_system, "ZOPT" ) ||
-                         !strcmp( orig_system, "AWAV" ) ) {
-                        SetItem( &(store->restwav), 0, 0, s, AST__C/restfreq, status );
-                     } else {
-                        SetItem( &(store->restfrq), 0, 0, s, restfreq, status );
-                     }
-                  }
-
-                  if( astIsADSBSpecFrame( specfrm ) ) {
-                     imagfreq = astGetImagFreq( (AstDSBSpecFrame *) specfrm );
-                     if( imagfreq != AST__BAD ) {
-                        SetItem( &(store->imagfreq), 0, 0, s, imagfreq, status );
-                     }
-                  }
-               }
-
-               cval = GetFitsSor( astGetC( specfrm, "StdOfRest" ), status );
-               if( cval ) SetItemC( &(store->specsys), 0, s, cval, status );
-
-               if( astTestSourceVel( specfrm ) ) {
-                  vsource = astGetSourceVel( specfrm );
-                  if( vsource != AST__BAD && fabs( vsource ) < AST__C ) {
-                     zsource = sqrt( (AST__C + vsource)/
-                                     (AST__C - vsource) ) - 1.0;
-                     SetItem( &(store->zsource), 0, 0, s, zsource, status );
-                     cval = GetFitsSor( astGetC( specfrm, "SourceVRF" ), status );
-                     if( cval ) SetItemC( &(store->ssyssrc), 0, s, cval, status );
-                  }
-               } else {
-                  vsource = AST__BAD;
-               }
-
-/* Store the VELOSYS value (not strictly needed since it can be
-   determined from the other values, but FITS-WCS paper III says it can be
-   useful). We temporarily change the source velocity to be zero m/s
-   in the main rest frame (StdOfRest) (unless the main rest frame is
-   already the source rest frame). We then change the source rest
-   frame to topocentric and get the source velocity (i.e. the velocity of
-   the main rest Frame) in the topocentric system. We then re-instate the
-   original attribute values if they were set. */
-               if( astGetStdOfRest( specfrm ) != AST__SCSOR ) {
-                  sourcevrf = astGetSourceVRF( specfrm );
-                  astSetSourceVRF( specfrm, astGetStdOfRest( specfrm ) );
-                  astSetSourceVel( specfrm, 0.0 );
-               } else {
-                  vsource = AST__BAD;
-                  sourcevrf = AST__NOSOR;
-               }
-
-               astSetSourceVRF( specfrm, AST__TPSOR );
-               SetItem( &(store->velosys), 0, 0, s, 
-                        astGetSourceVel( specfrm ), status );
-   
-               if( vsource != AST__BAD ){
-                  astSetSourceVRF( specfrm, sourcevrf );
-                  astSetSourceVel( specfrm, vsource );
-               } 
-
-/* Indicate that this axis has been described. */
-               axis_done[ iax ] = 1;
-
-            }
-
-/* Release resources. */
-            map = astAnnul( map );
-         }
-      }
-      pframe = astAnnul( pframe );
-   }
-
-/* Release resources. */
-   lbnd_p = astFree( lbnd_p );
-   ubnd_p = astFree( ubnd_p );
-   wcsfrm = astAnnul( wcsfrm );
-
-/* If we have a Mapping to return, simplify it. Otherwise, create
-   a UnitMap to return. */
-   if( ret ) {
-      tmap0 = ret;
-      ret = astSimplify( tmap0 );
-      tmap0 =  astAnnul( tmap0 );
-   } else {
-      ret = (AstMapping *) astUnitMap( nwcs, "", status );
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static AstFitsChan *SpecTrans( AstFitsChan *this, int encoding, 
-                               const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     SpecTrans
-
-*  Purpose:
-*     Translated non-standard WCS FITS headers into equivalent standard
-*     ones.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstFitsChan *SpecTrans( AstFitsChan *this, int encoding, 
-*                             const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function checks the supplied FitsChan for selected
-*     non-standard WCS keywords and, if found, stores equivalent 
-*     standard keywords in a newly created FitsChan which is returned as
-*     the function value. All the original keywords are marked
-*     as having been used, so that they are not written out when the 
-*     FitsChan is deleted. 
-*
-*     At the moment, the non-standard keywords checked for are:
-*
-*     1) RADECSYS is renamed as RADESYS
-*
-*     2) LONGPOLE is renamed as LONPOLE
-*
-*     3) CDjjjiii and CDj_i are converted to PCi_j (with unit CDELT)
-*
-*     4) CROTAj are converted to PCi_j
-*
-*     5) PROJPi are converted to PV<axlat>_i
-*   
-*     6) CmVALi are converted to CRVALis (s=A,B,,, for m=1,2...). This
-*        is also done for CmPIXi, CmYPEi, and CmNITi. CmELTi is converted
-*        to a CDj_is array.
-*
-*     7) EQUINOX keywords with string values equal to a date preceeded
-*        by the leter B or J (eg "B1995.0"). These are converted to the
-*        corresponding Julian floating point value without any epoch
-*        specifier.
-*
-*     8) EPOCH values are converted into Julian EQUINOX values (but only
-*        if the FitsChan does not already contain an EQUINOX value).
-*
-*     9) DATE-OBS values are converted into MJD-OBS values (but only
-*        if the FitsChan does not already contain an MJD-OBS value).
-*
-*     10) EQUINOX or EPOCH keywords with value zero  are converted to 
-*         B1950. 
-*     
-*     11) The AIPS NCP and GLS projections are converted into equivalent SIN
-*         or SFL projections.
-*
-*     12) The IRAF "ZPX" projection. If the last 4 chacaters of CTYPEi 
-*       (i = 1, naxis) are "-ZPX", then:
-*	- "ZPX" is replaced by "ZPN" within the CTYPEi value
-*       - If the FitsChan contains no PROJP keywords, then projection
-*       parameter valus are read from any WATi_nnn keywords, and
-*       corresponding PV keywords are added to the FitsChan.
-*       - The WATi_nnn keywords may specify corrections to the basic ZPN
-*       projection by including "lngcor" or "latcor" terms. There is no
-*       direct equivalent in FITS-PC to these terms and so they are
-*       ignored (it may be possible to use a pixel correction image but
-*       such images are not supported by AST anyway). If these correction
-*       terms are found ASTWARN keywords are added to the FitsChan 
-*       containing a warning message. The calling application can (if it
-*       wants to) check for this keyword, and report its contents to the
-*       user.
-*
-*     13) The IRAF "TNX" projection. If the last 4 chacaters of CTYPEi 
-*       (i = 1, naxis) are "-TNX", then:
-*	- "TNX" is replaced by "TAN" within the CTYPEi value (the distorted
-*       TAN projection included in a pre-final version of FITS-WCS is still 
-*       supported by AST using the WcsMap AST__TPN projection).
-*       - If the FitsChan contains no PROJP keywords, then projection
-*       parameter valus are read from any WATi_nnn keywords, and
-*       corresponding PV keywords are added to the FitsChan.
-*       - If the TNX projection cannot be converted exactly into a TAN 
-*       projection, ASTWARN keywords are added to the FitsChan 
-*       containing a warning message. The calling application can (if it
-*       wants to) check for this keyword, and report its contents to the
-*       user.
-*
-*     14) Keywords relating to the IRAF "mini-WCS" system are removed.
-*       This is the IRAF equivalent of the AST native encoding. Mini-WCS
-*       keywords are removed in order to avoid confusion arising between
-*       potentially inconsistent encodings.
-*
-*     15) "QV" parameters for TAN projections (as produced by AUTOASTROM) are
-*       renamed to "PV".
-*
-*     16) RESTFREQ is converted to RESTFRQ.
-*
-*     17) the "-WAV", "-FRQ" and "-VEL" CTYPE algorithms included in an
-*       early draft of FITS-WCS paper III are translated to the
-*       corresponding modern "-X2P" form.
-*
-*     18) AIPS spectral CTYPE values are translated to FITS-WCS paper III 
-*     equivalents.
-*
-*     19) AIPS spectral keywords OBSRA and OBSDEC are used to create a
-*     pair of celestial axes with reference point at the specified
-*     (OBSRA,OBSDEC) position. This is only done if the header does not
-*     already contain a pair of celestial axes.
-*
-*     20) Common case insensitive CUNIT values: "Hz", "Angstrom", "km/s",
-*     "M/S"
-*
-*     21) Various translations specific to the FITS-CLASS encoding.
-*
-*     21) CTYPE == "LAMBDA" changed to CTYPE = "WAVE"
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     encoding
-*        The FitsChan encoding in use.
-*     method
-*        Pointer to string holding name of calling method.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new FitsChan containing the keywords which
-*     constitute the standard equivalents to any non-standard keywords in 
-*     the supplied FitsChan. A NULL pointer is returned if there are no
-*     non-standard keywords in the supplied FitsChan.
-
-*/
-
-/* Local Variables: */
-   AstFitsChan *ret;              /* The returned FitsChan */
-   char *astype;                  /* AIPS spectral type */
-   char *assys;                   /* AIPS standad of rest type */
-   char *comm;                    /* Pointer to comment string */
-   char *cval;                    /* Pointer to character string */
-   char *start;                   /* Pointer to start of projp term */
-   char *wat;                     /* Pointer to a single WAT string */
-   char *watmem;                  /* Pointer to total WAT string */
-   char bj;                       /* Besselian/Julian indicator */
-   char format[ 50 ];             /* scanf format string */
-   char keyname[ FITSNAMLEN + 5 ];/* General keyword name + formats */
-   char template[ FITSNAMLEN + 1 ];/* General keyword name template */
-   char lattype[MXCTYPELEN];      /* CTYPE value for latitude axis */
-   char lontype[MXCTYPELEN];      /* CTYPE value for longitude axis */
-   char spectype[MXCTYPELEN];     /* CTYPE value for spectral axis */
-   char prj[6];                   /* Projection string */
-   char s;                        /* Co-ordinate version character */
-   char ss;                       /* Co-ordinate version character */
-   double cdelt;                  /* CDELT value */
-   double cdelti;                 /* CDELT for longitude axis */
-   double cdeltj;                 /* CDELT for latitude axis */
-   double cosrota;                /* Cos( CROTA ) */
-   double crota;                  /* CROTA Value */
-   double crpix;                  /* CRPIX value */
-   double crval;                  /* CRVAL value */
-   double dval;                   /* General floating value */
-   double lambda;                 /* Ratio of CDELTs */
-   double projp;                  /* Projection parameter value */
-   double restfreq;               /* Rest frequency (Hz) */
-   double rowsum2;                /* Sum of squared CDi_j row elements */
-   double sinrota;                /* Sin( CROTA ) */
-   const int *mp;                 /* Pointer to next projection parameter index */
-   int axlat;                     /* Index of latitude axis */
-   int axlon;                     /* Index of longitude axis */
-   int diag;                      /* Sign of diagonal CDi_j element */
-   int gotpcij;                   /* Does FitsChan contain any PCi_j keywords? */
-   int i,j;                       /* Indices */
-   int jlo;                       /* Lowest axis index */
-   int jhi;                       /* Highest axis index */
-   int iaxis;                     /* Axis index */
-   int iproj;                     /* Projection parameter index */
-   int lbnd[ 2 ];                 /* Lower index bounds */
-   int m;                         /* Co-ordinate version index */
-   int naxis;                     /* Number of axes */
-   int nch;                       /* No. of characters read */
-   int norot;                     /* Non-zero if there is no axis rotation */
-   int ok;                        /* Can projection be represented in FITS-WCS?*/
-   int porder;                    /* Order of polynomial */
-   int tlbnd[ 2 ];                /* Lower index bounds */
-   int tubnd[ 2 ];                /* Upper index bounds */
-   int ubnd[ 2 ];                 /* Upper index bounds */
-   int use_projp;                 /* Use PROJP keywors in favour of PV keywords? */
-   int watlen;                    /* Length of total WAT string (inc. term null)*/
-   size_t size;                   /* Length of string value */
-
-/* Arrays needed to convert the index of a TNX co-efficient into an index
-   of a TAN projection parameter. */
-   static const int abskip[] = {0,1,4,10,20,35,56,84};
-   static const int nab[] = {1,3,6,10,15,21,28,36};
-   static const int a[] = {
-0,  
-0,1,2,
-0,1,4,2,5,6,
-0,1,4,7,2,5,8,6,9,10,
-0,1,4,7,12,2,5,8,13,6,9,14,10,15,16,
-0,1,4,7,12,17,2,5,8,13,18,6,9,14,19,10,15,20,16,21,22,
-0,1,4,7,12,17,24,2,5,8,13,18,25,6,9,14,19,26,10,15,20,27,16,21,28,22,29,30,
-0,1,4,7,12,17,24,31,2,5,8,13,18,25,32,6,9,14,19,26,33,10,15,20,27,34,16,21,28,35,22,29,36,30,37,38};
-
-   static const int b[] = {
-0, 
-0,2,1,
-0,2,6,1,5,4,
-0,2,6,10,1,5,9,4,8,7,
-0,2,6,10,16,1,5,9,15,4,8,14,7,13,12,
-0,2,6,10,16,22,1,5,9,15,21,4,8,14,20,7,13,19,12,18,17,
-0,2,6,10,16,22,30,1,5,9,15,21,29,4,8,14,20,28,7,13,19,27,12,18,26,17,25,24,
-0,2,6,10,16,22,30,38,1,5,9,15,21,29,37,4,8,14,20,28,36,7,13,19,27,35,12,18,26,34,17,25,33,24,32,31};
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise to avoid compiler warnings. */
-   size = 0;
-
-/* Create the returned FitsChan. */
-   ret = astFitsChan( NULL, NULL, "", status );
-
-/* Loop round all axis descriptions, starting with primary (' '). */
-   for( s = 'A' - 1; s <= 'Z' && astOK; s++ ){      
-      if( s == 'A' - 1 ) s = ' ';
-
-/* Find the number of axes by finding the highest axis number in any 
-   CRPIXi keyword name. Pass on if there are no axes for this axis
-   description. */
-      if( s != ' ' ) {
-         sprintf( template, "CRPIX%%d%c", s );
-      } else {
-         strcpy( template, "CRPIX%d" );
-      }
-      if( !astKeyFields( this, template, 1, &naxis, lbnd ) ) {
-         if( s == ' ' ) s = 'A' - 1;
-         continue;
-      }
-
-/* Find the longitude and latitude axes by examining the CTYPE values.
-   They are marked as read. Such markings are only provisional, and they
-   can be read again any number of times until the current astRead
-   operation is completed. Also note the projection type. */
-      j = 0;
-      axlon = -1;
-      axlat = -1;
-      while( j < naxis && astOK ){
-         if( GetValue2( ret, this, FormatKey( "CTYPE", j + 1, -1, s, status ),
-                       AST__STRING, (void *) &cval, 0, method, 
-                       class, status ) ){
-            if( !strncmp( cval, "RA--", 4 ) ||
-                !strncmp( cval, "AZ--", 4 ) ||
-                !strncmp( cval + 1, "LON", 3 ) ||
-                !strncmp( cval + 2, "LN", 2 ) ) {
-               axlon = j;
-               strncpy( prj, cval + 4, 4 );
-               strncpy( lontype, cval, 10 );
-               prj[ 4 ] = 0;
-   
-            } else if( !strncmp( cval, "DEC-", 4 ) ||
-                !strncmp( cval, "EL--", 4 ) ||
-                !strncmp( cval + 1, "LAT", 3 ) ||
-                !strncmp( cval + 2, "LT", 2 ) ) {
-               axlat = j;
-               strncpy( prj, cval + 4, 4 );
-               strncpy( lattype, cval, 10 );
-               prj[ 4 ] = 0;
-
-/* Check for spectral algorithms from early drafts of paper III */
-            } else {
-               prj[ 0 ] = '-';
-               if( !strncmp( cval + 4, "-WAV", 4 ) ) {
-                  prj[ 1 ] = 'W';
-               } else if( !strncmp( cval + 4, "-FRQ", 4 ) ) {
-                  prj[ 1 ] = 'F';
-               } else if( !strncmp( cval + 4, "-VEL", 4 ) ) {
-                  prj[ 1 ] = 'V';
-               } else {
-                  prj[ 0 ] = 0;
-               }
-               if( *prj ) {
-                  prj[ 2 ] = '2';
-                  if( !strncmp( cval, "WAVE", 4 ) ) {
-                     prj[ 3 ] = 'W';
-                  } else if( !strncmp( cval, "FREQ", 4 ) ) {
-                     prj[ 3 ] = 'F';
-                  } else if( !strncmp( cval, "VELO", 4 ) ) {
-                     prj[ 3 ] = 'V';
-                  } else if( !strncmp( cval, "VRAD", 4 ) ) {
-                     prj[ 3 ] = 'F';
-                  } else if( !strncmp( cval, "VOPT", 4 ) ) {
-                     prj[ 3 ] = 'W';
-                  } else if( !strncmp( cval, "ZOPT", 4 ) ) {
-                     prj[ 3 ] = 'W';
-                  } else if( !strncmp( cval, "ENER", 4 ) ) {
-                     prj[ 3 ] = 'F';
-                  } else if( !strncmp( cval, "WAVN", 4 ) ) {
-                     prj[ 3 ] = 'F';
-                  } else if( !strncmp( cval, "BETA", 4 ) ) {
-                     prj[ 3 ] = 'V';
-                  } else {
-                     prj[ 0 ] = 0;
-                  }
-               }
-               if( *prj ) {
-                  strcpy( spectype, cval );
-                  if( prj[ 1 ] == prj[ 3 ] ) {
-                     strcpy( prj, strlen( cval ) > 8 ? "----" : "    " );
-                  } else {
-                     prj[ 4 ] = 0;
-                  }
-                  strncpy( spectype + 4, prj, 4 );
-                  cval = spectype;
-                  SetValue( ret, FormatKey( "CTYPE", j + 1, -1, s, status ),
-                           (void *) &cval, AST__STRING, NULL, status );
-               }
-            }
-            j++;
-
-         } else {
-            break;
-         }
-      }
-
-/* RADECSYS keywords 
-   ----------------- */
-      if( s == ' ' ) {
-         if( GetValue2( ret, this, "RADECSYS", AST__STRING, (void *) &cval, 0, method, 
-                       class, status ) ){
-            if( encoding == FITSPC_ENCODING || encoding == FITSIRAF_ENCODING ){
-               SetValue( ret, "RADESYS", (void *) &cval, AST__STRING, 
-                         CardComm( this, status ), status );
-            }
-         }
-
-/* LONGPOLE keywords 
-   ----------------- */
-         if( GetValue2( ret, this, "LONGPOLE", AST__FLOAT, (void *) &dval, 0, method, 
-                       class, status ) ){
-            if( encoding == FITSPC_ENCODING || encoding == FITSIRAF_ENCODING ){
-               SetValue( ret, "LONPOLE", (void *) &dval, AST__FLOAT, 
-                         CardComm( this, status ), status );
-            }
-         }
-      }
-
-/* Zero CDELT values.
-   ----------------- */
-
-/* Check there are some CDELT keywords... */
-      if( s != ' ' ) {
-         sprintf( template, "CDELT%%d%c", s );
-      } else {
-         strcpy( template, "CDELT%d" );
-      }
-      if( astKeyFields( this, template, 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
-         for( j = 0; j < naxis; j++ ){
-
-/* Get the CDELT value for this row. */
-            GetValue2( ret, this, FormatKey( "CDELT", j + 1, -1, s, status ), AST__FLOAT,
-                       (void *) &cdeltj, 0, method, class, status );
-
-/* If CDELT is zero, use 1.0E-6 of the corresponding CRVAL value 
-   instead, or 1.0 if CRVAL is zero. Otherwise, the zeros could cause the 
-   matrix to be non-invertable. The Mapping could then not be simplified 
-   or used by a Plot. CDELT values of zero are usually used to indicate 
-   "redundant" axes. For instance, a 2D image may be stored as a 3D cube  
-   with a single plane with the "redundant" 3rd axis used to specify the 
-   wavelength of the filter. The actual value used for CDELT shouldn't 
-   matter since the axis only spans a single pixel anyway. */
-            if( cdeltj == 0.0 ){
-               GetValue2( ret, this, FormatKey( "CDELT", j + 1, -1, s, status ), AST__FLOAT, 
-                         (void *) &dval, 1, method, class, status );
-               cdeltj = 1.0E-6*dval;
-               if( cdeltj == 0.0 ) cdeltj = 1.0;
-               SetValue( ret, FormatKey( "CDELT", j + 1, -1, s, status ), (void *) &cdeltj, 
-                         AST__FLOAT, NULL, status );
-            }
-         }
-      }
-
-/* Following conversions produce PCi_j keywords. Only do them if there
-   are currently no PCi_j keywords in the header. */
-      if( s != ' ' ) {
-         sprintf( template, "PC%%d_%%d%c", s );
-      } else {
-         strcpy( template, "PC%d_%d" );
-      }
-      gotpcij = astKeyFields( this, template, 0, NULL, NULL );
-      if( !gotpcij ){
-
-/* CDjjjiii 
-   -------- */
-         if( s == ' ' && astKeyFields( this, "CD%3d%3d", 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
-            for( j = 0; j < naxis; j++ ){
-
-/* Do each column in the matrix. */
-               for( i = 0; i < naxis; i++ ){
-
-/* Get the CDjjjiii matrix element */
-                  sprintf( keyname, "CD%.3d%.3d", j + 1, i + 1 );
-                  if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                                method, class, status ) ){
-
-/* If found, save it with name PCj_i, and ensure the default value of 1.0
-   is used for CDELT. */
-                     if( encoding == FITSIRAF_ENCODING ){
-                        SetValue( ret, FormatKey( "PC", j + 1, i + 1, ' ', status ),
-                                  (void *) &dval, AST__FLOAT, NULL, status );
-                        dval = 1.0;
-                        SetValue( ret, FormatKey( "CDELT", j + 1, -1, s, status ),
-                                  (void *) &dval, AST__FLOAT, NULL, status );
-                        gotpcij = 1;
-                     }
-                  }
-               }
-            }
-         }
-
-/* CDj_i 
-   ---- */
-         if( s != ' ' ) {
-            sprintf( template, "CD%%d_%%d%c", s );
-         } else {
-            strcpy( template, "CD%d_%d" );
-         }
-         if( !gotpcij && astKeyFields( this, template, 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
-            for( j = 0; j < naxis; j++ ){
- 
-/* First find the sum of the squared elements in the row. and note the
-   sign of the diagonal element. */
-               rowsum2 = 0.0;
-               diag = +1;
-               for( i = 0; i < naxis; i++ ){
-                  if( GetValue2( ret, this, FormatKey( "CD", j + 1, i + 1, s, status ),
-                                  AST__FLOAT, (void *) &dval, 0, method, class, status ) ){
-                     rowsum2 += dval*dval;
-                     if( i == j ) diag = ( dval >= 0.0 ) ? +1 : -1;
-                  }
-               }
-
-/* The CDELT value for this row will be the length of the row vector. This means that 
-   each row will be a unit vector when converted to PCi_j form, and the CDELT will 
-   give a real indication of the pixel size. Ensure that the diagonal
-   PCi+j element has a positive sign. */
-               cdelti = sqrt( rowsum2 )*diag;
-               SetValue( ret, FormatKey( "CDELT", j + 1, -1, s, status ),
-                         (void *) &cdelti, AST__FLOAT, NULL, status );
-               
-/* Do each column in the matrix. */
-               for( i = 0; i < naxis; i++ ){
- 
-/* Get the CDj_i matrix element (note default value for all CD elements
-   is zero (even diagonal elements!). */
-                  if( !GetValue2( ret, this, FormatKey( "CD", j + 1, i + 1, s, status ),
-                                  AST__FLOAT, (void *) &dval, 0, method, class, status ) ){
-                     dval = 0.0;
-                  }
-
-/* Divide by the rows cdelt value and save it with name PCj_i. */
-                  if( cdelti != 0.0 ) dval /= cdelti;
-                  SetValue( ret, FormatKey( "PC", j + 1, i + 1, s, status ),
-                            (void *) &dval, AST__FLOAT, NULL, status );
-                  gotpcij = 1;
-               }
-            }
-         }
-
-/* PCjjjiii and CROTAi keywords 
-   ---------------------------- */
-
-/* Check there are some CDELT keywords... */
-         if( s != ' ' ) {
-            sprintf( template, "CDELT%%d%c", s );
-         } else {
-            strcpy( template, "CDELT%d" );
-         }
-         if( !gotpcij && astKeyFields( this, template, 0, NULL, NULL ) ){
-
-/* See if there is a CROTA keyword. Try to read values for both axes
-   since they are sometimes both included. This ensures they will not be
-   included in the output when the FitsChan is deleted. Read the latitude
-   axis second in order to give it priority in cases where both are
-   present. */
-            crota = AST__BAD;
-            GetValue2( ret, this, FormatKey( "CROTA", axlon + 1, -1, s, status ), 
-                       AST__FLOAT, (void *) &crota, 0, method, class, status );
-            GetValue2( ret, this, FormatKey( "CROTA", axlat + 1, -1, s, status ), 
-                       AST__FLOAT, (void *) &crota, 0, method, class, status );
-
-/* If there are any PCjjjiii keywords, rename them as PCj_i. */
-            if( s == ' ' && astKeyFields( this, "PC%3d%3d", 0, NULL, NULL ) ){
-
-/* Do each row in the matrix. */
-               for( j = 0; j < naxis; j++ ){
-
-/* Do each column in the matrix. */
-                  for( i = 0; i < naxis; i++ ){
-
-/* Get the PCiiijjj matrix element */
-                     sprintf( keyname, "PC%.3d%.3d", j + 1, i + 1 );
-                     if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                                   method, class, status ) ){
-                     } else if( i == j ) {
-                        dval = 1.0;
-                     } else {
-                        dval = 0.0;
-                     }
-
-/* Store it as PCi_j */
-                     SetValue( ret, FormatKey( "PC", j + 1, i + 1, ' ', status ),
-                               (void *) &dval, AST__FLOAT, NULL, status );
-                     gotpcij = 1;
-                  }
-               }
-
-/* If there is a CROTA value and no PCjjjii keywords, create a PCj_i
-   matrix from the CROTA values. We need to have latitude and longitude 
-   axes for this.  */
-            } else if( s == ' ' && axlat != -1 && axlon != -1 && crota != AST__BAD ){
-
-/* Get the sin and cos of CROTA */
-               cosrota = cos( crota*AST__DD2R );
-               sinrota = sin( crota*AST__DD2R );
-
-/* Get the CDELT values for the longitude and latitude axes. */
-               if( GetValue2( ret, this, FormatKey( "CDELT", axlat + 1, -1, ' ', status ),
-                             AST__FLOAT, (void *) &cdeltj, 1, method, 
-                             class, status ) && 
-                   GetValue2( ret, this, FormatKey( "CDELT", axlon + 1, -1, ' ', status ),
-                             AST__FLOAT, (void *) &cdelti, 1, method, 
-                             class, status ) ){
-
-/* Save the ratio, needed below. */
-                  lambda = cdeltj/cdelti;
-
-/* Save a corresponding set of PCi_j keywords in the FitsChan. First do
-   the diagonal terms. */
-                  for( i = 0; i < naxis; i++ ){
-                     if( i == axlat ) {
-                        dval = cosrota;
-                     } else if( i == axlon ) {
-                        dval = cosrota;
-                     } else {
-                        dval = 1.0;
-                     }
-   
-                     SetValue( ret, FormatKey( "PC", i + 1, i + 1, ' ', status ),
-                               (void *) &dval, AST__FLOAT, NULL, status );
-                     gotpcij = 1;
-                  }
-
-/* Now do the non-zero off-diagonal terms. */
-                  dval = sinrota/lambda;
-                  SetValue( ret, FormatKey( "PC", axlat + 1, axlon + 1, ' ', status ),
-                            (void *) &dval, AST__FLOAT, NULL, status );
-    
-                  dval = -sinrota*lambda;
-                  SetValue( ret, FormatKey( "PC", axlon + 1, axlat + 1, ' ', status ),
-                            (void *) &dval, AST__FLOAT, NULL, status );
-               }
-            }
-         }
-      }
-
-/* Conversion of old PROJP, etc, is done once on the "primary" pass. */
-      if( s == ' ' ) {
-
-/* PROJP keywords
-   -------------- */
-         if( astKeyFields( this, "PROJP%d", 1, ubnd, lbnd ) && axlat != -1 ) {
-
-/* Some people produce headers with both PROJP and PV. Even worse, the
-   PROJP and PV values are sometimes inconsistent. In this case we trust
-   the PV values rather than the PROJP values, but only if the PV values
-   are not obviously incorrect for some reason. In particularly, we check
-   that, *if* either PVi_1 or PVi_2 (where i=longitude axis) is present, 
-   then PVi_0 is also present. Conversely we check that if PVi_0 is
-   present then at least one of PVi_1 or PVi_2 is present. */
-            use_projp = 1;
-            if( axlat != -1 &&
-                astKeyFields( this, "PV%d_%d", 2, tubnd, tlbnd ) ){
-               use_projp = 0;
-
-/* Are there any PV values for the longitude axis? */
-               if( tlbnd[ 0 ] <= axlon + 1 && axlon + 1 <= tubnd[ 0 ] ) {
-
-/* Are either PVi_1 or PVi_2 available? */
-                  if( HasCard( this, FormatKey( "PV", axlon + 1, 1, ' ', status ),
-                               method, class, status ) || 
-                      HasCard( this, FormatKey( "PV", axlon + 1, 2, ' ', status ),
-                               method, class, status ) ) {
-                     
-/* If so use PROJP if PVi_0 is not also available. */
-                     if( !HasCard( this, FormatKey( "PV", axlon + 1, 0, ' ', status ),
-                                   method, class, status ) ) use_projp = 1;
-
-/* If neither PVi_1 or PVi_2 are available, use PROJP if PVi_0 is
-   available. */
-                  } else if( HasCard( this, FormatKey( "PV", axlon + 1, 0, ' ', status ),
-                                      method, class, status ) ) {
-                     use_projp = 1;
-
-                  }
-               }
-            }
-
-/* Translate PROJP to PV if required. */
-            if( use_projp ) {
-               for( i = lbnd[ 0 ]; i <= ubnd[ 0 ]; i++ ){
-                  if( GetValue2( ret, this, FormatKey( "PROJP", i, -1, ' ', status ), 
-                                AST__FLOAT, (void *) &dval, 0, method, class, status ) &&
-                      ( encoding == FITSPC_ENCODING || 
-                        encoding == FITSIRAF_ENCODING ) ){
-                     SetValue( ret, FormatKey( "PV", axlat + 1, i, ' ', status ),
-                               (void *) &dval, AST__FLOAT, CardComm( this, status ), status );
-                  }
-               }
-            }
-         }
-   
-/* CmVALi keywords 
-   --------------- */
-         if( astKeyFields( this, "C%1dVAL%d", 2, ubnd, lbnd ) ){
-            ss = 'A';
-            for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
-               for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
-                  sprintf( keyname, "C%dVAL%d", m, i );
-                  if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                                method, class, status ) && 
-                      ( encoding == FITSPC_ENCODING || 
-                        encoding == FITSIRAF_ENCODING ) ){
-                     sprintf( keyname, "CRVAL%d%c", i, ss );
-                     SetValue( ret, keyname, (void *) &dval, AST__FLOAT,
-                               CardComm( this, status ), status );
-                  }
-               }
-               ss++;
-            }
-         }
-
-/* CmPIXi keywords 
-   --------------- */
-         if( astKeyFields( this, "C%1dPIX%d", 2, ubnd, lbnd ) ){
-            ss = 'A';
-            for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
-               for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
-                  sprintf( keyname, "C%dPIX%d", m, i );
-                  if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                                method, class, status ) && 
-                      ( encoding == FITSPC_ENCODING || 
-                        encoding == FITSIRAF_ENCODING ) ){
-                     sprintf( keyname, "CRPIX%d%c", i, ss );
-                     SetValue( ret, keyname, (void *) &dval, AST__FLOAT,
-                               CardComm( this, status ), status );
-                  }
-               }
-               ss++;
-            }
-         }
-
-/* CmYPEi keywords 
-   --------------- */
-         if( astKeyFields( this, "C%1dYPE%d", 2, ubnd, lbnd ) ){
-            ss = 'A';
-            for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
-               for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
-                  sprintf( keyname, "C%dYPE%d", m, i );
-                  if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, 
-                                method, class, status ) && 
-                      ( encoding == FITSPC_ENCODING || 
-                        encoding == FITSIRAF_ENCODING ) ){
-                     sprintf( keyname, "CTYPE%d%c", i, ss );
-                     SetValue( ret, keyname, (void *) &cval, AST__STRING,
-                               CardComm( this, status ), status );
-                  }
-               }
-               ss++;
-            }
-         }
-
-/* CmNITi keywords 
-   --------------- */
-         if( astKeyFields( this, "C%1dNIT%d", 2, ubnd, lbnd ) ){
-            ss = 'A';
-            for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
-               for( i = lbnd[ 1 ]; i <= ubnd[ 1 ]; i++ ){
-                  sprintf( keyname, "C%dNIT%d", m, i );
-                  if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, 
-                                method, class, status ) && 
-                      ( encoding == FITSPC_ENCODING || 
-                        encoding == FITSIRAF_ENCODING ) ){
-                     sprintf( keyname, "CUNIT%d%c", i, ss );
-                     SetValue( ret, keyname, (void *) &cval, AST__STRING,
-                               CardComm( this, status ), status );
-                  }
-               }
-               ss++;
-            }
-         }
-
-
-/* CmELTi keywords 
-   --------------- */
-         if( astKeyFields( this, "C%1dELT%d", 2, ubnd, lbnd ) ){
-            ss = 'A';
-            for( m = lbnd[ 0 ]; m <= ubnd[ 0 ]; m++ ){
-
-/* Create a PCj_is matrix by copying the PCjjjiii values and rename CmELTi as
-   CDELTis. */
-
-/* Do each row in the matrix. */
-               for( j = 0; j < naxis; j++ ){
-
-/* Get the CDELT value for this row. Report an error if not present. */
-                  sprintf( keyname, "C%dELT%d", m, j + 1 );
-                  GetValue2( ret, this, keyname, AST__FLOAT, (void *) &cdeltj, 1, 
-                             method, class, status );
-
-/* If CDELT is zero, use one hundredth of the corresponding CRVAL value 
-   instead, or 1.0 if CRVAL is zero. Otherwise, the zeros could cause the 
-   matrix to be non-invertable. The Mapping could then not be simplified 
-   or used by a Plot. CDELT values of zero are usually used to indicate 
-   "redundant" axes. For instance, a 2D image may be stored as a 3D cube  
-   with a single plane with the "redundant" 3rd axis used to specify the 
-   wavelength of the filter. The actual value used for CDELT shouldn't 
-   matter since the axis only spans a single pixel anyway. */
-                  if( cdeltj == 0.0 ){
-                     GetValue2( ret, this, FormatKey( "CRVAL", j + 1, -1, ss, status ), AST__FLOAT, 
-                               (void *) &dval, 1, method, class, status );
-                     cdeltj = 0.01*dval;
-                     if( cdeltj == 0.0 ) cdeltj = 1.0;
-                  }
-
-/* Save it as CDELTis */
-                  sprintf( keyname, "CDELT%d%c", j + 1, ss );
-                  SetValue( ret, keyname, (void *) &cdeltj, AST__FLOAT,
-                            CardComm( this, status ), status );
-
-/* Do each column in the matrix. */
-                  for( i = 0; i < naxis; i++ ){
-
-/* Get the PCiiijjj matrix element */
-                     sprintf( keyname, "PC%.3d%.3d", j + 1, i + 1 );
-                     if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                                   method, class, status ) ){
-                     } else if( i == j ) {
-                        dval = 1.0;
-                     } else {
-                        dval = 0.0;
-                     }
-
-/* Store it as PCi_js. */
-                     SetValue( ret, FormatKey( "PC", j + 1, i + 1, ss, status ),
-                               (void *) &dval, AST__FLOAT, NULL, status );
-                  }
-               }
-               ss++;
-            }
-         }
-
-/* EPOCH keywords
-   ------------ */
-/* Get any EPOCH card, marking it as read. */
-         if( GetValue2( ret, this, "EPOCH", AST__FLOAT, (void *) &dval, 0, method, 
-                          class, status ) ){
-
-/* Convert values of zero to B1950. */
-            if( dval == 0.0 ) dval = 1950.0;
-
-/* Save a new EQUINOX card in the FitsChan, so long as there is not
-   already one there. */
-            if( !GetValue2( ret, this, "EQUINOX", AST__STRING, (void *) &cval, 0, 
-                            method, class, status ) ){
-               SetValue( ret, "EQUINOX", (void *) &dval, AST__FLOAT, 
-                         "Reference equinox", status );
-            }
-         }
-
-/* String EQUINOX values 
-   --------------------- 
-   If found, EQUINOX will be used in favour of any EPOCH value found
-   above. */
-         if( GetValue2( ret, this, "EQUINOX", AST__STRING, (void *) &cval, 0, method, 
-                        class, status ) ){
-
-/* Note the first character. */
-            bj = cval[ 0 ];      
-
-/* If it is "B" or "J", read a floating value from the rest */
-            if( bj == 'B' || bj == 'J' ) {
-               if( 1 == astSscanf( cval + 1, " %lf ", &dval ) ){
-
-/* If it is a Besselian epoch, convert to Julian. */
-                  if( bj == 'B' ) dval = palSlaEpj( palSlaEpb2d( dval ) );
-
-/* Replace the original EQUINOX card. */
-                  SetValue( ret, "EQUINOX", (void *) &dval, AST__FLOAT, 
-                            CardComm( this, status ), status );
-               }
-            }
-         } 
-
-/* EQUINOX = 0.0 keywords
-   ---------------------- */
-         if( GetValue2( ret, this, "EQUINOX", AST__FLOAT, (void *) &dval, 0, method, 
-                       class, status ) ){
-            if( dval == 0.0 ){
-               dval = 1950.0;
-               SetValue( ret, "EQUINOX", (void *) &dval, AST__FLOAT, 
-                         CardComm( this, status ), status );
-            }
-         }
-      }
-
-/* DATE-OBS keywords
-   ---------------- */
-/* Read any DATE-OBS card. This prevents it being written out when the
-   FitsChan is deleted.  */
-      if( s == ' ' ) {
-         strcpy( keyname, "DATE-OBS" );
-         if( GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, method, 
-                       class, status ) ){
-   
-/* Ignore DATE-OBS values if the header contains an MJD-OBS value */
-            strcpy( keyname, "MJD-OBS" );
-            if( !GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                           method, class, status ) ){
-   
-/* Get the corresponding mjd-obs value, checking that DATE-OBS is valid. */
-               dval = DateObs( cval, status );
-               if( dval != AST__BAD ){
-                  SetValue( ret, keyname, (void *) &dval, AST__FLOAT, 
-                            "Date of observation", status );
-               }
-            }
-         }
-      }
-
-/* Things specific to the CLASS encoding
-   ------------------------------------- */
-      if( encoding == FITSCLASS_ENCODING ) ClassTrans( this, ret, axlat,
-                                                       axlon, method, class, status );
-
-/* AIPS "NCP" projections 
-   --------------------- */
-
-/* Compare the projection type with "-NCP" */
-      if( !Ustrcmp( prj, "-NCP", status ) ) {
-
-/* Get the latitude reference value, and take is cot. */
-         GetValue2( ret, this, FormatKey( "CRVAL", axlat + 1, -1, s, status ),
-                   AST__FLOAT, (void *) &dval, 1, method, class, status );
-   
-         dval = sin( dval*AST__DD2R );
-         if( dval != 0.0 ) {
-            dval = cos( dval*AST__DD2R )/dval;
-
-/* Replace NCP with SIN in the CTYPE values. */
-            strcpy( lontype + 4, "-SIN" );
-            cval = lontype;
-            SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, s, status ),
-                      (void *) &cval, AST__STRING, NULL, status );
-            strcpy( lattype + 4, "-SIN" );
-            cval = lattype;
-            SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, s, status ),
-                      (void *) &cval, AST__STRING, NULL, status );
-
-/* Store the new projection parameters using names suitable to the
-   encoding. */
-            if( encoding == FITSWCS_ENCODING ){
-               SetValue( ret, FormatKey( "PV", axlat + 1, 2, s, status ),
-                         (void *) &dval, AST__FLOAT, NULL, status );
-               dval = 0.0;
-               SetValue( ret, FormatKey( "PV", axlat + 1, 1, s, status ),
-                         (void *) &dval, AST__FLOAT, NULL, status );
-            } else {
-               SetValue( ret, FormatKey( "PROJP", 2, -1, s, status ),
-                         (void *) &dval, AST__FLOAT, NULL, status );
-               dval = 0.0;
-               SetValue( ret, FormatKey( "PROJP", 1, -1, s, status ),
-                         (void *) &dval, AST__FLOAT, NULL, status );
-            }
-         }
-      }
-
-/* CLASS "ATF" projections 
-   ---------------------- */
-/* Replace ATF with AIT in the CTYPE values. */
-      if( !Ustrcmp( prj, "-ATF", status ) ) {
-
-         strcpy( lontype + 4, "-AIT" );
-         cval = lontype;
-         SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, s, status ),
-                   (void *) &cval, AST__STRING, NULL, status );
-         strcpy( lattype + 4, "-AIT" );
-         cval = lattype;
-         SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, s, status ),
-                   (void *) &cval, AST__STRING, NULL, status );
-      }
-
-/* AIPS "GLS" projections (see FITS-WCS paper II section 6.1.4)
-   --------------------- */
-
-/* Compare the projection type with "-GLS" */
-      if( !Ustrcmp( prj, "-GLS", status ) ) {
-
-/* Translation is only possible if there is no rotation on the celestial
-   axes. Check the off-diagonal elements of the PCi_j array are zero. */
-         norot = 1;
-         sprintf( keyname, "PC%d_%d", axlon + 1, axlat + 1 );
-         if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                        method, class, status ) ){
-            if( dval != 0.0 ) norot = 0;
-         } 
-         sprintf( keyname, "PC%d_%d", axlat + 1, axlon + 1 );
-         if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, 
-                        method, class, status ) ){
-            if( dval != 0.0 ) norot = 0;
-         } 
-
-         if( norot ) {
-
-/* Get the reference value,reference pixel and cdelt value for the longitude 
-   axis. */
-            GetValue2( ret, this, FormatKey( "CRVAL", axlon + 1, -1, s, status ),
-                       AST__FLOAT, (void *) &crval, 1, method, class, status );
-            GetValue2( ret, this, FormatKey( "CDELT", axlon + 1, -1, s, status ),
-                       AST__FLOAT, (void *) &cdelt, 1, method, class, status );
-            GetValue2( ret, this, FormatKey( "CRPIX", axlon + 1, -1, s, status ),
-                       AST__FLOAT, (void *) &crpix, 1, method, class, status );
-   
-/* Store the original CRVAL value as RFVAL since it may be used for
-   other purposes (e.g. to hold the spectral source position). */
-            SetValue( ret, FormatKey( "RFVAL", axlon + 1, 1, s, status ),
-                      (void *) &crval, AST__FLOAT, NULL, status );
-
-/* Calculate and store a new CRPIX value which corresponds to a longitude 
-   value of zero. Also store zero for CRVAL. */
-            crpix -= crval/cdelt;
-            crval = 0.0;
-            SetValue( ret, FormatKey( "CRPIX", axlon + 1, 1, s, status ),
-                      (void *) &crpix, AST__FLOAT, NULL, status );
-            SetValue( ret, FormatKey( "CRVAL", axlon + 1, 1, s, status ),
-                      (void *) &crval, AST__FLOAT, NULL, status );
-
-/* Get the reference value,reference pixel and cdelt value for the latitude 
-   axis. */
-            GetValue2( ret, this, FormatKey( "CRVAL", axlat + 1, -1, s, status ),
-                       AST__FLOAT, (void *) &crval, 1, method, class, status );
-            GetValue2( ret, this, FormatKey( "CDELT", axlat + 1, -1, s, status ),
-                       AST__FLOAT, (void *) &cdelt, 1, method, class, status );
-            GetValue2( ret, this, FormatKey( "CRPIX", axlat + 1, -1, s, status ),
-                       AST__FLOAT, (void *) &crpix, 1, method, class, status );
-   
-/* Store the original CRVAL value as RFVAL since it may be used for
-   other purposes (e.g. to hold the spectral source position). */
-            SetValue( ret, FormatKey( "RFVAL", axlat + 1, 1, s, status ),
-                      (void *) &crval, AST__FLOAT, NULL, status );
-
-/* Calculate and store a new CRPIX value which corresponds to a longitude 
-   value of zero. Also store zero for CRVAL. */
-            crpix -= crval/cdelt;
-            crval = 0.0;
-            SetValue( ret, FormatKey( "CRPIX", axlat + 1, 1, s, status ),
-                      (void *) &crpix, AST__FLOAT, NULL, status );
-            SetValue( ret, FormatKey( "CRVAL", axlat + 1, 1, s, status ),
-                      (void *) &crval, AST__FLOAT, NULL, status );
-         }
-      }
-
-/* Rename "QV" TAN projection parameters as "PV"
-   and change "-TAN" to "-TPN".
-   -------------------------------------------- */
-      if( !Ustrcmp( prj, "-TAN", status ) ){
-
-/* Rewind the FitsChan. */
-         astClearCard( this );
-
-/* Search the FitsChan for QV cards. */
-         if( s != ' ' ) {
-            sprintf( template, "QV%%d_%%d%c", s );
-         } else {
-            strcpy( template, "QV%d_%d" );
-         }
-         while( FindKeyCard( this, template, method, class, status ) && astOK ) {
-
-/* If not already done, replace TAN with TPN in the CTYPE values. */
-            if( !Ustrcmp( prj, "-TAN", status ) ){
-               strcpy( prj, "-TPN" );
-               strcpy( lontype + 4, "-TPN" );
-               cval = lontype;
-               SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, s, status ),
-                         (void *) &cval, AST__STRING, NULL, status );
-               strcpy( lattype + 4, "-TPN" );
-               cval = lattype;
-               SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, s, status ),
-                         (void *) &cval, AST__STRING, NULL, status );
-            }
-
-/* Indicate that the QV card has been consumed. */
-            MarkCard( this, status );
-
-/* Get the keyword name and change it from QV to PV. */
-            strcpy( keyname, CardName( this, status ) );
-            keyname[ 0 ] ='P';
-
-/* Store the new PV card. */
-            SetValue( ret, keyname, CardData( this, &size, status ), AST__FLOAT, 
-                      CardComm( this, status ), status );
-
-/* Move on to the next card. */
-            MoveCard( this, 1, method, class, status );
-
-         }
-      }
-
-
-/* IRAF "ZPX" projections 
-   --------------------- */
-      if( s == ' ' && !Ustrcmp( prj, "-ZPX", status ) ) {
-
-/* Replace ZPX with ZPN in the CTYPE values. */
-         strcpy( lontype + 4, "-ZPN" );
-         cval = lontype;
-         SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, ' ', status ),
-                   (void *) &cval, AST__STRING, NULL, status );
-   
-         strcpy( lattype + 4, "-ZPN" );
-         cval = lattype;
-         SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, ' ', status ),
-                   (void *) &cval, AST__STRING, NULL, status );
-
-/* Check latitude then longitude axes */
-         for( i = 0; i < 2; i++ ){
-            iaxis = i ? axlat : axlon;
-
-/* Rewind the FitsChan. */
-            astClearCard( this );
-
-/* Concatenate all the IRAF "WAT" keywords together for this axis. These 
-   keywords are marked as having been used, so that they are not written 
-   out when the FitsChan is deleted. */
-            watmem = NULL;
-            watlen = 1;
-            j = 1;
-            sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
-            while( FindKeyCard( this, keyname, method, class, status ) && astOK ) {
-               wat = (char *) CardData( this, &size, status );
-               watmem = (char *) astRealloc( (void *) watmem, 
-                                             watlen - 1 + size );
-               if( watmem ) {
-                  strcpy( watmem + watlen - 1, wat );
-                  watlen += size - 1;
-                  MarkCard( this, status );
-                  MoveCard( this, 1, method, class, status );
-                  j++;
-                  sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
-               } else {
-                  break;
-               }
-            }
-
-/* Search the total WAT string for any projp terms. */
-            if( watmem ){
-               for( iproj = 0; iproj < 10 && astOK; iproj++ ) {
-                  sprintf( format, "projp%d=", iproj );
-                  start = strstr( watmem, format );
-                  if( start ) {
-                     sprintf( format, "projp%d=%%lf", iproj );
-                     if( astSscanf( start, format, &projp ) ){
-                        SetValue( ret, FormatKey( "PV", axlat + 1, iproj, ' ', status ),
-                                  (void *) &projp, AST__FLOAT, 
-                                  "ZPN projection parameter", status );
-                     }
-                  }
-               }
-
-/* See if the WAT string contains any lngcor or latcor terms. If so, add
-   warning keywords to the FitsChan. */
-               if( ( strstr( watmem, "lngcor" ) || 
-                     strstr( watmem, "latcor" ) ) ){
-                  Warn( this, "zpn", "This FITS header includes, or was "
-                        "derived from, a ZPN projection which requires "
-                        "unsupported IRAF-specific corrections (lngcor "
-                        "and/or latcor). The WCS information may therefore "
-                        "be incorrect.", method, class, status );
-               }
-      
-/*  Release the memory used to hold the concatenated WAT keywords. */
-               watmem = (char *) astFree( (void *) watmem );
-            }
-         }
-
-/* IRAF "TNX" projections 
-   --------------------- */
-      } else if( s == ' ' && !Ustrcmp( prj, "-TNX", status ) ) {
-
-/* Replace TNX with TPN in the CTYPE values. */
-         strcpy( lontype + 4, "-TPN" );
-         cval = lontype;
-         SetValue( ret, FormatKey( "CTYPE", axlon + 1, -1, ' ', status ),
-                   (void *) &cval, AST__STRING, NULL, status );
-   
-         strcpy( lattype + 4, "-TPN" );
-         cval = lattype;
-         SetValue( ret, FormatKey( "CTYPE", axlat + 1, -1, ' ', status ),
-                   (void *) &cval, AST__STRING, NULL, status );
-
-/* Check latitude then longitude axes */
-         for( i = 0; i < 2; i++ ){
-            iaxis = i ? axlat : axlon;
-
-/* Assume the TNX axis can be represented in FITS-WCS. */
-            ok = 1;
-
-/* Rewind the FitsChan. */
-            astClearCard( this );
-
-/* Concatenate all the IRAF "WAT" keywords together for this axis. These 
-   keywords are marked as having been used, so that they are not written 
-   out when the FitsChan is deleted. */
-            watmem = NULL;
-            watlen = 1;
-            j = 1;
-            sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
-            while( FindKeyCard( this, keyname, method, class, status ) && astOK ) {
-               wat = (char *) CardData( this, &size, status );
-               watmem = (char *) astRealloc( (void *) watmem, 
-                                             watlen - 1 + size );
-               if( watmem ) {
-                  strcpy( watmem + watlen - 1, wat );
-                  watlen += size - 1;
-                  MarkCard( this, status );
-                  MoveCard( this, 1, method, class, status );
-                  j++;
-                  sprintf( keyname, "WAT%d_%.3d", iaxis + 1, j );
-               } else {
-                  break;
-               }
-            }
-
-/* Search the total WAT string for any lngcor or latcor terms. */
-            if( watmem ){
-               start = strstr( watmem, "cor = \"" );
-
-/* If found, extract the numerical values which follow. */
-               if( start ) {
-                  start = strstr( start, "\"" ) + 1;
-                  mp = 0;
-                  j = 0;
-                  nch = 0;
-                  porder = -1;
-                  while( ok && 1 == astSscanf( start, " %lf %n", (double *) &dval, &nch ) ){
-
-/* The first value gives the correction surface type. We can only handle 
-   type 3 (simple polynonial). */
-                     if( j == 0 ){
-                        if( dval != 3.0 ) ok = 0;
-                  
-/* The second and third numbers gives the orders of the polynomial in X
-   and Y. We can only handle cases in which the orders are the same on
-   both axes, and greater than 0 and less than 9. Store a pointer to the
-   first TAN projection parameter index to use. */
-                     } else if( j == 1 ){
-                        porder = dval - 1;
-
-                     } else if( j == 2 ){
-                        if( dval - 1 != porder || dval < 0 || dval > 7 ) ok = 0;
-                        mp = (i?b:a) + abskip[ porder ];
-
-/* The fourth number defines the type of cross-terms. We can only handle
-   type 2 (half-cross terms). */
-                     } else if( j == 3 ){
-                        if( dval != 2.0 ) ok = 0;
-
-/* The next 4 numbers describe the region of validity of the fits in
-   xi and eta space, e.g. ximin, ximax, etamin, etamax. We skip over these
-   since we have no means of implementing any limit on the region of
-   validity. */
-                  
-/* The remaining terms are the coefficients of the polynomial terms. */
-                     } else if( j > 7 ){
-
-/* Find the index of the corresponding PV keyword. */
-                        m = *(mp++);
-
-/* TNX polynomials provide a "correction* to be added to the supplied X and 
-   Y values. Therefore increase the linear co-efficients by 1 on both
-   axes. */
-                        if( m == 1 ) dval += 1.0; 
-
-/* Store the PV value */
-                        SetValue( ret, FormatKey( "PV", iaxis + 1, m, ' ', status ),
-                                  (void *) &dval, AST__FLOAT, 
-                                  "TAN projection parameter", status );
-                     }
-
-                     start += nch;
-                     nch = 0;
-                     j++;
-                  }
-
-/* Check that all the required co-efficients were found */
-                  if( porder == -1 || j != 8 + nab[ porder ] ) ok = 0;
-               }
-
-/* If the TNX cannot be represented in FITS-WCS (within our restrictions), add
-   warning keywords to the FitsChan. */
-               if( !ok ){
-                  Warn( this, "tnx", "This FITS header includes, or was "
-                        "derived from, a TNX projection which requires "
-                        "unsupported IRAF-specific corrections. The WCS "
-                        "information may therefore be incorrect.", method, class, status );
-               }
-   
-/*  Release the memory used to hold the concatenated WAT keywords. */
-               watmem = (char *) astFree( (void *) watmem );
-            }
-         }
-      }
-
-/* MSX CAR projections.
-   ------------------- */
-      if( !Ustrcmp( prj, "-CAR", status ) ) {
-
-/* If the projection is a CAR projection, check that the CRPIX value for
-   the longitude axis corresponds to a projection plane point which has 
-   valid native longitude. The CAR projection has valid projection plane
-   points only for native longitudes in the range [-180,+180, so we
-   modify the CRPIX value if necessary by the number of pixels corresponding
-   to 360 degres of longitude in order to bring the refernce pixel into
-   the valid domain of the projection. */
-         if( GetValue2( ret, this, FormatKey( "CDELT", axlon + 1, -1, s, status ),
-                        AST__FLOAT, (void *) &cdelti, 1, method, class, status ) &&
-             GetValue2( ret, this, FormatKey( "CRPIX", axlon + 1, -1, s, status ),
-                        AST__FLOAT, (void *) &dval, 0, method, class, status ) ) {
-            if( cdelti != 0.0 ) {   
-               dval = AST__DR2D*palSlaDrange( AST__DD2R*dval*cdelti )/cdelti;
-               SetValue( ret, FormatKey( "CRPIX", axlon + 1, -1, s, status ), 
-                         (void *) &dval, AST__FLOAT, CardComm( this, status ), status );
-            }
-         }
-      }
-
-/* Replace RESTFREQ by RESTFRQ. 
-   ---------------------------- */
-/* Get any RESTFREQ card, marking it as read. */
-      restfreq = AST__BAD;
-      if( s != ' ' ) {
-         sprintf( keyname, "RESTFREQ%c", s );
-      } else {
-         strcpy( keyname, "RESTFREQ" );
-      }
-      if( GetValue2( ret, this, keyname, AST__FLOAT, (void *) &dval, 0, method, 
-                     class, status ) ){
-
-/* Look for "MHz" and "GHz" within the comment. If found scale the value
-   into Hz. */
-         comm = CardComm( this, status );
-         if( comm ) {
-            if( strstr( comm, "GHz" ) ) {
-               dval *= 1.0E9;
-               comm = "[Hz] Rest Frequency";
-            } else if( strstr( comm, "MHz" ) ) {
-               dval *= 1.0E6;
-               comm = "[Hz] Rest Frequency";
-            }
-         }
-
-/* Save a new RESTFRQ card in the FitsChan, so long as there is not
-   already one there. */
-         if( s != ' ' ) {
-            sprintf( keyname, "RESTFRQ%c", s );
-         } else {
-            strcpy( keyname, "RESTFRQ" );
-         }
-         if( !GetValue2( ret, this, keyname, AST__STRING, (void *) &cval, 0, 
-                         method, class, status ) ){
-            SetValue( ret, keyname, (void *) &dval, AST__FLOAT, comm, status );
-            restfreq = dval;
-         }
-      }
-
-/* Translate AIPS spectral CTYPE values to FITS-WCS paper III equivalents. 
-   These are of the form AAAA-BBB, where "AAAA" can be "FREQ", "VELO" (=VRAD!) 
-   or "FELO" (=VOPT-F2W), and BBB can be "LSR", "LSD", "HEL" (=*Bary*centric!) 
-   or "GEO". Also convert "LAMBDA" to "WAVE". */
-      for( j = 0; j < naxis; j++ ) {
-         if( GetValue2( ret, this, FormatKey( "CTYPE", j + 1, -1, s, status ),
-                       AST__STRING, (void *) &cval, 0, method, 
-                       class, status ) ){
-            if( IsAIPSSpectral( cval, &astype, &assys, status ) ) {
-               SetValue( ret, FormatKey( "CTYPE", j + 1, -1, ' ', status ),
-                         (void *) &astype, AST__STRING, NULL, status );
-               SetValue( ret, "SPECSYS", (void *) &assys, AST__STRING, NULL, status );
-               break;
-            } else if( !strcmp( cval, "LAMBDA  " ) ) {
-               cval = "WAVE";
-               SetValue( ret, FormatKey( "CTYPE", j + 1, -1, ' ', status ),
-                         (void *) &cval, AST__STRING, NULL, status );
-               break;
-            }
-         }
-      }
-
-/* Common case insensitive CUNIT values: "Hz", "Angstrom", "km/s", "M/S" */
-      if( s != ' ' ) {
-         sprintf( template, "CUNIT%%d%c", s );
-      } else {
-         strcpy( template, "CUNIT%d" );
-      }
-      if( astKeyFields( this, template, 1, &jhi, &jlo ) ){
-
-/* Convert keyword indices from 1-based to 0-base, and loop round them all. */
-         jhi--;
-         jlo--;
-         for( j = jlo; j <= jhi; j++ ){
-            char *keynam;
-            keynam =  FormatKey( "CUNIT", j + 1, -1, s, status );
-            if( GetValue2( ret, this, keynam, AST__STRING, (void *) &cval, 0, 
-                           method, class, status ) ){
-               size_t nc = astChrLen( cval );
-               if( nc == 0 ) {
-                  cval = NULL;
-               } else if( !Ustrncmp( cval, "Hz", nc, status ) ) {
-                  cval = "Hz";
-               } else if( !Ustrncmp( cval, "Angstrom", nc, status ) ) {
-                  cval = "Angstrom";
-               } else if( !Ustrncmp( cval, "km/s", nc, status ) ) {
-                  cval = "km/s";
-               } else if( !Ustrncmp( cval, "m/s", nc, status ) ) {
-                  cval = "m/s";
-               } else {
-                  cval = NULL;
-               }
-               if( cval ) SetValue( ret, keynam, (void *) &cval, AST__STRING, NULL, status );
-            }
-         }
-      }
-
-/* After doing the primary axis descriptions, prepare to do the "A"
-   description. */
-      if( s == ' ' ) s = 'A' - 1;
-   }
-
-/* IRAF mini-WCS keywords
-   ---------------------- */
-/* Rewind the FitsChan to search from the first card. */
-   astClearCard( this );
-
-/* Search forward through until all cards have been checked. */
-   while( !astFitsEof( this ) && astOK ){
-
-/* Check to see if the keyword name from the current card matches 
-   any of the known mini-WCS keywords. If so, mark the card as read. */
-      if( Match( CardName( this, status ), "WAT%d_%d", 0, NULL, &m, method, class, status ) ||
-          Match( CardName( this, status ), "LTM%d_%d", 0, NULL, &m, method, class, status ) ||
-          Match( CardName( this, status ), "LTV%d", 0, NULL, &m, method, class, status ) ||
-          Match( CardName( this, status ), "WSV%d_LEN", 0, NULL, &m, method, class, status ) ||
-          Match( CardName( this, status ), "WSV%d_%d", 0, NULL, &m, method, class, status ) ){
-          MarkCard( this, status );
-      }
-
-/* Now move the current card on to the next card. */
-      MoveCard( this, 1, method, class, status );
-   }
-
-/* Delete the returned FitsChan if it is empty. */
-   if( ret && !astGetNcard( ret ) ) ret = (AstFitsChan *) astDelete( ret );
-
-/* Return. */
-   return ret;
-}
-
-int Split( const char *card, char **name, char **value, 
-           char **comment, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Split
-
-*  Purpose:
-*     Extract the keyword name, value and comment from a FITS header card.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Split( const char *card, char **name, char **value, 
-*                char **comment, const char *method, const char *class, int *status  )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     The name, value and comment (if present) are extracted from the
-*     supplied card text and returned.
-
-*  Parameters:
-*     card
-*        Pointer to a string holding the FITS header card.
-*     name
-*        Pointer to a location at which to return the pointer to a string 
-*        holding the keyword name.
-*     value
-*        Pointer to a location at which to return the pointer to a string 
-*        holding the keyword value. 
-*     comment
-*        Pointer to a location at which to return the pointer to a string 
-*        holding the keyword comment.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned value:
-*     -  An integer identifying the data type of the keyword value. This
-*     will be one of the values AST__UNDEF, AST__COMMENT, AST__INT, 
-*     AST__STRING, AST__CONTINUE, AST__FLOAT, AST__COMPLEXI or AST__COMPLEXF 
-*     defined in fitschan.h.
-
-*  Notes:
-*     -  If the keyword value is a string, then the returned value does not
-*     include the delimiting quotes, and pairs of adjacent quotes within the
-*     string are replaced by single quotes.
-*     -  A maximum of 80 characters are read from the supplied card, so the
-*     string does not need to be null terminated unless less than 80 
-*     characters are to be read.
-*     -  The memory holding the three strings "name", "value" and "comment" 
-*     should be released when no longer needed using astFree.
-*     -  NULL pointers and a data type of AST__COMMENT are returned if an 
-*     error has already occurred, or if this function fails for any reason.
-*/
-
-/* Local Variables: */
-   char *c;                   /* Pointer to returned comment string */
-   char *dd;                  /* Pointer to intermediate character */
-   char *slash;               /* Pointer to comment character */
-   char *v;                   /* Pointer to returned value string */
-   const char *d;             /* Pointer to first comment character */
-   const char *v0;            /* Pointer to first non-blank value character */
-   double fi, fr;             /* Values read from value string */
-   int blank_name;            /* Is keyword name blank? */
-   int cont;                  /* Is this a continuation card? */
-   int i;                     /* Character index */
-   int ii, ir;                /* Values read from value string */
-   int iopt;                  /* Index of option within list */
-   int lq;                    /* Was previous character an escaping quote? */
-   int len;                   /* Used length of value string */
-   int nch;                   /* No. of characters used */
-   int ndig;                  /* No. of digits in the formatted integer */
-   int type;                  /* Keyword data type */
-   size_t nc;                 /* Number of character in the supplied card */
-   size_t ncc;                /* No. of characters in the comment string */
-   size_t ncv;                /* No. of characters in the value string */
-
-/* Initialise the returned pointers. */
-   *name = NULL;
-   *value = NULL;
-   *comment = NULL;
-   type = AST__COMMENT;
-   
-/* Check the global status. */
-   if( !astOK ) return type;
-
-/* Store the number of characters to be read from the supplied card. This
-   is not allowed to be more than the length of a FITS header card.
-   Trailing white space and non-printing characters such as new-line are 
-   ignored. */
-   nc = 0;
-   while( nc < AST__FITSCHAN_FITSCARDLEN && card[ nc ] ) nc++;
-
-/* Allocate memory for a copy of the keyword name plus a terminating 
-   null character. */
-   *name = (char *) astMalloc( ( 1 + FITSNAMLEN )*sizeof(char) );
-
-/* Check the pointer can be used. */
-   if( astOK ){
-
-/* Initialise the name string by filling it with spaces, and terminating it. */
-      for( i = 0; i < FITSNAMLEN; i++ ) (*name)[ i ] = ' ';
-      (*name)[ FITSNAMLEN ] = 0;
-
-/* Copy the the keyword name, ensuring that no more than FITSNAMLEN (8)
-   characters are copied. */
-      strncpy( *name, card, ( nc > FITSNAMLEN ) ? FITSNAMLEN : nc );
-
-/* If there is no keyword name, flag that we have a blank name which will
-   be treated as a comment card. */
-      if( strspn( *name, " " ) == strlen( *name ) ){
-         blank_name = 1;
-
-/* If the card contains a keyword name, replace any white space with
-   nulls. */
-      } else {
-         blank_name = 0;
-         dd = *name + strlen( *name ) - 1;
-         while( isspace( *dd ) ) *(dd--) = 0;
-      }
-      
-/* Check the keyword name is legal. */
-      CheckFitsName( *name, method, class, status );
-
-/* Allocate memory to hold the keyword value and comment strings. */
-      *value = (char *) astMalloc( sizeof(char)*( 2 + nc ) );
-      *comment = (char *) astMalloc( sizeof(char)*( 1 + nc ) );
-
-/* Check the pointers can be used. */
-      if( astOK ){
-
-/* Check for CONTINUE cards. These have keyword CONTINUE but have a space
-   instead of an equals sign in column 9. They must also have a single quote 
-   in column 11. */
-         cont = ( !Ustrcmp( *name, "CONTINUE", status ) && 
-                  nc > FITSNAMLEN + 3 && 
-                  card[ FITSNAMLEN ] == ' ' && 
-                  card[ FITSNAMLEN + 2 ] == '\'' );
-
-/* If column 9 does not contain an equals sign (but is not a CONTINUE card), or if 
-   the keyword is "HISTORY", "COMMENT" or blank, then columns 9 to the end are
-   comment characters, and the value string is null. */
-         if( ( nc <= FITSNAMLEN || card[ FITSNAMLEN ] != '='
-                                || !Ustrcmp( *name, "HISTORY", status )
-                                || !Ustrcmp( *name, "COMMENT", status )
-                                || blank_name ) && !cont ){
-            (*value)[ 0 ] = 0;
-            if( nc > FITSNAMLEN ){
-               (void) strncpy( *comment, card + FITSNAMLEN, 
-                               nc - FITSNAMLEN );
-               (*comment)[ nc - FITSNAMLEN ] = 0;
-            } else {
-               (*comment)[ 0 ] = 0;
-            }
-
-/* Otherwise there is a value field. */
-         } else {
-
-/* Find the first non-blank character in the value string. */
-            v0 = card + FITSNAMLEN + 1;
-            while( (size_t)(v0 - card) < nc && 
-                   isspace( (int) *v0 ) ) v0++;
-
-/* Store pointers to the start of the returned value and comment strings. */
-            v = *value;
-            c = *comment;
-
-/* If the first character in the value string is a single quote, the value is 
-   a string. In this case the value ends at the first non-escaped single 
-   quote. */
-            if( *v0 == '\''){
-               type = cont ? AST__CONTINUE : AST__STRING;
-
-/* We want to copy the string value, without the delimiting quotes, to the
-   returned value string. Single quotes within the string are represented
-   by two adjacent quotes, so we also need to check for these and replace
-   them by one quote in the returned string. First initialise a pointer
-   to the first character after the opening quote, and set a flag 
-   indicating that (for the purposes of identifying pairs of adjacent 
-   quotes within the string) the previous character was not a quote. */
-               d = v0 + 1;
-               lq = 0;
-
-/* Loop round each remaining character in the supplied card. */
-               while( (size_t)(d - card) < nc ){
-
-/* If the current character is a single quote... */
-                  if( *d == '\'' ){
-
-/* If the previous character was also a single quote then the quote does
-   not mark the end of the string, but is a quote to be included literally
-   in the value. Copy the quote to the returned string and clear the flag
-   to indicate that the pair of adjacent quotes is now complete. */
-                    if( lq ){
-                       *(v++) = '\'';
-                       lq = 0;
-
-/* If the last character was not a quote, then set the flag for the next
-   pass through the loop, but do not copy the quote to the returned string 
-   since it will either be a quote escaping a following adjacent quote, or
-   a quote to mark the end of the string. */
-                    } else {
-                       lq = 1;
-                    }
-                  
-/* If the current character is not a quote... */
-                  } else {
-
-/* If the previous character was a quote, then we have found a single
-   isolated quote which therefore marks the end of the string value. 
-   The pointer "d" is left pointing to the first character
-   after the terminating quote. */
-                     if( lq ){
-                        break;
-
-/* If the last character was not a quote, copy it to the returned string. */
-                     } else {
-                        *(v++) = *d;
-                     }
-                  }
-                  d++;
-               }
-
-/* Terminate the returned value string. */
-               *v = 0;
-               
-/* Now deal with logical and numerical values. */
-            } else {
-
-/* The end of the value field is marked by the first "/". Find the number
-   of characters in the value field. Pointer "d" is left pointing to the 
-   first character in the comment (if any). Only use "/" characters which
-   occur within the first nc characters. */
-               d = strchr( card, '/' );
-               if( !d || ( d - card ) >= nc ){
-                  ncv = nc - FITSNAMLEN - 1;
-                  d = NULL;
-               } else {
-                  ncv = (size_t)( d - card ) - FITSNAMLEN - 1;
-               }
-
-/* Copy the value string to the returned string. */
-               if( ncv == 0 ){
-                  *v = 0;               
-               } else {
-                  strncpy( v, card + FITSNAMLEN + 1, ncv );
-                  v[ ncv ] = ' ';
-                  v[ ncv + 1 ] = 0;
-               }
-
-/* Find the first non-blank character in the value string. */
-               v0 = v;
-               while( *v0 && isspace( (int) *v0 ) ) v0++;
-
-/* See if the value string is one of the following strings (optionally
-   abbreviated and case insensitive): YES, NO, TRUE, FALSE. */
-               iopt = FullForm( "YES NO TRUE FALSE", v0, 1, status );
-
-/* Return the single character "T" or "F" at the start of the value string
-   if the value matches one of the above strings. */
-               if( iopt == 0 || iopt == 2 ) {
-                  type = AST__LOGICAL;
-                  strcpy ( v, "T" );
-
-               } else if( iopt == 1 || iopt == 3 ) {
-                  type = AST__LOGICAL;
-                  strcpy ( v, "F" );
-
-/* If it does not match, see if the value is numerical. */
-               } else {
-
-/* Save the length of the value string excluding trailing blanks. */
-                  len = ChrLen( v, status );
-
-/* If the entire string is blank, the value type is UNDEF. */
-                  if( len == 0 ) {
-                     type = AST__UNDEF;
-
-/* If there are no dots (decimal points) or exponents (D or E) in the value... */
-                  } else if( !strpbrk( v, ".EeDd" ) ){
-
-/* First attempt to read two integers from the string (separated by white
-   space). */
-                     if( nch = 0, 
-                         ( 2 == astSscanf( v, " %d %d%n", &ir, &ii, &nch ) ) &&
-                         ( nch >= len ) ) {
-                        type = AST__COMPLEXI;
-
-/* If that failed, attempt to read a single integer from the string. */
-                     } else if( nch = 0, 
-                         ( 1 == astSscanf( v, " %d%n", &ir, &nch ) ) &&
-                         ( nch >= len ) ) {
-                        type = AST__INT;
-                     }
-
-/* If there are dots (decimal points) in the value... */
-                  } else {
-
-/* First attempt to read two doubles from the string (separated by white
-   space). */
-                     if( nch = 0, 
-                         ( 2 == astSscanf( v, " %lf %lf%n", &fr, &fi, &nch ) ) &&
-                         ( nch >= len ) ) {
-                        type = AST__COMPLEXF;
-
-/* If that failed, attempt to read a single double from the string. */
-                     } else if( nch = 0, 
-                         ( 1 == astSscanf( v, " %lf%n", &fr, &nch ) ) &&
-                         ( nch >= len ) ) {
-                        type = AST__FLOAT;
-                     }
-
-/* If both the above failed, it could be because the string contains a
-   "D" exponent (which is probably valid FITS) instead of an "E" exponent.
-   Replace any "D" in the string with "e" and try again. */
-                     if( type == AST__COMMENT && astOK ) {
-
-/* Replace "d" and "D" by "e" (if this doesn't produce a readable floating
-   point value then the value string will not be used, so it is safe to
-   do the replacement in situ). */
-                        for( i = 0; i < len; i++ ) {
-                           if( v[ i ] == 'd' || v[ i ] == 'D' ) v[ i ] = 'e';
-                        }
-
-/* Attempt to read two doubles from the edited string (separated by white
-   space). */
-                        if( nch = 0, 
-                          ( 2 == astSscanf( v, " %lf %lf%n", &fr, &fi, &nch ) ) &&
-                          ( nch >= len ) ) {
-                           type = AST__COMPLEXF;
-
-/* If that failed, attempt to read a single double from the edited string. */
-                        } else if( nch = 0, 
-                            ( 1 == astSscanf( v, " %lf%n", &fr, &nch ) ) &&
-                            ( nch >= len ) ) {
-                           type = AST__FLOAT;
-                        }
-                     }
-                  }
-               }
-
-/* If the value type could not be determined report an error. */
-               if( type == AST__COMMENT && astOK ) {
-                  astError( AST__BDFTS, "%s(%s): Illegal keyword value "
-                            "supplied.", status, method, class );
-               }
-            }
-
-/* Find the number of characters in the comment. Pointer "d" should point to
-   the first character following the value string. */
-            if( d ){
-               ncc = nc - (size_t)( d - card );
-            } else {
-               ncc = 0;
-            }
-            
-/* Copy the remainder of the card to the returned comment string. */
-            if( astOK && ncc > 0 ){
-               strncpy( c, d, ncc );
-               c[ ncc ] = 0;
-
-/* Find the start of the comment (indicated by the first "/" after the 
-   value string). */
-               slash = strchr( c, '/' );
-
-/* Temporarily terminate the string at the slash. */
-               if( slash ) *slash = 0;
-
-/* Shuffle the characters following the slash down to the
-   start of the returned string. */
-               if( slash ){
-                  ncc -= (size_t)( slash - c ) + 1;
-                  d = slash + 1;
-                  for( i = 0; i < 1 + (int) ncc; i++ ) *(c++) = *(d++);
-               }
-               
-/* If there is no comment string, return a null string. */
-            } else {
-               *c = 0;
-            }
-         }
-      }
-   }
-
-/* Truncate the returned string to avoid wasting space. */
-   if( *name ) *name = (char *) astRealloc( (void *) *name, strlen( *name ) + 1 );
-   if( *comment ) *comment = (char *) astRealloc( (void *) *comment, strlen( *comment ) + 1 );
-   if( *value ) *value = (char *) astRealloc( (void *) *value, strlen( *value ) + 1 );
-
-/* If the value is deemed to be integer, check that the number of digits
-   in the formatted value does not exceed the capacity of an int. This may 
-   be the case if there are too many digits in the integer for an "int" to 
-   hold. In this case, change the data type to float. */
-   if( *value && type == AST__INT ) {
-      ndig = 0;
-      c = *value;
-      while( *c ) {
-         if( isdigit( *(c++) ) ) ndig++;
-      }
-
-      if( ndig >= int_dig ) type = AST__FLOAT;
-   }
-
-
-/* If an error occurred, free the returned strings and issue a context
-   message. */
-   if( !astOK ){
-      *name = (char *) astFree( (void *) *name );   
-      *value = (char *) astFree( (void *) *value );   
-      *comment = (char *) astFree( (void *) *comment );   
-      type = AST__COMMENT;
-
-      astError( astStatus, "%s(%s): Unable to store the following FITS "
-                "header card:\n%s\n", status, method, class, card );
-   }
-
-/* Return the data type. */
-   return type;
-   
-}
-
-static int SplitMap( AstMapping *map, int invert, int ilon, int ilat, 
-                     AstMapping **map1, AstWcsMap **map2, AstMapping **map3, int *status ){
-/*
-*  Name:
-*     SplitMap
-
-*  Purpose:
-*     Locate a WCS projection within a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int SplitMap( AstMapping *map, int invert, int ilon, int ilat, 
-*                   AstMapping **map1, AstWcsMap **map2, AstMapping **map3, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     If possible, the supplied Mapping is decomposed into three component 
-*     mappings to be compounded in series. To be acceptable, the second of 
-*     these three Mappings must be an inverted WcsMap, and there must not
-*     be a WcsMap in either of the other two Mappings. If it is not
-*     possible to produce such a group of three Mappings, then a zero
-*     function value is returned, together with three NULL Mapping
-*     pointers. All the mappings before the WcsMap are compounded
-*     together and returned as "map1". The inverse of the WcsMap itself is 
-*     returned as "map2", and any remaining Mappings are compounded together 
-*     and returned as "map3".
-*
-*     The search algorithm allows for an arbitrary combination of series and
-*     parallel CmpMaps.
-
-*  Parameters:
-*     map
-*        A pointer to the Mapping from pixel to physical coordinates.
-*     invert
-*        The value of the Invert attribute to use with "map" (the value 
-*        returned by astGetInvert is not used).
-*     ilon
-*        Index of mapping output which is connected to the longitude axis.
-*     ilat
-*        Index of mapping output which is connected to the latitude axis.
-*     map1
-*        A location at which to return a pointer to the Mapping from pixel 
-*        to intermediate world coordinates. 
-*     map2
-*        A location at which to return a pointer to the Mapping from intermediate
-*        world coordinates to native spherical coordinates. This will
-*        be an inverted WcsMap.
-*     map3
-*        A location at which to return a pointer to the Mapping from 
-*        native spherical coordinates to physical coordinates. 
-*     dep 
-*        The address of an integer holding the current depth of recursion
-*        into this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a WcsMap was found, zero otherwise.
-
-*  Notes:
-*     -  The returned Mappings contain independant copies of the relevant
-*     components of the supplied Mapping and can be modified without
-*     changing the supplied Mapping.
-*     -  NULL pointers will be returned for all Mappings if no WcsMap 
-*     can be found in the supplied Mapping. 
-*     -  A pointer to a UnitMap will be returned for map1 if no mappings
-*     exist before the WcsMap.
-*     -  A pointer to a UnitMap will be returned for map3 if no mappings
-*     exist after the WcsMap.
-*     -  NULL pointers will be returned for all Mappings and a function
-*     value of zero will be returned if an error has occurred, or if this 
-*     function should fail for any reason.
-
-*/
-
-/* Local Variables */
-   AstFitsChan *fc;        /* Pointer to temporary FitsChan */
-   AstFrameSet *tfs;       /* Temporary FrameSet */
-   AstMapping *mapa;       /* Pre-wcs Mapping */
-   AstMapping *mapc;       /* Post-wcs Mapping */
-   AstMapping *tmap1;      /* Temporary Mapping */
-   AstMapping *tmap2;      /* Temporary Mapping */
-   AstPointSet *pset1;     /* Pixel positions */
-   AstPointSet *pset2;     /* WCS positions */
-   AstWcsMap  *mapb;       /* WcsMap */
-   char card[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* Buffer for header card */
-   double **ptr1;          /* Pointer to pixel axis values */
-   double **ptr2;          /* Pointer to WCS axis values */
-   double *iwc_origin;     /* Array holding IWC at pixel origin */
-   double *pix_origin;     /* Array holding pixel coords at pixel origin */
-   double *w1;             /* Pointer to work space */
-   int i;                  /* Loop index */
-   int npix;               /* Number of pixel axes */
-   int nwcs;               /* Number of WCS axes */
-   int ret;                /* Was a non-linear Mapping found? */
-
-/* Initialise */
-   *map1 = NULL;
-   *map2 = NULL;
-   *map3 = NULL;
-   ret = 0;
-
-/* Check the global status. */
-   if( !astOK ) return ret;
-
-/* Call SplitMap2 to do the work. SplitMap2 does not check that the 
-   WcsMap is an *inverted* WcsMap, neither does it check that there
-   are no WcsMaps in either map1 or map3. */
-   if( SplitMap2( map, invert, map1, map2, map3, status ) ) {
-
-/* Check that the WcsMap is inverted. */
-      if( astGetInvert( *map2 ) ) {
-
-/* Check that map 1 does not contain a WcsMap. */
-         if( !SplitMap2( *map1, astGetInvert( *map1 ), &mapa, &mapb, &mapc, status ) ) {
-
-/* Check that map 3 does not contain a WcsMap. */
-            if( !SplitMap2( *map3, astGetInvert( *map3 ), &mapa, &mapb, &mapc, status ) ) {
-
-/* If so, the three Mappings are OK. */
-               ret = 1;
-
-            } else {
-               mapa = astAnnul( mapa );
-               mapb = astAnnul( mapb );
-               mapc = astAnnul( mapc );
-            }
-
-         } else {
-            mapa = astAnnul( mapa );
-            mapb = astAnnul( mapb );
-            mapc = astAnnul( mapc );
-         }
-      }
-   } 
-
-/* If the above failed to find a suitable WcsMap, we now consider cases
-   where the pixel->WCS mapping is linear. We can invent a CAR projection
-   WcsMap for such cases. We use a ShiftMap to move the origin of the
-   longitude IWC axis to a sensible value (it is left at zero otherwise).
-   We cannot do this with the latitude axis since pre-FITS-WCS fits
-   readers could not handle the resulting rotation from native to celestial
-   coords. */
-   if( !ret && astGetIsLinear( map ) ) {
-      nwcs = astGetNout( map );
-      npix = astGetNin( map );
-      iwc_origin = astMalloc( sizeof( double )*nwcs );
-      pix_origin = astMalloc( sizeof( double )*npix );
-
-      if( astOK ) {
-
-         for( i = 0; i < npix; i++ ) pix_origin[ i ] = 0.0;
-         astTranN( map, 1, npix, 1, pix_origin, 1, nwcs, 1, iwc_origin );
-
-         for( i = 0; i < nwcs; i++ ) {
-            if( i != ilon ) {
-               iwc_origin[ i ] = 0.0;
-            } else {
-               iwc_origin[ i ] *= -1;
-            }
-         }
-         mapa = (AstMapping *) astShiftMap( nwcs, iwc_origin, "", status );
-
-         *map1 = (AstMapping *) astCmpMap( map, mapa, 1, "", status );
-         *map2 = astWcsMap( nwcs, AST__CAR, ilon + 1, ilat + 1, "Invert=1", status );
-
-         astInvert( mapa );
-         *map3 = astClone( mapa );
-
-         mapa = astAnnul( mapa );
-         ret = 1;
-      }
-
-      iwc_origin = astFree( iwc_origin );
-      pix_origin = astFree( pix_origin );
-   }
-
-/* If the above failed to find a suitable WcsMap, we now consider cases
-   where the output (long,lat) values are constants supplied by a
-   final PermMap. We can invent a WcsMap for such cases. */
-   if( !ret ) {
-
-/* Transform two arbitrary pixel positions into the WCS Frame. */
-      npix = astGetNin( map );
-      nwcs = astGetNout( map );
-      pset1 = astPointSet( 2, npix, "", status );
-      pset2 = astPointSet( 2, nwcs, "", status );
-      ptr1 = astGetPoints( pset1 );
-      ptr2 = astGetPoints( pset2 );
-      w1 = astMalloc( sizeof( double )*(size_t) nwcs );
-      if( astOK ) {
-         for( i = 0; i < npix; i++ ) {
-            ptr1[ i ][ 0 ] = 1.0;
-            ptr1[ i ][ 1 ] = 1000.0;
-         }
-         (void) astTransform( map, pset1, 1, pset2 );
-
-/* If the two wcs positions have equal longitude and latitude values,
-   assume that the output longitude and latitude axes are assigned
-   constant values by the Mapping. */
-         if( ptr2[ ilon ][ 0 ] == ptr2[ ilon ][ 1 ] &&
-             ptr2[ ilon ][ 0 ] != AST__BAD &&
-             ptr2[ ilat ][ 0 ] == ptr2[ ilat ][ 1 ] &&
-             ptr2[ ilat ][ 0 ] != AST__BAD ) {
-
-/* Create a set of Mappings to return, including a WcsMap, which result in 
-   these constant latitude and longitude values. We do this by creating a 
-   FITS-WCS header and reading the FrameSet from it. Keywords which are not
-   important to the final mappings are given arbitrary values. */
-            fc = astFitsChan( NULL, NULL, "", status );
-            for( i = 0; i < nwcs; i++ ) {
-               sprintf( card, "CRPIX%d  = 0", i + 1 );
-               astPutFits( fc, card, 0 );
-               sprintf( card, "CDELT%d  = 0.0003", i + 1 );
-               astPutFits( fc, card, 0 );
-               if( i == ilon ) {
-                  sprintf( card, "CTYPE%d  = 'RA---TAN'", i + 1 );
-               } else if( i == ilat ) {
-                  sprintf( card, "CTYPE%d  = 'DEC--TAN'", i + 1 );
-               } else {
-                  sprintf( card, "CTYPE%d  = 'DUMMY'", i + 1 );
-               }
-               astPutFits( fc, card, 0 );
-
-               if( i == ilon ) {
-                  sprintf( card, "CRVAL%d  = %.*g", i + 1, DBL_DIG, AST__DR2D*ptr2[ ilon ][ 0 ] );
-               } else if( i == ilat ) {
-                  sprintf( card, "CRVAL%d  = %.*g", i + 1, DBL_DIG, AST__DR2D*ptr2[ ilat ][ 0 ] );
-               } else {
-                  sprintf( card, "CRVAL%d  = 0.0", i + 1 );
-               }
-               astPutFits( fc, card, 0 );
-            }
-
-            astClearCard( fc );
-            tfs = astRead( fc );
-            if( tfs ) {
-
-/* Use SplitMap to get the required Mapings from the FrameSet. */
-               tmap2 = astGetMapping( tfs, AST__BASE, AST__CURRENT );
-               SplitMap( tmap2, astGetInvert( tmap2 ), 0, 1, &tmap1, map2, 
-                         map3, status );
-               tmap1 = astAnnul( tmap1 );
-               tmap2 = astAnnul( tmap2 );
-               
-/* Create a ShiftMap which subtract the constant longitude and latitude
-   values off the inputs. */
-               for( i = 0; i < nwcs; i++ ) w1[ i ] = 0.0;
-               w1[ ilon ] = -ptr2[ ilon ][ 0 ];
-               w1[ ilat ] = -ptr2[ ilat ][ 0 ];
-                            
-               tmap1 = (AstMapping *) astShiftMap( nwcs, w1, "", status );
-
-/* Compose this with the supplied Mapping. This results in the celestial
-   outputs being zero. This gives the required "map1". */
-               *map1 = (AstMapping *) astCmpMap( map, tmap1, 1, "", status );
-
-/* Indicate success.*/
-               ret = 1;
-
-/* Free resources. */
-               tmap1 = astAnnul( tmap1 );
-               tfs = astAnnul( tfs );
-            }
-            fc = astAnnul( fc );           
-         }
-      }
-
-/* Free resources */
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-      w1 = astFree( w1 );
-
-   }
-
-   if( !ret ) {
-      if( *map1 ) *map1 = astAnnul( *map1 );
-      if( *map2 ) *map2 = astAnnul( *map2 );
-      if( *map3 ) *map3 = astAnnul( *map3 );
-   }
-
-   return ret;
-}
-
-static int SplitMap2( AstMapping *map, int invert, AstMapping **map1,
-                      AstWcsMap **map2, AstMapping **map3, int *status ){
-/*
-*  Name:
-*     SplitMap2
-
-*  Purpose:
-*     Locate a WCS projection within a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int SplitMap2( AstMapping *map, int invert, AstMapping **map1, 
-*                    AstWcsMap **map2, AstMapping **map3, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     If possible, the supplied Mapping is decomposed into three component 
-*     mappings to be compounded in series. To be acceptable, the second of 
-*     these three Mappings must be a WcsMap. If it is not possible to produce 
-*     such a group of three Mappings, then a zero function value is returned, 
-*     together with three NULL Mapping pointers. All the mappings before the 
-*     WcsMap are compounded together and returned as "map1". The WcsMap itself 
-*     is returned as "map2", and any remaining Mappings are compounded together
-*     and returned as "map3". 
-*
-*     The search algorithm allows for an arbitrary combination of series and
-*     parallel CmpMaps.
-
-*  Parameters:
-*     map
-*        A pointer to the Mapping from pixel to physical coordinates.
-*     invert
-*        The value of the Invert attribute to use with "map" (the value 
-*        returned by astGetInvert is not used).
-*     map1
-*        A location at which to return a pointer to the Mapping from pixel 
-*        to intermediate world coordinates. 
-*     map2
-*        A location at which to return a pointer to the Mapping from relative 
-*        physical coordinates to native spherical coordinates. This will
-*        be a WcsMap.
-*     map3
-*        A location at which to return a pointer to the Mapping from 
-*        native spherical coordinates to physical coordinates. 
-*     dep 
-*        The address of an integer holding the current depth of recursion
-*        into this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a WcsMap was found, zero otherwise.
-
-*  Notes:
-*     -  The returned Mappings contain independant copies of the relevant
-*     components of the supplied Mapping and can be modified without
-*     changing the supplied Mapping.
-*     -  NULL pointers will be returned for all Mappings if no WcsMap 
-*     can be found in the supplied Mapping. 
-*     -  A pointer to a UnitMap will be returned for map1 if no mappings
-*     exist before the WcsMap.
-*     -  A pointer to a UnitMap will be returned for map3 if no mappings
-*     exist after the WcsMap.
-*     -  NULL pointers will be returned for all Mappings and a function
-*     value of zero will be returned if an error has occurred, or if this 
-*     function should fail for any reason.
-
-*/
-
-/* Local Variables */
-   AstMapping **map_list;  /* Mapping array pointer */
-   AstMapping *mapa;       /* Pre-wcs Mapping */
-   AstWcsMap *mapb;        /* WcsMap */
-   AstMapping *mapc;       /* Post-wcs Mapping */
-   AstMapping *temp;       /* Intermediate Mapping */
-   const char *class;      /* Pointer to class of supplied Mapping */
-   double pv;              /* Projection parameter value */
-   int *invert_list;       /* Invert array pointer */
-   int axis;               /* No. of axes in whole Mapping */
-   int axlat;              /* Index of latitude axis */
-   int axlon;              /* Index of longitude axis */
-   int haswcs;             /* Was a usable inverted WcsMap found? */
-   int imap;               /* Index of current Mapping in list */
-   int i;                  /* axis index */
-   int m;                  /* Parameter index */
-   int nax;                /* No. of axes in Mapping */
-   int nmap;               /* Number of Mappings in the list */
-   int ret;                /* Was a non-linear Mapping found? */
-   int wcsaxis;            /* Index of first WcsMap axis */
-
-/* Initialise */
-   *map1 = NULL;
-   *map2 = NULL;
-   *map3 = NULL;
-   ret = 0;
-
-/* Check the global status. */
-   if( !astOK ) return ret;
-
-/* Get the class of the Mapping. */   
-   class = astGetClass( map );
-
-/* If the supplied Mapping is a CmpMap... */
-   wcsaxis = -1;
-   if( !strcmp( class, "CmpMap" ) ){
-
-/* Decompose the Mapping into a sequence of Mappings to be applied in
-   series and an associated list of Invert flags. */
-      map_list = NULL;
-      invert_list = NULL;
-      nmap = 0;
-      astMapList( map, 1, invert, &nmap, &map_list, &invert_list );
-
-/* If there is more than one Mapping, this must be a series CmpMap. */
-      if( nmap > 1 && astOK ){
-
-/* Initialise the returned pre-wcs Mapping to be a UnitMap. */
-         if( invert == astGetInvert( map ) ){
-            *map1 = (AstMapping *) astUnitMap( astGetNin( map ), "", status );
-         } else {
-            *map1 = (AstMapping *) astUnitMap( astGetNout( map ), "", status );
-         }
-
-/* Indicate we have not yet found  a WcsMap. */
-         ret = 0;
-
-/* Process each series Mapping. */
-         for( imap = 0; imap < nmap; imap++ ){
-
-/* If we have not yet found a WcsMap... */
-            if( !ret ){
-
-/* Search this Mapping for a WcsMap. */
-               ret = SplitMap2( map_list[ imap ], invert_list[ imap ], &mapa, 
-                                map2, map3, status );
-
-/* If no WcsMap was found, use the whole mapping as part of the 
-   pre-wcs Mapping. */
-               if( !ret ){
-                  mapa = astCopy( map_list[ imap ] );
-                  astSetInvert( mapa, invert_list[ imap ] );
-               }
-
-/* Add the pre-wcs mapping to the cumulative pre-wcs CmpMap. */
-               temp = (AstMapping *) astCmpMap( *map1, mapa, 1, "", status );
-               *map1 = astAnnul( *map1 );
-               mapa = astAnnul( mapa );
-               *map1 = temp;                 
-
-/* If we have previously found a WcsMap, use the whole mapping
-   as part of the post-wcs mapping. */
-            } else {
-               mapc = astCopy( map_list[ imap ] );
-               astSetInvert( mapc, invert_list[ imap ] );
-
-               temp = (AstMapping *) astCmpMap( *map3, mapc, 1, "", status );
-               *map3 = astAnnul( *map3 );
-               mapc = astAnnul( mapc );
-               *map3 = temp;                 
-            }
-         }
-
-/* If there is only one Mapping, this must be a parallel CmpMap. */
-      } else {
-
-/* Annul the Mapping pointer in the series list created above, and free the 
-   dynamic arrays. */
-         map_list[ 0 ] = astAnnul( map_list[ 0 ] );
-         map_list = astFree( map_list );
-         invert_list = astFree( invert_list );
-         nmap = 0;
-
-/* Decompose the Mapping into a sequence of Mappings to be applied in
-   parallel and an associated list of Invert flags. */
-         astMapList( map, 0, invert, &nmap, &map_list, &invert_list );
-
-/* Process each parallel Mapping. */
-         axis = 0;
-         for( imap = 0; imap < nmap && astOK; imap++ ){
-
-/* See if this Mapping contains a usable WcsMap. Only do the search 
-   if no such WcsMap has already been found, since only the first is usable. */
-            if( !ret ) {
-
-/* Search this Mapping for a WcsMap. */
-               haswcs = SplitMap2( map_list[ imap ], invert_list[ imap ], &mapa, 
-                                  &mapb, &mapc, status );
-
-/* Note if we have found a usable WcsMap, and its first axis index. */
-               if( haswcs ){
-                  ret = 1;
-                  wcsaxis = axis;
-               }
-
-/* If a WcsMap has already been found, the mapping cannot contain a
-   usable WcsMap. */
-            } else {
-               haswcs = 0;
-            }
-
-/* If the Mapping did not contain a usable WcsMap, use the whole mapping as 
-   part of the pre-wcs Mapping, and create a UnitMap as part of the post-wcs 
-   mapping. */
-            if( !haswcs ){
-               mapa = astCopy( map_list[ imap ] );
-               astSetInvert( mapa, invert_list[ imap ] );
-               nax = astGetNout( mapa );
-               mapc = (AstMapping *) astUnitMap( nax, "", status );
-            } 
-
-/* Increment the index of the first axis in the next Mapping. */
-            axis += astGetNout( mapa );
-
-/* Add the pre-wcs mapping in parallel with the cumulative pre-wcs CmpMap. */
-            if( *map1 ){
-               temp = (AstMapping *) astCmpMap( *map1, mapa, 0, "", status );
-               *map1 = astAnnul( *map1 );
-               mapa = astAnnul( mapa );
-               *map1 = temp;                 
-            } else {
-               *map1 = mapa;
-            }
-
-/* Add the post-wcs mapping in parallel with the cumulative post-wcs CmpMap. */
-            if( *map3 ){
-               temp = (AstMapping *) astCmpMap( *map3, mapc, 0, "", status );
-               *map3 = astAnnul( *map3 );
-               mapc = astAnnul( mapc );
-               *map3 = temp;                 
-            } else {
-               *map3 = mapc;
-            }
-
-         }
-
-/* If a usable WcsMap was found, create a new one which has all the same
-   properties, but with enough axes to join the pre and post wcs Mappings
-   together. Ensure the correct axes are used for longitude and latitude,
-   and copy the projection parameters. */
-         if( ret ){
-            axlat = astGetWcsAxis( mapb, 1 );
-            axlon = astGetWcsAxis( mapb, 0 );
-            *map2 = astWcsMap( axis, astGetWcsType( mapb ), 
-                               axlon + wcsaxis + 1, 
-                               axlat + wcsaxis + 1, "", status );
-            for( i = 0; i < astGetNin( mapb ); i++ ){
-               for( m = 0; m < WCSLIB_MXPAR; m++ ){
-                  if( astTestPV( mapb, i, m ) ) {
-                     pv = astGetPV( mapb, i, m );
-                     if( pv != AST__BAD ) astSetPV( *map2, i + wcsaxis, m, pv );
-                  }
-               }
-            }
-            astInvert( *map2 );
-            mapb = astAnnul( mapb );
-         }
-      }
-
-/* Loop to annul all the Mapping pointers in the list. */
-      for ( imap = 0; imap < nmap; imap++ ) map_list[ imap ] = astAnnul( map_list[ imap ] );
-
-/* Free the dynamic arrays. */
-      map_list = astFree( map_list );
-      invert_list = astFree( invert_list );
-
-/* If the supplied Mapping is not a CmpMap, see if it is a WcsMap. If so, 
-   take a copy and set its invert attribute correctly. Also create UnitMaps 
-   for the pre and post wcs mappings. */
-   } else if( !strcmp( class, "WcsMap" ) ){
-      ret = 1;
-      nax = astGetNin( map );
-      *map1 = (AstMapping *) astUnitMap( nax, "", status );
-      *map2 = astCopy( map );
-      astSetInvert( *map2, invert );
-      *map3 = (AstMapping *) astUnitMap( nax, "", status );
-   }
-
-/* If an error has occurred, or if no WcsMap was found, annul any Mappings. */
-   if( !astOK || !ret ){
-      ret = 0;
-      if( *map1 ) *map1 = astAnnul( *map1 );
-      if( *map2 ) *map2 = astAnnul( *map2 );
-      if( *map3 ) *map3 = astAnnul( *map3 );
-   }
-   
-/* Return the answer. */
-   return ret;
-
-}
-
-static int SplitMat( int naxis, double *matrix, double *cdelt, int *status ){
-/*
-*  Name:
-*     SplitMat
-
-*  Purpose:
-*     Factorises a single "CD"-style matrix into a diagonal CDELT matrix
-*     and a "PC"-style matrix.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int SplitMat( int naxis, double *matrix, double *cdelt, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function splits up the supplied CD matrix into separate PC and 
-*     CDELT matrices. The product of the returned matrices (CDELT.PC) 
-*     equals the supplied CD matrix. The CDELT values are chosen so that 
-*     the corresponding row of the PC matrix represents a unit vector. 
-*     The signs of the CDELT values are chosen so that the diagonal terms 
-*     of the PC matrix are all positive.
-*   
-*  Parameters:
-*     naxis
-*        The number of axes.
-*     matrix
-*        A pointer to an array of naxis*naxis elements. On entry this holds
-*        the "CD" matrix. On exit, it is modified to represent the "PC" 
-*        matrix.
-*     cdelt 
-*        A pointer to an array of naxis elements. On exit this holds the CDELT
-*        values for each axis (i.e. the diagonal terms of the CDELT matrix).
-*     status
-*        Pointer to the inherited status variable.
-
-* Returned Value:
-*     Zero is returned if any bad values are found in the supplied
-*     matrix, or if an error has already occurred. One is returned otherwise.
-
-*/
-
-/* Local Variables: */
-   int i;                    
-   int j;
-   int ok;
-   double *a;
-   int dineg;
-   double s2;
-   double cdlt;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Assume success. */
-   ok = 1;
-
-/* Loop round every row in the matrix. Get a pointer to the first element
-   in the row. */
-   for( i = 0; i < naxis; i++ ){
-      a = matrix + i*naxis;
-
-/* Note the sign of the diagonal term (i.e. the i'th element) of this row. */
-      dineg = ( a[ i ] < 0.0 );
-
-/* Get the magnitude of the vector represented by this row. This is the 
-   CDELT value for the row. BAD values cause the whole function to return. */
-      s2 = 0.0;
-      for( j = 0; j < naxis; j++ ){
-         if( *a == AST__BAD )  {
-            ok = 0;
-            break;
-         }
-         s2 += (*a)*(*a);
-         a++;         
-      }
-
-      if( !ok ) break;
-      cdlt = sqrt( MAX( 0.0, s2 ) );
-
-/* If the diagonal term for this row of the matrix is negative, make
-   the CDELT value negative instead. This means that the diagonal term in
-   the final PC matrix will be positive. */
-      if( dineg ) cdlt = -cdlt;
-
-/* Store the CDELT value. */
-      cdelt[ i ] = cdlt;
-
-/* The row of the PC matrix is obtained by dividing the original row by 
-   the CDELT value. Set to zero any PC values which are less than 1.0E-7
-   (such values may be produced by rounding errors). */
-      a = matrix + i*naxis;
-      for( j = 0; j < naxis; j++ ) {
-
-         if( cdlt != 0.0 ){
-            *a /= cdlt;
-            if( fabs( *a ) < 1.E-7 ) *a = 0.0;
-         } else {
-            *a = 0.0;
-         }
-
-         a++;
-      }
-   }
-
-   return ok;
- 
-}
-
-static double TDBConv( double mjd, int timescale, int fromTDB, 
-                       const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     TDBConv
-
-*  Purpose:
-*     Convert an MJD between the TDB time scale and another timescale.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     double TDBConv( double mjd, int timescale, int fromTDB, 
-*                     const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function converts the supplied mjd value to or from the TDB 
-*     timescale.
-
-*  Parameters:
-*     mjd
-*        The input MJD value. 
-*     timescale
-*        The other timescale.
-*     fromTDB
-*        Indicates the direction of the required conversion. If non-zero, 
-*        the supplied "mjd" value should be in the TDB timescale, and the
-*        returned value will be in the timescale specified by "timescale".
-*        Indicates the direction of the required conversion. If zero, 
-*        the supplied "mjd" value should be in the timescale specified by
-*        "timescale", and the returned value will be in the TDB timescale.
-*     method
-*        The calling method. Used only in error messages.
-*     class 
-*        The object class. Used only in error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The converted MJD value, or AST__BAD if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;    /* Mapping from supplied timescale to TDB */
-   double ret;         /* The returned value */
-
-/* Initialise */
-   ret = AST__BAD;
-
-/* Check inherited status */
-   if( !astOK ) return ret;
-
-/* Return the supplied value if no conversion is needed. */
-   if( timescale == AST__TDB ) {
-      ret = mjd;
-
-/* Otherwise, do the conversion. */
-   } else {
-
-/* Lock the timeframes for use by the current thread, waiting if they are
-   currently locked by another thread. */
-      astManageLock( timeframe, AST__LOCK, 1, NULL );
-      astManageLock( tdbframe, AST__LOCK, 1, NULL );
-
-/* Set the required timescale. */
-      astSetTimeScale( timeframe, timescale );
-
-/* Get the Mapping between the two timescales, and use it to convert the 
-   suipplied value. */
-      fs = astConvert( tdbframe, timeframe, "" );
-      astTran1( fs, 1, &mjd, fromTDB, &ret );
-      fs = astAnnul( fs );
-
-/* Unlock the timeframes. */
-      astManageLock( timeframe, AST__UNLOCK, 1, NULL );
-      astManageLock( tdbframe, AST__UNLOCK, 1, NULL );
-   }
-
-/* Return the result */
-   return ret;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astTestAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a FitsChan's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   int result;                   /* Result value to return */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Card. */
-/* ----- */
-   if ( !strcmp( attrib, "card" ) ) {
-      result = astTestCard( this );
-
-/* Encoding. */
-/* --------- */
-   } else if ( !strcmp( attrib, "encoding" ) ) {
-      result = astTestEncoding( this );
-
-/* FitsDigits. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "fitsdigits" ) ) {
-      result = astTestFitsDigits( this );
-
-/* DefB1950. */
-/* --------- */
-   } else if ( !strcmp( attrib, "defb1950" ) ) {
-      result = astTestDefB1950( this );
-
-/* CDMatrix. */
-/* --------- */
-   } else if ( !strcmp( attrib, "cdmatrix" ) ) {
-      result = astTestCDMatrix( this );
-
-/* CarLin. */
-/* --------- */
-   } else if ( !strcmp( attrib, "carlin" ) ) {
-      result = astTestCarLin( this );
-
-/* Iwc. */
-/* ---- */
-   } else if ( !strcmp( attrib, "iwc" ) ) {
-      result = astTestIwc( this );
-
-/* Clean. */
-/* ------ */
-   } else if ( !strcmp( attrib, "clean" ) ) {
-      result = astTestClean( this );
-
-/* Warnings. */
-/* -------- */
-   } else if ( !strcmp( attrib, "warnings" ) ) {
-      result = astTestWarnings( this );
-
-/* If the name is not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then return
-   zero. */
-   } else if ( !strcmp( attrib, "ncard" ) ||
-               !strcmp( attrib, "allwarnings" ) ){
-      result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-   
-/* Return the result, */
-   return result;
-}
-
-static int TestCard( AstFitsChan *this, int *status ){
-/*
-*+
-*  Name:
-*     astTestCard
-
-*  Purpose:
-*     Test the Card attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int astTestCard( AstFitsChan *this )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function tests the Card attribute for the supplied FitsChan. 
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-
-*  Returned Value:
-*     If the Card attribute has its "cleared" value (i.e. if the first card 
-*     in the FitsChan will be the next one to be read), then zero is returned,
-*     otherwise 1 is returned.
-
-*-
-*/
-
-/* Local Variables: */
-   int card;               /* The original value of Card */
-   int ret;                /* The returned flag */
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Get the current value of Card. */
-   card = astGetCard( this );
-
-/* Temporarily clear Card. */
-   astClearCard( this );
-
-/* See if the original Card is equal to the cleared card, and set the
-   returned flag appropriately. Re-instate the original value of card is
-   required.*/
-   if( astGetCard( this ) == card ) {
-      ret = 0;
-   } else {
-      astSetCard( this, card );
-      ret = 1;
-   }
-
-/* Return the flag. */
-   return ret;
-
-}
-
-static int TestFits( AstFitsChan *this, const char *name, int *there, 
-                     int *status ){ 
-/*
-*++
-*  Name:
-c     astTestFits
-f     AST_TESTFITS
-
-*  Purpose:
-*     See if a named keyword has a defined value in a FitsChan.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     int astTestFits( AstFitsChan *this, const char *name, int *there )
-f     RESULT = AST_TESTFITS( THIS, NAME, THERE, STATUS )
-
-*  Class Membership:
-*     FitsChan method.
-
-*  Description:
-*     This function serches for a named keyword in a FitsChan. If found,
-*     and if the keyword has a value associated with it, a
-c     non-zero
-f     .TRUE.
-*     value is returned. If the keyword is not found, or if it does not
-*     have an associated value, a
-c     zero
-f     .FALSE. 
-*     value is returned.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FitsChan.
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string
-f        A character string 
-*        containing the FITS keyword name. This may be a complete FITS
-*        header card, in which case the keyword to use is extracted from 
-*        it. No more than 80 characters are read from this string.
-c     there
-f     THERE = LOGICAL (Returned)
-c        Pointer to an integer which will be returned holding a non-zero
-c        value if the keyword was found in the header, and zero otherwise.
-f        A value of .TRUE. will be returned if the keyword was found in the 
-f        header, and .FALSE. otherwise.
-*        This parameter allows a distinction to be made between the case
-*        where a keyword is not present, and the case where a keyword is 
-*        present but has no associated value.
-c        A NULL pointer may be supplied if this information is not
-c        required.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astTestFits()
-f     AST_TESTFITS = LOGICAL
-*        A value of zero 
-f        .FALSE.
-*        is returned if the keyword was not found in the FitsChan or has
-*        no associated value. Otherwise, a value of 
-c        one 
-f        .TRUE.
-*        is returned. 
-
-*  Notes:
-*     -  The current card is left unchanged by this function.
-*     -  The card following the current card is checked first. If this is
-*     not the required card, then the rest of the FitsChan is searched,
-*     starting with the first card added to the FitsChan. Therefore cards
-*     should be accessed in the order they are stored in the FitsChan (if
-*     possible) as this will minimise the time spent searching for cards. 
-*     -  An error will be reported if the keyword name does not conform
-*     to FITS requirements.
-c     -  Zero 
-f     -  .FALSE.
-*     is returned as the function value if an error has already occurred, 
-*     or if this function should fail for any reason.
-*--
-*/
-
-
-/* Local Variables: */ 
-   const char *class;     /* Object class */ 
-   const char *method;    /* Calling method */ 
-   char *lcom;            /* Supplied keyword comment */ 
-   char *lname;           /* Supplied keyword name */ 
-   char *lvalue;          /* Supplied keyword value */ 
-   int icard;             /* Current card index on entry */
-   int ret;               /* The returned value */ 
-
-/* Initialise */
-   if( there ) *there = 0;
-
-/* Check the global error status. */ 
-   if ( !astOK ) return 0; 
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the calling method and object class. */ 
-   method = "astTestFits"; 
-   class = astGetClass( this ); 
-
-/* Initialise the returned value. */ 
-   ret = 0; 
-
-/* Extract the keyword name from the supplied string. */ 
-   (void) Split( name, &lname, &lvalue, &lcom, method, class, status ); 
-
-/* Store the current card index. */
-   icard = astGetCard( this );
-
-/* Attempt to find a card in the FitsChan refering to this keyword, 
-   and make it the current card. Only proceed if a card was found. */ 
-   if( SearchCard( this, lname, method, class, status ) ){ 
-
-/* Indicate the card has been found. */
-      if( there ) *there = 1;
-
-/* If the cards data type is no undefined, return 1. */
-      if( CardType( this, status ) != AST__UNDEF ) ret = 1;
-
-   } 
-
-/* Re-instate the original current card index. */
-   astSetCard( this, icard );
-
-/* Release the memory used to hold keyword name, value and comment strings. */ 
-   lname = (char *) astFree( (void *) lname ); 
-   lvalue = (char *) astFree( (void *) lvalue ); 
-   lcom = (char *) astFree( (void *) lcom ); 
-
-/* Return the answer. */ 
-   return ret; 
-}
-
-static AstTimeScaleType TimeSysToAst( AstFitsChan *this, const char *timesys, 
-                                      const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     TimeSysToAst
-
-*  Purpose:
-*     Convert a FITS TIMESYS value to an AST TimeFrame timescale value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstTimeScaleType TimeSysToAst( AstFitsChan *this, const char *timesys, 
-*                                    const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function returns the value used by the AST TimeFrame class to
-*     represent the timescale specified by the "timesys" parameter, which
-*     should hold the value of a FITS TIMESYS keyword. The TIMESYS
-*     convention was introduced as part of the Y2K DATE-OBS changes, and
-*     is not currently part of the published FITS-WCS conventions.
-*
-*     If the requested timescale is not supported by AST, then a warning is 
-*     added to the FitsChan and a value of AST__UTC is returned (but no
-*     error is reported).
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     timesys
-*        Pointer to the string holding the TIMESYS value.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The equivalent AstTimeScaleType value.
-
-*/
-
-/* Local Variables: */
-   AstTimeScaleType result;  /* The returned timescale */
-   char buf[ 200 ];          /* Buffer for warning message */
-
-/* Initialise */
-   result = AST__UTC;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-   if( !strcmp( timesys, "UTC" ) ) {
-      result = AST__UTC;
-
-   } else if( !strcmp( timesys, "UT" ) ) {
-      result = AST__UTC;
-      Warn( this, "badval", "The original FITS header contained a value of UT "
-            "for keyword TIMESYS which is being interpreted as UTC.", method, 
-            class, status );
-
-   } else if( !strcmp( timesys, "TAI" ) ) {
-      result = AST__TAI;
-
-   } else if( !strcmp( timesys, "IAT" ) ) {
-      result = AST__TAI;
-
-   } else if( !strcmp( timesys, "ET" ) ) {
-      result = AST__TT;
-      Warn( this, "badval", "The original FITS header contained a value of ET "
-            "for keyword TIMESYS. TT will be used instead.", method, class, status );
-
-   } else if( !strcmp( timesys, "TT" ) ) {
-      result = AST__TT;
-
-   } else if( !strcmp( timesys, "TDT" ) ) {
-      result = AST__TT;
-
-   } else if( !strcmp( timesys, "TDB" ) ) {
-      result = AST__TDB;
-
-   } else if( !strcmp( timesys, "TCG" ) ) {
-      result = AST__TCG;
-
-   } else if( !strcmp( timesys, "TCB" ) ) {
-      result = AST__TCB;
-
-   } else {
-      result = AST__UTC;
-      sprintf( buf, "The original FITS header contained a value of %s for "
-               "keyword TIMESYS. AST does not support this timescale so "
-               "UTC will be used instead.", timesys );
-      Warn( this, "badval", buf, method, class, status );
-   }
-
-/* Return the result */
-   return result;
-}
-
-static char *UnPreQuote( const char *string, int *status ) {
-/*
-*  Name:
-*     UnPreQuote
-
-*  Purpose:
-*     Reverse the pre-quoting of FITS character data.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     char *UnPreQuote( const char *string, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function reverses the effect of the PreQuote function on a
-*     string (apart from any loss of data due to truncation). It
-*     should be used to recover the original character data from the
-*     pre-quoted version of a string retrieved from a FITS character
-*     value associated with a keyword.
-
-*  Parameters:
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        pre-quoted character data.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a dynamically allocated null-terminated string
-*     containing the un-quoted character data. The memory holding this
-*     string should be freed by the caller (using astFree) when no
-*     longer required.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked wth the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   int i1;                       /* Offset of first useful character */
-   int i2;                       /* Offest of last useful character */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-   
-/* Initialise to use the first and last characters in the input
-   string. */
-   i1 = 0;
-   i2 = strlen( string ) - 1;
-
-/* If the string contains at least 2 characters, check if the first
-   and last characters are double quotes ("). If so, adjust the
-   offsets to exclude them. */
-   if ( ( i2 > i1 ) &&
-        ( string[ i1 ] == '"' ) && ( string[ i2 ] == '"' ) ) {
-      i1++;
-      i2--;
-   }
-
-/* Make a dynamically allocated copy of the useful part of the
-   string. */
-   result = astString( string + i1, i2 - i1 + 1 );
-
-/* Return the answer. */
-   return result; 
-
-}
-
-static int Use( AstFitsChan *this, int set, int helpful, int *status ) {
-/*
-*  Name:
-*     Use
-
-*  Purpose:
-*     Decide whether to write a value to a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Use( AstFitsChan *this, int set, int helpful, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function decides whether a value supplied by a class "Dump"
-*     function, via a call to one of the astWrite... protected
-*     methods, should actually be written to a FitsChan.
-*
-*     This decision is based on the settings of the "set" and
-*     "helpful" flags supplied to the astWrite... method, plus the
-*     attribute settings of the FitsChan.
-
-*  Parameters:
-*     this
-*        A pointer to the FitsChan.
-*     set
-*        The "set" flag supplied.
-*     helpful
-*        The "helpful" value supplied.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the value should be written out, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int full;                     /* Full attribute value */
-   int result;                   /* Result value to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If "set" is non-zero, then so is the result ("set" values must
-   always be written out). */
-   result = ( set != 0 );
-
-/* Otherwise, obtain the value of the FitsChan's Full attribute. */
-   if ( !set ) {
-      full = astGetFull( this );
-
-/* If Full is positive, display all values, if zero, display only
-   "helpful" values, if negative, display no (un-"set") values. */
-      if ( astOK ) result = ( ( helpful && ( full > -1 ) ) || ( full > 0 ) );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-*  Name:
-*     Ustrcmp
-
-*  Purpose:
-*     A case blind version of strcmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Ustrcmp( const char *a, const char *b, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the two strings, and 1 
-*     otherwise. Comparisons are case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strcmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Loop round each character. */
-   while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strncmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Ustrncmp( const char *a, const char *b, size_t n, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the first "n"
-*     characters of the two strings, and 1 otherwise. Comparisons are
-*     case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     n
-*        The maximum number of characters to compare.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strncmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int i;                  /* Character index */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Compare up to "n" characters. */
-   for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static void Warn( AstFitsChan *this, const char *condition, const char *text, 
-                  const char*method, const char *class, int *status ){
-/*
-*  Name:
-*     Warn
-
-*  Purpose:
-*     Store warning cards in a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Warn( AstFitsChan *this, const char *condition, const char *text,
-*               const char*method, const char *class, int *status );
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     If the Warnings attribute indicates that occurences of the specified 
-*     condition should be reported, the supplied text is split into lines
-*     and stored in the FitsChan as a series of ASTWARN cards, in front
-*     of the current card. If the specified condition is not being reported, 
-*     this function returns without action.
-
-*  Parameters:
-*     this
-*        The FitsChan. If NULL, this function returns without action.
-*     condition
-*        Pointer to a string holding a lower case condition name.
-*     text
-*        Pointer to a string holding the text of the warning.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   char buff[ AST__FITSCHAN_FITSCARDLEN + 1 ]; /* Buffer for new card text */
-   const char *a;        /* Pointer to 1st character in next card */
-   const char *b;        /* Pointer to terminating null character */
-   const char *c;        /* Pointer to last character in next card */
-   int exists;           /* Has the supplied warning already been issued? */
-   int icard;            /* Index of original card */
-   int nc;               /* No. of characters in next card */
-
-/* Check the inherited status, warning text, FitsChan and Clean attribute. */
-   if( !astOK || !text || !text[0] || !this || astGetClean( this ) ) return;
-
-/* Ignore the warning if the supplied condition is not contained within 
-   the list of conditions to be reported in this way (given by the 
-   Warnings attribute). */
-   if( FullForm( astGetWarnings( this ), condition, 0, status ) >= 0 ){
-
-/* If found, store the warning in the parent Channel structure. */
-      astAddWarning( this, 1, text, method, status );
-
-/* For historical reasons, warnings are also stored in the FitsChan as a 
-   set of FITS cards... First save the current card index, and rewind the 
-   FitsChan. */
-      icard = astGetCard( this );
-      astClearCard( this );
-
-/* Break the supplied text into lines and check the FitsChan to see if 
-   a block of adjacent ASTWARN cards with these lines already exist
-   within the FitsChan. Assume they do until proven otherwise. */
-      exists = 1;
-      a = text;
-      b = a + strlen( text );
-      while( a < b ){
-
-/* Each card contains about 60 characters of the text. Get a pointer to
-   the nominal last character in the next card. */
-         c = a + 60;
-
-/* If this puts the last character beyond the end of the text, use the
-   last character before the null as the last character in the card. */
-         if( c >= b ) {
-            c = b - 1;
-
-/* Otherwise, if the last character is not a space, move the last
-   character backwards to the first space. This avoids breaking words 
-   across cards. */
-         } else {
-            while( !isspace( *c ) && c > a ) c--;
-         }
-
-/* Copy the text into a null terminated buffer. */
-         nc = c - a + 1;
-         strncpy( buff, a, nc );
-         buff[ nc ] = 0;         
-
-/* If this is the first line, search the entire FitsChan for an ASTWARN card 
-   with this text. If not, indiate that the supplied text needs to be
-   stored in the FitsChan, and break out of the loop. */
-         if( a == text ) {
-            exists = 0;
-
-            while( !exists && 
-                   FindKeyCard( this, "ASTWARN", method, class, status ) ) {
-               if( !strcmp( (const char *) CardData( this, NULL, status ), buff ) ) {
-                  exists = 1;
-               }         
-               MoveCard( this, 1, method, class, status );
-            }
-            if( !exists ) break;
-
-/* If this is not the first line, see if the next card in the FitsChan is
-   an ASTWARN card with this text. If not, indiate that the supplied text 
-   needs to be stored in the FitsChan, and break out of the loop. */
-         } else {
-            if( !strcmp( CardName( this, status ), "ASTWARN" ) &&
-                !strcmp( (const char *) CardData( this, NULL, status ), buff ) ) {
-               MoveCard( this, 1, method, class, status );
-            } else {
-               exists = 0;
-               break;
-            }
-         }
-
-/* Set the start of the next bit of the text. */
-         a = c + 1;
-      }
-
-/* Reinstate the original current card index. */
-      astSetCard( this, icard );
-
-/* We only add new cards to the FitsChan if they do not already exist. */
-      if( !exists ) {
-
-/* Break the text into lines using the same algorithm as above, and store 
-   each line as a new ASTWARN card. Start with a blank ASTWARN card. */
-         astSetFitsS( this, "ASTWARN", " ", NULL, 0 );
-
-/* Loop until the entire text has been written out. */
-         a = text;
-         b = a + strlen( text );
-         while( a < b ){
-
-/* Each card contains about 60 characters of the text. Get a pointer to
-   the nominal last character in the next card. */
-            c = a + 60;
-
-/* If this puts the last character beyond the end of the text, use the
-   last character before the null as the last character in the card. */
-            if( c >= b ) {
-               c = b - 1;
-
-/* Otherwise, if the last character is not a space, move the last
-   character backwards to the first space. This avoids breaking words 
-   across cards. */
-            } else {
-               while( !isspace( *c ) && c > a ) c--;
-            }
-
-/* Copy the text into a null terminated buffer. */
-            nc = c - a + 1;
-            strncpy( buff, a, nc );
-            buff[ nc ] = 0;         
-
-/* Store the buffer as the next card. */
-            astSetFitsS( this, "ASTWARN", buff, NULL, 0 );
-
-/* Set the start of the next bit of the text. */
-            a = c + 1;
-         }
-
-/* Include a final blank card. */
-         astSetFitsS( this, "ASTWARN", " ", NULL, 0 );
-
-      }
-   }
-}
-
-static AstMatrixMap *WcsCDeltMatrix( FitsStore *store, char s, int naxes, 
-                                     const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsCDeltMatrix
-
-*  Purpose:
-*     Create a MatrixMap representing the CDELT scaling.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMatrixMap *WcsCDeltMatrix( FitsStore *store, char s, int naxes,
-*                                   const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A diagonal MatrixMap representing the FITS "CDELT" keywords is 
-*     returned.
-
-*  Parameters:
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        A character s identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     naxes
-*        The number of intermediate world coordinate axes (WCSAXES).
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the created MatrixMap or a NULL pointer if an 
-*     error occurred.
-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *new;       /* The created MatrixMap */
-   double *el;              /* Pointer to next matrix element */
-   double *mat;             /* Pointer to matrix array */
-   int i;                   /* Pixel axis index */
-
-/* Initialise/ */
-   new = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Allocate memory for the diagonal matrix elements. */
-   mat = (double *) astMalloc( sizeof(double)*naxes );
-   if( astOK ){
-
-/* Fill the matrix diagonal with values from the FitsStore. */
-      el = mat;
-      for( i = 0; i < naxes; i++ ){
-
-/* Get the CDELTi value for this axis. Missing terms can be defaulted so
-   do not report an error if the required value is not present in the 
-   FitsStore. */
-         *el = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-
-/* Missing terms default to to 1.0. */
-         if( *el == AST__BAD ) *el = 1.0;
-
-/* Move on to the next matrix element. */
-         el++;
-      }
-
-/* Create the diagional matrix. */
-      new = astMatrixMap( naxes, naxes, 1, mat, "", status );
-
-/* Report an error if the inverse transformation is undefined. */
-      if( !astGetTranInverse( new ) && astOK ) {
-        astError( AST__BDFTS, "%s(%s): Unusable CDELT values found "
-                  "in the FITS-WCS header - one or more values are zero.", status, method, class );
-      }
-
-/* Release the memory used to hold the matrix. */
-      mat = (double *) astFree( (void *) mat );
-
-   }
-
-/* If an error has occurred, attempt to annul the returned MatrixMap. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the MatrixMap. */
-   return new;
-
-}
-
-static AstMapping *WcsCelestial( AstFitsChan *this, FitsStore *store, char s,
-                                 AstFrame **frm, AstFrame *iwcfrm, double *reflon, double *reflat,
-                                 AstSkyFrame **reffrm, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsCelestial
-
-*  Purpose:
-*     Create a Mapping from intermediate world coords to celestial coords
-*     as described in a FITS header.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *WcsCelestial( AstFitsChan *this, FitsStore *store, char s,
-*                               AstFrame **frm, AstFrame *iwcfrm, double *reflon, double *reflat,
-*                               AstSkyFrame **reffrm, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function interprets the contents of the supplied FitsStore
-*     structure, looking for world coordinate axes which describe positions
-*     on the sky. If a pair of such longitude/latitude axes is found, a 
-*     Mapping is returned which transforms the corresponding intermediate 
-*     world coordinates to celestial world coordinates (this mapping leaves 
-*     any other axes unchanged). It also, modifies the supplied Frame to 
-*     describe the axes (again, other axes are left unchanged). If no
-*     pair of celestial axes is found, a UnitMap is returned, and the 
-*     supplied Frame is left unchanged.
-
-*  Parameters:
-*     this
-*        The FitsChan.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     frm
-*        The address of a location at which to store a pointer to the
-*        Frame describing the world coordinate axes.
-*     iwcfrm
-*        A pointer to the Frame describing the intermediate world coordinate 
-*        axes. The properties of this Frame may be changed on exit.
-*     reflon
-*        Address of a location at which to return the celestial longitude
-*        at the reference point. It is returned as AST__BAD if no
-*        celestial coordinate frame is found. 
-*     reflat
-*        Address of a location at which to return the celestial latitude
-*        at the reference point. It is returned as AST__BAD if no
-*        celestial coordinate frame is found. 
-*     reffrm
-*        Address of a location at which to return a pointer to a SkyFrame
-*        which define the reference values returned in reflon and reflat.
-*        It is returned as NULL if no celestial coordinate frame is found. 
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Declare the thread specific global data */
-   AstFrame *ofrm;           /* Pointer to a Frame */
-   AstMapping *map1;         /* Pointer to a Mapping */
-   AstMapping *map2;         /* Pointer to a Mapping */
-   AstMapping *map3;         /* Pointer to a Mapping */
-   AstMapping *map4;         /* Pointer to a Mapping */
-   AstMapping *ret;          /* Pointer to the returned Mapping */
-   AstMapping *newmap;       /* Modified PIXEL->IWC Mapping */
-   AstMapping *shiftmap;     /* ShiftMap from IWC to PPC */
-   AstSkyFrame *sfrm;        /* Pointer to a SkyFrame */
-   char *ctype;              /* Pointer to CTYPE string */
-   char *keyname;            /* Pointer to keyword name string */
-   char buf[300];            /* Text buffer */
-   char latctype[MXCTYPELEN];/* Latitude CTYPE keyword value */
-   char latkey[10];          /* Latitude CTYPE keyword name */
-   char lattype[4];          /* Buffer for celestial system */
-   char lonctype[MXCTYPELEN];/* Longitude CTYPE keyword value */
-   char lonkey[10];          /* Longitude CTYPE keyword name */
-   char lontype[4];          /* Buffer for celestial system */
-   double *shifts;           /* Array holding axis shifts */
-   double *ina;              /* Pointer to memory holding input position A */
-   double *inb;              /* Pointer to memory holding input position B */
-   double *mat;              /* Pointer to data for deg->rad scaling matrix */
-   double *outa;             /* Pointer to memory holding output position A */
-   double *outb;             /* Pointer to memory holding output position B */
-   double latval;            /* CRVAL for latitude axis */
-   double lonval;            /* CRVAL for longitude axis */
-   double pv;                /* Projection parameter value */
-   double x0;                /* IWC X at the projection fiducial point */
-   double y0;                /* IWC Y at the projection fiducial point */
-   int *axes;                /* Point to a list of axis indices */
-   int axlat;                /* Index of latitude physical axis */
-   int axlon;                /* Index of longitude physical axis */
-   int gotax;                /* Celestial axis found? */
-   int i;                    /* Loop count */
-   int j;                    /* Axis index */
-   int latprj;               /* Latitude projection type identifier */
-   int lonprj;               /* Longitude projection type identifier */
-   int m;                    /* Parameter index */
-   int mxpar_lat;            /* Max. projection parameter index on lat axis */
-   int mxpar_lon;            /* Max. projection parameter index on lon axis */
-   int naxes;                /* Number of axes */
-   int np;                   /* Max parameter index */
-   int prj;                  /* Projection type identifier */
-
-/* Initialise the returned values. */
-   ret = NULL;
-   *reflon = AST__BAD;
-   *reflat = AST__BAD;
-   *reffrm = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Get the number of physical axes. */
-   naxes = astGetNaxes( *frm );
-
-/* The first major section sees if the physical axes include a pair of 
-   longitude/latitude celestial axes.
-   ================================================================= */
-
-/* We have not yet found any celestial axes. */
-   axlon = -1;
-   axlat = -1;
-   latprj = AST__WCSBAD;
-   lonprj = AST__WCSBAD;
-   prj = AST__WCSBAD;
-
-/* First, we examine the CTYPE values in the FitsStore to determine
-   which axes are the longitude and latitude axes, and what the celestial 
-   co-ordinate system and projection are. Loop round the physical axes, 
-   getting each CTYPE value. */
-   for( i = 0; i < naxes && astOK; i++ ){
-      keyname =  FormatKey( "CTYPE", i + 1, -1, s, status );
-      ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-
-/* Issue a warning if no CTYPE value was found. */
-      if( !ctype ) {
-         sprintf( buf, "Axis type keywords (CTYPE, etc) were not found "
-                  "for one or more axes in the original FITS header. These "
-                  "axes will be assumed to be linear." );
-         Warn( this, "noctype", buf, method, class, status );
-
-/* We are looking for celestial axes. Celestial axes must have a "-" as the 
-   fifth character in CTYPE. */
-      } else if( ctype[4] == '-' ) {
-
-/* Find the projection type as specified by the last 4 characters 
-   in the CTYPE keyword value. AST__WCSBAD is stored in "prj" if the
-   last 4 characters do not specify a known WCS projection, but no error
-   is reported. */
-         prj = astWcsPrjType( ctype + 4 );
-
-/* See if this is a longitude axis (e.g. if the first 4 characters of CTYPE 
-   are "RA--" or "xLON" or "yzLN" ). If so, store the value of "x" or "yz"
-   (or "EQU" for equatorial coordinates) in variable "type" to indicate which 
-   coordinate system is being used. */
-         gotax = 0;
-         if( !strncmp( ctype, "RA--", 4 ) ){
-            strcpy( wcscelestial_type, "EQU" );
-            gotax = 1;
-
-         } else if( !strncmp( ctype, "AZ--", 4 ) ){
-            strcpy( wcscelestial_type, "AZL" );
-            gotax = 1;
-
-         } else if( !strncmp( ctype + 1, "LON", 3 ) ){
-            wcscelestial_type[ 0 ] = ctype[ 0 ];
-            wcscelestial_type[ 1 ] = 0;
-            gotax = 1;
-
-         } else if( !strncmp( ctype + 2, "LN", 2 ) ){
-            wcscelestial_type[ 0 ] = ctype[ 0 ];
-            wcscelestial_type[ 1 ] = ctype[ 1 ];
-            wcscelestial_type[ 2 ] = 0;
-            gotax = 1;
-         }
-
-/* If this is a longitude axis... */
-         if( gotax ){
-
-/* Check that this is the first longitude axis to be found. */
-            if( axlon == -1 ){
-
-/* Report an error if the projection is unknown. */
-               if( prj == AST__WCSBAD ){
-                  astError( AST__BDFTS, "%s(%s): FITS keyword '%s' refers to "
-                        "an unknown projection type '%s'.", status, method, class, 
-                         keyname, ctype + 4 );
-                  break;
-               }   
-
-/* Store the index of the longitude axis, type of longitude, etc. */
-               axlon = i;
-               strcpy( lontype, wcscelestial_type );
-               strcpy( lonkey, keyname );
-               strcpy( lonctype, ctype );
-               lonprj = prj;
-
-/* If another longitude axis has already been found, report an error. */
-            } else {
-               astError( AST__BDFTS, "%s(%s): FITS keywords '%s' (='%s') "
-                  "and '%s' (='%s') both describe celestial longitude axes.", status,
-                  method, class, keyname, ctype, lonkey, lonctype );
-               break;
-            }
-         }
-
-/* Do the same for the latitude axis, checking for "DEC-" and "xLAT" and
-  "yzLT". */
-         gotax = 0;
-         if( !strncmp( ctype, "DEC-", 4 ) ){
-            strcpy( wcscelestial_type, "EQU" );
-            gotax = 1;
-
-         } else if( !strncmp( ctype, "EL--", 4 ) ){
-            strcpy( wcscelestial_type, "AZL" );
-            gotax = 1;
-
-         } else if( !strncmp( ctype + 1, "LAT", 3 ) ){
-            wcscelestial_type[ 0 ] = ctype[ 0 ];
-            wcscelestial_type[ 1 ] = 0;
-            gotax = 1;
-
-         } else if( !strncmp( ctype + 2, "LT", 2 ) ){
-            wcscelestial_type[ 0 ] = ctype[ 0 ];
-            wcscelestial_type[ 1 ] = ctype[ 1 ];
-            wcscelestial_type[ 2 ] = 0;
-            gotax = 1;
-         }
-
-         if( gotax ){
-            if( axlat == -1 ){
-               if( prj == AST__WCSBAD ){
-                  astError( AST__BDFTS, "%s(%s): FITS keyword '%s' refers to "
-                        "an unknown projection type '%s'.", status, method, class, 
-                         keyname, ctype + 4 );
-                  break;
-               }   
-
-               axlat = i;
-               strcpy( lattype, wcscelestial_type );
-               strcpy( latkey, keyname );
-               strcpy( latctype, ctype );
-               latprj = prj;
-
-            } else {
-               astError( AST__BDFTS, "%s(%s): FITS keywords '%s' (='%s') "
-                  "and '%s' (='%s') both describe celestial latitude axes.", status,
-                  method, class, keyname, ctype, latkey, latctype );
-               break;
-            }
-         }
-      }
-   }
-
-/* Check the above went OK */
-   if( astOK ){
-
-/* If both longitude and latitude axes were found... */
-      if( axlat != -1 && axlon != -1 ){
-
-/* Report an error if they refer to different celestial coordinate systems. */
-         if( strcmp( lattype, lontype ) ){
-            astError( AST__BDFTS, "%s(%s): FITS keywords '%s' and '%s' "
-                      "indicate different celestial coordinate systems "
-                      "('%s' and '%s').", status, method, class, latkey, lonkey, 
-                      latctype, lonctype );
-
-/* Otherwise report an error if longitude and latitude axes use different 
-   projections. */
-         } else if( lonprj != latprj ){
-            astError( AST__BDFTS, "%s(%s): FITS keywords '%s' and '%s' "
-                      "indicate different projections ('%s' and '%s').", status, 
-                      method, class, latkey, lonkey, latctype, lonctype );
-         }
-
-/* If only one axis has been provided without the other (e.g. longitude but no 
-   latitude), report an error. */
-      } else if( axlat != -1 ){
-         astError( AST__BDFTS, "%s(%s): A latitude axis ('%s') was found "
-                   "without a corresponding longitude axis.", status, method, class, 
-                   latctype );
-
-      } else if( axlon != -1 ){
-         astError( AST__BDFTS, "%s(%s): A longitude axis ('%s') was found "
-                   "without a corresponding latitude axis.", status, method, class, 
-                   lonctype );
-      }
-   }   
-
-/* If a pair of matching celestial axes was not found, return a UnitMap 
-   and leave the Frame unchanged. 
-   ===================================================================== */
-   if( axlat == -1 || axlon == -1 ) {
-      ret = (AstMapping *) astUnitMap( naxes, "", status );     
-
-/* The rest of this function deals with creating a Mapping from
-   intermediate world coords to celestial coords, and modifying the
-   Frame appropriately.
-   ===================================================================== */
-   } else {
-
-/* Create a MatrixMap which scales the intermediate world coordinate axes
-   corresponding to the longitude and latitude axes from degrees to radians. */
-      mat = (double *) astMalloc( sizeof(double)*naxes );
-      if( mat ){
-         for( i = 0; i < naxes; i++ ){
-            if( i == axlat || i == axlon ){
-               mat[ i ] = AST__DD2R;
-            } else {
-               mat[ i ] = 1.0;
-            }
-         }
-         map1 = (AstMapping *) astMatrixMap( naxes, naxes, 1, mat, "", status );
-         mat = (double *) astFree( (void *) mat );
-
-/* If the projection is a CAR projection, but the CarLin attribute is
-   set, then we consider the CAR projection to be a simple linear mapping
-   of pixel coords to celestial coords. Do this by using a WcsMap with no 
-   projection. All axes will then be treated as linear and non-celestial. */
-         map3 = NULL;
-         if( latprj == AST__CAR && astGetCarLin( this ) ) {
-            map2 = (AstMapping *) astWcsMap( naxes, AST__WCSBAD, axlon + 1, 
-                                             axlat + 1, "", status );
-
-/* Now create a WinMap which adds on the CRVAL values to each axis. */
-            ina = astMalloc( sizeof(double)*naxes );
-            inb = astMalloc( sizeof(double)*naxes );
-            outa = astMalloc( sizeof(double)*naxes );
-            outb = astMalloc( sizeof(double)*naxes );
-
-            if( astOK ) {
-
-               for( i = 0; i < naxes; i++ ) {
-                  ina[ i ] = 0.0;               
-                  inb[ i ] = 1.0;               
-                  outa[ i ] = 0.0;               
-                  outb[ i ] = 1.0;               
-               }
-
-               lonval = GetItem( &(store->crval), axlon, 0, s, NULL, method, class, status );
-               if( lonval != AST__BAD ) {
-                  *reflon = lonval*AST__DD2R;
-                  outa[ axlon ] += *reflon;
-                  outb[ axlon ] += *reflon;
-               } else {
-                  outa[ axlon ] = AST__BAD;
-                  outb[ axlon ] = AST__BAD;
-               }
-
-               latval = GetItem( &(store->crval), axlat, 0, s, NULL, method, class, status );
-               if( latval != AST__BAD ) {
-                  *reflat = latval*AST__DD2R;
-                  outa[ axlat ] += *reflat;
-                  outb[ axlat ] += *reflat;
-               } else {
-                  outa[ axlat ] = AST__BAD;
-                  outb[ axlat ] = AST__BAD;
-               }
-
-               map3 = (AstMapping *) astWinMap( naxes, ina, inb, outa, outb, "", status );
-
-            }
-
-            ina = astFree( ina );
-            inb = astFree( inb );
-            outa = astFree( outa );
-            outb = astFree( outb );
-
-/* Otherwise, create a WcsMap with the specified projection. The WcsMap
-   is equivalent to a unit mapping for all axes other than "axlat" and 
-   "axlon". */
-         } else {
-
-/* Get the highest index ("m" value) of any supplied PVi_m projection 
-   parameters (on any axes). */
-            np = GetMaxJM( &(store->pv), s, status );
-
-/* Create the WcsMap */
-            map2 = (AstMapping *) astWcsMap( naxes, latprj, axlon + 1, 
-                                             axlat + 1, "", status );
-
-/* If the FITS header contains any projection parameters, store them in
-   the WcsMap. */
-            mxpar_lat = astGetPVMax( map2, axlat );
-            mxpar_lon = astGetPVMax( map2, axlon );
-            for( m = 0; m <= np; m++ ){
-               pv = GetItem( &(store->pv), axlat, m, s, NULL, method, class, status );
-               if( pv != AST__BAD ) {
-                  if( m <= mxpar_lat ) {
-                     astSetPV( map2, axlat, m, pv );
-                  } else {
-                     sprintf( buf, "Projection parameter PV%d_%d found, "
-                              "but is not used by %s projections.", axlat + 1, 
-                              m, astWcsPrjName( astGetWcsType( map2 ) ) );
-                     Warn( this, "badpv", buf, method, class, status );
-                  }
-               }
-      
-               pv = GetItem( &(store->pv), axlon, m, s, NULL, method, class, status );
-               if( pv != AST__BAD ) {
-                  if( m <= mxpar_lon ) {
-                     astSetPV( map2, axlon, m, pv );
-                  } else {
-                     sprintf( buf, "Projection parameter PV%d_%d found, "
-                              "but is not used by %s projections.", axlon + 1, 
-                              m, astWcsPrjName( astGetWcsType( map2 ) ) );
-                     Warn( this, "badpv", buf, method, class, status );
-                  }
-               }
-            }
-
-/* Invert the WcsMap to get a DEprojection. */
-            astInvert( map2 );
-
-/* Now produce a Mapping which converts the axes holding "Native Spherical 
-   Coords" into "Celestial Coords", leaving all other axes unchanged. */
-            map3 = WcsNative( this, store, s, (AstWcsMap *) map2, -1, -1, 
-                              method, class, status );
-
-/* Retrieve and store the reference longitude and latitude. */
-            *reflon = GetItem( &(store->crval), axlon, 0, s, NULL, method, class, status );
-            if( *reflon != AST__BAD ) *reflon *= AST__DD2R;
-            *reflat = GetItem( &(store->crval), axlat, 0, s, NULL, method, class, status );
-            if( *reflat != AST__BAD ) *reflat *= AST__DD2R;
-
-         }
-
-/* If projection parameter PVi_0a for the longitude axis "i" is non-zero,
-   then there is a shift of origin between Intermediate World Coords, IWC,
-   (the CRPIXi values correspond to the origin of IWC), and Projection Plane
-   Coords, PPC (these are the cartesian coordinates used by the WcsMap).
-   This shift of origin results in the fiducial point specified by the
-   CRVALi values mapping onto the pixel reference point specified by the
-   CRPIXj values. In this case we need to add a Mapping which implements
-   the shift of origin. Note, the AST-specific "TPN" projection cannot use 
-   this convention since it uses PVi_0 to hold a polynomial correction term. */
-         if( astGetWcsType( map2 ) != AST__TPN && 
-             astGetPV( map2, axlon, 0 ) != 0.0 ) {
-
-/* Find the projection plane coords corresponding to the fiducial point
-   of the projection. This is done by using the inverse WcsMap to convert
-   the native spherical coords at the fiducial point into PPC (x,y), which 
-   are returned in units of radians (not degrees). */
-            GetFiducialPPC( (AstWcsMap *) map2, &x0, &y0, status );
-            if( x0 != AST__BAD && y0 != AST__BAD ) {
-
-/* Allocate resources. */
-               shifts = astMalloc( sizeof( double )*(size_t) naxes );
-
-/* Check pointers can be used safely. */
-               if( astOK ) {
-
-/* Create a Mapping (a ShiftMap) from IWC to PPC. */
-                  for( i = 0; i < naxes; i++ ) shifts[ i ] = 0.0;
-                  shifts[ axlon ] = x0;
-                  shifts[ axlat ] = y0;
-                  shiftmap = (AstMapping *) astShiftMap( naxes, shifts, "", status );
-
-/* Produce a CmpMap which combines "map1" (which converts degrees to
-   radians on the celestial axes) with the above ShiftMap. */
-                  newmap = (AstMapping *) astCmpMap( map1, shiftmap, 1, "", status );
-
-/* Annul the component Mappings and use the new one in place of map1. */
-                  shiftmap = astAnnul( shiftmap );
-                  map1 = astAnnul( map1 );
-                  map1 = newmap;
-               }
-
-/* Free resources. */
-               shifts = astFree( shifts );
-            }
-         }
-
-/* Now concatenate the Mappings to produce the returned Mapping. */
-         map4 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-         ret = (AstMapping *) astCmpMap( map4, map3, 1, "", status );
-
-/* Annul the component Mappings. */
-         map1 = astAnnul( map1 );
-         map2 = astAnnul( map2 );
-         map3 = astAnnul( map3 );
-         map4 = astAnnul( map4 );
-
-/* We now make changes to the supplied Frame so that the longitude and
-   latitude axes are described by a SkyFrame. First create an appropriate
-   SkyFrame. */
-         sfrm = WcsSkyFrame( this, store, s, prj, wcscelestial_type, axlon, 
-                             axlat, method, class, status );
-
-/* The values currently stored in *reflat and *reflon are the CRVAL
-   values. In some circumstances, these may not be the original values in
-   the supplied header but may have been translated within the SpecTrans
-   function as part of the process of translating an old unsupported
-   projection (e.g. GLS) into a new supported projection (e.g. SFL).
-   Since the returned RefLat and RefLon values may be used to set the
-   reference position for a SpecFrame, we should return the original
-   values rather than the translated values. The original values will
-   have been stored (within SpecTrans) in the FitsChan as keywords
-   RFVALi. If such keywords can be found, use their values in preference
-   to the currently stored CRVAL values.*/
-         if( GetValue( this, FormatKey( "RFVAL", axlon + 1, -1, s, status ), 
-                       AST__FLOAT, (void *) &lonval, 0, 0, method, class, status ) &&
-             GetValue( this, FormatKey( "RFVAL", axlat + 1, -1, s, status ), 
-                       AST__FLOAT, (void *) &latval, 0, 0, method, class, status ) ) {
-            *reflon = lonval*AST__DD2R;
-            *reflat = latval*AST__DD2R;
-         }         
-
-/* Store the reflon and reflat values as the SkyRef position in the
-   SkyFrame, and set SkyRefIs to "ignore" so that the SkyFrame continues
-   to represent absolute celestial coords. */
-         if( *reflon != AST__BAD && *reflat != AST__BAD ) {
-            astSetSkyRef( sfrm, 0, *reflon );
-            astSetSkyRef( sfrm, 1, *reflat );
-            astSet( sfrm, "SkyRefIs=Ignored", status );
-         }
-
-/* Return a clone of this SkyFrame as the reference Frame. */
-         *reffrm = astClone( sfrm );
-
-/* Create a Frame by picking all the other (non-celestial) axes from the 
-   supplied Frame. */
-         axes = astMalloc( naxes*sizeof( int ) );
-         if( axes ) {         
-            j = 0;
-            for( i = 0; i < naxes; i++ ) {
-               if( i != axlat && i != axlon ) axes[ j++ ] = i;
-            }
-
-/* If there were no other axes, replace the supplied Frame with the skyframe. */
-            if( j == 0 ) {
-               (void) astAnnul( *frm );
-               *frm = (AstFrame *) astClone( sfrm );
-
-/* Otherwise pick the other axes from the supplied Frame */               
-            } else {
-               ofrm = astPickAxes( *frm, j, axes, NULL );
-
-/* Replace the supplied Frame with a CmpFrame made up of this Frame and 
-   the SkyFrame. */
-               (void) astAnnul( *frm );
-               *frm = (AstFrame *) astCmpFrame( ofrm, sfrm, "", status );
-               ofrm = astAnnul( ofrm );
-            }
-
-/* Permute the axis order to put the longitude and latitude axes back in
-   their original position. The SkyFrame will have the default axis
-   ordering (lon=axis 0, lat = axis 1). */
-            j = 0;
-            for( i = 0; i < naxes; i++ ) {
-               if( i == axlat ) {
-                  axes[ i ] = naxes - 1;
-               } else if( i == axlon ) {
-                  axes[ i ] = naxes - 2;
-               } else {
-                  axes[ i ] = j++;
-               }
-            }
-            astPermAxes( *frm, axes ); 
-
-/* Free the axes array. */
-            axes= astFree( axes );
-         }
-
-/* Free resources. */
-         sfrm = astAnnul( sfrm );
-
-/* Set the units in the supplied IWC Frame for the longitude and latitude
-   axes. These are degrees (the conversion from degs to rads is part of
-   the Mapping fronm IWC to WCS). */
-         astSetUnit( iwcfrm, axlon, "deg" ); 
-         astSetUnit( iwcfrm, axlat, "deg" ); 
-      }
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static void WcsFcRead( AstFitsChan *fc, AstFitsChan *fc2, FitsStore *store, 
-                       const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsFcRead
-
-*  Purpose:
-*     Extract WCS information from a supplied FitsChan using a FITSWCS
-*     encoding, and store it in the supplied FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WcsFcRead( AstFitsChan *fc, AstFitsChan *fc2, FitsStore *store, 
-*                     const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function extracts FITSWCS keywords from the supplied FitsChan, 
-*     and stores the corresponding WCS information in the supplied FitsStore.
-
-*  Parameters:
-*     fc
-*        Pointer to the FitsChan containing the cards read from the
-*        original FITS header. This should not include any un-used 
-*        non-standard keywords.
-*     fc2
-*        Pointer to a second FitsChan. If a card read from "fc" fails to
-*        be converted to its correct data type, a warning is only issued
-*        if there is no card for this keyword in "fc2". "fc2" may be NULL
-*        in which case a warning is always issued.
-*     store
-*        Pointer to the FitsStore structure.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   char buf[200];     /* Buffer for warning message */
-   char *cval;        /* String keyword value */
-   char *keynam;      /* Pointer to current keyword name */
-   char s;            /* Co-ordinate version character */
-   double dval;       /* Floating point keyword value */
-   int fld[2];        /* Integer field values from keyword name */
-   int jm;            /* Pixel axis or projection parameter index */
-   int i;             /* Intermediate axis index */
-   int mark;          /* Non-zero if card should be removed once used */
-   int nfld;          /* Number of integer fields in test string */
-   int ok;            /* Was value converted succesfully? */
-   int type;          /* Keyword data type */
-   int undef;         /* Is an undefined keyword value acceptable? */
-   void *item;        /* Pointer to item to get/put */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Ensure the FitsChan is re-wound. */
-   astClearCard( fc );
-
-/* Loop round all the cards in the FitsChan obtaining the keyword name for 
-   each card. Note, the single "=" is correct in the following "while"
-   statement. */
-   s = 0;
-   jm = -1;
-   i = -1;
-   type = AST__NOTYPE;
-   while( (keynam = CardName( fc, status )) ){
-      item = NULL;
-
-/* Assume the card is to be consumed by the reading process. This means
-   the card will be marked as used and effectively excluded from the header. 
-   Keywords which supply observation details that do not depend on the
-   mapping from pixel to WCS axes, or on the nature of the WCS axes, 
-   are not removed as they may be needed for other, non-WCS related,
-   purposes. */
-      mark = 1;
-
-/* For most keywords, if the keyword is present in the header it must
-   have a definded value. However, some keywords are read from the header
-   but not actually used for anything. This is done to ensure that the 
-   keyword is stripped from the header. It is acceptable for such
-   keywords to have an undefined value. Initialise a flag indicating that
-   the next keyword read is not allowed to have an undefined value. */
-      undef = 0;
-
-/* Is this a primary CRVAL keyword? */
-      if( Match( keynam, "CRVAL%d", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->crval);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary CRVAL keyword? */
-      } else if( Match( keynam, "CRVAL%d%1c", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->crval);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CRPIX keyword? */
-      } else if( Match( keynam, "CRPIX%d", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->crpix);
-         type = AST__FLOAT;
-         i = 0;
-         jm = fld[ 0 ] - 1;
-         s = ' ';
-
-/* Is this a secondary CRPIX keyword? */
-      } else if( Match( keynam, "CRPIX%d%1c", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->crpix);
-         type = AST__FLOAT;
-         i = 0;
-         jm = fld[ 0 ] - 1;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CDELT keyword? */
-      } else if( Match( keynam, "CDELT%d", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->cdelt);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary CDELT keyword? */
-      } else if( Match( keynam, "CDELT%d%1c", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->cdelt);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CTYPE keyword? If so, store the associated comment. */
-      } else if( Match( keynam, "CTYPE%d", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->ctype);
-         type = AST__STRING;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = ' ';
-         SetItemC( &(store->ctype_com), i, ' ', CardComm( fc, status ), status );
-
-/* Is this a secondary CTYPE keyword? If so, store the associated comment. */
-      } else if( Match( keynam, "CTYPE%d%1c", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->ctype);
-         type = AST__STRING;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-         SetItemC( &(store->ctype_com), i, s, CardComm( fc, status ), status );
-
-/* Is this a primary CNAME keyword? */
-      } else if( Match( keynam, "CNAME%d", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->cname);
-         type = AST__STRING;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary CNAME keyword? */
-      } else if( Match( keynam, "CNAME%d%1c", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->cname);
-         type = AST__STRING;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary CUNIT keyword? */
-      } else if( Match( keynam, "CUNIT%d", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->cunit);
-         type = AST__STRING;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary CUNIT keyword? */
-      } else if( Match( keynam, "CUNIT%d%1c", 1, fld, &nfld, method, class, status ) ){
-         item = &(store->cunit);
-         type = AST__STRING;
-         i = fld[ 0 ] - 1;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary PC keyword? */
-      } else if( Match( keynam, "PC%d_%d", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->pc);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = fld[ 1 ] - 1;
-         s = ' ';
-
-/* Is this a secondary PC keyword? */
-      } else if( Match( keynam, "PC%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->pc);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = fld[ 1 ] - 1;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary PV keyword? */
-      } else if( Match( keynam, "PV%d_%d", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->pv);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = fld[ 1 ];
-         s = ' ';
-
-/* Is this a secondary PV keyword? */
-      } else if( Match( keynam, "PV%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->pv);
-         type = AST__FLOAT;
-         i = fld[ 0 ] - 1;
-         jm = fld[ 1 ];
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary RADESYS keyword? */
-      } else if( Match( keynam, "RADESYS", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->radesys);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary RADESYS keyword? */
-      } else if( Match( keynam, "RADESYS%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->radesys);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary EQUINOX keyword? */
-      } else if( Match( keynam, "EQUINOX", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->equinox);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary EQUINOX keyword? */
-      } else if( Match( keynam, "EQUINOX%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->equinox);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary LATPOLE keyword? */
-      } else if( Match( keynam, "LATPOLE", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->latpole);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary LATPOLE keyword? */
-      } else if( Match( keynam, "LATPOLE%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->latpole);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary LONPOLE keyword? */
-      } else if( Match( keynam, "LONPOLE", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->lonpole);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary LONPOLE keyword? */
-      } else if( Match( keynam, "LONPOLE%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->lonpole);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary WXSAXES keyword? */
-      } else if( Match( keynam, "WCSAXES", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->wcsaxes);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary WCSAXES keyword? */
-      } else if( Match( keynam, "WCSAXES%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->wcsaxes);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary DUT1 keyword? */
-      } else if( Match( keynam, "DUT1", 0, fld, &nfld, method, class, status ) ){
-         mark = 0;
-         item = &(store->dut1);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a primary MJD-OBS keyword? */
-      } else if( Match( keynam, "MJD-OBS", 0, fld, &nfld, method, class, status ) ){
-         mark = 0;
-         item = &(store->mjdobs);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a primary WCSNAME keyword? */
-      } else if( Match( keynam, "WCSNAME", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->wcsname);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary WCSNAME keyword? */
-      } else if( Match( keynam, "WCSNAME%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->wcsname);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary SPECSYS keyword? */
-      } else if( Match( keynam, "SPECSYS", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->specsys);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary SPECSYS keyword? */
-      } else if( Match( keynam, "SPECSYS%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->specsys);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary SSYSSRC keyword? */
-      } else if( Match( keynam, "SSYSSRC", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->ssyssrc);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary SSYSSRC keyword? */
-      } else if( Match( keynam, "SSYSSRC%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->ssyssrc);
-         type = AST__STRING;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary ZSOURCE keyword? */
-      } else if( Match( keynam, "ZSOURCE", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->zsource);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary ZSOURCE keyword? */
-      } else if( Match( keynam, "ZSOURCE%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->zsource);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary VELOSYS keyword? */
-      } else if( Match( keynam, "VELOSYS", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->velosys);
-         type = AST__FLOAT;
-         undef = 1;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary VELOSYS keyword? */
-      } else if( Match( keynam, "VELOSYS%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->velosys);
-         type = AST__FLOAT;
-         undef = 1;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary RESTFRQ keyword? */
-      } else if( Match( keynam, "RESTFRQ", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->restfrq);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary RESTFRQ keyword? */
-      } else if( Match( keynam, "RESTFRQ%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->restfrq);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary RESTWAV keyword? */
-      } else if( Match( keynam, "RESTWAV", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->restwav);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a secondary RESTWAV keyword? */
-      } else if( Match( keynam, "RESTWAV%1c", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->restwav);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary IMAGFREQ keyword? */
-      } else if( Match( keynam, "IMAGFREQ", 0, fld, &nfld, method, class, status ) ){
-         item = &(store->imagfreq);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a MJD-AVG keyword? */
-      } else if( Match( keynam, "MJD-AVG", 0, fld, &nfld, method, class, status ) ){
-         mark = 0;
-         item = &(store->mjdavg);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a OBSGEO-X keyword? */
-      } else if( Match( keynam, "OBSGEO-X", 0, fld, &nfld, method, class, status ) ){
-         mark = 0;
-         item = &(store->obsgeox);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a OBSGEO-Y keyword? */
-      } else if( Match( keynam, "OBSGEO-Y", 0, fld, &nfld, method, class, status ) ){
-         mark = 0;
-         item = &(store->obsgeoy);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a OBSGEO-Z keyword? */
-      } else if( Match( keynam, "OBSGEO-Z", 0, fld, &nfld, method, class, status ) ){
-         mark = 0;
-         item = &(store->obsgeoz);
-         type = AST__FLOAT;
-         i = 0;
-         jm = 0;
-         s = ' ';
-
-/* Is this a TIMESYS keyword? */
-      } else if( Match( keynam, "TIMESYS", 0, fld, &nfld, method, class, status ) ){
-         item = NULL;
-         if( CnvValue( fc, AST__STRING, 0, &cval, method, status ) ) {
-            store->timesys = TimeSysToAst( fc, cval, method, class, status );
-            MarkCard( fc, status );
-
-         } else {
-            sprintf( buf, "The original FITS header contained a value for "
-                     "keyword TIMESYS which could not be converted to a "
-                     "character string." );
-            Warn( fc, "badval", buf, method, class, status );
-         }
-
-/* Following keywords are used to describe "-SIP" distortion as used by
-   the SIRTF project... */
-
-/* Is this a primary A keyword? */
-      } else if( Match( keynam, "A_%d_%d", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->asip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = ' ';
-
-/* Is this a secondary A keyword? */
-      } else if( Match( keynam, "A_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->asip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = keynam[ strlen( keynam ) - 1 ];
-
-
-/* Is this a primary B keyword? */
-      } else if( Match( keynam, "B_%d_%d", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->bsip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = ' ';
-
-/* Is this a secondary B keyword? */
-      } else if( Match( keynam, "B_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->bsip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = keynam[ strlen( keynam ) - 1 ];
-
-/* Is this a primary AP keyword? */
-      } else if( Match( keynam, "AP_%d_%d", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->apsip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = ' ';
-
-/* Is this a secondary AP keyword? */
-      } else if( Match( keynam, "AP_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->apsip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = keynam[ strlen( keynam ) - 1 ];
-
-
-/* Is this a primary BP keyword? */
-      } else if( Match( keynam, "BP_%d_%d", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->bpsip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = ' ';
-
-/* Is this a secondary BP keyword? */
-      } else if( Match( keynam, "BP_%d_%d%1c", 2, fld, &nfld, method, class, status ) ){
-         item = &(store->bpsip);
-         type = AST__FLOAT;
-         i = fld[ 0 ];
-         jm = fld[ 1 ];
-         s = keynam[ strlen( keynam ) - 1 ];
-      }
-
-/* If this keyword was recognized, store it in the FitsStore, and mark it
-   as having been read. */
-      if( item ){
-         ok = 1;
-         if( type == AST__FLOAT ){
-            if( CnvValue( fc, AST__FLOAT, undef, &dval, method, status ) ) {
-               SetItem( (double ****) item, i, jm, s, dval, status );
-               if( mark ) MarkCard( fc, status );
-            } else {
-               ok = 0;
-            }
-         } else {
-            if( CnvValue( fc, AST__STRING, undef, &cval, method, status ) ) {
-               SetItemC( (char ****) item, i, s, cval, status );
-               if( mark ) MarkCard( fc, status );
-            } else {
-              ok = 0;
-            }
-         }
-
-/* Issue a warning if the value could not be converted to the expected
-   type. */
-         if( !ok ) {
-
-/* First check that the keyword is not included in "fc2". */
-            if( !HasCard( fc2, keynam, method, class, status ) ) {
-               sprintf( buf, "The original FITS header contained a value for "
-                        "keyword %s which could not be converted to a %s.",
-                        keynam, ( type==AST__FLOAT ? "floating point number":
-                        "character string" ) );
-               Warn( fc, "badval", buf, "astRead", "FitsChan", status );
-            }
-         }
-      }   
-
-/* Move on to the next card. */
-      MoveCard( fc, 1, method, class, status );
-
-   }
-}
-
-static int WcsFromStore( AstFitsChan *this, FitsStore *store, 
-                         const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsFromStore
-
-*  Purpose:
-*     Store WCS keywords in a FitsChan using FITS-WCS encoding.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int WcsFromStore( AstFitsChan *this, FitsStore *store, 
-*                       const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function copies the WCS information stored in the supplied 
-*     FitsStore into the supplied FitsChan, using FITS-WCS encoding.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     store
-*        Pointer to the FitsStore.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A value of 1 is returned if succesfull, and zero is returned
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   char *comm;         /* Pointer to comment string */
-   char *cval;         /* Pointer to string keyword value */
-   char parprefix[3];  /* Prefix for projection parameter keywords */
-   char combuf[80];    /* Buffer for FITS card comment */
-   char s;             /* Co-ordinate version character */
-   char sign[2];       /* Fraction's sign character */
-   char sup;           /* Upper limit on s */
-   char type[MXCTYPELEN];/* Buffer for CTYPE value */
-   double cdl;         /* CDELT value */
-   double fd;          /* Fraction of a day */
-   double mjd99;       /* MJD at start of 1999 */
-   double val;         /* General purpose value */
-   int i;              /* Axis index */
-   int ihmsf[ 4 ];     /* Hour, minute, second, fractional second */
-   int iymdf[ 4 ];     /* Year, month, date, fractional day */
-   int j;              /* Axis index */
-   int jj;             /* SlaLib status */
-   int m;              /* Parameter index */
-   int maxm;           /* Upper limit on m */
-   int naxis;          /* Value of NAXIS keyword */
-   int nwcs;           /* No. of WCS axes */
-   int ok;             /* Frame created succesfully? */
-   int prj;            /* Projection type */
-   int ret;            /* Returned value */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* If the FitsChan contains a value for the NAXIS keyword, note it.
-   Otherwise store -1. */
-   if( !astGetFitsI( this, "NAXIS", &naxis ) ) naxis = -1;
-
-/* Find the last WCS related card. */
-   FindWcs( this, 1, 1, 0, method, class, status );
-
-/* Loop round all co-ordinate versions */
-   sup = GetMaxS( &(store->crval), status );
-   for( s = ' '; s <= sup && astOK; s++ ){      
-
-/* For alternate axes, skip this axis description if there is no CRPIX1 or
-   CRVAL1 value. This avoids partial axis descriptions being written out. */
-      if( s != ' ' ) {
-         if( GetItem( &(store->crpix), 0, 0, s, NULL, method, class, status ) == 
-             AST__BAD ||
-             GetItem( &(store->crval), 0, 0, s, NULL, method, class, status ) ==
-             AST__BAD ) {
-            ok = 0;
-            goto next;
-         }
-      }      
-
-/* Assume the Frame can be created succesfully. */
-      ok = 1;
-
-/* Save the number of wcs axes. If a value for WCSAXES has been set, or
-   if the number of axes is not the same as specified in the NAXIS keyword,
-   store a WCSAXES keyword. */
-      val = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) {
-         nwcs = (int) ( val + 0.5 );
-      } else {
-         nwcs = GetMaxJM( &(store->crpix), s, status ) + 1;
-         if( nwcs != 0 && nwcs != naxis ) val = (double) nwcs;
-      }
-
-      if( val != AST__BAD ) {
-         SetValue( this, FormatKey( "WCSAXES", -1, -1, s, status ),
-                   &nwcs, AST__INT, "Number of WCS axes", status );
-      }
-
-/* Get and save WCSNAME. This is NOT required, so do not return if it is 
-   not available. If the WCS is 1-d, only store WCSNAME if its value is
-   different to the CTYPE1 value. */
-      cval = GetItemC( &(store->wcsname), 0, s, NULL, method, class, status );
-      if( cval && nwcs == 1 ) {
-         comm = GetItemC( &(store->ctype), 0, s, NULL, method, class, status );
-         if( comm && Similar( comm, cval, status ) ) cval = NULL;
-      }
-      if( cval ) SetValue( this, FormatKey( "WCSNAME", -1, -1, s, status ), &cval, 
-                           AST__STRING, "Reference name for the coord. frame", status );
-
-/* The prefix for projection parameters is usualy "PV". */
-      strcpy( parprefix, "PV" );
-
-/* Keywords common to all axis types... */
-
-/* Get and save CRPIX for all pixel axes. These are required, so pass on
-   if they are not available. */
-      for( i = 0; i < nwcs; i++ ) {
-         val = GetItem( &(store->crpix), 0, i, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-            goto next;
-         }
-         sprintf( combuf, "Reference pixel on axis %d", i + 1 );
-         SetValue( this, FormatKey( "CRPIX", i + 1, -1, s, status ), &val, AST__FLOAT, 
-                   combuf, status );
-       }
-
-/* Get and save CRVAL for all WCS axes. These are required, so 
-   pass on if they are not available. */
-      for( i = 0; i < nwcs; i++ ) {
-         val = GetItem( &(store->crval), i, 0, s, NULL, method, class, status );
-         if( val == AST__BAD ) {
-            ok = 0;
-            goto next;
-         }
-         sprintf( combuf, "Value at ref. pixel on axis %d", i + 1 );
-         SetValue( this, FormatKey( "CRVAL", i + 1, -1, s, status ), &val, AST__FLOAT, 
-                   combuf, status );
-      }
-
-/* Get and save CTYPE for all WCS axes. These are required, so 
-   pass on if they are not available. */
-      for( i = 0; i < nwcs; i++ ) {
-         cval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-         if( !cval ) {
-            ok = 0;
-            goto next;
-         }
-         comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-         if( !comm ) {            
-            sprintf( combuf, "Type of co-ordinate on axis %d", i + 1 );
-            comm = combuf;
-         }
-
-/* Extract the projection type as specified by the last 4 characters 
-   in the CTYPE keyword value. This will be AST__WCSBAD for non-celestial
-   axes. */
-         prj = ( strlen( cval ) > 4 ) ? astWcsPrjType( cval + 4 ) : AST__WCSBAD;
-
-/* If the projection type is "TPN" (an AST-specific code) convert it to
-   standard FITS-WCS code "TAN" and change the prefix for projection 
-   parameters from "PV" to "QV". AST will do the inverse conversions when
-   reading such a header. Non-AST software will simply ignore the QV
-   terms and interpret the header as a simple TAN projection. */
-         if( prj == AST__TPN ) {
-            strcpy( parprefix, "QV" );
-            strcpy( type, cval );
-            (void) strcpy( type + 4, "-TAN" );
-            cval = type;
-         }
-
-/* Store the (potentially modified) CTYPE value. */
-         SetValue( this, FormatKey( "CTYPE", i + 1, -1, s, status ), &cval, AST__STRING, 
-                   comm, status );
-      }
-
-/* Get and save CNAME for all WCS axes. These are NOT required, so 
-   do not pass on if they are not available. Do not include a CNAME
-   keyword if its value equals the commen or value of the corresponding
-   CTYPE keyword. */
-      for( i = 0; i < nwcs; i++ ) {
-         cval = GetItemC( &(store->cname), i, s, NULL, method, class, status );
-         if( cval ) {
-            comm = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-            if( !comm || strcmp( comm, cval ) ) {
-               comm = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-               if( !comm || strcmp( comm, cval ) ) {
-                  sprintf( combuf, "Description of axis %d", i + 1 );
-                  SetValue( this, FormatKey( "CNAME", i + 1, -1, s, status ), &cval, 
-                            AST__STRING, combuf, status );
-               }
-            }
-         }
-      }
-
-/* Now choose whether to produce CDi_j or CDELT/PCi_j keywords. */
-      if( astGetCDMatrix( this ) ) {
-
-/* CD matrix. Multiply the row of the PC matrix by the CDELT value. */
-         for( i = 0; i < nwcs; i++ ) {
-            cdl = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-            if( cdl == AST__BAD ) cdl = 1.0;
-       
-            for( j = 0; j < nwcs; j++ ){
-               val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-               if( val == AST__BAD ) val = ( i == j ) ? 1.0 : 0.0;
-               val *= cdl;
-
-               if( val != 0.0 ) {
-                   SetValue( this, FormatKey( "CD", i + 1, j + 1, s, status ), &val, 
-                             AST__FLOAT, "Transformation matrix element", status );
-               }
-            }
-         }
-
-/* If producing PC/CDELT keywords... */
-      } else {
-   
-/* CDELT keywords. */
-         for( i = 0; i < nwcs; i++ ) {
-            val = GetItem( &(store->cdelt), i, 0, s, NULL, method, class, status );
-            if( val == AST__BAD ) {
-               ok = 0;
-               goto next;
-            }
-            sprintf( combuf, "Pixel size on axis %d", i + 1 );
-            SetValue( this, FormatKey( "CDELT", i + 1, -1, s, status ), &val, AST__FLOAT, 
-                      combuf, status );
-         }
-
-/* PC matrix. */
-         for( i = 0; i < nwcs; i++ ) {
-            for( j = 0; j < nwcs; j++ ){
-               val = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-
-               if( val != AST__BAD ) {
-                  if( i == j ) {
-                     if( EQUAL( val, 1.0 ) ) val = AST__BAD;
-                  } else {                  
-                     if( EQUAL( val, 0.0 ) ) val = AST__BAD;
-                  }
-               }
-
-               if( val != AST__BAD ) {
-                  SetValue( this, FormatKey( "PC", i + 1, j + 1, s, status ), &val, 
-                            AST__FLOAT, "Transformation matrix element", status );
-               }
-            }
-         }
-      }
-
-/* Get and save CUNIT for all WCS axes. These are NOT required, so 
-   do not pass on if they are not available. */
-      for( i = 0; i < nwcs; i++ ) {
-         cval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-         if( cval ) {
-            sprintf( combuf, "Units for axis %d", i + 1 );
-            SetValue( this, FormatKey( "CUNIT", i + 1, -1, s, status ), &cval, AST__STRING, 
-                      combuf, status );
-         }
-      }
-
-/* Date of observation (only allowed for primary axis descriptions). */
-      if( s == ' ' ) {
-         val = GetItem( &(store->mjdobs), 0, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) {
-            SetValue( this, FormatKey( "MJD-OBS", -1, -1, s, status ),
-                      &val, AST__FLOAT, "Modified Julian Date of observation", status );
-
-/* The format used for the DATE-OBS keyword depends on the value of the
-   keyword. For DATE-OBS < 1999.0, use the old "dd/mm/yy" format.
-   Otherwise, use the new "ccyy-mm-ddThh:mm:ss[.ssss]" format. */
-            palSlaCaldj( 99, 1, 1, &mjd99, &jj );
-            if( val < mjd99 ) {
-      
-               palSlaDjcal( 0, val, iymdf, &jj );
-               sprintf( combuf, "%2.2d/%2.2d/%2.2d", iymdf[ 2 ], iymdf[ 1 ], 
-                        iymdf[ 0 ] - ( ( iymdf[ 0 ] > 1999 ) ? 2000 : 1900 ) ); 
-      
-            } else {
-      
-               palSlaDjcl( val, iymdf, iymdf+1, iymdf+2, &fd, &jj );
-               palSlaDd2tf( 3, fd, sign, ihmsf );
-               sprintf( combuf, "%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d.%3.3d",
-                        iymdf[0], iymdf[1], iymdf[2], ihmsf[0], ihmsf[1],
-                        ihmsf[2], ihmsf[3] ); 
-            }
-
-/* Now store the formatted string in the FitsChan. */
-            cval = combuf;
-            SetValue( this, "DATE-OBS", (void *) &cval, AST__STRING,
-                      "Date of observation", status );
-         }
-
-         val = GetItem( &(store->mjdavg), 0, 0, ' ', NULL, method, class, status );
-         if( val != AST__BAD ) SetValue( this, "MJD-AVG", &val, AST__FLOAT, 
-                                         "Average Modified Julian Date of observation", status );
-      }
-
-/* Projection parameters */
-      maxm = GetMaxJM( &(store->pv), s, status );
-      for( i = 0; i < nwcs; i++ ){
-         for( m = 0; m <= maxm; m++ ){
-            val = GetItem( &(store->pv), i, m, s, NULL, method, class, status );
-            if( val != AST__BAD ) {
-               SetValue( this, FormatKey( parprefix, i + 1, m, s, status ), &val, 
-                         AST__FLOAT, "Projection parameter", status );
-            }
-         }
-      }
-
-/* Keywords specific to celestial axes... */
-
-/* Get and save RADESYS. This is NOT required, so do not return if it is 
-   not available. */
-      cval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-      if( cval ) SetValue( this, FormatKey( "RADESYS", -1, -1, s, status ), &cval, 
-                           AST__STRING, "Reference frame for RA/DEC values", status );
-
-/* Reference equinox */
-      val = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "EQUINOX", -1, -1, s, status ),
-                                      &val, AST__FLOAT, 
-                                      "[yr] Epoch of reference equinox", status );
-
-/* Latitude of native north pole */
-      val = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "LATPOLE", -1, -1, s, status ),
-                                      &val, AST__FLOAT, 
-                                      "[deg] Latitude of native north pole", status );
-/* Longitude of native north pole */
-      val = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "LONPOLE", -1, -1, s, status ),
-                                      &val, AST__FLOAT, 
-                                      "[deg] Longitude of native north pole", status );
-
-/* Keywords specific to spectral axes... */
-
-/* SPECSYS - the standard of rest for the spectral axis */
-      cval = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
-      if( cval ) SetValue( this, FormatKey( "SPECSYS", -1, -1, s, status ), &cval, 
-                           AST__STRING, "Standard of rest for spectral axis", status );
-
-/* SSYSSRC - the standard of rest in which ZSOURCE is stored. */
-      cval = GetItemC( &(store->ssyssrc), 0, s, NULL, method, class, status );
-      if( cval ) SetValue( this, FormatKey( "SSYSSRC", -1, -1, s, status ), &cval, 
-                           AST__STRING, "Standard of rest for source redshift", status );
-
-/* ZSOURCE - topocentric optical velocity of source */
-      val = GetItem( &(store->zsource), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "ZSOURCE", -1, -1, s, status ),
-                                      &val, AST__FLOAT, "[] Redshift of source", status );
-
-/* VELOSYS - topocentric apparent radial velocity of the standard of rest. */
-      val = GetItem( &(store->velosys), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "VELOSYS", -1, -1, s, status ),
-                                      &val, AST__FLOAT, "[m/s] Topo. apparent velocity of rest frame", status );
-
-/* RESTFRQ - rest frequency */
-      val = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "RESTFRQ", -1, -1, s, status ),
-                                      &val, AST__FLOAT, "[Hz] Rest frequency", status );
-
-/* RESTWAV - rest wavelength */
-      val = GetItem( &(store->restwav), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) SetValue( this, FormatKey( "RESTWAV", -1, -1, s, status ),
-                                      &val, AST__FLOAT, "[m] Rest wavelength", status );
-
-/* The image frequency corresponding to the rest frequency (only used for
-   double sideband data). This is not part of the FITS-WCS standard but
-   is added for the benefit of JACH. */
-      val = GetItem( &(store->imagfreq), 0, 0, s, NULL, method, class, status );
-      if( val != AST__BAD ) {
-         SetValue( this, "IMAGFREQ", &val, AST__FLOAT, "[Hz] Image frequency", status );
-      }      
-
-/* OBSGEO-X/Y/Z - observer's geocentric coords. Note, these always refer
-   to the primary axes. */
-      if( s == ' ' ) {
-         val = GetItem( &(store->obsgeox), 0, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) SetValue( this, "OBSGEO-X", &val, AST__FLOAT, "[m] Observatory geocentric X", status );
-         val = GetItem( &(store->obsgeoy), 0, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) SetValue( this, "OBSGEO-Y", &val, AST__FLOAT, "[m] Observatory geocentric Y", status );
-         val = GetItem( &(store->obsgeoz), 0, 0, s, NULL, method, class, status );
-         if( val != AST__BAD ) SetValue( this, "OBSGEO-Z", &val, AST__FLOAT, "[m] Observatory geocentric Z", status );
-      }
-
-/* See if a Frame was sucessfully written to the FitsChan. */
-next:
-      ok = ok && astOK;
-
-/* If so, indicate we have something to return. */
-      if( ok ) ret = 1;
-
-/* If we are producing secondary axes, clear any error status so we can 
-   continue to produce the next Frame. Retain the error if the primary axes 
-   could not be produced. After the primary axes, do the A axes. */
-      if( s != ' ' ) {
-         astClearStatus;
-      } else {
-         s = 'A' - 1;
-      }
-
-/* Remove the secondary "new" flags from the FitsChan. This flag is
-   associated with cards which have been added to the FitsChan during
-   this pass through the main loop in this function. If the Frame was
-   written out succesfully, just clear the flags. If anything went wrong
-   with this Frame, remove the flagged cards from the FitsChan. */
-      FixNew( this, NEW2, !ok, method, class, status );
-
-/* Set the current card so that it points to the last WCS-related keyword
-   in the FitsChan (whether previously read or not). */
-      FindWcs( this, 1, 1, 0, method, class, status );
-   }
-
-/* Return zero or ret depending on whether an error has occurred. */
-   return astOK ? ret : 0;
-}
-
-static AstMapping *WcsIntWorld( AstFitsChan *this, FitsStore *store, char s, 
-                                int naxes, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsIntWorld
-
-*  Purpose:
-*     Create a Mapping from pixel coords to intermediate world coords.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *WcsIntWorld( AstFitsChan *this, FitsStore *store, char s, 
-*                              int naxes, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function interprets the contents of the supplied FitsStore
-*     structure, and creates a Mapping which describes the transformation 
-*     from pixel coordinates to intermediate world coordinates, using the 
-*     FITS World Coordinate System conventions. This is a general linear
-*     transformation described by the CRPIXj, PCi_j and CDELTi keywords.
-
-*  Parameters:
-*     this
-*        The FitsChan. ASTWARN cards may be added to this FitsChan if any
-*        anomalies are found in the keyword values in the FitsStore.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     naxes
-*        The number of intermediate world coordinate axes (WCSAXES).
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
-   AstMapping   *mapd1;      /* Pointer to first distortion Mapping */
-   AstMapping   *mapd2;      /* Pointer to second distortion Mapping */
-   AstMapping   *mapd3;      /* Pointer to third distortion Mapping */
-   AstMapping   *mapd4;      /* Pointer to fourth distortion Mapping */
-   AstMapping   *map0;       /* Pointer to a Mapping */
-   AstMapping   *map1;       /* Pointer to a Mapping */
-   AstMapping   *ret;        /* Pointer to the returned Mapping */
-
-/* Initialise the pointer to the returned Mapping. */
-   ret = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return ret;
-
-/* First of all, check the CTYPE keywords to see if they contain any known
-   distortion codes (following the syntax described in FITS-WCS paper IV). 
-   If so, Mappings are returned which represents the distortions to be
-   applied at each point in the chain of Mappings produced by this function. 
-   Any distortion codes are removed from the CTYPE values in the FitsStore. */
-   DistortMaps( this, store, s, naxes, &mapd1, &mapd2, &mapd3, &mapd4, method, 
-                class, status );
-
-/* If distortion is to be applied now, initialise the returned Mapping to
-   be the distortion. */
-   if( mapd1 ) ret = mapd1;
-
-/* Try to create a WinMap which translates the pixel coordinates so
-   that they are refered to an origin at the reference pixel. This
-   subtracts the value of CRPIXi from axis i. */
-   map1 = (AstMapping *) WcsShift( store, s, naxes, method, class, status );
-
-/* Combine this with any previous Mapping. */
-   if( ret ) {
-      map0 = (AstMapping *) astCmpMap( ret, map1, 1, "", status );
-      ret = astAnnul( ret );
-      map1 = astAnnul( map1 );
-      ret = map0;
-   } else {
-      ret = map1;
-   }
-   
-/* If distortion is to be applied now, combine the two Mappings. */
-   if( mapd2 ) {
-      map0 = (AstMapping *) astCmpMap( ret, mapd2, 1, "", status );
-      ret = astAnnul( ret );
-      mapd2 = astAnnul( mapd2 );
-      ret = map0;
-   }
-
-/* Now try to create a MatrixMap to implement the PC matrix. Combine it
-   with the above Mapping.  */
-   map1 = (AstMapping *) WcsPCMatrix( store, s, naxes, method, class, status );
-   map0 = (AstMapping *) astCmpMap( ret, map1, 1, "", status );
-   ret = astAnnul( ret );
-   map1 = astAnnul( map1 );
-   ret = map0;
-
-/* If distortion is to be applied now, combine the two Mappings. */
-   if( mapd3 ) {
-      map0 = (AstMapping *) astCmpMap( ret, mapd3, 1, "", status );
-      ret = astAnnul( ret );
-      mapd3 = astAnnul( mapd3 );
-      ret = map0;
-   }
-
-/* Now try to create a diagonal MatrixMap to implement the CDELT scaling.
-   Combine it with the above Mapping.  */
-   map1 = (AstMapping *) WcsCDeltMatrix( store, s, naxes, method, class, status );
-   map0 = (AstMapping *) astCmpMap( ret, map1, 1, "", status );
-   ret = astAnnul( ret );
-   map1 = astAnnul( map1 );
-   ret = map0;
-
-/* If distortion is to be applied now, combine the two Mappings. */
-   if( mapd4 ) {
-      map0 = (AstMapping *) astCmpMap( ret, mapd4, 1, "", status );
-      ret = astAnnul( ret );
-      mapd4 = astAnnul( mapd4 );
-      ret = map0;
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static AstMapping *WcsMapFrm( AstFitsChan *this, FitsStore *store, char s, 
-                              AstFrame **frm, const char *method, 
-                              const char *class, int *status ){
-/*
-*  Name:
-*     WcsMapFrm
-
-*  Purpose:
-*     Create a Mapping and Frame for the WCS transformations described in a 
-*     FITS header.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *WcsMapFrm( AstFitsChan *this, FitsStore *store, char s, 
-*                            AstFrame **frm, const char *method, 
-*                            const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function interprets the contents of the supplied FitsStore
-*     structure, and creates a Mapping which describes the transformation 
-*     from pixel coordinates to world coordinates, using the FITS World 
-*     Coordinate System conventions. It also creates a Frame describing
-*     the world coordinate axes.
-
-*  Parameters:
-*     this
-*        The FitsChan.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     frm
-*        The address of a location at which to store a pointer to the
-*        Frame describing the world coordinate axes. If the Iwc attribute
-*        is non-zero, then this is actually a FrameSet in which the current 
-*        Frame is the required WCS system. The FrameSet also contains one 
-*        other Frame which defines the FITS IWC system.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
-   AstFrame *iwcfrm;         /* Frame defining IWC system */
-   AstFrameSet *fs;          /* Pointer to returned FrameSet */
-   AstMapping *map1;         /* Pointer to a Mapping */
-   AstMapping *map2;         /* Pointer to a Mapping */
-   AstMapping *map3;         /* Pointer to a Mapping */
-   AstMapping *map4;         /* Pointer to a Mapping */
-   AstMapping *map5;         /* Pointer to a Mapping */
-   AstMapping *map6;         /* Pointer to a Mapping */
-   AstMapping *map7;         /* Pointer to a Mapping */
-   AstMapping *map8;         /* Pointer to a Mapping */
-   AstMapping *map9;         /* Pointer to a Mapping */
-   AstMapping *ret;          /* Pointer to the returned Mapping */
-   AstSkyFrame *reffrm;      /* SkyFrame defining reflon and reflat */
-   char iwc[5];              /* Domain name for IWC Frame */
-   char id[2];               /* ID string for returned Frame */
-   const char *cc;           /* Pointer to Domain */
-   double dut1;              /* UT1-UTC correction in days */
-   double dval;              /* Temporary double value */
-   double reflat;            /* Reference celestial latitude */
-   double reflon;            /* Reference celestial longitude */
-   int wcsaxes;              /* Number of physical axes */
-
-/* Initialise the pointer to the returned Mapping. */
-   ret = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return ret;
-
-/* Obtain the number of physical axes in the header. If the WCSAXES header 
-   was specified, use it. Otherwise assume it is the same as the number
-   of pixel axes. */
-   dval = GetItem( &(store->wcsaxes), 0, 0, s, NULL, method, class, status );
-   if( dval != AST__BAD ) {
-      wcsaxes = (int) dval + 0.5;
-   } else {
-      wcsaxes = store->naxis;
-   }
-
-/* Create a simple Frame to represent IWC coords. */
-   iwcfrm = astFrame( wcsaxes, "Title=FITS Intermediate World Coordinates", status );
-   strcpy( iwc, "IWC" );
-   iwc[ 3 ]= s;  
-   iwc[ 4 ]= 0;  
-   astSetDomain( iwcfrm, iwc );
-
-/* Create a simple Frame which will be used as the initial representation
-   for the physical axes. This Frame will be changed later (or possibly
-   replaced by a Frame of another class) when we know what type of
-   physical axes we are dealing with. Set its Domain to "AST_FITSCHAN"
-   This value is used to identify axes which have not been changed,
-   and will be replaced before returning the final FrameSet. */
-   *frm = astFrame( wcsaxes, "Domain=AST_FITSCHAN", status );
-
-/* Store the coordinate version character as the Ident attribute for the 
-   returned Frame. */
-   id[ 0 ] = s;
-   id[ 1 ] = 0;
-   astSetIdent( *frm, id );
-
-/* Create a Mapping which goes from pixel coordinates to what FITS-WCS
-   paper I calls "intermediate world coordinates". This stage is the same
-   for all axes. It uses the CRPIXj, PCi_j and CDELTi headers (and
-   distortion codes form the CTYPE keywords). */
-   map1 = WcsIntWorld( this, store, s, wcsaxes, method, class, status );
-
-/* Add a Warning if this mapping cannot be inverted. */
-   if( !astGetTranInverse( map1 ) ) {
-      Warn( this, "badmat", "The pixel rotation matrix in the original FITS "
-            "header (specified by CD or PC keywords) could not be inverted. "
-            "This may be because the matrix contains rows or columns which "
-            "are entirely zero.", method, class, status );
-   }
-
-/* The conversion from intermediate world coordinates to the final world
-   coordinates depends on the type of axis being converted (as specified
-   by its CTYPE keyword). Check for each type of axis for which known
-   conventions exist... */
-   
-/* Celestial coordinate axes. The following call returns a Mapping which
-   transforms any celestial coordinate axes from intermediate world
-   coordinates to the final celestial coordinates. Other axes are left
-   unchanged by the Mapping. It also modifies the Frame so that a
-   SkyFrame is used to describe the celestial axes. */
-   map2 = WcsCelestial( this, store, s, frm, iwcfrm, &reflon, &reflat, 
-                        &reffrm, method, class, status );
-
-/* Spectral coordinate axes. The following call returns a Mapping which
-   transforms any spectral coordinate axes from intermediate world
-   coordinates to the final spectral coordinates. Other axes are left
-   unchanged by the Mapping. It also modifies the Frame so that a
-   SpecFrame is used to describe the spectral axes. */
-   map3 = WcsSpectral( this, store, s, frm, iwcfrm, reflon, reflat, reffrm,
-                       method, class, status );
-
-/* Any axes which were not recognized by the above calls are assumed to
-   be linear. Create a Mapping which adds on the reference value for such
-   axes, and modify the Frame to desribe the axes. */
-   map4 = WcsOthers( this, store, s, frm, iwcfrm, method, class, status );
-
-/* If the Frame still has the Domain "AST_FITSCHAN", clear it. */
-   cc = astGetDomain( *frm );
-   if( cc && !strcmp( cc, "AST_FITSCHAN" ) ) astClearDomain( *frm );
-
-/* Concatenate the Mappings and simplify the result. */
-   map5 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-   map6 = (AstMapping *) astCmpMap( map5, map3, 1, "", status );
-   map7 = (AstMapping *) astCmpMap( map6, map4, 1, "", status );
-   ret = astSimplify( map7 );  
-
-/* Ensure that the coordinate version character is stored as the Ident 
-   attribute for the returned Frame (the above calls may have changed it). */
-   astSetIdent( *frm, id );
-
-/* Set the DUT1 value. Note, the JACH store DUT1 in units of days in their
-   FITS headers, so convert from days to seconds. May need to do somthing
-   about this if the forthcoming FITS-WCS paper 5 (time axes) defines DUT1 
-   to be in seconds. */
-   dut1 = GetItem( &(store->dut1), 0, 0, s, NULL, method, class, status );
-   if( dut1 != AST__BAD ) astSetDut1( *frm, dut1*SPD );
-
-/* The returned Frame is actually a FrameSet in which the current Frame
-   is the required WCS Frame. The FrameSet contains one other Frame,
-   which is the Frame representing IWC. Create a FrameSet containing these
-   two Frames. */
-   if( astGetIwc( this ) ) {
-      fs = astFrameSet( iwcfrm, "", status );
-      astInvert( map1 );
-      map8 = (AstMapping *) astCmpMap( map1, ret, 1, "", status );
-      astInvert( map1 );
-      map9 = astSimplify( map8 );
-      astAddFrame( fs, AST__BASE, map9, *frm );
-
-/* Return this FrameSet instead of the Frame. */
-      *frm = astAnnul( *frm );
-      *frm = (AstFrame *) fs;
-
-/* Free resources */
-      map8 = astAnnul( map8 );
-      map9 = astAnnul( map9 );
-
-   }
-
-/* Annull temporary resources. */
-   if( reffrm ) reffrm = astAnnul( reffrm );
-   iwcfrm = astAnnul( iwcfrm );
-   map1 = astAnnul( map1 );
-   map2 = astAnnul( map2 );
-   map3 = astAnnul( map3 );
-   map4 = astAnnul( map4 );
-   map5 = astAnnul( map5 );
-   map6 = astAnnul( map6 );
-   map7 = astAnnul( map7 );
-
-/* Return the result. */
-   return ret;
-}
-
-static AstMatrixMap *WcsPCMatrix( FitsStore *store, char s, int naxes, 
-                                  const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsPCMatrix
-
-*  Purpose:
-*     Create a MatrixMap representing the PC matrix.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMatrixMap *WcsPCMatrix( FitsStore *store, char s, int naxes,
-*                                const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A MatrixMap representing the FITS "PC" matrix is returned.
-
-*  Parameters:
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        A character s identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     naxes
-*        The number of intermediate world coordinate axes (WCSAXES).
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the created MatrixMap or a NULL pointer if an 
-*     error occurred.
-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *new;       /* The created MatrixMap */
-   double *el;              /* Pointer to next matrix element */
-   double *mat;             /* Pointer to matrix array */
-   int i;                   /* Pixel axis index */
-   int j;                   /* Intermediate axis index. */
-
-/* Initialise/ */
-   new = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Allocate memory for the matrix. */
-   mat = (double *) astMalloc( sizeof(double)*naxes*naxes );
-   if( astOK ){
-
-/* Fill the matrix with values from the FitsStore. */
-      el = mat;
-      for( i = 0; i < naxes; i++ ){
-         for( j = 0; j < naxes; j++ ){
-
-/* Get the PCj_i value for this axis. Missing terms can be defaulted so
-   do not report an error if the required value is not present in the 
-   FitsStore. */
-            *el = GetItem( &(store->pc), i, j, s, NULL, method, class, status );
-
-/* Diagonal terms default to to 1.0, off-diagonal to zero. */
-            if( *el == AST__BAD ) *el = ( i == j ) ? 1.0: 0.0;
-
-/* Move on to the next matrix element. */
-            el++;
-         }
-      }
-
-/* Create the matrix. */
-      new = astMatrixMap( naxes, naxes, 0, mat, "", status );
-
-/* Report an error if the inverse transformation is undefined. */
-      if( !astGetTranInverse( new ) && astOK ) {
-        astError( AST__BDFTS, "%s(%s): Unusable rotation matrix (PC or CD) found "
-                  "in the FITS-WCS header - the matrix cannot be inverted.", status, method, class );
-      }
-
-/* Release the memory used to hold the matrix. */
-      mat = (double *) astFree( (void *) mat );
-
-   }
-
-/* If an error has occurred, attempt to annul the returned MatrixMap. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the MatrixMap. */
-   return new;
-
-}
-
-static AstMapping *WcsNative( AstFitsChan *this, FitsStore *store, char s, 
-                              AstWcsMap *wcsmap, int fits_ilon, int fits_ilat,
-                              const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsNative
-
-*  Purpose:
-*     Create a CmpMap which transforms Native Spherical Coords to
-*     Celestial Coords.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *WcsNative( AstFitsChan *this, FitsStore *store, char s, 
-*                            AstWcsMap *wcsmap, int fits_ilon, int fits_ilat,
-*                            const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A CmpMap is created which rotates the supplied Native Spherical Coords
-*     into Celestial Coords in the standard system specified by the CTYPE 
-*     keywords. Any non-celestial axes are left unchanged.
-*
-*     At the highest level, the returned CmpMap is made up of the following 
-*     Mappings in series (if celestial long/lat axes are present):
-*        1 - A PermMap which rearranges the axes so that the longitude axis is
-*            axis 0, the latitude axis is axis 1, and all other axes are
-*            stored at higher indices, starting at axis 2.
-*        2 - A CmpMap which converts the values on axes 0 and 1 from Native
-*            Spherical to Celestial coordinates, leaving all other axes 
-*            unchanged.
-*        3 - A PermMap which rearranges the axes to put the longitude and 
-*            latitude axes back in their original places. This is just the 
-*            inverse of the PermMap used at stage 1 above.
-*
-*     The CmpMap used at stage 2 above, is made up of two Mappings in 
-*     parallel:
-*         4 - A CmpMap which maps axes 0 and 1 from Native Spherical to
-*             Celestial coordinates.
-*         5 - A UnitMap which passes on the values to axes 2, 3, etc,
-*             without change.
-*
-*     The CmpMap used at stage 4 above, is made up of the following Mappings
-*     in series:
-*         6 - A SphMap which converts the supplied spherical coordinates into
-*             Cartesian Coordinates.
-*         7 - A MatrixMap which rotates the Cartesian coordinates from the 
-*             Native to the Celestial system.
-*         8 - A SphMap which converts the resulting Cartesian coordinates back
-*             to spherical coordinates.
-
-*  Parameters:
-*     this
-*        The FitsChan in which to store any warning cards. If NULL, no
-*        warnings are stored.
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        Co-ordinate version character to use (space means primary axes).
-*     wcsmap 
-*        A mapping describing the deprojection which is being used. This is 
-*        needed in order to be able to locate the fiducial point within the
-*        Native Speherical Coordinate system, since it varies from projection
-*        to projection.
-*     fits_ilon
-*        The zero-based FITS WCS axis index corresponding to celestial
-*        longitude (i.e. one less than the value of "i" in the keyword 
-*        names "CTYPEi", "CRVALi", etc). If -1 is supplied, the index of
-*        the longitude axis in the supplied WcsMap is used.
-*     fits_ilat
-*        The zero-based FITS WCS axis index corresponding to celestial
-*        latitude (i.e. one less than the value of "i" in the keyword 
-*        names "CTYPEi", "CRVALi", etc). If -1 is supplied, the index of
-*        the latitude axis in the supplied WcsMap is used.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the created CmpMap or a NULL pointer if an error occurred.
-
-*  Notes:
-*     -  The local variable names correspond to the notation in the papers
-*     by Greisen & Calabretta describing the FITS WCS system.
-
-*/
-
-/* Local Variables: */
-   AstCmpMap *cmpmap;         /* A CmpMap */
-   AstMapping *new;           /* The returned CmpMap */
-   AstMatrixMap *matmap2;     /* Another MatrixMap */
-   AstMatrixMap *matmap;      /* A MatrixMap */
-   AstPermMap *permmap;       /* A PermMap */
-   AstSphMap *sphmap;         /* A SphMap */
-   AstUnitMap *unitmap;       /* A UnitMap */
-   char buf[150];             /* Message buffer */
-   double alpha0;             /* Long. of fiduaicl point in standard system */
-   double alphap;             /* Long. of native nth pole in standard system */
-   double axis[3];            /* Vector giving the axis of rotation */
-   double delta0;             /* Lat. of fiducial point in standard system */
-   double deltap;             /* Lat. of native nth pole in standard system */
-   double latpole;            /* Lat. of native nth pole in standard system if deltap undefined */
-   double phip;               /* Long. of standard nth pole in native system */
-   double phi0;               /* Native longitude at fiducial point */
-   double theta0;             /* Native latitude at fiducial point */
-   int *inperm;               /* Pointer to array of output axis indices */
-   int *outperm;              /* Pointer to array of input axis indices */
-   int axlat;                 /* Index of latitude physical axis */
-   int axlon;                 /* Index of longitude physical axis */
-   int i;                     /* Loop count */
-   int nax_rem;               /* No. of non-astrometric axes */
-   int naxis;                 /* No. of axes. */
-   int new_axlat;             /* Index of lat. physical axis after perming */
-   int tpn;                   /* Is this a TPN projection? */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned CmpMap pointer. */
-   new = NULL;
-
-/* Store the number of axes in a local variable. */
-   naxis = astGetNin( wcsmap );
-
-/* Get the indices of the celestial axes. */
-   axlon = astGetWcsAxis( wcsmap, 0 );
-   axlat = astGetWcsAxis( wcsmap, 1 );
-
-/* If the corresponding FITS axis indices were not supplied, use the
-   WcsMap axes found above. */
-   if( fits_ilon == -1 ) fits_ilon = axlon;
-   if( fits_ilat == -1 ) fits_ilat = axlat;
-
-/* If there is no longitude or latitude axis, or if we have a
-   non-celestial projection, just return a UnitMap. */
-   if( axlon == axlat || astGetWcsType( wcsmap ) == AST__WCSBAD ){
-      new = (AstMapping *) astUnitMap( naxis, "", status );
-
-/* If there is a lon/lat axis pair, create the inperm and outperm arrays
-   which will be needed later to create the PermMap which reorganises
-   the axes so that axis zero is the longitude axis and axis 1 is the
-   latitude axis. */
-   } else {
-
-/* Get storage for the two arrays. */
-      inperm = (int *) astMalloc( sizeof( int )*(size_t)naxis );
-      outperm = (int *) astMalloc( sizeof( int )*(size_t)naxis );
-      if( astOK ){
-
-/* Initialise an array holding the indices of the input axes which are copied 
-   to each output axis. Initially assume that there is no re-arranging of
-   the axes. */
-         for( i = 0; i < naxis; i++ ) outperm[ i ] = i;
-
-/* Swap the longitude axis and axis 0. */
-         i = outperm[ axlon ];
-         outperm[ axlon ] = outperm[ 0 ];
-         outperm[ 0 ] = i; 
-
-/* If axis 0 was originally the latitude axis, the latitude axis will now
-   be where the longitude axis was originally (because of the above axis
-   swap). */
-         if( axlat == 0 ) {
-            new_axlat = axlon;         
-         } else {
-            new_axlat = axlat;
-         }
-
-/* Swap the latitude axis and axis 1. */
-         i = outperm[ new_axlat ];
-         outperm[ new_axlat ] = outperm[ 1 ];
-         outperm[ 1 ] = i;
-
-/* Create the array holding the output axis index corresponding to 
-   each input axis. */
-         for( i = 0; i < naxis; i++ ) inperm[ outperm[ i ] ] = i;
-
-      }
-
-/* Store the latitude and longitude (in the standard system) of the fiducial
-   point, in radians. */
-      delta0 = GetItem( &(store->crval), fits_ilat, 0, s, NULL, method, class, status );
-      if( delta0 == AST__BAD ) delta0 = 0.0;
-      delta0 *= AST__DD2R;
-
-      alpha0 = GetItem( &(store->crval), fits_ilon, 0, s, NULL, method, class, status );
-      if( alpha0 == AST__BAD ) alpha0 = 0.0;
-      alpha0 *= AST__DD2R;
-
-/* Limit the latitude to the range +/- PI/2, issuing a warning if the
-   supplied CRVAL value is outside this range. The "alphap" variable is used 
-   as workspace here. */
-      alphap = palSlaDrange( delta0 );  
-      delta0 = alphap;
-      if ( delta0 > AST__DPIBY2 ){
-         delta0 = AST__DPIBY2;
-      } else if ( delta0 < -AST__DPIBY2 ){
-         delta0 = -AST__DPIBY2;
-      }
-      if( alphap != delta0 ) {
-         sprintf( buf, "The original FITS header specified a fiducial "
-                  "point with latitude %.*g. A value of %.*g is being used "
-                  "instead. ", DBL_DIG, alphap*AST__DR2D, DBL_DIG, 
-                  delta0*AST__DR2D );
-         Warn( this, "badlat", buf, method, class, status );
-      }
-
-/* Set a flag indicating if we have a TPN projection. The handling or
-   projection parameters  is different for TPN projections.  */
-      tpn = ( astGetWcsType( wcsmap ) == AST__TPN );
-
-/* Store the radian values of the FITS keywords LONPOLE and LATPOLE. Defaults
-   will be used if either of these items was not supplied. These keyword
-   values may be stored in projection parameters PVi_3a and PVi_4a for 
-   longitude axis "i" - in which case the "PV" values take precedence over
-   the "LONPOLE" and "LATPOLE" values. Do not do this for TPN projections
-   since they use these projection parameters to specify correcton terms. */
-      if( astTestPV( wcsmap, axlon, 3 ) && !tpn ) {
-         phip = astGetPV( wcsmap, axlon, 3 );
-      } else {
-         phip = GetItem( &(store->lonpole), 0, 0, s, NULL, method, class, status );
-         if( phip != AST__BAD && !tpn ) astSetPV( wcsmap, axlon, 3, phip );
-      }
-      if( phip != AST__BAD ) phip *= AST__DD2R;
-
-      if( astTestPV( wcsmap, axlon, 4 ) && !tpn ) {
-         latpole = astGetPV( wcsmap, axlon, 4 );
-      } else {
-         latpole = GetItem( &(store->latpole), 0, 0, s, NULL, method, class, status );
-         if( latpole != AST__BAD && !tpn ) astSetPV( wcsmap, axlon, 4, latpole );
-      }
-      if( latpole != AST__BAD ) latpole *= AST__DD2R;
-
-/* Find the standard Celestial Coordinates of the north pole of the Native
-   Spherical Coordinate system. Report an error if the position was not
-   defined. */
-      if( !WcsNatPole( this, wcsmap, alpha0, delta0, latpole, &phip, &alphap, 
-                       &deltap, status ) && astOK ){
-         astError( AST__BDFTS, "%s(%s): Conversion from FITS WCS native "
-                   "coordinates to celestial coordinates is ill-conditioned.", status,
-                   method, class );
-      }
-
-/* Create the SphMap which converts spherical coordinates to Cartesian
-   coordinates (stage 6 in the prologue). This asumes that axis 0 is the 
-   longitude axis, and axis 1 is the latitude axis. This will be ensured
-   by a PermMap created later. Indicate that the SphMap will only be used 
-   to transform points on a unit sphere. This enables a forward SphMap
-   to be combined with an inverse SphMap into a UnitMap, and thus aids
-   simplification. */
-      sphmap = astSphMap( "UnitRadius=1", status );
-      astInvert( sphmap );
-
-/* Set the PolarLong attribute of the SphMap so that a longitude of phi0 (the 
-   native longitude of the fiducial point) is returned by the inverse
-   transformation (cartesian->spherical) at either pole. */
-      GetFiducialNSC( wcsmap, &phi0, &theta0, status );
-      astSetPolarLong( sphmap, phi0 );
-
-/* Create a unit MatrixMap to be the basis of the MatrixMap which rotates
-   Native Spherical Coords to Celestial Coords (stage 7 in the prologue). */
-      matmap = astMatrixMap( 3, 3, 2, NULL, "", status );
-
-/* Modify the above MatrixMap so that it rotates the Cartesian position vectors
-   by -phip (i.e. LONPOLE) about the Z axis. This puts the north pole of the 
-   standard system at zero longitude in the rotated system. Then annul the 
-   original MatrixMap and use the new one instead. */
-      axis[ 0 ] = 0;
-      axis[ 1 ] = 0;
-      axis[ 2 ] = 1;
-      matmap2 = astMtrRot( matmap, -phip, axis );
-      matmap = astAnnul( matmap );
-      matmap = matmap2;
-
-/* Now modify the above MatrixMap so that it rotates the Cartesian position
-   vectors by -(PI/2-deltap) about the Y axis. This puts the north pole of 
-   the standard system as 90 degrees latitude in the rotated system. Then annul
-   the original MatrixMap and use the new one instead. */
-      axis[ 0 ] = 0;
-      axis[ 1 ] = 1;
-      axis[ 2 ] = 0;
-      matmap2 = astMtrRot( matmap, deltap - AST__DPIBY2, axis );
-      matmap = astAnnul( matmap );
-      matmap = matmap2;
-
-/* Finally modify the above MatrixMap so that it rotates the Cartesian position
-   vectors (PI+alphap) about the Z axis. This puts the primary meridian of the 
-   standard system at zero longitude in the rotated system. This results in the 
-   rotated system being coincident with the standard system. */
-      axis[ 0 ] = 0;
-      axis[ 1 ] = 0;
-      axis[ 2 ] = 1;
-      matmap2 = astMtrRot( matmap, AST__DPI + alphap, axis );
-      matmap = astAnnul( matmap );
-      matmap = matmap2;
-
-/* Combine the SphMap (stage 6) and MatrixMap (stage 7) in series. */
-      cmpmap = astCmpMap( sphmap, matmap, 1, "", status );
-      sphmap = astAnnul( sphmap );
-      matmap = astAnnul( matmap );   
-
-/* Create a new SphMap which converts Cartesian coordinates to spherical 
-   coordinates (stage 8 in the prologue). Indicate that the SphMap will 
-   only be used to transform points on a unit sphere. */
-      sphmap = astSphMap( "UnitRadius=1", status );
-
-/* Set the PolarLong attribute of the SphMap so that a longitude of alpha0 
-   (the celestial longitude of the fiducial point) is returned by the
-   forward transformation (cartesian->spherical) at either pole. */
-      astSetPolarLong( sphmap, alpha0 );
-
-/* Add it to the compound mapping. The CmpMap then corresponds to stage 4
-   in the prologue. Annul the constituent mappings. */
-      new = (AstMapping *) astCmpMap( cmpmap, sphmap, 1, "", status );
-      cmpmap = astAnnul( cmpmap );   
-      sphmap = astAnnul( sphmap );   
-
-/* If there are any remaining axes (i.e. axes which do not describe a 
-   Celestial coordinate system), create a UnitMap which passes on their
-   values unchanged (stage 5 in the prologue), and add it the CmpMap, 
-   putting it in parallel with the earlier mappings. The resulting CmpMap 
-   then corresponds to stage 2 in the prologue. Note, the axis numbering 
-   used by this UnitMap needs to take account of the fact that it is only 
-   applied to the non-celestial axes. The axes are re-ordered by the 
-   PermMap described at stage 1 in the prologue. */
-      nax_rem = naxis - 2;
-      if( nax_rem > 0 ){
-         unitmap = astUnitMap( nax_rem, "", status );
-         cmpmap = astCmpMap( new, unitmap, 0, "", status );
-         new = astAnnul( new );
-         unitmap = astAnnul( unitmap );
-         new = (AstMapping *) cmpmap;   
-      }
-
-/* Now we need to ensure that axes 0 and 1 correspond to longitude and 
-   latitude. If this is already the case, then the CmpMap can be returned
-   as it is. Otherwise, a PermMap needs to be created to rearrange the
-   axes. */
-      if( axlon != 0 || axlat != 1 ){
-
-/* Create the PermMap using the inperm and outperm arrays created earlier. 
-   This is the mapping described as stage 1 in the prologue. */
-         permmap = astPermMap( naxis, inperm, naxis, outperm, NULL, "", status );
-
-/* Compound this PermMap and the CmpMap corresponding to stage 2 (created
-   earlier) in series. */
-         cmpmap = astCmpMap( permmap, new, 1, "", status );         
-         new = astAnnul( new );
-         new = (AstMapping *) cmpmap; 
-
-/* Now invert the PermMap, so that it re-arranges the axes back into
-   their original order. This is the mapping described as stage 3 in
-   the prologue. */
-         astInvert( permmap );
-
-/* And finally.... add this inverted PermMap onto the end of the CmpMap. */         
-         cmpmap = astCmpMap( new, permmap, 1, "", status );
-         permmap = astAnnul( permmap );
-         new = astAnnul( new );
-         new = (AstMapping *) cmpmap; 
-      }
-      
-/* Free the temporary arrays. */
-      inperm = (int *) astFree( (void *) inperm );
-      outperm = (int *) astFree( (void *) outperm );
-   }
-   
-/* If an error has occurred, attempt to annul the new CmpMap. */
-   if( !astOK ) new = astAnnul( new );
-   
-/* Return the CmpMap. */
-   return new;
-
-}
-
-static int WcsNatPole( AstFitsChan *this, AstWcsMap *wcsmap, double alpha0, 
-                       double delta0, double latpole, double *phip, 
-                       double *alphap, double *deltap, int *status ){
-/*
-*  Name:
-*     WcsNatPole
-
-*  Purpose:
-*     Find the celestial coordinates of the north pole of the Native Spherical
-*     Coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int WcsNatPole( AstFitsChan *this, AstWcsMap *wcsmap, double alpha0, 
-*                     double delta0, double latpole, double *phip, 
-*                     double *alphap, double *deltap, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     The supplied WcsMap converts projected positions given in
-*     "Projection Plane Coords" to positions in the "Native Spherical 
-*     Coordinate" system. This function finds the pole of this spherical
-*     coordinate system in terms of the standard celestial coordinate 
-*     system to which the CRVALi, LONPOLE and LATPOLE keywords refer (this
-*     system should be identified by characters 5-8 of the CTYPEi 
-*     keywords). It also supplies a default value for LONPOLE if no value
-*     has been supplied explicitly in the FITS header.
-*
-*     This function implements equations 8, 9 and 10 from the FITS-WCS paper
-*     II by Calabretta & Greisen (plus the associated treatment of special 
-*     cases). The paper provides more detailed documentation for the 
-*     mathematics implemented by this function.
-
-*  Parameters:
-*     this
-*        The FitsChan in which to store any warning cards. If NULL, no
-*        warnings are stored.
-*     wcsmap 
-*        A mapping describing the deprojection being used (i.e. the
-*        mapping from Projection Plane Coords to Native Spherical Coords).
-*     alpha0
-*        The longitude of the fiducial point in the standard celestial 
-*        coordinate frame (in radians). Note, this fiducial point does
-*        not necessarily correspond to the point given by keywords CRPIXj.
-*     delta0
-*        The celestial latitude (radians) of the fiducial point.
-*     latpole
-*        The value of FITS keyword LATPOLE, converted to radians, or the 
-*        symbolic constant AST__BAD if the keyword was not supplied. 
-*     phip
-*        Pointer to a location at which is stored the longitude of the north
-*        pole of the standard Celestial coordinate system, as measured in
-*        the Native Spherical Coordinate system, in radians. This should be
-*        supplied holding the radian equivalent of the value of the FITS 
-*        keyword LONPOLE, or the symbolic constant AST__BAD if the keyword was 
-*        not supplied (in which case a default value will be returned at the
-*        given location).
-*     alphap
-*        Pointer to a location at which to store the calculated longitude
-*        of the Native North Pole, in radians.
-*     deltap
-*        Pointer to a location at which to store the calculated latitude
-*        of the Native North Pole, in radians.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A status: non-zero for success, zero if the position of the native 
-*     north pole is undefined.
-
-*  Notes:
-*     -  Certain combinations of keyword values result in the latitude of
-*     the Native North Pole being undefined. In these cases, a value of 
-*     0 is returned for the function value, but no error is reported.
-*     -  All angular values used by this function are in radians.
-*     -  A value of 0 is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   char buf[150];                  /* Buffer for warning message */
-   double cos_theta0;              /* Cosine of theta0 */
-   double cos_phip;                /* Cosine of (phip - phi0) */
-   double cos_delta0;              /* Cosine of delta0 */
-   double cos_deltap;              /* Cosine of deltap */
-   double deltap_1;                /* First possible value for deltap */
-   double deltap_2;                /* Second possible value for deltap */
-   double sin_theta0;              /* Sine of theta0 */
-   double sin_phip;                /* Sine of (phip - phi0) */
-   double sin_delta0;              /* Sine of delta0 */
-   double sin_deltap;              /* Sine of deltap */
-   double t0, t1, t2, t3, t4;      /* Intermediate values */
-   double phi0, theta0;            /* Native coords of fiducial point */
-
-/* Check the global status. */
-   if ( !astOK ) return 0;
-
-/* Get the longitude and latitude of the fiducial point in the native 
-   spherical coordinate frame (in radians). */
-   GetFiducialNSC( wcsmap, &phi0, &theta0, status );
-
-/* If no value was supplied for the FITS keyword LONPOLE, set up a default 
-   value such that the celestial latitude increases in the same direction
-   as the native latitude at the fiducial; point. */
-   if( *phip == AST__BAD ){
-      if( delta0 >= theta0 ){
-         *phip = 0.0;
-      } else {
-         *phip = AST__DPI;
-      }
-
-/* Issue a warning that a default lonpole value has been adopted. */
-      sprintf( buf, "The original FITS header did not specify the "
-               "longitude of the native north pole. A default value "
-               "of %.8g degrees was assumed.", (*phip)*AST__DR2D );
-      Warn( this, "nolonpole", buf, "astRead", "FitsChan", status );
-
-   }
-
-/* If the fiducial point is coincident with the Native North Pole, then the
-   Native North Pole must have the same coordinates as the fiducial
-   point. Tests for equality include some tolerance to allow for rounding
-   errors. */
-   sin_theta0 = sin( theta0 );
-   if( EQUAL( sin_theta0, 1.0 ) ){
-      *alphap = alpha0;
-      *deltap = delta0;
-
-/* If the fiducial point is concident with the Native South Pole, then the
-   Native North Pole must have the coordinates of the point diametrically 
-   opposite the fiducial point. */
-   } else if( EQUAL( sin_theta0, -1.0 ) ){
-      *alphap = alpha0 + AST__DPI;
-      *deltap = -delta0;
-
-/* For all other cases, go through the procedure described in the WCS paper
-   by Greisen & Calabretta, to find the position of the Native North Pole.
-   First store some useful values. */
-   } else {
-      cos_theta0 = cos( theta0 );
-      cos_delta0 = cos( delta0 );
-      cos_phip = cos( *phip - phi0 );
-      sin_delta0 = sin( delta0 );
-      sin_phip = sin( *phip - phi0 );
-
-/* Next, find the two possible values for the latitude of the Native 
-   North Pole (deltap). If any stage of this transformation is
-   indeterminate, return zero (except for the single special case noted 
-   in item 6 para. 2 of the WCS paper, for which LATPOLE specifies the
-   values to be used). */
-      t0 = cos_theta0*cos_phip;
-      if( fabs( t0 ) < TOL2 && fabs( sin_theta0 ) < TOL2 ){
-         if( latpole != AST__BAD ) {
-            *deltap = latpole;
-         } else {
-            return 0;
-         }
-
-      } else {
-         t1 = atan2( sin_theta0, t0 );
-         t2 = cos_theta0*cos_phip;
-         t2 *= t2;
-         t2 += sin_theta0*sin_theta0;
-         if( t2 <= DBL_MIN ){
-            return 0;
-
-         } else {
-            t3 = sin_delta0/sqrt( t2 );
-            if( fabs( t3 ) > 1.0 + TOL1 ){
-               return 0;
-
-            } else {
-               if( t3 < -1.0 ){
-                  t4 = AST__DPI;
-               } else if( t3 > 1.0 ){
-                  t4 = 0.0;
-               } else {
-                  t4 = acos( t3 );
-               }
-               deltap_1 = palSlaDrange( t1 + t4 );
-               deltap_2 = palSlaDrange( t1 - t4 );
-
-/* Select which of these two values of deltap to use. Values outside the
-   range +/- PI/2 cannot be used. If both values are within this range
-   use the value which is closest to the supplied value of latpole (or
-   use the northern most value if the LATPOLE keyword was not supplied. */
-               if( fabs( deltap_1 ) > AST__DPIBY2 + TOL2 ){
-                  *deltap = deltap_2;
-
-               } else if( fabs( deltap_2 ) > AST__DPIBY2 + TOL2 ){
-                  *deltap = deltap_1;
-
-               } else {
-                  if( latpole != AST__BAD ){
-                     if( fabs( deltap_1 - latpole ) < 
-                         fabs( deltap_2 - latpole ) ){
-                        *deltap = deltap_1;
-                     } else {               
-                        *deltap = deltap_2;
-                     }
-                  } else {
-                     if( deltap_1 > deltap_2 ){
-                        *deltap = deltap_1;
-                     } else {
-                        *deltap = deltap_2;
-                     }
-
-/* Issue a warning that a default latpole value has been adopted. */
-                     sprintf( buf, "The original FITS header did not specify "
-                              "the latitude of the native north pole. A "
-                              "default value of %.8g degrees was assumed.",
-                              (*deltap)*AST__DR2D );
-                     Warn( this, "nolatpole", buf, "astRead", "FitsChan", status );
-
-                  }
-               }
-               if( fabs( *deltap  ) > AST__DPIBY2 + TOL2 ) {
-                  return 0;
-               } else if( *deltap < -AST__DPIBY2 ){
-                  *deltap = -AST__DPIBY2;
-               } else if( *deltap > AST__DPIBY2 ){
-                  *deltap = AST__DPIBY2;
-               }
-            }
-         }
-      }
-
-/* If a valid value for the latitude (deltap) has been found, find the 
-   longitude of the Native North Pole. */
-      if( *deltap != AST__BAD ) {
-         if( fabs( cos_delta0) > TOL2 ){
-            cos_deltap = cos( *deltap );
-            sin_deltap = sin( *deltap );
-            if( fabs( cos_deltap ) > TOL2 ){
-               t1 = sin_phip*cos_theta0/cos_delta0;
-               t2 = ( sin_theta0 - sin_deltap*sin_delta0 )
-                    /( cos_delta0*cos_deltap );
-               if( ( fabs( t1 ) > TOL2 ) || ( fabs( t2 ) > TOL2 ) ){
-                  *alphap = alpha0 - atan2( t1, t2 );
-               } else {
-                  *alphap = alpha0;
-               }
-
-            } else if( sin_deltap > 0.0 ){
-               *alphap = alpha0 + (*phip - phi0) - AST__DPI;
-
-            } else {
-               *alphap = alpha0 - (*phip - phi0);
-            }                         
-
-         } else {
-            *alphap = alpha0;
-         }
-
-      } else {
-         *alphap = AST__BAD;
-      }
-   }
-
-/* Return a success status if valid latitude and longitude values were
-   found. */
-   return (*deltap) != AST__BAD && (*alphap) != AST__BAD ;
-
-}
-
-static AstMapping *WcsOthers( AstFitsChan *this, FitsStore *store, char s, 
-                              AstFrame **frm,  AstFrame *iwcfrm, const char *method, 
-                              const char *class, int *status ){
-/*
-*  Name:
-*     WcsOthers
-
-*  Purpose:
-*     Create a Mapping from intermediate world coords to any axes
-*     which are not covered by specialised conventions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *WcsOthers( AstFitsChan *this, FitsStore *store, char s, 
-*                            AstFrame **frm,  AstFrame *iwcfrm, const char *method, 
-*                            const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function interprets the contents of the supplied FitsStore
-*     structure, looking for world coordinate axes for which no
-*     description has yet been added to the supplied Frame . It is
-*     assumed that any such axes are simple linear axes. It returns a
-*     Mapping which simply adds on the CRVAL values to such axes.
-*     It also modifies the supplied Frame to describe the axes.
-
-*  Parameters:
-*     this
-*        The FitsChan.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     frm
-*        The address of a location at which to store a pointer to the
-*        Frame describing the world coordinate axes.
-*     iwcfrm
-*        A pointer to the Frame describing the intermediate world coordinate 
-*        axes. The properties of this Frame may be changed on exit.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
-   AstFrame *pfrm;           /* Pointer to primary Frame */
-   AstFrame *pfrm2;          /* Pointer to primary Frame */
-   AstMapping *map1;         /* Pointer to a Mapping */
-   AstMapping *map2;         /* Pointer to a Mapping */
-   AstMapping *ret;          /* The returned Mapping */
-   char **comms;             /* Pointer to array of CTYPE commments */
-   char buf[ 100 ];          /* Buffer for textual attribute value */
-   char buf2[ 100 ];         /* Buffer for textual attribute value */
-   char buf3[ 20 ];          /* Buffer for default CTYPE value */
-   char *newdom;             /* Pointer to new Domain value */
-   const char *ckeyval;      /* Pointer to character keyword value */
-   int i;                    /* Axis index */
-   int j;                    /* Axis index */
-   int len;                  /* Used length of string */
-   int naxes;                /* no. of axes in Frame */
-   int nother;               /* The number of "other" axes */
-   int paxis;                /* Primary axis index */
-   int usecom;               /* Use CTYPE comments as axis Labels? */
-
-/* Initialise the pointer to the returned Mapping. */
-   ret = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return ret;
-
-/* Get the number of physical axes. */
-   naxes = astGetNaxes( *frm );
-
-/* Assume we will use CTYPE comments as the axis labels. */
-   usecom = 1;
-
-/* Initialise the count of "other" axes. */
-   nother = 0;
-
-/* Get the comments associated with the CTYPE keywords for all "other"
-   axes. */
-   comms = astMalloc( naxes*sizeof( char * ) );
-   if( comms ) {
-
-/* Loop round all axes in the Frame, and initialise the pointer to its
-   comment. */
-      for( i = 0; i < naxes; i++ ){
-         comms[ i ] = NULL;
-
-/* Get the Domain for the primary frame containing the axis. This will be 
-   "AST_FITSCHAN" if the axis has not yet been recognised (this Domain is
-   set up by WcsMapFrm). Only consider the axis further if the Domain has
-   not been changed. */
-         astPrimaryFrame( *frm, i, &pfrm, &paxis );
-         if( !strcmp( astGetDomain( pfrm ), "AST_FITSCHAN" ) ) {
-
-/* Increment the count of "other" axes. */
-            nother++;
-
-/* Get the comment associated with the CTYPE header. */
-            ckeyval = GetItemC( &(store->ctype_com), i, s, NULL, method, class, status );
-
-/* If this axis has no CTYPE comment, we will use CTYPE values as axis
-   labels (if given, the CNAME keyword take precedence). */
-            if( !ckeyval || astChrLen( ckeyval ) == 0  ) {
-               usecom = 0;
-
-/* If the CTYPE comment for this axis is the same as any other comment, we 
-   will use CTYPE values as axis labels. */
-            } else {
-               for( j = 0; j < nother - 1; j++ ) {
-                  if( comms[ j ]  && !strcmp( ckeyval, comms[ j ] ) ) {
-                     usecom = 0;
-                     break;
-                  }
-               }
-            }
-
-/* If we are still using comments as axis labels, store a copy of it in the 
-   workspace. */
-            if( usecom ) comms[ i ] = astStore( NULL, ckeyval, 
-                                                strlen( ckeyval ) + 1 );
-         }
-         pfrm = astAnnul( pfrm );
-      }
-
-/* Free the workspace holding comments. */
-      for( i = 0; i < naxes; i++ ) comms[ i ] = astFree( comms[ i ] );
-      comms = astFree( comms );
-
-   }
-
-/* If there are no "other" axes, just return a UnitMap. */
-   if( nother == 0 ) {
-      ret = (AstMapping *) astUnitMap( naxes, "", status );
-
-/* Otherwise... */
-   } else {
-
-/* If we have only a single other axis, use CTYPE value instead of
-   comment. */
-      if( nother == 1 ) usecom = 0;
-
-/* Not yet started a new Domain value to replace "AST_FITSCHAN". */
-      newdom = NULL;
-      pfrm2 = NULL;
-
-/* Check each axis of the Frame looking for axes which have not yet been
-   recognised. */
-      for( i = 0; i < naxes; i++ ) {
-
-/* Get the Domain for the primary frame containing the axis. This will be 
-   "AST_FITSCHAN" if the axis has not yet been recognised (this Domain is
-   set up by WcsMapFrm). Only consider the axis further if the Domain has
-   not been changed. */
-         astPrimaryFrame( *frm, i, &pfrm, &paxis );
-         if( !strcmp( astGetDomain( pfrm ), "AST_FITSCHAN" ) ) {
-
-/* Save a pointer to the primary Frame which we will use to set the
-   Domain of the primary Frame. */
-            if( !pfrm2 ) pfrm2 = astClone( pfrm );
-
-/* Get the CTYPE value. Use a default of "AXISn". */
-            ckeyval = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-            if( !ckeyval ) {
-               sprintf( buf3, "AXIS%d", i + 1 );
-               ckeyval = buf3;
-            }
-
-/* If the CTYPE value ends with "-LOG", assume it is a logarithmically spaced 
-   axis. Get the Mapping from IWC to WCS. Reduce the used length of the
-   CTYPE string to exlude any trailing "-LOG" string. */
-            len = strlen( ckeyval );
-            if( len > 3 && !strcmp( ckeyval + len - 4, "-LOG" ) ){
-               map1 = LogWcs( store, i, s, method, class, status );
-               sprintf( buf2, "%.*s", len - 4, ckeyval );
-
-/* Otherwise, assume the axis is linearly spaced. */
-            } else {            
-               map1 = LinearWcs( store, i, s, method, class, status );
-               sprintf( buf2, "%.*s", len, ckeyval );
-            }
-
-/* Append the CTYPE value to the final Domain value for the primary Frame. */
-            if( ckeyval && astChrLen( ckeyval ) > 0 ) {
-               if( newdom ) {
-                  sprintf( buf, "%s-%s", newdom, buf2 );
-               } else {
-                  sprintf( buf, "%s", buf2 );
-                  newdom = buf;
-               }                  
-            }
-
-/* Now modify the axis in the Frame to have appropriate values for the 
-   Unit, Label and Symbol attributes. Also set the Unit attribute for
-   the corresponding axis in the IWC Frame. */
-            if( ckeyval ) astSetSymbol( *frm, i, buf2 );
-
-            ckeyval = GetItemC( &(store->cname), i, s, NULL, method, class, status );
-            if( !ckeyval && usecom ) ckeyval = GetItemC( &(store->ctype_com), 
-                                                   i, s, NULL, method, class, status );
-            if( !ckeyval ) ckeyval = buf2;
-            if( ckeyval ) astSetLabel( *frm, i, ckeyval );
-
-            ckeyval = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-            if( ckeyval ) {
-               astSetUnit( *frm, i, ckeyval );
-               astSetUnit( iwcfrm, i, ckeyval ); 
-            }
-
-/* If this axis has been described by an earlier function (because it
-   uses specialised conventions such as those described in FITS-WCS papers
-   II or III), then create a UnitMap for this axis. */
-         } else {
-            map1 = (AstMapping *) astUnitMap( 1, "", status );
-         }
-
-/* Annul the pointer to the primary Frame containing the current axis. */
-         pfrm = astAnnul( pfrm );
-
-/* Add the Mapping for this axis in parallel with the current "running sum" 
-   Mapping (if any). */
-         if( ret ) {
-            map2 = (AstMapping *) astCmpMap( ret, map1, 0, "", status );
-            ret = astAnnul( ret );
-            map1 = astAnnul( map1 );
-            ret = map2;
-         } else {
-            ret = map1;
-         }
-      }
-
-/* Set the Domain name for the primary Frame. It is currently set to
-   AST_FITSCHAN. We replace it with a value formed by concatenating the
-   CTYPE values of its axes. */
-      if( pfrm2 ) {
-         if( newdom && astChrLen( newdom ) > 0 ) {
-            astSetDomain( pfrm2, newdom );
-         } else {
-            astClearDomain( pfrm2 );
-         }
-         pfrm2 = astAnnul( pfrm2 );
-      }
-
-/* If the header contained a WCSNAME keyword, use it as the Domain name for 
-   the Frame. Also use it to create a title. */
-      ckeyval = GetItemC( &(store->wcsname), 0, s, NULL, method, class, status );
-      if( ckeyval ){
-         astSetDomain( *frm, ckeyval );
-         sprintf( buf, "%s coordinates", ckeyval );
-         astSetTitle( *frm, buf );
-      }
-   }
-
-/* Return the result. */
-   return ret;
-}
-
-static AstWinMap *WcsShift( FitsStore *store, char s, int naxes, 
-                            const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsShift
-
-*  Purpose:
-*     Create a WinMap which shifts pixels coordinates so that their origin
-*     is at the reference pixel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstWinMap *WcsShift( FitsStore *store, char s, int naxes, 
-*                          const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     A WinMap is created which implements a shift of origin by subtracting
-*     the reference pixel coordinates (CRPIXi) from the input pixel
-*     coordinates. 
-
-*  Parameters:
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     naxes
-*        The number of intermediate world coordinate axes (WCSAXES).
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the created WinMap or a NULL pointer if an 
-*     error occurred.
-
-*  Notes:
-*     -  If an error occurs, a NULL pointer is returned.
-
-*/
-
-/* Local Variables: */
-   AstWinMap *new;                 /* The created WinMap */
-   int j;                          /* Pixel axis index */
-   double crpix;                   /* CRPIX keyword value */
-   double *c1_in;                  /* Input corner 1 */
-   double *c2_in;                  /* Input corner 2 */
-   double *c1_out;                 /* Output corner 1 */
-   double *c2_out;                 /* Output corner 2 */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned WinMap pointer. */
-   new = NULL;
-
-/* Allocate memory to hold the two corners, in both input and output
-   coordinates. */
-   c1_in = (double *) astMalloc( sizeof( double )*(size_t) naxes );
-   c1_out = (double *) astMalloc( sizeof( double )*(size_t) naxes );
-   c2_in = (double *) astMalloc( sizeof( double )*(size_t) naxes );
-   c2_out = (double *) astMalloc( sizeof( double )*(size_t) naxes );
-
-/* Check these pointers can be used. */
-   if( astOK ){
-
-/* Set up two arbitrary corners in the input coordinate system, and the
-   corresponding values with the CRPIX values subtracted off. */
-      for( j = 0; j < naxes; j++ ){
-
-/* Get the CRPIX value for this axis. */
-         crpix = GetItem( &(store->crpix), 0, j, s, NULL, method, class, status );
-         if( crpix == AST__BAD ) crpix = 0.0;
-
-/* Store the corner co-ordinates. */ 
-         c1_in[ j ] = 0.0;
-         c2_in[ j ] = 1.0;
-         c1_out[ j ] = -crpix;
-         c2_out[ j ] = 1.0 - crpix;
-      }
-
-/* Create the WinMap. */
-      new = astWinMap( naxes, c1_in, c2_in, c1_out, c2_out, "", status );
-
-/* If an error has occurred, attempt to annul the new WinMap. */
-      if( !astOK ) new = astAnnul( new );
-   
-   }
-
-/* Free the memory holding the corners. */
-   c1_in = (double *) astFree( (void *) c1_in );
-   c1_out = (double *) astFree( (void *) c1_out );
-   c2_in = (double *) astFree( (void *) c2_in );
-   c2_out = (double *) astFree( (void *) c2_out );
-
-/* Return the WinMap. */
-   return new;
-
-}
-
-static AstSkyFrame *WcsSkyFrame( AstFitsChan *this, FitsStore *store, char s, 
-                                 int prj, char *sys, int axlon, int axlat, 
-                                 const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     WcsSkyFrame
-
-*  Purpose:
-*     Create a SkyFrame to describe a WCS celestial coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstSkyFrame *WcsSkyFrame( AstFitsChan this, FitsStore *store, char s, int prj,
-*                               char *sys, int axlon, int axlat, const char *method, 
-*                               const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A SkyFrame is returned describing the celestial coordinate system 
-*     described by a FITS header. The axes are *not* permuted in the
-*     returned Frame (that is, axis 0 is longitude and axis 1 is latitude
-*     in the returned SkyFrame, no matter what values are supplied for 
-*     "axlat" and "axlon").
-
-*  Parameters:
-*     this
-*        The FitsChan from which the keywords were read. Warning messages
-*        may be added to this FitsChan.
-*     store
-*        A structure containing values for FITS keywords relating to 
-*        the World Coordinate System.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     prj
-*        An integer code for the WCS projection being used.
-*     sys
-*        A pointer to a string identifying the celestial co-ordinate system 
-*        implied by the CTYPE values in the FitsStore. This will be "EQU" (for
-*        equatorial), or a one or two character code extracted from the
-*        CTYPE values.
-*     axlon 
-*        Zero based index of the longitude axis in the FITS header.
-*     axlat
-*        Zero based index of the latitude axis in the FITS header.
-*     method
-*        The calling method. Used only in error messages.
-*     class 
-*        The object class. Used only in error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the SkyFrame.
-
-*  Notes:
-*     -  A NULL pointer is returned if an error has already occurred, or
-*     if this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *ret;              /* Returned Frame */
-   char *ckeyval;                 /* Pointer to string item value */
-   char *lattype;                 /* Pointer to latitude CTYPE value */
-   char *lontype;                 /* Pointer to longitude CTYPE value */
-   char bj;                       /* Besselian/Julian selector */
-   char buf[300];                 /* Text buffer */
-   char sym[10];                  /* Axis symbol */
-   double eqmjd;                  /* MJD equivalent of equinox */
-   double equinox;                /* EQUINOX value */
-   double geolat;                 /* Observer's geodetic latitude */
-   double geolon;                 /* Observer's geodetic longitude */
-   double h;                      /* Observer's geodetic height */
-   double mjdobs;                 /* MJD-OBS value */
-   double obsgeo[ 3 ];            /* Observer's Cartesian position */
-   int radesys;                   /* RADESYS value */
-
-/* Initialise. */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Get the RADESYS keyword from the header, and identify the value. 
-   Store a integer value identifying the system. Report an error if an 
-   unrecognised system is supplied. Store NORADEC if the keyword was 
-   not supplied. */
-   ckeyval = GetItemC( &(store->radesys), 0, s, NULL, method, class, status );
-   radesys = NORADEC;
-   if( ckeyval ){
-      if( !strncmp( ckeyval, "FK4 ", 4 ) || 
-          !strcmp( ckeyval, "FK4" ) ){
-         radesys = FK4;
-
-      } else if( !strncmp( ckeyval, "FK4-NO-E", 8 ) ){
-         radesys = FK4NOE;
-
-      } else if( !strncmp( ckeyval, "FK5 ", 4 ) || 
-                 !strcmp( ckeyval, "FK5" ) ){
-         radesys = FK5;
-
-      } else if( !strncmp( ckeyval, "ICRS ", 5 ) || 
-                 !strcmp( ckeyval, "ICRS" ) ){
-         radesys = ICRS;
-
-      } else if( !strncmp( ckeyval, "GAPPT ", 6 ) ||
-                 !strcmp( ckeyval, "GAPPT" ) ){
-         radesys = GAPPT;
-
-      } else if( astOK ){
-         astError( AST__BDFTS, "%s(%s): FITS keyword '%s' has the "
-                   "unrecognised value '%s'.", status, method, class,
-                   FormatKey( "RADESYS", -1, -1, s, status ), ckeyval );
-      }
-
-   } else {
-      radesys = NORADEC;
-   }
-
-/* Get the value of the EQUINOX keyword. */
-   equinox = GetItem( &(store->equinox), 0, 0, s, NULL, method, class, status );
-
-/* For FK4 and FK4-NO-E any supplied equinox value is Besselian. For all 
-   other systems, the equinox value is Julian. */
-   bj = 0;
-   if( equinox != AST__BAD ){
-      if( radesys == FK4 || radesys == FK4NOE ){
-         bj = 'B';
-      } else if( radesys != NORADEC ) {         
-         bj = 'J';
-
-/* If no RADESYS was suppied, but an equinox was, use the IAU 1984 rule
-   to determine the default RADESYS and equinox type. */
-      } else {
-         if( equinox < 1984.0 ){
-            radesys = FK4;
-            bj = 'B';
-         } else {
-            radesys = FK5;
-            bj = 'J';
-         }
-
-/* If an equatorial system is being used, give a warning that a default RADESYS 
-   value is being used. */
-         if( !strcmp( sys, "EQU" ) ){
-            sprintf( buf, "The original FITS header did not specify the "
-                     "RA/DEC reference frame. A default value of %s was "
-                     "assumed.", ( radesys == FK4 ) ? "FK4" : "FK5" );
-            Warn( this, "noradesys", buf, method, class, status );
-         }
-      }
-
-/* If no equinox was supplied, use a default equinox value depending
-   on the frame of reference. For FK4-based systems, use B1950. */
-   } else {
-      if( radesys == FK4 || radesys == FK4NOE ){
-         equinox = 1950.0;
-         bj = 'B';
-
-/* For FK5-based systems, use J2000. */
-      } else if( radesys == FK5 ){
-         equinox = 2000.0;
-         bj = 'J';
-
-/* If no RADESYS or EQUINOX was supplied, assume either FK4 B1950 or ICRS -
-   as decided by attribute DefB1950 (GAPPT and ICRS do not use EQUINOX). */
-      } else if( radesys == NORADEC ) {
-         if( astGetDefB1950( this ) ) {
-            equinox = 1950.0;
-            bj = 'B';
-            radesys = FK4;
-         } else {
-            radesys = ICRS;
-         }
-         if( !strcmp( sys, "EQU" ) ){
-            sprintf( buf, "The original FITS header did not specify the "
-                     "RA/DEC reference frame. A default value of %s was "
-                     "assumed.", ( radesys == FK4 ) ? "FK4" : "ICRS" );
-            Warn( this, "noradesys", buf, method, class, status );
-         }
-      }
-
-/* If we have an equatorial or ecliptic system, issue a warning that a default
-   equinox has been adopted. */
-      if( ( !strcmp( sys, "EQU" ) && radesys != ICRS && radesys != GAPPT ) || 
-          !strcmp( sys, "ECL" ) ){
-         sprintf( buf, "The original FITS header did not specify the "
-                  "reference equinox. A default value of %c%.8g was "
-                  "assumed.", bj, equinox );
-         Warn( this, "noequinox", buf, method, class, status );
-      }
-   }
-
-/* Convert the equinox to a Modified Julian Date. */
-   if( equinox != AST__BAD ) { 
-      if( bj == 'B' ) {
-         eqmjd = palSlaEpb2d( equinox );
-      } else {
-         eqmjd = palSlaEpj2d( equinox );
-      }
-   } else {
-      eqmjd = AST__BAD;
-   }
-
-/* Get a value for the Epoch attribute. If no value is available, use
-   EQUINOX and issue a warning. */
-   mjdobs = ChooseEpoch( store, s, method, class, status );
-   if( mjdobs == AST__BAD ) {
-      mjdobs = eqmjd;
-      if( mjdobs != AST__BAD ) {
-         sprintf( buf, "The original FITS header did not specify the "
-                  "date of observation. A default value of %c%.8g was "
-                  "assumed.", bj, equinox );
-         Warn( this, "nomjd-obs", buf, method, class, status );
-      }
-   }
-
-/* Create a SkyFrame for the specified system. */
-   if( !strcmp( sys, "E" ) ){
-      ret = astSkyFrame( "System=Ecliptic", status );
-
-   } else if( !strcmp( sys, "H" ) ){
-      ret = astSkyFrame( "System=Helioecliptic", status );
-
-   } else if( !(strcmp( sys, "G" ) ) ){
-      ret = astSkyFrame( "System=Galactic", status );
-
-   } else if( !(strcmp( sys, "S" ) ) ){
-      ret = astSkyFrame( "System=Supergalactic", status );
-
-   } else if( !(strcmp( sys, "AZL" ) ) ){
-      ret = astSkyFrame( "System=AzEl", status );
-
-   } else if( !(strcmp( sys, "EQU" ) ) ){
-
-/* For equatorial systems, the specific system is given by the RADESYS
-   value. */
-      if( radesys == FK4 ){
-         ret = astSkyFrame( "System=FK4", status );
-
-      } else if( radesys == FK4NOE ){
-         ret = astSkyFrame( "System=FK4-NO-E", status );
-
-      } else if( radesys == FK5 ){
-         ret = astSkyFrame( "System=FK5", status );
-
-      } else if( radesys == ICRS ){
-         ret = astSkyFrame( "System=ICRS", status );
-
-      } else if( radesys == GAPPT ){
-         ret = astSkyFrame( "System=GAPPT", status );
-
-      } else if( astOK ){
-         astError( AST__INTER, "%s(%s): Internal AST programming "
-                   "error - FITS equatorial coordinate system type %d "
-                   "not yet supported in WcsSkyFrame.", status, method, class, radesys );
-      }
-
-/* If an unknown celestial co-ordinate system was specified by the CTYPE 
-   keywords, add warning messages to the FitsChan and treat the axes as
-   a general spherical coordinate system. */
-   } else if( astOK ){
-      ret = astSkyFrame( "System=UNKNOWN", status );
-      strcpy( sym, sys );
-      if( strlen( sys ) == 1 ) {
-         strcpy( sym + 1, "LON" );                        
-         astSetSymbol( ret, 0, sym );
-         strcpy( sym + 1, "LAT" );                        
-         astSetSymbol( ret, 1, sym );
-      } else {
-         strcpy( sym + 2, "LN" );                        
-         astSetSymbol( ret, 0, sym );
-         strcpy( sym + 2, "LT" );                        
-         astSetSymbol( ret, 1, sym );
-      }
-
-      lontype = GetItemC( &(store->ctype), axlon, s, NULL, method, class, status );
-      lattype = GetItemC( &(store->ctype), axlat, s, NULL, method, class, status );
-      if( lontype && lattype ){
-         sprintf( buf, "This FITS header contains references to an unknown "
-                  "spherical co-ordinate system specified in the values " 
-                  "%s and %s. It may not be possible to convert to "
-                  "other standard co-ordinate systems.", lontype, lattype );
-         Warn( this, "badcel", buf, method, class, status );
-      }
-   }
-
-/* If a skyFrame was created... */
-   if( ret ){
-
-   astSetIdent( ret, "ZZZ" );
-
-
-/* Store the projection description. */
-      astSetProjection( ret, astWcsPrjDesc( prj )  );
-
-/* Store the epoch of the observation in the SkyFrame. */
-      if( mjdobs != AST__BAD ) astSetEpoch( ret, mjdobs );
-
-/* For equatorial and ecliptic systems, store the epoch of the reference 
-   equinox in the SkyFrame. */
-      if( ( !strcmp( sys, "EQU" ) || !strcmp( sys, "ECL" ) ) &&
-          equinox != AST__BAD ) astSetEquinox( ret, eqmjd );
-
-/* If either of the CNAME keywords is set, use it as the axis label. */
-      ckeyval = GetItemC( &(store->cname), axlon, s, NULL, method, class, status );
-      if( ckeyval ) astSetLabel( ret, 0, ckeyval );
-      ckeyval = GetItemC( &(store->cname), axlat, s, NULL, method, class, status );
-      if( ckeyval ) astSetLabel( ret, 1, ckeyval );
-
-/* Observer's position (from primary axis descriptions). Get the OBSGEO-X/Y/Z 
-   keywords, convert to geodetic longitude and latitude and store as the 
-   SpecFrame's ObsLat, ObsLon and ObsAlt attributes. */
-      obsgeo[ 0 ] = GetItem( &(store->obsgeox), 0, 0, ' ', NULL, method, class, status );
-      obsgeo[ 1 ] = GetItem( &(store->obsgeoy), 0, 0, ' ', NULL, method, class, status );
-      obsgeo[ 2 ] = GetItem( &(store->obsgeoz), 0, 0, ' ', NULL, method, class, status );
-      if( obsgeo[ 0 ] != AST__BAD && 
-          obsgeo[ 1 ] != AST__BAD && 
-          obsgeo[ 2 ] != AST__BAD ) {
-         Geod( obsgeo, &geolat, &h, &geolon, status );
-         astSetObsLat( ret, geolat );
-         astSetObsLon( ret, geolon );
-         astSetObsAlt( ret, h );
-      }         
-   }
-
-/* If an error has occurred, annul the Frame. */
-   if( !astOK ) ret = astAnnul( ret );
-   
-/* Return the Frame. */
-   return ret;
-
-}
-
-static AstMapping *WcsSpectral( AstFitsChan *this, FitsStore *store, char s, 
-                                AstFrame **frm, AstFrame *iwcfrm, double reflon, double reflat, 
-                                AstSkyFrame *reffrm, const char *method, 
-                                const char *class, int *status ){
-/*
-*  Name:
-*     WcsSpectral
-
-*  Purpose:
-*     Create a Mapping from intermediate world coords to spectral coords
-*     as described in a FITS header.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     AstMapping *WcsSpectral( AstFitsChan *this, FitsStore *store, char s, 
-*                              AstFrame **frm, AstFrame *iwcfrm, double reflon,
-*                              double reflat, AstSkyFrame *reffrm, 
-*                              const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function interprets the contents of the supplied FitsStore
-*     structure, looking for world coordinate axes which describe positions
-*     in a spectrum. If such an axis is found, a Mapping is returned which 
-*     transforms the corresponding intermediate world coordinates to
-*     spectral world coordinates (this mapping leaves any other axes 
-*     unchanged). It also, modifies the supplied Frame to describe the 
-*     axis (again, other axes are left unchanged). If no spectral axis 
-*     is found, a UnitMap is returned, and the supplied Frame is left 
-*     unchanged.
-
-*  Parameters:
-*     this
-*        The FitsChan.
-*     store
-*        A structure containing information about the requested axis 
-*        descriptions derived from a FITS header.
-*     s
-*        A character identifying the co-ordinate version to use. A space 
-*        means use primary axis descriptions. Otherwise, it must be an 
-*        upper-case alphabetical characters ('A' to 'Z').
-*     frm
-*        The address of a location at which to store a pointer to the
-*        Frame describing the world coordinate axes.
-*     iwcfrm
-*        A pointer to the Frame describing the intermediate world coordinate 
-*        axes. The properties of this Frame may be changed on exit.
-*     reflon
-*        The reference celestial longitude, in the frame given by reffrm.
-*     reflat
-*        The reference celestial latitude, in the frame given by reffrm.
-*     reffrm
-*        The SkyFrame defining reflon and reflat.
-*     method
-*        A pointer to a string holding the name of the calling method.
-*        This is used only in the construction of error messages.
-*     class
-*        A pointer to a string holding the class of the object being
-*        read. This is used only in the construction of error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*/
-
-/* Local Variables: */
-   AstFrame *ofrm;        /* Pointer to a Frame */
-   AstMapping *map1;      /* Pointer to Mapping */
-   AstMapping *map2;      /* Pointer to Mapping */
-   AstMapping *ret;       /* Pointer to the returned Mapping */
-   AstSpecFrame *specfrm; /* Pointer to a SpecFrame */
-   char algcode[ 5 ];     /* Displayed spectral type string */
-   char stype[ 5 ];       /* Displayed spectral type string */
-   const char *cname;     /* Pointer to CNAME value */
-   const char *ctype;     /* Pointer to CTYPE value */
-   const char *cunit;     /* Pointer to CUNIT value */
-   const char *defunit;   /* Default unit string */
-   const char *specsys;   /* Pointer to SPECSYS value */
-   const char *ssyssrc;   /* Pointer to SSYSSRC value */
-   double geolat;         /* Observer's geodetic latitude */
-   double geolon;         /* Observer's geodetic longitude */
-   double h;              /* Observer's geodetic height */
-   double mjd;            /* Modified Julian Date */
-   double obsgeo[ 3 ];    /* Observer's Cartesian position */
-   double restfrq;        /* RESTFRQ keyword value */
-   double vsource;        /* Source velocity */
-   int *axes;             /* Pointer to axis permutation array */
-   int i;                 /* Axis index */
-   int j;                 /* Loop count */
-   int k;                 /* Loop count */
-   int kk;                /* Loop count */
-   int naxes;             /* No. of axes in Frame */
-
-/* Initialise the pointer to the returned Mapping. */
-   ret = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return ret;
-
-/* Get the number of physical axes. */
-   naxes = astGetNaxes( *frm );
-
-/* An array to hold a list of axis selections. */
-   axes = astMalloc( naxes*sizeof( int ) );
-
-/* Loop round checking each axis. */
-   defunit = NULL;
-   map1 = NULL;
-   for( i = 0; i < naxes && astOK; i++ ) {
-
-/* Get the CTYPE value. Pass on to the next axis if no CTYPE is available. */
-      ctype = GetItemC( &(store->ctype), i, s, NULL, method, class, status );
-      if( ctype ) {
-
-/* See if this CTYPE describes a spectral axis, and if so, extract the
-   system code, the algorithm code and get the default units. */
-         defunit = IsSpectral( ctype, stype, algcode, status );
-
-/* Skip to the next axis if the system type was not a spectral system
-   type. */
-         if( defunit ) { 
-
-/* Create a SpecFrame or DSBSpecFrame with this system (the FITS type codes 
-   are also legal SpecFrame System values). We use astSetC rather than
-   astSetSystem because astSetC translates string values into the 
-   corresponding integer system identifiers. */
-            if( GetItem( &(store->imagfreq), 0, 0, s, NULL, method, 
-                         class, status ) == AST__BAD ) {
-               specfrm = astSpecFrame( "", status );
-            } else {
-               specfrm = (AstSpecFrame *) astDSBSpecFrame( "", status );
-            }
-            astSetC( specfrm, "System", stype );
-
-/* Set the reference position (attributes RefRA and RefDec), if known. */
-            if( reffrm ) astSetRefPos( specfrm, reffrm, reflon, reflat );
-
-/* Set the SpecFrame units. Use the value of the CUNIT FITS keyword for this 
-   axis if available, otherwise use the default units for the system, noted 
-   above. */
-            cunit = GetItemC( &(store->cunit), i, s, NULL, method, class, status );
-            if( !cunit ) cunit = defunit;
-            astSetUnit( specfrm, 0, cunit );
-
-/* Set the axis unit in the IWC Frame. */
-            astSetUnit( iwcfrm, i, cunit );
-
-/* Get a value for the Epoch attribute (the date of observation). */
-            mjd = ChooseEpoch( store, s, method, class, status );
-            if( mjd != AST__BAD ) astSetEpoch( specfrm, mjd );
-
-/* Set the rest frequency. Use the RESTFRQ keyword (assumed to be in Hz),
-   or (if RESTFRQ is not available), RESTWAV (assumes to be in m). */
-            restfrq = GetItem( &(store->restfrq), 0, 0, s, NULL, method, class, status );
-            if( restfrq == AST__BAD ) {
-               restfrq = GetItem( &(store->restwav), 0, 0, s, NULL, method, class, status );
-               if( restfrq != AST__BAD ) restfrq = AST__C/restfrq;
-            }         
-            astSetRestFreq( specfrm, restfrq );
-
-/* Observer's position (from primary axis descriptions). Get the OBSGEO-X/Y/Z 
-   keywords, convert to geodetic longitude and latitude and store as the 
-   SpecFrame's ObsLat, ObsLon and ObsAlt attributes. */
-            obsgeo[ 0 ] = GetItem( &(store->obsgeox), 0, 0, ' ', NULL, method, class, status );
-            obsgeo[ 1 ] = GetItem( &(store->obsgeoy), 0, 0, ' ', NULL, method, class, status );
-            obsgeo[ 2 ] = GetItem( &(store->obsgeoz), 0, 0, ' ', NULL, method, class, status );
-            if( obsgeo[ 0 ] != AST__BAD && 
-                obsgeo[ 1 ] != AST__BAD && 
-                obsgeo[ 2 ] != AST__BAD ) {
-               Geod( obsgeo, &geolat, &h, &geolon, status );
-               astSetObsLat( specfrm, geolat );
-               astSetObsLon( specfrm, geolon );
-               astSetObsAlt( specfrm, h );
-            }         
-
-/* Source velocity rest frame */
-            ssyssrc = GetItemC( &(store->ssyssrc), 0, s, NULL, method, class, status );
-            if( ssyssrc ) astSetC( specfrm, "SourceVRF", ssyssrc );
-
-/* Source velocity. Use the ZSOURCE keyword and convert from redshift to 
-   velocity. */
-            vsource = GetItem( &(store->zsource), 0, 0, s, NULL, method, class, status );
-            if( vsource != AST__BAD ) {
-               vsource += 1.0;
-               vsource *= vsource;
-               vsource = AST__C*( vsource - 1.0  )/( vsource + 1.0 );
-               astSetSourceVel( specfrm, vsource );
-            }
-
-/* Reference frame. If the SPECSYS keyword is set, use it (the FITS codes
-   are also legal SpecFrame StdOfRest values). We use astSetC rather than 
-   astSetSystem because astSetC translates string values into the 
-   corresponding integer system identifiers. */
-            specsys = GetItemC( &(store->specsys), 0, s, NULL, method, class, status );
-            if( specsys ) astSetC( specfrm, "StdOfRest", specsys );
-
-/* Axis label. If the CNAME keyword is set, use it as the axis label. */
-            cname = GetItemC( &(store->cname), i, s, NULL, method, class, status );
-            if( cname ) astSetLabel( specfrm, 0, cname );
-
-/* Now do the extra stuff needed if we are creating a dual sideband
-   SpecFrame. */
-            if( astIsADSBSpecFrame( specfrm ) ) {
-               DSBSetUp( this, store, (AstDSBSpecFrame *) specfrm, s, 
-                         GetItem( &(store->crval), i, 0, s, NULL, method, 
-                                  class, status ), method, class, status );
-            }
-
-/* Now branch for each type of algorithm code. Each case returns a 1D
-   Mapping which converts IWC value into the specified Spectral system. */
-
-/* Linear */
-            if( strlen( algcode ) == 0 ) {
-               map1 = LinearWcs( store, i, s, method, class, status );
-
-/* Log-Linear */
-            } else if( !strcmp( "-LOG", algcode ) ) {
-               map1 = LogWcs( store, i, s, method, class, status );
-
-/* Non-Linear */
-            } else if( algcode[ 0 ] == '-' && algcode[ 2 ] == '2' ) {
-               map1 = NonLinSpecWcs( this, algcode, store, i, s, specfrm, method, class, status );
-
-/* Grism */
-            } else if( !strcmp( "-GRI", algcode ) ||
-                       !strcmp( "-GRA", algcode ) ) {
-               map1 = GrismSpecWcs( algcode, store, i, s, specfrm, method, class, status );
-
-            } else {
-               map1 = NULL;
-            }
-
-            if( map1 == NULL && astOK ) {
-               astError( AST__BDFTS, "%s(%s): Cannot implement spectral "
-                         "algorithm code '%s' specified in FITS keyword '%s'.", status, 
-                         method, class, ctype + 4, FormatKey( "CTYPE", i + 1, -1, s, status ) );
-               astError( AST__BDFTS, "%s(%s): Unknown algorithm code or "
-                         "unusable parameter values.", status, method, class );
-               break;
-            }
-
-/* Create a Frame by picking all the other (non-spectral) axes from the 
-   supplied Frame. */
-            j = 0;
-            for( k = 0; k < naxes; k++ ) {
-               if( k != i ) axes[ j++ ] = k;
-            }
-
-/* If there were no other axes, replace the supplied Frame with the 
-   specframe. */
-            if( j == 0 ) {
-               (void) astAnnul( *frm );
-               *frm = (AstFrame *) specfrm;
-
-/* Otherwise pick the other axes from the supplied Frame */               
-            } else {
-               ofrm = astPickAxes( *frm, j, axes, NULL );
-
-/* Replace the supplied Frame with a CmpFrame made up of this Frame and 
-   the SpecFrame. */
-               (void) astAnnul( *frm );
-               *frm = (AstFrame *) astCmpFrame( ofrm, specfrm, "", status );
-               ofrm = astAnnul( ofrm );
-               specfrm = astAnnul( specfrm );
-            }
-
-/* Permute the axis order to put the spectral axis back in its original 
-   position. */
-            j = 0;
-            for( kk = 0; kk < naxes; kk++ ) {
-               if( kk == i ) {
-                  axes[ kk ] = naxes - 1;
-               } else {
-                  axes[ kk ] = j++;
-               }
-            }
-            astPermAxes( *frm, axes ); 
-
-         }
-      }
-
-/* If this axis is not a spectral axis, create a UnitMap (the Frame is left 
-   unchanged). */
-      if( !map1 && astOK ) map1 = (AstMapping *) astUnitMap( 1, "", status );
-
-/* Add the Mapping for this axis in parallel with the Mappings for 
-   previous axes. */
-      if( ret ) {
-         map2 = (AstMapping *) astCmpMap( ret, map1, 0, "", status );
-         ret = astAnnul( ret );
-         map1 = astAnnul( map1 );
-         ret = map2;
-      } else {
-         ret = map1;
-         map1 = NULL;
-      }
-   }
-
-/* Free the axes array. */
-   axes= astFree( axes );
-
-/* Return the result. */
-   return ret;
-}
-
-static void WcsToStore( AstFitsChan *this, AstFitsChan *trans, 
-                        FitsStore *store, const char *method, 
-                        const char *class, int *status ){
-/*
-*  Name:
-*     WcsToStore
-
-*  Purpose:
-*     Extract WCS information from the supplied FitsChan using a FITSWCS
-*     encoding, and store it in the supplied FitsStore.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WcsToStore( AstFitsChan *this, AstFitsChan *trans, 
-*                      FitsStore *store, const char *method, 
-*                      const char *class, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     A FitsStore is a structure containing a generalised represention of
-*     a FITS WCS FrameSet. Functions exist to convert a FitsStore to and
-*     from a set of FITS header cards (using a specified encoding), or
-*     an AST FrameSet. In other words, a FitsStore is an encoding-
-*     independant intermediary staging post between a FITS header and 
-*     an AST FrameSet.
-*
-*     This function extracts FITSWCS keywords from the supplied FitsChan(s), 
-*     and stores the corresponding WCS information in the supplied FitsStore.
-*     Keywords will be searched for first in "trans", and then, if they
-*     are not found in "trans", they will be searched for in "this".
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan containing the cards read from the
-*        original FITS header. This may include non-standard keywords.
-*     trans
-*        Pointer to a FitsChan containing cards representing standard
-*        translations of any non-standard keywords in "this". A NULL
-*        pointer indicates that "this" contains no non-standard keywords.
-*     store
-*        Pointer to the FitsStore structure.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Read all usable cards out of the main FitsChan, into the FitsStore. */
-   WcsFcRead( this, trans, store, method, class, status );
-
-/* If a FitsChan containing standard translations was supplied, read all 
-   cards out of it, into the FitsStore, potentially over-writing the
-   non-standard values stored in the previous call to WcsFcRead. */
-   if( trans ) WcsFcRead( trans, NULL, store, method, class, status );
-
-}
-
-
-static void WorldAxes( AstMapping *cmap, double *dim, int *perm, int *status ){
-/*
-*  Name:
-*     WorldAxes
-
-*  Purpose:
-*     Associate final world axes with pixel axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WorldAxes( AstMapping *cmap, double *dim, int *perm, int *status )
-
-*  Class Membership:
-*     FitsChan
-
-*  Description:
-*     This function finds the association between the axes of the final
-*     world coordinate system, and those of the pixel coordinate
-*     system. This may not simply be a 1-to-1 association because the
-*     Mapping may include a PermMap. Each output axis is associated with
-*     the input axis which is most nearly aligned with it.
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping from pixel coordinates to final world 
-*        coordinates.
-*     dim
-*        Pointer to an array with one element for each input of "map",
-*        supplied holding the no. of pixels in the data cube along the axis, or
-*        AST__BAD If unknown.
-*     perm
-*        Pointer to an array with one element for each output of "map".
-*        On exit, each element of this array holds the zero-based index of the
-*        "corresponding" (i.e. most nearly parallel) pixel axis. 
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstPointSet *pset1;
-   AstPointSet *pset2;
-   double **ptr1;
-   double **ptr2;
-   double *dw;
-   double *g0;
-   double *ntn;
-   double *nwt;
-   double *tn;
-   double *w0;
-   double *wt;
-   double dg;
-   double s;
-   double sj;
-   double tnmin;
-   double wtmax;
-   int i2;
-   int i;
-   int imin;
-   int j2;        
-   int j;
-   int jmin;
-   int nin;
-   int nout;
-   int used;
-
-/* Check the status */
-   if( !astOK ) return;
-
-/* Simplfy the Mapping. */
-   map = astSimplify( cmap );
-   
-/* Get the number of inputs and outputs for the Mapping. */
-   nin = astGetNin( map );  
-   nout = astGetNout( map );  
-
-/* Initialise "perm". */
-   for( i = 0; i < nout; i++ ) perm[ i ] = i;
-
-/* Use FindBasisVectors to find an input position which coresponds to a
-   good output position. Store it in a dynamic array pointed to by "g0". */
-
-   pset1 = astPointSet( nin+1, nin, "", status );
-   pset2 = astPointSet( nin+1, nout, "", status );
-
-   if( FindBasisVectors( map, nin, nout, dim, pset1, pset2, status ) ) {
-      g0 = astMalloc( sizeof(double)*nin );
-      ptr1 = astGetPoints( pset1 );
-      if( astOK ) {
-         for( j = 0; j < nin; j++ ) g0[ j ] = ptr1[ j ][ 0 ];
-      }
-
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-
-/* If no basis vectors found, return. */
-   } else {
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-      return;
-   }
-
-/* Create Pointset to hold two input (pixel) points. */
-   pset1 = astPointSet( 2, nin, "", status );
-   ptr1 = astGetPoints( pset1 );
-
-/* Create a Pointset to hold the same number of output (world) points. */
-   pset2 = astPointSet( 2, nout, "", status );
-   ptr2 = astGetPoints( pset2 );
-
-/* Allocate memory to use as work space */
-   w0 = astMalloc( sizeof(double)*nout );
-   dw = astMalloc( sizeof(double)*nout );
-   tn = astMalloc( sizeof(double)*nout*nin );
-   wt = astMalloc( sizeof(double)*nout*nin );
-
-/* Check that the pointers can be used. */
-   if( astOK ) {
-
-/* Transform the grid position found above, plus a position 1 pixel away
-   along all pixel axes, into world coords. Also set up "dw" to hold 
-   "a small increment" along each world axis. */
-      for( j = 0; j < nin; j++ ) {
-         ptr1[ j ] [ 0 ] = g0[ j ];
-         ptr1[ j ] [ 1 ] = g0[ j ] + 1.0;
-      }
-
-      (void) astTransform( map, pset1, 1, pset2 );
-
-      for( i = 0; i < nout; i++ ) {
-         w0[ i ] = ptr2[ i ] [ 0 ];
-         if( w0[ i ] != AST__BAD && ptr2[ i ] [ 1 ] != AST__BAD ) {
-            dw[ i ] = fabs( 0.1*( ptr2[ i ] [ 1 ] - w0[ i ] ) );
-            if( dw[ i ] <= fabs( 0.001*w0[ i ] ) ) {
-               if( w0[ i ] != 0.0 ) {
-                  dw[ i ] = fabs( 0.001*w0[ i ] );
-               } else {
-                  dw[ i ] = 1.0;
-               }
-            }
-         } else {
-            dw[ i ] = AST__BAD;
-         }
-      }
-
-/* Any PermMap in the mapping may result in the the "inverse transformation" 
-   not being a true inverse of the forward transformation (for instance,
-   constant values fed in for degenerate axis would have this effect). To
-   ensure that "g0" and "w0" are corresponding positions, transform the 
-   "w0" position back into grid coords and use the resulting grid position 
-   as "g0". */
-      (void) astTransform( map, pset2, 0, pset1 );
-      for( j = 0; j < nin; j++ ) {
-         g0[ j ] = ptr1[ j ] [ 0 ];
-      }
-  
-/* In the next loop we find the tan of the angle between each WCS axis and 
-   each of the pixel axes. Loop round each WCS axis. */
-      for( i = 0; i < nout; i++ ) {
-
-/* Initialise the tan values for this WCS axis to AST__BAD. */
-         ntn = tn + i*nin;
-         nwt = wt + i*nin;
-         for( j = 0; j < nin; j++ ) ntn[ j ] = AST__BAD;
-
-/* As a side issue, initialise the pixel axis assigned to each WCS axis
-   to -1, to indicate that no grid axis has yet been associated with this 
-   WCS axis. */
-         perm[ i ] = -1;
-
-/* Skip over this axis if the increment is bad. */
-         if( dw[ i ] != AST__BAD ) {
-
-/* Store a WCS position which is offset from the "w0" position by a small
-   amount along the current WCS axis. The first position in "ptr2" is
-   currently "w0". */
-            ptr2[ i ][ 0 ] += dw[ i ];
-
-/* Transform this position into grid coords. */
-            (void) astTransform( map, pset2, 0, pset1 );
-
-/* Re-instate the original "w0" values within "ptr2", ready for the next
-   WCS axis. */
-            ptr2[ i ][ 0 ] = w0[ i ];
-
-/* Consider each pixel axis in turn as a candidate for being assigned to
-   the current WCS axis. */
-            for( j = 0; j < nin; j++ ) {
-
-/* Find the tan of the angle between the current ("i"th) WCS axis and the 
-   current ("j"th) pixel axis. This gets stored in tn[j+nin*i]. A 
-   corresponding weight for each angle is stored in nwt[j+nin*i]. This 
-   is the length of the projection of the vector onto the "j"th pixel
-   axis.  */
-               s = 0.0;
-               sj = 0.0;
-               for( j2 = 0; j2 < nin; j2++ ) {
-                  if( ptr1[ j2 ][ 0 ] != AST__BAD ) {
-                      dg = ptr1[ j2 ][ 0 ] - g0[ j2 ];
-                      if( j2 != j ) {
-                         s += dg*dg;
-                      } else {
-                         sj = fabs( dg );
-                      }
-                  } else {
-                      s = AST__BAD;
-                      break;
-                  }
-               }
-               if( s != AST__BAD && sj != 0.0 ) {
-                  ntn[ j ] = sqrt( s )/sj;
-                  nwt[ j ] = sj;
-               }
-            }
-         }
-      }
-
-/* Loop until every grid axes has been assigned to a WCS axis. */
-      while( 1 ) {
-
-/* Pass through the array of tan values, finding the smallest. Note the 
-   pixel and WCS axis for which the smallest tan value occurs. If the tan
-   values are equal, favour the one with highest weight. */
-         ntn = tn;
-         nwt = wt;
-         tnmin = AST__BAD;
-         wtmax = AST__BAD;
-         imin = 0;
-         jmin = 0;
-         for( i = 0; i < nout; i++ ) {
-            for( j = 0; j < nin; j++ ) {
-               if( *ntn != AST__BAD ) {
-                  if( tnmin == AST__BAD || *ntn < tnmin ) {
-                     tnmin = *ntn;
-                     wtmax = *nwt;
-                     imin = i;
-                     jmin = j;
-                  } else if( EQUAL( *ntn, tnmin ) && *nwt > wtmax ) {
-                     wtmax = *nwt;
-                     imin = i;
-                     jmin = j;
-                  }
-               }
-               ntn++;
-               nwt++;
-            }
-         }
- 
-/* Check we found a usable minimum tan value */  
-         if( tnmin != AST__BAD ) {
-
-/* Assign the pixel axis to the WCS axis. */
-            perm[ imin ] = jmin;
-
-/* Set bad all the tan values for this pixel and WCS axis pair. This ensures 
-   that the pixel axis will not be assigned to another WCS axis, and that
-   the WCS will not have another pixel axis assigned to it. */          
-            ntn = tn;
-            for( i = 0; i < nout; i++ ) {
-               for( j = 0; j < nin; j++ ) {
-                  if( i == imin || j == jmin ) *ntn = AST__BAD;
-                  ntn++;
-               }
-            }
-
-/* Leave the loop if no more good tan values were found. */
-         } else {
-            break;
-         }
-      }
-
-/* The above process may have left some WCS axes with out any assigned
-   pixel axis. We assign the remaining pixel arbitrarily to such axes,
-   starting with the first remaining pixel axis. Find the lowest unused 
-   pixel axis. */
-      for( j = 0; j < nin; j++ ) {
-   
-         used = 0;
-         for( i = 0; i < nout; i++ ) {
-            if( perm[ i ] == j ) {
-               used = 1;
-               break;
-            }   
-         }
-
-         if( !used ) break;
-      }
-
-/* Now check each WCS axis looking for outputs which were not assigned a 
-   pixel axis in the above process. */
-      for( i = 0; i < nout; i++ ) {
-         if( perm[ i ] == -1 ) {
-
-/* Use the next unused axis value. */
-            perm[ i ] = j++;
-
-/* Find the next unused axis value. */
-            for( ; j < nin; j++ ) {
-   
-               used = 0;
-               for( i2 = 0; i2 < nout; i2++ ) {
-                  if( perm[ i2 ] == j ) {
-                     used = 1;
-                     break;
-                  }   
-               }
-      
-               if( !used ) break;
-            }
-         }
-      }
-   }
-
-/* Free resources. */
-   map = astAnnul( map );
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-   g0 = astFree( g0 );
-   w0 = astFree( w0 );
-   tn = astFree( tn );
-   wt = astFree( wt );
-   dw = astFree( dw );
-
-}
-
-static int Write( AstChannel *this_channel, AstObject *object, int *status ) {
-/*
-*  Name:
-*     Write
-
-*  Purpose:
-*     Write an Object to a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     int Write( AstChannel *this, AstObject *object, int *status )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the astWrite method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function writes an Object to a FitsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     object
-*        Pointer to the Object which is to be written.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of Objects written to the FitsChan by this invocation of 
-*     astWrite.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the AST error status set, or if it should fail for any
-*     reason.
-*     - The Base Frame in the FrameSet is used as the pixel Frame, and
-*     the Current Frame is used to create the primary axis descriptions.
-*     Attempts are made to create secondary axis descriptions for any 
-*     other Frames in the FrameSet (up to a total of 26).
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   FitsStore *store;             /* Intermediate storage for WCS information */
-   char banner[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ]; /* Buffer for begin/end banner */
-   const char *class;            /* Pointer to string holding object class */
-   const char *method;           /* Pointer to string holding calling method */
-   double *dim;                  /* Pointer to array of axis dimensions */
-   int card0;                    /* Index of original current card */
-   int comm;                     /* Value of Comm attribute */
-   int encoding;                 /* FITS encoding scheme to use */
-   int i;                        /* Axis index */
-   int icurr;                    /* Original current Frame index */
-   int naxis;                    /* No. of pixel axes */
-   int ret;                      /* Number of objects read */
-
-/* Initialise. */
-   ret = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Ensure the source function has been called */
-   ReadFromSource( this, status );
-
-/* Store the calling method, and object class. */
-   method = "astWrite";
-   class = astGetClass( this );
-
-/* The original current card is re-instated at the end if no object
-   is written. Save its index. */
-   card0 = astGetCard( this );
-
-/* Indicate that all cards added to the FitsCHan by this call should be
-   marked as "new". */
-   mark_new = 1;
-
-/* Get the encoding scheme used by the FitsChan. */
-   encoding = astGetEncoding( this );
-
-/* First deal with cases where we are writing to a FitsChan in which AST 
-   objects are encoded using native AST-specific keywords... */
-   if( encoding == NATIVE_ENCODING ){
-
-/* Increment the nesting level which keeps track of recursive
-   invocations of this function. */
-      write_nest++;
-
-/* Initialise the current indentation level for top-level objects. */
-      if ( !write_nest ) current_indent = 0;
-
-/* Obtain the value of the Comm attribute. */
-      comm = astGetComment( this );
-
-/* If this is the top-level invocation (i.e. we are about to write out
-   a new top-level Object), then prefix it with a blank FITS line and
-   an appropriate banner of FITS comments, unless comments have been
-   suppressed. */
-      if ( !write_nest && comm ) {
-         astSetFitsCom( this, "        ", "", 0 );
-         MakeBanner( 
-"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
-                     "", "", banner, status );
-         astSetFitsCom( this, "COMMENT", banner, 0 );
-
-         if( astIsAFrameSet( object ) ) {
-            MakeBanner( "WCS information in AST format", "", "", banner, status );
-            astSetFitsCom( this, "COMMENT", banner, 0 );
-            MakeBanner( "See http://www.starlink.ac.uk/ast/", "", "", banner, status );
-            astSetFitsCom( this, "COMMENT", banner, 0 );
-         }
-
-         MakeBanner( HEADER_TEXT, astGetClass( object ), " object", banner, status );
-         astSetFitsCom( this, "COMMENT", banner, 0 );
-         MakeBanner(
-"................................................................",
-                     "", "", banner, status );
-         astSetFitsCom( this, "COMMENT", banner, 0 );
-      }
-
-/* Invoke the parent astWrite method to write out the Object data. */
-      (*parent_write)( this_channel, object, status );
-
-/* Append a banner of FITS comments to the object data, as above, if
-   necessary. */
-      if ( !write_nest && comm ) {
-         MakeBanner(
-"................................................................",
-                     "", "", banner, status );
-         astSetFitsCom( this, "COMMENT", banner, 0 );
-         MakeBanner( FOOTER_TEXT, astGetClass( object ), " object", banner, status );
-         astSetFitsCom( this, "COMMENT", banner, 0 );
-         MakeBanner(
-"----------------------------------------------------------------",
-                     "", "", banner, status );
-         astSetFitsCom( this, "COMMENT", banner, 0 );
-      }
-
-/* Return the nesting level to its previous value. */
-      write_nest--;
-
-/* Indicate that an object has been written. */
-      ret = 1;
-
-/* Now deal with cases where we are writing to a FitsChan in which AST 
-   objects are encoded using any of the supported foreign encodings... */
-   } else {
-
-/* Only proceed if the supplied object is a FrameSet. */
-      if( astIsAFrameSet( object ) ){
-
-/* Note the number of pixel (i.e. Base Frame) axes, and allocate memory to 
-   hold the image dimensions. */
-         naxis = astGetNin( (AstFrameSet *) object );
-         dim = (double *) astMalloc( sizeof(double)*naxis );
-         if( dim ){
-
-/* Note the image dimensions, if known. If not, store AST__BAD values. */
-            for( i = 0; i < naxis; i++ ){
-               if( !astGetFitsF( this, FormatKey( "NAXIS", i + 1, -1, ' ', status ), 
-                                 dim + i ) ) dim[ i ] = AST__BAD;
-            }
-
-/* Add a new current Frame into the FrameSet which increases the chances of 
-   the requested encoding being usable. The index of the original current 
-   Frame is returned, or AST__NOFRAME if no new Frame was added. */
-            icurr = AddEncodingFrame( this, (AstFrameSet *) object, 
-                                      encoding, method, class, status );
-
-/* Extract the required information from the FrameSet into a standard
-   intermediary structure called a FitsStore. The indices of any
-   celestial axes are returned. */
-            store = FsetToStore( this, (AstFrameSet *) object, naxis, dim,
-                                 method, class, status );
-
-/* Remove the Frame (if any) added above, and re-instate the original current 
-   Frame. */
-            if( icurr != AST__NOFRAME ) {
-               astRemoveFrame( (AstFrameSet *) object, AST__CURRENT );
-               astSetCurrent( (AstFrameSet *) object, icurr );
-            }
-
-/* If the FrameSet cannot be described in terms of any of the supported
-   FITS encodings, a null pointer will have been returned. */
-            if( store ){
-
-/* Now put header cards describing the contents of the FitsStore into the 
-   supplied FitsChan, using the requested encoding. Zero or one is
-   returned depending on whether the information could be encoded. */
-               ret = FitsFromStore( this, store, encoding, dim,
-                                    (AstFrameSet *) object, method, class, status );
-
-/* Release the resources used by the FitsStore. */
-               store = FreeStore( store, status );      
-
-/* If the Object was written to the FitsChan, set the current card to
-   end-of-file. */
-               if( ret ) astSetCard( this, INT_MAX );
-            }
-
-/* Free workspace holding image dimensions */
-            dim = (double *) astFree( (void *) dim );
-         }
-      }
-   }
-
-/* If an error has occurred, return zero and remove any new cards added
-   to the FitsCHan by this call. */
-   if( !astOK ) ret = 0;
-
-/* Clear the new flag associated with cards which have been added to the 
-   FitsChan as a result of this function. If the object was not added 
-   succesfully to the FitsChan, remove any cards which were added before 
-   the error was discovered. */
-   FixNew( this, NEW1, !ret, method, class, status );
-   FixNew( this, NEW2, !ret, method, class, status );
-
-/* Indicate that all cards added to the FitsChan from now on should not be
-   marked as "new". */
-   mark_new = 0;
-
-/* If no object was written, re-instate the original current card. */
-   if( !ret ) astSetCard( this, card0 );
-
-/* Return the answer. */
-   return ret;
-}
-
-static void WriteBegin( AstChannel *this_channel, const char *class,
-                        const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteBegin
-
-*  Purpose:
-*     Write a "Begin" data item to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteBegin( AstChannel *this, const char *class,
-*                      const char *comment )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected astWriteBegin
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function writes a "Begin" data item to the data sink
-*     associated with a FitsChan, so as to begin the output of a new
-*     Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        name of the class to which the Object belongs.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the "Begin"
-*        item. Normally, this will describe the purpose of the Object.
-
-*  Notes:
-*     - The comment supplied may not actually be used, depending on
-*     the nature of the FitsChan supplied.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char buff[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ];
-                                 /* Character buffer */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Increment the indentation level for comments. */
-   current_indent += INDENT_INC;
-
-/* If we are not beginning a top-level Object definition, and helpful
-   information has not been suppressed, generate an indented comment
-   to mark the "Begin" item and write it to the FitsChan as a comment
-   card with a blank keyword. */
-   if ( write_nest && ( astGetFull( this ) >= 0 ) ) {
-      MakeIndentedComment( current_indent, '+', "Beginning of ", class, buff, status );
-      astSetFitsCom( this, "        ", buff, 0 );
-   }
-
-/* Create a unique FITS keyword for this "Begin" item, basing it on
-   "BEGAST". */
-   CreateKeyword( this, "BEGAST", keyword, status );
-
-/* Generate a pre-quoted version of the class name. */
-   PreQuote( class, buff, status );
-
-/* Write the "Begin" item to the FitsChan as a keyword and string
-   value. */
-   astSetFitsS( this, keyword, buff,
-                     astGetComment( this ) ? comment : NULL, 0 );
-
-/* Clear the count of items written. */
-   items_written = 0;
-}
-
-static void WriteDouble( AstChannel *this_channel, const char *name,
-                         int set, int helpful,
-                         double value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteDouble
-
-*  Purpose:
-*     Write a double value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteDouble( AstChannel *this, const char *name,
-*                       int set, int helpful,
-*                       double value, const char *comment )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected
-*     astWriteDouble method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named double value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a FitsChan. It is intended for use by class "Dump"
-*     functions when writing out class information which will
-*     subsequently be re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        FitsChan's Full attribute is set - either to permit all
-*        values to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        The value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the FitsChan supplied and the setting of its
-*        Comm attribute.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
-      CreateKeyword( this, name, keyword, status );
-
-/* Write the value to the FitsChan as a keyword and value */
-      astSetFitsF( this, keyword, value,
-                       astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is not "set", replace the card just written by a COMMENT
-   card containing the text of the card as the comment. */
-      if( !set ) MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-
-/* Increment the count of items written. */
-      items_written++;
-   }
-}
-
-static void WriteEnd( AstChannel *this_channel, const char *class, int *status ) {
-/*
-*  Name:
-*     WriteEnd
-
-*  Purpose:
-*     Write an "End" data item to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteEnd( AstChannel *this, const char *class )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected astWriteEnd
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function writes an "End" data item to the data sink
-*     associated with a FitsChan. This item delimits the end of an
-*     Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        class name of the Object whose definition is being terminated
-*        by the "End" item.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char buff[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ];
-                                 /* Character buffer */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Create a unique FITS keyword for this "End" item, basing it on
-   "ENDAST". */
-   CreateKeyword( this, "ENDAST", keyword, status );
-
-/* Generate a pre-quoted version of the class name. */
-   PreQuote( class, buff, status );
-
-/* Write the "End" item to the FitsChan as a keyword and string
-   value. */
-   astSetFitsS( this, keyword, buff,
-                     astGetComment( this ) ? "End of object definition" : NULL,
-                     0 );
-
-/* If we are not ending a top-level Object definition, and helpful
-   information has not been suppressed, generate an indented comment
-   to mark the "End" item and write it to the FitsChan as a comment
-   card with a blank keyword. */
-   if ( write_nest && ( astGetFull( this ) >= 0 ) ) {
-      MakeIndentedComment( current_indent, '-', "End of ", class, buff, status );
-      astSetFitsCom( this, "        ", buff, 0 );
-   }
-
-/* Decrement the indentation level for comments. */
-   current_indent -= INDENT_INC;
-
-}
-
-static void WriteInt( AstChannel *this_channel, const char *name,
-                      int set, int helpful,
-                      int value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteInt
-
-*  Purpose:
-*     Write an int value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteInt( AstChannel *this, const char *name,
-*                    int set, int helpful,
-*                    int value, const char *comment )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected
-*     astWriteInt method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named int value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a FitsChan. It is intended for use by class "Dump"
-*     functions when writing out class information which will
-*     subsequently be re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        FitsChan's Full attribute is set - either to permit all
-*        values to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        The value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the FitsChan supplied and the setting of its
-*        Comm attribute.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
-      CreateKeyword( this, name, keyword, status );
-
-/* Write the value to the FitsChan as a keyword and value */
-      astSetFitsI( this, keyword, value,
-                   astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is not "set", replace the card just written by a COMMENT
-   card containing the text of the card as the comment. */
-      if( !set ) MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-
-/* Increment the count of items written. */
-      items_written++;
-   }
-}
-
-static void WriteIsA( AstChannel *this_channel, const char *class,
-                      const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteIsA
-
-*  Purpose:
-*     Write an "IsA" data item to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteIsA( AstChannel *this, const char *class,
-*                    const char *comment )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected astWriteIsA
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function writes an "IsA" data item to the data sink
-*     associated with a FitsChan. This item delimits the end of the
-*     data associated with the instance variables of a class, as part
-*     of an overall Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        name of the class whose data are terminated by the "IsA"
-*        item.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the "IsA"
-*        item. Normally, this will describe the purpose of the class
-*        whose data are being terminated.
-
-*  Notes:
-*     - The comment supplied may not actually be used, depending on
-*     the nature of the FitsChan supplied.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char buff[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN + 1 ];
-                                 /* Character buffer */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Output an "IsA" item only if there has been at least one item
-   written since the last "Begin" or "IsA" item, or if the Full
-   attribute for the Channel is greater than zero (requesting maximum
-   information). */
-   if ( items_written || astGetFull( this ) > 0 ) {
-
-/* Create a unique FITS keyword for this "IsA" item, basing it on
-   "ISA". */
-      CreateKeyword( this, "ISA", keyword, status );
-
-/* Generate a pre-quoted version of the class name. */
-      PreQuote( class, buff, status );
-
-/* Write the "IsA" item to the FitsChan as a keyword and string
-   value. */
-      astSetFitsS( this, keyword, buff,
-                        astGetComment( this ) ? comment : NULL, 0 );
-
-/* If helpful information has not been suppressed, generate an
-   indented comment to mark the "IsA" item and write it to the
-   FitsChan as a comment card with a blank keyword. */
-      if ( astGetFull( this ) >= 0 ) {
-         MakeIndentedComment( current_indent, '.', "Class boundary", "",
-                              buff, status );
-         astSetFitsCom( this, "        ", buff, 0 );
-      }
-   }
-
-/* Clear the count of items written. */
-   items_written = 0;
-}
-
-static void WriteObject( AstChannel *this_channel, const char *name,
-                         int set, int helpful,
-                         AstObject *value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteObject
-
-*  Purpose:
-*     Write an Object value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteObject( AstChannel *this, const char *name,
-*                       int set, int helpful,
-*                       AstObject *value, const char *comment )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected
-*     astWriteObject method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named Object value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a FitsChan. It is intended for use by class "Dump"
-*     functions when writing out class information which will
-*     subsequently be re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        FitsChan's Full attribute is set - either to permit all
-*        values to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        A pointer to the Object to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the FitsChan supplied and the setting of its
-*        Comm attribute.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
-      CreateKeyword( this, name, keyword, status );
-
-/* Write the value to the FitsChan as a keyword and a blank string value, 
-   not pre-quoted (this "null" value indicates that an Object description 
-   follows). */
-      astSetFitsS( this, keyword, "",
-                        astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is "set", write out the Object description. */
-      if ( set ) {
-         astWrite( this, value );
-
-/* If the value is not set, replace the card just written to the FitsChan
-   by COMENT card containing the keyword and blank string value (do not
-   write out the Object description). */
-      } else {
-         MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-      }
-
-/* Increment the count of items written. */
-      items_written++;
-   }
-}
-
-static void WriteToSink( AstFitsChan *this, int *status ){
-/*
-*  Name:
-*     WriteToSink
-
-*  Purpose:
-*     Write the contents of the FitsChan out through the sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteToSink( AstFitsChan *this, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     Each card in the FitsChan is passed in turn to the sink function
-*     specified when the FitsChan was created. If no sink function was 
-*     provided, the cards are not written out. Cards marked as having been 
-*     read into an AST object are not written out.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The current card is left unchanged.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Declare the thread specific global data */
-   char card[ AST__FITSCHAN_FITSCARDLEN + 1]; /* Buffer for header card */
-   int icard;                   /* Current card index on entry */
-   int old_ignore_used;         /* Original value of external variable ignore_used */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Only proceed if a sink function and wrapper were supplied. */
-   if( this->sink && this->sink_wrap ){
-
-/* Store the current card index. */
-      icard = astGetCard( this );
-
-/* Indicate that cards which have been read into an AST object should skipped 
-   over by the functions which navigate the linked list of cards. */
-      old_ignore_used = ignore_used;
-      ignore_used = 1;
-
-/* Ensure that the first card in the FitsChan will be the next one to be
-   read. */
-      astSetCard( this, 1 );
-
-/* Loop round obtaining and writing out each card, until all cards have been 
-   processed. */
-      while( !astFitsEof( this ) && astOK ){
-
-/* Get the current card, and write it out through the sink function.
-   The call to astFindFits increments the current card. */
-         if( astFindFits( this, "%f", card, 1 ) ) {
-
-/* The sink function is an externally supplied function which may not be 
-   thread-safe, so lock a mutex first. */
-            LOCK_MUTEX3;
-            ( *this->sink_wrap )( *this->sink, card, status );
-            UNLOCK_MUTEX3;
-         }
-      }
-
-/* Re-instate the original flag indicating if cards marked as having been 
-   read should be skipped over. */
-      ignore_used = old_ignore_used;
-
-/* Set the current card index back to what it was on entry. */
-      astSetCard( this, icard );
-   }
-}
-
-static void WriteString( AstChannel *this_channel, const char *name,
-                         int set, int helpful,
-                         const char *value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteString
-
-*  Purpose:
-*     Write a string value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     void WriteString( AstChannel *this, const char *name,
-*                       int set, int helpful,
-*                       const char *value, const char *comment )
-
-*  Class Membership:
-*     FitsChan member function (over-rides the protected
-*     astWriteString method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named string value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a FitsChan. It is intended for use by class "Dump"
-*     functions when writing out class information which will
-*     subsequently be re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        FitsChan's Full attribute is set - either to permit all
-*        values to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        Pointer to a constant null-terminated string containing the
-*        value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the FitsChan supplied and the setting of its
-*        Comm attribute.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure. */
-   char *c;                      /* Pointer to next buffer character */
-   char buff1[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ]; /* Buffer for a single substring */
-   char buff2[ AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 3 ]; /* Buffer for pre-quoted string */
-   char cc;                      /* Next character */
-   char keyword[ FITSNAMLEN + 1 ]; /* Buffer for FITS keyword */
-   const char *start;            /* Pointer to start of substring */
-   int first;                    /* Is this the first sub-string? */
-   int nc;                       /* No. of available columns remaining */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_channel;
-
-/* Use the "set" and "helpful" flags, along with the FitsChan's
-   attributes to decide whether this value should actually be
-   written. */
-   if ( Use( this, set, helpful, status ) ) {
-
-/* Create a unique FITS keyword from the name supplied. */
-      CreateKeyword( this, name, keyword, status );
-
-/* Store a pointer to the start of the next sub-string (i.e. the
-   beggining of the string), and then loop round until the end of the
-   string is reached. */
-      start = value;
-      first = 1;
-      while( *start && astOK ){
-
-/* Store the number of characters available in the 80 column header card 
-   for the next substring, leaving room for the "= " string at the start,
-   and the delimiting quotes. Also reserve 2 characters to allow for the
-   possibility of double quotes being needed to protect trailing white space
-   (see function PreQuote). */
-         nc = AST__FITSCHAN_FITSCARDLEN - FITSNAMLEN - 6;
-
-/* If this is the first sub-string reserve room for any comment. */
-         if( first ){
-            if( comment && comment[0] ) nc -= ChrLen( comment, status ) + 3;
-
-/* If the first card will be turned into a comment card, we need to leave room
-   for the keyword name and equals sign, etc, within the 80 columns. */
-            if( !set ) nc -= FITSNAMLEN + 5;
-         }
-
-/* We need to check the sub-string for single quotes since these will
-   take up 2 characters each instead of 1 when encoded since single quotes
-   within a string are doubled. Search through from the starting
-   character, copying the sub-string into a buffer, and reducing the number 
-   of available characters remaining in the card for each character. */
-         c = buff1;
-         while( *start && nc > 0 ){
-            cc = *(start++);
-            *(c++) = cc;
-
-            if( cc == '\'' ) {
-               nc -= 2;
-            } else {
-               nc -= 1;
-            }
-         }
-
-/* If the last character in the substring was a single quote, there may
-   not have been room for the extra quote which is added when the
-   sub-string is encoded. In this case we need to back up a character in
-   order to remove the single quote frin this substring and move it into 
-   the next sub-string. */
-         if( nc < 0 ){
-            start--;
-            c--;
-         }
- 
-/* If the supplied value has not been exhausted, append an ampersand to
-   the string. In this case we need to move the last character in the
-   substring into the next substring to make room for the ampersand. */
-         if( *start ) {
-            start--;
-            c--;
-            *(c++) = '&';
-         }
-
-/* Terminate the buffer. */
-         *c = 0;         
-
-/* The FITS standard considers trailing white space is be insignificant, 
-   and so we need to guard against external applications throwing away
-   significant trailing white space. This is done by encosing the string, 
-   including trailing white space, in double quotes. */
-         PreQuote( buff1, buff2, status );
-
-/* On the first pass through this loop, write the value to the FitsChan as 
-   a keyword and value */
-         if( first ){
-            astSetFitsS( this, keyword, buff2,
-                         astGetComment( this ) ? comment : NULL, 0 );
-
-/* If the value is not "set", replace the card just written by a COMMENT
-   card containing the text of the card as the comment. */
-            if( !set ) MakeIntoComment( this, "astWrite", astGetClass( this ), status );
-
-/* On subsequent passes through the loop, store the string using a CONTINUE 
-   keyword, with type AST__CONTINUE (this type is like AST__STRING but is 
-   formatted without an equals sign). */
-         } else {
-            astSetFitsCN( this, "CONTINUE", buff2, NULL, 0 );
-         }
-
-         first = 0;
-      }
-
-/* Increment the count of items written. */
-      items_written++;
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Card. */
-/* ===== */
-/*
-*att++
-*  Name:
-*     Card
-
-*  Purpose:
-*     Index of current FITS card in a FitsChan.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute gives the index of the "current" FITS header card
-*     within a FitsChan, the first card having an index of 1. The
-c     choice of current card affects the behaviour of functions that
-f     choice of current card affects the behaviour of routines that
-c     access the contents of the FitsChan, such as astDelFits,
-c     astFindFits and astPutFits.
-f     access the contents of the FitsChan, such as AST_DELFITS,
-f     AST_FINDFITS and AST_PUTFITS.
-*
-*     A value assigned to Card will position the FitsChan at any
-*     desired point, so that a particular card within it can be
-*     accessed. Alternatively, the value of Card may be enquired in
-*     order to determine the current position of a FitsChan.
-*
-*     The default value of Card is 1. This means that clearing
-c     this attribute (using astClear) effectively "rewinds" the
-f     this attribute (using AST_CLEAR) effectively "rewinds" the
-*     FitsChan, so that the first card is accessed next.  If Card is
-*     set to a value which exceeds the total number of cards in the
-*     FitsChan (as given by its Ncard attribute), it is regarded as
-*     pointing at the "end-of-file". In this case, the value returned
-*     in response to an enquiry is always one more than the number of
-*     cards in the FitsChan.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-
-/* Encoding. */
-/* ========= */
-/*
-*att++
-*  Name:
-*     Encoding
-
-*  Purpose:
-*     System for encoding Objects as FITS headers.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the encoding system to use when AST
-*     Objects are stored as FITS header cards in a FitsChan. It
-c     affects the behaviour of the astWrite and astRead functions when
-f     affects the behaviour of the AST_WRITE and AST_READ routines when
-*     they are used to transfer any AST Object to or from an external
-*     representation consisting of FITS header cards (i.e. whenever a
-*     write or read operation is performed using a FitsChan as the I/O
-*     Channel).
-*
-*     There are several ways (conventions) by which coordinate system
-*     information may be represented in the form of FITS headers and
-*     the Encoding attribute is used to specify which of these should
-*     be used. The encoding options available are outlined in the
-*     "Encodings Available" section below, and in more detail in the
-*     sections which follow.
-*
-*     Encoding systems differ in the range of possible Objects
-*     (e.g. classes) they can represent, in the restrictions they
-*     place on these Objects (e.g. compatibility with some
-*     externally-defined coordinate system model) and in the number of
-*     Objects that can be stored together in any particular set of
-*     FITS header cards (e.g. multiple Objects, or only a single
-*     Object). The choice of encoding also affects the range of
-*     external applications which can potentially read and interpret
-*     the FITS header cards produced.
-*
-*     The encoding options available are not necessarily mutually
-*     exclusive, and it may sometimes be possible to store multiple
-*     Objects (or the same Object several times) using different
-*     encodings within the same set of FITS header cards. This
-*     possibility increases the likelihood of other applications being
-*     able to read and interpret the information.
-*
-*     By default, a FitsChan will attempt to determine which encoding
-*     system is already in use, and will set the default Encoding
-*     value accordingly (so that subsequent I/O operations adopt the
-*     same conventions). It does this by looking for certain critical
-*     FITS keywords which only occur in particular encodings. For
-*     details of how this works, see the "Choice of Default Encoding"
-*     section below. If you wish to ensure that a particular encoding
-*     system is used, independently of any FITS cards already present,
-*     you should set an explicit Encoding value yourself.
-
-*  Encodings Available:
-*     The Encoding attribute can take any of the following (case
-*     insensitive) string values to select the corresponding encoding
-*     system:
-*
-*     - "DSS": Encodes coordinate system information in FITS header
-*     cards using the convention developed at the Space Telescope
-*     Science Institute (STScI) for the Digitised Sky Survey (DSS)
-*     astrometric plate calibrations. The main advantages of this
-*     encoding are that FITS images which use it are widely available
-*     and it is understood by a number of important and
-*     well-established astronomy applications. For further details,
-*     see the section "The DSS Encoding" below.
-*
-*     - "FITS-WCS": Encodes coordinate system information in FITS
-*     header cards using the conventions described in the FITS
-*     world coordinate system (FITS-WCS) papers by E.W. Greisen, 
-*     M. Calabretta, et al. The main advantages of this encoding are that 
-*     it should be understood by any FITS-WCS compliant application and 
-*     is likely to be adopted widely for FITS data in future. For further 
-*     details, see the section "The FITS-WCS Encoding" below.
-*
-*     - "FITS-PC": Encodes coordinate system information in FITS
-*     header cards using the conventions described in an earlier draft
-*     of the FITS world coordinate system papers by E.W. Greisen and
-*     M. Calabretta. This encoding uses a combination of CDELTi and
-*     PCiiijjj keywords to describe the scale and rotation of the pixel
-*     axes. This encoding is included to support existing data and  
-*     software which uses these now superceded conventions. In general,
-*     the "FITS-WCS" encoding (which uses CDi_j or PCi_j keywords to 
-*     describe the scale and rotation) should be used in preference to 
-*     "FITS-PC".
-*
-*     - "FITS-IRAF": Encodes coordinate system information in FITS
-*     header cards using the conventions described in the document
-*     "World Coordinate Systems Representations Within the FITS
-*     Format" by R.J. Hanisch and D.G. Wells, 1988.  This encoding is
-*     currently employed by the IRAF data analysis facility, so its
-*     use will facilitate data exchange with IRAF. Its main advantages
-*     are that it is a stable convention which approximates to a
-*     subset of the propsed FITS-WCS encoding (above). This makes it
-*     suitable as an interim method for storing coordinate system
-*     information in FITS headers until the FITS-WCS encoding becomes
-*     stable. Since many datasets currently use the FITS-IRAF
-*     encoding, conversion of data from FITS-IRAF to the final form of
-*     FITS-WCS is likely to be well supported.
-*
-*     - "FITS-AIPS": Encodes coordinate system information in FITS
-*     header cards using the conventions originally introduced by the 
-*     AIPS data analysis facility. This is base on the use of CDELTi and
-*     CROTAi keuwords to desribe the scale and rotation of each axis.
-*     These conventions have been superceded but are still widely used.
-*
-*     - "FITS-AIPS++": Encodes coordinate system information in FITS
-*     header cards using the conventions used by the AIPS++ project.
-*     This is an extension of FITS-AIPS which includes some of the
-*     features of FITS-IRAF and FITS-PC.
-*
-*     - "FITS-CLASS": Encodes coordinate system information in FITS
-*     header cards using the conventions used by the CLASS project.
-*     CLASS is a software package for reducing single-dish radio and
-*     sub-mm spectroscopic data. See the section "CLASS FITS format" at
-*     http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/.
-*
-*     - "NATIVE": Encodes AST Objects in FITS header cards using a
-*     convention which is private to the AST library (but adheres to
-*     the general FITS standard) and which uses FITS keywords that
-*     will not clash with other encoding systems. The main advantages
-*     of this are that any class of AST Object may be encoded, and any
-*     (reasonable) number of Objects may be stored sequentially in the
-*     same FITS header. This makes FITS headers an almost loss-less
-*     communication path for passing AST Objects between applications
-*     (although all such applications must, of course, make use of the
-*     AST library to interpret the information). For further details,
-*     see the section "The NATIVE Encoding" below.
-
-*  Choice of Default Encoding:
-*     If the Encoding attribute of a FitsChan is not set, the default
-*     value it takes is determined by the presence of certain critical
-*     FITS keywords within the FitsChan. The sequence of decisions
-*     used to arrive at the default value is as follows:
-*
-*     - If the FitsChan contains any keywords beginning with the
-*     string "BEGAST", then NATIVE encoding is used,
-*     - Otherwise, FITS-CLASS is used if the FitsChan contains a DELTAV
-*     keyword and a keyword of the form VELO-xxx, where xxx indicates one
-*     of the rest frames used by class (e.g. "VELO-LSR").
-*     - Otherwise, if the FitsChan contains a CTYPE keyword which
-*     represents a spectral axis using the conventions of the AIPS and
-*     AIPS++ projects (e.g. "FELO-LSR", etc), then one of FITS-AIPS or 
-*     FITS-AIPS++ encoding is used. FITS-AIPS++ is used if any of the
-*     keywords CDi_j, PROJP, LONPOLE or LATPOLE are
-*     found in the FitsChan. Otherwise FITS-AIPS is used.
-*     - Otherwise, if the FitsChan contains a keyword of the form
-*     "PCiiijjj", where "i" and "j" are single digits, then
-*     FITS-PC encoding is used,
-*     - Otherwise, if the FitsChan contains a keyword of the form
-*     "CDiiijjj", where "i" and "j" are single digits, then
-*     FITS-IRAF encoding is used,
-*     - Otherwise, if the FitsChan contains a keyword of the form
-*     "CDi_j", and at least one of RADECSYS, PROJPi, or CjVALi
-*     where "i" and "j" are single digits, then FITS-IRAF encoding is 
-*     used.
-*     - Otherwise, if the FitsChan contains any keywords of the form
-*     PROJPi, CjVALi or RADECSYS, where "i" and "j" are single digits, 
-*     then FITS-PC encoding is used.
-*     - Otherwise, if the FitsChan contains a keyword of the form
-*     CROTAi, where "i" is a single digit, then FITS-AIPS encoding is 
-*     used.
-*     - Otherwise, if the FitsChan contains a keyword of the form
-*     CRVALi, where "i" is a single digit, then FITS-WCS encoding is 
-*     used.
-*     - Otherwise, if the FitsChan contains the "PLTRAH" keyword, then
-*     DSS encoding is used,
-*     - Otherwise, if none of these conditions is met (as would be the
-*     case when using an empty FitsChan), then NATIVE encoding is
-*     used.
-*
-*     Except for the NATIVE and DSS encodings, all the above checks 
-*     also require that the header contains at least one CTYPE, CRPIX and
-*     CRVAL keyword (otherwise the checking process continues to the next
-*     case). 
-*
-*     Setting an explicit value for the Encoding attribute always
-*     over-rides this default behaviour.
-*
-*     Note that when writing information to a FitsChan, the choice of
-*     encoding will depend greatly on the type of application you
-*     expect to be reading the information in future. If you do not
-*     know this, there may sometimes be an advantage in writing the
-*     information several times, using a different encoding on each
-*     occasion.
-
-*  The DSS Encoding:
-*     The DSS encoding uses FITS header cards to store a multi-term
-*     polynomial which relates pixel positions on a digitised
-*     photographic plate to celestial coordinates (right ascension and
-*     declination). This encoding may only be used to store a single
-*     AST Object in any set of FITS header cards, and that Object must
-*     be a FrameSet which conforms to the STScI/DSS coordinate system
-*     model (this means the Mapping which relates its base and current 
-*     Frames must include either a DssMap or a WcsMap with type 
-*     AST__TAN or AST__TPN).
-*
-c     When reading a DSS encoded Object (using astRead), the FitsChan
-f     When reading a DSS encoded Object (using AST_READ), the FitsChan
-*     concerned must initially be positioned at the first card (its
-*     Card attribute must equal 1) and the result of the read, if
-*     successful, will always be a pointer to a FrameSet. The base
-*     Frame of this FrameSet represents DSS pixel coordinates, and the
-*     current Frame represents DSS celestial coordinates. Such a read
-*     is always destructive and causes the FITS header cards required
-*     for the construction of the FrameSet to be removed from the
-*     FitsChan, which is then left positioned at the "end-of-file". A
-*     subsequent read using the same encoding will therefore not
-*     return another FrameSet, even if the FitsChan is rewound.
-*
-c     When astWrite is used to store a FrameSet using DSS encoding,
-f     When AST_WRITE is used to store a FrameSet using DSS encoding,
-*     an attempt is first made to simplify the FrameSet to see if it
-*     conforms to the DSS model.  Specifically, the current Frame must 
-*     be a FK5 SkyFrame; the projection must be a tangent plane 
-*     (gnomonic) projection with polynomial corrections conforming to 
-*     DSS requirements, and north must be parallel to the second base
-*     Frame axis.
-*
-*     If the simplification process succeeds, a description of the
-*     FrameSet is written to the FitsChan using appropriate DSS FITS
-*     header cards. The base Frame of the FrameSet is used to form the
-*     DSS pixel coordinate system and the current Frame gives the DSS
-*     celestial coordinate system.  A successful write operation will
-*     over-write any existing DSS encoded data in the FitsChan, but
-*     will not affect other (non-DSS) header cards. If a destructive
-*     read of a DSS encoded Object has previously occurred, then an
-*     attempt will be made to store the FITS header cards back in
-*     their original locations.
-*
-*     If an attempt to simplify a FrameSet to conform to the DSS model
-*     fails (or if the Object supplied is not a FrameSet), then no
-c     data will be written to the FitsChan and astWrite will return
-f     data will be written to the FitsChan and AST_WRITE will return
-*     zero. No error will result.
-
-*  The FITS-WCS Encoding:
-*     The FITS-WCS convention uses FITS header cards to describe the
-*     relationship between pixels in an image (not necessarily
-*     2-dimensional) and one or more related "world coordinate systems".
-*     The FITS-WCS encoding may only be used to store a single AST Object 
-*     in any set of FITS header cards, and that Object must be a FrameSet 
-*     which conforms to the FITS-WCS model (the FrameSet may, however, 
-*     contain multiple Frames which will be result in multiple FITS 
-*     "alternate axis descriptions"). Details of the use made by this 
-*     Encoding of the conventions described in the FITS-WCS papers are 
-*     given in the appendix "FITS-WCS Coverage" of this document. A few
-*     main points are  described below.
-*
-*     The rotation and scaling of the intermediate world coordinate system
-*     can be specified using either "CDi_j" keywords, or "PCi_j" together
-*     with "CDELTi" keywords. When writing a FrameSet to a FitsChan, the
-*     the value of the CDMatrix attribute of the FitsChan determines
-*     which system is used.
-*
-*     In addition, this encoding supports the "TAN with polynomial correction 
-*     terms" projection which was included in a draft of the FITS-WCS paper, 
-*     but was not present in the final version. A "TAN with polynomial 
-*     correction terms" projection is represented using a WcsMap with type 
-*     AST__TPN (rather than AST__TAN which is used to represent simple
-*     TAN projections). When reading a FITS header, a CTYPE keyword value 
-*     including a "-TAN" code results in an AST__TPN projection if there are 
-*     any projection parameters (given by the PVi_m keywords) associated with 
-*     the latitude axis, or if there are projection parameters associated 
-*     with the longitude axis for m greater than 4. When writing a
-*     FrameSet to a FITS header, an AST__TPN projection gives rise to a
-*     CTYPE value including the normal "-TAN" code, but the projection
-*     parameters are stored in keywords with names "QVi_m", instead of the
-*     usual "PVi_m". Since these QV parameters are not part of the
-*     FITS-WCS standard they will be ignored by other non-AST software,
-*     resulting in the WCS being interpreted as a simple TAN projection
-*     without any corrections. This should be seen as an interim solution
-*     until such time as an agreed method for describing projection
-*     distortions within FITS-WCS has been published.
-*
-*     AST extends the range of celestial coordinate sytstems which may be
-*     described using this encoding by inclusion of the allowing the use of
-*     "AZ--" and "EL--" as the coordinate specification within CTYPE
-*     values. These form a longitude/latitude pair of axes which describe
-*     azimuth and elevation. The geographic position of the observer
-*     should be supplied using the OBSGEO-X/Y/Z keywords described in FITS-WCS
-*     paper III. Currently, a simple model is used which includes diurnal
-*     aberration, but ignores atmospheric refraction, polar motion, etc. 
-*     These may be added in a leter release.
-*
-c     When reading a FITS-WCS encoded Object (using astRead), the FitsChan
-f     When reading a FITS-WCS encoded Object (using AST_READ), the FitsChan
-*     concerned must initially be positioned at the first card (its
-*     Card attribute must equal 1) and the result of the read, if
-*     successful, will always be a pointer to a FrameSet. The base
-*     Frame of this FrameSet represents FITS-WCS pixel coordinates,
-*     and the current Frame represents the physical coordinate system
-*     described by the FITS-WCS primary axis descriptions. If
-*     secondary axis descriptions are also present, then the FrameSet
-*     may contain additional (non-current) Frames which represent
-*     these.  Such a read is always destructive and causes the FITS
-*     header cards required for the construction of the FrameSet to be
-*     removed from the FitsChan, which is then left positioned at the
-*     "end-of-file". A subsequent read using the same encoding will
-*     therefore not return another FrameSet, even if the FitsChan is
-*     rewound.
-*
-c     When astWrite is used to store a FrameSet using FITS-WCS
-f     When AST_WRITE is used to store a FrameSet using FITS-WCS
-*     encoding, an attempt is first made to simplify the FrameSet to
-*     see if it conforms to the FITS-WCS model. If this simplification
-*     process succeeds (as it often should, as the model is reasonably
-*     flexible), a description of the FrameSet is written to the
-*     FitsChan using appropriate FITS header cards. The base Frame of
-*     the FrameSet is used to form the FITS-WCS pixel coordinate
-*     system and the current Frame gives the physical coordinate
-*     system to be described by the FITS-WCS primary axis
-*     descriptions.  Any additional Frames in the FrameSet may be used
-*     to construct secondary axis descriptions, where appropriate.
-*
-*     A successful write operation will over-write any existing
-*     FITS-WCS encoded data in the FitsChan, but will not affect other
-*     (non-FITS-WCS) header cards. If a destructive read of a FITS-WCS
-*     encoded Object has previously occurred, then an attempt will be
-*     made to store the FITS header cards back in their original
-*     locations. Otherwise, the new cards will be inserted following
-*     any other FITS-WCS related header cards present or, failing
-*     that, in front of the current card (as given by the Card
-*     attribute).
-*
-*     If an attempt to simplify a FrameSet to conform to the FITS-WCS
-*     model fails (or if the Object supplied is not a FrameSet), then
-c     no data will be written to the FitsChan and astWrite will
-f     no data will be written to the FitsChan and AST_WRITE will
-*     return zero. No error will result.
-
-*  The FITS-IRAF Encoding:
-*     The FITS-IRAF encoding can, for most purposes, be considered as
-*     a subset of the FITS-WCS encoding (above), although it differs
-*     in the details of the FITS keywords used. It is used in exactly
-*     the same way and has the same restrictions, but with the
-*     addition of the following:
-*
-*     - The only celestial coordinate systems that may be represented
-*     are equatorial, galactic and ecliptic,
-*     - Sky projections can be represented only if any associated
-*     projection parameters are set to their default values.
-*     - Secondary axis descriptions are not supported, so when writing
-*     a FrameSet to a FitsChan, only information from the base and
-*     current Frames will be stored.
-*
-*     Note that this encoding is provided mainly as an interim measure to
-*     provide a more stable alternative to the FITS-WCS encoding until the
-*     FITS standard for encoding WCS information is finalised.  The name
-*     "FITS-IRAF" indicates the general keyword conventions used and does
-*     not imply that this encoding will necessarily support all features of
-*     the WCS scheme used by IRAF software. Nevertheless, an attempt has
-*     been made to support a few such features where they are known to be
-*     used by important sources of data.
-*
-*     When writing a FrameSet using the FITS-IRAF encoding, axis rotations
-*     are specified by a matrix of FITS keywords of the form "CDi_j", where
-*     "i" and "j" are single digits. The alternative form "CDiiijjj", which
-*     is also in use, is recognised when reading an Object, but is never
-*     written.
-*
-*     In addition, the experimental IRAF "ZPX" and "TNX" sky projections will 
-*     be accepted when reading, but will never be written (the corresponding
-*     FITS "ZPN" or "distorted TAN" projection being used instead). However, 
-*     there are restrictions on the use of these experimental projections. 
-*     For "ZPX", longitude and latitude correction surfaces (appearing as
-*     "lngcor" or "latcor" terms in the IRAF-specific "WAT" keywords) are
-*     not supported. For "TNX" projections, only cubic surfaces encoded as 
-*     simple polynomials with "half cross-terms" are supported. If an
-*     un-usable "TNX" or "ZPX" projection is encountered while reading 
-*     from a FitsChan, a simpler form of TAN or ZPN projection is used
-*     which ignores the unsupported features and may therefore be
-*     inaccurate. If this happens, a warning message is added to the 
-*     contents of the FitsChan as a set of cards using the keyword "ASTWARN".
-*
-*     You should not normally attempt to mix the foreign FITS encodings within 
-*     the same FitsChan, since there is a risk that keyword clashes may occur.
-
-*  The FITS-PC Encoding:
-*     The FITS-PC encoding can, for most purposes, be considered as
-*     equivalent to the FITS-WCS encoding (above), although it differs
-*     in the details of the FITS keywords used. It is used in exactly
-*     the same way and has the same restrictions.
-
-*  The FITS-AIPS Encoding:
-*     The FITS-AIPS encoding can, for most purposes, be considered as
-*     equivalent to the FITS-WCS encoding (above), although it differs
-*     in the details of the FITS keywords used. It is used in exactly
-*     the same way and has the same restrictions, but with the
-*     addition of the following:
-*
-*     - The only celestial coordinate systems that may be represented
-*     are equatorial, galactic and ecliptic,
-*     - Spectral axes can only be represented if they represent
-*     frequency, radio velocity or optical velocity, and are linearly
-*     sampled in frequency. In addition, the standard of rest 
-*     must be LSRK, LSRD, barycentric or geocentric.
-*     - Sky projections can be represented only if any associated
-*     projection parameters are set to their default values.
-*     - The AIT, SFL and MER projections can only be written if the CRVAL 
-*     keywords are zero for both longitude and latitude axes.
-*     - Secondary axis descriptions are not supported, so when writing
-*     a FrameSet to a FitsChan, only information from the base and
-*     current Frames will be stored.
-*     - If there are more than 2 axes in the base and current Frames, any 
-*     rotation must be restricted to the celestial plane, and must involve 
-*     no shear.
-
-*  The FITS-AIPS++ Encoding:
-*     The FITS-AIPS++ encoding is based on the FITS-AIPS encoding, but
-*     includes some features of the FITS-IRAF and FITS-PC encodings. 
-*     Specifically, any celestial projections supported by FITS-PC may be 
-*     used, including those which require parameterisation, and the axis
-*     rotation and scaling may be specified using CDi_j keywords. When
-*     writing a FITS header, rotation will be specified using CROTA/CDELT
-*     keywords if possible, otherwise CDi_j keywords will be used instead.
-
-*  The FITS-CLASS Encoding:
-*     The FITS-CLASS encoding uses the conventions of the CLASS project.
-*     These are described in the section "Developer Manual"/"CLASS FITS
-*     Format" contained in the CLASS documentation at:
-*     
-*     http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html.
-*
-*     This encoding is similar to FITS-AIPS with the following restrictions:
-*
-*     - When a SpecFrame is created by reading a FITS-CLASS header, the 
-*       attributes describing the observer's position (ObsLat, ObsLon and
-*       ObsAlt) are left unset because the CLASS encoding does not specify 
-*       these values. Conversions to or from the topocentric standard of rest 
-*       will therefore be inaccurate (typically by up to about 0.5 km/s)
-*       unless suitable values are assigned to these attributes after the
-*       FrameSet has been created.
-*     - When writing a FrameSet to a FITS-CLASS header, the current Frame
-*       in the FrameSet must have at least 3 WCS axes, of which one must be 
-*       a linear spectral axis. The spectral axis in the created header will 
-*       always describe frequency. If the spectral axis in the supplied 
-*       FrameSet refers to some other system (e.g. radio velocity, etc),
-*       then it will be converted to frequency.
-*     - There must be a pair of celestial axes - either (RA,Dec) or 
-*       (GLON,GLAT). RA and Dec must be either FK4/B1950 or FK5/J2000.
-*     - A limited range of projection codes (TAN, ARC, STG, AIT, SFL, SIN) 
-*       can be used. For AIT and SFL, the reference point must be at the
-*       origin of longitude and latitude. For SIN, the associated projection
-*       parameters must both be zero.
-*     - No rotation of the celestial axes is allowed, unless the spatial
-*       axes are degenerate (i.e. cover only a single pixel).
-*     - The frequency axis in the created header will always describe
-*       frequency in the source rest frame. If the supplied FrameSet uses
-*       some other standard of rest then suitable conversion will be applied.
-*     - The source velocity must be defined. In other words, the SpecFrame 
-*       attributes SourceVel and SourceVRF must have been assigned values.
-*     - The frequency axis in a FITS-CLASS header does not represent
-*       absolute frequency, but instead represents offsets from the rest 
-*       frequency in the standard of rest of the source.
-*
-*     When writing a FrameSet out using FITS-CLASS encoding, the current
-*     Frame may be temporarily modified if this will allow the header
-*     to be produced. If this is done, the associated pixel->WCS Mapping
-*     will also be modified to take account of the changes to the Frame. 
-*     The modifications performed include re-ordering axes (WCS axes, not
-*     pixel axes), changing spectral coordinate system and standard of
-*     rest, changing the celestial coordinate system and reference equinox, 
-*     and changing axis units.
-
-*  The NATIVE Encoding:
-*     The NATIVE encoding may be used to store a description of any
-*     class of AST Object in the form of FITS header cards, and (for
-*     most practical purposes) any number of these Object descriptions
-*     may be stored within a single set of FITS cards. If multiple
-*     Object descriptions are stored, they are written and read
-*     sequentially. The NATIVE encoding makes use of unique FITS
-*     keywords which are designed not to clash with keywords that have
-*     already been used for other purposes (if a potential clash is
-*     detected, an alternative keyword is constructed to avoid the
-*     clash).
-*
-*     When reading a NATIVE encoded object from a FitsChan (using
-c     astRead), FITS header cards are read, starting at the current
-f     AST_READ), FITS header cards are read, starting at the current
-*     card (as determined by the Card attribute), until the start of
-*     the next Object description is found. This description is then
-*     read and converted into an AST Object, for which a pointer is
-*     returned. Such a read is always destructive and causes all the
-*     FITS header cards involved in the Object description to be
-*     removed from the FitsChan, which is left positioned at the
-*     following card.
-*
-*     The Object returned may be of any class, depending on the
-*     description that was read, and other AST routines may be used to
-*     validate it (for example, by examining its Class or ID attribute
-c     using astGetC). If further NATIVE encoded Object descriptions
-f     using AST_GETC). If further NATIVE encoded Object descriptions
-c     exist in the FitsChan, subsequent calls to astRead will return
-f     exist in the FitsChan, subsequent calls to AST_READ will return
-*     the Objects they describe in sequence (and destroy their
-*     descriptions) until no more remain between the current card and
-*     the "end-of-file".
-*
-c     When astWrite is used to write an Object using NATIVE encoding,
-f     When AST_WRITE is used to write an Object using NATIVE encoding,
-*     a description of the Object is inserted immediately before the
-*     current card (as determined by the Card attribute).  Multiple
-*     Object descriptions may be written in this way and are stored
-*     separately (and sequentially if the Card attribute is not
-*     modified between the writes). A write operation using the NATIVE
-*     encoding does not over-write previously written Object
-*     descriptions. Note, however, that subsequent behaviour is
-*     undefined if an Object description is written inside a
-*     previously-written description, so this should be avoided.
-*
-*     When an Object is written to a FitsChan using NATIVE encoding,
-c     astWrite should (barring errors) always transfer data and
-f     AST_WRITE should (barring errors) always transfer data and
-*     return a value of 1.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,Encoding,encoding,UNKNOWN_ENCODING)
-astMAKE_SET(FitsChan,Encoding,int,encoding,( 
-   value == NATIVE_ENCODING || 
-   value == FITSPC_ENCODING ||
-   value == FITSWCS_ENCODING ||
-   value == FITSIRAF_ENCODING ||
-   value == FITSAIPS_ENCODING ||
-   value == FITSAIPSPP_ENCODING ||
-   value == FITSCLASS_ENCODING ||
-   value == DSS_ENCODING ? value : 
-   (astError( AST__BADAT, "astSetEncoding: Unknown encoding system %d "
-              "supplied.", status, value ), UNKNOWN_ENCODING )))
-astMAKE_TEST(FitsChan,Encoding,( this->encoding != UNKNOWN_ENCODING ))
-
-/* DefB1950 */
-/* ======== */
-/*
-*att++
-*  Name:
-*     DefB1950
-
-*  Purpose:
-*     Use FK4 B1950 as defaults?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which specifies a default equinox
-*     and reference frame to use when reading a FrameSet from a FitsChan
-*     with a foreign (i.e. non-native) encoding. It is only used if the FITS 
-*     header contains RA and DEC axes but contains no information about the 
-*     reference frame or equinox. If this is the case, then values of FK4 and 
-*     B1950 are assumed if the DefB1950 attribute has a non-zero value and 
-*     ICRS is assumed if DefB1950 is zero. The default value for DefB1950
-*     depends on the value of the Encoding attribute: for FITS-WCS encoding
-*     the default is zero, and for all other encodings it is one.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,DefB1950,defb1950,-1)
-astMAKE_GET(FitsChan,DefB1950,int,1,(this->defb1950 == -1 ? (astGetEncoding(this)== FITSWCS_ENCODING?0:1): this->defb1950))
-astMAKE_SET(FitsChan,DefB1950,int,defb1950,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,DefB1950,( this->defb1950 != -1 ))
-
-/* CarLin */
-/* ====== */
-/*
-*att++
-*  Name:
-*     CarLin
-
-*  Purpose:
-*     Ignore spherical rotations on CAR projections?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which specifies how FITS "CAR"
-*     (plate carree, or "Cartesian") projections should be treated when
-*     reading a FrameSet from a foreign encoded FITS header. If zero (the
-*     default), it is assumed that the CAR projection conforms to the
-*     conventions described in the FITS world coordinate system (FITS-WCS) 
-*     paper II "Representation of Celestial Coordinates in FITS" by 
-*     M. Calabretta & E.W. Greisen. If CarLin is non-zero, then these 
-*     conventions are ignored, and it is assumed that the mapping from pixel 
-*     coordinates to celestial coordinates is a simple linear transformation 
-*     (hence the attribute name "CarLin"). This is appropriate for some older 
-*     FITS data which claims to have a "CAR" projection, but which in fact do
-*     not conform to the conventions of the FITS-WCS paper. Furthermore, if
-*     CarLin is non-zero, it is assumed that CDELT and CD keywords are
-*     in units of degrees rather than radians (as required by the
-*     FITS-WCS papers).
-*
-*     The FITS-WCS paper specifies that headers which include a CAR projection 
-*     represent a linear mapping from pixel coordinates to "native spherical 
-*     coordinates", NOT celestial coordinates. An extra mapping is then
-*     required from native spherical to celestial. This mapping is a 3D
-*     rotation and so the overall Mapping from pixel to celestial coordinates 
-*     is NOT linear. See the FITS-WCS papers for further details.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,CarLin,carlin,-1)
-astMAKE_GET(FitsChan,CarLin,int,1,(this->carlin == -1 ? 0 : this->carlin))
-astMAKE_SET(FitsChan,CarLin,int,carlin,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,CarLin,( this->carlin != -1 ))
-
-/* Iwc */
-/* === */
-/*
-*att++
-*  Name:
-*     Iwc
-
-*  Purpose:
-*     Include a Frame representing FITS-WCS intermediate world coordinates?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which is used when a FrameSet is
-*     read from a FitsChan with a foreign FITS encoding (e.g. FITS-WCS) using
-c     astRead.
-f     AST_READ.
-*     If it has a non-zero value then the returned FrameSet will include
-*     Frames representing "intermediate world coordinates" (IWC). These
-*     Frames will have Domain name "IWC" for primary axis descriptions, and
-*     "IWCa" for secondary axis descriptions, where "a" is replaced by
-*     the single alternate axis description character, as used in the
-*     FITS-WCS header. The default value for "Iwc" is zero.
-*
-*     FITS-WCS paper 1 defines IWC as a Cartesian coordinate system with one 
-*     axis for each WCS axis, and is the coordinate system produced by the
-*     rotation matrix (represented by FITS keyword PCi_j, CDi_j, etc).
-*     For instance, for a 2-D FITS-WCS header describing projected
-*     celestial longitude and latitude, the intermediate world
-*     coordinates represent offsets in degrees from the reference point
-*     within the plane of projection.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,Iwc,iwc,-1)
-astMAKE_GET(FitsChan,Iwc,int,1,(this->iwc == -1 ? 0 : this->iwc))
-astMAKE_SET(FitsChan,Iwc,int,iwc,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,Iwc,( this->iwc != -1 ))
-
-/*
-*att++
-*  Name:
-*     CDMatrix
-
-*  Purpose:
-*     Use CDi_j keywords to represent pixel scaling, rotation, etc?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which specifies how the linear
-*     transformation from pixel coordinates to intermediate world 
-*     coordinates should be represented within a FitsChan when using
-*     FITS-WCS encoding. This transformation describes the scaling, 
-*     rotation, shear, etc., of the pixel axes.
-*     
-*     If the attribute has a non-zero value then the transformation is
-*     represented by a set of CDi_j keywords representing a square matrix 
-*     (where "i" is the index of an intermediate world coordinate axis 
-*     and "j" is the index of a pixel axis). If the attribute has a zero 
-*     value the transformation is represented by a set of PCi_j keywords 
-*     (which also represent a square matrix) together with a corresponding 
-*     set of CDELTi keywords representing the axis scalings. See FITS-WCS 
-*     paper II "Representation of Celestial Coordinates in FITS" by 
-*     M. Calabretta & E.W. Greisen, for a complete description of these two 
-*     schemes.
-*
-*     The default value of the CDMatrix attribute is determined by the
-*     contents of the FitsChan at the time the attribute is accessed. If
-*     the FitsChan contains any CDi_j keywords then the default value is 
-*     non-zero. Otherwise it is zero. Note, reading a FrameSet from a
-*     FitsChan will in general consume any CDi_j keywords present in the 
-*     FitsChan. Thus the default value for CDMatrix following a read will
-*     usually be zero, even if the FitsChan originally contained some
-*     CDi_j keywords. This behaviour is similar to that of the Encoding
-*     attribute, the default value for which is determined by the contents 
-*     of the FitsChan at the time the attribute is accessed. If you wish
-*     to retain the original value of the CDMatrix attribute (that is,
-*     the value before reading the FrameSet) then you should enquire the 
-*     default value before doing the read, and then set that value
-*     explicitly.
-
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,CDMatrix,cdmatrix,-1)
-astMAKE_SET(FitsChan,CDMatrix,int,cdmatrix,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,CDMatrix,( this->cdmatrix != -1 ))
-
-/* Clean */
-/* ===== */
-/*
-*att++
-*  Name:
-*     Clean
-
-*  Purpose:
-*     Remove cards used whilst reading even if an error occurs?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute indicates whether or not cards should be removed from 
-*     the FitsChan if an error occurs within 
-c     astRead.
-f     AST_READ.
-*     A succesful read on a FitsChan always results in the removal of
-*     the cards which were involved in the description of the returned
-*     Object. However, in the event of an error during the read (for instance 
-*     if the cards in the FitsChan have illegal values, or if some required
-*     cards are missing) no cards will be removed from the FitsChan if
-*     the Clean attribute is zero (the default). If Clean is non-zero then 
-*     any cards which were used in the aborted attempt to read an object
-*     will be removed.
-*
-*     This provides a means of "cleaning" a FitsChan of WCS related cards
-*     which works even in the event of the cards not forming a legal WCS
-*     description.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,Clean,clean,-1)
-astMAKE_SET(FitsChan,Clean,int,clean,( value ? 1 : 0 ))
-astMAKE_TEST(FitsChan,Clean,( this->clean != -1 ))
-
-/* FitsDigits. */
-/* =========== */
-/*
-*att++
-*  Name:
-*     FitsDigits
-
-*  Purpose:
-*     Digits of precision for floating point FITS values.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute gives the number of significant decimal digits to
-*     use when formatting floating point values for inclusion in the
-*     FITS header cards within a FitsChan.
-*
-*     By default, a positive value is used which results in no loss of
-c     information, assuming that the value's precision is double.
-f     information, assuming that the value is double precision.
-*     Usually, this causes no problems.
-*
-*     However, to adhere strictly to the recommendations of the FITS
-*     standard, the width of the formatted value (including sign,
-*     decimal point and exponent) ought not to be more than 20
-*     characters. If you are concerned about this, you should set
-*     FitsDigits to a negative value, such as -15. In this case, the
-*     absolute value (+15) indicates the maximum number of significant
-*     digits to use, but the actual number used may be fewer than this
-*     to ensure that the FITS recommendations are satisfied. When
-*     using this approach, the resulting number of significant digits
-*     may depend on the value being formatted and on the presence of
-*     any sign, decimal point or exponent.
-*
-*     The value of this attribute is effective when FITS header cards
-*     are output, either using
-c     astFindFits or by the action of the FitsChan's sink function
-f     AST_FINDFITS or by the action of the FitsChan's sink routine
-*     when it is finally deleted.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(FitsChan,FitsDigits,fitsdigits,DBL_DIG)
-astMAKE_GET(FitsChan,FitsDigits,int,DBL_DIG,this->fitsdigits)
-astMAKE_SET(FitsChan,FitsDigits,int,fitsdigits,value)
-astMAKE_TEST(FitsChan,FitsDigits,( this->fitsdigits != DBL_DIG ))
-
-/* Ncard */
-/* ===== */
-/*
-*att++
-*  Name:
-*     Ncard
-
-*  Purpose:
-*     Number of FITS header cards in a FitsChan.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the total number of FITS header cards
-*     stored in a FitsChan. It is updated as cards are added or
-*     deleted.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-
-/* Warnings. */
-/* ======== */
-/*
-*att++
-*  Name:
-*     Warnings
-
-*  Purpose:
-*     Controls the issuing of warnings about various conditions.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String
-
-*  Description:
-*     This attribute controls the issuing of warnings about selected
-*     conditions when an Object or keyword is read from or written to a 
-*     FitsChan. The value supplied for the Warnings attribute should 
-*     consist of a space separated list of condition names (see the 
-*     AllWarnings attribute for a list of the currently defined names). 
-*     Each name indicates a condition which should be reported. The default 
-*     value for Warnings is the string "Tnx Zpx BadCel BadMat BadPV BadCTYPE".
-*
-*     The text of any warning will be stored within the FitsChan in the
-*     form of one or more new header cards with keyword ASTWARN. If
-*     required, applications can check the FitsChan for ASTWARN cards
-c     (using astFindFits) after the call to astRead or astWrite has been
-f     (using AST_FINDFITS) after the call to AST_READ or AST_WRITE has been
-*     performed, and report the text of any such cards to the user. ASTWARN
-*     cards will be propagated to any output header unless they are
-c     deleted from the FitsChan using astDelFits.
-f     deleted from the FitsChan using astDelFits.
-
-*  Notes:
-*     This attribute only controls the warnings that are to be stored as 
-*     a set of header cards in the FitsChan as described above. It has no
-*     effect on the storage of warnings in the parent Channel structure. 
-*     All warnings are stored in the parent Channel structure, from where 
-*     they can be retrieved using the 
-c     astWarnings
-f     AST_WARNINGS
-*     function.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-/* Clear the Warnings value by freeing the allocated memory and assigning
-   a NULL pointer. */
-astMAKE_CLEAR(FitsChan,Warnings,warnings,astFree( this->warnings ))
-
-/* If the Warnings value is not set, supply a default in the form of a
-   pointer to the constant string "Tnx Zpx BadCel BadMat BadCTYPE". */
-astMAKE_GET(FitsChan,Warnings,const char *,NULL,( this->warnings ? this->warnings :
-                                                            "Tnx Zpx BadPV BadCel BadMat BadCTYPE" ))
-
-/* Set a Warnings value by freeing any previously allocated memory, allocating
-   new memory, storing the string and saving the pointer to the copy.
-   First check that the list does not contain any unknown conditions. If
-   it does, an error is reported by GoodWarns and the current attribute value 
-   is retained. */
-astMAKE_SET(FitsChan,Warnings,const char *,warnings,( GoodWarns( value, status ) ? 
-                                astStore( this->warnings, value, strlen( value ) + (size_t) 1 ) :
-                                this->warnings))
-
-/* The Warnings value is set if the pointer to it is not NULL. */
-astMAKE_TEST(FitsChan,Warnings,( this->warnings != NULL ))
-
-/* AllWarnings. */
-/* ============ */
-/*
-*att++
-*  Name:
-*     AllWarnings
-
-*  Purpose:
-*     A list of all currently available condition names.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String, read-only
-
-*  Description:
-*     This read-only attribute is a space separated list of all the conditions
-*     names recognized by the Warnings attribute. The names are listed
-*     below.
-
-*  Conditions:
-*     The following conditions are currently recognised (all are
-*     case-insensitive):
-*
-*     - "BadCel": This condition arises when reading a FrameSet from a
-*     non-Native encoded FitsChan if an unknown celestial co-ordinate 
-*     system is specified by the CTYPE keywords.
-*
-*     - "BadCTYPE": This condition arises when reading a FrameSet from a
-*     non-Native encoded FitsChan if an illegal algorithm code is specified 
-*     by a CTYPE keyword, and the illegal code can be converted to an
-*     equivalent legal code.
-*
-*     - "BadLat": This condition arises when reading a FrameSet from a
-*     non-Native encoded FitsChan if the latitude of the reference point
-*     has an absolute value greater than 90 degrees. The actual absolute
-*     value used is set to exactly 90 degrees in these cases.
-*
-*     - "BadMat": This condition arises if the matrix describing the
-*     transformation from pixel offsets to intermediate world coordinates 
-*     cannot be inverted. This matrix describes the scaling, rotation, shear, 
-*     etc., applied to the pixel axes, and is specified by keywords such as 
-*     PCi_j, CDi_j, CROTA, etc. For example, the matrix will not be invertable 
-*     if any rows or columns consist entirely of zeros. The FITS-WCS Paper I 
-*     "Representation of World Coordinates in FITS" by Greisen & Calabretta
-*     requires that this matrix be invertable. Many operations (such as
-*     grid plotting) will not be possible if the matrix cannot be inverted.
-*
-*     - "BadPV": This condition arises when reading a FrameSet from a
-*     non-Native encoded FitsChan. It is issued if a PVi_m header is found 
-*     that refers to a projection parameter that is not used by the 
-*     projection type specified by CTYPE.
-*
-*     - "BadVal": This condition arises when reading a FrameSet from a
-*     non-Native encoded FitsChan if it is not possible to convert the
-*     value of a FITS keywords to the expected type. For instance, this
-*     can occur if the FITS header contains a string value for a keyword 
-*     which should have a floating point value, or if the keyword has no
-*     value at all (i.e. is a comment card).
-*
-*     - "Distortion": This condition arises when reading a FrameSet from a
-*     non-Native encoded FitsChan if any of the CTYPE keywords specify an
-*     unsupported distortion code using the "4-3-3" format specified in
-*     FITS-WCS paper IV. Such distortion codes are ignored.
-*
-*     - "NoCTYPE": This condition arises if a default CTYPE value is used 
-c     within astRead, due to no value being present in the supplied FitsChan.
-f     within AST_READ, due to no value being present in the supplied FitsChan.
-*     This condition is only tested for when using non-Native encodings.
-*
-*     - "NoEquinox": This condition arises if a default equinox value is used 
-c     within astRead, due to no value being present in the supplied FitsChan.
-f     within AST_READ, due to no value being present in the supplied FitsChan.
-*     This condition is only tested for when using non-Native encodings.
-*
-*     - "NoRadesys": This condition arises if a default reference frame is 
-c     used for an equatorial co-ordinate system within astRead, due to no 
-f     used for an equatorial co-ordinate system within AST_READ, due to no 
-*     value being present in the supplied FitsChan. This condition is only 
-*     tested for when using non-Native encodings.
-*
-*     - "NoLonpole": This condition arises if a default value is used for 
-c     the LONPOLE keyword within astRead, due to no value being present 
-f     the LONPOLE keyword within AST_READ, due to no value being present 
-*     in the supplied FitsChan. This condition is only tested for when 
-*     using non-Native encodings.
-*
-*     - "NoLatpole": This condition arises if a default value is used for 
-c     the LATPOLE keyword within astRead, due to no value being present 
-f     the LATPOLE keyword within AST_READ, due to no value being present 
-*     in the supplied FitsChan. This condition is only tested for when 
-*     using non-Native encodings.
-*
-*     - "NoMjd-obs": This condition arises if a default value is used for 
-c     the date of observation within astRead, due to no value being present 
-f     the date of observation within AST_READ, due to no value being present 
-*     in the supplied FitsChan. This condition is only tested for when using 
-*     non-Native encodings.
-*
-*     - "Tnx": This condition arises if a FrameSet is read from a FITS
-*     header containing an IRAF "TNX" projection which includes terms
-*     not supproted by AST. Such terms are ignored and so the resulting
-*     FrameSet may be inaccurate.
-*
-*     - "Zpx": This condition arises if a FrameSet is read from a FITS
-*     header containing an IRAF "ZPX" projection which includes "lngcor" 
-*     or "latcor" correction terms. These terms are not supported by AST
-*     and are ignored. The resulting FrameSet may therefore be inaccurate.
-
-*  Applicability:
-*     FitsChan
-*        All FitsChans have this attribute.
-*att--
-*/
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for FitsChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for FitsChan objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the FitsChan to be copied.
-*     objout
-*        Pointer to the FitsChan being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The source and sink functions are not propagated (i.e. the
-*     pointers are set NULL in the output FitsChan).
-*     - This constructor makes a deep copy, including a copy of the
-*     keyword values.
-*/
-
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Declare the thread specific global data */
-   const char *class;        /* Pointer to object class */
-   AstFitsChan *in;          /* Pointer to input FitsChan */
-   AstFitsChan *out;         /* Pointer to output FitsChan */
-   int *flags;
-   int icard;
-   int old_ignore_used;      /* Original value of external variable ignore_used */
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(objin);
-
-/* Obtain pointers to the input and output FitsChans. */
-   in = (AstFitsChan *) objin;
-   out = (AstFitsChan *) objout;
-
-/* Nullify all pointers in the output FitsChan so that the input
-   data will not be deleted in the event of an error occurring. */
-   out->card = NULL;
-   out->head = NULL;
-   out->keyseq = NULL;
-   out->keywords = NULL;
-   out->source = NULL;
-   out->source_wrap = NULL;
-   out->sink = NULL;
-   out->sink_wrap = NULL;
-   out->warnings = NULL;
-
-/* Store the object class. */
-   class = astGetClass( in );
-
-/* Ensure all cards are copied, including those already read by astRead. */
-   old_ignore_used = ignore_used;
-   ignore_used = 0;
-
-/* Save the current card index in the input FitsChan. */
-   icard = astGetCard( in );
-
-/* Rewind the input FitsChan. */
-   astClearCard( in );
-
-/* Copy all the FitsCard structures from input to output. */
-   while( !astFitsEof( in ) && astOK ){
-
-/* Get a pointer to the flags mask for this card. */
-      flags = CardFlags( in, status );
-
-/* Store a new card in the output, holding the same information as the
-   input card. */
-      NewCard( out, CardName( in, status ), CardType( in, status ), CardData( in, NULL, status ), 
-               CardComm( in, status ), (flags?(*flags):0), status );
-
-/* Move on to the next input card. */
-      MoveCard( in, 1, "astCopy", class, status );
-
-   }
-
-/* Set the current card in both input and output to the current input
-   card on entry. */
-   astSetCard( in, icard );
-   astSetCard( out, icard );
-
-/* Copy the list of keyword sequence numbers used. */
-   if( in->keyseq ) out->keyseq = astCopy( in->keyseq );
-
-/* Copy the Warnings attribute value */
-   if( in->warnings ) out->warnings = astStore( NULL, in->warnings, 
-                                                strlen( in->warnings ) + 1 );
-
-/* Reinstate the original setting of the external ignore_used variable. */
-   ignore_used = old_ignore_used;
-
-/* If an error occurred, delete the contents of the output Object. */
-   if( !astOK ) Delete( objout, status );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for FitsChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for FitsChan objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the FitsChan to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to FitsChan */
-  
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) obj;
-
-/* Write out the contents of the FitsChan using the sink function
-   provided when it was created. */
-   WriteToSink( this, status );
-
-/* Remove all cards from the FitsChan. */
-   Empty( this, status );
-
-/* Free any memory used to hold the Warnings attribute value. */
-   this->warnings = astFree( this->warnings );
-
-   return;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for FitsChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the FitsChan class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the FitsChan whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstFitsChan *this;            /* Pointer to the FitsChan structure */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   const char *class;            /* Object class */
-   const char *sval;             /* Pointer to string value */
-   int cardtype;                 /* Keyword data type */
-   int flags;                    /* Keyword flags */
-   int icard;                    /* Index of current card */
-   int ival;                     /* Integer value */
-   int ncard;                    /* No. of cards dumped so far */
-   int old_ignore_used;          /* Original value of external variable ignore_used */
-   int set;                      /* Attribute value set? */
-   void *data;                   /* Pointer to keyword data value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FitsChan structure. */
-   this = (AstFitsChan *) this_object;
-
-/* Store the object class. */
-   class = astGetClass( this );
-
-/* Save the index of ht ecurrent card. */
-   icard = astGetCard( this );
-
-/* Write out values representing the instance variables for the
-   FitsChan class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* Card. */
-/* ----- */
-   astWriteInt( channel, "Card", 1, 1, icard, "Index of current card" );
-
-/* Encoding. */
-/* --------- */
-   set = TestEncoding( this, status );
-   ival = set ? GetEncoding( this, status ) : astGetEncoding( this );
-   if( ival > UNKNOWN_ENCODING && ival <= MAX_ENCODING ) {
-      astWriteString( channel, "Encod", set, 1, xencod[ival], "Encoding system" );
-   } else {
-      astWriteString( channel, "Encod", set, 1, UNKNOWN_STRING, "Encoding system" );
-   }
-
-/* FitsDigits. */
-/* ----------- */
-   set = TestFitsDigits( this, status );
-   ival = set ? GetFitsDigits( this, status ) : astGetFitsDigits( this );
-   astWriteInt( channel, "FitsDg", set, 1, ival, "No. of digits for floating point values" );
-
-/* DefB1950 */
-/* -------- */
-   set = TestDefB1950( this, status );
-   ival = set ? GetDefB1950( this, status ) : astGetDefB1950( this );
-   astWriteInt( channel, "DfB1950", set, 1, ival, (ival ? "Default to FK4 B1950": "Default to ICRS") );
-
-/* CDMatrix */
-/* -------- */
-   set = TestCDMatrix( this, status );
-   ival = set ? GetCDMatrix( this, status ) : astGetCDMatrix( this );
-   astWriteInt( channel, "CdMat", set, 1, ival, (ival ? "Use CD Matrix":"Use PC matrix") );
-
-/* CarLin */
-/* ------ */
-   set = TestCarLin( this, status );
-   ival = set ? GetCarLin( this, status ) : astGetCarLin( this );
-   astWriteInt( channel, "CarLin", set, 1, ival, (ival ? "Use simple linear CAR projections": "Use full FITS-WCS CAR projections") );
-
-/* Iwc */
-/* --- */
-   set = TestIwc( this, status );
-   ival = set ? GetIwc( this, status ) : astGetIwc( this );
-   astWriteInt( channel, "Iwc", set, 1, ival, (ival ? "Include an IWC Frame": "Do not include an IWC Frame") );
-
-/* Clean */
-/* ----- */
-   set = TestClean( this, status );
-   ival = set ? GetClean( this, status ) : astGetClean( this );
-   astWriteInt( channel, "Clean", set, 0, ival, "Always remove used cards?" );
-
-/* Warnings. */
-/* --------- */
-   set = TestWarnings( this, status );
-   sval = set ? GetWarnings( this, status ) : astGetWarnings( this );
-   astWriteString( channel, "Warn", set, 1, sval, "Warnings to be reported" );
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* Ensure all cards are copied, including those already read by astRead. */
-   old_ignore_used = ignore_used;
-   ignore_used = 0;
-
-/* Rewind the FitsChan. */
-   astClearCard( this );
-
-/* Dump each card. */
-   ncard = 1;
-   while( !astFitsEof( this ) && astOK ){
-
-/* Write out the keyword name. */
-      if( CardName( this, status ) ){
-         (void) sprintf( buff, "Nm%d", ncard );
-         astWriteString( channel, buff, 1, 1, CardName( this, status ),
-                         "FITS keyword name" );
-      }
-
-/* Write out the keyword type. */
-      cardtype = CardType( this, status );
-      (void) sprintf( buff, "Ty%d", ncard );
-      astWriteString( channel, buff, 1, 1, type_names[ cardtype ],
-                      "FITS keyword data type" );
-
-/* Write out the flag values if any are non-zero. */
-      flags = *CardFlags( this, status );
-      if( flags ){
-         (void) sprintf( buff, "Fl%d", ncard );
-         astWriteInt( channel, buff, 1, 1, flags, "FITS keyword flags" );
-      }
-
-/* Write out the data value, if defined, using the appropriate data type. */
-      data = CardData( this, NULL, status );
-      if( data && cardtype != AST__UNDEF ){
-
-         if( cardtype == AST__FLOAT ){
-            (void) sprintf( buff, "Dt%d", ncard );
-            astWriteDouble( channel, buff, 1, 1, *( (double *) data ), 
-                            "FITS keyword value" );
-   
-         } else if( cardtype == AST__STRING || cardtype == AST__CONTINUE ){
-            (void) sprintf( buff, "Dt%d", ncard );
-            astWriteString( channel, buff, 1, 1, (char *) data, 
-                            "FITS keyword value" );
-   
-         } else if( cardtype == AST__INT ){
-            (void) sprintf( buff, "Dt%d", ncard );
-            astWriteInt( channel, buff, 1, 1, *( (int *) data ), 
-                         "FITS keyword value" );
-   
-         } else if( cardtype == AST__LOGICAL ){
-            (void) sprintf( buff, "Dt%d", ncard );
-            astWriteInt( channel, buff, 1, 1, *( (int *) data ), 
-                         "FITS keyword value" );
-   
-         } else if( cardtype == AST__COMPLEXF ){
-            (void) sprintf( buff, "Dr%d", ncard );
-            astWriteDouble( channel, buff, 1, 1, *( (double *) data ), 
-                            "FITS keyword real value" );
-   
-            (void) sprintf( buff, "Di%d", ncard );
-            astWriteDouble( channel, buff, 1, 1, *( ( (double *) data ) + 1 ), 
-                            "FITS keyword imaginary value" );
-   
-         } else if( cardtype == AST__COMPLEXI ){
-            (void) sprintf( buff, "Dr%d", ncard );
-            astWriteInt( channel, buff, 1, 1, *( (int *) data ), 
-                         "FITS keyword real value" );
-   
-            (void) sprintf( buff, "Di%d", ncard );
-            astWriteInt( channel, buff, 1, 1, *( ( (int *) data ) + 1 ), 
-                         "FITS keyword imaginary value" );
-         }
-
-      }
-
-/* Write out the keyword comment. */
-      if( CardComm( this, status ) ){
-         (void) sprintf( buff, "Cm%d", ncard );
-         astWriteString( channel, buff, 1, 1, CardComm( this, status ),
-                         "FITS keyword comment" );
-      }
-
-/* Move on to the next card. */
-      ncard++;
-      MoveCard( this, 1, "astDump", class, status );
-
-   }
-
-/* Reinstate the original setting of the external ignore_used variable. */
-   ignore_used = old_ignore_used;
-
-/* Reinstate the original current card. */
-   astSetCard( this, icard );
-
-#undef KEY_LEN 
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFitsChan and astCheckFitsChan functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(FitsChan,Channel)
-astMAKE_CHECK(FitsChan)
-
-AstFitsChan *astFitsChan_( const char *(* source)( void ),
-                           void (* sink)( const char * ),
-                           const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astFitsChan
-f     AST_FITSCHAN
-
-*  Purpose:
-*     Create a FitsChan.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "fitschan.h"
-c     AstFitsChan *astFitsChan( const char *(* source)( void ),
-c                               void (* sink)( const char * ),
-c                               const char *options, ... )
-f     RESULT = AST_FITSCHAN( SOURCE, SINK, OPTIONS, STATUS )
-
-*  Class Membership:
-*     FitsChan constructor.
-
-*  Description:
-*     This function creates a new FitsChan and optionally initialises
-*     its attributes.
-*
-*     A FitsChan is a specialised form of Channel which supports I/O
-*     operations involving the use of FITS (Flexible Image Transport
-*     System) header cards. Writing an Object to a FitsChan (using
-c     astWrite) will, if the Object is suitable, generate a
-f     AST_WRITE) will, if the Object is suitable, generate a
-*     description of that Object composed of FITS header cards, and
-*     reading from a FitsChan will create a new Object from its FITS
-*     header card description.
-*
-*     While a FitsChan is active, it represents a buffer which may
-*     contain zero or more 80-character "header cards" conforming to
-*     FITS conventions. Any sequence of FITS-conforming header cards
-*     may be stored, apart from the "END" card whose existence is
-*     merely implied.  The cards may be accessed in any order by using
-*     the FitsChan's integer Card attribute, which identifies a "current"
-*     card, to which subsequent operations apply. Searches
-c     based on keyword may be performed (using astFindFits), new
-c     cards may be inserted (astPutFits, astPutCards, astSetFits<X>) and 
-c     existing ones may be deleted (astDelFits) or changed (astSetFits<X>).
-f     based on keyword may be performed (using AST_FINDFITS), new
-f     cards may be inserted (AST_PUTFITS, AST_PUTCARDS, AST_SETFITS<X>) and 
-f     existing ones may be deleted (AST_DELFITS) or changed (AST_SETFITS<X>).
-*
-*     When you create a FitsChan, you have the option of specifying
-*     "source" and "sink" functions which connect it to external data
-*     stores by reading and writing FITS header cards. If you provide
-*     a source function, it is used to fill the FitsChan with header cards 
-*     when it is accessed for the first time. If you do not provide a source
-*     function, the FitsChan remains empty until you explicitly enter
-c     data into it (e.g. using astPutCards, astPutFits or astWrite). If you
-f     data into it (e.g. using AST_PUTCARDS, AST_PUTFITS or AST_WRITE). If you
-*     provide a sink function, it is used to deliver any remaining
-*     contents of a FitsChan to an external data store when the
-*     FitsChan is deleted. If you do not provide a sink function, any
-*     header cards remaining when the FitsChan is deleted will be
-*     lost, so you should arrange to extract them first if necessary
-c     (e.g. using astFindFits or astRead).
-f     (e.g. using AST_FINDFITS or AST_READ).
-*     
-*     Coordinate system information may be described using FITS header
-*     cards using several different conventions, termed
-*     "encodings". When an AST Object is written to (or read from) a
-*     FitsChan, the value of the FitsChan's Encoding attribute
-*     determines how the Object is converted to (or from) a
-*     description involving FITS header cards. In general, different
-*     encodings will result in different sets of header cards to
-*     describe the same Object. Examples of encodings include the DSS
-*     encoding (based on conventions used by the STScI Digitised Sky
-*     Survey data), the FITS-WCS encoding (based on a proposed FITS
-*     standard) and the NATIVE encoding (a near loss-less way of
-*     storing AST Objects in FITS headers).
-*
-*     The available encodings differ in the range of Objects they can
-*     represent, in the number of Object descriptions that can coexist
-*     in the same FitsChan, and in their accessibility to other
-*     (external) astronomy applications (see the Encoding attribute
-*     for details). Encodings are not necessarily mutually exclusive
-*     and it may sometimes be possible to describe the same Object in
-*     several ways within a particular set of FITS header cards by
-*     using several different encodings.
-*
-c     The detailed behaviour of astRead and astWrite, when used with
-f     The detailed behaviour of AST_READ and AST_WRITE, when used with
-*     a FitsChan, depends on the encoding in use. In general, however,
-c     all use of astRead is destructive, so that FITS header cards
-f     all use of AST_READ is destructive, so that FITS header cards
-*     are consumed in the process of reading an Object, and are
-*     removed from the FitsChan (this deletion can be prevented for 
-*     specific cards by calling the 
-c     astRetainFits function).
-f     AST_RETAINFITS routine).
-*
-*     If the encoding in use allows only a single Object description
-*     to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-c     encodings), then write operations using astWrite will
-f     encodings), then write operations using AST_WRITE will
-*     over-write any existing Object description using that
-*     encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-*     descriptions are written sequentially and may later be read
-*     back in the same sequence.
-
-*  Parameters:
-c     source
-f     SOURCE = FUNCTION (Given)
-c        Pointer to a source function which takes no arguments and
-c        returns a pointer to a null-terminated string. This function
-c        will be used by the FitsChan to obtain input FITS header
-c        cards. On each invocation, it should read the next input card
-c        from some external source (such as a FITS file), and return a
-c        pointer to the (null-terminated) contents of the card. It
-c        should return a NULL pointer when there are no more cards to
-c        be read.
-c
-c        If "source" is NULL, the FitsChan will remain empty until
-c        cards are explicitly stored in it (e.g. using astPutCards or astPutFits).
-f        A source routine, which is a function taking two arguments: a
-f        character argument of length 80 to contain a FITS card, and an
-f        integer error status argument. It should return an integer value.
-f        This function will be used by the FitsChan to obtain input
-f        FITS header cards. On each invocation, it should read the
-f        next input card from some external source (such as a FITS
-f        file), and return the contents of the card via its character
-f        argument. It should return a function result of one unless
-f        there are no more cards to be read, in which case it should
-f        return zero. If an error occurs, it should set its error
-f        status argument to an error value before returning.
-f
-f        If the null routine AST_NULL is supplied as the SOURCE value,
-f        the FitsChan will remain empty until cards are explicitly
-f        stored in it (e.g. using AST_PUTCARDS or AST_PUTFITS).
-c     sink
-f     SINK = SUBROUTINE (Given)
-c        Pointer to a sink function that takes a pointer to a
-c        null-terminated string as an argument and returns void.  This
-c        function will be used by the FitsChan to deliver any FITS
-c        header cards it contains when it is finally deleted. On 
-c        each invocation, it should deliver the contents of the character
-c        string passed to it as a FITS header card to some external
-c        data store (such as a FITS file).
-f        A sink routine, which is a subroutine which takes two
-f        arguments: a character argument of length 80 to contain a
-f        FITS card, and an integer error status argument. This routine
-f        will be used by the FitsChan to deliver any FITS header cards
-f        it contains when it is finally deleted. On each invocation,
-f        it should deliver the contents of the character string passed
-f        to it as a FITS header card to some external data store (such
-f        as a FITS file).  If an error occurs, it should set its error
-f        status argument to an error value before returning.
-*
-c        If "sink" is NULL, 
-f        If the null routine AST_NULL is supplied as the SINK value,
-*        the contents of the FitsChan will not be written out when it
-*        is deleted.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new FitsChan. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new FitsChan. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFitsChan()
-f     AST_FITSCHAN = INTEGER
-*        A pointer to the new FitsChan.
-
-*  Notes:
-f     - The names of the routines supplied for the SOURCE and SINK
-f     arguments should appear in EXTERNAL statements in the Fortran
-f     routine which invokes AST_FITSCHAN. However, this is not generally
-f     necessary for the null routine AST_NULL (so long as the AST_PAR
-f     include file has been used).
-c     - No FITS "END" card will be written via the sink function. You
-f     - No FITS "END" card will be written via the sink routine. You
-*     should add this card yourself after the FitsChan has been
-*     deleted.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-f     - Note that the null routine AST_NULL (one underscore) is
-f     different to AST__NULL (two underscores), which is the null Object
-f     pointer.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFitsChan *new;             /* Pointer to new FitsChan */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the FitsChan, allocating memory and initialising the
-   virtual function table as well if necessary. This interface is for
-   use by other C functions within AST, and uses the standard "wrapper"
-   functions included in this class. */
-   new = astInitFitsChan( NULL, sizeof( AstFitsChan ), !class_init, 
-                          &class_vtab, "FitsChan", source, SourceWrap,
-                          sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   FitsChan's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new FitsChan. */
-   return new;
-}
-
-AstFitsChan *astFitsChanId_( const char *(* source)( void ),
-                             void (* sink)( const char * ),
-                             const char *options, ... ) {
-/*
-*  Name:
-*     astFitsChanId_
-
-*  Purpose:
-*     Create a FitsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstFitsChan *astFitsChanId_( const char *(* source)( void ),
-*                                  void (* sink)( const char * ),
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     FitsChan constructor.
-
-*  Description:
-*     This function implements the external (public) C interface to the
-*     astFitsChan constructor function. Another function (astFitsChanForId)
-*     should be called to create a FitsChan for use within other languages.
-*     Both functions return an ID value (instead of a true C pointer) to 
-*     external users, and must be provided because astFitsChan_ has a variable 
-*     argument list which cannot be encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astFitsChan_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astFitsChan_.
-
-*  Returned Value:
-*     The ID value associated with the new FitsChan.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFitsChan *new;             /* Pointer to new FitsChan */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the FitsChan, allocating memory and initialising the
-   virtual function table as well if necessary. This interface is for
-   use by external C functions and uses the standard "wrapper"
-   functions included in this class. */
-   new = astInitFitsChan( NULL, sizeof( AstFitsChan ), !class_init, 
-                          &class_vtab, "FitsChan", source, SourceWrap,
-                          sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   FitsChan's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new FitsChan. */
-   return astMakeId( new );
-}
-
-AstFitsChan *astFitsChanForId_( const char *(* source)( void ),
-                              char *(* source_wrap)( const char *(*)( void ), int * ),
-                              void (* sink)( const char * ),
-                              void (* sink_wrap)( void (*)( const char * ),
-                                                  const char *, int * ),
-                              const char *options, ... ) {
-/*
-*+
-*  Name:
-*     astFitsChanFor
-
-*  Purpose:
-*     Initialise a FitsChan from a foreign language interface.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstFitsChan *astFitsChanFor( const char *(* source)( void ),
-*                                char *(* source_wrap)( const char *(*)
-*                                                       ( void ), int * ),
-*                                void (* sink)( const char * ),
-*                                void (* sink_wrap)( void (*)( const char * ),
-*                                                    const char *, int * ),
-*                                const char *options, ... )
-
-*  Class Membership:
-*     FitsChan constructor.
-
-*  Description:
-*     This function creates a new FitsChan from a foreign language
-*     interface and optionally initialises its attributes.
-*
-*     A FitsChan implements FITS input/output for the AST library.
-*     Writing an Object to a FitsChan (using astWrite) will generate a
-*     textual representation of that Object in terms of FITS header cards, 
-*     and reading from a FitsChan (using astRead) will create a new Object 
-*     from its FITS representation.
-*
-*     Normally, when you use a FitsChan, you should provide "source"
-*     and "sink" functions which connect it to an external data store
-*     by reading and writing the resulting text. This function also
-*     requires you to provide "wrapper" functions which will invoke
-*     the source and sink functions. 
-
-*  Parameters:
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        FITS header cards. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the FitsChan will remain empty until
-*        cards are added explicitly (e.g. using astPutCards or astPutFits).
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next FITS header card.
-*        The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source" is NULL, the FitsChan will remain empty until
-*        cards are added explicitly (e.g. using astPutCards or astPutFits).
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        FITS header cards. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the contents of the FitsChan will not be
-*        written out before being deleted.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the contents of the FitsChan will not be
-*        written out before being deleted.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new FitsChan. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     astFitsChanFor()
-*        A pointer to the new FitsChan.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*     - This function is only available through the public interface
-*     to the FitsChan class (not the protected interface) and is
-*     intended solely for use in implementing foreign language
-*     interfaces to this class.
-*-
-
-*  Implememtation Notes:
-*     - This function behaves exactly like astFitsChanId_, in that it
-*     returns ID values and not true C pointers, but it has two
-*     additional arguments. These are pointers to the "wrapper
-*     functions" which are needed to accommodate foreign language
-*     interfaces.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFitsChan *new;             /* Pointer to new FitsChan */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the FitsChan, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitFitsChan( NULL, sizeof( AstFitsChan ), !class_init, 
-                          &class_vtab, "FitsChan", source, source_wrap, 
-                          sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   FitsChan's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new FitsChan. */
-   return astMakeId( new );
-}
-
-AstFitsChan *astInitFitsChan_( void *mem, size_t size, int init,
-                               AstFitsChanVtab *vtab, const char *name,
-                               const char *(* source)( void ),
-                               char *(* source_wrap)( const char *(*)( void ), int * ),
-                               void (* sink)( const char * ),
-                               void (* sink_wrap)( void (*)( const char * ),
-                                                   const char *, int * ), int *status ) {
-/*
-*+
-*  Name:
-*     astInitFitsChan
-
-*  Purpose:
-*     Initialise a FitsChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstFitsChan *astInitFitsChan_( void *mem, size_t size, int init,
-*                            AstFitsChanVtab *vtab, const char *name,
-*                            const char *(* source)( void ),
-*                            char *(* source_wrap)( const char *(*)( void ), int * ),
-*                            void (* sink)( const char * ),
-*                            void (* sink_wrap)( void (*)( const char * ),
-*                                                   const char *, int * ) )
-
-*  Class Membership:
-*     FitsChan initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new FitsChan object. It allocates memory (if
-*     necessary) to accommodate the FitsChan plus any additional data
-*     associated with the derived class.  It then initialises a
-*     FitsChan structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a FitsChan at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the FitsChan is to be
-*        initialised.  This must be of sufficient size to accommodate
-*        the FitsChan data (sizeof(FitsChan)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the FitsChan (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the FitsChan structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A boolean flag indicating if the FitsChan's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new FitsChan.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        FITS header cards. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the FitsChan will remain empty until
-*        cards are added explicitly (e.g. using astPutCards or astPutFits).
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next FITS header card.
-*        The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source" is NULL, the FitsChan will remain empty until
-*        cards are added explicitly (e.g. using astPutCards or astPutFits).
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        FITS header cards. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the contents of the FitsChan will not be
-*        written out before being deleted.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the contents of the FitsChan will not be
-*        written out before being deleted.
-
-*  Returned Value:
-*     A pointer to the new FitsChan.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFitsChan *new;              /* Pointer to new FitsChan */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitFitsChanVtab( vtab, name );
-
-/* Initialise a Channel structure (the parent class) as the first
-   component within the FitsChan structure, allocating memory if
-   necessary. I am not sure why FitsChan has its own source_wrap and
-   sink_wrap items, rather than just using those inherited from Channel. 
-   It may be possible to do away with the fitschan wrappers and just use
-   the channel wrapper, but I have not yet tried this. Old mail from RFWS 
-   suggests that it may be because the F77 FitsChan source and sink
-   interfaces handle fixed length strings (80 characters), whereas
-   Channel sournce and sink handle variable length strings. This needs
-   investigating. */
-   new = (AstFitsChan *) astInitChannel( mem, size, 0,
-                                         (AstChannelVtab *) vtab, name,
-                                         NULL, NULL, NULL, NULL );
-   if ( astOK ) {
-
-/* Initialise the FitsChan data. */
-/* ---------------------------- */
-      new->head = NULL;
-      new->card = NULL;
-      new->keyseq = NULL;
-      new->keywords = NULL;
-      new->defb1950 = -1;
-      new->cdmatrix = -1;
-      new->carlin = -1;
-      new->iwc = -1;
-      new->clean = -1;
-      new->fitsdigits = DBL_DIG;
-      new->encoding = UNKNOWN_ENCODING;
-      new->warnings = NULL;
-
-/* Save the pointers to the source and sink functions and the wrapper
-   functions that invoke them. */
-      new->source = source;
-      new->source_wrap = source_wrap;
-      new->sink = sink;
-      new->sink_wrap = sink_wrap;
-
-/* Rewind the FitsChan so that the next read operation will return the
-   first card. */
-      new->card = new->head;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstFitsChan *astLoadFitsChan_( void *mem, size_t size,
-                               AstFitsChanVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadFitsChan
-
-*  Purpose:
-*     Load a FitsChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fitschan.h"
-*     AstFitsChan *astLoadFitsChan( void *mem, size_t size,
-*                                   AstFitsChanVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     FitsChan loader.
-
-*  Description:
-*     This function is provided to load a new FitsChan using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     FitsChan structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a FitsChan at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the FitsChan is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        FitsChan data (sizeof(FitsChan)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the FitsChan (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the FitsChan structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstFitsChan) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new FitsChan. If this is NULL, a pointer
-*        to the (static) virtual function table for the FitsChan class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "FitsChan" is used instead.
-
-*  Returned Value:
-*     A pointer to the new FitsChan.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-#define KEY_LEN 50              /* Maximum length of a keyword */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstFitsChan *new;            /* Pointer to the new FitsChan */
-   char *comment;               /* Pointer to keyword comment */
-   char *keynm;                 /* Keyword name */
-   char *text;                  /* Textual version of integer value */
-   char buff[ KEY_LEN + 1 ];    /* Buffer for keyword string */
-   double dval[2];              /* Double precision data values */
-   int flags;                   /* Keyword flags */
-   int free_data;               /* Should data memory be freed? */
-   int ival[2];                 /* Integer data values */
-   int ncard;                   /* No. of FitsCards read so far */
-   int type;                    /* Keyword type */
-   void *data;                  /* Pointer to keyword data value */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this FitsChan. In this case the
-   FitsChan belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstFitsChan );
-      vtab = &class_vtab;
-      name = "FitsChan";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitFitsChanVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built FitsChan. */
-   new = astLoadChannel( mem, size, (AstChannelVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "FitsChan" );
-
-/* Initialise the KeyMap holding the keywords in the FitsChan. */
-      new->keywords = NULL;
-
-/* Initialise the list of keyword sequence numbers. */
-      new->keyseq = NULL;
-
-/* Set the pointers to the source and sink functions, and their
-   wrapper functions, to NULL (we cannot restore these since they
-   refer to process-specific addresses). */
-      new->source = NULL;
-      new->source_wrap = NULL;
-      new->sink = NULL;
-      new->sink_wrap = NULL;
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* Encoding. */
-/* --------- */
-      text = astReadString( channel, "encod", UNKNOWN_STRING );
-      if( text && strcmp( text, UNKNOWN_STRING ) ) {
-         new->encoding = FindString( MAX_ENCODING + 1, xencod, text, 
-                                     "the FitsChan component 'Encod'", 
-                                     "astRead", astGetClass( channel ), status );
-      } else {
-         new->encoding = UNKNOWN_ENCODING;
-      }
-      if ( TestEncoding( new, status ) ) SetEncoding( new, new->encoding, status );
-      text = astFree( text );
-
-/* FitsDigits. */
-/* ----------- */
-      new->fitsdigits = astReadInt( channel, "fitsdg", DBL_DIG );
-      if ( TestFitsDigits( new, status ) ) SetFitsDigits( new, new->fitsdigits, status );
-
-/* DefB1950 */
-/* -------- */
-      new->defb1950 = astReadInt( channel, "dfb1950", -1 );
-      if ( TestDefB1950( new, status ) ) SetDefB1950( new, new->defb1950, status );
-
-/* CDMatrix */
-/* -------- */
-      new->cdmatrix = astReadInt( channel, "cdmat", -1 );
-      if ( TestCDMatrix( new, status ) ) SetCDMatrix( new, new->cdmatrix, status );
-
-/* CarLin */
-/* ------ */
-      new->carlin = astReadInt( channel, "carlin", -1 );
-      if ( TestCarLin( new, status ) ) SetCarLin( new, new->carlin, status );
-
-/* Iwc */
-/* --- */
-      new->iwc = astReadInt( channel, "iwc", -1 );
-      if ( TestIwc( new, status ) ) SetIwc( new, new->iwc, status );
-
-/* Clean */
-/* ----- */
-      new->clean = astReadInt( channel, "clean", -1 );
-      if ( TestClean( new, status ) ) SetClean( new, new->clean, status );
-
-/* Warnings. */
-/* --------- */
-      new->warnings = astReadString( channel, "warn", NULL );
-
-/* Card. */
-/* ----- */
-/* Initialise the index of the card to be read next. */
-      ncard = 1;
-      new->card = NULL;
-      new->head = NULL;
-
-/* Load each card. */
-      type = AST__NOTYPE + 1;
-      while( type != AST__NOTYPE && astOK ){
-
-/* Get the keyword type. */
-         (void) sprintf( buff, "ty%d", ncard );
-         text = astReadString( channel, buff, " " );
-
-         if( strcmp( text, " " ) ) {
-            type = FindString( 8, type_names, text, 
-                               "a FitsChan keyword data type", 
-                               "astRead", astGetClass( channel ), status );
-         } else {
-            type = AST__NOTYPE;
-         }
-         text = astFree( text );
-
-/* Only proceed if the keyword type was found. */
-         if( type != AST__NOTYPE ){
-
-/* Get the keyword name. Use a default blank name. */
-            (void) sprintf( buff, "nm%d", ncard );
-            keynm = astReadString( channel, buff, "        " );
-
-/* Get the data value, using the appropriate data type, unless the
-   keyword is a comment keyword or is undefined. */
-            free_data = 0;
-            if( type == AST__FLOAT ){
-               (void) sprintf( buff, "dt%d", ncard );
-               dval[ 0 ] = astReadDouble( channel, buff, AST__BAD );
-               data = (void *) dval;   
-
-            } else if( type == AST__STRING || type == AST__CONTINUE ){
-               (void) sprintf( buff, "dt%d", ncard );
-               data = (void *) astReadString( channel, buff, "" );
-               free_data = 1;
-   
-            } else if( type == AST__INT ){
-               (void) sprintf( buff, "dt%d", ncard );
-               ival[ 0 ] = astReadInt( channel, buff, 0 );
-               data = (void *) ival;   
-   
-            } else if( type == AST__LOGICAL ){
-               (void) sprintf( buff, "dt%d", ncard );
-               ival[ 0 ] = astReadInt( channel, buff, 0 );
-               data = (void *) ival;   
-   
-            } else if( type == AST__COMPLEXF ){
-               (void) sprintf( buff, "dr%d", ncard );
-               dval[ 0 ] = astReadDouble( channel, buff, AST__BAD );
-
-               (void) sprintf( buff, "di%d", ncard );
-               dval[ 1 ] = astReadDouble( channel, buff, AST__BAD );
-               data = (void *) dval;   
-   
-            } else if( type == AST__COMPLEXI ){
-               (void) sprintf( buff, "dr%d", ncard );
-               ival[ 0 ] = astReadInt( channel, buff, 0 );
-
-               (void) sprintf( buff, "di%d", ncard );
-               ival[ 1 ] = astReadInt( channel, buff, 0 );
-               data = (void *) ival;   
-
-            } else {
-               data = NULL;
-            }
-
-/* Get the keyword flags (only written by versions of AST later than 
-   V1.4). These are packed into an int. */
-            (void) sprintf( buff, "fl%d", ncard );
-            flags = astReadInt( channel, buff, 0 );
-
-/* If the flags were not found, use the keyword deletion flag written by 
-   AST V1.4 and earlier. */
-            if( !flags ) {
-               (void) sprintf( buff, "dl%d", ncard );
-               flags = astReadInt( channel, buff, 0 );
-            }
-
-/* Get the keyword comment. */
-            (void) sprintf( buff, "cm%d", ncard );
-            comment = astReadString( channel, buff, NULL );
-
-/* Append a new card to the output FitsChan. */
-            NewCard( new, keynm, type, data, comment, flags, status );
-
-/* Free the character strings, and data (if required). */
-            comment = (char *) astFree( (void *) comment );
-            keynm = (char *) astFree( (void *) keynm );
-            if( free_data ) data = astFree( data );
-         }
-
-/* Move on to the next card. */
-         ncard++;
-      }
-
-/* Set up the current card index. */
-      astSetCard( new, astReadInt( channel, "card", 0 ) );
-   }
-
-/* If an error occurred, clean up by deleting the new FitsChan. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new FitsChan pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astEmpty_( AstFitsChan *this, int *status ){
-   if( !this ) return;
-   (**astMEMBER(this,FitsChan,Empty))(this, status );
-}
-
-void astPutCards_( AstFitsChan *this, const char *cards, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,FitsChan,PutCards))(this,cards, status );
-}
-
-void astPutFits_( AstFitsChan *this, const char *card, int overwrite, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,FitsChan,PutFits))(this,card,overwrite, status );
-}
-
-void astDelFits_( AstFitsChan *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,FitsChan,DelFits))(this, status );
-}
-
-void astPurgeWCS_( AstFitsChan *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,FitsChan,PurgeWCS))(this, status );
-}
-
-void astRetainFits_( AstFitsChan *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,FitsChan,RetainFits))(this, status );
-}
-
-int astFitsEof_( AstFitsChan *this, int *status ){
-   if( !this ) return 1;
-   return (**astMEMBER(this,FitsChan,FitsEof))( this, status );
-}
-
-void astSetFitsCom_( AstFitsChan *this, const char *name, 
-                         const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsCom))( this, name, comment, overwrite, status );
-}
-
-void astSetFitsI_( AstFitsChan *this, const char *name, int value, 
-                     const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsI))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsF_( AstFitsChan *this, const char *name, double value, 
-                       const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsF))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsS_( AstFitsChan *this, const char *name, const char *value, 
-                        const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsS))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsCN_( AstFitsChan *this, const char *name, const char *value, 
-                    const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsCN))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsCF_( AstFitsChan *this, const char *name, double *value, 
-                          const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsCF))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsCI_( AstFitsChan *this, const char *name, int *value, 
-                          const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsCI))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsL_( AstFitsChan *this, const char *name, int value, 
-                         const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsL))( this, name, value, comment, overwrite, status );
-}
-
-void astSetFitsU_( AstFitsChan *this, const char *name, const char *comment, 
-                   int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsU))( this, name, comment, overwrite, status );
-}
-
-void astSetFitsCM_( AstFitsChan *this, const char *comment, int overwrite, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FitsChan,SetFitsCM))( this, comment, overwrite, status );
-}
-
-void astClearCard_( AstFitsChan *this, int *status ){
-   if( !this ) return;
-   (**astMEMBER(this,FitsChan,ClearCard))( this, status );
-}
-
-void astSetCard_( AstFitsChan *this, int card, int *status ){
-   if( !this ) return;
-   (**astMEMBER(this,FitsChan,SetCard))( this, card, status );
-}
-
-int astTestCard_( AstFitsChan *this, int *status ){
-   if( !this ) return 0;
-   return (**astMEMBER(this,FitsChan,TestCard))( this, status );
-}
-
-int astGetCard_( AstFitsChan *this, int *status ){
-   if( !this ) return 0;
-   return (**astMEMBER(this,FitsChan,GetCard))( this, status );
-}
-
-int astGetNcard_( AstFitsChan *this, int *status ){
-   if( !this ) return 0;
-   return (**astMEMBER(this,FitsChan,GetNcard))( this, status );
-}
-
-int astGetClean_( AstFitsChan *this, int *status ){
-   if( !this ) return 0;
-   return (**astMEMBER(this,FitsChan,GetClean))( this, status );
-}
-
-const char *astGetAllWarnings_( AstFitsChan *this, int *status ){
-   if( !this ) return NULL;
-   return (**astMEMBER(this,FitsChan,GetAllWarnings))( this, status );
-}
-
-int astGetFitsCF_( AstFitsChan *this, const char *name, double *value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsCF))( this, name, value, status );
-}
-
-int astGetFitsCI_( AstFitsChan *this, const char *name, int *value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsCI))( this, name, value, status );
-}
-
-int astGetFitsF_( AstFitsChan *this, const char *name, double *value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsF))( this, name, value, status );
-}
-
-int astGetFitsI_( AstFitsChan *this, const char *name, int *value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsI))( this, name, value, status );
-}
-
-int astGetFitsL_( AstFitsChan *this, const char *name, int *value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsL))( this, name, value, status );
-}
-
-int astTestFits_( AstFitsChan *this, const char *name, int *there, int *status ){
-   if( there ) *there = 0;
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,TestFits))( this, name, there, status );
-}
-
-int astGetFitsS_( AstFitsChan *this, const char *name, char **value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsS))( this, name, value, status );
-}
-
-int astGetFitsCN_( AstFitsChan *this, const char *name, char **value, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetFitsCN))( this, name, value, status );
-}
-
-int astFitsGetCom_( AstFitsChan *this, const char *name, char **comment, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,FitsGetCom))( this, name, comment, status );
-}
-
-int astKeyFields_( AstFitsChan *this, const char *filter, int maxfld, 
-                int *ubnd, int *lbnd, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,KeyFields))( this, filter, maxfld,
-           ubnd, lbnd, status );
-}
-
-int astFindFits_( AstFitsChan *this, const char *name, char *card, int inc, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,FindFits))( this, name, card, inc, status );
-}
-
-int astGetEncoding_( AstFitsChan *this, int *status ){
-   if( !astOK ) return UNKNOWN_ENCODING;
-   return (**astMEMBER(this,FitsChan,GetEncoding))( this, status );
-}
-
-int astGetCDMatrix_( AstFitsChan *this, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,FitsChan,GetCDMatrix))( this, status );
-}
-
-
-
-
-
-/* 
- * A diagnostic function which lists the contents of a FitsChan to
- * standard output. 
- */
-
-
-/*
-static void ListFC( AstFitsChan *, const char * );
-
-static void ListFC( AstFitsChan *this, const char *ttl ) {
-   FitsCard *cardo;
-   char card[ 81 ];
-   printf("%s\n----------------------------------------\n", ttl );
-   cardo = (FitsCard *) this->card;
-   astClearCard( this );
-   while( !astFitsEof( this ) && astOK ){
-      FormatCard( this, card, "List" );
-      if( this->card == cardo ) {
-         printf( "%s   <<<<< currrent card <<<<< \n", card );
-      } else {
-         printf( "%s\n", card );
-      }
-      MoveCard( this, 1, "List", "FitsChan" );
-   }
-   this->card = cardo;
-} 
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/fitschan.h b/ast-5.3-1/fitschan.h
deleted file mode 100644
index 0510531..0000000
--- a/ast-5.3-1/fitschan.h
+++ /dev/null
@@ -1,671 +0,0 @@
-#if !defined( FITSCHAN_INCLUDED ) /* Include this file only once */
-#define FITSCHAN_INCLUDED
-/*
-*+
-*  Name:
-*     fitschan.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the FitsChan class.
-
-*  Invocation:
-*     #include "fitschan.h"
-
-*  Description:
-*     This include file defines the interface to the FitsChan class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The FitsChan class provides facilities for reading and writing AST 
-*     Objects in the form of FITS header cards.
-
-*  Inheritance:
-*     The FitsChan class inherits from the Channel class.
-
-*  Macros:
-
-*     Protected:
-*        AST__NOTYPE
-*           Integer dentifier for an illegal FITS data type.
-*        AST__COMMENT
-*           Integer dentifier for a FITS comment keyword.
-*        AST__INT    
-*           Integer dentifier for the integer FITS data type.
-*        AST__FLOAT  
-*           Integer dentifier for the floating point FITS data type.
-*        AST__STRING 
-*           Integer dentifier for the string FITS data type.
-*        AST__CONTINUE 
-*           Integer dentifier for the continuation string FITS data type.
-*        AST__COMPLEXF
-*           Integer dentifier for the complex floating point FITS data type.
-*        AST__COMPLEXI
-*           Integer dentifier for the complex integer FITS data type.
-*        AST__LOGICAL 
-*           Integer dentifier for the logical FITS data type.
-*        AST__UNDEF
-*           Integer dentifier for undefined FITS data type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     11-DEC-1996 (DSB):
-*        Original version.
-*     30-Jun-1997 (DSB):
-*        Changed character pointer argument to character array in PutFits.
-*     26-SEP-1997 (DSB):
-*        Added CDMatrix attribute.
-*     21-OCT-1997 (DSB):
-*        o  Renamed astFields as astKeyFields.
-*     1-APR-2000 (DSB):
-*        Changes for CDi_j based FITS-WCS standard.
-*     18-MAY-2000 (DSB):
-*        Added Warnings attribute.
-*     4-APR-2001 (DSB):
-*        Added AllWarnings attribute.
-*     20-FEB-2002 (DSB):
-*        Added CarLin attribute.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitFitsChanVtab method.
-*     13-FEB-2003 (DSB):
-*        Added Clean attribute.
-*     19-MAR-2004 (DSB):
-*        Added astPutCards function.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"             /* I/O channels (parent class) */
-#include "pointset.h"            /* Defines AST__BAD */
-#include "keymap.h"              /* Defines the AstKeyMap type */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-#if defined(astCLASS)            /* Protected */
-#define AST__NOTYPE       -1
-#define AST__COMMENT       0
-#define AST__INT           1
-#define AST__FLOAT         2  
-#define AST__STRING        3
-#define AST__COMPLEXF      4
-#define AST__COMPLEXI      5
-#define AST__LOGICAL       6
-#define AST__CONTINUE      7
-#define AST__UNDEF         8
-
-/* Define constants used to size global arrays in this module. */
-#define AST__FITSCHAN_FITSCARDLEN        80
-#define AST__FITSCHAN_GETATTRIB_BUFF_LEN 50    
-
-#endif
-
-
-
-/* Type Definitions. */
-/* ================= */
-
-/* FitsChan structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstFitsChan {
-
-/* Attributes inherited from the parent class. */
-   AstChannel channel;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int encoding;    /* System for encoding AST objects ito FITS headers */
-   int defb1950;    /* Use FK4 B1950 as defaults? */
-   int cdmatrix;    /* Use a CD matrix in FITS-WCS Encoding? */
-   int carlin;      /* Use linear CAR mappings? */
-   int iwc;         /* Include an IWC Frame? */
-   int clean;       /* Remove used cards even if an error occurs? */
-   int fitsdigits;  /* No. of decmial places in formatted floating point keyword values */
-   char *warnings;  /* Pointer to a string containing warning conditions */
-   void *card;      /* Pointer to next FitsCard to be read */
-   void *head;      /* Pointer to first FitsCard in the circular linked list */
-   AstKeyMap *keyseq;   /* List of keyword sequence numbers used */
-   AstKeyMap *keywords; /* A KeyMap holding the keywords in the FitsChan */
-   const char *(* source)( void ); /* Pointer to source function */
-   char *(* source_wrap)( const char *(*)( void ), int * );
-                                   /* Source wrapper function pointer */
-   void (* sink)( const char * );  /* Pointer to sink function */
-   void (* sink_wrap)( void (*)( const char * ), const char *, int * );
-                                   /* Sink wrapper function pointer */
-
-} AstFitsChan;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstFitsChanVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstChannelVtab channel_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* Empty)( AstFitsChan *, int * );
-   void (* DelFits)( AstFitsChan *, int * );
-   void (* PurgeWCS)( AstFitsChan *, int * );
-   void (* RetainFits)( AstFitsChan *, int * );
-   int (* FindFits)( AstFitsChan *, const char *, char [81], int, int * );
-   void (* PutFits)( AstFitsChan *, const char [81], int, int * );
-   void (* PutCards)( AstFitsChan *, const char *, int * );
-   int (* KeyFields)( AstFitsChan *, const char *, int, int *, int *, int * );
-   int (* FitsEof)( AstFitsChan *, int * );
-   int (* GetFitsCF)( AstFitsChan *, const char *, double *, int * );
-   int (* GetFitsCI)( AstFitsChan *, const char *, int *, int * );
-   int (* GetFitsF)( AstFitsChan *, const char *, double *, int * );
-   int (* GetFitsI)( AstFitsChan *, const char *, int *, int * );
-   int (* GetFitsL)( AstFitsChan *, const char *, int *, int * );
-   int (* TestFits)( AstFitsChan *, const char *, int *, int * );
-   int (* GetFitsS)( AstFitsChan *, const char *, char **, int * );
-   int (* GetFitsCN)( AstFitsChan *, const char *, char **, int * );
-   int (* FitsGetCom)( AstFitsChan *, const char *, char **, int * );
-   void (* SetFitsCom)( AstFitsChan *, const char *, const char *, int, int * );
-   void (* SetFitsCF)( AstFitsChan *, const char *, double *, const char *, int, int * );
-   void (* SetFitsCI)( AstFitsChan *, const char *, int *, const char *, int, int * );
-   void (* SetFitsF)( AstFitsChan *, const char *, double, const char *, int, int * );
-   void (* SetFitsI)( AstFitsChan *, const char *, int, const char *, int, int * );
-   void (* SetFitsL)( AstFitsChan *, const char *, int, const char *, int, int * );
-   void (* SetFitsU)( AstFitsChan *, const char *, const char *, int, int * );
-   void (* SetFitsS)( AstFitsChan *, const char *, const char *, const char *, int, int * );
-   void (* SetFitsCN)( AstFitsChan *, const char *, const char *, const char *, int, int * );
-   void (* SetFitsCM)( AstFitsChan *, const char *, int, int * );
-   int (* GetCard)( AstFitsChan *, int * );
-   int (* TestCard)( AstFitsChan *, int * );
-   void (* SetCard)( AstFitsChan *, int, int * );
-   void (* ClearCard)( AstFitsChan *, int * );
-   int (* GetFitsDigits)( AstFitsChan *, int * );
-   int (* TestFitsDigits)( AstFitsChan *, int * );
-   void (* SetFitsDigits)( AstFitsChan *, int, int * );
-   void (* ClearFitsDigits)( AstFitsChan *, int * );
-   int (* GetDefB1950)( AstFitsChan *, int * );
-   int (* TestDefB1950)( AstFitsChan *, int * );
-   void (* SetDefB1950)( AstFitsChan *, int, int * );
-   void (* ClearDefB1950)( AstFitsChan *, int * );
-   int (* GetCarLin)( AstFitsChan *, int * );
-   int (* TestCarLin)( AstFitsChan *, int * );
-   void (* SetCarLin)( AstFitsChan *, int, int * );
-   void (* ClearCarLin)( AstFitsChan *, int * );
-   int (* GetNcard)( AstFitsChan *, int * );
-   int (* GetEncoding)( AstFitsChan *, int * );
-   int (* TestEncoding)( AstFitsChan *, int * );
-   void (* SetEncoding)( AstFitsChan *, int, int * );
-   void (* ClearEncoding)( AstFitsChan *, int * );
-   const char *(* GetWarnings)( AstFitsChan *, int * );
-   const char *(* GetAllWarnings)( AstFitsChan *, int * );
-   int (* TestWarnings)( AstFitsChan *, int * );
-   void (* ClearWarnings)( AstFitsChan *, int * );
-   void (* SetWarnings)( AstFitsChan *, const char *, int * );
-   int (* GetClean)( AstFitsChan *, int * );
-   int (* TestClean)( AstFitsChan *, int * );
-   void (* SetClean)( AstFitsChan *, int, int * );
-   void (* ClearClean)( AstFitsChan *, int * );
-   int (* GetCDMatrix)( AstFitsChan *, int * );
-   int (* TestCDMatrix)( AstFitsChan *, int * );
-   void (* SetCDMatrix)( AstFitsChan *, int, int * );
-   void (* ClearCDMatrix)( AstFitsChan *, int * );
-
-   int (* GetIwc)( AstFitsChan *, int * );
-   int (* TestIwc)( AstFitsChan *, int * );
-   void (* SetIwc)( AstFitsChan *, int, int * );
-   void (* ClearIwc)( AstFitsChan *, int * );
-
-} AstFitsChanVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstFitsChanGlobals {
-   AstFitsChanVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__FITSCHAN_GETATTRIB_BUFF_LEN + 1 ];
-   char CnvType_Text[ AST__FITSCHAN_FITSCARDLEN + 1 ]; 
-   char CnvType_Text0[ AST__FITSCHAN_FITSCARDLEN + 1 ]; 
-   char CnvType_Text1[ AST__FITSCHAN_FITSCARDLEN + 1 ]; 
-   int Items_Written;
-   int Write_Nest;
-   int Current_Indent;
-   int Ignore_Used;
-   int Mark_New;
-   int CreateKeyword_Seq_Nchars;
-   char FormatKey_Buff[ 10 ];
-   char FitsGetCom_Sval[ AST__FITSCHAN_FITSCARDLEN + 1 ];
-   const char *IsSpectral_Ret;
-   char Match_Fmt[ 10 ];
-   const char *Match_Template;
-   int *Match_PA;
-   int *Match_PB;
-   int Match_NA;
-   int Match_NB;
-   int Match_Nentry;
-   char WcsCelestial_Type[ 4 ];
-} AstFitsChanGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(FitsChan)          /* Check class membership */
-astPROTO_ISA(FitsChan)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstFitsChan *astFitsChan_( const char *(*)( void ), void (*)( const char * ),
-                          const char *, int *, ...);
-#else
-AstFitsChan *astFitsChanId_( const char *(*)( void ), void (*)( const char * ),
-                            const char *, ... )__attribute__((format(printf,3,4)));
-AstFitsChan *astFitsChanForId_( const char *(*)( void ),
-                              char *(*)( const char *(*)( void ), int * ),
-                              void (*)( const char * ),
-                              void (*)( void (*)( const char * ),
-                                        const char *, int * ),
-                              const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstFitsChan *astInitFitsChan_( void *, size_t, int, AstFitsChanVtab *, 
-                               const char *, 
-                               const char *(*)( void ),
-                               char *(*)( const char *(*)( void ), int * ),
-                               void (*)( const char * ),
-                               void (*)( void (*)( const char * ), const char *, int * ), int * );
-
-/* Vtab initialiser. */
-void astInitFitsChanVtab_( AstFitsChanVtab *, const char *, int * );
-
-
-
-/* Loader. */
-AstFitsChan *astLoadFitsChan_( void *, size_t, AstFitsChanVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitFitsChanGlobals_( AstFitsChanGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-   void astPutFits_( AstFitsChan *, const char [81], int, int * );
-   void astPutCards_( AstFitsChan *, const char *, int * );
-   int  astFindFits_( AstFitsChan *, const char *, char [81], int, int * );
-   void astDelFits_( AstFitsChan *, int * );
-   void astPurgeWCS_( AstFitsChan *, int * );
-   void astRetainFits_( AstFitsChan *, int * );
-   void astSetFitsCF_( AstFitsChan *, const char *, double *, const char *, int, int * );
-   void astSetFitsCI_( AstFitsChan *, const char *, int *, const char *, int, int * );
-   void astSetFitsF_( AstFitsChan *, const char *, double, const char *, int, int * );
-   void astSetFitsI_( AstFitsChan *, const char *, int, const char *, int, int * );
-   void astSetFitsL_( AstFitsChan *, const char *, int, const char *, int, int * );
-   void astSetFitsU_( AstFitsChan *, const char *, const char *, int, int * );
-   void astSetFitsS_( AstFitsChan *, const char *, const char *, const char *, int, int * );
-   void astSetFitsCM_( AstFitsChan *, const char *, int, int * );
-   void astSetFitsCN_( AstFitsChan *, const char *, const char *, const char *, int, int * );
-   int  astGetFitsCF_( AstFitsChan *, const char *, double *, int * );
-   int  astGetFitsCI_( AstFitsChan *, const char *, int *, int * );
-   int  astGetFitsF_( AstFitsChan *, const char *, double *, int * );
-   int  astGetFitsI_( AstFitsChan *, const char *, int *, int * );
-   int  astGetFitsL_( AstFitsChan *, const char *, int *, int * );
-   int  astTestFits_( AstFitsChan *, const char *, int *, int * );
-   int  astGetFitsS_( AstFitsChan *, const char *, char **, int * );
-   int  astGetFitsCN_( AstFitsChan *, const char *, char **, int * );
-
-# if defined(astCLASS)           /* Protected */
-
-   int  astFitsEof_( AstFitsChan *, int * );
-   int  astFitsGetCom_( AstFitsChan *, const char *, char **, int * );
-   void astSetFitsCom_( AstFitsChan *, const char *, const char *, int, int * );
-
-   void astEmpty_( AstFitsChan *, int * );
-   int  astKeyFields_( AstFitsChan *, const char *, int, int *, int *, int * );
-
-   int astGetCard_( AstFitsChan *, int * );
-   int astTestCard_( AstFitsChan *, int * );
-   void astSetCard_( AstFitsChan *, int, int * );
-   void astClearCard_( AstFitsChan *, int * );
-
-   int astGetDefB1950_( AstFitsChan *, int * );
-   int astTestDefB1950_( AstFitsChan *, int * );
-   void astSetDefB1950_( AstFitsChan *, int, int * );
-   void astClearDefB1950_( AstFitsChan *, int * );
-
-   int astGetCDMatrix_( AstFitsChan *, int * );
-   int astTestCDMatrix_( AstFitsChan *, int * );
-   void astSetCDMatrix_( AstFitsChan *, int, int * );
-   void astClearCDMatrix_( AstFitsChan *, int * );
-
-   int astGetCarLin_( AstFitsChan *, int * );
-   int astTestCarLin_( AstFitsChan *, int * );
-   void astSetCarLin_( AstFitsChan *, int, int * );
-   void astClearCarLin_( AstFitsChan *, int * );
-
-   int astGetIwc_( AstFitsChan *, int * );
-   int astTestIwc_( AstFitsChan *, int * );
-   void astSetIwc_( AstFitsChan *, int, int * );
-   void astClearIwc_( AstFitsChan *, int * );
-
-   int astGetClean_( AstFitsChan *, int * );
-   int astTestClean_( AstFitsChan *, int * );
-   void astSetClean_( AstFitsChan *, int, int * );
-   void astClearClean_( AstFitsChan *, int * );
-
-   int astGetFitsDigits_( AstFitsChan *, int * );
-   int astTestFitsDigits_( AstFitsChan *, int * );
-   void astSetFitsDigits_( AstFitsChan *, int, int * );
-   void astClearFitsDigits_( AstFitsChan *, int * );
-
-   const char *astGetAllWarnings_( AstFitsChan *, int * );
-
-   const char *astGetWarnings_( AstFitsChan *, int * );
-   int astTestWarnings_( AstFitsChan *, int * );
-   void astClearWarnings_( AstFitsChan *, int * );
-   void astSetWarnings_( AstFitsChan *, const char *, int * );
-
-   int astGetNcard_( AstFitsChan *, int * );
-
-   int astGetEncoding_( AstFitsChan *, int * );
-   int astTestEncoding_( AstFitsChan *, int * );
-   void astSetEncoding_( AstFitsChan *, int, int * );
-   void astClearEncoding_( AstFitsChan *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckFitsChan(this) astINVOKE_CHECK(FitsChan,this,0)
-#define astVerifyFitsChan(this) astINVOKE_CHECK(FitsChan,this,1)
-
-/* Test class membership. */
-#define astIsAFitsChan(this) astINVOKE_ISA(FitsChan,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astFitsChan astINVOKE(F,astFitsChan_)
-#else
-#define astFitsChan astINVOKE(F,astFitsChanId_)
-#define astFitsChanFor astINVOKE(F,astFitsChanForId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitFitsChan(mem,size,init,vtab,name,source,sourcewrap,sink,sinkwrap) \
-astINVOKE(O,astInitFitsChan_(mem,size,init,vtab,name,source,sourcewrap,sink,sinkwrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFitsChanVtab(vtab,name) astINVOKE(V,astInitFitsChanVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFitsChan(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFitsChan_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckFitsChan to validate FitsChan pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astPutFits(this,card,overwrite) \
-astINVOKE(V,astPutFits_(astCheckFitsChan(this),card,overwrite,STATUS_PTR))
-
-#define astPutCards(this,cards) \
-astINVOKE(V,astPutCards_(astCheckFitsChan(this),cards,STATUS_PTR))
-
-#define astDelFits(this) \
-astINVOKE(V,astDelFits_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astPurgeWCS(this) \
-astINVOKE(V,astPurgeWCS_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astRetainFits(this) \
-astINVOKE(V,astRetainFits_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astFindFits( this, name, card, inc ) \
-astINVOKE(V,astFindFits_(astCheckFitsChan(this),name,card,inc,STATUS_PTR))
-
-#define astSetFitsI(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsI_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsF(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsF_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsS(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsS_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCN(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsCN_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCI(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsCI_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCF(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsCF_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsL(this,name,value,comment,overwrite) \
-astINVOKE(V,astSetFitsL_(astCheckFitsChan(this),name,value,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsU(this,name,comment,overwrite) \
-astINVOKE(V,astSetFitsU_(astCheckFitsChan(this),name,comment,overwrite,STATUS_PTR))
-
-#define astSetFitsCM(this,comment,overwrite) \
-astINVOKE(V,astSetFitsCM_(astCheckFitsChan(this),comment,overwrite,STATUS_PTR))
-
-#define astGetFitsCF(this,name,value) \
-astINVOKE(V,astGetFitsCF_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsCI(this,name,value) \
-astINVOKE(V,astGetFitsCI_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsF(this,name,value) \
-astINVOKE(V,astGetFitsF_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsI(this,name,value) \
-astINVOKE(V,astGetFitsI_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsL(this,name,value) \
-astINVOKE(V,astGetFitsL_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astTestFits(this,name,there) \
-astINVOKE(V,astTestFits_(astCheckFitsChan(this),name,there,STATUS_PTR))
-
-#define astGetFitsS(this,name,value) \
-astINVOKE(V,astGetFitsS_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-#define astGetFitsCN(this,name,value) \
-astINVOKE(V,astGetFitsCN_(astCheckFitsChan(this),name,value,STATUS_PTR))
-
-
-#if defined(astCLASS)            /* Protected */
-
-#define astFitsEof(this) \
-astINVOKE(V,astFitsEof_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astFitsGetCom(this,name,comment) \
-astINVOKE(V,astFitsGetCom_(astCheckFitsChan(this),name,comment,STATUS_PTR))
-
-#define astSetFitsCom(this,name,comment,overwrite) \
-astINVOKE(V,astSetFitsCom_(astCheckFitsChan(this),name,comment,overwrite,STATUS_PTR))
-
-#define astEmpty(this) \
-astINVOKE(V,astEmpty_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astKeyFields(this,filter,maxfld,ubnd,lbnd) \
-astINVOKE(V,astKeyFields_(astCheckFitsChan(this),filter,maxfld,ubnd,lbnd,STATUS_PTR))
-
-#define astClearCard(this) \
-astINVOKE(V,astClearCard_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetCard(this) \
-astINVOKE(V,astGetCard_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetCard(this,card) \
-astINVOKE(V,astSetCard_(astCheckFitsChan(this),card,STATUS_PTR))
-#define astTestCard(this) \
-astINVOKE(V,astTestCard_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearDefB1950(this) \
-astINVOKE(V,astClearDefB1950_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetDefB1950(this) \
-astINVOKE(V,astGetDefB1950_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetDefB1950(this,defb950) \
-astINVOKE(V,astSetDefB1950_(astCheckFitsChan(this),defb950,STATUS_PTR))
-#define astTestDefB1950(this) \
-astINVOKE(V,astTestDefB1950_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearCDMatrix(this) \
-astINVOKE(V,astClearCDMatrix_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetCDMatrix(this) \
-astINVOKE(V,astGetCDMatrix_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetCDMatrix(this,cdmatrix) \
-astINVOKE(V,astSetCDMatrix_(astCheckFitsChan(this),cdmatrix,STATUS_PTR))
-#define astTestCDMatrix(this) \
-astINVOKE(V,astTestCDMatrix_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearCarLin(this) \
-astINVOKE(V,astClearCarLin_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetCarLin(this) \
-astINVOKE(V,astGetCarLin_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetCarLin(this,carln) \
-astINVOKE(V,astSetCarLin_(astCheckFitsChan(this),carln,STATUS_PTR))
-#define astTestCarLin(this) \
-astINVOKE(V,astTestCarLin_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearClean(this) \
-astINVOKE(V,astClearClean_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetClean(this) \
-astINVOKE(V,astGetClean_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetClean(this,value) \
-astINVOKE(V,astSetClean_(astCheckFitsChan(this),value,STATUS_PTR))
-#define astTestClean(this) \
-astINVOKE(V,astTestClean_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearFitsDigits(this) \
-astINVOKE(V,astClearFitsDigits_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetFitsDigits(this) \
-astINVOKE(V,astGetFitsDigits_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetFitsDigits(this,fitsdigits) \
-astINVOKE(V,astSetFitsDigits_(astCheckFitsChan(this),fitsdigits,STATUS_PTR))
-#define astTestFitsDigits(this) \
-astINVOKE(V,astTestFitsDigits_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearWarnings(this) \
-astINVOKE(V,astClearWarnings_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetWarnings(this) \
-astINVOKE(V,astGetWarnings_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetWarnings(this,warnings) \
-astINVOKE(V,astSetWarnings_(astCheckFitsChan(this),warnings,STATUS_PTR))
-#define astTestWarnings(this) \
-astINVOKE(V,astTestWarnings_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astGetAllWarnings(this) \
-astINVOKE(V,astGetAllWarnings_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astGetNcard(this) \
-astINVOKE(V,astGetNcard_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearEncoding(this) \
-astINVOKE(V,astClearEncoding_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetEncoding(this) \
-astINVOKE(V,astGetEncoding_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetEncoding(this,encoding) \
-astINVOKE(V,astSetEncoding_(astCheckFitsChan(this),encoding,STATUS_PTR))
-#define astTestEncoding(this) \
-astINVOKE(V,astTestEncoding_(astCheckFitsChan(this),STATUS_PTR))
-
-#define astClearIwc(this) \
-astINVOKE(V,astClearIwc_(astCheckFitsChan(this),STATUS_PTR))
-#define astGetIwc(this) \
-astINVOKE(V,astGetIwc_(astCheckFitsChan(this),STATUS_PTR))
-#define astSetIwc(this,iwc) \
-astINVOKE(V,astSetIwc_(astCheckFitsChan(this),iwc,STATUS_PTR))
-#define astTestIwc(this) \
-astINVOKE(V,astTestIwc_(astCheckFitsChan(this),STATUS_PTR))
-
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/fkeymap.c b/ast-5.3-1/fkeymap.c
deleted file mode 100644
index fa20aee..0000000
--- a/ast-5.3-1/fkeymap.c
+++ /dev/null
@@ -1,947 +0,0 @@
-/*
-*+
-*  Name:
-*     fkeymap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST KeyMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the KeyMap class.
-
-*  Routines Defined:
-*     AST_ISAKEYMAP
-*     AST_KEYMAP
-*     AST_MAPPUT0<X>
-*     AST_MAPPUT1<X>
-*     AST_MAPGET0<X>
-*     AST_MAPGET1<X>
-*     AST_MAPGETELEM<X>
-*     AST_MAPREMOVE
-*     AST_MAPSIZE
-*     AST_MAPLENGTH
-*     AST_MAPLENC
-*     AST_MAPTYPE
-*     AST_MAPKEY
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     13-NOV-2004 (DSB):
-*        Original version.
-*     5-JUN-2006 (DSB):
-*        Added support for single precision entries.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "keymap.h"                 /* C interface to the KeyMap class */
-
-F77_LOGICAL_FUNCTION(ast_isakeymap)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAKEYMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAKeyMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_keymap)(    CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_KEYMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astKeyMap( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_mapput0a)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT0A", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut0A( astI2P( *THIS ), key, astI2P( *VALUE ), comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput0c)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              CHARACTER(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(VALUE)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_CHARACTER(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *value, *key;
-
-   astAt( "AST_MAPPUT0C", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      value = astString( VALUE, VALUE_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut0C( astI2P( *THIS ), key, value, comment );
-      astFree( key );
-      astFree( value );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput0i)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT0I", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut0I( astI2P( *THIS ), key, *VALUE, comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput0d)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              DOUBLE(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_DOUBLE(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT0D", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut0D( astI2P( *THIS ), key, *VALUE, comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput0r)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              REAL(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_REAL(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT0R", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut0F( astI2P( *THIS ), key, *VALUE, comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput1a)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(SIZE),
-                              INTEGER_ARRAY(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(SIZE)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-   AstObject **values;
-   int i;
-
-   astAt( "AST_MAPPUT1A", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-
-      values = astMalloc( sizeof( AstObject * )*(size_t)( *SIZE ));
-      if( astOK ) {
-         for( i = 0; i < *SIZE; i++ ) {
-            values[ i ] = astI2P( VALUE[ i ] );
-         }
-      }
-
-      astMapPut1A( astI2P( *THIS ), key, *SIZE, values, comment );
-      astFree( values );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput1c)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(SIZE),
-                              CHARACTER_ARRAY(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(VALUE)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(SIZE)
-   GENPTR_CHARACTER_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-   const char **values;
-   int i;
-
-   astAt( "AST_MAPPUT1C", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-
-      values = astMalloc( sizeof( const char * )*(size_t)( *SIZE ));
-      if( astOK ) {
-         for( i = 0; i < *SIZE; i++ ) {
-            values[ i ] = astString( VALUE + i*VALUE_length, VALUE_length );
-         }
-      }
-
-      astMapPut1C( astI2P( *THIS ), key, *SIZE, values, comment );
-
-      if( astOK ) {
-         for( i = 0; i < *SIZE; i++ ) astFree( (void *) values[ i ] );
-      }
-      astFree( (void *) values );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-
-
-F77_SUBROUTINE(ast_mapput1i)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(SIZE),
-                              INTEGER_ARRAY(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(SIZE)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT1I", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut1I( astI2P( *THIS ), key, *SIZE, VALUE, comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-
-F77_SUBROUTINE(ast_mapput1d)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(SIZE),
-                              DOUBLE_ARRAY(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(SIZE)
-   GENPTR_DOUBLE_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT1D", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut1D( astI2P( *THIS ), key, *SIZE, VALUE, comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-F77_SUBROUTINE(ast_mapput1r)( INTEGER(THIS),
-                              CHARACTER(KEY),
-                              INTEGER(SIZE),
-                              REAL_ARRAY(VALUE),
-                              CHARACTER(COMMENT),
-                              INTEGER(STATUS)
-                              TRAIL(KEY)
-                              TRAIL(COMMENT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(SIZE)
-   GENPTR_REAL_ARRAY(VALUE)
-   GENPTR_CHARACTER(COMMENT)
-   char *comment, *key;
-
-   astAt( "AST_MAPPUT1R", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      comment = astString( COMMENT, COMMENT_length );
-      astMapPut1F( astI2P( *THIS ), key, *SIZE, VALUE, comment );
-      astFree( key );
-      astFree( comment );
-   )
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget0i)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGET0I", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet0I( astI2P( *THIS ), key, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0d)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    DOUBLE(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_DOUBLE(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGET0D", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet0D( astI2P( *THIS ), key, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0r)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    REAL(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_REAL(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGET0R", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet0F( astI2P( *THIS ), key, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0c)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    CHARACTER(VALUE),
-                                    INTEGER(L),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY)
-                                    TRAIL(VALUE) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_CHARACTER(VALUE)
-   GENPTR_INTEGER(L)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-   const char *value;
-   int i;
-
-   astAt( "AST_MAPGET0C", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      value = NULL;
-      RESULT = astMapGet0C( astI2P( *THIS ), key, &value ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-      i = 0;
-      if( value ) {
-         for( ; value[ i ] && ( i < VALUE_length ); i++ ) {
-            VALUE[ i ] = value[ i ];
-         }
-         *L = i;
-      } else {
-         *L = 0;
-      }
-
-      if( VALUE ) {
-         for( ; i < VALUE_length; i++ ) {
-            VALUE[ i ] = ' ';
-         }
-      }
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget0a)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-   AstObject *value;
-
-   astAt( "AST_MAPGET0A", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet0A( astI2P( *THIS ), key, &value ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-      *VALUE = astP2I( value );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget1i)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(MXVAL),
-                                    INTEGER(NVAL),
-                                    INTEGER_ARRAY(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(MXVAL)
-   GENPTR_INTEGER(NVAL)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGET1I", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet1I( astI2P( *THIS ), key, *MXVAL, NVAL, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget1d)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(MXVAL),
-                                    INTEGER(NVAL),
-                                    DOUBLE_ARRAY(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(MXVAL)
-   GENPTR_INTEGER(NVAL)
-   GENPTR_DOUBLE_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGET1D", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet1D( astI2P( *THIS ), key, *MXVAL, NVAL, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapget1r)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(MXVAL),
-                                    INTEGER(NVAL),
-                                    REAL_ARRAY(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(MXVAL)
-   GENPTR_INTEGER(NVAL)
-   GENPTR_REAL_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGET1R", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet1F( astI2P( *THIS ), key, *MXVAL, NVAL, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget1a)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(MXVAL),
-                                    INTEGER(NVAL),
-                                    INTEGER_ARRAY(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(MXVAL)
-   GENPTR_INTEGER(NVAL)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-   AstObject **values;
-   int i;
-
-   astAt( "AST_MAPGET1A", NULL, 0 );
-   astWatchSTATUS(
-      values = astMalloc( sizeof( AstObject *)*(size_t) *MXVAL );
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet1A( astI2P( *THIS ), key, *MXVAL, NVAL, values ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-      if( astOK ) {
-         for( i = 0; i < *NVAL; i++ ) VALUE[ i ] = astP2I( values[ i ] );
-      }
-      astFree( values );
-
-   )
-   return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapget1c)( INTEGER(THIS),
-                                    CHARACTER(KEY),
-                                    INTEGER(MXVAL),
-                                    INTEGER(NVAL),
-                                    CHARACTER_ARRAY(VALUE),
-                                    INTEGER(STATUS)
-                                    TRAIL(KEY)
-                                    TRAIL(VALUE) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(MXVAL)
-   GENPTR_INTEGER(NVAL)
-   GENPTR_CHARACTER_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-   char *values, *c, *d;
-   int i, j, term;
-
-   astAt( "AST_MAPGET1C", NULL, 0 );
-   astWatchSTATUS(
-      values = astMalloc( sizeof( char )*(size_t) (*MXVAL)*( VALUE_length + 1 ) );
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGet1C( astI2P( *THIS ), key, VALUE_length + 1, *MXVAL, 
-                            NVAL, values ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-
-/* Loop round each string value returned in the array */
-      if( astOK ) {
-         c = values;
-         d = VALUE;
-         for( i = 0; i < *NVAL; i++ ) {
-
-/* Loop round each of character in the "i"th element of the returned
-   array. Copy characters from the work array until a terminating null is
-   found. Replace this null by a space and replace all subsequent
-   characters by spaces up to the end of the returned array element. */
-            term = 0;
-            for( j = 0; j < VALUE_length; j++, d++, c++ ) {
-               if( term ) {
-                  *d = ' ';
-               } else if( (*d = *c) == 0 ) {
-                  *d = ' ';
-                  term = 1;
-               } 
-            }
-
-/* Skip over the extra character at the end of each element in the work 
-   array. */
-            c++;
-         }
-      }
-      astFree( values );
-   )
-   return RESULT;
-}
-
-
-F77_SUBROUTINE(ast_mapremove)( INTEGER(THIS),
-                               CHARACTER(KEY),
-                               INTEGER(STATUS)
-                               TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   char *key;
-
-   astAt( "AST_MAPREMOVE", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      astMapRemove( astI2P( *THIS ), key );
-      astFree( key );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_mapsize)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_MAPSIZE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astMapSize( astI2P( *THIS ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_maplength)( INTEGER(THIS), 
-                                     CHARACTER(KEY),
-                                     INTEGER(STATUS)
-                                     TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   F77_INTEGER_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPLENGTH", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapLength( astI2P( *THIS ), key );
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_maplenc)( INTEGER(THIS), 
-                                   CHARACTER(KEY),
-                                   INTEGER(STATUS)
-                                   TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   F77_INTEGER_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPLENGTH", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapLenC( astI2P( *THIS ), key );
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_maptype)( INTEGER(THIS), 
-                                   CHARACTER(KEY),
-                                   INTEGER(STATUS)
-                                   TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   F77_INTEGER_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPLENGTH", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapType( astI2P( *THIS ), key );
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_maphaskey)( INTEGER(THIS), 
-                                     CHARACTER(KEY),
-                                     INTEGER(STATUS)
-                                     TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPHASKEY", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapHasKey( astI2P( *THIS ), key ) ? F77_TRUE : F77_FALSE;
-
-      astFree( key );
-   )
-   return RESULT;
-}
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
-   character result doesn't work, so add an extra argument instead and
-   wrap this function up in a normal FORTRAN 77 function (in the file
-   keymap.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_mapkey_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_mapkey)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
-                          INTEGER(THIS),
-                          INTEGER(INDEX),
-#if NO_CHAR_FUNCTION
-                          INTEGER(STATUS)
-                          TRAIL(RESULT) ) {
-#else
-                          INTEGER(STATUS) ) {
-#endif
-   GENPTR_CHARACTER(RESULT)
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(INDEX)
-   const char *result; 
-   int i;
-
-   astAt( "AST_MAPKEY", NULL, 0 );
-   astWatchSTATUS(
-      result = astMapKey( astI2P( *THIS ), *INDEX - 1 );
-      i = 0;
-      if ( astOK ) {             /* Copy result */
-         for ( ; result[ i ] && i < RESULT_length; i++ ) {
-            RESULT[ i ] = result[ i ];
-         }
-      }
-      while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
-   )
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemi)( INTEGER(THIS),
-                                       CHARACTER(KEY),
-                                       INTEGER(ELEM),
-                                       INTEGER_ARRAY(VALUE),
-                                       INTEGER(STATUS)
-                                       TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(ELEM)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGETELEMI", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGetElemI( astI2P( *THIS ), key, *ELEM - 1, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemd)( INTEGER(THIS),
-                                       CHARACTER(KEY),
-                                       INTEGER(ELEM),
-                                       DOUBLE_ARRAY(VALUE),
-                                       INTEGER(STATUS)
-                                       TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(ELEM)
-   GENPTR_DOUBLE_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGETELEMD", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGetElemD( astI2P( *THIS ), key, *ELEM - 1, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemr)( INTEGER(THIS),
-                                       CHARACTER(KEY),
-                                       INTEGER(ELEM),
-                                       REAL_ARRAY(VALUE),
-                                       INTEGER(STATUS)
-                                       TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(ELEM)
-   GENPTR_REAL_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-
-   astAt( "AST_MAPGETELEMR", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGetElemF( astI2P( *THIS ), key, *ELEM - 1, VALUE ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-   )
-   return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelema)( INTEGER(THIS),
-                                       CHARACTER(KEY),
-                                       INTEGER(ELEM),
-                                       INTEGER_ARRAY(VALUE),
-                                       INTEGER(STATUS)
-                                       TRAIL(KEY) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(ELEM)
-   GENPTR_INTEGER_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-   AstObject *ptr;
-
-   astAt( "AST_MAPGETELEMA", NULL, 0 );
-   astWatchSTATUS(
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGetElemA( astI2P( *THIS ), key, *ELEM - 1, &ptr ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-      if( astOK ) *VALUE = astP2I( ptr );
-   )
-   return RESULT;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_mapgetelemc)( INTEGER(THIS),
-                                       CHARACTER(KEY),
-                                       INTEGER(ELEM),
-                                       CHARACTER_ARRAY(VALUE),
-                                       INTEGER(STATUS)
-                                       TRAIL(KEY)
-                                       TRAIL(VALUE) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(KEY)
-   GENPTR_INTEGER(ELEM)
-   GENPTR_CHARACTER_ARRAY(VALUE)
-   F77_LOGICAL_TYPE(RESULT);
-   char *key;
-   char *values, *c, *d;
-   int j;
-
-   astAt( "AST_MAPGETELEMC", NULL, 0 );
-   astWatchSTATUS(
-      values = astMalloc( sizeof( char )*(size_t) ( VALUE_length + 1 ) );
-      key = astString( KEY, KEY_length );
-      RESULT = astMapGetElemC( astI2P( *THIS ), key, VALUE_length + 1, *ELEM - 1, 
-                               values ) ? F77_TRUE : F77_FALSE;
-      astFree( key );
-
-/* Copy characters from the work array until a terminating null is
-   found. Replace this null by a space and replace all subsequent
-   characters by spaces up to the end of the returned array element. */
-      if( astOK ) {
-         c = values;
-         d = VALUE;
-
-         for( j = 0; j < VALUE_length; j++, d++, c++ ) {
-            if( (*d = *c) == 0 ) {
-               *d = ' ';
-               break;
-            } 
-         }
-
-         for( ; j < VALUE_length; j++, d++ ) *d = ' ';
-
-      }
-      astFree( values );
-   )
-   return RESULT;
-}
-
-
diff --git a/ast-5.3-1/flutmap.c b/ast-5.3-1/flutmap.c
deleted file mode 100644
index 9466e53..0000000
--- a/ast-5.3-1/flutmap.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-*+
-*  Name:
-*     flutmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST LutMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the LutMap class.
-
-*  Routines Defined:
-*     AST_ISALUTMAP
-*     AST_LUTMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     8-JUL-1997 (RFWS):
-*        Original version.
-*-
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "lutmap.h"              /* C interface to the LutMap class */
-
-F77_LOGICAL_FUNCTION(ast_isalutmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISALUTMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsALutMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_lutmap)( INTEGER(NLUT),
-                                  DOUBLE_ARRAY(LUT),
-                                  DOUBLE(START),
-                                  DOUBLE(INC),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NLUT)
-   GENPTR_DOUBLE_ARRAY(LUT)
-   GENPTR_DOUBLE(START)
-   GENPTR_DOUBLE(INC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-
-   astAt( "AST_LUTMAP", NULL, 0 );
-   astWatchSTATUS(
-      char *options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astLutMap( *NLUT, LUT, *START, *INC, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fluxframe.c b/ast-5.3-1/fluxframe.c
deleted file mode 100644
index 5957544..0000000
--- a/ast-5.3-1/fluxframe.c
+++ /dev/null
@@ -1,4492 +0,0 @@
-/*
-*class++
-*  Name:
-*     FluxFrame
-
-*  Purpose:
-*     Measured flux description.
-
-*  Constructor Function:
-c     astFluxFrame
-f     AST_FLUXFRAME
-
-*  Description:
-*     A FluxFrame is a specialised form of one-dimensional Frame which 
-*     represents various systems used to represent the signal level in an
-*     observation. The particular coordinate system to be used is specified 
-*     by setting the FluxFrame's System attribute qualified, as necessary, by 
-*     other attributes such as the units, etc (see the description of the 
-*     System attribute for details).
-*
-*     All flux values are assumed to be measured at the same frequency or
-*     wavelength (as given by the SpecVal attribute). Thus this class is
-*     more appropriate for use with images rather than spectra.
-
-*  Inheritance:
-*     The FluxFrame class inherits from the Frame class.
-
-*  Attributes:
-*     In addition to those attributes common to all Frames, every
-*     FluxFrame also has the following attributes:
-*
-*     - SpecVal: The spectral position at which the flux values are measured.
-
-*  Functions:
-c     The FluxFrame class does not define any new functions beyond those
-f     The FluxFrame class does not define any new routines beyond those
-*     which are applicable to all Frames.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     6-DEC-2004 (DSB):
-*        Original version.
-*     14-DEC-2004 (DSB):
-*        Added AST__SBRIGHT and AST__SBRIGHTW systems.
-*     7-DEC-2005 (DSB):
-*        Free memory allocated by calls to astReadString.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     31-JAN-2007 (DSB):
-*        Modified so that a FluxFrame can be used as a template to find a
-*        FluxFrame contained within a CmpFrame. This involves changes in
-*        Match and the removal of the local versions of SetMaxAxes and
-*        SetMinAxes.
-*     3-SEP-2007 (DSB):
-*        In SubFrame, since AlignSystem is extended by the FluxFrame class
-*        it needs to be cleared before invoking the parent SubFrame
-*        method in cases where the result Frame is not a FluxFrame.
-*     2-OCT-2007 (DSB):
-*        In Overlay, clear AlignSystem as well as System before calling
-*        the parent overlay method.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS FluxFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__FLUXDEN
-#define LAST_SYSTEM AST__SBRIGHTW
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E8*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Define other numerical constants for use in this module. */
-#define GETATTRIB_BUFF_LEN 50
-#define GETLABEL_BUFF_LEN 200
-#define GETSYMBOL_BUFF_LEN 20
-#define GETTITLE_BUFF_LEN 200
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "unit.h"                /* Units management facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Parent Frame class */
-#include "fluxframe.h"           /* Interface definition for this class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "zoommap.h"             /* Scaling Mappings */
-#include "specframe.h"           /* Spectral Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
-   class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_setunit)( AstFrame *, int, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_clearunit)( AstFrame *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetLabel_Buff[ 0 ] = 0; \
-   globals->GetSymbol_Buff[ 0 ] = 0; \
-   globals->GetTitle_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(FluxFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(FluxFrame,Class_Init)
-#define class_vtab astGLOBAL(FluxFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(FluxFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(FluxFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(FluxFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(FluxFrame,GetTitle_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffers for strings returned by various functions. */
-static char getattrib_buff[ AST__FLUXFRAME_GETATTRIB_BUFF_LEN + 1 ];
-static char getlabel_buff[ AST__FLUXFRAME_GETLABEL_BUFF_LEN + 1 ]; 
-static char getsymbol_buff[ AST__FLUXFRAME_GETSYMBOL_BUFF_LEN + 1 ]; 
-static char gettitle_buff[ AST__FLUXFRAME_GETTITLE_BUFF_LEN + 1 ]; 
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstFluxFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-static AstSpecFrame *GetSpecFrame( AstFluxFrame *, int * );
-static AstSystemType DensitySystem( AstSystemType, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType GetDensitySystem( AstFluxFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *DefUnit( AstSystemType, const char *, const char *, int * );
-static const char *DensityUnit( AstSystemType, int * );
-static const char *FluxSystemString( AstSystemType, int * );
-static const char *GetDensityUnit( AstFluxFrame *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemLabel( AstSystemType, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int MakeFluxMapping( AstFluxFrame *, AstFluxFrame *, AstSystemType, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static int UnitsOK( AstSystemType, const char *, int, const char *, const char *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void ClearSystem( AstFrame *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static double GetSpecVal( AstFluxFrame *, int * );
-static int TestSpecVal( AstFluxFrame *, int * );
-static void ClearSpecVal( AstFluxFrame *, int * );
-static void SetSpecVal( AstFluxFrame *, double, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     FluxFrame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   int len;                      /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* SpecVal. */
-/* -------- */
-   if ( !strcmp( attrib, "specval" ) ) {
-      astClearSpecVal( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearSystem
-
-*  Purpose:
-*     Clear the System attribute for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void ClearSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astClearSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the System attribute for a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to FluxFrame structure */
-   AstSystemType newsys;         /* System after clearing */
-   AstSystemType oldsys;         /* System before clearing */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* Save the original system */
-   oldsys = astGetSystem( this_frame );
-
-/* Use the parent ClearSystem method to clear the System value. */
-   (*parent_clearsystem)( this_frame, status );
-
-/* Get the default System. */
-   newsys = astGetSystem( this_frame );
-
-/* If the system has actually changed. */
-   if( newsys != oldsys ) {
-
-/* Changing the System value will in general require the Units to change
-   as well. If the used has previously specified the units to be used with
-   the new system, then re-instate them (they are stored in the "usedunits"
-   array in the FluxFrame structure). Otherwise, clear the units so that
-   the default units will eb used with the new System. */
-      if( (int) newsys < this->nuunits && this->usedunits &&
-          this->usedunits[ (int) newsys ] ) {
-         (*parent_setunit)( this_frame, 0, this->usedunits[ (int) newsys ], status );
-      } else {
-         (*parent_clearunit)( this_frame, 0, status );
-      }
-
-/* Also, clear all attributes which have system-specific defaults. */
-      astClearLabel( this_frame, 0 );
-      astClearSymbol( this_frame, 0 );
-      astClearTitle( this_frame );
-   }
-
-}
-
-static void ClearUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     ClearUnit
-
-*  Purpose:
-*     Clear the value of the Unit string for a FluxFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void ClearUnit( AstFrame *this_frame, int axis )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astClearUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function clears the Unit string for a specified axis of a 
-*     FluxFrame. It also clears the UsedUnit item in the FluxFrame
-*     structure corresponding to the current System.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     axis
-*        The number of the axis (zero-based).
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   int system;                   /* The FluxFrame's System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astClearUnit" );
-
-/* Clear the UsedUnit item for the current System, if current set. */
-   system = (int) astGetSystem( this );
-   if( system < this->nuunits && this->usedunits ) {
-      this->usedunits[ system ] = astFree( this->usedunits[ system ] );
-   }
-
-/* Use the parent method to clear the Unit attribute of the axis. */
-   (*parent_clearunit)( this_frame, axis, status );
-}
-
-static const char *DefUnit( AstSystemType system, const char *method,
-                            const char *class, int *status ){
-/*
-*  Name:
-*     DefUnit
-
-*  Purpose:
-*     Return the default units for a flux coordinate system type.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *DefUnit( AstSystemType system, const char *method,
-*                          const char *class, int *status )
-
-*  Class Membership:
-*     FluxFrame member function.
-
-*  Description:
-*     This function returns a textual representation of the default 
-*     units associated with the specified flux coordinate system.
-
-*  Parameters:
-*     system
-*        The flux coordinate system.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     As tring describing the default units. This string follows the
-*     units syntax described in FITS WCS paper I "Representations of world
-*     coordinates in FITS" (Greisen & Calabretta).
-
-*  Notes:
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Value to return */
-
-/* Initialize */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
-   if( system == AST__FLUXDEN ) {
-      result = "W/m^2/Hz";
-
-   } else if( system == AST__FLUXDENW ) {
-      result = "W/m^2/Angstrom";
-
-   } else if( system == AST__SBRIGHT ) {
-      result = "W/m^2/Hz/arcmin**2";
-
-   } else if( system == AST__SBRIGHTW ) {
-      result = "W/m^2/Angstrom/arcmin**2";
-
-/* Report an error if the coordinate system was not recognised. */
-   } else {
-      astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
-                "identification code (%d).", status, method, class, class, 
-                (int) system );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType DensitySystem( AstSystemType sys, int *status ) {
-/*
-*  Name:
-*     DensitySystem
-
-*  Purpose:
-*     Obtain the System describing the spectral density for a FluxFrame
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstSystemType DensitySystem( AstSystemType sys, int *status )
-
-*  Class Membership:
-*     FluxFrame member function.
-
-*  Description:
-*     This function returns AST__FREQ if the FluxFrame system describes
-*     a quantity measured per unit frequency, and returns AST__WAVELEN if 
-*     the FluxFrame system describes a quantity measured per unit wavelength.
-
-*  Parameters:
-*     sys
-*        A System value appropriate to a FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The density System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Categorise the supplied system. */
-   if( sys == AST__FLUXDEN || sys == AST__SBRIGHT ) {
-      result = AST__FREQ;
-
-   } else if( sys == AST__FLUXDENW || sys == AST__SBRIGHTW ) {
-      result = AST__WAVELEN;
-
-   } else if( astOK ) {
-      astError( AST__INTER, "DensitySystem(FluxFrame): The "
-                "DensitySystem method does not yet support "
-                "FluxFrame system %d (AST internal programming error).", status,
-                sys );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *DensityUnit( AstSystemType sys, int *status ) {
-/*
-*  Name:
-*     DensityUnit
-
-*  Purpose:
-*     Obtain the default units for the spectral density of a FluxFrame
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *DensityUnit( AstSystemType sys, int *status )
-
-*  Class Membership:
-*     FluxFrame member function.
-
-*  Description:
-*     This function returns "Hz" if the FluxFrame system describes
-*     a quantity measured per unit frequency, and returns "Angstrom" if 
-*     the FluxFrame system describes a quantity measured per unit wavelength.
-
-*  Parameters:
-*     sys
-*        A FluxFrame system value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the Unit value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Categorise the supplied FluxFrame system. */
-   if( sys == AST__FLUXDEN || sys == AST__SBRIGHT ) {
-      result = "Hz";
-
-   } else if( sys == AST__FLUXDENW || sys == AST__SBRIGHTW ) {
-      result = "Angstrom";
-
-   } else if( astOK ) {
-      astError( AST__INTER, "DensityUnit(FluxFrame): The DensityUnit "
-                "method does not yet support FluxFrame system %d (AST "
-                "internal programming error).", status, sys );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *FluxSystemString( AstSystemType system, int *status ) {
-/*
-*  Name:
-*     FluxSystemString
-
-*  Purpose:
-*     Convert a FluxFrame coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *FluxSystemString( AstSystemType system, int *status )
-
-*  Class Membership:
-*     FluxFrame member function 
-
-*  Description:
-*     This function converts a FluxFrame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. */
-   switch ( system ) {
-
-   case AST__FLUXDEN:
-      result = "FLXDN";
-      break;
-
-   case AST__FLUXDENW:
-      result = "FLXDNW";
-      break;
-
-   case AST__SBRIGHT:
-      result = "SFCBR";
-      break;
-
-   case AST__SBRIGHTW:
-      result = "SFCBRW";
-      break;
-
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied FluxFrame,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;         /* Pointer to FluxFrame structure */
-   int result;                /* Result value to return */
-   int i;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   if( this && this->usedunits ) {
-      for( i = 0; i < this->nuunits; i++ ) {
-         result += astTSizeOf( this->usedunits[ i ] );
-      }
-      result += astTSizeOf( this->usedunits );
-   }
-
-   result += astGetObjSize( this->specframe );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetActiveUnit
-
-*  Purpose:
-*     Obtain the value of the ActiveUnit flag for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int GetActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns the value of the ActiveUnit flag for a
-*    FluxFrame, which is always 1.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to use for the ActiveUnit flag (1).
-
-*/
-   return 1;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a FluxFrame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - The returned string pointer may point at memory allocated
-*     within the FluxFrame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the FluxFrame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Attribute value */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* SpecVal */
-/* ------- */
-   if ( !strcmp( attrib, "specval" ) ) {
-      dval = astGetSpecVal( this );
-      if ( astOK ) {
-         if( dval != AST__BAD ) {
-            (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-            result = getattrib_buff;
-         } else {
-            result = "<bad>";
-         }
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetDensitySystem( AstFluxFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetDensitySystem
-
-*  Purpose:
-*     Obtain the System describing the spectral density of a FluxFrame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstSystemType astGetDensitySystem( AstFluxFrame *this )
-
-*  Class Membership:
-*     FluxFrame method.
-
-*  Description:
-*     This function returns AST__FREQ if the FluxFrame system describes
-*     a quantity measured per unit frequency, and returns AST__WAVELEN if 
-*     the FluxFrame system describes a quantity measured per unit wavelength.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BADSYSTEM;
-
-/* Get the FluxFrame system and categorise it. */
-   return DensitySystem( astGetSystem( this ), status );
-}
-
-static const char *GetDensityUnit( AstFluxFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetDensityUnit
-
-*  Purpose:
-*     Obtain the default units for the spectral density of a FluxFrame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *astGetDensityUnit( AstFluxFrame *this )
-
-*  Class Membership:
-*     FluxFrame method.
-
-*  Description:
-*     This function returns "Hz" if the FluxFrame system describes
-*     a quantity measured per unit frequency, and returns "Angstrom" if 
-*     the FluxFrame system describes a quantity measured per unit wavelength.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the Unit value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get the FluxFrame system and categorise it. */
-   return DensityUnit( astGetSystem( this ), status );
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDomain
-
-*  Purpose:
-*     Obtain a pointer to the Domain attribute string for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *GetDomain( AstFrame *this, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetDomain protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns a pointer to the Domain attribute string
-*    for a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Domain value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the FluxFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to FluxFrame structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestDomain( this ) ) {
-      result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
-   } else {
-      result = "FLUX";
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetLabel
-
-*  Purpose:
-*     Access the Label string for a FluxFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *GetLabel( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetLabel method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Label string for a specified axis
-*     of a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstMapping *map;              /* Mapping between units */
-   AstSystemType system;         /* Code identifying type of flux coordinates */
-   char *new_lab;                /* Modified label string */
-   const char *result;           /* Pointer to label string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
-   invoke the parent astGetLabel method to obtain a pointer to it. */
-   if ( astTestLabel( this, axis ) ) {
-      result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, identify the flux coordinate system described by the 
-   FluxFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
-      if ( astOK ) {
-         result = strcpy( getlabel_buff, SystemLabel( system, status ) );
-         getlabel_buff[ 0 ] = toupper( getlabel_buff[ 0 ] );
-
-/* Modify this default to take account of the current value of the Unit 
-   attribute, if set. */
-         if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the 
-   units indicated by the Unit attribute. This Mapping is used to modify
-   the existing default label appropriately. For instance, if the default
-   units is "Jy" and the actual units is "log(Jy)", then the default label
-   of "Flux density" is changed to "log( Flux density )". */
-            map = astUnitMapper( DefUnit( system, "astGetLabel", 
-                                          astGetClass( this ), status ),
-                                 astGetUnit( this, axis ), result,
-                                 &new_lab );
-            if( new_lab ) {
-               result = strcpy( getlabel_buff, new_lab );
-               new_lab = astFree( new_lab );
-            }
-
-/* Annul the unused Mapping. */
-            if( map ) map = astAnnul( map );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSpecFrame *GetSpecFrame( AstFluxFrame *this, int *status ) {
-/*
-*  Name:
-*     GetSpecFrame
-
-*  Purpose:
-*     Get a pointer to a SpecFrame associated with a FluxFrame
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstSpecFrame *GetSpecFrame( AstFluxFrame *this, int *status )
-
-*  Class Membership:
-*     FluxFrame member function 
-
-*  Description:
-*     This function returns a SpecFrame describing the spectral system in
-*     which the FluxFrame's SpecVal attribute is stored. A default
-*     SpecFrame is created and returned if the no SpecFrame was supplied
-*     when the FluxFrame was created.
-
-*  Parameters:
-*     this
-*        The FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the SpecFrame. It should be freed using astAnnul when no
-*     longer needed.
-
-*  Notes:
-*     - A NULL pointer value is returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the FluxFrame contains a SpecFrame, return a clone of its pointer. */
-   if( this->specframe ) {
-      result = astClone( this->specframe );
-
-/* Otherwise, create a SpecFrame appropriate to the FluxFrames System. */
-   } else {
-      result = astSpecFrame( "", status );
-      astSetSystem( result, astGetDensitySystem( this ) );
-      astSetUnit( result, 0, astGetDensityUnit( this ) );
-   }
-
-/* Annul the result if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result pointer. */
-   return result;
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetSymbol
-
-*  Purpose:
-*     Obtain a pointer to the Symbol string for a FluxFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetSymbol method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Symbol string for a specified axis
-*     of a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstMapping *map;              /* Mapping between units */
-   AstSystemType system;         /* Code identifying type of sky coordinates */
-   char *new_sym;                /* Modified symbol string */
-   const char *result;           /* Pointer to symbol string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
-   invoke the parent astGetSymbol method to obtain a pointer to it. */
-   if ( astTestSymbol( this, axis ) ) {
-      result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the flux coordinate system described by the FluxFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
-      if ( astOK ) {
-
-         if( system == AST__FLUXDEN ) {
-	    result = "S_nu";
-
-         } else if( system == AST__FLUXDENW ) {
-	    result = "S_lambda";
-
-         } else if( system == AST__SBRIGHT ) {
-	    result = "mu_nu";
-
-         } else if( system == AST__SBRIGHTW ) {
-	    result = "mu_lambda";
-
-/* Report an error if the coordinate system was not recognised. */
-         } else {
-	    astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
-		      "invalid System identification code (%d).", status, 
-                      astGetClass( this ), astGetClass( this ), (int) system );
-         }
-
-/* Modify this default to take account of the current value of the Unit 
-   attribute, if set. */
-         if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the 
-   units indicated by the Unit attribute. This Mapping is used to modify
-   the existing default symbol appropriately. For instance, if the default
-   units is "Jy" and the actual units is "log(Jy)", then the default symbol
-   of "S_nu" is changed to "log( S_nu )". */
-            map = astUnitMapper( DefUnit( system, "astGetSymbol", 
-                                          astGetClass( this ), status ),
-                                 astGetUnit( this, axis ), result,
-                                 &new_sym );
-            if( new_sym ) {
-               result = strcpy( getsymbol_buff, new_sym );
-               new_sym = astFree( new_sym );
-            }
-
-/* Annul the unused Mapping. */
-            if( map ) map = astAnnul( map );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetAlignSystem
-
-*  Purpose:
-*     Obtain the AlignSystem attribute for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetAlignSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the AlignSystem attribute for a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The AlignSystem value.
-
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to FluxFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestAlignSystem( this ) ) {
-      result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__FLUXDEN;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetSystem
-
-*  Purpose:
-*     Obtain the System attribute for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the System attribute for a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to FluxFrame structure */
-   AstMapping *map;              /* Pointer to unit Mapping */
-   AstSystemType i;              /* System to check */
-   AstSystemType result;         /* Value to return */
-   const char *units;            /* FluxFrame units */
-   int unitSet;                  /* Has a value been supplied for Unit? */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* See if a value has been assigned to the Unit attribute. */
-   unitSet = astTestUnit( this_frame, 0 );
-
-/* If a System attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestSystem( this ) ) {
-      result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, if the Unit attribute has been set, provide a suitable default 
-   system based on the units. */
-   } else if( unitSet ){
-
-/* Loop round each known system value. If a Mapping can be found from the 
-   current units to the default units for the system, then use the system as 
-   the default system. */
-      units = astGetUnit( this_frame, 0 );
-      for( i = FIRST_SYSTEM; i <= LAST_SYSTEM; i++ ) {
-         map = astUnitMapper( units, DefUnit( i, "astGetSystem", 
-                                    astGetClass( this ), status ), NULL, NULL );
-         if( map ) {
-            map = astAnnul( map );
-            result = i;
-            break;
-         }
-      }
-
-/* Otherwise, report an error. */
-      if( result == AST__BADSYSTEM && astOK ) {
-         astError( AST__BADUN, "astGetSystem(%s): The current units (%s) "
-                   "cannot be used with any of the supported flux systems.", status, 
-                   astGetClass( this ), astGetUnit( this_frame, 0 ) );
-      }
-
-/* Otherwise, provide a suitable default based on the units. */
-   } else {
-      result = AST__FLUXDEN;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetTitle
-
-*  Purpose:
-*     Obtain a pointer to the Title string for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *GetTitle( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetTitle method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Title string for a FluxFrame.
-*     A pointer to a suitable default string is returned if no Title value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null-terminated character string containing the requested
-*     information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFluxFrame *this;           /* Pointer to FluxFrame structure */
-   AstSpecFrame *sf;             /* Pointer to SpecFrame structure */
-   const char *result;           /* Pointer to result string */
-   const char *sv;               /* Formatted SpecVal string */
-   const char *su;               /* Units string */
-   double specval;               /* SpecVal value */
-   int pos;                      /* Buffer position to enter text */
-   
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
-   method to obtain a pointer to it. */
-   if ( astTestTitle( this ) ) {
-      result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. */
-   } else {
-
-/* Classify the coordinate system type and create an appropriate Title
-   string.  */
-      if ( astOK ) {
-         result = gettitle_buff;
-
-/* Begin with the system's default label. */
-         pos = sprintf( gettitle_buff, "%s", SystemLabel( astGetSystem( this ), status ) );
-         gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-
-/* Append the spectral position, if known. */
-         specval = astGetSpecVal( this );
-         sf = GetSpecFrame( this, status );
-         if( specval != AST__BAD && sf ) {       
-            sv = astFormat( sf, 0, specval );
-            su = astGetUnit( sf, 0 );
-            pos += sprintf( gettitle_buff + pos, " at = %s %s", sv, su );
-         }
-         sf = astAnnul( sf );
-      }
-   }
-
-/* If an error occurred, clear the returned pointer value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetUnit
-
-*  Purpose:
-*     Obtain a pointer to the Unit string for a FluxFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *GetUnit( AstFrame *this_frame, int axis )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astGetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Unit string for a specified axis
-*     of a FluxFrame. If the Unit attribute has not been set for the axis, a
-*     pointer to a suitable default string is returned instead.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the Unit value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   AstSystemType system;         /* The FluxFrame's System value */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetUnit" );
-
-/* If a value has been set for the Unit attribute, use the parent 
-   GetUnit method to return a pointer to the required Unit string. */
-   if( astTestUnit( this, axis ) ){
-      result = (*parent_getunit)( this_frame, axis, status );
-
-/* Otherwise, identify the flux coordinate system described by the 
-   FluxFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* Return a string describing the default units. */
-      result = DefUnit( system, "astGetUnit", astGetClass( this ), status );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-void astInitFluxFrameVtab_(  AstFluxFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFluxFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a FluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void astInitFluxFrameVtab( AstFluxFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     FluxFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the FluxFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAFluxFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->GetDensitySystem = GetDensitySystem;
-   vtab->GetDensityUnit = GetDensityUnit;
-
-   vtab->ClearSpecVal = ClearSpecVal;
-   vtab->TestSpecVal = TestSpecVal;
-   vtab->GetSpecVal = GetSpecVal;
-   vtab->SetSpecVal = SetSpecVal;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_getdomain = frame->GetDomain;
-   frame->GetDomain = GetDomain;
-
-   parent_getsystem = frame->GetSystem;
-   frame->GetSystem = GetSystem;
-   parent_setsystem = frame->SetSystem;
-   frame->SetSystem = SetSystem;
-   parent_clearsystem = frame->ClearSystem;
-   frame->ClearSystem = ClearSystem;
-
-   parent_getalignsystem = frame->GetAlignSystem;
-   frame->GetAlignSystem = GetAlignSystem;
-
-   parent_getlabel = frame->GetLabel;
-   frame->GetLabel = GetLabel;
-
-   parent_getsymbol = frame->GetSymbol;
-   frame->GetSymbol = GetSymbol;
-
-   parent_gettitle = frame->GetTitle;
-   frame->GetTitle = GetTitle;
-
-   parent_clearunit = frame->ClearUnit;
-   frame->ClearUnit = ClearUnit;
-
-   parent_getunit = frame->GetUnit;
-   frame->GetUnit = GetUnit;
-
-   parent_setunit = frame->SetUnit;
-   frame->SetUnit = SetUnit;
-
-   parent_match = frame->Match;
-   frame->Match = Match;
-
-   parent_overlay = frame->Overlay;
-   frame->Overlay = Overlay;
-
-   parent_subframe = frame->SubFrame;
-   frame->SubFrame = SubFrame;
-
-/* Store replacement pointers for methods which will be over-ridden by new
-   member functions implemented here. */
-   frame->GetActiveUnit = GetActiveUnit;
-   frame->TestActiveUnit = TestActiveUnit;
-   frame->ValidateSystem = ValidateSystem;
-   frame->SystemString = SystemString;
-   frame->SystemCode = SystemCode;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "FluxFrame", "Description of flux values" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;       /* Pointer to FluxFrame structure */
-   int result;               /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->specframe, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MakeFluxMapping( AstFluxFrame *target, AstFluxFrame *result,
-                            AstSystemType align_sys, AstMapping **map, int *status ) {
-/*
-*  Name:
-*     MakeFluxMapping
-
-*  Purpose:
-*     Generate a Mapping between two FluxFrames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int MakeFluxMapping( AstFluxFrame *target, AstFluxFrame *result,
-*                          AstSystemType align_sys, MakeFluAstMapping **map, int *status )
-
-*  Class Membership:
-*     FluxFrame member function.
-
-*  Description:
-*     This function takes two FluxFrames and generates a Mapping that
-*     converts between them, taking account of differences in their
-*     coordinate systems, reference frequency, etc. 
-*
-*     In order to cut down the number of transformations to be considered,
-*     the scheme works by first converting from the target frame to an
-*     "alignment" Frame, using the attributes of the target to define the
-*     transformation. A transformation is then found from the alignment
-*     frame to the required result Frame,  using the attributes of the
-*     result to define the transformation. The alignment Frame is
-*     described by the supplied parameter "align_sys".
-
-*  Parameters:
-*     target
-*        Pointer to the first FluxFrame.
-*     result
-*        Pointer to the second FluxFrame.
-*     align_sys
-*        The flux system in which to align the two FluxFrames.
-*     map
-*        Pointer to a location which is to receive a pointer to the
-*        returned Mapping. The forward transformation of this Mapping
-*        will convert from "target" coordinates to "result"
-*        coordinates, and the inverse transformation will convert in
-*        the opposite direction (all coordinate values in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Mapping could be generated, or zero if the two
-*     FluxFrames are sufficiently un-related that no meaningful Mapping
-*     can be produced (in which case a NULL Mapping pointer will be
-*     returned).
-
-*  Notes:
-*     A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;
-   AstMapping *map1;  
-   AstMapping *map2;  
-   AstMapping *map3;  
-   AstMapping *map4;  
-   AstMapping *map5;  
-   AstMapping *smap;  
-   AstMapping *smap_in;  
-   AstMapping *smap_out;  
-   AstMapping *tmap;  
-   AstSpecFrame *sfin1;
-   AstSpecFrame *sfin2;
-   AstSpecFrame *sfout1;
-   AstSpecFrame *sfout2;
-   AstSystemType rsys_in; 
-   AstSystemType rsys_out; 
-   AstSystemType sys_in; 
-   AstSystemType sys_out; 
-   double specval2;
-   double specval;
-   double specval_in;
-   double specval_out;
-   double zoom;
-   int match;                     
-   int sb_in;
-   int sb_out;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
-   match = 0;
-   *map = NULL;
-
-/* Initialise to avoid compiler warnings. */
-   map1 = NULL;
-   map2 = NULL;
-   map3 = NULL;
-
-/* Note the target and result System */
-   rsys_in = astGetSystem( target );
-   rsys_out = astGetSystem( result );
-
-/* First get a Mapping which converts from the units used in the target
-   to the default units associated with the target's system. 
-   ---------------------------------------------------------------------- */
-   map1 = astUnitMapper( astGetUnit( target, 0 ), 
-                         DefUnit( rsys_in, "MakeFluxMapping", "FluxFrame", status ), 
-                         NULL, NULL );
-
-/* If the target system is surface brightness, change it to the
-   corresponding flux density system. We are effectively converting from
-   surface brightness to the flux density normalised to unit area. Also
-   set flags indicating if the systems are surface brightness systems. */
-   if( rsys_in == AST__SBRIGHT ) {
-      sys_in = AST__FLUXDEN;
-      sb_in = 1;
-      
-   } else if( rsys_in == AST__SBRIGHTW ) {
-      sys_in = AST__FLUXDENW;
-      sb_in = 1;
-
-   } else {
-      sys_in = rsys_in;
-      sb_in = 0;
-   }
-
-/* Likewise if the result system is surface brightness, change it to the
-   corresponding flux density system. */
-   if( rsys_out == AST__SBRIGHT ) {
-      sys_out = AST__FLUXDEN;
-      sb_out = 1;
-
-   } else if( rsys_out == AST__SBRIGHTW ) {
-      sys_out = AST__FLUXDENW;
-      sb_out = 1;
-
-   } else {
-      sys_out = rsys_out;
-      sb_out = 0;
-   }
-
-/* Assume at this point in the chain of coversions that we have target values 
-   in some form of flux density system (either frequency or wavelength). The 
-   precise units do not matter at this point (so long as they are
-   dimensionally correct for describing the relevant form of flux density). 
-   When other systems are added (e.g. antenna temperature), some code
-   will have to come before this point which produces a Mapping from (e.g.)
-   antenna temperature to flux density. */
-
-
-/* Get a Mapping from the default units for the input flux density system 
-   to the default units for the output flux density system.
-   ---------------------------------------------------------------------- */
-
-/* If one but not both of the systems represent surface brightness, then
-   we cannot form a Mapping. */
-   if( sb_in != sb_out ) {
-      zoom = AST__BAD;
-
-/* If the input and output flux density systems are the same, then the 
-   required Mapping is a UnitMap. */
-   } else if( sys_in == sys_out ) {
-      zoom = 1.0;
-
-/* Otherwise, the required Mapping is a zoom map in which the scale factor is 
-   the rate of change of the input spectral system with respect to the output
-   spectral system, at the position given by the SpecVal attribute (we
-   cannot do the conversion if the SpecVal values in the target and result
-   differ). Each spectral system is either wavelength (in Angstrom) or
-   frequency (in Hz), depending on whether the associated flux density
-   system is "per Angstrom" or "per Hertz". The SpecVal value may be
-   stored in some other system, so the first job is to create SpecFrames
-   with the required system and units from the SpecFrames encapsulated
-   within the target and result FluxFrames. Take deep copies of the two
-   SpecFrames, and set their systems and units. */
-   } else {
-      sfin1 = GetSpecFrame( target, status );
-      sfin2 = astCopy( sfin1 );
-      astSetSystem( sfin2, DensitySystem( sys_in, status ) );
-      astSetUnit( sfin2, 0, DensityUnit( sys_in, status ) );
-   
-      sfout1 = GetSpecFrame( result, status );
-      sfout2 = astCopy( sfout1 );
-      astSetSystem( sfout2, DensitySystem( sys_out, status ) );
-      astSetUnit( sfout2, 0, DensityUnit( sys_out, status ) );
-      
-/* Indicate we do not yet have a zoom factor */
-      zoom = AST__BAD;
-   
-/* Get the Mapping from output to input spectral coordinate system */
-      fs = astConvert( sfout2, sfin2, "" );
-      if( fs ) {
-         tmap = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         fs = astAnnul( fs );
-   
-/* Simplify the Mapping. */
-         smap = astSimplify( tmap );
-         tmap = astAnnul( tmap );
-   
-/* We first need to transform the two SpecVal attributes into the input 
-   coordinate system of the "smap" Mapping (i.e. the standardised result 
-   FluxFrame), and check they are the same. For this we need the Mappings 
-   from the SpecFrames stored in the FluxFrames to the modified copies 
-   created above. */
-         fs = astConvert( sfin1, sfin2, "" );
-         if( fs ) {
-            smap_in = astGetMapping( fs, AST__BASE, AST__CURRENT );
-            fs = astAnnul( fs );
-         } else {     
-            smap_in = NULL;
-         }
-   
-         fs = astConvert( sfout1, sfout2, "" );
-         if( fs ) {
-            smap_out = astGetMapping( fs, AST__BASE, AST__CURRENT );
-            fs = astAnnul( fs );
-         } else {     
-            smap_out = NULL;
-         }
-      
-/* Convert the target's SpecVal into the standardised target system */
-         specval = astGetSpecVal( target );
-         astTran1( smap_in, 1, &specval, 1, &specval2 );
-   
-/* Now convert it into the standardised result system. Note, we need to
-   use "smap" in the inverse direction for this. */
-         astTran1( smap, 1, &specval2, 0, &specval_in );
-      
-/* Convert the results's SpecVal into the standardised result system */
-         specval = astGetSpecVal( result );
-         astTran1( smap_out, 1, &specval, 1, &specval_out );
-      
-/* Check they are equal and good. */
-         if( EQUAL( specval_in, specval_out ) && specval_in != AST__BAD ) {
-   
-/* If the siSimplified Mapping is a UnitMap the required rate of change 
-   factor is 1.0. If it resuts in a ZoomMap, the required factor is 
-   the zoom factor in the ZoomMap. */
-            if( astIsAUnitMap( smap ) ) {
-               zoom = 1.0;
-   
-            } else if( astIsAZoomMap( smap ) ) {
-               zoom = astGetZoom( smap );
-   
-/* For any other type of Mapping, we must determine the rate of change factor 
-   by differentiating the Mapping at the SpecVal position. */
-            } else {
-               specval = 0.5*( specval_in  + specval_out );
-               zoom = astRate( smap, &specval, 0, 0 );
-            }
-         }
-   
-/* Free resources */
-         if( smap_in ) smap_in = astAnnul( smap_in );
-         if( smap_out ) smap_out = astAnnul( smap_out );
-         smap = astAnnul( smap );
-      }
-   
-      sfout1 = astAnnul( sfout1 );
-      sfin1 = astAnnul( sfin1 );
-      sfout2 = astAnnul( sfout2 );
-      sfin2 = astAnnul( sfin2 );
-   }
-
-/* Create the required zoom map if a scaling factor was found. */
-   if( zoom != AST__BAD ) {
-      map2 = (AstMapping *) astZoomMap( 1, fabs( zoom ), "", status );
-   } else {
-      map2 = NULL;
-   }
-
-/* Now get a Mapping which converts from the default units associated with 
-   the results's system, to the units used in the result. 
-   ----------------------------------------------------------------------- */
-   map3 = astUnitMapper( DefUnit( rsys_out, "MakeFluxMapping", "FluxFrame", status ), 
-                         astGetUnit( result, 0 ), NULL, NULL );
-
-/* Indicate a match was found and combine all Mapings in series. */
-   if( map1 && map2 && map3 ) {
-      match = 1;
-      map4 = (AstMapping *) astCmpMap( map1, map2, 1, "", status ); 
-      map5 = (AstMapping *) astCmpMap( map4, map3, 1, "", status ); 
-
-/* Return the simplified Mapping. */
-      *map = astSimplify( map5 );
-
-/* Free resources. */
-      map4 = astAnnul( map4 );
-      map5 = astAnnul( map5 );
-   }
-
-/* Free resources. */
-   if( map1 ) map1 = astAnnul( map1 );
-   if( map2 ) map2 = astAnnul( map2 );
-   if( map3 ) map3 = astAnnul( map3 );
-
-/* If an error occurred, annul the returned Mapping and clear the returned 
-   values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes, AstMapping **map,
-                  AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the protected astMatch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function matches a "template" FluxFrame to a "target" Frame and
-*     determines whether it is possible to convert coordinates between them.
-*     If it is, a mapping that performs the transformation is returned along
-*     with a new Frame that describes the coordinate system that results when
-*     this mapping is applied to the "target" coordinate system. In addition,
-*     information is returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" and "template"
-*     Frames from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template FluxFrame. This describes the coordinate 
-*        system (or set of possible coordinate systems) into which we wish to 
-*        convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate system in
-*        which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the template FluxFrame axis from 
-*        which it is derived. If it is not derived from any template 
-*        FluxFrame axis, a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the target Frame axis from which it
-*        is derived. If it is not derived from any target Frame axis, a value
-*        of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will be
-*        returned if the requested coordinate conversion is possible. If
-*        returned, the forward transformation of this Mapping may be used to
-*        convert coordinates between the "target" Frame and the "result"
-*        Frame (see below) and the inverse transformation will convert in the
-*        opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be returned
-*        if the requested coordinate conversion is possible. If returned, this
-*        Frame describes the coordinate system that results from applying the
-*        returned Mapping (above) to the "target" coordinate system. In
-*        general, this Frame will combine attributes from (and will therefore
-*        be more specific than) both the target and the template Frames. In
-*        particular, when the template allows the possibility of transformaing
-*        to any one of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate conversion is
-*     possible. Otherwise zero is returned (this will not in itself result in
-*     an error condition).
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     This implementation addresses the matching of a FluxFrame class 
-*     object to any other class of Frame. A FluxFrame will match any class 
-*     of FluxFrame (i.e. possibly from a derived class) but will not match 
-*     a less specialised class of Frame.
-*/
-
-/* Local Variables: */
-   AstFrame *frame0;             /* Pointer to Frame underlying axis 0 */
-   AstFluxFrame *template;       /* Pointer to template FluxFrame structure */
-   int iaxis0;                   /* Axis index underlying axis 0 */
-   int iaxis;                    /* Axis index */
-   int match;                    /* Coordinate conversion possible? */
-   int target_axis0;             /* Index of FluxFrame axis in the target */
-   int target_naxes;             /* Number of target axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the template FluxFrame structure. */
-   template = (AstFluxFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
-   target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
-   Frame class object. This ensures that the number of axes (1) and
-   domain, etc. of the target Frame are suitable. Invoke the parent
-   "astMatch" method to verify this. */
-   match = (*parent_match)( template_frame, target,
-                            template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
-   needed, but keep the memory allocated for the axis association
-   arrays, which we will re-use. */
-   if ( astOK && match ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-   }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
-   all target axes. Stop when a FluxFrame axis is found. */
-   if ( match && astOK ) {
-      match = 0;
-      for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
-         astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
-         if( astIsAFluxFrame( frame0 ) ) {
-            frame0 = astAnnul( frame0 );
-            target_axis0 = iaxis;
-            match = 1;
-            break;
-         } else {
-            frame0 = astAnnul( frame0 );
-         }
-      }
-   }
-
-/* Check at least one FluxFrame axis was found it the target. Store the
-   axis associataions. */
-   if( match && astOK ) {
-      (*template_axes)[ 0 ] = 0;
-      (*target_axes)[ 0 ] = target_axis0;
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
-   result Frame) with copies of the target axes in the required
-   order. This process also overlays the template attributes on to the
-   target Frame and returns a Mapping between the target and result
-   Frames which effects the required coordinate conversion. */
-      match = astSubFrame( target, template, 1, *target_axes, *template_axes,
-                           map, result );
-   }
-
-/* If an error occurred, or conversion to the result Frame's
-   coordinate system was not possible, then free all memory, annul the
-   returned objects, and reset the returned value. */
-   if ( !astOK || !match ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template FluxFrame on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the protected astOverlay method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes of a FluxFrame (the "template") on to
-*     another Frame, so as to over-ride selected attributes of that second
-*     Frame. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which a Frame acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-*
-*     Note that if the result Frame is a FluxFrame and a change of flux
-*     coordinate system occurs as a result of overlaying its System
-*     attribute, then some of its original attribute values may no
-*     longer be appropriate (e.g. the Title, or attributes describing
-*     its axes). In this case, these will be cleared before overlaying
-*     any new values.
-
-*  Parameters:
-*     template
-*        Pointer to the template FluxFrame, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of the
-*        "result" Frame (see below). For each axis in the result frame, the
-*        corresponding element of this array should contain the (zero-based)
-*        index of the template axis to which it corresponds. This array is used
-*        to establish from which template axis any axis-dependent attributes
-*        should be obtained.
-*
-*        If any axis in the result Frame is not associated with a template
-*        axis, the corresponding element of this array should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  In general, if the result Frame is not from the same class as the
-*     template FluxFrame, or from a class derived from it, then attributes may
-*     exist in the template FluxFrame which do not exist in the result Frame. 
-*     In this case, these attributes will not be transferred.
-*/
-
-
-/* Local Variables: */
-   AstFluxFrame *resff;          /* Result FluxFrame */
-   AstFluxFrame *tmpff;          /* Template FluxFrame */
-   AstSystemType new_alignsystem;/* Code identifying alignment coords */
-   AstSystemType new_system;     /* Code identifying new cordinates */
-   AstSystemType old_system;     /* Code identifying old coordinates */
-   const char *method;           /* Pointer to method string */
-   const char *new_class;        /* Pointer to template class string */
-   const char *old_class;        /* Pointer to result class string */
-   int fluxframe;                /* Result Frame is a FluxFrame? */
-   int resetSystem;              /* Was the template System value cleared? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise strings used in error messages. */
-   new_class = astGetClass( template );   
-   old_class = astGetClass( result );   
-   method = "astOverlay";
-
-/* Get the old and new systems. */
-   old_system = astGetSystem( result );
-   new_system = astGetSystem( template );
-
-/* If the result Frame is a FluxFrame, we must test to see if overlaying its
-   System attribute will change the type of coordinate system it describes. 
-   Determine the value of this attribute for the result and template 
-   FluxFrames. */
-   resetSystem = 0;
-   fluxframe = astIsAFluxFrame( result );
-   if( fluxframe ) {
-
-/* If the coordinate system will change, any value already set for the result
-   FluxFrame's Title will no longer be appropriate, so clear it. */
-      if ( new_system != old_system ) {
-         astClearTitle( result );
-
-/* If the systems have the same default units, we can retain the current 
-   Unit value. */
-         if( strcmp( DefUnit( new_system, method, new_class, status ),
-                     DefUnit( old_system, method, old_class, status ) ) ) { 
-            astClearUnit( result, 0 );
-         }
-
-/* If necessary, clear inappropriate values for all those axis attributes
-   whose access functions are over-ridden by this class (these access functions
-   will then provide suitable defaults appropriate to the new coordinate system
-   instead). */
-         astClearLabel( result, 0 );
-         astClearSymbol( result, 0 );
-      }
-
-/* Transfer the default SpecVal value and the SpecFrame. */
-      resff = (AstFluxFrame *) result;
-      tmpff = (AstFluxFrame *) template;
-      resff->defspecval = tmpff->defspecval;
-      if( resff->specframe ) (void) astAnnul( resff->specframe );
-      resff->specframe = tmpff->specframe ? astCopy( tmpff->specframe ) : NULL;
-
-/* If the result Frame is not a FluxFrame, we must temporarily clear the
-   System and AlignSystem values since the values used by this class are only
-   appropriate to this class. */
-   } else {
-      if( astTestSystem( template ) ) {
-         astClearSystem( template );
-
-         new_alignsystem = astGetAlignSystem( template );
-         astClearAlignSystem( template );
-
-         resetSystem = 1;
-      }
-   }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
-   from the parent class. */
-   (*parent_overlay)( template, template_axes, result, status );
-
-/* Reset the System and AlignSystem values if necessary */
-   if( resetSystem ) {
-      astSetSystem( template, new_system );
-      astSetAlignSystem( template, new_alignsystem );
-   }
-
-/* Check if the result Frame is a FluxFrame or from a class derived from
-   FluxFrame. If not, we cannot transfer FluxFrame attributes to it as it is
-   insufficiently specialised. In this case simply omit these attributes. */
-   if ( fluxframe && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
-   if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
-   if ( astTest##attribute( template ) ) { \
-      astSet##attribute( result, astGet##attribute( template ) ); \
-   }
-
-/* Use the macro to transfer each FluxFrame attribute in turn. */
-      OVERLAY(SpecVal)
-
-
-   }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (extends the astSetAttrib method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a FluxFrame, the attribute
-*     and its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This protected method is intended to be invoked by the Object astSet
-*     method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   double dval;                  /* Floating point attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* No. of characters read */
-   int ulen;                     /* Used length of setting string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Obtain the used length of the setting string. */
-   ulen = astChrLen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* SpecVal. */
-/* -------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "specval= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetSpecVal( this, dval );
-
-/* Pass any unrecognised setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status ) {
-/*
-*  Name:
-*     SetSystem
-
-*  Purpose:
-*     Set the System attribute for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astSetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function sets the System attribute for a FluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     newsys
-*        The new System value to be stored.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to FluxFrame structure */
-   AstSystemType oldsys;         /* Original System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* Save the original System value */
-   oldsys = astGetSystem( this_frame );
-
-/* Use the parent SetSystem method to store the new System value. */
-   (*parent_setsystem)( this_frame, newsys, status );
-
-/* If the system has changed... */
-   if( oldsys != newsys ) {
-
-/* Changing the System value will in general require the Units to change
-   as well. If the user has previously specified the units to be used with
-   the new system, then re-instate them (they are stored in the "usedunits"
-   array in the FluxFrame structure). Otherwise, clear the units so that
-   the default units will eb used with the new System. */
-      if( (int) newsys < this->nuunits && this->usedunits &&
-          this->usedunits[ (int) newsys ] ) {
-         (*parent_setunit)( this_frame, 0, this->usedunits[ (int) newsys ], status );
-      } else {
-         (*parent_clearunit)( this_frame, 0, status );
-      }
-
-/* Also, clear all attributes which have system-specific defaults. */
-      astClearLabel( this_frame, 0 );
-      astClearSymbol( this_frame, 0 );
-      astClearTitle( this_frame );
-   }
-}
-
-static void SetUnit( AstFrame *this_frame, int axis, const char *value, int *status ) {
-/*
-*  Name:
-*     SetUnit
-
-*  Purpose:
-*     Set a pointer to the Unit string for a FluxFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     void SetUnit( AstFrame *this_frame, int axis, const char *value )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astSetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function stores a pointer to the Unit string for a specified axis
-*     of a FluxFrame. It also stores the string in the "usedunits" array
-*     in the FluxFrame structure, in the element associated with the
-*     current System.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-*     unit
-*        The new string to store.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   AstSystemType system;         /* The FluxFrame's System value */
-   int i;                        /* Loop counter */
-   int isystem;                  /* The FluxFrame's System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Use the parent SetUnit method to store the value in the Axis
-   structure */
-   (*parent_setunit)( this_frame, axis, value, status );
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astSetUnit" );
-
-/* If the new units are appropriate for the current System, store the 
-   supplied value as the UsedUnit for the current System. First ensure the 
-   array is big enough. Free any previous value stored for the current 
-   system. */
-   system = astGetSystem( this );
-   if( UnitsOK( system, value, 0, "astSetUnit", astGetClass( this ), status ) ) {
-      isystem = (int) astGetSystem( this );
-      if( isystem >= this->nuunits ) {
-         this->usedunits = astGrow( this->usedunits, isystem + 1, 
-                                    sizeof(char *) );
-         if( astOK ) {
-            for( i = this->nuunits; i < isystem + 1; i++ ) this->usedunits[ i ] = NULL;
-            this->nuunits = isystem + 1;
-         }
-      }
-
-/* Now store a copy of the value, if it is different to the stored string. */
-      if( astOK && ( !this->usedunits[ isystem ] ||
-                     strcmp( this->usedunits[ isystem ], value ) ) ) {
-         this->usedunits[ isystem ] = astStore( this->usedunits[ isystem ],
-                                               value, strlen( value ) + 1 );
-      }
-
-/* If the new units are not appropriate for the current System, clear the
-   System value. Use the parent ClearSystem function since the 
-   astClearSystem implemented by this class will clear the units. */
-   } else {
-      (*parent_clearsystem)( this_frame, status );
-   }
-
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a FluxFrame and convert to the new coordinate 
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the protected astSubFrame 
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the axes
-*     from a "target" FluxFrame and creates a new Frame with copies of
-*     the selected axes assembled in the requested order. It then
-*     optionally overlays the attributes of a "template" Frame on to the
-*     result. It returns both the resulting Frame and a Mapping that
-*     describes how to convert between the coordinate systems described by
-*     the target and result Frames. If necessary, this Mapping takes
-*     account of any differences in the Frames' attributes due to the
-*     influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target FluxFrame, from which axes are to be 
-*        selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for the
-*        result Frame are to be obtained. Optionally, this may be NULL, in
-*        which case no overlaying of template attributes will be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This number may
-*        be greater than or less than the number of axes in this Frame (or
-*        equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving a list
-*        of the (zero-based) axis indices of the axes to be selected from the
-*        target FluxFrame. The order in which these are given determines
-*        the order in which the axes appear in the result Frame. If any of the
-*        values in this array is set to -1, the corresponding result axis will
-*        not be derived from the target Frame, but will be assigned default
-*        attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This should
-*        contain a list of the template axes (given as zero-based axis indices)
-*        with which the axes of the result Frame are to be associated. This
-*        array determines which axes are used when overlaying axis-dependent
-*        attributes of the template on to the result. If any element of this
-*        array is set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not used and
-*        a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned Mapping.
-*        The forward transformation of this Mapping will describe how to
-*        convert coordinates from the coordinate system described by the target
-*        FluxFrame to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is possible
-*     between the target and the result Frame. Otherwise zero is returned and
-*     *map and *result are returned as NULL (but this will not in itself
-*     result in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not always
-*     be possible otherwise.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     -  This implementation addresses the selection of axes from a 
-*     FluxFrame object. This results in another object of the same class 
-*     only if the single FluxFrame axis is selected exactly once. 
-*     Otherwise, the result is a Frame class object which inherits the 
-*     FluxFrame's axis information (if appropriate) but none of the other 
-*     properties of a FluxFrame.
-*     -  In the event that a FluxFrame results, the returned Mapping will 
-*     take proper account of the relationship between the target and result 
-*     coordinate systems.
-*     -  In the event that a Frame class object results, the returned Mapping
-*     will only represent a selection/permutation of axes.
-
-*  Implementation Deficiencies:
-*     -  Any axis selection is currently permitted. Probably this should be
-*     restricted so that each axis can only be selected once. The
-*     astValidateAxisSelection method will do this but currently there are bugs
-*     in the CmpFrame class that cause axis selections which will not pass this
-*     test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *target;      /* Pointer to the FluxFrame structure */
-   AstFluxFrame *temp;        /* Pointer to copy of target FluxFrame */
-   AstSystemType align_sys;   /* System in which to align the FluxFrames */
-   int match;                 /* Coordinate conversion is possible? */
-   int report;                /* Report errors if FluxFrames cannot be aligned? */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the target FluxFrame structure. */
-   target = (AstFluxFrame *) target_frame;
-
-/* Result is a FluxFrame. */
-/* -------------------------- */
-/* Check if the result Frame is to have one axis obtained by selecting
-   the single target FluxFrame axis. If so, the result will also be 
-   a FluxFrame. */
-   if ( ( result_naxes == 1 ) && ( target_axes[ 0 ] == 0 ) ) {
-
-/* Form the result from a copy of the target. */
-      *result = astCopy( target );
-
-/* Initialise a flag to indicate that MakeFluxMapping should not report
-   errors if no Mapping can be created. */
-      report = 0;
-
-/* If required, overlay the template attributes on to the result FluxFrame.
-   Also get the system in which to align the two FluxFrames. These are the 
-   values from the template (if there is a template). */
-      if ( template ) {
-         astOverlay( template, template_axes, *result );
-         if( astIsAFluxFrame( template ) ) {
-            align_sys = astGetAlignSystem( template );
-
-/* Since we now know that both the template and target are FluxFrames, it 
-   should usually be possible to convert betwen them. If conversion is
-   *not* possible then the user will probably be interested in knowing the 
-   reason why conversion is not possible. Therefore, indicate that 
-   MakeFluxMapping should report errors if no Mapping can be created. */
-            report = 1;
-
-         } else {
-            align_sys = astGetAlignSystem( target );
-         }
-
-/* If no template was supplied, align in the System of the target. */
-      } else {
-         align_sys = astGetSystem( target );
-      }
-
-/* Generate a Mapping that takes account of changes in the coordinate system 
-   between the target FluxFrame and the result FluxFrame. If this Mapping can 
-   be generated, set "match" to indicate that coordinate conversion is 
-   possible. If the template is a fluxframe, report errors if a match is not 
-   possible. */
-      match = ( MakeFluxMapping( target, (AstFluxFrame *) *result, 
-                align_sys, map, status ) != 0 );
-
-/* Result is not a FluxFrame. */
-/* ------------------------------ */
-/* In this case, we select axes as if the target were from the Frame
-   class.  However, since the resulting data will then be separated
-   from their enclosing FluxFrame, default attribute values may differ
-   if the methods for obtaining them were over-ridden by the FluxFrame
-   class. To overcome this, we ensure that these values are explicitly
-   set for the result Frame (rather than relying on their defaults). */
-   } else {
-
-/* Make a temporary copy of the target FluxFrame. We will explicitly
-   set the attribute values in this copy so as not to modify the original. */
-      temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
-   explicitly to its default value. */
-#define SET(attribute) \
-   if ( !astTest##attribute( temp ) ) { \
-      astSet##attribute( temp, astGet##attribute( temp ) ); \
-   }
-
-/* Set attribute values which apply to the Frame as a whole and which
-   we want to retain, but whose defaults are over-ridden by the
-   FluxFrame class. */
-      SET(Domain)
-      SET(Title)
-
-/* Define a macro to test if an attribute is set for axis zero (the only
-   axis of a FluxFrame). If not, set it explicitly to its default value. */
-#define SET_AXIS(attribute) \
-   if ( !astTest##attribute( temp, 0 ) ) { \
-      astSet##attribute( temp, 0, \
-                         astGet##attribute( temp, 0 ) ); \
-   }
-
-/* Use this macro to set explicit values for all the axis attributes
-   for which the FluxFrame class over-rides the default value. */
-      SET_AXIS(Label)
-      SET_AXIS(Symbol)
-      SET_AXIS(Unit)
-
-/* Clear attributes which have an extended range of values allowed by
-   this class. */
-      astClearSystem( temp );
-      astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
-   produce the result Frame by selecting the required set of axes and
-   overlaying the template Frame's attributes. */
-      match = (*parent_subframe)( (AstFrame *) temp, template,
-                                  result_naxes, target_axes, template_axes,
-                                  map, result, status );
-
-/* Delete the temporary copy of the target FluxFrame. */
-      temp = astDelete( temp );
-   }
-
-/* If an error occurred or no match was found, annul the returned
-   objects and reset the returned result. */
-   if ( !astOK || !match ) {
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astSystemCode method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external
-*     description of a coordinate system into a FluxFrame
-*     coordinate system type code (System attribute value). It is the
-*     inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the sky coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the sky coordinate
-*     system description was not recognised. This does not produce an
-*     error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
-   result. */
-   if ( astChrMatch( "FLXDN", system ) ) {
-      result = AST__FLUXDEN;
-
-   } else if ( astChrMatch( "FLXDNW", system ) ) {
-      result = AST__FLUXDENW;
-
-   }else if ( astChrMatch( "SFCBR", system ) ) {
-      result = AST__SBRIGHT;
-
-   } else if ( astChrMatch( "SRCBR", system ) ) {
-      result = AST__SBRIGHTW;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemLabel( AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemLabel
-
-*  Purpose:
-*     Return a label for a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *SystemLabel( AstSystemType system, int *status )
-
-*  Class Membership:
-*     FluxFrame member function.
-
-*  Description:
-*     This function converts a FluxFrame coordinate system type code
-*     (System attribute value) into a descriptive string for human readers.
-
-*  Parameters:
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the sky coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. */
-   switch ( system ) {
-
-   case AST__FLUXDEN:
-      result = "flux density";
-      break;
-
-   case AST__FLUXDENW:
-      result = "flux wavelength density";
-      break;
-
-   case AST__SBRIGHT:
-      result = "surface brightness";
-      break;
-
-   case AST__SBRIGHTW:
-      result = "surface brightness (per wavelength)";
-      break;
-
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astSystemString method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a FluxFrame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-   return FluxSystemString( system, status );
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     TestActiveUnit
-
-*  Purpose:
-*     Test the ActiveUnit flag for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int TestActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astTestActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function test the value of the ActiveUnit flag for a FluxFrame, 
-*    which is always "unset". 
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The result of the test (0).
-
-*/
-   return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a FluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a FluxFrame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   int len;                      /* Length of attrib string */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* SpecVal. */
-/* -------- */
-   if ( !strcmp( attrib, "specval" ) ) {
-      result = astTestSpecVal( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int UnitsOK( AstSystemType system, const char *units, int report, 
-                    const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     UnitsOK
-
-*  Purpose:
-*     Check if a units string is appropriate for the current System.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int UnitsOK( AstSystemType system, const char *units, int report, 
-*                  const char *method, const char *class, int *status ) 
-
-*  Class Membership:
-*     FluxFrame member function 
-
-*  Description:
-*     This function returns a non-zero value if the supplied units string
-*     can be mapped to the defaultunits for the current System in the
-*     supplied FluxFrame.
-
-*  Parameters:
-*     system 
-*        The system type to check.
-*     unit
-*        The units string to check.
-*     report
-*        Should an error be reported if the units and system are
-*        inconsistent?
-*     method
-*        String holding a method name to be used in error messages.
-*     class
-*        String holding a class name to be used in error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns Value:
-*     Non-zero if the units string can be used to describe the current
-*     flux System. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   int result;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Get the Mapping from the default units for the supplied system to the
-   supplied Units. */
-   map = astUnitMapper( DefUnit( system, method, class, status ), units, NULL, NULL );
-
-/* If a Mapping was found succesfully, annul it and return non-zero.
-   Otherwise return zero. */
-   if( map ) {
-      result = 1;
-      map = astAnnul( map );
-
-   } else {
-      result = 0;
-
-/* Report an error if required. */
-      if( report && astOK ) {
-         astError( AST__BADUN, "%s(%s): The units (%s) and system (%s) "
-                   "within the supplied %s are inconsistent.", status, method,
-                   class, units, FluxSystemString( system, status ), class );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system, 
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     FluxFrame member function (over-rides the astValidateSystem method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked. 
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;              /* Validated system value */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
-   if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
-         astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
-                   "or AlignSystem attribute of a %s.", status, method, 
-                   astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
-   } else {
-      result = system;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/*
-*att++
-*  Name:
-*     SpecVal
-
-*  Purpose:
-*     The spectral position at which flux values are measured.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the spectral position (frequency, wavelength, 
-*     etc.), at which the values described by the FluxFrame are measured.
-*     It is used when determining the Mapping between between FluxFrames.
-*
-*     The default value and spectral system used for this attribute are
-*     both specified when the FluxFrame is created.
-
-*  Applicability:
-*     FluxFrame
-*        All FluxFrames have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(FluxFrame,SpecVal,specval,AST__BAD)
-astMAKE_GET(FluxFrame,SpecVal,double,AST__BAD,((this->specval!=AST__BAD)?this->specval:this->defspecval))
-astMAKE_SET(FluxFrame,SpecVal,double,specval,value)
-astMAKE_TEST(FluxFrame,SpecVal,( this->specval != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for FluxFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for FluxFrame objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *in;             /* Pointer to input FluxFrame */
-   AstFluxFrame *out;            /* Pointer to output FluxFrame */
-   char *usedunit;               /* Pointer to an element of usedunits array */
-   int i;                        /* Loop count */
-   int nused;                    /* Size of "usedunits" array */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output FluxFrames. */
-   in = (AstFluxFrame *) objin;
-   out = (AstFluxFrame *) objout;
-
-/* Nullify the pointers stored in the output object since these will
-   currently be pointing at the input data (since the output is a simple
-   byte-for-byte copy of the input). Otherwise, the input data could be
-   freed by accidient if the output object is deleted due to an error
-   occuring in this function. */
-   out->usedunits = NULL;
-   out->specframe = NULL;
-
-/* Store the last used units in the output SpecMap. */
-   if( in && in->usedunits ) {
-      nused = in->nuunits;
-      out->usedunits = astMalloc( nused*sizeof( char * ) );
-      if( out->usedunits ) {
-         for( i = 0; i < nused; i++ ) {
-            usedunit = in->usedunits[ i ];
-            if( usedunit ) {
-               out->usedunits[ i ] = astStore( NULL, usedunit, 
-                                               strlen( usedunit ) + 1 );
-            } else {
-               out->usedunits[ i ] = NULL;
-            }
-         }
-      }
-   }
-
-/* Copy the SpecFrame */
-   if( in->specframe ) out->specframe = astCopy( in->specframe );
-
-/* If an error has occurred, free the output resources. */
-   if( !astOK ) Delete( (AstObject *) out, status );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for FluxFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for FluxFrame objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-   
-/* Local Variables: */
-   AstFluxFrame *this;
-   int i;
-
-/* Release the memory referred to in the FluxFrame structure. */
-   this = (AstFluxFrame *) obj;
-   if( this && this->usedunits ) {
-      for( i = 0; i < this->nuunits; i++ ) {
-         this->usedunits[ i ] = astFree( this->usedunits[ i ] );
-      }
-      this->usedunits = astFree( this->usedunits );
-   }
-
-/* Annulthe SpecFrame. */
-   if( this->specframe ) this->specframe = astAnnul( this->specframe );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for FluxFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the FluxFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the FluxFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *this;           /* Pointer to the FluxFrame structure */
-   char buff[ 20 ];              /* Buffer for item name */
-   char comm[ 50 ];              /* Buffer for comment */
-   double dval;                  /* Double value */
-   int i;                        /* Loop count */
-   int j;                        /* Loop count */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FluxFrame structure. */
-   this = (AstFluxFrame *) this_object;
-
-/* Write out values representing the instance variables for the
-   FluxFrame class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* SpecVal. */
-/* -------- */
-   set = TestSpecVal( this, status );
-   dval = set ? GetSpecVal( this, status ) : astGetSpecVal( this );
-   if( dval != AST__BAD ) {
-      astWriteDouble( channel, "SpcVl", set, 0, dval, "Spectral position" );
-   }
-
-/* The SpecFrame */
-/* ------------- */
-   if( this->specframe ) {
-      astWriteObject( channel, "SpcFr", 1, 0, this->specframe, "SpcVl coord system" );
-   }
-
-/* Default SpecVal. */
-/* ---------------- */
-   if( this->defspecval != AST__BAD ) {
-      astWriteDouble( channel, "DfSpc", 1, 0, this->defspecval, "Default spectral position" );
-   }
-
-/* UsedUnits */
-/* --------- */
-   if( this->usedunits ) {
-      for( i = 0; i < this->nuunits; i++ ) {
-         if( this->usedunits[ i ] ) {
-            sprintf( buff, "U%s", astSystemString( this, (AstSystemType) i ));
-            for( j = 2; j < strlen( buff ); j++ ) buff[ j ] = tolower( buff[ j ] );
-            sprintf( comm, "Preferred units for %s", SystemLabel( (AstSystemType) i, status ) );
-            astWriteString( channel, buff, 1, 0, this->usedunits[ i ], comm );
-         }
-      }
-   }
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFluxFrame and astCheckFluxFrame functions using the 
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(FluxFrame,Frame)
-astMAKE_CHECK(FluxFrame)
-
-AstFluxFrame *astFluxFrame_( double specval, void *specfrm_void, 
-                             const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astFluxFrame
-
-*  Purpose:
-*     Create a FluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstFluxFrame *astFluxFrame( double specval, AstSpecFrame *specfrm, 
-*                                 const char *options, ..., int *status )
-
-*  Class Membership:
-*     FluxFrame constructor.
-
-*  Description:
-*     This function creates a new FluxFrame and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     specval
-*        The spectral value to which the flux values refer, given in the
-*        spectral coordinate system specified by "specfrm". The value
-*        supplied for the "specval" parameter becomes the default value for 
-*        the SpecVal attribute.
-*     specfrm
-*        A pointer to a SpecFrame describing the spectral coordinate system 
-*        in which the "specval" parameter is given. A deep copy of this object 
-*        is taken, so any subsequent changes to the SpecFrame using the 
-*        supplied pointer will have no effect on the new FluxFrame.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new FluxFrame. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new FluxFrame.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic FluxFrame constructor which
-*     is available via the protected interface to the FluxFrame class.
-*     A public interface is provided by the astFluxFrameId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *um;               /* Mapping from default to actual units */
-   AstFluxFrame *new;            /* Pointer to new FluxFrame */
-   AstSpecFrame *sfrm;           /* Pointer to SpecFrame */
-   AstSystemType s;              /* System */
-   const char *u;                /* Units string */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the SpecFrame structures provided. */
-   sfrm = specfrm_void ? astCheckSpecFrame( specfrm_void ) : NULL;
-
-/* Initialise the FluxFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitFluxFrame( NULL, sizeof( AstFluxFrame ), !class_init, 
-                           &class_vtab, "FluxFrame", specval, sfrm );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new FluxFrame's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* Check the Units are appropriate for the System. */
-      u = astGetUnit( new, 0 );
-      s = astGetSystem( new );
-      um = astUnitMapper( DefUnit( s, "astFluxFrame", "FluxFrame", status ), 
-                          u, NULL, NULL );
-      if( um ) {
-         um = astAnnul( um );
-      } else {
-         astError( AST__BADUN, "astFluxFrame: Inappropriate units (%s) "
-                   "specified for a %s axis.", status, u, SystemLabel( s, status ) );
-      }      
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new FluxFrame. */
-   return new;
-}
-
-AstFluxFrame *astInitFluxFrame_( void *mem, size_t size, int init,
-                                 AstFluxFrameVtab *vtab, const char *name,
-                                 double specval, AstSpecFrame *specfrm, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFluxFrame
-
-*  Purpose:
-*     Initialise a FluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstFluxFrame *astInitFluxFrame( void *mem, size_t size, int init,
-*                                     AstFrameVtab *vtab, const char *name,
-*                                     double specval, AstSpecFrame *specfrm)
-
-*  Class Membership:
-*     FluxFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new FluxFrame object. It allocates memory (if
-*     necessary) to accommodate the FluxFrame plus any additional data
-*     associated with the derived class. It then initialises a
-*     FluxFrame structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual function
-*     table for a FluxFrame at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the FluxFrame is to be
-*	created. This must be of sufficient size to accommodate the
-*	FluxFrame data (sizeof(FluxFrame)) plus any data used by
-*	the derived class. If a value of NULL is given, this function
-*	will allocate the memory itself using the "size" parameter to
-*	determine its size.
-*     size
-*        The amount of memory used by the FluxFrame (plus derived
-*	class data). This will be used to allocate memory if a value of
-*	NULL is given for the "mem" parameter. This value is also stored
-*	in the FluxFrame structure, so a valid value must be supplied
-*	even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the FluxFrame's virtual function
-*	table is to be initialised. If this value is non-zero, the
-*	virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*	associated with the new FluxFrame.
-*     name
-*        Pointer to a constant null-terminated character string which
-*	contains the name of the class to which the new object belongs
-*	(it is this pointer value that will subsequently be returned by
-*	the astGetClass method).
-*     specval
-*        The spectral value to which the flux values refer, given in the
-*        spectral coordinate system specified by "specfrm". The value
-*        supplied for the "specval" parameter becomes the default value for 
-*        the SpecVal attribute. May be AST__BAD.
-*     specfrm
-*        A pointer to a SpecFrame describing the spectral coordinate system 
-*        in which the "specval" parameter is given. A deep copy of this object 
-*        is taken, so any subsequent changes to the SpecFrame using the 
-*        supplied pointer will have no effect on the new FluxFrame. Should 
-*        be NULL if "specval" is AST__BAD.
-
-*  Returned Value:
-*     A pointer to the new FluxFrame.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFluxFrame *new;        /* Pointer to the new FluxFrame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitFluxFrameVtab( vtab, name );
-
-/* Initialise a 1D Frame structure (the parent class) as the first component
-   within the FluxFrame structure, allocating memory if necessary. */
-   new = (AstFluxFrame *) astInitFrame( mem, size, 0,
-                                        (AstFrameVtab *) vtab, name, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the FluxFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->specval = AST__BAD;
-      new->defspecval = specval;
-      new->specframe = specfrm ? astCopy( specfrm ) : NULL;
-      new->nuunits = 0;
-      new->usedunits = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstFluxFrame *astLoadFluxFrame_( void *mem, size_t size, AstFluxFrameVtab *vtab, 
-                                 const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadFluxFrame
-
-*  Purpose:
-*     Load a FluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "fluxframe.h"
-*     AstFluxFrame *astLoadFluxFrame( void *mem, size_t size, AstFluxFrameVtab *vtab, 
-*                                      const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     FluxFrame loader.
-
-*  Description:
-*     This function is provided to load a new FluxFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     FluxFrame structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the FluxFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        FluxFrame data (sizeof(FluxFrame)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the FluxFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the FluxFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstFluxFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new FluxFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the FluxFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "FluxFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new FluxFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFluxFrame *new;            /* Pointer to the new FluxFrame */
-   char buff[ 20 ];              /* Buffer for item name */
-   char *sval;                   /* Pointer to string value */
-   int i;                        /* Loop count */
-   int j;                        /* Get a pointer to the thread specific global data structure. */
-
-/* Loop count */
-   int sys;                      /* System value */
-
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this FluxFrame. In this case the
-   FluxFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstFluxFrame );
-      vtab = &class_vtab;
-      name = "FluxFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitFluxFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built FluxFrame. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-       astReadClassData( channel, "FluxFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Default SpecVal */
-/* --------------- */
-      new->defspecval = astReadDouble( channel, "dfspc", AST__BAD );
-
-/* SpecFrame  */
-/* ---------- */
-      new->specframe = astReadObject( channel, "spcfr", NULL );
-      
-/* SpecVal */
-/* ------- */
-      new->specval = astReadDouble( channel, "spcvl", AST__BAD );
-      if ( TestSpecVal( new, status ) ) SetSpecVal( new, new->specval, status );
-
-/* UsedUnits */
-/* --------- */
-      new->nuunits = 0;
-      new->usedunits = NULL;
-      for( sys = FIRST_SYSTEM; sys <= LAST_SYSTEM; sys++ ) {
-         sprintf( buff, "u%s", astSystemString( new, (AstSystemType) sys ));
-         for( j = 0; j < strlen( buff ); j++ ) buff[ j ] = tolower( buff[ j ] );
-         sval = astReadString( channel, buff, NULL );
-         if( sval ) {
-            if( (int) sys >= new->nuunits ) {
-               new->usedunits = astGrow( new->usedunits, sys + 1, 
-                                          sizeof(char *) );
-               if( astOK ) {
-                  for( i = new->nuunits; i < sys + 1; i++ ) new->usedunits[ i ] = NULL;
-                  new->nuunits = sys + 1;
-               }
-            } else {
-               new->usedunits[ sys ] = astFree( new->usedunits[ sys ] );
-            }
-            if( astOK ) {
-               new->usedunits[ sys ] = astStore( new->usedunits[ sys ],
-                                                 sval, strlen( sval ) + 1 );
-            }
-            sval = astFree( sval );
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new FluxFrame. */
-       if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new FluxFrame pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-AstSystemType astGetDensitySystem_( AstFluxFrame *this, int *status ){
-   if ( !astOK ) return AST__BADSYSTEM;
-   return (**astMEMBER(this,FluxFrame,GetDensitySystem))(this, status );
-}
-
-const char *astGetDensityUnit_( AstFluxFrame *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,FluxFrame,GetDensityUnit))(this, status );
-}
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstFluxFrame *astFluxFrameId_( double, void *, const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstFluxFrame *astFluxFrameId_( double specval, void *specfrm_void, 
-                               const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astFluxFrame
-f     AST_FLUXFRAME
-
-*  Purpose:
-*     Create a FluxFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "fluxframe.h"
-c     AstFluxFrame *astFluxFrame( double specval, AstSpecFrame *specfrm, 
-c                                 const char *options, ... )
-f     RESULT = AST_FLUXFRAME( SPECVAL, SPECFRM, OPTIONS, STATUS )
-
-*  Class Membership:
-*     FluxFrame constructor.
-
-*  Description:
-*     This function creates a new FluxFrame and optionally initialises
-*     its attributes.
-*
-*     A FluxFrame is a specialised form of one-dimensional Frame which 
-*     represents various systems used to represent the signal level in an
-*     observation. The particular coordinate system to be used is specified 
-*     by setting the FluxFrame's System attribute qualified, as necessary, by 
-*     other attributes such as the units, etc (see the description of the 
-*     System attribute for details).
-*
-*     All flux values are assumed to be measured at the same frequency or
-*     wavelength (as given by the SpecVal attribute). Thus this class is
-*     more appropriate for use with images rather than spectra.
-
-*  Parameters:
-c     specval
-f     SPECVAL = DOUBLE PRECISION (Given)
-*        The spectral value to which the flux values refer, given in the
-*        spectral coordinate system specified by 
-c        "specfrm". The value supplied for the "specval" 
-f        SPECFRM. The value supplied for the SPECVAL
-*        parameter becomes the default value for the SpecVal attribute.
-*        A value of AST__BAD may be supplied if the spectral position is
-*        unknown, but this may result in it not being possible for the
-c        astConvert
-f        AST_CONVERT 
-*        function to determine a Mapping between the new FluxFrame and
-*        some other FluxFrame.
-c     specfrm
-f     SPECFRM = INTEGER (Given)
-*        A pointer to a SpecFrame describing the spectral coordinate system 
-*        in which the 
-c        "specval" 
-f        SPECVAL
-*        parameter is given. A deep copy of this object is taken, so any 
-*        subsequent changes to the SpecFrame using the supplied pointer will 
-*        have no effect on the new FluxFrame. 
-c        A NULL pointer can be supplied if AST__BAD is supplied for "specval".
-f        AST__NULL can be supplied if AST__BAD is supplied for SPECVAL.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new FluxFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new FluxFrame. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFluxFrame()
-f     AST_FLUXFRAME = INTEGER
-*        A pointer to the new FluxFrame.
-
-*  Notes:
-*     - When conversion between two FluxFrames is requested (as when
-c     supplying FluxFrames to astConvert),
-f     supplying FluxFrames AST_CONVERT),
-*     account will be taken of the nature of the flux coordinate systems 
-*     they represent, together with any qualifying attribute values, including
-*     the AlignSystem attribute. The results will therefore fully reflect the 
-*     relationship between positions measured in the two systems. In addition, 
-*     any difference in the Unit attributes of the two systems will also be 
-*     taken into account.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astFluxFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astFluxFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astFluxFrame_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *um;               /* Mapping from default to actual units */
-   AstFluxFrame *new;            /* Pointer to new FluxFrame */
-   AstSpecFrame *sfrm;           /* Pointer to SpecFrame */
-   AstSystemType s;              /* System */
-   const char *u;                /* Units string */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the SpecFrame structures provided. */
-   sfrm = specfrm_void ? astCheckSpecFrame( astMakePointer( specfrm_void ) ) : NULL;
-
-/* Initialise the FluxFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitFluxFrame( NULL, sizeof( AstFluxFrame ), !class_init, 
-                           &class_vtab, "FluxFrame", specval, sfrm );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new FluxFrame's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* Check the Units are appropriate for the System. */
-      u = astGetUnit( new, 0 );
-      s = astGetSystem( new );
-      um = astUnitMapper( DefUnit( s, "astFluxFrame", "FluxFrame", status ), 
-                          u, NULL, NULL );
-      if( um ) {
-         um = astAnnul( um );
-      } else {
-         astError( AST__BADUN, "astFluxFrame: Inappropriate units (%s) "
-                   "specified for a %s axis.", status, u, SystemLabel( s, status ) );
-      }      
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new FluxFrame. */
-   return astMakeId( new );
-}
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/fluxframe.h b/ast-5.3-1/fluxframe.h
deleted file mode 100644
index 749a273..0000000
--- a/ast-5.3-1/fluxframe.h
+++ /dev/null
@@ -1,263 +0,0 @@
-#if !defined( FLUXFRAME_INCLUDED ) /* Include this file only once */
-#define FLUXFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     fluxframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the FluxFrame class.
-
-*  Invocation:
-*     #include "fluxframe.h"
-
-*  Description:
-*     This include file defines the interface to the FluxFrame class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     1-DEC-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Parent Frame class */
-#include "specframe.h"           /* Spectral coordinate systems */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__FLUXDEN       1
-#define AST__FLUXDENW      2
-#define AST__SBRIGHT       3
-#define AST__SBRIGHTW      4
-
-/* Define constants used to size global arrays in this module. */
-#define AST__FLUXFRAME_GETATTRIB_BUFF_LEN 50
-#define AST__FLUXFRAME_GETLABEL_BUFF_LEN 200
-#define AST__FLUXFRAME_GETSYMBOL_BUFF_LEN 20
-#define AST__FLUXFRAME_GETTITLE_BUFF_LEN 200
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* FluxFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstFluxFrame {
-
-/* Attributes inherited from the parent class. */
-   AstFrame frame;               /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double specval;               /* Spectral position */
-   double defspecval;            /* Default spectral position */
-   AstSpecFrame *specframe;       /* SpecFrame describing specval & defspecval */
-   int nuunits;                  /* Size of usedunits array */
-   char **usedunits;             /* Last used units for each system */
-} AstFluxFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstFluxFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-   AstSystemType (* GetDensitySystem)( AstFluxFrame *, int * );
-   const char *(* GetDensityUnit)( AstFluxFrame *, int * );
-
-   double (* GetSpecVal)( AstFluxFrame *, int * );
-   int (* TestSpecVal)( AstFluxFrame *, int * );
-   void (* ClearSpecVal)( AstFluxFrame *, int * );
-   void (* SetSpecVal)( AstFluxFrame *, double, int * );
-
-} AstFluxFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstFluxFrameGlobals {
-   AstFluxFrameVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__FLUXFRAME_GETATTRIB_BUFF_LEN + 1 ];
-   char GetLabel_Buff[ AST__FLUXFRAME_GETLABEL_BUFF_LEN + 1 ];
-   char GetSymbol_Buff[ AST__FLUXFRAME_GETSYMBOL_BUFF_LEN + 1 ];
-   char GetTitle_Buff[ AST__FLUXFRAME_GETTITLE_BUFF_LEN + 1 ];
-} AstFluxFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(FluxFrame)         /* Check class membership */
-astPROTO_ISA(FluxFrame)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstFluxFrame *astFluxFrame_( double, void *, const char *, int *, ...);
-#else
-AstFluxFrame *astFluxFrameId_( double, void *, const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstFluxFrame *astInitFluxFrame_( void *, size_t, int, 
-                                 AstFluxFrameVtab *,
-                                 const char *, double, AstSpecFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitFluxFrameVtab_( AstFluxFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstFluxFrame *astLoadFluxFrame_( void *, size_t, 
-                                 AstFluxFrameVtab *,
-                                 const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitFluxFrameGlobals_( AstFluxFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-#if defined(astCLASS)            /* Protected */
-
-AstSystemType astGetDensitySystem_( AstFluxFrame *, int * );
-const char *astGetDensityUnit_( AstFluxFrame *, int * );
-
-double astGetSpecVal_( AstFluxFrame *, int * );
-int astTestSpecVal_( AstFluxFrame *, int * );
-void astClearSpecVal_( AstFluxFrame *, int * );
-void astSetSpecVal_( AstFluxFrame *, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckFluxFrame(this) astINVOKE_CHECK(FluxFrame,this,0)
-#define astVerifyFluxFrame(this) astINVOKE_CHECK(FluxFrame,this,1)
-
-/* Test class membership. */
-#define astIsAFluxFrame(this) astINVOKE_ISA(FluxFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astFluxFrame astINVOKE(F,astFluxFrame_)
-#else
-#define astFluxFrame astINVOKE(F,astFluxFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitFluxFrame(mem,size,init,vtab,name,specval,specfrm) \
-astINVOKE(O,astInitFluxFrame_(mem,size,init,vtab,name,specval,astCheckSpecFrame(specfrm),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFluxFrameVtab(vtab,name) astINVOKE(V,astInitFluxFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFluxFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFluxFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckFluxFrame to validate FluxFrame pointers
-   before use. This provides a contextual error report if a pointer to
-   the wrong sort of object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGetDensitySystem(this) astINVOKE(V,astGetDensitySystem_(astCheckFluxFrame(this),STATUS_PTR))
-#define astGetDensityUnit(this) astINVOKE(V,astGetDensityUnit_(astCheckFluxFrame(this),STATUS_PTR))
-
-#define astGetSpecVal(this) astINVOKE(V,astGetSpecVal_(astCheckFluxFrame(this),STATUS_PTR))
-#define astTestSpecVal(this) astINVOKE(V,astTestSpecVal_(astCheckFluxFrame(this),STATUS_PTR))
-#define astClearSpecVal(this) astINVOKE(V,astClearSpecVal_(astCheckFluxFrame(this),STATUS_PTR))
-#define astSetSpecVal(this,value) astINVOKE(V,astSetSpecVal_(astCheckFluxFrame(this),value,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/fmapping.c b/ast-5.3-1/fmapping.c
deleted file mode 100644
index 70a1c28..0000000
--- a/ast-5.3-1/fmapping.c
+++ /dev/null
@@ -1,730 +0,0 @@
-/*
-*+
-*  Name:
-*     fmapping.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Mapping class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Mapping class.
-
-*  Routines Defined:
-*     AST_DECOMPOSE
-*     AST_INVERT
-*     AST_ISAMAPPING
-*     AST_LINEARMAPPING
-*     AST_REBIN<X>
-*     AST_REBINSEQ<X>
-*     AST_MAPBOX
-*     AST_MAPSPLIT
-*     AST_RATE
-*     AST_REMOVEREGIONS
-*     AST_RESAMPLE<X>
-*     AST_SIMPLIFY
-*     AST_TRAN1
-*     AST_TRAN2
-*     AST_TRANGRID
-*     AST_TRANN
-*     AST_RATE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-JUL-1996 (RFWS):
-*        Original version.
-*     13-DEC-1996 (RFWS)
-*        Added AST_SIMPLIFY.
-*     28-MAY-1998 (RFWS):
-*        Added AST_MAPBOX.
-*     12-NOV-1998 (RFWS):
-*        Added AST_RESAMPLE<X>.
-*     22-NOV-2000 (DSB):
-*        Pass the "flags" argument by reference instead of by value in the
-*        MAKE_AST_RESAMPLE_UINTERP macro.
-*     9-JAN-2001 (DSB):
-*        Changed in and out arguments for TranN from type "double (*)[]"
-*        to "double *".
-*     26-SEP-2001 (DSB):
-*        Added AST_DECOMPOSE.
-*     16-JUL-2003 (DSB):
-*        Added AST_RATE.
-*     30-JUN-2005 (DSB):
-*        Added AST_REBIN<X>.
-*     1-SEP-2005 (DSB):
-*        Added AST_REBINSEQ<X>.
-*     8-MAR-2006 (DSB):
-*        Added AST_TRANGRID.
-*     5-MAY-2009 (DSB):
-*        Added AST_REMOVEREGIONS.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "mapping.h"             /* C interface to the Mapping class */
-
-/* Module Variables. */
-/* ================= */
-/* Pointer to user-supplied (FORTRAN 77) interpolation function for
-   use by AST_RESAMPLE<X>. */
-static void (* ast_resample_FINTERP)();
-
-/* Interpolation function interface. */
-/* ================================= */
-/* These functions are associated with allowing FORTRAN 77
-   implementations of interpolation functions to be passed to
-   AST_RESAMPLE<X> via the FORTRAN 77 interface and then to be invoked
-   when necessary by the C code in the main implementation of
-   astResample<X>. */
-
-/* Define a macro which defines an interface function called
-   ast_resample_uinterp<X> for a specific data type.
-
-   The resulting function has a suitable interface to allow it to be
-   passed as an interpolation function to the C interface of
-   astResample<X> in the case where the "interp" parameter is set to
-   AST__UINTERP. In turn, it invokes the equivalent user-supplied
-   FORTRAN 77 interpolation function, a pointer to which should
-   previously have been stored in the static variable
-   "ast_resample_FINTERP". */
-#define MAKE_AST_RESAMPLE_UINTERP(X,Xtype,Ftype) \
-static void ast_resample_uinterp##X( int ndim, \
-                                     const int lbnd[], const int ubnd[], \
-                                     const Xtype in[], const Xtype in_var[], \
-                                     int npoint, const int offset[], \
-                                     const double *const coords[], \
-                                     const double params[], int flags, \
-                                     Xtype badval, \
-                                     Xtype *out, Xtype *out_var, \
-                                     int *nbad ) { \
-   DECLARE_INTEGER(STATUS); \
-   int *status; \
-\
-/* Get a pointer to the inherited staus value. */ \
-   status = astGetStatusPtr; \
-\
-/* Obtain the C status and then invoke the FORTRAN 77 interpolation \
-   function via the stored pointer. Note that the "coords" array we \
-   pass to FORTRAN has to be a contiguous 2-d array, so we must \
-   de-reference one level of pointer compared to the C case. */ \
-   STATUS = astStatus; \
-   ( *ast_resample_FINTERP )( INTEGER_ARG(&ndim), \
-                              INTEGER_ARRAY_ARG(lbnd), \
-                              INTEGER_ARRAY_ARG(ubnd), \
-                              Ftype##_ARRAY_ARG(in), \
-                              Ftype##_ARRAY_ARG(in_var), \
-                              INTEGER_ARG(&npoint), \
-                              INTEGER_ARRAY_ARG(offset), \
-                              DOUBLE_ARRAY_ARG(coords[ 0 ]), \
-                              DOUBLE_ARRAY_ARG(params), \
-                              INTEGER_ARG(&flags), \
-                              Ftype##_ARG(&badval), \
-                              Ftype##_ARRAY_ARG(out), \
-                              Ftype##_ARRAY_ARG(out_var), \
-                              INTEGER_ARG(nbad), \
-                              INTEGER_ARG(&STATUS) ); \
-\
-/* Set the C status to the returned FORTRAN 77 status. */ \
-   astSetStatus( STATUS ); \
-}
-
-/* Invoke the above macro to define an interface function for each
-   required data type. */
-MAKE_AST_RESAMPLE_UINTERP(D,double,DOUBLE)
-MAKE_AST_RESAMPLE_UINTERP(F,float,REAL)
-MAKE_AST_RESAMPLE_UINTERP(I,int,INTEGER)
-MAKE_AST_RESAMPLE_UINTERP(UI,unsigned int,INTEGER)
-MAKE_AST_RESAMPLE_UINTERP(S,short int,WORD)
-MAKE_AST_RESAMPLE_UINTERP(US,unsigned short int,UWORD)
-MAKE_AST_RESAMPLE_UINTERP(B,signed char,BYTE)
-MAKE_AST_RESAMPLE_UINTERP(UB,unsigned char,UBYTE)
-
-/* Undefine the macro. */
-#undef MAKE_AST_RESAMPLE_UINTERP
-
-/* Define a function called ast_resample_ukern1 which has a suitable
-   interface to allow it to be passed as an interpolation function to
-   the C interface of astResample<X> in the case where the "interp"
-   parameter is set to AST__UKERN1. In turn, it invokes the equivalent
-   user-supplied FORTRAN 77 interpolation function, a pointer to which
-   should previously have been stored in the static variable
-   "ast_resample_FINTERP". */
-static void ast_resample_ukern1( double offset, const double params[],
-                                 int flags, double *value ) {
-   DECLARE_INTEGER(STATUS);
-   int *status;
-
-/* Obtain the C status and then invoke the FORTRAN 77 interpolation
-   function via the stored pointer. */
-   status = astGetStatusPtr;
-   STATUS = astStatus;
-   ( *ast_resample_FINTERP )( DOUBLE_ARG(&offset),
-                              DOUBLE_ARRAY_ARG(params),
-                              INTEGER_ARG(&flags),
-                              DOUBLE_ARG(value),
-                              INTEGER_ARG(&STATUS) );
-
-/* Set the C status to the returned FORTRAN 77 status. */
-   astSetStatus( STATUS );
-}
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-
-F77_SUBROUTINE(ast_decompose)( INTEGER(THIS),
-                               INTEGER(MAP1), 
-                               INTEGER(MAP2), 
-                               LOGICAL(SERIES), 
-                               INTEGER(INVERT1), 
-                               INTEGER(INVERT2), 
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(MAP1)
-   GENPTR_INTEGER(MAP2)
-   GENPTR_LOGICAL(SERIES)
-   GENPTR_INTEGER(INVERT1)
-   GENPTR_INTEGER(INVERT2)
-   AstMapping *map1;
-   AstMapping *map2;
-   int series;
-
-   astAt( "AST_DECOMPOSE", NULL, 0 );
-   astWatchSTATUS(
-      astDecompose( astI2P( *THIS ), &map1, &map2, &series, INVERT1, INVERT2 );
-      *MAP1 = astP2I( map1 );
-      *MAP2 = astP2I( map2 );
-      *SERIES = ( series )?F77_TRUE:F77_FALSE;
-   )
-}
-
-F77_SUBROUTINE(ast_invert)( INTEGER(THIS),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_INVERT", NULL, 0 );
-   astWatchSTATUS(
-      astInvert( astI2P( *THIS ) );
-   )
-}
-
-F77_LOGICAL_FUNCTION(ast_isamapping)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAMAPPING", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAMapping( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_linearapprox)( INTEGER(THIS),
-                                        DOUBLE_ARRAY(LBND),
-                                        DOUBLE_ARRAY(UBND),
-                                        DOUBLE(TOL),
-                                        DOUBLE_ARRAY(FIT),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(LBND)
-   GENPTR_DOUBLE_ARRAY(UBND)
-   GENPTR_DOUBLE(TOL)
-   GENPTR_DOUBLE_ARRAY(FIT)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_LINEARAPPROX", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astLinearApprox( astI2P( *THIS ), LBND, UBND, *TOL, FIT );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_mapbox)( INTEGER(THIS),
-                            DOUBLE_ARRAY(LBND_IN),
-                            DOUBLE_ARRAY(UBND_IN),
-                            LOGICAL(FORWARD),
-                            INTEGER(COORD_OUT),
-                            DOUBLE(LBND_OUT),
-                            DOUBLE(UBND_OUT),
-                            DOUBLE_ARRAY(XL),
-                            DOUBLE_ARRAY(XU),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(LBND_IN)
-   GENPTR_DOUBLE_ARRAY(UBND_IN)
-   GENPTR_LOGICAL(FORWARD)
-   GENPTR_INTEGER(COORD_OUT)
-   GENPTR_DOUBLE(LBND_OUT)
-   GENPTR_DOUBLE(UBND_OUT)
-   GENPTR_DOUBLE_ARRAY(XL)
-   GENPTR_DOUBLE_ARRAY(XU)
-   double lbnd_out;
-   double ubnd_out;
-
-   astAt( "AST_MAPBOX", NULL, 0 );
-   astWatchSTATUS(
-      astMapBox( astI2P( *THIS ), LBND_IN, UBND_IN, F77_ISTRUE( *FORWARD ),
-                 *COORD_OUT, &lbnd_out, &ubnd_out, XL, XU );
-      *LBND_OUT = lbnd_out;
-      *UBND_OUT = ubnd_out;
-   )
-}
-
-/* AST_RESAMPLE<X> requires a function for each possible data type, so
-   define it via a macro. */
-#define MAKE_AST_RESAMPLE(f,F,Ftype,X,Xtype) \
-F77_INTEGER_FUNCTION(ast_resample##f)( INTEGER(THIS), \
-                                       INTEGER(NDIM_IN), \
-                                       INTEGER_ARRAY(LBND_IN), \
-                                       INTEGER_ARRAY(UBND_IN), \
-                                       Ftype##_ARRAY(IN), \
-                                       Ftype##_ARRAY(IN_VAR), \
-                                       INTEGER(INTERP), \
-                                       void (* FINTERP)(), \
-                                       DOUBLE_ARRAY(PARAMS), \
-                                       INTEGER(FLAGS), \
-                                       DOUBLE(TOL), \
-                                       INTEGER(MAXPIX), \
-                                       Ftype(BADVAL), \
-                                       INTEGER(NDIM_OUT), \
-                                       INTEGER_ARRAY(LBND_OUT), \
-                                       INTEGER_ARRAY(UBND_OUT), \
-                                       INTEGER_ARRAY(LBND), \
-                                       INTEGER_ARRAY(UBND), \
-                                       Ftype##_ARRAY(OUT), \
-                                       Ftype##_ARRAY(OUT_VAR), \
-                                       INTEGER(STATUS) ) { \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_INTEGER(NDIM_IN) \
-   GENPTR_INTEGER_ARRAY(LBND_IN) \
-   GENPTR_INTEGER_ARRAY(UBND_IN) \
-   GENPTR_##Ftype##_ARRAY(IN) \
-   GENPTR_##Ftype##_ARRAY(IN_VAR) \
-   GENPTR_INTEGER(INTERP) \
-   GENPTR_DOUBLE_ARRAY(PARAMS) \
-   GENPTR_INTEGER(FLAGS) \
-   GENPTR_DOUBLE(TOL) \
-   GENPTR_INTEGER(MAXPIX) \
-   GENPTR_##Ftype(BADVAL) \
-   GENPTR_INTEGER(NDIM_OUT) \
-   GENPTR_INTEGER_ARRAY(LBND_OUT) \
-   GENPTR_INTEGER_ARRAY(UBND_OUT) \
-   GENPTR_INTEGER_ARRAY(LBND) \
-   GENPTR_INTEGER_ARRAY(UBND) \
-   GENPTR_##Ftype##_ARRAY(OUT) \
-   GENPTR_##Ftype##_ARRAY(OUT_VAR) \
-   GENPTR_INTEGER(STATUS) \
-\
-   void (* finterp)(); \
-   Xtype *out_var; \
-   const Xtype *in_var; \
-   F77_INTEGER_TYPE RESULT; \
-\
-   astAt( "AST_RESAMPLE"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-\
-/* If *INTERP is set to a value that requires a user-supplied \
-   interpolation function, then store a pointer to the supplied \
-   FORTRAN 77 version of this function and use the appropriate C \
-   wrapper function (defined above) to invoke it. */ \
-      if ( *INTERP == AST__UINTERP ) { \
-         ast_resample_FINTERP = FINTERP; \
-         finterp = (void (*)()) ast_resample_uinterp##X; \
-      } else if ( *INTERP == AST__UKERN1 ) { \
-         ast_resample_FINTERP = FINTERP; \
-         finterp = (void (*)()) ast_resample_ukern1; \
-      } else { \
-         ast_resample_FINTERP = NULL; \
-         finterp = NULL; \
-      } \
-\
-/* If the AST__USEVAR flag is set, use the input and output variance \
-   arrays, otherwise pass NULL pointers. */ \
-      in_var = out_var = NULL; \
-      if ( AST__USEVAR & *FLAGS ) { \
-         in_var = (const Xtype *) IN_VAR; \
-         out_var = (Xtype *) OUT_VAR; \
-      } \
-      RESULT = astResample##X( astI2P( *THIS ), *NDIM_IN, \
-                               LBND_IN, UBND_IN, (const Xtype *) IN, in_var, \
-                               *INTERP, finterp, PARAMS, *FLAGS, \
-                               *TOL, *MAXPIX, *BADVAL, \
-                               *NDIM_OUT, LBND_OUT, UBND_OUT, \
-                               LBND, UBND, (Xtype *) OUT, out_var ); \
-   ) \
-   return RESULT; \
-}
-
-/* Invoke the above macro to define a function for each data
-   type. Include synonyms for some functions. */
-MAKE_AST_RESAMPLE(d,D,DOUBLE,D,double)
-MAKE_AST_RESAMPLE(r,R,REAL,F,float)
-MAKE_AST_RESAMPLE(i,I,INTEGER,I,int)
-MAKE_AST_RESAMPLE(ui,UI,INTEGER,UI,unsigned int)
-MAKE_AST_RESAMPLE(s,S,WORD,S,short int)
-MAKE_AST_RESAMPLE(us,US,UWORD,US,unsigned short int)
-MAKE_AST_RESAMPLE(w,W,WORD,S,short int)
-MAKE_AST_RESAMPLE(uw,UW,UWORD,US,unsigned short int)
-MAKE_AST_RESAMPLE(b,B,BYTE,B,signed char)
-MAKE_AST_RESAMPLE(ub,UB,UBYTE,UB,unsigned char)
-#undef MAKE_AST_RESAMPLE
-
-/* AST_REBIN<X> requires a function for each possible data type, so
-   define it via a macro. */
-#define MAKE_AST_REBIN(f,F,Ftype,X,Xtype) \
-F77_SUBROUTINE(ast_rebin##f)( INTEGER(THIS), \
-                              DOUBLE(WLIM), \
-                              INTEGER(NDIM_IN), \
-                              INTEGER_ARRAY(LBND_IN), \
-                              INTEGER_ARRAY(UBND_IN), \
-                              Ftype##_ARRAY(IN), \
-                              Ftype##_ARRAY(IN_VAR), \
-                              INTEGER(INTERP), \
-                              DOUBLE_ARRAY(PARAMS), \
-                              INTEGER(FLAGS), \
-                              DOUBLE(TOL), \
-                              INTEGER(MAXPIX), \
-                              Ftype(BADVAL), \
-                              INTEGER(NDIM_OUT), \
-                              INTEGER_ARRAY(LBND_OUT), \
-                              INTEGER_ARRAY(UBND_OUT), \
-                              INTEGER_ARRAY(LBND), \
-                              INTEGER_ARRAY(UBND), \
-                              Ftype##_ARRAY(OUT), \
-                              Ftype##_ARRAY(OUT_VAR), \
-                              INTEGER(STATUS) ) { \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_DOUBLE(WLIM) \
-   GENPTR_INTEGER(NDIM_IN) \
-   GENPTR_INTEGER_ARRAY(LBND_IN) \
-   GENPTR_INTEGER_ARRAY(UBND_IN) \
-   GENPTR_##Ftype##_ARRAY(IN) \
-   GENPTR_##Ftype##_ARRAY(IN_VAR) \
-   GENPTR_INTEGER(INTERP) \
-   GENPTR_DOUBLE_ARRAY(PARAMS) \
-   GENPTR_INTEGER(FLAGS) \
-   GENPTR_DOUBLE(TOL) \
-   GENPTR_INTEGER(MAXPIX) \
-   GENPTR_##Ftype(BADVAL) \
-   GENPTR_INTEGER(NDIM_OUT) \
-   GENPTR_INTEGER_ARRAY(LBND_OUT) \
-   GENPTR_INTEGER_ARRAY(UBND_OUT) \
-   GENPTR_INTEGER_ARRAY(LBND) \
-   GENPTR_INTEGER_ARRAY(UBND) \
-   GENPTR_##Ftype##_ARRAY(OUT) \
-   GENPTR_##Ftype##_ARRAY(OUT_VAR) \
-   GENPTR_INTEGER(STATUS) \
-\
-   Xtype *out_var; \
-   const Xtype *in_var; \
-\
-   astAt( "AST_REBIN"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-\
-/* If the AST__USEVAR flag is set, use the input and output variance \
-   arrays, otherwise pass NULL pointers. */ \
-      in_var = out_var = NULL; \
-      if ( AST__USEVAR & *FLAGS ) { \
-         in_var = (const Xtype *) IN_VAR; \
-         out_var = (Xtype *) OUT_VAR; \
-      } \
-      astRebin##X( astI2P( *THIS ), *WLIM, *NDIM_IN, \
-                   LBND_IN, UBND_IN, (const Xtype *) IN, in_var, \
-                   *INTERP, PARAMS, *FLAGS, \
-                   *TOL, *MAXPIX, *BADVAL, \
-                   *NDIM_OUT, LBND_OUT, UBND_OUT, \
-                   LBND, UBND, (Xtype *) OUT, out_var ); \
-   ) \
-}
-
-/* Invoke the above macro to define a function for each data
-   type. Include synonyms for some functions. */
-MAKE_AST_REBIN(d,D,DOUBLE,D,double)
-MAKE_AST_REBIN(r,R,REAL,F,float)
-MAKE_AST_REBIN(i,I,INTEGER,I,int)
-#undef MAKE_AST_REBIN
-
-/* AST_REBINSEQ<X> requires a function for each possible data type, so
-   define it via a macro. */
-#define MAKE_AST_REBINSEQ(f,F,Ftype,X,Xtype) \
-F77_SUBROUTINE(ast_rebinseq##f)( INTEGER(THIS), \
-                              DOUBLE(WLIM), \
-                              INTEGER(NDIM_IN), \
-                              INTEGER_ARRAY(LBND_IN), \
-                              INTEGER_ARRAY(UBND_IN), \
-                              Ftype##_ARRAY(IN), \
-                              Ftype##_ARRAY(IN_VAR), \
-                              INTEGER(INTERP), \
-                              DOUBLE_ARRAY(PARAMS), \
-                              INTEGER(FLAGS), \
-                              DOUBLE(TOL), \
-                              INTEGER(MAXPIX), \
-                              Ftype(BADVAL), \
-                              INTEGER(NDIM_OUT), \
-                              INTEGER_ARRAY(LBND_OUT), \
-                              INTEGER_ARRAY(UBND_OUT), \
-                              INTEGER_ARRAY(LBND), \
-                              INTEGER_ARRAY(UBND), \
-                              Ftype##_ARRAY(OUT), \
-                              Ftype##_ARRAY(OUT_VAR), \
-                              DOUBLE_ARRAY(WEIGHTS), \
-                              INTEGER(NUSED), \
-                              INTEGER(STATUS) ) { \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_DOUBLE(WLIM) \
-   GENPTR_INTEGER(NDIM_IN) \
-   GENPTR_INTEGER_ARRAY(LBND_IN) \
-   GENPTR_INTEGER_ARRAY(UBND_IN) \
-   GENPTR_##Ftype##_ARRAY(IN) \
-   GENPTR_##Ftype##_ARRAY(IN_VAR) \
-   GENPTR_INTEGER(INTERP) \
-   GENPTR_DOUBLE_ARRAY(PARAMS) \
-   GENPTR_INTEGER(FLAGS) \
-   GENPTR_DOUBLE(TOL) \
-   GENPTR_INTEGER(MAXPIX) \
-   GENPTR_##Ftype(BADVAL) \
-   GENPTR_INTEGER(NDIM_OUT) \
-   GENPTR_INTEGER_ARRAY(LBND_OUT) \
-   GENPTR_INTEGER_ARRAY(UBND_OUT) \
-   GENPTR_INTEGER_ARRAY(LBND) \
-   GENPTR_INTEGER_ARRAY(UBND) \
-   GENPTR_##Ftype##_ARRAY(OUT) \
-   GENPTR_##Ftype##_ARRAY(OUT_VAR) \
-   GENPTR_DOUBLE_ARRAY(WEIGHTS) \
-   GENPTR_INTEGER(NUSED) \
-   GENPTR_INTEGER(STATUS) \
-\
-   Xtype *out_var; \
-   const Xtype *in_var; \
-\
-   astAt( "AST_REBINSEQ"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-\
-/* If the AST__USEVAR flag is set, use the input and output variance \
-   arrays, otherwise pass NULL pointers. */ \
-      in_var = out_var = NULL; \
-      if ( AST__USEVAR & *FLAGS ) { \
-         in_var = (const Xtype *) IN_VAR; \
-         out_var = (Xtype *) OUT_VAR; \
-      } \
-\
-/* If the AST__GENVAR flag is set, use the output variance \
-   arrays, otherwise pass NULL pointers. */ \
-      if ( AST__GENVAR & *FLAGS ) { \
-         in_var = NULL; \
-         out_var = (Xtype *) OUT_VAR; \
-      } \
-\
-      astRebinSeq##X( astI2P( *THIS ), *WLIM, *NDIM_IN, \
-                   LBND_IN, UBND_IN, (const Xtype *) IN, in_var, \
-                   *INTERP, PARAMS, *FLAGS, \
-                   *TOL, *MAXPIX, *BADVAL, \
-                   *NDIM_OUT, LBND_OUT, UBND_OUT, \
-                   LBND, UBND, (Xtype *) OUT, out_var, WEIGHTS, NUSED ); \
-   ) \
-}
-
-/* Invoke the above macro to define a function for each data
-   type. Include synonyms for some functions. */
-MAKE_AST_REBINSEQ(d,D,DOUBLE,D,double)
-MAKE_AST_REBINSEQ(r,R,REAL,F,float)
-MAKE_AST_REBINSEQ(i,I,INTEGER,I,int)
-#undef MAKE_AST_REBINSEQ
-
-F77_INTEGER_FUNCTION(ast_removeregions)( INTEGER(THIS),
-                                         INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_REMOVEREGIONS", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astRemoveRegions( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_simplify)( INTEGER(THIS),
-                                    INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_SIMPLIFY", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astSimplify( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_tran1)( INTEGER(THIS),
-                           INTEGER(NPOINT),
-                           DOUBLE(XIN),
-                           LOGICAL(FORWARD),
-                           DOUBLE(XOUT),
-                           INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NPOINT)
-   GENPTR_DOUBLE(XIN)
-   GENPTR_LOGICAL(FORWARD)
-   GENPTR_DOUBLE(XOUT)
-
-   astAt( "AST_TRAN1", NULL, 0 );
-   astWatchSTATUS(
-      astTran1( astI2P( *THIS ), *NPOINT, XIN, F77_ISTRUE( *FORWARD ), XOUT );
-   )
-}
-
-F77_SUBROUTINE(ast_tran2)( INTEGER(THIS),
-                           INTEGER(NPOINT),
-                           DOUBLE(XIN),
-                           DOUBLE(YIN),
-                           LOGICAL(FORWARD),
-                           DOUBLE(XOUT),
-                           DOUBLE(YOUT),
-                           INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NPOINT)
-   GENPTR_DOUBLE(XIN)
-   GENPTR_DOUBLE(YIN)
-   GENPTR_LOGICAL(FORWARD)
-   GENPTR_DOUBLE(XOUT)
-   GENPTR_DOUBLE(YOUT)
-
-   astAt( "AST_TRAN2", NULL, 0 );
-   astWatchSTATUS(
-      astTran2( astI2P( *THIS ), *NPOINT, XIN, YIN,
-                F77_ISTRUE( *FORWARD ), XOUT, YOUT );
-   )
-}
-
-F77_SUBROUTINE(ast_trangrid)( INTEGER(THIS),
-                              INTEGER(NCOORD_IN),
-                              INTEGER_ARRAY(LBND),
-                              INTEGER_ARRAY(UBND),
-                              DOUBLE(TOL),
-                              INTEGER(MAXPIX),
-                              LOGICAL(FORWARD),
-                              INTEGER(NCOORD_OUT),
-                              INTEGER(OUTDIM),
-                              DOUBLE_ARRAY(OUT),
-                              INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NCOORD_IN)
-   GENPTR_INTEGER_ARRAY(LBND)
-   GENPTR_INTEGER_ARRAY(UBND) 
-   GENPTR_DOUBLE(TOL)
-   GENPTR_INTEGER(MAXPIX)
-   GENPTR_LOGICAL(FORWARD)
-   GENPTR_INTEGER(NCOORD_OUT)
-   GENPTR_INTEGER(OUTDIM)
-   GENPTR_DOUBLE_ARRAY(OUT)
-
-   astAt( "AST_TRANGRID", NULL, 0 );
-   astWatchSTATUS(
-      astTranGrid( astI2P( *THIS ), *NCOORD_IN, LBND, UBND, *TOL, *MAXPIX,
-                   F77_ISTRUE( *FORWARD ), *NCOORD_OUT, *OUTDIM, OUT );
-   )
-}
-
-F77_SUBROUTINE(ast_trann)( INTEGER(THIS),
-                           INTEGER(NPOINT),
-                           INTEGER(NCOORD_IN),
-                           INTEGER(INDIM),
-                           DOUBLE_ARRAY(IN),
-                           LOGICAL(FORWARD),
-                           INTEGER(NCOORD_OUT),
-                           INTEGER(OUTDIM),
-                           DOUBLE_ARRAY(OUT),
-                           INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NPOINT)
-   GENPTR_INTEGER(NCOORD_IN)
-   GENPTR_INTEGER(INDIM)
-   GENPTR_DOUBLE_ARRAY(IN)
-   GENPTR_LOGICAL(FORWARD)
-   GENPTR_INTEGER(NCOORD_OUT)
-   GENPTR_INTEGER(OUTDIM)
-   GENPTR_DOUBLE_ARRAY(OUT)
-
-   astAt( "AST_TRANN", NULL, 0 );
-   astWatchSTATUS(
-      astTranN( astI2P( *THIS ), *NPOINT, *NCOORD_IN, *INDIM,
-                (const double *)IN, F77_ISTRUE( *FORWARD ),
-                *NCOORD_OUT, *OUTDIM, OUT );
-   )
-}
-
-F77_DOUBLE_FUNCTION(ast_rate)( INTEGER(THIS),
-                               DOUBLE_ARRAY(AT),
-                               INTEGER(AX1),
-                               INTEGER(AX2),
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(AX1)
-   GENPTR_INTEGER(AX2)
-   GENPTR_DOUBLE_ARRAY(AT)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_RATE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astRate( astI2P( *THIS ), AT, *AX1, *AX2 );
-   )
-   return RESULT;
-}
-
-
-F77_SUBROUTINE(ast_mapsplit)( INTEGER(THIS),
-                              INTEGER(NIN),
-                              INTEGER_ARRAY(IN),
-                              INTEGER_ARRAY(OUT),
-                              INTEGER(MAP),
-                              INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER_ARRAY(IN)
-   GENPTR_INTEGER_ARRAY(OUT)
-   GENPTR_INTEGER(MAP)
-   AstMapping *map;
-
-   astAt( "AST_MAPSPLIT", NULL, 0 );
-   astWatchSTATUS(
-      astMapSplit( astI2P( *THIS ), *NIN, IN, OUT, &map );
-      *MAP = astP2I( map );
-   )
-}
-
diff --git a/ast-5.3-1/fmathmap.c b/ast-5.3-1/fmathmap.c
deleted file mode 100644
index eb21043..0000000
--- a/ast-5.3-1/fmathmap.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-*+
-*  Name:
-*     fmathmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST MathMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the MathMap class.
-
-*  Routines Defined:
-*     AST_ISAMATHMAP
-*     AST_MATHMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     3-SEP-1999 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "mathmap.h"             /* C interface to the MathMap class */
-
-F77_LOGICAL_FUNCTION(ast_isamathmap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAMATHMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAMathMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_mathmap)( INTEGER(NIN),
-                                   INTEGER(NOUT),
-                                   INTEGER(NFWD),
-                                   CHARACTER_ARRAY(FWD),
-                                   INTEGER(NINV),
-                                   CHARACTER_ARRAY(INV),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(FWD)
-                                   TRAIL(INV)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER(NOUT)
-   GENPTR_INTEGER(NFWD)
-   GENPTR_CHARACTER_ARRAY(FWD)
-   GENPTR_INTEGER(NINV)
-   GENPTR_CHARACTER_ARRAY(INV)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char **fwd;
-   char **inv;
-   char *options;
-   int i;
-
-   astAt( "AST_MATHMAP", NULL, 0 );
-   astWatchSTATUS(
-      fwd = astStringArray( FWD, *NFWD, FWD_length );
-      inv = astStringArray( INV, *NINV, INV_length );
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astMathMap( *NIN, *NOUT,
-                                   *NFWD, (const char **) fwd,
-                                   *NINV, (const char **) inv,
-                                   "%s", options ) );
-      astFree( options );
-      astFree( inv );
-      astFree( fwd );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fmatrixmap.c b/ast-5.3-1/fmatrixmap.c
deleted file mode 100644
index fd33760..0000000
--- a/ast-5.3-1/fmatrixmap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-*  Name:
-*     fmatrixmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST MatrixMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the MatrixMap class.
-
-*  Routines Defined:
-*     AST_ISAMATRIXMAP
-*     AST_MATRIXMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     14-NOV-1996 (DSB):
-*        Original version.
-*     3-JUN-1997 (DSB):
-*        AST_MTRROT and AST_MTRMULT removed.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "matrixmap.h"           /* C interface to the MatrixMap class */
-
-F77_LOGICAL_FUNCTION(ast_isamatrixmap)( INTEGER(THIS),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAMATRIXMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAMatrixMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_matrixmap)( INTEGER(NIN),
-                                     INTEGER(NOUT),
-                                     INTEGER(FORM),
-                                     DOUBLE_ARRAY(MATRIX),
-                                     CHARACTER(OPTIONS),
-                                     INTEGER(STATUS)
-                                     TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER(NOUT)
-   GENPTR_INTEGER(FORM)
-   GENPTR_DOUBLE_ARRAY(MATRIX)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_MATRIXMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astMatrixMap( *NIN, *NOUT, *FORM, MATRIX,
-                                     "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fnormmap.c b/ast-5.3-1/fnormmap.c
deleted file mode 100644
index 2deafef..0000000
--- a/ast-5.3-1/fnormmap.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-*+
-*  Name:
-*     fnormmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST NormMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the NormMap class.
-
-*  Routines Defined:
-*     AST_ISANORMMAP
-*     AST_NORMMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S.Berry (Starlink)
-
-*  History:
-*     11-JUL-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "normmap.h"             /* C interface to the NormMap class */
-
-F77_LOGICAL_FUNCTION(ast_isanormmap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astWatchSTATUS(
-   astAt( "AST_ISANORMMAP", NULL, 0 );
-      RESULT = astIsANormMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_normmap)( INTEGER(FRAME),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_NORMMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astNormMap( astI2P( *FRAME ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fnullregion.c b/ast-5.3-1/fnullregion.c
deleted file mode 100644
index 9193bcc..0000000
--- a/ast-5.3-1/fnullregion.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-*  Name:
-*     fnullregion.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST NullRegion class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the NullRegion class.
-
-*  Routines Defined:
-*     AST_ISANULLREGION
-*     AST_NULLREGION
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     12-OCT-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "nullregion.h"          /* C interface to the NullRegion class */
-
-
-F77_LOGICAL_FUNCTION(ast_isanullregion)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISANULLREGION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsANullRegion( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_nullregion)( INTEGER(FRAME),
-                                      INTEGER(UNC),
-                                      CHARACTER(OPTIONS),
-                                      INTEGER(STATUS)
-                                      TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_NULLREGION", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astNullRegion( astI2P( *FRAME ), astI2P( *UNC ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fobject.c b/ast-5.3-1/fobject.c
deleted file mode 100644
index 1145426..0000000
--- a/ast-5.3-1/fobject.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
-*+
-*  Name:
-*     fobject.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Object class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Object class.
-
-*  Routines Defined:
-*     AST_ANNUL
-*     AST_BEGIN
-*     AST_CLEAR
-*     AST_CLONE
-*     AST_COPY
-*     AST_DELETE
-*     AST_END
-*     AST_ESCAPES
-*     AST_EXEMPT
-*     AST_EXPORT
-*     AST_GET(C,D,I,L,R)
-*     AST_ISAOBJECT
-*     AST_NULL
-*     AST_SET 
-*     AST_SET(C,D,I,L,R)
-*     AST_SHOW
-*     AST_VERSION 
-*     AST_LISTISSUED   (only if macro DEBUG is defined)
-*     AST_SETWATCHID   (only if macro DEBUG is defined)
-*     AST_TUNE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     20-JUN-1996 (RFWS):
-*        Original version.
-*     9-SEP-1996 (RFWS):
-*        Added AST_SHOW.
-*     11-DEC-1996 (RFWS):
-*        Added AST_NULL.
-*     14-JUL-1997 (RFWS):
-*        Add AST_EXEMPT function.
-*     30-APR-2003 (DSB):
-*        Add AST_VERSION function.
-*     7-FEB-2004 (DSB):
-*        Add AST_ESCAPES function.
-*     27-JAN-2005 (DSB):
-*        Added AST_LISTISSUED and AST_SETWATCHID so that DEBUG facilities
-*        can be used from fortran.
-*     7-FEB-2006 (DSB):
-*        Added AST_TUNE.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*-
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* AST headers */
-/* ----------- */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "object.h"              /* C interface to the Object class */
-
-F77_SUBROUTINE(ast_annul)( INTEGER(THIS),
-                           INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_ANNUL", NULL, 0 );
-   astWatchSTATUS(
-      *THIS = astP2I( astAnnul( astI2P( *THIS ) ) );
-   )
-}
-
-F77_SUBROUTINE(ast_begin)( INTEGER(STATUS) ) {
-
-   astAt( "AST_BEGIN", NULL, 0 );
-   astWatchSTATUS(
-      int dummy = *status; /* Avoid "unused variable 'status'" messages */
-      *status = dummy;   
-      astBegin;
-   )
-}
-
-F77_SUBROUTINE(ast_clear)( INTEGER(THIS),
-                           CHARACTER(ATTRIB),
-                           INTEGER(STATUS)
-                           TRAIL(ATTRIB) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(ATTRIB)
-   char *attrib;
-
-   astAt( "AST_CLEAR", NULL, 0 );
-   astWatchSTATUS(
-      attrib = astString( ATTRIB, ATTRIB_length );
-      astClear( astI2P( *THIS ), attrib );
-      astFree( attrib );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_clone)( INTEGER(THIS),
-                                 INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_CLONE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astClone( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_version)( ) {
-   int status_value = 0;
-   int *STATUS = &status_value;
-   int *status = &status_value;
-   astAt( "AST_VERSION", NULL, 0 );
-   return astVersion;
-}
-
-F77_INTEGER_FUNCTION(ast_escapes)( INTEGER(NEWVAL),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(NEWVAL)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_ESCAPES", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astEscapes( *NEWVAL );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_copy)( INTEGER(THIS),
-                                INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_COPY", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astCopy( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_delete)( INTEGER(THIS),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_DELETE", NULL, 0 );
-   astWatchSTATUS(
-      *THIS = astP2I( astDelete( astI2P( *THIS ) ) );
-   )
-}
-
-F77_SUBROUTINE(ast_end)( INTEGER(STATUS) ) {
-
-   astAt( "AST_END", NULL, 0 );
-   astWatchSTATUS(
-      astEnd;
-   )
-}
-
-F77_SUBROUTINE(ast_exempt)( INTEGER(THIS),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_EXEMPT", NULL, 0 );
-   astWatchSTATUS(
-      astExempt( astI2P( *THIS ) );
-   )
-}
-
-F77_SUBROUTINE(ast_export)( INTEGER(THIS),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_EXPORT", NULL, 0 );
-   astWatchSTATUS(
-      astExport( astI2P( *THIS ) );
-   )
-}
-
-#define MAKE_GETX(name,code,TYPE,CODE,type) \
-F77_##TYPE##_FUNCTION(ast_get##code)( INTEGER(THIS), \
-                                      CHARACTER(ATTRIB), \
-                                      INTEGER(STATUS) \
-                                      TRAIL(ATTRIB) ) { \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_CHARACTER(ATTRIB) \
-   F77_##TYPE##_TYPE(RESULT); \
-   char *attrib; \
-\
-   astAt( name, NULL, 0 ); \
-   astWatchSTATUS( \
-      attrib = astString( ATTRIB, ATTRIB_length ); \
-      RESULT = astGet##CODE( astI2P( *THIS ), attrib ); \
-      astFree( attrib ); \
-   ) \
-   return RESULT; \
-}
-
-MAKE_GETX("AST_GETD",d,DOUBLE,D,double)
-MAKE_GETX("AST_GETI",i,INTEGER,L,long)
-MAKE_GETX("AST_GETR",r,REAL,D,double)
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
-   character result doesn't work, so add an extra argument instead and
-   wrap this function up in a normal FORTRAN 77 function (in the file
-   object.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_getc_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_getc)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
-                          INTEGER(THIS),
-                          CHARACTER(ATTRIB),
-                          INTEGER(STATUS)
-#if NO_CHAR_FUNCTION
-                          TRAIL(RESULT)
-#endif
-                          TRAIL(ATTRIB) ) {
-   GENPTR_CHARACTER(RESULT)
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(ATTRIB)
-   char *attrib;
-   const char *result; 
-   int i;
-
-   astAt( "AST_GETC", NULL, 0 );
-   astWatchSTATUS(
-      attrib = astString( ATTRIB, ATTRIB_length );
-      result = astGetC( astI2P( *THIS ), attrib );
-      i = 0;
-      if ( astOK ) {             /* Copy result */
-         for ( ; result[ i ] && i < RESULT_length; i++ ) {
-            RESULT[ i ] = result[ i ];
-         }
-      }
-      while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
-      astFree( attrib );
-   )
-}
-
-F77_LOGICAL_FUNCTION(ast_getl)( INTEGER(THIS),
-                                CHARACTER(ATTRIB),
-                                INTEGER(STATUS)
-                                TRAIL(ATTRIB) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(ATTRIB)
-   F77_LOGICAL_TYPE(RESULT);
-   char *attrib;
-
-   astAt( "AST_GETL", NULL, 0 );
-   astWatchSTATUS(
-      attrib = astString( ATTRIB, ATTRIB_length );
-      RESULT = astGetL( astI2P( *THIS ), attrib ) ? F77_TRUE : F77_FALSE;
-      astFree( attrib );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaobject)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAOBJECT", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAObject( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_null)( void ) {}
-
-/* Omit the C variable length argument list here. */
-F77_SUBROUTINE(ast_set)( INTEGER(THIS),
-                         CHARACTER(SETTING),
-                         INTEGER(STATUS)
-                         TRAIL(SETTING) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(SETTING)
-   char *setting;
-   int i;
-
-   astAt( "AST_SET", NULL, 0 );
-   astWatchSTATUS(
-      setting = astString( SETTING, SETTING_length );
-
-/* Change ',' to '\n' (which is what astSet normally does to its second
-   argument internally to separate the fields). This then allows "setting"
-   to be provided as an additional string value to be formatted using "%s".
-   This avoids interpretation of its contents (e.g. '%') as C format
-   specifiers. */
-      if ( astOK ) {
-         for ( i = 0; setting[ i ]; i++ ) {
-            if ( setting[ i ] == ',' ) setting[ i ] = '\n';
-         }
-      }
-      astSet( astI2P( *THIS ), "%s", setting );
-      astFree( setting );
-   )
-}
-
-#define MAKE_SETX(name,code,TYPE,CODE,type) \
-F77_SUBROUTINE(ast_set##code)( INTEGER(THIS), \
-                               CHARACTER(ATTRIB), \
-                               TYPE(VALUE), \
-                               INTEGER(STATUS) \
-                               TRAIL(ATTRIB) ) { \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_CHARACTER(ATTRIB) \
-   GENPTR_##TYPE(VALUE) \
-   char *attrib; \
-\
-   astAt( name, NULL, 0 ); \
-   astWatchSTATUS( \
-      attrib = astString( ATTRIB, ATTRIB_length ); \
-      astSet##CODE( astI2P( *THIS ), attrib, *VALUE ); \
-      astFree( attrib ); \
-   ) \
-}
-
-MAKE_SETX("AST_SETD",d,DOUBLE,D,double)
-MAKE_SETX("AST_SETR",r,REAL,D,double)
-MAKE_SETX("AST_SETI",i,INTEGER,L,long)
-
-F77_SUBROUTINE(ast_setc)( INTEGER(THIS),
-                          CHARACTER(ATTRIB),
-                          CHARACTER(VALUE),
-                          INTEGER(STATUS)
-                          TRAIL(ATTRIB)
-                          TRAIL(VALUE) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(ATTRIB)
-   GENPTR_CHARACTER(VALUE)
-   char *attrib, *value;
-
-   astAt( "AST_SETC", NULL, 0 );
-   astWatchSTATUS(
-      attrib = astString( ATTRIB, ATTRIB_length );
-      value = astString( VALUE, VALUE_length );
-      astSetC( astI2P( *THIS ), attrib, value );
-      astFree( attrib );
-      astFree( value );
-   )
-}
-
-F77_SUBROUTINE(ast_setl)( INTEGER(THIS),
-                          CHARACTER(ATTRIB),
-                          LOGICAL(VALUE),
-                          INTEGER(STATUS)
-                          TRAIL(ATTRIB) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(ATTRIB)
-   GENPTR_LOGICAL(VALUE)
-   char *attrib;
-
-   astAt( "AST_SETL", NULL, 0 );
-   astWatchSTATUS(
-      attrib = astString( ATTRIB, ATTRIB_length );
-      astSetI( astI2P( *THIS ), attrib, F77_ISTRUE( *VALUE ) ? 1 : 0 );
-      astFree( attrib );
-   )
-}
-
-F77_SUBROUTINE(ast_show)( INTEGER(THIS),
-                          INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_SHOW", NULL, 0 );
-   astWatchSTATUS(
-      astShow( astI2P( *THIS ) );
-   )
-}
-
-F77_LOGICAL_FUNCTION(ast_test)( INTEGER(THIS),
-                                CHARACTER(ATTRIB),
-                                INTEGER(STATUS)
-                                TRAIL(ATTRIB) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(ATTRIB)
-   F77_LOGICAL_TYPE(RESULT);
-   char *attrib;
-
-   astAt( "AST_TEST", NULL, 0 );
-   astWatchSTATUS(
-      attrib = astString( ATTRIB, ATTRIB_length );
-      RESULT = astTest( astI2P( *THIS ), attrib ) ? F77_TRUE : F77_FALSE;
-      astFree( attrib );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_same)( INTEGER(THIS),
-                                INTEGER(THAT),
-                                INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(THAT)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_SAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astSame( astI2P( *THIS ), astI2P( *THAT ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-
-#ifdef MEM_DEBUG
-
-F77_SUBROUTINE(ast_beginpm)( void ) {
-   int status = 0;
-   astBeginPM_( &status );
-}
-
-F77_SUBROUTINE(ast_endpm)( void ) {
-   int status = 0;
-   astEndPM_( &status );
-}
-
-F77_SUBROUTINE(ast_activememory)( CHARACTER(TEXT)
-                                  TRAIL(TEXT) ) {
-   GENPTR_CHARACTER(TEXT)
-   char *text;
-   int status_value;
-   int *status = &status_value;
-   *status = 0;
-   astBeginPM;
-   text = astString( TEXT, TEXT_length );
-   astEndPM;
-   astActiveMemory( text );
-   astFree( text );
-}
-
-F77_SUBROUTINE(ast_watchmemory)( INTEGER(ID) ) {
-   GENPTR_INTEGER(ID)
-   astWatchMemory( *ID );
-}
-
-F77_SUBROUTINE(ast_flushmemory)( INTEGER(LEAK) ) {
-   GENPTR_INTEGER(LEAK)
-   int status = 0;
-   astFlushMemory_( *LEAK, &status );
-}
-
-#else
-
-F77_SUBROUTINE(ast_activememory)( CHARACTER(TEXT)
-                                  TRAIL(TEXT) ) {
-   GENPTR_CHARACTER(TEXT)
-}
-
-F77_SUBROUTINE(ast_watchmemory)( INTEGER(ID) ) {
-   GENPTR_INTEGER(ID)
-}
-
-F77_SUBROUTINE(ast_flushmemory)( INTEGER(LEAK) ) {
-   GENPTR_INTEGER(LEAK)
-}
-
-F77_SUBROUTINE(ast_beginpm)( void ) {
-}
-
-F77_SUBROUTINE(ast_endpm)( void ) {
-}
-
-
-
-
-#endif
-
-
-F77_INTEGER_FUNCTION(ast_tune)( CHARACTER(NAME),
-                                INTEGER(VALUE),
-                                INTEGER(STATUS) 
-                                TRAIL(NAME) ) {
-   GENPTR_INTEGER(VALUE)
-   GENPTR_CHARACTER(NAME)
-   F77_INTEGER_TYPE(RESULT);
-   char *name;
-
-   astAt( "AST_TUNE", NULL, 0 );
-   astWatchSTATUS(
-      name = astString( NAME, NAME_length );
-      RESULT = astTune( name, *VALUE );
-      name = astFree( name );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_chrsub)( CHARACTER(TEST),
-                                  CHARACTER(PATTERN),
-                                  CHARACTER(RESULT),
-                                  INTEGER(STATUS)
-                                  TRAIL(TEST) 
-                                  TRAIL(PATTERN)
-                                  TRAIL(RESULT) ) {
-   GENPTR_CHARACTER(TEST)
-   GENPTR_CHARACTER(PATTERN)
-   GENPTR_CHARACTER(RESULT)
-   F77_LOGICAL_TYPE(MATCH);
-
-   char *test, *pattern, *result; 
-   int i;
-
-   astAt( "AST_CHRSUB", NULL, 0 );
-   astWatchSTATUS(
-      test = astString( TEST, TEST_length );
-      pattern = astString( PATTERN, PATTERN_length );
-
-      if( pattern ) {
-         test[ astChrLen( test ) ] = 0;
-         pattern[ astChrLen( pattern ) ] = 0;
-      }
-
-      result = astChrSub( test, pattern, NULL, 0 );
-
-      i = 0;
-      if( result ) {
-         MATCH = F77_TRUE;
-         for ( ; result[ i ] && i < RESULT_length; i++ ) {
-            RESULT[ i ] = result[ i ];
-         }
-         result = astFree( result );
-      } else {
-         MATCH = F77_FALSE;
-      }
-      while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
-
-      test = astFree( test );
-      pattern = astFree( pattern );
-   )
-   return MATCH;
-}
-
-
-F77_LOGICAL_FUNCTION(ast_equal)( INTEGER(THIS),
-                                 INTEGER(THAT),
-                                 INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(THAT)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_EQUAL", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astEqual( astI2P( *THIS ), astI2P( *THAT ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-
-
diff --git a/ast-5.3-1/fpcdmap.c b/ast-5.3-1/fpcdmap.c
deleted file mode 100644
index 9fd5659..0000000
--- a/ast-5.3-1/fpcdmap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-*+
-*  Name:
-*     fpcdmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST PcdMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the PcdMap class.
-
-*  Routines Defined:
-*     AST_ISAPCDMAP
-*     AST_PCDMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     19-MAY-1999 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "pcdmap.h"              /* C interface to the PcdMap class */
-
-F77_LOGICAL_FUNCTION(ast_isapcdmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPCDMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPcdMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_pcdmap)( DOUBLE(DISCO),
-                                  DOUBLE_ARRAY(PCDCEN),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_DOUBLE(DISCO)
-   GENPTR_DOUBLE_ARRAY(PCDCEN)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_PCDMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astPcdMap( *DISCO, PCDCEN, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fpermmap.c b/ast-5.3-1/fpermmap.c
deleted file mode 100644
index a7a3d49..0000000
--- a/ast-5.3-1/fpermmap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-*  Name:
-*     fpermmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST PermMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the PermMap class.
-
-*  Routines Defined:
-*     AST_ISAPERMMAP
-*     AST_PERMMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     26-SEP-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "permmap.h"             /* C interface to the PermMap class */
-
-F77_LOGICAL_FUNCTION(ast_isapermmap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPERMMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPermMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_permmap)( INTEGER(NIN),
-                                   INTEGER_ARRAY(INPERM),
-                                   INTEGER(NOUT),
-                                   INTEGER_ARRAY(OUTPERM),
-                                   DOUBLE_ARRAY(CONSTANT),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER_ARRAY(INPERM)
-   GENPTR_INTEGER(NOUT)
-   GENPTR_INTEGER_ARRAY(OUTPERM)
-   GENPTR_DOUBLE_ARRAY(CONSTANT)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_PERMMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astPermMap( *NIN, INPERM, *NOUT, OUTPERM, CONSTANT,
-                                   "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fplot.c b/ast-5.3-1/fplot.c
deleted file mode 100644
index 912655b..0000000
--- a/ast-5.3-1/fplot.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
-*+
-*  Name:
-*     fplot.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Plot class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Plot class.
-
-*  Routines Defined:
-*     AST_BORDER
-*     AST_BOUNDINGBOX
-*     AST_CLIP
-*     AST_CURVE
-*     AST_GENCURVE
-*     AST_GRID
-*     AST_GRIDLINE
-*     AST_ISAPLOT
-*     AST_MARK
-*     AST_PLOT
-*     AST_POLYCURVE
-*     AST_TEXT   
-*     AST_GRFSET
-*     AST_GRFPUSH
-*     AST_GRFPOP
-*     AST_STRIPESCAPES
-*     AST_GETGRFCONTEXT
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     23-OCT-1996 (DSB):
-*        Original version.
-*     14-NOV-1996 (DSB):
-*        Method names shortened. CrvBreak removed.
-*     21-NOV-1996 (DSB):
-*        Method names changed, CLIP argument NBND removed.
-*     18-DEC-1996 (DSB):
-*        Argument UP changed to single precision and NCOORD removed 
-*        in AST_TEXT.
-*     11-AUG-1998 (DSB):
-*        Added AST_POLYCURVE.
-*     9-JAN-2001 (DSB):
-*        Change argument "in" for astMark and astPolyCurve from type
-*        "const double (*)[]" to "const double *".
-*     13-JUN-2001 (DSB):
-*        Modified to add support for astGenCurve, astGrfSet, astGrfPop, 
-*        astGrfPush and EXTERNAL grf functions.
-*     14-AUG-2002 (DSB):
-*        Added AST_BOUNDINGBOX.
-*     8-JAN-2003 (DSB):
-*        Include "string.h".
-*     10-JUL-2006 (DSB):
-*        Add AST_STRIPESCAPES
-*     21-JUN-2007 (DSB):
-*        - Avoid use of protected astGetGrfContext function.
-*        - Change data type of GrfContext from integer to AST Object pointer.
-*     29-JUN-2007 (DSB):
-*        Added astGetGrfCOntext and removed astSetGrfContext.
-*     30-AUG-2007 (DSB):
-*        Use astGrfConID to get the identifier for the graphics context
-*        KeyMap.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-#define MXSTRLEN 80              /* String length at which truncation starts
-                                    within pgqtxt and pgptxt. */
-/* Header files. */
-/* ============= */
-#include "string.h"              
-#include "ast_err.h"             /* AST error codes */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "plot.h"                /* C interface to the Plot class */
-#include "grf.h"                 /* Low-level graphics interface */
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in
-fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-static int FGAttrWrapper( AstPlot *, int, double, double *, int );
-static int FGFlushWrapper( AstPlot * );
-static int FGLineWrapper( AstPlot *, int, const float *, const float * );
-static int FGMarkWrapper( AstPlot *, int, const float *, const float *, int );
-static int FGTextWrapper( AstPlot *, const char *, float, float, const char *, float, float );
-static int FGTxExtWrapper( AstPlot *, const char *, float, float, const char *, float, float, float *, float * );
-static int FGCapWrapper( AstPlot *, int, int );
-static int FGQchWrapper( AstPlot *, float *, float * );
-static int FGScalesWrapper( AstPlot *, float *, float * );
-
-F77_LOGICAL_FUNCTION(ast_isaplot)( INTEGER(THIS),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPLOT", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPlot( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_plot)( INTEGER(FRAME),
-                                REAL_ARRAY(GRAPHBOX),
-                                DOUBLE_ARRAY(BASEBOX),
-                                CHARACTER(OPTIONS),
-                                INTEGER(STATUS)
-                                TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_REAL_ARRAY(GRAPHBOX)
-   GENPTR_DOUBLE_ARRAY(BASEBOX)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_PLOT", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astPlot( astI2P( *FRAME ), GRAPHBOX, BASEBOX, 
-                                "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_border)( INTEGER(THIS),
-                                  INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_BORDER", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astBorder( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_boundingbox)( INTEGER(THIS),
-                          REAL_ARRAY(LBND),
-                          REAL_ARRAY(UBND),
-                          INTEGER(STATUS) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_REAL_ARRAY(LBND)
-   GENPTR_REAL_ARRAY(UBND)
-
-   astAt( "AST_BOUNDINGBOX", NULL, 0 );
-   astWatchSTATUS(
-      astBoundingBox( astI2P( *THIS ), LBND, UBND );
-   )
-}
-
-F77_SUBROUTINE(ast_clip)( INTEGER(THIS),
-                          INTEGER(IFRAME),
-                          DOUBLE_ARRAY(LBND),
-                          DOUBLE_ARRAY(UBND),
-                          INTEGER(STATUS) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(IFRAME)
-   GENPTR_DOUBLE_ARRAY(LBND)
-   GENPTR_DOUBLE_ARRAY(UBND)
-
-   astAt( "AST_CLIP", NULL, 0 );
-   astWatchSTATUS(
-      astClip( astI2P( *THIS ), *IFRAME, LBND, UBND );
-   )
-}
-
-F77_SUBROUTINE(ast_gridline)( INTEGER(THIS),
-                              INTEGER(AXIS),
-                              DOUBLE_ARRAY(START),
-                              DOUBLE(LENGTH),
-                              INTEGER(STATUS) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(AXIS)
-   GENPTR_DOUBLE_ARRAY(START)
-   GENPTR_DOUBLE(LENGTH)
-
-   astAt( "AST_GRIDLINE", NULL, 0 );
-   astWatchSTATUS(
-      astGridLine( astI2P( *THIS ), *AXIS, START, *LENGTH );
-   )
-}
-
-F77_SUBROUTINE(ast_curve)( INTEGER(THIS),
-                           DOUBLE_ARRAY(START),
-                           DOUBLE_ARRAY(FINISH),
-                           INTEGER(STATUS) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE_ARRAY(START)
-   GENPTR_DOUBLE_ARRAY(FINISH)
-
-   astAt( "AST_CURVE", NULL, 0 );
-   astWatchSTATUS(
-      astCurve( astI2P( *THIS ), START, FINISH );
-   )
-}
-
-F77_SUBROUTINE(ast_grid)( INTEGER(THIS),
-                          INTEGER(STATUS) ){
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_GRID", NULL, 0 );
-   astWatchSTATUS(
-      astGrid( astI2P( *THIS ) );
-   )
-}
-
-F77_SUBROUTINE(ast_mark)( INTEGER(THIS),
-                          INTEGER(NMARK),
-                          INTEGER(NCOORD),
-                          INTEGER(INDIM),
-                          DOUBLE_ARRAY(IN),
-                          INTEGER(TYPE),
-                          INTEGER(STATUS) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NMARK)
-   GENPTR_INTEGER(NCOORD)
-   GENPTR_INTEGER(INDIM)
-   GENPTR_DOUBLE_ARRAY(IN)
-   GENPTR_INTEGER(TYPE)
-
-   astAt( "AST_MARK", NULL, 0 );
-   astWatchSTATUS(
-      astMark( astI2P( *THIS ), *NMARK, *NCOORD, *INDIM,
-               (const double *)IN, *TYPE );
-   )
-}
-
-F77_SUBROUTINE(ast_polycurve)( INTEGER(THIS),
-                               INTEGER(NPOINT),
-                               INTEGER(NCOORD),
-                               INTEGER(INDIM),
-                               DOUBLE_ARRAY(IN),
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(NPOINT)
-   GENPTR_INTEGER(NCOORD)
-   GENPTR_INTEGER(INDIM)
-   GENPTR_DOUBLE_ARRAY(IN)
-
-   astAt( "AST_POLYCURVE", NULL, 0 );
-   astWatchSTATUS(
-      astPolyCurve( astI2P( *THIS ), *NPOINT, *NCOORD, *INDIM,
-                (const double *)IN );
-   )
-}
-
-F77_SUBROUTINE(ast_gencurve)( INTEGER(THIS),
-                              INTEGER(MAP),
-                              INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(MAP)
-
-   astAt( "AST_GENCURVE", NULL, 0 );
-   astWatchSTATUS(
-      astGenCurve( astI2P( *THIS ), astI2P( *MAP ) );
-   )
-}
-
-F77_SUBROUTINE(ast_text)( INTEGER(THIS),
-                          CHARACTER(TEXT), 
-                          DOUBLE_ARRAY(POS),
-                          REAL_ARRAY(UP),
-                          CHARACTER(JUST),
-                          INTEGER(STATUS)
-                          TRAIL(TEXT)
-                          TRAIL(JUST) ){
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(TEXT)
-   GENPTR_DOUBLE_ARRAY(POS)
-   GENPTR_REAL_ARRAY(UP)
-   GENPTR_CHARACTER(JUST) 
-   char *text, *just;
-
-   astAt( "AST_TEXT", NULL, 0 );
-   astWatchSTATUS(
-      text = astString( TEXT, TEXT_length );
-      just = astString( JUST, JUST_length );
-      astText( astI2P( *THIS ), text, POS, UP, just );
-      (void) astFree( (void *) text );
-      (void) astFree( (void *) just );
-   )
-}
-
-F77_SUBROUTINE(ast_grfpush)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   astAt( "AST_GRFPUSH", NULL, 0 );
-   astWatchSTATUS(
-      astGrfPush( astI2P( *THIS ) );
-   )
-}
-
-F77_SUBROUTINE(ast_grfpop)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   astAt( "AST_GRFPOP", NULL, 0 );
-   astWatchSTATUS(
-      astGrfPop( astI2P( *THIS ) );
-   )
-}
-
-F77_SUBROUTINE(ast_grfset)( INTEGER(THIS), CHARACTER(NAME), 
-                               AstGrfFun FUN, INTEGER(STATUS)
-                               TRAIL(NAME) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(NAME)
-   char *name;
-   AstGrfFun fun;
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   int ifun;               /* Index into grf function list */
-   AstGrfWrap wrapper;     /* Wrapper function for C Grf routine*/
-
-   method = "AST_GRFSET";
-   class = "Plot";
-
-   astAt( method, NULL, 0 );
-   astWatchSTATUS(
-
-/* Set the function pointer to NULL if a pointer to
-   the null routine AST_NULL has been supplied. */
-      fun = FUN;
-      if ( fun == (AstGrfFun) F77_EXTERNAL_NAME(ast_null) ) {
-         fun = NULL;
-      }
-
-      name = astString( NAME, NAME_length );
-      astGrfSet( astI2P( *THIS ), name, fun );
-
-      ifun = astGrfFunID( name, method, class );
-
-      if( ifun == AST__GATTR ) {
-         wrapper = (AstGrfWrap) FGAttrWrapper;
-
-      } else if( ifun == AST__GFLUSH ) {
-         wrapper = (AstGrfWrap) FGFlushWrapper;
-
-      } else if( ifun == AST__GLINE ) {
-         wrapper = (AstGrfWrap) FGLineWrapper;
-
-      } else if( ifun == AST__GMARK ) {
-         wrapper = (AstGrfWrap) FGMarkWrapper;
-
-      } else if( ifun == AST__GTEXT ) {
-         wrapper = (AstGrfWrap) FGTextWrapper;
-
-      } else if( ifun == AST__GCAP ) {
-         wrapper = (AstGrfWrap) FGCapWrapper;
-
-      } else if( ifun == AST__GTXEXT ) {
-         wrapper = (AstGrfWrap) FGTxExtWrapper;
-
-      } else if( ifun == AST__GQCH ) {
-         wrapper = (AstGrfWrap) FGQchWrapper;
-
-      } else if( ifun == AST__GSCALES ) {
-         wrapper = (AstGrfWrap) FGScalesWrapper;
-
-      } else {
-         wrapper = (AstGrfWrap) FGFlushWrapper;
-         if( astOK ) astError( AST__INTER, "%s(%s): AST internal programming "
-                   "error - Grf function id %d not yet supported.", status, 
-                   method, class, ifun );
-      }
-      astGrfWrapper( astI2P( *THIS ), name, wrapper );
-   )
-}
-
-static int FGAttrWrapper( AstPlot *this, int attr, double value, 
-                          double *old_value, int prim ) {
-   DECLARE_DOUBLE(OLDVAL);
-   int ret;
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-
-   if ( !astOK ) return 0;
-
-   GRFCON = astP2I( astGrfConID( this ) );
-   ret = ( *(int (*)( INTEGER(grfcon), INTEGER(attr), DOUBLE(value), 
-                      DOUBLE(old_value), INTEGER(prim) ))
-                  this->grffun[ AST__GATTR ])(  INTEGER_ARG(&GRFCON),
-                                                INTEGER_ARG(&attr),
-                                                DOUBLE_ARG(&value), 
-                                                DOUBLE_ARG(&OLDVAL),  
-                                                INTEGER_ARG(&prim) );
-   if( old_value ) *old_value = OLDVAL;
-   return ret;
-}
-
-static int FGFlushWrapper( AstPlot *this ) {
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-   return ( *(int (*)(INTEGER(grfcon))) this->grffun[ AST__GFLUSH ])(INTEGER_ARG(&GRFCON));
-}
-
-static int FGLineWrapper( AstPlot *this, int n, const float *x, 
-                          const float *y ) {
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-   return ( *(int (*)( INTEGER(grfcon), INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y) ))
-                  this->grffun[ AST__GLINE ])(  INTEGER_ARG(&GRFCON),
-                                                INTEGER_ARG(&n),
-                                                REAL_ARRAY_ARG(x), 
-                                                REAL_ARRAY_ARG(y) );
-}
-
-static int FGMarkWrapper( AstPlot *this, int n, const float *x, 
-                          const float *y, int type ) {
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-   return ( *(int (*)( INTEGER(grfcon), INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y),
-                       INTEGER(type) ))
-                  this->grffun[ AST__GMARK ])(  INTEGER_ARG(&GRFCON),
-                                                INTEGER_ARG(&n),
-                                                REAL_ARRAY_ARG(x), 
-                                                REAL_ARRAY_ARG(y),
-                                                INTEGER_ARG(&type) );
-}
-
-static int FGTextWrapper( AstPlot *this, const char *text, float x, float y,
-                          const char *just, float upx, float upy ) {
-
-   DECLARE_CHARACTER(LTEXT,MXSTRLEN);
-   DECLARE_CHARACTER(LJUST,MXSTRLEN);
-   int ftext_length;
-   int fjust_length;
-
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-
-   ftext_length = strlen( text );
-   if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
-   astStringExport( text, LTEXT, ftext_length );
-
-   fjust_length = strlen( just );
-   if( fjust_length > LJUST_length ) fjust_length = LJUST_length;
-   astStringExport( just, LJUST, fjust_length );
-
-   return ( *(int (*)( INTEGER(grfcon), CHARACTER(LTEXT), REAL(x), REAL(y),
-                       CHARACTER(LJUST), REAL(upx), REAL(upy)
-                       TRAIL(ftext) TRAIL(fjust) ) )
-                  this->grffun[ AST__GTEXT ])( 
-                                      INTEGER_ARG(&GRFCON),
-                                      CHARACTER_ARG(LTEXT),
-                                      REAL_ARG(&x),
-                                      REAL_ARG(&y), 
-                                      CHARACTER_ARG(LJUST),
-                                      REAL_ARG(&upx), 
-                                      REAL_ARG(&upy) 
-                                      TRAIL_ARG(ftext) 
-                                      TRAIL_ARG(fjust) );
-}
-
-static int FGCapWrapper( AstPlot *this, int cap, int value ) {
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-   return ( *(int (*)( INTEGER(grfcon), INTEGER(cap), INTEGER(value) ) )
-                  this->grffun[ AST__GCAP ])( 
-                                      INTEGER_ARG(&GRFCON),
-                                      INTEGER_ARG(&cap),
-                                      INTEGER_ARG(&value) );
-}
-
-static int FGTxExtWrapper( AstPlot *this, const char *text, float x, float y,
-                           const char *just, float upx, float upy, float *xb, 
-                           float *yb ) {
-   DECLARE_CHARACTER(LTEXT,MXSTRLEN);
-   DECLARE_CHARACTER(LJUST,MXSTRLEN);
-   int ftext_length;
-   int fjust_length;
-
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-
-   ftext_length = strlen( text );
-   if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
-   astStringExport( text, LTEXT, ftext_length );
-
-   fjust_length = strlen( just );
-   if( fjust_length > LJUST_length ) fjust_length = LJUST_length;
-   astStringExport( just, LJUST, fjust_length );
-
-   return ( *(int (*)( INTEGER(grfcon), CHARACTER(LTEXT), REAL(x), REAL(y),
-                       CHARACTER(LJUST), REAL(upx), REAL(upy),
-                       REAL_ARRAY(xb), REAL_ARRAY(yb) TRAIL(ftext) 
-                       TRAIL(fjust) ) )
-                  this->grffun[ AST__GTXEXT ])( 
-                                                INTEGER_ARG(&GRFCON),
-                                                CHARACTER_ARG(LTEXT),
-                                                REAL_ARG(&x),
-                                                REAL_ARG(&y), 
-                                                CHARACTER_ARG(LJUST),
-                                                REAL_ARG(&upx), 
-                                                REAL_ARG(&upy),
-                                                REAL_ARRAY_ARG(xb),
-                                                REAL_ARRAY_ARG(yb)
-                                                TRAIL_ARG(ftext) 
-                                                TRAIL_ARG(fjust) );
-}
-
-static int FGQchWrapper( AstPlot *this, float *chv, float *chh ) {
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-   return ( *(int (*)( INTEGER(grfcon), REAL(chv), REAL(chh) ) )
-                  this->grffun[ AST__GQCH ])( INTEGER_ARG(&GRFCON), REAL_ARG(chv), REAL_ARG(chh) );
-}
-
-static int FGScalesWrapper( AstPlot *this, float *alpha, float *beta ) {
-   F77_INTEGER_TYPE(GRFCON);
-   int *status = astGetStatusPtr;
-   if ( !astOK ) return 0;
-   GRFCON = astP2I( astGrfConID( this ) );
-   return ( *(int (*)( INTEGER(grfcon), REAL(alpha), REAL(beta) ) )
-                  this->grffun[ AST__GSCALES ])( INTEGER_ARG(&GRFCON), REAL_ARG(alpha), REAL_ARG(beta) );
-}
-
-
-/* NO_CHAR_FUNCTION indicates that the f77.h method of returning a
-   character result doesn't work, so add an extra argument instead and
-   wrap this function up in a normal FORTRAN 77 function (in the file
-   plot.f). */
-#if NO_CHAR_FUNCTION
-F77_SUBROUTINE(ast_stripescapes_a)( CHARACTER(RESULT),
-#else
-F77_SUBROUTINE(ast_stripescapes)( CHARACTER_RETURN_VALUE(RESULT),
-#endif
-                          CHARACTER(TEXT),
-                          INTEGER(STATUS)
-#if NO_CHAR_FUNCTION
-                          TRAIL(RESULT)
-#endif
-                          TRAIL(TEXT) ) {
-   GENPTR_CHARACTER(RESULT)
-   GENPTR_CHARACTER(TEXT)
-   char *text;
-   const char *result; 
-   int i;
-
-   astAt( "AST_STRIPESCAPES", NULL, 0 );
-   astWatchSTATUS(
-      text = astString( TEXT, TEXT_length );
-      result = astStripEscapes( text );
-      i = 0;
-      if ( astOK ) {             /* Copy result */
-         for ( ; result[ i ] && i < RESULT_length; i++ ) {
-            RESULT[ i ] = result[ i ];
-         }
-      }
-      while ( i < RESULT_length ) RESULT[ i++ ] = ' '; /* Pad with blanks */
-      astFree( text );
-   )
-}
-
-F77_LOGICAL_FUNCTION(ast_getgrfcontext)( INTEGER(THIS),
-                                         INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETGRFCONTEXT", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetGrfContext( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-
-
-
diff --git a/ast-5.3-1/fplot3d.c b/ast-5.3-1/fplot3d.c
deleted file mode 100644
index effc64b..0000000
--- a/ast-5.3-1/fplot3d.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-*+
-*  Name:
-*     fplot3d.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Plot3D class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Plot3D class.
-
-*  Routines Defined:
-*     AST_ISAPLOT3D
-*     AST_PLOT3D
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     6-JUN-2007 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "plot3d.h"           /* C interface to the Plot3D class */
-
-F77_LOGICAL_FUNCTION(ast_isaplot3d)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPLOT3D", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPlot3D( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_plot3d)( INTEGER(FRAME),
-                                REAL_ARRAY(GRAPHBOX),
-                                DOUBLE_ARRAY(BASEBOX),
-                                CHARACTER(OPTIONS),
-                                INTEGER(STATUS)
-                                TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_REAL_ARRAY(GRAPHBOX)
-   GENPTR_DOUBLE_ARRAY(BASEBOX)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_PLOT3D", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astPlot3D( astI2P( *FRAME ), GRAPHBOX, BASEBOX, 
-                                "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
diff --git a/ast-5.3-1/fpointlist.c b/ast-5.3-1/fpointlist.c
deleted file mode 100644
index c20878d..0000000
--- a/ast-5.3-1/fpointlist.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-*  Name:
-*     fpointlist.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST PointList class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the PointList class.
-
-*  Routines Defined:
-*     AST_ISAPOINTLIST
-*     AST_POINTLIST
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-AUG-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "pointlist.h"           /* C interface to the PointList class */
-
-F77_LOGICAL_FUNCTION(ast_isapointlist)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPOINTLIST", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPointList( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_pointlist)( INTEGER(FRAME),
-                                     INTEGER(NPNT),
-                                     INTEGER(COORD),
-                                     INTEGER(INDIM),
-                                     DOUBLE_ARRAY(POINTS),
-                                     INTEGER(UNC),
-                                     CHARACTER(OPTIONS),
-                                     INTEGER(STATUS)
-                                     TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_INTEGER(NPNT)
-   GENPTR_INTEGER(COORD)
-   GENPTR_INTEGER(INDIM)
-   GENPTR_DOUBLE_ARRAY(POINTS)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_POINTLIST", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astPointList( astI2P( *FRAME ), *NPNT, *COORD,
-                                     *INDIM, POINTS, astI2P( *UNC ), "%s", 
-                                     options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-
-
-
diff --git a/ast-5.3-1/fpolygon.c b/ast-5.3-1/fpolygon.c
deleted file mode 100644
index 5cbcab8..0000000
--- a/ast-5.3-1/fpolygon.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-*+
-*  Name:
-*     fpolygon.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Polygon class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Polygon class.
-
-*  Routines Defined:
-*     AST_ISAPOLYGON
-*     AST_POLYGON
-*     AST_DOWNSIZE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     27-OCT-2004 (DSB):
-*        Original version.
-*     28-MAY-2009 (DSB):
-*        Added AST_DOWNSIZE.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "polygon.h"             /* C interface to the Polygon class */
-
-F77_LOGICAL_FUNCTION(ast_isapolygon)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPOLYGON", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPolygon( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_polygon)( INTEGER(FRAME),
-                                   INTEGER(NPNT),
-                                   INTEGER(INDIM),
-                                   DOUBLE_ARRAY(POINTS),
-                                   INTEGER(UNC),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME)
-   GENPTR_INTEGER(NPNT)
-   GENPTR_INTEGER(INDIM)
-   GENPTR_DOUBLE_ARRAY(POINTS)
-   GENPTR_INTEGER(UNC)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_POLYGON", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astPolygon( astI2P( *FRAME ), *NPNT, *INDIM, POINTS, 
-                                   astI2P( *UNC ), "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_downsize)( INTEGER(THIS),
-                                    DOUBLE(MAXERR),
-                                    INTEGER(MAXVERT),
-                                    INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE(MAXERR)
-   GENPTR_INTEGER(MAXVERT)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_DOWNSIZE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astDownsize( astI2P( *THIS ), *MAXERR, *MAXVERT ) );
-   )
-   return RESULT;
-}
-
-
-/* AST_OUTLINE<X> requires a function for each possible data type, so
-   define it via a macro. */
-#define MAKE_AST_OUTLINE(f,F,Ftype,X,Xtype) \
-F77_INTEGER_FUNCTION(ast_outline##f)( Ftype(VALUE), \
-                                      INTEGER(OPER), \
-                                      Ftype##_ARRAY(ARRAY), \
-                                      INTEGER_ARRAY(LBND), \
-                                      INTEGER_ARRAY(UBND), \
-                                      DOUBLE(MAXERR), \
-                                      INTEGER(MAXVERT), \
-                                      INTEGER_ARRAY(INSIDE), \
-                                      LOGICAL(STARPIX), \
-                                      INTEGER(STATUS) ) { \
-   GENPTR_##Ftype(VALUE) \
-   GENPTR_INTEGER(OPER) \
-   GENPTR_##Ftype##_ARRAY(ARRAY) \
-   GENPTR_INTEGER_ARRAY(LBND) \
-   GENPTR_INTEGER_ARRAY(UBND) \
-   GENPTR_DOUBLE(MAXERR) \
-   GENPTR_INTEGER(MAXVERT) \
-   GENPTR_INTEGER_ARRAY(INSIDE) \
-   GENPTR_LOGICAL(STARPIX) \
-   GENPTR_INTEGER(STATUS) \
-\
-   F77_INTEGER_TYPE RESULT; \
-\
-   astAt( "AST_OUTLINE"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-      RESULT = astP2I( astOutline##X( *VALUE, *OPER, (Xtype *) ARRAY, LBND, \
-                                       UBND, *MAXERR, *MAXVERT, INSIDE, \
-                                       F77_ISTRUE( *STARPIX ) ? 1 : 0 ) ); \
-   ) \
-   return RESULT; \
-}
-
-/* Invoke the above macro to define a function for each data
-   type. Include synonyms for some functions. */
-MAKE_AST_OUTLINE(d,D,DOUBLE,D,double)
-MAKE_AST_OUTLINE(r,R,REAL,F,float)
-MAKE_AST_OUTLINE(i,I,INTEGER,I,int)
-MAKE_AST_OUTLINE(ui,UI,INTEGER,UI,unsigned int)
-MAKE_AST_OUTLINE(s,S,WORD,S,short int)
-MAKE_AST_OUTLINE(us,US,UWORD,US,unsigned short int)
-MAKE_AST_OUTLINE(w,W,WORD,S,short int)
-MAKE_AST_OUTLINE(uw,UW,UWORD,US,unsigned short int)
-MAKE_AST_OUTLINE(b,B,BYTE,B,signed char)
-MAKE_AST_OUTLINE(ub,UB,UBYTE,UB,unsigned char)
-#undef MAKE_AST_OUTLINE
-
-
diff --git a/ast-5.3-1/fpolymap.c b/ast-5.3-1/fpolymap.c
deleted file mode 100644
index a37fe7b..0000000
--- a/ast-5.3-1/fpolymap.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-*+
-*  Name:
-*     fpolymap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST PolyMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the PolyMap class.
-
-*  Routines Defined:
-*     AST_ISAPOLYMAP
-*     AST_POLYMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     27-SEP-2003 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "polymap.h"             /* C interface to the PolyMap class */
-
-F77_LOGICAL_FUNCTION(ast_isapolymap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPOLYMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPolyMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_polymap)( INTEGER(NIN),
-                                   INTEGER(NOUT),
-                                   INTEGER(NCOEFF_F),
-                                   DOUBLE_ARRAY(COEFF_F),
-                                   INTEGER(NCOEFF_I),
-                                   DOUBLE_ARRAY(COEFF_I),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER(NOUT)
-   GENPTR_INTEGER(NCOEFF_F)
-   GENPTR_DOUBLE_ARRAY(COEFF_F)
-   GENPTR_INTEGER(NCOEFF_I)
-   GENPTR_DOUBLE_ARRAY(COEFF_I)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_POLYMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astPolyMap( *NIN, *NOUT, *NCOEFF_F, COEFF_F, *NCOEFF_I, 
-                                   COEFF_I, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fprism.c b/ast-5.3-1/fprism.c
deleted file mode 100644
index 3253276..0000000
--- a/ast-5.3-1/fprism.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-*+
-*  Name:
-*     fprism.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Prism class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Prism class.
-
-*  Routines Defined:
-*     AST_ISAPRISM
-*     AST_PRISM
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     10-JAN-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "prism.h"           /* C interface to the Prism class */
-
-
-F77_LOGICAL_FUNCTION(ast_isaprism)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAPRISM", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAPrism( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_prism)( INTEGER(REG1),
-                                 INTEGER(REG2),
-                                 CHARACTER(OPTIONS),
-                                 INTEGER(STATUS)
-                                 TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(REG1)
-   GENPTR_INTEGER(REG2)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_PRISM", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-      RESULT = astP2I( astPrism( astI2P( *REG1 ), astI2P( *REG2 ), 
-                                 "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/frame.c b/ast-5.3-1/frame.c
deleted file mode 100644
index af71a94..0000000
--- a/ast-5.3-1/frame.c
+++ /dev/null
@@ -1,15149 +0,0 @@
-/*
-*class++
-*  Name:
-*     Frame
-
-*  Purpose:
-*     Coordinate system description.
-
-*  Constructor Function:
-c     astFrame
-f     AST_FRAME
-
-*  Description:
-*     This class is used to represent coordinate systems. It does this
-*     in rather the same way that a frame around a graph describes the
-*     coordinate space in which data are plotted. Consequently, a
-*     Frame has a Title (string) attribute, which describes the
-*     coordinate space, and contains axes which in turn hold
-*     information such as Label and Units strings which are used for
-*     labelling (e.g.) graphical output. In general, however, the
-*     number of axes is not restricted to two.
-*
-*     Functions are available for converting Frame coordinate values
-*     into a form suitable for display, and also for calculating
-*     distances and offsets between positions within the Frame.
-*
-*     Frames may also contain knowledge of how to transform to and
-*     from related coordinate systems.
-
-*  Inheritance:
-*     The Frame class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     Frame also has the following attributes (if the Frame has only one
-*     axis, the axis specifier can be omited from the following attribute 
-*     names):
-*
-*     - AlignSystem: Coordinate system used to align Frames
-*     - Bottom(axis): Lowest axis value to display
-*     - Digits/Digits(axis): Number of digits of precision
-*     - Direction(axis): Display axis in conventional direction?
-*     - Domain: Coordinate system domain
-*     - Dut1: Difference between the UT1 and UTC timescale
-*     - Epoch: Epoch of observation
-*     - Format(axis): Format specification for axis values
-*     - Label(axis): Axis label
-*     - MatchEnd: Match trailing axes?
-*     - MaxAxes: Maximum number of Frame axes to match
-*     - MinAxes: Minimum number of Frame axes to match
-*     - Naxes: Number of Frame axes
-*     - NormUnit(axis): Normalised axis physical units
-*     - ObsAlt: Geodetic altitude of observer 
-*     - ObsLat: Geodetic latitude of observer
-*     - ObsLon: Geodetic longitude of observer
-*     - Permute: Permute axis order?
-*     - PreserveAxes: Preserve axes?
-*     - Symbol(axis): Axis symbol
-*     - System: Coordinate system used to describe the domain
-*     - Title: Frame title
-*     - Top(axis): Highest axis value to display
-*     - Unit(axis): Axis physical units
-
-*  Functions:
-c     In addition to those functions applicable to all Mappings, the
-c     following functions may also be applied to all Frames:
-f     In addition to those routines applicable to all Mappings, the
-f     following routines may also be applied to all Frames:
-*
-c     - astAngle: Calculate the angle subtended by two points at a third point
-c     - astAxAngle: Find the angle from an axis, to a line through two points
-c     - astAxDistance: Calculate the distance between two axis values
-c     - astAxOffset: Calculate an offset along an axis
-c     - astConvert: Determine how to convert between two coordinate systems
-c     - astDistance: Calculate the distance between two points in a Frame
-c     - astFindFrame: Find a coordinate system with specified characteristics
-c     - astFormat: Format a coordinate value for a Frame axis
-c     - astGetActiveUnit: Determines how the Unit attribute will be used
-c     - astIntersect: Find the intersection between two geodesic curves
-c     - astMatchAxes: Find any corresponding axes in two Frames
-c     - astNorm: Normalise a set of Frame coordinates
-c     - astOffset: Calculate an offset along a geodesic curve
-c     - astOffset2: Calculate an offset along a geodesic curve in a 2D Frame
-c     - astPermAxes: Permute the order of a Frame's axes
-c     - astPickAxes: Create a new Frame by picking axes from an existing one
-c     - astResolve: Resolve a vector into two orthogonal components
-c     - astSetActiveUnit: Specify how the Unit attribute should be used
-c     - astUnformat: Read a formatted coordinate value for a Frame axis
-f     - AST_ANGLE: Find the angle subtended by two points at a third point
-f     - AST_AXANGLE: Find the angle from an axis, to a line through two points
-f     - AST_AXDISTANCE: Calculate the distance between two axis values
-f     - AST_AXOFFSET: Calculate an offset along an axis
-f     - AST_CONVERT: Determine how to convert between two coordinate systems
-f     - AST_DISTANCE: Calculate the distance between two points in a Frame
-f     - AST_FINDFRAME: Find a coordinate system with specified characteristics
-f     - AST_FORMAT: Format a coordinate value for a Frame axis
-f     - AST_GETACTIVEUNIT: Determines how the Unit attribute will be used
-f     - AST_INTERSECT: Find the intersection between two geodesic curves
-f     - AST_MATCHAXES: Find any corresponding axes in two Frames
-f     - AST_NORM: Normalise a set of Frame coordinates
-f     - AST_OFFSET: Calculate an offset along a geodesic curve
-f     - AST_OFFSET2: Calculate an offset along a geodesic curve in a 2D Frame
-f     - AST_PERMAXES: Permute the order of a Frame's axes
-f     - AST_PICKAXES: Create a new Frame by picking axes from an existing one
-f     - AST_RESOLVE: Resolve a vector into two orthogonal components
-f     - AST_SETACTIVEUNIT: Specify how the Unit attribute should be used
-f     - AST_UNFORMAT: Read a formatted coordinate value for a Frame axis
-
-*  Notes:
-*     - When used as a Mapping, a Frame implements a unit (null)
-*     transformation in both the forward and inverse directions
-*     (equivalent to a UnitMap). The Nin and Nout attribute values are
-*     both equal to the number of Frame axes.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: B.S. Berry (Starlink)
-
-*  History:
-*     1-MAR-1996 (RFWS):
-*        Original version.
-*     4-JUN-1996 (RFWS):
-*        Added the CleanDomain function to fold all Domain strings to
-*        upper case and remove white space.
-*     12-JUL-1996 (RFWS):
-*        Over-ride the astReportPoints method to provide
-*        Frame-specific formatting.
-*     11-SEP-1996 (RFWS):
-*        Added astGap (written by DSB).
-*     10-JUN-1997 (RFWS):
-*        Re-implemented astConvert and astFindFrame.
-*     1-SEP-1997 (RFWS):
-*        Added missing return statement in astAbbrev_.
-*     14-NOV-1997 (RFWS):
-*        Fixed wrong amount of memory allocated in ValidateAxisSelection.
-*     20-NOV-1997 (RFWS):
-*        Updated astConvert prologue.
-*     22-DEC-1997 (RFWS):
-*        Updated astConvert prologue again.
-*     15-FEB-1998 (RFWS):
-*        Added astUnformat.
-*     2-MAR-1999 (RFWS);
-*        Fixed missing STATUS arguments in examples for AST_FINDFRAME
-*        prologue.
-*     18-JUL-1999 (RFWS):
-*        Fixed memory leak in ConvertX.
-*     21-JUN-2001 (DSB):
-*        Added methods astAngle and astOffset2.
-*     29-AUG-2001 (DSB):
-*        Added methods astAxDistance and astAxOffset.
-*     4-SEP-2001 (DSB):
-*        Added method astResolve.
-*     9-SEP-2001 (DSB):
-*        Added method astBear.
-*     21-SEP-2001 (DSB):
-*        Replaced astBear with astAxAngle.
-*     10-OCT-2002 (DSB):
-*        Added Top and Bottom.
-*     15-NOV-2002 (DSB):
-*        Moved the System and Epoch attributes from the SkyFrame class to
-*        this class. Added virtual method astValidateSystem, astSystemString,
-*        astSystemCode. Added attribute AlignSystem.
-*     17-DEC-2002 (DSB):
-*        Added the GetActiveUnit, TestActiveUnit and SetActiveUnit functions.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitFrameVtab
-*        method.
-*     15-SEP-2003 (DSB):
-*        Allow Frame attribute names to include an axis specifier within
-*        GetAttrib, SetAttrib, TestAttrib and ClearAttrib (eg "Domain(1)"
-*        is now accepted as equivalent to "Domain").
-*     24-JAN-2004 (DSB):
-*        o  Added astFields.
-*        o  Added argument "fmt" to Abbrev.
-*     24-MAR-2004 (DSB):
-*        Add protected function astIsUnitFrame.
-*     7-SEP-2004 (DSB):
-*        Modified SetUnit to exclude any trailing spaces
-*     8-SEP-2004 (DSB):
-*        - Added astResolvePoints.
-*        - Override astEqual.
-*     29-NOV-2004 (DSB):
-*        - Set/Get/Test/ClearAttrib: Allow axis specifier to be omitted from 
-*        axis attribute names if the Frame only has one axis.
-*     2-FEB-2005 (DSB):
-*        - Avoid using astStore to allocate more storage than is supplied
-*        in the "data" pointer. This can cause access violations since 
-*        astStore will then read beyond the end of the "data" area.
-*     17-FEB-2005 (DSB):
-*        - Change use of ActiveUnit flag so that both target and template
-*        Frames must have active units in order for the Mapping to take 
-*        account of differences in units. Previously, the test was based 
-*        on the template Frame alone.
-*     23-MAR-2005 (DSB):
-*        - GetActiveUnit: Always return zero if the Frame contains any
-*        SkyAxes. 
-*     5-APR-2005 (DSB):
-*        Correct error checking in Clear/Get/Set/TestAttrib.
-*     12-MAY-2005 (DSB):
-*        Added astNormBox method.
-*     16-JUN-2005 (DSB):
-*        Added documentation for the TimeFrame class.
-*     12-AUG-2005 (DSB):
-*        Added ObsLat and ObsLon attributes.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     15-MAY-2006 (DSB):
-*        Remove unused global variable parent_equal.
-*     26-JUN-2006 (DSB):
-*        Document the use of the Direction attribute by the Plot class.
-*     30-JUN-2006 (DSB):
-*        Allow astAbbrev to have a null "str1" value.
-*     16-AUG-2006 (DSB):
-*        Correct "Class Applicability" to "Applicability".
-*     5-OCT-2006 (DSB):
-*        Increase the number of digits used when formating a ObsLon or 
-*        ObsLat value in GetAttrib.
-*     14-OCT-2006 (DSB):
-*        - Add Dut1 attribute
-*     26-JAN-2007 (DSB):
-*        Fix bug in NewUnit that causes segvio when changing axis symbols
-*        to accomodate changes in units.
-*     17-MAY-2007 (DSB):
-*        Added read-only attribute NormUnit.
-*     21-MAY-2007 (DSB):
-*        Use rather than ignore the value returned by astTestAxisDigits in 
-*        TestAttrib.
-*     25-JUN-2007 (DSB):
-*        Documentation typos.
-*     26-NOV-2007 (DSB):
-*        In Clear/Get/Set/TestAttrib, include any appropriate axis index in 
-*        the attribute name when attempting to get the attribute value from 
-*        the primary frame
-*     17-NOV-2008 (DSB):
-*        Correct parent class in invocation of astMAKE_ISA.
-*     14-JAN-2009 (DSB):
-*        Added astIntersect.
-*     18-MAR-2009 (DSB):
-*        Fixed bug in LineCrossing.
-*     18-JUN-2000 (DSB):
-*        Added ObsAlt attribute.
-*     28-SEP-2009 (DSB):
-*        Added astMatchAxes method.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Frame
-
-/* Define numerical constants for use in this module. */
-#define LABEL_BUFF_LEN 100       /* Max length of default axis Label string */
-#define SYMBOL_BUFF_LEN 50       /* Max length of default axis Symbol string */
-#define TITLE_BUFF_LEN 100       /* Max length of default title string */
-#define GETATTRIB_BUFF_LEN 50    /* Max length of string returned by GetAttrib */
-#define ASTFMTDECIMALYR_BUFF_LEN 50    /* Max length of string returned by GetAttrib */
-#define ASTFORMATID_MAX_STRINGS 50     /* Number of string values buffer by astFormatID*/
-
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__CART
-#define LAST_SYSTEM AST__CART
-
-/* Define macros to implement methods for accessing axis attributes. */
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear an attribute value for a Frame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frame.h"
-*     MAKE_CLEAR(attribute)
-
-*  Class Membership:
-*     Defined by the Frame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstFrame *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstFrame *this, int axis )
-*
-*     which implement a method for clearing an attribute value for a specified
-*     axis of a Frame.
-
-*  Parameters:
-*     attribute
-*        The name of the attribute to be cleared, as it appears in the
-*        function name (e.g. Label in "astClearLabel").
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*        void astClearAxis<Attribute>( AstAxis *this )
-*
-*     which clears the required attribute for an Axis object.
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( AstFrame *this, int axis, int *status ) { \
-   AstAxis *ax;                  /* Pointer to Axis object */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index and obtain a pointer to the required Axis. */ \
-   (void) astValidateAxis( this, axis, "astClear" #attribute ); \
-   ax = astGetAxis( this, axis ); \
-\
-/* Clear the Axis attribute. */ \
-   astClearAxis##attribute( ax ); \
-\
-/* Annul the Axis pointer. */ \
-   ax = astAnnul( ax ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( AstFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,Frame,Clear##attribute))( this, axis, status ); \
-}
-
-/*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get an attribute value for a Frame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-#     #include "frame.h"
-*     MAKE_GET(attribute,type,bad_value,default,assign_default)
-
-*  Class Membership:
-*     Defined by the Frame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstFrame *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        Type astGet<Attribute>_( AstFrame *this, int axis )
-*
-*     which implement a method for getting an attribute value for a specified
-*     axis of a Frame.
-
-*  Parameters:
-*     attribute
-*        The name of the attribute whose value is to be obtained, as
-*        it appears in the function name (e.g. Label in
-*        "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     default
-*        A boolean (int) constant that indicates whether a new default value
-*        should be returned by the method if the requested attribute has not
-*        been set for the axis. If this value is zero, the axis default will
-*        be used instead.
-*     assign_default
-*        An expression that evaluates to the new default value to be assigned.
-*        This value is ignored if "default" is zero, but a valid (e.g.
-*        constant) value should nevertheless be supplied.
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           <Type> astGetAxis<Attribute>( AstAxis *this )
-*
-*     which gets the required attribute for an Axis object.
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type,bad_value,default,assign_default) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attribute( AstFrame *this, int axis, int *status ) { \
-   AstAxis *ax;                  /* Pointer to Axis object */ \
-   int digits_set;               /* Axis Digits attribute set? */ \
-   int old_axis;                 /* Original (un-permuted) axis index */ \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise. */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate and permute the axis index and obtain a pointer to the required \
-   Axis. */ \
-   old_axis = axis; \
-   axis = astValidateAxis( this, axis, "astGet" #attribute ); \
-   ax = astGetAxis( this, old_axis ); \
-\
-/* Since the Axis is "managed" by the enclosing Frame, we next test if any \
-   Axis attributes which may affect the result are undefined (i.e. have not \
-   been explicitly set). If so, we over-ride them, giving them temporary \
-   values dictated by the Frame. Only the Digits attribute is relevant \
-   here. */ \
-   digits_set = astTestAxisDigits( ax ); \
-   if ( !digits_set ) astSetAxisDigits( ax, astGetDigits( this ) ); \
-\
-/* If the default value is to be over-ridden, test if the Axis attribute has \
-   been set. Then, if required, obtain the attribute value from the Axis. */ \
-   if ( !(default) || astTestAxis##attribute( ax ) ) { \
-      result = astGetAxis##attribute( ax ); \
-\
-/* If required, assign the new default value. */ \
-   } else { \
-      result = (assign_default); \
-   } \
-\
-/* Clear Axis attributes which were temporarily over-ridden above and annul \
-   the Axis pointer. */ \
-   if ( !digits_set ) astClearAxisDigits( ax ); \
-   ax = astAnnul( ax ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-type astGet##attribute##_( AstFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,Frame,Get##attribute))( this, axis, status ); \
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set an attribute value for a Frame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frame.h"
-*     MAKE_SET(attribute,type)
-
-*  Class Membership:
-*     Defined by the Frame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstFrame *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstFrame *this, int axis, <Type> value )
-*
-*     which implement a method for setting an attribute value for a specified
-*     axis of a Frame.
-
-*  Parameters:
-*      attribute
-*         The name of the attribute to be set, as it appears in the
-*         function name (e.g. Label in "astSetLabel").
-*      type
-*         The C type of the attribute.
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           void astSetAxis<Attribute>( AstAxis *this, <Type> value )
-*
-*     which sets the required attribute for an Axis object.
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( AstFrame *this, int axis, type value, int *status ) { \
-   AstAxis *ax;                  /* Pointer to Axis object */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index and obtain a pointer to the required Axis. */ \
-   (void) astValidateAxis( this, axis, "astSet" #attribute ); \
-   ax = astGetAxis( this, axis ); \
-\
-/* Set the Axis attribute value. */ \
-   astSetAxis##attribute( ax, value ); \
-\
-/* Annul the Axis pointer. */ \
-   ax = astAnnul( ax ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( AstFrame *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,Frame,Set##attribute))( this, axis, value, status ); \
-}
-
-/*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if an attribute has been set for a Frame axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frame.h"
-*     MAKE_TEST(attribute)
-
-*  Class Membership:
-*     Defined by the Frame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstFrame *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstFrame *this, int axis )
-*
-*     which implement a method for testing if an attribute has been set for a
-*     specified axis of a Frame.
-
-*  Parameters:
-*      attribute
-*         The name of the attribute to be tested, as it appears in the
-*         function name (e.g. Label in "astTestLabel").
-
-*  Notes:
-*     -  This macro assumes the existence of a method of the form:
-*
-*           void astTestAxis<Attribute>( AstAxis *this )
-*
-*     which tests the required attribute for an Axis object.
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attribute( AstFrame *this, int axis, int *status ) { \
-   AstAxis *ax;                  /* Pointer to Axis object */ \
-   int result;                   /* Value to be returned */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Validate the axis index and obtain a pointer to the required Axis. */ \
-   (void) astValidateAxis( this, axis, "astTest" #attribute ); \
-   ax = astGetAxis( this, axis ); \
-\
-/* Test if the attribute has been set. */ \
-   result = astTestAxis##attribute( ax ); \
-\
-/* Annul the Axis pointer. */ \
-   ax = astAnnul( ax ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attribute##_( AstFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,Frame,Test##attribute))( this, axis, status ); \
-}
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "pointset.h"            /* Sets of points */
-#include "unitmap.h"             /* Unit Mapping */
-#include "permmap.h"             /* Coordinate permutation Mapping */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "axis.h"                /* Coordinate Axis */
-#include "skyaxis.h"             /* Sky coordinate axes */
-#include "skyframe.h"            /* Celestial coordinate frames */
-#include "channel.h"             /* I/O channels */
-#include "frame.h"               /* Interface definition for this class */
-#include "frameset.h"            /* Collections of Frames */
-#include "cmpframe.h"            /* Compound Frames */
-#include "pal.h"                 /* SLALIB library interface */
-#include "unit.h"                /* Units identification and mapping */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_cleanattribs)( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define a variable to hold a SkyFrame which will be used for formatting
-   and unformatting ObsLat and ObsLon values. */
-static AstSkyFrame *skyframe;      
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->AstFormatID_Init = 0; \
-   globals->AstFormatID_Istr = 0; \
-   globals->Label_Buff[ 0 ] = 0; \
-   globals->Symbol_Buff[ 0 ] = 0; \
-   globals->Title_Buff[ 0 ] = 0; \
-   globals->AstFmtDecimalYr_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Frame)
-
-#define class_init astGLOBAL(Frame,Class_Init)
-#define class_vtab astGLOBAL(Frame,Class_Vtab)
-#define getattrib_buff astGLOBAL(Frame,GetAttrib_Buff)
-#define astformatid_strings astGLOBAL(Frame,AstFormatID_Strings)
-#define astformatid_istr astGLOBAL(Frame,AstFormatID_Istr)
-#define astformatid_init astGLOBAL(Frame,AstFormatID_Init)
-#define label_buff astGLOBAL(Frame,Label_Buff)
-#define symbol_buff astGLOBAL(Frame,Symbol_Buff)
-#define title_buff astGLOBAL(Frame,Title_Buff)
-#define astfmtdecimalyr_buff astGLOBAL(Frame,AstFmtDecimalYr_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */ 
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Strings returned by astFormatID */ 
-static char *astformatid_strings[ ASTFORMATID_MAX_STRINGS ];
-
-/* Offset of next string in "AstFormatID_Strings" */
-static int astformatid_istr;
-
-/* "AstFormatID_Strings" array initialised? */ 
-static int astformatid_init;
-
-/* Default Label string buffer */ 
-static char label_buff[ LABEL_BUFF_LEN + 1 ]; 
-
-/* Default Symbol buffer */
-static char symbol_buff[ SYMBOL_BUFF_LEN + 1 ]; 
-
-/* Default Title string buffer */
-static char title_buff[ TITLE_BUFF_LEN + 1 ]; 
-
-/* Buffer for result string */
-static char astfmtdecimalyr_buff[ ASTFMTDECIMALYR_BUFF_LEN + 1 ]; 
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstFrame *PickAxes( AstFrame *, int, const int[], AstMapping **, int * );
-static AstFrameSet *Convert( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *ConvertX( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *FindFrame( AstFrame *, AstFrame *, const char *, int * );
-static void MatchAxes( AstFrame *, AstFrame *, int *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static char *CleanDomain( char *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetDefaultLabel( int, int * );
-static const char *GetDefaultSymbol( AstFrame *, int, int * );
-static const char *GetDefaultTitle( AstFrame *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetNormUnit( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double AxAngle( AstFrame *, const double[], const double[], int, int * );
-static double AxDistance( AstFrame *, int, double, double, int * );
-static double AxOffset( AstFrame *, int, double, double, int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static int AxIn( AstFrame *, int, double, double, double, int, int * );
-static int ConsistentMaxAxes( AstFrame *, int, int * );
-static int ConsistentMinAxes( AstFrame *, int, int * );
-static int DefaultMaxAxes( AstFrame *, int * );
-static int DefaultMinAxes( AstFrame *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int Fields( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-static int GetDigits( AstFrame *, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetIsSimple( AstMapping *, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static void CleanAttribs( AstObject *, int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-static double GetTop( AstFrame *, int, int * );
-static int TestTop( AstFrame *, int, int * );
-static void ClearTop( AstFrame *, int, int * );
-static void SetTop( AstFrame *, int, double, int * );
-
-static double GetBottom( AstFrame *, int, int * );
-static int TestBottom( AstFrame *, int, int * );
-static void ClearBottom( AstFrame *, int, int * );
-static void SetBottom( AstFrame *, int, double, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static int TestSystem( AstFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static int TestAlignSystem( AstFrame *, int * );
-static void ClearAlignSystem( AstFrame *, int * );
-static void SetAlignSystem( AstFrame *, AstSystemType, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static int TestEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static int TestObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static int TestObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static int TestObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static double GetDut1( AstFrame *, int * );
-static int TestDut1( AstFrame *, int * );
-static void ClearDut1( AstFrame *, int * );
-static void SetDut1( AstFrame *, double, int * );
-
-static int GetActiveUnit( AstFrame *, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-
-static int GetFrameFlags( AstFrame *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int GetMatchEnd( AstFrame *, int * );
-static int GetMaxAxes( AstFrame *, int * );
-static int GetMinAxes( AstFrame *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetNin( AstMapping *, int * );
-static int GetNout( AstMapping *, int * );
-static int GetPermute( AstFrame *, int * );
-static int GetPreserveAxes( AstFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestDigits( AstFrame *, int * );
-static int TestDirection( AstFrame *, int, int * );
-static int TestDomain( AstFrame *, int * );
-static int TestFormat( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static int TestMatchEnd( AstFrame *, int * );
-static int TestMaxAxes( AstFrame *, int * );
-static int TestMinAxes( AstFrame *, int * );
-static int TestPermute( AstFrame *, int * );
-static int TestPreserveAxes( AstFrame *, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static int TestTitle( AstFrame *, int * );
-static int TestUnit( AstFrame *, int, int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static int ValidateAxis( AstFrame *, int, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static void AddUnderscores( char *, int * );
-static void CheckPerm( AstFrame *, const int *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearDigits( AstFrame *, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void ClearDomain( AstFrame *, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void ClearMatchEnd( AstFrame *, int * );
-static void ClearMaxAxes( AstFrame *, int * );
-static void ClearMinAxes( AstFrame *, int * );
-static void ClearPermute( AstFrame *, int * );
-static void ClearPreserveAxes( AstFrame *, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void ClearTitle( AstFrame *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void PrimaryFrame( AstFrame *, int, AstFrame **, int *, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetDigits( AstFrame *, int, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-static void SetDomain( AstFrame *, const char *, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-static void SetFrameFlags( AstFrame *, int, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-static void SetMatchEnd( AstFrame *, int, int * );
-static void SetMaxAxes( AstFrame *, int, int * );
-static void SetMinAxes( AstFrame *, int, int * );
-static void SetPermute( AstFrame *, int, int * );
-static void SetPreserveAxes( AstFrame *, int, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-static void SetTitle( AstFrame *, const char *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void NewUnit( AstAxis *, const char *, const char *, const char *, const char *, int * );
-static void ValidateAxisSelection( AstFrame *, int, const int *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this, int axis,  const char *fmt, 
-                           const char *str1, const char *str2, int *status ) {
-/*
-*+
-*  Name:
-*     astAbbrev
-
-*  Purpose:
-*     Abbreviate a formatted Frame axis value by skipping leading fields.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *astAbbrev( AstFrame *this, int axis, const char *fmt, 
-*                            const char *str1, const char *str2 )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function compares two Frame axis values that have been
-*     formatted (using astFormat) and determines if they have any
-*     redundant leading fields (i.e. leading fields in common which
-*     can be suppressed when tabulating the values or plotting them on
-*     the axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the Frame axis for which the values have been
-*        formatted (axis numbering starts at zero for the first axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specification used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value. If this is null, the returned pointer
-*        points to the start of the final field in str2.
-*     str2
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - This function assumes that the format specification used was
-*     the same when both values were formatted and that they both
-*     apply to the same Frame axis.
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   const char *result;           /* Result pointer to return */
-
-/* Initialise. */
-   result = str2;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required
-   Axis. */
-   (void) astValidateAxis( this, axis, "astAbbrev" );
-   ax = astGetAxis( this, axis );
-
-/* Invoke the Axis astAxisAbbrev method to perform the processing. */
-   result = astAxisAbbrev( ax, fmt, str1, str2 );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = str2;
-
-/* Return the result. */
-   return result;
-}
-
-static void AddUnderscores( char *string, int *status ) {
-/*
-*  Name:
-*     AddUnderscores
-
-*  Purpose:
-*     Add underscores to a string in place of white space.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void AddUnderscores( char *string, int *status )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function changes all white space characters in a string into
-*     the underscore character '_'.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     string
-*        Pointer to the null terminated string to be processed.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables. */
-   int i;                        /* Loop counter for characters */
-
-/* Inspect each character in the string. */
-   for ( i = 0; string[ i ]; i++ ) {
-
-/* If it is a white space character, replace it with an underscore. */
-      if ( isspace( string[ i ] ) ) string[ i ] = '_';
-   }
-}
-
-static double Angle( AstFrame *this, const double a[],
-                     const double b[], const double c[], int *status ) {
-/*
-*++
-*  Name:
-c     astAngle
-f     AST_ANGLE
-
-*  Purpose:
-*     Calculate the angle subtended by two points at a third point.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     double astAngle( AstFrame *this, const double a[], const double b[],
-c                      const double c[] )
-f     RESULT = AST_ANGLE( THIS, A, B, C, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function
-f     This routine
-*     finds the angle at point B between the line joining points A and B,
-*     and the line joining points C and B. These lines will in fact be
-*     geodesic curves appropriate to the Frame in use. For instance, in
-*     SkyFrame, they will be great circles.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     a
-f     A( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-c     b
-f     B( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the second point.
-c     c
-f     C( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the third point.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astAngle
-f     AST_ANGLE = DOUBLE PRECISION
-*        The angle in radians, from the line AB to the line CB. If the
-*        Frame is 2-dimensional, it will be in the range $\pm \pi$,
-*        and positive rotation is in the same sense as rotation from
-*        the positive direction of axis 2 to the positive direction of
-*        axis 1. If the Frame has more than 2 axes, a positive value will
-*        always be returned in the range zero to $\pi$.
-
-*  Notes:
-*     - A value of AST__BAD will also be returned if points A and B are
-*     co-incident, or if points B and C are co-incident.
-*     - A value of AST__BAD will also be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*--
-*/
-
-/* Local Variables: */
-   double *ab;                   /* Pointer to vector AB */
-   double *cb;                   /* Pointer to vector CB */
-   double cos;                   /* cosine of required angle */
-   double anga;                  /* Angle from +ve Y to the line BA */
-   double angc;                  /* Angle from +ve Y to the line BC */
-   double result;                /* Result value to return */
-   double sla;                   /* Squared length of vector AB */
-   double slc;                   /* Squared length of vector CB */
-   double sp;                    /* Scalar product of AB and CB */
-   int axis;                     /* Axis index */
-   int naxes;                    /* Number of Frame axes */
-   int ok;                       /* Supplied points OK? */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Assume everything is ok */
-   ok = 1;
-
-/* Obtain the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Obtain workspace. */
-   ab = (double *) astMalloc( sizeof(double)*naxes );
-   cb = (double *) astMalloc( sizeof(double)*naxes );
-
-/* Check all positions are good, and form the vectors from b to a, and
-   from b to c. Also find the squared length of each vector. */
-   if( astOK ) {
-      sla = 0.0;
-      slc = 0.0;
-      for( axis = 0; axis < naxes; axis++ ) {
-         if( a[ axis ] == AST__BAD || b[ axis ] == AST__BAD ||
-             c[ axis ] == AST__BAD ) {
-            ok = 0;
-            break;
-         } else {
-            ab[ axis ] = a[ axis ] - b[ axis ];
-            cb[ axis ] = c[ axis ] - b[ axis ];
-            sla += ( ab[ axis ] )*( ab[ axis ] );
-            slc += ( cb[ axis ] )*( cb[ axis ] );
-         }
-      }
-
-/* Check that neither of the vectors have zero length. */
-      if( sla == 0 || slc == 0 ) ok = 0;
-
-/* Only proceed if these checks were passed. */
-      if ( ok ) {
-
-/* Deal first with 2-dimensional Frames. */
-         if( naxes == 2 ) {
-
-/* Find the angle from +ve Y to the line BA. */
-            anga = atan2( ab[ 0 ], ab[ 1 ] );
-
-/* Find the angle from +ve Y to the line BC. */
-            angc = atan2( cb[ 0 ], cb[ 1 ] );
-
-/* Find the difference, folded into the range +/- PI. */
-            result = palSlaDrange( angc - anga );
-
-/* Now deal with Frames with more than 2 axes. */
-         } else {
-
-/* Form the scalar product of the two vectors. */
-            sp = 0.0;
-            for( axis = 0; axis < naxes; axis++ ) {
-               sp += ab[ axis ]*cb[ axis ];
-            }
-
-/* Derive the required angle from the normalized scalar product. */
-            cos = sp/sqrt( sla*slc );
-            if( cos > 1.0 ) {
-               cos = 1.0;
-            } else if( cos < -1.0 ) {
-               cos = -1.0;
-            }
-            result =acos( cos );
-         }
-      }
-   }
-
-/* Free the work space. */
-   ab = (double *) astFree( (void *) ab );
-   cb = (double *) astFree( (void *) cb );
-
-/* Return the result. */
-   return result;
-}
-
-static double AxAngle( AstFrame *this, const double a[], const double b[], int axis, int *status ) {
-/*
-*++
-*  Name:
-c     astAxAngle
-f     AST_AXANGLE
-
-*  Purpose:
-*     Returns the angle from an axis, to a line through two points.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     double astAxAngle( AstFrame *this, const double a[], const double b[], int axis )
-f     RESULT = AST_AXANGLE( THIS, A, B, AXIS, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function
-f     This routine
-*     finds the angle, as seen from point A, between the positive
-*     direction of a specified axis, and the geodesic curve joining point
-*     A to point B.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     a
-f     A( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-c     b
-f     B( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the second point.
-c     axis
-f     AXIS = INTEGER (Given)
-*        The number of the Frame axis from which the angle is to be
-*        measured (axis numbering starts at 1 for the first axis).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astAxAngle
-f     AST_AXANGLE = DOUBLE PRECISION
-*        The angle in radians, from the positive direction of the
-*        specified axis, to the line AB. If the Frame is 2-dimensional,
-*        it will be in the range [-PI/2,+PI/2], and positive rotation is in
-*        the same sense as rotation from the positive direction of axis 2
-*        to the positive direction of axis 1. If the Frame has more than 2
-*        axes, a positive value will always be returned in the range zero
-*        to PI.
-
-*  Notes:
-c     - The geodesic curve used by this function is the path of
-f     - The geodesic curve used by this routine is the path of
-*     shortest distance between two points, as defined by the
-c     astDistance function.
-f     AST_DISTANCE function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the require
-*     position angle is undefined.
-*--
-*/
-
-/* Local Variables: */
-   double *aa;                   /* Pointer to third point */
-   double ab;                    /* Absolute value of component */
-   double mxab;                  /* Largest absolute value of component */
-   double result;                /* The returned value */
-   int iaxis;                    /* Axis index */
-   int naxes;                    /* Number of Frame axes */
-   int ok;                       /* Are values ok to use? */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxAngle" );
-
-/* Obtain the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Obtain workspace. */
-   aa = (double *) astMalloc( sizeof(double)*naxes );
-
-/* Create a position which is offset slightly from point A in the
-   positive direction of the specified axis. Also get the largest absolute
-   value of any component of the vector AB. */
-   if( astOK ) {
-      ok = 1;
-      mxab = 0.0;
-
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         if( a[ iaxis ] != AST__BAD && b[ iaxis ] != AST__BAD ) {
-            aa[ iaxis ] = a[ iaxis ];
-            ab = fabs( a[ iaxis ] - b[ iaxis ] );
-            if( ab > mxab ) mxab = ab;
-         } else {
-            ok = 0;
-            break;
-         }
-      }
-
-      if( ok ) {
-
-         if( a[ axis - 1 ] != 0.0 ) {
-            aa[ axis - 1 ] += 10000.0*DBL_EPSILON*fabs( a[ axis - 1 ] );
-
-         } else if( b[ axis - 1 ] != 0.0 ) {
-            aa[ axis - 1 ] = 10000.0*DBL_EPSILON*fabs( b[ iaxis - 1 ] );
-
-         } else if( mxab != 0.0 ) {
-            aa[ axis - 1 ] = 10000.0*DBL_EPSILON*mxab;
-
-         } else {
-            aa[ axis - 1 ] = 1.0;
-         }
-
-/* Use astAngle to get the required angle. */
-         result = astAngle( this, aa, a, b );
-      }
-   }
-
-/* Free the workspace. */
-   aa = (double *) astFree( (void *) aa );
-
-/* Return the result. */
-   return result;
-
-}
-
-static double AxDistance( AstFrame *this, int axis, double v1, double v2, int *status ) {
-/*
-*++
-*  Name:
-c     astAxDistance
-f     AST_AXDISTANCE
-
-*  Purpose:
-*     Find the distance between two axis values.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     double astAxDistance( AstFrame *this, int axis, double v1, double v2 )
-f     RESULT = AST_AXDISTANCE( THIS, AXIS, V1, V2, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function returns a signed value representing the axis increment
-f     This routine returns a signed value representing the axis increment
-*     from axis value v1 to axis value v2.
-*
-*     For a simple Frame, this is a trivial operation returning the
-*     difference between the two axis values. But for other derived classes
-*     of Frame (such as a SkyFrame) this is not the case.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     axis
-f     AXIS = INTEGER (Given)
-*        The index of the axis to which the supplied values refer. The
-*        first axis has index 1.
-c     v1
-f     V1 = DOUBLE PRECISION (Given)
-*        The first axis value.
-c     v2
-f     V2 = DOUBLE PRECISION (Given)
-*        The second axis value.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astAxDistance
-f     AST_AXDISTANCE = DOUBLE PRECISION
-*        The distance from the first to the second axis value.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input values has this value.
-*     - A "bad" value will also be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*--
-
-*  Implementation Deficiencies;
-*     - The protected interface for this function uses 1-based axis
-*     numbering (like the public interface), rather than the more usual
-*     zero-based system used by all other protected interfaces. There is 
-*     no real reason for this, and it should be changed at some time.
-
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   double result;                /* The returned answer */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
-   (void) astValidateAxis( this, axis - 1, "astAxDistance" );
-   ax = astGetAxis( this, axis - 1 );
-
-/* Use the AxisDistance method associated with the Axis. */
-   if( astOK ) result = astAxisDistance( ax, v1, v2 );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* Return the result. */
-   return result;
-
-}
-
-static int AxIn( AstFrame *this, int axis, double lo, double hi, double val,
-                 int closed, int *status ){
-/*
-*+
-*  Name:
-*     astAxIn
-
-*  Purpose:
-*     Test if an axis value lies within a given interval.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astAxIn( AstFrame *this, int axis, double lo, double hi, double val,
-*                  int closed )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function returns non-zero if a given axis values lies within a
-*     given axis interval.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The index of the axis. The first axis has index 0.
-*     lo
-*        The lower axis limit of the interval.
-*     hi
-*        The upper axis limit of the interval.
-*     val
-*        The axis value to be tested.
-*     closed
-*        If non-zero, then the lo and hi axis values are themselves
-*        considered to be within the interval. Otherwise they are outside.
-
-*  Returned Value:
-*     Non-zero if the test value is inside the interval. 
-
-*  Applicability:
-*     Frame
-*        Uses simple Euclidean test
-*     SkyFrame
-*        All angles which are numerically between "lo" and "hi" are within 
-*        the interval. Angle outside this range are also within the interval 
-*        if they can be brought into the range by addition or subtraction
-*        of a multiple of 2.PI.
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   int result;                   /* Returned value */
-
-/* For speed, omit the astOK check and axis validation (since this is
-   protected code, AST should get it right). Obtain a pointer to the 
-   required Axis. */
-   ax = astGetAxis( this, axis );
-
-/* Use the AxisIn method associated with the Axis. */
-   result = ax ? astAxisIn( ax, lo, hi, val, closed ) : 0;
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* Return the result. */
-   return result;
-}
-
-static double AxOffset( AstFrame *this, int axis, double v1, double dist, int *status ) {
-/*
-*++
-*  Name:
-c     astAxOffset
-f     AST_AXOFFSET
-
-*  Purpose:
-*     Add an increment onto a supplied axis value.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     double astAxOffset( AstFrame *this, int axis, double v1, double dist )
-f     RESULT = AST_AXOFFSET( THIS, AXIS, V1, DIST, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function returns an axis value formed by adding a signed axis
-f     This routine returns an axis value formed by adding a signed axis
-*     increment onto a supplied axis value.
-*
-*     For a simple Frame, this is a trivial operation returning the
-*     sum of the two supplied values. But for other derived classes
-*     of Frame (such as a SkyFrame) this is not the case.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     axis
-f     AXIS = INTEGER (Given)
-*        The index of the axis to which the supplied values refer. The
-*        first axis has index 1.
-c     v1
-f     V1 = DOUBLE PRECISION (Given)
-*        The original axis value.
-c     dist
-f     DIST = DOUBLE PRECISION (Given)
-*        The axis increment to add to the original axis value.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astAxOffset
-f     AST_AXOFFSET = DOUBLE PRECISION
-*        The incremented axis value.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input values has this value.
-*     - A "bad" value will also be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   double result;                /* The returned answer */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
-   (void) astValidateAxis( this, axis - 1, "astAxOffset" );
-   ax = astGetAxis( this, axis - 1 );
-
-/* Use the AxisOffset method associated with the Axis. */
-   if( astOK ) result = astAxisOffset( ax, v1, dist );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* Return the result. */
-   return result;
-
-}
-
-static void CheckPerm( AstFrame *this, const int *perm, const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astCheckPerm
-
-*  Purpose:
-*     Check that an array contains a valid permutation.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astCheckPerm( AstFrame *this, const int *perm, const char *method )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function checks the validity of a permutation array that
-*     will be used to permute the order of a Frame's axes. If the
-*     permutation specified by the array is not valid, an error is
-*     reported and the global error status is set. Otherwise, the
-*     function returns without further action.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     perm
-*        Pointer to an array of integers with the same number of
-*        elements as there are axes in the Frame. For each axis, the
-*        corresponding integer gives the (zero based) axis index to be
-*        used to identify the information for that axis (using the
-*        un-permuted axis numbering). To be valid, the integers in
-*        this array should therefore all lie in the range zero to
-*        (naxes-1) inclusive, where "naxes" is the number of Frame
-*        axes, and each value should occur exactly once.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate a permutation array. This method name is used
-*        solely for constructing error messages.
-
-*  Notes:
-*     - Error messages issued by this function refer to the external
-*     (public) numbering system used for axes (which is one-based),
-*     whereas zero-based axis indices are used internally.
-*-
-*/
-
-/* Local Variables: */
-   int *there;                   /* Pointer to temporary array */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of Frame axes */
-   int valid;                    /* Permutation array is valid? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   valid = 1;
-
-/* Obtain the number of Frame axes and allocate a temporary array of integers
-   with the same number of elements. */
-   naxes = astGetNaxes( this );
-   there = astMalloc( sizeof( int ) * (size_t) naxes );
-   if ( astOK ) {
-
-/* Initialise the temporary array to zero. */
-      for ( axis = 0; axis < naxes; axis++ ) there[ axis ] = 0;
-
-/* Scan the permutation array, checking that each permuted axis index it
-   contains is within the correct range. Note an error and quit checking
-   if an invalid value is found. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         if ( ( perm[ axis ] < 0 ) || ( perm[ axis ] >= naxes ) ) {
-            valid = 0;
-            break;
-
-/* Use the temporary array to count how many times each valid axis index
-   occurs. */
-	 } else {
-            there[ perm[ axis ] ]++;
-	 }
-      }
-
-/* If all the axis indices were within range, check to ensure that each value
-   occurred only once. */
-      if ( valid ) {
-         for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Note an error and quit checking if any value did not occur exactly once. */
-            if ( there[ axis ] != 1 ) {
-               valid = 0;
-               break;
-	    }
-	 }
-      }
-   }
-
-/* Free the temporary array. */
-   there = astFree( there );
-
-/* If an invalid permutation was detected and no other error has
-   occurred, then report an error (note we convert to one-based axis
-   numbering in the error message). */
-   if ( !valid && astOK ) {
-      astError( AST__PRMIN, "%s(%s): Invalid axis permutation array.", status,
-                method, astGetClass( this ) );
-      astError( AST__PRMIN, "Each axis index should lie in the range 1 to %d "
-                "and should occur only once.", status, naxes );
-   }
-}
-
-static void CleanAttribs( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     CleanAttribs
-
-*  Purpose:
-*     Clear any invalid set attribute values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void CleanAttribs( AstObject *this_object, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the protected astCleanAttribs
-*     method inherited from the Object class).
-
-*  Description:
-*     This function clears any attributes that are currently set to
-*     invalid values in thr supplied object.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cleaned.
-
-*/
-
-/* Local Variables; */
-   AstAxis *ax;
-   AstFrame *this;
-   int i;
-   int nax;
-   int reporting;
-
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* Get a pointer to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Defer error reporting, as required by the astCLEAN_ATTRIB macro. */
-   reporting = astReporting( 0 );
-
-/* Clean attributes in any Objects contained within "this". */
-   nax = astGetNaxes( this );
-   for( i = 0; i < nax; i++ ) {
-      ax = astGetAxis( this, i );
-      astCleanAttribs( ax );
-      ax = astAnnul( ax );
-   }
-
-/* Clean attributes of this class. */
-   astCLEAN_ATTRIB(System)
-   astCLEAN_ATTRIB(AlignSystem)
-
-/* Re-establish error reporting. */
-   astReporting( reporting );
-
-/* Invoke the method inherited form the parent to clean attributes
-   defined by the parent class. */
-   (*parent_cleanattribs)( this_object, status );
-}
-
-static char *CleanDomain( char *domain, int *status ) {
-/*
-*  Name:
-*     CleanDomain
-
-*  Purpose:
-*     Clean a Domain string and convert to upper case.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     char *CleanDomain( char *domain, int *status )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function removes all white space from a string and converts
-*     other characters to upper case. It is intended for cleaning up
-*     values supplied for the Domain attribute of a Frame.
-
-*  Parameters:
-*     domain
-*        Pointer to the null terminated Domain string to be modified.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The pointer value "domain" is always returned (even under error
-*     conditions).
-*/
-
-/* Local Variables: */
-   int i;                        /* Loop counter for characters */
-   int j;                        /* Good character count */
-
-/* Check the global error status. */
-   if ( !astOK ) return domain;
-
-/* Eliminate white space characters and convert the rest to upper
-   case. */
-   for ( i = j = 0; domain[ i ]; i++ ) {
-      if ( !isspace( domain[ i ] ) ) domain[ j++ ] = toupper( domain[ i ] );
-   }
-   domain[ j ] = '\0';
-
-/* Return the string pointer. */
-   return domain;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Frame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   char pfrm_attrib[ 100 ];      /* Primary Frame attribute */
-   char *axis_attrib;            /* Pointer to axis attribute name */
-   const char *old_attrib;       /* Pointer to supplied attribute name string */
-   int axis;                     /* Frame axis number */
-   int axis_nc;                  /* No. characters in axis attribute name */
-   int free_axis_attrib;         /* Should axis_attrib be freed? */
-   int has_axis;                 /* Does attrib name include axis specifier? */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Axis index within primary frame */
-   int used;                     /* Could the setting string be used? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Set a flag indicating if the attribute name includes an axis
-   specifier. */
-   has_axis = ( strchr( attrib, '(' ) != NULL );
-
-/* A flag indicating that we do not need to free the axis_attrib memory. */
-   free_axis_attrib = 0;
-
-/* Initialise things to avoid compiler warnings. */   
-   axis_attrib = NULL;
-   old_attrib = NULL;
-
-/* Jump back to here if we are trying the same attribute but with an explicit 
-   axis "(1)" added to the end of the name. */
-L1:
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
-   if ( !strcmp( attrib, "digits" ) ) {
-      astClearDigits( this );
-
-/* Digits(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "digits(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-
-/* There is no function to clear the Digits attribute for an axis
-   directly, so obtain a pointer to the Axis and use this to clear the
-   attribute. */
-      (void) astValidateAxis( this, axis - 1, "astClearDigits(axis)" );
-      ax = astGetAxis( this, axis - 1 );
-      astClearAxisDigits( ax );
-      ax = astAnnul( ax );
-
-/* Direction(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "direction(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearDirection( this, axis - 1 );
-
-/* Epoch. */
-/* ------ */
-   } else if ( !strcmp( attrib, "epoch" ) ) {
-      astClearEpoch( this );
-
-/* Top(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "top(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearTop( this, axis - 1 );
-
-/* Bottom(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "bottom(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearBottom( this, axis - 1 );
-
-/* Domain. */
-/* ------- */
-   } else if ( !strcmp( attrib, "domain" ) ) {
-      astClearDomain( this );
-
-/* Format(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "format(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearFormat( this, axis - 1 );
-
-/* Label(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "label(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLabel( this, axis - 1 );
-
-/* MatchEnd. */
-/* --------- */
-   } else if ( !strcmp( attrib, "matchend" ) ) {
-      astClearMatchEnd( this );
-
-/* MaxAxes. */
-/* -------- */
-   } else if ( !strcmp( attrib, "maxaxes" ) ) {
-      astClearMaxAxes( this );
-
-/* MinAxes. */
-/* -------- */
-   } else if ( !strcmp( attrib, "minaxes" ) ) {
-      astClearMinAxes( this );
-
-/* Permute. */
-/* -------- */
-   } else if ( !strcmp( attrib, "permute" ) ) {
-      astClearPermute( this );
-
-/* PreserveAxes. */
-/* ------------- */
-   } else if ( !strcmp( attrib, "preserveaxes" ) ) {
-      astClearPreserveAxes( this );
-
-/* Symbol(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "symbol(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearSymbol( this, axis - 1 );
-
-/* System. */
-/* ------- */
-   } else if ( !strcmp( attrib, "system" ) ) {
-      astClearSystem( this );
-
-/* AlignSystem. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "alignsystem" ) ) {
-      astClearAlignSystem( this );
-
-/* Title. */
-/* ------ */
-   } else if ( !strcmp( attrib, "title" ) ) {
-      astClearTitle( this );
-
-/* Unit(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "unit(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearUnit( this, axis - 1 );
-
-/* ObsLat. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obslat" ) ) {
-      astClearObsLat( this );
-
-/* ObsLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obslon" ) ) {
-      astClearObsLon( this );
-
-/* ObsAlt. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obsalt" ) ) {
-      astClearObsAlt( this );
-
-/* Dut1 */
-/* --- */
-   } else if ( !strcmp( attrib, "dut1" ) ) {
-      astClearDut1( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then report an error. */
-   } else if ( !strcmp( attrib, "naxes" ) ||
-               !strncmp( attrib, "normunit", 8 ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
-   a Frame axis, then it may refer to an Axis object of a derived type
-   (which has additional attributes not recognised here). */
-   } else if( !free_axis_attrib && ( nc = 0,
-                 ( 1 == astSscanf( attrib, "%*[^()]%n(%d)%n",
-                                      &axis_nc, &axis, &nc ) ) 
-               && ( nc >= len ) ) ) {
-
-/* Validate the axis index and extract the attribute name. */
-      (void) astValidateAxis( this, axis - 1, "astClear" );
-      axis_attrib = astString( attrib, axis_nc );
-
-/* Obtain a pointer to the Axis object. */
-      ax = astGetAxis( this, axis - 1 );
-      if( astOK ) {
-
-/* Assume that we will be able to use the attribute name. */
-         used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt 
-   to access the axis attribute fails, we can try to interpret the
-   attribute name as an attribute of the primary Frame containing the
-   specified axis. Any errors reported in this context will simply be
-   ignored, in particularly they are not deferred for later delivery. */
-         oldrep = astReporting( 0 );
-
-/* Use the Axis astClearAttrib method to clear the attribute value. */
-         astClearAttrib( ax, axis_attrib );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
-   the attribute name was not recognised, clear the status so that we can 
-   try to interpret the attribute name as an attribute of the primary Frame 
-   containing the specified axis. */
-         if( astStatus == AST__BADAT ) {
-            astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
-            astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
-   - otherwise we could end up in an infinite loop. */
-            if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
-   primary frame. */
-               sprintf( pfrm_attrib, "%s(%d)", axis_attrib, paxis + 1 );
-            
-/* Attempt to clear the attribute as an attribute of the primary Frame. */
-               astClearAttrib( pfrm, pfrm_attrib );
-
-/* If this failed, clear the status and indicate that we have not managed to 
-   use the attribute name. */
-               if( !astOK ) {
-                  astClearStatus;
-                  used = 0;
-               }
-
-            } else {
-               used = 0;
-            }
-
-/* If not found attempt to clear the attribute value in the Axis, omitting
-   the axis index. */
-            if( ! used ) {
-               astClearAttrib( pfrm, axis_attrib );
-               if( !astOK ) {
-                  astClearStatus;
-               } else {
-                  used = 1;
-               }
-            }
-
-/* Annul the primary Frame pointer. */
-            pfrm = astAnnul( pfrm );
-         }
-
-/* Re-instate the original error reporting state. */
-         astReporting( oldrep );
-
-/* If we could not use the attribute name, attempt to clear the axis 
-   attribute again, this time retaining the error report. This is done 
-   to ensure the user gets an appropriate error message. */
-         if( !used ) astClearAttrib( ax, axis_attrib );
-      }
-
-/* Annul the Axis pointer and free the memory holding the attribute
-   name. */
-      ax = astAnnul( ax );
-      axis_attrib = astFree( axis_attrib );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
-   and the attribute name does not already include an axis specifier, try 
-   again after appending "(1)" to the end of the attribute name. */
-   } else if( !has_axis && astGetNaxes( this ) == 1 ) {
-
-/* Take a copy of the supplied name, allowing 3 extra characters for the
-   axis specifier "(1)". */
-      axis_attrib = astMalloc( len + 4 );
-      if( axis_attrib ) memcpy( axis_attrib, attrib, len );
-
-/* Indicate we should free the axis_attrib memory. */
-      free_axis_attrib = 1;
-
-/* Add in the axis specifier. */
-      strcpy( axis_attrib + len, "(1)" );
-
-/* Use the new attribute name instead of the supplied name. */
-      old_attrib = attrib;
-      attrib = axis_attrib;
-
-/* Indicate the attribute name now has an axis specifier. */
-      has_axis = 1;
-
-/* Jump back to try interpreting the new attribute name. */
-      goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name is still not recognised, pass it on to the parent
-   method for further interpretation. First re-instate the original attrib 
-   name string if it was changed above. */
-   } else {
-      if( free_axis_attrib ) {
-         attrib = old_attrib;
-         axis_attrib = astFree( axis_attrib );
-      }
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearUnit( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     ClearUnit
-
-*  Purpose:
-*     Clear the Unit attribute of a Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void ClearUnit( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function clears the Unit value for an axis of a Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the axis (zero-based) for which the Unit value is to
-*        be cleared.
-*     unit
-*        The new value to be set.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   const char *units;            /* Pointer to units string */
-   char *old_units;              /* Pointer to copy of original units */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astSetUnit" );
-
-/* Do nothing more if the attribute is already cleared. */
-   if( astTestUnit( this, axis ) ) {
-
-/* Obtain a pointer to the required Axis. */
-      ax = astGetAxis( this, axis );
-
-/* Save a copy of the old units. */
-      units = astGetAxisUnit( ax );
-      old_units = astStore( NULL, units, strlen( units ) + 1 );
-
-/* Clear the Axis Unit attribute value, and then get a pointer to the
-   new default Units string. */
-      astClearAxisUnit( ax );
-      units = astGetUnit( this, axis );
-
-/* The new unit may require the Label and/or Symbol to be changed, but
-   only if the Frames ActiveUnit flag is set. */
-      if( astGetActiveUnit( this ) ) NewUnit( ax, old_units, units,
-                                              "astSetUnit", astGetClass( this ), status );
-
-/* Free resources. */
-      old_units = astFree( old_units );
-
-/* Annul the Axis pointer. */
-      ax = astAnnul( ax );
-   }
-}
-
-static int ConsistentMaxAxes( AstFrame *this, int value, int *status ) {
-/*
-*  Name:
-*     ConsistentMaxAxes
-
-*  Purpose:
-*     Ensure a consistent value when setting the MaxAxes attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int ConsistentMaxAxes( AstFrame *this, int value, int *status )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function accepts a value which is to be set for a Frame's MaxAxes
-*     attribute and returns an appropriately adjusted value to be assigned
-*     to the Frame structure's max_axes component. If necessary, the Frame's
-*     MinAxes attribute is adjusted to remain consistent with the new MaxAxes
-*     value (but note that the MaxAxes value itself is not assigned by this
-*     function).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     value
-*        The new value being set for the MaxAxes attribute.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to be assigned to the max_axes component.
-
-*  Notes:
-*     - A value of -INT_MAX will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return -INT_MAX;
-
-/* Ensure that the result value isn't negative. */
-   result = ( value >= 0 ) ? value : 0;
-
-/* Check if the MinAxes attribute is set. If not, its default value will be
-   consistent with the MaxAxes value (the DefaultMinAxes function ensures
-   this). Otherwise, obtain its value to check for consistency. */
-   if ( astTestMinAxes( this ) ) {
-
-/* If necessary, set a new MinAxes value to prevent it exceeding the MaxAxes
-   value about to be returned. */
-      if ( astGetMinAxes( this ) > result ) astSetMinAxes( this, result );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -INT_MAX;
-
-/* Return the result. */
-   return result;
-}
-
-static int ConsistentMinAxes( AstFrame *this, int value, int *status ) {
-/*
-*  Name:
-*     ConsistentMinAxes
-
-*  Purpose:
-*     Ensure a consistent value when setting the MinAxes attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int ConsistentMinAxes( AstFrame *this, int value, int *status )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function accepts a value which is to be set for a Frame's MinAxes
-*     attribute and returns an appropriately adjusted value to be assigned
-*     to the Frame structure's min_axes component. If necessary, the Frame's
-*     MaxAxes attribute is adjusted to remain consistent with the new MinAxes
-*     value (but note that the MinAxes value itself is not assigned by this
-*     function).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     value
-*        The new value being set for the MinAxes attribute.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to be assigned to the min_axes component.
-
-*  Notes:
-*     - A value of -INT_MAX will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return -INT_MAX;
-
-/* Ensure that the result value isn't negative. */
-   result = ( value >= 0 ) ? value : 0;
-
-/* Check if the MaxAxes attribute is set. If not, its default value will be
-   consistent with the MinAxes value (the DefaultMaxAxes function ensures
-   this). Otherwise, obtain its value to check for consistency. */
-   if ( astTestMaxAxes( this ) ) {
-
-/* If necessary, set a new MaxAxes value to prevent it being less than the
-   MinAxes value about to be returned. */
-      if ( astGetMaxAxes( this ) < result ) astSetMaxAxes( this, result );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -INT_MAX;
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-                             const char *domainlist, int *status ) {
-/*
-*++
-*  Name:
-c     astConvert
-f     AST_CONVERT
-
-*  Purpose:
-*     Determine how to convert between two coordinate systems.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     AstFrameSet *astConvert( AstFrame *from, AstFrame *to,
-c                              const char *domainlist )
-f     RESULT = AST_CONVERT( FROM, TO, DOMAINLIST, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function compares two Frames and determines whether it is
-*     possible to convert between the coordinate systems which they
-*     represent. If conversion is possible, it returns a FrameSet
-*     which describes the conversion and which may be used (as a
-*     Mapping) to transform coordinate values in either direction.
-*
-*     The same function may also be used to determine how to convert
-*     between two FrameSets (or between a Frame and a FrameSet, or
-*     vice versa). This mode is intended for use when (for example)
-*     two images have been calibrated by attaching a FrameSet to each.
-c     astConvert might then be used to search for a
-f     AST_CONVERT might then be used to search for a
-*     celestial coordinate system that both images have in common, and
-*     the result could then be used to convert between the pixel
-*     coordinates of both images -- having effectively used their
-*     celestial coordinate systems to align them.
-*
-*     When using FrameSets, there may be more than one possible
-*     intermediate coordinate system in which to perform the
-*     conversion (for instance, two FrameSets might both have
-*     celestial coordinates, detector coordinates, pixel coordinates,
-*     etc.). A comma-separated list of coordinate system domains may
-*     therefore be given which defines a priority order to use when
-*     selecting the intermediate coordinate system.  The path used for
-*     conversion must go via an intermediate coordinate system whose
-*     Domain attribute matches one of the domains given. If conversion
-*     cannot be achieved using the first domain, the next one is
-*     considered, and so on, until success is achieved.
-
-*  Parameters:
-c     from
-f     FROM = INTEGER (Given)
-*        Pointer to a Frame which represents the "source" coordinate
-*        system.  This is the coordinate system in which you already
-*        have coordinates available.
-*
-*        If a FrameSet is given, its current Frame (as determined by
-*        its Current attribute) is taken to describe the source
-*        coordinate system. Note that the Base attribute of this
-*        FrameSet may be modified by this function to indicate which
-*        intermediate coordinate system was used (see under
-*        "FrameSets" in the "Applicability" section for details).
-c     to
-f     TO = INTEGER (Given)
-*        Pointer to a Frame which represents the "destination"
-*        coordinate system. This is the coordinate system into which
-*        you wish to convert your coordinates.
-*
-*        If a FrameSet is given, its current Frame (as determined by
-*        its Current attribute) is taken to describe the destination
-*        coordinate system. Note that the Base attribute of this
-*        FrameSet may be modified by this function to indicate which
-*        intermediate coordinate system was used (see under
-*        "FrameSets" in the "Applicability" section for details).
-c     domainlist
-f     DOMAINLIST = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing a
-f        A character string containing a
-*        comma-separated list of Frame domains. This may be used to
-*        define a priority order for the different intermediate
-*        coordinate systems that might be used to perform the
-*        conversion.
-*
-*        The function will first try to obtain a conversion by making
-*        use only of an intermediate coordinate system whose Domain
-*        attribute matches the first domain in this list. If this
-*        fails, the second domain in the list will be used, and so on,
-*        until conversion is achieved. A blank domain (e.g. two
-*        consecutive commas) indicates that all coordinate systems
-*        should be considered, regardless of their domains.
-*
-*        This list is case-insensitive and all white space is ignored.
-*        If you do not wish to restrict the domain in this way,
-c        you should supply an empty string. This is normally
-f        you should supply a blank string. This is normally
-*        appropriate if either of the source or destination coordinate
-*        systems are described by Frames (rather than FrameSets),
-*        since there is then usually only one possible choice of
-*        intermediate coordinate system.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astConvert()
-f     AST_CONVERT = INTEGER
-*        If the requested coordinate conversion is possible, the
-*        function returns a pointer to a FrameSet which describes the
-*        conversion. Otherwise, a null Object pointer (AST__NULL) is
-*        returned without error.
-*
-*        If a FrameSet is returned, it will contain two Frames. Frame
-*        number 1 (its base Frame) will describe the source coordinate
-c        system, corresponding to the "from" parameter. Frame number 2
-f        system, corresponding to the FROM argument. Frame number 2
-*        (its current Frame) will describe the destination coordinate
-c        system, corresponding to the "to" parameter. The Mapping
-f        system, corresponding to the TO argument. The Mapping
-*        which inter-relates these two Frames will perform the
-*        required conversion between their respective coordinate
-*        systems.
-*
-*        Note that a FrameSet may be used both as a Mapping and as a
-*        Frame.  If the result is used as a Mapping (e.g. with
-c        astTran2), then it provides a means of converting coordinates
-f        AST_TRAN2), then it provides a means of converting coordinates
-*        from the source to the destination coordinate system (or
-*        vice versa if its inverse transformation is selected). If it
-*        is used as a Frame, its attributes will describe the
-*        destination coordinate system.
-
-*  Applicability:
-*     DSBSpecFrame
-*        If the AlignSideBand attribute is non-zero, alignment occurs in the 
-*        upper sideband expressed within the spectral system and standard of 
-*        rest given by attributes AlignSystem and AlignStdOfRest. If
-*        AlignSideBand is zero, the two DSBSpecFrames are aligned as if
-*        they were simple SpecFrames (i.e. the SideBand is ignored).
-*     Frame
-*        This function applies to all Frames. Alignment occurs within the
-*        coordinate system given by attribute AlignSystem.
-*     FrameSet
-c        If either of the "from" or "to" parameters is a pointer to a
-f        If either of the FROM or TO arguments is a pointer to a
-c        FrameSet, then astConvert will attempt to convert from the
-f        FrameSet, then AST_CONVERT will attempt to convert from the
-c        coordinate system described by the current Frame of the "from"
-f        coordinate system described by the current Frame of the FROM
-c        FrameSet to that described by the current Frame of the "to"
-f        FrameSet to that described by the current Frame of the TO
-*        FrameSet.
-*
-*        To achieve this, it will consider all of the Frames within
-*        each FrameSet as a possible way of reaching an intermediate
-*        coordinate system that can be used for the conversion. There
-*        is then the possibility that more than one conversion path
-*        may exist and, unless the choice is sufficiently restricted
-c        by the "domainlist" string, the sequence in which the Frames
-f        by the DOMAINLIST string, the sequence in which the Frames
-*        are considered can be important. In this case, the search
-*        for a conversion path proceeds as follows:
-c        - Each field in the "domainlist" string is considered in turn.
-f        - Each field in the DOMAINLIST string is considered in turn.
-*        - The Frames within each FrameSet are considered in a
-*        specific order: (1) the base Frame is always considered
-*        first, (2) after this come all the other Frames in
-*        Frame-index order (but omitting the base and current Frames),
-*        (3) the current Frame is always considered last.  However, if
-*        either FrameSet's Invert attribute is set to a non-zero value
-*        (so that the FrameSet is inverted), then its Frames are
-*        considered in reverse order. (Note that this still means that
-*        the base Frame is considered first and the current Frame
-*        last, because the Invert value will also cause these Frames
-*        to swap places.)
-*        - All source Frames are first considered (in the appropriate
-*        order) for conversion to the first destination Frame. If no
-*        suitable intermediate coordinate system emerges, they are
-*        then considered again for conversion to the second
-*        destination Frame (in the appropriate order), and so on.
-*        - Generally, the first suitable intermediate coordinate
-*        system found is used. However, the overall Mapping between
-*        the source and destination coordinate systems is also
-*        examined.  Preference is given to cases where both the
-*        forward and inverse transformations are defined (as indicated
-*        by the TranForward and TranInverse attributes). If only one
-*        transformation is defined, the forward one is preferred.
-*        - If the domain of the intermediate coordinate system matches
-c        the current "domainlist" field, the conversion path is
-f        the current DOMAINLIST field, the conversion path is
-c        accepted. Otherwise, the next "domainlist" field is considered
-f        accepted. Otherwise, the next DOMAINLIST field is considered
-*        and the process repeated.
-*
-*        If conversion is possible, the Base attributes of the two
-*        FrameSets will be modified on exit to identify the Frames
-*        used to access the intermediate coordinate system which was
-*        finally accepted.
-*
-*        Note that it is possible to force a particular Frame within a
-*        FrameSet to be used as the basis for the intermediate
-*        coordinate system, if it is suitable, by (a) focussing
-*        attention on
-c        it by specifying its domain in the "domainlist" string, or (b)
-f        it by specifying its domain in the DOMAINLIST string, or (b)
-*        making it the base Frame, since this is always considered
-*        first.
-*     SpecFrame
-*        Alignment occurs within the spectral system and standard of rest 
-*        given by attributes AlignSystem and AlignStdOfRest.
-*     TimeFrame
-*        Alignment occurs within the time system and time scale given by 
-*        attributes AlignSystem and AlignTimeScale.
-
-*  Examples:
-c     cvt = astConvert( a, b, "" );
-f     CVT = AST_CONVERT( A, B, ' ', STATUS )
-*        Attempts to convert between the coordinate systems represented
-c        by "a" and "b" (assumed to be Frames). If successful, a FrameSet
-f        by A and B (assumed to be Frames). If successful, a FrameSet
-c        is returned via the "cvt" pointer which may be used to apply the
-f        is returned via the CVT pointer which may be used to apply the
-c        conversion to sets of coordinates (e.g. using astTran2).
-f        conversion to sets of coordinates (e.g. using AST_TRAN2).
-c     cvt = astConvert( astSkyFrame(""), astSkyFrame("Equinox=2005"), "" );
-f     CVT = AST_CONVERT( AST_SKYFRAME( ' ', STATUS ), AST_SKYFRAME( 'Equinox=2005', STATUS ), ' ', STATUS )
-*        Creates a FrameSet which describes precession in the default
-*        FK5 celestial coordinate system between equinoxes J2000 (also
-c        the default) and J2005. The returned "cvt" pointer may then
-f        the default) and J2005. The returned CVT pointer may then
-c        be passed to astTran2 to apply this precession correction to
-f        be passed to AST_TRAN2 to apply this precession correction to
-*        any number of coordinate values given in radians.
-*
-*        Note that the returned FrameSet also contains information
-*        about how to format coordinate values. This means that
-*        setting its Report attribute to 1 is a simple way to obtain
-*        printed output (formatted in sexagesimal notation) to show
-*        the coordinate values before and after conversion.
-c     cvt = astConvert( a, b, "sky,detector," );
-f     CVT = AST_CONVERT( A, B, 'SKY,DETECTOR,', STATUS )
-*        Attempts to convert between the coordinate systems
-c        represented by the current Frames of "a" and "b"
-f        represented by the current Frames of A and B
-*        (now assumed to be FrameSets), via the intermediate "SKY"
-*        coordinate system.  This, by default, is the Domain
-*        associated with a celestial coordinate system represented by
-*        a SkyFrame.
-*
-*        If this fails (for example, because either FrameSet lacks
-*        celestial coordinate information), then the user-defined
-*        "DETECTOR" coordinate system is used instead. If this also
-*        fails, then all other possible ways of achieving conversion
-*        are considered before giving up.
-*
-c        The returned pointer "cvt" indicates whether conversion was
-f        The returned pointer CVT indicates whether conversion was
-*        possible and will have the value AST__NULL if it was not. If
-c        conversion was possible, "cvt" will point at a new FrameSet
-f        conversion was possible, CVT will point at a new FrameSet
-*        describing the conversion.
-*
-*        The Base attributes of the two FrameSets
-c        will be set by astConvert to indicate which of their Frames was
-f        will be set by AST_CONVERT to indicate which of their Frames was
-*        used for the intermediate coordinate system. This means that
-*        you can subsequently determine which coordinate system was
-*        used by enquiring the Domain attribute of either base Frame.
-
-*  Notes:
-*     -  The Mapping represented by the returned FrameSet results in
-*     alignment taking place in the coordinate system specified by the
-c     AlignSystem attribute of the "to" Frame. See the description of the
-f     AlignSystem attribute of the TO Frame. See the description of the
-*     AlignSystem attribute for further details.
-*     - When aligning (say) two images, which have been calibrated by
-*     attaching FrameSets to them, it is usually necessary to convert
-*     between the base Frames (representing "native" pixel
-*     coordinates) of both FrameSets. This may be achieved by
-*     inverting the FrameSets (e.g. using astInvert) so as to
-*     interchange their base and current Frames before using
-*     astConvert.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-* Implementation Notes:
-*    This function is simply a wrap-up for the protected astConvertX
-*    method which performs the required processing but swaps the order
-*    of the first two arguments. This is a trick to allow the
-*    astConvert method to be over-ridden by derived classes on the
-*    basis of the class of either of the first two arguments.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Invoke the "astConvertX" method with the first two arguments
-   swapped. */
-   return astConvertX( to, from, domainlist );
-}
-
-static AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
-                              const char *domainlist, int *status ) {
-/*
-*+
-*  Name:
-*     astConvertX
-
-*  Purpose:
-*     Determine how to convert between two coordinate systems.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstFrameSet *astConvertX( AstFrame *to, AstFrame *from,
-*                               const char *domainlist )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function performs the processing for the public astConvert
-*     method and has exactly the same interface except that the order
-*     of the first two arguments is swapped. This is a trick to allow
-*     the astConvert method to be over-ridden by derived classes on
-*     the basis of the class of either of its first two arguments.
-*
-*     See the astConvert method for details of the interface.
-*-
-
-*  Implementation Deficiencies:
-*     - This function's job is basically to negotiate with two Frames
-*     to try and find a mutually agreeable coordinate system for
-*     conversion.  Ideally, it should be able to juggle the number of
-*     axes, etc. to do this.  At present, however, the implementation
-*     is much simpler. This is adequate for the Frame classes which
-*     exist at the time of writing, but the implementation may need
-*     beefing up in future.
-*     - One likely problem is with attributes which default in both
-*     the source and destination Frames. This means they also default
-*     in the common coordinate system. If these default values were to
-*     differ when matching different target Frames, however, we would
-*     be in trouble, because the common coordinate system would not
-*     then be remaining constant. The longer-term solution to this is
-*     probably to provide some mechanism to "fix" all attribute values
-*     for a Frame, by taking any attributes that are un-set and
-*     explicitly setting a firm value (equal to the default) so they
-*     cannot then change.
-*/
-
-/* Local Variables: */
-   AstFrameSet *result;          /* Pointer to Mapping to be returned */
-   AstFrame *ftmp;                /* Pointer to returned Frame */
-   AstMapping **map1_address;    /* Location of first Mapping pointer */
-   AstMapping **map2_address;    /* Location of second Mapping pointer */
-   AstMapping *common0;          /* Initial common coordinate system */
-   AstMapping *common1;          /* Improved common coordinate system */
-   AstMapping *common2;          /* Final common coordinate system */
-   AstMapping *frame1;           /* Pointer to Frame for first match */
-   AstMapping *frame2;           /* Pointer to Frame for second match */
-   AstMapping *from_map;         /* Pointer to "from" Mapping */
-   AstMapping *map;              /* Pointer to conversion Mapping */
-   AstMapping *result_map;       /* Pointer to result Mapping */
-   AstMapping *tmp;              /* Temporary Mapping pointer */
-   AstMapping *to_map;           /* Pointer to "to" Mapping */
-   char *domain;                 /* Pointer to result domain */
-   char *domain_end;             /* Pointer to null at end of domain */
-   char *domainlist_copy;        /* Pointer to copy of domainlist */
-   int *axes1;                   /* Pointer to axis assignments */
-   int *axes2;                   /* Pointer to axis assignments */
-   int best_score;               /* Score assigned to best match */
-   int icom;                     /* Common coordinate system loop counter */
-   int match1;                   /* First match succeeded? */
-   int match2;                   /* Second match succeeded? */
-   int match;                    /* Overall match found? */
-   int perfect;                  /* Perfect match found? */
-   int score;                    /* Score assigned to match */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   result_map = NULL;
-
-/* Make a temporary copy of the domains list. */
-   domainlist_copy = astStore( NULL, domainlist,
-                               strlen( domainlist ) + (size_t) 1 );
-   if ( astOK ) {
-
-/* Loop to inspect each comma-separated field in the domains list
-   until an error occurs, all the domains are used up, or a match is
-   found. */
-      domain = domainlist_copy;
-      match = 0;
-      while ( astOK && domain && !match ) {
-
-/* Change the comma at the end of each field to a null to terminate
-   the domain. Then convert the domain to upper case and eliminate
-   white space. */
-         if ( ( domain_end = strchr( domain, ',' ) ) ) *domain_end = '\0';
-         CleanDomain( domain, status );
-
-/* For any given domain, we will ignore imperfect matches in favour of
-   better ones by assigning a score to each match. Initialise the best
-   score value for the current domain. */
-         best_score = -1;
-
-/* Loop to consider both the "to" and "from" Frames in turn as the
-   basis of a possible common coordinate system. Quit looping early if
-   an error occurs or a perfect match is found. */
-         perfect = 0;
-         for ( icom = 0; astOK && !perfect && ( icom <= 1 ); icom++ ) {
-
-/* Make a copy of the Frame representing the initial guess at a common
-   coordinate system. We will use this to probe the other
-   Frame. Ensure that axes are not preserved (so that we convert to
-   the common axis number/order). */
-            common0 = astCopy( icom ? from : to );
-            astSetPreserveAxes( common0, 0 );
-
-/* Also, if the current domain is not blank, set the Domain attribute (so
-   we will only find coordinate systems which match the current
-   "domainlist" field). */
-            if ( *domain ) astSetDomain( common0, domain );
-
-/* Obtain a pointer to the other Frame. */
-            frame1 = astClone( icom ? to : from );
-
-/* Set the address at which to store the resulting Mapping pointer. */
-            map1_address = icom ? &to_map : &from_map;
-
-/* See if conversion from "frame1" to the common coordinate system is
-   possible.  If successful, this results in a new approximation
-   ("common1") to the possible common coordinate system. */
-            match1 = astMatch( common0, frame1, &axes1, &axes2,
-                               map1_address, &ftmp );
-            common1 = (AstMapping *) ftmp;
-
-/* If successful, free memory allocated for the axis association
-   arrays, which are not needed. */
-            if ( astOK && match1 ) {
-               axes1 = astFree( axes1 );
-               axes2 = astFree( axes2 );
-
-/* Using the improved approximation to the common coordinate system,
-   now test if conversion from the alternative Frame "frame2" is
-   possible. */
-               frame2 = astClone( icom ? from : to );
-               map2_address = icom ? &from_map : &to_map;
-               astSetPreserveAxes( common1, 0 );
-               match2 = astMatch( common1, frame2, &axes1, &axes2,
-                                  map2_address, &ftmp );
-               common2 = (AstMapping *) ftmp;
-
-/* If successful, free memory allocated for the axis association
-   arrays, which are not needed. */
-               if ( astOK && match2 ) {
-                  axes1 = astFree( axes1 );
-                  axes2 = astFree( axes2 );
-
-/* Invert the "to" Mapping and concatenate the two Mappings to
-   describe the conversion between the "from" and "to" Frames. Then
-   simplify the result. */
-                  astInvert( to_map );
-                  tmp = (AstMapping *) astCmpMap( from_map, to_map, 1, "", status );
-                  map = astSimplify( tmp );
-                  tmp = astAnnul( tmp );
-
-/* Assign a score that favours Mappings with both transformations
-   available over those with only one, and Mappings with only a
-   forward transformation over those with only an inverse
-   transformation. */
-                  score = ( astGetTranForward( map ) ? 2 : 0 ) +
-                          ( astGetTranInverse( map ) ? 1 : 0 );
-
-/* If the new score is better than the previous one (or is the first
-   one), note that we have a possible match. */
-                  if ( astOK && ( score > best_score ) ) {
-                     match = 1;
-
-/* Update the best score and note if it indicates a perfect match (in
-   which case we can stop searching at this point). */
-                     best_score = score;
-                     perfect = ( best_score >= 3 );
-
-/* Annul any previous result Mapping pointer and replace it with this
-   better one. */
-                     if ( result_map ) result_map = astAnnul( result_map );
-                     result_map = astClone( map );
-                  }
-
-/* Annul pointers to all the intermediate Objects. */
-                  map = astAnnul( map );
-                  common2 = astAnnul( common2 );
-                  *map2_address = astAnnul( *map2_address );
-               }
-               frame2 = astAnnul( frame2 );
-               common1 = astAnnul( common1 );
-               *map1_address = astAnnul( *map1_address );
-            }
-            frame1 = astAnnul( frame1 );
-            common0 = astAnnul( common0 );
-         }
-
-/* Go on to consider the next field in the domains list. */
-         domain = domain_end ? domain_end + 1 : NULL;
-      }
-   }
-
-/* Free the domain list copy. */
-   domainlist_copy = astFree( domainlist_copy );
-
-/* If returning a result, build the result FrameSet. Then annul the
-   result Mapping pointer. */
-   if ( result_map ) {
-      result = astFrameSet( from, "", status );
-      astAddFrame( result, AST__BASE, result_map, to );
-      result_map = astAnnul( result_map );
-   }
-
-/* If an error occurred, annul the result FrameSet pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int DefaultMaxAxes( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     DefaultMaxAxes
-
-*  Purpose:
-*     Obtain the MaxAxes attribute from a Frame structure, with defaulting.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int DefaultMaxAxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function inspects the max_axes component of a Frame structure and
-*     derives a value for the MaxAxes attribute. If the component's value
-*     indicates that the attribute has not been set, a suitable default is
-*     returned which is consistent with the state of the Frames's MinAxes
-*     attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to be used for the MaxAxes attribute.
-*/
-
-/* Local Variables. */
-   int result;                   /* Result to be returned */
-   int min_axes;                 /* Value of MinAxes attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If the Frame's max_axes component is set, return its value. */
-   if ( this->max_axes != -INT_MAX ) {
-      result = this->max_axes;
-
-/* Otherwise, the preferred default value is the number of Frame axes. */
-   } else {
-      result = astGetNaxes( this );
-
-/* Before returning this value, check if the MinAxes attribute is set. If it
-   is, obtain its value. */
-      if ( astTestMinAxes( this ) ) {
-         min_axes = astGetMinAxes( this );
-
-/* If necessary, increase the MaxAxes default value so that it is not less than
-   MinAxes. */
-         if ( result < min_axes ) result = min_axes;
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int DefaultMinAxes( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     DefaultMinAxes
-
-*  Purpose:
-*     Obtain the MinAxes attribute from a Frame structure, with defaulting.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int DefaultMinAxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function inspects the min_axes component of a Frame structure and
-*     derives a value for the MinAxes attribute. If the component's value
-*     indicates that the attribute has not been set, a suitable default is
-*     returned which is consistent with the state of the Frames's MaxAxes
-*     attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to be used for the MinAxes attribute.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result to be returned */
-   int max_axes;                 /* Value of MaxAxes attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If the Frame's min_axes component is set, return its value. */
-   if ( this->min_axes != -INT_MAX ) {
-      result = this->min_axes;
-
-/* Otherwise, the preferred default value is the number of Frame axes. */
-   } else {
-      result = astGetNaxes( this );
-
-/* Before returning this value, check if the MaxAxes attribute is set. If it
-   is, obtain its value. */
-      if ( astTestMaxAxes( this ) ) {
-         max_axes = astGetMaxAxes( this );
-
-/* If necessary, reduce the MinAxes default value so that it does not exceed
-   MaxAxes. */
-         if ( result > max_axes ) result = max_axes;
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static double Distance( AstFrame *this,
-                        const double point1[], const double point2[], int *status ) {
-/*
-*++
-*  Name:
-c     astDistance
-f     AST_DISTANCE
-
-*  Purpose:
-*     Calculate the distance between two points in a Frame.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     double astDistance( AstFrame *this,
-c                         const double point1[], const double point2[] )
-f     RESULT = AST_DISTANCE( THIS, POINT1, POINT2, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function finds the distance between two points whose Frame
-*     coordinates are given. The distance calculated is that along
-*     the geodesic curve that joins the two points.
-*
-*     For example, in a basic Frame, the distance calculated will be
-*     the Cartesian distance along the straight line joining the two
-*     points. For a more specialised Frame describing a sky coordinate
-*     system, however, it would be the distance along the great circle
-*     passing through two sky positions.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     point1
-f     POINT1( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-c     point2
-f     POINT2( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        containing the coordinates of the second point.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astDistance
-f     AST_DISTANCE = DOUBLE PRECISION
-*        The distance between the two points.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input coordinates has this value.
-*     - A "bad" value will also be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*--
-*/
-
-/* Local Variables: */
-   double delta;                 /* Separation along an axis */
-   double result;                /* Result value to return */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of Frame axes */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain the number of Frame axes. */
-   naxes = astGetNaxes( this );
-   if ( astOK ) {
-
-/* Loop to determine the Cartesian distance between the points. */
-      result = 0.0;
-      for ( axis = 0; axis < naxes; axis++ ) {
-
-/* If any of the coordinates supplied is bad, set the distance to be
-   bad and quit looping. */
-         if ( ( point1[ axis ] == AST__BAD ) ||
-              ( point2[ axis ] == AST__BAD ) ) {
-            result = AST__BAD;
-            break;
-
-/* Otherwise, accumulate the sum of squared separations along each
-   axis. */
-         } else {
-            delta = point1[ axis ] - point2[ axis ];
-            result += ( delta * delta );
-         }
-      }
-
-/* Take the square root to find the distance (if valid). */
-      if ( result != AST__BAD ) result = sqrt( result );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Frames are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     Frame member function (over-rides the astEqual protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two Frames are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Frame.
-*     that
-*        Pointer to the second Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the Frames are equivalent, zero otherwise.
-
-*  Notes:
-*     - The two Frames are considered equivalent if the Mapping between 
-*     them is a UnitMap.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *that;            /* Pointer to the second Frame structure */
-   AstFrame *this;            /* Pointer to the first Frame structure */
-   AstFrameSet *fs;           /* FrameSet connecting the two Frames */
-   AstMapping *map1;          /* Mapping connecting the two Frames */
-   AstMapping *map2;          /* Simplified mapping connecting two Frames */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Checks that the second object is of the same class as the first . */
-   if( !strcmp( astGetClass( this_object ), astGetClass( that_object ) ) ){
-
-/* Obtain pointers to the two Frame structures. */
-      this = (AstFrame *) this_object;
-      that = (AstFrame *) that_object;
-
-/* Get the Mapping between them, and see if it is a UnitMap. */
-      fs = astConvert( that, this, "" );
-      if( fs ) {
-         map1 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         map2 = astSimplify( map1 );
-         result = astIsAUnitMap( map2 );
-         map1 = astAnnul( map1 );
-         map2 = astAnnul( map2 );
-         fs = astAnnul( fs );
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int Fields( AstFrame *this, int axis, const char *fmt, 
-                   const char *str, int maxfld, char **fields, 
-                   int *nc, double *val, int *status ) {
-/*
-*+
-*  Name:
-*     astFields
-
-*  Purpose:
-*     Identify numerical fields within a formatted Axis value.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astFields( AstFrame *this, int axis, const char *fmt, 
-*                    const char *str, int maxfld, char **fields, 
-*                    int *nc, double *val ) 
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function identifies the numerical fields within a Frame axis 
-*     value that has been formatted using astAxisFormat. It assumes that 
-*     the value was formatted using the supplied format string. It also
-*     returns the equivalent floating point value.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the Frame axis for which the values have been
-*        formatted (axis numbering starts at zero for the first axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format used when creating "str".
-*     str
-*        Pointer to a constant null-terminated string containing the
-*        formatted value.
-*     maxfld
-*        The maximum number of fields to identify within "str".
-*     fields
-*        A pointer to an array of at least "maxfld" character pointers. 
-*        Each element is returned holding a pointer to the start of the 
-*        corresponding field  in "str" (in the order in which they occur 
-*        within "str"), or NULL if no corresponding field can be found. 
-*     nc
-*        A pointer to an array of at least "maxfld" integers. Each
-*        element is returned holding the number of characters in the
-*        corresponding field, or zero if no corresponding field can be
-*        found.
-*     val
-*        Pointer to a location at which to store the value
-*        equivalent to the returned field values. If this is NULL, 
-*        it is ignored.
-
-*  Returned Value:
-*     The number of fields succesfully identified and returned.
-
-*  Notes:
-*     - Leading and trailing spaces are ignored.
-*     - If the formatted value is not consistent with the supplied format
-*     string, then a value of zero will be returned, "fields" will be
-*     returned holding NULLs, "nc" will be returned holding zeros, and
-*     "val" is returned holding VAL__BAD.
-*     - Fields are counted from the start of the formatted string. If the
-*     string contains more than "maxfld" fields, then trailing fields are
-*     ignored.
-*     - If this function is invoked with the global error status set, or 
-*     if it should fail for any reason, then a value of zero will be returned 
-*     as the function value, and "fields", "nc" and "val"  will be returned 
-*     holding their supplied values
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   int result;                   /* Result field count to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index and obtain a pointer to the required
-   Axis. */
-   (void) astValidateAxis( this, axis, "astFields" );
-   ax = astGetAxis( this, axis );
-
-/* Invoke the Axis astAxisFields method to perform the processing. */
-   result = astAxisFields( ax, fmt, str, maxfld, fields, nc, val );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrameSet *FindFrame( AstFrame *target, AstFrame *template,
-                               const char *domainlist, int *status ) {
-/*
-*++
-*  Name:
-c     astFindFrame
-f     AST_FINDFRAME
-
-*  Purpose:
-*     Find a coordinate system with specified characteristics.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     AstFrameSet *astFindFrame( AstFrame *target, AstFrame *template,
-c                                const char *domainlist )
-f     RESULT = AST_FINDFRAME( TARGET, TEMPLATE, DOMAINLIST, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function uses a "template" Frame to search another Frame
-*     (or FrameSet) to identify a coordinate system which has a
-*     specified set of characteristics. If a suitable coordinate
-*     system can be found, the function returns a pointer to a
-*     FrameSet which describes the required coordinate system and how
-*     to convert coordinates to and from it.
-*
-*     This function is provided to help answer general questions about
-*     coordinate systems, such as typically arise when coordinate
-*     information is imported into a program as part of an initially
-*     unknown dataset. For example:
-*     - Is there a wavelength scale?
-*     - Is there a 2-dimensional coordinate system?
-*     - Is there a celestial coordinate system?
-*     - Can I plot the data in ecliptic coordinates?
-*
-*     You can also use this function as a means of reconciling a
-*     user's preference for a particular coordinate system (for
-*     example, what type of axes to draw) with what is actually
-*     possible given the coordinate information available.
-*
-*     To perform a search, you supply a "target" Frame (or FrameSet)
-*     which represents the set of coordinate systems to be searched.
-*     If a basic Frame is given as the target, this set of coordinate
-*     systems consists of the one described by this Frame, plus all
-*     other "virtual" coordinate systems which can potentially be
-*     reached from it by applying built-in conversions (for example,
-*     any of the celestial coordinate conversions known to the AST
-*     library would constitute a "built-in" conversion). If a FrameSet
-*     is given as the target, the set of coordinate systems to be
-*     searched consists of the union of those represented by all the
-*     individual Frames within it.
-*
-*     To select from this large set of possible coordinate systems,
-*     you supply a "template" Frame which is an instance of the type
-*     of Frame you are looking for. Effectively, you then ask the
-*     function to "find a coordinate system that looks like this".
-*
-*     You can make your request more or less specific by setting
-*     attribute values for the template Frame. If a particular
-*     attribute is set in the template, then the function will only
-*     find coordinate systems which have exactly the same value for
-*     that attribute.  If you leave a template attribute un-set,
-*     however, then the function has discretion about the value the
-*     attribute should have in any coordinate system it finds. The
-*     attribute will then take its value from one of the actual
-*     (rather than virtual) coordinate systems in the target. If the
-*     target is a FrameSet, its Current attribute will be modified to
-*     indicate which of its Frames was used for this purpose.
-*
-*     The result of this process is a coordinate system represented by
-*     a hybrid Frame which acquires some attributes from the template
-*     (but only if they were set) and the remainder from the
-*     target. This represents the "best compromise" between what you
-*     asked for and what was available. A Mapping is then generated
-*     which converts from the target coordinate system to this hybrid
-*     one, and the returned FrameSet encapsulates all of this
-*     information.
-
-*  Parameters:
-c     target
-f     TARGET = INTEGER (Given)
-*        Pointer to the target Frame (or FrameSet).
-*
-*        Note that if a FrameSet is supplied (and a suitable
-*        coordinate system is found), then its Current attribute will
-*        be modified to indicate which Frame was used to obtain
-*        attribute values which were not specified by the template.
-*        This Frame will, in some sense, represent the "closest"
-*        non-virtual coordinate system to the one you requested.
-c     template
-f     TEMPLATE = INTEGER (Given)
-*        Pointer to the template Frame, which should be an instance of
-*        the type of Frame you wish to find. If you wanted to find a
-*        Frame describing a celestial coordinate system, for example,
-*        then you might use a SkyFrame here. See the "Examples"
-*        section for more ideas.
-c     domainlist
-f     DOMAINLIST = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing a
-f        A character string containing a
-*        comma-separated list of Frame domains. This may be used to
-*        establish a priority order for the different types of
-*        coordinate system that might be found.
-*
-*        The function will first try to find a suitable coordinate
-*        system whose Domain attribute equals the first domain in this
-*        list. If this fails, the second domain in the list will be
-*        used, and so on, until a result is obtained. A blank domain
-*        (e.g. two consecutive commas) indicates that any coordinate
-*        system is acceptable (subject to the template) regardless of
-*        its domain.
-*
-*        This list is case-insensitive and all white space is ignored.
-*        If you do not wish to restrict the domain in this way,
-c        you should supply an empty string.
-f        you should supply a blank string.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFindFrame()
-f     AST_FINDFRAME = INTEGER
-*        If the search is successful, the function returns a pointer
-*        to a FrameSet which contains the Frame found and a
-*        description of how to convert to (and from) the coordinate
-*        system it represents. Otherwise, a null Object pointer
-*        (AST__NULL) is returned without error.
-*
-*        If a FrameSet is returned, it will contain two Frames. Frame
-*        number 1 (its base Frame) represents the target coordinate
-*        system and will be the same as the (base Frame of the)
-*        target. Frame number 2 (its current Frame) will be a Frame
-*        representing the coordinate system which the function
-*        found. The Mapping which inter-relates these two Frames will
-*        describe how to convert between their respective coordinate
-*        systems.
-*
-*        Note that a FrameSet may be used both as a Mapping and as a
-*        Frame. If the result is used as a Mapping (e.g. with
-*        astTran2), then it provides a means of converting coordinates
-*        from the target coordinate system into the new coordinate
-*        system that was found (and vice versa if its inverse
-*        transformation is selected). If it is used as a Frame, its
-*        attributes will describe the new coordinate system.
-
-*  Applicability:
-*     Frame
-*        This function applies to all Frames.
-*     FrameSet
-*        If the target is a FrameSet, the possibility exists that
-*        several of the Frames within it might be matched by the
-*        template.  Unless the choice is sufficiently restricted by
-c        the "domainlist" string, the sequence in which Frames are
-f        the DOMAINLIST string, the sequence in which Frames are
-*        searched can then become important. In this case, the search
-*        proceeds as follows:
-c        - Each field in the "domainlist" string is considered in turn.
-f        - Each field in the DOMAINLIST string is considered in turn.
-*        - An attempt is made to match the template to each of the
-*        target's Frames in the order: (1) the current Frame, (2) the
-*        base Frame, (3) each remaining Frame in the order of being
-*        added to the target FrameSet.
-*        - Generally, the first match found is used. However, the
-*        Mapping between the target coordinate system and the
-*        resulting Frame is also examined. Preference is given to
-*        cases where both the forward and inverse transformations are
-*        defined (as indicated by the TranForward and TranInverse
-*        attributes). If only one transformation is defined, the
-*        forward one is preferred.
-*        - If a match is found and the domain of the resulting Frame also
-c        matches the current "domainlist" field, it is
-f        matches the current DOMAINLIST field, it is
-c        accepted. Otherwise, the next "domainlist" field is considered
-f        accepted. Otherwise, the next DOMAINLIST field is considered
-*        and the process repeated.
-*
-*        If a suitable coordinate system is found, the Current
-*        attribute of the target FrameSet will be modified on exit to
-*        identify the Frame whose match with the target was eventually
-*        accepted.
-
-*  Examples:
-c     result = astFindFrame( target, astFrame( 3, "" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 3, ' ', STATUS ), ' ', STATUS )
-*        Searches for a 3-dimensional coordinate system in the target
-*        Frame (or FrameSet). No attributes have been set in the
-c        template Frame (created by astFrame), so no restriction has
-f        template Frame (created by AST_FRAME), so no restriction has
-*        been placed on the required coordinate system, other than
-*        that it should have 3 dimensions. The first suitable Frame
-c        found will be returned as part of the "result" FrameSet.
-f        found will be returned as part of the RESULT FrameSet.
-c     result = astFindFrame( target, astSkyFrame( "" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( ' ', STATUS ), ' ', STATUS )
-*        Searches for a celestial coordinate system in the target
-*        Frame (or FrameSet). The type of celestial coordinate system
-c        is unspecified, so astFindFrame will return the first one
-f        is unspecified, so AST_FINDFRAME will return the first one
-c        found as part of the "result" FrameSet. If the target is
-f        found as part of the RESULT FrameSet. If the target is
-*        a FrameSet, then its Current attribute will be updated to
-*        identify the Frame that was used.
-*
-*        If no celestial coordinate system can be found, a value of
-*        AST__NULL will be returned without error.
-c     result = astFindFrame( target, astSkyFrame( "MaxAxes=100" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( 'MaxAxes=100', STATUS ), ' ', STATUS )
-*        This is like the last example, except that in the event of the
-*        target being a CmpFrame, the component Frames encapsulated by the 
-*        CmpFrame will be searched for a SkyFrame. If found, the returned
-*        Mapping will included a PermMap which selects the required axes
-*        from the target CmpFrame. 
-*
-*        This is acomplished by setting the MaxAxes attribute of the 
-*        template SkyFrame to a large number (larger than or equal to the 
-*        number of axes in the target CmpFrame). This allows the SkyFrame 
-*        to be used as a match for Frames containing from 2 to 100 axes.
-c     result = astFindFrame( target, astSkyFrame( "System=FK5" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( 'System=FK5', STATUS ), ' ', STATUS )
-*        Searches for an equatorial (FK5) coordinate system in the
-*        target. The Equinox value for the coordinate system has not
-*        been specified, so will be obtained from the target. If the
-*        target is a FrameSet, its Current attribute will be updated
-*        to indicate which SkyFrame was used to obtain this value.
-c     result = astFindFrame( target, astFrame( 2, "" ), "sky,pixel," );
-f     RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 2, ' ', STATUS ), 'SKY,PIXEL,', STATUS )
-*        Searches for a 2-dimensional coordinate system in the
-*        target. Initially, a search is made for a suitable coordinate
-*        system whose Domain attribute has the value "SKY". If this
-*        search fails, a search is then made for one with the domain
-*        "PIXEL". If this also fails, then any 2-dimensional
-c        coordinate system is returned as part of the "result"
-f        coordinate system is returned as part of the RESULT
-*        FrameSet.
-*
-*        Only if no 2-dimensional coordinate systems can be reached by
-*        applying built-in conversions to any of the Frames in the
-*        target will a value of AST__NULL be returned.
-c     result = astFindFrame( target, astFrame( 1, "Domain=WAVELENGTH" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 1, 'Domain=WAVELENGTH', STATUS ), ' ', STATUS )
-*        Searches for any 1-dimensional coordinate system in the
-*        target which has the domain "WAVELENGTH".
-c     result = astFindFrame( target, astFrame( 1, "" ), "wavelength" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 1, ' ', STATUS ), 'WAVELENGTH', STATUS )
-*        This example has exactly the same effect as that above. It
-*        illustrates the equivalence of the template's Domain attribute
-c        and the fields in the "domainlist" string.
-f        and the fields in the DOMAINLIST string.
-c     result = astFindFrame( target, astFrame( 1, "MaxAxes=3" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_FRAME( 1, 'MaxAxes=3', STATUS ), ' ', STATUS )
-*        This is a more advanced example which will search for any
-*        coordinate system in the target having 1, 2 or 3
-c        dimensions. The Frame returned (as part of the "result"
-f        dimensions. The Frame returned (as part of the RESULT
-*        FrameSet) will always be 1-dimensional, but will be related
-*        to the coordinate system that was found by a suitable Mapping
-*        (e.g. a PermMap) which simply extracts the first axis.
-*
-*        If we had wanted a Frame representing the actual (1, 2 or
-*        3-dimensional) coordinate system found, we could set the
-*        PreserveAxes attribute to a non-zero value in the template.
-c     result = astFindFrame( target, astSkyFrame( "Permute=0" ), "" );
-f     RESULT = AST_FINDFRAME( TARGET, AST_SKYFRAME( 'Permute=0', STATUS ), ' ', STATUS )
-*        Searches for any celestial coordinate system in the target,
-*        but only finds one if its axes are in the conventional
-*        (longitude,latitude) order and have not been permuted
-c        (e.g. with astPermAxes).
-f        (e.g. with AST_PERMAXES).
-
-*  Notes:
-*     -  The Mapping represented by the returned FrameSet results in
-*     alignment taking place in the coordinate system specified by the
-c     AlignSystem attribute of the "template" Frame. See the description
-f     AlignSystem attribute of the TEMPLATE Frame. See the description
-*     of the AlignSystem attribute for further details.
-*     - Beware of setting the Domain attribute of the template and then
-c     using a "domainlist" string which does not include the template's domain
-f     using a DOMAINLIST string which does not include the template's domain
-*     (or a blank field). If you do so, no coordinate system will be
-*     found.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  More on Using Templates:
-*     A Frame (describing a coordinate system) will be found by this
-*     function if (a) it is "matched" by the template you supply, and
-c     (b) the value of its Domain attribute appears in the "domainlist"
-f     (b) the value of its Domain attribute appears in the DOMAINLIST
-*     string (except that a blank field in this string permits any
-*     domain). A successful match by the template depends on a number
-*     of criteria, as outlined below:
-*     - In general, a template will only match another Frame which
-*     belongs to the same class as the template, or to a derived (more
-*     specialised) class. For example, a SkyFrame template will match
-*     any other SkyFrame, but will not match a basic
-*     Frame. Conversely, a basic Frame template will match any class
-*     of Frame.
-*     - The exception to this is that a Frame of any class can be used to
-*     match a CmpFrame, if that CmpFrame contains a Frame of the same
-*     class as the template. Note however, the MaxAxes and MinAxes
-*     attributes of the template must be set to suitable values to allow
-*     it to match the CmpFrame. That is, the MinAxes attribute must be
-*     less than or equal to the number of axes in the target, and the MaxAxes 
-*     attribute must be greater than or equal to the number of axes in
-*     the target.
-*     - If using a CmpFrame as a template frame, the MinAxes and MaxAxes 
-*     for the template are determined by the MinAxes and MaxAxes values of 
-*     the component Frames within the template. So if you want a template 
-*     CmpFrame to be able to match Frames with different numbers of axes,
-*     then you must set the MaxAxes and/or MinAxes attributes in the component
-*     template Frames, before combining them together into the template 
-*     CmpFrame.
-*     - If a template has a value set for any of its main attributes, then
-*     it will only match Frames which have an identical value for that
-*     attribute (or which can be transformed, using a built-in
-*     conversion, so that they have the required value for that
-*     attribute). If any attribute in the template is un-set, however,
-*     then Frames are matched regardless of the value they may have
-*     for that attribute. You may therefore make a template more or
-*     less specific by choosing the attributes for which you set
-*     values. This requirement does not apply to 'descriptive' attributes
-*     such as titles, labels, symbols, etc.
-*     - An important application of this principle involves the Domain
-*     attribute. Setting the Domain attribute of the template has the
-*     effect of restricting the search to a particular type of Frame
-*     (with the domain you specify).  Conversely, if the Domain
-*     attribute is not set in the template, then the domain of the
-*     Frame found is not relevant, so all Frames are searched.  Note
-*     that the
-c     "domainlist" string provides an alternative way of restricting the
-f     DOMAINLIST string provides an alternative way of restricting the
-*     search in the same manner, but is a more convenient interface if
-*     you wish to search automatically for another domain if the first
-*     search fails.
-*     - Normally, a template will only match a Frame which has the
-*     same number of axes as itself. However, for some classes of
-*     template, this default behaviour may be changed by means of the
-*     MinAxes, MaxAxes and MatchEnd attributes. In addition, the
-*     behaviour of a template may be influenced by its Permute and
-*     PreserveAxes attributes, which control whether it matches Frames
-*     whose axes have been permuted, and whether this permutation is
-*     retained in the Frame which is returned (as opposed to returning
-*     the axes in the order specified in the template, which is the
-*     default behaviour). You should consult the descriptions of these
-*     attributes for details of this more advanced use of templates.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frame;              /* Pointer to result Frame */
-   AstFrameSet *result;          /* Pointer to result FrameSet */
-   AstMapping *map;              /* Pointer to result Mapping */
-   AstMapping *tmp;              /* Temporary Mapping pointer */
-   char *domain_copy;            /* Pointer to copy of result domain */
-   char *domainlist_copy;        /* Pointer to copy of domains list */
-   const char *domain;           /* Pointer to result Domain value */
-   int *target_axes;             /* Pointer to target axis assignments */
-   int *template_axes;           /* Pointer to template axis assignments */
-   int i;                        /* Loop counter for characters */
-   int j;                        /* Character index */
-   int match;                    /* Template matched target? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Allocate space to store a copy of the domains list, with added
-   commas. */
-   domainlist_copy = astMalloc( strlen( domainlist ) + (size_t) 3 );
-   if ( astOK ) {
-
-/* Make a copy of the domains list, with an extra comma added at each
-   end. Also remove all white space and convert to upper case. */
-      domainlist_copy[ 0 ] = ',';
-      for ( i = 0, j = 1; domainlist[ i ]; i++ ) {
-         if ( !isspace( domainlist[ i ] ) ) {
-            domainlist_copy[ j++ ] = toupper( domainlist[ i ] );
-         }
-      }
-      domainlist_copy[ j++ ] = ',';
-      domainlist_copy[ j ] = '\0';
-
-/* Invoke the protected astMatch method associated with the template
-   Frame. This matches the template to the target and returns
-   information about how to convert between the target and the Frame
-   it found (if any). */
-      match = astMatch( template, target,
-                        &template_axes, &target_axes, &map, &frame );
-
-/* If successful, obtain a pointer to the Domain string of the result
-   Frame. Allocate space for a copy of this string, with added
-   commas. */
-      if ( match && astOK ) {
-         domain = astGetDomain( frame );
-         if ( astOK ) {
-            domain_copy = astMalloc( strlen( domain ) + (size_t) 3 );
-            if ( astOK ) {
-
-/* Make a copy of the domain, adding an extra comma at each end. */
-               domain_copy[ 0 ] = ',';
-               for ( i = 0, j = 1; domain[ i ]; i++ ) {
-                  domain_copy[ j++ ] = domain[ i ];
-               }
-               domain_copy[ j++ ] = ',';
-               domain_copy[ j ] = '\0';
-
-/* Test if the domain appears in the domains list (with added
-   commas). If not, test if a blank domain (which permits the result
-   Frame to have any Domain) appears instead. */
-               if ( strstr( domainlist_copy, domain_copy ) ||
-                    strstr( domainlist_copy, ",," ) ) {
-
-/* If the result Frame is acceptable, simplify the result Mapping. */
-                  tmp = astSimplify( map );
-                  map = astAnnul( map );
-                  map = tmp;
-
-/* Build the result FrameSet. */
-                  result = astFrameSet( target, "", status );
-                  astAddFrame( result, AST__BASE, map, frame );
-               }
-            }
-
-/* Free the copy of the result domain. */
-            domain_copy = astFree( domain_copy );
-         }
-
-/* Free space and annul pointers allocated by astMatch. */
-         template_axes = astFree( template_axes );
-         target_axes = astFree( target_axes );
-         map = astAnnul( map );
-         frame = astAnnul( frame );
-      }
-   }
-
-/* Free the copy of the domains list. */
-   domainlist_copy = astFree( domainlist_copy );
-
-/* If an error occurred, annul any result pointer. */
-   if ( !astOK && result ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-const char *astFmtDecimalYr_( double year, int digits, int *status ) {
-/*
-*+
-*  Name:
-*     astFmtDecimalYr
-
-*  Purpose:
-*     Format an epoch expressed in years as a decimal string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *astFmtDecimalYr( double year, int digits )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function formats an epoch expressed in years as a decimal string
-*     and returns a pointer to the result. It is intended for formatting
-*     Frame Epoch values, etc, for display.
-
-*  Parameters:
-*     year
-*        The epoch to be formatted.
-*     digits
-*        The number of digits of precision required.
-
-*  Returned Value:
-*     Pointer to a null terminated string containing the formatted value.
-
-*  Notes:
-*     - The result string is stored in static memory and may be
-*     over-written by a subsequent invocation of this function.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   const char *result;           /* Pointer value to return */
-   int nc;                       /* Number of characters in buffer */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Limit the precision to what is meaningful. */
-   digits = ( digits > DBL_DIG ) ? DBL_DIG : digits;
-
-/* Format the year value. Use "g" format to avoid buffer overflow and
-   to get useful diagnostic output if a silly value is given. */
-   nc = sprintf( astfmtdecimalyr_buff, "%#.*g", digits, year );
-
-/* Set the result value. */
-   result = astfmtdecimalyr_buff;
-
-/* Loop to remove redundant zeros from the end of the result. */
-   while ( astfmtdecimalyr_buff[ --nc ] == '0' ) astfmtdecimalyr_buff[ nc ] = '\0';
-
-/* If the last character is now a decimal point, put back one zero. */
-   if ( astfmtdecimalyr_buff[ nc ] == '.' ) {
-      astfmtdecimalyr_buff[ ++nc ] = '0';
-      astfmtdecimalyr_buff[ ++nc ] = '\0';
-   }
-
-/* Return the result. */
-   return astfmtdecimalyr_buff;
-}
-
-static const char *Format( AstFrame *this, int axis, double value, int *status ) {
-/*
-*+
-*  Name:
-*     astFormat
-
-*  Purpose:
-*     Format a coordinate value for a Frame axis.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *astFormat( AstFrame *this, int axis, double value )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns a pointer to a string containing the
-*     formatted (character) version of a coordinate value for a Frame
-*     axis. The formatting applied is determined by the Frame's
-*     attributes and, in particular, by any Format attribute string
-*     that has been set for the axis. A suitable default format will
-*     be applied if necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the Frame axis for which formatting is to be
-*        performed (axis numbering starts at zero for the first axis).
-*     value
-*        The coordinate value to be formatted.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Frame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Frame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic astFormat method available
-*     via the protected interface to the Frame class. The public
-*     interface to this method is provided by the astFormatId_
-*     function.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   const char *result;           /* Pointer value to return */
-   int digits_set;               /* Axis Digits attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
-   (void) astValidateAxis( this, axis, "astFormat" );
-   ax = astGetAxis( this, axis );
-
-/* Test if any Axis attributes which may affect the result are undefined (i.e.
-   have not been explicitly set). If so, we over-ride them, giving them
-   temporary values dictated by the Frame. Only the Digits attribute is
-   relevant here. */
-   digits_set = astTestAxisDigits( ax );
-   if ( !digits_set ) astSetAxisDigits( ax, astGetDigits( this ) );
-
-/* Format the value. */
-   result = astAxisFormat( ax, value );
-
-/* Clear any Axis attributes that were temporarily over-ridden. */
-   if ( !digits_set ) astClearAxisDigits( ax );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status ) {
-/*
-*+
-*  Name:
-*     astGap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating Frame axis values.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     double astGap( AstFrame *this, int axis, double gap, int *ntick )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted values for a Frame axis, the returned gap
-*     size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the axis (zero-based) for which a gap is to be found.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   double result;                /* The nice gap value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Validate the axis index and obtain a pointer to the required
-   Axis. */
-   (void) astValidateAxis( this, axis, "astGap" );
-   ax = astGetAxis( this, axis );
-
-/* Find the gap. */
-   result = astAxisGap( ax, gap, ntick );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0.0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetActiveUnit( AstFrame *this, int *status ){
-/*
-*++
-*  Name:
-c     astGetActiveUnit
-f     AST_GETACTIVEUNIT
-
-*  Purpose:
-*     Determines how the Unit attribute will be used.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     int astGetActiveUnit( AstFrame *this )
-f     RESULT = AST_GETACTIVEUNIT( THIS, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function
-f     This routine
-*     returns the current value of the ActiveUnit flag for a Frame. See
-c     the description of the astSetActiveUnit function
-f     the description of the AST_SETACTIVEUNIT routine
-*     for a description of the ActiveUnit flag.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetActiveUnit
-f     AST_GETACTIVEUNIT = LOGICAL
-*        The current value of the ActiveUnit flag.
-
-*  Notes:
-c     - A zero value will be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     - A value of .FALSE. will be returned if this function is
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstAxis *ax;        /* Pointer to axis structure */
-   int i;              /* Index of axis in Frame */
-   int has_skyaxis;    /* Does Frame contain any SkyAxes? */
-   int nax;            /* Number of axes in Frame */
-   int result;         /* The returned value */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* See if the Frame contains a SkyAxis. */
-   has_skyaxis = 0;
-   nax = astGetNaxes( this );
-   for( i = 0; i < nax; i++ ) {
-      ax = astGetAxis( this, i );
-      if( astIsASkyAxis( ax ) ) has_skyaxis = 1;
-      ax = astAnnul( ax );
-   }
-
-/* If the Frame contains a SkyAxis the ActiveUnit flag is always zero. */
-   if( !has_skyaxis ) {   
-
-/* Otherwise, get the value from the Frame. If it has not yet been assigned a 
-   value return the value zero. */
-      result = this->active_unit;
-      if( result == -INT_MAX ) result = 0;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Frame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - The returned string pointer may point at memory allocated
-*     within the Frame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Frame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstAxis *ax;                  /* Pointer to Axis */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   AstSystemType system;         /* System code */
-   char pfrm_attrib[ 100 ];      /* Primary Frame attribute */
-   char *axis_attrib;            /* Pointer to axis attribute name */
-   const char *old_attrib;       /* Pointer to supplied attribute name string */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Double attibute value */
-   double epoch;                 /* Epoch attribute value (as MJD) */
-   int axis;                     /* Frame axis number */
-   int axis_nc;                  /* No. characters in axis attribute name */
-   int digits;                   /* Digits attribute value */
-   int direction;                /* Direction attribute value */
-   int free_axis_attrib;         /* Should axis_attrib be freed? */
-   int has_axis;                 /* Does attrib name include axis specifier? */
-   int len;                      /* Length of attrib string */
-   int match_end;                /* MatchEnd attribute value */
-   int max_axes;                 /* MaxAxes attribute value */
-   int min_axes;                 /* MinAxes attribute value */
-   int naxes;                    /* Naxes attribute value */
-   int nc;                       /* No. characters read by astSscanf */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Axis index within primary frame */
-   int permute;                  /* Permute attribute value */
-   int preserve_axes;            /* PreserveAxes attribute value */
-   int used;                     /* Could the setting string be used? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Set a flag indicating if the attribute name includes an axis
-   specifier. */
-   has_axis = ( strchr( attrib, '(' ) != NULL );
-
-/* A flag indicating that we do not need to free the axis_attrib memory. */
-   free_axis_attrib = 0;
-
-/* Initialise things to avoid compiler warnings. */   
-   axis_attrib = NULL;
-   old_attrib = NULL;
-
-/* Jump back to here if we are trying the same attribute but with an explicit 
-   axis "(1)" added to the end of the name. */
-L1:
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Save the number of axes in the Frame for later use. */
-   naxes = astGetNaxes( this );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Digits. */
-/* ------- */
-   if ( !strcmp( attrib, "digits" ) ) {
-      digits = astGetDigits( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", digits );
-         result = getattrib_buff;
-      }
-
-/* Digits(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "digits(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-
-/* There is no function to obtain the Digits attribute value for an
-   axis directly, so obtain a pointer to the Axis and use this to
-   obtain the value. Use the Frame's Digits attribute instead if the
-   Axis attribute value is not set. */
-      (void) astValidateAxis( this, axis - 1, "astGetDigits(axis)" );
-      ax = astGetAxis( this, axis - 1 );
-      if ( astTestAxisDigits( ax ) ) {
-         digits = astGetAxisDigits( ax );
-      } else {
-         digits = astGetDigits( this );
-      }
-      ax = astAnnul( ax );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", digits );
-         result = getattrib_buff;
-      }
-
-
-/* Direction(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "direction(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      direction = astGetDirection( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", direction );
-         result = getattrib_buff;
-      }
-
-/* Epoch. */
-/* ------ */
-   } else if ( !strcmp( attrib, "epoch" ) ) {
-      epoch = astGetEpoch( this );
-      if ( astOK ) {
-
-/* Format the Epoch as decimal years. Use a Besselian epoch if it will
-   be less than 1984.0, otherwise use a Julian epoch. */
-         result = astFmtDecimalYr( ( epoch < palSlaEpj2d( 1984.0 ) ) ?
-                                   palSlaEpb( epoch ) : palSlaEpj( epoch ), DBL_DIG );
-      }
-
-/* Top(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "top(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = astGetTop( this, axis -1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Bottom(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "bottom(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = astGetBottom( this, axis -1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Domain. */
-/* ------- */
-   } else if ( !strcmp( attrib, "domain" ) ) {
-      result = astGetDomain( this );
-
-/* Format(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "format(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astGetFormat( this, axis - 1 );
-
-/* Label(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "label(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astGetLabel( this, axis - 1 );
-
-/* MatchEnd. */
-/* --------- */
-   } else if ( !strcmp( attrib, "matchend" ) ) {
-      match_end = astGetMatchEnd( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", match_end );
-         result = getattrib_buff;
-      }
-
-/* MaxAxes. */
-/* -------- */
-   } else if ( !strcmp( attrib, "maxaxes" ) ) {
-      max_axes = astGetMaxAxes( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", max_axes );
-         result = getattrib_buff;
-      }
-
-/* MinAxes. */
-/* -------- */
-   } else if ( !strcmp( attrib, "minaxes" ) ) {
-      min_axes = astGetMinAxes( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", min_axes );
-         result = getattrib_buff;
-      }
-
-/* Naxes. */
-/* -----_ */
-   } else if ( !strcmp( attrib, "naxes" ) ) {
-      (void) sprintf( getattrib_buff, "%d", naxes );
-      result = getattrib_buff;
-
-/* Permute. */
-/* -------- */
-   } else if ( !strcmp( attrib, "permute" ) ) {
-      permute = astGetPermute( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", permute );
-         result = getattrib_buff;
-      }
-
-/* PreserveAxes. */
-/* ------------- */
-   } else if ( !strcmp( attrib, "preserveaxes" ) ) {
-      preserve_axes = astGetPreserveAxes( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", preserve_axes );
-         result = getattrib_buff;
-      }
-
-/* Symbol(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "symbol(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astGetSymbol( this, axis - 1 );
-
-/* AlignSystem. */
-/* ------------ */
-/* Obtain the AlignSystem code and convert to a string. */
-   } else if ( !strcmp( attrib, "alignsystem" ) ) {
-      system = astGetAlignSystem( this );
-      if ( astOK ) {
-         result = astSystemString( this, system );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid "
-                     "AlignSystem identification code (%d).", status,
-                     astGetClass( this ), astGetClass( this ), (int) system );
-         }   
-      }
-
-/* System. */
-/* ------- */
-/* Obtain the System code and convert to a string. */
-   } else if ( !strcmp( attrib, "system" ) ) {
-      system = astGetSystem( this );
-      if ( astOK ) {
-         result = astSystemString( this, system );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid "
-                     "System identification code (%d).", status,
-                     astGetClass( this ), astGetClass( this ), (int) system );
-         }   
-      }
-
-/* Title. */
-/* ------ */
-   } else if ( !strcmp( attrib, "title" ) ) {
-      result = astGetTitle( this );
-
-/* Unit(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "unit(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astGetUnit( this, axis - 1 );
-
-/* NormUnit(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "normunit(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astGetNormUnit( this, axis - 1 );
-
-/* ObsLat. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obslat" ) ) {
-      dval = astGetObsLat( this );
-      if ( astOK ) {
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used 
-   for formatting and unformatting ObsLon and ObsLat values. */
-         if( !skyframe ) {
-            astBeginPM;
-            skyframe = astSkyFrame("system=FK5,equinox=J2000,format(2)=dms.2", status );
-            astEndPM;
-         }
-
-/* Display absolute value preceeded by "N" or "S" as appropriate. */
-         if( dval < 0 ) {         
-            (void) sprintf( getattrib_buff, "S%s",  astFormat( skyframe, 1, -dval ) );
-         } else {
-            (void) sprintf( getattrib_buff, "N%s",  astFormat( skyframe, 1, dval ) );
-         }
-         result = getattrib_buff;
-      }
-
-/* ObsLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obslon" ) ) {
-      dval = astGetObsLon( this );
-      if ( astOK ) {
-
-/* Put into range +/- PI. */
-         dval = palSlaDrange( dval );
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used 
-   for formatting and unformatting ObsLon and ObsLat values. */
-         if( !skyframe ) {
-            astBeginPM;
-            skyframe = astSkyFrame( "system=FK5,equinox=J2000,format(2)=dms.2", status );
-            astEndPM;
-         }
-
-/* Display absolute value preceeded by "E" or "W" as appropriate. */
-         if( dval < 0 ) {         
-            (void) sprintf( getattrib_buff, "W%s",  astFormat( skyframe, 1, -dval ) );
-         } else {
-            (void) sprintf( getattrib_buff, "E%s",  astFormat( skyframe, 1, dval ) );
-         }
-         result = getattrib_buff;
-
-      }
-
-/* ObsAlt. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obsalt" ) ) {
-      dval = astGetObsAlt( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Dut1. */
-/* ---- */
-   } else if ( !strcmp( attrib, "dut1" ) ) {
-      dval = astGetDut1( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
-   a Frame axis, then it may refer to an Axis object of a derived type
-   (which has additional attributes not recognised here). */
-   } else if ( !free_axis_attrib && ( nc = 0,
-               ( 1 == astSscanf( attrib, "%*[^()]%n(%d)%n",
-                                      &axis_nc, &axis, &nc ) )
-               && ( nc >= len ) ) ) {
-
-/* Validate the axis index and extract the attribute name. */
-      (void) astValidateAxis( this, axis - 1, "astGet" );
-      axis_attrib = astString( attrib, axis_nc );
-
-/* Obtain a pointer to the Axis object. */
-      ax = astGetAxis( this, axis - 1 );
-      if( astOK ) {
-
-/* Assume that we will be able to use the attribute name. */
-         used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt 
-   to access the axis attribute fails, we can try to interpret the
-   attribute name as an attribute of the primary Frame containing the
-   specified axis. Any errors reported in this context will simply be
-   ignored, in particularly they are not deferred for later delivery. */
-         oldrep = astReporting( 0 );
-
-/* Use the Axis astGetAttrib method to obtain the result. */
-         result = astGetAttrib( ax, axis_attrib );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
-   the attribute name was not recognised, clear the status so that we can 
-   try to interpret the attribute name as an attribute of the primary Frame 
-   containing the specified axis. */
-         if( astStatus == AST__BADAT ) {
-            astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
-            astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
-   - otherwise we could end up in an infinite loop. */
-            if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
-   primary frame. */
-               sprintf( pfrm_attrib, "%s(%d)", axis_attrib, paxis + 1 );
-            
-/* Attempt to use the Axis astGetAttrib method to obtain the result. */
-               result = astGetAttrib( pfrm, pfrm_attrib );
-
-/* If this failed, clear the status and indicate that we have not managed to 
-   use the attribute name. */
-               if( !astOK ) {
-                  astClearStatus;
-                  used = 0;
-               }
-
-            } else {
-               used =  0;
-            }
-
-/* If not found attempt to get the attribute value from the Axis, omitting
-   the axis index. */
-            if( ! used ) {
-               result = astGetAttrib( pfrm, axis_attrib );
-               if( !astOK ) {
-                  astClearStatus;
-               } else {
-                  used = 1;
-               }
-            }
-
-/* Annul the primary Frame pointer. */
-            pfrm = astAnnul( pfrm );
-         }
-
-/* Re-instate the original error reporting state. */
-         astReporting( oldrep );
-
-/* If we could not use the attribute name, attempt to get the axis 
-   attribute again, this time retaining the error report. This is done 
-   to ensure the user gets an appropriate error message. */
-         if( !used ) result = astGetAttrib( ax, axis_attrib );
-      }
-
-/* Annul the Axis pointer and free the memory holding the attribute
-   name. */
-      ax = astAnnul( ax );
-      axis_attrib = astFree( axis_attrib );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
-   and the attribute name does not already include an axis specifier, try 
-   again after appending "(1)" to the end of the attribute name. */
-   } else if( !has_axis && naxes == 1 ) {
-
-/* Take a copy of the supplied name, allowing 3 extra characters for the
-   axis specifier "(1)". */
-      axis_attrib = astMalloc( len + 4 );
-      if( axis_attrib ) memcpy( axis_attrib, attrib, len );
-
-/* Indicate we should free the axis_attrib memory. */
-      free_axis_attrib = 1;
-
-/* Add in the axis specifier. */
-      strcpy( axis_attrib + len, "(1)" );
-
-/* Use the new attribute name instead of the supplied name. */
-      old_attrib = attrib;
-      attrib = axis_attrib;
-
-/* Indicate the attribute name now has an axis specifier. */
-      has_axis = 1;
-
-/* Jump back to try interpreting the new attribute name. */
-      goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name is still not recognised, pass it on to the parent
-   method for further interpretation. First re-instate the original attrib 
-   name string if it was changed above. */
-   } else {
-      if( free_axis_attrib ) {
-         attrib = old_attrib;
-         axis_attrib = astFree( axis_attrib );
-      }
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstAxis *GetAxis( AstFrame *this, int axis, int *status ) {
-/*
-*+
-*  Name:
-*     astGetAxis
-
-*  Purpose:
-*     Obtain a pointer to a specified Axis from a Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstAxis *astGetAxis( AstFrame *this, int axis )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns a pointer to the Axis object associated
-*     with one of the axes of a Frame. This object describes the
-*     quantity which is represented along that axis.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the axis (zero-based) for which an Axis pointer is
-*        required.
-
-*  Returned Value:
-*     A pointer to the requested Axis object.
-
-*  Notes:
-*     - The reference count of the requested Axis object will be
-*     incremented by one to reflect the additional pointer returned by
-*     this function.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *result;              /* Pointer to Axis */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate and permute the axis index. */
-   axis = astValidateAxis( this, axis, "astGetAxis" );
-
-/* If OK, clone the required Axis pointer. */
-   if ( astOK ) result = astClone( this->axis[ axis ] );
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetDefaultLabel( int axis, int *status ) {
-/*
-*  Name:
-*     GetDefaultLabel
-
-*  Purpose:
-*     Return a pointer to a default axis Label string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *GetDefaultLabel( int axis, int *status )
-
-*  Class Membership:
-*     Frame member function 
-
-*  Description:
-*     This function returns a pointer to a string holding a default axis
-*     Label value.
-
-*  Parameters:
-*     axis
-*        Zero based axis index.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a static null-terminated string containing the attribute
-*     value.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Format the axis index, putting the string in a global buffer. */
-   (void) sprintf( label_buff, "Axis %d", axis + 1 );
-
-/* Return a pointer to the global buffer. */
-   return label_buff;
-}
-
-static const char *GetDefaultSymbol( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetDefaultSymbol
-
-*  Purpose:
-*     Return a pointer to a default axis Symbol string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *GetDefaultSymbol( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     Frame member function 
-
-*  Description:
-*     This function returns a pointer to a string holding a default axis
-*     Symbol value.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        Zero based axis index.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a static null-terminated string containing the attribute
-*     value.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Note we use "sprintf" once to determine how many characters are
-   produced by the "%d" format string and then limit the number of
-   characters used from the Domain string in the second invocation of
-   "sprintf" so that the total length of the default Symbol string
-   does not exceed SYMBOL_BUFF_LEN characters. */
-   (void) sprintf( symbol_buff, "%.*s%d",
-                   SYMBOL_BUFF_LEN - sprintf( symbol_buff, "%d", axis + 1 ),
-                   astTestDomain( this ) ? astGetDomain( this ) : "x",
-                   axis + 1 );
-
-/* Use the AddUnderscores function to replace any white space in the Symbol
-   string with underscore characters. */
-   AddUnderscores( symbol_buff, status );
-
-/* Return a pointer to the global buffer. */
-   return symbol_buff;
-}
-
-static const char *GetDefaultTitle( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     GetDefaultTitle
-
-*  Purpose:
-*     Return a pointer to a default Title string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *GetDefaultTitle( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Frame member function 
-
-*  Description:
-*     This function returns a pointer to a string holding a default Title value.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a static null-terminated string containing the attribute
-*     value.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Create the Title value and put it in the global buffer. */
-   (void) sprintf( title_buff, "%d-d coordinate system", astGetNaxes( this ) );
-
-/* Return a pointer to the global buffer. */
-   return title_buff;
-}
-
-static int GetFrameFlags( AstFrame *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetFrameFlags
-
-*  Purpose:
-*     Return the bit mask of flags associated with a Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int *astGetFrameFlags( astFrame *this )
-
-*  Class Membership:
-*     Frame virtual function.
-
-*  Description:
-*     This function returns a bit mask holding the current set of flags
-*     associated with a Frame. See astSetFrameFlags for details of these
-*     flags.
-
-*  Parameters:
-*     this
-*        The Frame.
-
-*  Returned Value:
-*     The bit mask.
-
-*  Notes:
-*     - Zero is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the result. */
-   return this->flags;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is always one because a Frame is treated like a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 1;
-}
- 
-static int GetIsSimple( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsSimple
-
-*  Purpose:
-*     Return the value of the IsSimple attribute for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsSimple( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the protected astGetIsSimple
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsSimple attribute for a
-*     Frame, which is always zero because Frames are not immutable (unlike
-*     non-Frame Mappings).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 0;
-}
-
-static int GetNaxes( AstFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNaxes
-
-*  Purpose:
-*     Determine how many axes a Frame has.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astGetNaxes( AstFrame *this )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns the number of axes for a Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-
-*  Returned Value:
-*     The number of Frame axes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the number of Frame axes. */
-   return this->naxes;
-}
-
-static int GetNin( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetNin
-
-*  Purpose:
-*     Get the number of input coordinates for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int GetNin( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the astGetNin method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function returns the number of input coordinate values
-*     required per point by a Frame, when used as a Mapping (i.e. the
-*     number of dimensions of the space in which input points reside).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Number of coordinate values required.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *this;               /* Pointer to Frame structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_mapping;
-
-/* Return the number of Frame axes. */
-   result = astGetNaxes( this );
-
-/* Return the result. */
-   return result;
-}
-
-static int GetNout( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetNout
-
-*  Purpose:
-*     Get the number of output coordinates for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int GetNout( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the astGetNout method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function returns the number of output coordinate values
-*     generated per point by a Frame, when used as a Mapping (i.e. the
-*     number of dimensions of the space in which output points
-*     reside).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Number of coordinate values generated.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *this;               /* Pointer to Frame structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_mapping;
-
-/* Return the number of Frame axes. */
-   result = astGetNaxes( this );
-
-/* Return the result. */
-   return result;
-}
-
-static const int *GetPerm( AstFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetPerm
-
-*  Purpose:
-*     Access the axis permutation array for a Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const int *astGetPerm( AstFrame *this )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns a pointer to the axis permutation array
-*     for a Frame. This array constitutes a lookup-table that converts
-*     between an axis number supplied externally and the corresponding
-*     index in the Frame's internal axis arrays.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-
-*  Returned Value:
-*     Pointer to the Frame's axis permutation array (a constant array
-*     of int).  Each element of this contains the (zero-based)
-*     internal axis index to be used in place of the external index
-*     which is used to address the permutation array. If the Frame has
-*     zero axes, this pointer will be NULL.
-
-*  Notes:
-*     - This protected method is provided to assist class
-*     implementations which need to implement axis-dependent
-*     extensions to Frame methods, and which therefore need to know
-*     how a Frames's external axis index is converted for internal
-*     use.
-*     - The pointer returned by this function gives direct access to
-*     data internal to the Frame object. It remains valid only so long
-*     as the Frame exists. The permutation array contents may be
-*     modified by other functions which operate on the Frame and this
-*     may render the returned pointer invalid.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Return a pointer to the axis permutation array. */
-   return this->perm;
-}
-
-void astInitFrameVtab_(  AstFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astInitFrameVtab( AstFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Frame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Frame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAFrame ) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->Abbrev = Abbrev;
-   vtab->CheckPerm = CheckPerm;
-   vtab->ClearDigits = ClearDigits;
-   vtab->ClearDirection = ClearDirection;
-   vtab->ClearDomain = ClearDomain;
-   vtab->ClearFormat = ClearFormat;
-   vtab->ClearLabel = ClearLabel;
-   vtab->ClearMatchEnd = ClearMatchEnd;
-   vtab->ClearMaxAxes = ClearMaxAxes;
-   vtab->ClearMinAxes = ClearMinAxes;
-   vtab->ClearPermute = ClearPermute;
-   vtab->ClearPreserveAxes = ClearPreserveAxes;
-   vtab->ClearSymbol = ClearSymbol;
-   vtab->ClearTitle = ClearTitle;
-   vtab->ClearUnit = ClearUnit;
-   vtab->Convert = Convert;
-   vtab->ConvertX = ConvertX;
-   vtab->Angle = Angle;
-   vtab->Distance = Distance;
-   vtab->Fields = Fields;
-   vtab->FindFrame = FindFrame;
-   vtab->MatchAxes = MatchAxes;
-   vtab->MatchAxesX = MatchAxesX;
-   vtab->Format = Format;
-   vtab->Gap = Gap;
-   vtab->GetAxis = GetAxis;
-   vtab->GetDigits = GetDigits;
-   vtab->GetDirection = GetDirection;
-   vtab->GetDomain = GetDomain;
-   vtab->GetFormat = GetFormat;
-   vtab->GetLabel = GetLabel;
-   vtab->GetMatchEnd = GetMatchEnd;
-   vtab->GetMaxAxes = GetMaxAxes;
-   vtab->GetMinAxes = GetMinAxes;
-   vtab->GetNaxes = GetNaxes;
-   vtab->GetPerm = GetPerm;
-   vtab->GetPermute = GetPermute;
-   vtab->GetPreserveAxes = GetPreserveAxes;
-   vtab->GetSymbol = GetSymbol;
-   vtab->GetTitle = GetTitle;
-   vtab->GetUnit = GetUnit;
-   vtab->GetNormUnit = GetNormUnit;
-   vtab->Intersect = Intersect;
-   vtab->IsUnitFrame = IsUnitFrame;
-   vtab->Match = Match;
-   vtab->Norm = Norm;
-   vtab->NormBox = NormBox;
-   vtab->AxDistance = AxDistance;
-   vtab->AxOffset = AxOffset;
-   vtab->AxIn = AxIn;
-   vtab->AxAngle = AxAngle;
-   vtab->Offset = Offset;
-   vtab->Offset2 = Offset2;
-   vtab->Resolve = Resolve;
-   vtab->ResolvePoints = ResolvePoints;
-   vtab->LineDef = LineDef;
-   vtab->LineContains = LineContains;
-   vtab->LineCrossing = LineCrossing;
-   vtab->LineOffset = LineOffset;
-   vtab->Overlay = Overlay;
-   vtab->PermAxes = PermAxes;
-   vtab->PickAxes = PickAxes;
-   vtab->PrimaryFrame = PrimaryFrame;
-   vtab->SetAxis = SetAxis;
-   vtab->SetDigits = SetDigits;
-   vtab->SetDirection = SetDirection;
-   vtab->SetDomain = SetDomain;
-   vtab->SetFormat = SetFormat;
-   vtab->SetLabel = SetLabel;
-   vtab->SetMatchEnd = SetMatchEnd;
-   vtab->SetMaxAxes = SetMaxAxes;
-   vtab->SetMinAxes = SetMinAxes;
-   vtab->SetPermute = SetPermute;
-   vtab->SetPreserveAxes = SetPreserveAxes;
-   vtab->SetSymbol = SetSymbol;
-   vtab->SetTitle = SetTitle;
-   vtab->SetUnit = SetUnit;
-   vtab->SubFrame = SubFrame;
-   vtab->TestDigits = TestDigits;
-   vtab->TestDirection = TestDirection;
-   vtab->TestDomain = TestDomain;
-   vtab->TestFormat = TestFormat;
-   vtab->TestLabel = TestLabel;
-   vtab->TestMatchEnd = TestMatchEnd;
-   vtab->TestMaxAxes = TestMaxAxes;
-   vtab->TestMinAxes = TestMinAxes;
-   vtab->TestPermute = TestPermute;
-   vtab->TestPreserveAxes = TestPreserveAxes;
-   vtab->TestSymbol = TestSymbol;
-   vtab->TestTitle = TestTitle;
-   vtab->TestUnit = TestUnit;
-   vtab->Unformat = Unformat;
-   vtab->ValidateAxis = ValidateAxis;
-   vtab->ValidateAxisSelection = ValidateAxisSelection;
-   vtab->ValidateSystem = ValidateSystem;
-   vtab->SystemString = SystemString;
-   vtab->SystemCode = SystemCode;
-
-   vtab->GetFrameFlags = GetFrameFlags;
-   vtab->SetFrameFlags = SetFrameFlags;
-
-   vtab->TestActiveUnit = TestActiveUnit;
-   vtab->GetActiveUnit = GetActiveUnit;
-   vtab->SetActiveUnit = SetActiveUnit;
-
-   vtab->ClearSystem = ClearSystem;
-   vtab->GetSystem = GetSystem;
-   vtab->SetSystem = SetSystem;
-   vtab->TestSystem = TestSystem;
-
-   vtab->ClearAlignSystem = ClearAlignSystem;
-   vtab->GetAlignSystem = GetAlignSystem;
-   vtab->SetAlignSystem = SetAlignSystem;
-   vtab->TestAlignSystem = TestAlignSystem;
-
-   vtab->ClearTop = ClearTop;
-   vtab->GetTop = GetTop;
-   vtab->SetTop = SetTop;
-   vtab->TestTop = TestTop;
-
-   vtab->ClearBottom = ClearBottom;
-   vtab->GetBottom = GetBottom;
-   vtab->SetBottom = SetBottom;
-   vtab->TestBottom = TestBottom;
-
-   vtab->ClearEpoch = ClearEpoch;
-   vtab->GetEpoch = GetEpoch;
-   vtab->SetEpoch = SetEpoch;
-   vtab->TestEpoch = TestEpoch;
-
-   vtab->ClearObsLat = ClearObsLat;
-   vtab->TestObsLat = TestObsLat;
-   vtab->GetObsLat = GetObsLat;
-   vtab->SetObsLat = SetObsLat;
-
-   vtab->ClearObsLon = ClearObsLon;
-   vtab->TestObsLon = TestObsLon;
-   vtab->GetObsLon = GetObsLon;
-   vtab->SetObsLon = SetObsLon;
-
-   vtab->ClearObsAlt = ClearObsAlt;
-   vtab->TestObsAlt = TestObsAlt;
-   vtab->GetObsAlt = GetObsAlt;
-   vtab->SetObsAlt = SetObsAlt;
-
-   vtab->ClearDut1 = ClearDut1;
-   vtab->GetDut1 = GetDut1;
-   vtab->SetDut1 = SetDut1;
-   vtab->TestDut1 = TestDut1;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_cleanattribs = object->CleanAttribs;
-   object->CleanAttribs = CleanAttribs;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping = (AstMappingVtab *) vtab;
-
-   object->Equal = Equal;
-   mapping->GetIsLinear = GetIsLinear;
-   mapping->GetIsSimple = GetIsSimple;
-   mapping->GetNin = GetNin;
-   mapping->GetNout = GetNout;
-   mapping->ReportPoints = ReportPoints;
-   mapping->Transform = Transform;
-   mapping->MapSplit = MapSplit;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "Frame", "Coordinate system description" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void Intersect( AstFrame *this, const double a1[2],
-                       const double a2[2], const double b1[2],
-                       const double b2[2], double cross[2], 
-                       int *status ) {
-/*
-*++
-*  Name:
-c     astIntersect
-f     AST_INTERSECT
-
-*  Purpose:
-*     Find the point of intersection between two geodesic curves.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astIntersect( AstFrame *this, const double a1[2],
-c                        const double a2[2], const double b1[2],
-c                        const double b2[2], double cross[2] )
-f     CALL AST_INTERSECT( THIS, A1, A2, B1, B2, CROSS, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function 
-f     This routine
-*     finds the coordinate values at the point of intersection between
-*     two geodesic curves. Each curve is specified by two points on 
-*     the curve.  It can only be used with 2-dimensional Frames.
-*
-*     For example, in a basic Frame, it will find the point of
-*     intersection between two straight lines. But for a SkyFrame it 
-*     will find an intersection of two great circles.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     a1
-f     A1( 2 ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of the
-*        first point on the first geodesic curve.
-c     a2
-f     A2( 2 ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of a
-*        second point on the first geodesic curve. It should not be 
-*        co-incident with the first point.
-c     b1
-f     B1( 2 ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of the
-*        first point on the second geodesic curve.
-c     b2
-f     B2( 2 ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of a
-*        second point on the second geodesic curve. It should not be 
-*        co-incident with the first point.
-c     cross
-f     CROSS( 2 ) = DOUBLE PRECISION (Returned)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        in which the coordinates of the required intersection will 
-*        be returned.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - For SkyFrames each curve will be a great circle, and in general
-*     each pair of curves will intersect at two diametrically opposite 
-*     points on the sky. The returned position is the one which is
-*     closest to point 
-c     "a1".
-f     A1.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the two
-*     points defining either geodesic are co-incident, or if the two
-*     curves do not intersect.
-c     - The geodesic curve used by this function is the path of
-f     - The geodesic curve used by this routine is the path of
-*     shortest distance between two points, as defined by the
-c     astDistance function.
-f     AST_DISTANCE function.
-*     - An error will be reported if the Frame is not 2-dimensional.
-*--
-*/
-
-/* Local Variables: */
-   double ca;                    /* Y axis intercept of line a */
-   double cb;                    /* Y axis intercept of line b */
-   double dxa;                   /* X range spanned by line a */
-   double dxb;                   /* X range spanned by line b */
-   double ma;                    /* Gradient of line a */
-   double mb;                    /* Gradient of line b */
-   int naxes;                    /* Number of Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialize bad values. */
-   cross[ 0 ] = AST__BAD;
-   cross[ 1 ] = AST__BAD;
-
-/* Determine the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Report an error if the Frame is not 2 dimensional. */
-   if( naxes != 2 && astOK ) {
-      astError( AST__NAXIN, "astIntersect(%s): Invalid number of Frame axes (%d)."
-                " astIntersect can only be used with 2 dimensonal Frames.", status,
-                astGetClass( this ), naxes );
-   }
-
-/* Check that all supplied values are OK. */
-   if ( ( a1[ 0 ] != AST__BAD ) && ( a1[ 1 ] != AST__BAD ) &&
-        ( a2[ 0 ] != AST__BAD ) && ( a2[ 1 ] != AST__BAD ) &&
-        ( b1[ 0 ] != AST__BAD ) && ( b1[ 1 ] != AST__BAD ) &&
-        ( b2[ 0 ] != AST__BAD ) && ( b2[ 1 ] != AST__BAD ) ) {
-
-/* Find the x increments spanned by the two lines. */
-
-/* Check the first line is not vertical. */
-      dxa = a2[ 0 ] - a1[ 0 ];
-      dxb = b2[ 0 ] - b1[ 0 ];
-      if( dxa != 0.0 ) {
-
-/* Find the gradient and Y axis intercept of the first line. */
-         ma = ( a2[ 1 ] - a1[ 1 ] )/dxa;
-         ca = a1[ 1 ] - a1[ 0 ]*ma;
-
-/* Check the second line is not vertical. */
-         if( dxb != 0.0 ) {
-
-/* Find the gradient and Y axis intercept of the second line. */
-            mb = ( b2[ 1 ] - b1[ 1 ] )/dxb;
-            cb = b1[ 1 ] - b1[ 0 ]*mb;
-
-/* Check the lines are not parallel. */
-            if( ma != mb ) {
-
-/* Find the intersection of the two lines. */
-               cross[ 0 ] = ( cb -ca )/( ma - mb );
-               cross[ 1 ] = ( ( ma + mb )*cross[ 0 ] + ca + cb )/2;
-            }
-
-/* If the second line is vertical but the first is not. */
-         } else if( b1[ 1 ] != b2[ 1 ] ){
-            cross[ 0 ] = b1[ 0 ];
-            cross[ 1 ] = ma*b1[ 0 ] + ca;
-         }
-
-/* First line is vertical but second is not. */
-      } else if( dxb != 0.0 && a1[ 1 ] != a2[ 1 ] ){
-
-/* Find the gradient and Y axis intercept of the second line. */
-         mb = ( b2[ 1 ] - b1[ 1 ] )/dxb;
-         cb = b1[ 1 ] - b1[ 0 ]*mb;
-
-/* Find the intercection. */
-         cross[ 0 ] = a1[ 0 ];
-         cross[ 1 ] = mb*a1[ 0 ] + cb;
-      } 
-   }
-}
-
-static int IsUnitFrame( AstFrame *this, int *status ){
-/*
-*+
-*  Name:
-*     astIsUnitFrame
-
-*  Purpose:
-*     Is this Frame equivalent to a UnitMap?
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astIsUnitFrame( AstFrame *this )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns a flag indicating if the supplied Frame is
-*     equivalent to a UnitMap when treated as a Mapping (note, the Frame
-*     class inherits from Mapping and therefore every Frame is also a Mapping).
-
-*  Parameters:
-*     this 
-*        Pointer to the Frame.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied Frame is equivalent to
-*     a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Check the local error status. */
-   if( !astOK ) return 0;
-
-/* The base Frame class is always equivalent to a UnitMap. */
-   return 1;
-}
-
-static int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status ) {
-/*
-*+
-*  Name:
-*     astLineContains
-
-*  Purpose:
-*     Determine if a line contains a point.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astLineContains( AstFrame *this, AstLineDef *l, int def, double *point )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function determines if the supplied point is on the supplied
-*     line within the supplied Frame. The start point of the line is 
-*     considered to be within the line, but the end point is not. The tests 
-*     are that the point of closest approach of the line to the point should 
-*     be between the start and end, and that the distance from the point to 
-*     the point of closest aproach should be less than 1.0E-7 of the length 
-*     of the line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l
-*        Pointer to the structure defining the line. 
-*     def
-*        Should be set non-zero if the "point" array was created by a
-*        call to astLineCrossing (in which case it may contain extra
-*        information following the axis values),and zero otherwise.
-*     point
-*        Point to an array containing the axis values of the point to be 
-*        tested, possibly followed by extra cached information (see "def").
-
-*  Returned Value:
-*     A non-zero value is returned if the line contains the point. 
-
-*  Notes:
-*     - The pointer supplied for "l" should have been created using the 
-*     astLineDef method. These structures contained cached information about 
-*     the lines which improve the efficiency of this method when many 
-*     repeated calls are made. An error will be reported if the structure 
-*     does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int result;                
-   double dx, dy, p;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the line refers to the supplied Frame. */
-   if( l->frame != this ) {
-      astError( AST__INTER, "astLineContains(%s): The supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* If the point is good, find the offsets from the start of the line. */
-   } else if( point[ 0 ] != AST__BAD && point[ 1 ] != AST__BAD ) {
-      dx = point[ 0 ] - l->start[ 0 ];
-      dy = point[ 1 ] - l->start[ 1 ];
-
-/* Check the nearest point on the line is between the start and end.
-   Exclude the end point. */
-      p = dx*l->dir[ 0 ] + dy*l->dir[ 1 ];
-      if( p >= 0.0 && p < l->length ) {
-
-/* Check the distance from the point to the nearest point on the line is not 
-   further than 1.0E-7 of the length of the line. */
-         if( fabs( dx*l->q[ 0 ] + dy*l->q[ 1 ] ) <= 1.0E-7*l->length ) {
-            result = 1;
-         }
-      }
-   }
-
-/* Return zero if an error occurred. */
-   if( !astOK ) result = 0;
-
-/* Return a pointer to the output structure. */
-   return result;
-}
-
-static int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2, 
-                         double **cross, int *status ) {
-/*
-*+
-*  Name:
-*     astLineCrossing
-
-*  Purpose:
-*     Determine if two lines cross.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astLineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2, 
-*                          double **cross ) 
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function determines if the two suplied line segments cross,
-*     and if so returns the axis values at the point where they cross.
-*     A flag is also returned indicating if the crossing point occurs
-*     within the length of both line segments, or outside one or both of
-*     the line segments.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l1
-*        Pointer to the structure defining the first line. 
-*     l2
-*        Pointer to the structure defining the second line. 
-*     cross
-*        Pointer to a location at which to put a pointer to a dynamically
-*        alocated array containing the axis values at the crossing. If
-*        NULL is supplied no such array is returned. Otherwise, the returned 
-*        array should be freed using astFree when no longer needed. If the 
-*        lines are parallel (i.e. do not cross) then AST__BAD is returned for 
-*        all axis values. Note usable axis values are returned even if the 
-*        lines cross outside the segment defined by the start and end points 
-*        of the lines. The order of axes in the returned array will take
-*        account of the current axis permutation array if appropriate. Note, 
-*        sub-classes such as SkyFrame may append extra values to the end
-*        of the basic frame axis values. A NULL pointer is returned if an
-*        error occurs.
-
-*  Returned Value:
-*     A non-zero value is returned if the lines cross at a point which is
-*     within the [start,end) segment of the lines that are flagged as
-*     finite (if a line is marked as infinite any crossing is assumed to
-*     be within the bounds of the line). If the crossing point is outside 
-*     this segment on either (inifinte) line, or if the lines are parallel,
-*     zero is returned. Note, the start point is considered to be inside
-*     the length of the segment, but the end point is outside.
-
-*  Notes:
-*     - The pointers supplied for "l1" and "l2" should have been created
-*     using the astLineDef method. These structures contained cached
-*     information about the lines which improve the efficiency of this method
-*     when many repeated calls are made. An error will be reported if
-*     either structure does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   double *crossing;          /* Returned array */
-   double den;                /* Denominator */
-   double dx;                 /* Offset in start X values */
-   double dy;                 /* Offset in start Y values */
-   double t1;                 /* Distance from start of line 1 to crossing */
-   double t2;                 /* Distance from start of line 2 to crossing */
-   int result;                /* Returned value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   result = 0;
-   crossing = astMalloc( sizeof(double)*2 );
-   
-/* Check that both lines refer to the supplied Frame. */
-   if( l1->frame != this ) {
-      astError( AST__INTER, "astLineCrossing(%s): First supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-   } else if( l2->frame != this ) {
-      astError( AST__INTER, "astLineCrossing(%s): Second supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-   } else if( crossing ){
-
-/* Each of the lines can be represented as "p = start + t.v" where start is
-   the start position, v is the unit vector pointing from start to end,
-   and t is the scalar distance from the start position. So to find the
-   intersection put "start1 + t1.v1 = start2 + t2.v2" and solve for t1
-   and t2. */
-      den = (l1->dir[ 0 ])*(l2->dir[ 1 ]) - (l2->dir[ 0 ])*(l1->dir[ 1 ]);
-      if( den != 0.0 ) {
-         dx = l2->start[ 0 ] - l1->start[ 0 ];
-         dy = l2->start[ 1 ] - l1->start[ 1 ];
-         t1 = ( l2->dir[ 1 ]*dx - l2->dir[ 0 ]*dy )/den;
-         t2 = ( l1->dir[ 1 ]*dx - l1->dir[ 0 ]*dy )/den;
-
-/* Store the crossing point, using the smaller t value to redue error. */
-         if( fabs( t1 ) < fabs( t2 ) ) {
-            crossing[ 0 ] = l1->start[ 0 ] + t1*l1->dir[ 0 ];
-            crossing[ 1 ] = l1->start[ 1 ] + t1*l1->dir[ 1 ];
-         } else {
-            crossing[ 0 ] = l2->start[ 0 ] + t2*l2->dir[ 0 ];
-            crossing[ 1 ] = l2->start[ 1 ] + t2*l2->dir[ 1 ];
-         } 
-
-/* See if the intersection is within the length of both lines (excluding
-   the end points). If a line is flagged as infinite, set the "t" parameter
-   to zero to make it look like the crossing is within the line. */
-         if( l1->infinite ) t1 = 0.0;
-         if( l2->infinite ) t2 = 0.0;
-
-         if( t1 >= 0.0 && t1 < l1->length &&
-             t2 >= 0.0 && t2 < l2->length ) result = 1;
-
-      } else {
-         crossing[ 0 ] = AST__BAD;
-         crossing[ 1 ] = AST__BAD;
-      }
-   }
-
-/* Return zero if an error occurred. */
-   if( !astOK ) {
-      crossing = astFree( crossing );
-      result = 0;
-   }
-
-/* Return the crossing pointer. */
-   if( cross ) {
-      *cross = crossing;
-   } else if( crossing ){
-      crossing = astFree( crossing );
-   }
-
-/* Return a pointer to the output structure. */
-   return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this, const double start[2], 
-                            const double end[2], int *status ) {
-/*
-*+
-*  Name:
-*     astLineDef
-
-*  Purpose:
-*     Creates a structure describing a line segment in a 2D Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstLineDef *astLineDef( AstFrame *this, const double start[2], 
-*                             const double end[2] ) 
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function creates a structure containing information describing a
-*     given line segment within the supplied 2D Frame. This may include
-*     information which allows other methods such as astLineCrossing to
-*     function more efficiently. Thus the returned structure acts as a
-*     cache to store intermediate values used by these other methods.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame. Must have 2 axes.
-*     start
-*        An array of 2 doubles marking the start of the line segment.
-*     end
-*        An array of 2 doubles marking the end of the line segment.
-
-*  Returned Value:
-*     Pointer to the memory structure containing the description of the
-*     line. This structure should be freed using astFree when no longer
-*     needed. A NULL pointer is returned (without error) if any of the
-*     supplied axis values are AST__BAD.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstLineDef *result;           /* Pointer to output structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check the Frame has 2 axes. */
-   if( astGetNaxes( this ) != 2 ) {
-      astError( AST__INTER, "astLineDef(%s): The supplied %s is not 2 "
-                "dimensional (internal AST proramming error).", status,
-                 astGetClass( this ), astGetClass( this ) );
-   } 
-
-/* Check the axis values are good */
-   if( start[ 0 ] != AST__BAD && start[ 1 ] != AST__BAD && 
-       end[ 0 ] != AST__BAD && end[ 1 ] != AST__BAD ) {
-
-/* Allocate memory for the returned structure. */
-      result = astMalloc( sizeof( AstLineDef ) );
-      if( result ) {
-
-/* Store the supplied axis values in the returned structure. */
-         result->start[ 0 ] = start[ 0 ];
-         result->start[ 1 ] = start[ 1 ];
-         result->end[ 0 ] = end[ 0 ];
-         result->end[ 1 ] = end[ 1 ];
-
-/* Store the length of the line segment. */
-         result->length = astDistance( this, start, end );
-
-/* Store a unit vector pointing from the start to the end. */
-         if( result->length > 0.0 ) {
-            result->dir[ 0 ] = ( end[ 0 ] - start[ 0 ] )/result->length;
-            result->dir[ 1 ] = ( end[ 1 ] - start[ 1 ] )/result->length;
-         } else {
-            result->dir[ 0 ] = 1.0;
-            result->dir[ 1 ] = 0.0;
-         } 
-
-/* Store a unit vector perpendicular to the line, such that the vector
-   points to the left, as vewied from the observer, when moving from the 
-   start to the end of the line. */
-         result->q[ 0 ] = -result->dir[ 1 ];
-         result->q[ 1 ] = result->dir[ 0 ];
-
-/* Store a pointer to the defining Frame. */
-         result->frame = this;
-
-/* Indicate that the line is considered to be terminated at the start and
-   end points. */
-         result->infinite = 0; 
-      }
-   }
-
-/* Free the returned pointer if an error occurred. */
-   if( !astOK ) result = astFree( result );
-
-/* Return a pointer to the output structure. */
-   return result;
-}
-
-static void LineOffset( AstFrame *this, AstLineDef *line, double par, 
-                        double prp, double point[2], int *status ){
-/*
-*+
-*  Name:
-*     astLineOffset
-
-*  Purpose:
-*     Find a position close to a line.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void LineOffset( AstFrame *this, AstLineDef *line, double par, 
-*                      double prp, double point[2] )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns a position formed by moving a given distance along
-*     the supplied line, and then a given distance away from the supplied line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     line
-*        Pointer to the structure defining the line. 
-*     par
-*        The distance to move along the line from the start towards the end.
-*     prp
-*        The distance to move at right angles to the line. Positive
-*        values result in movement to the left of the line, as seen from
-*        the observer, when moving from start towards the end.
-
-*  Notes:
-*     - The pointer supplied for "line" should have been created using the 
-*     astLineDef method. This structure contains cached information about the 
-*     line which improves the efficiency of this method when many repeated 
-*     calls are made. An error will be reported if the structure does not 
-*     refer to the Frame specified by "this".
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check that the line refers to the supplied Frame. */
-   if( line->frame != this ) {
-      astError( AST__INTER, "astLineOffset(%s): The supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* This implementation uses simple flat geometry. */
-   } else {
-      point[ 0 ] = line->start[ 0 ] + par*line->dir[ 0 ] + prp*line->q[ 0 ];
-      point[ 1 ] = line->start[ 1 ] + par*line->dir[ 1 ] + prp*line->q[ 1 ];
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstFrame *this;       /* Pointer to Frame structure */
-   int i;                /* Loop count */
-   int result;           /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                          fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   for( i = 0; i < this->naxes; i++ ) {
-      if( !result ) result = astManageLock( this->axis[ i ], mode, extra,
-                                            fail );
-   }
-
-   return result;
-
-}
-#endif
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     Frame method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing Frame. This is only possible if the specified inputs
-*     correspond to some subset of the Frame outputs. That is, there
-*     must exist a subset of the Frame outputs for which each output
-*     depends only on the selected Frame inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied Frame, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame to be split (the Frame is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied Frame, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied Frame has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied Frame. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   int *result;         /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Pick the selected axes from the Frame. */
-   *map = (AstMapping *) astPickAxes( (AstFrame *) this_map, nin, in, NULL );
-
-/* Return a copy of the supplied axis array.*/
-   result = astStore( NULL, in, sizeof( int )*(size_t) nin );
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static int Match( AstFrame *template, AstFrame *target,
-                  int **template_axes, int **target_axes,
-                  AstMapping **map, AstFrame **result, int *status ) {
-/*
-*+
-*  Name:
-*     astMatch
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astMatch( AstFrame *template, AstFrame *target,
-*                   int **template_axes, int **target_axes,
-*                   AstMapping **map, AstFrame **result )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function matches a "template" frame to a "target" frame and
-*     determines whether it is possible to convert coordinates between
-*     them.  If it is, a mapping that performs the transformation is
-*     returned along with a new Frame that describes the coordinate
-*     system that results when this mapping is applied to the "target"
-*     coordinate system. In addition, information is returned to allow
-*     the axes in this "result" Frame to be associated with the
-*     corresponding axes in the "target" and "template" Frames from
-*     which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template Frame. This describes the coordinate
-*        system (or set of possible coordinate systems) into which we
-*        wish to convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        template Frame axis from which it is derived. If it is not
-*        derived from any template frame axis, a value of -1 will be
-*        returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        target Frame axis from which it is derived. If it is not
-*        derived from any target Frame axis, a value of -1 will be
-*        returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the
-*        "target" Frame and the "result" Frame (see below) and the
-*        inverse transformation will convert in the opposite
-*        direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target and the template
-*        Frames. In particular, when the template allows the
-*        possibility of transformaing to any one of a set of
-*        alternative coordinate systems, the "result" Frame will
-*        indicate which of the alternatives was used.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - By default, the "result" frame will have its number of axes
-*     and axis order determined by the "template" Frame. However, if
-*     the PreserveAxes attribute of the template frame is non-zero,
-*     then the axis count and axis order of the "target" frame will be
-*     used instead.
-*     - The template_axes and target_axes arrays are provided so that
-*     if the caller needs to permute the target and/or template axes
-*     before invoking this function, it is possible to deduce how the
-*     result axes should be permuted so as to correspond with the
-*     original template/target axis order.
-*     - For result axes that do not correspond with a template and/or
-*     target axis (where a value of -1 is returned in the
-*     template_axes and/or target_axes arrays), the caller has no
-*     clear way of knowing where these axes should appear in any
-*     permuted order. In this case, the relative position of these
-*     axes within the result Frame (with respect to axes that do have
-*     template/target axis associations) will be used to convey this
-*     information. Such axes should be taken to be associated either
-*     with the next preceding or following axis (depending on the
-*     AST__MATCHEND flag of the template frame) which does have an
-*     association.
-*     - If the result Frame has zero axes, then NULL pointer values
-*     will be returned for *template_axes and *target_axes.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     This implementation addresses the matching of a Frame class
-*     object to other types of Frames (i.e. the target may be from a
-*     derived class). A Frame will match any other type of Frame with
-*     an acceptable number of axes but will not distinguish axis order
-*     (i.e. it will match the axes in whatever order they are
-*     given). If the template Frame has a value set for its Domain
-*     attribute, then it will only match another Frame with the same
-*     Domain.
-*/
-
-/* Local Variables: */
-   char *template_domain;        /* Pointer to copy of template domain */
-   const char *ptr;              /* Pointer to domain string */
-   const char *target_domain;    /* Pointer to target domain string */
-   int match;                    /* Template matches target? */
-   int match_end;                /* Match final axes of target? */
-   int max_axes;                 /* Maximum acceptable number of axes */
-   int min_axes;                 /* Minimum acceptable nu,ber of axes */
-   int preserve_axes;            /* Preserve target axes? */
-   int result_axis;              /* Loop counter for result axes */
-   int result_naxes;             /* Number of result axes */
-   int target_naxes;             /* Number of target axes */
-   int template_naxes;           /* Number of template axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* The first requirement for a match is that the target object is a Frame. This
-   is already known to be true, as it forms part of the argument validation
-   for this function. */
-
-/* The second requirement is that the number of target axes is acceptable.
-   Obtain the number of target axes and the minimum and maximum number of axes
-   that the template will match. */
-   target_naxes = astGetNaxes( target );
-   min_axes = astGetMinAxes( template );
-   max_axes = astGetMaxAxes( template );
-
-/* Test if the number of target axes is acceptable. */
-   if ( astOK ) {
-      match = ( ( target_naxes >= min_axes ) && ( target_naxes <= max_axes ) );
-   }
-
-/* The third requirement is that if the template has its Domain
-   attribute defined, then the target must also have the same Domain
-   (although it need not be set - the default will do). First check if
-   the template has a domain. */
-   if ( astOK && match ) {
-      if ( astTestDomain( template ) ) {
-
-/* Obtain a pointer to the template domain. Then allocate memory and
-   make a copy of it (this is necessary as we will next inquire the
-   domain of the target and may over-write the buffer holding the
-   template's domain). */
-         ptr = astGetDomain( template );
-         if ( astOK ) {
-            template_domain = astStore( NULL, ptr,
-                                        strlen( ptr ) + (size_t) 1 );
-
-/* Obtain a pointer to the target domain. */
-            target_domain = astGetDomain( target );
-
-/* Compare the domain strings for equality. Then free the memory
-   allocated above. */
-            match = astOK && !strcmp( template_domain, target_domain );
-            template_domain = astFree( template_domain );
-         }
-      }
-   }
-
-/* If the template matches, obtain the values of the template's PreserveAxes
-   and MatchEnd attributes and determine the number of template axes. */
-   if ( astOK && match ) {
-      preserve_axes = astGetPreserveAxes( template );
-      match_end = astGetMatchEnd( template );
-      template_naxes = astGetNaxes( template );
-
-/* If the PreserveAxes attribute is non-zero, the target axes should be
-   preserved, so the number of result axes equals the number of target axes.
-   Otherwise the number of template axes is used. */
-      result_naxes = preserve_axes ? target_naxes : template_naxes;
-
-/* Allocate memory for the arrays of axis associations to be returned. */
-      *template_axes = astMalloc( sizeof( int ) * (size_t) result_naxes );
-      *target_axes = astMalloc( sizeof( int ) * (size_t) result_naxes );
-      if ( astOK ) {
-
-/* Loop through each of the result axes. */
-         for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-
-/* Set up the axis associations. By default, associate the first result axis
-   with the first template/target axis. */
-            (*template_axes)[ result_axis ] = result_axis;
-            (*target_axes)[ result_axis ] = result_axis;
-
-/* However, if the MatchEnd attribute is non-zero, associate the last result
-   axis with the last template/target axis (this only makes a difference if
-   there is a difference in the number of axes). */
-            if ( match_end ) {
-               (*template_axes)[ result_axis ] +=
-                                               template_naxes - result_naxes;
-               (*target_axes)[ result_axis ] += target_naxes - result_naxes;
-            }
-
-/* If any of the associations would be with a template/target axis that doesn't
-   exist, then use an axis index of -1 for the association instead. */
-            if ( ( (*template_axes)[ result_axis ] < 0 ) ||
-                 ( (*template_axes)[ result_axis ] >= template_naxes ) ) {
-               (*template_axes)[ result_axis ] = -1;
-	    }
-            if ( ( (*target_axes)[ result_axis ] < 0 ) ||
-                 ( (*target_axes)[ result_axis ] >= target_naxes ) ) {
-               (*target_axes)[ result_axis ] = -1;
-	    }
-         }
-
-/* Use the target's astSubFrame method to select the required axes from it,
-   overlaying the template's attributes on to the resulting Frame. This process
-   also generates the required Mapping between the target and result Frames. */
-         match = astSubFrame( target, template,
-                              result_naxes, *target_axes, *template_axes,
-                              map, result );
-      }
-   }
-
-/* If an error occurred, free any allocated memory and reset the result. */
-   if ( !astOK || !match ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void MatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes, 
-                       int *status ) {
-/*
-*++
-*  Name:
-c     astMatchAxes
-f     AST_MATCHAXES
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astMatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes )
-f     CALL AST_MATCHAXES( FRM1, FRM2, AXES, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-c     frm1
-f     FRM1 = INTEGER (Given)
-*        Pointer to the first Frame.
-c     frm2
-f     FRM2 = INTEGER (Given)
-*        Pointer to the second Frame.
-c     axes
-f     AXES = INTEGER( * ) (Returned)
-c        Pointer to an 
-f        An
-*        integer array in which to return the indices of the axes (within
-*        the first Frame) that correspond to each axis within the second
-*        Frame. Axis indices start at 1. A value of zero will be stored
-*        in the returned array for each axis in the second Frame that has 
-*        no corresponding axis in the first Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the second Frame.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Frame
-*        This function applies to all Frames.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping can
-*     be found between them using 
-c     astFindFrame or astConvert.
-f     AST_FINDFRAME or AST_CONVERT.
-*     Thus, "corresponding axes" are not necessarily identical. For
-*     instance, SkyFrame axes in two Frames will match even if they
-*     describe different celestial coordinate systems
-*--
-
-* Implementation Notes:
-*    This function is simply a wrap-up for the protected astMatchAxesX
-*    method which performs the required processing but swaps the order
-*    of the first two arguments. This is a trick to allow the
-*    astMatchAxes method to be over-ridden by derived classes on the
-*    basis of the class of either of the first two arguments.
-*
-*    In practice, each class that represents an encapsulated Frame (e.g.
-*    FrameSet, Region, etc) should over-ride this method, extracting a
-*    Frame from the supplied "frm1" pointer, and then invoking
-*    astMatchAxesX.
-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the "astMatchAxesX" method with the first two arguments
-   swapped. */
-   astMatchAxesX( frm2, frm1, axes );
-}
-
-static void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes, 
-                        int *status ) {
-/*
-*+
-*  Name:
-*     astMatchAxesX
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astMatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function performs the processing for the public astMatchAxes
-*     method and has exactly the same interface except that the order
-*     of the first two arguments is swapped. This is a trick to allow
-*     the astMatchAxes method to be over-ridden by derived classes on
-*     the basis of the class of either of its first two arguments.
-*
-*     See the astMatchAxes method for details of the interface.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *pfrm;               
-   AstFrame *resfrm;          
-   AstMapping *resmap;              
-   int *frm1_axes;
-   int *pfrm_axes;
-   int ifirst;
-   int max_axes;
-   int min_axes;
-   int nax2;
-   int pax;
-   int preserve_axes;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Temporarily ensure that the PreserveAxes attribute is non-zero in
-   the second supplied Frame. This means thte result Frame returned by
-   astMatch below will have the axis count and order of the target Frame
-   (i.e. "pfrm"). */
-   if( astTestPreserveAxes( frm1 ) ) {
-      preserve_axes = astGetPreserveAxes( frm1 ) ? 1 : 0;
-   } else {
-      preserve_axes = -1;
-   }
-   astSetPreserveAxes( frm1, 1 );
-
-/* Temporarily ensure that the MaxAxes and MinAxes attributes in the
-   second supplied Frame are set so the Frame can be used as a template
-   in astMatch for matching any number of axes. */
-   if( astTestMaxAxes( frm1 ) ) {
-      max_axes = astGetMaxAxes( frm1 );
-   } else {
-      max_axes = -1;
-   }
-   astSetMaxAxes( frm1, 10000 );
-
-   if( astTestMinAxes( frm1 ) ) {
-      min_axes = astGetMinAxes( frm1 );
-   } else {
-      min_axes = -1;
-   }
-   astSetMinAxes( frm1, 1 );
-
-/* Get the number of axes in the frm2 Frame. */
-   nax2 = astGetNaxes( frm2 );
-
-/* Loop round the axes in the frm2 Frame. */
-   for( ifirst = 0; ifirst < nax2; ifirst++ ) {
-
-/* Identify the primary Frame defining the current axis in the frm2 
-   Frame. */
-      astPrimaryFrame( frm2, ifirst, &pfrm, &pax );
-
-/* Attempt to find a sub-frame within the frm1 Frame that corresponds to 
-   this primary Frame. */
-      if( astMatch( frm1, pfrm, &frm1_axes, &pfrm_axes, &resmap, &resfrm ) ) {
-
-/* Store the one-based index within "frm1" of the corresponding axis. */
-         axes[ ifirst ] = frm1_axes[ pax ] + 1;
-
-/* Free resources */
-         frm1_axes = astFree( frm1_axes );
-         pfrm_axes = astFree( pfrm_axes );
-         resmap = astAnnul( resmap );
-         resfrm = astAnnul( resfrm );
-
-/* If no corresponding axis was found store zero in the returned array. */
-      } else {
-         axes[ ifirst ] = 0;
-      }
-
-/* Free resouces. */
-      pfrm = astAnnul( pfrm );
-   }
-
-/* Re-instate the original attribute values in the frm1 Frame. */
-   if( preserve_axes == -1 ) {
-      astClearPreserveAxes( frm1 );
-   } else {
-      astSetPreserveAxes( frm1, preserve_axes );
-   }
-
-   if( max_axes == -1 ) {
-      astClearMaxAxes( frm1 );
-   } else {
-      astSetMaxAxes( frm1, max_axes );
-   }
-
-   if( min_axes == -1 ) {
-      astClearMinAxes( frm1 );
-   } else {
-      astSetMinAxes( frm1, min_axes );
-   }
-}
-
-static void NewUnit( AstAxis *ax, const char *old_units, const char *new_units,
-                     const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     NewUnit
-
-*  Purpose:
-*     Modify an Axis Label and Symbol to reflect a new Unit value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void NewUnit( AstAxis *ax, const char *old_units, const char *new_units,
-*                   const char *method, const char *class )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function modifies the Label and Symbol attributes of an Axis
-*     to reflect a new Unit value. This function should only be called if
-*     the ActiveUnit flag of the parent Frame is non-zero (this is not
-*     checked within this function).
-*
-*     If the axis has a set label, then we may be able to modify it to
-*     correctly describe the axis in the supplied new units. For instance,
-*     if the original units were "Hz", the original label was "frequency",
-*     and the new units are "log(Hz)", then the label is modified to become
-*     "log( frequency )".
-*
-*     The Axis Format attribute is cleared if the supplied units are
-*     different to the old units (because any set format is probably not
-*     going to be appropriate for a new system of units.
-
-*  Parameters:
-*     ax
-*        Pointer to the Axis.
-*     old_units
-*        The original units value.
-*     new_units
-*        The new units value.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis selection. This method name is used
-*        solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string
-*        containing the name of the class upon which this function
-*        was invoked. This is used solely for constructing error messages.
-
-*  Returned Value:
-*     void.
-*/
-
-/* Local Variables: */
-   AstMapping *map;              /* Pointer to units Mapping */
-   char *new_lab;                /* Pointer to new axis label */
-   char *new_sym;                /* Pointer to new axis symbol */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check that the axis label is set. We relay on sub-classes to return
-   appropriate default labels if the label is not set. */
-   if( astTestAxisLabel( ax ) ) {
-
-/* See if it is possible to map the old units into the new units.
-   If it is, then a Mapping is returned together with an appropriately
-   modified label. */
-      map = astUnitMapper( old_units, new_units, astGetAxisLabel( ax ),
-                           &new_lab );
-
-/* If succesfull, annul the Mapping (which we do not need), and store the
-   modified label in the Axis, finally freeing the memory used to hold
-   the modified label. */
-      if( map ) {
-         map = astAnnul( map );
-         if( new_lab ) {
-            astSetAxisLabel( ax, new_lab );
-            new_lab = astFree( new_lab );
-         }
-      }
-   }
-
-/* Do the same for the axis symbol. */
-   if( astTestAxisSymbol( ax ) ) {
-      map = astUnitMapper( old_units, new_units, astGetAxisSymbol( ax ),
-                           &new_sym );
-      if( map ) {
-         map = astAnnul( map );
-         if( new_sym ) {
-            astSetAxisSymbol( ax, new_sym );
-            new_sym = astFree( new_sym );
-         }
-      }
-   }
-
-/* If succesful, clear the axis format if the new and old units are
-   different. */
-   if( astOK ) {
-      if( strcmp( old_units, new_units ) ) astClearAxisFormat( ax );
-   }
-
-}
-
-static void Norm( AstFrame *this, double value[], int *status ) {
-/*
-*++
-*  Name:
-c     astNorm
-f     AST_NORM
-
-*  Purpose:
-*     Normalise a set of Frame coordinates.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astNorm( AstFrame *this, double value[] )
-f     CALL AST_NORM( THIS, VALUE, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function normalises a set of Frame coordinate values which
-f     This routine normalises a set of Frame coordinate values which
-*     might be unsuitable for display (e.g. may lie outside the
-*     expected range) into a set of acceptable values suitable for
-*     display.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     value
-f     VALUE( * ) = DOUBLE PRECISION (Given and Returned)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        coordinate values representing a point in the space which the
-*        Frame describes. If these values lie outside the expected
-*        range for the Frame, they will be replaced with more
-*        acceptable (normalised) values. Otherwise, they will be
-*        returned unchanged.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - For some classes of Frame, whose coordinate values are not
-*     constrained, this function will never modify the values
-*     supplied. However, for Frames whose axes represent cyclic
-*     quantities (such as angles or positions on the sky), coordinates
-*     will typically be wrapped into an appropriate standard range,
-*     such as zero to 2*pi.
-*     - The NormMap class is a Mapping which can be used to normalise a
-*     set of points using the 
-c     astNorm function
-f     AST_NORM routine
-*     of a specified Frame.
-*     - It is intended to be possible to put any set of coordinates
-*     into a form suitable for display by using this function to
-*     normalise them, followed by appropriate formatting
-c     (using astFormat).
-f     (using AST_FORMAT).
-*--
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Loop to process the coordinate for each axis in turn. */
-   for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Obtain a pointer to the relevant Frame Axis. */
-      ax = astGetAxis( this, axis );
-
-/* Normalise the coordinate for this axis. */
-      astAxisNorm( ax, value + axis );
-
-/* Annul the pointer to the Axis. */
-      ax = astAnnul( ax );
-
-/* Quit looping if an error occurs. */
-      if ( !astOK ) break;
-   }
-}
-
-static void NormBox( AstFrame *this, double lbnd[], double ubnd[],
-                     AstMapping *reg, int *status ) {
-/*
-*+
-*  Name:
-*     astNormBox
-
-*  Purpose:
-*     Extend a box to include effect of any singularities in the Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-*                      AstMapping *reg )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function modifies a supplied box to include the effect of any
-*     singularities in the co-ordinate system represented by the Frame.
-*     For a normal Cartesian coordinate system, the box will be returned
-*     unchanged. Other classes of Frame may do other things. For instance,
-*     a SkyFrame will check to see if the box contains either the north
-*     or south pole and extend the box appropriately.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     lbnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        lower axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     ubnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        upper axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     reg
-*        A Mapping which should be used to test if any singular points are
-*        inside or outside the box. The Mapping should leave an input
-*        position unchanged if the point is inside the box, and should
-*        set all bad if the point is outside the box.
-*-
-*/
-
-/* This base class returns the box limits unchanged. */
-}
-
-static double Offset2( AstFrame *this, const double point1[2], double angle,
-                     double offset, double point2[2], int *status ){
-/*
-*++
-*  Name:
-c     astOffset2
-f     AST_OFFSET2
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve in a 2D Frame.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     double astOffset2( AstFrame *this, const double point1[2], double angle,
-c                        double offset, double point2[2] );
-f     RESULT = AST_OFFSET2( THIS, POINT1, ANGLE, OFFSET, POINT2, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function finds the Frame coordinate values of a point which
-f     This routine finds the Frame coordinate values of a point which
-*     is offset a specified distance along the geodesic curve at a
-*     given angle from a specified starting point. It can only be
-*     used with 2-dimensional Frames.
-*
-*     For example, in a basic Frame, this offset will be along the
-*     straight line joining two points. For a more specialised Frame
-*     describing a sky coordinate system, however, it would be along
-*     the great circle passing through two sky positions.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     point1
-f     POINT1( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of the
-*        point marking the start of the geodesic curve.
-c     angle
-f     ANGLE = DOUBLE PRECISION (Given)
-*        The angle (in radians) from the positive direction of the second
-*        axis, to the direction of the required position, as seen from
-*        the starting position. Positive rotation is in the sense of
-*        rotation from the positive direction of axis 2 to the positive
-*        direction of axis 1.
-c     offset
-f     OFFSET = DOUBLE PRECISION
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be in the direction of the
-*        given angle. If it is negative, it will be in the opposite
-*        direction.
-c     point2
-f     POINT2( * ) = DOUBLE PRECISION (Returned)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        in which the coordinates of the required point will be returned.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astOffset2
-f     AST_OFFSET2 = DOUBLE PRECISION
-*        The direction of the geodesic curve at the end point. That is, the
-*        angle (in radians) between the positive direction of the second
-*        axis and the continuation of the geodesic curve at the requested
-*        end point. Positive rotation is in the sense of rotation from
-*        the positive direction of axis 2 to the positive direction of axis
-*        1.
-
-*  Notes:
-c     - The geodesic curve used by this function is the path of
-f     - The geodesic curve used by this routine is the path of
-*     shortest distance between two points, as defined by the
-c     astDistance function.
-f     AST_DISTANCE function.
-*     - An error will be reported if the Frame is not 2-dimensional.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*--
-*/
-
-/* Local Variables: */
-   int naxes;                    /* Number of Frame axes */
-   double result;                /* Returned value */
-
-/* Check the global error status. */
-   result = AST__BAD;
-   if ( !astOK ) return result;
-
-/* Initialize bad values. */
-   point2[ 0 ] = AST__BAD;
-   point2[ 1 ] = AST__BAD;
-
-/* Determine the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Report an error if the Frame is not 2 dimensional. */
-   if( naxes != 2 && astOK ) {
-      astError( AST__NAXIN, "astOffset2(%s): Invalid number of Frame axes (%d)."
-                " astOffset2 can only be used with 2 dimensonal Frames.", status,
-                astGetClass( this ), naxes );
-   }
-
-/* Check the supplied values. */
-   if ( astOK && point1[ 0 ] != AST__BAD && point1[ 1 ] != AST__BAD &&
-        angle != AST__BAD && offset != AST__BAD ) {
-
-/* Store the results. */
-      point2[ 0 ] = point1[ 0 ] + sin( angle )*offset;
-      point2[ 1 ] = point1[ 1 ] + cos( angle )*offset;
-
-/* The position angle of the curve does not vary in cartesian coordinates */
-      result = angle;
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void Offset( AstFrame *this, const double point1[],
-                    const double point2[], double offset, double point3[], int *status ) {
-/*
-*++
-*  Name:
-c     astOffset
-f     AST_OFFSET
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astOffset( AstFrame *this,
-c                     const double point1[], const double point2[],
-c                     double offset, double point3[] )
-f     CALL AST_OFFSET( THIS, POINT1, POINT2, OFFSET, POINT3, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function finds the Frame coordinate values of a point which
-f     This routine finds the Frame coordinate values of a point which
-*     is offset a specified distance along the geodesic curve between
-*     two other points.
-*
-*     For example, in a basic Frame, this offset will be along the
-*     straight line joining two points. For a more specialised Frame
-*     describing a sky coordinate system, however, it would be along
-*     the great circle passing through two sky positions.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     point1
-f     POINT1( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of the
-*        point marking the start of the geodesic curve.
-c     point2
-f     POINT2( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis.
-*        This should contain the coordinates of the point marking the
-*        end of the geodesic curve.
-c     offset
-f     OFFSET = DOUBLE PRECISION
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be towards the second
-*        point. If it is negative, it will be in the opposite
-*        direction. This offset need not imply a position lying
-*        between the two points given, as the curve will be
-*        extrapolated if necessary.
-c     point3
-f     POINT3( * ) = DOUBLE PRECISION (Returned)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        in which the coordinates of the required point will be returned.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - The geodesic curve used by this function is the path of
-f     - The geodesic curve used by this routine is the path of
-*     shortest distance between two points, as defined by the
-c     astDistance function.
-f     AST_DISTANCE function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - "Bad" coordinate values will also be returned if the two
-*     points supplied are coincident (or otherwise fail to uniquely
-*     specify a geodesic curve) but the requested offset is non-zero.
-*--
-*/
-
-/* Local Variables: */
-   double delta;                 /* Displacement along axis */
-   double dist;                  /* Distance between points */
-   double fract;                 /* Fraction of distance required */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Determine the number of Frame axes. */
-   naxes = astGetNaxes( this );
-   if ( astOK ) {
-
-/* Loop to determine the Cartesian distance between points 1 and 2. */
-      dist = 0.0;
-      for ( axis = 0; axis < naxes; axis++ ) {
-
-/* If any of the coordinates supplied is bad, set the distance to be
-   bad and quit looping. */
-         if ( ( point1[ axis ] == AST__BAD ) ||
-              ( point2[ axis ] == AST__BAD ) ) {
-            dist = AST__BAD;
-            break;
-
-/* Otherwise, accumulate the sum of squared displacements along each
-   axis. */
-         } else {
-            delta = point1[ axis ] - point2[ axis ];
-            dist += ( delta * delta );
-         }
-      }
-
-/* Take the square root to find the distance (if valid). */
-      if ( dist != AST__BAD ) dist = sqrt( dist );
-
-/* If the distance between the points cannot be found, or the distance
-   is zero but the required offset is non-zero, then set the result
-   coordinates to be bad. */
-      if ( ( dist == AST__BAD ) ||
-           ( ( dist == 0.0 ) && ( offset != 0.0 ) ) ) {
-         for ( axis = 0; axis < naxes; axis++ ) {
-            point3[ axis ] = AST__BAD;
-         }
-
-/* Otherwise, calculate what fraction of the distance between the
-   points we need to move, and apply this fraction of the displacement
-   along each axis. */
-      } else {
-         fract = ( dist == 0.0 ) ? 0.0 : offset / dist;
-         for ( axis = 0; axis < naxes; axis++ ) {
-            point3[ axis ] = point1[ axis ] +
-                             fract * ( point2[ axis ] - point1[ axis ] );
-         }
-      }
-   }
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*+
-*  Name:
-*     astOverlay
-
-*  Purpose:
-*     Overlay the attributes of a template Frame on to another Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astOverlay( AstFrame *template, const int *template_axes,
-*                      AstFrame *result )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function overlays attributes of one Frame (the "template") on to
-*     another Frame, so as to over-ride selected attributes of that second
-*     Frame. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which a Frame acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-
-*  Parameters:
-*     template
-*        Pointer to the template Frame, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of the
-*        "result" Frame (see below). For each axis in the result frame, the
-*        corresponding element of this array should contain the (zero-based)
-*        index of the template axis to which it corresponds. This array is used
-*        to establish from which template axis any axis-dependent attributes
-*        should be obtained.
-*
-*        If any axis in the result Frame is not associated with a template
-*        axis, the corresponding element of this array should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*-
-*/
-
-/* Local Variables: */
-   AstAxis *result_ax;           /* Pointer to result Axis object */
-   AstAxis *template_ax;         /* Pointer to template Axis object */
-   AstSystemType sys;            /* System value */
-   int result_axis;              /* Loop counter for result Frame axes */
-   int result_naxes;             /* Number of result Frame axes */
-   int template_axis;            /* Index of template Frame axis */
-   int template_naxes;           /* Number of template Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Define a macro that tests whether an attribute is set in the template and,
-   if so, transfers its value to the target. */
-#define OVERLAY(attribute) \
-   if ( astTest##attribute( template ) ) { \
-      astSet##attribute( result, astGet##attribute( template ) ); \
-   }
-
-/* Use the macro to transfer each Frame attribute in turn. */
-   OVERLAY(Dut1);
-   OVERLAY(Digits);
-   OVERLAY(Domain);
-   OVERLAY(Epoch);
-   OVERLAY(Title);
-   OVERLAY(ObsLat)
-   OVERLAY(ObsLon)
-   OVERLAY(ObsAlt)
-
-/* Transfer the ActiveUnit flag. */
-   astSetActiveUnit( result, astGetActiveUnit( template ) );
-
-/* Only overlay the System and AlignSystem attribute if the values are
-   valid for the result class. */
-   if( astTestSystem( template ) ) {
-      sys = astGetSystem( template );
-      if( astValidateSystem( result, sys, "astOverlay" ) ) {
-         astSetSystem( result, sys );
-      }
-   }
-
-   if( astTestAlignSystem( template ) ) {
-      sys = astGetAlignSystem( template );
-      if( astValidateSystem( result, sys, "astOverlay" ) ) {
-         astSetAlignSystem( result, sys );
-      }
-   }
-
-/* Now transfer attributes associated with individual axes. Obtain the number
-   of axes in the template and result Frames. */
-   template_naxes = astGetNaxes( template );
-   result_naxes = astGetNaxes( result );
-   if ( astOK ) {
-
-/* Loop through all the axes in the result Frame and determine to which
-   template axis each one corresponds. Check that the resulting axis index is
-   valid. If not, then the axis will not receive new attributes. */
-      for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-         template_axis = template_axes ? template_axes[ result_axis ] : result_axis;
-         if ( ( template_axis >= 0 ) && ( template_axis < template_naxes ) ) {
-
-/* Obtain pointers to the relevant Axis objects of each Frame and use the
-   astAxisOverlay method of the template Axis to overlay attributes on to
-   the result Axis. Annul the Axis pointers afterwards. */
-            template_ax = astGetAxis( template, template_axis );
-            result_ax = astGetAxis( result, result_axis );
-            astAxisOverlay( template_ax, result_ax );
-            template_ax = astAnnul( template_ax );
-            result_ax = astAnnul( result_ax );
-
-/* Quit looping if an error occurs. */
-            if ( !astOK ) break;
-         }
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void PermAxes( AstFrame *this, const int perm[], int *status ) {
-/*
-*+
-*  Name:
-*     astPermAxes
-
-*  Purpose:
-*     Permute the order of a Frame's axes.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astPermAxes( AstFrame *this, const int perm[] )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function permutes the order in which a Frame's axes occur.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     perm
-*        An array of int (with one element for each axis of the Frame)
-*        which lists the axes in their new order. Each element of this
-*        array should be a (zero-based) axis index identifying the
-*        axes according to their old (un-permuted) order.
-
-*  Notes:
-*     - Only genuine permutations of the axis order are permitted, so
-*     each axis must be referenced exactly once in the "perm" array.
-*     - If more than one axis permutation is applied to a Frame, the
-*     effects are cumulative.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic astPermAxes method which is
-*     available via the protected interface to the Frame class. A
-*     public interface to this method is provided by the
-*     astPermAxesId_ function.
-*/
-
-/* Local Variables: */
-   int *old;                     /* Pointer to copy of old permutation array */
-   int axis;                     /* Loop counter for Frame axes */
-   int naxes;                    /* Number of Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the permutation array, to check that it describes a genuine
-   permutation. */
-   astCheckPerm( this, perm, "astPermAxes" );
-
-/* Obtain the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Allocate memory and use it to store a copy of the old permutation array for
-   the Frame. */
-   old = astStore( NULL, this->perm, sizeof( int ) * (size_t) naxes );
-
-/* Apply the new axis permutation cumulatively to the old one and store the
-   result in the Frame. */
-   if ( astOK ) {
-      for ( axis = 0; axis < naxes; axis++ ) {
-         this->perm[ axis ] = old[ perm[ axis ] ];
-      }
-   }
-
-/* Free the temporary copy of the old array. */
-   old = astFree( old );
-}
-
-static AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-                           AstMapping **map, int *status ) {
-/*
-*+
-*  Name:
-*     astPickAxes
-
-*  Purpose:
-*     Create a new Frame by picking axes from an existing one.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-*                         AstMapping **map )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function creates a new Frame whose axes are copies of axes
-*     picked from an existing Frame. Other Frame attributes are also
-*     copied to the new Frame. Zero or more of the original axes may
-*     be picked in any order, but each can be used only
-*     once. Additional axes (with default characteristics) may be
-*     included in the new Frame if required.
-*
-*     Optionally, a Mapping that converts between the original Frame's
-*     axes and those of the new Frame may also be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the original Frame.
-*     naxes
-*        The number of axes required in the new Frame.
-*     axes
-*        Pointer to an array of int with naxes elements. This should
-*        contain (zero based) axis indices specifying the axes which
-*        are to be included in the new Frame, in the order
-*        required. Each axis index may occur only once.
-*
-*        If additional (default) axes are also to be included, the
-*        corresponding elements of this array should be set to -1.
-*     map
-*        Address of a location to receive a pointer to a new
-*        Mapping. This will be a PermMap (or a UnitMap as a special
-*        case) that describes the axis permutation that has taken
-*        place between the original and new Frames.  The forward
-*        transformation will convert from the original Frame's axes to
-*        the new one's, and vice versa.
-*
-*        If this Mapping is not required, a NULL value may be supplied
-*        for this parameter.
-
-*  Returned Value:
-*     Pointer to the new Frame.
-
-*  Notes:
-*     - The class of object returned may differ from that of the
-*     original Frame, depending on which axes are selected. For
-*     example, if a single axis is picked from a SkyFrame (which
-*     always has two axes), the resulting Frame cannot be a valid
-*     SkyFrame, so will revert to the parent class (Frame) instead.
-*     - The new Frame contains a deep copy of all the data selected
-*     from the original Frame. Modifying the new Frame will therefore
-*     not affect the original one.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic astPickAxes method
-*     available via the protected interface to the Frame class. The
-*     public interface to this method is provided by the
-*     astPickAxesId_ function.
-*/
-
-/* Local Variables: */
-   AstFrame *frame;              /* Pointer to Frame to be returned */
-   AstMapping *mapping;          /* Pointer to Mapping to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointers. */
-   frame = NULL;
-   if ( map ) *map = NULL;
-
-/* Check that a valid set of axes is being selected . */
-   astValidateAxisSelection( this, naxes, axes, "astPickAxes" );
-
-/* Create the required new Frame by selecting the axes. This also returns a
-   Mapping which transforms between the original Frame and the new one. */
-   astSubFrame( this, NULL, naxes, axes, NULL, &mapping, &frame );
-   if ( astOK ) {
-
-/* Return the Mapping pointer if required. */
-      if ( map ) {
-         *map = mapping;
-
-/* Otherwise annul the Mapping. If an error occurs, also annul the Frame. */
-      } else {
-         mapping = astAnnul( mapping );
-         if ( !astOK ) frame = astAnnul( frame );
-      }
-   }
-
-/* Return the pointer to the new Frame. */
-   return frame;
-}
-
-static void PrimaryFrame( AstFrame *this, int axis1,
-                          AstFrame **frame, int *axis2, int *status ) {
-/*
-*+
-*  Name:
-*     astPrimaryFrame
-
-*  Purpose:
-*     Uniquely identify a primary Frame and one of its axes.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astPrimaryFrame( AstFrame *this, int axis1, AstFrame **frame,
-*                           int *axis2 )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function returns information about the underlying (primary) Frame
-*     corresponding to a specified axis, when given what may be a compound
-*     Frame composed of more than one simpler one.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis1
-*        An axis index (zero-based) identifying the Frame axis for which
-*        information is required.
-*     frame
-*        Address of a location to receive a pointer to the underlying (primary)
-*        frame to which the requested axis belongs (i.e. this will not be a
-*        compound Frame).
-*     axis2
-*        Pointer to an int which is to receive the (zero-based) axis
-*        index within "frame" which identifies the axis being referred
-*        to, using the axis order that applied when the primary Frame
-*        was originally constructed (i.e. this function undoes all
-*        subsequent axis pemutations and the effects of combining
-*        Frames, in order to reveal the original underlying axis
-*        order).
-
-*  Notes:
-*     -  This protected method is provided so that class implementations can
-*     distinguish the axes of frames from one another (e.g. can distinguish
-*     a longitude axis as being different from a latitide axis) even after
-*     their order has been permuted and they have been combined with axes from
-*     other Frames.
-*     -  The reference count of the primary Frame will be incremented by one to
-*     reflect the new pointer returned.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise the returned values. */
-   *frame = NULL;
-   *axis2 = 0;
-
-/* Validate and permute the axis index supplied. */
-   axis1 = astValidateAxis( this, axis1, "astPrimaryFrame" );
-
-/* Since "this" is a primary Frame (i.e. is not compound), simply clone a
-   pointer to it. */
-   if ( astOK ) *frame = astClone( this );
-
-/* Return the permuted axis index, which refers to the original axis order. */
-   if ( astOK ) *axis2 = axis1;
-}
-
-double astReadDateTime_( const char *value, int *status ) {
-/*
-*+
-*  Name:
-*     astReadDateTime
-
-*  Purpose:
-*     Read a date/time string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     double astReadDateTime( const char *value )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function reads a date/time string in a variety of formats and
-*     returns the resulting time as a Modified Julian Date. If the string
-*     cannot be interpreted as a date/time or contains invalid values, an
-*     error is reported.
-
-*  Parameters:
-*     value
-*        Pointer to a null terminated string containing the value to be read.
-
-*  Returned Value:
-*     The time as a Modified Julian date.
-
-*  Date/Time Formats:
-*     The date/time formats supported by this function are listed below. These
-*     are interpreted in a case-insensitive manner and the function is
-*     generally flexible about the presence of additional white space and the
-*     use of alternative field delimiters.
-*
-*     Besselian Epoch
-*        Expressed in decimal years, with or without decimal places
-*        ("B1950" or "B1976.13", for example).
-*     Julian Epoch
-*        Expressed in decimal years, with or without decimal places
-*        ("J2000" or "J2100.9", for example).
-*     Year
-*        Decimal years, with or without decimal places ("1996.8" for example).
-*        Such values are interpreted as a Besselian epoch (see above) if less
-*        than 1984.0 and as a Julian epoch otherwise.
-*     Julian Date
-*        With or without decimal places ("JD 2454321.9" for example).
-*     Modified Julian Date
-*        With or without decimal places ("MJD 54321.4" for example).
-*     Gregorian Calendar Date
-*        With the month expressed as an integer or 3-character
-*        abbreviation, and with optional decimal places to represent a
-*        fraction of a day ("1996-10-2" or "1996-Oct-2.6" for
-*        example). If no fractional part of a day is given, the time
-*        refers to the start of the day (zero hours).
-*     Gregorian Date and Time
-*        Any calendar date (as above) but with a fraction of a day expressed
-*        as hours, minutes and seconds ("1996-Oct-2 12:13:56.985" for example).
-*        The date and time can be separated by a space or by a "T" (as used 
-*        by ISO8601).
-
-*  Notes:
-*     -  The date/time value is interpreted as a calendar date and time, not
-*     linked to any particular time system. Thus, interpretation of hours,
-*     minutes and seconds is done in the obvious manner assuming 86400 seconds
-*     in a day. No allowance for is made, for instance, for leap seconds or for
-*     the varying length of a second in some time systems.
-*     -  A value of AST__BAD is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Vaiables: */
-   char cmonth[ 4 ];             /* Buffer for name of month */
-   char sep1[ 2 ];               /* Year/month separator string */
-   char sep2[ 2 ];               /* Month/day separator string */
-   char sep3[ 2 ];               /* Hour/minute separator string */
-   char sep4[ 2 ];               /* Minute/second separator string */
-   char *cc;                     /* Pointer to copy of remaining text */
-   const char *v;                /* Pointer into value string */
-   const char *p;                /* Pointer to date/time separator */
-   double day;                   /* Day number plus fraction of whole day */
-   double epoch;                 /* Epoch stored as decimal years */
-   double hms;                   /* Hours, min & sec as fraction of a day */
-   double jd;                    /* Julian Date */
-   double mjd;                   /* Modified Julian Date */
-   double result;                /* Result to be returned */
-   double sec;                   /* Seconds and fractions of a second */
-   int hour;                     /* Number of hours */
-   int iday;                     /* Number of whole days */
-   int l;                        /* Length of string remaining */
-   int len;                      /* Length of string */
-   int match;                    /* Date/time string has correct form? */
-   int minute;                   /* Number of minutes */
-   int month;                    /* Number of months */
-   int nc;                       /* Number of characters read from string */
-   int stat;                     /* Status return from SLALIB functions */
-   int year;                     /* Number of years */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Obtain the length of the input string. */
-   len = (int) strlen( value );
-
-/* Attempt to read the string using each recognised format in turn. */
-
-/* Besselian epoch in decimal years (e.g. "B1950.0"). */
-/* ================================================== */
-   if ( nc = 0,
-        ( 1 == astSscanf( value, " %*1[Bb] %lf %n", &epoch, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date. */
-      result = palSlaEpb2d( epoch );
-
-/* Julian epoch in decimal years (e.g. "J2000.0"). */
-/* =============================================== */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( value, " %*1[Jj] %lf %n", &epoch, &nc ) )
-               && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date. */
-      result = palSlaEpj2d( epoch );
-
-/* Decimal years (e.g. "1976.2"). */
-/* ============================== */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( value, " %lf %n", &epoch, &nc ) )
-               && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date, treating the epoch as Julian or Besselian
-   depending on whether it is 1984.0 or later. */
-      result = ( epoch < 1984.0 ) ? palSlaEpb2d( epoch ) : palSlaEpj2d( epoch );
-
-/* Modified Julian Date (e.g. "MJD 54321.0"). */
-/* ============================================ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( value, " %*1[Mm] %*1[Jj] %*1[Dd] %lf %n",
-                              &mjd, &nc ) ) && ( nc >= len ) ) {
-
-/* Use the result directly. */
-      result = mjd;
-
-/* Julian Date (e.g. "JD 2454321.5"). */
-/* ==================================== */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( value, " %*1[Jj] %*1[Dd] %lf %n",
-                              &jd, &nc ) ) && ( nc >= len ) ) {
-
-/* Convert to Modified Julian Date. */
-      result = jd - 2400000.5;
-
-/* Gregorian calendar date (e.g. "1996-10-2" or "1996-Oct-2"). */
-/* =========================================================== */
-/* This format also allows day fractions expressed as decimal days, e.g:
-
-      "1996-Oct-2.5001"
-
-   or as hours, minutes and seconds, e.g:
-
-      "1996-Oct-2 12:14:30.52"
-
-   Various alternative field delimiters are also allowed. */
-   } else {
-
-/* Note that the method used to parse this format relies heavily on
-   conditional execution controlled by "&&" and "||" operators. Initialise
-   the variables used. */
-      v = value;
-      l = len;
-      *cmonth = '\0';
-      year = month = iday = hour = minute = 0;
-      day = sec = 0.0;
-
-/* Identify the year and month. */
-/* ---------------------------- */
-/* Try to match an initial " 1996 - 10 -" or " 1996 10 " or similar. */
-      match =
-         ( nc = 0, ( 4 == astSscanf( v, " %d %1[:/-] %2d %1[:/-]%n",
-                                  &year, sep1, &month, sep2, &nc ) ) );
-      match = match ||
-         ( nc = 0, ( 4 == astSscanf( v, " %d%1[ ] %2d%1[ ]%n",
-                                  &year, sep1, &month, sep2, &nc ) ) );
-
-/* If that failed, allow " 1996 - Oct -" or " 1996 Oct " or similar. */
-      match = match ||
-         ( nc = 0, ( 4 == astSscanf( v,
-                                  " %d %1[:/-] %3[ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-                                  "abcdefghijklmnopqrstuvwxyz] %1[:/-]%n",
-                                  &year, sep1, cmonth, sep2, &nc ) ) );
-      match = match ||
-         ( nc = 0, ( 4 == astSscanf( v,
-                                  " %d%1[ ] %3[ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-                                  "abcdefghijklmnopqrstuvwxyz]%1[ ]%n",
-                                  &year, sep1, cmonth, sep2, &nc ) ) );
-
-/* Alternative field separators are permitted above, but ensure that
-   they are both the same. */
-      match = match && ( *sep1 == *sep2 );
-
-/* Identify the day and fraction of day. */
-/*-------------------------------------- */
-/* If the above matched correctly, modify the string pointer "v" to
-   the next character to be interpreted and decrement the remaining
-   string length. */
-      if ( match ) {
-         v += nc;
-         l -= nc;
-
-/* ISO8601 format uses the litter T as a delimiter between the date and time. 
-   If there is a T in the remaining string, take a copy and change the T to 
-   a space. */
-         p = strchr( v, 'T' );
-         if( p ) {
-            cc = astStore( NULL, v, l + 1 );
-            cc[ p - v ] = ' ';
-            v = cc;
-         } else {
-            cc = NULL;
-         }                     
-
-/* We now try to match the following characters but without reading
-   any values.  This is done to ensure the string has the correct form
-   (e.g. exclude "-" signs and exponents in numbers, which are
-   otherwise hard to detect). */
-
-/* Try to match " 12.3456 " or similar. */
-         match =
-            ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789].%*[0123456789] %n",
-                                     &nc ) )
-                      && ( nc == l ) );
-
-/* If that failed, then try to match " 12. " or similar. */
-         match = match ||
-            ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789]. %n", &nc ) )
-                      && ( nc == l ) );
-
-/* If that also failed, then try to match just " 12 " or similar. */
-         match = match ||
-            ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789] %n", &nc ) )
-                      && ( nc == l ) );
-
-/* If any of the above patterns matched, now read the data (the day number)
-   as a double value. */
-         if ( match ) {
-            match = ( nc = 0, ( 1 == astSscanf( v, " %lf %n", &day, &nc ) )
-                              && ( nc == l ) );
-
-/* If none of the above matched, then look to see if the day fraction has been
-   given in hours, minutes and seconds by trying to match " 12 03 : 45 :" or
-   " 12 13 45 " or similar. */
-         } else {
-            match =
-               ( nc = 0, ( 5 == astSscanf( v,
-                                        " %2d%*1[ ] %2d %1[:/-] %2d %1[:/-]%n",
-                                        &iday, &hour, sep3, &minute, sep4,
-                                        &nc ) ) );
-            match = match ||
-               ( nc = 0, ( 5 == astSscanf( v, " %2d%*1[ ] %2d%1[ ] %2d%1[ ]%n",
-                                        &iday, &hour, sep3, &minute, sep4,
-                                        &nc ) ) );
-
-/* Alternative field separators are permitted above, but ensure that
-   they are both the same. */
-            match = match && ( *sep3 == *sep4 );
-
-/* If the day number was read as an integer, convert it to double. */
-            if ( match ) day = (double) iday;
-
-/* If no match, see if we can get a match without a trailing seconds field. */
-            if( !match ) {
-               match =
-                  ( nc = 0, ( 4 == astSscanf( v,
-                                        " %2d%*1[ ] %2d %1[:/-] %2d %n",
-                                        &iday, &hour, sep3, &minute, &nc ) && 
-                                        ( nc == l ) ) );
-               match = match ||
-                  ( nc = 0, ( 4 == astSscanf( v, " %2d%*1[ ] %2d%1[ ] %2d %n",
-                                        &iday, &hour, sep3, &minute, &nc ) &&
-                                        ( nc == l ) ) );
-
-/* If the day number was read as an integer, convert it to double. */
-               if ( match ) day = (double) iday;
-
-/* Otherwise, identify the seconds field. */
-/* -------------------------------------- */
-/* If hours and minutes fields have been matched, now look for the
-   final seconds (and fractions of seconds) field. This is similar to
-   the day/fraction field (see earlier) in that we first check that it
-   has the correct form before reading its value. */
-
-/* Adjust the string pointer and remaining string length. */
-            } else {
-               v += nc;
-               l -= nc;
-
-/* Try to match " 12.3456 " or similar. */
-               match =
-                  ( nc = 0, ( 0 == astSscanf( v,
-                                          " %*2[0123456789].%*[0123456789] %n",
-                                           &nc ) )
-                            && ( nc == l ) );
-
-/* If that failed, then try to match " 12. " or similar. */
-               match = match ||
-                  ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789]. %n", &nc ) )
-                            && ( nc == l ) );
-
-/* If that also failed, then try to match just " 12 " or similar. */
-               match = match ||
-                  ( nc = 0, ( 0 == astSscanf( v, " %*2[0123456789] %n", &nc ) )
-                            && ( nc == l ) );
-
-/* If any of the above patterns matched, now read the data (the number of
-   seconds) as a double value. */
-               if ( match ) {
-                  match = ( nc = 0, ( 1 == astSscanf( v, " %lf %n", &sec, &nc ) )
-                                    && ( nc == l ) );
-               }
-            }
-         }
-
-/* Free resources */
-         if( cc ) cc = astFree( cc );
-
-      }
-
-/* Interpret the values that were read. */
-/* ------------------------------------ */
-/* We execute this if all of the above text matching was successful,
-   transferred the required number of data values, and consumed the
-   entire input string. */
-      if ( match ) {
-
-/* See if the month was given as a character string (e.g. "Oct") instead of
-   a number. If so, define local variables for use in converting it. */
-         if ( *cmonth ) {
-            char lcmonth[ 4 ];      /* Lower case copy of month string */
-            const char *ptr;        /* Pointer result from look up */
-            const char *table =     /* Month look up table */
-                       "jan feb mar apr may jun jul aug sep oct nov dec";
-            int i;                  /* Loop counter for characters */
-
-/* Convert the month string to lower case. */
-            for ( i = 0; cmonth[ i ]; i++ ) {
-               lcmonth[ i ] = tolower( cmonth[ i ] );
-            }
-            lcmonth[ i ] = '\0';
-
-/* Look the month up in the table of months and generate the required month
-   number. */
-            if ( ( ptr = strstr( table, lcmonth ) ) ) {
-               month = 1 + ( ptr - table ) / 4;
-
-/* If the lookup failed, report an error. */
-   	    } else {
-               astError( AST__DTERR, "Month value \"%s\" is invalid.", status,
-                         cmonth );
-            }
-         }
-
-/* If OK, extract the integral day number and convert years, months and days
-   to a Modified Julian Date. */
-         if ( astOK ) {
-            iday = (int) day;
-            palSlaCaldj( year, month, iday, &mjd, &stat );
-
-/* Examine the return status from the conversion and report an appropriate
-   error if necessary. */
-            switch ( stat ) {
-            case 1:
-               astError( AST__DTERR, "Year value (%d) is invalid.", status, year );
-               break;
-            case 2:
-               astError( AST__DTERR, "Month value (%d) is invalid.", status, month );
-               break;
-            case 3:
-               astError( AST__DTERR, "Day value (%.*g) is invalid.", status, DBL_DIG,
-                         day );
-               break;
-
-/* If conversion to MJD was successful, add any fractional part of a day to the
-   result. */
-            default:
-               mjd += ( day - (double) iday );
-
-/* Convert hours, minutes and seconds to a fraction of a day (this will give
-   zero if none of these quantities was supplied). */
-               palSlaDtf2d( hour, minute, sec, &hms, &stat );
-
-/* Examine the return status from the conversion and report an appropriate
-   error if necessary. */
-               switch ( stat ) {
-               case 1:
-                  astError( AST__DTERR, "Hour value (%d) is invalid.", status, hour );
-                  break;
-               case 2:
-                  astError( AST__DTERR, "Minute value (%d) is invalid.", status,
-                            minute );
-                  break;
-               case 3:
-                  astError( AST__DTERR, "Seconds value (%.*g) is invalid.", status,
-                            DBL_DIG, sec );
-                  break;
-
-/* Add the fraction of a day derived from hours, minutes and seconds fields to
-   the result. */
-               default:
-                  mjd += hms;
-                  break;
-               }
-               break;
-            }
-
-/* Return the result, if no error occurred. */
-            if ( astOK ) result = mjd;
-         }
-
-/* If none of the supported date/time formats matched, then report an error. */
-      } else {
-         astError( AST__DTERR, "Date/time does not have the correct form." , status);
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void ReportPoints( AstMapping *this_mapping, int forward,
-                          AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-*  Name:
-*     ReportPoints
-
-*  Purpose:
-*     Report the effect of transforming a set of points using a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void ReportPoints( AstMapping *this, int forward,
-*                        AstPointSet *in_points, AstPointSet *out_points, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the protected astReportPoints
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function reports the coordinates of a set of points before
-*     and after being transformed by a Frame, by writing them to
-*     standard output.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     forward
-*        A non-zero value indicates that the Frame's forward
-*        coordinate transformation has been applied, while a zero
-*        value indicates the inverse transformation.
-*     in_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of a set of points before the Frame was applied.
-*     out_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of the same set of points after the Frame has
-*        been applied.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   double **ptr_in;              /* Pointer to array of input data pointers */
-   double **ptr_out;             /* Pointer to array of output data pointers */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of input coordinates per point */
-   int ncoord_out;               /* Number of output coordinates per point */
-   int npoint;                   /* Number of points to report */
-   int npoint_in;                /* Number of input points */
-   int npoint_out;               /* Number of output points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_mapping;
-
-/* Obtain the numbers of points and coordinates associated with each
-   PointSet. */
-   npoint_in = astGetNpoint( in_points );
-   npoint_out = astGetNpoint( out_points );
-   ncoord_in = astGetNcoord( in_points );
-   ncoord_out = astGetNcoord( out_points );
-
-/* Obtain the pointers that give access to the coordinate data
-   associated with each PointSet. */
-   ptr_in = astGetPoints( in_points );
-   ptr_out = astGetPoints( out_points );
-
-/* In the event that both PointSets don't contain equal numbers of
-   points (this shouldn't actually happen), simply use the minimum
-   number. */
-   npoint = ( npoint_in < npoint_out ) ? npoint_in : npoint_out;
-
-/* Loop to report the effect of the transformation on each point in
-   turn. */
-   for ( point = 0; point < npoint; point++ ) {
-
-/* Report the input coordinates (in parentheses and separated by
-   commas). Format each value for display using the Frame's astFormat
-   method. */
-      printf( "(" );
-      for ( coord = 0; coord < ncoord_in; coord++ ) {
-         printf( "%s%s", coord ? ", " : "",
-                 astFormat( this, coord, ptr_in[ coord ][ point ] ) );
-      }
-
-/* Similarly report the output coordinates. */
-      printf( ") --> (" );
-      for ( coord = 0; coord < ncoord_out; coord++ ) {
-         printf( "%s%s", coord ? ", " : "",
-                 astFormat( this, coord, ptr_out[ coord ][ point ] ) );
-      }
-      printf( ")\n" );
-   }
-}
-
-static void Resolve( AstFrame *this, const double point1[],
-                       const double point2[], const double point3[],
-                       double point4[], double *d1, double *d2, int *status ){
-/*
-*++
-*  Name:
-c     astResolve
-f     AST_RESOLVE
-
-*  Purpose:
-*     Resolve a vector into two orthogonal components
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astResolve( AstFrame *this, const double point1[],
-c                      const double point2[], const double point3[],
-c                      double point4[], double *d1, double *d2 );
-f     CALL AST_RESOLVE( THIS, POINT1, POINT2, POINT3, POINT4, D1, D2,
-f                       STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function resolves a vector into two perpendicular components.
-f     This routine resolves a vector into two perpendicular components.
-*     The vector from point 1 to point 2 is used as the basis vector.
-*     The vector from point 1 to point 3 is resolved into components
-*     parallel and perpendicular to this basis vector. The lengths of the
-*     two components are returned, together with the position of closest
-*     aproach of the basis vector to point 3.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     point1
-f     POINT1( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vector to be resolved.
-c     point2
-f     POINT2( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-c     point3
-f     POINT3( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the vector to be
-*        resolved.
-c     point4
-f     POINT4( * ) = DOUBLE PRECISION (Returned)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        in which the coordinates of the point of closest approach of the
-*        basis vector to point 3 will be returned.
-c     d1
-f     D1 = DOUBLE PRECISION (Returned)
-c        The address of a location at which to return the distance from
-f        The distance from
-*        point 1 to point 4 (that is, the length of the component parallel
-*        to the basis vector). Positive values are in the same sense as
-*        movement from point 1 to point 2.
-c     d2
-f     D2 = DOUBLE PRECISION (Returned)
-c        The address of a location at which to return the distance from
-f        The distance from
-*        point 4 to point 3 (that is, the length of the component
-*        perpendicular to the basis vector). The value is always positive.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - Each vector used in this function is the path of
-f     - Each vector used in this routine is the path of
-*     shortest distance between two points, as defined by the
-c     astDistance function.
-f     AST_DISTANCE function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the required
-*     output values are undefined.
-*--
-*/
-
-/* Local Variables: */
-   double bv;                    /* Length of basis vector */
-   double c;                     /* Component length */
-   double dp;                    /* Dot product */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of Frame axes */
-   int ok;                       /* OK to proceed? */
-
-/* Check the global error status. */
-   *d1 = AST__BAD;
-   *d2 = AST__BAD;
-   if ( !astOK ) return;
-
-/* Determine the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Initialize bad values, and check if the supplied vectors are good. */
-   ok = 1;
-   for( axis = 0; axis < naxes; axis++ ){
-      point4[ axis ] = AST__BAD;
-      if( point1[ axis ] == AST__BAD ||
-          point2[ axis ] == AST__BAD ||
-          point3[ axis ] == AST__BAD ) ok = 0;
-   }
-
-/* Check the supplied values. */
-   if ( ok ) {
-
-/* Find the dot product of the basis vector with the vector joining point 1
-   and point 3. At the same time form the squared length of the basis
-   vector. */
-      dp = 0.0;
-      bv = 0.0;
-      for( axis = 0; axis < naxes; axis++ ){
-         c = point2[ axis ] - point1[ axis ];
-         dp += c * ( point3[ axis ] - point1[ axis ] );
-         bv += c * c;
-      }
-
-/* Check the basis vector does not have zero length, and convert the
-   squared length into a length. */
-      if( bv > 0.0 ) {
-         bv = sqrt( bv );
-
-/* The dot product is the required distance d1 multiplied by the length
-   of the basis vector. Form the distance d1. */
-         *d1 = dp/bv;
-
-/* Offset away from point 1 towards point 2 by a distance of d1. */
-         for( axis = 0; axis < naxes; axis++ ){
-            point4[ axis ] = point1[ axis ] +
-                             (*d1/bv)*( point2[ axis ] - point1[ axis ] );
-         }
-
-/* Finally, form the required length d2. */
-         *d2 = 0.0;
-         for( axis = 0; axis < naxes; axis++ ){
-            c = ( point3[ axis ] - point4[ axis ] );
-            *d2 += c*c;
-         }
-         *d2 = sqrt( *d2 );
-
-      }
-   }
-
-   return;
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this, const double point1[], 
-                                   const double point2[], AstPointSet *in,
-                                   AstPointSet *out, int *status ) {
-/*
-*+
-*  Name:
-*     astResolvePoints
-
-*  Purpose:
-*     Resolve a set of vectors into orthogonal components
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstPointSet *astResolvePoints( AstFrame *this, const double point1[], 
-*                                    const double point2[], AstPointSet *in,
-*                                    AstPointSet *out )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function takes a Frame and a set of vectors encapsulated
-*     in a PointSet, and resolves each one into two orthogonal components,
-*     returning these two components in another PointSet.
-*
-*     This is exactly the same as the public astResolve method, except
-*     that this method allows many vectors to be processed in a single call,
-*     thus reducing the computational cost of overheads of many
-*     individual calls to astResolve.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vectors to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     in
-*        Pointer to the PointSet holding the ends of the vectors to be
-*        resolved.
-*     out
-*        Pointer to a PointSet which will hold the length of the two
-*        resolved components. A NULL value may also be given, in which 
-*        case a new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet. The first axis will 
-*     hold the lengths of the vector components parallel to the basis vector. 
-*     These values will be signed (positive values are in the same sense as 
-*     movement from point 1 to point 2. The second axis will hold the lengths 
-*     of the vector components perpendicular to the basis vector. These
-*     values will be signed only if the Frame is 2-dimensional, in which
-*     case a positive value indicates that rotation from the basis vector 
-*     to the tested vector is in the same sense as rotation from the first 
-*     to the second axis of the Frame.
-
-*  Notes:
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of axes in the supplied Frame.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and 2 coordinate values per point.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - We assume flat geometry throughout this function. Other classes,  
-*     (e.g. SkyFrame) will override this method using more appropriate 
-*     geometry. 
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_in;              /* Pointers to input axis values */
-   double **ptr_out;             /* Pointers to returned axis values */
-   double *basisv;               /* Pointer to array holding basis vector */
-   double *d1;                   /* Pointer to next parallel component value */
-   double *d2;                   /* Pointer to next perpendicular component value */
-   double *ip;                   /* Pointer to next input axis value */
-   double bv;                    /* Length of basis vector */
-   double c;                     /* Constant value */
-   double d;                     /* Component length */
-   double dp;                    /* Dot product */
-   double x1;                    /* First axis of basis vector */
-   double x2;                    /* First axis of test vector */
-   double y1;                    /* Second axis of basis vector */
-   double y2;                    /* Second axis of test vector */
-   int axis;                     /* Loop counter for axes */
-   int ipoint;                   /* Index of next point */
-   int nax;                      /* Number of Frame axes */
-   int ncoord_in;                /* Number of input PointSet coordinates */
-   int ncoord_out;               /* Number of coordinates in output PointSet */
-   int npoint;                   /* Number of points to transform */
-   int npoint_out;               /* Number of points in output PointSet */
-   int ok;                       /* OK to proceed? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain the number of axes in the Frame. */
-   nax = astGetNaxes( this );
-
-/* Obtain the number of input vectors to resolve and the number of coordinate
-   values per vector. */
-   npoint = astGetNpoint( in );
-   ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
-   required by the Frame. Report an error if these numbers do not match. */
-   if ( astOK && ( ncoord_in != nax ) ) {
-      astError( AST__NCPIN, "astResolvePoints(%s): Bad number of coordinate "
-                "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
-                astGetClass( in ) );
-      astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
-                "each input point.", status, astGetClass( this ), nax );
-   }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
-   then obtain the number of points and number of coordinates per point for
-   this PointSet. */
-   if ( astOK && out ) {
-      npoint_out = astGetNpoint( out );
-      ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
-   output coordinate values and report an error if they are not. */
-      if ( astOK ) {
-         if ( npoint_out < npoint ) {
-            astError( AST__NOPTS, "astResolvePoints(%s): Too few points (%d) in "
-                      "output %s.", status, astGetClass( this ), npoint_out,
-                      astGetClass( out ) );
-            astError( AST__NOPTS, "The %s needs space to hold %d transformed "
-                      "point(s).", status, astGetClass( this ), npoint );
-         } else if ( ncoord_out < 2 ) {
-            astError( AST__NOCTS, "astResolvePoints(%s): Too few coordinate "
-                      "values per point (%d) in output %s.", status,
-                      astGetClass( this ), ncoord_out, astGetClass( out ) );
-            astError( AST__NOCTS, "The %s supplied needs space to store 2 "
-                      "coordinate value(s) per transformed point.", status,
-                      astGetClass( this ) );
-         }
-      }
-   }
-
-/* If all the validation stages are passed successfully, and a NULL output
-   pointer was given, then create a new PointSet to encapsulate the output
-   coordinate data. */
-   if ( astOK ) {
-      if ( !out ) {
-         result = astPointSet( npoint, 2, "", status );
-
-/* Otherwise, use the PointSet supplied. */
-      } else {
-         result = out;
-      }
-   }
-
-/* Get pointers to the input and output axis values */
-   ptr_in = astGetPoints( in );
-   ptr_out = astGetPoints( result );
-
-/* Store points to the first two axis arrays in the returned PointSet. */
-   d1 = ptr_out[ 0 ];
-   d2 = ptr_out[ 1 ];
-
-/* Allocate work space. */
-   basisv = astMalloc( sizeof( double )*(size_t) nax );
-
-/* If the Frame has only one axis, then the supplied basic vector is
-   irrelevant - the returned perpendicular distances are always zero and
-   the returned parallel distances are just the distances from point1 
-   to each input point. */
-   if( nax < 2 && basisv ) {
-      ip = ptr_in[ 0 ];
-      for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++, ip++ ) {
-         *d1 = astAxDistance( this, 1, point1[0], *ip );
-         *d2 = 0.0;
-      }
-
-/* Now deal with Frames which have 2 or more axes */
-   } else if( basisv ){
-
-/* Check if the supplied positions defining the basis vector are good.
-   Store the basis vector, and get its squared length. */
-      ok = 1;
-      bv = 0.0;
-      for( axis = 0; axis < nax; axis++ ){
-         if( point1[ axis ] == AST__BAD ||
-             point2[ axis ] == AST__BAD ) {
-            ok = 0;
-            break;
-         } else {
-            basisv[ axis ] =  point2[ axis ] - point1[ axis ];
-            bv += basisv[ axis ]*basisv[ axis ];
-         }
-      }
-
-/* Check the basis vector does not have zero length, and convert the
-   squared length into a length. */
-      if( ok && bv > 0.0 ) {
-         bv = sqrt( bv );
-      } else {
-         ok = 0;
-      }
-
-/* Store points to the first two axis arrays in the returned PointSet. */
-      d1 = ptr_out[ 0 ];
-      d2 = ptr_out[ 1 ];
-
-/* Check supplied values can be used */
-      if( ok ) {
-
-/* Loop round each supplied vector. */
-         for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
-
-/* Find the dot product of the basis vector with the vector joining point 1
-   and the end of the current vector. */
-            ok = 1;
-            dp = 0.0;
-            for( axis = 0; axis < nax; axis++ ){
-               d = ptr_in[ axis ][ ipoint ] - point1[ axis ];
-               if( d != AST__BAD ) {
-                  dp += basisv[ axis ] * d;
-               } else {
-                  ok = 0;
-                  break;
-               }
-            }
-
-/* If this input position is good... */
-            if( ok ) {
-
-/* The dot product is the required parallel component length multiplied by the 
-   length of the basis vector. Form the distance d1. */
-               *d1 = dp/bv;
-
-/* Offset away from point 1 towards point 2 by a distance of d1, and form the 
-   required length d2. */
-               c = *d1/bv;
-               if( nax > 2 ) {
-                  *d2 = 0.0;
-                  for( axis = 0; axis < nax; axis++ ){
-                     d = ptr_in[ axis ][ ipoint ] - 
-                         ( point1[ axis ] + c*basisv[ axis ] );
-                     *d2 += d*d;
-                  }
-                  *d2 = sqrt( *d2 );
-
-/* If the Frame is 2 dimensional, we can give a sign the the perpendicular 
-   component. */
-               } else {
-                  x1 = c*basisv[ 0 ];
-                  y1 = c*basisv[ 1 ];
-                  x2 = ptr_in[ 0 ][ ipoint ] - ( point1[ 0 ] + x1 );
-                  y2 = ptr_in[ 1 ][ ipoint ] - ( point1[ 1 ] + y1 );
-                  *d2 = sqrt( x2*x2 + y2*y2 );
-                  if( x1*y2 - x2*y1 < 0.0 ) *d2 = -(*d2);
-               }
-
-/* If this input vector is bad, put bad values in the output */
-            } else {
-               *d1 = AST__BAD;
-               *d2 = AST__BAD;
-            }
-         }
-
-/* If supplied values cannot be used, fill the returned PointSet with bad
-   values */
-      } else {
-         for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
-            *d1 = AST__BAD;
-            *d2 = AST__BAD;
-         }
-      }
-   }
-
-/* Free resources */
-   basisv = astFree( basisv );
-
-/* Annul the returned PointSet if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void SetActiveUnit( AstFrame *this, int value, int *status ){
-/*
-*++
-*  Name:
-c     astSetActiveUnit
-f     AST_SETACTIVEUNIT
-
-*  Purpose:
-*     Specify how the Unit attribute should be used.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astSetActiveUnit( AstFrame *this, int value )
-f     CALL AST_SETACTIVEUNIT( THIS, VALUE, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function
-f     This routine
-*     sets the current value of the ActiveUnit flag for a Frame, which
-*     controls how the Frame behaves when it is used (by 
-c     astFindFrame or astConvert) 
-f     AST_FINDFRAME or AST_CONVERT) 
-*     to match another Frame. If the ActiveUnit flag is set in both
-*     template and target Frames then the returned Mapping takes into account 
-*     any differences in axis units. The default value for simple Frames is 
-*     zero, which preserves the behaviour of versions of AST prior to 
-*     version 2.0.
-*
-*     If the ActiveUnit flag of either Frame is 
-c     zero,
-f     .FALSE.,
-*     then the Mapping will ignore any difference in the Unit attributes of
-*     corresponding template and target axes. In this mode, the Unit
-*     attributes are purely descriptive commentary for the benefit of
-*     human readers and do not influence the Mappings between Frames.
-*     This is the behaviour which all Frames had in older version of AST,
-*     prior to the introduction of this attribute.
-*
-*     If the ActiveUnit flag of both Frames is 
-c     non-zero,
-f     .TRUE.,
-*     then the Mapping from template to target will take account of any 
-*     difference in the axis Unit attributes, where-ever possible. For 
-*     instance, if corresponding target and template axes have Unit strings of 
-*     "km" and "m", then the FrameSet class will use a ZoomMap to connect 
-*     them which introduces a scaling of 1000. If no Mapping can be found
-*     between the corresponding units string, then an error is reported.
-*     In this mode, it is assumed that values of the Unit attribute conform
-*     to the syntax for units strings described in the FITS WCS Paper I
-*     "Representations of world coordinates in FITS" (Greisen & Calabretta).
-*     Particularly, any of the named unit symbols, functions, operators or
-*     standard multiplier prefixes listed within that paper can be used within
-*     a units string. A units string may contain symbols for unit which are
-*     not listed in the FITS paper, but transformation to any other units
-*     will then not be possible (except to units which depend only on the
-*     same unknown units - thus "flops" can be transformed to "Mflops"
-*     even though "flops" is not a standard FITS unit symbol).
-*
-*     A range of common non-standard variations of unit names and multiplier 
-*     prefixes are also allowed, such as adding an "s" to the end of Angstrom, 
-*     using a lower case "a" at the start of "angstrom", "micron" instead of 
-*     "um", "sec" instead of "s", etc.
-*
-c     If the ActiveUnit flag is non-zero, setting a new Unit value for an
-f     If the ActiveUnit flag is .TRUE., setting a new Unit value for an
-*     axis may also change its Label and Symbol attributes. For instance, if
-*     an axis has Unit "Hz" and Label "frequency", then changing its Unit to
-*     "log(Hz)" will change its Label to "log( frequency )". In addition,
-*     the Axis Format attribute will be cleared when-ever a new value
-*     is assigned to the Unit attribute.
-*
-c     Note, if a non-zero value is set for the ActiveUnit flag, then changing a
-f     Note, if a .TRUE. value is set for the ActiveUnit flag, then changing a
-*     Unit value for the current Frame within a FrameSet will result in the
-*     Frame being re-mapped (that is, the Mappings which define the
-*     relationships between Frames within the FrameSet will be modified to
-*     take into account the change in Units).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     value
-f     VALUE = LOGICAL (Given)
-*        The new value to use.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     SkyFrame
-c        The ActiveUnit flag for a SkyFrame is always 0 (any value
-c        supplied using this function is ignored).
-f        The ActiveUnit flag for a SkyFrame is always .FALSE. (any value
-f        supplied using this routine is ignored).
-*     SpecFrame
-c        The ActiveUnit flag for a SpecFrame is always 1 (any value
-c        supplied using this function is ignored).
-f        The ActiveUnit flag for a SpecFrame is always .TRUE. (any value
-f        supplied using this routine is ignored).
-*     FluxFrame
-c        The ActiveUnit flag for a FluxFrame is always 1 (any value
-c        supplied using this function is ignored).
-f        The ActiveUnit flag for a FluxFrame is always .TRUE. (any value
-f        supplied using this routine is ignored).
-*     CmpFrame
-c        The default ActiveUnit flag for a CmpFrame is 1 if both of the
-c        component Frames are using active units, and zero otherwise. When
-f        The default ActiveUnit flag for a CmpFrame is .TRUE. if both of the
-f        component Frames are using active units, and .FALSE. otherwise. When
-*        a new value is set for the ActiveUnit flag, the flag value
-*        is propagated to the component Frames. This change will be
-*        reflected through all references to the component Frames, not
-*        just those encapsulated within the CmpFrame.
-*     Region:
-*        Regions always use active units if possible.
-
-*  Notes:
-*     - The ActiveUnit flag resembles a Frame attribute, except that it
-*     cannot be tested or cleared, and it cannot be accessed using the
-c     generic astGet<X> and astSet<X> functions.
-f     generic AST_GET<X> and AST_SET<X> routines.
-c     - The astGetActiveUnit function can be used to retrieve the current
-f     - The AST_GETACTIVEUNIT routine can be used to retrieve the current
-*     value of the ActiveUnit flag.
-
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store a value of 1 for the Frame component if the supplied value is
-   non-zero. */
-   this->active_unit = ( value ) ? 1 : 0;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the astSetAttrib method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a Frame, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Vaiables: */
-   AstAxis *ax;                  /* Pointer to Axis */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   AstSystemType system_code;    /* System code */
-   char pfrm_attrib[ 100 ];      /* Primary Frame attribute */
-   char *pfrm_setting;           /* Primary Frame attribute */
-   char *axis_setting;           /* Pointer to axis attribute setting string */
-   const char *equals;           /* Pointer to equals sign */
-   const char *old_setting;      /* Pointer to supplied setting string */
-   const char *op;               /* Pointer to opening parenthesis */
-   double dval;                  /* Double attibute value */
-   double mjd;                   /* Epoch as a Modified Julian Date */
-   int axis;                     /* Index for the Frame axis */
-   int axis_nc;                  /* No. characters in axis attribute name */
-   int axis_value;               /* Offset of value to be assigned to axis */
-   int digits;                   /* Number of digits of precision */
-   int direction;                /* Axis direction flag */
-   int domain;                   /* Offset of Domain string */
-   int epoch;                    /* Offset of Epoch string */
-   int format;                   /* Offset of axis Format string */
-   int free_axis_setting;        /* Should axis_setting be freed? */
-   int has_axis;                 /* Does setting include an axis specifier? */
-   int ival;                     /* Integer attribute value */
-   int label;                    /* Offset of axis Label string */
-   int len;                      /* Length of setting string */
-   int match_end;                /* Match final axes of target? */
-   int max_axes;                 /* Maximum number of axes matched */
-   int min_axes;                 /* Minimum number of axes matched */
-   int nc;                       /* Number of characters read by astSscanf */
-   int off2;                     /* Modified offset of attribute value */
-   int off;                      /* Offset of attribute value */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Axis index within primary frame */
-   int permute;                  /* Permute axes in order to match? */
-   int preserve_axes;            /* Preserve matched target axes? */
-   int sign;                     /* Sign of longitude value */
-   int symbol;                   /* Offset of axis Symbol string */
-   int system;                   /* Offset of System string */
-   int title;                    /* Offset of Title string */
-   int unit;                     /* Offset of axis Unit string */
-   int used;                     /* Could the setting string be used? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Find the offset to the first equal sign in the setting string. */
-   equals = strchr( setting, '=' );
-
-/* Set a flag indicating if the attribute name includes an axis
-   specifier. */
-   op = strchr( setting, '(' );
-   has_axis = ( !op || op > equals ) ? 0 : 1;
-
-/* A flag indicating that we do not need to free the axis_setting memory. */
-   free_axis_setting = 0;
-
-/* Initialise things to avoid compiler warnings. */   
-   axis_setting = NULL;
-   old_setting = NULL;
-
-/* Jump back to here if we are trying the same attribute setting but with
-   an explicit axis "(1)" added to the attribute name. */
-L1:
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* Digits. */
-/* ------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "digits= %d %n", &digits, &nc ) )
-        && ( nc >= len ) ) {
-      astSetDigits( this, digits );
-
-/* Digits(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "digits(%d)= %d %n",
-                              &axis, &digits, &nc ) )
-               && ( nc >= len ) ) {
-
-/* There is no function to set the Digits attribute value for an axis
-   directly, so obtain a pointer to the Axis and use this to set the
-   attribute. */
-      (void) astValidateAxis( this, axis - 1, "astSetDigits(axis)" );
-      ax = astGetAxis( this, axis - 1 );
-      astSetAxisDigits( ax, digits );
-      ax = astAnnul( ax );
-
-/* Direction(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "direction(%d)= %d %n",
-                              &axis, &direction, &nc ) )
-               && ( nc >= len ) ) {
-      astSetDirection( this, axis - 1, direction );
-
-/* Epoch. */
-/* ------ */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "epoch=%n%*[^\n]%n", &epoch, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert the Epoch value to a Modified Julian Date before use. */
-      mjd = astReadDateTime( setting + epoch );
-      if ( astOK ) {
-         astSetEpoch( this, mjd );
-
-/* Report contextual information if the conversion failed. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid epoch value "
-                   "\"%s\" given for coordinate system.", status,
-                   astGetClass( this ), setting + epoch );
-      }
-
-/* Top(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "top(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetTop( this, axis - 1, dval );
-
-/* Bottom(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "bottom(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetBottom( this, axis - 1, dval );
-
-/* Domain. */
-/* ------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "domain=%n%*[^\n]%n", &domain, &nc ) )
-               && ( nc >= len ) ) {
-      astSetDomain( this, setting + domain );
-
-/* Format(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "format(%d)=%n%*[^\n]%n",
-                              &axis, &format, &nc ) )
-               && ( nc >= len ) ) {
-      astSetFormat( this, axis - 1, setting + format );
-
-/* Label(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "label(%d)=%n%*[^\n]%n",
-                              &axis, &label, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLabel( this, axis - 1, setting + label );
-
-/* MatchEnd. */
-/* --------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "matchend= %d %n", &match_end, &nc ) )
-               && ( nc >= len ) ) {
-      astSetMatchEnd( this, match_end );
-
-/* MaxAxes. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "maxaxes= %d %n", &max_axes, &nc ) )
-               && ( nc >= len ) ) {
-      astSetMaxAxes( this, max_axes );
-
-/* MinAxes. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "minaxes= %d %n", &min_axes, &nc ) )
-               && ( nc >= len ) ) {
-      astSetMinAxes( this, min_axes );
-
-/* Permute. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "permute= %d %n", &permute, &nc ) )
-               && ( nc >= len ) ) {
-      astSetPermute( this, permute );
-
-/* PreserveAxes. */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "preserveaxes= %d %n",
-                              &preserve_axes, &nc ) )
-               && ( nc >= len ) ) {
-      astSetPreserveAxes( this, preserve_axes );
-
-/* Symbol(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "symbol(%d)=%n%*[^\n]%n",
-                              &axis, &symbol, &nc ) )
-               && ( nc >= len ) ) {
-      astSetSymbol( this, axis - 1, setting + symbol );
-
-/* AlignSystem. */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "alignsystem= %n%*s %n", &system, &nc ) )
-               && ( nc >= len ) ) {
-
-/* Convert the string to a System code before use. */
-      system_code = astSystemCode( this, system + setting );
-      if ( system_code != AST__BADSYSTEM ) {
-         astSetAlignSystem( this, system_code );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN,
-                   "astSetAttrib(%s): Invalid AlignSystem description \"%s\".", status,
-                   astGetClass( this ), system + setting );
-      }
-   
-/* System. */
-/* ------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "system= %n%*s %n", &system, &nc ) )
-               && ( nc >= len ) ) {
-
-/* Convert the string to a System code before use. */
-      system_code = astSystemCode( this, system + setting );
-      if ( system_code != AST__BADSYSTEM ) {
-         astSetSystem( this, system_code );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN,
-                   "astSetAttrib(%s): Invalid System description \"%s\".", status,
-                   astGetClass( this ), system + setting );
-      }
-   
-/* Title. */
-/* ------ */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "title=%n%*[^\n]%n", &title, &nc ) )
-               && ( nc >= len ) ) {
-      astSetTitle( this, setting + title );
-
-/* Unit(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "unit(%d)=%n%*[^\n]%n",
-                              &axis, &unit, &nc ) )
-               & ( nc >= len ) ) {
-      astSetUnit( this, axis - 1, setting + unit );
-
-/* ObsLat. */
-/* ------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "obslat=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-
-/* If the first character in the value string is "N" or "S", remember the
-   sign of the value and skip over the sign character. Default is north
-   (+ve). */
-      off2 = off;
-      if( setting[ off ] == 'N' || setting[ off ] == 'n' ) {
-         off2++;
-         sign = +1;
-      } else if( setting[ off ] == 'S' || setting[ off ] == 's' ) {
-         off2++;
-         sign = -1;
-      } else {
-         sign = +1;
-      } 
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used 
-   for formatting and unformatting ObsLon and ObsLat values. */
-      if( !skyframe ) {
-         astBeginPM;
-         skyframe = astSkyFrame( "system=FK5,equinox=J2000,format(2)=dms.2", status );
-         astEndPM;
-      }
-
-/* Convert the string to a radians value before use. */
-      ival = astUnformat( skyframe, 1, setting + off2, &dval );
-      if ( ival == astChrLen( setting ) - off2  ) {
-         astSetObsLat( this, dval*sign );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid value for "
-                   "ObsLat (observers latitude) \"%s\".", status, astGetClass( this ), 
-                   setting + off );
-      }
-
-/* ObsLon. */
-/* ------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "obslon=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-
-/* If the first character in the value string is "E" or "W", remember the
-   sign of the value and skip over the sign character. Default is east
-   (+ve). */
-      off2 = off;
-      if( setting[ off ] == 'E' || setting[ off ] == 'e' ) {
-         off2++;
-         sign = +1;
-      } else if( setting[ off ] == 'W' || setting[ off ] == 'w' ) {
-         off2++;
-         sign = -1;
-      } else {
-         sign = +1;
-      } 
-
-/* If not already created, create an FK5 J2000 SkyFrame which will be used 
-   for formatting and unformatting ObsLon and ObsLat values. */
-      if( !skyframe ) {
-         astBeginPM;
-         skyframe = astSkyFrame( "system=FK5,equinox=J2000,format(2)=dms.2", status );
-         astEndPM;
-      }
-
-/* Convert the string to a radians value before use. */
-      ival = astUnformat( skyframe, 1, setting + off2, &dval );
-      if ( ival == astChrLen( setting ) - off2  ) {
-         astSetObsLon( this, dval*sign );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid value for "
-                   "ObsLon (observers longitude) \"%s\".", status, astGetClass( this ), 
-                   setting + off );
-      }
-
-/* ObsAlt. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "obsalt= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetObsAlt( this, dval );
-
-/* Dut1. */
-/* ---- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "dut1= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetDut1( this, dval );
-
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
-   specified. */
-   } else if ( MATCH( "naxes" ) ||
-               !strncmp( setting, "normunit", 8 ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
-   a Frame axis, then it may refer to an Axis object of a derived type
-   (which has additional attributes not recognised here). */
-   } else if ( !free_axis_setting && ( nc = 0,
-               ( 1 == astSscanf( setting, "%*[^()]%n(%d)%n=%*[^\n]%n",
-                                       &axis_nc, &axis, &axis_value, &nc ) )
-               && ( nc >= len ) ) ) {
-
-/* Validate the axis index and copy the attribute setting string. */
-      (void) astValidateAxis( this, axis - 1, "astSet" );
-      axis_setting = astString( setting, len );
-      if ( astOK ) {
-
-/* Over-write the axis index in the copy with the value to be
-   assigned. */
-         (void) strcpy( axis_setting + axis_nc, setting + axis_value );
-
-/* Obtain a pointer to the Axis object. */
-         ax = astGetAxis( this, axis - 1 );
-         if( astOK ) {
-
-/* Assume that we will be able to use the setting. */
-            used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt 
-   to access the axis attribute fails, we can try to interpret the
-   attribute name as an attribute of the primary Frame containing the
-   specified axis. Any errors reported in this context will simply be
-   ignored, in particularly they are not deferred for later delivery. */
-            oldrep = astReporting( 0 );
-
-/* Use the Axis astSetAttrib method
-   to set the value. */
-            astSetAttrib( ax, axis_setting );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
-   the attribute name was not recognised, clear the status so that we can 
-   try to interpret the attribute name as an attribute of the primary Frame 
-   containing the specified axis. */
-            if( astStatus == AST__BADAT ) {
-               astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
-               astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
-   - otherwise we could end up in an infinite loop. */
-               if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
-   primary frame. */
-                  sprintf( pfrm_attrib, "%.*s(%d)", axis_nc, setting, paxis + 1 );
-            
-/* Create a setting string in which the attribute name refers to the axis 
-   numbering of the primary frame. */
-                  pfrm_setting = NULL;
-                  nc = 0;
-                  pfrm_setting = astAppendString( pfrm_setting, &nc, pfrm_attrib );
-                  pfrm_setting = astAppendString( pfrm_setting, &nc, setting + axis_value );
-                  
-/* Attempt to set the attribute within the primary Frame. */
-                  astSetAttrib( pfrm, pfrm_setting );
-
-/* Free the memory. */
-                  pfrm_setting = astFree( pfrm_setting );
-
-/* If this failed, clear the status and indicate that we have not managed to 
-   use the attribute setting. */
-                  if( !astOK ) {
-                     astClearStatus;
-                     used = 0;
-                  }
-
-               } else {
-                  used = 0;
-               }
-
-/* If not found attempt to set the attribute value in the Axis, omitting
-   the axis index. */
-               if( ! used ) {
-                  astSetAttrib( pfrm, axis_setting );
-                  if( !astOK ) {
-                     astClearStatus;
-                  } else {
-                     used = 1;
-                  }
-               }
-
-/* Free the setting string, and annul the primary Frame pointer. */
-               pfrm = astAnnul( pfrm );
-            }
-
-/* Re-instate the original error reporting state. */
-            astReporting( oldrep );
-
-/* If we could not use the setting, attempt to set the axis attribute again,
-   this time retaining the error report. This is done to ensure the user
-   gets an appropriate error message. */
-            if( !used ) astSetAttrib( ax, axis_setting );
-         }
-
-/* Annul the Axis pointer and free the memory holding the attribute
-   setting. */
-         ax = astAnnul( ax );
-      }
-      axis_setting = astFree( axis_setting );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
-   and the attribute name does not already include an axis specifier, try 
-   again after appending "(1)" to the end of the attribute name. */
-   } else if( !has_axis && astGetNaxes( this ) == 1 && equals ) {
-
-/* Take a copy of the supplied setting, allowing 3 extra characters for the
-   axis specifier "(1)". */
-      axis_setting = astMalloc( len + 4 );
-      if( axis_setting ) memcpy( axis_setting, setting, len );
-
-/* Indicate we should free the axis_setting memory. */
-      free_axis_setting = 1;
-
-/* Add in the axis specifier. */
-      strcpy( axis_setting + ( equals - setting ), "(1)" );
-
-/* Add in the equals sign and attribute value. */
-      strcpy( axis_setting + ( equals - setting ) + 3, equals );
-
-/* Use the new setting instead of the supplied setting. */
-      old_setting = setting;
-      setting = axis_setting;
-
-/* Indicate the setting now has an axis specifier. */
-      has_axis = 1;
-
-/* Jump back to try interpreting the new setting string. */
-      goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. First re-instate the original setting 
-   string if it was changed above. */
-   } else {
-      if( free_axis_setting ) {
-         setting = old_setting;
-         axis_setting = astFree( axis_setting );
-         free_axis_setting = 0;
-      }
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-   if( free_axis_setting ) axis_setting = astFree( axis_setting );
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status ) {
-/*
-*+
-*  Name:
-*     astSetAxis
-
-*  Purpose:
-*     Set a new Axis for a Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astSetAxis( AstFrame *this, int axis, AstAxis *newaxis )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function allows a new Axis object to be associated with one
-*     of the axes of a Frame, replacing the previous one. Each Axis
-*     object contains a description of the quantity represented along
-*     one of the Frame's axes, so this function allows this
-*     description to be exchanged for another one.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The index (zero-based) of the axis whose associated Axis object is to
-*        be replaced.
-*     newaxis
-*        Pointer to the new Axis object.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate and permute the axis index supplied. */
-   axis = astValidateAxis( this, axis, "astSetAxis" );
-
-/* If OK, annul the Frame's pointer to the old Axis object and clone a pointer
-   to the new one to replace it. */
-   if ( astOK ) {
-      this->axis[ axis ] = astAnnul( this->axis[ axis ] );
-      this->axis[ axis ] = astClone( newaxis );
-   }
-}
-
-static void SetFrameFlags( AstFrame *this, int flags, int *status ){
-/*
-*+
-*  Name:
-*     astSetFrameFlags
-
-*  Purpose:
-*     Store a new bit mask of flags in a Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astSetFrameFlags( astFrame *this, int flags )
-
-*  Class Membership:
-*     Frame member function.
-
-*  Description:
-*     This function stores a new set of flags in a Frame. The flags can
-*     be retrieved using astGetFrameFlags.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     flags
-*        A bit mask holding the flags. Currently, the following bits are
-*        used:
-*
-*        0 - Used to indicate if the Frame is currently involved in an 
-*        attempt to restore the integrity of a FrameSet following 
-*        changes to the attribute values of the Frame.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Assign the new bit mask. */
-   this->flags = flags;
-}
-
-static void SetUnit( AstFrame *this, int axis, const char *unit, int *status ) {
-/*
-*  Name:
-*     SetUnit
-
-*  Purpose:
-*     Set a value for the Unit attribute of a Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void SetUnit( AstFrame *this, int axis, const char *unit, int *status )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function sets the Unit value for a Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the axis (zero-based) for which the Unit value is to
-*        be set.
-*     unit
-*        The new value to be set.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   char *c;                      /* Copy of supplied string */
-   const char *oldunit;          /* Pointer to old units string */
-   int l;                        /* Used length of supplied string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a copy of the supplied string which excludes trailing spaces. */
-   l = astChrLen( unit );
-   c = astStore( NULL, unit, (size_t) (l + 1) );
-   if( astOK ) {
-      c[ l ] = 0;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
-   (void) astValidateAxis( this, axis, "astSetUnit" );
-      ax = astGetAxis( this, axis );
-
-/* The new unit may require the Label and/or Symbol to be changed, but
-   only if the Frames ActiveUnit flag is set. */
-      if( astGetActiveUnit( this ) ) {
-
-/* Get the existing Axis unit, using the astGetUnit method (rather than
-   astGetAxisUnit) in order to get any default value in the case where
-   the Unit attribute is not set. */
-         oldunit = astGetUnit( this, axis );
-
-/* Assign the new Unit value. This modifies labels and/or Symbols if
-   necessary. */
-         NewUnit( ax, oldunit, c, "astSetUnit", astGetClass( this ), status );
-      }
-
-/* Set the Axis Unit attribute value. */
-      astSetAxisUnit( ax, c );
-
-/* Annul the Axis pointer. */
-      ax = astAnnul( ax );
-   }
-
-/* Free the string copy */
-   c = astFree( c );
-
-}
-
-static int SubFrame( AstFrame *target, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*+
-*  Name:
-*     astSubFrame
-
-*  Purpose:
-*     Select axes from a Frame and convert to the new coordinate system.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astSubFrame( AstFrame *target, AstFrame *template,
-*                      int result_naxes, const int *target_axes,
-*                      const int *template_axes, AstMapping **map,
-*                      AstFrame **result )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the axes from
-*     a "target" Frame and creates a new Frame with copies of the selected
-*     axes assembled in the requested order. It then optionally overlays the
-*     attributes of a "template" Frame on to the result. It returns both the
-*     resulting Frame and a Mapping that describes how to convert between the
-*     coordinate systems described by the target and result Frames. If
-*     necessary, this Mapping takes account of any differences in the Frames'
-*     attributes due to the influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target Frame, from which axes are to be selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for the
-*        result Frame are to be obtained. Optionally, this may be NULL, in
-*        which case no overlaying of template attributes will be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This number may
-*        be greater than or less than the number of axes in this Frame (or
-*        equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving a list
-*        of the (zero-based) axis indices of the axes to be selected from the
-*        target Frame. The order in which these are given determines the order
-*        in which the axes appear in the result Frame. If any of the values in
-*        this array is set to -1, the corresponding result axis will not be
-*        derived from the target Frame, but will be assigned default attributes
-*        instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This should
-*        contain a list of the template axes (given as zero-based axis indices)
-*        with which the axes of the result Frame are to be associated. This
-*        array determines which axes are used when overlaying axis-dependent
-*        attributes of the template on to the result. If any element of this
-*        array is set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not used and
-*        a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned Mapping.
-*        The forward transformation of this Mapping will describe how to
-*        convert coordinates from the coordinate system described by the target
-*        Frame to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is
-*     possible between the target and the result Frame. Otherwise zero
-*     is returned and *map and *result are returned as NULL (but this
-*     will not in itself result in an error condition). In general,
-*     coordinate conversion should always be possible if no template
-*     Frame is supplied but may not always be possible otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Implementation Deficiencies:
-*     - Any axis selection is currently permitted. Probably this
-*     should be restricted so that each axis can only be selected
-*     once. The astValidateAxisSelection method will do this but
-*     currently there are bugs in the CmpFrame class that cause axis
-*     selections which will not pass this test. Install the validation
-*     when these are fixed.
-*-
-
-*  Implementation Notes:
-*     - This implementation addresses the selection of axes from a
-*     Frame class object. This simply results in another object of the
-*     same class and a Mapping which describes an axis permutation (or
-*     a unit Mapping as a special case). Changes of Frame attributes
-*     have no significance for coordinate values in this class, so do
-*     not affect the Mapping returned.
-*/
-
-/* Local Variables: */
-   AstAxis *newaxis;             /* Pointer to new Axis object */
-   AstFrame *tempframe;          /* Pointer to temporary Frame */
-   AstMapping *aumap;            /* A units Mapping for a single axis */
-   AstMapping *numap;            /* The new total units Mapping */
-   AstMapping *umap;             /* The total units Mapping */
-   int *inperm;                  /* Pointer to permutation array */
-   int *outperm;                 /* Pointer to permutation array */
-   int match;                    /* Coordinate conversion possible? */
-   int result_axis;              /* Result Frame axis index */
-   int target_axis;              /* Target Frame axis index */
-   int target_naxes;             /* Number of target Frame axes */
-   int unit;                     /* Unit Mapping appropriate? */
-   int uunit;                    /* Is the "umap" Mapping a UnitMap? */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain the number of target Frame axes. */
-   target_naxes = astGetNaxes( target );
-
-/* Ensure we do not attempt to use a negative number of result axes. */
-   if ( result_naxes < 0 ) result_naxes = 0;
-
-/* Create a temporary new Frame with the required number of axes. This will
-   have a default Axis object associated with each of its axes. We will
-   replace these where necessary with copies of the actual Axis objects we
-   require. */
-   tempframe = astFrame( result_naxes, "", status );
-
-/* Allocate memory to store two permutation arrays. These will be used to
-   construct the Mapping that relates the target and result Frames. */
-   inperm = astMalloc( sizeof( int ) * (size_t) target_naxes );
-   outperm = astMalloc( sizeof( int ) * (size_t) result_naxes );
-   if ( astOK ) {
-
-/* Initialise the array that associates each target axis with the corresponding
-   result axis (filling it with the value -1 initially signifies no
-   associations). */
-      for ( target_axis = 0; target_axis < target_naxes; target_axis++ ) {
-         inperm[ target_axis ] = -1;
-      }
-
-/* Loop through each axis in the result Frame and obtain the index of the axis
-   in the target Frame from which it is to be derived. */
-      for ( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-         target_axis = target_axes[ result_axis ];
-
-/* Check if the resulting axis index is valid. If not, this result axis is not
-   to be derived from any target axis, and it will therefore be left with its
-   default attributes. Make an entry in the appropriate permutation array to
-   indicate that this result axis is unassociated. */
-         if ( ( target_axis < 0 ) || ( target_axis >= target_naxes ) ) {
-            outperm[ result_axis ] = -1;
-
-/* Otherwise, obtain a pointer to the target Axis object and modify the
-   temporary Frame so that its axis is associated with the same Axis object.
-   Annul the Axis pointer afterwards. */
-         } else {
-            newaxis = astGetAxis( target, target_axis );
-            astSetAxis( tempframe, result_axis, newaxis );
-            newaxis = astAnnul( newaxis );
-
-/* Update both permutation arrays to record the association between the target
-   and result axes. */
-            outperm[ result_axis ] = target_axis;
-            inperm[ target_axis ] = result_axis;
-         }
-
-/* Quit looping if an error occurs. */
-         if ( !astOK ) break;
-      }
-
-/* So far, we have only modified pointers in the temporary Frame to refer to
-   the target Frame's Axis objects. Since we will next modify these objects'
-   attributes, we must make a deep copy of the entire temporary Frame so that
-   we do not modify the target's axes. This copy now becomes our result Frame.
-   Annul the temporary one. */
-      if ( astOK ) {
-         *result = astCopy( tempframe );
-         tempframe = astAnnul( tempframe );
-
-/* Invoke the target "astOverlay" method to overlay any remaining
-   attributes from the target Frame which are not associated with
-   individual axes (e.g.  the Frame's Title and Domain). */
-         astOverlay( target, target_axes, *result );
-
-/* If a template Frame was supplied, also invoke its astOverlay method to
-   overlay its attributes on the result Frame. (Note that in this particular
-   case this has no effect other than transferring attributes. In general,
-   however, i.e. in derived classes, this process is vital to determining the
-   mapping below, whose main purpose is to convert between the target and
-   result Frames. These will have different attributes as a result of the
-   influence that the template has here.) */
-         if ( template ) astOverlay( template, template_axes, *result );
-
-/* We will next generate the Mapping that relates the target and result
-   Frames. If appropriate this should be a unit Mapping (UnitMap), so test if
-   the number of axes in both Frames is equal. */
-         unit = ( target_naxes == result_naxes );
-
-/* If so, check the contents of one of the permutation arrays to see if all
-   result axes are associated with the corresponding target axis (the converse
-   then also follows). If not, note this fact and quit checking. */
-         if ( unit ) {
-            for ( result_axis = 0; result_axis < result_naxes;
-                                   result_axis++ ) {
-               if ( outperm[ result_axis ] != result_axis ) {
-                  unit = 0;
-                  break;
-	       }
-	    }
-	 }
-
-/* If a unit Mapping is appropriate, then construct it. */
-         if ( unit ) {
-            *map = (AstMapping *) astUnitMap( result_naxes, "", status );
-
-/* Otherwise, construct a Mapping describing the axis permutation we have
-   produced. */
-         } else {
-            *map = (AstMapping *) astPermMap( target_naxes, inperm,
-                                              result_naxes, outperm, NULL,
-                                              "", status );
-         }
-
-/* Note that coordinate conversion is possible. */
-         match = 1;
-
-/* If the ActiveUnit flag in both template and result Frame is non-zero, we 
-   now modify the Mapping to take account of any differences in the Units
-   attributes of the target and results Frames. */
-         if( template && astGetActiveUnit( template ) &&
-                         astGetActiveUnit( *result ) ) {
-
-/* Loop round the axes of the results Frame, accumulating a parallel CmpMap
-   ("umap") in which each Mapping is the 1-D Mapping which transforms the
-   Units of the corresponding target axis into the Units of the results
-   axis. */
-            umap = NULL;
-            uunit = 1;
-            for( result_axis = 0; result_axis < result_naxes; result_axis++ ) {
-
-/* Find the index of the corresponding target axis. */
-               if( unit ) {
-                  target_axis = result_axis;
-               } else {
-                  target_axis = outperm[ result_axis ];
-               }
-
-/* Get the Unit string for both axes, and attempt to find a Mapping which
-   transforms values in the target units into the corresponding value in the
-   results units. If this results axis does not have a corresponding
-   target axis, then indicate that no units mapping can be found. */
-               if( target_axis > -1 ) {
-                  aumap = astUnitMapper( astGetUnit( target, target_axis ),
-                                         astGetUnit( *result, result_axis ),
-                                         NULL, NULL );
-               } else {
-                  aumap = NULL;
-               }
-
-/* If no Mapping could be found, annull the Mapping and leave the loop.
-   Otherwise, see if the Mapping is a UnitMap. If not, set a flag to indicate
-   that we have at least one non-unit map. */
-               if( !aumap ) {
-                  if( umap ) umap = astAnnul( umap );
-                  match = 0;
-                  break;
-               } else {
-                  if( !astIsAUnitMap( aumap ) ) uunit = 0;
-               }
-
-/* Add this Mapping into the parallel CmpMap. */
-               if( umap ) {
-                  numap = (AstMapping *) astCmpMap( umap, aumap, 0, "", status );
-                  umap = astAnnul( umap );
-                  aumap = astAnnul( aumap );
-                  umap = numap;
-               } else {
-                  umap = aumap;
-               }
-            }
-
-/* If the resulting CmpMap is not just a UnitMap, add it in series with
-   the current results mapping, and then simplify it. */
-            if( !uunit && umap ) {
-               numap = (AstMapping *) astCmpMap( *map, umap, 1, "", status );
-               (void) astAnnul( *map );
-               *map = numap;
-            }
-
-/* Annul the CmpMap containing the units Mappings. */
-            if( umap ) umap = astAnnul( umap );
-
-/* If the units could not bve matched annul the returned mapping. */
-            if( !match && *map ) *map = astAnnul( *map );
-         }
-      }
-   }
-
-/* Free the memory used for the permutation arrays. */
-   inperm = astFree( inperm );
-   outperm = astFree( outperm );
-
-/* If an error occurred, annul the returned objects and reset the returned
-   value. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*+
-*  Name:
-*     astSystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function converts a string used for the external description of
-*     a coordinate system into a Frame coordinate system type code (System
-*     attribute value). It is the inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the coordinate system.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the coordinate system
-*     description was not recognised. This does not produce an error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
-   result. The basic Frame class only supports a single system
-   "Cartesian". */
-   if ( astChrMatch( "Cartesian", system ) ) {
-      result = AST__CART;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*+
-*  Name:
-*     astSystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     const char *astSystemString( AstFrame *this, AstSystemType system )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function converts a Frame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The coordinate system type code.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *result;        /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. (Where possible, return the same string as would be
-   used in the FITS WCS representation of the coordinate system). A basic
-   Frame only allows a single System value, "Cartesian". */
-   switch ( system ) {
-   case AST__CART:
-      result = "Cartesian";
-      break;
-   }
-
-/* Return the result pointer. */
-   return result;
-
-}
-
-static int TestActiveUnit( AstFrame *this, int *status ){
-/*
-*+
-*  Name:
-*     astTestActiveUnit
-
-*  Purpose:
-*     Determines if the ActiveUnit flag is set.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astTestActiveUnit( AstFrame *this )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function tests the current value of the ActiveUnit flag for a
-*     Frame. See the description of the astSetActiveUnit function for a
-*     description of the ActiveUnit flag.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-
-*  Returned Value:
-*     Non-zero if the flag has been set. Zero otherwise.
-
-*  Notes:
-*     - A zero value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*--
-*/
-
-/* Local Variables: */
-   int result;         /* The returned value */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Return the result. */
-   return ( this->active_unit != -INT_MAX );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Frame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis */
-   AstFrame *pfrm;               /* Pointer to primary Frame containing axis */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   char pfrm_attrib[ 100 ];      /* Primary Frame attribute */
-   char *axis_attrib;            /* Pointer to axis attribute name */
-   const char *old_attrib;       /* Pointer to supplied attribute name string */
-   int axis;                     /* Frame axis number */
-   int axis_nc;                  /* No. characters in axis attribute name */
-   int free_axis_attrib;         /* Should axis_attrib be freed? */
-   int has_axis;                 /* Does attrib name include axis specifier? */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-   int oldrep;                   /* Original error reporting state */
-   int paxis;                    /* Axis index within primary frame */
-   int result;                   /* Result value to return */
-   int used;                     /* Could the setting string be used? */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Set a flag indicating if the attribute name includes an axis
-   specifier. */
-   has_axis = ( strchr( attrib, '(' ) != NULL );
-
-/* A flag indicating that we do not need to free the axis_attrib memory. */
-   free_axis_attrib = 0;
-
-/* Initialise things to avoid compiler warnings. */   
-   axis_attrib = NULL;
-   old_attrib = NULL;
-
-/* Jump back to here if we are trying the same attribute but with an explicit 
-   axis "(1)" added to the end of the name. */
-L1:
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Digits. */
-/* ------- */
-   if ( !strcmp( attrib, "digits" ) ) {
-      result = astTestDigits( this );
-
-/* Digits(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "digits(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-
-/* There is no function to test the Digits attribute for an axis
-   directly, so obtain a pointer to the Axis and use this to test the
-   attribute. */
-      (void) astValidateAxis( this, axis - 1, "astTestDigits(axis)" );
-      ax = astGetAxis( this, axis - 1 );
-      result = astTestAxisDigits( ax );
-      ax = astAnnul( ax );
-
-/* Direction(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "direction(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestDirection( this, axis - 1 );
-
-/* Epoch. */
-/* ------ */
-   } else if ( !strcmp( attrib, "epoch" ) ) {
-      result = astTestEpoch( this );
-
-/* Bottom(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "bottom(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestBottom( this, axis - 1 );
-
-/* Top(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "top(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestTop( this, axis - 1 );
-
-/* Domain. */
-/* ------- */
-   } else if ( !strcmp( attrib, "domain" ) ) {
-      result = astTestDomain( this );
-
-/* Format(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "format(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestFormat( this, axis - 1 );
-
-/* Label(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "label(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLabel( this, axis - 1 );
-
-/* MatchEnd. */
-/* --------- */
-   } else if ( !strcmp( attrib, "matchend" ) ) {
-      result = astTestMatchEnd( this );
-
-/* MaxAxes. */
-/* -------- */
-   } else if ( !strcmp( attrib, "maxaxes" ) ) {
-      result = astTestMaxAxes( this );
-
-/* MinAxes. */
-/* -------- */
-   } else if ( !strcmp( attrib, "minaxes" ) ) {
-      result = astTestMinAxes( this );
-
-/* Permute. */
-/* -------- */
-   } else if ( !strcmp( attrib, "permute" ) ) {
-      result = astTestPermute( this );
-
-/* PreserveAxes. */
-/* ------------- */
-   } else if ( !strcmp( attrib, "preserveaxes" ) ) {
-      result = astTestPreserveAxes( this );
-
-/* Symbol(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "symbol(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestSymbol( this, axis - 1 );
-
-/* AlignSystem. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "alignsystem" ) ) {
-      result = astTestAlignSystem( this );
-
-/* System. */
-/* ------- */
-   } else if ( !strcmp( attrib, "system" ) ) {
-      result = astTestSystem( this );
-
-/* Title. */
-/* ------ */
-   } else if ( !strcmp( attrib, "title" ) ) {
-      result = astTestTitle( this );
-
-/* Unit(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "unit(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestUnit( this, axis - 1 );
-
-/* ObsLat. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obslat" ) ) {
-      result = astTestObsLat( this );
-
-/* ObsLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obslon" ) ) {
-      result = astTestObsLon( this );
-
-/* ObsAlt. */
-/* ------- */
-   } else if ( !strcmp( attrib, "obsalt" ) ) {
-      result = astTestObsAlt( this );
-
-/* Dut1. */
-/* ---- */
-   } else if ( !strcmp( attrib, "dut1" ) ) {
-      result = astTestDut1( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then return zero. */
-   } else if ( !strcmp( attrib, "naxes" ) ||
-               !strncmp( attrib, "normunit", 8 ) ) {
-      result = 0;
-
-/* Other axis attributes. */
-/* ---------------------- */
-/* If the attribute was not identified above, but appears to refer to
-   a Frame axis, then it may refer to an Axis object of a derived type
-   (which has additional attributes not recognised here). */
-   } else if ( !free_axis_attrib && ( nc = 0,
-               ( 1 == astSscanf( attrib, "%*[^()]%n(%d)%n",
-                                      &axis_nc, &axis, &nc ) )
-               && ( nc >= len ) ) ) {
-
-/* Validate the axis index and extract the attribute name. */
-      (void) astValidateAxis( this, axis - 1, "astTest" );
-      axis_attrib = astString( attrib, axis_nc );
-
-/* Obtain a pointer to the Axis object. */
-      ax = astGetAxis( this, axis - 1 );
-      if( astOK ) {
-
-/* Assume that we will be able to use the attribute name. */
-         used = 1;
-
-/* Temporarily switch off error reporting so that if the following attempt 
-   to access the axis attribute fails, we can try to interpret the
-   attribute name as an attribute of the primary Frame containing the
-   specified axis. Any errors reported in this context will simply be
-   ignored, in particularly they are not deferred for later delivery. */
-         oldrep = astReporting( 0 );
-
-/* Use the Axis astTestAttrib method to test the attribute value. */
-         result = astTestAttrib( ax, axis_attrib );
-
-/* If the above call failed with a status of AST__BADAT, indicating that
-   the attribute name was not recognised, clear the status so that we can 
-   try to interpret the attribute name as an attribute of the primary Frame 
-   containing the specified axis. */
-         if( astStatus == AST__BADAT ) {
-            astClearStatus;
-
-/* Find the primary Frame containing the specified axis. */
-            astPrimaryFrame( this, axis - 1, &pfrm, &paxis );
-
-/* Only attempt to use the primary Frame if it is not the same as "this"
-   - otherwise we could end up in an infinite loop. */
-            if( pfrm != this ) {
-
-/* Modify the attribute name to refer to the axis numbering of the
-   primary frame. */
-               sprintf( pfrm_attrib, "%s(%d)", axis_attrib, paxis + 1 );
-            
-/* Attempt to test the attribute as an attribute of the primary Frame. */
-               result = astTestAttrib( pfrm, pfrm_attrib );
-
-/* If this failed, clear the status and indicate that we have not managed to 
-   use the attribute name. */
-               if( !astOK ) {
-                  astClearStatus;
-                  used = 0;
-               }
-
-            } else {
-               used = 0;
-            }
-
-/* If not found attempt to test the attribute value in the Axis, omitting
-   the axis index. */
-            if( ! used ) {
-               result = astTestAttrib( pfrm, axis_attrib );
-               if( !astOK ) {
-                  astClearStatus;
-               } else {
-                  used = 1;
-               }
-            }
-
-/* Annul the primary Frame pointer. */
-            pfrm = astAnnul( pfrm );
-         }
-
-/* Re-instate the original error reporting state. */
-         astReporting( oldrep );
-
-/* If we could not use the attribute name, attempt to test the axis 
-   attribute again, this time retaining the error report. This is done 
-   to ensure the user gets an appropriate error message. */
-         if( !used ) result = astTestAttrib( ax, axis_attrib );
-      }
-
-/* Annul the Axis pointer and free the memory holding the attribute
-   name. */
-      ax = astAnnul( ax );
-      axis_attrib = astFree( axis_attrib );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, and the Frame has only 1 axis,
-   and the attribute name does not already include an axis specifier, try 
-   again after appending "(1)" to the end of the attribute name. */
-   } else if( !has_axis && astGetNaxes( this ) == 1 ) {
-
-/* Take a copy of the supplied name, allowing 3 extra characters for the
-   axis specifier "(1)". */
-      axis_attrib = astMalloc( len + 4 );
-      if( axis_attrib ) memcpy( axis_attrib, attrib, len );
-
-/* Indicate we should free the axis_attrib memory. */
-      free_axis_attrib = 1;
-
-/* Add in the axis specifier. */
-      strcpy( axis_attrib + len, "(1)" );
-
-/* Use the new attribute name instead of the supplied name. */
-      old_attrib = attrib;
-      attrib = axis_attrib;
-
-/* Indicate the attribute name now has an axis specifier. */
-      has_axis = 1;
-
-/* Jump back to try interpreting the new attribute name. */
-      goto L1;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name is still not recognised, pass it on to the parent
-   method for further interpretation. First re-instate the original attrib 
-   name string if it was changed above. */
-   } else {
-      if( free_axis_attrib ) {
-         attrib = old_attrib;
-         axis_attrib = astFree( axis_attrib );
-      }
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Use a Frame to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Frame member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a Frame and a set of points encapsulated in a
-*     PointSet and transforms the points so as to perform the identity
-*     transformation (i.e. simply copies the coordinate values).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation. In this case, both transformations are equivalent.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the Frame being applied. This number
-*     will be equal to the number of Frame axes.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   AstPointSet *result;          /* Pointer value to be returned */
-   AstUnitMap *unitmap;          /* Pointer to temporary UnitMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_mapping;
-
-/* Create a unit Mapping with one coordinate for each Frame axis. */
-   unitmap = astUnitMap( astGetNaxes( this ), "", status );
-
-/* Use the Mapping to transform (i.e. copy) the coordinate values. */
-   result = astTransform( unitmap, in, forward, out );
-
-/* Annul the Mapping. */
-   unitmap = astAnnul( unitmap );
-
-/* If an error occurred and a new PointSet may have been created, then annul
-   the result. In any case, ensure that a NULL pointer is returned. */
-   if ( !astOK ) {
-      if ( !out ) result = astAnnul( result );
-      result = NULL;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int Unformat( AstFrame *this, int axis, const char *string,
-                     double *value, int *status ) {
-/*
-*+
-*  Name:
-*     astUnformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a Frame axis.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astUnformat( AstFrame *this, int axis, const char *string,
-*                      double *value )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function reads a formatted coordinate value for a Frame
-*     axis (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the Frame axis for which the coordinate value
-*        is to be read (axis numbering starts at zero for the first
-*        axis).
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will be
-*        returned.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic astUnformat method
-*     available via the protected interface to the Frame class. The
-*     public interface to this method is provided by the
-*     astUnformatId_ function.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   const char *label;            /* Pointer to axis label string */
-   double coord;                 /* Coordinate value read */
-   int digits_set;               /* Axis Digits attribute set? */
-   int nc;                       /* Number of characters read */
-   int status_value;             /* AST error status */
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Validate the axis index and obtain a pointer to the required Axis. */
-   (void) astValidateAxis( this, axis, "astUnformat" );
-   ax = astGetAxis( this, axis );
-
-/* Test if any Axis attributes which may affect the result are
-   undefined (i.e. have not been explicitly set). If so, we over-ride
-   them, giving them temporary values dictated by the Frame. Only the
-   Digits attribute is potentially relevant here. */
-   digits_set = astTestAxisDigits( ax );
-   if ( !digits_set ) astSetAxisDigits( ax, astGetDigits( this ) );
-
-/* Read the coordinate value. */
-   if ( astOK ) {
-      nc = astAxisUnformat( ax, string, &coord );
-
-/* If an error occurred, save and temporarily clear the global error
-   status while the axis Label string is obtained. Then restore the
-   original error status value afterwards. */
-      if ( !astOK ) {
-         status_value = astStatus;
-         astClearStatus;
-         label = astGetLabel( this, axis );
-         astSetStatus( status_value );
-
-/* Report a contextual error message containing the axis label. */
-         astError( status_value, "%s(%s): Unable to read \"%s\" value.", status,
-                   "astUnformat", astGetClass( this ), label );
-      }
-   }
-
-/* Clear any Axis attributes that were temporarily over-ridden. */
-   if ( !digits_set ) astClearAxisDigits( ax );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* If an error occurred, clear the count of characters read. */
-   if ( !astOK ) {
-      nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
-   } else if ( nc ) {
-      *value = coord;
-   }
-
-/* Return the number of characters read. */
-   return nc;
-}
-
-static int ValidateAxis( AstFrame *this, int axis, const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astValidateAxis
-
-*  Purpose:
-*     Validate and permute a Frame's axis index.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astValidateAxis( AstFrame *this, int axis, const char *method )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function checks the validity of an index (zero-based) which
-*     is to be used to address one of the coordinate axes of a
-*     Frame. If the index is valid, it is permuted using the axis
-*     permutation array associated with the Frame and the (zero-based)
-*     permuted axis index is returned.  This gives the location of the
-*     required axis information within the Frame's internal arrays. If
-*     the axis index supplied is not valid, an error is reported and
-*     the global error status is set.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The axis index (zero-based) to be checked. To be valid, it
-*        must lie between zero and (naxes-1) inclusive, where "naxes"
-*        is the number of coordinate axes associated with the Frame.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-
-*  Returned Value:
-*     The permuted axis index.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - Error messages issued by this function refer to the external
-*     (public) numbering system used for axes (which is one-based),
-*     whereas zero-based axis indices are used internally.
-*-
-*/
-
-/* Local Variables: */
-   const int *perm;              /* Pointer to axis permutation array */
-   int naxes;                    /* Number of Frame axes */
-   int result;                   /* Permuted axis index */
-
-/* Initialise. */
-   result = 0;
-
-/* Determine the number of Frame axes. */
-   naxes = astGetNaxes( this );
-   if ( astOK ) {
-
-/* If the Frame has no axes, report an error (note we convert to
-   one-based axis numbering in the error message). */
-      if ( naxes == 0 ) {
-         astError( AST__AXIIN, "%s(%s): Invalid attempt to use an axis index "
-                   "(%d) for a %s which has no axes.", status, method,
-                   astGetClass( this ), axis + 1, astGetClass( this ) );
-
-/* Otherwise, check the axis index for validity and report an error if
-   it is not valid (again, use one-based axis numbering). */
-      } else if ( ( axis < 0 ) || ( axis >= naxes ) ) {
-         astError( AST__AXIIN, "%s(%s): Axis index (%d) invalid - it should "
-                   "be in the range 1 to %d.", status, method, astGetClass( this ),
-                   axis + 1, naxes );
-
-/* If the axis index was valid, obtain the axis permutation array and
-   use this to generate the permuted axis value. */
-      } else {
-         perm = astGetPerm( this );
-         if( perm ) result = perm[ axis ];
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void ValidateAxisSelection( AstFrame *this, int naxes, const int *axes,
-                                   const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astValidateAxisSelection
-
-*  Purpose:
-*     Check that a set of axes selected from a Frame is valid.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void astValidateAxisSelection( AstFrame *this, int naxes,
-*                                    const int *axes, const char *method )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function checks the validity of an array of (zero-based)
-*     axis indices that specify a set of axes to be selected from a
-*     Frame. To be valid, no axis should be selected more than
-*     once. In assessing this, any axis indices that do not refer to
-*     valid Frame axes (e.g. are set to -1) are ignored.
-*
-*     If the axis selection is valid, this function returns without further
-*     action. Otherwise, an error is reported and the global error status is
-*     set.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     naxes
-*        The number of axes to be selected (may be zero).
-*     axes
-*        Pointer to an array of int with naxes elements that contains the
-*        (zero based) axis indices to be checked.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis selection. This method name is used
-*        solely for constructing error messages.
-*-
-*/
-
-/* Local Variables: */
-   int *count;                   /* Pointer to temporary array of counts */
-   int axis;                     /* Loop counter for selected axes */
-   int frame_axis;               /* Loop counter for Frame axes */
-   int frame_naxes;              /* Number of Frame axes */
-   int valid;                    /* Axis selection valid? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check to see if no axes have been selected. If so, there is nothing to
-   do. */
-   if ( naxes ) {
-
-/* Initialise. */
-      valid = 1;
-
-/* Obtain the number of Frame axes and allocate an array of int with
-   one element for each Frame axis. This will store a count of the
-   number of times each axis is selected. */
-      frame_naxes = astGetNaxes( this );
-      count = astMalloc( sizeof( int ) * (size_t) frame_naxes );
-      if ( astOK ) {
-
-/* Initialise the array of counts to zero. */
-         for ( frame_axis = 0; frame_axis < frame_naxes; frame_axis++ ) {
-            count[ frame_axis ] = 0;
-         }
-
-/* Loop through each selected axis. */
-         for ( axis = 0; axis < naxes; axis++ ) {
-            frame_axis = axes[ axis ];
-
-/* Check if the selected axis index is valid for the Frame. If so, increment
-   the selection count for that Frame axis. */
-            if ( ( frame_axis >= 0 ) && ( frame_axis < frame_naxes ) ) {
-               count[ frame_axis ]++;
-            }
-         }
-
-/* Loop through the count array and check that no Frame axis was selected
-   more than once. If it was, clear the "valid" flag and quit checking. */
-         for ( frame_axis = 0; frame_axis < frame_naxes; frame_axis++ ) {
-            if ( count[ frame_axis ] > 1 ) {
-               valid = 0;
-               break;
-            }
-         }
-      }
-
-/* Free the temporary count array. */
-      count = astFree( count );
-
-/* If no error has occurred, but the axis selection is not valid, then report
-   an error. */
-      if ( astOK && !valid ) {
-         astError( AST__SELIN, "%s(%s): Invalid axis selection - each axis "
-                   "may be selected only once.", status, method, astGetClass( this ) );
-      }
-   }
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int astValidateSystem( AstFrame *this, AstSystemType system,
-*                            const char *method )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST_BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSystemType result;              /* Validated system value */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
-   if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
-         astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
-                   "or AlignSystem attribute of a %s.", status, method, 
-                   astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
-   } else {
-      result = system;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   the axes of a Frame using the private macros defined for this
-   purpose at the start of this file. */
-
-/*
-*att++
-*  Name:
-*     Naxes
-
-*  Purpose:
-*     Number of Frame axes.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This is a read-only attribute giving the number of axes in a
-*     Frame (i.e. the number of dimensions of the coordinate space
-*     which the Frame describes). This value is determined when the
-*     Frame is created.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-*     FrameSet
-*        The Naxes attribute of a FrameSet is the same as that of its
-*        current Frame (as specified by the Current attribute).
-*     CmpFrame
-*        The Naxes attribute of a CmpFrame is equal to the sum of the
-*        Naxes values of its two component Frames.
-*att--
-*/
-
-
-/*
-*att++
-*  Name:
-*     Direction(axis)
-
-*  Purpose:
-*     Display axis in conventional direction?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which suggests how the axes of
-*     a Frame should be displayed (e.g.) in graphical output. By
-*     default, it has the value one, indicating that they should be
-*     shown in the conventional sense (increasing left to right for an
-*     abscissa, and bottom to top for an ordinate). If set to zero,
-*     this attribute indicates that the direction should be reversed,
-*     as would often be done for an astronomical magnitude or a right
-*     ascension axis.
-
-*  Applicability:
-*     Frame
-*        The default Direction value supplied by the Frame class is 1,
-*        indicating that all axes should be displayed in the
-*        conventional direction.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Direction value to
-*        suggest that certain axes (e.g. right ascension) should be
-*        plotted in reverse when appropriate.
-*     FrameSet
-*        The Direction attribute of a FrameSet axis is the same as
-*        that of its current Frame (as specified by the Current
-*        attribute).
-*     Plot
-*        The Direction attribute of the base Frame in a Plot is set to
-*        indicate the sense of the two graphics axes, as implied by the 
-*        graphics bounding box supplied when the Plot was created.
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*     - The Direction attribute does not directly affect the behaviour
-*     of the AST library. Instead, it serves as a hint to applications
-*     programs about the orientation in which they may wish to display
-*     any data associated with the Frame. Applications are free to
-*     ignore this hint if they wish.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
-   the Direction flag. */
-MAKE_CLEAR(Direction)
-MAKE_GET(Direction,int,0,0,0)
-MAKE_SET(Direction,int)
-MAKE_TEST(Direction)
-
-/*
-*att++
-*  Name:
-*     Dut1
-
-*  Purpose:
-*     The UT1-UTC correction.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute is used when calculating the Local Apparent Sidereal
-*     Time corresponding to SkyFrame's Epoch value (used when converting
-*     positions to or from the "AzEl" system). It should be set to the 
-*     difference, in seconds, between the UT1 and UTC timescales at the 
-*     moment in time represented by the SkyFrame's Epoch attribute. The 
-*     value to use is unpredictable and depends on changes in the earth's 
-*     rotation speed. Values for UT1-UTC can be obtained from the 
-*     International Earth Rotation and Reference Systems Service 
-*     (IERS) at http://www.iers.org/.
-*
-*     Currently, the correction is always less than 1 second. This is
-*     ensured by the occasional introduction of leap seconds into the UTC
-*     timescale. Therefore no great error will usually result if no value
-*     is assigned to this attribute (in which case a default value of
-*     zero is used). However, it is possible that a decision may be taken
-*     at some time in the future to abandon the introduction of leap
-*     seconds, in which case the DUT correction could grow to significant 
-*     sizes.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-
-*att--
-*/
-/* The UT1-UTC correction, in seconds. Has a value of AST__BAD when not set 
-   yielding a default value of 0.0. */
-astMAKE_CLEAR(Frame,Dut1,dut1,AST__BAD)
-astMAKE_GET(Frame,Dut1,double,0.0,(this->dut1 == AST__BAD ? 0.0 : this->dut1))
-astMAKE_SET(Frame,Dut1,double,dut1,value)
-astMAKE_TEST(Frame,Dut1,( this->dut1 != AST__BAD ))
-
-
-
-/*
-*att++
-*  Name:
-*     Epoch
-
-*  Purpose:
-*     Epoch of observation.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute is used to qualify the coordinate systems described by
-*     a Frame, by giving the moment in time when the coordinates are known
-*     to be correct. Often, this will be the date of observation, and is
-*     important in cases where coordinates systems move with respect to each
-*     other over the course of time.
-*
-*     The Epoch attribute is stored as a Modified Julian Date, but
-*     when setting its value it may be given in a variety of
-*     formats. See the "Input Formats" section (below) for details.
-*     Strictly, the Epoch value should be supplied in the TDB timescale,
-*     but for some purposes (for instance, for converting sky positions 
-*     between different types of equatorial system) the timescale is not
-*     significant, and UTC may be used.   
-
-*  Input Formats:
-*     The formats accepted when setting an Epoch value are listed
-*     below. They are all case-insensitive and are generally tolerant
-*     of extra white space and alternative field delimiters:
-*
-*     - Besselian Epoch: Expressed in decimal years, with or without
-*     decimal places ("B1950" or "B1976.13" for example).
-*
-*     - Julian Epoch: Expressed in decimal years, with or without
-*     decimal places ("J2000" or "J2100.9" for example).
-*
-*     - Year: Decimal years, with or without decimal places ("1996.8"
-*     for example).  Such values are interpreted as a Besselian epoch
-*     (see above) if less than 1984.0 and as a Julian epoch otherwise.
-*
-*     - Julian Date: With or without decimal places ("JD 2454321.9" for
-*     example).
-*
-*     - Modified Julian Date: With or without decimal places
-*     ("MJD 54321.4" for example).
-*
-*     - Gregorian Calendar Date: With the month expressed either as an
-*     integer or a 3-character abbreviation, and with optional decimal
-*     places to represent a fraction of a day ("1996-10-2" or
-*     "1996-Oct-2.6" for example). If no fractional part of a day is
-*     given, the time refers to the start of the day (zero hours).
-*
-*     - Gregorian Date and Time: Any calendar date (as above) but with
-*     a fraction of a day expressed as hours, minutes and seconds
-*     ("1996-Oct-2 12:13:56.985" for example). The date and time can be 
-*     separated by a space or by a "T" (as used by ISO8601 format).
-
-*  Output Format:
-*     When enquiring Epoch values, the format used is the "Year"
-*     format described under "Input Formats". This is a value in
-*     decimal years which will be a Besselian epoch if less than
-*     1984.0 and a Julian epoch otherwise.  By omitting any character
-*     prefix, this format allows the Epoch value to be obtained as
-*     either a character string or a floating point value.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute. The basic Frame class provides
-*        a default of J2000.0 (Julian) but makes no use of the Epoch value.
-*        This is because the Frame class does not distinguish between
-*        different Cartesian coordinate systems (see the System attribute).
-*     CmpFrame
-*        The default Epoch value for a CmpFrame is selected as follows;
-*        if the Epoch attribute has been set in the first component Frame
-*        then the Epoch value from the first component Frame is used as
-*        the default for the CmpFrame. Otherwise, if the Epoch attribute has
-*        been set in the second component Frame then the Epoch value from the
-*        second component Frame is used as the default for the CmpFrame.
-*        Otherwise, the default Epoch value from the first component
-*        Frame is used as the default for the CmpFrame. When the Epoch
-*        attribute of a CmpFrame is set or cleared, it is also set or
-*        cleared in the two component Frames. 
-*     FrameSet
-*        The Epoch attribute of a FrameSet is the same as that of its current
-*        Frame (as specified by the Current attribute).
-*     SkyFrame
-*        The coordinates of sources within a SkyFrame can changed with time
-*        for various reasons, including: (i) changing aberration of light
-*        caused by the observer's velocity (e.g. due to the Earth's motion
-*        around the Sun), (ii) changing gravitational deflection by the Sun
-*        due to changes in the observer's position with time, (iii) fictitious
-*        motion due to rotation of non-inertial coordinate systems (e.g. the
-*        old FK4 system), and (iv) proper motion of the source itself (although
-*        this last effect is not handled by the SkyFrame class because it
-*        affects individual sources rather than the coordinate system as
-*        a whole).
-*
-*        The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the
-*        old FK4-based coordinate systems (see the System attribute) and
-*        J2000.0 (Julian) for all others.
-*
-*        Care must be taken to distinguish the Epoch value, which relates to
-*        motion (or apparent motion) of the source, from the superficially
-*        similar Equinox value. The latter is used to qualify a coordinate
-*        system which is itself in motion in a (notionally) predictable way
-*        as a result of being referred to a slowly moving reference plane
-*        (e.g. the equator).
-*
-*        See the description of the System attribute for details of which
-*        qualifying attributes apply to each celestial coordinate system.
-*     TimeFrame
-*        A TimeFrame describes a general time axis and so cannot be completely 
-*        characterised by a single Epoch value. For this reason the TimeFrame 
-*        class makes no use of the Epoch attribute. However, user code can 
-*        still make use of the attribute if necessary to represent a "typical" 
-*        time spanned by the TimeFrame. The default Epoch value for a TimeFrame
-*        will be the TDB equivalent of the current value of the TimeFrame's 
-*        TimeOrigin attribute. If no value has been set for TimeOrigin,
-*        then the default Epoch value is J2000.0.
-
-
-The coordinates of sources within a SkyFrame can changed with time
-*att--
-*/
-/* Clear the Epoch value by setting it to AST__BAD. */
-astMAKE_CLEAR(Frame,Epoch,epoch,AST__BAD)
-
-/* Provide a default value of J2000.0 setting. */
-astMAKE_GET(Frame,Epoch,double,AST__BAD,(
-           ( this->epoch != AST__BAD ) ? this->epoch : palSlaEpj2d( 2000.0 )))
-
-/* Allow any Epoch value to be set. */
-astMAKE_SET(Frame,Epoch,double,epoch,value)
-
-/* An Epoch value is set if it is not equal to AST__BAD. */
-astMAKE_TEST(Frame,Epoch,( this->epoch != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     Top(axis)
-
-*  Purpose:
-*     Highest axis value to display
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute gives the highest axis value to be displayed (for
-c     instance, by the astGrid method).
-f     instance, by the AST_GRID method).
-
-*  Applicability:
-*     Frame
-*        The default supplied by the Frame class is to display all axis
-*        values, without any limit.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Top value to +90 degrees
-*        for latitude axes, and 180 degrees for co-latitude axes. The
-*        default for longitude axes is to display all axis values.
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
-   the Top value. */
-MAKE_CLEAR(Top)
-MAKE_GET(Top,double,DBL_MAX,0,DBL_MAX)
-MAKE_SET(Top,double)
-MAKE_TEST(Top)
-
-/*
-*att++
-*  Name:
-*     Bottom(axis)
-
-*  Purpose:
-*     Lowest axis value to display
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute gives the lowest axis value to be displayed (for
-c     instance, by the astGrid method).
-f     instance, by the AST_GRID method).
-
-*  Applicability:
-*     Frame
-*        The default supplied by the Frame class is to display all axis
-*        values, without any limit.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Bottom value to -90 degrees
-*        for latitude axes, and 0 degrees for co-latitude axes. The
-*        default for longitude axes is to display all axis values.
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
-   the Bottom value. */
-MAKE_CLEAR(Bottom)
-MAKE_GET(Bottom,double,-DBL_MAX,0,-DBL_MAX)
-MAKE_SET(Bottom,double)
-MAKE_TEST(Bottom)
-
-/*
-*att++
-*  Name:
-*     Format(axis)
-
-*  Purpose:
-*     Format specification for axis values.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the format to be used when displaying
-*     coordinate values associated with a particular Frame axis
-*     (i.e. to convert values from binary to character form). It is
-c     interpreted by the astFormat function and determines the
-f     interpreted by the AST_FORMAT function and determines the
-*     formatting which it applies.
-*
-*     If no Format value is set for a Frame axis, a default value is
-*     supplied instead. This is based on the value of the Digits, or
-*     Digits(axis), attribute and is chosen so that it displays the
-*     requested number of digits of precision.
-
-*  Applicability:
-*     Frame
-*        The Frame class interprets this attribute as a format
-*        specification string to be passed to the C "printf" function
-*        (e.g. "%1.7G") in order to format a single coordinate value
-*        (supplied as a double precision number).
-c
-c        When supplying a value for this attribute, beware that the
-c        "%" character may be interpreted directly as a format
-c        specification by some printf-like functions (such as
-c        astSet). You may need to double it (i.e. use "%%") to avoid
-c        this.
-*     SkyFrame
-*        The SkyFrame class re-defines the syntax and default value of
-*        the Format string to allow the formatting of sexagesimal
-*        values as appropriate for the particular celestial coordinate
-*        system being represented. The syntax of SkyFrame Format
-*        strings is described (below) in the "SkyFrame Formats"
-*        section.
-*     FrameSet
-*        The Format attribute of a FrameSet axis is the same as that
-*        of its current Frame (as specified by the Current
-*        attribute). Note that the syntax of the Format string is also
-*        determined by the current Frame.
-*     TimeFrame
-*        The TimeFrame class extends the syntax of the Format string to 
-*        allow the formatting of TimeFrame axis values as Gregorian calendar
-*        dates and times. The syntax of TimeFrame Format strings is described 
-*        (below) in the "TimeFrame Formats" section.
-
-*  SkyFrame Formats:
-*     The Format string supplied for a SkyFrame should contain zero or
-*     more of the following characters. These may occur in any order,
-*     but the following is recommended for clarity:
-*
-*     - "+": Indicates that a plus sign should be prefixed to positive
-*     values. By default, no plus sign is used.
-*
-*     - "z": Indicates that leading zeros should be prefixed to the
-*     value so that the first field is of constant width, as would be
-*     required in a fixed-width table (leading zeros are always
-*     prefixed to any fields that follow). By default, no leading
-*     zeros are added.
-*
-*     - "i": Use the standard ISO field separator (a colon) between
-*     fields. This is the default behaviour.
-*
-*     - "b": Use a blank to separate fields.
-*
-*     - "l": Use a letter ("h"/"d", "m" or "s" as appropriate) to
-*     separate fields.
-*
-*     - "g": Use a letter and symbols to separate fields ("h"/"d", "m" or "s",
-*     etc, as appropriate), but include escape sequences in the formatted 
-*     value so that the Plot class will draw the separators as small
-*     super-scripts.
-*
-*     - "d": Include a degrees field. Expressing the angle purely in
-*     degrees is also the default if none of "h", "m", "s" or "t" are
-*     given.
-*
-*     - "h": Express the angle as a time and include an hours field
-*     (where 24 hours correspond to 360 degrees). Expressing the angle
-*     purely in hours is also the default if "t" is given without
-*     either "m" or "s".
-*
-*     - "m": Include a minutes field. By default this is not included.
-*
-*     - "s": Include a seconds field. By default this is not included.
-*     This request is ignored if "d" or "h" is given, unless a minutes
-*     field is also included.
-*
-*     - "t": Express the angle as a time (where 24 hours correspond to
-*     360 degrees). This option is ignored if either "d" or "h" is
-*     given and is intended for use where the value is to be expressed
-*     purely in minutes and/or seconds of time (with no hours
-*     field). If "t" is given without "d", "h", "m" or "s" being
-*     present, then it is equivalent to "h".
-*
-*     - ".": Indicates that decimal places are to be given for the
-*     final field in the formatted string (whichever field this
-*     is). The "." should be followed immediately by an unsigned
-*     integer which gives the number of decimal places required, or by an
-*     asterisk. If an asterisk is supplied, a default number of decimal
-*     places is used which is based on the value of the Digits 
-*     attribute. 
-*
-*     All of the above format specifiers are case-insensitive. If
-*     several characters make conflicting requests (e.g. if both "i"
-*     and "b" appear), then the character occurring last takes
-*     precedence, except that "d" and "h" always override "t".
-*
-*     If the format string starts with a percentage sign (%), then the 
-*     whole format string is assumed to conform to the syntax defined by
-*     the Frame class, and the axis values is formated as a decimal
-*     radians value.
-
-*  TimeFrame Formats:
-*     The Format string supplied for a TimeFrame should either use the
-*     syntax defined by the base Frame class (i.e. a C "printf" format
-*     string), or the extended "iso" syntax described below (the default
-*     value is inherited from the Frame class):
-*
-*     - C "printf" syntax: If the Format string is a C "printf" format
-*     description such as "%1.7G", the TimeFrame axis value will be
-*     formatted without change as a floating point value using this format.
-*     The formatted string will thus represent an offset from the zero point 
-*     specified by the TimeFrame's TimeOrigin attribute, measured in
-*     units given by the TimeFrame's Unit attribute.
-*
-*     - "iso" syntax: This is used to format a TimeFrame axis value as a
-*     Gregorian date followed by an optional time of day. If the Format
-*     value commences with the string "iso" then the TimeFrame axis value
-*     will be converted to an absolute MJD, including the addition of the 
-*     current TimeOrigin value, and then formatted as a Gregorian date 
-*     using the format "yyyy-mm-dd". Optionally, the Format value may
-*     include an integer precision following the "iso" specification (e.g. 
-*     "iso.2"), in which case the time of day will be appended to the 
-*     formatted date (if no time of day is included, the date field is
-*     rounded to the nearest day). The integer value in the Format string 
-*     indicates the number of decimal places to use in the seconds field. For 
-*     instance, a Format value of "iso.0" produces a time of day of the form 
-*     "hh:mm:ss", and a Format value of "iso.2" produces a time of day of the 
-*     form "hh:mm:ss.ss". The date and time fields will be separated by a 
-*     space unless 'T' is appended to the end of string, in which case
-*     the letter T (upper case) will be used as the separator. The value of 
-*     the Digits attribute is ignored when using this "iso" format. 
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
-   the Format string. */
-MAKE_CLEAR(Format)
-MAKE_GET(Format,const char *,NULL,0,0)
-MAKE_SET(Format,const char *)
-MAKE_TEST(Format)
-
-/*
-*att++
-*  Name:
-*     Label(axis)
-
-*  Purpose:
-*     Axis label.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies a label to be attached to each axis of
-*     a Frame when it is represented (e.g.) in graphical output.
-*
-*     If a Label value has not been set for a Frame axis, then a
-*     suitable default is supplied.
-
-*  Applicability:
-*     Frame
-*        The default supplied by the Frame class is the string "Axis
-*        <n>", where <n> is 1, 2, etc. for each successive axis.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Label value
-*        (e.g. to "Right ascension" or "Galactic latitude") as
-*        appropriate for the particular celestial coordinate system
-*        being represented.
-*     TimeFrame
-*        The TimeFrame class re-defines the default Label value as
-*        appropriate for the particular time system being represented.
-*     FrameSet
-*        The Label attribute of a FrameSet axis is the same as that of
-*        its current Frame (as specified by the Current attribute).
-
-*  Notes:
-*     - Axis labels are intended purely for interpretation by human
-*     readers and not by software.
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This provides an interface to the Axis methods for accessing the
-   Label string, but provides an alternative default Label based on
-   the axis number.  This default string is written to the static
-   "label_buff" buffer and a pointer to this is returned if
-   required. */
-MAKE_CLEAR(Label)
-MAKE_GET(Label,const char *,NULL,1,GetDefaultLabel( axis, status ))
-MAKE_SET(Label,const char *)
-MAKE_TEST(Label)
-
-/*
-*att++
-*  Name:
-*     Symbol(axis)
-
-*  Purpose:
-*     Axis symbol.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies a short-form symbol to be used to
-*     represent coordinate values for a particular axis of a
-*     Frame. This might be used (e.g.) in algebraic expressions where
-*     a full description of the axis would be inappropriate. Examples
-*     include "RA" and "Dec" (for Right Ascension and Declination).
-*
-*     If a Symbol value has not been set for a Frame axis, then a
-*     suitable default is supplied.
-
-*  Applicability:
-*     Frame
-*        The default Symbol value supplied by the Frame class is the
-*        string "<Domain><n>", where <n> is 1, 2, etc. for successive
-*        axes, and <Domain> is the value of the Frame's Domain
-*        attribute (truncated if necessary so that the final string
-*        does not exceed 15 characters). If no Domain value has been
-*        set, "x" is used as the <Domain> value in constructing this
-*        default string.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Symbol value
-*        (e.g. to "RA" or "Dec") as appropriate for the particular
-*        celestial coordinate system being represented.
-*     TimeFrame
-*        The TimeFrame class re-defines the default Symbol value as
-*        appropriate for the particular time system being represented.
-*     FrameSet
-*        The Symbol attribute of a FrameSet axis is the same as that
-*        of its current Frame (as specified by the Current attribute).
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This provides an interface to the Axis methods for accessing the
-   Symbol string, but provides an alternative default Symbol based on
-   the axis number and the Frame's Domain (if defined, otherwise "x"
-   is used). This default string is written to the static
-   "symbol_buff" buffer and a pointer to this is returned if
-   required. */
-MAKE_CLEAR(Symbol)
-MAKE_GET(Symbol,const char *,NULL,1,GetDefaultSymbol( this, axis, status ) )
-MAKE_SET(Symbol,const char *)
-MAKE_TEST(Symbol)
-
-/*
-*att++
-*  Name:
-*     Unit(axis)
-
-*  Purpose:
-*     Axis physical units.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute contains a textual representation of the physical
-*     units used to represent coordinate values on a particular axis
-c     of a Frame. The astSetActiveUnit function controls how the Unit values
-f     of a Frame. The AST_SETACTIVEUNIT routine controls how the Unit values
-*     are used.
-
-*  Applicability:
-*     Frame
-*        The default supplied by the Frame class is an empty string.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Unit value (e.g. to
-*        "hh:mm:ss.sss") to describe the character string returned by
-c        the astFormat function when formatting coordinate values.
-f        the AST_FORMAT function when formatting coordinate values.
-*     SpecFrame
-*        The SpecFrame class re-defines the default Unit value so that it
-*        is appropriate for the current System value. See the System
-*        attribute for details. An error will be reported if an attempt
-*        is made to use an inappropriate Unit.
-*     TimeFrame
-*        The TimeFrame class re-defines the default Unit value so that it
-*        is appropriate for the current System value. See the System
-*        attribute for details. An error will be reported if an attempt
-*        is made to use an inappropriate Unit (e.g. "km").
-*     FrameSet
-*        The Unit attribute of a FrameSet axis is the same as that of
-*        its current Frame (as specified by the Current attribute).
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
-   the Unit string. */
-MAKE_GET(Unit,const char *,NULL,0,0)
-MAKE_TEST(Unit)
-
-/*
-*att++
-*  Name:
-*     NormUnit(axis)
-
-*  Purpose:
-*     Normalised Axis physical units.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String, read-only.
-
-*  Description:
-*     The value of this read-only attribute is derived from the current
-*     value of the Unit attribute. It will represent an equivalent system
-*     of units to the Unit attribute, but will potentially be simplified.
-*     For instance, if Unit is set to "s*(m/s)", the NormUnit value will
-*     be "m". If no simplification can be performed, the value of the
-*     NormUnit attribute will equal that of the Unit attribute.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-
-*  Notes:
-*     - When specifying this attribute by name, it should be
-*     subscripted with the number of the Frame axis to which it
-*     applies.
-*att--
-*/
-/* This simply provides an interface to the Axis methods for accessing
-   the Unit string. */
-MAKE_GET(NormUnit,const char *,NULL,0,0)
-
-/* Implement member functions to access the attributes associated with
-   the Frame as a whole using the macros defined for this purpose in
-   the "object.h" file. */
-
-/*
-*att++
-*  Name:
-*     Digits/Digits(axis)
-
-*  Purpose:
-*     Number of digits of precision.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute specifies how many digits of precision are
-*     required by default when a coordinate value is formatted for a
-c     Frame axis (e.g. using astFormat). Its value may be set either
-f     Frame axis (e.g. using AST_FORMAT). Its value may be set either
-*     for a Frame as a whole, or (by subscripting the attribute name
-*     with the number of an axis) for each axis individually. Any
-*     value set for an individual axis will over-ride the value for
-*     the Frame as a whole.
-*
-*     Note that the Digits value acts only as a means of determining a
-*     default Format string. Its effects are over-ridden if a Format
-*     string is set explicitly for an axis. However, if the Format
-*     attribute specifies the precision using the string ".*", then 
-*     the Digits attribute is used to determine the number of decimal 
-*     places to produce.
-
-*  Applicability:
-*     Frame
-*        The default Digits value supplied by the Frame class is 7. If
-*        a value less than 1 is supplied, then 1 is used instead.
-*     FrameSet
-*        The Digits attribute of a FrameSet (or one of its axes) is
-*        the same as that of its current Frame (as specified by the
-*        Current attribute).
-*     Plot
-*        The default Digits value used by the Plot class when drawing
-*        annotated axis labels is the smallest value which results in all 
-*        adjacent labels being distinct.
-*     TimeFrame
-*        The Digits attribute is ignored when a TimeFrame formats a value
-*        as a date and time string (see the Format attribute).
-*att--
-*/
-/* Clear the Digits value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,Digits,digits,-INT_MAX)
-
-/* Supply a default of 7 digits if no value has been set. */
-astMAKE_GET(Frame,Digits,int,0,( ( this->digits != -INT_MAX ) ? this->digits :
-                                                                7 ))
-
-/* Constrain the Digits value being set to be at least 1. */
-astMAKE_SET(Frame,Digits,int,digits,( value > 1 ? value : 1 ))
-
-/* The Digits value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,Digits,( this->digits != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     MatchEnd
-
-*  Purpose:
-*     Match trailing axes?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which controls how a Frame
-c     behaves when it is used (by astFindFrame) as a template to match
-f     behaves when it is used (by AST_FINDFRAME) as a template to match
-*     another (target) Frame. It applies only in the case where a
-*     match occurs between template and target Frames with different
-*     numbers of axes.
-*
-*     If the MatchEnd value of the template Frame is zero, then the
-*     axes which occur first in the target Frame will be matched and
-*     any trailing axes (in either the target or template) will be
-*     disregarded. If it is non-zero, the final axes in each Frame
-*     will be matched and any un-matched leading axes will be
-*     disregarded instead.
-
-*  Applicability:
-*     Frame
-*        The default MatchEnd value for a Frame is zero, so that
-*        trailing axes are disregarded.
-*     FrameSet
-*        The MatchEnd attribute of a FrameSet is the same as that of
-*        its current Frame (as specified by the Current attribute).
-*att--
-*/
-/* Clear the MatchEnd value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,MatchEnd,match_end,-INT_MAX)
-
-/* Supply a default of 0 if no MatchEnd value has been set. */
-astMAKE_GET(Frame,MatchEnd,int,0,( ( this->match_end != -INT_MAX ) ?
-                                   this->match_end : 0 ))
-
-/* Set a MatchEnd value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Frame,MatchEnd,int,match_end,( value != 0 ))
-
-/* The MatchEnd value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,MatchEnd,( this->match_end != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     MaxAxes
-
-*  Purpose:
-*     Maximum number of Frame axes to match.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute controls how a Frame behaves when it is used (by
-c     astFindFrame) as a template to match another (target) Frame. It
-f     AST_FINDFRAME) as a template to match another (target) Frame. It
-*     specifies the maximum number of axes that the target Frame may
-*     have in order to match the template.
-*
-*     Normally, this value will equal the number of Frame axes, so
-*     that a template Frame will only match another Frame with the
-*     same number of axes as itself. By setting a different value,
-*     however, the matching process may be used to identify Frames
-*     with specified numbers of axes.
-
-*  Applicability:
-*     Frame
-*        The default MaxAxes value for a Frame is equal to the number
-*        of Frame axes (Naxes attribute).
-*     CmpFrame
-*        The MaxAxes attribute of a CmpFrame defaults to a large number
-*        (1000000) which is much larger than any likely number of axes in
-*        a Frame. Combined with the MinAxes default of zero (for a
-*        CmpFrame), this means that the default behaviour for a CmpFrame 
-*        is to match any target Frame that consists of a subset of the 
-*        axes in the template CmpFrame. To change this so that a CmpFrame
-*        will only match Frames that have the same number of axes, you
-*        should set the CmpFrame MaxAxes and MinAxes attributes to the 
-*        number of axes in the CmpFrame.
-*     FrameSet
-*        The MaxAxes attribute of a FrameSet is the same as that of
-*        its current Frame (as specified by the Current attribute).
-
-*  Notes:
-*     - When setting a MaxAxes value, the value of the MinAxes
-*     attribute may also be silently changed so that it remains
-*     consistent with (i.e. does not exceed) the new value. The
-*     default MaxAxes value may also be reduced to remain consistent
-*     with the MinAxes value.
-*     - If a template Frame is used to match a target with a different
-*     number of axes, the MatchEnd attribute of the template is used
-*     to determine how the individual axes of each Frame should match.
-*att--
-*/
-/* Clear the MaxAxes value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,MaxAxes,max_axes,-INT_MAX)
-
-/* Use the DefaultMaxAxes and ConsistentMaxAxes functions (defined earlier) for
-   the Get and Set operations to ensure that MinAxes and MaxAxes values remain
-   consistent. */
-astMAKE_GET(Frame,MaxAxes,int,0,DefaultMaxAxes( this, status ))
-astMAKE_SET(Frame,MaxAxes,int,max_axes,ConsistentMaxAxes( this, value, status ))
-
-/* The MaxAxes value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,MaxAxes,( this->max_axes != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     MinAxes
-
-*  Purpose:
-*     Minimum number of Frame axes to match.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute controls how a Frame behaves when it is used (by
-c     astFindFrame) as a template to match another (target) Frame. It
-f     AST_FINDFRAME) as a template to match another (target) Frame. It
-*     specifies the minimum number of axes that the target Frame may
-*     have in order to match the template.
-*
-*     Normally, this value will equal the number of Frame axes, so
-*     that a template Frame will only match another Frame with the
-*     same number of axes as itself. By setting a different value,
-*     however, the matching process may be used to identify Frames
-*     with specified numbers of axes.
-
-*  Applicability:
-*     Frame
-*        The default MinAxes value for a Frame is equal to the number
-*        of Frame axes (Naxes attribute).
-*     CmpFrame
-*        The MinAxes attribute of a CmpFrame defaults to zero. Combined 
-*        with the MaxAxes default of 1000000 (for a CmpFrame), this means 
-*        that the default behaviour for a CmpFrame is to match any target 
-*        Frame that consists of a subset of the axes in the template 
-*        CmpFrame. To change this so that a CmpFrame will only match Frames 
-*        that have the same number of axes, you should set the CmpFrame 
-*        MinAxes and MaxAxes attributes to the number of axes in the CmpFrame.
-*     FrameSet
-*        The MinAxes attribute of a FrameSet is the same as that of
-*        its current Frame (as specified by the Current attribute).
-
-*  Notes:
-*     - When setting a MinAxes value, the value of the MaxAxes
-*     attribute may also be silently changed so that it remains
-*     consistent with (i.e. is not less than) the new value. The
-*     default MinAxes value may also be reduced to remain consistent
-*     with the MaxAxes value.
-*     - If a template Frame is used to match a target with a different
-*     number of axes, the MatchEnd attribute of the template is used
-*     to determine how the individual axes of each Frame should match.
-*att--
-*/
-/* Clear the MinAxes value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,MinAxes,min_axes,-INT_MAX)
-
-/* Use the DefaultMinAxes and ConsistentMinAxes functions (defined earlier) for
-   the Get and Set operations to ensure that MinAxes and MaxAxes values remain
-   consistent. */
-astMAKE_GET(Frame,MinAxes,int,0,DefaultMinAxes( this, status ))
-astMAKE_SET(Frame,MinAxes,int,min_axes,ConsistentMinAxes( this, value, status ))
-
-/* The MinAxes value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,MinAxes,( this->min_axes != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Domain
-
-*  Purpose:
-*     Coordinate system domain.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute contains a string which identifies the physical
-*     domain of the coordinate system that a Frame describes.
-*
-*     The Domain attribute also controls how a Frame behaves when it is
-c     used (by astFindFrame) as a template to match another (target)
-f     used (by AST_FINDFRAME) as a template to match another (target)
-*     Frame. It does this by specifying the Domain that the target
-*     Frame should have in order to match the template. If the Domain
-*     value in the template Frame is set, then only targets with the
-*     same Domain value will be matched. If the template's Domain
-*     value is not set, however, then the target's Domain will be
-*     ignored.
-
-*  Applicability:
-*     Frame
-*        The default Domain value supplied by the Frame class is an
-*        empty string.
-*     SkyFrame
-*        The SkyFrame class re-defines the default Domain value to be
-*        "SKY".
-*     CmpFrame
-*        The CmpFrame class re-defines the default Domain value to be
-*        of the form "<dom1>-<dom2>", where <dom1> and <dom2> are the
-*        Domains of the two component Frames. If both these Domains are
-*        blank, then the string "CMP" is used as the default Domain name.
-*     FrameSet
-*        The Domain attribute of a FrameSet is the same as that of its
-*        current Frame (as specified by the Current attribute).
-*     SpecFrame
-*        The SpecFrame class re-defines the default Domain value to be
-*        "SPECTRUM".
-*     DSBSpecFrame
-*        The DSBSpecFrame class re-defines the default Domain value to be
-*        "DSBSPECTRUM".
-*     FluxFrame
-*        The FluxFrame class re-defines the default Domain value to be
-*        "FLUX".
-*     SpecFluxFrame
-*        The FluxFrame class re-defines the default Domain value to be
-*        "SPECTRUM-FLUX".
-*     TimeFrame
-*        The TimeFrame class re-defines the default Domain value to be
-*        "TIME".
-
-*  Notes:
-*     - All Domain values are converted to upper case and white space
-*     is removed before use.
-*att--
-*/
-/* Clear the Domain value by freeing the allocated memory and
-   assigning a NULL pointer. */
-astMAKE_CLEAR(Frame,Domain,domain,astFree( this->domain ))
-
-/* If the Domain value is not set, supply a default in the form of a
-   pointer to the constant string "". */
-astMAKE_GET(Frame,Domain,const char *,NULL,( this->domain ? this->domain :
-                                                            "" ))
-
-/* Set a Domain value by freeing any previously allocated memory,
-   allocating new memory, storing the string, removing white space,
-   converting to upper case and saving the pointer to the cleaned
-   copy. */
-astMAKE_SET(Frame,Domain,const char *,domain,CleanDomain(
-                                                astStore( this->domain,
-                                    value, strlen( value ) + (size_t) 1 ), status ))
-
-/* The Domain value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Frame,Domain,( this->domain != NULL ))
-
-/*
-*att++
-*  Name:
-*     Permute
-
-*  Purpose:
-*     Permute axis order?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute is a boolean value which controls how a Frame
-c     behaves when it is used (by astFindFrame) as a template to match
-f     behaves when it is used (by AST_FINDFRAME) as a template to match
-*     another (target) Frame. It specifies whether the axis order of
-*     the target Frame may be permuted in order to obtain a match.
-*
-*     If the template's Permute value is zero, it will match a target
-*     only if it can do so without changing the order of its
-*     axes. Otherwise, it will attempt to permute the target's axes as
-*     necessary.
-*
-*     The default value is 1, so that axis permutation will be attempted.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute. However, the Frame class
-*        effectively ignores this attribute and behaves as if it has
-*        the value 1. This is because the axes of a basic Frame are
-*        not distinguishable and will always match any other Frame
-*        whatever their order.
-*     SkyFrame
-*        Unlike a basic Frame, the SkyFrame class makes use of this
-*        attribute.
-*     FrameSet
-*        The Permute attribute of a FrameSet is the same as that of
-*        its current Frame (as specified by the Current attribute).
-*att--
-*/
-/* Clear the Permute value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,Permute,permute,-INT_MAX)
-
-/* Supply a default of 1 if no Permute value has been set. */
-astMAKE_GET(Frame,Permute,int,0,( ( this->permute != -INT_MAX ) ?
-                                  this->permute : 1 ))
-
-/* Set a Permute value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Frame,Permute,int,permute,( value != 0 ))
-
-/* The Permute value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,Permute,( this->permute != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     PreserveAxes
-
-*  Purpose:
-*     Preserve axes?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls how a Frame behaves when it is used (by
-c     astFindFrame) as a template to match another (target) Frame. It
-f     AST_FINDFRAME) as a template to match another (target) Frame. It
-*     determines which axes appear (and in what order) in the "result"
-*     Frame produced.
-*
-*     If PreserveAxes is zero in the template Frame, then the result
-*     Frame will have the same number (and order) of axes as the
-*     template. If it is non-zero, however, the axes of the target
-*     Frame will be preserved, so that the result Frame will have the
-*     same number (and order) of axes as the target.
-*
-*     The default value is zero, so that target axes are not preserved
-*     and the result Frame resembles the template.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-*     FrameSet
-*        The PreserveAxes attribute of a FrameSet is the same as that
-*        of its current Frame (as specified by the Current attribute).
-*att--
-*/
-/* Clear the PreserveAxes value by setting it to -INT_MAX. */
-astMAKE_CLEAR(Frame,PreserveAxes,preserve_axes,-INT_MAX)
-
-/* Supply a default of 0 if no PreserveAxes value has been set. */
-astMAKE_GET(Frame,PreserveAxes,int,0,( ( this->preserve_axes != -INT_MAX ) ?
-                                       this->preserve_axes : 0 ))
-
-/* Set a PreserveAxes value of 1 if any non-zero value is supplied. */
-astMAKE_SET(Frame,PreserveAxes,int,preserve_axes,( value != 0 ))
-
-/* The PreserveAxes value is set if it is not -INT_MAX. */
-astMAKE_TEST(Frame,PreserveAxes,( this->preserve_axes != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     AlignSystem
-
-*  Purpose:
-*     Coordinate system in which to align the Frame.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls how a Frame behaves when it is used (by
-c     astFindFrame or astConvert) as a template to match another (target)
-f     AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-*     Frame. It identifies the coordinate system in which the two Frames
-*     will be aligned by the match.
-*
-*     The values which may be assigned to this attribute, and its default
-*     value, depend on the class of Frame and are described in the
-*     "Applicability" section below. In general, the AlignSystem attribute
-*     will accept any of the values which may be assigned to the System
-*     attribute.
-*
-c     The Mapping returned by AST_FINDFRAME or AST_CONVERT will use the
-f     The Mapping returned by astFindFrame or astConvert will use the
-*     coordinate system specified by the AlignSystem attribute as an
-*     intermediate coordinate system. The total returned Mapping will first
-*     map positions from the first Frame into this intermediate coordinate
-*     system, using the attributes of the first Frame. It will then map
-*     these positions from the intermediate coordinate system into the
-*     second Frame, using the attributes of the second Frame.
-
-*  Applicability:
-*     Frame
-*        The AlignSystem attribute for a basic Frame always equals "Cartesian",
-*        and may not be altered.
-*     CmpFrame
-*        The AlignSystem attribute for a CmpFrame always equals "Compound",
-*        and may not be altered.
-*     FrameSet
-*        The AlignSystem attribute of a FrameSet is the same as that of its
-*        current Frame (as specified by the Current attribute).
-*     SkyFrame
-*        The default AlignSystem attribute for a SkyFrame is "ICRS".
-*     SpecFrame
-*        The default AlignSystem attribute for a SpecFrame is "Wave"
-*        (wavelength).
-*     TimeFrame
-*        The default AlignSystem attribute for a TimeFrame is "MJD".
-*att--
-*/
-/* Clear the AlignSystem value by setting it to AST__BADSYSTEM. */
-astMAKE_CLEAR(Frame,AlignSystem,alignsystem,AST__BADSYSTEM)
-
-/* Provide a default AlignSystem of AST__CART. */
-astMAKE_GET(Frame,AlignSystem,AstSystemType,AST__BADSYSTEM,(
-            ( this->alignsystem == AST__BADSYSTEM ) ? AST__CART : this->alignsystem ) )
-
-/* Validate the AlignSystem value being set and retain the original if the
-   supplied value is not recognized. */
-astMAKE_SET(Frame,AlignSystem,AstSystemType,alignsystem,(
-           (astValidateSystem( this, value, "astSetAlignSystem" ) != AST__BADSYSTEM) ?
-            value : this->alignsystem ))
-
-/* The AlignSystem value is set if it is not AST__BADSYSTEM. */
-astMAKE_TEST(Frame,AlignSystem,( this->alignsystem != AST__BADSYSTEM ))
-
-/*
-*att++
-*  Name:
-*     System
-
-*  Purpose:
-*     Coordinate system used to describe positions within the domain
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     In general it is possible for positions within a given physical
-*     domain to be described using one of several different coordinate
-*     systems. For instance, the SkyFrame class can use galactic
-*     coordinates, equatorial coordinates, etc, to describe positions on
-*     the sky. As another example, the SpecFrame class can use frequency,
-*     wavelength, velocity, etc, to describe a position within an
-*     electromagnetic spectrum. The System attribute identifies the particular
-*     coordinate system represented by a Frame. Each class of Frame
-*     defines a set of acceptable values for this attribute, as listed
-*     below (all are case insensitive). Where more than one alternative
-*     System value is shown, the first of will be returned when an
-*     enquiry is made.
-
-*  Applicability:
-*     Frame
-*        The System attribute for a basic Frame always equals "Cartesian",
-*        and may not be altered.
-*     CmpFrame
-*        The System attribute for a CmpFrame always equals "Compound",
-*        and may not be altered. In addition, the CmpFrame class allows
-*        the System attribute to be referenced for a component Frame by
-*        including the index of an axis within the required component
-*        Frame. For instance, "System(3)" refers to the System attribute
-*        of the component Frame which includes axis 3 of the CmpFrame.
-*     FrameSet
-*        The System attribute of a FrameSet is the same as that of its
-*        current Frame (as specified by the Current attribute).
-*     SkyFrame
-*        The SkyFrame class supports the following System values and
-*        associated celestial coordinate systems:
-*
-*        - "AZEL": Horizon coordinates. The longitude axis is azimuth
-*        such that geographic north has an azimuth of zero and geographic 
-*        east has an azimuth of +PI/2 radians. The zenith has elevation
-*        +PI/2. When converting to and from other celestial coordinate 
-*        systems, no corrections are applied for atmospheric refraction
-*        or polar motion (however, a correction for diurnal aberattion is
-*        applied). Note, unlike most other
-*        celestial coordinate systems, this system is right handed. Also,
-*        unlike other SkyFrame systems, the AzEl system is sensitive to
-*        the timescale in which the Epoch value is supplied. This is
-*        because of the gross diurnal rotation which this system undergoes,
-*        causing a small change in time to translate to a large rotation.
-*        When converting to or from an AzEl system, the Epoch value for
-*        both source and destination SkyFrames should be supplied in the 
-*        TDB timescale. The difference between TDB and TT is between 1
-*        and 2 milliseconds, and so a TT value can usually be supplied in
-*        place of a TDB value. The TT timescale is related to TAI via
-*        TT = TAI + 32.184 seconds.
-*
-*        - "ECLIPTIC": Ecliptic coordinates (IAU 1980), referred to the
-*        ecliptic and mean equinox specified by the qualifying Equinox
-*        value.
-*
-*        - "FK4": The old FK4 (barycentric) equatorial coordinate system,
-*        which should be qualified by an Equinox value. The underlying
-*        model on which this is based is non-inertial and rotates slowly
-*        with time, so for accurate work FK4 coordinate systems should
-*        also be qualified by an Epoch value.
-*
-*        - "FK4-NO-E" or "FK4_NO_E": The old FK4 (barycentric) equatorial
-*        system but without the "E-terms of aberration" (e.g. some radio
-*        catalogues). This coordinate system should also be qualified by
-*        both an Equinox and an Epoch value.
-*
-*        - "FK5" or "EQUATORIAL": The modern FK5 (barycentric) equatorial
-*        coordinate system. This should be qualified by an Equinox value.
-*
-*        - "GALACTIC": Galactic coordinates (IAU 1958).
-*
-*        - "GAPPT", "GEOCENTRIC" or "APPARENT": The geocentric apparent
-*        equatorial coordinate system, which gives the apparent positions
-*        of sources relative to the true plane of the Earth's equator and
-*        the equinox (the coordinate origin) at a time specified by the
-*        qualifying Epoch value. (Note that no Equinox is needed to
-*        qualify this coordinate system because no model "mean equinox"
-*        is involved.)  These coordinates give the apparent right
-*        ascension and declination of a source for a specified date of
-*        observation, and therefore form an approximate basis for
-*        pointing a telescope. Note, however, that they are applicable to
-*        a fictitious observer at the Earth's centre, and therefore
-*        ignore such effects as atmospheric refraction and the (normally
-*        much smaller) aberration of light due to the rotational velocity
-*        of the Earth's surface.  Geocentric apparent coordinates are
-*        derived from the standard FK5 (J2000.0) barycentric coordinates
-*        by taking account of the gravitational deflection of light by
-*        the Sun (usually small), the aberration of light caused by the
-*        motion of the Earth's centre with respect to the barycentre
-*        (larger), and the precession and nutation of the Earth's spin
-*        axis (normally larger still).
-*
-*        - "HELIOECLIPTIC": Ecliptic coordinates (IAU 1980), referred to the
-*        ecliptic and mean equinox of J2000.0, in which an offset is added to
-*        the longitude value which results in the centre of the sun being at 
-*        zero longitude at the date given by the Epoch attribute. Attempts to 
-*        set a value for the Equinox attribute will be ignored, since this 
-*        system is always referred to J2000.0.
-*
-*        - "ICRS": The Internation Celestial Reference System, realised
-*        through the Hipparcos catalogue. Whilst not an equatorial system
-*        by definition, the ICRS is very close to the FK5 (J2000) system
-*        and is usually treated as an equatorial system. The distinction
-*        between ICRS and FK5 (J2000) only becomes important when accuracies
-*        of 50 milli-arcseconds or better are required. ICRS need not be
-*        qualified by an Equinox value.
-*
-*        - "J2000": An equatorial coordinate system based on the mean
-*        dynamical equator and equinox of the J2000 epoch. The dynamical
-*        equator and equinox differ slightly from those used by the FK5
-*        model, and so a "J2000" SkyFrame will differ slightly from an
-*        "FK5(Equinox=J2000)" SkyFrame. The J2000 System need not be 
-*        qualified by an Equinox value
-*
-*        - "SUPERGALACTIC": De Vaucouleurs Supergalactic coordinates.
-*
-*        - "UNKNOWN": Any other general spherical coordinate system. No
-*        Mapping can be created between a pair of SkyFrames if either of the
-*        SkyFrames has System set to "Unknown".
-*
-*        Currently, the default System value is "ICRS". However, this
-*        default may change in future as new astrometric standards
-*        evolve. The intention is to track the most modern appropriate
-*        standard. For this reason, you should use the default only if
-*        this is what you intend (and can tolerate any associated slight
-*        change in future). If you intend to use the ICRS system
-*        indefinitely, then you should specify it explicitly.
-*     SpecFrame
-*        The SpecFrame class supports the following System values and
-*        associated spectral coordinate systems (the default is "WAVE" -
-*        wavelength). They are all defined in FITS-WCS paper III:
-*
-*        - "FREQ": Frequency (GHz)
-*        - "ENER" or "ENERGY": Energy (J)
-*        - "WAVN" or "WAVENUM": Wave-number (1/m)
-*        - "WAVE" or "WAVELEN": Vacuum wave-length (Angstrom)
-*        - "AWAV" or "AIRWAVE": Wave-length in air (Angstrom)
-*        - "VRAD" or "VRADIO": Radio velocity (km/s)
-*        - "VOPT" or "VOPTICAL": Optical velocity (km/s)
-*        - "ZOPT" or "REDSHIFT": Redshift (dimensionless)
-*        - "BETA": Beta factor (dimensionless)
-*        - "VELO" or "VREL": Apparent radial ("relativistic") velocity (km/s)
-*
-*        The default value for the Unit attribute for each system is shown
-*        in parentheses. Note that the default value for the ActiveUnit flag
-c        is non-zero
-f        is .TRUE.
-*        for a SpecFrame, meaning that changes to the Unit attribute for
-*        a SpecFrame will result in the SpecFrame being re-mapped within
-*        its enclosing FrameSet in order to reflect the change in units
-c        (see astSetActiveUnit function for further information).
-f        (see AST_SETACTIVEUNIT routine for further information).
-*     TimeFrame
-*        The TimeFrame class supports the following System values and
-*        associated coordinate systems (the default is "MJD"):
-*
-*        - "MJD": Modified Julian Date (d)
-*        - "JD": Julian Date (d)
-*        - "JEPOCH": Julian epoch (yr)
-*        - "BEPOCH": Besselian (yr)
-*
-*        The default value for the Unit attribute for each system is shown
-*        in parentheses. Strictly, these systems should not allow changes
-*        to be made to the units. For instance, the usual definition of
-*        "MJD" and "JD" include the statement that the values will be in
-*        units of days. However, AST does allow the use of other units
-*        with all the above supported systems (except BEPOCH), on the 
-*        understanding that conversion to the "correct" units involves 
-*        nothing more than a simple scaling (1 yr = 365.25 d, 1 d = 24 h, 
-*        1 h = 60 min, 1 min = 60 s). Besselian epoch values are defined
-*        in terms of tropical years of 365.2422 days, rather than the
-*        usual Julian year of 365.25 days. Therefore, to avoid any
-*        confusion, the Unit attribute is automatically cleared to "yr" when 
-*        a System value of BEPOCH System is selected, and an error is
-*        reported if any attempt is subsequently made to change the Unit 
-*        attribute.
-*
-*        Note that the default value for the ActiveUnit flag
-c        is non-zero
-f        is .TRUE.
-*        for a TimeFrame, meaning that changes to the Unit attribute for
-*        a TimeFrame will result in the TimeFrame being re-mapped within
-*        its enclosing FrameSet in order to reflect the change in units
-c        (see astSetActiveUnit function for further information).
-f        (see AST_SETACTIVEUNIT routine for further information).
-*     FluxFrame
-*        The FluxFrame class supports the following System values and
-*        associated systems for measuring observed value:
-*
-*        - "FLXDN": Flux per unit frequency (W/m^2/Hz)
-*        - "FLXDNW": Flux per unit wavelength (W/m^2/Angstrom)
-*        - "SFCBR": Surface brightness in frequency units (W/m^2/Hz/arcmin**2)
-*        - "SFCBRW": Surface brightness in wavelength units (W/m^2/Angstrom/arcmin**2)
-*
-*        The above lists specified the default units for each System. If an 
-*        explicit value is set for the Unit attribute but no value is set 
-*        for System, then the default System value is determined by the Unit 
-*        string (if the units are not appropriate for describing any of the 
-*        supported Systems then an error will be reported when an attempt is 
-*        made to access the System value). If no value has been specified for
-*        either Unit or System, then System=FLXDN and Unit=W/m^2/Hz are
-*        used.
-*att--
-*/
-/* Clear the System value by setting it to AST__BADSYSTEM. */
-astMAKE_CLEAR(Frame,System,system,AST__BADSYSTEM)
-
-/* Provide a default coordinate system of AST__CART. */
-astMAKE_GET(Frame,System,AstSystemType,AST__BADSYSTEM,(
-            ( this->system == AST__BADSYSTEM ) ? AST__CART : this->system ) )
-
-/* Validate the System value being set and retain the original if the
-   supplied value is not recognized. */
-astMAKE_SET(Frame,System,AstSystemType,system,(
-           (astValidateSystem( this, value, "astSetSystem" ) != AST__BADSYSTEM) ?
-            value : this->system ))
-
-/* The System value is set if it is not AST__BADSYSTEM. */
-astMAKE_TEST(Frame,System,( this->system != AST__BADSYSTEM ))
-
-/*
-*att++
-*  Name:
-*     Title
-
-*  Purpose:
-*     Frame title.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute holds a string which is used as a title in (e.g.)
-*     graphical output to describe the coordinate system which a Frame
-*     represents. Examples might be "Detector Coordinates" or
-*     "Galactic Coordinates".
-*
-*     If a Title value has not been set for a Frame, then a suitable
-*     default is supplied, depending on the class of the Frame.
-
-*  Applicability:
-*     Frame
-*        The default supplied by the Frame class is "<n>-d coordinate
-*        system", where <n> is the number of Frame axes (Naxes
-*        attribute).
-*     CmpFrame
-*        The CmpFrame class re-defines the default Title value to be
-*        "<n>-d compound coordinate system", where <n> is the number
-*        of CmpFrame axes (Naxes attribute).
-*     FrameSet
-*        The Title attribute of a FrameSet is the same as that of its
-*        current Frame (as specified by the Current attribute).
-
-*  Notes:
-*     - A Frame's Title is intended purely for interpretation by human
-*     readers and not by software.
-*att--
-*/
-/* Clear the Title value by freeing the allocated memory and assigning
-   a NULL pointer. */
-astMAKE_CLEAR(Frame,Title,title,astFree( this->title ))
-
-/* If the Title value is not set, write a default based on the number of Frame
-   axes into the static "title_buff" buffer, and return a pointer to this
-   buffer. */
-astMAKE_GET(Frame,Title,const char *,NULL,( this->title ?
-                                            this->title : GetDefaultTitle( this, status ) ))
-
-/* Set a Title value by freeing any previously allocated memory, allocating
-   new memory, storing the string and saving the pointer to the copy. */
-astMAKE_SET(Frame,Title,const char *,title,astStore( this->title, value,
-                                           strlen( value ) + (size_t) 1 ))
-
-/* The Title value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Frame,Title,( this->title != NULL ))
-
-/*
-*att++
-*  Name:
-*     ObsLat
-
-*  Purpose:
-*     The geodetic latitude of the observer 
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the geodetic latitude of the observer, in
-*     degrees, relative to the IAU 1976 reference ellipsoid. The basic Frame 
-*     class makes no use of this attribute, but specialised subclasses of 
-*     Frame may use it. For instance, the SpecFrame, SkyFrame and TimeFrame 
-*     classes use it. The default value is zero.
-*
-*     The value is stored internally in radians, but is converted to and 
-*     from a degrees string for access. Some example input formats are: 
-*     "22:19:23.2", "22 19 23.2", "22:19.387", "22.32311", "N22.32311", 
-*     "-45.6", "S45.6". As indicated, the sign of the latitude can 
-*     optionally be indicated using characters "N" and "S" in place of the 
-*     usual "+" and "-". When converting the stored value to a string, the 
-*     format "[s]dd:mm:ss.ss" is used, when "[s]" is "N" or "S".
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-*     SpecFrame
-*        Together with the ObsLon, Epoch, RefRA and RefDec attributes, 
-*        it defines the Doppler shift introduced by the observers diurnal 
-*        motion around the earths axis, which is needed when converting to 
-*        or from the topocentric standard of rest. The maximum velocity
-*        error which can be caused by an incorrect value is 0.5 km/s. The 
-*        default value for the attribute is zero.
-*     TimeFrame
-*        Together with the ObsLon attribute, it is used when converting
-*        between certain time scales (TDB, TCB, LMST, LAST)
-
-*att--
-*/
-/* The geodetic latitude of the observer (radians). Clear the ObsLat value by 
-   setting it to AST__BAD, returning zero as the default value. Any value is 
-   acceptable. */
-astMAKE_CLEAR(Frame,ObsLat,obslat,AST__BAD)
-astMAKE_GET(Frame,ObsLat,double,0.0,((this->obslat!=AST__BAD)?this->obslat:0.0))
-astMAKE_SET(Frame,ObsLat,double,obslat,value)
-astMAKE_TEST(Frame,ObsLat,(this->obslat!=AST__BAD))
-
-
-/*
-*att++
-*  Name:
-*     ObsAlt
-
-*  Purpose:
-*     The geodetic altitude of the observer 
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the geodetic altitude of the observer, in
-*     metres, relative to the IAU 1976 reference ellipsoid. The basic Frame 
-*     class makes no use of this attribute, but specialised subclasses of 
-*     Frame may use it. For instance, the SpecFrame, SkyFrame and TimeFrame 
-*     classes use it. The default value is zero.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-*     SpecFrame
-*        Together with the ObsLon, Epoch, RefRA and RefDec attributes, 
-*        it defines the Doppler shift introduced by the observers diurnal 
-*        motion around the earths axis, which is needed when converting to 
-*        or from the topocentric standard of rest. The maximum velocity
-*        error which can be caused by an incorrect value is 0.5 km/s. The 
-*        default value for the attribute is zero.
-*     TimeFrame
-*        Together with the ObsLon attribute, it is used when converting
-*        between certain time scales (TDB, TCB, LMST, LAST)
-
-*att--
-*/
-/* The geodetic altitude of the observer (metres). Clear the ObsAlt value by 
-   setting it to AST__BAD, returning zero as the default value. Any value is 
-   acceptable. */
-astMAKE_CLEAR(Frame,ObsAlt,obsalt,AST__BAD)
-astMAKE_GET(Frame,ObsAlt,double,0.0,((this->obsalt!=AST__BAD)?this->obsalt:0.0))
-astMAKE_SET(Frame,ObsAlt,double,obsalt,value)
-astMAKE_TEST(Frame,ObsAlt,(this->obsalt!=AST__BAD))
-
-
-/*
-*att++
-*  Name:
-*     ObsLon
-
-*  Purpose:
-*     The geodetic longitude of the observer 
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the geodetic (or equivalently, geocentric)
-*     longitude of the observer, in degrees, measured positive eastwards. 
-*     See also attribute ObsLat. The basic Frame class makes no use of this 
-*     attribute, but specialised subclasses of Frame may use it. For instance, 
-*     the SpecFrame, SkyFrame and TimeFrame classes use it. The default value
-*     is zero.
-*
-*     The value is stored internally in radians, but is converted to and 
-*     from a degrees string for access. Some example input formats are: 
-*     "155:19:23.2", "155 19 23.2", "155:19.387", "155.32311", "E155.32311", 
-*     "-204.67689", "W204.67689". As indicated, the sign of the longitude can 
-*     optionally be indicated using characters "E" and "W" in place of the 
-*     usual "+" and "-". When converting the stored value to a string, the 
-*     format "[s]ddd:mm:ss.ss" is used, when "[s]" is "E" or "W" and the 
-*     numerical value is chosen to be less than 180 degrees.
-
-*  Applicability:
-*     Frame
-*        All Frames have this attribute.
-*     SpecFrame
-*        Together with the ObsLon, Epoch, RefRA and RefDec attributes, 
-*        it defines the Doppler shift introduced by the observers diurnal 
-*        motion around the earths axis, which is needed when converting to 
-*        or from the topocentric standard of rest. The maximum velocity
-*        error which can be caused by an incorrect value is 0.5 km/s. The 
-*        default value for the attribute is zero.
-*     TimeFrame
-*        Together with the ObsLon attribute, it is used when converting
-*        between certain time scales (TDB, TCB, LMST, LAST)
-
-*att--
-*/
-/* The geodetic longitude of the observer (radians). Clear the ObsLon value by 
-   setting it to AST__BAD, returning zero as the default value. Any value is 
-   acceptable. */
-astMAKE_CLEAR(Frame,ObsLon,obslon,AST__BAD)
-astMAKE_GET(Frame,ObsLon,double,0.0,((this->obslon!=AST__BAD)?this->obslon:0.0))
-astMAKE_SET(Frame,ObsLon,double,obslon,value)
-astMAKE_TEST(Frame,ObsLon,(this->obslon!=AST__BAD))
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Frame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Frame objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstFrame *in;                 /* Pointer to input Frame */
-   AstFrame *out;                /* Pointer to output Frame */
-   int axis;                     /* Loop counter for axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Frames. */
-   in = (AstFrame *) objin;
-   out = (AstFrame *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Frame. */
-   out->axis = NULL;
-   out->domain = NULL;
-   out->perm = NULL;
-   out->title = NULL;
-
-/* If necessary, allocate memory in the output Frame and store a copy of the
-   input Title and Domain strings. */
-   if ( in->title ) out->title = astStore( NULL, in->title,
-                                           strlen( in->title ) + (size_t) 1 );
-   if ( in->domain ) out->domain = astStore( NULL, in->domain,
-                                             strlen( in->domain ) +
-                                             (size_t) 1 );
-
-/* Allocate memory to hold the output Frame's Axis object pointers and its axis
-   permutation array. */
-   out->axis = astMalloc( sizeof( AstAxis * ) * (size_t) in->naxes );
-   out->perm = astMalloc( sizeof( int ) * (size_t) in->naxes );
-
-/* Make a copy of each of the input Frame's Axis objects, storing the pointer
-   to each new Axis in the memory just allocated. Also copy the axis
-   permutation array. */
-   if ( astOK ) {
-      for ( axis = 0; axis < in->naxes; axis++ ) {
-         out->axis[ axis ] = astCopy( in->axis[ axis ] );
-         out->perm[ axis ] = in->perm[ axis ];
-      }
-
-/* If an error occurred while copying the Axis objects, then loop through the
-   resulting array of pointers and make sure that all of them are properly
-   annulled. */
-      if ( !astOK ) {
-         for ( axis = 0; axis < in->naxes; axis++ ) {
-            out->axis[ axis ] = astAnnul( out->axis[ axis ] );
-         }
-      }
-   }
-
-/* If an error occurred, free any allocated memory. */
-   if ( !astOK ) {
-      out->axis = astFree( out->axis );
-      out->domain = astFree( out->domain );
-      out->perm = astFree( out->perm );
-      out->title = astFree( out->title );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Frame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Frame objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstFrame *this;               /* Pointer to Frame */
-   int axis;                     /* Loop counter for Frame axes */
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) obj;
-
-/* Free the memory used for the Title and Domain strings if necessary. */
-   this->title = astFree( this->title );
-   this->domain = astFree( this->domain );
-
-/* If memory has been allocated to store pointers to the Frame's Axis objects,
-   annul each of these pointers and then free the memory. */
-   if ( this->axis ) {
-      for ( axis = 0; axis < this->naxes; axis++ ) {
-         this->axis[ axis ] = astAnnul( this->axis[ axis ] );
-      }
-      this->axis = astFree( this->axis );
-   }
-
-/* Free memory used for the axis permutation array if necessary. */
-   this->perm = astFree( this->perm );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Frame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Frame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150          /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis */
-   AstFrame *cfrm;               /* Pointer to FrameSet's current Frame */
-   AstFrame *this;               /* Pointer to the Frame structure */
-   AstSystemType system;         /* System code */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keywords */
-   const char *sval;             /* Pointer to string value */
-   const char *lab;              /* Pointer to unit label */
-   const int *perm;              /* Pointer to axis permutation array */
-   double dval;                  /* Double attibute value */
-   int *invperm;                 /* Pointer to inverse permutation array */
-   int axis;                     /* Loop counter for Frame axes */
-   int bessyr;                   /* Format as Besselian years (else Julian) */
-   int digits_set;               /* Digits set explicitly for any axis? */
-   int full;                     /* Full attribute value */
-   int full_set;                 /* Full attribute set? */
-   int helpful;                  /* Helpful to show value even if not set? */
-   int isFrame;                  /* Is this a simple Frame? */
-   int ival;                     /* Integer value */
-   int naxes;                    /* Number of Frame axes */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Frame structure. */
-   this = (AstFrame *) this_object;
-
-/* Determine the number of Frame axes and a pointer to the Frame's
-   axis permutation array (using methods, to allow for any over-ride
-   by a derived class). */
-   naxes = astGetNaxes( this );
-   perm = astGetPerm( this );
-
-/* Some default attribute values are not helpful for a simple Frame. Note
-   if this is a simple Frame, or if it is a FrameSet with a simple Frame
-   as its current Frame., or if it is a CmpFrame. */
-   if( !strcmp( astGetClass( this ), "Frame" ) ) {
-      isFrame = 1;
-   } else if( astIsAFrameSet( this ) ) {
-      cfrm = astGetFrame( (AstFrameSet *) this, AST__CURRENT );
-      isFrame = !strcmp( astGetClass( cfrm ), "Frame" );
-      cfrm = astAnnul( cfrm );
-   } else if( astIsACmpFrame( this ) ) {
-      isFrame = 1;
-   } else {
-      isFrame = 0;
-   }
-
-/* Allocate memory to hold an inverse axis permutation array and
-   generate this array from the forward permutation values. This will
-   be used to determine which axis should be enquired about (using
-   possibly over-ridden methods) to obtain data to correspond with a
-   particular internal value (i.e. instance variable) relating to an
-   axis. This step is needed so that the effect of any axis
-   permutation can be un-done before values are written out, as output
-   values are written by this function in un-permuted order. */
-   invperm = astMalloc( sizeof( int ) * (size_t) naxes );
-   if ( astOK ) {
-      for ( axis = 0; axis < naxes; axis++ ) invperm[ perm[ axis ] ] = axis;
-
-/* Write out values representing the instance variables for the Frame
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Title. */
-/* ------ */
-      set = TestTitle( this, status );
-      sval = set ? GetTitle( this, status ) : astGetTitle( this );
-      astWriteString( channel, "Title", set, 1, sval,
-                      "Title of coordinate system" );
-
-/* Naxes. */
-/* ------ */
-      set = ( this->naxes != 0 );
-      ival = set ? this->naxes : naxes;
-      astWriteInt( channel, "Naxes", set, 1, ival,
-                   "Number of coordinate axes" );
-
-/* Domain. */
-/* ------- */
-      set = TestDomain( this, status );
-      sval = set ? GetDomain( this, status ) : astGetDomain( this );
-
-/* Don't show an un-set Domain value if it is blank. */
-      helpful = ( sval && *sval );
-      astWriteString( channel, "Domain", set, helpful, sval,
-                      "Coordinate system domain" );
-
-/* Epoch. */
-/* ------ */
-      set = TestEpoch( this, status );
-      dval = set ? GetEpoch( this, status ) : astGetEpoch( this );
-
-/* Convert MJD to Besselian or Julian years, depending on the value. */
-      bessyr = ( dval < palSlaEpj2d( 1984.0 ) );
-      dval = bessyr ? palSlaEpb( dval ) : palSlaEpj( dval );
-      astWriteDouble( channel, "Epoch", set, !isFrame, dval,
-                      bessyr ? "Besselian epoch of observation" :
-                               "Julian epoch of observation" );
-
-/* Label. */
-/* ------ */
-/* This, and some other, attributes are stored internally by the
-   Frame's Axis objects, but are "re-packaged" by the Frame class to
-   appear as Frame attributes. We treat them here like Frame
-   attributes that are "un-set". There is a Label value for each Frame
-   axis. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-
-/* The inverse axis permutation array is used to obtain the axis index
-   for astGetLabel. This reverses the effect of the Frame's axis
-   permutation array and yields a default value appropriate to the
-   axis with internal index "axis". */
-         sval = astGetLabel( this, invperm[ axis ] );
-
-/* Create keyword and comment strings appropriate to each axis
-   (converting to 1-based axis numbering) and write out the Label
-   values. */
-         (void) sprintf( key, "Lbl%d", axis + 1 );
-         (void) sprintf( comment, "Label for axis %d", axis + 1 );
-         astWriteString( channel, key, 0, 1, sval, comment );
-      }
-
-/* Symbol. */
-/* ------- */
-/* There is a Symbol value for each Frame axis. These are handled in
-   the same way as the Label values. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         sval = astGetSymbol( this, invperm[ axis ] );
-         (void) sprintf( key, "Sym%d", axis + 1 );
-         (void) sprintf( comment, "Symbol for axis %d", axis + 1 );
-         astWriteString( channel, key, 0, 0, sval, comment );
-      }
-
-/* System. */
-/* ------- */
-      set = TestSystem( this, status );
-      system = set ? GetSystem( this, status ) : astGetSystem( this );
-
-/* If set, convert explicitly to a string for the external representation. */
-      if ( set ) {
-         if ( astOK ) {
-            sval = astSystemString( this, system );
-
-/* Report an error if the System value was not recognised. */
-            if ( !sval ) {
-               astError( AST__SCSIN,
-                        "astWrite(%s): Corrupt %s contains invalid "
-                        "System identification code (%d).", status,
-                        astGetClass( channel ), astGetClass( this ),
-                        (int) system );
-            }
-         }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-      } else {
-         sval = astGetAttrib( this_object, "system" );
-      }
-
-/* Write out the value. */
-      astWriteString( channel, "System", set, !isFrame, sval,
-                      "Coordinate system type" );
-
-/* AlignSystem. */
-/* ------------ */
-      set = TestAlignSystem( this, status );
-      system = set ? GetAlignSystem( this, status ) : astGetAlignSystem( this );
-
-/* If set, convert explicitly to a string for the external representation. */
-      if ( set ) {
-         if ( astOK ) {
-            sval = astSystemString( this, system );
-
-/* Report an error if the AlignSystem value was not recognised. */
-            if ( !sval ) {
-               astError( AST__SCSIN,
-                        "astWrite(%s): Corrupt %s contains invalid "
-                        "AlignSystem identification code (%d).", status,
-                        astGetClass( channel ), astGetClass( this ),
-                        (int) system );
-            }
-         }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-      } else {
-         sval = astGetAttrib( this_object, "alignsystem" );
-      }
-
-/* Write out the value. */
-      astWriteString( channel, "AlSys", set, 0, sval,
-                      "Alignment coordinate system" );
-
-/* Unit. */
-/* ----- */
-/* There is a Unit value for each axis. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         sval = astGetUnit( this, invperm[ axis ] );
-
-/* Get any label associated with the unit string. */
-         lab = astUnitLabel( sval );
-
-/* Construct a comment including the above label (but only if it is not
-   the same as the unit string) . */
-         if( lab && strcmp( lab, sval ) ) {
-            (void) sprintf( comment, "Units for axis %d (%s)", axis + 1, lab );
-         } else {
-            (void) sprintf( comment, "Units for axis %d", axis + 1 );
-         }
-
-/* Show the Unit value if it is not blank. */
-         helpful = ( sval && *sval );
-         (void) sprintf( key, "Uni%d", axis + 1 );
-         astWriteString( channel, key, 0, helpful, sval, comment );
-      }
-
-/* Digits. */
-/* ------- */
-/* There is a Digits value for each axis... */
-      digits_set = 0;
-      for ( axis = 0; axis < naxes; axis++ ) {
-
-/* Obtain the axis Digits value, using the Frame's Digits value as a
-   default. */
-         ax = astGetAxis( this, invperm[ axis ] );
-         set = astTestAxisDigits( ax );
-         ival = set ? astGetAxisDigits( ax ) : astGetDigits( this );
-         ax = astAnnul( ax );
-
-/* Show the value if it is set for the axis (i.e. if it differs from
-   the default for the whole Frame) and note if any such value is
-   set. */
-         helpful = set;
-         if ( set ) digits_set = 1;
-         (void) sprintf( key, "Dig%d", axis + 1 );
-         (void) sprintf( comment, "Individual precision for axis %d",
-                         axis + 1 );
-         astWriteInt( channel, key, 0, helpful, ival, comment );
-      }
-
-/* There is also a Digits value for the Frame as a whole... */
-      set = TestDigits( this, status );
-
-/* Show the value (even if not set) if an explicit Digits value has
-   been set for any axis (above). */
-      helpful = digits_set;
-      ival = set ? GetDigits( this, status ) : astGetDigits( this );
-      astWriteInt( channel, "Digits", set, helpful, ival,
-                   "Default formatting precision" );
-
-/* Format. */
-/* ------- */
-/* There is a Format value for each axis. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         sval = astGetFormat( this, invperm[ axis ] );
-
-/* Show the Format value if the Digits value is set for an individual
-   axis. */
-         ax = astGetAxis( this, invperm[ axis ] );
-         helpful = astTestAxisDigits( ax );
-         ax = astAnnul( ax );
-         (void) sprintf( key, "Fmt%d", axis + 1 );
-         (void) sprintf( comment, "Format specifier for axis %d", axis + 1 );
-         astWriteString( channel, key, 0, helpful, sval, comment );
-      }
-
-/* Direction. */
-/* ---------- */
-/* There is a Direction value for each axis. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         ival = astGetDirection( this, invperm[ axis ] );
-
-/* Show the value if it is zero. */
-         helpful = ( ival == 0 );
-         (void) sprintf( key, "Dir%d", axis + 1 );
-         (void) sprintf( comment,
-                         ival ? "Plot axis %d in conventional direction" :
-                                "Plot axis %d in reverse direction",
-                         axis + 1 );
-         astWriteInt( channel, key, 0, helpful, ival, comment );
-      }
-
-/* Bottom. */
-/* ------- */
-/* There is a Bottom value for each axis. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         dval = astGetBottom( this, invperm[ axis ] );
-
-/* Show the value if it is zero. */
-         helpful = ( dval != -DBL_MAX );
-         (void) sprintf( key, "Bot%d", axis + 1 );
-         astWriteDouble( channel, key, 0, helpful, dval, "Lowest legal axis value");
-      }
-
-/* Top. */
-/* ------- */
-/* There is a Top value for each axis. */
-      for ( axis = 0; axis < naxes; axis++ ) {
-         dval = astGetTop( this, invperm[ axis ] );
-
-/* Show the value if it is zero. */
-         helpful = ( dval != DBL_MAX );
-         (void) sprintf( key, "Top%d", axis + 1 );
-         astWriteDouble( channel, key, 0, helpful, dval, "Highest legal axis value");
-      }
-
-/* PreserveAxes. */
-/* ------------- */
-      set = TestPreserveAxes( this, status );
-      ival = set ? GetPreserveAxes( this, status ) : astGetPreserveAxes( this );
-      astWriteInt( channel, "Presrv", set, 0, ival,
-                   ival ? "Preserve target axes" :
-                          "Don't preserve target axes" );
-
-/* Permute. */
-/* -------- */
-      set = TestPermute( this, status );
-      ival = set ? GetPermute( this, status ) : astGetPermute( this );
-      astWriteInt( channel, "Permut", set, 0, ival,
-                   ival ? "Axes may be permuted to match" :
-                          "Axes may not be permuted match" );
-
-/* MinAxes. */
-/* -------- */
-      set = TestMinAxes( this, status );
-      ival = set ? GetMinAxes( this, status ) : astGetMinAxes( this );
-      astWriteInt( channel, "MinAx", set, 0, ival,
-                   "Minimum number of axes to match" );
-
-/* MaxAxes. */
-/* -------- */
-      set = TestMaxAxes( this, status );
-      ival = set ? GetMaxAxes( this, status ) : astGetMaxAxes( this );
-      astWriteInt( channel, "MaxAx", set, 0, ival,
-                   "Maximum number of axes to match" );
-
-/* MatchEnd. */
-/* --------- */
-      set = TestMatchEnd( this, status );
-      ival = set ? GetMatchEnd( this, status ) : astGetMatchEnd( this );
-      astWriteInt( channel, "MchEnd", set, 0, ival,
-                   ival ? "Match final target axes" :
-                          "Match initial target axes" );
-
-/* ObsLat. */
-/* ------- */
-   set = TestObsLat( this, status );
-   dval = set ? GetObsLat( this, status ) : astGetObsLat( this );
-   astWriteDouble( channel, "ObsLat", set, 0, dval, "Observers geodetic latitude (rads)" );
-
-/* ObsLon. */
-/* ------- */
-   set = TestObsLon( this, status );
-   dval = set ? GetObsLon( this, status ) : astGetObsLon( this );
-   astWriteDouble( channel, "ObsLon", set, 0, dval, "Observers geodetic longitude (rads)" );
-
-/* ObsAlt. */
-/* ------- */
-   set = TestObsAlt( this, status );
-   dval = set ? GetObsAlt( this, status ) : astGetObsAlt( this );
-   astWriteDouble( channel, "ObsAlt", set, 0, dval, "Observers geodetic altitude (metres)" );
-
-/* Dut1*/
-/* ---- */
-   set = TestDut1( this, status );
-   dval = set ? GetDut1( this, status ) : astGetDut1( this );
-   astWriteDouble( channel, "Dut1", set, 0, dval, "UT1-UTC in seconds" );
-
-
-/* ActiveUnit. */
-/* ----------- */
-      if( astTestActiveUnit( this ) ) {
-         ival = astGetActiveUnit( this );
-         astWriteInt( channel, "ActUnt", 1, 0, ival,
-                      ival ? "Unit strings affects alignment" :
-                             "Unit strings do not affect alignment" );
-      }
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Write out the axis permutation array value for each axis,
-   converting to 1-based axis numbering. */
-      for ( axis = 0; axis < this->naxes; axis++ ) {
-         set = ( this->perm[ axis ] != axis );
-         ival = this->perm[ axis ] + 1;
-
-/* Create a keyword and comment appropriate to the axis. */
-         (void) sprintf( key, "Prm%d", axis + 1 );
-         if ( set ) {
-            (void) sprintf( comment,
-                            "Axis %d permuted to use internal axis %d",
-                            axis + 1, ival );
-         } else {
-            (void) sprintf( comment, "Axis %d not permuted", axis + 1 );
-         }
-         astWriteInt( channel, key, set, 0, ival, comment );
-      }
-
-/* Axis Objects. */
-/* ------------- */
-/* Temporarily set the Channel's Full attribute to -1 (unless it is +1
-   to start with), remembering the original setting. This prevents any
-   unnecessary "un-set" Axis values being output that would otherwise
-   simply duplicate the Frame's attributes which have already been
-   written. "Set" Axis values are still written, however (and all
-   values are written if Full is set to 1). */
-      full_set = astTestFull( channel );
-      full = astGetFull( channel );
-      if ( full <= 0 ) astSetFull( channel, -1 );
-
-/* Handle each axis in turn. */
-      for ( axis = 0; axis < this->naxes; axis++ ) {
-
-/* Create a keyword and comment appropriate to the axis (converting to
-   1-based axis numbering). */
-         (void) sprintf( key, "Ax%d", axis + 1 );
-         (void) sprintf( comment, "Axis number %d", axis + 1 );
-
-/* Write out the axis Object description. */
-         astWriteObject( channel, key, 1, 0, this->axis[ axis ], comment );
-      }
-
-/* Restore the Channel's original Full attribute setting. */
-      if ( full_set ) {
-         astSetFull( channel, full );
-      } else {
-         astClearFull( channel );
-      }
-
-/* Free the inverse axis permutation array. */
-      invperm = astFree( invperm );
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFrame and astCheckFrame functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Frame,Mapping)
-astMAKE_CHECK(Frame)
-
-AstFrame *astFrame_( int naxes, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astFrame
-
-*  Purpose:
-*     Create a Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstFrame *astFrame( int naxes, const char *options, int *status, ... )
-
-*  Class Membership:
-*     Frame constructor.
-
-*  Description:
-*     This function creates a new Frame and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     naxes
-*        The number of Frame axes.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Frame. The syntax used is the same as
-*        for the astSet method and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of arguments may follow it in order to
-*        supply values to be substituted for these specifiers. The
-*        rules for supplying these are identical to those for the
-*        astSet method (and for the C "printf" function).
-
-*  Returned Value:
-*     A pointer to the new Frame.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic Frame constructor which is
-*     available via the protected interface to the Frame class.  A
-*     public interface is provided by the astFrameId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *new;                /* Pointer to new Frame */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the Frame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitFrame( NULL, sizeof( AstFrame ), !class_init, &class_vtab,
-                       "Frame", naxes );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Frame's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Frame. */
-   return new;
-}
-
-AstFrame *astInitFrame_( void *mem, size_t size, int init,
-                         AstFrameVtab *vtab, const char *name,
-                         int naxes, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFrame
-
-*  Purpose:
-*     Initialise a Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstFrame *astInitFrame( void *mem, size_t size, int init,
-*                             AstFrameVtab *vtab, const char *name,
-*                             int naxes )
-
-*  Class Membership:
-*     Frame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Frame object. It allocates memory (if necessary) to accommodate
-*     the Frame plus any additional data associated with the derived class.
-*     It then initialises a Frame structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Frame at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Frame is to be created. This
-*        must be of sufficient size to accommodate the Frame data
-*        (sizeof(Frame)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Frame (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Frame
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Frame's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Frame.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     naxes
-*        The number of Frame axes.
-
-*  Returned Value:
-*     A pointer to the new Frame.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *new;                /* Pointer to new Frame */
-   int axis;                     /* Loop counter for Frame axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitFrameVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the number of axes for validity, reporting an error if necessary. */
-   if ( naxes < 0 ) {
-      astError( AST__NAXIN, "astInitFrame(%s): Number of axes (%d) is "
-                "invalid - this number should not be negative.", status, name, naxes );
-
-/* Initialise a Mapping structure (the parent class) as the first
-   component within the Frame structure, allocating memory if
-   necessary. Set the number of input/output coordinates to zero (the
-   astGetNin and astGetNout methods are over-ridden by the Frame class
-   to provide values for these that are equal to the number of Frame
-   axes). */
-   } else {
-      new = (AstFrame *) astInitMapping( mem, size, 0,
-                                         (AstMappingVtab *) vtab, name,
-                                         0, 0, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the Frame data. */
-/* ----------------------------- */
-/* Set the number of Frame axes. */
-         new->naxes = naxes;
-
-/* Initialise all attributes to their "undefined" values. */
-         new->digits = -INT_MAX;
-         new->domain = NULL;
-         new->epoch = AST__BAD;
-         new->match_end = -INT_MAX;
-         new->max_axes = -INT_MAX;
-         new->min_axes = -INT_MAX;
-         new->permute = -INT_MAX;
-         new->preserve_axes = -INT_MAX;
-         new->title = NULL;
-         new->system = AST__BADSYSTEM;
-         new->alignsystem = AST__BADSYSTEM;
-         new->active_unit = -INT_MAX;
-         new->obsalt = AST__BAD;
-         new->obslat = AST__BAD;
-         new->obslon = AST__BAD;
-         new->dut1 = AST__BAD;
-         new->flags = 0;
-
-/* Allocate memory to store pointers to the Frame's Axis objects and to store
-   its axis permutation array. */
-         new->axis = astMalloc( sizeof( AstAxis * ) * (size_t) naxes );
-         new->perm = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* Create a new Axis object to describe each axis of the Frame and store the
-   resulting pointers in the memory allocated above. Also initialise the
-   axis permutation array so that the axes appear in their natural order. */
-         if ( astOK ) {
-            for ( axis = 0; axis < naxes; axis++ ) {
-               new->axis[ axis ] = astAxis( "", status );
-               new->perm[ axis ] = axis;
-	    }
-
-/* If an error occurred while creating the Axis objects, scan through the array
-   of pointers to them again to ensure that they are all correctly annulled. */
-            if ( !astOK ) {
-               for ( axis = 0; axis < naxes; axis++ ) {
-                  new->axis[ axis ] = astAnnul( new->axis[ axis ] );
-   	       }
-	    }
-	 }
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstFrame *astLoadFrame_( void *mem, size_t size,
-                         AstFrameVtab *vtab, const char *name,
-                         AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadFrame
-
-*  Purpose:
-*     Load a Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstFrame *astLoadFrame( void *mem, size_t size,
-*                              AstFrameVtab *vtab, const char *name,
-*                              AstChannel *channel )
-
-*  Class Membership:
-*     Frame loader.
-
-*  Description:
-*     This function is provided to load a new Frame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Frame structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Frame at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Frame is to be loaded.
-*        This must be of sufficient size to accommodate the Frame data
-*        (sizeof(Frame)) plus any data used by derived classes. If a
-*        value of NULL is given, this function will allocate the
-*        memory itself using the "size" parameter to determine its
-*        size.
-*     size
-*        The amount of memory used by the Frame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Frame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Frame. If this is NULL, a pointer to
-*        the (static) virtual function table for the Frame class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Frame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Frame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstFrame *new;                /* Pointer to the new Frame */
-   char *sval;                   /* Pointer to string value */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keywords */
-   double dval;                  /* DOuble attribute value */
-   int axis;                     /* Loop counter for axes */
-   int ival;                     /* Integer value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Frame. In this case the
-   Frame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstFrame );
-      vtab = &class_vtab;
-      name = "Frame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Frame. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Assign values for transient components that are not included in the
-   Frame dump */
-   new->flags = 0;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Frame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Naxes. */
-/* ------ */
-/* Obtain the number of Frame axes and allocate memory for the arrays
-   which hold axis information. */
-      new->naxes = astReadInt( channel, "naxes", 0 );
-      if ( new->naxes < 0 ) new->naxes = 0;
-      new->perm = astMalloc( sizeof( int ) * (size_t) new->naxes );
-      new->axis = astMalloc( sizeof( AstAxis * ) * (size_t) new->naxes );
-
-/* If an error occurred, ensure that any allocated memory is freed. */
-      if ( !astOK ) {
-         new->perm = astFree( new->perm );
-         new->axis = astFree( new->axis );
-
-/* Otherwise, initialise the array of Axis pointers. */
-      } else {
-         for ( axis = 0; axis < new->naxes; axis++ ) new->axis[ axis ] = NULL;
-
-/* Now obtain those input values which are required for each axis... */
-         for ( axis = 0; axis < new->naxes; axis++ ) {
-
-/* Axis object. */
-/* ------------ */
-/* This must be read first, so that it can hold the other axis values
-   obtained below. */
-
-/* Create a keyword appropriate to this axis. */
-            (void) sprintf( key, "ax%d", axis + 1 );
-
-/* Read the Axis object. If none was read, provide a default Axis
-   instead. */
-            new->axis[ axis ] = astReadObject( channel, key, NULL );
-            if ( !new->axis[ axis ] ) new->axis[ axis ] = astAxis( "", status );
-
-/* Label. */
-/* ------ */
-/* Read the Label string for each axis. If a value is obtained, use
-   it to set the Label attribute for the axis. Free the memory holding
-   the string when no longer needed. */
-            (void) sprintf( key, "lbl%d", axis + 1 );
-            sval = astReadString( channel, key, NULL );
-            if ( sval ) {
-               astSetAxisLabel( new->axis[ axis ], sval );
-               sval = astFree( sval );
-            }
-
-/* Symbol. */
-/* ------- */
-            (void) sprintf( key, "sym%d", axis + 1 );
-            sval = astReadString( channel, key, NULL );
-            if ( sval ) {
-               astSetAxisSymbol( new->axis[ axis ], sval );
-               sval = astFree( sval );
-            }
-
-/* Format. */
-/* ------- */
-            (void) sprintf( key, "fmt%d", axis + 1 );
-            sval = astReadString( channel, key, NULL );
-            if ( sval ) {
-               astSetAxisFormat( new->axis[ axis ], sval );
-               sval = astFree( sval );
-            }
-
-/* Unit. */
-/* ----- */
-            (void) sprintf( key, "uni%d", axis + 1 );
-            sval = astReadString( channel, key, NULL );
-            if ( sval ) {
-               astSetAxisUnit( new->axis[ axis ], sval );
-               sval = astFree( sval );
-            }
-
-/* Direction. */
-/* ---------- */
-            (void) sprintf( key, "dir%d", axis + 1 );
-            ival = astReadInt( channel, key, -INT_MAX );
-            if ( ival != -INT_MAX ) {
-               astSetAxisDirection( new->axis[ axis ], ival );
-            }
-
-/* Top. */
-/*----- */
-            (void) sprintf( key, "top%d", axis + 1 );
-            dval = astReadDouble( channel, key, AST__BAD );
-            if ( dval != AST__BAD ) {
-               astSetAxisTop( new->axis[ axis ], dval );
-            }
-
-/* Bottom. */
-/*----- -- */
-            (void) sprintf( key, "bot%d", axis + 1 );
-            dval = astReadDouble( channel, key, AST__BAD );
-            if ( dval != AST__BAD ) {
-               astSetAxisBottom( new->axis[ axis ], dval );
-            }
-
-/* Digits. */
-/* ------- */
-            (void) sprintf( key, "dig%d", axis + 1 );
-            ival = astReadInt( channel, key, -INT_MAX );
-            if ( ival != -INT_MAX ) {
-               astSetAxisDigits( new->axis[ axis ], ival );
-            }
-
-/* Axis permutation array. */
-/* ----------------------- */
-/* Convert from 1-based to zero-based axis numbering at this
-   point. The default is the "un-permuted" value. */
-            sprintf( key, "prm%d", axis + 1 );
-            new->perm[ axis ] = astReadInt( channel, key, axis + 1 ) - 1;
-
-/* Quit looping if an error occurs. */
-            if ( !astOK ) break;
-         }
-
-/* The remaining values are not associated with particular axes... */
-
-/* Title. */
-/* ------ */
-         new->title = astReadString( channel, "title", NULL );
-
-/* Domain. */
-/* ------- */
-         new->domain = astReadString( channel, "domain", NULL );
-
-/* Epoch. */
-/* ------ */
-/* Interpret this as Besselian or Julian depending on its value. */
-         new->epoch = astReadDouble( channel, "epoch", AST__BAD );
-         if ( TestEpoch( new, status ) ) {
-            SetEpoch( new, ( new->epoch < 1984.0 ) ? palSlaEpb2d( new->epoch ) :
-                                                     palSlaEpj2d( new->epoch ), status );
-         }
-
-/* Digits. */
-/* ------- */
-/* This is the value that applies to the Frame as a whole. */
-         new->digits = astReadInt( channel, "digits", -INT_MAX );
-         if ( TestDigits( new, status ) ) SetDigits( new, new->digits, status );
-
-/* PreserveAxes. */
-/* ------------- */
-         new->preserve_axes = astReadInt( channel, "presrv", -INT_MAX );
-         if ( TestPreserveAxes( new, status ) ) {
-            SetPreserveAxes( new, new->preserve_axes, status );
-         }
-
-/* Permute. */
-/* -------- */
-         new->permute = astReadInt( channel, "permut", -INT_MAX );
-         if ( TestPermute( new, status ) ) SetPermute( new, new->permute, status );
-
-/* MinAxes. */
-/* -------- */
-         new->min_axes = astReadInt( channel, "minax", -INT_MAX );
-         if ( TestMinAxes( new, status ) ) SetMinAxes( new, new->min_axes, status );
-
-/* MaxAxes. */
-/* -------- */
-         new->max_axes = astReadInt( channel, "maxax", -INT_MAX );
-         if ( TestMaxAxes( new, status ) ) SetMaxAxes( new, new->max_axes, status );
-
-/* MatchEnd. */
-/* --------- */
-         new->match_end = astReadInt( channel, "mchend", -INT_MAX );
-         if ( TestMatchEnd( new, status ) ) SetMatchEnd( new, new->match_end, status );
-
-/* ObsLat. */
-/* ------- */
-         new->obslat = astReadDouble( channel, "obslat", AST__BAD );
-         if ( TestObsLat( new, status ) ) SetObsLat( new, new->obslat, status );
-
-/* ObsLon. */
-/* ------- */
-         new->obslon = astReadDouble( channel, "obslon", AST__BAD );
-         if ( TestObsLon( new, status ) ) SetObsLon( new, new->obslon, status );
-
-/* ObsAlt. */
-/* ------- */
-         new->obsalt = astReadDouble( channel, "obsalt", AST__BAD );
-         if ( TestObsAlt( new, status ) ) SetObsAlt( new, new->obsalt, status );
-
-/* Dut1. */
-/* ---- */
-         new->dut1 = astReadDouble( channel, "dut1", AST__BAD );
-         if ( TestDut1( new, status ) ) SetDut1( new, new->dut1, status );
-
-/* ActiveUnit. */
-/* ----------- */
-         new->active_unit = astReadInt( channel, "actunt", -INT_MAX );
-         if ( TestActiveUnit( new, status ) ) SetActiveUnit( new, new->active_unit, status );
-
-/* System. */
-/* ------- */
-/* Set the default and read the external representation as a string. */
-         new->system = AST__BADSYSTEM;
-         sval = astReadString( channel, "system", NULL );
-
-/* If a value was read, convert from a string to a System code. */
-         if ( sval ) {
-            if ( astOK ) {
-               new->system = astSystemCode( new, sval );
-
-/* Report an error if the value wasn't recognised. */
-               if ( new->system == AST__BADSYSTEM ) {
-                  astError( AST__ATTIN,
-                            "astRead(%s): Invalid System description "
-                            "\"%s\".", status, astGetClass( channel ), sval );
-               }
-            }
-
-/* Free the string value. */
-            sval = astFree( sval );
-         }
-
-/* AlignSystem. */
-/* ------------ */
-/* Set the default and read the external representation as a string. */
-         new->alignsystem = AST__BADSYSTEM;
-         sval = astReadString( channel, "alsys", NULL );
-
-/* If a value was read, convert from a string to a System code. */
-         if ( sval ) {
-            if ( astOK ) {
-               new->alignsystem = astSystemCode( new, sval );
-
-/* Report an error if the value wasn't recognised. */
-               if ( new->alignsystem == AST__BADSYSTEM ) {
-                  astError( AST__ATTIN,
-                            "astRead(%s): Invalid AlignSystem description "
-                            "\"%s\".", status, astGetClass( channel ), sval );
-               }
-            }
-
-/* Free the string value. */
-            sval = astFree( sval );
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new Frame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Frame pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-const char *astAbbrev_( AstFrame *this, int axis, const char *fmt,
-                        const char *str1, const char *str2, int *status ) {
-   if ( !astOK ) return str2;
-   return (**astMEMBER(this,Frame,Abbrev))( this, axis, fmt, str1, str2, status );
-}
-int astFields_( AstFrame *this, int axis, const char *fmt, 
-                const char *str, int maxfld, char **fields, 
-                int *nc, double *val, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,Fields))( this, axis, fmt, str, maxfld, fields, nc, val, status );
-}
-void astCheckPerm_( AstFrame *this, const int *perm, const char *method, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,CheckPerm))( this, perm, method, status );
-}
-
-AstPointSet *astResolvePoints_( AstFrame *this, const double point1[], 
-                                const double point2[], AstPointSet *in,
-                                AstPointSet *out, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,ResolvePoints))( this, point1, point2, in, out, status );
-}
-AstLineDef *astLineDef_( AstFrame *this, const double start[2], 
-                             const double end[2], int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,LineDef))( this, start, end, status );
-}
-int astLineCrossing_( AstFrame *this, AstLineDef *l1, AstLineDef *l2,
-                      double **cross, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,LineCrossing))( this, l1, l2, cross, status );
-}
-void astLineOffset_( AstFrame *this, AstLineDef *line, double par, double prp, 
-                     double point[2], int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,LineOffset))( this, line, par, prp, point, status );
-}
-int astLineContains_( AstFrame *this, AstLineDef *l, int def, double *point, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,LineContains))( this, l, def, point, status );
-}
-AstFrameSet *astConvert_( AstFrame *from, AstFrame *to,
-                          const char *domainlist, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(from,Frame,Convert))( from, to, domainlist, status );
-}
-AstFrameSet *astConvertX_( AstFrame *to, AstFrame *from,
-                           const char *domainlist, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(to,Frame,ConvertX))( to, from, domainlist, status );
-}
-double astAngle_( AstFrame *this, const double a[], const double b[],
-                  const double c[], int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Frame,Angle))( this, a, b, c, status );
-}
-int astGetActiveUnit_( AstFrame *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,GetActiveUnit))( this, status );
-}
-int astTestActiveUnit_( AstFrame *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,TestActiveUnit))( this, status );
-}
-void astSetActiveUnit_( AstFrame *this, int value, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,SetActiveUnit))( this, value, status );
-}
-double astDistance_( AstFrame *this,
-                     const double point1[], const double point2[], int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Frame,Distance))( this, point1, point2, status );
-}
-AstFrameSet *astFindFrame_( AstFrame *target, AstFrame *template,
-                            const char *domainlist, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(target,Frame,FindFrame))( target, template, domainlist, status );
-}
-void astMatchAxes_( AstFrame *frm1, AstFrame *frm2, int *axes, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(frm1,Frame,MatchAxes))( frm1, frm2, axes, status );
-}
-void astMatchAxesX_( AstFrame *frm2, AstFrame *frm1, int *axes, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(frm2,Frame,MatchAxesX))( frm2, frm1, axes, status );
-}
-const char *astFormat_( AstFrame *this, int axis, double value, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,Format))( this, axis, value, status );
-}
-double astGap_( AstFrame *this, int axis, double gap, int *ntick, int *status ) {
-   if ( !astOK ) return 0.0;
-   return (**astMEMBER(this,Frame,Gap))( this, axis, gap, ntick, status );
-}
-AstAxis *astGetAxis_( AstFrame *this, int axis, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,GetAxis))( this, axis, status );
-}
-int astGetNaxes_( AstFrame *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,GetNaxes))( this, status );
-}
-const int *astGetPerm_( AstFrame *this, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,GetPerm))( this, status );
-}
-
-
-int astMatch_( AstFrame *this, AstFrame *target,
-               int **template_axes, int **target_axes,
-               AstMapping **map, AstFrame **result, int *status ) {
-
-   AstFrame *super_this;
-   const char *dom;
-   int match;
-
-   if ( !astOK ) return 0;
-
-   match = (**astMEMBER(this,Frame,Match))( this, target,
-                                            template_axes, target_axes,
-                                            map, result, status );
-
-/* If the template ("this") could not be used to probe the target, it may
-   be because the template class is a more specialised form of the target
-   class. E.g. a SkyFrame cannot directly be used to probe a Frame, but a 
-   Frame *can* be used to probe a SkyFrame. This means (for instance),
-   that a basic Frame with Domain FRED cannot be aligned (using astConvert)
-   with a CmpFrame with Domain FRED. This sort of alignment is often
-   useful, so we try now to use the supplied template to probe a modified
-   form of the target that has been cast into the same class as the
-   template. This is only possible if the template class is a sub-class of 
-   the target class. Attempt to do the cast. */
-   if( ! match ) {
-      super_this = (AstFrame *) astCast( this, target );
-
-/* If the cast was  possible, fix the template Domain since the parent
-   class may provide a different default Domain, and then invoke the Match 
-   method appropriate to the new template class (i.e. the target class). */
-      if( super_this ) {
-         if( astTestDomain( target ) ) {
-            dom = astGetDomain( this );
-            if( astChrLen( dom ) > 0 ) astSetDomain( super_this, dom );
-         }
-         match = (**astMEMBER(super_this,Frame,Match))( super_this, target,
-                                                        template_axes, 
-                                                        target_axes, map, 
-                                                        result, status );
-         super_this = astAnnul( super_this );
-      }
-   }
-
-   return match;
-}
-
-
-int astIsUnitFrame_( AstFrame *this, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,IsUnitFrame))( this, status );
-}
-void astNorm_( AstFrame *this, double value[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,Norm))( this, value, status );
-}
-void astNormBox_( AstFrame *this, double lbnd[], double ubnd[], AstMapping *reg, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,NormBox))( this, lbnd, ubnd, reg, status );
-}
-double astAxDistance_( AstFrame *this, int axis, double v1, double v2, int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Frame,AxDistance))( this, axis, v1, v2, status );
-}
-double astAxOffset_( AstFrame *this, int axis, double v1, double dist, int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Frame,AxOffset))( this, axis, v1, dist, status );
-}
-void astOffset_( AstFrame *this, const double point1[], const double point2[],
-                 double offset, double point3[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,Offset))( this, point1, point2, offset, point3, status );
-}
-double astAxAngle_( AstFrame *this, const double a[2], const double b[2],
-                    int axis, int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Frame,AxAngle))( this, a, b, axis, status );
-}
-double astOffset2_( AstFrame *this, const double point1[2], double angle,
-                 double offset, double point2[2], int *status ) {
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,Frame,Offset2))( this, point1, angle, offset, point2, status );
-}
-void astIntersect_( AstFrame *this, const double a1[2],
-                    const double a2[2], const double b1[2],
-                    const double b2[2], double cross[2], 
-                    int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,Intersect))( this, a1, a2, b1, b2, cross, status );
-}
-void astOverlay_( AstFrame *template, const int *template_axes,
-                  AstFrame *result, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(template,Frame,Overlay))( template, template_axes, result, status );
-}
-void astPermAxes_( AstFrame *this, const int perm[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,PermAxes))( this, perm, status );
-}
-AstFrame *astPickAxes_( AstFrame *this, int naxes, const int axes[],
-                        AstMapping **map, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,PickAxes))( this, naxes, axes, map, status );
-}
-void astPrimaryFrame_( AstFrame *this, int axis1,
-                      AstFrame **frame, int *axis2, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,PrimaryFrame))( this, axis1, frame, axis2, status );
-}
-void astResolve_( AstFrame *this, const double point1[], const double point2[],
-                 const double point3[], double point4[], double *d1,
-                 double *d2, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,Resolve))( this, point1, point2, point3, point4, d1, d2, status );
-}
-void astSetAxis_( AstFrame *this, int axis, AstAxis *newaxis, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,SetAxis))( this, axis, newaxis, status );
-}
-void astSetUnit_( AstFrame *this, int axis, const char *value, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,SetUnit))( this, axis, value, status );
-}
-void astClearUnit_( AstFrame *this, int axis, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,ClearUnit))( this, axis, status );
-}
-int astSubFrame_( AstFrame *target, AstFrame *template, int result_naxes,
-                  const int *target_axes, const int *template_axes,
-                  AstMapping **map, AstFrame **result, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(target,Frame,SubFrame))( target, template, result_naxes,
-                                                target_axes, template_axes,
-                                                map, result, status );
-}
-int astUnformat_( AstFrame *this, int axis, const char *string,
-                  double *value, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,Unformat))( this, axis, string, value, status );
-}
-int astValidateAxis_( AstFrame *this, int axis, const char *method, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,ValidateAxis))( this, axis, method, status );
-}
-void astValidateAxisSelection_( AstFrame *this, int naxes, const int *axes,
-                                const char *method, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,ValidateAxisSelection))( this, naxes, axes,
-                                                    method, status );
-}
-AstSystemType astValidateSystem_( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-   if ( !astOK ) return AST__BADSYSTEM;
-   return (**astMEMBER(this,Frame,ValidateSystem))( this, system, method, status );
-}
-AstSystemType astSystemCode_( AstFrame *this, const char *system, int *status ) {
-   if ( !astOK ) return AST__BADSYSTEM;
-   return (**astMEMBER(this,Frame,SystemCode))( this, system, status );
-}
-const char *astSystemString_( AstFrame *this, AstSystemType system, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Frame,SystemString))( this, system, status );
-}
-int astAxIn_( AstFrame *this, int axis, double lo, double hi, double val, 
-              int closed, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,AxIn))( this, axis, lo, hi, val, closed, status );
-}
-int astGetFrameFlags_( AstFrame *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Frame,GetFrameFlags))( this, status );
-}
-void astSetFrameFlags_( AstFrame *this, int value, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Frame,SetFrameFlags))( this, value, status );
-}
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstFrame *PickAxesId_( AstFrame *, int, const int[], AstMapping **, int * );
-AstFrame *astFrameId_( int, const char *, ... );
-const char *astFormatId_( AstFrame *, int, double, int * );
-int astUnformatId_( AstFrame *, int, const char *, double *, int * );
-void astPermAxesId_( AstFrame *, const int[], int * );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-const char *astFormatId_( AstFrame *this, int axis, double value, int *status ) {
-/*
-*++
-*  Name:
-c     astFormat
-f     AST_FORMAT
-
-*  Purpose:
-*     Format a coordinate value for a Frame axis.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     const char *astFormat( AstFrame *this, int axis, double value )
-f     RESULT = AST_FORMAT( THIS, AXIS, VALUE, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function returns a pointer to a string containing the
-f     This function returns a character string containing the
-*     formatted (character) version of a coordinate value for a Frame
-*     axis. The formatting applied is determined by the Frame's
-*     attributes and, in particular, by any Format attribute string
-*     that has been set for the axis. A suitable default format (based
-*     on the Digits attribute value) will be applied if necessary.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (given)
-*        Pointer to the Frame.
-c     axis
-f     AXIS = INTEGER (Given)
-*        The number of the Frame axis for which formatting is to be
-*        performed (axis numbering starts at 1 for the first axis).
-c     value
-f     VALUE = DOUBLE PRECISION (Given)
-*        The coordinate value to be formatted.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFormat()
-c        A pointer to a null-terminated string containing the formatted
-c        value.
-f     AST_FORMAT = CHARACTER * ( AST__SZCHR )
-f        The formatted value.
-
-*  Notes:
-c     - The returned pointer is guaranteed to remain valid and the
-c     string to which it points will not be over-written for a total
-c     of 50 successive invocations of this function. After this, the
-c     memory containing the string may be re-used, so a copy of the
-c     string should be made if it is needed for longer than this.
-c     - A formatted value may be converted back into a numerical (double)
-c     value using astUnformat.
-f     - A formatted value may be converted back into a numerical
-f     (double precision) value using AST_UNFORMAT.
-c     - A NULL pointer will be returned if this function is invoked
-c     with the AST error status set, or if it should fail for any
-c     reason.
-f     - A blank string will be returned if this function is invoked
-f     with STATUS set to an error value, or if it should fail for any
-f     reason.
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the astFormat
-*     method. It is identical to astFormat_ except that:
-*
-*     - The axis index is decremented by 1 before use. This allows the
-*     public interface to use 1-based axis numbers (whereas internally
-*     axis numbers are zero-based).
-*
-*     - The returned string value is buffered in dynamically allocated
-*     memory so that it will remain valid for a guaranteed number of
-*     function invocations.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   const char *fvalue;           /* Pointer to formatted value */
-   const char *result;           /* Pointer value to return */
-   int i;                        /* Loop counter for initialisation */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(this);
-
-/* If the "astformatid_strings" array has not been initialised, fill it with NULL
-   pointers. */
-   if ( !astformatid_init ) {
-      astformatid_init = 1;
-      for ( i = 0; i < ASTFORMATID_MAX_STRINGS; i++ ) astformatid_strings[ i ] = NULL;
-   }
-
-/* Invoke the normal astFormat_ function to obtain a pointer to the
-   required formatted value, adjusting the axis index to become
-   zero-based. */
-   fvalue = astFormat( this, axis - 1, value );
-
-/* If OK, store a copy of the resulting string in dynamically allocated memory, 
-   putting a pointer to the copy into the next element of the "astformatid_strings" 
-   array.  (This process also de-allocates any previously allocated memory pointed 
-   at by this "astformatid_strings" element, so the earlier string is effectively 
-   replaced by the new one.) */
-   if ( astOK ) {
-      astBeginPM;
-      astformatid_strings[ astformatid_istr ] = astStore( astformatid_strings[ astformatid_istr ], fvalue,
-                                  strlen( fvalue ) + (size_t) 1 );
-      astEndPM;
-
-/* If OK, return a pointer to the copy and increment "astformatid_istr" to use 
-   the next element of "astformatid_strings" on the next invocation. Recycle 
-   "astformatid_istr" to zero when all elements have been used. */
-      if ( astOK ) {
-         result = astformatid_strings[ astformatid_istr++ ];
-         if ( astformatid_istr == ( ASTFORMATID_MAX_STRINGS - 1 ) ) astformatid_istr = 0;
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-AstFrame *astFrameId_( int naxes, const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astFrame
-f     AST_FRAME
-
-*  Purpose:
-*     Create a Frame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     AstFrame *astFrame( int naxes, const char *options, ... )
-f     RESULT = AST_FRAME( NAXES, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Frame constructor.
-
-*  Description:
-*     This function creates a new Frame and optionally initialises its
-*     attributes.
-*
-*     A Frame is used to represent a coordinate system. It does this
-*     in rather the same way that a frame around a graph describes the
-*     coordinate space in which data are plotted. Consequently, a
-*     Frame has a Title (string) attribute, which describes the
-*     coordinate space, and contains axes which in turn hold
-*     information such as Label and Units strings which are used for
-*     labelling (e.g.) graphical output. In general, however, the
-*     number of axes is not restricted to two.
-*
-*     Functions are available for converting Frame coordinate values
-*     into a form suitable for display, and also for calculating
-*     distances and offsets between positions within the Frame.
-*
-*     Frames may also contain knowledge of how to transform to and
-*     from related coordinate systems.
-
-*  Parameters:
-c     naxes
-f     NAXES = INTEGER (Given)
-*        The number of Frame axes (i.e. the number of dimensions of
-*        the coordinate space which the Frame describes).
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Frame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Frame. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFrame()
-f     AST_FRAME = INTEGER
-*        A pointer to the new Frame.
-
-*  Examples:
-c     frame = astFrame( 2, "Title=Energy Spectrum: Plot %d", n );
-c        Creates a new 2-dimensional Frame and initialises its Title
-c        attribute to the string "Energy Spectrum: Plot <n>", where
-c        <n> takes the value of the int variable "n".
-c     frame = astFrame( 2, "Label(1)=Energy, Label(2)=Response" );
-c        Creates a new 2-dimensional Frame and initialises its axis
-c        Label attributes to suitable string values.
-f     FRAME = AST_FRAME( 2, 'Title=Energy Spectrum', STATUS );
-f        Creates a new 2-dimensional Frame and initialises its Title
-f        attribute to the string "Energy Spectrum".
-f     FRAME = AST_FRAME( 2, 'Label(1)=Energy, Label(2)=Response', STATUS );
-f        Creates a new 2-dimensional Frame and initialises its axis
-f        Label attributes to suitable string values.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astFrame_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *new;                /* Pointer to new Frame */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the Frame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitFrame( NULL, sizeof( AstFrame ), !class_init, &class_vtab,
-                       "Frame", naxes );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Frame's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Frame. */
-   return astMakeId( new );
-}
-
-void astPermAxesId_( AstFrame *this, const int perm[], int *status ) {
-/*
-*++
-*  Name:
-c     astPermAxes
-f     AST_PERMAXES
-
-*  Purpose:
-*     Permute the axis order in a Frame.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     void astPermAxes( AstFrame *this, const int perm[] )
-f     CALL AST_PERMAXES( THIS, PERM, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function permutes the order in which a Frame's axes occur.
-f     This routine permutes the order in which a Frame's axes occur.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     perm
-f     PERM( * ) = INTEGER (Given)
-*        An array with one element for each axis of the Frame (Naxes
-*        attribute). This should list the axes in their new order,
-*        using the original axis numbering (which starts at 1 for the
-*        first axis).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Only genuine permutations of the axis order are permitted, so
-c     each axis must be referenced exactly once in the "perm" array.
-f     each axis must be referenced exactly once in the PERM array.
-*     - If successive axis permutations are applied to a Frame, then
-*     the effects are cumulative.
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the
-*     astPermAxes method. It is identical to astPermAxes_ except that
-*     the axis numbers in the "perm" array are decremented by 1 before
-*     use. This is to allow the public interface to use one-based axis
-*     numbering (internally, zero-based axis numbering is used).
-*/
-
-/* Local Variables: */
-   int *perm1;                   /* Pointer to modified perm array */
-   int axis;                     /* Loop counter for Frame axes */
-   int naxes;                    /* Number of Frame axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the number of Frame axes. */
-   naxes = astGetNaxes( this );
-
-/* Allocate an array to hold a modified version of the "perm"
-   array. */
-   perm1 = astMalloc( sizeof( int ) * (size_t) naxes );
-   if ( astOK ) {
-
-/* Make a modified copy of the "perm" array by subtracting one from
-   each element. This allows the public interface to use one-based
-   axis numbering, whereas all internal code is zero-based. */
-      for ( axis = 0; axis < naxes; axis++ ) perm1[ axis ] = perm[ axis ] - 1;
-
-/* Invoke the normal astPermAxes_ function to permute the Frame's axes. */
-      astPermAxes( this, perm1 );
-   }
-
-/* Free the temporary array. */
-   perm1 = astFree( perm1 );
-}
-
-AstFrame *astPickAxesId_( AstFrame *this, int naxes, const int axes[],
-                          AstMapping **map, int *status ) {
-/*
-*++
-*  Name:
-c     astPickAxes
-f     AST_PICKAXES
-
-*  Purpose:
-*     Create a new Frame by picking axes from an existing one.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     AstFrame *astPickAxes( AstFrame *this, int naxes, const int axes[],
-c                            AstMapping **map )
-f     RESULT = AST_PICKAXES( THIS, NAXES, AXES, MAP, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function creates a new Frame whose axes are copied from an
-*     existing Frame along with other Frame attributes, such as its
-*     Title. Any number (zero or more) of the original Frame's axes
-*     may be copied, in any order, and additional axes with default
-*     attributes may also be included in the new Frame.
-*
-c     Optionally, a Mapping that converts between the coordinate
-f     A Mapping that converts between the coordinate
-*     systems described by the two Frames will also be returned.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the original Frame.
-c     naxes
-f     NAXES = INTEGER (Given)
-*        The number of axes required in the new Frame.
-c     axes
-f     AXES( NAXES ) = INTEGER (Given)
-c        An array, with "naxes" elements, which lists the axes to be
-f        An array which lists the axes to be
-*        copied. These should be given in the order required in the
-*        new Frame, using the axis numbering in the original Frame
-*        (which starts at 1 for the first axis). Axes may be selected
-*        in any order, but each may only be used once.  If additional
-*        (default) axes are also to be included, the corresponding
-*        elements of this array should be set to zero.
-c     map
-f     MAP = INTEGER (Returned)
-c        Address of a location in which to return a pointer to a new
-f        A pointer to a new
-*        Mapping. This will be a PermMap (or a UnitMap as a special
-*        case) that describes the axis permutation that has taken
-*        place between the original and new Frames. The Mapping's
-*        forward transformation will convert coordinates from the
-*        original Frame into the new one, and vice versa.
-c
-c        If this Mapping is not required, a NULL value may be supplied
-c        for this parameter.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPickAxes()
-f     AST_PICKAXES = INTEGER
-*        A pointer to the new Frame.
-
-*  Applicability:
-*     Frame
-*        This function applies to all Frames. The class of Frame returned 
-*        may differ from that of the original Frame, depending on which 
-*        axes are selected. For example, if a single axis is picked from a 
-*        SkyFrame (which must always have two axes) then the resulting 
-*        Frame cannot be a valid SkyFrame, so will revert to the parent 
-*        class (Frame) instead.
-*     FrameSet
-*        Using this function on a FrameSet is identical to using it on
-*        the current Frame in the FrameSet. The returned Frame will not
-*        be a FrameSet.
-*     Region
-*        If this function is used on a Region, an attempt is made to
-*        retain the bounds information on the selected axes. If
-*        succesful, the returned Frame will be a Region of some class. 
-*        Otherwise, the returned Frame is obtained by calling this 
-*        function on the Frame represented by the supplied Region (the
-*        returned Frame will then not be a Region). In order to be
-*        succesful, the selected axes in the Region must be independent
-*        of the others. For instance, a Box can be split in this way but
-*        a Circle cannot. Another requirement for success is that no
-*        default axes are added (that is, the 
-c        "axes"
-f        AXES
-*        array must not contain any zero values.
-
-*  Notes:
-c     - The new Frame will contain a "deep" copy (c.f. astCopy) of all
-f     - The new Frame will contain a "deep" copy (c.f. AST_COPY) of all
-*     the data selected from the original Frame. Modifying any aspect
-*     of the new Frame will therefore not affect the original one.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the
-*     astPickAxes method. It is identical to astPickAxes_ except for
-*     the following:
-*
-*     - The axis numbers in the "axes" array are decremented by 1 before
-*     use. This is to allow the public interface to use one-based axis
-*     numbering (internally, zero-based axis numbering is used).
-*
-*     - An ID value is returned via the "map" parameter (if used)
-*     instead of a true C pointer. This is required because this
-*     conversion cannot be performed by the macro that invokes the
-*     function.
-*/
-
-/* Local Variables: */
-   AstFrame *result;             /* Pointer to result Frame */
-   int *axes1;                   /* Pointer to modified axes array */
-   int axis;                     /* Loop counter for axes */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Allocate an array to hold a modified version of the "axes" array
-   (check that "naxes" is valid first - if not, this error will be
-   reported by astPickAxes_ below). */
-   axes1 = ( naxes >= 0 ) ? astMalloc( sizeof( int ) * (size_t) naxes ) :
-                            NULL;
-   if ( astOK ) {
-
-/* Make a modified copy of the "axes" array by subtracting one from
-   each element. This allows the public interface to use one-based
-   axis numbering, whereas all internal code is zero-based. */
-      for ( axis = 0; axis < naxes; axis++ ) axes1[ axis ] = axes[ axis ] - 1;
-
-/* Invoke the normal astPickAxes_ function to select the required axes. */
-      result = astPickAxes( this, naxes, axes1, map );
-   }
-
-/* Free the temporary array. */
-   axes1 = astFree( axes1 );
-
-/* If required, return an ID value for the Mapping. */
-   if ( map ) *map = astMakeId( *map );
-
-/* Return the result. */
-   return result;
-}
-
-int astUnformatId_( AstFrame *this, int axis, const char *string,
-                    double *value, int *status ) {
-/*
-*++
-*  Name:
-c     astUnformat
-f     AST_UNFORMAT
-
-*  Purpose:
-*     Read a formatted coordinate value for a Frame axis.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frame.h"
-c     int astUnformat( AstFrame *this, int axis, const char *string,
-c                      double *value )
-f     RESULT = AST_UNFORMAT( THIS, AXIS, STRING, VALUE, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function reads a formatted coordinate value (given as a
-c     character string) for a Frame axis and returns the equivalent
-c     numerical (double) value. It also returns the number of
-c     characters read from the string.
-f     This function reads a formatted coordinate value (given as a
-f     character string) for a Frame axis and returns the equivalent
-f     numerical (double precision) value. It also returns the number
-f     of characters read from the string.
-*
-c     The principle use of this function is in decoding user-supplied
-c     input which contains formatted coordinate values. Free-format
-c     input is supported as far as possible. If input is ambiguous, it
-c     is interpreted with reference to the Frame's attributes (in
-c     particular, the Format string associated with the Frame's
-c     axis). This function is, in essence, the inverse of astFormat.
-f     The principle use of this function is in decoding user-supplied
-f     input which contains formatted coordinate values. Free-format
-f     input is supported as far as possible. If input is ambiguous, it
-f     is interpreted with reference to the Frame's attributes (in
-f     particular, the Format string associated with the Frame's
-f     axis). This function is, in essence, the inverse of AST_FORMAT.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Frame.
-c     axis
-f     AXIS = INTEGER (Given)
-*        The number of the Frame axis for which a coordinate value is to
-*        be read (axis numbering starts at 1 for the first axis).
-c     string
-f     STRING = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing the
-c        formatted coordinate value.
-f        A character string containing the formatted coordinate value.
-*        This string may contain additional information following the
-*        value to be read, in which case reading stops at the first
-*        character which cannot be interpreted as part of the value.
-*        Any white space before or after the value is discarded.
-c     value
-f     VALUE = DOUBLE PRECISION (Returned)
-c        Pointer to a double in which the coordinate value read will be
-c        returned.
-f        The coordinate value read.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astUnformat()
-f     AST_UNFORMAT = INTEGER
-*        The number of characters read from the string in order to
-*        obtain the coordinate value. This will include any white
-*        space which occurs before or after the value.
-
-*  Applicability:
-*     Frame
-*        This function applies to all Frames. See the "Frame Input
-*        Format" section below for details of the input formats
-*        accepted by a basic Frame.
-*     SkyFrame
-*        The SkyFrame class re-defines the input format to be suitable
-*        for representing angles and times, with the resulting
-*        coordinate value returned in radians.  See the "SkyFrame
-*        Input Format" section below for details of the formats
-*        accepted.
-*     FrameSet
-*        The input formats accepted by a FrameSet are determined by
-*        its current Frame (as specified by the Current attribute).
-
-*  Frame Input Format
-*     The input format accepted for a basic Frame axis is as follows:
-*     - An optional sign, followed by:
-*     - A sequence of one or more digits possibly containing a decimal point,
-*     followed by:
-*     - An optional exponent field.
-*     - The exponent field, if present, consists of "E" or "e"
-*     followed by a possibly signed integer.
-*
-*     Examples of acceptable Frame input formats include:
-*     - 99
-*     - 1.25
-*     - -1.6
-*     - 1E8
-*     - -.99e-17
-*     - <bad>
-
-*  SkyFrame Input Format
-*     The input format accepted for a SkyFrame axis is as follows:
-*     - An optional sign, followed by between one and three fields
-*     representing either degrees, arc-minutes, arc-seconds or hours,
-*     minutes, seconds (e.g. "-12 42 03").
-*     - Each field should consist of a sequence of one or more digits,
-*     which may include leading zeros. At most one field may contain a
-*     decimal point, in which case it is taken to be the final field
-*     (e.g. decimal degrees might be given as "124.707", while degrees
-*     and decimal arc-minutes might be given as "-13 33.8").
-*     - The first field given may take any value, allowing angles and
-*     times outside the conventional ranges to be
-*     represented. However, subsequent fields must have values of less
-*     than 60 (e.g. "720 45 31" is valid, whereas "11 45 61" is not).
-*     - Fields may be separated by white space or by ":" (colon), but
-*     the choice of separator must be used consistently throughout the
-*     value. Additional white space may be present around fields and
-*     separators (e.g. "- 2: 04 : 7.1").
-*     - The following field identification characters may be used as
-*     separators to replace either of those above (or may be appended
-*     to the final field), in order to identify the field to which
-*     they are appended: "d"---degrees; "h"---hours; "m"---minutes of
-*     arc or time; "s"---seconds of arc or time; "'" (single
-*     quote)---minutes of arc; """ (double quote)---seconds of arc.
-*     Either lower or upper case may be used.  Fields must be given in
-*     order of decreasing significance (e.g. "-11D 3' 14.4"" or
-*     "22h14m11.2s").
-*     - The presence of any of the field identification characters
-*     "d", "'" (single quote) or """ (double quote) indicates that the
-*     value is to be interpreted as an angle. Conversely, the presence
-*     of "h" indicates that it is to be interpreted as a time (with 24
-*     hours corresponding to 360 degrees). Incompatible angle/time
-*     identification characters may not be mixed (e.g. "10h14'3"" is
-*     not valid).  The remaining field identification characters and
-*     separators do not specify a preference for an angle or a time
-*     and may be used with either.
-c     - If no preference for an angle or a time is expressed anywhere
-c     within the value, it is interpreted as an angle if the Format
-c     attribute string associated with the SkyFrame axis generates an
-c     angle and as a time otherwise. This ensures that values produced
-c     by astFormat are correctly interpreted by astUnformat.
-f     - If no preference for an angle or a time is expressed anywhere
-f     within the value, it is interpreted as an angle if the Format
-f     attribute string associated with the SkyFrame axis generates an
-f     angle and as a time otherwise. This ensures that values produced
-f     by AST_FORMAT are correctly interpreted by AST_UNFORMAT.
-*     - Fields may be omitted, in which case they default to zero. The
-*     remaining fields may be identified by using appropriate field
-*     identification characters (see above) and/or by adding extra
-*     colon separators (e.g. "-05m13s" is equivalent to "-:05:13"). If
-*     a field is not identified explicitly, it is assumed that
-*     adjacent fields have been given, after taking account of any
-*     extra separator characters (e.g. "14:25.4s" specifies minutes
-*     and seconds, while "14::25.4s" specifies degrees and seconds).
-c     - If fields are omitted in such a way that the remaining ones
-c     cannot be identified uniquely (e.g. "01:02"), then the first
-c     field (either given explicitly or implied by an extra leading
-c     colon separator) is taken to be the most significant field that
-c     astFormat would produce when formatting a value (using the
-c     Format attribute associated with the SkyFrame axis).  By
-c     default, this means that the first field will normally be
-c     interpreted as degrees or hours. However, if this does not
-c     result in consistent field identification, then the last field
-c     (either given explicitly or implied by an extra trailing colon
-c     separator) is taken to to be the least significant field that
-c     astFormat would produce.
-f     - If fields are omitted in such a way that the remaining ones
-f     cannot be identified uniquely (e.g. "01:02"), then the first
-f     field (either given explicitly or implied by an extra leading
-f     colon separator) is taken to be the most significant field that
-f     AST_FORMAT would produce when formatting a value (using the
-f     Format attribute associated with the SkyFrame axis).  By
-f     default, this means that the first field will normally be
-f     interpreted as degrees or hours. However, if this does not
-f     result in consistent field identification, then the last field
-f     (either given explicitly or implied by an extra trailing colon
-f     separator) is taken to to be the least significant field that
-f     AST_FORMAT would produce.
-*
-c     This final convention is intended to ensure that values formatted
-c     by astFormat which contain less than three fields will be
-c     correctly interpreted if read back using astUnformat, even if
-c     they do not contain field identification characters.
-f     This final convention is intended to ensure that values formatted
-f     by AST_FORMAT which contain less than three fields will be
-f     correctly interpreted if read back using AST_UNFORMAT, even if
-f     they do not contain field identification characters.
-*
-*     Examples of acceptable SkyFrame input formats (with
-*     interpretation in parentheses) include:
-*     - -14d 13m 22.2s (-14d 13' 22.2")
-*     - + 12:34:56.7 (12d 34' 56.7" or 12h 34m 56.7s)
-*     - 001 : 02 : 03.4 (1d 02' 03.4" or 1h 02m 03.4s)
-*     - 22h 30 (22h 30m 00s)
-*     - 136::10" (136d 00' 10" or 136h 00m 10s)
-*     - -14M 27S (-0d 14' 27" or -0h 14m 27s)
-*     - -:14: (-0d 14' 00" or -0h 14m 00s)
-*     - -::4.1 (-0d 00' 04.1" or -0h 00m 04.1s)
-*     - .9" (0d 00' 00.9")
-*     - d12m (0d 12' 00")
-*     - H 12:22.3s (0h 12m 22.3s)
-*     - <bad> (AST__BAD)
-*
-*     Where alternative interpretations are shown, the choice of angle or
-*     time depends on the associated Format(axis) attribute.
-
-*  Notes:
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-c     - Beware that it is possible for a formatting error part-way
-c     through an input string to terminate input before it has been
-c     completely read, but to yield a coordinate value that appears
-c     valid. For example, if a user types "1.5r6" instead of "1.5e6",
-c     the "r" will terminate input, giving an incorrect coordinate
-c     value of 1.5. It is therefore most important to check the return
-c     value of this function to ensure that the correct number of
-c     characters have been read.
-f     - Beware that it is possible for a formatting error part-way
-f     through an input string to terminate input before it has been
-f     completely read, but to yield a coordinate value that appears
-f     valid. For example, if a user types "1.5R6" instead of "1.5E6",
-f     the "R" will terminate input, giving an incorrect coordinate
-f     value of 1.5. It is therefore most important to check the return
-f     value of this function to ensure that the correct number of
-f     characters have been read.
-*     - An error will result if a value is read which appears to have
-*     the correct format, but which cannot be converted into a valid
-*     coordinate value (for instance, because the value of one or more
-*     of its fields is invalid).
-*     - The string "<bad>" is recognised as a special case and will
-*     yield the coordinate value AST__BAD without error. The test for
-*     this string is case-insensitive and also permits embedded white
-*     space.
-c     - A function result of zero will be returned and no coordinate
-c     value will be returned via the "value" pointer if this function
-c     is invoked with the AST error status set, or if it should fail
-c     for any reason.
-f     - A function result of zero will be returned and no coordinate
-f     value will be returned via the VALUE argument if this function
-f     is invoked with the AST error status set, or if it should fail
-f     for any reason.
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the
-*     astUnformat method. It is identical to astUnformat_ except that:
-*
-*     - The axis index is decremented by 1 before use. This allows the
-*     public interface to use 1-based axis numbers (whereas internally
-*     axis numbers are zero-based).
-*/
-
-/* Invoke the normal astUnformat_ function, adjusting the axis index
-   to become zero-based. */
-   return astUnformat( this, axis - 1, string, value );
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/frame.h b/ast-5.3-1/frame.h
deleted file mode 100644
index 40375f6..0000000
--- a/ast-5.3-1/frame.h
+++ /dev/null
@@ -1,1404 +0,0 @@
-#if !defined( FRAME_INCLUDED )   /* Include this file only once */
-#define FRAME_INCLUDED
-/*
-*+
-*  Name:
-*     frame.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Frame class.
-
-*  Invocation:
-*     #include "frame.h"
-
-*  Description:
-*     This include file defines the interface to the Frame class and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this class.
-*
-*     A Frame object encapsulates information about a coordinate
-*     system, including its axes. It may also act as a "template" to
-*     be matched against another Frame object. This process determines
-*     whether it is possible to perform a coordinate transformation
-*     between the two coordinates systems they describe.
-
-*  Inheritance:
-*     The Frame class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     Nin (integer, readonly)
-*        The Frame class sets this value to be equal to the number of
-*        Frame axes.
-*     Nout (integer, readonly)
-*        The Frame class sets this value to be equal to the number of
-*        Frame axes.
-
-*  New Attributes Defined:
-*     AlignSystem (string)
-*        This attribute takes a value to identify the coordinate system
-*        in which the Frame should be aligned with other Frames.
-*     Digits [or Digits(axis)] (integer)
-*        Specifies how many digits of precision are required by
-*        default when a coordinate value for a Frame is formatted
-*        (e.g. using the astFormat method). The Digits value acts as a
-*        default only and is over-ridden if a Format string is
-*        specified for an axis explicitly.
-*
-*        The default Digits value for a Frame is 7. This attribute
-*        normally applies to all the Frame's axes, but reference may
-*        be made to a particular axis by adding an axis subscript
-*        (e.g. Digits(1)). If a value is set for an individual axis,
-*        it will over-ride the Digits value for the Frame as a whole
-*        when formatting values for that axis.
-*     Direction(axis) (integer)
-*        A boolean value which specifies how coordinate values for
-*        each Frame axis should be displayed (e.g. in graphs). By
-*        default, it has the value one, indicating that they should be
-*        shown in the conventional sense (i.e. increasing left to
-*        right for an abscissa and bottom to top for an ordinate). If
-*        set to zero, this attribute indicates that the direction
-*        should be reversed (as would often be done for an
-*        astronomical magnitude or a right ascension axis, for
-*        example).
-*     Epoch (double)
-*        This value is used to qualify coordinate systems by
-*        giving the moment in time when the coordinates are known to
-*        be correct. Often, this will be the date of observation.
-*     Format(axis) (string)
-*        Specifies the format to be used to display coordinate values
-*        for each Frame axis (i.e. to convert them from binary to
-*        character form). The interpretation of this string (e.g. by
-*        derived classes) is left to the astFormat method which, in
-*        turn will invoke the astAxisFormat for the Axis object that
-*        describes each axis. By default, the Frame class supplies an
-*        Axis class object for each axis and this will interpret this
-*        parameter as a C "printf" format string which should be
-*        capable of formatting a single coordinate value stored as a
-*        double (e.g. "%1.7G"). If no Format string is set, the
-*        default format is based on the value of the Digits attribute.
-*     Label(axis) (string)
-*        Specifies the label to be attached to each Frame axis when it
-*        is represented in (e.g.) a graph. It is intended purely for
-*        interpretation by human readers and not by software. The
-*        default supplied by the Frame class is the string "Axis <n>",
-*        where <n> is 1, 2, etc. for each successive axis.
-*     MatchEnd (integer)
-*        A boolean value that controls how a Frame behaves when used
-*        as a template to match another Frame. If it is zero and a
-*        template Frame matches a target frame which has a different
-*        number of axes, then the axes wich occur first in the target
-*        frame will be matched and any trailing axes in either the
-*        target or template will be discarded (if necessary). If it is
-*        non-zero, however, the last axes in each frame will be
-*        matched and any un-matched leading axes will be discarded
-*        instead. The default value supplied by the Frame class is
-*        zero.
-*     MaxAxes (integer)
-*        Specifies the maximum number of axes in a target Frame that
-*        can be matched when using the Frame as a template. Normally,
-*        by default, this value is equal to the number of Frame axes,
-*        so that a Frame will only match another Frame with the same
-*        number of axes as itself. By setting a different value,
-*        however, Frames with different numbers of axes may be matched
-*        (the MatchEnd attribute then determines which of the
-*        individual axes are matched).
-*
-*        When setting this value, the value of the MinAxes attribute
-*        may be silently changed so that it remains consistent with
-*        (i.e. does not exceed) the new value. The default value may
-*        also be reduced if necessary to remain consistent with the
-*        MinAxes value.
-*     MinAxes (integer)
-*        Specifies the minimum number of axes in a target Frame that
-*        can be matched when using the Frame as a template. Normally,
-*        by default, this value is equal to the number of Frame axes,
-*        so that a Frame will only match another Frame with the same
-*        number of axes as itself. By setting a different value,
-*        however, Frames with different numbers of axes may be matched
-*        (the MatchEnd attribute then determines which of the
-*        individual axes are matched).
-*
-*        When setting this value, the value of the MaxAxes attribute
-*        may be silently changed so that it remains consistent with
-*        (i.e. is not less than) the new value. The default value may
-*        also be reduced if necessary to remain consistent with the
-*        MaxAxes value.
-*     Domain (string)
-*        A string which may be used to identify the physical domain to
-*        which a Frame applies and used as an additional key when
-*        matching a target Frame with a template. If the Domain
-*        attribute in the template Frame is set, then only target
-*        frames with the same Domain value will be matched. If a
-*        Domain is not set in the template Frame, the target Frame's
-*        Domain value will be ignored and has no effect on
-*        matching. The default value supplied by the Frame class is an
-*        empty string. Domain values are automatically converted to
-*        upper case and all white space is removed before use.
-*     Naxes (integer)
-*        A read-only attribute that gives the number of axes in a
-*        Frame (i.e.  the number of dimensions of the space which the
-*        Frame describes). This value is determined when the Frame is
-*        created.
-*     Permute (integer)
-*        A boolean value which specifies whether the axis order of a
-*        target Frame may be permuted in order to obtain a match with
-*        a template. If this value is set to zero in the template
-*        Frame, it will only match a target if it can do so without
-*        changing the order of its axes. The default value supplied by
-*        the Frame class is 1 (i.e. allow axis permutations).
-*     PreserveAxes (integer)
-*        A boolean value which determines how the "result" Frame is
-*        produced whan a target frame is matched by a template. If
-*        this value is zero in the template Frame, then the result
-*        Frame will have the same number of axes as the template. If
-*        it is non-zero, however, the axes of the target Frame will be
-*        preserved, so that the result Frame will have the same number
-*        of axes as the target. The default supplied by the Frame
-*        class is zero (i.e. target axes are not preserved).
-*
-*        The main use for this attribute is when the MaxAxes and/or
-*        MinAxes attributes have been set to search for a Frame which
-*        may have a different number of axes from the template. For
-*        example, if a 2-dimensional template Frame matches a
-*        3-dimensional target Frame, then by default the result is
-*        2-dimensional and the last axis (normally) will be
-*        discarded. However, if the template's PreserveAxes value is
-*        non-zero, the result will instead be 3-dimensional to
-*        correspond with the target Frame.
-*     Symbol(axis) (string)
-*        Specifies the symbol to be used to represent coordinate
-*        values for each Frame axis in "short form", such as in
-*        algebraic expressions where a full description of the axis
-*        would be inappropriate. Examples include "RA" and "Dec" (for
-*        Right Ascension and Declination).
-*
-*        The default supplied by the Frame class is the string
-*        "<Domain><n>", where <n> is 1, 2, etc. for successive axes,
-*        and <Domain> is the value of the Frame's Domain attribute
-*        (with any white space replaced by underscores and truncated
-*        if necessary so that the final string does not exceed 15
-*        characters). If no Domain value has been set, "x" is used as
-*        the <Domain> value in constructing this default string.
-*     System (string)
-*        This attribute takes a value to identify the coordinate system
-*        used to describe positions within the domain of the Frame.
-*     Title (string)
-*        Specifies a string to be used as a title on (e.g.) graphs to
-*        describe the coordinate system which the Frame
-*        represents. Examples would be "Detector Coordinates" or
-*        "Galactic Coordinates". This string is intended solely for
-*        interpretation by human readers and not by software. The
-*        default supplied by the Frame class is "<n>-D Coordinate
-*        System", where <n> is the number of Frame axes.
-*     Unit(axis) (string)
-*        Describes the units used to represent coordinate values on
-*        each Frame axis. The default supplied by the Frame class is
-*        an empty string.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astGetNin
-*           Get the number of input coordinates for a Frame.
-*        astGetNout
-*           Get the number of output coordinates for a Frame.
-*        astTransform
-*           Use a Frame to transform a set of points.
-
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a Frame.
-*        astGetAttrib
-*           Get an attribute value for a Frame.
-*        astReportPoints
-*           Report the effect of transforming a set of points using a Frame.
-*        astSetAttrib
-*           Set an attribute value for a Frame.
-*        astTestAttrib
-*           Test if an attribute value has been set for a Frame.
-
-*  New Methods Defined:
-*     Public:
-*        astAngle
-*           Calculate the angle between three points.
-*        astAxAngle
-*           Find the angle from an axis to a line through two points.
-*        astAxDistance
-*           Calculate the distance between two axis values
-*        astAxOffset
-*           Calculate an offset along an axis
-*        astConvert
-*           Determine how to convert between two coordinate systems.
-*        astDistance
-*           Calculate the distance between two points.
-*        astFindFrame
-*           Find a coordinate system with specified characteristics
-*        astFormat
-*           Format a coordinate value for a Frame axis.
-*        astNorm
-*           Normalise a set of Frame coordinates.
-*        astOffset
-*           Calculate an offset along a geodesic curve.
-*        astOffset2
-*           Calculate an offset along a geodesic curve for a 2D Frame.
-*        astPermAxes
-*           Permute the order of a Frame's axes.
-*        astPickAxes
-*           Create a new Frame by picking axes from an existing one.
-*        astResolve
-*           Resolve a vector into two orthogonal components.
-*        astUnformat
-*           Read a formatted coordinate value for a Frame axis.
-
-*     Protected:
-*        astAbbrev
-*           Abbreviate a formatted Frame axis value by skipping
-*           leading fields.
-*        astCheckPerm
-*           Check that an array contains a valid permutation.
-*        astClearDigits
-*           Clear the Digits attribute for a Frame.
-*        astClearDirection
-*           Clear the Direction attribute for a Frame axis.
-*        astClearDomain
-*           Clear the Domain attribute for a Frame.
-*        astClearFormat
-*           Clear the Format attribute for a Frame axis.
-*        astClearLabel
-*           Clear the Label attribute for a Frame axis.
-*        astClearMatchEnd
-*           Clear the MatchEnd attribute for a Frame.
-*        astClearMaxAxes
-*           Clear the MaxAxes attribute for a Frame.
-*        astClearMinAxes
-*           Clear the MinAxes attribute for a Frame.
-*        astClearPermute
-*           Clear the Permute attribute for a Frame.
-*        astClearPreserveAxes
-*           Clear the PreserveAxes attribute for a Frame.
-*        astClearSymbol
-*           Clear the Symbol attribute for a Frame axis.
-*        astClearSystem
-*           Clear the value of the System attribute for a Frame.
-*        astClearTitle
-*           Clear the Title attribute for a Frame.
-*        astClearUnit
-*           Clear the Unit attribute for a Frame axis.
-*        astConvertX
-*           Determine how to convert between two coordinate systems.
-*        astFields
-*           Identify the fields within a formatted Frame axis value.
-*        astGap
-*           Find a "nice" gap for tabulating Frame axis values.
-*        astGetAxis
-*           Obtain a pointer to a specified Axis from a Frame.
-*        astGetDigits
-*           Get the value of the Digits attribute for a Frame.
-*        astGetDirection
-*           Get the value of the Direction attribute for a Frame axis.
-*        astGetDomain
-*           Get a pointer to the Domain attribute for a Frame.
-*        astGetFormat
-*           Get a pointer to the Format attribute for a Frame axis.
-*        astGetLabel
-*           Get a pointer to the Label attribute for a Frame axis.
-*        astGetMatchEnd
-*           Get the value of the MatchEnd attribute for a Frame.
-*        astGetMaxAxes
-*           Get the value of the MaxAxes attribute for a Frame.
-*        astGetMinAxes
-*           Get the value of the MinAxes attribute for a Frame.
-*        astGetNaxes
-*           Determine how many axes a Frame has.
-*        astGetPerm
-*           Access the axis permutation array for a Frame.
-*        astGetPermute
-*           Get the value of the Permute attribute for a Frame.
-*        astGetPreserveAxes
-*           Get the value of the PreserveAxes attribute for a Frame.
-*        astGetSymbol
-*           Get a pointer to the Symbol attribute for a Frame axis.
-*        astGetSystem
-*           Get the value of the System attribute for a Frame.
-*        astGetTitle
-*           Get a pointer to the Title attribute for a Frame.
-*        astGetUnit
-*           Get a pointer to the Unit attribute for a Frame axis.
-*        astIsUnitFrame
-*           Returns a flag indicating if a Frame is equivalent to a UnitMap.
-*        astMatch
-*           Determine if conversion is possible between two coordinate systems.
-*        astOverlay
-*           Overlay the attributes of a template Frame on to another Frame.
-*        astPrimaryFrame
-*           Uniquely identify a primary Frame and one of its axes.
-*        astResolvePoints
-*           Resolve many vectors into two orthogonal components.
-*        astSetAxis
-*           Set a new Axis for a Frame.
-*        astSetDigits
-*           Set the value of the Digits attribute for a Frame.
-*        astSetDirection
-*           Set the value of the Direction attribute for a Frame axis.
-*        astSetDomain
-*           Set the value of the Domain attribute for a Frame.
-*        astSetFormat
-*           Set the value of the Format attribute for a Frame axis.
-*        astSetLabel
-*           Set the value of the Label attribute for a Frame axis.
-*        astSetMatchEnd
-*           Set the value of the MatchEnd attribute for a Frame.
-*        astSetMaxAxes
-*           Set the value of the MaxAxes attribute for a Frame.
-*        astSetMinAxes
-*           Set the value of the MinAxes attribute for a Frame.
-*        astSetPermute
-*           Set the value of the Permute attribute for a Frame.
-*        astSetPreserveAxes
-*           Set the value of the PreserveAxes attribute for a Frame.
-*        astSetSymbol
-*           Set the value of the Symbol attribute for a Frame axis.
-*        astSetSystem
-*           Set the value of the System attribute for a Frame.
-*        astSetTitle
-*           Set the value of the Title attribute for a Frame.
-*        astSetUnit
-*           Set the value of the Unit attribute for a Frame axis.
-*        astSubFrame
-*           Select axes from a Frame and convert to the new coordinate system.
-*        astTestDigits
-*           Test whether a value has been set for the Digits attribute of a
-*           Frame.
-*        astTestDirection
-*           Test whether a value has been set for the Direction attribute of a
-*           Frame axis.
-*        astTestDomain
-*           Test whether a value has been set for the Domain attribute of a
-*           Frame.
-*        astTestFormat
-*           Test whether a value has been set for the Format attribute of a
-*           Frame axis.
-*        astTestLabel
-*           Test whether a value has been set for the Label attribute of a
-*           Frame axis.
-*        astTestMatchEnd
-*           Test whether a value has been set for the MatchEnd attribute of a
-*           Frame.
-*        astTestMaxAxes
-*           Test whether a value has been set for the MaxAxes attribute of a
-*           Frame.
-*        astTestMinAxes
-*           Test whether a value has been set for the MinAxes attribute of a
-*           Frame.
-*        astTestPermute
-*           Test whether a value has been set for the Permute attribute of a
-*           Frame.
-*        astTestPreserveAxes
-*           Test whether a value has been set for the PreserveAxes attribute of
-*           a Frame.
-*        astTestSymbol
-*           Test whether a value has been set for the Symbol attribute of a
-*           Frame axis.
-*        astTestSystem
-*           Test whether a value has been set for the System attribute of a
-*           Frame.
-*        astTestTitle
-*           Test whether a value has been set for the Title attribute of a
-*           Frame.
-*        astTestUnit
-*           Test whether a value has been set for the Unit attribute of a Frame
-*           axis.
-*        astValidateAxis
-*           Validate and permute a Frame's axis index.
-*        astValidateAxisSelection
-*           Check that a set of axes selected from a Frame is valid.
-*        astValidateSystem
-*           Validate a Frame's System attribute.
-*        astSystemString
-*           Return a string representation of a System code.
-*        astSystemCode
-*           Return a code for a string representation of a System value
-
-*  Other Class Functions:
-*     Public:
-*        astFrame
-*           Create a Frame.
-*        astIsAFrame
-*           Test class membership.
-
-*     Protected:
-*        astCheckFrame
-*           Validate class membership.
-*        astInitFrame
-*           Initialise a Frame.
-*        astInitFrameVtab
-*           Initialise the virtual function table for the Frame class.
-*        astLoadFrame
-*           Load a Frame.
-
-*  Macros:
-*     Public:
-*        None.
-
-*     Protected:
-*        AST__BADSYSTEM
-*           A "bad" (undefined) value for the System attribute.
-
-*  Type Definitions:
-*     Public:
-*        AstFrame
-*           Frame object type.
-
-*     Protected:
-*        AstFrameVtab
-*           Frame virtual function table type.
-*        AstSystemType
-*           Enumerated type used for the System attribute.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: B.S. Berry (Starlink)
-
-*  History:
-*     1-MAR-1996 (RFWS):
-*        Original version.
-*     25-APR-1996 (RFWS):
-*        Tidied up, etc.
-*     11-SEP-1996 (RFWS):
-*        Added astGap (written by DSB).
-*     10-JUN-1997 (RFWS):
-*        Revised astConvert and added astFindFrame.
-*     15-FEB-1998 (RFWS):
-*        Added astUnformat.
-*     21-JUN-2001 (DSB):
-*        Added astAngle and astOffset2.
-*     29-AUG-2001 (DSB):
-*        Added astAxDistance and astAxOffset.
-*     4-SEP-2001 (DSB):
-*        Added astResolve.
-*     9-SEP-2001 (DSB):
-*        Added astBear.
-*     21-SEP-2001 (DSB):
-*        Replace astBear with astAxAngle.
-*     15-NOV-2002 (DSB):
-*        Moved System and Epoch attributes from SkyFrame into this class.
-*        Added AlignSystem attribute.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitFrameVtab method.
-*     24-JAN-2004 (DSB):
-*        o  Added astFields.
-*        o  Added argument "fmt" to astAbbrev.
-*     24-JUN-2004 (DSB):
-*        Remove unused entry "void (* SetMatchRange)( AstFrame *, int, int );"
-*        from AstFrameVtab structure.
-*     9-NOV-2004 (DSB):
-*        Added protected astIsAUnitFrame method.
-*     12-AUG-2005 (DSB):
-*        Added ObsLat and ObsLon attributes.
-*     14-OCT-2006 (DSB):
-*        Added dut1 to the Frame structure.
-*        Added Dut1 accessor methods.
-*     17-MAY-2007 (DSB):
-*        Added NormUnit attribute.
-*     14-JAN-2009 (DSB):
-*        Added astIntersect method.
-*     18-JUN-2009 (DSB):
-*        Added ObsAlt attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "axis.h"                /* Coordinate Axis class */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros. */
-/* ------- */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* A bad value for the System attribute. */
-#define AST__BADSYSTEM -1
-
-/* The legal System values recognized by this class of Frame. */
-#define AST__CART 0
-
-/* Flag bitmasks for use with astSetFrameFlags. */
-# define AST__INTFLAG 1  /* FrameSet integrity is currently being restored */
-
-/* Define constants used to size global arrays in this module. */
-#define AST__FRAME_LABEL_BUFF_LEN 100       /* Max length of default axis Label string */
-#define AST__FRAME_SYMBOL_BUFF_LEN 50       /* Max length of default axis Symbol string */
-#define AST__FRAME_TITLE_BUFF_LEN 100       /* Max length of default title string */
-#define AST__FRAME_GETATTRIB_BUFF_LEN 50    /* Max length of string returned by GetAttrib */
-#define AST__FRAME_ASTFMTDECIMALYR_BUFF_LEN 50    /* Max length of string returned by GetAttrib */
-#define AST__FRAME_ASTFORMATID_MAX_STRINGS 50     /* Number of string values buffer by astFormatID*/
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Integer type used to store the System attribute values. */
-typedef int AstSystemType;
-
-/* Frame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstFrame {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstAxis **axis;               /* Pointer to array of Axis objects */
-   char *domain;                 /* Pointer to Domain string */
-   char *title;                  /* Pointer to Title string */
-   double epoch;                 /* Epoch as Modified Julian Date */
-   double obslat;                /* Geodetic latitude of observer */
-   double obslon;                /* Geodetic longitude of observer */
-   double obsalt;                /* Height above reference spheroid (geodetic, metres) */
-   double dut1;                  /* UT1-UTC in seconds */
-   int *perm;                    /* Pointer to axis permutation array */
-   int digits;                   /* Default digits of precision */
-   int match_end;                /* Match final axes of target? */
-   int active_unit;              /* Use Unit when aligning Frames? */
-   int max_axes;                 /* Minimum no. axes matched */
-   int min_axes;                 /* Max. no. axes matched */
-   int naxes;                    /* Number of axes */
-   int permute;                  /* Permute axes in order to match? */
-   int preserve_axes;            /* Preserve target axes? */
-   AstSystemType system;         /* Code identifying coordinate system */
-   AstSystemType alignsystem;    /* Code for Alignment coordinate system */
-   int flags;                    /* Bit mask containing various protected flags */
-} AstFrame;
-
-/* Cached Line structure. */
-/* ---------------------- */
-/* This structure contains information describing a line segment within a
-   2D Frame. It is used by other classes to store intermediate cached values
-   relating to the line in order to speed up repeated operations on the
-   line. */
-
-typedef struct AstLineDef {
-   AstFrame *frame;            /* Pointer to Frame in which the line is defined */
-   double length;              /* Line length */
-   int infinite;               /* Disregard the start and end of the line? */
-   double start[2];            /* Frame axis values at line start */
-   double end[2];              /* Frame axis values at line end */
-   double dir[2];              /* Unit vector defining line direction */
-   double q[2];                /* Unit vector perpendicular to line */
-} AstLineDef;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* The virtual function table makes a forward reference to the
-   AstFrameSet structure which is not defined until "frameset.h" is
-   included (below). Hence make a preliminary definition available
-   now. */
-struct AstFrameSet;
-
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping;       /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstAxis *(* GetAxis)( AstFrame *, int, int * );
-   AstFrame *(* PickAxes)( AstFrame *, int, const int[], AstMapping **, int * );
-   AstLineDef *(* LineDef)( AstFrame *, const double[2], const double[2], int * );
-   AstPointSet *(* ResolvePoints)( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-   const char *(* Abbrev)( AstFrame *, int, const char *, const char *, const char *, int * );
-   const char *(* Format)( AstFrame *, int, double, int * );
-   const char *(* GetDomain)( AstFrame *, int * );
-   const char *(* GetFormat)( AstFrame *, int, int * );
-   const char *(* GetLabel)( AstFrame *, int, int * );
-   const char *(* GetSymbol)( AstFrame *, int, int * );
-   const char *(* GetTitle)( AstFrame *, int * );
-   const char *(* GetNormUnit)( AstFrame *, int, int * );
-   const char *(* GetUnit)( AstFrame *, int, int * );
-   const int *(* GetPerm)( AstFrame *, int * );
-   double (* Angle)( AstFrame *, const double[], const double[], const double[], int * );
-   double (* Distance)( AstFrame *, const double[], const double[], int * );
-   double (* Gap)( AstFrame *, int, double, int *, int * );
-   int (* Fields)( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-   double (* AxDistance)( AstFrame *, int, double, double, int * );
-   double (* AxOffset)( AstFrame *, int, double, double, int * );
-   int (* AxIn)( AstFrame *, int, double, double, double, int, int * );
-   int (* GetDigits)( AstFrame *, int * );
-   int (* GetDirection)( AstFrame *, int, int * );
-   int (* GetMatchEnd)( AstFrame *, int * );
-   int (* GetMaxAxes)( AstFrame *, int * );
-   int (* GetMinAxes)( AstFrame *, int * );
-   int (* GetNaxes)( AstFrame *, int * );
-   int (* GetPermute)( AstFrame *, int * );
-   int (* GetPreserveAxes)( AstFrame *, int * );
-   int (* IsUnitFrame)( AstFrame *, int * );
-   int (* LineCrossing)( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-   int (* LineContains)( AstFrame *, AstLineDef *, int, double *, int * );
-   int (* Match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-   int (* SubFrame)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-   int (* TestDigits)( AstFrame *, int * );
-   int (* TestDirection)( AstFrame *, int, int * );
-   int (* TestDomain)( AstFrame *, int * );
-   int (* TestFormat)( AstFrame *, int, int * );
-   int (* TestLabel)( AstFrame *, int, int * );
-   int (* TestMatchEnd)( AstFrame *, int * );
-   int (* TestMaxAxes)( AstFrame *, int * );
-   int (* TestMinAxes)( AstFrame *, int * );
-   int (* TestPermute)( AstFrame *, int * );
-   int (* TestPreserveAxes)( AstFrame *, int * );
-   int (* TestSymbol)( AstFrame *, int, int * );
-   int (* TestTitle)( AstFrame *, int * );
-   int (* TestUnit)( AstFrame *, int, int * );
-   int (* Unformat)( AstFrame *, int, const char *, double *, int * );
-   int (* ValidateAxis)( AstFrame *, int, const char *, int * );
-   AstSystemType (* ValidateSystem)( AstFrame *, AstSystemType, const char *, int * );
-   AstSystemType (* SystemCode)( AstFrame *, const char *, int * );
-   const char *(* SystemString)( AstFrame *, AstSystemType, int * );
-   struct AstFrameSet *(* Convert)( AstFrame *, AstFrame *, const char *, int * );
-   struct AstFrameSet *(* ConvertX)( AstFrame *, AstFrame *, const char *, int * );
-   struct AstFrameSet *(* FindFrame)( AstFrame *, AstFrame *, const char *, int * );
-   void (* MatchAxes)( AstFrame *, AstFrame *, int[], int * );
-   void (* MatchAxesX)( AstFrame *, AstFrame *, int[], int * );
-   void (* CheckPerm)( AstFrame *, const int *, const char *, int * );
-   void (* ClearDigits)( AstFrame *, int * );
-   void (* ClearDirection)( AstFrame *, int, int * );
-   void (* ClearDomain)( AstFrame *, int * );
-   void (* ClearFormat)( AstFrame *, int, int * );
-   void (* ClearLabel)( AstFrame *, int, int * );
-   void (* ClearMatchEnd)( AstFrame *, int * );
-   void (* ClearMaxAxes)( AstFrame *, int * );
-   void (* ClearMinAxes)( AstFrame *, int * );
-   void (* ClearPermute)( AstFrame *, int * );
-   void (* ClearPreserveAxes)( AstFrame *, int * );
-   void (* ClearSymbol)( AstFrame *, int, int * );
-   void (* ClearTitle)( AstFrame *, int * );
-   void (* ClearUnit)( AstFrame *, int, int * );
-   void (* Intersect)( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-   void (* Norm)( AstFrame *, double[], int * );
-   void (* NormBox)( AstFrame *, double *, double *, AstMapping *, int * );
-   void (* Offset)( AstFrame *, const double[], const double[], double, double[], int * );
-   double (* AxAngle)( AstFrame *, const double[2], const double[2], int, int * );
-   double (* Offset2)( AstFrame *, const double[2], double, double, double[2], int * );
-   void (* Overlay)( AstFrame *, const int *, AstFrame *, int * );
-   void (* PermAxes)( AstFrame *, const int[], int * );
-   void (* PrimaryFrame)( AstFrame *, int, AstFrame **, int *, int * );
-   void (* Resolve)( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-   void (* SetAxis)( AstFrame *, int, AstAxis *, int * );
-   void (* SetDigits)( AstFrame *, int, int * );
-   void (* SetDirection)( AstFrame *, int, int, int * );
-   void (* SetDomain)( AstFrame *, const char *, int * );
-   void (* SetFormat)( AstFrame *, int, const char *, int * );
-   void (* SetLabel)( AstFrame *, int, const char *, int * );
-   void (* SetMatchEnd)( AstFrame *, int, int * );
-   void (* SetMaxAxes)( AstFrame *, int, int * );
-   void (* SetMinAxes)( AstFrame *, int, int * );
-   void (* SetPermute)( AstFrame *, int, int * );
-   void (* SetPreserveAxes)( AstFrame *, int, int * );
-   void (* SetSymbol)( AstFrame *, int, const char *, int * );
-   void (* SetTitle)( AstFrame *, const char *, int * );
-   void (* SetUnit)( AstFrame *, int, const char *, int * );
-   void (* ValidateAxisSelection)( AstFrame *, int, const int *, const char *, int * );
-   void (* LineOffset)( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-   double (* GetTop)( AstFrame *, int, int * );
-   int (* TestTop)( AstFrame *, int, int * );
-   void (* ClearTop)( AstFrame *, int, int * );
-   void (* SetTop)( AstFrame *, int, double, int * );
-
-   double (* GetBottom)( AstFrame *, int, int * );
-   int (* TestBottom)( AstFrame *, int, int * );
-   void (* ClearBottom)( AstFrame *, int, int * );
-   void (* SetBottom)( AstFrame *, int, double, int * );
-
-   AstSystemType (* GetSystem)( AstFrame *, int * );
-   int (* TestSystem)( AstFrame *, int * );
-   void (* ClearSystem)( AstFrame *, int * );
-   void (* SetSystem)( AstFrame *, AstSystemType, int * );
-
-   AstSystemType (* GetAlignSystem)( AstFrame *, int * );
-   int (* TestAlignSystem)( AstFrame *, int * );
-   void (* ClearAlignSystem)( AstFrame *, int * );
-   void (* SetAlignSystem)( AstFrame *, AstSystemType, int * );
-
-   double (* GetEpoch)( AstFrame *, int * );
-   int (* TestEpoch)( AstFrame *, int * );
-   void (* ClearEpoch)( AstFrame *, int * );
-   void (* SetEpoch)( AstFrame *, double, int * );
-
-   int (* TestActiveUnit)( AstFrame *, int * );
-   int (* GetActiveUnit)( AstFrame *, int * );
-   void (* SetActiveUnit)( AstFrame *, int, int * );
-
-   double (* GetObsLon)( AstFrame *, int * );
-   int (* TestObsLon)( AstFrame *, int * );
-   void (* ClearObsLon)( AstFrame *, int * );
-   void (* SetObsLon)( AstFrame *, double, int * );
-
-   double (* GetObsLat)( AstFrame *, int * );
-   int (* TestObsLat)( AstFrame *, int * );
-   void (* ClearObsLat)( AstFrame *, int * );
-   void (* SetObsLat)( AstFrame *, double, int * );
-
-   double (* GetObsAlt)( AstFrame *, int * );
-   int (* TestObsAlt)( AstFrame *, int * );
-   void (* ClearObsAlt)( AstFrame *, int * );
-   void (* SetObsAlt)( AstFrame *, double, int * );
-
-   double (* GetDut1)( AstFrame *, int * );
-   int (* TestDut1)( AstFrame *, int * );
-   void (* ClearDut1)( AstFrame *, int * );
-   void (* SetDut1)( AstFrame *, double, int * );
-
-   void (* SetFrameFlags)( AstFrame *, int, int * );
-   int (* GetFrameFlags)( AstFrame *, int * );
-
-} AstFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstFrameGlobals {
-   AstFrameVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__FRAME_GETATTRIB_BUFF_LEN + 1 ];
-   char *AstFormatID_Strings[ AST__FRAME_ASTFORMATID_MAX_STRINGS ];
-   int AstFormatID_Istr;
-   int AstFormatID_Init;
-   char Label_Buff[ AST__FRAME_LABEL_BUFF_LEN + 1 ];
-   char Symbol_Buff[ AST__FRAME_SYMBOL_BUFF_LEN + 1 ];
-   char Title_Buff[ AST__FRAME_TITLE_BUFF_LEN + 1 ];
-   char AstFmtDecimalYr_Buff[ AST__FRAME_ASTFMTDECIMALYR_BUFF_LEN + 1 ]; 
-} AstFrameGlobals;
-
-#endif
-#endif
-
-/* More include files. */
-/* =================== */
-/* The interface to the FrameSet class must be included here (after
-   the type definitions for the Frame class) because "frameset.h"
-   itself includes this file ("frame.h"), although "frameset.h" refers
-   to the AstFrameSet structure above. This seems a little strange at
-   first, but is simply analogous to making a forward reference to a
-   structure type when recursively defining a normal C structure
-   (except that here the definitions happen to be in separate include
-   files). */
-#include "frameset.h"
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Frame)            /* Check class membership */
-astPROTO_ISA(Frame)              /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstFrame *astFrame_( int, const char *, int *, ...);
-#else
-AstFrame *astFrameId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstFrame *astInitFrame_( void *, size_t, int, AstFrameVtab *, const char *,
-                         int, int * );
-
-/* Vtab initialiser. */
-void astInitFrameVtab_( AstFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstFrame *astLoadFrame_( void *, size_t, AstFrameVtab *,
-                         const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitFrameGlobals_( AstFrameGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstFrameSet *astConvert_( AstFrame *, AstFrame *, const char *, int * );
-AstFrameSet *astFindFrame_( AstFrame *, AstFrame *, const char *, int * );
-double astAngle_( AstFrame *, const double[], const double[], const double[], int * );
-double astAxAngle_( AstFrame *, const double[2], const double[2], int, int * );
-double astAxDistance_( AstFrame *, int, double, double, int * );
-double astAxOffset_( AstFrame *, int, double, double, int * );
-double astDistance_( AstFrame *, const double[], const double[], int * );
-double astOffset2_( AstFrame *, const double[2], double, double, double[2], int * );
-int astGetActiveUnit_( AstFrame *, int * );
-void astIntersect_( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-void astMatchAxes_( AstFrame *, AstFrame *, int[], int * );
-void astNorm_( AstFrame *, double[], int * );
-void astOffset_( AstFrame *, const double[], const double[], double, double[], int * );
-void astResolve_( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-void astSetActiveUnit_( AstFrame *, int, int * );
-
-#if defined(astCLASS)            /* Protected */
-void astNormBox_( AstFrame *, double *, double *, AstMapping *, int * );
-AstFrame *astPickAxes_( AstFrame *, int, const int[], AstMapping **, int * );
-const char *astFormat_( AstFrame *, int, double, int * );
-int astUnformat_( AstFrame *, int, const char *, double *, int * );
-void astPermAxes_( AstFrame *, const int[], int * );
-#else
-AstFrame *astPickAxesId_( AstFrame *, int, const int[], AstMapping **, int * );
-const char *astFormatId_( AstFrame *, int, double, int * );
-int astUnformatId_( AstFrame *, int, const char *, double *, int * );
-void astPermAxesId_( AstFrame *, const int[], int * );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-int astAxIn_( AstFrame *, int, double, double, double, int, int * );
-AstAxis * astGetAxis_( AstFrame *, int, int * );
-AstFrameSet *astConvertX_( AstFrame *, AstFrame *, const char *, int * );
-void astMatchAxesX_( AstFrame *, AstFrame *, int[], int * );
-AstLineDef *astLineDef_( AstFrame *, const double[2], const double[2], int * );
-AstPointSet *astResolvePoints_( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-const char *astAbbrev_( AstFrame *, int, const char *, const char *, const char *, int * );
-const char *astGetDomain_( AstFrame *, int * );
-const char *astGetFormat_( AstFrame *, int, int * );
-const char *astGetLabel_( AstFrame *, int, int * );
-const char *astGetSymbol_( AstFrame *, int, int * );
-const char *astGetTitle_( AstFrame *, int * );
-const char *astGetUnit_( AstFrame *, int, int * );
-const char *astGetNormUnit_( AstFrame *, int, int * );
-const int *astGetPerm_( AstFrame *, int * );
-double astGap_( AstFrame *, int, double, int *, int * );
-int astFields_( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-int astGetDigits_( AstFrame *, int * );
-int astGetDirection_( AstFrame *, int, int * );
-int astGetMatchEnd_( AstFrame *, int * );
-int astGetMaxAxes_( AstFrame *, int * );
-int astGetMinAxes_( AstFrame *, int * );
-int astGetNaxes_( AstFrame *, int * );
-int astGetPermute_( AstFrame *, int * );
-int astGetPreserveAxes_( AstFrame *, int * );
-int astIsUnitFrame_( AstFrame *, int * );
-int astLineCrossing_( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-int astLineContains_( AstFrame *, AstLineDef *, int, double *, int * );
-int astMatch_( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-int astSubFrame_( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-int astTestDigits_( AstFrame *, int * );
-int astTestDirection_( AstFrame *, int, int * );
-int astTestDomain_( AstFrame *, int * );
-int astTestFormat_( AstFrame *, int, int * );
-int astTestLabel_( AstFrame *, int, int * );
-int astTestMatchEnd_( AstFrame *, int * );
-int astTestMaxAxes_( AstFrame *, int * );
-int astTestMinAxes_( AstFrame *, int * );
-int astTestPermute_( AstFrame *, int * );
-int astTestPreserveAxes_( AstFrame *, int * );
-int astTestSymbol_( AstFrame *, int, int * );
-int astTestTitle_( AstFrame *, int * );
-int astTestUnit_( AstFrame *, int, int * );
-int astValidateAxis_( AstFrame *, int, const char *, int * );
-AstSystemType astValidateSystem_( AstFrame *, AstSystemType, const char *, int * );
-AstSystemType astSystemCode_( AstFrame *, const char *, int * );
-const char *astSystemString_( AstFrame *, AstSystemType, int * );
-void astCheckPerm_( AstFrame *, const int *, const char *, int * );
-void astClearDigits_( AstFrame *, int * );
-void astClearDirection_( AstFrame *, int, int * );
-void astClearDomain_( AstFrame *, int * );
-void astClearFormat_( AstFrame *, int, int * );
-void astClearLabel_( AstFrame *, int, int * );
-void astClearMatchEnd_( AstFrame *, int * );
-void astClearMaxAxes_( AstFrame *, int * );
-void astClearMinAxes_( AstFrame *, int * );
-void astClearPermute_( AstFrame *, int * );
-void astClearPreserveAxes_( AstFrame *, int * );
-void astClearSymbol_( AstFrame *, int, int * );
-void astClearTitle_( AstFrame *, int * );
-void astClearUnit_( AstFrame *, int, int * );
-void astOverlay_( AstFrame *, const int *, AstFrame *, int * );
-void astPrimaryFrame_( AstFrame *, int, AstFrame **, int *, int * );
-void astSetAxis_( AstFrame *, int, AstAxis *, int * );
-void astSetDigits_( AstFrame *, int, int * );
-void astSetDirection_( AstFrame *, int, int, int * );
-void astSetDomain_( AstFrame *, const char *, int * );
-void astSetFormat_( AstFrame *, int, const char *, int * );
-void astSetLabel_( AstFrame *, int, const char *, int * );
-void astSetMatchEnd_( AstFrame *, int, int * );
-void astSetMaxAxes_( AstFrame *, int, int * );
-void astSetMinAxes_( AstFrame *, int, int * );
-void astSetPermute_( AstFrame *, int, int * );
-void astSetPreserveAxes_( AstFrame *, int, int * );
-void astSetSymbol_( AstFrame *, int, const char *, int * );
-void astSetTitle_( AstFrame *, const char *, int * );
-void astSetUnit_( AstFrame *, int, const char *, int * );
-void astValidateAxisSelection_( AstFrame *, int, const int *, const char *, int * );
-double astReadDateTime_( const char *, int * );
-const char *astFmtDecimalYr_( double, int, int * );
-void astLineOffset_( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-double astGetTop_( AstFrame *, int, int * );
-int astTestTop_( AstFrame *, int, int * );
-void astClearTop_( AstFrame *, int, int * );
-void astSetTop_( AstFrame *, int, double, int * );
-
-double astGetBottom_( AstFrame *, int, int * );
-int astTestBottom_( AstFrame *, int, int * );
-void astClearBottom_( AstFrame *, int, int * );
-void astSetBottom_( AstFrame *, int, double, int * );
-
-AstSystemType astGetSystem_( AstFrame *, int * );
-int astTestSystem_( AstFrame *, int * );
-void astClearSystem_( AstFrame *, int * );
-void astSetSystem_( AstFrame *, AstSystemType, int * );
-
-AstSystemType astGetAlignSystem_( AstFrame *, int * );
-int astTestAlignSystem_( AstFrame *, int * );
-void astClearAlignSystem_( AstFrame *, int * );
-void astSetAlignSystem_( AstFrame *, AstSystemType, int * );
-
-double astGetEpoch_( AstFrame *, int * );
-int astTestEpoch_( AstFrame *, int * );
-void astClearEpoch_( AstFrame *, int * );
-void astSetEpoch_( AstFrame *, double, int * );
-
-double astGetObsLon_( AstFrame *, int * );
-int astTestObsLon_( AstFrame *, int * );
-void astClearObsLon_( AstFrame *, int * );
-void astSetObsLon_( AstFrame *, double, int * );
-
-double astGetObsLat_( AstFrame *, int * );
-int astTestObsLat_( AstFrame *, int * );
-void astClearObsLat_( AstFrame *, int * );
-void astSetObsLat_( AstFrame *, double, int * );
-
-double astGetObsAlt_( AstFrame *, int * );
-int astTestObsAlt_( AstFrame *, int * );
-void astClearObsAlt_( AstFrame *, int * );
-void astSetObsAlt_( AstFrame *, double, int * );
-
-double astGetDut1_( AstFrame *, int * );
-int astTestDut1_( AstFrame *, int * );
-void astClearDut1_( AstFrame *, int * );
-void astSetDut1_( AstFrame *, double, int * );
-
-int astTestActiveUnit_( AstFrame *, int * );
-
-void astSetFrameFlags_( AstFrame *, int, int * );
-int astGetFrameFlags_( AstFrame *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
-   them easier to invoke (e.g. to avoid type mis-matches when passing pointers
-   to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
-   validate their own arguments. We must use a cast when passing object
-   pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckFrame(this) astINVOKE_CHECK(Frame,this,0)
-#define astVerifyFrame(this) astINVOKE_CHECK(Frame,this,1)
-
-/* Test class membership. */
-#define astIsAFrame(this) astINVOKE_ISA(Frame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astFrame astINVOKE(F,astFrame_)
-#else
-#define astFrame astINVOKE(F,astFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitFrame(mem,size,init,vtab,name,naxes) \
-astINVOKE(O,astInitFrame_(mem,size,init,vtab,name,naxes,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFrameVtab(vtab,name) astINVOKE(V,astInitFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckFrame to validate Frame pointers before
-   use. This provides a contextual error report if a pointer to the
-   wrong sort of Object is supplied. */
-#define astConvert(from,to,domainlist) \
-astINVOKE(O,astConvert_(astCheckFrame(from),astCheckFrame(to),domainlist,STATUS_PTR))
-#define astAngle(this,a,b,c) \
-astINVOKE(V,astAngle_(astCheckFrame(this),a,b,c,STATUS_PTR))
-#define astDistance(this,point1,point2) \
-astINVOKE(V,astDistance_(astCheckFrame(this),point1,point2,STATUS_PTR))
-#define astFindFrame(target,template,domainlist) \
-astINVOKE(O,astFindFrame_(astCheckFrame(target),astCheckFrame(template),domainlist,STATUS_PTR))
-#define astMatchAxes(frm1,frm2,axes) \
-astINVOKE(V,astMatchAxes_(astCheckFrame(frm1),astCheckFrame(frm2),axes,STATUS_PTR))
-#define astNorm(this,value) \
-astINVOKE(V,astNorm_(astCheckFrame(this),value,STATUS_PTR))
-#define astAxDistance(this,axis,v1,v2) \
-astINVOKE(V,astAxDistance_(astCheckFrame(this),axis,v1,v2,STATUS_PTR))
-#define astAxOffset(this,axis,v1,dist) \
-astINVOKE(V,astAxOffset_(astCheckFrame(this),axis,v1,dist,STATUS_PTR))
-#define astOffset(this,point1,point2,offset,point3) \
-astINVOKE(V,astOffset_(astCheckFrame(this),point1,point2,offset,point3,STATUS_PTR))
-#define astAxAngle(this,a,b,axis) \
-astINVOKE(V,astAxAngle_(astCheckFrame(this),a,b,axis,STATUS_PTR))
-#define astIntersect(this,a1,a2,b1,b2,cross) \
-astINVOKE(V,astIntersect_(astCheckFrame(this),a1,a2,b1,b2,cross,STATUS_PTR))
-#define astOffset2(this,point1,angle,offset,point2) \
-astINVOKE(V,astOffset2_(astCheckFrame(this),point1,angle,offset,point2,STATUS_PTR))
-#define astResolve(this,point1,point2,point3,point4,d1,d2) \
-astINVOKE(V,astResolve_(astCheckFrame(this),point1,point2,point3,point4,d1,d2,STATUS_PTR))
-#define astGetActiveUnit(this) \
-astINVOKE(V,astGetActiveUnit_(astCheckFrame(this),STATUS_PTR))
-#define astSetActiveUnit(this,value) \
-astINVOKE(V,astSetActiveUnit_(astCheckFrame(this),value,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astNormBox(this,lbnd,ubnd,reg) \
-astINVOKE(V,astNormBox_(astCheckFrame(this),lbnd,ubnd,astCheckMapping(reg),STATUS_PTR))
-#define astFormat(this,axis,value) \
-astINVOKE(V,astFormat_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astPermAxes(this,perm) \
-astINVOKE(V,astPermAxes_(astCheckFrame(this),perm,STATUS_PTR))
-#define astPickAxes(this,naxes,axes,map) \
-astINVOKE(O,astPickAxes_(astCheckFrame(this),naxes,axes,(AstMapping **)(map),STATUS_PTR))
-#define astUnformat(this,axis,string,value) \
-astINVOKE(V,astUnformat_(astCheckFrame(this),axis,string,value,STATUS_PTR))
-#else
-#define astFormat(this,axis,value) \
-astINVOKE(V,astFormatId_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astPermAxes(this,perm) \
-astINVOKE(V,astPermAxesId_(astCheckFrame(this),perm,STATUS_PTR))
-#define astPickAxes(this,naxes,axes,map) \
-astINVOKE(O,astPickAxesId_(astCheckFrame(this),naxes,axes,(AstMapping **)(map),STATUS_PTR))
-#define astUnformat(this,axis,string,value) \
-astINVOKE(V,astUnformatId_(astCheckFrame(this),axis,string,value,STATUS_PTR))
-#endif
-
-#if defined(astCLASS)            /* Protected */
-#define astAxIn(this,axis,lo,hi,val,closed) \
-astINVOKE(V,astAxIn_(astCheckFrame(this),axis,lo,hi,val,closed,STATUS_PTR))
-#define astAbbrev(this,axis,fmt,str1,str2) \
-astINVOKE(V,astAbbrev_(astCheckFrame(this),axis,fmt,str1,str2,STATUS_PTR))
-#define astFields(this,axis,fmt,str,maxfld,fields,nc,val) \
-astINVOKE(V,astFields_(astCheckFrame(this),axis,fmt,str,maxfld,fields,nc,val,STATUS_PTR))
-#define astCheckPerm(this,perm,method) \
-astINVOKE(V,astCheckPerm_(astCheckFrame(this),perm,method,STATUS_PTR))
-#define astResolvePoints(this,p1,p2,in,out) \
-astINVOKE(O,astResolvePoints_(astCheckFrame(this),p1,p2,astCheckPointSet(in),((out)?astCheckPointSet(out):NULL),STATUS_PTR))
-#define astLineDef(this,p1,p2) \
-astINVOKE(V,astLineDef_(astCheckFrame(this),p1,p2,STATUS_PTR))
-#define astLineOffset(this,line,par,prp,point) \
-astINVOKE(V,astLineOffset_(astCheckFrame(this),line,par,prp,point,STATUS_PTR))
-#define astLineCrossing(this,l1,l2,cross) \
-astINVOKE(V,astLineCrossing_(astCheckFrame(this),l1,l2,cross,STATUS_PTR))
-#define astLineContains(this,l,def,point) \
-astINVOKE(V,astLineContains_(astCheckFrame(this),l,def,point,STATUS_PTR))
-#define astClearDigits(this) \
-astINVOKE(V,astClearDigits_(astCheckFrame(this),STATUS_PTR))
-#define astClearDirection(this,axis) \
-astINVOKE(V,astClearDirection_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearDomain(this) \
-astINVOKE(V,astClearDomain_(astCheckFrame(this),STATUS_PTR))
-#define astClearFormat(this,axis) \
-astINVOKE(V,astClearFormat_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearLabel(this,axis) \
-astINVOKE(V,astClearLabel_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearMatchEnd(this) \
-astINVOKE(V,astClearMatchEnd_(astCheckFrame(this),STATUS_PTR))
-#define astClearMaxAxes(this) \
-astINVOKE(V,astClearMaxAxes_(astCheckFrame(this),STATUS_PTR))
-#define astClearMinAxes(this) \
-astINVOKE(V,astClearMinAxes_(astCheckFrame(this),STATUS_PTR))
-#define astClearPermute(this) \
-astINVOKE(V,astClearPermute_(astCheckFrame(this),STATUS_PTR))
-#define astClearPreserveAxes(this) \
-astINVOKE(V,astClearPreserveAxes_(astCheckFrame(this),STATUS_PTR))
-#define astClearSymbol(this,axis) \
-astINVOKE(V,astClearSymbol_(astCheckFrame(this),axis,STATUS_PTR))
-#define astClearTitle(this) \
-astINVOKE(V,astClearTitle_(astCheckFrame(this),STATUS_PTR))
-#define astClearUnit(this,axis) \
-astINVOKE(V,astClearUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astConvertX(to,from,domainlist) \
-astINVOKE(O,astConvertX_(astCheckFrame(to),astCheckFrame(from),domainlist,STATUS_PTR))
-#define astGap(this,axis,gap,ntick) \
-astINVOKE(V,astGap_(astCheckFrame(this),axis,gap,ntick,STATUS_PTR))
-#define astGetAxis(this,axis) \
-astINVOKE(O,astGetAxis_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetDigits(this) \
-astINVOKE(V,astGetDigits_(astCheckFrame(this),STATUS_PTR))
-#define astGetDirection(this,axis) \
-astINVOKE(V,astGetDirection_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetDomain(this) \
-astINVOKE(V,astGetDomain_(astCheckFrame(this),STATUS_PTR))
-#define astGetFormat(this,axis) \
-astINVOKE(V,astGetFormat_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetLabel(this,axis) \
-astINVOKE(V,astGetLabel_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetMatchEnd(this) \
-astINVOKE(V,astGetMatchEnd_(astCheckFrame(this),STATUS_PTR))
-#define astGetMaxAxes(this) \
-astINVOKE(V,astGetMaxAxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetMinAxes(this) \
-astINVOKE(V,astGetMinAxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetNaxes(this) \
-astINVOKE(V,astGetNaxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetPerm(this) \
-astINVOKE(V,astGetPerm_(astCheckFrame(this),STATUS_PTR))
-#define astGetPermute(this) \
-astINVOKE(V,astGetPermute_(astCheckFrame(this),STATUS_PTR))
-#define astGetPreserveAxes(this) \
-astINVOKE(V,astGetPreserveAxes_(astCheckFrame(this),STATUS_PTR))
-#define astGetSymbol(this,axis) \
-astINVOKE(V,astGetSymbol_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetTitle(this) \
-astINVOKE(V,astGetTitle_(astCheckFrame(this),STATUS_PTR))
-#define astGetUnit(this,axis) \
-astINVOKE(V,astGetUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetNormUnit(this,axis) \
-astINVOKE(V,astGetNormUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astMatch(template,target,template_axes,target_axes,map,result) \
-astINVOKE(V,astMatch_(astCheckFrame(template),astCheckFrame(target),template_axes,target_axes,(AstMapping **)(map),(AstFrame **)(result),STATUS_PTR))
-#define astIsUnitFrame(this) \
-astINVOKE(V,astIsUnitFrame_(astCheckFrame(this),STATUS_PTR))
-#define astOverlay(template,template_axes,result) \
-astINVOKE(V,astOverlay_(astCheckFrame(template),template_axes,astCheckFrame(result),STATUS_PTR))
-#define astPrimaryFrame(this,axis1,frame,axis2) \
-astINVOKE(V,astPrimaryFrame_(astCheckFrame(this),axis1,(AstFrame **)(frame),axis2,STATUS_PTR))
-#define astSetAxis(this,axis,newaxis) \
-astINVOKE(V,astSetAxis_(astCheckFrame(this),axis,astCheckAxis(newaxis),STATUS_PTR))
-#define astSetDigits(this,digits) \
-astINVOKE(V,astSetDigits_(astCheckFrame(this),digits,STATUS_PTR))
-#define astSetDirection(this,axis,direction) \
-astINVOKE(V,astSetDirection_(astCheckFrame(this),axis,direction,STATUS_PTR))
-#define astSetDomain(this,domain) \
-astINVOKE(V,astSetDomain_(astCheckFrame(this),domain,STATUS_PTR))
-#define astSetFormat(this,axis,format) \
-astINVOKE(V,astSetFormat_(astCheckFrame(this),axis,format,STATUS_PTR))
-#define astSetLabel(this,axis,label) \
-astINVOKE(V,astSetLabel_(astCheckFrame(this),axis,label,STATUS_PTR))
-#define astSetMatchEnd(this,value) \
-astINVOKE(V,astSetMatchEnd_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetMaxAxes(this,value) \
-astINVOKE(V,astSetMaxAxes_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetMinAxes(this,value) \
-astINVOKE(V,astSetMinAxes_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetPermute(this,value) \
-astINVOKE(V,astSetPermute_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetPreserveAxes(this,value) \
-astINVOKE(V,astSetPreserveAxes_(astCheckFrame(this),value,STATUS_PTR))
-#define astSetSymbol(this,axis,symbol) \
-astINVOKE(V,astSetSymbol_(astCheckFrame(this),axis,symbol,STATUS_PTR))
-#define astSetTitle(this,title) \
-astINVOKE(V,astSetTitle_(astCheckFrame(this),title,STATUS_PTR))
-#define astSetUnit(this,axis,unit) \
-astINVOKE(V,astSetUnit_(astCheckFrame(this),axis,unit,STATUS_PTR))
-#define astSubFrame(target,template,result_naxes,target_axes,template_axes,map,result) \
-astINVOKE(V,astSubFrame_(astCheckFrame(target),template?astCheckFrame(template):NULL,result_naxes,target_axes,template_axes,(AstMapping **)(map),(AstFrame **)(result),STATUS_PTR))
-#define astTestDigits(this) \
-astINVOKE(V,astTestDigits_(astCheckFrame(this),STATUS_PTR))
-#define astTestDirection(this,axis) \
-astINVOKE(V,astTestDirection_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestDomain(this) \
-astINVOKE(V,astTestDomain_(astCheckFrame(this),STATUS_PTR))
-#define astTestFormat(this,axis) \
-astINVOKE(V,astTestFormat_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestLabel(this,axis) \
-astINVOKE(V,astTestLabel_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestMatchEnd(this) \
-astINVOKE(V,astTestMatchEnd_(astCheckFrame(this),STATUS_PTR))
-#define astTestMaxAxes(this) \
-astINVOKE(V,astTestMaxAxes_(astCheckFrame(this),STATUS_PTR))
-#define astTestMinAxes(this) \
-astINVOKE(V,astTestMinAxes_(astCheckFrame(this),STATUS_PTR))
-#define astTestPermute(this) \
-astINVOKE(V,astTestPermute_(astCheckFrame(this),STATUS_PTR))
-#define astTestPreserveAxes(this) \
-astINVOKE(V,astTestPreserveAxes_(astCheckFrame(this),STATUS_PTR))
-#define astTestSymbol(this,axis) \
-astINVOKE(V,astTestSymbol_(astCheckFrame(this),axis,STATUS_PTR))
-#define astTestTitle(this) \
-astINVOKE(V,astTestTitle_(astCheckFrame(this),STATUS_PTR))
-#define astTestUnit(this,axis) \
-astINVOKE(V,astTestUnit_(astCheckFrame(this),axis,STATUS_PTR))
-#define astValidateAxis(this,axis,method) \
-astINVOKE(V,astValidateAxis_(astCheckFrame(this),axis,method,STATUS_PTR))
-#define astValidateAxisSelection(this,naxes,axes,method) \
-astINVOKE(V,astValidateAxisSelection_(astCheckFrame(this),naxes,axes,method,STATUS_PTR))
-
-#define astMatchAxesX(frm2,frm1,axes) \
-astINVOKE(V,astMatchAxesX_(astCheckFrame(frm2),astCheckFrame(frm1),axes,STATUS_PTR))
-
-#define astFmtDecimalYr(year,digits) astFmtDecimalYr_(year,digits,STATUS_PTR)
-#define astReadDateTime(value) astReadDateTime_(value,STATUS_PTR)
-
-#define astValidateSystem(this,system,method) \
-astINVOKE(V,astValidateSystem_(astCheckFrame(this),system,method,STATUS_PTR))
-#define astSystemString(this,system) \
-astINVOKE(V,astSystemString_(astCheckFrame(this),system,STATUS_PTR))
-#define astSystemCode(this,system) \
-astINVOKE(V,astSystemCode_(astCheckFrame(this),system,STATUS_PTR))
-
-#define astClearTop(this,axis) \
-astINVOKE(V,astClearTop_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetTop(this,axis) \
-astINVOKE(V,astGetTop_(astCheckFrame(this),axis,STATUS_PTR))
-#define astSetTop(this,axis,value) \
-astINVOKE(V,astSetTop_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astTestTop(this,axis) \
-astINVOKE(V,astTestTop_(astCheckFrame(this),axis,STATUS_PTR))
-
-#define astClearBottom(this,axis) \
-astINVOKE(V,astClearBottom_(astCheckFrame(this),axis,STATUS_PTR))
-#define astGetBottom(this,axis) \
-astINVOKE(V,astGetBottom_(astCheckFrame(this),axis,STATUS_PTR))
-#define astSetBottom(this,axis,value) \
-astINVOKE(V,astSetBottom_(astCheckFrame(this),axis,value,STATUS_PTR))
-#define astTestBottom(this,axis) \
-astINVOKE(V,astTestBottom_(astCheckFrame(this),axis,STATUS_PTR))
-
-#define astClearSystem(this) \
-astINVOKE(V,astClearSystem_(astCheckFrame(this),STATUS_PTR))
-#define astGetSystem(this) \
-astINVOKE(V,astGetSystem_(astCheckFrame(this),STATUS_PTR))
-#define astSetSystem(this,value) \
-astINVOKE(V,astSetSystem_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestSystem(this) \
-astINVOKE(V,astTestSystem_(astCheckFrame(this),STATUS_PTR))
-
-#define astClearAlignSystem(this) \
-astINVOKE(V,astClearAlignSystem_(astCheckFrame(this),STATUS_PTR))
-#define astGetAlignSystem(this) \
-astINVOKE(V,astGetAlignSystem_(astCheckFrame(this),STATUS_PTR))
-#define astSetAlignSystem(this,value) \
-astINVOKE(V,astSetAlignSystem_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestAlignSystem(this) \
-astINVOKE(V,astTestAlignSystem_(astCheckFrame(this),STATUS_PTR))
-
-#define astClearEpoch(this) \
-astINVOKE(V,astClearEpoch_(astCheckFrame(this),STATUS_PTR))
-#define astGetEpoch(this) \
-astINVOKE(V,astGetEpoch_(astCheckFrame(this),STATUS_PTR))
-#define astSetEpoch(this,value) \
-astINVOKE(V,astSetEpoch_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestEpoch(this) \
-astINVOKE(V,astTestEpoch_(astCheckFrame(this),STATUS_PTR))
-
-#define astGetObsLon(this) \
-astINVOKE(V,astGetObsLon_(astCheckFrame(this),STATUS_PTR))
-#define astTestObsLon(this) \
-astINVOKE(V,astTestObsLon_(astCheckFrame(this),STATUS_PTR))
-#define astClearObsLon(this) \
-astINVOKE(V,astClearObsLon_(astCheckFrame(this),STATUS_PTR))
-#define astSetObsLon(this,value) \
-astINVOKE(V,astSetObsLon_(astCheckFrame(this),value,STATUS_PTR))
-
-#define astGetObsLat(this) \
-astINVOKE(V,astGetObsLat_(astCheckFrame(this),STATUS_PTR))
-#define astTestObsLat(this) \
-astINVOKE(V,astTestObsLat_(astCheckFrame(this),STATUS_PTR))
-#define astClearObsLat(this) \
-astINVOKE(V,astClearObsLat_(astCheckFrame(this),STATUS_PTR))
-#define astSetObsLat(this,value) \
-astINVOKE(V,astSetObsLat_(astCheckFrame(this),value,STATUS_PTR))
-
-#define astGetObsAlt(this) \
-astINVOKE(V,astGetObsAlt_(astCheckFrame(this),STATUS_PTR))
-#define astTestObsAlt(this) \
-astINVOKE(V,astTestObsAlt_(astCheckFrame(this),STATUS_PTR))
-#define astClearObsAlt(this) \
-astINVOKE(V,astClearObsAlt_(astCheckFrame(this),STATUS_PTR))
-#define astSetObsAlt(this,value) \
-astINVOKE(V,astSetObsAlt_(astCheckFrame(this),value,STATUS_PTR))
-
-#define astClearDut1(this) \
-astINVOKE(V,astClearDut1_(astCheckFrame(this),STATUS_PTR))
-#define astGetDut1(this) \
-astINVOKE(V,astGetDut1_(astCheckFrame(this),STATUS_PTR))
-#define astSetDut1(this,value) \
-astINVOKE(V,astSetDut1_(astCheckFrame(this),value,STATUS_PTR))
-#define astTestDut1(this) \
-astINVOKE(V,astTestDut1_(astCheckFrame(this),STATUS_PTR))
-
-#define astTestActiveUnit(this) \
-astINVOKE(V,astTestActiveUnit_(astCheckFrame(this),STATUS_PTR))
-
-#define astSetFrameFlags(this,flags) \
-astINVOKE(V,astSetFrameFlags_(astCheckFrame(this),flags,STATUS_PTR))
-#define astGetFrameFlags(this) \
-astINVOKE(V,astGetFrameFlags_(astCheckFrame(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/frameset.c b/ast-5.3-1/frameset.c
deleted file mode 100644
index 1e7efcb..0000000
--- a/ast-5.3-1/frameset.c
+++ /dev/null
@@ -1,11408 +0,0 @@
-/*
-*class++
-*  Name:
-*     FrameSet
-
-*  Purpose:
-*     Set of inter-related coordinate systems.
-
-*  Constructor Function:
-c     astFrameSet
-f     AST_FRAMESET
-
-*  Description:
-*     A FrameSet consists of a set of one or more Frames (which
-*     describe coordinate systems), connected together by Mappings
-*     (which describe how the coordinate systems are inter-related). A
-*     FrameSet makes it possible to obtain a Mapping between any pair
-*     of these Frames (i.e. to convert between any of the coordinate
-*     systems which it describes).  The individual Frames are
-*     identified within the FrameSet by an integer index, with Frames
-*     being numbered consecutively from one as they are added to the
-*     FrameSet.
-*
-*     Every FrameSet has a "base" Frame and a "current" Frame (which
-*     are allowed to be the same). Any of the Frames may be nominated
-*     to hold these positions, and the choice is determined by the
-*     values of the FrameSet's Base and Current attributes, which hold
-*     the indices of the relevant Frames.  By default, the first Frame
-*     added to a FrameSet is its base Frame, and the last one added is
-*     its current Frame.
-*
-*     The base Frame describes the "native" coordinate system of
-*     whatever the FrameSet is used to calibrate (e.g. the pixel
-*     coordinates of an image) and the current Frame describes the
-*     "apparent" coordinate system in which it should be viewed
-*     (e.g. displayed, etc.). Any further Frames represent a library
-*     of alternative coordinate systems, which may be selected by
-*     making them current.
-*
-*     When a FrameSet is used in a context that requires a Frame,
-*     (e.g. obtaining its Title value, or number of axes), the current
-*     Frame is used. A FrameSet may therefore be used in place of its
-*     current Frame in most situations.
-*
-*     When a FrameSet is used in a context that requires a Mapping,
-*     the Mapping used is the one between its base Frame and its
-*     current Frame. Thus, a FrameSet may be used to convert "native"
-*     coordinates into "apparent" ones, and vice versa. Like any
-c     Mapping, a FrameSet may also be inverted (see astInvert), which
-f     Mapping, a FrameSet may also be inverted (see AST_INVERT), which
-*     has the effect of interchanging its base and current Frames and
-*     hence of reversing the Mapping between them. 
-*
-*     Regions may be added into a FrameSet (since a Region is a type of
-*     Frame), either explicitly or as components within CmpFrames. In this 
-*     case the Mapping between a pair of Frames within a FrameSet will 
-*     include the effects of the clipping produced by any Regions included 
-*     in the path between the Frames. 
-
-*  Inheritance:
-*     The FrameSet class inherits from the Frame class.
-
-*  Attributes:
-*     In addition to those attributes common to all Frames, every
-*     FrameSet also has the following attributes:
-*
-*     - Base: FrameSet base Frame index
-*     - Current: FrameSet current Frame index
-*     - Nframe: Number of Frames in a FrameSet
-*
-*     Every FrameSet also inherits any further attributes that belong
-*     to its current Frame, regardless of that Frame's class. (For
-*     example, the Equinox attribute, defined by the SkyFrame class, is 
-*     inherited by any FrameSet which has a SkyFrame as its current 
-*     Frame.) The set of attributes belonging to a FrameSet may therefore 
-*     change when a new current Frame is selected.
-
-*  Functions:
-c     In addition to those functions applicable to all Frames, the
-c     following functions may also be applied to all FrameSets:
-f     In addition to those routines applicable to all Frames, the
-f     following routines may also be applied to all FrameSets:
-*
-c     - astAddFrame: Add a Frame to a FrameSet to define a new coordinate
-c     system
-c     - astGetFrame: Obtain a pointer to a specified Frame in a FrameSet
-c     - astGetMapping: Obtain a Mapping between two Frames in a FrameSet
-c     - astRemapFrame: Modify a Frame's relationship to the other Frames in a
-c     FrameSet
-c     - astRemoveFrame: Remove a Frame from a FrameSet
-f     - AST_ADDFRAME: Add a Frame to a FrameSet to define a new coordinate
-f     system
-f     - AST_GETFRAME: Obtain a pointer to a specified Frame in a FrameSet
-f     - AST_GETMAPPING: Obtain a Mapping between two Frames in a FrameSet
-f     - AST_REMAPFRAME: Modify a Frame's relationship to the other Frames in a
-f     FrameSet
-f     - AST_REMOVEFRAME: Remove a Frame from a FrameSet
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     16-FEB-1996 (RFWS):
-*        Original version.
-*     5-JUN-1996 (RFWS):
-*        Tidied up, etc.
-*     2-JUL-1996 (RFWS):
-*        Fixed bug in astRemoveFrame which caused the base/current
-*        Frame index to be wrong.
-*     12-JUL-1996 (RFWS):
-*        Over-ride the astReportPoints method to provide
-*        Frame-specific formatting.
-*     12-AUG-1996 (RFWS):
-*        Upgraded to provide a public interface, plus improvements to
-*        astAlign and the handling of nodes as Frames are
-*        added/removed.
-*     11-SEP-1996 (RFWS):
-*        Added Gap.
-*     25-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     30-MAY-1997 (RFWS):
-*        Add special treatment for the ID attribute (which is not
-*        derived from the current Frame).
-*     10-JUN-1997 (RFWS):
-*        Rationalised the astConvert implementation.
-*     11-JUN-1997 (RFWS):
-*        Added the FindFrame implementation.
-*     27-JUN-1997 (RFWS):
-*        Fixed bug which caused certain Mapping attributes to be
-*        handled by the current Frame instead of by the member
-*        functions defined by this class.
-*     3-JUL-1997 (RFWS):
-*        Fixed bug: failing to extend the invert array in
-*        astRemapFrame.
-*     10-JUL-1997 (RFWS):
-*        Over-ride the astSimplify method.
-*     14-NOV-1997 (RFWS):
-*        Fixed error in loop implementing search over domains in
-*        FindFrame.
-*     20-NOV-1997 (RFWS):
-*        Fixed bug in default Base and Current attribute values when a
-*        FrameSet has been inverted.
-*     20-NOV-1997 (RFWS):
-*        Modified astConvert to use the current Frame of the "to"
-*        FrameSet as the destination coordinate system (instead of the
-*        base Frame) and to modify its Base attribute instead of its
-*        Current attribute.
-*     22-DEC-1997 (RFWS):
-*        Further modified astConvert to convert from the Current Frame
-*        of the "from" FrameSet and to modify its Base
-*        attribute. Frame search order also reversed if the Invert
-*        attribute is non-zero for either FrameSet.
-*     19-JAN-1998 (RFWS):
-*        Installed the TidyNodes function.
-*     20-JAN-1998 (RFWS):
-*        Implemented preservation of FrameSet integrity when attribute
-*        values associated with the current Frame are modified.
-*     24-FEB-1998 (RFWS):
-*        Added the ForceCopy function to allow integrity to be preserved
-*        when there are multiple references to the same Frame.
-*     25-FEB-1998 (RFWS):
-*        Over-ride the astUnformat method.
-*     24-MAR-1998 (RFWS):
-*        Fixed unterminated comment causing problems in CombineMaps.
-*     6-APR-1998 (RFWS):
-*        Fixed another unterminated comment in CombineMaps.
-*     27-MAY-1998 (RFWS):
-*        Fixed bug: failure to record new invert flag value after
-*        simplifying a CmpMap in TidyNodes.
-*     17-DEC-2002 (DSB):
-*        Override accessors for Frame attributes Top, Bottom, Epoch,
-*        System, AlignSystem and ActiveUnit.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitFrameSetVtab
-*        method.
-*     24-JAN-2004 (DSB):
-*        o  Override the astFields method.
-*        o  Add argument "fmt" to Abbrev.
-*     23-MAR-2004 (DSB):
-*        Modified astGetMapping and Span to include the clipping effect of 
-*        any Regions in the path between the two supplied Frames.
-*     24-AUG-2004 (DSB):
-*        - Override various methods inherited from Frame (astAngle,
-*	astAxAngle, astAxDistance, astAxOffset, astCheckPerm, astOffset2,
-*	astResolve, astSystemCode, astSystemString, astValidateSystem,
-*	astValidateAxisSelection). These should have been overridden a
-*       long time ago!
-*     8-SEP-2004 (DSB):
-*       Override astResolvePoints.
-*     12-MAY-2005 (DSB):
-*        Override astNormBox method.
-*     12-AUG-2005 (DSB):
-*        Override ObsLat and ObsLon accessor methods.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     15-MAY-2006 (DSB):
-*        Override astEqual.
-*     30-JUN-2006 (DSB):
-*        Allow astAbbrev to have a null "str1" value.
-*     22-JUN-2007 (DSB):
-*        Modify VSet to avoid using the args va_list twice since the
-*        first use (by the parent VSet function) invalidates the va_list
-*        causing a segvio to be generated by the second use (when 
-*        formatting an error message).
-*     11-JAN-2008 (DSB):
-*        Override the astRate method.
-*     17-NOV-2008 (DSB):
-*        Correct parent class in invocation of astMAKE_ISA.
-*     14-JAN-2009 (DSB):
-*        Override the astIntersect method.
-*     18-JUN-2009 (DSB):
-*        Override ObsAlt accessor methods.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS FrameSet
-
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Define a function to clear an attribute value for a FrameSet.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_CLEAR(attribute)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstFrame *this )
-*
-*     that clears the value of a specified attribute for the current Frame
-*     of a FrameSet (this). This function is intended to over-ride the
-*     astClear<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the current Frame and invoke its astClear<Attribute> \
-   method. Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   astClear##attribute( fr ); \
-   fr = astAnnul( fr ); \
-}
-
-/*
-*  Name:
-*     MAKE_CLEAR_AXIS
-
-*  Purpose:
-*     Define a function to clear an attribute value for a FrameSet axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_CLEAR_AXIS(attribute)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstFrame *this, int axis )
-*
-*     that clears the value of a specified attribute for an axis of
-*     the current Frame of a FrameSet (this). This function is
-*     intended to over-ride the astClear<Attribute> method inherited
-*     from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR_AXIS(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astClear" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
-   astClear<Attribute> method. Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   astClear##attribute( fr, axis ); \
-   fr = astAnnul( fr ); \
-}
-
-/*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Define a function to get an attribute value for a FrameSet.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_GET(attribute,type)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static <type> Get<Attribute>( AstFrame *this )
-*
-*     that gets the value of a specified attribute for the current Frame
-*     of a FrameSet (this). This function is intended to over-ride the
-*     astGet<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-   type result;                  /* Value to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the current Frame and invoke its \
-   astGet<Attribute> method.  Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   result = astGet##attribute( fr ); \
-   fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_GET_AXIS
-
-*  Purpose:
-*     Define a function to get an attribute value for a FrameSet axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_GET_AXIS(attribute,type)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static <type> Get<Attribute>( AstFrame *this, int axis )
-*
-*     that gets the value of a specified attribute for an axis of the
-*     current Frame of a FrameSet (this). This function is intended to
-*     over-ride the astGet<Attribute> method inherited from the Frame
-*     class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET_AXIS(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-   type result;                  /* Value to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astGet" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
-   astGet<Attribute> method.  Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   result = astGet##attribute( fr, axis ); \
-   fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Define a function to set an attribute value for a FrameSet.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_SET(attribute,type)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstFrame *this, <type> value )
-*
-*     that sets the value of a specified attribute for the current Frame
-*     of a FrameSet (this). This function is intended to over-ride the
-*     astSet<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type) \
-static void Set##attribute( AstFrame *this_frame, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
-   astSet<Attribute> method.  Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   astSet##attribute( fr, value ); \
-   fr = astAnnul( fr ); \
-}
-
-/*
-*  Name:
-*     MAKE_SET_AXIS
-
-*  Purpose:
-*     Define a function to set an attribute value for a FrameSet axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_SET_AXIS(attribute,type)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstFrame *this, int axis, <type> value )
-*
-*     that sets the value of a specified attribute for an axis of the
-*     current Frame of a FrameSet (this). This function is intended to
-*     over-ride the astSet<Attribute> method inherited from the Frame
-*     class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET_AXIS(attribute,type) \
-static void Set##attribute( AstFrame *this_frame, int axis, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
-   astSet<Attribute> method.  Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   astSet##attribute( fr, axis, value ); \
-   fr = astAnnul( fr ); \
-}
-
-/*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Define a function to test if an attribute value is set for a FrameSet.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_TEST(attribute)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static int Test<Attribute>( AstFrame *this )
-*
-*     that returns a boolean result (0 or 1) to indicate if the value
-*     of a specified attribute for the current Frame of a FrameSet
-*     (this) is set. This function is intended to over-ride the
-*     astTest<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to FrameSet structure */ \
-   int result;                   /* Result to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
-   astTest<Attribute> method.  Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   result = astTest##attribute( fr ); \
-   fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_TEST_AXIS
-
-*  Purpose:
-*     Define a function to test if an attribute value is set for a FrameSet
-*     axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     MAKE_TEST_AXIS(attribute)
-
-*  Class Membership:
-*     Defined by the FrameSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static int Test<Attribute>( AstFrame *this, int axis )
-*
-*     that returns a boolean result (0 or 1) to indicate if the value
-*     of a specified attribute for an axis of the current Frame of a
-*     FrameSet (this) is set. This function is intended to over-ride
-*     the astTest<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST_AXIS(attribute) \
-static int Test##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *fr;                 /* Pointer to current Frame */ \
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */ \
-   int result;                   /* Value to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the FrameSet structure. */ \
-   this = (AstFrameSet *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astTest" #attribute ); \
-\
-/* Obtain a pointer to the FrameSet's current Frame and invoke its \
-   astTest<Attribute> method.  Annul the Frame pointer afterwards. */ \
-   fr = astGetFrame( this, AST__CURRENT ); \
-   result = astTest##attribute( fr, axis ); \
-   fr = astAnnul( fr ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Coordinate permutation Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "frame.h"               /* Parent Frame class */
-#include "frameset.h"            /* Interface definition for this class */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static void (* parent_clear)( AstObject *, const char *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-static void (* parent_vset)( AstObject *, const char *, char **, va_list, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->Integrity_Frame = NULL; \
-   globals->Integrity_Method = ""; \
-   globals->Integrity_Lost = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(FrameSet)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(FrameSet,Class_Init)
-#define class_vtab astGLOBAL(FrameSet,Class_Vtab)
-#define getattrib_buff astGLOBAL(FrameSet,GetAttrib_Buff)
-#define integrity_frame astGLOBAL(FrameSet,Integrity_Frame)
-#define integrity_method astGLOBAL(FrameSet,Integrity_Method)
-#define integrity_lost astGLOBAL(FrameSet,Integrity_Lost)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */ 
-static char getattrib_buff[ 51 ];
-
-/* Variables associated with preserving FrameSet integrity. */ 
-static AstFrame *integrity_frame = NULL; /* Pointer to copy of current Frame */ 
-static const char *integrity_method = ""; /* Name of method being used */
-static int integrity_lost = 0;   /* Current Frame modified? */
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstFrameSetVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstFrame *GetFrame( AstFrameSet *, int, int * );
-static AstFrame *PickAxes( AstFrame *, int, const int[], AstMapping **, int * );
-static AstFrameSet *Convert( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *ConvertX( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *FindFrame( AstFrame *, AstFrame *, const char *, int * );
-static AstMapping *CombineMaps( AstMapping *, int, AstMapping *, int, int, int * );
-static AstMapping *GetMapping( AstFrameSet *, int, int, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double AxAngle( AstFrame *, const double[], const double[], int, int * );
-static double AxDistance( AstFrame *, int, double, double, int * );
-static double AxOffset( AstFrame *, int, double, double, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static void CheckPerm( AstFrame *, const int *, const char *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void ValidateAxisSelection( AstFrame *, int, const int *, const char *, int * );
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Fields( AstFrame *, int, const char *, const char *, int, char **, int *, double *, int * );
-static int ForceCopy( AstFrameSet *, int, int * );
-static int GetBase( AstFrameSet *, int * );
-static int GetCurrent( AstFrameSet *, int * );
-static int GetDigits( AstFrame *, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetMatchEnd( AstFrame *, int * );
-static int GetMaxAxes( AstFrame *, int * );
-static int GetMinAxes( AstFrame *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetNframe( AstFrameSet *, int * );
-static int GetNin( AstMapping *, int * );
-static int GetNout( AstMapping *, int * );
-static int GetPermute( AstFrame *, int * );
-static int GetPreserveAxes( AstFrame *, int * );
-static int GetTranForward( AstMapping *, int * );
-static int GetTranInverse( AstMapping *, int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int Span( AstFrameSet *, AstFrame **, int, int, int, AstMapping **, int *, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestBase( AstFrameSet *, int * );
-static int TestCurrent( AstFrameSet *, int * );
-static int TestDigits( AstFrame *, int * );
-static int TestDirection( AstFrame *, int, int * );
-static int TestDomain( AstFrame *, int * );
-static int TestFormat( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static int TestMatchEnd( AstFrame *, int * );
-static int TestMaxAxes( AstFrame *, int * );
-static int TestMinAxes( AstFrame *, int * );
-static int TestPermute( AstFrame *, int * );
-static int TestPreserveAxes( AstFrame *, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static int TestTitle( AstFrame *, int * );
-static int TestUnit( AstFrame *, int, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static int ValidateAxis( AstFrame *, int, const char *, int * );
-static int ValidateFrameIndex( AstFrameSet *, int, const char *, int * );
-static void AddFrame( AstFrameSet *, int, AstMapping *, AstFrame *, int * );
-static void AppendAxes( AstFrameSet *, AstFrame *, int * );
-static void Clear( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearBase( AstFrameSet *, int * );
-static void ClearCurrent( AstFrameSet *, int * );
-static void ClearDigits( AstFrame *, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void ClearDomain( AstFrame *, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void ClearMatchEnd( AstFrame *, int * );
-static void ClearMaxAxes( AstFrame *, int * );
-static void ClearMinAxes( AstFrame *, int * );
-static void ClearPermute( AstFrame *, int * );
-static void ClearPreserveAxes( AstFrame *, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void ClearTitle( AstFrame *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void MatchAxes( AstFrame *, AstFrame *, int *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void PrimaryFrame( AstFrame *, int, AstFrame **, int *, int * );
-static void RecordIntegrity( AstFrameSet *, int * );
-static void RemapFrame( AstFrameSet *, int, AstMapping *, int * );
-static void RemoveFrame( AstFrameSet *, int, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void RestoreIntegrity( AstFrameSet *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetBase( AstFrameSet *, int, int * );
-static void SetCurrent( AstFrameSet *, int, int * );
-static void SetDigits( AstFrame *, int, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-static void SetDomain( AstFrame *, const char *, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-static void SetMatchEnd( AstFrame *, int, int * );
-static void SetMaxAxes( AstFrame *, int, int * );
-static void SetMinAxes( AstFrame *, int, int * );
-static void SetPermute( AstFrame *, int, int * );
-static void SetPreserveAxes( AstFrame *, int, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-static void SetTitle( AstFrame *, const char *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void TidyNodes( AstFrameSet *, int * );
-static void VSet( AstObject *, const char *, char **, va_list, int * );
-
-static double GetBottom( AstFrame *, int, int * );
-static int TestBottom( AstFrame *, int, int * );
-static void ClearBottom( AstFrame *, int, int * );
-static void SetBottom( AstFrame *, int, double, int * );
-
-static double GetTop( AstFrame *, int, int * );
-static int TestTop( AstFrame *, int, int * );
-static void ClearTop( AstFrame *, int, int * );
-static void SetTop( AstFrame *, int, double, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static int TestEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static int TestObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static int TestObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static int TestObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static int GetUseDefs( AstObject *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static int TestSystem( AstFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static int TestAlignSystem( AstFrame *, int * );
-static void ClearAlignSystem( AstFrame *, int * );
-static void SetAlignSystem( AstFrame *, AstSystemType, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this_frame, int axis, const char *fmt,
-                           const char *str1, const char *str2, int *status ) {
-/*
-*  Name:
-*     Abbrev
-
-*  Purpose:
-*     Abbreviate a formatted FrameSet axis value by skipping leading fields.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     const char *Abbrev( AstFrame *this, int axis, const char *fmt,
-*                         const char *str1, const char *str2, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astAbbrev
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function compares two FrameSet axis values that have been
-*     formatted (using astFormat) and determines if they have any
-*     redundant leading fields (i.e. leading fields in common which
-*     can be suppressed when tabulating the values or plotting them on
-*     the axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The number of the FrameSet axis for which the values have
-*        been formatted (axis numbering starts at zero for the first
-*        axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specification used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value. If this is null, the returned pointer
-*        points to the start of the final field in str2.
-*     str2
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - This function assumes that the format specification used was
-*     the same when both values were formatted and that they both
-*     apply to the same FrameSet axis.
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return str2;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astAbbrev" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astAbbrev method to perform the processing. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astAbbrev( fr, axis, fmt, str1, str2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = str2;
-
-/* Return the result. */
-   return result;
-}
-
-static void AddFrame( AstFrameSet *this, int iframe, AstMapping *map,
-                      AstFrame *frame, int *status ) {
-/*
-*++
-*  Name:
-c     astAddFrame
-f     AST_ADDFRAME
-
-*  Purpose:
-*     Add a Frame to a FrameSet to define a new coordinate system.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frameset.h"
-c     void astAddFrame( AstFrameSet *this, int iframe, AstMapping *map,
-c                       AstFrame *frame )
-f     CALL AST_ADDFRAME( THIS, IFRAME, MAP, FRAME, STATUS )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-c     This function adds a new Frame and an associated Mapping to a
-f     This routine adds a new Frame and an associated Mapping to a
-*     FrameSet so as to define a new coordinate system, derived from
-*     one which already exists within the FrameSet. The new Frame then
-*     becomes the FrameSet's current Frame.
-*
-c     This function
-f     This routine 
-*     may also be used to merge two FrameSets, or to append extra axes 
-*     to every Frame in a FrameSet.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FrameSet.
-c     iframe
-f     IFRAME = INTEGER (Given)
-*        The index of the Frame within the FrameSet which describes
-*        the coordinate system upon which the new one is to be based.
-*        This value should lie in the range from 1 to the number of
-*        Frames already in the FrameSet (as given by its Nframe
-*        attribute). As a special case, AST__ALLFRAMES may be supplied, 
-*        in which case the axes defined by the supplied Frame are appended
-*        to every Frame in the FrameSet (see the Notes section for details).
-c     map
-f     MAP = INTEGER (Given)
-*        Pointer to a Mapping which describes how to convert
-*        coordinates from the old coordinate system (described by the
-c        Frame with index "iframe") into coordinates in the new
-f        Frame with index IFRAME) into coordinates in the new
-*        system. The Mapping's forward transformation should perform
-*        this conversion, and its inverse transformation should
-*        convert in the opposite direction. The supplied Mapping is ignored
-c        if parameter "iframe"is equal to AST__ALLFRAMES.
-f        if parameter IFRAME is equal to AST__ALLFRAMES.
-c     frame
-f     FRAME = INTEGER (Given)
-*        Pointer to a Frame that describes the new coordinate system.
-*        Any class of Frame may be supplied (including Regions and
-*        FrameSets).
-*
-c        This function may also be used to merge two FrameSets by
-c        supplying a pointer to a second FrameSet for this parameter
-f        This routine may also be used to merge two FrameSets by
-f        supplying a pointer to a second FrameSet for this argument
-*        (see the Notes section for details).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - A value of AST__BASE or AST__CURRENT may be given for the
-c     "iframe" parameter to specify the base Frame or the current
-f     IFRAME argument to specify the base Frame or the current
-*     Frame respectively.
-c     - This function sets the value of the Current attribute for the
-f     - This routine sets the value of the Current attribute for the
-*     FrameSet so that the new Frame subsequently becomes the current
-*     Frame.
-*     - The number of input coordinate values accepted by the supplied
-*     Mapping (its Nin attribute) must match the number of axes in the
-c     Frame identified by the "iframe" parameter. Similarly, the
-f     Frame identified by the IFRAME argument. Similarly, the
-*     number of output coordinate values generated by this Mapping
-*     (its Nout attribute) must match the number of axes in the new
-*     Frame.
-*     - As a special case, if a pointer to a FrameSet is given for the
-c     "frame" parameter, this is treated as a request to merge a pair of
-f     FRAME argument, this is treated as a request to merge a pair of
-*     FrameSets.  This is done by appending all the new Frames (in the
-c     "frame" FrameSet) to the original FrameSet, while preserving
-f     FRAME FrameSet) to the original FrameSet, while preserving
-*     their order and retaining all the inter-relationships
-*     (i.e. Mappings) between them. The two sets of Frames are
-*     inter-related within the merged FrameSet by using the Mapping
-*     supplied. This should convert between the Frame identified by
-c     the "iframe" parameter (in the original FrameSet) and the current
-c     Frame of the "frame" FrameSet. This latter Frame becomes the
-f     the IFRAME argument (in the original FrameSet) and the current
-f     Frame of the FRAME FrameSet. This latter Frame becomes the
-*     current Frame in the merged FrameSet.
-*     - As another special case, if a value of AST__ALLFRAMES is supplied
-*     for parameter
-c     "iframe",
-f     IFRAME,
-*     then the supplied Mapping is ignored, and the axes defined by the 
-*     supplied Frame are appended to each Frame in the FrameSet. In detail,
-*     each Frame in the FrameSet is replaced by a CmpFrame containing the 
-*     original Frame and the Frame specified by parameter
-c     "frame".
-f     FRAME.
-*     In addition, each Mapping in the FrameSet is replaced by a CmpMap 
-*     containing the original Mapping and a UnitMap in parallel. The Nin and
-*     Nout attributes of the UnitMap are set equal to the number of axes 
-*     in the supplied Frame. Each new CmpMap is simplified using 
-c     astSimplify
-f     AST_SIMPLIFY
-*     before being stored in the FrameSet.
-
-
-
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to Frame identified by "iframe" */
-   AstFrameSet *frameset;        /* Pointer to new FrameSet (if given) */
-   AstMapping *inode_map;        /* Temporarily saved Mapping pointer */
-   AstMapping *next_map;         /* Temporarily saved Mapping pointer */
-   int current;                  /* Current Frame index in merged FrameSet */
-   int current_node;             /* Node number for current Frame */
-   int ifr;                      /* Loop counter for Frames */
-   int inode;                    /* Loop counter for nodes */
-   int inode_invert;             /* Temporarily saved invert flag value */
-   int inode_link;               /* Temporarily saved link value */
-   int naxes;                    /* Number of Frame axes */
-   int ncoord;                   /* Number of Mapping coordinates per point */
-   int next;                     /* Number of next node in path */
-   int next_invert;              /* Temporarily saved invert flag value */
-   int next_link;                /* Temporarily saved link value */
-   int nframe;                   /* Number of Frames in merged FrameSet */
-   int nnode;                    /* Number of nodes in merged FrameSet */
-   int node_zero;                /* Location of "node zero" after merging */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* First handle cases where we are appending axes to the existing 
-   Frames in a FrameSet. */
-   if( iframe == AST__ALLFRAMES ) {
-      AppendAxes( this, frame, status );
-      return;
-   }
-
-/* Now handle cases where we are adding a new Frame into the FrameSet. 
-   Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   inode_map = NULL;
-   next_map = NULL;
-   inode_invert = 0;
-   next = 0;
-   next_invert = 0;
-   next_link = 0;
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, "astAddFrame" );
-
-/* Obtain a pointer to the Frame from which the new coordinate system
-   will be derived and determine how many axes it has. Annul the Frame
-   pointer afterwards. */
-   if ( astOK ) {
-      fr = astGetFrame( this, iframe );
-      naxes = astGetNaxes( fr );
-      fr = astAnnul( fr );
-
-/* Obtain the number of input coordinate values per point for the
-   Mapping supplied and check that this matches the number of axes
-   obtained above. Report an error if it does not. */
-      ncoord = astGetNin( map );
-      if ( astOK && ( naxes != ncoord ) ) {
-         astError( AST__NCPIN, "astAddFrame(%s): Bad number of %s input "
-                   "coordinate values (%d).", status, astGetClass( this ),
-                   astGetClass( map ), ncoord );
-         astError( AST__NCPIN, "The %s given should accept %d coordinate "
-                   "value%s for each input point.", status, astGetClass( map ), naxes,
-                   ( naxes == 1 ) ? "" : "s" );
-      }
-   }
-
-/* Similarly, obtain the number of output coordinate values per point
-   for the Mapping and check that this equals the number of axes for
-   the Frame supplied. Report an error if necessary. */
-   if ( astOK ) {
-      ncoord = astGetNout( map );
-      naxes = astGetNaxes( frame );
-      if ( astOK && ( ncoord != naxes ) ) {
-         astError( AST__NCPIN, "astAddFrame(%s): Bad number of %s output "
-                   "coordinate values (%d).", status, astGetClass( this ),
-                   astGetClass( map ), ncoord );
-         astError( AST__NCPIN, "The %s given should generate %d "
-                   "coordinate value%s for each output point.", status,
-                   astGetClass( map ), naxes, ( naxes == 1 ) ? "" : "s" );
-      }
-   }
-
-/* Normal Frame supplied. */
-/* ====================== */
-/* Check that the Frame supplied is not a FrameSet (handling a
-   FrameSet is a special case which is addressed later). */
-   if ( !astIsAFrameSet( frame ) && astOK ) {
-
-/* Increase the size of the FrameSet's arrays to accommodate one new
-   Frame. */
-      this->frame = astGrow( this->frame, this->nframe + 1,
-                             sizeof( AstFrame * ) );
-      this->node = astGrow( this->node, this->nframe + 1, sizeof( int ) );
-      this->map = astGrow( this->map, this->nnode, sizeof( AstMapping * ) );
-      this->link = astGrow( this->link, this->nnode, sizeof( int ) );
-      this->invert = astGrow( this->invert, this->nnode, sizeof( int ) );
-      if ( astOK ) {
-
-/* Clone pointers to the Frame and Mapping supplied and store these pointers
-   in the FrameSet arrays. */
-         this->frame[ this->nframe ] = astClone( frame );
-         this->map[ this->nnode - 1 ] = astClone( map );
-
-/* Associate the Frame with the Mapping via the "node" array. */
-         this->node[ this->nframe ] = this->nnode;
-
-/* Add a "link" value which identifies the node from which the new
-   node is derived and store the current value of the Invert attribute
-   for the Mapping. */
-         this->link[ this->nnode - 1 ] = this->node[ iframe - 1 ];
-         this->invert[ this->nnode - 1 ] = astGetInvert( map );
-
-/* If successful, increment the FrameSet's Frame and node counts and
-   set the Current attribute so that the new Frame becomes the current
-   Frame. */
-         if ( astOK ) {
-            this->nframe++;
-            this->nnode++;
-            astSetCurrent( this, this->nframe );
-
-/* If an error occurred while filling the FrameSet's arrays, clear any values
-   that may have been added, annulling any cloned pointers. */
-         } else {
-            this->frame[ this->nframe ] =
-                  astAnnul( this->frame[ this->nframe ] );
-            this->node[ this->nframe ] = -1;
-            this->map[ this->nnode - 1 ] =
-                  astAnnul( this->map[ this->nnode - 1 ] );
-            this->link[ this->nnode - 1 ] = -1;
-	 }
-      }
-
-/* FrameSet supplied. */
-/* ================== */
-/* If the Frame supplied is a FrameSet, we handle this as a special
-   case by merging the two FrameSets (so that the final result
-   contains references to all the Frames from both FrameSets). */
-   } else if ( astOK ) {
-
-/* Obtain a pointer to the FrameSet structure containing the new Frame
-   references and calculate how many Frames and nodes the combined
-   FrameSet will contain. */
-      frameset = (AstFrameSet *) frame;
-      nframe = this->nframe + frameset->nframe;
-      nnode = this->nnode + frameset->nnode;
-      
-/* Extend the original FrameSet's arrays to accommodate the new Frames
-   and nodes. */
-      this->frame = astGrow( this->frame, nframe, sizeof( AstFrame * ) );
-      this->node = astGrow( this->node, nframe, sizeof( int ) );
-      this->map = astGrow( this->map, nnode - 1, sizeof( AstMapping * ) );
-      this->link = astGrow( this->link, nnode - 1, sizeof( int ) );
-      this->invert = astGrow( this->invert, nnode - 1, sizeof( int ) );
-
-/* If OK, loop to transfer the new Frame data into the new array
-   elements, cloning each Frame pointer. Increment each "node" value
-   to allow for the new node numbering which will apply when the new
-   node data is appended to the new arrays. */
-      if ( astOK ) {
-         for ( ifr = 1; ifr <= frameset->nframe; ifr++ ) {
-            this->frame[ this->nframe + ifr - 1 ] =
-               astClone( frameset->frame[ ifr - 1 ] );
-            this->node[ this->nframe + ifr - 1 ] =
-               frameset->node[ ifr - 1 ] + this->nnode;
-         }
-
-/* Similarly, transfer the new node data, cloning each Mapping
-   pointer. Increment each "link" value to allow for the new node
-   numbering. */
-         for ( inode = 1; inode < frameset->nnode; inode++ ) {
-            this->map[ this->nnode + inode - 1 ] =
-               astClone( frameset->map[ inode - 1 ] );
-            this->link[ this->nnode + inode - 1 ] =
-               frameset->link[ inode - 1 ] + this->nnode;
-            this->invert[ this->nnode + inode - 1 ] =
-               frameset->invert[ inode - 1 ];
-         }
-
-/* In transferring the node data (above), we left an empty array
-   element which will later be filled with data corresponding to node
-   zero in the new FrameSet (there are no data to be copied for this
-   node). Initialise the data for this element to null values. */
-         this->map[ this->nnode - 1 ] = NULL;
-         this->link[ this->nnode - 1 ] = -1;
-         this->invert[ this->nnode - 1 ] = -1;
-
-/* Determine which is the current Frame in the new FrameSet and
-   convert this into the corresponding Frame number in the combined
-   one. */
-         current = astGetCurrent( frameset ) + this->nframe;
-
-/* We must now form a new link between this Frame and Frame "iframe"
-   (using the Mapping supplied) in order to inter-relate the Frames
-   from the two FrameSets. However, this cannot be done immediately
-   because in general the node corresponding to Frame "current" will
-   already have a link pointing to another node. Moreover, the node
-   which was originally node zero (in the new FrameSet) still has
-   no data in our merged FrameSet.
-
-   To overcome this, we must re-structure the links within the
-   transferred data.  We do this by starting at the node corresponding
-   to Frame "current" and working back through each link until the
-   original node zero is reached. At each step along this path, we
-   reverse the direction of the link. This involves shifting the
-   associated data by one step along the path, so that it becomes
-   associated with the next node. This results in the final
-   (initialised-to-null) node acquiring some data, and the starting
-   node being left free to receive our new link.
-
-   We compensate for reversing the links by reversing the sense of the
-   "invert" flag associated with each Mapping along the path, so that
-   the overall structure of the FrameSet is unchanged. */
-
-/* Identify the starting node (the one corresponding to Frame
-   "current"). */
-         if ( astOK ) {
-            current_node = this->node[ current - 1 ];
-
-/* Obtain the value which a "link" element will now have if it
-   originally identified node zero in the new FrameSet. We will use
-   this value to detect the end of the path. */
-            node_zero = this->nnode;
-
-/* If we are not already at "node zero", save the data for the current
-   node. */
-            if ( current_node != node_zero ) {
-               inode_map = this->map[ current_node - 1 ];
-               inode_link = this->link[ current_node - 1 ];
-               inode_invert = this->invert[ current_node - 1 ];
-
-/* Reset the node's data to null values (pending setting up the new
-   link using the Mapping supplied). */
-               this->map[ current_node - 1 ] = NULL;
-               this->link[ current_node - 1 ] = -1;
-               this->invert[ current_node - 1 ] = -1;
-
-/* Identify the next node in the path. */
-               next = inode_link;
-            }
-
-/* Follow the path until "node zero" is reached. */
-            inode = current_node;
-            while( inode != node_zero ) {
-
-/* If the next node on the path is not "node zero", save its data
-   (because we are about to write over it). */
-               if ( next != node_zero ) {
-                  next_map = this->map[ next - 1 ];
-                  next_link = this->link[ next - 1 ];
-                  next_invert = this->invert[ next - 1 ];
-               }
-
-/* Reverse the link from the current node to the "next" node. This
-   involves transferring the "map" and "invert" values to the "next"
-   node and inverting the sense of the latter to compensate. Make the
-   "next" node point back to the current one. */
-               this->map[ next - 1 ] = inode_map;
-               this->link[ next - 1 ] = inode;
-               this->invert[ next - 1 ] = !inode_invert;
-
-/* Move on to consider the next node. */
-               inode = next;
-
-/* If we have not reached "node zero" yet, transfer the node data we
-   saved above into the variables from which it will be transferred to
-   the following node on the next pass through this loop. */
-               if ( inode != node_zero ) {
-                  inode_map = next_map;
-                  inode_link = next_link;
-                  inode_invert = next_invert;
-
-/* Identify the node that follows the next one. */
-                  next = inode_link;
-               }
-            }
-
-/* Once the necessary links have been re-structured, establish the new
-   link that inter-relates the Frames from the two FrameSets. */
-            this->map[ current_node - 1 ] = astClone( map );
-            this->link[ current_node - 1 ] = this->node[ iframe - 1 ];
-            this->invert[ current_node - 1 ] = astGetInvert( map );
-         }
-
-/* If successful, update the Frame and node counts and make the
-   appropriate Frame current. */
-         if ( astOK ) {
-            this->nframe = nframe;
-            this->nnode = nnode;
-            astSetCurrent( this, current );
-
-/* If an error occurred, loop through all the new Frame and node array
-   elements and clear them, ensuring that any remaining Object
-   pointers are annulled. */
-         } else {
-            for ( ifr = 1; ifr <= frameset->nframe; ifr++ ) {
-               this->frame[ this->nframe + ifr - 1 ] =
-                  astAnnul( this->frame[ this->nframe + ifr - 1 ] );
-               this->node[ this->nframe + ifr - 1 ] = -1;
-            }
-            for ( inode = 0; inode < frameset->nnode; inode++ ) {
-               this->map[ this->nnode + inode - 1 ] =
-                  astAnnul( this->map[ this->nnode + inode - 1 ] );
-               this->link[ this->nnode + inode - 1 ] = -1;
-               this->invert[ this->nnode + inode - 1 ] = -1;
-            }
-         }
-      }
-   }
-}
-
-static double Angle( AstFrame *this_frame, const double a[],
-                     const double b[], const double c[], int *status ) {
-/*
-*  Name:
-*     Angle
-
-*  Purpose:
-*     Calculate the angle subtended by two points at a third point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double Angle( AstFrame *this, const double a[], const double b[],
-*                   const double c[], int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astAngle
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the angle at point B between the line joining points 
-*     A and B, and the line joining points C and B. These lines will in fact be
-*     geodesic curves appropriate to the Frame in use. For instance, in
-*     SkyFrame, they will be great circles.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     a
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-*     b
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the second point.
-*     c
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the third point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     astAngle
-*        The angle in radians, from the line AB to the line CB. If the
-*        Frame is 2-dimensional, it will be in the range $\pm \pi$,
-*        and positive rotation is in the same sense as rotation from
-*        the positive direction of axis 2 to the positive direction of
-*        axis 1. If the Frame has more than 2 axes, a positive value will
-*        always be returned in the range zero to $\pi$.
-
-*  Notes:
-*     - A value of AST__BAD will also be returned if points A and B are
-*     co-incident, or if points B and C are co-incident.
-*     - A value of AST__BAD will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astAngle method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astAngle( fr, a, b, c );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static void AppendAxes( AstFrameSet *this, AstFrame *frame, int *status ) {
-/*
-*  Name:
-*     AppendAxes
-
-*  Purpose:
-*     Append axes to every Frame in a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void AppendAxes( AstFrameSet *this, AstFrame *frame, int *status )
-
-*  Class Membership:
-*     FrameSet member function 
-
-*  Description:
-*     This function replaces every Frame in the FrameSet with a CmpFrame 
-*     holding the original Frame and the supplied Frame. It also replaces 
-*     every Mapping in the FrameSet with a parallel CmpMap holding the 
-*     original Mapping and a UnitMap. The Nin and Nout attributes of every 
-*     UnitMap are equal to the number of axes in the supplied Frame. Each
-*     CmpMap is simplified before being stored in the FrameSet.
-
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     frame
-*        Pointer to a Frame holding the new axes to add to every Frame in 
-*        the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *frm;             /* Pointer to new Frame */
-   AstCmpMap *map;               /* UnitMap to new Mapping */
-   AstUnitMap *umap;             /* UnitMap to feed the new axes */
-   int iframe;                   /* Frame index */
-   int imap;                     /* Mapping index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Loop round every Frame in the FrameSet. */
-   for ( iframe = 0; iframe < this->nframe; iframe++ ) {
-
-/* Create a CmpFrame holding the original Frame and the new Frame. */
-      frm = astCmpFrame( this->frame[ iframe ], frame, " ", status );
-
-/* Annul the original Frame pointer and store the new CmpFrame pointer. */
-      (void) astAnnul( this->frame[ iframe ] );
-      this->frame[ iframe ] = (AstFrame *) frm;
-   }
-
-/* Create a UnitMap with the number of inputs and outputs equal to the 
-   number of axes in the supplied Frame. */
-   umap = astUnitMap( astGetNaxes( frame ), " ", status );
-
-/* Loop round every Mapping in the FrameSet. */
-   for ( imap = 0; imap < this->nnode - 1; imap++ ) {
-
-/*  Crate a parallel CmpMap holding the original Mapping and the UnitMap. */
-      map = astCmpMap( this->map[ imap ], umap, 0, " ", status );
-
-/* Annul the original Mapping pointer. */
-      (void) astAnnul( this->map[ imap ] );
-
-/* Simplify the new Mapping, and store it in the FrameSet. */
-      this->map[ imap ] = astSimplify( map );
-
-/* Annul the un-simplified Mapping pointer. */
-      map = astAnnul( map );
-   }
-
-/* Annul the UnitMap pointer. */
-   umap = astAnnul( umap );
-}
-
-static double AxAngle( AstFrame *this_frame, const double a[], const double b[], int axis, int *status ) {
-/*
-*  Name:
-*     AxAngle
-
-*  Purpose:
-*     Returns the angle from an axis, to a line through two points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double AxAngle( AstFrame *this, const double a[], const double b[], int axis, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astAxAngle
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the angle, as seen from point A, between the positive
-*     direction of a specified axis, and the geodesic curve joining point
-*     A to point B.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     a
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-*     b
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the second point.
-*     axis
-*        The number of the Frame axis from which the angle is to be
-*        measured (one-based).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        The angle in radians, from the positive direction of the
-*        specified axis, to the line AB. If the Frame is 2-dimensional,
-*        it will be in the range $\pm \pi$, and positive rotation is in
-*        the same sense as rotation from the positive direction of axis 2
-*        to the positive direction of axis 1. If the Frame has more than 2
-*        axes, a positive value will always be returned in the range zero
-*        to $\pi$.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the require
-*     position angle is undefined.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxAngle" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astAxAngle method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astAxAngle( fr, a, b, axis );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static double AxDistance( AstFrame *this_frame, int axis, double v1, double v2, int *status ) {
-/*
-*  Name:
-*     AxDistance
-
-*  Purpose:
-*     Find the distance between two axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double AxDistance( AstFrame *this, int axis, double v1, double v2, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astAxDistance
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a signed value representing the axis increment
-*     from axis value v1 to axis value v2.
-*
-*     For a simple Frame, this is a trivial operation returning the
-*     difference between the two axis values. But for other derived classes
-*     of Frame (such as a SkyFrame) this is not the case.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The index of the axis to which the supplied values refer. The
-*        first axis has index 1.
-*     v1
-*        The first axis value.
-*     v2
-*        The second axis value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The distance between the two axis values.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input vaues has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxDistance" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astAxDistance method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astAxDistance( fr, axis, v1, v2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static double AxOffset( AstFrame *this_frame, int axis, double v1, double dist, int *status ) {
-/*
-*  Name:
-*     AxOffset
-
-*  Purpose:
-*     Add an increment onto a supplied axis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double AxOffset( AstFrame *this, int axis, double v1, double dist, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astAxOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns an axis value formed by adding a signed axis
-*     increment onto a supplied axis value.
-*
-*     For a simple Frame, this is a trivial operation returning the
-*     sum of the two supplied values. But for other derived classes
-*     of Frame (such as a SkyFrame) this is not the case.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The index of the axis to which the supplied values refer. The
-*        first axis has index 1.
-*     v1
-*        The original axis value.
-*     dist
-*        The axis increment to add to the original axis value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The incremented axis value.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input vaues has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxOffset" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astAxOffset method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astAxOffset( fr, axis, v1, dist );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Cast
-
-*  Purpose:
-*     Cast an Object into an instance of a sub-class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstObject *Cast( AstObject *this, AstObject *obj, int *status ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astCast
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a deep copy of an ancestral component of the
-*     supplied object. The required class of the ancestral component is
-*     specified by another object. Specifically, if "this" and "new" are 
-*     of the same class, a copy of "this" is returned. If "this" is an 
-*     instance of a subclass of "obj", then a copy of the component
-*     of "this" that matches the class of "obj" is returned. Otherwise, 
-*     a NULL pointer is returned without error.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cast.
-*     obj
-*        Pointer to an Object that defines the class of the returned Object. 
-*        The returned Object will be of the same class as "obj". 
-
-*  Returned Value:
-*     A pointer to the new Object. NULL if "this" is not a sub-class of 
-*     "obj", or if an error occurs.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables; */
-   AstFrame *cfrm;
-   AstObject *new;
-   astDECLARE_GLOBALS       
-   int generation_gap;
-
-/* Initialise */
-   new = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj" 
-   to this class (FrameSet). A positive value is returned if FrameSet
-   is a sub-class of "obj". A negative value is returned if "obj" is 
-   a sub-class of FrameSet. Zero is returned if "obj" is a FrameSet. 
-   AST__COUSIN is returned if "obj" is not on the same line of descent 
-   as FrameSet. */
-   generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab, 
-                                     astVTAB( obj ) );
-
-/* If "obj" is a FrameSet or a sub-class of FrameSet, we can cast by 
-   truncating the vtab for "this" so that it matches the vtab of "obJ", 
-   and then taking a deep copy of "this". */
-   if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
-      new = astCastCopy( this_object, obj );
-
-/* If "obj" is not a FrameSet or a sub-class of FrameSet (e.g. a Frame or
-   some sub-class of Frame), we attempt to cast the current Frame into 
-   the class indicated by "obj". */
-   } else {
-      cfrm = astGetFrame( (AstFrameSet *) this_object, AST__CURRENT );
-      new = astCast( cfrm, obj );
-      cfrm = astAnnul( cfrm );
-   }
-
-/* Return the new pointer. */
-   return new;
-}
-
-static void CheckPerm( AstFrame *this_frame, const int *perm, const char *method, int *status ) {
-/*
-*  Name:
-*     CheckPerm
-
-*  Purpose:
-*     Check that an array contains a valid permutation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void CheckPerm( AstFrame *this, const int *perm, const char *method, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astCheckPerm
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of a permutation array that
-*     will be used to permute the order of a Frame's axes. If the
-*     permutation specified by the array is not valid, an error is
-*     reported and the global error status is set. Otherwise, the
-*     function returns without further action.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     perm
-*        Pointer to an array of integers with the same number of
-*        elements as there are axes in the Frame. For each axis, the
-*        corresponding integer gives the (zero based) axis index to be
-*        used to identify the information for that axis (using the
-*        un-permuted axis numbering). To be valid, the integers in
-*        this array should therefore all lie in the range zero to
-*        (naxes-1) inclusive, where "naxes" is the number of Frame
-*        axes, and each value should occur exactly once.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate a permutation array. This method name is used
-*        solely for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Error messages issued by this function refer to the external
-*     (public) numbering system used for axes (which is one-based),
-*     whereas zero-based axis indices are used internally.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astCheckPerm method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astCheckPerm( fr, perm, method );
-   fr = astAnnul( fr );
-
-}
-
-static void Clear( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     Clear
-
-*  Purpose:
-*     Clear attribute values for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void Clear( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the public astClear method
-*     inherited from the Object class).
-
-*  Description:
-*     This function clears the values of a specified set of attributes
-*     for a FrameSet. Clearing an attribute cancels any value that has
-*     previously been explicitly set for it, so that the standard
-*     default attribute value will subsequently be used instead. This
-*     also causes the astTest function to return the value zero for
-*     the attribute, indicating that no value has been set.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     attrib
-*        Pointer to a null-terminated character string containing a
-*        comma-separated list of the names of the attributes to be
-*        cleared.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function preserves the integrity of the FrameSet (if
-*     possible) by appropriately remapping its current Frame to take
-*     account of its changed attribute values.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *save_frame;         /* Saved pointer to integrity Frame */
-   AstFrameSet *this;            /* Pointer to FrameSet structure */
-   const char *save_method;      /* Saved pointer to method name */
-   int ok;                       /* Status OK? */
-   int save_lost;                /* Saved integrity modified flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* To allow this function to be invoked recursively, we first save any
-   existing FrameSet integrity information in local variables. */
-   save_frame = integrity_frame;
-   save_lost= integrity_lost;
-   save_method = integrity_method;
-
-/* Set the name of the method being used (for use in error
-   messages). */
-   integrity_method = "astClear";
-
-/* Record the initial integrity state of the FrameSet. */
-   RecordIntegrity( this, status );
-
-/* Invoke the parent astClear method to clear the FrameSet's attribute
-   values and note if this succeeds. */
-   (*parent_clear)( this_object, attrib, status );
-   ok = astOK;
-
-/* Restore the FrameSet's integrity. */
-   RestoreIntegrity( this, status );
-
-/* If integrity could not be restored, then add contextual error
-   information. */
-   if ( !astOK && ok ) {
-      astError( astStatus, "Unable to accommodate clearing the \"%s\" "
-                           "attribute(s).", status, attrib );
-   }
-
-/* Restore any saved FrameSet integrity information. */
-   integrity_frame = save_frame;
-   integrity_lost = save_lost;
-   integrity_method = save_method;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void ClearAttrib( AstObject *this, const char *attrib )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     FrameSet, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
-   (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
-   if ( !strcmp( attrib, "base" ) ) {
-      astClearBase( this );
-
-/* Current. */
-/* -------- */
-/* Since this determines the choice of current Frame, we must restore
-   the integrity state of the FrameSet before changing this attribute
-   and record the new integrity state afterwards. */
-   } else if ( !strcmp( attrib, "current" ) ) {
-      RestoreIntegrity( this, status );
-      astClearCurrent( this );
-      RecordIntegrity( this, status );
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      astClearID( this );
-
-/* Invert. */
-/* ------- */
-/* Since this affects the choice of current Frame, we must restore the
-   integrity state of the FrameSet before changing this attribute and
-   record the new integrity state afterwards. */
-   } else if ( !strcmp( attrib, "invert" ) ) {
-      RestoreIntegrity( this, status );
-      astClearInvert( this );
-      RecordIntegrity( this, status );
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      astClearReport( this );
-
-/* If the name was not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then report an
-   error. */
-   } else if ( !strcmp( attrib, "class" ) ||
-               !strcmp( attrib, "nframe" ) ||
-               !strcmp( attrib, "nin" ) ||
-               !strcmp( attrib, "nobject" ) ||
-               !strcmp( attrib, "nout" ) ||
-               !strcmp( attrib, "refcount" ) ||
-               !strcmp( attrib, "tranforward" ) ||
-               !strcmp( attrib, "traninverse" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised attributes on to the FrameSet's current Frame for
-   further interpretation. */
-   } else {
-
-/* Force a copy to be made of the current Frame, if needed, to make it
-   independent of other Frames within the FrameSet. */
-      (void) ForceCopy( this, AST__CURRENT, status );
-
-/* Obtain a pointer to the current Frame and invoke its astClearAttrib
-   method. Annul the Frame pointer afterwards. */
-      fr = astGetFrame( this, AST__CURRENT );
-      astClearAttrib( fr, attrib );
-      fr = astAnnul( fr );
-
-/* Note that the current Frame has been modified. */
-      integrity_lost = 1;
-   }
-}
-
-static void ClearBase( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astClearBase
-
-*  Purpose:
-*     Clear the value of the Base attribute of a FrameSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void astClearBase( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function clears the value of the Base attribute of a
-*     FrameSet. This value is an index that identifies the base Frame
-*     for the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                    /* FrameSet is inverted? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, clear the base Frame index, otherwise
-   clear the current Frame index instead. */
-   if ( astOK ) *( invert ? &this->current : &this->base ) = -INT_MAX;
-}
-
-static void ClearCurrent( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astClearCurrent
-
-*  Purpose:
-*     Clear the value of the Current attribute for a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astClearCurrent( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function clears the value of the Current attribute for a
-*     FrameSet. This attribute is an index that identifies the current
-*     Frame for the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* FrameSet is inverted? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, clear the current frame index,
-   otherwise clear the base Frame index instead. */
-   if ( astOK ) *( invert ? &this->base : &this->current ) = -INT_MAX;
-}
-
-static AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
-                                AstMapping *mapping2, int invert2,
-                                int series, int *status ) {
-/*
-*  Name:
-*     CombineMaps
-
-*  Purpose:
-*     Combine two Mappings with specified Invert flags into a CmpMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstMapping *CombineMaps( AstMapping *mapping1, int invert1,
-*                              AstMapping *mapping2, int invert2,
-*                              int series )
-
-*  Class Membership:
-*     FrameSet member function.
-
-*  Description:
-*     This function combines two Mappings into a CmpMap (compound
-*     Mapping) as if their Invert flags were set to specified values
-*     when the CmpMap is created. However, the individual Mappings are
-*     returned with their Invert flag values unchanged from their
-*     original state.
-
-*  Parameters:
-*     mapping1
-*        Pointer to the first Mapping.
-*     invert1
-*        The (boolean) Invert flag value required for the first Mapping.
-*     mapping2
-*        Pointer to the second Mapping.
-*     invert2
-*        The (boolean) Invert flag value required for the second Mapping.
-*     series
-*        Whether the Mappings are to be combined in series (as opposed to
-*        in parallel).
-
-*  Returned Value:
-*     A pointer to the resulting compound Mapping (a CmpMap).
-
-*  Notes:
-*     - This function is a wrap-up for the astCmpMap constructor and
-*     temporarily assigns the required Invert flag values while
-*     creating the required CmpMap. However, it also takes account of
-*     the possibility that the two Mapping pointers supplied may point
-*     at the same Mapping.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map1;             /* First temporary Mapping pointer */
-   AstMapping *map2;             /* Second temporary Mapping pointer */
-   AstMapping *result;           /* Pointer to result Mapping */
-   int copy;                     /* Copy needed? */
-   int inv1;                     /* First original Invert flag value */
-   int inv2;                     /* Second original Invert flag value */
-   int set1;                     /* First Invert flag originally set? */
-   int set2;                     /* Second Invert flag originally set? */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Limit incoming values to 0 or 1. */
-   invert1 = ( invert1 != 0 );
-   invert2 = ( invert2 != 0 );
-
-/* Obtain the Invert flag values for each Mapping. */
-   inv1 = astGetInvert( mapping1 );
-   inv2 = astGetInvert( mapping2 );
-
-/* Also determine if these values are explicitly set. */
-   set1 = astTestInvert( mapping1 );
-   set2 = astTestInvert( mapping2 );
-
-/* If both Mappings are actually the same but we need different Invert
-   flag values to be set, then this can only be achieved by making a
-   copy. Note if this is necessary. */
-   copy = ( ( mapping1 == mapping2 ) && ( invert1 != invert2 ) );
-
-/* Clone the first Mapping pointer. Do likewise for the second but
-   make a copy instead if necessary. */
-   map1 = astClone( mapping1 );
-   map2 = copy ? astCopy( mapping2 ) : astClone( mapping2 );
-
-/* If the Invert value for the first Mapping needs changing, make the
-   change. */
-   if ( invert1 != inv1 ) {
-      if ( invert1 ) {
-         astSetInvert( map1, 1 );
-      } else {
-         astClearInvert( map1 );
-      }
-   }
-
-/* Similarly, change the Invert flag for the second Mapping if
-   necessary. */
-   if ( invert2 != inv2 ) {
-      if ( invert2 ) {
-         astSetInvert( map2, 1 );
-      } else {
-         astClearInvert( map2 );
-      }
-   }
-
-/* Combine the two Mappings into a CmpMap. */
-   result = (AstMapping *) astCmpMap( map1, map2, series, "", status );
-   
-/* If the first Mapping's Invert value was changed, restore it to its
-   original state. */
-   if ( invert1 != inv1 ) {
-      if ( set1 ) {
-         astSetInvert( map1, inv1 );
-      } else {
-         astClearInvert( map1 );
-      }
-   }
-
-/* Similarly, restore the second Mapping's Invert value if
-   necessary. This step is not needed, however, if a copy was made. */
-   if ( ( invert2 != inv2 ) && !copy ) {
-      if ( set2 ) {
-         astSetInvert( map2, inv2 );
-      } else {
-         astClearInvert( map2 );
-      }
-   }
-
-/* Annul the temporary Mapping pointers. */
-   map1 = astAnnul( map1 );
-   map2 = astAnnul( map2 );
-
-/* If an error occurred, then annul the result pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-                             const char *domainlist, int *status ) {
-/*
-*  Name:
-*     Convert
-
-*  Purpose:
-*     Determine how to convert between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-*                           const char *domainlist, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the public astConvert
-*     method inherited fromm the Frame class).
-
-*  Description:
-*     This function compares two FrameSets and determines whether it
-*     is possible to convert between the coordinate systems which
-*     their current Frames represent. If conversion is possible, it
-*     returns a FrameSet which describes the conversion and which may
-*     be used (as a Mapping) to transform coordinate values in either
-*     direction.
-*
-*     If conversion is possible, the Base attributes of both FrameSets
-*     will be modified on exit to identify the Frames which were used
-*     as the intermediate coordinate system.
-
-*  Parameters:
-*     from
-*        Pointer to a FrameSet whose current Frame represents the
-*        "source" coordinate system.  Note that the Base attribute of
-*        the FrameSet may be modified by this function.
-*     to
-*        Pointer to a FrameSet whose current Frame represents the
-*        "destination" coordinate system.  Note that the Base
-*        attribute of the FrameSet may be modified by this function.
-*     domainlist
-*        Pointer to a null-terminated character string containing a
-*        comma-separated list of Frame domains. This may be used to
-*        define a priority order for the different intermediate
-*        coordinate systems that might be used to perform the
-*        conversion.
-*
-*        The function will first try to obtain a conversion by making
-*        use only of intermediate Frames whose Domain attribute
-*        matches the first domain in this list. If this fails, the
-*        second domain in the list will be used, and so on, until
-*        conversion is achieved. A blank domain (e.g. two consecutive
-*        commas) indicates that all Frames should be considered,
-*        regardless of their Domain attributes. The list is
-*        case-insensitive and all white space is ignored.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        If the requested coordinate conversion is possible, the
-*        function returns a pointer to a FrameSet which describes the
-*        conversion. Otherwise, a null Object pointer (AST__NULL) is
-*        returned without error.
-*
-*        If a FrameSet is returned, it will contain two Frames. Frame
-*        number 1 (its base Frame) will describe the source coordinate
-*        system, corresponding to the "from" parameter. Frame number 2
-*        (its current Frame) will describe the destination coordinate
-*        system, corresponding to the "to" parameter. The Mapping
-*        which inter-relates these Frames will perform the required
-*        conversion between the two coordinate systems.
-
-*  Notes:
-*     - Either of the "from" and "to" pointers may identify a basic
-*     Frame instead of a FrameSet, in which case the function behaves
-*     as if it were a FrameSet containing only a single Frame.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-* Implementation Notes:
-*    - This function is simply a wrap-up for the ConvertX function
-*    which performs the required processing but swaps the order of the
-*    first two arguments. This is a trick to allow the astConvert
-*    method to be over-ridden by derived classes on the basis of the
-*    class of either of the first two arguments.
-*/
-
-/* Check the inherited status. */
-   if ( !astOK ) return NULL;
-
-/* Invoke the private "ConvertX" member function with the first two
-   arguments swapped. */
-   return ConvertX( to, from, domainlist, status );
-}
-
-static AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
-                              const char *domainlist, int *status ) {
-/*
-*  Name:
-*     ConvertX
-
-*  Purpose:
-*     Determine how to convert between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
-*                            const char *domainlist )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected "astConvertX"
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function performs the processing for the public astConvert
-*     method (as inherited from the Frame class and over-ridden by the
-*     FrameSet class) and has exactly the same interface except that
-*     the order of the first two arguments is swapped. This is a trick
-*     to allow the astConvert method to be over-ridden by derived
-*     classes on the basis of the class of either of its first two
-*     arguments.
-*
-*     See the astConvert method for details of the interface.
-*/
-
-/* Local Variables: */
-   AstFrame *from_frame;         /* Pointer to "from" Frame */
-   AstFrame *to_frame;           /* Pointer to "to" Frame */
-   AstFrameSet *cvt;             /* Pointer to conversion FrameSet */
-   AstFrameSet *result;          /* Pointer to FrameSet to be returned */
-   AstMapping *from_map;         /* Pointer to "from" Mapping */
-   AstMapping *map;              /* Pointer to conversion Mapping */
-   AstMapping *result_map;       /* Pointer to result Mapping */
-   AstMapping *tmp;              /* Temporary Mapping pointer */
-   AstMapping *to_map;           /* Pointer to "to" Mapping */
-   char *domain;                 /* Pointer to individual domain string */
-   char *domain_end;             /* Pointer to final null of domain string */
-   char *domainlist_copy;        /* Pointer to copy of domains list */
-   int *from_order;              /* List of Frame indices in search order */
-   int *to_order;                /* List of Frame indices in search order */
-   int best_score;               /* Score from best match */
-   int from_base;                /* Index of "from" base Frame */
-   int from_current;             /* Index of "from" current Frame */
-   int from_index;               /* Index of "from" Frame */
-   int from_isframe;             /* "from" is a Frame (not a FrameSet)? */
-   int from_nframe;              /* Number of "from" Frames */
-   int from_number;              /* Loop counter for "from" Frames */
-   int iframe_from;              /* Index of best "from" Frame */
-   int iframe_to;                /* Index of best "to" Frame */
-   int match;                    /* Possible match found? */
-   int n;                        /* Count of Frames */
-   int perfect;                  /* Perfect match found? */
-   int score;                    /* Score from latest match */
-   int to_base;                  /* Index of "to" base Frame */
-   int to_current;               /* Index of "to" current Frame */
-   int to_index;                 /* Index of "to" Frame */
-   int to_isframe;               /* "to" is a Frame (not a FrameSet)? */
-   int to_nframe;                /* Number of "to" Frames */
-   int to_number;                /* Loop counter for "to" Frames */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   result_map = NULL;
-   iframe_from = 0;
-   iframe_to = 0;
-
-/* Determine the number of Frames in "from" and the indices of its
-   base and current Frames. Use values of 1 if "from" is a Frame and
-   not a FrameSet. */
-   from_isframe = !astIsAFrameSet( from );
-   from_nframe = from_isframe ? 1 : astGetNframe( from );
-   from_base = from_isframe ? 1 : astGetBase( from );
-   from_current = from_isframe ? 1 : astGetCurrent( from );
-
-/* Obtain similar values for "to". */
-   to_isframe = !astIsAFrameSet( to );
-   to_nframe = to_isframe ? 1 : astGetNframe( to );
-   to_base = to_isframe ? 1 : astGetBase( to );
-   to_current = to_isframe ? 1 : astGetCurrent( to );
-
-/* Allocate memory for arrays which will hold the indices of "from"
-   and "to" Frames. */
-   from_order = astMalloc( sizeof( int ) * (size_t) from_nframe );
-   to_order = astMalloc( sizeof( int ) * (size_t) to_nframe );
-
-/* Make a temporary copy of the domains list. */
-   domainlist_copy = astStore( NULL, domainlist,
-                               strlen( domainlist ) + (size_t) 1 );
-   if ( astOK ) {
-
-/* Fill the "from_order" array with the indices of all the Frames in
-   "from", in the order in which they will be used for searching. Use
-   the base Frame first. */
-      n = 0;
-      from_order[ n++ ] = from_base;
-
-/* Then add all the "from" Frames in the appropriate order, omitting
-   the base and current Frames. */
-      if ( !astGetInvert( from ) ) {
-         for ( from_index = 1; from_index <= from_nframe; from_index++ ) {
-            if ( ( from_index != from_base ) &&
-                 ( from_index != from_current ) ) {
-               from_order[ n++ ] = from_index;
-            }
-         }
-      } else {
-         for ( from_index = from_nframe; from_index >= 1; from_index-- ) {
-            if ( ( from_index != from_base ) &&
-                 ( from_index != from_current ) ) {
-               from_order[ n++ ] = from_index;
-            }
-         }
-      }
-
-/* Finish with the current Frame, if different from the base Frame. */
-      if ( from_current != from_base ) from_order[ n++ ] = from_current;
-
-/* Repeat this process for the "to" Frame. */
-      n = 0;
-      to_order[ n++ ] = to_base;
-      if ( !astGetInvert( to ) ) {
-         for ( to_index = 1; to_index <= to_nframe; to_index++ ) {
-            if ( ( to_index != to_base ) && ( to_index != to_current ) ) {
-               to_order[ n++ ] = to_index;
-            }
-         }
-      } else {
-         for ( to_index = to_nframe; to_index >= 1; to_index-- ) {
-            if ( ( to_index != to_base ) && ( to_index != to_current ) ) {
-               to_order[ n++ ] = to_index;
-            }
-         }
-      }
-      if ( to_current != to_base ) to_order[ n++ ] = to_current;
-
-/* Loop to inspect each comma-separated field in the domains list
-   until an error occurs, all the domains are used up, or a match is
-   found. */
-      domain = domainlist_copy;
-      match = 0;
-      while ( astOK && domain && !match ) {
-
-/* Change the comma at the end of each field to a null to terminate
-   the domain. */
-         if ( ( domain_end = strchr( domain, ',' ) ) ) *domain_end = '\0';
-
-/* For any given domain, we will ignore imperfect matches in favour of
-   better ones by assigning a score to each match. Initialise the best
-   score value for the current domain. */
-         best_score = -1;
-
-/* Loop through each Frame in "to". Quit looping early if an error
-   occurs or a perfect match is found. */
-         perfect = 0;
-         for ( to_number = 0;
-               astOK && !perfect && ( to_number < to_nframe );
-               to_number++ ) {
-
-/* Permute the "to" Frame number into a Frame index to implement the
-   required search order, and obtain a pointer to the required "to"
-   Frame. */
-            to_index = to_order[ to_number ];
-            to_frame = to_isframe ? astClone( to ) :
-                                    astGetFrame( to, to_index );
-
-/* Loop through each Frame in "from". Quit looping early if an error
-   occurs or a perfect match is found. */
-            for ( from_number = 0;
-                  astOK && !perfect && ( from_number < from_nframe );
-                  from_number++ ) {
-
-/* Permute the "from" Frame number into a Frame index to implement the
-   required search order, and obtain a pointer to the required "from"
-   Frame. */
-               from_index = from_order[ from_number ];
-               from_frame = from_isframe ? astClone( from ) :
-                                           astGetFrame( from, from_index );
-
-/* Attempt to obtain a FrameSet which describes the conversion between
-   the selected "from" and "to" Frames and test if successful. If so,
-   we have a potential route to construct the overall Mapping we
-   want. */
-               cvt = astConvert( from_frame, to_frame, domain );
-               if ( astOK && cvt ) {
-
-/* Extract the required Mapping from the returned FrameSet. */
-                  map = astGetMapping( cvt, AST__BASE, AST__CURRENT );
-
-/* If necessary, prefix the Mapping between the "from" current Frame
-   and the individual "from" Frame we have selected. */
-                  if ( from_index != from_current ) {
-                     from_map = astGetMapping( from, AST__CURRENT,
-                                               from_index );
-                     tmp = (AstMapping *) astCmpMap( from_map, map, 1, "", status );
-                     from_map = astAnnul( from_map );
-                     map = astAnnul( map );
-                     map = tmp;
-                  }
-
-/* Similarly, if necessary, append the Mapping between the selected
-   "to" Frame and the "to" current Frame. */
-                  if ( to_index != to_current ) {
-                     to_map = astGetMapping( to, to_index, AST__CURRENT );
-                     tmp = (AstMapping *) astCmpMap( map, to_map, 1, "", status );
-                     to_map = astAnnul( to_map );
-                     map = astAnnul( map );
-                     map = tmp;
-                  }
-
-/* Simplify the resulting overall Mapping (this is done here because
-   it may sometimes affect the attribute values used to assign a score
-   below). */
-                  tmp = astSimplify( map );
-                  map = astAnnul( map );
-                  map = tmp;
-
-/* Assign a score that favours Mappings with both transformations
-   available over those with only one, and Mappings with only a
-   forward transformation over those with only an inverse
-   transformation. */
-                  score = ( astGetTranForward( map ) ? 2 : 0 ) +
-                          ( astGetTranInverse( map ) ? 1 : 0 );
-
-/* If the new score is better than the previous one (or is the first
-   one), note that we have a possible match. */
-                  if ( astOK && ( score > best_score ) ) {
-                     match = 1;
-
-/* Update the best score and note if it indicates a perfect match (in
-   which case we can stop searching at this point). */
-                     best_score = score;
-                     perfect = ( best_score >= 3 );
-
-/* Annul any previous result Mapping pointer and replace it with this
-   better one. */
-                     if ( result_map ) result_map = astAnnul( result_map );
-                     result_map = astClone( map );
-
-/* Note which "from" and "to" Frames were used. */
-                     iframe_from = from_index;
-                     iframe_to = to_index;
-                  }
-
-/* Annul pointers to the intermediate Objects. */
-                  map = astAnnul( map );
-                  cvt = astAnnul( cvt );
-               }
-               from_frame = astAnnul( from_frame );
-            }
-            to_frame = astAnnul( to_frame );
-         }
-
-/* Go on to consider the next field in the domains list. */
-         domain = domain_end ? domain_end + 1 : NULL;
-      }
-   }
-
-/* Free the memory allocated for temporary arrays. */
-   domainlist_copy = astFree( domainlist_copy );
-   from_order = astFree( from_order );
-   to_order = astFree( to_order );
-
-/* If a result is being returned, then obtain a pointer to the current
-   "from" Frame and use it to start constructing the result
-   FrameSet. */
-   if ( result_map ) {
-      from_frame = from_isframe ? astClone( from ) :
-                                  astGetFrame( from, AST__CURRENT );
-      result = astFrameSet( from_frame, "", status );
-      from_frame = astAnnul( from_frame );
-
-/* Similarly. obtain a pointer to the current "to" frame and add it to
-   the result FrameSet (related to the base Frame by the result
-   Mapping). */
-      to_frame = to_isframe ? astClone( to ) :
-                              astGetFrame( to, AST__CURRENT );
-      astAddFrame( result, AST__BASE, result_map, to_frame );
-      to_frame = astAnnul( to_frame );
-
-/* Annul the result Mapping pointer. */
-      result_map = astAnnul( result_map );
-   }
-
-/* If successful, and a FrameSet is being returned, then set the base
-   Frames of "from" and "to" (if they are FrameSets) to indicate the
-   route used to generate the result Mapping. */
-   if ( astOK && result ) {
-      if ( !from_isframe ) astSetBase( from, iframe_from );
-      if ( !to_isframe ) astSetBase( to, iframe_to );
-   }
-
-/* If an error occurred, annul the returned FrameSet pointer. */
-   if ( !astOK && result ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static double Distance( AstFrame *this_frame,
-                        const double point1[], const double point2[], int *status ) {
-/*
-*  Name:
-*     Distance
-
-*  Purpose:
-*     Calculate the distance between two points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double Distance( AstFrame *this,
-*                      const double point1[], const double point2[], int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astDistance
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the distance between two points whose
-*     FrameSet coordinates are given. The distance calculated is that
-*     along the geodesic curve that joins the two points.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     point1
-*        An array of double, with one element for each FrameSet axis
-*        containing the coordinates of the first point.
-*     point2
-*        An array of double, with one element for each FrameSet axis
-*        containing the coordinates of the second point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The distance between the two points.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input coordinates has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astDistance method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astDistance( fr, point1, point2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two FrameSets are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astEqual protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two FrameSets are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first FrameSet.
-*     that
-*        Pointer to the second FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the FrameSets are equivalent, zero otherwise.
-
-*  Notes:
-*     - The two FrameSets are considered equivalent if all the encapsulated 
-*     Frames are equal and all the encapsulated Mappings are equal.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *that;            /* Pointer to the second FrameSet structure */
-   AstFrameSet *this;            /* Pointer to the first FrameSet structure */
-   int i;                        /* Loop index */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Checks that the second object is of the same class as the first . */
-   if( !strcmp( astGetClass( this_object ), astGetClass( that_object ) ) ){
-
-/* Obtain pointers to the two FrameSet structures. */
-      this = (AstFrameSet *) this_object;
-      that = (AstFrameSet *) that_object;
-
-/* Check the number of nodes and frames are equal. Also check the indices 
-   of the base and current Frames are equal */
-      if( this->nframe == that->nframe && 
-          this->nnode == that->nnode &&
-          this->base == that->base && 
-          this->current == that->current ) {
-
-/* Check the Frames and nodes are equal. */
-          result = 1;
-          for ( i = 0; i < this->nframe; i++ ) {
-             if( !astEqual( this->frame[ i ], that->frame[ i ] ) ||
-                 this->node[ i ] != that->node[ i ] ){
-                result = 0;
-                break;
-             }
-          }
-
-/* Check the Mappings, links and invert flags are equal. */
-         if( result ) {
-            for ( i = 0; i < this->nnode - 1; i++ ) {
-               if( astEqual( this->map[ i ], that->map[ i ] ) ||
-                   this->link[ i ] != that->link[ i ] ||
-                   this->invert[ i ] != that->invert[ i ] ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int Fields( AstFrame *this_frame, int axis, const char *fmt, 
-                   const char *str, int maxfld, char **fields, 
-                   int *nc, double *val, int *status ) {
-/*
-*+
-*  Name:
-*     astFields
-
-*  Purpose:
-*     Identify numerical fields within a formatted FrameSet axis value.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astFields( AstFrame *this, int axis, const char *fmt, 
-*                    const char *str, int maxfld, char **fields, 
-*                    int *nc, double *val ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astFields
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function identifies the numerical fields within a FrameSet axis 
-*     value that has been formatted using astAxisFormat. It assumes that 
-*     the value was formatted using the supplied format string. It also
-*     returns the equivalent floating point value.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The number of the FrameSet axis for which the values have been
-*        formatted (axis numbering starts at zero for the first axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format used when creating "str".
-*     str
-*        Pointer to a constant null-terminated string containing the
-*        formatted value.
-*     maxfld
-*        The maximum number of fields to identify within "str".
-*     fields
-*        A pointer to an array of at least "maxfld" character pointers. 
-*        Each element is returned holding a pointer to the start of the 
-*        corresponding field  in "str" (in the order in which they occur 
-*        within "str"), or NULL if no corresponding field can be found. 
-*     nc
-*        A pointer to an array of at least "maxfld" integers. Each
-*        element is returned holding the number of characters in the
-*        corresponding field, or zero if no corresponding field can be
-*        found.
-*     val
-*        Pointer to a location at which to store the value
-*        equivalent to the returned field values. If this is NULL, 
-*        it is ignored.
-
-*  Returned Value:
-*     The number of fields succesfully identified and returned.
-
-*  Notes:
-*     - Leading and trailing spaces are ignored.
-*     - If the formatted value is not consistent with the supplied format
-*     string, then a value of zero will be returned, "fields" will be
-*     returned holding NULLs, "nc" will be returned holding zeros, and
-*     "val" is returned holding VAL__BAD.
-*     - Fields are counted from the start of the formatted string. If the
-*     string contains more than "maxfld" fields, then trailing fields are
-*     ignored.
-*     - If this function is invoked with the global error status set, or 
-*     if it should fail for any reason, then a value of zero will be returned 
-*     as the function value, and "fields", "nc" and "val"  will be returned 
-*     holding their supplied values
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int result;                   /* Result field count to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astFields" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astFields method to perform the processing. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astFields( fr, axis, fmt, str, maxfld, fields, nc, val );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrameSet *FindFrame( AstFrame *target_frame, AstFrame *template,
-                               const char *domainlist, int *status ) {
-/*
-*  Name:
-*     FindFrame
-
-*  Purpose:
-*     Find a coordinate system with specified characteristics.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrameSet *FindFrame( AstFrame *target, AstFrame *template,
-*                             const char *domainlist, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astFindFrame method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function uses a "template" Frame to search a FrameSet to
-*     identify a coordinate system which has a specified set of
-*     characteristics. If a suitable coordinate system can be found,
-*     the function returns a pointer to a FrameSet which describes the
-*     required coordinate system and how to convert coordinates to and
-*     from it.
-
-*  Parameters:
-*     target
-*        Pointer to the target FrameSet.  Note that if a suitable
-*        coordinate system is found, then the FrameSet's Current
-*        attribute will be modified to indicate which Frame was used
-*        to obtain attribute values which were not specified by the
-*        template.
-*     template
-*        Pointer to the template Frame, which should be an instance of
-*        the type of Frame you wish to find.
-*     domainlist
-*        Pointer to a null-terminated character string containing a
-*        comma-separated list of Frame domains. This may be used to
-*        establish a priority order for the different types of
-*        coordinate system that might be found.
-*
-*        The function will first try to find a suitable coordinate
-*        system whose Domain attribute equals the first domain in this
-*        list. If this fails, the second domain in the list will be
-*        used, and so on, until a result is obtained. A blank domain
-*        (e.g. two consecutive commas) indicates that any coordinate
-*        system is acceptable (subject to the template) regardless of
-*        its domain.
-*
-*        This list is case-insensitive and all white space is ignored.
-*        If you do not wish to restrict the domain in this way, you
-*        should supply an empty string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If the search is successful, the function returns a pointer to a
-*     FrameSet which contains the Frame found and a description of how
-*     to convert to (and from) the coordinate system it
-*     represents. Otherwise, a null Object pointer (AST__NULL) is
-*     returned without error.
-*
-*     If a FrameSet is returned, it will contain two Frames. Frame
-*     number 1 (its base Frame) represents the target coordinate
-*     system and will be the same as the (base Frame of the)
-*     target. Frame number 2 (its current Frame) will be a Frame
-*     representing the coordinate system which the function found. The
-*     Mapping which inter-relates these two Frames will describe how
-*     to convert between their respective coordinate systems.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *base_frame;         /* Pointer to target base Frame */
-   AstFrame *frame;              /* Pointer to result Frame */
-   AstFrame *selected_frame;     /* Pointer to selected target Frame */
-   AstFrameSet *found;           /* FrameSet pointer (result of search) */
-   AstFrameSet *result;          /* Pointer to result FrameSet */
-   AstFrameSet *target;          /* Pointer to target FrameSet structure */
-   AstMapping *map;              /* Pointer to result Mapping */
-   AstMapping *prefix;           /* Pointer to prefix Mapping */
-   AstMapping *tmp;              /* Temporary Mapping pointer */
-   char *domain;                 /* Pointer to individual domain field */
-   char *domain_end;             /* Pointer to null at end of domain */
-   char *domainlist_copy;        /* Pointer to copy of domains list */
-   int *target_order;            /* Array of indices defining search order */
-   int match;                    /* Match obtained? */
-   int n;                        /* Count of target_order elements */
-   int target_base;              /* Index of target base Frame */
-   int target_current;           /* Index of target current Frame */
-   int target_index;             /* Index of selected target Frame */
-   int target_nframe;            /* Number of Frames in target FrameSet */
-   int target_number;            /* Loop index for search */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   target_index = 0;
-
-/* Obtain a pointer to the target FrameSet structure. */
-   target = (AstFrameSet *) target_frame;
-
-/* Determine the number of Frames in the target FrameSet and the
-   indices of the current and base Frames. */
-   target_nframe = astGetNframe( target );
-   target_current = astGetCurrent( target );
-   target_base = astGetBase( target );
-
-/* Allocate an array to hold a list of all the target Frame indices. */
-   target_order = astMalloc( sizeof( int ) * (size_t) target_nframe );
-
-/* Make a temporary copy of the domains list. */
-   domainlist_copy = astStore( NULL, domainlist,
-                               strlen( domainlist ) + (size_t) 1 );
-   if ( astOK ) {
-
-/* Form a list of the indices of all the Frames in the target in the
-   order they will be searched for a match. Add the current Frame
-   index first. */
-      n = 0;
-      target_order[ n++ ] = target_current;
-
-/* Follow this by the base Frame index, if different. */
-      if ( target_base != target_current ) target_order[ n++ ] = target_base;
-
-/* Then add all the remaining target Frame indices. */
-      for ( target_index = 1; target_index <= target_nframe; target_index++ ) {
-         if ( ( target_index != target_current ) &&
-              ( target_index != target_base ) ) {
-            target_order[ n++ ] = target_index;
-         }
-      }
-
-/* Loop to inspect each comma-separated field in the domains list
-   until an error occurs, all the domains are used up, or a match is
-   found. */
-      domain = domainlist_copy;
-      match = 0;
-      while ( astOK && domain && !match ) {
-
-/* Change the comma at the end of each field to a null to terminate
-   the domain. */
-         if ( ( domain_end = strchr( domain, ',' ) ) ) *domain_end = '\0';
-
-/* Loop to try and match each target Frame in turn, in the order
-   identified above. Quit the loop early if an error occurs or a match
-   is found. */
-         for ( target_number = 0;
-               astOK && !match && ( target_number < target_nframe );
-               target_number++ ) {
-
-/* Permute the target Frame number into a Frame index to implement the
-   required search order. Then obtain a pointer to the selected target
-   Frame. */
-            target_index = target_order[ target_number ];
-            selected_frame = astGetFrame( target, target_index );
-
-/* Search the target Frame using the template supplied, together with
-   the current domain. */
-            found = astFindFrame( selected_frame, template, domain );
-
-/* Note if a match is found, and extract pointers to the conversion
-   Mapping and the result Frame from the FrameSet produced. */
-            if ( astOK && found ) {
-               match = 1;
-               map = astGetMapping( found, AST__BASE, AST__CURRENT );
-               frame = astGetFrame( found, AST__CURRENT );
-
-/* Obtain a pointer to the Mapping between the target base Frame and
-   the selected target Frame, and prefix this Mapping to the one
-   obtained above. */
-               prefix = astGetMapping( target, AST__BASE, target_index );
-               tmp = (AstMapping *) astCmpMap( prefix, map, 1, "", status );
-               prefix = astAnnul( prefix );
-               map = astAnnul( map );
-               map = tmp;
-
-/* Simplify the resulting Mapping. */
-               tmp = astSimplify( map );
-               map = astAnnul( map );
-               map = tmp;
-
-/* Obtain a pointer to the target base Frame, and use this to start
-   building the result FrameSet. */
-               base_frame = astGetFrame( target, AST__BASE );
-               result = astFrameSet( base_frame, "", status );
-               base_frame = astAnnul( base_frame );
-
-/* Add the result Frame, which is related to the base Frame by the
-   result Mapping. */
-               astAddFrame( result, AST__BASE, map, frame );
-               
-/* Annul pointers to all intermediate Objects. */
-               map = astAnnul( map );
-               frame = astAnnul( frame );
-               found = astAnnul( found );
-            }
-            selected_frame = astAnnul( selected_frame );
-         }
-
-/* Go on to consider the next field in the domains list. */
-         domain = domain_end ? domain_end + 1 : NULL;
-      }
-   }
-
-/* Free the temporary arrays. */
-   target_order = astFree( target_order );
-   domainlist_copy = astFree( domainlist_copy );
-
-/* If a result is being returned, set the current Frame of the target
-   to indicate where the result Frame was found. */
-   if ( astOK && result ) astSetCurrent( target, target_index );
-
-/* If an error occurred, annul any result FrameSet pointer. */
-   if ( !astOK && result ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int ForceCopy( AstFrameSet *this, int iframe, int *status ) {
-/*
-*  Name:
-*     ForceCopy
-
-*  Purpose:
-*     Force a copy to be made of a Frame, if necessary.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int ForceCopy( AstFrameSet *this, int iframe, int *status )
-
-*  Class Membership:
-*     FrameSet member function.
-
-*  Description:
-*     This function examines a Frame within a FrameSet, identified by its
-*     Frame index. If the same Frame is found to be referenced a second time
-*     within the FrameSet, then the original reference is replaced with an
-*     independent copy of the Frame.
-*
-*     This process supports the preservation of FrameSet integrity in cases
-*     where the same Frame is referenced more than once. After using this
-*     function, the nominated Frame's attributes may be modified without
-*     danger of affecting other parts of the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     iframe
-*        The index of the Frame to be examined.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a copy of the nominated Frame was made, otherwise zero.
-
-*  Notes:
-*     - Using this function a second time on the same Frame will have no
-*     effect, since the first usage will make the Frame independent of any
-*     other Frames within the FrameSet.
-*     - A value of zero will be returned if this function is invoked with
-*     the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *frame;             /* Pointer to Frame */
-   AstFrame *tmp;               /* Temporary Frame pointer */
-   int ifr;                     /* Loop counter for Frames */
-   int result;                  /* Value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, integrity_method );
-
-/* If OK, obtain the corresponding Frame pointer (don't clone it). */
-   if ( astOK ) {
-      frame = this->frame[ iframe - 1 ];
-      
-/* Loop to inspect each Frame in the FrameSet. */
-      for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-
-/* If the same Frame is referenced anywhere else, then make a copy of it. */
-         if ( ( ifr != iframe ) && ( this->frame[ ifr - 1 ] == frame ) ) {
-            tmp = astCopy( frame );
-
-/* If successful, replace the original reference to the Frame with a pointer
-   to this copy and annul the original pointer. */
-            if ( astOK ) {
-               this->frame[ iframe - 1 ] = tmp;
-               frame = astAnnul( frame );
-
-/* Set the returned result. */
-               if ( astOK ) result = 1;
-            }
-
-/* Quit looping once a copy has been made. */
-            break;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-*  Name:
-*     Format
-
-*  Purpose:
-*     Format a coordinate value for a FrameSet axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     const char *Format( AstFrame *this, int axis, double value, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astFormat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to a string containing the
-*     formatted (character) version of a coordinate value for a
-*     FrameSet axis. The formatting applied is that specified by a
-*     previous invocation of the astSetFormat method. A suitable
-*     default format is applied if necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The number of the axis (zero-based) for which formatting is
-*        to be performed.
-*     value
-*        The coordinate value to be formatted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the FrameSet object, or at static memory. The contents of
-*     the string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or deletion
-*     of the FrameSet. A copy of the string should therefore be made
-*     if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astFormat method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astFormat( fr, axis, value );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     Gap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating FrameSet axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astGap method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted values for a FrameSet axis, the returned gap
-*     size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The number of the axis (zero-based) for which a gap is to be found.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Gap value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astGap" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astGap method to obtain the required gap value. Annul the
-   Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astGap( fr, axis, gap, ntick );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = 0.0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied FrameSet,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;         /* Pointer to FrameSet structure */
-   int result;                /* Result value to return */
-   int iframe;                /* Loop counter for Frames */
-   int inode;                 /* Loop counter for nodes */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   for ( iframe = 0; iframe < this->nframe; iframe++ ) {
-      result += astGetObjSize( this->frame[ iframe ] );
-   }
-
-   for ( inode = 0; inode < this->nnode - 1; inode++ ) {
-      result += astGetObjSize( this->map[ inode ] );
-   }
-
-   result += astTSizeOf( this->frame );
-   result += astTSizeOf( this->node );
-   result += astTSizeOf( this->map );
-   result += astTSizeOf( this->link );
-   result += astTSizeOf( this->invert );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a FrameSet, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the FrameSet, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the FrameSet. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   const char *result;           /* Pointer value to return */
-   int base;                     /* Base attribute value */
-   int current;                  /* Current attribute value */
-   int invert;                   /* Invert attribute value */
-   int nframe;                   /* Nframe attribute value */
-   int nin;                      /* Nin attribute value */
-   int nobject;                  /* Nobject attribute value */
-   int nout;                     /* Nout attribute value */
-   int ref_count;                /* RefCount attribute value */
-   int report;                   /* Report attribute value */
-   int tranforward;              /* TranForward attribute value */
-   int traninverse;              /* TranInverse attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
-   (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
-   if ( !strcmp( attrib, "base" ) ) {
-      base = astGetBase( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", base );
-         result = getattrib_buff;
-      }
-
-/* Class. */
-/* ------ */
-   } else if ( !strcmp( attrib, "class" ) ) {
-      result = astGetClass( this );
-
-/* Current. */
-/* -------- */
-   } else if ( !strcmp( attrib, "current" ) ) {
-      current = astGetCurrent( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", current );
-         result = getattrib_buff;
-      }
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      result = astGetID( this );
-
-/* Invert. */
-/* ------- */
-   } else if ( !strcmp( attrib, "invert" ) ) {
-      invert = astGetInvert( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", invert );
-         result = getattrib_buff;
-      }
-
-/* Nframe. */
-/* ------- */
-   } else if ( !strcmp( attrib, "nframe" ) ) {
-      nframe = astGetNframe( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nframe );
-         result = getattrib_buff;
-      }
-
-/* Nin. */
-/* ---- */
-   } else if ( !strcmp( attrib, "nin" ) ) {
-      nin = astGetNin( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nin );
-         result = getattrib_buff;
-      }
-
-/* Nobject. */
-/* -------- */
-   } else if ( !strcmp( attrib, "nobject" ) ) {
-      nobject = astGetNobject( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nobject );
-         result = getattrib_buff;
-      }
-
-/* Nout. */
-/* ----- */
-   } else if ( !strcmp( attrib, "nout" ) ) {
-      nout = astGetNout( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nout );
-         result = getattrib_buff;
-      }
-
-/* RefCount. */
-/* --------- */
-   } else if ( !strcmp( attrib, "refcount" ) ) {
-      ref_count = astGetRefCount( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ref_count );
-         result = getattrib_buff;
-      }
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      report = astGetReport( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", report );
-         result = getattrib_buff;
-      }
-
-/* TranForward. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "tranforward" ) ) {
-      tranforward = astGetTranForward( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", tranforward );
-         result = getattrib_buff;
-      }
-
-/* TranInverse. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "traninverse" ) ) {
-      traninverse = astGetTranInverse( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", traninverse );
-         result = getattrib_buff;
-      }
-
-/* Pass unrecognised attributes on to the FrameSet's current Frame for
-   further interpretation. */
-   } else {
-
-/* Obtain a pointer to the current Frame and invoke its astGetAttrib
-   method. Annul the Frame pointer afterwards. */
-      fr = astGetFrame( this, AST__CURRENT );
-      result = astGetAttrib( fr, attrib );
-      fr = astAnnul( fr );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static AstAxis *GetAxis( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetAxis
-
-*  Purpose:
-*     Obtain a pointer to a specified Axis from a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstAxis *GetAxis( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astGetAxis method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Axis object associated
-*     with one of the axes of the current Frame of a FrameSet. This
-*     object describes the quantity which is represented along that
-*     axis.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The number of the axis (zero-based) for which an Axis pointer
-*        is required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the requested Axis object.
-
-*  Notes:
-*     - The reference count of the requested Axis object will be
-*     incremented by one to reflect the additional pointer returned by
-*     this function.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstAxis *result;              /* Pointer to Axis */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astGetAxis" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astGetAxis method to obtain the required Axis
-   pointer. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astGetAxis( fr, axis );
-   fr = astAnnul( fr );
-
-/* If an error occurred, annul the result. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int GetBase( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetBase
-
-*  Purpose:
-*     Obtain the value of the Base attribute for a FrameSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astGetBase( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns the value of the Base attribute for a
-*     FrameSet. This value is an index that identifies the base Frame
-*     in the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     The Base attribute value.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* FrameSet is inverted? */
-   int result;                   /* Value to return */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, return the base Frame index, otherwise
-   return the index of the current Frame instead. Provide defaults if
-   necessary. */
-   if ( astOK ) {
-      if ( !invert ) {
-         result = ( this->base != -INT_MAX ) ? this->base : 1;
-      } else {
-         result = ( this->current != -INT_MAX ) ? this->current :
-                                                  astGetNframe( this );
-      }
-   }
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetCurrent( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetCurrent
-
-*  Purpose:
-*     Obtain the value of the Current attribute for a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astGetCurrent( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns the value of the Current attribute for a
-*     FrameSet.  This attribute is an index that identifies the
-*     current Frame in a FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     Value of the Current attribute.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* FrameSet is inverted? */
-   int result;                   /* Value to return */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, return the current Frame index,
-   otherwise return the index of the base Frame instead. Provide
-   defaults if necessary. */
-   if ( astOK ) {
-      if ( !invert ) {
-         result = ( this->current != -INT_MAX ) ? this->current :
-                                                  astGetNframe( this );
-      } else {
-         result = ( this->base != -INT_MAX ) ? this->base : 1;
-      }
-   }
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrame *GetFrame( AstFrameSet *this, int iframe, int *status ) {
-/*
-*++
-*  Name:
-c     astGetFrame
-f     AST_GETFRAME
-
-*  Purpose:
-*     Obtain a pointer to a specified Frame in a FrameSet.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frameset.h"
-c     AstFrame *astGetFrame( AstFrameSet *this, int iframe )
-f     RESULT = AST_GETFRAME( THIS, IFRAME, STATUS )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns a pointer to a specified Frame in a
-*     FrameSet.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FrameSet.
-c     iframe
-f     IFRAME = INTEGER (Given)
-*        The index of the required Frame within the FrameSet.  This
-*        value should lie in the range from 1 to the number of Frames
-*        in the FrameSet (as given by its Nframe attribute).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetFrame()
-f     AST_GETFRAME = INTEGER
-*        A pointer to the requested Frame.
-
-*  Notes:
-*     - A value of AST__BASE or AST__CURRENT may be given for the
-c     "iframe" parameter to specify the base Frame or the current
-f     IFRAME argument to specify the base Frame or the current
-*     Frame respectively.
-*     - This function increments the RefCount attribute of the
-*     selected Frame by one.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *result;             /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, "astGetFrame" );
-
-/* If OK, clone a pointer to the requested Frame. */
-   if ( astOK ) result = astClone( this->frame[ iframe - 1 ] );
-
-/* Return the result. */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     FrameSet, which is the IsLinear value of he base->current Mapping.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-*/
-/* Local Variables: */
-   AstMapping *map;
-   int result;
-
-/* Check global status */
-   if( !astOK ) return 0;
-
-/* Get the Mapping. */
-   map = astGetMapping( (AstFrameSet *) this_mapping, AST__BASE, 
-                        AST__CURRENT );
-
-/* Get its IsLinear attribute value. */
-   result = astGetIsLinear( map );
-
-/* Free the Mapping. */
-   map = astAnnul( map );
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *GetMapping( AstFrameSet *this, int iframe1, int iframe2, int *status ) {
-/*
-*++
-*  Name:
-c     astGetMapping
-f     AST_GETMAPPING
-
-*  Purpose:
-*     Obtain a Mapping that converts between two Frames in a FrameSet.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frameset.h"
-c     AstMapping *astGetMapping( AstFrameSet *this, int iframe1, int iframe2 )
-f     RESULT = AST_GETMAPPING( THIS, IFRAME1, IFRAME2, STATUS )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns a pointer to a Mapping that will convert
-*     coordinates between the coordinate systems represented by two
-*     Frames in a FrameSet.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FrameSet.
-c     iframe1
-f     IFRAME1 = INTEGER (Given)
-*        The index of the first Frame in the FrameSet. This Frame describes
-*        the coordinate system for the "input" end of the Mapping.
-c     iframe2
-f     IFRAME2 = INTEGER (Given)
-*        The index of the second Frame in the FrameSet. This Frame
-*        describes the coordinate system for the "output" end of the
-*        Mapping.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetMapping()
-f     AST_GETMAPPING = INTEGER
-*        Pointer to a Mapping whose forward transformation converts
-*        coordinates from the first coordinate system to the second
-*        one, and whose inverse transformation converts coordinates in
-*        the opposite direction.
-
-*  Notes:
-*     - The returned Mapping will include the clipping effect of any
-*     Regions which occur on the path between the two supplied Frames
-*     (this includes the two supplied Frames themselves).
-c     - The values given for the "iframe1" and "iframe2" parameters
-f     - The values given for the IFRAME1 and IFRAME2 arguments
-*     should lie in the range from 1 to the number of Frames in the
-*     FrameSet (as given by its Nframe attribute). A value of
-*     AST__BASE or AST__CURRENT may also be given to identify the
-*     FrameSet's base Frame or current Frame respectively.  It is
-c     permissible for both these parameters to have the same value, in
-f     permissible for both these arguments to have the same value, in
-*     which case a unit Mapping (UnitMap) is returned.
-*     - It should always be possible to generate the Mapping
-*     requested, but this does necessarily guarantee that it will be
-*     able to perform the required coordinate conversion. If
-*     necessary, the TranForward and TranInverse attributes of the
-*     returned Mapping should be inspected to determine if the
-*     required transformation is available.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Temporary pointer to Frame */
-   AstFrame **frames;            /* Pointer to array of Frames */
-   AstMapping **path;            /* Pointer to array of conversion Mappings */
-   AstMapping *copy;             /* Pointer to copy of Mapping */
-   AstMapping *result;           /* Result pointer to be returned */
-   AstMapping *tmp;              /* Temporary pointer for joining Mappings */
-   int *forward;                 /* Pointer to array of Mapping directions */
-   int ipath;                    /* Loop counter for conversion path steps */
-   int iframe;                   /* Frame index */
-   int inode;                    /* Node index */
-   int npath;                    /* Number of steps in conversion path */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate and translate the Frame indices supplied. */
-   iframe1 = astValidateFrameIndex( this, iframe1, "astGetMapping" );
-   iframe2 = astValidateFrameIndex( this, iframe2, "astGetMapping" );
-
-/* Allocate memory to hold an array of Mapping pointers and associated
-   direction flags - a maximum of one element for each Mapping and one
-   for each Frame in the FrameSet. */
-   path = astMalloc( sizeof( AstMapping * ) * (size_t) ( this->nnode - 1 +
-                                                         this->nframe ) );
-   forward = astMalloc( sizeof( int ) * (size_t) ( this->nnode - 1 +
-                                                   this->nframe ) );
-
-/* Allocate memory to hold a list of the Frame pointers (if any) associated
-   with each node. */
-   frames = astMalloc( sizeof( AstFrame * )  * (size_t) ( this->nnode ) );
-
-/* If OK, set up an array of Frame pointers indexed by node index. If a
-   node has no associated Frame store a NULL pointer. This is needed so
-   that we can find Frame pointers quickly within the Span function. Note,
-   we simply copy the pointers rather than cloning them, so they do not 
-   need to be annulled when finished with. */
-   if ( astOK ) {
-      for( inode = 0; inode < this->nnode; inode++ ) frames[ inode ] = NULL;
-      for( iframe = 0; iframe < this->nframe; iframe++ ) {
-         frames[ this->node[ iframe ] ] = this->frame[ iframe ];
-      }
-
-/* Obtain the Mapping pointers and direction flags needed to convert 
-   coordinates between the nodes associated with the two specified  
-   Frames. */
-      npath = Span( this, frames, this->node[ iframe1 - 1 ],
-                    this->node[ iframe2 - 1 ], -1, path, forward, status ) - 1;
-
-/* If this failed, it indicates a corrupt FrameSet object, so report
-   an error. */
-      if ( npath < 0 ) {
-         astError( AST__FRSIN, "astGetMapping(%s): Invalid or corrupt "
-                   "%s - could not find conversion path between Frames "
-                   "%d and %d.", status, astGetClass( this ), astGetClass( this ),
-                   iframe1, iframe2 );
-
-/* If the conversion path is of zero length (i.e. the two Frames are
-   the same) then we will return a Mapping which is equivalent to the 
-   Frame. Most classes of Frame are equivalent to a UnitMap. However, we do 
-   not hard-wire this equivalence since some classes of Frame (e.g. Regions 
-   or CmpFrames containing Regions) do not correspond to a UnitMap. Instead 
-   we use the astIsUnitFrame method on the Frame to determine if the
-   Frame is equivalent to a UnitMap.Is os, create a suitable UnitMap. If
-   not, return the Frame itself (a form of Mapping). */
-      } else if ( npath == 0 ) {
-         fr = astGetFrame( this, iframe1 );
-         if( astIsUnitFrame( fr ) ){
-            result = (AstMapping *) astUnitMap( astGetNaxes( fr ), "", status );
-         } else {
-            result = (AstMapping *) astClone( fr );
-         }
-         fr = astAnnul( fr );
-
-/* If the conversion path involves at least one non-trivial Mapping,
-   make a copy of the first Mapping, inverting the copy if
-   necessary. */
-      } else {
-         result = astCopy( path[ 0 ] );
-         if ( !forward[ 0 ] ) astInvert( result );
-
-/* Now loop to concatenate any further Mappings. First make a copy of
-   each additional Mapping and invert the copy if necessary. */
-         for ( ipath = 1; ipath < npath; ipath++ ) {
-            copy = astCopy( path[ ipath ] );
-            if ( !forward[ ipath ] ) astInvert( copy );
-
-/* Concatenate the copy with the result so far, then annul the pointer
-   to the copy and save the pointer to the new result. */
-            tmp = (AstMapping *) astCmpMap( result, copy, 1, "", status );
-            result = astAnnul( result );
-            copy = astAnnul( copy );
-            result = tmp;
-         }
-      }
-   }
-
-/* Free the memory allocated for the conversion path information. */
-   path = astFree( path );
-   forward = astFree( forward );
-   frames = astFree( frames );
-
-/* If an error occurred, annul the returned Mapping. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int GetNaxes( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetNaxes
-
-*  Purpose:
-*     Determine how many axes a FrameSet has.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetNaxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astGetNaxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns the number of axes for a FrameSet. This is equal
-*     to the number of axes in its current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of FrameSet axes (zero or more).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
-   fr = astGetFrame( this, AST__CURRENT );
-
-/* Obtain the number of axes in this Frame. */
-   result = astGetNaxes( fr );
-
-/* Annul the current Frame pointer. */
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetNframe( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNframe
-
-*  Purpose:
-*     Determine the number of Frames in a FrameSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astGetNframe( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns the number of Frames in a FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     The number of Frames in the FrameSet (always 1 or more).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the Frame count. */
-   return this->nframe;
-}
-
-static int GetNin( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetNin
-
-*  Purpose:
-*     Get the number of input coordinates for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetNin( AstMapping *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astGetNin method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns the number of input coordinate values
-*     required per point by a FrameSet when used to transform a set of
-*     points (i.e. the number of dimensions of the space in which the
-*     input points reside).
-*
-*     The value returned is equal to the number of axes in the
-*     FrameSet's base Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Number of coordinate values required.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to base Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Obtain a pointer to the FrameSet's base Frame. */
-   fr = astGetFrame( this, AST__BASE );
-
-/* Obtain the number of axes in this Frame. */
-   result = astGetNaxes( fr );
-
-/* Annul the base Frame pointer. */
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetNout( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetNout
-
-*  Purpose:
-*     Get the number of output coordinates for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetNout( AstMapping *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astGetNout method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns the number of output coordinate values
-*     generated per point by a FrameSet when used to transform a set
-*     of points (i.e. the number of dimensions of the space in which
-*     the output points reside).
-*
-*     The value returned is equal to the number of axes in the
-*     FrameSet's current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Number of coordinate values generated.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the number of axes in the FrameSet's current Frame. */
-   return GetNaxes( (AstFrame *) this_mapping, status );
-}
-
-static const int *GetPerm( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetPerm
-
-*  Purpose:
-*     Access the axis permutation array for the current Frame of a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     const int *GetPerm( AstFrame *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astGetPerm protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the axis permutation array
-*     for the current Frame of a FrameSet. This array constitutes a
-*     lookup-table that converts between an axis number supplied
-*     externally and the corresponding index in the Frame's internal
-*     axis arrays.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the current Frame's axis permutation array (a
-*     constant array of int).  Each element of this contains the
-*     (zero-based) internal axis index to be used in place of the
-*     external index which is used to address the permutation
-*     array. If the current Frame has zero axes, this pointer will be
-*     NULL.
-
-*  Notes:
-*     - The pointer returned by this function gives direct access to
-*     data internal to the Frame object. It remains valid only so long
-*     as the Frame exists. The permutation array contents may be
-*     modified by other functions which operate on the Frame and this
-*     may render the returned pointer invalid.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to FrameSet structure */
-   const int *result;            /* Result pointer value */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and then obtain a
-   pointer to its axis permutation array. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astGetPerm( fr );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetTranForward( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetTranForward
-
-*  Purpose:
-*     Determine if a FrameSet defines a forward coordinate transformation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetTranForward( AstMapping *this )
-
-*  Class Membership:
-*     Frameset member function (over-rides the astGetTranForward
-*     protected method inherited from the Frame class).
-
-*  Description:
-*     This function returns a value indicating whether a FrameSet is
-*     able to perform a coordinate transformation in the "forward"
-*     direction.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     Zero if the forward coordinate transformation is not defined, or
-*     1 if it is.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   AstMapping *map;              /* Pointer to base->current Mapping */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
-   FrameSet (note this takes account of whether the FrameSet has been
-   inverted). */
-   map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Determine whether the required transformation is defined. */
-   result = astGetTranForward( map );
-
-/* Annul the Mapping pointer. */
-   map = astAnnul( map );
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetTranInverse( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetTranInverse
-
-*  Purpose:
-*     Determine if a FrameSet defines an inverse coordinate transformation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetTranInverse( AstMapping *this )
-
-*  Class Membership:
-*     Frameset member function (over-rides the astGetTranInverse
-*     protected method inherited from the Frame class).
-
-*  Description:
-*     This function returns a value indicating whether a FrameSet is
-*     able to perform a coordinate transformation in the "inverse"
-*     direction.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     Zero if the inverse coordinate transformation is not defined, or
-*     1 if it is.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   AstMapping *map;              /* Pointer to base->current Mapping */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
-   FrameSet (note this takes account of whether the FrameSet has been
-   inverted). */
-   map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Determine whether the required transformation is defined. */
-   result = astGetTranInverse( map );
-
-/* Annul the Mapping pointer. */
-   map = astAnnul( map );
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetUseDefs
-
-*  Purpose:
-*     Get the value of the UseDefs attribute for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int GetUseDefs( AstObject *this_object, int *status ) {
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astGetUseDefs
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the value of the UseDefs attribute for a FrameSet, 
-*     supplying a suitable default.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - The USeDefs value.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int result;                   /* Value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* If the UseDefs value for the FrameSet has been set explicitly, use the
-   Get method inherited from the parent Frame class to get its value> */
-   if( astTestUseDefs( this ) ) {
-      result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, supply a default value equal to the UseDefs value of the
-   current Frame. */   
-   } else {
-      fr = astGetFrame( this, AST__CURRENT );
-      result = astGetUseDefs( fr );
-      fr = astAnnul( fr );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitFrameSetVtab_(  AstFrameSetVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFrameSetVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void astInitFrameSetVtab( AstFrameSetVtab *vtab, const char *name )
-
-*  Class Membership:
-*     FrameSet vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the FrameSet class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAFrameSet) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->AddFrame = AddFrame;
-   vtab->ClearBase = ClearBase;
-   vtab->ClearCurrent = ClearCurrent;
-   vtab->GetBase = GetBase;
-   vtab->GetCurrent = GetCurrent;
-   vtab->GetFrame = GetFrame;
-   vtab->GetMapping = GetMapping;
-   vtab->GetNframe = GetNframe;
-   vtab->RemapFrame = RemapFrame;
-   vtab->RemoveFrame = RemoveFrame;
-   vtab->SetBase = SetBase;
-   vtab->SetCurrent = SetCurrent;
-   vtab->TestBase = TestBase;
-   vtab->TestCurrent = TestCurrent;
-   vtab->ValidateFrameIndex = ValidateFrameIndex;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-   parent_clear = object->Clear;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-   object->Clear = Clear;
-
-   parent_vset = object->VSet;
-   object->VSet = VSet;
-
-   parent_getusedefs = object->GetUseDefs;
-   object->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping = (AstMappingVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-
-   object->ClearAttrib = ClearAttrib;
-   object->GetAttrib = GetAttrib;
-   object->SetAttrib = SetAttrib;
-   object->TestAttrib = TestAttrib;
-
-   object->GetUseDefs = GetUseDefs;
-   object->Equal = Equal;
-   object->Cast = Cast;
-
-   mapping->GetIsLinear = GetIsLinear;
-   mapping->GetNin = GetNin;
-   mapping->GetNout = GetNout;
-   mapping->GetTranForward = GetTranForward;
-   mapping->GetTranInverse = GetTranInverse;
-   mapping->Rate = Rate;
-   mapping->ReportPoints = ReportPoints;
-   mapping->RemoveRegions = RemoveRegions;
-   mapping->Simplify = Simplify;
-   mapping->Transform = Transform;
-   mapping->MapSplit = MapSplit;
-
-   frame->Abbrev = Abbrev;
-   frame->Angle = Angle;
-   frame->AxAngle = AxAngle;
-   frame->AxDistance = AxDistance;
-   frame->AxOffset = AxOffset;
-   frame->CheckPerm = CheckPerm;
-   frame->ClearDigits = ClearDigits;
-   frame->ClearDirection = ClearDirection;
-   frame->ClearDomain = ClearDomain;
-   frame->ClearFormat = ClearFormat;
-   frame->ClearLabel = ClearLabel;
-   frame->ClearMatchEnd = ClearMatchEnd;
-   frame->ClearMaxAxes = ClearMaxAxes;
-   frame->ClearMinAxes = ClearMinAxes;
-   frame->ClearPermute = ClearPermute;
-   frame->ClearPreserveAxes = ClearPreserveAxes;
-   frame->ClearSymbol = ClearSymbol;
-   frame->ClearTitle = ClearTitle;
-   frame->ClearUnit = ClearUnit;
-   frame->Convert = Convert;
-   frame->ConvertX = ConvertX;
-   frame->Distance = Distance;
-   frame->Fields = Fields;
-   frame->FindFrame = FindFrame;
-   frame->Format = Format;
-   frame->Gap = Gap;
-   frame->GetAxis = GetAxis;
-   frame->GetDigits = GetDigits;
-   frame->GetDirection = GetDirection;
-   frame->GetDomain = GetDomain;
-   frame->GetFormat = GetFormat;
-   frame->GetLabel = GetLabel;
-   frame->GetMatchEnd = GetMatchEnd;
-   frame->GetMaxAxes = GetMaxAxes;
-   frame->GetMinAxes = GetMinAxes;
-   frame->GetNaxes = GetNaxes;
-   frame->GetPerm = GetPerm;
-   frame->GetPermute = GetPermute;
-   frame->GetPreserveAxes = GetPreserveAxes;
-   frame->GetSymbol = GetSymbol;
-   frame->GetTitle = GetTitle;
-   frame->GetUnit = GetUnit;
-   frame->Intersect = Intersect;
-   frame->IsUnitFrame = IsUnitFrame;
-   frame->Match = Match;
-   frame->MatchAxes = MatchAxes;
-   frame->MatchAxesX = MatchAxesX;
-   frame->Norm = Norm;
-   frame->NormBox = NormBox;
-   frame->Offset = Offset;
-   frame->Offset2 = Offset2;
-   frame->Overlay = Overlay;
-   frame->PermAxes = PermAxes;
-   frame->PickAxes = PickAxes;
-   frame->PrimaryFrame = PrimaryFrame;
-   frame->Resolve = Resolve;
-   frame->ResolvePoints = ResolvePoints;
-   frame->SetAxis = SetAxis;
-   frame->SetDigits = SetDigits;
-   frame->SetDirection = SetDirection;
-   frame->SetDomain = SetDomain;
-   frame->SetFormat = SetFormat;
-   frame->SetLabel = SetLabel;
-   frame->SetMatchEnd = SetMatchEnd;
-   frame->SetMaxAxes = SetMaxAxes;
-   frame->SetMinAxes = SetMinAxes;
-   frame->SetPermute = SetPermute;
-   frame->SetPreserveAxes = SetPreserveAxes;
-   frame->SetSymbol = SetSymbol;
-   frame->SetTitle = SetTitle;
-   frame->SetUnit = SetUnit;
-   frame->SubFrame = SubFrame;
-   frame->SystemCode = SystemCode;
-   frame->SystemString = SystemString;
-   frame->TestDigits = TestDigits;
-   frame->TestDirection = TestDirection;
-   frame->TestDomain = TestDomain;
-   frame->TestFormat = TestFormat;
-   frame->TestLabel = TestLabel;
-   frame->TestMatchEnd = TestMatchEnd;
-   frame->TestMaxAxes = TestMaxAxes;
-   frame->TestMinAxes = TestMinAxes;
-   frame->TestPermute = TestPermute;
-   frame->TestPreserveAxes = TestPreserveAxes;
-   frame->TestSymbol = TestSymbol;
-   frame->TestTitle = TestTitle;
-   frame->TestUnit = TestUnit;
-   frame->Unformat = Unformat;
-   frame->ValidateAxis = ValidateAxis;
-   frame->ValidateAxisSelection = ValidateAxisSelection;
-   frame->ValidateSystem = ValidateSystem;
-   frame->LineDef = LineDef;
-   frame->LineContains = LineContains;
-   frame->LineCrossing = LineCrossing;
-   frame->LineOffset = LineOffset;
-
-   frame->GetActiveUnit = GetActiveUnit;
-   frame->SetActiveUnit = SetActiveUnit;
-   frame->TestActiveUnit = TestActiveUnit;
-
-   frame->GetTop = GetTop;
-   frame->SetTop = SetTop;
-   frame->TestTop = TestTop;
-   frame->ClearTop = ClearTop;
-
-   frame->GetBottom = GetBottom;
-   frame->SetBottom = SetBottom;
-   frame->TestBottom = TestBottom;
-   frame->ClearBottom = ClearBottom;
-
-   frame->GetEpoch = GetEpoch;
-   frame->SetEpoch = SetEpoch;
-   frame->TestEpoch = TestEpoch;
-   frame->ClearEpoch = ClearEpoch;
-
-   frame->GetSystem = GetSystem;
-   frame->SetSystem = SetSystem;
-   frame->TestSystem = TestSystem;
-   frame->ClearSystem = ClearSystem;
-
-   frame->GetAlignSystem = GetAlignSystem;
-   frame->SetAlignSystem = SetAlignSystem;
-   frame->TestAlignSystem = TestAlignSystem;
-   frame->ClearAlignSystem = ClearAlignSystem;
-
-   frame->ClearObsLat = ClearObsLat;
-   frame->TestObsLat = TestObsLat;
-   frame->GetObsLat = GetObsLat;
-   frame->SetObsLat = SetObsLat;
-
-   frame->ClearObsAlt = ClearObsAlt;
-   frame->TestObsAlt = TestObsAlt;
-   frame->GetObsAlt = GetObsAlt;
-   frame->SetObsAlt = SetObsAlt;
-
-   frame->ClearObsLon = ClearObsLon;
-   frame->TestObsLon = TestObsLon;
-   frame->GetObsLon = GetObsLon;
-   frame->SetObsLon = SetObsLon;
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "FrameSet",
-               "Set of inter-related coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void Intersect( AstFrame *this_frame, const double a1[2],
-                       const double a2[2], const double b1[2],
-                       const double b2[2], double cross[2], 
-                       int *status ) {
-/*
-*  Name:
-*     Intersect
-
-*  Purpose:
-*     Find the point of intersection between two geodesic curves.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void Intersect( AstFrame *this_frame, const double a1[2],
-*                      const double a2[2], const double b1[2],
-*                      const double b2[2], double cross[2], 
-*                      int *status ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astIntersect method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the coordinate values at the point of
-*     intersection between two geodesic curves. Each curve is specified
-*     by two points on the curve. 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     a1
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a point on the first
-*        geodesic curve.
-*     a2
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a second point on the 
-*        first geodesic curve.
-*     b1
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a point on the second
-*        geodesic curve.
-*     b2
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a second point on 
-*        the second geodesic curve.
-*     cross
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the required intersection
-*        point will be returned. These will be AST__BAD if the curves do
-*        not intersect.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - For SkyFrames each curve will be a great circle, and in general
-*     each pair of curves will intersect at two diametrically opposite 
-*     points on the sky. The returned position is the one which is
-*     closest to point "a1".
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astIntersect method for this Frame. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astIntersect( fr, a1, a2, b1, b2, cross );
-   fr = astAnnul( fr );
-
-}
-
-static int IsUnitFrame( AstFrame *this_frame, int *status ){
-/*
-*  Name:
-*     IsUnitFrame
-
-*  Purpose:
-*     Is this Frame equivalent to a UnitMap?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int IsUnitFrame( AstFrame *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astIsUnitFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied Frame is
-*     equivalent to a UnitMap when treated as a Mapping (note, the Frame
-*     class inherits from Mapping and therefore every Frame is also a Mapping).
-
-*  Parameters:
-*     this 
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied Frame is equivalent to
-*     a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to FrameSet's current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int result;                   /* Result to be returned */
-
-/* Initialise the returned value. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
-   fr = astGetFrame( this, AST__CURRENT );
-
-/* Invoke the astIsUnitFrame method for this Frame. */
-   result = astIsUnitFrame( fr );
-
-/* Annul the Frame pointer. */
-   fr = astAnnul( fr );
-
-/* If an error occurred, clean up by clearing the returned result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int LineContains( AstFrame *this_frame, AstLineDef *l, int def, double *point, int *status ) {
-/*
-*  Name:
-*     LineContains
-
-*  Purpose:
-*     Determine if a line contains a point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astLineContains
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function determines if the supplied point is on the supplied
-*     line within the supplied Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l
-*        Pointer to the structure defining the line. 
-*     def
-*        Should be set non-zero if the "point" array was created by a
-*        call to astLineCrossing (in which case it may contain extra
-*        information following the axis values),and zero otherwise.
-*     point
-*        Point to an array containing the axis values of the point to be 
-*        tested, possibly followed by extra cached information (see "def").
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the line contains the point. 
-
-*  Notes:
-*     - The pointer supplied for "l" should have been created using the 
-*     astLineDef method. These structures contained cached information about 
-*     the lines which improve the efficiency of this method when many 
-*     repeated calls are made. An error will be reported if the structure 
-*     does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result =0;
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
-   result = astLineContains( fr, l, def, point );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static int LineCrossing( AstFrame *this_frame, AstLineDef *l1, AstLineDef *l2, 
-                         double **cross, int *status ) {
-/*
-*  Name:
-*     LineCrossing
-
-*  Purpose:
-*     Determine if two lines cross.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2, 
-*                       double **cross, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astLineCrossing
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function determines if the two suplied line segments cross,
-*     and if so returns the axis values at the point where they cross.
-*     A flag is also returned indicating if the crossing point occurs
-*     within the length of both line segments, or outside one or both of
-*     the line segments.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l1
-*        Pointer to the structure defining the first line. 
-*     l2
-*        Pointer to the structure defining the second line. 
-*     cross
-*        Pointer to a location at which to put a pointer to a dynamically
-*        alocated array containing the axis values at the crossing. If
-*        NULL is supplied no such array is returned. Otherwise, the returned 
-*        array should be freed using astFree when no longer needed. If the 
-*        lines are parallel (i.e. do not cross) then AST__BAD is returned for 
-*        all axis values. Note usable axis values are returned even if the 
-*        lines cross outside the segment defined by the start and end points 
-*        of the lines. The order of axes in the returned array will take
-*        account of the current axis permutation array if appropriate. Note, 
-*        sub-classes such as SkyFrame may append extra values to the end
-*        of the basic frame axis values. A NULL pointer is returned if an
-*        error occurs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the lines cross at a point which is
-*     within the [start,end) segment of both lines. If the crossing point
-*     is outside this segment on either line, or if the lines are parallel,
-*     zero is returned. Note, the start point is considered to be inside
-*     the length of the segment, but the end point is outside.
-
-*  Notes:
-*     - The pointers supplied for "l1" and "l2" should have been created
-*     using the astLineDef method. These structures contained cached
-*     information about the lines which improve the efficiency of this method
-*     when many repeated calls are made. An error will be reported if
-*     either structure does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result =0;
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
-   result = astLineCrossing( fr, l1, l2, cross );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this_frame, const double start[2], 
-                            const double end[2], int *status ) {
-/*
-*  Name:
-*     LineDef
-
-*  Purpose:
-*     Creates a structure describing a line segment in a 2D Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstLineDef *LineDef( AstFrame *this, const double start[2], 
-*                             const double end[2], int *status ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astLineDef
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function creates a structure containing information describing a
-*     given line segment within the supplied 2D Frame. This may include
-*     information which allows other methods such as astLineCrossing to
-*     function more efficiently. Thus the returned structure acts as a
-*     cache to store intermediate values used by these other methods.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame. Must have 2 axes.
-*     start
-*        An array of 2 doubles marking the start of the line segment.
-*     end
-*        An array of 2 doubles marking the end of the line segment.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the memory structure containing the description of the
-*     line. This structure should be freed using astFree when no longer
-*     needed. A NULL pointer is returned (without error) if any of the
-*     supplied axis values are AST__BAD.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstLineDef *result;           /* Returned value */
-
-/* Initialise */
-   result = NULL;
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
-   result = astLineDef( fr, start, end );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static void LineOffset( AstFrame *this_frame, AstLineDef *line, double par, 
-                        double prp, double point[2], int *status ){
-/*
-*  Name:
-*     LineOffset
-
-*  Purpose:
-*     Find a position close to a line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     void LineOffset( AstFrame *this, AstLineDef *line, double par, 
-*                      double prp, double point[2], int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astLineOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a position formed by moving a given distance along
-*     the supplied line, and then a given distance away from the supplied line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     line
-*        Pointer to the structure defining the line. 
-*     par
-*        The distance to move along the line from the start towards the end.
-*     prp
-*        The distance to move at right angles to the line. Positive
-*        values result in movement to the left of the line, as seen from
-*        the observer, when moving from start towards the end.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The pointer supplied for "line" should have been created using the 
-*     astLineDef method. This structure contains cached information about the 
-*     line which improves the efficiency of this method when many repeated 
-*     calls are made. An error will be reported if the structure does not 
-*     refer to the Frame specified by "this".
-*/
-
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-
-/* Obtain a pointer to the FrameSet's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( (AstFrameSet *) this_frame, AST__CURRENT );
-   astLineOffset( fr, line, par, prp, point );
-   fr = astAnnul( fr );
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;    /* Pointer to FrameSet structure */
-   int i;                /* Loop count */
-   int result;           /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   for( i = 0; i < this->nframe; i++ ) {
-      if( !result ) result = astManageLock( this->frame[ i ], mode,
-                                            extra, fail );
-   }
-
-   for ( i = 0; i < this->nnode - 1; i++ ) {
-      if( !result ) result = astManageLock( this->map[ i ], mode, extra,
-                                            fail );
-   }
-
-   return result;
-
-}
-#endif
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     FrameSet method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing FrameSet. This is only possible if the specified inputs
-*     correspond to some subset of the FrameSet outputs. That is, there
-*     must exist a subset of the FrameSet outputs for which each output
-*     depends only on the selected FrameSet inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied FrameSet, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet to be split (the FrameSet is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied FrameSet, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied FrameSet has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied FrameSet. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstMapping *bcmap;   /* Base->current Mapping */
-   int *result;         /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the Mapping from base to current Frame and try to split it. */
-   bcmap = astGetMapping( (AstFrameSet *) this_map, AST__BASE, AST__CURRENT );
-   result = astMapSplit( bcmap, nin, in, map );
-   bcmap = astAnnul( bcmap );
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static int Match( AstFrame *this_frame, AstFrame *target,
-                  int **template_axes, int **target_axes,
-                  AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astMatch
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function matches the current Frame of a "template" FrameSet
-*     to a "target" frame and determines whether it is possible to
-*     convert coordinates between them.  If it is, a Mapping that
-*     performs the transformation is returned along with a new Frame
-*     that describes the coordinate system that results when this
-*     Mapping is applied to the current Frame of the target
-*     FrameSet. In addition, information is returned to allow the axes
-*     in this "result" Frame to be associated with the corresponding
-*     axes in the target and template Frames from which they are
-*     derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template FrameSet, whose current Frame
-*        describes the coordinate system (or set of possible
-*        coordinate systems) into which we wish to convert our
-*        coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the index of the axis in the
-*        template FrameSet's current Frame from which it is
-*        derived. If it is not derived from any template FrameSet
-*        axis, a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the index of the target Frame axis
-*        from which it is derived. If it is not derived from any
-*        target Frame axis, a value of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the target
-*        Frame and the result Frame (see below) and the inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target Frame and the current
-*        Frame of the template FrameSet. In particular, when the
-*        template allows the possibility of transformaing to any one
-*        of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to FrameSet's current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int match;                    /* Result to be returned */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
-   fr = astGetFrame( this, AST__CURRENT );
-
-/* Invoke the astMatch method for this Frame. */
-   match =astMatch( fr, target, template_axes, target_axes, map, result );
-
-/* Annul the Frame pointer. */
-   fr = astAnnul( fr );
-
-/* If an error occurred, clean up by freeing any allocated memory,
-   annulling returned objects and clearing the returned result. */
-   if ( !astOK ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void MatchAxes( AstFrame *frm1_frame, AstFrame *frm2, int *axes, 
-                       int *status ) {
-/*
-*  Name:
-*     MatchAxes
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void MatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes )
-*                     int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astMatchAxes
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-*     frm1
-*        Pointer to the first Frame.
-*     frm2
-*        Pointer to the second Frame.
-*     axes
-*        Pointer to an 
-*        integer array in which to return the indices of the axes (within
-*        the second Frame) that correspond to each axis within the first
-*        Frame. Axis indices start at 1. A value of zero will be stored
-*        in the returned array for each axis in the first Frame that has 
-*        no corresponding axis in the second Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the first Frame.
-*     status
-*        Pointer to inherited status value.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping 
-*     can be found between them using astFindFrame or astConvert. Thus, 
-*     "corresponding axes" are not necessarily identical. For instance, 
-*     SkyFrame axes in two Frames will match even if they describe 
-*     different celestial coordinate systems
-*/
-
-/* Local Variables: */
-   AstFrame *frm1;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the current Frame in the FrameSet. */
-   frm1 = astGetFrame( (AstFrameSet *) frm1_frame, AST__CURRENT );   
-
-/* Invoke the astMatchAxesX on the second Frame. */
-   astMatchAxesX( frm2, frm1, axes );
-
-/* Free resources */
-   frm1 = astAnnul( frm1 );
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes, 
-                        int *status ) {
-/*
-*  Name:
-*     MatchAxesX
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-*                      int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astMatchAxesX
-*     method inherited from the Frame class).
-
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-*     frm2
-*        Pointer to the second Frame.
-*     frm1
-*        Pointer to the first Frame.
-*     axes
-*        Pointer to an integer array in which to return the indices of 
-*        the axes (within the first Frame) that correspond to each axis 
-*        within the second Frame. Axis indices start at 1. A value of zero 
-*        will be stored in the returned array for each axis in the second
-*        Frame that has no corresponding axis in the first Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the second Frame.
-*     status
-*        Pointer to inherited status value.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping 
-*     can be found between them using astFindFrame or astConvert. Thus, 
-*     "corresponding axes" are not necessarily identical. For instance, 
-*     SkyFrame axes in two Frames will match even if they describe 
-*     different celestial coordinate systems
-*/
-
-/* Local Variables: */
-   AstFrame *frm2;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the current Frame in the FrameSet. */
-   frm2 = astGetFrame( (AstFrameSet *) frm2_frame, AST__CURRENT );   
-
-/* Invoke the astMatchAxesX on the current Frame. */
-   astMatchAxesX( frm2, frm1, axes );
-
-/* Free resources */
-   frm2 = astAnnul( frm2 );
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-*  Name:
-*     Norm
-
-*  Purpose:
-*     Normalise a set of FrameSet coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void Norm( AstAxis *this, double value[], int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astNorm method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a set of coordinate values for the
-*     current Frame of a FrameSet, which might potentially be
-*     unsuitable for display to a user (for instance, may lie outside
-*     the expected range of values) into a set of acceptable
-*     alternative values suitable for display.
-*
-*     Typically, for Frames whose axes represent cyclic values (such
-*     as angles or positions on the sky), this function wraps an
-*     arbitrary set of coordinates, so that they lie within the first
-*     cycle (say zero to 2*pi or -pi/2 to +pi/2). For Frames with
-*     ordinary linear axes, without constraints, this function will
-*     typically return the original coordinate values unchanged.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     value
-*        An array of double, with one element for each FrameSet axis.
-*        This should contain the initial set of coordinate values,
-*        which will be modified in place.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to the current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astNorm method to obtain the new values. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astNorm( fr, value );
-   fr = astAnnul( fr );
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
-                     AstMapping *reg, int *status ) {
-/*
-*  Name:
-*     NormBox
-
-*  Purpose:
-*     Extend a box to include effect of any singularities in the Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-*                      AstMapping *reg, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astNormBox method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function modifies a supplied box to include the effect of any
-*     singularities in the co-ordinate system represented by the Frame.
-*     For a normal Cartesian coordinate system, the box will be returned
-*     unchanged. Other classes of Frame may do other things. For instance,
-*     a SkyFrame will check to see if the box contains either the north
-*     or south pole and extend the box appropriately.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     lbnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        lower axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     ubnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        upper axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     reg
-*        A Mapping which should be used to test if any singular points are
-*        inside or outside the box. The Mapping should leave an input
-*        position unchanged if the point is inside the box, and should
-*        set all bad if the point is outside the box.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to the current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astNormBox method to obtain the new values. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astNormBox( fr, lbnd, ubnd, reg );
-   fr = astAnnul( fr );
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
-                    const double point2[], double offset, double point3[], int *status ) {
-/*
-*  Name:
-*     Offset
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void Offset( AstFrame *this,
-*                  const double point1[], const double point2[],
-*                  double offset, double point3[], int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the FrameSet coordinate values of a point
-*     which is offset a specified distance along the geodesic curve
-*     between two other points.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     point1
-*        An array of double, with one element for each FrameSet axis.
-*        This should contain the coordinates of the point marking the
-*        start of the geodesic curve.
-*     point2
-*        An array of double, with one element for each FrameSet axis
-*        This should contain the coordinates of the point marking the
-*        end of the geodesic curve.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be towards the second
-*        point. If it is negative, it will be in the opposite
-*        direction. This offset need not imply a position lying
-*        between the two points given, as the curve will be
-*        extrapolated if necessary.
-*     point3
-*        An array of double, with one element for each FrameSet axis
-*        in which the coordinates of the required point will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - "Bad" coordinate values will also be returned if the two
-*     points supplied are coincident (or otherwise fail to uniquely
-*     specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astOffset method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astOffset( fr, point1, point2, offset, point3 );
-   fr = astAnnul( fr );
-}
-
-static double Offset2( AstFrame *this_frame, const double point1[2], 
-                       double angle, double offset, double point2[2], int *status ){
-/*
-*  Name:
-*     Offset2
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve in a 2D Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     double Offset2( AstFrame *this, const double point1[2], double angle,
-*                     double offset, double point2[2], int *status );
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astOffset2
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the Frame coordinate values of a point which
-*     is offset a specified distance along the geodesic curve at a
-*     given angle from a specified starting point. It can only be
-*     used with 2-dimensional Frames.
-*
-*     For example, in a basic Frame, this offset will be along the
-*     straight line joining two points. For a more specialised Frame
-*     describing a sky coordinate system, however, it would be along
-*     the great circle passing through two sky positions.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of the
-*        point marking the start of the geodesic curve.
-*     angle
-*        The angle (in radians) from the positive direction of the second
-*        axis, to the direction of the required position, as seen from
-*        the starting position. Positive rotation is in the sense of
-*        rotation from the positive direction of axis 2 to the positive
-*        direction of axis 1.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be in the direction of the
-*        given angle. If it is negative, it will be in the opposite
-*        direction.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the required point will be returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The direction of the geodesic curve at the end point. That is, the
-*     angle (in radians) between the positive direction of the second
-*     axis and the continuation of the geodesic curve at the requested
-*     end point. Positive rotation is in the sense of rotation from
-*     the positive direction of axis 2 to the positive direction of axis 1.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - An error will be reported if the Frame is not 2-dimensional.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astOffset2 method for this Frame. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astOffset2( fr, point1, angle, offset, point2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static void Overlay( AstFrame *template_frame, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template FrameSet on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astOverlay
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes from the current Frame of a
-*     FrameSet on to another Frame, so as to over-ride selected
-*     attributes of that second Frame. Normally only those attributes
-*     which have been specifically set in the template will be
-*     transferred. This implements a form of defaulting, in which a
-*     Frame acquires attributes from the template, but retains its
-*     original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-
-*  Parameters:
-*     template
-*        Pointer to the template FrameSet, for whose current Frame
-*        values should have been explicitly set for any attribute
-*        which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of
-*        the "result" Frame (see below). For each axis in the result
-*        frame, the corresponding element of this array should contain
-*        the (zero-based) index of the axis in the current Frame of
-*        the template FrameSet to which it corresponds. This array is
-*        used to establish from which template Frame axis any
-*        axis-dependent attributes should be obtained.
-*
-*        If any axis in the result Frame is not associated with a
-*        template Frame axis, the corresponding element of this array
-*        should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *template;        /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   template = (AstFrameSet *) template_frame;
-
-/* Obtain a pointer to the current Frame and invoke its astOverlay
-   method to overlay its attributes. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( template, AST__CURRENT );
-   astOverlay( fr, template_axes, result );
-   fr = astAnnul( fr );
-}
-
-static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
-/*
-*  Name:
-*     PermAxes
-
-*  Purpose:
-*     Permute the order of a FrameSet's axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void PermAxes( AstFrame *this, const int perm[], int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astPermAxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function permutes the order in which the axes in the
-*     current Frame of a FrameSet occur.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     perm
-*        An array of int (with one element for each axis of the
-*        FrameSet's current Frame) which lists the axes in their new
-*        order. Each element of this array should be a (zero-based)
-*        axis index identifying the axes according to their old
-*        (un-permuted) order.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Only genuine permutations of the axis order are permitted, so
-*     each axis must be referenced exactly once in the "perm" array.
-*     - If more than one axis permutation is applied to the same Frame
-*     in a FrameSet, the effects are cumulative.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   AstPermMap *map;              /* Pointer to axis permutation Mapping */
-   int *invperm;                 /* Pointer to inverse permutation array */
-   int axis;                     /* Loop counter for axes */
-   int naxes;                    /* Number of FrameSet axes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the permutation array, to check that it describes a
-   genuine permutation. */
-   astCheckPerm( this, perm, "astPermAxes" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astPermAxes method to permute its axes. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astPermAxes( fr, perm );
-   fr = astAnnul( fr );
-
-/* Obtain the number of axes in the FrameSet's current Frame and allocate
-   memory to hold an inverse permutation array. */
-   naxes =  astGetNaxes( this );
-   invperm = astMalloc( sizeof( int ) * (size_t) naxes );
-
-/* Fill the inverse permutation array with values that will invert the
-   axis permutation supplied. */
-   if ( astOK ) {
-      for ( axis = 0; axis < naxes; axis++ ) invperm[ perm[ axis ] ] = axis;
-
-/* Create a PermMap that will permute coordinate values in the same way as
-   the current Frame's axes have been permuted. */
-      map = astPermMap( naxes, invperm, naxes, perm, NULL, "", status );
-
-/* Modify the Frame's relationship to the rest of the Frames in the
-   FrameSet so that the correct coordinate values remain associated
-   with the permuted axes. */
-      astRemapFrame( this, AST__CURRENT, map );
-
-/* Annul the PermMap and free the inverse permutation array. */
-      map = astAnnul( map );
-   }
-   invperm = astFree( invperm );
-}
-
-static AstFrame *PickAxes( AstFrame *this_frame, int naxes, const int axes[],
-                           AstMapping **map, int *status ) {
-/*
-*  Name:
-*     PickAxes
-
-*  Purpose:
-*     Create a new Frame by picking axes from a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-*                         AstMapping **map, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astPickAxes protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function creates a new Frame whose axes are copies of axes
-*     picked from the current Frame of an existing FrameSet. Other
-*     Frame attributes are also copied from this current Frame to the
-*     new Frame. Zero or more of the original axes may be picked in
-*     any order, but each can be used only once. Additional axes (with
-*     default characteristics) may be included in the new Frame if
-*     required.
-*
-*     Optionally, a Mapping that converts between the original Frame's
-*     axes and those of the new Frame may also be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     naxes
-*        The number of axes required in the new Frame.
-*     axes
-*        Pointer to an array of int with naxes elements. This should
-*        contain (zero based) axis indices specifying the axes which
-*        are to be included in the new Frame, in the order
-*        required. Each axis index may occur only once.
-*
-*        If additional (default) axes are also to be included, the
-*        corresponding elements of this array should be set to -1.
-*     map
-*        Address of a location to receive a pointer to a new
-*        Mapping. This will be a PermMap (or a UnitMap as a special
-*        case) that describes the axis permutation that has taken
-*        place between the current Frame of the FrameSet and the new
-*        Frame.  The forward transformation will convert from the
-*        original FrameSet's axes to the new one's, and vice versa.
-*
-*        If this Mapping is not required, a NULL value may be supplied
-*        for this parameter.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new Frame.
-
-*  Notes:
-*     - The class of object returned may differ from that of the
-*     original current Frame, depending on which axes are
-*     selected. For example, if a single axis is picked from a
-*     SkyFrame (which always has two axes), the resulting Frame cannot
-*     be a valid SkyFrame, so will revert to the parent class (Frame)
-*     instead.
-*     - The new Frame contains a deep copy of all the data selected
-*     from the original current Frame. Modifying the new Frame will
-*     therefore not affect the FrameSet or the Frames it contains.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrame *frame;              /* Pointer to Frame to be returned */
-   AstFrameSet *this;            /* Pointer to FrameSet structure */
-
-/* Initialise the returned pointers. */
-   if ( map ) *map = NULL;
-   frame = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return frame;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Check that a valid set of axes is being selected . */
-   astValidateAxisSelection( this, naxes, axes, "astPickAxes" );
-
-/* Obtain a pointer to the FrameSet's current Frame and use its
-   astPickAxes method to obtain the required new Frame and
-   Mapping. Annul the current Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   frame = astPickAxes( fr, naxes, axes, map );
-   fr = astAnnul( fr );
-
-/* If an error occurred, annul the Mapping pointer (if requested) and
-   the new Frame pointer. */
-   if ( !astOK ) {
-      if ( map ) *map = astAnnul( *map );
-      frame = astAnnul( frame );
-   }
-
-/* Return the pointer to the new Frame. */
-   return frame;
-}
-
-static void PrimaryFrame( AstFrame *this_frame, int axis1,
-                          AstFrame **frame, int *axis2, int *status ) {
-/*
-*  Name:
-*     PrimaryFrame
-
-*  Purpose:
-*     Uniquely identify a primary Frame and one of its axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void PrimaryFrame( AstFrame *this, int axis1, AstFrame **frame,
-*                        int *axis2, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected
-*     astPrimaryFrame method inherited from the Frame class).
-
-*  Description:
-*     This function returns information about the underlying (primary)
-*     Frame corresponding to a specified axis of the current Frame of
-*     a FrameSet, when this current Frame may be a compound Frame
-*     composed of more than one simpler one.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis1
-*        An axis index (zero-based) identifying the axis of the
-*        FrameSet's current Frame for which information is required.
-*     frame
-*        Address of a location to receive a pointer to the underlying
-*        (primary) frame to which the requested axis belongs
-*        (i.e. this will not be a compound Frame).
-*     axis2
-*        Pointer to an int which is to receive the axis index within
-*        "frame" which identifies the axis being referred to, using
-*        the axis order that applied when the primary Frame was
-*        originally constructed (i.e. this function undoes all
-*        subsequent axis pemutations and the effects of combining
-*        Frames, in order to reveal the original underlying axis
-*        order).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This protected method is provided so that class
-*     implementations can distinguish the axes of Frames from one
-*     another (e.g. can distinguish a longitude axis as being
-*     different from a latitide axis) even after their order has been
-*     permuted and they have been combined with axes from other
-*     Frames.
-*     - The reference count of the primary Frame will be incremented
-*     by one to reflect the new pointer returned.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Initialise the returned values. */
-   *frame = NULL;
-   *axis2 = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index supplied. */
-   (void) astValidateAxis( this, axis1, "astPrimaryFrame" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke its
-   astPrimaryFrame method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astPrimaryFrame( fr, axis1, frame, axis2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, annul the returned object and clear the
-   returned axis value. */
-   if ( !astOK ) {
-      *frame = astAnnul( *frame );
-      *axis2 = 0;
-   }
-}
-
-static double Rate( AstMapping *this_mapping, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astRate method
-*     inherited from the Frame class).
-
-*     This function evaluates the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-*
-*     The result is estimated by interpolating the function using a
-*     fourth order polynomial in the neighbourhood of the specified
-*     position. The size of the neighbourhood used is chosen to minimise
-*     the RMS residual per unit length between the interpolating
-*     polynomial and the supplied Mapping function.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     astRate()
-*        The rate of change of Mapping output "ax1" with respect to input 
-*        "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*        calculated.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   AstMapping *map;              /* Pointer to the base->current Mapping */
-   double result;                /* Returned rate of change */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
-   FrameSet (note this takes account of whether the FrameSet has been
-   inverted). */
-   map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Invoke the astRate method on the Mapping. */
-   result = astRate( map, at, ax1, ax2 );
-
-/* Annul the Mapping pointer. */
-   map = astAnnul( map );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void RecordIntegrity( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     RecordIntegrity
-
-*  Purpose:
-*     Record the current integrity state of a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void RecordIntegrity( AstFrameSet *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function.
-
-*  Description:
-*     This function makes a record of the current integrity state of a
-*     FrameSet by taking a copy of its current Frame (it stores a
-*     pointer to this copy in a static variable). If the current Frame
-*     is subsequently modified, the RestoreIntegrity function can then
-*     attempt to restore the FrameSet's integrity to this recorded
-*     state by appropriately remapping its current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *current;            /* Pointer to current Frame */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise the record of the FrameSet's integrity. */
-   integrity_frame = NULL;
-   integrity_lost = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
-   current = astGetFrame( this, AST__CURRENT );
-
-/* Make a copy of this Frame, storing its pointer. */
-   integrity_frame = astCopy( current );
-
-/* Annul the current Frame pointer. */
-   current = astAnnul( current );
-}
-
-static void RemapFrame( AstFrameSet *this, int iframe, AstMapping *map, int *status ) {
-/*
-*++
-*  Name:
-c     astRemapFrame
-f     AST_REMAPFRAME
-
-*  Purpose:
-*     Modify a Frame's relationship to other Frames in a FrameSet.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frameset.h"
-c     void astRemapFrame( AstFrameSet *this, int iframe, AstMapping *map )
-f     CALL AST_REMAPFRAME( THIS, IFRAME, MAP, STATUS )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-c     This function modifies the relationship (i.e. Mapping) between a
-f     This routine modifies the relationship (i.e. Mapping) between a
-*     specified Frame in a FrameSet and the other Frames in that
-*     FrameSet.
-*
-*     Typically, this might be required if the FrameSet has been used
-*     to calibrate (say) an image, and that image is re-binned. The
-*     Frame describing the image will then have undergone a coordinate
-*     transformation, and this should be communicated to the associated
-c     FrameSet using this function.
-f     FrameSet using this routine.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FrameSet.
-c     iframe
-f     IFRAME = INTEGER (Given)
-*        The index within the FrameSet of the Frame to be modified.
-*        This value should lie in the range from 1 to the number of
-*        Frames in the FrameSet (as given by its Nframe attribute).
-c     map
-f     MAP = INTEGER (Given)
-*        Pointer to a Mapping whose forward transformation converts
-*        coordinate values from the original coordinate system
-*        described by the Frame to the new one, and whose inverse
-*        transformation converts in the opposite direction.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - A value of AST__BASE or AST__CURRENT may be given for the
-c     "iframe" parameter to specify the base Frame or the current
-f     IFRAME argument to specify the base Frame or the current
-*     Frame respectively.
-*     - The relationship between the selected Frame and any other
-c     Frame within the FrameSet will be modified by this function,
-f     Frame within the FrameSet will be modified by this routine,
-*     but the relationship between all other Frames in the FrameSet
-*     remains unchanged.
-*     - The number of input coordinate values accepted by the Mapping
-*     (its Nin attribute) and the number of output coordinate values
-*     generated (its Nout attribute) must be equal and must match the
-*     number of axes in the Frame being modified.
-*     - If a simple change of axis order is required, then the
-c     astPermAxes function may provide a more straightforward method
-f     AST_PERMAXES routine may provide a more straightforward method
-*     of making the required changes to the FrameSet.
-c     - This function cannot be used to change the number of Frame
-f     - This routine cannot be used to change the number of Frame
-*     axes. To achieve this, a new Frame must be added to the FrameSet
-c     (astAddFrame) and the original one removed if necessary
-c     (astRemoveFrame).
-f     (AST_ADDFRAME) and the original one removed if necessary
-f     (AST_REMOVEFRAME).
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to Frame */
-   int naxes;                    /* Number of Frame axes */
-   int nin;                      /* Number of Mapping input coordinates */
-   int nout;                     /* Number of Mapping output coordinates */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, "astRemapFrame" );
-
-/* Obtain the number of input and output coordinates per point for the
-   Mapping supplied. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Obtain a pointer to the specified Frame and determine how many axes
-   it has. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, iframe );
-   naxes = astGetNaxes( fr );
-   fr = astAnnul( fr );
-
-/* Check that the number of input coordinates matches the number of
-   Frame axes and report an error if necessary. */
-   if ( astOK ) {
-      if ( nin != naxes ) {
-         astError( AST__NCPIN, "astRemapFrame(%s): Bad number of %s input "
-                   "coordinate values (%d).", status, astGetClass( this ),
-                   astGetClass( map ), nin );
-         astError( AST__NCPIN, "The %s given should accept %d coordinate "
-                   "value%s for each input point.", status, astGetClass( map ), naxes,
-                   ( naxes == 1 ) ? "" : "s" );
-
-/* Similarly, check that the number of output coordinates matches the
-   number of Frame axes. */
-      } else if ( nout != naxes ) {
-         astError( AST__NCPIN, "astRemapFrame(%s): Bad number of %s output "
-                   "coordinate values (%d).", status, astGetClass( this ),
-                   astGetClass( map ), nout );
-         astError( AST__NCPIN, "The %s given should generate %d "
-                   "coordinate value%s for each output point.", status,
-                   astGetClass( map ), naxes, ( naxes == 1 ) ? "" : "s" );
-      }
-   }
-
-/* If there is more than one Frame present in the FrameSet, extend the
-   FrameSet arrays to hold a new node. */
-   if ( astOK && ( this->nframe > 1 ) ) {
-      this->map = astGrow( this->map, this->nnode, sizeof( AstMapping * ) );
-      this->link = astGrow( this->link, this->nnode, sizeof( int ) );
-      this->invert = astGrow( this->invert, this->nnode, sizeof( int ) );
-
-/* Clone and store a pointer to the Mapping. */
-      if ( astOK ) {
-         this->map[ this->nnode - 1 ] = astClone( map );
-
-/* Add a new "link" element showing that the new node is derived from
-   that of the old Frame and store the current value of the Invert
-   attribute for the Mapping. */
-         this->link[ this->nnode - 1 ] = this->node[ iframe - 1 ];
-         this->invert[ this->nnode - 1 ] = astGetInvert( map );
-
-/* Increment the node count and associate the modified Frame with the
-   new node. */
-         if ( astOK ) {
-            this->nnode++;
-            this->node[ iframe - 1 ] = this->nnode - 1;
-
-/* Tidy the resulting set of nodes, because the node originally
-   referenced by the Frame may no longer be needed. This also
-   simplifies any compound Mapping which may result if this node is
-   removed. */
-            TidyNodes( this, status );
-         }
-      }
-   }
-}
-
-static void RemoveFrame( AstFrameSet *this, int iframe, int *status ) {
-/*
-*++
-*  Name:
-c     astRemoveFrame
-f     AST_REMOVEFRAME
-
-*  Purpose:
-*     Remove a Frame from a FrameSet.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "frameset.h"
-c     void astRemoveFrame( AstFrameSet *this, int iframe )
-f     CALL AST_REMOVEFRAME( THIS, IFRAME, STATUS )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-c     This function removes a Frame from a FrameSet. All other Frames
-f     This routine removes a Frame from a FrameSet. All other Frames
-*     in the FrameSet have their indices re-numbered from one (if
-*     necessary), but are otherwise unchanged.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the FrameSet.
-c     iframe
-f     IFRAME = INTEGER (Given)
-*        The index within the FrameSet of the Frame to be removed.
-*        This value should lie in the range from 1 to the number of
-*        Frames in the FrameSet (as given by its Nframe attribute).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Removing a Frame from a FrameSet does not affect the
-*     relationship between other Frames in the FrameSet, even if they
-*     originally depended on the Frame being removed.
-*     - The number of Frames in a FrameSet cannot be reduced to zero.
-*     An error will result if an attempt is made to remove the only
-*     remaining Frame.
-*     - A value of AST__BASE or AST__CURRENT may be given for the
-c     "iframe" parameter to specify the base Frame or the current
-f     IFRAME argument to specify the base Frame or the current
-*     Frame respectively.
-*     - If a FrameSet's base or current Frame is removed, the Base or
-*     Current attribute (respectively) of the FrameSet will have its
-*     value cleared, so that another Frame will then assume its role
-*     by default.
-*     - If any other Frame is removed, the base and current Frames
-*     will remain the same. To ensure this, the Base and/or Current
-*     attributes of the FrameSet will be changed, if necessary, to
-*     reflect any change in the indices of these Frames.
-*--
-*/
-
-/* Local Variables: */
-   int ifr;                      /* Loop counter for Frames */
-   int ii;                       /* Base/current Frame index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, "astRemoveFrame" );
-   if ( astOK ) {
-
-/* Reject any attempt to remove the final Frame from the FrameSet. */
-      if ( this->nframe == 1 ) {
-         astError( AST__REMIN, "astRemoveFrame(%s): Invalid attempt to "
-                   "remove the only Frame in a %s.", status, astGetClass( this ),
-                   astGetClass( this ) );
-
-/* If OK, annul the pointer to the selected Frame. */
-      } else {
-         this->frame[ iframe - 1 ] = astAnnul( this->frame[ iframe - 1 ] );
-
-/* Loop to move all subsequent Frame pointers down in the FrameSet's
-   "frame" array to close the resulting gap. Also move the associated
-   "node" array contents in the same way. */
-         for ( ifr = iframe; ifr < this->nframe; ifr++ ) {
-            this->frame[ ifr - 1 ] = this->frame[ ifr ];
-            this->node[ ifr - 1 ] = this->node[ ifr ];
-         }
-         this->frame[ this->nframe - 1 ] = NULL;
-         this->node[ this->nframe - 1 ] = -1;
-
-/* Decrement the Frame count. */
-         this->nframe--;
-
-/* Tidy the nodes in the FrameSet. */
-         TidyNodes( this, status );
-
-/* If the Base attribute is set and the removed Frame was the base
-   Frame, then clear the attribute value so that a new base Frame will
-   be selected by default. */
-         if ( astTestBase( this ) ) {
-            ii = astGetBase( this );
-            if ( iframe == ii ) {
-               astClearBase( this );
-
-/* If the index of the removed Frame is smaller than the base Frame
-   index, then decrement the Base attribute so that the same base
-   Frame will be used in future. */
-            } else if ( iframe < ii ) {
-               astSetBase( this, ii - 1 );
-            }
-         }
-
-/* Repeat the above procedure for the current Frame. */
-         if ( astTestCurrent( this ) ) {
-            ii = astGetCurrent( this );
-            if ( iframe == ii ) {
-               astClearCurrent( this );
-            } else if ( iframe < ii ) {
-               astSetCurrent( this, ii - 1 );
-            }
-         }
-      }
-   }
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     FrameSet method (over-rides the astRemoveRegions method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a FrameSet) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel FrameSet), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the FrameSet class invokes the
-*     astRemoveRegions method on all the component Frames and Mappings, 
-*     and joins the results together into a new FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame **newfrms;           /* Array of new Frames */
-   AstFrameSet *new;             /* Pointer to new FrameSet */
-   AstFrameSet *this;            /* Pointer to FrameSet structure */
-   AstMapping **newmaps;         /* Array of new Mappings */
-   AstMapping *result;           /* Result pointer to return */
-   int changed;                  /* Has any mapping been changed? */
-   int i;                        /* Loop count */
-   int nax;                      /* Number of Frame axes */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the FrameSet. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Allocate arrays to hold the modified Mapping and Frame pointers. */
-   newmaps = astMalloc( sizeof( AstMapping *)*( this->nnode - 1 ) );
-   newfrms = astMalloc( sizeof( AstFrame *)*( this->nframe ) );
-   if( astOK ) {
-
-/* Invoke the astRemoveRegions method on all the component Mappings. */
-      changed = 0;
-      for( i = 0; i < this->nnode - 1; i++ ) {
-         newmaps[ i ] = astRemoveRegions( this->map[ i ] );
-
-/* Note if any Mapping was changed. */
-         if( newmaps[ i ] != this->map[ i ] ) {
-            changed = 1;
-
-/* The implementation of the astRemoveRegions method provided by the
-   Region class returns a Frame rather than a UnitMap. But we need
-   Mappings here, not Frames. So if the new Mapping is a Frame, replace 
-   it with an equivalent UnitMap. */
-            if( astIsAFrame( newmaps[ i ] ) ) {
-               nax = astGetNin( newmaps[ i ] );
-               (void) astAnnul( newmaps[ i ] );
-               newmaps[ i ] = (AstMapping *) astUnitMap( nax, " ", status );
-            }
-         }
-      }
-
-/* Invoke the astRemoveRegions method on all the component Frames. */
-      for( i = 0; i < this->nframe; i++ ) {
-         newfrms[ i ] = astRemoveRegions( this->frame[ i ] );
-
-/* Note if any Frame was changed. */
-         if( newfrms[ i ] != this->frame[ i ] ) changed = 1;
-      }
-
-/* If no component was modified, just return a clone of the supplied
-   pointer. */
-      if( ! changed ) {
-         result = astClone( this );
-
-/* Otherwise, we need to create a new FrameSet to return. We take a deep 
-   copy of the supplied FrameSet and then modify the Mappings and Frames 
-   so that we retain any extra information in the supplied FrameSet. */
-      } else {
-         new = astCopy( this );
-
-         for( i = 0; i < this->nnode - 1; i++ ) {
-            (void) astAnnul( new->map[ i ] );
-            new->map[ i ] = astClone( newmaps[ i ] );
-         }
-
-         for( i = 0; i < this->nframe; i++ ) {
-            (void) astAnnul( new->frame[ i ] );
-            new->frame[ i ] = astClone( newfrms[ i ] );
-         }
-
-         result = (AstMapping *) new;
-      }
-
-/* Free resources. */
-      for( i = 0; i < this->nnode - 1; i++ ) {
-         newmaps[ i ] = astAnnul( newmaps[ i ] );
-      }
-
-      for( i = 0; i < this->nframe; i++ ) {
-         newfrms[ i ] = astAnnul( newfrms[ i ] );
-      }
-
-   }
-
-   newfrms = astFree( newfrms );
-   newmaps = astFree( newmaps );
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void ReportPoints( AstMapping *this_mapping, int forward,
-                          AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-*  Name:
-*     ReportPoints
-
-*  Purpose:
-*     Report the effect of transforming a set of points using a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void ReportPoints( AstMapping *this, int forward,
-*                        AstPointSet *in_points, AstPointSet *out_points, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astReportPoints
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reports the coordinates of a set of points before
-*     and after being transformed by a FrameSet, by writing them to
-*     standard output.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     forward
-*        A non-zero value indicates that the FrameSet's forward
-*        coordinate transformation has been applied, while a zero
-*        value indicates the inverse transformation.
-*     in_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of a set of points before the FrameSet was
-*        applied.
-*     out_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of the same set of points after the FrameSet has
-*        been applied.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *base_frame;         /* Pointer to current Frame */
-   AstFrame *current_frame;      /* Pointer to base Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double **ptr_in;              /* Pointer to array of input data pointers */
-   double **ptr_out;             /* Pointer to array of output data pointers */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of input coordinates per point */
-   int ncoord_out;               /* Number of output coordinates per point */
-   int npoint;                   /* Number of points to report */
-   int npoint_in;                /* Number of input points */
-   int npoint_out;               /* Number of output points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Obtain the numbers of points and coordinates associated with each
-   PointSet. */ 
-   npoint_in = astGetNpoint( in_points );
-   npoint_out = astGetNpoint( out_points );
-   ncoord_in = astGetNcoord( in_points );
-   ncoord_out = astGetNcoord( out_points );
-
-/* Obtain the pointers that give access to the coordinate data
-   associated with each PointSet. */
-   ptr_in = astGetPoints( in_points );
-   ptr_out = astGetPoints( out_points );
-
-/* In the event that both PointSets don't contain equal numbers of
-   points (this shouldn't actually happen), simply use the minimum
-   number. */
-   npoint = ( npoint_in < npoint_out ) ? npoint_in : npoint_out;
-
-/* Obtain pointers to the FrameSet's base and current Frames. */
-   base_frame = astGetFrame( this, AST__BASE );
-   current_frame = astGetFrame( this, AST__CURRENT );
-
-/* Loop to report the effect of the transformation on each point in
-   turn. */
-   if ( astOK ) {
-      for ( point = 0; point < npoint; point++ ) {
-
-/* Report the input coordinates (in parentheses and separated by
-   commas). Format each value for display using the appropriate
-   Frame's astFormat method. */
-         printf( "(" );
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            printf( "%s%s", coord ? ", " : "",
-                    astFormat( forward ? base_frame : current_frame,
-                               coord, ptr_in[ coord ][ point ] ) );
-         }
-
-/* Similarly report the output coordinates, this time formatting
-   values using the other Frame's astFormat method. */
-         printf( ") --> (" );
-         for ( coord = 0; coord < ncoord_out; coord++ ) {
-            printf( "%s%s", coord ? ", " : "",
-                    astFormat( forward ? current_frame : base_frame,
-                               coord, ptr_out[ coord ][ point ] ) );
-         }
-         printf( ")\n" );
-      }
-   }
-
-/* Annul the Frame pointers. */
-   base_frame = astAnnul( base_frame );
-   current_frame = astAnnul( current_frame );
-}
-
-static void Resolve( AstFrame *this_frame, const double point1[],
-                     const double point2[], const double point3[],
-                     double point4[], double *d1, double *d2, int *status ){
-/*
-*  Name:
-*     Resolve
-
-*  Purpose:
-*     Resolve a vector into two orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void Resolve( AstFrame *this, const double point1[],
-*                   const double point2[], const double point3[],
-*                   double point4[], double *d1, double *d2, int *status );
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astResolve
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function resolves a vector into two perpendicular components.
-*     The vector from point 1 to point 2 is used as the basis vector.
-*     The vector from point 1 to point 3 is resolved into components
-*     parallel and perpendicular to this basis vector. The lengths of the
-*     two components are returned, together with the position of closest
-*     aproach of the basis vector to point 3.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vector to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     point3
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the vector to be
-*        resolved.
-*     point4
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the point of closest approach of the
-*        basis vector to point 3 will be returned.
-*     d1
-*        The address of a location at which to return the distance from
-*        point 1 to point 4 (that is, the length of the component parallel
-*        to the basis vector). Positive values are in the same sense as
-*        movement from point 1 to point 2.
-*     d2
-*        The address of a location at which to return the distance from
-*        point 4 to point 3 (that is, the length of the component
-*        perpendicular to the basis vector). The value is always positive.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Each vector used in this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the required
-*     output values are undefined.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astResolve method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astResolve( fr, point1, point2, point3, point4, d1, d2 );
-   fr = astAnnul( fr );
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[],
-                                   const double point2[], AstPointSet *in,
-                                   AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     ResolvePoints
-
-*  Purpose:
-*     Resolve a set of vectors into orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstPointSet *astResolvePoints( AstFrame *this, const double point1[], 
-*                                    const double point2[], AstPointSet *in,
-*                                    AstPointSet *out )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astResolvePoints method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function takes a Frame and a set of vectors encapsulated
-*     in a PointSet, and resolves each one into two orthogonal components,
-*     returning these two components in another PointSet.
-*
-*     This is exactly the same as the public astResolve method, except
-*     that this method allows many vectors to be processed in a single call,
-*     thus reducing the computational cost of overheads of many
-*     individual calls to astResolve.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vectors to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     in
-*        Pointer to the PointSet holding the ends of the vectors to be
-*        resolved.
-*     out
-*        Pointer to a PointSet which will hold the length of the two
-*        resolved components. A NULL value may also be given, in which 
-*        case a new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet. The first axis will 
-*     hold the lengths of the vector components parallel to the basis vector. 
-*     These values will be signed (positive values are in the same sense as 
-*     movement from point 1 to point 2. The second axis will hold the lengths 
-*     of the vector components perpendicular to the basis vector. These
-*     values will always be positive.
-
-*  Notes:
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of axes in the supplied Frame.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and 2 coordinate values per point.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstFrameSet *this;            /* Pointer to FrameSet structure */
-   AstFrame *fr;                 /* Pointer to current Frame */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astResolvePoints method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astResolvePoints( this, point1, point2, in, out );
-   fr = astAnnul( fr );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static void RestoreIntegrity( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     RestoreIntegrity
-
-*  Purpose:
-*     Restore a previous integrity state for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void RestoreIntegrity( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet member function.
-
-*  Description:
-*     This function restores a FrameSet to a previous integrity state,
-*     as recorded (in static variables) by a previous invocation of
-*     the RecordIntegrity function. It does this by appropriately
-*     remapping the FrameSet's current Frame, if this appears
-*     necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Notes:
-*     - The previous record of the FrameSet's integrity state (as
-*     recorded by RecordIntegrity) is deleted by this function, even
-*     if it is invoked with the global error status set.
-*     - An error will result if the previous integrity state cannot be
-*     restored.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *current;            /* Pointer to current Frame */
-   AstFrameSet *cvt;             /* Pointer to conversion FrameSet */
-   AstMapping *map;              /* Pointer to conversion Mapping */
-   int flags;                    /* Flags associated with current frame */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Check that a previous record of the FrameSet's integrity state has
-   been made. Do not modify the FrameSet if it appears that the
-   previous integrity state has not been lost (i.e. that the current
-   Frame has not been modified), nor if there is only one Frame
-   present. Check the global error status. */
-   if ( integrity_frame && integrity_lost && ( astGetNframe( this ) > 1 ) &&
-        astOK ) {
-
-/* Obtain a pointer to the current Frame. */
-      current = astGetFrame( this, AST__CURRENT );
-
-/* Since we need to obtain a conversion between the recorded copy of
-   this Frame and the current one, we must match their Domain
-   attributes (otherwise conversion cannot be performed). Do this by
-   changing the recorded copy as necessary. */
-      if ( astTestDomain( current ) ) {
-         astSetDomain( integrity_frame, astGetDomain( current ) );
-      } else {
-         astClearDomain( integrity_frame );
-      }
-
-/* Temporarily set both Frames AST__INTFLAG flag to indicate that the
-   following call to astConvert is part of the process of restoring a
-   FrameSet's integrity. Some classes of Frame (e.g. DSBSpecFrames) may
-   choose to return a different Mapping in this case. */
-      astSetFrameFlags( integrity_frame, astGetFrameFlags( integrity_frame ) 
-                                         | AST__INTFLAG );
-      flags = astGetFrameFlags( current );
-      astSetFrameFlags( current, flags | AST__INTFLAG );
-
-/* Obtain the required conversion FrameSet, restore the original frame
-   flags and annul the current Frame pointer. */
-      cvt = astConvert( integrity_frame, current, "" );
-      astSetFrameFlags( current, flags );
-      current = astAnnul( current );
-
-/* If no conversion could be found, then the FrameSet's integrity
-   state cannot be restored, so report an error. */
-      if ( !cvt ) {
-         if( astOK ) {
-            astError( AST__ILOST, "%s(%s): Cannot maintain %s integrity.", status,
-                      integrity_method, astGetClass( this ),
-                      astGetClass( this ) );
-         }
-
-/* Otherwise, obtain a pointer to the conversion Mapping. */
-      } else {
-         map = astGetMapping( cvt, AST__BASE, AST__CURRENT );
-
-/* If the Mapping is not a UnitMap (i.e. a null Mapping), then use it
-   to remap the FrameSet's current Frame. */
-         if ( strcmp( astGetClass( map ), "UnitMap" ) ) {
-            astRemapFrame( this, AST__CURRENT, map );
-         }
-
-/* Annul the conversion Mapping and Frameset pointers. */
-         map = astAnnul( map );
-         cvt = astAnnul( cvt );
-      }
-   }
-
-/* Delete the recorded integrity information by annulling the original
-   copy of the current Frame (thus deleting it) and resetting the
-   associated modification flag. */
-   if ( integrity_frame ) integrity_frame = astAnnul( integrity_frame );
-   integrity_lost = 0;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     FrameSet member function (extends the astSetAttrib method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function assigns an attribute value for a FrameSet, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     setting
-*        Pointer to a null terminated string specifying the new
-*        attribute value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Attributes:
-*     The set of attribute values is not fixed and is determined by
-*     the current Frame. In addition, the FrameSet class defines the
-*     following attributes:
-*
-*        Base (integer)
-*        Current (integer)
-
-*  Notes:
-*     - This protected method is intended to be invoked by the Object
-*     astSet method and makes additional attributes accessible to it.
-*     - All attribute settings passed to this function are simply
-*     passed on to the corresponding method for the FrameSet's current
-*     Frame.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int base;                     /* Base attribute value */
-   int base_off;                 /* Offset of Base value string */
-   int current;                  /* Current attribute value */
-   int current_off;              /* Offset of Current value string */
-   int id;                       /* Offset of ID string */
-   int invert;                   /* Invert attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-   int report;                   /* Report attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
-   (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
-/* Read as an integer. */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "base= %d %n", &base, &nc ) )
-          && ( nc >= len ) ) {
-      astSetBase( this, base );
-
-/* Also allow a string. */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "base= %n%*s %n", &base_off, &nc ) )
-                 && ( nc >= len ) ) {
-
-/* Check for "AST__CURRENT" or "Current". */
-      if ( astChrMatch( "AST__CURRENT", setting + base_off ) ||
-           astChrMatch( "Current", setting + base_off ) ) {
-         astSetBase( this, AST__CURRENT );
-
-/* Check for "AST__BASE" or "Base" (possible, although not very
-   useful). */
-      } else if ( astChrMatch( "AST__BASE", setting + base_off ) ||
-                  astChrMatch( "Base", setting + base_off ) ) {
-
-/* Report an error if the value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid index value for "
-                   "Base Frame \"%s\".", status,
-                   astGetClass( this ),  setting + base_off );
-      }
-
-/* Current. */
-/* -------- */
-/* Since this determines the choice of current Frame, we must restore
-   the integrity state of the FrameSet before changing this attribute
-   and record the new integrity state afterwards. */
-
-/* Read as an integer. */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "current= %d %n", &current, &nc ) )
-                 && ( nc >= len ) ) {
-      RestoreIntegrity( this, status );
-      astSetCurrent( this, current );
-      RecordIntegrity( this, status );
-
-/* Also allow a string. */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "current= %n%*s %n",
-                              &current_off, &nc ) )
-                 && ( nc >= len ) ) {
-
-/* Check for "AST__BASE" or "Base". */
-      if ( astChrMatch( "AST__BASE", setting + current_off ) ||
-           astChrMatch( "Base", setting + current_off ) ) {
-         RestoreIntegrity( this, status );
-         astSetCurrent( this, AST__BASE );
-         RecordIntegrity( this, status );
-
-/* Check for "AST__CURRENT" or "Current" (possible, although not very
-   useful). */
-      } else if ( astChrMatch( "AST__CURRENT", setting + current_off ) ||
-                  astChrMatch( "Current", setting + current_off ) ) {
-
-/* Report an error if the value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid index value for "
-                   "Current Frame \"%s\".", status,
-                   astGetClass( this ),  setting + current_off );
-      }
-
-/* ID. */
-/* --- */
-   } else if ( nc = 0, ( 0 == astSscanf( setting, "id=%n%*[^\n]%n", &id, &nc ) )
-                       && ( nc >= len ) ) {
-      astSetID( this, setting + id );
-
-/* Invert. */
-/* ------- */
-/* Since this affects the choice of current Frame, we must restore the
-   integrity state of the FrameSet before changing this attribute and
-   record the new integrity state afterwards. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "invert= %d %n", &invert, &nc ) )
-        && ( nc >= len ) ) {
-      RestoreIntegrity( this, status );
-      astSetInvert( this, invert );
-      RecordIntegrity( this, status );
-
-/* Report. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "report= %d %n", &report, &nc ) )
-        && ( nc >= len ) ) {
-      astSetReport( this, report );
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
-   if a read-only attribute has been specified. */
-   } else if ( MATCH( "class" ) ||
-               MATCH( "nframe" ) ||
-               MATCH( "nin" ) ||
-               MATCH( "nobject" ) ||
-               MATCH( "nout" ) ||
-               MATCH( "refcount" ) ||
-               MATCH( "tranforward" ) ||
-               MATCH( "traninverse" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised settings on to the FrameSet's current Frame for
-   further interpretation. */
-   } else {
-
-/* Force a copy to be made of the current Frame, if needed, to make it
-   independent of other Frames within the FrameSet. */
-      (void) ForceCopy( this, AST__CURRENT, status );
-
-/* Obtain a pointer to the current Frame and invoke its astSetAttrib
-   method. Annul the Frame pointer afterwards. */
-      fr = astGetFrame( this, AST__CURRENT );
-      astSetAttrib( fr, setting );
-      fr = astAnnul( fr );
-
-/* Note that the current Frame has been modified. */
-      integrity_lost = 1;
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetAxis( AstFrame *this_frame, int axis, AstAxis *newaxis, int *status ) {
-/*
-*  Name:
-*     SetAxis
-
-*  Purpose:
-*     Set a new Axis for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void SetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astSetAxis method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function allows a new Axis object to be associated with one
-*     of the axes of the current Frame in a FrameSet, replacing the
-*     previous one. Each Axis object contains a description of the
-*     quantity represented along one of the Frame's axes, so this
-*     function allows this description to be exchanged for another
-*     one.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The index (zero-based) of the axis whose associated Axis
-*        object is to be replaced.
-*     newaxis
-*        Pointer to the new Axis object.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index supplied. */
-   (void) astValidateAxis( this, axis, "astSetAxis" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astSetAxis method to assign the new Axis object. Annul the
-   Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astSetAxis( fr, axis, newaxis );
-   fr = astAnnul( fr );
-}
-
-static void SetBase( AstFrameSet *this, int iframe, int *status ) {
-/*
-*+
-*  Name:
-*     astSetBase
-
-*  Purpose:
-*     Set a value for the Base attribute of a FrameSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void astSetBase( AstFrameSet *this, int iframe )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function sets a value for the Base attribute of a FrameSet. This
-*     value is an index that identifies the base Frame for the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     iframe
-*        Value to be set for the Base attribute.
-
-*  Notes:
-*     - A value of AST__BASE or AST__CURRENT may be given for the
-*     "iframe" parameter to identify the base Frame or the current
-*     Frame respectively.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                    /* FrameSet is inverted? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, "astSetBase" );
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, set the base Frame index, otherwise
-   set the current Frame index instead. */
-   if ( astOK ) *( invert ? &this->current : &this->base ) = iframe;
-}
-
-static void SetCurrent( AstFrameSet *this, int iframe, int *status ) {
-/*
-*+
-*  Name:
-*     astSetCurrent
-
-*  Purpose:
-*     Set a value for the Current attribute of a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astSetCurrent( AstFrameSet *this, int iframe )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function sets a value for the Current attribute of a
-*     FrameSet. This attribute is an index that identifies the current
-*     Frame for the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     iframe
-*        Value to be set for the Current attribute.
-
-*  Notes:
-*     - A value of AST__BASE or AST__CURRENT may be given for the
-*     "iframe" parameter to identify the base Frame or the current
-*     Frame respectively.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* FrameSet is inverted? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate and translate the Frame index supplied. */
-   iframe = astValidateFrameIndex( this, iframe, "astSetCurrent" );
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, set the current frame index, otherwise
-   set the base Frame index instead. */
-   if ( astOK ) *( invert ? &this->base : &this->current ) = iframe;
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mappings in a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     FrameSet method (over-rides the astSimplify method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function simplifies the Mappings in a FrameSet to eliminate
-*     redundant computational steps, or to merge separate steps which
-*     can be performed more efficiently in a single operation.
-
-*  Parameters:
-*     this
-*        Pointer to the original FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new pointer to the (possibly simplified) FrameSet. If
-*     simplification was not possible, this will be a cloned pointer
-*     to the original FrameSet.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *new;             /* Pointer to new (simpler?) FrameSet */
-   AstFrameSet *this;            /* Pointer to original FrameSet structure */
-   AstMapping *map;              /* Pointer to Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstMapping *tmp;              /* Temporary Mapping pointer */
-   int inode;                    /* Loop counter for FrameSet nodes */
-   int inv;                      /* Mapping Invert attribute value */
-   int invert;                   /* Invert flag value */
-   int set;                      /* Invert attribute set? */
-   int simpler;                  /* Simplification achieved? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Make a copy of the FrameSet, since we may alter it (this is a deep
-   copy, which is a minor limitation of the current implementation). */
-   new = astCopy( this );
-
-/* Loop to examine each of the Mappings between the Frames in the
-   copy. */
-   simpler = 0;
-   for ( inode = 1; astOK && ( inode < new->nnode ); inode++ ) {
-
-/* Obtain the Mapping pointer and associated invert flag. */
-      map = new->map[ inode - 1 ];
-      invert = new->invert[ inode - 1 ];
-
-/* Determine if the Mapping's Invert attribute is set, and obtain its
-   value. */
-      set = astTestInvert( map );
-      inv = astGetInvert( map );
-
-/* If necessary, set the required value for the Invert attribute. */
-      if ( inv != invert ) astSetInvert( map, invert );
-
-/* Simplify the Mapping. */         
-      tmp = astSimplify( map );
-
-/* If necessary, restore the original state of the Mapping's Invert
-   attribute. */
-      if ( inv != invert ) {
-         if ( set ) {
-            astSetInvert( map, inv );
-         } else {
-            astClearInvert( map );
-         }
-      }
-
-/* Test if simplification was performed. */
-      if ( astOK ) {
-         if ( tmp != map ) {
-
-/* If so, annul the original Mapping pointer and substitute the new
-   one. Also set a new invert flag to accompany it. */
-            (void) astAnnul( new->map[ inode - 1 ] );
-            new->map[ inode - 1 ] = astClone( tmp );
-            new->invert[ inode - 1 ] = astGetInvert( tmp );
-
-/* Note if any Mapping within the FrameSet is simplified. */
-            simpler = 1;
-         }
-      }
-
-/* Annul the pointer to the simplified Mapping. */
-      tmp = astAnnul( tmp );
-   }
-
-/* If simplification was possible, clone a pointer to the new
-   FrameSet. Otherwise clone a pointer to the original one. */
-   if ( astOK ) result = astClone( simpler ? new : this );
-
-/* Annul the new FrameSet pointer. */
-   new = astAnnul( new );
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int Span( AstFrameSet *this, AstFrame **frames, int inode1, int inode2, 
-                 int avoid, AstMapping **map, int *forward, int *status ) {
-/*
-*  Name:
-*     Span
-
-*  Purpose:
-*     Find a path between two nodes in a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int Span( AstFrameSet *this, AstFrame **frames, int inode1, int inode2, 
-*               int avoid, AstMapping **map, int *forward, int *status )
-
-*  Class Membership:
-*     FrameSet member function.
-
-*  Description:
-*     This function searches a FrameSet to identify a path between two
-*     specified nodes. It returns an array of pointers to each Mapping
-*     in the path, along with direction information, so that an
-*     overall Mapping between the two nodes can be constructed.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     frames 
-*        Pointer to an array of Frame pointers, indexed by node index.
-*        Nodes which have no associated Frame will have a NULL pointer
-*        stored in this array.
-*     inode1
-*        Zero based index of the starting node.
-*     inode2
-*        Zero based index of the ending node.
-*     avoid
-*        Zero based index which identifies a node which is to be
-*        avoided (i.e. the initial step in the path should not be via
-*        this node). This value is required because the function
-*        invokes itself recursively; it provides a mechanism to
-*        prevent searches proceeding back down paths that have already
-*        been searched. External callers should provide a value of -1,
-*        which indicates that all possible paths should initially be
-*        explored.
-*     map
-*        Pointer to the start of an array that will be filled with a
-*        series of pointers to Mappings which must be applied in turn
-*        in order to transform between the two Frames. External
-*        callers should ensure that this array contains at least as many
-*        elements as there are Mappings and Frames in the FrameSet (one less 
-*        than the number of nodes plus the number of Frames).
-*
-*        Note that the pointers are simply copies of addresses from
-*        the FrameSet's "map" array. They are not cloned, so should
-*        not be annulled by the caller.
-*     forward
-*        Pointer to the start of an array of int that will be filled
-*        with boolean flags (0 or 1) to indicate whether the forward
-*        (as opposed to the inverse) transformation should be used for
-*        each Mapping returned in order to effect the transformation
-*        between the starting and ending nodes. This array should be the
-*        same size as the "map" array.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The function returns one more than the number of Mappings
-*     required to perform the transformation, or zero if it was not
-*     possible to find a path between the two nodes.
-
-*  Notes:
-*     - If a node has an associated Frame, the Frame usually represents a
-*     UnitMap and so can be ignored. The exception is if the Frame is
-*     actually a Region (or a CmpFrame containing a Region), in which case 
-*     it represents a Mapping which returns bad values if the input position 
-*     is outside the region. This form of Mapping should not be ignored, and 
-*     so the returned list of Mappings includes the effect of any Frames
-*     along the path which are not equivalent to a UnitMap. This
-*     equivalence is determined by invoking the astSimplify method on the 
-*     Frame.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*     - On the assumption that the FrameSet has been consistently
-*     constructed, there should be exactly one path between any pair
-*     of its nodes.  It should not, therefore, ever fail to find a
-*     path except when invoked recursively to explore a subset of the
-*     FrameSet's nodes (this should not be visible to an external
-*     caller).  Failure to find a path does not in itself result in an
-*     error condition.
-*/
-
-/* Local Variables: */
-   AstFrame *frame;          /* Pointer to Frame associated with inode1 */
-   int fwd;                  /* Forward Mapping identified? */
-   int inode;                /* Loop counter for nodes */
-   int inv;                  /* Inverse Mapping identified? */
-   int invert;               /* Original Mapping Invert value */
-   int nextra;               /* No. of extra Mappings to add to path */
-   int result;               /* Count of mappings (to be returned) */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* See if the two nodes are the same. */
-   result = ( inode1 == inode2 );
-
-/* If so, we need to consider the Mapping represented by any Frame
-   associated with the node. Most classes of Frames are equivalent to a
-   UnitMap and so can be ignored. But some (e.g. the Region class) are not 
-   equivalent to a UnitMap and so needs to be included in the returned 
-   Mapping list. */
-   if( result ) {
-      result = 1;
-
-/* If inode1 is associated with a Frame, which is not equivalent to a
-   UnitMap, add the Frame as the first Mapping into the returned list. The 
-   "forward" value is irrelevant since the forward and inverse transformations 
-   of Frames are the same. */
-      frame = frames[ inode1 ];
-      if( frame ) {
-         if( !astIsUnitFrame( frame ) ) {
-            result++;
-            *map = (AstMapping *) frame;
-            *forward = 1;
-         }
-      }
-
-/* If the nodes are different, we now attempt to find the next step in
-   the path between them. Loop through all available nodes looking for
-   the next one to transform to (i.e. one that is directly related by
-   a Mapping to our starting node). */
-   } else {
-      for ( inode = 0; inode < this->nnode; inode++ ) {
-
-/* Do not consider node "avoid". This prevents us re-tracing our steps
-   backwards when this function is invoked recursively. */
-         if ( inode != avoid ) {
-
-/* Test if inode is derived from inode1 (if so, the Mapping associated
-   with inode will convert from inode1 to inode when applied in the
-   forward direction). */
-            fwd = ( inode > 0 ) && ( this->link[ inode - 1 ] == inode1 );
-
-/* Test if inode1 is derived from inode (if so, the Mapping associated
-   with inode1 will convert from inode1 to inode when applied in the
-   inverse direction). */
-            inv = ( inode1 > 0 ) && ( this->link[ inode1 - 1 ] == inode );
-
-/* If the nodes are directly related, we try to find a path from inode to 
-   inode2 without going back through inode1. */
-            if ( fwd || inv ) {
-
-/* If node1 is associated with a Frame, we need to include the Frame
-   as a Mapping in the returned list unless the Frame is equivalent to a
-   UnitMap. Note the number of slots to be reserved for node1 when we call 
-   Span recursively below. */
-               nextra = 1;
-               frame = frames[ inode1 ];
-               if( frame && !astIsUnitFrame( frame ) ) nextra = 2;
-
-/* Invoke this function recursively to try and find a path from inode
-   to inode2 without going back through inode1. If this is possible, a 
-   non-zero result will be returned. Store the returned Mappings and 
-   direction information in the arrays supplied, but leave extra space to 
-   insert information about the Mapping between nodes inode1 and inode. */
-               result = Span( this, frames, inode, inode2, inode1,
-                              map + nextra, forward + nextra, status );
-
-/* If a path was found, increment the Mapping count to account for the
-   one that transforms between nodes inode1 and inode and insert
-   information for this Mapping into the output arrays. */
-               if ( result ) {
-                  result++;
-                  nextra--;
-                  map[ nextra ] = this->map[ ( fwd ? inode : inode1 ) - 1 ];
-                  forward[ nextra ] = fwd;
-
-/* Obtain the original value of the Invert attribute for the Mapping
-   between nodes inode1 and inode (recorded when the Mapping was first
-   added to the FrameSet). Test if this value has now changed. If so,
-   some external code has inverted the Mapping via another pointer, so
-   invert the returned direction information to compensate for
-   this. */
-                  invert = this->invert[ ( fwd ? inode : inode1 ) - 1 ];
-                  if ( invert != astGetInvert( map[ nextra ] ) ) {
-                     forward[ nextra ] = !forward[ nextra ];
-                  }
-
-/* If inode1 is associated with a non-unit Frame Mapping, add the Frame 
-   Mapping in as the first Mapping in the returned list. The "forward" value 
-   is irrelevant since the forward and inverse transformations of Frames
-   are the same. */
-                  if( nextra ) {
-                     result++;
-                     *map = (AstMapping *) frame;
-                     *forward = 1;
-                  }
-
-/* Quit searching once a path has been found. */
-                  break;
-	       }
-	    }
-         }
-      }
-   }
-
-/* Return the result, which is one more than the number of mappings
-   found (i.e. steps in the path), or zero if no path was found (this
-   should only occur when invoked recursively to explore an
-   unsuccessful sub-path). */
-   return result;
-}
-
-static int SubFrame( AstFrame *this_frame, AstFrame *template,
-                     int result_naxes,
-                     const int *target_axes, const int *template_axes,
-                     AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a FrameSet and convert to the new coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int SubFrame( AstFrame *target, AstFrame *template, int result_naxes,
-*                   const int *target_axes, const int *template_axes,
-*                   AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astSubFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the
-*     axes from the current Frame of a "target" FrameSet and creates a
-*     new Frame with copies of the selected axes assembled in the
-*     requested order. It then optionally overlays the attributes of a
-*     "template" Frame on to the result. It returns both the resulting
-*     Frame and a Mapping that describes how to convert between the
-*     coordinate systems described by the current Frame of the target
-*     FrameSet and the result Frame. If necessary, this Mapping takes
-*     account of any differences in the Frames' attributes due to the
-*     influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target FrameSet, from whose current Frame the
-*        axes are to be selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for
-*        the result Frame are to be obtained. Optionally, this may be
-*        NULL, in which case no overlaying of template attributes will
-*        be performed.
-*     result_naxes
-*        Number of axes to be selected from the target FrameSet. This
-*        number may be greater than or less than the number of axes in
-*        the FrameSet's current Frame (or equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving
-*        a list of the (zero-based) axis indices of the axes to be
-*        selected from the current Frame of the target FrameSet. The
-*        order in which these are given determines the order in which
-*        the axes appear in the result Frame. If any of the values in
-*        this array is set to -1, the corresponding result axis will
-*        not be derived from the target FrameSet, but will be assigned
-*        default attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This
-*        should contain a list of the template axes (given as
-*        zero-based axis indices) with which the axes of the result
-*        Frame are to be associated. This array determines which axes
-*        are used when overlaying axis-dependent attributes of the
-*        template on to the result. If any element of this array is
-*        set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not
-*        used and a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned
-*        Mapping.  The forward transformation of this Mapping will
-*        describe how to convert coordinates from the coordinate
-*        system described by the current Frame of the target FrameSet
-*        to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is
-*     possible between the current Frame of the target FrameSet and
-*     the result Frame. Otherwise zero is returned and *map and
-*     *result are returned as NULL (but this will not in itself result
-*     in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not
-*     always be possible otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to FrameSet's current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int match;                    /* Result to be returned */
-
-/* Initialise. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame. */
-   fr = astGetFrame( this, AST__CURRENT );
-
-/* Invoke the astSubFrame method for this Frame. */
-   match = astSubFrame( fr, template, result_naxes, target_axes, template_axes,
-                        map, result );
-
-/* Annul the Frame pointer. */
-   fr = astAnnul( fr );
-
-/* If an error occurred, clean up by annulling any returned objects and clear
-   the returned result. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static AstSystemType SystemCode( AstFrame *this_frame, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astSystemCode
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external description of
-*     a coordinate system into a Frame coordinate system type code (System
-*     attribute value). It is the inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the coordinate system
-*     description was not recognised. This does not produce an error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-   AstFrame *fr;              /* Pointer to FrameSet's current Frame */
-   AstFrameSet *this;         /* Pointer to the FrameSet structure */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astSystemCode method for this Frame. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astSystemCode( fr, system );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this_frame, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astSystemString
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function converts a Frame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to FrameSet's current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astSystemString method for this Frame. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astSystemString( fr, system );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result pointer. */
-   return result;
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a FrameSet's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* We first handle attributes that apply to the FrameSet as a whole
-   (rather than to the current Frame). */
-
-/* Base. */
-/* ----- */
-   if ( !strcmp( attrib, "base" ) ) {
-      result = astTestBase( this );
-
-/* Current. */
-/* -------- */
-   } else if ( !strcmp( attrib, "current" ) ) {
-      result = astTestCurrent( this );
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      result = astTestID( this );
-
-/* Invert. */
-/* ------- */
-   } else if ( !strcmp( attrib, "invert" ) ) {
-      result = astTestInvert( this );
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      result = astTestReport( this );
-
-/* If the name is not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then return
-   zero. */
-   } else if ( !strcmp( attrib, "class" ) ||
-               !strcmp( attrib, "nframe" ) ||
-               !strcmp( attrib, "nin" ) ||
-               !strcmp( attrib, "nobject" ) ||
-               !strcmp( attrib, "nout" ) ||
-               !strcmp( attrib, "refcount" ) ||
-               !strcmp( attrib, "tranforward" ) ||
-               !strcmp( attrib, "traninverse" ) ) {
-      result = 0;
-
-/* Pass unrecognised attributes on to the FrameSet's current Frame for
-   further interpretation. */
-   } else {
-
-/* Obtain a pointer to the current Frame and invoke its astTestAttrib
-   method. Annul the Frame pointer afterwards. */
-      fr = astGetFrame( this, AST__CURRENT );
-      result = astTestAttrib( fr, attrib );
-      fr = astAnnul( fr );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int TestBase( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astTestBase
-
-*  Purpose:
-*     Determine if a value has been set for the Base attribute of a FrameSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astTestBase( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns a boolean result to indicate if a value
-*     has been set for the Base attribute of a FrameSet. This
-*     attribute is an index that identifies the base Frame in the
-*     FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     Zero or 1, depending on whether a value has been set.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* FrameSet is inverted? */
-   int result;                   /* Value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, test the base Frame index, otherwise
-   test the index of the current Frame instead. */
-   if ( astOK ) {
-      if ( !invert ) {
-         result = ( this->base != -INT_MAX );
-      } else {
-         result = ( this->current != -INT_MAX );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int TestCurrent( AstFrameSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astTestCurrent
-
-*  Purpose:
-*     Test if a value has been set for the Current attribute of a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astTestCurrent( AstFrameSet *this )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function returns a boolean result to indicate whether a
-*     value has been set for the Current attribute of a FrameSet.
-*     This attribute is an index that identifies the current Frame in
-*     a FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-
-*  Returned Value:
-*     Zero or 1, depending on whether a value has been set.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* FrameSet is inverted? */
-   int result;                   /* Value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the FrameSet has been inverted. */
-   invert = astGetInvert( this );
-
-/* If it has not been inverted, test the current Frame index,
-   otherwise test the index of the base Frame instead. */
-   if ( astOK ) {
-      if ( !invert ) {
-         result = ( this->current != -INT_MAX );
-      } else {
-         result = ( this->base != -INT_MAX );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void TidyNodes( AstFrameSet *this, int *status ) {
-/*
-*  Name:
-*     TidyNodes
-
-*  Purpose:
-*     Tidy the nodes in a FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void TidyNodes( AstFrameSet *this, int *status )
-
-*  Class Membership:
-*     FrameSet member function.
-
-*  Description:
-*     This function tidies the nodes in a FrameSet, removing any that
-*     are unnecessary or represent dead-ends. It should be used after
-*     any changes have been made to a FrameSet that may have reduced
-*     the number of references to any of its nodes (either by Frames
-*     or by other nodes).
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstMapping *newmap;           /* Pointer to simplified Mapping */
-   AstMapping *tmpmap;           /* Pointer to new compound Mapping */
-   int ifr;                      /* Loop counter for Frames */
-   int inode;                    /* Loop counter for nodes */
-   int last_link[ 2 ];           /* Last nodes to reference via "link" array */
-   int link_ref;                 /* Number of "link" array references */
-   int needed;                   /* Node still required? */
-   int next;                     /* Node which references the removed one */
-   int remove;                   /* Node to be removed */
-   int suspect;                  /* Loop counter for testing nodes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Loop to search for unnecessary nodes until no more are found. */
-   needed = 0;
-   while ( !needed ) {
-
-/* Inspect each node (including node zero, which does not actually
-   have a Mapping associated with it) to see how many times it is
-   referenced. */
-      for ( suspect = 0; suspect < this->nnode; suspect++ ) {
-         link_ref = 0;
-
-/* Test for at least one reference from within the "node" array which
-   associates Frames with particular nodes. */
-         for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-            if ( ( needed = ( this->node[ ifr - 1 ] == suspect ) ) ) break;
-         }
-
-/* If no references were found above, look for references in the
-   "link" array that inter-connects all the nodes. */
-         if ( !needed ) {
-            for ( inode = 1; inode < this->nnode; inode ++ ) {
-               if ( this->link[ inode - 1 ] == suspect ) {
-
-/* Node zero must be retained if it has more than two links
-   referencing it, while other nodes only require more than one. */
-                  if ( ( needed = ( link_ref >= ( suspect ? 1 : 2 ) ) ) ) break;
-
-/* Remember (up to) the first two nodes which reference the current one. */
-                  last_link[ link_ref++ ] = inode;
-               }
-            }
-         }
-
-/* If there were insufficient references to retain this node, we must
-   now decide why it should be removed. */
-         if ( !needed ) {
-
-/* If there is no Frame associated with a node and there are less than
-   two links to it (for node zero), or less then one link (for other
-   nodes), then the there is no route to anything else via this node.
-   It is a dead-end. */
-            if ( link_ref < ( suspect ? 1 : 2 ) ) {
-
-/* To tidy up, we remove the affected node or, for node zero, the
-   remaining one that references it. Annul the Mapping associated with
-   the node being removed. */
-               remove = suspect ? suspect : last_link[ 0 ];
-               this->map[ remove - 1 ] = astAnnul( this->map[ remove - 1 ] );
-               
-/* If an unnecessary node is not a dead-end, then it is a redundant
-   node which simply joins two Mappings. */
-            } else {
-
-/* To tidy up, we remove the affected node or, for node zero, the
-   first one that references it. */
-               remove = suspect ? suspect : last_link[ 0 ];
-
-/* We then produce a compound Mapping which spans the gap by
-   concatenating the Mappings associated with the node being removed
-   and the remaining one which references it. For node zero, the first
-   of these Mappings must be inverted because there are no out-going
-   Mappings from node zero. */
-               next = suspect ? last_link[ 0 ] : last_link[ 1 ];
-               tmpmap = CombineMaps( this->map[ remove - 1 ],
-                                     this->invert[ remove - 1 ] != !suspect,
-                                     this->map[ next - 1 ],
-                                     this->invert[ next - 1 ], 1, status );
-
-/* Simplify this compound Mapping. */
-               newmap = astSimplify( tmpmap );
-               tmpmap = astAnnul( tmpmap );
-
-/* Annul the individual Mapping pointers. */
-               this->map[ remove - 1 ] = astAnnul( this->map[ remove - 1 ] );
-               this->map[ next - 1 ] = astAnnul( this->map[ next - 1 ] );
-
-/* Install the new compound Mapping and its Invert flag. */
-               this->map[ next - 1 ] = newmap;
-               this->invert[ next - 1 ] = astGetInvert( newmap );
-
-/* Transfer the "link" value from the removed node to the one which
-   takes its place. */
-               this->link[ next - 1 ] = this->link[ remove - 1 ];
-            }
-
-/* Loop to move all subsequent node data down in the "map", "invert"
-   and "link" arrays to close the gap where a node has been
-   removed. */
-            for ( inode = remove; inode < this->nnode - 1; inode ++ ) {
-               this->map [ inode - 1 ] = this->map[ inode ];
-               this->link [ inode - 1 ] = this->link[ inode ];
-               this->invert[ inode - 1 ] = this->invert[ inode ];
-            }
-            this->map[ this->nnode - 2 ] = NULL;
-            this->link[ this->nnode - 2 ] = -1;
-            this->invert[ this->nnode - 2 ] = -1;
-
-/* Decrement the node count. */
-            this->nnode--;
-
-/* Loop to adjust each entry in the "node" array for the change in
-   node numbering, re-directing references to the removed node towards
-   the new node zero. */
-            for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-               if ( this->node[ ifr - 1 ] > remove ) {
-                  this->node[ ifr - 1 ]--;
-               } else if ( this->node[ ifr - 1 ] == remove ) {
-                  this->node[ ifr - 1 ] = 0;
-               }
-            }
-
-/* Similarly adjust each entry in the "link" array. */
-            for ( inode = 1; inode < this->nnode; inode++ ) {
-               if ( this->link[ inode - 1 ] > remove ) {
-                  this->link[ inode - 1 ]--;
-               } else if ( this->link[ inode - 1 ] == remove ) {
-                  this->link[ inode - 1 ] = 0;
-               }
-            }
-
-/* Once a node has been removed, other nodes (perhaps already tested)
-   may no longer be needed, so quit the testing loop and start testing
-   again with node zero. The process terminates when no more
-   unnecessary nodes can be found. */
-            break;
-         }
-      }
-   }
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the astTransform method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function takes a FrameSet and a set of points encapsulated
-*     in a PointSet, and applies either the forward or inverse
-*     coordinate transformation (if defined by the FrameSet) to the
-*     points. The forward transformation converts between the
-*     FrameSet's base Frame and its current Frame, while the inverse
-*     transformation converts in the opposite direction.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     - An error will result if the FrameSet supplied does not define
-*     the requested coordinate transformation (either forward or
-*     inverse).
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of input coordinates for the
-*     FrameSet being applied (or number of output coordinates if the
-*     inverse transformation is requested).  This will be equal to the
-*     number of axes in the FrameSet's base Frame (or the current
-*     Frame for the inverse transformation).
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and coordinate values per point to
-*     accommodate the result (e.g. the number of FrameSet output
-*     coordinates, or number of input coordinates if the inverse
-*     transformation is requested). Any excess space will be ignored.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   AstMapping *map;              /* Pointer to the base->current Mapping */
-   AstPointSet *result;          /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_mapping;
-
-/* Obtain the Mapping between the base and current Frames in the
-   FrameSet (note this takes account of whether the FrameSet has been
-   inverted). */
-   map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Apply the Mapping to the input PointSet. */
-   result = astTransform( map, in, forward, out );
-
-/* Annul the Mapping pointer. */
-   map = astAnnul( map );
-
-/* If an error has occurred and a new PointSet may have been created, then
-   clean up by annulling it. In any case, ensure that a NULL result is
-   returned.*/
-   if ( !astOK ) {
-      if ( !out ) result = astAnnul( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     Unformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a FrameSet axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int Unformat( AstFrame *this, int axis, const char *string,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the public astUnformat
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reads a formatted coordinate value for a FrameSet
-*     axis (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The number of the FrameSet axis for which the coordinate
-*        value is to be read (axis numbering starts at zero for the
-*        first axis).
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   double coord;                 /* Coordinate value read */
-   int nc;                       /* Number of characters read */
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astUnformat method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   nc = astUnformat( fr, axis, string, &coord );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the number of characters read. */
-   if ( !astOK ) {
-      nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
-   } else if ( nc ) {
-      *value = coord;
-   }
-   
-/* Return the number of characters read. */
-   return nc;
-}
-
-static int ValidateAxis( AstFrame *this_frame, int axis, const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateAxis
-
-*  Purpose:
-*     Validate and permute a FrameSet's axis index.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int ValidateAxis( AstFrame *this, int axis, const char *method, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected
-*     astValidateAxis method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of an index (zero-based) which
-*     is to be used to address one of the coordinate axes of the
-*     current Frame in a FrameSet. If the index is valid, it is
-*     permuted using the axis permutation array associated with the
-*     FrameSet's current Frame and the (zero-based) permuted axis
-*     index is returned.  This gives the index the axis had when the
-*     Frame was first created. If the axis index supplied is not
-*     valid, an error is reported and the global error status is set.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     axis
-*        The axis index (zero-based) to be checked. To be valid, it
-*        must lie between zero and (naxes-1) inclusive, where "naxes"
-*        is the number of coordinate axes associated with the
-*        FrameSet's current Frame.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The permuted axis index.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   int naxes;                    /* Number of FrameSet axes */
-   int result;                   /* Permuted axis index */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Determine the number of FrameSet axes. */
-   naxes = astGetNaxes( this );
-   if ( astOK ) {
-
-/* If the FrameSet has no axes, report an error (convert to 1-based
-   axis numbering for the benefit of the public interface). */
-      if ( naxes == 0 ) {
-         astError( AST__AXIIN, "%s(%s): Invalid attempt to use an axis index "
-                   "(%d) for a %s which has no axes.", status, method,
-                   astGetClass( this ), axis + 1, astGetClass( this ) );
-
-/* Otherwise, check the axis index for validity and report an error if
-   it is not valid (again, convert to 1-based axis numbering). */
-      } else if ( ( axis < 0 ) || ( axis >= naxes ) ) {
-         astError( AST__AXIIN, "%s(%s): Axis index (%d) invalid - it should "
-                   "be in the range 1 to %d.", status, method, astGetClass( this ),
-                   axis + 1, naxes );
-
-/* If the axis index was valid, obtain a pointer to the FrameSet's
-   current Frame and invoke this Frame's astValidateAxis method to
-   obtain the permuted axis index. Annul the Frame pointer
-   afterwards. */
-      } else {
-         fr = astGetFrame( this, AST__CURRENT );
-         result = astValidateAxis( fr, axis, "astValidateAxis" );
-         fr = astAnnul( fr );
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static void ValidateAxisSelection( AstFrame *this_frame, int naxes, 
-                                   const int *axes, const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateAxisSelection
-
-*  Purpose:
-*     Check that a set of axes selected from a Frame is valid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void ValidateAxisSelection( AstFrame *this, int naxes,
-*                                 const int *axes, const char *method, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astValidateAxisSelection
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of an array of (zero-based)
-*     axis indices that specify a set of axes to be selected from a
-*     Frame. To be valid, no axis should be selected more than
-*     once. In assessing this, any axis indices that do not refer to
-*     valid Frame axes (e.g. are set to -1) are ignored.
-*
-*     If the axis selection is valid, this function returns without further
-*     action. Otherwise, an error is reported and the global error status is
-*     set.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     naxes
-*        The number of axes to be selected (may be zero).
-*     axes
-*        Pointer to an array of int with naxes elements that contains the
-*        (zero based) axis indices to be checked.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis selection. This method name is used
-*        solely for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke this
-   Frame's astValidateAxisSelection method. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   astValidateAxisSelection( fr, naxes, axes, method );
-   fr = astAnnul( fr );
-
-}
-
-static int ValidateFrameIndex( AstFrameSet *this, int iframe,
-                               const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astValidateFrameIndex
-
-*  Purpose:
-*     Validate a FrameSet Frame index number.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int astValidateFrameIndex( AstFrameSet *this, int iframe,
-*                                const char *method )
-
-*  Class Membership:
-*     FrameSet method.
-
-*  Description:
-*     This function checks a (one-based) FrameSet Frame index for
-*     validity. If it is not valid, an error is reported. Otherwise,
-*     the function returns the Frame index value, having translated
-*     the special values AST__CURRENT and AST__BASE into valid Frame
-*     indices if necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     iframe
-*        The Frame index. To be valid this should lie in the range 1
-*        to the number of Frames in the FrameSet.  In addition, the
-*        values AST__CURRENT and AST__BASE may be given to indicate
-*        the "current" and "base" Frames. These values will be
-*        translated into the acceptable range.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate a Frame index. This method name is used solely
-*        for constructing error messages.
-
-*  Returned Value:
-*     The validated (one-based) Frame index.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason
-*     (e.g. if the Frame index is invalid).
-*-
-*/
-
-/* Local Variables: */
-   int nframe;                   /* Number of Frames */
-   int result;                   /* Returned index value */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check if the base or current Frame was specified and retrieve the
-   required Frame index from the FrameSet. */
-   if ( iframe == AST__BASE ) {
-      result = astGetBase( this );
-   } else if ( iframe == AST__CURRENT ) {
-      result = astGetCurrent( this );
-
-/* Otherwise, determine how many Frames there are in the FrameSet. */
-   } else {
-      nframe = astGetNframe( this );
-      if ( astOK ) {
-
-/* Check that the supplied index is within range and report an error
-   if it is not. */
-         if ( ( iframe < 1 ) || ( iframe > nframe ) ) {
-            astError( AST__FRMIN, "%s(%s): Invalid Frame index (%d) given.", status,
-                      method, astGetClass( this ), iframe );
-            astError( AST__FRMIN, "This value should be in the range 1 to "
-                      "%d (or AST__CURRENT or AST__BASE).", status, nframe );
-
-/* If OK, return the validated index value. */
-         } else {
-            result = iframe;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int ValidateSystem( AstFrame *this_frame, AstSystemType system, const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system,
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astValidateSystem
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST_BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Validated system value */
-   AstFrame *fr;              /* Pointer to FrameSet's current Frame */
-   AstFrameSet *this;         /* Pointer to the FrameSet structure */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_frame;
-
-/* Obtain a pointer to the FrameSet's current Frame and invoke the
-   astValidateSystem method for this Frame. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this, AST__CURRENT );
-   result = astValidateSystem( this, system, method );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
-   return result;
-}
-
-static void VSet( AstObject *this_object, const char *settings,
-                  char **text, va_list args, int *status ) {
-/*
-*  Name:
-*     VSet
-
-*  Purpose:
-*     Set values for a FrameSet's attributes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void VSet( AstObject *this, const char *settings, char **text, 
-*                va_list args, int *status )
-
-*  Class Membership:
-*     FrameSet member function (over-rides the protected astVSet
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns a set of attribute values for a FrameSet,
-*     the attributes and their values being specified by means of a
-*     string containing a comma-separated list of the form:
-*
-*        "attribute1 = value1, attribute2 = value2, ... "
-*
-*     Here, "attribute" specifies an attribute name and the value to
-*     the right of each "=" sign should be a suitable textual
-*     representation of the value to be assigned to that
-*     attribute. This will be interpreted according to the attribute's
-*     data type.
-*
-*     The string supplied may also contain "printf"-style format
-*     specifiers identified by a "%" sign in the usual way. If
-*     present, these will be substituted by values supplied as
-*     optional arguments (as a va_list variable argument list), using
-*     the normal "printf" rules, before the string is used.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet.
-*     settings
-*        Pointer to a null-terminated string containing a
-*        comma-separated list of attribute settings.
-*     text
-*        Pointer to a location at which to return a pointer to dynamic
-*        memory holding a copy of the expanded setting string. This memory 
-*        should be freed using astFree when no longer needed. If a NULL
-*        pointer is supplied, no string is created.
-*     args
-*        The variable argument list which contains values to be
-*        substituted for any "printf"-style format specifiers that
-*        appear in the "settings" string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function preserves the integrity of the FrameSet (if
-*     possible) by appropriately remapping its current Frame to take
-*     account of its changed attribute values.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstFrame *save_frame;         /* Saved pointer to integrity Frame */
-   AstFrameSet *this;            /* Pointer to FrameSet structure */
-   char *fulltext;               /* Pointer to expanded text string */
-   const char *save_method;      /* Saved pointer to method name */
-   int len;                      /* Length of settings string */
-   int ok;                       /* Status OK? */
-   int save_lost;                /* Saved integrity modified flag */
-
-/* Initialise */
-   if( text ) *text = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain the length of the "settings" string and test it is not
-   zero. If it is, there is nothing more to do. */
-   len = (int) strlen( settings );
-   if ( len != 0 ) {
-
-/* Obtain a pointer to the FrameSet structure. */
-      this = (AstFrameSet *) this_object;
-
-/* This function may be invoked recursively (because astConvert,
-   below, constructs a FrameSet and may require that its attributes be
-   set). To allow this, we first save any existing FrameSet integrity
-   information in local variables. */
-      save_frame = integrity_frame;
-      save_lost = integrity_lost;
-      save_method = integrity_method;
-
-/* Set the name of the method being used (for use in error
-   messages). */
-      integrity_method = "astSet";
-
-/* Record the initial integrity state of the FrameSet. */
-      RecordIntegrity( this, status );
-
-/* Invoke the parent astVSet method to set the FrameSet's attribute
-   values and note if this succeeds. */
-      (*parent_vset)( this_object, settings, &fulltext, args, status );
-      ok = astOK;
-
-/* Restore the FrameSet's integrity. */
-      RestoreIntegrity( this, status );
-
-/* If integrity could not be restored, then add contextual error
-   information. */
-      if ( !astOK && ok ) {
-
-/* Display the message. */
-         astError( astStatus, "Unable to accommodate the attribute setting "
-                               "\"%s\".", status, fulltext );
-      }
-
-/* Restore any saved FrameSet integrity information. */
-      integrity_frame = save_frame;
-      integrity_lost = save_lost;
-      integrity_method = save_method;
-
-/* If the full text of the setting string is not needed, free it.
-   Otherwise return it. */
-      if( text ) {
-         *text = fulltext;
-      } else {
-         fulltext = astFree( fulltext );
-      }
-   }
-}
-
-/* FrameSet Attributes. */
-/* -------------------- */
-/*
-*att++
-*  Name:
-*     Base
-
-*  Purpose:
-*     FrameSet base Frame index.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute gives the index of the Frame which is to be
-*     regarded as the "base" Frame within a FrameSet. The default is
-*     the first Frame added to the FrameSet when it is created (this
-*     Frame always has an index of 1).
-
-*  Applicability:
-*     FrameSet
-*        All FrameSets have this attribute.
-
-*  Notes:
-*     - Inverting a FrameSet (inverting the boolean sense of its
-c     Invert attribute, with the astInvert function for example) will
-f     Invert attribute, with the AST_INVERT routine for example) will
-*     interchange the values of its Base and Current attributes.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     Current
-
-*  Purpose:
-*     FrameSet current Frame index.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute gives the index of the Frame which is to be
-*     regarded as the "current" Frame within a FrameSet. The default
-*     is the most recent Frame added to the FrameSet (this Frame
-*     always has an index equal to the FrameSet's Nframe attribute).
-
-*  Applicability:
-*     FrameSet
-*        All FrameSets have this attribute.
-
-*  Notes:
-*     - Inverting a FrameSet (inverting the boolean sense of its
-c     Invert attribute, with the astInvert function for example) will
-f     Invert attribute, with the AST_INVERT routine for example) will
-*     interchange the values of its Base and Current attributes.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     Nframe
-
-*  Purpose:
-*     Number of Frames in a FrameSet.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attrbute gives the number of Frames in a FrameSet. This
-*     value will change as Frames are added or removed, but will
-*     always be at least one.
-
-*  Applicability:
-*     FrameSet
-*        All FrameSets have this attribute.
-*att--
-*/
-
-/* Access to attributes of the current Frame. */
-/* ------------------------------------------ */
-/* Use the macros defined at the start of this file to implement
-   private member functions that give access to the attributes of the
-   current Frame of a FrameSet and its axes. These functions over-ride
-   the attribute access methods inherited from the Frame class. */
-
-/* Clear, Get, Set and Test axis-independent Frame attributes. */
-MAKE_CLEAR(Digits)
-MAKE_CLEAR(Domain)
-MAKE_CLEAR(MatchEnd)
-MAKE_CLEAR(MaxAxes)
-MAKE_CLEAR(MinAxes)
-MAKE_CLEAR(Permute)
-MAKE_CLEAR(PreserveAxes)
-MAKE_CLEAR(Title)
-
-MAKE_GET(Digits,int)
-MAKE_GET(Domain,const char *)
-MAKE_GET(MatchEnd,int)
-MAKE_GET(MaxAxes,int)
-MAKE_GET(MinAxes,int)
-MAKE_GET(Permute,int)
-MAKE_GET(PreserveAxes,int)
-MAKE_GET(Title,const char *)
-MAKE_SET(Digits,int)
-MAKE_SET(Domain,const char *)
-MAKE_SET(MatchEnd,int)
-MAKE_SET(MaxAxes,int)
-MAKE_SET(MinAxes,int)
-MAKE_SET(Permute,int)
-MAKE_SET(PreserveAxes,int)
-MAKE_SET(Title,const char *)
-MAKE_TEST(Digits)
-MAKE_TEST(Domain)
-MAKE_TEST(MatchEnd)
-MAKE_TEST(MaxAxes)
-MAKE_TEST(MinAxes)
-MAKE_TEST(Permute)
-MAKE_TEST(PreserveAxes)
-MAKE_TEST(Title)
-
-MAKE_GET(ActiveUnit,int)
-MAKE_SET(ActiveUnit,int)
-MAKE_TEST(ActiveUnit)
-
-MAKE_GET(System,AstSystemType)
-MAKE_SET(System,AstSystemType)
-MAKE_TEST(System)
-MAKE_CLEAR(System)
-
-MAKE_GET(AlignSystem,AstSystemType)
-MAKE_SET(AlignSystem,AstSystemType)
-MAKE_TEST(AlignSystem)
-MAKE_CLEAR(AlignSystem)
-
-MAKE_GET(Epoch,double)
-MAKE_SET(Epoch,double)
-MAKE_TEST(Epoch)
-MAKE_CLEAR(Epoch)
-
-MAKE_GET(ObsLon,double)
-MAKE_SET(ObsLon,double)
-MAKE_TEST(ObsLon)
-MAKE_CLEAR(ObsLon)
-
-MAKE_GET(ObsLat,double)
-MAKE_SET(ObsLat,double)
-MAKE_TEST(ObsLat)
-MAKE_CLEAR(ObsLat)
-
-MAKE_GET(ObsAlt,double)
-MAKE_SET(ObsAlt,double)
-MAKE_TEST(ObsAlt)
-MAKE_CLEAR(ObsAlt)
-
-/* Clear, Get, Set and Test axis-dependent Frame attributes. */
-MAKE_CLEAR_AXIS(Direction)
-MAKE_CLEAR_AXIS(Format)
-MAKE_CLEAR_AXIS(Label)
-MAKE_CLEAR_AXIS(Symbol)
-MAKE_CLEAR_AXIS(Unit)
-MAKE_GET_AXIS(Direction,int)
-MAKE_GET_AXIS(Format,const char *)
-MAKE_GET_AXIS(Label,const char *)
-MAKE_GET_AXIS(Symbol,const char *)
-MAKE_GET_AXIS(Unit,const char *)
-MAKE_SET_AXIS(Direction,int)
-MAKE_SET_AXIS(Format,const char *)
-MAKE_SET_AXIS(Label,const char *)
-MAKE_SET_AXIS(Symbol,const char *)
-MAKE_SET_AXIS(Unit,const char *)
-MAKE_TEST_AXIS(Direction)
-MAKE_TEST_AXIS(Format)
-MAKE_TEST_AXIS(Label)
-MAKE_TEST_AXIS(Symbol)
-MAKE_TEST_AXIS(Unit)
-
-MAKE_GET_AXIS(Bottom,double)
-MAKE_SET_AXIS(Bottom,double)
-MAKE_TEST_AXIS(Bottom)
-MAKE_CLEAR_AXIS(Bottom)
-
-MAKE_GET_AXIS(Top,double)
-MAKE_SET_AXIS(Top,double)
-MAKE_TEST_AXIS(Top)
-MAKE_CLEAR_AXIS(Top)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for FrameSet objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for FrameSet objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstFrameSet *in;              /* Pointer to input FrameSet */
-   AstFrameSet *out;             /* Pointer to output FrameSet */
-   int iframe;                   /* Loop counter for Frames */
-   int inode;                    /* Loop counter for nodes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output FrameSets. */
-   in = (AstFrameSet *) objin;
-   out = (AstFrameSet *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output FrameSet. */
-   out->frame = NULL;
-   out->node = NULL;
-   out->map = NULL;
-   out->link = NULL;
-   out->invert = NULL;
-
-/* Allocate memory in the output FrameSet to store the Frame and node
-   information and copy scalar information across. */
-   out->frame = astMalloc( sizeof( AstFrame * ) * (size_t) in->nframe );
-   out->node = astStore( NULL, in->node, sizeof( int ) *
-                                         (size_t) in->nframe );
-   out->map = astMalloc( sizeof( AstMapping * ) * (size_t) ( in->nnode - 1 ) );
-   out->link = astStore( NULL, in->link, sizeof( int ) *
-                                         (size_t) ( in->nnode - 1 ) );
-   out->invert = astStore( NULL, in->invert, sizeof( int ) *
-                                         (size_t) ( in->nnode - 1 ) );
-
-/* If OK, make copies of each input Frame and Mapping and store the
-   resulting pointers in the output FrameSet. */
-   if ( astOK ) {
-      for ( iframe = 0; iframe < in->nframe; iframe++ ) {
-         out->frame[ iframe ] = astCopy( in->frame[ iframe ] );
-      }
-      for ( inode = 0; inode < in->nnode - 1; inode++ ) {
-         out->map[ inode ] = astCopy( in->map[ inode ] );
-      }
-
-/* If an error occurred while copying any of these objects, clean up
-   by looping through the arrays of pointers again and annulling them
-   all. */
-      if ( !astOK ) {
-         for ( iframe = 0; iframe < in->nframe; iframe++ ) {
-            out->frame[ iframe ] = astAnnul( out->frame[ iframe ] );
-         }
-         for ( inode = 0; inode < in->nnode - 1; inode++ ) {
-            out->map[ inode ] = astAnnul( out->map[ inode ] );
-         }
-      }
-   }
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
-   if ( !astOK ) {
-      out->frame = astFree( out->frame );
-      out->node = astFree( out->node );
-      out->map = astFree( out->map );
-      out->link = astFree( out->link );
-      out->invert = astFree( out->invert );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for FrameSet objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for FrameSet objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstFrameSet *this;               /* Pointer to FrameSet */
-   int iframe;                      /* Loop counter for Frames */
-   int inode;                       /* Loop counter for nodes */
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) obj;
-
-/* Annul all Frame pointers and clear the node numbers associated with
-   them. */
-   for ( iframe = 0; iframe < this->nframe; iframe++ ) {
-      this->frame[ iframe ] = astAnnul( this->frame[ iframe ] );
-      this->node[ iframe ] = 0;
-   }
-
-/* Annul all Mapping pointers and clear the links between pairs of
-   nodes and the associated Mapping Invert information. */
-   for ( inode = 0; inode < this->nnode - 1; inode++ ) {
-      this->map[ inode ] = astAnnul( this->map[ inode ] );
-      this->link[ inode ] = 0;
-      this->invert[ inode ] = 0;
-   }
-
-/* Free all allocated memory. */
-   this->frame = astFree( this->frame );
-   this->node = astFree( this->node );
-   this->map = astFree( this->map );
-   this->link = astFree( this->link );
-   this->invert = astFree( this->invert );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for FrameSet objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the FrameSet class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the FrameSet whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150          /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstFrameSet *this;            /* Pointer to the FrameSet structure */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   int ifr;                      /* Loop counter for Frames */
-   int inode;                    /* Loop counter for nodes */
-   int invert;                   /* Invert attribute value */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstFrameSet *) this_object;
-
-/* Determine if the FrameSet is inverted. This is required so that the
-   effects of inversion can be un-done to obtain information about the
-   "true" Base and Current Frames. (The values written are "internal"
-   values that are not affected by the Invert setting.) */
-   invert = astGetInvert( this );
-
-/* Write out values representing the instance variables for the
-   FrameSet class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Nframe. */
-/* ------- */
-   set = ( this->nframe != 0 );
-   ival = set ? this->nframe : astGetNframe( this );
-   astWriteInt( channel, "Nframe", set, 1, ival,
-                "Number of Frames in FrameSet" );
-
-/* Base. */
-/* ----- */
-   set = ( this->base != -INT_MAX );
-   ival = set ? this->base : ( !invert ? astGetBase( this ) :
-                                         astGetCurrent( this ) );
-   astWriteInt( channel, "Base", set, 1, ival, "Index of base Frame" );
-
-/* Current. */
-/* -------- */
-   set = ( this->current != -INT_MAX );
-   ival = set ? this->current : ( !invert ? astGetCurrent( this ) :
-                                            astGetBase( this ) );
-   astWriteInt( channel, "Currnt", set, 1, ival, "Index of current Frame" );
-
-/* Number of nodes. */
-/* ---------------- */
-   ival = this->nnode;
-   set = ( ival != this->nframe );
-   astWriteInt( channel, "Nnode", set, 0, ival,
-                "Number of nodes in FrameSet" );
-
-/* Node index for each Frame. */
-/* -------------------------- */
-/* There is a node value for each Frame in the FrameSet. */
-   for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-
-/* Convert node numbering to start at 1 for the external
-   representation. Regard a node number as "set" if it differs from
-   the Frame number. */
-      ival = this->node[ ifr - 1 ] + 1;
-      set = ( ival != ifr );
-
-/* Create a suitable keyword and comment. */
-      (void) sprintf( key, "Nod%d", ifr );
-      (void) sprintf( comment,
-                      "Frame %d is associated with node %d", ifr, ival );
-
-/* Write out the value. */
-      astWriteInt( channel, key, set, 0, ival, comment );      
-   }
-
-/* Links between nodes. */
-/* -------------------- */
-/* Each node in the FrameSet (except the first) has a link to another
-   node from which it is derived. */
-   for ( inode = 1; inode < this->nnode; inode++ ) {
-
-/* Convert node numbering to start at 1 (as above). */
-      ival = this->link[ inode - 1 ] + 1;
-      (void) sprintf( key, "Lnk%d", inode + 1 );
-      (void) sprintf( comment,
-                      "Node %d is derived from node %d", inode + 1, ival );
-      astWriteInt( channel, key, 1, 0, ival, comment );
-
-/* Inversion flags. */
-/* ---------------- */
-/* Each node with a link has a value which the Invert attribute of the
-   associated Mapping should have when the transformation from the
-   parent node to the node in question is required. */
-      ival = this->invert[ inode - 1 ];
-
-/* Regard the value as set only if the Mapping's inverse
-   transformation is required. */
-      set = ( ival != 0 );
-      (void) sprintf( key, "Inv%d", inode + 1 );
-      astWriteInt( channel, key, set, 0, ival,
-                   ival ? "The inverse mapping is used" :
-                          "The forward mapping is used" );
-   }
-
-/* Frame objects. */
-/* -------------- */
-/* Output an Object description for each Frame in the FrameSet. */
-   for ( ifr = 1; ifr <= this->nframe; ifr++ ) {
-      (void) sprintf( key, "Frm%d", ifr );
-      (void) sprintf( comment, "Frame number %d", ifr );
-      astWriteObject( channel, key, 1, 1, this->frame[ ifr - 1 ],
-                      comment );
-   }
-
-/* Mapping objects. */
-/* ---------------- */
-/* Output an Object description for each Mapping in the FrameSet. */
-   for ( inode = 1; inode < this->nnode; inode++ ) {
-      (void) sprintf( key, "Map%d", inode + 1 );
-      (void) sprintf( comment, "Mapping between nodes %d and %d",
-                      this->link[ inode - 1 ] + 1, inode + 1 );
-      astWriteObject( channel, key, 1, 1, this->map[ inode - 1 ], comment );
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAFrameSet and astCheckFrameSet functions using
-   the macros defined for this purpose in the "object.h" header
-   file. */
-astMAKE_ISA(FrameSet,Frame)
-astMAKE_CHECK(FrameSet)
-
-AstFrameSet *astFrameSet_( void *frame_void, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astFrameSet
-
-*  Purpose:
-*     Create a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrameSet *astFrameSet( AstFrame *frame, const char *options, int *status, ... )
-
-*  Class Membership:
-*     FrameSet constructor.
-
-*  Description:
-*     This function creates a new FrameSet and optionally initialises
-*     its attributes.
-
-*  Parameters:
-*     frame
-*        Pointer to the initial Frame. If this is not a FrameSet, the
-*        new FrameSet will be initialised to contain this Frame alone.
-*
-*        If it is a FrameSet, the new FrameSet will be initialised to
-*        contain the same Frames (and Mappings) and to have the same
-*        attribute values as the one supplied. This is similar to
-*        making a copy, except that the Frames (and Mappings)
-*        contained in the original FrameSet are not themselves copied,
-*        but are shared by both FrameSets.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new FrameSet. The syntax used is the same as
-*        for the astSet method and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of arguments may follow it in order to
-*        supply values to be substituted for these specifiers. The
-*        rules for supplying these are identical to those for the
-*        astSet method (and for the C "printf" function).
-
-*  Returned Value:
-*     A pointer to the new FrameSet.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic FrameSet constructor which
-*     is available via the protected interface to the FrameSet class.
-*     A public interface is provided by the astFrameSetId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "frame" parameter is of type (void *) and is converted and
-*     validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstFrameSet *new;             /* Pointer to new FrameSet */
-   va_list args;                 /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain and validate a pointer to the Frame structure provided. */
-   frame = astCheckFrame( frame_void );
-   if ( astOK ) {
-
-/* Initialise the FrameSet, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitFrameSet( NULL, sizeof( AstFrameSet ), !class_init,
-                             &class_vtab, "FrameSet", frame );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   FrameSet's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new FrameSet. */
-   return new;
-}
-
-AstFrameSet *astInitFrameSet_( void *mem, size_t size, int init,
-                               AstFrameSetVtab *vtab, const char *name,
-                               AstFrame *frame, int *status ) {
-/*
-*+
-*  Name:
-*     astInitFrameSet
-
-*  Purpose:
-*     Initialise a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrameSet *astInitFrameSet( void *mem, size_t size, int init,
-*                                   AstFrameSetVtab *vtab, const char *name,
-*                                   AstFrame *frame )
-
-*  Class Membership:
-*     FrameSet initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new FrameSet object. It allocates memory (if
-*     necessary) to accommodate the FrameSet plus any additional data
-*     associated with the derived class.  It then initialises a
-*     FrameSet structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a FrameSet at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the FrameSet is to be
-*        created. This must be of sufficient size to accommodate the
-*        FrameSet data (sizeof(FrameSet)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the FrameSet (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the FrameSet structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the FrameSet's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new FrameSet.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     frame
-*        Pointer to the initial Frame (or FrameSet).
-
-*  Returned Value:
-*     A pointer to the new FrameSet.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrameSet *new;                /* Pointer to new FrameSet */
-   AstFrameSet *old;                /* Pointer to original FrameSet */
-   int iframe;                      /* Loop counter for Frames */
-   int inode;                       /* Loop counter for nodes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitFrameSetVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first
-   component within the FrameSet structure, allocating memory if
-   necessary. Give this Frame zero axes, as all axis information for
-   the FrameSet will be derived from the Frames it contains. */
-   new = (AstFrameSet *) astInitFrame( mem, size, 0,
-                                       (AstFrameVtab *) vtab, name, 0 );
-
-   if ( astOK ) {
-
-/* Initialise the FrameSet data. */
-/* ----------------------------- */
-
-/* Normal Frame supplied. */
-/* ---------------------- */
-/* Check that the Frame supplied is not a FrameSet (initialising using
-   a FrameSet is a special case which is handled below).  If not, we
-   initialise the new FrameSet to refer to a single Frame. */
-      if ( !astIsAFrameSet( frame ) && astOK ) {
-
-/* Allocate memory for the arrays of Frame information. */
-         new->frame = astMalloc( sizeof( AstFrame * ) );
-         new->node = astMalloc( sizeof( int ) );
-
-/* The node arrays are not required until at least two Frames are
-   present. */
-         new->map = NULL;
-         new->link = NULL;
-         new->invert = NULL;
-
-/* If OK, initialise these arrays, thus adding the Frame to the
-   FrameSet. */
-         if ( astOK ) {
-            new->frame[ 0 ] = astClone( frame );
-            new->node[ 0 ] = 0;
-            new->nframe = 1;
-            new->nnode = 1;
-            
-/* Initialise the FrameSet attributes to their undefined states. */
-            new->base = -INT_MAX;
-            new->current = -INT_MAX;
-         }
-
-/* FrameSet supplied. */
-/* ------------------ */
-/* If a FrameSet was supplied, we will initialise the new FrameSet to
-   refer to the same Frame and Mapping information (this is similar to
-   making a copy, except that we clone all the pointers, instead of
-   copying the Objects they refer to). */
-      } else if ( astOK ) {
-
-/* Obtain a pointer to the original FrameSet structure. */
-         old = (AstFrameSet *) frame;
-
-/* Allocate memory in the new FrameSet to store the Frame and node
-   information and copy any scalar information across. */
-         new->frame = astMalloc( sizeof( AstFrame * ) * (size_t) old->nframe );
-         new->node = astStore( NULL, old->node,
-                               sizeof( int ) * (size_t) old->nframe );
-         new->map = astMalloc( sizeof( AstMapping * ) *
-                               (size_t) ( old->nnode - 1 ) );
-         new->link = astStore( NULL, old->link,
-                               sizeof( int ) * (size_t) ( old->nnode - 1 ) );
-         new->invert = astStore( NULL, old->invert,
-                                 sizeof( int ) * (size_t) ( old->nnode - 1 ) );
-
-/* If OK, clone the pointer to each Frame and Mapping referenced by
-   the original FrameSet and store the resulting pointers in the new
-   FrameSet. */
-         if ( astOK ) {
-            for ( iframe = 0; iframe < old->nframe; iframe++ ) {
-               new->frame[ iframe ] = astClone( old->frame[ iframe ] );
-            }
-            for ( inode = 0; inode < old->nnode - 1; inode++ ) {
-               new->map[ inode ] = astClone( old->map[ inode ] );
-            }
-
-/* If an error occurred while cloning any of these pointers, clean up
-   by looping through the arrays of cloned pointers again and
-   annulling them all. */
-            if ( !astOK ) {
-               for ( iframe = 0; iframe < old->nframe; iframe++ ) {
-                  new->frame[ iframe ] = astAnnul( new->frame[ iframe ] );
-               }
-               for ( inode = 0; inode < old->nnode - 1; inode++ ) {
-                  new->map[ inode ] = astAnnul( new->map[ inode ] );
-               }
-            }
-         }
-
-/* If an error occurred, clean up by freeing all memory allocated
-   above. */
-         if ( !astOK ) {
-            new->frame = astFree( new->frame );
-            new->node = astFree( new->node );
-            new->map = astFree( new->map );
-            new->link = astFree( new->link );
-            new->invert = astFree( new->invert );
-         }
-
-/* Copy the Frame and node counts across. */
-         new->nframe = old->nframe;
-         new->nnode = old->nnode;
-
-/* Copy the other FrameSet attributes across. */
-         new->base = old->base;
-         new->current = old->current;
-
-/* Transfer any other inherited attribute values that relate to the
-   FrameSet itself (rather than the enclosed Frames). */
-        if ( astTestInvert( old ) ) astSetInvert( new, astGetInvert( old ) );
-      }
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef TRANSFER
-}
-
-AstFrameSet *astLoadFrameSet_( void *mem, size_t size,
-                               AstFrameSetVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadFrameSet
-
-*  Purpose:
-*     Load a FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     AstFrameSet *astLoadFrameSet( void *mem, size_t size,
-*                                   AstFrameSetVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     FrameSet loader.
-
-*  Description:
-*     This function is provided to load a new FrameSet using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     FrameSet structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the FrameSet is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        FrameSet data (sizeof(FrameSet)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the FrameSet (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the FrameSet structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstFrameSet) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new FrameSet. If this is NULL, a pointer
-*        to the (static) virtual function table for the FrameSet class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "FrameSet" is used instead.
-
-*  Returned Value:
-*     A pointer to the new FrameSet.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstFrameSet *new;             /* Pointer to the new FrameSet */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   int ifr;                      /* Get a pointer to the thread specific global data structure. */
-
-/* Loop counter for Frames */
-   int inode;                    /* Loop counter for nodes */
-
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this FrameSet. In this case the
-   FrameSet belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstFrameSet );
-      vtab = &class_vtab;
-      name = "FrameSet";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitFrameSetVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built FrameSet. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "FrameSet" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Nframe. */
-/* ------- */
-   new->nframe = astReadInt( channel, "nframe", 1 );
-   if ( new->nframe < 0 ) new->nframe = 1;
-
-/* Number of nodes. */
-/* ---------------- */
-   new->nnode = astReadInt( channel, "nnode", new->nframe );
-   if ( new->nnode < 1 ) new->nnode = 1;
-
-/* Allocate memory to hold Frame and node information. */
-   new->frame = astMalloc( sizeof( AstFrame *) * (size_t) new->nframe );
-   new->node = astMalloc( sizeof( int ) * (size_t) new->nframe );
-   new->link = astMalloc( sizeof( int ) * (size_t) ( new->nnode - 1 ) );
-   new->invert = astMalloc( sizeof( int ) * (size_t) ( new->nnode - 1 ) );
-   new->map = astMalloc( sizeof( AstMapping * ) *
-                         (size_t) ( new->nnode - 1 ) );
-
-/* If an error occurs, ensure that all allocated memory is freed. */
-   if ( !astOK ) {
-      new->frame = astFree( new->frame );
-      new->node = astFree( new->node );
-      new->link = astFree( new->link );
-      new->invert = astFree( new->invert );
-      new->map = astFree( new->map );
-
-/* Otherwise, initialise the arrays which will hold Object pointers. */
-   } else {
-      for ( ifr = 1; ifr <= new->nframe; ifr++ ) {
-         new->frame[ ifr - 1 ] = NULL;
-      }
-      for ( inode = 1; inode < new->nnode; inode++ ) {
-         new->map[ inode - 1 ] = NULL;
-      }
-
-/* Read Frame data... */
-      for ( ifr = 1; ifr <= new->nframe; ifr++ ) {
-
-/* Frame objects. */
-/* -------------- */
-/* Create the required keyword and then read the Frame. */
-         (void) sprintf( key, "frm%d", ifr );
-         new->frame[ ifr - 1 ] = astReadObject( channel, key, NULL );
-
-/* Node index for each Frame. */
-/* -------------------------- */
-         (void) sprintf( key, "nod%d", ifr );
-         new->node[ ifr - 1 ] = astReadInt( channel, key, ifr ) - 1;
-      }
-
-/* Read node data... */
-      for ( inode = 1; inode < new->nnode; inode++ ) {
-
-/* Links between nodes. */
-/* -------------------- */
-         (void) sprintf( key, "lnk%d", inode + 1 );
-         new->link[ inode - 1 ] = astReadInt( channel, key, 0 ) - 1;
-
-/* Inversion flags. */
-/* ---------------- */
-         (void) sprintf( key, "inv%d", inode + 1 );
-         new->invert[ inode - 1 ] = astReadInt( channel, key, 0 );
-
-/* Mapping objects. */
-/* ---------------- */
-         (void) sprintf( key, "map%d", inode + 1 );
-         new->map[ inode - 1 ] = astReadObject( channel, key, NULL );
-      }
-
-/* Read remaining data... */
-
-/* Base. */
-/* ----- */
-      new->base = astReadInt( channel, "base", -INT_MAX );
-      if ( new->base < 1 ) new->base = -INT_MAX;
-
-/* Current. */
-/* -------- */
-      new->current = astReadInt( channel, "currnt", -INT_MAX );
-      if ( new->base < 1 ) new->base = -INT_MAX;
-   }
-
-/* If an error occurred, clean up by deleting the new FrameSet. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new FrameSet pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astAddFrame_( AstFrameSet *this, int iframe, AstMapping *map,
-                   AstFrame *frame, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,AddFrame))( this, iframe, map, frame, status );
-}
-void astClearBase_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,ClearBase))( this, status );
-}
-void astClearCurrent_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,ClearCurrent))( this, status );
-}
-int astGetBase_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,FrameSet,GetBase))( this, status );
-}
-int astGetCurrent_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,FrameSet,GetCurrent))( this, status );
-}
-AstFrame *astGetFrame_( AstFrameSet *this, int iframe, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,FrameSet,GetFrame))( this, iframe, status );
-}
-AstMapping *astGetMapping_( AstFrameSet *this, int iframe1, int iframe2, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,FrameSet,GetMapping))( this, iframe1, iframe2, status );
-}
-int astGetNframe_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,FrameSet,GetNframe))( this, status );
-}
-void astRemapFrame_( AstFrameSet *this, int iframe, AstMapping *map, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,RemapFrame))( this, iframe, map, status );
-}
-void astRemoveFrame_( AstFrameSet *this, int iframe, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,RemoveFrame))( this, iframe, status );
-}
-void astSetBase_( AstFrameSet *this, int ibase, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,SetBase))( this, ibase, status );
-}
-void astSetCurrent_( AstFrameSet *this, int icurrent, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,FrameSet,SetCurrent))( this, icurrent, status );
-}
-int astTestBase_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,FrameSet,TestBase))( this, status );
-}
-int astTestCurrent_( AstFrameSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,FrameSet,TestCurrent))( this, status );
-}
-int astValidateFrameIndex_( AstFrameSet *this, int iframe,
-                            const char *method, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,FrameSet,ValidateFrameIndex))( this, iframe,
-                                                           method, status );
-}
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstFrameSet *astFrameSetId_( void *, const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstFrameSet *astFrameSetId_( void *frame_void, const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astFrameSet
-f     AST_FRAMESET
-
-*  Purpose:
-*     Create a FrameSet.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "frameset.h"
-c     AstFrameSet *astFrameSet( AstFrame *frame, const char *options, ... )
-f     RESULT = AST_FRAMESET( FRAME, OPTIONS, STATUS )
-
-*  Class Membership:
-*     FrameSet constructor.
-
-*  Description:
-*     This function creates a new FrameSet and optionally initialises
-*     its attributes.
-*
-*     A FrameSet consists of a set of one or more Frames (which
-*     describe coordinate systems), connected together by Mappings
-*     (which describe how the coordinate systems are inter-related). A
-*     FrameSet makes it possible to obtain a Mapping between any pair
-*     of these Frames (i.e. to convert between any of the coordinate
-*     systems which it describes).  The individual Frames are
-*     identified within the FrameSet by an integer index, with Frames
-*     being numbered consecutively from one as they are added to the
-*     FrameSet.
-*
-*     Every FrameSet has a "base" Frame and a "current" Frame (which
-*     are allowed to be the same). Any of the Frames may be nominated
-*     to hold these positions, and the choice is determined by the
-*     values of the FrameSet's Base and Current attributes, which hold
-*     the indices of the relevant Frames.  By default, the first Frame
-*     added to a FrameSet is its base Frame, and the last one added is
-*     its current Frame.
-*
-*     The base Frame describes the "native" coordinate system of
-*     whatever the FrameSet is used to calibrate (e.g. the pixel
-*     coordinates of an image) and the current Frame describes the
-*     "apparent" coordinate system in which it should be viewed
-*     (e.g. displayed, etc.). Any further Frames represent a library
-*     of alternative coordinate systems, which may be selected by
-*     making them current.
-*
-*     When a FrameSet is used in a context that requires a Frame,
-*     (e.g. obtaining its Title value, or number of axes), the current
-*     Frame is used. A FrameSet may therefore be used in place of its
-*     current Frame in most situations.
-*
-*     When a FrameSet is used in a context that requires a Mapping,
-*     the Mapping used is the one between its base Frame and its
-*     current Frame. Thus, a FrameSet may be used to convert "native"
-*     coordinates into "apparent" ones, and vice versa. Like any
-c     Mapping, a FrameSet may also be inverted (see astInvert), which
-f     Mapping, a FrameSet may also be inverted (see AST_INVERT), which
-*     has the effect of interchanging its base and current Frames and
-*     hence of reversing the Mapping between them.
-*
-*     Regions may be added into a FrameSet (since a Region is a type of
-*     Frame), either explicitly or as components within CmpFrames. In this 
-*     case the Mapping between a pair of Frames within a FrameSet will 
-*     include the effects of the clipping produced by any Regions included 
-*     in the path between the Frames. 
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        Pointer to the first Frame to be inserted into the
-*        FrameSet. This initially becomes both the base and the
-*        current Frame. (Further Frames may be added using the
-c        astAddFrame function.)
-f        AST_ADDFRAME routine.)
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new FrameSet. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new FrameSet. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astFrameSet()
-f     AST_FRAMESET
-*        A pointer to the new FrameSet.
-
-*  Notes:
-c     - If a pointer to an existing FrameSet is given for the "frame"
-c     parameter, then the new FrameSet will (as a special case) be
-f     - If a pointer to an existing FrameSet is given for the FRAME
-f     argument, then the new FrameSet will (as a special case) be
-*     initialised to contain the same Frames and Mappings, and to have
-*     the same attribute values, as the one supplied. This process is
-c     similar to making a copy of a FrameSet (see astCopy), except
-f     similar to making a copy of a FrameSet (see AST_COPY), except
-*     that the Frames and Mappings contained in the original are not
-*     themselves copied, but are shared by both FrameSets.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astFrameSet constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astFrameSet_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "frame" parameter is of type
-*     (void *) and is converted from an ID value to a pointer and
-*     validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astFrameSet_ directly, so it must be a
-*     re-implementation of it in all respects, except for the
-*     conversions between IDs and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstFrameSet *new;             /* Pointer to new FrameSet */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain the Frame pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-   if ( astOK ) {
-
-/* Initialise the FrameSet, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitFrameSet( NULL, sizeof( AstFrameSet ), !class_init,
-                             &class_vtab, "FrameSet", frame );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   FrameSet's attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new FrameSet. */
-   return astMakeId( new );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/frameset.h b/ast-5.3-1/frameset.h
deleted file mode 100644
index 7c8da13..0000000
--- a/ast-5.3-1/frameset.h
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
-*+
-*  Name:
-*     frameset.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the FrameSet class.
-
-*  Invocation:
-*     #include "frameset.h"
-
-*  Description:
-*     This include file defines the interface to the FrameSet class and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this class.
-*
-*     A FrameSet consists of a set of one or more Frames, which are
-*     inter-related by Mappings in such a way that it is possible to
-*     obtain a Mapping between any pair of the Frames. The Frames are
-*     identified by an integer index, with Frames being numbered
-*     consecutively from one as they are added to the FrameSet.
-*
-*     At any time, there is a "base" Frame and a "current" Frame
-*     (which are allowed to be the same). Any of the Frames may be
-*     nominated to hold these positions, and the choice is determined
-*     by the values of the FrameSet's Base and Current attributes
-*     which hold the indices of the relevant Frames.  By default, the
-*     first Frame added to a FrameSet is its base Frame, and the last
-*     one added is its current Frame.
-*
-*     The base Frame describes the "native" coordinate system of
-*     whatever the FrameSet is used to calibrate (e.g. the pixel
-*     coordinates of an image) and the current Frame describes the
-*     "apparent" coordinate system in which it should be viewed
-*     (e.g. displayed, etc.). The other Frames represent alternative
-*     coordinate systems which may be selected by making them current.
-*
-*     When Frame methods are invoked on a FrameSet (e.g. to obtain a
-*     Title value or to determine the number of axes), they are
-*     applied to the current Frame. Thus, a FrameSet may be used in
-*     place of its current Frame in most situations.
-*
-*     When Mapping methods are invoked on a FrameSet, the Mapping used
-*     is the one between its base Frame and its current Frame. Thus, a
-*     FrameSet may be used to convert "native" coordinates into
-*     "apparent" ones, and vice versa. A FrameSet may also be
-*     inverted, which has the effect of interchanging its base and
-*     current Frames (and hence of reversing the Mapping between
-*     them).
-*
-*     The FrameSet class also defines methods of its own, which are
-*     used to manage the Frames and Mappings that it contains and to
-*     convert between coordinate systems described by different
-*     FrameSets.
-
-*  Inheritance:
-*     The FrameSet class inherits from the Frame class.
-
-*  Attributes Over-Ridden:
-*     Digits (integer)
-*     Direction(axis) (integer)
-*     Domain (string)
-*     Format(axis) (string)
-*     Label(axis) (string)
-*     MatchEnd (integer)
-*     MaxAxes (integer)
-*     MinAxes (integer)
-*     Naxes (integer)
-*     Permute (integer)
-*     PreserveAxes (integer)
-*     Symbol(axis) (string)
-*     Title (string)
-*     Unit(axis) (string)
-*        The FrameSet acquires all of these attributes from its
-*        current Frame, so their meanings, values and defaults are
-*        determined by this Frame and may change if a different
-*        current Frame is selected.
-*     Nin (integer)
-*     Nout (integer)
-*     TranForward (integer)
-*     TranInverse (integer)
-*        The FrameSet interprets all of these as applying to the
-*        Mapping that converts coordinates between its base Frame and
-*        its current Frame, so their values may change if a different
-*        base or current Frame is selected.
-*     Invert (integer)
-*     Report (integer)
-*        The FrameSet interprets these as applying to the Mapping that
-*        converts coordinates between its base Frame and its current
-*        Frame, but their values are not affected by selecing a
-*        different base or current Frame.
-
-*  New Attributes Defined:
-*     Base (integer)
-*        The (one-based) index of the Frame which is to be regarded as
-*        the base Frame in the FrameSet. By default, this is the first
-*        Frame added to the FrameSet (i.e. when it was created),
-*        unless the Frameset has been inverted, in which case it is
-*        the last Frame added. Inverting a FrameSet interchanges the
-*        values of its Base and Current attributes.
-*     Current (integer)
-*        The (one-based) index of the Frame which is to be regarded as
-*        the current Frame in the FrameSet. By default, this is the
-*        last Frame added to the FrameSet, unless the Frameset has
-*        been inverted, in which case it is the first Frame added
-*        (i.e. when the FrameSet was created). Inverting a FrameSet
-*        interchanges the values of its Base and Current attributes.
-*     Nframe (integer)
-*        A read-only value giving the number of Frames in a
-*        FrameSet. This value will change as Frames are added or
-*        removed.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astClear
-*           Clear attribute values for a FrameSet.
-*        astConvert
-*           Determine how to convert between two coordinate systems.
-*        astDistance
-*           Calculate the distance between two points.
-*        astFindFrame
-*           Find a coordinate system with specified characteristics
-*        astFormat
-*           Format a coordinate value for a FrameSet axis.
-*        astGetAxis
-*           Obtain a pointer to a specified Axis from a FrameSet.
-*        astGetNaxes
-*           Determine how many axes a FrameSet has.
-*        astGetNin
-*           Get the number of input coordinates for a FrameSet.
-*        astGetNout
-*           Get the number of output coordinates for a FrameSet.
-*        astNorm
-*           Normalise a set of FrameSet coordinates.
-*        astOffset
-*           Calculate an offset along a geodesic curve.
-*        astPermAxes
-*           Permute the order of a FrameSet's axes.
-*        astPickAxes
-*           Create a new Frame by picking axes from a FrameSet.
-*        astSetAxis
-*           Set a new Axis for a FrameSet.
-*        astSimplify
-*           Simplify the Mappings in a FrameSet.
-*        astTransform
-*           Transform a set of points.
-*        astUnformat
-*           Read a formatted coordinate value for a FrameSet axis.
-*
-*     Protected:
-*        astAbbrev
-*           Abbreviate a formatted FrameSet axis value by skipping leading
-*           fields.
-*        astClearDigits
-*           Clear the value of the Digits attribute for a FrameSet.
-*        astClearDirection
-*           Clear the value of the Direction attribute for a FrameSet axis.
-*        astClearDomain
-*           Clear the value of the Domain attribute for a FrameSet.
-*        astClearFormat
-*           Clear the value of the Format attribute for a FrameSet axis.
-*        astClearLabel
-*           Clear the value of the Label attribute for a FrameSet axis.
-*        astClearMatchEnd
-*           Clear the value of the MatchEnd attribute for a FrameSet.
-*        astClearMaxAxes
-*           Clear the value of the MaxAxes attribute for a FrameSet.
-*        astClearMinAxes
-*           Clear the value of the MinAxes attribute for a FrameSet.
-*        astClearPermute
-*           Clear the value of the Permute attribute for a FrameSet.
-*        astClearPreserveAxes
-*           Clear the value of the PreserveAxes attribute for a FrameSet.
-*        astClearSymbol
-*           Clear the value of the Symbol attribute for a FrameSet axis.
-*        astClearTitle
-*           Clear the value of the Title attribute for a FrameSet.
-*        astClearUnit
-*           Clear the value of the Unit attribute for a FrameSet axis.
-*        astConvertX
-*           Determine how to convert between two coordinate systems.
-*        astGap
-*           Find a "nice" gap for tabulating FrameSet axis values.
-*        astGetDigits
-*           Get the value of the Digits attribute for a FrameSet.
-*        astGetDirection
-*           Get the value of the Direction attribute for a FrameSet axis.
-*        astGetDomain
-*           Get the value of the Domain attribute for a FrameSet.
-*        astGetFormat
-*           Get the value of the Format attribute for a FrameSet axis.
-*        astGetLabel
-*           Get the value of the Label attribute for a FrameSet axis.
-*        astGetMatchEnd
-*           Get the value of the MatchEnd attribute for a FrameSet.
-*        astGetMaxAxes
-*           Get the value of the MaxAxes attribute for a FrameSet.
-*        astGetMinAxes
-*           Get the value of the MinAxes attribute for a FrameSet.
-*        astGetPerm
-*           Access the axis permutation array for the current Frame of
-*           a FrameSet.
-*        astGetPermute
-*           Get the value of the Permute attribute for a FrameSet.
-*        astGetPreserveAxes
-*           Get the value of the PreserveAxes attribute for a FrameSet.
-*        astGetSymbol
-*           Get the value of the Symbol attribute for a FrameSet axis.
-*        astGetTitle
-*           Get the value of the Title attribute for a FrameSet.
-*        astGetTranForward
-*           Determine if a Mapping can perform a "forward" coordinate
-*           transformation.
-*        astGetTranInverse
-*           Determine if a Mapping can perform an "inverse" coordinate
-*           transformation.
-*        astGetUnit
-*           Get the value of the Unit attribute for a FrameSet axis.
-*        astMatch
-*           Determine if conversion is possible between two coordinate systems.
-*        astOverlay
-*           Overlay the attributes of a template FrameSet on to another Frame.
-*        astPrimaryFrame
-*           Uniquely identify a primary Frame and one of its axes.
-*        astReportPoints
-*           Report the effect of transforming a set of points using a FrameSet.
-*        astSetAttrib
-*           Set an attribute value for a FrameSet.
-*        astSetDigits
-*           Set the value of the Digits attribute for a FrameSet.
-*        astSetDirection
-*           Set the value of the Direction attribute for a FrameSet axis.
-*        astSetDomain
-*           Set the value of the Domain attribute for a FrameSet.
-*        astSetFormat
-*           Set the value of the Format attribute for a FrameSet axis.
-*        astSetLabel
-*           Set the value of the Label attribute for a FrameSet axis.
-*        astSetMatchEnd
-*           Set the value of the MatchEnd attribute for a FrameSet.
-*        astSetMaxAxes
-*           Set the value of the MaxAxes attribute for a FrameSet.
-*        astSetMinAxes
-*           Set the value of the MinAxes attribute for a FrameSet.
-*        astSetPermute
-*           Set the value of the Permute attribute for a FrameSet.
-*        astSetPreserveAxes
-*           Set the value of the PreserveAxes attribute for a FrameSet.
-*        astSetSymbol
-*           Set the value of the Symbol attribute for a FrameSet axis.
-*        astSetTitle
-*           Set the value of the Title attribute for a FrameSet.
-*        astSetUnit
-*           Set the value of the Unit attribute for a FrameSet axis.
-*        astSubFrame
-*           Select axes from a FrameSet and convert to the new coordinate
-*           system.
-*        astTestDigits
-*           Test if a value has been set for the Digits attribute of a
-*           FrameSet.
-*        astTestDirection
-*           Test if a value has been set for the Direction attribute of a
-*           FrameSet axis.
-*        astTestDomain
-*           Test if a value has been set for the Domain attribute of a
-*           FrameSet.
-*        astTestFormat
-*           Test if a value has been set for the Format attribute of a
-*           FrameSet axis.
-*        astTestLabel
-*           Test if a value has been set for the Label attribute of a
-*           FrameSet axis.
-*        astTestMatchEnd
-*           Test if a value has been set for the MatchEnd attribute of a
-*           FrameSet.
-*        astTestMaxAxes
-*           Test if a value has been set for the MaxAxes attribute of a
-*           FrameSet.
-*        astTestMinAxes
-*           Test if a value has been set for the MinAxes attribute of a
-*           FrameSet.
-*        astTestPermute
-*           Test if a value has been set for the Permute attribute of a
-*           FrameSet.
-*        astTestPreserveAxes
-*           Test if a value has been set for the PreserveAxes attribute of a
-*           FrameSet.
-*        astTestSymbol
-*           Test if a value has been set for the Symbol attribute of a
-*           FrameSet axis.
-*        astTestTitle
-*           Test if a value has been set for the Title attribute of a FrameSet.
-*        astTestUnit
-*           Test if a value has been set for the Unit attribute of a FrameSet
-*           axis.
-*        astValidateAxis
-*           Validate and permute a FrameSet's axis index.
-*        astVSet
-*           Set values for a FrameSet's attributes.
-
-*  New Methods Defined:
-*     Public:
-*        astAddFrame
-*           Add a Frame to a FrameSet to define a new coordinate system.
-*        astGetFrame
-*           Obtain a pointer to a specified Frame in a FrameSet.
-*        astGetMapping
-*           Obtain a Mapping between two Frames in a FrameSet.
-*        astRemapFrame
-*           Modify a Frame's relationshp to the other Frames in a FrameSet.
-*        astRemoveFrame
-*           Remove a Frame from a FrameSet.
-*
-*     Protected:
-*        astClearBase
-*           Clear the value of the Base attribute for a FrameSet.
-*        astClearCurrent
-*           Clear the value of the Current attribute for a FrameSet.
-*        astGetBase
-*           Obtain the value of the Base attribute for a FrameSet.
-*        astGetCurrent
-*           Obtain the value of the Current attribute for a FrameSet.
-*        astGetNframe
-*           Determine the number of Frames in a FrameSet.
-*        astSetBase
-*           Set the value of the Base attribute for a FrameSet.
-*        astSetCurrent
-*           Set the value of the Current attribute for a FrameSet.
-*        astTestBase
-*           Test if a value has been set for the Base attribute of a FrameSet.
-*        astTestCurrent
-*           Test if a value has been set for the Current attribute of a
-*           FrameSet.
-*        astValidateFrameIndex
-*           Validate a FrameSet Frame index number.
-
-*  Other Class Functions:
-*     Public:
-*        astFrameSet
-*           Create a FrameSet.
-*        astIsAFrameSet
-*           Test class membership.
-*
-*     Protected:
-*        astCheckFrameSet
-*           Validate class membership.
-*        astInitFrameSet
-*           Initialise a FrameSet.
-*        astInitFrameSetVtab
-*           Initialise the virtual function table for the FrameSet class.
-*        astLoadFrameSet
-*           Load a FrameSet.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstFrameSet
-*           FrameSet object type.
-
-*     Protected:
-*        AstFrameSetVtab
-*           FrameSet virtual function table type.
-
-*  Macros:
-*     Public:
-*        AST__BASE
-*           Expands to a constant int that may be used as a Frame index to
-*           refer to a FrameSet's base Frame.
-*        AST__CURRENT
-*           Expands to a constant int that may be used as a Frame index to
-*           refer to a FrameSet's current Frame.
-*        AST__NOFRAME
-*           Expands to a constant int that is guaranteed not to be valid when
-*           used as a Frame index for a FrameSet.
-*
-*     Protected:
-*        None.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     16-FEB-1996 (RFWS):
-*        Original version.
-*     5-JUN-1996 (RFWS):
-*        Tidied up, etc.
-*     12-AUG-1996 (RFWS):
-*        Added support for the public interface.
-*     25-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     20-JAN-1998 (RFWS):
-*        Implemented preservation of FrameSet integrity when attribute
-*        values associated with the current Frame are modified.
-*     25-FEB-1998 (RFWS):
-*        Over-ride the astUnformat method.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitFrameSetVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frame.h"               /* Parent Frame class */
-
-/* Note that the usual setting of the FRAMESET_INCLUDED flag, which
-   prevents this file being included more than once, must be deferred
-   until after including the "frame.h" file. This is because "frame.h"
-   needs to include the present interface definition (as a form of
-   "forward reference") in order to have access to FrameSets
-   itself. */
-#if !defined( FRAMESET_INCLUDED )
-#define FRAMESET_INCLUDED
-
-/* Macros. */
-/* ======= */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__BASE (0)            /* Identify base Frame */
-#define AST__CURRENT (-1)        /* Identify current Frame */
-#define AST__NOFRAME (-99)       /* An invalid Frame index */
-#define AST__ALLFRAMES (-199)    /* A value representing all Frames */
-
-/* Type Definitions. */
-/* ================= */
-/* FrameSet structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstFrameSet {
-
-/* Attributes inherited from the parent class. */
-   AstFrame parent;              /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstFrame **frame;             /* Array of Frame pointers */
-   AstMapping **map;             /* Array of Mapping pointers */
-   int *invert;                  /* Array of Mapping Invert values */
-   int *link;                    /* Parent node index for each node */
-   int *node;                    /* Index of node associated with Frame */
-   int base;                     /* Index of base Frame */
-   int current;                  /* Index of current Frame */
-   int nframe;                   /* Number of Frames */
-   int nnode;                    /* Number of nodes */
-} AstFrameSet;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstFrameSetVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstFrame *(* GetFrame)( AstFrameSet *, int, int * );
-   AstMapping *(* GetMapping)( AstFrameSet *, int, int, int * );
-   int (* GetBase)( AstFrameSet *, int * );
-   int (* GetCurrent)( AstFrameSet *, int * );
-   int (* GetNframe)( AstFrameSet *, int * );
-   int (* TestBase)( AstFrameSet *, int * );
-   int (* TestCurrent)( AstFrameSet *, int * );
-   int (* ValidateFrameIndex)( AstFrameSet *, int, const char *, int * );
-   void (* AddFrame)( AstFrameSet *, int, AstMapping *, AstFrame *, int * );
-   void (* ClearBase)( AstFrameSet *, int * );
-   void (* ClearCurrent)( AstFrameSet *, int * );
-   void (* RemapFrame)( AstFrameSet *, int, AstMapping *, int * );
-   void (* RemoveFrame)( AstFrameSet *, int, int * );
-   void (* SetBase)( AstFrameSet *, int, int * );
-   void (* SetCurrent)( AstFrameSet *, int, int * );
-} AstFrameSetVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstFrameSetGlobals {
-   AstFrameSetVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 51 ];
-   AstFrame *Integrity_Frame;    
-   const char *Integrity_Method; 
-   int Integrity_Lost;           
-} AstFrameSetGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(FrameSet)         /* Check class membership */
-astPROTO_ISA(FrameSet)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstFrameSet *astFrameSet_( void *, const char *, int *, ...);
-#else
-AstFrameSet *astFrameSetId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstFrameSet *astInitFrameSet_( void *, size_t, int, AstFrameSetVtab *,
-                               const char *, AstFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitFrameSetVtab_( AstFrameSetVtab *, const char *, int * );
-
-/* Loader. */
-AstFrameSet *astLoadFrameSet_( void *, size_t, AstFrameSetVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitFrameSetGlobals_( AstFrameSetGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstFrame *astGetFrame_( AstFrameSet *, int, int * );
-AstMapping *astGetMapping_( AstFrameSet *, int, int, int * );
-void astAddFrame_( AstFrameSet *, int , AstMapping *, AstFrame *, int * );
-void astRemapFrame_( AstFrameSet *, int, AstMapping *, int * );
-void astRemoveFrame_( AstFrameSet *, int, int * );
-
-#if defined(astCLASS)            /* Protected */
-int astGetBase_( AstFrameSet *, int * );
-int astGetCurrent_( AstFrameSet *, int * );
-int astGetNframe_( AstFrameSet *, int * );
-int astTestBase_( AstFrameSet *, int * );
-int astTestCurrent_( AstFrameSet *, int * );
-int astValidateFrameIndex_( AstFrameSet *, int, const char *, int * );
-void astClearBase_( AstFrameSet *, int * );
-void astClearCurrent_( AstFrameSet *, int * );
-void astSetBase_( AstFrameSet *, int, int * );
-void astSetCurrent_( AstFrameSet *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
-   them easier to invoke (e.g. to avoid type mis-matches when passing pointers
-   to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
-   validate their own arguments. We must use a cast when passing object
-   pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckFrameSet(this) astINVOKE_CHECK(FrameSet,this,0)
-#define astVerifyFrameSet(this) astINVOKE_CHECK(FrameSet,this,1)
-
-/* Test class membership. */
-#define astIsAFrameSet(this) astINVOKE_ISA(FrameSet,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astFrameSet astINVOKE(F,astFrameSet_)
-#else
-#define astFrameSet astINVOKE(F,astFrameSetId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitFrameSet(mem,size,init,vtab,name,frame) \
-astINVOKE(O,astInitFrameSet_(mem,size,init,vtab,name,astCheckFrame(frame),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitFrameSetVtab(vtab,name) astINVOKE(V,astInitFrameSetVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadFrameSet(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadFrameSet_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckFrameSet to validate FrameSet pointers before
-   use. This provides a contextual error report if a pointer to the wrong sort
-   of object is supplied. */
-#define astAddFrame(this,iframe,map,frame) \
-astINVOKE(V,astAddFrame_(astCheckFrameSet(this),iframe,(((iframe)!=AST__ALLFRAMES)?astCheckMapping(map):NULL),astCheckFrame(frame),STATUS_PTR))
-#define astGetFrame(this,iframe) \
-astINVOKE(O,astGetFrame_(astCheckFrameSet(this),iframe,STATUS_PTR))
-#define astGetMapping(this,iframe1,iframe2) \
-astINVOKE(O,astGetMapping_(astCheckFrameSet(this),iframe1,iframe2,STATUS_PTR))
-#define astRemapFrame(this,iframe,map) \
-astINVOKE(V,astRemapFrame_(astCheckFrameSet(this),iframe,astCheckMapping(map),STATUS_PTR))
-#define astRemoveFrame(this,iframe) \
-astINVOKE(V,astRemoveFrame_(astCheckFrameSet(this),iframe,STATUS_PTR))
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-#if defined(astCLASS)            /* Protected */
-#define astClearBase(this) \
-astINVOKE(V,astClearBase_(astCheckFrameSet(this),STATUS_PTR))
-#define astClearCurrent(this) \
-astINVOKE(V,astClearCurrent_(astCheckFrameSet(this),STATUS_PTR))
-#define astGetBase(this) \
-astINVOKE(V,astGetBase_(astCheckFrameSet(this),STATUS_PTR))
-#define astGetCurrent(this) \
-astINVOKE(V,astGetCurrent_(astCheckFrameSet(this),STATUS_PTR))
-#define astGetNframe(this) \
-astINVOKE(V,astGetNframe_(astCheckFrameSet(this),STATUS_PTR))
-#define astSetBase(this,ibase) \
-astINVOKE(V,astSetBase_(astCheckFrameSet(this),ibase,STATUS_PTR))
-#define astSetCurrent(this,icurrent) \
-astINVOKE(V,astSetCurrent_(astCheckFrameSet(this),icurrent,STATUS_PTR))
-#define astTestBase(this) \
-astINVOKE(V,astTestBase_(astCheckFrameSet(this),STATUS_PTR))
-#define astTestCurrent(this) \
-astINVOKE(V,astTestCurrent_(astCheckFrameSet(this),STATUS_PTR))
-#define astValidateFrameIndex(this,iframe,method) \
-astINVOKE(V,astValidateFrameIndex_(astCheckFrameSet(this),iframe,method,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/fratemap.c b/ast-5.3-1/fratemap.c
deleted file mode 100644
index 1efdc27..0000000
--- a/ast-5.3-1/fratemap.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-*+
-*  Name:
-*     fratemap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST RateMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the RateMap class.
-
-*  Routines Defined:
-*     AST_ISARATEMAP
-*     AST_RATEMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S.Berry (Starlink)
-
-*  History:
-*     10-FEB-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "ratemap.h"             /* C interface to the RateMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaratemap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astWatchSTATUS(
-   astAt( "AST_ISARATEMAP", NULL, 0 );
-      RESULT = astIsARateMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_ratemap)( INTEGER(MAP),
-                                   INTEGER(AX1),
-                                   INTEGER(AX2),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(MAP)
-   GENPTR_INTEGER(AX1)
-   GENPTR_INTEGER(AX2)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_RATEMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astRateMap( astI2P( *MAP ), *AX1, *AX2, 
-                                  "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fregion.c b/ast-5.3-1/fregion.c
deleted file mode 100644
index 49bc85f..0000000
--- a/ast-5.3-1/fregion.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-*+
-*  Name:
-*     fregion.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Region class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Region class.
-
-*  Routines Defined:
-*     AST_NEGATE
-*     AST_ISAREGION
-*     AST_MAPREGION
-*     AST_GETREGIONBOUNDS
-*     AST_GETREGIONFRAME
-*     AST_OVERLAP
-*     AST_SETUNC
-*     AST_GETUNC
-*     AST_SHOWMESH
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-MAR-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "region.h"              /* C interface to the Region class */
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-
-F77_SUBROUTINE(ast_negate)( INTEGER(THIS),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-
-   astAt( "AST_NEGATE", NULL, 0 );
-   astWatchSTATUS(
-      astNegate( astI2P( *THIS ) );
-   )
-}
-
-F77_SUBROUTINE(ast_setunc)( INTEGER(THIS),
-                            INTEGER(UNC),
-                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(UNC)
-
-   astAt( "AST_SETUNC", NULL, 0 );
-   astWatchSTATUS(
-      astSetUnc( astI2P( *THIS ), astI2P( *UNC ) );
-   )
-}
-
-F77_LOGICAL_FUNCTION(ast_isaregion)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAREGION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsARegion( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getregionframe)( INTEGER(THIS),
-                                          INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETREGIONFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetRegionFrame( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getunc)( INTEGER(THIS), 
-                                  LOGICAL(DEF), 
-                                  INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_LOGICAL(DEF)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETUNC", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetUnc( astI2P( *THIS ), F77_ISTRUE( *DEF ) ? 1 : 0 ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_mapregion)( INTEGER(REG),
-                                     INTEGER(MAP),
-                                     INTEGER(FRM),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(REG)
-   GENPTR_INTEGER(MAP)
-   GENPTR_INTEGER(FRM)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_MAPREGION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astMapRegion( astI2P( *REG ), astI2P( *MAP ),
-                                     astI2P( *FRM ) ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_overlap)( INTEGER(THIS),
-                                   INTEGER(THAT),
-                                   INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(THAT)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_OVERLAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astOverlap( astI2P( *THIS ), astI2P( *THAT ) );
-   )
-   return RESULT;
-}
-
-/* AST_MASK<X> requires a function for each possible data type, so
-   define it via a macro. */
-#define MAKE_AST_MASK(f,F,Ftype,X,Xtype) \
-F77_INTEGER_FUNCTION(ast_mask##f)( INTEGER(THIS), \
-                                   INTEGER(MAP), \
-                                   LOGICAL(INSIDE), \
-                                   INTEGER(NDIM), \
-                                   INTEGER_ARRAY(LBND), \
-                                   INTEGER_ARRAY(UBND), \
-                                   Ftype##_ARRAY(IN), \
-                                   Ftype(VAL), \
-                                   INTEGER(STATUS) ) { \
-   GENPTR_INTEGER(THIS) \
-   GENPTR_INTEGER(MAP) \
-   GENPTR_LOGICAL(INSIDE) \
-   GENPTR_INTEGER(NDIM) \
-   GENPTR_INTEGER_ARRAY(LBND) \
-   GENPTR_INTEGER_ARRAY(UBND) \
-   GENPTR_##Ftype##_ARRAY(IN) \
-   GENPTR_##Ftype(VAL) \
-   GENPTR_INTEGER(STATUS) \
-\
-   F77_INTEGER_TYPE RESULT; \
-\
-   astAt( "AST_MASK"#F, NULL, 0 ); \
-   astWatchSTATUS( \
-\
-      RESULT = astMask##X( astI2P( *THIS ), astI2P( *MAP ), \
-                           F77_ISTRUE( *INSIDE ) ? 1 : 0, *NDIM, \
-                           LBND, UBND, (Xtype *) IN, *VAL ); \
-   ) \
-   return RESULT; \
-}
-
-/* Invoke the above macro to define a function for each data
-   type. Include synonyms for some functions. */
-MAKE_AST_MASK(d,D,DOUBLE,D,double)
-MAKE_AST_MASK(r,R,REAL,F,float)
-MAKE_AST_MASK(i,I,INTEGER,I,int)
-MAKE_AST_MASK(ui,UI,INTEGER,UI,unsigned int)
-MAKE_AST_MASK(s,S,WORD,S,short int)
-MAKE_AST_MASK(us,US,UWORD,US,unsigned short int)
-MAKE_AST_MASK(w,W,WORD,S,short int)
-MAKE_AST_MASK(uw,UW,UWORD,US,unsigned short int)
-MAKE_AST_MASK(b,B,BYTE,B,signed char)
-MAKE_AST_MASK(ub,UB,UBYTE,UB,unsigned char)
-#undef MAKE_AST_MASK
-
-F77_SUBROUTINE(ast_getregionbounds)( INTEGER(THIS),
-                                     DOUBLE(LBND),
-                                     DOUBLE(UBND),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_DOUBLE(XOUT)
-   GENPTR_DOUBLE(YOUT)
-
-   astAt( "AST_GETREGIONBOUNDS", NULL, 0 );
-   astWatchSTATUS(
-      astGetRegionBounds( astI2P( *THIS ), LBND, UBND );
-   )
-}
-
-F77_SUBROUTINE(ast_showmesh)( INTEGER(THIS),
-                              LOGICAL(FORMAT),
-                              CHARACTER(TTL),
-                              INTEGER(STATUS)
-                              TRAIL(TTL) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_LOGICAL(FORMAT)
-   GENPTR_CHARACTER(TTL)
-   char *ttl;
-
-   astAt( "AST_SHOWMESH", NULL, 0 );
-   astWatchSTATUS(
-      ttl = astString( TTL, TTL_length );
-      astShowMesh( astI2P( *THIS ), F77_ISTRUE( *FORMAT ) ? 1 : 0, ttl );
-      ttl = astFree( ttl );
-   )
-}
-
-
-
diff --git a/ast-5.3-1/fselectormap.c b/ast-5.3-1/fselectormap.c
deleted file mode 100644
index 04dad9f..0000000
--- a/ast-5.3-1/fselectormap.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-*+
-*  Name:
-*     fselectormap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SelectorMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SelectorMap class.
-
-*  Routines Defined:
-*     AST_ISASELECTORMAP
-*     AST_SELECTORMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S.Berry (Starlink)
-
-*  History:
-*     14-MAR-2006 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "selectormap.h"         /* C interface to the SelectorMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaselectormap)( INTEGER(THIS),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astWatchSTATUS(
-   astAt( "AST_ISASELECTORMAP", NULL, 0 );
-      RESULT = astIsASelectorMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_selectormap)( INTEGER(NREG),
-                                       INTEGER_ARRAY(REGS),
-                                       DOUBLE(BADVAL),
-                                       CHARACTER(OPTIONS),
-                                       INTEGER(STATUS)
-                                       TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NREG)
-   GENPTR_INTEGER_ARRAY(REGS)
-   GENPTR_DOUBLE(BADVAL)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-   AstObject **regs;
-
-   astAt( "AST_SELECTORMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-      regs = astMalloc( sizeof(AstObject *) * (*NREG) );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-
-         for ( i = 0; i < *NREG; i++ ) {
-            regs[ i ] = astI2P( REGS[ i ] );
-         }
-      }
-
-
-      RESULT = astP2I( astSelectorMap( *NREG, (void **) regs, *BADVAL, "%s", 
-                                       options ) );
-      astFree( regs );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fshiftmap.c b/ast-5.3-1/fshiftmap.c
deleted file mode 100644
index e43b07e..0000000
--- a/ast-5.3-1/fshiftmap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-*+
-*  Name:
-*     fshiftmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST ShiftMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the ShiftMap class.
-
-*  Routines Defined:
-*     AST_ISASHIFTMAP
-*     AST_SHIFTMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     18-AUG-2003 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "shiftmap.h"            /* C interface to the ShiftMap class */
-
-F77_LOGICAL_FUNCTION(ast_isashiftmap)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASHIFTMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAShiftMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_shiftmap)( INTEGER(NAXES),
-                                  DOUBLE(SHIFT),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NAXES)
-   GENPTR_DOUBLE(SHIFT)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_SHIFTMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astShiftMap( *NAXES, SHIFT, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fskyframe.c b/ast-5.3-1/fskyframe.c
deleted file mode 100644
index cb9f17f..0000000
--- a/ast-5.3-1/fskyframe.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-*+
-*  Name:
-*     fskyframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SkyFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SkyFrame class.
-
-*  Routines Defined:
-*     AST_ISASKYFRAME
-*     AST_SKYFRAME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     23-JUL-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "skyframe.h"            /* C interface to the SkyFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isaskyframe)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASKYFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsASkyFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_skyframe)( CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_SKYFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astSkyFrame( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fslamap.c b/ast-5.3-1/fslamap.c
deleted file mode 100644
index 3ee0d62..0000000
--- a/ast-5.3-1/fslamap.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-*+
-*  Name:
-*     fslamap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SlaMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SlaMap class.
-
-*  Routines Defined:
-*     AST_ISASLAMAP
-*     AST_SLAADD
-*     AST_SLAMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     28-MAY-1997 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "slamap.h"              /* C interface to the SlaMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaslamap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASLAMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsASlaMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_slaadd)( INTEGER(THIS),
-                            CHARACTER(CVT),
-                            DOUBLE_ARRAY(ARGS),
-                            INTEGER(STATUS)
-                            TRAIL(CVT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(CVT)
-   GENPTR_DOUBLE_ARRAY(ARGS)
-   char *cvt;
-
-   astAt( "AST_SLAADD", NULL, 0 );
-   astWatchSTATUS(
-      cvt = astString( CVT, CVT_length );
-      astSlaAdd( astI2P( *THIS ), cvt, ARGS );
-      astFree( cvt );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_slamap)( INTEGER(FLAGS),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FLAGS)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_SLAMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astSlaMap( *FLAGS, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fspecfluxframe.c b/ast-5.3-1/fspecfluxframe.c
deleted file mode 100644
index 6f89c5c..0000000
--- a/ast-5.3-1/fspecfluxframe.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-*  Name:
-*     fspecfluxframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SpecFluxFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SpecFluxFrame class.
-
-*  Routines Defined:
-*     AST_SPECFLUXFRAME
-*     AST_ISASPECFLUXFRAME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     8-DEC-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "specfluxframe.h"       /* C interface to the SpecFluxFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isaspecfluxframe)( INTEGER(THIS),
-                                            INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASPECFLUXFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsASpecFluxFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_specfluxframe)( INTEGER(FRAME1),
-                                         INTEGER(FRAME2),
-                                         CHARACTER(OPTIONS),
-                                         INTEGER(STATUS)
-                                         TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FRAME1)
-   GENPTR_INTEGER(FRAME2)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_SPECFLUXFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astSpecFluxFrame( astI2P( *FRAME1 ), astI2P( *FRAME2 ),
-                                    "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fspecframe.c b/ast-5.3-1/fspecframe.c
deleted file mode 100644
index b8a86ef..0000000
--- a/ast-5.3-1/fspecframe.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-*+
-*  Name:
-*     fspecframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SpecFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SpecFrame class.
-
-*  Routines Defined:
-*     AST_ISASPECFRAME
-*     AST_SPECFRAME
-*     AST_SETREFPOS
-*     AST_GETREFPOS
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     20-NOV-2002 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "specframe.h"           /* C interface to the SpecFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isaspecframe)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASPECFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsASpecFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_specframe)( CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_SPECFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astSpecFrame( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_getrefpos)( INTEGER(THIS),
-                               INTEGER(FRM),
-                               DOUBLE(LON),
-                               DOUBLE(LAT),
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(FRM)
-   GENPTR_DOUBLE(LON)
-   GENPTR_DOUBLE(LAT)
-
-   astAt( "AST_GETREFPOS", NULL, 0 );
-   astWatchSTATUS(
-      astGetRefPos( astI2P( *THIS ), astI2P( *FRM ), LON, LAT );
-   )
-}
-
-F77_SUBROUTINE(ast_setrefpos)( INTEGER(THIS),
-                               INTEGER(FRM),
-                               DOUBLE(LON),
-                               DOUBLE(LAT),
-                               INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(FRM)
-   GENPTR_DOUBLE(LON)
-   GENPTR_DOUBLE(LAT)
-
-   astAt( "AST_SETREFPOS", NULL, 0 );
-   astWatchSTATUS(
-      astSetRefPos( astI2P( *THIS ), astI2P( *FRM ), *LON, *LAT );
-   )
-}
-
diff --git a/ast-5.3-1/fspecmap.c b/ast-5.3-1/fspecmap.c
deleted file mode 100644
index eaf4da4..0000000
--- a/ast-5.3-1/fspecmap.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-*+
-*  Name:
-*     fspecmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SpecMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SpecMap class.
-
-*  Routines Defined:
-*     AST_ISASPECMAP
-*     AST_SPECADD
-*     AST_SPECMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-NOV-2002 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "specmap.h"             /* C interface to the SpecMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaspecmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASPECMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsASpecMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_specadd)( INTEGER(THIS),
-                            CHARACTER(CVT),
-                            DOUBLE_ARRAY(ARGS),
-                            INTEGER(STATUS)
-                            TRAIL(CVT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(CVT)
-   GENPTR_DOUBLE_ARRAY(ARGS)
-   char *cvt;
-
-   astAt( "AST_SPECADD", NULL, 0 );
-   astWatchSTATUS(
-      cvt = astString( CVT, CVT_length );
-      astSpecAdd( astI2P( *THIS ), cvt, ARGS );
-      astFree( cvt );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_specmap)( INTEGER(NIN),
-                                  INTEGER(FLAGS),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NIN)
-   GENPTR_INTEGER(FLAGS)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_SPECMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astSpecMap( *NIN, *FLAGS, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fsphmap.c b/ast-5.3-1/fsphmap.c
deleted file mode 100644
index 218fe4f..0000000
--- a/ast-5.3-1/fsphmap.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-*+
-*  Name:
-*     fsphmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SphMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SphMap class.
-
-*  Routines Defined:
-*     AST_ISASPHMAP
-*     AST_SPHMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     25-OCT-1996 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "sphmap.h"              /* C interface to the SphMap class */
-
-F77_LOGICAL_FUNCTION(ast_isasphmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASPHMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsASphMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_sphmap)( CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_SPHMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astSphMap( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fstc.c b/ast-5.3-1/fstc.c
deleted file mode 100644
index f6d2052..0000000
--- a/ast-5.3-1/fstc.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-*  Name:
-*     fstc.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST Stc class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the Stc class.
-
-*  Routines Defined:
-*     AST_ISASTC
-*     AST_GETSTCREGION
-*     AST_GETSTCCOORD
-*     AST_GETSTCNCOORD
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-NOV-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "stc.h"                 /* C interface to the Stc class */
-
-
-F77_INTEGER_FUNCTION(ast_getstcncoord)( INTEGER(THIS),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETSTCNCOORD", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astGetStcNCoord( astI2P( *THIS ) );
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getstccoord)( INTEGER(THIS),
-                                       INTEGER(ICOORD),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_INTEGER(ICOORD)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETSTCCOORD", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetStcCoord( astI2P( *THIS ), *ICOORD ) );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isastc)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASTC", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAStc( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_getstcregion)( INTEGER(THIS),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_INTEGER_TYPE(RESULT);
-
-   astAt( "AST_GETSTCREGION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astP2I( astGetStcRegion( astI2P( *THIS ) ) );
-   )
-   return RESULT;
-}
-
-
diff --git a/ast-5.3-1/fstccatalogentrylocation.c b/ast-5.3-1/fstccatalogentrylocation.c
deleted file mode 100644
index e180d51..0000000
--- a/ast-5.3-1/fstccatalogentrylocation.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-*  Name:
-*     fstccatalogentrylocation.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST StcCatalogEntryLocation class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the StcCatalogEntryLocation class.
-
-*  Routines Defined:
-*     AST_ISASTCCATALOGENTRYLOCATION
-*     AST_STCCATALOGENTRYLOCATION
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-NOV-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "stccatalogentrylocation.h" /* C interface to the StcCatalogEntryLocation class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastccatalogentrylocation)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASTCCATALOGENTRYLOCATION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAStcCatalogEntryLocation( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stccatalogentrylocation)( INTEGER(REG),
-                               INTEGER(NCOORDS),
-                               INTEGER_ARRAY(COORDS),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(REG)
-   GENPTR_INTEGER(NCOORDS)
-   GENPTR_CHARACTER(OPTIONS)
-   GENPTR_INTEGER_ARRAY(COORDS)
-   AstKeyMap **coords;
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_STCCATALOGENTRYLOCATION", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-/* Convert supplied integers to pointers. */
-      coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
-      if( astOK ) {
-         for( i = 0; i < *NCOORDS; i++ ) {
-            coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
-         }
-      }
-
-      RESULT = astP2I( astStcCatalogEntryLocation( astI2P( *REG ), *NCOORDS, 
-                                                   coords, "%s", options ) );
-      astFree( coords );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fstcobsdatalocation.c b/ast-5.3-1/fstcobsdatalocation.c
deleted file mode 100644
index 4115ab8..0000000
--- a/ast-5.3-1/fstcobsdatalocation.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-*  Name:
-*     fstcobsdatalocation.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST StcObsDataLocation class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the StcObsDataLocation class.
-
-*  Routines Defined:
-*     AST_ISASTCOBSDATALOCATION
-*     AST_STCOBSDATALOCATION
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-NOV-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "stcobsdatalocation.h" /* C interface to the StcObsDataLocation class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastcobsdatalocation)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASTCOBSDATALOCATION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAStcObsDataLocation( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stcobsdatalocation)( INTEGER(REG),
-                               INTEGER(NCOORDS),
-                               INTEGER_ARRAY(COORDS),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(REG)
-   GENPTR_INTEGER(NCOORDS)
-   GENPTR_CHARACTER(OPTIONS)
-   GENPTR_INTEGER_ARRAY(COORDS)
-   AstKeyMap **coords;
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_STCOBSDATALOCATION", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-/* Convert supplied integers to pointers. */
-      coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
-      if( astOK ) {
-         for( i = 0; i < *NCOORDS; i++ ) {
-            coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
-         }
-      }
-
-      RESULT = astP2I( astStcObsDataLocation( astI2P( *REG ), *NCOORDS, 
-                                              coords, "%s", options ) );
-      astFree( coords );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fstcresourceprofile.c b/ast-5.3-1/fstcresourceprofile.c
deleted file mode 100644
index 5534127..0000000
--- a/ast-5.3-1/fstcresourceprofile.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-*+
-*  Name:
-*     fstcresourceprofile.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST StcResourceProfile class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the StcResourceProfile class.
-
-*  Routines Defined:
-*     AST_ISASTCRESOURCEPROFILE
-*     AST_STCRESOURCEPROFILE
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-NOV-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "object.h"              /* Basic AST Object management functions */
-#include "stcresourceprofile.h" /* C interface to the StcResourceProfile class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastcresourceprofile)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASTCRESOURCEPROFILE", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAStcResourceProfile( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stcresourceprofile)( INTEGER(REG),
-                               INTEGER(NCOORDS),
-                               INTEGER_ARRAY(COORDS),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(REG)
-   GENPTR_INTEGER(NCOORDS)
-   GENPTR_CHARACTER(OPTIONS)
-   GENPTR_INTEGER_ARRAY(COORDS)
-   AstKeyMap **coords;
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_STCRESOURCEPROFILE", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-/* Convert supplied integers to pointers. */
-      coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
-      if( astOK ) {
-         for( i = 0; i < *NCOORDS; i++ ) {
-            coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
-         }
-      }
-
-      RESULT = astP2I( astStcResourceProfile( astI2P( *REG ), *NCOORDS, 
-                                                   coords, "%s", options ) );
-      astFree( coords );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fstcschan.c b/ast-5.3-1/fstcschan.c
deleted file mode 100644
index c90bf50..0000000
--- a/ast-5.3-1/fstcschan.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-*+
-*  Name:
-*     fstcschan.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST StcsChan class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the StcsChan class.
-
-*  Routines Defined:
-*     AST_STCSCHAN
-*     AST_ISASTCSCHAN
-
-*  Copyright:
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (JAC,UCLan)
-
-*  History:
-*     18-DEC-2008 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "channel.h"             /* Provides wrapper functions */
-#include "stcschan.h"             /* C interface to the StcsChan class */
-
-#include <stddef.h>
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_stcschan)( void (* SOURCE)(),
-                                   void (* SINK)(),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   const char *(* source)( void );
-   int i;
-   void (* sink)( const char * );
-
-   astAt( "AST_STCSCHAN", NULL, 0 );
-   astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
-   the null routine AST_NULL has been supplied. */
-      source = (const char *(*)( void )) SOURCE;
-      if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
-         source = NULL;
-      }
-      sink = (void (*)( const char * )) SINK;
-      if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
-         sink = NULL;
-      }
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astStcsChanFor( source, astSourceWrap, sink, astSinkWrap,
-                                      "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isastcschan)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASTCSCHAN", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAStcsChan( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-
-
-
-
diff --git a/ast-5.3-1/fstcsearchlocation.c b/ast-5.3-1/fstcsearchlocation.c
deleted file mode 100644
index 91e996a..0000000
--- a/ast-5.3-1/fstcsearchlocation.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-*+
-*  Name:
-*     fstcsearchlocation.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST StcSearchLocation class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the StcSearchLocation class.
-
-*  Routines Defined:
-*     AST_ISASTCSEARCHLOCATION
-*     AST_STCSEARCHLOCATION
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-NOV-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "stcsearchlocation.h" /* C interface to the StcSearchLocation class */
-
-
-F77_LOGICAL_FUNCTION(ast_isastcsearchlocation)( INTEGER(THIS), INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISASTCSEARCHLOCATION", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAStcSearchLocation( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_stcsearchlocation)( INTEGER(REG),
-                               INTEGER(NCOORDS),
-                               INTEGER_ARRAY(COORDS),
-                               CHARACTER(OPTIONS),
-                               INTEGER(STATUS)
-                               TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(REG)
-   GENPTR_INTEGER(NCOORDS)
-   GENPTR_CHARACTER(OPTIONS)
-   GENPTR_INTEGER_ARRAY(COORDS)
-   AstKeyMap **coords;
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_STCSEARCHLOCATION", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-
-/* Convert supplied integers to pointers. */
-      coords = astMalloc( sizeof( AstKeyMap * )*(size_t)( *NCOORDS ));
-      if( astOK ) {
-         for( i = 0; i < *NCOORDS; i++ ) {
-            coords[ i ] = (AstKeyMap *) astMakePointer( astI2P( COORDS[ i ] ));
-         }
-      }
-
-      RESULT = astP2I( astStcSearchLocation( astI2P( *REG ), *NCOORDS, 
-                                                   coords, "%s", options ) );
-      astFree( coords );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fswitchmap.c b/ast-5.3-1/fswitchmap.c
deleted file mode 100644
index 35ad728..0000000
--- a/ast-5.3-1/fswitchmap.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-*+
-*  Name:
-*     fswitchmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST SwitchMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the SwitchMap class.
-
-*  Routines Defined:
-*     AST_ISASWITCHMAP
-*     AST_SWITCHMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S.Berry (Starlink)
-
-*  History:
-*     13-MAR-2006 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "switchmap.h"           /* C interface to the SwitchMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaswitchmap)( INTEGER(THIS),
-                                        INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astWatchSTATUS(
-   astAt( "AST_ISASWITCHMAP", NULL, 0 );
-      RESULT = astIsASwitchMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_switchmap)( INTEGER(FSMAP),
-                                     INTEGER(ISMAP),
-                                     INTEGER(NROUTE),
-                                     INTEGER_ARRAY(ROUTEMAPS),
-                                     CHARACTER(OPTIONS),
-                                     INTEGER(STATUS)
-                                     TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FSMAP)
-   GENPTR_INTEGER(ISMAP)
-   GENPTR_INTEGER(NROUTE)
-   GENPTR_INTEGER_ARRAY(ROUTEMAPS)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-   AstObject **routemaps;
-
-   astAt( "AST_SWITCHMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-      routemaps = astMalloc( sizeof(AstObject *) * (*NROUTE) );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-
-         for ( i = 0; i < *NROUTE; i++ ) {
-            routemaps[ i ] = astI2P( ROUTEMAPS[ i ] );
-         }
-      }
-
-
-      RESULT = astP2I( astSwitchMap( astI2P( *FSMAP ), astI2P( *ISMAP ),
-                                     *NROUTE, (void **) routemaps, "%s", 
-                                     options ) );
-      astFree( routemaps );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/ftimeframe.c b/ast-5.3-1/ftimeframe.c
deleted file mode 100644
index 90bfb7a..0000000
--- a/ast-5.3-1/ftimeframe.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-*+
-*  Name:
-*     ftimeframe.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST TimeFrame class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the TimeFrame class.
-
-*  Routines Defined:
-*     AST_ISATIMEFRAME
-*     AST_TIMEFRAME
-*     AST_CURRENTTIME
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     NG: Norman Gray (Starlink)
-
-*  History:
-*     02-AUG-2003 (NG):
-*        Original version, heavily based on fspecframe.c.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "timeframe.h"           /* C interface to the TimeFrame class */
-
-F77_LOGICAL_FUNCTION(ast_isatimeframe)( INTEGER(THIS),
-                                       INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISATIMEFRAME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsATimeFrame( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_timeframe)( CHARACTER(OPTIONS),
-                                    INTEGER(STATUS)
-                                    TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_TIMEFRAME", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astTimeFrame( "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_DOUBLE_FUNCTION(ast_currenttime)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_DOUBLE_TYPE(RESULT);
-
-   astAt( "AST_CURRENTTIME", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astCurrentTime( astI2P( *THIS ) );
-   )
-   return RESULT;
-}
-
-
diff --git a/ast-5.3-1/ftimemap.c b/ast-5.3-1/ftimemap.c
deleted file mode 100644
index 53bb092..0000000
--- a/ast-5.3-1/ftimemap.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-*+
-*  Name:
-*     ftimemap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST TimeMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the TimeMap class.
-
-*  Routines Defined:
-*     AST_ISATIMEMAP
-*     AST_TIMEADD
-*     AST_TIMEMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     NG: Norman Gray (Starlink)
-
-*  History:
-*     08-Sep-2003 (NG):
-*        Original version (heavily based on fspecmap.c)
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "timemap.h"             /* C interface to the TimeMap class */
-
-F77_LOGICAL_FUNCTION(ast_isatimemap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISATIMEMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsATimeMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_SUBROUTINE(ast_timeadd)( INTEGER(THIS),
-                            CHARACTER(CVT),
-                            DOUBLE_ARRAY(ARGS),
-                            INTEGER(STATUS)
-                            TRAIL(CVT) ) {
-   GENPTR_INTEGER(THIS)
-   GENPTR_CHARACTER(CVT)
-   GENPTR_DOUBLE_ARRAY(ARGS)
-   char *cvt;
-
-   astAt( "AST_TIMEADD", NULL, 0 );
-   astWatchSTATUS(
-      cvt = astString( CVT, CVT_length );
-      astTimeAdd( astI2P( *THIS ), cvt, ARGS );
-      astFree( cvt );
-   )
-}
-
-F77_INTEGER_FUNCTION(ast_timemap)( INTEGER(FLAGS),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(FLAGS)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_TIMEMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astTimeMap( *FLAGS, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/ftranmap.c b/ast-5.3-1/ftranmap.c
deleted file mode 100644
index d6029e1..0000000
--- a/ast-5.3-1/ftranmap.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*+
-*  Name:
-*     ftranmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST TranMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the TranMap class.
-
-*  Routines Defined:
-*     AST_ISATRANMAP
-*     AST_TRANMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S.Berry (Starlink)
-
-*  History:
-*     10-FEB-2004 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "tranmap.h"              /* C interface to the TranMap class */
-
-F77_LOGICAL_FUNCTION(ast_isatranmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astWatchSTATUS(
-   astAt( "AST_ISATRANMAP", NULL, 0 );
-      RESULT = astIsATranMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_tranmap)( INTEGER(MAP1),
-                                  INTEGER(MAP2),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(MAP1)
-   GENPTR_INTEGER(MAP2)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   int i;
-   char *options;
-
-   astAt( "AST_TRANMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astTranMap( astI2P( *MAP1 ), astI2P( *MAP2 ),
-                                  "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/funitmap.c b/ast-5.3-1/funitmap.c
deleted file mode 100644
index fc92cc6..0000000
--- a/ast-5.3-1/funitmap.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-*+
-*  Name:
-*     funitmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST UnitMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the UnitMap class.
-
-*  Routines Defined:
-*     AST_ISAUNITMAP
-*     AST_UNITMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     25-SEP-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "unitmap.h"             /* C interface to the UnitMap class */
-
-F77_LOGICAL_FUNCTION(ast_isaunitmap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAUNITMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAUnitMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_unitmap)( INTEGER(NCOORD),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NCOORD)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_UNITMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astUnitMap( *NCOORD, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fwcsmap.c b/ast-5.3-1/fwcsmap.c
deleted file mode 100644
index 2a6504f..0000000
--- a/ast-5.3-1/fwcsmap.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-*+
-*  Name:
-*     fwcsmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST WcsMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the WcsMap class.
-
-*  Routines Defined:
-*     AST_ISAWCSMAP
-*     AST_WCSMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     18-NOV-1996 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "wcsmap.h"              /* C interface to the WcsMap class */
-
-F77_LOGICAL_FUNCTION(ast_isawcsmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAWCSMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAWcsMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_wcsmap)( INTEGER(NAXES),
-                                  INTEGER(TYPE),
-                                  INTEGER(LONAX),
-                                  INTEGER(LATAX),
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NAXES)
-   GENPTR_INTEGER(TYPE)
-   GENPTR_INTEGER(LONAX)
-   GENPTR_INTEGER(LATAX)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_WCSMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astWcsMap( *NAXES, *TYPE, *LONAX, *LATAX,
-                       "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fwinmap.c b/ast-5.3-1/fwinmap.c
deleted file mode 100644
index 728ca9e..0000000
--- a/ast-5.3-1/fwinmap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-*+
-*  Name:
-*     fwinmap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST WinMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the WinMap class.
-
-*  Routines Defined:
-*     AST_ISAWINMAP
-*     AST_WINMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     23-OCT-1996 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "winmap.h"              /* C interface to the WinMap class */
-
-F77_LOGICAL_FUNCTION(ast_isawinmap)( INTEGER(THIS),
-                                     INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAWINMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAWinMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_winmap)( INTEGER(NAXES),
-                                  DOUBLE(C1_IN),
-                                  DOUBLE(C2_IN),
-                                  DOUBLE(C1_OUT),
-                                  DOUBLE(C2_OUT), 
-                                  CHARACTER(OPTIONS),
-                                  INTEGER(STATUS)
-                                  TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NAXES)
-   GENPTR_DOUBLE(C1_IN)
-   GENPTR_DOUBLE(C2_IN)
-   GENPTR_DOUBLE(C1_OUT)
-   GENPTR_DOUBLE(C2_OUT)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_WINMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astWinMap( *NAXES, C1_IN, C2_IN, C1_OUT, C2_OUT, 
-                                  "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/fxmlchan.c b/ast-5.3-1/fxmlchan.c
deleted file mode 100644
index 9809771..0000000
--- a/ast-5.3-1/fxmlchan.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-*+
-*  Name:
-*     fxmlchan.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST XmlChan class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the XmlChan class.
-
-*  Routines Defined:
-*     AST_XMLCHAN
-*     AST_ISAXMLCHAN
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     21-OCT-2003 (DSB):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "channel.h"             /* Provides wrapper functions */
-#include "xmlchan.h"             /* C interface to the XmlChan class */
-
-#include <stddef.h>
-
-/* Prototypes for external functions. */
-/* ================================== */
-/* This is the null function defined by the FORTRAN interface in fobject.c. */
-F77_SUBROUTINE(ast_null)( void );
-
-/* FORTRAN interface functions. */
-/* ============================ */
-/* These functions implement the remainder of the FORTRAN interface. */
-F77_INTEGER_FUNCTION(ast_xmlchan)( void (* SOURCE)(),
-                                   void (* SINK)(),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   const char *(* source)( void );
-   int i;
-   void (* sink)( const char * );
-
-   astAt( "AST_XMLCHAN", NULL, 0 );
-   astWatchSTATUS(
-
-/* Set the source and sink function pointers to NULL if a pointer to
-   the null routine AST_NULL has been supplied. */
-      source = (const char *(*)( void )) SOURCE;
-      if ( source == (const char *(*)( void )) F77_EXTERNAL_NAME(ast_null) ) {
-         source = NULL;
-      }
-      sink = (void (*)( const char * )) SINK;
-      if ( sink == (void (*)( const char * )) F77_EXTERNAL_NAME(ast_null) ) {
-         sink = NULL;
-      }
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astXmlChanFor( source, astSourceWrap, sink, astSinkWrap,
-                                      "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
-
-F77_LOGICAL_FUNCTION(ast_isaxmlchan)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAXMLCHAN", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAXmlChan( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-
-
-
diff --git a/ast-5.3-1/fzoommap.c b/ast-5.3-1/fzoommap.c
deleted file mode 100644
index 568144b..0000000
--- a/ast-5.3-1/fzoommap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-*+
-*  Name:
-*     fzoommap.c
-
-*  Purpose:
-*     Define a FORTRAN 77 interface to the AST ZoomMap class.
-
-*  Type of Module:
-*     C source file.
-
-*  Description:
-*     This file defines FORTRAN 77-callable C functions which provide
-*     a public FORTRAN 77 interface to the ZoomMap class.
-
-*  Routines Defined:
-*     AST_ISAZOOMMAP
-*     AST_ZOOMMAP
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     18-JUL-1996 (RFWS):
-*        Original version.
-*/
-
-/* Define the astFORTRAN77 macro which prevents error messages from
-   AST C functions from reporting the file and line number where the
-   error occurred (since these would refer to this file, they would
-   not be useful). */
-#define astFORTRAN77
-
-/* Header files. */
-/* ============= */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* F77 <-> C support functions/macros */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory handling facilities */
-#include "zoommap.h"             /* C interface to the ZoomMap class */
-
-F77_LOGICAL_FUNCTION(ast_isazoommap)( INTEGER(THIS),
-                                      INTEGER(STATUS) ) {
-   GENPTR_INTEGER(THIS)
-   F77_LOGICAL_TYPE(RESULT);
-
-   astAt( "AST_ISAZOOMMAP", NULL, 0 );
-   astWatchSTATUS(
-      RESULT = astIsAZoomMap( astI2P( *THIS ) ) ? F77_TRUE : F77_FALSE;
-   )
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_zoommap)( INTEGER(NAXES),
-                                   DOUBLE(ZOOM),
-                                   CHARACTER(OPTIONS),
-                                   INTEGER(STATUS)
-                                   TRAIL(OPTIONS) ) {
-   GENPTR_INTEGER(NAXES)
-   GENPTR_DOUBLE(ZOOM)
-   GENPTR_CHARACTER(OPTIONS)
-   F77_INTEGER_TYPE(RESULT);
-   char *options;
-   int i;
-
-   astAt( "AST_ZOOMMAP", NULL, 0 );
-   astWatchSTATUS(
-      options = astString( OPTIONS, OPTIONS_length );
-
-/* Change ',' to '\n' (see AST_SET in fobject.c for why). */
-      if ( astOK ) {
-         for ( i = 0; options[ i ]; i++ ) {
-            if ( options[ i ] == ',' ) options[ i ] = '\n';
-         }
-      }
-      RESULT = astP2I( astZoomMap( *NAXES, *ZOOM, "%s", options ) );
-      astFree( options );
-   )
-   return RESULT;
-}
diff --git a/ast-5.3-1/globals.c b/ast-5.3-1/globals.c
deleted file mode 100644
index 8cf24ef..0000000
--- a/ast-5.3-1/globals.c
+++ /dev/null
@@ -1,247 +0,0 @@
-#if defined( THREAD_SAFE )
-
-#define astCLASS
-
-#include "globals.h"
-#include "error.h"
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Select the appropriate memory management functions. These will be the
-   system's malloc, free and realloc unless AST was configured with the
-   "--with-starmem" option, in which case they will be the starmem
-   malloc, free and realloc. */
-#ifdef HAVE_STAR_MEM_H
-#  include <star/mem.h>
-#  define MALLOC starMalloc
-#  define FREE starFree
-#  define REALLOC starRealloc
-#else
-#  define MALLOC malloc
-#  define FREE free
-#  define REALLOC realloc
-#endif
-
-/* Module variables */
-/* ================ */
-
-/* A count of the number of thread-specific data structures created so
-   far. Create a mutex to serialise access to this static variable. */
-static int nthread = 0;
-static pthread_mutex_t nthread_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-/* External variables visible throughout AST */
-/* ========================================= */
-
-/* Set a flag indicating that the thread-specific data key has not yet  
-   been created. */ 
-pthread_once_t starlink_ast_globals_initialised = PTHREAD_ONCE_INIT; 
-
-/* Declare the pthreads key that will be associated with the thread-specific 
-   data for each thread. */
-pthread_key_t starlink_ast_globals_key; 
-
-/* Declare the pthreads key that will be associated with the thread-specific 
-   status value for each thread. */
-pthread_key_t starlink_ast_status_key; 
-
-
-/* Function definitions: */
-/* ===================== */
-
-
-void astGlobalsCreateKey_( void ) {
-/*
-*+
-*  Name:
-*     astGlobalsCreateKey_
-
-*  Purpose:
-*     Create the thread specific data key used for accessing global data.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "globals.h"
-*     astGlobalsCreateKey_()
-
-*  Description:
-*     This function creates the thread-specific data key. It is called 
-*     once only by the pthread_once function, which is invoked via the 
-*     astGET_GLOBALS(this) macro by each AST function that requires access to 
-*     global data.
-
-*  Returned Value:
-*     Zero for success.
-
-*-
-*/
-
-/* Create the key used to access thread-specific global data values.
-   Report an error if it fails. */
-   if( pthread_key_create( &starlink_ast_globals_key, NULL ) ) {
-      fprintf( stderr, "ast: Failed to create Thread-Specific Data key" );
-
-/* If succesful, create the key used to access the thread-specific status
-   value. Report an error if it fails. */
-   } else if( pthread_key_create( &starlink_ast_status_key, NULL ) ) {
-      fprintf( stderr, "ast: Failed to create Thread-Specific Status key" );
-
-   } 
-
-}
-
-AstGlobals *astGlobalsInit_( void ) {
-/*
-*+
-*  Name:
-*     astGlobalsInit
-
-*  Purpose:
-*     Create and initialise a structure holding thread-specific global 
-*     data values.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "globals.h"
-*     AstGlobals *astGlobalsInit;
- 
-*  Description:
-*     This function allocates memory to hold thread-specific global data 
-*     for use throughout AST, and initialises it. 
-
-*  Returned Value:
-*     Pointer to the structure holding global data values for the
-*     currently executing thread.
-
-*-
-*/
-
-/* Local Variables: */
-   AstGlobals *globals;
-   AstStatusBlock *status;
-
-/* Allocate memory to hold the global data values for the currently
-   executing thread. Use malloc rather than astMalloc (the AST memory 
-   module uses global data managed by this module and so using astMalloc 
-   could put us into an infinite loop). */
-   globals = MALLOC( sizeof( AstGlobals ) );
-
-   if ( !globals ){
-      fprintf( stderr, "ast: Failed to allocate memory to hold AST "
-               "global data values" );
-
-/* Initialise the global data values. */
-   } else {
-
-/* Each thread has a unique integer identifier. */
-      pthread_mutex_lock( &nthread_mutex );
-      globals->thread_identifier = nthread++; 
-      pthread_mutex_unlock( &nthread_mutex );
-
-#define INIT(class) astInit##class##Globals_( &(globals->class) );
-      INIT( Error );
-      INIT( Memory );
-      INIT( Object );
-      INIT( Axis );
-      INIT( Mapping );
-      INIT( Frame );
-      INIT( Channel );
-      INIT( CmpMap );         
-      INIT( KeyMap );         
-      INIT( FitsChan );       
-      INIT( CmpFrame );       
-      INIT( DSBSpecFrame );   
-      INIT( FrameSet );       
-      INIT( LutMap );         
-      INIT( MathMap );        
-      INIT( PcdMap );         
-      INIT( PointSet );        
-      INIT( SkyAxis );        
-      INIT( SkyFrame );       
-      INIT( SlaMap );         
-      INIT( SpecFrame );      
-      INIT( SphMap );         
-      INIT( TimeFrame );      
-      INIT( WcsMap );         
-      INIT( ZoomMap );        
-      INIT( FluxFrame );      
-      INIT( SpecFluxFrame );  
-      INIT( GrismMap );       
-      INIT( IntraMap );       
-      INIT( Plot );
-      INIT( Plot3D );
-      INIT( Region );
-      INIT( Xml );
-      INIT( XmlChan );       
-      INIT( Box );
-      INIT( Circle );
-      INIT( CmpRegion );
-      INIT( DssMap );
-      INIT( Ellipse );
-      INIT( Interval );
-      INIT( MatrixMap );
-      INIT( NormMap );
-      INIT( NullRegion );
-      INIT( PermMap );
-      INIT( PointList );
-      INIT( PolyMap );
-      INIT( Polygon );
-      INIT( Prism );
-      INIT( RateMap );
-      INIT( SelectorMap );
-      INIT( ShiftMap );
-      INIT( SpecMap );
-      INIT( Stc );
-      INIT( StcCatalogEntryLocation );
-      INIT( StcObsDataLocation );
-      INIT( SwitchMap );
-      INIT( TimeMap );
-      INIT( TranMap );
-      INIT( UnitMap );
-      INIT( WinMap );
-      INIT( StcResourceProfile );
-      INIT( StcSearchLocation );
-      INIT( StcsChan );        
-#undef INIT
-
-/* Save the pointer as the value of the starlink_ast_globals_key
-   thread-specific data key. */
-      if( pthread_setspecific( starlink_ast_globals_key, globals ) ) { 
-         fprintf( stderr, "ast: Failed to store Thread-Specific Data pointer." ); 
-
-/* We also take this opportunity to allocate and initialise the
-   thread-specific status value. */
-      } else {
-         status = MALLOC( sizeof( AstStatusBlock ) );
-         if( status ) {
-            status->internal_status = 0;
-            status->status_ptr = &( status->internal_status );
-
-/* If succesful, store the pointer to this memory as the value of the
-   status key for the currently executing thread. Report an error if
-   this fails. */
-            if( pthread_setspecific( starlink_ast_status_key, status ) ) { 
-               fprintf( stderr, "ast: Failed to store Thread-Specific Status pointer." ); 
-            }
-
-         } else {
-            fprintf( stderr, "ast: Failed to allocate memory for Thread-Specific Status pointer." ); 
-         } 
-      } 
-   }
-
-/* Return a pointer to the data structure holding the global data values. */
-   return globals;
-}
-
-#endif
-
diff --git a/ast-5.3-1/globals.h b/ast-5.3-1/globals.h
deleted file mode 100644
index 2897b1b..0000000
--- a/ast-5.3-1/globals.h
+++ /dev/null
@@ -1,239 +0,0 @@
-#if !defined( GLOBALS_INCLUDED )   /* Include this file only once */
-#define GLOBALS_INCLUDED 1
-
-/* If thread-safety is required... */
-#if defined( THREAD_SAFE ) && ( defined( astCLASS ) || defined( astFORTRAN77) )
-
-/* Include files: */
-/* ============== */
-
-/* AST includes */
-#include "axis.h"
-#include "box.h"
-#include "channel.h"
-#include "circle.h"
-#include "cmpframe.h"
-#include "cmpmap.h"
-#include "cmpregion.h"
-#include "dsbspecframe.h"
-#include "dssmap.h"
-#include "ellipse.h"
-#include "error.h"
-#include "fitschan.h"
-#include "fluxframe.h"
-#include "frame.h"
-#include "frameset.h"
-#include "grismmap.h"
-#include "interval.h"
-#include "intramap.h"
-#include "keymap.h"
-#include "lutmap.h"
-#include "mapping.h"
-#include "mathmap.h"
-#include "matrixmap.h"
-#include "memory.h"
-#include "normmap.h"
-#include "nullregion.h"
-#include "object.h"
-#include "pcdmap.h"
-#include "permmap.h"
-#include "plot.h"
-#include "plot3d.h"
-#include "pointlist.h"
-#include "pointset.h"
-#include "polygon.h"
-#include "polymap.h"
-#include "prism.h"
-#include "ratemap.h"
-#include "region.h"
-#include "selectormap.h"
-#include "shiftmap.h"
-#include "skyaxis.h"
-#include "skyframe.h"
-#include "slamap.h"
-#include "specfluxframe.h"
-#include "specframe.h"
-#include "specmap.h"
-#include "sphmap.h"
-#include "stc.h"
-#include "stccatalogentrylocation.h"
-#include "stcobsdatalocation.h"
-#include "stcresourceprofile.h"
-#include "stcsearchlocation.h"
-#include "stcschan.h"
-#include "switchmap.h"
-#include "timeframe.h"
-#include "timemap.h"
-#include "tranmap.h"
-#include "unitmap.h"
-#include "wcsmap.h"
-#include "winmap.h"
-#include "xml.h"
-#include "xmlchan.h"
-#include "zoommap.h"
-
-
-
-/* System includes */
-#include <pthread.h>
-
-/* Macros */
-/* ====== */
-
-/* The name of the variable used to access thread-specific global data */
-#define AST__GLOBALS ast_globals
-
-/* Defines a macro that gives access to a specific global data item. */
-#define astGLOBAL(class,name) (AST__GLOBALS->class.name) 
-
-
-/* Declares the pointer for the structure holding thread-specific values
-   for AST global data. */
-#define astDECLARE_GLOBALS AstGlobals *AST__GLOBALS;
-
-
-/* A macro that should be invoked in each function that refers to a
-   global data item. The "This" parameter should be a pointer to an
-   Object, or NULL. It ensures the thread-specific data key has been
-   created. It also allocates and initialises memory to hold the global 
-   data. */
-#define astGET_GLOBALS(This) \
-\
-/* If the supplied Object pointer contains a pointer to the thread-specific \
-   data structure, return it. */ \
-   if( This && ((AstObject *)This)->globals ) { \
-      AST__GLOBALS = ((AstObject *)This)->globals; \
-\
-/* Otherwise, ensure that the thread specific data key has been created. */ \
-   } else if( pthread_once( &starlink_ast_globals_initialised, \
-                            astGlobalsCreateKey_ ) ) { \
-      AST__GLOBALS = NULL; \
-      fprintf( stderr, "Starlink AST package initialisation failed." ); \
-\
-/* If the current thread does not yet have a structure to hold \
-   thread-specific global data, create one now (initialising its \
-   contents) and associate it with the thread speciifc data key. */ \
-   } else if( ( AST__GLOBALS =  \
-                pthread_getspecific( starlink_ast_globals_key ) ) == NULL ) { \
-      AST__GLOBALS = astGlobalsInit_(); \
-      if( pthread_setspecific( starlink_ast_globals_key, AST__GLOBALS ) ) { \
-         fprintf( stderr, "Starlink AST failed to store Thread-Specific " \
-                  "Data pointer." ); \
-      } \
-   } 
-
-
-/* A macro that expands to the value of a unique integer identifier for
-   the calling thread. */
-#define AST__THREAD_ID (AST__GLOBALS->thread_identifier) \
-
-
-#define astMAKE_INITGLOBALS(class) \
-\
-void astInit##class##Globals_( Ast##class##Globals *globals ){ \
-   GLOBAL_inits \
-}
-
-/* Type definitions */
-/* ================ */
-
-typedef struct AstGlobals {
-   int thread_identifier;
-   AstMemoryGlobals Memory;
-   AstErrorGlobals  Error;
-   AstObjectGlobals Object;
-   AstAxisGlobals Axis;
-   AstMappingGlobals Mapping;
-   AstFrameGlobals Frame;
-   AstChannelGlobals Channel;
-   AstCmpMapGlobals CmpMap;         
-   AstKeyMapGlobals KeyMap;         
-   AstFitsChanGlobals FitsChan;       
-   AstCmpFrameGlobals CmpFrame;       
-   AstDSBSpecFrameGlobals DSBSpecFrame;   
-   AstFrameSetGlobals FrameSet;       
-   AstLutMapGlobals LutMap;         
-   AstMathMapGlobals MathMap;        
-   AstPcdMapGlobals PcdMap;         
-   AstPointSetGlobals PointSet;         
-   AstSkyAxisGlobals SkyAxis;        
-   AstSkyFrameGlobals SkyFrame;       
-   AstSlaMapGlobals SlaMap;         
-   AstSpecFrameGlobals SpecFrame;      
-   AstSphMapGlobals SphMap;         
-   AstTimeFrameGlobals TimeFrame;      
-   AstWcsMapGlobals WcsMap;         
-   AstZoomMapGlobals ZoomMap;        
-   AstFluxFrameGlobals FluxFrame;      
-   AstSpecFluxFrameGlobals SpecFluxFrame;  
-   AstGrismMapGlobals GrismMap;       
-   AstIntraMapGlobals IntraMap;       
-   AstPlotGlobals Plot;         
-   AstPlot3DGlobals Plot3D;
-   AstRegionGlobals Region;         
-   AstBoxGlobals Box;
-   AstXmlGlobals Xml;         
-   AstXmlChanGlobals XmlChan;       
-   AstCircleGlobals Circle;                     
-   AstCmpRegionGlobals CmpRegion;                  
-   AstDssMapGlobals DssMap;                     
-   AstEllipseGlobals Ellipse;                    
-   AstIntervalGlobals Interval;                   
-   AstMatrixMapGlobals MatrixMap;                  
-   AstNormMapGlobals NormMap;                    
-   AstNullRegionGlobals NullRegion;                 
-   AstPermMapGlobals PermMap;                    
-   AstPointListGlobals PointList;                  
-   AstPolyMapGlobals PolyMap;                    
-   AstPolygonGlobals Polygon;                    
-   AstPrismGlobals Prism;                      
-   AstRateMapGlobals RateMap;                    
-   AstSelectorMapGlobals SelectorMap;                
-   AstShiftMapGlobals ShiftMap;                   
-   AstSpecMapGlobals SpecMap;                    
-   AstStcGlobals Stc;                        
-   AstStcCatalogEntryLocationGlobals StcCatalogEntryLocation;    
-   AstStcObsDataLocationGlobals StcObsDataLocation;         
-   AstSwitchMapGlobals SwitchMap;                  
-   AstTimeMapGlobals TimeMap;                    
-   AstTranMapGlobals TranMap;                    
-   AstUnitMapGlobals UnitMap;                    
-   AstWinMapGlobals WinMap;                     
-   AstStcResourceProfileGlobals	StcResourceProfile;         
-   AstStcSearchLocationGlobals StcSearchLocation;          
-   AstStcsChanGlobals StcsChan;        
-} AstGlobals;
-
-
-/* Externally declared variables */
-/* ============================= */
-
-
-/* The pthreads key that is associated with the thread-specific data for 
-   each thread. Declared in global.c. */
-extern pthread_key_t starlink_ast_globals_key; 
-
-/* The pthreads key that is associated with the thread-specific status
-   value for each thread. Declared in global.c. */
-extern pthread_key_t starlink_ast_status_key; 
-
-/* This is a flag indicating that the thread-specific data key has not yet  
-   been created. Declared in globals.c. */ 
-extern pthread_once_t starlink_ast_globals_initialised; 
-
-/* Function Prototypes: */
-/* ==================== */
-
-void astGlobalsCreateKey_( void );
-AstGlobals *astGlobalsInit_( void );
-
-
-/* If thread-safety is not required, define some null macros. */
-#else
-
-#define astDECLARE_GLOBALS
-#define astGET_GLOBALS(This) 
-#define astINIT_GLOBALS 
-
-#endif
-#endif
diff --git a/ast-5.3-1/grf.h b/ast-5.3-1/grf.h
deleted file mode 100644
index 978108b..0000000
--- a/ast-5.3-1/grf.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#if !defined( GRF_INCLUDED ) /* Include this file only once */
-#define GRF_INCLUDED
-/*
-*+
-*  Name:
-*     grf.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the grf module
-
-*  Invocation:
-*     #include "grf.h"
-
-*  Description:
-*     This include file defines the interface to the grf module and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this module.
-
-*  Inheritance:
-*     The grf module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     27-JUN-1996 (DSB):
-*        Original version.
-*     25-OCT-1996 (DSB):
-*        Primatives macros defined, extra parameter added to astGAttr.
-*     17-FEB-2006 (DSB):
-*        Added GRF__ESH and GRF__ESG.
-*-
-*/
-
-/* Constant Values. */
-/* ================ */
-/* Values identifying different graphics attributes. */
-#define GRF__STYLE  0
-#define GRF__WIDTH  1
-#define GRF__SIZE   2
-#define GRF__FONT   3
-#define GRF__COLOUR 4
-
-/* Values identifying different graphics primatives. */
-#define GRF__TEXT 0
-#define GRF__LINE 1
-#define GRF__MARK 2
-
-/* The number of different graphics attributes */
-#define GRF__NATTR 5
-
-/* Values identifying capabilities */
-#define GRF__ESC     0
-#define GRF__MJUST   1
-#define GRF__SCALES  2
-
-/* Values identifying types of graphics escape sequence */
-#define GRF__ESPER 1
-#define GRF__ESSUP 2
-#define GRF__ESSUB 3
-#define GRF__ESGAP 4
-#define GRF__ESBAC 5
-#define GRF__ESSIZ 6
-#define GRF__ESWID 7
-#define GRF__ESFON 8
-#define GRF__ESCOL 9
-#define GRF__ESSTY 10
-#define GRF__ESPOP 11
-#define GRF__ESPSH 12
-#define GRF__ESH   13
-#define GRF__ESG   14
-
-/* Function prototypes. */
-/* ==================== */
-int astGAttr( int, double, double *, int );
-int astGScales( float *, float * );
-int astGFlush( void );
-int astGLine( int, const float *, const float * );
-int astGMark( int, const float *, const float *, int );
-int astGQch( float *, float * );
-int astGText( const char *, float, float, const char *, float, float );
-int astGTxExt( const char *, float, float, const char *, float, float, float *, float * );
-int astGCap( int, int );
-
-#endif
diff --git a/ast-5.3-1/grf3d.c b/ast-5.3-1/grf3d.c
deleted file mode 100644
index e9a7650..0000000
--- a/ast-5.3-1/grf3d.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-*  Name:
-*     grf3d.c
-
-*  Purpose:
-*     Implement the grf3D interface if no graphics system is available.
-
-*  Description:
-*     This file implements the low level 3D graphics functions required
-*     by the rest of AST. These implementations simply report an error
-*     when called.
-
-*  Inheritance:
-*     This module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (JACH - UCLan)
-
-*  History:
-*     20-JUN-2007 (DSB):
-*        Original version.
-*/
-
-/* Header files */
-/* ============ */
-#include "grf3d.h"         /* Declare the functions in this module */
-#include "error.h"         /* AST error reporting facilities */
-#include "ast_err.h"       /* AST error codes */
-
-/* Function Prototypes */
-/* =================== */
-static void Report( const char * );
-
-/* Function definitions */
-/* ==================== */
-int astG3DCap( int cap, int value ){
-   return 0;
-}               
-
-int astG3DFlush( void ){
-   Report( "astG3DFlush");
-   return 0;
-}
-
-int astG3DLine( int n, float *x, float *y, float *z  ){
-   Report( "astG3DLine" );
-   return 0;
-}
-
-int astG3DQch( float *ch ){
-   Report( "astG3DQch" );
-   return 0;
-}
-
-int astG3DMark( int n, float *x, float *y, float *z, int type, float norm[3] ){
-   Report( "astG3DMark" );
-   return 0;
-}
-
-int astG3DText( const char *text, float ref[3], const char *just,
-                float up[3], float norm[3] ){
-   Report( "astG3DText" );
-   return 0;
-}               
-
-int astG3DTxExt( const char *text, float ref[3], const char *just, 
-                 float up[3], float norm[3], float *xb, float *yb, 
-                 float *zb, float bl[3] ){
-   Report( "astG3DTxExt" );
-   return 0;
-}               
-
-int astG3DAttr( int attr, double value, double *old_value, int prim ){
-   Report( "astG3DAttr" );
-   return 0;
-}
-
-static void Report( const char *name ){
-   astError( AST__GRFER, "%s: No graphics facilities are available.", name );
-   astError( AST__GRFER, "Re-link using an option such as '-pgplot' with "
-             "the ast_link script." );
-}
diff --git a/ast-5.3-1/grf3d.h b/ast-5.3-1/grf3d.h
deleted file mode 100644
index f9e2495..0000000
--- a/ast-5.3-1/grf3d.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#if !defined( GRF3D_INCLUDED ) /* Include this file only once */
-#define GRF3D_INCLUDED
-/*
-*+
-*  Name:
-*     grf3d.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the grf3d module
-
-*  Invocation:
-*     #include "grf3d.h"
-
-*  Description:
-*     This include file defines the interface to the grf3d module and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this module.
-
-*  Inheritance:
-*     The grf3d module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (JACH - UCLan)
-
-*  History:
-*     20-JUN-2007 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include the 2D grf header file in order to inherit the GRF__ macros. */
-#include "grf.h"
-
-/* Function prototypes. */
-/* ==================== */
-int astG3DAttr( int, double, double *, int );
-int astG3DCap( int, int );
-int astG3DFlush( void );
-int astG3DLine( int, float *, float *, float * );
-int astG3DMark( int, float *, float *, float *, int, float[3] );
-int astG3DQch( float * );
-int astG3DText( const char *, float[3], const char *, float[3], float[3] );
-int astG3DTxExt( const char *, float[3], const char *, float[3], float[3], float *, float *, float *, float[3] );
-
-
-#endif
diff --git a/ast-5.3-1/grf3d_pgplot.c b/ast-5.3-1/grf3d_pgplot.c
deleted file mode 100644
index 8057b50..0000000
--- a/ast-5.3-1/grf3d_pgplot.c
+++ /dev/null
@@ -1,3196 +0,0 @@
-/*
-*  Name:
-*     grf3d_pgplot.c
-
-*  Purpose:
-*     Implement the grf3d interface using the PGPLOT graphics system.
-
-*  Description:
-*     This file implements the low level 3D graphics functions required
-*     by the rest of AST, by calling suitable PGPLOT functions (the
-*     FORTRAN PGPLOT interface is used).
-*
-*     This file can be used as a template for the development of
-*     similar implementations based on other graphics systems.
-*
-*     Unlike world coordinates used by the 2D grf interface, the 3D world 
-*     coordinates used by the grf3D interface are assume to be equally scaled 
-*     (that is, they are assumed to have the same units). Therefore this
-*     module has no equivalent to the astGScales function defined by the
-*     2D grf interface.
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     20-JUN-2007 (DSB):
-*        Original version.
-*/
-
-
-/* Macros */
-/* ====== */
-#define MXDEV 16                 /* Max no of concurrent PGPLOT devices */
-#define MXSTRLEN 80              /* Max PGPLOT string length */
-#define CAMERA_OK 123456789      /* Flags that a Camera has been initialised */
-#define TWOPI 6.28318530718      /* 2*PI */
-#define MXSIDE 32                /* Max no of sides in a marker polygon */
-
-
-/* Header files. */
-/* ============= */
-/* AST header files */
-#include "grf3d.h"               /* The grf3D interface definition */
-#include "pg3d.h"                /* Other public functions in this module */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* C to FORTRAN interface functions */
-#include "memory.h"              /* Memory allocation facilities */
-#include "error.h"               /* Error reporting facilities */
-#include "pointset.h"            /* Defines AST__BAD */
-#include "ast_err.h"             /* AST error codes */
-
-/* System header files */
-#include <string.h>
-#include <math.h>
-#include <float.h>
-#include <limits.h>
-#include <stdio.h>
-
-
-/* Type definitions. */
-/* ================= */
-/* Structure defining the position and orientation of the camera in 3D
-   world coords. This is specific to the PGPLOT implementation. Other
-   implementations need not include any equivalent to this structure. */
-typedef struct camera {
-   float eye_vector[3];
-   float target_vector[3];
-   float up_vector[3];
-   float w2c_matrix[9];
-   float screen_distance;   
-   int ok_flag;
-} Camera;
-
-
-/* Module variables. */
-/* ================= */
-/* One camera structure for each PGPLOT device identifier. PGPLOT allows
-   a maximum of 8 concurrent devices at the moment. Make the array twice
-   this size to allow for some future expansion in PGPLOT. Again, this is
-   specific to the PGPLOT implementation of the grf3D interface. */
-static Camera cameras[ MXDEV ];
-
-/* Function templates. */
-/* =================== */
-/* Templates for functions that are private to this module. */
-static Camera *getCamera( int );
-static float getCharHeight( void );
-static int Polygon( int, float *, float *, float *, float[3], float[3], float[3], float[3] );
-static int Text( int *, int, float[3], const char *, float[3], float[3], float[3]  );
-static int TextCam( Camera *, float[3], float[3], float[3], float[3] );
-static int TxExt( int *, int, float[3], const char *, float[3], float[3], float[3], float *, float *, float *, float[3] );
-static int getTextAxes( float[3], float[3], float[3], const char *, float[3], float[3], float[3], char[3] );
-static int transform( Camera *, int, float *, float *, float *, float *, float * );
-static int vectorNorm( float * );
-static float vectorModulus( float * );
-static void getSymbolList( const char *, int, int *, int * );
-static void vectorProduct( float *, float *, float * );
-static float dotProduct( float *, float * );
-static void vectorSub( float *, float *, float * );
-
-/* Templates for private functions that wrap PGPLOT Fortran routines. */
-static void ccgrsyds( int *, int *, const char *, int, int );
-static void ccgrsymk( int, int, int * );
-static void ccgrsyxd( int, int *, int * );
-static void ccpgline( int, float[], float[] );
-static void ccpgpoly( int, float[], float[] );
-static void ccpgqcf( int * );
-static void ccpgqcf(int *);
-static void ccpgqch( float * );
-static void ccpgqci( int * );
-static void ccpgqclp( int * );
-static void ccpgqid( int * );
-static void ccpgqls( int * );
-static void ccpgqlw( int * );
-static void ccpgqvsz( int, float *, float *, float *, float * );
-static void ccpgqwin( float *, float *, float *, float * );
-static void ccpgscf( int );
-static void ccpgsch( float );
-static void ccpgsci( int );
-static void ccpgsclp( int );
-static void ccpgsls( int );
-static void ccpgslw( int );
-static void ccpgswin( float, float, float, float );
-static void ccpgupdt( void );
-
-
-/* Templates for Fortran PGPLOT routines needed by this module. */
-F77_SUBROUTINE(grsyds)( INTEGER_ARRAY(list), INTEGER(nlist), CHARACTER(text), INTEGER(font) TRAIL(text) );
-F77_SUBROUTINE(grsymk)( INTEGER(type), INTEGER(font), INTEGER(symbol) );
-F77_SUBROUTINE(grsyxd)( INTEGER(symbol), INTEGER_ARRAY(xygrid), INTEGER(unused) );
-F77_SUBROUTINE(pgline)( INTEGER(N), REAL_ARRAY(X), REAL_ARRAY(Y) );
-F77_SUBROUTINE(pgpoly)( INTEGER(N), REAL_ARRAY(X), REAL_ARRAY(Y) );
-F77_SUBROUTINE(pgqcf)( INTEGER(ival) );
-F77_SUBROUTINE(pgqch)( REAL(rval) );
-F77_SUBROUTINE(pgqci)( INTEGER(ival) );
-F77_SUBROUTINE(pgqclp)( INTEGER(clip) );
-F77_SUBROUTINE(pgqid)( INTEGER(id) );
-F77_SUBROUTINE(pgqls)( INTEGER(ival) );
-F77_SUBROUTINE(pgqlw)( INTEGER(ival) );
-F77_SUBROUTINE(pgqvsz)( INTEGER(units), REAL(x1), REAL(x2), REAL(y1), REAL(y2) );
-F77_SUBROUTINE(pgqwin)( REAL(wx1), REAL(wx2), REAL(wy1), REAL(wy2) );
-F77_SUBROUTINE(pgscf)( INTEGER(ival) );
-F77_SUBROUTINE(pgsch)( REAL(rval) );
-F77_SUBROUTINE(pgsci)( INTEGER(ival) );
-F77_SUBROUTINE(pgsclp)( INTEGER(clip) );
-F77_SUBROUTINE(pgsls)( INTEGER(ival) );
-F77_SUBROUTINE(pgslw)( INTEGER(ival) );
-F77_SUBROUTINE(pgswin)( REAL(X1), REAL(X2), REAL(Y1), REAL(Y2) );
-F77_SUBROUTINE(pgupdt)( void );
-
-
-/* Public functions defined by the grf3D interface. */
-/* ================================================ */
-/* All implementations of the grf3d interface must provide implementations
-   of all the functions in this block. The corresponding templates are in
-   grf3d.h */
-
-
-int astG3DAttr( int attr, double value, double *old_value, int prim ){
-/*
-*+
-*  Name:
-*     astG3DAttr
-
-*  Purpose:
-*     Enquire or set a 3D graphics attribute value.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int int astG3DAttr( int attr, double value, double *old_value, int prim )
-
-*  Description:
-*     This function returns the current value of a specified 3D graphics
-*     attribute, and optionally establishes a new value. The supplied
-*     value is converted to an integer value if necessary before use.
-
-*  Parameters:
-*     attr
-*        An integer value identifying the required attribute. The
-*        following symbolic values are defined in grf3d.h:
-*
-*           GRF__STYLE  - Line style.
-*           GRF__WIDTH  - Line width.
-*           GRF__SIZE   - Character and marker size scale factor.
-*           GRF__FONT   - Character font.
-*           GRF__COLOUR - Colour index.
-*     value 
-*        A new value to store for the attribute. If this is AST__BAD
-*        no value is stored.
-*     old_value 
-*        A pointer to a double in which to return the attribute value.
-*        If this is NULL, no value is returned.
-*     prim
-*        The sort of graphics primitive to be drawn with the new attribute.
-*        Identified by the following values defined in grf.h:
-*           GRF__LINE
-*           GRF__MARK
-*           GRF__TEXT
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-
-*-
-*/
-
-   int ival;
-   float rval, dx, dy, deflw, x1, x2, y1, y2;
-
-/* If required retrieve the current line style, and set a new line style. */
-   if( attr == GRF__STYLE ){
-      ccpgqls( &ival );
-      if( old_value ) *old_value = (double) ival;
-
-      if( value != AST__BAD ){
-         ival = (int) ( value + 0.5 );
-         if( value < 0.0 ) ival -= 1;
-
-         ival = ( ival - 1 ) % 5;
-         ival += ( ival < 0 ) ? 6 : 1;
-
-         ccpgsls( ival );
-      }
-
-/* If required retrieve the current line width, and set a new line width. 
-   Line width is stored in Plot as a scale factor (1.0 for the default line
-   width which is a fixed fraction of the diagonal of the view surface), but 
-   pgplot stores it in units of 0.005 of an inch. */
-   } else if( attr == GRF__WIDTH ){
-
-/* Get the bounds of the view surface in inches. */
-      ccpgqvsz( 1, &x1, &x2, &y1, &y2 );
-
-/* Find the default line width in inches (i.e. 0.0005 of the length
-   of the view surface diagonal). */
-      dx = ( x1 - x2 );
-      dy = ( y1 - y2 );
-      deflw = 0.0005*sqrt( (double )( dx*dx + dy*dy ) );
-
-/* Get the current pgplot line width in units of 0.005 of an inch. */
-      ccpgqlw( &ival );
-
-/* If required, return the factor by which this exceeds the default line
-   width found above. */
-      if( old_value ) *old_value = (double)( ival )/( 200.0 * deflw );
-
-/* If a new line width has been provided, the pgplot line width needs to
-   be set to the corresponding absolute value. */
-      if( value != AST__BAD ){
-         ival = (int) ( 200.0*value*deflw );
-         if( ival < 1 ) {
-            ival = 1;
-         } else if( ival > 201 ){
-            ival = 201;
-         } 
-         ccpgslw( ival );
-      }
-
-/* If required retrieve the current character size, and set a new size. 
-   The attribute value should be a factor by which to multiply the
-   default character size. */
-   } else if( attr == GRF__SIZE ){
-      ccpgqch( &rval );
-      if( old_value ) *old_value = (double) rval;
-
-      if( value != AST__BAD ){
-         ccpgsch( (float) value );
-      }
-
-/* If required retrieve the current character font, and set a new font. */
-   } else if( attr == GRF__FONT ){
-      ccpgqcf( &ival );
-      if( old_value ) *old_value = (double) ival;
-
-      if( value != AST__BAD ){
-         ival = (int) ( value + 0.5 );
-         if( value < 0.0 ) ival -= 1;
-
-         ival = ( ival - 1 ) % 4;
-         ival += ( ival < 0 ) ? 5 : 1;
-         ccpgscf( ival );
-      }
-
-/* If required retrieve the current colour index, and set a new colour
-   index. */
-   } else if( attr == GRF__COLOUR ){
-      ccpgqci( &ival );
-      if( old_value ) *old_value = (double) ival;
-
-      if( value != AST__BAD ){
-         ival = (int) ( value + 0.5 );
-         if( ival < 0 ) ival = 1;
-         ccpgsci( ival );
-      }
-
-/* Give an error message for any other attribute value. */
-   } else {     
-      astError( AST__GRFER, "astG3DAttr: Unknown graphics attribute '%d' "
-                "requested.", attr );
-      return 0;
-   }
-
-/* Return. */
-   return 1;
-}
-
-int astG3DCap( int cap, int value ){
-/*
-*+
-*  Name:
-*     astG3DCap
-
-*  Purpose:
-*     Indicate if this grf3d module has a given capability.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int astG3DCap( int cap, int value )
-
-*  Description:
-*     This function is called by the AST Plot class to determine if the
-*     grf3d module has a given capability, as indicated by the "cap"
-*     argument.
-
-*  Parameters:
-*     cap
-*        The capability being inquired about. This will be one of the
-*        following constants defined in grf3d.h:
-*
-*        GRF3D__ESC: This function should return a non-zero value if the
-*        astG3DText and astG3DTxExt functions can recognise and interpret
-*        graphics escape sequences within the supplied string. These
-*        escape sequences are described below. Zero should be returned 
-*        if escape sequences cannot be interpreted (in which case the
-*        Plot class will interpret them itself if needed). The supplied
-*        "value" argument should be ignored only if escape sequences cannot 
-*        be interpreted by astG3DText and astG3DTxExt. Otherwise, "value"
-*        indicates whether astG3DText and astG3DTxExt should interpret escape
-*        sequences in subsequent calls. If "value" is non-zero then
-*        escape sequences should be interpreted by astG3DText and
-*        astG3DTxExt. Otherwise, they should be drawn as literal text.
-
-*  Returned Value:
-*     The return value, as described above. Zero should be returned if
-*     the supplied capability is not recognised.
-
-*  Escape Sequences:
-*     Escape sequences are introduced into the text string by a percent 
-*     "%" character. The following escape sequences are currently recognised 
-*     ("..." represents a string of one or more decimal digits):
-*
-*       %%      - Print a literal "%" character (type GRF__ESPER ).
-*
-*       %^...+  - Draw subsequent characters as super-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the super-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF__ESSUP ).
-*       %^+     - Draw subsequent characters with the normal base-line.
-*
-*       %v...+  - Draw subsequent characters as sub-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the sub-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF__ESSUB ).
-*
-*       %v+     - Draw subsequent characters with the normal base-line
-*                 (equivalent to %^+).
-*
-*       %>...+  - Leave a gap before drawing subsequent characters.
-*                 The digits "..." give the size of the gap, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF__ESGAP ).
-*
-*       %<...+  - Move backwards before drawing subsequent characters.
-*                 The digits "..." give the size of the movement, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF_ESBAC).
-*
-*       %s...+  - Change the Size attribute for subsequent characters. The
-*                 digits "..." give the new Size as a fraction of the 
-*                 "normal" Size, scaled so that a value of "100" corresponds 
-*                 to 1.0  (type GRF__ESSIZ ).
-*
-*       %s+     - Reset the Size attribute to its "normal" value.
-*
-*       %w...+  - Change the Width attribute for subsequent characters. The
-*                 digits "..." give the new width as a fraction of the 
-*                 "normal" Width, scaled so that a value of "100" corresponds 
-*                 to 1.0  (type GRF__ESWID ).
-*
-*       %w+     - Reset the Size attribute to its "normal" value.
-*
-*       %f...+  - Change the Font attribute for subsequent characters. The
-*                 digits "..." give the new Font value  (type GRF__ESFON ).
-*
-*       %f+     - Reset the Font attribute to its "normal" value.
-*
-*       %c...+  - Change the Colour attribute for subsequent characters. The
-*                 digits "..." give the new Colour value  (type GRF__ESCOL ).
-*
-*       %c+     - Reset the Colour attribute to its "normal" value.
-*
-*       %t...+  - Change the Style attribute for subsequent characters. The
-*                 digits "..." give the new Style value  (type GRF__ESSTY ). 
-*
-*       %t+     - Reset the Style attribute to its "normal" value.
-*
-*       %-      - Push the current graphics attribute values onto the top of 
-*                 the stack - see "%+" (type GRF__ESPSH).
-*
-*       %+      - Pop attributes values of the top the stack - see "%-". If
-*                 the stack is empty, "normal" attribute values are restored
-*                 (type GRF__ESPOP).
-*     
-*     The astFindEscape function (in libast.a) can be used to locate escape 
-*     sequences within a text string. It has the following signature:
-*
-*     #include "plot.h"
-*     int astFindEscape( const char *text, int *type, int *value, int *nc )
-*
-*     Parameters:
-*        text
-*           Pointer to the string to be checked.
-*        type
-*           Pointer to a location at which to return the type of escape
-*           sequence. Each type is identified by a symbolic constant defined
-*           in grf.h and is indicated in the above section. The returned value 
-*           is undefined if the supplied text does not begin with an escape 
-*           sequence.
-*        value
-*           Pointer to a lcation at which to return the integer value
-*           associated with the escape sequence. All usable values will be
-*           positive. Zero is returned if the escape sequence has no associated
-*           integer. A value of -1 indicates that the attribute identified by 
-*           "type" should be reset to its "normal" value (as established using 
-*           the astG3DAttr function, etc). The returned value is undefined if 
-*           the supplied text does not begin with an escape sequence.
-*        nc
-*           Pointer to a location at which to return the number of
-*           characters read by this call. If the text starts with an escape
-*           sequence, the returned value will be the number of characters in
-*           the escape sequence. Otherwise, the returned value will be the
-*           number of characters prior to the first escape sequence, or the 
-*           length of the supplied text if no escape sequence is found.
-      
-*     Returned Value:
-*        A non-zero value is returned if the supplied text starts with a
-*        graphics escape sequence, and zero is returned otherwise.
-
-*-
-*/
-
-   return 0;
-}
-
-int astG3DFlush( void ){
-/*
-*+
-*  Name:
-*     astG3DFlush
-
-*  Purpose:
-*     Flush all pending graphics to the output device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int astG3DFlush( void )
-
-*  Description:
-*     This function ensures that the display device is up-to-date,
-*     by flushing any pending graphics to the output device.
-
-*  Parameters:
-*     None.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*-
-*/
-
-   ccpgupdt();
-   return 1;
-}
-
-int astG3DLine( int n, float *x, float *y, float *z ){
-/*
-*+
-*  Name:
-*     astG3DLine
-
-*  Purpose:
-*     Draw a polyline (i.e. a set of connected lines).
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int astG3DLine( int n, float *x, float *y, float *z )
-
-*  Description:
-*     This function displays lines joining the given positions.
-
-*  Parameters:
-*     n
-*        The number of positions to be joined together.
-*     x 
-*        A pointer to an array holding the "n" x values. 
-*     y 
-*        A pointer to an array holding the "n" y values. 
-*     z 
-*        A pointer to an array holding the "n" z values. 
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - A camera must have been established prior to calling this
-*     function using either astG3DSetCamera or astG3DAutoCamera.
-*     -  Nothing is done if "n" is less than 2, or if a NULL pointer is
-*     given for either "x", "y" or "z".
-
-*-
-*/
-
-/* Local Variables: */
-   int clip;
-   int result = 0;
-   float *h, *r;
-
-/* Do nothing if we have less than 2 points, but do not indicate an error. */
-   if( n < 2 ){
-      result = 1;
-
-/* Check the pointers. */
-   } else if( x && y && z ) {
-
-/* Save the current clipping flag, and ensure clipping is off. */
-      ccpgqclp( &clip );
-      ccpgsclp( 0 );
-
-/* Allocate work space for the 2D world coordinate positions. */
-      h = astMalloc( sizeof( float )*(size_t) n );
-      r = astMalloc( sizeof( float )*(size_t) n );
-      if( astOK ) {
-
-/* Convert the supplied points from 3D world coordinates to 2D world
-   (i.e. screen) coordinates. If succesful, plot the lines. */
-         if( transform( NULL, n, x, y, z, h, r ) ) {
-            ccpgline( n, (float *) h, (float *) r );
-            result = 1;
-         }
-      }
-
-/* Free work space. */
-      h = astFree( h );
-      r = astFree( r );
-
-/* Re-instate original clipping flag. */
-      ccpgsclp( clip );
-
-   }
-   return result;
-}
-
-int astG3DMark( int n, float *x, float *y, float *z, int type,  
-                float norm[3] ){
-/*
-*+
-*  Name:
-*     astG3DMark
-
-*  Purpose:
-*     Draw a set of markers.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astG3DMark( int n, float *x, float *y, float *z, int type,
-*                     float norm[3] )
-
-*  Description:
-*     This function draws markers centred at the given positions, on a
-*     plane with a specified normal vector.
-
-*  Parameters:
-*     n
-*        The number of markers to draw.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-*     z 
-*        A pointer to an array holding the "n" z values.
-*     type
-*        An integer which can be used to indicate the type of marker symbol
-*        required. See the description of routine PGPT in the PGPLOT manual.
-*     norm
-*        The (x,y,z) components of a vector that is normal to the plane
-*        containing the marker. The given vector passes through the marker
-*        from the back to the front. If all components of this vector are
-*        zero, then a normal vector pointing from the position of the
-*        first marker towards the camera eye is used.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  Nothing is done if "n" is less than 1, or if a NULL pointer is
-*     given for "x", "y" or "z".
-
-*-
-*/
-
-/* local Variables: */
-   char just[3];
-   float ref[3];
-   float up[3];
-   float tx[3], ty[3], tz[3];
-   float vx[ MXSIDE ], vy[ MXSIDE ], vz[ MXSIDE ];
-   float ch, ang, dang;
-   int clip;
-   int font;
-   int i;
-   int nlist;
-   int symnum;
-   int ns;
-
-/* Return if any of the coordinate pointers is NULL. */
-   if( !x || !y || !z ) return 1;
-
-/* Initialise */
-   ns = 0;
-
-/* Unless the "norm" vector is parallel to the z axis, we use an up vector 
-   that is parallel to the z axis. Otherwise we use an up vector paralle
-   to the x axis. */
-   if( norm[ 0 ] != 0.0 || norm[ 1 ] != 0.0 ) {
-      up[ 0 ] = 0.0;      
-      up[ 1 ] = 0.0;      
-      up[ 2 ] = 1.0;      
-   } else {
-      up[ 0 ] = 1.0;      
-      up[ 1 ] = 0.0;      
-      up[ 2 ] = 0.0;      
-   }
-
-/* Create unit vectors along the three axes of the text plane 
-   coordinate system. */
-   ref[ 0 ] = x[ 0 ];
-   ref[ 1 ] = y[ 0 ];
-   ref[ 2 ] = z[ 0 ];
-   if( !getTextAxes( ref, up, norm, "CC", tx, ty, tz, just ) ) return 0;
-
-/* Calculate the pgplot symbol number for the given marker type. */
-   if( type > 0 ) {
-      if( type > 127 ) {
-         symnum = type;
-      } else {
-         ccpgqcf( &font );
-         ccgrsymk( type, font, &symnum );
-      }
-
-   } else if( type > -3 ) {
-      getSymbolList( ".", 1, &symnum, &nlist );
-
-/* Regular polygons - create an array of text plane coordinates for the
-   vertices of the polygon. */
-   } else {
-      symnum = type;
-
-/* Get the character height in world coordinate units. A PGPLOT
-   character height of 1.0 corresponds to 1/40 of the 2D window height. */
-      ch = getCharHeight();
-
-/* Limit the number of sides that can be produced. */
-      ns = -type;
-      if( ns > MXSIDE ) ns = MXSIDE;
-
-/* Calculate the angle subtended by each edge of the polygon. */
-      dang = TWOPI/ns;
-      ang = 0.0;
-
-/* Loop round each vertex. */
-      for( i = 0; i < ns; i++ ) {
-         vx[ i ] = ch*sin( ang );
-         vy[ i ] = ch*cos( ang );
-         vz[ i ] = 0.0;
-         ang += dang;
-      }
-   }
-
-/* Save the current clipping flag, and ensure clipping is off. */
-   ccpgqclp( &clip );
-   ccpgsclp( 0 );
-
-/* Draw each marker in turn. */   
-   for( i = 0; i < n; i++ ) {
-
-/* Store the centre world coords */
-      ref[ 0 ] = x[ i ];
-      ref[ 1 ] = y[ i ];
-      ref[ 2 ] = z[ i ];
-
-/* Draw the symbol, and return if anything goes wrong. */
-      if( symnum >= 0 ) {
-         if( !Text( &symnum, 1, ref, "CC", tx, ty, tz ) ) return 0;
-
-      } else {
-         if( !Polygon( ns, vx, vy, vz, ref, tx, ty, tz ) ) return 0;
-
-      }
-
-   }
-
-/* Re-instate original clipping flag. */
-   ccpgsclp( clip );
-
-/* If we arrive here we have been succesful, so return a non-zero value. */
-   return 1;
-}
-
-int astG3DQch( float *ch ){
-/*
-*+
-*  Name:
-*     astG3DQch
-
-*  Purpose:
-*     Return the character height in world coordinates.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int astG3DQch( float *ch )
-
-*  Description:
-*     This function returns the height of characters drawn using astG3DText.
-
-*  Parameters:
-*     ch
-*        A pointer to the double which is to receive the height of
-*        characters drawn with astG3DText.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Since the 3D world coordinate axes are assumed to be equally
-*     scaled, the height of text in world coordinate units is independent 
-*     of the orientation of the text. Therefore, this function returns
-*     only one height value, unlike the equivalent 2D astGQch function
-*     that returns two heights.
-*-
-*/
-   *ch = getCharHeight();
-   return 1;
-}               
-
-int astG3DText( const char *text, float ref[3], const char *just, float up[3], 
-                float norm[3]  ){
-/*
-*+
-*  Name:
-*     astG3DText
-
-*  Purpose:
-*     Draw a character string.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int astG3DText( const char *text, float ref[3], const char *just, 
-*                     float up[3], float norm[3] )
-
-*  Description:
-*     This function displays a character string at a given position
-*     on a given plane in 3D world coords, using a specified 
-*     justification and up-vector.
-
-*  Parameters:
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     ref
-*        The reference (x,y,z) coordinates.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     up
-*        The (x,y,z) up-vector for the text. The actual up vector used is
-*        the projection of the supplied vector onto the plane specified by 
-*        "norm".
-*     norm
-*        The (x,y,z) components of a vector that is normal to the plane
-*        containing the text. The given vector passes through the text
-*        from the back to the front. If all components of this vector are
-*        zero, then a normal vector pointing towards the camera eye is used.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  This routine does not recognise PGPLOT escape sequences.
-*     -  A NULL value for "just" causes a value of "CC" to be used.
-*-
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
-   char newjust[3];
-   float tx[3], ty[3], tz[3];
-   int list[ MXLEN ];
-   int nlist;
-
-/* Convert the supplied string into a list of PGPLOT symbol numbers */
-   getSymbolList( text, MXLEN, &nlist, list );
-
-/* Create unit vectors along the three axes of the text plane 
-   coordinate system. */
-   if( !getTextAxes( ref, up, norm, just, tx, ty, tz, newjust ) ) return 0;
-
-/* Draw the text. */
-   return Text( list, nlist, ref, newjust, tx, ty, tz );
-
-/* Clear local constants. */
-#undef MXLEN 
-}
-
-int astG3DTxExt( const char *text, float ref[3], const char *just, 
-                 float up[3], float norm[3], float *xb, float *yb, 
-                 float *zb, float bl[3] ){
-/*
-*+
-*  Name:
-*     astG3DTxExt
-
-*  Purpose:
-*     Get the extent of a character string.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int astG3DTxExt( const char *text, float ref[3], const char *just, 
-*                      float up[3], float norm[3], float *xb, float *yb,
-*                      float *zb, float bl[3] )
-
-*  Description:
-*     This function returns the corners of a box which would enclose the 
-*     supplied character string if it were displayed using astG3DText.
-*
-*     The returned box INCLUDES any leading or trailing spaces.
-
-*  Parameters:
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     ref
-*        The reference (x,y,z) coordinates.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", 'B' for "baseline", or "M" for "bottom", and
-*        specifies the vertical location of the reference position. Note, 
-*        "baseline" corresponds to the base-line of normal text. Some 
-*        characters (eg "y", "g", "p", etc) descend below the base-line,
-*        and so "M" and "B" will produce different effects for such
-*        characters. The second character may be 'L' for "left", 'C' for 
-*        "centre", or 'R' for "right", and specifies the horizontal 
-*        location of the reference position. If the string has less than 
-*        2 characters then 'C' is used for the missing characters. 
-*     up
-*        The (x,y,z) up-vector for the text. The actual up vector used is
-*        the projection of the supplied vector onto the plane specified by 
-*        "norm".
-*     norm
-*        The (x,y,z) components of a vector that is normal to the plane
-*        containing the text. The given vector passes through the text
-*        from the back to the front. If all components of this vector are
-*        zero, then a normal vector pointing towards the camera eye is used.
-*     xb
-*        An array of 4 elements in which to return the x coordinate of
-*        each corner of the bounding box.
-*     yb
-*        An array of 4 elements in which to return the y coordinate of
-*        each corner of the bounding box.
-*     zb
-*        An array of 4 elements in which to return the z coordinate of
-*        each corner of the bounding box.
-*     bl
-*        The 3D world coordinates at the left hand end of the text
-*        baseline.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  The order of the corners is anti-clockwise starting at the 
-*        bottom left when viewing the text normally (i.e. face on).
-*     -  This routine does not recognise PGPLOT escape sequences.
-*     -  A NULL value for "just" causes a value of "CC" to be used.
-*-
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
-   char newjust[3];
-   int i;
-   int list[ MXLEN ];
-   int nlist;
-   float tx[3], ty[3], tz[3];
-
-/* Initialise the returned values to indicate no box available. */
-   for( i = 0; i < 4; i++ ){
-      xb[ i ] = 0.0;
-      yb[ i ] = 0.0;
-      zb[ i ] = 0.0;
-   }
-
-/* Convert the supplied string into a list of symbol numbers */
-   getSymbolList( text, MXLEN, &nlist, list );
-
-/* Create unit vectors along the three axes of the text plane 
-   coordinate system. */
-   if( !getTextAxes( ref, up, norm, just, tx, ty, tz, newjust ) ) return 0;
-
-/* Find the bounding box of this list of symbols. */
-   return TxExt( list, nlist, ref, newjust, tx, ty, tz, xb, yb, zb, bl );
-
-/* Clear local constants. */
-#undef MXLEN 
-}
-
-
-/* Public functions specific to this PGPLOT implementation. */
-/* ======================================================== */
-/* Other implementations of the grf3d interface can ignore the following
-   functions. They provide control of the 3D view. */
-
-int PG3DSetCamera( float eye[3], float target[3], float up[3], float screen ){
-/*
-*+
-*  Name:
-*     PG3DSetCamera
-
-*  Purpose:
-*     Store new camera settings for the current PGPLOT device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DSetCamera( float eye[3], float target[3], float up[3], 
-*                        float screen )
-
-*  Description:
-*     This function stores new camera settings for the current PGPLOT
-*     device.
-*
-*     A "camera" describes the projection of the 3D world coordinate
-*     space onto a 2D "screen". This screen corresponds to the 2D viewing
-*     surface used by PGPLOT. The 2D window used by PGPLOT (as set by
-*     PGSWIN, etc) defines the bounds of the screen area that is visible 
-*     in the PGPLOT viewport.
-*
-*     The 3D world coordinate axes (x,y,z) are such that if "z" is
-*     vertically upwards and "x" points to the right, then "y" goes
-*     out of the paper away from you. All 3 axes are assume to have equal
-*     scale.
-*
-*     A camera defines a second set of 3D axes (called "(u,v,w)") with 
-*     origin at the 3D world coordinates given by "eye":
-*
-*     -  the "w" axis points towards the position given by "target"
-*     -  the "v" axis is perpendicular to the "w" axis and is in the plane 
-*        spanned by the "w" axis and the supplied "up" vector
-*     -  the "u" axis is perpendicular to both "w" and "v" and points to
-*        the left when looking from the eye along the w axis with the v 
-*        axis upwards
-*
-*     Thus the "v" axis is parallel to "vertically up" on the 2D screen,
-*     "u" is parallel to "horizontally to the left", and "w" is
-*     perpendicular to the screen, pointing towards the target.
-*
-*     The screen is a plane perpendicular to the "w" axis, at the "w" axis 
-*     value given by "screen". A 2D cartesian coordinate system (h,r) is
-*     defined on the screen, with origin at the point where the "w" axis
-*     intersects the screen. The "h" (horizontal) axis is parallel to the
-*     "u" axis but points in the opposite direction (to the left), and the 
-*     "r" (vertical) axis is parallel to the "v" axis. The (h,r) system is 
-*     taken to be the same as the PGPLOT 2D world coordinate system, and 
-*     PGSWIN can therefore be used to specify the rectangular area on the 
-*     screen that is mapped onto the PGPLOT viewport.
-*
-*     It is assumed that all axes (x,y,z), (u,v,w) and (h,r) are measured
-*     in the same units.
-
-*  Parameters:
-*     eye
-*        The position vector of the camera's "eye", in 3D world coordinates.
-*     target
-*        The position vector of a point in 3D world coordinates that is
-*        at the centre of the camera's view. In other words, the camera is 
-*        looking towards this point. Zero will be returned if the target
-*        is the same position as the eye.
-*     up
-*        A vector in 3D world coordinates that will appear vertically
-*        upwards when projected onto the screen. Zero will be returned if
-*        the up vector has zero length or is parallel to the line joining
-*        the eye and the target.
-*     screen
-*        The distance from the camera's eye to the projection screen. If
-*        this is zero, then an orthographic projection is used.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   float *u, *v, *w;
-   int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 0 );
-   if( cam ) {
-      result = 1;
-
-/* Store the supplied values in the camera. */
-      memcpy( cam->target_vector, target, 3*sizeof( float ) );
-      memcpy( cam->eye_vector, eye, 3*sizeof( float ) );
-      cam->screen_distance = screen;   
-
-/* Get pointers to the three rows of the w2c_matrix. This is a 3x3 matrix that 
-   rotates vectors in the (x,y,z) system into vectors in the (u,v,w)
-   system. Each row in the matrix is a unit vector along the u, v or w
-   axes. */
-      u = cam->w2c_matrix;
-      v = u + 3;
-      w = v + 3;
-
-/* The "w" axis points form the eye to the target, so get the vector from
-   the eye to the target and normalise it. */
-      vectorSub( target, eye, w );
-      if( ! vectorNorm( w ) ) result = 0;
-
-/* The "v" vector is in the plane spanned by the "w" axis and the "up"
-   vector. Get the normal to this plane, storing the result temporarily
-   in the "u" vector. . */
-      vectorProduct( w, up, u );
-
-/* The "v" vector is normal to the vector found above and is also normal
-   to the "w" axis. Get this vector and normalise it.  */
-      vectorProduct( u, w, v );
-      if( ! vectorNorm( v ) ) result = 0;
-
-/* The "u" vector is perpendicualr to both the "w" and "v" vectors. */
-   vectorProduct( v, w, u );
-      if( ! vectorNorm( u ) ) result = 0;
-
-/* Use "v" as the stored up vector (the supplied "up" vector is not
-   necesarily the same as "v"). */
-      memcpy( cam->up_vector, v, 3*sizeof( float ) );
-
-/* Se a flag that indicates that the Camera is usable. */
-      cam->ok_flag = result ? CAMERA_OK : CAMERA_OK/2;
-   }
-
-   return result;
-}
-
-int PG3DSetEye( float eye[3] ){
-/*
-*+
-*  Name:
-*     PG3DSetEye
-
-*  Purpose:
-*     Store a new camera eye position for the current PGPLOT device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DSetEye( float eye[3] )
-
-*  Description:
-*     This function modifies the camera eye position for the current
-*     PGPLOT device. Other camera settings are left unchanged. See
-*     PG3DSetCamera for more details.
-
-*  Parameters:
-*     eye
-*        The position vector of the camera's "eye", in 3D world coordinates.
-*        Zero is returned if the new eye position is the same as the
-*        existing camera target position.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*     - This function can only be called to modify an existing Camera.
-*     Consequently it returns zero if a camera has not already been set
-*     for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-
-/* If so, modify the camera values, using the supplied eye position but 
-   retaining the other camera settings. */
-      result = PG3DSetCamera( eye, cam->target_vector, cam->up_vector, 
-                                cam->screen_distance );
-   }
-
-   return result;
-}
-
-int PG3DRotateEye( int dir, float angle ){
-/*
-*+
-*  Name:
-*     PG3DRotateEye
-
-*  Purpose:
-*     Move the eye on a great circle around the current target position.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DRotateEye( int dir, float angle )
-
-*  Description:
-*     This function modifies the camera eye position for the current
-*     PGPLOT device. Other camera settings are left unchanged. See
-*     PG3DSetCamera for more details.
-*
-*     The eye is moved by a gven distance along an arc of a great circle 
-*     centred on the current target position. The target position itself
-*     is left unchanged.
-
-*  Parameters:
-*     dir
-*        The direction in which to move the eye position:
-*        1 - Move eye upwards
-*        2 - Move eye downwards
-*        3 - Move eye left
-*        4 - Move eye right
-*     angle
-*        The arc-distance, in degrees, by which to move the eye.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*     - This function can only be called to modify an existing Camera.
-*     Consequently it returns zero if a camera has not already been set
-*     for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-   int i;
-   float e[3], f[3], emod, neweye[3], sina, cosa;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-
-/* Get the cos and sine of the supplied angle. */
-      cosa = cos( angle*TWOPI/360 );
-      sina = sin( angle*TWOPI/360 );
-
-/* Get the vector from the target to the eye, get its modulus. */
-      vectorSub( cam->eye_vector, cam->target_vector, e );
-      emod = vectorModulus( e );
-
-/* If we are moving the eye upwards, find the new eye position. */
-      if( dir == 1 ) {
-         for( i = 0; i < 3; i++ ) {   
-            neweye[ i ] = e[ i ]*cosa + emod*cam->up_vector[ i ]*sina +
-                          cam->target_vector[ i ];
-         }
-             
-/* If we are moving the eye downwards, find the new eye position. */
-      } else if( dir == 2 ) {
-         for( i = 0; i < 3; i++ ) {   
-            neweye[ i ] = e[ i ]*cosa - emod*cam->up_vector[ i ]*sina +
-                          cam->target_vector[ i ];
-         }
-
-/* If we are moving the eye left or right we need a vector in the plane
-   of rotation that is at right angles to "e", and points to the right 
-   of the eye. */
-      } else {
-         vectorProduct( cam->up_vector, e, f );
-         vectorNorm( f );
-
-/* Get the new eye position. */
-         if( dir == 3 ) {
-            for( i = 0; i < 3; i++ ) {   
-               neweye[ i ] = e[ i ]*cosa - emod*f[ i ]*sina + cam->target_vector[ i ];
-            }
-
-         } else {
-            for( i = 0; i < 3; i++ ) {   
-               neweye[ i ] = e[ i ]*cosa + emod*f[ i ]*sina + cam->target_vector[ i ];
-            }
-         }
-      }
-
-/* Modify the camera eye vector, retaining the other camera settings. */
-      result = PG3DSetCamera( neweye, cam->target_vector, cam->up_vector, 
-                              cam->screen_distance );
-   }
-
-   return result;
-}
-
-int PG3DForward( float distance ){
-/*
-*+
-*  Name:
-*     PG3DForward
-
-*  Purpose:
-*     Move the eye forward towards the target.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DForward( float distance )
-
-*  Description:
-*     This function modifies the camera eye position for the current
-*     PGPLOT device. Other camera settings are left unchanged. See
-*     PG3DSetCamera for more details.
-*
-*     The eye is moved forward by a given distance towards the target
-*     point, and the target point is also moved forward so that the 
-*     distance between eye and target remains unchanged.
-
-*  Parameters:
-*     distance
-*        The distance to move the eye and target, given as a fraction of
-*        the distance between the eye and the target.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*     - This function can only be called to modify an existing Camera.
-*     Consequently it returns zero if a camera has not already been set
-*     for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-   int i;
-   float e[3], newtarg[3], neweye[3];
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-
-/* Get the vector from the eye to the target. */
-      vectorSub( cam->target_vector, cam->eye_vector, e );
-
-/* Find the new eye and target positions. */
-      for( i = 0; i < 3; i++ ){      
-         neweye[ i ] = cam->eye_vector[ i ] + e[ i ]*distance;
-         newtarg[ i ] = cam->target_vector[ i ] + e[ i ]*distance;
-      }
-
-/* Modify the camera eye and target vectors, retaining the other camera 
-   settings. */
-      result = PG3DSetCamera( neweye, newtarg, cam->up_vector, 
-                              cam->screen_distance );
-   }
-
-   return result;
-}
-
-
-int PG3DFindNearest( int n, float *x, float *y, float *z, int *iclose ){
-/*
-*+
-*  Name:
-*     PG3DForward
-
-*  Purpose:
-*     Find the closest point to the eye.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DFindNearest( int n, float *x, float *y, float *z, int *iclose )
-
-*  Description:
-*     This function checks every supplied point and returns the index of
-*     the point that is closest to the eye.
-
-*  Parameters:
-*     n
-*        The number of points to check.
-*     x
-*        Pointer to an array of "n" X values.
-*     y
-*        Pointer to an array of "n" Y values.
-*     z
-*        Pointer to an array of "n" Z values.
-*     iclose
-*        Pointer to an int in which to return the index of hte nearest
-*        point.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-   int i;
-   float c[3], v[3];
-   float d;
-   float dmin;
-
-   *iclose = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-      result = 1;
-
-/*  Loop through all the supplied positions. */
-      dmin = FLT_MAX;
-      for( i = 0; i < n; i++ ) {
-         
-/* Get the required distance. */
-         v[ 0 ] = x[ i ];
-         v[ 1 ] = y[ i ];
-         v[ 2 ] = z[ i ];
-         vectorSub( v, cam->eye_vector, c );
-         d = vectorModulus( c );
-
-/* If this is the smallest distance so far, remember it. */
-         if( d < dmin ) {
-            dmin = d;
-            *iclose = i;
-         }
-      }
-   }
-
-   return result;
-}
-
-
-int PG3DSetTarget( float target[3] ){
-/*
-*+
-*  Name:
-*     PG3DSetTarget
-
-*  Purpose:
-*     Store a new camera target position for the current PGPLOT device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DSetTarget( float target[3] )
-
-*  Description:
-*     This function modifies the camera target position for the current
-*     PGPLOT device. Other camera settings are left unchanged. See
-*     PG3DSetCamera for more details.
-
-*  Parameters:
-*     target
-*        The position vector of the camera's "target", in 3D world coordinates.
-*        Zero is returned if the new target position is the same as the
-*        existing camera eye position.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*     - This function can only be called to modify an existing Camera.
-*     Consequently it returns zero if a camera has not already been set
-*     for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-
-/* If so, modify the camera values, using the supplied target position but 
-   retaining the other camera settings. */
-      result = PG3DSetCamera( cam->eye_vector, target, cam->up_vector, 
-                                cam->screen_distance );
-   }
-
-   return result;
-}
-
-
-int PG3DSetUp( float up[3] ){
-/*
-*+
-*  Name:
-*     PG3DSetUp
-
-*  Purpose:
-*     Store a new camera up vector for the current PGPLOT device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DSetUp( float up[3] )
-
-*  Description:
-*     This function modifies the camera up vector for the current
-*     PGPLOT device. Other camera settings are left unchanged. See
-*     PG3DSetCamera for more details.
-
-*  Parameters:
-*     up
-*        The new up vector, in 3D world coordinates. Zero is returned if 
-*        the new up vector is parallel to the line joining the eye and
-*        the target positions.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*     - This function can only be called to modify an existing Camera.
-*     Consequently it returns zero if a camera has not already been set
-*     for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-
-/* If so, modify the camera values, using the supplied up vector but 
-   retaining the other camera settings. */
-      result = PG3DSetCamera( cam->eye_vector, cam->target_vector, up, 
-                                cam->screen_distance );
-   }
-
-   return result;
-}
-
-
-int PG3DSetScreen( float screen ){
-/*
-*+
-*  Name:
-*     PG3DSetScreen
-
-*  Purpose:
-*     Store a new camera screen distance for the current PGPLOT device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DSetScreen( float screen )
-
-*  Description:
-*     This function modifies the camera screen distance for the current
-*     PGPLOT device. Other camera settings are left unchanged. See
-*     PG3DSetCamera for more details.
-
-*  Parameters:
-*     screen
-*        The distance from the camera's eye to the projection screen in 
-*        3D world coordinate units. If this is zero, then an orthographic 
-*        projection is used.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*     - This function can only be called to modify an existing Camera.
-*     Consequently it returns zero if a camera has not already been set
-*     for the current PGPLOT device by calling PG3DSetCamera.
-*-
-*/
- 
-/* Local Variables: */
-   Camera *cam;
-   int result = 0;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 1 );
-   if( cam ) {
-
-/* If so, modify the camera values, using the supplied screen distance but 
-   retaining the other camera settings. */
-      result = PG3DSetCamera( cam->eye_vector, cam->target_vector, 
-                                cam->up_vector, screen );
-   }
-
-   return result;
-}
-
-int PG3DAutoCamera( float lbnd[3], float ubnd[3] ){
-/*
-*+
-*  Name:
-*     PG3DAutoCamera
-
-*  Purpose:
-*     Set up a default camera to view a given box of 3D world coords.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int PG3DAutoCamera( float lbnd[3], float ubnd[3] )
-
-*  Description:
-*     This function sets up the camera and the 2D PGPLOT window for the
-*     current device so that it produces a default view of a specified 
-*     volume of 3D world coordinate space.
-
-*  Parameters:
-*     lbnd
-*        The lower bounds of the volume of 3D world coordinates that
-*        is to be visible using the camera and 2D PGPLOT window.
-*     ubnd
-*        The upper bounds of the volume of 3D world coordinates that
-*        is to be visible using the camera and 2D PGPLOT window.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     - Zero is returned if no PGPLOT device has been opened prior to
-*     calling this function.
-*-
-*/
- 
-/* Local Variables: */
-   float target[3], eye[3], up[3], screen, dx, dy, dz, hlo, hhi, rlo, rhi;
-   float x[8], y[8], z[8], h[8], r[8];
-   Camera *cam;
-   int result = 0;
-   int i;
-
-/* Get a pointer to the Camera structure for the current PGPLOT device.
-   Return without action if no PGPLOT device is open. */
-   cam = getCamera( 0 );
-   if( cam ) {
-
-/* The target position (i.e. the position towards which the camera is
-   looking) is the middle of the volume. */
-      target[ 0 ] = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
-      target[ 1 ] = 0.5*( lbnd[ 1 ] + ubnd[ 1 ] );
-      target[ 2 ] = 0.5*( lbnd[ 2 ] + ubnd[ 2 ] );
-
-/* The eye is slightly offset from a corner view. */
-      eye[ 0 ] = 0.85*ubnd[ 0 ] + 0.15*lbnd[ 0 ];
-      eye[ 1 ] = 0.75*ubnd[ 1 ] + 0.25*lbnd[ 1 ];
-      eye[ 2 ] = 0.75*ubnd[ 2 ] + 0.25*lbnd[ 2 ];
-
-/* The eye is seven times the size of the box away from the box centre. */
-      eye[ 0 ] = 7*(eye[ 0 ] - target[ 0 ] ) + target[ 0 ];
-      eye[ 1 ] = 7*(eye[ 1 ] - target[ 1 ] ) + target[ 1 ];
-      eye[ 2 ] = 7*(eye[ 2 ] - target[ 2 ] ) + target[ 2 ];
-
-/* The up vector is paralle to the Z axis. */
-      up[ 0 ] = 0.0;
-      up[ 1 ] = 0.0;
-      up[ 2 ] = 1.0;
-
-/* The screen is at the centre of the box. */ 
-      dx = eye[ 0 ] - target[ 0 ];
-      dy = eye[ 1 ] - target[ 1 ];
-      dz = eye[ 2 ] - target[ 2 ];
-      screen = sqrtf( dx*dx + dy*dy + dz*dz );
-
-/* Set the camera. */
-      if( PG3DSetCamera( eye, target, up, screen ) ) {
-
-/* Get the 3D World coords at the corners of the volume. */
-         x[ 0 ] = ubnd[ 0 ];
-         x[ 1 ] = ubnd[ 0 ];
-         x[ 2 ] = lbnd[ 0 ];
-         x[ 3 ] = lbnd[ 0 ];
-         x[ 4 ] = ubnd[ 0 ];
-         x[ 5 ] = ubnd[ 0 ];
-         x[ 6 ] = lbnd[ 0 ];
-         x[ 7 ] = lbnd[ 0 ];
-
-         y[ 0 ] = lbnd[ 1 ];
-         y[ 1 ] = ubnd[ 1 ];
-         y[ 2 ] = ubnd[ 1 ];
-         y[ 3 ] = lbnd[ 1 ];
-         y[ 4 ] = lbnd[ 1 ];
-         y[ 5 ] = ubnd[ 1 ];
-         y[ 6 ] = ubnd[ 1 ];
-         y[ 7 ] = lbnd[ 1 ];
-
-         z[ 0 ] = lbnd[ 2 ];
-         z[ 1 ] = lbnd[ 2 ];
-         z[ 2 ] = lbnd[ 2 ];
-         z[ 3 ] = lbnd[ 2 ];
-         z[ 4 ] = ubnd[ 2 ];
-         z[ 5 ] = ubnd[ 2 ];
-         z[ 6 ] = ubnd[ 2 ];
-         z[ 7 ] = ubnd[ 2 ];
-
-/* Transform these into screen coordinates. */
-         if( transform( cam, 8, x, y, z, h, r ) ) {
-
-/* Find the bounds in h and r of the projection of the volume. */
-            hlo = FLT_MAX;
-            hhi = -FLT_MAX;
-            rlo = FLT_MAX;
-            rhi = -FLT_MAX;
-   
-            for( i = 0; i < 8; i++ ) {
-               if( h[ i ] < hlo ) hlo = h[ i ];
-               if( h[ i ] > hhi ) hhi = h[ i ];
-               if( r[ i ] < rlo ) rlo = r[ i ];
-               if( r[ i ] > rhi ) rhi = r[ i ];
-            }
-
-/* Extend these bounds by 5% at each end */
-            dx = 0.05*( hhi - hlo );
-            hhi += dx;         
-            hlo -= dx;         
-   
-            dy = 0.05*( rhi - rlo );
-            rhi += dy;         
-            rlo -= dy;         
-
-/* If the box has non-zero area, set it as the 2D PGPLOT window, and
-   indicate success. */
-            if( rlo < rhi && hlo < hhi ) {
-               ccpgswin( hlo, hhi, rlo, rhi );
-               result = 1;
-            }
-         }
-      }
-   }
-   return result;
-}
-
-
-
-
-
-/* Private functions for this module */
-/* ================================= */
-
-static int TextCam( Camera *textcam, float ref[3], float tx[3], float ty[3], 
-                    float tz[3] ){
-/*
-*  Name:
-*     TextCam
-
-*  Purpose:
-*     Create a Camera that converts 3D text plane coordinates into 2D world
-*     coordinates.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int TextCam( Camera *textcam, float ref[3], float tx[3], float ty[3], 
-*                  float tz[3] )
-
-*  Description:
-*     This function initialises the contents of a supplied Camera
-*     structure so that the Camera describes the transformation from 3D 
-*     "text plane" coordinates to 2D PGPLOT world coordinates. The text
-*     plane coordinate system is defined by three vectors along its x, y
-*     and z axes, and an origin position.
-*
-*     Text plane coordinates describe a plane upon which 2D graphics such
-*     as text is drawn. The X axis is parallel to the text base line, the 
-*     Y axis is the text up vector, and the Z axis is perpendicular to
-*     the text, passing from the back of the text to the front of the text.
-
-*  Parameters:
-*     textcam
-*        The Camera structure which is to be modified.
-*     ref
-*        The (x,y,z) coordinates at the text plane origin.
-*     tx
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        X axis. This is parallel to the text base line.
-*     ty
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Y axis. This is parallel to the projectionof ht eup vector on to
-*        the text plane.
-*     tz
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Z axis. This is perpendicular to the text plane, passing from
-*        the back of the text to the front of the text.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*/
-
-
-/* Local Variables: */
-   Camera *cam;
-   float dx, dy, dz;
-   int i;
-   float a, b, c;
-
-/* Get the Camera for the current device identifier. Abort if no camera
-   is available. This camera describes the transformation from 3D world
-   coordinates (x,y,z) to 2D world coordinates (screen coordinates) (h,r). */
-   cam = getCamera( 1 );
-   if( !cam ) return 0;
-
-/* Create a Camera structure that describes the transformation from 
-   text plane coordinates to 2D world coords, putting the origin of text
-   plane coordinates at the given reference position. */
-   dx = cam->eye_vector[ 0 ] - ref[ 0 ];
-   dy = cam->eye_vector[ 1 ] - ref[ 1 ];
-   dz = cam->eye_vector[ 2 ] - ref[ 2 ];
-
-   textcam->eye_vector[ 0 ] = tx[ 0 ]*dx + tx[ 1 ]*dy + tx[ 2 ]*dz;
-   textcam->eye_vector[ 1 ] = ty[ 0 ]*dx + ty[ 1 ]*dy + ty[ 2 ]*dz;
-   textcam->eye_vector[ 2 ] = tz[ 0 ]*dx + tz[ 1 ]*dy + tz[ 2 ]*dz;
-
-   for( i = 0; i < 8; i += 3 ) {
-      a = cam->w2c_matrix[ i ];
-      b = cam->w2c_matrix[ i + 1 ];
-      c = cam->w2c_matrix[ i + 2 ];
-      textcam->w2c_matrix[ i     ] = a*tx[ 0 ] + b*tx[ 1 ] + c*tx[ 2 ];
-      textcam->w2c_matrix[ i + 1 ] = a*ty[ 0 ] + b*ty[ 1 ] + c*ty[ 2 ];
-      textcam->w2c_matrix[ i + 2 ] = a*tz[ 0 ] + b*tz[ 1 ] + c*tz[ 2 ];
-   }
-
-   textcam->screen_distance = cam->screen_distance;
-   textcam->ok_flag = CAMERA_OK;
-
-   return 1;
-}
-
-static int Polygon( int nside, float *vx, float *vy, float *vz, float ref[3], 
-                    float tx[3], float ty[3], float tz[3]  ){
-/*
-*  Name:
-*     Polygon
-
-*  Purpose:
-*     Draw a regular polygon.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int Polygon( int nside, float *vx, float *vy, float *vz, float ref[3], 
-*                  float tx[3], float ty[3], float tz[3] )
-
-*  Description:
-*     This function draws a polygon centred at a given position on a 
-*     given  plane in 3D world coords, using a specified up-vector. The
-*     polygon vertices are specified in text plane coordinates via vx, 
-*     vy and vz.
-
-*  Parameters:
-*     nside
-*        Number of sides for the polygon. Numbers higher than 32 are
-*        treated as 32.
-*     vx
-*        Pointer to an array of "nside" text plane X axis values. 
-*     vy
-*        Pointer to an array of "nside" text plane Y axis values. 
-*     vz
-*        Pointer to an array of "nside" text plane Z axis values. 
-*     ref
-*        The (x,y,z) coordinates at the polygon centre.
-*     tx
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        X axis. This is parallel to the text base line.
-*     ty
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Y axis. This is parallel to the projectionof ht eup vector on to
-*        the text plane.
-*     tz
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Z axis. This is perpendicular to the text plane, passing from
-*        the back of the text to the front of the text.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*/
-
-
-/* Local Variables: */
-   Camera *cam;
-   Camera newcam;
-   float h[ MXSIDE ], r[ MXSIDE ];
-
-/* Get the Camera for the current device identifier. Abort if no camera
-   is available. */
-   cam = getCamera( 1 );
-   if( !cam ) return 0;
-
-/* Check the number of points. */
-   if( nside > MXSIDE) return 0;
-
-/* Create a Camera structure that describes the transformation from 
-   text plane coordinates to 2D world coords, putting the origin of text
-   plane coordinates at the given reference position. */
-   if( !TextCam( &newcam, ref, tx, ty, tz ) ) return 0;
-
-/* Transform the given text plane coordinates into 2D world coordinates. */
-   if( !transform( &newcam, nside, vx, vy, vz, h, r ) ) return 0;
-
-/* Draw the polygon. */
-   ccpgpoly( nside, h, r );
-
-/* If we get here we have succeeded so return a non-zero value. */
-   return 1;
-}
-
-static int Text( int *list, int nlist, float ref[3], const char *just, 
-                 float tx[3], float ty[3], float tz[3] ){
-/*
-*  Name:
-*     Text
-
-*  Purpose:
-*     Draw a character string.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int Text( int *list, int nlist, float ref[3], const char *just, 
-*               float tx[3], float ty[3], float tz[3] )
-
-*  Description:
-*     This function displays a symbol list at a given position on a given 
-*     plane in 3D world coords, using a specified justification and up-vector.
-
-*  Parameters:
-*     list
-*        Pointer to an array of pgplot symbol values.
-*     nlist
-*        Length of the "list" array.
-*     ref
-*        The reference (x,y,z) coordinates.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     tx
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        X axis. This is parallel to the text base line.
-*     ty
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Y axis. This is parallel to the projection of the up vector on to
-*        the text plane.
-*     tz
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Z axis. This is perpendicular to the text plane, passing from
-*        the back of the text to the front of the text.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  This routine does not recognise PGPLOT escape sequences.
-*     -  A NULL value for "just" causes a value of "CC" to be used.
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
-   Camera *cam;
-   Camera newcam;
-   float ch;
-   float tm, txc, tyc;
-   float txleft, tybase;
-   float xt[ 150 ], yt[ 150 ], zt[ 150 ], h[ 150 ], r[ 150 ];
-   float xb[3], yb[3], zb[3], bl[3];
-   int clip;
-   int i;
-   int j;
-   int k;
-   int unused;
-   int xygrid[ 300 ];
-
-/* If there is nothing to plot return without error. */
-   if( nlist == 0 ) return 1;
-
-/* Find the 3D world coordinates at the left hand end of the text
-   baseline. */
-   if( !TxExt( list, nlist, ref, just, tx, ty, tz, xb, yb, zb, bl ) ) return 0;
-
-/* Get the Camera for the current device identifier. Abort if no camera
-   is available. */
-   if( ! (cam = getCamera( 1 ) ) ) return 0;
-
-/* Create a Camera structure that describes the transformation from 
-   text plane coordinates to 2D world coords. */
-   if( !TextCam( &newcam, ref, tx, ty, tz ) ) return 0;
-
-/* Save the current clipping flag, and ensure clipping is off. */
-   ccpgqclp( &clip );
-   ccpgsclp( 0 );
-
-/* Calculate the text plane X coord of the left hand edge of the first 
-   character. */
-   txleft = tx[ 0 ]*( bl[ 0 ] - ref[ 0 ] ) + 
-            tx[ 1 ]*( bl[ 1 ] - ref[ 1 ] ) + 
-            tx[ 2 ]*( bl[ 2 ] - ref[ 2 ] );
-
-/* Calculate the text plane Y coord at the text baseline. */
-   tybase = ty[ 0 ]*( bl[ 0 ] - ref[ 0 ] ) + 
-            ty[ 1 ]*( bl[ 1 ] - ref[ 1 ] ) + 
-            ty[ 2 ]*( bl[ 2 ] - ref[ 2 ] );
-
-/* Get the character height in world coordinate units. A PGPLOT
-   character height of 1.0 corresponds to 1/40 of the 2D window height. */
-   ch = getCharHeight();
-
-/* Get the polylines that correspond to the first symbol. */
-   ccgrsyxd( list[ 0 ], xygrid, &unused );
-
-/* Create a linear transformation that maps the font grid coordinate
-   system used by grsyxd onto text plane coordinates. This transformation
-   will be different for each character in the string. The initial
-   transformation set up now is appropriate for the first character. The
-   mapping is: 
-
-      Text_x = txc + tm*Font_x
-      Text_y = tyc + tm*Font_y
-
-*/
-   tm = ch/( xygrid[ 2 ] - xygrid[ 1 ] );
-   tyc = tybase - tm*xygrid[ 1 ];
-   txc = txleft - tm*xygrid[ 3 ];
-
-/* Loop round each symbol. */
-   for( i = 0; i < nlist; i++ ) {
-
-/* Loop round each polyline that forms a segment of the character */
-      k = 5;
-      while( 1 ) {
-
-/* Map the polyline vertices into text plane coordinates. */
-         j = 0;
-         while( j < 150  ){
-             if( xygrid[ k ] != -64 ) {
-                xt[ j ] = txc + tm*xygrid[ k++ ];
-                yt[ j ] = tyc + tm*xygrid[ k++ ];
-                zt[ j++ ] = 0.0;
-             } else { 
-                break;
-             }
-         }
-
-/* Map the text plane coordinates into 2D world coordinates. */
-         if( j > 0 ) {
-            (void) transform( &newcam, j, xt, yt, zt, h, r );
-
-/* Draw the polyline. */
-            ccpgline( j, h, r );
-         }
-
-/* If this is the last segment in the character, pass on to the next
-   character. */
-         if( xygrid[ k + 1 ] == -64 ) break;
-
-/* Otherwise, skip over the end markers in the xygrid array, and go on to
-   plot the next polyline segment. */
-         k += 2;
-      }
-
-/* If this is not the last symbol... */
-      if( i != nlist - 1 ) {
-        
-/* Set the text x value at which to place the left edge of the next 
-   character. This is the right hand edge of the character just drawn. */
-         txleft += tm*( xygrid[ 4 ] - xygrid[ 3 ] );
-
-/* Get the polylines that correspond to the next symbol. */
-         ccgrsyxd( list[ i + 1 ], xygrid, &unused );
-
-/* Modify the transformation from font grid coords to text plane coords
-   so that it is appropriate for the next character in the string. */
-         txc = txleft - tm*xygrid[ 3 ];
-      }
-
-/* Next symbol. */
-   }
-
-/* Re-instate original clipping flag. */
-   ccpgsclp( clip );
-
-/* If we arrive here, we have been successful, so return a non-zero
-   value. */
-   return 1;
-
-/* Clear local constants. */
-#undef MXLEN 
-}
-
-static int TxExt( int *list, int nlist, float ref[3], const char *just, 
-                  float tx[3], float ty[3], float tz[3], float *xb, float *yb, 
-                  float *zb, float bl[3] ){
-/*
-*  Name:
-*     TxExt
-
-*  Purpose:
-*     Get the extent of a character string.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int TxExt( int *list, int nlist, float ref[3], const char *just, 
-*                float tx[3], float ty[3], float tz[3], float *xb, float *yb, 
-*                float *zb, float bl[3] )
-
-*  Description:
-*     This function returns the corners of a box which would enclose the 
-*     supplied symbol list if it were displayed using Text.
-*
-*     The returned box includes any leading or trailing spaces.
-
-*  Parameters:
-*     list
-*        Pointer to an array of pgplot symbol numbers.
-*     nlist
-*        The length of the "list" array.
-*     ref
-*        The reference (x,y,z) coordinates.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", 'B' for "baseline", or "M" for "bottom", and
-*        specifies the vertical location of the reference position. Note, 
-*        "baseline" corresponds to the base-line of normal text. Some 
-*        characters (eg "y", "g", "p", etc) descend below the base-line,
-*        and so "M" and "B" will produce different effects for such
-*        characters. The second character may be 'L' for "left", 'C' for 
-*        "centre", or 'R' for "right", and specifies the horizontal 
-*        location of the reference position. If the string has less than 
-*        2 characters then 'C' is used for the missing characters. 
-*     tx
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        X axis. This is parallel to the text base line.
-*     ty
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Y axis. This is parallel to the projectionof ht eup vector on to
-*        the text plane.
-*     tz
-*        A unit vector (expressed in 3D world coords) along the text plane 
-*        Z axis. This is perpendicular to the text plane, passing from
-*        the back of the text to the front of the text.
-*     xb
-*        An array of 4 elements in which to return the x coordinate of
-*        each corner of the bounding box.
-*     yb
-*        An array of 4 elements in which to return the y coordinate of
-*        each corner of the bounding box.
-*     zb
-*        An array of 4 elements in which to return the z coordinate of
-*        each corner of the bounding box.
-*     bl
-*        The 3D world coordinates at the left hand end of the text
-*        baseline.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  The order of the corners is anti-clockwise starting at the 
-*        bottom left when viewing the text normally (i.e. face on).
-*     -  This routine does not recognise PGPLOT escape sequences.
-*     -  A NULL value for "just" causes a value of "CC" to be used.
-*/
-
-/* Local Constants: */
-#define MXLEN 256
-
-/* Local Variables: */
-   float ch;
-   float txlo, txhi, tylo, tyhi, tyzero;
-   float tm;
-   float w;
-   int i;
-   int unused;
-   int xygrid[ 300 ];
-   int gylo, gyhi, width;
-
-/* Initialise the returned values to indicate no box available. */
-   for( i = 0; i < 4; i++ ){
-      xb[ i ] = 0.0;
-      yb[ i ] = 0.0;
-      zb[ i ] = 0.0;
-   }
-
-/* If there is nothing to plot return without error. */
-   if( nlist == 0 ) return 1;
-
-/* We now find the bounding box of the text in "text plane coordinates".
-   These are (tx,ty,tz) axes that span the plane upon which the text is
-   writtens. The origin of (tx,ty,tz) is at the supplied 3D reference 
-   position, the X axis increases along the text baseline, and Y axis 
-   increases along the text up vector, and Z increases from the back 
-   of the text to the front of the text  (all are measured in 3D world 
-   coord units). We first find the bounds of the text in these text plane
-   coordinates, assuming that the bottom left of the text baseline is
-   placed at the given reference position (i.e. at the origiin of text
-   plane coordinates). */
-
-/* Get the character height in world coordinate units. A PGPLOT
-   character height of 1.0 corresponds to 1/40 of the 2D window height. */
-   ch = getCharHeight();
-
-/* Initialise the Y bounds of the text bounding box in grid coords. */
-   gylo = INT_MAX;
-   gyhi = -INT_MAX;
-
-/* Initialise things. */
-   width = 0;
-   tm = 1.0;
-
-/* Loop round each symbol. */
-   for( i = 0; i < nlist; i++ ) {
-
-/* Get the polylines that correspond to this symbol. */
-      ccgrsyxd( list[ i ], xygrid, &unused );
-
-/* If this is the first symbol, set the scaling factor that converts
-   grid units to text plane units. */
-      if( i == 0 ) tm = ch/( xygrid[ 2 ] - xygrid[ 1 ] );
-
-/* Note the highest and lowest y grid value. */
-      w = xygrid[ 2 ] - xygrid[ 1 ];
-      if( w > gyhi ) gyhi = w;
-
-      w = xygrid[ 0 ] - xygrid[ 1 ];
-      if( w < gylo ) gylo = w;
-
-/* Increment the total width of the string in grid units. */
-      width += xygrid[ 4 ] - xygrid[ 3 ];
-   }
-
-/* Set up the bounding box in text plane coordinates. */
-   txlo = 0.0;
-   txhi = width*tm;
-   tylo = gylo*tm;
-   tyhi = gyhi*tm;
-   tyzero = 0.0;
-
-/* Adjust the text plane bounding box to take account of the specified
-   text justification. The above process implicitly assumed a
-   justifiation of "BL". */
-   if( !just || just[ 0 ] == 'C' || just[ 0 ] == 0 ){
-      w = 0.5*( tyhi + tylo );
-      tylo -= w;
-      tyhi -= w;
-      tyzero -= w;
-
-   } else if( just[ 0 ] == 'T' ){
-      w = tyhi;
-      tylo -= w;
-      tyhi -= w;
-      tyzero -= w;
-
-   } else if( just[ 0 ] == 'M' ){
-      w = -tylo;
-      tylo += w;
-      tyhi += w;
-      tyzero += w;
-
-   } else if( just[ 0 ] != 'B' ) {
-      astError( AST__GRFER, "astG3DTxExt: Justification string '%s' "
-                "is invalid.", just );
-      return 0;
-   }
-
-   if( !just || just[ 1 ] == 'C' || just[ 1 ] == 0 ){
-      w = 0.5*( txhi + txlo );
-      txlo -= w;
-      txhi -= w;
-
-   } else if( just[ 1 ] == 'R' ){
-      w = txhi;
-      txlo -= w;
-      txhi -= w;
-
-   } else if( just[ 1 ] == 'L' ){
-      w = txlo;
-      txlo -= w;
-      txhi -= w;
-
-   } else {
-      astError( AST__GRFER, "astG3DTxExt: Justification string '%s' "
-                "is invalid.", just );
-      return 0;
-   }
-
-/* Use the supplied text plane axis vectors to transform the corners of  
-   the text plane bounding box into 3D world coordinates. */
-   xb[ 0 ] = tx[ 0 ]*txlo + ty[ 0 ]*tylo + ref[ 0 ];
-   yb[ 0 ] = tx[ 1 ]*txlo + ty[ 1 ]*tylo + ref[ 1 ];
-   zb[ 0 ] = tx[ 2 ]*txlo + ty[ 2 ]*tylo + ref[ 2 ];
-
-   xb[ 1 ] = tx[ 0 ]*txhi + ty[ 0 ]*tylo + ref[ 0 ];
-   yb[ 1 ] = tx[ 1 ]*txhi + ty[ 1 ]*tylo + ref[ 1 ];
-   zb[ 1 ] = tx[ 2 ]*txhi + ty[ 2 ]*tylo + ref[ 2 ];
-
-   xb[ 2 ] = tx[ 0 ]*txhi + ty[ 0 ]*tyhi + ref[ 0 ];
-   yb[ 2 ] = tx[ 1 ]*txhi + ty[ 1 ]*tyhi + ref[ 1 ];
-   zb[ 2 ] = tx[ 2 ]*txhi + ty[ 2 ]*tyhi + ref[ 2 ];
-
-   xb[ 3 ] = tx[ 0 ]*txlo + ty[ 0 ]*tyhi + ref[ 0 ];
-   yb[ 3 ] = tx[ 1 ]*txlo + ty[ 1 ]*tyhi + ref[ 1 ];
-   zb[ 3 ] = tx[ 2 ]*txlo + ty[ 2 ]*tyhi + ref[ 2 ];
-
-/* Also transform the text plane coordinates at the bottom left of the
-   text baseline into 3D world coordinates. */
-   bl[ 0 ] = tx[ 0 ]*txlo + ty[ 0 ]*tyzero + ref[ 0 ];
-   bl[ 1 ] = tx[ 1 ]*txlo + ty[ 1 ]*tyzero + ref[ 1 ];
-   bl[ 2 ] = tx[ 2 ]*txlo + ty[ 2 ]*tyzero + ref[ 2 ];
-
-/* If we get here, we have been succesful, so return a non-zero value. */
-   return 1;
-
-/* Clear local constants. */
-#undef MXLEN 
-}
-
-static float getCharHeight( void ){
-/*
-*  Name:
-*     getCharHeight
-
-*  Purpose:
-*     Get the current text height setting.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     float getCharHeight( void )
-
-*  Description:
-*     This function returns the PGPLOT character height, scaled into
-*     world coordinate units.
-
-*  Returned Value:
-*    The character height, in world coordinate units.
-
-*/
-
-/* Local Variables: */
-   float wx1, wx2, wy1, wy2;
-   float ch;
-
-/* Get the bounds of the PGPLTO 2D window. */
-   ccpgqwin( &wx1, &wx2, &wy1, &wy2 );
-
-/* Get the normalised PGPLOT character height. */
-   ccpgqch( &ch );
-
-/* A PGPLOT character height of 1.0 corresponds to 1/40 of the 2D window 
-   height. Scale the normalised character height into world coordinate
-   units, and return it. */
-   return ch*fabs( wy1 - wy2 )/40.0;
-
-}
-
-static int getTextAxes( float ref[3], float up[3], float norm[3], 
-                        const char *just, float tx[3], float ty[3], 
-                        float tz[3], char newjust[3] ){
-/*
-*  Name:
-*     getTextAxes
-
-*  Purpose:
-*     Get unit vectors along the text plane coordinate axes.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int getTextAxes( float ref[3], float up[3], float norm[3], 
-*                      const char *just, float tx[3], float ty[3], 
-*                      float tz[3], char newjust[3] )
-
-*  Description:
-*     This function returns three unit vectors that define the axes of a
-*     3D Cartesian coordinate system known as "text plane coordinates".
-*     These axes span the plane upon which text (or other graphics) is to 
-*     be written. The origin is at the supplied 3D reference position, the 
-*     X axis increases along the text baseline, and Y axis increases along 
-*     the text up vector, and Z increases from the back of the text to the 
-*     front of the text (all are measured in 3D world  coord units). 
-*
-*     The returned vectors are reversed if this will result in text
-*     appearing more "normal" (i.e. viewed from the front rather than 
-*     the back, and viewed upright rather thna upside down). If the
-*     vectors are reversed, the justification string is also changed so
-*     that the text occupies the requested area on the screen.
-
-*  Parameters:
-*     ref
-*        The reference (x,y,z) coordinates.
-*     up
-*        The (x,y,z) up-vector for the text. The actual up vector used is
-*        the projection of the supplied vector onto the plane specified by 
-*        "norm".
-*     norm
-*        The (x,y,z) components of a vector that is normal to the plane
-*        containing the text. The given vector passes through the text
-*        from the back to the front. If all components of this vector are
-*        zero, then a normal vector pointing towards the camera eye is used.
-*     just
-*        The requested text justification, as supplied to astG3DText.
-*     tx
-*        A unit vector along the text plane X axis.
-*     ty
-*        A unit vector along the text plane X axis.
-*     tz
-*        A unit vector along the text plane X axis.
-*     newjust
-*        The text justification to use.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-*/
-
-/* Local Variables: */
-   Camera *cam;
-   float eye[3];
-
-/* Initialise the returned justification to equal the supplied
-   justification, supplying defaults if required. . */
-   if( just ) {
-      strncpy( newjust, just, 2 ); 
-      if( !newjust[ 0 ] ) newjust[ 0 ] = 'C';
-      if( !newjust[ 1 ] ) newjust[ 1 ] = 'C';
-      newjust[ 2 ] = 0;
-   } else {
-      strcpy( newjust, "CC" );
-   }
-
-/* Get the Camera for the current device identifier. Abort if no camera
-   is available. */
-   if( !( cam = getCamera( 1 ) ) ) return 0;
-
-/* Calculate the vector from the reference position to the eye, and store
-   it in "eye". */
-   vectorSub( cam->eye_vector, ref, eye );
-
-/* Create unit vectors along the three axes of the text plane coordinate 
-   system. These unit vectors are represented in terms of the 3D world 
-   coordinate axes. The text Z axis is parallel to the supplied "norm"
-   vector. */
-   tz[ 0 ] = norm[ 0 ];
-   tz[ 1 ] = norm[ 1 ];
-   tz[ 2 ] = norm[ 2 ];
-
-/* Attempt to normalise the "tz" vector. If it has zero length, use the 
-   offset from the reference point to the eye. */
-   if( ! vectorNorm( tz ) ){
-
-/* Use the "eye" vector calculated above as the text plane Z axis. */
-      tz[ 0 ] = eye[ 0 ];
-      tz[ 1 ] = eye[ 1 ];
-      tz[ 2 ] = eye[ 2 ];
-   }
-
-/* Find vectors along the text plane x and y axes. */
-   vectorProduct( up, tz, tx );
-   vectorProduct( tz, tx, ty );
-
-/* Normalise the three text plane axis vectors. If any vector has zero
-   length, abort. */
-   if( !vectorNorm( tx ) || !vectorNorm( ty ) || !vectorNorm( tz ) ) return 0;
-
-/* We now reverse text plane vectors if this will help ther text to be
-   viewed "normally" on the screen. If the existing vectors cause the
-   text to be viewed from the back rather than the front, reverse the tx
-   and tz vectors so that he text is viewed from the front. */
-   if( dotProduct( tz, eye ) < 0.0 ) {
-      tz[ 0 ] = -tz[ 0 ];
-      tz[ 1 ] = -tz[ 1 ];
-      tz[ 2 ] = -tz[ 2 ];
-      tx[ 0 ] = -tx[ 0 ];
-      tx[ 1 ] = -tx[ 1 ];
-      tx[ 2 ] = -tx[ 2 ];
-
-/* The text will have spun around the up vector (i.e. the ty axis), so
-   modify the horizontal justification  so that thex text occupies the same
-   area on the screen. */
-      if( newjust[ 1 ] == 'L' ) {
-         newjust[ 1 ] = 'R';
-      } else if( newjust[ 1 ] == 'R' ) {
-         newjust[ 1 ] = 'L';
-      }
-   }
-
-/* If the existing vectors cause the text to be viewed upside down, reverse 
-   the tx and ty vectors so that he text is viewed right way up. */
-   if( dotProduct( ty, cam->up_vector ) < 0.0 ) {
-      ty[ 0 ] = -ty[ 0 ];
-      ty[ 1 ] = -ty[ 1 ];
-      ty[ 2 ] = -ty[ 2 ];
-      tx[ 0 ] = -tx[ 0 ];
-      tx[ 1 ] = -tx[ 1 ];
-      tx[ 2 ] = -tx[ 2 ];
-
-/* The text will have spun around the tz vector (i.e. the viewing vector),
-   so modify both vertical and horizontal justification so that the text 
-   occupies the same area on the screen. */
-      if( newjust[ 0 ] == 'B' || newjust[ 0 ] == 'M' ) {
-         newjust[ 0 ] = 'T';
-      } else if( newjust[ 0 ] == 'T' ) {
-         newjust[ 0 ] = 'M';
-      }
-
-      if( newjust[ 1 ] == 'L' ) {
-         newjust[ 1 ] = 'R';
-      } else if( newjust[ 1 ] == 'R' ) {
-         newjust[ 1 ] = 'L';
-      }
-   }
-
-/* If we arraive here we have been succesful, so return a non-zero value. */
-   return 1;
-}
-
-static void getSymbolList( const char *text, int mxlen, int *nlist, int *list ){
-/*
-*  Name:
-*     getSymbolList
-
-*  Purpose:
-*     Get the extent of a character string.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     void getSymbolList( const char *text, int mxlen, int *nlist, int *list )
-
-*  Description:
-*     This function converts a supplied text string into a list of PGPLOT
-*     symbol numbers for the current PGPLOT font.
-
-*  Parameters:
-*     text 
-*        Pointer to a null-terminated character string.
-*     mxlen
-*        The length of the "list" array.
-*     nlist
-*        Pointer to an integer in which to place the number of symbol
-*        values stored in the "list" array. This will be returned equal
-*        to zero if there are no non-blank characters in the supplied 
-*        string. If there is one or more non-blank characters in "text",
-*        then the returned list will include any trailing spaces.
-*     list
-*        Pointer to an array in which to return the symbol numbers. The
-*        array should be at least "mxlen" elements long.
-*/
-
-
-/* Local Variables: */
-   int font;
-   int tlen;
-
-/* Assume we have no symbols. */
-   *nlist = 0;
-
-/* Check there is something to plot. */
-   if( astChrLen( text ) > 0 ) {
-
-/* Find the length of text that can be displayed. */
-      tlen = strlen( text );
-      if( tlen > mxlen ) tlen = mxlen;           
-
-/* Get the current PGPLOT font. */
-      ccpgqcf( &font );
-
-/* Convert the supplied string into a list of symbol numbers */
-      ccgrsyds( list, nlist, text, tlen, font );
-   }
-}
-
-static Camera *getCamera( int check ){
-/*
-*+
-*  Name:
-*     getCamera
-
-*  Purpose:
-*     Return a pointer to the Camera structure for the current PGPLOT
-*     device.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     Camera getCamera( int check )
-
-*  Description:
-*     This function returns a pointer to a static structure that defines the 
-*     position and orientation of the camera in 3D world coords. It can
-*     be used to transform positions from 3D world coordinates (x,y,z) to 
-*     2D screen coordinates (h,r).
-
-*  Parameters:
-*     check
-*        If non-zero, a check will be made that the Camera has been
-*        initialised, and NULL will be returned if the Camera has not
-*        been initialsied. If "check" is zero, a pointer to the Camera
-*        is returned even if it has not been initialised.
-
-*  Returned Value:
-*     Pointer to the Camera, or NULL if an error occurs.
-*-
-*/
- 
-/* Local Variables: */
-   int id;
-   Camera *cam = NULL;
-
-/* Get the pgplot current device identifier. Return NULL if no device is
-   currently open. */
-   ccpgqid( &id );
-   if( id > 0 && id <= MXDEV ) {
-
-/* Get a pointer to the required Camera structure. */
-      cam = cameras + id - 1;
-
-/* If required, check that the structure has been initialised. */
-      if( check && cam->ok_flag != CAMERA_OK ) cam = NULL;
-   }
-
-   return cam;
-}
-
-static int transform( Camera *cam, int n, float *x, float *y, float *z, 
-                      float *h, float *r ){
-/*
-*+
-*  Name:
-*     transform
-
-*  Purpose:
-*     Transform positions from 3D world coords to 2D screen cooords.
-
-*  Synopsis:
-*     #include "grf3d.h"
-*     int transform( Camera *cam, int n, float *x, float *y, float *z, 
-*                    float *h, float *r )
-
-*  Description:
-*     This function transforms a set of positions from 3D world
-*     coordinates (x,y,z) to 2D screen coordinates (h,r), using the
-*     supplied camera.
-
-*  Parameters:
-*     cam
-*        Pointer to a structure descibing the projection from 3D world
-*        coords to 2D screen coords. If NULL, the camera for the current
-*        PGPLOT device is used.
-*     n
-*        The number of positions to transform.
-*     x
-*        An array of "n" values for the "x" axis of the 3D world
-*        coordinate system.
-*     y
-*        An array of "n" values for the "y" axis of the 3D world
-*        coordinate system.
-*     z
-*        An array of "n" values for the "z" axis of the 3D world
-*        coordinate system.
-*     h
-*        An array to receive the "n" values for the "h" axis of the 2D 
-*        screen coordinate system.
-*     r
-*        An array to receive the "n" values for the "r" axis of the 2D 
-*        screen coordinate system.
-
-*  Returned Value:
-*     Zero if an error occurs. One otherwise.
-
-*-
-*/
- 
-/* Local Variables: */
-   float dx, dy, dz, u, v, w, f;
-   int i;
-   int result = 0;
-
-/* If no camera was supplied use the camera for the current PGPLOT
-   device. */
-   if( ! cam ) cam = getCamera( 0 );
-
-/* Check we now have a usable camera */
-   if( cam && cam->ok_flag == CAMERA_OK ) {
-      result = 1;
-
-/* Loop round each position. */
-      for( i = 0; i < n; i++ ) {
-
-/* Offset from supplied position to the camera eye. */
-         dx = x[ i ] - (cam->eye_vector)[ 0 ];
-         dy = y[ i ] - (cam->eye_vector)[ 1 ];
-         dz = z[ i ] - (cam->eye_vector)[ 2 ];
-
-/* Get the representation of this vector in the (u,v,w) system. */
-         u = (cam->w2c_matrix)[ 0 ]*dx + 
-             (cam->w2c_matrix)[ 1 ]*dy + 
-             (cam->w2c_matrix)[ 2 ]*dz;
-   
-         v = (cam->w2c_matrix)[ 3 ]*dx + 
-             (cam->w2c_matrix)[ 4 ]*dy + 
-             (cam->w2c_matrix)[ 5 ]*dz;
-   
-         w = (cam->w2c_matrix)[ 6 ]*dx + 
-             (cam->w2c_matrix)[ 7 ]*dy + 
-             (cam->w2c_matrix)[ 8 ]*dz;
-
-/* Find the screen coords, using either a tangent plane or an
-   orothograhic projection. */
-         if( cam->screen_distance != 0.0 ) {
-            if( w != 0.0 ) {
-               f = cam->screen_distance/w;
-               h[ i ] = -f*u;
-               r[ i ] = f*v;
-            } else {
-               h[ i ] = FLT_MAX;
-               r[ i ] = FLT_MAX;
-            }
-         } else {
-            h[ i ] = -u;
-            r[ i ] = v;
-         }
-   
-      }
-   }
-   return result;
-}
-
-
-/* Dot product of a pair of 3-vectors "a" and "b". */
-static float dotProduct( float *a, float *b ){
-   return a[ 0 ]*b[ 0 ] + a[ 1 ]*b[ 1 ] + a[ 2 ]*b[ 2 ];
-}
-
-/* Vector product of a pair of 3-vectors "a" and "b". */
-static void vectorProduct( float *a, float *b, float *c ){
-   c[ 0 ] = a[ 1 ]*b[ 2 ] - a[ 2 ]*b[ 1 ];
-   c[ 1 ] = a[ 2 ]*b[ 0 ] - a[ 0 ]*b[ 2 ];
-   c[ 2 ] = a[ 0 ]*b[ 1 ] - a[ 1 ]*b[ 0 ];
-}
-
-/* Vector from "b" to "a" (i.e. a minus b) . */
-static void vectorSub( float *a, float *b, float *c ){
-   c[ 0 ] = a[ 0 ] - b[ 0 ];
-   c[ 1 ] = a[ 1 ] - b[ 1 ];
-   c[ 2 ] = a[ 2 ] - b[ 2 ];
-}
-
-/* Normalises a vector to a unit length. Returns zero if the vector has
-   zero length, and 1 otherwise. */
-static int vectorNorm( float *a ){
-   float d;
-   d = vectorModulus( a );
-   if( d > 0.0 ) {
-      a[ 0 ] /= d;
-      a[ 1 ] /= d;
-      a[ 2 ] /= d;
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-/* Return the length of a vector. */
-static float vectorModulus( float *a ){
-   return sqrtf( a[ 0 ]*a[ 0 ] + a[ 1 ]*a[ 1 ] + a[ 2 ]*a[ 2 ] );
-}
-
-
-
-
-
-
-
-/* PGPLOT interface functions */
-/* ========================== */
-static void ccpgqclp(int *clip){
-   F77_INTEGER_TYPE CLIP;
-   F77_CALL(pgqclp)( INTEGER_ARG(&CLIP) );
-   *clip = (int) CLIP;
-}
-
-static void ccpgsclp(int clip){
-   F77_INTEGER_TYPE CLIP;
-   CLIP = (F77_INTEGER_TYPE) clip;
-   F77_CALL(pgsclp)( INTEGER_ARG(&CLIP) );
-}
-
-static void ccpgqid(int *id){
-   F77_INTEGER_TYPE ID;
-   F77_CALL(pgqid)( INTEGER_ARG(&ID) );
-   *id = (int) ID;
-}
-
-
-static void ccpgswin(float x1, float x2, float y1, float y2){
-   F77_REAL_TYPE X1;
-   F77_REAL_TYPE X2;
-   F77_REAL_TYPE Y1;
-   F77_REAL_TYPE Y2;
-
-   X1 = x1;
-   X2 = x2;
-   Y1 = y1;
-   Y2 = y2;
-
-   F77_CALL(pgswin)( REAL_ARG(&X1), REAL_ARG(&X2), REAL_ARG(&Y1),
-                     REAL_ARG(&Y2) );
-}
-
-static void ccpgline(int n, float xpts[], float ypts[] ){
-   F77_INTEGER_TYPE N;
-   F77_REAL_TYPE *XX;
-   F77_REAL_TYPE *YY;
-   int i;
-
-   XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-   YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
-   if( astOK ){
-
-      for( i = 0; i < n; i++ ){
-         XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
-         YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
-      }
-
-      N = (F77_INTEGER_TYPE) n;
-
-      F77_CALL(pgline)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
-                        REAL_ARRAY_ARG(YY) );
-
-      XX = (F77_REAL_TYPE *) astFree( (void *) XX );
-      YY = (F77_REAL_TYPE *) astFree( (void *) YY );
-   }
-}
-
-static void ccpgpoly(int n, float xpts[], float ypts[] ){
-   F77_INTEGER_TYPE N;
-   F77_REAL_TYPE *XX;
-   F77_REAL_TYPE *YY;
-   int i;
-
-   XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-   YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
-   if( astOK ){
-
-      for( i = 0; i < n; i++ ){
-         XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
-         YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
-      }
-
-      N = (F77_INTEGER_TYPE) n;
-
-      F77_CALL(pgpoly)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
-                        REAL_ARRAY_ARG(YY) );
-
-      XX = (F77_REAL_TYPE *) astFree( (void *) XX );
-      YY = (F77_REAL_TYPE *) astFree( (void *) YY );
-   }
-}
-
-static void ccpgqwin(float *x1, float *x2, float *y1, float *y2){
-   F77_REAL_TYPE X1;
-   F77_REAL_TYPE X2;
-   F77_REAL_TYPE Y1;
-   F77_REAL_TYPE Y2;
-
-   F77_CALL(pgqwin)( REAL_ARG(&X1), REAL_ARG(&X2), REAL_ARG(&Y1),
-                     REAL_ARG(&Y2) );
-   *x1 = (float) X1;
-   *x2 = (float) X2;
-   *y1 = (float) Y1;
-   *y2 = (float) Y2;
-}
-
-static void ccpgqch(float *ch){
-   F77_REAL_TYPE CH;
-   F77_CALL(pgqch)( REAL_ARG(&CH) );
-   *ch = (float) CH;
-}
-
-static void ccpgqcf(int *cf){
-   F77_INTEGER_TYPE CF;
-   F77_CALL(pgqcf)( INTEGER_ARG(&CF) );
-   *cf = (int) CF;
-}
-
-static void ccgrsyds( int *list, int *nlist, const char *text, int tlen,
-                      int font ){
-   F77_INTEGER_TYPE *LIST;
-   F77_INTEGER_TYPE NLIST;
-   DECLARE_CHARACTER(LTEXT,MXSTRLEN);
-   F77_INTEGER_TYPE FONT;
-   int ftext_length;
-   int i;
-
-   ftext_length = tlen;
-   if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
-   astStringExport( text, LTEXT, ftext_length );
-
-   LIST = (F77_INTEGER_TYPE *) astMalloc( sizeof( F77_INTEGER_TYPE )*(size_t) ftext_length );
-
-   if( astOK ){
-
-      FONT = (F77_INTEGER_TYPE) font;
-
-      F77_CALL(grsyds)( INTEGER_ARRAY_ARG(LIST), INTEGER_ARG(&NLIST),
-                        CHARACTER_ARG(LTEXT), INTEGER_ARG(&FONT) 
-                        TRAIL_ARG(ftext) );
-
-      *nlist = (int) NLIST;
-      for( i = 0; i < ftext_length; i++ ){
-         list[ i ] = (int) LIST[ i ];
-      }
-
-      LIST = (F77_INTEGER_TYPE *) astFree( (void *) LIST );
-   }
-}
-
-static void ccgrsymk( int type, int font, int *symbol ){
-   F77_INTEGER_TYPE TYPE;
-   F77_INTEGER_TYPE FONT;
-   F77_INTEGER_TYPE SYMBOL;
-
-   TYPE = (F77_INTEGER_TYPE) type;
-   FONT = (F77_INTEGER_TYPE) font;
-   F77_CALL(grsymk)( INTEGER_ARG(&TYPE), INTEGER_ARG(&FONT),
-                     INTEGER_ARG(&SYMBOL) );
-   *symbol = (int) SYMBOL;
-}
-
-
-static void ccgrsyxd( int symbol, int *xygrid, int *unused ){
-   F77_INTEGER_TYPE SYMBOL;
-   DECLARE_INTEGER_ARRAY(XYGRID,300);
-   F77_LOGICAL_TYPE UNUSED;
-   int i;
-
-   SYMBOL = (F77_INTEGER_TYPE) symbol;
-   F77_CALL(grsyxd)( INTEGER_ARG(&SYMBOL), INTEGER_ARRAY_ARG(XYGRID), 
-                     LOGICAL_ARG(&UNUSED) );
-
-   *unused = ( UNUSED == F77_TRUE );
-   for( i = 0; i < 5; i++ ) xygrid[ i ] = (int) XYGRID[ i ];
-   for( ; i < 300; i++ ){
-      xygrid[ i ] = (int) XYGRID[ i ];
-      i++;
-      if( ( xygrid[ i ] = (int) XYGRID[ i ] ) == -64 ) break;
-   }
-}
-
-static void ccpgupdt( void ){
-   F77_CALL(pgupdt)();
-}
-
-static void ccpgqci(int *ci){
-   F77_INTEGER_TYPE CI;
-   F77_CALL(pgqci)( INTEGER_ARG(&CI) );
-   *ci = (int) CI;
-}
-
-static void ccpgqls(int *ls){
-   F77_INTEGER_TYPE LS;
-   F77_CALL(pgqls)( INTEGER_ARG(&LS) );
-   *ls = (int) LS;
-}
-
-static void ccpgqlw(int *lw){
-   F77_INTEGER_TYPE LW;
-   F77_CALL(pgqlw)( INTEGER_ARG(&LW) );
-   *lw = (int) LW;
-}
-
-static void ccpgscf(int cf){
-   F77_INTEGER_TYPE CF;
-   CF = (F77_INTEGER_TYPE) cf;
-   F77_CALL(pgscf)( INTEGER_ARG(&CF) );
-}
-
-static void ccpgsch(float ch){
-   F77_REAL_TYPE CH;
-   CH = (F77_REAL_TYPE) ch;
-   F77_CALL(pgsch)( REAL_ARG(&CH) );
-}
-
-static void ccpgsci(int ci){
-   F77_INTEGER_TYPE CI;
-   CI = (F77_INTEGER_TYPE) ci;
-   F77_CALL(pgsci)( INTEGER_ARG(&ci) );
-}
-
-static void ccpgsls(int ls){
-   F77_INTEGER_TYPE LS;
-   LS = (F77_INTEGER_TYPE) ls;
-   F77_CALL(pgsls)( INTEGER_ARG(&LS) );
-}
-
-static void ccpgslw(int lw){
-   F77_INTEGER_TYPE LW;
-   LW = (F77_INTEGER_TYPE) lw;
-   F77_CALL(pgslw)( INTEGER_ARG(&LW) );
-}
-
-static void ccpgqvsz(int units, float *x1, float *x2, float *y1, float *y2){
-   F77_INTEGER_TYPE UNITS;
-   F77_REAL_TYPE X1;
-   F77_REAL_TYPE X2;
-   F77_REAL_TYPE Y1;
-   F77_REAL_TYPE Y2;
-   
-   UNITS = (F77_INTEGER_TYPE) units;
-   F77_CALL(pgqvsz)( INTEGER_ARG(&UNITS), REAL_ARG(&X1), REAL_ARG(&X2),
-                    REAL_ARG(&Y1), REAL_ARG(&Y2) );
-   *x1 = (float) X1;
-   *x2 = (float) X2;
-   *y1 = (float) Y1;
-   *y2 = (float) Y2;
-}
-
-
-
-/* Fortran interfaces for public functions in this module. */
-/* ======================================================= */
-
-
-F77_LOGICAL_FUNCTION(pg3d_findnearest)( INTEGER(N),
-                                        REAL_ARRAY(X),
-                                        REAL_ARRAY(Y),
-                                        REAL_ARRAY(Z),
-                                        INTEGER(ICLOSE) ){
-   GENPTR_INTEGER(N)
-   GENPTR_REAL_ARRAY(X)
-   GENPTR_REAL_ARRAY(Y)
-   GENPTR_REAL_ARRAY(Z)
-   GENPTR_INTEGER(ICLOSE)
-   return PG3DFindNearest( *N, X, Y, Z, ICLOSE ) ? F77_TRUE : F77_FALSE;
-}
-
-
-
-F77_LOGICAL_FUNCTION(pg3d_setcamera)( REAL_ARRAY(EYE),
-                                        REAL_ARRAY(TARGET),
-                                        REAL_ARRAY(UP),
-                                        REAL(SCREEN) ){
-   GENPTR_REAL_ARRAY(EYE)
-   GENPTR_REAL_ARRAY(TARGET)
-   GENPTR_REAL_ARRAY(UP)
-   GENPTR_REAL(SCREEN)
-   return PG3DSetCamera( EYE, TARGET, UP, *SCREEN ) ? F77_TRUE : F77_FALSE;
-}
-
-
-F77_LOGICAL_FUNCTION(pg3d_autocamera)( REAL_ARRAY(LBND),
-                                         REAL_ARRAY(UBND) ){
-   GENPTR_REAL_ARRAY(LBND)
-   GENPTR_REAL_ARRAY(UBND)
-   return PG3DAutoCamera( LBND, UBND ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_seteye)( REAL_ARRAY(EYE) ){
-   GENPTR_REAL_ARRAY(EYE)
-   return PG3DSetEye( EYE ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_setup)( REAL_ARRAY(UP) ){
-   GENPTR_REAL_ARRAY(UP)
-   return PG3DSetUp( UP ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_rotateeye)( INTEGER(DIR), REAL(ANGLE) ){
-   GENPTR_INTEGER(DIR)
-   GENPTR_REAL(ANGLE)
-   return PG3DRotateEye( *DIR, *ANGLE ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(pg3d_forward)( REAL(DISTANCE) ){
-   GENPTR_REAL(DISTANCE)
-   return PG3DForward( *DISTANCE ) ? F77_TRUE : F77_FALSE;
-}
-
-F77_LOGICAL_FUNCTION(ast_g3dmark)( INTEGER(N),
-                                   REAL_ARRAY(X),
-                                   REAL_ARRAY(Y),
-                                   REAL_ARRAY(Z),
-                                   INTEGER(TYPE),
-                                   REAL_ARRAY(NORM)){
-   GENPTR_INTEGER(N)
-   GENPTR_REAL_ARRAY(X)
-   GENPTR_REAL_ARRAY(Y)
-   GENPTR_REAL_ARRAY(Z)
-   GENPTR_INTEGER(TYPE)
-   GENPTR_REAL_ARRAY(NORM)
-   return astG3DMark( *N, X, Y, Z, *TYPE, NORM ) ? F77_TRUE : F77_FALSE;
-   
-}
-
-F77_LOGICAL_FUNCTION(ast_g3dline)( INTEGER(N),
-                                   REAL_ARRAY(X),
-                                   REAL_ARRAY(Y),
-                                   REAL_ARRAY(Z) ){
-   GENPTR_INTEGER(N)
-   GENPTR_REAL_ARRAY(X)
-   GENPTR_REAL_ARRAY(Y)
-   GENPTR_REAL_ARRAY(Z)
-   return astG3DLine( *N, X, Y, Z ) ? F77_TRUE : F77_FALSE;
-   
-}
-
-
-F77_INTEGER_FUNCTION(ast_g3dtext)( CHARACTER(TEXT),
-                                   REAL_ARRAY(REF),
-                                   CHARACTER(JUST),
-                                   REAL_ARRAY(UP),
-                                   REAL_ARRAY(NORM) 
-                                   TRAIL(TEXT) 
-                                   TRAIL(JUST) ){
-   GENPTR_CHARACTER(TEXT)
-   GENPTR_REAL_ARRAY(REF)
-   GENPTR_CHARACTER(JUST)
-   GENPTR_REAL_ARRAY(UP)
-   GENPTR_REAL_ARRAY(NORM)
-   F77_INTEGER_TYPE(RESULT);
-   char *text, *just, *p;
-
-   text = astString( TEXT, TEXT_length );
-   just = astString( JUST, JUST_length );
-      
-/* Ignore trailing spaces in the text */
-   p = text + TEXT_length;
-   while( !*p || *p == ' ' ) *(p--) = 0;
-
-   if( astOK ) {
-      RESULT = (F77_INTEGER_TYPE) astG3DText( text, REF, just, UP, NORM );
-   } else {
-      RESULT = 0;
-   }
-
-   (void) astFree( text );
-   (void) astFree( just );
-
-   return RESULT;
-}
-
-F77_INTEGER_FUNCTION(ast_g3dtxext)( CHARACTER(TEXT),
-                                    REAL_ARRAY(REF),
-                                    CHARACTER(JUST),
-                                    REAL_ARRAY(UP),
-                                    REAL_ARRAY(NORM),
-                                    REAL_ARRAY(XB),
-                                    REAL_ARRAY(YB),
-                                    REAL_ARRAY(ZB),
-                                    REAL_ARRAY(BL) 
-                                    TRAIL(TEXT) 
-                                    TRAIL(JUST) ){
-   GENPTR_CHARACTER(TEXT)
-   GENPTR_REAL_ARRAY(REF)
-   GENPTR_CHARACTER(JUST)
-   GENPTR_REAL_ARRAY(UP)
-   GENPTR_REAL_ARRAY(NORM)
-   GENPTR_REAL_ARRAY(XB)
-   GENPTR_REAL_ARRAY(YB)
-   GENPTR_REAL_ARRAY(ZB)
-   GENPTR_REAL_ARRAY(BL)
-   F77_INTEGER_TYPE(RESULT);
-   char *text, *just, *p;
-
-   text = astString( TEXT, TEXT_length );
-   just = astString( JUST, JUST_length );
-
-/* Ignore trailing spaces in the text */
-   p = text + TEXT_length;
-   while( !*p || *p == ' ' ) *(p--) = 0;
-
-   if( astOK ) {
-      RESULT = (F77_INTEGER_TYPE) astG3DTxExt( text, REF, just, UP, NORM,
-                                               XB, YB, ZB, BL );
-   } else {
-      RESULT = 0;
-   }
-
-   (void) astFree( text );
-   (void) astFree( just );
-
-   return RESULT;
-}
-
-
diff --git a/ast-5.3-1/grf_2.0.c b/ast-5.3-1/grf_2.0.c
deleted file mode 100644
index 4e1ec1b..0000000
--- a/ast-5.3-1/grf_2.0.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-*  Name:
-*     grf_2.0.c
-
-*  Purpose:
-*     Implement the grf module required by AST V2.0 if no graphics system 
-*     is available.
-
-*  Description:
-*     This file implements the low level graphics functions required
-*     by the rest of AST V2.0, by reporting errors when called.
-
-*  Inheritance:
-*     This module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-OCT-1996 (DSB):
-*        Original version.
-*     13-NOV-1996 (DSB):
-*        Modified to issue error messages using astError instead of printf.
-*     23-NOV-2004 (DSB):
-*        Renamed from grf_null.c
-*/
-
-/* Header files */
-/* ============ */
-#include "grf.h"           /* Declare the functions in this module */
-#include "error.h"         /* AST error reporting facilities */
-#include "ast_err.h"       /* AST error codes */
-
-/* Function Prototypes */
-/* =================== */
-static void Report( const char * );
-
-/* Function definitions */
-/* ==================== */
-int astGFlush( void ){
-   Report( "astGFlush");
-   return 0;
-}
-
-int astGLine( int n, const float *x, const float *y ){
-   Report( "astGLine" );
-   return 0;
-}
-
-int astGQch( float *chv, float *chh ){
-   Report( "astGQch" );
-   return 0;
-}
-
-int astGMark( int n, const float *x, const float *y, int type ){
-   Report( "astGMark" );
-   return 0;
-}
-
-int astGText( const char *text, float x, float y, const char *just,
-              float upx, float upy ){
-   Report( "astGText" );
-   return 0;
-}               
-
-int astGTxExt( const char *text, float x, float y, const char *just,
-               float upx, float upy, float *xb, float *yb ){
-   Report( "astGTxExt" );
-   return 0;
-}               
-
-int astGAttr( int attr, double value, double *old_value, int prim ){
-   Report( "astGAttr" );
-   return 0;
-}
-
-static void Report( const char *name ){
-   astError( AST__GRFER, "%s: No graphics facilities are available.", name );
-   astError( AST__GRFER, "Re-link using an option such as '-pgplot' with "
-             "the ast_link script." );
-}
diff --git a/ast-5.3-1/grf_3.2.c b/ast-5.3-1/grf_3.2.c
deleted file mode 100644
index 5b9ded2..0000000
--- a/ast-5.3-1/grf_3.2.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-*  Name:
-*     grf_3.2.c
-
-*  Purpose:
-*     Implement the grf module required by AST V3.2 if no graphics system 
-*     is available.
-
-*  Description:
-*     This file implements the low level graphics functions required
-*     by the rest of AST V3.2, except for those already defined in
-*     grf_2.0.c (i.e. those needed by AST V2.0). These implementations
-*     simply report an error when called.
-
-*  Inheritance:
-*     This module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-NOV-2004 (DSB):
-*        Original version.
-*/
-
-/* Header files */
-/* ============ */
-#include "grf.h"           /* Declare the functions in this module */
-#include "error.h"         /* AST error reporting facilities */
-#include "ast_err.h"       /* AST error codes */
-
-/* Function Prototypes */
-/* =================== */
-static void Report( const char * );
-
-/* Function definitions */
-/* ==================== */
-int astGScales( float *alpha, float *beta ){
-   Report( "astGScales" );
-   return 0;
-}               
-
-int astGCap( int cap, int value ){
-   return 0;
-}               
-
-static void Report( const char *name ){
-   astError( AST__GRFER, "%s: The graphics facilities implement by %s "
-             "(introduced at AST V3.2) are needed but are unavailable.",
-             name, name );
-   astError( AST__GRFER, "Re-link using a suitable option such as '-pgplot' "
-             "with the ast_link script, or add an implementation of this "
-             "function to your 'grf' module." );
-}
diff --git a/ast-5.3-1/grf_pgplot.c b/ast-5.3-1/grf_pgplot.c
deleted file mode 100644
index 37e9549..0000000
--- a/ast-5.3-1/grf_pgplot.c
+++ /dev/null
@@ -1,1411 +0,0 @@
-/*
-*  Name:
-*     grf_pgplot.c
-
-*  Purpose:
-*     Implement the grf module using the PGPLOT graphics system.
-
-*  Description:
-*     This file implements the low level graphics functions required
-*     by the rest of AST, by calling suitable PGPLOT functions (the
-*     FORTRAN PGPLOT interface is used).
-*
-*     This file can be used as a template for the development of
-*     similar modules to support alternative graphics systems.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     27-JUN-1996 (DSB):
-*        Original version.
-*     13-NOV-1996 (DSB):
-*        Use C wrappers for PGPLOT functions.
-*     15-NOV-1996 (RFWS):
-*        Merged the C interface to PGPLOT into this file so that the
-*        interface functions can be static.
-*     7-OCT-1997 (DSB):
-*        Corrected astGText and astGTxExt, by including a check for
-*        reversed axes. Previously, the up-vector was used as supplied
-*        even if the axes had been reversed.
-*     15-OCT-1997 (DSB):
-*        o  Corrected astGText and astGTxExt to take account of non-equal
-*        scales on the two axes.
-*        o  Modified astGTxExt so that it includes any leading or trailing
-*        spaces in the returned box.
-*        o  Added astGAxScale.
-*     28-OCT-1998 (DSB):
-*        o  Changed interpretation of the Width attribute from inches, to
-*        a multiple of a small line width.
-*        o  Wrapper for pgplot F77 subroutine PGQVSZ added.
-*     30-JAN-2004 (DSB):
-*        o  Added GCap
-*        o  Renamed GAxScale as GScales
-*/
-
-/* Macros */
-/* ====== */
-#define MXSTRLEN 80              /* String length at which truncation starts
-                                    within pgqtxt and pgptxt. */
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "f77.h"                 /* FORTRAN <-> C interface macros (SUN/209) */
-#include "c2f77.h"               /* C to FORTRAN interface functions */
-#include "pointset.h"            /* Defines AST__BAD */
-#include "memory.h"              /* Memory allocation facilities */
-#include "error.h"               /* Error reporting facilities */
-#include "grf.h"                 /* Interface to this module */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <string.h>
-
-/* Constants. */
-/* ========== */
-#define R2D 57.29578             /* Radians to degrees factor */
-
-/* Function Prototypes. */
-/* ==================== */
-/* These define a local C interface to the PGPLOT library. */
-static void ccpgline(int n, float xpts[], float ypts[] );
-static void ccpgpt(int n, float xpts[], float ypts[], int symbol);
-static void ccpgptxt(float x, float y, float angle, float fjust, char *text );
-static void ccpgqcf(int *cf);
-static void ccpgqch(float *ch);
-static void ccpgqci(int *ci);
-static void ccpglen(int units, char *text, float *xl, float *yl);
-static void ccpgqcs(int units, float *xch, float *ych);
-static void ccpgqls(int *ls);
-static void ccpgqlw(int *lw);
-static void ccpgqtbg(int *tbci);
-static void ccpgqtxt(float x, float y, float angle, float fjust, char *text, float xbox[], float ybox[]);
-static void ccpgqvp(int units, float *x1, float *x2, float *y1, float *y2);
-static void ccpgqvsz(int units, float *x1, float *x2, float *y1, float *y2);
-static void ccpgqwin(float *x1, float *x2, float *y1, float *y2);
-static void ccpgscf(int cf);
-static void ccpgsch(float ch);
-static void ccpgsci(int ci);
-static void ccpgsls(int ls);
-static void ccpgslw(int lw);
-static void ccpgstbg(int tbci);
-static void ccpgupdt( void );
-
-/* These describe the native Fortran interface to the PGPLOT library. The
-   macros used come from the "f77.h" include file. */
-F77_SUBROUTINE(pgline)( INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y) );
-F77_SUBROUTINE(pgpt)( INTEGER(n), REAL_ARRAY(x), REAL_ARRAY(y), INTEGER(TYPE) );
-F77_SUBROUTINE(pgptxt)( REAL(x), REAL(y), REAL(angle), REAL(fjust), CHARACTER(text) TRAIL(text) );
-F77_SUBROUTINE(pgqcf)( INTEGER(ival) );
-F77_SUBROUTINE(pgqch)( REAL(rval) );
-F77_SUBROUTINE(pgqci)( INTEGER(ival) );
-F77_SUBROUTINE(pgqcs)( INTEGER(units), REAL(chv), REAL(chh) );
-F77_SUBROUTINE(pglen)( INTEGER(units), CHARACTER(text), REAL(xl), REAL(yl) TRAIL(text) );
-F77_SUBROUTINE(pgqls)( INTEGER(ival) );
-F77_SUBROUTINE(pgqlw)( INTEGER(ival) );
-F77_SUBROUTINE(pgqtbg)( INTEGER(tbg) );
-F77_SUBROUTINE(pgqtxt)( REAL(x), REAL(y), REAL(angle), REAL(fjust), CHARACTER(text), REAL_ARRAY(xbox), REAL_ARRAY(ybox) TRAIL(text) );
-F77_SUBROUTINE(pgqvp)( INTEGER(units), REAL(vx1), REAL(vx2), REAL(vy1), REAL(vy2) );
-F77_SUBROUTINE(pgqvsz)( INTEGER(units), REAL(x1), REAL(x2), REAL(y1), REAL(y2) );
-F77_SUBROUTINE(pgqwin)( REAL(wx1), REAL(wx2), REAL(wy1), REAL(wy2) );
-F77_SUBROUTINE(pgscf)( INTEGER(ival) );
-F77_SUBROUTINE(pgsch)( REAL(rval) );
-F77_SUBROUTINE(pgsci)( INTEGER(ival) );
-F77_SUBROUTINE(pgsls)( INTEGER(ival) );
-F77_SUBROUTINE(pgslw)( INTEGER(ival) );
-F77_SUBROUTINE(pgstbg)( INTEGER(tbg) );
-F77_SUBROUTINE(pgupdt)( );
-
-/* Externally visible functions. */
-/* ============================= */
-/* These implement the "grf" interface in terms of the local C interface
-   to PGPLOT. */
-int astGFlush( void ){
-/*
-*+
-*  Name:
-*     astGFlush
-
-*  Purpose:
-*     Flush all pending graphics to the output device.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGFlush( void )
-
-*  Description:
-*     This function ensures that the display device is up-to-date,
-*     by flushing any pending graphics to the output device.
-
-*  Parameters:
-*     None.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*-
-*/
-
-   ccpgupdt();
-   return 1;
-}
-
-int astGCap( int cap, int value ){
-/*
-*+
-*  Name:
-*     astGCap
-
-*  Purpose:
-*     Indicate if this grf module has a given capability.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGCap( int cap, int value )
-
-*  Description:
-*     This function is called by the AST Plot class to determine if the
-*     grf module has a given capability, as indicated by the "cap"
-*     argument.
-
-*  Parameters:
-*     cap
-*        The capability being inquired about. This will be one of the
-*        following constants defined in grf.h:
-*        
-*        GRF__SCALES: This function should return a non-zero value if 
-*        it implements the astGScales function, and zero otherwise. The 
-*        supplied "value" argument should be ignored.
-*
-*        GRF__MJUST: This function should return a non-zero value if 
-*        the astGText and astGTxExt functions recognise "M" as a 
-*        character in the justification string. If the first character of
-*        a justification string is "M", then the text should be justified
-*        with the given reference point at the bottom of the bounding box. 
-*        This is different to "B" justification, which requests that the
-*        reference point be put on the baseline of the text, since some 
-*        characters hang down below the baseline. If the astGText or
-*        astGTxExt function cannot differentiate between "M" and "B",
-*        then this function should return zero, in which case "M"
-*        justification will never be requested by Plot. The supplied
-*        "value" argument should be ignored.
-*
-*        GRF__ESC: This function should return a non-zero value if the
-*        astGText and astGTxExt functions can recognise and interpret
-*        graphics escape sequences within the supplied string. These
-*        escape sequences are described below. Zero should be returned 
-*        if escape sequences cannot be interpreted (in which case the
-*        Plot class will interpret them itself if needed). The supplied
-*        "value" argument should be ignored only if escape sequences cannot 
-*        be interpreted by astGText and astGTxExt. Otherwise, "value"
-*        indicates whether astGText and astGTxExt should interpret escape
-*        sequences in subsequent calls. If "value" is non-zero then
-*        escape sequences should be interpreted by astGText and
-*        astGTxExt. Otherwise, they should be drawn as literal text.
-
-*  Returned Value:
-*     The return value, as described above. Zero should be returned if
-*     the supplied capability is not recognised.
-
-*  Escape Sequences:
-*     Escape sequences are introduced into the text string by a percent 
-*     "%" character. The following escape sequences are currently recognised 
-*     ("..." represents a string of one or more decimal digits):
-*
-*       %%      - Print a literal "%" character (type GRF__ESPER ).
-*
-*       %^...+  - Draw subsequent characters as super-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the super-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF__ESSUP ).
-*       %^+     - Draw subsequent characters with the normal base-line.
-*
-*       %v...+  - Draw subsequent characters as sub-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the sub-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF__ESSUB ).
-*
-*       %v+     - Draw subsequent characters with the normal base-line
-*                 (equivalent to %^+).
-*
-*       %>...+  - Leave a gap before drawing subsequent characters.
-*                 The digits "..." give the size of the gap, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF__ESGAP ).
-*
-*       %<...+  - Move backwards before drawing subsequent characters.
-*                 The digits "..." give the size of the movement, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text (type GRF_ESBAC).
-*
-*       %s...+  - Change the Size attribute for subsequent characters. The
-*                 digits "..." give the new Size as a fraction of the 
-*                 "normal" Size, scaled so that a value of "100" corresponds 
-*                 to 1.0  (type GRF__ESSIZ ).
-*
-*       %s+     - Reset the Size attribute to its "normal" value.
-*
-*       %w...+  - Change the Width attribute for subsequent characters. The
-*                 digits "..." give the new width as a fraction of the 
-*                 "normal" Width, scaled so that a value of "100" corresponds 
-*                 to 1.0  (type GRF__ESWID ).
-*
-*       %w+     - Reset the Size attribute to its "normal" value.
-*
-*       %f...+  - Change the Font attribute for subsequent characters. The
-*                 digits "..." give the new Font value  (type GRF__ESFON ).
-*
-*       %f+     - Reset the Font attribute to its "normal" value.
-*
-*       %c...+  - Change the Colour attribute for subsequent characters. The
-*                 digits "..." give the new Colour value  (type GRF__ESCOL ).
-*
-*       %c+     - Reset the Colour attribute to its "normal" value.
-*
-*       %t...+  - Change the Style attribute for subsequent characters. The
-*                 digits "..." give the new Style value  (type GRF__ESSTY ). 
-*
-*       %t+     - Reset the Style attribute to its "normal" value.
-*
-*       %-      - Push the current graphics attribute values onto the top of 
-*                 the stack - see "%+" (type GRF__ESPSH).
-*
-*       %+      - Pop attributes values of the top the stack - see "%-". If
-*                 the stack is empty, "normal" attribute values are restored
-*                 (type GRF__ESPOP).
-*     
-*     The astFindEscape function (in libast.a) can be used to locate escape 
-*     sequences within a text string. It has the following signature:
-*
-*     #include "plot.h"
-*     int astFindEscape( const char *text, int *type, int *value, int *nc )
-*
-*     Parameters:
-*        text
-*           Pointer to the string to be checked.
-*        type
-*           Pointer to a location at which to return the type of escape
-*           sequence. Each type is identified by a symbolic constant defined
-*           in grf.h and is indicated in the above section. The returned value 
-*           is undefined if the supplied text does not begin with an escape 
-*           sequence.
-*        value
-*           Pointer to a lcation at which to return the integer value
-*           associated with the escape sequence. All usable values will be
-*           positive. Zero is returned if the escape sequence has no associated
-*           integer. A value of -1 indicates that the attribute identified by 
-*           "type" should be reset to its "normal" value (as established using 
-*           the astGAttr function, etc). The returned value is undefined if 
-*           the supplied text does not begin with an escape sequence.
-*        nc
-*           Pointer to a location at which to return the number of
-*           characters read by this call. If the text starts with an escape
-*           sequence, the returned value will be the number of characters in
-*           the escape sequence. Otherwise, the returned value will be the
-*           number of characters prior to the first escape sequence, or the 
-*           length of the supplied text if no escape sequence is found.
-      
-*     Returned Value:
-*        A non-zero value is returned if the supplied text starts with a
-*        graphics escape sequence, and zero is returned otherwise.
-
-*-
-*/
-
-   int result = 0;
-   if( cap == GRF__SCALES ) result = 1;
-   return result;
-}
-
-int astGLine( int n, const float *x, const float *y ){
-/*
-*+
-*  Name:
-*     astGLine
-
-*  Purpose:
-*     Draw a polyline (i.e. a set of connected lines).
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGLine( int n, const float *x, const float *y )
-
-*  Description:
-*     This function displays lines joining the given positions.
-
-*  Parameters:
-*     n
-*        The number of positions to be joined together.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  Nothing is done if "n" is less than 2, or if a NULL pointer is
-*     given for either "x" or "y".
-
-*-
-*/
-
-   if( n > 1 && x && y ) ccpgline( n, (float *) x, (float *) y );
-   return 1;
-}
-
-int astGMark( int n, const float *x, const float *y, int type ){
-/*
-*+
-*  Name:
-*     astGMark
-
-*  Purpose:
-*     Draw a set of markers.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGMark( int n, const float *x, const float *y, int type )
-
-*  Description:
-*     This function displays markers at the given positions.
-
-*  Parameters:
-*     n
-*        The number of markers to draw.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-*     type
-*        An integer which can be used to indicate the type of marker symbol
-*        required.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  Nothing is done if "n" is less than 1, or if a NULL pointer is
-*     given for either "x" or "y".
-
-*-
-*/
-
-   if( n > 0 && x && y ) ccpgpt( n, (float *) x, (float *) y, type );
-   return 1;
-}
-
-int astGText( const char *text, float x, float y, const char *just,
-              float upx, float upy ){
-/*
-*+
-*  Name:
-*     astGText
-
-*  Purpose:
-*     Draw a character string.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGText( const char *text, float x, float y, const char *just,
-*                   float upx, float upy )
-
-*  Description:
-*     This function displays a character string at a given position
-*     using a specified justification and up-vector.
-
-*  Parameters:
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-*     upy
-*        The y component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  Any graphics within the rotated box enclosing the text are erased.
-*     -  A NULL value for "just" causes a value of "CC" to be used.
-*     -  Both "upx" and "upy" being zero causes an error.
-*     -  Any unrecognised character in "just" causes an error.
-*-
-*/
-
-/* Local Variables: */
-   char lj[ 2 ];
-   float uplen, xbox[ 4 ], ybox[ 4 ];   
-   float angle, fjust, hu, test, alpha, beta;
-   int i, tbg;   
-
-/* Check that there is something to draw. */
-   if( text && text[ 0 ] != 0 ){
-
-/* Fill in any missing parts of the justification string. */
-      if( just ){
-         if( just[ 0 ] == 'T' || just[ 0 ] == 'C' || just[ 0 ] == 'B' ){
-            lj[ 0 ] = just[ 0 ];
-         } else {
-            astError( AST__GRFER, "astGText: Justification string '%s' is "
-                      "invalid.", just );
-            return 0;
-         }
-
-         if( just[ 1 ] == 'L' || just[ 1 ] == 'C' || just[ 1 ] == 'R' ){
-            lj[ 1 ] = just[ 1 ];
-         } else {
-            astError( AST__GRFER, "astGText: Justification string '%s' "
-                      "is invalid.", just );
-            return 0;
-         }
-
-      } else {
-         lj[ 0 ] = 'C';
-         lj[ 1 ] = 'C';
-      }
-
-/* Find the conversion factors between increment in world coordinate axes, 
-   and the corresponding increments in millimetres ( Xmm = alpha*Xworld,
-   Ymm = beta*Yworld ). */
-      if( !astGScales( &alpha, &beta ) ) return 0;
-
-/* If either axis is reversed, reverse the supplied up-vector components
-   so that they refer to the world-coordinates axes. */
-      if( alpha < 0.0 ) upx = -upx;
-      if( beta < 0.0 ) upy = -upy;
-
-/* Get the angle between the text base-line and horizontal. */
-      angle = atan2( -(double) upx*alpha, (double) upy*beta )*R2D;
-
-/* Get the fractional horizontal justification as needed by PGPLOT. */
-      if( lj[ 1 ] == 'L' ) {
-         fjust = 0.0;
-      } else if( lj[ 1 ] == 'R' ) {
-         fjust = 1.0;
-      } else {
-         fjust = 0.5;
-      }
-
-/* Unless the requested justification is "Bottom", we need to adjust
-   the supplied reference position before we use it with PGPLOT because
-   PGPLOT assumes "Bottom" justification. */
-      if( lj[0] != 'B' ) {
-
-/* Get the bounding box of the string. Note, only the size of the box is
-   significant here, not its position. Also note, leading and trailing
-   spaces are not included in the bounding box. */
-         ccpgqtxt( x, y, angle, fjust, (char *) text, xbox, ybox );
-
-/* Normalise the up-vector in world coordinates. */
-         uplen = sqrt( (double) (upx*upx + upy*upy) );
-         if( uplen > 0.0 ){ 
-            upx /= uplen;
-            upy /= uplen;
-         } else {
-            astError( AST__GRFER, "astGText: Zero length up-vector supplied.");
-            return 0;
-         }
-      
-/* Find the height of the text above the base-line. Note, the PGPLOT  
-   manual is not clear about the order of the corners returned by
-   pgqtxt, so we have to find the largest distance between
-   the corners in the direction of the supplied up-vector. */
-         hu = 0.0;
-         for( i = 0; i < 4; i++ ){
-            test = upx*( xbox[ i ] - x ) + upy*( ybox[ i ] - y );
-            if( test > hu ) hu = test;
-         }
-
-/* Adjust the vertical position of the reference point, since PGPLOT
-   requires it to be at the bottom of the text. */
-         if( lj[ 0 ] == 'T' ){
-            x -= upx*hu;
-            y -= upy*hu;
-         } else if( lj[ 0 ] == 'C' ){
-            x -= 0.5*upx*hu;
-            y -= 0.5*upy*hu;
-         }
-      }
-
-/* Display the text, erasing any graphics. */
-      ccpgqtbg( &tbg );
-      ccpgstbg( 0 );
-      ccpgptxt( x, y, angle, fjust, (char *) text ); 
-      ccpgstbg( tbg );
-   }
-   
-/* Return. */
-   return 1;
-}               
-
-int astGScales( float *alpha, float *beta ){
-/*
-*+
-*  Name:
-*     astGScales
-
-*  Purpose:
-*     Get the axis scales.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGScales( float *alpha, float *beta )
-
-*  Description:
-*     This function returns two values (one for each axis) which scale
-*     increments on the corresponding axis into a "normal" coordinate
-*     system in which:
-*        1 - The axes have equal scale in terms of (for instance)
-*            millimetres per unit distance.
-*        2 - X values increase from left to right.
-*        3 - Y values increase from bottom to top.
-
-*  Parameters:
-*     alpha
-*        A pointer to the location at which to return the scale for the
-*        X axis (i.e. Xnorm = alpha*Xworld).
-*     beta
-*        A pointer to the location at which to return the scale for the
-*        Y axis (i.e. Ynorm = beta*Yworld).
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*-
-*/
-
-/* Local Variables: */
-   float nx1, nx2, ny1, ny2, wx1, wx2, wy1, wy2;
-   int ret;   
-
-/* Find the conversion factors between increment in world coordinate axes, 
-   and the corresponding increments in millimetres ( Xmm = alpha*Xworld,
-   Ymm = beta*Yworld ). */
-   ccpgqvp( 2, &nx1, &nx2, &ny1, &ny2 );
-   ccpgqwin( &wx1, &wx2, &wy1, &wy2 );
-   
-   if( wx2 != wx1 && wy2 != wy1 && 
-       nx2 != nx1 && ny2 != ny1 ) {
-      *alpha= ( nx2 - nx1 ) / ( wx2 - wx1 );
-      *beta = ( ny2 - ny1 ) / ( wy2 - wy1 );
-      ret = 1;
-   } else {
-      astError( AST__GRFER, "astGScales: The graphics window or viewport has zero size." );
-      ret = 0;
-   }
-
-   return ret;
-}
-
-int astGTxExt( const char *text, float x, float y, const char *just,
-               float upx, float upy, float *xb, float *yb ){
-/*
-*+
-*  Name:
-*     astGTxExt
-
-*  Purpose:
-*     Get the extent of a character string.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGTxExt( const char *text, float x, float y, const char *just,
-*                   float upx, float upy, float *xb, float *yb )
-
-*  Description:
-*     This function returns the corners of a box which would enclose the 
-*     supplied character string if it were displayed using astGText.
-*
-*     The returned box INCLUDES any leading or trailing spaces.
-
-*  Parameters:
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-*     upy
-*        The y component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-*     xb
-*        An array of 4 elements in which to return the x coordinate of
-*        each corner of the bounding box.
-*     yb
-*        An array of 4 elements in which to return the y coordinate of
-*        each corner of the bounding box.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-*     -  The order of the corners is anti-clockwise (in world coordinates)
-*        starting at the bottom left.
-*     -  A NULL value for "just" causes a value of "CC" to be used.
-*     -  Both "upx" and "upy" being zero causes an error.
-*     -  Any unrecognised character in "just" causes an error.
-*     -  Zero is returned for all bounds of the box if an error occurs.
-
-*-
-*/
-
-/* Local Variables: */
-   char lj[ 2 ];
-   float udx, udy, vdx, vdy, vx, vy, uplen, xbox[ 4 ], 
-         ybox[ 4 ], uxu, uyu, uxd, uyd, ux, uy;   
-   float angle, width, test, xl, yl;
-   float alpha, beta, xc, yc, hu, hd, a, b;
-   int i;   
-
-/* Initialise the returned values to indicate no box available. */
-   for( i = 0; i < 4; i++ ){
-      xb[ i ] = 0.0;
-      yb[ i ] = 0.0;
-   }
-
-/* Check that there is something to draw. */
-   if( text && text[ 0 ] != 0 ){
-
-/* Fill in any missing parts of the justification string. */
-      if( just ){
-         if( just[ 0 ] == 'T' || just[ 0 ] == 'C' || just[ 0 ] == 'B' ){
-            lj[ 0 ] = just[ 0 ];
-         } else {
-            astError( AST__GRFER, "astGTxExt: Justification string '%s' is "
-                      "invalid.", just );
-            return 0;
-         }
-
-         if( just[ 1 ] == 'L' || just[ 1 ] == 'C' || just[ 1 ] == 'R' ){
-            lj[ 1 ] = just[ 1 ];
-         } else {
-            astError( AST__GRFER, "astGTxExt: Justification string '%s' is "
-                      "invalid.", just );
-            return 0;
-         }
-
-      } else {
-         lj[ 0 ] = 'C';
-         lj[ 1 ] = 'C';
-      }
-
-/* Find the conversion factors between increment in world coordinate axes, 
-   and the corresponding increments in millimetres ( Xmm = alpha*Xworld,
-   Ymm = beta*Yworld ). */
-      if( !astGScales( &alpha, &beta ) ) return 0;
-
-/* If either axis is reversed, reverse the supplied up-vector components
-   so that they refer to the world-coordinates axes. */
-      if( alpha < 0.0 ) upx = -upx;
-      if( beta < 0.0 ) upy = -upy;
-
-/* Convert the up-vector into millimetres. */
-      ux = alpha*upx;
-      uy = beta*upy;
-
-/* Normalise the up-vector to a length of 1 millimetre. */
-      uplen = sqrt( (double) (ux*ux + uy*uy) );
-      if( uplen > 0.0 ){ 
-         ux /= uplen;
-         uy /= uplen;
-      } else {
-         astError( AST__GRFER, "astGText: Zero length up-vector supplied.");
-         return 0;
-      }
-
-/* Form the base-line vector by rotating the up-vector by 90 degrees 
-   clockwise. */
-      vx = uy;
-      vy = -ux;
-
-/* Get the angle between the text base-line and horizontal. */
-      angle = atan2( (double) vy, (double) vx )*R2D;
-
-/* Get the bounding box of the string drawn with its bottom left corner
-   at the origin. */
-      ccpgqtxt( 0.0, 0.0, angle, 0.0, (char *) text, xbox, ybox );
-
-/* Convert the returned bounding box world coordinates into millimetres. */
-      for( i = 0; i < 4; i++ ){
-         xbox[ i ] *= alpha;
-         ybox[ i ] *= beta;
-      }
-
-/* Find the height of the bounding box, in millimetres. Note, 
-   the PGPLOT manual is not clear about the order of the corners 
-   returned by pgqtxt, so we have to find the largest distance between
-   the corners in the direction of the supplied up-vector. The reference
-   point is on the text base-line which is not usually at the bottom of
-   the bounding box (some letters - like "y" - extend below the base-line).
-   Find the distance from the base-line to the top (hu) and bottom (hd)
-   of the bounding box. */
-      hu = -FLT_MAX;
-      hd = FLT_MAX;
-      for( i = 0; i < 4; i++ ){
-         test = ux*xbox[ i ] + uy*ybox[ i ];
-         if( test > hu ) hu = test;
-         if( test < hd ) hd = test;
-      }
-
-/* Get an up and a down vector scaled to the height/depth of the
-   bounding box above/below the text base-line . */
-      uxu = ux*hu;
-      uyu = uy*hu;
-      uxd = ux*hd;
-      uyd = uy*hd;
-
-/* The bounding box returned by pgqtxt does not include any leading or
-   trailing spaces. We need to include such spaces in the returned box.
-   To do this we get the length of the text string in millimetres
-   using pglen instead of using the bounding box returned by pgqtxt. */
-      ccpglen( 2, (char *) text, &xl, &yl );
-
-/* The abolute width of the string in millimetres may depend on the   
-   up-vector. The values returned by pglen are for horizontal and
-   vertical text. Find the width using the supplied up-vector. */
-      a = uy*xl;
-      b = ux*yl;
-      width = sqrt( a*a + b*b );
-
-/* The pglen function returns a value which is slightly smaller than
-   the area cleared to hold the text when written using pgptxt. Increase
-   the text width so that it is about equal to the area cleared. */
-      width += 0.2*hu;
-
-/* Scale the base-line vector so that its length is equal to the width
-   of the bounding box (including spaces). */
-      vx *= width;
-      vy *= width;
-
-/* Convert the base-line vector back into world coordinates. */
-      vx /= alpha;
-      vy /= beta;
-
-/* Convert the up and down vectors into world coordinates. */
-      uxu /= alpha;
-      uyu /= beta;
-      uxd /= alpha;
-      uyd /= beta;
-
-/* Find the coordinates at the centre of the bounding box in world
-   coordinates. */
-      xc = x;
-      yc = y;
-
-      if( lj[0] == 'B' ) {
-         xc += 0.5*uxu;
-         yc += 0.5*uyu;
-      } else if( lj[0] == 'T' ) {
-         xc -= 0.5*uxu;
-         yc -= 0.5*uyu;
-      }
-
-      if( lj[1] == 'L' ) {
-         xc += 0.5*vx;
-         yc += 0.5*vy;
-      } else if( lj[1] == 'R' ) {
-         xc -= 0.5*vx;
-         yc -= 0.5*vy;
-      }
-
-/* Get the corners of the bounding box. */
-      vdx = 0.5*vx;
-      vdy = 0.5*vy;
-      udx = 0.5*uxu;
-      udy = 0.5*uyu;
-
-/* Bottom left corner... */
-      xb[ 0 ] = xc - vdx - udx + uxd;
-      yb[ 0 ] = yc - vdy - udy + uyd;
-
-/* Bottom right corner... */
-      xb[ 1 ] = xc + vdx - udx + uxd;
-      yb[ 1 ] = yc + vdy - udy + uyd;
-
-/* Top right corner... */
-      xb[ 2 ] = xc + vdx + udx;
-      yb[ 2 ] = yc + vdy + udy;
-
-/* Top left corner... */
-      xb[ 3 ] = xc - vdx + udx;
-      yb[ 3 ] = yc - vdy + udy;
-
-   }
-   
-/* Return. */
-   return 1;
-}               
-
-int astGQch( float *chv, float *chh ){
-/*
-*+
-*  Name:
-*     astGQch
-
-*  Purpose:
-*     Return the character height in world coordinates.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int astGQch( float *chv, float *chh )
-
-*  Description:
-*     This function returns the heights of characters drawn vertically and
-*     horizontally in world coordinates.
-
-*  Parameters:
-*     chv
-*        A pointer to the double which is to receive the height of
-*        characters drawn with a vertical baseline . This will be an 
-*        increment in the X axis.
-*     chh
-*        A pointer to the double which is to receive the height of
-*        characters drawn with a horizontal baseline. This will be an 
-*        increment in the Y axis.
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*-
-*/
-
-/* Local Variables: */
-   float vx1,vx2,vy1,vy2,wx1,wx2,wy1,wy2;
-
-/* Get the character height in normalised device coordinates */
-   ccpgqcs( 0, chv, chh );
-
-/* Get the bounds of the PGPLOT viewport in normalised device
-   coordinates. */
-   ccpgqvp( 0, &vx1, &vx2, &vy1, &vy2 );
-
-/* Get the bounds of the PGPLOT window in world coordinates. */
-   ccpgqwin( &wx1, &wx2, &wy1, &wy2 );
-
-/* Convert the text height from normalised device coordinates into world 
-   coordinates for vertical text. Print an error message if the viewport 
-   has zero size. */
-   if( vx1 != vx2 ){
-      *chv *= ( wx2 - wx1 )/( vx2 - vx1 );
-
-   } else {
-      astError( AST__GRFER, "astGQch: The graphics viewport has zero size "
-                "in the X direction.");
-      return 0;
-   }   
-
-/* Convert the text height from normalised device coordinates into world 
-   coordinates for horizontal text. Print an error message if the viewport 
-   has zero size. */
-   if( vy1 != vy2 ){
-      *chh *= ( wy2 - wy1 )/( vy2 - vy1 );
-   } else {
-      astError( AST__GRFER, "astGQch: The graphics viewport has zero size "
-                "in the Y direction.");
-      return 0;
-   }   
-
-/* Return. */
-   return 1;
-}               
-
-int astGAttr( int attr, double value, double *old_value, int prim ){
-/*
-*+
-*  Name:
-*     astGAttr
-
-*  Purpose:
-*     Enquire or set a graphics attribute value.
-
-*  Synopsis:
-*     #include "grf.h"
-*     int int astGAttr( int attr, double value, double *old_value, int prim )
-
-*  Description:
-*     This function returns the current value of a specified graphics
-*     attribute, and optionally establishes a new value. The supplied
-*     value is converted to an integer value if necessary before use.
-
-*  Parameters:
-*     attr
-*        An integer value identifying the required attribute. The
-*        following symbolic values are defined in grf.h:
-*
-*           GRF__STYLE  - Line style.
-*           GRF__WIDTH  - Line width.
-*           GRF__SIZE   - Character and marker size scale factor.
-*           GRF__FONT   - Character font.
-*           GRF__COLOUR - Colour index.
-*     value 
-*        A new value to store for the attribute. If this is AST__BAD
-*        no value is stored.
-*     old_value 
-*        A pointer to a double in which to return the attribute value.
-*        If this is NULL, no value is returned.
-*     prim
-*        The sort of graphics primitive to be drawn with the new attribute.
-*        Identified by the following values defined in grf.h:
-*           GRF__LINE
-*           GRF__MARK
-*           GRF__TEXT
-
-*  Returned Value:
-*     A value of 0 is returned if an error occurs, and 1 is returned
-*     otherwise.
-
-*  Notes:
-
-*-
-*/
-
-   int ival;
-   float rval, dx, dy, deflw, x1, x2, y1, y2;
-
-/* If required retrieve the current line style, and set a new line style. */
-   if( attr == GRF__STYLE ){
-      ccpgqls( &ival );
-      if( old_value ) *old_value = (double) ival;
-
-      if( value != AST__BAD ){
-         ival = (int) ( value + 0.5 );
-         if( value < 0.0 ) ival -= 1;
-
-         ival = ( ival - 1 ) % 5;
-         ival += ( ival < 0 ) ? 6 : 1;
-
-         ccpgsls( ival );
-      }
-
-/* If required retrieve the current line width, and set a new line width. 
-   Line width is stored in Plot as a scale factor (1.0 for the default line
-   width which is a fixed fraction of the diagonal of the view surface), but 
-   pgplot stores it in units of 0.005 of an inch. */
-   } else if( attr == GRF__WIDTH ){
-
-/* Get the bounds of the view surface in inches. */
-      ccpgqvsz( 1, &x1, &x2, &y1, &y2 );
-
-/* Find the default line width in inches (i.e. 0.0005 of the length
-   of the view surface diagonal). */
-      dx = ( x1 - x2 );
-      dy = ( y1 - y2 );
-      deflw = 0.0005*sqrt( (double )( dx*dx + dy*dy ) );
-
-/* Get the current pgplot line width in units of 0.005 of an inch. */
-      ccpgqlw( &ival );
-
-/* If required, return the factor by which this exceeds the default line
-   width found above. */
-      if( old_value ) *old_value = (double)( ival )/( 200.0 * deflw );
-
-/* If a new line width has been provided, the pgplot line width needs to
-   be set to the corresponding absolute value. */
-      if( value != AST__BAD ){
-         ival = (int) ( 200.0*value*deflw );
-         if( ival < 1 ) {
-            ival = 1;
-         } else if( ival > 201 ){
-            ival = 201;
-         } 
-         ccpgslw( ival );
-      }
-
-/* If required retrieve the current character size, and set a new size. 
-   The attribute value should be a factor by which to multiply the
-   default character size. */
-   } else if( attr == GRF__SIZE ){
-      ccpgqch( &rval );
-      if( old_value ) *old_value = (double) rval;
-
-      if( value != AST__BAD ){
-         ccpgsch( (float) value );
-      }
-
-/* If required retrieve the current character font, and set a new font. */
-   } else if( attr == GRF__FONT ){
-      ccpgqcf( &ival );
-      if( old_value ) *old_value = (double) ival;
-
-      if( value != AST__BAD ){
-         ival = (int) ( value + 0.5 );
-         if( value < 0.0 ) ival -= 1;
-
-         ival = ( ival - 1 ) % 4;
-         ival += ( ival < 0 ) ? 5 : 1;
-         ccpgscf( ival );
-      }
-
-/* If required retrieve the current colour index, and set a new colour
-   index. */
-   } else if( attr == GRF__COLOUR ){
-      ccpgqci( &ival );
-      if( old_value ) *old_value = (double) ival;
-
-      if( value != AST__BAD ){
-         ival = (int) ( value + 0.5 );
-         if( ival < 0 ) ival = 1;
-         ccpgsci( ival );
-      }
-
-/* Give an error message for any other attribute value. */
-   } else {     
-      astError( AST__GRFER, "astGAttr: Unknown graphics attribute '%d' "
-                "requested.", attr );
-      return 0;
-   }
-
-/* Return. */
-   return 1;
-}
-
-/* Local Functions. */
-/* ================ */
-/* These implement the local C interface to PGPLOT in terms of its
-   native Fortran interface. Only those PGPLOT functions used within
-   this module are included. */
-static void ccpgline(int n, float xpts[], float ypts[] ){
-   F77_INTEGER_TYPE N;
-   F77_REAL_TYPE *XX;
-   F77_REAL_TYPE *YY;
-   int i;
-
-   XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-   YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
-   if( astOK ){
-
-      for( i = 0; i < n; i++ ){
-         XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
-         YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
-      }
-
-      N = (F77_INTEGER_TYPE) n;
-
-      F77_CALL(pgline)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
-                        REAL_ARRAY_ARG(YY) );
-
-      XX = (F77_REAL_TYPE *) astFree( (void *) XX );
-      YY = (F77_REAL_TYPE *) astFree( (void *) YY );
-   }
-}
-
-static void ccpgpt(int n, float xpts[], float ypts[], int symbol){
-   F77_INTEGER_TYPE N;
-   F77_REAL_TYPE *XX;
-   F77_REAL_TYPE *YY;
-   F77_INTEGER_TYPE SYMBOL;
-   int i;
-
-   XX = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-   YY = (F77_REAL_TYPE *) astMalloc( sizeof( F77_REAL_TYPE )*(size_t) n );
-
-   if( astOK ){
-
-      for( i = 0; i < n; i++ ){
-         XX[ i ] = (F77_REAL_TYPE) xpts[ i ];
-         YY[ i ] = (F77_REAL_TYPE) ypts[ i ];
-      }
-
-      N = (F77_INTEGER_TYPE) n;
-      SYMBOL = (F77_INTEGER_TYPE) symbol;
-
-
-      F77_CALL(pgpt)( INTEGER_ARG(&N), REAL_ARRAY_ARG(XX),
-                      REAL_ARRAY_ARG(YY), INTEGER_ARG(&SYMBOL) );
-
-      XX = (F77_REAL_TYPE *) astFree( (void *) XX );
-      YY = (F77_REAL_TYPE *) astFree( (void *) YY );
-   }
-}
-
-static void ccpgptxt(float x, float y, float angle, float fjust, char *text ){
-   F77_REAL_TYPE X;   
-   F77_REAL_TYPE Y;   
-   F77_REAL_TYPE ANGLE;   
-   F77_REAL_TYPE FJUST;   
-   DECLARE_CHARACTER(LTEXT,MXSTRLEN);
-   int ftext_length;
-
-   X = (F77_REAL_TYPE) x;
-   Y = (F77_REAL_TYPE) y;
-   ANGLE = (F77_REAL_TYPE) angle;
-   FJUST = (F77_REAL_TYPE) fjust;
-
-   ftext_length = strlen( text );
-   if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
-   astStringExport( text, LTEXT, ftext_length );
-
-   F77_CALL(pgptxt)( REAL_ARG(&X), REAL_ARG(&Y), REAL_ARG(&ANGLE), 
-                     REAL_ARG(&FJUST), CHARACTER_ARG(LTEXT)
-                     TRAIL_ARG(ftext) );
-}
-
-static void ccpgqtxt(float x, float y, float angle, float fjust, char *text,
-                     float xbox[], float ybox[]){
-   F77_REAL_TYPE X;   
-   F77_REAL_TYPE Y;   
-   F77_REAL_TYPE ANGLE;   
-   F77_REAL_TYPE FJUST;   
-   DECLARE_CHARACTER(LTEXT,MXSTRLEN);
-   F77_REAL_TYPE XBOX[ 4 ];
-   F77_REAL_TYPE YBOX[ 4 ];
-   int i;
-   int ftext_length;
-
-   X = (F77_REAL_TYPE) x;
-   Y = (F77_REAL_TYPE) y;
-   ANGLE = (F77_REAL_TYPE) angle;
-   FJUST = (F77_REAL_TYPE) fjust;
-
-   ftext_length = strlen( text );
-   if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
-   astStringExport( text, LTEXT, ftext_length );
-
-   F77_CALL(pgqtxt)( REAL_ARG(&X), REAL_ARG(&Y), REAL_ARG(&ANGLE), 
-                     REAL_ARG(&FJUST), CHARACTER_ARG(LTEXT),
-                     REAL_ARRAY_ARG(XBOX), REAL_ARRAY_ARG(YBOX)
-                     TRAIL_ARG(ftext) );
-
-   for( i = 0; i < 4; i++ ){
-      xbox[ i ] = (float) XBOX[ i ];
-      ybox[ i ] = (float) YBOX[ i ];
-   }
-
-}
-
-static void ccpgqtbg(int *tbci){
-   F77_INTEGER_TYPE TBCI;
-   F77_CALL(pgqtbg)( INTEGER_ARG(&TBCI) );
-   *tbci = (int) TBCI;
-}
-
-static void ccpgstbg(int tbci){
-   F77_INTEGER_TYPE TBCI;
-   TBCI = (F77_INTEGER_TYPE) tbci;
-   F77_CALL(pgstbg)( INTEGER_ARG(&TBCI) );
-}
-
-static void ccpgqcs(int units, float *xch, float *ych){
-   F77_INTEGER_TYPE UNITS;
-   F77_REAL_TYPE XCH;
-   F77_REAL_TYPE YCH;
-   UNITS = (F77_INTEGER_TYPE) units;
-
-   F77_CALL(pgqcs)( INTEGER_ARG(&UNITS), REAL_ARG(&XCH), REAL_ARG(&YCH) );
-
-   *xch = (float) XCH;
-   *ych = (float) YCH;
-}
-
-static void ccpglen(int units, char *text, float *xl, float *yl ){
-   F77_INTEGER_TYPE UNITS;
-   F77_REAL_TYPE XL;
-   F77_REAL_TYPE YL;
-   DECLARE_CHARACTER(LTEXT,MXSTRLEN);
-   int ftext_length;
-
-   UNITS = (F77_INTEGER_TYPE) units;
-
-
-   ftext_length = strlen( text );
-   if( ftext_length > LTEXT_length ) ftext_length = LTEXT_length;
-   astStringExport( text, LTEXT, ftext_length );
-
-   F77_CALL(pglen)( INTEGER_ARG(&UNITS), CHARACTER_ARG(LTEXT), 
-                    REAL_ARG(&XL), REAL_ARG(&YL) TRAIL_ARG(ftext) );
-
-   *xl = (float) XL;
-   *yl = (float) YL;
-}
-
-static void ccpgqvp(int units, float *x1, float *x2, float *y1, float *y2){
-   F77_INTEGER_TYPE UNITS;
-   F77_REAL_TYPE X1;
-   F77_REAL_TYPE X2;
-   F77_REAL_TYPE Y1;
-   F77_REAL_TYPE Y2;
-   
-   UNITS = (F77_INTEGER_TYPE) units;
-   F77_CALL(pgqvp)( INTEGER_ARG(&UNITS), REAL_ARG(&X1), REAL_ARG(&X2),
-                    REAL_ARG(&Y1), REAL_ARG(&Y2) );
-   *x1 = (float) X1;
-   *x2 = (float) X2;
-   *y1 = (float) Y1;
-   *y2 = (float) Y2;
-}
-
-static void ccpgqvsz(int units, float *x1, float *x2, float *y1, float *y2){
-   F77_INTEGER_TYPE UNITS;
-   F77_REAL_TYPE X1;
-   F77_REAL_TYPE X2;
-   F77_REAL_TYPE Y1;
-   F77_REAL_TYPE Y2;
-   
-   UNITS = (F77_INTEGER_TYPE) units;
-   F77_CALL(pgqvsz)( INTEGER_ARG(&UNITS), REAL_ARG(&X1), REAL_ARG(&X2),
-                    REAL_ARG(&Y1), REAL_ARG(&Y2) );
-   *x1 = (float) X1;
-   *x2 = (float) X2;
-   *y1 = (float) Y1;
-   *y2 = (float) Y2;
-}
-
-static void ccpgqwin(float *x1, float *x2, float *y1, float *y2){
-   F77_REAL_TYPE X1;
-   F77_REAL_TYPE X2;
-   F77_REAL_TYPE Y1;
-   F77_REAL_TYPE Y2;
-
-   F77_CALL(pgqwin)( REAL_ARG(&X1), REAL_ARG(&X2), REAL_ARG(&Y1),
-                     REAL_ARG(&Y2) );
-   *x1 = (float) X1;
-   *x2 = (float) X2;
-   *y1 = (float) Y1;
-   *y2 = (float) Y2;
-}
-
-static void ccpgqls(int *ls){
-   F77_INTEGER_TYPE LS;
-   F77_CALL(pgqls)( INTEGER_ARG(&LS) );
-   *ls = (int) LS;
-}
-
-static void ccpgsls(int ls){
-   F77_INTEGER_TYPE LS;
-   LS = (F77_INTEGER_TYPE) ls;
-   F77_CALL(pgsls)( INTEGER_ARG(&LS) );
-}
-
-static void ccpgqlw(int *lw){
-   F77_INTEGER_TYPE LW;
-   F77_CALL(pgqlw)( INTEGER_ARG(&LW) );
-   *lw = (int) LW;
-}
-
-static void ccpgslw(int lw){
-   F77_INTEGER_TYPE LW;
-   LW = (F77_INTEGER_TYPE) lw;
-   F77_CALL(pgslw)( INTEGER_ARG(&LW) );
-}
-
-static void ccpgqch(float *ch){
-   F77_REAL_TYPE CH;
-   F77_CALL(pgqch)( REAL_ARG(&CH) );
-   *ch = (float) CH;
-}
-
-static void ccpgsch(float ch){
-   F77_REAL_TYPE CH;
-   CH = (F77_REAL_TYPE) ch;
-   F77_CALL(pgsch)( REAL_ARG(&CH) );
-}
-
-static void ccpgqcf(int *cf){
-   F77_INTEGER_TYPE CF;
-   F77_CALL(pgqcf)( INTEGER_ARG(&CF) );
-   *cf = (int) CF;
-}
-
-static void ccpgscf(int cf){
-   F77_INTEGER_TYPE CF;
-   CF = (F77_INTEGER_TYPE) cf;
-   F77_CALL(pgscf)( INTEGER_ARG(&CF) );
-}
-
-static void ccpgqci(int *ci){
-   F77_INTEGER_TYPE CI;
-   F77_CALL(pgqci)( INTEGER_ARG(&CI) );
-   *ci = (int) CI;
-}
-
-static void ccpgsci(int ci){
-   F77_INTEGER_TYPE CI;
-   CI = (F77_INTEGER_TYPE) ci;
-   F77_CALL(pgsci)( INTEGER_ARG(&ci) );
-}
-
-static void ccpgupdt( void ){
-   F77_CALL(pgupdt)();
-}
diff --git a/ast-5.3-1/grismmap.c b/ast-5.3-1/grismmap.c
deleted file mode 100644
index a9c3ba0..0000000
--- a/ast-5.3-1/grismmap.c
+++ /dev/null
@@ -1,2526 +0,0 @@
-/*
-*class++
-*  Name:
-*     GrismMap
-
-*  Purpose:
-*     Transform 1-dimensional coordinates using a grism dispersion equation.
-
-*  Constructor Function:
-c     astGrismMap
-f     AST_GRISMMAP
-
-*  Description:
-*     A GrismMap is a specialised form of Mapping which transforms
-*     1-dimensional coordinates using the spectral dispersion equation
-*     described in FITS-WCS paper III "Representation of spectral
-*     coordinates in FITS". This describes the dispersion produced by 
-*     gratings, prisms and grisms.
-*
-*     When initially created, the forward transformation of a GrismMap 
-*     transforms input "grism parameter" values into output wavelength
-*     values. The "grism parameter" is a dimensionless value which is
-*     linearly related to position on the detector. It is defined in FITS-WCS 
-*     paper III as "the offset on the detector from the point of intersection 
-*     of the camera axis, measured in units of the effective local length".
-*     The units in which wavelength values are expected or returned is 
-*     determined by the values supplied for the GrismWaveR, GrismNRP and 
-*     GrismG attribute: whatever units are used for these attributes will
-*     also be used for the wavelength values.
-
-*  Inheritance:
-*     The GrismMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     GrismMap also has the following attributes:
-*
-*     - GrismNR: The refractive index at the reference wavelength 
-*     - GrismNRP: Rate of change of refractive index with wavelength
-*     - GrismWaveR: The reference wavelength
-*     - GrismAlpha: The angle of incidence of the incoming light
-*     - GrismG: The grating ruling density
-*     - GrismM: The interference order
-*     - GrismEps: The angle between the normal and the dispersion plane
-*     - GrismTheta: Angle between normal to detector plane and reference ray
-
-*  Functions:
-c     The GrismMap class does not define any new functions beyond those
-f     The GrismMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     18-JUN-2003 (DSB):
-*        Original version.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS GrismMap
-
-
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear an attribute value for a GrismMap.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     MAKE_CLEAR(class,attribute,component,assign)
-
-*  Class Membership:
-*     Defined by the GrismMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstGrismMap *this )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstGrismMap *this )
-*
-*     which implement a method for clearing a specified attribute value for
-*     a class. The derived constants stored in the GrismMap structure are
-*     updated after the attribute has been cleared.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class to which the attribute belongs.
-*     attribute
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. Label in "astClearLabel").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(class,attribute,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( Ast##class *this, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Assign the "clear" value. */ \
-   this->component = (assign); \
-\
-/* Update the derived constants. */ \
-   UpdateConstants( this, status ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,class,Clear##attribute))( this, status ); \
-}   
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set an attribute value for a GrismMap.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     astMAKE_SET(class,attribute,type,component,assign)
-
-*  Class Membership:
-*     Defined by the GrismMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstGrismMap *this, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstGrismMap *this, <Type> value )
-*
-*     which implement a method for setting a specified attribute value for a
-*     GrismMap. The derived constants stored in the GrismMap structure are
-*     updated after the attribute has been cleared.
-
-*  Parameters:
-*      class
-*         The name (not the type) of the class to which the attribute belongs.
-*      attribute
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. Label in "astSetLabel").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(class,attribute,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( Ast##class *this, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
-   this->component = (assign); \
-\
-/* Update the derived constants. */ \
-   UpdateConstants( this, status ); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( Ast##class *this, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,class,Set##attribute))( this, value, status ); \
-}
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "unitmap.h"             /* Unit Mappings */
-#include "channel.h"             /* I/O channels */
-#include "zoommap.h"             /* ZoomMap interface */
-#include "winmap.h"              /* WinMap interface */
-#include "grismmap.h"            /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macros to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(GrismMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(GrismMap,Class_Init)
-#define class_vtab astGLOBAL(GrismMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(GrismMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstGrismMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstGrismMap *astGrismMapId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static AstMapping *CanMerge( AstMapping *, int, AstMapping *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void UpdateConstants( AstGrismMap *, int * );
-
-static double GetGrismNR( AstGrismMap *, int * );
-static int TestGrismNR( AstGrismMap *, int * );
-static void ClearGrismNR( AstGrismMap *, int * );
-static void SetGrismNR( AstGrismMap *, double, int * );
-
-static double GetGrismNRP( AstGrismMap *, int * );
-static int TestGrismNRP( AstGrismMap *, int * );
-static void ClearGrismNRP( AstGrismMap *, int * );
-static void SetGrismNRP( AstGrismMap *, double, int * );
-
-static double GetGrismWaveR( AstGrismMap *, int * );
-static int TestGrismWaveR( AstGrismMap *, int * );
-static void ClearGrismWaveR( AstGrismMap *, int * );
-static void SetGrismWaveR( AstGrismMap *, double, int * );
-
-static double GetGrismAlpha( AstGrismMap *, int * );
-static int TestGrismAlpha( AstGrismMap *, int * );
-static void ClearGrismAlpha( AstGrismMap *, int * );
-static void SetGrismAlpha( AstGrismMap *, double, int * );
-
-static double GetGrismG( AstGrismMap *, int * );
-static int TestGrismG( AstGrismMap *, int * );
-static void ClearGrismG( AstGrismMap *, int * );
-static void SetGrismG( AstGrismMap *, double, int * );
-
-static int GetGrismM( AstGrismMap *, int * );
-static int TestGrismM( AstGrismMap *, int * );
-static void ClearGrismM( AstGrismMap *, int * );
-static void SetGrismM( AstGrismMap *, int, int * );
-
-static double GetGrismEps( AstGrismMap *, int * );
-static int TestGrismEps( AstGrismMap *, int * );
-static void ClearGrismEps( AstGrismMap *, int * );
-static void SetGrismEps( AstGrismMap *, double, int * );
-
-static double GetGrismTheta( AstGrismMap *, int * );
-static int TestGrismTheta( AstGrismMap *, int * );
-static void ClearGrismTheta( AstGrismMap *, int * );
-static void SetGrismTheta( AstGrismMap *, double, int * );
-
-/* Member functions. */
-/* ================= */
-static AstMapping *CanMerge( AstMapping *map1, int inv1, AstMapping *map2, 
-                             int inv2, int *status ){
-/*
-*
-*  Name:
-*     CanMerge
-
-*  Purpose:
-*     Checks if two GrismMaps can be merged.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     AstMapping *CanMerge( AstMapping *map1, int inv1, AstMapping *map2, 
-*                           int inv2, int *status )
-
-*  Class Membership:
-*     GrismMap internal utility function.
-
-*  Description:
-*     This function checks the two supplied Mappings to see if they can
-*     be merged into a single Mapping. One of the two Mappings should be
-*     a GrismMap. If they can be merged, the Merged Mapping is returned
-*     as the function value. Otherwise NULL is returned.
-
-*  Parameters:
-*     map1
-*        A pointer to the first mapping.
-*     map2
-*        A pointer to the second mapping.
-*     inv1
-*        The invert flag to use with the first mapping.
-*     inv2
-*        The invert flag to use with the second mapping.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the merged Mapping if the supplied Mappings can be merged, 
-*     NULL otherwise.
-
-*/
-
-/* Local Variables: */
-   AstGrismMap *gmap2;        /* Pointer to second GrismMap */
-   AstGrismMap *gmap;         /* Pointer to first GrismMap */
-   AstMapping *ret;           /* Returned merged Mapping */
-   double g;                  /* The value of the GrismG attribute */
-   double nrp;                /* The value of the GrismNRP attribute */
-   double waver;              /* The value of the GrismWaveR attribute */
-   double z;                  /* Wavelength scaling */
-   int invert_result;         /* Is "ret" the inverse of the required Mapping? */
-
-/* Initialise the returned value. */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   gmap = NULL;
-   invert_result = 0;
-
-/* Initialise the zoom factor of the adjacent ZoomMap to indicate
-   that we have not yet found an adjacent ZoomMap. */
-   z = AST__BAD;
-
-/* If the first Mapping is a GrismMap... */
-   if( !strcmp( "GrismMap", astGetClass( map1 ) ) ) {
-      gmap = (AstGrismMap *) map1;
-
-/* If the second Mapping is also a GrismMap, they can be merged into a
-   UnitMap if one GrismMap is the inverse of the other. */
-      if( !strcmp( "GrismMap", astGetClass( map2 ) ) ) {
-         gmap2 = (AstGrismMap *) map2;
-
-/* Check that the two GrismMaps have the same attribute values. */
-         if( EQUAL( astGetGrismNR( gmap ), astGetGrismNR( gmap2 )) &&
-             EQUAL( astGetGrismNRP( gmap ), astGetGrismNRP( gmap2 )) &&
-             EQUAL( astGetGrismWaveR( gmap ), astGetGrismWaveR( gmap2 )) &&
-             EQUAL( astGetGrismAlpha( gmap ), astGetGrismAlpha( gmap2 )) &&
-             EQUAL( astGetGrismG( gmap ), astGetGrismG( gmap2 )) &&
-             EQUAL( astGetGrismM( gmap ), astGetGrismM( gmap2 )) &&
-             EQUAL( astGetGrismEps( gmap ), astGetGrismEps( gmap2 )) &&
-             EQUAL( astGetGrismTheta( gmap ), astGetGrismTheta( gmap2 )) ){
-
-/* If so, check that the GrismMaps are applied in opposite senses. If so 
-   we can cancel the two GrismMaps, so return a UnitMap. */
-            if( inv1 != inv2 ) ret = (AstMapping *) astUnitMap( 1, "", status );
-         }
-
-/* If the first Mapping is a GrismMap but the second one is not... */
-      } else {
-
-/* We can merge the GrismMap with the second Mapping if the GrismMap has
-   not been inverted (i.e. if the wavelength output produced by the
-   GrismMap is fed as input to the second Mapping), and if the second
-   Mapping is a ZoomMap. */
-         if( !inv1 ) {
-
-/* Indicate that any merged Mapping to be created later will not need to 
-   be inverted. */
-            invert_result = 0;
-
-/* See if the second Mapping is a ZoomMap, and if so, get the zoom
-   factor. If the Invert attribute in the ZoomMap is not set to the 
-   required value, invert the zoom factor. This gives us the required 
-   *forward* transformation. */
-            if( !strcmp( "ZoomMap", astGetClass( map2 ) ) ) {
-               z = astGetZoom( (AstZoomMap *) map2 );
-               if( astGetInvert( map2 ) != inv2 && z != 0.0 ) z = 1.0/z;
-            }                   
-         }
-      }
-
-/* If the first Mapping is not a GrismMap, but the second one is... */
-   } else if( !strcmp( "GrismMap", astGetClass( map2 ) ) ) {
-      gmap = (AstGrismMap *) map2;
-
-/* We can merge the GrismMap with the first Mapping if the GrismMap has
-   been inverted (i.e. if the wavelength output produced by the first 
-   Mapping is fed as input to the inverted GrismMap), and if the first
-   Mapping is a ZoomMap. */
-      if( inv2 ) {
-
-/* It is easier to consider pairs of Mappings in which an un-inverted
-   GrismMap is followed by a ZoomMap (as in the above case). For this 
-   reason, we invert the Mappings here, so that the merged Mapping created 
-   later will be in the inverse of the required Mapping. Indicate that the 
-   merged Mapping will therefore need to be inverted before being returned. */
-         invert_result = 1;
-
-/* See if the first Mapping is a ZoomMap. If so, get the zoom factor. If the 
-   Invert attribute in the ZoomMap is not set to the opposite of the required 
-   value, invert the zoom factor. This gives us the required *inverse* 
-   transformation. */
-         if( !strcmp( "ZoomMap", astGetClass( map1 ) ) ) {
-            z = astGetZoom( (AstZoomMap *) map1 );
-            if( astGetInvert( map1 ) == inv1 && z != 0.0 ) z = 1.0/z;
-         }                   
-      }
-   }
-
-/* If required, produce the merged Mapping by merging the forward
-   GrismMap with the following ZoomMap (and then invert the
-   resulting Mapping if it is in the wrong direction). */
-   if( !ret && z != AST__BAD && z != 0.0 ) {
-
-/* Ensure we have a forward GrismMap. */
-      ret = astCopy( gmap );
-      astSetInvert( ret, 0 );
-
-/* Get the required GrismMap attribute values. */
-      g = astGetGrismG( ret );
-      nrp = astGetGrismNRP( ret );
-      waver = astGetGrismWaveR( ret );
-
-/* The above code ensures that z is the zoom factor from the wavelength 
-   produced by the forward GrismMap to the final (modified) wavelength units. 
-   Set the new GrismMap attribute values. GrismG, GrismNRP and GrismWaveR have 
-   units of length and are scaled to represent new length units using the 
-   zoom factor found above. */
-      g /= z;
-      nrp /= z;
-      waver *= z;
-
-      astSetGrismG( ret, g );
-      astSetGrismNRP( ret, nrp );
-      astSetGrismWaveR( ret, waver );
-
-/* If required invert this GrismMap. */
-      if( invert_result ) astInvert( ret );
-
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a GrismMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     GrismMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     GrismMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstGrismMap *this;             /* Pointer to the GrismMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the GrismMap structure. */
-   this = (AstGrismMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-   if ( !strcmp( attrib, "grismnr" ) ) { 
-      astClearGrismNR( this );
-
-   } else if ( !strcmp( attrib, "grismnrp" ) ) { 
-      astClearGrismNRP( this );
-
-   } else if ( !strcmp( attrib, "grismwaver" ) ) { 
-      astClearGrismWaveR( this );
-
-   } else if ( !strcmp( attrib, "grismalpha" ) ) { 
-      astClearGrismAlpha( this );
-
-   } else if ( !strcmp( attrib, "grismg" ) ) { 
-      astClearGrismG( this );
-
-   } else if ( !strcmp( attrib, "grismm" ) ) { 
-      astClearGrismM( this );
-
-   } else if ( !strcmp( attrib, "grismeps" ) ) { 
-      astClearGrismEps( this );
-
-   } else if ( !strcmp( attrib, "grismtheta" ) ) { 
-      astClearGrismTheta( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two GrismMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     GrismMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two GrismMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a GrismMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the GrismMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstGrismMap *that;        
-   AstGrismMap *this;        
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two GrismMap structures. */
-   this = (AstGrismMap *) this_object;
-   that = (AstGrismMap *) that_object;
-
-/* Check the second object is a GrismMap. We know the first is a
-   GrismMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAGrismMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two GrismMaps differ, it may still be possible 
-   for them to be equivalent. First compare the GrismMaps if their Invert 
-   flags are the same. In this case all the attributes of the two GrismMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-            if( astEQUAL( this->nr, that->nr ) &&
-                astEQUAL( this->nrp, that->nrp ) &&
-                astEQUAL( this->waver, that->waver ) &&
-                astEQUAL( this->alpha, that->alpha ) &&
-                astEQUAL( this->g, that->g ) &&
-                astEQUAL( this->m, that->m ) &&
-                astEQUAL( this->eps, that->eps ) &&
-                astEQUAL( this->theta, that->theta ) &&
-                astEQUAL( this->k1, that->k1 ) &&
-                astEQUAL( this->k2, that->k2 ) &&
-                astEQUAL( this->k3, that->k3 ) ) {
-                result = 1;
-             }
-
-/* If the Invert flags for the two GrismMaps differ, the attributes of the two 
-   GrismMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a GrismMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a GrismMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     GrismMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a GrismMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the GrismMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the GrismMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstGrismMap *this;            /* Pointer to the GrismMap structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the GrismMap structure. */
-   this = (AstGrismMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-   if ( !strcmp( attrib, "grismnr" ) ) { 
-      dval = astGetGrismNR( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismnrp" ) ) { 
-      dval = astGetGrismNRP( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismwaver" ) ) { 
-      dval = astGetGrismWaveR( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismalpha" ) ) { 
-      dval = astGetGrismAlpha( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismg" ) ) { 
-      dval = astGetGrismG( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismm" ) ) { 
-      dval = astGetGrismM( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismeps" ) ) { 
-      dval = astGetGrismEps( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-   } else if ( !strcmp( attrib, "grismtheta" ) ) { 
-      dval = astGetGrismTheta( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitGrismMapVtab_(  AstGrismMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitGrismMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a GrismMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     void astInitGrismMapVtab( AstGrismMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     GrismMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the GrismMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAGrismMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->ClearGrismNR = ClearGrismNR;
-   vtab->GetGrismNR = GetGrismNR;
-   vtab->SetGrismNR = SetGrismNR;
-   vtab->TestGrismNR = TestGrismNR;
-
-   vtab->ClearGrismNRP = ClearGrismNRP;
-   vtab->GetGrismNRP = GetGrismNRP;
-   vtab->SetGrismNRP = SetGrismNRP;
-   vtab->TestGrismNRP = TestGrismNRP;
-
-   vtab->ClearGrismWaveR = ClearGrismWaveR;
-   vtab->GetGrismWaveR = GetGrismWaveR;
-   vtab->SetGrismWaveR = SetGrismWaveR;
-   vtab->TestGrismWaveR = TestGrismWaveR;
- 
-   vtab->ClearGrismAlpha = ClearGrismAlpha;
-   vtab->GetGrismAlpha = GetGrismAlpha;
-   vtab->SetGrismAlpha = SetGrismAlpha;
-   vtab->TestGrismAlpha = TestGrismAlpha;
-
-   vtab->ClearGrismG = ClearGrismG;
-   vtab->GetGrismG = GetGrismG;
-   vtab->SetGrismG = SetGrismG;
-   vtab->TestGrismG = TestGrismG;
-
-   vtab->ClearGrismM = ClearGrismM;
-   vtab->GetGrismM = GetGrismM;
-   vtab->SetGrismM = SetGrismM;
-   vtab->TestGrismM = TestGrismM;
-
-   vtab->ClearGrismEps = ClearGrismEps;
-   vtab->GetGrismEps = GetGrismEps;
-   vtab->SetGrismEps = SetGrismEps;
-   vtab->TestGrismEps = TestGrismEps;
-
-   vtab->ClearGrismTheta = ClearGrismTheta;
-   vtab->GetGrismTheta = GetGrismTheta;
-   vtab->SetGrismTheta = SetGrismTheta;
-   vtab->TestGrismTheta = TestGrismTheta;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetDump( vtab, Dump, "GrismMap",
-               "Map 1-d coordinates using a spectral disperser" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a GrismMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     GrismMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated GrismMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated GrismMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated GrismMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the GrismMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        GrismMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated GrismMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *merged_map; /* Merger of two Mappings */
-   AstMapping *neighbour;  /* Pointer to neighbouring Mapping */
-   const char *class1;     /* Pointer to first Mapping class string */
-   const char *class2;     /* Pointer to second Mapping class string */
-   int i1;                 /* Lower index of the two GrismMaps being merged */
-   int i2;                 /* Upper index of the two GrismMaps being merged */
-   int i;                  /* Mapping index */
-   int result;             /* Result value to return */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   i1 = -1;
-   i2 = -1;
-
-/* See if the GrismMap can be merged with the Mappings on either side of it 
-   in the list. This can only be done in series for a GrismMap. */
-/* ===================================================================== */
-   if( series ) {
-
-/* Store the classes of the neighbouring Mappings in the list. */
-      class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
-      class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* Set a flag indicating that we have not yet found a neighbour with which 
-   the GrismMap can be merged. */
-      merged_map = NULL;
-
-/* First check the lower neighbour (if any). */
-      if( where > 0 ) {
-         i1 = where - 1;
-         i2 = where;
-         neighbour = ( *map_list )[ i1 ];
-         merged_map = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
-                                ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
-      }
-
-/* If the GrismMap can not be merged with its lower neighbour, check its
-   upper neighbour (if any) in the same way. */
-      if( !merged_map && where < *nmap - 1 ) {
-         i1 = where;
-         i2 = where + 1;
-         neighbour = ( *map_list )[ i2 ];
-         merged_map = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
-                                ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
-      }
-
-/* If either neighbour has passed these checks, replace the pair of
-   Mappings which have been merged with the single merged Mapping returned 
-   above. */
-      if( merged_map ) {
-
-/* Annul the two Mappings. */
-         (void) astAnnul( ( *map_list )[ i1 ] );
-         (void) astAnnul( ( *map_list )[ i2 ] );
-
-/* Store a pointer for the merged Mapping in place of the first of the
-   two replaced Mappings. */
-         ( *map_list )[ i1 ] = merged_map;
-         ( *invert_list )[ i1 ] = astGetInvert( merged_map );
-
-/* Shuffle down the remaining Mappings to fill the hole left by the
-   second of the replaced Mappings. */
-         for ( i = i2 + 1; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-
-/* Clear the vacated element at the end. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         (*nmap)--;
-         result = i1;
-
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a GrismMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     GrismMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a GrismMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstGrismMap *this;            /* Pointer to the GrismMap structure */
-   double dval;                  /* Attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the GrismMap structure. */
-   this = (AstGrismMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-   if (  nc = 0, ( 1 == astSscanf( setting, "grismnr= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismNR( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismnrp= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismNRP( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismwaver= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismWaveR( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismalpha= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismAlpha( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismg= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismG( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismm= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismM( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismeps= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismEps( this, dval );
-
-   } else if (  nc = 0, ( 1 == astSscanf( setting, "grismtheta= %lf %n", &dval, &nc ) ) && ( nc >= len ) ) { 
-      astSetGrismTheta( this, dval );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a GrismMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     GrismMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a GrismMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstGrismMap *this;             /* Pointer to the GrismMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the GrismMap structure. */
-   this = (AstGrismMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-   if ( !strcmp( attrib, "grismnr" ) ) { 
-      result = astTestGrismNR( this );
-
-   } else if ( !strcmp( attrib, "grismnrp" ) ) { 
-      result = astTestGrismNRP( this );
-
-   } else if ( !strcmp( attrib, "grismwaver" ) ) { 
-      result = astTestGrismWaveR( this );
-
-   } else if ( !strcmp( attrib, "grismalpha" ) ) { 
-      result = astTestGrismAlpha( this );
-
-   } else if ( !strcmp( attrib, "grismg" ) ) { 
-      result = astTestGrismG( this );
-
-   } else if ( !strcmp( attrib, "grismm" ) ) { 
-      result = astTestGrismM( this );
-
-   } else if ( !strcmp( attrib, "grismeps" ) ) { 
-      result = astTestGrismEps( this );
-
-   } else if ( !strcmp( attrib, "grismtheta" ) ) { 
-      result = astTestGrismTheta( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a GrismMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     GrismMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a GrismMap and a set of points encapsulated
-*     in a PointSet and transforms the points so as to apply the
-*     forward or inverse dispersal equation.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation should be applied, while a zero value requests
-*        the inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed
-*        (output) coordinate values. A NULL value may also be given,
-*        in which case a new PointSet will be created by this
-*        function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - The number of coordinate values per point in the input
-*     PointSet must equal 1.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points (with 1 coordinate value per point)
-*     to accommodate the result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstGrismMap *map;             /* Pointer to GrismMap to be applied */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double sinbeta;               /* Sin( beta ) (see FITS-WCS paper III) */
-   double value_in;              /* Input coordinate value */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the GrismMap. */
-   map = (AstGrismMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform
-   member function inherited from the parent Mapping class. This
-   function validates all arguments and generates an output PointSet
-   if necessary, but does not actually transform any coordinate
-   values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain
-   pointers for accessing the input and output coordinate values. */
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping,
-   according to the direction specified and whether the mapping has
-   been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* If any of the parameters are undefined fill the output with bad
-   values (if possible). */
-   if( map->k1 == AST__BAD || map->k2 == AST__BAD || map->k3 == AST__BAD ) {
-      if( astOK ) {
-         for ( point = 0; point < npoint; point++ ) {
-            ptr_out[ 0 ][ point ] = AST__BAD;
-         }
-      }
-
-/* Otherwise... */
-   } else {
-
-/* Forward transformation. */
-/* ----------------------- */
-      if ( forward ) {
-
-/* Loop to transform each input point. */
-         for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input grism parameter value. */
-            value_in = ptr_in[ 0 ][ point ];
-
-/* Check for bad input coordinates and generate a bad result if necessary. */
-            if( value_in == AST__BAD || map->k2 == 0.0 ) {
-               ptr_out[ 0 ][ point ] = AST__BAD;
-
-/* Otherwise, apply the algorithm described in FITS-WCS paper III. */
-            } else {
-               ptr_out[ 0 ][ point ] = ( map->k1 + sin( atan( value_in ) + map->k3 ) )/map->k2;
-            }
-         }
-
-/* Inverse transformation. */
-/* ----------------------- */
-      } else {
-
-/* Loop to transform each input point. */
-         for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input wavelength value. */
-            value_in = ptr_in[ 0 ][ point ];
-
-/* Check for bad input coordinates and generate a bad result if necessary. */
-            if ( value_in == AST__BAD ) {
-               ptr_out[ 0 ][ point ] = AST__BAD;
-
-/* Otherwise, apply the algorithm described in FITS-WCS paper III. */
-            } else {
-               sinbeta = map->k2*value_in - map->k1;
-               if( sinbeta < -1.0 || sinbeta > 1.0 ) {
-                  ptr_out[ 0 ][ point ] = AST__BAD;
-               } else {  
-                  ptr_out[ 0 ][ point ] = tan( asin( sinbeta ) - map->k3 );
-               }
-            }
-         }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-
-static void UpdateConstants( AstGrismMap *this, int *status ){
-/*
-*  Name:
-*     UpdateConstants
-
-*  Purpose:
-*     Re-calculate the constants used within the transformation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     void UpdateConstants( AstGrismMap *this, int *status )
-
-*  Class Membership:
-*     GrismMap member function 
-
-*  Description:
-*     This function re-calculates the constants used within the
-*     transformation on the basis of the current values of the 
-*     GrismMap attributes. It should be called whenever a new value is
-*     set for an attribute, or an attribute is cleared.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double alpha;        /* The current vaue of the GrismAlpha attribute */
-   double coseps;       /* cos( eps ) */
-   double sinalpha;     /* sin( alpha ) */
-   double eps;          /* The current vaue of the GrismEps attribute */
-   double g;            /* The current vaue of the GrismG attribute */
-   double nr;           /* The current vaue of the GrismNR attribute */
-   double nrp;          /* The current vaue of the GrismNRP attribute */
-   double sinbeta_r;    /* sin( beta_r ) */
-   double theta;        /* The current vaue of the GrismTheta attribute */
-   double wave_r;       /* The current vaue of the GrismWaveR attribute */
-   int m;               /* The current vaue of the GrismM attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the current attribute values. */
-   nr = astGetGrismNR( this );
-   nrp = astGetGrismNRP( this );
-   wave_r = astGetGrismWaveR( this );
-   alpha = astGetGrismAlpha( this ); 
-   g = astGetGrismG( this );     
-   m = astGetGrismM( this );     
-   eps = astGetGrismEps( this );   
-   theta = astGetGrismTheta( this );   
-
-/* Re-calculate the constants. */
-   coseps = cos( eps );
-   sinalpha = sin( alpha );
-
-   this->k1 = sinalpha*( nr - nrp*wave_r );
-
-   if( coseps != 0.0 ) {
-      this->k2 = ( g*m/coseps ) - nrp*sinalpha;
-
-      sinbeta_r = g*m*wave_r/coseps - nr*sinalpha;
-      if( sinbeta_r < -1.0 || sinbeta_r > 1.0 ) {
-         this->k3 = AST__BAD;
-      } else {
-         this->k3 = asin( sinbeta_r ) + theta;
-      }
-
-   } else {
-      this->k2 = AST__BAD;
-      this->k3 = AST__BAD;
-   }
-
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     GrismNR
-
-*  Purpose:
-*     The refractive index at the reference wavelength.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds refractive index of the grism material at the 
-*     reference wavelength (given by attribute GrismWaveR). The default
-*     value is 1.0.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismNR,nr,(AST__BAD))
-astMAKE_GET(GrismMap,GrismNR,double,1.0,( ( this->nr == AST__BAD ) ?
-                                      1.0 : this->nr ))
-MAKE_SET(GrismMap,GrismNR,double,nr,(value) )
-astMAKE_TEST(GrismMap,GrismNR,( this->nr != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     GrismNRP
-
-*  Purpose:
-*     The rate of change of refractive index with wavelength.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds the rate of change of the refractive index of the 
-*     grism material with respect to wavelength at the reference wavelength 
-*     (given by attribute GrismWaveR). The default value is 0.0 (the 
-*     appropriate value for a pure grating disperser with no prism). The 
-*     units of this attribute should be consistent with those of attributes 
-*     GrismWaveR and GrismG.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismNRP,nrp,(AST__BAD))
-astMAKE_GET(GrismMap,GrismNRP,double,0.0,( ( this->nrp == AST__BAD ) ?
-                                      0.0 : this->nrp ))
-MAKE_SET(GrismMap,GrismNRP,double,nrp,(value) )
-astMAKE_TEST(GrismMap,GrismNRP,( this->nrp != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     GrismWaveR
-
-*  Purpose:
-*     The reference wavelength.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds reference wavelength. The default value is 
-*     5000 (Angstrom). The units of this attribute should be consistent with 
-*     those of attributes GrismNRP and GrismG.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismWaveR,waver,(AST__BAD))
-astMAKE_GET(GrismMap,GrismWaveR,double,5000.0,( ( this->waver == AST__BAD ) ?
-                                      5000.0 : this->waver ))
-MAKE_SET(GrismMap,GrismWaveR,double,waver,(value) )
-astMAKE_TEST(GrismMap,GrismWaveR,( this->waver != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     GrismAlpha
-
-*  Purpose:
-*     The angle of incidence of the incoming light on the grating surface.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds the angle between the incoming light and the
-*     normal to the grating surface, in radians. The default value is 0.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismAlpha,alpha,(AST__BAD))
-astMAKE_GET(GrismMap,GrismAlpha,double,0.0,( ( this->alpha == AST__BAD ) ?
-                                       0.0 : this->alpha ))
-MAKE_SET(GrismMap,GrismAlpha,double,alpha,(value) )
-astMAKE_TEST(GrismMap,GrismAlpha,( this->alpha != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     GrismG
-
-*  Purpose:
-*     The grating ruling density.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds the number of grating rulings per unit length.
-*     The unit of length used should be consistent with the units used
-*     for attributes GrismWaveR and GrismNRP. The default value is 0.0.
-*     (the appropriate value for a pure prism disperser with no grating).
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismG,g,(AST__BAD))
-astMAKE_GET(GrismMap,GrismG,double,0.0,( ( this->g == AST__BAD ) ?
-                                      0.0 : this->g ))
-MAKE_SET(GrismMap,GrismG,double,g,(value) )
-astMAKE_TEST(GrismMap,GrismG,( this->g != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     GrismM
-
-*  Purpose:
-*     The interference order
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute holds the interference order being considered.
-*     The default value is 0.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismM,m,(INT_MAX))
-astMAKE_GET(GrismMap,GrismM,int,0,( ( this->m == INT_MAX ) ?
-                                      0 : this->m ))
-MAKE_SET(GrismMap,GrismM,int,m,(value) )
-astMAKE_TEST(GrismMap,GrismM,( this->m != INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     GrismEps
-
-*  Purpose:
-*      The angle between the normal and the dispersion plane.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds the angle (in radians) between the normal to
-*     the grating or exit prism face, and the dispersion plane. The
-*     dispersion plane is the plane spanned by the incoming and outgoing 
-*     ray. The default value is 0.0.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismEps,eps,(AST__BAD))
-astMAKE_GET(GrismMap,GrismEps,double,0.0,( ( this->eps == AST__BAD ) ?
-                                      0.0 : this->eps ))
-MAKE_SET(GrismMap,GrismEps,double,eps,(value) )
-astMAKE_TEST(GrismMap,GrismEps,( this->eps != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     GrismTheta
-
-*  Purpose:
-*     Angle between normal to detector plane and reference ray.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute gives the angle of incidence of light of the
-*     reference wavelength (given by attribute GrismWaveR) onto the
-*     detector. Specifically, it holds the angle (in radians) between 
-*     the normal to the detector plane and an incident ray at the reference 
-*     wavelength. The default value is 0.0.
-
-*  Applicability:
-*     GrismMap
-*        All GrismMaps have this attribute.
-
-*att--
-*/
-MAKE_CLEAR(GrismMap,GrismTheta,theta,(AST__BAD))
-astMAKE_GET(GrismMap,GrismTheta,double,0.0,( ( this->theta == AST__BAD ) ?
-                                      0.0 : this->theta ))
-MAKE_SET(GrismMap,GrismTheta,double,theta,(value) )
-astMAKE_TEST(GrismMap,GrismTheta,( this->theta != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for GrismMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the GrismMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the GrismMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstGrismMap *this;            /* Pointer to the GrismMap structure */
-   double dval;                  /* Double value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the GrismMap structure. */
-   this = (AstGrismMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   GrismMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-   set = TestGrismNR( this, status );
-   dval = set ? GetGrismNR( this, status ) : astGetGrismNR( this );
-   astWriteDouble( channel, "GrmNR", set, 1, dval, "Refractive index at the ref. wavelength" );
-
-   set = TestGrismNRP( this, status );
-   dval = set ? GetGrismNRP( this, status ) : astGetGrismNRP( this );
-   astWriteDouble( channel, "GrmNRP", set, 1, dval, "Rate of change of refractive index" );
-
-   set = TestGrismWaveR( this, status );
-   dval = set ? GetGrismWaveR( this, status ) : astGetGrismWaveR( this );
-   astWriteDouble( channel, "GrmWR", set, 1, dval, "Ref. wavelength" );
-
-   set = TestGrismAlpha( this, status );
-   dval = set ? GetGrismAlpha( this, status ) : astGetGrismAlpha( this );
-   astWriteDouble( channel, "GrmAlp", set, 1, dval, "Angle of incidence of incoming light" );
-
-   set = TestGrismG( this, status );
-   dval = set ? GetGrismG( this, status ) : astGetGrismG( this );
-   astWriteDouble( channel, "GrmG", set, 1, dval, "Grating ruling density" );
-
-   set = TestGrismM( this, status );
-   dval = set ? GetGrismM( this, status ) : astGetGrismM( this );
-   astWriteDouble( channel, "GrmM", set, 1, dval, "The interference order" );
-
-   set = TestGrismEps( this, status );
-   dval = set ? GetGrismEps( this, status ) : astGetGrismEps( this );
-   astWriteDouble( channel, "GrmEps", set, 1, dval, "Angle between grating normal and dispersion plane" );
-
-   set = TestGrismTheta( this, status );
-   dval = set ? GetGrismTheta( this, status ) : astGetGrismTheta( this );
-   astWriteDouble( channel, "GrmTh", set, 1, dval, "Angle between detector normal and reference ray" );
-
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAGrismMap and astCheckGrismMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(GrismMap,Mapping)
-astMAKE_CHECK(GrismMap)
-
-AstGrismMap *astGrismMap_( const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astGrismMap
-f     AST_GRISMMAP
-
-*  Purpose:
-*     Create a GrismMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "grismmap.h"
-c     AstGrismMap *astGrismMap( const char *options, ... )
-f     RESULT = AST_GRISMMAP( OPTIONS, STATUS )
-
-*  Class Membership:
-*     GrismMap constructor.
-
-*  Description:
-*     This function creates a new GrismMap and optionally initialises
-*     its attributes.
-*
-*     A GrismMap is a specialised form of Mapping which transforms
-*     1-dimensional coordinates using the spectral dispersion equation
-*     described in FITS-WCS paper III "Representation of spectral
-*     coordinates in FITS". This describes the dispersion produced by 
-*     gratings, prisms and grisms.
-*
-*     When initially created, the forward transformation of a GrismMap 
-*     transforms input "grism parameter" values into output wavelength
-*     values. The "grism parameter" is a dimensionless value which is
-*     linearly related to position on the detector. It is defined in FITS-WCS 
-*     paper III as "the offset on the detector from the point of intersection 
-*     of the camera axis, measured in units of the effective local length".
-*     The units in which wavelength values are expected or returned is 
-*     determined by the values supplied for the GrismWaveR, GrismNRP and 
-*     GrismG attribute: whatever units are used for these attributes will
-*     also be used for the wavelength values.
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new GrismMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new GrismMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGrismMap()
-f     AST_GRISMMAP = INTEGER
-*        A pointer to the new GrismMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstGrismMap *new;             /* Pointer to new GrismMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the GrismMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitGrismMap( NULL, sizeof( AstGrismMap ), !class_init, 
-                          &class_vtab, "GrismMap" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   GrismMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new GrismMap. */
-   return new;
-}
-
-AstGrismMap *astGrismMapId_( const char *options, ... ) {
-/*
-*  Name:
-*     astGrismMapId_
-
-*  Purpose:
-*     Create a GrismMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     AstGrismMap *astGrismMapId( const char *options, int *status, ... )
-
-*  Class Membership:
-*     GrismMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astGrismMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astGrismMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astGrismMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astGrismMap_.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ID value associated with the new GrismMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstGrismMap *new;             /* Pointer to new GrismMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the GrismMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitGrismMap( NULL, sizeof( AstGrismMap ), !class_init, 
-                          &class_vtab, "GrismMap" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new GrismMap's
-   attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new GrismMap. */
-   return astMakeId( new );
-}
-
-AstGrismMap *astInitGrismMap_( void *mem, size_t size, int init,
-                               AstGrismMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitGrismMap
-
-*  Purpose:
-*     Initialise a GrismMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     AstGrismMap *astInitGrismMap( void *mem, size_t size, int init,
-*                                   AstGrismMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     GrismMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new GrismMap object. It allocates memory (if necessary) to accommodate
-*     the GrismMap plus any additional data associated with the derived class.
-*     It then initialises a GrismMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a GrismMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the GrismMap is to be initialised.
-*        This must be of sufficient size to accommodate the GrismMap data
-*        (sizeof(GrismMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the GrismMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the GrismMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the GrismMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new GrismMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new GrismMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstGrismMap *new;              /* Pointer to new GrismMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitGrismMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the GrismMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstGrismMap *) astInitMapping( mem, size, 0,
-                                         (AstMappingVtab *) vtab, name,
-                                         1, 1, 1, 1 );
-   if ( astOK ) {
-
-/* Initialise the GrismMap data. */
-/* ---------------------------- */
-      new->nr    = AST__BAD;
-      new->nrp   = AST__BAD;
-      new->waver = AST__BAD;
-      new->alpha = AST__BAD;
-      new->g     = AST__BAD;
-      new->m     = INT_MAX;
-      new->eps   = AST__BAD;
-      new->theta = AST__BAD;
-
-/* Set up the other required derived constants. */
-      UpdateConstants( new, status );
-
-/* If an error occurred, clean up by deleting the new GrismMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new GrismMap. */
-   return new;
-}
-
-AstGrismMap *astLoadGrismMap_( void *mem, size_t size,
-                           AstGrismMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadGrismMap
-
-*  Purpose:
-*     Load a GrismMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "grismmap.h"
-*     AstGrismMap *astLoadGrismMap( void *mem, size_t size,
-*                               AstGrismMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     GrismMap loader.
-
-*  Description:
-*     This function is provided to load a new GrismMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     GrismMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a GrismMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the GrismMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        GrismMap data (sizeof(GrismMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the GrismMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the GrismMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstGrismMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new GrismMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the GrismMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "GrismMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new GrismMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstGrismMap *new;             /* Pointer to the new GrismMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this GrismMap. In this case the
-   GrismMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstGrismMap );
-      vtab = &class_vtab;
-      name = "GrismMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitGrismMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built GrismMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "GrismMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-      new->nr = astReadDouble( channel, "grmnr", AST__BAD );
-      if ( TestGrismNR( new, status ) ) SetGrismNR( new, new->nr, status );
-
-      new->nrp = astReadDouble( channel, "grmnrp", AST__BAD );
-      if ( TestGrismNRP( new, status ) ) SetGrismNRP( new, new->nrp, status );
-
-      new->waver = astReadDouble( channel, "grmwr", AST__BAD );
-      if ( TestGrismWaveR( new, status ) ) SetGrismWaveR( new, new->waver, status );
-
-      new->alpha = astReadDouble( channel, "grmalp", AST__BAD );
-      if ( TestGrismAlpha( new, status ) ) SetGrismAlpha( new, new->alpha, status );
-
-      new->g = astReadDouble( channel, "grmg", AST__BAD );
-      if ( TestGrismG( new, status ) ) SetGrismG( new, new->g, status );
-
-      new->m = astReadInt( channel, "grmm", INT_MAX );
-      if ( TestGrismM( new, status ) ) SetGrismM( new, new->m, status );
-
-      new->eps = astReadDouble( channel, "grmeps", AST__BAD );
-      if ( TestGrismEps( new, status ) ) SetGrismEps( new, new->eps, status );
-
-      new->theta = astReadDouble( channel, "grmth", AST__BAD );
-      if ( TestGrismTheta( new, status ) ) SetGrismTheta( new, new->theta, status );
-
-/* Set up the other required derived constants. */
-      UpdateConstants( new, status );
-   }
-
-/* If an error occurred, clean up by deleting the new GrismMap. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new GrismMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
-   defined by this class. Each simply checks the global error status
-   and then locates and executes the appropriate member function,
-   using the function pointer stored in the object's virtual function
-   table (this pointer is located using the astMEMBER macro defined in
-   "object.h").
-
-   Note that the member function may not be the one defined here, as
-   it may have been over-ridden by a derived class. However, it should
-   still have the same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/grismmap.h b/ast-5.3-1/grismmap.h
deleted file mode 100644
index 51fc804..0000000
--- a/ast-5.3-1/grismmap.h
+++ /dev/null
@@ -1,353 +0,0 @@
-#if !defined( GRISMMAP_INCLUDED ) /* Include this file only once */
-#define GRISMMAP_INCLUDED
-/*
-*+
-*  Name:
-*     grismmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the GrismMap class.
-
-*  Invocation:
-*     #include "grismmap.h"
-
-*  Description:
-*     This include file defines the interface to the GrismMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The GrismMap class implements Mappings which perform a "zoom"
-*     transformation by multiplying all coordinate values by the same
-*     scale factor (the inverse transformation is performed by
-*     dividing by this scale factor).
-
-*  Inheritance:
-*     The GrismMap class inherits from the Mapping class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     8-JUL-2003 (DSB):
-*        Initial version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* GrismMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstGrismMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double nr;    
-   double nrp;   
-   double waver; 
-   double alpha; 
-   double g;     
-   double m;     
-   double eps;   
-   double theta; 
-   double k1;
-   double k2;
-   double k3;
-
-} AstGrismMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstGrismMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double (* GetGrismNR)( AstGrismMap *, int * );
-   int (* TestGrismNR)( AstGrismMap *, int * );
-   void (* ClearGrismNR)( AstGrismMap *, int * );
-   void (* SetGrismNR)( AstGrismMap *, double, int * );
-
-   double (* GetGrismNRP)( AstGrismMap *, int * );
-   int (* TestGrismNRP)( AstGrismMap *, int * );
-   void (* ClearGrismNRP)( AstGrismMap *, int * );
-   void (* SetGrismNRP)( AstGrismMap *, double, int * );
-
-   double (* GetGrismWaveR)( AstGrismMap *, int * );
-   int (* TestGrismWaveR)( AstGrismMap *, int * );
-   void (* ClearGrismWaveR)( AstGrismMap *, int * );
-   void (* SetGrismWaveR)( AstGrismMap *, double, int * );
-
-   double (* GetGrismAlpha)( AstGrismMap *, int * );
-   int (* TestGrismAlpha)( AstGrismMap *, int * );
-   void (* ClearGrismAlpha)( AstGrismMap *, int * );
-   void (* SetGrismAlpha)( AstGrismMap *, double, int * );
-
-   double (* GetGrismG)( AstGrismMap *, int * );
-   int (* TestGrismG)( AstGrismMap *, int * );
-   void (* ClearGrismG)( AstGrismMap *, int * );
-   void (* SetGrismG)( AstGrismMap *, double, int * );
-
-   int (* GetGrismM)( AstGrismMap *, int * );
-   int (* TestGrismM)( AstGrismMap *, int * );
-   void (* ClearGrismM)( AstGrismMap *, int * );
-   void (* SetGrismM)( AstGrismMap *, int, int * );
-
-   double (* GetGrismEps)( AstGrismMap *, int * );
-   int (* TestGrismEps)( AstGrismMap *, int * );
-   void (* ClearGrismEps)( AstGrismMap *, int * );
-   void (* SetGrismEps)( AstGrismMap *, double, int * );
-
-   double (* GetGrismTheta)( AstGrismMap *, int * );
-   int (* TestGrismTheta)( AstGrismMap *, int * );
-   void (* ClearGrismTheta)( AstGrismMap *, int * );
-   void (* SetGrismTheta)( AstGrismMap *, double, int * );
-
-} AstGrismMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstGrismMapGlobals {
-   AstGrismMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstGrismMapGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(GrismMap)          /* Check class membership */
-astPROTO_ISA(GrismMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstGrismMap *astGrismMap_( const char *, int *, ...);
-#else
-AstGrismMap *astGrismMapId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstGrismMap *astInitGrismMap_( void *, size_t, int, AstGrismMapVtab *,
-                             const char *, int * );
-
-/* Vtab initialiser. */
-void astInitGrismMapVtab_( AstGrismMapVtab *, const char *, int * );
-
-/* Loader. */
-AstGrismMap *astLoadGrismMap_( void *, size_t, AstGrismMapVtab *,
-                             const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitGrismMapGlobals_( AstGrismMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-
-   double astGetGrismNR_( AstGrismMap *, int * );
-   int astTestGrismNR_( AstGrismMap *, int * );
-   void astClearGrismNR_( AstGrismMap *, int * );
-   void astSetGrismNR_( AstGrismMap *, double, int * );
-
-   double astGetGrismNRP_( AstGrismMap *, int * );
-   int astTestGrismNRP_( AstGrismMap *, int * );
-   void astClearGrismNRP_( AstGrismMap *, int * );
-   void astSetGrismNRP_( AstGrismMap *, double, int * );
-
-   double astGetGrismWaveR_( AstGrismMap *, int * );
-   int astTestGrismWaveR_( AstGrismMap *, int * );
-   void astClearGrismWaveR_( AstGrismMap *, int * );
-   void astSetGrismWaveR_( AstGrismMap *, double, int * );
-
-   double astGetGrismAlpha_( AstGrismMap *, int * );
-   int astTestGrismAlpha_( AstGrismMap *, int * );
-   void astClearGrismAlpha_( AstGrismMap *, int * );
-   void astSetGrismAlpha_( AstGrismMap *, double, int * );
-
-   double astGetGrismG_( AstGrismMap *, int * );
-   int astTestGrismG_( AstGrismMap *, int * );
-   void astClearGrismG_( AstGrismMap *, int * );
-   void astSetGrismG_( AstGrismMap *, double, int * );
-
-   int astGetGrismM_( AstGrismMap *, int * );
-   int astTestGrismM_( AstGrismMap *, int * );
-   void astClearGrismM_( AstGrismMap *, int * );
-   void astSetGrismM_( AstGrismMap *, int, int * );
-
-   double astGetGrismEps_( AstGrismMap *, int * );
-   int astTestGrismEps_( AstGrismMap *, int * );
-   void astClearGrismEps_( AstGrismMap *, int * );
-   void astSetGrismEps_( AstGrismMap *, double, int * );
-
-   double astGetGrismTheta_( AstGrismMap *, int * );
-   int astTestGrismTheta_( AstGrismMap *, int * );
-   void astClearGrismTheta_( AstGrismMap *, int * );
-   void astSetGrismTheta_( AstGrismMap *, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckGrismMap(this) astINVOKE_CHECK(GrismMap,this,0)
-#define astVerifyGrismMap(this) astINVOKE_CHECK(GrismMap,this,1)
-
-/* Test class membership. */
-#define astIsAGrismMap(this) astINVOKE_ISA(GrismMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astGrismMap astINVOKE(F,astGrismMap_)
-#else
-#define astGrismMap astINVOKE(F,astGrismMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitGrismMap(mem,size,init,vtab,name) \
-astINVOKE(O,astInitGrismMap_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitGrismMapVtab(vtab,name) astINVOKE(V,astInitGrismMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadGrismMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadGrismMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckGrismMap to validate GrismMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGetGrismNR(this) astINVOKE(V,astGetGrismNR_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismNR(this) astINVOKE(V,astTestGrismNR_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismNR(this) astINVOKE(V,astClearGrismNR_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismNR(this,value) astINVOKE(V,astSetGrismNR_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismNRP(this) astINVOKE(V,astGetGrismNRP_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismNRP(this) astINVOKE(V,astTestGrismNRP_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismNRP(this) astINVOKE(V,astClearGrismNRP_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismNRP(this,value) astINVOKE(V,astSetGrismNRP_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismWaveR(this) astINVOKE(V,astGetGrismWaveR_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismWaveR(this) astINVOKE(V,astTestGrismWaveR_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismWaveR(this) astINVOKE(V,astClearGrismWaveR_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismWaveR(this,value) astINVOKE(V,astSetGrismWaveR_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismAlpha(this) astINVOKE(V,astGetGrismAlpha_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismAlpha(this) astINVOKE(V,astTestGrismAlpha_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismAlpha(this) astINVOKE(V,astClearGrismAlpha_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismAlpha(this,value) astINVOKE(V,astSetGrismAlpha_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismG(this) astINVOKE(V,astGetGrismG_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismG(this) astINVOKE(V,astTestGrismG_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismG(this) astINVOKE(V,astClearGrismG_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismG(this,value) astINVOKE(V,astSetGrismG_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismM(this) astINVOKE(V,astGetGrismM_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismM(this) astINVOKE(V,astTestGrismM_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismM(this) astINVOKE(V,astClearGrismM_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismM(this,value) astINVOKE(V,astSetGrismM_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismEps(this) astINVOKE(V,astGetGrismEps_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismEps(this) astINVOKE(V,astTestGrismEps_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismEps(this) astINVOKE(V,astClearGrismEps_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismEps(this,value) astINVOKE(V,astSetGrismEps_(astCheckGrismMap(this),value,STATUS_PTR))
-
-#define astGetGrismTheta(this) astINVOKE(V,astGetGrismTheta_(astCheckGrismMap(this),STATUS_PTR))
-#define astTestGrismTheta(this) astINVOKE(V,astTestGrismTheta_(astCheckGrismMap(this),STATUS_PTR))
-#define astClearGrismTheta(this) astINVOKE(V,astClearGrismTheta_(astCheckGrismMap(this),STATUS_PTR))
-#define astSetGrismTheta(this,value) astINVOKE(V,astSetGrismTheta_(astCheckGrismMap(this),value,STATUS_PTR))
-
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/install-sh b/ast-5.3-1/install-sh
deleted file mode 100755
index 4d4a951..0000000
--- a/ast-5.3-1/install-sh
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2005-05-14.22
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c         (ignored)
--d         create directories instead of installing files.
--g GROUP   $chgrpprog installed files to GROUP.
--m MODE    $chmodprog installed files to MODE.
--o USER    $chownprog installed files to USER.
--s         $stripprog installed files.
--t DIRECTORY  install into DIRECTORY.
--T         report an error if DSTFILE is a directory.
---help     display this help and exit.
---version  display version info and exit.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
-  case $1 in
-    -c) shift
-        continue;;
-
-    -d) dir_arg=true
-        shift
-        continue;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) chmodcmd="$chmodprog $2"
-        shift
-        shift
-        continue;;
-
-    -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
-
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
-
-    -t) dstarg=$2
-	shift
-	shift
-	continue;;
-
-    -T) no_target_directory=true
-	shift
-	continue;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    *)  # When -d is used, all remaining arguments are directories to create.
-	# When -t is used, the destination is already specified.
-	test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-	for arg
-	do
-          if test -n "$dstarg"; then
-	    # $@ is not empty: it contains at least $arg.
-	    set fnord "$@" "$dstarg"
-	    shift # fnord
-	  fi
-	  shift # arg
-	  dstarg=$arg
-	done
-	break;;
-  esac
-done
-
-if test -z "$1"; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call `install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-for src
-do
-  # Protect names starting with `-'.
-  case $src in
-    -*) src=./$src ;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    src=
-
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
-  else
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dstarg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-
-    dst=$dstarg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst ;;
-    esac
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dstarg: Is a directory" >&2
-	exit 1
-      fi
-      dst=$dst/`basename "$src"`
-    fi
-  fi
-
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
-  # Make sure that the destination directory exists.
-
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-	 '
-    IFS="${IFS-$defaultIFS}"
-
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
-
-    pathcomp=
-
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
-      shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-	# mkdir can fail with a `File exist' error in case several
-	# install-sh are creating the directory concurrently.  This
-	# is OK.
-	test -d "$pathcomp" || exit
-      fi
-      pathcomp=$pathcomp/
-    done
-  fi
-
-  if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
-  else
-    dstfile=`basename "$dst"`
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-    trap '(exit $?); exit' 1 2 13 15
-
-    # Copy the file name to the temp name.
-    $doit $cpprog "$src" "$dsttmp" &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
-    # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
-      || {
-	   # The rename failed, perhaps because mv can't rename something else
-	   # to itself, or perhaps because mv is so ancient that it does not
-	   # support -f.
-
-	   # Now remove or move aside any old file at destination location.
-	   # We try this two ways since rm can't unlink itself on some
-	   # systems and the destination file might be busy for other
-	   # reasons.  In this case, the final cleanup might fail but the new
-	   # file should still install successfully.
-	   {
-	     if test -f "$dstdir/$dstfile"; then
-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-	       || {
-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-		 (exit 1); exit 1
-	       }
-	     else
-	       :
-	     fi
-	   } &&
-
-	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-	 }
-    }
-  fi || { (exit 1); exit 1; }
-done
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit 0
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/interval.c b/ast-5.3-1/interval.c
deleted file mode 100644
index 812e260..0000000
--- a/ast-5.3-1/interval.c
+++ /dev/null
@@ -1,4676 +0,0 @@
-/*
-*class++
-*  Name:
-*     Interval
-
-*  Purpose:
-*     A region representing an interval on one or more axes of a Frame.
-
-*  Constructor Function:
-c     astInterval
-f     AST_INTERVAL
-
-*  Description:
-*     The Interval class implements a Region which represents upper
-*     and/or lower limits on one or more axes of a Frame. For a point to
-*     be within the region represented by the Interval, the point must
-*     satisfy all the restrictions placed on all the axes. The point is
-*     outside the region if it fails to satisfy any one of the restrictions.
-*     Each axis may have either an upper limit, a lower limit, both or
-*     neither. If both limits are supplied but are in reverse order (so
-*     that the lower limit is greater than the upper limit), then the
-*     interval is an excluded interval, rather than an included interval.
-*
-*     Note, The Interval class makes no allowances for cyclic nature of
-*     some coordinate systems (such as SkyFrame coordinates). A Box
-*     should usually be used in these cases since this requires the user 
-*     to think about suitable upper and lower limits,
-
-*  Inheritance:
-*     The Interval class inherits from the Region class.
-
-*  Attributes:
-*     The Interval class does not define any new attributes beyond
-*     those which are applicable to all Regions.
-
-*  Functions:
-c     The Interval class does not define any new functions beyond those
-f     The Interval class does not define any new routines beyond those
-*     which are applicable to all Regions.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     29-OCT-2004 (DSB):
-*        Original version.
-*     19-APR-2006 (DSB):
-*        Negate the cached equivalent Box if the Interval has been negated.
-*     28-MAY-2007 (DSB):
-*        Re-implemented BndBaseMesh.
-*     20-JAN-2009 (DSB):
-*        Over-ride astRegBasePick.
-*     26-JAN-2009 (DSB):
-*        Over-ride astMapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Interval
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==(bb))?1:(((aa)==AST__BAD||(bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Abstract coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "box.h"                 /* Box Regions */
-#include "nullregion.h"          /* Null Regions */
-#include "wcsmap.h"              /* Definitons of AST__DPI etc */
-#include "interval.h"            /* Interface definition for this class */
-#include "ellipse.h"             /* Interface definition for ellipse class */
-#include "mapping.h"             /* Position mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "cmpframe.h"            /* Compound Frames */
-#include "prism.h"               /* Prism regions */
-#include "pointlist.h"           /* Lists of points in a Frame */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static int (* parent_overlap)( AstRegion *, AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_setunc)( AstRegion *, AstRegion *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Interval)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Interval,Class_Init)
-#define class_vtab astGLOBAL(Interval,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstIntervalVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstInterval *astIntervalId_( void *, const double[], const double[], void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstBox *Cache( AstInterval *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *BndBaseMesh( AstRegion *, double *, double *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *MergeInterval( AstInterval *, AstRegion *, int, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static int *OneToOne( AstMapping *, int * );
-static int GetBounded( AstRegion *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void IntervalPoints( AstInterval *, double *, double *, int *);
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void SetUnc( AstRegion *, AstRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-
-static AstPointSet *BndBaseMesh( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     BndBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing points spread around part of the boundary 
-*     of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstPointSet *BndBaseMesh( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Interval method (over-rides the astBndBaseMesh method inherited from
-*     the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a set of points on the
-*     boundary of the intersection between the supplied Region and the
-*     supplied box. The points refer to the base Frame of the 
-*     encapsulated FrameSet. If the boundary of the supplied Region does
-*     not intersect the supplied box, then a PointSet containing a single 
-*     bad point is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array holding the lower limits of the axis values 
-*        within the required box.
-*     ubnd
-*        Pointer to an array holding the upper limits of the axis values 
-*        within the required box.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the uncertainties which were
-*     supplied when the Region was created.
-*     
-*    If the Region does not intersect the supplied box, the returned
-*    PointSet will contain a single point with a value of AST__BAD on
-*    every axis.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstBox *box;
-   AstFrame *bfrm;
-   AstInterval *this_interval;
-   AstMapping *map;
-   AstPointSet *result;  
-   double *lbndb;
-   double *ubndb;
-   double **ptr;
-   int closed;
-   int i;
-   int nbase;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Store a pointer to the interval. */
-   this_interval = (AstInterval *) this;
-
-/* If the Interval is effectively a Box, invoke the astBndBaseMesh
-   function on the equivalent Box. A pointer to the equivalent Box will
-   be stored in the Interval structure. */
-   box = Cache( (AstInterval *) this, status );
-   if( box ) {
-      result = astBndBaseMesh( box, lbnd, ubnd );
-
-/* If the Interval is not equivalent to a Box (i.e. if one or more bounds
-   are missing)... */
-   } else {
-
-/* Find the base frame box that just encloses the supplied current Frame 
-   box. */
-      map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-      nbase = astGetNout( map );
-      lbndb = astMalloc( sizeof(double)*nbase );
-      ubndb = astMalloc( sizeof(double)*nbase );
-      if( astOK ) {
-         for( i = 0; i < nbase; i++ ) {
-            astMapBox( map, lbnd, ubnd, 1, i, lbndb + i, ubndb + i, 
-                       NULL, NULL );
-         }            
-  
-/* Create a Box that is like this Interval except that missing bounds are
-   inherited from the supplied limits. Check that the resulting box is
-   closed. */
-         closed = 1;
-         for( i = 0; i < nbase; i++ ) {
-            if( this_interval->ubnd[ i ] != DBL_MAX ) ubndb[ i ] = this_interval->ubnd[ i ];
-            if( this_interval->lbnd[ i ] != -DBL_MAX ) lbndb[ i ] = this_interval->lbnd[ i ];
-            if( lbndb[ i ] > ubndb[ i ] ) closed = 0;
-         }
-
-/* Cannot create the required mesh if the box is not closed. */
-         if( closed ) {
-
-/* Create the Box. */
-            bfrm = astGetFrame( this->frameset, AST__BASE );
-            box = astBox( bfrm, 1, lbndb, ubndb, NULL, "", status );
-
-/* Create the required mesh. */
-            result = astRegBaseMesh( box );
-
-/* Free resources */
-            bfrm = astAnnul( bfrm );
-            box = astAnnul( box );
-
-/* If the boundary of the supplied Region does not intersect the box,
-   return a PointSet containing a single bad position. */
-         } else {
-            result = astPointSet( 1, nbase, "", status );
-            ptr = astGetPoints( result );
-            if( astOK ) {
-               for( i = 0; i < nbase; i++ ) ptr[ i ][ 0 ] = AST__BAD;
-            }
-         }
-      }
-
-/* Free resources. */
-      map = astAnnul( map );
-      lbndb = astFree( lbndb );
-      ubndb = astFree( ubndb );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-static AstBox *Cache( AstInterval *this, int *status ){
-/*
-*  Name:
-*     Cache
-
-*  Purpose:
-*     Calculate intermediate values and cache them in the Interval structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstBox *Cache( AstInterval *this, int *status )
-
-*  Class Membership:
-*     Interval member function 
-
-*  Description:
-*     This function uses the PointSet stored in the parent Region to calculate 
-*     some intermediate values which are useful in other methods. These
-*     values are stored within the Interval structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Interval.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If the Interval is equivalent to a Box, then a pointer to the
-*     equivalent Box is returned. This is a copy of the pointer stored in
-*     the Interval structure and should not be annulled.
-
-*/
-
-/* Local Variables: */
-   AstBox *bbox;            /* Equivalent base Box */
-   AstFrame *bfrm;          /* Interval base Frame */
-   AstFrame *cfrm;          /* Interval current Frame */
-   AstRegion *map;          /* Interval base->current Mapping */
-   AstRegion *reg;          /* Pointer to this Region structure */
-   AstRegion *unc;          /* Pointer to uncertainty Region */
-   double **ptr;            /* Pointer to data holding all axis limits */
-   double *lbnd;            /* Pointer to array of lower axis limits */
-   double *ubnd;            /* Pointer to array of upper axis limits */
-   int i;                   /* Axis index */
-   int isBox;               /* Is this Interval equivalent to a Box? */
-   int nc;                  /* Number of base Frame axes */
-   int neg;                 /* Is the equivalent Box negated? */
-
-/* Check the global error status. Also return if the cached information
-   is up to date (i.e. not stale). */
-   if( !this->stale || !astOK ) return this->box;
-
-/* Get a pointer to the Region structure */
-   reg = (AstRegion *) this;
-
-/* The Interval structure contains a pointer to an equivalent Box
-   structure. This Box structure is created below if the Interval is
-   equivalent to a Box. Annul any previous box. */
-   if( this->box ) this->box = astAnnul( this->box );
-
-/* Get the number of axes in the base Frame of the FrameSet encapsulated
-   by the parent Region structure. */
-   nc = astGetNin( reg->frameset );
-
-/* Get a pointer to the array holding the axis limits held in the PointSet 
-   encapsulated in the parent Region structure. */
-   ptr = astGetPoints( reg->points );
-
-/* Allocate memory to hold the limits organised per point rather than per
-   axis. */
-   lbnd = astMalloc( sizeof( double )*(size_t)nc );
-   ubnd = astMalloc( sizeof( double )*(size_t)nc );
-
-/* Check these pointers can be used safely. */
-   if( ubnd ) {
-
-/* See if the Interval is effectively a (possibly negated) Box. Assume it
-   is to begin with.  */
-      isBox = 1;
-
-/* Initialisation to prevent compiler warnings. */
-      neg = 0;   
-
-/* Check the limits on every axis. */
-      for( i = 0; i < nc; i++ ) {
-
-/* Copy the axis limits into the allocated arrays (these are needed by the
-   Box constructor later on). */
-         lbnd[ i ] = ptr[ i ][ 0 ];
-         ubnd[ i ] = ptr[ i ][ 1 ];
-
-/* The Interval is not a Box if any axis limit is missing. In this case
-   use -DBL_MAX or +DBL_MAX as the limit to be stored in the Interval
-   structure. */
-         if( lbnd[ i ] == AST__BAD ) lbnd[ i ] = -DBL_MAX;
-         if( fabs( lbnd[ i ] ) == DBL_MAX ) isBox = 0;
-
-         if( ubnd[ i ] == AST__BAD ) ubnd[ i ] = DBL_MAX;
-         if( fabs( ubnd[ i ] ) == DBL_MAX ) isBox = 0;
-
-/* If this is the first axis, note if the axis interval is included or
-   excluded. This is determined by whether the "lower limit" is greater
-   than or less than the "upper limit". If the axis interval is excluded 
-   (lower limit greater than upper limit), then any equivalent Box will be 
-   a negated Box (i.e. will represent the outside of a box rather than 
-   the inside). */
-         if( i == 0 ){
-            neg = ( lbnd[ i ] > ubnd[ i ]  );
-
-/* The Interval is not a Box if the limits for this axis are not the same
-   way round as those of the first axis. */
-         } else {
-   
-            if( neg ) {
-               if( lbnd[ i ] < ubnd[ i ]  ) isBox = 0;
-            } else {
-               if( lbnd[ i ] > ubnd[ i ]  ) isBox = 0;
-            }
-
-         }
-      }
-
-/* If the Interval is effectively an unnegated Box, create the equivalent Box, 
-   and store a pointer to it in the Interval structure. */
-      if( isBox && !neg ) {
-         bfrm = astGetFrame( reg->frameset, AST__BASE );
-         cfrm = astGetFrame( reg->frameset, AST__CURRENT );
-         map = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-         unc = astTestUnc( reg ) ? astGetUncFrm( reg, AST__BASE ) : NULL;
-
-         bbox = astBox( bfrm, 1, lbnd, ubnd, unc, "", status );
-         if( astIsAUnitMap( map ) ){
-            this->box = astClone( bbox );
-         } else {
-            this->box = astMapRegion( bbox, map, cfrm );
-         }
-
-         if( unc ) unc = astAnnul( unc );
-         cfrm = astAnnul( cfrm );
-         bfrm = astAnnul( bfrm );
-         map = astAnnul( map );
-         bbox = astAnnul( bbox );
-
-/* If the supplied Interval has been negated, negate the equivalent Box. */
-         if( astGetNegated( this ) ) astNegate( this->box );
-
-/* If the supplied Interval is closed, ensure the equivalent Box is closed. */
-         astSetClosed( this->box, astGetClosed( this ) );
-      }
-
-/* Store the axis limits in the Interval structure. */
-      if( this->lbnd ) astFree( this->lbnd );
-      if( this->ubnd ) astFree( this->ubnd );
-      this->lbnd = lbnd;
-      this->ubnd = ubnd;
-   }
-
-/* Indicate the cached information is no longer stale, and return a
-   pointer to any equivalent Box. */
-   this->stale = 0;
-   return this->box;
-}
-
-static int GetBounded( AstRegion *this, int *status ) {
-/*
-*  Name:
-*     GetBounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     int GetBounded( AstRegion *this, int *status ) 
-
-*  Class Membership:
-*     Interval method (over-rides the astGetBounded method inherited from
-*     the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the Region is bounded.
-*     The implementation provided by the base Region class is suitable
-*     for Region sub-classes representing the inside of a single closed 
-*     curve (e.g. Circle, Interval, Box, etc). Other sub-classes (such as
-*     CmpRegion, PointList, etc ) may need to provide their own
-*     implementations.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   int result;                /* Returned result */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* The unnegated Interval is bounded only if there is an equivalent Box
-   structure stored in the Interval structure. */
-   if( Cache( (AstInterval *) this, status ) ) result = 1;
-
-/* Return the required pointer. */
-   return result;
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetDefUnc
-
-*  Purpose:
-*     Obtain a pointer to the default uncertainty Region for a given Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstRegion *GetDefUnc( AstRegion *this, int *status ) 
-
-*  Class Membership:
-*     Interval member function (over-rides the astGetDefUnc protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a pointer to a Region which represents the
-*     default uncertainty associated with a position on the boundary of the 
-*     given Region. The returned Region refers to the base Frame within the 
-*     FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstBox *box;               /* Pointer to equivalent Box */
-   AstFrame *bfrm;            /* Base Frame of supplied Region */
-   AstInterval *this;         /* Pointer to Interval structure */
-   AstRegion *result;         /* Returned pointer */
-   double *lbnd;              /* Ptr. to array holding axis lower bounds */
-   double *ubnd;              /* Ptr. to array holding axis upper bounds */
-   double c;                  /* Central axis value */
-   double hw;                 /* Half width of uncertainty interval */
-   int i;                     /* Axis index */
-   int nax;                   /* Number of base Frame axes */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Interval structure. */
-   this = (AstInterval *) this_region;
-
-/* If this Interval is equivalent to a Box, get the default uncertainty
-   for the equivalent Box and return it. */
-   box = Cache( this, status );
-   if( box ) {
-      result = astGetDefUnc( box );
-
-/* Otherwise, we use a box covering 1.0E-6 of each axis interval, centred on 
-   the origin. */
-   } else {
-
-/* Get a pointer to the base Frame. */
-      bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the number of base Frame axes. */
-      nax = astGetNaxes( bfrm );
-
-/* Allocate arrays to hold the bounds of the uncertainty Box. */
-      lbnd = astMalloc( sizeof( double)*(size_t) nax );
-      ubnd = astMalloc( sizeof( double)*(size_t) nax );
-      if( astOK ) {
-
-/* Ensure cached information (e.g.bounds) is up to date. */
-         Cache( this, status );
-
-/* Do each axis in turn */
-         for( i = 0; i < nax; i++ ) {
-
-/* If this axis has both limits, use 1.0E-6 of the difference between the
-   limits. */
-            if( this->lbnd[ i ] != -DBL_MAX && 
-                this->ubnd[ i ] != DBL_MAX ) {
-               hw = fabs( 0.5E-6*(  this->ubnd[ i ] - this->lbnd[ i ] ) );
-               c = 0.5*(  this->ubnd[ i ] + this->lbnd[ i ] );
-               if( hw == 0.0 ) hw = c*0.5E-6;
-               ubnd[ i ] = c + hw;
-               lbnd[ i ] = c - hw;
-
-/* Otherwise use zero. */
-            } else {
-               ubnd[ i ] = 0.0;
-               lbnd[ i ] = 0.0;
-            }
-         }
-
-/* Create the Box. */
-         result = (AstRegion *) astBox( bfrm, 1, lbnd, ubnd, NULL, "", status );
-      }
-
-/* Free resources. */
-      lbnd = astFree( lbnd );
-      ubnd = astFree( ubnd );
-      bfrm = astAnnul( bfrm );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-void astInitIntervalVtab_(  AstIntervalVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitIntervalVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Interval.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     void astInitIntervalVtab( AstIntervalVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Interval vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Interval class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAInterval) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->IntervalPoints = IntervalPoints;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_overlap = region->Overlap;
-   region->Overlap = Overlap;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_resetcache = region->ResetCache;
-   region->ResetCache = ResetCache;
-
-   parent_setunc = region->SetUnc;
-   region->SetUnc = SetUnc;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping->MapMerge = MapMerge;
-
-   region->RegCentre = RegCentre;
-   region->GetBounded = GetBounded;
-   region->GetDefUnc = GetDefUnc;
-   region->RegPins = RegPins;
-   region->RegTrace = RegTrace;
-   region->RegBaseMesh = RegBaseMesh;
-   region->BndBaseMesh = BndBaseMesh;
-   region->RegBaseBox = RegBaseBox;
-   region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Interval", "Axis intervals" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-void IntervalPoints( AstInterval *this, double *lbnd, double *ubnd, 
-                     int *status) {
-/*
-*+
-*  Name:
-*     astIntervalPoints
-
-*  Purpose:
-*     Return the defining points of a Interval.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "box.h"
-*     astIntervalPoints( AstInterval *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns the axis values at the points defining the
-*     supplied Interval.
-
-*  Parameters:
-*     this
-*        Pointer to the Interval.
-*     lbnd
-*        A pointer to an array in which to return the "lbnd" values
-*        supplied when the Interval was constructed. These are in the
-*        base Frame of the encapsilated FrameSet.
-*     ubnd
-*        A pointer to an array in which to return the "ubnd" values
-*        supplied when the Interval was constructed. These are in the
-*        base Frame of the encapsilated FrameSet.
-
-*  Notes:
-*     - It is assumed that the length of the supplied arrays is at least
-*     equal to the number of axes in the base frame of the encapsulated
-*     FrameSet.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset;        
-   double **ptr;
-   int nc;
-   int i;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the PointSet holding the points defining the Interval. */
-   pset = ((AstRegion *) this)->points;
-
-/* Get a pointer to the PointSet's data arrays. */
-   ptr = astGetPoints( pset );
-
-/* See how many axes each point in the PointSet has. */
-   nc = astGetNcoord( pset );
-
-/* Copy the axis values from the PointSet into the supplied arrays. */
-   for( i = 0; i < nc; i++ ) {
-      lbnd[ i ] = ptr[ i ] [ 0 ];
-      ubnd[ i ] = ptr[ i ] [ 1 ];
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     Interval member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstInterval *this;       /* Pointer to Interval structure */
-   int result;              /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the Interval structure. */
-   this = (AstInterval *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->box, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a Interval.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     Interval method (over-rides the protected astMapMerge method
-*     inherited from the Region class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated Interval in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated Interval with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated Interval which is to be merged with
-*        its neighbours. This should be a cloned copy of the Interval
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        Interval it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated Interval resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstInterval *oldint;  /* Pointer to supplied Interval */
-   AstMapping *map;      /* Pointer to adjacent Mapping */
-   AstMapping *new;      /* Simplified or merged Region */
-   int i1;               /* Index of first Mapping merged */
-   int i;                /* Loop counter */
-   int result;           /* Result value to return */
-
-/* Initialise. */
-   result = -1;
-   i1 = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Interval. */
-   oldint = (AstInterval *) this;
-
-/* First of all, see if the Interval can be replaced by a simpler Region,
-   without reference to the neighbouring Regions in the list.           */
-/* =====================================================================*/
-
-/* Try to simplify the Interval. If the pointer value has changed, we assume
-   some simplification took place. */
-   new = astSimplify( oldint );
-   if( new != (AstMapping *) oldint ) {
-
-/* Annul the Interval pointer in the list and replace it with the new Region
-   pointer, and indicate that the forward transformation of the returned
-   Region should be used (not really needed but keeps things clean). */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = new;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-
-/* If the Interval itself could not be simplified, see if it can be merged
-   with the Regions on either side of it in the list. We can only merge
-   in parallel. */
-/* =====================================================================*/
-   } else if( ! series ){
-      new = astAnnul( new );
-
-/* Attempt to merge the Interval with its lower neighbour (if any). */
-      if( where > 0 ) {
-         i1 = where - 1;
-         map = ( *map_list )[ where - 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergeInterval( oldint, (AstRegion *) map,
-                                                0, status );
-         }
-      }
-
-/* If this did not produced a merged Region, attempt to merge the Interval 
-   with its upper neighbour (if any). */
-      if( !new && where < *nmap - 1 ) {
-         i1 = where;
-         map = ( *map_list )[ where + 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergeInterval( oldint, (AstRegion *) map,
-                                                1, status );
-         }
-      }
-
-/* If succesfull... */
-      if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   Region. Also clear the invert flag. */ 
-         (void) astAnnul( ( *map_list )[ i1 ] );
-         ( *map_list )[ i1 ] = new;
-         ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-         (void) astAnnul( ( *map_list )[ i1 + 1 ] );
-         for ( i = i1 + 2; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-
-/* Clear the vacated element at the end. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap )--;
-         result = i1;
-      }
-
-   } else {
-      new = astAnnul( new );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *MergeInterval( AstInterval *this, AstRegion *reg, 
-                                 int intfirst, int *status ) {
-/*
-*  Name:
-*     MergeInterval
-
-*  Purpose:
-*     Attempt to merge a Interval with another Region to form a Region of 
-*     higher dimensionality.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "box.h"
-*     AstRegion *MergeInterval( AstInterval *this, AstRegion *reg, 
-*                               int intfirst, int *status ) 
-
-*  Class Membership:
-*     Interval member function.
-
-*  Description:
-*     This function attempts to combine the supplied Regions together
-*     into a Region of higher dimensionality. 
-
-*  Parameters:
-*     this
-*        Pointer to a Interval.
-*     reg
-*        Pointer to another Region.
-*     intfirst
-*        If non-zero, then the Interval axes are put first in the new Region.
-*        Otherwise, the other Region's axes are put first.
-*     status
-*        Pointer to the inherited status value.
-
-*  Returned Value:
-*     A pointer to a new region, or NULL if the supplied Regions could
-*     not be merged.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;           /* Pointer to base Frame for "result" */
-   AstFrame *cfrm;           /* Pointer to current Frame for "result" */
-   AstFrame *frm_reg;        /* Pointer to Frame from "reg" */
-   AstFrame *frm_this;       /* Pointer to Frame from "this" */
-   AstMapping *bcmap;        /* Base->current Mapping for "result" */
-   AstMapping *map_reg;      /* Base->current Mapping from "reg" */
-   AstMapping *map_this;     /* Base->current Mapping from "this" */
-   AstMapping *sbunc;        /* Simplified uncertainty */
-   AstPointSet *pset_new;    /* PointSet holding PointList axis values for new */
-   AstPointSet *pset_reg;    /* PointSet holding PointList axis values for reg */
-   AstRegion *bunc;          /* Base Frame uncertainty Region */
-   AstRegion *new;           /* Pointer to new Interval in base Frame */
-   AstRegion *result;        /* Pointer to returned Interval in current Frame */
-   AstRegion *unc_reg;       /* Current Frame uncertainty Region from "reg" */
-   AstRegion *unc_this;      /* Current Frame uncertainty Region from "this" */
-   double **ptr_new;         /* Pointers to arrays holding new axis values */
-   double **ptr_reg;         /* Pointers to arrays holding reg axis values */
-   double *centre;           /* Array to hold Interval centre axis values */
-   double *corner;           /* Array to hold Interval corner axis values */
-   double *lbnd;             /* Array to hold lower axis bounds */
-   double *lbnd_unc;         /* Array to hold uncertainty lower bounds */
-   double *p;                /* Pointer to next input value */
-   double *q;                /* Pointer to next output value */
-   double *ubnd;             /* Array to hold upper axis bounds */
-   double *ubnd_unc;         /* Array to hold uncertainty upper bounds */
-   double fac_reg;           /* Ratio of used to default MeshSize for "reg" */
-   double fac_this;          /* Ratio of used to default MeshSize for "this" */
-   double temp;              /* Temporary storage */
-   int i;                    /* Loop count */
-   int j;                    /* Loop count */
-   int msz_reg;              /* Original MeshSize for "reg" */
-   int msz_reg_set;          /* Was MeshSize originally set for "reg"? */
-   int msz_this;             /* Original MeshSize for "this" */
-   int msz_this_set;         /* Was MeshSize originally set for "this"? */
-   int nax;                  /* Number of axes in "result" */
-   int nax_reg;              /* Number of axes in "reg" */
-   int nax_this;             /* Number of axes in "this" */
-   int neg_reg;              /* Negated attribute value for other supplied Region */
-   int neg_this;             /* Negated attribute value for supplied Interval  */
-   int npnt;                 /* Number of points in PointList */
-   int ok;                   /* Can supplied Regions be merged? */
-
-/* Initialise */
-   result = NULL;
-   lbnd = NULL;
-   ubnd = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in 
-   each Region if we are to merge the Regions. In addition, in order to 
-   merge, either both Regions must have a defined uncertainty, or neither 
-   Region must have a defined Uncertainty. */
-   if( astGetClosed( this ) == astGetClosed( reg ) &&
-       astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
-      neg_this = astGetNegated( this );
-      neg_reg = astGetNegated( reg );
-
-/* Get the number of axes in the two supplied Regions. */
-      nax_reg = astGetNaxes( reg );
-      nax_this = astGetNaxes( this );
-   
-/* If the Regions can be combined, get the number of axes the
-   combination will have. */
-      nax = nax_reg + nax_this;
-   
-/* Get the base Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame that will be used to create any new Region. */
-      frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-      frm_reg = astGetFrame( reg->frameset, AST__BASE );
-   
-      if( intfirst ) {
-         bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-      } else {
-         bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-      }
-   
-      frm_this = astAnnul( frm_this );
-      frm_reg = astAnnul( frm_reg );
-   
-/* Indicate we do not yet have a merged Region. */
-      new = NULL;
-   
-/* First attempt to merge with another Interval. The result will be an
-   Interval. Both Intervals must be un-negated. */
-      if( astIsAInterval( reg ) && !neg_this && !neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax );
-   
-/* Copy the limits from the supplied Intervals into the above arrays, 
-   in the requested order. */
-         if( intfirst ) {
-            astIntervalPoints( this, lbnd, ubnd );
-            astIntervalPoints( reg, lbnd + nax_this, ubnd + nax_this );
-         } else {
-            astIntervalPoints( reg, lbnd, ubnd );
-            astIntervalPoints( this, lbnd + nax_reg, ubnd + nax_reg );
-         }
-   
-/*  Create the new Interval, initially with no uncertainty. */
-         new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "", 
-                                          status );
-   
-/* Free resources .*/
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a Box. The result will be an Interval. Both
-   Regions must be un-negated. */
-      } else if( astIsABox( reg ) && !neg_this && !neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax );
-   
-/* Get the bounds from the Interval and add them into the above arrays. */
-         if( intfirst ) {
-            astIntervalPoints( this, lbnd, ubnd );
-         } else {
-            astIntervalPoints( this, lbnd + nax_reg, ubnd + nax_reg );
-         }
-
-/* Copy the centre and corner from the supplied Box into the required part
-   of the above arrays. */
-         if( intfirst ) {
-            centre = lbnd + nax_this;
-            corner = ubnd + nax_this;
-         } else {
-            centre = lbnd;
-            corner = ubnd;
-         }
-         astBoxPoints( reg, centre, corner );
-
-/* Convert these centre and corner positions into upper and lower bounds. */
-         if( astOK ) {
-            for( i = 0; i < nax_reg; i++ ) {
-               centre[ i ] = 2*centre[ i ] - corner[ i ];
-               if( centre[ i ] > corner[ i ] ) {
-                  temp = centre[ i ];
-                  centre[ i ] = corner[ i ];
-                  corner[ i ] = temp;
-               }
-            }
-         }
-
-/*  Create the new Interval, initially with no uncertainty. */
-         new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "", 
-                                          status );
-   
-/* Free resources .*/
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-   
-/* Now attempt to merge with a NullRegion. The result will be an Interval. 
-   The NullRegion must be negated and the Interval must not. */
-      } else if( astIsANullRegion( reg ) && !neg_this && neg_reg ) {
-
-/* Allocate memory to store the bounds of the returned Interval. */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax );
-   
-/* Copy the limits from the supplied Interval into the above arrays.
-   Store bad values for the other axes indicating they are unbounded. */
-         if( intfirst ) {
-            astIntervalPoints( this, lbnd, ubnd );
-            for( i = nax_this; i < nax; i++ ) {
-               lbnd[ i ] = AST__BAD;
-               ubnd[ i ] = AST__BAD;
-            }
-         } else {
-            for( i = 0; i < nax_reg; i++ ) {
-               lbnd[ i ] = AST__BAD;
-               ubnd[ i ] = AST__BAD;
-            }
-            astIntervalPoints( this, lbnd + nax_reg, ubnd + nax_reg );
-         }
-
-/*  Create the new Interval, initially with no uncertainty. */
-         new = (AstRegion *) astInterval( bfrm, lbnd, ubnd, NULL, "", 
-                                          status );
-
-/* Free resources .*/
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-
-/* Now attempt to merge with a PointList. The result will be a PointList.
-   Both Regions must be un-negated. */
-      } else if( astIsAPointList( reg ) && !neg_this && !neg_reg ) {
-   
-/* We can only do this if the Interval has zero width on each axis (i.e.
-   represents a point). Get the Interval bounds.  */
-         lbnd = astMalloc( sizeof( double )*(size_t) nax_this );
-         ubnd = astMalloc( sizeof( double )*(size_t) nax_this );
-         astRegBaseBox( this, lbnd, ubnd );
-
-/* Get the size of the Interval's uncertainty region. */
-         lbnd_unc = astMalloc( sizeof( double )*(size_t) nax_this );
-         ubnd_unc = astMalloc( sizeof( double )*(size_t) nax_this );
-         bunc = astGetUncFrm( this, AST__BASE );
-         astGetRegionBounds( bunc, lbnd, ubnd );
-
-/* Set "ok" to zero if the Interval does not have zero width on any axis. Here
-   "zero width" means a width less than half the uncertainty on the axis.
-   We also replace the lower bound values in the "lbnd" array by the central 
-   values in the Interval. */
-         if( astOK ) {
-            ok = 1;
-            for( i = 0; i < nax_this; i++ ) {
-               if( fabs( lbnd[ i ] - lbnd[ i ] ) > 
-                   0.25*fabs( ubnd_unc[ i ] - lbnd_unc[ i ] ) ) {
-                  ok = 0;
-                  break;
-               } else {
-                  lbnd[ i ] = 0.5*( lbnd[ i ] + ubnd[ i ] );
-               }
-            }
-   
-/* If the Interval is a point, we go on to create a new PointList. */
-            if( ok ) {
-   
-/* Get a PointSet holding the axis values in the supplied PointList data.
-   Also get the number of points in the PointSet and pointers to the arrays
-   holding the axis values. */
-               astPointListPoints( reg, &pset_reg );
-               npnt = astGetNpoint( pset_reg );
-               ptr_reg = astGetPoints( pset_reg );
-
-/*  Create a new PointSet with room for the same number of points, but
-    with the extra required axes. Get pointers to its axis arrays. */
-               pset_new = astPointSet( npnt, nax, "", status );
-               ptr_new = astGetPoints( pset_new );
-                
-/* Copy the PointList axis values into the new PointSet, and then include
-   the extra axis values defined by the Interval to each point. */
-               if( astOK ) {
-
-                  for( j = 0; j < nax_reg; j++ ) {
-                     p = ptr_reg[ j ];
-                     q = ptr_new[ intfirst ? nax_this + j : j ];
-                     for( i = 0; i < npnt; i++ ) *(q++) = *(p++);
-                  }   
-
-                  for( j = 0; j < nax_this; j++ ) {
-                     p = lbnd + j;
-                     q = ptr_new[ intfirst ? j : nax_reg + j ];
-                     for( i = 0; i < npnt; i++ ) *(q++) = *p;
-                  }   
-
-/*  Create the new PointList, initially with no uncertainty. */
-                  new = (AstRegion *) astPointList( bfrm, pset_new, NULL, 
-                                                    "", status );
-               }   
-
-/* Free resources .*/
-               pset_new = astAnnul( pset_new );
-               pset_reg = astAnnul( pset_reg );
-            }
-         }
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-         lbnd_unc = astFree( lbnd_unc );
-         ubnd_unc = astFree( ubnd_unc );
-         bunc = astAnnul( bunc );
-
-      }
-
-/* If a new Region was created above, propagate remaining attributes of
-   the supplied Region to it. */
-      if( new ) {
-         astRegOverlay( new, this, 1 );
-
-/* The above Prism constructors create the Prism with the correct value
-   for the Nagated attribute (i.e. zero). Ensure the above call to
-   astRegOverlay has not changed this. */
-         astClearNegated( new );
-
-/* If both the supplied Regions have uncertainty, assign the new Region an 
-   uncertainty. */
-         if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
-            unc_this = astGetUncFrm( this, AST__BASE );
-            unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
-            if( intfirst ) {
-               bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
-            } else {
-               bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
-            }
-
-/* Attempt to simplify the Prism. */
-            sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
-            astSetUnc( new, sbunc );
-
-/* Free resources. */
-            sbunc = astAnnul( sbunc );
-            bunc = astAnnul( bunc );
-            unc_reg = astAnnul( unc_reg );
-            unc_this = astAnnul( unc_this );
-         }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame. */
-         frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
-         frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-      
-         if( intfirst ) {
-            cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-         } else {
-            cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-         }
-      
-/* Get the base -> current Mappings from the two Region FrameSets, and 
-   combine them into a single parallel CmpMap that connects bfrm and cfrm. */
-         map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE, 
-                                   AST__CURRENT );
-         map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-      
-         if( intfirst ) {
-            bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "", 
-                                              status );
-         } else {
-            bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "", 
-                                              status );
-         }
-      
-/* Map the new Region into the new current Frame. */
-         result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
-   factors for the two supplied Regions. */
-         if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
-            astSetFillFactor( result, astGetFillFactor( reg )*
-                                      astGetFillFactor( this ) );
-         }
-
-/* If the MeshSize value is set in either supplied Region, set a value
-   for the returned Region which scales the default value by the
-   product of the scaling factors for the two supplied Regions. First see
-   if either MeshSize value is set. */
-         msz_this_set = astTestMeshSize( this );
-         msz_reg_set = astTestMeshSize( reg );
-         if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
-   value), and then clear them so that the default value will be returned
-   in future. */
-            msz_this = astGetMeshSize( this );
-            msz_reg = astGetMeshSize( reg );
-            astClearMeshSize( this );
-            astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
-   Regions. */
-            fac_this = (double)msz_this/(double)astGetMeshSize( this );
-            fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
-   the product of the two ratios found above. */
-            astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
-   set) */
-            if( msz_this_set ) astSetMeshSize( this, msz_this );
-            if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
-         }
-
-/* Free remaining resources */
-         frm_this = astAnnul( frm_this );
-         frm_reg = astAnnul( frm_reg );
-         map_this = astAnnul( map_this );
-         map_reg = astAnnul( map_reg );
-         bcmap = astAnnul( bcmap );
-         new = astAnnul( new );
-         cfrm = astAnnul( cfrm );
-      }
-      bfrm = astAnnul( bfrm );
-
-   }
-
-/* If an error has occurred, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int *OneToOne( AstMapping *map, int *status ){
-/*
-*  Name:
-*     OneToOne
-
-*  Purpose:
-*     Does each output of the supplied Mapping depend on only one input?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     int OneToOne( AstMapping *map, int *status )
-
-*  Class Membership:
-*     Interval method 
-
-*  Description:
-*     This function returns a flag indicating if the Mapping is 1-to-1.
-*     That is, if each output depends only on one input.
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If the Mapping is 1-to-1, a pointer to an array of ints is returned
-*     (NULL is returned otherwise). There is one int for each output of
-*     the supplied Mapping. The value of each int is the index of the
-*     corresponding input which feeds the output. The array should be
-*     freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
-   int *result;      
-   const char *class;
-   int nout;
-   int i;
-   int *tt;
-   AstMapping *tmap;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the number of outputs for the Mapping. */
-   nout = astGetNout( map );
-
-/* The Mapping cannot be 1-to-1 if the number of inputs is different.*/
-   if( astGetNin( map ) == nout ) {
-
-/* Allocate an output array on the assumption that the Mapping is 1-to-1. */
-      result = astMalloc( sizeof( int )*(size_t) nout );
-      if( result ) {
-
-/* Check known specal cases for speed. */
-         class = astGetClass( map );
-         if( !strcmp( class, "WinMap" ) ||
-             !strcmp( class, "ZoomMap" ) ||
-             !strcmp( class, "UnitMap" ) ||
-             !strcmp( class, "ShiftMap" ) ){
-
-/* Each output is fed by the corresponding input for these classes of
-   Mapping. */
-            for( i = 0; i < nout; i++ ) result[ i ] = i;
-
-/* Now do the general case. */
-         } else {
-
-/* Loop round each input axis. */
-            for( i = 0; i < nout; i++ ) {
-
-/* Use astMapSplit to see if this input corresponds to a single output. */
-               tt = astMapSplit( map, 1, &i, &tmap );
-
-/* If not, annul the returned array and break. */
-               if( !tmap ) {
-                  result = astFree( result );
-                  break;
-
-/* If so, store the index of the corresponding input in the returned
-   array and free resources. */
-               } else {
-                 result[ tt[ 0 ] ] = i;
-                 tt = astFree( tt );
-                 if( astGetNout( tmap ) != 1 ) result = astFree( result );
-                 tmap = astAnnul( tmap );
-                 if( !result ) break;
-               }
-            }
-         }
-      }
-   }
-
-/* Return the result */
-   return result;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-*  Name:
-*     Overlap
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     int Overlap( AstRegion *this, AstRegion *that, int *status ) 
-
-*  Class Membership:
-*     Interval member function (over-rides the astOverlap method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function returns an integer value indicating if the two
-*     supplied Regions overlap. The two Regions are converted to a commnon
-*     coordinate system before performing the check. If this conversion is 
-*     not possible (for instance because the two Regions represent areas in
-*     different domains), then the check cannot be performed and a zero value 
-*     is returned to indicate this.
-
-*  Parameters:
-*     this
-*        Pointer to the first Region.
-*     that
-*        Pointer to the second Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     astOverlap()
-*        A value indicating if there is any overlap between the two Regions.
-*        Possible values are:
-*
-*        0 - The check could not be performed because the second Region
-*            could not be mapped into the coordinate system of the first 
-*            Region.
-*
-*        1 - There is no overlap between the two Regions.
-*
-*        2 - The first Region is completely inside the second Region.
-*
-*        3 - The second Region is completely inside the first Region.
-*
-*        4 - There is partial overlap between the two Regions.
-*
-*        5 - The Regions are identical.
-*
-*        6 - The second Region is the negation of the first Region.
-
-*  Notes:
-*     - The returned values 5 and 6 do not check the value of the Closed 
-*     attribute in the two Regions. 
-*     - A value of zero will be returned if this function is invoked with the 
-*     AST error status set, or if it should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstFrameSet *fs;
-   AstMapping *map;
-   AstMapping *map1;
-   AstMapping *map2;
-   AstMapping *map3;
-   AstMapping *smap;
-   AstMapping *tmap;
-   AstPointSet *pset_that;
-   AstRegion *unc_temp;
-   AstRegion *unc_that;
-   AstRegion *unc_this;
-   double **ptr_that;
-   double **ptr_thato;
-   double **ptr_this;
-   double *lbndu_that;
-   double *lbndu_this;
-   double *ubndu_that;
-   double *ubndu_this;
-   double err;
-   double err_that;
-   double err_this;
-   double lb_that;
-   double lb_this;
-   double tmp;
-   double ub_that;
-   double ub_this;
-   int *outperm;
-   int ic;
-   int inc_that;
-   int inc_this;
-   int lb_equal;
-   int nc;
-   int neg_that;
-   int neg_this;
-   int ov;
-   int result;     
-   int ub_equal;
-
-   static int newResult[ 5 ][ 5 ] = { { 1, 1, 1, 1, 1},
-                                      { 1, 2, 4, 4, 2},
-                                      { 1, 4, 3, 4, 3},
-                                      { 1, 4, 4, 4, 4},
-                                      { 1, 2, 3, 4, 5} };
-
-/* Initialise */
-   result = 0;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* If both Regions are Intervals, we provide a specialised implementation.
-   The implementation in the parent Region class assumes that at least one of 
-   the two Regions can be represented using a finite mesh of points on the 
-   boundary which is not the case with Intervals. The implementation in this 
-   class sees if the Mapping between the base Frames of the Intervals allows 
-   the axis limits to be transferred from one Frame ot the other. */
-   if( astIsAInterval( this ) && astIsAInterval( that ) ) {
-
-/* Get a FrameSet which connects the Frame represented by the second Interval
-   to the Frame represented by the first Interval. Check that the conection is 
-   defined. */
-      fs = astConvert( that, this, "" );
-      if( fs ) {
-
-/* Get a pointer to the Mapping from base to current Frame in the second 
-   Interval */
-         map1 = astGetMapping( that->frameset, AST__BASE, AST__CURRENT );
-
-/* Get the Mapping from the current Frame of the second Interval to the
-   current Frame of the first Interval. */
-         map2 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the Mapping from current to base Frame in the first
-   Interval. */
-         map3 = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-
-/* Combine these Mappings to get the Mapping from the base Frame of the
-   second Interval to the base Frame of the first Interval. */
-         tmap = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-         map = (AstMapping *) astCmpMap( tmap, map3, 1, "", status );
-
-/* Simplify this Mapping. */
-         smap = astSimplify( map );
-
-/* We can only proceed if each output of the simplified Mapping depends
-   on only one input. Test this. */
-         outperm = OneToOne( smap, status );
-         if( outperm ){
-
-/* Get the uncertainty Regions for both Intervals, expressed in the base
-   Frames of the Intervals. */
-            unc_this = astGetUncFrm( this, AST__BASE );
-            unc_temp = astGetUncFrm( that, AST__BASE );
-
-/* Map the uncertainty Region for the second Interval from the base Frame
-   of the second Interval into the base Frame of the first Interval. */
-            frm = astGetFrame( this->frameset, AST__BASE );
-            unc_that = astMapRegion( unc_temp, smap, frm );
-
-/* Get the bounding boxes of the two uncertainty Regions in the base
-   Frame of the first Interval. */
-            nc = astGetNaxes( frm );
-            lbndu_this = astMalloc( sizeof( double )*(size_t)nc );
-            ubndu_this = astMalloc( sizeof( double )*(size_t)nc );
-            astGetRegionBounds( unc_this, lbndu_this, ubndu_this ); 
-
-            lbndu_that = astMalloc( sizeof( double )*(size_t)nc );
-            ubndu_that = astMalloc( sizeof( double )*(size_t)nc );
-            astGetRegionBounds( unc_that, lbndu_that, ubndu_that ); 
-
-/* Transform the PointSet holding the limits for the second Interval into
-   the Frame of the first Interval. */
-            pset_that = astTransform( smap, that->points, 1, NULL );
-
-/* Get pointers for accesing the limits of the two Intervals, expressed
-   in a common Frame (the base Frame of the first Interval). */
-            ptr_that = astGetPoints( pset_that );
-            ptr_thato = astGetPoints( that->points );
-            ptr_this = astGetPoints( this->points );
-            if( astOK ) {
-
-/* Check the limits on each base Frame axis in turn. */
-               for( ic = 0; ic < nc; ic++ ) {
-
-/* Get the widths of the two uncertainty boxes on this axis. */
-                  err_this = ubndu_this[ ic ] - lbndu_this[ ic ];
-                  err_that = ubndu_that[ ic ] - lbndu_that[ ic ];
-
-/* Add this together in quadrature to get the tolerance for two values on
-   the current axis to be considered equal. */
-                  err = sqrt( err_that*err_that + err_this*err_this );
- 
-/* Get the limits on this axis from both Intervals. */
-                  lb_this = ptr_this[ ic ][ 0 ];
-                  ub_this = ptr_this[ ic ][ 1 ];
-                  lb_that = ptr_that[ ic ][ 0 ];
-                  ub_that = ptr_that[ ic ][ 1 ];
-
-/* The limits for "that" have been mapped, which may have resulted in
-   them being swapped. We need to unswap them in this case to prevent the 
-   swapping being used as an indication of a desire to use an excluded
-   interval rather than an included interval. */ 
-                   if( lb_that != AST__BAD && ub_that != AST__BAD ) {
-                      if( ptr_thato[ ic ][ 0 ] < ptr_thato[ ic ][ 1 ] ) {
-                         if( lb_that > ub_that ) {
-                            tmp = lb_that;
-                            lb_that = ub_that;
-                            ub_that = tmp;
-                         }
-                      } else {
-                         if( lb_that < ub_that ) {
-                            tmp = lb_that;
-                            lb_that = ub_that;
-                            ub_that = tmp;
-                         }
-                      }
-                   }
-
-/* If the regions are not closed, reduce the limits by the smallest
-   amount possible. */
-                  if( !astGetClosed( that ) ) {
-                     if( lb_that != AST__BAD && lb_that < DBL_MAX ) 
-                         lb_that += DBL_EPSILON*fabs(lb_that);
-                     if( ub_that != AST__BAD && ub_that > -DBL_MAX ) 
-                         ub_that -= DBL_EPSILON*fabs(ub_that);
-                  }
-                  if( !astGetClosed( this ) ) {
-                     if( lb_this != AST__BAD && lb_this < DBL_MAX ) 
-                         lb_this += DBL_EPSILON*fabs(lb_this);
-                     if( ub_this != AST__BAD && ub_this > -DBL_MAX ) 
-                         ub_this -= DBL_EPSILON*fabs(ub_this);
-                  }
-
-/* Replace any missing limits with suitable extreme values */
-                  if( lb_this == AST__BAD ) lb_this = -DBL_MAX;
-                  if( ub_this == AST__BAD ) ub_this = DBL_MAX;
-                  if( lb_that == AST__BAD ) lb_that = -DBL_MAX;
-                  if( ub_that == AST__BAD ) ub_that = DBL_MAX;
-
-/* If the bounds are the wrong way round (indicating an excluded rather
-   than an included axis range), swap them. Also set a flag indicating if 
-   the limits define an included or excluded range. */
-                  inc_this = ( lb_this <= ub_this );
-                  if( !inc_this ) {
-                     tmp = lb_this;
-                     lb_this = ub_this;
-                     ub_this = tmp;
-                  } 
-
-                  inc_that = ( lb_that <= ub_that );
-                  if( !inc_that ) {
-                     tmp = lb_that;
-                     lb_that = ub_that;
-                     ub_that = tmp;
-                  } 
-
-
-/* Are the lower limits from the two Intervals effectively equal? Take care 
-   about DBL_MAX values causing overflow. */
-                  lb_equal = EQUAL( lb_this, lb_that );
-
-                  if( !lb_equal && fabs(lb_this) != DBL_MAX &&
-                                   fabs(lb_that) != DBL_MAX ) {
-                     lb_equal = ( fabs( lb_this - lb_that) <= err );
-                  }
-                                       
-/* Are the upper limits from the two Intervals effectively equal? */
-                  ub_equal = EQUAL( ub_this, ub_that );
-                  if( !ub_equal && fabs(ub_this) != DBL_MAX &&
-                                   fabs(ub_that) != DBL_MAX ) {
-                     ub_equal = ( fabs( ub_this - ub_that) <= err );
-                  }
-
-
-
-/* If both the limits on this axis are effectively equal for the two Intervals,
-   set "ov" to 5 if both Interval ranges are inclusive or both are exclusive,
-   and set "ov" to 6 if one Interval range is exclusive and the other is
-   inclusive. */
-                  if( lb_equal && ub_equal ) {
-                     ov = ( inc_this == inc_that ) ? 5 : 6;
- 
-/* See if the limits on this axis indicate overlap for the two Intervals. "ov" 
-   is set to 1 if there is no overlap, 2 if the first Interval range is 
-   completely inside the second Interval range, 3 if the second Interval
-   range is completely inside the first Interval range, and 4 if there is 
-   partial overlap between the Interval ranges. */
-                  } else if( inc_this ) {
-                     if( inc_that ) {
-                        if( lb_that <= lb_this && ub_that >= ub_this ) {
-                           ov = 2;
-                        } else if( lb_that >= lb_this && ub_that <= ub_this ) {
-                           ov = 3;
-                        } else if( ub_that >= lb_this && lb_that <= ub_this ) {
-                           ov = 4;
-                        } else {
-                           ov = 1;
-                        }
-
-                     } else {
-
-                        if( lb_that <= lb_this && ub_that >= ub_this ) {
-                           ov = 1;
-                        } else if( lb_that >= ub_this || ub_that <= lb_this ) {
-                           ov = 2;
-                        } else if( lb_this == -DBL_MAX && ub_this == DBL_MAX ) {
-                           ov = 3;
-                        } else {
-                           ov = 4;
-                        }
-                     }
-
-                  } else {
-
-                     if( inc_that ) {
-                        if( lb_this <= lb_that && ub_this >= ub_that ) {
-                           ov = 1;
-                        } else if( lb_this >= ub_that || ub_this <= lb_that ) {
-                           ov = 3;
-                        } else if( lb_that == -DBL_MAX && ub_that == DBL_MAX ) {
-                           ov = 2;
-                        } else {
-                           ov = 4;
-                        }
-
-                     } else {
-                        ov = 4;
-                     }
-                  }
-
-/* The returned value is initialised on the basis of the first axis
-   overlap. */
-                  if( ic == 0 ) {
-                     result = ov;
-
-/* For subsequent axes, combine the old result value with the new ov value
-   to get the new result value. */
-                  } else {
-                     result = newResult[ result - 1 ][ ov - 1 ];
-                  }
-
-/* If we now know there is no overlap, there is no point in checking any
-   remaining axes. */
-                  if( result == 1 ) break;
-
-               }
-
-/* The above logic assumed that neither of the Intervals has been negated. 
-   Decide on the value to return, taking into account whether either of
-   the Intervals has been negated. */
-               neg_this = astGetNegated( this );
-               neg_that = astGetNegated( that );
-
-               if( result == 1 ) {
-                  if( neg_this ) {
-                     result = neg_that ? 4 : 3;
-                  } else if( neg_that ){ 
-                     result = 2;
-                  }
-
-               } else if( result == 2) {
-                  if( neg_this ) {
-                     result = neg_that ? 3 : 4;
-                  } else if( neg_that ){ 
-                     result = 1;
-                  }
-
-               } else if( result == 3) {
-                  if( neg_this ) {
-                     result = neg_that ? 2 : 1;
-                  } else if( neg_that ){ 
-                     result = 4;
-                  }
-
-               } else if( result == 4) {
-                  result = 4;
-
-               } else if( result == 5) {
-                  if( neg_this ) {
-                     result = neg_that ? 5 : 6;
-                  } else if( neg_that ){ 
-                     result = 6;
-                  }
-               }
-            }
-
-/* Free resources. */
-            pset_that = astAnnul( pset_that );
-            unc_this = astAnnul( unc_this );
-            unc_that = astAnnul( unc_that );
-            unc_temp = astAnnul( unc_temp );
-            frm = astAnnul( frm );
-            lbndu_this = astFree( lbndu_this );
-            ubndu_this = astFree( ubndu_this );
-            lbndu_that = astFree( lbndu_that );
-            ubndu_that = astFree( ubndu_that );
-            outperm = astFree( outperm );
-         }
-
-         smap = astAnnul( smap );
-         map = astAnnul( map );
-         tmap = astAnnul( tmap );
-         map3 = astAnnul( map3 );
-         map2 = astAnnul( map2 );
-         map1 = astAnnul( map1 );
-         fs = astAnnul( fs );
-      }
-   }
-
-/* If overlap could not be determined using the above implementation, try 
-   using the implementation inherited from the parent Region class. */
-   if( !result ) result = (*parent_overlap)( this, that, status );
-
-/* If not OK, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Interval member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstInterval *this;
-   int nax;
-   int i;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Interval structure */
-   this = (AstInterval *) this_region;
-
-/* Ensure the cached bounds are up to date. */
-   Cache( this, status );
-
-/* Copy the cached bounds into the supplied arrays. */
-   nax = astGetNin( this_region->frameset );
-   for( i = 0; i < nax; i++ ) {
-      lbnd[ i ] = this->lbnd[ i ];
-      ubnd[ i ] = this->ubnd[ i ];
-   }
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Interval member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the accuracies which were
-*     supplied when the Region was created.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   AstBox *box;                  /* The equivalent Box */
-   AstPointSet *result;          /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Interval is effectively a Box, invoke the astRegBaseMesh
-   function on the equivalent Box. A pointer to the equivalent Box will
-   be stored in the Interval structure. */
-   box = Cache( (AstInterval *) this_region, status );
-   if( box ) {
-      result = astRegBaseMesh( box );
-
-/* If the Interval is not equivalent to a Box, report an error. */
-   } else {
-      astError( AST__INTER, "astRegBaseMesh(%s): The %s given is "
-                "unbounded and therefore no boundary mesh can be "
-                "produced (internal AST programming error).", status, 
-                astGetClass( this_region ), astGetClass( this_region ) );
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, 
-                               const int *axes, int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     Interval member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;         /* The base Frame in the supplied Region */
-   AstFrame *frm;          /* The base Frame in the returned Region */
-   AstPointSet *pset;      /* Holds axis values defining the supplied Region */
-   AstRegion *bunc;        /* The uncertainty in the supplied Region */
-   AstRegion *result;      /* Returned Region */
-   AstRegion *unc;         /* The uncertainty in the returned Region */
-   double **ptr;           /* Holds axis values defining the supplied Region */
-   double *lbnd;           /* Base Frm lower bound axis values */
-   double *ubnd;           /* Base Frm upper bound axis values */
-   int i;                  /* Index of axis within returned Region */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
-   bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
-   encapsulated FrameSet. */
-   frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
-   Region, and select the required axes from it. If the resulting Object
-   is not a Region, annul it so that the returned Region will have no 
-   uncertainty. */
-   if( astTestUnc( this_region ) ) {
-      bunc = astGetUncFrm( this_region, AST__BASE );
-      unc = astPickAxes( bunc, naxes, axes, NULL );
-      bunc = astAnnul( bunc );
-
-      if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
-   } else {
-      unc = NULL;
-   }
-
-/* Get pointers to the coordinate data in the parent Region structure. */
-   pset = this_region->points;
-   ptr = astGetPoints( pset );
-
-/* Get space to hold the limits of the Interval in the new Frame. */
-   lbnd = astMalloc( sizeof( *lbnd )*naxes );
-   ubnd = astMalloc( sizeof( *ubnd )*naxes );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Copy the limits for the selected axes into the arrays allocated above. */
-      for( i = 0; i < naxes; i++ ) {
-         lbnd[ i ] = ptr[ axes[ i ] ][ 0 ];
-         ubnd[ i ] = ptr[ axes[ i ] ][ 1 ];
-      }
-
-/* Create the new Interval. */
-      result = (AstRegion *) astInterval( frm, lbnd, ubnd, unc, "", status );
-
-   }
-
-/* Free resources */
-   frm = astAnnul( frm );      
-   bfrm = astAnnul( bfrm );      
-   if( unc ) unc = astAnnul( unc );
-   lbnd = astFree( lbnd );
-   ubnd = astFree( ubnd );
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr, 
-                          int index, int ifrm, int *status ){
-/*
-*  Name:
-*     RegCentre
-
-*  Purpose:
-*     Re-centre a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     double *RegCentre( AstRegion *this, double *cen, double **ptr, 
-*                        int index, int ifrm, int *status )
-
-*  Class Membership:
-*     Interval member function (over-rides the astRegCentre protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function shifts the centre of the supplied Region to a
-*     specified position, or returns the current centre of the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     cen
-*        Pointer to an array of axis values, giving the new centre.
-*        Supply a NULL value for this in order to use "ptr" and "index" to 
-*        specify the new centre.
-*     ptr
-*        Pointer to an array of points, one for each axis in the Region.
-*        Each pointer locates an array of axis values. This is the format
-*        returned by the PointSet method astGetPoints. Only used if "cen"
-*        is NULL.
-*     index
-*        The index of the point within the arrays identified by "ptr" at
-*        which is stored the coords for the new centre position. Only used 
-*        if "cen" is NULL.
-*     ifrm
-*        Should be AST__BASE or AST__CURRENT. Indicates whether the centre 
-*        position is supplied and returned in the base or current Frame of 
-*        the FrameSet encapsulated within "this".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If both "cen" and "ptr" are NULL then a pointer to a newly
-*     allocated dynamic array is returned which contains the centre
-*     coords of the Region. This array should be freed using astFree when
-*     no longer needed. If either of "ptr" or "cen" is not NULL, then a
-*     NULL pointer is returned.
-
-*  Notes:
-*    - Some Region sub-classes do not have a centre. Such classes will report 
-*    an AST__INTER error code if this method is called with either "ptr" or 
-*    "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-*    reported if this method is invoked on a Region of an unsuitable class,
-*    but NULL is always returned.
-
-*/
-
-/* Local Variables: */
-   AstInterval *this;  /* Pointer to Interval structure */
-   AstBox *box;        /* Pointer to equivalent Box structure */
-   double **bptr;      /* Data pointers for Region PointSet */
-   double *lbnd;       /* Pointer to new lower bound values */
-   double *ubnd;       /* Pointer to new upper bound values */
-   double *result;     /* Returned pointer */
-   int i;              /* Coordinate index */
-   int nax;            /* Number of axes */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Interval structure. */
-   this = (AstInterval *) this_region;
-
-/* The Interval can only be re-centred if it is effectively a Box. */
-   box = Cache( (AstInterval *) this_region, status );
-   if( box ) {
-
-/* If the centre is being changed... */
-      if( cen || ptr ) {
-
-/* Set the new centre in the equivalent box. */
-         astRegCentre( box, cen, ptr, index, ifrm );
-
-/* Get the new base Frame bounds from the Box. */
-         nax = astGetNin( this_region->frameset );
-         lbnd = astMalloc( sizeof( double )*nax );
-         ubnd = astMalloc( sizeof( double )*nax );
-         astRegBaseBox( box, lbnd, ubnd );
-
-/* Store these bounds in the Interval structure. */
-         bptr = astGetPoints( this_region->points );
-         if( astOK ) {
-            for( i = 0; i < nax; i++ ) {
-               bptr[ i ][ 0 ] = lbnd[ i ];
-               bptr[ i ][ 1 ] = ubnd[ i ];
-            }
-         }
-
-/* Free resources. */
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-
-/* If the centre is not being changed, just invoke the method on the
-   equivalent box. */
-      } else {
-         result = astRegCentre( box, NULL, NULL, 0, AST__BASE );
-      }
-
-/* If the Interval is not equivalent to a Box, report an error */
-   } else {
-      astError( AST__REGCN, "astRegCentre(%s): The supplied %s is not a "
-                "closed Interval and so cannot be re-centred.", status,
-                astGetClass( this ), astGetClass( this ) );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Interval.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     Interval member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Interval. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Interval "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Interval.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstBox *box;              /* The equivalent Box */
-   AstInterval *large_int;   /* Interval slightly larger than "this" */
-   AstInterval *small_int;   /* Interval slightly smaller than "this" */
-   AstInterval *this;        /* Pointer to the Interval structure. */
-   AstFrame *frm;            /* Base Frame in supplied Interval */
-   AstPointSet *ps1;         /* Points masked by larger Interval */
-   AstPointSet *ps2;         /* Points masked by larger and smaller Intervals */
-   AstRegion *tunc;          /* Uncertainity Region from "this" */
-   double **ptr;             /* Pointer to axis values in "ps2" */
-   double *large_lbnd;       /* Lower bounds of larger interval */
-   double *large_ubnd;       /* Upper bounds of larger interval */
-   double *lbnd_tunc;        /* Lower bounds of "this" uncertainty Region */ 
-   double *lbnd_unc;         /* Lower bounds of supplied uncertainty Region */ 
-   double *p;                /* Pointer to next axis value */
-   double *small_lbnd;       /* Lower bounds of smaller interval */
-   double *small_ubnd;       /* Upper bounds of smaller interval */
-   double *ubnd_tunc;        /* Upper bounds of "this" uncertainty Region */ 
-   double *ubnd_unc;         /* Upper bounds of supplied uncertainty Region */ 
-   double *wid;              /* Widths of "this" border */
-   double lb;                /* Lower bound */
-   double ub;                /* Upper bound */
-   double t;                 /* Swap space */
-   double w;                 /* Width */
-   int i;                    /* Axis index */
-   int j;                    /* Point index */
-   int nc;                   /* No. of axes in Interval base frame */
-   int np;                   /* No. of supplied points */
-   int result;               /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Interval structure. */
-   this = (AstInterval *) this_region;
-
-/* If the Interval is effectively a Box, invoke the astRegPins function on 
-   the equivalent Box. A pointer to the equivalent Box will be stored in the 
-   Interval structure. */
-   box = Cache( this, status );
-   if( box ) return astRegPins( box, pset, unc, mask );
-
-/* Arrive here only if the Interval is not equivalent to a box (i.e. has
-   at least one infinite boundary). Get the number of base Frame axes in the 
-   Interval, and check the supplied PointSet has the same number of axis 
-   values per point. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-   nc = astGetNaxes( frm );
-   if( astGetNcoord( pset ) != nc && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
-                "values per point (%d) in the supplied PointSet - should be "
-                "%d (internal AST programming error).", status, astGetClass( this ),
-                astGetNcoord( pset ), nc );
-   }
-
-/* Get the number of axes in the uncertainty Region and check it is the 
-   same as above. */
-   if( unc && astGetNaxes( unc ) != nc && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
-                "in the supplied uncertainty Region - should be "
-                "%d (internal AST programming error).", status, astGetClass( this ),
-                astGetNaxes( unc ), nc );
-   }
-
-/* We now find the maximum distance on each axis that a point can be from 
-   the boundary of the Interval for it still to be considered to be on the
-   boundary. First get the Region which defines the uncertainty within the 
-   Interval being checked (in its base Frame), and get its bounding box. */
-   tunc = astGetUncFrm( this, AST__BASE );      
-   lbnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
-   ubnd_tunc = astMalloc( sizeof( double )*(size_t) nc );
-   astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc ); 
-
-/* Also get the Region which defines the uncertainty of the supplied points
-   and get its bounding box. */
-   if( unc ) {
-      lbnd_unc = astMalloc( sizeof( double )*(size_t) nc );
-      ubnd_unc = astMalloc( sizeof( double )*(size_t) nc );
-      astGetRegionBounds( unc, lbnd_unc, ubnd_unc ); 
-   } else {
-      lbnd_unc = NULL;
-      ubnd_unc = NULL;
-   }
-
-/* The required border width for each axis is half of the total width of
-   the two bounding boxes. Use a zero sized box "unc" if no box was supplied. */   
-   wid = astMalloc( sizeof( double )*(size_t) nc );
-   large_lbnd = astMalloc( sizeof( double )*(size_t) nc );
-   large_ubnd = astMalloc( sizeof( double )*(size_t) nc );
-   small_lbnd = astMalloc( sizeof( double )*(size_t) nc );
-   small_ubnd = astMalloc( sizeof( double )*(size_t) nc );
-   if( small_ubnd ) {
-      if( unc ) {
-         for( i = 0; i < nc; i++ ) {
-            wid[ i ] = 0.5*( fabs( astAxDistance( frm, i + 1, lbnd_tunc[ i ], 
-                                                  ubnd_tunc[ i ] ) )
-                           + fabs( astAxDistance( frm, i + 1, lbnd_unc[ i ], 
-                                                  ubnd_unc[ i ] ) ) );
-         }
-      } else {
-         for( i = 0; i < nc; i++ ) {
-            wid[ i ] = 0.5*fabs( astAxDistance( frm, i + 1, lbnd_tunc[ i ], 
-                                                ubnd_tunc[ i ] ) );
-         }
-      }
-
-/* Create two new Intervals, one of which is larger than "this" by the widths 
-   found above, and the other of which is smaller than "this" by the widths 
-   found above. */
-      for( i = 0; i < nc; i++ ) {
-         lb = this->lbnd[ i ];
-         ub = this->ubnd[ i ];
-         if( lb > ub ) {
-            t = ub;
-            ub = lb;
-            lb = t;
-         }
-
-         w = fabs( wid[ i ] );
-         if( lb != -DBL_MAX ){
-            large_lbnd[ i ] = lb - w;
-            small_lbnd[ i ] = lb + w;
-         } else {
-            large_lbnd[ i ] = AST__BAD;
-            small_lbnd[ i ] = AST__BAD;
-         }
-
-         if( ub != DBL_MAX ){
-            large_ubnd[ i ] = ub + w;
-            small_ubnd[ i ] = ub - w;
-         } else {
-            large_ubnd[ i ] = AST__BAD;
-            small_ubnd[ i ] = AST__BAD;
-         }
-
-         if( small_lbnd[ i ] > small_ubnd[ i ] ) {
-            small_lbnd[ i ] = small_ubnd[ i ];
-         }
-      }
-
-      large_int = astInterval( frm, large_lbnd, large_ubnd, NULL, "", status );
-      small_int = astInterval( frm, small_lbnd, small_ubnd, NULL, "", status );
-
-/* Negate the smaller interval.*/
-      astNegate( small_int );
-
-/* Points are on the boundary of "this" if they are inside both the large
-   interval and the negated small interval. First transform the supplied 
-   PointSet using the large interval, then transform them using the negated 
-   smaller Interval. */
-      ps1 = astTransform( large_int, pset, 1, NULL );
-      ps2 = astTransform( small_int, ps1, 1, NULL );
-
-/* Get a point to the resulting axis values, and the number of axis
-   values per axis. */
-      ptr = astGetPoints( ps2 );
-      np = astGetNpoint( ps2 );
-
-/* If a mask array is to be returned, create one. */
-      if( mask ) {
-         *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* Check all the resulting points, setting mask values for all of them. */
-         if( astOK ) {
-   
-/* Initialise the mask elements on the basis of the first axis values */
-            result = 1;
-            p = ptr[ 0 ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  (*mask)[ j ] = 0;
-               } else {
-                  (*mask)[ j ] = 1;
-               }
-            }
-
-/* Now check for bad values on other axes. */
-            for( i = 1; i < nc; i++ ) {
-               p = ptr[ i ];
-               for( j = 0; j < np; j++ ) {
-                  if( *(p++) == AST__BAD ) {
-                     result = 0;
-                     (*mask)[ j ] = 0;
-                  }
-               }
-            }
-         }
-
-/* If no output mask is to be made, we can break out of the check as soon
-   as the first bad value is found. */
-      } else if( astOK ) {
-         result = 1;
-         for( i = 0; i < nc && result; i++ ) {
-            p = ptr[ i ];
-            for( j = 0; j < np; j++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-      }
-
-/* Free resources. */
-      large_int = astAnnul( large_int );
-      small_int = astAnnul( small_int );
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-   }
-
-   tunc = astAnnul( tunc );
-   frm = astAnnul( frm );
-   lbnd_tunc = astFree( lbnd_tunc );
-   ubnd_tunc = astFree( ubnd_tunc );
-   if( unc ) lbnd_unc = astFree( lbnd_unc );
-   if( unc ) ubnd_unc = astFree( ubnd_unc );
-   wid = astFree( wid );
-   large_lbnd = astFree( large_lbnd );
-   large_ubnd = astFree( large_ubnd );
-   small_lbnd = astFree( small_lbnd );
-   small_ubnd = astFree( small_ubnd );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr, 
-                     int *status ){
-/*
-*+
-*  Name:
-*     RegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     Interval member function (overrides the astTraceRegion method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astTraceRegion method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
-   AstBox *box;
-   int result;         
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( ! astOK ) return result;
-
-/* If the Interval is effectively a Box, invoke the astRegTrace function on 
-   the equivalent Box. A pointer to the equivalent Box will be stored in the 
-   Interval structure. */
-   box = Cache( (AstInterval *) this_region, status );
-   if( box ) result = astRegTrace( box, n, dist, ptr );
-
-/* Return the result. */
-   return result;
-}
-
-
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     void ResetCache( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Region member function (overrides the astResetCache method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   if( this ) {
-      ( (AstInterval *) this )->stale = 1;
-      (*parent_resetcache)( this, status );
-   }
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Interval method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate that the cached intermediate information is now stale and
-   should be recreated when next needed. */
-   astResetCache( this_region );
-}
-
-static void SetUnc( AstRegion *this, AstRegion *unc, int *status ){
-/*
-*  Name:
-*     SetUnc
-
-*  Purpose:
-*     Store uncertainty information in a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     void SetUnc( AstRegion *this, AstRegion *unc, int *status )
-
-*  Class Membership:
-*     Interval method (over-rides the astSetUnc method inherited from the 
-*     Region class).
-
-*  Description:
-*     Each Region (of any class) can have an "uncertainty" which specifies 
-*     the uncertainties associated with the boundary of the Region. This
-*     information is supplied in the form of a second Region. The uncertainty 
-*     in any point on the boundary of a Region is found by shifting the 
-*     associated "uncertainty" Region so that it is centred at the boundary 
-*     point being considered. The area covered by the shifted uncertainty 
-*     Region then represents the uncertainty in the boundary position. 
-*     The uncertainty is assumed to be the same for all points.
-*
-*     The uncertainty is usually specified when the Region is created, but
-*     this function allows it to be changed at any time. 
-
-*  Parameters:
-*     this
-*        Pointer to the Region which is to be assigned a new uncertainty.
-*     unc
-*        Pointer to the new uncertainty Region. This must be either a Box, 
-*        a Circle or an Ellipse. A deep copy of the supplied Region will be 
-*        taken, so subsequent changes to the uncertainty Region using the 
-*        supplied pointer will have no effect on the Region "this".
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Invoke the astSetUnc method inherited from the parent Region class. */
-   (*parent_setunc)( this, unc, status );
-
-/* Indicate that the cached intermediate information is now stale and
-   should be recreated when next needed. */
-   astResetCache( this );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Interval method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstBox *box2;              /* Box used to determine 1-to-1 axis correspondance */
-   AstBox *box;               /* Box used to determine 1-to-1 axis correspondance */
-   AstInterval *this_interval;/* Pointer to Interval structure */
-   AstMapping *bfrm;          /* Pointer to base Frame in supplied Interval */
-   AstMapping *cfrm;          /* Pointer to current Frame in supplied Interval */
-   AstMapping *map;           /* Base -> current Mapping after parent simplification */
-   AstMapping *result;        /* Result pointer to return */
-   AstPointSet *pset2;        /* PointSet containing current Frame test points */
-   AstPointSet *pset3;        /* PointSet containing base Frame test points */
-   AstPointSet *psetb;        /* PointSet holding base positions */
-   AstPointSet *psetc;        /* PointSet holding current positions */
-   AstRegion *new;            /* Pointer to Region simplfied by parent class */
-   AstRegion *sreg;           /* Pointer to simplified Box */
-   AstRegion *this;           /* Pointer to supplied Region structure */
-   AstRegion *unc;            /* Pointer to uncertainty Region */
-   double **ptr2;             /* Pointer axis values in "pset2" */
-   double **ptr3;             /* Pointer axis values in "pset3" */
-   double **ptr;              /* Pointer to base Frame values defining Interval */
-   double **ptrb;             /* Pointer to "psetb" axis values */
-   double **sptr;             /* Pointer to simplified Interval bounds */
-   double *lbnd;              /* Pointer to array of base Frame lower bounds */
-   double *slbnd;             /* Pointer to array of current Frame lower bounds */
-   double *subnd;             /* Pointer to array of current Frame upper bounds */
-   double *ubnd;              /* Pointer to array of base Frame upper bounds */
-   double d;                  /* Distance between axis values */
-   double lb;                 /* Lower bound on axis values */
-   double lwid;               /* Axis width below the Interval lower limit */
-   double maxd;               /* Maximum currenrt Frame axis offset between test points */
-   double tmp;                /* Temporary storage for swapping variable values */
-   double ub;                 /* Upperbound on axis values */
-   double uwid;               /* Axis width above the Interval upper limit */
-   int bax;                   /* Base Frame axis index corresponding to "ic" */
-   int ic;                    /* Axis index */
-   int jc;                    /* Axis index */
-   int nc;                    /* No. of base Frame axis values per point */
-   int simpler;               /* Has some simplication taken place? */
-   int snc;                   /* No. of current Frame axis values per point */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Get a pointer to the supplied Interval structure. */
-   this_interval = (AstInterval *) this;
-
-/* If this Interval is equivalent to a Box, use the astTransform method of
-   the equivalent Box. */
-   box = Cache( this_interval, status );
-   if( box ) {
-      result = astSimplify( box );
-
-/* Otherwise, we use a new implementation appropriate for unbounded
-   intervals. */
-   } else {
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-      new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-      if( new ) {
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-         simpler = ( new != this );
-   
-/* If the Mapping from base to current Frame is not a UnitMap, we attempt
-   to simplify the Interval by re-defining it within its current Frame. */
-         map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-         if( !astIsAUnitMap( map ) ){
-   
-/* Take a copy of the Interval bounds (defined in the base Frame of the
-   Intervals FrameSet) and replace any missing limits with arbitrary
-   non-BAD values. This will give us a complete set of bounds defining a
-   box within the base Frame of the Interval. */
-            ptr = astGetPoints( new->points );
-            nc = astGetNcoord( new->points );
-      
-            lbnd = astMalloc( sizeof( double )*(size_t) nc );
-            ubnd = astMalloc( sizeof( double )*(size_t) nc );
-      
-            if( astOK ) {
-               for( ic = 0; ic < nc; ic++ ) {
-                  lbnd[ ic ] = ptr[ ic ][ 0 ];
-                  ubnd[ ic ] = ptr[ ic ][ 1 ];
-      
-/* Ensure we have a good upper bound for this axis. */
-                  if( ubnd[ ic ] == AST__BAD ) {
-                     if( lbnd[ ic ] == AST__BAD ) {
-                        ubnd[ ic ] = 1.0;
-      
-                     } else if( lbnd[ ic ] > 0.0 ) {
-                        ubnd[ ic ] = lbnd[ ic ]*1.01;
-      
-                     } else if( lbnd[ ic ] < 0.0 ) {
-                        ubnd[ ic ] = lbnd[ ic ]*0.99;
-                     
-                     } else {
-                        ubnd[ ic ] = 1.0;
-                     }
-                  }
-      
-/* Ensure we have a good lower bound for this axis. */
-                  if( lbnd[ ic ] == AST__BAD ) {
-                     if( ubnd[ ic ] > 0.0 ) {
-                        lbnd[ ic ] = ubnd[ ic ]*0.99;
-      
-                     } else if( ubnd[ ic ] < 0.0 ) {
-                        lbnd[ ic ] = ubnd[ ic ]*1.01;
-                     
-                     } else {
-                        lbnd[ ic ] = 1.0;
-                     }
-                  }
-               }
-            }
-   
-/* Transform the box corners found above into the current frame and then back
-   into the base Frame, and ensure that the box encloses both the original
-   and the new bounds. PermMaps with fewer outputs than inputs can cause the 
-   resulting base Frame positions to differ significantly from the original. */
-            psetb =astPointSet( 2, nc,"", status );
-            ptrb =astGetPoints( psetb );
-            if( astOK ) {
-               for( ic = 0; ic < nc; ic++ ) {
-                  ptrb[ ic ][ 0 ] = lbnd[ ic ];
-                  ptrb[ ic ][ 1 ] = ubnd[ ic ];
-               }
-            }
-            psetc = astTransform( map, psetb, 1, NULL );
-            (void) astTransform( map, psetc, 0, psetb );
-            if( astOK ) {
-               for( ic = 0; ic < nc; ic++ ) {
-                  lb = ptrb[ ic ][ 0 ];
-                  if( lb != AST__BAD ) {
-                     if( lb < lbnd[ ic ] ) lbnd[ ic ] = lb;
-                     if( lb > ubnd[ ic ] ) ubnd[ ic ] = lb;
-                  }
-                  ub = ptrb[ ic ][ 1 ];
-                  if( ub != AST__BAD ) {
-                     if( ub < lbnd[ ic ] ) lbnd[ ic ] = ub;
-                     if( ub > ubnd[ ic ] ) ubnd[ ic ] = ub;
-                  }
-               }
-            }
-            psetb = astAnnul( psetb );
-            psetc = astAnnul( psetc );
-   
-/* Limit this box to not exceed the limits imposed by the Interval.*/
-            Cache( this_interval, status );
-            for( ic = 0; ic < nc; ic++ ) {
-               lb = this_interval->lbnd[ ic ] ;
-               ub = this_interval->ubnd[ ic ] ;
-               if( lb <= ub ) {
-                  if( lbnd[ ic ] < lb ) {
-                     lbnd[ ic ] = lb;
-                  } else if( lbnd[ ic ] > ub ) {
-                     lbnd[ ic ] = ub;
-                  }
-                  if( ubnd[ ic ] < lb ) {
-                     ubnd[ ic ] = lb;
-                  } else if( ubnd[ ic ] > ub ) {
-                     ubnd[ ic ] = ub;
-                  }
-               } else {
-                  lwid = lb - lbnd[ ic ];
-                  uwid = ubnd[ ic ] - ub;
-                  if( lwid > uwid ) {
-                    if( lbnd[ ic ] > lb ) lbnd[ ic ] = lb;
-                    if( ubnd[ ic ] > lb ) ubnd[ ic ] = lb;
-                  } else {
-                    if( lbnd[ ic ] < ub ) lbnd[ ic ] = ub;
-                    if( ubnd[ ic ] < ub ) ubnd[ ic ] = ub;
-                  }
-               }
-   
-/* Ensure the bounds are not equal */
-               if( lbnd[ ic ] == 0.0 && ubnd[ ic ] == 0.0 ) {
-                  ubnd[ ic ] = 1.0;
-   
-               } else if( EQUAL( lbnd[ ic ], ubnd[ ic ] ) ) {
-                  ubnd[ ic ] = MAX( ubnd[ ic ], lbnd[ ic ] )*( 1.0E6*DBL_EPSILON );
-               }
-            }
-      
-/* Create a new Box representing the box found above. */
-            bfrm = astGetFrame( new->frameset, AST__BASE );
-            unc = astTestUnc( new ) ? astGetUncFrm( new, AST__BASE ) : NULL;
-            box = astBox( bfrm, 1, lbnd, ubnd, unc, "", status );
-            if( unc ) unc = astAnnul( unc );
-      
-/* Modify this Box so that it has the same current Frame as this Interval. */
-            cfrm = astGetFrame( new->frameset, AST__CURRENT );
-            box2 = astMapRegion( box, map, cfrm );
-      
-/* Try simplifying the Box. */
-            sreg = (AstRegion *) astSimplify( box2 );
-      
-/* Only proceed if the Box was simplified */
-            if( sreg != (AstRegion *) box2 ) {
-   
-/* If the simplified Box is a NullRegion return it. */
-               if( astIsANullRegion( sreg ) ) {
-                  (void) astAnnul( new );
-                  new = astClone( sreg );
-                  simpler = 1;
-                 
-/* If the simplified Box is a Box or an Interval... */
-               } else if( astIsABox( sreg ) || astIsAInterval( sreg ) ) {
-      
-/* Get the bounds of the simplified Box. We assume that the base and
-   current Frames in the simplified Box are the same. */
-                  snc = astGetNin( sreg->frameset );
-                  slbnd = astMalloc( sizeof( double )*(size_t)snc );
-                  subnd = astMalloc( sizeof( double )*(size_t)snc );
-                  if(  astIsAInterval( sreg ) ) {
-                     sptr = astGetPoints( sreg->points );
-                     if( astOK ) {
-                        for( ic = 0; ic < snc; ic++ ) {
-                           slbnd[ ic ] = sptr[ ic ][ 0 ];
-                           subnd[ ic ] = sptr[ ic ][ 1 ];
-                        }
-                     }
-                  } else {
-                     astRegBaseBox( sreg, slbnd, subnd );
-                  }
-         
-/* Now create a PointSet containing one point for each axis in the
-   current (or equivalently, base ) Frame of the simplified Box, plus an
-   extra point. */
-                  pset2 = astPointSet( snc + 1, snc, "", status );
-                  ptr2 = astGetPoints( pset2 );
-         
-/* Put the lower bounds of the simplified Box into the first point in
-   this PointSet. The remaining points are displaced from this first point
-   along each axis in turn. The length of each displacement is determined
-   by the length of the box on the axis. */
-                  if( astOK ) {
-                     for( ic = 0; ic < snc; ic++ ) {
-                        for( jc = 0; jc < snc + 1; jc++ ) {
-                           ptr2[ ic ][ jc ] = slbnd[ ic ];
-                        }
-                        ptr2[ ic ][ ic + 1 ] = subnd[ ic ];
-                     }
-                  }
-         
-/* Transform this PointSet into the base Frame of this Interval using the
-   inverse of the base->current Mapping. */
-                  pset3 = astTransform( map, pset2, 0, NULL );
-                  ptr3 = astGetPoints( pset3 );
-                  if( astOK ) {
-         
-/* Now consider each axis of the Interval's current Frame (i.e. each base 
-   Frame axis in the simplified Box). */
-                     for( ic = 0; ic < snc; ic++ ) {
-         
-/* Given that the Box simplified succesfully, we know that there is a one
-   to one connection between the axes of the base and current Frame in this
-   Interval, but we do not yet know which base Frame axis corresponds to
-   which current Frame axis (and the number of base and current Frame axes
-   need not be equal). We have two points on a line parallel to current
-   Frame axis number "ic" (points zero and "ic+1" in "pset2"). Look at the 
-   corresponding base Frame positions (in "pset3), and see which base Frame 
-   axis they are parallel to. We look for the largest base Frame axis 
-   increment (this allows small non-zero displacements to occur on the 
-   other axes due to rounding errors). */
-                        maxd = -DBL_MAX;
-                        bax = -1;
-                        for( jc = 0; jc < nc; jc++ ) {
-                           d = fabs( astAxDistance( bfrm, jc + 1, ptr3[ jc ][ 0 ],
-                                                    ptr3[ jc ][ ic + 1 ] ) );
-                           if( d != AST__BAD && d > maxd ) {
-                              maxd = d;
-                              bax = jc;
-                           }
-                        }
-         
-/* If the largest base Frame axis increment is zero, it must mean that
-   the current Frame axis is not present in the base Frame. The only
-   plausable cause of this is if the base->current Mapping contains a
-   PermMap which introduces an extra axis, in which case the axis will
-   have a fixed value (any other Mapping arrangement would have prevented 
-   the Box from simplifying). Therefore, set upper and lower limits for
-   this axis to the same value. */
-                        if( maxd <= 0.0 ) {
-                           if( slbnd[ ic ] == AST__BAD || 
-                               subnd[ ic ] == AST__BAD ) {
-                              slbnd[ ic ] = AST__BAD;
-                           } else {
-                              slbnd[ ic ] = 0.5*( slbnd[ ic ] + subnd[ ic ] );
-                           }
-                           subnd[ ic ] = slbnd[ ic ];
-         
-/* If we have found a base Frame axis which corresponds to the current
-   Frame axis "ic", then look to see which limits are specified for the
-   base Frame axis, and transfer missing limits to the current Frame. */
-                        } else {
-                           if( ptr[ bax ][ 0 ] == AST__BAD ) slbnd[ ic ] = AST__BAD;
-                           if( ptr[ bax ][ 1 ] == AST__BAD ) subnd[ ic ] = AST__BAD;
-         
-/* If the original limits were equal, ensure the new limits are equal
-   (the code above modified the upper limit to ensure it was different to
-   the lower limit). */
-                           if( ptr[ bax ][ 1 ] == ptr[ bax ][ 0 ] ) {
-                              subnd[ ic ] = slbnd[ ic ];
-         
-/* If the original interval was an inclusion (ubnd > lbnd), ensure the new 
-   interval is also an inclusion by swapping the limits if required. */
-                           } else if( ptr[ bax ][ 1 ] > ptr[ bax ][ 0 ] ) {
-                              if( subnd[ ic ] < slbnd[ ic ] ) {
-                                 tmp = subnd[ ic ];
-                                 subnd[ ic ] = slbnd[ ic ];
-                                 slbnd[ ic ] = tmp;
-                              }
-         
-/* If the original interval was an exclusion (ubnd < lbnd), ensure the new 
-   interval is also an exlusion by swapping the limits if required. */
-                           } else if( ptr[ bax ][ 1 ] < ptr[ bax ][ 0 ] ) {
-                              if( subnd[ ic ] > slbnd[ ic ] ) {
-                                 tmp = subnd[ ic ];
-                                 subnd[ ic ] = slbnd[ ic ];
-                                 slbnd[ ic ] = tmp;
-                              }
-                           } 
-                        }            
-                     }
-         
-/* Create the simplified Interval from the current Frame limits found
-   above, and use it in place of the original. */
-                     unc = astTestUnc( new ) ? astGetUncFrm( new, AST__CURRENT ) : NULL;
-                     (void) astAnnul( new );
-                     new = (AstRegion *) astInterval( cfrm, slbnd, subnd, unc, "", status );
-                     if( unc ) unc = astAnnul( unc );
-                     simpler = 1;
-                  }
-         
-/* Free resources */
-                  pset2 = astAnnul( pset2 );
-                  pset3 = astAnnul( pset3 );
-                  slbnd = astFree( slbnd );
-                  subnd = astFree( subnd );
-               }
-            }
-   
-/* Free resources */
-            bfrm = astAnnul( bfrm );
-            cfrm = astAnnul( cfrm );
-            box = astAnnul( box );
-            box2 = astAnnul( box2 );
-            sreg = astAnnul( sreg );
-            lbnd = astFree( lbnd );      
-            ubnd = astFree( ubnd );      
-         }
-      
-/* Free resources */
-         map = astAnnul( map );
-      
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-         if( simpler ){
-            astRegOverlay( new, this, 1 );
-            result = (AstMapping *) new;
-         } else {
-            new = astAnnul( new );
-            result = astClone( this );
-         }
-      }
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Interval to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Interval member function (over-rides the astTransform protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function takes a Interval and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the Interval.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the Interval.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstBox *box;                  /* Pointer to equivalent Box */
-   AstInterval *this;            /* Pointer to Interval structure */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstRegion *reg;               /* Pointer to Region structure */
-   AstRegion *unc;               /* Uncertainty Region */
-   double **ptr_lims;            /* Pointer to limits array */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double **ptr_tmp;             /* Pointer to base Frame coordinate data */
-   double *lbnd_unc;             /* Lower bounds of uncertainty Region */
-   double *ubnd_unc;             /* Upper bounds of uncertainty Region */
-   double lb;                    /* Base Frame axis lower bound */
-   double p;                     /* Input base Frame axis value */
-   double ub;                    /* Base Frame axis upper bound */
-   double wid;                   /* Half width of uncertainy Region */
-   int coord;                    /* Zero-based index for coordinates */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int ncoord_tmp;               /* No. of coordinates per base Frame point */
-   int neg;                      /* Has the Region been negated? */
-   int npoint;                   /* No. of points */
-   int pass;                     /* Does this point pass the axis test? */
-   int point;                    /* Loop counter for points */
-   int setbad;                   /* Set the output point bad? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain pointers to the Region and to the Interval. */
-   reg = (AstRegion *) this_mapping;
-   this = (AstInterval *) this_mapping;
-
-/* If this Interval is equivalent to a Box, use the astTransform method of
-   the equivalent Box. */
-   box = Cache( this, status );
-   if( box ) {
-      result = astTransform( box, in, forward, out );
-
-/* Otherwise, we use a new implementation appropriate for unbounded
-   intervals. */
-   } else {
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-      result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
-   from the current Frame in the encapsulated FrameSet (the Frame
-   represented by the Region), to the base Frame (the Frame in which the
-   Region is defined). This call also returns a pointer to the base Frame
-   of the encapsulated FrameSet. Note, the returned pointer may be a
-   clone of the "in" pointer, and so we must be carefull not to modify the
-   contents of the returned PointSet. */
-      pset_tmp = astRegTransform( reg, in, 0, NULL, NULL );
-
-/* Determine the numbers of points and coordinates per point from the base
-   Frame PointSet and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-      npoint = astGetNpoint( pset_tmp );
-      ncoord_tmp = astGetNcoord( pset_tmp );
-      ptr_tmp = astGetPoints( pset_tmp );      
-      ncoord_out = astGetNcoord( result );
-      ptr_out = astGetPoints( result );
-
-/* Get a pointer to the array of axis limits */
-      ptr_lims = astGetPoints( reg->points );
-
-/* See if the Region is negated. */
-      neg = astGetNegated( reg );
-
-/* Indicate we have not yet got the bounding box of the uncertainty
-   Region. */
-      lbnd_unc = NULL;
-      ubnd_unc = NULL;
-      unc = NULL;
-
-/* Perform coordinate arithmetic. */
-      if ( astOK ) {
-
-/* First deal with closed unnegated Intervals. */
-/* ------------------------------------------- */
-         if( astGetClosed( reg ) ) {
-            if( !neg ) {
-
-/* Loop round each point. */
-               for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is inside the Region. We change this flag when we find 
-   the first axis for which the point does not pass the axis test. */
-                  setbad = 0;
-
-/* Loop round each base Frame axis */
-                  Cache( this, status );
-                  for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-                     p = ptr_tmp[ coord ][ point ];
-                     lb = (this->lbnd)[ coord ];
-                     ub = (this->ubnd)[ coord ];
-
-/* If the limits are equal separate them slightly to give some tolerance. */
-                     if( lb == ub ) {
-
-/* If not yet done so, get the bounding box of the uncertainty Region in the 
-   base Frame of the Interval */
-                        if( !unc ) {
-                           unc = astGetUncFrm( reg, AST__BASE );
-                           lbnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
-                           ubnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
-                           astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
-                        }
-
-/* Set the gap between the limits to be equal to the uincertainty on this
-   axis. */
-                        if( astOK ) {
-                           wid = 0.5*( ubnd_unc[ coord ] - lbnd_unc[ coord ] );
-                           lb -= wid;
-                           ub += wid;
-                        }
-                     }
-
-/* Bad input points should always be bad in the output. */
-                     if( p == AST__BAD ) {
-                        setbad = 1;
-                        break;
-
-/* Does the current axis value pass the limits test for this axis? */
-                     } else if( lb <= ub ) {
-                        pass = ( lb <= p && p <= ub );
-                     } else {
-                        pass = ( p <= ub || lb <= p );
-                     }
-
-/* If this point does not pass the test for this axis, then indicate that
-   we should set the resulting output point bad and break since we now have 
-   a definite value for the inside/outside flag. */
-                     if( !pass ) {
-                        setbad = 1;
-                        break;
-                     }
-                  }
-
-/* Set the axis values bad for this output point if required. */
-                  if( setbad ) {
-                     for ( coord = 0; coord < ncoord_out; coord++ ) {
-                        ptr_out[ coord ][ point ] = AST__BAD;
-                     }
-                  }
-               }
-
-/* Now deal with closed negated Intervals. */
-/* --------------------------------------- */
-            } else  {
-
-/* Loop round each point. */
-               for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is outside the negated Region (i.e. inside the
-   unnegated Region). We change this flag when we find the first axis for
-   which the point passes the axis test. */
-                  setbad = 1;
-
-/* Loop round each base Frame axis */
-                  Cache( this, status );
-                  for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-                     p = ptr_tmp[ coord ][ point ];
-                     lb = (this->lbnd)[ coord ];
-                     ub = (this->ubnd)[ coord ];
-
-/* Bad input points should always be bad in the output. */
-                     if( p == AST__BAD ) {
-                        setbad = 1;
-                        break;
-
-/* Does the current axis value pass the limits test for this axis? */
-                     } else if( lb <= ub ) {
-                        pass = ( p <= lb || ub <= p );
-                     } else {
-                        pass = ( ub <= p && p <= lb );
-                     }
-
-/* If this point passes the test for this axis, then indicate that we should 
-   not set the resulting output point bad and break since we now have a 
-   definite value for the inside/outside flag. */
-                     if( pass ) {
-                        setbad = 0;
-                        break;
-                     }
-                  }
-
-/* Set the axis values bad for this output point if required. */
-                  if( setbad ) {
-                     for ( coord = 0; coord < ncoord_out; coord++ ) {
-                        ptr_out[ coord ][ point ] = AST__BAD;
-                     }
-                  }
-               }
-            }
-
-/* Now deal with open unnegated Intervals. */
-/* --------------------------------------- */
-         } else {
-            if( !neg ) {
-
-/* Loop round each point. */
-               for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is inside the Region. We change this flag when we find 
-   the first axis for which the point does not pass the axis test. */
-                  setbad = 0;
-
-/* Loop round each base Frame axis */
-                  Cache( this, status );
-                  for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-                     p = ptr_tmp[ coord ][ point ];
-                     lb = (this->lbnd)[ coord ];
-                     ub = (this->ubnd)[ coord ];
-
-/* Bad input points should always be bad in the output. */
-                     if( p == AST__BAD ) {
-                        setbad = 1;
-                        break;
-
-/* Does the current axis value pass the limits test for this axis? */
-                     } else if( lb <= ub ) {
-                        pass = ( lb < p && p < ub );
-                     } else {
-                        pass = ( p < ub || lb < p );
-                     }
-
-/* If this point does not pass the test for this axis, then indicate that
-   we should set the resulting output point bad and break since we now have 
-   a definite value for the inside/outside flag. */
-                     if( !pass ) {
-                        setbad = 1;
-                        break;
-                     }
-                  }
-
-/* Set the axis values bad for this output point if required. */
-                  if( setbad ) {
-                     for ( coord = 0; coord < ncoord_out; coord++ ) {
-                        ptr_out[ coord ][ point ] = AST__BAD;
-                     }
-                  }
-               }
-
-/* Now deal with open negated Intervals. */
-/* ------------------------------------- */
-            } else  {
-
-/* Loop round each point. */
-               for ( point = 0; point < npoint; point++ ) {
-
-/* Assume this point is outside the negated Region (i.e. inside the
-   unnegated Region). We change this flag when we find the first axis for
-   which the point passes the axis test. */
-                  setbad = 1;
-
-/* Loop round each base Frame axis */
-                  Cache( this, status );
-                  for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-                     p = ptr_tmp[ coord ][ point ];
-                     lb = (this->lbnd)[ coord ];
-                     ub = (this->ubnd)[ coord ];
-
-/* If the limits are equal separate them slightly to give some tolerance. */
-                     if( lb == ub ) {
-
-/* If not yet done so, get the bounding box of the uncertainty Region in the 
-   base Frame of the Interval */
-                        if( !unc ) {
-                           unc = astGetUncFrm( reg, AST__BASE );
-                           lbnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
-                           ubnd_unc = astMalloc( sizeof( double)*(size_t) ncoord_tmp );
-                           astGetRegionBounds( unc, lbnd_unc, ubnd_unc );
-                        }
-
-/* Set the gap between the limits to be equal to the uincertainty on this
-   axis. */
-                        if( astOK ) {
-                           wid = 0.5*( ubnd_unc[ coord ] - lbnd_unc[ coord ] );
-                           lb -= wid;
-                           ub += wid;
-                        }
-                     }
-
-/* Bad input points should always be bad in the output. */
-                     if( p == AST__BAD ) {
-                        setbad = 1;
-                        break;
-
-/* Does the current axis value pass the limits test for this axis? */
-                     } else if( lb <= ub ) {
-                        pass = ( p < lb || ub < p );
-                     } else {
-                        pass = ( ub < p && p < lb );
-                     }
-
-/* If this point passes the test for this axis, then indicate that we should 
-   not set the resulting output point bad and break since we now have a 
-   definite value for the inside/outside flag. */
-                     if( pass ) {
-                        setbad = 0;
-                        break;
-                     }
-                  }
-
-/* Set the axis values bad for this output point if required. */
-                  if( setbad ) {
-                     for ( coord = 0; coord < ncoord_out; coord++ ) {
-                        ptr_out[ coord ][ point ] = AST__BAD;
-                     }
-                  }
-               }
-            }
-         }
-      }
-
-/* Free resources */
-      pset_tmp = astAnnul( pset_tmp );
-      if( lbnd_unc ) lbnd_unc = astFree( lbnd_unc );
-      if( ubnd_unc ) ubnd_unc = astFree( ubnd_unc );
-      if( unc ) unc = astAnnul( unc );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Interval objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Region objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstInterval *in;             /* Pointer to input Interval */
-   AstInterval *out;            /* Pointer to output Interval */
-   size_t nb;                   /* Number of bytes in limits array */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Intervals. */
-   in = (AstInterval *) objin;
-   out = (AstInterval *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Interval. */
-   out->box = NULL;
-   out->lbnd = NULL;
-   out->ubnd = NULL;
-
-/* Note the number of bytes in each limits array */
-   nb = sizeof( double )*(size_t) astGetNin( ((AstRegion *) in)->frameset );
-
-/* Copy dynamic memory contents */
-   if( in->box ) out->box = astCopy( in->box );
-   out->lbnd = astStore( NULL, in->lbnd, nb );
-   out->ubnd = astStore( NULL, in->ubnd, nb );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Interval objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Interval objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstInterval *this;                 /* Pointer to Interval */
-
-/* Obtain a pointer to the Interval structure. */
-   this = (AstInterval *) obj;
-
-/* Annul all resources. */
-   if( this->box ) this->box = astAnnul( this->box );
-   this->lbnd = astFree( this->lbnd );
-   this->ubnd = astFree( this->ubnd );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Interval objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Interval class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Interval whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstInterval *this;                 /* Pointer to the Interval structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Interval structure. */
-   this = (AstInterval *) this_object;
-
-/* Write out values representing the instance variables for the
-   Interval class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAInterval and astCheckInterval functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Interval,Region)
-astMAKE_CHECK(Interval)
-
-AstInterval *astInterval_( void *frame_void, const double lbnd[], 
-                           const double ubnd[], AstRegion *unc, 
-                           const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astInterval
-f     AST_INTERVAL
-
-*  Purpose:
-*     Create a Interval.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "interval.h"
-c     AstInterval *astInterval( AstFrame *frame, const double lbnd[], 
-c                               const double ubnd[], AstRegion *unc, 
-c                               const char *options, ... ) 
-f     RESULT = AST_INTERVAL( FRAME, LBND, UBND, UNC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Interval constructor.
-
-*  Description:
-*     This function creates a new Interval and optionally initialises its
-*     attributes.
-*
-*     A Interval is a Region which represents upper and/or lower limits on 
-*     one or more axes of a Frame. For a point to be within the region 
-*     represented by the Interval, the point must satisfy all the 
-*     restrictions placed on all the axes. The point is outside the region 
-*     if it fails to satisfy any one of the restrictions. Each axis may have 
-*     either an upper limit, a lower limit, both or neither. If both limits 
-*     are supplied but are in reverse order (so that the lower limit is 
-*     greater than the upper limit), then the interval is an excluded 
-*     interval, rather than an included interval.
-*
-*     At least one axis limit must be supplied.
-*
-*     Note, The Interval class makes no allowances for cyclic nature of
-*     some coordinate systems (such as SkyFrame coordinates). A Box
-*     should usually be used in these cases since this requires the user 
-*     to think about suitable upper and lower limits,
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. A deep
-*        copy is taken of the supplied Frame. This means that any
-*        subsequent changes made to the Frame using the supplied pointer
-*        will have no effect the Region.
-c     lbnd
-f     LBND( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the lower limits on each axis.
-*        Set a value to AST__BAD to indicate that the axis has no lower 
-*        limit.
-c     ubnd
-f     UBND( * ) = DOUBLE PRECISION (Given)
-c        An array of double, with one element for each Frame axis
-f        An array with one element for each Frame axis
-*        (Naxes attribute) containing the upper limits on each axis.
-*        Set a value to AST__BAD to indicate that the axis has no upper
-*        limit.
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with the boundary of the Box being created. 
-*        The uncertainty in any point on the boundary of the Box is found by 
-*        shifting the supplied "uncertainty" Region so that it is centred at 
-*        the boundary point being considered. The area covered by the
-*        shifted uncertainty Region then represents the uncertainty in the
-*        boundary position. The uncertainty is assumed to be the same for
-*        all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-*        The uncertainty Region has two uses: 1) when the 
-c        astOverlap
-f        AST_OVERLAP 
-*        function compares two Regions for equality the uncertainty
-*        Region is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using 
-c        astSimplify),
-f        AST_SIMPLIFY),
-*        the uncertainties are used to determine if the transformed boundary 
-*        can be accurately represented by a specific shape of Region.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Interval. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Interval. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astInterval()
-f     AST_INTERVAL = INTEGER
-*        A pointer to the new Interval.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstInterval *new;             /* Pointer to new Interval */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the Interval, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitInterval( NULL, sizeof( AstInterval ), !class_init, 
-                          &class_vtab, "Interval", frame, lbnd, ubnd, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Interval's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Interval. */
-   return new;
-}
-
-AstInterval *astIntervalId_( void *frame_void, const double lbnd[], 
-                             const double ubnd[], void *unc_void,
-                             const char *options, ... ) {
-/*
-*  Name:
-*     astIntervalId_
-
-*  Purpose:
-*     Create a Interval.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstInterval *astIntervalId_( AstFrame *frame, const double lbnd[], 
-*                                  const double ubnd[], AstRegion *unc,
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     Interval constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astInterval constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astInterval_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astInterval_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astInterval_.
-
-*  Returned Value:
-*     The ID value associated with the new Interval.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstInterval *new;             /* Pointer to new Interval */
-   AstRegion *unc;               /* Pointer to Region structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Interval, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitInterval( NULL, sizeof( AstInterval ), !class_init, &class_vtab,
-                        "Interval", frame, lbnd, ubnd, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Interval's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Interval. */
-   return astMakeId( new );
-}
-
-AstInterval *astInitInterval_( void *mem, size_t size, int init, AstIntervalVtab *vtab, 
-                               const char *name, AstFrame *frame, 
-                               const double lbnd[], const double ubnd[],
-                               AstRegion *unc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitInterval
-
-*  Purpose:
-*     Initialise a Interval.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstInterval *astInitInterval( void *mem, size_t size, int init, AstIntervalVtab *vtab, 
-*                                   const char *name, AstFrame *frame, 
-*                                   const double lbnd[], const double ubnd[],
-*                                   AstRegion *unc )
-
-*  Class Membership:
-*     Interval initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Interval object. It allocates memory (if necessary) to accommodate
-*     the Interval plus any additional data associated with the derived class.
-*     It then initialises a Interval structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Interval at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Interval is to be initialised.
-*        This must be of sufficient size to accommodate the Interval data
-*        (sizeof(Interval)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Interval (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Interval
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Interval's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Interval.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     lbnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the lower limits on each axis.
-*        Set a value to AST__BAD to indicate that the axis has no lower 
-*        limit. Upper and ower limits can be reversed to create an
-*        excluded interval rather than an included interval.
-*     ubnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the upper limits on each axis.
-*        Set a value to AST__BAD to indicate that the axis has no upper
-*        limit.
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points on the boundary of the new Interval
-*        being initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal to 
-*        1.0E-6 of the dimensions of the new Interval's bounding box are used. 
-*        If an uncertainty Region is supplied, it must be either a Box, a 
-*        Circle or an Ellipse, and its encapsulated Frame must be related
-*        to the Frame supplied for parameter "frame" (i.e. astConvert
-*        should be able to find a Mapping between them). Two positions 
-*        the "frame" Frame are considered to be co-incident if their 
-*        uncertainty Regions overlap. The centre of the supplied
-*        uncertainty Region is immaterial since it will be re-centred on the 
-*        point being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new Interval.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-   AstInterval *new;         /* Pointer to new Interval */
-   AstPointSet *pset;        /* PointSet to pass to Region initialiser */
-   double **ptr;             /* Pointer to coords data in pset */
-   int i;                    /* Axis index */
-   int nc;                   /* No. of axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitIntervalVtab( &class_vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Get the number of axis values required for each position. */
-   nc = astGetNaxes( frame );
-
-/* Create a PointSet to hold the upper and lower bounds, and get pointers to 
-   the data arrays. */
-   pset = astPointSet( 2, nc, "", status );
-   ptr = astGetPoints( pset );
-   if( astOK ) {
-
-/* Copy the limits into the PointSet.  */
-      for( i = 0; i < nc; i++ ) {
-         ptr[ i ][ 0 ] = lbnd[ i ];
-         ptr[ i ][ 1 ] = ubnd[ i ];
-      }
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the Interval structure, allocating memory if necessary. */
-      new = (AstInterval *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                           name, frame, pset, unc );
-
-      if ( astOK ) {
-
-/* Initialise the Interval data. */
-/* ----------------------------- */
-         new->lbnd = NULL;
-         new->ubnd = NULL;
-         new->box = NULL;
-         new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Interval. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free resources. */
-   pset = astAnnul( pset );
-
-/* Return a pointer to the new Interval. */
-   return new;
-}
-
-AstInterval *astLoadInterval_( void *mem, size_t size, AstIntervalVtab *vtab, 
-                               const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadInterval
-
-*  Purpose:
-*     Load a Interval.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "interval.h"
-*     AstInterval *astLoadInterval( void *mem, size_t size, AstIntervalVtab *vtab, 
-*                                   const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Interval loader.
-
-*  Description:
-*     This function is provided to load a new Interval using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Interval structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Interval at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Interval is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Interval data (sizeof(Interval)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Interval (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Interval structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstInterval) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Interval. If this is NULL, a pointer
-*        to the (static) virtual function table for the Interval class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Interval" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Interval.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS             /* Pointer to thread-specific global data */
-   AstInterval *new;              /* Pointer to the new Interval */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Interval. In this case the
-   Interval belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstInterval );
-      vtab = &class_vtab;
-      name = "Interval";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitIntervalVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Interval. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Interval" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-      new->lbnd = NULL;
-      new->ubnd = NULL;
-      new->box = NULL;
-      new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Interval. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Interval pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astIntervalPoints_( AstInterval *this, double *lbnd, double *ubnd, 
-                         int *status) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Interval,IntervalPoints))( this, lbnd, ubnd, status );
-   return;
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/interval.h b/ast-5.3-1/interval.h
deleted file mode 100644
index c581f34..0000000
--- a/ast-5.3-1/interval.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#if !defined( INTERVAL_INCLUDED ) /* Include this file only once */
-#define INTERVAL_INCLUDED
-/*
-*+
-*  Name:
-*     interval.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Interval class.
-
-*  Invocation:
-*     #include "interval.h"
-
-*  Description:
-*     This include file defines the interface to the Interval class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Interval class implement a Region which represents a simple interval
-*     on each axis of the encapsulated Frame
-
-*  Inheritance:
-*     The Interval class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     1-NOV-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "box.h"                 /* Closed box regions */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Interval structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstInterval {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *lbnd;                 /* Lower limits */
-   double *ubnd;                 /* Lower limits */
-   AstBox *box;                  /* Equivalent Box */
-   int stale;                    /* Is cached information stale? */
-
-} AstInterval;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstIntervalVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* IntervalPoints)( AstInterval *, double *, double *, int *);
-
-} AstIntervalVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstIntervalGlobals {
-   AstIntervalVtab Class_Vtab;
-   int Class_Init;
-} AstIntervalGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitIntervalGlobals_( AstIntervalGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Interval)          /* Check class membership */
-astPROTO_ISA(Interval)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstInterval *astInterval_( void *, const double[], const double[], AstRegion *, const char *, int *, ...);
-#else
-AstInterval *astIntervalId_( void *, const double[], const double[], AstRegion *, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstInterval *astInitInterval_( void *, size_t, int, AstIntervalVtab *,
-                               const char *, AstFrame *, const double[],
-                               const double[], AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitIntervalVtab_( AstIntervalVtab *, const char *, int * );
-
-/* Loader. */
-AstInterval *astLoadInterval_( void *, size_t, AstIntervalVtab *,
-                               const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-void astIntervalPoints_( AstInterval *, double *, double *, int *);
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckInterval(this) astINVOKE_CHECK(Interval,this,0)
-#define astVerifyInterval(this) astINVOKE_CHECK(Interval,this,1)
-
-/* Test class membership. */
-#define astIsAInterval(this) astINVOKE_ISA(Interval,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astInterval astINVOKE(F,astInterval_)
-#else
-#define astInterval astINVOKE(F,astIntervalId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitInterval(mem,size,init,vtab,name,frame,lbnd,ubnd,unc) \
-astINVOKE(O,astInitInterval_(mem,size,init,vtab,name,frame,lbnd,ubnd,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitIntervalVtab(vtab,name) astINVOKE(V,astInitIntervalVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadInterval(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadInterval_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckInterval to validate Interval pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astIntervalPoints(this,lbnd,ubnd) astINVOKE(V,astIntervalPoints_(astCheckInterval(this),lbnd,ubnd,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/intramap.c b/ast-5.3-1/intramap.c
deleted file mode 100644
index 1e88252..0000000
--- a/ast-5.3-1/intramap.c
+++ /dev/null
@@ -1,2942 +0,0 @@
-/*
-*class++
-*  Name:
-*     IntraMap
-
-*  Purpose:
-c     Map points using a private transformation function.
-f     Map points using a private transformation routine.
-
-*  Constructor Function:
-c     astIntraMap (also see astIntraReg)
-f     AST_INTRAMAP (also see AST_INTRAREG)
-
-*  Description:
-c     The IntraMap class provides a specialised form of Mapping which
-c     encapsulates a privately-defined coordinate transformation
-c     other AST Mapping. This allows you to create Mappings that
-c     perform any conceivable coordinate transformation.
-f     The IntraMap class provides a specialised form of Mapping which
-f     encapsulates a privately-defined coordinate transformation
-f     routine (e.g. written in Fortran) so that it may be used like
-f     any other AST Mapping. This allows you to create Mappings that
-f     perform any conceivable coordinate transformation.
-*
-*     However, an IntraMap is intended for use within a single program
-*     or a private suite of software, where all programs have access
-*     to the same coordinate transformation functions (i.e. can be
-*     linked against them). IntraMaps should not normally be stored in
-*     datasets which may be exported for processing by other software,
-*     since that software will not have the necessary transformation
-*     functions available, resulting in an error.
-*
-c     You must register any coordinate transformation functions to be
-c     used using astIntraReg before creating an IntraMap.
-f     You must register any coordinate transformation functions to be
-f     used using AST_INTRAREG before creating an IntraMap.
-
-*  Inheritance:
-*     The IntraMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     IntraMap also has the following attributes:
-*
-*     - IntraFlag: IntraMap identification string
-
-*  Functions:
-c     The IntraMap class does not define any new functions beyond those
-f     The IntraMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     16-MAR-1998 (RFWS):
-*        Original version.
-*     15-SEP-1999 (RFWS):
-*        Added a "this" pointer to the external transformation function
-*        used by an IntraMap.
-*     20-JUN-2001 (DSB):
-*        Add an "astClone" call to prevent the pointer for "this" being 
-*        annulled at the end of the Transform method.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitIntraMapVtab
-*        method.
-*     7-DEC-2005 (DSB):
-*        Free memory allocated by calls to astReadString.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS IntraMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "unitmap.h"             /* Unit (identity) Mappings */
-#include "intramap.h"            /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Pointer to array of transformation function data. */
-static AstIntraMapTranData *tran_data = NULL;
-
-/* Number of transformation functions registered. */
-static int tran_nfun = 0;
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
-   class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_getnin)( AstMapping *, int * );
-static int (* parent_getnout)( AstMapping *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(IntraMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(IntraMap,Class_Init)
-#define class_vtab astGLOBAL(IntraMap,Class_Vtab)
-
-
-/* A mutex used to serialise invocations of the IntraReg function (the
-   only function allowed to modify the contents of the static tran_data
-   array). */
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX1 pthread_mutex_lock( &mutex1 ); 
-#define UNLOCK_MUTEX1 pthread_mutex_unlock( &mutex1 ); 
-
-/* A mutex used to serialise invocations of extrnal transformation
-   functions (which may not be thread-safe). */
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstIntraMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX1
-#define UNLOCK_MUTEX1
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstIntraMap *astIntraMapId_( const char *, int, int, const char *, ... );
-void astIntraRegFor_( const char *, int, int, void (* tran)( AstMapping *, int, int, const double *[], int, int, double *[] ), void (* tran_wrap)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * ), unsigned int, const char *, const char *, const char *, int * );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static char *CleanName( const char *, const char *, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetIntraFlag( AstIntraMap *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestIntraFlag( AstIntraMap *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearIntraFlag( AstIntraMap *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static void IntraReg( const char *, int, int, void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), void (*)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * ), unsigned int, const char *, const char *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetIntraFlag( AstIntraMap *, const char *, int * );
-static void TranWrap( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * );
-
-/* Member functions. */
-/* ================= */
-static char *CleanName( const char *name, const char *caller, int *status ) {
-/*
-*  Name:
-*     CleanName
-
-*  Purpose:
-*     Clean (and validate) a transformation function name.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     char *CleanName( const char *name, const char *caller, int *status )
-
-*  Class Membership:
-*     IntraMap member function.
-
-*  Description:
-*     This function cleans a transformation function name by removing
-*     all white space. It returns a copy of the cleaned name held in
-*     dynamically allocated memory. If the name is entirely blank, an
-*     error is reported.
-
-*  Parameters:
-*     name
-*        Pointer to a null-terminated string containing the name to be
-*        cleaned.
-*     caller
-*        Pointer to a null-terminated string containing the name of
-*        the calling function. This is only used to construct error
-*        messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a dynamically-allocated null-terminated string
-*     containing the cleaned name. A NULL pointer is returned if the
-*     name was entirely blank.
-
-*  Notes:
-*     - The memory holding the returned string should be deallocated
-*     (using astFree) when no longer required.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer to result string */
-   int i;                        /* Loop counter for input characters */
-   int len;                      /* Length of name */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine the number of non-blank characters in the name supplied. */
-   len = 0;
-   for ( i = 0; name[ i ]; i++ ) if ( !isspace( (int) name[ i ] ) ) len++;
-
-/* If the name is entirely blank, then report an error. */
-   if ( !len ) {
-      astError( AST__ITFNI, "%s: Invalid blank transformation function name "
-                            "given.", status, caller );
-
-/* Otherwise, allocate memory to hold the cleaned name. */
-   } else {
-      result = astMalloc( (size_t) ( len + 1 ) );
-
-/* If OK, make a copy of the name with white space removed. */
-      if ( astOK ) {
-         len = 0;
-         for ( i = 0; name[ i ]; i++ ) {
-            if ( !isspace( (int) name[ i ] ) ) result[ len++ ] = name[ i ];
-         }
-
-/* Terminate the result string. */
-         result[ len ] = '\0';
-      }
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     IntraMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for an
-*     IntraMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstIntraMap *this;            /* Pointer to the IntraMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* IntraFlag. */
-/* ---------- */
-   if ( !strcmp( attrib, "intraflag" ) ) {
-      astClearIntraFlag( this );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two IntraMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     IntraMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two IntraMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a IntraMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the IntraMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstIntraMap *that;        
-   AstIntraMap *this;        
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two IntraMap structures. */
-   this = (AstIntraMap *) this_object;
-   that = (AstIntraMap *) that_object;
-
-/* Check the second object is a IntraMap. We know the first is a
-   IntraMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAIntraMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two IntraMaps differ, it may still be possible 
-   for them to be equivalent. First compare the IntraMaps if their Invert 
-   flags are the same. In this case all the attributes of the two IntraMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-            if( this->ifun == that->ifun &&
-                this->intraflag && that->intraflag &&
-                !strcmp( this->intraflag, that->intraflag ) ) {
-               result = 1;
-            }
-
-/* If the Invert flags for the two IntraMaps differ, the attributes of the two 
-   IntraMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a IntraMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     IntraMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied IntraMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstIntraMap *this;         /* Pointer to IntraMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the IntraMap structure. */
-   this = (AstIntraMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astTSizeOf( this->intraflag );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     IntraMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a IntraMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the IntraMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the IntraMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstIntraMap *this;            /* Pointer to the IntraMap structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* IntraFlag. */
-/* ---------- */
-   if ( !strcmp( attrib, "intraflag" ) ) {
-      result = astGetIntraFlag( this );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitIntraMapVtab_(  AstIntraMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitIntraMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for an IntraMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     void astInitIntraMapVtab( AstIntraMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     IntraMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the IntraMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAIntraMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearIntraFlag = ClearIntraFlag;
-   vtab->GetIntraFlag = GetIntraFlag;
-   vtab->SetIntraFlag = SetIntraFlag;
-   vtab->TestIntraFlag = TestIntraFlag;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Store pointers to inherited methods that will be invoked explicitly
-   by this class. */
-   parent_getnin = mapping->GetNin;
-   parent_getnout = mapping->GetNout;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "IntraMap",
-               "Map points using a private transformation function" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void IntraReg( const char *name, int nin, int nout,
-                      void (* tran)( AstMapping *, int, int, const double *[],
-                                     int, int, double *[] ),
-                      void (* tran_wrap)( void (*)( AstMapping *, int, int,
-                                                    const double *[], int, int,
-                                                    double *[] ),
-                                          AstMapping *, int, int,
-                                          const double *[], int, int,
-                                          double *[], int * ),
-                      unsigned int flags,
-                      const char *purpose, const char *author,
-                      const char *contact, int *status ) {
-/*
-*  Name:
-*     IntraReg
-
-*  Purpose:
-*     Register a transformation function for use by an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     void IntraReg( const char *name, int nin, int nout,
-*                    void (* tran)( AstMapping *, int, int, const double *[],
-*                                   int, int, double *[] ),
-*                    void (* tran_wrap)( void (*)( AstMapping *, int, int,
-*                                                  const double *[], int, int,
-*                                                  double *[] ),
-*                                        AstMapping *, int, int,
-*                                        const double *[], int, int,
-*                                        double *[], int * ),
-*                    unsigned int flags,
-*                    const char *purpose, const char *author,
-*                    const char *contact, int *status )
-
-*  Class Membership:
-*     IntraMap member function.
-
-*  Description:
-*     This function registers a transformation function which will
-*     later be used by an IntraMap and associates it with a name. It
-*     also stores related information which will be required by the
-*     IntraMap.
-
-*  Parameters:
-*     name
-*        Pointer to a null-terminated string containing the name to be
-*        used to identify the transformation function. This string is
-*        case sensitive. All white space is removed before use.
-*     nin
-*        The number of input coordinates per point (or AST__ANY if any
-*        number are allowed).
-*     nout
-*        The number of output coordinates per point (or AST__ANY if
-*        any number are allowed).
-*     tran
-*        Pointer to the transformation function to be registered.
-*        This may have any form of interface, which need not be known
-*        to the implementation of the IntraMap class. Instead, the
-*        method of invoking the transformation function should be
-*        encapsulated in the "tran_wrap" function (below).
-*     tran_wrap
-*        Pointer to a wrapper function appropriate to the transformation
-*        function (above). This wrapper function should have the same
-*        interface as astTranP (from the Mapping class), except that it takes
-*        a pointer to a function like "tran" as an additional first argument.
-*        The purpose of this wrapper is to invoke the transformation function
-*        via the pointer supplied, to pass it the necessary information
-*        derived from the remainder of its arguments, and then to return the
-*        results.
-*     flags
-*        This argument may be used to supply a set of flags which
-*        control the behaviour of any IntraMap which uses the
-*        registered transformation function. See the public interface
-*        for astIntraReg for details.
-*     purpose
-*        Pointer to a null-terminated string containing a short (one
-*        line) textual comment to describe the purpose of the
-*        transformation function.
-*     author
-*        Pointer to a null-terminated string containing the name of
-*        the author of the transformation function.
-*     contact
-*        Pointer to a null-terminated string containing contact
-*        details for the author of the function (e.g. an e-mail or WWW
-*        address).
-*     status
-*        Pointer to the inherited status variable.
-*/
-   
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   char *clname;                 /* Pointer to cleaned name string */
-   int found;                    /* Transformation function found? */
-   int ifun;                     /* Loop counter for function information */
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* This function modifies the global static tran_data array, so we use a
-   mutex to ensure that only one thread can run this function at any one
-   time. */
-   LOCK_MUTEX1;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Indicate that subsequent memory allocations may never be freed (other
-   than by any AST exit handler). */
-   astBeginPM;
-
-/* Clean (and validate) the name supplied. */
-   clname = CleanName( name, "astIntraReg", status );
-
-/* If OK, also validate the numbers of input and output
-   coordinates. Report an error if necessary. */
-   if ( astOK ) {
-      if ( ( nin < 0 ) && ( nin != AST__ANY ) ) {
-         astError( AST__BADNI, "astIntraReg(%s): Bad number of input "
-                               "coordinates (%d).", status, clname, nin );
-         astError( AST__BADNI, "This number should be zero or more (or "
-                               "AST__ANY)." , status);
-
-      } else if ( ( nout < 0 ) && ( nout != AST__ANY ) ) {
-         astError( AST__BADNO, "astIntraReg(%s): Bad number of output "
-                               "coordinates (%d).", status, clname, nout );
-         astError( AST__BADNO, "This number should be zero or more (or "
-                               "AST__ANY)." , status);
-      }
-   }
-
-/* Search the array of transformation function data to see if a
-   function with the same name has already been registered. */
-   if ( astOK ) {
-      found = 0;
-      for ( ifun = 0; ifun < tran_nfun; ifun++ ) {
-         if ( ( found = !strcmp( clname, tran_data[ ifun ].name ) ) ) break;
-      }
-
-/* If so, then check that the information supplied this time is
-   identical to that supplied before. If any discrepancy is found,
-   report an error. */
-      if ( found ) {
-         if ( ( nin != tran_data[ ifun ].nin ) ||
-              ( nout != tran_data[ ifun ].nout ) ||
-              ( tran != tran_data[ ifun ].tran ) ||
-              ( tran_wrap != tran_data[ ifun ].tran_wrap ) ||
-              ( flags != tran_data[ ifun ].flags ) ||
-              strcmp( purpose, tran_data[ ifun ].purpose ) ||
-              strcmp( author, tran_data[ ifun ].author ) ||
-              strcmp( contact, tran_data[ ifun ].contact ) ) {
-            astError( AST__MRITF, "astIntraReg: Invalid attempt to register "
-                                  "the transformation function name \"%s\" "
-                                  "multiple times.", status, clname );
-         }
-
-/* If this is a new function, extend the array of transformation
-   function data to accommodate it. */
-      } else {
-
-         tran_data = astGrow( tran_data, tran_nfun + 1, sizeof( AstIntraMapTranData ) );
-
-/* Store the information supplied. */
-         if ( astOK ) {
-            tran_data[ tran_nfun ].name = clname;
-            tran_data[ tran_nfun ].nin = nin;
-            tran_data[ tran_nfun ].nout = nout;
-            tran_data[ tran_nfun ].tran = tran;
-            tran_data[ tran_nfun ].tran_wrap = tran_wrap;
-            tran_data[ tran_nfun ].flags = flags;
-            tran_data[ tran_nfun ].purpose =
-               astStore( NULL, purpose, strlen( purpose ) + (size_t) 1 );
-            tran_data[ tran_nfun ].author =
-               astStore( NULL, author, strlen( author ) + (size_t) 1 );
-            tran_data[ tran_nfun ].contact =
-               astStore( NULL, contact, strlen( contact ) + (size_t) 1 );
-
-/* If successful, increment the count of transformation functions
-   registered. */
-            if ( astOK ) {
-               tran_nfun++;
-
-/* If an error occurred, free any memory that was allocated. */
-            } else {
-               tran_data[ tran_nfun ].name = NULL;
-               tran_data[ tran_nfun ].purpose =
-                  astFree( tran_data[ tran_nfun ].purpose );
-               tran_data[ tran_nfun ].author =
-                  astFree( tran_data[ tran_nfun ].author );
-               tran_data[ tran_nfun ].contact =
-                  astFree( tran_data[ tran_nfun ].contact );
-            }
-         }
-      }
-   }
-
-/* If an error occurred, free the memory holding the cleaned function
-   name. */
-   if ( !astOK ) clname = astFree( clname );
-
-/* Mark the end of the section in which memory allocations may never be  
-   freed (other than by any AST exit handler). */
-   astEndPM;
-
-/* Unlock the mutex that ensures that only one thread can run this function 
-   at any one time. */
-   UNLOCK_MUTEX1;
-
-}
-
-void astIntraReg_( const char *name, int nin, int nout,
-                   void (* tran)( AstMapping *, int, int, const double *[],
-                                  int, int, double *[] ),
-                   unsigned int flags, const char *purpose, const char *author,
-                   const char *contact, int *status ) {
-/*
-*++
-*  Name:
-c     astIntraReg
-f     AST_INTRAREG
-
-*  Purpose:
-c     Register a transformation function for use by an IntraMap.
-f     Register a transformation routine for use by an IntraMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "intramap.h"
-c     astIntraReg( const char *name, int nin, int nout,
-c                  void (* tran)( AstMapping *, int, int, const double *[],
-c                                 int, int, double *[] ),
-c                  unsigned int flags, const char *purpose, const char *author,
-c                  const char *contact )
-f     CALL AST_INTRAREG( NAME, NIN, NOUT, TRAN, FLAGS, PURPOSE, AUTHOR,
-f                        CONTACT, STATUS )
-
-*  Class Membership:
-*     IntraMap member function.
-
-*  Description:
-c     This function registers a privately-defined coordinate
-c     transformation function written in C so that it may be used to
-c     create an IntraMap. An IntraMap is a specialised form of Mapping
-c     which encapsulates the C function so that it may be used like
-c     any other AST Mapping. This allows you to create Mappings that
-c     perform any conceivable coordinate transformation.
-f     This function registers a privately-defined coordinate
-f     transformation routine written in Fortran so that it may be used
-f     to create an IntraMap. An IntraMap is a specialised form of
-f     Mapping which encapsulates the Fortran routine so that it may be
-f     used like any other AST Mapping. This allows you to create
-f     Mappings that perform any conceivable coordinate transformation.
-*
-c     Registration of relevant transformation functions is required
-c     before using the astIntraMap constructor function to create an
-c     IntraMap or reading an external representation of an IntraMap
-c     from a Channel.
-f     Registration of relevant transformation routines is required
-f     before using the AST_INTRAMAP constructor function to create an
-f     IntraMap or reading an external representation of an IntraMap
-f     from a Channel.
-
-*  Parameters:
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing a unique name
-c        to be associated with the transformation function in order to
-c        identify it. This name is case sensitive. All white space
-c        will be removed before use.
-f        A character string containing a unique name to be associated
-f        with the transformation routine in order to identify it. This
-f        name is case sensitive. All white space will be removed
-f        before use.
-c     nin
-f     NIN = INTEGER (Given)
-c        The number of input coordinates accepted by the
-c        transformation function (i.e. the number of dimensions of the
-c        space in which the input points reside). A value of AST__ANY
-c        may be given if the function is able to accommodate a
-c        variable number of input coordinates.
-f        The number of input coordinates accepted by the
-f        transformation routine (i.e. the number of dimensions of the
-f        space in which the input points reside). A value of AST__ANY
-f        may be given if the routine is able to accommodate a variable
-f        number of input coordinates.
-c     nout
-f     NOUT = INTEGER (Given)
-c        The number of output coordinates produced by the
-c        transformation function (i.e. the number of dimensions of the
-c        space in which the output points reside). A value of AST__ANY
-c        may be given if the function is able to produce a variable
-c        number of output coordinates.
-f        The number of output coordinates produced by the
-f        transformation routine (i.e. the number of dimensions of the
-f        space in which the output points reside). A value of AST__ANY
-f        may be given if the routine is able to produce a variable
-f        number of output coordinates.
-c     tran
-f     TRAN = SUBROUTINE (Given)
-c        Pointer to the transformation function to be registered.
-c        This function should perform whatever coordinate
-c        transformations are required and should have an interface
-c        like astTranP (q.v.).
-f        The transformation routine to be registered.  This routine
-f        should perform whatever coordinate transformations are
-f        required and should have an interface like AST_TRANN (q.v.).
-f
-f        This transformation routine must also appear in an EXTERNAL
-f        statement in the routine which calls AST_INTRAREG.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        This value may be used to supply a set of flags which
-c        describe the transformation function and which may affect the
-c        behaviour of any IntraMap which uses it.  Often, a value of
-c        zero will be given here, but you may also supply the bitwise
-c        OR of a set of flags as described in the "Transformation
-c        Flags" section (below).
-f        This value may be used to supply a set of flags which
-f        describe the transformation routine and which may affect the
-f        behaviour of any IntraMap which uses it.  Often, a value of
-f        zero will be given here, but you may also supply the sum of a
-f        set of flags as described in the "Transformation Flags"
-f        section (below).
-c     purpose
-f     PURPOSE = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing a short (one
-c        line) textual comment to describe the purpose of the
-c        transformation function.
-f        A character string containing a short (one line) textual
-f        comment to describe the purpose of the transformation
-f        routine.
-c     author
-f     AUTHOR = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing the name of
-c        the author of the transformation function.
-f        A character string containing the name of the author of the
-f        transformation routine.
-c     contact
-f     CONTACT = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing contact
-c        details for the author of the transformation function
-c        (e.g. an e-mail or WWW address). If any IntraMap which uses
-c        this transformation function is exported as part of a dataset
-c        to an external user who does not have access to the function,
-c        then these contact details should allow them to obtain the
-c        necessary code.
-f        A character string containing contact details for the author
-f        of the transformation routine (e.g. an e-mail or WWW
-f        address). If any IntraMap which uses this transformation
-f        routine is exported as part of a dataset to an external user
-f        who does not have access to the routine, then these contact
-f        details should allow them to obtain the necessary code.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - Beware that an external representation of an IntraMap (created
-c     by writing it to a Channel) will not include the coordinate
-c     transformation function which it uses, so will only refer to the
-c     function by its name (as assigned using astIntraReg).
-c     Consequently, the external representation cannot be utilised by
-c     another program unless that program has also registered the same
-c     transformation function with the same name using an identical
-c     invocation of astIntraReg. If no such registration has been
-c     performed, then attempting to read the external representation
-c     will result in an error.
-f     - Beware that an external representation of an IntraMap (created
-f     by writing it to a Channel) will not include the coordinate
-f     transformation routine which it uses, so will only refer to the
-f     routine by its name (as assigned using AST_INTRAREG).
-f     Consequently, the external representation cannot be utilised by
-f     another program unless that program has also registered the same
-f     transformation routine with the same name using an identical
-f     invocation of AST_INTRAREG. If no such registration has been
-f     performed, then attempting to read the external representation
-f     will result in an error.
-c     - You may use astIntraReg to register a transformation function
-c     with the same name more than once, but only if the arguments
-c     supplied are identical on each occasion (i.e there is no way of
-c     changing things once a function has been successfully registered
-c     under a given name, and attempting to do so will result in an
-c     error). This feature simply allows registration to be performed
-c     independently, but consistently, at several places within your
-c     program, without having to check whether it has already been
-c     done.
-f     - You may use AST_INTRAREG to register a transformation routine
-f     with the same name more than once, but only if the arguments
-f     supplied are identical on each occasion (i.e there is no way of
-f     changing things once a routine has been successfully registered
-f     under a given name, and attempting to do so will result in an
-f     error). This feature simply allows registration to be performed
-f     independently, but consistently, at several places within your
-f     program, without having to check whether it has already been
-f     done.
-c     - If an error occurs in the transformation function, this may be
-c     indicated by setting the AST error status to an error value
-c     (using astSetStatus) before it returns.  This will immediately
-c     terminate the current AST operation.  The error value AST__ITFER
-c     is available for this purpose, but other values may also be used
-c     (e.g. if you wish to distinguish different types of error).
-f     - If an error occurs in the transformation routine, this may be
-f     indicated by setting its STATUS argument to an error value
-f     before it returns.  This will immediately terminate the current
-f     AST operation.  The error value AST__ITFER is available for this
-f     purpose, but other values may also be used (e.g. if you wish to
-f     distinguish different types of error). The AST__ITFER error
-f     value is defined in the AST_ERR include file.
-
-*  Transformation Flags:
-c     The following flags are defined in the ``ast.h'' header file and
-c     allow you to provide further information about the nature of the
-c     transformation function. Having selected the set of flags which
-c     apply, you should supply the bitwise OR of their values as the
-c     ``flags'' argument to astIntraReg.
-f     The following flags are defined in the AST_PAR include file and
-f     allow you to provide further information about the nature of the
-f     transformation routine. Having selected the set of flags which
-f     apply, you should supply the sum of their values as the FLAGS
-f     argument to AST_INTRAREG.
-
-c     - AST__NOFWD: If this flag is set, it indicates that the
-c     transformation function does not implement a forward coordinate
-c     transformation. In this case, any IntraMap which uses it will
-c     have a TranForward attribute value of zero and the
-c     transformation function itself will not be invoked with its
-c     ``forward'' argument set to a non-zero value.  By default, it is
-c     assumed that a forward transformation is provided.
-f     - AST__NOFWD: If this flag is set, it indicates that the
-f     transformation routine does not implement a forward coordinate
-f     transformation. In this case, any IntraMap which uses it will
-f     have a TranForward attribute value of zero and the
-f     transformation routine itself will not be called with its
-f     FORWARD argument set to .TRUE.. By default, it is assumed that a
-f     forward transformation is provided.
-c     - AST__NOINV: If this flag is set, it indicates that the
-c     transformation function does not implement an inverse coordinate
-c     transformation. In this case, any IntraMap which uses it will
-c     have a TranInverse attribute value of zero and the
-c     transformation function itself will not be invoked with its
-c     ``forward'' argument set to zero.  By default, it is assumed
-c     that an inverse transformation is provided.
-f     - AST__NOINV: If this flag is set, it indicates that the
-f     transformation routine does not implement an inverse coordinate
-f     transformation. In this case, any IntraMap which uses it will
-f     have a TranInverse attribute value of zero and the
-f     transformation routine itself will not be called with its
-f     FORWARD argument set to .FALSE.. By default, it is assumed that
-f     an inverse transformation is provided.
-c     - AST__SIMPFI: You may set this flag if applying the
-c     transformation function's forward coordinate transformation,
-c     followed immediately by the matching inverse transformation,
-c     should always restore the original set of coordinates. It
-c     indicates that AST may replace such a sequence of operations by
-c     an identity Mapping (a UnitMap) if it is encountered while
-c     simplifying a compound Mapping (e.g. using astSimplify).  It is
-c     not necessary that both transformations have actually been
-c     implemented.
-f     - AST__SIMPFI: You may set this flag if applying the
-f     transformation routine's forward coordinate transformation,
-f     followed immediately by the matching inverse transformation,
-f     should always restore the original set of coordinates. It
-f     indicates that AST may replace such a sequence of operations by
-f     an identity Mapping (a UnitMap) if it is encountered while
-f     simplifying a compound Mapping (e.g. using AST_SIMPLIFY).  It is
-f     not necessary that both transformations have actually been
-f     implemented.
-c     - AST__SIMPIF: You may set this flag if applying the
-c     transformation function's inverse coordinate transformation,
-c     followed immediately by the matching forward transformation,
-c     should always restore the original set of coordinates. It
-c     indicates that AST may replace such a sequence of operations by
-c     an identity Mapping (a UnitMap) if it is encountered while
-c     simplifying a compound Mapping (e.g. using astSimplify).  It is
-c     not necessary that both transformations have actually been
-c     implemented.
-f     - AST__SIMPIF: You may set this flag if applying the
-f     transformation routine's inverse coordinate transformation,
-f     followed immediately by the matching forward transformation,
-f     should always restore the original set of coordinates. It
-f     indicates that AST may replace such a sequence of operations by
-f     an identity Mapping (a UnitMap) if it is encountered while
-f     simplifying a compound Mapping (e.g. using AST_SIMPLIFY).  It is
-f     not necessary that both transformations have actually been
-f     implemented.
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Register the transformation function together with the appropriate
-   wrapper function for the C language. */
-   IntraReg( name, nin, nout, tran, TranWrap, flags, purpose, author,
-             contact, status );
-}
-
-void astIntraRegFor_( const char *name, int nin, int nout,
-                      void (* tran)( AstMapping *, int, int, const double *[],
-                                     int, int, double *[] ),
-                      void (* tran_wrap)( void (*)( AstMapping *, int, int,
-                                                    const double *[], int, int,
-                                                    double *[] ),
-                                          AstMapping *, int, int,
-                                          const double *[], int, int,
-                                          double *[], int * ),
-                      unsigned int flags, const char *purpose,
-                      const char *author, const char *contact, int *status ) {
-/*
-*+
-*  Name:
-*     astIntraRegFor
-
-*  Purpose:
-*     Register a foreign language transformation function for an IntraMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     void astIntraRegFor( const char *name, int nin, int nout,
-*                          void (* tran)( AstMapping *, int, int,
-*                                         const double *[], int, int,
-*                                         double *[] ),
-*                          void (* tran_wrap)( void (*)( AstMapping *, int,
-*                                                        int, const double *[],
-*                                                        int, int,
-*                                                        double *[] ),
-*                                              AstMapping *, int, int,
-*                                              const double *[], int, int,
-*                                              double *[], int * ),
-*                          unsigned int flags, const char *purpose,
-*                          const char *author, const char *contact )
-
-*  Class Membership:
-*     IntraMap member function.
-
-*  Description:
-*     This function registers a transformation function provided by a
-*     foreign language interface which will later be used by an
-*     IntraMap, and associates it with a name. It also stores related
-*     information which will be required by the IntraMap.
-
-*  Parameters:
-*     name
-*        Pointer to a null-terminated string containing the name to be
-*        used to identify the transformation function. This string is
-*        case sensitive. All white space is removed before use.
-*     nin
-*        The number of input coordinates per point (or AST__ANY if any
-*        number are allowed).
-*     nout
-*        The number of output coordinates per point (or AST__ANY if
-*        any number are allowed).
-*     tran
-*        Pointer to the foreign language transformation function to be
-*        registered. This may have any form of interface, which need
-*        not be known to the implementation of the IntraMap
-*        class. Instead, the method of invoking the transformation
-*        function should be encapsulated in the "tran_wrap" function
-*        (below).
-*     tran_wrap
-*        Pointer to a wrapper function appropriate to the foreign
-*        language interface. This wrapper function should have the
-*        same interface as astTranP (from the Mapping class), except
-*        that it takes a pointer to a function like "tran" as an additional
-*        first argument. The purpose of this wrapper is to invoke the
-*        transformation function via the pointer supplied, to pass it the
-*        necessary information derived from the remainder of its arguments,
-*        and then to return the results.
-*     flags
-*        This argument may be used to supply a set of flags which
-*        control the behaviour of any IntraMap which uses the
-*        registered transformation function. See the description of
-*        astIntraReg for details.
-*     purpose
-*        Pointer to a null-terminated string containing a short (one
-*        line) textual comment to describe the purpose of the
-*        transformation function.
-*     author
-*        Pointer to a null-terminated string containing the name of
-*        the author of the transformation function.
-*     contact
-*        Pointer to a null-terminated string containing contact
-*        details for the author of the transformation function
-*        (e.g. an e-mail address or URL). If any IntraMap using this
-*        transformation function is exported as part of a dataset to
-*        an external user who does not have access to the function,
-*        then these contact details should allow them to obtain the
-*        necessary code.
-
-*  Notes:
-*     - This function is only available through the public interface
-*     to the IntraMap class (not the protected interface) and is
-*     intended solely for use in implementing foreign language
-*     interfaces to this class.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Register the transformation function together with the appropriate
-   wrapper function for the foreign language interface. */
-   IntraReg( name, nin, nout, tran, tran_wrap, flags, purpose, author,
-             contact, status );
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     IntraMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated IntraMap in the sequence with its
-*     neighbours, so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated IntraMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated IntraMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the IntraMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        IntraMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated IntraMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstIntraMap *intramap1;       /* Pointer to first IntraMap */
-   AstIntraMap *intramap2;       /* Pointer to second IntraMap */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   const char *class;            /* Pointer to Mapping class string */
-   int imap1;                    /* Index of first IntraMap */
-   int imap2;                    /* Index of second IntraMap */
-   int imap;                     /* Loop counter for Mappings */
-   int invert1;                  /* Invert flag value (1st IntraMap) */
-   int invert2;                  /* Invert flag value (2nd IntraMap) */
-   int nin1;                     /* No. input coordinates (1st IntraMap) */
-   int nout2;                    /* No. output coordinates (2nd IntraMap) */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Mappings simplified? */
-
-/* Initialise the returned result. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Further initialisation. */
-   new = NULL;
-   simpler = 0;
-   nin1 = -1;
-
-/* We will only handle the case of IntraMaps in series and will
-   consider merging the nominated IntraMap with the Mapping which
-   follows it. Check that there is such a Mapping. */
-   if ( series && ( ( where + 1 ) < *nmap ) ) {
-
-/* Obtain the indices of the two potential IntraMaps to be merged and
-   a pointer to the first one. */
-      imap1 = where;
-      imap2 = where + 1;
-      intramap1 = (AstIntraMap *) ( *map_list )[ imap1 ];
-
-/* Obtain the Class string of the second Mapping and determine if it
-   is an IntraMap. */
-      class = astGetClass( ( *map_list )[ imap2 ] );
-      if ( astOK && !strcmp( class, "IntraMap" ) ) {
-
-/* Obtain a pointer to the second IntraMap. */
-         intramap2 = (AstIntraMap *) ( *map_list )[ imap2 ];
-
-/* Check that the two IntraMaps use the same transformation function
-   and have the same IntraFlag string (if set). */
-         if ( ( intramap1->ifun == intramap2->ifun ) &&
-              !strcmp( intramap1->intraflag ? intramap1->intraflag : "",
-                       intramap2->intraflag ? intramap2->intraflag : "" ) ) {
-
-/* Determine the number of input coordinates that the first IntraMap
-   would have if its Invert attribute were set to the value of the
-   associated invert flag. Take account of the current Invert
-   attribute in obtaining this value. */
-            invert1 = ( *invert_list )[ imap1 ];
-            if ( astGetInvert( intramap1 ) ) {
-               nin1 = invert1 ? astGetNin( intramap1 ) :
-                                astGetNout( intramap1 );
-            } else {
-               nin1 = invert1 ? astGetNout( intramap1 ) :
-                                astGetNin( intramap1 );
-            }
-
-/* Similarly, determine the number of output coordinates that the
-   second IntraMap would have. */
-            invert2 = ( *invert_list )[ imap2 ];
-            if ( astGetInvert( intramap2 ) ) {
-               nout2 = invert2 ? astGetNout( intramap2 ) :
-                                 astGetNin( intramap2 );
-            } else {
-               nout2 = invert2 ? astGetNin( intramap2 ) :
-                                 astGetNout( intramap2 );
-            }
-
-/* Check that the effect of applying the two IntraMaps will be to
-   preserve the number of coordinates. */
-            if ( astOK && ( nin1 == nout2 ) ) {
-
-/* If so, check if the first transformation function is applied in the
-   forward direction and the second in the inverse direction. If so,
-   note if this configuration can be simplified. */
-               if ( !invert1 && invert2 ) {
-                  simpler = tran_data[ intramap1->ifun ].flags & AST__SIMPFI;
-
-/* Similarly, if the first transformation function is applied in the
-   inverse direction and the second in the forward direction, then
-   note if this configuration can be simplified. */
-               } else if ( invert1 && !invert2 ) {
-                  simpler = tran_data[ intramap1->ifun ].flags & AST__SIMPIF;
-               }
-            }
-         }
-      }
-
-/* If the two IntraMaps can be simplified, create a UnitMap to replace
-   them. */
-      if ( simpler ) {
-         new = (AstMapping *) astUnitMap( nin1, "", status );
-
-/* Annul the pointers to the IntraMaps. */
-         if ( astOK ) {
-            ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
-            ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement Mapping and initialise its
-   invert flag. */
-            ( *map_list )[ imap1 ] = new;
-            ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
-   in the arrays. */
-            for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-               ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
-               ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
-            }
-
-/* Clear the vacated elements at the end. */
-            ( *map_list )[ *nmap - 1 ] = NULL;
-            ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap )--;
-            result = imap1;
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     IntraMap member function (over-rides the astSetAttrib method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a IntraMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Vaiables: */
-   AstIntraMap *this;            /* Pointer to the IntraMap structure */
-   int intraflag;                /* Offset of IntraFlag value in string */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* IntraFlag. */
-/* ---------- */
-   if ( nc = 0,
-        ( 0 == astSscanf( setting, "intraflag=%n%*[^\n]%n", &intraflag, &nc ) )
-        && ( nc >= len ) ) {
-      astSetIntraFlag( this, setting + intraflag );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     IntraMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a IntraMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstIntraMap *this;            /* Pointer to the IntraMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* IntraFlag. */
-/* ---------- */
-   if ( !strcmp( attrib, "intraflag" ) ) {
-      result = astTestIntraFlag( this );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply an IntraMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     IntraMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a IntraMap and a set of points encapsulated
-*     in a PointSet and transforms the points using the transformation
-*     function associated with the IntraMap.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation should be applied, while a zero value requests
-*        the inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed
-*        (output) coordinate values. A NULL value may also be given,
-*        in which case a new PointSet will be created by this
-*        function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of coordinates for the IntraMap
-*     being applied.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and coordinate values per point to
-*     accommodate the result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstIntraMap *this;            /* Pointer to IntraMap structure */
-   AstMapping *id;               /* Public ID for the IntraMap supplied */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   const double **ptr_in;        /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int ncoord_out;               /* Number of coordinates per output point */
-   int npoint;                   /* Number of points */
-   int ok;                       /* AST status OK? */
-   int status_value;             /* AST status value */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_mapping);
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform
-   member function inherited from the parent Mapping class. This
-   function validates all arguments and generates an output PointSet
-   if necessary, but does not actually transform any coordinate
-   values. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the
-   input and output PointSets and obtain pointers for accessing the
-   input and output coordinate values. */
-   npoint = astGetNpoint( in );
-   ncoord_in = astGetNcoord( in );
-   ncoord_out = astGetNcoord( result );
-   ptr_in = (const double **) astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation,
-   according to the direction specified and whether the Mapping has
-   been inverted. */
-   if ( astGetInvert( this ) ) forward = !forward;
-
-/* Obtain a public (external) ID for the IntraMap. This will be
-   required (instead of a true C pointer) by the transformation function,
-   since it is user-written. Clone the IntraMap pointer so that the call
-   to astAnnulID later on does not annul the IntraMap pointer. */
-   id = (AstMapping *) astMakeId( astClone( this ) );
-
-/* Locate the transformation function data associated with the
-   IntraMap and use the wrapper function to invoke the transformation
-   function itself. */
-   if ( ( ok = astOK ) ) {
-      LOCK_MUTEX2;
-      ( *tran_data[ this->ifun ].tran_wrap )( tran_data[ this->ifun ].tran,
-                                              id, npoint, ncoord_in, ptr_in,
-                                              forward, ncoord_out, ptr_out, 
-                                              status );
-      UNLOCK_MUTEX2;
-
-/* If an error occurred, report a contextual error message. To ensure
-   that the location of the error appears in the message, we first clear
-   the global status (which makes the error system think this is the
-   first report). */
-      if ( !( ok = astOK ) ) {
-         status_value = astStatus;
-         astClearStatus;
-         astError( status_value,
-                   "astTransform(%s): Error signalled by \"%s\" "
-                   "transformation function.", status,
-                   astGetClass( this ), tran_data[ this->ifun ].name );
-      }
-   }
-
-/* Annul the external identifier. */
-   id = astMakeId( astAnnulId( id ) );
-
-/* If an error occurred here, but earlier steps were successful, then
-   something has happened to the external ID, so report a contextual
-   error message. */
-   if ( !astOK && ok ) {
-      astError( astStatus,
-                "astTransform(%s): %s pointer corrupted by \"%s\" "
-                "transformation function.", status,
-                astGetClass( this ), astGetClass( this ),
-                tran_data[ this->ifun ].name );
-   }
-
-/* If an error occurred, clear the returned pointer. If a new output
-   PointSet has been created, then delete it. */
-   if ( !astOK ) {
-      result = ( result == out ) ? NULL : astDelete( result );
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
-                                     int, int, double *[] ),
-                      AstMapping *this, int npoint, int ncoord_in,
-                      const double *ptr_in[], int forward, int ncoord_out,
-                      double *ptr_out[], int *status ) {
-/*
-*  Name:
-*     TranWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C transformation function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void TranWrap( void (* tran)( AstMapping *, int, int, const double *[],
-*                                   int, int, double *[] ),
-*                    AstMapping *this, int npoint, int ncoord_in,
-*                    const double *ptr_in[], int forward, int ncoord_out,
-*                    double *ptr_out[], int *status )
-
-*  Class Membership:
-*     IntraMap member function.
-
-*  Description:
-*     This function invokes a C implementation of a transformation
-*     function (which resembles the astTranP function from the Mapping
-*     class).
-*
-*     This wrapper is essentially a dummy function for the C language.
-*     It may be replaced by alternative versions for foreign language
-*     interfaces, thus allowing transformation functions supplied by
-*     those languages to be invoked without knowledge of their
-*     interfaces.
-
-*  Parameters:
-*     tran
-*        Pointer to the transformation function to be invoked. This
-*        should resemble astTranP (but with the first argument
-*        omitted).
-*     this
-*        An external Mapping ID associated with the internal (true C) pointer
-*        for the IntraMap whose transformation is being evaluated.
-*     npoint
-*        The number of points to be transformed.
-*     ncoord_in
-*        The number of coordinates being supplied for each input point
-*        (i.e. the number of dimensions of the space in which the
-*        input points reside).
-*     ptr_in
-*        An array of pointers to double, with "ncoord_in"
-*        elements. Element "ptr_in[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contain the values of coordinate number "coord" for each
-*        input (untransformed) point. The value of coordinate number
-*        "coord" for input point number "point" is therefore given by
-*        "ptr_in[coord][point]".
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation is to be applied, while a zero value indicates
-*        that the inverse transformation should be used.
-*     ncoord_out
-*        The number of coordinates being generated for each output
-*        point (i.e. the number of dimensions of the space in which
-*        the output points reside). This need not be the same as
-*        "ncoord_in".
-*     ptr_out
-*        An array of pointers to double, with "ncoord_out"
-*        elements. Element "ptr_out[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) into
-*        which the values of coordinate number "coord" for each output
-*        (transformed) point will be written.  The value of coordinate
-*        number "coord" for output point number "point" will therefore
-*        be found in "ptr_out[coord][point]".
-*     status
-*        Pointer to the inherited status value.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the transformation function. */
-   ( *tran )( this, npoint, ncoord_in, ptr_in, forward, ncoord_out, ptr_out );
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     IntraFlag
-
-*  Purpose:
-*     IntraMap identification string.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-c     This attribute allows an IntraMap to be flagged so that it is
-c     distinguishable from other IntraMaps. The transformation function
-c     associated with the IntraMap may then enquire the value of this
-c     attribute and adapt the transformation it provides according to the
-c     particular IntraMap involved.
-f     This attribute allows an IntraMap to be flagged so that it is
-f     distinguishable from other IntraMaps. The transformation routine
-f     associated with the IntraMap may then enquire the value of this
-f     attribute and adapt the transformation it provides according to the
-f     particular IntraMap involved.
-*
-c     Although this is a string attribute, it may often be useful to store
-c     numerical values here, encoded as a character string, and to use these
-c     as data within the transformation function. Note, however, that this
-c     mechanism is not suitable for transferring large amounts of data (more
-c     than about 1000 characters) to an IntraMap. For that purpose, global
-c     variables are recommended, although the IntraFlag value can be used to
-c     supplement this approach. The default IntraFlag value is an empty
-c     string.
-f     Although this is a string attribute, it may often be useful to store
-f     numerical values here, encoded as a character string, and to use these
-f     as data within the transformation routine. Note, however, that this
-f     mechanism is not suitable for transferring large amounts of data (more
-f     than about 1000 characters) to an IntraMap. For that purpose, global
-f     variables are recommended, although the IntraFlag value can be used to
-f     supplement this approach. The default IntraFlag value is an empty
-f     string.
-
-*  Applicability:
-*     IntraMap
-*        All IntraMaps have this attribute.
-
-*  Notes:
-c     - A pair of IntraMaps whose transformations may potentially cancel
-c     cannot be simplified to produce a UnitMap (e.g. using astSimplify)
-c     unless they have the same IntraFlag values. The test for equality is
-c     case-sensitive.
-f     - A pair of IntraMaps whose transformations may potentially cancel
-f     cannot be simplified to produce a UnitMap (e.g. using AST_SIMPLIFY)
-f     unless they have the same IntraFlag values. The test for equality is
-f     case-sensitive.
-*att--
-*/
-
-/* Clear the IntraFlag value by freeing the allocated memory and
-   assigning a NULL pointer. */
-astMAKE_CLEAR(IntraMap,IntraFlag,intraflag,astFree( this->intraflag ))
-
-/* Return a pointer to the IntraFlag value. */
-astMAKE_GET(IntraMap,IntraFlag,const char *,NULL,this->intraflag)
-
-/* Set a IntraFlag value by freeing any previously allocated memory,
-   allocating new memory, storing the string and saving the pointer to
-   the copy. */
-astMAKE_SET(IntraMap,IntraFlag,const char *,intraflag,astStore(
-                                                      this->intraflag, value,
-                                                      strlen( value ) +
-                                                      (size_t) 1 ))
-
-/* The IntraFlag value is set if the pointer to it is not NULL. */
-astMAKE_TEST(IntraMap,IntraFlag,( this->intraflag != NULL ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for IntraMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for IntraMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstIntraMap *in;              /* Pointer to input IntraMap */
-   AstIntraMap *out;             /* Pointer to output IntraMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output IntraMaps. */
-   in = (AstIntraMap *) objin;
-   out = (AstIntraMap *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output IntraMap. */
-   out->intraflag = NULL;
-
-/* If necessary, allocate memory in the output IntraMap and store a
-   copy of the input IntraFlag string. */
-   if ( in->intraflag ) out->intraflag = astStore( NULL, in->intraflag,
-                                                   strlen( in->intraflag ) +
-                                                   (size_t) 1 );
-
-/* If an error occurred, free any allocated memory. */
-   if ( !astOK ) {
-      out->intraflag = astFree( out->intraflag );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for IntraMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for IntraMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstIntraMap *this;            /* Pointer to IntraMap */
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) obj;
-
-/* Free the memory used for the IntraFlag string if necessary. */
-   this->intraflag = astFree( this->intraflag );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for IntraMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the IntraMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the IntraMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS             /* Pointer to thread-specific global data */
-   AstIntraMap *this;             /* Pointer to the IntraMap structure */
-   const char *sval;              /* Pointer to string value */
-   int set;                       /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the IntraMap structure. */
-   this = (AstIntraMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   IntraMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* Transformation function name. */
-/* ----------------------------- */
-   astWriteString( channel, "Fname", 1, 1, tran_data[ this->ifun ].name,
-                   "Name of transformation function" );
-
-/* IntraFlag string. */
-/* ----------------- */
-   set = TestIntraFlag( this, status );
-   sval = set ? GetIntraFlag( this, status ) : astGetIntraFlag( this );
-   astWriteString( channel, "Iflag", set, 0, sval,
-                   "IntraMap identification string" );
-
-/* Purpose string. */
-/* --------------- */
-   astWriteString( channel, "Purp", 1, 1, tran_data[ this->ifun ].purpose,
-                   "Purpose of function" );
-
-/* Author's name. */
-/* -------------- */
-   astWriteString( channel, "Auth", 1, 1, tran_data[ this->ifun ].author,
-                   "Author's name" );
-
-/* Contact details. */
-/* ---------------- */
-   astWriteString( channel, "Cntact", 1, 1, tran_data[ this->ifun ].contact,
-                   "Contact address" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAIntraMap and astCheckIntraMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(IntraMap,Mapping)
-astMAKE_CHECK(IntraMap)
-
-AstIntraMap *astIntraMap_( const char *name, int nin, int nout,
-                           const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astIntraMap
-f     AST_INTRAMAP
-
-*  Purpose:
-*     Create an IntraMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "intramap.h"
-c     AstIntraMap *astIntraMap( const char *name, int nin, int nout,
-c                               const char *options, ... )
-f     RESULT = AST_INTRAMAP( NAME, NIN, NOUT, OPTIONS, STATUS )
-
-*  Class Membership:
-*     IntraMap constructor.
-
-*  Description:
-*     This function creates a new IntraMap and optionally initialises
-*     its attributes.
-*
-c     An IntraMap is a specialised form of Mapping which encapsulates
-c     a privately-defined coordinate transformation function
-c     (e.g. written in C) so that it may be used like any other AST
-c     Mapping. This allows you to create Mappings that perform any
-c     conceivable coordinate transformation.
-f     An IntraMap is a specialised form of Mapping which encapsulates
-f     a privately-defined coordinate transformation routine
-f     (e.g. written in Fortran) so that it may be used like any other
-f     AST Mapping. This allows you to create Mappings that perform any
-f     conceivable coordinate transformation.
-*
-*     However, an IntraMap is intended for use within a single program
-*     or a private suite of software, where all programs have access
-*     to the same coordinate transformation functions (i.e. can be
-*     linked against them). IntraMaps should not normally be stored in
-*     datasets which may be exported for processing by other software,
-*     since that software will not have the necessary transformation
-*     functions available, resulting in an error.
-*
-c     You must register any coordinate transformation functions to be
-c     used using astIntraReg before creating an IntraMap.
-f     You must register any coordinate transformation functions to be
-f     used using AST_INTRAREG before creating an IntraMap.
-
-*  Parameters:
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing the name of
-c        the transformation function to use (which should previously
-c        have been registered using astIntraReg). This name is case
-c        sensitive. All white space will be removed before use.
-f        A character string containing the name of the transformation
-f        routine to use (which should previously have been registered
-f        using AST_INTRAREG). This name is case sensitive. All white
-f        space will be removed before use.
-c     nin
-f     NIN = INTEGER (Given)
-c        The number of input coordinates. This must be compatible with
-c        the number of input coordinates accepted by the
-c        transformation function (as specified when this function was
-c        registered using astIntraReg).
-f        The number of input coordinates. This must be compatible with
-f        the number of input coordinates accepted by the
-f        transformation routine (as specified when this routine was
-f        registered using AST_INTRAREG).
-c     nout
-f     NOUT = INTEGER (Given)
-c        The number of output coordinates. This must be compatible
-c        with the number of output coordinates produced by the
-c        transformation function (as specified when this function was
-c        registered using astIntraReg).
-f        The number of output coordinates. This must be compatible
-f        with the number of output coordinates produced by the
-f        transformation routine (as specified when this routine was
-f        registered using AST_INTRAREG).
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new IntraMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new IntraMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astIntraMap()
-f     AST_INTRAMAP = INTEGER
-*        A pointer to the new IntraMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstIntraMap *new;             /* Pointer to new IntraMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the IntraMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitIntraMap( NULL, sizeof( AstIntraMap ), !class_init,
-                          &class_vtab, "IntraMap", name, nin, nout );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   IntraMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new IntraMap. */
-   return new;
-}
-
-AstIntraMap *astIntraMapId_( const char *name, int nin, int nout,
-                             const char *options, ... ) {
-/*
-*  Name:
-*     astIntraMapId_
-
-*  Purpose:
-*     Create an IntraMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     AstIntraMap *astIntraMapId_( const char *name, int nin, int nout,
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     IntraMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astIntraMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astIntraMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astIntraMap_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-
-*  Parameters:
-*     As for astIntraMap_.
-
-*  Returned Value:
-*     The ID value associated with the new IntraMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstIntraMap *new;             /* Pointer to new IntraMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the IntraMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitIntraMap( NULL, sizeof( AstIntraMap ), !class_init,
-                          &class_vtab, "IntraMap", name, nin, nout );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   IntraMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new IntraMap. */
-   return astMakeId( new );
-}
-
-
-AstIntraMap *astInitIntraMap_( void *mem, size_t size, int init,
-                               AstIntraMapVtab *vtab, const char *name,
-                               const char *fname, int nin, int nout, int *status ) {
-/*
-*+
-*  Name:
-*     astInitIntraMap
-
-*  Purpose:
-*     Initialise an IntraMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     AstIntraMap *astInitIntraMap( void *mem, size_t size, int init,
-*                                   AstIntraMapVtab *vtab, const char *name,
-*                                   const char *fname, int nin, int nout )
-
-*  Class Membership:
-*     IntraMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new IntraMap object. It allocates memory (if
-*     necessary) to accommodate the IntraMap plus any additional data
-*     associated with the derived class.  It then initialises a
-*     IntraMap structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a IntraMap at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the IntraMap is to be
-*        initialised.  This must be of sufficient size to accommodate
-*        the IntraMap data (sizeof(IntraMap)) plus any data used by
-*        the derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the IntraMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the IntraMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the IntraMap's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new IntraMap.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     fname
-*        Pointer to a null-terminated string containing the name of
-*        the transformation function to be used, as previously
-*        registered using astIntraReg.
-*     nin
-*        The number of input coordinates.
-*     nout
-*        The number of output coordinates. 
-
-*  Returned Value:
-*     A pointer to the new IntraMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS             /* Pointer to thread-specific global data */
-   AstIntraMap *new;              /* Pointer to new IntraMap */
-   char *clname;                  /* Cleaned transformation function name */
-   int found;                     /* Transformation function name found? */
-   int ifun;                      /* Loop counter for registered functions */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   found = 0;
-   ifun = 0;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitIntraMapVtab( vtab, name );
-
-/* Clean (and validate) the transformation function name supplied. */
-   clname = CleanName( fname, "astIntraMap", status );
-
-/* Search for a registered transformation function name which matches. */
-   if ( astOK ) {
-      found = 0;
-      for ( ifun = 0; ifun < tran_nfun; ifun++ ) {
-         if ( ( found = !strcmp( clname, tran_data[ ifun ].name ) ) ) break;
-      }
-   }
-
-/* Free the memory containing the cleaned name string. */
-   clname = astFree( clname );
-
-/* If no match was found, then report an error. */
-   if ( astOK ) {
-      if ( !found ) {
-         astError( AST__URITF, "astInitIntraMap(%s): The transformation "
-                               "function \"%s\" has not been registered using "
-                               "astIntraReg.", status, name, clname );
-
-/* Check that the number of input coordinates is compatible with the
-   number used by the transformation function (as specified when it
-   was registered). Report an error if necessary. */
-      } else {
-         if ( ( nin != tran_data[ ifun ].nin ) &&
-              ( tran_data[ ifun ].nin != AST__ANY ) ) {
-            astError( AST__BADNI, "astInitIntraMap(%s): Number of input "
-                                  "coordinates (%d) does not match the number "
-                                  "used by the \"%s\" transformation function "
-                                  "(%d).", status, name, nin, tran_data[ ifun ].name,
-                                  tran_data[ ifun ].nin  );
-            
-/* Similarly check the number of output coordinates. */
-         } else if ( ( nout != tran_data[ ifun ].nout ) &&
-                     ( tran_data[ ifun ].nout != AST__ANY ) ) {
-            astError( AST__BADNO, "astInitIntraMap(%s): Number of output "
-                                  "coordinates (%d) does not match the number "
-                                  "used by the \"%s\" transformation function "
-                                  "(%d).", status, name, nout, tran_data[ ifun ].name,
-                                  tran_data[ ifun ].nout  );
-
-/* If OK, initialise a Mapping structure (the parent class) as the
-   first component within the IntraMap structure, allocating memory if
-   necessary (note that this also provides further checks on the
-   validity of "nin" and "nout"). Specify whether the forward and
-   inverse transformations are defined. */
-         } else {
-            new = (AstIntraMap *) astInitMapping( mem, size, 0,
-                     (AstMappingVtab *) vtab, name, nin, nout,
-                     ( ( tran_data[ ifun ].flags & AST__NOFWD ) == 0 ),
-                     ( ( tran_data[ ifun ].flags & AST__NOINV ) == 0 ) );
-
-            if ( astOK ) {
-
-/* Initialise the IntraMap data. */
-/* ---------------------------- */
-/* Initialise the IntraFlag string pointer. */
-               new->intraflag = NULL;
-
-/* Store the index used to access the transformation function data. */
-               new->ifun = ifun;
-
-/* If an error occurred, clean up by deleting the new IntraMap. */
-               if ( !astOK ) new = astDelete( new );
-            }
-         }
-      }
-   }
-
-/* Return a pointer to the new IntraMap. */
-   return new;
-}
-
-AstIntraMap *astLoadIntraMap_( void *mem, size_t size,
-                               AstIntraMapVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadIntraMap
-
-*  Purpose:
-*     Load an IntraMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "intramap.h"
-*     AstIntraMap *astLoadIntraMap( void *mem, size_t size,
-*                                    AstIntraMapVtab *vtab, const char *name,
-*                                    AstChannel *channel )
-
-*  Class Membership:
-*     IntraMap loader.
-
-*  Description:
-*     This function is provided to load a new IntraMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     IntraMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for an IntraMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the IntraMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        IntraMap data (sizeof(IntraMap)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the IntraMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the IntraMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstIntraMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new IntraMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the IntraMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "IntraMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new IntraMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS             /* Pointer to thread-specific global data */
-   AstIntraMap *new;              /* Pointer to the new IntraMap */
-   char *author;                  /* Pointer to author's name string */
-   char *contact;                 /* Pointer to contact details string */
-   char *fname;                   /* Pointer to transformation function name */
-   char *purpose;                 /* Pointer to purpose comment string */
-   int found;                     /* Function name found? */
-   int ifun;                      /* Loop counter for registered functions */
-   int nin;                       /* Number of IntraMap input coordinates */
-   int nout;                      /* Number of IntraMap output coordinates */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this IntraMap. In this case the
-   IntraMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstIntraMap );
-      vtab = &class_vtab;
-      name = "IntraMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitIntraMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built IntraMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "IntraMap" );
-
-/* Now read each individual data item from this list. */
-
-/* Transformation function name. */
-/* ----------------------------- */
-      fname = astReadString( channel, "fname", "" );
-
-/* IntraFlag string. */
-/* ----------------- */
-      new->intraflag = astReadString( channel, "iflag", NULL );
-
-/* Purpose string. */
-/* --------------- */
-      purpose = astReadString( channel, "purp", "" );
-
-/* Author's name. */
-/* -------------- */
-      author = astReadString( channel, "auth", "" );
-
-/* Contact details. */
-/* ---------------- */
-      contact = astReadString( channel, "cntact", "" );
-
-/* If OK, search the array of transformation function data to see if
-   the required transformation function has been registered. */
-      if ( astOK ) {
-         found = 0;
-         for ( ifun = 0; ifun < tran_nfun; ifun++ ) {
-            if ( ( found = !strcmp( fname, tran_data[ ifun ].name ) ) ) break;
-         }
-
-/* If the transformation function has not been registered, report an
-   error explaining how to obtain it from the author and register
-   it. */
-         if ( !found ) {
-            astError( AST__URITF, "astLoadIntraMap(%s): An IntraMap was read "
-                                  "which uses an unknown transformation "
-                                  "function.", status, astGetClass( channel ) );
-            astError( AST__URITF, "This is a private extension to the AST "
-                                  "library: to handle it, you must obtain the "
-                                  "source code from its author." , status);
-            astError( AST__URITF, "You can then register it with AST in your "
-                                  "software by calling astIntraReg (see "
-                                  "SUN/211)." , status);
-            astError( AST__URITF, " " , status);
-            astError( AST__URITF, "   Function name:   \"%s\".", status, fname );
-            astError( AST__URITF, "   Purpose:         \"%s\".", status, purpose );
-            astError( AST__URITF, "   Author:          \"%s\".", status, author );
-            astError( AST__URITF, "   Contact address: \"%s\".", status, contact );
-            astError( AST__URITF, " " , status);
-
-/* Obtain the numbers of input and output coordinates for the
-   IntraMap. Use parent methods for this, since if any derived class
-   has overridden these methods it may depend on data that have not
-   yet been loaded. */
-         } else {
-            nin = ( *parent_getnin )( (AstMapping *) new, status );
-            nout = ( *parent_getnout )( (AstMapping *) new, status );
-            if ( astOK ) {
-
-/* Check that the numbers of coordinates are compatible with the
-   numbers used by the transformation function, as specified when it
-   was registered. */
-               if ( ( nin != tran_data[ ifun ].nin ) &&
-                    ( tran_data[ ifun ].nin != AST__ANY ) ) {
-                  astError( AST__BADNI, "astLoadIntraMap(%s): The number of "
-                                        "input coordinates for the IntraMap "
-                                        "read (%d) does not match the number "
-                                        "used by the registered \"%s\" "
-                                        "transformation function (%d).", status,
-                                        astGetClass( channel ), nin,
-                                        tran_data[ ifun ].name,
-                                        tran_data[ ifun ].nin  );
-               } else if ( ( nout != tran_data[ ifun ].nout ) &&
-                           ( tran_data[ ifun ].nout != AST__ANY ) ) {
-                  astError( AST__BADNO, "astLoadIntraMap(%s): The number of "
-                                        "output coordinates for the IntraMap "
-                                        "read (%d) does not match the number "
-                                        "used by the registered \"%s\" "
-                                        "transformation function (%d).", status,
-                                        astGetClass( channel ), nout,
-                                        tran_data[ ifun ].name,
-                                        tran_data[ ifun ].nout  );
-
-/* If OK, store the index used to access the transformation function
-   data. */
-               } else {
-                  new->ifun = ifun;
-               }
-            }
-         }
-      }
-
-/* Free strings allocated by astReadString. */
-      fname = astFree( fname );
-      purpose = astFree( purpose );
-      author = astFree( author );
-      contact = astFree( contact );
-
-/* If an error occurred, clean up by deleting the new IntraMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new IntraMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/intramap.h b/ast-5.3-1/intramap.h
deleted file mode 100644
index 29f2186..0000000
--- a/ast-5.3-1/intramap.h
+++ /dev/null
@@ -1,344 +0,0 @@
-#if !defined( INTRAMAP_INCLUDED ) /* Include this file only once */
-#define INTRAMAP_INCLUDED
-/*
-*+
-*  Name:
-*     intramap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the IntraMap class.
-
-*  Invocation:
-*     #include "intramap.h"
-
-*  Description:
-*     This include file defines the interface to the IntraMap class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-*
-*     The IntraMap class implements Mappings which transform
-*     coordinates using a privately-defined transformation function
-*     (e.g. written in C).
-
-*  Inheritance:
-*     The IntraMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     IntraFlag
-*        IntraMap identification string.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Simplify a sequence of Mappings containing an IntraMap.
-*        astTransform
-*           Transform a set of points using an IntraMap.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearIntraFlag
-*           Clear the IntraFlag attribute for an IntraMap.
-*        astGetIntraFlag
-*           Get the value of the IntraFlag attribute for an IntraMap.
-*        astSetIntraFlag
-*           Set the value of the IntraFlag attribute for an IntraMap.
-*        astTestIntraFlag
-*           Test whether a value has been set for the IntraFlag attribute of
-*           an IntraMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIntraMap
-*           Create an IntraMap.
-*        astIntraReg
-*           Register a transformation function for use by an IntraMap.
-*        astIsAIntraMap
-*           Test class membership.
-*
-*     Protected:
-*        astCheckIntraMap
-*           Validate class membership.
-*        astInitIntraMap
-*           Initialise an IntraMap.
-*        astLoadIntraMap
-*           Load an IntraMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstIntraMap
-*           IntraMap object type.
-*
-*     Protected:
-*        AstIntraMapVtab
-*           IntraMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     24-MAR-1998 (RFWS):
-*        Original version.
-*     16-SEP-1999 (RFWS):
-*        Added the IntraFlag attribute and added a Mapping pointer as a new
-*        first argument to transformation functions.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitIntraMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macro Definitions. */
-/* ================== */
-#define AST__NOFWD (1U)          /* No forward transformation defined */
-#define AST__NOINV (2U)          /* No inverse transformation defined */
-#define AST__SIMPFI (4U)         /* Forward-inverse may be simplified */
-#define AST__SIMPIF (8U)         /* Inverse-forward may be simplified */
-
-#define AST__ANY (-66)           /* Allow any number of input/output coords */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* IntraMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstIntraMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   char *intraflag;              /* Pointer to identification string */
-   int ifun;                     /* Transformation function index */
-} AstIntraMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstIntraMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   const char *(* GetIntraFlag)( AstIntraMap *, int * );
-   int (* TestIntraFlag)( AstIntraMap *, int * );
-   void (* ClearIntraFlag)( AstIntraMap *, int * );
-   void (* SetIntraFlag)( AstIntraMap *, const char *, int * );
-} AstIntraMapVtab;
-
-
-/* Structure to hold data for transformation functions. */
-typedef struct AstIntraMapTranData {
-   void (* tran)( AstMapping *, int, int, const double *[], int, int, double *[] );
-                                 /* Pointer to transformation function */
-   void (* tran_wrap)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), AstMapping *, int, int, const double *[], int, int, double *[], int * );
-                                 /* Pointer to wrapper function */
-   char *author;                 /* Author's name */
-   char *contact;                /* Contact details (e.g. e-mail address) */
-   char *name;                   /* Function name (assigned by caller) */
-   char *purpose;                /* Comment string describing purpose */
-   int nin;                      /* Number of input coordinates per point */
-   int nout;                     /* Number of output coordinates per point */
-   unsigned int flags;           /* Flags to describe function behaviour */
-} AstIntraMapTranData;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstIntraMapGlobals {
-   AstIntraMapVtab Class_Vtab;
-   int Class_Init;
-} AstIntraMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(IntraMap)          /* Check class membership */
-astPROTO_ISA(IntraMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstIntraMap *astIntraMap_( const char *, int, int, const char *, int *, ...);
-#else
-AstIntraMap *astIntraMapId_( const char *, int, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstIntraMap *astInitIntraMap_( void *, size_t, int, AstIntraMapVtab *,
-                               const char *, const char *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitIntraMapVtab_( AstIntraMapVtab *, const char *, int * );
-
-/* Loader. */
-AstIntraMap *astLoadIntraMap_( void *, size_t, AstIntraMapVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitIntraMapGlobals_( AstIntraMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astIntraReg_( const char *, int, int, void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), unsigned int, const char *, const char *, const char *, int * );
-
-#if defined(astCLASS)            /* Protected */
-const char *astGetIntraFlag_( AstIntraMap *, int * );
-int astTestIntraFlag_( AstIntraMap *, int * );
-void astClearIntraFlag_( AstIntraMap *, int * );
-void astSetIntraFlag_( AstIntraMap *, const char *, int * );
-
-#else                            /* Public only */
-void astIntraRegFor_( const char *, int, int, void (*)( AstMapping *, int, int, const double *[], int, int, double *[] ), void (*)( void (*)( AstMapping *, int, int, const double *[], int, int, double *[]), AstMapping *, int, int, const double *[], int, int, double *[], int * ), unsigned int, const char *, const char *, const char *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckIntraMap(this) astINVOKE_CHECK(IntraMap,this,0)
-#define astVerifyIntraMap(this) astINVOKE_CHECK(IntraMap,this,1)
-
-/* Test class membership. */
-#define astIsAIntraMap(this) astINVOKE_ISA(IntraMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astIntraMap astINVOKE(F,astIntraMap_)
-#else
-#define astIntraMap astINVOKE(F,astIntraMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitIntraMap(mem,size,init,vtab,name,fname,nin,nout) \
-astINVOKE(O,astInitIntraMap_(mem,size,init,vtab,name,fname,nin,nout,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitIntraMapVtab(vtab,name) astINVOKE(V,astInitIntraMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadIntraMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadIntraMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckIntraMap to validate IntraMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astIntraReg(name,nin,nout,tran,flags,purpose,author,contact) \
-astIntraReg_(name,nin,nout,tran,flags,purpose,author,contact,STATUS_PTR)
-
-#if defined(astCLASS)            /* Protected */
-#define astClearIntraFlag(this) \
-astINVOKE(V,astClearIntraFlag_(astCheckIntraMap(this),STATUS_PTR))
-#define astGetIntraFlag(this) \
-astINVOKE(V,astGetIntraFlag_(astCheckIntraMap(this),STATUS_PTR))
-#define astSetIntraFlag(this,value) \
-astINVOKE(V,astSetIntraFlag_(astCheckIntraMap(this),value,STATUS_PTR))
-#define astTestIntraFlag(this) \
-astINVOKE(V,astTestIntraFlag_(astCheckIntraMap(this),STATUS_PTR))
-
-#else                            /* Public only */
-#define astIntraRegFor(name,nin,nout,tran,tran_wrap,flags,purpose,author,contact) \
-astIntraRegFor_(name,nin,nout,tran,tran_wrap,flags,purpose,author,contact,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/keymap.c b/ast-5.3-1/keymap.c
deleted file mode 100644
index d369afd..0000000
--- a/ast-5.3-1/keymap.c
+++ /dev/null
@@ -1,6914 +0,0 @@
-/*
-*class++
-*  Name:
-*     KeyMap
-
-*  Purpose:
-*     Store a set of key/value pairs.
-
-*  Constructor Function:
-c     astKeyMap
-f     AST_KEYMAP
-
-*  Description:
-*     The KeyMap class is used to store a set of values with associated keys 
-*     which identify the values. The keys are strings (case-sensitive,
-*     trailing spaces are ignored), and the data type of the values can be 
-*     integer, floating point, 
-c     void pointer, 
-*     character string or AST Object pointer. Each 
-*     value can be a scalar or a one-dimensional vector. A KeyMap is
-*     conceptually similar to a Mapping in that a KeyMap transforms an
-*     input into an output - the input is the key, and the output is the
-*     value associated with the key. However, this is only a conceptual
-*     similarity, and it should be noted that the KeyMap class inherits from 
-*     the Object class rather than the Mapping class. The methods of the
-*     Mapping class cannot be used with a KeyMap.
-
-*  Inheritance:
-*     The KeyMap class inherits from the Object class.
-
-*  Attributes:
-*     In addition to those attributes common to all Objects, every
-*     KeyMap also has the following attributes:
-*
-*     - KeyError: Report an error if the requested key does not exist?
-*     - SizeGuess: The expected size of the KeyMap.
-
-*  Functions:
-c     In addition to those functions applicable to all Objects, the
-c     following functions may also be applied to all KeyMaps:
-f     In addition to those routines applicable to all Objects, the
-f     following routines may also be applied to all KeyMaps:
-*
-c     - astMapGet0<X>: Get a named scalar entry from a KeyMap
-c     - astMapGet1<X>: Get a named vector entry from a KeyMap
-c     - astMapGetElem<X>: Get an element of a named vector entry from a KeyMap
-c     - astMapHasKey: Does the KeyMap contain a named entry?
-c     - astMapKey: Return the key name at a given index in the KeyMap
-c     - astMapLenC: Get the length of a named character entry in a KeyMap
-c     - astMapLength: Get the length of a named entry in a KeyMap
-c     - astMapPut0<X>: Add a new scalar entry to a KeyMap
-c     - astMapPut1<X>: Add a new vector entry to a KeyMap
-c     - astMapRemove: Removed a named entry from a KeyMap
-c     - astMapSize: Get the number of entries in a KeyMap
-c     - astMapType: Return the data type of a named entry in a map.
-f     - AST_MAPGET0<X>: Get a named scalar entry from a KeyMap
-f     - AST_MAPGET1<X>: Get a named vector entry from a KeyMap
-f     - AST_MAPGETELEM<X>: Get an element of a named vector entry from a KeyMap
-f     - AST_MAPHASKEY: Does the KeyMap contain a named entry?
-f     - AST_MAPKEY: Return the key name at a given index in the KeyMap
-f     - AST_MAPLENC: Get the length of a named character entry in a KeyMap
-f     - AST_MAPLENGTH: Get the length of a named entry in a KeyMap
-f     - AST_MAPPUT0<X>: Add a new scalar entry to a KeyMap
-f     - AST_MAPPUT1<X>: Add a new vector entry to a KeyMap
-f     - AST_MAPREMOVE: Removed a named entry from a KeyMap
-f     - AST_MAPSIZE: Get the number of entries in a KeyMap
-f     - AST_MAPTYPE: Return the data type of a named entry in a map.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: B.S. Berry (Starlink)
-
-*  History:
-*     12-NOV-2004 (DSB):
-*        Original version.
-*     5-JAN-2005 (DSB):
-*        Added astMapLenC method.
-*     17-JAN-2005 (DSB):
-*        Remove "void *" arithmetic.
-*     25-JAN-2005 (DSB):
-*        Added more DEBUG blocks
-*     30-SEP-2005 (DSB):
-*        Allow an integer to be read from a formatted floating point value.
-*     6-DEC-2005 (DSB):
-*        Remove astMapGet0C stuff from description of astMapGet1C.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     5-JUN-2006 (DSB):
-*        Added support for single precision entries.
-*     30-NOV-2007 (DSB):
-*        Added SizeGuess attribute.
-*     4-DEC-2007 (DSB):
-*        Allow size of hash table to grow dynamically as more entries are
-*        added to the KeyMap.
-*     5-DEC-2007 (DSB):
-*        Ensure mapsize is always a power of 2.
-*     6-DEC-2007 (DSB):
-*        - Define the minium table size rather than the default SizeGuess
-*        value, and derive the default SizeGuess value from the minimum
-*        table size.
-*        - Use "&" rather than "%" to get the hash table index from the
-*        full width hash value (& may be faster than %).
-*     7-MAR-2008 (DSB):
-*         Added support for pointer ("P") entries.
-*     31-MAR-2009 (DSB):
-*         Remove rounding errors from formatted double values.
-*     27-APR-2009 (DSB):
-*         Added astMapGetElem<X>.
-*     1-SEP-2009 (DSB):
-*         Added KeyError attribute.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS KeyMap
-
-/* Minimum size for the hash table. */
-#define MIN_TABLE_SIZE 16
-
-/* The maximum number of entries per element of the hash table. If this
-   value is exceeded the hash table will be doubled in size. */
-#define MAX_ENTRIES_PER_TABLE_ENTRY 10
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* For AST__BAD */
-#include "channel.h"             /* I/O channels */
-#include "keymap.h"              /* Interface definition for this class */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Type Definitions */
-/* ================ */
-
-/* This structure is a AstMapEntry holding a scalar int */
-typedef struct Entry0I {
-   struct AstMapEntry entry; /* The parent Entry information */
-   int value;                /* The integer value */
-} Entry0I;
-
-/* This structure is a AstMapEntry holding a scalar double */
-typedef struct Entry0D {
-   struct AstMapEntry entry; /* The parent Entry information */
-   double value;             /* The floating point value */
-} Entry0D;
-
-/* This structure is a AstMapEntry holding a scalar float */
-typedef struct Entry0F {
-   struct AstMapEntry entry; /* The parent Entry information */
-   float value;              /* The floating point value */
-} Entry0F;
-
-/* This structure is a AstMapEntry holding a scalar string */
-typedef struct Entry0C {
-   struct AstMapEntry entry; /* The parent Entry information */
-   const char *value;        /* The string pointer */
-} Entry0C;
-
-/* This structure is a AstMapEntry holding a scalar AST Object */
-typedef struct Entry0A {
-   struct AstMapEntry entry; /* The parent Entry information */
-   AstObject *value;         /* The Object pointer */
-} Entry0A;
-
-/* This structure is a AstMapEntry holding a scalar void pointer */
-typedef struct Entry0P {
-   struct AstMapEntry entry; /* The parent Entry information */
-   void *value;              /* The pointer */
-} Entry0P;
-
-/* This structure is a AstMapEntry holding a 1D array of ints */
-typedef struct Entry1I {
-   struct AstMapEntry entry; /* The parent Entry information */
-   int *value;               /* The integer values */
-} Entry1I;
-
-/* This structure is a AstMapEntry holding a 1D array of doubles */
-typedef struct Entry1D {
-   struct AstMapEntry entry; /* The parent Entry information */
-   double *value;            /* The floating point values */
-} Entry1D;
-
-/* This structure is a AstMapEntry holding a 1D array of floats */
-typedef struct Entry1F {
-   struct AstMapEntry entry; /* The parent Entry information */
-   float *value;             /* The floating point values */
-} Entry1F;
-
-/* This structure is a AstMapEntry holding a 1D array of strings */
-typedef struct Entry1C {
-   struct AstMapEntry entry; /* The parent Entry information */
-   const char **value;       /* The string pointers */
-} Entry1C;
-
-/* This structure is a AstMapEntry holding a 1D array of AST Objects */
-typedef struct Entry1A {
-   struct AstMapEntry entry; /* The parent Entry information */
-   AstObject **value;        /* The Object pointers */
-} Entry1A;
-
-/* This structure is a AstMapEntry holding a 1D array of void pointers. */
-typedef struct Entry1P {
-   struct AstMapEntry entry; /* The parent Entry information */
-   void **value;             /* The pointers */
-} Entry1P;
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->ConvertValue_Init = 0; \
-   globals->ConvertValue_Istr = 0; \
-   globals->ConvertValue_Buff[ 0 ] = 0; \
-   globals->MapKey_Init = 0; \
-   globals->MapKey_Istr = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(KeyMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(KeyMap,Class_Init)
-#define class_vtab astGLOBAL(KeyMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(KeyMap,GetAttrib_Buff)
-#define convertvalue_strings astGLOBAL(KeyMap,ConvertValue_Strings)
-#define convertvalue_istr astGLOBAL(KeyMap,ConvertValue_Istr)
-#define convertvalue_init astGLOBAL(KeyMap,ConvertValue_Init)
-#define convertvalue_buff astGLOBAL(KeyMap,ConvertValue_Buff)
-#define mapkey_strings astGLOBAL(KeyMap,MapKey_Strings)
-#define mapkey_istr astGLOBAL(KeyMap,MapKey_Istr)
-#define mapkey_init astGLOBAL(KeyMap,MapKey_Init)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */ \
-static char getattrib_buff[ AST__KEYMAP_GETATTRIB_BUFF_LEN + 1 ];
-
-/* Strings returned by ConvertValue */ \
-static char *convertvalue_strings[ AST__KEYMAP_CONVERTVALUE_MAX_STRINGS ];
-
-/* Offset of next string in "ConvertValue_Strings" */ \
-static int convertvalue_istr;
-
-/* "ConvertValue_Strings" array initialised? */ \
-static int convertvalue_init;
-
-/* ConvertValue string buffer */ \
-static char convertvalue_buff[ AST__KEYMAP_CONVERTVALUE_BUFF_LEN + 1 ]; 
-
-/* Strings returned by MapKey */ \
-static char *mapkey_strings[ AST__KEYMAP_MAPKEY_MAX_STRINGS ];
-
-/* Offset of next string in "MapKey_Strings" */ \
-static int mapkey_istr;
-
-/* "MapKey_Strings" array initialised? */ \
-static int mapkey_init;
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstKeyMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstKeyMap *astKeyMapId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapEntry *AddTableEntry( AstKeyMap *, int, AstMapEntry *, int * );
-static AstMapEntry *CopyMapEntry( AstMapEntry *, int * );
-static AstMapEntry *FreeMapEntry( AstMapEntry *, int * );
-static AstMapEntry *SearchTableEntry( AstKeyMap *, int, const char *, int * );
-static const char *GetKey( AstKeyMap *, int index, int * );
-static const char *MapKey( AstKeyMap *, int index, int * );
-static int ConvertValue( void *, int, void *, int, int * );
-static int GetObjSize( AstObject *, int * );
-static int HashFun( const char *, int, unsigned long *, int * );
-static int KeyCmp( const char *, const char *, int * );
-static int MapGet0P( AstKeyMap *, const char *, void **, int * );
-static int MapGet0A( AstKeyMap *, const char *, AstObject **, int * );
-static int MapGet0C( AstKeyMap *, const char *, const char **, int * );
-static int MapGet0D( AstKeyMap *, const char *, double *, int * );
-static int MapGet0F( AstKeyMap *, const char *, float *, int * );
-static int MapGet0I( AstKeyMap *, const char *, int *, int * );
-static int MapGet1A( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-static int MapGet1P( AstKeyMap *, const char *, int, int *, void **, int * );
-static int MapGet1C( AstKeyMap *, const char *, int, int, int *, char *, int * );
-static int MapGet1D( AstKeyMap *, const char *, int, int *, double *, int * );
-static int MapGet1F( AstKeyMap *, const char *, int, int *, float *, int * );
-static int MapGet1I( AstKeyMap *, const char *, int, int *, int *, int * );
-static int MapGetElemA( AstKeyMap *, const char *, int, AstObject **, int * );
-static int MapGetElemP( AstKeyMap *, const char *, int, void **, int * );
-static int MapGetElemC( AstKeyMap *, const char *, int, int, char *, int * );
-static int MapGetElemD( AstKeyMap *, const char *, int, double *, int * );
-static int MapGetElemF( AstKeyMap *, const char *, int, float *, int * );
-static int MapGetElemI( AstKeyMap *, const char *, int, int *, int * );
-static int MapHasKey( AstKeyMap *, const char *, int * );
-static int MapLenC( AstKeyMap *, const char *, int * );
-static int MapLength( AstKeyMap *, const char *, int * );
-static int MapSize( AstKeyMap *, int * );
-static int MapType( AstKeyMap *, const char *, int * );
-static size_t SizeOfEntry( AstMapEntry *, int * );
-static void CheckCircle( AstKeyMap *, AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CopyTableEntry( AstKeyMap *, AstKeyMap *, int, int * );
-static void Delete( AstObject *, int * );
-static void DoubleTableSize( AstKeyMap *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void DumpEntry( AstMapEntry *, AstChannel *, int, int * );
-static void FreeTableEntry( AstKeyMap *, int itab, int * );
-static void MapPut0A( AstKeyMap *, const char *, AstObject *, const char *, int * );
-static void MapPut0P( AstKeyMap *, const char *, void *, const char *, int * );
-static void MapPut0C( AstKeyMap *, const char *, const char *, const char *, int * );
-static void MapPut0D( AstKeyMap *, const char *, double, const char *, int * );
-static void MapPut0F( AstKeyMap *, const char *, float, const char *, int * );
-static void MapPut0I( AstKeyMap *, const char *, int, const char *, int * );
-static void MapPut1P( AstKeyMap *, const char *, int, void *const [], const char *, int * );
-static void MapPut1A( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-static void MapPut1C( AstKeyMap *, const char *, int, const char *const [], const char *, int * );
-static void MapPut1D( AstKeyMap *, const char *, int, const double *, const char *, int * );
-static void MapPut1F( AstKeyMap *, const char *, int, const float *, const char *, int * );
-static void MapPut1I( AstKeyMap *, const char *, int, const int *, const char *, int * );
-static void MapRemove( AstKeyMap *, const char *, int * );
-static void NewTable( AstKeyMap *, int, int * );
-static void RemoveTableEntry( AstKeyMap *, int, const char *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static int GetSizeGuess( AstKeyMap *, int * );
-static int TestSizeGuess( AstKeyMap *, int * );
-static void ClearSizeGuess( AstKeyMap *, int * );
-static void SetSizeGuess( AstKeyMap *, int, int * );
-
-static int GetKeyError( AstKeyMap *, int * );
-static int TestKeyError( AstKeyMap *, int * );
-static void ClearKeyError( AstKeyMap *, int * );
-static void SetKeyError( AstKeyMap *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static AstMapEntry *AddTableEntry( AstKeyMap *this, int itab, AstMapEntry *entry, int *status ){
-/*
-*  Name:
-*     AddTableEntry
-
-*  Purpose:
-*     Add an new entry to a linked-list of KeyMap entries.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstMapEntry *AddTableEntry( AstKeyMap *this, int itab, AstMapEntry *entry, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function adds the supplied MapEntry to the head of the linked
-*     list of MapEntries stored at the specified entry of the hash table. 
-*     If this results in the linked list having too many entries, then a
-*     new larger hash table is allocated and the entries in the existing 
-*     table are moved into the new table.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     itab
-*        Index of the hash table element to be searched.
-*     entry 
-*        Pointer to the MapEntry to be added.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A NULL pointer.
-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Put a pointer to the MapEntry which is currently at the head of the 
-   linked list in the "next" component of the supplied MapEntry. */
-   entry->next = this->table[ itab ];
-
-/* Store the supplied MapEntry pointer in the requested element of the
-   hash table. */
-   this->table[ itab ] = entry;
-
-/* Increment the length of linked list. */
-   this->nentry[ itab ]++;
-
-/* If the population of this table entry is now too large, duble the size
-   of the table, moving the table entries to appropriate places in the
-   new larger table. */
-   if( this->nentry[ itab ] > MAX_ENTRIES_PER_TABLE_ENTRY ) {
-      DoubleTableSize( this, status );
-   }
-
-/* Return a NULL pointer. */
-   return NULL;
-}
-
-static void CheckCircle( AstKeyMap *this, AstObject *obj, const char *method, int *status ) {
-/*
-*  Name:
-*     CheckCircle
-
-*  Purpose:
-*     Check for circular dependencies between KeyMaps.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void CheckCircle( AstKeyMap *this, AstObject *obj, const char *method, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function checks that the given AstObject is not a KeyMap which
-*     contains "this". If it is, an error is reported.
-
-*  Parameters:
-*     this
-*        The KeyMap pointer.
-*     obj
-*        Pointer to the AstObject to be inserted into the KeyMap, or NULL.
-*     method
-*        Name of method to include in error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *keymap;       /* The KeyMap being added to "this" */
-   AstObject **vec;         /* Pointer to list of AstObject pointers */
-   const char *key;         /* The i'th key within second KeyMap */
-   int i;                   /* Index of entry within second KeyMap */
-   int j;                   /* Index within the vector of values */
-   int len;                 /* No. of AST pointers stored in the entry */
-   int nkey;                /* No. of entries in the second KeyMap */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Return if the AstObject is not a KeyMap. */
-   if( obj && astIsAKeyMap( obj ) ) {
-      keymap = (AstKeyMap *) obj;
-
-/* Loop through all the entries in the KeyMap looking for AstObject
-   entries. */
-      nkey = astMapSize( keymap );
-      for( i = 0; i < nkey && astOK; i++ ) {
-         key = astMapKey( keymap, i );
-         if( astMapType( keymap, key ) == AST__OBJECTTYPE ) {
-
-/* Find the number of AstObject pointers stored in this entry, and
-   allocate memory to store a copy of the every pointer. */
-            len = astMapLength( keymap, key );
-            vec = astMalloc( sizeof( AstObject *) * len );
-            if( vec ) {
-
-/* Extract pointers to the AstObjects at this entry, and loop round them. */
-               astMapGet1A( keymap, key, len, &len, vec );
-               for( j = 0; j < len; j++ ) {
-
-/* If this entry is a KeyMap, we need to check if is the same as "this"
-   or contains "this". */
-                  if( astIsAKeyMap( vec[ j ] ) ) {
-
-/* If it is the same as "this", report an error. */
-                     if( vec[ j ] == (AstObject *) this ) {
-                        astError( AST__KYCIR, "%s(%s): Cannot add a KeyMap "
-                                  "into another KeyMap because the first "
-                                  "KeyMap contains the second KeyMap.", status,
-                                  method, astGetClass( this ) );
-                        break;
-
-/* Otherwise, see if it contains "this". */
-                     } else {
-                        CheckCircle( this, vec[ j ], method, status );
-                     }
-                  }
-
-/* Free resources. */
-                  vec[ j ] = astAnnul( vec[ j ] );
-               }
-               vec = astFree( vec );
-            }
-         }
-      }
-   }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     KeyMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     KeyMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;             /* Pointer to the KeyMap structure */
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* SizeGuess. */
-/* ---------- */
-   if ( !strcmp( attrib, "sizeguess" ) ) {
-      astClearSizeGuess( this );
-
-/* KeyError. */
-/* --------- */
-   } else if ( !strcmp( attrib, "keyerror" ) ) {
-      astClearKeyError( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearSizeGuess( AstKeyMap *this, int *status ) {
-/*
-*+
-*  Name:
-*     astClearSizeGuess
-
-*  Purpose:
-*     Clear the value of the SizeGuess attribute for a KeyMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void astClearSizeGuess( AstKeyMap *this )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function clears the value of the SizeGuess attribute for a
-*     KeyMap. It reports an error if the KeyMap contains any entries.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-
-*-
-*/
-
-/* Local Variables: */
-   int empty;                 /* Is the KeyMap empty? */
-   int itab;                  /* Index into hash table */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* See if the KeyMap is empty. */
-   empty = 1;
-   for( itab = 0; itab < this->mapsize; itab++ ) {
-      if( this->nentry[ itab ] > 0 ) {
-         empty = 0;
-         break;
-      }
-   }
-
-/* If not report an error. */
-   if( !empty ) {
-      astError( AST__NOWRT, "astClearAttrib(KeyMap): Illegal attempt to "
-                "clear the SizeGuess attribute of a non-empty KeyMap." , status);
-
-/* Otherwise, store the "cleared" value and change the size of the hash
-   table. */
-   } else {
-      this->sizeguess = INT_MAX;
-      NewTable( this, MIN_TABLE_SIZE, status );
-   }
-}
-
-static int ConvertValue( void *raw, int raw_type, void *out, int out_type, int *status ) {
-/*
-*  Name:
-*     ConvertValue
-
-*  Purpose:
-*     Convert a value from one KeyMap data type to another.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int ConvertValue( void *raw, int raw_type, void *out, int out_type, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function converts a supplied value from one KeyMap data type to
-*     another, if possible.
-
-*  Parameters:
-*     raw
-*        Pointer to input value.
-*     raw_type
-*        The data type of the input value.
-*     out
-*        Pointer to the location at which to store the output value. This
-*        may be NULL, in which case the conversion is still performed if
-*        possible, but the result of the conversion is thrown away.
-*     out_type
-*        The data type of the output value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the conversion was performed succesfully, otherwise zero.
-*     In the case of the output type being AST__STRINGTYPE, the returned
-*     non-zero value will be the length of the formatted string (not including 
-*     the terminating null character). This value will be returned correctly 
-*     even if "out" is NULL.
-
-*  Notes:
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstObject *aval;              /* AstObject pointer value */
-   const char *cval;             /* Pointer to string value */ 
-   const char *cvalue;           /* Pointer to output string value */ 
-   double dval;                  /* Double precision value */ 
-   float fval;                   /* Single precision value */ 
-   int ival;                     /* Integer value */ 
-   int i;                        /* Loop count */
-   int n1;                       /* Number of characters at reduced precision */ 
-   int n2;                       /* Number of characters at full precision */ 
-   int nc;                       /* Number of characters read from string */ 
-   int nval;                     /* Number of values read from string */ 
-   int result;                   /* Returned flag */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status and the supplied pointers. */
-   if( !astOK || !raw ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* If the "convertvalue_strings" array has not been initialised, fill it with
-   NULL pointers. */
-   if( !convertvalue_init ) {
-      convertvalue_init = 1;
-      for( i = 0; i < AST__KEYMAP_CONVERTVALUE_MAX_STRINGS; i++ ) convertvalue_strings[ i ] = NULL;
-   }
-
-/* Assume conversion is possible */
-   result = 1;
-   cvalue = NULL;
-
-/* Consider conversion from "int". */
-   if( raw_type == AST__INTTYPE ) {
-      ival = *( (int *) raw );
-
-/* Consider conversion to "int". */
-      if( out_type == AST__INTTYPE ) {
-         if( out ) *( (int *) out ) = ival;
-         
-/* Consider conversion to "float". */
-      } else if( out_type == AST__FLOATTYPE ) {
-         if( out ) *( (float *) out ) = (float) ival;
-
-/* Consider conversion to "double". */
-      } else if( out_type == AST__DOUBLETYPE ) {
-         if( out ) *( (double *) out ) = (double) ival;
-
-/* Consider conversion to "const char *". */
-      } else if( out_type == AST__STRINGTYPE ) {
-         (void) sprintf( convertvalue_buff, "%d", ival );
-         cvalue = convertvalue_buff;
-
-/* Consider conversion to "AstObject *". */
-      } else if( out_type == AST__OBJECTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "void *". */
-      } else if( out_type == AST__POINTERTYPE ) {
-         result = 0;
-
-/* Report an error if the data type is unknown. */
-      } else {
-         result = 0;
-         astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   out_type );
-      }
-
-/* Consider conversion from "double". */
-   } else if( raw_type == AST__DOUBLETYPE ) {
-      dval = *( (double *) raw );
-
-/* Consider conversion to "int". */
-      if( out_type == AST__INTTYPE ) {
-         if( out ) *( (int *) out ) = (int)( dval + 0.5 );
-         
-/* Consider conversion to "double". */
-      } else if( out_type == AST__DOUBLETYPE ) {
-         if( out ) *( (double *) out ) = dval;
-
-/* Consider conversion to "float". */
-      } else if( out_type == AST__FLOATTYPE ) {
-         if( out ) *( (float *) out ) = (float) dval;
-
-/* Consider conversion to "const char *". If reducing the number of 
-   decimal places by two produces a saving of 10 or more characters, 
-   assume the least significant two characters are rounding error. */
-      } else if( out_type == AST__STRINGTYPE ) {
-         n1 = sprintf( convertvalue_buff, "%.*g", DBL_DIG - 2, dval );
-         n2 = sprintf( convertvalue_buff, "%.*g", DBL_DIG, dval );
-         if( n2 - n1 > 9 ) {
-            (void) sprintf( convertvalue_buff, "%.*g", DBL_DIG - 2, dval );
-         } 
-         cvalue = convertvalue_buff;
-
-/* Consider conversion to "AstObject *". */
-      } else if( out_type == AST__OBJECTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "void *". */
-      } else if( out_type == AST__POINTERTYPE ) {
-         result = 0;
-
-/* Report an error if the data type is unknown. */
-      } else {
-         result = 0;
-         astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   out_type );
-      }
-
-/* Consider conversion from "float". */
-   } else if( raw_type == AST__FLOATTYPE ) {
-      fval = *( (float *) raw );
-
-/* Consider conversion to "int". */
-      if( out_type == AST__INTTYPE ) {
-         if( out ) *( (int *) out ) = (int)( fval + 0.5 );
-         
-/* Consider conversion to "double". */
-      } else if( out_type == AST__DOUBLETYPE ) {
-         if( out ) *( (double *) out ) = (double) fval;
-
-/* Consider conversion to "float". */
-      } else if( out_type == AST__FLOATTYPE ) {
-         if( out ) *( (float *) out ) = fval;
-
-/* Consider conversion to "const char *". */
-      } else if( out_type == AST__STRINGTYPE ) {
-         (void) sprintf( convertvalue_buff, "%.*g", FLT_DIG, fval );
-         cvalue = convertvalue_buff;
-
-/* Consider conversion to "AstObject *". */
-      } else if( out_type == AST__OBJECTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "void *". */
-      } else if( out_type == AST__POINTERTYPE ) {
-         result = 0;
-
-/* Report an error if the data type is unknown. */
-      } else {
-         result = 0;
-         astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   out_type );
-      }
-
-/* Consider conversion from "const char *". */
-   } else if( raw_type == AST__STRINGTYPE ) {
-      cval = *( (const char **) raw );
-
-/* Consider conversion to "int". */
-      if( out_type == AST__INTTYPE ) {
-         nc = 0;
-         nval = astSscanf( cval, " %d %n", &ival, &nc );
-         if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
-            if( out ) *( (int *) out ) = ival;
-         } else {
-            nc = 0;
-            nval = astSscanf( cval, " %lf %n", &dval, &nc );
-            if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
-               if( out ) *( (int *) out ) = (int) ( dval + 0.5 );
-            } else {
-               result = 0;
-            }
-         }
-
-/* Consider conversion to "double". */
-      } else if( out_type == AST__DOUBLETYPE ) {
-         nc = 0;
-         nval = astSscanf( cval, " %lf %n", &dval, &nc );
-         if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
-            if( out ) *( (double *) out ) = dval;
-         } else {
-            result = 0;
-         }
-
-/* Consider conversion to "float". */
-      } else if( out_type == AST__FLOATTYPE ) {
-         nc = 0;
-         nval = astSscanf( cval, " %f %n", &fval, &nc );
-         if( ( nval == 1 ) && ( nc >= (int) strlen( cval ) ) ) {
-            if( out ) *( (float *) out ) = fval;
-         } else {
-            result = 0;
-         }
-
-/* Consider conversion to "const char *". */
-      } else if( out_type == AST__STRINGTYPE ) {
-         cvalue = cval;
-
-/* Consider conversion to "AstObject *". */
-      } else if( out_type == AST__OBJECTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "void *". */
-      } else if( out_type == AST__POINTERTYPE ) {
-         result = 0;
-
-/* Report an error if the data type is unknown. */
-      } else {
-         result = 0;
-         astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   out_type );
-      }
-
-/* Consider conversion from "AstObject *". */
-   } else if( raw_type == AST__OBJECTTYPE ) {
-
-/* Consider conversion to "int". */
-      if( out_type == AST__INTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "double". */
-      } else if( out_type == AST__DOUBLETYPE ) {
-         result = 0;
-
-/* Consider conversion to "float". */
-      } else if( out_type == AST__FLOATTYPE ) {
-         result = 0;
-
-/* Consider conversion to "const char *". */
-      } else if( out_type == AST__STRINGTYPE ) {
-         result = 0;
-
-/* Consider conversion to "AstObject *". */
-      } else if( out_type == AST__OBJECTTYPE ) {
-         aval = *( (AstObject **) raw );
-         if( out ) *( (AstObject **) out ) = aval ? astClone( aval ) : NULL;
-
-/* Consider conversion to "void *". */
-      } else if( out_type == AST__POINTERTYPE ) {
-         result = 0;
-
-/* Report an error if the data type is unknown. */
-      } else {
-         result = 0;
-         astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   out_type );
-      }
-
-/* Consider conversion from "void *". */
-   } else if( raw_type == AST__POINTERTYPE ) {
-
-/* Consider conversion to "int". */
-      if( out_type == AST__INTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "double". */
-      } else if( out_type == AST__DOUBLETYPE ) {
-         result = 0;
-
-/* Consider conversion to "float". */
-      } else if( out_type == AST__FLOATTYPE ) {
-         result = 0;
-
-/* Consider conversion to "const char *". */
-      } else if( out_type == AST__STRINGTYPE ) {
-         result = 0;
-
-/* Consider conversion to "AstObject *". */
-      } else if( out_type == AST__OBJECTTYPE ) {
-         result = 0;
-
-/* Consider conversion to "void *". */
-      } else if( out_type == AST__POINTERTYPE ) {
-         if( out ) *( (void **) out ) = *( (void **) raw );
-
-/* Report an error if the data type is unknown. */
-      } else {
-         result = 0;
-         astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   out_type );
-      }
-
-/* Report an error if the data type is unknown. */
-   } else {
-      result = 0;
-      astError( AST__INTER, "ConvertValue(KeyMap): Illegal map entry data "
-                "type %d encountered (internal AST programming error).", status,
-                raw_type );
-   }
-
-/* If the output is a string, store a copy of the resulting string in 
-   dynamically allocated memory, putting a pointer to the copy into the next
-   element of the "convertvalue_strings" array.  (This process also de-allocates
-   any previously allocated memory pointed at by this "convertvalue_strings"
-   element, so the earlier string is effectively replaced by the new
-   one.) */
-   if( out_type == AST__STRINGTYPE && astOK && result && cvalue ) {
-      result = strlen( cvalue );
-
-      astBeginPM;
-      convertvalue_strings[ convertvalue_istr ] = astStore( convertvalue_strings[ convertvalue_istr ], cvalue, 
-                                  (size_t) ( result + 1 ) );
-      astEndPM;
-
-/* If OK, return a pointer to the copy and increment "convertvalue_istr" to use the
-   next element of "convertvalue_strings" on the next invocation. Recycle "convertvalue_istr" to
-   zero when all elements have been used. */
-      if ( astOK ) {
-         if( out ) *( (const char **) out ) = convertvalue_strings[ convertvalue_istr++ ];
-         if( convertvalue_istr == ( AST__KEYMAP_CONVERTVALUE_MAX_STRINGS - 1 ) ) convertvalue_istr = 0;
-      }
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-
-static AstMapEntry *CopyMapEntry( AstMapEntry *in, int *status ){
-/*
-*  Name:
-*     CopyMapEntry
-
-*  Purpose:
-*     Produces a copy of the supplied KeyMap entry.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstMapEntry *CopyMapEntry( AstMapEntry *in, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function creates a deep copy of the supplied KeyMap entry.
-
-*  Parameters:
-*     in
-*        Pointer to the MapEntry to be copied. NULL may be supplied in
-*        which case NULL will be returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new copy. The link to the next MapEntry in the
-*     linked list is set NULL in the returned copy.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapEntry *result;   /* Returned pointer */
-   AstObject **alist;     /* Pointer to list of AST object pointers */
-   AstObject *obj;        /* Pointer to AstObject value */
-   const char **slist;    /* Pointer to list of text pointers */
-   const char *text;      /* Pointer to text string */
-   int i;                 /* Loop count */
-   int nel;               /* No. of values in entry vector (0 => scalar) */
-   int type;              /* Entry data type */
-   size_t size;           /* Size of Entry structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status and the supplied pointer. */
-   if ( !astOK || !in ) return result;
-
-/* Get the size, data type and length of the MapEntry. */
-   size = SizeOfEntry( in, status );
-   nel = in->nel;
-   type = in->type;
-
-/* Do a byte-for-byte copy of the supplied MapEntry. */
-   result = astStore( NULL, in, size );
-
-/* Copy or nullify pointers in the AstMapEntry structure. */
-   result->next = NULL;
-   text = in->key;
-   result->key = text ? astStore( NULL, text, strlen( text ) + 1 ) : NULL;
-   text = in->comment;
-   result->comment = text ? astStore( NULL, text, strlen( text ) + 1 ) : NULL;
-
-/* First deal with string entries. */
-   if( type == AST__STRINGTYPE ) {
-
-/* Scalar valued entries... */
-      if( nel == 0 ) {
-
-/* Take a copy of the single string in the input entry. */
-         text = ( (Entry0C *) in )->value;
-         ( (Entry0C *) result )->value = text ? astStore( NULL, text, 
-                                                strlen( text ) + 1 ) : NULL;
-/* Vector valued entries... */
-      } else {
-
-/* Allocate an array to store the string pointers. */
-         slist = astMalloc( sizeof(char *)*(size_t)nel );
-         ( (Entry1C *) result )->value = slist;
-
-/* Copy the strings. */
-         if( slist ) {
-            for( i = 0; i < nel; i++ ) {
-               text = ( (Entry1C *) in )->value[ i ];
-               slist[ i ] = text ? astStore( NULL, text, strlen( text ) + 1 ) : NULL;
-            }
-         }
-      }
-
-/* Similarly deal with AST Object entries. */
-   } else if( type == AST__OBJECTTYPE ) {
-      if( nel == 0 ) {
-         obj = ( (Entry0A *) in )->value;
-         ( (Entry0A *) result )->value = obj ? astCopy( obj ) : NULL;
-      } else {
-         alist = astMalloc( sizeof(AstObject *)*(size_t)nel );
-         ( (Entry1A *) result )->value = alist;
-         if( alist ) {
-            for( i = 0; i < nel; i++ ) {
-               obj = ( (Entry1A *) in )->value[ i ];
-               alist[ i ] = obj ? astCopy( obj ) : NULL;
-            }
-         }
-      }
-
-/* Now deal with integer entries. Scalar entries do not need any further 
-   action. If this is a vector entry copy the values array. */
-   } else if( type == AST__INTTYPE ) {
-      if( nel > 0 ) {
-         ( (Entry1I *) result )->value = astStore( NULL, 
-                                                  ( (Entry1I *) in )->value,
-                                                  sizeof( int )*(size_t)nel );
-      }
-
-/* Similarly deal with floating point entries. */
-   } else if( type == AST__DOUBLETYPE ) {
-      if( nel > 0 ) {
-         ( (Entry1D *) result )->value = astStore( NULL, 
-                                                  ( (Entry1D *) in )->value,
-                                                  sizeof( double )*(size_t)nel );
-      }
-
-   } else if( type == AST__FLOATTYPE ) {
-      if( nel > 0 ) {
-         ( (Entry1F *) result )->value = astStore( NULL, 
-                                                  ( (Entry1F *) in )->value,
-                                                  sizeof( float )*(size_t)nel );
-      }
-
-/* Similarly deal with void pointer entries. */
-   } else if( type == AST__POINTERTYPE ) {
-      if( nel > 0 ) {
-         ( (Entry1P *) result )->value = astStore( NULL, 
-                                                  ( (Entry1P *) in )->value,
-                                                  sizeof( void * )*(size_t)nel );
-      }
-
-/* Report an error if the data type is unknown. */
-   } else {
-      astError( AST__INTER, "CopyMapEntry(KeyMap): Illegal map entry data "
-                "type %d encountered (internal AST programming error).", status,
-                type );
-   }
-
-/* If an error has occurred, attempt to delete the returned MapEntry. */
-   if( !astOK ) result = FreeMapEntry( result, status );
-
-/* Return the result. */
-   return result;
-}
-
-static void CopyTableEntry( AstKeyMap *in, AstKeyMap *out, int itab, int *status ){
-/*
-*  Name:
-*     CopyTableEntry
-
-*  Purpose:
-*     Produces a deep copy of a hash table element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void CopyTableEntry( AstKeyMap *in, AstKeyMap *out, int itab, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function creates a deep copy of the linked-list of KeyMap entries
-*     stored in the specified element of the input KeyMaps hash table.
-
-*  Parameters:
-*     in
-*        Pointer to the input KeyMap.
-*     out
-*        Pointer to the output KeyMap.
-*     itab
-*        Index of the hash table element to be copied.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapEntry **link;    /* Address to store foward link */
-   AstMapEntry *next;     /* Pointer to next Entry to copy */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* The "link" variable holds the address of the location at which the
-   pointer to the next copied MapEntry should be stored. Initialise this to
-   be the address of the required element of the output hash table. */
-   link = &( out->table[ itab ] );
-
-/* The "next" variable holds the address of the next MapEntry to be
-   copied. Initialise this to the MapEntry at the head of the linked list
-   associated with the specified index of the input KeyMaps hash table. */
-   next = in->table[ itab ];
-
-/* If the hash table element is empty, store a null pointer and pass on. */
-   if( !next ) {
-      out->table[ itab ] = NULL;
-
-/* Otherwise copy the liked list. */
-   } else {
-
-/* Loop round until we have copied all entries. */
-      while( next && astOK ) {
-
-/* Copy the next entry, storing the resulting pointer at the position
-   indicated by "link". */
-         *link = CopyMapEntry( next, status );
-
-/* Update "link" and "next" */
-         next = next->next;
-         link = &( (*link)->next );
-      }
-   }
-
-/* Set the number of entries in the output to be the same as the input. */
-   out->nentry[ itab ] = in->nentry[ itab ];
-
-/* If an error has occurred, attempt to delete the returned MapEntry. */
-   if( !astOK ) FreeTableEntry( out, itab, status );
-}
-
-static void DoubleTableSize( AstKeyMap *this, int *status ) {
-/*
-*  Name:
-*     DoubleTableSize
-
-*  Purpose:
-*     Double the size of the hash table in a KeyMap
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void DoubleTableSize( AstKeyMap *this, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function creates a new hash table which has twice as many
-*     elements as the current hash table, and moves all the entries out 
-*     of the old table into the new table (at their new positions).
-
-*  Parameters:
-*     this
-*        The KeyMap pointer.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapEntry **newtable;
-   AstMapEntry *next;
-   AstMapEntry *new_next;
-   int *newnentry;
-   int bitmask;
-   int i;
-   int newi;
-   int newmapsize;
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Determine the new hash table size. Since mapsize starts out as a power
-   of 2 (ensured by the NewTable function), the new mapsize will also be
-   a power of 2. Also, create a bit mask that can be used to zero the
-   upper bits in a full width hash value. */
-   newmapsize = 2*this->mapsize;
-   bitmask = newmapsize - 1;
-
-/* Create the new arrays, leaving the old arrays intact for the moment. */
-   newtable = astMalloc( newmapsize*sizeof( AstMapEntry * ) );
-   newnentry = astMalloc( newmapsize*sizeof( int ) );
-   if( astOK ) {
-
-/* Initialise the new table. */
-      for( i = 0; i < newmapsize; i++ ) {
-         newtable[ i ] = NULL;
-         newnentry[ i ] = 0;
-      }
-
-/* Loop round each of the existing table entries. */
-      for( i = 0; i < this->mapsize; i++ ) {
-
-/* The "next" variable holds the address of the next MapEntry to be
-   moved. Initialise this to the MapEntry at the head of the linked list
-   associated with the specified index of the input KeyMaps hash table. */
-         next = this->table[ i ];
-
-/* Loop round until we have moved all entries. */
-         while( next && astOK ) {
-
-/* Find the index within the new table at which to store this entry. */
-            newi = ( next->hash & bitmask );        
-
-/* Save the pointer to the next entry following the current one in the
-   linked list. */
-            new_next = next->next;
-
-/* Put a pointer to the MapEntry which is currently at the head of the 
-   linked list in the "next" component of the current MapEntry. */
-            next->next = newtable[ newi ];
-
-/* Store the supplied MapEntry pointer in the requested element of the
-   hash table. */
-            newtable[ newi ] = next;
-
-/* Increment the length of linked list. */
-            newnentry[ newi ]++;
-
-/* Use the pointer to the next map entry to be moved. */
-            next = new_next;
-         }
-      }
-   }
-
-/* If OK, delete the existing table and use the new table */
-   if( astOK ) {
-      this->mapsize = newmapsize;
-
-      (void) astFree( this->table );
-      this->table = newtable;
-
-      (void) astFree( this->nentry );
-      this->nentry = newnentry;
-
-/* If not OK, delete the new table. */
-   } else {
-      newtable = astFree( newtable );
-      newnentry = astFree( newnentry );
-   }
-}
-
-static void DumpEntry( AstMapEntry *entry, AstChannel *channel, int nentry, int *status ) {
-/*
-*  Name:
-*     DumpEntry
-
-*  Purpose:
-*     Dump a single AstMapEntry to a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void DumpEntry( AstMapEntry *entry, AstChannel *channel, int nentry )
-
-*  Description:
-*     This function dumps the supplied MapEntry to the supplied Channel.
-
-*  Parameters:
-*     entry
-*        Pointer to the MapEntry whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     nentry
-*        The integer index value to use when describing the MapEntry in
-*        the dump.
-*/
-
-/* Local Variables: */
-   char buff[20];                /* Buffer for item names */
-   const char *com;              /* Pointer to comment string */
-   int index;                    /* Index into vector valued entry */
-   int nel;                      /* Number of elements in value */
-   int type;                     /* Entry data type */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Dump the entry key. */
-   (void) sprintf( buff, "Key%d", nentry );
-   astWriteString( channel, buff, 1, 1, entry->key, "Item name" );
-
-/* Dump the comment if not blank. */
-   if( entry->comment && *(entry->comment) ) {
-      (void) sprintf( buff, "Com%d", nentry );
-      astWriteString( channel, buff, 1, 1, entry->comment, "Item comment" );
-   }
-
-/* Get the data type and the length of the Entry. */
-   type = entry->type;
-   nel = entry->nel;
-
-/* Dump the entry data type. */
-   if( type == AST__STRINGTYPE ) {
-      com = "Item data type (string)";
-
-   } else if( type == AST__OBJECTTYPE ) {
-      com = "Item data type (AST Object)";
-
-   } else if( type == AST__INTTYPE ) {
-      com = "Item data type (int)";
-
-   } else if( type == AST__DOUBLETYPE ) {
-      com = "Item data type (double)";
-
-   } else if( type == AST__FLOATTYPE ) {
-      com = "Item data type (float)";
-
-   } else if( type == AST__POINTERTYPE ) {
-      com = "Item data type (pointer)";
-
-   } else {
-      com = "";
-      astError( AST__INTER, "DumpEntry(KeyMap): Illegal map entry data "
-                "type %d encountered (internal AST programming error).", status,
-                type );
-   }
-   (void) sprintf( buff, "Typ%d", nentry );
-   astWriteInt( channel, buff, 1, 1, entry->type, com );
-
-/* Dump the vector length */
-   if( entry->nel > 0 ) {
-      (void) sprintf( buff, "Nel%d", nentry );
-      astWriteInt( channel, buff, 1, 1, entry->nel, "Vector length" );
-   }
-
-/* First deal with integer entries. */
-   if( type == AST__INTTYPE ) {
-      if( entry->nel == 0 ) {
-         (void) sprintf( buff, "Val%d", nentry );
-         astWriteInt( channel, buff, 1, 1, ((Entry0I *)entry)->value, "Item value" );
-      } else {
-         com = "Item values";
-         for( index = 0; index < nel; index++ ){
-            (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
-            astWriteInt( channel, buff, 1, 1, ((Entry1I *)entry)->value[ index ], com );
-            com = "";
-         }
-      }
-
-/* Similarly deal with floating point entries. */
-   } else if( type == AST__DOUBLETYPE ) {
-      if( entry->nel == 0 ) {
-         if( ((Entry0D *)entry)->value != AST__BAD ) {
-            (void) sprintf( buff, "Val%d", nentry );
-            astWriteDouble( channel, buff, 1, 1, ((Entry0D *)entry)->value, "Item value" );
-         }
-      } else {
-         com = "Item values";
-         for( index = 0; index < nel; index++ ){
-            if( ((Entry1D *)entry)->value[ index ] != AST__BAD ) {
-               (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
-               astWriteDouble( channel, buff, 1, 1, ((Entry1D *)entry)->value[ index ], com );
-               com = "";
-            }
-         }
-      }
-
-/* Similarly deal with single precision floating point entries. */
-   } else if( type == AST__FLOATTYPE ) {
-      if( entry->nel == 0 ) {
-         (void) sprintf( buff, "Val%d", nentry );
-         astWriteDouble( channel, buff, 1, 1, (double) ((Entry0F *)entry)->value, "Item value" );
-      } else {
-         com = "Item values";
-         for( index = 0; index < nel; index++ ){
-            (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
-            astWriteDouble( channel, buff, 1, 1, (double) ((Entry1F *)entry)->value[ index ], com );
-            com = "";
-         }
-      }
-
-/* Do the same for string values. */
-   } else if( type == AST__STRINGTYPE ) {
-      if( entry->nel == 0 ) {
-         (void) sprintf( buff, "Val%d", nentry );
-         astWriteString( channel, buff, 1, 1, ((Entry0C *)entry)->value, "Item value" );
-      } else {
-         com = "Item values";
-         for( index = 0; index < nel; index++ ){
-            (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
-            astWriteString( channel, buff, 1, 1, ((Entry1C *)entry)->value[ index ], com );
-            com = "";
-         }
-      }
-
-/* Do the same for Object values. */
-   } else if( type == AST__OBJECTTYPE ) {
-      if( entry->nel == 0 ) {
-         if( ((Entry0A *)entry)->value ) {
-            (void) sprintf( buff, "Val%d", nentry );
-            astWriteObject( channel, buff, 1, 1, ((Entry0A *)entry)->value, "Item value" );
-         }
-      } else {
-         com = "Item values";
-         for( index = 0; index < nel; index++ ){
-            if( ((Entry1A *)entry)->value[ index ] ) {
-               (void) sprintf( buff, "V%d_%d", nentry, index + 1 );
-               astWriteObject( channel, buff, 1, 1, ((Entry1A *)entry)->value[ index ], com );
-               com = "";
-            }
-         }
-      }
-
-/* Void pointer values cannot be dumped. */
-   } else if( type == AST__POINTERTYPE ) {
-      astError( AST__INTER, "DumpEntry(KeyMap): Cannot dump KeyMaps in "
-                "which the values are arbitrary C pointers (possible "
-                "programming error)." , status);
-
-/* Report an error if the data type is unknown. */
-   } else if( astOK ) {
-      astError( AST__INTER, "DumpEntry(KeyMap): Illegal map entry data "
-                "type %d encountered (internal AST programming error).", status,
-                type );
-   }
-}
-
-static AstMapEntry *FreeMapEntry( AstMapEntry *in, int *status ){
-/*
-*  Name:
-*     FreeMapEntry
-
-*  Purpose:
-*     Frees the supplied KeyMap entry.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstMapEntry *FreeMapEntry( AstMapEntry *in, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function frees resources used by the supplied MapEntry, then
-*     frees the MapEntry structure itself and returns a NULL pointer.
-
-*  Parameters:
-*     in
-*        Pointer to the MapEntry to be freed. NULL may be supplied in
-*        which the function returns without action.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A NULL pointer.
-
-*  Notes:
-*     - It is the callers responsibility to ensure that any other MapEntry 
-*     which refers to the supplied MapEntry (e.g. through the "next" link 
-*     in the MapEntry structure) is modified to take account of the
-*     freeing of the supplied MapEntry.
-*     - This function attempts to execute even if it is invoked with the 
-*     global error status set.
-*/
-
-/* Local Variables: */
-   AstObject **alist;     /* Pointer to list of AST object pointers */
-   AstObject *obj;        /* Pointer to AST object */
-   const char **slist;    /* Pointer to list of text pointers */
-   int i;                 /* Loop count */
-   int nel;               /* No. of values in entry vector (0 => scalar) */
-   int type;              /* Entry data type */
-
-/* Check the supplied pointer. */
-   if( !in ) return NULL;
-
-/* Get the data type and length of the MapEntry. */
-   nel = in->nel;
-   type = in->type;
-
-/* First deal with string entries. */
-   if( type == AST__STRINGTYPE ) {
-
-/* For scalar valued entries, free the single string in the input entry. */
-      if( nel == 0 ) {
-         ( (Entry0C *) in )->value = (const char *) astFree( ( void *) ( (Entry0C *) in )->value );
-
-/* For vector valued entries, free the strings, then free the array storing 
-   the string pointers. */
-      } else {
-         slist = ( (Entry1C *) in )->value;
-         if( slist ) {
-            for( i = 0; i < nel; i++ ) slist[ i ] = astFree( (void *) slist[ i ] );
-            ( (Entry1C *) in )->value = astFree( (void *) slist );
-         }
-      }
-
-/* Similarly deal with AST Object entries. */
-   } else if( type == AST__OBJECTTYPE ) {
-      if( nel == 0 ) {
-         obj = ( (Entry0A *) in )->value;
-         if( obj ) ( (Entry0A *) in )->value = astAnnul( obj );
-      } else {
-         alist = ( (Entry1A *) in )->value;
-         if( alist ) {
-            for( i = 0; i < nel; i++ ) {
-               if( alist[ i ] ) alist[ i ] = astAnnul( alist[ i ] );
-            }
-            ( (Entry1A *) in )->value = astFree( alist );
-         }
-      }
-
-/* Now deal with integer entries. Scalar entries do not need any further 
-   action. If this is a vector entry free the values array. */
-   } else if( type == AST__INTTYPE ) {
-      if( nel > 0 ) ( (Entry1I *) in )->value = astFree( ( (Entry1I *) in )->value );
-
-/* Similarly deal with void * pointer entries. */
-   } else if( type == AST__POINTERTYPE ) {
-      if( nel > 0 ) ( (Entry1P *) in )->value = astFree( ( (Entry1P *) in )->value );
-
-/* Similarly deal with floating point entries. */
-   } else if( type == AST__DOUBLETYPE ) {
-      if( nel > 0 ) ( (Entry1D *) in )->value = astFree( ( (Entry1D *) in )->value );
-
-/* Similarly deal with single precision floating point entries. */
-   } else if( type == AST__FLOATTYPE ) {
-      if( nel > 0 ) ( (Entry1F *) in )->value = astFree( ( (Entry1F *) in )->value );
-
-/* Report an error if the data type is unknown. */
-   } else {
-      astError( AST__INTER, "FreeMapEntry(KeyMap): Illegal map entry data "
-                "type %d encountered (internal AST programming error).", status,
-                type );
-   }
-
-/* Free or nullify pointers in the AstMapEntry structure. */
-   in->next = NULL;
-   in->key = astFree( (void *) in->key );
-   in->comment = astFree( (void *) in->comment );
-
-/* Free the complete AstMapEntry structure. */
-   astFree( in );
-
-/* Return a NULL pointer. */
-   return NULL;
-}
-
-static void FreeTableEntry( AstKeyMap *this, int itab, int *status ){
-/*
-*  Name:
-*     FreeTableEntry
-
-*  Purpose:
-*     Frees the linked list of KeyMap entries stored in a given element of
-*     the hash table.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void FreeTableEntry( AstKeyMap *this, int itab, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function frees resources used by all the MapEntries in the
-*     linked list associated with the specified element of the hash table 
-*     of the supplied KeyMap.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap
-*     itab
-*        Index of the hash table element to free.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function attempts to execute even if it is invoked with the 
-*     global error status set.
-*/
-
-/* Local Variables: */
-   AstMapEntry *link;     /* Pointer the next but one MapEntry to be freed */
-   AstMapEntry *next;     /* Pointer the next MapEntry to be freed */
-
-/* Check it is safe to proceed. */
-   if( this && itab >= 0 && itab < this->mapsize ) {
-
-/* Store a pointer to the MapEntry which is to be freed next. */
-      next = this->table[ itab ];
-
-/* Loop round freeing all MapEntries in the linked list. */
-      while( next ) {
-
-/* Store a pointer to the MapEntry which will be freed after this one. */
-         link = next->next;
-
-/* Free this MapEntry */
-         FreeMapEntry( next, status );
-
-/* Set up the next MapEntry to be freed. */
-         next = link;
-      }
-
-/* Store a NULL pointer in the table element. */
-      this->table[ itab ] = NULL;
-
-/* Sets the number of entries in this hash table element to zero. */
-      this->nentry[ itab ] = 0;
-   }
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     KeyMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a KeyMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the KeyMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the KeyMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstKeyMap *this;              /* Pointer to the KeyMap structure */
-   const char *result;           /* Pointer value to return */
-   int ival;                     /* Attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* SizeGuess. */
-/* ---------- */
-   if ( !strcmp( attrib, "sizeguess" ) ) {
-      ival = astGetSizeGuess( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* KeyError. */
-/* --------- */
-   } else if ( !strcmp( attrib, "keyerror" ) ) {
-      ival = astGetKeyError( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     KeyMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied KeyMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;       /* Pointer to KeyMap structure */
-   AstMapEntry *next;     /* Pointer the next MapEntry */
-   AstObject **alist;     /* Pointer to list of AST object pointers */
-   AstObject *obj;        /* Pointer to AST object */
-   const char **slist;    /* Pointer to list of text pointers */
-   int i;                 /* Loop count */
-   int itab;              /* Table entry index */
-   int nel;               /* No. of values in entry vector (0 => scalar) */
-   int result;            /* Result value to return */
-   int type;              /* Entry data type */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   for( itab = 0; itab < this->mapsize; itab++ ) {
-      next = this->table[ itab ];
-      while( next ) {
-         nel = next->nel;
-         type = next->type;
-
-         if( type == AST__STRINGTYPE ) {
-
-            if( nel == 0 ) {
-               result += astTSizeOf( ( void *) ( (Entry0C *) next )->value );
-
-            } else {
-               slist = ( (Entry1C *) next )->value;
-               if( slist ) {
-                  for( i = 0; i < nel; i++ ) result += astTSizeOf( (void *) slist[ i ] );
-                  result += astTSizeOf( (void *) slist );
-               }
-            }
-
-         } else if( type == AST__OBJECTTYPE ) {
-            if( nel == 0 ) {
-               obj = ( (Entry0A *) next )->value;
-               result += astGetObjSize( obj );
-            } else {
-               alist = ( (Entry1A *) next )->value;
-               if( alist ) {
-                  for( i = 0; i < nel; i++ ) {
-                     result += astGetObjSize( alist[ i ] );
-                  }
-                  result += astTSizeOf( alist );
-               }
-            }
-
-         } else if( type == AST__POINTERTYPE ) {
-            if( nel > 0 ) result += astTSizeOf( ( (Entry1P *) next )->value );
-
-         } else if( type == AST__INTTYPE ) {
-            if( nel > 0 ) result += astTSizeOf( ( (Entry1I *) next )->value );
-
-         } else if( type == AST__DOUBLETYPE ) {
-            if( nel > 0 ) result += astTSizeOf( ( (Entry1D *) next )->value );
-
-         } else if( type == AST__FLOATTYPE ) {
-            if( nel > 0 ) result += astTSizeOf( ( (Entry1F *) next )->value );
-
-         } else {
-            astError( AST__INTER, "astGetObjSize(KeyMap): Illegal map entry data "
-                      "type %d encountered (internal AST programming error).", status,
-                      type );
-         }
-
-         result += astTSizeOf( (void *) next->key );
-         result += astTSizeOf( (void *) next->comment );
-         result += astTSizeOf( next );
-
-         next = next->next;
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetKey( AstKeyMap *this, int index, int *status ) {
-/*
-*  Name:
-*     GetKey
-
-*  Purpose:
-*     Get the key at a given index within the KeyMap.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     const char *GetKey( AstKeyMap *this, int index, int *status )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns a string holding the key for the entry with
-*     the given index within the KeyMap.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     index
-*        The index into the KeyMap. The first entry has index zero, and the last 
-*        has index "size-1", where "size" is the value returned by the 
-*        astMapSize function. An error is reported if the supplied index is
-*        out of bounds.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        A pointer to a null-terminated string containing the key.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the AST error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapEntry *entry;         /* Pointer to the entry */
-   const char *result;         /* Pointer value to return */
-   int ifirst;                 /* Index of first entry in this table element */
-   int ilast;                  /* Index of last entry in this table element */
-   int istep;                  /* Entry count */
-   int itab;                   /* Index into hash table */
-   int nstep;                  /* No. of entries to skip */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Loop round each entry in the hash table. */
-   ilast = -1;
-   for( itab = 0; itab < this->mapsize; itab++ ) {
-
-/* Find the index of the first and the last Entry in the linked list associated
-   with this element of the hash table. */
-      ifirst = ilast + 1;
-      ilast += this->nentry[ itab ];
-
-/* Pass on if we have not yet reached the element containing the required
-   key. */
-      if( ilast >= index ) {
-
-/* Find how many steps we need to proceed down the linked list to reach
-   the required index. */
-         nstep = index - ifirst;
-
-/* Make this many steps down the linked list.*/
-         entry = this->table[ itab ];
-         for( istep = 0; entry && istep < nstep; istep++ ) entry = entry->next;
-
-/* Return a pointer to the key string, and break out of the loop. */
-         if( entry ) result = entry->key;
-         break;
-
-      }
-   }
-
-/* Report an error if the element was not found. */
-   if( !result && astOK ) {
-      astError( AST__MPIND, "astMapKey(%s): Cannot find element "
-                "%d (zero-based) of the %s.", status, astGetClass( this ), 
-                index, astGetClass( this ) );
-   } 
-
-/* Return the result.*/
-   return result;
-}
-
-static int GetSizeGuess( AstKeyMap *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetSizeGuess
-
-*  Purpose:
-*     Get the value of the SizeGuess attribute for a KeyMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int astGetSizeGuess( AstKeyMap *this )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns the value of the SizeGuess attribute for a
-*     KeyMap. 
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-
-*  Returned Value:
-*     The value of the SizeGuess attribute.
-
-*  Notes:
-*     - A value of zero is returned if this function is invoked with the 
-*     global error status set.
-
-*-
-*/
-
-/* Local Variables: */
-   int result;                /* Returned value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Return the attribute value using a default if not set. */
-   return ( this->sizeguess == INT_MAX ) ?
-           MIN_TABLE_SIZE*MAX_ENTRIES_PER_TABLE_ENTRY : this->sizeguess;
-}
-
-static int HashFun( const char *key, int bitmask, unsigned long *hash, int *status ){
-/*
-*  Name:
-*     HashFun
-
-*  Purpose:
-*     Returns an integer hash code for a string
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int HashFun( const char *key, int bitmask, int *hash, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function returns an integer hash code for the supplied string,
-*     This is the value that isused as the index into the hash table for
-*     the specified key.
-
-*  Parameters:
-*     key
-*        Pointer to the string. Trailing spaces are ignored.
-*     bitmask
-*        A bit mask that is used to zero the upper bits of a full width
-*        hash value in order to produce the required array index. This 
-*        should be one less than the length of the hash table.
-*     hash
-*        Pointer to a location at which to put the full width hash value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     An integer in the range zero to ( mapsize - 1 ).
-
-*  Notes:
-*     - A value of zero is returned if this function is invoked with the 
-*     global error status set.
-*/
-
-/* Local Variables: */
-   int c;            
-
-/* Check the local error status. */
-   if ( !astOK ) return 0;
-
-/* djb2: This hash function was first reported by Dan Bernstein many years 
-   ago in comp.lang.c Each through the "hile" loop corresponds to 
-   "hash = hash*33 + c ". Ignore spaces so that trailing spaces used to
-   pad F77 character variables will be ignored. */   
-   *hash = 5381;
-   while( (c = *key++) ) {
-      if( c != ' ' ) {     
-         *hash = ((*hash << 5) + *hash) + c;
-      }
-   }
-   return ( *hash & bitmask );
-}
-
-void astInitKeyMapVtab_(  AstKeyMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitKeyMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a KeyMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void astInitKeyMapVtab( AstKeyMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     KeyMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the KeyMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAKeyMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-   vtab->MapGet0P = MapGet0P;
-   vtab->MapGet0A = MapGet0A;
-   vtab->MapGet0C = MapGet0C;
-   vtab->MapGet0D = MapGet0D;
-   vtab->MapGet0F = MapGet0F;
-   vtab->MapGet0I = MapGet0I;
-   vtab->MapGet1P = MapGet1P;
-   vtab->MapGet1A = MapGet1A;
-   vtab->MapGet1C = MapGet1C;
-   vtab->MapGet1D = MapGet1D;
-   vtab->MapGet1F = MapGet1F;
-   vtab->MapGet1I = MapGet1I;
-   vtab->MapGetElemP = MapGetElemP;
-   vtab->MapGetElemA = MapGetElemA;
-   vtab->MapGetElemC = MapGetElemC;
-   vtab->MapGetElemD = MapGetElemD;
-   vtab->MapGetElemF = MapGetElemF;
-   vtab->MapGetElemI = MapGetElemI;
-   vtab->MapPut0A = MapPut0A;
-   vtab->MapPut0P = MapPut0P;
-   vtab->MapPut0C = MapPut0C;
-   vtab->MapPut0D = MapPut0D;
-   vtab->MapPut0F = MapPut0F;
-   vtab->MapPut0I = MapPut0I;
-   vtab->MapPut1P = MapPut1P;
-   vtab->MapPut1A = MapPut1A;
-   vtab->MapPut1C = MapPut1C;
-   vtab->MapPut1D = MapPut1D;
-   vtab->MapPut1F = MapPut1F;
-   vtab->MapPut1I = MapPut1I;
-   vtab->MapRemove = MapRemove;
-   vtab->MapSize = MapSize;
-   vtab->MapLenC = MapLenC;
-   vtab->MapLength = MapLength;
-   vtab->MapType = MapType;
-   vtab->MapHasKey = MapHasKey;
-   vtab->MapKey = MapKey;
-
-   vtab->ClearSizeGuess = ClearSizeGuess;
-   vtab->SetSizeGuess = SetSizeGuess;
-   vtab->GetSizeGuess = GetSizeGuess;
-   vtab->TestSizeGuess = TestSizeGuess;
-
-   vtab->ClearKeyError = ClearKeyError;
-   vtab->SetKeyError = SetKeyError;
-   vtab->GetKeyError = GetKeyError;
-   vtab->TestKeyError = TestKeyError;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-/* Declare the destructor, copy constructor and dump function. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "KeyMap", "Map of key/value pairs" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int KeyCmp( const char *key1, const char *key2, int *status ) {
-/*
-*  Name:
-*     KeyCmp
-
-*  Purpose:
-*     Compares keys for equality.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int KeyCmp( const char *key1, const char *key2, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function compares two strings. It is like strcmp except that it 
-*     ignores trailing spaces.
-
-*  Parameters:
-*     key1
-*        Pointer to first string.
-*     key2
-*        Pointer to second string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the keys differ. Zero if they are identical (except for
-*     trailing spaces).
-
-*  Notes:
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   const char *k1;               /* Pointer to next "key1" character */ 
-   const char *k2;               /* Pointer to next "key2" character */ 
-   int result;                   /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Get pointers to the first characters to differ, or to the first null
-   character, which ever comes first. */
-   k1 = key1;
-   k2 = key2;
-   while( *k1 && ( *k1 == *k2 ) ) {
-      k1++;
-      k2++;
-   }
-
-/* If both characters are null, the strings are identical. If neither is null, 
-   the string definitely differ. If one is null, we need to check if the
-   other one only has spaces to the end of the string. */
-   if( *k1 ) {
-      if( *k2 ) {
-         result = 1;
-      } else {
-         while( *k1 == ' ' ) k1++;
-         result = ( *k1 == 0 ) ? 0 : 1;
-      }
-   } else {
-      if( *k2 ) {
-         while( *k2 == ' ' ) k2++;
-         result = ( *k2 == 0 ) ? 0 : 1;
-      } else {
-         result = 0;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     KeyMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;       /* Pointer to KeyMap structure */
-   AstMapEntry *next;     /* Pointer the next MapEntry */
-   AstObject **alist;     /* Pointer to list of AST object pointers */
-   AstObject *obj;        /* Pointer to AST object */
-   int i;                 /* Loop count */
-   int itab;              /* Table entry index */
-   int nel;               /* No. of values in entry vector (0 => scalar) */
-   int result;            /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   for( itab = 0; itab < this->mapsize; itab++ ) {
-      next = this->table[ itab ];
-      while( next ) {
-         if( next->type == AST__OBJECTTYPE ) {
-            nel = next->nel;
-            if( nel == 0 ) {
-               obj = ( (Entry0A *) next )->value;
-               if( !result ) result = astManageLock( obj, mode, extra, fail );
-            } else {
-               alist = ( (Entry1A *) next )->value;
-               if( alist ) {
-                  for( i = 0; i < nel; i++ ) {
-                     if( !result ) result = astManageLock( alist[ i ], mode, 
-                                                           extra, fail );
-                  }
-               }
-            }
-         } 
-         next = next->next;
-      }
-   }
-
-   return result;
-
-}
-#endif
-
-static const char *MapKey( AstKeyMap *this, int index, int *status ) {
-/*
-*++
-*  Name:
-c     astMapKey
-f     AST_MAPKEY
-
-*  Purpose:
-*     Get the key at a given index within the KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     const char *astMapKey( AstKeyMap *this, int index )
-f     RESULT = AST_MAPKEY( THIS, INDEX, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns a string holding the key for the entry with
-*     the given index within the KeyMap.
-*
-*     This function is intended primarily as a means of iterating round all 
-*     the elements in a KeyMap. For this purpose, the number of entries in
-*     the KeyMap should first be found using
-c     astMapSize
-f     AST_MAPSIZE
-*     and this function should then be called in a loop, with the index
-*     value going from 
-c     zero to one less than the size of the KeyMap.
-f     one to the size of the KeyMap.
-*     The index associated with a given entry is not, in general, related to 
-*     the order in which the entries are added to the KeyMap, and may change
-*     if other entries are added to or removed from the KeyMap. 
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     index
-f     INDEX = INTEGER (Given)
-*        The index into the KeyMap. The first entry has index
-c        zero, and the last has index "size-1", where "size" is the value
-c        returned by the astMapSize function.
-f        one, and the last has index SIZE, the value returned by the 
-f        AST_MAPSIZE function.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapKey()
-c        A pointer to a null-terminated string containing the key.
-f     AST_MAPKEY = CHARACTER * ( AST__SZCHR )
-f        The key value.
-
-*  Notes:
-c     - The returned pointer is guaranteed to remain valid and the
-c     string to which it points will not be over-written for a total
-c     of 50 successive invocations of this function. After this, the
-c     memory containing the string may be re-used, so a copy of the
-c     string should be made if it is needed for longer than this.
-c     - A NULL pointer will be returned if this function is invoked
-c     with the AST error status set, or if it should fail for any
-c     reason.
-f     - A blank string will be returned if this function is invoked
-f     with STATUS set to an error value, or if it should fail for any
-f     reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   const char *result;           /* Pointer value to return */
-   const char *value;            /* Pointer to key value */
-   int i;                        /* Loop counter for initialisation */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* If the "mapkey_strings" array has not been initialised, fill it with
-   NULL pointers. */
-   if ( !mapkey_init ) {
-      mapkey_init = 1;
-      for ( i = 0; i < AST__KEYMAP_MAPKEY_MAX_STRINGS; i++ ) mapkey_strings[ i ] = NULL;
-   }
-
-/* Obtain a pointer to the required key value. */
-   value = GetKey( this, index, status );
-
-/* If OK, store a copy of the resulting string in dynamically
-   allocated memory, putting a pointer to the copy into the next
-   element of the "mapkey_strings" array.  (This process also de-allocates
-   any previously allocated memory pointed at by this "mapkey_strings"
-   element, so the earlier string is effectively replaced by the new
-   one.) */
-   if ( astOK ) {
-      astBeginPM;
-      mapkey_strings[ mapkey_istr ] = astStore( mapkey_strings[ mapkey_istr ], value,
-                                  strlen( value ) + (size_t) 1 );
-      astEndPM;
-
-/* If OK, return a pointer to the copy and increment "mapkey_istr" to use the
-   next element of "mapkey_strings" on the next invocation. Recycle "mapkey_istr" to
-   zero when all elements have been used. */
-      if ( astOK ) {
-         result = mapkey_strings[ mapkey_istr++ ];
-         if ( mapkey_istr == ( AST__KEYMAP_MAPKEY_MAX_STRINGS - 1 ) ) mapkey_istr = 0;
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-/*
-*++
-*  Name:
-c     astMapPut0<X>
-f     AST_MAPPUT0<X>
-
-*  Purpose:
-*     Add a scalar value to a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "ast.h"
-c     void astMapPut0<X>( AstKeyMap *this, const char *key, <X>type value, 
-c                         const char *comment );
-f     CALL AST_MAPPUT0<X>( THIS, KEY, VALUE, COMMENT, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-c     This is a set of functions 
-f     This is a set of routine
-*     for adding scalar values to a KeyMap. You should use a 
-c     function 
-f     routine
-*     which matches the data type of the data you wish to add to the KeyMap
-*     by replacing <X> in the generic 
-c     function name astMapPut0<X> 
-f     routine name AST_MAPPUT0<X> 
-*     by an appropriate 1-character type code (see the "Data Type Codes" 
-*     section below for the code appropriate to each supported data type).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap in which to store the supplied value.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        A character string to be stored with the value, which can later
-*        be used to identify the value. Trailing spaces are ignored.
-c     value
-f     VALUE = <X>type (Given)
-*        The value to be stored. The data type of this value should match the 
-*        1-character type code appended to the 
-c        function name (e.g. if you are using astMapPut0A, the type of this 
-c        value should be "pointer to AstObject").
-f        routine name (e.g. if you are using AST_MAPPUT0A, the type of this 
-f        value should be "integer pointer for an AstObject").
-c     comment
-f     COMMENT = CHARACTER * ( * ) (Given)
-f        A comment string to be stored with the value.
-c        A pointer to a null-terminated comment string to be stored with the 
-c        value. A NULL pointer may be supplied, in which case no comment is 
-c        stored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Key names are case sensitive, and white space is considered
-*     significant.
-*     - If the supplied key is already in use in the KeyMap, the new value
-*     will replace the old value.
-*     - If the stored value is an AST Object pointer, the Object's reference 
-*     count is incremented by this call. Any subsequent changes made to
-*     the Object using the returned pointer will be reflected in any
-*     any other active pointers for the Object, including any obtained
-*     later using
-c     astMapget0A.
-f     AST_MAPGET0A.
-*     The reference count for the Object will be decremented when the
-*     KeyMap is destroyed, or the entry is removed or over-written with a
-*     different pointer.
-
-*  Data Type Codes:
-*     To select the appropriate 
-c     function, you should replace <X> in the generic function name astMapPut0<X>
-f     routine, you should replace <X> in the generic routine name AST_MAPPUT0<X>
-*     with a 1-character data type code, so as to match the data type <X>type
-*     of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - I: int
-c     - C: "const" pointer to null terminated character string
-c     - A: Pointer to AstObject
-c     - P: Generic "void *" pointer
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - C: CHARACTER
-f     - A: INTEGER used to identify an AstObject
-*
-c     For example, astMapPut0D would be used to store a "double" value,
-c     while astMapPut0I would be used to store an "int", etc.
-f     For example, AST_MAPPUT0D would be used to store a DOUBLE PRECISION value,
-f     while AST_MAPPUT0I would be used to store an INTEGER, etc.
-c
-c     Note that KeyMaps containing generic "void *" pointers cannot be
-c     written out using astShow or astWrite. An error will be reported if 
-c     this is attempted.
-*--
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_MAPPUT0(X,Xtype,Itype,ValExp) \
-static void MapPut0##X( AstKeyMap *this, const char *key, Xtype value, \
-                        const char *comment, int *status ) { \
-\
-/* Local Variables: */ \
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ \
-   Entry0##X *entry;       /* Structure holding the data for the new Entry */ \
-   char *p;                /* Pointer to next key character */ \
-   int itab;               /* Index of hash table element to use */ \
-   int keylen;             /* Length of supplied key string */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Perform any necessary checks on the supplied value to be stored. */ \
-   CHECK_##X \
-\
-/* Allocate memory for the new MapEntry. */ \
-   entry = astMalloc( sizeof( Entry0##X ) ); \
-   if( astOK ) { \
-\
-/* Initialise pointers in the new structure.*/ \
-      mapentry = (AstMapEntry *) entry; \
-      mapentry->next = NULL; \
-      mapentry->key = NULL; \
-      mapentry->hash = 0; \
-      mapentry->comment = NULL; \
-\
-/* Now store the new values. */ \
-      keylen = strlen( key ); \
-      mapentry->key = astStore( NULL, key, keylen + 1 ); \
-      if( comment ) mapentry->comment = astStore( NULL, comment, strlen( comment ) + 1 ); \
-      mapentry->type = Itype; \
-      mapentry->nel = 0; \
-      entry->value = ValExp; \
-\
-/* Terminate the key string to exclude any trailing spaces. */ \
-      if( astOK ) { \
-         p = (char *) mapentry->key + keylen; \
-         while( --p >= mapentry->key ) { \
-            if( *p == ' ' ) { \
-               *p = 0; \
-            } else { \
-               break; \
-            } \
-         } \
-      } \
-\
-/* Use the hash function to determine the element of the hash table in \
-   which to store the new entry. */ \
-      itab = HashFun( mapentry->key, this->mapsize - 1, &(mapentry->hash), status ); \
-\
-/* Remove any existing entry with the given key from the table element. */ \
-      RemoveTableEntry( this, itab, mapentry->key, status ); \
-\
-/* If all has gone OK, store the new entry at the head of the linked list \
-   associated with the selected table entry. */ \
-      if( astOK ) { \
-         mapentry = AddTableEntry( this, itab, mapentry, status ); \
-\
-/* If anything went wrong, try to delete the new entry. */ \
-      } else { \
-         mapentry = FreeMapEntry( mapentry, status ); \
-      } \
-   } \
-} 
-
-/* Define macros which perform any necessary checks on the supplied value 
-   to be stored. For Object entries, check that we are not adding a KeyMap 
-   which already contains "this". This avoids circular dependencies.
-   Other types do not need any checks. */ 
-#define CHECK_A CheckCircle( this, value, "astMapPut0A", status );
-#define CHECK_I
-#define CHECK_D
-#define CHECK_F
-#define CHECK_C
-#define CHECK_P
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-MAKE_MAPPUT0(I,int,AST__INTTYPE,value)
-MAKE_MAPPUT0(D,double,AST__DOUBLETYPE,value)
-MAKE_MAPPUT0(F,float,AST__FLOATTYPE,value)
-MAKE_MAPPUT0(C,const char *,AST__STRINGTYPE,astStore(NULL,value,strlen(value)+1))
-MAKE_MAPPUT0(A,AstObject *,AST__OBJECTTYPE,(value?astClone(value):NULL))
-MAKE_MAPPUT0(P,void *,AST__POINTERTYPE,value)
-
-/* Undefine the macro. */
-#undef MAKE_MAPPUT0
-#undef CHECK_A
-#undef CHECK_I
-#undef CHECK_D
-#undef CHECK_F
-#undef CHECK_C
-#undef CHECK_P
-
-/*
-*++
-*  Name:
-c     astMapPut1<X>
-f     AST_MAPPUT1<X>
-
-*  Purpose:
-*     Add a vector value to a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "ast.h"
-c     void astMapPut1<X>( AstKeyMap *this, const char *key, int size,
-c                         const <X>type value[], const char *comment );
-f     CALL AST_MAPPUT1<X>( THIS, KEY, SIZE, VALUE, COMMENT, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-c     This is a set of functions 
-f     This is a set of routine
-*     for adding vector values to a KeyMap. You should use a 
-c     function 
-f     routine
-*     which matches the data type of the data you wish to add to the KeyMap
-*     by replacing <X> in the generic 
-c     function name astMapPut1<X> 
-f     routine name AST_MAPPUT1<X> 
-*     by an appropriate 1-character type code (see the "Data Type Codes" 
-*     section below for the code appropriate to each supported data type).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap in which to store the supplied values.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        A character string to be stored with the values, which can later
-*        be used to identify the values. Trailing spaces are ignored.
-c     size
-f     SIZE = INTEGER (Given)
-*        The number of elements in the supplied array of values.
-c     value
-f     VALUE( * ) = <X>type (Given)
-*        The array of values to be stored. The data type of this value should 
-*        match the 1-character type code appended to the 
-c        function name (e.g. if you are using astMapPut1A, the type of this 
-c        value should be "array of pointers to AstObject").
-f        routine name (e.g. if you are using AST_MAPPUT1A, the type of this 
-f        value should be "integer pointer for an AstObject)".
-c     comment
-f     COMMENT = CHARACTER * ( * ) (Given)
-f        A comment string to be stored with the values.
-c        A pointer to a null-terminated comment string to be stored with the 
-c        values. A NULL pointer may be supplied, in which case no comment is 
-c        stored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - If the supplied key is already in use in the KeyMap, the new values
-*     will replace the old values.
-*     - Key names are case sensitive, and white space is considered
-*     significant.
-
-*  Data Type Codes:
-*     To select the appropriate 
-c     function, you should replace <X> in the generic function name astMapPut1<X>
-f     routine, you should replace <X> in the generic routine name AST_MAPPUT1<X>
-*     with a 1-character data type code, so as to match the data type <X>type 
-*     of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - I: int
-c     - C: "const" pointer to null terminated character string
-c     - A: Pointer to AstObject
-c     - P: Generic "void *" pointer
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - C: CHARACTER
-f     - A: INTEGER used to identify an AstObject
-*
-c     For example, astMapPut1D would be used to store "double" values,
-c     while astMapPut1I would be used to store "int", etc.
-f     For example, AST_MAPPUT1D would be used to store DOUBLE PRECISION values,
-f     while AST_MAPPUT1I would be used to store INTEGER, etc.
-c
-c     Note that KeyMaps containing generic "void *" pointers cannot be
-c     written out using astShow or astWrite. An error will be reported if 
-c     this is attempted.
-*--
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_MAPPUT1(X,Xtype,Itype,ValExp) \
-static void MapPut1##X( AstKeyMap *this, const char *key, int size, \
-                        Xtype value[], const char *comment, \
-                        int *status ) { \
-\
-/* Local Variables: */ \
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ \
-   Entry1##X *entry;       /* Structure holding the data for the new Entry */ \
-   char *p;                /* Pointer to next key character */ \
-   int itab;               /* Index of hash table element to use */ \
-   int i;                  /* Loop count */ \
-   int keylen;             /* Length of supplied key string */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Perform any necessary checks on the supplied value to be stored. */ \
-   CHECK_##X \
-\
-/* Allocate memory for the new MapEntry. */ \
-   entry = astMalloc( sizeof( Entry1##X ) ); \
-   if( astOK ) { \
-\
-/* Initialise pointers in the new structure.*/ \
-      mapentry = (AstMapEntry *) entry; \
-      mapentry->next = NULL; \
-      mapentry->hash = 0; \
-      mapentry->key = NULL; \
-      mapentry->comment = NULL; \
-\
-/* Now store the new values. */ \
-      keylen = strlen( key ); \
-      mapentry->key = astStore( NULL, key, keylen + 1 ); \
-      if( comment ) mapentry->comment = astStore( NULL, comment, strlen( comment ) + 1 ); \
-      mapentry->type = Itype; \
-      mapentry->nel = size; \
-      entry->value = astMalloc( sizeof( Xtype )*(size_t)size ); \
-\
-      if( astOK ) { \
-         for( i = 0; i < size; i++ ) { \
-            entry->value[ i ] = ValExp; \
-         } \
-\
-/* Terminate the key string to exclude any trailing spaces. */ \
-         p = (char *) mapentry->key + keylen; \
-         while( --p >= mapentry->key ) { \
-            if( *p == ' ' ) { \
-               *p = 0; \
-            } else { \
-               break; \
-            } \
-         } \
-      } \
-\
-/* Use the hash function to determine the element of the hash table in \
-   which to store the new entry. */ \
-      itab = HashFun( mapentry->key, this->mapsize - 1, &(mapentry->hash), status ); \
-\
-/* Remove any existing entry with the given key from the table element. */ \
-      RemoveTableEntry( this, itab, mapentry->key, status ); \
-\
-/* If all has gone OK, store the new entry at the head of the linked list \
-   associated with the selected table entry. */ \
-      if( astOK ) { \
-         mapentry = AddTableEntry( this, itab, mapentry, status ); \
-\
-/* If anything went wrong, try to delete the new entry. */ \
-      } else { \
-         mapentry = FreeMapEntry( mapentry, status ); \
-      } \
-   } \
-} 
-
-/* Define macros which perform any necessary checks on the supplied values
-   to be stored. For Object entries, check that we are not adding a KeyMap 
-   which already contains "this". This avoids circular dependencies.
-   Other types do not need any checks. */ 
-#define CHECK_A \
-for( i = 0; i < size; i++ ) { \
-   CheckCircle( this, value[ i ], "astMapPut1A", status ); \
-}
-#define CHECK_I
-#define CHECK_D
-#define CHECK_F
-#define CHECK_C
-#define CHECK_P
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-MAKE_MAPPUT1(D,const double,AST__DOUBLETYPE,value[i])
-MAKE_MAPPUT1(F,const float,AST__FLOATTYPE,value[i])
-MAKE_MAPPUT1(I,const int,AST__INTTYPE,value[i])
-MAKE_MAPPUT1(C,const char *const,AST__STRINGTYPE,astStore(NULL,value[i],strlen(value[i])+1))
-MAKE_MAPPUT1(A,AstObject *const,AST__OBJECTTYPE,(value[i]?astClone(value[i]):NULL))
-MAKE_MAPPUT1(P,void *const,AST__POINTERTYPE,value[i])
-
-/* Undefine the macro. */
-#undef MAKE_MAPPUT1
-#undef CHECK_A
-#undef CHECK_I
-#undef CHECK_D
-#undef CHECK_F
-#undef CHECK_C
-#undef CHECK_P
-
-void astMapPut1AId_( AstKeyMap *this, const char *key, int size,  
-                     AstObject *const value[], const char *comment, 
-                     int *status ) {
-/*
-*  Name:
-*     astMapPut1AId_
-
-*  Purpose:
-*     Add a vector of AstObject pointers to a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ast.h"
-*     void astMapPut1A( AstKeyMap *this, const char *key, int size, 
-*                       AstObject *const value[], const char *comment )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is the public implementation of the astMapPut1A function
-*     It is identical to astMapPut1A_ except that ID values are supplied
-*     via the "value" parameter instead of a true C pointers. 
-
-*  Parameters:
-*     (see astMapPut1<X>)
-
-*/
-
-/* Local Variables: */
-   AstObject *op;          /* Object pointer */
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */
-   Entry1A *entry;         /* Structure holding the data for the new Entry */
-   char *p;                /* Pointer to next key character */
-   int itab;               /* Index of hash table element to use */
-   int i;                  /* Loop count */
-   int keylen;             /* Length of supplied key string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Allocate memory for the new MapEntry. */
-   entry = astMalloc( sizeof( Entry1A ) );
-   if( astOK ) {
-
-/* Initialise pointers in the new structure.*/
-      mapentry = (AstMapEntry *) entry;
-      mapentry->next = NULL;
-      mapentry->hash = 0;
-      mapentry->key = NULL;
-      mapentry->comment = NULL;
-
-/* Now store the new values. */
-      keylen = strlen( key );
-      mapentry->key = astStore( NULL, key, keylen + 1 );
-      if( comment ) mapentry->comment = astStore( NULL, comment, strlen( comment ) + 1 );
-      mapentry->type = AST__OBJECTTYPE;
-      mapentry->nel = size;
-      entry->value = astMalloc( sizeof( AstObject * )*(size_t)size );
-
-      if( astOK ) {
-         for( i = 0; i < size; i++ ) {
-            op = value[ i ] ? astMakePointer( value[ i ] ) : NULL;
-            entry->value[ i ] = op ? astClone( op ) : NULL;
-         }
-
-/* Terminate the key string to exclude any trailing spaces. */ \
-         p = (char *) mapentry->key + keylen;
-         while( --p >= mapentry->key ) {
-            if( *p == ' ' ) {
-               *p = 0;
-            } else {
-               break;
-            }
-         }
-      }
-
-/* Use the hash function to determine the element of the hash table in
-   which to store the new entry. */
-      itab = HashFun( mapentry->key, this->mapsize - 1, &(mapentry->hash), status );
-
-/* Remove any existing entry with the given key from the table element. */
-      RemoveTableEntry( this, itab, mapentry->key, status );
-
-/* If all has gone OK, store the new entry at the head of the linked list
-   associated with the selected table entry. */
-      if( astOK ) {
-         mapentry = AddTableEntry( this, itab, mapentry, status );
-
-/* If anything went wrong, try to delete the new entry. */
-      } else {
-         mapentry = FreeMapEntry( mapentry, status );
-      }
-   }
-} 
-
-/*
-*++
-*  Name:
-c     astMapGet0<X>
-f     AST_MAPGET0<X>
-
-*  Purpose:
-*     Get a scalar value from a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "ast.h"
-c     int astMapGet0<X>( AstKeyMap *this, const char *key, <X>type *value );
-f     RESULT = AST_MAPGET0<X>( THIS, KEY, VALUE, STATUS )
-
-f     RESULT = AST_MAPGET0C( THIS, KEY, VALUE, L, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is a set of functions for retrieving a scalar value from a KeyMap. 
-*     You should replace <X> in the generic function name 
-c     astMapGet0<X> 
-f     AST_MAPGET0<X> 
-*     by an appropriate 1-character type code (see the "Data Type Codes" 
-*     section below for the code appropriate to each supported data type).
-*     The stored value is converted to the data type indiced by <X>
-*     before being returned (an error is reported if it is not possible to 
-*     convert the stored value to the requested data type).
-f     Note, the version of this function which returns character strings,
-f     AST_MAPGET0C, has an extra parameter in which is returned the number 
-f     of characters written into the supplied CHARACTER variable.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the value to be retrieved. Trailing 
-*        spaces are ignored.
-c     value
-f     VALUE = <X>type (Returned)
-c        A pointer to a buffer in which to return the requested value. 
-f        The requested value. 
-*        If the requested key is not found, then the contents of the
-*        buffer on entry to this function will be unchanged on exit.
-c        For pointer types ("A" and "C"), the buffer should be a suitable
-c        pointer, and the address of this pointer should be supplied as the 
-c        "value" parameter.
-f     L = INTEGER (Returned)
-f        This parameter is only present in the interface for the AST_MAPGET0C 
-f        function. It is returned holding the number of characters
-f        written into the CHARACTER variable supplied for parameter VALUE.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapGet0<X>()
-f     AST_MAPGET0<X> = LOGICAL
-f        A flag which is set to
-c        a non-zero value
-f        .TRUE.
-*        if the requested key name was found, and is set to
-c        zero
-f        .FALSE.
-*        otherwise.
-
-*  Notes:
-*     - No error is reported if the requested key cannot be found in the
-*     given KeyMap, but a
-c     zero
-f     .FALSE.
-*     value will be returned as the function value. The supplied buffer
-*     will be returned unchanged.
-*     - Key names are case sensitive, and white space is considered
-*     significant.
-*     - If the stored value is a vector value, then the first value in
-*     the vector will be returned.
-c     - A string pointer returned by astMapGet0C is guaranteed to remain valid
-c     and the string to which it points will not be over-written for a
-c     total of 50 successive invocations of this function. After this,
-c     the memory containing the string may be re-used, so a copy of
-c     the string should be made if it is needed for longer than this.
-*     - If the returned value is an AST Object pointer, the Object's reference 
-*     count is incremented by this call. Any subsequent changes made to
-*     the Object using the returned pointer will be reflected in any
-*     any other active pointers for the Object. The returned pointer
-*     should be annulled using
-c     astAnnul
-f     AST_ANNUL
-*     when it is no longer needed.
-
-*  Data Type Codes:
-*     To select the appropriate 
-c     function, you should replace <X> in the generic function name astMapGet0<X>
-f     routine, you should replace <X> in the generic routine name AST_MAPGET0<X>
-*     with a 1-character data type code, so as to match the data type <X>type 
-*     of the data you are processing, as follows:
-c     - F: float
-c     - D: double
-c     - I: int
-c     - C: "const" pointer to null terminated character string
-c     - A: Pointer to AstObject
-c     - P: Generic "void *" pointer 
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - C: CHARACTER
-f     - A: INTEGER used to identify an AstObject
-*
-c     For example, astMapGet0D would be used to get a "double" value,
-c     while astMapGet0I would be used to get an "int", etc.
-f     For example, AST_MAPGET0D would be used to get a DOUBLE PRECISION value,
-f     while AST_MAPGET0I would be used to get an INTEGER, etc.
-*--
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_MAPGET0(X,Xtype,Itype) \
-static int MapGet0##X( AstKeyMap *this, const char *key, Xtype *value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ \
-   int itab;               /* Index of hash table element to use */ \
-   int result;             /* Returned flag */ \
-   int raw_type;           /* Data type of stored value */ \
-   unsigned long hash;     /* Full width hash value */ \
-   void *raw;              /* Pointer to stored value */ \
-\
-/* Initialise */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Use the hash function to determine the element of the hash table in \
-   which the key will be stored. */ \
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); \
-\
-/* Search the relevent table entry for the required MapEntry. */ \
-   mapentry = SearchTableEntry( this, itab, key, status ); \
-\
-/* Skip rest if the key was not found. */ \
-   if( mapentry ) { \
-\
-/* Get the address of the raw value, and its data type. */ \
-      raw_type = mapentry->type; \
-      if( raw_type == AST__INTTYPE ){ \
-         if( mapentry->nel == 0 ) { \
-            raw = &( ((Entry0I *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1I *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__DOUBLETYPE ){ \
-         if( mapentry->nel == 0 ) { \
-            raw = &( ((Entry0D *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1D *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__FLOATTYPE ){ \
-         if( mapentry->nel == 0 ) { \
-            raw = &( ((Entry0F *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1F *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__POINTERTYPE ){ \
-         if( mapentry->nel == 0 ) { \
-            raw = &( ((Entry0P *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1P *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__STRINGTYPE ){ \
-         if( mapentry->nel == 0 ) { \
-            raw = &( ((Entry0C *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1C *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__OBJECTTYPE ){ \
-         if( mapentry->nel == 0 ) { \
-            raw = &( ((Entry0A *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1A *)mapentry)->value; \
-         } \
-\
-      } else { \
-         raw = NULL; \
-         astError( AST__INTER, "astMapGet0<X>(KeyMap): Illegal map entry data " \
-                   "type %d encountered (internal AST programming error).", status, \
-                   raw_type ); \
-      } \
-\
-/* Convert the value, storing the result the supplied buffer. Report an \
-   error if conversion is not possible. */ \
-      if( !ConvertValue( raw, raw_type, value, Itype, status ) && astOK ){ \
-         astError( AST__MPGER, "astMapGet0" #X "(%s): The value of KeyMap key " \
-                   "\"%s\" cannot be read using the requested data " \
-                   "type.", status,astGetClass( this ), key ); \
-      } else { \
-         result = 1; \
-      } \
-\
-/* If the KeyError attribute is non-zero, report an error if the key is not \
-   found */ \
-   } else if( astGetKeyError( this ) && astOK ) { \
-      astError( AST__MPKER, "astMapGet0" #X "(%s): No value was found for " \
-                "%s in the supplied KeyMap.", status, astGetClass( this ), \
-                key ); \
-   } \
-\
-/* If an error occurred, return zero. */ \
-   if( !astOK ) result = 0; \
-\
-/* Return the result.*/ \
-   return result; \
-}
-
-/* Expand the above macro to generate a function for each required 
-   data type. */
-MAKE_MAPGET0(I,int,AST__INTTYPE)
-MAKE_MAPGET0(D,double,AST__DOUBLETYPE)
-MAKE_MAPGET0(F,float,AST__FLOATTYPE)
-MAKE_MAPGET0(C,const char *,AST__STRINGTYPE)
-MAKE_MAPGET0(A,AstObject *,AST__OBJECTTYPE)
-MAKE_MAPGET0(P,void *,AST__POINTERTYPE)
-
-/* Undefine the macro. */
-#undef MAKE_MAPGET0
-
-int astMapGet0AId_( AstKeyMap *this, const char *key, AstObject **value, int *status ) {
-/*
-*  Name:
-*     astMapGet0AId_
-
-*  Purpose:
-*     Get a scalar AstObject pointer from a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ast.h"
-*     int astMapGet0A( AstKeyMap *this, const char *key, AstObject **value )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is the public implementation of the astMapGet0A function
-*     It is identical to astMapGet0A_ except that an ID value is returned 
-*     via the "value" parameter instead of a true C pointer. This is required 
-*     because this conversion cannot be performed by the macro that invokes
-*     the function.
-
-*  Parameters:
-*     (see astMapGet0<X>)
-
-*/
-
-/* Local Variables: */
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */
-   int itab;               /* Index of hash table element to use */
-   int result;             /* Returned flag */
-   int raw_type;           /* Data type of stored value */
-   unsigned long hash;     /* Full width hash value */ 
-   void *raw;              /* Pointer to stored value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
-   which the key will be stored. */
-   itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
-   mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
-   if( mapentry ) {
-
-/* Get the address of the raw value, and its data type. */
-      raw_type = mapentry->type;
-      if( raw_type == AST__INTTYPE ){
-         if( mapentry->nel == 0 ) {
-            raw = &( ((Entry0I *)mapentry)->value );
-         } else {
-            raw = ((Entry1I *)mapentry)->value;
-         }
-
-      } else if( raw_type == AST__POINTERTYPE ){
-         if( mapentry->nel == 0 ) {
-            raw = &( ((Entry0P *)mapentry)->value );
-         } else {
-            raw = ((Entry1P *)mapentry)->value;
-         }
-
-      } else if( raw_type == AST__DOUBLETYPE ){
-         if( mapentry->nel == 0 ) {
-            raw = &( ((Entry0D *)mapentry)->value );
-         } else {
-            raw = ((Entry1D *)mapentry)->value;
-         }
-
-      } else if( raw_type == AST__FLOATTYPE ){
-         if( mapentry->nel == 0 ) {
-            raw = &( ((Entry0F *)mapentry)->value );
-         } else {
-            raw = ((Entry1F *)mapentry)->value;
-         }
-
-      } else if( raw_type == AST__STRINGTYPE ){
-         if( mapentry->nel == 0 ) {
-            raw = &( ((Entry0C *)mapentry)->value );
-         } else {
-            raw = ((Entry1C *)mapentry)->value;
-         }
-
-      } else if( raw_type == AST__OBJECTTYPE ){
-         if( mapentry->nel == 0 ) {
-            raw = &( ((Entry0A *)mapentry)->value );
-         } else {
-            raw = ((Entry1A *)mapentry)->value;
-         }
-
-      } else {
-         raw = NULL;
-         astError( AST__INTER, "astMapGet0<X>(KeyMap): Illegal map entry data "
-                   "type %d encountered (internal AST programming error).", status,
-                   raw_type );
-      }
-
-/* Convert the value, storing the result the supplied buffer. Report an
-   error if conversion is not possible. */
-      if( !ConvertValue( raw, raw_type, value, AST__OBJECTTYPE, status ) && astOK ){
-         astError( AST__MPGER, "astMapGet0A(%s): The value of KeyMap key "
-                   "\"%s\" cannot be read using the requested data "
-                   "type.", status, astGetClass( this ), key );
-      } else {
-         result = 1;
-      }
-
-/* If the KeyError attribute is non-zero, report an error if the key is not 
-   found */ 
-   } else if( astGetKeyError( this ) && astOK ) { 
-      astError( AST__MPKER, "astMapGet0A(%s): No value was found for " 
-                "%s in the supplied KeyMap.", status, astGetClass( this ), 
-                key ); 
-   }
-
-/* If required, return an ID value for the Object. */
-   if( result && *value ) *value = astMakeId( *value );
-
-/* Return the result.*/
-   return result;
-}
-
-/*
-*++
-*  Name:
-c     astMapGet1<X>
-f     AST_MAPGET1<X>
-
-*  Purpose:
-*     Get a vector value from a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "ast.h"
-c     int astMapGet1<X>( AstKeyMap *this, const char *key, int mxval, 
-c                        int *nval, <X>type *value )
-c     int astMapGet1C( AstKeyMap *this, const char *key, int l, int mxval, 
-c                      int *nval, const char *value )
-f     RESULT = AST_MAPGET1<X>( THIS, KEY, MXVAL, NVAL, VALUE, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is a set of functions for retrieving a vector value from a KeyMap. 
-*     You should replace <X> in the generic function name 
-c     astMapGet1<X> 
-f     AST_MAPGET1<X> 
-*     by an appropriate 1-character type code (see the "Data Type Codes" 
-*     section below for the code appropriate to each supported data type).
-*     The stored value is converted to the data type indiced by <X>
-*     before being returned (an error is reported if it is not possible to 
-*     convert the stored value to the requested data type).
-c     Note, the astMapGet1C function has an extra parameter "l" which
-c     specifies the maximum length of each string to be stored in the
-c     "value" buffer (see the "astMapGet1C" section below).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the value to be retrieved. Trailing 
-*        spaces are ignored.
-c     mxval
-f     MXVAL = INTEGER (Given)
-*        The number of elements in the 
-c        "value" array.
-f        VALUE array.
-c     nval
-f     NVAL = INTEGER (Returned)
-c        The address of an integer in which to put the
-f        The 
-*        number of elements stored in the
-c        "value" array. 
-*        Any unused elements of the array are left unchanged.
-c     value
-f     VALUE( MXVAL ) = <X>type (Returned)
-c        A pointer to an array in which to return the requested values. 
-f        The requested values. 
-*        If the requested key is not found, then the contents of the
-*        buffer on entry to this function will be unchanged on exit.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapGet1<X>()
-f     AST_MAPGET1<X> = LOGICAL
-f        A flag which is set to
-c        a non-zero value
-f        .TRUE.
-*        if the requested key name was found, and is set to
-c        zero
-f        .FALSE.
-*        otherwise.
-
-*  Notes:
-*     - No error is reported if the requested key cannot be found in the
-*     given KeyMap, but a
-c     zero
-f     .FALSE.
-*     value will be returned as the function value. The supplied array
-*     will be returned unchanged.
-*     - Key names are case sensitive, and white space is considered
-*     significant.
-*     - If the stored value is a scalar value, then the value will be
-*     returned in the first element of the supplied array, and 
-c     "nval"
-f     NVAL
-*     will be returned set to 1.
-
-c  astMapGet1C:
-c     The "value" buffer supplied to the astMapGet1C function should be a
-c     pointer to a character array with "mxval*l" elements, where "l" is
-c     the maximum length of a string to be returned. The value of "l"
-c     should be supplied as an extra parameter following "key" when
-c     invoking astMapGet1C, and should include space for a terminating
-c     null character.
-
-*  Data Type Codes:
-*     To select the appropriate 
-c     function, you should replace <X> in the generic function name astMapGet1<X>
-f     routine, you should replace <X> in the generic routine name AST_MAPGET1<X>
-*     with a 1-character data type code, so as to match the data type <X>type 
-*     of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - I: int
-c     - C: "const" pointer to null terminated character string
-c     - A: Pointer to AstObject
-c     - P: Generic "void *" pointer
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - C: CHARACTER
-f     - A: INTEGER used to identify an AstObject
-*
-c     For example, astMapGet1D would be used to get "double" values, while 
-c     astMapGet1I would be used to get "int" values, etc. For D or I, the 
-c     supplied "value" parameter should be a pointer to an array of doubles
-c     or ints, with "mxval" elements. For C, the supplied "value" parameter 
-c     should be a pointer to a character string with "mxval*l" elements.
-c     For A, the supplied "value" parameter should be a pointer to an
-c     array of AstObject pointers.
-f     For example, AST_MAPGET1D would be used to get DOUBLE PRECISION values,
-f     while AST_MAPGET1I would be used to get INTEGER values, etc.
-
-*--
-*/
-/* Define a macro to implement the function for a specific data type
-(excluding "C" since that needs an extra parameter). */
-#define MAKE_MAPGET1(X,Xtype,Itype) \
-static int MapGet1##X( AstKeyMap *this, const char *key, int mxval, int *nval, Xtype *value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ \
-   int i;                  /* Element index */ \
-   int itab;               /* Index of hash table element to use */ \
-   int nel;                /* Number of elements in raw vector */ \
-   int result;             /* Returned flag */ \
-   int raw_type;           /* Data type of stored value */ \
-   size_t raw_size;        /* Size of a single raw value */ \
-   unsigned long hash;     /* Full width hash value */ \
-   void *raw;              /* Pointer to stored value */ \
-\
-/* Initialise */ \
-   result = 0; \
-   *nval = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Use the hash function to determine the element of the hash table in \
-   which the key will be stored. */ \
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); \
-\
-/* Search the relevent table entry for the required MapEntry. */ \
-   mapentry = SearchTableEntry( this, itab, key, status ); \
-\
-/* Skip rest if the key was not found. */ \
-   if( mapentry ) { \
-      result = 1; \
-\
-/* Get the address of the first raw value, and its data type. Also get \
-   the size of each element of the vector. */ \
-      nel = mapentry->nel; \
-      raw_type = mapentry->type; \
-      if( raw_type == AST__INTTYPE ){ \
-         raw_size = sizeof( int ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0I *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1I *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__DOUBLETYPE ){ \
-         raw_size = sizeof( double ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0D *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1D *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__POINTERTYPE ){ \
-         raw_size = sizeof( void * ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0P *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1P *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__FLOATTYPE ){ \
-         raw_size = sizeof( float ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0F *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1F *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__STRINGTYPE ){ \
-         raw_size = sizeof( const char * ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0C *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1C *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__OBJECTTYPE ){ \
-         raw_size = sizeof( AstObject * ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0A *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1A *)mapentry)->value; \
-         } \
-\
-      } else { \
-         raw_size = 0; \
-         raw = NULL; \
-         astError( AST__INTER, "astMapGet1<X>(KeyMap): Illegal map entry data " \
-                   "type %d encountered (internal AST programming error).", status, \
-                   raw_type ); \
-      } \
-\
-/* Treat scalars as single-value vectors. */ \
-      if( nel == 0 ) nel = 1; \
-\
-/* Ensure no more than "mxval" values are returned. */ \
-      if( nel > mxval ) nel = mxval; \
-\
-/* Return the number of values stored in the buffer. */ \
-      *nval = nel; \
-\
-/* Loop round all values in the vector. */ \
-      for( i = 0; i < nel && astOK; i++ ) { \
-\
-/* Convert the value, storing the result in the supplied buffer. Report an \
-   error if conversion is not possible. */ \
-         if( !ConvertValue( raw, raw_type, value + i, Itype, status ) && astOK ){ \
-            astError( AST__MPGER, "astMapGet1" #X "(%s): The value of " \
-                      "element %d of KeyMap key \"%s\" cannot be read using " \
-                      "the requested data type.", status,astGetClass( this ), i + 1, key ); \
-         } \
-\
-/* Increment the pointers to the next raw value. */ \
-         raw = (char *) raw + raw_size; \
-      } \
-\
-/* If the KeyError attribute is non-zero, report an error if the key is not \
-   found */ \
-   } else if( astGetKeyError( this ) && astOK ) { \
-      astError( AST__MPKER, "astMapGet1" #X "(%s): No value was found for " \
-                "%s in the supplied KeyMap.", status, astGetClass( this ), \
-                key ); \
-   } \
-\
-/* If an error occurred,return zero. */ \
-   if( !astOK ) result = 0; \
-\
-/* Return the result.*/ \
-   return result; \
-}
-
-/* Expand the above macro to generate a function for each required 
-   data type (except C which is done differently). */
-MAKE_MAPGET1(I,int,AST__INTTYPE)
-MAKE_MAPGET1(D,double,AST__DOUBLETYPE)
-MAKE_MAPGET1(F,float,AST__FLOATTYPE)
-MAKE_MAPGET1(A,AstObject *,AST__OBJECTTYPE)
-MAKE_MAPGET1(P,void *,AST__POINTERTYPE)
-
-/* Undefine the macro. */
-#undef MAKE_MAPGET1
-
-
-static int MapGet1C( AstKeyMap *this, const char *key, int l, int mxval, 
-                     int *nval, char *value, int *status ) { 
-/*
-*  Name:
-*     MapGet1C
-
-*  Purpose:
-*     Get a vector value from a KeyMap.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "ast.h"
-*     int MapGet1C( AstKeyMap *this, const char *key, int l, int mxval, 
-*                   int *nval, char *value, int *status )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is the implementation of astMapGet1<X> for <X> = "C". We
-*     cannot use the MAKE_MAPGET1 macro for this because the string
-*     version of this function has an extra parameter giving the maximum
-*     length of each string which can be stored in the supplied buffer.
-
-*  Parameters:
-*     (see astMapGet1<X>)
-*/
-
-/* Local Variables: */ 
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ 
-   char *val;              /* Pointer to next buffer element */ 
-   const char *cvalue;     /* Pointer to converted string */ 
-   int i;                  /* Element index */
-   int itab;               /* Index of hash table element to use */
-   int nel;                /* Number of elements in raw vector */ 
-   int raw_type;           /* Data type of stored value */
-   int result;             /* Returned flag */
-   size_t raw_size;        /* Size of a single raw value */
-   unsigned long hash;     /* Full width hash value */
-   void *raw;              /* Pointer to stored value */ 
-
-/* Initialise */ 
-   result = 0; 
-   *nval = 0; 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return result; 
-
-/* Use the hash function to determine the element of the hash table in 
-   which the key will be stored. */ 
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); 
-
-/* Search the relevent table entry for the required MapEntry. */ 
-   mapentry = SearchTableEntry( this, itab, key, status ); 
-
-/* Skip rest if the key was not found. */ 
-   if( mapentry ) { 
-      result = 1; 
-
-/* Get the address of the first raw value, and its data type. Also get 
-   the size of each element of the vector. */ 
-      nel = mapentry->nel; 
-      raw_type = mapentry->type; 
-      if( raw_type == AST__INTTYPE ){ 
-         raw_size = sizeof( int ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0I *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1I *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__POINTERTYPE ){ 
-         raw_size = sizeof( void * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0P *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1P *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__DOUBLETYPE ){ 
-         raw_size = sizeof( double ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0D *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1D *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__FLOATTYPE ){ 
-         raw_size = sizeof( float ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0F *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1F *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__STRINGTYPE ){ 
-         raw_size = sizeof( const char * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0C *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1C *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__OBJECTTYPE ){ 
-         raw_size = sizeof( AstObject * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0A *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1A *)mapentry)->value; 
-         } 
-
-      } else { 
-         raw_size = 0; 
-         raw = NULL; 
-         astError( AST__INTER, "astMapGet1C(KeyMap): Illegal map entry data " 
-                   "type %d encountered (internal AST programming error).", status, 
-                   raw_type ); 
-      } 
-
-/* Treat scalars as single-value vectors. */ 
-      if( nel == 0 ) nel = 1; 
-
-/* Ensure no more than "mxval" values are returned. */
-      if( nel > mxval ) nel = mxval;
-
-/* Return the number of values stored in the buffer. */
-      *nval = nel;
-
-/* Loop round all values in the vector. */ 
-      val = value;
-      for( i = 0; i < nel && astOK; i++ ) { 
-
-/* Convert the value, storing the result in the supplied buffer. Report an 
-   error if conversion is not possible. */ 
-         if( !ConvertValue( raw, raw_type, &cvalue, AST__STRINGTYPE, status ) && astOK ){ 
-            astError( AST__MPGER, "astMapGet1C(%s): The value of " 
-                      "element %d of KeyMap key \"%s\" cannot be read using " 
-                      "the requested data type.", status,astGetClass( this ), i + 1, key ); 
-
-/* If succesful, copy the string into the supplied buffer, or as much of
-   it as will fit. Leave room for a trailing null character. */
-         } else {
-            strncpy( val, cvalue, l - 1 );
-            val[ l - 1 ] = 0;
-         }
-
-/* Increment the pointers to the next raw value and the next buffer
-   location. */
-         raw = (char *) raw + raw_size;
-         val += l;
-      } 
-
-/* If the KeyError attribute is non-zero, report an error if the key is not 
-   found */ 
-   } else if( astGetKeyError( this ) && astOK ) { 
-      astError( AST__MPKER, "astMapGet1C(%s): No value was found for " 
-                "%s in the supplied KeyMap.", status, astGetClass( this ), 
-                key ); 
-   } 
-
-/* If an error occurred,return zero. */ 
-   if( !astOK ) result = 0; 
-
-/* Return the result.*/ 
-   return result; 
-}
-
-int astMapGet1AId_( AstKeyMap *this, const char *key, int mxval, int *nval, 
-                    AstObject **value, int *status ) { 
-/*
-*  Name:
-*     astMapGet1AId_
-
-*  Purpose:
-*     Get a vector of AstObject pointers from a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ast.h"
-*     int astMapGet1A( AstKeyMap *this, const char *key, int mxval, int *nval, 
-*                      AstObject **value )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is the public implementation of the astMapGet1A function
-*     It is identical to astMapGet1A_ except that ID values are returned 
-*     via the "value" parameter instead of a true C pointers. This is required 
-*     because this conversion cannot be performed by the macro that invokes
-*     the function.
-
-*  Parameters:
-*     (see astMapGet1<X>)
-
-*/
-
-/* Local Variables: */ 
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ 
-   AstObject *avalue;      /* Pointer to AstObject */
-   int i;                  /* Element index */
-   int itab;               /* Index of hash table element to use */
-   int nel;                /* Number of elements in raw vector */ 
-   int raw_type;           /* Data type of stored value */
-   int result;             /* Returned flag */
-   size_t raw_size;        /* Size of a single raw value */
-   unsigned long hash;     /* Full width hash value */
-   void *raw;              /* Pointer to stored value */ 
-
-/* Initialise */ 
-   result = 0; 
-   *nval = 0; 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return result; 
-
-/* Use the hash function to determine the element of the hash table in 
-   which the key will be stored. */ 
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); 
-
-/* Search the relevent table entry for the required MapEntry. */ 
-   mapentry = SearchTableEntry( this, itab, key, status ); 
-
-/* Skip rest if the key was not found. */ 
-   if( mapentry ) { 
-      result = 1; 
-
-/* Get the address of the first raw value, and its data type. Also get 
-   the size of each element of the vector. */ 
-      nel = mapentry->nel; 
-      raw_type = mapentry->type; 
-      if( raw_type == AST__INTTYPE ){ 
-         raw_size = sizeof( int ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0I *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1I *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__DOUBLETYPE ){ 
-         raw_size = sizeof( double ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0D *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1D *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__POINTERTYPE ){ 
-         raw_size = sizeof( void * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0P *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1P *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__FLOATTYPE ){ 
-         raw_size = sizeof( float ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0F *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1F *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__STRINGTYPE ){ 
-         raw_size = sizeof( const char * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0C *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1C *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__OBJECTTYPE ){ 
-         raw_size = sizeof( AstObject * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0A *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1A *)mapentry)->value; 
-         } 
-
-      } else { 
-         raw_size = 0; 
-         raw = NULL; 
-         astError( AST__INTER, "astMapGet1A(KeyMap): Illegal map entry data " 
-                   "type %d encountered (internal AST programming error).", 
-                   status, raw_type ); 
-      } 
-
-/* Treat scalars as single-value vectors. */ 
-      if( nel == 0 ) nel = 1; 
-
-/* Ensure no more than "mxval" values are returned. */
-      if( nel > mxval ) nel = mxval;
-
-/* Return the number of values stored in the buffer. */
-      *nval = nel;
-
-/* Loop round all values in the vector. */ 
-      for( i = 0; i < nel && astOK; i++ ) { 
-
-/* Convert the value, storing the result in the supplied buffer. Report an 
-   error if conversion is not possible. */ 
-         if( !ConvertValue( raw, raw_type, &avalue, AST__OBJECTTYPE, status ) && astOK ){ 
-            astError( AST__MPGER, "astMapGet1A(%s): The value of " 
-                      "element %d of KeyMap key \"%s\" cannot be read using " 
-                      "the requested data type.", status, astGetClass( this ),
-                      i + 1, key ); 
-
-/* If succesful, return an ID value for the Object. */
-         } else {
-           value[ i ] = avalue ? astMakeId( avalue ) : NULL;
-         }
-
-/* Increment the pointers to the next raw value. */
-         raw = (char *) raw + raw_size;
-      } 
-
-/* If the KeyError attribute is non-zero, report an error if the key is not 
-   found */ 
-   } else if( astGetKeyError( this ) && astOK ) { 
-      astError( AST__MPKER, "astMapGet1A(%s): No value was found for " 
-                "%s in the supplied KeyMap.", status, astGetClass( this ), 
-                key ); 
-   } 
-
-/* If an error occurred,return zero. */ 
-   if( !astOK ) result = 0; 
-
-/* Return the result.*/ 
-   return result; 
-}
-
-/*
-*++
-*  Name:
-c     astMapGetElem<X>
-f     AST_MAPGETELEM<X>
-
-*  Purpose:
-*     Get a single element of a vector value from a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "ast.h"
-c     int astMapGetElem<X>( AstKeyMap *this, const char *key, int elem, 
-c                           <X>type *value )
-c     int astMapGetElemC( AstKeyMap *this, const char *key, int l, int elem,
-c                         const char *value )
-f     RESULT = AST_MAPGETELEM<X>( THIS, KEY, ELEM, VALUE, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is a set of functions for retrieving a single element of a vector 
-*     value from a KeyMap. You should replace <X> in the generic function name 
-c     astMapGetElem<X> 
-f     AST_MAPGETELEM<X> 
-*     by an appropriate 1-character type code (see the "Data Type Codes" 
-*     section below for the code appropriate to each supported data type).
-*     The stored value is converted to the data type indiced by <X>
-*     before being returned (an error is reported if it is not possible to 
-*     convert the stored value to the requested data type).
-c     Note, the astMapGetElemC function has an extra parameter "l" which
-c     specifies the maximum length of the string to be stored in the
-c     "value" buffer (see the "astMapGetElemC" section below).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the value to be retrieved. Trailing 
-*        spaces are ignored.
-c     elem
-f     ELEM = INTEGER (Given)
-*        The index of the required vector element, starting at 
-c        zero.
-f        one.
-*        An error will be reported if the value is outside the range of
-*        the vector.
-c     value
-f     VALUE = <X>type (Returned)
-c        A pointer to a buffer in which to return the requested value. 
-f        The requested value. 
-*        If the requested key is not found, then the contents of the
-*        buffer on entry to this function will be unchanged on exit.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapGetElem<X>()
-f     AST_MAPGETELEM<X> = LOGICAL
-f        A flag which is set to
-c        a non-zero value
-f        .TRUE.
-*        if the requested key name was found, and is set to
-c        zero
-f        .FALSE.
-*        otherwise.
-
-*  Notes:
-*     - No error is reported if the requested key cannot be found in the
-*     given KeyMap, but a
-c     zero
-f     .FALSE.
-*     value will be returned as the function value.
-*     - Key names are case sensitive, and white space is considered
-*     significant.
-
-c  astMapGetElemC:
-c     The "value" buffer supplied to the astMapGetElemC function should be a
-c     pointer to a character array with "l" elements, where "l" is the 
-c     maximum length of the string to be returned. The value of "l"
-c     should be supplied as an extra parameter following "key" when
-c     invoking astMapGetElemC, and should include space for a terminating
-c     null character.
-
-*  Data Type Codes:
-*     To select the appropriate 
-c     function, you should replace <X> in the generic function name
-c     astMapGetElem<X>
-f     routine, you should replace <X> in the generic routine name 
-f     AST_MAPGETELEM<X>
-*     with a 1-character data type code, so as to match the data type <X>type 
-*     of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - I: int
-c     - C: "const" pointer to null terminated character string
-c     - A: Pointer to AstObject
-c     - P: Generic "void *" pointer
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - C: CHARACTER
-f     - A: INTEGER used to identify an AstObject
-*
-c     For example, astMapGetElemD would be used to get a "double" value, while 
-c     astMapGetElemI would be used to get an "int" value, etc. For D or I, the 
-c     supplied "value" parameter should be a pointer to a double or int. For 
-c     C, the supplied "value" parameter should be a pointer to a character 
-c     string with "l" elements. For A, the supplied "value" parameter should 
-c     be a pointer to an AstObject pointer.
-f     For example, AST_MAPGETELEMD would be used to get a DOUBLE PRECISION 
-f     value, while AST_MAPGETELEMI would be used to get an INTEGER value, etc.
-
-*--
-*/
-/* Define a macro to implement the function for a specific data type
-(excluding "C" since that needs an extra parameter). */
-#define MAKE_MAPGETELEM(X,Xtype,Itype) \
-static int MapGetElem##X( AstKeyMap *this, const char *key, int elem, \
-                          Xtype *value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ \
-   int itab;               /* Index of hash table element to use */ \
-   int nel;                /* Number of elements in raw vector */ \
-   int result;             /* Returned flag */ \
-   int raw_type;           /* Data type of stored value */ \
-   size_t raw_size;        /* Size of a single raw value */ \
-   unsigned long hash;     /* Full width hash value */ \
-   void *raw;              /* Pointer to stored value */ \
-\
-/* Initialise */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Use the hash function to determine the element of the hash table in \
-   which the key will be stored. */ \
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); \
-\
-/* Search the relevent table entry for the required MapEntry. */ \
-   mapentry = SearchTableEntry( this, itab, key, status ); \
-\
-/* Skip rest if the key was not found. */ \
-   if( mapentry ) { \
-      result = 1; \
-\
-/* Get the address of the first raw value, and its data type. Also get \
-   the size of each element of the vector. */ \
-      nel = mapentry->nel; \
-      raw_type = mapentry->type; \
-      if( raw_type == AST__INTTYPE ){ \
-         raw_size = sizeof( int ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0I *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1I *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__DOUBLETYPE ){ \
-         raw_size = sizeof( double ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0D *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1D *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__POINTERTYPE ){ \
-         raw_size = sizeof( void * ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0P *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1P *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__FLOATTYPE ){ \
-         raw_size = sizeof( float ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0F *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1F *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__STRINGTYPE ){ \
-         raw_size = sizeof( const char * ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0C *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1C *)mapentry)->value; \
-         } \
-\
-      } else if( raw_type == AST__OBJECTTYPE ){ \
-         raw_size = sizeof( AstObject * ); \
-         if( nel == 0 ) { \
-            raw = &( ((Entry0A *)mapentry)->value ); \
-         } else { \
-            raw = ((Entry1A *)mapentry)->value; \
-         } \
-\
-      } else { \
-         raw_size = 0; \
-         raw = NULL; \
-         astError( AST__INTER, "astMapGetElem<X>(KeyMap): Illegal map entry " \
-                   "data type %d encountered (internal AST programming " \
-                   "error).", status, raw_type ); \
-      } \
-\
-/* Treat scalars as single-value vectors. */ \
-      if( nel == 0 ) nel = 1; \
-\
-/* Ensure the requested element is within the bounds of the vector */ \
-      if( elem >= nel || elem < 0 ) { \
-         if( astOK ) { \
-            astError( AST__MPVIN, "astMapGetElem<X>(KeyMap): Illegal " \
-                      "zero-based vector index %d supplied for KeyMap " \
-                      "entry '%s' - the vector has %d elements.", status, \
-                      elem, key, nel ); \
-         } \
-\
-/* Get a pointer to the requested raw value. */ \
-      } else { \
-         raw = (char *) raw + elem*raw_size; \
-\
-/* Convert the requested value, storing the result in the supplied buffer. \
-   Report an error if conversion is not possible. */ \
-         if( !ConvertValue( raw, raw_type, value, Itype, status ) && astOK ){ \
-            astError( AST__MPGER, "astMapGetElem" #X "(%s): The value of " \
-                      "element %d of KeyMap key \"%s\" cannot be read using " \
-                      "the requested data type.", status, astGetClass( this ), \
-                      elem + 1, key ); \
-         } \
-      } \
-\
-/* If the KeyError attribute is non-zero, report an error if the key is not \
-   found */ \
-   } else if( astGetKeyError( this ) && astOK ) { \
-      astError( AST__MPKER, "astMapGetElem" #X "(%s): No value was found for " \
-                "%s in the supplied KeyMap.", status, astGetClass( this ), \
-                key ); \
-   } \
-\
-/* If an error occurred,return zero. */ \
-   if( !astOK ) result = 0; \
-\
-/* Return the result.*/ \
-   return result; \
-}
-
-/* Expand the above macro to generate a function for each required 
-   data type (except C which is done differently). */
-MAKE_MAPGETELEM(I,int,AST__INTTYPE)
-MAKE_MAPGETELEM(D,double,AST__DOUBLETYPE)
-MAKE_MAPGETELEM(F,float,AST__FLOATTYPE)
-MAKE_MAPGETELEM(A,AstObject *,AST__OBJECTTYPE)
-MAKE_MAPGETELEM(P,void *,AST__POINTERTYPE)
-
-/* Undefine the macro. */
-#undef MAKE_MAPGETELEM
-
-
-static int MapGetElemC( AstKeyMap *this, const char *key, int l, int elem, 
-                        char *value, int *status ) { 
-/*
-*  Name:
-*     MapGetElemC
-
-*  Purpose:
-*     Get a single element of a vector value from a KeyMap.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "ast.h"
-*     int MapGetElemC( AstKeyMap *this, const char *key, int l, int elem, 
-*                      char *value, int *status )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is the implementation of astMapGetElem<X> for <X> = "C". We
-*     cannot use the MAKE_MAPGETELEM macro for this because the string
-*     version of this function has an extra parameter giving the maximum
-*     length of each string which can be stored in the supplied buffer.
-
-*  Parameters:
-*     (see astMapGetElem<X>)
-*/
-
-/* Local Variables: */ 
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ 
-   const char *cvalue;     /* Pointer to converted string */ 
-   int itab;               /* Index of hash table element to use */
-   int nel;                /* Number of elements in raw vector */ 
-   int raw_type;           /* Data type of stored value */
-   int result;             /* Returned flag */
-   size_t raw_size;        /* Size of a single raw value */
-   unsigned long hash;     /* Full width hash value */
-   void *raw;              /* Pointer to stored value */ 
-
-/* Initialise */ 
-   result = 0; 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return result; 
-
-/* Use the hash function to determine the element of the hash table in 
-   which the key will be stored. */ 
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); 
-
-/* Search the relevent table entry for the required MapEntry. */ 
-   mapentry = SearchTableEntry( this, itab, key, status ); 
-
-/* Skip rest if the key was not found. */ 
-   if( mapentry ) { 
-      result = 1; 
-
-/* Get the address of the first raw value, and its data type. Also get 
-   the size of each element of the vector. */ 
-      nel = mapentry->nel; 
-      raw_type = mapentry->type; 
-      if( raw_type == AST__INTTYPE ){ 
-         raw_size = sizeof( int ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0I *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1I *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__POINTERTYPE ){ 
-         raw_size = sizeof( void * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0P *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1P *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__DOUBLETYPE ){ 
-         raw_size = sizeof( double ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0D *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1D *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__FLOATTYPE ){ 
-         raw_size = sizeof( float ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0F *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1F *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__STRINGTYPE ){ 
-         raw_size = sizeof( const char * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0C *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1C *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__OBJECTTYPE ){ 
-         raw_size = sizeof( AstObject * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0A *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1A *)mapentry)->value; 
-         } 
-
-      } else { 
-         raw_size = 0; 
-         raw = NULL; 
-         astError( AST__INTER, "astMapGetElemC(KeyMap): Illegal map entry data " 
-                   "type %d encountered (internal AST programming error).", status, 
-                   raw_type ); 
-      } 
-
-/* Treat scalars as single-value vectors. */ 
-      if( nel == 0 ) nel = 1; 
-
-/* Ensure the requested element is within the bounds of the vector */ 
-      if( elem >= nel || elem < 0 ) { 
-         if( astOK ) {
-            astError( AST__MPVIN, "astMapGetElemC(KeyMap): Illegal vector "
-                      "index %d supplied for KeyMap entry '%s' - should be "
-                      "in the range 1 to %d.", status, elem + 1, key, nel + 1 );
-         }
-
-/* Get a pointer to the requested raw value. */
-      } else {
-         raw = (char *) raw + elem*raw_size; 
-
-/* Convert the value, storing the result in the supplied buffer. Report an 
-   error if conversion is not possible. */ 
-         if( !ConvertValue( raw, raw_type, &cvalue, AST__STRINGTYPE, status ) && astOK ){ 
-            astError( AST__MPGER, "astMapGetElemC(%s): The value of " 
-                      "element %d of KeyMap key \"%s\" cannot be read using " 
-                      "the requested data type.", status,astGetClass( this ), 
-                      elem + 1, key ); 
-
-/* If succesful, copy the string into the supplied buffer, or as much of
-   it as will fit. Leave room for a trailing null character. */
-         } else {
-            strncpy( value, cvalue, l - 1 );
-            value[ l - 1 ] = 0;
-         }
-      } 
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
-   found */
-   } else if( astGetKeyError( this ) && astOK ) {
-      astError( AST__MPKER, "astMapGetElemC(%s): No value was found for "
-                "%s in the supplied KeyMap.", status, astGetClass( this ),
-                key );
-   } 
-
-/* If an error occurred,return zero. */ 
-   if( !astOK ) result = 0; 
-
-/* Return the result.*/ 
-   return result; 
-}
-
-int astMapGetElemAId_( AstKeyMap *this, const char *key, int elem, 
-                       AstObject **value, int *status ) { 
-/*
-*  Name:
-*     astMapGetElemAId_
-
-*  Purpose:
-*     Get a single element of a vector of AstObject pointers from a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ast.h"
-*     int astMapGetElemA( AstKeyMap *this, const char *key, int elem, 
-*                         AstObject **value )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This is the public implementation of the astMapGetElemA function
-*     It is identical to astMapGetElemA_ except that an ID value is returned 
-*     via the "value" parameter instead of a true C pointer. This is required 
-*     because this conversion cannot be performed by the macro that invokes
-*     the function.
-
-*  Parameters:
-*     (see astMapGet1<X>)
-
-*/
-
-/* Local Variables: */ 
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ 
-   AstObject *avalue;      /* Pointer to AstObject */
-   int itab;               /* Index of hash table element to use */
-   int nel;                /* Number of elements in raw vector */ 
-   int raw_type;           /* Data type of stored value */
-   int result;             /* Returned flag */
-   size_t raw_size;        /* Size of a single raw value */
-   unsigned long hash;     /* Full width hash value */
-   void *raw;              /* Pointer to stored value */ 
-
-/* Initialise */ 
-   result = 0; 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return result; 
-
-/* Use the hash function to determine the element of the hash table in 
-   which the key will be stored. */ 
-   itab = HashFun( key, this->mapsize - 1, &hash, status ); 
-
-/* Search the relevent table entry for the required MapEntry. */ 
-   mapentry = SearchTableEntry( this, itab, key, status ); 
-
-/* Skip rest if the key was not found. */ 
-   if( mapentry ) { 
-      result = 1; 
-
-/* Get the address of the first raw value, and its data type. Also get 
-   the size of each element of the vector. */ 
-      nel = mapentry->nel; 
-      raw_type = mapentry->type; 
-      if( raw_type == AST__INTTYPE ){ 
-         raw_size = sizeof( int ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0I *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1I *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__DOUBLETYPE ){ 
-         raw_size = sizeof( double ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0D *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1D *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__POINTERTYPE ){ 
-         raw_size = sizeof( void * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0P *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1P *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__FLOATTYPE ){ 
-         raw_size = sizeof( float ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0F *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1F *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__STRINGTYPE ){ 
-         raw_size = sizeof( const char * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0C *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1C *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__OBJECTTYPE ){ 
-         raw_size = sizeof( AstObject * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0A *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1A *)mapentry)->value; 
-         } 
-
-      } else { 
-         raw_size = 0; 
-         raw = NULL; 
-         astError( AST__INTER, "astMapGetElemA(KeyMap): Illegal map entry data " 
-                   "type %d encountered (internal AST programming error).", status, 
-                   raw_type ); 
-      } 
-
-/* Treat scalars as single-value vectors. */ 
-      if( nel == 0 ) nel = 1; 
-
-/* Ensure the requested element is within the bounds of the vector */
-      if( elem >= nel || elem < 0 ) {
-         if( astOK ) {
-            astError( AST__MPVIN, "astMapGetElemA(KeyMap): Illegal vector "
-                      "index %d supplied for KeyMap entry '%s' - should be "
-                      "in the range 1 to %d.", status, elem + 1, key, nel + 1 );
-         }
-
-/* Get a pointer to the requested raw value. */
-      } else {
-         raw = (char *) raw + elem*raw_size;
-
-/* Convert the value, storing the result in the supplied buffer. Report an 
-   error if conversion is not possible. */ 
-         if( !ConvertValue( raw, raw_type, &avalue, AST__OBJECTTYPE, status ) && astOK ){ 
-            astError( AST__MPGER, "astMapGetElemA(%s): The value of " 
-                      "element %d of KeyMap key \"%s\" cannot be read using " 
-                      "the requested data type.", status,astGetClass( this ), 
-                      elem + 1, key ); 
-
-/* If succesful, return an ID value for the Object. */
-         } else {
-            *value = avalue ? astMakeId( avalue ) : NULL;
-         }
-      } 
-
-/* If the KeyError attribute is non-zero, report an error if the key is not
-   found */
-   } else if( astGetKeyError( this ) && astOK ) {
-      astError( AST__MPKER, "astMapGetElemA(%s): No value was found for "
-                "%s in the supplied KeyMap.", status, astGetClass( this ),
-                key );
-   } 
-
-/* If an error occurred,return zero. */ 
-   if( !astOK ) result = 0; 
-
-/* Return the result.*/ 
-   return result; 
-}
-
-static int MapHasKey( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-*  Name:
-c     astMapHasKey
-f     AST_MAPHASKEY
-
-*  Purpose:
-*     Check if an entry with a given key exists in a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     int astMapHasKey( AstKeyMap *this, const char *key )
-f     RESULT = AST_MAPHASKEY( THIS, KEY, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns a flag indicating if the KeyMap contains an
-*     entry with the given key.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the KeyMap entry. Trailing spaces are 
-*        ignored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapHasKey()
-f     AST_MAPHASKEY = LOGICAL
-c        Non-zero if the key was found, and zero otherwise.
-f        .TRUE. if the key was found, and .FALSE. otherwise.
-
-*  Notes:
-*     - A function value of 
-c     zero 
-f     .FALSE.
-*     will be returned if an error has already occurred, or if this 
-*     function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
-   AstMapEntry *mapentry;  /* Pointer to entry in linked list */
-   int itab;               /* Index of hash table element to use */
-   int result;             /* Returned value */
-   unsigned long hash;     /* Full width hash value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
-   which the key will be stored. */
-   itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
-   mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Set a non-zero return value if the key was found. */
-   if( mapentry ) result = 1;
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-
-}
-
-static void MapRemove( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-*  Name:
-c     astMapRemove
-f     AST_MAPREMOVE
-
-*  Purpose:
-*     Removed a named entry from a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     void astMapRemove( AstKeyMap *this, const char *key )
-f     CALL AST_MAPREMOVE( THIS, KEY, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     removes a named entry from a KeyMap. It returns without action if the
-*     KeyMap does not contain the specified key.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the value to be retrieved. Trailing 
-*        spaces are ignored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-*--
-*/
-
-/* Local Variables: */
-   int itab;               /* Index of hash table element to use */
-   unsigned long hash;     /* Full width hash value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Use the hash function to determine the element of the hash table in 
-   which the key will be stored. */
-   itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry and remove it. */
-   RemoveTableEntry( this, itab, key, status );
-
-}
-
-static int MapSize( AstKeyMap *this, int *status ) {
-/*
-*++
-*  Name:
-c     astMapSize
-f     AST_MAPSIZE
-
-*  Purpose:
-*     Get the number of entries in a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     int astMapSize( AstKeyMap *this )
-f     RESULT = AST_MAPSIZE( THIS, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns the number of entries in a KeyMap.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapSize()
-f     AST_MAPSIZE = INTEGER
-*        The number of entries in the KeyMap.
-
-*  Notes:
-*     - A function value of zero will be returned if an error has already
-*     occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
-   int itab;               /* Index of hash table element to use */
-   int result;             /* Returned value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Add up the number of entries in all elements of the hash table. */
-   for( itab = 0; itab < this->mapsize; itab++ ) result += this->nentry[ itab ];
-
-/* Return the result. */
-   return result;
-
-}
-
-static int MapLenC( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-*  Name:
-c     astMapLenC
-f     AST_MAPLENC
-
-*  Purpose:
-*     Get the number of characters in a character entry in a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     int astMapLenC( AstKeyMap *this, const char *key )
-f     RESULT = AST_MAPLENC( THIS, KEY, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns the minimum length which a character variable 
-*     which must have in order to be able to store a specified entry in
-*     the supplied KeyMap. If the named entry is a vector entry, then the
-*     returned value is the length of the longest element of the vector
-*     value.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the KeyMap entry. Trailing 
-*        spaces are ignored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapLenC()
-f     AST_MAPLENC = INTEGER
-*        The length (i.e. number of characters) of the longest formatted
-*        value associated with the named entry.
-c        This does not include the trailing null character.
-
-*  Notes:
-*     - A function value of zero will be returned without error if the 
-*     named entry cannot be formatted as a character string.
-*     - A function value of zero will be returned if an error has already
-*     occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
-   AstMapEntry *mapentry;  /* Pointer to parent MapEntry structure */ 
-   int i;                  /* Element index */
-   int itab;               /* Index of hash table element to use */
-   int l;                  /* Length of formatted vector element */
-   int nel;                /* Number of elements in raw vector */ 
-   int raw_type;           /* Data type of stored value */
-   int result;             /* Returned value */
-   size_t raw_size;        /* Size of a single raw value */
-   unsigned long hash;     /* Full width hash value */
-   void *raw;              /* Pointer to stored value */ 
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
-   which the key will be stored. */
-   itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
-   mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
-   if( mapentry ) {
-
-/* Get the address of the first raw value, and its data type. Also get 
-   the size of each element of the vector. */ 
-      nel = mapentry->nel; 
-      raw_type = mapentry->type; 
-      if( raw_type == AST__INTTYPE ){ 
-         raw_size = sizeof( int ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0I *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1I *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__POINTERTYPE ){ 
-         raw_size = sizeof( void * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0P *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1P *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__DOUBLETYPE ){ 
-         raw_size = sizeof( double ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0D *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1D *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__FLOATTYPE ){ 
-         raw_size = sizeof( float ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0F *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1F *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__STRINGTYPE ){ 
-         raw_size = sizeof( const char * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0C *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1C *)mapentry)->value; 
-         } 
-
-      } else if( raw_type == AST__OBJECTTYPE ){ 
-         raw_size = sizeof( AstObject * ); 
-         if( nel == 0 ) { 
-            raw = &( ((Entry0A *)mapentry)->value ); 
-         } else { 
-            raw = ((Entry1A *)mapentry)->value; 
-         } 
-
-      } else { 
-         raw_size = 0; 
-         raw = NULL; 
-         astError( AST__INTER, "astMapLenC(KeyMap): Illegal map entry data " 
-                   "type %d encountered (internal AST programming error).", status, 
-                   raw_type ); 
-      } 
-
-/* Treat scalars as single-value vectors. */ 
-      if( nel == 0 ) nel = 1; 
-
-/* Initialise the maximum length of any formatted value in the entry. */
-      result= 0;
-
-/* Loop round all values in the vector. */ 
-      for( i = 0; i < nel && astOK; i++ ) { 
-
-/* Go through the motions of formatting the value. We do not actually
-   need the formatted string (just its length) so we provide a NULL pointer
-   for the output buffer. The entry is ignored if it cannot be formatted. */
-         l = ConvertValue( raw, raw_type, NULL, AST__STRINGTYPE, status );
-         if( l > result ) result = l;
-
-/* Increment the pointer to the next raw value. */
-         raw = (char *) raw + raw_size;
-      } 
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-
-}
-
-static int MapLength( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-*  Name:
-c     astMapLength
-f     AST_MAPLENGTH
-
-*  Purpose:
-*     Get the vector length of an entry in a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     int astMapLength( AstKeyMap *this, const char *key )
-f     RESULT = AST_MAPLENGTH( THIS, KEY, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns the vector length of a named entry in a KeyMap,
-*     (that is, how many values are associated with the entry).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the KeyMap entry. Trailing 
-*        spaces are ignored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapLength()
-f     AST_MAPLENGTH = INTEGER
-*        The length of the entry. One for a scalar, greater than one for
-*        a vector. A value of zero is returned if the KeyMap does not
-*        contain the named entry.
-
-*  Notes:
-*     - A function value of zero will be returned if an error has already
-*     occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
-   AstMapEntry *mapentry;  /* Pointer to entry in linked list */
-   int itab;               /* Index of hash table element to use */
-   int result;             /* Returned value */
-   unsigned long hash;     /* Full width hash value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
-   which the key will be stored. */
-   itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
-   mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Skip rest if the key was not found. */
-   if( mapentry ) {
-
-/* Store the netry length */
-      result = mapentry->nel;
-
-/* Return 1 for a scalar. */
-      if( result == 0 ) result = 1;
-
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-
-}
-
-static int MapType( AstKeyMap *this, const char *key, int *status ) {
-/*
-*++
-*  Name:
-c     astMapType
-f     AST_MAPTYPE
-
-*  Purpose:
-*     Get the data type of an entry in a KeyMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     int astMapType( AstKeyMap *this, const char *key )
-f     RESULT = AST_MAPTYPE( THIS, KEY, STATUS )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns a value indicating the data type of a
-*     named entry in a KeyMap. This is the data type which was used when the
-*     entry was added to the KeyMap.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the KeyMap.
-c     key
-f     KEY = CHARACTER * ( * ) (Given)
-*        The character string identifying the KeyMap entry. Trailing 
-*        spaces are ignored.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapType()
-f     AST_MAPTYPE = INTEGER
-*        One of AST__INTTYPE (for integer), AST__DOUBLETYPE (for double
-*        precision floating point), AST__FLOATTYPE (for single 
-*        precision floating point), AST__STRINGTYPE (for character string)
-*        or AST__OBJECTTYPE (for AST Object pointer). AST__BADTYPE is
-*        returned if the supplied key is not found in the KeyMap.
-
-*  Notes:
-*     - A function value of AST__BADTYPE will be returned if an error has 
-*     already occurred, or if this function should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
-   AstMapEntry *mapentry;  /* Pointer to entry in linked list */
-   int itab;               /* Index of hash table element to use */
-   int result;             /* Returned value */
-   unsigned long hash;     /* Full width hash value */
-
-/* Initialise */
-   result = AST__BADTYPE;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Use the hash function to determine the element of the hash table in
-   which the key will be stored. */
-   itab = HashFun( key, this->mapsize - 1, &hash, status );
-
-/* Search the relevent table entry for the required MapEntry. */
-   mapentry = SearchTableEntry( this, itab, key, status );
-
-/* Store the type if found. */
-   if( mapentry ) result = mapentry->type;
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = AST__BADTYPE;
-
-/* Return the result. */
-   return result;
-
-}
-
-static void NewTable( AstKeyMap *this, int size, int *status ){
-/*
-*  Name:
-*     NewTable
-
-*  Purpose:
-*     Create a new hash table.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void NewTable( AstKeyMap *this, int size, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function removes any existing hash table and allocates memory
-*     for a new one of the specified size (except that the supplied size
-*     is modified to be the next higher power of 2). The table is 
-*     initialised to indicate that it is empty.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     size
-*        The reuqired size of the hash table.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int i;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Ensure the table size is at least MIN_TABLE_SIZE and is a power of 2. */
-   if( size <= MIN_TABLE_SIZE ) {
-      size = MIN_TABLE_SIZE;
-   } else {
-      size = (int) ( 0.5 + pow( 2.0, ceil( log( size )/log( 2.0 ) ) ) );
-   }
-
-/* Remove any existing entries. */
-   for( i = 0; i < this->mapsize; i++ ) FreeTableEntry( this, i, status );
-
-/* Do nothing more if the table size is not changing. */
-   if( size != this->mapsize ) {
-
-/* Modify the size of the existing table. */
-      this->mapsize = size;
-      this->table = astGrow( this->table, size, sizeof( AstMapEntry * ) );
-      this->nentry = astGrow( this->nentry, size, sizeof( int ) );
-
-/* Initialise the new table. */
-      if( astOK ) {
-         for( i = 0; i < size; i++ ) {
-            this->table[ i ] = NULL;
-            this->nentry[ i ] = 0;
-         }
-      }
-   }
-}
-
-static void RemoveTableEntry( AstKeyMap *this, int itab, const char *key, int *status ){
-/*
-*  Name:
-*     RemoveTableEntry
-
-*  Purpose:
-*     Remove an entry from a linked-list of KeyMap entries.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void RemoveTableEntry( AstKeyMap *this, int itab, const char *key, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function removes any entries with the specified key from the
-*     linked-list of entries stored at the specified entry of the hash
-*     table. If the supplied key is not found in the list, the function 
-*     returns without action.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     itab
-*        Index of the hash table element to be searched.
-*     key
-*        The key string to be searched for. Trailing spaces are ignored.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapEntry **link;    /* Address to store foward link */
-   AstMapEntry *next;     /* Pointer to next Entry to copy */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* The "next" variable holds the address of the next MapEntry to be
-   checked. Initialise this to the MapEntry at the head of the linked
-   list associated with the supplied element of he hash table. */
-   next = this->table[ itab ];
-
-/* The "link" variable holds the address of the location at which the
-   pointer to the MapEntry following the removed MapEntry should be stored. 
-   Initialise this to be the adress of the hash table element. */
-   link = &( this->table[ itab ] );
-
-/* Loop round until we have checked all entries. */
-   while( next && astOK ) {
-
-/* If the key for the current entry macthes the supplied key... */
-      if( !KeyCmp( next->key, key, status ) ) {
-      
-/* Store a pointer to the next MapEntry in the list, replacing the
-   original pointer to the MapEntry which is being deleted. */
-         *link = next->next;
-
-/* Free this MapEntry */
-         FreeMapEntry( next, status );
-
-/* Decrement the number of entries in the linked list. */
-         this->nentry[ itab ]--;
-
-/* Set up the next MapEntry to be freed. */
-         next = *link;
-
-/* If the key for the current entry does not match the supplied key... */
-      } else {
-
-/* Update the address at which to store the pointer to the next MapEntry
-   in the list. */
-         link = &(next->next);
-
-/* Update the address of the next MapEntry in the list. */
-         next = next->next;
-      }   
-   }
-}
-
-static AstMapEntry *SearchTableEntry( AstKeyMap *this, int itab, const char *key, int *status ){
-/*
-*  Name:
-*     SearchTableEntry
-
-*  Purpose:
-*     Search an element of a has table for a given key.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstMapEntry *SearchTableEntry( AstKeyMap *this, int itab, const char *key, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function searches the specified element of the KeyMaps hash table 
-*     until an element is found which has a key matching the supplied key. 
-*     The address of this entry is returned. If no suitable entry is found, 
-*     then NULL is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     itab
-*        The index of the hash table to be searched.
-*     key
-*        The key string to be searched for. Trailing spaces are ignored.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The address of the first MapEntry in the linked list which refers
-*     to the given key, or NULL if the key is not found.
-
-*/
-
-/* Local Variables: */
-   AstMapEntry *next;     /* Pointer to next Entry to check */
-   AstMapEntry *result;   /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* The "next" variable holds the address of the next MapEntry to be
-   checked. Initialise this to the supplied MapEntry. */
-   next = this->table[ itab ];
-
-/* Loop round until we have checked all entries. */
-   while( next ) {
-
-/* If the key for the current entry matches the supplied key, store the
-   MapEntry pointer and break. */
-      if( !KeyCmp( next->key, key, status ) ) {
-         result = next;
-         break;
-      }
-
-/* Update the address of the next MapEntry in the list. */
-      next = next->next;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     KeyMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a KeyMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;             /* Pointer to the KeyMap structure */
-   int ival;                    /* Attribute value */
-   int len;                     /* Length of setting string */
-   int nc;                      /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* SizeGuess. */
-/* ---------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "sizeguess= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetSizeGuess( this, ival );
-
-
-/* KeyError. */
-/* --------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "keyerror= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetKeyError( this, ival );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetSizeGuess( AstKeyMap *this, int sizeguess, int *status ) {
-/*
-*+
-*  Name:
-*     astSetSizeGuess
-
-*  Purpose:
-*     Set the value of the SizeGuess attribute for a KeyMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     void astSetSizeGuess( AstKeyMap *this, int sizeguess )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function sets a new value for the SizeGuess attribute of a
-*     KeyMap. It reports an error if the KeyMap contains any entries.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     sizeguess
-*        The new attribute value.
-
-*-
-*/
-
-/* Local Variables: */
-   int empty;                 /* Is the KeyMap empty? */
-   int itab;                  /* Index into hash table */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* See if the KeyMap is empty. */
-   empty = 1;
-   for( itab = 0; itab < this->mapsize; itab++ ) {
-      if( this->nentry[ itab ] > 0 ) {
-         empty = 0;
-         break;
-      }
-   }
-
-/* If not report an error. */
-   if( !empty ) {
-      astError( AST__NOWRT, "astSetAttrib(KeyMap): Illegal attempt to "
-                "change the SizeGuess attribute of a non-empty KeyMap." , status);
-
-/* Otherwise, store the new value and change the size of the hash
-   table. */
-   } else {
-      this->sizeguess = sizeguess;
-      NewTable( this, sizeguess/MAX_ENTRIES_PER_TABLE_ENTRY, status );
-   }
-}
-
-static size_t SizeOfEntry( AstMapEntry *entry, int *status ){
-/*
-*  Name:
-*     SizeOfEntry
-
-*  Purpose:
-*     Return the size of the supplied MapEntry structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     size_t SizeOfEntry( AstMapEntry *entry, int *status )
-
-*  Class Membership:
-*     KeyMap member function.
-
-*  Description:
-*     This function returns the size of the supplied MapEntry structure.
-
-*  Parameters:
-*     entry
-*        Pointer to the MapEntry.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The size of the MapEntry structure. This does not include the size
-*     of any data for which pointers are stored in the MapEntry structure.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   size_t result;         /* Returned value */
-   int nel;               /* Entry length */
-   int type;              /* Data type */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status and the supplied pointer. */
-   if ( !astOK || !entry ) return result;
-
-/* Get the data type and length of the MapEntry. */
-   type = entry->type;
-   nel = entry->nel;
-
-/* Deal with each type. */
-   if( type == AST__STRINGTYPE ) {
-      result = ( nel == 0 ) ? sizeof( Entry0C ) : sizeof( Entry1C );
-
-   } else if( type == AST__OBJECTTYPE ) {
-      result = ( nel == 0 ) ? sizeof( Entry0A ) : sizeof( Entry1A );
-
-   } else if( type == AST__INTTYPE ) {
-      result = ( nel == 0 ) ? sizeof( Entry0I ) : sizeof( Entry1I );
-
-   } else if( type == AST__POINTERTYPE ) {
-      result = ( nel == 0 ) ? sizeof( Entry0P ) : sizeof( Entry1P );
-
-   } else if( type == AST__DOUBLETYPE ) {
-      result = ( nel == 0 ) ? sizeof( Entry0D ) : sizeof( Entry1D );
-
-   } else if( type == AST__FLOATTYPE ) {
-      result = ( nel == 0 ) ? sizeof( Entry0F ) : sizeof( Entry1F );
-
-/* Report an error if the data type is unknown. */
-   } else {
-      astError( AST__INTER, "SizeOfEntry(KeyMap): Illegal map entry data "
-                "type %d encountered (internal AST programming error).", status,
-                type );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     KeyMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a KeyMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;             /* Pointer to the KeyMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* SizeGuess. */
-/* ---------- */
-   if ( !strcmp( attrib, "sizeguess" ) ) {
-      result = astTestSizeGuess( this );
-
-/* KeyError. */
-/* --------- */
-   } else if ( !strcmp( attrib, "keyerror" ) ) {
-      result = astTestKeyError( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int TestSizeGuess( AstKeyMap *this, int *status ) {
-/*
-*+
-*  Name:
-*     astTestSizeGuess
-
-*  Purpose:
-*     Test the value of the SizeGuess attribute for a KeyMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     int astTestSizeGuess( AstKeyMap *this )
-
-*  Class Membership:
-*     KeyMap method.
-
-*  Description:
-*     This function returns a non-zero value if the SizeGuess attribute
-*     has been set in a KeyMap. 
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap.
-
-*  Returned Value:
-*     Non-zero if the SizeGuess attribute is set.
-
-*  Notes:
-*     - A value of zero is returned if this function is invoked with the 
-*     global error status set.
-
-*-
-*/
-
-/* Local Variables: */
-   int result;                /* Returned value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Return non-zero if the attribute is still set to its "not set" value. */
-   return ( this->sizeguess != INT_MAX );
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-
-/*
-*att++
-*  Name:
-*     SizeGuess
-
-*  Purpose:
-*     The expected size of the KeyMap.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This is attribute gives an estimate of the number of entries that
-*     will be stored in the KeyMap. It is used to tune the internal
-*     properties of the KeyMap for speed and efficiency. A larger value
-*     will result in faster access at the expense of increased memory 
-*     requirements. However if the SizeGuess value is much larger than
-*     the actual size of the KeyMap, then there will be little, if any,
-*     speed gained by making the SizeGuess even larger. The default value
-*     is 300.
-*
-*     The value of this attribute can only be changed if the KeyMap is
-*     empty. Its value can be set conveniently when creating the KeyMap.
-*     An error will be reported if an attempt is made to set or clear the 
-*     attribute when the KeyMap contains any entries.
-
-*  Applicability:
-*     KeyMap
-*        All KeyMaps have this attribute.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     KeyError
-
-*  Purpose:
-*     Report an error when getting the value of a non-existant KeyMap entry?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which controls how the 
-c     astMapGet... 
-f     AST_MAPGET...
-*     functions behave if the requested key is not found in the KeyMap.
-*     If KeyError is zero (the default), then these functions will return
-c     zero
-f     .FALSE.
-*     but no error will be reported. If KeyError is non-zero, then the
-*     same values are returned but an error is also reported.
-
-*  Applicability:
-*     KeyMap
-*        All KeyMaps have this attribute.
-*att--
-*/
-astMAKE_CLEAR(KeyMap,KeyError,keyerror,-INT_MAX)
-astMAKE_GET(KeyMap,KeyError,int,0,( ( this->keyerror != -INT_MAX ) ?
-                                   this->keyerror : 0 ))
-astMAKE_SET(KeyMap,KeyError,int,keyerror,( value != 0 ))
-astMAKE_TEST(KeyMap,KeyError,( this->keyerror != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for KeyMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for KeyMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstKeyMap *in;                  /* Pointer to input KeyMap */
-   AstKeyMap *out;                 /* Pointer to output KeyMap */
-   int i;                       /* Index into hash table */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output KeyMap structures. */
-   in = (AstKeyMap *) objin;
-   out = (AstKeyMap *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output KeyMap. */
-   out->table = NULL;
-   out->nentry = NULL;
-
-/* Make copies of the table entries. */
-   out->table = astMalloc( sizeof( AstMapEntry * )*( out->mapsize ) );
-   out->nentry = astMalloc( sizeof( int )*( out->mapsize ) );
-
-   for( i = 0; i < out->mapsize; i++ ) CopyTableEntry( in, out, i, status );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
-   if ( !astOK ) {
-      for( i = 0; i < out->mapsize; i++ ) FreeTableEntry( out, i, status );
-      out->table = astFree( out->table );
-      out->nentry = astFree( out->nentry );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for KeyMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for KeyMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;             /* Pointer to the KeyMap structure */
-   int i;                    /* Loop count */
-
-/* Obtain a pointer to the KeyMap structure. */
-   this = (AstKeyMap *) obj;
-
-/* Free all allocated memory. */
-   for( i = 0; i < this->mapsize; i++ ) FreeTableEntry( this, i, status );
-
-/* Free memory used to hold tables. */
-   this->table = astFree( this->table );
-   this->nentry = astFree( this->nentry );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for KeyMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the KeyMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the KeyMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstKeyMap *this;              /* Pointer to the KeyMap structure */
-   AstMapEntry *next;            /* Pointer to the next AstMapEntry to dump */
-   int i;                        /* Index into hash table */
-   int nentry;                   /* Number of entries dumped so far */
-   int set;                      /* Is attribute set? */
-   int ival;                     /* Attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the KeyMap structure. */
-   this = (AstKeyMap *) this_object;
-
-/* Initialise the number of KeyMap entries dumped so far. */
-   nentry = 0;
-
-/* SizeGuess. */
-/* ---------- */
-   set = TestSizeGuess( this, status );
-   ival = set ? GetSizeGuess( this, status ) : astGetSizeGuess( this );
-   astWriteInt( channel, "SzGss", set, 0, ival, "Guess at KeyMap size" );
-
-/* KeyError. */
-/* --------- */
-   set = TestKeyError( this, status );
-   ival = set ? GetKeyError( this, status ) : astGetKeyError( this );
-   astWriteInt( channel, "KyErr", set, 0, ival, "Report non-existant keys?" );
-
-/* MapSize. */
-/* -------- */
-   astWriteInt( channel, "MapSz", 1, 1, this->mapsize, "Size of hash table" );
-
-/* Loop round each entry in the hash table. */
-   for( i = 0; i < this->mapsize; i++ ) {
-
-/* Get a pointer to the next KeyMap entry to dump. */
-      next = this->table[ i ];
-
-/* Loop round dumping all KeyMap entries in this element of the hash table. */
-      while( next && astOK ) {
-         DumpEntry( next, channel, ++nentry, status );
-
-/* Get a pointer to the next entry to dump. */
-         next = next->next;
-
-      }
-   }
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAKeyMap and astCheckKeyMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(KeyMap,Object)
-astMAKE_CHECK(KeyMap)
-
-AstKeyMap *astKeyMap_( const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astKeyMap
-f     AST_KEYMAP
-
-*  Purpose:
-*     Create a KeyMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "keymap.h"
-c     AstKeyMap *astKeyMap( const char *options, ... )
-f     RESULT = AST_KEYMAP( OPTIONS, STATUS )
-
-*  Class Membership:
-*     KeyMap constructor.
-
-*  Description:
-*     This function creates a new empty KeyMap and optionally initialises its
-*     attributes. Entries can then be added to the KeyMap using the 
-c     astMapPut0<X> and astMapPut1<X> functions.
-f     AST_MAPPUT0<X> and AST_MAPPUT1<X> functions.
-*
-*     The KeyMap class is used to store a set of values with associated keys 
-*     which identify the values. The keys are strings (case-sensitive,
-*     trailing spaces are ignored), and the data type of the values can be 
-*     integer, floating point, character string or AST Object pointer. Each 
-*     value can be a scalar or a one-dimensional vector. A KeyMap is
-*     conceptually similar to a Mapping in that a KeyMap transforms an
-*     input into an output - the input is the key, and the output is the
-*     value associated with the key. However, this is only a conceptual
-*     similarity, and it should be noted that the KeyMap class inherits from 
-*     the Object class rather than the Mapping class. The methods of the
-*     Mapping class cannot be used with a KeyMap.
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new KeyMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new KeyMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astKeyMap()
-f     AST_MAP = INTEGER
-*        A pointer to the new KeyMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstKeyMap *new;                 /* Pointer to new KeyMap */
-   va_list args;                /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the KeyMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitKeyMap( NULL, sizeof( AstKeyMap ), !class_init, &class_vtab, "KeyMap" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new KeyMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new KeyMap. */
-   return new;
-}
-
-AstKeyMap *astKeyMapId_( const char *options, ... ) {
-/*
-*  Name:
-*     astKeyMapId_
-
-*  Purpose:
-*     Create a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstKeyMap *astKeyMapId_( const char *options, ... ) 
-
-*  Class Membership:
-*     KeyMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astKeyMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astKeyMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astKeyMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astKeyMap_.
-
-*  Returned Value:
-*     The ID value associated with the new KeyMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstKeyMap *new;                 /* Pointer to new KeyMap */
-   va_list args;                /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the KeyMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitKeyMap( NULL, sizeof( AstKeyMap ), !class_init, &class_vtab, "KeyMap" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new KeyMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new KeyMap. */
-   return astMakeId( new );
-}
-
-AstKeyMap *astInitKeyMap_( void *mem, size_t size, int init, AstKeyMapVtab *vtab, 
-                           const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitKeyMap
-
-*  Purpose:
-*     Initialise a KeyMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstKeyMap *astInitKeyMap( void *mem, size_t size, int init, AstKeyMapVtab *vtab, 
-*                               const char *name )
-
-*  Class Membership:
-*     KeyMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new KeyMap object. It allocates memory (if necessary) to accommodate
-*     the KeyMap plus any additional data associated with the derived class.
-*     It then initialises a KeyMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a KeyMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the KeyMap is to be created. This
-*        must be of sufficient size to accommodate the KeyMap data
-*        (sizeof(KeyMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the KeyMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the KeyMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the KeyMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new KeyMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new KeyMap.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstKeyMap *new;              /* Pointer to the new KeyMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitKeyMapVtab( vtab, name );
-
-/* Initialise an Object structure (the parent class) as the first component
-   within the KeyMap structure, allocating memory if necessary. */
-   new = (AstKeyMap *) astInitObject( mem, size, 0, (AstObjectVtab *) vtab,
-                                      name );
-
-   if ( astOK ) {
-
-/* Initialise the KeyMap data. */
-/* ---------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->sizeguess = INT_MAX;
-      new->mapsize = 0;
-      new->table = NULL;
-      new->nentry = NULL;
-      new->keyerror = -INT_MAX;
-
-      NewTable( new, MIN_TABLE_SIZE, status );
-
-/* If an error occurred, clean up by deleting the new KeyMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new KeyMap. */
-   return new;
-}
-
-AstKeyMap *astLoadKeyMap_( void *mem, size_t size, AstKeyMapVtab *vtab, 
-                           const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadKeyMap
-
-*  Purpose:
-*     Load a KeyMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "keymap.h"
-*     AstKeyMap *astLoadKeyMap( void *mem, size_t size, AstKeyMapVtab *vtab, 
-*                         const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     KeyMap loader.
-
-*  Description:
-*     This function is provided to load a new KeyMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     KeyMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a KeyMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the KeyMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        KeyMap data (sizeof(KeyMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the KeyMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the KeyMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstKeyMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new KeyMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the KeyMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "KeyMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new KeyMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-   AstKeyMap *new;           /* Pointer to the new KeyMap */
-   AstObject **alist;        /* Pointer to vector of entry values */
-   AstObject *aval;          /* AST Object value for an entry */
-   char buff[ 30 ];          /* Buffer for key names */
-   char *key;                /* Pointer to key string for an entry */
-   char *com;                /* Pointer to comment string for an entry */
-   const char **slist;       /* Pointer to vector of entry values */
-   char *sval;               /* String value for an entry */
-   double *dlist;            /* Pointer to vector of entry values */
-   float *flist;             /* Pointer to vector of entry values */
-   double dval;              /* Floating point value for an entry */
-   int *ilist;               /* Pointer to vector of entry values */
-   int index;                /* Index of next array element in a vector entry */
-   int ival;                 /* Integer value for an entry */
-   int nel;                  /* Vector length */
-   int nentry;               /* Number of KeyMap entries read so far */
-   int mapsize;              /* Size for new hash table */
-   int type;                 /* Data type for an entry */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this KeyMap. In this case the
-   KeyMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstKeyMap );
-      vtab = &class_vtab;
-      name = "KeyMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitKeyMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built KeyMap. */
-   new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name, channel );
-
-   if ( astOK ) {
-
-/* Inidicate the KeyMap is empty. */
-      new->mapsize = 0;
-      new->table = NULL;
-      new->nentry = NULL;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "KeyMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* SizeGuess. */
-/* ---------- */
-      new->sizeguess = astReadInt( channel, "szgss", INT_MAX );
-      if ( TestSizeGuess( new, status ) ) SetSizeGuess( new, new->sizeguess, status );
-
-/* KeyError. */
-/* --------- */
-      new->keyerror = astReadInt( channel, "kyerr", -INT_MAX );
-      if ( TestKeyError( new, status ) ) SetKeyError( new, new->keyerror, status );
-
-/* MapSize. */
-/* -------- */
-      mapsize = astReadInt( channel, "mapsz", MIN_TABLE_SIZE );
-      NewTable( new, mapsize, status );
-
-/* Entries... */
-/* ---------- */
-
-/* Initialise the index of the next AstMapEntry to be read. */
-      nentry = 0;
-
-/* Read Entries until no more are found */
-      while( astOK ) {
-         nentry++;
-
-/* Get the entry key. */
-         (void) sprintf( buff, "key%d", nentry );
-         key = astReadString( channel, buff, NULL );
-
-/* We have finished reading entries if no key was found. */
-         if( !key ) break;
-
-/* Get the entry comment. */
-         (void) sprintf( buff, "com%d", nentry );
-         com = astReadString( channel, buff, NULL );
-
-/* Get the entry data type. */
-         (void) sprintf( buff, "typ%d", nentry );
-         type = astReadInt( channel, buff, AST__BADTYPE );
-
-         if( type == AST__BADTYPE && astOK ) {
-            astError( AST__BDFTS, "astLoadKeyMap(%s): No data type code found "
-                      "whilst reading a %s.", status, name, name );
-
-         }
-
-/* Get the vector length. */
-         (void) sprintf( buff, "nel%d", nentry );
-         nel = astReadInt( channel, buff, 0 );
-
-/* First deal with integer entries. */
-         if( type == AST__INTTYPE ) {
-
-/* For scalar entries, use "val<nentry>" to get the value then create a new
-   entry and add it to the KeyMap. */
-            if( nel == 0 ) {
-               (void) sprintf( buff, "val%d", nentry );
-               ival = astReadInt( channel, buff, 0 );
-               astMapPut0I( new, key, ival, com );
-
-/* If we must have an array of values... */
-            } else {
-
-/* Create an array to hold the values. */
-               ilist = astMalloc( sizeof(int)*nel );
-
-/* Loop round reading values. */
-               for( index = 0; astOK && index < nel; index++ ) {
-                  (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
-                  ilist[ index ] = astReadInt( channel, buff, 0 );
-               }
-
-/* Create the KeyMap entry. */
-               astMapPut1I( new, key, nel, ilist, com );
-
-/* Free resources. */
-               ilist = astFree( ilist );
-            }
-
-/* Do the same for double values. */
-         } else if( type == AST__DOUBLETYPE ) {
-            if( nel == 0 ) {
-               (void) sprintf( buff, "val%d", nentry );
-               dval = astReadDouble( channel, buff, AST__BAD );
-               astMapPut0D( new, key, dval, com );
-            } else {
-               dlist = astMalloc( sizeof(double)*nel );
-               for( index = 0; astOK && index < nel; index++ ) {
-                  (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
-                  dlist[ index ] = astReadDouble( channel, buff, AST__BAD );
-               }
-               astMapPut1D( new, key, nel, dlist, com );
-               dlist = astFree( dlist );
-            }
-
-/* Do the same for float values. */
-         } else if( type == AST__FLOATTYPE ) {
-            if( nel == 0 ) {
-               (void) sprintf( buff, "val%d", nentry );
-               dval = astReadDouble( channel, buff, 0.0 );
-               astMapPut0F( new, key, (float) dval, com );
-            } else {
-               flist = astMalloc( sizeof(float)*nel );
-               for( index = 0; astOK && index < nel; index++ ) {
-                  (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
-                  flist[ index ] = (float) astReadDouble( channel, buff, 0.0 );
-               }
-               astMapPut1F( new, key, nel, flist, com );
-               flist = astFree( flist );
-            }
-
-/* Do the same for string values. */
-         } else if( type == AST__STRINGTYPE ) {
-            if( nel == 0 ) {
-               (void) sprintf( buff, "val%d", nentry );
-               sval = astReadString( channel, buff, "" );
-               astMapPut0C( new, key, sval, com );
-               sval = astFree( sval );
-            } else {
-               slist = astMalloc( sizeof(const char *)*nel );
-               for( index = 0; astOK && index < nel; index++ ) {
-                  (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
-                  slist[ index ] = astReadString( channel, buff, "" );
-               }
-               astMapPut1C( new, key, nel, slist, com );
-               for( index = 0; astOK && index < nel; index++ ) {
-                  slist[ index ] = astFree( (void *) slist[ index ] );
-               }
-               slist = astFree( slist );
-            }
-
-/* Do the same for object values. */
-         } else if( type == AST__OBJECTTYPE ) {
-            if( nel == 0 ) {
-               (void) sprintf( buff, "val%d", nentry );
-               aval = astReadObject( channel, buff, NULL );
-               astMapPut0A( new, key, aval, com );
-               if( aval ) aval = astAnnul( aval );
-            } else {
-               alist = astMalloc( sizeof(AstObject *)*nel );
-               for( index = 0; astOK && index < nel; index++ ) {
-                  (void) sprintf( buff, "v%d_%d", nentry, index + 1 );
-                  alist[ index ] = astReadObject( channel, buff, NULL );
-               }
-               astMapPut1A( new, key, nel, alist, com );
-               for( index = 0; astOK && index < nel; index++ ) {
-                  if( alist[ index ] ) alist[ index ] = astAnnul( alist[ index ] );
-               }
-               alist = astFree( alist );
-            }
-
-/* Report an error if the data type is unknown. */
-         } else if( astOK ) {
-            astError( AST__BDFTS, "astLoadKeyMap(%s): Unknown data type code "
-                      "(%d) encountered whilst reading a %s.", status, name, type, 
-                      name );
-         }
-
-/* Free resources. */
-         key = astFree( key );
-         if( com ) com = astFree( com );
-
-      }
-
-/* If an error occurred, clean up by deleting the new KeyMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new KeyMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-#define MAKE_MAPPUT0_(X,Xtype) \
-void astMapPut0##X##_( AstKeyMap *this, const char *key, Xtype value, \
-                      const char *comment, int *status ){ \
-   if ( !astOK ) return; \
-   (**astMEMBER(this,KeyMap,MapPut0##X))(this,key,value,comment, status ); \
-}
-MAKE_MAPPUT0_(D,double)
-MAKE_MAPPUT0_(F,float)
-MAKE_MAPPUT0_(I,int)
-MAKE_MAPPUT0_(C,const char *)
-MAKE_MAPPUT0_(A,AstObject *)
-MAKE_MAPPUT0_(P,void *)
-#undef MAKE_MAPPUT0_
-
-#define MAKE_MAPPUT1_(X,Xtype) \
-void astMapPut1##X##_( AstKeyMap *this, const char *key, int size, \
-                       Xtype value[], const char *comment, \
-                       int *status ){ \
-   if ( !astOK ) return; \
-   (**astMEMBER(this,KeyMap,MapPut1##X))(this,key,size,value,comment, status ); \
-}
-MAKE_MAPPUT1_(D,const double)
-MAKE_MAPPUT1_(F,const float)
-MAKE_MAPPUT1_(I,const int)
-MAKE_MAPPUT1_(C,const char *const)
-MAKE_MAPPUT1_(A,AstObject *const)
-MAKE_MAPPUT1_(P,void *const)
-#undef MAKE_MAPPUT1_
-
-#define MAKE_MAPGET0_(X,Xtype) \
-int astMapGet0##X##_( AstKeyMap *this, const char *key, Xtype *value, int *status ){ \
-   if ( !astOK ) return 0; \
-   return (**astMEMBER(this,KeyMap,MapGet0##X))(this,key,value, status ); \
-}
-MAKE_MAPGET0_(D,double)
-MAKE_MAPGET0_(F,float)
-MAKE_MAPGET0_(I,int)
-MAKE_MAPGET0_(C,const char *)
-MAKE_MAPGET0_(A,AstObject *)
-MAKE_MAPGET0_(P,void *)
-#undef MAKE_MAPGET0_
-
-
-#define MAKE_MAPGET1_(X,Xtype) \
-int astMapGet1##X##_( AstKeyMap *this, const char *key, int mxval, int *nval, \
-                      Xtype *value, int *status ){ \
-   if ( !astOK ) return 0; \
-   return (**astMEMBER(this,KeyMap,MapGet1##X))(this,key,mxval,nval,value,status); \
-}
-MAKE_MAPGET1_(D,double)
-MAKE_MAPGET1_(F,float)
-MAKE_MAPGET1_(I,int)
-MAKE_MAPGET1_(A,AstObject *)
-MAKE_MAPGET1_(P,void *)
-#undef MAKE_MAPGET1_
-
-#define MAKE_MAPGETELEM_(X,Xtype) \
-int astMapGetElem##X##_( AstKeyMap *this, const char *key, int elem, \
-                         Xtype *value, int *status ){ \
-   if ( !astOK ) return 0; \
-   return (**astMEMBER(this,KeyMap,MapGetElem##X))(this,key,elem,value,status); \
-}
-MAKE_MAPGETELEM_(D,double)
-MAKE_MAPGETELEM_(F,float)
-MAKE_MAPGETELEM_(I,int)
-MAKE_MAPGETELEM_(A,AstObject *)
-MAKE_MAPGETELEM_(P,void *)
-#undef MAKE_MAPGETELEM_
-
-int astMapGet1C_( AstKeyMap *this, const char *key, int l, int mxval, int *nval,
-                  char *value, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapGet1C))(this,key,l,mxval,nval,value,status);
-}
-
-int astMapGetElemC_( AstKeyMap *this, const char *key, int l, int elem,
-                     char *value, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapGetElemC))(this,key,l,elem,value,status);
-}
-
-void astMapRemove_( AstKeyMap *this, const char *key, int *status ){ 
-   if ( !astOK ) return;
-   (**astMEMBER(this,KeyMap,MapRemove))(this,key, status ); 
-}
-int astMapSize_( AstKeyMap *this, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapSize))(this, status ); 
-}
-int astMapLenC_( AstKeyMap *this, const char *key, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapLenC))(this,key, status ); 
-}
-int astMapLength_( AstKeyMap *this, const char *key, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapLength))(this,key, status ); 
-}
-int astMapType_( AstKeyMap *this, const char *key, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapType))(this,key, status ); 
-}
-int astMapHasKey_( AstKeyMap *this, const char *key, int *status ){ 
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,MapHasKey))(this,key, status ); 
-}
-const char *astMapKey_( AstKeyMap *this, int index, int *status ){ 
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,KeyMap,MapKey))(this,index, status ); 
-}
-int astGetSizeGuess_( AstKeyMap *this, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,GetSizeGuess))(this, status ); 
-}
-int astTestSizeGuess_( AstKeyMap *this, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,KeyMap,TestSizeGuess))(this, status ); 
-}
-void astClearSizeGuess_( AstKeyMap *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,KeyMap,ClearSizeGuess))(this, status ); 
-}
-void astSetSizeGuess_( AstKeyMap *this, int sizeguess, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,KeyMap,SetSizeGuess))(this,sizeguess, status ); 
-}
-
-
-
-
-
diff --git a/ast-5.3-1/keymap.h b/ast-5.3-1/keymap.h
deleted file mode 100644
index 246748c..0000000
--- a/ast-5.3-1/keymap.h
+++ /dev/null
@@ -1,415 +0,0 @@
-#if !defined( KEYMAP_INCLUDED ) /* Include this file only once */
-#define KEYMAP_INCLUDED
-/*
-*+
-*  Name:
-*     keymap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the KeyMap class.
-
-*  Invocation:
-*     #include "keymap.h"
-
-*  Description:
-*     This include file defines the interface to the KeyMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The KeyMap class extends the Object class to represent a set of
-*     key/value pairs. Keys are strings, and values can be integer,
-*     floating point, string or Object - scalar of vector.
-
-*  Inheritance:
-*     The KeyMap class inherits from the Object class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     13-NOV-2004 (DSB):
-*        Original version.
-*     5-JUN-2006 (DSB):
-*        Added support for single precision entries.
-*     7-MAR-2008 (DSB):
-*        Added support for pointer ("P") entries.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Coordinate objects (parent class) */
-
-/* C header files. */
-/* --------------- */
-
-/* Macros */
-/* ====== */
-/* Data type constants: */
-#define AST__BADTYPE 0
-#define AST__INTTYPE 1
-#define AST__DOUBLETYPE 2
-#define AST__STRINGTYPE 3
-#define AST__OBJECTTYPE 4
-#define AST__FLOATTYPE 5
-#define AST__POINTERTYPE 6
-
-/* Define constants used to size global arrays in this module. */
-#define AST__KEYMAP_GETATTRIB_BUFF_LEN 50       /* Max length of string returned by GetAttrib */
-#define AST__KEYMAP_CONVERTVALUE_MAX_STRINGS 50 /* Number of string values to buffer in ConvertValue */
-#define AST__KEYMAP_CONVERTVALUE_BUFF_LEN 50    /* Max. characters in result buffer for ConvertValue */
-#define AST__KEYMAP_MAPKEY_MAX_STRINGS 50       /* Number of string values to buffer in MapKey */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* This structure contains information describing a single generic entry in 
-   a KeyMap. This structure is extended by other structures to hold data of
-   specific data types. */
-
-typedef struct AstMapEntry {
-   struct AstMapEntry *next; /* Pointer to next structure in list. */
-   const char *key;          /* The name used to identify the entry */
-   unsigned long hash;       /* The full width hash value */
-   int type;                 /* Data type. */
-   int nel;                  /* 0 => scalar, >0 => array with "nel" elements */
-   const char *comment;      /* Pointer to a comment for the entry */
-} AstMapEntry;
-
-/* KeyMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstKeyMap {
-
-/* Attributes inherited from the parent class. */
-   AstObject object;                   /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int sizeguess;                      /* Guess at KeyMap size */
-   AstMapEntry **table;                /* Hash table containing pointers to 
-                                          the KeyMap entries */
-   int *nentry;                        /* No. of Entries in each table element */
-   int mapsize;                        /* Length of table */
-   int keyerror;                       /* Report error if no key? */
-} AstKeyMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstKeyMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstObjectVtab object_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* MapPut0I)( AstKeyMap *, const char *, int, const char *, int * );
-   void (* MapPut0D)( AstKeyMap *, const char *, double, const char *, int * );
-   void (* MapPut0F)( AstKeyMap *, const char *, float, const char *, int * );
-   void (* MapPut0C)( AstKeyMap *, const char *, const char *, const char *, int * );
-   void (* MapPut0A)( AstKeyMap *, const char *, AstObject *, const char *, int * );
-   void (* MapPut0P)( AstKeyMap *, const char *, void *, const char *, int * );
-   void (* MapPut1I)( AstKeyMap *, const char *, int, const int[], const char *, int * );
-   void (* MapPut1D)( AstKeyMap *, const char *, int, const double[], const char *, int * );
-   void (* MapPut1F)( AstKeyMap *, const char *, int, const float[], const char *, int * );
-   void (* MapPut1C)( AstKeyMap *, const char *, int, const char *const [], const char *, int * );
-   void (* MapPut1A)( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-   void (* MapPut1P)( AstKeyMap *, const char *, int, void *const [], const char *, int * );
-   int (* MapGet0I)( AstKeyMap *, const char *, int *, int * );
-   int (* MapGet0D)( AstKeyMap *, const char *, double *, int * );
-   int (* MapGet0F)( AstKeyMap *, const char *, float *, int * );
-   int (* MapGet0C)( AstKeyMap *, const char *, const char **, int * );
-   int (* MapGet0A)( AstKeyMap *, const char *, AstObject **, int * );
-   int (* MapGet0P)( AstKeyMap *, const char *, void **, int * );
-   int (* MapGet1A)( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-   int (* MapGet1P)( AstKeyMap *, const char *, int, int *, void **, int * );
-   int (* MapGet1C)( AstKeyMap *, const char *, int, int, int *, char *, int * );
-   int (* MapGet1D)( AstKeyMap *, const char *, int, int *, double *, int * );
-   int (* MapGet1F)( AstKeyMap *, const char *, int, int *, float *, int * );
-   int (* MapGet1I)( AstKeyMap *, const char *, int, int *, int *, int * );
-   int (* MapGetElemA)( AstKeyMap *, const char *, int, AstObject **, int * );
-   int (* MapGetElemP)( AstKeyMap *, const char *, int, void **, int * );
-   int (* MapGetElemC)( AstKeyMap *, const char *, int, int, char *, int * );
-   int (* MapGetElemD)( AstKeyMap *, const char *, int, double *, int * );
-   int (* MapGetElemF)( AstKeyMap *, const char *, int, float *, int * );
-   int (* MapGetElemI)( AstKeyMap *, const char *, int, int *, int * );
-   void (* MapRemove)( AstKeyMap *, const char *, int * );
-   int (* MapSize)( AstKeyMap *, int * );
-   int (* MapLength)( AstKeyMap *, const char *, int * );
-   int (* MapLenC)( AstKeyMap *, const char *, int * );
-   int (* MapType)( AstKeyMap *, const char *, int * );
-   int (* MapHasKey)( AstKeyMap *, const char *, int * );
-   const char *(* MapKey)( AstKeyMap *, int, int * );
-
-   int (* GetSizeGuess)( AstKeyMap *, int * );
-   int (* TestSizeGuess)( AstKeyMap *, int * );
-   void (* SetSizeGuess)( AstKeyMap *, int, int * );
-   void (* ClearSizeGuess)( AstKeyMap *, int * );
-
-   int (* GetKeyError)( AstKeyMap *, int * );
-   int (* TestKeyError)( AstKeyMap *, int * );
-   void (* ClearKeyError)( AstKeyMap *, int * );
-   void (* SetKeyError)( AstKeyMap *, int, int * );
-
-} AstKeyMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstKeyMapGlobals {
-   AstKeyMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__KEYMAP_GETATTRIB_BUFF_LEN + 1 ];
-   char *ConvertValue_Strings[ AST__KEYMAP_CONVERTVALUE_MAX_STRINGS ];
-   int ConvertValue_Istr;
-   int ConvertValue_Init;
-   char ConvertValue_Buff[ AST__KEYMAP_CONVERTVALUE_BUFF_LEN + 1 ];
-   char *MapKey_Strings[ AST__KEYMAP_MAPKEY_MAX_STRINGS ];
-   int MapKey_Istr;
-   int MapKey_Init; 
-} AstKeyMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(KeyMap)          /* Check class membership */
-astPROTO_ISA(KeyMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstKeyMap *astKeyMap_( const char *, int *, ...);
-#else
-AstKeyMap *astKeyMapId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstKeyMap *astInitKeyMap_( void *, size_t, int, AstKeyMapVtab *, const char *, int * );
-
-/* Vtab initialiser. */
-void astInitKeyMapVtab_( AstKeyMapVtab *, const char *, int * );
-
-/* Loader. */
-AstKeyMap *astLoadKeyMap_( void *, size_t, AstKeyMapVtab *, const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitKeyMapGlobals_( AstKeyMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-#if defined(astCLASS)            /* Protected */
-int astMapGet0A_( AstKeyMap *, const char *, AstObject **, int * );
-int astMapGet1A_( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-void astMapPut1A_( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-int astMapGetElemA_( AstKeyMap *, const char *, int, AstObject **, int * );
-#else
-int astMapGet0AId_( AstKeyMap *, const char *, AstObject **, int * );
-int astMapGet1AId_( AstKeyMap *, const char *, int, int *, AstObject **, int * );
-void astMapPut1AId_( AstKeyMap *, const char *, int, AstObject *const [], const char *, int * );
-int astMapGetElemAId_( AstKeyMap *, const char *, int, AstObject **, int * );
-#endif
-
-const char *astMapKey_( AstKeyMap *, int, int * );
-int astMapGet0C_( AstKeyMap *, const char *, const char **, int * );
-int astMapGet0D_( AstKeyMap *, const char *, double *, int * );
-int astMapGet0F_( AstKeyMap *, const char *, float *, int * );
-int astMapGet0I_( AstKeyMap *, const char *, int *, int * );
-int astMapGet1C_( AstKeyMap *, const char *, int, int, int *, char *, int * );
-int astMapGet1D_( AstKeyMap *, const char *, int, int *, double *, int * );
-int astMapGet1F_( AstKeyMap *, const char *, int, int *, float *, int * );
-int astMapGet1I_( AstKeyMap *, const char *, int, int *, int *, int * );
-int astMapGetElemC_( AstKeyMap *, const char *, int, int, char *, int * );
-int astMapGetElemD_( AstKeyMap *, const char *, int, double *, int * );
-int astMapGetElemF_( AstKeyMap *, const char *, int, float *, int * );
-int astMapGetElemI_( AstKeyMap *, const char *, int, int *, int * );
-int astMapHasKey_( AstKeyMap *, const char *, int * );
-int astMapLength_( AstKeyMap *, const char *, int * );
-int astMapLenC_( AstKeyMap *, const char *, int * );
-int astMapSize_( AstKeyMap *, int * );
-int astMapType_( AstKeyMap *, const char *, int * );
-void astMapPut0A_( AstKeyMap *, const char *, AstObject *, const char *, int * );
-void astMapPut0C_( AstKeyMap *, const char *, const char *, const char *, int * );
-void astMapPut0D_( AstKeyMap *, const char *, double, const char *, int * );
-void astMapPut0F_( AstKeyMap *, const char *, float, const char *, int * );
-void astMapPut0I_( AstKeyMap *, const char *, int, const char *, int * );
-void astMapPut1C_( AstKeyMap *, const char *, int, const char *const [], const char *, int * );
-void astMapPut1D_( AstKeyMap *, const char *, int, const double *, const char *, int * );
-void astMapPut1F_( AstKeyMap *, const char *, int, const float *, const char *, int * );
-void astMapPut1I_( AstKeyMap *, const char *, int, const int *, const char *, int * );
-void astMapRemove_( AstKeyMap *, const char *, int * );
-int astMapGet0P_( AstKeyMap *, const char *, void **, int * );
-int astMapGet1P_( AstKeyMap *, const char *, int, int *, void **, int * );
-int astMapGetElemP_( AstKeyMap *, const char *, int, void **, int * );
-void astMapPut0P_( AstKeyMap *, const char *, void *, const char *, int * );
-void astMapPut1P_( AstKeyMap *, const char *, int, void *const [], const char *, int * );
-
-#if defined(astCLASS)            /* Protected */
-int astGetSizeGuess_( AstKeyMap *, int * );
-int astTestSizeGuess_( AstKeyMap *, int * );
-void astSetSizeGuess_( AstKeyMap *, int, int * );
-void astClearSizeGuess_( AstKeyMap *, int * );
-
-int astGetKeyError_( AstKeyMap *, int * );
-int astTestKeyError_( AstKeyMap *, int * );
-void astSetKeyError_( AstKeyMap *, int, int * );
-void astClearKeyError_( AstKeyMap *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckKeyMap(this) astINVOKE_CHECK(KeyMap,this,0)
-#define astVerifyKeyMap(this) astINVOKE_CHECK(KeyMap,this,1)
-
-/* Test class membership. */
-#define astIsAKeyMap(this) astINVOKE_ISA(KeyMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astKeyMap astINVOKE(F,astKeyMap_)
-#else
-#define astKeyMap astINVOKE(F,astKeyMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitKeyMap(mem,size,init,vtab,name) astINVOKE(O,astInitKeyMap_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitKeyMapVtab(vtab,name) astINVOKE(V,astInitKeyMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadKeyMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadKeyMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckKeyMap to validate KeyMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#define astMapPut0I(this,key,value,comment) astINVOKE(V,astMapPut0I_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0D(this,key,value,comment) astINVOKE(V,astMapPut0D_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0F(this,key,value,comment) astINVOKE(V,astMapPut0F_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0C(this,key,value,comment) astINVOKE(V,astMapPut0C_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut0A(this,key,value,comment) astINVOKE(V,astMapPut0A_(astCheckKeyMap(this),key,astCheckObject(value),comment,STATUS_PTR))
-#define astMapPut0P(this,key,value,comment) astINVOKE(V,astMapPut0P_(astCheckKeyMap(this),key,value,comment,STATUS_PTR))
-#define astMapPut1I(this,key,size,value,comment) astINVOKE(V,astMapPut1I_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapPut1D(this,key,size,value,comment) astINVOKE(V,astMapPut1D_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapPut1F(this,key,size,value,comment) astINVOKE(V,astMapPut1F_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapPut1C(this,key,size,value,comment) astINVOKE(V,astMapPut1C_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGet0I(this,key,value) astINVOKE(V,astMapGet0I_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet0D(this,key,value) astINVOKE(V,astMapGet0D_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet0F(this,key,value) astINVOKE(V,astMapGet0F_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet0C(this,key,value) astINVOKE(V,astMapGet0C_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet1I(this,key,mxval,nval,value) astINVOKE(V,astMapGet1I_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapGet1D(this,key,mxval,nval,value) astINVOKE(V,astMapGet1D_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapGet1F(this,key,mxval,nval,value) astINVOKE(V,astMapGet1F_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapGet1C(this,key,l,mxval,nval,value) astINVOKE(V,astMapGet1C_(astCheckKeyMap(this),key,l,mxval,nval,value,STATUS_PTR))
-#define astMapGetElemI(this,key,elem,value) astINVOKE(V,astMapGetElemI_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-#define astMapGetElemD(this,key,elem,value) astINVOKE(V,astMapGetElemD_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-#define astMapGetElemF(this,key,elem,value) astINVOKE(V,astMapGetElemF_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-#define astMapGetElemC(this,key,l,elem,value) astINVOKE(V,astMapGetElemC_(astCheckKeyMap(this),key,l,elem,value,STATUS_PTR))
-#define astMapRemove(this,key) astINVOKE(V,astMapRemove_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapSize(this) astINVOKE(V,astMapSize_(astCheckKeyMap(this),STATUS_PTR))
-#define astMapLength(this,key) astINVOKE(V,astMapLength_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapLenC(this,key) astINVOKE(V,astMapLenC_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapHasKey(this,key) astINVOKE(V,astMapHasKey_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapKey(this,index) astINVOKE(V,astMapKey_(astCheckKeyMap(this),index,STATUS_PTR))
-#define astMapType(this,key) astINVOKE(V,astMapType_(astCheckKeyMap(this),key,STATUS_PTR))
-#define astMapGet0P(this,key,value) astINVOKE(V,astMapGet0P_(astCheckKeyMap(this),key,value,STATUS_PTR))
-#define astMapGet1P(this,key,mxval,nval,value) astINVOKE(V,astMapGet1P_(astCheckKeyMap(this),key,mxval,nval,value,STATUS_PTR))
-#define astMapPut1P(this,key,size,value,comment) astINVOKE(V,astMapPut1P_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGetElemP(this,key,elem,value) astINVOKE(V,astMapGetElemP_(astCheckKeyMap(this),key,elem,value,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astMapGet0A(this,key,value) astINVOKE(V,astMapGet0A_(astCheckKeyMap(this),key,(AstObject **)(value),STATUS_PTR))
-#define astMapGet1A(this,key,mxval,nval,value) astINVOKE(V,astMapGet1A_(astCheckKeyMap(this),key,mxval,nval,(AstObject **)(value),STATUS_PTR))
-#define astMapPut1A(this,key,size,value,comment) astINVOKE(V,astMapPut1A_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGetElemA(this,key,elem,value) astINVOKE(V,astMapGetElemA_(astCheckKeyMap(this),key,elem,(AstObject **)(value),STATUS_PTR))
-
-#define astClearSizeGuess(this) \
-astINVOKE(V,astClearSizeGuess_(astCheckKeyMap(this),STATUS_PTR))
-#define astGetSizeGuess(this) \
-astINVOKE(V,astGetSizeGuess_(astCheckKeyMap(this),STATUS_PTR))
-#define astSetSizeGuess(this,sizeguess) \
-astINVOKE(V,astSetSizeGuess_(astCheckKeyMap(this),sizeguess,STATUS_PTR))
-#define astTestSizeGuess(this) \
-astINVOKE(V,astTestSizeGuess_(astCheckKeyMap(this),STATUS_PTR))
-
-#define astClearKeyError(this) \
-astINVOKE(V,astClearKeyError_(astCheckKeyMap(this),STATUS_PTR))
-#define astGetKeyError(this) \
-astINVOKE(V,astGetKeyError_(astCheckKeyMap(this),STATUS_PTR))
-#define astSetKeyError(this,keyerror) \
-astINVOKE(V,astSetKeyError_(astCheckKeyMap(this),keyerror,STATUS_PTR))
-#define astTestKeyError(this) \
-astINVOKE(V,astTestKeyError_(astCheckKeyMap(this),STATUS_PTR))
-
-#else
-#define astMapGet0A(this,key,value) astINVOKE(V,astMapGet0AId_(astCheckKeyMap(this),key,(AstObject **)(value),STATUS_PTR))
-#define astMapGet1A(this,key,mxval,nval,value) astINVOKE(V,astMapGet1AId_(astCheckKeyMap(this),key,mxval,nval,(AstObject **)(value),STATUS_PTR))
-#define astMapPut1A(this,key,size,value,comment) astINVOKE(V,astMapPut1AId_(astCheckKeyMap(this),key,size,value,comment,STATUS_PTR))
-#define astMapGetElemA(this,key,elem,value) astINVOKE(V,astMapGetElemAId_(astCheckKeyMap(this),key,elem,(AstObject **)(value),STATUS_PTR))
-#endif
-
-#endif
-
diff --git a/ast-5.3-1/loader.c b/ast-5.3-1/loader.c
deleted file mode 100644
index 85d253a..0000000
--- a/ast-5.3-1/loader.c
+++ /dev/null
@@ -1,188 +0,0 @@
-#define astCLASS
-#include "axis.h"
-#include "box.h"
-#include "channel.h"
-#include "circle.h"
-#include "cmpframe.h"
-#include "cmpmap.h"
-#include "cmpregion.h"
-#include "dsbspecframe.h"
-#include "dssmap.h"
-#include "ellipse.h"
-#include "fitschan.h"
-#include "fluxframe.h"
-#include "timeframe.h"
-#include "timemap.h"
-#include "frame.h"
-#include "frameset.h"
-#include "grismmap.h"
-#include "interval.h"
-#include "intramap.h"
-#include "keymap.h"
-#include "loader.h"
-#include "lutmap.h"
-#include "mapping.h"
-#include "mathmap.h"
-#include "matrixmap.h"
-#include "nullregion.h"
-#include "object.h"
-#include "pcdmap.h"
-#include "permmap.h"
-#include "plot.h"
-#include "plot3d.h"
-#include "pointlist.h"
-#include "pointset.h"
-#include "polygon.h"
-#include "polymap.h"
-#include "prism.h"
-#include "normmap.h"
-#include "ratemap.h"
-#include "region.h"
-#include "shiftmap.h"
-#include "skyaxis.h"
-#include "skyframe.h"
-#include "slamap.h"
-#include "specfluxframe.h"
-#include "specframe.h"
-#include "specmap.h"
-#include "sphmap.h"
-#include "tranmap.h"
-#include "selectormap.h"
-#include "switchmap.h"
-#include "unitmap.h"
-#include "wcsmap.h"
-#include "winmap.h"
-#include "xmlchan.h"
-#include "zoommap.h"
-#include "stc.h"
-#include "stcresourceprofile.h"
-#include "stcsearchlocation.h"
-#include "stccatalogentrylocation.h"
-#include "stcobsdatalocation.h"
-#include "stcschan.h"
-
-#include "error.h"
-#include "ast_err.h"
-#include <stddef.h>
-#include <string.h>
-
-/*
-*+
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     18-NOV-1997 (RFWS):
-*        Original version.
-*     18-MAR-1998 (RFWS):
-*        Added the IntraMap class.
-*     3-JUN-1999 (RFWS):
-*        Added the PcdMap class.
-*     17-AUG-1999 (RFWS):
-*        Added the MathMap class.
-*     8-JAN-2003 (DSB):
-*        Added the SpecMap and SpecFrame classes.
-*     15-JUL-2003 (DSB):
-*        Added the GrsimMap class.
-*     6-FEB-2009 (DSB):
-*        Added the StcsChan class.
-*-
-*/
-
-AstLoaderType *astGetLoader( const char *class, int *status ) {
-   if ( !astOK ) return NULL;
-
-#define LOAD(name) \
-if ( !strcmp( class, #name ) ) return (AstLoaderType *) astLoad##name##_
-
-   LOAD(Axis);
-   LOAD(Box);
-   LOAD(Channel);
-   LOAD(Circle);
-   LOAD(CmpFrame);
-   LOAD(CmpMap);
-   LOAD(CmpRegion);
-   LOAD(DSBSpecFrame);
-   LOAD(DssMap);
-   LOAD(Ellipse);
-   LOAD(FitsChan);
-   LOAD(FluxFrame);
-   LOAD(Frame);
-   LOAD(FrameSet);
-   LOAD(GrismMap);
-   LOAD(Interval);
-   LOAD(IntraMap);
-   LOAD(KeyMap);
-   LOAD(LutMap);
-   LOAD(Mapping);
-   LOAD(MathMap);
-   LOAD(MatrixMap);
-   LOAD(NullRegion);
-   LOAD(Object);
-   LOAD(PcdMap);
-   LOAD(PermMap);
-   LOAD(Plot);
-   LOAD(Plot3D);
-   LOAD(PointList);
-   LOAD(PointSet);
-   LOAD(PolyMap);
-   LOAD(Polygon);
-   LOAD(Prism);
-   LOAD(NormMap); 
-   LOAD(RateMap); 
-   LOAD(Region);
-   LOAD(ShiftMap);
-   LOAD(SkyAxis);
-   LOAD(SkyFrame);
-   LOAD(SlaMap);
-   LOAD(SpecFluxFrame);
-   LOAD(SpecFrame);
-   LOAD(SpecMap);
-   LOAD(SphMap);
-   LOAD(SelectorMap);
-   LOAD(SwitchMap);
-   LOAD(TimeFrame);
-   LOAD(TimeMap);
-   LOAD(TranMap);
-   LOAD(UnitMap);
-   LOAD(WcsMap);
-   LOAD(WinMap);
-   LOAD(XmlChan);
-   LOAD(ZoomMap);
-
-   LOAD(StcsChan);
-   LOAD(Stc);
-   LOAD(StcResourceProfile);
-   LOAD(StcSearchLocation);
-   LOAD(StcCatalogEntryLocation);
-   LOAD(StcObsDataLocation);
-
-   astError( AST__OCLUK, "astGetLoader: Object of unknown class \"%s\" cannot "
-                         "be loaded.", status, class );
-   return NULL;
-#undef LOAD
-}
-
-
-
diff --git a/ast-5.3-1/loader.h b/ast-5.3-1/loader.h
deleted file mode 100644
index 65fd405..0000000
--- a/ast-5.3-1/loader.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#if !defined( LOADER_INCLUDED )  /* Include this file only once */
-#define LOADER_INCLUDED
-/*
-*+
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     18-NOV-1997 (RFWS):
-*        Original version.
-*-
-*/
-
-#include "object.h"
-#include "channel.h"
-
-#if defined(astCLASS)            /* Protected */
-
-typedef AstObject *(AstLoaderType)( void *, size_t, AstObjectVtab *,
-                                    const char *, AstChannel *, int * );
-
-AstLoaderType *astGetLoader( const char *, int * );
-
-#endif
-#endif
-
-
-
diff --git a/ast-5.3-1/ltmain.sh b/ast-5.3-1/ltmain.sh
deleted file mode 100644
index 57fea5a..0000000
--- a/ast-5.3-1/ltmain.sh
+++ /dev/null
@@ -1,6500 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-basename="s,^.*/,,g"
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
-
-# The name of this program:
-progname=`echo "$progpath" | $SED $basename`
-modename="$progname"
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.5.18
-TIMESTAMP=" (1.1.1.4 2005/07/21 14:39:23)"
-
-# 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
-
-# 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
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# 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'
-# test EBCDIC or ASCII
-case `echo A|tr A '\301'` in
- A) # EBCDIC based system
-  SP2NL="tr '\100' '\n'"
-  NL2SP="tr '\r\n' '\100\100'"
-  ;;
- *) # Assume ASCII based system
-  SP2NL="tr '\040' '\012'"
-  NL2SP="tr '\015\012' '\040\040'"
-  ;;
-esac
-
-# NLS nuisances.
-# 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).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
-  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
-  save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" 	$lt_nl"
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-  $echo "$modename: not configured to build any kind of library" 1>&2
-  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit $EXIT_FAILURE
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-quote_scanset='[[~#^*{};<>?'"'"' 	]'
-
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-func_win32_libid ()
-{
-  win32_libid_type="unknown"
-  win32_fileres=`file -L $1 2>/dev/null`
-  case $win32_fileres in
-  *ar\ archive\ import\ library*) # definitely import
-    win32_libid_type="x86 archive import"
-    ;;
-  *ar\ archive*) # could be an import, or static
-    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
-      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 | \
-	sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
-      if test "X$win32_nmres" = "Ximport" ; then
-        win32_libid_type="x86 archive import"
-      else
-        win32_libid_type="x86 archive static"
-      fi
-    fi
-    ;;
-  *DLL*)
-    win32_libid_type="x86 DLL"
-    ;;
-  *executable*) # but shell scripts are "executable" too...
-    case $win32_fileres in
-    *MS\ Windows\ PE\ Intel*)
-      win32_libid_type="x86 DLL"
-      ;;
-    esac
-    ;;
-  esac
-  $echo $win32_libid_type
-}
-
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
-    if test -n "$available_tags" && test -z "$tagname"; then
-      CC_quoted=
-      for arg in $CC; do
-	case $arg in
-	  *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	  arg="\"$arg\""
-	  ;;
-	esac
-	CC_quoted="$CC_quoted $arg"
-      done
-      case $@ in
-      # Blanks in the command may have been stripped by the calling shell,
-      # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
-      # Blanks at the start of $base_compile will cause this to fail
-      # if we don't check for them as well.
-      *)
-	for z in $available_tags; do
-	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
-	    # Evaluate the configuration.
-	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
-	    CC_quoted=
-	    for arg in $CC; do
-	    # Double-quote args containing other shell metacharacters.
-	    case $arg in
-	      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	      arg="\"$arg\""
-	      ;;
-	    esac
-	    CC_quoted="$CC_quoted $arg"
-	  done
-	    case "$@ " in
-	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
-	      # The compiler in the base compile command matches
-	      # the one in the tagged configuration.
-	      # Assume this is the tagged configuration we want.
-	      tagname=$z
-	      break
-	      ;;
-	    esac
-	  fi
-	done
-	# If $tagname still isn't set, then no tagged configuration
-	# was found and let the user know that the "--tag" command
-	# line option must be used.
-	if test -z "$tagname"; then
-	  $echo "$modename: unable to infer tagged configuration"
-	  $echo "$modename: specify a tag with \`--tag'" 1>&2
-	  exit $EXIT_FAILURE
-#        else
-#          $echo "$modename: using $tagname tagged configuration"
-	fi
-	;;
-      esac
-    fi
-}
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
-    f_ex_an_ar_dir="$1"; shift
-    f_ex_an_ar_oldlib="$1"
-
-    $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
-    $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
-    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
-     :
-    else
-      $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
-      exit $EXIT_FAILURE
-    fi
-}
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
-    my_gentop="$1"; shift
-    my_oldlibs=${1+"$@"}
-    my_oldobjs=""
-    my_xlib=""
-    my_xabs=""
-    my_xdir=""
-    my_status=""
-
-    $show "${rm}r $my_gentop"
-    $run ${rm}r "$my_gentop"
-    $show "$mkdir $my_gentop"
-    $run $mkdir "$my_gentop"
-    my_status=$?
-    if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
-      exit $my_status
-    fi
-
-    for my_xlib in $my_oldlibs; do
-      # Extract the objects.
-      case $my_xlib in
-	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
-	*) my_xabs=`pwd`"/$my_xlib" ;;
-      esac
-      my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
-      my_xdir="$my_gentop/$my_xlib"
-
-      $show "${rm}r $my_xdir"
-      $run ${rm}r "$my_xdir"
-      $show "$mkdir $my_xdir"
-      $run $mkdir "$my_xdir"
-      status=$?
-      if test "$status" -ne 0 && test ! -d "$my_xdir"; then
-	exit $status
-      fi
-      case $host in
-      *-darwin*)
-	$show "Extracting $my_xabs"
-	# Do not bother doing anything if just a dry run
-	if test -z "$run"; then
-	  darwin_orig_dir=`pwd`
-	  cd $my_xdir || exit $?
-	  darwin_archive=$my_xabs
-	  darwin_curdir=`pwd`
-	  darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
-	  darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
-	  if test -n "$darwin_arches"; then 
-	    darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
-	    darwin_arch=
-	    $show "$darwin_base_archive has multiple architectures $darwin_arches"
-	    for darwin_arch in  $darwin_arches ; do
-	      mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-	      lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
-	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
-	      cd "$darwin_curdir"
-	      $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
-	    done # $darwin_arches
-      ## Okay now we have a bunch of thin objects, gotta fatten them up :)
-	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
-	    darwin_file=
-	    darwin_files=
-	    for darwin_file in $darwin_filelist; do
-	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
-	      lipo -create -output "$darwin_file" $darwin_files
-	    done # $darwin_filelist
-	    ${rm}r unfat-$$
-	    cd "$darwin_orig_dir"
-	  else
-	    cd "$darwin_orig_dir"
- 	    func_extract_an_archive "$my_xdir" "$my_xabs"
-	  fi # $darwin_arches
-	fi # $run
-      ;;
-      *)
-        func_extract_an_archive "$my_xdir" "$my_xabs"
-        ;;
-      esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-    done
-    func_extract_archives_result="$my_oldobjs"
-}
-# End of Shell function definitions
-#####################################
-
-# Darwin sucks
-eval std_shrext=\"$shrext_cmds\"
-
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
-  arg="$1"
-  shift
-
-  case $arg in
-  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    case $prev in
-    execute_dlfiles)
-      execute_dlfiles="$execute_dlfiles $arg"
-      ;;
-    tag)
-      tagname="$arg"
-      preserve_args="${preserve_args}=$arg"
-
-      # Check whether tagname contains only valid characters
-      case $tagname in
-      *[!-_A-Za-z0-9,/]*)
-	$echo "$progname: invalid tag name: $tagname" 1>&2
-	exit $EXIT_FAILURE
-	;;
-      esac
-
-      case $tagname in
-      CC)
-	# Don't test for the "default" C tag, as we know, it's there, but
-	# not specially marked.
-	;;
-      *)
-	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
-	  taglist="$taglist $tagname"
-	  # Evaluate the configuration.
-	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
-	else
-	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
-	fi
-	;;
-      esac
-      ;;
-    *)
-      eval "$prev=\$arg"
-      ;;
-    esac
-
-    prev=
-    prevopt=
-    continue
-  fi
-
-  # Have we seen a non-optional argument yet?
-  case $arg in
-  --help)
-    show_help=yes
-    ;;
-
-  --version)
-    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-    $echo
-    $echo "Copyright (C) 2005  Free Software Foundation, Inc."
-    $echo "This is free software; see the source for copying conditions.  There is NO"
-    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-    exit $?
-    ;;
-
-  --config)
-    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
-    # Now print the configurations for the tags.
-    for tagname in $taglist; do
-      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
-    done
-    exit $?
-    ;;
-
-  --debug)
-    $echo "$progname: enabling shell trace mode"
-    set -x
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --dry-run | -n)
-    run=:
-    ;;
-
-  --features)
-    $echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
-      $echo "enable shared libraries"
-    else
-      $echo "disable shared libraries"
-    fi
-    if test "$build_old_libs" = yes; then
-      $echo "enable static libraries"
-    else
-      $echo "disable static libraries"
-    fi
-    exit $?
-    ;;
-
-  --finish) mode="finish" ;;
-
-  --mode) prevopt="--mode" prev=mode ;;
-  --mode=*) mode="$optarg" ;;
-
-  --preserve-dup-deps) duplicate_deps="yes" ;;
-
-  --quiet | --silent)
-    show=:
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --tag) prevopt="--tag" prev=tag ;;
-  --tag=*)
-    set tag "$optarg" ${1+"$@"}
-    shift
-    prev=tag
-    preserve_args="$preserve_args --tag"
-    ;;
-
-  -dlopen)
-    prevopt="-dlopen"
-    prev=execute_dlfiles
-    ;;
-
-  -*)
-    $echo "$modename: unrecognized option \`$arg'" 1>&2
-    $echo "$help" 1>&2
-    exit $EXIT_FAILURE
-    ;;
-
-  *)
-    nonopt="$arg"
-    break
-    ;;
-  esac
-done
-
-if test -n "$prevopt"; then
-  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-  $echo "$help" 1>&2
-  exit $EXIT_FAILURE
-fi
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end.  This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-if test -z "$show_help"; then
-
-  # Infer the operation mode.
-  if test -z "$mode"; then
-    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
-    $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
-    case $nonopt in
-    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
-      mode=link
-      for arg
-      do
-	case $arg in
-	-c)
-	   mode=compile
-	   break
-	   ;;
-	esac
-      done
-      ;;
-    *db | *dbx | *strace | *truss)
-      mode=execute
-      ;;
-    *install*|cp|mv)
-      mode=install
-      ;;
-    *rm)
-      mode=uninstall
-      ;;
-    *)
-      # If we have no mode, but dlfiles were specified, then do execute mode.
-      test -n "$execute_dlfiles" && mode=execute
-
-      # Just use the default operation mode.
-      if test -z "$mode"; then
-	if test -n "$nonopt"; then
-	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
-	else
-	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
-	fi
-      fi
-      ;;
-    esac
-  fi
-
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-    $echo "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
-
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$modename --help --mode=$mode' for more information."
-
-  # These modes are in order of execution frequency so that they run quickly.
-  case $mode in
-  # libtool compile mode
-  compile)
-    modename="$modename: compile"
-    # Get the compilation command and the source file.
-    base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
-    suppress_opt=yes
-    suppress_output=
-    arg_mode=normal
-    libobj=
-    later=
-
-    for arg
-    do
-      case "$arg_mode" in
-      arg  )
-	# do not "continue".  Instead, add this to base_compile
-	lastarg="$arg"
-	arg_mode=normal
-	;;
-
-      target )
-	libobj="$arg"
-	arg_mode=normal
-	continue
-	;;
-
-      normal )
-	# Accept any command-line options.
-	case $arg in
-	-o)
-	  if test -n "$libobj" ; then
-	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-	  arg_mode=target
-	  continue
-	  ;;
-
-	-static | -prefer-pic | -prefer-non-pic)
-	  later="$later $arg"
-	  continue
-	  ;;
-
-	-no-suppress)
-	  suppress_opt=no
-	  continue
-	  ;;
-
-	-Xcompiler)
-	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
-	  continue      #  The current "srcfile" will either be retained or
-	  ;;            #  replaced later.  I would guess that would be a bug.
-
-	-Wc,*)
-	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
-	  lastarg=
-	  save_ifs="$IFS"; IFS=','
- 	  for arg in $args; do
-	    IFS="$save_ifs"
-
-	    # Double-quote args containing other shell metacharacters.
-	    # Many Bourne shells cannot handle close brackets correctly
-	    # in scan sets, so we specify it separately.
-	    case $arg in
-	      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	      arg="\"$arg\""
-	      ;;
-	    esac
-	    lastarg="$lastarg $arg"
-	  done
-	  IFS="$save_ifs"
-	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
-	  # Add the arguments to base_compile.
-	  base_compile="$base_compile $lastarg"
-	  continue
-	  ;;
-
-	* )
-	  # Accept the current argument as the source file.
-	  # The previous "srcfile" becomes the current argument.
-	  #
-	  lastarg="$srcfile"
-	  srcfile="$arg"
-	  ;;
-	esac  #  case $arg
-	;;
-      esac    #  case $arg_mode
-
-      # Aesthetically quote the previous argument.
-      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
-      case $lastarg in
-      # Double-quote args containing other shell metacharacters.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, and some SunOS ksh mistreat backslash-escaping
-      # in scan sets (worked around with variable expansion),
-      # and furthermore cannot handle '|' '&' '(' ')' in scan sets 
-      # at all, so we specify them separately.
-      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	lastarg="\"$lastarg\""
-	;;
-      esac
-
-      base_compile="$base_compile $lastarg"
-    done # for arg
-
-    case $arg_mode in
-    arg)
-      $echo "$modename: you must specify an argument for -Xcompile"
-      exit $EXIT_FAILURE
-      ;;
-    target)
-      $echo "$modename: you must specify a target with \`-o'" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    *)
-      # Get the name of the library object.
-      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-      ;;
-    esac
-
-    # Recognize several different file suffixes.
-    # If the user specifies -o file.o, it is replaced with file.lo
-    xform='[cCFSifmso]'
-    case $libobj in
-    *.ada) xform=ada ;;
-    *.adb) xform=adb ;;
-    *.ads) xform=ads ;;
-    *.asm) xform=asm ;;
-    *.c++) xform=c++ ;;
-    *.cc) xform=cc ;;
-    *.ii) xform=ii ;;
-    *.class) xform=class ;;
-    *.cpp) xform=cpp ;;
-    *.cxx) xform=cxx ;;
-    *.f90) xform=f90 ;;
-    *.for) xform=for ;;
-    *.java) xform=java ;;
-    esac
-
-    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
-    case $libobj in
-    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-    *)
-      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    esac
-
-    func_infer_tag $base_compile
-
-    for arg in $later; do
-      case $arg in
-      -static)
-	build_old_libs=yes
-	continue
-	;;
-
-      -prefer-pic)
-	pic_mode=yes
-	continue
-	;;
-
-      -prefer-non-pic)
-	pic_mode=no
-	continue
-	;;
-      esac
-    done
-
-    qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
-    case $qlibobj in
-      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	qlibobj="$qlibobj" ;;
-    esac
-    if test "X$libobj" != "X$qlibobj"; then
-	$echo "$modename: libobj name \`$libobj' may not contain shell special characters."
-	exit $EXIT_FAILURE
-    fi
-    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$xdir" = "X$obj"; then
-      xdir=
-    else
-      xdir=$xdir/
-    fi
-    lobj=${xdir}$objdir/$objname
-
-    if test -z "$base_compile"; then
-      $echo "$modename: you must specify a compilation command" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
-      removelist="$obj $lobj $libobj ${libobj}T"
-    else
-      removelist="$lobj $libobj ${libobj}T"
-    fi
-
-    $run $rm $removelist
-    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-
-    # On Cygwin there's no "real" PIC flag so we must build both object types
-    case $host_os in
-    cygwin* | mingw* | pw32* | os2*)
-      pic_mode=default
-      ;;
-    esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
-      # non-PIC code in shared libraries is not supported
-      pic_mode=default
-    fi
-
-    # Calculate the filename of the output object if compiler does
-    # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
-      removelist="$removelist $output_obj $lockfile"
-      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-    else
-      output_obj=
-      need_locks=no
-      lockfile=
-    fi
-
-    # Lock this critical section if it is needed
-    # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
-      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
-	$show "Waiting for $lockfile to be removed"
-	sleep 2
-      done
-    elif test "$need_locks" = warn; then
-      if test -f "$lockfile"; then
-	$echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit $EXIT_FAILURE
-      fi
-      $echo "$srcfile" > "$lockfile"
-    fi
-
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
-    qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
-    case $qsrcfile in
-      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-      qsrcfile="\"$qsrcfile\"" ;;
-    esac
-
-    $run $rm "$libobj" "${libobj}T"
-
-    # Create a libtool object file (analogous to a ".la" file),
-    # but don't create it if we're doing a dry run.
-    test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
-
-    # 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
-
-      if test ! -d "${xdir}$objdir"; then
-	$show "$mkdir ${xdir}$objdir"
-	$run $mkdir ${xdir}$objdir
-	status=$?
-	if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
-	  exit $status
-	fi
-      fi
-
-      if test -z "$output_obj"; then
-	# Place PIC objects in $objdir
-	command="$command -o $lobj"
-      fi
-
-      $run $rm "$lobj" "$output_obj"
-
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-	test -n "$output_obj" && $run $rm $removelist
-	exit $EXIT_FAILURE
-      fi
-
-      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."
-
-	$run $rm $removelist
-	exit $EXIT_FAILURE
-      fi
-
-      # Just move the object if needed, then go on to compile the next one
-      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
-	$show "$mv $output_obj $lobj"
-	if $run $mv $output_obj $lobj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # Append the name of the PIC object to the libtool object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
-      # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
-        suppress_output=' >/dev/null 2>&1'
-      fi
-    else
-      # No PIC object so indicate it doesn't exist in the libtool
-      # object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
-    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"
-      else
-	command="$base_compile $qsrcfile $pic_flag"
-      fi
-      if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
-      fi
-
-      # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
-      $run $rm "$obj" "$output_obj"
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-	$run $rm $removelist
-	exit $EXIT_FAILURE
-      fi
-
-      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."
-
-	$run $rm $removelist
-	exit $EXIT_FAILURE
-      fi
-
-      # Just move the object if needed
-      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
-	$show "$mv $output_obj $obj"
-	if $run $mv $output_obj $obj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
-
-EOF
-    else
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
-
-EOF
-    fi
-
-    $run $mv "${libobj}T" "${libobj}"
-
-    # Unlock the critical section if it was locked
-    if test "$need_locks" != no; then
-      $run $rm "$lockfile"
-    fi
-
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool link mode
-  link | relink)
-    modename="$modename: link"
-    case $host in
-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-      # 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=
-
-    avoid_version=no
-    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
-
-    func_infer_tag $base_compile
-
-    # We need to know -static, to get the right output filenames.
-    for arg
-    do
-      case $arg in
-      -all-static | -static)
-	if test "X$arg" = "X-all-static"; then
-	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-	  fi
-	  if test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	else
-	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	fi
-	build_libtool_libs=no
-	build_old_libs=yes
-	prefer_static_libs=yes
-	break
-	;;
-      esac
-    done
-
-    # See if our shared archives depend on static archives.
-    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
-    # Go through the arguments, transforming them on the way.
-    while test "$#" -gt 0; do
-      arg="$1"
-      shift
-      case $arg in
-      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
-	;;
-      *) qarg=$arg ;;
-      esac
-      libtool_args="$libtool_args $qarg"
-
-      # If the previous option needs an argument, assign it.
-      if test -n "$prev"; then
-	case $prev in
-	output)
-	  compile_command="$compile_command @OUTPUT@"
-	  finalize_command="$finalize_command @OUTPUT@"
-	  ;;
-	esac
-
-	case $prev in
-	dlfiles|dlprefiles)
-	  if test "$preload" = no; then
-	    # Add the symbol object into the linking commands.
-	    compile_command="$compile_command @SYMFILE@"
-	    finalize_command="$finalize_command @SYMFILE@"
-	    preload=yes
-	  fi
-	  case $arg in
-	  *.la | *.lo) ;;  # We handle these cases below.
-	  force)
-	    if test "$dlself" = no; then
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  self)
-	    if test "$prev" = dlprefiles; then
-	      dlself=yes
-	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-	      dlself=yes
-	    else
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  *)
-	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
-	    else
-	      dlprefiles="$dlprefiles $arg"
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  esac
-	  ;;
-	expsyms)
-	  export_symbols="$arg"
-	  if test ! -f "$arg"; then
-	    $echo "$modename: symbol file \`$arg' does not exist"
-	    exit $EXIT_FAILURE
-	  fi
-	  prev=
-	  continue
-	  ;;
-	expsyms_regex)
-	  export_symbols_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	inst_prefix)
-	  inst_prefix_dir="$arg"
-	  prev=
-	  continue
-	  ;;
-	precious_regex)
-	  precious_files_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	release)
-	  release="-$arg"
-	  prev=
-	  continue
-	  ;;
-	objectlist)
-	  if test -f "$arg"; then
-	    save_arg=$arg
-	    moreargs=
-	    for fil in `cat $save_arg`
-	    do
-#	      moreargs="$moreargs $fil"
-	      arg=$fil
-	      # A libtool-controlled object.
-
-	      # Check to see that this really is a libtool object.
-	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-		pic_object=
-		non_pic_object=
-
-		# Read the .lo file
-		# If there is no directory component, then add one.
-		case $arg in
-		*/* | *\\*) . $arg ;;
-		*) . ./$arg ;;
-		esac
-
-		if test -z "$pic_object" || \
-		   test -z "$non_pic_object" ||
-		   test "$pic_object" = none && \
-		   test "$non_pic_object" = none; then
-		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-		  exit $EXIT_FAILURE
-		fi
-
-		# Extract subdirectory from the argument.
-		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-		if test "X$xdir" = "X$arg"; then
-		  xdir=
-		else
-		  xdir="$xdir/"
-		fi
-
-		if test "$pic_object" != none; then
-		  # Prepend the subdirectory the object is found in.
-		  pic_object="$xdir$pic_object"
-
-		  if test "$prev" = dlfiles; then
-		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      dlfiles="$dlfiles $pic_object"
-		      prev=
-		      continue
-		    else
-		      # If libtool objects are unsupported, then we need to preload.
-		      prev=dlprefiles
-		    fi
-		  fi
-
-		  # CHECK ME:  I think I busted this.  -Ossama
-		  if test "$prev" = dlprefiles; then
-		    # Preload the old-style object.
-		    dlprefiles="$dlprefiles $pic_object"
-		    prev=
-		  fi
-
-		  # A PIC object.
-		  libobjs="$libobjs $pic_object"
-		  arg="$pic_object"
-		fi
-
-		# Non-PIC object.
-		if test "$non_pic_object" != none; then
-		  # Prepend the subdirectory the object is found in.
-		  non_pic_object="$xdir$non_pic_object"
-
-		  # A standard non-PIC object
-		  non_pic_objects="$non_pic_objects $non_pic_object"
-		  if test -z "$pic_object" || test "$pic_object" = none ; then
-		    arg="$non_pic_object"
-		  fi
-		fi
-	      else
-		# Only an error if not doing a dry-run.
-		if test -z "$run"; then
-		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-		  exit $EXIT_FAILURE
-		else
-		  # Dry-run case.
-
-		  # Extract subdirectory from the argument.
-		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-		  if test "X$xdir" = "X$arg"; then
-		    xdir=
-		  else
-		    xdir="$xdir/"
-		  fi
-
-		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-		  libobjs="$libobjs $pic_object"
-		  non_pic_objects="$non_pic_objects $non_pic_object"
-		fi
-	      fi
-	    done
-	  else
-	    $echo "$modename: link input file \`$save_arg' does not exist"
-	    exit $EXIT_FAILURE
-	  fi
-	  arg=$save_arg
-	  prev=
-	  continue
-	  ;;
-	rpath | xrpath)
-	  # We need an absolute path.
-	  case $arg in
-	  [\\/]* | [A-Za-z]:[\\/]*) ;;
-	  *)
-	    $echo "$modename: only absolute run-paths are allowed" 1>&2
-	    exit $EXIT_FAILURE
-	    ;;
-	  esac
-	  if test "$prev" = rpath; then
-	    case "$rpath " in
-	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
-	    esac
-	  else
-	    case "$xrpath " in
-	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
-	    esac
-	  fi
-	  prev=
-	  continue
-	  ;;
-	xcompiler)
-	  compiler_flags="$compiler_flags $qarg"
-	  prev=
-	  compile_command="$compile_command $qarg"
-	  finalize_command="$finalize_command $qarg"
-	  continue
-	  ;;
-	xlinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $wl$qarg"
-	  prev=
-	  compile_command="$compile_command $wl$qarg"
-	  finalize_command="$finalize_command $wl$qarg"
-	  continue
-	  ;;
-	xcclinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $qarg"
-	  prev=
-	  compile_command="$compile_command $qarg"
-	  finalize_command="$finalize_command $qarg"
-	  continue
-	  ;;
-	shrext)
-  	  shrext_cmds="$arg"
-	  prev=
-	  continue
-	  ;;
-        darwin_framework)
-	  compiler_flags="$compiler_flags $arg"
-	  compile_command="$compile_command $arg"
-	  finalize_command="$finalize_command $arg"
-	  prev=
-	  continue
-	  ;;
-	*)
-	  eval "$prev=\"\$arg\""
-	  prev=
-	  continue
-	  ;;
-	esac
-      fi # test -n "$prev"
-
-      prevarg="$arg"
-
-      case $arg in
-      -all-static)
-	if test -n "$link_static_flag"; then
-	  compile_command="$compile_command $link_static_flag"
-	  finalize_command="$finalize_command $link_static_flag"
-	fi
-	continue
-	;;
-
-      -allow-undefined)
-	# FIXME: remove this flag sometime in the future.
-	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
-	continue
-	;;
-
-      -avoid-version)
-	avoid_version=yes
-	continue
-	;;
-
-      -dlopen)
-	prev=dlfiles
-	continue
-	;;
-
-      -dlpreopen)
-	prev=dlprefiles
-	continue
-	;;
-
-      -export-dynamic)
-	export_dynamic=yes
-	continue
-	;;
-
-      -export-symbols | -export-symbols-regex)
-	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	  $echo "$modename: more than one -exported-symbols argument is not allowed"
-	  exit $EXIT_FAILURE
-	fi
-	if test "X$arg" = "X-export-symbols"; then
-	  prev=expsyms
-	else
-	  prev=expsyms_regex
-	fi
-	continue
-	;;
-
-      -framework)
-        prev=darwin_framework
-        compiler_flags="$compiler_flags $arg"
-	compile_command="$compile_command $arg"
-	finalize_command="$finalize_command $arg"
-        continue
-        ;;
-
-      -inst-prefix-dir)
-	prev=inst_prefix
-	continue
-	;;
-
-      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
-      # so, if we see these flags be careful not to treat them like -L
-      -L[A-Z][A-Z]*:*)
-	case $with_gcc/$host in
-	no/*-*-irix* | /*-*-irix*)
-	  compile_command="$compile_command $arg"
-	  finalize_command="$finalize_command $arg"
-	  ;;
-	esac
-	continue
-	;;
-
-      -L*)
-	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-	# We need an absolute path.
-	case $dir in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  absdir=`cd "$dir" && pwd`
-	  if test -z "$absdir"; then
-	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-	  dir="$absdir"
-	  ;;
-	esac
-	case "$deplibs " in
-	*" -L$dir "*) ;;
-	*)
-	  deplibs="$deplibs -L$dir"
-	  lib_search_path="$lib_search_path $dir"
-	  ;;
-	esac
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-	  case :$dllsearchpath: in
-	  *":$dir:"*) ;;
-	  *) dllsearchpath="$dllsearchpath:$dir";;
-	  esac
-	  ;;
-	esac
-	continue
-	;;
-
-      -l*)
-	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
-	  case $host in
-	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
-	    # These systems don't actually have a C or math library (as such)
-	    continue
-	    ;;
-	  *-*-mingw* | *-*-os2*)
-	    # These systems don't actually have a C library (as such)
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-	    # Do not include libc due to us having libc/libc_r.
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-rhapsody* | *-*-darwin1.[012])
-	    # Rhapsody C and math libraries are in the System framework
-	    deplibs="$deplibs -framework System"
-	    continue
-	  esac
-	elif test "X$arg" = "X-lc_r"; then
-	 case $host in
-	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-	   # Do not include libc_r directly, use -pthread flag.
-	   continue
-	   ;;
-	 esac
-	fi
-	deplibs="$deplibs $arg"
-	continue
-	;;
-
-      # Tru64 UNIX uses -model [arg] to determine the layout of C++
-      # classes, name mangling, and exception handling.
-      -model)
-	compile_command="$compile_command $arg"
-	compiler_flags="$compiler_flags $arg"
-	finalize_command="$finalize_command $arg"
-	prev=xcompiler
-	continue
-	;;
-
-     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-	compiler_flags="$compiler_flags $arg"
-	compile_command="$compile_command $arg"
-	finalize_command="$finalize_command $arg"
-	continue
-	;;
-
-      -module)
-	module=yes
-	continue
-	;;
-
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m* pass through architecture-specific compiler args for GCC
-      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*)
-
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case $arg in
-	*$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	  arg="\"$arg\""
-	  ;;
-	esac
-        compile_command="$compile_command $arg"
-        finalize_command="$finalize_command $arg"
-        if test "$with_gcc" = "yes" ; then
-          compiler_flags="$compiler_flags $arg"
-        fi
-        continue
-        ;;
-
-      -shrext)
-	prev=shrext
-	continue
-	;;
-
-      -no-fast-install)
-	fast_install=no
-	continue
-	;;
-
-      -no-install)
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-	  # The PATH hackery in wrapper scripts is required on Windows
-	  # in order for the loader to find any dlls it needs.
-	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
-	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
-	  fast_install=no
-	  ;;
-	*) no_install=yes ;;
-	esac
-	continue
-	;;
-
-      -no-undefined)
-	allow_undefined=no
-	continue
-	;;
-
-      -objectlist)
-	prev=objectlist
-	continue
-	;;
-
-      -o) prev=output ;;
-
-      -precious-files-regex)
-	prev=precious_regex
-	continue
-	;;
-
-      -release)
-	prev=release
-	continue
-	;;
-
-      -rpath)
-	prev=rpath
-	continue
-	;;
-
-      -R)
-	prev=xrpath
-	continue
-	;;
-
-      -R*)
-	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-	# We need an absolute path.
-	case $dir in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  $echo "$modename: only absolute run-paths are allowed" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-	case "$xrpath " in
-	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
-	esac
-	continue
-	;;
-
-      -static)
-	# The effects of -static are defined in a previous loop.
-	# We used to do the same as -all-static on platforms that
-	# didn't have a PIC flag, but the assumption that the effects
-	# would be equivalent was wrong.  It would break on at least
-	# Digital Unix and AIX.
-	continue
-	;;
-
-      -thread-safe)
-	thread_safe=yes
-	continue
-	;;
-
-      -version-info)
-	prev=vinfo
-	continue
-	;;
-      -version-number)
-	prev=vinfo
-	vinfo_number=yes
-	continue
-	;;
-
-      -Wc,*)
-	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
-	arg=
-	save_ifs="$IFS"; IFS=','
-	for flag in $args; do
-	  IFS="$save_ifs"
-	  case $flag in
-	    *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	    flag="\"$flag\""
-	    ;;
-	  esac
-	  arg="$arg $wl$flag"
-	  compiler_flags="$compiler_flags $flag"
-	done
-	IFS="$save_ifs"
-	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-	;;
-
-      -Wl,*)
-	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
-	arg=
-	save_ifs="$IFS"; IFS=','
-	for flag in $args; do
-	  IFS="$save_ifs"
-	  case $flag in
-	    *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	    flag="\"$flag\""
-	    ;;
-	  esac
-	  arg="$arg $wl$flag"
-	  compiler_flags="$compiler_flags $wl$flag"
-	  linker_flags="$linker_flags $flag"
-	done
-	IFS="$save_ifs"
-	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-	;;
-
-      -Xcompiler)
-	prev=xcompiler
-	continue
-	;;
-
-      -Xlinker)
-	prev=xlinker
-	continue
-	;;
-
-      -XCClinker)
-	prev=xcclinker
-	continue
-	;;
-
-      # Some other compiler flag.
-      -* | +*)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case $arg in
-	*$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-
-      *.$objext)
-	# A standard object.
-	objs="$objs $arg"
-	;;
-
-      *.lo)
-	# A libtool-controlled object.
-
-	# Check to see that this really is a libtool object.
-	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  pic_object=
-	  non_pic_object=
-
-	  # Read the .lo file
-	  # If there is no directory component, then add one.
-	  case $arg in
-	  */* | *\\*) . $arg ;;
-	  *) . ./$arg ;;
-	  esac
-
-	  if test -z "$pic_object" || \
-	     test -z "$non_pic_object" ||
-	     test "$pic_object" = none && \
-	     test "$non_pic_object" = none; then
-	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-
-	  # Extract subdirectory from the argument.
-	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-	  if test "X$xdir" = "X$arg"; then
-	    xdir=
- 	  else
-	    xdir="$xdir/"
-	  fi
-
-	  if test "$pic_object" != none; then
-	    # Prepend the subdirectory the object is found in.
-	    pic_object="$xdir$pic_object"
-
-	    if test "$prev" = dlfiles; then
-	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		dlfiles="$dlfiles $pic_object"
-		prev=
-		continue
-	      else
-		# If libtool objects are unsupported, then we need to preload.
-		prev=dlprefiles
-	      fi
-	    fi
-
-	    # CHECK ME:  I think I busted this.  -Ossama
-	    if test "$prev" = dlprefiles; then
-	      # Preload the old-style object.
-	      dlprefiles="$dlprefiles $pic_object"
-	      prev=
-	    fi
-
-	    # A PIC object.
-	    libobjs="$libobjs $pic_object"
-	    arg="$pic_object"
-	  fi
-
-	  # Non-PIC object.
-	  if test "$non_pic_object" != none; then
-	    # Prepend the subdirectory the object is found in.
-	    non_pic_object="$xdir$non_pic_object"
-
-	    # A standard non-PIC object
-	    non_pic_objects="$non_pic_objects $non_pic_object"
-	    if test -z "$pic_object" || test "$pic_object" = none ; then
-	      arg="$non_pic_object"
-	    fi
-	  fi
-	else
-	  # Only an error if not doing a dry-run.
-	  if test -z "$run"; then
-	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-	    exit $EXIT_FAILURE
-	  else
-	    # Dry-run case.
-
-	    # Extract subdirectory from the argument.
-	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-	    if test "X$xdir" = "X$arg"; then
-	      xdir=
-	    else
-	      xdir="$xdir/"
-	    fi
-
-	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-	    libobjs="$libobjs $pic_object"
-	    non_pic_objects="$non_pic_objects $non_pic_object"
-	  fi
-	fi
-	;;
-
-      *.$libext)
-	# An archive.
-	deplibs="$deplibs $arg"
-	old_deplibs="$old_deplibs $arg"
-	continue
-	;;
-
-      *.la)
-	# A libtool-controlled library.
-
-	if test "$prev" = dlfiles; then
-	  # This library was specified with -dlopen.
-	  dlfiles="$dlfiles $arg"
-	  prev=
-	elif test "$prev" = dlprefiles; then
-	  # The library was specified with -dlpreopen.
-	  dlprefiles="$dlprefiles $arg"
-	  prev=
-	else
-	  deplibs="$deplibs $arg"
-	fi
-	continue
-	;;
-
-      # Some other compiler argument.
-      *)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case $arg in
-	*$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-      esac # arg
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-	compile_command="$compile_command $arg"
-	finalize_command="$finalize_command $arg"
-      fi
-    done # argument parsing loop
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      compile_command="$compile_command $arg"
-      finalize_command="$finalize_command $arg"
-    fi
-
-    oldlibs=
-    # calculate the name of the file, without its directory
-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-    libobjs_save="$libobjs"
-
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-    else
-      shlib_search_path=
-    fi
-    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
-    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$output_objdir" = "X$output"; then
-      output_objdir="$objdir"
-    else
-      output_objdir="$output_objdir/$objdir"
-    fi
-    # Create the object directory.
-    if test ! -d "$output_objdir"; then
-      $show "$mkdir $output_objdir"
-      $run $mkdir $output_objdir
-      status=$?
-      if test "$status" -ne 0 && test ! -d "$output_objdir"; then
-	exit $status
-      fi
-    fi
-
-    # Determine the type of output
-    case $output in
-    "")
-      $echo "$modename: you must specify an output file" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    *.$libext) linkmode=oldlib ;;
-    *.lo | *.$objext) linkmode=obj ;;
-    *.la) linkmode=lib ;;
-    *) linkmode=prog ;; # Anything else should be a program.
-    esac
-
-    case $host in
-    *cygwin* | *mingw* | *pw32*)
-      # don't eliminate duplications in $postdeps and $predeps
-      duplicate_compiler_generated_deps=yes
-      ;;
-    *)
-      duplicate_compiler_generated_deps=$duplicate_deps
-      ;;
-    esac
-    specialdeplibs=
-
-    libs=
-    # Find all interdependent deplibs by searching for libraries
-    # that are linked more than once (e.g. -la -lb -la)
-    for deplib in $deplibs; do
-      if test "X$duplicate_deps" = "Xyes" ; then
-	case "$libs " in
-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	esac
-      fi
-      libs="$libs $deplib"
-    done
-
-    if test "$linkmode" = lib; then
-      libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
-      # Compute libraries that are listed more than once in $predeps
-      # $postdeps and mark them as special (i.e., whose duplicates are
-      # not to be eliminated).
-      pre_post_deps=
-      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
-	for pre_post_dep in $predeps $postdeps; do
-	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-	  esac
-	  pre_post_deps="$pre_post_deps $pre_post_dep"
-	done
-      fi
-      pre_post_deps=
-    fi
-
-    deplibs=
-    newdependency_libs=
-    newlib_search_path=
-    need_relink=no # whether we're linking any uninstalled libtool libraries
-    notinst_deplibs= # not-installed libtool libraries
-    notinst_path= # paths that contain not-installed libtool libraries
-    case $linkmode in
-    lib)
-	passes="conv link"
-	for file in $dlfiles $dlprefiles; do
-	  case $file in
-	  *.la) ;;
-	  *)
-	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
-	    exit $EXIT_FAILURE
-	    ;;
-	  esac
-	done
-	;;
-    prog)
-	compile_deplibs=
-	finalize_deplibs=
-	alldeplibs=no
-	newdlfiles=
-	newdlprefiles=
-	passes="conv scan dlopen dlpreopen link"
-	;;
-    *)  passes="conv"
-	;;
-    esac
-    for pass in $passes; do
-      if test "$linkmode,$pass" = "lib,link" ||
-	 test "$linkmode,$pass" = "prog,scan"; then
-	libs="$deplibs"
-	deplibs=
-      fi
-      if test "$linkmode" = prog; then
-	case $pass in
-	dlopen) libs="$dlfiles" ;;
-	dlpreopen) libs="$dlprefiles" ;;
-	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
-	esac
-      fi
-      if test "$pass" = dlopen; then
-	# Collect dlpreopened libraries
-	save_deplibs="$deplibs"
-	deplibs=
-      fi
-      for deplib in $libs; do
-	lib=
-	found=no
-	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-	  if test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$deplib $compile_deplibs"
-	    finalize_deplibs="$deplib $finalize_deplibs"
-	  else
-	    compiler_flags="$compiler_flags $deplib"
-	  fi
-	  continue
-	  ;;
-	-l*)
-	  if test "$linkmode" != lib && test "$linkmode" != prog; then
-	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
-	    continue
-	  fi
-	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
-	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
-	    for search_ext in .la $std_shrext .so .a; do
-	      # Search the libtool library
-	      lib="$searchdir/lib${name}${search_ext}"
-	      if test -f "$lib"; then
-		if test "$search_ext" = ".la"; then
-		  found=yes
-		else
-		  found=no
-		fi
-		break 2
-	      fi
-	    done
-	  done
-	  if test "$found" != yes; then
-	    # deplib doesn't seem to be a libtool library
-	    if test "$linkmode,$pass" = "prog,link"; then
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      deplibs="$deplib $deplibs"
-	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    continue
-	  else # deplib is a libtool library
-	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
-	    # We need to do some special things here, and not later.
-	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	      case " $predeps $postdeps " in
-	      *" $deplib "*)
-		if (${SED} -e '2q' $lib |
-                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-		  library_names=
-		  old_library=
-		  case $lib in
-		  */* | *\\*) . $lib ;;
-		  *) . ./$lib ;;
-		  esac
-		  for l in $old_library $library_names; do
-		    ll="$l"
-		  done
-		  if test "X$ll" = "X$old_library" ; then # only static version available
-		    found=no
-		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-		    test "X$ladir" = "X$lib" && ladir="."
-		    lib=$ladir/$old_library
-		    if test "$linkmode,$pass" = "prog,link"; then
-		      compile_deplibs="$deplib $compile_deplibs"
-		      finalize_deplibs="$deplib $finalize_deplibs"
-		    else
-		      deplibs="$deplib $deplibs"
-		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-		    fi
-		    continue
-		  fi
-		fi
-	        ;;
-	      *) ;;
-	      esac
-	    fi
-	  fi
-	  ;; # -l
-	-L*)
-	  case $linkmode in
-	  lib)
-	    deplibs="$deplib $deplibs"
-	    test "$pass" = conv && continue
-	    newdependency_libs="$deplib $newdependency_libs"
-	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-	    ;;
-	  prog)
-	    if test "$pass" = conv; then
-	      deplibs="$deplib $deplibs"
-	      continue
-	    fi
-	    if test "$pass" = scan; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    fi
-	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-	    ;;
-	  *)
-	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
-	    ;;
-	  esac # linkmode
-	  continue
-	  ;; # -L
-	-R*)
-	  if test "$pass" = link; then
-	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-	    # Make sure the xrpath contains only unique directories.
-	    case "$xrpath " in
-	    *" $dir "*) ;;
-	    *) xrpath="$xrpath $dir" ;;
-	    esac
-	  fi
-	  deplibs="$deplib $deplibs"
-	  continue
-	  ;;
-	*.la) lib="$deplib" ;;
-	*.$libext)
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	    continue
-	  fi
-	  case $linkmode in
-	  lib)
-	    valid_a_lib=no
-	    case $deplibs_check_method in
-	      match_pattern*)
-		set dummy $deplibs_check_method
-	        match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-		if eval $echo \"$deplib\" 2>/dev/null \
-		    | $SED 10q \
-		    | $EGREP "$match_pattern_regex" > /dev/null; then
-		  valid_a_lib=yes
-		fi
-		;;
-	      pass_all)
-		valid_a_lib=yes
-		;;
-            esac
-	    if test "$valid_a_lib" != yes; then
-	      $echo
-	      $echo "*** Warning: Trying to link with static lib archive $deplib."
-	      $echo "*** I have the capability to make that library automatically link in when"
-	      $echo "*** you link to this library.  But I can only do this if you have a"
-	      $echo "*** shared version of the library, which you do not appear to have"
-	      $echo "*** because the file extensions .$libext of this argument makes me believe"
-	      $echo "*** that it is just a static archive that I should not used here."
-	    else
-	      $echo
-	      $echo "*** Warning: Linking the shared library $output against the"
-	      $echo "*** static library $deplib is not portable!"
-	      deplibs="$deplib $deplibs"
-	    fi
-	    continue
-	    ;;
-	  prog)
-	    if test "$pass" != link; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    fi
-	    continue
-	    ;;
-	  esac # linkmode
-	  ;; # *.$libext
-	*.lo | *.$objext)
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	  elif test "$linkmode" = prog; then
-	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-	      # If there is no dlopen support or we're linking statically,
-	      # we need to preload.
-	      newdlprefiles="$newdlprefiles $deplib"
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      newdlfiles="$newdlfiles $deplib"
-	    fi
-	  fi
-	  continue
-	  ;;
-	%DEPLIBS%)
-	  alldeplibs=yes
-	  continue
-	  ;;
-	esac # case $deplib
-	if test "$found" = yes || test -f "$lib"; then :
-	else
-	  $echo "$modename: cannot find the library \`$lib'" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	# Check to see that this really is a libtool archive.
-	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$ladir" = "X$lib" && ladir="."
-
-	dlname=
-	dlopen=
-	dlpreopen=
-	libdir=
-	library_names=
-	old_library=
-	# If the library was installed with an old release of libtool,
-	# it will not redefine variables installed, or shouldnotlink
-	installed=yes
-	shouldnotlink=no
-	avoidtemprpath=
-
-
-	# Read the .la file
-	case $lib in
-	*/* | *\\*) . $lib ;;
-	*) . ./$lib ;;
-	esac
-
-	if test "$linkmode,$pass" = "lib,link" ||
-	   test "$linkmode,$pass" = "prog,scan" ||
-	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-	fi
-
-	if test "$pass" = conv; then
-	  # Only check for convenience libraries
-	  deplibs="$lib $deplibs"
-	  if test -z "$libdir"; then
-	    if test -z "$old_library"; then
-	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-	      exit $EXIT_FAILURE
-	    fi
-	    # It is a libtool convenience library, so add in its objects.
-	    convenience="$convenience $ladir/$objdir/$old_library"
-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
-	    tmp_libs=
-	    for deplib in $dependency_libs; do
-	      deplibs="$deplib $deplibs"
-              if test "X$duplicate_deps" = "Xyes" ; then
-	        case "$tmp_libs " in
-	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	        esac
-              fi
-	      tmp_libs="$tmp_libs $deplib"
-	    done
-	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
-	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-	  continue
-	fi # $pass = conv
-
-
-	# Get the name of the library we link against.
-	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
-	if test -z "$linklib"; then
-	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	# This library was specified with -dlopen.
-	if test "$pass" = dlopen; then
-	  if test -z "$libdir"; then
-	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-	  if test -z "$dlname" ||
-	     test "$dlopen_support" != yes ||
-	     test "$build_libtool_libs" = no; then
-	    # If there is no dlname, no dlopen support or we're linking
-	    # statically, we need to preload.  We also need to preload any
-	    # dependent libraries so libltdl's deplib preloader doesn't
-	    # bomb out in the load deplibs phase.
-	    dlprefiles="$dlprefiles $lib $dependency_libs"
-	  else
-	    newdlfiles="$newdlfiles $lib"
-	  fi
-	  continue
-	fi # $pass = dlopen
-
-	# We need an absolute path.
-	case $ladir in
-	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
-	*)
-	  abs_ladir=`cd "$ladir" && pwd`
-	  if test -z "$abs_ladir"; then
-	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
-	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-	    abs_ladir="$ladir"
-	  fi
-	  ;;
-	esac
-	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
-	# Find the relevant object directory and library name.
-	if test "X$installed" = Xyes; then
-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
-	    dir="$ladir"
-	    absdir="$abs_ladir"
-	    libdir="$abs_ladir"
-	  else
-	    dir="$libdir"
-	    absdir="$libdir"
-	  fi
-	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
-	else
-	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    dir="$ladir"
-	    absdir="$abs_ladir"
-	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
-	  else
-	    dir="$ladir/$objdir"
-	    absdir="$abs_ladir/$objdir"
-	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
-	  fi
-	fi # $installed = yes
-	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
-	# This library was specified with -dlpreopen.
-	if test "$pass" = dlpreopen; then
-	  if test -z "$libdir"; then
-	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    newdlprefiles="$newdlprefiles $dir/$old_library"
-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
-	  elif test -n "$dlname"; then
-	    newdlprefiles="$newdlprefiles $dir/$dlname"
-	  else
-	    newdlprefiles="$newdlprefiles $dir/$linklib"
-	  fi
-	fi # $pass = dlpreopen
-
-	if test -z "$libdir"; then
-	  # Link the convenience library
-	  if test "$linkmode" = lib; then
-	    deplibs="$dir/$old_library $deplibs"
-	  elif test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$dir/$old_library $compile_deplibs"
-	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
-	  else
-	    deplibs="$lib $deplibs" # used for prog,scan pass
-	  fi
-	  continue
-	fi
-
-
-	if test "$linkmode" = prog && test "$pass" != link; then
-	  newlib_search_path="$newlib_search_path $ladir"
-	  deplibs="$lib $deplibs"
-
-	  linkalldeplibs=no
-	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
-	     test "$build_libtool_libs" = no; then
-	    linkalldeplibs=yes
-	  fi
-
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    case $deplib in
-	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
-	    esac
-	    # Need to link against all dependency_libs?
-	    if test "$linkalldeplibs" = yes; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      # Need to hardcode shared library paths
-	      # or/and link against static libraries
-	      newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    if test "X$duplicate_deps" = "Xyes" ; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	      esac
-	    fi
-	    tmp_libs="$tmp_libs $deplib"
-	  done # for deplib
-	  continue
-	fi # $linkmode = prog...
-
-	if test "$linkmode,$pass" = "prog,link"; then
-	  if test -n "$library_names" &&
-	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-	    # We need to hardcode the library path
-	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
-	      # Make sure the rpath contains only unique directories.
-	      case "$temp_rpath " in
-	      *" $dir "*) ;;
-	      *" $absdir "*) ;;
-	      *) temp_rpath="$temp_rpath $dir" ;;
-	      esac
-	    fi
-
-	    # Hardcode the library path.
-	    # Skip directories that are in the system default run-time
-	    # search path.
-	    case " $sys_lib_dlsearch_path " in
-	    *" $absdir "*) ;;
-	    *)
-	      case "$compile_rpath " in
-	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
-	      esac
-	      ;;
-	    esac
-	    case " $sys_lib_dlsearch_path " in
-	    *" $libdir "*) ;;
-	    *)
-	      case "$finalize_rpath " in
-	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
-	      esac
-	      ;;
-	    esac
-	  fi # $linkmode,$pass = prog,link...
-
-	  if test "$alldeplibs" = yes &&
-	     { test "$deplibs_check_method" = pass_all ||
-	       { test "$build_libtool_libs" = yes &&
-		 test -n "$library_names"; }; }; then
-	    # We only need to search for static libraries
-	    continue
-	  fi
-	fi
-
-	link_static=no # Whether the deplib will be linked statically
-	if test -n "$library_names" &&
-	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-	  if test "$installed" = no; then
-	    notinst_deplibs="$notinst_deplibs $lib"
-	    need_relink=yes
-	  fi
-	  # This is a shared library
-
-	  # Warn about portability, can't link against -module's on
-	  # some systems (darwin)
-	  if test "$shouldnotlink" = yes && test "$pass" = link ; then
-	    $echo
-	    if test "$linkmode" = prog; then
-	      $echo "*** Warning: Linking the executable $output against the loadable module"
-	    else
-	      $echo "*** Warning: Linking the shared library $output against the loadable module"
-	    fi
-	    $echo "*** $linklib is not portable!"
-	  fi
-	  if test "$linkmode" = lib &&
-	     test "$hardcode_into_libs" = yes; then
-	    # Hardcode the library path.
-	    # Skip directories that are in the system default run-time
-	    # search path.
-	    case " $sys_lib_dlsearch_path " in
-	    *" $absdir "*) ;;
-	    *)
-	      case "$compile_rpath " in
-	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
-	      esac
-	      ;;
-	    esac
-	    case " $sys_lib_dlsearch_path " in
-	    *" $libdir "*) ;;
-	    *)
-	      case "$finalize_rpath " in
-	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
-	      esac
-	      ;;
-	    esac
-	  fi
-
-	  if test -n "$old_archive_from_expsyms_cmds"; then
-	    # figure out the soname
-	    set dummy $library_names
-	    realname="$2"
-	    shift; shift
-	    libname=`eval \\$echo \"$libname_spec\"`
-	    # use dlname if we got it. it's perfectly good, no?
-	    if test -n "$dlname"; then
-	      soname="$dlname"
-	    elif test -n "$soname_spec"; then
-	      # bleh windows
-	      case $host in
-	      *cygwin* | mingw*)
-		major=`expr $current - $age`
-		versuffix="-$major"
-		;;
-	      esac
-	      eval soname=\"$soname_spec\"
-	    else
-	      soname="$realname"
-	    fi
-
-	    # Make a new name for the extract_expsyms_cmds to use
-	    soroot="$soname"
-	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
-	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
-	    # If the library has no export list, then create one now
-	    if test -f "$output_objdir/$soname-def"; then :
-	    else
-	      $show "extracting exported symbol list from \`$soname'"
-	      save_ifs="$IFS"; IFS='~'
-	      cmds=$extract_expsyms_cmds
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd" || exit $?
-	      done
-	      IFS="$save_ifs"
-	    fi
-
-	    # Create $newlib
-	    if test -f "$output_objdir/$newlib"; then :; else
-	      $show "generating import library for \`$soname'"
-	      save_ifs="$IFS"; IFS='~'
-	      cmds=$old_archive_from_expsyms_cmds
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd" || exit $?
-	      done
-	      IFS="$save_ifs"
-	    fi
-	    # make sure the library variables are pointing to the new library
-	    dir=$output_objdir
-	    linklib=$newlib
-	  fi # test -n "$old_archive_from_expsyms_cmds"
-
-	  if test "$linkmode" = prog || test "$mode" != relink; then
-	    add_shlibpath=
-	    add_dir=
-	    add=
-	    lib_linked=yes
-	    case $hardcode_action in
-	    immediate | unsupported)
-	      if test "$hardcode_direct" = no; then
-		add="$dir/$linklib"
-		case $host in
-		  *-*-sco3.2v5* ) add_dir="-L$dir" ;;
-		  *-*-darwin* )
-		    # if the lib is a module then we can not link against
-		    # it, someone is ignoring the new warnings I added
-		    if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
-		      $echo "** Warning, lib $linklib is a module, not a shared library"
-		      if test -z "$old_library" ; then
-		        $echo
-		        $echo "** And there doesn't seem to be a static archive available"
-		        $echo "** The link will probably fail, sorry"
-		      else
-		        add="$dir/$old_library"
-		      fi
-		    fi
-		esac
-	      elif test "$hardcode_minus_L" = no; then
-		case $host in
-		*-*-sunos*) add_shlibpath="$dir" ;;
-		esac
-		add_dir="-L$dir"
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = no; then
-		add_shlibpath="$dir"
-		add="-l$name"
-	      else
-		lib_linked=no
-	      fi
-	      ;;
-	    relink)
-	      if test "$hardcode_direct" = yes; then
-		add="$dir/$linklib"
-	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$dir"
-		# Try looking first in the location we're being installed to.
-		if test -n "$inst_prefix_dir"; then
-		  case "$libdir" in
-		    [\\/]*)
-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
-		      ;;
-		  esac
-		fi
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = yes; then
-		add_shlibpath="$dir"
-		add="-l$name"
-	      else
-		lib_linked=no
-	      fi
-	      ;;
-	    *) lib_linked=no ;;
-	    esac
-
-	    if test "$lib_linked" != yes; then
-	      $echo "$modename: configuration error: unsupported hardcode properties"
-	      exit $EXIT_FAILURE
-	    fi
-
-	    if test -n "$add_shlibpath"; then
-	      case :$compile_shlibpath: in
-	      *":$add_shlibpath:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-	      esac
-	    fi
-	    if test "$linkmode" = prog; then
-	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
-	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
-	    else
-	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
-	      test -n "$add" && deplibs="$add $deplibs"
-	      if test "$hardcode_direct" != yes && \
-		 test "$hardcode_minus_L" != yes && \
-		 test "$hardcode_shlibpath_var" = yes; then
-		case :$finalize_shlibpath: in
-		*":$libdir:"*) ;;
-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-		esac
-	      fi
-	    fi
-	  fi
-
-	  if test "$linkmode" = prog || test "$mode" = relink; then
-	    add_shlibpath=
-	    add_dir=
-	    add=
-	    # Finalize command for both is simple: just hardcode it.
-	    if test "$hardcode_direct" = yes; then
-	      add="$libdir/$linklib"
-	    elif test "$hardcode_minus_L" = yes; then
-	      add_dir="-L$libdir"
-	      add="-l$name"
-	    elif test "$hardcode_shlibpath_var" = yes; then
-	      case :$finalize_shlibpath: in
-	      *":$libdir:"*) ;;
-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-	      esac
-	      add="-l$name"
-	    elif test "$hardcode_automatic" = yes; then
-	      if test -n "$inst_prefix_dir" &&
-		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
-	        add="$inst_prefix_dir$libdir/$linklib"
-	      else
-	        add="$libdir/$linklib"
-	      fi
-	    else
-	      # We cannot seem to hardcode it, guess we'll fake it.
-	      add_dir="-L$libdir"
-	      # Try looking first in the location we're being installed to.
-	      if test -n "$inst_prefix_dir"; then
-		case "$libdir" in
-		  [\\/]*)
-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
-		    ;;
-		esac
-	      fi
-	      add="-l$name"
-	    fi
-
-	    if test "$linkmode" = prog; then
-	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
-	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
-	    else
-	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
-	      test -n "$add" && deplibs="$add $deplibs"
-	    fi
-	  fi
-	elif test "$linkmode" = prog; then
-	  # Here we assume that one of hardcode_direct or hardcode_minus_L
-	  # is not unsupported.  This is valid on all known static and
-	  # shared platforms.
-	  if test "$hardcode_direct" != unsupported; then
-	    test -n "$old_library" && linklib="$old_library"
-	    compile_deplibs="$dir/$linklib $compile_deplibs"
-	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
-	  else
-	    compile_deplibs="-l$name -L$dir $compile_deplibs"
-	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
-	  fi
-	elif test "$build_libtool_libs" = yes; then
-	  # Not a shared library
-	  if test "$deplibs_check_method" != pass_all; then
-	    # We're trying link a shared library against a static one
-	    # but the system doesn't support it.
-
-	    # Just print a warning and add the library to dependency_libs so
-	    # that the program can be linked against the static library.
-	    $echo
-	    $echo "*** Warning: This system can not link to static lib archive $lib."
-	    $echo "*** I have the capability to make that library automatically link in when"
-	    $echo "*** you link to this library.  But I can only do this if you have a"
-	    $echo "*** shared version of the library, which you do not appear to have."
-	    if test "$module" = yes; then
-	      $echo "*** But as you try to build a module library, libtool will still create "
-	      $echo "*** a static module, that should work as long as the dlopening application"
-	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
-	      if test -z "$global_symbol_pipe"; then
-		$echo
-		$echo "*** However, this would only work if libtool was able to extract symbol"
-		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		$echo "*** not find such a program.  So, this module is probably useless."
-		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	      fi
-	      if test "$build_old_libs" = no; then
-		build_libtool_libs=module
-		build_old_libs=yes
-	      else
-		build_libtool_libs=no
-	      fi
-	    fi
-	  else
-	    convenience="$convenience $dir/$old_library"
-	    old_convenience="$old_convenience $dir/$old_library"
-	    deplibs="$dir/$old_library $deplibs"
-	    link_static=yes
-	  fi
-	fi # link shared/static library?
-
-	if test "$linkmode" = lib; then
-	  if test -n "$dependency_libs" &&
-	     { test "$hardcode_into_libs" != yes ||
-	       test "$build_old_libs" = yes ||
-	       test "$link_static" = yes; }; then
-	    # Extract -R from dependency_libs
-	    temp_deplibs=
-	    for libdir in $dependency_libs; do
-	      case $libdir in
-	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
-		   case " $xrpath " in
-		   *" $temp_xrpath "*) ;;
-		   *) xrpath="$xrpath $temp_xrpath";;
-		   esac;;
-	      *) temp_deplibs="$temp_deplibs $libdir";;
-	      esac
-	    done
-	    dependency_libs="$temp_deplibs"
-	  fi
-
-	  newlib_search_path="$newlib_search_path $absdir"
-	  # Link against this library
-	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
-	  # ... and its dependency_libs
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    newdependency_libs="$deplib $newdependency_libs"
-	    if test "X$duplicate_deps" = "Xyes" ; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-	      esac
-	    fi
-	    tmp_libs="$tmp_libs $deplib"
-	  done
-
-	  if test "$link_all_deplibs" != no; then
-	    # Add the search paths of all dependency libraries
-	    for deplib in $dependency_libs; do
-	      case $deplib in
-	      -L*) path="$deplib" ;;
-	      *.la)
-		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
-		test "X$dir" = "X$deplib" && dir="."
-		# We need an absolute path.
-		case $dir in
-		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-		*)
-		  absdir=`cd "$dir" && pwd`
-		  if test -z "$absdir"; then
-		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-		    absdir="$dir"
-		  fi
-		  ;;
-		esac
-		if grep "^installed=no" $deplib > /dev/null; then
-		  path="$absdir/$objdir"
-		else
-		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-		  if test -z "$libdir"; then
-		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-		    exit $EXIT_FAILURE
-		  fi
-		  if test "$absdir" != "$libdir"; then
-		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
-		  fi
-		  path="$absdir"
-		fi
-		depdepl=
-		case $host in
-		*-*-darwin*)
-		  # we do not want to link against static libs,
-		  # but need to link against shared
-		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-		  if test -n "$deplibrary_names" ; then
-		    for tmp in $deplibrary_names ; do
-		      depdepl=$tmp
-		    done
-		    if test -f "$path/$depdepl" ; then
-		      depdepl="$path/$depdepl"
-		    fi
-		    # do not add paths which are already there
-		    case " $newlib_search_path " in
-		    *" $path "*) ;;
-		    *) newlib_search_path="$newlib_search_path $path";;
-		    esac
-		  fi
-		  path=""
-		  ;;
-		*)
-		  path="-L$path"
-		  ;;
-		esac
-		;;
-	      -l*)
-		case $host in
-		*-*-darwin*)
-		  # Again, we only want to link against shared libraries
-		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
-		  for tmp in $newlib_search_path ; do
-		    if test -f "$tmp/lib$tmp_libs.dylib" ; then
-		      eval depdepl="$tmp/lib$tmp_libs.dylib"
-		      break
-		    fi
-		  done
-		  path=""
-		  ;;
-		*) continue ;;
-		esac
-		;;
-	      *) continue ;;
-	      esac
-	      case " $deplibs " in
-	      *" $path "*) ;;
-	      *) deplibs="$path $deplibs" ;;
-	      esac
-	      case " $deplibs " in
-	      *" $depdepl "*) ;;
-	      *) deplibs="$depdepl $deplibs" ;;
-	      esac
-	    done
-	  fi # link_all_deplibs != no
-	fi # linkmode = lib
-      done # for deplib in $libs
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
-	# Link the dlpreopened libraries before other libraries
-	for deplib in $save_deplibs; do
-	  deplibs="$deplib $deplibs"
-	done
-      fi
-      if test "$pass" != dlopen; then
-	if test "$pass" != conv; then
-	  # Make sure lib_search_path contains only unique directories.
-	  lib_search_path=
-	  for dir in $newlib_search_path; do
-	    case "$lib_search_path " in
-	    *" $dir "*) ;;
-	    *) lib_search_path="$lib_search_path $dir" ;;
-	    esac
-	  done
-	  newlib_search_path=
-	fi
-
-	if test "$linkmode,$pass" != "prog,link"; then
-	  vars="deplibs"
-	else
-	  vars="compile_deplibs finalize_deplibs"
-	fi
-	for var in $vars dependency_libs; do
-	  # Add libraries to $var in reverse order
-	  eval tmp_libs=\"\$$var\"
-	  new_libs=
-	  for deplib in $tmp_libs; do
-	    # FIXME: Pedantically, this is the right thing to do, so
-	    #        that some nasty dependency loop isn't accidentally
-	    #        broken:
-	    #new_libs="$deplib $new_libs"
-	    # Pragmatically, this seems to cause very few problems in
-	    # practice:
-	    case $deplib in
-	    -L*) new_libs="$deplib $new_libs" ;;
-	    -R*) ;;
-	    *)
-	      # And here is the reason: when a library appears more
-	      # than once as an explicit dependence of a library, or
-	      # is implicitly linked in more than once by the
-	      # compiler, it is considered special, and multiple
-	      # occurrences thereof are not removed.  Compare this
-	      # with having the same library being listed as a
-	      # dependency of multiple other libraries: in this case,
-	      # we know (pedantically, we assume) the library does not
-	      # need to be listed more than once, so we keep only the
-	      # last copy.  This is not always right, but it is rare
-	      # enough that we require users that really mean to play
-	      # such unportable linking tricks to link the library
-	      # using -Wl,-lname, so that libtool does not consider it
-	      # for duplicate removal.
-	      case " $specialdeplibs " in
-	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
-	      *)
-		case " $new_libs " in
-		*" $deplib "*) ;;
-		*) new_libs="$deplib $new_libs" ;;
-		esac
-		;;
-	      esac
-	      ;;
-	    esac
-	  done
-	  tmp_libs=
-	  for deplib in $new_libs; do
-	    case $deplib in
-	    -L*)
-	      case " $tmp_libs " in
-	      *" $deplib "*) ;;
-	      *) tmp_libs="$tmp_libs $deplib" ;;
-	      esac
-	      ;;
-	    *) tmp_libs="$tmp_libs $deplib" ;;
-	    esac
-	  done
-	  eval $var=\"$tmp_libs\"
-	done # for var
-      fi
-      # Last step: remove runtime libs from dependency_libs
-      # (they stay in deplibs)
-      tmp_libs=
-      for i in $dependency_libs ; do
-	case " $predeps $postdeps $compiler_lib_search_path " in
-	*" $i "*)
-	  i=""
-	  ;;
-	esac
-	if test -n "$i" ; then
-	  tmp_libs="$tmp_libs $i"
-	fi
-      done
-      dependency_libs=$tmp_libs
-    done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
-      dlprefiles="$newdlprefiles"
-    fi
-
-    case $linkmode in
-    oldlib)
-      if test -n "$deplibs"; then
-	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-      fi
-
-      # Now set the variables for building old libraries.
-      build_libtool_libs=no
-      oldlibs="$output"
-      objs="$objs$old_deplibs"
-      ;;
-
-    lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
-      case $outputname in
-      lib*)
-	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-	eval shared_ext=\"$shrext_cmds\"
-	eval libname=\"$libname_spec\"
-	;;
-      *)
-	if test "$module" = no; then
-	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
-	  $echo "$help" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-	if test "$need_lib_prefix" != no; then
-	  # Add the "lib" prefix for modules if required
-	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-	  eval shared_ext=\"$shrext_cmds\"
-	  eval libname=\"$libname_spec\"
-	else
-	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-	fi
-	;;
-      esac
-
-      if test -n "$objs"; then
-	if test "$deplibs_check_method" != pass_all; then
-	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
-	  exit $EXIT_FAILURE
-	else
-	  $echo
-	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
-	  $echo "*** objects $objs is not portable!"
-	  libobjs="$libobjs $objs"
-	fi
-      fi
-
-      if test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
-      fi
-
-      set dummy $rpath
-      if test "$#" -gt 2; then
-	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-      fi
-      install_libdir="$2"
-
-      oldlibs=
-      if test -z "$rpath"; then
-	if test "$build_libtool_libs" = yes; then
-	  # Building a libtool convenience library.
-	  # Some compilers have problems with a `.al' extension so
-	  # convenience libraries should have the same extension an
-	  # archive normally would.
-	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
-	  build_libtool_libs=convenience
-	  build_old_libs=yes
-	fi
-
-	if test -n "$vinfo"; then
-	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
-	fi
-
-	if test -n "$release"; then
-	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
-	fi
-      else
-
-	# Parse the version information argument.
-	save_ifs="$IFS"; IFS=':'
-	set dummy $vinfo 0 0 0
-	IFS="$save_ifs"
-
-	if test -n "$8"; then
-	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
-	  $echo "$help" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	# convert absolute version numbers to libtool ages
-	# this retains compatibility with .la files and attempts
-	# to make the code below a bit more comprehensible
-
-	case $vinfo_number in
-	yes)
-	  number_major="$2"
-	  number_minor="$3"
-	  number_revision="$4"
-	  #
-	  # There are really only two kinds -- those that
-	  # use the current revision as the major version
-	  # and those that subtract age and use age as
-	  # a minor version.  But, then there is irix
-	  # which has an extra 1 added just for fun
-	  #
-	  case $version_type in
-	  darwin|linux|osf|windows)
-	    current=`expr $number_major + $number_minor`
-	    age="$number_minor"
-	    revision="$number_revision"
-	    ;;
-	  freebsd-aout|freebsd-elf|sunos)
-	    current="$number_major"
-	    revision="$number_minor"
-	    age="0"
-	    ;;
-	  irix|nonstopux)
-	    current=`expr $number_major + $number_minor - 1`
-	    age="$number_minor"
-	    revision="$number_minor"
-	    ;;
-	  esac
-	  ;;
-	no)
-	  current="$2"
-	  revision="$3"
-	  age="$4"
-	  ;;
-	esac
-
-	# Check that each of the things are valid numbers.
-	case $current in
-	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-	*)
-	  $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-
-	case $revision in
-	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-	*)
-	  $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-
-	case $age in
-	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-	*)
-	  $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-
-	if test "$age" -gt "$current"; then
-	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	# Calculate the version variables.
-	major=
-	versuffix=
-	verstring=
-	case $version_type in
-	none) ;;
-
-	darwin)
-	  # Like Linux, but with the current version available in
-	  # verstring for coding it into the library header
-	  major=.`expr $current - $age`
-	  versuffix="$major.$age.$revision"
-	  # Darwin ld doesn't like 0 for these options...
-	  minor_current=`expr $current + 1`
-	  verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
-	  ;;
-
-	freebsd-aout)
-	  major=".$current"
-	  versuffix=".$current.$revision";
-	  ;;
-
-	freebsd-elf)
-	  major=".$current"
-	  versuffix=".$current";
-	  ;;
-
-	irix | nonstopux)
-	  major=`expr $current - $age + 1`
-
-	  case $version_type in
-	    nonstopux) verstring_prefix=nonstopux ;;
-	    *)         verstring_prefix=sgi ;;
-	  esac
-	  verstring="$verstring_prefix$major.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$revision
-	  while test "$loop" -ne 0; do
-	    iface=`expr $revision - $loop`
-	    loop=`expr $loop - 1`
-	    verstring="$verstring_prefix$major.$iface:$verstring"
-	  done
-
-	  # Before this point, $major must not contain `.'.
-	  major=.$major
-	  versuffix="$major.$revision"
-	  ;;
-
-	linux)
-	  major=.`expr $current - $age`
-	  versuffix="$major.$age.$revision"
-	  ;;
-
-	osf)
-	  major=.`expr $current - $age`
-	  versuffix=".$current.$age.$revision"
-	  verstring="$current.$age.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$age
-	  while test "$loop" -ne 0; do
-	    iface=`expr $current - $loop`
-	    loop=`expr $loop - 1`
-	    verstring="$verstring:${iface}.0"
-	  done
-
-	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
-	  ;;
-
-	sunos)
-	  major=".$current"
-	  versuffix=".$current.$revision"
-	  ;;
-
-	windows)
-	  # Use '-' rather than '.', since we only want one
-	  # extension on DOS 8.3 filesystems.
-	  major=`expr $current - $age`
-	  versuffix="-$major"
-	  ;;
-
-	*)
-	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
-	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-
-	# Clear the version info if we defaulted, and they specified a release.
-	if test -z "$vinfo" && test -n "$release"; then
-	  major=
-	  case $version_type in
-	  darwin)
-	    # we can't check for "0.0" in archive_cmds due to quoting
-	    # problems, so we reset it completely
-	    verstring=
-	    ;;
-	  *)
-	    verstring="0.0"
-	    ;;
-	  esac
-	  if test "$need_version" = no; then
-	    versuffix=
-	  else
-	    versuffix=".0.0"
-	  fi
-	fi
-
-	# Remove version info from name if versioning should be avoided
-	if test "$avoid_version" = yes && test "$need_version" = no; then
-	  major=
-	  versuffix=
-	  verstring=""
-	fi
-
-	# Check to see if the archive will have undefined symbols.
-	if test "$allow_undefined" = yes; then
-	  if test "$allow_undefined_flag" = unsupported; then
-	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-	    build_libtool_libs=no
-	    build_old_libs=yes
-	  fi
-	else
-	  # Don't allow undefined symbols.
-	  allow_undefined_flag="$no_undefined_flag"
-	fi
-      fi
-
-      if test "$mode" != relink; then
-	# Remove our outputs, but don't remove object files since they
-	# may have been created when compiling PIC objects.
-	removelist=
-	tempremovelist=`$echo "$output_objdir/*"`
-	for p in $tempremovelist; do
-	  case $p in
-	    *.$objext)
-	       ;;
-	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-	       if test "X$precious_files_regex" != "X"; then
-	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-	         then
-		   continue
-		 fi
-	       fi
-	       removelist="$removelist $p"
-	       ;;
-	    *) ;;
-	  esac
-	done
-	if test -n "$removelist"; then
-	  $show "${rm}r $removelist"
-	  $run ${rm}r $removelist
-	fi
-      fi
-
-      # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
-	# Transform .lo files to .o files.
-	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-      fi
-
-      # Eliminate all temporary directories.
-      for path in $notinst_path; do
-	lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
-	deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
-	dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
-      done
-
-      if test -n "$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	temp_xrpath=
-	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-	  esac
-	done
-	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
-	  dependency_libs="$temp_xrpath $dependency_libs"
-	fi
-      fi
-
-      # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
-      dlfiles=
-      for lib in $old_dlfiles; do
-	case " $dlprefiles $dlfiles " in
-	*" $lib "*) ;;
-	*) dlfiles="$dlfiles $lib" ;;
-	esac
-      done
-
-      # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
-      dlprefiles=
-      for lib in $old_dlprefiles; do
-	case "$dlprefiles " in
-	*" $lib "*) ;;
-	*) dlprefiles="$dlprefiles $lib" ;;
-	esac
-      done
-
-      if test "$build_libtool_libs" = yes; then
-	if test -n "$rpath"; then
-	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
-	    # these systems don't actually have a c library (as such)!
-	    ;;
-	  *-*-rhapsody* | *-*-darwin1.[012])
-	    # Rhapsody C library is in the System framework
-	    deplibs="$deplibs -framework System"
-	    ;;
-	  *-*-netbsd*)
-	    # Don't link with libc until the a.out ld.so is fixed.
-	    ;;
-	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-	    # Do not include libc due to us having libc/libc_r.
-	    test "X$arg" = "X-lc" && continue
-	    ;;
- 	  *)
-	    # Add libc to deplibs on all other systems if necessary.
-	    if test "$build_libtool_need_lc" = "yes"; then
-	      deplibs="$deplibs -lc"
-	    fi
-	    ;;
-	  esac
-	fi
-
-	# Transform deplibs into only deplibs that can be linked in shared.
-	name_save=$name
-	libname_save=$libname
-	release_save=$release
-	versuffix_save=$versuffix
-	major_save=$major
-	# I'm not sure if I'm treating the release correctly.  I think
-	# release should show up in the -l (ie -lgmp5) so we don't want to
-	# add it in twice.  Is that correct?
-	release=""
-	versuffix=""
-	major=""
-	newdeplibs=
-	droppeddeps=no
-	case $deplibs_check_method in
-	pass_all)
-	  # Don't check for shared/static.  Everything works.
-	  # This might be a little naive.  We might want to check
-	  # whether the library exists or not.  But this is on
-	  # osf3 & osf4 and I'm not really sure... Just
-	  # implementing what was already the behavior.
-	  newdeplibs=$deplibs
-	  ;;
-	test_compile)
-	  # This code stresses the "libraries are programs" paradigm to its
-	  # limits. Maybe even breaks it.  We compile a program, linking it
-	  # against the deplibs as a proxy for the library.  Then we can check
-	  # whether they linked in statically or dynamically with ldd.
-	  $rm conftest.c
-	  cat > conftest.c <<EOF
-	  int main() { return 0; }
-EOF
-	  $rm conftest
-	  $LTCC -o conftest conftest.c $deplibs
-	  if test "$?" -eq 0 ; then
-	    ldd_output=`ldd conftest`
-	    for i in $deplibs; do
-	      name="`expr $i : '-l\(.*\)'`"
-	      # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" -ne "0"; then
-		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		  case " $predeps $postdeps " in
-		  *" $i "*)
-		    newdeplibs="$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
-		  deplib_match=$2
-		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$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
-	      else
-		newdeplibs="$newdeplibs $i"
-	      fi
-	    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
-	      name="`expr $i : '-l\(.*\)'`"
-	      # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" != "0"; then
-		$rm conftest
-		$LTCC -o conftest conftest.c $i
-		# Did it work?
-		if test "$?" -eq 0 ; then
-		  ldd_output=`ldd conftest`
-		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		    case " $predeps $postdeps " in
-		    *" $i "*)
-		      newdeplibs="$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
-		    deplib_match=$2
-		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      newdeplibs="$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
-	      else
-		newdeplibs="$newdeplibs $i"
-	      fi
-	    done
-	  fi
-	  ;;
-	file_magic*)
-	  set dummy $deplibs_check_method
-	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-	  for a_deplib in $deplibs; do
-	    name="`expr $a_deplib : '-l\(.*\)'`"
-	    # If $name is empty we are operating on a -L argument.
-            if test "$name" != "" && test  "$name" != "0"; then
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		case " $predeps $postdeps " in
-		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
-		  a_deplib=""
-		  ;;
-		esac
-	      fi
-	      if test -n "$a_deplib" ; then
-		libname=`eval \\$echo \"$libname_spec\"`
-		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		  for potent_lib in $potential_libs; do
-		      # Follow soft links.
-		      if ls -lLd "$potent_lib" 2>/dev/null \
-			 | grep " -> " >/dev/null; then
-			continue
-		      fi
-		      # The statement above tries to avoid entering an
-		      # endless loop below, in case of cyclic links.
-		      # We might still enter an endless loop, since a link
-		      # loop can be closed while we follow links,
-		      # but so what?
-		      potlib="$potent_lib"
-		      while test -h "$potlib" 2>/dev/null; do
-			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
-			case $potliblink in
-			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-			esac
-		      done
-		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-			 | ${SED} 10q \
-			 | $EGREP "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
-			a_deplib=""
-			break 2
-		      fi
-		  done
-		done
-	      fi
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		$echo
-		$echo "*** Warning: linker path does not have real file for library $a_deplib."
-		$echo "*** I have the capability to make that library automatically link in when"
-		$echo "*** you link to this library.  But I can only do this if you have a"
-		$echo "*** shared version of the library, which you do not appear to have"
-		$echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
-		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
-		else
-		  $echo "*** with $libname and none of the candidates passed a file format test"
-		  $echo "*** using a file magic. Last file checked: $potlib"
-		fi
-	      fi
-	    else
-	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
-	    fi
-	  done # Gone through all deplibs.
-	  ;;
-	match_pattern*)
-	  set dummy $deplibs_check_method
-	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-	  for a_deplib in $deplibs; do
-	    name="`expr $a_deplib : '-l\(.*\)'`"
-	    # If $name is empty we are operating on a -L argument.
-	    if test -n "$name" && test "$name" != "0"; then
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		case " $predeps $postdeps " in
-		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
-		  a_deplib=""
-		  ;;
-		esac
-	      fi
-	      if test -n "$a_deplib" ; then
-		libname=`eval \\$echo \"$libname_spec\"`
-		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		  for potent_lib in $potential_libs; do
-		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval $echo \"$potent_lib\" 2>/dev/null \
-		        | ${SED} 10q \
-		        | $EGREP "$match_pattern_regex" > /dev/null; then
-		      newdeplibs="$newdeplibs $a_deplib"
-		      a_deplib=""
-		      break 2
-		    fi
-		  done
-		done
-	      fi
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		$echo
-		$echo "*** Warning: linker path does not have real file for library $a_deplib."
-		$echo "*** I have the capability to make that library automatically link in when"
-		$echo "*** you link to this library.  But I can only do this if you have a"
-		$echo "*** shared version of the library, which you do not appear to have"
-		$echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
-		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
-		else
-		  $echo "*** with $libname and none of the candidates passed a file format test"
-		  $echo "*** using a regex pattern. Last file checked: $potlib"
-		fi
-	      fi
-	    else
-	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
-	    fi
-	  done # Gone through all deplibs.
-	  ;;
-	none | unknown | *)
-	  newdeplibs=""
-	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-	    -e 's/ -[LR][^ ]*//g'`
-	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	    for i in $predeps $postdeps ; do
-	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
-	    done
-	  fi
-	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
-	    | grep . >/dev/null; then
-	    $echo
-	    if test "X$deplibs_check_method" = "Xnone"; then
-	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
-	    else
-	      $echo "*** Warning: inter-library dependencies are not known to be supported."
-	    fi
-	    $echo "*** All declared inter-library dependencies are being dropped."
-	    droppeddeps=yes
-	  fi
-	  ;;
-	esac
-	versuffix=$versuffix_save
-	major=$major_save
-	release=$release_save
-	libname=$libname_save
-	name=$name_save
-
-	case $host in
-	*-*-rhapsody* | *-*-darwin1.[012])
-	  # On Rhapsody replace the C library is the System framework
-	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
-	  ;;
-	esac
-
-	if test "$droppeddeps" = yes; then
-	  if test "$module" = yes; then
-	    $echo
-	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
-	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
-	    $echo "*** a static module, that should work as long as the dlopening"
-	    $echo "*** application is linked with the -dlopen flag."
-	    if test -z "$global_symbol_pipe"; then
-	      $echo
-	      $echo "*** However, this would only work if libtool was able to extract symbol"
-	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      $echo "*** not find such a program.  So, this module is probably useless."
-	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	    fi
-	    if test "$build_old_libs" = no; then
-	      oldlibs="$output_objdir/$libname.$libext"
-	      build_libtool_libs=module
-	      build_old_libs=yes
-	    else
-	      build_libtool_libs=no
-	    fi
-	  else
-	    $echo "*** The inter-library dependencies that have been dropped here will be"
-	    $echo "*** automatically added whenever a program is linked with this library"
-	    $echo "*** or is declared to -dlopen it."
-
-	    if test "$allow_undefined" = no; then
-	      $echo
-	      $echo "*** Since this library must not contain undefined symbols,"
-	      $echo "*** because either the platform does not support them or"
-	      $echo "*** it was explicitly requested with -no-undefined,"
-	      $echo "*** libtool will only create a static version of it."
-	      if test "$build_old_libs" = no; then
-		oldlibs="$output_objdir/$libname.$libext"
-		build_libtool_libs=module
-		build_old_libs=yes
-	      else
-		build_libtool_libs=no
-	      fi
-	    fi
-	  fi
-	fi
-	# Done checking deplibs!
-	deplibs=$newdeplibs
-      fi
-
-      # All the library-specific variables (install_libdir is set above).
-      library_names=
-      old_library=
-      dlname=
-
-      # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-	if test "$hardcode_into_libs" = yes; then
-	  # Hardcode the library paths
-	  hardcode_libdirs=
-	  dep_rpath=
-	  rpath="$finalize_rpath"
-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
-	  for libdir in $rpath; do
-	    if test -n "$hardcode_libdir_flag_spec"; then
-	      if test -n "$hardcode_libdir_separator"; then
-		if test -z "$hardcode_libdirs"; then
-		  hardcode_libdirs="$libdir"
-		else
-		  # Just accumulate the unique libdirs.
-		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		    ;;
-		  *)
-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		    ;;
-		  esac
-		fi
-	      else
-		eval flag=\"$hardcode_libdir_flag_spec\"
-		dep_rpath="$dep_rpath $flag"
-	      fi
-	    elif test -n "$runpath_var"; then
-	      case "$perm_rpath " in
-	      *" $libdir "*) ;;
-	      *) perm_rpath="$perm_rpath $libdir" ;;
-	      esac
-	    fi
-	  done
-	  # Substitute the hardcoded libdirs into the rpath.
-	  if test -n "$hardcode_libdir_separator" &&
-	     test -n "$hardcode_libdirs"; then
-	    libdir="$hardcode_libdirs"
-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      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
-	      rpath="$rpath$dir:"
-	    done
-	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
-	  fi
-	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
-	fi
-
-	shlibpath="$finalize_shlibpath"
-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-	if test -n "$shlibpath"; then
-	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
-	fi
-
-	# Get the real and link names of the library.
-	eval shared_ext=\"$shrext_cmds\"
-	eval library_names=\"$library_names_spec\"
-	set dummy $library_names
-	realname="$2"
-	shift; shift
-
-	if test -n "$soname_spec"; then
-	  eval soname=\"$soname_spec\"
-	else
-	  soname="$realname"
-	fi
-	if test -z "$dlname"; then
-	  dlname=$soname
-	fi
-
-	lib="$output_objdir/$realname"
-	for link
-	do
-	  linknames="$linknames $link"
-	done
-
-	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
-	# Prepare the list of exported symbols
-	if test -z "$export_symbols"; then
-	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-	    $show "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
-	    $run $rm $export_symbols
-	    cmds=$export_symbols_cmds
-	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
-	      IFS="$save_ifs"
-	      eval cmd=\"$cmd\"
-	      if len=`expr "X$cmd" : ".*"` &&
-	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	        $show "$cmd"
-	        $run eval "$cmd" || exit $?
-	        skipped_export=false
-	      else
-	        # The command line is too long to execute in one step.
-	        $show "using reloadable object file for export list..."
-	        skipped_export=:
-	      fi
-	    done
-	    IFS="$save_ifs"
-	    if test -n "$export_symbols_regex"; then
-	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
-	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
-	    fi
-	  fi
-	fi
-
-	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-	fi
-
-	tmp_deplibs=
-	for test_deplib in $deplibs; do
-		case " $convenience " in
-		*" $test_deplib "*) ;;
-		*)
-			tmp_deplibs="$tmp_deplibs $test_deplib"
-			;;
-		esac
-	done
-	deplibs="$tmp_deplibs"
-
-	if test -n "$convenience"; then
-	  if test -n "$whole_archive_flag_spec"; then
-	    save_libobjs=$libobjs
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	  else
-	    gentop="$output_objdir/${outputname}x"
-	    generated="$generated $gentop"
-
-	    func_extract_archives $gentop $convenience
-	    libobjs="$libobjs $func_extract_archives_result"
-	  fi
-	fi
-	
-	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-	  eval flag=\"$thread_safe_flag_spec\"
-	  linker_flags="$linker_flags $flag"
-	fi
-
-	# Make a backup of the uninstalled library when relinking
-	if test "$mode" = relink; then
-	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
-	fi
-
-	# Do each of the archive commands.
-	if test "$module" = yes && test -n "$module_cmds" ; then
-	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-	    eval test_cmds=\"$module_expsym_cmds\"
-	    cmds=$module_expsym_cmds
-	  else
-	    eval test_cmds=\"$module_cmds\"
-	    cmds=$module_cmds
-	  fi
-	else
-	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	  eval test_cmds=\"$archive_expsym_cmds\"
-	  cmds=$archive_expsym_cmds
-	else
-	  eval test_cmds=\"$archive_cmds\"
-	  cmds=$archive_cmds
-	  fi
-	fi
-
-	if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
-	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	  :
-	else
-	  # The command line is too long to link in one step, link piecewise.
-	  $echo "creating reloadable object files..."
-
-	  # Save the value of $output and $libobjs because we want to
-	  # use them later.  If we have whole_archive_flag_spec, we
-	  # want to use save_libobjs as it was before
-	  # whole_archive_flag_spec was expanded, because we can't
-	  # assume the linker understands whole_archive_flag_spec.
-	  # This may have to be revisited, in case too many
-	  # convenience libraries get linked in and end up exceeding
-	  # the spec.
-	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
-	    save_libobjs=$libobjs
-	  fi
-	  save_output=$output
-	  output_la=`$echo "X$output" | $Xsed -e "$basename"`
-
-	  # Clear the reloadable object creation command queue and
-	  # initialize k to one.
-	  test_cmds=
-	  concat_cmds=
-	  objlist=
-	  delfiles=
-	  last_robj=
-	  k=1
-	  output=$output_objdir/$output_la-${k}.$objext
-	  # Loop over the list of objects to be linked.
-	  for obj in $save_libobjs
-	  do
-	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
-	    if test "X$objlist" = X ||
-	       { len=`expr "X$test_cmds" : ".*"` &&
-		 test "$len" -le "$max_cmd_len"; }; then
-	      objlist="$objlist $obj"
-	    else
-	      # The command $test_cmds is almost too long, add a
-	      # command to the queue.
-	      if test "$k" -eq 1 ; then
-		# The first file doesn't have a previous command to add.
-		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-	      else
-		# All subsequent reloadable object files will link in
-		# the last one created.
-		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
-	      fi
-	      last_robj=$output_objdir/$output_la-${k}.$objext
-	      k=`expr $k + 1`
-	      output=$output_objdir/$output_la-${k}.$objext
-	      objlist=$obj
-	      len=1
-	    fi
-	  done
-	  # Handle the remaining objects by creating one last
-	  # reloadable object file.  All subsequent reloadable object
-	  # files will link in the last one created.
-	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
-	  if ${skipped_export-false}; then
-	    $show "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
-	    $run $rm $export_symbols
-	    libobjs=$output
-	    # Append the command to create the export file.
-	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
-          fi
-
-	  # Set up a command to remove the reloadable object files
-	  # after they are used.
-	  i=0
-	  while test "$i" -lt "$k"
-	  do
-	    i=`expr $i + 1`
-	    delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
-	  done
-
-	  $echo "creating a temporary reloadable object file: $output"
-
-	  # Loop through the commands generated above and execute them.
-	  save_ifs="$IFS"; IFS='~'
-	  for cmd in $concat_cmds; do
-	    IFS="$save_ifs"
-	    $show "$cmd"
-	    $run eval "$cmd" || exit $?
-	  done
-	  IFS="$save_ifs"
-
-	  libobjs=$output
-	  # Restore the value of output.
-	  output=$save_output
-
-	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	  fi
-	  # Expand the library linking commands again to reset the
-	  # value of $libobjs for piecewise linking.
-
-	  # Do each of the archive commands.
-	  if test "$module" = yes && test -n "$module_cmds" ; then
-	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-	      cmds=$module_expsym_cmds
-	    else
-	      cmds=$module_cmds
-	    fi
-	  else
-	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	    cmds=$archive_expsym_cmds
-	  else
-	    cmds=$archive_cmds
-	    fi
-	  fi
-
-	  # Append the command to remove the reloadable object files
-	  # to the just-reset $cmds.
-	  eval cmds=\"\$cmds~\$rm $delfiles\"
-	fi
-	save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  eval cmd=\"$cmd\"
-	  $show "$cmd"
-	  $run eval "$cmd" || exit $?
-	done
-	IFS="$save_ifs"
-
-	# Restore the uninstalled library and exit
-	if test "$mode" = relink; then
-	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
-	  exit $EXIT_SUCCESS
-	fi
-
-	# Create links to the real library.
-	for linkname in $linknames; do
-	  if test "$realname" != "$linkname"; then
-	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
-	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
-	  fi
-	done
-
-	# If -module or -export-dynamic was specified, set the dlname.
-	if test "$module" = yes || test "$export_dynamic" = yes; then
-	  # On all known operating systems, these are identical.
-	  dlname="$soname"
-	fi
-      fi
-      ;;
-
-    obj)
-      if test -n "$deplibs"; then
-	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-      fi
-
-      case $output in
-      *.lo)
-	if test -n "$objs$old_deplibs"; then
-	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-	libobj="$output"
-	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-	;;
-      *)
-	libobj=
-	obj="$output"
-	;;
-      esac
-
-      # Delete the old objects.
-      $run $rm $obj $libobj
-
-      # Objects from convenience libraries.  This assumes
-      # single-version convenience libraries.  Whenever we create
-      # different ones for PIC/non-PIC, this we'll have to duplicate
-      # the extraction.
-      reload_conv_objs=
-      gentop=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec
-      wl=
-
-      if test -n "$convenience"; then
-	if test -n "$whole_archive_flag_spec"; then
-	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
-	else
-	  gentop="$output_objdir/${obj}x"
-	  generated="$generated $gentop"
-
-	  func_extract_archives $gentop $convenience
-	  reload_conv_objs="$reload_objs $func_extract_archives_result"
-	fi
-      fi
-
-      # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
-      output="$obj"
-      cmds=$reload_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	eval cmd=\"$cmd\"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-
-      # Exit if we aren't doing a library object file.
-      if test -z "$libobj"; then
-	if test -n "$gentop"; then
-	  $show "${rm}r $gentop"
-	  $run ${rm}r $gentop
-	fi
-
-	exit $EXIT_SUCCESS
-      fi
-
-      if test "$build_libtool_libs" != yes; then
-	if test -n "$gentop"; then
-	  $show "${rm}r $gentop"
-	  $run ${rm}r $gentop
-	fi
-
-	# Create an invalid libtool object if no PIC, so that we don't
-	# accidentally link it into a program.
-	# $show "echo timestamp > $libobj"
-	# $run eval "echo timestamp > $libobj" || exit $?
-	exit $EXIT_SUCCESS
-      fi
-
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
-	# Only do commands if we really have different PIC objects.
-	reload_objs="$libobjs $reload_conv_objs"
-	output="$libobj"
-	cmds=$reload_cmds
-	save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  eval cmd=\"$cmd\"
-	  $show "$cmd"
-	  $run eval "$cmd" || exit $?
-	done
-	IFS="$save_ifs"
-      fi
-
-      if test -n "$gentop"; then
-	$show "${rm}r $gentop"
-	$run ${rm}r $gentop
-      fi
-
-      exit $EXIT_SUCCESS
-      ;;
-
-    prog)
-      case $host in
-	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
-      esac
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-      fi
-
-      if test "$preload" = yes; then
-	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
-	   test "$dlopen_self_static" = unknown; then
-	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-	fi
-      fi
-
-      case $host in
-      *-*-rhapsody* | *-*-darwin1.[012])
-	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-	;;
-      esac
-
-      case $host in
-      *darwin*)
-        # Don't allow lazy linking, it breaks C++ global constructors
-        if test "$tagname" = CXX ; then
-        compile_command="$compile_command ${wl}-bind_at_load"
-        finalize_command="$finalize_command ${wl}-bind_at_load"
-        fi
-        ;;
-      esac
-
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
-
-      if test -n "$rpath$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	for libdir in $rpath $xrpath; do
-	  # This is the magic to use -rpath.
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-	  esac
-	done
-      fi
-
-      # Now hardcode the library paths
-      rpath=
-      hardcode_libdirs=
-      for libdir in $compile_rpath $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
-	  esac
-	fi
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-	  case :$dllsearchpath: in
-	  *":$libdir:"*) ;;
-	  *) dllsearchpath="$dllsearchpath:$libdir";;
-	  esac
-	  ;;
-	esac
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      compile_rpath="$rpath"
-
-      rpath=
-      hardcode_libdirs=
-      for libdir in $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$finalize_perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-	  esac
-	fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      finalize_rpath="$rpath"
-
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
-	# Transform all the library objects into standard objects.
-	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-      fi
-
-      dlsyms=
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	if test -n "$NM" && test -n "$global_symbol_pipe"; then
-	  dlsyms="${outputname}S.c"
-	else
-	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
-	fi
-      fi
-
-      if test -n "$dlsyms"; then
-	case $dlsyms in
-	"") ;;
-	*.c)
-	  # Discover the nlist of each of the dlfiles.
-	  nlist="$output_objdir/${outputname}.nm"
-
-	  $show "$rm $nlist ${nlist}S ${nlist}T"
-	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
-	  # Parse the name list into a source file.
-	  $show "creating $output_objdir/$dlsyms"
-
-	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
-	  if test "$dlself" = yes; then
-	    $show "generating symbol list for \`$output'"
-
-	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
-	    # Add our own program objects to the symbol list.
-	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	    for arg in $progfiles; do
-	      $show "extracting global C symbols from \`$arg'"
-	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-	    done
-
-	    if test -n "$exclude_expsyms"; then
-	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-	      $run eval '$mv "$nlist"T "$nlist"'
-	    fi
-
-	    if test -n "$export_symbols_regex"; then
-	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-	      $run eval '$mv "$nlist"T "$nlist"'
-	    fi
-
-	    # Prepare the list of exported symbols
-	    if test -z "$export_symbols"; then
-	      export_symbols="$output_objdir/$outputname.exp"
-	      $run $rm $export_symbols
-	      $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-	    else
-	      $run eval "${SED} -e 's/\([ ][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
-	      $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
-	      $run eval 'mv "$nlist"T "$nlist"'
-	    fi
-	  fi
-
-	  for arg in $dlprefiles; do
-	    $show "extracting global C symbols from \`$arg'"
-	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
-	    $run eval '$echo ": $name " >> "$nlist"'
-	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-	  done
-
-	  if test -z "$run"; then
-	    # Make sure we have at least an empty file.
-	    test -f "$nlist" || : > "$nlist"
-
-	    if test -n "$exclude_expsyms"; then
-	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-	      $mv "$nlist"T "$nlist"
-	    fi
-
-	    # Try sorting and uniquifying the output.
-	    if grep -v "^: " < "$nlist" |
-		if sort -k 3 </dev/null >/dev/null 2>&1; then
-		  sort -k 3
-		else
-		  sort +2
-		fi |
-		uniq > "$nlist"S; then
-	      :
-	    else
-	      grep -v "^: " < "$nlist" > "$nlist"S
-	    fi
-
-	    if test -f "$nlist"S; then
-	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
-	    else
-	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
-	    fi
-
-	    $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-"
-
-	    case $host in
-	    *cygwin* | *mingw* )
-	  $echo >> "$output_objdir/$dlsyms" "\
-/* DATA imports from DLLs on WIN32 can't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs */
-struct {
-"
-	      ;;
-	    * )
-	  $echo >> "$output_objdir/$dlsyms" "\
-const struct {
-"
-	      ;;
-	    esac
-
-
-	  $echo >> "$output_objdir/$dlsyms" "\
-  const char *name;
-  lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
-	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
-	    $echo >> "$output_objdir/$dlsyms" "\
-  {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
-	  fi
-
-	  pic_flag_for_symtable=
-	  case $host in
-	  # compiling the symbol table file with pic_flag works around
-	  # a FreeBSD bug that causes programs to crash when -lm is
-	  # linked before any other PIC object.  But we must not use
-	  # pic_flag when linking with -static.  The problem exists in
-	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
-	    case "$compile_command " in
-	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
-	    esac;;
-	  *-*-hpux*)
-	    case "$compile_command " in
-	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag";;
-	    esac
-	  esac
-
-	  # Now compile the dynamic symbol file.
-	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
-	  # Clean up the generated files.
-	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
-	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
-	  # Transform the symbol file into the correct name.
-	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-	  ;;
-	*)
-	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-      else
-	# We keep going just in case the user didn't refer to
-	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
-	# really was required.
-
-	# Nullify the symbol file.
-	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-      fi
-
-      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-	# Replace the output file specification.
-	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-	link_command="$compile_command$compile_rpath"
-
-	# We have no uninstalled library dependencies, so finalize right now.
-	$show "$link_command"
-	$run eval "$link_command"
-	status=$?
-
-	# Delete the generated files.
-	if test -n "$dlsyms"; then
-	  $show "$rm $output_objdir/${outputname}S.${objext}"
-	  $run $rm "$output_objdir/${outputname}S.${objext}"
-	fi
-
-	exit $status
-      fi
-
-      if test -n "$shlibpath_var"; then
-	# We should set the shlibpath_var
-	rpath=
-	for dir in $temp_rpath; do
-	  case $dir in
-	  [\\/]* | [A-Za-z]:[\\/]*)
-	    # Absolute path.
-	    rpath="$rpath$dir:"
-	    ;;
-	  *)
-	    # Relative path: add a thisdir entry.
-	    rpath="$rpath\$thisdir/$dir:"
-	    ;;
-	  esac
-	done
-	temp_rpath="$rpath"
-      fi
-
-      if test -n "$compile_shlibpath$finalize_shlibpath"; then
-	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-      fi
-      if test -n "$finalize_shlibpath"; then
-	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-      fi
-
-      compile_var=
-      finalize_var=
-      if test -n "$runpath_var"; then
-	if test -n "$perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
-	  done
-	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-	if test -n "$finalize_perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
-	  done
-	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-      fi
-
-      if test "$no_install" = yes; then
-	# We don't need to create a wrapper script.
-	link_command="$compile_var$compile_command$compile_rpath"
-	# Replace the output file specification.
-	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-	# Delete the old output file.
-	$run $rm $output
-	# Link the executable and exit
-	$show "$link_command"
-	$run eval "$link_command" || exit $?
-	exit $EXIT_SUCCESS
-      fi
-
-      if test "$hardcode_action" = relink; then
-	# Fast installation is not supported
-	link_command="$compile_var$compile_command$compile_rpath"
-	relink_command="$finalize_var$finalize_command$finalize_rpath"
-
-	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
-	$echo "$modename: \`$output' will be relinked during installation" 1>&2
-      else
-	if test "$fast_install" != no; then
-	  link_command="$finalize_var$compile_command$finalize_rpath"
-	  if test "$fast_install" = yes; then
-	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
-      # Delete the old output files.
-      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
-      $show "$link_command"
-      $run eval "$link_command" || exit $?
-
-      # Now create the wrapper script.
-      $show "creating $output"
-
-      # Quote the relink command for shipping.
-      if test -n "$relink_command"; then
-	# Preserve any variables that may affect compiler behavior
-	for var in $variables_saved_for_relink; do
-	  if eval test -z \"\${$var+set}\"; then
-	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-	  elif eval var_value=\$$var; test -z "$var_value"; then
-	    relink_command="$var=; export $var; $relink_command"
-	  else
-	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
-	  fi
-	done
-	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$echo "X$relink_command" | $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"`
-      fi
-
-      # Only actually do things if our run command is non-null.
-      if test -z "$run"; then
-	# win32 will think the script is a binary if it has
-	# a .exe suffix, so we strip it off here.
-	case $output in
-	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
-	esac
-	# test for cygwin because mv fails w/o .exe extensions
-	case $host in
-	  *cygwin*)
-	    exeext=.exe
-	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
-	  *) exeext= ;;
-	esac
-	case $host in
-	  *cygwin* | *mingw* )
-	    cwrappersource=`$echo ${objdir}/lt-${outputname}.c`
-	    cwrapper=`$echo ${output}.exe`
-	    $rm $cwrappersource $cwrapper
-	    trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
-	    cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
-   The $output program cannot be directly executed until all the libtool
-   libraries that it depends on are installed.
-
-   This wrapper 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* "/bin/sh $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
-*/
-EOF
-	    cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
-#define HAVE_DOS_BASED_FILE_SYSTEM
-#ifndef DIR_SEPARATOR_2
-#define DIR_SEPARATOR_2 '\\'
-#endif
-#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 */
-
-#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-char * basename (const char *name);
-char * fnqualify(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
-  char **newargz;
-  int i;
-
-  program_name = (char *) xstrdup ((char *) basename (argv[0]));
-  newargz = XMALLOC(char *, argc+2);
-EOF
-
-	    cat >> $cwrappersource <<EOF
-  newargz[0] = "$SHELL";
-EOF
-
-	    cat >> $cwrappersource <<"EOF"
-  newargz[1] = fnqualify(argv[0]);
-  /* we know the script has the same name, without the .exe */
-  /* so make sure newargz[1] doesn't end in .exe */
-  strendzap(newargz[1],".exe");
-  for (i = 1; i < argc; i++)
-    newargz[i+1] = xstrdup(argv[i]);
-  newargz[argc+1] = NULL;
-EOF
-
-	    cat >> $cwrappersource <<EOF
-  execv("$SHELL",newargz);
-EOF
-
-	    cat >> $cwrappersource <<"EOF"
-}
-
-void *
-xmalloc (size_t num)
-{
-  void * p = (void *) malloc (num);
-  if (!p)
-    lt_fatal ("Memory exhausted");
-
-  return p;
-}
-
-char *
-xstrdup (const char *string)
-{
-  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-;
-}
-
-char *
-basename (const char *name)
-{
-  const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  /* Skip over the disk name in MSDOS pathnames. */
-  if (isalpha (name[0]) && name[1] == ':')
-    name += 2;
-#endif
-
-  for (base = name; *name; name++)
-    if (IS_DIR_SEPARATOR (*name))
-      base = name + 1;
-  return (char *) base;
-}
-
-char *
-fnqualify(const char *path)
-{
-  size_t size;
-  char *p;
-  char tmp[LT_PATHMAX + 1];
-
-  assert(path != NULL);
-
-  /* Is it qualified already? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  if (isalpha (path[0]) && path[1] == ':')
-    return xstrdup (path);
-#endif
-  if (IS_DIR_SEPARATOR (path[0]))
-    return xstrdup (path);
-
-  /* prepend the current directory */
-  /* doesn't handle '~' */
-  if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
-  size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
-  p = XMALLOC(char, size);
-  sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
-  return p;
-}
-
-char *
-strendzap(char *str, const char *pat)
-{
-  size_t len, patlen;
-
-  assert(str != NULL);
-  assert(pat != NULL);
-
-  len = strlen(str);
-  patlen = strlen(pat);
-
-  if (patlen <= len)
-  {
-    str += len - patlen;
-    if (strcmp(str, pat) == 0)
-      *str = '\0';
-  }
-  return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode,
-          const char * message, va_list ap)
-{
-  fprintf (stderr, "%s: %s: ", program_name, mode);
-  vfprintf (stderr, message, ap);
-  fprintf (stderr, ".\n");
-
-  if (exit_status >= 0)
-    exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
-  va_list ap;
-  va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
-  va_end (ap);
-}
-EOF
-	  # we should really use a build-platform specific compiler
-	  # here, but OTOH, the wrappers (shell script and this C one)
-	  # are only useful if you want to execute the "real" binary.
-	  # Since the "real" binary is built for $host, then this
-	  # wrapper might as well be built for $host, too.
-	  $run $LTCC -s -o $cwrapper $cwrappersource
-	  ;;
-	esac
-	$rm $output
-	trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-
-	$echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
-  # install mode needs the following variable:
-  notinst_deplibs='$notinst_deplibs'
-else
-  # When we are sourced in execute mode, \$file and \$echo are already set.
-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    echo=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$echo works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$echo will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
-"
-	$echo >> $output "\
-
-  # Find the directory that this script lives in.
-  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
-  # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
-  while test -n \"\$file\"; do
-    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
-    # If there was a directory component, then change thisdir.
-    if test \"x\$destdir\" != \"x\$file\"; then
-      case \"\$destdir\" in
-      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
-      *) thisdir=\"\$thisdir/\$destdir\" ;;
-      esac
-    fi
-
-    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
-  done
-
-  # Try to get the absolute directory name.
-  absdir=\`cd \"\$thisdir\" && pwd\`
-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
-	if test "$fast_install" = yes; then
-	  $echo >> $output "\
-  program=lt-'$outputname'$exeext
-  progdir=\"\$thisdir/$objdir\"
-
-  if test ! -f \"\$progdir/\$program\" || \\
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
-    file=\"\$\$-\$program\"
-
-    if test ! -d \"\$progdir\"; then
-      $mkdir \"\$progdir\"
-    else
-      $rm \"\$progdir/\$file\"
-    fi"
-
-	  $echo >> $output "\
-
-    # relink executable if necessary
-    if test -n \"\$relink_command\"; then
-      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
-      else
-	$echo \"\$relink_command_output\" >&2
-	$rm \"\$progdir/\$file\"
-	exit $EXIT_FAILURE
-      fi
-    fi
-
-    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-    { $rm \"\$progdir/\$program\";
-      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-    $rm \"\$progdir/\$file\"
-  fi"
-	else
-	  $echo >> $output "\
-  program='$outputname'
-  progdir=\"\$thisdir/$objdir\"
-"
-	fi
-
-	$echo >> $output "\
-
-  if test -f \"\$progdir/\$program\"; then"
-
-	# Export our shlibpath_var if we have one.
-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-	  $echo >> $output "\
-    # Add our own library path to $shlibpath_var
-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
-    # Some systems cannot cope with colon-terminated $shlibpath_var
-    # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
-    export $shlibpath_var
-"
-	fi
-
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $echo >> $output "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
-	$echo >> $output "\
-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-      # Run the actual program with our arguments.
-"
-	case $host in
-	# Backslashes separate directories on plain windows
-	*-*-mingw | *-*-os2*)
-	  $echo >> $output "\
-      exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
-	  ;;
-
-	*)
-	  $echo >> $output "\
-      exec \$progdir/\$program \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$echo >> $output "\
-      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-      exit $EXIT_FAILURE
-    fi
-  else
-    # The program doesn't exist.
-    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
-    \$echo \"This script is just a wrapper for \$program.\" 1>&2
-    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
-    exit $EXIT_FAILURE
-  fi
-fi\
-"
-	chmod +x $output
-      fi
-      exit $EXIT_SUCCESS
-      ;;
-    esac
-
-    # See if we need to build an old-fashioned archive.
-    for oldlib in $oldlibs; do
-
-      if test "$build_libtool_libs" = convenience; then
-	oldobjs="$libobjs_save"
-	addlibs="$convenience"
-	build_libtool_libs=no
-      else
-	if test "$build_libtool_libs" = module; then
-	  oldobjs="$libobjs_save"
-	  build_libtool_libs=no
-	else
-	  oldobjs="$old_deplibs $non_pic_objects"
-	fi
-	addlibs="$old_convenience"
-      fi
-
-      if test -n "$addlibs"; then
-	gentop="$output_objdir/${outputname}x"
-	generated="$generated $gentop"
-
-	func_extract_archives $gentop $addlibs
-	oldobjs="$oldobjs $func_extract_archives_result"
-      fi
-
-      # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-       cmds=$old_archive_from_new_cmds
-      else
-	# POSIX demands no paths to be encoded in archives.  We have
-	# to avoid creating archives with duplicate basenames if we
-	# might have to extract them afterwards, e.g., when creating a
-	# static archive out of a convenience library, or when linking
-	# the entirety of a libtool archive into another (currently
-	# not supported by libtool).
-	if (for obj in $oldobjs
-	    do
-	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
-	    done | sort | sort -uc >/dev/null 2>&1); then
-	  :
-	else
-	  $echo "copying selected object files to avoid basename conflicts..."
-
-	  if test -z "$gentop"; then
-	    gentop="$output_objdir/${outputname}x"
-	    generated="$generated $gentop"
-
-	    $show "${rm}r $gentop"
-	    $run ${rm}r "$gentop"
-	    $show "$mkdir $gentop"
-	    $run $mkdir "$gentop"
-	    status=$?
-	    if test "$status" -ne 0 && test ! -d "$gentop"; then
-	      exit $status
-	    fi
-	  fi
-
-	  save_oldobjs=$oldobjs
-	  oldobjs=
-	  counter=1
-	  for obj in $save_oldobjs
-	  do
-	    objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-	    case " $oldobjs " in
-	    " ") oldobjs=$obj ;;
-	    *[\ /]"$objbase "*)
-	      while :; do
-		# Make sure we don't pick an alternate name that also
-		# overlaps.
-		newobj=lt$counter-$objbase
-		counter=`expr $counter + 1`
-		case " $oldobjs " in
-		*[\ /]"$newobj "*) ;;
-		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
-		esac
-	      done
-	      $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-	      $run ln "$obj" "$gentop/$newobj" ||
-	      $run cp "$obj" "$gentop/$newobj"
-	      oldobjs="$oldobjs $gentop/$newobj"
-	      ;;
-	    *) oldobjs="$oldobjs $obj" ;;
-	    esac
-	  done
-	fi
-
-	eval cmds=\"$old_archive_cmds\"
-
-	if len=`expr "X$cmds" : ".*"` &&
-	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	  cmds=$old_archive_cmds
-	else
-	  # the command line is too long to link in one step, link in parts
-	  $echo "using piecewise archive linking..."
-	  save_RANLIB=$RANLIB
-	  RANLIB=:
-	  objlist=
-	  concat_cmds=
-	  save_oldobjs=$oldobjs
-
-	  # Is there a better way of finding the last object in the list?
-	  for obj in $save_oldobjs
-	  do
-	    last_oldobj=$obj
-	  done
-	  for obj in $save_oldobjs
-	  do
-	    oldobjs="$objlist $obj"
-	    objlist="$objlist $obj"
-	    eval test_cmds=\"$old_archive_cmds\"
-	    if len=`expr "X$test_cmds" : ".*"` &&
-	       test "$len" -le "$max_cmd_len"; then
-	      :
-	    else
-	      # the above command should be used before it gets too long
-	      oldobjs=$objlist
-	      if test "$obj" = "$last_oldobj" ; then
-	        RANLIB=$save_RANLIB
-	      fi
-	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
-	      objlist=
-	    fi
-	  done
-	  RANLIB=$save_RANLIB
-	  oldobjs=$objlist
-	  if test "X$oldobjs" = "X" ; then
-	    eval cmds=\"\$concat_cmds\"
-	  else
-	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-	  fi
-	fi
-      fi
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-        eval cmd=\"$cmd\"
-	IFS="$save_ifs"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$generated"; then
-      $show "${rm}r$generated"
-      $run ${rm}r$generated
-    fi
-
-    # Now create the libtool archive.
-    case $output in
-    *.la)
-      old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
-      $show "creating $output"
-
-      # Preserve any variables that may affect compiler behavior
-      for var in $variables_saved_for_relink; do
-	if eval test -z \"\${$var+set}\"; then
-	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-	elif eval var_value=\$$var; test -z "$var_value"; then
-	  relink_command="$var=; export $var; $relink_command"
-	else
-	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
-	fi
-      done
-      # Quote the link command for shipping.
-      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
-	relink_command=
-      fi
-
-
-      # Only create the output if not a dry run.
-      if test -z "$run"; then
-	for installed in no yes; do
-	  if test "$installed" = yes; then
-	    if test -z "$install_libdir"; then
-	      break
-	    fi
-	    output="$output_objdir/$outputname"i
-	    # Replace all uninstalled libtool libraries with the installed ones
-	    newdependency_libs=
-	    for deplib in $dependency_libs; do
-	      case $deplib in
-	      *.la)
-		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-		if test -z "$libdir"; then
-		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-		  exit $EXIT_FAILURE
-		fi
-		newdependency_libs="$newdependency_libs $libdir/$name"
-		;;
-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
-	      esac
-	    done
-	    dependency_libs="$newdependency_libs"
-	    newdlfiles=
-	    for lib in $dlfiles; do
-	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-	      if test -z "$libdir"; then
-		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-		exit $EXIT_FAILURE
-	      fi
-	      newdlfiles="$newdlfiles $libdir/$name"
-	    done
-	    dlfiles="$newdlfiles"
-	    newdlprefiles=
-	    for lib in $dlprefiles; do
-	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-	      if test -z "$libdir"; then
-		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-		exit $EXIT_FAILURE
-	      fi
-	      newdlprefiles="$newdlprefiles $libdir/$name"
-	    done
-	    dlprefiles="$newdlprefiles"
-	  else
-	    newdlfiles=
-	    for lib in $dlfiles; do
-	      case $lib in
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-		*) abs=`pwd`"/$lib" ;;
-	      esac
-	      newdlfiles="$newdlfiles $abs"
-	    done
-	    dlfiles="$newdlfiles"
-	    newdlprefiles=
-	    for lib in $dlprefiles; do
-	      case $lib in
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-		*) abs=`pwd`"/$lib" ;;
-	      esac
-	      newdlprefiles="$newdlprefiles $abs"
-	    done
-	    dlprefiles="$newdlprefiles"
-	  fi
-	  $rm $output
-	  # place dlname in correct position for cygwin
-	  tdlname=$dlname
-	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
-	  esac
-	  $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
-	  if test "$installed" = no && test "$need_relink" = yes; then
-	    $echo >> $output "\
-relink_command=\"$relink_command\""
-	  fi
-	done
-      fi
-
-      # Do a symbolic link so that the libtool archive can be found in
-      # LD_LIBRARY_PATH before the program is installed.
-      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
-      ;;
-    esac
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool install mode
-  install)
-    modename="$modename: install"
-
-    # There may be an optional sh(1) argument at the beginning of
-    # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-       # Allow the use of GNU shtool's install command.
-       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
-      # Aesthetically quote it.
-      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	arg="\"$arg\""
-	;;
-      esac
-      install_prog="$arg "
-      arg="$1"
-      shift
-    else
-      install_prog=
-      arg="$nonopt"
-    fi
-
-    # The real first argument should be the name of the installation program.
-    # Aesthetically quote it.
-    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-    case $arg in
-    *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-      arg="\"$arg\""
-      ;;
-    esac
-    install_prog="$install_prog$arg"
-
-    # We need to accept at least all the BSD install flags.
-    dest=
-    files=
-    opts=
-    prev=
-    install_type=
-    isdir=no
-    stripme=
-    for arg
-    do
-      if test -n "$dest"; then
-	files="$files $dest"
-	dest="$arg"
-	continue
-      fi
-
-      case $arg in
-      -d) isdir=yes ;;
-      -f) prev="-f" ;;
-      -g) prev="-g" ;;
-      -m) prev="-m" ;;
-      -o) prev="-o" ;;
-      -s)
-	stripme=" -s"
-	continue
-	;;
-      -*) ;;
-
-      *)
-	# If the previous option needed an argument, then skip it.
-	if test -n "$prev"; then
-	  prev=
-	else
-	  dest="$arg"
-	  continue
-	fi
-	;;
-      esac
-
-      # Aesthetically quote the argument.
-      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *$quote_scanset* | *]* | *\|* | *\&* | *\(* | *\)* | "")
-	arg="\"$arg\""
-	;;
-      esac
-      install_prog="$install_prog $arg"
-    done
-
-    if test -z "$install_prog"; then
-      $echo "$modename: you must specify an install program" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prev' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test -z "$files"; then
-      if test -z "$dest"; then
-	$echo "$modename: no file or destination specified" 1>&2
-      else
-	$echo "$modename: you must specify a destination" 1>&2
-      fi
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Strip any trailing slash from the destination.
-    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
-    # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
-      destname=
-    else
-      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$destdir" = "X$dest" && destdir=.
-      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
-      # Not a directory, so check to see that there is only one file specified.
-      set dummy $files
-      if test "$#" -gt 2; then
-	$echo "$modename: \`$dest' is not a directory" 1>&2
-	$echo "$help" 1>&2
-	exit $EXIT_FAILURE
-      fi
-    fi
-    case $destdir in
-    [\\/]* | [A-Za-z]:[\\/]*) ;;
-    *)
-      for file in $files; do
-	case $file in
-	*.lo) ;;
-	*)
-	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
-	  $echo "$help" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-      done
-      ;;
-    esac
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    staticlibs=
-    future_libdirs=
-    current_libdirs=
-    for file in $files; do
-
-      # Do each installation.
-      case $file in
-      *.$libext)
-	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
-	;;
-
-      *.la)
-	# Check to see that this really is a libtool archive.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
-	  $echo "$help" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	library_names=
-	old_library=
-	relink_command=
-	# If there is no directory component, then add one.
-	case $file in
-	*/* | *\\*) . $file ;;
-	*) . ./$file ;;
-	esac
-
-	# Add the libdir to current_libdirs if it is the destination.
-	if test "X$destdir" = "X$libdir"; then
-	  case "$current_libdirs " in
-	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
-	  esac
-	else
-	  # Note the libdir as a future libdir.
-	  case "$future_libdirs " in
-	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
-	  esac
-	fi
-
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
-	test "X$dir" = "X$file/" && dir=
-	dir="$dir$objdir"
-
-	if test -n "$relink_command"; then
-	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-
-	  # Don't allow the user to place us outside of our expected
-	  # location b/c this prevents finding dependent libraries that
-	  # are installed to the same prefix.
-	  # At present, this check doesn't affect windows .dll's that
-	  # are installed into $libdir/../bin (currently, that works fine)
-	  # but it's something to keep an eye on.
-	  if test "$inst_prefix_dir" = "$destdir"; then
-	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-
-	  if test -n "$inst_prefix_dir"; then
-	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
-	  else
-	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
-	  fi
-
-	  $echo "$modename: warning: relinking \`$file'" 1>&2
-	  $show "$relink_command"
-	  if $run eval "$relink_command"; then :
-	  else
-	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-	fi
-
-	# See the names of the shared library.
-	set dummy $library_names
-	if test -n "$2"; then
-	  realname="$2"
-	  shift
-	  shift
-
-	  srcname="$realname"
-	  test -n "$relink_command" && srcname="$realname"T
-
-	  # Install the shared library and build the symlinks.
-	  $show "$install_prog $dir/$srcname $destdir/$realname"
-	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
-	  if test -n "$stripme" && test -n "$striplib"; then
-	    $show "$striplib $destdir/$realname"
-	    $run eval "$striplib $destdir/$realname" || exit $?
-	  fi
-
-	  if test "$#" -gt 0; then
-	    # Delete the old symlinks, and create new ones.
-	    for linkname
-	    do
-	      if test "$linkname" != "$realname"; then
-		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-	      fi
-	    done
-	  fi
-
-	  # Do each command in the postinstall commands.
-	  lib="$destdir/$realname"
-	  cmds=$postinstall_cmds
-	  save_ifs="$IFS"; IFS='~'
-	  for cmd in $cmds; do
-	    IFS="$save_ifs"
-	    eval cmd=\"$cmd\"
-	    $show "$cmd"
-	    $run eval "$cmd" || exit $?
-	  done
-	  IFS="$save_ifs"
-	fi
-
-	# Install the pseudo-library for information purposes.
-	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	instname="$dir/$name"i
-	$show "$install_prog $instname $destdir/$name"
-	$run eval "$install_prog $instname $destdir/$name" || exit $?
-
-	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-	;;
-
-      *.lo)
-	# Install (i.e. copy) a libtool object.
-
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	  destfile="$destdir/$destfile"
-	fi
-
-	# Deduce the name of the destination old-style object file.
-	case $destfile in
-	*.lo)
-	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
-	  ;;
-	*.$objext)
-	  staticdest="$destfile"
-	  destfile=
-	  ;;
-	*)
-	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
-	  $echo "$help" 1>&2
-	  exit $EXIT_FAILURE
-	  ;;
-	esac
-
-	# Install the libtool object if requested.
-	if test -n "$destfile"; then
-	  $show "$install_prog $file $destfile"
-	  $run eval "$install_prog $file $destfile" || exit $?
-	fi
-
-	# Install the old object if enabled.
-	if test "$build_old_libs" = yes; then
-	  # Deduce the name of the old-style object file.
-	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
-	  $show "$install_prog $staticobj $staticdest"
-	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
-	fi
-	exit $EXIT_SUCCESS
-	;;
-
-      *)
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	  destfile="$destdir/$destfile"
-	fi
-
-	# If the file is missing, and there is a .exe on the end, strip it
-	# because it is most likely a libtool script we actually want to
-	# install
-	stripped_ext=""
-	case $file in
-	  *.exe)
-	    if test ! -f "$file"; then
-	      file=`$echo $file|${SED} 's,.exe$,,'`
-	      stripped_ext=".exe"
-	    fi
-	    ;;
-	esac
-
-	# Do a test to see if this is really a libtool program.
-	case $host in
-	*cygwin*|*mingw*)
-	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
-	    ;;
-	*)
-	    wrapper=$file
-	    ;;
-	esac
-	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
-	  notinst_deplibs=
-	  relink_command=
-
-	  # To insure that "foo" is sourced, and not "foo.exe",
-	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
-	  # which disallows the automatic-append-.exe behavior.
-	  case $build in
-	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
-	  *) wrapperdot=${wrapper} ;;
-	  esac
-	  # If there is no directory component, then add one.
-	  case $file in
-	  */* | *\\*) . ${wrapperdot} ;;
-	  *) . ./${wrapperdot} ;;
-	  esac
-
-	  # Check the variables that should have been set.
-	  if test -z "$notinst_deplibs"; then
-	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
-	    exit $EXIT_FAILURE
-	  fi
-
-	  finalize=yes
-	  for lib in $notinst_deplibs; do
-	    # Check to see that each library is installed.
-	    libdir=
-	    if test -f "$lib"; then
-	      # If there is no directory component, then add one.
-	      case $lib in
-	      */* | *\\*) . $lib ;;
-	      *) . ./$lib ;;
-	      esac
-	    fi
-	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
-	    if test -n "$libdir" && test ! -f "$libfile"; then
-	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
-	      finalize=no
-	    fi
-	  done
-
-	  relink_command=
-	  # To insure that "foo" is sourced, and not "foo.exe",
-	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
-	  # which disallows the automatic-append-.exe behavior.
-	  case $build in
-	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
-	  *) wrapperdot=${wrapper} ;;
-	  esac
-	  # If there is no directory component, then add one.
-	  case $file in
-	  */* | *\\*) . ${wrapperdot} ;;
-	  *) . ./${wrapperdot} ;;
-	  esac
-
-	  outputname=
-	  if test "$fast_install" = no && test -n "$relink_command"; then
-	    if test "$finalize" = yes && test -z "$run"; then
-	      tmpdir="/tmp"
-	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
-	      tmpdir="$tmpdir/libtool-$$"
-	      save_umask=`umask`
-	      umask 0077
-	      if $mkdir "$tmpdir"; then
-	        umask $save_umask
-	      else
-	        umask $save_umask
-		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
-		continue
-	      fi
-	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
-	      outputname="$tmpdir/$file"
-	      # Replace the output file specification.
-	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
-	      $show "$relink_command"
-	      if $run eval "$relink_command"; then :
-	      else
-		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-		${rm}r "$tmpdir"
-		continue
-	      fi
-	      file="$outputname"
-	    else
-	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
-	    fi
-	  else
-	    # Install the binary that we compiled earlier.
-	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
-	  fi
-	fi
-
-	# remove .exe since cygwin /usr/bin/install will append another
-	# one anyways
-	case $install_prog,$host in
-	*/usr/bin/install*,*cygwin*)
-	  case $file:$destfile in
-	  *.exe:*.exe)
-	    # this is ok
-	    ;;
-	  *.exe:*)
-	    destfile=$destfile.exe
-	    ;;
-	  *:*.exe)
-	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
-	    ;;
-	  esac
-	  ;;
-	esac
-	$show "$install_prog$stripme $file $destfile"
-	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
-	test -n "$outputname" && ${rm}r "$tmpdir"
-	;;
-      esac
-    done
-
-    for file in $staticlibs; do
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
-      # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
-
-      $show "$install_prog $file $oldlib"
-      $run eval "$install_prog \$file \$oldlib" || exit $?
-
-      if test -n "$stripme" && test -n "$old_striplib"; then
-	$show "$old_striplib $oldlib"
-	$run eval "$old_striplib $oldlib" || exit $?
-      fi
-
-      # Do each command in the postinstall commands.
-      cmds=$old_postinstall_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	eval cmd=\"$cmd\"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$future_libdirs"; then
-      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-    fi
-
-    if test -n "$current_libdirs"; then
-      # Maybe just do a dry run.
-      test -n "$run" && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-    else
-      exit $EXIT_SUCCESS
-    fi
-    ;;
-
-  # libtool finish mode
-  finish)
-    modename="$modename: finish"
-    libdirs="$nonopt"
-    admincmds=
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
-
-      for libdir in $libdirs; do
-	if test -n "$finish_cmds"; then
-	  # Do each command in the finish commands.
-	  cmds=$finish_cmds
-	  save_ifs="$IFS"; IFS='~'
-	  for cmd in $cmds; do
-	    IFS="$save_ifs"
-	    eval cmd=\"$cmd\"
-	    $show "$cmd"
-	    $run eval "$cmd" || admincmds="$admincmds
-       $cmd"
-	  done
-	  IFS="$save_ifs"
-	fi
-	if test -n "$finish_eval"; then
-	  # Do the single finish_eval.
-	  eval cmds=\"$finish_eval\"
-	  $run eval "$cmds" || admincmds="$admincmds
-       $cmds"
-	fi
-      done
-    fi
-
-    # Exit here if they wanted silent mode.
-    test "$show" = : && exit $EXIT_SUCCESS
-
-    $echo "----------------------------------------------------------------------"
-    $echo "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $echo "   $libdir"
-    done
-    $echo
-    $echo "If you ever happen to want to link against installed libraries"
-    $echo "in a given directory, LIBDIR, you must either use libtool, and"
-    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $echo "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $echo "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $echo "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
-
-      $echo "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $echo "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $echo
-    $echo "See any operating system documentation about shared libraries for"
-    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
-    $echo "----------------------------------------------------------------------"
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool execute mode
-  execute)
-    modename="$modename: execute"
-
-    # The first argument is the command name.
-    cmd="$nonopt"
-    if test -z "$cmd"; then
-      $echo "$modename: you must specify a COMMAND" 1>&2
-      $echo "$help"
-      exit $EXIT_FAILURE
-    fi
-
-    # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
-      if test ! -f "$file"; then
-	$echo "$modename: \`$file' is not a file" 1>&2
-	$echo "$help" 1>&2
-	exit $EXIT_FAILURE
-      fi
-
-      dir=
-      case $file in
-      *.la)
-	# Check to see that this really is a libtool archive.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-	  $echo "$help" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-
-	# Read the libtool library.
-	dlname=
-	library_names=
-
-	# If there is no directory component, then add one.
-	case $file in
-	*/* | *\\*) . $file ;;
-	*) . ./$file ;;
-	esac
-
-	# Skip this library if it cannot be dlopened.
-	if test -z "$dlname"; then
-	  # Warn if it was a shared library.
-	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
-	  continue
-	fi
-
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$dir" = "X$file" && dir=.
-
-	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
-	else
-	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-	  exit $EXIT_FAILURE
-	fi
-	;;
-
-      *.lo)
-	# Just add the directory containing the .lo file.
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$dir" = "X$file" && dir=.
-	;;
-
-      *)
-	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
-	continue
-	;;
-      esac
-
-      # Get the absolute pathname.
-      absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
-
-      # Now add the directory to shlibpath_var.
-      if eval "test -z \"\$$shlibpath_var\""; then
-	eval "$shlibpath_var=\"\$dir\""
-      else
-	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-      fi
-    done
-
-    # This variable tells wrapper scripts just to set shlibpath_var
-    # rather than running their programs.
-    libtool_execute_magic="$magic"
-
-    # Check if any of the arguments is a wrapper script.
-    args=
-    for file
-    do
-      case $file in
-      -*) ;;
-      *)
-	# Do a test to see if this is really a libtool program.
-	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  # If there is no directory component, then add one.
-	  case $file in
-	  */* | *\\*) . $file ;;
-	  *) . ./$file ;;
-	  esac
-
-	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
-	fi
-	;;
-      esac
-      # Quote arguments (to preserve shell metacharacters).
-      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-      args="$args \"$file\""
-    done
-
-    if test -z "$run"; then
-      if test -n "$shlibpath_var"; then
-	# Export the shlibpath_var.
-	eval "export $shlibpath_var"
-      fi
-
-      # Restore saved environment variables
-      if test "${save_LC_ALL+set}" = set; then
-	LC_ALL="$save_LC_ALL"; export LC_ALL
-      fi
-      if test "${save_LANG+set}" = set; then
-	LANG="$save_LANG"; export LANG
-      fi
-
-      # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-	$echo "export $shlibpath_var"
-      fi
-      $echo "$cmd$args"
-      exit $EXIT_SUCCESS
-    fi
-    ;;
-
-  # libtool clean and uninstall mode
-  clean | uninstall)
-    modename="$modename: $mode"
-    rm="$nonopt"
-    files=
-    rmforce=
-    exit_status=0
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    for arg
-    do
-      case $arg in
-      -f) rm="$rm $arg"; rmforce=yes ;;
-      -*) rm="$rm $arg" ;;
-      *) files="$files $arg" ;;
-      esac
-    done
-
-    if test -z "$rm"; then
-      $echo "$modename: you must specify an RM program" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    rmdirs=
-
-    origobjdir="$objdir"
-    for file in $files; do
-      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$dir" = "X$file"; then
-	dir=.
-	objdir="$origobjdir"
-      else
-	objdir="$dir/$origobjdir"
-      fi
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-      test "$mode" = uninstall && objdir="$dir"
-
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
-	case " $rmdirs " in
-	  *" $objdir "*) ;;
-	  *) rmdirs="$rmdirs $objdir" ;;
-	esac
-      fi
-
-      # Don't error if the file doesn't exist and rm -f was used.
-      if (test -L "$file") >/dev/null 2>&1 \
-	|| (test -h "$file") >/dev/null 2>&1 \
-	|| test -f "$file"; then
-	:
-      elif test -d "$file"; then
-	exit_status=1
-	continue
-      elif test "$rmforce" = yes; then
-	continue
-      fi
-
-      rmfiles="$file"
-
-      case $name in
-      *.la)
-	# Possibly a libtool archive, so verify it.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  . $dir/$name
-
-	  # Delete the libtool libraries and symlinks.
-	  for n in $library_names; do
-	    rmfiles="$rmfiles $objdir/$n"
-	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-	  test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-
-	  if test "$mode" = uninstall; then
-	    if test -n "$library_names"; then
-	      # Do each command in the postuninstall commands.
-	      cmds=$postuninstall_cmds
-	      save_ifs="$IFS"; IFS='~'
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd"
-		if test "$?" -ne 0 && test "$rmforce" != yes; then
-		  exit_status=1
-		fi
-	      done
-	      IFS="$save_ifs"
-	    fi
-
-	    if test -n "$old_library"; then
-	      # Do each command in the old_postuninstall commands.
-	      cmds=$old_postuninstall_cmds
-	      save_ifs="$IFS"; IFS='~'
-	      for cmd in $cmds; do
-		IFS="$save_ifs"
-		eval cmd=\"$cmd\"
-		$show "$cmd"
-		$run eval "$cmd"
-		if test "$?" -ne 0 && test "$rmforce" != yes; then
-		  exit_status=1
-		fi
-	      done
-	      IFS="$save_ifs"
-	    fi
-	    # FIXME: should reinstall the best remaining shared library.
-	  fi
-	fi
-	;;
-
-      *.lo)
-	# Possibly a libtool object, so verify it.
-	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-
-	  # Read the .lo file
-	  . $dir/$name
-
-	  # Add PIC object to the list of files to remove.
-	  if test -n "$pic_object" \
-	     && test "$pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$pic_object"
-	  fi
-
-	  # Add non-PIC object to the list of files to remove.
-	  if test -n "$non_pic_object" \
-	     && test "$non_pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$non_pic_object"
-	  fi
-	fi
-	;;
-
-      *)
-	if test "$mode" = clean ; then
-	  noexename=$name
-	  case $file in
-	  *.exe)
-	    file=`$echo $file|${SED} 's,.exe$,,'`
-	    noexename=`$echo $name|${SED} 's,.exe$,,'`
-	    # $file with .exe has already been added to rmfiles,
-	    # add $file without .exe
-	    rmfiles="$rmfiles $file"
-	    ;;
-	  esac
-	  # Do a test to see if this is a libtool program.
-	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	    relink_command=
-	    . $dir/$noexename
-
-	    # note $name still contains .exe if it was in $file originally
-	    # as does the version of $file that was added into $rmfiles
-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
-	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      rmfiles="$rmfiles $objdir/lt-$name"
-	    fi
-	    if test "X$noexename" != "X$name" ; then
-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
-	    fi
-	  fi
-	fi
-	;;
-      esac
-      $show "$rm $rmfiles"
-      $run $rm $rmfiles || exit_status=1
-    done
-    objdir="$origobjdir"
-
-    # Try to remove the ${objdir}s in the directories where we deleted files
-    for dir in $rmdirs; do
-      if test -d "$dir"; then
-	$show "rmdir $dir"
-	$run rmdir $dir >/dev/null 2>&1
-      fi
-    done
-
-    exit $exit_status
-    ;;
-
-  "")
-    $echo "$modename: you must specify a MODE" 1>&2
-    $echo "$generic_help" 1>&2
-    exit $EXIT_FAILURE
-    ;;
-  esac
-
-  if test -z "$exec_cmd"; then
-    $echo "$modename: invalid operation mode \`$mode'" 1>&2
-    $echo "$generic_help" 1>&2
-    exit $EXIT_FAILURE
-  fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
-  eval exec $exec_cmd
-  exit $EXIT_FAILURE
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
-    --config          show all configuration variables
-    --debug           enable verbose shell tracing
--n, --dry-run         display commands without modifying any files
-    --features        display basic configuration information and exit
-    --finish          same as \`--mode=finish'
-    --help            display this help message and exit
-    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-    --quiet           same as \`--silent'
-    --silent          don't print informational messages
-    --tag=TAG         use configuration variables from tag TAG
-    --version         print version information
-
-MODE must be one of the following:
-
-      clean           remove files from the build directory
-      compile         compile a source file into a libtool object
-      execute         automatically set library path, then run a program
-      finish          complete the installation of libtool libraries
-      install         install libraries or executables
-      link            create a library or an executable
-      uninstall       remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <bug-libtool at gnu.org>."
-  exit $EXIT_SUCCESS
-  ;;
-
-clean)
-  $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-compile)
-  $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
-  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
-  -static           always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
-  ;;
-
-execute)
-  $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
-  -dlopen FILE      add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
-  ;;
-
-finish)
-  $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
-  ;;
-
-install)
-  $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
-  ;;
-
-link)
-  $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
-  -all-static       do not do any dynamic linking at all
-  -avoid-version    do not add a version suffix if possible
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-  -export-symbols SYMFILE
-		    try to export only the symbols listed in SYMFILE
-  -export-symbols-regex REGEX
-		    try to export only the symbols matching REGEX
-  -LLIBDIR          search LIBDIR for required installed libraries
-  -lNAME            OUTPUT-FILE requires the installed library libNAME
-  -module           build a library that can dlopened
-  -no-fast-install  disable the fast-install mode
-  -no-install       link a not-installable executable
-  -no-undefined     declare that a library does not refer to external symbols
-  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-  -objectlist FILE  Use a list of object files found in FILE to specify objects
-  -precious-files-regex REGEX
-                    don't remove output files matching REGEX
-  -release RELEASE  specify package release information
-  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-  -static           do not do any dynamic linking of libtool libraries
-  -version-info CURRENT[:REVISION[:AGE]]
-		    specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename.  Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
-  ;;
-
-uninstall)
-  $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-*)
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$help" 1>&2
-  exit $EXIT_FAILURE
-  ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit $?
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries.  Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them.  This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration.  But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-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:
diff --git a/ast-5.3-1/lutmap.c b/ast-5.3-1/lutmap.c
deleted file mode 100644
index 328563f..0000000
--- a/ast-5.3-1/lutmap.c
+++ /dev/null
@@ -1,2190 +0,0 @@
-/*
-*class++
-*  Name:
-*     LutMap
-
-*  Purpose:
-*     Transform 1-dimensional coordinates using a lookup table.
-
-*  Constructor Function:
-c     astLutMap
-f     AST_LUTMAP
-
-*  Description:
-*     A LutMap is a specialised form of Mapping which transforms
-*     1-dimensional coordinates by using linear interpolation in a
-*     lookup table.
-*
-*     Each input coordinate value is first scaled to give the index of
-*     an entry in the table by subtracting a starting value (the input
-*     coordinate corresponding to the first table entry) and dividing
-*     by an increment (the difference in input coordinate value
-*     between adjacent table entries).
-*
-*     The resulting index will usually contain a fractional part, so
-*     the output coordinate value is then generated by interpolating
-*     linearly between the appropriate entries in the table. If the
-*     index lies outside the range of the table, linear extrapolation
-*     is used based on the two nearest entries (i.e. the two entries
-*     at the start or end of the table, as appropriate). If either of the
-*     entries used for the interplation has a value of AST__BAD, then the 
-*     interpolated value is returned as AST__BAD.
-*
-*     If the lookup table entries increase or decrease monotonically (and
-*     if the table contains no AST__BAD values), then the inverse 
-*     transformation may also be performed.
-
-*  Inheritance:
-*     The LutMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     LutMap also has the following attributes:
-*
-*     - LutInterp: The interpolation method to use between table entries.
-
-*  Functions:
-c     The LutMap class does not define any new functions beyond those
-f     The LutMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (JAC, UCLan)
-
-*  History:
-*     8-JUL-1997 (RFWS):
-*        Original version.
-*     10-JUL-1997 (RFWS):
-*        Added the MapMerge function.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitLutMapVtab
-*        method.
-*     12-JAN-2004 (DSB):
-*        Check for AST__BAD values in the supplied lut array.
-*     17-MAR-2006 (DSB):
-*        - MapMerge changed so that a LutMap will cancel with its own
-*        inverse.
-*        - Added attribute LutInterp
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*     4-OCT-2006 (DSB):
-*        - Correct "mintick" to "lutinterp" in SetAttrib.
-*        - Do not include bad values in the dumped LUT array.
-*     8-NOV-2007 (DSB):
-*        - Take account of the requested invert flag when comparing two
-*        neighbouring LutMaps for equality in MapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS LutMap
-
-#define LINEAR 0
-#define NEAR 1
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "winmap.h"              /* Linear mappings between windows */
-#include "channel.h"             /* I/O channels */
-#include "unitmap.h"             /* Unit mappings */
-#include "lutmap.h"              /* Interface definition for this class */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(LutMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(LutMap,Class_Init)
-#define class_vtab astGLOBAL(LutMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(LutMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstLutMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstLutMap *astLutMapId_( int, const double [], double, double, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int GetLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static int GetLutInterp( AstLutMap *, int * );
-static int TestLutInterp( AstLutMap *, int * );
-static void ClearLutInterp( AstLutMap *, int * );
-static void SetLutInterp( AstLutMap *, int, int * );
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a LutMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     LutMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     LutMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstLutMap *this;             /* Pointer to the LutMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* LutInterp. */
-/* ---------- */
-   if ( !strcmp( attrib, "lutinterp" ) ) {
-      astClearLutInterp( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two LutMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     LutMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two LutMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a LutMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the LutMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstLutMap *that;        
-   AstLutMap *this;        
-   int i;           
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two LutMap structures. */
-   this = (AstLutMap *) this_object;
-   that = (AstLutMap *) that_object;
-
-/* Check the second object is a LutMap. We know the first is a
-   LutMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsALutMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two LutMaps differ, it may still be possible 
-   for them to be equivalent. First compare the LutMaps if their Invert 
-   flags are the same. In this case all the attributes of the two LutMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
- 
-            if( astEQUAL( this->start, that->start ) &&
-                astEQUAL( this->inc, that->inc ) &&
-                this->nlut == that->nlut &&
-                this->lutinterp == that->lutinterp ){
-
-               result = 1;
-               for( i = 0; i < this->nlut; i++ ) {
-                  if( !astEQUAL( (this->lut)[ i ], (that->lut)[ i ] ) ) {
-                     result = 0;
-                     break;
-                  }
-               }
-            }
-
-/* If the Invert flags for the two LutMaps differ, the attributes of the two 
-   LutMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a LutMap, Invert flags must be equal. */
-            result = 0;
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a LutMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     LutMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a LutMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the LutMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the LutMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstLutMap *this;             /* Pointer to the LutMap structure */
-   const char *result;          /* Pointer value to return */
-   int lutinterp;               /* LutInterp attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* LutInterp. */
-/* ---------- */
-   if ( !strcmp( attrib, "lutinterp" ) ) {
-      lutinterp = astGetLutInterp( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", lutinterp );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GetLinear( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     GetLinear
-
-*  Purpose:
-*     Determine if a LutMap implements a linear coordinate transformation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     int GetLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     LutMap member function.
-
-*  Description:
-*     This function returns a boolean value to indicate if the LutMap
-*     supplied is equivalent to a linear coordinate
-*     transformation. This will be the case if the lookup table
-*     elements increase or decrease linearly.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*    - A value of zero will be returned if this function is invoked
-*    with the global error status set, or if it should fail for any
-*    reason.
-*/
-
-/* Local Variables: */
-   AstLutMap *this;              /* Pointer to the LutMap structure */
-   double *lut;                  /* Pointer to the lookup table */
-   double fract;                 /* Fractional position within table */
-   double hi;                    /* Largest value */
-   double interp;                /* Interpolated value */
-   double lo;                    /* Smallest value */
-   double tol1;                  /* First tolerance estimate */
-   double tol2;                  /* Second tolerance estimate */
-   double tol;                   /* Tolerance value used */
-   int ilut;                     /* Loop counter for table elements */
-   int linear;                   /* Result to be returned */
-   int nlut;                     /* Number of lookup table elements */
-
-/* Initialise. */
-   linear = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return linear;
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) this_mapping;
-
-/* Nearest neighbour LutMaps are not considered to be linear because of
-   the discontinuities at the start and end of the table. */
-   if( astGetLutInterp( this ) != NEAR ) {
-
-/* Obtain the lookup table details. */
-      lut = this->lut;
-      nlut = this->nlut;
-
-/* Loop to identify the largest and smallest values in the lookup
-      table. */
-      lo = DBL_MAX;
-      hi = -DBL_MAX;
-      for ( ilut = 0; ilut < nlut; ilut++ ) {
-         if ( lut[ ilut ] > hi ) hi = lut[ ilut ];
-         if ( lut[ ilut ] < lo ) lo = lut[ ilut ];
-      }
-   
-/* Check if the values are all the same (this makes the LutMap
-      linear, although it will have no inverse). */
-      linear = ( hi == lo );
-      if ( !linear ) {
-   
-/* Form a tolerance estimate based on the overall range of values in
-      the lookup table. */
-         tol1 = fabs( hi - lo ) * DBL_EPSILON;
-   
-/* Now loop to inspect all the lookup table elements except the first
-      and last. */
-         linear = 1;
-         for ( ilut = 1; ilut < ( nlut - 1 ); ilut++ ) {
-   
-/* Calculate the fractional position of the current element within the
-      table. */
-            fract = ( (double) ilut ) / ( (double) ( nlut - 1 ) );
-   
-/* Calculate the value it should have if the table is linear by
-      interpolating between the first and last values. */
-            interp = lut[ 0 ] * ( 1.0 - fract ) + lut[ nlut - 1 ] * fract;
-   
-/* Form a second tolerance estimate from this interpolated
-   value. Select whichever tolerance estimate is larger (this avoids
-   problems when values are near zero). */
-            tol2 = fabs( interp ) * DBL_EPSILON;
-            tol = ( tol1 > tol2 ) ? tol1 : tol2;
-   
-/* Test for linearity within a small multiple of the tolerance. */
-            linear = ( fabs( lut[ ilut ] - interp ) <= ( 2.0 * tol ) );
-            if ( !linear ) break;
-         }
-      }
-   }
-
-/* Return the result. */
-   return linear;
-}
-
-void astInitLutMapVtab_(  AstLutMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitLutMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a LutMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     void astInitLutMapVtab( AstLutMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     LutMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the LutMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsALutMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->ClearLutInterp = ClearLutInterp;
-   vtab->GetLutInterp = GetLutInterp;
-   vtab->SetLutInterp = SetLutInterp;
-   vtab->TestLutInterp = TestLutInterp;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetDump( vtab, Dump, "LutMap",
-               "Map 1-d coordinates using a lookup table" );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a LutMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     LutMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated LutMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated LutMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated LutMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the LutMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        LutMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated LutMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstLutMap *map;               /* Pointer to LutMap */
-   AstLutMap *neb;               /* Pointer to neighbouring LutMap */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   double a1;                    /* First input coordinate value */
-   double a2;                    /* Second input coordinate value */
-   double b1;                    /* First output coordinate value */
-   double b2;                    /* Second output coordinate value */
-   int equal;                    /* Are LutMaps equal? */
-   int i;                        /* Mapping index */
-   int ilo;                      /* Index of lower LutMap */
-   int invneb;                   /* Should the neigbour be used inverted? */
-   int old_inv;                  /* Original Invert value for neigbour */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Mapping simplified? */
-
-/* Initialise the returned result. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the nominated LutMap. */
-   map = (AstLutMap *) ( *map_list )[ where ];
-
-/* See if the LutMap is linear. If so, it can probably be
-   simplified. */
-   simpler = GetLinear( (AstMapping *) map, status );
-   if ( simpler ) {
-
-/* Obtain the range of input values corresponding to the first and
-   last lookup table elements. */
-      a1 = map->start;
-      a2 = map->start + map->inc * ( map->nlut - 1 );
-
-/* Obtain the corresponding range of output values and check these
-   values are not the same. */
-      b1 = map->lut[ 0 ];
-      b2 = map->lut[ map->nlut - 1 ];
-      if ( b1 != b2 ) {
-
-/* Create a new WinMap that implements an equivalent linear Mapping,
-   allowing for the invert flag associated with the LutMap. */
-         if ( !( *invert_list )[ where ] ) {
-            new = (AstMapping *) astWinMap( 1, &a1, &a2, &b1, &b2, "", status );
-         } else {
-            new = (AstMapping *) astWinMap( 1, &b1, &b2, &a1, &a2, "", status );
-         }
-
-/* If OK, annul the original LutMap pointer and substitute the new
-   one. Also clear the associated invert flag. */
-         if ( astOK ) {
-            (void) astAnnul( ( *map_list )[ where ] );
-            ( *map_list )[ where ] = new;
-            ( *invert_list )[ where ] = 0;
-
-/* Assign the result value. */
-            result = where;
-         }
-      }
-
-/* Otherwise, see if the LutMap is in series with its own inverse. If so
-   the pair of LutMaps can be replaced by a UnitMap. */
-   } else if( series ) {
-
-/* Is the higher neighbour a LutMap? If so get a pointer to it, and
-   note the index of the lower of the two adjacent LutMaps. */
-      if( where < ( *nmap - 1 ) && 
-          astIsALutMap( ( *map_list )[ where + 1 ] ) ){
-         neb = (AstLutMap *) ( *map_list )[ where + 1 ];
-         invneb = ( *invert_list )[ where + 1 ];
-         ilo = where;
-
-/* If not, is the lower neighbour a LutMap? If so get a pointer to it,
-   and note the index of the lower of the two adjacent LutMaps. */
-      } else if( where > 0 && 
-                 astIsALutMap( ( *map_list )[ where - 1 ] ) ){
-         neb = (AstLutMap *) ( *map_list )[ where - 1 ];
-         invneb = ( *invert_list )[ where - 1 ];
-         ilo =  where - 1;
-
-      } else {
-         neb = NULL;
-      }
-
-/* If a neighbouring LutMap was found, we can replace the pair by a
-   UnitMap if the two LutMaps are equal but have opposite values for
-   their Invert flags. Temporarily invert the neighbour, then compare 
-   the two LutMaps for equality, then re-invert the neighbour. */
-      if( neb ) {
-         old_inv = astGetInvert( neb );
-         astSetInvert( neb, invneb );
-         astInvert( neb );
-         equal = astEqual( map, neb );
-         astSetInvert( neb, old_inv );
-
-/* If the two LutMaps are equal but opposite, annul the first of the two 
-   Mappings, and replace it with a UnitMap. Also set the invert flag. */ 
-         if( equal ) {
-            new = (AstMapping *) astUnitMap( 1, "", status );
-            (void) astAnnul( ( *map_list )[ ilo ] );
-            ( *map_list )[ ilo ] = new;
-            ( *invert_list )[ ilo ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-            (void) astAnnul( ( *map_list )[ ilo + 1 ] );
-            for ( i = ilo + 2; i < *nmap; i++ ) {
-               ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-               ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-            }
-
-/* Clear the vacated element at the end. */
-            ( *map_list )[ *nmap - 1 ] = NULL;
-            ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap )--;
-            result = where;
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a LutMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     LutMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a LutMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstLutMap *this;              /* Pointer to the LutMap structure */
-   int lutinterp;                /* LutInterp attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* LutInterp. */
-/* ---------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "lutinterp= %d %n", &lutinterp, &nc ) )
-        && ( nc >= len ) ) {
-      astSetLutInterp( this, lutinterp );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a LutMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     LutMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a LutMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstLutMap *this;             /* Pointer to the LutMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* LutInterp. */
-/* ---------- */
-   if ( !strcmp( attrib, "lutinterp" ) ) {
-      result = astTestLutInterp( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a LutMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     LutMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a LutMap and a set of points encapsulated
-*     in a PointSet and transforms the points so as to apply the
-*     lookup table transformation.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation should be applied, while a zero value requests
-*        the inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed
-*        (output) coordinate values. A NULL value may also be given,
-*        in which case a new PointSet will be created by this
-*        function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - The number of coordinate values per point in the input
-*     PointSet must equal 1.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points (with 1 coordinate value per point)
-*     to accommodate the result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstLutMap *map;               /* Pointer to LutMap to be applied */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *lut;                  /* Pointer to LUT */
-   double d1;                    /* Offset to I1 value */
-   double d2;                    /* Offset to I2 value */
-   double fract;                 /* Fractional interpolation distance */
-   double scale;                 /* Normalising scale factor */
-   double value_in;              /* Input coordinate value */
-   double value_out;             /* Output coordinate value */
-   double x;                     /* Value normalised to LUT increment */
-   double xi;                    /* Integer value of "x" */
-   int i1;                       /* Lower adjacent LUT index */
-   int i2;                       /* Upper adjacent LUT index */
-   int i;                        /* New LUT index */
-   int ix;                       /* "x" converted to an int */
-   int near;                     /* Perform nearest neighbour interpolation? */
-   int nlut;                     /* Number of LUT entries */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-   int up;                       /* LUT values are increasing? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the LutMap. */
-   map = (AstLutMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform
-   member function inherited from the parent Mapping class. This
-   function validates all arguments and generates an output PointSet
-   if necessary, but does not actually transform any coordinate
-   values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain
-   pointers for accessing the input and output coordinate values. */
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping,
-   according to the direction specified and whether the mapping has
-   been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Obtain lookup table details. */
-   lut = map->lut;
-   nlut = map->nlut;
-   near = ( astGetLutInterp( map ) == NEAR );
-
-/* Forward transformation. */
-/* ----------------------- */
-   if( astOK ){
-      if ( forward ) {
-
-/* Calculate the scale factor required. */
-         scale = 1.0 / map->inc;
-
-/* Loop to transform each input point. */
-         for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input coordinate value. */
-            value_in = ptr_in[ 0 ][ point ];
-
-/* First check if this is the same value as we transformed last. If
-   so, re-use the last result. */
-            if ( value_in == map->last_fwd_in ) {
-               value_out = map->last_fwd_out;
-
-/* Check for bad input coordinates and generate a bad result if
-   necessary. */
-            } else if ( value_in == AST__BAD ) {
-               value_out = AST__BAD;
-
-/* For nearest-neighbour interpolation, return the value of the lookup table 
-   entry corresponding to the input coordinate. */
-            } else if( near ){
-               x = ( value_in - map->start ) * scale;
-               xi = floor( x + 0.5 );
-               ix = (int) xi;
-               if ( ix < 0 || ix >= nlut ) {
-                  value_out = AST__BAD;
-               } else {
-                  value_out = lut[ ix ];
-               }
-
-/* Otherwise, (for linear interpolation) identify the lookup table entry 
-   corresponding to the input coordinate. */
-            } else {
-               x = ( value_in - map->start ) * scale;
-               xi = floor( x );
-               ix = (int) xi;
-
-/* If the input value lies below the first lookup table entry,
-   extrapolate using the first two table values. */
-               if ( ix < 0 ) {
-                  if( lut[ 0 ] != AST__BAD && lut[ 1 ] != AST__BAD ) {
-                     value_out = lut[ 0 ] + x * ( lut[ 1 ] - lut[ 0 ] );
-                  } else {
-                     value_out = AST__BAD;
-                  }
-
-/* If the input value lies above the last lookup table entry (or equals 
-   it), extrapolate using the last two table values. */
-               } else if ( ix >= ( nlut - 1 ) ) {
-                  if( lut[ nlut - 1 ] != AST__BAD && 
-                      lut[ nlut - 2 ] != AST__BAD ) {
-                     value_out = lut[ nlut - 1 ] +
-                                 ( x - (double) ( nlut - 1 ) ) *
-                                 ( lut[ nlut - 1 ] - lut[ nlut - 2 ] );
-                  } else {
-                     value_out = AST__BAD;
-                  }
-
-/* Otherwise, interpolate between the adjacent entries. */
-               } else {
-                  if( lut[ ix ] != AST__BAD && 
-                      lut[ ix + 1 ] != AST__BAD ) {
-                     fract = x - xi;
-                     value_out = lut[ ix ] * ( 1.0 - fract ) +
-                                 lut[ ix + 1 ] * fract;
-                  } else {
-                     value_out = AST__BAD;
-                  }
-               }
-            }
-
-/* Assign the output coordinate value. */
-            ptr_out[ 0 ][ point ] = value_out;
-
-/* Retain the input and output coordinate values for possible re-use
-   in future. */
-            map->last_fwd_in = value_in;
-            map->last_fwd_out = value_out;
-         }
-
-/* Inverse transformation. */
-/* ----------------------- */
-      } else {
-
-/* Loop to transform each input point. */
-         for ( point = 0; point < npoint; point++ ) {
-
-/* Extract the input coordinate value. */
-            value_in = ptr_in[ 0 ][ point ];
-
-/* First check if this is the same value as we transformed last. If
-   so, re-use the last result. */
-            if ( value_in == map->last_inv_in ) {
-               value_out = map->last_inv_out;
-
-/* Check for bad input coordinates and generate a bad result if
-   necessary. */
-            } else if ( value_in == AST__BAD ) {
-               value_out = AST__BAD;
-
-/* Otherwise, determine if the lookup table's elements are increasing
-   or decreasing. (Note the inverse transformation will not be
-   defined, so will not be attempted, unless all the table entries are
-   monotonically increasing or decreasing.) */
-            } else {
-               up = ( lut[ nlut - 1 ] > lut[ 0 ] );
-
-/* Perform a binary search to identify two adjacent lookup table
-   elements whose values bracket the input coordinate value. */
-               i1 = -1;
-               i2 = nlut;
-               while ( i2 > ( i1 + 1 ) ) {
-                  i = ( i1 + i2 ) / 2;
-                  *( ( ( value_in >= lut[ i ] ) == up ) ? &i1 : &i2 ) = i;
-               }
-
-/* Nearest neighbour interpolation: return the closest of i1 or i2. Return 
-   AST__BAD if the supplied value is less than either or greater than
-   either.  */
-               if( near ) {
-                  d1 = lut[ i1 ] - value_in;
-                  d2 = lut[ i2 ] - value_in;
-                  if( ( d1 > 0.0 && d2 > 0.0 ) ||
-                      ( d1 < 0.0 && d2 < 0.0 ) ) {
-                     value_out = AST__BAD;
-
-                  } else if( fabs( d1 ) < fabs( d2 ) ){
-                     value_out = i1;
-                  } else {
-                     value_out = i2;
-                  }
-
-/* Linear interpolation... */
-               } else {
-
-/* We are interested in the lower bracketing table element. If
-   necessary, restrict this element's index to lie within the
-   table. This causes extrapolation to occur (instead of
-   interpolation) if the input value actually lies outside the range
-   of the lookup table. */
-                  if ( i1 < 0 ) i1 = 0;
-                  if ( i1 > ( nlut - 2 ) ) i1 = nlut - 2;
-
-/* Interpolate (or extrapolate) to derive the output coordinate
-   value. */
-                  value_out = map->start + map->inc *
-                           ( (double) i1 + ( ( value_in - lut[ i1 ] ) /
-                                             ( lut[ i1 + 1 ] - lut[ i1 ] ) ) );
-               }
-            }
-
-/* Assign the output coordinate value. */
-            ptr_out[ 0 ][ point ] = value_out;
-
-/* Retain the input and output coordinate values for possible re-use
-   in future. */
-            map->last_inv_in = value_in;
-            map->last_inv_out = value_out;
-         }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     LutInterp
-
-*  Purpose:
-*     Look-up table interpolation method.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute indicates the method to be used when finding the
-*     output value of a LutMap for an input value part way between two 
-*     table entries. If it is set to 0 (the default) then linear
-*     interpolation is used. Otherwise, nearest neighbour interpolation
-*     is used.
-*
-*     Using nearest neighbour interpolation causes AST__BAD to be returned 
-*     for any point which falls outside the bounds of the table. Linear 
-*     interpolation results in an extrapolated value being returned based 
-*     on the two end entries in the table.
-
-*  Applicability:
-*     LutMap
-*        All LutMaps have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(LutMap,LutInterp,lutinterp,-INT_MAX)
-astMAKE_GET(LutMap,LutInterp,int,LINEAR,( ( this->lutinterp == -INT_MAX ) ?
-                                          LINEAR : this->lutinterp ))
-astMAKE_SET(LutMap,LutInterp,int,lutinterp,(( value == LINEAR ) ? LINEAR : NEAR ))
-astMAKE_TEST(LutMap,LutInterp,( this->lutinterp != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for LutMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for LutMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the LutMap to be copied.
-*     objout
-*        Pointer to the LutMap being constructed.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstLutMap *out;               /* Pointer to output LutMap */
-   AstLutMap *in;                /* Pointer to input LutMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the input and output LutMaps. */
-   in= (AstLutMap *) objin;
-   out = (AstLutMap *) objout;
-
-/* Allocate memory and store a copy of the lookup table data. */
-   out->lut = astStore( NULL, in->lut, 
-                        sizeof( double ) * (size_t) in->nlut );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for LutMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for LutMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the LutMap to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstLutMap *this;              /* Pointer to LutMap */
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) obj;
-
-/* Free the memory holding the lookup table. */
-   if ( this->lut ) this->lut = astFree( this->lut );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for LutMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the LutMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the LutMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstLutMap *this;              /* Pointer to the LutMap structure */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   int ilut;                     /* Loop counter for table elements */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the LutMap structure. */
-   this = (AstLutMap *) this_object;
-
-/* Write out values representing the instance variables for the LutMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written. */
-
-/* Number of lookup table elements. */
-   astWriteInt( channel, "Nlut", 1, 1, this->nlut,
-                "Number of lookup table elements" );
-
-/* Input coordinate at first element centre. */
-   astWriteDouble( channel, "Start", ( this->start != 0.0 ), 1, this->start,
-                   "Input value at first element" );
-
-/* Element spacing. */
-   astWriteDouble( channel, "Incr", ( this->inc != 1.0 ), 1, this->inc,
-                   "Input value increment between elements" );
-
-/* Interpolation method */
-   set = TestLutInterp( this, status );
-   ival = set ? GetLutInterp( this, status ) : astGetLutInterp( this );
-   astWriteInt( channel, "LutInt", set, 1, ival, "Interpolation method" );
-
-/* Lookup table contents. */
-   for ( ilut = 0; ilut < this->nlut; ilut++ ) {
-      if( this->lut[ ilut ] != AST__BAD ) {
-         (void) sprintf( buff, "L%d", ilut + 1 );
-         astWriteDouble( channel, buff, 1, 1, this->lut[ ilut ], 
-                         ilut ? "" : "Lookup table elements..." );
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsALutMap and astCheckLutMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(LutMap,Mapping)
-astMAKE_CHECK(LutMap)
-
-AstLutMap *astLutMap_( int nlut, const double lut[],
-                       double start, double inc,
-                       const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astLutMap
-f     AST_LUTMAP
-
-*  Purpose:
-*     Create a LutMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "lutmap.h"
-c     AstLutMap *astLutMap( int nlut, const double lut[],
-c                           double start, double inc,
-c                           const char *options, ... )
-f     RESULT = AST_LUTMAP( NLUT, LUT, START, INC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     LutMap constructor.
-
-*  Description:
-*     This function creates a new LutMap and optionally initialises
-*     its attributes.
-*
-*     A LutMap is a specialised form of Mapping which transforms
-*     1-dimensional coordinates by using linear interpolation in a
-*     lookup table.  Each input coordinate value is first scaled to
-*     give the index of an entry in the table by subtracting a
-*     starting value (the input coordinate corresponding to the first
-*     table entry) and dividing by an increment (the difference in
-*     input coordinate value between adjacent table entries).
-*
-*     The resulting index will usually contain a fractional part, so
-*     the output coordinate value is then generated by interpolating
-*     linearly between the appropriate entries in the table. If the
-*     index lies outside the range of the table, linear extrapolation
-*     is used based on the two nearest entries (i.e. the two entries
-*     at the start or end of the table, as appropriate).
-*
-*     If the lookup table entries increase or decrease monotonically,
-*     then the inverse transformation may also be performed.
-
-*  Parameters:
-c     nlut
-f     NLUT = INTEGER (Given)
-*        The number of entries in the lookup table. This value must be
-*        at least 2.
-c     lut
-f     LUT( NLUT ) = DOUBLE PRECISION (Given)
-c        An array containing the "nlut"
-f        An array containing the
-*        lookup table entries.
-c     start
-f     START = DOUBLE PRECISION (Given)
-*        The input coordinate value which corresponds to the first lookup 
-*        table entry.
-c     inc
-f     INC = DOUBLE PRECISION (Given)
-*        The lookup table spacing (the increment in input coordinate
-*        value between successive lookup table entries). This value
-*        may be positive or negative, but must not be zero.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new LutMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new LutMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astLutMap()
-f     AST_LUTMAP = INTEGER
-*        A pointer to the new LutMap.
-
-*  Notes:
-*     - If the entries in the lookup table either increase or decrease
-*     monotonically, then the new LutMap's TranInverse attribute will
-*     have a value of one, indicating that the inverse transformation
-*     can be performed. Otherwise, it will have a value of zero, so
-*     that any attempt to use the inverse transformation will result
-*     in an error.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstLutMap *new;               /* Pointer to new LutMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the LutMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitLutMap( NULL, sizeof( AstLutMap ), !class_init, &class_vtab,
-                        "LutMap", nlut, lut, start, inc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   LutMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new LutMap. */
-   return new;
-}
-
-AstLutMap *astLutMapId_( int nlut, const double lut[],
-                         double start, double inc,
-                         const char *options, ... ) {
-/*
-*  Name:
-*     astLutMapId_
-
-*  Purpose:
-*     Create a LutMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     AstLutMap *astLutMapId( int nlut, const double lut[],
-*                             double start, double inc,
-*                             const char *options, ... )
-
-*  Class Membership:
-*     LutMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astLutMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astLutMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astLutMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astLutMap_.
-
-*  Returned Value:
-*     The ID value associated with the new LutMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstLutMap *new;               /* Pointer to new LutMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the LutMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitLutMap( NULL, sizeof( AstLutMap ), !class_init, &class_vtab,
-                        "LutMap", nlut, lut, start, inc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new LutMap's
-   attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new LutMap. */
-   return astMakeId( new );
-}
-
-AstLutMap *astInitLutMap_( void *mem, size_t size, int init,
-                           AstLutMapVtab *vtab, const char *name,
-                           int nlut, const double lut[],
-                           double start, double inc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitLutMap
-
-*  Purpose:
-*     Initialise a LutMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     AstLutMap *astInitLutMap( void *mem, size_t size, int init,
-*                               AstLutMapVtab *vtab, const char *name,
-*                               int nlut, const double lut[],
-*                               double start, double inc )
-
-*  Class Membership:
-*     LutMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new LutMap object. It allocates memory (if
-*     necessary) to accommodate the LutMap plus any additional data
-*     associated with the derived class.  It then initialises a LutMap
-*     structure at the start of this memory. If the "init" flag is
-*     set, it also initialises the contents of a virtual function
-*     table for a LutMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the LutMap is to be
-*        initialised.  This must be of sufficient size to accommodate
-*        the LutMap data (sizeof(LutMap)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the LutMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the LutMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the LutMap's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new LutMap.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     nlut
-*        The number of elements in the lookup table. This value must
-*        be at least 2.
-*     lut
-*        An array containing the "nlut" lookup table elements.
-*     start
-*        The input coordinate value which corresponds with the first
-*        lookup table element.
-*     inc
-*        The lookup table element spacing (i.e. the increment in input
-*        coordinate value between successive lookup table elements).
-
-*  Returned Value:
-*     A pointer to the new LutMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstLutMap *new;               /* Pointer to new LutMap */
-   double *p;                    /* Pointer to next lut element */
-   int down;                     /* Values are decreasing? */
-   int ilut;                     /* Loop counter for LUT elements */
-   int monotonic;                /* LUT elements distinct and monotonic? */
-   int up;                       /* Values are increasing? */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitLutMapVtab( vtab, name );
-
-/* Check that the number of lookup table elements is valid. */
-   if ( nlut < 2 ) {
-      astError( AST__LUTIN, "astInitLutMap(%s): Invalid number of lookup "
-                "table elements (%d).", status, name, nlut );
-      astError( AST__LUTIN, "This value should be at least 2." , status);
-
-/* Also check that the input value increment is not zero. */
-   } else if ( inc == 0.0 ) {
-      astError( AST__LUTII, "astInitLutMap(%s): An input value increment of "
-                "zero between lookup table elements is not allowed.", status, name );
-
-/* Determine if the element values are all good, distinct and increase 
-   or decrease monotonically. We can only implement the inverse
-   transformation if this is so. Use the astISBAD macro to include NaNs
-   in the checking as well as AST__BAD values. */
-   } else {
-      if( astISBAD(lut[ 0 ]) ) {
-         monotonic = 0;
-
-      } else {
-         up = ( lut[ nlut - 1 ] > lut[ 0 ] );
-         down = ( lut[ nlut - 1 ] < lut[ 0 ] );
-         monotonic = up || down;
-         if ( monotonic ) {
-            for ( ilut = 0; ilut < ( nlut - 1 ); ilut++ ) {
-               if( astISBAD(lut[ ilut  + 1 ]) ) {
-                  monotonic = 0;
-               } else {
-                  monotonic = up ? ( lut[ ilut + 1 ] > lut[ ilut ] ) :
-                                   ( lut[ ilut + 1 ] < lut[ ilut ] );
-               }
-               if ( !monotonic ) break;
-            }
-         }
-      }
-
-/* Initialise a Mapping structure (the parent class) as the first
-   component within the LutMap structure, allocating memory if
-   necessary. Specify that the Mapping should be defined in the
-   forward direction, and conditionally in the inverse direction. */
-      new = (AstLutMap *) astInitMapping( mem, size, 0,
-                                         (AstMappingVtab *) vtab, name,
-                                          1, 1, 1, monotonic );
-
-      if ( astOK ) {
-
-/* Initialise the LutMap data. */
-/* ---------------------------- */
-         new->nlut = nlut;
-         new->start = start;
-         new->inc = inc;
-         new->lutinterp = LINEAR;
-
-/* Allocate memory and store the lookup table. */
-         new->lut = astStore( NULL, lut, sizeof( double ) * (size_t) nlut );
-
-/* Replace an NaN values by AST__BAD */
-         p = new->lut;
-         for ( ilut = 0; ilut < nlut; ilut++, p++ ) {
-            if( astISNAN(*p) ) *p = AST__BAD;
-         }
-
-/* Initialise the retained input and output coordinate values. */
-         new->last_fwd_in = AST__BAD;
-         new->last_fwd_out = AST__BAD;
-         new->last_inv_in = AST__BAD;
-         new->last_inv_out = AST__BAD;
-      }
-         
-/* If an error occurred, clean up by deleting the new LutMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new LutMap. */
-   return new;
-}
-
-AstLutMap *astLoadLutMap_( void *mem, size_t size,
-                           AstLutMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadLutMap
-
-*  Purpose:
-*     Load a LutMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "lutmap.h"
-*     AstLutMap *astLoadLutMap( void *mem, size_t size,
-*                               AstLutMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     LutMap loader.
-
-*  Description:
-*     This function is provided to load a new LutMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     LutMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a LutMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the LutMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        LutMap data (sizeof(LutMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the LutMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the LutMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstLutMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new LutMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the LutMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "LutMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new LutMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstLutMap *new;               /* Pointer to the new LutMap */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   int ilut;                     /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Loop counter for table elements */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this LutMap. In this case the
-   LutMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstLutMap );
-      vtab = &class_vtab;
-      name = "LutMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitLutMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built LutMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "LutMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* Number of lookup table elements. */
-      new->nlut = astReadInt( channel, "nlut", 2 );
-
-/* Starting input coordinate value. */
-      new->start = astReadDouble( channel, "start", 0.0 );
-
-/* Input coordinate value increment. */
-      new->inc = astReadDouble( channel, "incr", 1.0 );
-
-/* Interpolation method */
-      new->lutinterp = astReadInt( channel, "lutint", LINEAR );
-      if ( TestLutInterp( new, status ) ) SetLutInterp( new, new->lutinterp, status );
-
-/* Allocate memory to hold the lookup table elements. */
-      new->lut = astMalloc( sizeof( double ) * (size_t) new->nlut );
-
-/* If OK, loop to read each element. */
-      if ( astOK ) {
-         for ( ilut = 0; ilut < new->nlut; ilut++ ) {
-            (void) sprintf( buff, "l%d", ilut + 1 );
-            new->lut[ ilut ] = astReadDouble( channel, buff, AST__BAD );
-         }
-
-/* Initialise the retained input and output coordinate values. */
-         new->last_fwd_in = AST__BAD;
-         new->last_fwd_out = AST__BAD;
-         new->last_inv_in = AST__BAD;
-         new->last_inv_out = AST__BAD;
-      }
-   }
-
-/* If an error occurred, clean up by deleting the new LutMap. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new LutMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
-   defined by this class. Each simply checks the global error status
-   and then locates and executes the appropriate member function,
-   using the function pointer stored in the object's virtual function
-   table (this pointer is located using the astMEMBER macro defined in
-   "object.h").
-
-   Note that the member function may not be the one defined here, as
-   it may have been over-ridden by a derived class. However, it should
-   still have the same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/lutmap.h b/ast-5.3-1/lutmap.h
deleted file mode 100644
index 7473709..0000000
--- a/ast-5.3-1/lutmap.h
+++ /dev/null
@@ -1,306 +0,0 @@
-#if !defined( LUTMAP_INCLUDED )  /* Include this file only once */
-#define LUTMAP_INCLUDED
-/*
-*+
-*  Name:
-*     lutmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the LutMap class.
-
-*  Invocation:
-*     #include "lutmap.h"
-
-*  Description:
-*     This include file defines the interface to the LutMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The LutMap class implements Mappings which transform
-*     1-dimensional coordinates using linear interpolation in a lookup
-*     table.
-
-*  Inheritance:
-*     The LutMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Simplify a sequence of Mappings.
-*        astTransform
-*           Apply a LutMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsALutMap
-*           Test class membership.
-*        astLutMap
-*           Create a LutMap.
-*
-*     Protected:
-*        astCheckLutMap
-*           Validate class membership.
-*        astInitLutMap
-*           Initialise a LutMap.
-*        astInitLutMapVtab
-*           Initialise the virtual function table for the LutMap class.
-*        astLoadLutMap
-*           Load a LutMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstLutMap
-*           LutMap object type.
-*
-*     Protected:
-*        AstLutMapVtab
-*           LutMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     8-JUL-1997 (RFWS):
-*        Original version.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitLutMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* LutMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstLutMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *lut;                 /* Pointer to lookup table */
-   double start;                /* Input value for first table entry */
-   double inc;                  /* Input increment between table entries */
-   double last_fwd_in;          /* Last input value (forward transfm.) */
-   double last_fwd_out;         /* Last output value (forward transfm.) */
-   double last_inv_in;          /* Last input value (inverse transfm.) */
-   double last_inv_out;         /* Last output value (inverse transfm.) */
-   int nlut;                    /* Number of table entries */
-   int lutinterp;               /* Interpolation method */
-} AstLutMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstLutMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (*GetLutInterp)( AstLutMap *, int * );
-   int (* TestLutInterp)( AstLutMap *, int * );
-   void (* ClearLutInterp)( AstLutMap *, int * );
-   void (* SetLutInterp)( AstLutMap *, int, int * );
-
-} AstLutMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstLutMapGlobals {
-   AstLutMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstLutMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(LutMap)          /* Check class membership */
-astPROTO_ISA(LutMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstLutMap *astLutMap_( int, const double [], double, double, const char *, int *, ...);
-#else
-AstLutMap *astLutMapId_( int, const double [], double, double, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstLutMap *astInitLutMap_( void *, size_t, int, AstLutMapVtab *, const char *, int, const double *, double, double, int * );
-
-/* Vtab initialiser. */
-void astInitLutMapVtab_( AstLutMapVtab *, const char *, int * );
-
-/* Loader. */
-AstLutMap *astLoadLutMap_( void *, size_t, AstLutMapVtab *, const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitLutMapGlobals_( AstLutMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-   int astGetLutInterp_( AstLutMap *, int * );
-   int astTestLutInterp_( AstLutMap *, int * );
-   void astClearLutInterp_( AstLutMap *, int * );
-   void astSetLutInterp_( AstLutMap *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckLutMap(this) astINVOKE_CHECK(LutMap,this,0)
-#define astVerifyLutMap(this) astINVOKE_CHECK(LutMap,this,1)
-
-/* Test class membership. */
-#define astIsALutMap(this) astINVOKE_ISA(LutMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astLutMap astINVOKE(F,astLutMap_)
-#else
-#define astLutMap astINVOKE(F,astLutMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define \
-astInitLutMap(mem,size,init,vtab,name,nlut,lut,start,inc) \
-astINVOKE(O,astInitLutMap_(mem,size,init,vtab,name,nlut,lut,start,inc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitLutMapVtab(vtab,name) astINVOKE(V,astInitLutMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadLutMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadLutMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckLutMap to validate LutMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#if defined(astCLASS)            /* Protected */
-#define astClearLutInterp(this) \
-        astINVOKE(V,astClearLutInterp_(astCheckLutMap(this),STATUS_PTR))
-#define astGetLutInterp(this) \
-        astINVOKE(V,astGetLutInterp_(astCheckLutMap(this),STATUS_PTR))
-#define astSetLutInterp(this,value) \
-        astINVOKE(V,astSetLutInterp_(astCheckLutMap(this),value,STATUS_PTR))
-#define astTestLutInterp(this) \
-        astINVOKE(V,astTestLutInterp_(astCheckLutMap(this),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/makeh b/ast-5.3-1/makeh
deleted file mode 100644
index 50b3995..0000000
--- a/ast-5.3-1/makeh
+++ /dev/null
@@ -1,285 +0,0 @@
-#!/usr/bin/perl
-#+
-#  Name:
-#     makeh
-
-#  Purpose:
-#     Generate the contents of the "ast.h" header file.
-
-#  Type:
-#     Perl script.
-
-#  Invocation:
-#     makeh file_list
-
-#  Description:
-#     This script processes private header files used within the AST library
-#     in order to extract the public information they contain. This information
-#     is produced in a form suitable for use in the public "ast.h" header file,
-#     which defines the public interface to the library.
-
-#  Parameters:
-#     file_list
-#        A space-separated list of the private AST header files whose public
-#        information is to be extracted.
-
-#  Result:
-#     The contents of the "ast.h" header file are written to standard output.
-
-#  Notes:
-#     - This script is specific to the AST library and contains some knowledge
-#     of the input file contents.
-
-#  History:
-#     10-JAN-2005 (DSB):
-#        Added second argument (mode) to the mkdir invocation which creates 
-#        the temporary directory.
-#     2-MAR-2006 (DSB):
-#        Check for "config.h" as well as <config.h>
-#-
-
-( $#ARGV >= 0 ) || Usage();
-
-#  Test whether we need to include config.h in the result.
-$need_config_h = 0;
-
-# Location of source files (makefile variable $(srcdir)).
-# This is most typically '.', but can be different.
-$srcdir = '.';
-
-while ( $ARGV[0] =~ /^-/ ) {
-   if ( $ARGV[0] eq '-s' ) {
-      shift @ARGV;
-      ( $#ARGV >= 0 ) || Usage();
-      $srcdir = $ARGV[0];
-      shift @ARGV;
-   } else {
-      Usage();
-   }
-}
-
-#  Create a scratch directory.
-$tmpdir='/tmp/makeh.tmp';
-unless ( -d $tmpdir && -w $tmpdir ) {
-    if ( -e $tmpdir ) {
-        die "Temp $tmpdir exists, but is unwritable or is not a directory\n";
-    }
-    mkdir $tmpdir, 0777 ||
-        die "Failed to create temporary directory $tmpdir\n";
-}
-
-#  Open each input file.
-foreach $file ( @ARGV ) {
-   protect_copy_file( $file );
-}
-
-
-#  Open a pipe to a scipt (in the current directory) which runs the C
-# preprocessor and direct its output to a scratch file.
-open( CC, '| ./ast_cpp >/tmp/ast.h' ) ||
-                                die "Can't open pipe to C preprocessor (cpp)";
-
-if ( $need_config_h ) {
-# Include this directory's config.h, unescaped, in the output.  We
-# need to pay attention to the values in this file, but don't want
-# them unexpanded in the final ast.h.
-    chomp($cwd = `pwd`);
-    print(CC "#include \"$cwd/config.h\"\n");
-}
-
-#  Before including each file, write an underlined heading in the form of
-#  C comments (with comment characters suitably protected so that they will
-#  be passed unchanged by cpp).
-foreach $file ( @ARGV ) {
-   $comment = $file;
-   $comment =~ s|^.*/||;
-   $comment =~ s|.h$||;
-   print( CC "/_* " . $comment . ". *_/\n" );
-   $comment =~ s/./=/g;
-   print( CC "/_* " . $comment . "= *_/\n" );
-
-#  Write #include "xxx.h" lines to cpp so that it includes (and
-#  preprocesses) each of the temporary files created above in turn.
-   $tmp_file = $file;
-   $tmp_file =~ s|^.*/||;
-   printf(CC "#include \"%s/%s\"\n", $tmpdir, $tmp_file);
-};
-
-#  Close the pipe to cpp.
-close( CC ) || die "C preprocessor (cpp) error";
-
-#  Remove the temporary directory and the files it contains.
-print( stderr `rm -r $tmpdir` );
-
-#  Write the output preamble.
-print(
-'#if !defined(AST_INCLUDED)
-#define AST_INCLUDED
-/*
-*+
-*  Name:
-*     ast.h
-
-*  Purpose:
-*     Define the public C interface to the AST library.
-
-*  Language:
-*     ANSI C
-
-*  Type of Module:
-*     C header file.
-
-*  Description:
-*     This file defines the public C interface to the AST library. It contains
-*     all the type definitions, function prototypes, macro definitions, etc.
-*     needed to use the library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (STARLINK)
-*     RFWS: R.F. Warren-Smith (STARLINK)
-*     {enter_new_authors_here}
-
-*  History:
-*     ' );
-
-#  Add the current date at this point.
-( $sec, $min, $hour, $mday, $mon, $year ) = localtime;
-print( $mday, '-',
-       ( 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',
-         'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC' )[ $mon ], '-',
-       ( $year > 95 ? 1900 : 2000 ) + $year );
-
-print( ' (makeh):
-*        Original version, generated automatically from the internal header
-*        files by the "makeh" script.
-*     {enter_changes_here}
-*-
-*/
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-' );
-
-#  Open the scratch file created above and read it.
-$space = 0;
-open( TEMP, '</tmp/ast.h' );
-while( <TEMP> ) {
-
-#  Remove the underscores from the protected lines and macros.
-   s/^_#include(\s)/#include$1/;
-   s/^_#define(\s)/#define$1/;
-   s/___LINE__/__LINE__/g;
-   s/___FILE__/__FILE__/g;
-
-#  Also un-protect protected comments.
-   s|/_\*|/*|g;
-   s|\*_/|*/|g;
-
-#  Convert multiple blank lines (cpp creates lots of these) into single blank
-#  lines.
-   if ( /^\s*$/ ) {
-      $space = 1;
-   } else {
-
-#  Remove additional unwanted lines that cpp creates.
-      if ( ! /^# \d+/ ) {
-         if ( $space ) { print( "\n" ) };
-         $space = 0;
-
-#  Output the lines we want to keep.
-         print;
-      }
-   }
-}
-
-#  Write closing output lines.
-print(
-'
-#endif
-' );
-
-#  Close and remove the scratch file.
-close( TEMP );
-unlink '/tmp/ast.h';
-
-
-sub protect_copy_file {
-   my $file = shift;
-
-   open( INCLUDE, "$srcdir/$file" )
-       || die "Can't open input file " . $srcdir/$file;
-
-#  Open an output file with the same name in the temporary directory.
-   $tmp_file = $file;
-   $tmp_file =~ s|^.*/||;
-   open( TEMP, ">$tmpdir/$tmp_file" );
-
-#  Read the input file and detect "#include <...>" lines, extracting the name
-#  of the header file being included.
-line: while ( <INCLUDE> ) {
-#  Omit any config.h includes, and note that we saw this
-      if (/^\s*\#\s*include\s+<config.h>/ ||
-          /^\s*\#\s*include\s+"config.h"/) {
-          $need_config_h = 1;
-          next line;
-      }
-
-      if ( ( $header ) = /^\#include\s+<(.+)>/ ) {
-
-#  If this system header file has already been included, ignore it and go on to
-#  the next input line.
-         next line if $done{ $header }++;
-
-#  Otherwise, protect the #include with an underscore to prevent the file
-#  actually being included.
-         s/^/_/;
-      }
-
-#  Also protect "#define ..." lines, to prevent macro substitution being
-#  performed by the C preprocessor. Do not do this to lines of the form
-#  "#define XXX_INCLUDED" because these are still needed to determine which
-#  AST header files get included.
-      if ( /^\#define\s/ ) {
-         if ( ! /^\#define\s+\w*_INCLUDED/ ) { s/^/_/ };
-      }
-
-#  Similarly add underscores to protect standard C macros.
-      s/__LINE__/___LINE__/g;
-      s/__FILE__/___FILE__/g;
-
-#  Write the modified include file.
-      print( TEMP );
-   }
-
-#  Close each file when done.
-   close( INCLUDE );
-   close( TEMP );
-}
-
-sub Usage {
-   print STDERR "$0 [-s srcdir] file...\n";
-   exit (1);
-}
diff --git a/ast-5.3-1/mapping.c b/ast-5.3-1/mapping.c
deleted file mode 100644
index 3836f37..0000000
--- a/ast-5.3-1/mapping.c
+++ /dev/null
@@ -1,23574 +0,0 @@
-/*
-*class++
-*  Name:
-*     Mapping
-
-*  Purpose:
-*     Inter-relate two coordinate systems.
-
-*  Constructor Function:
-*     None.
-
-*  Description:
-*     This class provides the basic facilities for transforming a set
-*     of coordinates (representing "input" points) to give a new set
-*     of coordinates (representing "output" points).  It is used to
-*     describe the relationship which exists between two different
-*     coordinate systems and to implement operations which make use of
-*     this (such as transforming coordinates and resampling grids of
-*     data).  However, the Mapping class does not have a constructor
-*     function of its own, as it is simply a container class for a
-*     family of specialised Mappings which implement particular types
-*     of coordinate transformation.
-
-*  Inheritance:
-*     The Mapping class inherits from the Object class.
-
-*  Attributes:
-*     In addition to those attributes common to all Objects, every
-*     Mapping also has the following attributes:
-*
-*     - Invert: Mapping inversion flag
-*     - IsLinear: Is the Mapping linear?
-*     - IsSimple: Has the Mapping been simplified?
-*     - Nin: Number of input coordinates for a Mapping
-*     - Nout: Number of output coordinates for a Mapping
-*     - Report: Report transformed coordinates?
-*     - TranForward: Forward transformation defined?
-*     - TranInverse: Inverse transformation defined?
-
-*  Functions:
-c     In addition to those functions applicable to all Objects, the
-c     following functions may also be applied to all Mappings:
-f     In addition to those routines applicable to all Objects, the
-f     following routines may also be applied to all Mappings:
-*
-c     - astDecompose: Decompose a Mapping into two component Mappings
-c     - astTranGrid: Transform a grid of positions
-c     - astInvert: Invert a Mapping
-c     - astLinearApprox: Calculate a linear approximation to a Mapping
-c     - astMapBox: Find a bounding box for a Mapping
-c     - astMapSplit: Split a Mapping up into parallel component Mappings
-c     - astRate: Calculate the rate of change of a Mapping output
-c     - astRebin<X>: Rebin a region of a data grid
-f     - astRebinSeq<X>: Rebin a region of a sequence of data grids
-c     - astResample<X>: Resample a region of a data grid
-c     - astRemoveRegions: Remove any Regions from a Mapping
-c     - astSimplify: Simplify a Mapping
-c     - astTran1: Transform 1-dimensional coordinates
-c     - astTran2: Transform 2-dimensional coordinates
-c     - astTranN: Transform N-dimensional coordinates
-c     - astTranP: Transform N-dimensional coordinates held in separate arrays
-f     - AST_DECOMPOSE: Decompose a Mapping into two component Mappings
-f     - AST_TRANGRID: Transform a grid of positions
-f     - AST_INVERT: Invert a Mapping
-f     - AST_LINEARAPPROX: Calculate a linear approximation to a Mapping
-f     - AST_MAPBOX: Find a bounding box for a Mapping
-f     - AST_MAPSPLIT: Split a Mapping up into parallel component Mappings
-f     - AST_RATE: Calculate the rate of change of a Mapping output
-f     - AST_REBIN<X>: Rebin a region of a data grid
-f     - AST_REBINSEQ<X>: Rebin a region of a sequence of data grids
-f     - AST_REMOVEREGIONS: Remove any Regions from a Mapping
-f     - AST_RESAMPLE<X>: Resample a region of a data grid
-f     - AST_SIMPLIFY: Simplify a Mapping
-f     - AST_TRAN1: Transform 1-dimensional coordinates
-f     - AST_TRAN2: Transform 2-dimensional coordinates
-f     - AST_TRANN: Transform N-dimensional coordinates
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     MBT: Mark Taylor (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     1-FEB-1996 (RFWS):
-*        Original version.
-*     29-FEB-1996 (RFWS):
-*        Minor improvements to error messages.
-*     15-JUL-1996 (RFWS):
-*        Support external interface.
-*     13-DEC-1996 (RFWS):
-*        Added the astMapMerge method.
-*     13-DEC-1996 (RFWS):
-*        Added the astSimplify method.
-*     27-MAY-1997 (RFWS):
-*        Improved the astSimplify method to use astMapMerge to
-*        simplify a single Mapping where possible.
-*     29-MAY-1998 (RFWS):
-*        Added the MapBox method.
-*     13-NOV-1998 (RFWS):
-*        Made default MapBox convergence accuracy larger (i.e. less
-*        accurate).
-*     10-DEC-1998 (RFWS):
-*        First useful implementation of astResample<X>.
-*     16-AUG-1999 (RFWS):
-*        Fixed bug in SpecialBounds - wrong number of coordinates being used
-*        when checking for bad output coordinate values.
-*     17-AUG-1999 (RFWS):
-*        Improved the convergence security of MapBox (return to older but
-*        less efficient setting).
-*     24-NOV-2000 (MBT):
-*        Fixed bug (function being invoked as wrong type) in AST__UINTERP
-*        scheme, and added new AST__BLOCKAVE scheme, in astResample<X>.
-*     9-JAN-2001 (DSB):
-*        Changed in and out arguments for TranN from type "double (*)[]"
-*        to "double *".
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitMappingVtab
-*        method.
-*     10-JUL-2003 (DSB):
-*        Added method astRate.
-*     2-SEP-2004 (DSB):
-*        Free resources before leaving astRate.
-*     31-AUG-2004 (DSB):
-*        Make the LinearApprox function protected rather than private,
-*        rename it to astLinearApprox, and make the bounds parameters of
-*        type double rather than int. Also, correct the size of the fit
-*        coefficient array (was "(nin+1)*nout", now is "(nout+1)*nin").
-*        Also correct the index of the first gradient coefficient from
-*        "fit+nout" to "fit+nin". These errors have probably never been
-*        noticed because they make no difference if nin=nout, which is
-*        usually the case.
-*     6-SEP-2004 (DSB):
-*        Make astRate more robust by adding checks for unusal conditions.
-*     20-SEP-2004 (DSB):
-*        Make the LinearApprox function public and change its interface
-*        to be more appropriate for public use. This involved swapping the
-*        direction of the fit (the original astLinearApprox fitted the
-*        inverse transformation, but the public version now fits the forwrd
-*        transformation).
-*     4-OCT-2004 (DSB):
-*        Modify astMapList to return flag indicating presence of inverted
-*        CmpMaps in supplied Mapping.
-*     9-NOV-2004 (DSB):
-*        Override astEqual method.
-*     6-DEC-2004 (DSB):
-*        Remove the second derivative estimate from the astRate function
-*        since CmpMap has trouble calculating it.
-*     17-DEC-2004 (DSB):
-*        Added astMapSplit
-*     22-APR-2005 (DSB):
-*        Modified SpecialBounds to handle cases where some irrelevant
-*        output always produces bad values (e.g. a PermMap may do this).
-*     30-JUN-2005 (DSB):
-*        Added astRebin.
-*     7-JUL-2005 (DSB):
-*        Make MapSplit public rather than protected.
-*     11-AUG-2005 (DSB):
-*        Added the AST__CONSERVEFLUX flag (used by astResampleX).
-*     17-AUG-2005 (DSB):
-*        Added the AST__SOMBCOS kernel.
-*     31-AUG-2005 (DSB):
-*        Added astRebinSeq.
-*     9-SEP-2005 (DSB):
-*        Corrected axis indices returned by public interface for astMapSplit.
-*     31-JAN-2006 (DSB):
-*        Added IsSimple attribute.
-*     2-FEB-2006 (DSB):
-*        Corrections to prologue of astLinearApprox.
-*     16-FEB-2006 (DSB):
-*        Some speed optimisations to rebinning code.
-*     2-MAR-2006 (DSB):
-*        Use HAVE_LONG_DOUBLE in place of AST_LONG_DOUBLE
-*     7-MAR-2006 (DSB):
-*        Added astTranGrid.
-*     14-MAR-2006 (DSB):
-*        - The constructor no longer reports an error if the resulting
-*	 Mapping cannot transform points in either direction. This is
-*	 because it may be possible to simplify such a Mapping and the
-*	 simplified Mapping may have defined transformations. E.g. if a
-*	 Mapping which has only a forward transformation is combined in
-*	 series with its own inverse, the combination CmpMap will simplify 
-*        to a UnitMap (usually).
-*        - Reset the "issimple" flag when the Invert flag is changed.
-*     9-MAY-2006 (DSB):
-*        Correct upper bounds for idim in RebinWithblocking. Also, remove
-*        the single precision "F" instantiation of the MAKE_REBINSEQ macro.
-*        Also correct the "nout = astGetNin" line in the MAKE_REBINSEQ
-*        macro to "nout = astGetNout".
-*     12-MAY-2006 (DSB):
-*        Modify SpecialBounds to include points slightly inside the
-*        corners. This is because some Mappings may have singularies at
-*        the the edges.
-*     17-MAY-2006 (DSB):
-*        Correct the "nout = astGetNin" line in the MAKE_RESAMPLE
-*        and MAKE_REBIN macros to "nout = astGetNout".
-*     7-JUL-2006 (DSB):
-*        Change -CHAR_MAX value (used as a "not set" value for boolean
-*        attributes) to +CHAR_MAX, since some compilers do not allow
-*        chars to have negative values.
-*     23-AUG-2006 (DSB):
-*        Change the Equal function so that it reports an error when
-*        called, rather than using astSimplify to determine if two Mappings 
-*        are equal. All concrete Mapping classes should now provide
-*        their own implementation of astEqual, avoiding the use of
-*        astSimplify. This is so that astSimplify can use astEqual safely
-*        (i.e. without danger of entering an infinite loop).
-*     24-NOV-2006 (DSB):
-*        Allow astRebinSeq to be called with a NULL pointer for the input
-*        data array.
-*     14-MAR-2007 (DSB):
-*        Modify astRebinSeq to allow input variances to be used as weights.
-*     19-MAR-2007 (DSB):
-*        Fix bug in LINEAR_2D macro that caused bad input pixel values to be
-*        treated as good.
-*     16-APR-2007 (DSB):
-*        Account for reduction in number of degrees of freedom when
-*        calculating output variances on the basis of spread of input values in
-*        astReinSeq.
-*     28-APR-2007 (DSB):
-*        Correct code within Rebin... and Resample... functions that provides 
-*        optimal handling for 1- and 2- dimensional mappings. Previously, the 
-*        check for whether or not to use these optimisations was based only on  
-*        the dimensionality of either input (Rebin) or output (Resample). This
-*        could cause the optimised code to be used at inappropriate times, 
-*        leading to an incorrect effective Mapping between input and output. The 
-*        checks now check both input and output dimensionality in all cases.
-*     3-MAY-2007 (DSB):
-*        An extra parameter ("nused") has been added to astRebinSeq, and
-*        all the rebinning stuff has been modified to keep "nused" up to date.
-*        This is needed to correct a fault in the generation of GENVAR 
-*        variances.
-*     12-DEC-2007 (DSB):
-*        Some rebinning kernels (e.g. SINCSINC) have negative values and
-*        can result in overall negative output weights. Therefore do not
-*        set output pixels with negative weights bad.
-*     6-MAR-2008 (DSB):
-*        Add an option for astResample to leave unchanged any output pixels
-*        for which an interpolated value cannot be obtained. This is
-*        controlled by the new AST__NOBAD flag.
-*     7-MAY-2008 (DSB):
-*        Clarified meaning of AST__GENVAR, AST__USEVAR and AST__VARWGT flags
-*        in astRebinSeq.
-*     9-MAY-2008 (DSB):
-*        Prevent memory over-run in RebinSeq<X>.
-*     5-MAY-2009 (DSB):
-*        Added astRemoveRegions.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to the header
-   files that define class interfaces that they should make "protected"
-   symbols available. */
-#define astCLASS Mapping
-
-/* Define numerical constants for use in thie module. */
-#define GETATTRIB_BUFF_LEN 50
-#define FUNPN_MAX_CACHE  5
-
-/* Include files. */
-/* ============== */
-
-/* Configuration results  */
-/* ---------------------- */
-#include "config.h" 
-
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#include "mapping.h"             /* Interface definition for this class */
-#include "cmpmap.h"              /* Compund Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Axis permutations */
-#include "pal.h"                 /* SLALIB interface */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module type definitions. */
-/* ======================== */
-/* Enum to represent the data type when resampling a grid of data. */
-typedef enum DataType {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-   TYPE_LD,
-#endif
-   TYPE_D,
-   TYPE_F,
-   TYPE_L,
-   TYPE_UL,
-   TYPE_I,
-   TYPE_UI,
-   TYPE_S,
-   TYPE_US,
-   TYPE_B,
-   TYPE_UB
-} DataType;
-
-/* Data structure to hold information about a Mapping for use by
-   optimisation algorithms. */
-typedef struct MapData {
-   AstMapping *mapping;          /* Pointer to the Mapping */
-   AstPointSet *pset_in;         /* Pointer to input PointSet */
-   AstPointSet *pset_out;        /* Pointer to output PointSet */
-   double *lbnd;                 /* Pointer to lower constraints on input */
-   double *ubnd;                 /* Pointer to upper constraints on input */
-   double **ptr_in;              /* Pointer to input PointSet coordinates */
-   double **ptr_out;             /* Pointer to output PointSet coordinates */
-   int coord;                    /* Index of output coordinate to optimise */
-   int forward;                  /* Use forward transformation? */
-   int negate;                   /* Negate the output value? */
-   int nin;                      /* Number of input coordinates per point */
-   int nout;                     /* Number of output coordinates per point */
-} MapData;
-
-/* Data structure describing a polynomial function */
-#define RATE_ORDER 4             /* The order of polynial used to evalue function derivatives */
-typedef struct PN {
-   int order;                    /* The order; zero=constant, 1=linear, 2=quadratic */
-   double coeff[ RATE_ORDER + 1 ]; /* The coefficients of the polynomail */
-   double xlo;                   /* The lower x limit covered by the polynomial */
-   double xhi;                   /* The upper x limit covered by the polynomial */
-   double y0;                    /* The y offset to be added to the polynomial value */
-   int too_small;                /* Dynamic range of function value over h is
-                                    close to zero */
-} PN;
-
-/* Convert from floating point to floating point or integer */
-#define CONV(IntType,val) ( ( IntType ) ? (int) ( (val) + (((val)>0)?0.5:-0.5) ) : (val) )
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->Unsimplified_Mapping = NULL; \
-   globals->Rate_Disabled = 0; 
-
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Mapping)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Mapping,Class_Init)
-#define class_vtab astGLOBAL(Mapping,Class_Vtab)
-#define getattrib_buff astGLOBAL(Mapping,GetAttrib_Buff)
-#define unsimplified_mapping astGLOBAL(Mapping,Unsimplified_Mapping)
-#define rate_disabled astGLOBAL(Mapping,Rate_Disabled)
-#define funpn_pset1_cache astGLOBAL(Mapping,FunPN_Pset1_Cache)
-#define funpn_pset2_cache astGLOBAL(Mapping,FunPN_Pset2_Cache)
-#define funpn_next_slot astGLOBAL(Mapping,FunPN_Next_Slot)
-#define funpn_pset_size astGLOBAL(Mapping,FunPN_Pset_Size)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */ 
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Pointer to origin (unsimplified) Mapping, only used for reporting 
-   error messages. */ 
-static AstMapping *unsimplified_mapping = NULL;
-
-/* A flag which indicates if the astRate method should be disabled in 
-   order to improve algorithm speed in cases where the rate value is not 
-   significant. If astRate is disabled then it always returns a constant 
-   value of 1.0. */ 
-static int rate_disabled = 0;
-
-/* static values used in function "FunPN". */ 
-static AstPointSet *funpn_pset1_cache[ FUNPN_MAX_CACHE ];
-static AstPointSet *funpn_pset2_cache[ FUNPN_MAX_CACHE ];
-static int funpn_next_slot;
-static int funpn_pset_size[ FUNPN_MAX_CACHE ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstMappingVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* Prototypes for private member functions. */
-/* ======================================== */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-static void InterpolateBlockAverageLD( int, const int[], const int[], const long double [], const long double [], int, const int[], const double *const[], const double[], int, long double, long double *, long double *, int * ); 
-static int InterpolateKernel1LD( AstMapping *, int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double *), int, const double *, int, long double, long double *, long double *, int * );
-static int InterpolateLinearLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, long double *, long double *, int * );
-static int InterpolateNearestLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, long double *, long double *, int * );
-static void SpreadKernel1LD( AstMapping *, int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, long double, int, long double *, long double *, double *, int *, int * );
-static void SpreadLinearLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, int, long double *, long double *, double *, int *, int * );
-static void SpreadNearestLD( int, const int *, const int *, const long double *, const long double *, int, const int *, const double *const *, int, long double, int, long double *, long double *, double *, int *, int * );
-static int ResampleLD( AstMapping *, int, const int [], const int [], const long double [], const long double [], int, void (*)(), const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-static void RebinLD( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-static void RebinSeqLD( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], double [], int *, int * );
-static void ConserveFluxLD( double, int, const int *, long double, long double *, long double *, int * );
-#endif
-
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static PN *FitPN( AstMapping *, double *, int, int, double, double, double *, int * );
-static PN *InterpPN( int, double *, double *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double EvaluateDPN( PN *, double, int * );
-static double EvaluatePN( PN *, double, int * );
-static double J1Bessel( double, int * );
-static double LocalMaximum( const MapData *, double, double, double [], int * );
-static double MapFunction( const MapData *, const double [], int *, int * );
-static double MatrixDet( int, const double *, int * );
-static double MaxD( double, double, int * );
-static double NewVertex( const MapData *, int, double, double [], double [], int *, double [], int * );
-static double Random( long int *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static double UphillSimplex( const MapData *, double, int, const double [], double [], double *, int *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetInvert( AstMapping *, int * );
-static int GetIsSimple( AstMapping *, int * );
-static int GetNin( AstMapping *, int * );
-static int GetNout( AstMapping *, int * );
-static int GetReport( AstMapping *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetTranForward( AstMapping *, int * );
-static int GetTranInverse( AstMapping *, int * );
-static int InterpolateKernel1B( AstMapping *, int, const int *, const int *, const signed char *, const signed char *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, signed char, signed char *, signed char *, int * );
-static int InterpolateKernel1D( AstMapping *, int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, double, double *, double *, int * );
-static int InterpolateKernel1F( AstMapping *, int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, float, float *, float *, int * );
-static int InterpolateKernel1I( AstMapping *, int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, int, int *, int *, int * );
-static int InterpolateKernel1L( AstMapping *, int, const int *, const int *, const long int *, const long int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, long int, long int *, long int *, int * );
-static int InterpolateKernel1S( AstMapping *, int, const int *, const int *, const short int *, const short int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, short int, short int *, short int *, int * );
-static int InterpolateKernel1UB( AstMapping *, int, const int *, const int *, const unsigned char *, const unsigned char *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned char, unsigned char *, unsigned char *, int * );
-static int InterpolateKernel1UI( AstMapping *, int, const int *, const int *, const unsigned int *, const unsigned int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned int, unsigned int *, unsigned int *, int * );
-static int InterpolateKernel1UL( AstMapping *, int, const int *, const int *, const unsigned long int *, const unsigned long int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static int InterpolateKernel1US( AstMapping *, int, const int *, const int *, const unsigned short int *, const unsigned short int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), void (*)( double, const double *, int, double * ), int, const double *, int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static int InterpolateLinearB( int, const int *, const int *, const signed char *, const signed char *, int, const int *, const double *const *, int, signed char, signed char *, signed char *, int * );
-static int InterpolateLinearD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, double *, double *, int * );
-static int InterpolateLinearF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, float *, float *, int * );
-static int InterpolateLinearI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int *, int *, int * );
-static int InterpolateLinearL( int, const int *, const int *, const long int *, const long int *, int, const int *, const double *const *, int, long int, long int *, long int *, int * );
-static int InterpolateLinearS( int, const int *, const int *, const short int *, const short int *, int, const int *, const double *const *, int, short int, short int *, short int *, int * );
-static int InterpolateLinearUB( int, const int *, const int *, const unsigned char *, const unsigned char *, int, const int *, const double *const *, int, unsigned char, unsigned char *, unsigned char *, int * );
-static int InterpolateLinearUI( int, const int *, const int *, const unsigned int *, const unsigned int *, int, const int *, const double *const *, int, unsigned int, unsigned int *, unsigned int *, int * );
-static int InterpolateLinearUL( int, const int *, const int *, const unsigned long int *, const unsigned long int *, int, const int *, const double *const *, int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static int InterpolateLinearUS( int, const int *, const int *, const unsigned short int *, const unsigned short int *, int, const int *, const double *const *, int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static int InterpolateNearestB( int, const int *, const int *, const signed char *, const signed char *, int, const int *, const double *const *, int, signed char, signed char *, signed char *, int * );
-static int InterpolateNearestD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, double *, double *, int * );
-static int InterpolateNearestF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, float *, float *, int * );
-static int InterpolateNearestI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int *, int *, int * );
-static int InterpolateNearestL( int, const int *, const int *, const long int *, const long int *, int, const int *, const double *const *, int, long int, long int *, long int *, int * );
-static int InterpolateNearestS( int, const int *, const int *, const short int *, const short int *, int, const int *, const double *const *, int, short int, short int *, short int *, int * );
-static int InterpolateNearestUB( int, const int *, const int *, const unsigned char *, const unsigned char *, int, const int *, const double *const *, int, unsigned char, unsigned char *, unsigned char *, int * );
-static int InterpolateNearestUI( int, const int *, const int *, const unsigned int *, const unsigned int *, int, const int *, const double *const *, int, unsigned int, unsigned int *, unsigned int *, int * );
-static int InterpolateNearestUL( int, const int *, const int *, const unsigned long int *, const unsigned long int *, int, const int *, const double *const *, int, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static int InterpolateNearestUS( int, const int *, const int *, const unsigned short int *, const unsigned short int *, int, const int *, const double *const *, int, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static int LinearApprox( AstMapping *, const double *, const double *, double, double *, int * );
-static int MapList( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int MaxI( int, int, int * );
-static int MinI( int, int, int * );
-static int ResampleAdaptively( AstMapping *, int, const int *, const int *, const void *, const void *, DataType, int, void (*)(), const double *, int, double, int, const void *, int, const int *, const int *, const int *, const int *, void *, void *, int * );
-static int ResampleB( AstMapping *, int, const int [], const int [], const signed char [], const signed char [], int, void (*)(), const double [], int, double, int, signed char, int, const int [], const int [], const int [], const int [], signed char [], signed char [], int * );
-static int ResampleD( AstMapping *, int, const int [], const int [], const double [], const double [], int, void (*)(), const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-static int ResampleF( AstMapping *, int, const int [], const int [], const float [], const float [], int, void (*)(), const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-static int ResampleI( AstMapping *, int, const int [], const int [], const int [], const int [], int, void (*)(), const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-static int ResampleL( AstMapping *, int, const int [], const int [], const long int [], const long int [], int, void (*)(), const double [], int, double, int, long int, int, const int [], const int [], const int [], const int [], long int [], long int [], int * );
-static int ResampleS( AstMapping *, int, const int [], const int [], const short int [], const short int [], int, void (*)(), const double [], int, double, int, short int, int, const int [], const int [], const int [], const int [], short int [], short int [], int * );
-static int ResampleSection( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, void (*)(), const double *, double, int, const void *, int, const int *, const int *, const int *, const int *, void *, void *, int * );
-static int ResampleUB( AstMapping *, int, const int [], const int [], const unsigned char [], const unsigned char [], int, void (*)(), const double [], int, double, int, unsigned char, int, const int [], const int [], const int [], const int [], unsigned char [], unsigned char [], int * );
-static int ResampleUI( AstMapping *, int, const int [], const int [], const unsigned int [], const unsigned int [], int, void (*)(), const double [], int, double, int, unsigned int, int, const int [], const int [], const int [], const int [], unsigned int [], unsigned int [], int * );
-static int ResampleUL( AstMapping *, int, const int [], const int [], const unsigned long int [], const unsigned long int [], int, void (*)(), const double [], int, double, int, unsigned long int, int, const int [], const int [], const int [], const int [], unsigned long int [], unsigned long int [], int * );
-static int ResampleUS( AstMapping *, int, const int [], const int [], const unsigned short int [], const unsigned short int [], int, void (*)(), const double [], int, double, int, unsigned short int, int, const int [], const int [], const int [], const int [], unsigned short int [], unsigned short int [], int * );
-static int ResampleWithBlocking( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, void (*)(), const double *, int, const void *, int, const int *, const int *, const int *, const int *, void *, void *, int * );
-static int SpecialBounds( const MapData *, double *, double *, double [], double [], int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestInvert( AstMapping *, int * );
-static int TestReport( AstMapping *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearInvert( AstMapping *, int * );
-static void ClearReport( AstMapping *, int * );
-static void CombinePN( PN *, PN *, int * );
-static void ConserveFluxB( double, int, const int *, signed char, signed char *, signed char *, int * );
-static void ConserveFluxD( double, int, const int *, double, double *, double *, int * );
-static void ConserveFluxF( double, int, const int *, float, float *, float *, int * );
-static void ConserveFluxI( double, int, const int *, int, int *, int *, int * );
-static void ConserveFluxL( double, int, const int *, long int, long int *, long int *, int * );
-static void ConserveFluxS( double, int, const int *, short int, short int *, short int *, int * );
-static void ConserveFluxUB( double, int, const int *, unsigned char, unsigned char *, unsigned char *, int * );
-static void ConserveFluxUI( double, int, const int *, unsigned int, unsigned int *, unsigned int *, int * );
-static void ConserveFluxUL( double, int, const int *, unsigned long int, unsigned long int *, unsigned long int *, int * );
-static void ConserveFluxUS( double, int, const int *, unsigned short int, unsigned short int *, unsigned short int *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FunPN( AstMapping *, double *, int, int, int, double *, double *, int * );
-static void Gauss( double, const double [], int, double *, int * );
-static void GlobalBounds( MapData *, double *, double *, double [], double [], int * );
-static void InterpolateBlockAverageB( int, const int[], const int[], const signed char [], const signed char [], int, const int[], const double *const[], const double[], int, signed char, signed char *, signed char *, int * ); 
-static void InterpolateBlockAverageD( int, const int[], const int[], const double [], const double [], int, const int[], const double *const[], const double[], int, double, double *, double *, int * ); 
-static void InterpolateBlockAverageF( int, const int[], const int[], const float [], const float [], int, const int[], const double *const[], const double[], int, float, float *, float *, int * ); 
-static void InterpolateBlockAverageI( int, const int[], const int[], const int [], const int [], int, const int[], const double *const[], const double[], int, int, int *, int *, int * ); 
-static void InterpolateBlockAverageL( int, const int[], const int[], const long int [], const long int [], int, const int[], const double *const[], const double[], int, long int, long int *, long int *, int * ); 
-static void InterpolateBlockAverageS( int, const int[], const int[], const short int [], const short int [], int, const int[], const double *const[], const double[], int, short int, short int *, short int *, int * ); 
-static void InterpolateBlockAverageUB( int, const int[], const int[], const unsigned char [], const unsigned char [], int, const int[], const double *const[], const double[], int, unsigned char, unsigned char *, unsigned char *, int * ); 
-static void InterpolateBlockAverageUI( int, const int[], const int[], const unsigned int [], const unsigned int [], int, const int[], const double *const[], const double[], int, unsigned int, unsigned int *, unsigned int *, int * ); 
-static void InterpolateBlockAverageUL( int, const int[], const int[], const unsigned long int [], const unsigned long int [], int, const int[], const double *const[], const double[], int, unsigned long int, unsigned long int *, unsigned long int *, int * ); 
-static void InterpolateBlockAverageUS( int, const int[], const int[], const unsigned short int [], const unsigned short int [], int, const int[], const double *const[], const double[], int, unsigned short int, unsigned short int *, unsigned short int *, int * ); 
-static void Invert( AstMapping *, int * );
-static void MapBox( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-static void RebinAdaptively( AstMapping *, int, const int *, const int *, const void *, const void *, DataType, int, const double *, int, double, int, const void *, int, const int *, const int *, const int *, const int *, int, void *, void *, double *, int *, int * );
-static void RebinD( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-static void RebinF( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-static void RebinI( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-static void RebinSeqD( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], double [], int *, int * );
-static void RebinSeqF( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], double [], int *, int * );
-static void RebinSeqI( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], double [], int *, int * );
-static void RebinSection( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, const double *, int, const void *, int, const int *, const int *, const int *, const int *, int, void *, void *, double *, int *, int * );
-static void RebinWithBlocking( AstMapping *, const double *, int, const int *, const int *, const void *, const void *, DataType, int, const double *, int, const void *, int, const int *, const int *, const int *, const int *, int, void *, void *, double *, int *, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetInvert( AstMapping *, int, int * );
-static void SetReport( AstMapping *, int, int * );
-static void Sinc( double, const double [], int, double *, int * );
-static void SincCos( double, const double [], int, double *, int * );
-static void SincGauss( double, const double [], int, double *, int * );
-static void SincSinc( double, const double [], int, double *, int * );
-static void Somb( double, const double [], int, double *, int * );
-static void SombCos( double, const double [], int, double *, int * );
-static void SpreadKernel1D( AstMapping *, int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, double, int, double *, double *, double *, int *, int * );
-static void SpreadKernel1F( AstMapping *, int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, float, int, float *, float *, double *, int *, int * );
-static void SpreadKernel1I( AstMapping *, int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, void (*)( double, const double *, int, double *, int * ), int, const double *, int, int, int, int *, int *, double *, int *, int * );
-static void SpreadLinearD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, int, double *, double *, double *, int *, int * );
-static void SpreadLinearF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, int, float *, float *, double *, int *, int * );
-static void SpreadLinearI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int, int *, int *, double *, int *, int * );
-static void SpreadNearestD( int, const int *, const int *, const double *, const double *, int, const int *, const double *const *, int, double, int, double *, double *, double *, int *, int * );
-static void SpreadNearestF( int, const int *, const int *, const float *, const float *, int, const int *, const double *const *, int, float, int, float *, float *, double *, int *, int * );
-static void SpreadNearestI( int, const int *, const int *, const int *, const int *, int, const int *, const double *const *, int, int, int, int *, int *, double *, int *, int * );
-static void Tran1( AstMapping *, int, const double [], int, double [], int * );
-static void Tran2( AstMapping *, int, const double [], const double [], int, double [], double [], int * );
-static void TranGrid( AstMapping *, int, const int[], const int[], double, int, int, int, int, double *, int * );
-static void TranGridAdaptively( AstMapping *, int, const int[], const int[], const int[], const int[], double, int, int, double *[], int * );
-static void TranGridSection( AstMapping *, const double *, int, const int *, const int *, const int *, const int *, int, double *[], int * );
-static void TranGridWithBlocking( AstMapping *, const double *, int, const int *, const int *, const int *, const int *, int, double *[], int * );
-static void TranN( AstMapping *, int, int, int, const double *, int, int, int, double *, int * );
-static void TranP( AstMapping *, int, int, const double *[], int, int, double *[], int * );
-static void ValidateMapping( AstMapping *, int, int, int, int, const char *, int * );
-
-
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Mapping member function (over-rides the astClearAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Mapping, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstMapping *this;             /* Pointer to the Mapping structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Mapping structure. */
-   this = (AstMapping *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Invert. */
-/* ------- */
-   if ( !strcmp( attrib, "invert" ) ) {
-      astClearInvert( this );
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      astClearReport( this );
-
-/* If the name was not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then report an
-   error. */
-   } else if ( !strcmp( attrib, "nin" ) ||
-               !strcmp( attrib, "nout" ) ||
-               !strcmp( attrib, "issimple" ) ||
-               !strcmp( attrib, "islinear" ) ||
-               !strcmp( attrib, "tranforward" ) ||
-               !strcmp( attrib, "traninverse" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void CombinePN( PN *lo, PN *hi, int *status ) {
-/*
-*  Name:
-*     CombinePN
-
-*  Purpose:
-*     Combine polynomials "lo" and "hi", both of order N, into a polynomial
-*     of order N+1.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void CombinePN( PN *lo, PN *hi, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function combines polynomials "lo" and "hi", both of order N, 
-*     into a polynomial of order N+1, and return the new polynomial in 
-*     "lo". It is used to implemtn Neville's algorithm for finding an
-*     interpolating polynomial. See:
-*
-*        http://mathworld.wolfram.com/NevillesAlgorithm.html
-
-*  Parameters:
-*     lo
-*        A polynomial covering the lower x interval. Returned holding the
-*        combined higher-order polynomial.
-*     hi
-*        A polynomial covering the higher x interval. Unchanged on exit.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int n, k;
-   double f, xlo, xhi, cc[ RATE_ORDER + 1 ];
-
-/* Check the global error status */
-   if ( !astOK ) return;
-
-   n = lo->order;
-   xlo = lo->xlo;
-   xhi = hi->xhi;
-
-   f = 1.0/( xlo - xhi );
-
-   cc[ 0 ] = f*(- xhi*( lo->coeff[0]) + xlo*( hi->coeff[ 0 ] ) );
-   for( k = 1; k <= n; k++ ) {
-      cc[ k ] = f*( ( lo->coeff[ k - 1 ] ) - xhi*( lo->coeff[ k ] )
-                   -( hi->coeff[ k - 1 ] ) + xlo*( hi->coeff[ k ] ) );
-   }
-
-   cc[ n + 1 ] = f*( lo->coeff[ n ] - hi->coeff[ n ] );
-
-   lo->order = n + 1;
-   lo->xlo = xlo;
-   lo->xhi = xhi;
-   for( k = 0; k < n+2; k++ ) lo->coeff[ k ] = cc[ k ];
-
-}
-
-/*
-*  Name:
-*     ConserveFlux<X>
-
-*  Purpose:
-*     Scale the output data and variance values produced by ResampleSection 
-*     by the given flux conservation factor. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void ConserveFlux<X>( double factor, int npoint, const int *offset,
-*                           <Xtype> badval, <Xtype> *out, 
-*                           <Xtype> *out_var )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which scale the supplied resampled data 
-*     values by the given flux conservation factor. It also scales any 
-*     variances by the square of the factor.
-
-*  Parameters:
-*     factor
-*        The flux conservation factor. This should be the ratio of the
-*        output pixel size to the input pixel size, in the locality of
-*        the supplied data values.
-*     npoint
-*        The number of points at which the input grid was resampled.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each output point, this array should contain the zero-based
-*        offset in the output array(s) (i.e. the "out" and,
-*        optionally, the "out_var" arrays) at which the resampled
-*        output value(s) is stored.
-*     badval
-*        This parameter specifies the value which is used to identify
-*        bad data and/or variance values in the output array(s).
-*     out
-*        Pointer to an array in which the resampled data is supplied. Note
-*        that details of how the output grid maps on to this array
-*        (e.g. the storage order, number of dimensions, etc.) is
-*        arbitrary and is specified entirely by means of the "offset"
-*        array. The "out" array should therefore contain sufficient
-*        elements to accommodate the "offset" values supplied.  There
-*        is no requirement that all elements of the "out" array should
-*        be assigned values, and any which are not addressed by the
-*        contents of the "offset" array will be left unchanged.
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, in which variance estimates for
-*        the resampled values are supplied. If no output variance estimates 
-*        are available, a NULL pointer should be given.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_CONSERVEFLUX(X,Xtype) \
-static void ConserveFlux##X( double factor, int npoint, const int *offset, \
-                             Xtype badval, Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
-   int off_out;                  /* Pixel offset into output array */ \
-   int point;                    /* Loop counter for output points */ \
-\
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-   for ( point = 0; point < npoint; point++ ) { \
-      off_out = offset[ point ]; \
-      if( out[ off_out ] != badval ) out[ off_out ] *= factor; \
-   } \
-\
-   if( out_var ) { \
-      factor *= factor; \
-      for ( point = 0; point < npoint; point++ ) { \
-         off_out = offset[ point ]; \
-         if( out_var[ off_out ] != badval ) out_var[ off_out ] *= factor; \
-      } \
-   } \
-}
-
-
-/* Expand the macro above to generate a function for each required 
-   data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_CONSERVEFLUX(LD,long double)
-#endif
-MAKE_CONSERVEFLUX(D,double)
-MAKE_CONSERVEFLUX(F,float) 
-MAKE_CONSERVEFLUX(L,long int)
-MAKE_CONSERVEFLUX(I,int)
-MAKE_CONSERVEFLUX(S,short int)
-MAKE_CONSERVEFLUX(B,signed char)
-MAKE_CONSERVEFLUX(UL,unsigned long int)
-MAKE_CONSERVEFLUX(UI,unsigned int)
-MAKE_CONSERVEFLUX(US,unsigned short int)
-MAKE_CONSERVEFLUX(UB,unsigned char)
-
-/* Undefine the macros used above. */
-#undef MAKE_CONSERVEFLUX
-
-static void Decompose( AstMapping *this, AstMapping **map1, AstMapping **map2, 
-                       int *series, int *invert1, int *invert2, int *status ) {
-/*
-*+
-*  Name:
-*     astDecompose
-
-*  Purpose:
-*     Decompose a Mapping into two component Mappings.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void astDecompose( AstMapping *this, AstMapping **map1, 
-*                        AstMapping **map2, int *series, int *invert1, 
-*                        int *invert2  ) 
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function returns pointers to two Mappings which, when applied
-*     either in series or parallel, are equivalent to the supplied Mapping.
-*
-*     Since the Frame class inherits from the Mapping class, Frames can
-*     be considered as special types of Mappings and so this method can
-*     be used to decompose CmpMaps, CmpFrames, CmpRegions or Prisms.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     map1
-*        Address of a location to receive a pointer to first component
-*        Mapping. 
-*     map2
-*        Address of a location to receive a pointer to second component
-*        Mapping. 
-*     series
-*        Address of a location to receive a value indicating if the
-*        component Mappings are applied in series or parallel. A non-zero
-*        value means that the supplied Mapping is equivalent to applying map1 
-*        followed by map2 in series. A zero value means that the supplied
-*        Mapping is equivalent to applying map1 to the lower numbered axes
-*        and map2 to the higher numbered axes, in parallel.
-*     invert1
-*        The value of the Invert attribute to be used with map1. 
-*     invert2
-*        The value of the Invert attribute to be used with map2. 
-
-*  Applicability:
-*     CmpMap
-*        If the supplied Mapping is a CmpMap, then map1 and map2 will be
-*        returned holding pointers to the component Mappings used to
-*        create the CmpMap, either in series or parallel.
-*     Mapping
-*        For any class of Mapping other than a CmpMap, map1 will be
-*        returned holding a clone of the supplied Mapping pointer, and map2
-*        will be returned holding a NULL pointer.
-*     CmpFrame
-*        If the supplied Mapping is a CmpFrame, then map1 and map2 will be
-*        returned holding pointers to the component Frames used to
-*        create the CmpFrame. The component Frames are considered to be in
-*        applied in parallel.
-*     Frame
-*        For any class of Frame other than a CmpFrame, map1 will be 
-*        returned holding a clone of the supplied Frame pointer, and map2
-*        will be returned holding a NULL pointer.
-
-*  Notes:
-*     - Any changes made to the component Mappings using the returned
-*     pointers will be reflected in the supplied Mapping.
-*     - The returned Invert values should be used in preference to the 
-*     current values of the Invert attribute in map1 and map2. This is
-*     because the attributes may have changed value since the Mappings 
-*     were combined.
-
-*  Implementation Notes:
-*     - This function implements the basic astDecompose method
-*     available via the protected interface to the Frame class. The
-*     public interface to this method is provided by the
-*     astDecomposeId_ function.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* The basic Mapping class returns a clone of the supplied Mapping as
-   map1 and a NULL pointer as map2. */
-   if( map1 ) *map1 = astClone( this );
-   if( map2 ) *map2 = NULL;
-   if( series ) *series = 1;
-   if( invert1 ) *invert1 = astGetInvert( this );
-   if( invert2 ) *invert2 = 0;
-}
-
-int astRateState_( int disabled, int *status ) {
-/*
-*+
-*  Name:
-*     astRateState
-
-*  Purpose:
-*     Control whether the astRate method is disabled or not.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astRateState( int disabled )
-
-*  Class Membership:
-*     Mapping member function
-
-*  Description:
-*     Some algorithms which use use the astRate method do not actually need
-*     to know what the Rate value is. For instance, when the Plot class draws 
-*     a border it evaluates the GRAPHICS->Current Mapping hundreds of time.
-*     If the Mapping includes a RateMap then this can be very very slow
-*     (depending on how the astRate method is implemented). In fact the
-*     border drawing algorithm onlyneeds to know if the result is bad or
-*     not - the actual value produced by the Mappign does not matter.
-*
-*     Such algorithms can be speeded up by forcing the astRate method to
-*     return a constant value rather than actually doing the numerical
-*     differentiation. This can be accomplised by calling this method prior
-*     to implementing the algorithm. It should be called at the end in
-*     order to re-instate the original disabled flag.
-
-*  Parameters:
-*     disabled
-*        The new value for the astRate disabled flag.
-
-*  Returned Value:
-*     The original value of the astRate disabled flag.
-
-*-
-*/
-   astDECLARE_GLOBALS
-   int result;
-   astGET_GLOBALS(NULL);
-
-   result = rate_disabled;
-   rate_disabled = disabled;
-   return result;
-}   
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Mappings are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     Mapping member function (over-rides the astEqual protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two Mappings are equivalent.
-*
-*     The implementation provided by this class (the base Mapping class)
-*     simply reports an error when called, since all concrete Mapping
-*     subclasses should provide their own implementation. 
-*
-*     Note, sub-class implementations should not use astSimplify (e.g.
-*     combining the two Mapping and then simplifying it), since the 
-*     astSimplify method for certain classes (e.g. CmpMap) may use 
-*     astEqual. Consequently, if astEqual called astSimplify, there would 
-*     be possibilities for infinite loops.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a Mapping).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the Frames are equivalent, zero otherwise.
-
-*  Notes:
-*     - The two Mappings are considered equivalent if the combination of
-*     the first in series with the inverse of the second simplifies to a
-*     UnitMap.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Object class. This checks
-   that the Objects are both of the same class (amongst other things). */
-   if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Report an error since the concrete sub-class should have over-riden
-   this method. */
-      astError( AST__INTER, "astEqual(Mapping): The %s class does "
-                "not override the abstract astEqual method inherited "
-                "from the base Mapping class (internal AST programming "
-                "error).", status, astGetClass( this_object ) );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void FunPN( AstMapping *map, double *at, int ax1, int ax2,
-                   int n, double *x, double *y, int *status ) {
-/*
-*  Name:
-*     FunPN
-
-*  Purpose:
-*     Find the value of the function currently being differentiated by the 
-*     astRate method.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void FunPN( AstMapping *map, double *at, int ax1, int ax2,
-*                 int n, double *x, double *y, int *status )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This is a service function for the astRate method. It evaluates the
-*     function being differentiated at specified axis values.
-*
-*     This function uses static resources in order to avoid the overhead 
-*     of creating new PointSets each time this function is called. These
-*     static resources which must be initialised before the first invocation 
-*     with a given Mapping, and must be released after the final invocation. 
-*     See "ax1".
-
-*  Parameters:
-*     map
-*        Pointer to a Mapping which yields the value of the function at x.
-*        The Mapping may have any number of inputs and outputs; the specific 
-*        output representing the function value, f, is specified by ax1 and 
-*        the specific input representing the argument, x, is specified by ax2.
-*     at
-*        A pointer to an array holding axis values at the position at which 
-*        the function is to be evaluated. The number of values supplied
-*        must equal the number of inputs to the Mapping. The value supplied 
-*        for axis "ax2" is ignored (the value of "x" is used for axis "ax2").
-*     ax1 
-*        The zero-based index of the Mapping output which is to be
-*        differentiated. Set this to -1 to allocate, or -2 to release, 
-*        the static resources used by this function.
-*     ax2 
-*        The zero-based index of the Mapping input which is to be varied.
-*     n
-*        The number of elements in the "x" and "y" arrays. This should not
-*        be greater than 2*RATE_ORDER.
-*     x
-*        The value of the Mapping input specified by ax2 at which the
-*        function is to be evaluated. If "ax2" is set to -1, then the
-*        supplied value is used as flag indicating if the static resources 
-*        used by this function should be initialised (if x >= 0 ) or
-*        freed (if x < 0).
-*     y
-*        An array in which to return the function values at the positions
-*        given in "x".
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS
-   AstPointSet *pset1;
-   AstPointSet *pset2;
-   double **ptr1;
-   double **ptr2;
-   double *oldx;
-   double *oldy;
-   double *p;
-   double xx;
-   int i;
-   int k;
-   int nin;
-   int nout;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(map);
- 
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   pset2 = NULL;
-
-/* If required, initialise things. */
-   if( ax1 == -1 ) {
-      for( i = 0; i < FUNPN_MAX_CACHE; i++ ) {
-         funpn_pset_size[ i ] = 0;
-         funpn_pset1_cache[ i ] = NULL;
-         funpn_pset2_cache[ i ] = NULL;
-      }
-      funpn_next_slot = 0;
-
-/* If required, clean up. */
-   } else if( ax1 == -2 ) {
-      for( i = 0; i < FUNPN_MAX_CACHE; i++ ) {
-         funpn_pset_size[ i ] = 0;
-         if( funpn_pset1_cache[ i ] ) funpn_pset1_cache[ i ] = astAnnul( funpn_pset1_cache[ i ] );
-         if( funpn_pset2_cache[ i ] ) funpn_pset2_cache[ i ] = astAnnul( funpn_pset2_cache[ i ] );
-      }
-      funpn_next_slot = 0;
-
-/* Otherwise do the transformations. */
-   } else {
-
-/* See if we have already created PointSets of the correct size. */
-      pset1 = NULL;
-      for( i = 0; i < FUNPN_MAX_CACHE; i++ ) {
-         if( funpn_pset_size[ i ] == n ) {
-            pset1 = funpn_pset1_cache[ i ];
-            pset2 = funpn_pset2_cache[ i ];
-            break;
-         }
-      }
-
-/* If we have not, create new PointSets now. */
-      if( pset1 == NULL ) {
-         nin = astGetNin( map );
-         pset1 = astPointSet( n, nin, "", status );
-         ptr1 = astGetPoints( pset1 );
-
-         nout = astGetNout( map );
-         pset2 = astPointSet( n, nout, "", status );
-         ptr2 = astGetPoints( pset2 );
-
-/* Store the input position in the input PointSet. */
-         for( i = 0; i < nin; i++ ) {
-            xx = at[ i ];
-            p = ptr1[ i ];
-            for( k = 0; k < n; k++, p++ ) *p = xx;
-         }
-
-/* Add these new PointSets to the cache, removing any existing 
-   PointSets. */
-         if( funpn_pset_size[ funpn_next_slot ] > 0 ) {
-            (void) astAnnul( funpn_pset1_cache[ funpn_next_slot ] );
-            (void) astAnnul( funpn_pset2_cache[ funpn_next_slot ] );
-         }
-         funpn_pset1_cache[ funpn_next_slot ] = pset1;
-         funpn_pset2_cache[ funpn_next_slot ] = pset2;
-         funpn_pset_size[ funpn_next_slot ] = n;
-         if( ++funpn_next_slot == FUNPN_MAX_CACHE ) funpn_next_slot = 0;
-
-/* If existing PointSets were found, get there data arrays. */
-      } else {
-         ptr1 = astGetPoints( pset1 );
-         ptr2 = astGetPoints( pset2 );
-      }         
-
-/* Store the input X values in the input PointSet data array. */
-      oldx = ptr1[ ax2 ];
-      ptr1[ ax2 ] = x;
-
-/* Store the output Y values in the output PointSet data array. */
-      oldy = ptr2[ ax1 ];
-      ptr2[ ax1 ] = y;
-
-/* Transform the positions. */
-      (void) astTransform( map, pset1, 1, pset2 );
-
-/* Re-instate the original arrays in the PointSets. */
-      ptr1[ ax2 ] = oldx;
-      ptr2[ ax1 ] = oldy;
- 
-   } 
-}
-
-static double EvaluateDPN( PN *pn, double x, int *status ) {
-/*
-*  Name:
-*     EvaluateDPN
-
-*  Purpose:
-*     Evaluate the gradient of a polynomial at a given x value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double EvaluateDPN( PN *pn, double x, int *status ) 
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function evaluates the gradient of the supplied polynomial 
-*     at the supplied x value.
-
-*  Parameters:
-*     pn
-*        Pointer to the structure describing the polynomial.
-*     x
-*        The x value at which to evaluate the polynomial gradient.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The polynomial gradient value.
-*/
-
-/* Local Variables: */
-   int n, i;
-   double ret;
-
-/* Initialise */
-   ret = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK || !pn ) return ret;
-
-   n = pn->order;
-
-   ret = n*pn->coeff[ n ];
-   for( i = n - 1; i > 0; i-- ) {
-      ret = i*pn->coeff[ i ] + ret*x;
-   }
-
-   return ret;
-
-}
-
-static double EvaluatePN( PN *pn, double x, int *status ) {
-/*
-*  Name:
-*     EvaluatePN
-
-*  Purpose:
-*     Evaluate a polynomial at a given x value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     static double EvaluatePN( PN *pn, double x, int *status ) {
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function evaluates the supplied polynomial at the supplied x
-*     value.
-
-*  Parameters:
-*     pn
-*        Pointer to the structure descirbing the polynomial.
-*     x
-*        The x value at which to evaluate the polynomial.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The polynomial value.
-*/
-
-/* Local Variables: */
-   int n, i;
-   double ret;
-
-/* Initialise */
-   ret = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK || !pn ) return ret;
-
-   n = pn->order;
-   ret = pn->coeff[ n ];
-   for( i = n - 1; i >= 0; i-- ) {
-      ret = pn->coeff[ i ] + ret*x;
-   }
-
-   return ret;
-
-}
-
-static PN *FitPN( AstMapping *map, double *at, int ax1, int ax2, double x0, 
-                  double h, double *rms, int *status ){
-/*
-*  Name:
-*     FitPN
-
-*  Purpose:
-*     Fit a polynomial to the function being differentiated and return
-*     the RMS residual.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     PN *FitPN( AstMapping *map, double *at, int ax1, int ax2, double x0, 
-*                double h, double *rms, int *status )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function finds a polynomial which interpolates a set of evenly
-*     spaced samples of the function being differentiated by the astRate
-*     method. The coefficients of this polynomial are returned, together
-*     with the RMS residual between the polynomial and the function at points
-*     mid way between the interpolating points.
-
-*  Parameters:
-*     map
-*        Pointer to a Mapping which yields the value of the function at x.
-*        The Mapping may have any number of inputs and outputs; the specific 
-*        output representing the function value, f, is specified by ax1 and 
-*        the specific input representing the argument, x, is specified by ax2.
-*     at
-*        A pointer to an array holding axis values at the position at which 
-*        the function is to be evaluated. The number of values supplied
-*        must equal the number of inputs to the Mapping. The value supplied 
-*        for axis "ax2" is ignored (the value of "x" is used for axis "ax2").
-*     ax1 
-*        The zero-based index of the Mapping output which is to be
-*        differentiated. Set this to -1 to allocate, or -2 to release, 
-*        the static resources used by this function.
-*     ax2 
-*        The zero-based index of the Mapping input which is to be varied.
-*     x0
-*        The central axis value at which the function is to be evaluated. 
-*     h
-*        The interval over which the fitting is to be performed.
-*     rms
-*        A pointer to a location at which to return the RMS residual
-*        between the returned polynomial and the function, estimated at
-*        points mid way between the interpolating points. May be NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The PN structure holding the polynomial coefficients, etc, or NULL
-*     if no polynomial can be fitted. The independant variable of the 
-*     polynomial is (x-x0) and the dependant variable is (y(x)-y(x0)).
-*     The value of y(x0) is stored in the returned PN structure. The 
-*     memory used to store the polynomial should be freed using astFree 
-*     when no longer needed.
-*/
-
-/* Local Variables: */
-   double x[ RATE_ORDER + 2 ], y[ RATE_ORDER + 2 ], dh, off, s2, e, mean,
-          max, min;   
-   PN *ret;
-   int i0, i, n;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Store the x values at (RATE_ORDER+1) evenly spaced points over the interval 
-   "h" centred on "x0". */
-   i0 = RATE_ORDER/2;
-   dh = h/RATE_ORDER;
-
-   for( i = 0; i <= RATE_ORDER; i++ ) {
-      x[ i ] = x0 + ( i - i0 )*dh;
-   }
-
-/* Get the function values at these positions. */
-   FunPN( map, at, ax1, ax2, RATE_ORDER + 1, x, y, status );
-
-/* Get the mean, max and min function value. */
-   mean = max = min = y[ 0 ];
-   if( mean == AST__BAD ) return NULL;
-   for( i = 1; i <= RATE_ORDER; i++ ) {
-
-      if( y[ i ] == AST__BAD ) return NULL;
-
-      mean += y[ i ];
-
-      if( y[ i ] > max ) {
-         max = y[ i ];
-
-      } else if( y[ i ] < min ) {
-         min = y[ i ];
-
-      }
-   }
-
-/* Convert the x values into x offsets from "x0", and convert the y
-   values into y offsets from the central y value. */
-   off = y[ i0 ];
-   if( off == AST__BAD ) return NULL;
-   for( i = 0; i <= RATE_ORDER; i++ ) {
-      if( y[ i ] == AST__BAD ) {
-         return NULL;
-      } else {
-         y[ i ] -= off;
-         x[ i ] -= x0;
-      }
-   }
-
-/* Find the polynomial which interpolates these points. */
-   ret = InterpPN( RATE_ORDER + 1, x, y, status );
-   if( ret ) {
-      ret->y0 = off;
-
-/* Indicate if the dynamic range of the function values is clsoe to zero. */
-      ret->too_small = ( max - min <= 1.0E-6*fabs( mean )/( RATE_ORDER + 1 ) );
-
-/* If required, find the rms error between the polynomial and the 
-   function at points mid-way between the interpolating points. */
-      if( rms ) {
-
-/* Store the x values at which to evaluate the function. These are the
-   points mid way between the interpolating points (plus one beyond each
-   end). */
-         dh *= 0.5;
-         for( i = 0; i <= RATE_ORDER; i++ ) {
-            x[ i ] += x0 - dh;
-         }
-         x[ RATE_ORDER + 1 ] = x[ RATE_ORDER ] + 2*dh;
-
-/* Evaluate the function at these positions. */
-         FunPN( map, at, ax1, ax2, RATE_ORDER + 2, x, y, status );
-
-/* Loop round evaluating the polynomial fit and incrementing the sum of
-   the squared residuals. */
-         s2 = 0.0;
-         n = 0;
-         for( i = 0; i <= RATE_ORDER + 1; i++ ) {
-            if( y[ i ] != AST__BAD ) {
-               e = EvaluatePN( ret, x[ i ] - x0, status ) + off - y[ i ];
-               s2 += e*e;
-               n++;
-            }
-         }
-   
-/* Evaluate the rms residual. */
-         if( n > 1 ) {
-            *rms = sqrt( s2/( RATE_ORDER + 2 ) );
-         } else {
-            *rms = AST__BAD;
-         }
-      }
-   }
-
-   return ret;
-
-}
-
-static void Gauss( double offset, const double params[], int flags,
-                   double *value, int *status ) {
-/*
-*  Name:
-*     Gauss
-
-*  Purpose:
-*     1-dimensional Gaussian spreading kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void Gauss( double offset, const double params[], int flags,
-*                 double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     spreading kernel. The function used is exp(-k*x*x).
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the central output point, measured
-*        in pixels.
-*     params
-*        The first element of this array should give a value for "k"
-*        in the exp(-k*x*x) term.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Calculate the result. */
-   *value = exp( -params[ 0 ] * offset * offset );
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Mapping member function (over-rides the protected astGetAttrib
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Mapping, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Mapping, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Mapping. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *this;             /* Pointer to the Mapping structure */
-   const char *result;           /* Pointer value to return */
-   int invert;                   /* Invert attribute value */
-   int islinear;                 /* IsLinear attribute value */
-   int issimple;                 /* IsSimple attribute value */
-   int nin;                      /* Nin attribute value */
-   int nout;                     /* Nout attribute value */
-   int report;                   /* Report attribute value */
-   int tran_forward;             /* TranForward attribute value */
-   int tran_inverse;             /* TranInverse attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
- 
-/* Obtain a pointer to the Mapping structure. */
-   this = (AstMapping *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Invert. */
-/* ------- */
-   if ( !strcmp( attrib, "invert" ) ) {
-      invert = astGetInvert( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", invert );
-         result = getattrib_buff;
-      }
-
-/* IsLinear. */
-/* --------- */
-   } else if ( !strcmp( attrib, "islinear" ) ) {
-      islinear = astGetIsLinear( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", islinear );
-         result = getattrib_buff;
-      }
-
-/* IsSimple. */
-/* --------- */
-   } else if ( !strcmp( attrib, "issimple" ) ) {
-      issimple = astGetIsSimple( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", issimple );
-         result = getattrib_buff;
-      }
-
-/* Nin. */
-/* ---- */
-   } else if ( !strcmp( attrib, "nin" ) ) {
-      nin = astGetNin( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nin );
-         result = getattrib_buff;
-      }
-
-/* Nout. */
-/* ----- */
-   } else if ( !strcmp( attrib, "nout" ) ) {
-      nout = astGetNout( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nout );
-         result = getattrib_buff;
-      }
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      report = astGetReport( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", report );
-         result = getattrib_buff;
-      }
-
-/* TranForward. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "tranforward" ) ) {
-      tran_forward = astGetTranForward( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", tran_forward );
-         result = getattrib_buff;
-      }
-
-/* TranInverse. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "traninverse" ) ) {
-      tran_inverse = astGetTranInverse( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", tran_inverse );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetIsLinear
-
-*  Purpose:
-*     Determine if a Mapping is an instance of a linear Mapping class.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astGetIsLinear( AstMapping *this )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function returns a value indicating whether a Mapping is
-*     a member of a class of linear Mappings. The base Mapping class
-*     returns a value of zero. Linear Mapping classes should over-ride
-*     this function to return a non-zero value.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-
-*  Returned Value:
-*     One if the Mapping is a member of a linear Mapping class. Zero
-*     otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-   return 0;
-}
-
-static int GetNin( AstMapping *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNin
-
-*  Purpose:
-*     Get the number of input coordinates for a Mapping.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astGetNin( AstMapping *this )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function returns the number of input coordinate values
-*     required per point by a Mapping (i.e. the number of dimensions
-*     of the space in which input points reside).
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-
-*  Returned Value:
-*     Number of coordinate values required.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* Invert attribute value */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
-   invert = astGetInvert( this );
-
-/* Obtain the Nin value. */
-   if ( astOK ) result = invert ? this->nout : this->nin;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetNout( AstMapping *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNout
-
-*  Purpose:
-*     Get the number of output coordinates for a Mapping.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astGetNout( AstMapping *this )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function returns the number of output coordinate values
-*     generated per point by a Mapping (i.e. the number of dimensions
-*     of the space in which output points reside).
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-
-*  Returned Value:
-*     Number of coordinate values generated.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* Invert attribute value */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
-   invert = astGetInvert( this );
-
-/* Obtain the Nout value. */
-   if ( astOK ) result = invert ? this->nin : this->nout;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetTranForward( AstMapping *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetTranForward
-
-*  Purpose:
-*     Determine if a Mapping defines a forward coordinate transformation.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astGetTranForward( AstMapping *this )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function returns a value indicating whether a Mapping is
-*     able to perform a coordinate transformation in the "forward"
-*     direction.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-
-*  Returned Value:
-*     Zero if the forward coordinate transformation is not defined, or
-*     1 if it is.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* Mapping inverted? */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
-   invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
-   if ( astOK ) result = invert ? this->tran_inverse : this->tran_forward;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetTranInverse( AstMapping *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetTranInverse
-
-*  Purpose:
-*     Determine if a Mapping defines an inverse coordinate transformation.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astGetTranInverse( AstMapping *this )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function returns a value indicating whether a Mapping is
-*     able to perform a coordinate transformation in the "inverse"
-*     direction.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-
-*  Returned Value:
-*     Zero if the inverse coordinate transformation is not defined, or
-*     1 if it is.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   int invert;                   /* Mapping inverted? */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Determine if the Mapping has been inverted. */
-   invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
-   if ( astOK ) result = invert ? this->tran_forward : this->tran_inverse;
-
-/* Return the result. */
-   return result;
-}
-
-static void GlobalBounds( MapData *mapdata, double *lbnd, double *ubnd,
-                          double xl[], double xu[], int *status ) {
-/*
-*  Name:
-*     GlobalBounds
-
-*  Purpose:
-*     Estimate global coordinate bounds for a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GlobalBounds( MapData *mapdata, double *lbnd, double *ubnd,
-*                        double xl[], double xu[], int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function estimates the global lower and upper bounds of a
-*     Mapping function within a constrained region of its input
-*     coordinate space. It uses a robust global optimisation algorithm
-*     based on the selection of pseudo-random starting positions,
-*     followed by the location of local minima and maxima using the
-*     downhill (or uphill) simplex method. The algorithm will cope
-*     with the case where there are several competing minima (or
-*     maxima) with nearly equal values. It attempts to locate the
-*     global bounds to full machine precision when possible.
-
-*  Parameters:
-*     mapdata
-*        Pointer to a MapData structure describing the Mapping
-*        function, its coordinate constraints, etc.
-*     lbnd
-*        Pointer to a double.  On entry, this should contain a
-*        previously-obtained upper limit on the global lower bound, or
-*        AST__BAD if no such limit is available. On exit, it will be
-*        updated with a new estimate of the global lower bound, if a
-*        better one has been found.
-*     ubnd
-*        Pointer to a double.  On entry, this should contain a
-*        previously-obtained lower limit on the global upper bound, or
-*        AST__BAD if no such limit is available. On exit, it will be
-*        updated with a new estimate of the global upper bound, if a
-*        better one has been found.
-*     xl
-*        Pointer to an array of double, with one element for each
-*        input coordinate. On entry, if *lbnd is not equal to AST__OK,
-*        this should contain the input coordinates of a point at which
-*        the Mapping function takes the value *lbnd. On exit, this
-*        function returns the position of a (not necessarily unique)
-*        input point at which the Mapping function takes the value of
-*        the new global lower bound.  This array is not altered if an
-*        improved estimate of the global lower bound cannot be found.
-*     xu
-*        Pointer to an array of double, with one element for each
-*        input coordinate. On entry, if *ubnd is not equal to AST__OK,
-*        this should contain the input coordinates of a point at which
-*        the Mapping function takes the value *ubnd. On exit, this
-*        function returns the position of a (not necessarily unique)
-*        input point at which the Mapping function takes the value of
-*        the new global upper bound.  This array is not altered if an
-*        improved estimate of the global upper bound cannot be found.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The efficiency of this function will usually be improved if
-*     previously-obtained estimates of the extrema and their locations
-*     are provided.
-*     - The values returned via "lbnd", "ubnd", "xl" and "xu" will be
-*     set to the value AST__BAD if this function should fail for any
-*     reason. Their initial values on entry will not be altered if the
-*     function is invoked with the global error status set.
-*/
-
-/* Local Constants: */
-   const double default_acc = 3.0e-5; /* Default convergence accuracy */
-   const int maxiter = 10000;    /* Maximum number of iterations */
-   const int minsame = 5;        /* Minimum no. consistent extrema required */
-   const int nbatch = 32;        /* No. function samples obtained per batch */
-
-/* Local Variables: */
-   AstPointSet *pset_in;         /* Input PointSet for batch transformation */
-   AstPointSet *pset_out;        /* Output PointSet for batch transformation */
-   double **ptr_in;              /* Pointer to batch input coordinates */
-   double **ptr_out;             /* Pointer to batch output coordinates */
-   double *active_hi;            /* Estimated upper limits of active region */
-   double *active_lo;            /* Estimated lower limits of active region */
-   double *sample_hi;            /* Upper limits of sampled region */
-   double *sample_lo;            /* Lower limits of sampled region */
-   double *sample_width;         /* Nominal widths of sampled region */
-   double *x;                    /* Pointer to array of coordinates */
-   double acc;                   /* Convergence accuracy for finding maximum */
-   double active_width;          /* Estimated width of active region */
-   double new_max;               /* Value of new local maximum */
-   double new_min;               /* Value of new local minimum */
-   double oversize;              /* Over-size factor for sampled region */
-   double random;                /* Pseudo-random number */
-   int bad;                      /* Transformed position is bad? */
-   int batch;                    /* Next element to use in position batch */
-   int coord;                    /* Loop counter for coordinates */
-   int done_max;                 /* Satisfactory global maximum found? */
-   int done_min;                 /* Satisfactory global minimum found? */
-   int iter;                     /* Loop counter for iterations */
-   int ncall;                    /* Number of Mapping function calls (junk) */
-   int ncoord;                   /* Number of coordinates in search space */
-   int nmax;                     /* Number of local maxima found */
-   int nmin;                     /* Number of local minima found */
-   int nsame_max;                /* Number of equivalent local maxima found */
-   int nsame_min;                /* Number of equivalent local minima found */
-   long int seed = 1776655449;   /* Arbitrary pseudo-random number seed */
-
-/* Check the global error status */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   done_max = 0;
-   done_min = 0;
-   ncall = 0;
-   nmax = 0;
-   nmin = 0;
-   nsame_max = 0;
-   nsame_min = 0;
-   pset_in = NULL;
-   pset_out = NULL;
-   ptr_in = NULL;
-   ptr_out = NULL;
-   oversize = 0;
-   bad = 0;
-
-/* Extract the number of input coordinates for the Mapping function
-   and allocate workspace. */
-   ncoord = mapdata->nin;
-   active_hi = astMalloc( sizeof( double ) * (size_t) ncoord );
-   active_lo = astMalloc( sizeof( double ) * (size_t) ncoord );
-   sample_hi = astMalloc( sizeof( double ) * (size_t) ncoord );
-   sample_lo = astMalloc( sizeof( double ) * (size_t) ncoord );
-   sample_width = astMalloc( sizeof( double ) * (size_t) ncoord );
-   x = astMalloc( sizeof( double ) * (size_t) ncoord );
-   if ( astOK ) {
-
-/* Calculate the factor by which the size of the region we sample will
-   exceed the size of the Mapping function's active region (the region
-   where the transformed coordinates are non-bad) in each
-   dimension. This is chosen so that the volume ratio will be 2. */
-      oversize = pow( 2.0, 1.0 / (double) ncoord );
-
-/* Initialise the limits of the active region to unknown. */
-      for ( coord = 0; coord < ncoord; coord++ ) {
-         active_lo[ coord ] = DBL_MAX;;
-         active_hi[ coord ] = -DBL_MAX;
-
-/* Initialise the nominal widths of the sampled region to be the
-   actual widths of the search region times the over-size factor. */
-         sample_width[ coord ] = ( mapdata->ubnd[ coord ] -
-                                   mapdata->lbnd[ coord ] ) * oversize;
-
-/* Initialise the sampled region to match the search region. */
-         sample_lo[ coord ] = mapdata->lbnd[ coord ];
-         sample_hi[ coord ] = mapdata->ubnd[ coord ];
-      }
-
-/* Set up position buffer. */
-/* ======================= */
-/* Create two PointSets to act as buffers to hold a complete batch of
-   input and output coordinates. Obtain pointers to their coordinate
-   arrays. */
-      pset_in = astPointSet( nbatch, ncoord, "", status );
-      pset_out = astPointSet( nbatch, mapdata->nout, "", status );
-      ptr_in = astGetPoints( pset_in );
-      ptr_out = astGetPoints( pset_out );
-
-/* Initialise the next element to be used in the position buffer to
-   indicate that the buffer is initially empty. */
-      batch = nbatch;
-   }
-
-/* Define a macro to fill the position buffer with a set of
-   pseudo-random positions and to transform them. */
-#define FILL_POSITION_BUFFER {\
-\
-/* We first generate a suitable volume over which to distribute the\
-   batch of pseudo-random positions. Initially, this will be the\
-   entire search volume, but if we find that the only non-bad\
-   transformed coordinates we obtain are restricted to a small\
-   sub-region of this input volume, then we reduce the sampled volume\
-   so as to concentrate more on the active region. */\
-\
-/* Loop through each input coordinate, checking that at least one\
-   non-bad transformed point has been obtained. If not, we do not\
-   adjust the sampled volume, as we do not yet know where the active\
-   region lies. */\
-   for ( coord = 0; coord < ncoord; coord++ ) {\
-      if ( active_hi[ coord ] >= active_lo[ coord ] ) {\
-\
-/* Estimate the width of the active region from the range of input\
-   coordinates that have so far produced non-bad transformed\
-   coordinates. */\
-         active_width = active_hi[ coord ] - active_lo[ coord ];\
-\
-/* If the current width of the sampled volume exceeds this estimate by\
-   more than the required factor, then reduce the width of the sampled\
-   volume. The rate of reduction is set so that the volume of the\
-   sampled region can halve with every fourth batch of positions. */\
-         if ( ( active_width * oversize ) < sample_width[ coord ] ) {\
-            sample_width[ coord ] /= pow( oversize, 0.25 );\
-\
-/* If the width of the sampled volume does not exceed that of the\
-   known active region by the required factor, then adjust it so that\
-   it does. Note that we must continue to sample some points outside\
-   the known active region in case we have missed any (in which case\
-   the sampled region will expand again to include them). */\
-         } else if ( ( active_width * oversize ) > sample_width[ coord ] ) {\
-            sample_width[ coord ] = active_width * oversize;\
-         }\
-\
-/* Calculate the lower and upper bounds on the sampled volume, using\
-   the new width calculated above and centring it on the active\
-   region, as currently known. */\
-         sample_lo[ coord ] = ( active_lo[ coord ] + active_hi[ coord ] -\
-                                sample_width[ coord ] ) * 0.5;\
-         sample_hi[ coord ] = ( active_lo[ coord ] + active_hi[ coord ] +\
-                                sample_width[ coord ] ) * 0.5;\
-\
-/* Ensure that the sampled region does not extend beyond the original\
-   search region. */\
-         if ( sample_lo[ coord ] < mapdata->lbnd[ coord ] ) {\
-            sample_lo[ coord ] = mapdata->lbnd[ coord ];\
-         }\
-         if ( sample_hi[ coord ] > mapdata->ubnd[ coord ] ) {\
-            sample_hi[ coord ] = mapdata->ubnd[ coord ];\
-         }\
-      }\
-   }\
-\
-/* Having determined the size of the sampled volume, create a batch of\
-   pseudo-random positions uniformly distributed within it. */\
-   for ( batch = 0; batch < nbatch; batch++ ) {\
-      for ( coord = 0; coord < ncoord; coord++ ) {\
-         random = Random( &seed, status );\
-         ptr_in[ coord ][ batch ] = sample_lo[ coord ] * random +\
-                                    sample_hi[ coord ] * ( 1.0 - random );\
-      }\
-   }\
-\
-/* Transform these positions. We process them in a single batch in\
-   order to minimise the overheads in doing this. */\
-   (void) astTransform( mapdata->mapping, pset_in, mapdata->forward,\
-                        pset_out );\
-\
-/* Indicate that the position buffer is now full. */\
-   batch = 0;\
-}
-
-/* Fill the position buffer using the above macro. (Note that because
-   we do not yet have an estimate of the size of the active region,
-   this does not change the sampled region size from our earlier
-   initialised values. */
-   FILL_POSITION_BUFFER;
-
-/* Iterate. */
-/* ======== */
-/* Loop to perform up to "maxiter" iterations to estimate the global
-   minimum and maximum. */
-   for ( iter = 0; astOK && ( iter < maxiter ); iter++ ) {
-
-/* Determine the search accuracy. */
-/* ============================== */
-/* Decide the accuracy to which local extrema should be found. The
-   intention here is to optimise performance, especially where one
-   extremum lies near zero and so could potentially be found to
-   unnecessarily high precision. If we make a mis-assumption (the code
-   below is not fool-proof), we will slow things down for this
-   iteration, but the error will be corrected in future iterations
-   once better estimates are available. */
-
-/* If we have no current estimate of either global extremum, we assume
-   the values we eventually obtain will be of order unity and required
-   to the default accuracy. */
-      acc = default_acc;
-
-/* If we already have an estimate of both global extrema, we set the
-   accuracy level so that the difference between them will be known to
-   the default accuracy. */
-      if ( ( *lbnd != AST__BAD ) && ( *ubnd != AST__BAD ) ) {
-         acc = fabs( *ubnd - *lbnd ) * default_acc;
-
-/* If we have an estimate of only one global extremum, we assume that
-   the difference between the two global extrema will eventually be of
-   the same order as the estimate we currently have, so long as this
-   is not less than unity. */
-      } else if ( *lbnd != AST__BAD ) {
-         if ( fabs( *lbnd ) > 1.0 ) acc = fabs( *lbnd) * default_acc;
-      } else if ( *ubnd != AST__BAD ) {
-         if ( fabs( *ubnd ) > 1.0 ) acc = fabs( *ubnd) * default_acc;
-      }
-
-/* Search for a new local minimum. */
-/* =============================== */
-/* If we are still searching for the global minimum, then obtain a set
-   of starting coordinates from which to find a new local minimum. */
-      if ( !done_min ) {
-
-/* On the first iteration, start searching at the position where the
-   best estimate of the global minimum (if any) has previously been
-   found. We know that this produces non-bad transformed
-   coordinates. */
-         bad = 0;
-         if ( !iter && ( *lbnd != AST__BAD ) ) {
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               x[ coord ] = xl[ coord ];
-            }
-
-/* Otherwise, if no estimate of the global minimum is available, then
-   start searching at the position where the best estimate of the
-   global maximum (if any) has been found. This may be a long way from
-   a local minimum, but at least it will yield a non-bad value for the
-   Mapping function, so some sort of estimate of the global minimum
-   will be obtained. This is important in cases where finding the
-   active region of the function is the main problem. Note that this
-   condition can only occur once, since the global minimum will have
-   an estimate on the next iteration. */
-         } else if ( ( *lbnd == AST__BAD ) && ( *ubnd != AST__BAD ) ) {
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               x[ coord ] = xu[ coord ];
-            }
-
-/* Having exhausted the above possibilities, we use pseudo-random
-   starting positions which are uniformly distributed throughout the
-   search volume. First check to see if the buffer containing such
-   positions is empty and refill it if necessary. */
-         } else {
-            if ( batch >= nbatch ) FILL_POSITION_BUFFER;
-
-/* Test the next available set of output (transformed) coordinates in
-   the position buffer to see if they are bad. */
-            if ( astOK ) {
-               for ( coord = 0; coord < mapdata->nout; coord++ ) {
-                  bad = ( ptr_out[ coord ][ batch ] == AST__BAD );
-                  if ( bad ) break;
-               }
-
-/* If not, we have a good starting position for finding a local
-   minimum, so extract the corresponding input coordinates. */
-               if ( !bad ) {
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     x[ coord ] = ptr_in[ coord ][ batch ];
-                  }
-               }
-
-/* Increment the position buffer location. */
-               batch++;
-            }
-         }
-
-/* If we do not have a good starting position, we can't do anything
-   more on this iteration. A new position will be obtained and tested
-   on the next iteration and this (we hope) will eventually identify a
-   suitable starting point. */
-         if ( astOK && !bad ) {
-
-/* Form estimates of the lower and upper limits of the active region
-   from the starting positions used. */
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               if ( x[ coord ] < active_lo[ coord ] ) {
-                  active_lo[ coord ] = x[ coord ];
-               }
-               if ( x[ coord ] > active_hi[ coord ] ) {
-                  active_hi[ coord ] = x[ coord ];
-               }
-            }
-
-/* Indicate that the Mapping function should be negated (because we
-   want a local minimum) and then search for a local maximum in this
-   negated function. If the result is non-bad (as it should always be,
-   barring an error), then negate it to obtain the value of the local
-   minimum found. */
-            mapdata->negate = 1;
-            new_min = LocalMaximum( mapdata, acc, 0.01, x, status );
-            if ( new_min != AST__BAD ) {
-               new_min = -new_min;
-
-/* Update the estimates of the lower and upper bounds of the active
-   region to take account of where the minimum was found. */
-               for ( coord = 0; coord < ncoord; coord++ ) {
-                  if ( x[ coord ] < active_lo[ coord ] ) {
-                     active_lo[ coord ] = x[ coord ];
-                  }
-                  if ( x[ coord ] > active_hi[ coord ] ) {
-                     active_hi[ coord ] = x[ coord ];
-                  }
-               }
-
-/* Count the number of times we successfully locate a local minimum
-   (ignoring the fact they might all be the same one). */
-               nmin++;
-
-/* Update the global minimum. */
-/* ========================== */
-/* If this is the first estimate of the global minimum, then set to
-   one the count of the number of consecutive iterations where this
-   estimate remains unchanged. Store the minimum value and its
-   position. */
-               if ( *lbnd == AST__BAD ) {
-                  nsame_min = 1;
-                  *lbnd = new_min;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     xl[ coord ] = x[ coord ];
-                  }
-
-/* Otherwise, test if this local minimum is lower than the previous
-   estimate of the global minimum. If so, then reset the count of
-   unchanged estimates of the global mimimum to one if the difference
-   exceeds the accuracy with which the minimum was found (i.e. if we
-   have found a significantly different minimum). Otherwise, just
-   increment this count (because we have found the same minimum but by
-   chance with slightly improved accuracy). Store the new minimum and
-   its position. */
-               } else if ( new_min < *lbnd ) {
-                  nsame_min = ( ( *lbnd - new_min ) > acc ) ? 1 :
-                                                              nsame_min + 1;
-                  *lbnd = new_min;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     xl[ coord ] = x[ coord ];
-                  }
-
-/* If the latest local minimum is no improvement on previous estimates
-   of the global minimum, then increment the count of unchanged
-   estimates of the global mimimum, but do not save the new one. */
-               } else {
-                  nsame_min++;
-               }
-
-/* Determine if a satisfactory estimate of the global minimum has been
-   obtained.  It has if the number of consecutive local minima which
-   have not significantly improved the estimate is at least equal to
-   "minsame", and at least 30% of the total number of local minima
-   found. */
-               if ( ( nsame_min >= minsame ) &&
-                    ( nsame_min >= (int) ( 0.3f * (float) nmin + 0.5f ) ) ) {
-                  done_min = 1;
-               }
-            }
-         }
-      }
-
-/* Search for a new local maximum. */
-/* =============================== */
-/* Now repeat all of the above to find a new local maximum which
-   estimates the global maximum. */
-      if ( !done_max ) {
-
-/* Choose a suitable starting position, based on one already available
-   if appropriate. */
-         if ( !iter && ( *ubnd != AST__BAD ) ) {
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               x[ coord ] = xu[ coord ];
-            }
-
-         } else if ( ( *ubnd == AST__BAD ) && ( *lbnd != AST__BAD ) ) {
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               x[ coord ] = xl[ coord ];
-            }
-
-/* Otherwise use a pseudo-random position, refilling the position
-   buffer if necessary. Check if the transformed coordinates are
-   bad. */
-         } else {
-            if ( batch >= nbatch ) FILL_POSITION_BUFFER;
-            if ( astOK ) {
-               for ( coord = 0; coord < mapdata->nout; coord++ ) {
-                  bad = ( ptr_out[ coord ][ batch ] == AST__BAD );
-                  if ( bad ) break;
-               }
-               if ( !bad ) {
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     x[ coord ] = ptr_in[ coord ][ batch ];
-                  }
-               }
-               batch++;
-            }
-         }
-
-/* If the coordinates are OK, update the active region limits. */
-         if ( astOK && !bad ) {
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               if ( x[ coord ] < active_lo[ coord ] ) {
-                  active_lo[ coord ] = x[ coord ];
-               }
-               if ( x[ coord ] > active_hi[ coord ] ) {
-                  active_hi[ coord ] = x[ coord ];
-               }
-            }
-
-/* Find a local maximum in the Mapping function. */
-            mapdata->negate = 0;
-            new_max = LocalMaximum( mapdata, acc, 0.01, x, status );
-            if ( new_max != AST__BAD ) {
-
-/* Use the result to further update the active region limits. */
-               for ( coord = 0; coord < ncoord; coord++ ) {
-                  if ( x[ coord ] < active_lo[ coord ] ) {
-                     active_lo[ coord ] = x[ coord ];
-                  }
-                  if ( x[ coord ] > active_hi[ coord ] ) {
-                     active_hi[ coord ] = x[ coord ];
-                  }
-               }
-
-/* Count the number of local maxima found. */
-               nmax++;
-
-/* Update the estimate of the global maximum. */
-               if ( *ubnd == AST__BAD ) {
-                  nsame_max = 1;
-                  *ubnd = new_max;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     xu[ coord ] = x[ coord ];
-                  }
-
-               } else if ( new_max > *ubnd ) {
-                  nsame_max = ( ( new_max - *ubnd ) > acc ) ? 1 :
-                                                              nsame_max + 1;
-                  *ubnd = new_max;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     xu[ coord ] = x[ coord ];
-                  }
-
-               } else {
-                  nsame_max++;
-               }
-
-/* Test for a satisfactory global maximum estimate. */
-               if ( ( nsame_max >= minsame ) &&
-                    ( nsame_max >= (int) ( 0.3f * (float) nmax + 0.5 ) ) ) {
-                  done_max = 1;
-               }
-            }
-         }
-      }
-
-/* Quit iterating once both the global minimum and the global maximum
-   have been found. */
-      if ( done_min && done_max ) break;
-   }
-
-/* Free workspace. */
-   active_hi = astFree( active_hi );
-   active_lo = astFree( active_lo );
-   sample_hi = astFree( sample_hi );
-   sample_lo = astFree( sample_lo );
-   sample_width = astFree( sample_width );
-   x = astFree( x );
-
-/* Annul temporary PointSets. */
-   pset_in = astAnnul( pset_in );
-   pset_out = astAnnul( pset_out );
-
-/* If the global minimum has been found, attempt to polish the result
-   to machine precision by requesting that it be found with an
-   accuracy tolerance of zero (subject to the maximum number of
-   iterations that LocalMaximum will perform,). */
-   if ( astOK ) {
-      if ( *lbnd != AST__BAD ) {
-         mapdata->negate = 1;
-         *lbnd = LocalMaximum( mapdata, 0.0, sqrt( DBL_EPSILON ), xl, status );
-         if ( *lbnd != AST__BAD ) *lbnd = - *lbnd;
-      }
-
-/* Similarly polish the estimate of the global maximum. */
-      if ( *ubnd != AST__BAD ) {
-         mapdata->negate = 0;
-         *ubnd = LocalMaximum( mapdata, 0.0, sqrt( DBL_EPSILON ), xu, status );
-      }
-
-/* If either extremum could not be found, then report an error. */
-      if ( ( *lbnd == AST__BAD ) || ( *ubnd == AST__BAD ) ) {
-         astError( AST__MBBNF, "astMapBox(%s): No valid output coordinates "
-                   "(after %d test points).", status, astGetClass( mapdata->mapping ),
-                   2 * maxiter );
-      }
-
-/* If an error occurred, then return bad extremum values and
-   coordinates. */
-      if ( !astOK ) {
-         *lbnd = AST__BAD;
-         *ubnd = AST__BAD;
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            xl[ coord ] = AST__BAD;
-            xu[ coord ] = AST__BAD;
-         }
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef FILL_POSITION_BUFFER
-}
-
-void astInitMappingVtab_(  AstMappingVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitMappingVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Mapping.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void astInitMappingVtab( AstMappingVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Mapping vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Mapping class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAMapping) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-   vtab->ResampleLD = ResampleLD;
-   vtab->RebinLD = RebinLD;
-   vtab->RebinSeqLD = RebinSeqLD;
-#endif
-   vtab->ClearInvert = ClearInvert;
-   vtab->ClearReport = ClearReport;
-   vtab->Decompose = Decompose;
-   vtab->GetInvert = GetInvert;
-   vtab->GetIsLinear = GetIsLinear;
-   vtab->GetIsSimple = GetIsSimple;
-   vtab->GetNin = GetNin;
-   vtab->GetNout = GetNout;
-   vtab->GetReport = GetReport;
-   vtab->GetTranForward = GetTranForward;
-   vtab->GetTranInverse = GetTranInverse;
-   vtab->Invert = Invert;
-   vtab->LinearApprox = LinearApprox;
-   vtab->MapBox = MapBox;
-   vtab->MapList = MapList;
-   vtab->MapMerge = MapMerge;
-   vtab->MapSplit = MapSplit;
-   vtab->Rate = Rate;
-   vtab->ReportPoints = ReportPoints;
-   vtab->RebinD = RebinD;
-   vtab->RebinF = RebinF;
-   vtab->RebinI = RebinI;
-   vtab->RebinSeqD = RebinSeqD;
-   vtab->RebinSeqF = RebinSeqF;
-   vtab->RebinSeqI = RebinSeqI;
-   vtab->RemoveRegions = RemoveRegions;
-   vtab->ResampleB = ResampleB;
-   vtab->ResampleD = ResampleD;
-   vtab->ResampleF = ResampleF;
-   vtab->ResampleI = ResampleI;
-   vtab->ResampleL = ResampleL;
-   vtab->ResampleS = ResampleS;
-   vtab->ResampleUB = ResampleUB;
-   vtab->ResampleUI = ResampleUI;
-   vtab->ResampleUL = ResampleUL;
-   vtab->ResampleUS = ResampleUS;
-   vtab->SetInvert = SetInvert;
-   vtab->SetReport = SetReport;
-   vtab->Simplify = Simplify;
-   vtab->TestInvert = TestInvert;
-   vtab->TestReport = TestReport;
-   vtab->Tran1 = Tran1;
-   vtab->Tran2 = Tran2;
-   vtab->TranGrid = TranGrid;
-   vtab->TranN = TranN;
-   vtab->TranP = TranP;
-   vtab->Transform = Transform;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-   parent_equal = object->Equal;
-   object->Equal = Equal;
-
-/* Declare the destructor, copy constructor and dump function. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Mapping", "Mapping between coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-/*
-*  Name:
-*     InterpolateKernel1<X>
-
-*  Purpose:
-*     Resample a data grid, using a 1-d interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int InterpolateKernel1<X>( AstMapping *this, int ndim_in,
-*                                const int *lbnd_in, const int *ubnd_in,
-*                                const <Xtype> *in, const <Xtype> *in_var,
-*                                int npoint, const int *offset,
-*                                const double *const *coords,
-*                                void (* kernel)( double, const double [], int,
-*                                                 double *, int * ),
-*                                void (* fkernel)( double, const double [], int,
-*                                                  double * ),
-*                                int neighb, const double *params, int flags,
-*                                <Xtype> badval,
-*                                <Xtype> *out, <Xtype> *out_var )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which resample a rectangular input
-*     grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. Each output
-*     grid point may be mapped on to a position in the input grid in
-*     an arbitrary way. The input and output grids may have any number
-*     of dimensions, not necessarily equal.
-*
-*     Where the positions given do not correspond with a pixel centre
-*     in the input grid, interpolation is performed using a weighted
-*     sum of the surrounding pixel values. The weights are determined
-*     by a separable kernel which is the product of a 1-dimensional
-*     kernel function evaluated along each input dimension. A pointer
-*     should be supplied to the 1-dimensional kernel function to be
-*     used.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping being used in the resampling operation
-*        (this is only used for constructing error messages).
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input grid, its extent along a particular
-*        (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-*        is zero-based). They also define the input grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be resampled (with an element
-*        for each pixel in the input grid). The numerical type of
-*        these data should match the function used, as given by the
-*        suffix on the function name. The storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-*        (i.e. Fortran array storage order).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of points at which the input grid is to be
-*        resampled.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each output point, this array should contain the zero-based
-*        offset in the output array(s) (i.e. the "out" and,
-*        optionally, the "out_var" arrays) at which the resampled
-*        output value(s) should be stored.
-*     coords
-*        An array of pointers to double, with "ndim_in"
-*        elements. Element "coords[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contains the values of coordinate number "coord" for each
-*        interpolation point. The value of coordinate number "coord"
-*        for interpolation point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices to be
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding output data (and
-*        variance) will be set to the value given by "badval" (unles the
-*        AST__NOBAD flag is specified).
-*     kernel
-*        Pointer to the 1-dimensional kernel function to be used.
-*     fkernel
-*        Pointer to the 1-dimensional kernel function to be used with no
-*        trailing status argument. This is only used if "kernel" is NULL.
-*     neighb
-*        The number of neighbouring pixels in each dimension (on each
-*        side of the interpolation position) which are to contribute
-*        to the interpolated value. This value should be at least 1.
-*     params
-*        Pointer to an optional array of parameter values to be passed
-*        to the interpolation kernel function. If no parameters are
-*        required by this function, then a NULL pointer may be
-*        supplied.
-*     flags
-*        The bitwise OR of a set of flag values which provide
-*        additional control over the resampling operation.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. Unles the AST__NOBAD flag is specified in "flags", the 
-*        same value will also be used to flag any output array elements 
-*        for which resampled values could not be obtained.  The output 
-*        arrays(s) may be flagged with this value whether or not the 
-*        AST__USEBAD flag is set (the function return value indicates 
-*        whether any such values have been produced).
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned. Note
-*        that details of how the output grid maps on to this array
-*        (e.g. the storage order, number of dimensions, etc.) is
-*        arbitrary and is specified entirely by means of the "offset"
-*        array. The "out" array should therefore contain sufficient
-*        elements to accommodate the "offset" values supplied.  There
-*        is no requirement that all elements of the "out" array should
-*        be assigned values, and any which are not addressed by the
-*        contents of the "offset" array will be left unchanged.
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given. It is addressed in
-*        exactly the same way (via the "offset" array) as the "out"
-*        array. The values returned are estimates of the statistical
-*        variance of the corresponding values in the "out" array, on
-*        the assumption that all errors in input grid values (in the
-*        "in" array) are statistically independent and that their
-*        variance estimates (in the "in_var" array) may simply be
-*        summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-
-*  Returned Value:
-*     The number of output grid points for which no valid output value 
-*     could be obtained.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*     - A value of zero will be returned if any of these functions is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-/* Define macros to implement the function for a specific data
-   type. */
-#define MAKE_INTERPOLATE_KERNEL1(X,Xtype,Xfloating,Xfloattype,Xsigned) \
-static int InterpolateKernel1##X( AstMapping *this, int ndim_in, \
-                                  const int *lbnd_in, const int *ubnd_in, \
-                                  const Xtype *in, const Xtype *in_var, \
-                                  int npoint, const int *offset, \
-                                  const double *const *coords, \
-                                  void (* kernel)( double, const double [], \
-                                                   int, double *, int * ), \
-                                  void (* fkernel)( double, const double [], \
-                                                    int, double * ), \
-                                  int neighb, const double *params, \
-                                  int flags, Xtype badval, \
-                                  Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
-   astDECLARE_GLOBALS            /* Thread-specific data */ \
-   Xfloattype hi_lim;            /* Upper limit on output values */ \
-   Xfloattype lo_lim;            /* Lower limit on output values */ \
-   Xfloattype sum;               /* Weighted sum of pixel data values */ \
-   Xfloattype sum_var;           /* Weighted sum of pixel variance values */ \
-   Xfloattype val;               /* Data value to be assigned to output */ \
-   Xfloattype val_var;           /* Variance to be assigned to output */ \
-   Xfloattype wtsum;             /* Sum of weight values */ \
-   Xfloattype wtsum_sq;          /* Square of sum of weights */ \
-   Xtype var;                    /* Variance value */ \
-   double **wtptr;               /* Pointer to array of weight pointers */ \
-   double **wtptr_last;          /* Array of highest weight pointer values */ \
-   double *kval;                 /* Pointer to array of kernel values */ \
-   double *wtprod;               /* Accumulated weight value array pointer */ \
-   double *xn_max;               /* Pointer to upper limits array (n-d) */ \
-   double *xn_min;               /* Pointer to lower limits array (n-d) */ \
-   double pixwt;                 /* Weight to apply to individual pixel */ \
-   double wt_y;                  /* Value of y-dependent pixel weight */ \
-   double x;                     /* x coordinate value */ \
-   double xmax;                  /* x upper limit */ \
-   double xmin;                  /* x lower limit */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   double ymax;                  /* y upper limit */ \
-   double ymin;                  /* y lower limit */ \
-   int *hi;                      /* Pointer to array of upper indices */ \
-   int *lo;                      /* Pointer to array of lower indices */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int bad_var;                  /* Output variance bad? */ \
-   int done;                     /* All pixel indices done? */ \
-   int hi_x;                     /* Upper pixel index (x dimension) */ \
-   int hi_y;                     /* Upper pixel index (y dimension) */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ii;                       /* Loop counter for dimensions */ \
-   int ix;                       /* Pixel index in input grid x dimension */ \
-   int ixn;                      /* Pixel index in input grid (n-d) */ \
-   int iy;                       /* Pixel index in input grid y dimension */ \
-   int kerror;                   /* Error signalled by kernel function? */ \
-   int lo_x;                     /* Lower pixel index (x dimension) */ \
-   int lo_y;                     /* Lower pixel index (y dimension) */ \
-   int nobad;                    /* Was the AST__NOBAD flag set? */ \
-   int off1;                     /* Input pixel offset due to y index */ \
-   int off_in;                   /* Offset to input pixel */ \
-   int off_out;                  /* Offset to output pixel */ \
-   int pixel;                    /* Offset to input pixel containing point */ \
-   int point;                    /* Loop counter for output points */ \
-   int result;                   /* Result value to return */ \
-   int s;                        /* Temporary variable for strides */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int ystride;                  /* Stride along input grid y dimension */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
-   astGET_GLOBALS(this); \
-\
-/* Further initialisation. */ \
-   kerror = 0; \
-   sum_var = 0; \
-   val = 0; \
-   val_var = 0; \
-   wtsum = 0; \
-   bad = 0; \
-   bad_var = 0; \
-   sum = 0.0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-   nobad = flags & AST__NOBAD; \
-   usebad = flags & AST__USEBAD; \
-   usevar = in_var && out_var; \
-\
-/* Set up limits for checking output values to ensure that they do not \
-   overflow the range of the data type being used. */ \
-   lo_lim = LO_##X; \
-   hi_lim = HI_##X; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   if ( ndim_in == 1 ) { \
-\
-/* Calculate the coordinate limits of the input grid. */ \
-      xmin = (double) lbnd_in[ 0 ] - 0.5; \
-      xmax = (double) ubnd_in[ 0 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Four more cases as above, but this time with the AST__NOBAD flag \
-   un-set. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Exit point on error in kernel function */ \
-      Kernel_Error_1d: ; \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   } else if ( ndim_in == 2 ) { \
-\
-/* Allocate workspace. */ \
-      kval = astMalloc( sizeof( double ) * (size_t) ( 2 * neighb ) ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
-         ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
-   dimension. */ \
-         xmin = (double) lbnd_in[ 0 ] - 0.5; \
-         xmax = (double) ubnd_in[ 0 ] + 0.5; \
-         ymin = (double) lbnd_in[ 1 ] - 0.5; \
-         ymax = (double) ubnd_in[ 1 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-         if ( nobad ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
-                  } \
-               } \
-            } \
-\
-/* Another four cases, as above, but this time without the AST__NOBAD \
-   flag. */ \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
-                  } \
-               } \
-            } \
-         } \
-\
-/* Exit point on error in kernel function */ \
-         Kernel_Error_2d: ; \
-      } \
-\
-/* Free the workspace. */ \
-      kval = astFree( kval ); \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-   } else { \
-\
-/* Allocate workspace. */ \
-      hi = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      lo = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      kval = astMalloc( sizeof( double ) * (size_t) \
-                                           ( 2 * neighb * ndim_in ) ); \
-      wtprod = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      wtptr = astMalloc( sizeof( double * ) * (size_t) ndim_in ); \
-      wtptr_last = astMalloc( sizeof( double * ) * (size_t) ndim_in ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
-         for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
-            stride[ idim ] = s; \
-            s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
-   dimension. */ \
-            xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
-            xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
-         } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-         if( nobad ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
-                  } \
-               } \
-            } \
-\
-/* Another 4 cases as above, but this time with the AST__NOBAD flag \
-   un-set. */ \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
-                  } \
-               } \
-            } \
-         } \
-\
-/* Exit point on error in kernel function */ \
-         Kernel_Error_Nd: ;\
-      } \
-\
-/* Free the workspace. */ \
-      hi = astFree( hi ); \
-      lo = astFree( lo ); \
-      stride = astFree( stride ); \
-      xn_max = astFree( xn_max ); \
-      xn_min = astFree( xn_min ); \
-      kval = astFree( kval ); \
-      wtprod = astFree( wtprod ); \
-      wtptr = astFree( wtptr ); \
-      wtptr_last = astFree( wtptr_last ); \
-   } \
-\
-/* If an error occurred in the kernel function, then report a \
-   contextual error message. */ \
-   if ( kerror ) { \
-      astError( astStatus, "astResample"#X"(%s): Error signalled by " \
-                "user-supplied 1-d interpolation kernel.", status, \
-                astGetClass( unsimplified_mapping ) ); \
-   } \
-\
-/* If an error has occurred, clear the returned result. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 1-dimensional
-   case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the input grid, or is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offset along \
-   the input grid x dimension of the input pixel which contains the \
-   current coordinate, and calculate this pixel's offset from the \
-   start of the input array. */ \
-      if ( Usebad ) { \
-         pixel = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-\
-/* Test if the pixel is bad. */ \
-         bad = ( in[ pixel ] == badval ); \
-      } \
-\
-/* If OK, calculate the lowest and highest indices (in the x \
-   dimension) of the region of neighbouring pixels that will \
-   contribute to the interpolated result. Constrain these values to \
-   lie within the input grid. */ \
-      if ( !bad ) { \
-         ix = (int) floor( x ); \
-         lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
-         hi_x = MinI( ix + neighb,     ubnd_in[ 0 ], status ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
-         sum = (Xfloattype) 0.0; \
-         wtsum = (Xfloattype) 0.0; \
-         if ( Usevar ) { \
-            sum_var = (Xfloattype) 0.0; \
-            bad_var = 0; \
-         } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
-   of each pixel from the start of the input array. */ \
-         off_in = lo_x - lbnd_in[ 0 ]; \
-         for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. If not, calculate its \
-   weight by evaluating the kernel function. */ \
-            if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-               if( kernel ) { \
-                  ( *kernel )( (double) ix - x, params, flags, &pixwt, status ); \
-               } else { \
-                  ( *fkernel )( (double) ix - x, params, flags, &pixwt ); \
-               } \
-\
-/* Check for errors arising in the kernel function. */ \
-               if ( !astOK ) { \
-                  kerror = 1; \
-                  goto Kernel_Error_1d; \
-               } \
-\
-/* Form the weighted sums required for finding the interpolated \
-   value. */ \
-               sum += ( (Xfloattype) pixwt ) * ( (Xfloattype) in[ off_in ] ); \
-               wtsum += (Xfloattype) pixwt; \
-\
-/* If a variance estimate is required and it still seems possible to \
-   obtain one, then obtain the variance value associated with the \
-   current input pixel. */ \
-               if ( Usevar ) { \
-                  if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                     var = in_var[ off_in ]; \
-\
-/* If necessary, test if this value is bad (if the data type is \
-   signed, also check that it is not negative). */ \
-                     if ( Usebad ) bad_var = ( var == badval ); \
-                     CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If any bad input variance value is obtained, we cannot generate a \
-   valid output variance estimate. Otherwise, form the sum needed to \
-   calculate this estimate. */ \
-                     if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                        sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
-                                   ( (Xfloattype) var ); \
-                     } \
-                  } \
-               } \
-            } \
-         } \
-      } \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 2-dimensional
-   case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the input grid, or is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If not, then similarly obtain and test the y coordinate. */ \
-      y = coords[ 1 ][ point ]; \
-      bad = ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
-      if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offsets along \
-   each input grid dimension of the input pixel which contains the \
-   current coordinates, and calculate this pixel's offset from the \
-   start of the input array. */ \
-         if ( Usebad ) { \
-            ix = (int) floor( x + 0.5 ); \
-            iy = (int) floor( y + 0.5 ); \
-            pixel = ix - lbnd_in[ 0 ] + ystride * ( iy - lbnd_in[ 1 ] ); \
-\
-/* Test if the pixel is bad. */ \
-            bad = ( in[ pixel ] == badval ); \
-         } \
-\
-/* If OK, calculate the lowest and highest indices (in each dimension) \
-   of the region of neighbouring pixels that will contribute to the \
-   interpolated result. Constrain these values to lie within the input \
-   grid. */ \
-         if ( !bad ) { \
-            ix = (int) floor( x ); \
-            lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
-            hi_x = MinI( ix + neighb,     ubnd_in[ 0 ], status ); \
-            iy = (int) floor( y ); \
-            lo_y = MaxI( iy - neighb + 1, lbnd_in[ 1 ], status ); \
-            hi_y = MinI( iy + neighb,     ubnd_in[ 1 ], status ); \
-\
-/* Loop to evaluate the kernel function along the x dimension, storing \
-   the resulting values. The function's argument is the offset of the \
-   contributing pixel (along this dimension) from the input \
-   position. */ \
-            for ( ix = lo_x; ix <= hi_x; ix++ ) { \
-               if( kernel ) { \
-                  ( *kernel )( (double) ix - x, params, flags, \
-                               kval + ix - lo_x, status ); \
-               } else { \
-                  ( *fkernel )( (double) ix - x, params, flags, \
-                               kval + ix - lo_x ); \
-               } \
-\
-/* Check for errors arising in the kernel function. */ \
-               if ( !astOK ) { \
-                  kerror = 1; \
-                  goto Kernel_Error_2d; \
-               } \
-            } \
-\
-/* Initialise sums for forming the interpolated result. */ \
-            sum = (Xfloattype) 0.0; \
-            wtsum = (Xfloattype) 0.0; \
-            if ( Usevar ) { \
-               sum_var = (Xfloattype) 0.0; \
-               bad_var = 0; \
-            } \
-\
-/* Loop over the y index to inspect all the contributing pixels, while \
-   keeping track of their offset within the input array. Evaluate the \
-   kernel function for each y index value. */ \
-            off1 = lo_x - lbnd_in[ 0 ] + ystride * ( lo_y - lbnd_in[ 1 ] ); \
-            for ( iy = lo_y; iy <= hi_y; iy++, off1 += ystride ) { \
-               if( kernel ) { \
-                  ( *kernel )( (double) iy - y, params, flags, &wt_y, status ); \
-               } else { \
-                  ( *fkernel )( (double) iy - y, params, flags, &wt_y ); \
-               } \
-\
-/* Check for errors arising in the kernel function. */ \
-               if ( !astOK ) { \
-                  kerror = 1; \
-                  goto Kernel_Error_2d; \
-               } \
-\
-/* Loop over the x index, calculating the pixel offset in the input \
-   array. */ \
-               off_in = off1; \
-               for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. If not, calculate its \
-   weight as the product of the kernel function's value for the x and \
-   y dimensions. */ \
-                  if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-                     pixwt = kval[ ix - lo_x ] * wt_y; \
-\
-/* Form the weighted sums required for finding the interpolated \
-   value. */ \
-                     sum += ( (Xfloattype) pixwt ) * \
-                            ( (Xfloattype) in[ off_in ] ); \
-                     wtsum += (Xfloattype) pixwt; \
-\
-/* If a variance estimate is required and it still seems possible to \
-   obtain one, then obtain the variance value associated with the \
-   current input pixel. */ \
-                     if ( Usevar ) { \
-                        if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                           var = in_var[ off_in ]; \
-\
-/* If necessary, test if this value is bad (if the data type is \
-   signed, also check that it is not negative). */ \
-                           if ( Usebad ) bad_var = ( var == badval ); \
-                           CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If any bad input variance value is obtained, we cannot generate a \
-   valid output variance estimate. Otherwise, form the sum needed to \
-   calculate this estimate. */ \
-                           if ( !( ( Xsigned ) || ( Usebad ) ) || \
-                                !bad_var ) { \
-                              sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
-                                         ( (Xfloattype) var ); \
-                           } \
-                        } \
-                     } \
-                  } \
-               } \
-            } \
-         } \
-      } \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the n-dimensional
-   case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Initialise offsets into the input array. Then loop to obtain each \
-   coordinate associated with the current output point. */ \
-   pixel = 0; \
-   off_in = 0; \
-   for ( idim = 0; idim < ndim_in; idim++ ) { \
-      xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the input grid, or is bad. If \
-   either is true, the corresponding output pixel value will be bad, \
-   so give up on this point. */ \
-      bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
-            ( xn == AST__BAD ); \
-      if ( bad ) break; \
-\
-/* If input bad pixels must be detected, then obtain the index along \
-   the current input grid dimension of the pixel which contains this \
-   coordinate and accumulate the pixel's offset from the start of the \
-   input array. */ \
-      if ( Usebad ) { \
-         pixel += stride[ idim ] * \
-                  ( (int) floor( xn + 0.5 ) - lbnd_in[ idim ] ); \
-      } \
-\
-/* Calculate the lowest and highest indices (in the current dimension) \
-   of the region of neighbouring pixels that will contribute to the \
-   interpolated result. Constrain these values to lie within the input \
-   grid. */ \
-      ixn = (int) floor( xn ); \
-      lo[ idim ] = MaxI( ixn - neighb + 1, lbnd_in[ idim ], status ); \
-      hi[ idim ] = MinI( ixn + neighb,     ubnd_in[ idim ], status ); \
-\
-/* Accumulate the offset (from the start of the input array) of the \
-   contributing pixel which has the lowest index in each dimension. */ \
-      off_in += stride[ idim ] * ( lo[ idim ] - lbnd_in[ idim ] ); \
-   } \
-\
-/* Once the input pixel which contains the required coordinates has \
-   been identified, test if it is bad, if necessary. */ \
-   if ( Usebad ) bad = bad || ( in[ pixel ] == badval ); \
-\
-/* If OK, loop to evaluate the kernel function which will be used to \
-   weight the contributions from surrounding pixels. */ \
-   if ( !bad ) { \
-      for ( idim = 0; idim < ndim_in; idim++ ) { \
-\
-/* Set up an array of pointers to locate kernel values (stored in the \
-   "kval" array) for each dimension. Initially, each of these pointers \
-   locates the first weight value which applies to the contributing \
-   pixel with the lowest index in each dimension. */ \
-         wtptr[ idim ] = kval + ( 2 * neighb * idim ); \
-\
-/* Also set up pointers to the last weight value in each dimension. */ \
-         wtptr_last[ idim ] = wtptr[ idim ] + ( hi[ idim ] - lo[ idim ] ); \
-\
-/* Loop to evaluate the kernel function along each dimension, storing \
-   the resulting values. The function's argument is the offset of the \
-   contributing pixel (along the relevant dimension) from the input \
-   point. */ \
-         xn = coords[ idim ][ point ]; \
-         for ( ixn = lo[ idim ]; ixn <= hi[ idim ]; ixn++ ) { \
-            if( kernel ) { \
-               ( *kernel )( (double) ixn - xn, params, flags, \
-                            wtptr[ idim ] + ixn - lo[ idim ], status ); \
-            } else { \
-               ( *fkernel )( (double) ixn - xn, params, flags, \
-                             wtptr[ idim ] + ixn - lo[ idim ] ); \
-            } \
-\
-/* Check for errors arising in the kernel function. */ \
-            if ( !astOK ) { \
-               kerror = 1; \
-               goto Kernel_Error_Nd; \
-            } \
-         } \
-      } \
-\
-/* Initialise, and loop over the neighbouring input pixels to obtain \
-   an interpolated value. */ \
-      sum = (Xfloattype) 0.0; \
-      wtsum = (Xfloattype) 0.0; \
-      if ( Usevar ) { \
-         sum_var = (Xfloattype) 0.0; \
-         bad_var = 0; \
-      } \
-      idim = ndim_in - 1; \
-      wtprod[ idim ] = 1.0; \
-      done = 0; \
-      do { \
-\
-/* Each contributing pixel is weighted by the product of the kernel \
-   weight factors evaluated along each input dimension. However, since \
-   we typically only change the index of one dimension at a time, we \
-   can avoid forming this product repeatedly by retaining an array of \
-   accumulated products for all higher dimensions. We need then only \
-   update the lower elements in this array, corresponding to those \
-   dimensions whose index has changed. We do this here, "idim" being \
-   the index of the most significant dimension to have changed. Note \
-   that on the first pass, all dimensions are considered changed, \
-   causing this array to be initialised. */ \
-         for ( ii = idim; ii >= 1; ii-- ) { \
-            wtprod[ ii - 1 ] = wtprod[ ii ] * *( wtptr[ ii ] ); \
-         } \
-\
-/* If necessary, test each pixel which may contribute to the result to \
-   see if it is bad. If not, obtain its weight from the accumulated \
-   product of weights. Also multiply by the weight for dimension zero, \
-   which is not included in the "wtprod" array). */ \
-         if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-            pixwt = wtprod[ 0 ] * *( wtptr[ 0 ] ); \
-\
-/* Form the weighted sums required for finding the interpolated \
-   value. */ \
-            sum += ( (Xfloattype) pixwt ) * ( (Xfloattype) in[ off_in ] ); \
-            wtsum += (Xfloattype) pixwt; \
-\
-/* If a variance estimate is required and it still seems possible to \
-   obtain one, then obtain the variance value associated with the \
-   current input pixel. */ \
-            if ( Usevar ) { \
-               if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                  var = in_var[ off_in ]; \
-\
-/* If necessary, test if this value is bad (if the data type is \
-   signed, also check that it is not negative). */ \
-                  if ( Usebad ) bad_var = ( var == badval ); \
-                  CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If any bad input variance value is obtained, we cannot generate a \
-   valid output variance estimate. Otherwise, form the sum needed to \
-   calculate this estimate. */ \
-                  if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                     sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
-                                ( (Xfloattype) var ); \
-                  } \
-               } \
-            } \
-         } \
-\
-/* Now update the weight value pointers and pixel offset to refer to \
-   the next input pixel to be considered. */ \
-         idim = 0; \
-         do { \
-\
-/* The first input dimension whose weight value pointer has not yet \
-   reached its final value has this pointer incremented, and the pixel \
-   offset into the input array is updated accordingly. */ \
-            if ( wtptr[ idim ] != wtptr_last[ idim ] ) { \
-               wtptr[ idim ]++; \
-               off_in += stride[ idim ]; \
-               break; \
-\
-/* Any earlier dimensions (which have reached the final pointer value) \
-   have this pointer returned to its lowest value. Again, the pixel \
-   offset into the input image is updated accordingly. */ \
-            } else { \
-               wtptr[ idim ] -= ( hi[ idim ] - lo[ idim ] ); \
-               off_in -= stride[ idim ] * \
-                               ( hi[ idim ] - lo[ idim ] ); \
-               done = ( ++idim == ndim_in ); \
-            } \
-         } while ( !done ); \
-      } while ( !done ); \
-   }
-
-/* This subsidiary macro calculates the interpolated output value (and
-   variance) from the sums over contributing pixels, checks the
-   results for validity, and assigns them to the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Usebad,Usevar,Nobad) \
-\
-/* If the output data value has not yet been flagged as bad, then \
-   check that an interpolated value can actually be produced.  First \
-   check that the sum of weights is not zero. */ \
-   if ( !bad ) { \
-      bad = ( wtsum == (Xfloattype) 0.0 ); \
-\
-/* If OK, calculate the interpolated value. Then, if the output data \
-   type is not floating point, check that this value will not overflow \
-   the available output range. */ \
-      if ( !bad ) { \
-         val = sum / wtsum; \
-         if ( !( Xfloating ) ) { \
-            bad = ( val <= lo_lim ) || ( val >= hi_lim ); \
-         } \
-      } \
-\
-/* If no interpolated data value can be produced, then no associated \
-   variance will be required either. */ \
-      if ( ( Usevar ) && bad ) bad_var = 1; \
-   } \
-\
-/* Now perform similar checks on the output variance value (if \
-   required). This time we check that the square of the sum of \
-   weights is not zero (since this might underflow before the sum of \
-   weights). Again we also check to prevent the result overflowing the \
-   output data type. */ \
-   if ( ( Usevar ) && !bad_var ) { \
-      wtsum_sq = wtsum * wtsum; \
-      bad_var = ( wtsum_sq == (Xfloattype) 0.0 ); \
-      if ( !bad_var ) { \
-         val_var = sum_var / wtsum_sq; \
-         if ( !( Xfloating ) ) { \
-            bad_var = ( val_var <= lo_lim ) || ( val_var >= hi_lim ); \
-         } \
-      } \
-   } \
-\
-/* Obtain the pixel offset into the output array. */ \
-   off_out = offset[ point ]; \
-\
-/* Assign a bad output value (and variance) if required and count it. */ \
-   if ( bad ) { \
-      if( !Nobad ) { \
-         out[ off_out ] = badval; \
-         if ( Usevar ) out_var[ off_out ] = badval; \
-      } \
-      result++; \
-\
-/* Otherwise, assign the interpolated value. If the output data type \
-   is floating point, the result can be stored directly, otherwise we \
-   must round to the nearest integer. */ \
-   } else { \
-      if ( Xfloating ) { \
-         out[ off_out ] = (Xtype) val; \
-      } else { \
-         out[ off_out ] = (Xtype) ( val + ( ( val >= (Xfloattype) 0.0 ) ? \
-                                            ( (Xfloattype) 0.5 ) : \
-                                            ( (Xfloattype) -0.5 ) ) ); \
-      } \
-\
-/* If a variance estimate is required but none can be obtained, then \
-   store a bad output variance value and count it. */ \
-      if ( Usevar ) { \
-         if ( bad_var ) { \
-            if( !Nobad ) { \
-               out_var[ off_out ] = badval; \
-            } \
-            result++; \
-\
-/* Otherwise, store the variance estimate, rounding to the nearest \
-   integer if necessary. */ \
-         } else { \
-            if ( Xfloating ) { \
-               out_var[ off_out ] = (Xtype) val_var; \
-            } else { \
-               out_var[ off_out ] = (Xtype) ( val_var + \
-                                          ( ( val_var >= (Xfloattype) 0.0 ) ? \
-                                            ( (Xfloattype) 0.5 ) : \
-                                            ( (Xfloattype) -0.5 ) ) ); \
-            } \
-         } \
-      } \
-   }
-
-/* These subsidiary macros define limits for range checking of results
-   before conversion to the final data type. For each data type code
-   <X>, HI_<X> gives the least positive floating point value which
-   just overflows that data type towards plus infinity, while LO_<X>
-   gives the least negative floating point value which just overflows
-   that data type towards minus infinity. Thus, a floating point value
-   must satisfy LO<flt_value<HI if overflow is not to occur when it is
-   converted to that data type.
-
-   The data type of each limit should be that of the smallest
-   precision floating point type which will accommodate the full range
-   of values that the target type may take. */
-   
-/* If <X> is a floating point type, the limits are not actually used,
-   but must be present to permit error-free compilation. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define HI_LD ( 0.0L )
-#define LO_LD ( 0.0L )
-#endif
-#define HI_D ( 0.0 )
-#define LO_D ( 0.0 )
-#define HI_F ( 0.0f )
-#define LO_F ( 0.0f )
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define HI_L   ( 0.5L + (long double) LONG_MAX )
-#define LO_L  ( -0.5L + (long double) LONG_MIN )
-#define HI_UL  ( 0.5L + (long double) ULONG_MAX )
-#define LO_UL ( -0.5L )
-#else
-#define HI_L   ( 0.5 + (double) LONG_MAX )
-#define LO_L  ( -0.5 + (double) LONG_MIN )
-#define HI_UL  ( 0.5 + (double) ULONG_MAX )
-#define LO_UL ( -0.5 )
-#endif
-#define HI_I   ( 0.5 + (double) INT_MAX )
-#define LO_I  ( -0.5 + (double) INT_MIN )
-#define HI_UI  ( 0.5 + (double) UINT_MAX )
-#define LO_UI ( -0.5 )
-#define HI_S   ( 0.5f + (float) SHRT_MAX )
-#define LO_S  ( -0.5f + (float) SHRT_MIN )
-#define HI_US  ( 0.5f + (float) USHRT_MAX )
-#define LO_US ( -0.5f )
-#define HI_B   ( 0.5f + (float) SCHAR_MAX )
-#define LO_B  ( -0.5f + (float) SCHAR_MIN )
-#define HI_UB  ( 0.5f + (float) UCHAR_MAX )
-#define LO_UB ( -0.5f )
-
-/* This subsidiary macro tests for negative variance values. This
-   check is required only for signed data types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-   bad_var = bad_var || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_KERNEL1(LD,long double,1,long double,1)
-MAKE_INTERPOLATE_KERNEL1(L,long int,0,long double,1)
-#else
-MAKE_INTERPOLATE_KERNEL1(L,long int,0,double,1)
-#endif     
-MAKE_INTERPOLATE_KERNEL1(D,double,1,double,1)
-MAKE_INTERPOLATE_KERNEL1(F,float,1,float,1)
-MAKE_INTERPOLATE_KERNEL1(I,int,0,double,1)
-MAKE_INTERPOLATE_KERNEL1(S,short int,0,float,1)
-MAKE_INTERPOLATE_KERNEL1(B,signed char,0,float,1)
-
-/* Re-define the macro for testing for negative variances to do
-   nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
-   required unsigned data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_KERNEL1(UL,unsigned long int,0,long double,0)
-#else
-MAKE_INTERPOLATE_KERNEL1(UL,unsigned long int,0,double,0)
-#endif     
-MAKE_INTERPOLATE_KERNEL1(UI,unsigned int,0,double,0)
-MAKE_INTERPOLATE_KERNEL1(US,unsigned short int,0,float,0)
-MAKE_INTERPOLATE_KERNEL1(UB,unsigned char,0,float,0)
-
-/* Undefine the macros used above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#undef HI_LD
-#undef LO_LD
-#endif
-#undef HI_D
-#undef LO_D
-#undef HI_F
-#undef LO_F
-#undef HI_L
-#undef LO_L
-#undef HI_UL
-#undef LO_UL
-#undef HI_I
-#undef LO_I
-#undef HI_UI
-#undef LO_UI
-#undef HI_S
-#undef LO_S
-#undef HI_US
-#undef LO_US
-#undef HI_B
-#undef LO_B
-#undef HI_UB
-#undef LO_UB
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_KERNEL1
-
-/*
-*  Name:
-*     InterpolateLinear<X>
-
-*  Purpose:
-*     Resample a data grid, using the linear interpolation scheme.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int InterpolateLinear<X>( int ndim_in,
-*                               const int *lbnd_in, const int *ubnd_in,
-*                               const <Xtype> *in, const <Xtype> *in_var,
-*                               int npoint, const int *offset,
-*                               const double *const *coords,
-*                               int flags, <Xtype> badval,
-*                               <Xtype> *out, <Xtype> *out_var )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which resample a rectangular input
-*     grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. Each output
-*     grid point may be mapped on to a position in the input grid in
-*     an arbitrary way. Where the positions given do not correspond
-*     with a pixel centre in the input grid, the interpolation scheme
-*     used is linear interpolation between the centres of the nearest
-*     neighbouring pixels in each dimension (there are 2 nearest
-*     neighbours in 1 dimension, 4 in 2 dimensions, 8 in 3 dimensions,
-*     etc.).
-
-*  Parameters:
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input grid, its extent along a particular
-*        (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-*        is zero-based). They also define the input grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be resampled (with an element
-*        for each pixel in the input grid). The numerical type of
-*        these data should match the function used, as given by the
-*        suffix on the function name. The storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-*        (i.e. Fortran array storage order).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of points at which the input grid is to be
-*        resampled.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each output point, this array should contain the zero-based
-*        offset in the output array(s) (i.e. the "out" and,
-*        optionally, the "out_var" arrays) at which the resampled
-*        output value(s) should be stored.
-*     coords
-*        An array of pointers to double, with "ndim_in"
-*        elements. Element "coords[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contains the values of coordinate number "coord" for each
-*        interpolation point. The value of coordinate number "coord"
-*        for interpolation point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices to be
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding output data (and
-*        variance) will be set to the value given by "badval" (unles the
-*        AST__NOBAD flag is specified).
-*     flags
-*        The bitwise OR of a set of flag values which control the
-*        operation of the function. Currently, only the flag
-*        AST__USEBAD is significant and indicates whether there are
-*        "bad" (i.e. missing) data in the input array(s) which must be
-*        recognised and propagated to the output array(s).  If this
-*        flag is not set, all input values are treated literally.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. Unles the AST__NOBAD flag is specified in "flags", the 
-*        same value will also be used to flag any output array elements 
-*        for which resampled values could not be obtained.  The output 
-*        arrays(s) may be flagged with this value whether or not the 
-*        AST__USEBAD flag is set (the function return value indicates 
-*        whether any such values have been produced).
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned. Note
-*        that details of how the output grid maps on to this array
-*        (e.g. the storage order, number of dimensions, etc.) is
-*        arbitrary and is specified entirely by means of the "offset"
-*        array. The "out" array should therefore contain sufficient
-*        elements to accommodate the "offset" values supplied.  There
-*        is no requirement that all elements of the "out" array should
-*        be assigned values, and any which are not addressed by the
-*        contents of the "offset" array will be left unchanged.
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given. It is addressed in
-*        exactly the same way (via the "offset" array) as the "out"
-*        array. The values returned are estimates of the statistical
-*        variance of the corresponding values in the "out" array, on
-*        the assumption that all errors in input grid values (in the
-*        "in" array) are statistically independent and that their
-*        variance estimates (in the "in_var" array) may simply be
-*        summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-
-*  Returned Value:
-*     The number of output grid points to which a data value (or a
-*     variance value if relevant) equal to "badval" has been assigned
-*     because no valid output value could be obtained.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*     - A value of zero will be returned if any of these functions is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-/* Define macros to implement the function for a specific data
-   type. */
-#define MAKE_INTERPOLATE_LINEAR(X,Xtype,Xfloating,Xfloattype,Xsigned) \
-static int InterpolateLinear##X( int ndim_in, \
-                                 const int *lbnd_in, const int *ubnd_in, \
-                                 const Xtype *in, const Xtype *in_var, \
-                                 int npoint, const int *offset, \
-                                 const double *const *coords, \
-                                 int flags, Xtype badval, \
-                                 Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
-   Xfloattype sum;               /* Weighted sum of pixel data values */ \
-   Xfloattype sum_var;           /* Weighted sum of pixel variance values */ \
-   Xfloattype val;               /* Value to be asigned to output pixel */ \
-   Xfloattype wtsum;             /* Sum of weight values */ \
-   Xtype var;                    /* Variance value */ \
-   double *frac_hi;              /* Pointer to array of weights */ \
-   double *frac_lo;              /* Pointer to array of weights */ \
-   double *wt;                   /* Pointer to array of weights */ \
-   double *wtprod;               /* Array of accumulated weights pointer */ \
-   double *xn_max;               /* Pointer to upper limits array (n-d) */ \
-   double *xn_min;               /* Pointer to lower limits array (n-d) */ \
-   double frac_hi_x;             /* Pixel weight (x dimension) */ \
-   double frac_hi_y;             /* Pixel weight (y dimension) */ \
-   double frac_lo_x;             /* Pixel weight (x dimension) */ \
-   double frac_lo_y;             /* Pixel weight (y dimension) */ \
-   double pixwt;                 /* Weight to apply to individual pixel */ \
-   double x;                     /* x coordinate value */ \
-   double xmax;                  /* x upper limit */ \
-   double xmin;                  /* x lower limit */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   double ymax;                  /* y upper limit */ \
-   double ymin;                  /* y lower limit */ \
-   int *dim;                     /* Pointer to array of pixel indices */ \
-   int *hi;                      /* Pointer to array of upper indices */ \
-   int *lo;                      /* Pointer to array of lower indices */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int bad_var;                  /* Output variance bad? */ \
-   int done;                     /* All pixel indices done? */ \
-   int hi_x;                     /* Upper pixel index (x dimension) */ \
-   int hi_y;                     /* Upper pixel index (y dimension) */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ii;                       /* Loop counter for weights */ \
-   int ix;                       /* Pixel index in input grid x dimension */ \
-   int ixn;                      /* Pixel index (n-d) */ \
-   int iy;                       /* Pixel index in input grid y dimension */ \
-   int lo_x;                     /* Lower pixel index (x dimension) */ \
-   int lo_y;                     /* Lower pixel index (y dimension) */ \
-   int nobad;                    /* Was the AST__NOBAD flag set? */ \
-   int off_in;                   /* Offset to input pixel */ \
-   int off_lo;                   /* Offset to "first" input pixel */ \
-   int off_out;                  /* Offset to output pixel */ \
-   int pixel;                    /* Offset to input pixel containing point */ \
-   int point;                    /* Loop counter for output points */ \
-   int result;                   /* Result value to return */ \
-   int s;                        /* Temporary variable for strides */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int ystride;                  /* Stride along input grid y dimension */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
-   messages from dumb compilers. */ \
-   sum = 0; \
-   sum_var = 0; \
-   wtsum = 0; \
-   bad = 0; \
-   bad_var = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-   nobad = flags & AST__NOBAD; \
-   usebad = flags & AST__USEBAD; \
-   usevar = in_var && out_var; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   if ( ndim_in == 1 ) { \
-\
-/* Calculate the coordinate limits of the input grid. */ \
-      xmin = (double) lbnd_in[ 0 ] - 0.5; \
-      xmax = (double) ubnd_in[ 0 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Four more cases as above, but this time with the AST__NOBAD flag \
-   un-set. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   } else if ( ndim_in == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
-      ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
-   dimension. */ \
-      xmin = (double) lbnd_in[ 0 ] - 0.5; \
-      xmax = (double) ubnd_in[ 0 ] + 0.5; \
-      ymin = (double) lbnd_in[ 1 ] - 0.5; \
-      ymax = (double) ubnd_in[ 1 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Four more case as above, but without the AST__NOBAD flag. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                                         0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-   } else { \
-\
-/* Allocate workspace. */ \
-      dim = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      frac_hi = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      frac_lo = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      hi = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      lo = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      wt = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      wtprod = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
-         for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
-            stride[ idim ] = s; \
-            s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
-   dimension. */ \
-            xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
-            xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
-         } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-         if ( nobad ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,1,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,1,0,1) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,0,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,0,0,1) \
-                  } \
-               } \
-            } \
-\
-/* Four more case as above, but without the AST__NOBAD flag. */ \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,1,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,1,0,0) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,0,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype, \
-                                            Xsigned,0,0,0) \
-                  } \
-               } \
-            } \
-         } \
-      } \
-\
-/* Free the workspace. */ \
-      dim = astFree( dim ); \
-      frac_hi = astFree( frac_hi ); \
-      frac_lo = astFree( frac_lo ); \
-      hi = astFree( hi ); \
-      lo = astFree( lo ); \
-      stride = astFree( stride ); \
-      wt = astFree( wt ); \
-      wtprod = astFree( wtprod ); \
-      xn_max = astFree( xn_max ); \
-      xn_min = astFree( xn_min ); \
-   } \
-\
-/* If an error has occurred, clear the returned result. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 1-dimensional
-   case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the input grid. Also test if it is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offset along \
-   the input grid x dimension of the input pixel which contains the \
-   current coordinate and calculate this pixel's offset from the start \
-   of the input array. */ \
-      if ( Usebad ) { \
-         pixel = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-\
-/* Test if the pixel is bad. */ \
-         bad = ( in[ pixel ] == badval ); \
-      } \
-\
-/* If OK, obtain the indices along the input grid x dimension of the \
-   two adjacent pixels which will contribute to the interpolated \
-   result. Also obtain the fractional weight to be applied to each of \
-   these pixels. */ \
-      if ( !bad ) { \
-         lo_x = (int) floor( x ); \
-         hi_x = lo_x + 1; \
-         frac_lo_x = (double) hi_x - x; \
-         frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Obtain the offset within the input array of the first pixel to be \
-   used for interpolation (the one with the smaller index). */ \
-         off_lo = lo_x - lbnd_in[ 0 ]; \
-\
-/* Initialise sums for forming the interpolated result. */ \
-         sum = (Xfloattype) 0.0; \
-         wtsum = (Xfloattype) 0.0; \
-         if ( Usevar ) { \
-            sum_var = (Xfloattype) 0.0; \
-            if ( ( Xsigned ) || ( Usebad ) ) bad_var = 0; \
-         } \
-\
-/* For each of the two pixels which may contribute to the result, \
-   test if the pixel index lies within the input grid. Where it does, \
-   accumulate the sums required for forming the interpolated \
-   result. In each case, we supply the pixel's offset within the input \
-   array and the weight to be applied to it. */ \
-         if ( lo_x >= lbnd_in[ 0 ] ) { \
-            FORM_LINEAR_INTERPOLATION_SUM(off_lo,frac_lo_x,Xtype, \
-                                          Xfloattype,Xsigned,Usebad,Usevar) \
-         } \
-         if ( hi_x <= ubnd_in[ 0 ] ) { \
-            FORM_LINEAR_INTERPOLATION_SUM(off_lo + 1,frac_hi_x,Xtype, \
-                                          Xfloattype,Xsigned,Usebad,Usevar) \
-         } \
-      } \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 2-dimensional
-   case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the input grid. Also test if it is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If OK, then similarly obtain and test the y coordinate. */ \
-      y = coords[ 1 ][ point ]; \
-      bad = ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
-      if ( !bad ) { \
-\
-/* If input bad pixels must be detected, then obtain the offsets along \
-   each input grid dimension of the input pixel which contains the \
-   current coordinates. */ \
-         if ( Usebad ) { \
-            ix = (int) floor( x + 0.5 ); \
-            iy = (int) floor( y + 0.5 ); \
-\
-/* Calculate this pixel's offset from the start of the input array. */ \
-            pixel = ix - lbnd_in[ 0 ] + ystride * ( iy - lbnd_in[ 1 ] ); \
-\
-/* Test if the pixel is bad. */ \
-            bad = ( in[ pixel ] == badval ); \
-         } \
-\
-/* If OK, obtain the indices along the input grid x dimension of the \
-   two adjacent pixels which will contribute to the interpolated \
-   result. Also obtain the fractional weight to be applied to each of \
-   these pixels. */ \
-         if ( !bad ) { \
-            lo_x = (int) floor( x ); \
-            hi_x = lo_x + 1; \
-            frac_lo_x = (double) hi_x - x; \
-            frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Repeat this process for the y dimension. */ \
-            lo_y = (int) floor( y ); \
-            hi_y = lo_y + 1; \
-            frac_lo_y = (double) hi_y - y; \
-            frac_hi_y = 1.0 - frac_lo_y; \
-\
-/* Obtain the offset within the input array of the first pixel to be \
-   used for interpolation (the one with the smaller index along both \
-   dimensions). */ \
-            off_lo = lo_x - lbnd_in[ 0 ] + ystride * ( lo_y - lbnd_in[ 1 ] ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
-            sum = (Xfloattype) 0.0; \
-            wtsum = (Xfloattype) 0.0; \
-            if ( Usevar ) { \
-               sum_var = (Xfloattype) 0.0; \
-               if ( ( Xsigned ) || ( Usebad ) ) bad_var = 0; \
-            } \
-\
-/* For each of the four pixels which may contribute to the result, \
-   test if the pixel indices lie within the input grid. Where they do, \
-   accumulate the sums required for forming the interpolated \
-   result. In each case, we supply the pixel's offset within the input \
-   array and the weight to be applied to it. */ \
-            if ( lo_y >= lbnd_in[ 1 ] ) { \
-               if ( lo_x >= lbnd_in[ 0 ] ) { \
-                  FORM_LINEAR_INTERPOLATION_SUM(off_lo, \
-                                                frac_lo_x * frac_lo_y,Xtype, \
-                                                Xfloattype, Xsigned, \
-                                                Usebad,Usevar) \
-               } \
-               if ( hi_x <= ubnd_in[ 0 ] ) { \
-                  FORM_LINEAR_INTERPOLATION_SUM(off_lo + 1, \
-                                                frac_hi_x * frac_lo_y,Xtype, \
-                                                Xfloattype,Xsigned, \
-                                                Usebad,Usevar) \
-               } \
-            } \
-            if ( hi_y <= ubnd_in[ 1 ] ) { \
-               if ( lo_x >= lbnd_in[ 0 ] ) { \
-                  FORM_LINEAR_INTERPOLATION_SUM(off_lo + ystride, \
-                                                frac_lo_x * frac_hi_y,Xtype, \
-                                                Xfloattype,Xsigned, \
-                                                Usebad,Usevar) \
-               } \
-               if ( hi_x <= ubnd_in[ 0 ] ) { \
-                  FORM_LINEAR_INTERPOLATION_SUM(off_lo + ystride + 1, \
-                                                frac_hi_x * frac_hi_y,Xtype, \
-                                                Xfloattype,Xsigned, \
-                                                Usebad,Usevar) \
-               } \
-            } \
-         } \
-      } \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the n-dimensional
-   case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Initialise offsets into the input array. Then loop to obtain each
-   coordinate associated with the current output point. */ \
-   off_in = 0; \
-   if ( Usebad ) pixel = 0; \
-   for ( idim = 0; idim < ndim_in; idim++ ) { \
-      xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the input grid.  Also test if \
-   it is bad. If either is true, the corresponding output pixel value \
-   will be bad, so give up on this point. */ \
-      bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
-            ( xn == AST__BAD ); \
-      if ( bad ) break; \
-\
-/* If input bad pixels must be detected, obtain the index along the \
-   current input grid dimension of the pixel which contains this \
-   coordinate and accumulate the pixel's offset from the start of the \
-   input array. */ \
-      if ( Usebad ) { \
-         pixel += stride[ idim ] * \
-                  ( (int) floor( xn + 0.5 ) - lbnd_in[ idim ] ); \
-      } \
-\
-/* Obtain the indices along the current dimension of the input grid of \
-   the two (usually adjacent) pixels which will contribute to the \
-   output value. If necessary, however, restrict each index to ensure \
-   it does not lie outside the input grid. Also calculate the \
-   fractional weight to be given to each pixel in order to interpolate \
-   linearly between them. */ \
-      ixn = (int) floor( xn ); \
-      lo[ idim ] = MaxI( ixn, lbnd_in[ idim ], status ); \
-      hi[ idim ] = MinI( ixn + 1, ubnd_in[ idim ], status ); \
-      frac_lo[ idim ] = 1.0 - fabs( xn - (double) lo[ idim ] ); \
-      frac_hi[ idim ] = 1.0 - fabs( xn - (double) hi[ idim ] ); \
-\
-/* Store the lower index involved in interpolation along each \
-   dimension and accumulate the offset from the start of the input \
-   array of the pixel which has these indices. */ \
-      dim[ idim ] = lo[ idim ]; \
-      off_in += stride[ idim ] * ( lo[ idim ] - lbnd_in[ idim ] ); \
-\
-/* Also store the fractional weight associated with the lower pixel \
-   along each dimension. */ \
-      wt[ idim ] = frac_lo[ idim ]; \
-   } \
-\
-/* If the input pixel which contains the required coordinates has \
-   been identified, test if it is bad. */ \
-   if ( Usebad ) bad = bad || ( in[ pixel ] == badval ); \
-\
-/* If OK, initialise and loop over adjacent input pixels to obtain an \
-   interpolated value. */ \
-   if ( !bad ) { \
-      sum = (Xfloattype) 0.0; \
-      wtsum = (Xfloattype) 0.0; \
-      if ( Usevar ) { \
-         sum_var = (Xfloattype) 0.0; \
-         if ( ( Xsigned ) || ( Usebad ) ) bad_var = 0; \
-      } \
-      idim = ndim_in - 1; \
-      wtprod[ idim ] = 1.0; \
-      done = 0; \
-      do { \
-\
-/* Each contributing pixel is weighted by the product of the weights \
-   which account for the displacement of its centre from the required \
-   position along each dimension. However, since we typically only \
-   change the index of one dimension at a time, we can avoid forming \
-   this product repeatedly by retaining an array of accumulated weight \
-   products for all higher dimensions. We need then only update the \
-   lower elements in this array, corresponding to those dimensions \
-   whose index has changed. We do this here, "idim" being the index of \
-   the most significant dimension to have changed. Note that on the \
-   first pass, all dimensions are considered changed, causing this \
-   array to be initialised. */ \
-         for ( ii = idim; ii >= 1; ii-- ) { \
-            wtprod[ ii - 1 ] = wtprod[ ii ] * wt[ ii ]; \
-         } \
-\
-/* Accumulate the sums required for forming the interpolated \
-   result. We supply the pixel's offset within the input array and the \
-   weight to be applied to it. The pixel weight is formed by including \
-   the weight factor for dimension zero, since this is not included in \
-   the "wtprod" array. */ \
-         FORM_LINEAR_INTERPOLATION_SUM(off_in,wtprod[ 0 ] * wt[ 0 ], \
-                                       Xtype,Xfloattype,Xsigned, \
-                                       Usebad,Usevar) \
-\
-/* Now update the indices, offset and weight factors to refer to the \
-   next input pixel to be considered. */ \
-         idim = 0; \
-         do { \
-\
-/* The first input dimension which still refers to the pixel with the \
-   lower of the two possible indices is switched to refer to the other \
-   pixel (with the higher index). The offset into the input array and \
-   the fractional weight factor for this dimension are also updated \
-   accordingly. */ \
-            if ( dim[ idim ] != hi[ idim ] ) { \
-               dim[ idim ] = hi[ idim ]; \
-               off_in += stride[ idim ]; \
-               wt[ idim ] = frac_hi[ idim ]; \
-               break; \
-\
-/* Any earlier dimensions (referring to the higher index) are switched \
-   back to the lower index, if not already there, before going on to \
-   consider the next dimension. (This process is the same as \
-   incrementing a binary number and propagating overflows up through \
-   successive digits, except that dimensions where the "lo" and "hi" \
-   values are the same can only take one value.) The process stops at \
-   the first attempt to return the final dimension to the lower \
-   index. */ \
-            } else { \
-               if ( dim[ idim ] != lo[ idim ] ) { \
-                  dim[ idim ] = lo[ idim ]; \
-                  off_in -= stride[ idim ]; \
-                  wt[ idim ] = frac_lo[ idim ]; \
-               } \
-               done = ( ++idim == ndim_in ); \
-            } \
-         } while ( !done ); \
-      } while ( !done ); \
-   }
-
-/* This subsidiary macro adds the contribution from a specified input
-   pixel to the accumulated sums for forming the linearly interpolated
-   value. */
-#define FORM_LINEAR_INTERPOLATION_SUM(off,wt,Xtype,Xfloattype,Xsigned, \
-                                      Usebad,Usevar) \
-\
-/* Obtain the offset of the input pixel to use. */ \
-   off_in = ( off ); \
-\
-/* If necessary, test if this pixel is bad. If not, then obtain the \
-   weight to apply to it. */ \
-   if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-      pixwt = ( wt ); \
-\
-/* Increment the weighted sum of pixel values and the sum of weights. */ \
-      sum += ( (Xfloattype) in[ off_in ] ) * ( (Xfloattype) pixwt ); \
-      wtsum += (Xfloattype) pixwt; \
-\
-/* If an output variance estimate is to be generated, and it still \
-   seems possible to produce one, then obtain the input variance \
-   value. */ \
-      if ( Usevar ) { \
-         if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-            var = in_var[ off_in ]; \
-\
-/* Test if the variance value is bad (if the data type is signed, also \
-   check that it is not negative). */ \
-            if ( Usebad ) bad_var = ( var == badval ); \
-            CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If OK, increment the weighted sum of variance values. */ \
-            if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-               sum_var += ( (Xfloattype) ( pixwt * pixwt ) ) * \
-                          ( (Xfloattype) var ); \
-            } \
-         } \
-      } \
-   }
-
-/* This subsidiary macro calculates the interpolated output value (and
-   variance) from the sums over contributing pixels and assigns them
-   to the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Xsigned, \
-                               Usebad,Usevar,Nobad) \
-\
-/* Obtain the pixel offset into the output array. */ \
-   off_out = offset[ point ]; \
-\
-/* Assign a bad output value (and variance) if required and count it. */ \
-   if ( bad ) { \
-      if( !Nobad ) { \
-         out[ off_out ] = badval; \
-         if ( Usevar ) out_var[ off_out ] = badval; \
-      } \
-      result++; \
-\
-/* Otherwise, calculate the interpolated value. If the output data \
-   type is floating point, this result can be stored directly, \
-   otherwise we must round to the nearest integer. */ \
-   } else { \
-      val = sum / wtsum; \
-      if ( Xfloating ) { \
-         out[ off_out ] = (Xtype) val; \
-      } else { \
-         out[ off_out ] = (Xtype) ( val + ( ( val >= (Xfloattype) 0.0 ) ? \
-                                            ( (Xfloattype) 0.5 ) : \
-                                            ( (Xfloattype) -0.5 ) ) ); \
-      } \
-\
-/* If a variance estimate is required but none can be obtained, then \
-   store a bad output variance value and count it. */ \
-      if ( Usevar ) { \
-         if ( ( ( Xsigned ) || ( Usebad ) ) && bad_var ) { \
-            if( !Nobad ) out_var[ off_out ] = badval; \
-            result++; \
-\
-/* Otherwise, calculate the variance estimate and store it, rounding \
-   to the nearest integer if necessary. */ \
-         } else { \
-            val = sum_var / ( wtsum * wtsum ); \
-            if ( Xfloating ) { \
-               out_var[ off_out ] = (Xtype) val; \
-            } else { \
-               out_var[ off_out ] = (Xtype) ( val + \
-                                            ( ( val >= (Xfloattype) 0.0 ) ? \
-                                              ( (Xfloattype) 0.5 ) : \
-                                              ( (Xfloattype) -0.5 ) ) ); \
-            } \
-         } \
-      } \
-   }
-
-/* This subsidiary macro tests for negative variance values in the
-   macros above. This check is required only for signed data types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-   bad_var = bad_var || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_LINEAR(LD,long double,1,long double,1)
-MAKE_INTERPOLATE_LINEAR(L,long int,0,long double,1)
-#else
-MAKE_INTERPOLATE_LINEAR(L,long int,0,double,1)
-#endif     
-MAKE_INTERPOLATE_LINEAR(D,double,1,double,1)
-MAKE_INTERPOLATE_LINEAR(F,float,1,float,1)
-MAKE_INTERPOLATE_LINEAR(I,int,0,double,1)
-MAKE_INTERPOLATE_LINEAR(S,short int,0,float,1)
-MAKE_INTERPOLATE_LINEAR(B,signed char,0,float,1)
-
-/* Re-define the macro for testing for negative variances to do
-   nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
-   required unsigned data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_LINEAR(UL,unsigned long int,0,long double,0)
-#else
-MAKE_INTERPOLATE_LINEAR(UL,unsigned long int,0,double,0)
-#endif     
-MAKE_INTERPOLATE_LINEAR(UI,unsigned int,0,double,0)
-MAKE_INTERPOLATE_LINEAR(US,unsigned short int,0,float,0)
-MAKE_INTERPOLATE_LINEAR(UB,unsigned char,0,float,0)
-
-/* Undefine the macros uxsed above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef FORM_LINEAR_INTERPOLATION_SUM
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_LINEAR
-
-/*
-*  Name:
-*     InterpolateNearest<X>
-
-*  Purpose:
-*     Resample a data grid, using the nearest-pixel interpolation scheme.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int InterpolateNearest<X>( int ndim_in,
-*                                const int *lbnd_in, const int *ubnd_in,
-*                                const <Xtype> *in, const <Xtype> *in_var,
-*                                int npoint, const int *offset,
-*                                const double *const *coords,
-*                                int flags, <Xtype> badval,
-*                                <Xtype> *out, <Xtype> *out_var )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which resample a rectangular input
-*     grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. Each output
-*     grid point may be mapped on to a position in the input grid in
-*     an arbitrary way. Where the positions given do not correspond
-*     with a pixel centre in the input grid, the interpolation scheme
-*     used is simply to select the nearest pixel (i.e. the one whose
-*     bounds contain the supplied position).
-
-*  Parameters:
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input grid, its extent along a particular
-*        (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-*        is zero-based). They also define the input grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be resampled (with an element
-*        for each pixel in the input grid). The numerical type of
-*        these data should match the function used, as given by the
-*        suffix on the function name. The storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-*        (i.e. Fortran array storage order).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of points at which the input grid is to be
-*        resampled.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each output point, this array should contain the zero-based
-*        offset in the output array(s) (i.e. the "out" and,
-*        optionally, the "out_var" arrays) at which the resampled
-*        output value(s) should be stored.
-*     coords
-*        An array of pointers to double, with "ndim_in"
-*        elements. Element "coords[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contains the values of coordinate number "coord" for each
-*        interpolation point. The value of coordinate number "coord"
-*        for interpolation point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices to be
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding output data (and
-*        variance) will be set to the value given by "badval" (unles the
-*        AST__NOBAD flag is specified).
-*     flags
-*        The bitwise OR of a set of flag values which control the
-*        operation of the function. Currently, only the flag
-*        AST__USEBAD is significant and indicates whether there are
-*        "bad" (i.e. missing) data in the input array(s) which must be
-*        recognised and propagated to the output array(s).  If this
-*        flag is not set, all input values are treated literally.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. Unles the AST__NOBAD flag is specified in "flags", the 
-*        same value will also be used to flag any output array elements 
-*        for which resampled values could not be obtained.  The output 
-*        arrays(s) may be flagged with this value whether or not the 
-*        AST__USEBAD flag is set (the function return value indicates 
-*        whether any such values have been produced).
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned. Note
-*        that details of how the output grid maps on to this array
-*        (e.g. the storage order, number of dimensions, etc.) is
-*        arbitrary and is specified entirely by means of the "offset"
-*        array. The "out" array should therefore contain sufficient
-*        elements to accommodate the "offset" values supplied.  There
-*        is no requirement that all elements of the "out" array should
-*        be assigned values, and any which are not addressed by the
-*        contents of the "offset" array will be left unchanged.
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given. It is addressed in
-*        exactly the same way (via the "offset" array) as the "out"
-*        array. The values returned are estimates of the statistical
-*        variance of the corresponding values in the "out" array, on
-*        the assumption that all errors in input grid values (in the
-*        "in" array) are statistically independent and that their
-*        variance estimates (in the "in_var" array) may simply be
-*        summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-
-*  Returned Value:
-*     The number of output grid points to which a data value (or a
-*     variance value if relevant) equal to "badval" has been assigned
-*     because no valid output value could be obtained.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*     - A value of zero will be returned if any of these functions is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_INTERPOLATE_NEAREST(X,Xtype,Xsigned) \
-static int InterpolateNearest##X( int ndim_in, \
-                                  const int *lbnd_in, const int *ubnd_in, \
-                                  const Xtype *in, const Xtype *in_var, \
-                                  int npoint, const int *offset, \
-                                  const double *const *coords, \
-                                  int flags, Xtype badval, \
-                                  Xtype *out, Xtype *out_var, int *status ) { \
-\
-/* Local Variables: */ \
-   Xtype var;                    /* Variance value */ \
-   double *xn_max;               /* Pointer to upper limits array (n-d) */ \
-   double *xn_min;               /* Pointer to lower limits array (n-d) */ \
-   double x;                     /* x coordinate value */ \
-   double xmax;                  /* x upper limit */ \
-   double xmin;                  /* x lower limit */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   double ymax;                  /* y upper limit */ \
-   double ymin;                  /* y lower limit */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ix;                       /* Number of pixels offset in x direction */ \
-   int ixn;                      /* Number of pixels offset (n-d) */ \
-   int iy;                       /* Number of pixels offset in y direction */ \
-   int nobad;                    /* Was the AST__NOBAD flag set? */ \
-   int off_in;                   /* Pixel offset into input array */ \
-   int off_out;                  /* Pixel offset into output array */ \
-   int point;                    /* Loop counter for output points */ \
-   int result;                   /* Returned result value */ \
-   int s;                        /* Temporary variable for strides */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int ystride;                  /* Stride along input grid y direction */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
-   messages from dumb compilers. */ \
-   bad = 0; \
-   off_in = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-   nobad = flags & AST__NOBAD; \
-   usebad = flags & AST__USEBAD; \
-   usevar = in_var && out_var; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   if ( ndim_in == 1 ) { \
-\
-/* Calculate the coordinate limits of the input array. */ \
-      xmin = (double) lbnd_in[ 0 ] - 0.5; \
-      xmax = (double) ubnd_in[ 0 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Four more cases as above, but without the AST__NOBAD flag. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   } else if ( ndim_in == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
-      ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the input array in each \
-   dimension. */ \
-      xmin = (double) lbnd_in[ 0 ] - 0.5; \
-      xmax = (double) ubnd_in[ 0 ] + 0.5; \
-      ymin = (double) lbnd_in[ 1 ] - 0.5; \
-      ymax = (double) ubnd_in[ 1 ] + 0.5; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Four more cases as above, but without the AST__NOBAD flag. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-   } else { \
-\
-/* Allocate workspace. */ \
-      stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
-         for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
-            stride[ idim ] = s; \
-            s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
-   dimension. */ \
-            xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
-            xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
-         } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-         if ( nobad ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,1) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,1) \
-                  } \
-               } \
-            } \
-\
-/* Another 4 cases as above, but without the AST__NOBAD flag. */ \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,1,0,0) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,0,0,0) \
-                  } \
-               } \
-            } \
-         } \
-      } \
-\
-/* Free the workspace. */ \
-      stride = astFree( stride ); \
-      xn_max = astFree( xn_max ); \
-      xn_min = astFree( xn_min ); \
-   } \
-\
-/* If an error has occurred, clear the returned result. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 1-dimensional
-   case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the input grid, or is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If not, then obtain the offset within the input grid of the pixel \
-   which contains the current point. */ \
-      off_in = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-\
-/* If necessary, test if the input pixel is bad. */ \
-      if ( Usebad ) bad = ( in[ off_in ] == badval ); \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 2-dimensional
-   case. */
-#define ASSEMBLE_INPUT_2D(X,Xtype,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the input grid, or is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If not, then similarly obtain and test the y coordinate. */ \
-      y = coords[ 1 ][ point ]; \
-      bad = ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
-      if ( !bad ) { \
-\
-/* Obtain the offsets along each input grid dimension of the input \
-   pixel which contains the current point. */ \
-         ix = (int) floor( x + 0.5 ) - lbnd_in[ 0 ]; \
-         iy = (int) floor( y + 0.5 ) - lbnd_in[ 1 ]; \
-\
-/* Calculate this pixel's offset from the start of the input array. */ \
-         off_in = ix + ystride * iy; \
-\
-/* If necessary, test if the input pixel is bad. */ \
-         if ( Usebad ) bad = ( in[ off_in ] == badval ); \
-      } \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the n-dimensional
-   case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Usebad,Usevar) \
-\
-/* Initialise the offset into the input array. Then loop to obtain \
-   each coordinate associated with the current output point. */ \
-   off_in = 0; \
-   for ( idim = 0; idim < ndim_in; idim++ ) { \
-      xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the input grid, or is bad. If \
-   either is true, the corresponding output pixel value will be bad, \
-   so give up on this point. */ \
-      bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
-            ( xn == AST__BAD ); \
-      if ( bad ) break; \
-\
-/* Obtain the offset along the current input grid dimension of the \
-   input pixel which contains the current point. */ \
-      ixn = (int) floor( xn + 0.5 ) - lbnd_in[ idim ]; \
-\
-/* Accumulate this pixel's offset from the start of the input \
-   array. */ \
-      off_in += ixn * stride[ idim ]; \
-   } \
-\
-/* Once the required input pixel has been located, test if it is \
-   bad, if necessary. */ \
-   if ( Usebad ) bad = bad || ( in[ off_in ] == badval );
-
-/* This subsidiary macro assigns the output value (and variance) to
-   the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xsigned,Usebad,Usevar,Nobad) \
-\
-/* Obtain the pixel offset into the output array. */ \
-   off_out = offset[ point ]; \
-\
-/* If the input data value is bad, assign a bad output value (and \
-   variance, if required) and count it. */ \
-   if ( bad ) { \
-      if( !Nobad ) { \
-         out[ off_out ] = badval; \
-         if ( Usevar ) out_var[ off_out ] = badval; \
-      } \
-      result++; \
-\
-/* Otherwise, assign the value obtained from the input grid. */ \
-   } else { \
-      out[ off_out ] = in[ off_in ]; \
-\
-/* If required, obtain the associated variance value. If necessary, \
-   test if it is bad (if the data type is signed, also check that it \
-   is not negative). */ \
-      if ( Usevar ) { \
-         var = in_var[ off_in ]; \
-         if ( Usebad ) bad = ( var == badval ); \
-         CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If the variance value can be bad, and is, then store a bad value in \
-   the output array and count it. Otherwise, store the variance \
-   value. */ \
-         if ( ( ( Xsigned ) || ( Usebad ) ) && bad ) { \
-            if( !Nobad ) out_var[ off_out ] = badval; \
-            result++; \
-         } else { \
-            out_var[ off_out ] = var; \
-         } \
-      } \
-   }
-
-/* This subsidiary macro tests for negative variance values in the
-   macros above.  This check is required only for signed data
-   types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-   bad = bad || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_NEAREST(LD,long double,1)
-#endif
-MAKE_INTERPOLATE_NEAREST(D,double,1)
-MAKE_INTERPOLATE_NEAREST(F,float,1)
-MAKE_INTERPOLATE_NEAREST(L,long int,1)
-MAKE_INTERPOLATE_NEAREST(I,int,1)
-MAKE_INTERPOLATE_NEAREST(S,short int,1)
-MAKE_INTERPOLATE_NEAREST(B,signed char,1)
-
-/* Re-define the macro for testing for negative variances to do
-   nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
-   required unsigned data type. */
-MAKE_INTERPOLATE_NEAREST(UL,unsigned long int,0)
-MAKE_INTERPOLATE_NEAREST(UI,unsigned int,0)
-MAKE_INTERPOLATE_NEAREST(US,unsigned short int,0)
-MAKE_INTERPOLATE_NEAREST(UB,unsigned char,0)
-
-/* Undefine the macros used above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_NEAREST
-
-/*
-*  Name:
-*     InterpolateBlockAverage<X>
-
-*  Purpose:
-*     Resample a data grid, using multidimensional block averaging.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void InterpolateBlockAverage<X>( int ndim_in,
-*                                      const int lbnd_in[], 
-*                                      const int ubnd_in[],
-*                                      const <Xtype> in[], 
-*                                      const <Xtype> in_var[],
-*                                      int npoint, const int offset[],
-*                                      const double *const coords[],
-*                                      const double params[], int flags,
-*                                      <Xtype> badval, <Xtype> *out, 
-*                                      <Xtype> *out_var, int *nbad )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which resample a rectangular input
-*     grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. To generate 
-*     an output grid pixel, a block average is taken over an ndim-
-*     dimensional hypercube of pixels in the input grid.  If variances
-*     are being used then the input pixels will be weighted according
-*     to the reciprocals of the corresponding variance values, and 
-*     input pixels without a valid variance will be ignored;
-*     otherwise an unweighted average will be taken over
-*     all non-bad pixels in the cube.  The size of the cube over which
-*     the average is taken is determined by the first element of the 
-*     params array.
-*
-*     This "interpolation" scheme is appropriate where an input grid 
-*     is to be resampled onto a much coarser output grid.
-
-*  Parameters:
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input grid, its extent along a particular
-*        (i'th) dimension being ubnd_in[i]-lbnd_in[i]+1 (assuming "i"
-*        is zero-based). They also define the input grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be resampled (with an element
-*        for each pixel in the input grid). The numerical type of
-*        these data should match the function used, as given by the
-*        suffix on the function name. The storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-*        (i.e. Fortran array storage order).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of points at which the input grid is to be
-*        resampled.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each output point, this array should contain the zero-based
-*        offset in the output array(s) (i.e. the "out" and,
-*        optionally, the "out_var" arrays) at which the resampled
-*        output value(s) should be stored.
-*     coords
-*        An array of pointers to double, with "ndim_in"
-*        elements. Element "coords[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contains the values of coordinate number "coord" for each
-*        interpolation point. The value of coordinate number "coord"
-*        for interpolation point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices to be
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding output data (and
-*        variance) will be set to the value given by "badval" (unles the
-*        AST__NOBAD flag is specified).
-*     params
-*        A pointer to an array of doubles giving further information
-*        about how the resampling is to proceed.  Only the first 
-*        element is significant; the nearest integer to this gives 
-*        the number of pixels on either side of the central input
-*        grid pixel to use in each dimension.  Therefore 
-*        (1 + 2*params[0])**ndim_in pixels will be averaged over to
-*        generate each output pixel.
-*     flags
-*        The bitwise OR of a set of flag values which control the
-*        operation of the function. Currently, only the flag
-*        AST__USEBAD is significant and indicates whether there are
-*        "bad" (i.e. missing) data in the input array(s) which must be
-*        recognised and propagated to the output array(s).  If this
-*        flag is not set, all input values are treated literally.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. Unles the AST__NOBAD flag is specified in "flags", the 
-*        same value will also be used to flag any output array elements 
-*        for which resampled values could not be obtained.  The output 
-*        arrays(s) may be flagged with this value whether or not the 
-*        AST__USEBAD flag is set (the function return value indicates 
-*        whether any such values have been produced).
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned. Note
-*        that details of how the output grid maps on to this array
-*        (e.g. the storage order, number of dimensions, etc.) is
-*        arbitrary and is specified entirely by means of the "offset"
-*        array. The "out" array should therefore contain sufficient
-*        elements to accommodate the "offset" values supplied.  There
-*        is no requirement that all elements of the "out" array should
-*        be assigned values, and any which are not addressed by the
-*        contents of the "offset" array will be left unchanged.
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given. It is addressed in
-*        exactly the same way (via the "offset" array) as the "out"
-*        array. The values returned are estimates of the statistical
-*        variance of the corresponding values in the "out" array, on
-*        the assumption that all errors in input grid values (in the
-*        "in" array) are statistically independent and that their
-*        variance estimates (in the "in_var" array) may simply be
-*        summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     nbad
-*        Pointer to an int in which to return the number of
-*        interpolation points at which an output data value (and/or a
-*        variance value if relevant) equal to "badval" has been 
-*        assigned because no valid interpolated value could be
-*        obtained.  The maximum value that will be returned is
-*        "npoint" and the minimum is zero (indicating that all output
-*        values were successfully obtained).
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_INTERPOLATE_BLOCKAVE(X,Xtype,Xfloating,Xfloattype,Xsigned) \
-static void InterpolateBlockAverage##X( int ndim_in, \
-                                        const int lbnd_in[], \
-                                        const int ubnd_in[], \
-                                        const Xtype in[], \
-                                        const Xtype in_var[], \
-                                        int npoint, const int offset[], \
-                                        const double *const coords[], \
-                                        const double params[], int flags, \
-                                        Xtype badval, Xtype *out, \
-                                        Xtype *out_var, int *nbad ) { \
-\
-/* Local Variables: */ \
-   Xfloattype hi_lim;            /* Upper limit on output values */ \
-   Xfloattype lo_lim;            /* Lower limit on output values */ \
-   Xfloattype pixwt;             /* Weight to apply to individual pixel */ \
-   Xfloattype sum;               /* Weighted sum of pixel data values */ \
-   Xfloattype sum_var;           /* Weighted sum of pixel variance values */ \
-   Xfloattype val;               /* Data value to be assigned to output */ \
-   Xfloattype val_var;           /* Variance to be assigned to output */ \
-   Xfloattype wtsum;             /* Sum of weight values */ \
-   Xfloattype wtsum_sq;          /* Square of sum of weights */ \
-   Xtype var;                    /* Variance value */ \
-   double *xn_max;               /* Pointer to upper limits array (n-d) */ \
-   double *xn_min;               /* Pointer to lower limits array (n-d) */ \
-   double x;                     /* x coordinate value */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   int *hi;                      /* Pointer to array of upper indices */ \
-   int *ixm;                     /* Pointer to array of current indices */ \
-   int *lo;                      /* Pointer to array of lower indices */ \
-   int *status;                  /* Pointer to inherited status value */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int bad_var;                  /* Output variance bad? */ \
-   int done;                     /* All pixel indices done? */ \
-   int hi_x;                     /* Upper pixel index (x dimension) */ \
-   int hi_y;                     /* Upper pixel index (y dimension) */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ix;                       /* Pixel index in input grid x dimension */ \
-   int ixn;                      /* Pixel index in input grid (n-d) */ \
-   int iy;                       /* Pixel index in input grid y dimension */ \
-   int lo_x;                     /* Lower pixel index (x dimension) */ \
-   int lo_y;                     /* Lower pixel index (y dimension) */ \
-   int neighb;                   /* Number of adjacent pixels on each side */ \
-   int nobad;                    /* Was the AST__NOBAD flag set? */ \
-   int off1;                     /* Input pixel offset due to y index */ \
-   int off_in;                   /* Offset to input pixel */ \
-   int off_out;                  /* Offset to output pixel */ \
-   int point;                    /* Loop counter for output points */ \
-   int s;                        /* Temporary variable for strides */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int ystride;                  /* Stride along input grid y dimension */ \
-\
-/* Initialise. */ \
-   *nbad = 0; \
-\
-/* Get a pointer to the inherited status argument. */ \
-   status = astGetStatusPtr; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
-   messages from dumb compilers. */ \
-   val = 0; \
-   val_var = 0; \
-   sum_var = 0; \
-   wtsum = 0; \
-   bad = 0; \
-   bad_var = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-   nobad = flags & AST__NOBAD; \
-   usebad = flags & AST__USEBAD; \
-   usevar = in_var && out_var; \
-\
-/* Set the number of pixels each side of central pixel to use. */ \
-   neighb = (int) floor( params[ 0 ] + 0.5 ); \
-\
-/* Set up limits for checking output values to ensure that they do not \
-   overflow the range of the data type being used. */ \
-   lo_lim = LO_##X; \
-   hi_lim = HI_##X; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   if ( ndim_in == 1 ) { \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Another 4 cases as above, but without the AST__NOBAD flag. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   } else if ( ndim_in == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the input grid. */ \
-      ystride = ubnd_in[ 0 ] - lbnd_in[ 0 ] + 1; \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-      if ( nobad ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
-               } \
-            } \
-         } \
-\
-/* Another 4 cases as above, but without the AST__NOBAD flag. */ \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
-               } \
-            } \
-         } else { \
-            if ( usevar ) { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
-               } \
-            } else { \
-               for ( point = 0; point < npoint; point++ ) { \
-                  ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                  CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-   } else { \
-\
-/* Allocate workspace. */ \
-      hi = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      lo = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      stride = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      ixm = astMalloc( sizeof( int ) * (size_t) ndim_in ); \
-      xn_max = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      xn_min = astMalloc( sizeof( double ) * (size_t) ndim_in ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the input grid. */ \
-         for ( s = 1, idim = 0; idim < ndim_in; idim++ ) { \
-            stride[ idim ] = s; \
-            s *= ubnd_in[ idim ] - lbnd_in[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the input grid in each \
-   dimension. */ \
-            xn_min[ idim ] = (double) lbnd_in[ idim ] - 0.5; \
-            xn_max[ idim ] = (double) ubnd_in[ idim ] + 0.5; \
-         } \
-\
-/* Identify four cases, according to whether bad pixels and/or \
-   variances are being processed. In each case, loop through all the \
-   output points to (a) assemble the input data needed to form the \
-   interpolated value, and (b) calculate the result and assign it to \
-   the output arrays(s). In each case we assign constant values (0 or \
-   1) to the "Usebad" and "Usevar" flags so that code for handling bad \
-   pixels and variances can be eliminated when not required. */ \
-         if ( nobad ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,1) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,1) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,1) \
-                  } \
-               } \
-            } \
-\
-/* Another 4 cases as above, but this time without the AST__NOBAD flag. */ \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,1,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,1,0,0) \
-                  } \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,1) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,1,0) \
-                  } \
-               } else { \
-                  for ( point = 0; point < npoint; point++ ) { \
-                     ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,0,0) \
-                     CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,0,0,0) \
-                  } \
-               } \
-            } \
-         } \
-      } \
-\
-/* Free the workspace. */ \
-      hi = astFree( hi ); \
-      lo = astFree( lo ); \
-      stride = astFree( stride ); \
-      ixm = astFree( ixm ); \
-      xn_max = astFree( xn_max ); \
-      xn_min = astFree( xn_min ); \
-   } \
-\
-/* If an error has occurred, clear the returned result. */ \
-   if ( !astOK ) *nbad = 0; \
-\
-/* Return. */ \
-}
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 1-dimensional
-   case. */
-#define ASSEMBLE_INPUT_1D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x == AST__BAD ); \
-\
-/* Note we do not need to check here whether the pixel in this position is \
-   bad; if any pixels in the cube are good we can form an average. */ \
-\
-/* If OK, calculate the lowest and highest indices (in the x \
-   dimension) of the region of neighbouring pixels that will \
-   contribute to the interpolated result.  Constrain these values to \
-   lie within the input grid. */ \
-   if ( !bad ) { \
-      ix = (int) floor( x ); \
-      lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
-      hi_x = MinI( ix + neighb,     ubnd_in[ 0 ], status ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
-      sum = (Xfloattype) 0.0; \
-      wtsum = (Xfloattype) 0.0; \
-      if ( Usevar ) { \
-         sum_var = (Xfloattype) 0.0; \
-         bad_var = 0; \
-      } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
-   of each pixel from the start of the input array. */ \
-      off_in = lo_x - lbnd_in[ 0 ]; \
-      for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. */ \
-         if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-\
-/* If we are using variances, then check that the variance is valid; \
-   if it is invalid then ignore this pixel altogether. */ \
-            if ( Usevar ) { \
-               var = in_var[ off_in ]; \
-               if ( Usebad ) bad_var = ( var == badval ); \
-               CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If variance is valid then accumulate suitably weighted values into \
-   the totals. */ \
-               if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                  pixwt = (Xfloattype) 1.0 / var; \
-                  sum += pixwt * ( (Xfloattype) in[ off_in ] ); \
-                  wtsum += pixwt; \
-                  sum_var += pixwt; \
-               } \
-\
-/* If we are not using variances, then accumulate values into the \
-   totals with a weighting of unity. */ \
-            } else { \
-               sum += (Xfloattype) in[ off_in ]; \
-               wtsum++; \
-            } \
-         } \
-      } \
-   }
-
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the 2-dimensional
-   case. */ 
-#define ASSEMBLE_INPUT_2D(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
-   x = coords[ 0 ][ point ]; \
-   bad = ( x == AST__BAD ); \
-   if ( !bad ) { \
-\
-/* If not, then similarly obtain and test the y coordinate. */ \
-      y = coords[ 1 ][ point ]; \
-      bad = ( y == AST__BAD ); \
-\
-/* Note we do not need to check here whether the pixel in this position is \
-   bad; if any pixels in the cube are good we can form an average. */ \
-\
-/* If OK, calculate the lowest and highest indices (in each dimension) \
-   of the region of neighbouring pixels that will contribute to the \
-   interpolated result.  Constrain these values to lie within the input \
-   grid. */ \
-      if ( !bad ) { \
-         ix = (int) floor( x ); \
-         lo_x = MaxI( ix - neighb + 1, lbnd_in[ 0 ], status ); \
-         hi_x = MinI( ix + neighb,     ubnd_in[ 0 ], status ); \
-         iy = (int) floor( y ); \
-         lo_y = MaxI( iy - neighb + 1, lbnd_in[ 1 ], status ); \
-         hi_y = MinI( iy + neighb,     ubnd_in[ 1 ], status ); \
-\
-/* Initialise sums for forming the interpolated result. */ \
-         sum = (Xfloattype) 0.0; \
-         wtsum = (Xfloattype) 0.0; \
-         if ( Usevar ) { \
-            sum_var = (Xfloattype) 0.0; \
-            bad_var = 0; \
-         } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
-   of each pixel from the start of the input array. */ \
-         off1 = lo_x - lbnd_in[ 0 ] + ystride * ( lo_y - lbnd_in[ 1 ] ); \
-         for ( iy = lo_y; iy <= hi_y; iy++, off1 += ystride ) { \
-            off_in = off1; \
-            for ( ix = lo_x; ix <= hi_x; ix++, off_in++ ) { \
-\
-/* If necessary, test if the input pixel is bad. */ \
-               if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-\
-/* If we are using variances, then check that the variance is valid; \
-   if it is invalid then ignore this pixel altogether. */ \
-                  if ( Usevar ) { \
-                     var = in_var[ off_in ]; \
-                     if ( Usebad ) bad_var = ( var == badval ); \
-                     CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If variance is valid then accumulate suitably weighted values into \
-   the totals. */ \
-                     if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                        pixwt = (Xfloattype) 1.0 / var; \
-                        sum += pixwt * ( (Xfloattype) in[ off_in ] ); \
-                        wtsum += pixwt; \
-                        sum_var += pixwt; \
-                     } \
-\
-/* If we are not using variances, then accumulate values into the \
-   totals with a weighting of unity. */ \
-                  } else { \
-                     sum += (Xfloattype) in[ off_in ]; \
-                     wtsum++; \
-                  } \
-               } \
-            } \
-         } \
-      } \
-   }
- 
-/* This subsidiary macro assembles the input data needed in
-   preparation for forming the interpolated value in the n-dimensional
-   case. */
-#define ASSEMBLE_INPUT_ND(X,Xtype,Xfloating,Xfloattype,Xsigned,Usebad,Usevar) \
-\
-/* Initialise offsets into the input array.  then loop to obtain each \
-   coordinate associated with the current output poitn. */ \
-   off_in = 0; \
-   for ( idim = 0; idim < ndim_in; idim++ ) { \
-      xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate is bad. If so give up on this point. */ \
-      bad = ( xn == AST__BAD ); \
-      if ( bad ) break; \
-\
-/* Calculate the lowest and highest indices (in the current dimension) \
-   of the region of neighbouring pixels that will contribute to the \
-   interpolated result. Constrain these values to lie within the input \
-   grid. */ \
-      ixn = (int) floor( xn ); \
-      lo[ idim ] = MaxI( ixn - neighb + 1, lbnd_in[ idim ], status ); \
-      hi[ idim ] = MinI( ixn + neighb,     ubnd_in[ idim ], status ); \
-\
-/* If the cube has a zero dimension then no data can come from it. */ \
-      bad = ( lo[ idim ] > hi[ idim ] ); \
-      if ( bad ) break; \
-\
-/* Accumulate the offset (from the start of the input array) of the \
-   contributing pixel which has the lowest index in each dimension. */ \
-      off_in += stride[ idim ] * ( lo[ idim ] - lbnd_in[ idim ] ); \
-\
-/* Initialise an array to keep track of the current position in the \
-   input cube. */ \
-      ixm[ idim ] = lo[ idim ]; \
-   } \
-\
-/* Note we do not need to check here whether the pixel in this position is \
-   bad; if any pixels in the cube are good we can form an average. */ \
-\
-/* If OK, initialise sums for forming the interpolated result. */ \
-   if ( !bad ) { \
-      sum = (Xfloattype) 0.0; \
-      wtsum= (Xfloattype) 0.0; \
-      if ( Usevar ) { \
-         sum_var = (Xfloattype) 0.0; \
-         bad_var = 0; \
-      } \
-\
-/* Loop to inspect all the contributing pixels, calculating the offset \
-   of each pixel from the start of the input array. */ \
-      do { \
-\
-/* If necessary, test if the input pixel is bad. */ \
-         if ( !( Usebad ) || ( in[ off_in ] != badval ) ) { \
-\
-/* If we are using variances, then check that the variance is valid; \
-   if it is invalid then ignore this pixel altogether. */ \
-            if ( Usevar ) { \
-               var = in_var[ off_in ]; \
-               if ( Usebad ) bad_var = ( var == badval ); \
-               CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-\
-/* If variance is valid then accumulate suitably weighted values into \
-   the totals. */ \
-               if ( !( ( Xsigned ) || ( Usebad ) ) || !bad_var ) { \
-                  pixwt = (Xfloattype) 1.0 / var; \
-                  sum += pixwt * ( (Xfloattype) in[ off_in ] ); \
-                  wtsum += pixwt; \
-                  sum_var += pixwt; \
-               } \
-\
-/* If we are not using variances, then accumulate values into the \
-   totals with a weighting of unity. */ \
-            } else { \
-               sum += (Xfloattype) in[ off_in ]; \
-               wtsum++; \
-            } \
-         } \
-\
-/* Locate the next pixel in the input cube; try incrementing the lowest \
-   dimension index first, if that rolls over increment the next  \
-   dimension index, and so on. */ \
-         for ( idim = 0; idim < ndim_in; idim++ ) { \
-            if ( ixm[ idim ] < hi[ idim ] ) { \
-               off_in += stride[ idim ]; \
-               ixm[ idim ]++; \
-               break; \
-            } else { \
-               off_in -= stride[ idim ] * ( hi[ idim ] - lo[ idim ] ); \
-               ixm[ idim ] = lo[ idim ]; \
-            } \
-         } \
-\
-/* If the highest dimension index has rolled over, we have done all \
-   the pixels in the cube. */ \
-         done = ( idim == ndim_in ); \
-      } while ( !done ); \
-   }
-
-/* This subsidiary macro calculates the interpolated output value (and
-   variance) from the sums over contributing pixels, checks the
-   results for validity, and assigns them to the output array(s). */
-#define CALC_AND_ASSIGN_OUTPUT(X,Xtype,Xfloating,Xfloattype,Usebad,Usevar,Nobad) \
-\
-/* If the output data value has not yet been flagged as bad, then \
-   check that an interpolated value can actually be produced.  First \
-   check that the sum of weights is not zero. */ \
-   if ( !bad ) { \
-      bad = ( wtsum == (Xfloattype) 0.0 ); \
-\
-/* If OK, calculate the interpolated value. Then, if the output data \
-   type is not floating point, check that this value will not overflow \
-   the available output range. */ \
-      if ( !bad ) { \
-         val = sum / wtsum; \
-         if ( !( Xfloating ) ) { \
-            bad = ( val <= lo_lim ) || ( val >= hi_lim ); \
-         } \
-      } \
-\
-/* If no interpolated data value can be produced, then no associated \
-   variance will be required either. */ \
-      if ( ( Usevar ) && bad ) bad_var = 1; \
-   } \
-\
-/* Now perform similar checks on the output variance value (if \
-   required). This time we check that the square of the sum of \
-   weights is not zero (since this might underflow before the sum of \
-   weights). Again we also check to prevent the result overflowing the \
-   output data type. */ \
-   if ( ( Usevar ) && !bad_var ) { \
-      wtsum_sq = wtsum * wtsum; \
-      bad_var = ( wtsum_sq == (Xfloattype) 0.0 ); \
-      if ( !bad_var ) { \
-         val_var = sum_var / wtsum_sq; \
-         if ( !( Xfloating ) ) { \
-            bad_var = ( val_var <= lo_lim ) || ( val_var >= hi_lim ); \
-         } \
-      } \
-   } \
-\
-/* Obtain the pixel offset into the output array. */ \
-   off_out = offset[ point ]; \
-\
-/* Assign a bad output value (and variance) if required and count it. */ \
-   if ( bad ) { \
-      if( !Nobad ) { \
-         out[ off_out ] = badval; \
-         if ( Usevar ) out_var[ off_out ] = badval; \
-      } \
-      (*nbad)++; \
-\
-/* Otherwise, assign the interpolated value. If the output data type \
-   is floating point, the result can be stored directly, otherwise we \
-   must round to the nearest integer. */ \
-   } else { \
-      if ( Xfloating ) { \
-         out[ off_out ] = (Xtype) val; \
-      } else { \
-         out[ off_out ] = (Xtype) ( val + ( ( val >= (Xfloattype) 0.0 ) ? \
-                                            ( (Xfloattype) 0.5 ) : \
-                                            ( (Xfloattype) -0.5 ) ) ); \
-      } \
-\
-/* If a variance estimate is required but none can be obtained, then \
-   store a bad output variance value and count it. */ \
-      if ( Usevar ) { \
-         if ( bad_var ) { \
-            if( !Nobad ) out_var[ off_out ] = badval; \
-            (*nbad)++; \
-\
-/* Otherwise, store the variance estimate, rounding to the nearest \
-   integer if necessary. */ \
-         } else { \
-            if ( Xfloating ) { \
-               out_var[ off_out ] = (Xtype) val_var; \
-            } else { \
-               out_var[ off_out ] = (Xtype) ( val_var + \
-                                          ( ( val_var >= (Xfloattype) 0.0 ) ? \
-                                            ( (Xfloattype) 0.5 ) : \
-                                            ( (Xfloattype) -0.5 ) ) ); \
-            } \
-         } \
-      } \
-   }
-
-/* These subsidiary macros define limits for range checking of results
-   before conversion to the final data type. For each data type code
-   <X>, HI_<X> gives the least positive floating point value which
-   just overflows that data type towards plus infinity, while LO_<X>
-   gives the least negative floating point value which just overflows
-   that data type towards minus infinity. Thus, a floating point value
-   must satisfy LO<flt_value<HI if overflow is not to occur when it is
-   converted to that data type.
-
-   The data type of each limit should be that of the smallest
-   precision floating point type which will accommodate the full range
-   of values that the target type may take. */
-
-/* If <X> is a floating point type, the limits are not actually used,
-   but must be present to permit error-free compilation. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define HI_LD ( 0.0L )
-#define LO_LD ( 0.0L )
-#endif
-#define HI_D ( 0.0 )
-#define LO_D ( 0.0 )
-#define HI_F ( 0.0f )
-#define LO_F ( 0.0f )
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define HI_L   ( 0.5L + (long double) LONG_MAX )
-#define LO_L  ( -0.5L + (long double) LONG_MIN )
-#define HI_UL  ( 0.5L + (long double) ULONG_MAX )
-#define LO_UL ( -0.5L )
-#else
-#define HI_L   ( 0.5 + (double) LONG_MAX )
-#define LO_L  ( -0.5 + (double) LONG_MIN )
-#define HI_UL  ( 0.5 + (double) ULONG_MAX )
-#define LO_UL ( -0.5 )
-#endif
-#define HI_I   ( 0.5 + (double) INT_MAX )
-#define LO_I  ( -0.5 + (double) INT_MIN )
-#define HI_UI  ( 0.5 + (double) UINT_MAX )
-#define LO_UI ( -0.5 )
-#define HI_S   ( 0.5f + (float) SHRT_MAX )
-#define LO_S  ( -0.5f + (float) SHRT_MIN )
-#define HI_US  ( 0.5f + (float) USHRT_MAX )
-#define LO_US ( -0.5f )
-#define HI_B   ( 0.5f + (float) SCHAR_MAX )
-#define LO_B  ( -0.5f + (float) SCHAR_MIN )
-#define HI_UB  ( 0.5f + (float) UCHAR_MAX )
-#define LO_UB ( -0.5f )
-
-/* This subsidiary macro tests for negative variance values. This
-   check is required only for signed data types. */
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype) \
-   bad_var = bad_var || ( var < ( (Xtype) 0 ) );
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_BLOCKAVE(LD,long double,1,long double,1)
-MAKE_INTERPOLATE_BLOCKAVE(L,long int,0,long double,1)
-#else
-MAKE_INTERPOLATE_BLOCKAVE(L,long int,0,double,1)
-#endif
-MAKE_INTERPOLATE_BLOCKAVE(D,double,1,double,1)
-MAKE_INTERPOLATE_BLOCKAVE(F,float,1,float,1)
-MAKE_INTERPOLATE_BLOCKAVE(I,int,0,double,1)
-MAKE_INTERPOLATE_BLOCKAVE(S,short int,0,float,1)
-MAKE_INTERPOLATE_BLOCKAVE(B,signed char,0,float,1)
-
-/* Re-define the macro for testing for negative variances to do
-   nothing. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#define CHECK_FOR_NEGATIVE_VARIANCE(Xtype)
-
-/* Expand the main macro above to generate a function for each
-   required unsigned data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_INTERPOLATE_BLOCKAVE(UL,unsigned long int,0,long double,0)
-#else
-MAKE_INTERPOLATE_BLOCKAVE(UL,unsigned long int,0,double,0)
-#endif
-MAKE_INTERPOLATE_BLOCKAVE(UI,unsigned int,0,double,0)
-MAKE_INTERPOLATE_BLOCKAVE(US,unsigned short int,0,float,0)
-MAKE_INTERPOLATE_BLOCKAVE(UB,unsigned char,0,float,0)
-
-/* Undefine the macros used above. */
-#undef CHECK_FOR_NEGATIVE_VARIANCE
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#undef HI_LD
-#undef LO_LD
-#endif
-#undef HI_D
-#undef LO_D
-#undef HI_F
-#undef LO_F
-#undef HI_L
-#undef LO_L
-#undef HI_UL
-#undef LO_UL
-#undef HI_I
-#undef LO_I
-#undef HI_UI
-#undef LO_UI
-#undef HI_S
-#undef LO_S
-#undef HI_US
-#undef LO_US
-#undef HI_B
-#undef LO_B
-#undef HI_UB
-#undef LO_UB
-#undef CALC_AND_ASSIGN_OUTPUT
-#undef ASSEMBLE_INPUT_ND
-#undef ASSEMBLE_INPUT_2D
-#undef ASSEMBLE_INPUT_1D
-#undef MAKE_INTERPOLATE_BLOCKAVE
-
-
-static PN *InterpPN( int np, double *x, double *y, int *status ) {
-/*
-*  Name:
-*     InterpPN
-
-*  Purpose:
-*     Find a polynomial which interpolates the given points. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     PN *InterpPN( int np, double *x, double *y, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function finds the coefficients of a polynomial which
-*     interpolates the supplied positions. The order of the returned
-*     polynomial is one less than the the number of supplied points 
-*     (thus if 2 points are supplied, the polynomial will be of order 
-*     1 - a straight line).
-
-*  Parameters:
-*     np
-*        The number of points supplied in arrays x and y. This must be no
-*        more than (RATE_ORDER+1).
-*     x
-*        Pointer to a an array of "np" x values. Note the values in this
-*        array must increase monotonically.
-*     y
-*        Pointer to a an array of "np" y values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     Pointer to a structure describing the polynomial, or NULL if no
-*     polynomial could be found. The memory used to store the polynomial
-*     should be freed using astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
-    int i, k;
-    PN *pn[ RATE_ORDER + 1 ], *ret;
-
-/* Initialise. */
-    ret = NULL;
-
-/* Check the global error status */
-   if ( !astOK ) return ret;
-
-/* Check supplied points are good. */
-    if( np > RATE_ORDER + 1 ) return NULL;
-    for( i = 0; i < np; i++ ) {
-       if( x[ i ] == AST__BAD || y[ i ] == AST__BAD ) return NULL;
-    }
-
-/* Produce polynomials of order zero. */
-    for( i = 0; i < np; i++ ) {
-       pn[ i ] = astMalloc( sizeof( PN ) );
-       if( !astOK ) return NULL;
-       pn[ i ]->order = 0;
-       pn[ i ]->coeff[ 0 ] = y[ i ];
-       pn[ i ]->xlo = x[ i ];
-       pn[ i ]->xhi = x[ i ];
-    }
-
-/* Produce polynomials of order "k", from the polynomials of order "k-1".
-   This uses Neville's method (see:
-
-      http://mathworld.wolfram.com/NevillesAlgorithm.html
-
-*/
-    for( k = 1; k < np; k++ ) {
-       for( i = 0; i < np - k; i++ ) {
-          CombinePN( pn[i], pn[i+1], status );
-       }
-    }
-
-    for( i = 1; i < np; i++ ) pn[ i ] = astFree( pn[ i ] );
-
-/* If any of the coefficients could not be found return NULL. */
-    ret = pn[ 0 ];
-    for( i = 0; i < np; i++ ) {
-       if( astISNAN( ret->coeff[ i ] ) ) {
-          ret = astFree( ret );
-          break;
-       }
-    }
-
-    return ret;
-}
-
-
-static void Invert( AstMapping *this, int *status ) {
-/*
-*++
-*  Name:
-c     astInvert
-f     AST_INVERT
-
-*  Purpose:
-*     Invert a Mapping.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astInvert( AstMapping *this )
-f     CALL AST_INVERT( THIS, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function inverts a Mapping by reversing the boolean sense
-f     This routine inverts a Mapping by reversing the boolean sense
-*     of its Invert attribute. If this attribute is zero (the
-*     default), the Mapping will transform coordinates in the way
-*     specified when it was created. If it is non-zero, the input and
-*     output coordinates will be inter-changed so that the direction
-*     of the Mapping is reversed. This will cause it to display the
-*     inverse of its original behaviour.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-*--
-*/
-
-/* Local Variables: */
-   int invert;                   /* New Invert attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Determine the new Invert attribute value. */
-   invert = !astGetInvert( this );
-
-/* Clear the old value. */
-   astClearInvert( this );
-
-/* If the resulting default value is not the one required, then set a
-   new value explicitly. */
-   if ( astGetInvert( this ) != invert ) astSetInvert( this, invert );
-}
-
-static double J1Bessel( double x, int *status ) {
-/*
-*  Name:
-*     J1Bessel
-
-*  Purpose:
-*     Calculates the first-order Bessel function of the first kind.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double J1Bessel( double x, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of the first-order Bessel function
-*     of the first kind.
-
-*  Parameters:
-*     x
-*        The argument for J1.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The calculated J1(x) value.
-
-*  Notes:
-*     - The algorithm is taken from the SCUBA routine SCULIB_BESSJ1, by 
-*     J.Lightfoot.
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   static double p1 = 1.0;
-   static double p2 = 0.183105E-2;
-   static double p3 = -0.3516396496E-4;
-   static double p4 = 0.2457520174E-5;
-   static double p5 = -0.240337019E-6;
-
-   static double q1 = 0.04687499995;
-   static double q2 = -0.2002690873E-3;
-   static double q3 = 0.8449199096E-5;
-   static double q4 = -0.88228987E-6;
-   static double q5 = 0.105787412E-6;
-
-   static double r1 = 72362614232.0;
-   static double r2 = -7895059235.0;
-   static double r3 = 242396853.1;
-   static double r4 = -2972611.439;
-   static double r5 = 15704.48260;
-   static double r6 = -30.16036606;
-
-   static double s1 = 144725228442.0;
-   static double s2 = 2300535178.0;
-   static double s3 = 18583304.74;
-   static double s4 = 99447.43394;
-   static double s5 = 376.9991397;
-   static double s6 = 1.0;
-
-   double ax;
-   double xx;
-   double z;
-   double y;
-   double value;
-   int s;
-
-/* Calculate the value */
-   ax = fabs( x );
-   if( ax < 8.0 ) {
-      y = x*x;
-      value = x*( r1 + y*( r2 + y*( r3 + y*( r4 + y*( r5 + y*r6 ) ) ) ) ) /
-                       ( s1 + y*( s2 + y*( s3 + y*( s4 + y*( s5 + y*s6 ) ) ) ) );
-   } else {
-      s = ( x >= 0.0 ) ? 1 : -1;
-      z = 8.0 / ax;
-      y = z*z;
-      xx = ax - 2.356194491;
-      value = sqrt ( 0.636619772/ax )*( cos( xx )*( p1 + y*( p2 + y*
-        ( p3 + y*( p4 + y*p5 ) ) ) )-z*sin( xx )*( q1 + y*( q2 + y*( q3 + y*
-        ( q4 + y*q5 ) ) ) ) )*s;
-   }
-
-   return value;
-
-}
-
-static int LinearApprox( AstMapping *this, const double *lbnd, 
-                         const double *ubnd, double tol, double *fit, int *status ) {
-/*
-*++
-*  Name:
-c     astLinearApprox
-f     AST_LINEARAPPROX
-
-*  Purpose:
-*     Obtain a linear approximation to a Mapping, if appropriate.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     int astLinearApprox( AstMapping *this, const double *lbnd, 
-c                          const double *ubnd, double tol, double *fit )
-f     RESULT = AST_LINEARAPPROX( THIS, LBND, UBND, TOL, FIT, STATUS )
-
-*  Class Membership:
-*     Mapping function.
-
-*  Description:
-*     This function tests the forward coordinate transformation
-*     implemented by a Mapping over a given range of input coordinates. If
-*     the transformation is found to be linear to a specified level of
-*     accuracy, then an array of fit coefficients is returned. These
-*     may be used to implement a linear approximation to the Mapping's
-*     forward transformation within the specified range of output coordinates. 
-*     If the transformation is not sufficiently linear, no coefficients 
-*     are returned.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping. 
-c     lbnd
-f     LBND( * ) = DOUBLE PRECISION (Given)
-c        Pointer to an array of doubles
-f        An array
-*        containing the lower bounds of a box defined within the input 
-*        coordinate system of the Mapping. The number of elements in this 
-*        array should equal the value of the Mapping's Nin attribute. This
-*        box should specify the region over which linearity is required.
-c     ubnd
-f     UBND( * ) = DOUBLE PRECISION (Given)
-c        Pointer to an array of doubles
-f        An array
-*        containing the upper bounds of the box specifying the region over
-*        which linearity is required.
-c     tol
-f     TOL = DOUBLE PRECISION (Given)
-*        The maximum permitted deviation from linearity, expressed as
-*        a positive Cartesian displacement in the output coordinate
-*        space of the Mapping. If a linear fit to the forward
-*        transformation of the Mapping deviates from the true transformation 
-*        by more than this amount at any point which is tested, then no fit
-*        coefficients will be returned.
-c     fit
-f     FIT( * ) = DOUBLE PRECISION (Returned)
-c        Pointer to an array of doubles 
-f        An array
-*        in which to return the co-efficients of the linear
-*        approximation to the specified transformation. This array should
-*        have at least "( Nin + 1 ) * Nout", elements. The first Nout elements 
-*        hold the constant offsets for the transformation outputs. The 
-*        remaining elements hold the gradients. So if the Mapping has 2 inputs 
-*        and 3 outputs the linear approximation to the forward transformation 
-*        is:
-*
-c           X_out = fit[0] + fit[3]*X_in + fit[4]*Y_in 
-f           X_out = fit(1) + fit(4)*X_in + fit(5)*Y_in 
-*
-c           Y_out = fit[1] + fit[5]*X_in + fit[6]*Y_in 
-f           Y_out = fit(2) + fit(6)*X_in + fit(7)*Y_in 
-*
-c           Z_out = fit[2] + fit[7]*X_in + fit[8]*Y_in
-f           Z_out = fit(3) + fit(8)*X_in + fit(9)*Y_in
-*
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astLinearApprox()
-f     AST_LINEARAPPROX = LOGICAL
-*        If the forward transformation is sufficiently linear,
-c        a non-zero value is returned. Otherwise zero is returned 
-f        .TRUE is returned. Otherwise .FALSE. is returned
-*        and the fit co-efficients are set to AST__BAD.
-
-*  Notes:
-*     - This function fits the Mapping's forward transformation. To fit
-*     the inverse transformation, the Mapping should be inverted using
-c     astInvert
-f     AST_INVERT
-*     before invoking this function.
-c     - A value of zero
-f     - A value of .FALSE.
-*     will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*--
-
-*  Implementation Deficiencies:
-*     Sub-classes which implement linear mappings should probably
-*     over-ride this function to get better accuracy and faster execution, 
-*     but currently they do not.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset_in_f;       /* PointSet for input fitting points */
-   AstPointSet *pset_in_t;       /* PointSet for input test points */
-   AstPointSet *pset_out_f;      /* PointSet for output fitting points */
-   AstPointSet *pset_out_t;      /* PointSet for output test points */
-   double **ptr_in_f;            /* Input coordinate array pointers */
-   double **ptr_in_t;            /* Input coordinate array pointers */
-   double **ptr_out_f;           /* Output coordinate array pointers */
-   double **ptr_out_t;           /* Output coordinate array pointers */
-   double *grad;                 /* Pointer to matrix of gradients */
-   double *zero;                 /* Pointer to array of zero point values */
-   double diff;                  /* Difference in coordinate values */
-   double err;                   /* Sum of squared error */
-   double frac;                  /* Fraction of input coordinate range */
-   double in1;                   /* Input coordinate value */
-   double in2;                   /* Input coordinate value */
-   double indiff;                /* Difference in input coordinate values */
-   double out1;                  /* Output coordinate value */
-   double out2;                  /* Output coordinate value */
-   double x0;                    /* Coordinate of grid centre */
-   double y;                     /* Output coordinate (transformed) */
-   double yfit;                  /* Coordinate resulting from fit */
-   double z;                     /* Sum for calculating zero points */
-   int *vertex;                  /* Pointer to flag array for vertices */
-   int coord_in;                 /* Loop counter for input coordinates */
-   int coord_out;                /* Loop counter for output coordinates. */
-   int done;                     /* All vertices visited? */
-   int face1;                    /* Index of first face coordinates */
-   int face2;                    /* Index of second face coordinates */
-   int face;                     /* Loop counter for faces */
-   int ii;                       /* Index into gradient matrix */
-   int linear;                   /* Mapping is linear? */
-   int nc;                       /* Number of coeffs in fit */
-   int ndim_in;                  /* Number of Mapping inputs */
-   int ndim_out;                 /* Number of Mapping outputs */
-   int npoint;                   /* Number of test points required */
-   int point;                    /* Counter for points */
-   int result;                   /* Returned flag */
-
-/* Initialise. */
-   result = 0;
-   
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   linear = 1;
-   grad = NULL;
-   zero = NULL;
-
-/* Get the number of Mapping output and inputs. */
-   ndim_in = astGetNin( this );
-   ndim_out = astGetNout( this );
-
-/* Store the number of coefficients in the fit.*/
-   nc = ( ndim_in + 1 ) * ndim_out;
-
-/* Create a PointSet to hold input coordinates and obtain a pointer
-   to its coordinate arrays. */
-   pset_in_f = astPointSet( 2 * ndim_in, ndim_in, "", status );
-   ptr_in_f = astGetPoints( pset_in_f );
-   if ( astOK ) {
-
-/* Set up and transform an initial set of points. */
-/* ---------------------------------------------- */
-/* Loop to set up input coordinates at the centre of each face of the
-   input grid, storing them in the PointSet created above. */
-      point = 0;
-      for ( face = 0; face < ( 2 * ndim_in ); face++ ) {
-         for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-            ptr_in_f[ coord_in ][ point ] =
-               0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
-         }
-         ptr_in_f[ face / 2 ][ point ] = ( face % 2 ) ?
-                                          ubnd[ face / 2 ] : lbnd[ face / 2 ];
-         point++;
-      }
-   }
-
-/* Transform these coordinates into the output grid's coordinate system
-   and obtain an array of pointers to the resulting coordinate
-   data. */
-   pset_out_f = astTransform( this, pset_in_f, 1, NULL );
-   ptr_out_f = astGetPoints( pset_out_f );
-   if ( astOK ) {
-
-/* Fit a linear approximation to the points. */
-/* ----------------------------------------- */
-/* Obtain pointers to the locations in the fit coefficients array
-   where the gradients and zero points should be stored. */
-      grad = fit + ndim_out;
-      zero = fit;
-
-/* On the assumption that the transformation applied above is
-   approximately linear, loop to determine the matrix of gradients and
-   the zero points which describe it. */
-      ii = 0;
-      for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-         z = 0.0;
-         for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-
-/* Find the indices of opposite faces in each input dimension. */
-            face1 = 2 * coord_in;
-            face2 = face1 + 1;
-
-/* Obtain the input and output coordinates at these face centres. */
-            in1 = ptr_in_f[ coord_in ][ face1 ];
-            in2 = ptr_in_f[ coord_in ][ face2 ];
-            out1 = ptr_out_f[ coord_out ][ face1 ];
-            out2 = ptr_out_f[ coord_out ][ face2 ];
-
-/* Check whether any transformed coordinates are bad. If so, the
-   transformation cannot be linear, so give up trying to fit it. */
-            if ( ( out1 == AST__BAD ) || ( out2 == AST__BAD ) ) {
-               linear = 0;
-               break;
-            }
-
-/* If possible, determine the gradient along this dimension, storing
-   it in the appropriate element of the gradient matrix. */
-            indiff = in2 - in1;
-            if ( indiff != 0.0 ) {
-               grad[ ii++ ] = ( out2 - out1 ) / indiff;
-            } else {
-               grad[ ii++ ] = 0.0;
-            }
-
-/* Accumulate the sum used to determine the zero point. */
-            z += ( out1 + out2 );
-         }
-
-/* Also quit the outer loop if a linear fit cannot be obtained. */
-         if ( !linear ) break;
-
-/* Determine the average zero point from all dimensions. */
-         zero[ coord_out ] = z / (double) ( 2 * ndim_in );
-      }
-
-/* If a linear fit was obtained, its zero points will be appropriate
-   to an input coordinate system with an origin at the centre of the
-   input grid (we assume this to simplify the calculations above). To
-   correct for this, we transform the actual input coordinates of the
-   grid's centre through the matrix of gradients and subtract the
-   resulting coordinates from the zero point values. The zero points
-   are then correct for the actual output and input coordinate systems
-   we are using. */
-      if ( linear ) {
-         ii = 0;
-         for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-            for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-               x0 = 0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
-               zero[ coord_out ] -= grad[ ii++ ] * x0;
-            }
-         }
-      }
-   }
-
-/* Annul the pointers to the PointSets used above. */
-   pset_out_f = astAnnul( pset_out_f );
-   pset_in_f = astAnnul( pset_in_f );
-
-/* Calculate the number of test points required. */
-/* --------------------------------------------- */
-/* If we have obtained a linear fit above, it will (by construction)
-   be exact at the centre of each face of the input grid. However, it
-   may not fit anywhere else. We therefore set up some test points to
-   determine if it is an adequate approximation elsewhere. */
-   if ( astOK && linear ) {
-
-/* Calculate the number of test points required to place one at each
-   vertex of the grid. */
-      npoint = 1;
-      for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-         npoint *= 2;
-      }
-
-/* Now calculate the total number of test points required, also
-   allowing one at the centre, one at half the distance to each face,
-   and one at half the distance to each vertex. */
-      npoint = 1 + 2 * ( ndim_in + npoint );
-
-/* Set up test points in the input coordinate system. */
-/* --------------------------------------------------- */   
-/* Create a PointSet to hold the test coordinates and obtain an array
-   of pointers to its coordinate data. */
-      pset_in_t = astPointSet( npoint, ndim_in, "", status );
-      ptr_in_t = astGetPoints( pset_in_t );
-      if ( astOK ) {
-
-/* If the input array is 1-dimensional, the face and vertex positions
-   calculated below will co-incide. Therefore, we simply distribute
-   the required number of test points uniformly throughout the input
-   coordinate range (avoiding the end-points, where the fit has been
-   obtained). The coordinates are stored in the PointSet created
-   above. */
-         if ( ndim_in == 1 ) {
-            for ( point = 0; point < npoint; point++ ) {
-               frac = ( (double) ( point + 1 ) ) / (double) ( npoint + 1 );
-               ptr_in_t[ 0 ][ point ] = ( 1.0 - frac ) * lbnd[ 0 ] +
-                                         frac * ubnd[ 0 ];
-            }
-
-/* Otherwise, generate one point at the grid centre. */
-         } else {
-            point = 0;
-            for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-               ptr_in_t[ coord_in ][ point ] =
-                  0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
-            }
-            point++;
-
-/* Similarly generate a point half way between the grid centre and the
-   centre of each face. */
-            for ( face = 0; face < ( 2 * ndim_in ); face++ ) {
-               for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                  ptr_in_t[ coord_in ][ point ] =
-                     0.5 * ( lbnd[ coord_in ] + ubnd[ coord_in ] );
-               }
-               ptr_in_t[ face / 2 ][ point ] =
-                  0.5 * ( ( ( ( face % 2 ) ? ubnd[ face / 2 ] :
-                                             lbnd[ face / 2 ] ) ) +
-                          ptr_in_t[ face / 2 ][ 0 ] );
-               point++;
-            }
-
-/* Allocate workspace and initialise flags for identifying the
-   vertices. */
-            vertex = astMalloc( sizeof( int ) * (size_t) ndim_in );
-            if ( astOK ) {
-               for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                  vertex[ coord_in ] = 0;
-               }
-
-/* Now loop to visit each input grid vertex. */
-               done = 0;
-               do {
-
-/* Generate a test point at each vertex. */
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     ptr_in_t[ coord_in ][ point ] = vertex[ coord_in ] ?
-                                                       ubnd[ coord_in ] :
-                                                       lbnd[ coord_in ];
-
-/* Also place one half way between the grid centre and each vertex. */
-                     ptr_in_t[ coord_in ][ point + 1 ] =
-                        0.5 * ( ptr_in_t[ coord_in ][ point ] +
-                                ptr_in_t[ coord_in ][ 0 ] );
-                  }
-                  point += 2;
-
-/* Now update the array of vertex flags to identify the next vertex. */
-                  coord_in = 0;
-                  do {
-
-/* The least significant dimension which does not have its upper bound
-   as one of the vertex coordinates is changed to use its upper bound
-   in the next vertex. */
-                     if ( !vertex[ coord_in ] ) {
-                        vertex[ coord_in ] = 1;
-                        break;
-
-/* Any less significant dimensions whose upper bounds are already
-   being used are changed to use their lower bounds in the next
-   vertex. */
-                     } else {
-                        vertex[ coord_in ] = 0;
-
-/* All vertices have been visited when the most significant dimension
-   is changed back to using its lower bound. */
-                        done = ( ++coord_in == ndim_in );
-                     }
-                  } while ( !done );
-               } while ( !done );
-            }
-
-/* Free the workspace used for vertex flags. */
-            vertex = astFree( vertex );
-         }
-
-/* Transform the test points. */
-/* -------------------------- */
-/* Use the Mapping to transform the test points into the output grid's
-   coordinate system, obtaining a pointer to the resulting arrays of
-   output coordinates. */
-         pset_out_t = astTransform( this, pset_in_t, 1, NULL );
-         ptr_out_t = astGetPoints( pset_out_t );
-
-/* Test the linear fit for accuracy. */
-/* --------------------------------- */
-/* If OK so far, then loop to use this fit to transform each test
-   point and compare the result with the result of applying the
-   Mapping. */
-         if ( astOK ) {
-            for ( point = 0; point < npoint; point++ ) {
-
-/* Initialise the fitting error for the current point. */
-               err = 0.0;
-
-/* Obtain each output coordinate (produced by using the Mapping) in
-   turn and check that it is not bad. If it is, then the
-   transformation is not linear, so give up testing the fit. */
-               ii = 0;
-               for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                  y = ptr_out_t[ coord_out ][ point ];
-                  if ( y == AST__BAD ) {
-                     linear = 0;
-                     break;
-                  }
-
-/* Apply the fitted transformation to the input coordinates to obtain
-   the approximate output coordinate value. */
-                  yfit = zero[ coord_out ];
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     yfit += grad[ ii++ ] * ptr_in_t[ coord_in ][ point ];
-                  }
-
-/* Form the sum of squared differences between the Mapping's
-   transformation and the fit. */
-                  diff = ( y - yfit );
-                  err += diff * diff;
-               }
-
-/* Quit the outer loop if the Mapping is found to be non-linear. */
-               if ( !linear ) break;
-
-/* Test if the Cartesian distance between the true output coordinate
-   and the approximate one exceeds the accuracy tolerance. If this
-   happens for any test point, we declare the Mapping non-linear and
-   give up. */
-               if ( sqrt( err ) > tol ) {
-                  linear = 0;
-                  break;
-               }
-            }
-         }
-
-/* Annul the pointers to the PointSets used above. */
-         pset_out_t = astAnnul( pset_out_t );
-      }
-      pset_in_t = astAnnul( pset_in_t );
-   }
-
-/* If an error occurred, or the Mapping was found to be non-linear,
-   then set the coefficients to AST_BAD. Otherwise, set the returned flag
-   to indicate that the fit was succesful. */
-   if ( !astOK || !linear ) {
-      for( ii = 0; ii < nc; ii++ ) fit[ ii ] = AST__BAD;
-   } else {
-      result = 1;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double LocalMaximum( const MapData *mapdata, double acc, double fract,
-                            double x[], int *status ) {
-/*
-*  Name:
-*     LocalMaximum
-
-*  Purpose:
-*     Find a local maximum in a Mapping function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double LocalMaximum( const MapData *mapdata, double acc, double fract,
-*                          double x[], int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function finds a local maximum in the Mapping function
-*     supplied.  It employs the modified simplex method (as
-*     implemented by UphillSimplex), but repeatedly re-starts the
-*     simplex algorithm and tests for convergence of successive
-*     maxima, so as to further improve robustness on difficult
-*     problems.
-
-*  Parameters:
-*     mapdata
-*        Pointer to a MapData structure describing the Mapping
-*        function, its coordinate constraints, etc.
-*     acc
-*        The required accuracy with which the maximum is to be found.
-*     fract
-*        A value between 0.0 and 1.0 which determines the initial step
-*        length along each coordinate axis. It should be given as a
-*        fraction of the difference between the upper and lower
-*        constraint values for each axis (as specified in the
-*        "mapdata" structure).
-*     x
-*        Pointer to an array of double containing the coordinates of
-*        an initial estimate of the position of the maximum. On exit,
-*        this will be updated to contain the best estimate of the
-*        maximum's position, as found by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The best estimate of the Mapping function's maximum value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned, and no useful
-*     information about a solution will be produced, if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Constants: */
-   const int maxcall = 1500;     /* Maximum number of function evaluations */
-   const int maxiter = 5;        /* Maximum number of iterations */
-
-/* Local Variables: */
-   double *dx;                   /* Pointer to array of step lengths */
-   double err;                   /* Simplex error estimate */
-   double maximum;               /* Simplex maximum value */
-   double middle;                /* Middle coordinate between bounds */
-   double result;                /* Result value to return */
-   int coord;                    /* Loop counter for coordinates */
-   int done;                     /* Iterations complete? */
-   int iter;                     /* Loop counter for iterations */
-   int ncall;                    /* Number of function calls (junk) */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialise to avoid compiler warnings. */
-   err = 0.0;
-
-/* Allocate workspace. */
-   dx = astMalloc( sizeof( double ) * (size_t) mapdata->nin );
-
-/* Perform iterations to repeatedly identify a local maximum. */
-   for ( iter = 0; astOK && ( iter < maxiter ); iter++ ) {
-
-/* Set up initial step lengths along each coordinate axis, adjusting
-   their signs to avoid placing points outside the coordinate
-   constraints (i.e. step away from the closer boundary on each
-   axis). */
-      for ( coord = 0; coord < mapdata->nin; coord++ ) {
-         middle = 0.5 * ( mapdata->lbnd[ coord ] + mapdata->ubnd[ coord ] );
-         dx[ coord ] = fract * ( mapdata->ubnd[ coord ] -
-                                 mapdata->lbnd[ coord ] );
-         if ( x[ coord ] > middle ) dx[ coord ] = -dx[ coord ];
-      }
-
-/* Find an approximation to a local maximum using the simplex method
-   and check for errors. */
-      maximum = UphillSimplex( mapdata, acc, maxcall, dx, x, &err, &ncall, status );
-      if ( astOK ) {
-
-/* Use this maximum value if no previous maximum has been found. */
-         if ( result == AST__BAD ) {
-            result = maximum;
-
-/* Otherwise use it only if it improves on the previous maximum. */
-         } else if ( maximum >= result ) {
-
-/* We iterate, re-starting the simplex algorithm from its previous
-   best position so as to guard against premature false
-   convergence. Iterations continue until the improvement in the
-   maximum is no greater than the required accuracy (and the simplex
-   algorithm itself has converged to the required accuracy). Note when
-   iterations should cease. */
-            done = ( ( ( maximum - result ) <= acc ) && ( err <= acc ) );
-
-/* Store the best maximum and quit iterating if appropriate. */
-            result = maximum;
-            if ( done ) break;
-         }
-
-/* Otherwise, decrement the initial step size for the next iteration. */
-         fract /= 1000.0;
-      }
-   }
-   
-/* Free the workspace. */
-   dx = astFree( dx );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* return the result. */
-   return result;
-}
-
-static void MapBox( AstMapping *this,
-                    const double lbnd_in[], const double ubnd_in[],
-                    int forward, int coord_out,
-                    double *lbnd_out, double *ubnd_out,
-                    double xl[], double xu[], int *status ) {
-/*
-*+
-*  Name:
-*     astMapBox
-
-*  Purpose:
-*     Find a bounding box for a Mapping.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void astMapBox( AstMapping *this,
-*                     const double lbnd_in[], const double ubnd_in[],
-*                     int forward, int coord_out,
-*                     double *lbnd_out, double *ubnd_out,
-*                     double xl[], double xu[] );
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function allows you to find the "bounding box" which just
-*     encloses another box after it has been transformed by a Mapping
-*     (using either its forward or inverse transformation). A typical
-*     use might be to calculate the size which an image would have
-*     after being transformed by the Mapping.
-*
-*     The function works on one dimension at a time. When supplied
-*     with the lower and upper bounds of a rectangular region (box) of
-*     input coordinate space, it finds the lowest and highest values
-*     taken by a nominated output coordinate within that
-*     region. Optionally, it also returns the input coordinates where
-*     these bounding values are attained. It should be used repeatedly
-*     if the extent of the bounding box is required in more than one
-*     dimension.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     lbnd_in
-*        Pointer to an array of double, with one element for each
-*        Mapping input coordinate. This should contain the lower bound
-*        of the input box in each dimension.
-*     ubnd_in
-*        Pointer to an array of double, with one element for each
-*        Mapping input coordinate. This should contain the upper bound
-*        of the input box in each dimension.
-*
-*        Note that it is permissible for the lower bound to exceed the
-*        corresponding upper bound, as the values will simply be
-*        swapped before use.
-*     forward
-*        If this value is non-zero, then the Mapping's forward
-*        transformation will be used to transform the input
-*        box. Otherwise, its inverse transformation will be used.
-*
-*        (If the inverse transformation is selected, then references
-*        to "input" and "output" coordinates in this description
-*        should be transposed. For example, the size of the "lbnd_in"
-*        and "ubnd_in" arrays should match the number of output
-*        coordinates, as given by the Mapping's Nout attribute.)
-*     coord_out
-*        The (zero-based) index of the output coordinate for which the
-*        lower and upper bounds are required.
-*     lbnd_out
-*        Pointer to a double in which to return the lowest value taken
-*        by the nominated output coordinate within the specified
-*        region of input coordinate space.
-*     ubnd_out
-*        Pointer to a double in which to return the highest value
-*        taken by the nominated output coordinate within the specified
-*        region of input coordinate space.
-*     xl
-*        An optional pointer to an array of double, with one element
-*        for each Mapping input coordinate. If given, this array will
-*        be filled with the coordinates of an input point (although
-*        not necessarily a unique one) for which the nominated output
-*        coordinate takes the lower bound value returned in
-*        "*lbnd_out".
-*
-*        If these coordinates are not required, a NULL pointer may be
-*        supplied.
-*     xu
-*        An optional pointer to an array of double, with one element
-*        for each Mapping input coordinate. If given, this array will
-*        be filled with the coordinates of an input point (although
-*        not necessarily a unique one) for which the nominated output
-*        coordinate takes the upper bound value returned in
-*        "*ubnd_out".
-*
-*        If these coordinates are not required, a NULL pointer may be
-*        supplied.
-
-*  Notes:
-*     - Any input points which are transformed by the Mapping to give
-*     output coordinates containing the value AST__BAD are regarded as
-*     invalid and are ignored, They will make no contribution to
-*     determining the output bounds, even although the nominated
-*     output coordinate might still have a valid value at such points.
-*     - An error will occur if the required output bounds cannot be
-*     found. Typically, this might occur if all the input points which
-*     the function considers turn out to be invalid (see above). The
-*     number of points considered before generating such an error is
-*     quite large, however, so this is unlikely to occur by accident
-*     unless valid points are restricted to a very small subset of the
-*     input coordinate space.
-*     - The values returned via "lbnd_out", "ubnd_out", "xl" and "xu"
-*     will be set to the value AST__BAD if this function should fail
-*     for any reason. Their initial values on entry will not be
-*     altered if the function is invoked with the global error status
-*     set.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic astMapBox method available
-*     via the protected interface to the Mapping class. The public
-*     interface to this method is provided by the astMapBoxId_
-*     function.
-*/
-
-/* Local Variables: */
-   MapData mapdata;              /* Structure to describe Mapping function */
-   double *x_l;                  /* Pointer to coordinate workspace */
-   double *x_u;                  /* Pointer to coordinate workspace */
-   double lbnd;                  /* Required lower bound */
-   double ubnd;                  /* Required upper bound */
-   int coord;                    /* Loop counter for coordinates. */
-   int nin;                      /* Effective number of input coordinates */
-   int nout;                     /* Effective number of output coordinates */
-   int refine;                   /* Can bounds be refined? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialisation to avoid compiler warnings. */
-   lbnd = AST__BAD;
-   ubnd = AST__BAD;
-
-/* Obtain the effective numbers of input and output coordinates for
-   the Mapping, taking account of which transformation is to be
-   used. */
-   nin = forward ? astGetNin( this ) : astGetNout( this );
-   nout = forward ? astGetNout( this ) : astGetNin( this );
-
-/* Check that the output coordinate index supplied is valid and report
-   an error if it is not. Use public (one-based) coordinate numbering
-   in the error message. */
-   if ( astOK ) {
-      if ( ( coord_out < 0 ) || ( coord_out >= nout ) ) {
-         astError( AST__BADCI, "astMapBox(%s): Output coordinate index (%d) "
-                   "invalid - it should be in the range 1 to %d.", status,
-                   astGetClass( this ), coord_out + 1, nout );
-      }
-   }
-
-/* Initialise a MapData structure to describe the Mapping function
-   whose limits are to be found.  Since it may be evaluated many
-   times, we attempt to simplify the Mapping supplied. */
-   if ( astOK ) {
-      mapdata.mapping = astSimplify( this );
-
-/* Store the number of input/output coordinates and the index of the
-   output coordinate in which we are interested. */
-      mapdata.nin = nin;
-      mapdata.nout = nout;
-      mapdata.coord = coord_out;
-
-/* Note which Mapping transformation is being used. */
-      mapdata.forward = forward;
-
-/* Store pointers to arrays which will contain the input coordinate
-   bounds. */
-      mapdata.lbnd = astMalloc( sizeof( double ) * (size_t) nin );
-      mapdata.ubnd = astMalloc( sizeof( double ) * (size_t) nin );
-
-/* Create PointSets for passing coordinate data to and from the
-   Mapping. */
-      mapdata.pset_in = astPointSet( 1, nin, "", status );
-      mapdata.pset_out = astPointSet( 1, nout, "", status );
-
-/* Obtain pointers to these PointSets' coordinate arrays. */
-      mapdata.ptr_in = astGetPoints( mapdata.pset_in );
-      mapdata.ptr_out = astGetPoints( mapdata.pset_out );
-
-/* Allocate workspace for the returned input coordinates. */
-      x_l = astMalloc( sizeof( double ) * (size_t) nin );
-      x_u = astMalloc( sizeof( double ) * (size_t) nin );
-      if ( astOK ) {
-
-/* Initialise the output bounds and corresponding input coordinates to
-   "unknown". */
-         for ( coord = 0; coord < nin; coord++ ) {
-            x_l[ coord ] = AST__BAD;
-            x_u[ coord ] = AST__BAD;
-
-/* Initialise the input bounds, ensuring they are the correct way
-   around (if not already supplied this way). */
-            mapdata.lbnd[ coord ] = ( lbnd_in[ coord ] < ubnd_in[ coord ] ) ?
-                                      lbnd_in[ coord ] : ubnd_in[ coord ];
-            mapdata.ubnd[ coord ] = ( ubnd_in[ coord ] > lbnd_in[ coord ] ) ?
-                                      ubnd_in[ coord ] : lbnd_in[ coord ];
-         }
-
-/* First examine a set of special input points to obtain an initial
-   estimate of the required output bounds. Do this only so long as the
-   number of points involved is not excessive. */
-         if ( nin <= 12 ) {
-            refine = SpecialBounds( &mapdata, &lbnd, &ubnd, x_l, x_u, status );
-         } else {
-            refine = 1;
-         }
-
-/* Then attempt to refine this estimate using a global search
-   algorithm. */
-         if( refine ) GlobalBounds( &mapdata, &lbnd, &ubnd, x_l, x_u, status );
-
-/* If an error occurred, generate a contextual error message. */
-         if ( !astOK ) {
-            astError( astStatus, "Unable to find a bounding box for a %s.", status,
-                      astGetClass( this ) );
-         }
-      }
-
-/* Return the output bounds and, if required, the input coordinate
-   values which correspond with them. */
-      if ( astOK ) {
-         *lbnd_out = lbnd;
-         *ubnd_out = ubnd;
-         for ( coord = 0; coord < nin; coord++ ) {
-            if ( xl ) xl[ coord ] = x_l[ coord ];
-            if ( xu ) xu[ coord ] = x_u[ coord ];
-         }
-      }
-
-/* Annul the simplified Mapping pointer and the temporary
-   PointSets. Also free the workspace. */
-      mapdata.mapping = astAnnul( mapdata.mapping );
-      mapdata.lbnd = astFree( mapdata.lbnd );
-      mapdata.ubnd = astFree( mapdata.ubnd );
-      mapdata.pset_in = astAnnul( mapdata.pset_in );
-      mapdata.pset_out = astAnnul( mapdata.pset_out );
-      x_l = astFree( x_l );
-      x_u = astFree( x_u );
-   }
-      
-/* If an error occurred, then return bad bounds values and
-   coordinates. */
-   if ( !astOK ) {
-      *lbnd_out = AST__BAD;
-      *ubnd_out = AST__BAD;
-      for ( coord = 0; coord < nin; coord++ ) {
-         if ( xl ) xl[ coord ] = AST__BAD;
-         if ( xu ) xu[ coord ] = AST__BAD;
-      }
-   }
-}
-
-static double MapFunction( const MapData *mapdata, const double in[],
-                           int *ncall, int *status ) {
-/*
-*  Name:
-*     MapFunction
-
-*  Purpose:
-*     Return the value of a selected transformed coordinate.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double MapFunction( const MapData *mapdata, const double in[],
-*                         int *ncall, int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function takes a set of input coordinates and applies a
-*     Mapping's coordinate transformation to them. It then returns the
-*     value of one of the transformed coordinates.
-*
-*     It is provided for use by optimisation functions (e.g. those
-*     used for finding bounding boxes). The Mapping to be used and
-*     associated parameters (such as constraints on the range of input
-*     coordinates and the index of the output coordinate to be
-*     returned) are supplied in a MapData structure. The value
-*     returned will be negated if the "negate" component of this
-*     structure is non-zero.
-*
-*     The value AST__BAD will be returned by this function if the
-*     input coordinates lie outside the constrained range given in
-*     the MapData structure, or if any of the transformed output
-*     coordinates is bad.
-
-*  Parameters:
-*     mapdata
-*        Pointer to a MapData structure which describes the Mapping to
-*        be used.
-*     in
-*        A double array containing the input coordinates of a single point.
-*     ncall
-*        Pointer to an int containing a count of the number of times
-*        the Mapping's coordinate transformation has been used. This
-*        value will be updated to reflect any use made by this
-*        function. Normally, this means incrementing the value by 1,
-*        but this will be omitted if the input coordinates supplied
-*        are outside the constrained range so that no transformation
-*        is performed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The selected output coordinate value, or AST__BAD, as appropriate.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   double result;                /* Result to be returned */
-   int bad;                      /* Output coordinates invalid? */
-   int coord_in;                 /* Loop counter for input coordinates */
-   int coord_out;                /* Loop counter for output coordinates */
-   int outside;                  /* Input point outside bounds? */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* See if the input point lies outside the required bounds. */
-   outside = 0;
-   for ( coord_in = 0; coord_in < mapdata->nin; coord_in++ ) {
-      if ( ( in[ coord_in ] < mapdata->lbnd[ coord_in ] ) ||
-           ( in[ coord_in ] > mapdata->ubnd[ coord_in ] ) ) {
-         outside = 1;
-         break;
-      }
-
-/* Also store the input coordinates in the memory associated with the
-   Mapping's input PointSet. */
-      mapdata->ptr_in[ coord_in ][ 0 ] = in[ coord_in ];
-   }
-
-/* If the input coordinates are within bounds, transform them, using the
-   PointSets identified in the "mapdata" structure. */
-   if ( !outside ) {
-      (void) astTransform( mapdata->mapping, mapdata->pset_in,
-                           mapdata->forward, mapdata->pset_out );
-
-/* Increment the number of calls to astTransform and check the error
-   status. */
-      ( *ncall )++;
-      if ( astOK ) {
-
-/* If OK, test if any of the output coordinates is bad. */
-         bad = 0;
-         for ( coord_out = 0; coord_out < mapdata->nout; coord_out++ ) {
-            if ( mapdata->ptr_out[ coord_out ][ 0 ] == AST__BAD ) {
-               bad = 1;
-               break;
-            }
-         }
-
-/* If not, then extract the required output coordinate, negating it if
-   necessary. */
-         if ( !bad ) {
-            result = mapdata->ptr_out[ mapdata->coord ][ 0 ];
-            if ( mapdata->negate ) result = -result;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int MapList( AstMapping *this, int series, int invert, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*+
-*  Name:
-*     astMapList
-
-*  Purpose:
-*     Decompose a Mapping into a sequence of simpler Mappings.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astMapList( AstMapping *this, int series, int invert, int *nmap,
-*                      AstMapping ***map_list, int **invert_list )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function decomposes a Mapping (which, in derived classes,
-*     may be a compound Mapping) into a sequence of simpler Mappings
-*     which may be applied in sequence to achieve the same effect. The
-*     Mapping is decomposed as far as possible, but it is not
-*     guaranteed that this will necessarily yield any more than one
-*     Mapping, which may actually be the original one supplied.
-*
-*     This function is provided to support both the simplification of
-*     compound Mappings, and the analysis of Mapping structure so that
-*     particular forms can be recognised.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be decomposed (the Mapping is not
-*        actually modified by this function).
-*     series
-*        If this value is non-zero, an attempt will be made to
-*        decompose the Mapping into a sequence of equivalent Mappings
-*        which can be applied in series (i.e. one after the other). If
-*        it is zero, the decomposition will instead yield Mappings
-*        which can be applied in parallel (i.e. on successive sub-sets
-*        of the input/output coordinates).
-*     invert
-*        The value to which the Mapping's Invert attribute is to be
-*        (notionally) set before performing the
-*        decomposition. Normally, the value supplied here will be the
-*        actual Invert value obtained from the Mapping (e.g. using
-*        astGetInvert).  Sometimes, however, when a Mapping is
-*        encapsulated within another structure, that structure may
-*        retain an Invert value (in order to prevent external
-*        interference) which should be used instead.
-*
-*        Note that the actual Invert value of the Mapping supplied is
-*        not used (or modified) by this function.
-*     nmap
-*        The address of an int which holds a count of the number of
-*        individual Mappings in the decomposition. On entry, this
-*        should count the number of Mappings already in the
-*        "*map_list" array (below). On exit, it is updated to include
-*        any new Mappings appended by this function.
-*     map_list
-*        Address of a pointer to an array of Mapping pointers. On
-*        entry, this array pointer should either be NULL (if no
-*        Mappings have yet been obtained) or should point at a
-*        dynamically allocated array containing Mapping pointers
-*        ("*nmap" in number) which have been obtained from a previous
-*        invocation of this function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Mapping pointers that result from the decomposition
-*        requested. These pointers will be appended to any previously
-*        present, and the array pointer will be updated as necessary
-*        to refer to the enlarged array (any space released by the
-*        original array will be freed automatically).
-*
-*        The new Mapping pointers returned will identify a sequence of
-*        Mappings which, when applied in order, will perform a forward
-*        transformation equivalent to that of the original Mapping
-*        (after its Invert flag has first been set to the value
-*        requested above). The Mappings should be applied in series or
-*        in parallel according to the type of decomposition requested.
-*
-*        All the Mapping pointers returned by this function should be
-*        annulled by the caller, using astAnnul, when no longer
-*        required. The dynamic array holding these pointers should
-*        also be freed, using astFree.
-*     invert_list
-*        Address of a pointer to an array of int. On entry, this array
-*        pointer should either be NULL (if no Mappings have yet been
-*        obtained) or should point at a dynamically allocated array
-*        containing Invert attribute values ("*nmap" in number) which
-*        have been obtained from a previous invocation of this
-*        function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Invert attribute values that result from the
-*        decomposition requested. These values will be appended to any
-*        previously present, and the array pointer will be updated as
-*        necessary to refer to the enlarged array (any space released
-*        by the original array will be freed automatically).
-*
-*        The new Invert values returned identify the values which must
-*        be assigned to the Invert attributes of the corresponding
-*        Mappings (whose pointers are in the "*map_list" array) before
-*        they are applied. Note that these values may differ from the
-*        actual Invert attribute values of these Mappings, which are
-*        not relevant.
-*
-*        The dynamic array holding these values should be freed by the
-*        caller, using astFree, when no longer required.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied Mapping contained any
-*     inverted CmpMaps.
-
-*  Notes:
-*     - It is unspecified to what extent the original Mapping and the
-*     individual (decomposed) Mappings are
-*     inter-dependent. Consequently, the individual Mappings cannot be
-*     modified without risking modification of the original.
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then the *nmap value, the
-*     list of Mapping pointers and the list of Invert values will all
-*     be returned unchanged.
-*- 
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Since we are dealing with a basic Mapping, only one new Mapping
-   pointer will be returned. Extend the dynamic arrays to accommodate
-   this Mapping. */
-   *map_list = astGrow( *map_list, *nmap + 1, sizeof( AstMapping * ) );
-   *invert_list = astGrow( *invert_list, *nmap + 1, sizeof( int ) );
-   if ( astOK ) {
-
-/* Return the invert flag value for the Mapping and a clone of the
-   Mapping pointer. */
-      ( *invert_list )[ *nmap ] = ( invert != 0 );
-      ( *map_list )[ *nmap ] = astClone( this );
-
-/* If OK, return the new Mapping count. */
-      if ( astOK ) ( *nmap )++;
-   }
-
-   return 0;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*+
-*  Name:
-*     astMapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int astMapMerge( AstMapping *this, int where, int series, int *nmap,
-*                      AstMapping ***map_list, int **invert_list )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated Mapping in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated Mapping with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated Mapping which is to be merged with
-*        its neighbours. This should be a cloned copy of the Mapping
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        Mapping it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated Mapping resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* This is the default method which is inherited by all Mappings which
-   do not explicitly provide their own simplification method. Return
-   -1 to indicate that no simplification is provided. */
-   return -1;
-}
-
-static int *MapSplit( AstMapping *this, int nin, const int *in, 
-                      AstMapping **map, int *status ){
-/*
-*+
-*  Name:
-*     astMapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     Mapping.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int *astMapSplit( AstMapping *this, int nin, const int *in, 
-*                       AstMapping **map )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing Mapping. This is only possible if the specified inputs
-*     correspond to some subset of the Mapping outputs. That is, there
-*     must exist a subset of the Mapping outputs for which each output
-*     depends only on the selected Mapping inputs, and not on any of the
-*     inputs which have not been selected. Also, any output which is not in 
-*     this subset must not depend on any of the selected inputs. If these 
-*     conditions are not met by the supplied Mapping, then a NULL Mapping
-*     is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be split (the Mapping is not
-*        actually modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied Mapping, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be differetn to "nin"). A NULL pointer will be
-*        returned if the supplied Mapping has no subset of outputs which 
-*        depend only on the selected inputs.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied Mapping. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*- 
-
-*  Implementation Notes:
-*     - This function implements the basic astMapSplit method available
-*     via the protected interface to the Mapping class. The public
-*     interface to this method is provided by the astMapSplitId_
-*     function.
-*/
-
-/* Local Variables: */
-   AstCmpMap *rmap;           /* Unsimplified result mapping */
-   AstPermMap *pm;            /* PermMap which rearranges the inputs */
-   int *outperm;              /* PermMap output axis permutation array */   
-   int *result;               /* Pointer to returned array */
-   int iin;                   /* Input index */
-   int iout;                  /* Output index */
-   int mapnin;                /* Number of Mapping inputs */
-   int nout;                  /* No of outputs */
-   int ok;                    /* Can the supplied "in" array be used? */
-   int perm;                  /* Are the inputs permuted? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Verify the input axis indices.*/
-   mapnin = astGetNin( this );
-   for( iin = 0; iin < nin; iin++ ){
-      if( in[ iin ] < 0 || in[ iin ] >= mapnin ) {
-         astError( AST__AXIIN, "astMapSplit(%s): One of the supplied Mapping "
-                   "input indices has value %d which is invalid; it should "
-                   "be in the range 1 to %d.", status, astGetClass( this ), 
-                   in[ iin ] + 1, mapnin );
-         break;
-      }
-   }
-
-/* Since we are dealing with a basic Mapping, we can only create the
-   required output Mapping if all inputs are being selected. */
-   if( nin == mapnin ) {
-
-/* The inputs may have been selected in a different order to that in
-   which they occur in the supplied Mapping. We therefore create a
-   PermMap which rearranges the inputs into the order they have in the
-   supplied Mapping. The supplied "in" array can act as the PermMap's
-   "inperm" array. Allocate memory for the "outperm" array. */
-      outperm = astMalloc( sizeof(int)*(size_t) nin );
-      if( astOK ) {
-
-/* Store the input index for each output in the outperm array and check that 
-   each input has been selected once and only once. Also set a flag
-   indicating if a PermMap is needed. */
-         perm = 0;
-         ok = 1;
-         for( iout = 0; iout < nin; iout++ ) outperm[ iout ] = -1;
-         for( iin = 0; iin < nin; iin++ ) {
-            iout = in[ iin ];
-            if( outperm[ iout ] != -1 ) {
-               ok = 0;
-               break;
-            } else {
-               outperm[ iout ] = iin;
-            }
-         }
-         for( iout = 0; iout < nin; iout++ ) {
-            if( outperm[ iout ] == -1 ) {
-               ok = 0;
-               break;
-            } else if( outperm[ iout ] != iout ) {
-               perm = 1;
-            }
-         }
-         if( ok ) {
-
-/* Allocate the array to hold the returned output indices. */
-            nout = astGetNout( this );
-            result = astMalloc( sizeof(int)*(size_t) nout );
-            if( astOK ) {
-
-/* The outputs are copied from the supplied Mapping. */
-               for( iout = 0; iout < nout; iout++ ) result[ iout ] = iout;
-
-/* If the inputs are to be permuted, create the PermMap. */
-               if( perm ) {
-                  pm = astPermMap( nin, in, nin, outperm, NULL, "", status );
-
-/* The returned Mapping is a series CmpMap containing this PermMap
-   followed by the supplied Mapping. */
-                  rmap = astCmpMap( pm, this, 1, "", status );
-                  *map = astSimplify( rmap );
-                  rmap = astAnnul( rmap );
-
-/* Annul the PermMap pointer. */
-                  pm = astAnnul( pm );
-
-/* If no input permutation is needed, the resturned Mapping is just the
-   supplied Mapping. */
-               } else {
-                  *map = astClone( this );
-               }
-            }
-         }
-
-/* Free resources. */
-         outperm = astFree( outperm );
-      }
-   }
-
-/* Free resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static double MatrixDet( int ndim, const double *matrix, int *status ){
-/*
-*  Name:
-*     MatrixDet
-
-*  Purpose:
-*     Return the determinant of a square matrix.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double MatrixDet( int ndim, const double *matrix, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function returns the determinant of the supplied square matrix.
-
-*  Parameters:
-*     ndim
-*        The number of rows and columns in the matrix.
-*     matrix
-*        The matrix element values. The first row of "ndim" elements
-*        should be supplied first, followed by the second row, etc.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The determinant.
-*/
-
-/* Local Variables: */
-   double result;
-   double *a;
-   double *y;
-   int *iw;
-   int i;
-   int jf;
-
-/* Initialise */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-   if( ndim == 1 ) {
-      result = matrix[ 0 ];
-
-   } else if( ndim == 2 ) {
-      result = matrix[ 0 ]*matrix[ 3 ] - matrix[ 1 ]*matrix[ 2 ];
-
-   } else {
-      a = astStore( NULL, matrix, sizeof( double )*(size_t) (ndim*ndim) );
-      iw = astMalloc( sizeof( int )*(size_t) ndim );
-      y = astMalloc( sizeof( double )*(size_t) ndim );
-      if( y ) {
-         for( i = 0; i < ndim; i++ ) y[ i ] = 1.0;
-         palSlaDmat( ndim, a, y, &result, &jf, iw );
-      }
-      y = astFree( y );
-      iw = astFree( iw );
-      a = astFree( a );
-   }
-
-   return result;
-}
-
-static double MaxD( double a, double b, int *status ) {
-/*
-*  Name:
-*     MaxD
-
-*  Purpose:
-*     Return the maximum of two double values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double MaxD( double a, double b, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function returns the maximum of two double values.
-
-*  Parameters:
-*     a
-*        The first value.
-*     b
-*        The second value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The maximum.
-*/
-
-/* Return the larger value. */
-   return ( a > b ) ? a : b;
-}
-
-static int MaxI( int a, int b, int *status ) {
-/*
-*  Name:
-*     MaxI
-
-*  Purpose:
-*     Return the maximum of two integer values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MaxI( int a, int b, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function returns the maximum of two integer values.
-
-*  Parameters:
-*     a
-*        The first value.
-*     b
-*        The second value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The maximum.
-*/
-
-/* Return the larger value. */
-   return ( a > b ) ? a : b;
-}
-
-static int MinI( int a, int b, int *status ) {
-/*
-*  Name:
-*     MinI
-
-*  Purpose:
-*     Return the minimum of two integer values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MinI( int a, int b, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function returns the minimum of two integer values.
-
-*  Parameters:
-*     a
-*        The first value.
-*     b
-*        The second value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The minimum.
-*/
-
-/* Return the smaller value. */
-   return ( a < b ) ? a : b;
-}
-
-static double NewVertex( const MapData *mapdata, int lo, double scale,
-                         double x[], double f[], int *ncall, double xnew[], int *status ) {
-/*
-*  Name:
-*     NewVertex
-
-*  Purpose:
-*     Locate a new vertex for a simplex.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double NewVertex( const MapData *mapdata, int lo, double scale,
-*                       double x[], double f[], int *ncall, double xnew[], int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function is provided for use during optimisation of a
-*     Mapping function using the simplex method. It generates the
-*     coordinates of a new simplex vertex and evaluates the Mapping
-*     function at that point.  If the function's value is better then
-*     (i.e. larger than) the value at the previously worst vertex,
-*     then it is used to replace that vertex.
-
-*  Parameters:
-*     mapdata
-*        Pointer to a MapData structure which describes the Mapping
-*        function to be used.
-*     lo
-*        The (zero-based) index of the simplex vertex which initially
-*        has the worst (lowest) value.
-*     scale
-*        The scale factor to be used to generate the new vertex. The
-*        distance of the worst vertex from the centre of the face
-*        opposite it is scaled by this factor to give the new vertex
-*        position. Negative factors result in reflection through this
-*        opposite face.
-*     x
-*        An array of double containing the coordinates of the vertices
-*        of the simplex. The coordinates of the first vertex are
-*        stored first, then those of the second vertex, etc. This
-*        array will be updated by this function if the new vertex is
-*        used to replace an existing one.
-*     f
-*        An array of double containing the Mapping function values at
-*        each vertex of the simplex. This array will be updated by
-*        this function if the new vertex is used to replace an
-*        existing one.
-*     ncall
-*        Pointer to an int containing a count of the number of times
-*        the Mapping function has been invoked. This value will be
-*        updated to reflect the actions of this function.
-*     xnew
-*        An array of double with one element for each input coordinate
-*        of the Mapping function. This is used as workspace.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Mapping function value at the new vertex. This value is
-*     returned whether or not the new vertex replaces an existing one.
-
-*  Notes:
-*     - A value of AST__BAD will be returned by this function if it is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*     - A value of AST__BAD will also be returned if the new vertex
-*     lies outside the constrained range of input coordinates
-*     associated with the Mapping function (as specified in the
-*     MapData structure supplied) or if any of the transformed output
-*     coordinates produced by the underlying Mapping is bad. In either
-*     case the new vertex will not be used to replace an existing one.
-*/
-
-/* Local Variables: */
-   double fnew;                  /* Function value at new vertex */
-   double xface;                 /* Coordinate of centre of magnification */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord;                   /* Number of coordinates */
-   int nvertex;                  /* Number of simplex vertices */
-   int vertex;                   /* Loop counter for vertices */
-
-/* Initialise. */
-   fnew = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return fnew;
-   
-/* Obtain the number of Mapping input coordinates from the MapData
-   structure and calculate the number of simplex vertices. */
-   ncoord = mapdata->nin;
-   nvertex = ncoord + 1;
-
-/* Loop to obtain each coordinate of the new vertex. */
-   for ( coord = 0; coord < ncoord; coord++ ) {
-
-/* Loop over all vertices except the lowest one and average their
-   coordinates. This gives the coordinate of the centre of the face
-   opposite the lowest vertex, which will act as the centre of
-   magnification. */
-      xface = 0.0;
-      for ( vertex = 0; vertex < nvertex; vertex++ ) {
-         if ( vertex != lo ) {
-
-/* Divide each coordinate by the number of vertices as the sum is
-   accumulated in order to minimise the risk of overflow. */
-            xface += x[ vertex * ncoord + coord ] /
-                     ( (double ) ( nvertex - 1 ) );
-         }
-      }
-
-/* Magnify the lowest vertex's distance from this point by the
-   required factor to give the coordinates of the new vertex. */
-      xnew[ coord ] = xface + ( x[ lo * ncoord + coord ] - xface ) * scale;
-   }
-
-/* Evaluate the Mapping function at the new vertex. */
-   fnew = MapFunction( mapdata, xnew, ncall, status );
- 
-/* If the result is not bad and exceeds the previous value at the
-   lowest vertex, then replace the lowest vertex with this new one. */
-   if ( astOK && ( fnew != AST__BAD ) && ( fnew > f[ lo ] ) ) {
-      for ( coord = 0; coord < ncoord; coord++ ) {
-         x[ lo * ncoord + coord ] = xnew[ coord ];
-      }
-      f[ lo ] = fnew;
-   }
-
-/* Return the value at the new vertex. */
-   return fnew;
-}
-
-static double Random( long int *seed, int *status ) {
-/*
-*  Name:
-*     Random
-
-*  Purpose:
-*     Return a pseudo-random value in the range 0 to 1.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double Random( long int *seed, int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function returns a pseudo-random double value from a PDF
-*     uniformly distributed in the range 0 to 1. It also updates a
-*     seed value so that a sequence of pseudo-random values may be
-*     obtained with successive invocations.
-
-*  Parameters:
-*     seed
-*        Pointer to a long int which should initially contain a
-*        non-zero seed value. This will be updated with a new seed
-*        which may be supplied on the next invocation in order to
-*        obtain a different pseudo-random value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The pseudo-random value.
-*/
-
-/* Local Variables: */
-   long int i;                   /* Temporary storage */
-
-/* This a basic random number generator using constants given in
-   Numerical Recipes (Press et al.). */
-   i = *seed / 127773;
-   *seed = ( *seed - i * 127773 ) * 16807 - i * 2836;
-   if ( *seed < 0 ) *seed += 2147483647;
-
-/* Return the result as a double value in the range 0 to 1. */
-   return ( (double) ( *seed - 1 ) ) / (double) 2147483646;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*+
-*  Name:
-*     astRate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     result = astRate( AstMapping *this, double *at, int ax1, int ax2 )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function evaluates the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-*
-*     The result is estimated by interpolating the function using a
-*     fourth order polynomial in the neighbourhood of the specified
-*     position. The size of the neighbourhood used is chosen to minimise
-*     the RMS residual per unit length between the interpolating
-*     polynomial and the supplied Mapping function.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-
-*  Returned Value:
-*     astRate()
-*        The rate of change of Mapping output "ax1" with respect to input 
-*        "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*        calculated.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic astRate method available
-*     via the protected interface to the Mapping class. The public
-*     interface to this method is provided by the astRateId_
-*     function.
-*/
-
-/* Local Variables: */
-#define MXY 100
-   double x0, h, s1, s2, sp, r, dh, ed2, ret, rms, h0, x[MXY], y[MXY];
-   int ntry, nin, nout, i, ixy, fitted, fitok;
-   PN *fit;
-
-/* Initialise */
-   ret = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Allocate resources */
-   FunPN( NULL, NULL, -1, 0, 0, NULL, NULL, status );
-
-/* Obtain the numbers of input and output coordinates for the Mapping. */
-   nin = astGetNin( this );
-   nout = astGetNout( this );
-
-/* Validate the output index. */
-   if ( astOK && ( ax1 < 0 || ax1 >= nout ) ) {
-      astError( AST__AXIIN, "astRate(%s): The supplied Mapping output "
-                "index (%d) is invalid; it should be in the range 1 to %d.", status, 
-                astGetClass( this ), ax1 + 1, nout );
-   }
-
-/* Validate the input index. */
-   if ( astOK && ( ax2 < 0 || ax2 >= nin ) ) {
-      astError( AST__AXIIN, "astRate(%s): The supplied Mapping input "
-                "index (%d) is invalid; it should be in the range 1 to %d.", status, 
-                astGetClass( this ), ax2 + 1, nin );
-   }
-
-/* Check the Mapping has a forward transformation. */
-   if ( astOK && !astGetTranForward( this ) ) {
-      astError( AST__NODEF, "astRate(%s): The supplied Mapping does not "
-                "have a defined forward transformation.", status, 
-                astGetClass( this ) );
-   }
-
-/* Save the central value on the Mapping input which is to be varied. */
-   x0 = at[ ax2 ];
-
-/* If it is bad, return bad values. */
-   if( astOK && x0 != AST__BAD ) {
-
-/* The required derivative is estimated by fitting a polynomial to the
-  function over a small range of length "h" centred on the supplied value
-  "x0", and then finding the derivative of this fitting polynomial at "x0".
-  The bulk of the problem lies in choosing a suitable value for the
-  length "h". If "h" is too large, the function is not well fitted by a
-  polynomial and so the returned value is inaccurate. If "h" is too small,
-  then the returned value is dominated by rounding errors and so is again
-  inaccurate. The process tries a series of different values for "h". The
-  initial estimate is formed as a fixed small fraction of the supplied 
-  "x0", or 1.0 if "x0" is zero. */
-      h = ( x0 != 0.0 ) ? DBL_EPSILON*1.0E10*x0 : 1.0;
-
-/* We next find a more reliable estimate based on the probable accuracy
-   of the calculated function values and the rate of change of the
-   derivative of the function in the region of "x0". Find a polynomial fit 
-   to the function over this initial interval. The independant variable 
-   of this fit is (x-x0) and the dependant variable is (y(x)-y(x0). If
-   this fails, repeat up to ten times with a larger "h" value. */
-      fit = FitPN( this, at, ax1, ax2, x0, h, NULL, status );
-      ntry = 0;
-      while( ( !fit || fit->too_small ) && ntry++ < 10 ) {
-         (void) astFree( fit );
-         h *= 1000;
-         fit = FitPN( this, at, ax1, ax2, x0, h, NULL, status );
-      }
-      if( !fit ) return AST__BAD;
-
-/* We need an estimate of how much the derivative may typically change
-   over this interval. The more the derivative changes, the smaller we
-   should make "h" in order to produce a good fit to the polynomial.
-   Calculate the rate of change of the polynomial (i.e the derivative
-   estimate) at a set of 5 evenly spaced points over the interval "h"
-   and then find the standard deviation of the derivative estimates
-   divided by the interval size. At the same time form an estimate of 
-   the RMS polynomial value over the step ("sp"). */  
-      s1 = 0.0;
-      s2 = 0.0;
-      sp = 0.0;
-      dh = h/4.0;
-      for( i = -(RATE_ORDER/2); i < (RATE_ORDER+1)/2; i++ ) {
-         r = EvaluateDPN( fit, i*dh, status );
-         s1 += r;
-         s2 += r*r;
-         r = EvaluatePN( fit, i*dh, status ) + fit->y0;
-         sp += r*r;
-      }
-      s2 /= RATE_ORDER;
-      s1 /= RATE_ORDER;
-      ed2 = s2 - s1*s1;
-      if( ed2 > 0 ) {
-         ed2 = sqrt( ed2 )/h;
-      } else {
-         ed2 = 0.0;
-      }
-      sp = sqrt( sp/RATE_ORDER );
-   
-      fit = astFree( fit );
-
-/* If the derivative estimate does not change significantly over the interval, 
-   return it. */
-      if( ed2 <= 1.0E-10*fabs( s1/h ) ) {
-         ret = s1;
- 
-      } else {
-
-/* Otherwise, we find a better estimate for the step size by assuming a
-   fixed relative error in the function value, and a second derivative 
-   based on the "ed2" value found above. The total error in the
-   derivative estimate is assumed to be of the form:
-
-     (a/h)**2 + (d2*h)**2
-
-   where "a" is the accuracy with which the function can be evaluated 
-   (assumed to be 1.0E5*DBL_EPSILON*sp) and d2 is the second derivative. 
-   The value of "h" below is the value which minimises the above
-   total error expression. */
-
-         h = sqrt( fabs( 1.0E5*DBL_EPSILON*sp/ed2 ) );
-
-/* It turns out that the error in the derivative (i.e. the residual
-   between the true derivative value and the derivative of the fitting
-   polynomial at the "x0" value), is generally equal to the RMS error
-   between the fitting polynomial and the function value, divided by the
-   step size. This error is high for very small step sizes because of
-   rounding error and is also high for large step sizes becase the function
-   is not well fitted by a polynomial. In between there is a minimum
-   which corresponds to the optimal step size. It also turns out that the
-   error in the derivative is a monotonic increasing function for step
-   sizes above the optimal step size. We find the optimal step size by
-   working our way down this monotonic function, in powers of ten, until 
-   the first increase in error is encountered. 
-
-   Starting at the step size found above, note log10( normalised rms error of
-   fit ) at increasing step sizes until the rms error exceeds the 0.2 of
-   the rms function value. Each new step size is a factor 10 times the previous 
-   step size. Once the step size is so large rgat we cannot fit the
-   polynomial, break out of the loop. */
-         h0 = h;
-         ixy = 0;
-         rms = 0.1*sp - 1;
-         fitted = 0;
-         fitok = 1;
-         while( rms < 0.2*sp && ixy < MXY && ( !fitted || fitok ) ) {
-            fit = FitPN( this, at, ax1, ax2, x0, h0, &rms, status );
-            if( fit ) {
-               fitted = 1;
-               fitok = 1;
-
-/* If we come across an exact fit, use it to determine the returned
-   values and break. */
-               if( rms == 0.0 ) { 
-                  ret = fit->coeff[ 1 ];
-                  fit = astFree( fit );
-                  break;
-
-               } else {
-                  if( fit->coeff[ 1 ] != 0.0 ) {
-                     y[ ixy ] = log10( rms/( h0*fabs( fit->coeff[ 1 ] ) ) );
-                  } else {
-                     y[ ixy ] = AST__BAD;
-                  }
-                  fit = astFree( fit );
-               }
-            } else {
-               fitok = 0;
-               y[ ixy ] = AST__BAD;
-            }
-            x[ ixy ] = ixy;
-            ixy++;
-            h0 *= 10.0;
-         }
-
-/* If we found a step size which gave zero rms error, use it. Otherwise, run 
-   down from the largest step size to the smallest looking for the first step 
-   size at which the error increases rather than decreasing. */
-         if( ret == AST__BAD ) {
-            h0 = AST__BAD;
-            ixy--;
-            while( --ixy > 0 ){
-               if( y[ ixy - 1 ] != AST__BAD && 
-                   y[ ixy ] != AST__BAD &&
-                   y[ ixy + 1 ] != AST__BAD ) {         
-                  if( y[ ixy - 1 ] > y[ ixy ] ) {         
-                     h0 = x[ ixy ];
-         
-                     x[ 0 ] = x[ ixy - 1 ];
-                     x[ 1 ] = x[ ixy ];
-                     x[ 2 ] = x[ ixy + 1 ];
-         
-                     y[ 0 ] = y[ ixy - 1 ];
-                     y[ 1 ] = y[ ixy ];
-                     y[ 2 ] = y[ ixy + 1 ];
-         
-                     break;
-                  }
-               }
-            }
-
-/* If no minimum could be found in the above loop, continue decreasing
-   the step size below the value set above until a minimum is found. */
-            if( h0 == AST__BAD ) {
-               h0 = h;
-               ixy = 0;
-               while( y[ 0 ] < y[ 1 ] ) {
-      
-                  h0 *= 0.1;
-                  ixy--;
-                  fit = FitPN( this, at, ax1, ax2, x0, h0, &rms, status );
-                  if( fit ) {
-                     x[ 2 ] = x[ 1 ];
-                     x[ 1 ] = x[ 0 ];
-                     y[ 2 ] = y[ 1 ];
-                     y[ 1 ] = y[ 0 ];
-
-                     if( rms == 0.0 ) { 
-                        ret = fit->coeff[ 1 ];
-                        fit = astFree( fit );
-                        break;
-
-                     } else if( fit->coeff[ 1 ] != 0.0 ) {
-                        x[ 0 ] = ixy;
-                        y[ 0 ] = log10( rms/( h0*fabs( fit->coeff[ 1 ] ) ) );
-
-                     } else {
-                        h0 *= 10.0;
-                        x[ 0 ] = AST__BAD;
-                        break;
-                     }
-                     fit = astFree( fit );
-                  } else {
-                     h0 *= 10.0;
-                     x[ 0 ] = AST__BAD;
-                     break;
-                  }
-               }
-            }
-
-/* If we have found a error which is lower than either of its
-   neighbouring errors, fit a quadratic through the three points and find
-   the power of ten which correspnds to the minimum of the function. */
-            if( ret == AST__BAD ) {
-               if( x[ 0 ] != AST__BAD ) {
-                  fit = InterpPN( 3, x, y, status );
-                  if( fit ){
-                     if( fit->coeff[ 2 ] > 0.0 ) {
-                        h0 = h*pow( 10.0, -0.5*fit->coeff[ 1 ]/fit->coeff[ 2 ] );
-                     }
-                     fit = astFree( fit );
-                  }
-               }
-
-/* Use the best estimate of h to calculate the returned derivatives. */
-               fit = FitPN( this, at, ax1, ax2, x0, h0, &rms, status );
-               if( fit ) {         
-                  ret = fit->coeff[ 1 ];
-                  fit = astFree( fit );
-               }
-            }
-         }
-      }
-   }
-
-/* Free resources */
-   FunPN( NULL, NULL, -2, 0, 0, NULL, NULL, status );
-
-/* Return the result. */
-   return ret;
-#undef MXY
-}
-
-/*
-*++
-*  Name:
-c     astRebin<X>
-f     AST_REBIN<X>
-
-*  Purpose:
-*     Rebin a region of a data grid.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astRebin<X>( AstMapping *this, double wlim, int ndim_in,
-c                      const int lbnd_in[], const int ubnd_in[],
-c                      const <Xtype> in[], const <Xtype> in_var[],
-c                      int spread, const double params[], int flags,
-c                      double tol, int maxpix,
-c                      <Xtype> badval, int ndim_out,
-c                      const int lbnd_out[], const int ubnd_out[],
-c                      const int lbnd[], const int ubnd[],
-c                      <Xtype> out[], <Xtype> out_var[] );
-f     CALL AST_REBIN<X>( THIS, WLIM, NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f                        SPREAD, PARAMS, FLAGS,
-f                        TOL, MAXPIX, BADVAL,
-f                        NDIM_OUT, LBND_OUT, UBND_OUT,
-f                        LBND, UBND, OUT, OUT_VAR, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This is a set of functions for rebinning gridded data (e.g. an
-*     image) under the control of a geometrical transformation, which
-*     is specified by a Mapping.  The functions operate on a pair of
-*     data grids (input and output), each of which may have any number
-*     of dimensions. Rebinning may be restricted to a specified
-*     region of the input grid. An associated grid of error estimates
-*     associated with the input data may also be supplied (in the form
-*     of variance values), so as to produce error estimates for the
-*     rebined output data. Propagation of missing data (bad pixels)
-*     is supported.
-*
-*     Note, if you will be rebining a sequence of input arrays and then 
-*     co-adding them into a single array, the alternative 
-c     astRebinSeq<X> functions
-f     AST_REBINSEQ<X> routines
-*     will in general be more efficient.
-*
-*     You should use a rebinning function which matches the numerical
-*     type of the data you are processing by replacing <X> in
-c     the generic function name astRebin<X> by an appropriate 1- or
-f     the generic function name AST_REBIN<X> by an appropriate 1- or
-*     2-character type code. For example, if you are rebinning data
-c     with type "float", you should use the function astRebinF (see
-f     with type REAL, you should use the function AST_REBINR (see
-*     the "Data Type Codes" section below for the codes appropriate to
-*     other numerical types).
-*
-*     Rebinning of the grid of input data is performed by transforming
-*     the coordinates of the centre of each input grid element (or pixel)
-*     into the coordinate system of the output grid. The input pixel
-*     value is then divided up and assigned to the output pixels in the
-*     neighbourhood of the central output coordinates. A choice of
-*     schemes are provided for determining how each input pixel value is
-*     divided up between the output pixels. In general, each output pixel 
-*     may be assigned values from more than one input pixel. All 
-*     contributions to a given output pixel are summed to produce the
-*     final output pixel value. Output pixels can be set to the supplied
-*     bad value if they receive contributions from an insufficient number
-*     of input pixels. This is controlled by the 
-c     "wlim" parameter.
-f     WLIM argument.
-*
-*     Input pixel coordinates are transformed into the coordinate
-*     system of the output grid using the forward transformation of the
-*     Mapping which is supplied. This means that geometrical features
-*     in the input data are subjected to the Mapping's forward
-*     transformation as they are transferred from the input to the
-*     output grid.
-*
-*     In practice, transforming the coordinates of every pixel of a
-*     large data grid can be time-consuming, especially if the Mapping
-*     involves complicated functions, such as sky projections. To
-*     improve performance, it is therefore possible to approximate
-*     non-linear Mappings by a set of linear transformations which are
-*     applied piece-wise to separate sub-regions of the data. This
-*     approximation process is applied automatically by an adaptive
-*     algorithm, under control of an accuracy criterion which
-*     expresses the maximum tolerable geometrical distortion which may
-*     be introduced, as a fraction of a pixel.
-*     
-*     This algorithm first attempts to approximate the Mapping with a
-*     linear transformation applied over the whole region of the
-*     input grid which is being used. If this proves to be
-*     insufficiently accurate, the input region is sub-divided into
-*     two along its largest dimension and the process is repeated
-*     within each of the resulting sub-regions. This process of
-*     sub-division continues until a sufficiently good linear
-*     approximation is found, or the region to which it is being
-*     applied becomes too small (in which case the original Mapping is
-*     used directly).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to a Mapping, whose forward transformation will be
-*        used to transform the coordinates of pixels in the input
-*        grid into the coordinate system of the output grid. 
-*
-*        The number of input coordinates used by this Mapping (as
-*        given by its Nin attribute) should match the number of input
-c        grid dimensions given by the value of "ndim_in"
-f        grid dimensions given by the value of NDIM_IN
-*        below. Similarly, the number of output coordinates (Nout
-*        attribute) should match the number of output grid dimensions
-c        given by "ndim_out".
-f        given by NDIM_OUT.
-c     wlim
-f     WLIM = DOUBLE PRECISION (Given)
-*        Gives the required number of input pixel values which must contribute
-*        to an output pixel in order for the output pixel value to be
-*        considered valid. If the sum of the input pixel weights contributing 
-*        to an output pixel is less than the supplied
-c        "wlim"
-f        WLIM
-*        value, then the output pixel value is returned set to the
-*        supplied bad value.
-c     ndim_in
-f     NDIM_IN = INTEGER (Given)
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-c     lbnd_in
-f     LBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c     ubnd_in
-f     UBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd_in" and "ubnd_in" together define the shape
-f        Note that LBND_IN and UBND_IN together define the shape
-*        and size of the input grid, its extent along a particular
-c        (j'th) dimension being ubnd_in[j]-lbnd_in[j]+1 (assuming the
-c        index "j" to be zero-based). They also define
-f        (J'th) dimension being UBND_IN(J)-LBND_IN(J)+1. They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-c     in
-f     IN( * ) = <Xtype> (Given)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        input grid, containing the input data to be rebined.  The
-*        numerical type of this array should match the 1- or
-*        2-character type code appended to the function name (e.g. if
-c        you are using astRebinF, the type of each array element
-c        should be "float").
-f        you are using AST_REBINR, the type of each array element
-f        should be REAL).
-*
-*        The storage order of data within this array should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     in_var
-f     IN_VAR( * ) = <Xtype> (Given)
-c        An optional pointer to a second array with the same size and
-c        type as the "in" array. If given, this should contain a set
-c        of non-negative values which represent estimates of the
-c        statistical variance associated with each element of the "in"
-c        array. If this array is supplied (together with the
-c        corresponding "out_var" array), then estimates of the
-c        variance of the rebined output data will be calculated.
-c
-c        If no input variance estimates are being provided, a NULL
-c        pointer should be given.
-f        An optional second array with the same size and type as the
-f        IN array. If the AST__USEVAR flag is set via the FLAGS
-f        argument (below), this array should contain a set of
-f        non-negative values which represent estimates of the
-f        statistical variance associated with each element of the IN
-f        array. Estimates of the variance of the rebined output data
-f        will then be calculated.
-f
-f        If the AST__USEVAR flag is not set, no input variance
-f        estimates are required and this array will not be used. A
-f        dummy (e.g. one-element) array may then be supplied.
-c     spread
-f     SPREAD = INTEGER (Given)
-c        This parameter specifies the scheme to be used for dividing
-f        This argument specifies the scheme to be used for dividing
-*        each input data value up amongst the corresponding output pixels.
-*        It may be used to select
-*        from a set of pre-defined schemes by supplying one of the
-*        values described in the "Pixel Spreading Schemes"
-*        section below.  If a value of zero is supplied, then the
-*        default linear spreading scheme is used (equivalent to
-*        supplying the value AST__LINEAR).
-c     params
-f     PARAMS( * ) = DOUBLE PRECISION (Given)
-c        An optional pointer to an array of double which should contain
-f        An optional array which should contain
-*        any additional parameter values required by the pixel
-*        spreading scheme. If such parameters are required, this
-*        will be noted in the "Pixel Spreading Schemes"
-*        section below.
-*
-c        If no additional parameters are required, this array is not
-c        used and a NULL pointer may be given.
-f        If no additional parameters are required, this array is not
-f        used. A dummy (e.g. one-element) array may then be supplied.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        The bitwise OR of a set of flag values which may be used to
-f        The sum of a set of flag values which may be used to
-*        provide additional control over the rebinning operation. See
-*        the "Control Flags" section below for a description of the
-*        options available.  If no flag values are to be set, a value
-*        of zero should be given.
-c     tol
-f     TOL = DOUBLE PRECISION (Given)
-*        The maximum tolerable geometrical distortion which may be
-*        introduced as a result of approximating non-linear Mappings
-*        by a set of piece-wise linear transformations. This should be
-*        expressed as a displacement in pixels in the output grid's
-*        coordinate system.
-*
-*        If piece-wise linear approximation is not required, a value
-*        of zero may be given. This will ensure that the Mapping is
-*        used without any approximation, but may increase execution
-*        time.
-*        
-*        If the value is too high, discontinuities between the linear
-*        approximations used in adjacent panel will be higher, and may
-*        cause the edges of the panel to be visible when viewing the output 
-*        image at high contrast. If this is a problem, reduce the
-*        tolerance value used.
-c     maxpix
-f     MAXPIX = INTEGER (Given)
-*        A value which specifies an initial scale size (in pixels) for
-*        the adaptive algorithm which approximates non-linear Mappings
-*        with piece-wise linear transformations. Normally, this should
-*        be a large value (larger than any dimension of the region of
-*        the input grid being used). In this case, a first attempt to
-*        approximate the Mapping by a linear transformation will be
-*        made over the entire input region.
-*
-*        If a smaller value is used, the input region will first be
-c        divided into sub-regions whose size does not exceed "maxpix"
-f        divided into sub-regions whose size does not exceed MAXPIX
-*        pixels in any dimension. Only at this point will attempts at
-*        approximation commence.
-*
-*        This value may occasionally be useful in preventing false
-*        convergence of the adaptive algorithm in cases where the
-*        Mapping appears approximately linear on large scales, but has
-*        irregularities (e.g. holes) on smaller scales. A value of,
-*        say, 50 to 100 pixels can also be employed as a safeguard in
-*        general-purpose software, since the effect on performance is
-*        minimal.
-*
-*        If too small a value is given, it will have the effect of
-*        inhibiting linear approximation altogether (equivalent to
-c        setting "tol" to zero). Although this may degrade
-f        setting TOL to zero). Although this may degrade
-*        performance, accurate results will still be obtained.
-c     badval
-f     BADVAL = <Xtype> (Given)
-*        This argument should have the same type as the elements of
-c        the "in" array. It specifies the value used to flag missing
-f        the IN array. It specifies the value used to flag missing
-*        data (bad pixels) in the input and output arrays.
-*
-c        If the AST__USEBAD flag is set via the "flags" parameter,
-f        If the AST__USEBAD flag is set via the FLAGS argument,
-c        then this value is used to test for bad pixels in the "in"
-c        (and "in_var") array(s).
-f        then this value is used to test for bad pixels in the IN
-f        (and IN_VAR) array(s).
-*
-*        In all cases, this value is also used to flag any output
-c        elements in the "out" (and "out_var") array(s) for which
-f        elements in the OUT (and OUT_VAR) array(s) for which
-*        rebined values could not be obtained (see the "Propagation
-*        of Missing Data" section below for details of the
-*        circumstances under which this may occur). 
-c     ndim_out
-f     NDIM_OUT = INTEGER (Given)
-*        The number of dimensions in the output grid. This should be
-*        at least one. It need not necessarily be equal to the number
-*        of dimensions in the input grid.
-c     lbnd_out
-f     LBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the output grid along each dimension.
-c     ubnd_out
-f     UBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the output grid along each dimension.
-*
-c        Note that "lbnd_out" and "ubnd_out" together define the
-f        Note that LBND_OUT and UBND_OUT together define the
-*        shape, size and coordinate system of the output grid in the
-c        same way as "lbnd_in" and "ubnd_in" define the shape, size
-f        same way as LBND_IN and UBND_IN define the shape, size
-*        and coordinate system of the input grid.
-c     lbnd
-f     LBND( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the first pixel in the region
-*        of the input grid which is to be included in the rebined output
-*        array.
-c     ubnd
-f     UBND( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the last pixel in the region of
-*        the input grid which is to be included in the rebined output
-*        array.
-*
-c        Note that "lbnd" and "ubnd" together define the shape and
-f        Note that LBND and UBND together define the shape and
-*        position of a (hyper-)rectangular region of the input grid
-*        which is to be included in the rebined output array. This region
-*        should lie wholly within the extent of the input grid (as
-c        defined by the "lbnd_in" and "ubnd_in" arrays). Regions of
-f        defined by the LBND_IN and UBND_IN arrays). Regions of
-*        the input grid lying outside this region will not be used.
-c     out
-f     OUT( * ) = <Xtype> (Returned)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        output grid, in which the rebined data values will be
-*        returned. The numerical type of this array should match that
-c        of the "in" array, and the data storage order should be such
-f        of the IN array, and the data storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     out_var
-f     OUT_VAR( * ) = <Xtype> (Returned)
-c        An optional pointer to an array with the same type and size
-c        as the "out" array. If given, this array will be used to
-c        return variance estimates for the rebined data values. This
-c        array will only be used if the "in_var" array has also been
-c        supplied.
-f        An optional array with the same type and size as the OUT
-f        array. If the AST__USEVAR flag is set via the FLAGS argument,
-f        this array will be used to return variance estimates for the
-f        rebined data values.
-*
-*        The output variance values will be calculated on the
-*        assumption that errors on the input data values are
-*        statistically independent and that their variance estimates
-*        may simply be summed (with appropriate weighting factors)
-*        when several input pixels contribute to an output data
-*        value. If this assumption is not valid, then the output error
-*        estimates may be biased. In addition, note that the
-*        statistical errors on neighbouring output data values (as
-*        well as the estimates of those errors) may often be
-*        correlated, even if the above assumption about the input data
-*        is correct, because of the pixel spreading schemes
-*        employed.
-*
-c        If no output variance estimates are required, a NULL pointer
-c        should be given.
-f        If the AST__USEVAR flag is not set, no output variance
-f        estimates will be calculated and this array will not be
-f        used. A dummy (e.g. one-element) array may then be supplied.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Data Type Codes:
-*     To select the appropriate rebinning function, you should
-c     replace <X> in the generic function name astRebin<X> with a
-f     replace <X> in the generic function name AST_REBIN<X> with a
-*     1- or 2-character data type code, so as to match the numerical
-*     type <Xtype> of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - I: int
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-*
-c     For example, astRebinD would be used to process "double"
-c     data, while astRebinI would be used to process "int"
-c     data, etc.
-f     For example, AST_REBIND would be used to process DOUBLE
-f     PRECISION data, while AST_REBINI would be used to process
-f     integer data (stored in an INTEGER array), etc.
-*
-*     Note that, unlike 
-c     astResample<X>, the astRebin<X>
-f     AST_RESAMPLE<X>, the AST_REBIN<X>
-*     set of functions does not yet support unsigned integer data types
-*     or integers of different sizes.
-
-*  Pixel Spreading Schemes:
-*     The pixel spreading scheme specifies the Point Spread Function (PSF) 
-*     applied to each input pixel value as it is copied into the output 
-*     array. It can be thought of as the inverse of the sub-pixel 
-*     interpolation schemes used by the
-c     astResample<X> 
-f     AST_RESAMPLE<X>
-*     group of functions. That is, in a sub-pixel interpolation scheme the 
-*     kernel specifies the weight to assign to each input pixel when
-*     forming the weighted mean of the input pixels, whereas the kernel in a 
-*     pixel spreading scheme specifies the fraction of the input data value 
-*     which is to be assigned to each output pixel. As for interpolation, the 
-*     choice of suitable pixel spreading scheme involves stricking a balance 
-*     between schemes which tend to degrade sharp features in the data by 
-*     smoothing them, and those which attempt to preserve sharp features but 
-*     which often tend to introduce unwanted artifacts. See the
-c     astResample<X> 
-f     AST_RESAMPLE<X>
-*     documentation for further discussion.
-*
-*     The binning algorithm used has the ability to introduce artifacts
-*     not seen when using a resampling algorithm. Particularly, when
-*     viewing the output image at high contrast, systems of curves lines
-*     covering the entire image may be visible. These are caused by a
-*     beating effect between the input pixel positions and the output pixels
-*     position, and their nature and strength depend critically upon the
-*     nature of the Mapping and the spreading function being used. In
-*     general, the nearest neighbour spreading function demonstrates this
-*     effect more clearly than the other functions, and for this reason
-*     should be used with caution.
-*
-*     The following values (defined in the 
-c     "ast.h" header file)
-f     AST_PAR include file)
-*     may be assigned to the 
-c     "spread" 
-f     SPREAD 
-*     parameter. See the 
-c     astResample<X> 
-f     AST_RESAMPLE<X>
-*     documentation for details of these schemes including the use of the 
-c     "fspread" and "params" parameters:
-f     FSPREAD and PARAMS arguments:
-*
-*     - AST__NEAREST
-*     - AST__LINEAR
-*     - AST__SINC
-*     - AST__SINCSINC
-*     - AST__SINCCOS
-*     - AST__SINCGAUSS
-*     - AST__SOMBCOS
-*
-*     In addition, the following schemes can be used with 
-f     AST_REBIN<X> but not with AST_RESAMPLE<X>:
-c     astRebin<X> but not with astResample<X>:
-*
-*     - AST__GAUSS: This scheme uses a kernel of the form exp(-k*x*x), with k 
-*     a positive constant determined by the full-width at half-maximum (FWHM).
-*     The FWHM should be supplied in units of output pixels by means of the 
-c     "params[1]"
-f     PARAMS(2) 
-*     value and should be at least 0.1. The 
-c     "params[0]" 
-f     PARAMS(1)
-*     value should be used to specify at what point the Gaussian is truncated 
-*     to zero. This should be given as a number of output pixels on either 
-*     side of the central output point in each dimension (the nearest integer 
-*     value is used).
-
-*  Control Flags:
-c     The following flags are defined in the "ast.h" header file and
-f     The following flags are defined in the AST_PAR include file and
-*     may be used to provide additional control over the rebinning
-*     process. Having selected a set of flags, you should supply the
-c     bitwise OR of their values via the "flags" parameter:
-f     sum of their values via the FLAGS argument:
-*
-*     - AST__USEBAD: Indicates that there may be bad pixels in the
-*     input array(s) which must be recognised by comparing with the
-c     value given for "badval" and propagated to the output array(s).
-f     value given for BADVAL and propagated to the output array(s).
-*     If this flag is not set, all input values are treated literally
-c     and the "badval" value is only used for flagging output array
-f     and the BADVAL value is only used for flagging output array
-*     values.
-f     - AST__USEVAR: Indicates that variance information should be
-f     processed in order to provide estimates of the statistical error
-f     associated with the rebined values. If this flag is not set,
-f     no variance processing will occur and the IN_VAR and OUT_VAR
-f     arrays will not be used. (Note that this flag is only available
-f     in the Fortran interface to AST.)
-
-*  Propagation of Missing Data:
-*     Instances of missing data (bad pixels) in the output grid are
-c     identified by occurrences of the "badval" value in the "out"
-f     identified by occurrences of the BADVAL value in the OUT
-*     array. These are produced if the sum of the weights of the 
-*     contributing input pixels is less than 
-c     "wlim".
-f     WLIM.
-*
-*     An input pixel is considered bad (and is consequently ignored) if 
-*     its
-c     data value is equal to "badval" and the AST__USEBAD flag is
-c     set via the "flags" parameter.
-f     data value is equal to BADVAL and the AST__USEBAD flag is
-f     set via the FLAGS argument.
-*
-*     In addition, associated output variance estimates (if
-c     calculated) may be declared bad and flagged with the "badval"
-c     value in the "out_var" array for similar reasons.
-f     calculated) may be declared bad and flagged with the BADVAL
-f     value in the OUT_VAR array for similar reasons.
-*--
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_REBIN(X,Xtype,IntType) \
-static void Rebin##X( AstMapping *this, double wlim, int ndim_in, \
-                     const int lbnd_in[], const int ubnd_in[], \
-                     const Xtype in[], const Xtype in_var[], \
-                     int spread, const double params[], int flags, \
-                     double tol, int maxpix, Xtype badval, \
-                     int ndim_out, const int lbnd_out[], \
-                     const int ubnd_out[], const int lbnd[], \
-                     const int ubnd[], Xtype out[], Xtype out_var[], int *status ) { \
-\
-/* Local Variables: */ \
-   astDECLARE_GLOBALS            /* Thread-specific data */ \
-   AstMapping *simple;           /* Pointer to simplified Mapping */ \
-   Xtype *d;                     /* Pointer to next output data value */ \
-   Xtype *v;                     /* Pointer to next output variance value */ \
-   double *w;                    /* Pointer to next weight value */ \
-   double *work;                 /* Pointer to weight array */ \
-   int idim;                     /* Loop counter for coordinate dimensions */ \
-   int ipix_out;                 /* Index into output array */ \
-   int nin;                      /* Number of Mapping input coordinates */ \
-   int nout;                     /* Number of Mapping output coordinates */ \
-   int npix;                     /* Number of pixels in input region */ \
-   int npix_out;                 /* Number of pixels in output array */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
-   astGET_GLOBALS(this); \
-\
-/* Obtain values for the Nin and Nout attributes of the Mapping. */ \
-   nin = astGetNin( this ); \
-   nout = astGetNout( this ); \
-\
-/* If OK, check that the number of input grid dimensions matches the \
-   number required by the Mapping and is at least 1. Report an error \
-   if necessary. */ \
-   if ( astOK && ( ( ndim_in != nin ) || ( ndim_in < 1 ) ) ) { \
-      astError( AST__NGDIN, "astRebin"#X"(%s): Bad number of input grid " \
-                "dimensions (%d).", status, astGetClass( this ), ndim_in ); \
-      if ( ndim_in != nin ) { \
-         astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                   "to specify an input position.", status, \
-                   astGetClass( this ), nin, ( nin == 1 ) ? "" : "s" ); \
-      } \
-   } \
-\
-/* If OK, also check that the number of output grid dimensions matches \
-   the number required by the Mapping and is at least 1. Report an \
-   error if necessary. */ \
-   if ( astOK && ( ( ndim_out != nout ) || ( ndim_out < 1 ) ) ) { \
-      astError( AST__NGDIN, "astRebin"#X"(%s): Bad number of output grid " \
-                "dimensions (%d).", status, astGetClass( this ), ndim_out ); \
-      if ( ndim_out != nout ) { \
-         astError( AST__NGDIN, "The %s given generates %s%d coordinate " \
-                   "value%s for each output position.", status, astGetClass( this ), \
-                   ( nout < ndim_out ) ? "only " : "", nout, \
-                   ( nout == 1 ) ? "" : "s" ); \
-      } \
-   } \
-\
-/* Check that the lower and upper bounds of the input grid are \
-   consistent. Report an error if any pair is not. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_in; idim++ ) { \
-         if ( lbnd_in[ idim ] > ubnd_in[ idim ] ) { \
-            astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
-                      "input grid (%d) exceeds corresponding upper bound " \
-                      "(%d).", status, astGetClass( this ), \
-                      lbnd_in[ idim ], ubnd_in[ idim ] ); \
-            astError( AST__GBDIN, "Error in input dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* Check that the positional accuracy tolerance supplied is valid and \
-   report an error if necessary. */ \
-   if ( astOK && ( tol < 0.0 ) ) { \
-      astError( AST__PATIN, "astRebin"#X"(%s): Invalid positional " \
-                "accuracy tolerance (%.*g pixel).", status, \
-                astGetClass( this ), DBL_DIG, tol ); \
-      astError( AST__PATIN, "This value should not be less than zero." , status); \
-   } \
-\
-/* Check that the initial scale size in pixels supplied is valid and \
-   report an error if necessary. */ \
-   if ( astOK && ( maxpix < 0 ) ) { \
-      astError( AST__SSPIN, "astRebin"#X"(%s): Invalid initial scale " \
-                "size in pixels (%d).", status, astGetClass( this ), maxpix ); \
-      astError( AST__SSPIN, "This value should not be less than zero." , status); \
-   } \
-\
-/* Check that the lower and upper bounds of the output grid are \
-   consistent. Report an error if any pair is not. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_out; idim++ ) { \
-         if ( lbnd_out[ idim ] > ubnd_out[ idim ] ) { \
-            astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
-                      "output grid (%d) exceeds corresponding upper bound " \
-                      "(%d).", status, astGetClass( this ), \
-                      lbnd_out[ idim ], ubnd_out[ idim ] ); \
-            astError( AST__GBDIN, "Error in output dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* Similarly check the bounds of the input region. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_out; idim++ ) { \
-         if ( lbnd[ idim ] > ubnd[ idim ] ) { \
-            astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
-                      "input region (%d) exceeds corresponding upper " \
-                      "bound (%d).", status, astGetClass( this ), \
-                      lbnd[ idim ], ubnd[ idim ] ); \
-\
-/* Also check that the input region lies wholly within the input \
-   grid. */ \
-         } else if ( lbnd[ idim ] < lbnd_in[ idim ] ) { \
-            astError( AST__GBDIN, "astRebin"#X"(%s): Lower bound of " \
-                      "input region (%d) is less than corresponding " \
-                      "bound of input grid (%d).", status, astGetClass( this ), \
-                      lbnd[ idim ], lbnd_in[ idim ] ); \
-         } else if ( ubnd[ idim ] > ubnd_in[ idim ] ) { \
-            astError( AST__GBDIN, "astRebin"#X"(%s): Upper bound of " \
-                      "input region (%d) exceeds corresponding " \
-                      "bound of input grid (%d).", status, astGetClass( this ), \
-                      ubnd[ idim ], ubnd_in[ idim ] ); \
-         } \
-\
-/* Say which dimension produced the error. */ \
-         if ( !astOK ) { \
-            astError( AST__GBDIN, "Error in output dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* If OK, loop to determine how many input pixels are to be binned. */ \
-   simple = NULL; \
-   npix = 1; \
-   npix_out = 1; \
-   unsimplified_mapping = this; \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_in; idim++ ) { \
-         npix *= ubnd[ idim ] - lbnd[ idim ] + 1; \
-      } \
-\
-/* Loop to determine how many pixels the output array contains. */ \
-      for ( idim = 0; idim < ndim_out; idim++ ) { \
-         npix_out *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-      } \
-\
-/* If there are sufficient pixels to make it worthwhile, simplify the \
-   Mapping supplied to improve performance. Otherwise, just clone the \
-   Mapping pointer. Note we have already saved a pointer to the original \
-   Mapping so that lower-level functions can use it if they need to report \
-   an error. */ \
-      if ( npix > 1024 ) { \
-         simple = astSimplify( this ); \
-      } else { \
-         simple = astClone( this ); \
-      } \
-   } \
-\
-/* Report an error if the forward transformation of this simplified \
-   Mapping is not defined. */ \
-   if ( !astGetTranForward( simple ) && astOK ) { \
-      astError( AST__TRNND, "astRebin"#X"(%s): An forward coordinate " \
-                "transformation is not defined by the %s supplied.", status, \
-                astGetClass( unsimplified_mapping ), \
-                astGetClass( unsimplified_mapping ) ); \
-   } \
-\
-/* If required, allocate work array to hold the sum of the weights \
-   contributing to each output pixel, and initialise it to zero. */ \
-   if( wlim > 0.0 ) { \
-      work = astMalloc( sizeof( double )*(size_t) npix_out ); \
-      if( work ) { \
-         w = work; \
-         for( ipix_out = 0; ipix_out < npix_out; ipix_out++ ) *(w++) = 0.0; \
-      } \
-   } else { \
-      work = NULL; \
-   } \
-\
-/* Initialise the output arrays to hold zeros. */ \
-   d = out; \
-   if( out_var ) { \
-      v = out_var; \
-      for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, v++ ) { \
-         *d = 0; \
-         *v = 0; \
-      } \
-   } else { \
-      for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++ ) { \
-         *d = 0; \
-      } \
-   } \
-\
-/* Perform the rebinning. Note that we pass all gridded data, the \
-   spread function and the bad pixel value by means of pointer \
-   types that obscure the underlying data type. This is to avoid \
-   having to replicate functions unnecessarily for each data \
-   type. However, we also pass an argument that identifies the data \
-   type we have obscured. */ \
-   RebinAdaptively( simple, ndim_in, lbnd_in, ubnd_in, \
-                    (const void *) in, (const void *) in_var, \
-                    TYPE_##X, spread, \
-                    params, flags, tol, maxpix, \
-                    (const void *) &badval, \
-                    ndim_out, lbnd_out, ubnd_out, \
-                    lbnd, ubnd, npix_out, \
-                    (void *) out, (void *) out_var, work, NULL, status ); \
-\
-/* If required set output pixels bad if they have a total weight less \
-   than "wlim". */ \
-   if( work ) { \
-      w = work; \
-      d = out; \
-      if( out_var ) { \
-         v = out_var; \
-         for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, w++, v++ ) { \
-            if( fabs( *w ) < wlim ) { \
-               *d = badval; \
-               *v = badval; \
-            } \
-         } \
-      } else { \
-         for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, w++ ) { \
-            if( fabs( *w ) < wlim ) *d = badval; \
-         } \
-      } \
-\
-/* Free the work array. */ \
-      work = astFree( work ); \
-   } \
-\
-/* Annul the pointer to the simplified/cloned Mapping. */ \
-   simple = astAnnul( simple ); \
-\
-}
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_REBIN(LD,long double,0)
-#endif
-MAKE_REBIN(D,double,0)
-MAKE_REBIN(F,float,0) 
-MAKE_REBIN(I,int,1)
-
-/* Undefine the macro. */
-#undef MAKE_REBIN
-
-static void RebinAdaptively( AstMapping *this, int ndim_in,
-                            const int *lbnd_in, const int *ubnd_in,
-                            const void *in, const void *in_var,
-                            DataType type, int spread, 
-                            const double *params, int flags, double tol,
-                            int maxpix, const void *badval_ptr,
-                            int ndim_out, const int *lbnd_out,
-                            const int *ubnd_out, const int *lbnd,
-                            const int *ubnd, int npix_out, void *out, 
-                            void *out_var, double *work, int *nused, int *status ){
-/*
-*  Name:
-*     RebinAdaptively
-
-*  Purpose:
-*     Rebin a section of a data grid adaptively.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void RebinAdaptively( AstMapping *this, int ndim_in,
-*                          const int *lbnd_in, const int *ubnd_in,
-*                          const void *in, const void *in_var,
-*                          DataType type, int spread, 
-*                          const double *params, int flags, double tol,
-*                          int maxpix, const void *badval_ptr,
-*                          int ndim_out, const int *lbnd_out,
-*                          const int *ubnd_out, const int *lbnd,
-*                          const int *ubnd, int npix_out, void *out, 
-*                          void *out_var, double *work, int *nused, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function rebins a specified section of a rectangular grid of 
-*     data (with any number of dimensions) into another rectangular grid 
-*     (with a possibly different number of dimensions). The coordinate 
-*     transformation used to convert input pixel coordinates into positions 
-*     in the output grid is given by the forward transformation of the 
-*     Mapping which is supplied.  Any pixel spreading scheme may be specified 
-*     for distributing the flux of an input pixel amongst the output
-*     pixels.
-*
-*     This function is very similar to RebinWithBlocking and RebinSection 
-*     which lie below it in the calling hierarchy. However, this function 
-*     also attempts to adapt to the Mapping supplied and to sub-divide the 
-*     section being rebinned into smaller sections within which a linear 
-*     approximation to the Mapping may be used.  This reduces the number of 
-*     Mapping evaluations, thereby improving efficiency particularly when
-*     complicated Mappings are involved.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose forward transformation may be
-*        used to transform the coordinates of pixels in the input
-*        grid into associated positions in the output grid.
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     in
-*        Pointer to the input array of data to be rebinned (with one
-*        element for each pixel in the input grid). The numerical type
-*        of these data should match the "type" value (below). The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and data type as the "in" array),
-*        which represent estimates of the statistical variance
-*        associated with each element of the "in" array. If this
-*        second array is given (along with the corresponding "out_var"
-*        array), then estimates of the variance of the rebinned data
-*        will also be returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     type
-*        A value taken from the "DataType" enum, which specifies the
-*        data type of the input and output arrays containing the
-*        gridded data (and variance) values.
-*     spread
-*        A value selected from a set of pre-defined macros to identify
-*        which pixel spread function should be used.
-*     params
-*        Pointer to an optional array of parameters that may be passed
-*        to the pixel spread algorithm, if required. If no parameters
-*        are required, a NULL pointer should be supplied.
-*     flags
-*        The bitwise OR of a set of flag values which provide additional 
-*        control over the resampling operation.
-*     tol
-*        The maximum permitted positional error in transforming input
-*        pixel positions into the output grid in order to rebin
-*        it. This should be expressed as a displacement in pixels in
-*        the output grid's coordinate system. If the Mapping's forward
-*        transformation can be approximated by piecewise linear functions 
-*        to this accuracy, then such functions may be used instead of the 
-*        Mapping in order to improve performance. Otherwise, every input 
-*        pixel position will be transformed individually using the Mapping.
-*
-*        If linear approximation is not required, a "tol" value of
-*        zero may be given. This will ensure that the Mapping is used
-*        without any approximation.
-*     maxpix
-*        A value which specifies the largest scale size on which to
-*        search for non-linearities in the Mapping supplied. This
-*        value should be expressed as a number of pixels in the input
-*        grid. The function will break the input section specified
-*        into smaller sub-sections (if necessary), each no larger than
-*        "maxpix" pixels in any dimension, before it attempts to
-*        approximate the Mapping by a linear function over each
-*        sub-section.
-* 
-*        If the value given is larger than the largest dimension of
-*        the input section (the normal recommendation), the function
-*        will initially search for non-linearity on a scale determined
-*        by the size of the input section.  This is almost always
-*        satisfactory. Very occasionally, however, a Mapping may
-*        appear linear on this scale but nevertheless have smaller
-*        irregularities (e.g. "holes") in it.  In such cases, "maxpix"
-*        may be set to a suitably smaller value so as to ensure this
-*        non-linearity is not overlooked. Typically, a value of 50 to
-*        100 pixels might be suitable and should have little effect on
-*        performance.
-*
-*        If too small a value is given, however, it will have the
-*        effect of preventing linear approximation occurring at all
-*        (equivalent to setting "tol" to zero).  Although this may
-*        degrade performance, accurate results will still be obtained.
-*     badval_ptr
-*        If the AST__USEBAD flag is set (above), this parameter is a
-*        pointer to a value which is used to identify bad data and/or
-*        variance values in the input array(s). The referenced value's
-*        data type must match that of the "in" (and "in_var")
-*        arrays. The same value will also be used to flag any output
-*        array elements for which rebinned values could not be
-*        obtained.  The output arrays(s) may be flagged with this
-*        value whether or not the AST__USEBAD flag is set (the
-*        function return value indicates whether any such values have
-*        been produced).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output data grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output data grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output data grid in the same way as "lbnd_in"
-*        and "ubnd_in" define the shape and size of the input grid
-*        (see above).
-*     lbnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the input data grid which is to be rebinned.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the input data grid which is to be rebinned.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the input grid which is to be rebinned. This section 
-*        should lie wholly within the extent of the input grid (as defined 
-*        by the "lbnd_out" and "ubnd_out" arrays). Regions of the input 
-*        grid lying outside this section will be ignored.
-*     npix_out
-*        The number of pixels in the output array.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the rebinned data will be returned.  The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the rebinned values may be returned. This array will only be
-*        used if the "in_var" array has been given.
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     work
-*        An optional pointer to a double array with the same size as 
-*        the "out" array. The contents of this array (if supplied) are
-*        incremented by the accumulated weights assigned to each output pixel.
-*        If no accumulated weights are required, a NULL pointer should be 
-*        given.
-*     nused
-*        An optional pointer to an int which will be incremented by the
-*        number of input values pasted into the output array. Ignored if NULL.
-*     status
-*        Pointer to the inherited status variable.
-*/
-                      
-/* Local Variables: */
-   double *flbnd;                /* Array holding floating point lower bounds */
-   double *fubnd;                /* Array holding floating point upper bounds */
-   double *linear_fit;           /* Pointer to array of fit coefficients */
-   int *hi;                      /* Pointer to array of section upper bounds */
-   int *lo;                      /* Pointer to array of section lower bounds */
-   int coord_in;                 /* Loop counter for input coordinates */
-   int dim;                      /* Output section dimension size */
-   int dimx;                     /* Dimension with maximum section extent */
-   int divide;                   /* Sub-divide the output section? */
-   int i;                        /* Loop count */
-   int isLinear;                 /* Is the transformation linear? */
-   int mxdim;                    /* Largest output section dimension size */
-   int npix;                     /* Number of pixels in output section */
-   int npoint;                   /* Number of points for obtaining a fit */
-   int nvertex;                  /* Number of vertices of output section */
-   int toobig;                   /* Section too big (must sub-divide)? */
-   int toosmall;                 /* Section too small to sub-divide? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   npix = 1;
-   mxdim = 0;
-   dimx = 1;
-   nvertex = 1;
-
-/* Loop through the input grid dimensions. */
-   for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-
-/* Obtain the extent in each dimension of the input section which is
-   to be rebinned, and calculate the total number of pixels it contains. */
-      dim = ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
-      npix *= dim;
-
-/* Find the maximum dimension size of this input section and note which 
-   dimension has this size. */
-      if ( dim > mxdim ) {
-         mxdim = dim;
-         dimx = coord_in;
-      }
-
-/* Calculate how many vertices the output section has. */
-      nvertex *= 2;
-   }
-   
-/* Calculate how many sample points will be needed (by the astLinearApprox 
-   function) to obtain a linear fit to the Mapping's forward transformation. */
-   npoint = 1 + 4 * ndim_in + 2 * nvertex;
-
-/* If the number of pixels in the input section is not at least 4
-   times this number, we will probably not save significant time by
-   attempting to obtain a linear fit, so note that the input section
-   is too small. */
-   toosmall = ( npix < ( 4 * npoint ) );
-
-/* Note if the maximum dimension of the input section exceeds the
-   user-supplied scale factor. */
-   toobig = ( maxpix < mxdim );
-
-/* Assume the Mapping is significantly non-linear before deciding
-   whether to sub-divide the output section. */
-   linear_fit = NULL;
-
-/* If the output section is too small to be worth obtaining a linear
-   fit, or if the accuracy tolerance is zero, we will not
-   sub-divide. This means that the Mapping will be used to transform
-   each pixel's coordinates and no linear approximation will be
-   used. */
-   if ( toosmall || ( tol == 0.0 ) ) {
-      divide = 0;
-
-/* Otherwise, if the largest input section dimension exceeds the
-   scale length given, we will sub-divide. This offers the possibility
-   of obtaining a linear approximation to the Mapping over a reduced
-   range of input coordinates (which will be handled by a recursive
-   invocation of this function). */
-   } else if ( toobig ) {
-      divide = 1;
-
-/* If neither of the above apply, then attempt to fit a linear
-   approximation to the Mapping's forward transformation over the
-   range of coordinates covered by the input section. We need to 
-   temporarily copy the integer bounds into floating point arrays to 
-   use astLinearApprox. */
-   } else {
-
-/* Allocate memory for floating point bounds and for the coefficient array */
-      flbnd = astMalloc( sizeof( double )*(size_t) ndim_in );
-      fubnd = astMalloc( sizeof( double )*(size_t) ndim_in );
-      linear_fit = astMalloc( sizeof( double )*
-                              (size_t) ( ndim_out*( ndim_in + 1 ) ) );
-      if( astOK ) {
-
-/* Copy the bounds into these arrays */
-         for( i = 0; i < ndim_in; i++ ) {
-            flbnd[ i ] = (double) lbnd[ i ];
-            fubnd[ i ] = (double) ubnd[ i ];
-         }
-
-/* Get the linear approximation to the forward transformation. */
-         isLinear = astLinearApprox( this, flbnd, fubnd, tol, linear_fit );
-
-/* Free the coeff array if the inverse transformation is not linear. */
-         if( !isLinear ) linear_fit = astFree( linear_fit );
-
-      } else {
-         linear_fit = astFree( linear_fit );
-      }
-
-/* Free resources */
-      flbnd = astFree( flbnd );
-      fubnd = astFree( fubnd );
-
-/* If a linear fit was obtained, we will use it and therefore do not
-   wish to sub-divide further. Otherwise, we sub-divide in the hope
-   that this may result in a linear fit next time. */
-      divide = !linear_fit;
-   }
-
-/* If no sub-division is required, perform rebinning (in a
-   memory-efficient manner, since the section we are rebinning might
-   still be very large). This will use the linear fit, if obtained
-   above. */
-   if ( astOK ) {
-      if ( !divide ) {
-         RebinWithBlocking( this, linear_fit, ndim_in, lbnd_in, ubnd_in,
-                            in, in_var, type, spread,  params, flags, 
-                            badval_ptr, ndim_out, lbnd_out, ubnd_out, lbnd, 
-                            ubnd, npix_out, out, out_var, work, nused, status );
-
-/* Otherwise, allocate workspace to perform the sub-division. */
-      } else {
-         lo = astMalloc( sizeof( int ) * (size_t) ndim_in );
-         hi = astMalloc( sizeof( int ) * (size_t) ndim_in );
-         if ( astOK ) {
-
-/* Initialise the bounds of a new input section to match the original
-   input section. */
-            for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-               lo[ coord_in ] = lbnd[ coord_in ];
-               hi[ coord_in ] = ubnd[ coord_in ];
-            }
-
-/* Replace the upper bound of the section's largest dimension with the
-   mid-point of the section along this dimension, rounded downwards. */
-            hi[ dimx ] =
-               (int) floor( 0.5 * (double) ( lbnd[ dimx ] + ubnd[ dimx ] ) );
-
-/* Rebin the resulting smaller section using a recursive invocation
-   of this function. */
-            RebinAdaptively( this, ndim_in, lbnd_in, ubnd_in, in, in_var, 
-                             type, spread, params, flags, tol, maxpix,
-                             badval_ptr, ndim_out, lbnd_out, ubnd_out,
-                             lo, hi, npix_out, out, out_var, work, nused, status );
-
-/* Now set up a second section which covers the remaining half of the
-   original input section. */
-            lo[ dimx ] = hi[ dimx ] + 1;
-            hi[ dimx ] = ubnd[ dimx ];
-
-/* If this section contains pixels, resample it in the same way,
-   summing the returned values. */
-            if ( lo[ dimx ] <= hi[ dimx ] ) {
-               RebinAdaptively( this, ndim_in, lbnd_in, ubnd_in, in, in_var, 
-                                type, spread, params, flags, tol, maxpix,
-                                badval_ptr,  ndim_out, lbnd_out, ubnd_out,
-                                lo, hi, npix_out, out, out_var, work, nused, status );
-            }
-         }
-
-/* Free the workspace. */
-         lo = astFree( lo );
-         hi = astFree( hi );
-      }
-   }
-
-/* If coefficients for a linear fit were obtained, then free the space
-   they occupy. */
-   if ( linear_fit ) linear_fit = astFree( linear_fit );
-}
-
-static void RebinSection( AstMapping *this, const double *linear_fit,
-                          int ndim_in, const int *lbnd_in, const int *ubnd_in,
-                          const void *in, const void *in_var, DataType type, 
-                          int spread, const double *params, int flags,
-                          const void *badval_ptr, int ndim_out,
-                          const int *lbnd_out, const int *ubnd_out,
-                          const int *lbnd, const int *ubnd, int npix_out,
-                          void *out, void *out_var, double *work, 
-                          int *nused, int *status ) {
-/*
-*  Name:
-*     RebinSection
-
-*  Purpose:
-*     Rebin a section of a data grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void RebinSection( AstMapping *this, const double *linear_fit,
-*                        int ndim_in, const int *lbnd_in, const int *ubnd_in,
-*                        const void *in, const void *in_var, DataType type, 
-*                        int spread, const double *params, int flags,
-*                        const void *badval_ptr, int ndim_out,
-*                        const int *lbnd_out, const int *ubnd_out,
-*                        const int *lbnd, const int *ubnd, int npix_out,
-*                        void *out, void *out_var, double *work, 
-*                        int *nused )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function rebins a specified section of a rectangular grid of 
-*     data (with any number of dimensions) into another rectangular grid 
-*     (with a possibly different number of dimensions). The coordinate 
-*     transformation used to convert input pixel coordinates into positions 
-*     in the output grid is given by the forward transformation of the 
-*     Mapping which is supplied or, alternatively, by a linear approximation 
-*     fitted to a Mapping's forward transformation. Any pixel spreading scheme 
-*     may be specified for distributing the flux of an input pixel amongst 
-*     the output pixels.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose forward transformation may be
-*        used to transform the coordinates of pixels in the input
-*        grid into associated positions in the output grid.
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     linear_fit
-*        Pointer to an optional array of double which contains the
-*        coefficients of a linear fit which approximates the above
-*        Mapping's forward coordinate transformation. If this is
-*        supplied, it will be used in preference to the above Mapping
-*        when transforming coordinates. This may be used to enhance
-*        performance in cases where evaluation of the Mapping's
-*        forward transformation is expensive. If no linear fit is
-*        available, a NULL pointer should be supplied.
-*
-*        The way in which the fit coefficients are stored in this
-*        array and the number of array elements are as defined by the
-*        astLinearApprox function.
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     in
-*        Pointer to the input array of data to be rebinned (with one
-*        element for each pixel in the input grid). The numerical type
-*        of these data should match the "type" value (below). The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and data type as the "in" array),
-*        which represent estimates of the statistical variance
-*        associated with each element of the "in" array. If this
-*        second array is given (along with the corresponding "out_var"
-*        array), then estimates of the variance of the rebinned data
-*        will also be returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     type
-*        A value taken from the "DataType" enum, which specifies the
-*        data type of the input and output arrays containing the
-*        gridded data (and variance) values.
-*     spread
-*        A value selected from a set of pre-defined macros to identify
-*        which pixel spread function should be used.
-*     params
-*        Pointer to an optional array of parameters that may be passed
-*        to the pixel spread algorithm, if required. If no parameters
-*        are required, a NULL pointer should be supplied.
-*     flags
-*        The bitwise OR of a set of flag values which provide additional 
-*        control over the resampling operation.
-*     badval_ptr
-*        If the AST__USEBAD flag is set (above), this parameter is a
-*        pointer to a value which is used to identify bad data and/or
-*        variance values in the input array(s). The referenced value's
-*        data type must match that of the "in" (and "in_var")
-*        arrays. The same value will also be used to flag any output
-*        array elements for which rebinned values could not be
-*        obtained.  The output arrays(s) may be flagged with this
-*        value whether or not the AST__USEBAD flag is set (the
-*        function return value indicates whether any such values have
-*        been produced).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output data grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output data grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output data grid in the same way as "lbnd_in"
-*        and "ubnd_in" define the shape and size of the input grid
-*        (see above).
-*     lbnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the input data grid which is to be rebinned.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the input data grid which is to be rebinned.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the input grid which is to be rebinned. This section 
-*        should lie wholly within the extent of the input grid (as defined 
-*        by the "lbnd_out" and "ubnd_out" arrays). Regions of the input 
-*        grid lying outside this section will be ignored.
-*     npix_out
-*        The number of pixels in the output array.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the rebinned data will be returned.  The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the rebinned values may be returned. This array will only be
-*        used if the "in_var" array has been given.
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     work
-*        An optional pointer to a double array with the same size as 
-*        the "out" array. The contents of this array (if supplied) are
-*        incremented by the accumulated weights assigned to each output pixel.
-*        If no accumulated weights are required, a NULL pointer should be 
-*        given.
-*     nused
-*        An optional pointer to an int which will be incremented by the
-*        number of input values pasted into the output array. Ignored if NULL.
-
-*  Notes:
-*     - This function does not take steps to limit memory usage if the
-*     grids supplied are large. To resample large grids in a more
-*     memory-efficient way, the ResampleWithBlocking function should
-*     be used.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific data */ 
-   AstPointSet *pset_in;         /* Input PointSet for transformation */
-   AstPointSet *pset_out;        /* Output PointSet for transformation */
-   const double *grad;           /* Pointer to gradient matrix of linear fit */
-   const double *zero;           /* Pointer to zero point array of fit */
-   double **ptr_in;              /* Pointer to input PointSet coordinates */
-   double **ptr_out;             /* Pointer to output PointSet coordinates */
-   double *accum;                /* Pointer to array of accumulated sums */
-   double x1;                    /* Interim x coordinate value */
-   double xx1;                   /* Initial x coordinate value */
-   double y1;                    /* Interim y coordinate value */
-   double yy1;                   /* Initial y coordinate value */
-   int *dim;                     /* Pointer to array of output pixel indices */
-   int *offset;                  /* Pointer to array of output pixel offsets */
-   int *stride;                  /* Pointer to array of output grid strides */
-   int coord_in;                 /* Loop counter for input dimensions */
-   int coord_out;                /* Loop counter for output dimensions */
-   int done;                     /* All pixel indices done? */
-   int i1;                       /* Interim offset into "accum" array */
-   int i2;                       /* Final offset into "accum" array */
-   int idim;                     /* Loop counter for dimensions */
-   int ix;                       /* Loop counter for output x coordinate */
-   int iy;                       /* Loop counter for output y coordinate */
-   int neighb;                   /* Number of neighbouring pixels */
-   int npoint;                   /* Number of output points (pixels) */
-   int off1;                     /* Interim pixel offset into output array */
-   int off2;                     /* Interim pixel offset into output array */
-   int off;                      /* Final pixel offset into output array */
-   int point;                    /* Counter for output points (pixels ) */
-   int s;                        /* Temporary variable for strides */
-   const double *par;            /* Pointer to parameter array */
-   double fwhm;                  /* Full width half max. of gaussian */
-   double lpar[ 1 ];             /* Local parameter array */
-   void (* kernel)( double, const double [], int, double *, int * ); /* Kernel fn. */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to a structure holding thread-specific global data values */
-   astGET_GLOBALS(this);
- 
-/* Further initialisation. */
-   pset_in = NULL;
-   ptr_in = NULL;
-   ptr_out = NULL;
-   pset_out = NULL;
-   neighb = 0;
-   kernel = NULL;
-
-/* Calculate the number of input points, as given by the product of
-   the input grid dimensions. */
-   for ( npoint = 1, coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-      npoint *= ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
-   }
-
-/* Allocate workspace. */
-   offset = astMalloc( sizeof( int ) * (size_t) npoint );
-   stride = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   if ( astOK ) {
-
-/* Calculate the stride for each input grid dimension. */
-      off = 0;
-      s = 1;
-      for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-         stride[ coord_in ] = s;
-         s *= ubnd_in[ coord_in ] - lbnd_in[ coord_in ] + 1;
-      }
-
-/* A linear fit to the Mapping is available. */
-/* ========================================= */
-      if ( linear_fit ) {
-
-/* If a linear fit to the Mapping has been provided, then obtain
-   pointers to the array of gradients and zero-points comprising the
-   fit. */
-         grad = linear_fit + ndim_out;
-         zero = linear_fit;
-
-/* Create a PointSet to hold the output grid coordinates and obtain an
-   array of pointers to its coordinate data. */
-         pset_out = astPointSet( npoint, ndim_out, "", status );
-         ptr_out = astGetPoints( pset_out );
-         if ( astOK ) {
-
-/* Initialise the count of input points. */
-            point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
-            if ( ( ndim_in == 1 ) && ( ndim_out == 1 ) ) {
-
-/* Loop through the pixels of the input grid and transform their x
-   coordinates into the output grid's coordinate system using the
-   linear fit supplied. Store the results in the PointSet created
-   above. */
-               off = lbnd[ 0 ] - lbnd_in[ 0 ];
-               xx1 = zero[ 0 ] + grad[ 0 ] * (double) lbnd[ 0 ];
-
-               for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                  ptr_out[ 0 ][ point ] = xx1;
-                  xx1 += grad[ 0 ];
-                  offset[ point++ ] = off++;
-               }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
-            } else if ( ( ndim_in == 2 ) && ( ndim_out == 2 ) ) {
-
-/* Loop through the range of y coordinates in the input grid and
-   calculate interim values of the output coordinates using the linear
-   fit supplied. */
-               x1 = zero[ 0 ] + grad[ 1 ] * (double) ( lbnd[ 1 ] - 1 );
-               y1 = zero[ 1 ] + grad[ 3 ] * (double) ( lbnd[ 1 ] - 1 );
-               off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 ) - lbnd_in[ 0 ];
-               for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
-                  x1 += grad[ 1 ];
-                  y1 += grad[ 3 ];
-
-/* Also calculate an interim pixel offset into the input array. */
-                  off1 += stride[ 1 ];
-
-/* Now loop through the range of input x coordinates and calculate
-   the final values of the input coordinates, storing the results in
-   the PointSet created above. */
-                  xx1 = x1 + grad[ 0 ] * (double) lbnd[ 0 ];
-                  yy1 = y1 + grad[ 2 ] * (double) lbnd[ 0 ];
-                  off = off1 + lbnd[ 0 ];
-                  for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                     ptr_out[ 0 ][ point ] = xx1;
-                     xx1 += grad[ 0 ];
-                     ptr_out[ 1 ][ point ] = yy1;
-                     yy1 += grad[ 2 ];
-
-/* Also calculate final pixel offsets into the input array. */
-                     offset[ point++ ] = off++;
-                  }
-               }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */               
-            } else {
-
-/* Allocate workspace. */
-               accum = astMalloc( sizeof( double ) *
-                                 (size_t) ( ndim_in * ndim_out ) );
-               dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
-               if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which refer to the 
-   first pixel which we will rebin. Also calculate the offset of this pixel 
-   within the input array. */
-                  off = 0;
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     dim[ coord_in ] = lbnd[ coord_in ];
-                     off += stride[ coord_in ] *
-                            ( dim[ coord_in ] - lbnd_in[ coord_in ] );
-                  }
-
-/* To calculate each output grid coordinate we must perform a matrix
-   multiply on the input grid coordinates (using the gradient matrix)
-   and then add the zero points. However, since we will usually only
-   be altering one input coordinate at a time (the least
-   significant), we can avoid the full matrix multiply by accumulating
-   partial sums for the most significant input coordinates and only
-   altering those sums which need to change each time. The zero points
-   never change, so we first fill the "most significant" end of the
-   "accum" array with these. */
-                  for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                     accum[ ( coord_out + 1 ) * ndim_in - 1 ] =
-                                                              zero[ coord_out ];
-                  }
-                  coord_in = ndim_in - 1;
-
-/* Now loop to process each input pixel. */
-                  for ( done = 0; !done; point++ ) {
-
-/* To generate the output coordinate that corresponds to the current
-   input pixel, we work down from the most significant dimension
-   whose index has changed since the previous pixel we considered
-   (given by "coord_in"). For each affected dimension, we accumulate
-   in "accum" the matrix sum (including the zero point) for that
-   dimension and all higher input dimensions. We must accumulate a
-   separate set of sums for each output coordinate we wish to
-   produce. (Note that for the first pixel we process, all dimensions
-   are considered "changed", so we start by initialising the whole
-   "accum" array.) */
-                     for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-/*
-                        ptr_out[ coord_out ][ point ] = zero[ coord_out ];
-                        for ( idim = 0; idim < ndim_in; idim++ ) {
-                           ptr_out[ coord_out ][ point ] += 
-                                 grad[ idim + coord_out*ndim_in ] *
-                                 dim[ idim ];
-                        }
-*/
-
-                        i1 = coord_out * ndim_in;
-                        for ( idim = coord_in; idim >= 1; idim-- ) {
-                           i2 = i1 + idim;
-                           accum[ i2 - 1 ] = accum[ i2 ] +
-                                             dim[ idim ] * grad[ i2 ];
-                        }
-
-/* The output coordinate for each dimension is given by the accumulated
-   sum for input dimension zero (giving the sum over all input
-   dimensions). We do not store this in the "accum" array, but assign
-   the result directly to the coordinate array of the PointSet created
-   earlier. */
-                        ptr_out[ coord_out ][ point ] = accum[ i1 ] +
-                                                      dim[ 0 ] * grad[ i1 ];
-                     }
-
-/* Store the offset of the current pixel in the input array. */
-                     offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input pixel. */
-                     coord_in = 0;
-                     do {
-
-/* The least significant index which currently has less than its maximum 
-   value is incremented by one. The offset into the input array is updated 
-   accordingly. */
-                        if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
-                           dim[ coord_in ]++;
-                           off += stride[ coord_in ];
-                           break;
-
-/* Any less significant indices which have reached their maximum value
-   are returned to their minimum value and the input pixel offset is
-   decremented appropriately. */
-                        } else {
-                           dim[ coord_in ] = lbnd[ coord_in ];
-                           off -= stride[ coord_in ] *
-                                  ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the output pixels have been processed once the most significant
-   pixel index has been returned to its minimum value. */
-                           done = ( ++coord_in == ndim_in );
-                        }
-                     } while ( !done );
-                  }
-               }
-
-/* Free the workspace. */
-               accum = astFree( accum );
-               dim = astFree( dim );
-            }
-         }
-
-/* No linear fit to the Mapping is available. */
-/* ========================================== */
-      } else {
-
-/* Create a PointSet to hold the coordinates of the input pixels and
-   obtain a pointer to its coordinate data. */
-         pset_in = astPointSet( npoint, ndim_in, "", status );
-         ptr_in = astGetPoints( pset_in );
-         if ( astOK ) {
-
-/* Initialise the count of input points. */
-            point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
-            if ( ndim_in == 1 && ndim_out == 1 ) {
-
-/* Loop through the required range of input x coordinates, assigning
-   the coordinate values to the PointSet created above. Also store a
-   pixel offset into the input array. */
-               for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                  ptr_in[ 0 ][ point ] = (double) ix;
-                  offset[ point++ ] = ix - lbnd_in[ 0 ];
-               }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
-            } else if ( ndim_in == 2 && ndim_out == 2) {
-
-/* Loop through the required range of input y coordinates,
-   calculating an interim pixel offset into the input array. */
-               off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 ) 
-                      - lbnd_in[ 0 ];
-               for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
-                  off1 += stride[ 1 ];
-
-/* Loop through the required range of input x coordinates, assigning
-   the coordinate values to the PointSet created above. Also store a
-   final pixel offset into the input array. */
-                  off2 = off1 + lbnd[ 0 ];
-                  for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                     ptr_in[ 0 ][ point ] = (double) ix;
-                     ptr_in[ 1 ][ point ] = (double) iy;
-                     offset[ point++ ] = off2++;
-                  }
-               }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
-            } else {
-
-/* Allocate workspace. */
-               dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
-               if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which
-   refer to the first pixel to be rebinned. Also calculate the offset 
-   of this pixel within the input array. */
-                  off = 0;
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     dim[ coord_in ] = lbnd[ coord_in ];
-                     off += stride[ coord_in ] *
-                            ( dim[ coord_in ] - lbnd_in[ coord_in ] );
-                  }
-
-/* Loop to generate the coordinates of each input pixel. */
-                  for ( done = 0; !done; point++ ) {
-
-/* Copy each pixel's coordinates into the PointSet created above. */
-                     for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                        ptr_in[ coord_in ][ point ] =
-                                                     (double) dim[ coord_in ];
-                    }
-
-/* Store the offset of the pixel in the input array. */
-                     offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input
-   pixel. */
-                     coord_in = 0;
-                     do {
-
-/* The least significant index which currently has less than its
-   maximum value is incremented by one. The offset into the input
-   array is updated accordingly. */
-                        if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
-                           dim[ coord_in ]++;
-                           off += stride[ coord_in ];
-                           break;
-
-/* Any less significant indices which have reached their maximum value
-   are returned to their minimum value and the input pixel offset is
-   decremented appropriately. */
-                        } else {
-                           dim[ coord_in ] = lbnd[ coord_in ];
-                           off -= stride[ coord_in ] *
-                                  ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the input pixels have been processed once the most significant
-   pixel index has been returned to its minimum value. */
-                           done = ( ++coord_in == ndim_in );
-                        }
-                     } while ( !done );
-                  }
-               }
-
-/* Free the workspace. */
-               dim = astFree( dim );
-            }
-
-/* When all the input pixel coordinates have been generated, use the
-   Mapping's forward transformation to generate the output coordinates
-   from them. Obtain an array of pointers to the resulting coordinate
-   data. */
-            pset_out = astTransform( this, pset_in, 1, NULL );
-            ptr_out = astGetPoints( pset_out );
-         }
-
-/* Annul the PointSet containing the input coordinates. */
-         pset_in = astAnnul( pset_in );
-      }
-   }
-
-
-/* Rebin the input grid. */
-/* ------------------------ */
-   if( astOK ) {
-
-/* Identify the pixel spreading scheme to be used. */
-/* Nearest pixel. */
-/* -------------- */
-      switch ( spread ) {
-         case AST__NEAREST:
-
-/* Define a macro to use a "case" statement to invoke the
-   nearest-pixel spreading function appropriate to a given data
-   type. */
-#define CASE_NEAREST(X,Xtype) \
-               case ( TYPE_##X ): \
-                  SpreadNearest##X( ndim_out, lbnd_out, ubnd_out, \
-                                    (Xtype *) in, (Xtype *) in_var, \
-                                    npoint, offset, \
-                                    (const double *const *) ptr_out, \
-                                    flags, *( (Xtype *) badval_ptr ), \
-                                    npix_out, (Xtype *) out, \
-                                    (Xtype *) out_var, work, nused, status ); \
-                  break;
-       
-/* Use the above macro to invoke the appropriate function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_NEAREST(LD,long double)
-#endif
-               CASE_NEAREST(D,double)
-               CASE_NEAREST(F,float)
-               CASE_NEAREST(I,int)
-
-               case ( TYPE_L ): break;
-               case ( TYPE_B ): break;
-               case ( TYPE_S ): break;
-               case ( TYPE_UL ): break;
-               case ( TYPE_UI ): break;
-               case ( TYPE_US ): break;
-               case ( TYPE_UB ): break;
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_NEAREST
-               
-/* Linear spreading. */
-/* ----------------- */
-/* Note this is also the default if zero is given. */
-         case AST__LINEAR:
-         case 0:
-
-/* Define a macro to use a "case" statement to invoke the linear
-   spreading function appropriate to a given data type. */
-#define CASE_LINEAR(X,Xtype) \
-               case ( TYPE_##X ): \
-                  SpreadLinear##X( ndim_out, lbnd_out, ubnd_out,\
-                                   (Xtype *) in, (Xtype *) in_var, \
-                                   npoint, offset, \
-                                   (const double *const *) ptr_out, \
-                                   flags, *( (Xtype *) badval_ptr ), \
-                                   npix_out, (Xtype *) out, \
-                                   (Xtype *) out_var, work, nused, status ); \
-                  break;
-
-/* Use the above macro to invoke the appropriate function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_LINEAR(LD,long double)
-#endif
-               CASE_LINEAR(D,double)
-               CASE_LINEAR(F,float)
-               CASE_LINEAR(I,int)
-
-               case ( TYPE_L ): break;
-               case ( TYPE_B ): break;
-               case ( TYPE_S ): break;
-               case ( TYPE_UL ): break;
-               case ( TYPE_UI ): break;
-               case ( TYPE_US ): break;
-               case ( TYPE_UB ): break;
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_LINEAR
-
-/* Spreading using a 1-d kernel. */
-/* ----------------------------- */
-         case AST__SINC:
-         case AST__SINCCOS:
-         case AST__SINCGAUSS:
-         case AST__GAUSS:
-         case AST__SINCSINC:
-         case AST__SOMB:
-         case AST__SOMBCOS:
-
-/* Obtain a pointer to the appropriate 1-d kernel function (either
-   internal or user-defined) and set up any parameters it may
-   require. */
-            par = NULL;
-            switch ( spread ) {
-
-/* sinc(pi*x) */
-/* ---------- */
-/* Assign the kernel function. */
-               case AST__SINC:
-                  kernel = Sinc;
-
-/* Calculate the number of neighbouring pixels to use. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) {
-                     neighb = 2;
-                  } else {
-                     neighb = MaxI( 1, neighb, status );
-                  }
-                  break;
-
-/* somb(pi*x) */
-/* ---------- */
-/* Assign the kernel function. */
-               case AST__SOMB:
-                  kernel = Somb;
-
-/* Calculate the number of neighbouring pixels to use. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) {
-                     neighb = 2;
-                  } else {
-                     neighb = MaxI( 1, neighb, status );
-                  }
-                  break;
-
-/* sinc(pi*x)*cos(k*pi*x) */
-/* ---------------------- */
-/* Assign the kernel function. */
-               case AST__SINCCOS:
-                  kernel = SincCos;
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, the number will be calculated automatically below. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
-   width of the kernel, and use this value if preferable. */
-                  neighb = MinI( neighb,
-                                 (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
-                  break;
-
-/* sinc(pi*x)*exp(-k*x*x) */
-/* ---------------------- */
-/* Assign the kernel function. */
-               case AST__SINCGAUSS:
-                  kernel = SincGauss;
-
-/* Constrain the full width half maximum of the gaussian factor. */
-                  fwhm = MaxD( 0.1, params[ 1 ], status );
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 4.0 * log( 2.0 ) / ( fwhm * fwhm );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, use the number of neighbouring pixels required by the width
-   of the kernel (out to where the gaussian term falls to 1% of its
-   peak value). */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = (int) ceil( sqrt( -log( 0.01 ) /
-                                                                lpar[ 0 ] ) );
-                  break;
-
-/* exp(-k*x*x) */
-/* ----------- */
-/* Assign the kernel function. */
-               case AST__GAUSS:
-                  kernel = Gauss;
-
-/* Constrain the full width half maximum of the gaussian. */
-                  fwhm = MaxD( 0.1, params[ 1 ], status );
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 4.0 * log( 2.0 ) / ( fwhm * fwhm );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, use the number of neighbouring pixels required by the width
-   of the kernel (out to where the gaussian term falls to 1% of its
-   peak value). */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = (int) ceil( sqrt( -log( 0.01 ) /
-                                                                lpar[ 0 ] ) );
-                  break;
-
-/* somb(pi*x)*cos(k*pi*x) */
-/* ---------------------- */
-/* Assign the kernel function. */
-               case AST__SOMBCOS:
-                  kernel = SombCos;
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, the number will be calculated automatically below. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
-   width of the kernel, and use this value if preferable. */
-                  neighb = MinI( neighb,
-                                 (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
-                  break;
-
-/* sinc(pi*x)*sinc(k*pi*x) */
-/* ----------------------- */
-/* Assign the kernel function. */
-               case AST__SINCSINC:
-                  kernel = SincSinc;
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, the number will be calculated automatically below. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
-   width of the kernel, and use this value if preferable. */
-                  neighb = MinI( neighb,
-                                 (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
-                  break;
-            }
-
-/* Define a macro to use a "case" statement to invoke the 1-d kernel
-   interpolation function appropriate to a given data type, passing it
-   the pointer to the kernel function obtained above. */
-#define CASE_KERNEL1(X,Xtype) \
-               case ( TYPE_##X ): \
-                  SpreadKernel1##X( this, ndim_out, lbnd_out, ubnd_out, \
-                                         (Xtype *) in, (Xtype *) in_var, \
-                                         npoint, offset, \
-                                         (const double *const *) ptr_out, \
-                                         kernel, neighb, par, flags, \
-                                         *( (Xtype *) badval_ptr ), \
-                                         npix_out, (Xtype *) out, \
-                                         (Xtype *) out_var, work, nused, status ); \
-                  break;
-
-/* Use the above macro to invoke the appropriate function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_KERNEL1(LD,long double)
-#endif
-               CASE_KERNEL1(D,double)
-               CASE_KERNEL1(F,float)
-               CASE_KERNEL1(I,int)
-
-               case ( TYPE_L ): break;
-               case ( TYPE_B ): break;
-               case ( TYPE_S ): break;
-               case ( TYPE_UL ): break;
-               case ( TYPE_UI ): break;
-               case ( TYPE_US ): break;
-               case ( TYPE_UB ): break;
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_KERNEL1
-
-/* Error: invalid pixel spreading scheme specified. */
-/* ------------------------------------------------ */
-         default:
-
-/* Define a macro to report an error message appropriate to a given
-   data type. */
-#define CASE_ERROR(X) \
-            case TYPE_##X: \
-               astError( AST__SISIN, "astRebin"#X"(%s): Invalid " \
-                         "pixel spreading scheme (%d) specified.", status, \
-                         astGetClass( unsimplified_mapping ), spread ); \
-               break;
-                                 
-/* Use the above macro to report an appropriate error message. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_ERROR(LD)
-#endif
-               CASE_ERROR(D)
-               CASE_ERROR(F)
-               CASE_ERROR(I)
-
-               case ( TYPE_L ): break;
-               case ( TYPE_B ): break;
-               case ( TYPE_S ): break;
-               case ( TYPE_UL ): break;
-               case ( TYPE_UI ): break;
-               case ( TYPE_US ): break;
-               case ( TYPE_UB ): break;
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_ERROR
-      }
-   }
-
-/* Annul the PointSet used to hold output coordinates. */
-   pset_out = astAnnul( pset_out );
-
-/* Free the workspace. */
-   offset = astFree( offset );
-   stride = astFree( stride );
-}
-
-/*
-*++
-*  Name:
-c     astRebinSeq<X>
-f     AST_REBINSEQ<X>
-
-*  Purpose:
-*     Rebin a region of a sequence of data grids.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astRebinSeq<X>( AstMapping *this, double wlim, int ndim_in,
-c                          const int lbnd_in[], const int ubnd_in[],
-c                          const <Xtype> in[], const <Xtype> in_var[],
-c                          int spread, const double params[], int flags,
-c                          double tol, int maxpix, <Xtype> badval, 
-c                          int ndim_out, const int lbnd_out[], 
-c                          const int ubnd_out[], const int lbnd[], 
-c                          const int ubnd[], <Xtype> out[], <Xtype> out_var[], 
-c                          double weights[], int *nused );
-f     CALL AST_REBINSEQ<X>( THIS, WLIM, NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f                           SPREAD, PARAMS, FLAGS, TOL, MAXPIX, BADVAL,
-f                           NDIM_OUT, LBND_OUT, UBND_OUT, LBND, UBND, OUT, 
-f                           OUT_VAR, WEIGHTS, NUSED, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This set of 
-c     functions is identical to astRebin<X>
-f     routines is identical to AST_REBIN<X>
-*     except that the rebinned input data is added into the supplied
-*     output arrays, rather than simply over-writing the contents of the 
-*     output arrays. Thus, by calling this 
-c     function
-f     routine
-*     repeatedly, a sequence of input arrays can be rebinned and accumulated 
-*     into a single output array, effectively forming a mosaic of the
-*     input data arrays.
-*
-*     In addition, the weights associated with each output pixel are
-*     returned. The weight of an output pixel indicates the number of input 
-*     pixels which have been accumulated in that output pixel. If the entire
-*     value of an input pixel is assigned to a single output pixel, then the 
-*     weight of that output pixel is incremented by one. If some fraction of 
-*     the value of an input pixel is assigned to an output pixel, then the 
-*     weight of that output pixel is incremented by the fraction used.
-*
-*     The start of a new sequence is indicated by specifying the 
-*     AST__REBININIT flag via the
-c     "flags" parameter.
-f     FLAGS argument.
-*     This causes the supplied arrays to be filled with zeros before the 
-*     rebinned input data is added into them. Subsequenct invocations
-*     within the same sequence should omit the AST__REBININIT flag.
-*
-*     The last call in a sequence is indicated by specifying the AST__REBINEND 
-*     flag. This causes the output data and variance arrays to be normalised 
-*     before being returned. This normalisation consists of dividing the data 
-*     array by the weights array, and can eliminate artifacts which may be 
-*     introduced into the rebinned data as a consequence of aliasing between 
-*     the input and output grids. However, it can also result in small changes to 
-*     the total pixel value in any given area of the output array. In addition to
-*     normalisation of the output data values, any output variances are also 
-*     appropriately normalised, and any output data values with weight less 
-*     than 
-c     "wlim" are set to "badval".
-f     WLIM are set to BADVAL.
-*
-*     Output variances can be generated in two ways; by rebinning the supplied
-*     input variances with appropriate weights, or by finding the spread of 
-*     input data values contributing to each output pixel (see the AST__GENVAR 
-*     and AST__USEVAR flags).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to a Mapping, whose forward transformation will be
-*        used to transform the coordinates of pixels in the input
-*        grid into the coordinate system of the output grid. 
-*
-*        The number of input coordinates used by this Mapping (as
-*        given by its Nin attribute) should match the number of input
-c        grid dimensions given by the value of "ndim_in"
-f        grid dimensions given by the value of NDIM_IN
-*        below. Similarly, the number of output coordinates (Nout
-*        attribute) should match the number of output grid dimensions
-c        given by "ndim_out".
-f        given by NDIM_OUT.
-c        If "in" is NULL, the Mapping will not be used, but a valid
-c        Mapping must still be supplied.
-c     wlim
-f     WLIM = DOUBLE PRECISION (Given)
-*        This value is only used if the AST__REBINEND flag is specified
-*        via the 
-c        "flags" parameter.
-f        FLAGS argument.
-*        It gives the required number of input pixel values which must 
-*        contribute to an output pixel (i.e. the output pixel weight) in 
-*        order for the output pixel value to be considered valid. If the sum 
-*        of the input pixel weights contributing to an output pixel is less 
-*        than the supplied
-c        "wlim"
-f        WLIM
-*        value, then the output pixel value is returned set to the
-*        supplied bad value. If the supplied value is less than 1.0E-10
-*        then 1.0E-10 is used instead.
-c     ndim_in
-f     NDIM_IN = INTEGER (Given)
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-c        Not used if "in" is NULL.
-c     lbnd_in
-f     LBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c        Not used if "in" is NULL.
-c     ubnd_in
-f     UBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd_in" and "ubnd_in" together define the shape
-f        Note that LBND_IN and UBND_IN together define the shape
-*        and size of the input grid, its extent along a particular
-c        (j'th) dimension being ubnd_in[j]-lbnd_in[j]+1 (assuming the
-c        index "j" to be zero-based). They also define
-f        (J'th) dimension being UBND_IN(J)-LBND_IN(J)+1. They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-c        Not used if "in" is NULL.
-c     in
-f     IN( * ) = <Xtype> (Given)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        input grid, containing the input data to be rebined.  The
-*        numerical type of this array should match the 1- or
-*        2-character type code appended to the function name (e.g. if
-c        you are using astRebinSeqF, the type of each array element
-c        should be "float").
-f        you are using AST_REBINSEQR, the type of each array element
-f        should be REAL).
-*
-*        The storage order of data within this array should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c        If a NULL pointer is supplied for "in", then no data is added to
-c        the output arrays, but any initialisation or normalisation
-c        requested by "flags" is still performed.
-c     in_var
-f     IN_VAR( * ) = <Xtype> (Given)
-*        An optional 
-c        pointer to a 
-*        second array with the same size and type as the 
-c        "in" 
-f        IN 
-*        array. If given, this should contain a set of non-negative values 
-*        which represent estimates of the statistical variance associated 
-*        with each element of the
-c        "in" 
-f        IN 
-*        array. 
-*        If neither the AST__USEVAR nor the AST__VARWGT flag is set, no 
-*        input variance estimates are required and this 
-f        array 
-c        pointer 
-*        will not be used. 
-f        A dummy (e.g. one-element) array 
-c        A NULL pointer
-*        may then be supplied.
-c     spread
-f     SPREAD = INTEGER (Given)
-c        This parameter specifies the scheme to be used for dividing
-f        This argument specifies the scheme to be used for dividing
-*        each input data value up amongst the corresponding output pixels.
-*        It may be used to select
-*        from a set of pre-defined schemes by supplying one of the
-*        values described in the "Pixel Spreading Schemes"
-*        section in the description of the 
-c        astRebin<X> functions.
-f        AST_REBIN<X> routines.
-*        If a value of zero is supplied, then the default linear spreading 
-*        scheme is used (equivalent to supplying the value AST__LINEAR).
-c        Not used if "in" is NULL.
-c     params
-f     PARAMS( * ) = DOUBLE PRECISION (Given)
-c        An optional pointer to an array of double which should contain
-f        An optional array which should contain
-*        any additional parameter values required by the pixel
-*        spreading scheme. If such parameters are required, this
-*        will be noted in the "Pixel Spreading Schemes" section in the 
-*        description of the 
-c        astRebin<X> functions.
-f        AST_REBIN<X> routines.
-*
-c        If no additional parameters are required, this array is not
-c        used and a NULL pointer may be given.
-f        If no additional parameters are required, this array is not
-f        used. A dummy (e.g. one-element) array may then be supplied.
-c        Not used if "in" is NULL.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        The bitwise OR of a set of flag values which may be used to
-f        The sum of a set of flag values which may be used to
-*        provide additional control over the rebinning operation. See
-*        the "Control Flags" section below for a description of the
-*        options available.  If no flag values are to be set, a value
-*        of zero should be given.
-c     tol
-f     TOL = DOUBLE PRECISION (Given)
-*        The maximum tolerable geometrical distortion which may be
-*        introduced as a result of approximating non-linear Mappings
-*        by a set of piece-wise linear transformations. This should be
-*        expressed as a displacement in pixels in the output grid's
-*        coordinate system.
-*
-*        If piece-wise linear approximation is not required, a value
-*        of zero may be given. This will ensure that the Mapping is
-*        used without any approximation, but may increase execution
-*        time.
-*        
-*        If the value is too high, discontinuities between the linear
-*        approximations used in adjacent panel will be higher, and may
-*        cause the edges of the panel to be visible when viewing the output 
-*        image at high contrast. If this is a problem, reduce the
-*        tolerance value used.
-c        Not used if "in" is NULL.
-c     maxpix
-f     MAXPIX = INTEGER (Given)
-*        A value which specifies an initial scale size (in pixels) for
-*        the adaptive algorithm which approximates non-linear Mappings
-*        with piece-wise linear transformations. Normally, this should
-*        be a large value (larger than any dimension of the region of
-*        the input grid being used). In this case, a first attempt to
-*        approximate the Mapping by a linear transformation will be
-*        made over the entire input region.
-*
-*        If a smaller value is used, the input region will first be
-c        divided into sub-regions whose size does not exceed "maxpix"
-f        divided into sub-regions whose size does not exceed MAXPIX
-*        pixels in any dimension. Only at this point will attempts at
-*        approximation commence.
-*
-*        This value may occasionally be useful in preventing false
-*        convergence of the adaptive algorithm in cases where the
-*        Mapping appears approximately linear on large scales, but has
-*        irregularities (e.g. holes) on smaller scales. A value of,
-*        say, 50 to 100 pixels can also be employed as a safeguard in
-*        general-purpose software, since the effect on performance is
-*        minimal.
-*
-*        If too small a value is given, it will have the effect of
-*        inhibiting linear approximation altogether (equivalent to
-c        setting "tol" to zero). Although this may degrade
-f        setting TOL to zero). Although this may degrade
-*        performance, accurate results will still be obtained.
-c        Not used if "in" is NULL.
-c     badval
-f     BADVAL = <Xtype> (Given)
-*        This argument should have the same type as the elements of
-c        the "in" array. It specifies the value used to flag missing
-f        the IN array. It specifies the value used to flag missing
-*        data (bad pixels) in the input and output arrays.
-*
-c        If the AST__USEBAD flag is set via the "flags" parameter,
-f        If the AST__USEBAD flag is set via the FLAGS argument,
-c        then this value is used to test for bad pixels in the "in"
-c        (and "in_var") array(s).
-f        then this value is used to test for bad pixels in the IN
-f        (and IN_VAR) array(s).
-*
-*        In all cases, this value is also used to flag any output
-c        elements in the "out" (and "out_var") array(s) for which
-f        elements in the OUT (and OUT_VAR) array(s) for which
-*        rebined values could not be obtained (see the "Propagation
-*        of Missing Data" section below for details of the
-*        circumstances under which this may occur). 
-c     ndim_out
-f     NDIM_OUT = INTEGER (Given)
-*        The number of dimensions in the output grid. This should be
-*        at least one. It need not necessarily be equal to the number
-*        of dimensions in the input grid.
-c     lbnd_out
-f     LBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the output grid along each dimension.
-c     ubnd_out
-f     UBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the output grid along each dimension.
-*
-c        Note that "lbnd_out" and "ubnd_out" together define the
-f        Note that LBND_OUT and UBND_OUT together define the
-*        shape, size and coordinate system of the output grid in the
-c        same way as "lbnd_in" and "ubnd_in" define the shape, size
-f        same way as LBND_IN and UBND_IN define the shape, size
-*        and coordinate system of the input grid.
-c     lbnd
-f     LBND( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the first pixel in the region
-*        of the input grid which is to be included in the rebined output
-*        array.
-c        Not used if "in" is NULL.
-c     ubnd
-f     UBND( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the last pixel in the region of
-*        the input grid which is to be included in the rebined output
-*        array.
-*
-c        Note that "lbnd" and "ubnd" together define the shape and
-f        Note that LBND and UBND together define the shape and
-*        position of a (hyper-)rectangular region of the input grid
-*        which is to be included in the rebined output array. This region
-*        should lie wholly within the extent of the input grid (as
-c        defined by the "lbnd_in" and "ubnd_in" arrays). Regions of
-f        defined by the LBND_IN and UBND_IN arrays). Regions of
-*        the input grid lying outside this region will not be used.
-c        Not used if "in" is NULL.
-c     out
-f     OUT( * ) = <Xtype> (Given and Returned)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        output grid. The rebined data values will be added into the
-*        original contents of this array. The numerical type of this array 
-*        should match that of the
-c        "in" array, and the data storage order should be such
-f        IN array, and the data storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     out_var
-f     OUT_VAR( * ) = <Xtype> (Given and Returned)
-*        A
-c        pointer to an 
-*        array with the same type and size as the 
-c        "out" 
-f        OUT
-*        array. This 
-c        pointer
-f        array 
-*        will only be used if the AST__USEVAR or AST__GENVAR flag is set
-f        via the FLAGS argument,
-f        via the "flags" parameter,
-*        in which case variance estimates for the rebined data values will 
-*        be added into the array. If neither the AST__USEVAR flag nor the 
-*        AST__GENVAR flag is set, no output variance estimates will be 
-*        calculated and this 
-c        pointer
-f        array 
-*        will not be used. A
-c        NULL pointer
-f        dummy (e.g. one-element) array 
-*        may then be supplied.
-c     weights
-f     WEIGHTS( * ) = DOUBLE PRECISION (Given and Returned)
-c        Pointer to an array of double, 
-f        An array 
-*        with one or two elements for each pixel in the output grid,
-*        depending on whether or not the AST__GENVAR flag has been supplied 
-*        via the
-c        "flags" parameter. 
-f        FLAGS parameter.
-*        If AST__GENVAR has not been specified then the array should have
-*        one element for each output pixel, and it will be used to
-*        accumulate the weight associated with each output pixel.
-*        If AST__GENVAR has been specified then the array should have
-*        two elements for each output pixel. The first half of the array
-*        is again used to accumulate the weight associated with each output 
-*        pixel, and the second half is used to accumulate the square of
-*        the weights. In each half, the data storage order should be such that 
-*        the index of the first grid dimension varies most rapidly and that of 
-*        the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     nused
-f     NUSED = INTEGER (Given and Returned)
-c        A pointer to an int containing the
-f        The
-*        number of input data values that have been added into the output
-*        array so far. The supplied value is incremented on exit by the 
-*        number of input values used. The value is initially set to zero 
-*        if the AST__REBININIT flag is set in 
-c        "flags".
-f        FLAGS.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Data Type Codes:
-*     To select the appropriate rebinning function, you should
-c     replace <X> in the generic function name astRebinSeq<X> with a
-f     replace <X> in the generic function name AST_REBINSEQ<X> with a
-*     1- or 2-character data type code, so as to match the numerical
-*     type <Xtype> of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - I: int
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-*
-c     For example, astRebinSeqD would be used to process "double"
-c     data, while astRebinSeqI would be used to process "int"
-c     data, etc.
-f     For example, AST_REBIND would be used to process DOUBLE
-f     PRECISION data, while AST_REBINI would be used to process
-f     integer data (stored in an INTEGER array), etc.
-*
-*     Note that, unlike 
-c     astResample<X>, the astRebinSeq<X>
-f     AST_RESAMPLE<X>, the AST_REBINSEQ<X>
-*     set of functions does not yet support unsigned integer data types
-*     or integers of different sizes.
-
-*  Control Flags:
-c     The following flags are defined in the "ast.h" header file and
-f     The following flags are defined in the AST_PAR include file and
-*     may be used to provide additional control over the rebinning
-*     process. Having selected a set of flags, you should supply the
-c     bitwise OR of their values via the "flags" parameter:
-f     sum of their values via the FLAGS argument:
-*
-*     - AST__REBININIT: Used to mark the first call in a sequence. It indicates
-*     that the supplied 
-c     "out", "out_var" and "weights" 
-f     OUT, OUT_VAR and WEIGHTS
-*     arrays should be filled with zeros (thus over-writing any supplied
-*     values) before adding the rebinned input data into them. This flag
-*     should be used when rebinning the first input array in a sequence.
-*     - AST__REBINEND: Used to mark the last call in a sequence. It causes
-*     each value in the 
-c     "out" and "out_var" 
-f     OUT and OUT_VAR 
-*     arrays to be divided by a normalisation factor before being 
-*     returned. The normalisation factor for each output data value is just the 
-*     corresponding value from the weights array. The normalisation factor 
-*     for each output variance value is the square of the data value 
-*     normalisation factor. It also causes output data values to be set
-*     bad if the corresponding weight is less than the value supplied for
-c     parameter "wlim".
-f     argument WLIM.
-*     It also causes any temporary values stored in the output variance array 
-*     (see flag AST__GENVAR below) to be converted into usable variance values.
-*     - AST__USEBAD: Indicates that there may be bad pixels in the
-*     input array(s) which must be recognised by comparing with the
-c     value given for "badval" and propagated to the output array(s).
-f     value given for BADVAL and propagated to the output array(s).
-*     If this flag is not set, all input values are treated literally
-c     and the "badval" value is only used for flagging output array
-f     and the BADVAL value is only used for flagging output array
-*     values.
-*     - AST__USEVAR: Indicates that output variance estimates should be
-*     created by rebinning the supplied input variance estimates. An
-*     error will be reported if both this flag and the AST__GENVAR flag
-*     are supplied.
-*     - AST__GENVAR: Indicates that output variance estimates should be
-*     created based on the spread of input data values contributing to each 
-*     output pixel. An error will be reported if both this flag and the 
-*     AST__USEVAR flag are supplied. If the AST__GENVAR flag is specified,
-*     the supplied output variance array is first used as a work array to 
-*     accumulate the temporary values needed to generate the output
-*     variances. When the sequence ends (as indicated by the
-*     AST__REBINEND flag), the contents of the output variance array are 
-*     converted into the required variance estimates. If the generation of 
-*     such output variances is required, this flag should be used on every 
-*     invocation of this
-c     function
-f     routine
-*     within a sequence, and any supplied input variances will have no effect 
-*     on the output variances (although input variances will still be used 
-*     to weight the input data if the AST__VARWGT flag is also supplied).
-*     - AST__VARWGT: Indicates that the input data should be weighted by
-*     the reciprocal of the input variances. Otherwise, all input data are 
-*     given equal weight. If this flag is specified, the calculation of the 
-*     output variances (if any) is modified to take account of the
-*     varying weights assigned to the input data values.
-
-*  Propagation of Missing Data:
-*     Instances of missing data (bad pixels) in the output grid are
-c     identified by occurrences of the "badval" value in the "out"
-f     identified by occurrences of the BADVAL value in the OUT
-*     array. These are only produced if the AST__REBINEND flag is
-*     specified and a pixel has zero weight.
-*
-*     An input pixel is considered bad (and is consequently ignored) if 
-*     its
-c     data value is equal to "badval" and the AST__USEBAD flag is
-c     set via the "flags" parameter.
-f     data value is equal to BADVAL and the AST__USEBAD flag is
-f     set via the FLAGS argument.
-*
-*     In addition, associated output variance estimates (if
-c     calculated) may be declared bad and flagged with the "badval"
-c     value in the "out_var" array for similar reasons.
-f     calculated) may be declared bad and flagged with the BADVAL
-f     value in the OUT_VAR array for similar reasons.
-*--
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_REBINSEQ(X,Xtype,IntType) \
-static void RebinSeq##X( AstMapping *this, double wlim, int ndim_in, \
-                     const int lbnd_in[], const int ubnd_in[], \
-                     const Xtype in[], const Xtype in_var[], \
-                     int spread, const double params[], int flags, \
-                     double tol, int maxpix, Xtype badval, \
-                     int ndim_out, const int lbnd_out[], \
-                     const int ubnd_out[], const int lbnd[], \
-                     const int ubnd[], Xtype out[], Xtype out_var[], \
-                     double weights[], int *nused, int *status ) { \
-\
-/* Local Variables: */ \
-   astDECLARE_GLOBALS            /* Thread-specific data */ \
-   AstMapping *simple;           /* Pointer to simplified Mapping */ \
-   Xtype *d;                     /* Pointer to next output data value */ \
-   Xtype *v;                     /* Pointer to next output variance value */ \
-   double *w;                    /* Pointer to next weight value */ \
-   double a;                     /* Weighted mean of input values */ \
-   double mwpip;                 /* Mean weight per input pixel */ \
-   double nn;                    /* Effective no. of i/p pixels combined */ \
-   double sw;                    /* Sum of weights at output pixel */ \
-   int i;                        /* Loop counter for output pixels */ \
-   int idim;                     /* Loop counter for coordinate dimensions */ \
-   int ipix_out;                 /* Index into output array */ \
-   int nin;                      /* Number of Mapping input coordinates */ \
-   int nout;                     /* Number of Mapping output coordinates */ \
-   int npix;                     /* Number of pixels in input region */ \
-   int npix_out;                 /* Number of pixels in output array */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
-   astGET_GLOBALS(this); \
-\
-/* Loop to determine how many pixels the output array contains. */ \
-   npix_out = 1; \
-   for ( idim = 0; idim < ndim_out; idim++ ) { \
-      npix_out *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-   } \
-\
-/* If no input data was supplied, jump to the normalisation section. */ \
-   simple = NULL; \
-   if( in ) { \
-\
-/* Ensure any supplied "in_var" pointer is ignored if no input variances are \
-   needed. */ \
-      if( !( flags & AST__USEVAR ) && !( flags & AST__VARWGT ) ) { \
-         in_var = NULL; \
-      } \
-\
-/* Ensure any supplied "out_var" pointer is ignored if no output variances \
-   being created. */ \
-      if( !( flags & AST__USEVAR ) && !( flags & AST__GENVAR ) ) { \
-         out_var = NULL; \
-      } \
-\
-/* Obtain values for the Nin and Nout attributes of the Mapping. */ \
-      nin = astGetNin( this ); \
-      nout = astGetNout( this ); \
-\
-/* If OK, check that the number of input grid dimensions matches the \
-   number required by the Mapping and is at least 1. Report an error \
-   if necessary. */ \
-      if ( astOK && ( ( ndim_in != nin ) || ( ndim_in < 1 ) ) ) { \
-         astError( AST__NGDIN, "astRebinSeq"#X"(%s): Bad number of input grid " \
-                   "dimensions (%d).", status, astGetClass( this ), ndim_in ); \
-         if ( ndim_in != nin ) { \
-            astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                      "to specify an input position.", status, \
-                      astGetClass( this ), nin, ( nin == 1 ) ? "" : "s" ); \
-         } \
-      } \
-\
-/* If OK, also check that the number of output grid dimensions matches \
-   the number required by the Mapping and is at least 1. Report an \
-   error if necessary. */ \
-      if ( astOK && ( ( ndim_out != nout ) || ( ndim_out < 1 ) ) ) { \
-         astError( AST__NGDIN, "astRebinSeq"#X"(%s): Bad number of output grid " \
-                   "dimensions (%d).", status, astGetClass( this ), ndim_out ); \
-         if ( ndim_out != nout ) { \
-            astError( AST__NGDIN, "The %s given generates %s%d coordinate " \
-                      "value%s for each output position.", status, astGetClass( this ), \
-                      ( nout < ndim_out ) ? "only " : "", nout, \
-                      ( nout == 1 ) ? "" : "s" ); \
-         } \
-      } \
-\
-/* Check that the lower and upper bounds of the input grid are \
-   consistent. Report an error if any pair is not. */ \
-      if ( astOK ) { \
-         for ( idim = 0; idim < ndim_in; idim++ ) { \
-            if ( lbnd_in[ idim ] > ubnd_in[ idim ] ) { \
-               astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
-                         "input grid (%d) exceeds corresponding upper bound " \
-                         "(%d).", status, astGetClass( this ), \
-                         lbnd_in[ idim ], ubnd_in[ idim ] ); \
-               astError( AST__GBDIN, "Error in input dimension %d.", status, \
-                         idim + 1 ); \
-               break; \
-            } \
-         } \
-      } \
-\
-/* Check that the positional accuracy tolerance supplied is valid and \
-   report an error if necessary. */ \
-      if ( astOK && ( tol < 0.0 ) ) { \
-         astError( AST__PATIN, "astRebinSeq"#X"(%s): Invalid positional " \
-                   "accuracy tolerance (%.*g pixel).", status, \
-                   astGetClass( this ), DBL_DIG, tol ); \
-         astError( AST__PATIN, "This value should not be less than zero." , status); \
-      } \
-\
-/* Check that the initial scale size in pixels supplied is valid and \
-   report an error if necessary. */ \
-      if ( astOK && ( maxpix < 0 ) ) { \
-         astError( AST__SSPIN, "astRebinSeq"#X"(%s): Invalid initial scale " \
-                   "size in pixels (%d).", status, astGetClass( this ), maxpix ); \
-         astError( AST__SSPIN, "This value should not be less than zero." , status); \
-      } \
-\
-/* Check that the lower and upper bounds of the output grid are \
-   consistent. Report an error if any pair is not. */ \
-      if ( astOK ) { \
-         for ( idim = 0; idim < ndim_out; idim++ ) { \
-            if ( lbnd_out[ idim ] > ubnd_out[ idim ] ) { \
-               astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
-                         "output grid (%d) exceeds corresponding upper bound " \
-                         "(%d).", status, astGetClass( this ), \
-                         lbnd_out[ idim ], ubnd_out[ idim ] ); \
-               astError( AST__GBDIN, "Error in output dimension %d.", status, \
-                         idim + 1 ); \
-               break; \
-            } \
-         } \
-      } \
-\
-/* Similarly check the bounds of the input region. */ \
-      if ( astOK ) { \
-         for ( idim = 0; idim < ndim_in; idim++ ) { \
-            if ( lbnd[ idim ] > ubnd[ idim ] ) { \
-               astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
-                         "input region (%d) exceeds corresponding upper " \
-                         "bound (%d).", status, astGetClass( this ), \
-                         lbnd[ idim ], ubnd[ idim ] ); \
-\
-/* Also check that the input region lies wholly within the input \
-   grid. */ \
-            } else if ( lbnd[ idim ] < lbnd_in[ idim ] ) { \
-               astError( AST__GBDIN, "astRebinSeq"#X"(%s): Lower bound of " \
-                         "input region (%d) is less than corresponding " \
-                         "bound of input grid (%d).", status, astGetClass( this ), \
-                         lbnd[ idim ], lbnd_in[ idim ] ); \
-            } else if ( ubnd[ idim ] > ubnd_in[ idim ] ) { \
-               astError( AST__GBDIN, "astRebinSeq"#X"(%s): Upper bound of " \
-                         "input region (%d) exceeds corresponding " \
-                         "bound of input grid (%d).", status, astGetClass( this ), \
-                         ubnd[ idim ], ubnd_in[ idim ] ); \
-            } \
-\
-/* Say which dimension produced the error. */ \
-            if ( !astOK ) { \
-               astError( AST__GBDIN, "Error in output dimension %d.", status, \
-                         idim + 1 ); \
-               break; \
-            } \
-         } \
-      } \
-\
-/* Check that only one of AST__USEVAR and ASR__GENVAR has been supplied. */ \
-      if( ( flags & AST__USEVAR ) && ( flags & AST__GENVAR ) ) { \
-         if( astOK ) { \
-            astError( AST__BDPAR, "astRebinSeq"#X"(%s): Incompatible flags " \
-                      "AST__GENVAR and AST__USEVAR have been specified " \
-                      "together (programming error).", status, astGetClass( this ) ); \
-         } \
-      } \
-\
-/* If AST__USEVAR or AST_VARWGT has been specified, check we have an \
-   input variance array. */ \
-      if( !in_var && astOK ) { \
-         if( ( flags & AST__USEVAR ) ) { \
-            astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__USEVAR flag " \
-                      "was specified but no input variance array was supplied " \
-                      "(programming error).", status, astGetClass( this )  ); \
-         } else if( ( flags & AST__VARWGT ) ) { \
-            astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__VARWGT flag " \
-                      "was specified but no input variance array was supplied " \
-                      "(programming error).", status, astGetClass( this )  ); \
-         } \
-      } \
-\
-/* If AST__USEVAR or AST_GENVAR has been specified, check we have an \
-   output variance array. */ \
-      if( !out_var && astOK ) { \
-         if( ( flags & AST__USEVAR ) ) { \
-            astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__USEVAR flag " \
-                      "was specified but no output variance array was supplied " \
-                      "(programming error).", status, astGetClass( this )  ); \
-         } else if( ( flags & AST__GENVAR ) ) { \
-            astError( AST__BDPAR, "astRebinSeq"#X"(%s): The AST__GENVAR flag " \
-                      "was specified but no output variance array was supplied " \
-                      "(programming error).", status, astGetClass( this )  ); \
-         } \
-      } \
-\
-/* If OK, loop to determine how many input pixels are to be binned. */ \
-      npix = 1; \
-      unsimplified_mapping = this; \
-      if ( astOK ) { \
-         for ( idim = 0; idim < ndim_in; idim++ ) { \
-            npix *= ubnd[ idim ] - lbnd[ idim ] + 1; \
-         } \
-\
-/* If there are sufficient pixels to make it worthwhile, simplify the \
-   Mapping supplied to improve performance. Otherwise, just clone the \
-   Mapping pointer. Note we have already saved a pointer to the original \
-   Mapping so that lower-level functions can use it if they need to report \
-   an error. */ \
-         if ( npix > 1024 ) { \
-            simple = astSimplify( this ); \
-         } else { \
-            simple = astClone( this ); \
-         } \
-      } \
-\
-/* Report an error if the forward transformation of this simplified \
-   Mapping is not defined. */ \
-      if ( !astGetTranForward( simple ) && astOK ) { \
-         astError( AST__TRNND, "astRebinSeq"#X"(%s): An forward coordinate " \
-                   "transformation is not defined by the %s supplied.", status, \
-                   astGetClass( unsimplified_mapping ), \
-                   astGetClass( unsimplified_mapping ) ); \
-      } \
-\
-/* If required, initialise the output arrays to hold zeros. */ \
-      if( flags & AST__REBININIT ) { \
-         w = weights; \
-         d = out; \
-         if( out_var ) { \
-            v = out_var; \
-            for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, v++, w++ ) { \
-               *d = 0; \
-               *v = 0; \
-               *w = 0; \
-            } \
-         } else { \
-            for( ipix_out = 0; ipix_out < npix_out; ipix_out++, d++, w++ ) { \
-               *d = 0; \
-               *w = 0; \
-            } \
-         } \
-         if( flags & AST__GENVAR ) { \
-            w = weights + npix_out; \
-            for( ipix_out = 0; ipix_out < npix_out; ipix_out++, w++ ) *w = 0; \
-         } \
-      } \
-\
-/* Perform the rebinning. Note that we pass all gridded data, the \
-   spread function and the bad pixel value by means of pointer \
-   types that obscure the underlying data type. This is to avoid \
-   having to replicate functions unnecessarily for each data \
-   type. However, we also pass an argument that identifies the data \
-   type we have obscured. */ \
-      RebinAdaptively( simple, ndim_in, lbnd_in, ubnd_in, \
-                       (const void *) in, (const void *) in_var, \
-                       TYPE_##X, spread, \
-                       params, flags, tol, maxpix, \
-                       (const void *) &badval, \
-                       ndim_out, lbnd_out, ubnd_out, \
-                       lbnd, ubnd, npix_out, \
-                       (void *) out, (void *) out_var, weights, nused, status ); \
-\
-/* Annul the pointer to the simplified/cloned Mapping. */ \
-      simple = astAnnul( simple ); \
-\
-   } \
-\
-/* If required, finalise the sequence. */ \
-   if( flags & AST__REBINEND ) { \
-\
-/* Ensure "wlim" is not zero. */ \
-      if( wlim < 1.0E-10 ) wlim = 1.0E-10; \
-\
-/* If required create the output variances from the spread of the input \
-   data values.*/ \
-      if( flags & AST__GENVAR ) { \
-\
-/* Find the average weight per input pixel, if we do not already know it \
-   to be 1.0. */ \
-         if( flags & AST__VARWGT ) { \
-            sw = 0.0; \
-            for( i = 0; i < npix_out; i++ ) { \
-               sw += weights[ i ]; \
-            } \
-            mwpip = sw/( *nused ); \
-\
-         } else { \
-            mwpip = 1.0; \
-         } \
-\
-/* Calculate the variance. We apply a factor that accounts for the \
-   reduction in the number of degrees of freedom when finding the \
-   variance. This factor is based on the number of input values included \
-   in each output value, and is taken to be the output weight dividided \
-   by the mean weight per input pixel. */ \
-         for( i = 0; i < npix_out; i++ ) { \
-            sw = weights[ i ]; \
-            nn = sw/mwpip; \
-            if( nn > 2.0 && fabs( sw ) >= wlim ) { \
-               a = out[ i ]/sw; \
-               out_var[ i ] = ( out_var[ i ]/sw - a*a )*weights[ i + npix_out ]; \
-               if( out_var[ i ] < 0.0 ) { \
-                  out_var[ i ] = badval; \
-               } else { \
-                  out_var[ i ] *= nn/( nn - 1.0 ); \
-               } \
-            } else { \
-               out_var[ i ] = badval; \
-            } \
-         } \
-      } \
-\
-/* Normalise the returned data and variance arrays. */ \
-      for( i = 0; i < npix_out; i++ ) { \
-         if( fabs( weights[ i ] ) >= wlim && out[ i ] != badval ) { \
-            out[ i ] /= weights[ i ]; \
-         } else { \
-            out[ i ] = badval; \
-         } \
-      } \
-      if( out_var ) { \
-         for( i = 0; i < npix_out; i++ ) { \
-            if( fabs( weights[ i ] ) >= wlim && out_var[ i ] != badval ) { \
-               out_var[ i ] /= ( weights[ i ]*weights[ i ] ); \
-            } else { \
-               out_var[ i ] = badval; \
-            } \
-         } \
-      } \
-   } \
-}
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-#if HAVE_LONG_DOUBLE  /* Not normally implemented */
-MAKE_REBINSEQ(LD,long double,0)
-#endif
-MAKE_REBINSEQ(D,double,0)  
-MAKE_REBINSEQ(F,float,0)
-MAKE_REBINSEQ(I,int,1)
-
-/* Undefine the macro. */
-#undef MAKE_REBIN
-
-static void RebinWithBlocking( AstMapping *this, const double *linear_fit,
-                               int ndim_in, const int *lbnd_in, 
-                               const int *ubnd_in, const void *in, 
-                               const void *in_var, DataType type, int spread,
-                               const double *params, int flags,
-                               const void *badval_ptr, int ndim_out,
-                               const int *lbnd_out, const int *ubnd_out,
-                               const int *lbnd, const int *ubnd, int npix_out,
-                               void *out, void *out_var, double *work,
-                               int *nused, int *status ) {
-/*
-*  Name:
-*     RebinWithBlocking
-
-*  Purpose:
-*     Rebin a section of a data grid in a memory-efficient way.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void RebinWithBlocking( AstMapping *this, const double *linear_fit,
-*                             int ndim_in, const int *lbnd_in, 
-*                             const int *ubnd_in, const void *in, 
-*                             const void *in_var, DataType type, int spread,
-*                             const double *params, int flags,
-*                             const void *badval_ptr, int ndim_out,
-*                             const int *lbnd_out, const int *ubnd_out,
-*                             const int *lbnd, const int *ubnd, int npix_out,
-*                             void *out, void *out_var, double *work,
-*                             int *nused )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function rebins a specified section of a rectangular grid of 
-*     data (with any number of dimensions) into another rectangular grid 
-*     (with a possibly different number of dimensions). The coordinate 
-*     transformation used to convert input pixel coordinates into positions 
-*     in the output grid is given by the forward transformation of the 
-*     Mapping which is supplied.  Any pixel spreading scheme may be specified 
-*     for distributing the flux of an input pixel amongst the output
-*     pixels.
-*
-*     This function is very similar to RebinSection, except that in
-*     order to limit memory usage and to ensure locality of reference,
-*     it divides the input grid up into "blocks" which have a limited
-*     extent along each input dimension. Each block, which will not
-*     contain more than a pre-determined maximum number of pixels, is
-*     then passed to RebinSection for resampling.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose forward transformation may be
-*        used to transform the coordinates of pixels in the input
-*        grid into associated positions in the output grid.
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     linear_fit
-*        Pointer to an optional array of double which contains the
-*        coefficients of a linear fit which approximates the above
-*        Mapping's forward coordinate transformation. If this is
-*        supplied, it will be used in preference to the above Mapping
-*        when transforming coordinates. This may be used to enhance
-*        performance in cases where evaluation of the Mapping's
-*        forward transformation is expensive. If no linear fit is
-*        available, a NULL pointer should be supplied.
-*
-*        The way in which the fit coefficients are stored in this
-*        array and the number of array elements are as defined by the
-*        astLinearApprox function.
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     in
-*        Pointer to the input array of data to be rebinned (with one
-*        element for each pixel in the input grid). The numerical type
-*        of these data should match the "type" value (below). The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and data type as the "in" array),
-*        which represent estimates of the statistical variance
-*        associated with each element of the "in" array. If this
-*        second array is given (along with the corresponding "out_var"
-*        array), then estimates of the variance of the rebinned data
-*        will also be returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     type
-*        A value taken from the "DataType" enum, which specifies the
-*        data type of the input and output arrays containing the
-*        gridded data (and variance) values.
-*     spread
-*        A value selected from a set of pre-defined macros to identify
-*        which pixel spread function should be used.
-*     params
-*        Pointer to an optional array of parameters that may be passed
-*        to the pixel spread algorithm, if required. If no parameters
-*        are required, a NULL pointer should be supplied.
-*     flags
-*        The bitwise OR of a set of flag values which provide additional 
-*        control over the resampling operation.
-*     badval_ptr
-*        If the AST__USEBAD flag is set (above), this parameter is a
-*        pointer to a value which is used to identify bad data and/or
-*        variance values in the input array(s). The referenced value's
-*        data type must match that of the "in" (and "in_var")
-*        arrays. The same value will also be used to flag any output
-*        array elements for which rebinned values could not be
-*        obtained.  The output arrays(s) may be flagged with this
-*        value whether or not the AST__USEBAD flag is set (the
-*        function return value indicates whether any such values have
-*        been produced).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output data grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output data grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output data grid in the same way as "lbnd_in"
-*        and "ubnd_in" define the shape and size of the input grid
-*        (see above).
-*     lbnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the input data grid which is to be rebinned.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the input data grid which is to be rebinned.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the input grid which is to be rebinned. This section 
-*        should lie wholly within the extent of the input grid (as defined 
-*        by the "lbnd_out" and "ubnd_out" arrays). Regions of the input 
-*        grid lying outside this section will be ignored.
-*     npix_out
-*        The number of pixels in the output array.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the rebinned data will be returned.  The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the rebinned values may be returned. This array will only be
-*        used if the "in_var" array has been given.
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     work
-*        An optional pointer to a double array with the same size as 
-*        the "out" array. The contents of this array (if supplied) are
-*        incremented by the accumulated weights assigned to each output pixel.
-*        If no accumulated weights are required, a NULL pointer should be 
-*        given.
-*     nused
-*        An optional pointer to an int which will be incremented by the
-*        number of input values pasted into the output array. Ignored if NULL.
-
-*/
-
-/* Local Constants: */
-   const int mxpix = 2 * 1024;   /* Maximum number of pixels in a block (this
-                                    relatively small number seems to give best
-                                    performance) */
-
-/* Local Variables: */
-   int *dim_block;               /* Pointer to array of block dimensions */
-   int *lbnd_block;              /* Pointer to block lower bound array */
-   int *ubnd_block;              /* Pointer to block upper bound array */
-   int dim;                      /* Dimension size */
-   int done;                     /* All blocks rebinned? */
-   int hilim;                    /* Upper limit on maximum block dimension */
-   int idim;                     /* Loop counter for dimensions */
-   int lolim;                    /* Lower limit on maximum block dimension */
-   int mxdim_block;              /* Maximum block dimension */
-   int npix;                     /* Number of pixels in block */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Allocate workspace. */
-   lbnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   ubnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   dim_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   if ( astOK ) {
-
-/* Find the optimum block size. */
-/* ---------------------------- */
-/* We first need to find the maximum extent which a block of input
-   pixels may have in each dimension. We determine this by taking the
-   input grid extent in each dimension and then limiting the maximum
-   dimension size until the resulting number of pixels is sufficiently
-   small. This approach allows the block shape to approximate (or
-   match) the input grid shape when appropriate. */
-
-/* First loop to calculate the total number of input pixels and the
-   maximum input dimension size. */
-      npix = 1;
-      mxdim_block = 0;
-      for ( idim = 0; idim < ndim_in; idim++ ) {
-         dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-         npix *= dim;
-         if ( mxdim_block < dim ) mxdim_block = dim;
-      }
-
-/* If the number of input pixels is too large for a single block, we
-   perform iterations to determine the optimum upper limit on a
-   block's dimension size. Initialise the limits on this result. */
-      if ( npix > mxpix ) {
-         lolim = 1;
-         hilim = mxdim_block;
-
-/* Loop to perform a binary chop, searching for the best result until
-   the lower and upper limits on the result converge to adjacent
-   values. */
-         while ( ( hilim - lolim ) > 1 ) {
-
-/* Form a new estimate from the mid-point of the previous limits. */
-            mxdim_block = ( hilim + lolim ) / 2;
-
-/* See how many pixels a block contains if its maximum dimension is
-   limited to this new value. */
-            for ( npix = 1, idim = 0; idim < ndim_in; idim++ ) {
-               dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-               npix *= ( dim < mxdim_block ) ? dim : mxdim_block;
-            }
-
-/* Update the appropriate limit, according to whether the number of
-   pixels is too large or too small. */
-            *( ( npix <= mxpix ) ? &lolim : &hilim ) = mxdim_block;
-         }
-
-/* When iterations have converged, obtain the maximum limit on the
-   dimension size of a block which results in no more than the maximum
-   allowed number of pixels per block. However, ensure that all block
-   dimensions are at least 2. */
-            mxdim_block = lolim;
-      }
-      if ( mxdim_block < 2 ) mxdim_block = 2;
-
-/* Calculate the block dimensions by applying this limit to the output
-   grid dimensions. */
-      for ( idim = 0; idim < ndim_in; idim++ ) {
-         dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-         dim_block[ idim ] = ( dim < mxdim_block ) ? dim : mxdim_block;
-
-/* Also initialise the lower and upper bounds of the first block of
-   output grid pixels to be rebinned, ensuring that this does not
-   extend outside the grid itself. */
-         lbnd_block[ idim ] = lbnd[ idim ];
-         ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
-                                    ubnd[ idim ], status );
-      }
-
-/* Rebin each block of input pixels. */
-/* --------------------------------- */
-/* Loop to generate the extent of each block of input pixels and to
-   resample them. */
-      done = 0;
-      while ( !done && astOK ) {
-
-/* Rebin the current block, accumulating the sum of bad pixels produced. */
-         RebinSection( this, linear_fit, ndim_in, lbnd_in, ubnd_in, in, 
-                       in_var, type, spread, params, flags, badval_ptr,
-                       ndim_out, lbnd_out, ubnd_out, lbnd_block, ubnd_block, 
-                       npix_out, out, out_var, work, nused, status );
-
-/* Update the block extent to identify the next block of input pixels. */
-         idim = 0;
-         do {
-
-/* We find the least significant dimension where the upper bound of
-   the block has not yet reached the upper bound of the region of the
-   input grid which we are rebinning. The block's position is then
-   incremented by one block extent along this dimension, checking that
-   the resulting extent does not go outside the region being rebinned. */
-            if ( ubnd_block[ idim ] < ubnd[ idim ] ) {
-               lbnd_block[ idim ] = MinI( lbnd_block[ idim ] +
-                                          dim_block[ idim ], ubnd[ idim ], status );
-               ubnd_block[ idim ] = MinI( lbnd_block[ idim ] +
-                                          dim_block[ idim ] - 1,
-                                          ubnd[ idim ], status );
-               break;
-
-/* If any less significant dimensions are found where the upper bound
-   of the block has reached its maximum value, we reset the block to
-   its lowest position. */
-            } else {
-               lbnd_block[ idim ] = lbnd[ idim ];
-               ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
-                                          ubnd[ idim ], status );
-
-/* All the blocks have been processed once the position along the most
-   significant dimension has been reset. */
-               done = ( ++idim == ndim_in );
-            }
-         } while ( !done );
-      }
-   }
-
-/* Free the workspace. */
-   lbnd_block = astFree( lbnd_block );
-   ubnd_block = astFree( ubnd_block );
-   dim_block = astFree( dim_block );
-}
-
-static AstMapping *RemoveRegions( AstMapping *this, int *status ) {
-/*
-*++
-*  Name:
-c     astRemoveRegions
-f     AST_REMOVEREGIONS
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     AstMapping *astRemoveRegions( AstMapping *this )
-f     RESULT = AST_REMOVEREGIONS( THIS, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function searches the suppliedMapping (which may be a 
-*     compound Mapping such as a CmpMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel CmpMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the original Mapping.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astRemoveRegions()
-f     AST_REMOVEREGIONS = INTEGER
-*        A new pointer to the (possibly modified) Mapping.
-
-*  Applicability:
-*     CmpFrame
-*        If the supplied Mapping is a CmpFrame, any component Frames that
-*        are instances of the Region class are replaced by the equivalent 
-*        Frame.
-*     FrameSet
-*        If the supplied Mapping is a FrameSet, the returned Mapping
-*        will be a copy of the supplied FrameSet in which Regions have
-*        been removed from all the inter-Frame Mappings, and any Frames
-*        which are instances of the Region class are repalced by the
-*        equivalent Frame.
-*     Mapping
-*        This function applies to all Mappings.
-*     Region
-*        If the supplied Mapping is a Region, the returned Mapping will
-*        be the equivalent Frame.
-
-*  Notes:
-*     - This function can safely be applied even to Mappings which
-*     contain no Regions. If no Regions are found, it
-c     behaves exactly like astClone and returns a pointer to the
-f     behaves exactly like AST_CLONE and returns a pointer to the
-*     original Mapping.
-*     - The Mapping returned by this function may not be independent
-*     of the original (even if some Regions were removed), and
-*     modifying it may therefore result in indirect modification of
-*     the original. If a completely independent result is required, a
-c     copy should be made using astCopy.
-f     copy should be made using AST_COPY.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* This base iplementation just returns a clone of the supplied Mapping
-   pointer. Sub-classes should override it as necessary. */
-   return astClone( this );
-}
-
-static void ReportPoints( AstMapping *this, int forward,
-                          AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-*+
-*  Name:
-*     astReportPoints
-
-*  Purpose:
-*     Report the effect of transforming a set of points using a Mapping.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void astReportPoints( AstMapping *this, int forward,
-*                           AstPointSet *in_points, AstPointSet *out_points )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function reports the coordinates of a set of points before
-*     and after being transformed by a Mapping, by writing them to
-*     standard output.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     forward
-*        A non-zero value indicates that the Mapping's forward
-*        coordinate transformation has been applied, while a zero
-*        value indicates the inverse transformation.
-*     in_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of a set of points before the Mapping was
-*        applied.
-*     out_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of the same set of points after the Mapping has
-*        been applied.
-
-*  Notes:
-*     - This method is provided as a development and debugging aid to
-*     be invoked when coordinates are transformed by public Mapping
-*     methods and under control of the "Report" Mapping attribute.
-*     - Derived clases may over-ride this method in order to change
-*     the way in which coordinates are formatted, etc.
-*-
-*/
-
-/* Local Variables: */
-   double **ptr_in;              /* Pointer to array of input data pointers */
-   double **ptr_out;             /* Pointer to array of output data pointers */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of input coordinates per point */
-   int ncoord_out;               /* Number of output coordinates per point */
-   int npoint;                   /* Number of points to report */
-   int npoint_in;                /* Number of input points */
-   int npoint_out;               /* Number of output points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the numbers of points and coordinates associated with each
-   PointSet. */ 
-   npoint_in = astGetNpoint( in_points );
-   npoint_out = astGetNpoint( out_points );
-   ncoord_in = astGetNcoord( in_points );
-   ncoord_out = astGetNcoord( out_points );
-
-/* Obtain the pointers that give access to the coordinate data
-   associated with each PointSet. */
-   ptr_in = astGetPoints( in_points );
-   ptr_out = astGetPoints( out_points );
-
-/* In the event that both PointSets don't contain equal numbers of
-   points (this shouldn't actually happen), simply use the minimum
-   number. */
-   npoint = ( npoint_in < npoint_out ) ? npoint_in : npoint_out;
-
-/* Loop to report the effect of the Mapping on each point in turn. */
-   for ( point = 0; point < npoint; point++ ) {
-
-/* Report the input coordinates (in parentheses and separated by
-   commas). Replace coordinate values of AST__BAD with the string
-   "<bad>" to indicate missing values. */
-      printf( "(" );
-      for ( coord = 0; coord < ncoord_in; coord++ ) {
-         if ( ptr_in[ coord ][ point ] == AST__BAD ) {
-            printf( "%s<bad>", coord ? ", " : "" );
-         } else {
-            printf( "%s%.*g", coord ? ", " : "",
-                              DBL_DIG, ptr_in[ coord ][ point ] );
-         }
-      }
-
-/* Similarly report the output coordinates. */
-      printf( ") --> (" );
-      for ( coord = 0; coord < ncoord_out; coord++ ) {
-         if ( ptr_out[ coord ][ point ] == AST__BAD ) {
-            printf( "%s<bad>", coord ? ", " : "" );
-         } else {
-            printf( "%s%.*g", coord ? ", " : "",
-                              DBL_DIG, ptr_out[ coord ][ point ] );
-         }
-      }
-      printf( ")\n" );
-   }
-}
-
-/*
-*++
-*  Name:
-c     astResample<X>
-f     AST_RESAMPLE<X>
-
-*  Purpose:
-*     Resample a region of a data grid.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     int astResample<X>( AstMapping *this, int ndim_in,
-c                         const int lbnd_in[], const int ubnd_in[],
-c                         const <Xtype> in[], const <Xtype> in_var[],
-c                         int interp, void (* finterp)(),
-c                         const double params[], int flags,
-c                         double tol, int maxpix,
-c                         <Xtype> badval, int ndim_out,
-c                         const int lbnd_out[], const int ubnd_out[],
-c                         const int lbnd[], const int ubnd[],
-c                         <Xtype> out[], <Xtype> out_var[] );
-f     RESULT = AST_RESAMPLE<X>( THIS, NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f                               INTERP, FINTERP, PARAMS, FLAGS,
-f                               TOL, MAXPIX, BADVAL,
-f                               NDIM_OUT, LBND_OUT, UBND_OUT,
-f                               LBND, UBND, OUT, OUT_VAR, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This is a set of functions for resampling gridded data (e.g. an
-*     image) under the control of a geometrical transformation, which
-*     is specified by a Mapping.  The functions operate on a pair of
-*     data grids (input and output), each of which may have any number
-*     of dimensions. Resampling may be restricted to a specified
-*     region of the output grid. An associated grid of error estimates
-*     associated with the input data may also be supplied (in the form
-*     of variance values), so as to produce error estimates for the
-*     resampled output data. Propagation of missing data (bad pixels)
-*     is supported.
-*
-*     You should use a resampling function which matches the numerical
-*     type of the data you are processing by replacing <X> in
-c     the generic function name astResample<X> by an appropriate 1- or
-f     the generic function name AST_RESAMPLE<X> by an appropriate 1- or
-*     2-character type code. For example, if you are resampling data
-c     with type "float", you should use the function astResampleF (see
-f     with type REAL, you should use the function AST_RESAMPLER (see
-*     the "Data Type Codes" section below for the codes appropriate to
-*     other numerical types).
-*
-*     Resampling of the grid of input data is performed by
-*     transforming the coordinates of the centre of each output grid
-*     element (or pixel) into the coordinate system of the input grid.
-*     Since the resulting coordinates will not, in general, coincide
-*     with the centre of an input pixel, sub-pixel interpolation is
-*     performed between the neighbouring input pixels. This produces a
-*     resampled value which is then assigned to the output pixel. A
-*     choice of sub-pixel interpolation schemes is provided, but you
-*     may also implement your own.
-*
-*     This algorithm samples the input data value, it does not integrate 
-*     it. Thus total data value in the input image will not, in general,
-*     be conserved. However, an option is provided (see the "Control Flags"
-*     section below) which can produce approximate flux conservation by 
-*     scaling the output values using the ratio of the output pixel size
-*     to the input pixel size. However, if accurate flux conservation is
-*     important to you, consder using the
-c     astRebin<X> or astRebinSeq<X> family of functions
-f     AST_REBIN<X> or AST_REBINSEQ<X> family of routines
-*     instead.
-*
-*     Output pixel coordinates are transformed into the coordinate
-*     system of the input grid using the inverse transformation of the
-*     Mapping which is supplied. This means that geometrical features
-*     in the input data are subjected to the Mapping's forward
-*     transformation as they are transferred from the input to the
-*     output grid (although the Mapping's forward transformation is
-*     not explicitly used).
-*
-*     In practice, transforming the coordinates of every pixel of a
-*     large data grid can be time-consuming, especially if the Mapping
-*     involves complicated functions, such as sky projections. To
-*     improve performance, it is therefore possible to approximate
-*     non-linear Mappings by a set of linear transformations which are
-*     applied piece-wise to separate sub-regions of the data. This
-*     approximation process is applied automatically by an adaptive
-*     algorithm, under control of an accuracy criterion which
-*     expresses the maximum tolerable geometrical distortion which may
-*     be introduced, as a fraction of a pixel.
-*     
-*     This algorithm first attempts to approximate the Mapping with a
-*     linear transformation applied over the whole region of the
-*     output grid which is being used. If this proves to be
-*     insufficiently accurate, the output region is sub-divided into
-*     two along its largest dimension and the process is repeated
-*     within each of the resulting sub-regions. This process of
-*     sub-division continues until a sufficiently good linear
-*     approximation is found, or the region to which it is being
-*     applied becomes too small (in which case the original Mapping is
-*     used directly).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to a Mapping, whose inverse transformation will be
-*        used to transform the coordinates of pixels in the output
-*        grid into the coordinate system of the input grid. This
-*        yields the positions which are used to obtain resampled
-*        values by sub-pixel interpolation within the input grid.
-*
-*        The number of input coordinates used by this Mapping (as
-*        given by its Nin attribute) should match the number of input
-c        grid dimensions given by the value of "ndim_in"
-f        grid dimensions given by the value of NDIM_IN
-*        below. Similarly, the number of output coordinates (Nout
-*        attribute) should match the number of output grid dimensions
-c        given by "ndim_out".
-f        given by NDIM_OUT.
-c     ndim_in
-f     NDIM_IN = INTEGER (Given)
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-c     lbnd_in
-f     LBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c     ubnd_in
-f     UBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd_in" and "ubnd_in" together define the shape
-f        Note that LBND_IN and UBND_IN together define the shape
-*        and size of the input grid, its extent along a particular
-c        (j'th) dimension being ubnd_in[j]-lbnd_in[j]+1 (assuming the
-c        index "j" to be zero-based). They also define
-f        (J'th) dimension being UBND_IN(J)-LBND_IN(J)+1. They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-c     in
-f     IN( * ) = <Xtype> (Given)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        input grid, containing the input data to be resampled.  The
-*        numerical type of this array should match the 1- or
-*        2-character type code appended to the function name (e.g. if
-c        you are using astResampleF, the type of each array element
-c        should be "float").
-f        you are using AST_RESAMPLER, the type of each array element
-f        should be REAL).
-*
-*        The storage order of data within this array should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     in_var
-f     IN_VAR( * ) = <Xtype> (Given)
-c        An optional pointer to a second array with the same size and
-c        type as the "in" array. If given, this should contain a set
-c        of non-negative values which represent estimates of the
-c        statistical variance associated with each element of the "in"
-c        array. If this array is supplied (together with the
-c        corresponding "out_var" array), then estimates of the
-c        variance of the resampled output data will be calculated.
-c
-c        If no input variance estimates are being provided, a NULL
-c        pointer should be given.
-f        An optional second array with the same size and type as the
-f        IN array. If the AST__USEVAR flag is set via the FLAGS
-f        argument (below), this array should contain a set of
-f        non-negative values which represent estimates of the
-f        statistical variance associated with each element of the IN
-f        array. Estimates of the variance of the resampled output data
-f        will then be calculated.
-f
-f        If the AST__USEVAR flag is not set, no input variance
-f        estimates are required and this array will not be used. A
-f        dummy (e.g. one-element) array may then be supplied.
-c     interp
-f     INTERP = INTEGER (Given)
-c        This parameter specifies the scheme to be used for sub-pixel
-f        This argument specifies the scheme to be used for sub-pixel
-*        interpolation within the input grid. It may be used to select
-*        from a set of pre-defined schemes by supplying one of the
-*        values described in the "Sub-Pixel Interpolation Schemes"
-*        section below.  If a value of zero is supplied, then the
-*        default linear interpolation scheme is used (equivalent to
-*        supplying the value AST__LINEAR).
-*
-*        Alternatively, you may supply a value which indicates that
-c        you will provide your own function to perform sub-pixel
-c        interpolation by means of the "finterp " parameter. Again, see
-f        you will provide your own routine to perform sub-pixel
-f        interpolation by means of the FINTERP argument. Again, see
-*        the "Sub-Pixel Interpolation Schemes" section below for
-*        details.
-c     finterp
-f     FINTERP = SUBROUTINE (Given)
-c        If the value given for the "interp" parameter indicates that
-c        you will provide your own function for sub-pixel
-c        interpolation, then a pointer to that function should be
-c        given here. For details of the interface which the function
-c        should have (several are possible, depending on the value of
-c        "interp"), see the "Sub-Pixel Interpolation Schemes" section
-c        below.
-f        If the value given for the INTERP argument indicates that you
-f        will provide your own routine for sub-pixel interpolation,
-f        then the name of that routine should be given here (the name
-f        should also appear in a Fortran EXTERNAL statement in the
-f        routine which invokes AST_RESAMPLE<X>). For details of the
-f        interface which the routine should have (several are
-f        possible, depending on the value of INTERP), see the
-f        "Sub-Pixel Interpolation Schemes" section below.
-*
-c        If the "interp" parameter has any other value, corresponding
-c        to one of the pre-defined interpolation schemes, then this
-c        function will not be used and you may supply a NULL pointer.
-f        If the INTERP argument has any other value, corresponding to
-f        one of the pre-defined interpolation schemes, then this
-f        routine will not be used and you may supply the null routine
-f        AST_NULL here (note only one underscore).  No EXTERNAL
-f        statement is required for this routine, so long as the AST_PAR
-f        include file has been used.
-c     params
-f     PARAMS( * ) = DOUBLE PRECISION (Given)
-c        An optional pointer to an array of double which should contain
-f        An optional array which should contain
-*        any additional parameter values required by the sub-pixel
-*        interpolation scheme. If such parameters are required, this
-*        will be noted in the "Sub-Pixel Interpolation Schemes"
-c        section below (you may also use this array to pass values
-c        to your own interpolation function).
-f        section below (you may also use this array to pass values
-f        to your own interpolation routine).
-*
-c        If no additional parameters are required, this array is not
-c        used and a NULL pointer may be given.
-f        If no additional parameters are required, this array is not
-f        used. A dummy (e.g. one-element) array may then be supplied.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        The bitwise OR of a set of flag values which may be used to
-f        The sum of a set of flag values which may be used to
-*        provide additional control over the resampling operation. See
-*        the "Control Flags" section below for a description of the
-*        options available.  If no flag values are to be set, a value
-*        of zero should be given.
-c     tol
-f     TOL = DOUBLE PRECISION (Given)
-*        The maximum tolerable geometrical distortion which may be
-*        introduced as a result of approximating non-linear Mappings
-*        by a set of piece-wise linear transformations. This should be
-*        expressed as a displacement in pixels in the input grid's
-*        coordinate system.
-*
-*        If piece-wise linear approximation is not required, a value
-*        of zero may be given. This will ensure that the Mapping is
-*        used without any approximation, but may increase execution
-*        time.
-c     maxpix
-f     MAXPIX = INTEGER (Given)
-*        A value which specifies an initial scale size (in pixels) for
-*        the adaptive algorithm which approximates non-linear Mappings
-*        with piece-wise linear transformations. Normally, this should
-*        be a large value (larger than any dimension of the region of
-*        the output grid being used). In this case, a first attempt to
-*        approximate the Mapping by a linear transformation will be
-*        made over the entire output region.
-*
-*        If a smaller value is used, the output region will first be
-c        divided into sub-regions whose size does not exceed "maxpix"
-f        divided into sub-regions whose size does not exceed MAXPIX
-*        pixels in any dimension. Only at this point will attempts at
-*        approximation commence.
-*
-*        This value may occasionally be useful in preventing false
-*        convergence of the adaptive algorithm in cases where the
-*        Mapping appears approximately linear on large scales, but has
-*        irregularities (e.g. holes) on smaller scales. A value of,
-*        say, 50 to 100 pixels can also be employed as a safeguard in
-*        general-purpose software, since the effect on performance is
-*        minimal.
-*
-*        If too small a value is given, it will have the effect of
-*        inhibiting linear approximation altogether (equivalent to
-c        setting "tol" to zero). Although this may degrade
-f        setting TOL to zero). Although this may degrade
-*        performance, accurate results will still be obtained.
-c     badval
-f     BADVAL = <Xtype> (Given)
-*        This argument should have the same type as the elements of
-c        the "in" array. It specifies the value used to flag missing
-f        the IN array. It specifies the value used to flag missing
-*        data (bad pixels) in the input and output arrays.
-*
-c        If the AST__USEBAD flag is set via the "flags" parameter,
-f        If the AST__USEBAD flag is set via the FLAGS argument,
-c        then this value is used to test for bad pixels in the "in"
-c        (and "in_var") array(s).
-f        then this value is used to test for bad pixels in the IN
-f        (and IN_VAR) array(s).
-*
-c        Unless the AST__NOBAD flag is set via the "flags" parameter,
-f        Unless the AST__NOBAD flag is set via the FLAGS argument,
-*        this value is also used to flag any output
-c        elements in the "out" (and "out_var") array(s) for which
-f        elements in the OUT (and OUT_VAR) array(s) for which
-*        resampled values could not be obtained (see the "Propagation
-*        of Missing Data" section below for details of the
-c        circumstances under which this may occur). The astResample<X>
-f        circumstances under which this may occur). The AST_RESAMPLE<X>
-*        function return value indicates whether any such values have
-*        been produced. If the AST__NOBAD flag is set. then output array
-*        elements for which no resampled value could be obtained are
-*        left set to the value they had on entry to this function.
-c     ndim_out
-f     NDIM_OUT = INTEGER (Given)
-*        The number of dimensions in the output grid. This should be
-*        at least one. It need not necessarily be equal to the number
-*        of dimensions in the input grid.
-c     lbnd_out
-f     LBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the output grid along each dimension.
-c     ubnd_out
-f     UBND_OUT( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the output grid along each dimension.
-*
-c        Note that "lbnd_out" and "ubnd_out" together define the
-f        Note that LBND_OUT and UBND_OUT together define the
-*        shape, size and coordinate system of the output grid in the
-c        same way as "lbnd_in" and "ubnd_in" define the shape, size
-f        same way as LBND_IN and UBND_IN define the shape, size
-*        and coordinate system of the input grid.
-c     lbnd
-f     LBND( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the first pixel in the region
-*        of the output grid for which a resampled value is to be
-*        calculated.
-c     ubnd
-f     UBND( NDIM_OUT ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_out" elements,
-f        An array
-*        containing the coordinates of the last pixel in the region of
-*        the output grid for which a resampled value is to be
-*        calculated.
-*
-c        Note that "lbnd" and "ubnd" together define the shape and
-f        Note that LBND and UBND together define the shape and
-*        position of a (hyper-)rectangular region of the output grid
-*        for which resampled values should be produced. This region
-*        should lie wholly within the extent of the output grid (as
-c        defined by the "lbnd_out" and "ubnd_out" arrays). Regions of
-f        defined by the LBND_OUT and UBND_OUT arrays). Regions of
-*        the output grid lying outside this region will not be
-*        modified.
-c     out
-f     OUT( * ) = <Xtype> (Returned)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        output grid, into which the resampled data values will be
-*        returned. The numerical type of this array should match that
-c        of the "in" array, and the data storage order should be such
-f        of the IN array, and the data storage order should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     out_var
-f     OUT_VAR( * ) = <Xtype> (Returned)
-c        An optional pointer to an array with the same type and size
-c        as the "out" array. If given, this array will be used to
-c        return variance estimates for the resampled data values. This
-c        array will only be used if the "in_var" array has also been
-c        supplied.
-f        An optional array with the same type and size as the OUT
-f        array. If the AST__USEVAR flag is set via the FLAGS argument,
-f        this array will be used to return variance estimates for the
-f        resampled data values.
-*
-*        The output variance values will be calculated on the
-*        assumption that errors on the input data values are
-*        statistically independent and that their variance estimates
-*        may simply be summed (with appropriate weighting factors)
-*        when several input pixels contribute to an output data
-*        value. If this assumption is not valid, then the output error
-*        estimates may be biased. In addition, note that the
-*        statistical errors on neighbouring output data values (as
-*        well as the estimates of those errors) may often be
-*        correlated, even if the above assumption about the input data
-*        is correct, because of the sub-pixel interpolation schemes
-*        employed.
-*
-c        If no output variance estimates are required, a NULL pointer
-c        should be given.
-f        If the AST__USEVAR flag is not set, no output variance
-f        estimates will be calculated and this array will not be
-f        used. A dummy (e.g. one-element) array may then be supplied.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astResample<X>()
-f     AST_RESAMPLE<X> = INTEGER
-*        The number of output pixels for which no valid resampled value
-*        could be obtained. Thus, in the absence of any error, a returned 
-*        value of zero indicates that all the required output pixels 
-*        received valid resampled data values (and variances). See the
-c        "badval" and "flags" parameters.
-f        BADVAL and FLAGS arguments.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Data Type Codes:
-*     To select the appropriate resampling function, you should
-c     replace <X> in the generic function name astResample<X> with a
-f     replace <X> in the generic function name AST_RESAMPLE<X> with a
-*     1- or 2-character data type code, so as to match the numerical
-*     type <Xtype> of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - L: long int
-c     - UL: unsigned long int
-c     - I: int
-c     - UI: unsigned int
-c     - S: short int
-c     - US: unsigned short int
-c     - B: byte (signed char)
-c     - UB: unsigned byte (unsigned char)
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - UI: INTEGER (treated as unsigned)
-f     - S: INTEGER*2 (short integer)
-f     - US: INTEGER*2 (short integer, treated as unsigned)
-f     - B: BYTE (treated as signed)
-f     - UB: BYTE (treated as unsigned)
-*
-c     For example, astResampleD would be used to process "double"
-c     data, while astResampleS would be used to process "short int"
-c     data, etc.
-f     For example, AST_RESAMPLED would be used to process DOUBLE
-f     PRECISION data, while AST_RESAMPLES would be used to process
-f     short integer data (stored in an INTEGER*2 array), etc.
-f
-f     For compatibility with other Starlink facilities, the codes W
-f     and UW are provided as synonyms for S and US respectively (but
-f     only in the Fortran interface to AST).
-
-*  Sub-Pixel Interpolation Schemes:
-*     There is no such thing as a perfect sub-pixel interpolation
-*     scheme and, in practice, all resampling will result in some
-*     degradation of gridded data.  A range of schemes is therefore
-*     provided, from which you can choose the one which best suits
-*     your needs.
-*
-*     In general, a balance must be struck between schemes which tend
-*     to degrade sharp features in the data by smoothing them, and
-*     those which attempt to preserve sharp features. The latter will
-*     often tend to introduce unwanted oscillations, typically visible
-*     as "ringing" around sharp features and edges, especially if the
-*     data are under-sampled (i.e. if the sharpest features are less
-*     than about two pixels across). In practice, a good interpolation
-*     scheme is likely to be a compromise and may exhibit some aspects
-*     of both these features.
-*
-*     For under-sampled data, some interpolation schemes may appear to
-*     preserve data resolution because they transform single input
-*     pixels into single output pixels, rather than spreading their
-*     data between several output pixels. While this may look
-*     better cosmetically, it can result in a geometrical shift of
-*     sharp features in the data. You should beware of this if you
-*     plan to use such features (e.g.) for image alignment.
-*
-*     The following are two easy-to-use sub-pixel interpolation
-*     schemes which are generally applicable. They are selected by
-c     supplying the appropriate value (defined in the "ast.h" header
-c     file) via the "interp" parameter. In these cases, the "finterp"
-c     and "params" parameters are not used:
-f     supplying the appropriate value (defined in the AST_PAR include
-f     file) via the INTERP argument. In these cases, the FINTERP
-f     and PARAMS arguments are not used:
-*
-*     - AST__NEAREST: This is the simplest possible scheme, in which
-*     the value of the input pixel with the nearest centre to the
-*     interpolation point is used. This is very quick to execute and
-*     will preserve single-pixel features in the data, but may
-*     displace them by up to half their width along each dimension. It
-*     often gives a good cosmetic result, so is useful for quick-look
-*     processing, but is unsuitable if accurate geometrical
-*     transformation is required.
-*     - AST__LINEAR: This is the default scheme, which uses linear
-*     interpolation between the nearest neighbouring pixels in the
-*     input grid (there are two neighbours in one dimension, four
-*     neighbours in two dimensions, eight in three dimensions,
-*     etc.). It is superior to the nearest-pixel scheme (above) in not
-*     displacing features in the data, yet it still executes fairly
-*     rapidly. It is generally a safe choice if you do not have any
-*     particular reason to favour another scheme, since it cannot
-*     introduce oscillations. However, it does introduce some spatial
-*     smoothing which varies according to the distance of the
-*     interpolation point from the neighbouring pixels. This can
-*     degrade the shape of sharp features in the data in a
-*     position-dependent way. It may also show in the output variance
-*     grid (if used) as a pattern of stripes or fringes.
-*
-*     An alternative set of interpolation schemes is based on forming
-*     the interpolated value from the weighted sum of a set of
-*     surrounding pixel values (not necessarily just the nearest
-*     neighbours). This approach has its origins in the theory of
-*     digital filtering, in which interpolated values are obtained by
-*     conceptually passing the sampled data (represented by a grid of
-*     delta functions) through a linear filter which implements a
-*     convolution. Because the convolution kernel is continuous, the
-*     convolution yields a continuous function which may then be
-*     evaluated at fractional pixel positions. The (possibly
-*     multi-dimensional) kernel is usually regarded as "separable" and
-*     formed from the product of a set of identical 1-dimensional
-*     kernel functions, evaluated along each dimension. Different
-*     interpolation schemes are then distinguished by the choice of
-*     this 1-dimensional interpolation kernel. The number of
-*     surrounding pixels which contribute to the result may also be
-*     varied.
-*
-*     From a practical standpoint, it is useful to divide the weighted
-*     sum of pixel values by the sum of the weights when determining
-*     the interpolated value.  Strictly, this means that a true
-*     convolution is no longer being performed. However, the
-*     distinction is rarely important in practice because (for
-*     slightly subtle reasons) the sum of weights is always
-*     approximately constant for good interpolation kernels. The
-*     advantage of this technique, which is used here, is that it can
-*     easily accommodate missing data and tends to minimise unwanted
-*     oscillations at the edges of the data grid.
-*
-*     In the following schemes, which are based on a 1-dimensional
-c     interpolation kernel, the first element of the "params" array
-f     interpolation kernel, the first element of the PARAMS array
-*     should be used to specify how many pixels are to contribute to the
-*     interpolated result on either side of the interpolation point in
-*     each dimension (the nearest integer value is used). Execution time
-*     increases rapidly with this number. Typically, a value of 2 is
-*     appropriate and the minimum value used will be 1 (i.e. two pixels
-*     altogether, one on either side of the interpolation point).
-c     A value of zero or less may be given for "params[0]"
-f     A value of zero or less may be given for PARAMS(1)
-*     to indicate that a suitable number of pixels should be calculated
-*     automatically.
-*
-c     In each of these cases, the "finterp" parameter is not used:
-f     In each of these cases, the FINTERP argument is not used:
-*
-*     - AST__SINC: This scheme uses a sinc(pi*x) kernel, where x is the
-*     pixel offset from the interpolation point and sinc(z)=sin(z)/z. This
-*     sometimes features as an "optimal" interpolation kernel in books on
-*     image processing. Its supposed optimality depends on the assumption
-*     that the data are band-limited (i.e. have no spatial frequencies above
-*     a certain value) and are adequately sampled. In practice, astronomical
-*     data rarely meet these requirements. In addition, high spatial
-*     frequencies are often present due (e.g.) to image defects and cosmic
-*     ray events. Consequently, substantial ringing can be experienced with
-*     this kernel. The kernel also decays slowly with distance, so that
-*     many surrounding pixels are required, leading to poor performance.
-*     Abruptly truncating it, by using only a few neighbouring pixels,
-c     improves performance and may reduce ringing (if "params[0]" is set to
-f     improves performance and may reduce ringing (if PARAMS(1) is set to
-*     zero, then only two pixels will be used on either side). However, a
-*     more gradual truncation, as implemented by other kernels, is generally
-*     to be preferred. This kernel is provided mainly so that you can
-*     convince yourself not to use it!
-*     - AST__SINCSINC: This scheme uses an improved kernel, of the form
-*     sinc(pi*x).sinc(k*pi*x), with k a constant, out to the point where
-*     sinc(k*pi*x) goes to zero, and zero beyond. The second sinc() factor
-*     provides an "envelope" which gradually rolls off the normal sinc(pi*x)
-*     kernel at large offsets. The width of this envelope is specified by
-*     giving the number of pixels offset at which it goes to zero by means
-c     of the "params[1]" value, which should be at least 1.0 (in addition,
-c     setting "params[0]" to zero will select the number of contributing
-f     of the PARAMS(2) value, which should be at least 1.0 (in addition,
-f     setting PARAMS(1) to zero will select the number of contributing
-*     pixels so as to utilise the full width of the kernel, out to where it
-c     reaches zero). The case given by "params[0]=2, params[1]=2" is typically
-f     reaches zero). The case given by PARAMS(1)=2, PARAMS(2)=2 is typically
-*     a good choice and is sometimes known as the Lanczos kernel. This is a
-*     valuable general-purpose interpolation scheme, intermediate in its
-*     visual effect on images between the AST__NEAREST and AST__LINEAR
-*     schemes. Although the kernel is slightly oscillatory, ringing is
-*     adequately suppressed if the data are well sampled.
-*     - AST__SINCCOS: This scheme uses a kernel of the form
-*     sinc(pi*x).cos(k*pi*x), with k a constant, out to the point where
-*     cos(k*pi*x) goes to zero, and zero beyond. As above, the cos() factor
-*     provides an envelope which gradually rolls off the sinc() kernel
-*     at large offsets. The width of this envelope is specified by giving
-*     the number of pixels offset at which it goes to zero by means
-c     of the "params[1]" value, which should be at least 1.0 (in addition,
-c     setting "params[0]" to zero will select the number of contributing
-f     of the PARAMS(2) value, which should be at least 1.0 (in addition,
-f     setting PARAMS(1) to zero will select the number of contributing
-*     pixels so as to utilise the full width of the kernel, out to where it
-*     reaches zero). This scheme gives similar results to the
-*     AST__SINCSINC scheme, which it resembles.
-*     - AST__SINCGAUSS: This scheme uses a kernel of the form
-*     sinc(pi*x).exp(-k*x*x), with k a positive constant. Here, the sinc()
-*     kernel is rolled off using a Gaussian envelope which is specified by
-c     giving its full-width at half-maximum (FWHM) by means of the "params[1]"
-c     value, which should be at least 0.1 (in addition, setting "params[0]"
-f     giving its full-width at half-maximum (FWHM) by means of the PARAMS(2)
-f     value, which should be at least 0.1 (in addition, setting PARAMS(1)
-*     to zero will select the number of contributing pixels so as to utilise
-*     the width of the kernel out to where the envelope declines to 1% of its
-*     maximum value). On astronomical images and spectra, good results are
-*     often obtained by approximately matching the FWHM of the
-c     envelope function, given by "params[1]", to the point spread function
-f     envelope function, given by PARAMS(2), to the point spread function
-*     of the input data. However, there does not seem to be any theoretical
-*     reason for this.
-*     - AST__SOMB: This scheme uses a somb(pi*x) kernel (a "sombrero"
-*     function), where x is the pixel offset from the interpolation point 
-*     and somb(z)=2*J1(z)/z  (J1 is a Bessel function of the first kind of
-*     order 1). It is similar to the AST__SINC kernel, and has the same 
-*     parameter usage.
-*     - AST__SOMBCOS: This scheme uses a kernel of the form 
-*     somb(pi*x).cos(k*pi*x), with k a constant, out to the point where
-*     cos(k*pi*x) goes to zero, and zero beyond. It is similar to the 
-*     AST__SINCCOS kernel, and has the same parameter usage.
-*
-*     In addition, the following schemes are provided which are not based
-*     on a 1-dimensional kernel:
-*
-*     - AST__BLOCKAVE: This scheme simply takes an average of all the
-*     pixels on the input grid in a cube centred on the interpolation
-*     point.  The number of pixels in the cube is determined by the
-c     value of the first element of the "params" array, which gives
-f     value of the first element of the PARAMS array, which gives
-*     the number of pixels in each dimension on either side of the
-c     central point.  Hence a block of (2 * params[0])^ndim_in
-f     central point.  Hence a block of (2 * PARAMS(1))**NDIM_IN
-*     pixels in the input grid will be examined to determine the
-*     value of the output pixel.  If the variance is not being used
-c     (var_in or var_out = NULL) then all valid pixels in this cube
-f     (USEVAR = .FALSE.) then all valid pixels in this cube
-*     will be averaged in to the result with equal weight.
-*     If variances are being used, then each input pixel will be 
-*     weighted proportionally to the reciprocal of its variance; any
-*     pixel without a valid variance will be discarded.  This scheme
-*     is suitable where the output grid is much coarser than the 
-*     input grid; if the ratio of pixel sizes is R then a suitable
-c     value of params[0] may be R/2.
-f     value of PARAMS(1) may be R/2.
-*
-c     Finally, supplying the following values for "interp" allows you
-c     to implement your own sub-pixel interpolation scheme by means of
-c     your own function. You should supply a pointer to this function
-c     via the "finterp" parameter:
-f     Finally, supplying the following values for INTERP allows you to
-f     implement your own sub-pixel interpolation scheme by means of
-f     your own routine. You should supply the name of this routine via
-f     the FINTERP argument:
-*
-c     - AST__UKERN1: In this scheme, you supply a function to evaluate
-c     your own 1-dimensional interpolation kernel, which is then used
-c     to perform sub-pixel interpolation (as described above). The
-c     function you supply should have the same interface as the
-c     fictitious astUkern1 function (q.v.).  In addition, a value
-c     should be given via "params[0]" to specify the number of
-c     neighbouring pixels which are to contribute to each interpolated
-c     value (in the same way as for the pre-defined interpolation
-c     schemes described above). Other elements of the "params" array
-c     are available to pass values to your interpolation function.
-f     - AST__UKERN1: In this scheme, you supply a routine to evaluate
-f     your own 1-dimensional interpolation kernel, which is then used
-f     to perform sub-pixel interpolation (as described above). The
-f     routine you supply should have the same interface as the
-f     fictitious AST_UKERN1 routine (q.v.).  In addition, a value
-f     should be given via PARAMS(1) to specify the number of
-f     neighbouring pixels which are to contribute to each interpolated
-f     value (in the same way as for the pre-defined interpolation
-f     schemes described above). Other elements of the PARAMS array
-f     are available to pass values to your interpolation routine.
-*
-c     - AST__UINTERP: This is a completely general scheme, in which
-c     your interpolation function has access to all of the input
-c     data. This allows you to implement any interpolation algorithm
-c     you choose, which could (for example) be non-linear, or
-c     adaptive. In this case, the astResample<X> functions play no
-c     role in the sub-pixel interpolation process and simply handle
-c     the geometrical transformation of coordinates and other
-c     housekeeping. The function you supply should have the same
-c     interface as the fictitious astUinterp function (q.v.). In this
-c     case, the "params" parameter is not used by astResample<X>, but
-c     is available to pass values to your interpolation function.
-f     - AST__UINTERP: This is a completely general scheme, in which
-f     your interpolation routine has access to all of the input
-f     data. This allows you to implement any interpolation algorithm
-f     you choose, which could (for example) be non-linear, or
-f     adaptive. In this case, the AST_RESAMPLE<X> functions play no
-f     role in the sub-pixel interpolation process and simply handle
-f     the geometrical transformation of coordinates and other
-f     housekeeping. The routine you supply should have the same
-f     interface as the fictitious AST_UINTERP routine (q.v.). In this
-f     case, the PARAMS argument is not used by AST_RESAMPLE<X>, but
-f     is available to pass values to your interpolation routine.
-
-*  Control Flags:
-c     The following flags are defined in the "ast.h" header file and
-f     The following flags are defined in the AST_PAR include file and
-*     may be used to provide additional control over the resampling
-*     process. Having selected a set of flags, you should supply the
-c     bitwise OR of their values via the "flags" parameter:
-f     sum of their values via the FLAGS argument:
-*
-*     - AST__NOBAD: Indicates that any output array elements for which no
-*     resampled value could be obtained should be left set to the value
-*     they had on entry to this function. If this flag is not supplied, 
-*     such output array elements are set to the value supplied for
-c     parameter "badval". Note, this flag cannot be used in conjunction
-f     argument BADVAL. Note, this flag cannot be used in conjunction
-*     with the AST__CONSERVEFLUX flag (an error will be reported if both
-*     flags are specified).
-*     - AST__URESAMP1, 2, 3 & 4: A set of four flags which are
-*     reserved for your own use. They may be used to pass private
-c     information to any sub-pixel interpolation function which you
-f     information to any sub-pixel interpolation routine which you
-*     implement yourself. They are ignored by all the pre-defined
-*     interpolation schemes.
-*     - AST__USEBAD: Indicates that there may be bad pixels in the
-*     input array(s) which must be recognised by comparing with the
-c     value given for "badval" and propagated to the output array(s).
-f     value given for BADVAL and propagated to the output array(s).
-*     If this flag is not set, all input values are treated literally
-c     and the "badval" value is only used for flagging output array
-f     and the BADVAL value is only used for flagging output array
-*     values.
-f     - AST__USEVAR: Indicates that variance information should be
-f     processed in order to provide estimates of the statistical error
-f     associated with the resampled values. If this flag is not set,
-f     no variance processing will occur and the IN_VAR and OUT_VAR
-f     arrays will not be used. (Note that this flag is only available
-f     in the Fortran interface to AST.)
-*     - AST__CONSERVEFLUX: Indicates that the output pixel values should
-*     be scaled in such a way as to preserve (approximately) the total data 
-*     value in a feature on the sky. Without this flag, each output pixel 
-*     value represents an instantaneous sample of the input data values at 
-*     the corresponding input position. This is appropriate if the input
-*     data represents the spatial density of some quantity (e.g. surface
-*     brightness in Janskys per square arc-second) because the output
-*     pixel values will have the same normalisation and units as the
-*     input pixel values. However, if the input data values represent
-*     flux (or some other physical quantity) per pixel, then the 
-*     AST__CONSERVEFLUX flag could be used. This causes each output
-*     pixel value to be scaled by the ratio of the output pixel size to
-*     the input pixel size. 
-*
-*     This flag can only be used if the Mapping is succesfully approximated 
-*     by one or more linear transformations. Thus an error will be reported 
-*     if it used when the 
-c     "tol" parameter
-f     TOL argument
-*     is set to zero (which stops the use of linear approximations), or
-*     if the Mapping is too non-linear to be approximated by a piece-wise
-*     linear transformation. The ratio of output to input pixel size is 
-*     evaluated once for each panel of the piece-wise linear approximation to 
-*     the Mapping, and is assumed to be constant for all output pixels in the 
-*     panel. The scaling factors for adjacent panels will in general
-*     differ slightly, and so the joints between panels may be visible when 
-*     viewing the output image at high contrast. If this is a problem,
-*     reduce the value of the 
-c     "tol" parameter
-f     TOL argument
-*     until the difference between adjacent panels is sufficiently small
-*     to be insignificant. 
-*
-*     Note, this flag cannot be used in conjunction with the AST__NOBAD 
-*     flag (an error will be reported if both flags are specified).
-*
-*     Flux conservation can only be approximate when using a resampling
-*     algorithm. For accurate flux conservation use the 
-c     astRebin<X> or astRebinSeq<X> function
-f     AST_REBIN<X> or AST_REBINSEQ<X> routine
-*     instead.
-
-*  Propagation of Missing Data:
-*     Unless the AST__NOBAD flag is specified, instances of missing data 
-*     (bad pixels) in the output grid are
-c     identified by occurrences of the "badval" value in the "out"
-f     identified by occurrences of the BADVAL value in the OUT
-*     array. These may be produced if any of the following happen:
-*
-*     - The input position (the transformed position of the output
-*     pixel's centre) lies outside the boundary of the grid of input
-*     pixels.
-*     - The input position lies inside the boundary of a bad input
-*     pixel. In this context, an input pixel is considered bad if its
-c     data value is equal to "badval" and the AST__USEBAD flag is
-c     set via the "flags" parameter.
-f     data value is equal to BADVAL and the AST__USEBAD flag is
-f     set via the FLAGS argument.
-*     (Positions which have half-integral coordinate values, and
-*     therefore lie on a pixel boundary, are regarded as lying within
-*     the pixel with the larger, i.e. more positive, index.)
-*     - The set of neighbouring input pixels (excluding those which
-*     are bad) is unsuitable for calculating an interpolated
-*     value. Whether this is true may depend on the sub-pixel
-*     interpolation scheme in use.
-*     - The interpolated value lies outside the range which can be
-c     represented using the data type of the "out" array.
-f     represented using the data type of the OUT array.
-*
-*     In addition, associated output variance estimates (if
-c     calculated) may be declared bad and flagged with the "badval"
-c     value in the "out_var" array under any of the following
-f     calculated) may be declared bad and flagged with the BADVAL
-f     value in the OUT_VAR array under any of the following
-*     circumstances:
-*
-c     - The associated resampled data value (in the "out" array) is bad.
-f     - The associated resampled data value (in the OUT array) is bad.
-*     - The set of neighbouring input pixels which contributed to the
-*     output data value do not all have valid variance estimates
-*     associated with them. In this context, an input variance
-*     estimate may be regarded as bad either because it has the value
-c     "badval" (and the AST__USEBAD flag is set), or because it is
-f     BADVAL (and the AST__USEBAD flag is set), or because it is
-*     negative.
-*     - The set of neighbouring input pixels for which valid variance
-*     values are available is unsuitable for calculating an overall
-*     variance value. Whether this is true may depend on the sub-pixel
-*     interpolation scheme in use.
-*     - The variance value lies outside the range which can be
-c     represented using the data type of the "out_var" array.
-f     represented using the data type of the OUT_VAR array.
-*
-*     If the AST__NOBAD flag is specified via
-c     parameter "flags",
-f     argument FLAGS,
-*     then output array elements that would otherwise be set to 
-c     "badval"
-f     BADVAL
-*     are instead left holding the value they had on entry to this
-*     function. The number of such array elements is returned as
-*     the function value.
-*--
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_RESAMPLE(X,Xtype) \
-static int Resample##X( AstMapping *this, int ndim_in, \
-                        const int lbnd_in[], const int ubnd_in[], \
-                        const Xtype in[], const Xtype in_var[], \
-                        int interp, void (* finterp)(), \
-                        const double params[], int flags, double tol, \
-                        int maxpix, Xtype badval, \
-                        int ndim_out, const int lbnd_out[], \
-                        const int ubnd_out[], const int lbnd[], \
-                        const int ubnd[], Xtype out[], Xtype out_var[], int *status ) { \
-\
-/* Local Variables: */ \
-   astDECLARE_GLOBALS            /* Thread-specific data */ \
-   AstMapping *simple;           /* Pointer to simplified Mapping */ \
-   int idim;                     /* Loop counter for coordinate dimensions */ \
-   int nin;                      /* Number of Mapping input coordinates */ \
-   int nout;                     /* Number of Mapping output coordinates */ \
-   int npix;                     /* Number of pixels in output region */ \
-   int result;                   /* Result value to return */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
-   astGET_GLOBALS(this); \
-\
-/* Obtain values for the Nin and Nout attributes of the Mapping. */ \
-   nin = astGetNin( this ); \
-   nout = astGetNout( this ); \
-\
-/* If OK, check that the number of input grid dimensions matches the \
-   number required by the Mapping and is at least 1. Report an error \
-   if necessary. */ \
-   if ( astOK && ( ( ndim_in != nin ) || ( ndim_in < 1 ) ) ) { \
-      astError( AST__NGDIN, "astResample"#X"(%s): Bad number of input grid " \
-                "dimensions (%d).", status, astGetClass( this ), ndim_in ); \
-      if ( ndim_in != nin ) { \
-         astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                   "to specify an input position.", status, \
-                   astGetClass( this ), nin, ( nin == 1 ) ? "" : "s" ); \
-      } \
-   } \
-\
-/* If OK, also check that the number of output grid dimensions matches \
-   the number required by the Mapping and is at least 1. Report an \
-   error if necessary. */ \
-   if ( astOK && ( ( ndim_out != nout ) || ( ndim_out < 1 ) ) ) { \
-      astError( AST__NGDIN, "astResample"#X"(%s): Bad number of output grid " \
-                "dimensions (%d).", status, astGetClass( this ), ndim_out ); \
-      if ( ndim_out != nout ) { \
-         astError( AST__NGDIN, "The %s given generates %s%d coordinate " \
-                   "value%s for each output position.", status, astGetClass( this ), \
-                   ( nout < ndim_out ) ? "only " : "", nout, \
-                   ( nout == 1 ) ? "" : "s" ); \
-      } \
-   } \
-\
-/* Check that the lower and upper bounds of the input grid are \
-   consistent. Report an error if any pair is not. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_in; idim++ ) { \
-         if ( lbnd_in[ idim ] > ubnd_in[ idim ] ) { \
-            astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
-                      "input grid (%d) exceeds corresponding upper bound " \
-                      "(%d).", status, astGetClass( this ), \
-                      lbnd_in[ idim ], ubnd_in[ idim ] ); \
-            astError( AST__GBDIN, "Error in input dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* Check that the positional accuracy tolerance supplied is valid and \
-   report an error if necessary. */ \
-   if ( astOK && ( tol < 0.0 ) ) { \
-      astError( AST__PATIN, "astResample"#X"(%s): Invalid positional " \
-                "accuracy tolerance (%.*g pixel).", status, \
-                astGetClass( this ), DBL_DIG, tol ); \
-      astError( AST__PATIN, "This value should not be less than zero." , status); \
-   } \
-\
-/* Check that the initial scale size in pixels supplied is valid and \
-   report an error if necessary. */ \
-   if ( astOK && ( maxpix < 0 ) ) { \
-      astError( AST__SSPIN, "astResample"#X"(%s): Invalid initial scale " \
-                "size in pixels (%d).", status, astGetClass( this ), maxpix ); \
-      astError( AST__SSPIN, "This value should not be less than zero." , status); \
-   } \
-\
-/* Check that the lower and upper bounds of the output grid are \
-   consistent. Report an error if any pair is not. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_out; idim++ ) { \
-         if ( lbnd_out[ idim ] > ubnd_out[ idim ] ) { \
-            astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
-                      "output grid (%d) exceeds corresponding upper bound " \
-                      "(%d).", status, astGetClass( this ), \
-                      lbnd_out[ idim ], ubnd_out[ idim ] ); \
-            astError( AST__GBDIN, "Error in output dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* Similarly check the bounds of the output region. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim_out; idim++ ) { \
-         if ( lbnd[ idim ] > ubnd[ idim ] ) { \
-            astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
-                      "output region (%d) exceeds corresponding upper " \
-                      "bound (%d).", status, astGetClass( this ), \
-                      lbnd[ idim ], ubnd[ idim ] ); \
-\
-/* Also check that the output region lies wholly within the output \
-   grid. */ \
-         } else if ( lbnd[ idim ] < lbnd_out[ idim ] ) { \
-            astError( AST__GBDIN, "astResample"#X"(%s): Lower bound of " \
-                      "output region (%d) is less than corresponding " \
-                      "bound of output grid (%d).", status, astGetClass( this ), \
-                      lbnd[ idim ], lbnd_out[ idim ] ); \
-         } else if ( ubnd[ idim ] > ubnd_out[ idim ] ) { \
-            astError( AST__GBDIN, "astResample"#X"(%s): Upper bound of " \
-                      "output region (%d) exceeds corresponding " \
-                      "bound of output grid (%d).", status, astGetClass( this ), \
-                      ubnd[ idim ], ubnd_out[ idim ] ); \
-         } \
-\
-/* Say which dimension produced the error. */ \
-         if ( !astOK ) { \
-            astError( AST__GBDIN, "Error in output dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* If we are conserving flux, check "tol" is not zero. */ \
-   if( ( flags & AST__CONSERVEFLUX ) && astOK ) { \
-      if( tol == 0.0 ) { \
-         astError( AST__CNFLX, "astResample"#X"(%s): Flux conservation was " \
-                   "requested but cannot be performed because zero tolerance " \
-                   "was also specified.", status, astGetClass( this ) ); \
-\
-/* Also check "nin" and "nout" are equal. */ \
-      } else if( nin != nout ) { \
-         astError( AST__CNFLX, "astResample"#X"(%s): Flux conservation was " \
-                "requested but cannot be performed because the Mapping " \
-                "has different numbers of inputs and outputs.", status, \
-                astGetClass( this ) ); \
-      } \
-   } \
-\
-/* If OK, loop to determine how many pixels require resampled values. */ \
-   simple = NULL; \
-   if ( astOK ) { \
-      npix = 1; \
-      for ( idim = 0; idim < ndim_out; idim++ ) { \
-         npix *= ubnd[ idim ] - lbnd[ idim ] + 1; \
-      } \
-\
-/* If there are sufficient pixels to make it worthwhile, simplify the \
-   Mapping supplied to improve performance. Otherwise, just clone the \
-   Mapping pointer. Note we save a pointer to the original Mapping so \
-   that lower-level functions can use it if they need to report an \
-   error. */ \
-      unsimplified_mapping = this; \
-      if ( npix > 1024 ) { \
-         simple = astSimplify( this ); \
-      } else { \
-         simple = astClone( this ); \
-      } \
-   } \
-\
-/* Report an error if the inverse transformation of this simplified \
-   Mapping is not defined. */ \
-   if ( !astGetTranInverse( simple ) && astOK ) { \
-      astError( AST__TRNND, "astResample"#X"(%s): An inverse coordinate " \
-                "transformation is not defined by the %s supplied.", status, \
-                astGetClass( unsimplified_mapping ), \
-                astGetClass( unsimplified_mapping ) ); \
-   } \
-\
-/* Perform the resampling. Note that we pass all gridded data, the \
-   interpolation function and the bad pixel value by means of pointer \
-   types that obscure the underlying data type. This is to avoid \
-   having to replicate functions unnecessarily for each data \
-   type. However, we also pass an argument that identifies the data \
-   type we have obscured. */ \
-   result = ResampleAdaptively( simple, ndim_in, lbnd_in, ubnd_in, \
-                                (const void *) in, (const void *) in_var, \
-                                TYPE_##X, interp, finterp, \
-                                params, flags, tol, maxpix, \
-                                (const void *) &badval, \
-                                ndim_out, lbnd_out, ubnd_out, \
-                                lbnd, ubnd, \
-                                (void *) out, (void *) out_var, status ); \
-\
-/* Annul the pointer to the simplified/cloned Mapping. */ \
-   simple = astAnnul( simple ); \
-\
-/* If an error occurred, clear the returned result. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_RESAMPLE(LD,long double)
-#endif
-MAKE_RESAMPLE(D,double)
-MAKE_RESAMPLE(F,float)
-MAKE_RESAMPLE(L,long int)
-MAKE_RESAMPLE(UL,unsigned long int)
-MAKE_RESAMPLE(I,int)
-MAKE_RESAMPLE(UI,unsigned int)
-MAKE_RESAMPLE(S,short int)
-MAKE_RESAMPLE(US,unsigned short int)
-MAKE_RESAMPLE(B,signed char)
-MAKE_RESAMPLE(UB,unsigned char)
-
-/* Undefine the macro. */
-#undef MAKE_RESAMPLE
-
-static int ResampleAdaptively( AstMapping *this, int ndim_in,
-                               const int *lbnd_in, const int *ubnd_in,
-                               const void *in, const void *in_var,
-                               DataType type, int interp, void (* finterp)(),
-                               const double *params, int flags, double tol,
-                               int maxpix, const void *badval_ptr,
-                               int ndim_out, const int *lbnd_out,
-                               const int *ubnd_out, const int *lbnd,
-                               const int *ubnd, void *out, void *out_var, int *status ) {
-/*
-*  Name:
-*     ResampleAdaptively
-
-*  Purpose:
-*     Resample a section of a data grid adaptively.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int ResampleAdaptively( AstMapping *this, int ndim_in,
-*                             const int *lbnd_in, const int *ubnd_in,
-*                             const void *in, const void *in_var,
-*                             DataType type, int interp, void (* finterp)(),
-*                             const double *params, int flags, double tol,
-*                             int maxpix, const void *badval_ptr,
-*                             int ndim_out, const int *lbnd_out,
-*                             const int *ubnd_out, const int *lbnd,
-*                             const int *ubnd, void *out, void *out_var )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function resamples a rectangular grid of data (with any
-*     number of dimensions) into a specified section of another
-*     rectangular grid (with a possibly different number of
-*     dimensions). The coordinate transformation used to convert
-*     output pixel coordinates into positions in the input grid is
-*     given by the inverse transformation of the Mapping which is
-*     supplied.  Any pixel interpolation scheme may be specified for
-*     interpolating between the pixels of the input grid.
-*
-*     This function is very similar to ResampleWithBlocking and
-*     ResampleSection which lie below it in the calling
-*     hierarchy. However, this function also attempts to adapt to the
-*     Mapping supplied and to sub-divide the section being resampled
-*     into smaller sections within which a linear approximation to the
-*     Mapping may be used.  This reduces the number of Mapping
-*     evaluations, thereby improving efficiency particularly when
-*     complicated Mappings are involved.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose inverse transformation may be
-*        used to transform the coordinates of pixels in the output
-*        grid into associated positions in the input grid, from which
-*        the output pixel values should be derived (by interpolation
-*        if necessary).
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     in
-*        Pointer to the input array of data to be resampled (with one
-*        element for each pixel in the input grid). The numerical type
-*        of these data should match the "type" value (below). The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and data type as the "in" array),
-*        which represent estimates of the statistical variance
-*        associated with each element of the "in" array. If this
-*        second array is given (along with the corresponding "out_var"
-*        array), then estimates of the variance of the resampled data
-*        will also be returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     type
-*        A value taken from the "DataType" enum, which specifies the
-*        data type of the input and output arrays containing the
-*        gridded data (and variance) values.
-*     interp
-*        A value selected from a set of pre-defined macros to identify
-*        which sub-pixel interpolation algorithm should be used.
-*     finterp
-*        If "interp" is set to a value which requires a user-supplied
-*        function, then a pointer to that function shoild be given
-*        here. Otherwise, this value is not used and may be a NULL
-*        pointer.
-*     params
-*        Pointer to an optional array of parameters that may be passed
-*        to the interpolation algorithm, if required. If no parameters
-*        are required, a NULL pointer should be supplied.
-*     flags
-*        The bitwise OR of a set of flag values which provide
-*        additional control over the resampling operation.
-*     tol
-*        The maximum permitted positional error in transforming output
-*        pixel positions into the input grid in order to resample
-*        it. This should be expressed as a displacement in pixels in
-*        the input grid's coordinate system. If the Mapping's inverse
-*        transformation can be approximated by piecewise linear
-*        functions to this accuracy, then such functions may be used
-*        instead of the Mapping in order to improve
-*        performance. Otherwise, every output pixel position will be
-*        transformed individually using the Mapping.
-*
-*        If linear approximation is not required, a "tol" value of
-*        zero may be given. This will ensure that the Mapping is used
-*        without any approximation.
-*     maxpix
-*        A value which specifies the largest scale size on which to
-*        search for non-linearities in the Mapping supplied. This
-*        value should be expressed as a number of pixels in the output
-*        grid. The function will break the output section specified
-*        into smaller sub-sections (if necessary), each no larger than
-*        "maxpix" pixels in any dimension, before it attempts to
-*        approximate the Mapping by a linear function over each
-*        sub-section.
-* 
-*        If the value given is larger than the largest dimension of
-*        the output section (the normal recommendation), the function
-*        will initially search for non-linearity on a scale determined
-*        by the size of the output section.  This is almost always
-*        satisfactory. Very occasionally, however, a Mapping may
-*        appear linear on this scale but nevertheless have smaller
-*        irregularities (e.g. "holes") in it.  In such cases, "maxpix"
-*        may be set to a suitably smaller value so as to ensure this
-*        non-linearity is not overlooked. Typically, a value of 50 to
-*        100 pixels might be suitable and should have little effect on
-*        performance.
-*
-*        If too small a value is given, however, it will have the
-*        effect of preventing linear approximation occurring at all
-*        (equivalent to setting "tol" to zero).  Although this may
-*        degrade performance, accurate results will still be obtained.
-*     badval_ptr
-*        If the AST__USEBAD flag is set (above), this parameter is a
-*        pointer to a value which is used to identify bad data and/or
-*        variance values in the input array(s). The referenced value's
-*        data type must match that of the "in" (and "in_var")
-*        arrays. Unless the AST__NOBAD flag is set, the same value will 
-*        also be used to flag any output array elements for which 
-*        resampled values could not be obtained.  The output arrays(s) 
-*        may be flagged with this value whether or not the AST__USEBAD 
-*        flag is set (the function return value indicates whether any 
-*        such values have been produced).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output data grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output data grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output data grid in the same way as "lbnd_in"
-*        and "ubnd_in" define the shape and size of the input grid
-*        (see above).
-*     lbnd
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the output data grid for which a value is
-*        required.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the output data grid for which a value is
-*        required.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the output grid for which resampled values are
-*        required. This section should lie wholly within the extent of
-*        the output grid (as defined by the "lbnd_out" and "ubnd_out"
-*        arrays). Regions of the output grid lying outside this section
-*        will not be modified.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned.  The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given.
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-
-*  Returned Value:
-*     The number of output grid points for which no valid output value 
-*     could be obtained.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-                      
-/* Local Variables: */
-   double *flbnd;                /* Array holding floating point lower bounds */
-   double *fubnd;                /* Array holding floating point upper bounds */
-   double *linear_fit;           /* Pointer to array of fit coefficients */
-   int *hi;                      /* Pointer to array of section upper bounds */
-   int *lo;                      /* Pointer to array of section lower bounds */
-   int coord_out;                /* Loop counter for output coordinates */
-   int dim;                      /* Output section dimension size */
-   int dimx;                     /* Dimension with maximum section extent */
-   int divide;                   /* Sub-divide the output section? */
-   int i;                        /* Loop count */
-   int isLinear;                 /* Is the transformation linear? */
-   int mxdim;                    /* Largest output section dimension size */
-   int npix;                     /* Number of pixels in output section */
-   int npoint;                   /* Number of points for obtaining a fit */
-   int nvertex;                  /* Number of vertices of output section */
-   int result;                   /* Result value to return */
-   int toobig;                   /* Section too big (must sub-divide)? */
-   int toosmall;                 /* Section too small to sub-divide? */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   npix = 1;
-   mxdim = 0;
-   dimx = 1;
-   nvertex = 1;
-
-/* Loop through the output grid dimensions. */
-   for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-
-/* Obtain the extent in each dimension of the output section which is
-   to receive resampled values, and calculate the total number of
-   pixels it contains. */
-      dim = ubnd[ coord_out ] - lbnd[ coord_out ] + 1;
-      npix *= dim;
-
-/* Find the maximum dimension size of this output section and note
-   which dimension has this size. */
-      if ( dim > mxdim ) {
-         mxdim = dim;
-         dimx = coord_out;
-      }
-
-/* Calculate how many vertices the output section has. */
-      nvertex *= 2;
-   }
-   
-/* Calculate how many sample points will be needed (by the
-   astLinearApprox function) to obtain a linear fit to the Mapping's
-   inverse transformation. */
-   npoint = 1 + 4 * ndim_out + 2 * nvertex;
-
-/* If the number of pixels in the output section is not at least 4
-   times this number, we will probably not save significant time by
-   attempting to obtain a linear fit, so note that the output section
-   is too small. */
-   toosmall = ( npix < ( 4 * npoint ) );
-
-/* Note if the maximum dimension of the output section exceeds the
-   user-supplied scale factor. */
-   toobig = ( maxpix < mxdim );
-
-/* Assume the Mapping is significantly non-linear before deciding
-   whether to sub-divide the output section. */
-   linear_fit = NULL;
-
-/* If the output section is too small to be worth obtaining a linear
-   fit, or if the accuracy tolerance is zero, we will not
-   sub-divide. This means that the Mapping will be used to transform
-   each pixel's coordinates and no linear approximation will be
-   used. */
-   if ( toosmall || ( tol == 0.0 ) ) {
-      divide = 0;
-
-/* Otherwise, if the largest output section dimension exceeds the
-   scale length given, we will sub-divide. This offers the possibility
-   of obtaining a linear approximation to the Mapping over a reduced
-   range of output coordinates (which will be handled by a recursive
-   invocation of this function). */
-   } else if ( toobig ) {
-      divide = 1;
-
-/* If neither of the above apply, then attempt to fit a linear
-   approximation to the Mapping's inverse transformation over the
-   range of coordinates covered by the output section. We need to 
-   temporarily copy the integer bounds into floating point arrays to 
-   use astLinearApprox. */
-   } else {
-
-/* Allocate memory for floating point bounds and for the coefficient array */
-      flbnd = astMalloc( sizeof( double )*(size_t) ndim_out );
-      fubnd = astMalloc( sizeof( double )*(size_t) ndim_out );
-      linear_fit = astMalloc( sizeof( double )*
-                              (size_t) ( ndim_in*( ndim_out + 1 ) ) );
-      if( astOK ) {
-
-/* Copy the bounds into these arrays */
-         for( i = 0; i < ndim_out; i++ ) {
-            flbnd[ i ] = (double) lbnd[ i ];
-            fubnd[ i ] = (double) ubnd[ i ];
-         }
-
-/* Get the linear approximation to the inverse transformation. The
-   astLinearApprox function fits the forward transformation so temporarily
-   invert the Mapping in order to get a fit to the inverse transformation. */
-         astInvert( this );
-         isLinear = astLinearApprox( this, flbnd, fubnd, tol, linear_fit );
-         astInvert( this );
-
-/* Free the coeff array if the inverse transformation is not linear. */
-         if( !isLinear ) linear_fit = astFree( linear_fit );
-
-      } else {
-         linear_fit = astFree( linear_fit );
-      }
-
-/* Free resources */
-      flbnd = astFree( flbnd );
-      fubnd = astFree( fubnd );
-
-/* If a linear fit was obtained, we will use it and therefore do not
-   wish to sub-divide further. Otherwise, we sub-divide in the hope
-   that this may result in a linear fit next time. */
-      divide = !linear_fit;
-   }
-
-/* If no sub-division is required, perform resampling (in a
-   memory-efficient manner, since the section we are resampling might
-   still be very large). This will use the linear fit, if obtained
-   above. */
-   if ( astOK ) {
-      if ( !divide ) {
-         result = ResampleWithBlocking( this, linear_fit,
-                                        ndim_in, lbnd_in, ubnd_in,
-                                        in, in_var, type, interp, finterp,
-                                        params, flags, badval_ptr,
-                                        ndim_out, lbnd_out, ubnd_out,
-                                        lbnd, ubnd, out, out_var, status );
-
-/* Otherwise, allocate workspace to perform the sub-division. */
-      } else {
-         lo = astMalloc( sizeof( int ) * (size_t) ndim_out );
-         hi = astMalloc( sizeof( int ) * (size_t) ndim_out );
-         if ( astOK ) {
-
-/* Initialise the bounds of a new output section to match the original
-   output section. */
-            for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-               lo[ coord_out ] = lbnd[ coord_out ];
-               hi[ coord_out ] = ubnd[ coord_out ];
-            }
-
-/* Replace the upper bound of the section's largest dimension with the
-   mid-point of the section along this dimension, rounded
-   downwards. */
-            hi[ dimx ] =
-               (int) floor( 0.5 * (double) ( lbnd[ dimx ] + ubnd[ dimx ] ) );
-
-/* Resample the resulting smaller section using a recursive invocation
-   of this function. */
-            result = ResampleAdaptively( this, ndim_in, lbnd_in, ubnd_in,
-                                         in, in_var, type, interp, finterp,
-                                         params, flags, tol, maxpix,
-                                         badval_ptr, ndim_out,
-                                         lbnd_out, ubnd_out,
-                                         lo, hi, out, out_var, status );
-
-/* Now set up a second section which covers the remaining half of the
-   original output section. */
-            lo[ dimx ] = hi[ dimx ] + 1;
-            hi[ dimx ] = ubnd[ dimx ];
-
-/* If this section contains pixels, resample it in the same way,
-   summing the returned values. */
-            if ( lo[ dimx ] <= hi[ dimx ] ) {
-               result += ResampleAdaptively( this, ndim_in, lbnd_in, ubnd_in,
-                                             in, in_var, type, interp, finterp,
-                                             params, flags, tol, maxpix,
-                                             badval_ptr,  ndim_out,
-                                             lbnd_out, ubnd_out,
-                                             lo, hi, out, out_var, status );
-            }
-         }
-
-/* Free the workspace. */
-         lo = astFree( lo );
-         hi = astFree( hi );
-      }
-   }
-
-/* If coefficients for a linear fit were obtained, then free the space
-   they occupy. */
-   if ( linear_fit ) linear_fit = astFree( linear_fit );
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int ResampleSection( AstMapping *this, const double *linear_fit,
-                            int ndim_in,
-                            const int *lbnd_in, const int *ubnd_in,
-                            const void *in, const void *in_var,
-                            DataType type, int interp, void (* finterp)(),
-                            const double *params, double factor, int flags,
-                            const void *badval_ptr, int ndim_out,
-                            const int *lbnd_out, const int *ubnd_out,
-                            const int *lbnd, const int *ubnd,
-                            void *out, void *out_var, int *status ) {
-/*
-*  Name:
-*     ResampleSection
-
-*  Purpose:
-*     Resample a section of a data grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int ResampleSection( AstMapping *this, const double *linear_fit,
-*                          int ndim_in, const int *lbnd_in, const int *ubnd_in,
-*                          const void *in, const void *in_var,
-*                          DataType type, int interp, void (* finterp)(),
-*                          const double *params, double factor, int flags,
-*                          const void *badval_ptr, int ndim_out,
-*                          const int *lbnd_out, const int *ubnd_out,
-*                          const int *lbnd, const int *ubnd,
-*                          void *out, void *out_var )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function resamples a rectangular grid of data (with any
-*     number of dimensions) into a specified section of another
-*     rectangular grid (with a possibly different number of
-*     dimensions). The coordinate transformation used is given by the
-*     inverse transformation of the Mapping which is supplied or,
-*     alternatively, by a linear approximation fitted to a Mapping's
-*     inverse transformation. Any pixel interpolation scheme may be
-*     specified for interpolating between the pixels of the input
-*     grid.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose inverse transformation may be
-*        used to transform the coordinates of pixels in the output
-*        grid into associated positions in the input grid, from which
-*        the output pixel values should be derived (by interpolation
-*        if necessary).
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     linear_fit
-*        Pointer to an optional array of double which contains the
-*        coefficients of a linear fit which approximates the above
-*        Mapping's inverse coordinate transformation. If this is
-*        supplied, it will be used in preference to the above Mapping
-*        when transforming coordinates. This may be used to enhance
-*        performance in cases where evaluation of the Mapping's
-*        inverse transformation is expensive. If no linear fit is
-*        available, a NULL pointer should be supplied.
-*
-*        The way in which the fit coefficients are stored in this
-*        array and the number of array elements are as defined by the
-*        astLinearApprox function.
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     in
-*        Pointer to the input array of data to be resampled (with one
-*        element for each pixel in the input grid). The numerical type
-*        of these data should match the "type" value (below). The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and data type as the "in" array),
-*        which represent estimates of the statistical variance
-*        associated with each element of the "in" array. If this
-*        second array is given (along with the corresponding "out_var"
-*        array), then estimates of the variance of the resampled data
-*        will also be returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     type
-*        A value taken from the "DataType" enum, which specifies the
-*        data type of the input and output arrays containing the
-*        gridded data (and variance) values.
-*     interp
-*        A value selected from a set of pre-defined macros to identify
-*        which sub-pixel interpolation algorithm should be used.
-*     finterp
-*        If "interp" is set to a value which requires a user-supplied
-*        function, then a pointer to that function shoild be given
-*        here. Otherwise, this value is not used and may be a NULL
-*        pointer.
-*     params
-*        Pointer to an optional array of parameters that may be passed
-*        to the interpolation algorithm, if required. If no parameters
-*        are required, a NULL pointer should be supplied.
-*     factor
-*        A factor by which to scale the resampled output data values before
-*        returning them. If flux is being conserved this should be set to
-*        the ratio of the output pixel size to the input pixel size in the 
-*        section. Otherwise it should be set to 1.0.
-*     flags
-*        The bitwise OR of a set of flag values which provide
-*        additional control over the resampling operation.
-*     badval_ptr
-*        If the AST__USEBAD flag is set (above), this parameter is a
-*        pointer to a value which is used to identify bad data and/or
-*        variance values in the input array(s). The referenced value's
-*        data type must match that of the "in" (and "in_var")
-*        arrays. Unless the AST__NOBAD flag is set, the same value will 
-*        also be used to flag any output array elements for which 
-*        resampled values could not be obtained.  The output arrays(s) 
-*        may be flagged with this value whether or not the AST__USEBAD 
-*        flag is set (the function return value indicates whether any 
-*        such values have been produced).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output data grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output data grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output data grid in the same way as "lbnd_in"
-*        and "ubnd_in" define the shape and size of the input grid
-*        (see above).
-*     lbnd
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the output data grid for which a value is
-*        required.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the output data grid for which a value is
-*        required.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the output grid for which resampled values are
-*        required. This section should lie wholly within the extent of
-*        the output grid (as defined by the "lbnd_out" and "ubnd_out"
-*        arrays). Regions of the output grid lying outside this section
-*        will not be modified.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned.  The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given.
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-
-*  Returned Value:
-*       The number of output grid points for which no valid output value 
-*       could be obtained.
-
-*  Notes:
-*     - This function does not take steps to limit memory usage if the
-*     grids supplied are large. To resample large grids in a more
-*     memory-efficient way, the ResampleWithBlocking function should
-*     be used.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific data */ 
-   AstPointSet *pset_in;         /* Input PointSet for transformation */
-   AstPointSet *pset_out;        /* Output PointSet for transformation */
-   const double *grad;           /* Pointer to gradient matrix of linear fit */
-   const double *par;            /* Pointer to parameter array */
-   const double *zero;           /* Pointer to zero point array of fit */
-   double **ptr_in;              /* Pointer to input PointSet coordinates */
-   double **ptr_out;             /* Pointer to output PointSet coordinates */
-   double *accum;                /* Pointer to array of accumulated sums */
-   double fwhm;                  /* Full width half max. of gaussian */
-   double lpar[ 1 ];             /* Local parameter array */
-   double x1;                    /* Interim x coordinate value */
-   double y1;                    /* Interim y coordinate value */
-   int *dim;                     /* Pointer to array of output pixel indices */
-   int *offset;                  /* Pointer to array of output pixel offsets */
-   int *stride;                  /* Pointer to array of output grid strides */
-   int conserve;                 /* Conserve flux? */
-   int coord_in;                 /* Loop counter for input dimensions */
-   int coord_out;                /* Loop counter for output dimensions */
-   int done;                     /* All pixel indices done? */
-   int i1;                       /* Interim offset into "accum" array */
-   int i2;                       /* Final offset into "accum" array */
-   int idim;                     /* Loop counter for dimensions */
-   int ix;                       /* Loop counter for output x coordinate */
-   int iy;                       /* Loop counter for output y coordinate */
-   int nbad;                     /* Number of pixels assigned a bad value */
-   int neighb;                   /* Number of neighbouring pixels */
-   int npoint;                   /* Number of output points (pixels) */
-   int off1;                     /* Interim pixel offset into output array */
-   int off;                      /* Final pixel offset into output array */
-   int point;                    /* Counter for output points (pixels ) */
-   int result;                   /* Result value to be returned */
-   int s;                        /* Temporary variable for strides */
-   int usevar;                   /* Process variance array? */
-   void (* gifunc)();            /* General interpolation function */
-   void (* kernel)( double, const double [], int, double *, int * ); /* Kernel fn. */
-   void (* fkernel)( double, const double [], int, double * ); /* User kernel fn. */
-
-/* Initialise. */
-   result = 0;
-
-/* Get a pointer to a structure holding thread-specific global data values */
-   astGET_GLOBALS(this);
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   pset_in = NULL;
-   ptr_in = NULL;
-   neighb = 0;
-   gifunc = NULL;
-   kernel = NULL;
-   fkernel = NULL;
-
-/* See if we are conserving flux */
-   conserve = flags & AST__CONSERVEFLUX;
-
-/* If we are conserving flux, then we need some way to tell which output
-   array elements have been assigned a value and which have not. If the  
-   AST__NOBAD flag has been specified then this is not possible to report
-   an error. */
-   if( ( flags & AST__NOBAD ) && conserve ) {
-      astError( AST__BADFLG, "astResample: Cannot use the AST__NOBAD and "
-                "AST__CONSERVEFLUX flags together (programming error)." , status);
-   }
-
-/* Calculate the number of output points, as given by the product of
-   the output grid dimensions. */
-   for ( npoint = 1, coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-      npoint *= ubnd[ coord_out ] - lbnd[ coord_out ] + 1;
-   }
-
-/* Allocate workspace. */
-   offset = astMalloc( sizeof( int ) * (size_t) npoint );
-   stride = astMalloc( sizeof( int ) * (size_t) ndim_out );
-   if ( astOK ) {
-
-/* Calculate the stride for each output grid dimension. */
-      off = 0;
-      s = 1;
-      for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-         stride[ coord_out ] = s;
-         s *= ubnd_out[ coord_out ] - lbnd_out[ coord_out ] + 1;
-      }
-
-/* A linear fit to the Mapping is available. */
-/* ========================================= */
-      if ( linear_fit ) {
-
-/* If a linear fit to the Mapping has been provided, then obtain
-   pointers to the array of gradients and zero-points comprising the
-   fit. */
-         grad = linear_fit + ndim_in;
-         zero = linear_fit;
-
-/* Create a PointSet to hold the input grid coordinates and obtain an
-   array of pointers to its coordinate data. */
-         pset_in = astPointSet( npoint, ndim_in, "", status );
-         ptr_in = astGetPoints( pset_in );
-         if ( astOK ) {
-
-/* Initialise the count of output points. */
-            point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
-            if ( ( ndim_in == 1 ) && ( ndim_out == 1 ) ) {
-
-/* Loop through the pixels of the output grid and transform their x
-   coordinates into the input grid's coordinate system using the
-   linear fit supplied. Store the results in the PointSet created
-   above. */
-               for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                  ptr_in[ 0 ][ point ] = zero[ 0 ] + grad[ 0 ] * (double) ix;
-
-/* Calculate the offset of each pixel within the output array. */
-                  offset[ point ] = ix - lbnd_out[ 0 ];
-                  point++;
-               }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
-            } else if ( ( ndim_in == 2 ) && ( ndim_out == 2 ) ) {
-
-/* Loop through the range of y coordinates in the output grid and
-   calculate interim values of the input coordinates using the linear
-   fit supplied. */
-               for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
-                  x1 = zero[ 0 ] + grad[ 1 ] * (double) iy;
-                  y1 = zero[ 1 ] + grad[ 3 ] * (double) iy;
-
-/* Also calculate an interim pixel offset into the output array. */
-                  off1 = stride[ 1 ] * ( iy - lbnd_out[ 1 ] ) - lbnd_out[ 0 ];
-
-/* Now loop through the range of output x coordinates and calculate
-   the final values of the input coordinates, storing the results in
-   the PointSet created above. */
-                  for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                     ptr_in[ 0 ][ point ] = x1 + grad[ 0 ] * (double) ix;
-                     ptr_in[ 1 ][ point ] = y1 + grad[ 2 ] * (double) ix;
-
-/* Also calculate final pixel offsets into the output array. */
-                     offset[ point ] = off1 + ix;
-                     point++;
-                  }
-               }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */               
-            } else {
-
-/* Allocate workspace. */
-               accum = astMalloc( sizeof( double ) *
-                                 (size_t) ( ndim_in * ndim_out ) );
-               dim = astMalloc( sizeof( int ) * (size_t) ndim_out );
-               if ( astOK ) {
-
-/* Initialise an array of pixel indices for the output grid which
-   refer to the first pixel for which we require a value. Also
-   calculate the offset of this pixel within the output array. */
-                  off = 0;
-                  for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                     dim[ coord_out ] = lbnd[ coord_out ];
-                     off += stride[ coord_out ] *
-                            ( dim[ coord_out ] - lbnd_out[ coord_out ] );
-                  }
-
-/* To calculate each input grid coordinate we must perform a matrix
-   multiply on the output grid coordinates (using the gradient matrix)
-   and then add the zero points. However, since we will usually only
-   be altering one output coordinate at a time (the least
-   significant), we can avoid the full matrix multiply by accumulating
-   partial sums for the most significant output coordinates and only
-   altering those sums which need to change each time. The zero points
-   never change, so we first fill the "most significant" end of the
-   "accum" array with these. */
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     accum[ ( coord_in + 1 ) * ndim_out - 1 ] =
-                                                              zero[ coord_in ];
-                  }
-                  coord_out = ndim_out - 1;
-
-/* Now loop to process each output pixel. */
-                  for ( done = 0; !done; point++ ) {
-
-/* To generate the input coordinate that corresponds to the current
-   output pixel, we work down from the most significant dimension
-   whose index has changed since the previous pixel we considered
-   (given by "coord_out"). For each affected dimension, we accumulate
-   in "accum" the matrix sum (including the zero point) for that
-   dimension and all higher output dimensions. We must accumulate a
-   separate set of sums for each input coordinate we wish to
-   produce. (Note that for the first pixel we process, all dimensions
-   are considered "changed", so we start by initialising the whole
-   "accum" array.) */
-                     for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                        i1 = coord_in * ndim_out;
-                        for ( idim = coord_out; idim >= 1; idim-- ) {
-                           i2 = i1 + idim;
-                           accum[ i2 - 1 ] = accum[ i2 ] +
-                                             dim[ idim ] * grad[ i2 ];
-                        }
-
-/* The input coordinate for each dimension is given by the accumulated
-   sum for output dimension zero (giving the sum over all output
-   dimensions). We do not store this in the "accum" array, but assign
-   the result directly to the coordinate array of the PointSet created
-   earlier. */
-                        ptr_in[ coord_in ][ point ] = accum[ i1 ] +
-                                                      dim[ 0 ] * grad[ i1 ];
-                     }
-
-/* Store the offset of the current pixel in the output array. */
-                     offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next output
-   pixel. */
-                     coord_out = 0;
-                     do {
-
-/* The least significant index which currently has less than its
-   maximum value is incremented by one. The offset into the output
-   array is updated accordingly. */
-                        if ( dim[ coord_out ] < ubnd[ coord_out ] ) {
-                           dim[ coord_out ]++;
-                           off += stride[ coord_out ];
-                           break;
-
-/* Any less significant indices which have reached their maximum value
-   are returned to their minimum value and the output pixel offset is
-   decremented appropriately. */
-                        } else {
-                           dim[ coord_out ] = lbnd[ coord_out ];
-                           off -= stride[ coord_out ] *
-                                  ( ubnd[ coord_out ] - lbnd[ coord_out ] );
-
-/* All the output pixels have been processed once the most significant
-   pixel index has been returned to its minimum value. */
-                           done = ( ++coord_out == ndim_out );
-                        }
-                     } while ( !done );
-                  }
-               }
-
-/* Free the workspace. */
-               accum = astFree( accum );
-               dim = astFree( dim );
-            }
-         }
-
-/* No linear fit to the Mapping is available. */
-/* ========================================== */
-      } else {
-
-/* If flux conseravtion was requested, report an error, since we can only
-   conserve flux if a linear approximation is available. */
-         if( conserve && astOK ) { 
-            astError( AST__CNFLX, "astResampleSection(%s): Flux conservation "
-                "was requested but cannot be performed because either the Mapping "
-                "is too non-linear, or the requested tolerance is too small.", status,
-                 astGetClass( this ) ); 
-         } 
-
-/* Create a PointSet to hold the coordinates of the output pixels and
-   obtain a pointer to its coordinate data. */
-         pset_out = astPointSet( npoint, ndim_out, "", status );
-         ptr_out = astGetPoints( pset_out );
-         if ( astOK ) {
-
-/* Initialise the count of output points. */
-            point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
-            if ( ndim_out == 1 && ndim_in == 1 ) {
-
-/* Loop through the required range of output x coordinates, assigning
-   the coordinate values to the PointSet created above. Also store a
-   pixel offset into the output array. */
-               for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                  ptr_out[ 0 ][ point ] = (double) ix;
-                  offset[ point ] = ix - lbnd_out[ 0 ];
-
-/* Increment the count of output pixels. */
-                  point++;
-               }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
-            } else if ( ndim_out == 2 && ndim_in == 2 ) {
-
-/* Loop through the required range of output y coordinates,
-   calculating an interim pixel offset into the output array. */
-               for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
-                  off1 = stride[ 1 ] * ( iy - lbnd_out[ 1 ] ) - lbnd_out[ 0 ];
-
-/* Loop through the required range of output x coordinates, assigning
-   the coordinate values to the PointSet created above. Also store a
-   final pixel offset into the output array. */
-                  for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                     ptr_out[ 0 ][ point ] = (double) ix;
-                     ptr_out[ 1 ][ point ] = (double) iy;
-                     offset[ point ] = off1 + ix;
-
-/* Increment the count of output pixels. */
-                     point++;
-                  }
-               }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
-            } else {
-
-/* Allocate workspace. */
-               dim = astMalloc( sizeof( int ) * (size_t) ndim_out );
-               if ( astOK ) {
-
-/* Initialise an array of pixel indices for the output grid which
-   refer to the first pixel for which we require a value. Also
-   calculate the offset of this pixel within the output array. */
-                  off = 0;
-                  for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                     dim[ coord_out ] = lbnd[ coord_out ];
-                     off += stride[ coord_out ] *
-                            ( dim[ coord_out ] - lbnd_out[ coord_out ] );
-                  }
-
-/* Loop to generate the coordinates of each output pixel. */
-                  for ( done = 0; !done; point++ ) {
-
-/* Copy each pixel's coordinates into the PointSet created above. */
-                     for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                        ptr_out[ coord_out ][ point ] =
-                                                     (double) dim[ coord_out ];
-                     }
-
-/* Store the offset of the pixel in the output array. */
-                     offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next output
-   pixel. */
-                     coord_out = 0;
-                     do {
-
-/* The least significant index which currently has less than its
-   maximum value is incremented by one. The offset into the output
-   array is updated accordingly. */
-                        if ( dim[ coord_out ] < ubnd[ coord_out ] ) {
-                           dim[ coord_out ]++;
-                           off += stride[ coord_out ];
-                           break;
-
-/* Any less significant indices which have reached their maximum value
-   are returned to their minimum value and the output pixel offset is
-   decremented appropriately. */
-                        } else {
-                           dim[ coord_out ] = lbnd[ coord_out ];
-                           off -= stride[ coord_out ] *
-                                  ( ubnd[ coord_out ] - lbnd[ coord_out ] );
-
-/* All the output pixels have been processed once the most significant
-   pixel index has been returned to its minimum value. */
-                           done = ( ++coord_out == ndim_out );
-                        }
-                     } while ( !done );
-                  }
-               }
-
-/* Free the workspace. */
-               dim = astFree( dim );
-            }
-
-/* When all the output pixel coordinates have been generated, use the
-   Mapping's inverse transformation to generate the input coordinates
-   from them. Obtain an array of pointers to the resulting coordinate
-   data. */
-            pset_in = astTransform( this, pset_out, 0, NULL );
-            ptr_in = astGetPoints( pset_in );
-         }
-
-/* Annul the PointSet containing the output coordinates. */
-         pset_out = astAnnul( pset_out );
-      }
-   }
-
-/* Resample the input grid. */
-/* ------------------------ */
-/* Determine if a variance array is to be processed. */
-   usevar = ( in_var && out_var );
-
-/* If the input coordinates have been produced successfully, identify
-   the input grid resampling method to be used. */
-   if ( astOK ) {
-
-/* Nearest pixel. */
-/* -------------- */
-      switch ( interp ) {
-         case AST__NEAREST:
-
-/* Define a macro to use a "case" statement to invoke the
-   nearest-pixel interpolation function appropriate to a given data
-   type. */
-#define CASE_NEAREST(X,Xtype) \
-               case ( TYPE_##X ): \
-                  result = \
-                  InterpolateNearest##X( ndim_in, lbnd_in, ubnd_in, \
-                                         (Xtype *) in, (Xtype *) in_var, \
-                                         npoint, offset, \
-                                         (const double *const *) ptr_in, \
-                                         flags, *( (Xtype *) badval_ptr ), \
-                                         (Xtype *) out, (Xtype *) out_var, status ); \
-                  break;
-       
-/* Use the above macro to invoke the appropriate function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_NEAREST(LD,long double)
-#endif
-               CASE_NEAREST(D,double)
-               CASE_NEAREST(F,float)
-               CASE_NEAREST(L,long int)
-               CASE_NEAREST(UL,unsigned long int)
-               CASE_NEAREST(I,int)
-               CASE_NEAREST(UI,unsigned int)
-               CASE_NEAREST(S,short int)
-               CASE_NEAREST(US,unsigned short int)
-               CASE_NEAREST(B,signed char)
-               CASE_NEAREST(UB,unsigned char)
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_NEAREST
-               
-/* Linear interpolation. */
-/* --------------------- */
-/* Note this is also the default if zero is given. */
-         case AST__LINEAR:
-         case 0:
-
-/* Define a macro to use a "case" statement to invoke the linear
-   interpolation function appropriate to a given data type. */
-#define CASE_LINEAR(X,Xtype) \
-               case ( TYPE_##X ): \
-                  result = \
-                  InterpolateLinear##X( ndim_in, lbnd_in, ubnd_in,\
-                                        (Xtype *) in, (Xtype *) in_var, \
-                                        npoint, offset, \
-                                        (const double *const *) ptr_in, \
-                                        flags, *( (Xtype *) badval_ptr ), \
-                                        (Xtype *) out, (Xtype *) out_var, status ); \
-                  break;
-
-/* Use the above macro to invoke the appropriate function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_LINEAR(LD,long double)
-#endif
-               CASE_LINEAR(D,double)
-               CASE_LINEAR(F,float)
-               CASE_LINEAR(L,long int)
-               CASE_LINEAR(UL,unsigned long int)
-               CASE_LINEAR(I,int)
-               CASE_LINEAR(UI,unsigned int)
-               CASE_LINEAR(S,short int)
-               CASE_LINEAR(US,unsigned short int)
-               CASE_LINEAR(B,signed char)
-               CASE_LINEAR(UB,unsigned char)
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_LINEAR
-
-/* Interpolation using a 1-d kernel. */
-/* --------------------------------- */
-         case AST__SINC:
-         case AST__SINCCOS:
-         case AST__SINCGAUSS:
-         case AST__SINCSINC:
-         case AST__SOMB:
-         case AST__SOMBCOS:
-         case AST__UKERN1:       /* User-supplied 1-d kernel function */
-
-/* Obtain a pointer to the appropriate 1-d kernel function (either
-   internal or user-defined) and set up any parameters it may
-   require. */
-            par = NULL;
-            switch ( interp ) {
-
-/* sinc(pi*x) interpolation. */
-/* ------------------------- */
-/* Assign the kernel function. */
-               case AST__SINC:
-                  kernel = Sinc;
-
-/* Calculate the number of neighbouring pixels to use. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) {
-                     neighb = 2;
-                  } else {
-                     neighb = MaxI( 1, neighb, status );
-                  }
-                  break;
-
-/* sinc(pi*x)*cos(k*pi*x) interpolation. */
-/* ------------------------------------- */
-/* Assign the kernel function. */
-               case AST__SINCCOS:
-                  kernel = SincCos;
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, the number will be calculated automatically below. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
-   width of the kernel, and use this value if preferable. */
-                  neighb = MinI( neighb,
-                                 (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
-                  break;
-
-/* somb(pi*x) interpolation. */
-/* ------------------------- */
-/* Assign the kernel function. */
-               case AST__SOMB:
-                  kernel = Somb;
-
-/* Calculate the number of neighbouring pixels to use. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) {
-                     neighb = 2;
-                  } else {
-                     neighb = MaxI( 1, neighb, status );
-                  }
-                  break;
-
-/* somb(pi*x)*cos(k*pi*x) interpolation. */
-/* ------------------------------------- */
-/* Assign the kernel function. */
-               case AST__SOMBCOS:
-                  kernel = SombCos;
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, the number will be calculated automatically below. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
-   width of the kernel, and use this value if preferable. */
-                  neighb = MinI( neighb,
-                                 (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
-                  break;
-
-/* sinc(pi*x)*exp(-k*x*x) interpolation. */
-/* ------------------------------------- */
-/* Assign the kernel function. */
-               case AST__SINCGAUSS:
-                  kernel = SincGauss;
-
-/* Constrain the full width half maximum of the gaussian factor. */
-                  fwhm = MaxD( 0.1, params[ 1 ], status );
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 4.0 * log( 2.0 ) / ( fwhm * fwhm );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, use the number of neighbouring pixels required by the width
-   of the kernel (out to where the gaussian term falls to 1% of its
-   peak value). */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = (int) ceil( sqrt( -log( 0.01 ) /
-                                                                lpar[ 0 ] ) );
-                  break;
-
-/* sinc(pi*x)*sinc(k*pi*x) interpolation. */
-/* -------------------------------------- */
-/* Assign the kernel function. */
-               case AST__SINCSINC:
-                  kernel = SincSinc;
-
-/* Store the required value of "k" in a local parameter array and pass
-   this array to the kernel function. */
-                  lpar[ 0 ] = 0.5 / MaxD( 1.0, params[ 1 ], status );
-                  par = lpar;
-
-/* Obtain the number of neighbouring pixels to use. If this is zero or
-   less, the number will be calculated automatically below. */
-                  neighb = (int) floor( params[ 0 ] + 0.5 );
-                  if ( neighb <= 0 ) neighb = INT_MAX;
-
-/* Calculate the maximum number of neighbouring pixels required by the
-   width of the kernel, and use this value if preferable. */
-                  neighb = MinI( neighb,
-                                 (int) ceil( MaxD( 1.0, params[ 1 ], status ) ), status );
-                  break;
-
-/* User-supplied kernel. */
-/* --------------------- */
-/* Assign the kernel function. */
-               case AST__UKERN1:
-                  fkernel = (void (*)( double, const double [],
-                                       int, double * )) finterp;
-
-/* Calculate the number of neighbouring pixels to use. */
-                  neighb = MaxI( 1, (int) floor( params[ 0 ] + 0.5 ), status );
-
-/* Pass a pointer to the "params" array. */
-                  par = params;
-                  break;
-            }
-
-/* Define a macro to use a "case" statement to invoke the 1-d kernel
-   interpolation function appropriate to a given data type, passing it
-   the pointer to the kernel function obtained above. */
-#define CASE_KERNEL1(X,Xtype) \
-               case ( TYPE_##X ): \
-                  result = \
-                  InterpolateKernel1##X( this, ndim_in, lbnd_in, ubnd_in, \
-                                         (Xtype *) in, (Xtype *) in_var, \
-                                         npoint, offset, \
-                                         (const double *const *) ptr_in, \
-                                         kernel, fkernel, neighb, par, flags, \
-                                         *( (Xtype *) badval_ptr ), \
-                                         (Xtype *) out, (Xtype *) out_var, status ); \
-                  break;
-
-/* Use the above macro to invoke the appropriate function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_KERNEL1(LD,long double)
-#endif
-               CASE_KERNEL1(D,double)
-               CASE_KERNEL1(F,float)
-               CASE_KERNEL1(L,long int)
-               CASE_KERNEL1(UL,unsigned long int)
-               CASE_KERNEL1(I,int)
-               CASE_KERNEL1(UI,unsigned int)
-               CASE_KERNEL1(S,short int)
-               CASE_KERNEL1(US,unsigned short int)
-               CASE_KERNEL1(B,signed char)
-               CASE_KERNEL1(UB,unsigned char)
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_KERNEL1
-
-/* General sub-pixel interpolation function. */
-/* ----------------------------------------- */
-         case AST__BLOCKAVE:
-         case AST__UINTERP:
-
-/* Define a macro to use a "case" statement to invoke the general 
-   sub-pixel interpolation function appropriate to a given type and
-   the selected value of the interp variable. */
-#define CASE_GINTERP(X,Xtype) \
-               case ( TYPE_##X ): \
-\
-/* Obtain a pointer to the appropriate general interpolation function \
-   (either internal or user-defined) and set up any parameters it may \
-   require. */ \
-                  switch ( interp ) { \
-\
-/* Block averaging interpolation. */ \
-/* ------------------------------ */ \
-                     case AST__BLOCKAVE: \
-                        gifunc = (void (*)()) InterpolateBlockAverage##X; \
-                        break; \
-\
-/* User-supplied sub-pixel interpolation function. */ \
-/* ----------------------------------------------- */ \
-                     case AST__UINTERP: \
-                        gifunc = (void (*)()) finterp; \
-                        break; \
-                  } \
-\
-/* Invoke the general interpolation function.  It has to be cast to the \
-   right type (i.e. a function with the correctly typed arguments) \
-   to prevent default promotion (to int or double) of its arguments. \
-   The cast here corresponds to the declaration of 
-   ast_resample_uinterp##Xtype. */ \
-                  ( *( (void (*)( int, const int[], const int[], \
-                                  const Xtype[], \
-                                  const Xtype[], \
-                                  int, const int[], \
-                                  const double *const[], \
-                                  const double[], int, \
-                                  Xtype, \
-                                  Xtype *, \
-                                  Xtype *, \
-                                  int * )) \
-                       gifunc ) )( ndim_in, lbnd_in, ubnd_in, \
-                                   (Xtype *) in, \
-                                   (Xtype *) ( usevar ? in_var : NULL ), \
-                                   npoint, offset, \
-                                   (const double *const *) ptr_in, \
-                                   params, flags, \
-                                   *( (Xtype *) badval_ptr ), \
-                                   (Xtype *) out, \
-                                   (Xtype *) ( usevar ? out_var : NULL ), \
-                                   &nbad ); \
-                  if ( astOK ) { \
-                     result += nbad; \
-                  } else { \
-                     astError( astStatus, "astResample"#X"(%s): Error " \
-                               "signalled by user-supplied sub-pixel " \
-                               "interpolation function.", status, \
-                               astGetClass( unsimplified_mapping ) ); \
-                  } \
-                  break;
-
-/* Use the above macro to invoke the function. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_GINTERP(LD,long double)
-#endif
-               CASE_GINTERP(D,double)
-               CASE_GINTERP(F,float)
-               CASE_GINTERP(L,long int)
-               CASE_GINTERP(UL,unsigned long int)
-               CASE_GINTERP(I,int)
-               CASE_GINTERP(UI,unsigned int)
-               CASE_GINTERP(S,short int)
-               CASE_GINTERP(US,unsigned short int)
-               CASE_GINTERP(B,signed char)
-               CASE_GINTERP(UB,unsigned char)
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_GINTERP
-
-/* Error: invalid interpolation scheme specified. */
-/* ---------------------------------------------- */
-         default:
-
-/* Define a macro to report an error message appropriate to a given
-   data type. */
-#define CASE_ERROR(X) \
-            case TYPE_##X: \
-               astError( AST__SISIN, "astResample"#X"(%s): Invalid " \
-                         "sub-pixel interpolation scheme (%d) specified.", status, \
-                         astGetClass( unsimplified_mapping ), interp ); \
-               break;
-                                 
-/* Use the above macro to report an appropriate error message. */
-            switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-               CASE_ERROR(LD)
-#endif
-               CASE_ERROR(D)
-               CASE_ERROR(F)
-               CASE_ERROR(L)
-               CASE_ERROR(UL)
-               CASE_ERROR(I)
-               CASE_ERROR(UI)
-               CASE_ERROR(S)
-               CASE_ERROR(US)
-               CASE_ERROR(B)
-               CASE_ERROR(UB)
-            }
-            break;
-
-/* Undefine the macro. */
-#undef CASE_ERROR
-      }
-   }
-
-/* Now scale the output values to conserve flux if required. */
-   if( conserve ) {
-
-/* Define a macro to use a "case" statement to invoke the function 
-   appropriate to a given data type. These simply multiple the output data
-   value by the factor, and the output variance by the square of the
-   factor. */
-#define CASE_CONSERVE(X,Xtype) \
-      case ( TYPE_##X ): \
-         ConserveFlux##X( factor, npoint, offset, *( (Xtype *) badval_ptr ), \
-                          (Xtype *) out, \
-                          (Xtype *) ( usevar ? out_var : NULL ), status ); \
-         break;
-       
-/* Use the above macro to invoke the appropriate function. */
-      switch ( type ) {
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-         CASE_CONSERVE(LD,long double)
-#endif
-         CASE_CONSERVE(D,double)
-         CASE_CONSERVE(F,float)
-         CASE_CONSERVE(L,long int)
-         CASE_CONSERVE(UL,unsigned long int)
-         CASE_CONSERVE(I,int)
-         CASE_CONSERVE(UI,unsigned int)
-         CASE_CONSERVE(S,short int)
-         CASE_CONSERVE(US,unsigned short int)
-         CASE_CONSERVE(B,signed char)
-         CASE_CONSERVE(UB,unsigned char)
-      }
-
-/* Undefine the macro. */
-#undef CASE_CONSERVE
-   }               
-
-/* Annul the PointSet used to hold input coordinates. */
-   pset_in = astAnnul( pset_in );
-
-/* Free the workspace. */
-   offset = astFree( offset );
-   stride = astFree( stride );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int ResampleWithBlocking( AstMapping *this, const double *linear_fit,
-                                 int ndim_in,
-                                 const int *lbnd_in, const int *ubnd_in,
-                                 const void *in, const void *in_var,
-                                 DataType type, int interp, void (* finterp)(),
-                                 const double *params, int flags,
-                                 const void *badval_ptr, int ndim_out,
-                                 const int *lbnd_out, const int *ubnd_out,
-                                 const int *lbnd, const int *ubnd,
-                                 void *out, void *out_var, int *status ) {
-/*
-*  Name:
-*     ResampleWithBlocking
-
-*  Purpose:
-*     Resample a section of a data grid in a memory-efficient way.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int ResampleWithBlocking( AstMapping *this, const double *linear_fit,
-*                               int ndim_in,
-*                               const int *lbnd_in, const int *ubnd_in,
-*                               const void *in, const void *in_var,
-*                               DataType type, int interp, void (* finterp)(),
-*                               const double *params, int flags,
-*                               const void *badval_ptr, int ndim_out,
-*                               const int *lbnd_out, const int *ubnd_out,
-*                               const int *lbnd, const int *ubnd,
-*                               void *out, void *out_var, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function resamples a rectangular grid of data (with any
-*     number of dimensions) into a specified section of another
-*     rectangular grid (with a possibly different number of
-*     dimensions). The coordinate transformation used is given by the
-*     inverse transformation of the Mapping which is supplied or,
-*     alternatively, by a linear approximation fitted to a Mapping's
-*     inverse transformation. Any pixel interpolation scheme may be
-*     specified for interpolating between the pixels of the input
-*     grid.
-*
-*     This function is very similar to ResampleSection, except that in
-*     order to limit memory usage and to ensure locality of reference,
-*     it divides the output grid up into "blocks" which have a limited
-*     extent along each output dimension. Each block, which will not
-*     contain more than a pre-determined maximum number of pixels, is
-*     then passed to ResampleSection for resampling.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose inverse transformation may be
-*        used to transform the coordinates of pixels in the output
-*        grid into associated positions in the input grid, from which
-*        the output pixel values should be derived (by interpolation
-*        if necessary).
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     linear_fit
-*        Pointer to an optional array of double which contains the
-*        coefficients of a linear fit which approximates the above
-*        Mapping's inverse coordinate transformation. If this is
-*        supplied, it will be used in preference to the above Mapping
-*        when transforming coordinates. This may be used to enhance
-*        performance in cases where evaluation of the Mapping's
-*        inverse transformation is expensive. If no linear fit is
-*        available, a NULL pointer should be supplied.
-*
-*        The way in which the fit coefficients are stored in this
-*        array and the number of array elements are as defined by the
-*        astLinearApprox function.
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     in
-*        Pointer to the input array of data to be resampled (with one
-*        element for each pixel in the input grid). The numerical type
-*        of these data should match the "type" value (below). The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and data type as the "in" array),
-*        which represent estimates of the statistical variance
-*        associated with each element of the "in" array. If this
-*        second array is given (along with the corresponding "out_var"
-*        array), then estimates of the variance of the resampled data
-*        will also be returned.
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     type
-*        A value taken from the "DataType" enum, which specifies the
-*        data type of the input and output arrays containing the
-*        gridded data (and variance) values.
-*     interp
-*        A value selected from a set of pre-defined macros to identify
-*        which sub-pixel interpolation algorithm should be used.
-*     finterp
-*        If "interp" is set to a value which requires a user-supplied
-*        function, then a pointer to that function shoild be given
-*        here. Otherwise, this value is not used and may be a NULL
-*        pointer.
-*     params
-*        Pointer to an optional array of parameters that may be passed
-*        to the interpolation algorithm, if required. If no parameters
-*        are required, a NULL pointer should be supplied.
-*     flags
-*        The bitwise OR of a set of flag values which provide
-*        additional control over the resampling operation.
-*     badval_ptr
-*        If the AST__USEBAD flag is set (above), this parameter is a
-*        pointer to a value which is used to identify bad data and/or
-*        variance values in the input array(s). The referenced value's
-*        data type must match that of the "in" (and "in_var")
-*        arrays. Unless the AST__NOBAD flag is set, the same value will 
-*        also be used to flag any output array elements for which 
-*        resampled values could not be obtained.  The output arrays(s) 
-*        may be flagged with this value whether or not the AST__USEBAD 
-*        flag is set (the function return value indicates whether any 
-*        such values have been produced).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output data grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output data grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output data grid in the same way as "lbnd_in"
-*        and "ubnd_in" define the shape and size of the input grid
-*        (see above).
-*     lbnd
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the output data grid for which a value is
-*        required.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the output data grid for which a value is
-*        required.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the output grid for which resampled values are
-*        required. This section should lie wholly within the extent of
-*        the output grid (as defined by the "lbnd_out" and "ubnd_out"
-*        arrays). Regions of the output grid lying outside this section
-*        will not be modified.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the resampled data will be returned.  The
-*        storage order should be such that the coordinate of the first
-*        dimension varies most rapidly and that of the final dimension
-*        least rapidly (i.e. Fortran array storage order is used).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the resampled values may be returned. This array will only be
-*        used if the "in_var" array has been given.
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of output grid points for which no valid output value 
-*     could be obtained.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Constants: */
-   const int mxpix = 2 * 1024;   /* Maximum number of pixels in a block (this
-                                    relatively small number seems to give best
-                                    performance) */
-
-/* Local Variables: */
-   double factor;                /* Flux conservation factor */
-   int *dim_block;               /* Pointer to array of block dimensions */
-   int *lbnd_block;              /* Pointer to block lower bound array */
-   int *ubnd_block;              /* Pointer to block upper bound array */
-   int dim;                      /* Dimension size */
-   int done;                     /* All blocks resampled? */
-   int hilim;                    /* Upper limit on maximum block dimension */
-   int idim;                     /* Loop counter for dimensions */
-   int lolim;                    /* Lower limit on maximum block dimension */
-   int mxdim_block;              /* Maximum block dimension */
-   int npix;                     /* Number of pixels in block */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Allocate workspace. */
-   lbnd_block = astMalloc( sizeof( int ) * (size_t) ndim_out );
-   ubnd_block = astMalloc( sizeof( int ) * (size_t) ndim_out );
-   dim_block = astMalloc( sizeof( int ) * (size_t) ndim_out );
-   if ( astOK ) {
-
-/* Find the optimum block size. */
-/* ---------------------------- */
-/* We first need to find the maximum extent which a block of output
-   pixels may have in each dimension. We determine this by taking the
-   output grid extent in each dimension and then limiting the maximum
-   dimension size until the resulting number of pixels is sufficiently
-   small. This approach allows the block shape to approximate (or
-   match) the output grid shape when appropriate. */
-
-/* First loop to calculate the total number of output pixels and the
-   maximum output dimension size. */
-      npix = 1;
-      mxdim_block = 0;
-      for ( idim = 0; idim < ndim_out; idim++ ) {
-         dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-         npix *= dim;
-         if ( mxdim_block < dim ) mxdim_block = dim;
-      }
-
-/* If the number of output pixels is too large for a single block, we
-   perform iterations to determine the optimum upper limit on a
-   block's dimension size. Initialise the limits on this result. */
-      if ( npix > mxpix ) {
-         lolim = 1;
-         hilim = mxdim_block;
-
-/* Loop to perform a binary chop, searching for the best result until
-   the lower and upper limits on the result converge to adjacent
-   values. */
-         while ( ( hilim - lolim ) > 1 ) {
-
-/* Form a new estimate from the mid-point of the previous limits. */
-            mxdim_block = ( hilim + lolim ) / 2;
-
-/* See how many pixels a block contains if its maximum dimension is
-   limited to this new value. */
-            for ( npix = 1, idim = 0; idim < ndim_out ; idim++ ) {
-               dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-               npix *= ( dim < mxdim_block ) ? dim : mxdim_block;
-            }
-
-/* Update the appropriate limit, according to whether the number of
-   pixels is too large or too small. */
-            *( ( npix <= mxpix ) ? &lolim : &hilim ) = mxdim_block;
-         }
-
-/* When iterations have converged, obtain the maximum limit on the
-   dimension size of a block which results in no more than the maximum
-   allowed number of pixels per block. However, ensure that all block
-   dimensions are at least 2. */
-            mxdim_block = lolim;
-      }
-      if ( mxdim_block < 2 ) mxdim_block = 2;
-
-/* Calculate the block dimensions by applying this limit to the output
-   grid dimensions. */
-      for ( idim = 0; idim < ndim_out ; idim++ ) {
-         dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-         dim_block[ idim ] = ( dim < mxdim_block ) ? dim : mxdim_block;
-
-/* Also initialise the lower and upper bounds of the first block of
-   output grid pixels to be resampled, ensuring that this does not
-   extend outside the grid itself. */
-         lbnd_block[ idim ] = lbnd[ idim ];
-         ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
-                                    ubnd[ idim ], status );
-      }
-
-/* Determine the flux conservation constant if needed. */
-/* --------------------------------------------------- */
-   if( ( flags & AST__CONSERVEFLUX ) && linear_fit ) {
-      factor = MatrixDet( ndim_in, linear_fit + ndim_in, status );
-   } else {
-      factor = 1.0;
-   }
-
-/* Resample each block of output pixels. */
-/* ------------------------------------- */
-/* Loop to generate the extent of each block of output pixels and to
-   resample them. */
-      done = 0;
-      while ( !done && astOK ) {
-
-/* Resample the current block, accumulating the sum of bad pixels
-   produced. */
-         result += ResampleSection( this, linear_fit,
-                                    ndim_in, lbnd_in, ubnd_in,
-                                    in, in_var, type, interp, finterp, params,
-                                    factor, flags, badval_ptr,
-                                    ndim_out, lbnd_out, ubnd_out,
-                                    lbnd_block, ubnd_block, out, out_var, status );
-
-/* Update the block extent to identify the next block of output
-   pixels. */
-         idim = 0;
-         do {
-
-/* We find the least significant dimension where the upper bound of
-   the block has not yet reached the upper bound of the region of the
-   output grid which we are resampling. The block's position is then
-   incremented by one block extent along this dimension, checking that
-   the resulting extent does not go outside the region being
-   resampled. */
-            if ( ubnd_block[ idim ] < ubnd[ idim ] ) {
-               lbnd_block[ idim ] = MinI( lbnd_block[ idim ] +
-                                          dim_block[ idim ], ubnd[ idim ], status );
-               ubnd_block[ idim ] = MinI( lbnd_block[ idim ] +
-                                          dim_block[ idim ] - 1,
-                                          ubnd[ idim ], status );
-               break;
-
-/* If any less significant dimensions are found where the upper bound
-   of the block has reached its maximum value, we reset the block to
-   its lowest position. */
-            } else {
-               lbnd_block[ idim ] = lbnd[ idim ];
-               ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
-                                          ubnd[ idim ], status );
-
-/* All the blocks have been processed once the position along the most
-   significant dimension has been reset. */
-               done = ( ++idim == ndim_out );
-            }
-         } while ( !done );
-      }
-   }
-
-/* Free the workspace. */
-   lbnd_block = astFree( lbnd_block );
-   ubnd_block = astFree( ubnd_block );
-   dim_block = astFree( dim_block );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     Mapping member function (over-rides the astSetAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns an attribute value for a Mapping, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstMapping *this;             /* Pointer to the Mapping structure */
-   int invert;                   /* Invert attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-   int report;                   /* Report attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Mapping structure. */
-   this = (AstMapping *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Invert. */
-/* ------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "invert= %d %n", &invert, &nc ) )
-        && ( nc >= len ) ) {
-      astSetInvert( this, invert );
-
-/* Report. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "report= %d %n", &report, &nc ) )
-        && ( nc >= len ) ) {
-      astSetReport( this, report );
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
-   if a read-only attribute has been specified. */
-   } else if ( MATCH( "nin" ) ||
-        MATCH( "nout" ) ||
-        MATCH( "islinear" ) ||
-        MATCH( "issimple" ) ||
-        MATCH( "tranforward" ) ||
-        MATCH( "traninverse" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void Sinc( double offset, const double params[], int flags,
-                  double *value, int *status ) {
-/*
-*  Name:
-*     Sinc
-
-*  Purpose:
-*     1-dimensional sinc(pi*x) interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void Sinc( double offset, const double params[], int flags,
-*                double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. The function used is sinc(pi*x), where
-*     sinc(z)=sin(z)/z.
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the interpolation point, measured
-*        in pixels.
-*     params
-*        Not used.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   static double pi;             /* Value of pi */
-   static int init = 0;          /* Initialisation flag */
-
-/* On the first invocation, initialise a local value for pi. Do this
-   only once. */
-   if ( !init ) {
-      pi = acos( -1.0 );
-      init = 1;
-   }
-
-/* Scale the offset. */
-   offset *= pi;
-
-/* Evaluate the function. */
-   *value = ( offset != 0.0 ) ? ( sin( offset ) / offset ) : 1.0;
-}
-
-static void SincCos( double offset, const double params[], int flags,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     SincCos
-
-*  Purpose:
-*     1-dimensional sinc(pi*x)*cos(k*pi*x) interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SincCos( double offset, const double params[], int flags,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. The function used is sinc(pi*x)*cos(k*pi*x)
-*     out to the point where cos(k*pi*x) = 0, and zero beyond. Here,
-*     sinc(z)=sin(z)/z.
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the interpolation point, measured
-*        in pixels.
-*     params
-*        The first element of this array should give a value for "k"
-*        in the cos(k*pi*x) term.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   double offset_k;              /* Scaled offset */
-   static double halfpi;         /* Value of pi/2 */
-   static double pi;             /* Value of pi */
-   static int init = 0;          /* Initialisation flag */
-
-/* On the first invocation, initialise local values for pi and
-   pi/2. Do this only once. */
-   if ( !init ) {
-      pi = acos( -1.0 );
-      halfpi = 0.5 * pi;
-      init = 1;
-   }
-
-/* Multiply the offset by pi and remove its sign. */
-   offset = pi * fabs( offset );
-
-/* Find the offset scaled by the "k" factor. */
-   offset_k = offset * params[ 0 ];
-
-/* If the cos(k*pi*x) term has not reached zero, calculate the
-   result. */
-   if ( offset_k < halfpi ) {
-      *value = ( ( offset != 0.0 ) ? ( sin( offset ) / offset ) : 1.0 ) *
-               cos( offset_k );
-
-/* Otherwise, the result is zero. */
-   } else {
-      *value = 0.0;
-   }
-}
-
-static void SincGauss( double offset, const double params[], int flags,
-                       double *value, int *status ) {
-/*
-*  Name:
-*     SincGauss
-
-*  Purpose:
-*     1-dimensional sinc(pi*x)*exp(-k*x*x) interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SincGauss( double offset, const double params[], int flags,
-*                     double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. The function used is sinc(pi*x)*exp(-k*x*x),
-*     where sinc(z)=sin(z)/z.
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the interpolation point, measured
-*        in pixels.
-*     params
-*        The first element of this array should give a value for "k"
-*        in the exp(-k*x*x) term.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   double offset_pi;             /* Offset multiplied by pi */
-   static double pi;             /* Value of pi */
-   static int init = 0;          /* Initialisation flag */
-
-/* On the first invocation, initialise a local value for pi. Do this
-   only once. */
-   if ( !init ) {
-      pi = acos( -1.0 );
-      init = 1;
-   }
-
-/* Find the offset scaled by pi. */
-   offset_pi = pi * offset;
-
-/* Calculate the result. */
-   *value = ( ( offset_pi != 0.0 ) ? ( sin( offset_pi ) / offset_pi ) : 1.0 ) *
-            exp( -params[ 0 ] * offset * offset );
-}
-
-static void SincSinc( double offset, const double params[], int flags,
-                      double *value, int *status ) {
-/*
-*  Name:
-*     SincSinc
-
-*  Purpose:
-*     1-dimensional sinc(pi*x)*sinc(k*pi*x) interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SincSinc( double offset, const double params[], int flags,
-*                    double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. The function used is sinc(pi*x)*sinc(k*pi*x),
-*     out to the point where sinc(k*pi*x)=0, and zero beyond. Here,
-*     sinc(z)=sin(z)/z.
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the interpolation point, measured
-*        in pixels.
-*     params
-*        The first element of this array should give a value for "k"
-*        in the sinc(k*pi*x) term.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   double offset_k;              /* Scaled offset */
-   static double halfpi;         /* Value of pi/2 */
-   static double pi;             /* Value of pi */
-   static int init = 0;          /* Initialisation flag */
-
-/* On the first invocation, initialise local values for pi and
-   pi/2. Do this only once. */
-   if ( !init ) {
-      pi = acos( -1.0 );
-      halfpi = 0.5 * pi;
-      init = 1;
-   }
-
-/* Multiply the offset by pi and remove its sign. */
-   offset = pi * fabs( offset );
-
-/* Find the offset scaled by the "k" factor. */
-   offset_k = offset * params[ 0 ];
-   
-/* If the sinc(k*pi*x) term has not reached zero, calculate the
-   result. */
-   if ( offset_k < halfpi ) {
-      *value = ( ( offset != 0.0 ) ? ( sin( offset ) / offset ) : 1.0 ) *
-               ( ( offset_k != 0.0 ) ? ( sin( offset_k ) / offset_k ) : 1.0 );
-
-/* Otherwise, the result is zero. */
-   } else {
-      *value = 0.0;
-   }
-}
-
-static AstMapping *Simplify( AstMapping *this, int *status ) {
-/*
-*++
-*  Name:
-c     astSimplify
-f     AST_SIMPLIFY
-
-*  Purpose:
-*     Simplify a Mapping.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     AstMapping *astSimplify( AstMapping *this )
-f     RESULT = AST_SIMPLIFY( THIS, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function simplifies a Mapping (which may be a compound
-*     Mapping such as a CmpMap) to eliminate redundant computational
-*     steps, or to merge separate steps which can be performed more
-*     efficiently in a single operation.
-*
-*     As a simple example, a Mapping which multiplied coordinates by
-*     5, and then multiplied the result by 10, could be simplified to
-*     a single step which multiplied by 50. Similarly, a Mapping which
-*     multiplied by 5, and then divided by 5, could be reduced to a
-*     simple copying operation.
-*
-*     This function should typically be applied to Mappings which have
-*     undergone substantial processing or have been formed by merging
-*     other Mappings. It is of potential benefit, for example, in
-*     reducing execution time if applied before using a Mapping to
-*     transform a large number of coordinates.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the original Mapping.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSimplify()
-f     AST_SIMPLIFY = INTEGER
-*        A new pointer to the (possibly simplified) Mapping.
-
-*  Applicability:
-*     Mapping
-*        This function applies to all Mappings.
-*     FrameSet
-*        If the supplied Mapping is a FrameSet, the returned Mapping
-*        will be a copy of the supplied FrameSet in which all the
-*        inter-Frame Mappings have been simplified.
-
-*  Notes:
-*     - This function can safely be applied even to Mappings which
-*     cannot be simplified. If no simplification is possible, it
-c     behaves exactly like astClone and returns a pointer to the
-f     behaves exactly like AST_CLONE and returns a pointer to the
-*     original Mapping.
-*     - The Mapping returned by this function may not be independent
-*     of the original (even if simplification was possible), and
-*     modifying it may therefore result in indirect modification of
-*     the original. If a completely independent result is required, a
-c     copy should be made using astCopy.
-f     copy should be made using AST_COPY.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstMapping **map_list;        /* Pointer to array of Mapping pointers */
-   AstMapping *map;              /* Cloned pointer to nominated Mapping */
-   AstMapping *result;           /* Pointer to result Mapping */
-   int *invert_list;             /* Pointer to array of invert flags */
-   int imap;                     /* Loop counter for Mappings */
-   int modified;                 /* Index of first modified element */
-   int nmap;                     /* Number of Mappings */
-   int simpler;                  /* Simplification achieved? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Initialise dynamic arrays of Mapping pointers and associated invert
-   flags. */
-   nmap = 0;
-   map_list = NULL;
-   invert_list = NULL;
-
-/* Build a Mapping list to contain this Mapping (the list should only
-   have 1 element). */
-   astMapList( this, 1, astGetInvert( this ), &nmap, &map_list, &invert_list );
-
-/* Pass the list repeatedly to the "astMapMerge" method for
-   simplification. */
-   simpler = 0;
-   while ( astOK ) {
-      map = astClone( map_list[ 0 ] );
-      modified = astMapMerge( map, 0, 1, &nmap, &map_list, &invert_list );
-      map = astAnnul( map );
-
-/* Quit looping if the number of Mappings increases above 1, or if no
-   further change occurs. Note if any simplification was achieved. */
-      if ( ( nmap > 1 ) || ( modified < 0 ) ) break;
-      simpler = 1;
-   }
-
-/* Check whether simplification has occurred. If not, simply clone the
-   original Mapping pointer. This is what will normally happen for
-   Mapping classes which inherit the default (null) "astMapMerge"
-   method from this class and do not define one of their own. */
-   if ( astOK ) {
-      if ( !simpler || ( nmap > 1 ) ) {
-         result = astClone( this );
-
-/* If simplification occurred, test if the resulting Mapping has the
-   Invert attribute value we want. If so, we can simply clone a
-   pointer to it. */
-      } else {
-         if ( invert_list[ 0 ] == astGetInvert( map_list[ 0 ] ) ) {
-            result = astClone( map_list[ 0 ] );
-
-/* If not, we must make a copy. */
-         } else {
-            result = astCopy( map_list[ 0 ] );
-
-/* Either clear the copy's Invert attribute, or set it to 1, as
-   required. */
-            if ( invert_list[ 0 ] ) {
-               astSetInvert( result, 1 );
-            } else {
-               astClearInvert( result );
-            }
-         }
-      }
-   }
-
-/* Loop to annul all the pointers in the Mapping list. */
-   for ( imap = 0; imap < nmap; imap++ ) {
-      map_list[ imap ] = astAnnul( map_list[ imap ] );
-   }
-
-/* Free the dynamic arrays. */
-   map_list = astFree( map_list );
-   invert_list = astFree( invert_list );
-
-/* If an error occurred, annul the returned Mapping. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;   
-}
-
-static void Somb( double offset, const double params[], int flags,
-                  double *value, int *status ) {
-/*
-*  Name:
-*     Somb
-
-*  Purpose:
-*     1-dimensional somb(pi*x) interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void Somb( double offset, const double params[], int flags,
-*                double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. The function used is somb(pi*x), where
-*     somb(z)=2*J1(z)/z  (J1 is a Bessel function of the first kind of
-*     order 1). 
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the interpolation point, measured
-*        in pixels.
-*     params
-*        Not used.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   static double pi;             /* Value of pi */
-   static int init = 0;          /* Initialisation flag */
-
-/* On the first invocation, initialise a local value for pi. Do this
-   only once. */
-   if ( !init ) {
-      pi = acos( -1.0 );
-      init = 1;
-   }
-
-/* Scale the offset. */
-   offset *= pi;
-
-/* Evaluate the function. */
-   *value = ( offset != 0.0 ) ? ( 2.0*J1Bessel( offset, status ) / offset ) : 1.0;
-}
-
-static void SombCos( double offset, const double params[], int flags,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     SombCos
-
-*  Purpose:
-*     1-dimensional somb(pi*x)*cos(k*pi*x) interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SombCos( double offset, const double params[], int flags,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. The function used is somb(pi*x)*cos(k*pi*x)
-*     out to the point where cos(k*pi*x) = 0, and zero beyond. Here,
-*     somb(z)=2*J1(z)/z  (J1 is a Bessel function of the first kind of
-*     order 1). 
-
-*  Parameters:
-*     offset
-*        The offset of a pixel from the interpolation point, measured
-*        in pixels.
-*     params
-*        The first element of this array should give a value for "k"
-*        in the cos(k*pi*x) term.
-*     flags
-*        Not used.
-*     value
-*        Pointer to a double to receive the calculated kernel value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*/
-
-/* Local Variables: */
-   double offset_k;              /* Scaled offset */
-   static double halfpi;         /* Value of pi/2 */
-   static double pi;             /* Value of pi */
-   static int init = 0;          /* Initialisation flag */
-
-/* On the first invocation, initialise local values for pi and
-   pi/2. Do this only once. */
-   if ( !init ) {
-      pi = acos( -1.0 );
-      halfpi = 0.5 * pi;
-      init = 1;
-   }
-
-/* Multiply the offset by pi and remove its sign. */
-   offset = pi * fabs( offset );
-
-/* Find the offset scaled by the "k" factor. */
-   offset_k = offset * params[ 0 ];
-
-/* If the cos(k*pi*x) term has not reached zero, calculate the
-   result. */
-   if ( offset_k < halfpi ) {
-      *value = ( ( offset != 0.0 ) ? ( J1Bessel( offset, status ) / offset ) : 1.0 ) *
-               cos( offset_k );
-
-/* Otherwise, the result is zero. */
-   } else {
-      *value = 0.0;
-   }
-}
-
-static int SpecialBounds( const MapData *mapdata, double *lbnd, double *ubnd,
-                          double xl[], double xu[], int *status ) {
-/*
-*  Name:
-*     SpecialBounds
-
-*  Purpose:
-*     Estimate coordinate bounds using special points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int SpecialBounds( const MapData *mapdata, double *lbnd, double *ubnd,
-*                        double xl[], double xu[], int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function makes a rough estimate of the lower and upper
-*     bounds of a Mapping function over a constrained region of its
-*     input coordinate space by transforming a set of special test
-*     points. The points used lie at the corners of the constrained
-*     region, at the centre of each of its faces, at its centroid, and
-*     (if within the coordinate constraints) the origin.
-*
-*     In many practical cases, the true extrema may actually lie at
-*     one or other of these points, in which case the true bounds will
-*     be found. In other cases, this function only provides an
-*     approximate limit on each bound (there is no way of telling if
-*     this is the case, however). In either case, having these initial
-*     estimates can speed subsequent searches to find the global
-*     extrema as well as making that search more secure
-
-*  Parameters:
-*     mapdata
-*        Pointer to a MapData structure describing the Mapping
-*        function, its coordinate constraints, etc.
-*     lbnd
-*        Pointer to a double.  On entry, this should contain a
-*        previously-obtained upper limit on the lower bound, or
-*        AST__BAD if no such limit is available. On exit, it will be
-*        updated with a new estimate of the lower bound, if a better
-*        one has been found.
-*     ubnd
-*        Pointer to a double.  On entry, this should contain a
-*        previously-obtained lower limit on the upper bound, or
-*        AST__BAD if no such limit is available. On exit, it will be
-*        updated with a new estimate of the upper bound, if a better
-*        one has been found.
-*     xl
-*        Pointer to an array of double, with one element for each
-*        input coordinate, in which to return the position of a (not
-*        necessarily unique) input point at which the lower output
-*        bound is reached. This array is not altered if an improved
-*        estimate of the lower bound cannot be found.
-*     xu
-*        Pointer to an array of double, with one element for each
-*        input coordinate, in which to return the position of a (not
-*        necessarily unique) input point at which the upper output
-*        bound is reached. This array is not altered if an improved
-*        estimate of the upper bound cannot be found.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     A flag indicating if the returned values can be refined.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset_in;         /* PointSet for input coordinates */
-   AstPointSet *pset_out;        /* PointSet for output coordinates */
-   double **ptr_in;              /* Pointer to input coordinates */
-   double **ptr_out;             /* Pointer to output coordinates */
-   double *sxl;                  /* Secondary xl values */
-   double *sxu;                  /* Secondary xu values */
-   double f;                     /* Output coordinate value */
-   double slbnd;                 /* Secondary lbnd value */
-   double subnd;                 /* Secondary lbnd value */
-   int *limit;                   /* Workspace for lower/upper limit flags */
-   int bad;                      /* Output coordinate bad? */
-   int coord;                    /* Loop counter for coordinates */
-   int done;                     /* All corners done? */
-   int face;                     /* Loop counter for faces */
-   int ic;                       /* Index of corner */
-   int icen;                     /* Index of centroid point */
-   int ncorner;                  /* Number of corners */
-   int ncoord;                   /* Number of input coordinates */
-   int npoint;                   /* Number of points */
-   int origin;                   /* Origin lies within bounds? */
-   int point;                    /* Loop counter for points */
-   int result;                   /* Returned flag */
-
-/* Initialise */
-   result = 1;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   pset_out = NULL;
-
-/* Obtain the number of coordinate axes and calculate the number of
-   points required in order to place one at every corner of the
-   constrained region of the coordinate space. */
-   ncoord = mapdata->nin;
-   for ( npoint = 1, coord = 0; coord < ncoord; coord++ ) npoint *= 2;
-
-/* Also include a second point at each corner,offset slightly from the
-   corner towards the centroid */
-   ncorner = npoint;
-   npoint *= 2;
-
-/* Also include placing one at the centre of every face and one at the
-   centroid of the constrained coordinate space. */
-   npoint += 2 * ncoord + 1;
-   
-/* Determine if the origin lies within the bounds. If so, include it
-   as a further point. */
-   origin = 1;
-   for ( coord = 0; coord < ncoord; coord++ ) {
-      if ( ( mapdata->lbnd[ coord ] > 0.0 ) ||
-           ( mapdata->ubnd[ coord ] < 0.0 ) ) {
-         origin = 0;
-         break;
-      }
-   }
-   if ( origin ) npoint++;
-
-/* Initialise secondary bounds to be the supplied primary bounds */
-   slbnd = *lbnd;
-   subnd = *ubnd;
-
-/* Create workspace for ssecondary xl xu values */
-   sxl = astMalloc( sizeof(double)*(size_t) ncoord );
-   sxu = astMalloc( sizeof(double)*(size_t) ncoord );
-
-/* Create a PointSet to hold the coordinates and obtain a pointer to
-   its coordinate values. Also allocate workspace for calculating the
-   corner coordinates. */
-   pset_in = astPointSet( npoint, ncoord, "", status );
-   ptr_in = astGetPoints( pset_in );
-   limit = astMalloc( sizeof( int ) * (size_t) ncoord );
-   if ( astOK ) {
-   
-/* Initialise the workspace. */
-      for ( coord = 0; coord < ncoord; coord++ ) limit[ coord ] = 0;
-
-/* Loop to visit every corner. */
-      point = 0;
-      done = 0;
-      do {
-
-/* At each corner, translate the contents of the "limit" array
-   (containing zeros and ones) into the lower or upper bound on the
-   corresponding axis. This gives the coordinates of the corner, which
-   we store in the input PointSet. */
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            ptr_in[ coord ][ point ] = limit[ coord ] ?
-                                       mapdata->ubnd[ coord ] :
-                                       mapdata->lbnd[ coord ];
-         }
-
-/* Increment the count of points (i.e. corners). */
-         point++;
-      
-/* Now update the limit array to identify the next corner. */
-         coord = 0;
-         do {
-
-/* Flip the first zero found to become a one. This gives a new
-   corner. */
-            if ( !limit[ coord ] ) {
-               limit[ coord ] = 1;
-               break;
-
-/* However, first flip any previous ones to become zeros and then
-   examine the next element. We have processed all corners once the
-   array is entirely filled with ones. */
-            } else {
-               limit[ coord ] = 0;
-               done = ( ++coord == ncoord );
-            }
-         } while ( !done );
-      } while ( !done );
-
-/* Once the corners have been processed, loop to consider the centre
-   of each face. */
-      for ( face = 0; face < ( 2 * ncoord ); face++ ) {
-
-/* First calculate the centroid value for each coordinate.  Then set
-   one of these coordinates to the bound where the face lies. */
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            ptr_in[ coord ][ point ] = 0.5 * ( mapdata->lbnd[ coord ] +
-                                               mapdata->ubnd[ coord ] );
-         }
-         ptr_in[ face / 2 ][ point ] = ( face % 2 ) ?
-                                       mapdata->lbnd[ face / 2 ] :
-                                       mapdata->ubnd[ face / 2 ];
-
-/* Increment the count of points. */
-         point++;
-      }
-
-/* Place a point at the centroid of the constrained coordinate
-   space. */
-      for ( coord = 0; coord < ncoord; coord++ ) {
-         ptr_in[ coord ][ point ] = 0.5 * ( mapdata->lbnd[ coord ] +
-                                            mapdata->ubnd[ coord ] );
-      }
-      icen = point++;
-
-/* Add a set of positions which are offset slightly from each corner
-   towards the centroid. */
-      for ( ic = 0; ic < ncorner; ic++ ) {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            ptr_in[ coord ][ point ] = 0.999*ptr_in[ coord ][ ic ] + 
-                                       0.001*ptr_in[ coord ][ icen ];
-         }
-         point++;
-      }
-
-/* Finally, add the origin, if it lies within the constraints. */
-      if ( origin ) {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            ptr_in[ coord ][ point ] = 0.0;
-         }
-      }
-
-/* Once all the input coordinates have been calculated, transform them
-   and obtain a pointer to the resulting coordinate values. */
-      pset_out = astTransform( mapdata->mapping, pset_in, mapdata->forward,
-                               NULL );
-      ptr_out = astGetPoints( pset_out );
-      if ( astOK ) {
-
-/* Loop through each point and test if any of its transformed
-   coordinates is bad. */
-         for ( point = 0; point < npoint; point++ ) {
-            bad = 0;
-            for ( coord = 0; coord < mapdata->nout; coord++ ) {
-               if ( ptr_out[ coord ][ point ] == AST__BAD ) {
-                  bad = 1;
-                  break;
-               }
-            }
-
-/* If so, we ignore the point. Otherwise, extract the required
-   coordinate. */
-            f = ptr_out[ mapdata->coord ][ point ];
-            if ( !bad ) {
-
-/* Use this to update the lower and upper bounds we are seeking. If
-   either bound is updated, also store the coordinates of the
-   corresponding input point. */
-               if ( ( *lbnd == AST__BAD ) || ( f < *lbnd ) ) {
-                  *lbnd = f;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     xl[ coord ] = ptr_in[ coord ][ point ];
-                  }
-               }
-               if ( ( *ubnd == AST__BAD ) || ( f > *ubnd ) ) {
-                  *ubnd = f;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     xu[ coord ] = ptr_in[ coord ][ point ];
-                  }
-               }
-
-/* If this point has a bad coord value, it may still be useful if the
-   required coord value is not bad. In this case, extract the required
-   coordinate. */
-            } else if ( f != AST__BAD ) {
-
-/* Use this to update secondary lower and upper bounds we are seeking.
-   These will be returned if no primary values are found via the previous
-   code block. */
-               if ( ( slbnd == AST__BAD ) || ( f < slbnd ) ) {
-                  slbnd = f;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     sxl[ coord ] = ptr_in[ coord ][ point ];
-                  }
-               }
-               if ( ( subnd == AST__BAD ) || ( f > subnd ) ) {
-                  subnd = f;
-                  for ( coord = 0; coord < ncoord; coord++ ) {
-                     sxu[ coord ] = ptr_in[ coord ][ point ];
-                  }
-               }
-            }
-         }
-
-/* If no primary values could be found, use secondary values. */
-         if( *lbnd == AST__BAD && *ubnd == AST__BAD ) {
-            *lbnd = slbnd;
-            *ubnd = subnd;
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               xu[ coord ] = sxu[ coord ];
-               xl[ coord ] = sxl[ coord ];
-            }
-            result = ( slbnd == AST__BAD || subnd == AST__BAD );
-         }
-      }
-   }
-
-/* Free workspace */
-   sxl = astFree( sxl );
-   sxu = astFree( sxu );
-
-/* Annul the temporary PointSets and free the workspace. */
-   pset_in = astAnnul( pset_in );
-   pset_out = astAnnul( pset_out );
-   limit = astFree( limit );
-
-   return result;
-}
-
-/*
-*  Name:
-*     SpreadKernel1<X>
-
-*  Purpose:
-*     Rebin a data grid, using a 1-d interpolation kernel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SpreadKernel1<X>( AstMapping *this, int ndim_out,
-*                           const int *lbnd_out, const int *ubnd_out,
-*                           const <Xtype> *in, const <Xtype> *in_var,
-*                           int npoint, const int *offset, 
-*                           const double *const *coords,
-*                           void (* kernel)( double, const double [], int,
-*                                            double *, int * ),
-*                           int neighb, const double *params, int flags,
-*                           <Xtype> badval, int npix_out,  <Xtype> *out, 
-*                           <Xtype> *out_var, double *work, int *nused )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which rebins a rectangular region of an 
-*     input grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. Each input
-*     grid point may be mapped on to a position in the output grid in
-*     an arbitrary way. The input and output grids may have any number
-*     of dimensions, not necessarily equal.
-*
-*     Where the input positions given do not correspond with a pixel centre
-*     in the output grid, the each input pixel value is spread out between the
-*     surrounding output pixels using weights determined by a separable kernel 
-*     which is the product of a 1-dimensional kernel function evaluated along 
-*     each output dimension. A pointer should be supplied to the 1-dimensional 
-*     kernel function to be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping being used in the rebinning operation
-*        (this is only used for constructing error messages).
-*     ndim_out
-*        The number of dimensions in the output grid. This should be at
-*        least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output grid, its extent along a particular
-*        (i'th) dimension being ubnd_out[i]-lbnd_out[i]+1 (assuming "i"
-*        is zero-based). They also define the output grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be rebinned. The numerical type
-*        of these data should match the function used, as given by the
-*        suffix on the function name. Note that details of how the input 
-*        grid maps on to this array (e.g. the storage order, number of 
-*        dimensions, etc.) is arbitrary and is specified entirely by means 
-*        of the "offset" array. The "in" array should therefore contain 
-*        sufficient elements to accommodate the "offset" values supplied.  
-*        There is no requirement that all elements of the "in" array 
-*        should be rebinned, and any which are not addressed by the
-*        contents of the "offset" array will be ignored.
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned. It is addressed in exactly the same way (via the 
-*        "offset" array) as the "in" array. 
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of input points which are to be rebinned.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each input point, this array should contain the zero-based
-*        offset in the input array(s) (i.e. the "in" and, optionally, 
-*        the "in_var" arrays) from which the value to be rebinned should
-*        be obtained.
-*     coords
-*        An array of pointers to double, with "ndim_out" elements. 
-*        Element "coords[coord]" should point at the first element of 
-*        an array of double (with "npoint" elements) which contains the 
-*        values of coordinate number "coord" for each point being
-*        rebinned. The value of coordinate number "coord" for 
-*        rebinning point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices are
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding input data (and
-*        variance) value will be ignored.
-*     kernel
-*        Pointer to the 1-dimensional kernel function to be used.
-*     neighb
-*        The number of neighbouring pixels in each dimension (on each
-*        side of the interpolation position) which are to receive
-*        contributions from the input pixel value. This value should be at 
-*        least 1.
-*     params
-*        Pointer to an optional array of parameter values to be passed
-*        to the kernel function. If no parameters are required by this 
-*        function, then a NULL pointer may be supplied.
-*     flags
-*        The bitwise OR of a set of flag values which control the
-*        operation of the function. These are chosend from:
-*
-*        - AST__USEBAD: indicates whether there are "bad" (i.e. missing) data 
-*        in the input array(s) which must be recognised.  If this flag is not 
-*        set, all input values are treated literally.
-*        - AST__GENVAR: Indicates that output variances should be generated 
-*        from the spread of values contributing to each output pixel.
-*        - AST__USEVAR: Indicates that output variances should be generated 
-*        by rebinning the input variances.
-*        - AST__VARWGT: Indicates that input variances should be used to
-*        create weights for the input data values.
-*
-*        Only one of AST__GENVAR and AST__USEVAR should be supplied.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. The same value will also be used to flag any output
-*        array elements for which resampled values could not be
-*        obtained.  The output arrays(s) may be flagged with this
-*        value whether or not the AST__USEBAD flag is set (the
-*        function return value indicates whether any such values have
-*        been produced).
-*     npix_out
-*        Number of pixels in output array.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the rebinned data will be returned. The 
-*        storage order should be such that the index of the first grid
-*        dimension varies most rapidly and that of the final dimension 
-*        least rapidly (i.e. Fortran array storage order).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the rebinned values may be returned. This array will only be
-*        used if the "in_var" array has been given. The values returned 
-*        are estimates of the statistical variance of the corresponding 
-*        values in the "out" array, on the assumption that all errors in 
-*        input grid values (in the "in" array) are statistically independent 
-*        and that their variance estimates (in the "in_var" array) may 
-*        simply be summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     work
-*        A pointer to an array with the same data type and size as the "out" 
-*        array which is used as work space. The values in the supplied
-*        array are incremented on exit by the sum of the weights used
-*        with each output pixel.
-*     nused
-*        An optional pointer to an int which will be incremented by the
-*        number of input values pasted into the output array. Ignored if NULL.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*/
-/* Define macros to implement the function for a specific data
-   type. */
-#define MAKE_SPREAD_KERNEL1(X,Xtype,IntType) \
-static void SpreadKernel1##X( AstMapping *this, int ndim_out, \
-                              const int *lbnd_out, const int *ubnd_out, \
-                              const Xtype *in, const Xtype *in_var, \
-                              int npoint, const int *offset, \
-                              const double *const *coords, \
-                              void (* kernel)( double, const double [], \
-                                               int, double *, int * ), \
-                              int neighb, const double *params, \
-                              int flags, Xtype badval, int npix_out, \
-                              Xtype *out, Xtype *out_var, double *work, \
-                              int *nused, int *status ) { \
-\
-/* Local Variables: */ \
-   astDECLARE_GLOBALS            /* Thread-specific data */ \
-   Xtype in_val;                 /* Input pixel value */ \
-   Xtype c; \
-   double error; \
-   double **wtptr;               /* Pointer to array of weight pointers */ \
-   double *filter;               /* Pointer to Nd array of filter values */ \
-   double *kstart;               /* Pointer to next kernel value */ \
-   double *kval;                 /* Pointer to 1d array of kernel values */ \
-   double *wtprod;               /* Accumulated weight value array pointer */ \
-   double **wtptr_last;          /* Array of highest weight pointer values */ \
-   double *xnl;                  /* Pointer to previous ofset array (n-d) */ \
-   double xxn; \
-   double xxl;                   /* Previous X offset */ \
-   double yyl;                   /* Previous Y offset */ \
-   double pixwt;                 /* Weight to apply to individual pixel */ \
-   double x;                     /* x coordinate value */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   double sum;                   /* Sum of all filter values */ \
-   double wgt;                   /* Weight for input value */ \
-   double xx;                    /* X offset */ \
-   double yy;                    /* Y offset */ \
-   double *kp;                   /* Pointer to next weight values */ \
-   int *hi;                      /* Pointer to array of upper indices */ \
-   int *lo;                      /* Pointer to array of lower indices */ \
-   int *jhi;                     /* Pointer to array of filter upper indices */ \
-   int *jlo;                     /* Pointer to array of filter lower indices */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int done;                     /* All pixel indices done? */ \
-   int hi_ix;                    /* Upper output pixel index (x dimension) */ \
-   int hi_iy;                    /* Upper output pixel index (y dimension) */ \
-   int hi_jx;                    /* Upper filter pixel index (x dimension) */ \
-   int hi_jy;                    /* Upper filter pixel index (y dimension) */ \
-   int lo_ix;                    /* Lower output pixel index (x dimension) */ \
-   int lo_iy;                    /* Lower output pixel index (y dimension) */ \
-   int lo_jx;                    /* Lower filter pixel index (x dimension) */ \
-   int lo_jy;                    /* Lower filter pixel index (y dimension) */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ii;                       /* Loop counter for dimensions */ \
-   int ix;                       /* Pixel index in output grid x dimension */ \
-   int jx;                       /* Pixel index in filter grid x dimension */ \
-   int ixn;                      /* Pixel index in input grid (n-d) */ \
-   int ixn0;                     /* First pixel index in input grid (n-d) */ \
-   int iy;                       /* Pixel index in output grid y dimension */ \
-   int jy;                       /* Pixel index in filter grid y dimension */ \
-   int kerror;                   /* Error signalled by kernel function? */ \
-   int nb2;                      /* The total number of neighbouring pixels */ \
-   int nf;                       /* Number of pixels in filter array */ \
-   int off1;                     /* Input pixel offset due to y index */ \
-   int off_in;                   /* Offset to input pixel */ \
-   int off_out;                  /* Offset to output pixel */ \
-   int point;                    /* Loop counter for output points */ \
-   int s;                        /* Temporary variable for strides */ \
-   int genvar;                   /* Generate output variances? */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int varwgt;                   /* Use input variances as weights? */ \
-   int ystride;                  /* Stride along input grid y dimension */ \
-   int jxn; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Get a pointer to a structure holding thread-specific global data values */ \
-   astGET_GLOBALS(this); \
-\
-/* Further initialisation. */ \
-   kerror = 0; \
-   sum = 0.0; \
-   bad = 0; \
-\
-/* Find the total number of pixels in the filter used to spread a single \
-   input pixel into the output image. */ \
-   nb2 = 2*neighb; \
-   nf = 1; \
-   for ( idim = 0; idim < ndim_out; idim++ ) nf *= nb2; \
-\
-/* Allocate workspace to hold the filter values. */ \
-   filter = astMalloc( sizeof( double ) * (size_t) nf ); \
-   if ( astOK ) { \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-      usebad = flags & AST__USEBAD; \
-      usevar = 0; \
-      genvar = 0; \
-      if( flags & AST__GENVAR ) { \
-         genvar = out_var && work; \
-      } else if( flags & AST__USEVAR ) { \
-         usevar = in_var && out_var; \
-      } \
-      varwgt = ( flags & AST__VARWGT ) && in_var && work; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-      if ( ndim_out == 1 ) { \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-         if( varwgt ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  KERNEL_1D(X,Xtype,1,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  KERNEL_1D(X,Xtype,1,0,1,IntType,1) \
-               } else { \
-                  KERNEL_1D(X,Xtype,1,0,0,IntType,1) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  KERNEL_1D(X,Xtype,0,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  KERNEL_1D(X,Xtype,0,0,1,IntType,1) \
-               } else { \
-                  KERNEL_1D(X,Xtype,0,0,0,IntType,1) \
-               } \
-            } \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  KERNEL_1D(X,Xtype,1,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  KERNEL_1D(X,Xtype,1,0,1,IntType,0) \
-               } else { \
-                  KERNEL_1D(X,Xtype,1,0,0,IntType,0) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  KERNEL_1D(X,Xtype,0,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  KERNEL_1D(X,Xtype,0,0,1,IntType,0) \
-               } else { \
-                  KERNEL_1D(X,Xtype,0,0,0,IntType,0) \
-               } \
-            } \
-         } \
-\
-/* Exit point on error in kernel function */ \
-         Kernel_SError_1d: ; \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-      } else if ( ndim_out == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the output grid. */ \
-         ystride = ubnd_out[ 0 ] - lbnd_out[ 0 ] + 1; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-         if( varwgt ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  KERNEL_2D(X,Xtype,1,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  KERNEL_2D(X,Xtype,1,0,1,IntType,1) \
-               } else { \
-                  KERNEL_2D(X,Xtype,1,0,0,IntType,1) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  KERNEL_2D(X,Xtype,0,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  KERNEL_2D(X,Xtype,0,0,1,IntType,1) \
-               } else { \
-                  KERNEL_2D(X,Xtype,0,0,0,IntType,1) \
-               } \
-            } \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  KERNEL_2D(X,Xtype,1,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  KERNEL_2D(X,Xtype,1,0,1,IntType,0) \
-               } else { \
-                  KERNEL_2D(X,Xtype,1,0,0,IntType,0) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  KERNEL_2D(X,Xtype,0,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  KERNEL_2D(X,Xtype,0,0,1,IntType,0) \
-               } else { \
-                  KERNEL_2D(X,Xtype,0,0,0,IntType,0) \
-               } \
-            } \
-         } \
-\
-/* Exit point on error in kernel function */ \
-         Kernel_SError_2d: ; \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-      } else { \
-\
-/* Allocate workspace. */ \
-         hi = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-         lo = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-         jhi = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-         jlo = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-         stride = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-         xnl = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-         kval = astMalloc( sizeof( double ) * (size_t) \
-                                           ( nb2 * ndim_out ) ); \
-         wtprod = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-         wtptr = astMalloc( sizeof( double * ) * (size_t) ndim_out ); \
-         wtptr_last = astMalloc( sizeof( double * ) * (size_t) ndim_out ); \
-         if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the output grid. */ \
-            for ( s = 1, idim = 0; idim < ndim_out; idim++ ) { \
-               stride[ idim ] = s; \
-               s *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-               xnl[ idim ] = AST__BAD; \
-            } \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-            if( varwgt ) { \
-               if ( usebad ) { \
-                  if ( usevar ) { \
-                     KERNEL_ND(X,Xtype,1,1,0,IntType,1) \
-                  } else if ( genvar ) { \
-                     KERNEL_ND(X,Xtype,1,0,1,IntType,1) \
-                  } else { \
-                     KERNEL_ND(X,Xtype,1,0,0,IntType,1) \
-                  } \
-               } else { \
-                  if ( usevar ) { \
-                     KERNEL_ND(X,Xtype,0,1,0,IntType,1) \
-                  } else if ( genvar ) { \
-                     KERNEL_ND(X,Xtype,0,0,1,IntType,1) \
-                  } else { \
-                     KERNEL_ND(X,Xtype,0,0,0,IntType,1) \
-                  } \
-               } \
-            } else { \
-               if ( usebad ) { \
-                  if ( usevar ) { \
-                     KERNEL_ND(X,Xtype,1,1,0,IntType,0) \
-                  } else if ( genvar ) { \
-                     KERNEL_ND(X,Xtype,1,0,1,IntType,0) \
-                  } else { \
-                     KERNEL_ND(X,Xtype,1,0,0,IntType,0) \
-                  } \
-               } else { \
-                  if ( usevar ) { \
-                     KERNEL_ND(X,Xtype,0,1,0,IntType,0) \
-                  } else if ( genvar ) { \
-                     KERNEL_ND(X,Xtype,0,0,1,IntType,0) \
-                  } else { \
-                     KERNEL_ND(X,Xtype,0,0,0,IntType,0) \
-                  } \
-               } \
-            } \
-\
-/* Exit point on error in kernel function */ \
-            Kernel_SError_Nd: ;\
-         } \
-\
-/* Free the workspace. */ \
-         hi = astFree( hi ); \
-         lo = astFree( lo ); \
-         jhi = astFree( jhi ); \
-         jlo = astFree( jlo ); \
-         stride = astFree( stride ); \
-         xnl = astFree( xnl ); \
-         kval = astFree( kval ); \
-         wtprod = astFree( wtprod ); \
-         wtptr = astFree( wtptr ); \
-         wtptr_last = astFree( wtptr_last ); \
-      } \
-      filter = astFree( filter ); \
-   }\
-\
-/* If an error occurred in the kernel function, then report a \
-   contextual error message. */ \
-   if ( kerror ) { \
-      astError( astStatus, "astRebin"#X"(%s): Error signalled by " \
-                "user-supplied 1-d interpolation kernel.", status, \
-                astGetClass( unsimplified_mapping ) ); \
-   } \
-\
-}
-
-
-
-
-#define KERNEL_1D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* We do not yet have a previous filter position. */ \
-   xxl = AST__BAD; \
-\
-/* Loop round all input points which are to be rebinned. */ \
-   for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-      off_in = offset[ point ]; \
-      in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-      if ( Usebad ) { \
-         bad = ( in_val == badval ); \
-         if ( Usevar || Varwgt ) { \
-            bad = bad || ( in_var[ off_in ] == badval ) \
-                      || ( in_var[ off_in ] <= 0.0 ); \
-         } \
-      } else { \
-         if ( Usevar || Varwgt ) { \
-            bad = ( in_var[ off_in ] <= 0.0 ); \
-         } else { \
-            bad = 0; \
-         } \
-      } \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
-      x = coords[ 0 ][ point ]; \
-      bad = bad || ( x == AST__BAD ); \
-\
-/* If OK, calculate the lowest and highest indices (in the x \
-   dimension) of the region of neighbouring pixels that will \
-   contribute to the interpolated result. Constrain these values to \
-   lie within the output grid. */ \
-      if ( !bad ) { \
-         ix = (int) floor( x ) - neighb + 1; \
-         lo_ix = MaxI( ix, lbnd_out[ 0 ], status ); \
-         hi_ix = MinI( ix + nb2 - 1, ubnd_out[ 0 ], status ); \
-\
-/* Skip to the next input point if the current input point makes no \
-   contribution to any output pixel. */ \
-         if( lo_ix <= hi_ix ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-            if( nused ) (*nused)++; \
-\
-/* Convert these output indices to the corresponding indices \
-   within a box [ 0, 2*neighb ] holding the kernel values. */ \
-            lo_jx = lo_ix - ix; \
-            hi_jx = hi_ix - ix; \
-\
-/* Use the kernel function to fill the work array with weights for all output \
-   pixels whether or not they fall within the output array. At the same \
-   time find the sum of all the factors. */ \
-            xx = (double) ix - x; \
-            if( xx != xxl ) { \
-               xxl = xx; \
-\
-               sum = 0.0; \
-               for ( jx = 0; jx < nb2; jx++ ) { \
-                  ( *kernel )( xx, params, flags, &pixwt, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
-                  if ( !astOK ) { \
-                     kerror = 1; \
-                     goto Kernel_SError_1d; \
-                  } \
-\
-/* Store the kernel factor and increment the sum of all factors. */ \
-                  filter[ jx ] = pixwt; \
-                  sum += pixwt; \
-                  xx += 1.0; \
-               } \
-\
-/* Ensure we do not divide by zero. */ \
-               if( sum == 0.0 ) sum = 1.0; \
-            } \
-\
-/* If we are using the input data variances as weights, calculate the \
-   total weight, incorporating the normalisation factor for the kernel. */ \
-            if( Varwgt ) { \
-               wgt = 1.0/(sum*in_var[ off_in ]); \
-\
-/* If we are not using input variances as weights, the weight is just the \
-   kernel normalisation factor. */ \
-            } else { \
-               wgt = 1.0/sum; \
-            } \
-\
-/* Loop round all the output pixels which receive contributions from this \
-   input pixel, calculating the offset of each pixel from the start of the \
-   input array. */ \
-            off_out = lo_ix - lbnd_out[ 0 ]; \
-            for ( jx = lo_jx; jx <= hi_jx; jx++, off_out++ ) { \
-\
-/* Retrieve the weight for the current output pixel and normalise it. */ \
-               pixwt = wgt*filter[ jx ]; \
-\
-/* Update the output pixel with the required fraction of the input pixel \
-   value. */ \
-               c = CONV(IntType,in_val*pixwt); \
-               out[ off_out ] += c; \
-               if( work ) work[ off_out ] += pixwt; \
-\
-               if ( Usevar ) { \
-                  out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*pixwt*pixwt); \
-               } else if ( Genvar && pixwt != 0.0 ) { \
-                  out_var[ off_out ] += c*c/pixwt; \
-                  work[ off_out + npix_out ] += pixwt*pixwt; \
-               } \
-\
-            } \
-         } \
-      } \
-   }
-
-
-
-
-#define KERNEL_2D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* We do not yet have a previous filter position. */ \
-   xxl = AST__BAD; \
-   yyl = AST__BAD; \
-\
-/* Loop round all input points which are to be rebinned. */ \
-   for( point = 0; point < npoint; point++ ) { \
-      error = 0.0; \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-      off_in = offset[ point ]; \
-      in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-      if ( Usebad ) { \
-         bad = ( in_val == badval ); \
-         if ( Usevar || Varwgt ) { \
-            bad = bad || ( in_var[ off_in ] == badval ) \
-                      || ( in_var[ off_in ] <= 0.0 ); \
-         } \
-      } else { \
-         if ( Usevar || Varwgt ) { \
-            bad = ( in_var[ off_in ] <= 0.0 ); \
-         } else { \
-            bad = 0; \
-         } \
-      } \
-\
-/* Obtain the x coordinate of the current point and test if it is bad. */ \
-      x = coords[ 0 ][ point ]; \
-      bad = bad || ( x == AST__BAD ); \
-      if ( !bad ) { \
-\
-/* Similarly obtain and test the y coordinate. */ \
-         y = coords[ 1 ][ point ]; \
-         bad = ( y == AST__BAD ); \
-         if ( !bad ) { \
-\
-/* If OK, calculate the lowest and highest indices (in each dimension) \
-   of the region of neighbouring output pixels which will receive \
-   contributions from the current input pixel. Constrain these values \
-   to lie within the input grid. */ \
-            ix = (int) floor( x ) - neighb + 1; \
-            lo_ix = MaxI( ix, lbnd_out[ 0 ], status ); \
-            hi_ix = MinI( ix + nb2 - 1, ubnd_out[ 0 ], status ); \
-            iy = (int) floor( y ) - neighb + 1; \
-            lo_iy = MaxI( iy, lbnd_out[ 1 ], status ); \
-            hi_iy = MinI( iy + nb2 - 1, ubnd_out[ 1 ], status ); \
-\
-/* Skip to the next input point if the current input point makes no \
-   contribution to any output pixel. */ \
-            if( lo_ix <= hi_ix && lo_iy <= hi_iy ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-               if( nused ) (*nused)++; \
-\
-/* Convert these output indices to the corresponding indices \
-   within a box [ 0:2*neighb, 0:2*neighb ] holding the kernel values. */ \
-               lo_jx = lo_ix - ix; \
-               hi_jx = hi_ix - ix; \
-               lo_jy = lo_iy - iy; \
-               hi_jy = hi_iy - iy; \
-\
-/* Loop to evaluate the kernel function along the y dimension, storing \
-   the resulting weight values in all elements of each associated row \
-   in the kvar array. The function's argument is the offset of the \
-   output pixel (along this dimension) from the central output \
-   position. */ \
-               yy = (double) iy - y; \
-               xx = (double) ix - x; \
-               if( xx != xxl || yy != yyl ) { \
-                  xxl = xx; \
-                  yyl = yy; \
-\
-                  kp = filter; \
-                  for ( jy = 0; jy < nb2; jy++ ) { \
-                     ( *kernel )( yy, params, flags, &pixwt, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
-                     if ( !astOK ) { \
-                        kerror = 1; \
-                        goto Kernel_SError_2d; \
-                     } \
-\
-/* Store the kernel factor in all elements of the current row. */ \
-                     for( jx = 0; jx < nb2; jx++ ) *(kp++) = pixwt; \
-\
-/* Move on to the next row. */ \
-                     yy += 1.0; \
-                  } \
-\
-/* Loop to evaluate the kernel function along the x dimension, multiplying \
-   the resulting weight values by the values already stored in the the \
-   associated column in the kvar array. The function's argument is the \
-   offset of the output pixel (along this dimension) from the central output \
-   position. Also form the total data sum in the filter array. */ \
-                  sum = 0.0; \
-                  for ( jx = 0; jx < nb2; jx++ ) { \
-                     ( *kernel )( xx, params, flags, &pixwt, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
-                     if ( !astOK ) { \
-                        kerror = 1; \
-                        goto Kernel_SError_2d; \
-                     } \
-\
-/* Multiply the kernel factor by all elements of the current column. */ \
-                     kp = filter + jx; \
-                     for( jy = 0; jy < nb2; jy++, kp += nb2 ) { \
-                        *kp *= pixwt; \
-                        sum += *kp; \
-                     } \
-\
-/* Move on to the next column. */ \
-                     xx += 1.0; \
-                  } \
-\
-/* Ensure we do not divide by zero. */ \
-                  if( sum == 0.0 ) sum = 1.0; \
-               } \
-\
-/* If we are using the input data variances as weights, calculate the \
-   total weight, incorporating the normalisation factor for the kernel. */ \
-               if( Varwgt ) { \
-                  wgt = 1.0/(sum*in_var[ off_in ]); \
-\
-/* If we are not using input variances as weights, the weight is just the \
-   kernel normalisation factor. */ \
-               } else { \
-                  wgt = 1.0/sum; \
-               } \
-\
-/* Find the offset into the output array at the first modified output pixel \
-   in the first modified row. */ \
-               off1 = lo_ix - lbnd_out[ 0 ] + ystride * ( lo_iy - lbnd_out[ 1 ] ); \
-\
-/* Loop over the affected output rows again. */ \
-               for ( jy = lo_jy; jy <= hi_jy; jy++, off1 += ystride ) { \
-\
-/* Save the offset of the first output pixel to be modified in the \
-   current row. */ \
-                  off_out = off1; \
-\
-/* Get a pointer to the first weight value which will be used. */ \
-                  kp = filter + lo_jx + jy*nb2; \
-\
-/* Loop over the affected output columns again. */ \
-                  for ( jx = lo_jx; jx <= hi_jx; jx++, off_out++, kp++ ) { \
-\
-/* Calculate the weight for this output pixel and normalise it. */ \
-                     pixwt = wgt*( *kp ); \
-\
-/* Update the output pixel with the required fraction of the input pixel \
-   value. */ \
-                     c = CONV(IntType,in_val*pixwt); \
-                     out[ off_out ] += c; \
-                     if( work ) work[ off_out ] += pixwt; \
-                     if ( Usevar ) { \
-                        out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*pixwt*pixwt); \
-                     } else if ( Genvar && pixwt != 0.0 ) { \
-                        out_var[ off_out ] += c*c/pixwt; \
-                        work[ off_out + npix_out ] += pixwt*pixwt; \
-                     } \
-                  } \
-               } \
-            } \
-         } \
-      } \
-   }
-
-
-
-
-#define KERNEL_ND(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* We do not yet have a normalising factor */ \
-   sum = AST__BAD; \
-\
-/* Loop round all input points which are to be rebinned. */ \
-   for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-      off_in = offset[ point ]; \
-      in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-      if ( Usebad ) { \
-         bad = ( in_val == badval ); \
-         if ( Usevar || Varwgt ) { \
-            bad = bad || ( in_var[ off_in ] == badval ) \
-                      || ( in_var[ off_in ] <= 0.0 ); \
-         } \
-      } else { \
-         if ( Usevar || Varwgt ) { \
-            bad = ( in_var[ off_in ] <= 0.0 ); \
-         } else { \
-            bad = 0; \
-         } \
-      } \
-\
-/* Initialise offsets into the output array. Then loop to obtain each \
-   coordinate associated with the current output point. Set a flag \
-   indicating if any output pixel will be modified. */ \
-      if( !bad ) { \
-         off_out = 0; \
-         for ( idim = 0; idim < ndim_out; idim++ ) { \
-            xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate is bad. If true, the corresponding output pixel \
-   value will be bad, so give up on this point. */ \
-            bad = ( xn == AST__BAD ); \
-            if ( bad ) break; \
-\
-/* Calculate the lowest and highest indices (in the current dimension) \
-   of the region of neighbouring output pixels that will be modified. \
-   Constrain these values to lie within the output grid. */ \
-            ixn = (int) floor( xn ); \
-            ixn0 = ixn - neighb + 1; \
-            lo[ idim ] = MaxI( ixn0, lbnd_out[ idim ], status ); \
-            hi[ idim ] = MinI( ixn + neighb, ubnd_out[ idim ], status ); \
-            jlo[ idim ] = lo[ idim ] - ixn0; \
-            jhi[ idim ] = hi[ idim ] - ixn0; \
-\
-/* Check there is some overlap with the output array on this axis. */ \
-            if( lo[ idim ] > hi[ idim ] ) { \
-               bad = 1; \
-               break; \
-            } \
-\
-/* Accumulate the offset (from the start of the output array) of the \
-   modified output pixel which has the lowest index in each dimension. */ \
-            off_out += stride[ idim ] * ( lo[ idim ] - lbnd_out[ idim ] ); \
-\
-/* Set up an array of pointers to locate the first filter pixel (stored in the \
-   "kval" array) for each dimension. */ \
-            wtptr[ idim ] = kval + nb2*idim; \
-            wtptr_last[ idim ] = wtptr[ idim ] + nb2 - 1; \
-\
-/* Loop to evaluate the kernel function along each dimension, storing \
-   the resulting values. The function's argument is the offset of the \
-   output pixel (along the relevant dimension) from the central output \
-   point. */ \
-            xxn = (double) ( ixn - neighb + 1 ) - xn; \
-            if( xxn != xnl[ idim ] ) { \
-               sum = AST__BAD; \
-               xnl[ idim ] = xxn; \
-               for ( jxn = 0; jxn < nb2; jxn++ ) { \
-                  ( *kernel )( xxn, params, flags, wtptr[ idim ] + jxn, status ); \
-\
-/* Check for errors arising in the kernel function. */ \
-                  if ( !astOK ) { \
-                     kerror = 1; \
-                     goto Kernel_SError_Nd; \
-                  } \
-\
-/* Increment the kernel position. */ \
-                  xxn += 1.0; \
-               } \
-            } \
-         } \
-\
-/* If OK... */ \
-         if ( !bad ) { \
-\
-/* We only need to modify the normalising factor if the weight values \
-   have changed. */ \
-            if( sum == AST__BAD ) { \
-\
-/* The kernel value to use for each output pixel is the product of the \
-   kernel values for each individual axis at that point. To conserve \
-   flux we need to make sure that the sum of these kernel products is unity. \
-   So loop over the values now to find the total sum of all kernel values. */ \
-               idim = ndim_out - 1; \
-               wtprod[ idim ] = 1.0; \
-               done = 0; \
-               sum = 0; \
-               do { \
-\
-/* Each modified output pixel has a weight equal to the product of the kernel \
-   weight factors evaluated along each input dimension. However, since \
-   we typically only change the index of one dimension at a time, we \
-   can avoid forming this product repeatedly by retaining an array of \
-   accumulated products for all higher dimensions. We need then only \
-   update the lower elements in this array, corresponding to those \
-   dimensions whose index has changed. We do this here, "idim" being \
-   the index of the most significant dimension to have changed. Note \
-   that on the first pass, all dimensions are considered changed, \
-   causing this array to be initialised. */ \
-                  for ( ii = idim; ii >= 1; ii-- ) { \
-                     wtprod[ ii - 1 ] = wtprod[ ii ] * *( wtptr[ ii ] ); \
-                  } \
-\
-/* Obtain the weight of each pixel from the accumulated product of \
-   weights. Also multiply by the weight for dimension zero, which is not \
-   included in the "wtprod" array). Increment the sum of all weights. */ \
-                  sum += wtprod[ 0 ] * *( wtptr[ 0 ] ); \
-\
-/* Now update the weight value pointers and pixel offset to refer to \
-   the next output pixel to be considered. */ \
-                  idim = 0; \
-                  do { \
-\
-/* The first input dimension whose weight value pointer has not yet \
-   reached its final value has this pointer incremented. */ \
-                     if ( wtptr[ idim ] != wtptr_last[ idim ] ) { \
-                        wtptr[ idim ]++; \
-                        break; \
-\
-/* Any earlier dimensions (which have reached the final pointer value) \
-   have this pointer returned to its lowest value. */ \
-                     } else { \
-                        wtptr[ idim ] -= nb2 - 1; \
-                        done = ( ++idim == ndim_out ); \
-                     } \
-                  } while ( !done ); \
-               } while ( !done ); \
-\
-/* Ensure we do not divide by zero. */ \
-               if( sum == 0.0 ) sum = 1.0; \
-            } \
-\
-/* Re-initialise the weights pointers to refer to the first and last \
-   filter pixels which overlaps the output array. */ \
-            kstart = kval; \
-            for ( idim = 0; idim < ndim_out; idim++ ) { \
-               wtptr[ idim ] = kstart + jlo[ idim ]; \
-               wtptr_last[ idim ] = kstart + jhi[ idim ]; \
-               kstart += nb2; \
-            } \
-\
-/* If we are using the input data variances as weights, calculate the \
-   total weight, incorporating the normalisation factor for the kernel. */ \
-            if( Varwgt ) { \
-               wgt = 1.0/(sum*in_var[ off_in ]); \
-\
-/* If we are not using input variances as weights, the weight is just the \
-   kernel normalisation factor. */ \
-            } else { \
-               wgt = 1.0/sum; \
-            } \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-            if( nused ) (*nused)++; \
-\
-/* Initialise, and loop over the neighbouring output pixels to divide up \
-   the input pixel value between them. */ \
-            idim = ndim_out - 1; \
-            wtprod[ idim ] = 1.0; \
-            done = 0; \
-            do { \
-\
-/* Each modified output pixel has a weight equal to the product of the kernel \
-   weight factors evaluated along each input dimension. However, since \
-   we typically only change the index of one dimension at a time, we \
-   can avoid forming this product repeatedly by retaining an array of \
-   accumulated products for all higher dimensions. We need then only \
-   update the lower elements in this array, corresponding to those \
-   dimensions whose index has changed. We do this here, "idim" being \
-   the index of the most significant dimension to have changed. Note \
-   that on the first pass, all dimensions are considered changed, \
-   causing this array to be initialised. */ \
-               for ( ii = idim; ii >= 1; ii-- ) { \
-                  wtprod[ ii - 1 ] = wtprod[ ii ] * *( wtptr[ ii ] ); \
-               } \
-\
-/* Obtain the weight of each pixel from the accumulated \
-   product of weights. Also multiply by the weight for dimension zero, \
-   which is not included in the "wtprod" array). */ \
-               pixwt = ( wtprod[ 0 ] * *( wtptr[ 0 ] ) )*wgt; \
-\
-/* Update the output pixel with the required fraction of the input pixel \
-   value. */ \
-               c = CONV(IntType,in_val*pixwt); \
-               out[ off_out ] += c; \
-               if( work ) work[ off_out ] += pixwt; \
-               if ( Usevar ) { \
-                  out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*pixwt*pixwt); \
-               } else if ( Genvar && pixwt != 0.0 ) { \
-                  out_var[ off_out ] += c*c/pixwt; \
-                  work[ off_out + npix_out ] += pixwt*pixwt; \
-               } \
-\
-/* Now update the weight value pointers and pixel offset to refer to \
-   the next output pixel to be considered. */ \
-               idim = 0; \
-               do { \
-\
-/* The first input dimension whose weight value pointer has not yet \
-   reached its final value has this pointer incremented, and the pixel \
-   offset into the input array is updated accordingly. */ \
-                  if ( wtptr[ idim ] != wtptr_last[ idim ] ) { \
-                     wtptr[ idim ]++; \
-                     off_out += stride[ idim ]; \
-                     break; \
-\
-/* Any earlier dimensions (which have reached the final pointer value) \
-   have this pointer returned to its lowest value. Again, the pixel \
-   offset into the input image is updated accordingly. */ \
-                  } else { \
-                     wtptr[ idim ] -= ( hi[ idim ] - lo[ idim ] ); \
-                     off_out -= stride[ idim ] * \
-                                     ( hi[ idim ] - lo[ idim ] ); \
-                     done = ( ++idim == ndim_out ); \
-                  } \
-               } while ( !done ); \
-            } while ( !done ); \
-         } \
-      } \
-   }
-
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_SPREAD_KERNEL1(LD,long double,0)
-#endif     
-MAKE_SPREAD_KERNEL1(D,double,0) 
-MAKE_SPREAD_KERNEL1(F,float,0)
-MAKE_SPREAD_KERNEL1(I,int,1)
-
-/* Undefine the macros used above. */
-#undef KERNEL_ND
-#undef KERNEL_2D
-#undef KERNEL_1D
-#undef MAKE_SPREAD_KERNEL1
-
-/*
-*  Name:
-*     SpreadLinear<X>
-
-*  Purpose:
-*     Rebin a data grid, using the linear spreading scheme.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SpreadLinear<X>( int ndim_out,
-*                           const int *lbnd_out, const int *ubnd_out,
-*                           const <Xtype> *in, const <Xtype> *in_var,
-*                           int npoint, const int *offset, 
-*                           const double *const *coords, int flags, 
-*                           <Xtype> badval, int npix_out, <Xtype> *out, 
-*                           <Xtype> *out_var, double *work, int *nused  ) 
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which rebins a rectangular region of an 
-*     input grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. Each input
-*     grid point may be mapped on to a position in the output grid in
-*     an arbitrary way. Where the positions given do not correspond
-*     with a pixel centre in the input grid, the spreading scheme
-*     used divides the input pixel value up linearly between the 
-*     nearest neighbouring output pixels in each dimension (there are 2 
-*     nearest neighbours in 1 dimension, 4 in 2 dimensions, 8 in 3 
-*     dimensions, etc.).
-
-*  Parameters:
-*     ndim_out
-*        The number of dimensions in the output grid. This should be at
-*        least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output grid, its extent along a particular
-*        (i'th) dimension being ubnd_out[i]-lbnd_out[i]+1 (assuming "i"
-*        is zero-based). They also define the output grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be rebinned. The numerical type
-*        of these data should match the function used, as given by the
-*        suffix on the function name. Note that details of how the input 
-*        grid maps on to this array (e.g. the storage order, number of 
-*        dimensions, etc.) is arbitrary and is specified entirely by means 
-*        of the "offset" array. The "in" array should therefore contain 
-*        sufficient elements to accommodate the "offset" values supplied.  
-*        There is no requirement that all elements of the "in" array 
-*        should be rebinned, and any which are not addressed by the
-*        contents of the "offset" array will be ignored.
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned. It is addressed in exactly the same way (via the 
-*        "offset" array) as the "in" array. 
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of input points which are to be rebinned.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each input point, this array should contain the zero-based
-*        offset in the input array(s) (i.e. the "in" and, optionally, 
-*        the "in_var" arrays) from which the value to be rebinned should
-*        be obtained.
-*     coords
-*        An array of pointers to double, with "ndim_out" elements. 
-*        Element "coords[coord]" should point at the first element of 
-*        an array of double (with "npoint" elements) which contains the 
-*        values of coordinate number "coord" for each point being
-*        rebinned. The value of coordinate number "coord" for 
-*        rebinning point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices are
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding input data (and
-*        variance) value will be ignored.
-*        The bitwise OR of a set of flag values which control the
-*        operation of the function. These are chosend from:
-*
-*        - AST__USEBAD: indicates whether there are "bad" (i.e. missing) data 
-*        in the input array(s) which must be recognised.  If this flag is not 
-*        set, all input values are treated literally.
-*        - AST__GENVAR: Indicates that any input variances are to be
-*        ignored, and that the output variances should be generated from
-*        the spread of values contributing to each output pixel.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. The same value will also be used to flag any output
-*        array elements for which resampled values could not be
-*        obtained.  The output arrays(s) may be flagged with this
-*        value whether or not the AST__USEBAD flag is set (the
-*        function return value indicates whether any such values have
-*        been produced).
-*     npix_out
-*        Number of pixels in output array.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the rebinned data will be returned. The 
-*        storage order should be such that the index of the first grid
-*        dimension varies most rapidly and that of the final dimension 
-*        least rapidly (i.e. Fortran array storage order).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the rebinned values may be returned. This array will only be
-*        used if the "in_var" array has been given. The values returned 
-*        are estimates of the statistical variance of the corresponding 
-*        values in the "out" array, on the assumption that all errors in 
-*        input grid values (in the "in" array) are statistically independent 
-*        and that their variance estimates (in the "in_var" array) may 
-*        simply be summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     work
-*        An optional pointer to a double array with the same size as 
-*        the "out" array. The contents of this array (if supplied) are
-*        incremented by the accumulated weights assigned to each output pixel.
-*        If no accumulated weights are required, a NULL pointer should be 
-*        given.
-*     nused
-*        An optional pointer to an int which will be incremented by the
-*        number of input values pasted into the output array. Ignored if NULL.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*/
-/* Define macros to implement the function for a specific data
-   type. */
-#define MAKE_SPREAD_LINEAR(X,Xtype,IntType) \
-static void SpreadLinear##X( int ndim_out, \
-                            const int *lbnd_out, const int *ubnd_out, \
-                            const Xtype *in, const Xtype *in_var, \
-                            int npoint, const int *offset, \
-                            const double *const *coords, int flags, \
-                            Xtype badval, int npix_out, Xtype *out, \
-                            Xtype *out_var, double *work, int *nused, int *status ) { \
-\
-/* Local Variables: */ \
-   Xtype c;                      /* Contribution to output value */ \
-   Xtype in_val;                 /* Input value */ \
-   double *frac_hi;              /* Pointer to array of weights */ \
-   double *frac_lo;              /* Pointer to array of weights */ \
-   double *wt;                   /* Pointer to array of weights */ \
-   double *wtprod;               /* Array of accumulated weights pointer */ \
-   double *xn_max;               /* Pointer to upper limits array (n-d) */ \
-   double *xn_min;               /* Pointer to lower limits array (n-d) */ \
-   double f;                     /* Total pixel weight */ \
-   double frac_hi_x;             /* Pixel weight (x dimension) */ \
-   double frac_hi_y;             /* Pixel weight (y dimension) */ \
-   double frac_lo_x;             /* Pixel weight (x dimension) */ \
-   double frac_lo_y;             /* Pixel weight (y dimension) */ \
-   double wgt;                   /* Weight for input value */ \
-   double x;                     /* x coordinate value */ \
-   double xmax;                  /* x upper limit */ \
-   double xmin;                  /* x lower limit */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   double ymax;                  /* y upper limit */ \
-   double ymin;                  /* y lower limit */ \
-   int *dim;                     /* Pointer to array of pixel indices */ \
-   int *hi;                      /* Pointer to array of upper indices */ \
-   int *lo;                      /* Pointer to array of lower indices */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int bad_var;                  /* Output variance bad? */ \
-   int done;                     /* All pixel indices done? */ \
-   int genvar;                   /* Generate output variances? */ \
-   int hi_x;                     /* Upper pixel index (x dimension) */ \
-   int hi_y;                     /* Upper pixel index (y dimension) */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ii;                       /* Loop counter for weights */ \
-   int ixn;                      /* Pixel index (n-d) */ \
-   int lo_x;                     /* Lower pixel index (x dimension) */ \
-   int lo_y;                     /* Lower pixel index (y dimension) */ \
-   int off;                      /* Total offset to input pixel */ \
-   int off_in;                   /* Offset to input pixel */ \
-   int off_lo;                   /* Offset to "first" input pixel */ \
-   int off_out;                  /* Offset to output pixel */ \
-   int point;                    /* Loop counter for output points */ \
-   int s;                        /* Temporary variable for strides */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int varwgt;                   /* Use input variances as weights? */ \
-   int ystride;                  /* Stride along input grid y dimension */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Initialise variables to avoid "used of uninitialised variable" \
-   messages from dumb compilers. */ \
-   bad = 0; \
-   bad_var = 0; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-   usebad = flags & AST__USEBAD; \
-   usevar = 0; \
-   genvar = 0; \
-   if( flags & AST__GENVAR ) { \
-      genvar = out_var && work; \
-   } else if( flags & AST__USEVAR ) { \
-      usevar = in_var && out_var; \
-   } \
-   varwgt = ( flags & AST__VARWGT ) && in_var && work; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   if ( ndim_out == 1 ) { \
-\
-/* Calculate the coordinate limits of the input grid. */ \
-      xmin = (double) lbnd_out[ 0 ] - 0.5; \
-      xmax = (double) ubnd_out[ 0 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-      if( varwgt ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               LINEAR_1D(X,Xtype,1,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               LINEAR_1D(X,Xtype,1,0,1,IntType,1) \
-            } else { \
-               LINEAR_1D(X,Xtype,1,0,0,IntType,1) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               LINEAR_1D(X,Xtype,0,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               LINEAR_1D(X,Xtype,0,0,1,IntType,1) \
-            } else { \
-               LINEAR_1D(X,Xtype,0,0,0,IntType,1) \
-            } \
-         } \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               LINEAR_1D(X,Xtype,1,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               LINEAR_1D(X,Xtype,1,0,1,IntType,0) \
-            } else { \
-               LINEAR_1D(X,Xtype,1,0,0,IntType,0) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               LINEAR_1D(X,Xtype,0,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               LINEAR_1D(X,Xtype,0,0,1,IntType,0) \
-            } else { \
-               LINEAR_1D(X,Xtype,0,0,0,IntType,0) \
-            } \
-         } \
-      } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   } else if ( ndim_out == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the output grid. */ \
-      ystride = ubnd_out[ 0 ] - lbnd_out[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the output grid in each \
-   dimension. */ \
-      xmin = (double) lbnd_out[ 0 ] - 0.5; \
-      xmax = (double) ubnd_out[ 0 ] + 0.5; \
-      ymin = (double) lbnd_out[ 1 ] - 0.5; \
-      ymax = (double) ubnd_out[ 1 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-      if( varwgt ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               LINEAR_2D(X,Xtype,1,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               LINEAR_2D(X,Xtype,1,0,1,IntType,1) \
-            } else { \
-               LINEAR_2D(X,Xtype,1,0,0,IntType,1) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               LINEAR_2D(X,Xtype,0,1,0,IntType,1) \
-            }else if ( genvar ) { \
-               LINEAR_2D(X,Xtype,0,0,1,IntType,1) \
-            } else { \
-               LINEAR_2D(X,Xtype,0,0,0,IntType,1) \
-            } \
-         } \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               LINEAR_2D(X,Xtype,1,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               LINEAR_2D(X,Xtype,1,0,1,IntType,0) \
-            } else { \
-               LINEAR_2D(X,Xtype,1,0,0,IntType,0) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               LINEAR_2D(X,Xtype,0,1,0,IntType,0) \
-            }else if ( genvar ) { \
-               LINEAR_2D(X,Xtype,0,0,1,IntType,0) \
-            } else { \
-               LINEAR_2D(X,Xtype,0,0,0,IntType,0) \
-            } \
-         } \
-      } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-   } else { \
-\
-/* Allocate workspace. */ \
-      dim = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-      frac_hi = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      frac_lo = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      hi = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-      lo = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-      stride = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-      wt = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      wtprod = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      xn_max = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      xn_min = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the output grid. */ \
-         for ( s = 1, idim = 0; idim < ndim_out; idim++ ) { \
-            stride[ idim ] = s; \
-            s *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the output grid in each \
-   dimension. */ \
-            xn_min[ idim ] = (double) lbnd_out[ idim ] - 0.5; \
-            xn_max[ idim ] = (double) ubnd_out[ idim ] + 0.5; \
-         } \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-         if( varwgt ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  LINEAR_ND(X,Xtype,1,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  LINEAR_ND(X,Xtype,1,0,1,IntType,1) \
-               } else { \
-                  LINEAR_ND(X,Xtype,1,0,0,IntType,1) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  LINEAR_ND(X,Xtype,0,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  LINEAR_ND(X,Xtype,0,0,1,IntType,1) \
-               } else { \
-                  LINEAR_ND(X,Xtype,0,0,0,IntType,1) \
-               } \
-            } \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  LINEAR_ND(X,Xtype,1,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  LINEAR_ND(X,Xtype,1,0,1,IntType,0) \
-               } else { \
-                  LINEAR_ND(X,Xtype,1,0,0,IntType,0) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  LINEAR_ND(X,Xtype,0,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  LINEAR_ND(X,Xtype,0,0,1,IntType,0) \
-               } else { \
-                  LINEAR_ND(X,Xtype,0,0,0,IntType,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Free the workspace. */ \
-      dim = astFree( dim ); \
-      frac_hi = astFree( frac_hi ); \
-      frac_lo = astFree( frac_lo ); \
-      hi = astFree( hi ); \
-      lo = astFree( lo ); \
-      stride = astFree( stride ); \
-      wt = astFree( wt ); \
-      wtprod = astFree( wtprod ); \
-      xn_max = astFree( xn_max ); \
-      xn_min = astFree( xn_min ); \
-   } \
-\
-}
-
-
-
-
-
-
-#define LINEAR_1D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
-   for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-      off_in = offset[ point ]; \
-      in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-      if ( Usebad ) { \
-         bad = ( in_val == badval ); \
-         if ( Usevar || Varwgt ) { \
-            bad = bad || ( in_var[ off_in ] == badval ) \
-                      || ( in_var[ off_in ] <= 0.0 ); \
-         } \
-      } else { \
-         if ( Usevar || Varwgt ) { \
-            bad = ( in_var[ off_in ] <= 0.0 ); \
-         } else { \
-            bad = 0; \
-         } \
-      } \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the output grid. Also test if it is bad. */ \
-      x = coords[ 0 ][ point ]; \
-      bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-\
-/* If OK, obtain the indices along the output grid x dimension of the \
-   two adjacent output pixels which will receive contributions from the \
-   input pixel. Also obtain the fractional weight to be applied to each of \
-   these pixels. */ \
-      if ( !bad ) { \
-         lo_x = (int) floor( x ); \
-         hi_x = lo_x + 1; \
-         frac_lo_x = (double) hi_x - x; \
-         frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-         if( nused ) (*nused)++; \
-\
-/* Obtain the offset within the output array of the first pixel to be \
-   updated (the one with the smaller index). */ \
-         off_lo = lo_x - lbnd_out[ 0 ]; \
-\
-/* If we are using the input data variances as weights, calculate the \
-   weight, and scale the fractions of each input pixel by the weight. */ \
-         if( Varwgt ) { \
-            wgt = 1.0/in_var[ off_in ]; \
-            frac_lo_x *= wgt; \
-            frac_hi_x *= wgt; \
-         } \
-\
-/* For each of the two pixels which may be updated, test if the pixel index \
-   lies within the output grid. Where it does, update the output pixel \
-   with the required fraction of the input pixel value. */ \
-         if ( lo_x >= lbnd_out[ 0 ] ) { \
-            c = CONV(IntType,in_val*frac_lo_x); \
-            out[ off_lo ] += c; \
-            if( work ) work[ off_lo ] += frac_lo_x; \
-            if ( Usevar ) { \
-               out_var[ off_lo ] += CONV(IntType,in_var[ off_in ]*frac_lo_x*frac_lo_x); \
-            } else if ( Genvar && frac_lo_x != 0.0 ) { \
-               out_var[ off_lo ] += c*c/frac_lo_x; \
-               work[ off_lo + npix_out ] += frac_lo_x*frac_lo_x; \
-            } \
-         } \
-         if ( hi_x <= ubnd_out[ 0 ] ) { \
-            c = CONV(IntType,in_val*frac_hi_x); \
-            out[ off_lo + 1 ] += c; \
-            if( work ) work[ off_lo + 1 ] += frac_hi_x; \
-            if ( Usevar ) { \
-               out_var[ off_lo + 1 ] += CONV(IntType,in_var[ off_in ]*frac_hi_x*frac_hi_x); \
-            } else if( Genvar && frac_hi_x != 0.0 ) { \
-               out_var[ off_lo + 1 ] += c*c/frac_hi_x; \
-               work[ off_lo + 1 + npix_out ] += frac_hi_x*frac_hi_x; \
-            } \
-         } \
-      } \
-   }
-
-
-
-
-#define LINEAR_2D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
-   for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-      off_in = offset[ point ]; \
-      in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-      if ( Usebad ) { \
-         bad = ( in_val == badval ); \
-         if ( Usevar || Varwgt ) { \
-            bad = bad || ( in_var[ off_in ] == badval ) \
-                      || ( in_var[ off_in ] <= 0.0 ); \
-         } \
-      } else { \
-         if ( Usevar || Varwgt ) { \
-            bad = ( in_var[ off_in ] <= 0.0 ); \
-         } else { \
-            bad = 0; \
-         } \
-      } \
-\
-/* Obtain the x coordinate of the current point and test if it lies \
-   outside the output grid. Also test if it is bad. */ \
-      y = coords[ 1 ][ point ]; \
-      bad = bad || ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
-      if ( !bad ) { \
-\
-/* Similarly obtain and test the y coordinate. */ \
-         x = coords[ 0 ][ point ]; \
-         bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-         if ( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-            if( nused ) (*nused)++; \
-\
-/* If OK, obtain the indices along the output grid x dimension of the \
-   two adjacent pixels which recieve contributions from the input pixel. \
-   Also obtain the fractional weight to be applied to each of \
-   these pixels. */ \
-            lo_x = (int) floor( x ); \
-            hi_x = lo_x + 1; \
-            frac_lo_x = (double) hi_x - x; \
-            frac_hi_x = 1.0 - frac_lo_x; \
-\
-/* Repeat this process for the y dimension. */ \
-            lo_y = (int) floor( y ); \
-            hi_y = lo_y + 1; \
-            frac_lo_y = (double) hi_y - y; \
-            frac_hi_y = 1.0 - frac_lo_y; \
-\
-/* If we are using the input data variances as weights, calculate the \
-   weight, and scale the fractions of each input pixel by the weight. \
-   Since the product of two fractions is always used ot scale the input \
-   data values, we use the square root of the reciprocal of the variance \
-   as the weight (so that when the product of two fractions is taken, \
-   the square roots multiply together to give the required 1/variance \
-   weight).  */ \
-            if( Varwgt ) { \
-               wgt = 1.0/sqrt( in_var[ off_in ] ); \
-               frac_lo_x *= wgt; \
-               frac_hi_x *= wgt; \
-               frac_lo_y *= wgt; \
-               frac_hi_y *= wgt; \
-            } \
-\
-/* Obtain the offset within the output array of the first pixel to be \
-   updated (the one with the smaller index along both dimensions). */ \
-            off_lo = lo_x - lbnd_out[ 0 ] + ystride * ( lo_y - lbnd_out[ 1 ] ); \
-\
-/* For each of the four pixels which may be updated, test if the pixel indices \
-   lie within the output grid. Where they do, update the output pixel \
-   with the required fraction of the input pixel value. */ \
-            if ( lo_y >= lbnd_out[ 1 ] ) { \
-               if ( lo_x >= lbnd_out[ 0 ] ) { \
-                  f = frac_lo_x * frac_lo_y; \
-                  c = CONV(IntType,in_val*f); \
-                  out[ off_lo ] += c; \
-                  if( work ) work[ off_lo ] += f; \
-                  if ( Usevar ) { \
-                     out_var[ off_lo ] += CONV(IntType,in_var[ off_in ]*f*f); \
-                  } else if ( Genvar && f != 0.0 ) { \
-                     out_var[ off_lo ] += c*c/f; \
-                     work[ off_lo + npix_out ] += f*f; \
-                  } \
-               } \
-               if ( hi_x <= ubnd_out[ 0 ] ) { \
-                  f = frac_hi_x * frac_lo_y; \
-                  off = off_lo + 1; \
-                  c = CONV(IntType,in_val*f); \
-                  out[ off ] += c; \
-                  if( work ) work[ off ] += f; \
-                  if ( Usevar ) { \
-                     out_var[ off ] += CONV(IntType,in_var[ off_in ]*f*f); \
-                  } else if ( Genvar && f != 0.0 ) { \
-                     out_var[ off ] += c*c/f; \
-                     work[ off + npix_out ] += f*f; \
-                  } \
-               } \
-            } \
-            if ( hi_y <= ubnd_out[ 1 ] ) { \
-               if ( lo_x >= lbnd_out[ 0 ] ) { \
-                  f = frac_lo_x * frac_hi_y; \
-                  off = off_lo + ystride; \
-                  c = CONV(IntType,in_val*f); \
-                  out[ off ] += c; \
-                  if( work ) work[ off ] += f; \
-                  if ( Usevar ) { \
-                     out_var[ off ] += CONV(IntType,in_var[ off_in ]*f*f ); \
-                  } else if ( Genvar && f != 0.0 ) { \
-                     out_var[ off ] += c*c/f; \
-                     work[ off + npix_out ] += f*f; \
-                  } \
-               } \
-               if ( hi_x <= ubnd_out[ 0 ] ) { \
-                  f = frac_hi_x * frac_hi_y; \
-                  off = off_lo + ystride + 1; \
-                  c = CONV(IntType,in_val*f); \
-                  out[ off ] += c; \
-                  if( work ) work[ off ] += f; \
-                  if ( Usevar ) { \
-                     out_var[ off ] += CONV(IntType,in_var[ off_in ]*f*f); \
-                  } else if ( Genvar && f != 0.0 ) { \
-                     out_var[ off ] += c*c/f; \
-                     work[ off + npix_out ] += f*f; \
-                  } \
-               } \
-            } \
-         } \
-      } \
-   }
-
-
-#define LINEAR_ND(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
-   for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-      off_in = offset[ point ]; \
-      in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-      if ( Usebad ) { \
-         bad = ( in_val == badval ); \
-         if ( Usevar || Varwgt ) { \
-            bad = bad || ( in_var[ off_in ] == badval ) \
-                      || ( in_var[ off_in ] <= 0.0 ); \
-         } \
-      } else { \
-         if ( Usevar || Varwgt ) { \
-            bad = ( in_var[ off_in ] <= 0.0 ); \
-         } else { \
-            bad = 0; \
-         } \
-      } \
-\
-/* Initialise offsets into the output array. Then loop to obtain each \
-   coordinate associated with the current output point. */ \
-      if( !bad ) { \
-         off_out = 0; \
-         for ( idim = 0; idim < ndim_out; idim++ ) { \
-            xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the output grid.  Also test if \
-   it is bad. If either is true, the corresponding output pixel value \
-   will be bad, so give up on this point. */ \
-            bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
-                  ( xn == AST__BAD ); \
-            if ( bad ) break; \
-\
-/* Obtain the indices along the current dimension of the output grid of \
-   the two (usually adjacent) pixels which will be updated. If necessary, \
-   however, restrict each index to ensure it does not lie outside the \
-   input grid. Also calculate the fractional weight to be given to each \
-   pixel in order to divide the input value linearly between them. */ \
-            ixn = (int) floor( xn ); \
-            lo[ idim ] = MaxI( ixn, lbnd_out[ idim ], status ); \
-            hi[ idim ] = MinI( ixn + 1, ubnd_out[ idim ], status ); \
-            frac_lo[ idim ] = 1.0 - fabs( xn - (double) lo[ idim ] ); \
-            frac_hi[ idim ] = 1.0 - fabs( xn - (double) hi[ idim ] ); \
-\
-/* Store the lower index involved in spreading along each \
-   dimension and accumulate the offset from the start of the output \
-   array of the pixel which has these indices. */ \
-            dim[ idim ] = lo[ idim ]; \
-            off_out += stride[ idim ] * ( lo[ idim ] - lbnd_out[ idim ] ); \
-\
-/* Also store the fractional weight associated with the lower pixel \
-   along each dimension. */ \
-            wt[ idim ] = frac_lo[ idim ]; \
-         } \
-\
-/* If we are using the input data variances as weights, calculate the \
-   weight, and scale the fractions of each input pixel by the weight. */ \
-         if( Varwgt ) { \
-            wgt = pow( in_var[ off_in ], -1.0/(double)ndim_out ); \
-            for ( idim = 0; idim < ndim_out; idim++ ) { \
-               frac_lo[ idim ] *= wgt; \
-               frac_hi[ idim ] *= wgt; \
-               wt[ idim ] = frac_lo[ idim ]; \
-            } \
-         } \
-\
-/* If OK, increment the number of input pixels pasted into the output array. */ \
-         if ( !bad ) { \
-            if( nused ) (*nused)++; \
-\
-/* Loop over adjacent output pixels to divide up the input value. */ \
-            idim = ndim_out - 1; \
-            wtprod[ idim ] = 1.0; \
-            done = 0; \
-            do { \
-\
-/* Each pixel pixel to be updated has a total weight equal to the product \
-   of the weights which account for the displacement of its centre from \
-   the required position along each dimension. However, since we typically \
-   only change the index of one dimension at a time, we can avoid forming \
-   this product repeatedly by retaining an array of accumulated weight \
-   products for all higher dimensions. We need then only update the \
-   lower elements in this array, corresponding to those dimensions \
-   whose index has changed. We do this here, "idim" being the index of \
-   the most significant dimension to have changed. Note that on the \
-   first pass, all dimensions are considered changed, causing this \
-   array to be initialised. */ \
-               for ( ii = idim; ii >= 1; ii-- ) { \
-                  wtprod[ ii - 1 ] = wtprod[ ii ] * wt[ ii ]; \
-               } \
-\
-/* Update the relevent output pixel. The pixel weight is formed by including \
-   the weight factor for dimension zero, since this is not included in \
-   the "wtprod" array. */ \
-               f = wtprod[ 0 ] * wt[ 0 ]; \
-               c = CONV(IntType,in_val*f); \
-               out[ off_out ] += c; \
-               if( work ) work[ off_out ] += f; \
-               if ( Usevar ) { \
-                  out_var[ off_out ] += CONV(IntType,in_var[ off_in ]*f*f); \
-               } else if ( Genvar && f != 0.0 ) { \
-                  out_var[ off_out ] += c*c/f; \
-                  work[ off_out + npix_out ] += f*f; \
-               } \
-\
-/* Now update the indices, offset and weight factors to refer to the \
-   next output pixel to be updated. */ \
-               idim = 0; \
-               do { \
-\
-/* The first input dimension which still refers to the pixel with the \
-   lower of the two possible indices is switched to refer to the other \
-   pixel (with the higher index). The offset into the output array and \
-   the fractional weight factor for this dimension are also updated \
-   accordingly. */ \
-                  if ( dim[ idim ] != hi[ idim ] ) { \
-                     dim[ idim ] = hi[ idim ]; \
-                     off_out += stride[ idim ]; \
-                     wt[ idim ] = frac_hi[ idim ]; \
-                     break; \
-\
-/* Any earlier dimensions (referring to the higher index) are switched \
-   back to the lower index, if not already there, before going on to \
-   consider the next dimension. (This process is the same as \
-   incrementing a binary number and propagating overflows up through \
-   successive digits, except that dimensions where the "lo" and "hi" \
-   values are the same can only take one value.) The process stops at \
-   the first attempt to return the final dimension to the lower \
-   index. */ \
-                  } else { \
-                     if ( dim[ idim ] != lo[ idim ] ) { \
-                        dim[ idim ] = lo[ idim ]; \
-                        off_out -= stride[ idim ]; \
-                        wt[ idim ] = frac_lo[ idim ]; \
-                     } \
-                     done = ( ++idim == ndim_out ); \
-                  } \
-               } while ( !done ); \
-            } while ( !done ); \
-         } \
-      } \
-   }
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_SPREAD_LINEAR(LD,long double,0)
-#endif     
-MAKE_SPREAD_LINEAR(D,double,0)
-MAKE_SPREAD_LINEAR(F,float,0)
-MAKE_SPREAD_LINEAR(I,int,1)
-
-/* Undefine the macros used above. */
-#undef LINEAR_1D
-#undef LINEAR_2D
-#undef LINEAR_ND
-#undef MAKE_SPREAD_LINEAR
-
-/*
-*  Name:
-*     SpreadNearest<X>
-
-*  Purpose:
-*     Rebin a data grid, using the nearest-pixel spreading scheme.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void SpreadNearest<X>( int ndim_out,
-*                           const int *lbnd_out, const int *ubnd_out,
-*                           const <Xtype> *in, const <Xtype> *in_var,
-*                           int npoint, const int *offset, 
-*                           const double *const *coords, int flags, 
-*                           <Xtype> badval, int npix_out, <Xtype> *out, 
-*                           <Xtype> *out_var, double *work, int *nused ) 
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This is a set of functions which rebins a rectangular region of an 
-*     input grid of data (and, optionally, associated statistical variance
-*     values) so as to place them into a new output grid. Each input
-*     grid point may be mapped on to a position in the output grid in
-*     an arbitrary way. Where the positions given do not correspond
-*     with a pixel centre in the output grid, the spreading scheme
-*     used is simply to select the nearest pixel (i.e. the one whose
-*     bounds contain the supplied position).
-
-*  Parameters:
-*     ndim_out
-*        The number of dimensions in the output grid. This should be at
-*        least one.
-*     lbnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the output grid along each dimension.
-*     ubnd_out
-*        Pointer to an array of integers, with "ndim_out" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the output grid along each dimension.
-*
-*        Note that "lbnd_out" and "ubnd_out" together define the shape
-*        and size of the output grid, its extent along a particular
-*        (i'th) dimension being ubnd_out[i]-lbnd_out[i]+1 (assuming "i"
-*        is zero-based). They also define the output grid's coordinate
-*        system, with each pixel being of unit extent along each
-*        dimension with integral coordinate values at its centre.
-*     in
-*        Pointer to the array of data to be rebinned. The numerical type
-*        of these data should match the function used, as given by the
-*        suffix on the function name. Note that details of how the input 
-*        grid maps on to this array (e.g. the storage order, number of 
-*        dimensions, etc.) is arbitrary and is specified entirely by means 
-*        of the "offset" array. The "in" array should therefore contain 
-*        sufficient elements to accommodate the "offset" values supplied.  
-*        There is no requirement that all elements of the "in" array 
-*        should be rebinned, and any which are not addressed by the
-*        contents of the "offset" array will be ignored.
-*     in_var
-*        An optional pointer to a second array of positive numerical
-*        values (with the same size and type as the "in" array), which
-*        represent estimates of the statistical variance associated
-*        with each element of the "in" array. If this second array is
-*        given (along with the corresponding "out_var" array), then
-*        estimates of the variance of the resampled data will also be
-*        returned. It is addressed in exactly the same way (via the 
-*        "offset" array) as the "in" array. 
-*
-*        If no variance estimates are required, a NULL pointer should
-*        be given.
-*     npoint
-*        The number of input points which are to be rebinned.
-*     offset
-*        Pointer to an array of integers with "npoint" elements. For
-*        each input point, this array should contain the zero-based
-*        offset in the input array(s) (i.e. the "in" and, optionally, 
-*        the "in_var" arrays) from which the value to be rebinned should
-*        be obtained.
-*     coords
-*        An array of pointers to double, with "ndim_out" elements. 
-*        Element "coords[coord]" should point at the first element of 
-*        an array of double (with "npoint" elements) which contains the 
-*        values of coordinate number "coord" for each point being
-*        rebinned. The value of coordinate number "coord" for 
-*        rebinning point number "point" is therefore given by
-*        "coords[coord][point]" (assuming both indices are
-*        zero-based).  If any point has a coordinate value of AST__BAD
-*        associated with it, then the corresponding input data (and
-*        variance) value will be ignored.
-*     flags
-*        The bitwise OR of a set of flag values which control the
-*        operation of the function. These are chosend from:
-*
-*        - AST__USEBAD: indicates whether there are "bad" (i.e. missing) data 
-*        in the input array(s) which must be recognised.  If this flag is not 
-*        set, all input values are treated literally.
-*        - AST__GENVAR: Indicates that output variances should be generated 
-*        from the spread of values contributing to each output pixel.
-*        - AST__USEVAR: Indicates that output variances should be generated 
-*        by rebinning the input variances.
-*        - AST__VARWGT: Indicates that input variances should be used to
-*        create weights for the input data values.
-*
-*        Only one of AST__GENVAR and AST__USEVAR should be supplied.
-*     badval
-*        If the AST__USEBAD flag is set in the "flags" value (above),
-*        this parameter specifies the value which is used to identify
-*        bad data and/or variance values in the input array(s). Its
-*        numerical type must match that of the "in" (and "in_var")
-*        arrays. The same value will also be used to flag any output
-*        array elements for which resampled values could not be
-*        obtained.  The output arrays(s) may be flagged with this
-*        value whether or not the AST__USEBAD flag is set (the
-*        function return value indicates whether any such values have
-*        been produced).
-*     npix_out
-*        Number of pixels in output array.
-*     out
-*        Pointer to an array with the same data type as the "in"
-*        array, into which the rebinned data will be returned. The 
-*        storage order should be such that the index of the first grid
-*        dimension varies most rapidly and that of the final dimension 
-*        least rapidly (i.e. Fortran array storage order).
-*     out_var
-*        An optional pointer to an array with the same data type and
-*        size as the "out" array, into which variance estimates for
-*        the rebinned values may be returned. This array will only be
-*        used if the "in_var" array has been given. The values returned 
-*        are estimates of the statistical variance of the corresponding 
-*        values in the "out" array, on the assumption that all errors in 
-*        input grid values (in the "in" array) are statistically independent 
-*        and that their variance estimates (in the "in_var" array) may 
-*        simply be summed (with appropriate weighting factors).
-*
-*        If no output variance estimates are required, a NULL pointer
-*        should be given.
-*     work
-*        A pointer to an array with the same data type and size as the "out" 
-*        array which is used as work space. The values in the supplied
-*        array are incremented on exit by the sum of the weights used
-*        with each output pixel.
-*     nused
-*        An optional pointer to an int which will be incremented by the
-*        number of input values pasted into the output array. Ignored if NULL.
-
-*  Notes:
-*     - There is a separate function for each numerical type of
-*     gridded data, distinguished by replacing the <X> in the function
-*     name by the appropriate 1- or 2-character suffix.
-*/
-/* Define a macro to implement the function for a specific data type. */
-#define MAKE_SPREAD_NEAREST(X,Xtype,IntType) \
-static void SpreadNearest##X( int ndim_out, \
-                             const int *lbnd_out, const int *ubnd_out, \
-                             const Xtype *in, const Xtype *in_var, \
-                             int npoint, const int *offset, \
-                             const double *const *coords, int flags, \
-                             Xtype badval, int npix_out, Xtype *out, \
-                             Xtype *out_var, double *work, int *nused, int *status ) { \
-\
-/* Local Variables: */ \
-   Xtype c;                      /* Contribution to output value */ \
-   Xtype in_val;                 /* Input data value */ \
-   double *xn_max;               /* Pointer to upper limits array (n-d) */ \
-   double *xn_min;               /* Pointer to lower limits array (n-d) */ \
-   double cwgt;                  /* Product of input value and weight */ \
-   double wgt;                   /* Weight for input value */ \
-   double x;                     /* x coordinate value */ \
-   double xmax;                  /* x upper limit */ \
-   double xmin;                  /* x lower limit */ \
-   double xn;                    /* Coordinate value (n-d) */ \
-   double y;                     /* y coordinate value */ \
-   double ymax;                  /* y upper limit */ \
-   double ymin;                  /* y lower limit */ \
-   int *stride;                  /* Pointer to array of dimension strides */ \
-   int bad;                      /* Output pixel bad? */ \
-   int genvar;                   /* Generate output variances? */ \
-   int idim;                     /* Loop counter for dimensions */ \
-   int ix;                       /* Number of pixels offset in x direction */ \
-   int ixn;                      /* Number of pixels offset (n-d) */ \
-   int iy;                       /* Number of pixels offset in y direction */ \
-   int off_in;                   /* Pixel offset into input array */ \
-   int off_out;                  /* Pixel offset into output array */ \
-   int point;                    /* Loop counter for output points */ \
-   int s;                        /* Temporary variable for strides */ \
-   int usebad;                   /* Use "bad" input pixel values? */ \
-   int usevar;                   /* Process variance array? */ \
-   int varwgt;                   /* Use input variances as weights? */ \
-   int ystride;                  /* Stride along input grid y direction */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Determine if we are processing bad pixels or variances. */ \
-   usebad = flags & AST__USEBAD; \
-   usevar = 0; \
-   genvar = 0; \
-   if( flags & AST__GENVAR ) { \
-      genvar = out_var && work; \
-   } else if( flags & AST__USEVAR ) { \
-      usevar = in_var && out_var; \
-   } \
-   varwgt = ( flags & AST__VARWGT ) && in_var && work; \
-\
-/* Handle the 1-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   if ( ndim_out == 1 ) { \
-\
-/* Calculate the coordinate limits of the output array. */ \
-      xmin = (double) lbnd_out[ 0 ] - 0.5; \
-      xmax = (double) ubnd_out[ 0 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-      if( varwgt ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               NEAR_1D(X,Xtype,1,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               NEAR_1D(X,Xtype,1,0,1,IntType,1) \
-            } else { \
-               NEAR_1D(X,Xtype,1,0,0,IntType,1) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               NEAR_1D(X,Xtype,0,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               NEAR_1D(X,Xtype,0,0,1,IntType,1) \
-            } else { \
-               NEAR_1D(X,Xtype,0,0,0,IntType,1) \
-            } \
-         } \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               NEAR_1D(X,Xtype,1,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               NEAR_1D(X,Xtype,1,0,1,IntType,0) \
-            } else { \
-               NEAR_1D(X,Xtype,1,0,0,IntType,0) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               NEAR_1D(X,Xtype,0,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               NEAR_1D(X,Xtype,0,0,1,IntType,0) \
-            } else { \
-               NEAR_1D(X,Xtype,0,0,0,IntType,0) \
-            } \
-         } \
-      } \
-\
-/* Handle the 2-dimensional case optimally. */ \
-/* ---------------------------------------- */ \
-   } else if ( ndim_out == 2 ) { \
-\
-/* Calculate the stride along the y dimension of the output grid. */ \
-      ystride = ubnd_out[ 0 ] - lbnd_out[ 0 ] + 1; \
-\
-/* Calculate the coordinate limits of the output array in each \
-   dimension. */ \
-      xmin = (double) lbnd_out[ 0 ] - 0.5; \
-      xmax = (double) ubnd_out[ 0 ] + 0.5; \
-      ymin = (double) lbnd_out[ 1 ] - 0.5; \
-      ymax = (double) ubnd_out[ 1 ] + 0.5; \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-      if( varwgt ) { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               NEAR_2D(X,Xtype,1,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               NEAR_2D(X,Xtype,1,0,1,IntType,1) \
-            } else { \
-               NEAR_2D(X,Xtype,1,0,0,IntType,1) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               NEAR_2D(X,Xtype,0,1,0,IntType,1) \
-            } else if ( genvar ) { \
-               NEAR_2D(X,Xtype,0,0,1,IntType,1) \
-            } else { \
-               NEAR_2D(X,Xtype,0,0,0,IntType,1) \
-            } \
-         } \
-      } else { \
-         if ( usebad ) { \
-            if ( usevar ) { \
-               NEAR_2D(X,Xtype,1,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               NEAR_2D(X,Xtype,1,0,1,IntType,0) \
-            } else { \
-               NEAR_2D(X,Xtype,1,0,0,IntType,0) \
-            } \
-         } else { \
-            if ( usevar ) { \
-               NEAR_2D(X,Xtype,0,1,0,IntType,0) \
-            } else if ( genvar ) { \
-               NEAR_2D(X,Xtype,0,0,1,IntType,0) \
-            } else { \
-               NEAR_2D(X,Xtype,0,0,0,IntType,0) \
-            } \
-         } \
-      } \
-\
-/* Handle other numbers of dimensions. */ \
-/* ----------------------------------- */ \
-   } else { \
-\
-/* Allocate workspace. */ \
-      stride = astMalloc( sizeof( int ) * (size_t) ndim_out ); \
-      xn_max = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      xn_min = astMalloc( sizeof( double ) * (size_t) ndim_out ); \
-      if ( astOK ) { \
-\
-/* Calculate the stride along each dimension of the output grid. */ \
-         for ( s = 1, idim = 0; idim < ndim_out; idim++ ) { \
-            stride[ idim ] = s; \
-            s *= ubnd_out[ idim ] - lbnd_out[ idim ] + 1; \
-\
-/* Calculate the coordinate limits of the output grid in each \
-   dimension. */ \
-            xn_min[ idim ] = (double) lbnd_out[ idim ] - 0.5; \
-            xn_max[ idim ] = (double) ubnd_out[ idim ] + 0.5; \
-         } \
-\
-/* Identify eight cases, according to whether bad pixels and/or variances \
-   are being processed and/or used. In each case we assign constant values \
-   (0 or 1) to the "Usebad", "Usevar" and "Varwgt" flags so that code for \
-   handling bad pixels and variances can be eliminated by the compiler's \
-   optimisation system when not required. */ \
-         if( varwgt ) { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  NEAR_ND(X,Xtype,1,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  NEAR_ND(X,Xtype,1,0,1,IntType,1) \
-               } else { \
-                  NEAR_ND(X,Xtype,1,0,0,IntType,1) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  NEAR_ND(X,Xtype,0,1,0,IntType,1) \
-               } else if ( genvar ) { \
-                  NEAR_ND(X,Xtype,0,0,1,IntType,1) \
-               } else { \
-                  NEAR_ND(X,Xtype,0,0,0,IntType,1) \
-               } \
-            } \
-         } else { \
-            if ( usebad ) { \
-               if ( usevar ) { \
-                  NEAR_ND(X,Xtype,1,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  NEAR_ND(X,Xtype,1,0,1,IntType,0) \
-               } else { \
-                  NEAR_ND(X,Xtype,1,0,0,IntType,0) \
-               } \
-            } else { \
-               if ( usevar ) { \
-                  NEAR_ND(X,Xtype,0,1,0,IntType,0) \
-               } else if ( genvar ) { \
-                  NEAR_ND(X,Xtype,0,0,1,IntType,0) \
-               } else { \
-                  NEAR_ND(X,Xtype,0,0,0,IntType,0) \
-               } \
-            } \
-         } \
-      } \
-\
-/* Free the workspace. */ \
-      stride = astFree( stride ); \
-      xn_max = astFree( xn_max ); \
-      xn_min = astFree( xn_min ); \
-   } \
-\
-}
-
-
-
-
-
-#define NEAR_1D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
-            for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-               off_in = offset[ point ]; \
-               in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-               if ( Usebad ) { \
-                  bad = ( in_val == badval ); \
-                  if ( Usevar || Varwgt ) { \
-                     bad = bad || ( in_var[ off_in ] == badval ) \
-                               || ( in_var[ off_in ] <= 0.0 ); \
-                  } \
-               } else { \
-                  if ( Usevar || Varwgt ) { \
-                     bad = ( in_var[ off_in ] <= 0.0 ); \
-                  } else { \
-                     bad = 0; \
-                  } \
-               } \
-\
-/* Obtain the output x coordinate corresponding to the centre of the \
-   current input pixel and test if it lies outside the output grid, or \
-   is bad. */ \
-               x = coords[ 0 ][ point ]; \
-               bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-               if ( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-                  if( nused ) (*nused)++; \
-\
-/* If not, then obtain the offset within the output grid of the pixel \
-   which contains the current input point. */ \
-                  off_out = (int) floor( x + 0.5 ) - lbnd_out[ 0 ]; \
-\
-/* Note the input data value. */ \
-                  c = CONV(IntType,in_val); \
-\
-/* If we are using the input data variances as weights, calculate the \
-   weight. */ \
-                  if( Varwgt ) { \
-                     wgt = 1.0/in_var[ off_in ]; \
-\
-/* Increment the value of this output pixel by the weighted input pixel \
-   value, and increment the sum of the weights. */ \
-                     cwgt = c*wgt; \
-                     out[ off_out ] += CONV(IntType, cwgt ); \
-                     work[ off_out ] += wgt; \
-\
-/* If output variances are being calculated on the basis of the input \
-   variances, then we also store the sum of the weights in "out_var". */ \
-                     if( Usevar ) { \
-                        out_var[ off_out ] += CONV(IntType,wgt); \
-\
-/* If output variances are being calculated on the basis of the spread of \
-   input values, we need the sum of the squared weighted data values, the \
-   sum of the weights (already in the first half of the "work" array), and \
-   the sum of the squared weights. */ \
-                     } else if( Genvar ) { \
-                        out_var[ off_out ] += CONV(IntType,c*cwgt); \
-                        work[ off_out + npix_out ] += wgt*wgt; \
-                     } \
-\
-/* Now deal with cases where we are not using the input data varainces as \
-   weights. */ \
-                  } else { \
-\
-/* Increment the value of this output pixel by the input pixel value, and \
-   increment the sum of the weights by 1. */ \
-                     out[ off_out ] += c; \
-                     if( work ) work[ off_out ] += 1.0; \
-\
-/* If output variances are being calculated on the basis of the input \
-   variances, then we increment the variance of this output pixel by the \
-   variance of the input pixel. */ \
-                     if ( Usevar ) { \
-                        out_var[ off_out ] += CONV(IntType,in_var[ off_in ]); \
-\
-/* If output variances are being calculated on the basis of the spread of \
-   input values, we need the sum of the squared data values, and the number \
-   of values summed. */ \
-                     } else if( Genvar ) { \
-                        out_var[ off_out ] += c*c; \
-                        work[ off_out + npix_out ] += 1.0; \
-                     } \
-                  } \
-               } \
-            }
-
-
-
-
-
-
-#define NEAR_2D(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
-            for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-               off_in = offset[ point ]; \
-               in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad (or zero). */ \
-               if ( Usebad ) { \
-                  bad = ( in_val == badval ); \
-                  if ( Usevar || Varwgt ) { \
-                     bad = bad || ( in_var[ off_in ] == badval ) \
-                               || ( in_var[ off_in ] <= 0.0 ); \
-                  } \
-               } else { \
-                  if ( Usevar || Varwgt ) { \
-                     bad = ( in_var[ off_in ] <= 0.0 ); \
-                  } else { \
-                     bad = 0; \
-                  } \
-               } \
-\
-/* Obtain the output y coordinate corresponding to the centre of the \
-   current input pixel and test if it lies outside the output grid, or \
-   is bad. */ \
-               y = coords[ 1 ][ point ]; \
-               bad = bad || ( y < ymin ) || ( y >= ymax ) || ( y == AST__BAD ); \
-               if ( !bad ) { \
-\
-/* Obtain the output x coordinate corresponding to the centre of the \
-   current input pixel and test if it lies outside the output grid, or \
-   is bad. */ \
-                  x = coords[ 0 ][ point ]; \
-                  bad = bad || ( x < xmin ) || ( x >= xmax ) || ( x == AST__BAD ); \
-                  if ( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-                     if( nused ) (*nused)++; \
-\
-/* Obtain the offsets along each output grid dimension of the output \
-   pixel which is to receive the input pixel value. */ \
-                     ix = (int) floor( x + 0.5 ) - lbnd_out[ 0 ]; \
-                     iy = (int) floor( y + 0.5 ) - lbnd_out[ 1 ]; \
-\
-/* Calculate this pixel's offset from the start of the output array. */ \
-                     off_out = ix + ystride * iy; \
-\
-/* Note the input data value. */ \
-                     c = CONV(IntType,in_val); \
-\
-/* If we are using the input data variances as weights, calculate the \
-   weight. */ \
-                     if( Varwgt ) { \
-                        wgt = 1.0/in_var[ off_in ]; \
-\
-/* Increment the value of this output pixel by the weighted input pixel \
-   value, and increment the sum of the weights. */ \
-                        cwgt = c*wgt; \
-                        out[ off_out ] += CONV(IntType, cwgt ); \
-                        work[ off_out ] += wgt; \
-\
-/* If output variances are being calculated on the basis of the input \
-   variances, then we also store the sum of the weights in "out_var". */ \
-                        if( Usevar ) { \
-                           out_var[ off_out ] += CONV(IntType,wgt); \
-\
-/* If output variances are being calculated on the basis of the spread of \
-   input values, we need the sum of the squared weighted data values, the \
-   sum of the weights (already in the first half of the "work" array), and \
-   the sum of the squared weights. */ \
-                        } else if( Genvar ) { \
-                           out_var[ off_out ] += CONV(IntType,c*cwgt); \
-                           work[ off_out + npix_out ] += wgt*wgt; \
-                        } \
-\
-/* Now deal with cases where we are not using the input data varainces as \
-   weights. */ \
-                     } else { \
-\
-/* Increment the value of this output pixel by the value of the input pixel. */ \
-                        out[ off_out ] += c; \
-                        if( work ) work[ off_out ] += 1.0; \
-\
-/* If required, also increment the variance of this output pixel by the \
-   variance of the input pixel. */ \
-                        if ( Usevar ) { \
-                           out_var[ off_out ] += CONV(IntType,in_var[ off_in ]); \
-\
-/* Alternatively, if generating output variances from the spread of \
-   input values, form the required sum.*/ \
-                        } else if( Genvar ) { \
-                           out_var[ off_out ] += c*c; \
-                           work[ off_out + npix_out ] += 1.0; \
-                        } \
-                     } \
-                  } \
-               } \
-            }
-
-
-
-#define NEAR_ND(X,Xtype,Usebad,Usevar,Genvar,IntType,Varwgt) \
-\
-/* Loop round all input points which are to be rebinned. */ \
-            for( point = 0; point < npoint; point++ ) { \
-\
-/* Obtain the input data value which is to be added into the output array. */ \
-               off_in = offset[ point ]; \
-               in_val = in[ off_in ]; \
-\
-/* If necessary, test if the input data value or variance is bad. */ \
-               if ( Usebad ) { \
-                  bad = ( in_val == badval ); \
-                  if ( Usevar || Varwgt ) { \
-                     bad = bad || ( in_var[ off_in ] == badval ) \
-                               || ( in_var[ off_in ] <= 0.0 ); \
-                  } \
-               } else { \
-                  if ( Usevar || Varwgt ) { \
-                     bad = ( in_var[ off_in ] <= 0.0 ); \
-                  } else { \
-                     bad = 0; \
-                  } \
-               } \
-\
-               if( !bad ) { \
-\
-/* Initialise the offset into the output array. Then loop to obtain \
-   each coordinate associated with the current output point. */ \
-                  off_out = 0; \
-                  for ( idim = 0; idim < ndim_out; idim++ ) { \
-                     xn = coords[ idim ][ point ]; \
-\
-/* Test if the coordinate lies outside the output grid, or is bad. If \
-   either is true, the corresponding input pixel value will be ignored, \
-   so give up on this point. */ \
-                     bad = ( xn < xn_min[ idim ] ) || ( xn >= xn_max[ idim ] ) || \
-                           ( xn == AST__BAD ); \
-                     if ( bad ) { \
-                         break; \
-                     } \
-\
-/* Obtain the offset along the current output grid dimension of the \
-   output pixel which is to receive the input pixel value. */ \
-                     ixn = (int) floor( xn + 0.5 ) - lbnd_out[ idim ]; \
-\
-/* Accumulate this pixel's offset from the start of the output array. */ \
-                     off_out += ixn * stride[ idim ]; \
-                  } \
-\
-                  if( !bad ) { \
-\
-/* Increment the number of input pixels pasted into the output array. */ \
-                     if( nused ) (*nused)++; \
-\
-/* Note the input data value. */ \
-                     c = CONV(IntType,in_val); \
-\
-/* If we are using the input data variances as weights, calculate the \
-   weight. */ \
-                     if( Varwgt ) { \
-                        wgt = 1.0/in_var[ off_in ]; \
-\
-/* Increment the value of this output pixel by the weighted input pixel \
-   value, and increment the sum of the weights. */ \
-                        cwgt = c*wgt; \
-                        out[ off_out ] += CONV(IntType, cwgt ); \
-                        work[ off_out ] += wgt; \
-\
-/* If output variances are being calculated on the basis of the input \
-   variances, then we also store the sum of the weights in "out_var". */ \
-                        if( Usevar ) { \
-                           out_var[ off_out ] += CONV(IntType,wgt); \
-\
-/* If output variances are being calculated on the basis of the spread of \
-   input values, we need the sum of the squared weighted data values, the \
-   sum of the weights (already in the first half of the "work" array), and \
-   the sum of the squared weights. */ \
-                        } else if( Genvar ) { \
-                           out_var[ off_out ] += CONV(IntType,c*cwgt); \
-                           work[ off_out + npix_out ] += wgt*wgt; \
-                        } \
-\
-/* Now deal with cases where we are not using the input data varainces as \
-   weights. */ \
-                     } else { \
-\
-/* Increment the value of this output pixel by the value of the input pixel. */ \
-                        out[ off_out ] += c; \
-                        if( work ) work[ off_out ] += 1.0; \
-\
-/* If required, also increment the variance of this output pixel by the \
-   variance of the input pixel. */ \
-                        if ( Usevar ) { \
-                           out_var[ off_out ] += CONV(IntType,in_var[ off_in ]); \
-\
-/* Alternatively, if generating output variances from the spread of \
-   input values, form the required sum.*/ \
-                        } else if( Genvar ) { \
-                           out_var[ off_out ] += c*c; \
-                           work[ off_out + npix_out ] += 1.0; \
-                        } \
-                     } \
-                  } \
-               } \
-            }
-
-
-
-
-
-
-/* Expand the main macro above to generate a function for each
-   required signed data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_SPREAD_NEAREST(LD,long double,0)
-#endif
-
-MAKE_SPREAD_NEAREST(D,double,0)
-MAKE_SPREAD_NEAREST(F,float,0)
-MAKE_SPREAD_NEAREST(I,int,1)
-
-/* Undefine the macros used above. */
-#undef NEAR_ND
-#undef NEAR_2D
-#undef NEAR_1D
-#undef MAKE_SPREAD_NEAREST
-
-
-
-
-
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Mapping member function (over-rides the astTestAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Mapping's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *this;             /* Pointer to the Mapping structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Mapping structure. */
-   this = (AstMapping *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Invert. */
-/* ------- */
-   if ( !strcmp( attrib, "invert" ) ) {
-      result = astTestInvert( this );
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      result = astTestReport( this );
-
-/* If the name is not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then return
-   zero. */
-   } else if ( !strcmp( attrib, "nin" ) ||
-        !strcmp( attrib, "islinear" ) ||
-        !strcmp( attrib, "issimple" ) ||
-        !strcmp( attrib, "nout" ) ||
-        !strcmp( attrib, "tranforward" ) ||
-        !strcmp( attrib, "traninverse" ) ) {
-      result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static void Tran1( AstMapping *this, int npoint, const double xin[],
-                   int forward, double xout[], int *status ) {
-/*
-*++
-*  Name:
-c     astTran1
-f     AST_TRAN1
-
-*  Purpose:
-*     Transform 1-dimensional coordinates.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astTran1( AstMapping *this, int npoint, const double xin[],
-c                    int forward, double xout[] )
-f     CALL AST_TRAN1( THIS, NPOINT, XIN, FORWARD, XOUT, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function applies a Mapping to transform the coordinates of
-f     This routine applies a Mapping to transform the coordinates of
-*     a set of points in one dimension.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping to be applied.
-c     npoint
-f     NPOINT = INTEGER (Given)
-*        The number of points to be transformed.
-c     xin
-f     XIN( NPOINT ) = DOUBLE PRECISION (Given)
-c        An array of "npoint" coordinate values for the input
-f        An array of coordinate values for the input
-*        (untransformed) points.
-c     forward
-f     FORWARD = LOGICAL (Given)
-c        A non-zero value indicates that the Mapping's forward
-c        coordinate transformation is to be applied, while a zero
-c        value indicates that the inverse transformation should be
-c        used.
-f        A .TRUE. value indicates that the Mapping's forward
-f        coordinate transformation is to be applied, while a .FALSE.
-f        value indicates that the inverse transformation should be
-f        used.
-c     xout
-f     XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-c        An array (with "npoint" elements) into which the
-f        An array into which the
-*        coordinates of the output (transformed) points will be written.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - The Mapping supplied must have the value 1 for both its Nin
-*     and Nout attributes.
-*--
-*/
-
-/* Local Variables: */
-   AstPointSet *in_points;       /* Pointer to input PointSet */
-   AstPointSet *out_points;      /* Pointer to output PointSet */
-   const double *in_ptr[ 1 ];    /* Array of input data pointers */
-   double *out_ptr[ 1 ];         /* Array of output data pointers */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the Mapping and numbers of points/coordinates. */
-   ValidateMapping( this, forward, npoint, 1, 1, "astTran1", status );
-
-/* Set up pointers to the input and output coordinate arrays. */
-   if ( astOK ) {
-      in_ptr[ 0 ] = xin;
-      out_ptr[ 0 ] = xout;
-
-/* Create PointSets to describe the input and output points. */
-      in_points = astPointSet( npoint, 1, "", status );
-      out_points = astPointSet( npoint, 1, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
-   explicitly remove the "const" qualifier from the input data here,
-   although they will not be modified).  */
-      astSetPoints( in_points, (double **) in_ptr );
-      astSetPoints( out_points, out_ptr );
-
-/* Apply the required transformation to the coordinates. */
-      (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
-   Mapping has had on the coordinates. */
-      if ( astGetReport( this ) ) astReportPoints( this, forward,
-                                                   in_points, out_points );
-
-/* Delete the two PointSets. */
-      in_points = astDelete( in_points );
-      out_points = astDelete( out_points );
-   }
-}
-
-static void Tran2( AstMapping *this,
-                   int npoint, const double xin[], const double yin[],
-                   int forward, double xout[], double yout[], int *status ) {
-/*
-*++
-*  Name:
-c     astTran2
-f     AST_TRAN2
-
-*  Purpose:
-*     Transform 2-dimensional coordinates.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astTran2( AstMapping *this,
-c                    int npoint, const double xin[], const double yin[],
-c                    int forward, double xout[], double yout[] )
-f     CALL AST_TRAN2( THIS, NPOINT, XIN, YIN, FORWARD, XOUT, YOUT, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function applies a Mapping to transform the coordinates of
-f     This routine applies a Mapping to transform the coordinates of
-*     a set of points in two dimensions.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping to be applied.
-c     npoint
-f     NPOINT = INTEGER (Given)
-*        The number of points to be transformed.
-c     xin
-f     XIN( NPOINT ) = DOUBLE PRECISION (Given)
-c        An array of "npoint" X-coordinate values for the input
-f        An array of X-coordinate values for the input
-*        (untransformed) points.
-c     yin
-f     YIN( NPOINT ) = DOUBLE PRECISION (Given)
-c        An array of "npoint" Y-coordinate values for the input
-f        An array of Y-coordinate values for the input
-*        (untransformed) points.
-c     forward
-f     FORWARD = LOGICAL (Given)
-c        A non-zero value indicates that the Mapping's forward
-c        coordinate transformation is to be applied, while a zero
-c        value indicates that the inverse transformation should be
-c        used.
-f        A .TRUE. value indicates that the Mapping's forward
-f        coordinate transformation is to be applied, while a .FALSE.
-f        value indicates that the inverse transformation should be
-f        used.
-c     xout
-f     XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-c        An array (with "npoint" elements) into which the
-f        An array into which the
-*        X-coordinates of the output (transformed) points will be written.
-c     yout
-f     YOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-c        An array (with "npoint" elements) into which the
-f        An array into which the
-*        Y-coordinates of the output (transformed) points will be written.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - The Mapping supplied must have the value 2 for both its Nin
-*     and Nout attributes.
-*--
-*/
-
-/* Local Variables: */
-   AstPointSet *in_points;       /* Pointer to input PointSet */
-   AstPointSet *out_points;      /* Pointer to output PointSet */
-   const double *in_ptr[ 2 ];    /* Array of input data pointers */
-   double *out_ptr[ 2 ];         /* Array of output data pointers */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the Mapping and the numbers of points/coordinates. */
-   ValidateMapping( this, forward, npoint, 2, 2, "astTran2", status );
-
-/* Set up pointers to the input and output coordinate arrays. */
-   if ( astOK ) {
-      in_ptr[ 0 ] = xin;
-      in_ptr[ 1 ] = yin;
-      out_ptr[ 0 ] = xout;
-      out_ptr[ 1 ] = yout;
-
-/* Create PointSets to describe the input and output points. */
-      in_points = astPointSet( npoint, 2, "", status );
-      out_points = astPointSet( npoint, 2, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
-   explicitly remove the "const" qualifier from the input data here,
-   although they will not be modified).  */
-      astSetPoints( in_points, (double **) in_ptr );
-      astSetPoints( out_points, out_ptr );
-
-/* Apply the required transformation to the coordinates. */
-      (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
-   Mapping has had on the coordinates. */
-      if ( astGetReport( this ) ) astReportPoints( this, forward,
-                                                   in_points, out_points );
-
-/* Delete the two PointSets. */
-      in_points = astDelete( in_points );
-      out_points = astDelete( out_points );
-   }
-}
-
-static void TranGrid( AstMapping *this, int ncoord_in, const int lbnd[], 
-                      const int ubnd[], double tol, int maxpix, int forward, 
-                      int ncoord_out, int outdim, double *out, int *status ) {
-/*
-*++
-*  Name:
-c     astTranGrid 
-f     AST_TRANGRID
-
-*  Purpose:
-*     Transform a grid of positions
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astTranGrid( AstMapping *this, int ncoord_in,
-c                       const int lbnd[], const int ubnd[],
-c                       double tol, int maxpix, int forward,
-c                       int ncoord_out, int outdim, double *out );
-f     CALL AST_TRANGRID( THIS, NCOORD_IN, LBND, UBND, TOL, MAXPIX, 
-f                        FORWARD, NCOORD_OUT, OUTDIM, OUT, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function uses the supplied Mapping to transforms a regular square 
-*     grid of points covering a specified box. It attempts to do this
-*     quickly by first approximating the Mapping with a linear transformation 
-*     applied over the whole region of the input grid which is being used. 
-*     If this proves to be insufficiently accurate, the input region is 
-*     sub-divided into two along its largest dimension and the process is 
-*     repeated within each of the resulting sub-regions. This process of
-*     sub-division continues until a sufficiently good linear approximation 
-*     is found, or the region to which it is being applied becomes too small 
-*     (in which case the original Mapping is used directly).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping to be applied.
-c     ncoord_in
-f     NCOORD_IN = INTEGER (Given)
-*        The number of coordinates being supplied for each box corner
-*        (i.e. the number of dimensions of the space in which the
-*        input points reside).
-c     lbnd
-f     LBND( NCOORD_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ncoord_in" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c     ubnd
-f     UBND( NCOORD_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ncoord_in" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd" and "ubnd" together define the shape
-f        Note that LBND and UBND together define the shape
-*        and size of the input grid, its extent along a particular
-c        (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-c        index "j" to be zero-based). They also define
-f        (J'th) dimension being UBND(J)-LBND(J)+1. They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-c     tol
-f     TOL = DOUBLE PRECISION (Given)
-*        The maximum tolerable geometrical distortion which may be
-*        introduced as a result of approximating non-linear Mappings
-*        by a set of piece-wise linear transformations. This should be
-*        expressed as a displacement within the output coordinate system
-*        of the Mapping.
-*
-*        If piece-wise linear approximation is not required, a value
-*        of zero may be given. This will ensure that the Mapping is
-*        used without any approximation, but may increase execution
-*        time.
-*        
-*        If the value is too high, discontinuities between the linear
-*        approximations used in adjacent panel will be higher. If this 
-*        is a problem, reduce the tolerance value used.
-c     maxpix
-f     MAXPIX = INTEGER (Given)
-*        A value which specifies an initial scale size (in input grid points) 
-*        for the adaptive algorithm which approximates non-linear Mappings
-*        with piece-wise linear transformations. Normally, this should
-*        be a large value (larger than any dimension of the region of
-*        the input grid being used). In this case, a first attempt to
-*        approximate the Mapping by a linear transformation will be
-*        made over the entire input region.
-*
-*        If a smaller value is used, the input region will first be
-c        divided into sub-regions whose size does not exceed "maxpix"
-f        divided into sub-regions whose size does not exceed MAXPIX
-*        grid points in any dimension. Only at this point will attempts
-*        at approximation commence.
-*
-*        This value may occasionally be useful in preventing false
-*        convergence of the adaptive algorithm in cases where the
-*        Mapping appears approximately linear on large scales, but has
-*        irregularities (e.g. holes) on smaller scales. A value of,
-*        say, 50 to 100 grid points can also be employed as a safeguard 
-*        in general-purpose software, since the effect on performance is
-*        minimal.
-*
-*        If too small a value is given, it will have the effect of
-*        inhibiting linear approximation altogether (equivalent to
-c        setting "tol" to zero). Although this may degrade
-f        setting TOL to zero). Although this may degrade
-*        performance, accurate results will still be obtained.
-c     forward
-f     FORWARD = LOGICAL (Given)
-c        A non-zero value indicates that the Mapping's forward
-c        coordinate transformation is to be applied, while a zero
-c        value indicates that the inverse transformation should be
-c        used.
-f        A .TRUE. value indicates that the Mapping's forward
-f        coordinate transformation is to be applied, while a .FALSE.
-f        value indicates that the inverse transformation should be
-f        used.
-c     ncoord_out
-f     NCOORD_OUT = INTEGER (Given)
-*        The number of coordinates being generated by the Mapping for
-*        each output point (i.e. the number of dimensions of the
-*        space in which the output points reside). This need not be
-c        the same as "ncoord_in".
-f        the same as NCOORD_IN.
-c     outdim
-f     OUTDIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "out"
-f        The number of elements along the first dimension of the OUT
-*        array (which will contain the output coordinates). The value
-*        given should not be less than the number of points in the grid.
-c     out
-f     OUT( OUTDIM, NCOORD_OUT ) = DOUBLE PRECISION (Returned)
-c        The address of the first element in a 2-dimensional array of 
-c        shape "[ncoord_out][outdim]", into
-c        which the coordinates of the output (transformed) points will
-c        be written. These will be stored such that the value of
-c        coordinate number "coord" for output point number "point"
-c        will be found in element "out[coord][point]".
-f        An array into which the coordinates of the output
-f        (transformed) points will be written. These will be stored
-f        such that the value of coordinate number COORD for output
-f        point number POINT will be found in element OUT(POINT,COORD).
-*        The points are ordered such that the first axis of the input
-*        grid changes most rapidly. For example, if the input grid is 
-*        2-dimensional and extends from (2,-1) to (3,1), the output
-*        points will be stored in the order (2,-1), (3, -1), (2,0), (3,0),
-*        (2,1), (3,1).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - If the forward coordinate transformation is being applied, the
-c     Mapping supplied must have the value of "ncoord_in" for its Nin
-c     attribute and the value of "ncoord_out" for its Nout attribute. If
-c     the inverse transformation is being applied, these values should
-c     be reversed.
-f     - If the forward coordinate transformation is being applied, the
-f     Mapping supplied must have the value of NCOORD_IN for its Nin
-f     attribute and the value of NCOORD_OUT for its Nout attribute. If
-f     the inverse transformation is being applied, these values should
-f     be reversed.
-*--
-*/
-
-/* Local Variables: */ 
-   astDECLARE_GLOBALS            /* Thread-specific data */ 
-   AstMapping *simple;           /* Pointer to simplified Mapping */ 
-   double **out_ptr;             /* Pointer to array of output data pointers */
-   int coord;                    /* Loop counter for coordinates */
-   int idim;                     /* Loop counter for coordinate dimensions */ 
-   int npoint;                   /* Number of points in the grid */ 
-
-/* Check the global error status. */ 
-   if ( !astOK ) return; 
-
-/* Get a pointer to a structure holding thread-specific global data values */
-   astGET_GLOBALS(this);
-
-/* Calculate the number of points in the grid, and check that the lower and 
-   upper bounds of the input grid are consistent. Report an error if any 
-   pair is not. */ 
-   npoint = 1;
-   for ( idim = 0; idim < ncoord_in; idim++ ) { 
-      if ( lbnd[ idim ] > ubnd[ idim ] ) { 
-         astError( AST__GBDIN, "astTranGrid(%s): Lower bound of " 
-                   "input grid (%d) exceeds corresponding upper bound " 
-                   "(%d).", status, astGetClass( this ), 
-                   lbnd[ idim ], ubnd[ idim ] ); 
-         astError( AST__GBDIN, "Error in input dimension %d.", status, 
-                   idim + 1 ); 
-         break; 
-      } else {
-         npoint *= ubnd[ idim ] - lbnd[ idim ] + 1; 
-      }
-   } 
-
-/* Validate the mapping and numbers of points/coordinates. */
-   ValidateMapping( this, forward, npoint, ncoord_in, ncoord_out,
-                    "astTranGrid", status );
-
-/* Check that the positional accuracy tolerance supplied is valid and 
-   report an error if necessary. */ 
-   if ( astOK && ( tol < 0.0 ) ) { 
-      astError( AST__PATIN, "astTranGrid(%s): Invalid positional " 
-                "accuracy tolerance (%.*g pixel).", status, 
-                astGetClass( this ), DBL_DIG, tol ); 
-      astError( AST__PATIN, "This value should not be less than zero." , status); 
-   } 
-
-/* Check that the initial scale size in grid points supplied is valid and 
-   report an error if necessary. */ 
-   if ( astOK && ( maxpix < 0 ) ) { 
-      astError( AST__SSPIN, "astTranGrid(%s): Invalid initial scale " 
-                "size in grid points (%d).", status, astGetClass( this ), maxpix ); 
-      astError( AST__SSPIN, "This value should not be less than zero." , status); 
-   } 
-
-/* Validate the output array dimension argument. */
-   if ( astOK && ( outdim < npoint ) ) {
-      astError( AST__DIMIN, "astTranGrid(%s): The output array dimension value "
-                "(%d) is invalid.", status, astGetClass( this ), outdim );
-      astError( AST__DIMIN, "This should not be less than the number of "
-                "grid points being transformed (%d).", status, npoint );
-   }
-
-/* If there are sufficient pixels to make it worthwhile, simplify the 
-   Mapping supplied to improve performance. Otherwise, just clone the 
-   Mapping pointer. Note we save a pointer to the original Mapping so 
-   that lower-level functions can use it if they need to report an error. */ 
-   simple = NULL; 
-   unsimplified_mapping = this; 
-   if ( astOK ) { 
-      if ( npoint > 1024 ) { 
-         simple = astSimplify( this ); 
-
-/* Report an error if the required transformation of this simplified 
-   Mapping is not defined. */ 
-         if( astOK ) {
-            if ( forward && !astGetTranForward( simple ) ) { 
-               astError( AST__TRNND, "astTranGrid(%s): A forward coordinate " 
-                         "transformation is not defined by the %s supplied.", status, 
-                         astGetClass( unsimplified_mapping ), 
-                         astGetClass( unsimplified_mapping ) ); 
-            } else if ( !forward && !astGetTranInverse( simple ) ) { 
-               astError( AST__TRNND, "astTranGrid(%s): An inverse coordinate " 
-                         "transformation is not defined by the %s supplied.", status, 
-                         astGetClass( unsimplified_mapping ), 
-                         astGetClass( unsimplified_mapping ) ); 
-            }
-         } 
-
-      } else { 
-         simple = astClone( this ); 
-      } 
-
-/* Allocate memory to hold the array of output data pointers. */
-      out_ptr = astMalloc( sizeof( double * ) * (size_t) ncoord_out );
-
-/* Initialise the output data pointers to point into the "out" array. */
-      if ( astOK ) {
-         for ( coord = 0; coord < ncoord_out; coord++ ) {
-            out_ptr[ coord ] = out + coord * outdim;
-         }
-
-/* If required, temporarily invert the Mapping. */
-         if( !forward ) astInvert( simple );
-
-/* Perform the transformation. */
-         TranGridAdaptively( simple, ncoord_in, lbnd, ubnd, lbnd, ubnd, tol, 
-                             maxpix, ncoord_out, out_ptr, status );
-
-/* If required, uninvert the Mapping. */
-         if( !forward ) astInvert( simple );
-
-      }
-
-/* Free the memory used for the data pointers. */
-      out_ptr = astFree( out_ptr );
-
-/* Annul the pointer to the simplified/cloned Mapping. */ 
-      simple = astAnnul( simple ); 
-   }
-}
-
-static void TranGridAdaptively( AstMapping *this, int ncoord_in, 
-                                const int *lbnd_in, const int *ubnd_in,
-                                const int lbnd[], const int ubnd[], 
-                                double tol, int maxpix, int ncoord_out, 
-                                double *out[], int *status ){
-/*
-*  Name:
-*     TranGridAdaptively
-
-*  Purpose:
-*     Transform grid positions adaptively.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void TranGridAdaptively( AstMapping *this, int ncoord_in, 
-*                              const int *lbnd_in, const int *ubnd_in,
-*                              const int lbnd[], const int ubnd[], 
-*                              double tol, int maxpix, int ncoord_out, 
-*                              double *out[] )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function transforms grid points within a specified section of a 
-*     rectangular grid (with any number of dimensions) using the forward
-*     transformation of the specified Mapping.
-*
-*     This function is very similar to TranGridWithBlocking and TranGridSection
-*     which lie below it in the calling hierarchy. However, this function 
-*     also attempts to adapt to the Mapping supplied and to sub-divide the 
-*     section being transformed into smaller sections within which a linear 
-*     approximation to the Mapping may be used.  This reduces the number of 
-*     Mapping evaluations, thereby improving efficiency particularly when
-*     complicated Mappings are involved.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied. The forward transformation
-*        is used.
-*     ncoord_in
-*        The number of coordinates being supplied for each box corner
-*        (i.e. the number of dimensions of the space in which the
-*        input points reside).
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the whole input grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     lbnd
-*        Pointer to an array of integers, with "ncoord_in" elements,
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-*     ubnd
-*        Pointer to an array of integers, with "ncoord_in" elements,
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-*        Note that "lbnd" and "ubnd" together define the shape
-*        and size of the input grid, its extent along a particular
-*        (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-*        index "j" to be zero-based). They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-*     tol
-*        The maximum tolerable geometrical distortion which may be
-*        introduced as a result of approximating non-linear Mappings
-*        by a set of piece-wise linear transformations. This should be
-*        expressed as a displacement in pixels in the output grid's
-*        coordinate system.
-*
-*        If piece-wise linear approximation is not required, a value
-*        of zero may be given. This will ensure that the Mapping is
-*        used without any approximation, but may increase execution
-*        time.
-*        
-*        If the value is too high, discontinuities between the linear
-*        approximations used in adjacent panel will be higher. If this 
-*        is a problem, reduce the tolerance value used.
-*     maxpix
-*        A value which specifies an initial scale size (in grid points) 
-*        for the adaptive algorithm which approximates non-linear Mappings
-*        with piece-wise linear transformations. Normally, this should
-*        be a large value (larger than any dimension of the region of
-*        the input grid being used). In this case, a first attempt to
-*        approximate the Mapping by a linear transformation will be
-*        made over the entire input region.
-*
-*        If a smaller value is used, the input region will first be
-*        divided into sub-regions whose size does not exceed "maxpix"
-*        grid points in any dimension. Only at this point will attempts
-*        at approximation commence.
-*
-*        This value may occasionally be useful in preventing false
-*        convergence of the adaptive algorithm in cases where the
-*        Mapping appears approximately linear on large scales, but has
-*        irregularities (e.g. holes) on smaller scales. A value of,
-*        say, 50 to 100 grid points can also be employed as a safeguard 
-*        in general-purpose software, since the effect on performance is
-*        minimal.
-*
-*        If too small a value is given, it will have the effect of
-*        inhibiting linear approximation altogether (equivalent to
-*        setting "tol" to zero). Although this may degrade
-*        performance, accurate results will still be obtained.
-*     ncoord_out
-*        The number of dimensions of the space in which the output points 
-*        reside.
-*     out
-*        Pointer to an array with "ndim_out" elements. Element [i] of
-*        this array is a pointer to an array in which to store the 
-*        transformed values for output axis "i". The points are ordered 
-*        such that the first axis of the input grid changes most rapidly. 
-*        For example, if the input grid is 2-dimensional and extends from 
-*        (2,-1) to (3,1), the output points will be stored in the order 
-*        (2,-1), (3, -1), (2,0), (3,0), (2,1), (3,1).
-
-*/
-                      
-/* Local Variables: */
-   double *flbnd;                /* Array holding floating point lower bounds */
-   double *fubnd;                /* Array holding floating point upper bounds */
-   double *linear_fit;           /* Pointer to array of fit coefficients */
-   int *hi;                      /* Pointer to array of section upper bounds */
-   int *lo;                      /* Pointer to array of section lower bounds */
-   int coord_in;                 /* Loop counter for input coordinates */
-   int dim;                      /* Output section dimension size */
-   int dimx;                     /* Dimension with maximum section extent */
-   int divide;                   /* Sub-divide the output section? */
-   int i;                        /* Loop count */
-   int isLinear;                 /* Is the transformation linear? */
-   int mxdim;                    /* Largest output section dimension size */
-   int npix;                     /* Number of pixels in output section */
-   int npoint;                   /* Number of points for obtaining a fit */
-   int nvertex;                  /* Number of vertices of output section */
-   int toobig;                   /* Section too big (must sub-divide)? */
-   int toosmall;                 /* Section too small to sub-divide? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   npix = 1;
-   mxdim = 0;
-   dimx = 1;
-   nvertex = 1;
-
-/* Loop through the input grid dimensions. */
-   for ( coord_in = 0; coord_in < ncoord_in; coord_in++ ) {
-
-/* Obtain the extent in each dimension of the input section which is
-   to be rebinned, and calculate the total number of pixels it contains. */
-      dim = ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
-      npix *= dim;
-
-/* Find the maximum dimension size of this input section and note which 
-   dimension has this size. */
-      if ( dim > mxdim ) {
-         mxdim = dim;
-         dimx = coord_in;
-      }
-
-/* Calculate how many vertices the output section has. */
-      nvertex *= 2;
-   }
-   
-/* Calculate how many sample points will be needed (by the astLinearApprox 
-   function) to obtain a linear fit to the Mapping's forward transformation. */
-   npoint = 1 + 4 * ncoord_in + 2 * nvertex;
-
-/* If the number of pixels in the input section is not at least 4
-   times this number, we will probably not save significant time by
-   attempting to obtain a linear fit, so note that the input section
-   is too small. */
-   toosmall = ( npix < ( 4 * npoint ) );
-
-/* Note if the maximum dimension of the input section exceeds the
-   user-supplied scale factor. */
-   toobig = ( maxpix < mxdim );
-
-/* Assume the Mapping is significantly non-linear before deciding
-   whether to sub-divide the output section. */
-   linear_fit = NULL;
-
-/* If the output section is too small to be worth obtaining a linear
-   fit, or if the accuracy tolerance is zero, we will not
-   sub-divide. This means that the Mapping will be used to transform
-   each pixel's coordinates and no linear approximation will be
-   used. */
-   if ( toosmall || ( tol == 0.0 ) ) {
-      divide = 0;
-
-/* Otherwise, if the largest input section dimension exceeds the
-   scale length given, we will sub-divide. This offers the possibility
-   of obtaining a linear approximation to the Mapping over a reduced
-   range of input coordinates (which will be handled by a recursive
-   invocation of this function). */
-   } else if ( toobig ) {
-      divide = 1;
-
-/* If neither of the above apply, then attempt to fit a linear
-   approximation to the forward transformation of the Mapping over 
-   the range of coordinates covered by the input section. We need to 
-   temporarily copy the integer bounds into floating point arrays to 
-   use astLinearApprox. */
-   } else {
-
-/* Allocate memory for floating point bounds and for the coefficient array */
-      flbnd = astMalloc( sizeof( double )*(size_t) ncoord_in );
-      fubnd = astMalloc( sizeof( double )*(size_t) ncoord_in );
-      linear_fit = astMalloc( sizeof( double )*
-                              (size_t) ( ncoord_out*( ncoord_in + 1 ) ) );
-      if( astOK ) {
-
-/* Copy the bounds into these arrays */
-         for( i = 0; i < ncoord_in; i++ ) {
-            flbnd[ i ] = (double) lbnd[ i ];
-            fubnd[ i ] = (double) ubnd[ i ];
-         }
-
-/* Get the linear approximation to the forward transformation. */
-         isLinear = astLinearApprox( this, flbnd, fubnd, tol, linear_fit );
-
-/* Free the coeff array if the inverse transformation is not linear. */
-         if( !isLinear ) linear_fit = astFree( linear_fit );
-
-      } else {
-         linear_fit = astFree( linear_fit );
-      }
-
-/* Free resources */
-      flbnd = astFree( flbnd );
-      fubnd = astFree( fubnd );
-
-/* If a linear fit was obtained, we will use it and therefore do not
-   wish to sub-divide further. Otherwise, we sub-divide in the hope
-   that this may result in a linear fit next time. */
-      divide = !linear_fit;
-   }
-
-/* If no sub-division is required, perform the transformation (in a
-   memory-efficient manner, since the section we are rebinning might
-   still be very large). This will use the linear fit, if obtained
-   above. */
-   if ( astOK ) {
-      if ( !divide ) {
-         TranGridWithBlocking( this, linear_fit, ncoord_in, lbnd_in,
-                               ubnd_in, lbnd, ubnd, ncoord_out, out, status );
-
-/* Otherwise, allocate workspace to perform the sub-division. */
-      } else {
-         lo = astMalloc( sizeof( int ) * (size_t) ncoord_in );
-         hi = astMalloc( sizeof( int ) * (size_t) ncoord_in );
-         if ( astOK ) {
-
-/* Initialise the bounds of a new input section to match the original
-   input section. */
-            for ( coord_in = 0; coord_in < ncoord_in; coord_in++ ) {
-               lo[ coord_in ] = lbnd[ coord_in ];
-               hi[ coord_in ] = ubnd[ coord_in ];
-            }
-
-/* Replace the upper bound of the section's largest dimension with the
-   mid-point of the section along this dimension, rounded downwards. */
-            hi[ dimx ] =
-               (int) floor( 0.5 * (double) ( lbnd[ dimx ] + ubnd[ dimx ] ) );
-
-/* Rebin the resulting smaller section using a recursive invocation
-   of this function. */
-            TranGridAdaptively( this, ncoord_in, lbnd_in, ubnd_in, lo, hi, 
-                                tol, maxpix, ncoord_out, out, status );
-
-/* Now set up a second section which covers the remaining half of the
-   original input section. */
-            lo[ dimx ] = hi[ dimx ] + 1;
-            hi[ dimx ] = ubnd[ dimx ];
-
-/* If this section contains pixels, transform it in the same way. */
-            if ( lo[ dimx ] <= hi[ dimx ] ) {
-               TranGridAdaptively( this, ncoord_in, lbnd_in, ubnd_in, lo, hi, 
-                                   tol, maxpix, ncoord_out, out, status );
-            }
-         }
-
-/* Free the workspace. */
-         lo = astFree( lo );
-         hi = astFree( hi );
-      }
-   }
-
-/* If coefficients for a linear fit were obtained, then free the space
-   they occupy. */
-   if ( linear_fit ) linear_fit = astFree( linear_fit );
-}
-
-static void TranGridSection( AstMapping *this, const double *linear_fit,
-                             int ndim_in, const int *lbnd_in,  
-                             const int *ubnd_in, const int *lbnd, 
-                             const int *ubnd, int ndim_out, double *out[], int *status ){
-/*
-*  Name:
-*     TranGridSection
-
-*  Purpose:
-*     Transform grid points within a section of a rectangular grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void TranGridSection( AstMapping *this, const double *linear_fit,
-*                           int ndim_in, const int *lbnd_in,  
-*                           const int *ubnd_in, const int *lbnd, 
-*                           const int *ubnd, int ndim_out, double *out[] )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function transforms grid points within a specified section of a 
-*     rectangular grid (with any number of dimensions) using a specified
-*     Mapping or, alternatively, a linear approximation fitted to the 
-*     Mapping's forward transformation. 
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose forward transformation may be
-*        used to transform the coordinates of points in the input
-*        grid.
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     linear_fit
-*        Pointer to an optional array of double which contains the
-*        coefficients of a linear fit which approximates the above
-*        Mapping's forward coordinate transformation. If this is
-*        supplied, it will be used in preference to the above Mapping
-*        when transforming coordinates. This may be used to enhance
-*        performance in cases where evaluation of the Mapping's
-*        forward transformation is expensive. If no linear fit is
-*        available, a NULL pointer should be supplied.
-*
-*        The way in which the fit coefficients are stored in this
-*        array and the number of array elements are as defined by the
-*        astLinearApprox function.
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input data grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input data grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the input data grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     lbnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the input data grid which is to be rebinned.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the input data grid which is to be rebinned.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of
-*        the section of the input grid which is to be rebinned. This section 
-*        should lie wholly within the extent of the input grid (as defined 
-*        by the "lbnd_out" and "ubnd_out" arrays). Regions of the input 
-*        grid lying outside this section will be ignored.
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     out
-*        Pointer to an array with "ndim_out" elements. Element [i] of
-*        this array is a pointer to an array in which to store the 
-*        transformed values for output axis "i". The points are ordered 
-*        such that the first axis of the input grid changes most rapidly. 
-*        For example, if the input grid is 2-dimensional and extends from 
-*        (2,-1) to (3,1), the output points will be stored in the order 
-*        (2,-1), (3, -1), (2,0), (3,0), (2,1), (3,1).
-
-*  Notes:
-*     - This function does not take steps to limit memory usage if the
-*     grids supplied are large. To resample large grids in a more
-*     memory-efficient way, the ResampleWithBlocking function should
-*     be used.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset_in;         /* Input PointSet for transformation */
-   AstPointSet *pset_out;        /* Output PointSet for transformation */
-   const double *grad;           /* Pointer to gradient matrix of linear fit */
-   const double *zero;           /* Pointer to zero point array of fit */
-   double **ptr_in;              /* Pointer to input PointSet coordinates */
-   double **ptr_out;             /* Pointer to output PointSet coordinates */
-   double *accum;                /* Pointer to array of accumulated sums */
-   double x1;                    /* Interim x coordinate value */
-   double xx1;                   /* Initial x coordinate value */
-   double y1;                    /* Interim y coordinate value */
-   double yy1;                   /* Initial y coordinate value */
-   int *dim;                     /* Pointer to array of output pixel indices */
-   int *offset;                  /* Pointer to array of output pixel offsets */
-   int *stride;                  /* Pointer to array of output grid strides */
-   int coord_in;                 /* Loop counter for input dimensions */
-   int coord_out;                /* Loop counter for output dimensions */
-   int done;                     /* All pixel indices done? */
-   int i1;                       /* Interim offset into "accum" array */
-   int i2;                       /* Final offset into "accum" array */
-   int idim;                     /* Loop counter for dimensions */
-   int ix;                       /* Loop counter for output x coordinate */
-   int iy;                       /* Loop counter for output y coordinate */
-   int neighb;                   /* Number of neighbouring pixels */
-   int npoint;                   /* Number of output points (pixels) */
-   int off1;                     /* Interim pixel offset into output array */
-   int off2;                     /* Interim pixel offset into output array */
-   int off;                      /* Final pixel offset into output array */
-   int point;                    /* Counter for output points (pixels ) */
-   int s;                        /* Temporary variable for strides */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   pset_in = NULL;
-   ptr_in = NULL;
-   ptr_out = NULL;
-   pset_out = NULL;
-   neighb = 0;
-
-/* Calculate the number of input points, as given by the product of
-   the input grid dimensions. */
-   for ( npoint = 1, coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-      npoint *= ubnd[ coord_in ] - lbnd[ coord_in ] + 1;
-   }
-
-/* Allocate workspace. */
-   offset = astMalloc( sizeof( int ) * (size_t) npoint );
-   stride = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   if ( astOK ) {
-
-/* Calculate the stride for each input grid dimension. */
-      off = 0;
-      s = 1;
-      for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-         stride[ coord_in ] = s;
-         s *= ubnd_in[ coord_in ] - lbnd_in[ coord_in ] + 1;
-      }
-
-/* A linear fit to the Mapping is available. */
-/* ========================================= */
-      if ( linear_fit ) {
-
-/* If a linear fit to the Mapping has been provided, then obtain
-   pointers to the array of gradients and zero-points comprising the
-   fit. */
-         grad = linear_fit + ndim_out;
-         zero = linear_fit;
-
-/* Create a PointSet to hold the output grid coordinates and obtain an
-   array of pointers to its coordinate data. */
-         pset_out = astPointSet( npoint, ndim_out, "", status );
-         ptr_out = astGetPoints( pset_out );
-         if ( astOK ) {
-
-/* Initialise the count of input points. */
-            point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
-            if ( ( ndim_in == 1 ) && ( ndim_out == 1 ) ) {
-
-/* Loop through the pixels of the input grid and transform their x
-   coordinates into the output grid's coordinate system using the
-   linear fit supplied. Store the results in the PointSet created
-   above. */
-               off = lbnd[ 0 ] - lbnd_in[ 0 ];
-               xx1 = zero[ 0 ] + grad[ 0 ] * (double) lbnd[ 0 ];
-
-               for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                  ptr_out[ 0 ][ point ] = xx1;
-                  xx1 += grad[ 0 ];
-                  offset[ point++ ] = off++;
-               }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
-            } else if ( ( ndim_in == 2 ) && ( ndim_out == 2 ) ) {
-
-/* Loop through the range of y coordinates in the input grid and
-   calculate interim values of the output coordinates using the linear
-   fit supplied. */
-               x1 = zero[ 0 ] + grad[ 1 ] * (double) ( lbnd[ 1 ] - 1 );
-               y1 = zero[ 1 ] + grad[ 3 ] * (double) ( lbnd[ 1 ] - 1 );
-               off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 ) - lbnd_in[ 0 ];
-               for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
-                  x1 += grad[ 1 ];
-                  y1 += grad[ 3 ];
-
-/* Also calculate an interim pixel offset into the input array. */
-                  off1 += stride[ 1 ];
-
-/* Now loop through the range of input x coordinates and calculate
-   the final values of the input coordinates, storing the results in
-   the PointSet created above. */
-                  xx1 = x1 + grad[ 0 ] * (double) lbnd[ 0 ];
-                  yy1 = y1 + grad[ 2 ] * (double) lbnd[ 0 ];
-                  off = off1 + lbnd[ 0 ];
-                  for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                     ptr_out[ 0 ][ point ] = xx1;
-                     xx1 += grad[ 0 ];
-                     ptr_out[ 1 ][ point ] = yy1;
-                     yy1 += grad[ 2 ];
-
-/* Also calculate final pixel offsets into the input array. */
-                     offset[ point++ ] = off++;
-                  }
-               }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */               
-            } else {
-
-/* Allocate workspace. */
-               accum = astMalloc( sizeof( double ) *
-                                 (size_t) ( ndim_in * ndim_out ) );
-               dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
-               if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which refer to the 
-   first pixel which we will rebin. Also calculate the offset of this pixel 
-   within the input array. */
-                  off = 0;
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     dim[ coord_in ] = lbnd[ coord_in ];
-                     off += stride[ coord_in ] *
-                            ( dim[ coord_in ] - lbnd_in[ coord_in ] );
-                  }
-
-/* To calculate each output grid coordinate we must perform a matrix
-   multiply on the input grid coordinates (using the gradient matrix)
-   and then add the zero points. However, since we will usually only
-   be altering one input coordinate at a time (the least
-   significant), we can avoid the full matrix multiply by accumulating
-   partial sums for the most significant input coordinates and only
-   altering those sums which need to change each time. The zero points
-   never change, so we first fill the "most significant" end of the
-   "accum" array with these. */
-                  for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                     accum[ ( coord_out + 1 ) * ndim_in - 1 ] =
-                                                              zero[ coord_out ];
-                  }
-                  coord_in = ndim_in - 1;
-
-/* Now loop to process each input pixel. */
-                  for ( done = 0; !done; point++ ) {
-
-/* To generate the output coordinate that corresponds to the current
-   input pixel, we work down from the most significant dimension
-   whose index has changed since the previous pixel we considered
-   (given by "coord_in"). For each affected dimension, we accumulate
-   in "accum" the matrix sum (including the zero point) for that
-   dimension and all higher input dimensions. We must accumulate a
-   separate set of sums for each output coordinate we wish to
-   produce. (Note that for the first pixel we process, all dimensions
-   are considered "changed", so we start by initialising the whole
-   "accum" array.) */
-                     for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-                        i1 = coord_out * ndim_in;
-                        for ( idim = coord_in; idim >= 1; idim-- ) {
-                           i2 = i1 + idim;
-                           accum[ i2 - 1 ] = accum[ i2 ] +
-                                             dim[ idim ] * grad[ i2 ];
-                        }
-
-/* The output coordinate for each dimension is given by the accumulated
-   sum for input dimension zero (giving the sum over all input
-   dimensions). We do not store this in the "accum" array, but assign
-   the result directly to the coordinate array of the PointSet created
-   earlier. */
-                        ptr_out[ coord_out ][ point ] = accum[ i1 ] +
-                                                      dim[ 0 ] * grad[ i1 ];
-                     }
-
-/* Store the offset of the current pixel in the input array. */
-                     offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input pixel. */
-                     coord_in = 0;
-                     do {
-
-/* The least significant index which currently has less than its maximum 
-   value is incremented by one. The offset into the input array is updated 
-   accordingly. */
-                        if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
-                           dim[ coord_in ]++;
-                           off += stride[ coord_in ];
-                           break;
-
-/* Any less significant indices which have reached their maximum value
-   are returned to their minimum value and the input pixel offset is
-   decremented appropriately. */
-                        } else {
-                           dim[ coord_in ] = lbnd[ coord_in ];
-                           off -= stride[ coord_in ] *
-                                  ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the output pixels have been processed once the most significant
-   pixel index has been returned to its minimum value. */
-                           done = ( ++coord_in == ndim_in );
-                        }
-                     } while ( !done );
-                  }
-               }
-
-/* Free the workspace. */
-               accum = astFree( accum );
-               dim = astFree( dim );
-            }
-         }
-
-/* No linear fit to the Mapping is available. */
-/* ========================================== */
-      } else {
-
-/* Create a PointSet to hold the coordinates of the input pixels and
-   obtain a pointer to its coordinate data. */
-         pset_in = astPointSet( npoint, ndim_in, "", status );
-         ptr_in = astGetPoints( pset_in );
-         if ( astOK ) {
-
-/* Initialise the count of input points. */
-            point = 0;
-
-/* Handle the 1-dimensional case optimally. */
-/* ---------------------------------------- */
-            if ( ndim_in == 1 && ndim_out == 1 ) {
-
-/* Loop through the required range of input x coordinates, assigning
-   the coordinate values to the PointSet created above. Also store a
-   pixel offset into the input array. */
-               for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                  ptr_in[ 0 ][ point ] = (double) ix;
-                  offset[ point++ ] = ix - lbnd_in[ 0 ];
-               }
-
-/* Handle the 2-dimensional case optimally. */
-/* ---------------------------------------- */
-            } else if ( ndim_in == 2 && ndim_out == 2 ) {
-
-/* Loop through the required range of input y coordinates,
-   calculating an interim pixel offset into the input array. */
-               off1 = stride[ 1 ] * ( lbnd[ 1 ] - lbnd_in[ 1 ] - 1 ) 
-                      - lbnd_in[ 0 ];
-               for ( iy = lbnd[ 1 ]; iy <= ubnd[ 1 ]; iy++ ) {
-                  off1 += stride[ 1 ];
-
-/* Loop through the required range of input x coordinates, assigning
-   the coordinate values to the PointSet created above. Also store a
-   final pixel offset into the input array. */
-                  off2 = off1 + lbnd[ 0 ];
-                  for ( ix = lbnd[ 0 ]; ix <= ubnd[ 0 ]; ix++ ) {
-                     ptr_in[ 0 ][ point ] = (double) ix;
-                     ptr_in[ 1 ][ point ] = (double) iy;
-                     offset[ point++ ] = off2++;
-                  }
-               }
-
-/* Handle other numbers of dimensions. */
-/* ----------------------------------- */
-            } else {
-
-/* Allocate workspace. */
-               dim = astMalloc( sizeof( int ) * (size_t) ndim_in );
-               if ( astOK ) {
-
-/* Initialise an array of pixel indices for the input grid which
-   refer to the first pixel to be rebinned. Also calculate the offset 
-   of this pixel within the input array. */
-                  off = 0;
-                  for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                     dim[ coord_in ] = lbnd[ coord_in ];
-                     off += stride[ coord_in ] *
-                            ( dim[ coord_in ] - lbnd_in[ coord_in ] );
-                  }
-
-/* Loop to generate the coordinates of each input pixel. */
-                  for ( done = 0; !done; point++ ) {
-
-/* Copy each pixel's coordinates into the PointSet created above. */
-                     for ( coord_in = 0; coord_in < ndim_in; coord_in++ ) {
-                        ptr_in[ coord_in ][ point ] =
-                                                     (double) dim[ coord_in ];
-                     }
-
-/* Store the offset of the pixel in the input array. */
-                     offset[ point ] = off;
-
-/* Now update the array of pixel indices to refer to the next input
-   pixel. */
-                     coord_in = 0;
-                     do {
-
-/* The least significant index which currently has less than its
-   maximum value is incremented by one. The offset into the input
-   array is updated accordingly. */
-                        if ( dim[ coord_in ] < ubnd[ coord_in ] ) {
-                           dim[ coord_in ]++;
-                           off += stride[ coord_in ];
-                           break;
-
-/* Any less significant indices which have reached their maximum value
-   are returned to their minimum value and the input pixel offset is
-   decremented appropriately. */
-                        } else {
-                           dim[ coord_in ] = lbnd[ coord_in ];
-                           off -= stride[ coord_in ] *
-                                  ( ubnd[ coord_in ] - lbnd[ coord_in ] );
-
-/* All the input pixels have been processed once the most significant
-   pixel index has been returned to its minimum value. */
-                           done = ( ++coord_in == ndim_in );
-                        }
-                     } while ( !done );
-                  }
-               }
-
-/* Free the workspace. */
-               dim = astFree( dim );
-            }
-
-/* When all the input pixel coordinates have been generated, use the
-   Mapping's forward transformation to generate the output coordinates
-   from them. Obtain an array of pointers to the resulting coordinate
-   data. */
-            pset_out = astTransform( this, pset_in, 1, NULL );
-            ptr_out = astGetPoints( pset_out );
-         }
-
-/* Annul the PointSet containing the input coordinates. */
-         pset_in = astAnnul( pset_in );
-      }
-   }
-
-/* Copy the output coordinates into the correct positions within the
-   supplied "out" array. */
-/* ================================================================= */
-   if( astOK ) {
-      for ( coord_out = 0; coord_out < ndim_out; coord_out++ ) {
-         for ( point = 0; point < npoint; point++ ) {
-            out[ coord_out ][ offset[ point ] ] = ptr_out[ coord_out ][ point ];
-         }
-      }
-   }
-
-/* Annul the PointSet used to hold output coordinates. */
-   pset_out = astAnnul( pset_out );
-
-/* Free the workspace. */
-   offset = astFree( offset );
-   stride = astFree( stride );
-}
-
-static void TranGridWithBlocking( AstMapping *this, const double *linear_fit,
-                                  int ndim_in, const int *lbnd_in, 
-                                  const int *ubnd_in, const int *lbnd, 
-                                  const int *ubnd, int ndim_out, 
-                                  double *out[], int *status ){
-/*
-*  Name:
-*     TranGridWithBlocking
-
-*  Purpose:
-*     Transforms positions in a section of a grid in a memory-efficient way.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void TranGridWithBlocking( AstMapping *this, const double *linear_fit,
-*                                int ndim_in, const int *lbnd_in, 
-*                                const int *ubnd_in, const int *lbnd, 
-*                                const int *ubnd, int ndim_out, 
-*                                double *out[], int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function transforms positions within a specified section of a 
-*     rectangular grid (with any number of dimensions) using the forward
-*     transformation of the supplied Mapping.
-*
-*     This function is very similar to TranGridSection, except that in
-*     order to limit memory usage and to ensure locality of reference,
-*     it divides the input grid up into "blocks" which have a limited
-*     extent along each input dimension. Each block, which will not
-*     contain more than a pre-determined maximum number of pixels, is
-*     then passed to TranGridSection for transformation.
-
-*  Parameters:
-*     this
-*        Pointer to a Mapping, whose forward transformation may be
-*        used to transform the coordinates of pixels in the input
-*        grid into associated positions in the output grid.
-*
-*        The number of input coordintes for the Mapping (Nin
-*        attribute) should match the value of "ndim_in" (below), and
-*        the number of output coordinates (Nout attribute) should
-*        match the value of "ndim_out".
-*     linear_fit
-*        Pointer to an optional array of double which contains the
-*        coefficients of a linear fit which approximates the above
-*        Mapping's forward coordinate transformation. If this is
-*        supplied, it will be used in preference to the above Mapping
-*        when transforming coordinates. This may be used to enhance
-*        performance in cases where evaluation of the Mapping's
-*        forward transformation is expensive. If no linear fit is
-*        available, a NULL pointer should be supplied.
-*
-*        The way in which the fit coefficients are stored in this
-*        array and the number of array elements are as defined by the
-*        astLinearApprox function.
-*     ndim_in
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the first
-*        pixel in the input grid along each dimension.
-*     ubnd_in
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the centre of the last
-*        pixel in the input grid along each dimension.
-*
-*        Note that "lbnd_in" and "ubnd_in" together define the shape
-*        and size of the whole input grid, its extent along a
-*        particular (i'th) dimension being (ubnd_in[i] - lbnd_in[i] +
-*        1). They also define the input grid's coordinate system, with
-*        each pixel being of unit extent along each dimension with
-*        integral coordinate values at its centre.
-*     lbnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the first pixel in the
-*        section of the input data grid which is to be transformed.
-*     ubnd
-*        Pointer to an array of integers, with "ndim_in" elements.
-*        This should give the coordinates of the last pixel in the
-*        section of the input data grid which is to be transformed.
-*
-*        Note that "lbnd" and "ubnd" define the shape and position of the 
-*        section of the input grid which is to be transformed. 
-*     ndim_out
-*        The number of dimensions in the output grid. This should be
-*        at least one.
-*     out
-*        Pointer to an array with "ndim_out" elements. Element [i] of
-*        this array is a pointer to an array in which to store the 
-*        transformed values for output axis "i". The points are ordered 
-*        such that the first axis of the input grid changes most rapidly. 
-*        For example, if the input grid is 2-dimensional and extends from 
-*        (2,-1) to (3,1), the output points will be stored in the order 
-*        (2,-1), (3, -1), (2,0), (3,0), (2,1), (3,1).
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Constants: */
-   const int mxpix = 2 * 1024;   /* Maximum number of pixels in a block (this
-                                    relatively small number seems to give best
-                                    performance) */
-
-/* Local Variables: */
-   int *dim_block;               /* Pointer to array of block dimensions */
-   int *lbnd_block;              /* Pointer to block lower bound array */
-   int *ubnd_block;              /* Pointer to block upper bound array */
-   int dim;                      /* Dimension size */
-   int done;                     /* All blocks rebinned? */
-   int hilim;                    /* Upper limit on maximum block dimension */
-   int idim;                     /* Loop counter for dimensions */
-   int lolim;                    /* Lower limit on maximum block dimension */
-   int mxdim_block;              /* Maximum block dimension */
-   int npix;                     /* Number of pixels in block */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Allocate workspace. */
-   lbnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   ubnd_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   dim_block = astMalloc( sizeof( int ) * (size_t) ndim_in );
-   if ( astOK ) {
-
-/* Find the optimum block size. */
-/* ---------------------------- */
-/* We first need to find the maximum extent which a block of input
-   pixels may have in each dimension. We determine this by taking the
-   input grid extent in each dimension and then limiting the maximum
-   dimension size until the resulting number of pixels is sufficiently
-   small. This approach allows the block shape to approximate (or
-   match) the input grid shape when appropriate. */
-
-/* First loop to calculate the total number of input pixels and the
-   maximum input dimension size. */
-      npix = 1;
-      mxdim_block = 0;
-      for ( idim = 0; idim < ndim_in; idim++ ) {
-         dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-         npix *= dim;
-         if ( mxdim_block < dim ) mxdim_block = dim;
-      }
-
-/* If the number of input pixels is too large for a single block, we
-   perform iterations to determine the optimum upper limit on a
-   block's dimension size. Initialise the limits on this result. */
-      if ( npix > mxpix ) {
-         lolim = 1;
-         hilim = mxdim_block;
-
-/* Loop to perform a binary chop, searching for the best result until
-   the lower and upper limits on the result converge to adjacent
-   values. */
-         while ( ( hilim - lolim ) > 1 ) {
-
-/* Form a new estimate from the mid-point of the previous limits. */
-            mxdim_block = ( hilim + lolim ) / 2;
-
-/* See how many pixels a block contains if its maximum dimension is
-   limited to this new value. */
-            for ( npix = 1, idim = 0; idim < ndim_in; idim++ ) {
-               dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-               npix *= ( dim < mxdim_block ) ? dim : mxdim_block;
-            }
-
-/* Update the appropriate limit, according to whether the number of
-   pixels is too large or too small. */
-            *( ( npix <= mxpix ) ? &lolim : &hilim ) = mxdim_block;
-         }
-
-/* When iterations have converged, obtain the maximum limit on the
-   dimension size of a block which results in no more than the maximum
-   allowed number of pixels per block. However, ensure that all block
-   dimensions are at least 2. */
-            mxdim_block = lolim;
-      }
-      if ( mxdim_block < 2 ) mxdim_block = 2;
-
-/* Calculate the block dimensions by applying this limit to the output
-   grid dimensions. */
-      for ( idim = 0; idim < ndim_in; idim++ ) {
-         dim = ubnd[ idim ] - lbnd[ idim ] + 1;
-         dim_block[ idim ] = ( dim < mxdim_block ) ? dim : mxdim_block;
-
-/* Also initialise the lower and upper bounds of the first block of
-   output grid pixels to be rebinned, ensuring that this does not
-   extend outside the grid itself. */
-         lbnd_block[ idim ] = lbnd[ idim ];
-         ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
-                                    ubnd[ idim ], status );
-      }
-
-/* Transform each block of input grid positions. */
-/* --------------------------------------------- */
-/* Loop to generate the extent of each block of input grid positions and to
-   transform them. */
-      done = 0;
-      while ( !done && astOK ) {
-
-/* Rebin the current block, accumulating the sum of bad pixels produced. */
-         TranGridSection( this, linear_fit, ndim_in, lbnd_in, ubnd_in,
-                          lbnd_block, ubnd_block, ndim_out, out, status );
-
-/* Update the block extent to identify the next block of input pixels. */
-         idim = 0;
-         do {
-
-/* We find the least significant dimension where the upper bound of
-   the block has not yet reached the upper bound of the region of the
-   input grid which we are rebinning. The block's position is then
-   incremented by one block extent along this dimension, checking that
-   the resulting extent does not go outside the region being rebinned. */
-            if ( ubnd_block[ idim ] < ubnd[ idim ] ) {
-               lbnd_block[ idim ] = MinI( lbnd_block[ idim ] +
-                                          dim_block[ idim ], ubnd[ idim ], status );
-               ubnd_block[ idim ] = MinI( lbnd_block[ idim ] +
-                                          dim_block[ idim ] - 1,
-                                          ubnd[ idim ], status );
-               break;
-
-/* If any less significant dimensions are found where the upper bound
-   of the block has reached its maximum value, we reset the block to
-   its lowest position. */
-            } else {
-               lbnd_block[ idim ] = lbnd[ idim ];
-               ubnd_block[ idim ] = MinI( lbnd[ idim ] + dim_block[ idim ] - 1,
-                                          ubnd[ idim ], status );
-
-/* All the blocks have been processed once the position along the most
-   significant dimension has been reset. */
-               done = ( ++idim == ndim_out );
-            }
-         } while ( !done );
-      }
-   }
-
-/* Free the workspace. */
-   lbnd_block = astFree( lbnd_block );
-   ubnd_block = astFree( ubnd_block );
-   dim_block = astFree( dim_block );
-}
-
-static void TranN( AstMapping *this, int npoint,
-                   int ncoord_in, int indim, const double *in,
-                   int forward,
-                   int ncoord_out, int outdim, double *out, int *status ) {
-/*
-*++
-*  Name:
-c     astTranN
-f     AST_TRANN
-
-*  Purpose:
-*     Transform N-dimensional coordinates.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astTranN( AstMapping *this, int npoint,
-c                    int ncoord_in, int indim, const double *in,
-c                    int forward,
-c                    int ncoord_out, int outdim, double *out )
-f     CALL AST_TRANN( THIS, NPOINT,
-f                     NCOORD_IN, INDIM, IN,
-f                     FORWARD, NCOORD_OUT, OUTDIM, OUT, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function applies a Mapping to transform the coordinates of
-f     This routine applies a Mapping to transform the coordinates of
-*     a set of points in an arbitrary number of dimensions. It is the
-*     appropriate routine to use if the coordinates are not purely 1-
-*     or 2-dimensional and are stored in a single array (which they
-*     need not fill completely).
-c
-c     If the coordinates are not stored in a single array, then the
-c     astTranP function might be more suitable.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping to be applied.
-c     npoint
-f     NPOINT = INTEGER (Given)
-*        The number of points to be transformed.
-c     ncoord_in
-f     NCOORD_IN = INTEGER (Given)
-*        The number of coordinates being supplied for each input point
-*        (i.e. the number of dimensions of the space in which the
-*        input points reside).
-c     indim
-f     INDIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "in"
-f        The number of elements along the first dimension of the IN
-*        array (which contains the input coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-c        given should not be less than "npoint".
-f        given should not be less than NPOINT.
-c     in
-f     IN( INDIM, NCOORD_IN ) = DOUBLE PRECISION (Given)
-c        The address of the first element in a 2-dimensional array of 
-c        shape "[ncoord_in][indim]",
-c        containing the coordinates of the input (untransformed)
-c        points. These should be stored such that the value of
-c        coordinate number "coord" for input point number "point" is
-c        found in element "in[coord][point]".
-f        An array containing the coordinates of the input
-f        (untransformed) points. These should be stored such that the
-f        value of coordinate number COORD for input point number POINT
-f        is found in element IN(POINT,COORD).
-c     forward
-f     FORWARD = LOGICAL (Given)
-c        A non-zero value indicates that the Mapping's forward
-c        coordinate transformation is to be applied, while a zero
-c        value indicates that the inverse transformation should be
-c        used.
-f        A .TRUE. value indicates that the Mapping's forward
-f        coordinate transformation is to be applied, while a .FALSE.
-f        value indicates that the inverse transformation should be
-f        used.
-c     ncoord_out
-f     NCOORD_OUT = INTEGER (Given)
-*        The number of coordinates being generated by the Mapping for
-*        each output point (i.e. the number of dimensions of the
-*        space in which the output points reside). This need not be
-c        the same as "ncoord_in".
-f        the same as NCOORD_IN.
-c     outdim
-f     OUTDIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "out"
-f        The number of elements along the first dimension of the OUT
-*        array (which will contain the output coordinates). This value
-*        is required so that the coordinate values can be correctly
-*        located if they will not entirely fill this array. The value
-c        given should not be less than "npoint".
-f        given should not be less than NPOINT.
-c     out
-f     OUT( OUTDIM, NCOORD_OUT ) = DOUBLE PRECISION (Returned)
-c        The address of the first element in a 2-dimensional array of 
-c        shape "[ncoord_out][outdim]", into
-c        which the coordinates of the output (transformed) points will
-c        be written. These will be stored such that the value of
-c        coordinate number "coord" for output point number "point"
-c        will be found in element "out[coord][point]".
-f        An array into which the coordinates of the output
-f        (transformed) points will be written. These will be stored
-f        such that the value of coordinate number COORD for output
-f        point number POINT will be found in element OUT(POINT,COORD).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - If the forward coordinate transformation is being applied, the
-c     Mapping supplied must have the value of "ncoord_in" for its Nin
-c     attribute and the value of "ncoord_out" for its Nout attribute. If
-c     the inverse transformation is being applied, these values should
-c     be reversed.
-f     - If the forward coordinate transformation is being applied, the
-f     Mapping supplied must have the value of NCOORD_IN for its Nin
-f     attribute and the value of NCOORD_OUT for its Nout attribute. If
-f     the inverse transformation is being applied, these values should
-f     be reversed.
-*--
-*/
-
-/* Local Variables: */
-   AstPointSet *in_points;       /* Pointer to input PointSet */
-   AstPointSet *out_points;      /* Pointer to output PointSet */
-   const double **in_ptr;        /* Pointer to array of input data pointers */
-   double **out_ptr;             /* Pointer to array of output data pointers */
-   int coord;                    /* Loop counter for coordinates */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the mapping and numbers of points/coordinates. */
-   ValidateMapping( this, forward, npoint, ncoord_in, ncoord_out, "astTranN", status );
-
-/* Also validate the input array dimension argument. */
-   if ( astOK && ( indim < npoint ) ) {
-      astError( AST__DIMIN, "astTranN(%s): The input array dimension value "
-                "(%d) is invalid.", status, astGetClass( this ), indim );
-      astError( AST__DIMIN, "This should not be less than the number of "
-                "points being transformed (%d).", status, npoint );
-   }
-
-/* Similarly, validate the output array dimension argument. */
-   if ( astOK && ( outdim < npoint ) ) {
-      astError( AST__DIMIN, "astTranN(%s): The output array dimension value "
-                "(%d) is invalid.", status, astGetClass( this ), outdim );
-      astError( AST__DIMIN, "This should not be less than the number of "
-                "points being transformed (%d).", status, npoint );
-   }
-
-/* Allocate memory to hold the arrays of input and output data
-   pointers. */
-   if ( astOK ) {
-      in_ptr = (const double **) astMalloc( sizeof( const double * ) *
-                                            (size_t) ncoord_in );
-      out_ptr = astMalloc( sizeof( double * ) * (size_t) ncoord_out );
-
-
-#ifdef DEBUG
-      { int i, ns;
-        ns = ncoord_out*outdim;
-        for( i = 0; i < ns; i++ ) out[ i ] = 0.0;
-      }
-#endif
-
-
-/* Initialise the input data pointers to locate the coordinate data in
-   the "in" array. */
-      if ( astOK ) {
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            in_ptr[ coord ] = in + coord * indim;
-         }
-
-/* Similarly initialise the output data pointers to point into the
-   "out" array. */
-         for ( coord = 0; coord < ncoord_out; coord++ ) {
-            out_ptr[ coord ] = out + coord * outdim;
-         }
-
-/* Create PointSets to describe the input and output points. */
-         in_points = astPointSet( npoint, ncoord_in, "", status );
-         out_points = astPointSet( npoint, ncoord_out, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
-   explicitly remove the "const" qualifier from the input data here,
-   although they will not be modified).  */
-         astSetPoints( in_points, (double **) in_ptr );
-         astSetPoints( out_points, out_ptr );
-
-/* Apply the required transformation to the coordinates. */
-         (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
-   Mapping has had on the coordinates. */
-         if ( astGetReport( this ) ) astReportPoints( this, forward,
-                                                      in_points, out_points );
-
-/* Delete the two PointSets. */
-         in_points = astDelete( in_points );
-         out_points = astDelete( out_points );
-      }
-
-/* Free the memory used for the data pointers. */
-      in_ptr = (const double **) astFree( (void *) in_ptr );
-      out_ptr = astFree( out_ptr );
-   }
-}
-
-static void TranP( AstMapping *this, int npoint,
-                   int ncoord_in, const double *ptr_in[],
-                   int forward, int ncoord_out, double *ptr_out[], int *status ) {
-/*
-c++
-*  Name:
-*     astTranP
-
-*  Purpose:
-*     Transform N-dimensional coordinates held in separate arrays.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void astTranP( AstMapping *this, int npoint,
-*                    int ncoord_in, const double *ptr_in[],
-*                    int forward, int ncoord_out, double *ptr_out[] )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function applies a Mapping to transform the coordinates of
-*     a set of points in an arbitrary number of dimensions. It is the
-*     appropriate routine to use if the coordinates are not purely 1-
-*     or 2-dimensional and are stored in separate arrays, since each
-*     coordinate array is located by supplying a separate pointer to
-*     it.
-*
-*     If the coordinates are stored in a single (2-dimensional) array,
-*     then the astTranN function might be more suitable.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     npoint
-*        The number of points to be transformed.
-*     ncoord_in
-*        The number of coordinates being supplied for each input point
-*        (i.e. the number of dimensions of the space in which the
-*        input points reside).
-*     ptr_in
-*        An array of pointers to double, with "ncoord_in"
-*        elements. Element "ptr_in[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) which
-*        contain the values of coordinate number "coord" for each
-*        input (untransformed) point. The value of coordinate number
-*        "coord" for input point number "point" is therefore given by
-*        "ptr_in[coord][point]" (assuming both indices are
-*        zero-based).
-*     forward
-*        A non-zero value indicates that the Mapping's forward
-*        coordinate transformation is to be applied, while a zero
-*        value indicates that the inverse transformation should be
-*        used.
-*     ncoord_out
-*        The number of coordinates being generated by the Mapping for
-*        each output point (i.e. the number of dimensions of the space
-*        in which the output points reside). This need not be the same
-*        as "ncoord_in".
-*     ptr_out
-*        An array of pointers to double, with "ncoord_out"
-*        elements. Element "ptr_out[coord]" should point at the first
-*        element of an array of double (with "npoint" elements) into
-*        which the values of coordinate number "coord" for each output
-*        (transformed) point will be written.  The value of coordinate
-*        number "coord" for output point number "point" will therefore
-*        be found in "ptr_out[coord][point]".
-
-*  Notes:
-*     - If the forward coordinate transformation is being applied, the
-*     Mapping supplied must have the value of "ncoord_in" for its Nin
-*     attribute and the value of "ncoord_out" for its Nout
-*     attribute. If the inverse transformation is being applied, these
-*     values should be reversed.
-*     - This routine is not available in the Fortran 77 interface to
-*     the AST library.
-c--
-*/
-
-/* Local Variables: */
-   AstPointSet *in_points;       /* Pointer to input PointSet */
-   AstPointSet *out_points;      /* Pointer to output PointSet */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the Mapping and number of points/coordinates. */
-   ValidateMapping( this, forward, npoint, ncoord_in, ncoord_out, "astTranP", status );
-
-/* Create PointSets to describe the input and output points. */
-   if ( astOK ) {
-      in_points = astPointSet( npoint, ncoord_in, "", status );
-      out_points = astPointSet( npoint, ncoord_out, "", status );
-
-/* Associate the data pointers with the PointSets (note we must
-   explicitly remove the "const" qualifier from the input data here,
-   although they will not be modified).  */
-      astSetPoints( in_points, (double **) ptr_in );
-      astSetPoints( out_points, ptr_out );
-
-/* Apply the required transformation to the coordinates. */
-      (void) astTransform( this, in_points, forward, out_points );
-
-/* If the Mapping's Report attribute is set, report the effect the
-   Mapping has had on the coordinates. */
-      if ( astGetReport( this ) ) astReportPoints( this, forward,
-                                                   in_points, out_points );
-
-/* Delete the two PointSets. */
-      in_points = astDelete( in_points );
-      out_points = astDelete( out_points );
-   }
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*+
-*  Name:
-*     astTransform
-
-*  Purpose:
-*     Transform a set of points.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     AstPointSet *astTransform( AstMapping *this, AstPointSet *in,
-*                                int forward, AstPointSet *out )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This function takes a Mapping and a set of points encapsulated
-*     in a PointSet, and applies either the forward or inverse
-*     coordinate transformation (if defined by the Mapping) to the
-*     points.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping. The nature of the coordinate
-*        transformation will depend on the class of Mapping
-*        supplied. Note that there is no constructor for the Mapping
-*        class itself, so this object should be from a derived class.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation should be applied, while a zero value requests
-*        the inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed
-*        (output) coordinate values. A NULL value may also be given,
-*        in which case a new PointSet will be created by this
-*        function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     - An error will result if the Mapping supplied does not define
-*     the requested coordinate transformation (either forward or
-*     inverse).
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of input coordinates for the
-*     Mapping being applied (or number of output coordinates if the
-*     inverse transformation is requested).
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and coordinate values per point to
-*     accommodate the result (e.g. the number of Mapping output
-*     coordinates, or number of input coordinates if the inverse
-*     transformation is requested). Any excess space will be ignored.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   int def;                      /* Coordinate transformation defined? */
-   int ncoord_in;                /* Number of input PointSet coordinates */
-   int ncoord_out;               /* Number of coordinates in output PointSet */
-   int nin;                      /* Number of input Mapping coordinates */
-   int nout;                     /* Number of output Mapping coordinates */
-   int npoint;                   /* Number of points to transform */
-   int npoint_out;               /* Number of points in output PointSet */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise. */
-   result = NULL;
-
-/* Determine if a coordinate transformation is defined for the requested
-   direction. */
-   def = forward ? astGetTranForward( this ) : astGetTranInverse( this );
-
-/* Report an error if the transformation is not defined. */
-   if ( astOK && !def ) {
-      astError( AST__TRNND, "astTransform(%s): %s coordinate transformation "
-                "is not defined by the %s supplied.", status, astGetClass( this ),
-                forward ? "A forward" : "An inverse", astGetClass( this ) );
-   }
-
-/* Obtain the effective number of input and output coordinate values for the
-   transformation to be performed, taking account of the transformation
-   direction required. Note we use Mapping methods to obtain these values, as
-   this will take account of whether the Mapping has been inverted. */
-   nin = forward ? astGetNin( this ) : astGetNout( this );
-   nout = forward ? astGetNout( this ) : astGetNin( this );
-
-/* Obtain the number of input points to transform and the number of coordinate
-   values per input point. */
-   npoint = astGetNpoint( in );
-   ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
-   required by the mapping. Report an error if these numbers do not match. */
-   if ( astOK && ( ncoord_in != nin ) ) {
-      astError( AST__NCPIN, "astTransform(%s): Bad number of coordinate "
-                "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
-                astGetClass( in ) );
-      astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
-                "each input point.", status, astGetClass( this ), nin );
-   }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
-   then obtain the number of points and number of coordinates per point for
-   this PointSet. */
-   if ( astOK && out ) {
-      npoint_out = astGetNpoint( out );
-      ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
-   output coordinate values and report an error if they are not. */
-      if ( astOK ) {
-         if ( npoint_out < npoint ) {
-            astError( AST__NOPTS, "astTransform(%s): Too few points (%d) in "
-                      "output %s.", status, astGetClass( this ), npoint_out,
-                      astGetClass( out ) );
-            astError( AST__NOPTS, "The %s needs space to hold %d transformed "
-                      "point(s).", status, astGetClass( this ), npoint );
-         } else if ( ncoord_out < nout ) {
-            astError( AST__NOCTS, "astTransform(%s): Too few coordinate "
-                      "values per point (%d) in output %s.", status,
-                      astGetClass( this ), ncoord_out, astGetClass( out ) );
-            astError( AST__NOCTS, "The %s supplied needs space to store %d "
-                      "coordinate value(s) per transformed point.", status,
-                      astGetClass( this ), nout );
-         }
-      }
-   }
-
-/* If all the validation stages are passed successfully, and a NULL output
-   pointer was given, then create a new PointSet to encapsulate the output
-   coordinate data. */
-   if ( astOK ) {
-      if ( !out ) {
-         result = astPointSet( npoint, nout, "", status );
-
-/* Otherwise, use the PointSet supplied. */
-      } else {
-         result = out;
-      }
-   }
-
-/* Return a pointer to the output PointSet. Note that we do not actually
-   transform (or even copy) the coordinates. This is left for derived classes
-   to implement. */
-   return result;
-}
-
-/*
-*++
-*  Name:
-c     astUinterp
-f     AST_UINTERP
-
-*  Purpose:
-*     Perform sub-pixel interpolation on a grid of data.
-
-*  Type:
-*     Fictitious function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astUinterp( int ndim_in, const int lbnd_in[], const int ubnd_in[],
-c                      const <Xtype> in[], const <Xtype> in_var[],
-c                      int npoint, const int offset[],
-c                      const double *const coords[], const double params[],
-c                      int flags, <Xtype> badval,
-c                      <Xtype> out[], <Xtype> out_var[], int *nbad )
-f     CALL AST_UINTERP( NDIM_IN, LBND_IN, UBND_IN, IN, IN_VAR,
-f                       NPOINT, OFFSET, COORDS, PARAMS, FLAGS, BADVAL,
-f                       OUT, OUT_VAR, NBAD, STATUS )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-c     This is a fictitious function which does not actually
-c     exist. Instead, this description constitutes a template so that
-c     you may implement a function with this interface for yourself
-c     (and give it any name you wish). A pointer to such a function
-c     may be passed via the "finterp" parameter of the astResample<X>
-c     functions (q.v.) in order to perform sub-pixel interpolation
-c     during resampling of gridded data (you must also set the
-c     "interp" parameter of astResample<X> to the value
-c     AST__UINTERP). This allows you to use your own interpolation
-c     algorithm in addition to those which are pre-defined.
-f     This is a fictitious routine which does not actually
-f     exist. Instead, this description constitutes a template so that
-f     you may implement a routine with this interface for yourself
-f     (and give it any name you wish). Such a routine
-f     may be passed via the FINTERP argument of the AST_RESAMPLE<X>
-f     functions (q.v.) in order to perform sub-pixel interpolation
-f     during resampling of gridded data (you must also set the
-f     INTERP argument of AST_RESAMPLE<X> to the value
-f     AST__UINTERP). This allows you to use your own interpolation
-f     algorithm in addition to those which are pre-defined.
-*
-c     The function interpolates an input grid of data (and,
-f     The routine interpolates an input grid of data (and,
-*     optionally, processes associated statistical variance estimates)
-*     at a specified set of points.
-
-*  Parameters:
-c     ndim_in
-f     NDIM_IN = INTEGER (Given)
-*        The number of dimensions in the input grid. This will be at
-*        least one.
-c     lbnd_in
-f     LBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c     ubnd_in
-f     UBND_IN( NDIM_IN ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim_in" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd_in" and "ubnd_in" together define the shape,
-f        Note that LBND_IN and UBND_IN together define the shape,
-*        size and coordinate system of the input grid in the same
-c        way as they do in astResample<X>.
-f        way as they do in AST_RESAMPLE<X>.
-c     in
-f     IN( * ) = <Xtype> (Given)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        input grid, containing the input data. This will be the same
-c        array as was passed to astResample<X> via the "in" parameter.
-f        array as was passed to AST_RESAMPLE<X> via the IN argument.
-*        The numerical type of this array should match that of the
-*        data being processed.
-c     in_var
-f     IN_VAR( * ) = <Xtype> (Given)
-c        Pointer to an optional second array with the same size and
-c        type as the "in" array. If given, this will contain the set
-c        of variance values associated with the input data and will be
-c        the same array as was passed to astResample<X> via the
-c        "in_var" parameter.
-f        An optional second array with the same size and type as the
-f        IN array. This will only be given if the AST__USEVAR flag is
-f        set via the FLAGS argument (below). If given, it will contain
-f        the set of variance values associated with the input data and
-f        will be the same array as was passed to AST_RESAMPLE<X> via
-f        the IN_VAR argument.
-*
-c        If no variance values are being processed, this will be a
-c        NULL pointer.
-f        If the AST__USEVAR flag is not set, then no variance values
-f        are being processed. In this case, this array of variance
-f        values may be a dummy (e.g. one-element) array and should not
-f        be used.
-c     npoint
-f     NPOINT = INTEGER (Given)
-*        The number of points at which the input grid is to be
-*        interpolated. This will be at least one.
-c     offset
-f     OFFSET( NPOINT ) = INTEGER (Given)
-c        Pointer to an array of integers with "npoint" elements. For
-c        each interpolation point, this will contain the zero-based
-c        index in the "out" (and "out_var") array(s) at which the
-c        interpolated value (and its variance, if required) should be
-c        stored. For example, the interpolated value for point number
-c        "point" should be stored in "out[offset[point]]" (assuming
-c        the index "point" is zero-based).
-f        For each interpolation point, this array will contain the
-f        offset from the start of the OUT (and OUT_VAR) array(s) at
-f        which the interpolated value (and its variance, if required)
-f        should be stored. For example, the interpolated value for
-f        point number POINT should be stored in OUT(1+OFFSET(POINT)).
-c     coords
-f     COORDS( NPOINT, NDIM_IN ) = DOUBLE PRECISION (Given)
-c        An array of pointers to double, with "ndim_in"
-c        elements. Element "coords[coord]" will point at the first
-c        element of an array of double (with "npoint" elements) which
-c        contains the values of coordinate number "coord" for each
-c        interpolation point. The value of coordinate number "coord"
-c        for interpolation point number "point" is therefore given by
-c        "coords[coord][point]" (assuming both indices are
-c        zero-based).
-f        A 2-dimensional array containing the coordinates of the
-f        points at which interpolation should be performed. These will
-f        be stored so that coordinate number COORD for interpolation
-f        point number POINT is found in element COORDS(POINT,COORD).
-*
-*        If any interpolation point has any of its coordinates equal
-c        to the value AST__BAD (as defined in the "ast.h" header
-f        to the value AST__BAD (as defined in the AST_PAR include
-*        file), then the corresponding output data (and variance)
-c        should either be set to the value given by "badval", 
-f        should either be set to the value given by BADVAL, 
-*        or left unchanged, depending on whether the AST__NOBAD flag is
-c        specified by "flags".
-f        specified by FLAGS.
-c     params
-f     PARAMS( * ) = DOUBLE PRECISION (Given)
-c        This will be a pointer to the same array as was given via the
-c        "params" parameter of astResample<X>. You may use this to
-f        This will be the same array as was given via the
-f        PARAMS argument of AST_RESAMPLE<X>. You may use this to
-*        pass any additional parameter values required by your
-*        interpolation algorithm.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        This will be the same value as was given via the "flags"
-c        parameter of astResample<X>. You may test this value to
-f        This will be the same value as was given via the FLAGS
-f        argument of AST_RESAMPLE<X>. You may test this value to
-*        provide additional control over the operation of your
-*        resampling algorithm. Note that the special flag values
-*        AST__URESAMP1, 2, 3 & 4 are reserved for you to use for your
-*        own purposes and will not clash with other pre-defined flag
-c        values (see astResample<X>).
-f        values (see AST_RESAMPLE<X>).
-c     badval
-f     BADVAL = <Xtype> (Given)
-c        This will be the same value as was given via the "badval"
-c        parameter of astResample<X>, and will have the same numerical
-c        type as the data being processed (i.e. as elements of the
-c        "in" array).  It should be used to test for bad pixels in the
-c        input grid (but only if the AST__USEBAD flag is set via the
-c        "flags" parameter) and (unless the AST__NOBAD flag is set in
-c        "flags") for identifying bad output values in
-c        the "out" (and "out_var") array(s).
-f        This will be the same value as was given for the BADVAL
-f        argument of AST_RESAMPLE<X>, and will have the same numerical
-f        type as the data being processed (i.e. as elements of the IN
-f        array).  It should be used to test for bad pixels in the
-f        input grid (but only if the AST__USEBAD flag is set via the
-f        FLAGS argument) and (unless the AST__NOBAD flag is set in
-f        FLAGS) for identifying bad output values in the OUT (and 
-f        OUT_VAR) array(s).
-c     out
-f     OUT( * ) = <Xtype> (Returned)
-c        Pointer to an array with the same numerical type as the "in"
-f        An array with the same numerical type as the IN
-*        array, into which the interpolated data values should be
-*        returned.  Note that details of the storage order and number
-*        of dimensions of this array are not required, since the
-c        "offset" array contains all necessary information about where
-f        OFFSET array contains all necessary information about where
-*        each returned value should be stored.
-*
-c        In general, not all elements of this array (or the "out_var"
-f        In general, not all elements of this array (or the OUT_VAR
-*        array below) may be used in any particular invocation of the
-c        function. Those which are not used should be returned
-f        routine. Those which are not used should be returned
-*        unchanged.
-c     out_var
-f     OUT_VAR( * ) = <Xtype> (Returned)
-c        Pointer to an optional array with the same type and size as
-c        the "out" array, into which variance estimates for the
-c        resampled values should be returned.  This array will only be
-c        given if the "in_var" array has also been given.
-f        An optional array with the same type and size as the OUT
-f        array, into which variance estimates for the resampled values
-f        should be returned. This array will only be given if the
-f        AST__USEVAR flag is set via the FLAGS argument.
-*
-c        If given, it is addressed in exactly the same way (via the
-c        "offset" array) as the "out" array. The values returned
-c        should be estimates of the statistical variance of the
-c        corresponding values in the "out" array, on the assumption
-c        that all errors in input data values are statistically
-c        independent and that their variance estimates may simply be
-c        summed (with appropriate weighting factors).
-f        If given, it is addressed in exactly the same way (via the
-f        OFFSET array) as the OUT array. The values returned should be
-f        estimates of the statistical variance of the corresponding
-f        values in the OUT array, on the assumption that all errors in
-f        input data values are statistically independent and that
-f        their variance estimates may simply be summed (with
-f        appropriate weighting factors).
-*
-c        If no output variance estimates are required, a NULL pointer
-c        will be given.
-f        If the AST__USEVAR flag is not set, then variance values are
-f        not being processed.  In this case, this array may be a dummy
-f        (e.g. one-element) array and should not be used.
-c     nbad
-f     NBAD = INTEGER (Returned)
-c        Pointer to an int in which to return the number of interpolation
-c        points at
-f        This should return the number of interpolation points at
-*        which no valid interpolated value could be obtained.  The maximum
-c        value that should be returned is "npoint", and the minimum is
-f        value that should be returned is NPOINT, and the minimum is
-*        zero (indicating that all output values were successfully
-*        obtained).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - The data type <Xtype> indicates the numerical type of the data
-c     being processed, as for astResample<X>.
-f     being processed, as for AST_RESAMPLE<X>.
-c     - This function will typically be invoked more than once for each
-c     invocation of astResample<X>.
-f     - This routine will typically be invoked more than once for each
-f     invocation of AST_RESAMPLE<X>.
-c     - If an error occurs within this function, it should use
-c     astSetStatus to set the AST error status to an error value.
-c     This will cause an immediate return from astResample<X>. The error
-c     value AST__UINER is available for this purpose, but other values may
-c     also be used (e.g. if you wish to distinguish different types of
-c     error).
-f     - If an error occurs within this routine, it should set the
-f     STATUS argument to an error value before returning. This will
-f     cause an immediate return from AST_RESAMPLE<X>. The error value
-f     AST__UINER is available for this purpose, but other values may also
-f     be used (e.g. if you wish to distinguish different types of error).
-f     The AST__UINER error value is defined in the AST_ERR include file.
-*--
-*/
-/* Note the above is just a description to act as a template. The
-   function does not actually exist. */
-
-/*
-*++
-*  Name:
-c     astUkern1
-f     AST_UKERN1
-
-*  Purpose:
-*     1-dimensional sub-pixel interpolation kernel.
-
-*  Type:
-*     Fictitious function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astUkern1( double offset, const double params[], int flags,
-c                     double *value )
-f     CALL AST_UKERN1( OFFSET, PARAMS, FLAGS, VALUE, STATUS )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-c     This is a fictitious function which does not actually
-c     exist. Instead, this description constitutes a template so that
-c     you may implement a function with this interface for yourself
-c     (and give it any name you wish). A pointer to such a function
-c     may be passed via the "finterp" parameter of the astResample<X>
-c     functions (q.v.) in order to supply a 1-dimensional
-c     interpolation kernel to the algorithm which performs sub-pixel
-c     interpolation during resampling of gridded data (you must also
-c     set the "interp" parameter of astResample<X> to the value
-c     AST__UKERN1). This allows you to use your own interpolation
-c     kernel in addition to those which are pre-defined.
-f     This is a fictitious routine which does not actually
-f     exist. Instead, this description constitutes a template so that
-f     you may implement a routine with this interface for yourself
-f     (and give it any name you wish). Such a routine
-f     may be passed via the FINTERP argument of the AST_RESAMPLE<X>
-f     functions (q.v.) in order to supply a 1-dimensional
-f     interpolation kernel to the algorithm which performs sub-pixel
-f     interpolation during resampling of gridded data (you must also
-f     set the INTERP argument of AST_RESAMPLE<X> to the value
-f     AST__UKERN1). This allows you to use your own interpolation
-f     kernel in addition to those which are pre-defined.
-*
-c     The function calculates the value of a 1-dimensional sub-pixel
-f     The routine calculates the value of a 1-dimensional sub-pixel
-*     interpolation kernel. This determines how the weight given to
-*     neighbouring pixels in calculating an interpolated value depends
-*     on the pixel's offset from the interpolation point. In more than
-*     one dimension, the weight assigned to a pixel is formed by
-*     evaluating this 1-dimensional kernel using the offset along each
-*     dimension in turn. The product of the returned values is then
-*     used as the pixel weight.
-
-*  Parameters:
-c     offset
-f     OFFSET = DOUBLE PRECISION (Given)
-*        This will be the offset of the pixel from the interpolation
-*        point, measured in pixels. This value may be positive or
-*        negative, but for most practical interpolation schemes its
-*        sign should be ignored.
-c     params
-f     PARAMS( * ) = DOUBLE PRECISION (Given)
-c        This will be a pointer to the same array as was given via the
-c        "params" parameter of astResample<X>. You may use this to
-f        This will be the same array as was given via the
-f        PARAMS argument of AST_RESAMPLE<X>. You may use this to
-*        pass any additional parameter values required by your kernel,
-c        but note that "params[0]" will already have been used to specify
-f        but note that PARAMS(1) will already have been used to specify
-*        the number of neighbouring pixels which contribute to the
-*        interpolated value.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        This will be the same value as was given via the "flags"
-c        parameter of astResample<X>. You may test this value to
-f        This will be the same value as was given via the FLAGS
-f        argument of AST_RESAMPLE<X>. You may test this value to
-*        provide additional control over the operation of your
-c        function. Note that the special flag values AST__URESAMP1, 2,
-f        routine. Note that the special flag values AST__URESAMP1, 2,
-*        3 & 4 are reserved for you to use for your own purposes and
-*        will not clash with other pre-defined flag
-c        values (see astResample<X>).
-f        values (see AST_RESAMPLE<X>).
-c     value
-f     VALUE = DOUBLE PRECISION (Returned)
-c        Pointer to a double to receive the calculated kernel value,
-f        The calculated kernel value,
-*        which may be positive or negative.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Not all functions make good interpolation kernels. In general,
-*     acceptable kernels tend to be symmetrical about zero, to have a
-*     positive peak (usually unity) at zero, and to evaluate to zero
-*     whenever the pixel offset has any other integral value (this
-*     ensures that the interpolated values pass through the original
-*     data). An interpolation kernel may or may not have regions with
-*     negative values. You should consult a good book on image
-*     processing for more details.
-c     - If an error occurs within this function, it should use
-c     astSetStatus to set the AST error status to an error value.
-c     This will cause an immediate return from astResample<X>. The error
-c     value AST__UK1ER is available for this purpose, but other values may
-c     also be used (e.g. if you wish to distinguish different types of
-c     error).
-f     - If an error occurs within this routine, it should set the
-f     STATUS argument to an error value before returning. This will
-f     cause an immediate return from AST_RESAMPLE<X>. The error value
-f     AST__UK1ER is available for this purpose, but other values may also
-f     be used (e.g. if you wish to distinguish different types of error).
-f     The AST__UK1ER error value is defined in the AST_ERR include file.
-*--
-*/
-/* Note the above is just a description to act as a template. The
-   function does not actually exist. */
-
-static double UphillSimplex( const MapData *mapdata, double acc, int maxcall,
-                             const double dx[], double xmax[], double *err,
-                             int *ncall, int *status ) {
-/*
-*  Name:
-*     UphillSimplex
-
-*  Purpose:
-*     Find a function maximum using a modification of the simplex method.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     double UphillSimplex( const MapData *mapdata, double acc, int maxcall,
-*                           const double dx[], double xmax[], double *err,
-*                           int *ncall, int *status );
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function applies a modification of the simplex method to
-*     find a local maximum in the value returned by a Mapping
-*     function. The modification used allows the method to cope with
-*     coordinate constraints and (equivalently) regions where the
-*     function returns "bad" values. The method is robust and not
-*     susceptible to overflow, so is suitable for applying to Mapping
-*     functions of unknown form.
-
-*  Parameters:
-*     mapdata
-*        Pointer to a MapData structure which describes the Mapping
-*        function, its coordinate constraints, etc.
-*     acc
-*        The accuracy required in the value of the maximum.
-*     maxcall
-*        The maximum number of Mapping function evaluations to use.
-*     dx
-*        Pointer to an array of double containing an offset along each
-*        input coordinate for the Mapping function supplied. These
-*        offsets will be used to construct the initial simplex
-*        (i.e. they are the initial "step lengths" for each
-*        coordinate) and may be positive or negative.
-*     xmax
-*        Pointer to an array of double which contains the coordinates
-*        of an initial estimate of the location of the maximum. On
-*        exit, this will be updated to contain the best estimate of
-*        the location of the maximum as generated by this function.
-*     err
-*        Pointer to a double in which to return an estimate of the
-*        error in the value of the maximum found. For normal
-*        convergence, this should be no larger than "acc". However, if
-*        the maximum number of Mapping function evaluations is
-*        reached, the returned value may be larger than this, although
-*        it should still be valid. In such cases, re-starting the
-*        algorithm at the new location returned in "xmax" may be
-*        advisable.
-*     ncall
-*        Pointer to an int in which the number of Mapping function
-*        evaluations will be returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     An estimate of the Mapping function value at the local maximum.
-
-*  Notes:
-*     - The function may return before the requested accuracy has been
-*     met and before all Mapping function evaluations have been
-*     made. This signifies that an excessive number of function values
-*     have been needed outside the coordinate constraints. This is
-*     only likely if the function is unable to make progress near such
-*     a constraint, in which case the algorithm should probably be
-*     re-started.
-*     - A value of AST__BAD will be returned if no maximum could be
-*     found.  This means that all the Mapping function evaluations
-*     performed returned a value of AST__BAD.
-*     - A value of AST__BAD will also be returned and no useful
-*     information about a solution will be produced if this routine is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Constants: */
-   const double factor = 3.0;    /* Simplex contraction/expansion factor */
-
-/* Local Variables: */
-   double *f;                    /* Pointer to array of function values */
-   double *x;                    /* Pointer to array of vertex coordinates */
-   double *xnew;                 /* Pointer to workspace array */
-   double fnew;                  /* New function value */
-   double fsave;                 /* Saved function value */
-   double offset;                /* Coordinate difference between vertices */
-   double range;                 /* Range of simplex values */
-   double result;                /* Value to return */
-   double tmp;                   /* Temporary store for coordinate */
-   int coord;                    /* Loop counter for coordinates */
-   int hi;                       /* Index of best vertex */
-   int lo;                       /* Index of worst vertex */
-   int ncalla;                   /* Number of function calls attempted */
-   int ncoord;                   /* Number of function dimensions */
-   int nextlo;                   /* Index of second worst vertex */
-   int nvertex;                  /* Number of simplex vertices */
-   int vertex;                   /* Loop counter for vertices */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   *err = DBL_MAX;
-   *ncall = 0;
-
-/* Obtain the number of input coordinates for the Mapping function and
-   calculate the number of simplex vertices. */
-   ncoord = mapdata->nin;
-   nvertex = ncoord + 1;
-
-/* Allocate workspace. */
-   f = astMalloc( sizeof( double ) * (size_t) nvertex );
-   x = astMalloc( sizeof( double ) * (size_t) ( ncoord * nvertex ) );
-   xnew = astMalloc( sizeof( double ) * (size_t) ncoord );
-   if ( astOK ) {
-
-/* Loop to set up an initial simplex. */
-      for ( vertex = 0; vertex < nvertex; vertex++ ) {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            tmp = xmax[ coord ];
-
-/* Displace each point (except the first) the required amount along
-   one of the axes to generate the coordinates of the simplex
-   vertices. */
-            if ( coord == ( vertex - 1 ) ) tmp += dx[ coord ];
-            x[ vertex * ncoord + coord ] = tmp;
-         }
-
-/* Evaluate the Mapping function at each vertex. */
-         f[ vertex ] = MapFunction( mapdata, &x[ vertex * ncoord ], ncall, status );
-         if ( f[ vertex ] == AST__BAD ) f[ vertex ] = -DBL_MAX;
-      }
-
-/* Initialise the number of times we attempt to call the Mapping
-   function (not necessarily the same as the number of times it was
-   actually called, which is stored in *ncall). */
-      ncalla = nvertex;
-
-/* Loop until convergence is reached or an error occurs. */
-      while( astOK ) {
-
-/* Initialise the index of the lowest vertex of the simplex, the next
-   lowest vertex and the highest vertex. */
-         lo = ( f[ 0 ] < f[ 1 ] ) ? 0 : 1;
-         nextlo = 1 - lo;
-         hi = 0;
-
-/* Loop to inspect each vertex and update these values. Ensure that in
-   the case of equal vertices, the first one is taken to be the
-   highest. This makes the maximisation stable (so that if no better
-   maximum can be found, the original position is returned rather than
-   a nearby position that yields the same function value). */
-         for ( vertex = 0; vertex < nvertex; vertex++ ) {
-            if ( f[ vertex ] <= f[ lo ] ) {
-               nextlo = lo;
-               lo = vertex;
-            } else if ( ( f[ vertex ] <= f[ nextlo ] ) && ( vertex != lo ) ) {
-               nextlo = vertex;
-            }
-            if ( f[ vertex ] > f[ hi ] ) hi = vertex;
-         }
-
-/* Estimate the error on the result as the difference between the
-   highest and lowest simplex vertices. */
-         if ( ( f[ hi ] == -DBL_MAX ) || ( f[ lo ] == -DBL_MAX ) ) {
-            range = DBL_MAX;
-         } else {
-            range = f[ hi ] - f[ lo ];
-         }
-
-/* Test for convergence. Ideally, the accuracy criterion should have
-   been met. However, also quit if the maximum number of Mapping
-   function evaluations has been reached, or the number of points at
-   which function values have been requested reaches three times this
-   limit (this latter number will typically be larger because points
-   lying outside the coordinate constraints do not result in the
-   Mapping function being evaluated). */
-         if ( range <= fabs( acc ) ||
-              ( *ncall >= maxcall ) || ( ncalla >= ( 3 * maxcall ) ) ) {
-
-/* If quitting, return the coordinates and function value at the best
-   simplex vertex, and the error estimate. */
-            for ( coord = 0; coord < ncoord; coord++ ) {
-               xmax[ coord ] = x[ hi * ncoord + coord ];
-            }
-            result = ( f[ hi ] == -DBL_MAX ) ? AST__BAD : f[ hi ];
-            *err = range;
-            break;
-         }
-
-/* If performing another iteration, first try reflecting the worst
-   vertex through the opposite face of the simplex. Check for
-   errors. */
-         fnew = NewVertex( mapdata, lo, -1.0, x, f, ncall, xnew, status );
-         ncalla++;
-         if ( astOK ) {
-
-/* If this results in a point lying in a forbiddden region (either
-   outside the coordinate constraints or where the Mapping function
-   yields bad coordinate values), then we must make a departure from
-   the standard simplex algorithm. This is because the inability to
-   make forward progress in this case can cause the simplex to
-   repeatedly contract about each face (except one) in turn. This
-   mechanism normally results in lateral contraction as the simplex
-   attempts to squeeze through a narrow gap which is impeding
-   progress. However, in this case there is no gap to get through, so
-   the lateral contraction can eventually make the simplex become
-   degenerate (due to rounding). This prevents it from expanding
-   laterally again and exploring the region adjacent to the constraint
-   boundary once it has become small enough. */
-            if ( fnew == AST__BAD ) {
-
-/* To overcome this, we instead contract the worst simplex vertex
-   towards the best vertex (this has the cumulative effect of
-   contracting the simplex without changing its shape). First find the
-   offset in each coordinate between these two vertices. */
-               for ( coord = 0; coord < ncoord; coord++ ) {
-                  offset = x[ lo * ncoord + coord ] - x[ hi * ncoord + coord ];
-
-/* Scale the offset to obtain the new coordinate. */
-                  x[ lo * ncoord + coord ] = x[ hi * ncoord + coord ] +
-                                             offset / factor;
-
-/* If the distance between the two vertices has not decreased, we are
-   in a region where rounding errors prevent them approaching each
-   other any more closely, so simply set them equal. */
-                  if ( fabs( x[ lo * ncoord + coord ] -
-                             x[ hi * ncoord + coord ] ) >= fabs( offset ) ) {
-                     x[ lo * ncoord + coord ] = x[ hi * ncoord + coord ];
-                  }
-               }
-
-/* Evaluate the Mapping function at the new vertex. */
-               f[ lo ] = MapFunction( mapdata, &x[ lo * ncoord ], ncall, status );
-               if ( f[ lo ] == AST__BAD ) f[ lo ] = -DBL_MAX;
-               ncalla++;
-
-/* We now return to the standard simplex algorithm. If the new vertex
-   is a new maximum, then see if more of the same is even better by
-   trying to expand the best vertex away from the opposite face. */
-            } else if ( fnew >= f[ hi ] ) {
-               fnew = NewVertex( mapdata, lo, factor, x, f, ncall, xnew, status );
-               ncalla++;
-
-/* Otherwise, if the new vertex was no improvement on the second
-   worst, then try contracting the worst vertex towards the opposite
-   face. */
-            } else if ( fnew <= f[ nextlo ] ) {
-               fsave = f[ lo ];
-               fnew = NewVertex( mapdata, lo, 1.0 / factor, x, f, ncall, xnew, status );
-               ncalla++;
-
-/* If this didn't result in any improvement, then contract the entire
-   simplex towards the best vertex. Use the same approach as earlier
-   to protect against rounding so that all the simplex vertices will
-   eventually coalesce if this process is repeated enough times. */
-               if ( astOK && ( fnew <= fsave ) ) {
-                  for ( vertex = 0; vertex < nvertex; vertex++ ) {
-                     if ( vertex != hi ) {
-                        for ( coord = 0; coord < ncoord; coord++ ) {
-                           offset = x[ vertex * ncoord + coord ] -
-                                    x[ hi * ncoord + coord ];
-                           x[ vertex * ncoord + coord ] =
-                               x[ hi * ncoord + coord ] + offset / factor;
-                           if ( fabs( x[ vertex * ncoord + coord ] -
-                                      x[ hi * ncoord + coord ] ) >=
-                                fabs( offset ) ) {
-                              x[ vertex * ncoord + coord ] =
-                                 x[ hi * ncoord + coord ];
-                           }
-                        }
-
-/* Evaluate the Mapping function at each new vertex. */
-                        f[ vertex ] = MapFunction( mapdata,
-                                                   &x[ vertex * ncoord ],
-                                                   ncall, status );
-                        if ( f[ vertex ] == AST__BAD ) f[ vertex ] = -DBL_MAX;
-                        ncalla++;
-                     }
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Free workspace. */
-   f = astFree( f );
-   x = astFree( x );
-   xnew = astFree( xnew );
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static void ValidateMapping( AstMapping *this, int forward,
-                             int npoint, int ncoord_in, int ncoord_out,
-                             const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateMapping
-
-*  Purpose:
-*     Validate a Mapping for use to transform coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void ValidateMapping( AstMapping *this, int forward,
-*                           int npoint, int ncoord_in, int ncoord_out,
-*                           const char *method, int *status )
-
-*  Class Membership:
-*     Mapping member function.
-
-*  Description:
-*     This function checks that a Mapping is suitable for transforming
-*     a set of points. It also checks that the number of points and
-*     the number of coordinate values per point is valid. If an error
-*     is detected, the global error status is set and an error report
-*     made. Otherwise, the function returns without further action.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     forward
-*        A non-zero value indicates that the forward coordinate
-*        transformation is to be checked, while a zero value requests
-*        the inverse transformation.
-*     npoint
-*        The number of points being transformed.
-*     ncoord_in
-*        The number of coordinates associated with each input point.
-*     ncoord_out
-*        The number of coordinates associated with each output point.
-*     method
-*        Pointer to a null terminated character string containing the
-*        name of the method which invoked this function to validate a
-*        Mapping. This is used solely for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int nin;                    /* Mapping Nin attribute value */
-   int nout;                   /* Mapping Nout attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Report an error if the requested transformation is not defined. */
-   if ( !( forward ? astGetTranForward( this ) : astGetTranInverse( this ) )
-        && astOK ) {
-      astError( AST__TRNND, "%s(%s): %s coordinate transformation "
-                "is not defined by the %s supplied.", status, method,
-                astGetClass( this ),
-                ( forward ? "A forward" : "An inverse" ),
-                astGetClass( this ) );
-   }
-
-/* Obtain the effective values of the Nin and Nout attributes for the
-   Mapping. */
-   nin = forward ? astGetNin( this ) : astGetNout( this );
-   nout = forward ? astGetNout( this ) : astGetNin( this );
-
-/* If OK, check that the number of input coordinates matches the
-   number required by the Mapping. Report an error if these numbers do
-   not match. */
-   if ( astOK && ( ncoord_in != nin ) ) {
-      astError( AST__NCPIN, "%s(%s): Bad number of input coordinate values "
-                "(%d).", status, method, astGetClass( this ), ncoord_in );
-      astError( AST__NCPIN, "The %s given requires %d coordinate value%s for "
-                "each input point.", status, astGetClass( this ), nin,
-                ( nin == 1 ) ? "" : "s" );
-   }
-
-/* If OK, also check that the number of output coordinates matches the
-   number required by the Mapping. Report an error if these numbers do
-   not match. */
-   if ( astOK && ( ncoord_out != nout ) ) {
-      astError( AST__NCPIN, "%s(%s): Bad number of output coordinate values "
-                "(%d).", status, method, astGetClass( this ), ncoord_out );
-      astError( AST__NCPIN, "The %s given generates %s%d coordinate value%s "
-                "for each output point.", status, astGetClass( this ),
-                ( nout < ncoord_out ) ? "only " : "", nout,
-                ( nout == 1 ) ? "" : "s" );
-   }
-
-/* Check that the number of points being transformed is not negative
-   and report an error if necessary. */
-   if ( astOK && ( npoint < 0 ) ) {
-      astError( AST__NPTIN, "%s(%s): Number of points to be transformed (%d) "
-                "is invalid.", status, method, astGetClass( this ), npoint );
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. */
-/*
-*att++
-*  Name:
-*     Invert
-
-*  Purpose:
-*     Mapping inversion flag.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls which one of a Mapping's two possible
-*     coordinate transformations is considered the "forward"
-*     transformation (the other being the "inverse"
-*     transformation). If the attribute value is zero (the default),
-*     the Mapping's behaviour will be the same as when it was first
-*     created. However, if it is non-zero, its two transformations
-*     will be inter-changed, so that the Mapping displays the inverse
-*     of its original behaviour.
-*
-*     Inverting the boolean sense of the Invert attribute will cause
-*     the values of a Mapping's Nin and Nout attributes to be
-*     interchanged. The values of its TranForward and TranInverse
-*     attributes will also be interchanged. This operation may be
-c     performed with the astInvert function.
-f     performed with the AST_INVERT routine.
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     UnitMap
-*        The value of the Invert attribute has no effect on the
-*        behaviour of a UnitMap.
-*     FrameSet
-*        Inverting the boolean sense of the Invert attribute for a
-*        FrameSet will cause its base and current Frames (and its Base
-*        and Current attributes) to be interchanged. This, in turn,
-*        may affect other properties and attributes of the FrameSet
-*        (such as Nin, Nout, Naxes, TranForward, TranInverse,
-*        etc.). The Invert attribute of a FrameSet is not itself
-*        affected by selecting a new base or current Frame.
-*att--
-*/
-/* This ia a boolean value (0 or 1) with a value of CHAR_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(Mapping,Invert,invert,CHAR_MAX)
-astMAKE_GET(Mapping,Invert,int,0,( ( this->invert == CHAR_MAX ) ?
-                                   0 : this->invert ))
-astMAKE_SET(Mapping,Invert,int,invert,( this->issimple=0,(value!=0) ))
-astMAKE_TEST(Mapping,Invert,( this->invert != CHAR_MAX ))
-
-/*
-*att++
-*  Name:
-*     IsLinear
-
-*  Purpose:
-*     Is the Mapping linear?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean), read-only.
-
-*  Description:
-*     This attribute indicates whether a Mapping is an instance of a
-*     class that always represents a linear transformation. Note, some 
-*     Mapping classes can represent linear or non-linear transformations
-*     (the MathMap class for instance). Such classes have a zero value for 
-*     the IsLinear attribute. Specific instances of such classes can be
-*     tested for linearity using the
-*     astLinearApprox function.
-*     AST_LINEARAPPROX routine.
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     CmpMap
-*        The IsLinear value for a CmpMap is determined by the classes
-*        of the encapsulated Mappings. For instance, a CmpMap that combines
-*        a ZoomMap and a ShiftMap will have a non-zero value for its IsLinear
-*        attribute, but a CmpMap that contains a MathMap will have a
-*        value of zero for its IsLinear attribute.
-*     Frame
-*        The IsLinear value for a Frame is 1 (since a Frame is equivalent
-*        to a UnitMap).
-*     FrameSet
-*        The IsLinear value for a FrameSet is obtained from the Mapping
-*        from the base Frame to the current Frame.
-
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     IsSimple
-
-*  Purpose:
-*     Has the Mapping been simplified?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean), read-only.
-
-*  Description:
-*     This attribute indicates whether a Mapping has been simplified
-*     by the 
-c     astSimplify
-f     AST_SIMPLIFY
-*     method. If the IsSimple value is non-zero, then the Mapping has
-*     been simplified and so there is nothing to be gained by simplifying
-*     it again. Indeed, the
-c     astSimplify
-f     AST_SIMPLIFY
-*     method will immediately return the Mapping unchanged if the IsSimple 
-*     attribute indicates that the Mapping has already been simplified.
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     Frame
-*        All classes of Frame return zero for the IsSimple attribute.
-*        This is because changes can be made to a Frame which affect the
-*        Mapping represented by the Frame, and so there can be no
-*        guarantee that the Mapping may not need re-simplifying. Most
-*        non-Frame Mappings, on the other hand, are immutable and so when
-*        they are simplified it is certain that they weill remain in a
-*        simple state.
-
-*att--
-*/
-astMAKE_GET(Mapping,IsSimple,int,0,this->issimple)
-
-/*
-*att++
-*  Name:
-*     Nin
-
-*  Purpose:
-*     Number of input coordinates for a Mapping.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the number of coordinate values required to
-*     specify an input point for a Mapping (i.e. the number of
-*     dimensions of the space in which the Mapping's input points
-*     reside).
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     CmpMap
-*        If a CmpMap's component Mappings are joined in series, then
-*        its Nin attribute is equal to the Nin attribute of the first
-*        component (or to the Nout attribute of the second component
-*        if the the CmpMap's Invert attribute is non-zero).
-*
-*        If a CmpMap's component Mappings are joined in parallel, then
-*        its Nin attribute is given by the sum of the Nin attributes
-*        of each component (or to the sum of their Nout attributes if
-*        the CmpMap's Invert attribute is non-zero).
-*     Frame
-*        The Nin attribute for a Frame is always equal to the number
-*        of Frame axes (Naxes attribute).
-*     FrameSet
-*        The Nin attribute of a FrameSet is equal to the number of
-*        axes (Naxes attribute) of its base Frame (as specified by the
-*        FrameSet's Base attribute). The Nin attribute value may
-*        therefore change if a new base Frame is selected.
-*att-- 
-*/
-
-/*
-*att++
-*  Name:
-*     Nout
-
-*  Purpose:
-*     Number of output coordinates for a Mapping.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the number of coordinate values generated
-*     by a Mapping to specify each output point (i.e. the number of
-*     dimensions of the space in which the Mapping's output points
-*     reside).
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     CmpMap
-*        If a CmpMap's component Mappings are joined in series, then
-*        its Nout attribute is equal to the Nout attribute of the
-*        second component (or to the Nin attribute of the first
-*        component if the the CmpMap's Invert attribute is non-zero).
-*
-*        If a CmpMap's component Mappings are joined in parallel, then
-*        its Nout attribute is given by the sum of the Nout attributes
-*        of each component (or to the sum of their Nin attributes if
-*        the CmpMap's Invert attribute is non-zero).
-*     Frame
-*        The Nout attribute for a Frame is always equal to the number
-*        of Frame axes (Naxes attribute).
-*     FrameSet
-*        The Nout attribute of a FrameSet is equal to the number of
-*        FrameSet axes (Naxes attribute) which, in turn, is equal to
-*        the Naxes attribute of the FrameSet's current Frame (as
-*        specified by the Current attribute). The Nout attribute value
-*        may therefore change if a new current Frame is selected.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     Report
-
-*  Purpose:
-*     Report transformed coordinates?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls whether coordinate values are reported
-*     whenever a Mapping is used to transform a set of points. If its
-*     value is zero (the default), no report is made. However, if it
-*     is non-zero, the coordinates of each point are reported (both
-*     before and after transformation) by writing them to standard
-*     output.
-*
-*     This attribute is provided as an aid to debugging, and to avoid
-*     having to report values explicitly in simple programs.
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     CmpMap
-*        When applied to a compound Mapping (CmpMap), only the Report
-*        attribute of the CmpMap, and not those of its component
-*        Mappings, is used.  Coordinate information is never reported
-*        for the component Mappings individually, only for the
-*        complete CmpMap.
-*     Frame
-*        When applied to any Frame, the formatting capabilities of the
-c        Frame (as provided by the astFormat function) will be used to
-f        Frame (as provided by the AST_FORMAT function) will be used to
-*        format the reported coordinates.
-*     FrameSet
-*        When applied to any FrameSet, the formatting capabilities of
-*        the base and current Frames will be used (as above) to
-*        individually format the input and output coordinates, as
-*        appropriate. The Report attribute of a FrameSet is not itself
-*        affected by selecting a new base or current Frame, but the
-*        resulting formatting capabilities may be.
-
-*  Notes:
-*     - Unlike most other attributes, the value of the Report
-*     attribute is not transferred when a Mapping is copied. Instead,
-*     its value is undefined (and therefore defaults to zero) in any
-*     copy. Similarly, it becomes undefined in any external
-c     representation of a Mapping produced by the astWrite function.
-f     representation of a Mapping produced by the AST_WRITE routine.
-*att--
-*/
-/* This ia a boolean value (0 or 1) with a value of CHAR_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(Mapping,Report,report,CHAR_MAX)
-astMAKE_GET(Mapping,Report,int,0,( ( this->report == CHAR_MAX ) ?
-                                   0 : this->report ))
-astMAKE_SET(Mapping,Report,int,report,( value != 0 ))
-astMAKE_TEST(Mapping,Report,( this->report != CHAR_MAX ))
-
-/*
-*att++
-*  Name:
-*     TranForward
-
-*  Purpose:
-*     Forward transformation defined?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean), read-only.
-
-*  Description:
-*     This attribute indicates whether a Mapping is able to transform
-*     coordinates in the "forward" direction (i.e. converting input
-*     coordinates into output coordinates). If this attribute is
-*     non-zero, the forward transformation is available. Otherwise, it
-*     is not.
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     CmpMap
-*        The TranForward attribute value for a CmpMap is given by the
-*        boolean AND of the value for each component Mapping.
-*     FrameSet
-*        The TranForward attribute of a FrameSet applies to the
-*        transformation which converts between the FrameSet's base
-*        Frame and its current Frame (as specified by the Base and
-*        Current attributes). This value is given by the boolean AND
-*        of the TranForward values which apply to each of the
-*        individual sub-Mappings required to perform this conversion.
-*        The TranForward attribute value for a FrameSet may therefore
-*        change if a new Base or Current Frame is selected.
-
-*  Notes:
-*     - An error will result if a Mapping with a TranForward value of
-*     zero is used to transform coordinates in the forward direction.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     TranInverse
-
-*  Purpose:
-*     Inverse transformation defined?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean), readonly.
-
-*  Description:
-*     This attribute indicates whether a Mapping is able to transform
-*     coordinates in the "inverse" direction (i.e. converting output
-*     coordinates back into input coordinates). If this attribute is
-*     non-zero, the inverse transformation is available. Otherwise, it
-*     is not.
-
-*  Applicability:
-*     Mapping
-*        All Mappings have this attribute.
-*     CmpMap
-*        The TranInverse attribute value for a CmpMap is given by the
-*        boolean AND of the value for each component Mapping.
-*     FrameSet
-*        The TranInverse attribute of a FrameSet applies to the
-*        transformation which converts between the FrameSet's current
-*        Frame and its base Frame (as specified by the Current and
-*        Base attributes). This value is given by the boolean AND of
-*        the TranInverse values which apply to each of the individual
-*        sub-Mappings required to perform this conversion.
-*        The TranInverse attribute value for a FrameSet may therefore
-*        change if a new Base or Current Frame is selected.
-
-*  Notes:
-*     - An error will result if a Mapping with a TranInverse value of
-*     zero is used to transform coordinates in the inverse direction.
-*att--
-*/
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Mapping objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Mapping objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the Mapping to be copied.
-*     objout
-*        Pointer to the Mapping being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This constructor exists simply to ensure that the "Report"
-*     attribute is cleared in any copy made of a Mapping.
-*/
-
-/* Local Variables: */
-   AstMapping *out;              /* Pointer to output Mapping */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the output Mapping. */
-   out = (AstMapping *) objout;
-
-/* Clear the output Report attribute. */
-   out->report = CHAR_MAX;
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Mapping objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Mapping objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the Mapping to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This destructor does nothing and exists only to maintain a
-*     one-to-one correspondence between destructors and copy
-*     constructors.
-*/
-
-/* Return without action. */
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Mapping objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Mapping class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstMapping *this;             /* Pointer to the Mapping structure */
-   int invert;                   /* Mapping inverted? */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Mapping structure. */
-   this = (AstMapping *) this_object;
-
-/* Write out values representing the instance variables for the
-   Mapping class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Determine if the Mapping is inverted. The output values
-   (e.g. number of input and output coordinates) will refer to the
-   Mapping ***before*** this inversion flag is applied, but we need it
-   when using (e.g.) the astGetNin/astGetNout methods to determine
-   which one will return the required value. */
-   invert = astGetInvert( this );
-
-/* (NB. there is a subtle point here that dictates the extent to which
-   this inversion flag can be used... All use of methods (such as
-   astGetInvert, which might be over-ridden by derived classes) must
-   be restricted to determining the values of "unset" output
-   quantities only (below). This is because when re-loading the
-   Mapping, the derived classes will not have been loaded at the point
-   when these values are re-read - hence any value whose
-   interpretation depends on these methods cannot be reliably
-   recovered.) */
-
-/* Nin. */
-/* ---- */
-/* Use the instance variable directly to avoid the effect of the
-   Invert attribute on the private member function. Treat zero as the
-   default. */
-   set = ( this->nin != 0 );
-   ival = set ? this->nin : ( !invert ? astGetNin( this ) :
-                                        astGetNout( this ) );
-   astWriteInt( channel, "Nin", set, 0, ival,
-                "Number of input coordinates" );
-
-/* Nout. */
-/* ----- */
-/* Use the instance variable directly. Treat zero as the default. */
-   set = ( this->nout != this->nin );
-   ival = set ? this->nout : ( !invert ? astGetNout( this ) :
-                                         astGetNin( this ) );
-   astWriteInt( channel, "Nout", set, 0, ival,
-                "Number of output coordinates" );
-
-/* IsSimple. */
-/* --------- */
-   ival = astGetIsSimple( this );
-   astWriteInt( channel, "IsSimp", ival, 0, ival,
-                ival ? "Mapping has been simplified" : 
-                       "Mapping has not been simplified" );
-
-/* Invert. */
-/* ------- */
-   set = TestInvert( this, status );
-   ival = set ? GetInvert( this, status ) : astGetInvert( this );
-   astWriteInt( channel, "Invert", set, 0, ival,
-                ival ? "Mapping inverted" :
-                       "Mapping not inverted" );
-
-/* TranForward. */
-/* ------------ */
-/* Use the instance variable directly. Treat 1 as the default. */
-   set = ( this->tran_forward == 0 );
-   ival = set ? this->tran_forward : ( !invert ? astGetTranForward( this ) :
-                                                 astGetTranInverse( this ) );
-   astWriteInt( channel, "Fwd", set, 0, ival,
-                ival ? "Forward transformation defined" :
-                       "Forward transformation not defined" );
-
-/* TranInverse. */
-/* ------------ */
-/* Use the instance variable directly. Treat 1 as the default. */
-   set = ( this->tran_inverse == 0 );
-   ival = set ? this->tran_inverse : ( !invert ? astGetTranInverse( this ) :
-                                                 astGetTranForward( this ) );
-   astWriteInt( channel, "Inv", set, 0, ival,
-                ival ? "Inverse transformation defined" :
-                       "Inverse transformation not defined" );
-
-/* Report. */
-/* ------- */
-   set = TestReport( this, status );
-   ival = set ? GetReport( this, status ) : astGetReport( this );
-   astWriteInt( channel, "Report", set, 0, ival,
-                ival ? "Report coordinate transformations" :
-                       "Don't report coordinate transformations" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAMapping and astCheckMapping functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Mapping,Object)
-astMAKE_CHECK(Mapping)
-
-AstMapping *astInitMapping_( void *mem, size_t size, int init,
-                             AstMappingVtab *vtab, const char *name,
-                             int nin, int nout,
-                             int tran_forward, int tran_inverse, int *status ) {
-/*
-*+
-*  Name:
-*     astInitMapping
-
-*  Purpose:
-*     Initialise a Mapping.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     AstMapping *astInitMapping( void *mem, size_t size, int init,
-*                                 AstMappingVtab *vtab, const char *name,
-*                                 int nin, int nout,
-*                                 int tran_forward, int tran_inverse )
-
-*  Class Membership:
-*     Mapping initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Mapping object. It allocates memory (if necessary) to accommodate
-*     the Mapping plus any additional data associated with the derived class.
-*     It then initialises a Mapping structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Mapping at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Mapping is to be initialised.
-*        This must be of sufficient size to accommodate the Mapping data
-*        (sizeof(Mapping)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Mapping (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Mapping
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Mapping's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Mapping.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     nin
-*        The number of coordinate values per input point.
-*     nout
-*        The number of coordinate vales per output point.
-*     tran_forward
-*        A non-zero value indicates that the Mapping will be able to
-*        transform coordinates in the forward direction. A zero value
-*        indicates that it will not.
-*     tran_inverse
-*        A non-zero value indicates that the Mapping will be able to
-*        transform coordinates in the inverse direction. A zero value
-*        indicates that it will not.
-
-*  Returned Value:
-*     A pointer to the new Mapping.
-
-*  Notes:
-*     -  The Mappings produced by this function implement all the basic methods
-*     defined by the Mapping class. However, their astTransform method does not
-*     actually perform any coordinate transformation (although it performs all
-*     necessary argument validation and creates an output PointSet if
-*     necessary, leaving its coordinate values undefined).
-*     -  This means that Mappings produced by this function are of limited use
-*     on their own, but may easily be extended by a derived class simply by
-*     over-riding the astTransform method to add the necessary coordinate
-*     arithmetic.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to new Mapping */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitMappingVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the initialisation values for validity, reporting an error if
-   necessary. */
-   if ( nin < 0 ) {
-      astError( AST__BADNI, "astInitMapping(%s): Bad number of input "
-                "coordinates (%d).", status, name, nin );
-      astError( AST__BADNI, "This number should be zero or more." , status);
-   } else if ( nout < 0 ) {
-      astError( AST__BADNO, "astInitMapping(%s): Bad number of output "
-                "coordinates (%d).", status, name, nout );
-      astError( AST__BADNI, "This number should be zero or more." , status);
-   }
-
-/* Initialise an Object structure (the parent class) as the first component
-   within the Mapping structure, allocating memory if necessary. */
-   new = (AstMapping *) astInitObject( mem, size, 0,
-                                       (AstObjectVtab *) vtab, name );
-
-   if ( astOK ) {
-
-/* Initialise the Mapping data. */
-/* ---------------------------- */
-/* Store the numbers of input and output coordinates. */
-      new->nin = nin;
-      new->nout = nout;
-
-/* Store the flags indicating which coordinate transformations are
-   defined (constrain these values to 0 or 1). */
-      new->tran_forward = ( tran_forward != 0 );
-      new->tran_inverse = ( tran_inverse != 0 );
-
-/* Initialise other attributes to their undefined values. */
-      new->invert = CHAR_MAX;
-      new->report = CHAR_MAX;
-      new->issimple = 0;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstMapping *astLoadMapping_( void *mem, size_t size,
-                             AstMappingVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadMapping
-
-*  Purpose:
-*     Load a Mapping.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     AstMapping *astLoadMapping( void *mem, size_t size,
-*                                 AstMappingVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     Mapping loader.
-
-*  Description:
-*     This function is provided to load a new Mapping using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Mapping structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Mapping at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Mapping is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Mapping data (sizeof(Mapping)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Mapping (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Mapping structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstMapping) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Mapping. If this is NULL, a pointer
-*        to the (static) virtual function table for the Mapping class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Mapping" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Mapping.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *new;              /* Pointer to the new Mapping */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Mapping. In this case the
-   Mapping belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstMapping );
-      vtab = &class_vtab;
-      name = "Mapping";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitMappingVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Mapping. */
-   new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Mapping" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Nin. */
-/* ---- */
-      new->nin = astReadInt( channel, "nin", 0 );
-      if ( new->nin < 0 ) new->nin = 0;
-
-/* Nout. */
-/* ----- */
-      new->nout = astReadInt( channel, "nout", new->nin );
-      if ( new->nout < 0 ) new->nout = 0;
-
-/* Invert. */
-/* ------- */
-      new->invert = astReadInt( channel, "invert", CHAR_MAX );
-      if ( TestInvert( new, status ) ) SetInvert( new, new->invert, status );
-
-/* IsSimple. */
-/* --------- */
-      new->issimple = astReadInt( channel, "issimp", 0 );
-
-/* TranForward. */
-/* ------------ */
-      new->tran_forward = ( astReadInt( channel, "fwd", 1 ) != 0 );
-
-/* TranInverse. */
-/* ------------ */
-      new->tran_inverse = ( astReadInt( channel, "inv", 1 ) != 0 );
-
-/* Report. */
-/* ------- */
-      new->report = astReadInt( channel, "report", CHAR_MAX );
-      if ( TestReport( new, status ) ) SetReport( new, new->report, status );
-
-/* If an error occurred, clean up by deleting the new Mapping. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Mapping pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions
-   defined by this class. Each simply checks the global error status
-   and then locates and executes the appropriate member function,
-   using the function pointer stored in the object's virtual function
-   table (this pointer is located using the astMEMBER macro defined in
-   "object.h").
-
-   Note that the member function may not be the one defined here, as
-   it may have been over-ridden by a derived class. However, it should
-   still have the same interface. */
-
-void astDecompose_( AstMapping *this, AstMapping **map1, AstMapping **map2, 
-                    int *series, int *invert1, int *invert2, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,Decompose))( this, map1, map2, series, invert1, invert2, status );
-}
-int astGetNin_( AstMapping *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,GetNin))( this, status );
-}
-int astGetNout_( AstMapping *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,GetNout))( this, status );
-}
-int astGetIsLinear_( AstMapping *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,GetIsLinear))( this, status );
-}
-int astGetTranForward_( AstMapping *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,GetTranForward))( this, status );
-}
-int astGetTranInverse_( AstMapping *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,GetTranInverse))( this, status );
-}
-void astInvert_( AstMapping *this, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,Invert))( this, status );
-}
-void astMapBox_( AstMapping *this,
-                 const double lbnd_in[], const double ubnd_in[], int forward,
-                 int coord_out, double *lbnd_out, double *ubnd_out,
-                 double xl[], double xu[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,MapBox))( this, lbnd_in, ubnd_in, forward,
-                                       coord_out, lbnd_out, ubnd_out, xl, xu, status );
-}
-int astMapList_( AstMapping *this, int series, int invert, int *nmap,
-                  AstMapping ***map_list, int **invert_list, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,MapList))( this, series, invert,
-                                        nmap, map_list, invert_list, status );
-}
-int *astMapSplit_( AstMapping *this, int nin, const int *in, AstMapping **map, 
-                   int *status ){
-   if( map ) *map = NULL;
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Mapping,MapSplit))( this, nin, in, map, status );
-}
-int astMapMerge_( AstMapping *this, int where, int series, int *nmap,
-                  AstMapping ***map_list, int **invert_list, int *status ) {
-   if ( !astOK ) return -1;
-   return (**astMEMBER(this,Mapping,MapMerge))( this, where, series, nmap,
-                                                map_list, invert_list, status );
-}
-void astReportPoints_( AstMapping *this, int forward,
-                       AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,ReportPoints))( this, forward,
-                                             in_points, out_points, status );
-}
-#define MAKE_RESAMPLE_(X,Xtype) \
-int astResample##X##_( AstMapping *this, int ndim_in, const int *lbnd_in, \
-                       const int *ubnd_in, const Xtype *in, \
-                       const Xtype *in_var, int interp, \
-                       void (* finterp)(), const double *params, \
-                       int flags, double tol, int maxpix, Xtype badval, \
-                       int ndim_out, \
-                       const int *lbnd_out, const int *ubnd_out, \
-                       const int *lbnd, const int *ubnd, Xtype *out, \
-                       Xtype *out_var, int *status ) { \
-   if ( !astOK ) return 0; \
-   return (**astMEMBER(this,Mapping,Resample##X))( this, ndim_in, lbnd_in, \
-                                                   ubnd_in, in, in_var, \
-                                                   interp, finterp, params, \
-                                                   flags, tol, maxpix, \
-                                                   badval, ndim_out, \
-                                                   lbnd_out, ubnd_out, \
-                                                   lbnd, ubnd, \
-                                                   out, out_var, status ); \
-}
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_RESAMPLE_(LD,long double)
-#endif
-MAKE_RESAMPLE_(D,double)
-MAKE_RESAMPLE_(F,float)
-MAKE_RESAMPLE_(L,long int)
-MAKE_RESAMPLE_(UL,unsigned long int)
-MAKE_RESAMPLE_(I,int)
-MAKE_RESAMPLE_(UI,unsigned int)
-MAKE_RESAMPLE_(S,short int)
-MAKE_RESAMPLE_(US,unsigned short int)
-MAKE_RESAMPLE_(B,signed char)
-MAKE_RESAMPLE_(UB,unsigned char)
-#undef MAKE_RESAMPLE_
-
-#define MAKE_REBIN_(X,Xtype) \
-void astRebin##X##_( AstMapping *this, double wlim, int ndim_in, const int *lbnd_in, \
-                    const int *ubnd_in, const Xtype *in, \
-                    const Xtype *in_var, int interp, \
-                    const double *params, \
-                    int flags, double tol, int maxpix, Xtype badval, \
-                    int ndim_out, \
-                    const int *lbnd_out, const int *ubnd_out, \
-                    const int *lbnd, const int *ubnd, Xtype *out, \
-                    Xtype *out_var, int *status ) { \
-   if ( !astOK ) return; \
-   (**astMEMBER(this,Mapping,Rebin##X))( this, wlim, ndim_in, lbnd_in, \
-                                         ubnd_in, in, in_var, \
-                                         interp, params, \
-                                         flags, tol, maxpix, \
-                                         badval, ndim_out, \
-                                         lbnd_out, ubnd_out, \
-                                         lbnd, ubnd, \
-                                         out, out_var, status ); \
-}
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_REBIN_(LD,long double)
-#endif
-MAKE_REBIN_(D,double)
-MAKE_REBIN_(F,float)
-MAKE_REBIN_(I,int)
-#undef MAKE_REBIN_
-
-#define MAKE_REBINSEQ_(X,Xtype) \
-void astRebinSeq##X##_( AstMapping *this, double wlim, int ndim_in, const int *lbnd_in, \
-                        const int *ubnd_in, const Xtype *in, \
-                        const Xtype *in_var, int interp, \
-                        const double *params, \
-                        int flags, double tol, int maxpix, Xtype badval, \
-                        int ndim_out, \
-                        const int *lbnd_out, const int *ubnd_out, \
-                        const int *lbnd, const int *ubnd, Xtype *out, \
-                        Xtype *out_var, double *weights, int *nused, int *status ) { \
-   if ( !astOK ) return; \
-   (**astMEMBER(this,Mapping,RebinSeq##X))( this, wlim, ndim_in, lbnd_in, \
-                                         ubnd_in, in, in_var, \
-                                         interp, params, \
-                                         flags, tol, maxpix, \
-                                         badval, ndim_out, \
-                                         lbnd_out, ubnd_out, \
-                                         lbnd, ubnd, \
-                                         out, out_var, weights, nused, status ); \
-}
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_REBINSEQ_(LD,long double)
-#endif
-MAKE_REBINSEQ_(D,double)
-MAKE_REBINSEQ_(F,float)
-MAKE_REBINSEQ_(I,int)
-#undef MAKE_REBINSEQ_
-
-double astRate_( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-   astDECLARE_GLOBALS;
-
-   if ( !astOK ) return AST__BAD;
-
-   astGET_GLOBALS(this);
-
-   if( ax1 < 0 || ax1 >= astGetNout( this ) ) {
-      astError( AST__AXIIN, "astRate(%s): Invalid output index (%d) "
-                "specified - should be in the range 1 to %d.", status,
-                astGetClass( this ), ax1 + 1, astGetNout( this ) );
-      
-   } else if( ax2 < 0 || ax2 >= astGetNin( this ) ) {
-      astError( AST__AXIIN, "astRate(%s): Invalid input index (%d) "
-                "specified - should be in the range 1 to %d.", status,
-                astGetClass( this ), ax2 + 1, astGetNin( this ) );
-   }
-
-   if( rate_disabled ) {
-      return ( at[ ax2 ] != AST__BAD ) ? 1.0 : AST__BAD;
-   } else {    
-      return (**astMEMBER(this,Mapping,Rate))( this, at, ax1, ax2, status );
-   }   
-}
-AstMapping *astRemoveRegions_( AstMapping *this, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Mapping,RemoveRegions))( this, status );
-}
-AstMapping *astSimplify_( AstMapping *this, int *status ) {
-   AstMapping *result;
-   if ( !astOK ) return NULL;
-   if( !astGetIsSimple( this ) ) {      /* Only simplify if not already done */
-      result = (**astMEMBER(this,Mapping,Simplify))( this, status );
-      if( result ) result->issimple = 1;/* Indicate simplification has been done */
-   } else {
-      result = astClone( this );
-   }
-   return result;
-}
-AstPointSet *astTransform_( AstMapping *this, AstPointSet *in,
-                            int forward, AstPointSet *out, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Mapping,Transform))( this, in, forward, out, status );
-}
-void astTran1_( AstMapping *this, int npoint, const double xin[],
-                int forward, double xout[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,Tran1))( this, npoint, xin, forward, xout, status );
-}
-void astTran2_( AstMapping *this,
-                int npoint, const double xin[], const double yin[],
-                int forward, double xout[], double yout[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,Tran2))( this, npoint, xin, yin,
-                                      forward, xout, yout, status );
-}
-void astTranGrid_( AstMapping *this, int ncoord_in, const int lbnd[], 
-                   const int ubnd[], double tol, int maxpix, int forward, 
-                   int ncoord_out, int outdim, double *out, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,TranGrid))( this, ncoord_in, lbnd, ubnd, tol, 
-                                         maxpix, forward, ncoord_out, outdim, 
-                                         out, status );
-}
-void astTranN_( AstMapping *this, int npoint,
-                int ncoord_in, int indim, const double *in,
-                int forward, int ncoord_out, int outdim, double *out, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,TranN))( this, npoint,
-                                      ncoord_in, indim, in,
-                                      forward, ncoord_out, outdim, out, status );
-}
-void astTranP_( AstMapping *this, int npoint,
-                int ncoord_in, const double *ptr_in[],
-                int forward, int ncoord_out, double *ptr_out[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Mapping,TranP))( this, npoint,
-                                      ncoord_in, ptr_in,
-                                      forward, ncoord_out, ptr_out, status );
-}
-int astLinearApprox_( AstMapping *this, const double *lbnd, 
-                       const double *ubnd, double tol, double *fit, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Mapping,LinearApprox))( this, lbnd, ubnd, tol, fit, status );
-}
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-void DecomposeId_( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-void MapBoxId_( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-double astRateId_( AstMapping *, double *, int, int, int * );
-void astMapSplitId_( AstMapping *, int, const int *, int *, AstMapping **, 
-                     int * );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-void astDecomposeId_( AstMapping *this, AstMapping **map1, 
-                      AstMapping **map2, int *series, int *invert1, 
-                      int *invert2, int *status ) {
-/*
-*++
-*  Name:
-c     astDecompose
-f     AST_DECOMPOSE
-
-*  Purpose:
-*     Decompose a Mapping into two component Mappings.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astDecompose( AstMapping *this, AstMapping **map1, 
-c                        AstMapping **map2, int *series, int *invert1, 
-c                        int *invert2  ) 
-f     CALL AST_DECOMPOSE( THIS, MAP1, MAP2, SERIES, INVERT1, INVERT2, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function returns pointers to two Mappings which, when applied
-f     This routine returns pointers to two Mappings which, when applied
-*     either in series or parallel, are equivalent to the supplied Mapping.
-*
-*     Since the Frame class inherits from the Mapping class, Frames can
-*     be considered as special types of Mappings and so this method can
-*     be used to decompose either CmpMaps or CmpFrames.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping.
-c     map1
-f     MAP1 = INTEGER (Returned)
-c        Address of a location to receive a pointer to first component
-f        A pointer to first component
-*        Mapping. 
-c     map2
-f     MAP2 = INTEGER (Returned)
-c        Address of a location to receive a pointer to second component
-f        A pointer to second component
-*        Mapping. 
-c     series
-f     SERIES = LOGICAL (Returned)
-c        Address of a location to receive a value indicating if the
-c        component Mappings are applied in series or parallel. A non-zero
-c        value means that the supplied Mapping is equivalent to applying map1 
-c        followed by map2 in series. A zero value means that the supplied
-c        Mapping is equivalent to applying map1 to the lower numbered axes
-c        and map2 to the higher numbered axes, in parallel.
-f        Indicates if the
-f        component Mappings are applied in series or parallel. A .TRUE.
-f        value means that the supplied Mapping is equivalent to applying MAP1 
-f        followed by MAP2 in series. A zero value means that the supplied
-f        Mapping is equivalent to applying MAP1 to the lower numbered axes
-f        and MAP2 to the higher numbered axes, in parallel.
-c     invert1
-f     INVERT1 = INTEGER (Returned)
-c        The value of the Invert attribute to be used with map1. 
-f        The value of the Invert attribute to be used with MAP1. 
-c     invert2
-f     INVERT2 = INTEGER (Returned)
-c        The value of the Invert attribute to be used with map2. 
-f        The value of the Invert attribute to be used with MAP2. 
-
-*  Applicability:
-*     CmpMap
-c        If the supplied Mapping is a CmpMap, then map1 and map2 will be
-f        If the supplied Mapping is a CmpMap, then MAP1 and MAP2 will be
-*        returned holding pointers to the component Mappings used to
-*        create the CmpMap, either in series or parallel. Note, changing
-*        the Invert attribute of either of the component Mappings using
-*        the returned pointers will have no effect on the supplied CmpMap.
-*        This is because the CmpMap remembers and uses the original settings 
-*        of the Invert attributes (that is, the values of the Invert
-*        attributes when the CmpMap was first created). These are the
-c        Invert values which are returned in invert1 and invert2.
-f        Invert values which are returned in INVERT1 and INVERT2.
-*     TranMap
-c        If the supplied Mapping is a TranMap, then map1 and map2 will be
-f        If the supplied Mapping is a TranMap, then MAP1 and MAP2 will be
-*        returned holding pointers to the forward and inverse Mappings 
-*        represented by the TranMap (zero will be returned for
-c        series).
-f        SERIES).
-*        Note, changing the Invert attribute of 
-*        either of the component Mappings using the returned pointers will 
-*        have no effect on the supplied TranMap. This is because the TranMap 
-*        remembers and uses the original settings of the Invert attributes 
-*        (that is, the values of the Invert attributes when the TranMap was 
-*        first created). These are the
-c        Invert values which are returned in invert1 and invert2.
-f        Invert values which are returned in INVERT1 and INVERT2.
-*     Mapping
-c        For any class of Mapping other than a CmpMap, map1 will be
-c        returned holding a clone of the supplied Mapping pointer, and map2
-c        will be returned holding a NULL pointer. Invert1 will be returned
-c        holding the current value of the Invert attribute for the supplied 
-c        Mapping, and invert2 will be returned holding zero.
-f        For any class of Mapping other than a CmpMap, MAP1 will be
-f        returned holding a clone of the supplied Mapping pointer, and MAP2
-f        will be returned holding AST__NULL. INVERT1 will be returned
-f        holding the current value of the Invert attribute for the supplied 
-f        Mapping, and INVERT2 will be returned holding zero.
-*     CmpFrame
-c        If the supplied Mapping is a CmpFrame, then map1 and map2 will be
-f        If the supplied Mapping is a CmpFrame, then MAP1 and MAP2 will be
-*        returned holding pointers to the component Frames used to
-*        create the CmpFrame. The component Frames are considered to be in
-*        applied in parallel.
-*     Frame
-c        For any class of Frame other than a CmpFrame, map1 will be 
-c        returned holding a clone of the supplied Frame pointer, and map2
-c        will be returned holding a NULL pointer.
-f        For any class of Frame other than a CmpFrame, MAP1 will be 
-f        returned holding a clone of the supplied Frame pointer, and MAP2
-f        will be returned holding AST__NULL.
-
-*  Notes:
-*     - The returned Invert values should be used in preference to the 
-*     current values of the Invert attribute in map1 and map2. This is
-*     because the attributes may have changed value since the Mappings 
-*     were combined.
-*     - Any changes made to the component Mappings using the returned
-*     pointers will be reflected in the supplied Mapping. 
-
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the
-*     astDecompose method. It is identical to astDecompose_ except for
-*     the following:
-*
-*     - ID values are returned via the "map1" and "map2" parameters
-*     instead of true C pointers. This is required because this
-*     conversion cannot be performed by the macro that invokes the
-*     function.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the normal astDecompose_ function to decompose the Mapping. */
-      astDecompose( this, map1, map2, series, invert1, invert2 );
-
-/* If required, return ID values for the component Mappings. */
-   if ( map1 ) *map1 = astMakeId( *map1 );
-   if ( map2 ) *map2 = astMakeId( *map2 );
-
-}
-
-void astMapBoxId_( AstMapping *this,
-                   const double lbnd_in[], const double ubnd_in[],
-                   int forward, int coord_out,
-                   double *lbnd_out, double *ubnd_out,
-                   double xl[], double xu[], int *status ) {
-/*
-*++
-*  Name:
-c     astMapBox
-f     AST_MAPBOX
-
-*  Purpose:
-*     Find a bounding box for a Mapping.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astMapBox( AstMapping *this,
-c                     const double lbnd_in[], const double ubnd_in[],
-c                     int forward, int coord_out,
-c                     double *lbnd_out, double *ubnd_out,
-c                     double xl[], double xu[] );
-f     CALL AST_MAPBOX( THIS, LBND_IN, UBND_IN, FORWARD, COORD_OUT,
-f                      LBND_OUT, UBND_OUT, XL, XU, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function allows you to find the "bounding box" which just
-c     encloses another box after it has been transformed by a Mapping
-c     (using either its forward or inverse transformation). A typical
-c     use might be to calculate the size of an image after being
-c     transformed by a Mapping.
-f     This routine allows you to find the "bounding box" which just
-f     encloses another box after it has been transformed by a Mapping
-f     (using either its forward or inverse transformation). A typical
-f     use might be to calculate the size of an image after being
-f     transformed by a Mapping.
-*
-c     The function works on one dimension at a time. When supplied
-c     with the lower and upper bounds of a rectangular region (box) of
-c     input coordinate space, it finds the lowest and highest values
-c     taken by a nominated output coordinate within that
-c     region. Optionally, it also returns the input coordinates where
-c     these bounding values are attained. It should be used repeatedly
-c     to obtain the extent of the bounding box in more than one
-c     dimension.
-f     The routine works on one dimension at a time. When supplied with
-f     the lower and upper bounds of a rectangular region (box) of
-f     input coordinate space, it finds the lowest and highest values
-f     taken by a nominated output coordinate within that region. It
-f     also returns the input coordinates where these bounding values
-f     are attained. It should be used repeatedly to obtain the extent
-f     of the bounding box in more than one dimension.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping.
-c     lbnd_in
-f     LBND_IN( * ) = DOUBLE PRECISION (Given)
-c        Pointer to an array of double, with one element for each
-c        Mapping input coordinate. This should contain the lower bound
-c        of the input box in each input dimension.
-f        An array with one element for each Mapping input
-f        coordinate. This should contain the lower bound of the input
-f        box in each input dimension.
-c     ubnd_in
-f     UBND_IN( * ) = DOUBLE PRECISION (Given)
-c        Pointer to an array of double, with one element for each
-c        Mapping input coordinate. This should contain the upper bound
-c        of the input box in each input dimension.
-f        An array with one element for each Mapping input
-f        coordinate. This should contain the upper bound of the input
-f        box in each input dimension.
-*
-*        Note that it is permissible for the upper bound to be less
-*        than the corresponding lower bound, as the values will simply
-*        be swapped before use.
-c     forward
-f     FORWARD = LOGICAL (Given)
-c        If this value is non-zero, then the Mapping's forward
-c        transformation will be used to transform the input
-c        box. Otherwise, its inverse transformation will be used.
-f        If this value is .TRUE., then the Mapping's forward
-f        transformation will be used to transform the input
-f        box. Otherwise, its inverse transformation will be used.
-*
-c        (If the inverse transformation is selected, then references
-c        to "input" and "output" coordinates in this description
-c        should be transposed. For example, the size of the "lbnd_in"
-c        and "ubnd_in" arrays should match the number of output
-c        coordinates, as given by the Mapping's Nout
-c        attribute. Similarly, the "coord_out" parameter, below,
-c        should nominate one of the Mapping's input coordinates.)
-f        (If the inverse transformation is selected, then references
-f        to "input" and "output" coordinates in this description
-f        should be transposed. For example, the size of the LBND_IN
-f        and UBND_IN arrays should match the number of output
-f        coordinates, as given by the Mapping's Nout attribute.
-f        Similarly, the COORD_OUT argument, below, should nominate one
-f        of the Mapping's input coordinates.)
-c     coord_out
-f     COORD_OUT = INTEGER (Given)
-*        The index of the output coordinate for which the lower and
-*        upper bounds are required. This value should be at least one,
-*        and no larger than the number of Mapping output coordinates.
-c     lbnd_out
-f     LBND_OUT = DOUBLE PRECISION (Returned)
-c        Pointer to a double in which to return the lowest value taken
-c        by the nominated output coordinate within the specified
-c        region of input coordinate space.
-f        The lowest value taken by the nominated output coordinate
-f        within the specified region of input coordinate space.
-c     ubnd_out
-f     UBND_OUT = DOUBLE PRECISION (Returned)
-c        Pointer to a double in which to return the highest value
-c        taken by the nominated output coordinate within the specified
-c        region of input coordinate space.
-f        The highest value taken by the nominated output coordinate
-f        within the specified region of input coordinate space.
-c     xl
-f     XL( * ) = DOUBLE PRECISION (Returned)
-c        An optional pointer to an array of double, with one element
-c        for each Mapping input coordinate. If given, this array will
-c        be filled with the coordinates of an input point (although
-c        not necessarily a unique one) for which the nominated output
-c        coordinate attains the lower bound value returned in
-c        "*lbnd_out".
-c
-c        If these coordinates are not required, a NULL pointer may be
-c        supplied.
-f        An array with one element for each Mapping input
-f        coordinate. This will return the coordinates of an input
-f        point (although not necessarily a unique one) for which the
-f        nominated output coordinate attains the lower bound value
-f        returned in LBND_OUT.
-c     xu
-f     XU( * ) = DOUBLE PRECISION (Returned)
-c        An optional pointer to an array of double, with one element
-c        for each Mapping input coordinate. If given, this array will
-c        be filled with the coordinates of an input point (although
-c        not necessarily a unique one) for which the nominated output
-c        coordinate attains the upper bound value returned in
-c        "*ubnd_out".
-c
-c        If these coordinates are not required, a NULL pointer may be
-c        supplied.
-f        An array with one element for each Mapping input
-f        coordinate. This will return the coordinates of an input
-f        point (although not necessarily a unique one) for which the
-f        nominated output coordinate attains the upper bound value
-f        returned in UBND_OUT.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Any input points which are transformed by the Mapping to give
-*     output coordinates containing the value AST__BAD are regarded as
-*     invalid and are ignored. They will make no contribution to
-*     determining the output bounds, even although the nominated
-*     output coordinate might still have a valid value at such points.
-c     - An error will occur if the required output bounds cannot be
-c     found. Typically, this might happen if all the input points
-c     which the function considers turn out to be invalid (see
-c     above). The number of points considered before generating such
-c     an error is quite large, so this is unlikely to occur by
-c     accident unless valid points are restricted to a very small
-c     subset of the input coordinate space.
-f     - An error will occur if the required output bounds cannot be
-f     found. Typically, this might happen if all the input points
-f     which the routine considers turn out to be invalid (see
-f     above). The number of points considered before generating such
-f     an error is quite large, so this is unlikely to occur by
-f     accident unless valid points are restricted to a very small
-f     subset of the input coordinate space.
-c     - The values returned via "lbnd_out", "ubnd_out", "xl" and "xu"
-c     will be set to the value AST__BAD if this function should fail
-c     for any reason. Their initial values on entry will not be
-c     altered if the function is invoked with the AST error status
-c     set.
-f     - The values returned via LBND_OUT, UBND_OUT, XL and XU will be
-f     set to the value AST__BAD if this routine should fail for any
-f     reason. Their initial values on entry will not be altered if the
-f     routine is invoked with STATUS set to an error value.
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the astMapBox
-*     method. It is identical to astMapBox_ except that the nominated
-*     output coordinate given in "coord_out" is decremented by one
-*     before use.  This is to allow the public interface to use
-*     one-based coordinate numbering (internally, zero-based
-*     coordinate numbering is used).
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the protected version of this function with the "coord_out"
-   value decremented. */
-   astMapBox( this, lbnd_in, ubnd_in, forward, coord_out - 1,
-              lbnd_out, ubnd_out, xl, xu );
-}
-
-double astRateId_( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*++
-*  Name:
-c     astRate
-f     AST_RATE
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     double astRate( AstMapping *this, double *at, int ax1, int ax2 )
-f     RESULT = AST_RATE( THIS, AT, AX1, AX2, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     evaluates the rate of change of a specified output of the supplied
-*     Mapping with respect to a specified input, at a specified input
-*     position. 
-*
-*     The result is estimated by interpolating the function using a
-*     fourth order polynomial in the neighbourhood of the specified
-*     position. The size of the neighbourhood used is chosen to minimise
-*     the RMS residual per unit length between the interpolating
-*     polynomial and the supplied Mapping function. This method produces
-*     good accuracy but can involve evaluating the Mapping 100 or more
-*     times.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping to be applied.
-c     at
-f     AT( * ) = DOUBLE PRECISION (Given)
-c        The address of an 
-f        An
-*        array holding the axis values at the position at which the rate
-*        of change is to be evaluated. The number of elements in this
-*        array should equal the number of inputs to the Mapping.
-c     ax1
-f     AX1 = INTEGER (Given)
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 1 for the first output).
-c     ax2
-f     AX2 = INTEGER (Given)
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 1 for the first 
-*        input).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astRate()
-f     AST_RATE = DOUBLE PRECISION
-c        The rate of change of Mapping output "ax1" with respect to input 
-c        "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-c        calculated.
-f        The rate of change of Mapping output AX1 with respect to input 
-f        AX2, evaluated at AT, or AST__BAD if the value cannot be 
-f        calculated.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*--
-
-*  Implementation Notes:
-*     This function implements the public interface for the astRate
-*     method. It is identical to astRate_ except that the nominated
-*     coordinates given in "ax1" and "ax2" are decremented by one
-*     before use.  This is to allow the public interface to use
-*     one-based coordinate numbering (internally, zero-based
-*     coordinate numbering is used).
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Invoke the protected version of this function with the axis indices
-   decremented. */
-   return astRate( this, at, ax1 - 1, ax2 - 1 );
-}
-
-void astMapSplitId_( AstMapping *this, int nin, const int *in, int *out, 
-                     AstMapping **map, int *status ){
-/*
-*++
-*  Name:
-c     astMapSplit
-f     AST_MAPSPLIT
-
-*  Purpose:
-*     Split a Mapping up into parallel component Mappings.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "mapping.h"
-c     void astMapSplit( AstMapping *this, int nin, const int *in, int *out,
-c                       AstMapping **map )
-f     CALL AST_MAPSPLIT( THIS, NIN, IN, OUT, MAP, STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-c     This function 
-f     This routine
-*     creates a new Mapping which connects specified inputs within a
-*     supplied Mapping to the corresponding outputs of the supplied Mapping. 
-*     This is only possible if the specified inputs correspond to some 
-*     subset of the Mapping outputs. That is, there must exist a subset of 
-*     the Mapping outputs for which each output depends only on the selected 
-*     Mapping inputs, and not on any of the inputs which have not been 
-*     selected. Also, any output which is not in this subset must not depend
-*     on any of the selected inputs. If these conditions are not met by the 
-*     supplied Mapping, then
-c     a NULL 
-f     an AST__NULL 
-*     Mapping pointer is returned.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Mapping to be split.
-c     nin
-f     NIN = INTEGER (Given)
-c        The number of inputs to pick from "this".
-f        The number of inputs to pick from THIS.
-c     in
-f     IN( NIN ) = INTEGER (Given)
-c        Pointer to an 
-f        An
-*        array holding the indices within the supplied Mapping of the inputs 
-*        which are to be picked from the Mapping. 
-c        This array should have "nin" elements. 
-*        If "Nin" is the number of inputs of the supplied Mapping, then each 
-*        element should have a value in the range 1 to Nin.
-c     out
-f     OUT( * ) = INTEGER (Returned)
-c        Pointer to an 
-f        An
-*        array in which to return the indices of the outputs of the supplied 
-*        Mapping which are fed by the picked inputs. A value of one is
-*        used to refer to the first Mapping output. The supplied array should 
-*        have a length at least equal to the number of outputs in the
-*        supplied Mapping. The number of values stored in the array on
-*        exit will equal the number of outputs in the returned Mapping.
-*        The i'th element in the returned array holds the index within
-*        the supplied Mapping which corresponds to the i'th output of 
-*        the returned Mapping.
-c     map
-f     MAP = INTEGER (Returned)
-c        Address of a location at which to return a pointer to the 
-f        The
-*        returned Mapping. This Mapping will have 
-c        "nin" inputs (the number of outputs may be different to "nin"). NULL
-f        NIN inputs (the number of outputs may be different to NIN). AST__NULL
-*        is returned if the supplied Mapping has no subset of outputs which 
-*        depend only on the selected inputs.
-
-*  Notes:
-*     - If this 
-c     function 
-f     routine
-*     is invoked with the global error status set, or if it should fail for 
-*     any reason, then 
-c     a NULL value
-f     AST__NULL
-*     will be returned for 
-c     the "map" pointer.
-f     MAP.
-*--
-
-*  Implementation Notes:
-*     - This function implements the astMapSplit method available via the 
-*     public interface to the Mapping class and uses 1-based axis indices. 
-*     The protected interface method is provided by the astMapSplit function
-*     and uses zero-based axis indices. Also, an ID value is returned for
-*     "map" rather than a pointer.
-*/
-
-/* Local Variables: */
-   int *in_zero;           /* Pointer to array of zero-based input indices */
-   int *result;            /* Pointer to array of zero-based output indices*/
-   int i;                  /* Axis index */
-   int nout;               /* No of outputs */
-
-/* Initialise */
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Decrement the axis indices by 1. */
-   in_zero = astMalloc( sizeof( int )*(size_t) nin );
-   if( in_zero ) {
-      for( i = 0; i < nin; i++ ) in_zero[ i ] = in[ i ] - 1;
-
-/* Invoked the protected astMapSplit functon. */
-      result = astMapSplit( this, nin, in_zero, map );
-
-/* If succesful, copy the output axes to the supplied array. */
-      if( result ) {
-         nout = astGetNout( *map );
-         for( i = 0; i < nout; i++ ) out[ i ] = result[ i ] + 1;
-
-/* Free resurces. */
-         result = astFree( result );
-      }
-      in_zero = astFree( in_zero );
-   }
-
-/* Free the returned Mapping if an error has occurred. */
-   if( !astOK ) *map = astAnnul( *map );
-
-/* Return an ID value for the Mapping. */
-   *map = astMakeId( *map );
-}
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/mapping.h b/ast-5.3-1/mapping.h
deleted file mode 100644
index 985dd24..0000000
--- a/ast-5.3-1/mapping.h
+++ /dev/null
@@ -1,749 +0,0 @@
-#if !defined( MAPPING_INCLUDED ) /* Include this file only once */
-#define MAPPING_INCLUDED
-/*
-*++
-*  Name:
-*     mapping.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Mapping class.
-
-*  Invocation:
-*     #include "mapping.h"
-
-*  Description:
-*     This include file defines the interface to the Mapping class and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this class.
-*
-*     The Mapping class provides basic facilities for transforming a
-*     set of points to give a new set of points and for resampling
-*     grids of data. However, it does not have a constructor
-*     function. This is because the class only forms a template for
-*     deriving new classes which themselves implement specific forms
-*     of coordinate transformation. They do this by extending the
-*     protected astTransform method provided by this class.
-
-*  Inheritance:
-*     The Mapping class inherits from the Object class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Nin (integer)
-*        A read-only attribute giving the number of input coordinate
-*        values required per point by a Mapping (i.e. the number of
-*        dimensions of the space in which input points reside).
-*     Nout (integer)
-*        A read-only attribute giving the number of output coordinate
-*        values generated per point by a Mapping (i.e. the number of
-*        dimensions of the space in which output points reside).
-*     Invert (integer)
-*        A boolean value (0 or 1) which controls which of a Mapping's
-*        two possible coordinate transformations is considered the
-*        "forward" transformation and which is the "inverse"
-*        transformation. If this value is zero (the default), the
-*        behaviour will be as defined when the Mapping was first
-*        created.  If it is non-zero, the transformations will be
-*        inter-changed, so that the Mapping displays the inverse of
-*        its original behaviour.
-*
-*        Note that inverting the boolean sense of the Invert attribute
-*        will cause the values of the Nin/Nout and
-*        TranForward/TranInverse attributes to be interchanged.
-*     Report (integer)
-*        A boolean value (0 or 1) which controls whether to report
-*        coordinate values when a Mapping is used to transform a set
-*        of points. If this value is zero (the default), no report is
-*        made. If it is non-zero, the coordinates of each point
-*        (before and after transformation) are reported by writing
-*        them to standard output.
-*
-*        This attribute is intended as an aid to debugging and to save
-*        having to report values explicitly in simple programs.
-*        Unlike other attributes, the value of the Report attribute is
-*        not inherited when a Mapping is copied (its value is
-*        initially undefined, and therefore defaults to zero, in any
-*        copy).
-*     IsSimple (boolean)
-*        A read-only attribute indicating if the Mapping has been
-*        simpified.
-*     TranForward (integer)
-*        A read-only boolean value (0 or 1) which indicates whether a
-*        Mapping is able to transform coordinates in the "forward"
-*        direction (i.e. converting input coordinates into output
-*        coordinates).
-*     TranInverse (integer)
-*        A read-only boolean value (0 or 1) which indicates whether a
-*        Mapping is able to transform coordinates in the "inverse"
-*        direction (i.e. converting output coordinates back into input
-*        coordinates).
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a Mapping.
-*        astGetAttrib
-*           Get an attribute value for a Mapping.
-*        astSetAttrib
-*           Set an attribute value for a Mapping.
-*        astTestAttrib
-*           Test if an attribute value has been set for a Mapping.
-
-*  New Methods Defined:
-*     Public:
-*        astDecompose
-*           Decompose a Mapping into two component Mappings.
-*        astInvert
-*           Invert a Mapping.
-*        astLinearApprox
-*           Form a linear approximation to a Mapping
-*        astMapBox
-*           Find a bounding box for a Mapping.
-*        astRate
-*           Find rate of change of a Mapping output
-*        astRebin<X>
-*           Rebin a region of a data grid.
-*        astRebinSeq<X>
-*           Rebin a region of a sequence of data grids.
-*        astResample<X>
-*           Resample a region of a data grid.
-*        astSimplify
-*           Simplify a Mapping.
-*        astTran1
-*           Transform 1-dimensional coordinates.
-*        astTran2
-*           Transform 2-dimensional coordinates.
-*        astTranGrid
-*           Transform an N-dimensional regular grid of positions.
-*        astTranN
-*           Transform N-dimensional coordinates.
-*        astTranP (C only)
-*           Transform N-dimensional coordinates held in separate arrays.
-*
-*     Protected:
-*        astClearInvert
-*           Clear the Invert attribute value for a Mapping.
-*        astClearReport
-*           Clear the Report attribute value for a Mapping.
-*        astGetInvert
-*           Get the Invert attribute value for a Mapping.
-*        astGetIsSimple
-*           Get the IsSimple attribute.
-*        astGetNin
-*           Get the number of input coordinates for a Mapping.
-*        astGetNout
-*           Get the number of output coordinates for a Mapping.
-*        astGetReport
-*           Get the Report attribute value for a Mapping.
-*        astGetTranForward
-*           Determine if a Mapping can perform a "forward" coordinate
-*           transformation.
-*        astGetTranInverse
-*           Determine if a Mapping can perform an "inverse" coordinate
-*           transformation.
-*        astMapList
-*           Decompose a Mapping into a sequence of simpler Mappings.
-*        astMapSplit
-*           Select a subset of Mapping inputs.
-*        astMapMerge
-*           Simplify a sequence of Mappings.
-*        astReportPoints
-*           Report the effect of transforming a set of points using a Mapping.
-*        astSetInvert
-*           Set the Invert attribute value for a Mapping.
-*        astSetReport
-*           Set the Report attribute value for a Mapping.
-*        astTestInvert
-*           Test if an Invert attribute value has been set for a Mapping.
-*        astTestReport
-*           Test if an Report attribute value has been set for a Mapping.
-*        astTransform
-*           Transform a set of points.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAMapping
-*           Test class membership.
-*
-*     Protected:
-*        astCheckMapping
-*           Validate class membership.
-*        astInitMapping
-*           Initialise a Mapping.
-*        astInitMappingVtab
-*           Initialise the virtual function table for the Mapping class.
-*        astLoadMapping
-*           Load a Mapping.
-
-*  Macros:
-*     Public:
-*        AST__BLOCKAVE
-*           Block averaging interpolation.
-*        AST__GAUSS
-*           Use exp(-k*x*x) spreading.
-*        AST__LINEAR
-*           Simple linear interpolation.
-*        AST__NEAREST
-*           Use nearest pixel centre.
-*        AST__SINC
-*           Use sinc(pi*x) interpolation.
-*        AST__SINCCOS
-*           Use sinc(pi*x)*cos(k*pi*x) interpolation.
-*        AST__SINCGAUSS
-*           Use sinc(pi*x)*exp(-k*x*x) interpolation.
-*        AST__SINCSINC
-*           Use sinc(pi*x)*sinc(k*pi*x) interpolation.
-*        AST__SOMB
-*           Use somb(pi*x) interpolation.
-*        AST__SOMBCOS
-*           Use somb(pi*x)*cos(k*pi*x) interpolation.
-*        AST__UINTERP
-*           Use general user-defined sub-pixel interpolation algorithm.
-*        AST__UKERN1
-*           Use user-defined 1-d interpolation kernel.
-*        AST__URESAMP1, 2, 3 & 4
-*           Flags reserved for user-defined purposes.
-*        AST__USEBAD
-*           Recognise bad pixels?
-*        AST__CONSERVEFLUX
-*           Conserve flux in astResample?
-*        AST__REBININIT
-*           Initialise a new sequnece of calls to astRebinSeq<X>
-*        AST__REBINEND
-*           End a sequnece of calls to astRebinSeq<X>
-*        AST__NOBAD
-*           Leave bad output pixels unchanged in calls to astResample<X>
-*        AST__USEVAR
-*           Use variance arrays?
-
-*  Type Definitions:
-*     Public:
-*        AstMapping
-*           Mapping object type.
-*
-*     Protected:
-*        AstMappingVtab
-*           Mapping virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     MBT: Mark Taylor (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     30-JAN-1996 (RFWS):
-*        Original version.
-*     12-JUL-1996 (RFWS):
-*        Updated to support the external interface plus various other
-*        additions.
-*     12-DEC-1996 (RFWS):
-*        Added the astMapList method.
-*     13-DEC-1996 (RFWS):
-*        Added the astMapMerge method.
-*     13-DEC-1996 (RFWS):
-*        Added the astSimplify method.
-*     28-MAY-1998 (RFWS):
-*        Added the astMapBox method.
-*     12-NOV-1998 (RFWS):
-*        Added astResample<X> and associated code.
-*     24-NOV-2000 (MBT):
-*        Added AST__BLOCKAVE interpolation scheme.
-*     9-JAN-2001 (DSB):
-*        Changed in and out arguments for TranN from type "double (*)[]"
-*        to "double *".
-*     8-JAN-2003 (DSB):
-*        Added protected astInitMappingVtab method.
-*     10-JUL-2003 (DSB):
-*        Added method astRate.
-*     20-SEP-2004 (DSB):
-*        Added method astLinearApprox.
-*     30-JUN-2005 (DSB):
-*        Added method astRebin
-*     1-SEP-2005 (DSB):
-*        Added method astRebinSeq
-*     31-JAN-2006 (DSB):
-*        Added IsSimple attribute.
-*     2-MAR-2006 (DSB):
-*        Use HAVE_LONG_DOUBLE in place of AST_LONG_DOUBLE
-*     8-MAR-2006 (DSB):
-*        Add astTranGrid.
-*     5-MAY-2009 (DSB):
-*        Add astRemoveRegions.
-*--
-*/
-
-/* Include files. */
-/* ============== */
-
-/* Configuration results */
-/* --------------------- */
-#include "config.h"
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros. */
-/* ======= */
-
-/* Sizes of global arrays */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__MAPPING_GETATTRIB_BUFF_LEN 50
-#define AST__MAPPING_FUNPN_MAX_CACHE  5
-
-/* Resampling flags. */
-/* ----------------- */
-/* These macros define flag values which may be passed to
-   astResample<X> (via the "flags" argument) to provide control over
-   resampling operations. */
-#define AST__URESAMP1 (1)        /* Flags reserved for user-defined purposes */
-#define AST__URESAMP2 (2)
-#define AST__URESAMP3 (4)
-#define AST__URESAMP4 (8)
-#define AST__USEVAR (16)         /* Use variance arrays? */
-#define AST__USEBAD (32)         /* Recognise bad pixels? */
-#define AST__CONSERVEFLUX (64)   /* Conserve flux? */
-#define AST__REBININIT (128)     /* Initialise a new sequence of calls to astRebinSeq? */
-#define AST__REBINEND (256)      /* End a sequence of calls to astRebinSeq? */
-#define AST__GENVAR (512)        /* Generate output variances when rebinning? */
-#define AST__VARWGT (1024)       /* Use input variances as weights? */
-#define AST__NOBAD (2048)        /* Leave bad output values unchanged? */
-
-/* These macros identify standard sub-pixel interpolation algorithms
-   for use by astResample<X>. They are used by giving the macro's
-   value for the "interp" argument. */
-#define AST__UKERN1 (1)          /* User-supplied 1-d interpolation kernel */
-#if 0                            /* Not yet implemented */
-#define AST__UKERNN (2)          /* User-supplied n-d interpolation kernel */
-#endif
-#define AST__UINTERP (3)         /* User-supplied interpolation function */
-#define AST__NEAREST (4)         /* Use pixel with nearest centre */
-#define AST__LINEAR (5)          /* Simple linear interpolation */
-#define AST__SINC (6)            /* sinc(pi*x) interpolation */
-#define AST__SINCSINC (7)        /* sinc(pi*x)*sinc(k*pi*x) interpolation */
-#define AST__SINCCOS (8)         /* sinc(pi*x)*cos(k*pi*x) interpolation */
-#define AST__SINCGAUSS (9)       /* sinc(pi*x)*exp(-k*x*x) interpolation */
-#define AST__BLOCKAVE (10)       /* Block averaging interpolation */
-#define AST__GAUSS (11)          /* exp(-k*x*x) spreading */
-#define AST__SOMB (12)           /* somp(pi*x) interpolation */
-#define AST__SOMBCOS (13)        /* somp(pi*x)*cos(k*pi*x) interpolation */
-
-/* Type Definitions. */
-/* ================= */
-/* Mapping structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstMapping {
-
-/* Attributes inherited from the parent class. */
-   AstObject object;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   char invert;                   /* Mapping inverted? */
-   char issimple;                 /* Has Mapping been simplified? */
-   int nin;                       /* Number of input coordinates */
-   int nout;                      /* Number of output coordinates */
-   char report;                   /* Report when converting coordinates? */
-   char tran_forward;             /* Forward transformation defined? */
-   char tran_inverse;             /* Inverse transformation defined? */
-} AstMapping;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstMappingVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstObjectVtab object_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-   int (* ResampleLD)( AstMapping *, int, const int [], const int [], const long double [], const long double [], int, void (*)(void), const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-   void (* RebinLD)( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-   void (* RebinSeqLD)( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], double [], int *, int * );
-#endif
-
-   AstMapping *(* RemoveRegions)( AstMapping *, int * );
-   AstMapping *(* Simplify)( AstMapping *, int * );
-   AstPointSet *(* Transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-   double (* Rate)( AstMapping *, double *, int, int, int * );
-   int (* GetInvert)( AstMapping *, int * );
-   int (* GetIsSimple)( AstMapping *, int * );
-   int (* GetNin)( AstMapping *, int * );
-   int (* GetNout)( AstMapping *, int * );
-   int (* GetReport)( AstMapping *, int * );
-   int (* GetTranForward)( AstMapping *, int * );
-   int (* GetTranInverse)( AstMapping *, int * );
-   int (* GetIsLinear)( AstMapping *, int * );
-   int (* LinearApprox)( AstMapping *, const double *, const double *, double, double *, int * );
-   int (* MapMerge)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-   void (* RebinD)( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-   void (* RebinF)( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-   void (* RebinI)( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-   void (* RebinSeqD)( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], double [], int *, int * );
-   void (* RebinSeqF)( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], double [], int *, int * );
-   void (* RebinSeqI)( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], double [], int *, int * );
-   int (* ResampleB)( AstMapping *, int, const int [], const int [], const signed char [], const signed char [], int, void (*)(void), const double [], int, double, int, signed char, int, const int [], const int [], const int [], const int [], signed char [], signed char [], int * );
-   int (* ResampleD)( AstMapping *, int, const int [], const int [], const double [], const double [], int, void (*)(void), const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-   int (* ResampleF)( AstMapping *, int, const int [], const int [], const float [], const float [], int, void (*)(void), const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-   int (* ResampleI)( AstMapping *, int, const int [], const int [], const int [], const int [], int, void (*)(void), const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-   int (* ResampleL)( AstMapping *, int, const int [], const int [], const long int [], const long int [], int, void (*)(void), const double [], int, double, int, long int, int, const int [], const int [], const int [], const int [], long int [], long int [], int * );
-   int (* ResampleS)( AstMapping *, int, const int [], const int [], const short int [], const short int [], int, void (*)(void), const double [], int, double, int, short int, int, const int [], const int [], const int [], const int [], short int [], short int [], int * );
-   int (* ResampleUB)( AstMapping *, int, const int [], const int [], const unsigned char [], const unsigned char [], int, void (*)(void), const double [], int, double, int, unsigned char, int, const int [], const int [], const int [], const int [], unsigned char [], unsigned char [], int * );
-   int (* ResampleUI)( AstMapping *, int, const int [], const int [], const unsigned int [], const unsigned int [], int, void (*)(void), const double [], int, double, int, unsigned int, int, const int [], const int [], const int [], const int [], unsigned int [], unsigned int [], int * );
-   int (* ResampleUL)( AstMapping *, int, const int [], const int [], const unsigned long int [], const unsigned long int [], int, void (*)(void), const double [], int, double, int, unsigned long int, int, const int [], const int [], const int [], const int [], unsigned long int [], unsigned long int [], int * );
-   int (* ResampleUS)( AstMapping *, int, const int [], const int [], const unsigned short int [], const unsigned short int [], int, void (*)(void), const double [], int, double, int, unsigned short int, int, const int [], const int [], const int [], const int [], unsigned short int [], unsigned short int [], int * );
-   int (* TestInvert)( AstMapping *, int * );
-   int (* TestReport)( AstMapping *, int * );
-   void (* ClearInvert)( AstMapping *, int * );
-   void (* ClearReport)( AstMapping *, int * );
-   void (* Decompose)( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-   void (* Invert)( struct AstMapping *, int * );
-   void (* MapBox)( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-   int (* MapList)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-   int *(* MapSplit)( AstMapping *, int, const int *, AstMapping **, int * );
-   void (* ReportPoints)( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-   void (* SetInvert)( AstMapping *, int, int * );
-   void (* SetReport)( AstMapping *, int, int * );
-   void (* Tran1)( AstMapping *, int, const double [], int, double [], int * );
-   void (* Tran2)( AstMapping *, int, const double [], const double [], int, double [], double [], int * );
-   void (* TranGrid)( AstMapping *, int, const int[], const int[], double, int, int, int, int, double *, int * );
-   void (* TranN)( AstMapping *, int, int, int, const double *, int, int, int, double *, int * );
-   void (* TranP)( AstMapping *, int, int, const double *[], int, int, double *[], int * );
-} AstMappingVtab;
-
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstMappingGlobals {
-   AstMappingVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__MAPPING_GETATTRIB_BUFF_LEN + 1 ];
-   AstMapping *Unsimplified_Mapping;
-   int Rate_Disabled;
-   AstPointSet *FunPN_Pset1_Cache[ AST__MAPPING_FUNPN_MAX_CACHE ];
-   AstPointSet *FunPN_Pset2_Cache[ AST__MAPPING_FUNPN_MAX_CACHE ];
-   int FunPN_Next_Slot;
-   int FunPN_Pset_Size[ AST__MAPPING_FUNPN_MAX_CACHE ];
-} AstMappingGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Mapping)          /* Check class membership */
-astPROTO_ISA(Mapping)            /* Test class membership */
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstMapping *astInitMapping_( void *, size_t, int, AstMappingVtab *,
-                             const char *, int, int, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitMappingVtab_( AstMappingVtab *, const char *, int * );
-
-/* Loader. */
-AstMapping *astLoadMapping_( void *, size_t, AstMappingVtab *,
-                             const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitMappingGlobals_( AstMappingGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-int astResampleLD_( AstMapping *, int, const int [], const int [], const long double [], const long double [], int, void (*)(void), const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-void astRebinLD_( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], int * );
-void astRebinSeqLD_( AstMapping *, double, int, const int [], const int [], const long double [], const long double [], int, const double [], int, double, int, long double, int, const int [], const int [], const int [], const int [], long double [], long double [], double [], int *, int * );
-#endif
-
-AstMapping *astRemoveRegions_( AstMapping *, int * );
-AstMapping *astSimplify_( AstMapping *, int * );
-void astRebinD_( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-void astRebinF_( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-void astRebinI_( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-void astRebinSeqD_( AstMapping *, double, int, const int [], const int [], const double [], const double [], int, const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], double [], int *, int * );
-void astRebinSeqF_( AstMapping *, double, int, const int [], const int [], const float [], const float [], int, const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], double [], int *, int * );
-void astRebinSeqI_( AstMapping *, double, int, const int [], const int [], const int [], const int [], int, const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], double [], int *, int * );
-int astResampleB_( AstMapping *, int, const int [], const int [], const signed char [], const signed char [], int, void (*)(void), const double [], int, double, int, signed char, int, const int [], const int [], const int [], const int [], signed char [], signed char [], int * );
-int astResampleD_( AstMapping *, int, const int [], const int [], const double [], const double [], int, void (*)(void), const double [], int, double, int, double, int, const int [], const int [], const int [], const int [], double [], double [], int * );
-int astResampleF_( AstMapping *, int, const int [], const int [], const float [], const float [], int, void (*)(void), const double [], int, double, int, float, int, const int [], const int [], const int [], const int [], float [], float [], int * );
-int astResampleI_( AstMapping *, int, const int [], const int [], const int [], const int [], int, void (*)(void), const double [], int, double, int, int, int, const int [], const int [], const int [], const int [], int [], int [], int * );
-int astResampleL_( AstMapping *, int, const int [], const int [], const long int [], const long int [], int, void (*)(void), const double [], int, double, int, long int, int, const int [], const int [], const int [], const int [], long int [], long int [], int * );
-int astResampleS_( AstMapping *, int, const int [], const int [], const short int [], const short int [], int, void (*)(void), const double [], int, double, int, short int, int, const int [], const int [], const int [], const int [], short int [], short int [], int * );
-int astResampleUB_( AstMapping *, int, const int [], const int [], const unsigned char [], const unsigned char [], int, void (*)(void), const double [], int, double, int, unsigned char, int, const int [], const int [], const int [], const int [], unsigned char [], unsigned char [], int * );
-int astResampleUI_( AstMapping *, int, const int [], const int [], const unsigned int [], const unsigned int [], int, void (*)(void), const double [], int, double, int, unsigned int, int, const int [], const int [], const int [], const int [], unsigned int [], unsigned int [], int * );
-int astResampleUL_( AstMapping *, int, const int [], const int [], const unsigned long int [], const unsigned long int [], int, void (*)(void), const double [], int, double, int, unsigned long int, int, const int [], const int [], const int [], const int [], unsigned long int [], unsigned long int [], int * );
-int astResampleUS_( AstMapping *, int, const int [], const int [], const unsigned short int [], const unsigned short int [], int, void (*)(void), const double [], int, double, int, unsigned short int, int, const int [], const int [], const int [], const int [], unsigned short int [], unsigned short int [], int * );
-void astInvert_( AstMapping *, int * );
-int astLinearApprox_( AstMapping *, const double *, const double *, double, double *, int * );
-void astTran1_( AstMapping *, int, const double [], int, double [], int * );
-void astTran2_( AstMapping *, int, const double [], const double [], int, double [], double [], int * );
-void astTranGrid_( AstMapping *, int, const int[], const int[], double, int, int, int, int, double *, int * );
-void astTranN_( AstMapping *, int, int, int, const double *, int, int, int, double *, int * );
-void astTranP_( AstMapping *, int, int, const double *[], int, int, double *[], int * );
-
-#if defined(astCLASS)            /* Protected */
-void astDecompose_( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-void astMapBox_( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-double astRate_( AstMapping *, double *, int, int, int * );
-int *astMapSplit_( AstMapping *, int, const int *, AstMapping **, int * );
-#else
-void astDecomposeId_( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-void astMapBoxId_( AstMapping *, const double [], const double [], int, int, double *, double *, double [], double [], int * );
-double astRateId_( AstMapping *, double *, int, int, int * );
-void astMapSplitId_( AstMapping *, int, const int *, int *, AstMapping **, int * );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-int astRateState_( int, int * );
-AstPointSet *astTransform_( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-int astGetInvert_( AstMapping *, int * );
-int astGetIsSimple_( AstMapping *, int * );
-int astGetNin_( AstMapping *, int * );
-int astGetNout_( AstMapping *, int * );
-int astGetReport_( AstMapping *, int * );
-int astGetTranForward_( AstMapping *, int * );
-int astGetTranInverse_( AstMapping *, int * );
-int astGetIsLinear_( AstMapping *, int * );
-int astMapMerge_( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-int astTestInvert_( AstMapping *, int * );
-int astTestReport_( AstMapping *, int * );
-void astClearInvert_( AstMapping *, int * );
-void astClearReport_( AstMapping *, int * );
-int astMapList_( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-void astReportPoints_( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-void astSetInvert_( AstMapping *, int, int * );
-void astSetReport_( AstMapping *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
-   them easier to invoke (e.g. to avoid type mis-matches when passing pointers
-   to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
-   validate their own arguments. We must use a cast when passing object
-   pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckMapping(this) astINVOKE_CHECK(Mapping,this,0)
-#define astVerifyMapping(this) astINVOKE_CHECK(Mapping,this,1)
-
-/* Test class membership. */
-#define astIsAMapping(this) astINVOKE_ISA(Mapping,this)
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitMapping(mem,size,init,vtab,name,nin,nout,tran_forward,tran_inverse) \
-astINVOKE(O,astInitMapping_(mem,size,init,vtab,name,nin,nout,tran_forward,tran_inverse,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitMappingVtab(vtab,name) astINVOKE(V,astInitMappingVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadMapping(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadMapping_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckMapping (et al.) to validate Mapping
-   pointers before use. This provides a contextual error report if a
-   pointer to the wrong sort of object is supplied. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define astResampleLD(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleLD_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinLD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinLD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinSeqLD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqLD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#endif
-
-#define astInvert(this) \
-astINVOKE(V,astInvert_(astCheckMapping(this),STATUS_PTR))
-#define astLinearApprox(this,lbnd,ubnd,tol,fit) \
-astINVOKE(V,astLinearApprox_(astCheckMapping(this),lbnd,ubnd,tol,fit,STATUS_PTR)) 
-#define astRebinD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinF(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinF_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinI(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astRebinI_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRebinSeqD(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqD_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#define astRebinSeqF(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqF_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#define astRebinSeqI(this,wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused) \
-astINVOKE(V,astRebinSeqI_(astCheckMapping(this),wlim,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,weights,nused,STATUS_PTR))
-#define astResampleD(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleD_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleF(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleF_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleL(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleL_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUL(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUL_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleI(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleI_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUI(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUI_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleS(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleS_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUS(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUS_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleB(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleB_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astResampleUB(this,ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var) \
-astINVOKE(V,astResampleUB_(astCheckMapping(this),ndim_in,lbnd_in,ubnd_in,in,in_var,interp,finterp,params,flags,tol,maxpix,badval,ndim_out,lbnd_out,ubnd_out,lbnd,ubnd,out,out_var,STATUS_PTR))
-#define astRemoveRegions(this) astINVOKE(O,astRemoveRegions_(astCheckMapping(this),STATUS_PTR))
-#define astSimplify(this) astINVOKE(O,astSimplify_(astCheckMapping(this),STATUS_PTR))
-#define astTran1(this,npoint,xin,forward,xout) \
-astINVOKE(V,astTran1_(astCheckMapping(this),npoint,xin,forward,xout,STATUS_PTR))
-#define astTran2(this,npoint,xin,yin,forward,xout,yout) \
-astINVOKE(V,astTran2_(astCheckMapping(this),npoint,xin,yin,forward,xout,yout,STATUS_PTR))
-#define astTranGrid(this,ncoord_in,lbnd,ubnd,tol,maxpix,forward,ncoord_out,outdim,out) \
-astINVOKE(V,astTranGrid_(astCheckMapping(this),ncoord_in,lbnd,ubnd,tol,maxpix,forward,ncoord_out,outdim,out,STATUS_PTR))
-#define astTranN(this,npoint,ncoord_in,indim,in,forward,ncoord_out,outdim,out) \
-astINVOKE(V,astTranN_(astCheckMapping(this),npoint,ncoord_in,indim,in,forward,ncoord_out,outdim,out,STATUS_PTR))
-#define astTranP(this,npoint,ncoord_in,ptr_in,forward,ncoord_out,ptr_out) \
-astINVOKE(V,astTranP_(astCheckMapping(this),npoint,ncoord_in,ptr_in,forward,ncoord_out,ptr_out,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astDecompose(this,map1,map2,series,inv1,inv2) \
-astINVOKE(V,astDecompose_(astCheckMapping(this),(AstMapping **)(map1),(AstMapping **)(map2),series,inv1,inv2,STATUS_PTR))
-#define astMapBox(this,lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu) \
-astINVOKE(V,astMapBox_(astCheckMapping(this),lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu,STATUS_PTR))
-#define astRate(this,at,ax1,ax2) \
-astINVOKE(V,astRate_(astCheckMapping(this),at,ax1,ax2,STATUS_PTR))
-#define astMapSplit(this,nin,in,map) \
-astINVOKE(V,astMapSplit_(this,nin,in,map,STATUS_PTR))
-#else
-#define astDecompose(this,map1,map2,series,inv1,inv2) \
-astINVOKE(V,astDecomposeId_(astCheckMapping(this),(AstMapping **)(map1),(AstMapping **)(map2),series,inv1,inv2,STATUS_PTR))
-#define astMapBox(this,lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu) \
-astINVOKE(V,astMapBoxId_(astCheckMapping(this),lbnd_in,ubnd_in,forward,coord_out,lbnd_out,ubnd_out,xl,xu,STATUS_PTR))
-#define astRate(this,at,ax1,ax2) \
-astINVOKE(V,astRateId_(astCheckMapping(this),at,ax1,ax2,STATUS_PTR))
-#define astMapSplit(this,nin,in,out,map) \
-astINVOKE(V,astMapSplitId_(astCheckMapping(this),nin,in,out,map,STATUS_PTR))
-#endif
-
-#if defined(astCLASS)            /* Protected */
-#define astRateState(disabled) astRateState_(disabled,STATUS_PTR)
-#define astClearInvert(this) \
-astINVOKE(V,astClearInvert_(astCheckMapping(this),STATUS_PTR))
-#define astClearReport(this) \
-astINVOKE(V,astClearReport_(astCheckMapping(this),STATUS_PTR))
-#define astGetInvert(this) \
-astINVOKE(V,astGetInvert_(astCheckMapping(this),STATUS_PTR))
-#define astGetIsSimple(this) \
-astINVOKE(V,astGetIsSimple_(astCheckMapping(this),STATUS_PTR))
-#define astGetNin(this) \
-astINVOKE(V,astGetNin_(astCheckMapping(this),STATUS_PTR))
-#define astGetNout(this) \
-astINVOKE(V,astGetNout_(astCheckMapping(this),STATUS_PTR))
-#define astGetReport(this) \
-astINVOKE(V,astGetReport_(astCheckMapping(this),STATUS_PTR))
-#define astGetTranForward(this) \
-astINVOKE(V,astGetTranForward_(astCheckMapping(this),STATUS_PTR))
-#define astGetTranInverse(this) \
-astINVOKE(V,astGetTranInverse_(astCheckMapping(this),STATUS_PTR))
-#define astGetIsLinear(this) \
-astINVOKE(V,astGetIsLinear_(astCheckMapping(this),STATUS_PTR))
-#define astMapList(this,series,invert,nmap,map_list,invert_list) \
-astINVOKE(V,astMapList_(this,series,invert,nmap,map_list,invert_list,STATUS_PTR))
-#define astMapMerge(this,where,series,nmap,map_list,invert_list) \
-astINVOKE(V,astMapMerge_(astCheckMapping(this),where,series,nmap,map_list,invert_list,STATUS_PTR))
-#define astReportPoints(this,forward,in_points,out_points) \
-astINVOKE(V,astReportPoints_(astCheckMapping(this),forward,astCheckPointSet(in_points),astCheckPointSet(out_points),STATUS_PTR))
-#define astSetInvert(this,value) \
-astINVOKE(V,astSetInvert_(astCheckMapping(this),value,STATUS_PTR))
-#define astSetReport(this,value) \
-astINVOKE(V,astSetReport_(astCheckMapping(this),value,STATUS_PTR))
-#define astTestInvert(this) \
-astINVOKE(V,astTestInvert_(astCheckMapping(this),STATUS_PTR))
-#define astTestReport(this) \
-astINVOKE(V,astTestReport_(astCheckMapping(this),STATUS_PTR))
-
-/* Since a NULL PointSet pointer is acceptable here, we must omit the argument
-   checking in that case. (But unfortunately, "out" then gets evaluated
-   twice - this is unlikely to matter, but is there a better way?) */
-#define astTransform(this,in,forward,out) \
-astINVOKE(O,astTransform_(astCheckMapping(this),astCheckPointSet(in),forward,(out)?astCheckPointSet(out):NULL,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/mathmap.c b/ast-5.3-1/mathmap.c
deleted file mode 100644
index 8b76ae0..0000000
--- a/ast-5.3-1/mathmap.c
+++ /dev/null
@@ -1,7412 +0,0 @@
-/*
-*class++
-*  Name:
-*     MathMap
-
-*  Purpose:
-*     Transform coordinates using mathematical expressions.
-
-*  Constructor Function:
-c     astMathMap
-f     AST_MATHMAP
-
-*  Description:
-c     A MathMap is a Mapping which allows you to specify a set of forward
-c     and/or inverse transformation functions using arithmetic operations
-c     and mathematical functions similar to those available in C. The
-c     MathMap interprets these functions at run-time, whenever its forward
-c     or inverse transformation is required. Because the functions are not
-c     compiled in the normal sense (unlike an IntraMap), they may be used to
-c     describe coordinate transformations in a transportable manner. A
-c     MathMap therefore provides a flexible way of defining new types of
-c     Mapping whose descriptions may be stored as part of a dataset and
-c     interpreted by other programs.
-f     A MathMap is a Mapping which allows you to specify a set of forward
-f     and/or inverse transformation functions using arithmetic operations
-f     and mathematical functions similar to those available in Fortran. The
-f     MathMap interprets these functions at run-time, whenever its forward
-f     or inverse transformation is required. Because the functions are not
-f     compiled in the normal sense (unlike an IntraMap), they may be used to
-f     describe coordinate transformations in a transportable manner. A
-f     MathMap therefore provides a flexible way of defining new types of
-f     Mapping whose descriptions may be stored as part of a dataset and
-f     interpreted by other programs.
-
-*  Inheritance:
-*     The MathMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     MathMap also has the following attributes:
-*     - Seed: Random number seed
-*     - SimpFI: Forward-inverse MathMap pairs simplify?
-*     - SimpIF: Inverse-forward MathMap pairs simplify?
-
-*  Functions:
-c     The MathMap class does not define any new functions beyond those
-f     The MathMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     3-SEP-1999 (RFWS):
-*        Original version.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitMathMapVtab
-*        method.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     14-MAR-2006 (DSB):
-*        - Add QIF function.
-*        - Override astEqual method.
-*     20-NOV-2006 (DSB):
-*        Re-implement the Equal method to avoid use of astSimplify.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS MathMap
-
-/* Allocate pointer array. */
-/* ----------------------- */
-/* This macro allocates an array of pointers. If successful, each element
-   of the array is initialised to NULL. */
-#define MALLOC_POINTER_ARRAY(array_name,array_type,array_size) \
-\
-/* Allocate the array. */ \
-   (array_name) = astMalloc( sizeof(array_type) * (size_t) (array_size) ); \
-   if ( astOK ) { \
-\
-/* If successful, loop to initialise each element. */ \
-      int array_index_; \
-      for ( array_index_ = 0; array_index_ < (array_size); array_index_++ ) { \
-         (array_name)[ array_index_ ] = NULL; \
-      } \
-   }
-
-/* Free pointer array. */
-/* ------------------- */
-/* This macro frees a dynamically allocated array of pointers, each of
-   whose elements may point at a further dynamically allocated array
-   (which is also to be freed). It also allows for the possibility of any
-   of the pointers being NULL. */
-#define FREE_POINTER_ARRAY(array_name,array_size) \
-\
-/* Check that the main array pointer is not NULL. */ \
-   if ( (array_name) ) { \
-\
-/* If OK, loop to free each of the sub-arrays. */ \
-      int array_index_; \
-      for ( array_index_ = 0; array_index_ < (array_size); array_index_++ ) { \
-\
-/* Check that each sub-array pointer is not NULL before freeing it. */ \
-         if ( (array_name)[ array_index_ ] ) { \
-            (array_name)[ array_index_ ] = \
-               astFree( (array_name)[ array_index_ ] ); \
-         } \
-      } \
-\
-/* Free the main pointer array. */ \
-      (array_name) = astFree( (array_name) ); \
-   }
-
-/* SizeOf pointer array. */
-/* --------------------- */
-/* This macro increments "result" by the number of bytes allocated for an 
-   array of pointers, each of whose elements may point at a further 
-   dynamically allocated array (which is also to be included). It also 
-   allows for the possibility of any of the pointers being NULL. */
-#define SIZEOF_POINTER_ARRAY(array_name,array_size) \
-\
-/* Check that the main array pointer is not NULL. */ \
-   if ( (array_name) ) { \
-\
-/* If OK, loop to measure each of the sub-arrays. */ \
-      int array_index_; \
-      for ( array_index_ = 0; array_index_ < (array_size); array_index_++ ) { \
-\
-/* Check that each sub-array pointer is not NULL before measuring it. */ \
-         if ( (array_name)[ array_index_ ] ) { \
-            result += astTSizeOf( (array_name)[ array_index_ ] ); \
-         } \
-      } \
-\
-/* Include the main pointer array. */ \
-      result += astTSizeOf( (array_name) ); \
-   }
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"             /* I/O channels */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "mathmap.h"             /* Interface definition for this class */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points */
-#include "unitmap.h"             /* Unit Mapping */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <math.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-/* Module Variables. */
-/* ================= */
-/* This type is made obscure since it is publicly accessible (but not
-   useful). Provide shorthand for use within this module. */
-typedef AstMathMapRandContext_ Rcontext;
-
-
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* This declaration enumerates the operation codes recognised by the
-   EvaluateFunction function which evaluates arithmetic expressions. */
-typedef enum {
-
-/* User-supplied constants and variables. */
-   OP_LDCON,                     /* Load constant */
-   OP_LDVAR,                     /* Load variable */
-
-/* System constants. */
-   OP_LDBAD,                     /* Load bad value (AST__BAD) */
-   OP_LDDIG,                     /* Load # decimal digits (DBL_DIG) */
-   OP_LDEPS,                     /* Load relative precision (DBL_EPSILON) */
-   OP_LDMAX,                     /* Load largest value (DBL_MAX) */
-   OP_LDMAX10E,                  /* Max. decimal exponent (DBL_MAX_10_EXP) */
-   OP_LDMAXE,                    /* Load maximum exponent (DBL_MAX_EXP) */
-   OP_LDMDIG,                    /* Load # mantissa digits (DBL_MANT_DIG) */
-   OP_LDMIN,                     /* Load smallest value (DBL_MIN) */
-   OP_LDMIN10E,                  /* Min. decimal exponent (DBL_MIN_10_EXP) */
-   OP_LDMINE,                    /* Load minimum exponent (DBL_MIN_EXP) */
-   OP_LDRAD,                     /* Load floating radix (FLT_RADIX) */
-   OP_LDRND,                     /* Load rounding mode (FLT_ROUNDS) */
-
-/* Mathematical constants. */
-   OP_LDE,                       /* Load e (base of natural logarithms) */
-   OP_LDPI,                      /* Load pi */
-
-/* Functions with one argument. */
-   OP_ABS,                       /* Absolute value (sign removal) */
-   OP_ACOS,                      /* Inverse cosine (radians) */
-   OP_ACOSD,                     /* Inverse cosine (degrees) */
-   OP_ACOSH,                     /* Inverse hyperbolic cosine */
-   OP_ACOTH,                     /* Inverse hyperbolic cotangent */
-   OP_ACSCH,                     /* Inverse hyperbolic cosecant */
-   OP_ASECH,                     /* Inverse hyperbolic secant */
-   OP_ASIN,                      /* Inverse sine (radians) */
-   OP_ASIND,                     /* Inverse sine (degrees) */
-   OP_ASINH,                     /* Inverse hyperbolic sine */
-   OP_ATAN,                      /* Inverse tangent (radians) */
-   OP_ATAND,                     /* Inverse tangent (degrees) */
-   OP_ATANH,                     /* Inverse hyperbolic tangent */
-   OP_CEIL,                      /* C ceil function (round up) */
-   OP_COS,                       /* Cosine (radians) */
-   OP_COSD,                      /* Cosine (degrees) */
-   OP_COSH,                      /* Hyperbolic cosine */
-   OP_COTH,                      /* Hyperbolic cotangent */
-   OP_CSCH,                      /* Hyperbolic cosecant */
-   OP_EXP,                       /* Exponential function */
-   OP_FLOOR,                     /* C floor function (round down) */
-   OP_INT,                       /* Integer value (round towards zero) */
-   OP_ISBAD,                     /* Test for bad value */
-   OP_LOG,                       /* Natural logarithm */
-   OP_LOG10,                     /* Base 10 logarithm */
-   OP_NINT,                      /* Fortran NINT function (round to nearest) */
-   OP_POISS,                     /* Poisson random number */
-   OP_SECH,                      /* Hyperbolic secant */
-   OP_SIN,                       /* Sine (radians) */
-   OP_SINC,                      /* Sinc function [= sin(x)/x] */
-   OP_SIND,                      /* Sine (degrees) */
-   OP_SINH,                      /* Hyperbolic sine */
-   OP_SQR,                       /* Square */
-   OP_SQRT,                      /* Square root */
-   OP_TAN,                       /* Tangent (radians) */
-   OP_TAND,                      /* Tangent (degrees) */
-   OP_TANH,                      /* Hyperbolic tangent */
-
-/* Functions with two arguments. */
-   OP_ATAN2,                     /* Inverse tangent (2 arguments, radians) */
-   OP_ATAN2D,                    /* Inverse tangent (2 arguments, degrees) */
-   OP_DIM,                       /* Fortran DIM (positive difference) fn. */
-   OP_GAUSS,                     /* Gaussian random number */
-   OP_MOD,                       /* Modulus function */
-   OP_POW,                       /* Raise to power */
-   OP_RAND,                      /* Uniformly distributed random number */
-   OP_SIGN,                      /* Transfer of sign function */
-
-/* Functions with three arguments. */
-   OP_QIF,                       /* C "question mark" operator "a?b:c" */
-
-/* Functions with variable numbers of arguments. */
-   OP_MAX,                       /* Maximum of 2 or more values */
-   OP_MIN,                       /* Minimum of 2 or more values */
-
-/* Unary arithmetic operators. */
-   OP_NEG,                       /* Negate (change sign) */
-
-/* Unary boolean operators. */
-   OP_NOT,                       /* Boolean NOT */
-
-/* Binary arithmetic operators. */
-   OP_ADD,                       /* Add */
-   OP_DIV,                       /* Divide */
-   OP_MUL,                       /* Multiply */
-   OP_SUB,                       /* Subtract */
-
-/* Bit-shift operators. */
-   OP_SHFTL,                     /* Shift bits left */
-   OP_SHFTR,                     /* Shift bits right */
-
-/* Relational operators. */
-   OP_EQ,                        /* Relational equal */
-   OP_GE,                        /* Greater than or equal */
-   OP_GT,                        /* Greater than */
-   OP_LE,                        /* Less than or equal */
-   OP_LT,                        /* Less than */
-   OP_NE,                        /* Not equal */
-
-/* Bit-wise operators. */
-   OP_BITAND,                    /* Bit-wise AND */
-   OP_BITOR,                     /* Bit-wise OR */
-   OP_BITXOR,                    /* Bit-wise exclusive OR */
-
-/* Binary boolean operators. */
-   OP_AND,                       /* Boolean AND */
-   OP_EQV,                       /* Fortran logical .EQV. operation */
-   OP_OR,                        /* Boolean OR */
-   OP_XOR,                       /* Boolean exclusive OR */
-
-/* Null operation. */
-   OP_NULL                       /* Null operation */
-} Oper;
-
-/* This structure holds a description of each symbol which may appear
-   in an expression. */
-typedef struct {
-   const char *text;             /* Symbol text as it appears in expressions */
-   const int size;               /* Size of symbol text */
-   const int operleft;           /* An operator when seen from the left? */
-   const int operright;          /* An operator when seen from the right? */
-   const int unarynext;          /* May be followed by a unary +/- ? */
-   const int unaryoper;          /* Is a unary +/- ? */
-   const int leftpriority;       /* Priority when seen from the left */
-   const int rightpriority;      /* Priority when seen from the right */
-   const int parincrement;       /* Change in parenthesis level */
-   const int stackincrement;     /* Change in evaluation stack size */
-   const int nargs;              /* Number of function arguments */
-   const Oper opcode;            /* Resulting operation code */
-} Symbol;
-
-/* This initialises an array of Symbol structures to hold data on all
-   the supported symbols. The order is not important, but symbols are
-   arranged here in approximate order of descending evaluation
-   priority. The end of the array is indicated by an element with a NULL
-   "text" component. */
-static const Symbol symbol[] = {
-
-/* User-supplied constants and variables. */
-   { ""            ,  0,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDCON    },
-   { ""            ,  0,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDVAR    },
-
-/* System constants. */
-   { "<bad>"       ,  5,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDBAD    },
-   { "<dig>"       ,  5,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDDIG    },
-   { "<epsilon>"   ,  9,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDEPS    },
-   { "<mant_dig>"  , 10,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMDIG   },
-   { "<max>"       ,  5,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMAX    },
-   { "<max_10_exp>", 12,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMAX10E },
-   { "<max_exp>"   ,  9,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMAXE   },
-   { "<min>"       ,  5,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMIN    },
-   { "<min_10_exp>", 12,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMIN10E },
-   { "<min_exp>"   ,  9,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDMINE   },
-   { "<radix>"     ,  7,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDRAD    },
-   { "<rounds>"    ,  8,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDRND    },
-
-/* Mathematical constants. */
-   { "<e>"         ,  3,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDE      },
-   { "<pi>"        ,  4,  0,  0,  0,  0, 19, 19,  0,  1,  0,  OP_LDPI     },
-
-/* Functions with one argument. */
-   { "abs("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ABS      },
-   { "acos("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ACOS     },
-   { "acosd("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ACOSD    },
-   { "acosh("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ACOSH    },
-   { "acoth("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ACOTH    },
-   { "acsch("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ACSCH    },
-   { "aint("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_INT      },
-   { "asech("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ASECH    },
-   { "asin("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ASIN     },
-   { "asind("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ASIND    },
-   { "asinh("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ASINH    },
-   { "atan("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ATAN     },
-   { "atand("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ATAND    },
-   { "atanh("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ATANH    },
-   { "ceil("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_CEIL     },
-   { "cos("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_COS      },
-   { "cosd("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_COSD     },
-   { "cosh("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_COSH     },
-   { "coth("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_COTH     },
-   { "csch("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_CSCH     },
-   { "exp("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_EXP      },
-   { "fabs("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ABS      },
-   { "floor("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_FLOOR    },
-   { "int("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_INT      },
-   { "isbad("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_ISBAD    },
-   { "log("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_LOG      },
-   { "log10("      ,  6,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_LOG10    },
-   { "nint("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_NINT     },
-   { "poisson("    ,  8,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_POISS    },
-   { "sech("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SECH     },
-   { "sin("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SIN      },
-   { "sinc("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SINC     },
-   { "sind("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SIND     },
-   { "sinh("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SINH     },
-   { "sqr("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SQR      },
-   { "sqrt("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_SQRT     },
-   { "tan("        ,  4,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_TAN      },
-   { "tand("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_TAND     },
-   { "tanh("       ,  5,  0,  1,  1,  0, 19,  1,  1,  0,  1,  OP_TANH     },
-
-/* Functions with two arguments. */
-   { "atan2("      ,  6,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_ATAN2    },
-   { "atan2d("     ,  7,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_ATAN2D   },
-   { "dim("        ,  4,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_DIM      },
-   { "fmod("       ,  5,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_MOD      },
-   { "gauss("      ,  6,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_GAUSS    },
-   { "mod("        ,  4,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_MOD      },
-   { "pow("        ,  4,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_POW      },
-   { "rand("       ,  5,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_RAND     },
-   { "sign("       ,  5,  0,  1,  1,  0, 19,  1,  1, -1,  2,  OP_SIGN     },
-
-/* Functions with two arguments. */
-   { "qif("        ,  4,  0,  1,  1,  0, 19,  1,  1, -2,  3,  OP_QIF      },
-
-/* Functions with variable numbers of arguments. */
-   { "max("        ,  4,  0,  1,  1,  0, 19,  1,  1, -1, -2,  OP_MAX      },
-   { "min("        ,  4,  0,  1,  1,  0, 19,  1,  1, -1, -2,  OP_MIN      },
-
-/* Parenthesised expressions. */
-   { ")"           ,  1,  1,  0,  0,  0,  2, 19, -1,  0,  0,  OP_NULL     },
-   { "("           ,  1,  0,  1,  1,  0, 19,  1,  1,  0,  0,  OP_NULL     },
-
-/* Unary arithmetic operators. */
-   { "+"           ,  1,  0,  1,  1,  1, 17, 16,  0,  0,  0,  OP_NULL     },
-   { "-"           ,  1,  0,  1,  1,  1, 17, 16,  0,  0,  0,  OP_NEG      },
-
-/* Unary boolean operators. */
-   { "!"           ,  1,  0,  1,  1,  0, 17, 16,  0,  0,  0,  OP_NOT      },
-   { ".not."       ,  5,  0,  1,  1,  0, 17, 16,  0,  0,  0,  OP_NOT      },
-
-/* Binary arithmetic operators. */
-   { "**"          ,  2,  1,  1,  1,  0, 18, 15,  0, -1,  0,  OP_POW      },
-   { "*"           ,  1,  1,  1,  1,  0, 14, 14,  0, -1,  0,  OP_MUL      },
-   { "/"           ,  1,  1,  1,  1,  0, 14, 14,  0, -1,  0,  OP_DIV      },
-   { "+"           ,  1,  1,  1,  1,  0, 13, 13,  0, -1,  0,  OP_ADD      },
-   { "-"           ,  1,  1,  1,  1,  0, 13, 13,  0, -1,  0,  OP_SUB      },
-
-/* Bit-shift operators. */
-   { "<<"          ,  2,  1,  1,  1,  0, 12, 12,  0, -1,  0,  OP_SHFTL    },
-   { ">>"          ,  2,  1,  1,  1,  0, 12, 12,  0, -1,  0,  OP_SHFTR    },
-
-/* Relational operators. */
-   { "<"           ,  1,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_LT       },
-   { ".lt."        ,  4,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_LT       },
-   { "<="          ,  2,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_LE       },
-   { ".le."        ,  4,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_LE       },
-   { ">"           ,  1,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_GT       },
-   { ".gt."        ,  4,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_GT       },
-   { ">="          ,  2,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_GE       },
-   { ".ge."        ,  4,  1,  1,  1,  0, 11, 11,  0, -1,  0,  OP_GE       },
-   { "=="          ,  2,  1,  1,  1,  0, 10, 10,  0, -1,  0,  OP_EQ       },
-   { ".eq."        ,  4,  1,  1,  1,  0, 10, 10,  0, -1,  0,  OP_EQ       },
-   { "!="          ,  2,  1,  1,  1,  0, 10, 10,  0, -1,  0,  OP_NE       },
-   { ".ne."        ,  4,  1,  1,  1,  0, 10, 10,  0, -1,  0,  OP_NE       },
-
-/* Bit-wise operators. */
-   { "&"           ,  1,  1,  1,  1,  0,  9,  9,  0, -1,  0,  OP_BITAND   },
-   { "^"           ,  1,  1,  1,  1,  0,  8,  8,  0, -1,  0,  OP_BITXOR   },
-   { "|"           ,  1,  1,  1,  1,  0,  7,  7,  0, -1,  0,  OP_BITOR    },
-
-/* Binary boolean operators. */
-   { "&&"          ,  2,  1,  1,  1,  0,  6,  6,  0, -1,  0,  OP_AND      },
-   { ".and."       ,  5,  1,  1,  1,  0,  6,  6,  0, -1,  0,  OP_AND      },
-   { "^^"          ,  2,  1,  1,  1,  0,  5,  5,  0, -1,  0,  OP_XOR      },
-   { "||"          ,  2,  1,  1,  1,  0,  4,  4,  0, -1,  0,  OP_OR       },
-   { ".or."        ,  4,  1,  1,  1,  0,  4,  4,  0, -1,  0,  OP_OR       },
-   { ".eqv."       ,  5,  1,  1,  1,  0,  3,  3,  0, -1,  0,  OP_EQV      },
-   { ".neqv."      ,  6,  1,  1,  1,  0,  3,  3,  0, -1,  0,  OP_XOR      },
-   { ".xor."       ,  5,  1,  1,  1,  0,  3,  3,  0, -1,  0,  OP_XOR      },
-
-/* Separators. */
-   { ","           ,  1,  1,  1,  1,  0,  2,  2,  0,  0,  0,  OP_NULL     },
-
-/* End of symbol data. */
-   { NULL          ,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  OP_NULL     }
-};
-
-/* These variables identify indices in the above array which hold
-   special symbols used explicitly in the code. */
-static const int symbol_ldcon = 0; /* Load a constant */
-static const int symbol_ldvar = 1; /* Load a variable */
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(MathMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(MathMap,Class_Init)
-#define class_vtab astGLOBAL(MathMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(MathMap,GetAttrib_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 ); 
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 ); 
-
-static pthread_mutex_t mutex4 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX4 pthread_mutex_lock( &mutex4 ); 
-#define UNLOCK_MUTEX4 pthread_mutex_unlock( &mutex4 ); 
-
-static pthread_mutex_t mutex5 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX5 pthread_mutex_lock( &mutex5 ); 
-#define UNLOCK_MUTEX5 pthread_mutex_unlock( &mutex5 ); 
-
-static pthread_mutex_t mutex6 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX6 pthread_mutex_lock( &mutex6 ); 
-#define UNLOCK_MUTEX6 pthread_mutex_unlock( &mutex6 ); 
-
-static pthread_mutex_t mutex7 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX7 pthread_mutex_lock( &mutex7 ); 
-#define UNLOCK_MUTEX7 pthread_mutex_unlock( &mutex7 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 51 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstMathMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-
-#define LOCK_MUTEX4
-#define UNLOCK_MUTEX4
-
-#define LOCK_MUTEX5
-#define UNLOCK_MUTEX5
-
-#define LOCK_MUTEX6
-#define UNLOCK_MUTEX6
-
-#define LOCK_MUTEX7
-#define UNLOCK_MUTEX7
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstMathMap *astMathMapId_( int, int, int, const char *[], int, const char *[], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double Gauss( Rcontext *, int * );
-static double LogGamma( double, int * );
-static double Poisson( Rcontext *, double, int * );
-static double Rand( Rcontext *, int * );
-static int DefaultSeed( const Rcontext *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetSeed( AstMathMap *, int * );
-static int GetSimpFI( AstMathMap *, int * );
-static int GetSimpIF( AstMathMap *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestSeed( AstMathMap *, int * );
-static int TestSimpFI( AstMathMap *, int * );
-static int TestSimpIF( AstMathMap *, int * );
-static void CleanFunctions( int, const char *[], char ***, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearSeed( AstMathMap *, int * );
-static void ClearSimpFI( AstMathMap *, int * );
-static void ClearSimpIF( AstMathMap *, int * );
-static void CompileExpression( const char *, const char *, const char *, int, const char *[], int **, double **, int *, int * );
-static void CompileMapping( const char *, const char *, int, int, int, const char *[], int, const char *[], int ***, int ***, double ***, double ***, int *, int *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void EvaluateFunction( Rcontext *, int, const double **, const int *, const double *, int, double *, int * );
-static void EvaluationSort( const double [], int, int [], int **, int *, int * );
-static void ExtractExpressions( const char *, const char *, int, const char *[], int, char ***, int * );
-static void ExtractVariables( const char *, const char *, int, const char *[], int, int, int, int, int, char ***, int * );
-static void ParseConstant( const char *, const char *, const char *, int, int *, double *, int * );
-static void ParseName( const char *, int, int *, int * );
-static void ParseVariable( const char *, const char *, const char *, int, int, const char *[], int *, int *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetSeed( AstMathMap *, int, int * );
-static void SetSimpFI( AstMathMap *, int, int * );
-static void SetSimpIF( AstMathMap *, int, int * );
-static void ValidateSymbol( const char *, const char *, const char *, int, int, int *, int **, int **, int *, double **, int * );
-
-/* Member functions. */
-/* ================= */
-static void CleanFunctions( int nfun, const char *fun[], char ***clean, int *status ) {
-/*
-*  Name:
-*     CleanFunctions
-
-*  Purpose:
-*     Make a clean copy of a set of functions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void CleanFunctions( int nfun, const char *fun[], char ***clean, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function copies an array of strings, eliminating any white space
-*     characters and converting to lower case. It is intended for cleaning
-*     up arrays of function definitions prior to compilation. The returned
-*     copy is stored in dynamically allocated memory.
-
-*  Parameters:
-*     nfun
-*        The number of functions to be cleaned.
-*     fun
-*        Pointer to an array, with "nfun" elements, of pointers to null
-*        terminated strings which contain each of the functions.
-*     clean
-*        Address in which to return a pointer to an array (with "nfun"
-*        elements) of pointers to null terminated strings containing the
-*        cleaned functions (i.e. this returns an array of strings).
-*
-*        Both the returned array of pointers, and the strings to which they
-*        point, will be dynamically allocated and should be freed by the
-*        caller (using astFree) when no longer required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*        - A NULL value will be returned for "*clean" if this function is
-*        invoked with the global error status set, or if it should fail for
-*        any reason.
-*/
-
-/* Local Variables: */
-   char c;                       /* Character from function string */
-   int i;                        /* Loop counter for characters */
-   int ifun;                     /* Loop counter for functions */
-   int nc;                       /* Count of non-blank characters */
-   
-/* Initialise. */
-   *clean = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Allocate and initialise an array to hold the returned pointers. */
-   MALLOC_POINTER_ARRAY( *clean, char *, nfun )
-
-/* Loop through all the input functions. */
-   if ( astOK ) {
-      for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Count the number of non-blank characters in each function string. */
-         nc = 0;
-         for ( i = 0; ( c = fun[ ifun ][ i ] ); i++ ) nc += !isspace( c );
-
-/* Allocate a string long enough to hold the function with all the
-   white space removed, storing its pointer in the array allocated
-   earlier. Check for errors. */
-         ( *clean )[ ifun ] = astMalloc( sizeof( char ) *
-                                         (size_t) ( nc + 1 ) );
-         if ( !astOK ) break;
-
-/* Loop to copy the non-blank function characters into the new
-   string. */
-         nc = 0;
-         for ( i = 0; ( c = fun[ ifun ][ i ] ); i++ ) {
-            if ( !isspace( c ) ) ( *clean )[ ifun ][ nc++ ] = tolower( c );
-         }
-
-/* Null-terminate the result. */
-         ( *clean )[ ifun ][ nc ] = '\0';
-      }
-
-/* If an error occurred, then free the main pointer array together
-   with any strings that have been allocated, resetting the output
-   value. */
-      if ( !astOK ) {
-         FREE_POINTER_ARRAY( *clean, nfun )
-      }
-   }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a MathMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     MathMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     MathMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the MathMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstMathMap *this;             /* Pointer to the MathMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the MathMap structure. */
-   this = (AstMathMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Seed. */
-/* ----- */
-   if ( !strcmp( attrib, "seed" ) ) {
-      astClearSeed( this );
-
-/* SimpFI. */
-/* ------- */
-   } else if ( !strcmp( attrib, "simpfi" ) ) {
-      astClearSimpFI( this );
-
-/* SimpIF. */
-/* ------- */
-   } else if ( !strcmp( attrib, "simpif" ) ) {
-      astClearSimpIF( this );
-   
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void CompileExpression( const char *method, const char *class,
-                               const char *exprs, int nvar, const char *var[],
-                               int **code, double **con, int *stacksize, int *status ) {
-/*
-*  Name:
-*     CompileExpression
-
-*  Purpose:
-*     Compile a mathematical expression.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void CompileExpression( const char *method, const char *class,
-*                             const char *exprs, int nvar, const char *var[],
-*                             int **code, double **con, int *stacksize )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function checks and compiles a mathematical expression. It
-*     produces a sequence of operation codes (opcodes) and a set of
-*     numerical constants which may subsequently be used to evaluate the
-*     expression on a push-down stack.
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     exprs
-*        Pointer to a null-terminated string containing the expression
-*        to be compiled. This is case sensitive and should contain no white
-*        space.
-*     nvar
-*        The number of variable names defined for use in the expression.
-*     var
-*        An array of pointers (with "nvar" elements) to null-terminated
-*        strings. Each of these should contain a variable name which may
-*        appear in the expression. These strings are case sensitive and
-*        should contain no white space.
-*     code
-*        Address of a pointer which will be set to point at a dynamically
-*        allocated array of int containing the set of opcodes (cast to int)
-*        produced by this function. The first element of this array will
-*        contain a count of the number of opcodes which follow.
-*
-*        The allocated space must be freed by the caller (using astFree) when
-*        no longer required.
-*     con
-*        Address of a pointer which will be set to point at a dynamically
-*        allocated array of double containing the set of constants
-*        produced by this function (this may be NULL if no constants are
-*        produced).
-*
-*        The allocated space must be freed by the caller (using astFree) when
-*        no longer required.
-*     stacksize
-*        Pointer to an int in which to return the size of the push-down stack
-*        required to evaluate the expression using the returned opcodes and
-*        constants.
-
-*  Algorithm:
-*     The function passes through the input expression searching for
-*     symbols. It looks for standard symbols (arithmetic operators,
-*     parentheses, function calls and delimiters) in the next part of the
-*     expression to be parsed, using identification information stored in
-*     the static "symbol" array. It ignores certain symbols, according to
-*     whether they appear to be operators or operands. The choice depends on
-*     what the previous symbol was; for instance, two operators may not
-*     occur in succession. Unary +/- operators are also ignored in
-*     situations where they are not permitted.
-*
-*     If a standard symbol is found, it is passed to the ValidateSymbol
-*     function, which keeps track of the current level of parenthesis in the
-*     expression and of the number of arguments supplied to any (possibly
-*     nested) function calls. This function then accepts or rejects the
-*     symbol according to whether it is valid within the current context. An
-*     error is reported if it is rejected.
-*
-*     If the part of the expression currently being parsed did not contain a
-*     standard symbol, an attempt is made to parse it first as a constant,
-*     then as a variable name. If either of these succeeds, an appropriate
-*     symbol number is added to the list of symbols identified so far, and a
-*     value is added to the list of constants - this is either the value of
-*     the constant itself, or the identification number of the variable. If
-*     the expression cannot be parsed, an error is reported.
-*
-*     When the entire expression has been analysed as a sequence of symbols
-*     (and associated constants), the EvaluationSort function is
-*     invoked. This sorts the symbols into evaluation order, which is the
-*     order in which the associated operations must be performed on a
-*     push-down arithmetic stack to evaluate the expression. This routine
-*     also substitutes operation codes (defined in the "Oper" enum) for the
-*     symbol numbers and calculates the size of evaluation stack which will
-*     be required.
-
-*  Notes:
-*     - A value of NULL will be returned for the "*code" and "*con" pointers
-*     and a value of zero will be returned for the "*stacksize" value if this
-*     function is invoked with the global error status set, or if it should
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   double c;                     /* Value of parsed constant */
-   int *argcount;                /* Array of argument count information */
-   int *opensym;                 /* Array of opening parenthesis information */
-   int *symlist;                 /* Array of symbol indices */
-   int found;                    /* Standard symbol identified? */
-   int iend;                     /* Ending index in the expression string */
-   int istart;                   /* Staring index in the expression string */
-   int isym;                     /* Loop counter for symbols */
-   int ivar;                     /* Index of variable name */
-   int lpar;                     /* Parenthesis level */
-   int ncon;                     /* Number of constants generated */
-   int nsym;                     /* Number of symbols identified */
-   int opernext;                 /* Next symbol an operator (from left)? */
-   int size;                     /* Size of symbol matched */
-   int sym;                      /* Index of symbol in static "symbol" array */
-   int unarynext;                /* Next symbol may be unary +/- ? */
-
-/* Initialise. */
-   *code = NULL;
-   *con = NULL;
-   *stacksize = 0;
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   argcount = NULL;
-   lpar = 0;
-   ncon = 0;
-   nsym = 0;
-   opensym = NULL;
-   symlist = NULL;
-   sym = 0;
-   ivar = 0;
-
-/* The first symbol to be encountered must not look like an operator
-   from the left. It may be a unary + or - operator. */
-   opernext = 0;
-   unarynext = 1;
-
-/* Search through the expression to classify each symbol which appears
-   in it. Stop when there are no more input characters or an error is
-   detected. */
-   istart = 0;
-   for ( istart = 0; astOK && exprs[ istart ]; istart = iend + 1 ) {
-
-/* Compare each of the symbols in the symbol data with the next
-   section of the expression, looking for the longest symbol text which
-   will match. Stop if a NULL "text" value is found, which acts as the
-   end flag. */
-      found = 0;
-      size = 0;
-      for ( isym = 0; symbol[ isym ].text; isym++ ) {
-
-/* Only consider symbols which have text associated with them and
-   which look like operators or operands from the left, according to the
-   setting of the "opernext" flag. Thus, if an operator or operand is
-   missing from the input expression, the next symbol will not be
-   identified, because it will be of the wrong type. Also exclude unary
-   +/- operators if they are out of context. */
-         if ( symbol[ isym ].size &&
-              ( symbol[ isym ].operleft == opernext ) &&
-              ( !symbol[ isym ].unaryoper || unarynext ) ) {
-
-/* Test if the text of the symbol matches the expression at the
-   current position. If so, note that a match has been found. */
-            if ( !strncmp( exprs + istart, symbol[ isym ].text,
-                           (size_t) symbol[ isym ].size ) ) {
-               found = 1;
-
-/* If this symbol matches more characters than any previous symbol,
-   then store the symbol's index and note its size. */
-               if ( symbol[ isym ].size > size ) {
-                  sym = isym;
-                  size = symbol[ isym ].size;
-
-/* Calculate the index of the last symbol character in the expression
-   string. */
-                  iend = istart + size - 1;
-               }
-            }
-         }
-      }
-
-/* If the symbol was identified as one of the standard symbols, then
-   validate it, updating the parenthesis level and argument count
-   information at the same time. */
-      if ( found ) {
-         ValidateSymbol( method, class, exprs, iend, sym, &lpar, &argcount,
-                         &opensym, &ncon, con, status );
-
-/* If it was not one of the standard symbols, then check if the next
-   symbol was expected to be an operator. If so, then there is a missing
-   operator, so report an error. */
-      } else {
-         if ( opernext ) {
-            astError( AST__MIOPR,
-                      "%s(%s): Missing or invalid operator in the expression "
-                      "\"%.*s\".", status,
-                      method, class, istart + 1, exprs );
-
-/* If the next symbol was expected to be an operand, then it may be a
-   constant, so try to parse it as one. */
-         } else {
-            ParseConstant( method, class, exprs, istart, &iend, &c, status );
-            if ( astOK ) {
-
-/* If successful, set the symbol number to "symbol_ldcon" (load
-   constant) and extend the "*con" array to accommodate a new
-   constant. Check for errors. */
-               if ( iend >= istart ) {
-                  sym = symbol_ldcon;
-                  *con = astGrow( *con, ncon + 1, sizeof( double ) );
-                  if ( astOK ) {
-
-/* Append the constant to the "*con" array. */
-                     ( *con )[ ncon++ ] = c;
-                  }
-
-/* If the symbol did not parse as a constant, then it may be a
-   variable name, so try to parse it as one. */
-               } else {
-                  ParseVariable( method, class, exprs, istart, nvar, var,
-                                 &ivar, &iend, status );
-                  if ( astOK ) {
-
-/* If successful, set the symbol to "symbol_ldvar" (load variable) and
-   extend the "*con" array to accommodate a new constant. Check for
-   errors. */
-                     if ( ivar != -1 ) {
-                        sym = symbol_ldvar;
-                        *con = astGrow( *con, ncon + 1, sizeof( double ) );
-                        if ( astOK ) {
-
-/* Append the variable identification number as a constant to the
-   "*con" array. */
-                           ( *con )[ ncon++ ] = (double) ivar;
-                        }
-
-/* If the expression did not parse as a variable name, then there is a
-   missing operand in the expression, so report an error. */
-                     } else {
-                        astError( AST__MIOPA,
-                                  "%s(%s): Missing or invalid operand in the "
-                                  "expression \"%.*s\".", status,
-                                  method, class, istart + 1, exprs );
-                     }
-                  }
-               }
-            }
-         }
-      }
-
-/* If there has been no error, then the next symbol in the input
-   expression has been identified and is valid. */
-      if ( astOK ) {
-
-/* Decide whether the next symbol should look like an operator or an
-   operand from the left. This is determined by the nature of the symbol
-   just identified (seen from the right) - two operands or two operators
-   cannot be adjacent. */
-         opernext = !symbol[ sym ].operright;
-
-/* Also decide whether the next symbol may be a unary +/- operator,
-   according to the "unarynext" symbol data entry for the symbol just
-   identified. */
-         unarynext = symbol[ sym ].unarynext;
-
-/* Extend the "symlist" array to accommodate the symbol just
-   identified. Check for errors. */
-         symlist = astGrow( symlist, nsym + 1, sizeof( int ) );
-         if ( astOK ) {
-
-/* Append the symbol's index to the end of this list. */
-            symlist[ nsym++ ] = sym;
-         }
-      }
-   }
-
-/* If there has been no error, check the final context after
-   identifying all the symbols... */
-   if ( astOK ) {
-
-/* If an operand is still expected, then there is an unsatisfied
-   operator on the end of the expression, so report an error. */
-      if ( !opernext ) {
-         astError( AST__MIOPA,
-                   "%s(%s): Missing or invalid operand in the expression "
-                   "\"%s\".", status,
-                   method, class, exprs );
-
-/* If the final parenthesis level is positive, then there is a missing
-   right parenthesis, so report an error. */
-      } else if ( lpar > 0 ) {
-         astError( AST__MRPAR,
-                   "%s(%s): Missing right parenthesis in the expression "
-                   "\"%s\".", status,
-                   method, class, exprs );
-      }
-   }
-
-/* Sort the symbols into evaluation order to produce output opcodes. */
-   EvaluationSort( *con, nsym, symlist, code, stacksize, status );
-
-/* Free any memory used as workspace. */
-   if ( argcount ) argcount = astFree( argcount );
-   if ( opensym ) opensym = astFree( opensym );
-   if ( symlist ) symlist = astFree( symlist );
-
-/* If OK, re-allocate the "*con" array to have the correct size (since
-   astGrow may have over-allocated space). */
-   if ( astOK && *con ) {
-      *con = astRealloc( *con, sizeof( double ) * (size_t) ncon );
-   }
-
-/* If an error occurred, free any allocated memory and reset the
-   output values. */
-   if ( !astOK ) {
-      *code = astFree( *code );
-      *con = astFree( *con );
-      *stacksize = 0;
-   }
-}
-
-static void CompileMapping( const char *method, const char *class,
-                            int nin, int nout,
-                            int nfwd, const char *fwdfun[],
-                            int ninv, const char *invfun[],
-                            int ***fwdcode, int ***invcode,
-                            double ***fwdcon, double ***invcon,
-                            int *fwdstack, int *invstack, int *status ) {
-/*
-*  Name:
-*     CompileMapping
-
-*  Purpose:
-*     Compile the transformation functions for a MathMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void CompileMapping( const char *method, const char *class,
-*                          int nin, int nout,
-*                          int nfwd, const char *fwdfun[],
-*                          int ninv, const char *invfun[],
-*                          int ***fwdcode, int ***invcode,
-*                          double ***fwdcon, double ***invcon,
-*                          int *fwdstack, int *invstack, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function checks and compiles the transformation functions required
-*     to create a MathMap. It produces sequences of operation codes (opcodes)
-*     and numerical constants which may subsequently be used to evaluate the
-*     functions on a push-down stack.
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     nin
-*        Number of input variables for the MathMap.
-*     nout
-*        Number of output variables for the MathMap.
-*     nfwd
-*        The number of forward transformation functions being supplied.
-*        This must be at least equal to "nout".
-*     fwdfun
-*        Pointer to an array, with "nfwd" elements, of pointers to null
-*        terminated strings which contain each of the forward transformation
-*        functions. These must be in lower case and should contain no white
-*        space.
-*     ninv
-*        The number of inverse transformation functions being supplied.
-*        This must be at least equal to "nin".
-*     invfun
-*        Pointer to an array, with "ninv" elements, of pointers to null
-*        terminated strings which contain each of the inverse transformation
-*        functions. These must be in lower case and should contain no white
-*        space.
-*     fwdcode
-*        Address in which to return a pointer to an array (with "nfwd"
-*        elements) of pointers to arrays of int containing the set of opcodes
-*        (cast to int) for each forward transformation function. The number
-*        of opcodes produced for each function is given by the first element
-*        of the opcode array.
-*
-*        Both the returned array of pointers, and the arrays of int to which
-*        they point, will be stored in dynamically allocated memory and should
-*        be freed by the caller (using astFree) when no longer required.
-*
-*        If the right hand sides (including the "=" sign) of all the supplied
-*        functions are absent, then this indicates an undefined transformation
-*        and the returned pointer value will be NULL. An error results if
-*        an "=" sign is present but no expression follows it.
-*     invcode
-*        Address in which to return a pointer to an array (with "ninv"
-*        elements) of pointers to arrays of int containing the set of opcodes
-*        (cast to int) for each inverse transformation function. The number
-*        of opcodes produced for each function is given by the first element
-*        of the opcode array.
-*
-*        Both the returned array of pointers, and the arrays of int to which
-*        they point, will be stored in dynamically allocated memory and should
-*        be freed by the caller (using astFree) when no longer required.
-*
-*        If the right hand sides (including the "=" sign) of all the supplied
-*        functions are absent, then this indicates an undefined transformation
-*        and the returned pointer value will be NULL. An error results if
-*        an "=" sign is present but no expression follows it.
-*     fwdcon
-*        Address in which to return a pointer to an array (with "nfwd"
-*        elements) of pointers to arrays of double containing the set of
-*        constants for each forward transformation function.
-*
-*        Both the returned array of pointers, and the arrays of double to which
-*        they point, will be stored in dynamically allocated memory and should
-*        be freed by the caller (using astFree) when no longer required. Note
-*        that any of the pointers to the arrays of double may be NULL if no
-*        constants are associated with a particular function.
-*
-*        If the forward transformation is undefined, then the returned pointer
-*        value will be NULL.
-*     invcon
-*        Address in which to return a pointer to an array (with "ninv"
-*        elements) of pointers to arrays of double containing the set of
-*        constants for each inverse transformation function.
-*
-*        Both the returned array of pointers, and the arrays of double to which
-*        they point, will be stored in dynamically allocated memory and should
-*        be freed by the caller (using astFree) when no longer required. Note
-*        that any of the pointers to the arrays of double may be NULL if no
-*        constants are associated with a particular function.
-*
-*        If the inverse transformation is undefined, then the returned pointer
-*        value will be NULL.
-*     fwdstack
-*        Pointer to an int in which to return the size of the push-down stack
-*        required to evaluate the forward transformation functions.
-*     invstack
-*        Pointer to an int in which to return the size of the push-down stack
-*        required to evaluate the inverse transformation functions.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - A value of NULL will be returned for the "*fwdcode", "*invcode",
-*     "*fwdcon" and "*invcon" pointers and a value of zero will be returned
-*     for the "*fwdstack" and "*invstack" values if this function is invoked
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   char **exprs;                 /* Pointer to array of expressions */
-   char **var;                   /* Pointer to array of variable names */
-   const char **strings;         /* Pointer to temporary array of strings */
-   int ifun;                     /* Loop counter for functions */
-   int nvar;                     /* Number of variables to extract */
-   int stacksize;                /* Required stack size */
-
-/* Initialise. */
-   *fwdcode = NULL;
-   *invcode = NULL;
-   *fwdcon = NULL;
-   *invcon = NULL;
-   *fwdstack = 0;
-   *invstack = 0;
-   nvar = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   exprs = NULL;
-   var = NULL;
-
-/* Compile the forward transformation. */
-/* ----------------------------------- */   
-/* Allocate space for an array of pointers to the functions from which
-   we will extract variable names. */
-   strings = astMalloc( sizeof( char * ) * (size_t) ( nin + nfwd ) );
-
-/* Fill the first elements of this array with pointers to the inverse
-   transformation functions ("nin" in number) which yield the final input
-   values. These will have the names of the input variables on their left
-   hand sides. */
-   if ( astOK ) {
-      nvar = 0;
-      for ( ifun = ninv - nin; ifun < ninv; ifun++ ) {
-         strings[ nvar++ ] = invfun[ ifun ];
-      }
-
-/* Fill the remaining elements of the array with pointers to the
-   forward transformation functions. These will have the names of any
-   intermediate variables plus the final output variables on their left
-   hand sides. */
-      for ( ifun = 0; ifun < nfwd; ifun++ ) strings[ nvar++ ] = fwdfun[ ifun ];
-
-/* Extract the variable names from the left hand sides of these
-   functions and check them for validity and absence of duplication. */
-      ExtractVariables( method, class, nvar, strings, nin, nout, nfwd, ninv, 1,
-                        &var, status );
-   }
-
-/* Free the temporary array of string pointers. */
-   strings = astFree( strings );
-
-/* Extract the expressions from the right hand sides of the forward
-   transformation functions. */
-   ExtractExpressions( method, class, nfwd, fwdfun, 1, &exprs, status );
-
-/* If OK, and the forward transformation is defined, then allocate and
-   initialise space for an array of pointers to the opcodes for each
-   expression and, similarly, for the constants for each expression. */
-   if ( astOK && exprs ) {
-      MALLOC_POINTER_ARRAY( *fwdcode, int *, nfwd )
-      MALLOC_POINTER_ARRAY( *fwdcon, double *, nfwd )
-
-/* If OK, loop to compile each of the expressions, storing pointers to
-   the resulting opcodes and constants in the arrays allocated above. On
-   each loop, we make progressively more of the variable names in "var"
-   visible to the compilation function. This ensures that each expression
-   can only use variables which have been defined earlier. */
-      if ( astOK ) {
-         for ( ifun = 0; ifun < nfwd; ifun++ ) {
-            CompileExpression( method, class, exprs[ ifun ],
-                               nin + ifun, (const char **) var,
-                               &( *fwdcode )[ ifun ], &( *fwdcon )[ ifun ],
-                               &stacksize, status );
-
-/* If an error occurs, then report contextual information and quit. */
-            if ( !astOK ) {
-               astError( astStatus,
-                         "Error in forward transformation function %d.", status,
-                         ifun + 1 );
-               break;
-            }
-
-/* If OK, calculate the maximum evaluation stack size required by any
-   of the expressions. */
-            *fwdstack = ( *fwdstack > stacksize ) ? *fwdstack : stacksize;
-         }
-      }
-   }
-
-/* Free the memory containing the extracted expressions and variables. */
-   FREE_POINTER_ARRAY( exprs, nfwd )
-   FREE_POINTER_ARRAY( var, nvar )
-
-/* Compile the inverse transformation. */
-/* ----------------------------------- */   
-/* Allocate space for an array of pointers to the functions from which
-   we will extract variable names. */
-   strings = astMalloc( sizeof( char * ) * (size_t) ( nout + ninv ) );
-
-/* Fill the first elements of this array with pointers to the forward
-   transformation functions ("nout" in number) which yield the final
-   output values. These will have the names of the output variables on
-   their left hand sides. */
-   if ( astOK ) {
-      nvar = 0;
-      for ( ifun = nfwd - nout; ifun < nfwd; ifun++ ) {
-         strings[ nvar++ ] = fwdfun[ ifun ];
-      }
-
-/* Fill the remaining elements of the array with pointers to the
-   inverse transformation functions. These will have the names of any
-   intermediate variables plus the final input variables on their left
-   hand sides. */
-      for ( ifun = 0; ifun < ninv; ifun++ ) strings[ nvar++ ] = invfun[ ifun ];
-
-/* Extract the variable names from the left hand sides of these
-   functions and check them for validity and absence of duplication. */
-      ExtractVariables( method, class, nvar, strings, nin, nout, nfwd, ninv, 0,
-                        &var, status );
-   }
-
-/* Free the temporary array of string pointers. */
-   strings = astFree( strings );
-
-/* Extract the expressions from the right hand sides of the inverse
-   transformation functions. */
-   ExtractExpressions( method, class, ninv, invfun, 0, &exprs, status );
-
-/* If OK, and the forward transformation is defined, then allocate and
-   initialise space for an array of pointers to the opcodes for each
-   expression and, similarly, for the constants for each expression. */
-   if ( astOK && exprs ) {
-      MALLOC_POINTER_ARRAY( *invcode, int *, ninv )
-      MALLOC_POINTER_ARRAY( *invcon, double *, ninv )
-
-/* If OK, loop to compile each of the expressions, storing pointers to
-   the resulting opcodes and constants in the arrays allocated above. On
-   each loop, we make progressively more of the variable names in "var"
-   visible to the compilation function. This ensures that each expression
-   can only use variables which have been defined earlier. */
-      if ( astOK ) {
-         for ( ifun = 0; ifun < ninv; ifun++ ) {
-            CompileExpression( method, class, exprs[ ifun ],
-                               nout + ifun, (const char **) var,
-                               &( *invcode )[ ifun ], &( *invcon )[ ifun ],
-                               &stacksize, status );
-
-/* If an error occurs, then report contextual information and quit. */
-            if ( !astOK ) {
-               astError( astStatus,
-                         "Error in inverse transformation function %d.", status,
-                         ifun + 1 );
-               break;
-            }
-
-/* If OK, calculate the maximum evaluation stack size required by any
-   of the expressions. */
-            *invstack = ( *invstack > stacksize ) ? *invstack : stacksize;
-         }
-      }
-   }
-
-/* Free the memory containing the extracted expressions and variables. */
-   FREE_POINTER_ARRAY( exprs, ninv )
-   FREE_POINTER_ARRAY( var, nvar )
-
-/* If an error occurred, then free all remaining allocated memory and
-   reset the output values. */
-   if ( !astOK ) {
-      FREE_POINTER_ARRAY( *fwdcode, nfwd )
-      FREE_POINTER_ARRAY( *invcode, ninv )
-      FREE_POINTER_ARRAY( *fwdcon, nfwd )
-      FREE_POINTER_ARRAY( *invcon, ninv )
-      *fwdstack = 0;
-      *invstack = 0;
-   }
-}
-
-static int DefaultSeed( const Rcontext *context, int *status ) {
-/*
-*  Name:
-*     DefaultSeed
-
-*  Purpose:
-*     Generate an unpredictable seed for a random number generator.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     int DefaultSeed( Rcontext *context, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     On each invocation this function returns an integer value which is
-*     highly unpredictable. This value may be used as a default seed for the
-*     random number generator associated with a MathMap, so that it
-*     generates a different sequence on each occasion.
-
-*  Parameters:
-*     context
-*        Pointer to the random number generator context associated with
-*        the MathMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The unpredictable integer.
-
-*  Notes:
-*     - This function does not perform error checking and will execute even
-*     if the global error status is set.
-*/
-
-/* Local Constants: */
-   const int nwarm = 5;          /* Number of warm-up iterations */
-   const long int a = 8121L;     /* Constants for random number generator... */
-   const long int c = 28411L;
-   const long int m = 134456L;
-
-/* Local Variables; */
-   int iwarm;                    /* Loop counter for warm-up iterations */
-   static long init = 0;         /* Local initialisation performed? */
-   static long int rand;         /* Local random integer */
-   unsigned long int bits;       /* Bit pattern for producing result */
-
-/* On the first invocation, initialise a local random number generator
-   to a value derived by combining bit patterns obtained from the system
-   clock and the processor time used. The result needs to be positive and
-   lie in the range 0 to "m-1". */
-   LOCK_MUTEX5
-   if ( !init ) {
-      rand = (long int) ( ( (unsigned long int) time( NULL ) ^
-                            (unsigned long int) clock() ) %
-                          (unsigned long int) m );
-
-/* These values will typically only change in their least significant
-   bits between programs run successively, but by using the bit pattern
-   as a seed, we ensure that these differences are rapidly propagated to
-   other bits. To hasten this process, we "warm up" the local generator
-   with a few iterations. This is a quick and dirty generator using
-   constants from Press et al. (Numerical recipes). */
-      for ( iwarm = 0; iwarm < nwarm; iwarm++ ) {
-         rand = ( rand * a + c ) % m;
-      }
-
-/* Note that this initialisation has been performed. */
-      init = 1;
-   }
-   UNLOCK_MUTEX5
-
-/* Generate a new bit pattern from the system time. Apart from the
-   first invocation, this will be a different time to that used above. */
-   bits = (unsigned long int) time( NULL );
-
-/* Mask in a pattern derived from the CPU time used. */
-   bits ^= (unsigned long int) clock();
-
-/* The system time may change quite slowly (e.g. every second), so
-   also mask in the address of the random number generator context
-   supplied. This makes the seed depend on which MathMap is in use. */
-   bits ^= (unsigned long int) context;
-
-/* Now mask in the last random integer produced by the random number
-   generator whose context has been supplied. This makes the seed depend
-   on the MathMap's past use of random numbers. */
-   bits ^= (unsigned long int) context->random_int;
-
-/* Finally, in order to produce different seeds when this function is
-   invoked twice in rapid succession on the same object (with no
-   intermediate processing), we also mask in a pseudo-random value
-   generated here. Generate the next local random integer. */
-   rand = ( rand * a + c ) % m;
-
-/* We then scale this value to give an integer in the range 0 to
-   ULONG_MAX and mask the corresponding bit pattern into our seed. */
-   bits ^= (unsigned long int) ( ( (double) rand / (double) ( m - 1UL ) ) *
-                                 ( ( (double) ULONG_MAX + 1.0 ) *
-                                   ( 1.0 - DBL_EPSILON ) ) );
-
-/* Return the integer value of the seed (which may involve discarding
-   some unwanted bits). */
-   return (int) bits;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two MathMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     MathMap member function (over-rides the astEqual protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two MathMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a MathMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the MathMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - The two MathMaps are considered equivalent if the combination of
-*     the first in series with the inverse of the second simplifies to a
-*     UnitMap.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMathMap *that;          /* Pointer to the second MathMap structure */
-   AstMathMap *this;          /* Pointer to the first MathMap structure */
-   double **that_con;         /* Lists of constants from "that" */
-   double **this_con;         /* Lists of constants from "this" */
-   int **that_code;           /* Lists of opcodes from "that" */
-   int **this_code;           /* Lists of opcodes from "this" */
-   int code;                  /* Opcode value */
-   int icode;                 /* Opcode index */
-   int icon;                  /* Constant index */
-   int ifun;                  /* Function index */
-   int ncode;                 /* No. of opcodes for current "this" function */
-   int ncode_that;            /* No. of opcodes for current "that" function */
-   int nin;                   /* Number of inputs */
-   int nout;                  /* Number of outputs */
-   int pass;                  /* Check fwd or inv */
-   int result;                /* Result value to return */
-   int that_nfun;             /* Number of functions from "that" */
-   int this_nfun;             /* Number of functions from "this" */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two MathMap structures. */
-   this = (AstMathMap *) this_object;
-   that = (AstMathMap *) that_object;
-
-/* Check the second object is a MathMap. We know the first is a
-   MathMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAMathMap( that ) ) {
-
-/* Check they have the same number of inputs and outputs */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNout( that ) == nout && astGetNin( that ) == nin ) {
-
-/* Assume equality. */ 
-         result = 1;
-
-/* The first pass through this next loop compares forward functions, and
-   the second pass compares inverse functions. */
-         for( pass = 0; pass < 2 && result; pass++ ) {
-
-/* On the first pass, get pointers to the lists of opcodes and constants for 
-   the effective forward transformations (taking into account the value
-   of the Invert attribute), together with the number of such functions. */
-            if( pass == 0 ) {
-               if( !astGetInvert( this ) ) {
-                  this_code = this->fwdcode;
-                  this_con = this->fwdcon;
-                  this_nfun = this->nfwd;
-               } else {
-                  this_code = this->invcode;
-                  this_con = this->invcon;
-                  this_nfun = this->ninv;
-               } 
-
-               if( !astGetInvert( that ) ) {
-                  that_code = that->fwdcode;
-                  that_con = that->fwdcon;
-                  that_nfun = that->nfwd;
-               } else {
-                  that_code = that->invcode;
-                  that_con = that->invcon;
-                  that_nfun = that->ninv;
-               } 
-
-/* On the second pass, get pointers to the lists of opcodes and constants for 
-   the effective inverse transformations, together with the number of such 
-   functions. */
-            } else {
-
-               if( astGetInvert( this ) ) {
-                  this_code = this->fwdcode;
-                  this_con = this->fwdcon;
-                  this_nfun = this->nfwd;
-               } else {
-                  this_code = this->invcode;
-                  this_con = this->invcon;
-                  this_nfun = this->ninv;
-               } 
-
-               if( astGetInvert( that ) ) {
-                  that_code = that->fwdcode;
-                  that_con = that->fwdcon;
-                  that_nfun = that->nfwd;
-               } else {
-                  that_code = that->invcode;
-                  that_con = that->invcon;
-                  that_nfun = that->ninv;
-               } 
-            }
-
-/* Check that "this" and "that" have the same number of functions */
-            if( that_nfun != this_nfun ) result = 0;
-
-/* Loop round each function. */
-            for( ifun = 0; ifun < this_nfun && result; ifun++ ) {
-
-/* The first element in the opcode array is the number of subsequent
-   opcodes. Obtain and compare these counts. */
-               ncode = this_code ? this_code[ ifun ][ 0 ] : 0;
-               ncode_that = that_code ? that_code[ ifun ][ 0 ] : 0;
-               if( ncode != ncode_that ) result = 0;
-
-/* Compare the following opcodes. Some opcodes consume constants from the 
-   list of constants associated with the MathMap. Compare the constants
-   for such opcodes. */
-               icon = 0;
-               for( icode = 0; icode < ncode && result; icode++ ){     
-                  code = this_code[ ifun ][ icode ];
-                  if( that_code[ ifun ][ icode ] != code ) {
-                     result = 0;
-
-                  } else if( code == OP_LDCON ||
-                             code == OP_LDVAR ||
-                             code == OP_MAX ||
-                             code == OP_MIN ) {
-
-                     if( this_con[ ifun ][ icon ] != 
-                         that_con[ ifun ][ icon ] ) {
-                        result = 0;
-                     } else {
-                        icon++;
-                     }
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void EvaluateFunction( Rcontext *rcontext, int npoint,
-                              const double **ptr_in, const int *code,
-                              const double *con, int stacksize, double *out, int *status ) {
-/*
-*  Name:
-*     EvaluateFunction
-
-*  Purpose:
-*     Evaluate a compiled function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void EvaluateFunction( Rcontext *rcontext, int npoint,
-*                            const double **ptr_in, const int *code,
-*                            const double *con, int stacksize, double *out, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function implements a "virtual machine" which executes operations
-*     on an arithmetic stack in order to evaluate transformation functions.
-*     Each operation is specified by an input operation code (opcode) and
-*     results in the execution of a vector operation on a stack. The final
-*     result, after executing all the supplied opcodes, is returned as a
-*     vector.
-*
-*     This function detects arithmetic errors (such as overflow and division
-*     by zero) and propagates any "bad" coordinate values, including those
-*     present in the input, to the output.
-
-*  Parameters:
-*     npoint
-*        The number of points to be transformd (i.e. the size of the vector
-*        of values on which operations are to be performed).
-*     ptr_in
-*        Pointer to an array of pointers to arrays of double (with "npoint"
-*        elements). These arrays should contain the input coordinate values,
-*        such that coordinate number "coord" for point number "point" can be
-*        found in "ptr_in[coord][point]".
-*     code
-*        Pointer to an array of int containing the set of opcodes (cast to int)
-*        for the operations to be performed. The first element of this array
-*        should contain a count of the number of opcodes which follow.
-*     con
-*        Pointer to an array of double containing the set of constants required
-*        to evaluate the function (this may be NULL if no constants are
-*        required).
-*     stacksize
-*        The size of the stack required to evaluate the expression using the
-*        opcodes and constants supplied. This value should be calculated during
-*        expression compilation.
-*     out
-*        Pointer to an array of double (with "npoint" elements) in which to
-*        return the vector of result values.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-   const int bits =              /* Number of bits in an unsigned long */
-      sizeof( unsigned long ) * CHAR_BIT;
-   const double eps =            /* Smallest number subtractable from 2.0 */
-      2.0 * DBL_EPSILON;
-   const double scale =          /* 2.0 raised to the power "bits" */
-      ldexp( 1.0, bits );
-   const double scale1 =         /* 2.0 raised to the power "bits-1" */
-      scale * 0.5;
-   const double rscale =         /* Reciprocal scale factor */
-      1.0 / scale;
-   const double rscale1 =        /* Reciprocal initial scale factor */
-      1.0 / scale1;
-   const int nblock =            /* Number of blocks of bits to process */
-      ( sizeof( double ) + sizeof( unsigned long ) - 1 ) /
-      sizeof( unsigned long );
-   const unsigned long signbit = /* Mask for extracting sign bit */
-      1UL << ( bits - 1 );
-
-/* Local Variables: */
-   double **stack;               /* Array of pointers to stack elements */
-   double *work;                 /* Pointer to stack workspace */
-   double *xv1;                  /* Pointer to first argument vector */
-   double *xv2;                  /* Pointer to second argument vector */
-   double *xv3;                  /* Pointer to third argument vector */
-   double *xv;                   /* Pointer to sole argument vector */
-   double *y;                    /* Pointer to result */
-   double *yv;                   /* Pointer to result vector */
-   double abs1;                  /* Absolute value (temporary variable) */
-   double abs2;                  /* Absolute value (temporary variable) */
-   double frac1;                 /* First (maybe normalised) fraction */
-   double frac2;                 /* Second (maybe normalised) fraction */
-   double frac;                  /* Sole normalised fraction */
-   double newexp;                /* New power of 2 exponent value */
-   double ran;                   /* Random number */
-   double result;                /* Function result value */
-   double unscale;               /* Factor for removing scaling */
-   double value;                 /* Value to be assigned to stack vector */
-   double x1;                    /* First argument value */
-   double x2;                    /* Second argument value */
-   double x3;                    /* Third argument value */
-   double x;                     /* Sole argument value */
-   int expon1;                   /* First power of 2 exponent */
-   int expon2;                   /* Second power of 2 exponent */
-   int expon;                    /* Sole power of 2 exponent */
-   int iarg;                     /* Loop counter for arguments */
-   int iblock;                   /* Loop counter for blocks of bits */
-   int icode;                    /* Opcode value */
-   int icon;                     /* Counter for number of constants used */
-   int istk;                     /* Loop counter for stack elements */
-   int ivar;                     /* Input variable number */
-   int narg;                     /* Number of function arguments */
-   int ncode;                    /* Number of opcodes to process */
-   int point;                    /* Loop counter for stack vector elements */
-   int sign;                     /* Argument is non-negative? */
-   int tos;                      /* Top of stack index */
-   static double d2r;            /* Degrees to radians conversion factor */
-   static double log2;           /* Natural logarithm of 2.0 */
-   static double pi;             /* Value of PI */
-   static double r2d;            /* Radians to degrees conversion factor */
-   static double rsafe_sq;       /* Reciprocal of "safe_sq" */
-   static double safe_sq;        /* Huge value that can safely be squared */
-   static int init = 0;          /* Initialisation performed? */
-   unsigned long b1;             /* Block of bits from first argument */
-   unsigned long b2;             /* Block of bits from second argument */
-   unsigned long b;              /* Block of bits for result */
-   unsigned long neg;            /* Result is negative? (sign bit) */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If this is the first invocation of this function, then initialise
-   constant values. */
-   LOCK_MUTEX2
-   if ( !init ) {
-
-/* Trigonometrical conversion factors. */
-      pi = acos( -1.0 );
-      r2d = 180.0 / pi;
-      d2r = pi / 180.0;
-
-/* Natural logarithm of 2.0. */
-      log2 = log( 2.0 );
-
-/* This value must be safe to square without producing overflow, yet
-   large enough that adding or subtracting 1.0 from the square makes no
-   difference. We also need its reciprocal. */
-      safe_sq = 0.9 * sqrt( DBL_MAX );
-      rsafe_sq = 1.0 / safe_sq;
-
-/* Note that initialisation has been performed. */
-      init = 1;
-   }
-   UNLOCK_MUTEX2
-
-/* Allocate space for an array of pointers to elements of the
-   workspace stack (each stack element being an array of double). */
-   stack = astMalloc( sizeof( double * ) * (size_t) stacksize );
-
-/* Allocate space for the stack itself. */
-   work = astMalloc( sizeof( double ) *
-                     (size_t) ( npoint * ( stacksize - 1 ) ) );
-
-/* If OK, then initialise the stack pointer array to identify the
-   start of each vector on the stack. The first element points at the
-   output array (in which the result will be accumulated), while other
-   elements point at successive vectors within the workspace allocated
-   above. */
-   if ( astOK ) {
-      stack[ 0 ] = out;
-      for ( istk = 1; istk < stacksize; istk++ ) {
-         stack[ istk ] = work + ( istk - 1 ) * npoint;
-      }
-
-/* Define stack operations. */
-/* ======================== */
-/* We now define a set of macros for performing vector operations on
-   elements of the stack. Each is in the form of a "case" block for
-   execution in response to the appropriate operation code (opcode). */
-
-/* Zero-argument operation. */
-/* ------------------------ */
-/* This macro performs a zero-argument operation, which results in the
-   insertion of a new vector on to the stack. */
-#define ARG_0(oper,setup,function) \
-\
-/* Test for the required opcode value. */ \
-   case oper: \
-\
-/* Perform any required initialisation. */ \
-      {setup;} \
-\
-/* Increment the top of stack index and obtain a pointer to the new stack \
-   element (vector). */ \
-      yv = stack[ ++tos ]; \
-\
-/* Loop to access each vector element, obtaining a pointer to it. */ \
-      for ( point = 0; point < npoint; point++ ) { \
-         y = yv + point; \
-\
-/* Perform the processing, which results in assignment to this element. */ \
-         {function;} \
-      } \
-\
-/* Break out of the "case" block. */ \
-      break;
-
-/* One-argument operation. */
-/* ----------------------- */
-/* This macro performs a one-argument operation, which processes the
-   top stack element without changing the stack size. */
-#define ARG_1(oper,function) \
-\
-/* Test for the required opcode value. */ \
-   case oper: \
-\
-/* Obtain a pointer to the top stack element (vector). */ \
-      xv = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining its value and \
-   checking that it is not bad. */ \
-      for ( point = 0; point < npoint; point++ ) { \
-         if ( ( x = xv[ point ] ) != AST__BAD ) { \
-\
-/* Also obtain a pointer to the element. */ \
-            y = xv + point; \
-\
-/* Perform the processing, which uses the element's value and then \
-   assigns the result to this element. */ \
-            {function;} \
-         } \
-      } \
-\
-/* Break out of the "case" block. */ \
-      break;
-
-/* One-argument boolean operation. */
-/* ------------------------------- */
-/* This macro is similar in function to ARG_1 above, except that no
-   checks are made for bad argument values. It is intended for use with
-   boolean functions where bad values are handled explicitly. */
-#define ARG_1B(oper,function) \
-\
-/* Test for the required opcode value. */ \
-   case oper: \
-\
-/* Obtain a pointer to the top stack element (vector). */ \
-      xv = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the argument value \
-   and a pointer to the element. */ \
-      for ( point = 0; point < npoint; point++ ) { \
-         x = xv[ point ]; \
-         y = xv + point; \
-\
-/* Perform the processing, which uses the element's value and then \
-   assigns the result to this element. */ \
-         {function;} \
-      } \
-\
-/* Break out of the "case" block. */ \
-      break;
-
-/* Two-argument operation. */
-/* ----------------------- */
-/* This macro performs a two-argument operation, which processes the
-   top two stack elements and produces a single result, resulting in the
-   stack size decreasing by one. In this case, we first define a macro
-   without the "case" block statements present. */
-#define DO_ARG_2(function) \
-\
-/* Obtain pointers to the top two stack elements (vectors), decreasing \
-   the top of stack index by one. */ \
-      xv2 = stack[ tos-- ]; \
-      xv1 = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the value of the \
-   first argument and checking that it is not bad. */ \
-      for ( point = 0; point < npoint; point++ ) { \
-         if ( ( x1 = xv1[ point ] ) != AST__BAD ) { \
-\
-/* Also obtain a pointer to the element which is to receive the \
-   result. */ \
-            y = xv1 + point; \
-\
-/* Obtain the value of the second argument, again checking that it is \
-   not bad. */ \
-            if ( ( x2 = xv2[ point ] ) != AST__BAD ) { \
-\
-/* Perform the processing, which uses the two argument values and then \
-   assigns the result to the appropriate top of stack element. */ \
-               {function;} \
-\
-/* If the second argument was bad, so is the result. */ \
-            } else { \
-               *y = AST__BAD; \
-            } \
-         } \
-      }
-
-/* This macro simply wraps the one above up in a "case" block. */
-#define ARG_2(oper,function) \
-   case oper: \
-      DO_ARG_2(function) \
-      break;
-
-/* Two-argument boolean operation. */
-/* ------------------------------- */
-/* This macro is similar in function to ARG_2 above, except that no
-   checks are made for bad argument values. It is intended for use with
-   boolean functions where bad values are handled explicitly. */
-#define ARG_2B(oper,function) \
-\
-/* Test for the required opcode value. */ \
-   case oper: \
-\
-/* Obtain pointers to the top two stack elements (vectors), decreasing \
-   the top of stack index by one. */ \
-      xv2 = stack[ tos-- ]; \
-      xv1 = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the value of both \
-   arguments and a pointer to the element which is to receive the \
-   result. */ \
-      for ( point = 0; point < npoint; point++ ) { \
-         x1 = xv1[ point ]; \
-         x2 = xv2[ point ]; \
-         y = xv1 + point; \
-\
-/* Perform the processing, which uses the two argument values and then \
-   assigns the result to the appropriate top of stack element. */ \
-         {function;} \
-      } \
-\
-/* Break out of the "case" block. */ \
-      break;
-
-/* Three-argument boolean operation. */
-/* --------------------------------- */
-/* This macro is similar in function to ARG_2B above, except that it
-   takes three values of the stack and puts one back. It performs no
-   checks for bad values. */
-#define ARG_3B(oper,function) \
-\
-/* Test for the required opcode value. */ \
-   case oper: \
-\
-/* Obtain pointers to the top three stack elements (vectors), decreasing \
-   the top of stack index by two. */ \
-      xv3 = stack[ tos-- ]; \
-      xv2 = stack[ tos-- ]; \
-      xv1 = stack[ tos ]; \
-\
-/* Loop to access each vector element, obtaining the value of all 3 \
-   arguments and a pointer to the element which is to receive the \
-   result. */ \
-      for ( point = 0; point < npoint; point++ ) { \
-         x1 = xv1[ point ]; \
-         x2 = xv2[ point ]; \
-         x3 = xv3[ point ]; \
-         y = xv1 + point; \
-\
-/* Perform the processing, which uses the three argument values and then \
-   assigns the result to the appropriate top of stack element. */ \
-         {function;} \
-      } \
-\
-/* Break out of the "case" block. */ \
-      break;
-
-/* Define arithmetic operations. */
-/* ============================= */
-/* We now define macros for performing some of the arithmetic
-   operations we will require in a "safe" way - i.e. trapping numerical
-   problems such as overflow and invalid arguments and translating them
-   into the AST__BAD value. */
-
-/* Absolute value. */
-/* --------------- */
-/* This is just shorthand. */
-#define ABS(x) ( ( (x) >= 0.0 ) ? (x) : -(x) )
-
-/* Integer part. */
-/* ------------- */
-/* This implements rounding towards zero without involving conversion
-   to an integer (which could overflow). */
-#define INT(x) ( ( (x) >= 0.0 ) ? floor( (x) ) : ceil( (x) ) )
-
-/* Trap maths overflow. */
-/* -------------------- */
-/* This macro calls a C maths library function and checks for overflow
-   in the result. */
-#define CATCH_MATHS_OVERFLOW(function) \
-   ( \
-\
-/* Clear the "errno" value. */ \
-      errno = 0, \
-\
-/* Evaluate the function. */ \
-      result = (function), \
-\
-/* Check if "errno" and the returned result indicate overflow and \
-   return the appropriate result. */ \
-      ( ( errno == ERANGE ) && ( ABS( result ) == HUGE_VAL ) ) ? AST__BAD : \
-                                                                 result \
-   )
-
-/* Trap maths errors. */
-/* ------------------ */
-/* This macro is similar to the one above, except that it also checks
-   for domain errors (i.e. invalid argument values). */
-#define CATCH_MATHS_ERROR(function) \
-   ( \
-\
-/* Clear the "errno" value. */ \
-      errno = 0, \
-\
-/* Evaluate the function. */ \
-      result = (function), \
-\
-/* Check if "errno" and the returned result indicate a domain error or \
-   overflow and return the appropriate result. */ \
-      ( ( errno == EDOM ) || \
-        ( ( errno == ERANGE ) && ( ABS( result ) == HUGE_VAL ) ) ) ? \
-                                 AST__BAD : result \
-   )
-
-/* Tri-state boolean OR. */
-/* --------------------- */
-/* This evaluates a boolean OR using tri-state logic. For example,
-   "a||b" may evaluate to 1 if "a" is bad but "b" is non-zero, so that
-   the normal rules of bad value propagation do not apply. */
-#define TRISTATE_OR(x1,x2) \
-\
-/* Test if the first argument is bad. */ \
-   ( (x1) == AST__BAD ) ? ( \
-\
-/* If so, test the second argument. */ \
-      ( ( (x2) == 0.0 ) || ( (x2) == AST__BAD ) ) ? AST__BAD : 1.0 \
-   ) : ( \
-\
-/* Test if the second argument is bad. */ \
-      ( (x2) == AST__BAD ) ? ( \
-\
-/* If so, test the first argument. */ \
-         ( (x1) == 0.0 ) ? AST__BAD : 1.0 \
-\
-/* If neither argument is bad, use the normal OR operator. */ \
-      ) : ( \
-         ( (x1) != 0.0 ) || ( (x2) != 0.0 ) \
-      ) \
-   )
-
-/* Tri-state boolean AND. */
-/* ---------------------- */
-/* This evaluates a boolean AND using tri-state logic. */
-#define TRISTATE_AND(x1,x2) \
-\
-/* Test if the first argument is bad. */ \
-   ( (x1) == AST__BAD ) ? ( \
-\
-/* If so, test the second argument. */ \
-      ( (x2) != 0.0 ) ? AST__BAD : 0.0 \
-   ) : ( \
-\
-/* Test if the second argument is bad. */ \
-      ( (x2) == AST__BAD ) ? ( \
-\
-/* If so, test the first argument. */ \
-         ( (x1) != 0.0 ) ? AST__BAD : 0.0 \
-\
-/* If neither argument is bad, use the normal AND operator. */ \
-      ) : ( \
-         ( (x1) != 0.0 ) && ( (x2) != 0.0 ) \
-      ) \
-   )
-
-/* Safe addition. */
-/* -------------- */
-/* This macro performs addition while avoiding possible overflow. */
-#define SAFE_ADD(x1,x2) ( \
-\
-/* Test if the first argument is non-negative. */ \
-   ( (x1) >= 0.0 ) ? ( \
-\
-/* If so, then we can perform addition if the second argument is \
-   non-positive. Otherwise, we must calculate the most positive safe \
-   second argument value that can be added and test for this (the test \
-   itself is safe against overflow). */ \
-      ( ( (x2) <= 0.0 ) || ( ( (DBL_MAX) - (x1) ) >= (x2) ) ) ? ( \
-\
-/* Perform addition if it is safe, otherwise return AST__BAD. */ \
-         (x1) + (x2) \
-      ) : ( \
-         AST__BAD \
-      ) \
-\
-/* If the first argument is negative, then we can perform addition if \
-   the second argument is non-negative. Otherwise, we must calculate the \
-   most negative second argument value that can be added and test for \
-   this (the test itself is safe against overflow). */ \
-   ) : ( \
-      ( ( (x2) >= 0.0 ) || ( ( (DBL_MAX) + (x1) ) >= -(x2) ) ) ? ( \
-\
-/* Perform addition if it is safe, otherwise return AST__BAD. */ \
-         (x1) + (x2) \
-      ) : ( \
-         AST__BAD \
-      ) \
-   ) \
-)
-
-/* Safe subtraction. */
-/* ----------------- */
-/* This macro performs subtraction while avoiding possible overflow. */
-#define SAFE_SUB(x1,x2) ( \
-\
-/* Test if the first argument is non-negative. */ \
-   ( (x1) >= 0.0 ) ? ( \
-\
-/* If so, then we can perform subtraction if the second argument is \
-   also non-negative. Otherwise, we must calculate the most negative safe \
-   second argument value that can be subtracted and test for this (the \
-   test itself is safe against overflow). */ \
-      ( ( (x2) >= 0.0 ) || ( ( (DBL_MAX) - (x1) ) >= -(x2) ) ) ? ( \
-\
-/* Perform subtraction if it is safe, otherwise return AST__BAD. */ \
-         (x1) - (x2) \
-      ) : ( \
-         AST__BAD \
-      ) \
-\
-/* If the first argument is negative, then we can perform subtraction \
-   if the second argument is non-positive. Otherwise, we must calculate \
-   the most positive second argument value that can be subtracted and \
-   test for this (the test itself is safe against overflow). */ \
-   ) : ( \
-      ( ( (x2) <= 0.0 ) || ( ( (DBL_MAX) + (x1) ) >= (x2) ) ) ? ( \
-\
-/* Perform subtraction if it is safe, otherwise return AST__BAD. */ \
-         (x1) - (x2) \
-      ) : ( \
-         AST__BAD \
-      ) \
-   ) \
-)
-
-/* Safe multiplication. */
-/* -------------------- */
-/* This macro performs multiplication while avoiding possible overflow. */
-#define SAFE_MUL(x1,x2) ( \
-\
-/* Multiplication is safe if the absolute value of either argument is \
-   unity or less. Otherwise, we must use the first argument to calculate \
-   the maximum absolute value that the second argument may have and test \
-   for this (the test itself is safe against overflow). */ \
-   ( ( ( abs1 = ABS( (x1) ) ) <= 1.0 ) || \
-     ( ( abs2 = ABS( (x2) ) ) <= 1.0 ) || \
-     ( ( (DBL_MAX) / abs1 ) >= abs2 ) ) ? ( \
-\
-/* Perform multiplication if it is safe, otherwise return AST__BAD. */ \
-      (x1) * (x2) \
-   ) : ( \
-      AST__BAD \
-   ) \
-)
-
-/* Safe division. */
-/* -------------- */
-/* This macro performs division while avoiding possible overflow. */
-#define SAFE_DIV(x1,x2) ( \
-\
-/* Division is unsafe if the second argument is zero. Otherwise, it is \
-   safe if the abolute value of the second argument is unity or \
-   more. Otherwise, we must use the second argument to calculate the \
-   maximum absolute value that the first argument may have and test for \
-   this (the test itself is safe against overflow). */ \
-   ( ( (x2) != 0.0 ) && \
-     ( ( ( abs2 = ABS( (x2) ) ) >= 1.0 ) || \
-       ( ( (DBL_MAX) * abs2 ) >= ABS( (x1) ) ) ) ) ? ( \
-\
-/* Perform division if it is safe, otherwise return AST__BAD. */ \
-      (x1) / (x2) \
-   ) : ( \
-      AST__BAD \
-   ) \
-)
-
-/* Bit-shift operation. */
-/* -------------------- */
-/* This macro shifts the bits in a double value a specified number of
-   places to the left, which simply corresponds to multiplying by the
-   appropriate power of two. */
-#define SHIFT_BITS(x1,x2) ( \
-\
-/* Decompose the value into a normalised fraction and a power of 2. */ \
-   frac = frexp( (x1), &expon ), \
-\
-/* Calculate the new power of 2 which should apply after the shift, \
-   rounding towards zero to give an integer value. */ \
-   newexp = INT( (x2) ) + (double) expon, \
-\
-/* If the new exponent is too negative to convert to an integer, then \
-   the result must underflow to zero. */ \
-   ( newexp < (double) -INT_MAX ) ? ( \
-      0.0 \
-\
-/* Otherwise, if it is too positive to convert to an integer, then the \
-   result must overflow, unless the normalised fraction is zero. */ \
-   ) : ( ( newexp > (double) INT_MAX ) ? ( \
-      ( frac == 0.0 ) ? 0.0 : AST__BAD \
-\
-/* Otherwise, convert the new exponent to an integer and apply \
-   it. Trap any overflow which may still occur. */ \
-   ) : ( \
-      CATCH_MATHS_OVERFLOW( ldexp( frac, (int) newexp ) ) \
-   ) ) \
-)
-
-/* Two-argument bit-wise boolean operation. */
-/* ---------------------------------------- */
-/* This macro expands to code which performs a bit-wise boolean
-   operation on a pair of arguments and assigns the result to the
-   variable "result". It operates on floating point (double) values,
-   which are regarded as if they are fixed-point binary numbers with
-   negative values expressed in twos-complement notation. This means that
-   it delivers the same results for integer values as the normal
-   (integer) C bit-wise operations. However, it will also operate on the
-   fraction bits of floating point numbers. It also offers greater
-   precision (the first 53 or so significant bits of the result being
-   preserved for typical IEEE floating point implementations). */
-#define BIT_OPER(oper,x1,x2) \
-\
-/* Convert each argument to a normalised fraction in the range \
-   [0.5,1.0) and a power of two exponent, removing any sign \
-   information. */ \
-   frac1 = frexp( ABS( (x1) ), &expon1 ); \
-   frac2 = frexp( ABS( (x2) ), &expon2 ); \
-\
-/* Set "expon" to be the larger of the two exponents. If the two \
-   exponents are not equal, divide the fraction with the smaller exponent \
-   by 2 to the power of the exponent difference. This gives both \
-   fractions the same effective exponent (although one of them may no \
-   longer be normalised). Note that overflow is avoided because all \
-   numbers remain less than 1.0, but underflow may occur. */ \
-   expon = expon1; \
-   if ( expon2 > expon1 ) { \
-      expon = expon2; \
-      frac1 = ldexp( frac1, expon1 - expon ); \
-   } else if ( expon1 > expon2 ) { \
-      frac2 = ldexp( frac2, expon2 - expon ); \
-   } \
-\
-/* If either of the original arguments is negative, we now subtract \
-   the corresponding fraction from 2.0. If we think of the fraction as \
-   represented in fixed-point binary notation, this corresponds to \
-   converting negative numbers into the twos-complement form normally used \
-   for integers (the sign bit being the bit with value 1) instead \
-   of having a separate sign bit as for floating point numbers. \
-\
-   Note that one of the fractions may have underflowed during the \
-   scaling above. In that case (if the original argument was negative), \
-   we must subtract the value "eps" (= 2.0 * DBL_EPSILON) from 2.0 \
-   instead, so that we produce the largest number less than 2.0. In \
-   twos-complement notation this represents the smallest possible \
-   negative number and corresponds to extending the sign bit of the \
-   original number up into more significant bits. This causes all bits to \
-   be set as we require (rather than all being clear if the underflow \
-   is simply ignored). */ \
-   if ( (x1) < 0.0 ) frac1 = 2.0 - ( ( frac1 > eps ) ? frac1 : eps ); \
-   if ( (x2) < 0.0 ) frac2 = 2.0 - ( ( frac2 > eps ) ? frac2 : eps ); \
-\
-/* We now extract the bits from the fraction values into integer \
-   variables so that we may perform bit-wise operations on them. However, \
-   since a double may be longer than any available integer, we may \
-   have to handle several successive blocks of bits individually. */ \
-\
-/* Extract the first block of bits by scaling by the required power of \
-   2 to shift the required bits to the left of the binary point. Then \
-   extract the integer part. Note that this initial shift is one bit less \
-   than the number of bits in an unsigned long, because we have \
-   introduced an extra sign bit. */ \
-   frac1 *= scale1; \
-   frac2 *= scale1; \
-   b1 = (unsigned long) frac1; \
-   b2 = (unsigned long) frac2; \
-\
-/* Perform the required bit-wise operation on the extracted blocks of \
-   bits. */ \
-   b = b1 oper b2; \
-\
-/* Extract the sign bit from this initial result. This determines \
-   whether the final result bit pattern should represent a negative \
-   floating point number. */ \
-   neg = b & signbit; \
-\
-/* Initialise the floating point result by setting it to the integer \
-   result multipled by the reciprocal of the scale factor used to shift \
-   the bits above. This returns the result bits to their correct \
-   significance. */ \
-   unscale = rscale1; \
-   result = (double) b * unscale; \
-\
-/* We now loop to extract and process further blocks of bits (if \
-   present). The number of blocks is determined by the relative lengths \
-   of a double and an unsigned long. In practice, some bits of the double \
-   will be used by its exponent, so the last block may be incomplete and \
-   will simply be padded with zeros. */ \
-   for ( iblock = 1; iblock < nblock; iblock++ ) { \
-\
-/* Subtract the integer part (which has already been processed) from \
-   each fraction, to leave the bits which remain to be processed. Then \
-   multiply by a scale factor to shift the next set of bits to the left \
-   of the binary point. This time, we use as many bits as will fit into \
-   an unsigned long. */ \
-      frac1 = ( frac1 - (double) b1 ) * scale; \
-      frac2 = ( frac2 - (double) b2 ) * scale; \
-\
-/* Extract the integer part, which contains the required bits. */ \
-      b1 = (unsigned long) frac1; \
-      b2 = (unsigned long) frac2; \
-\
-/* Perform the required bit-wise operation on the extracted blocks of \
-   bits. */ \
-      b = b1 oper b2; \
-\
-/* Update the result floating point value by adding the new integer \
-   result multiplied by a scale factor to return the bits to their \
-   original significance. */ \
-      unscale *= rscale; \
-      result += (double) b * unscale; \
-   } \
-\
-/* If the (normalised fraction) result represents a negative number, \
-   then subtract 2.0 from it (equivalent to subtracting it from 2 and \
-   negating the result). This converts back to using a separate sign bit \
-   instead of twos-complement notation. */ \
-   if ( neg ) result -= 2.0; \
-\
-/* Scale by the required power of 2 to remove the initial \
-   normalisation applied and assign the result to the "result" \
-   variable. */ \
-   result = ldexp( result, expon )
-
-/* Gaussian random number. */
-/* ----------------------- */
-/* This macro expands to code which assigns a pseudo-random value to
-   the "result" variable. The value is drawn from a Gaussian distribution
-   with mean "x1" and standard deviation "ABS(x2)". */
-#define GAUSS(x1,x2) \
-\
-/* Loop until a satisfactory result is obtained. */ \
-   do { \
-\
-/* Obtain a value drawn from a standard Gaussian distribution. */ \
-      ran = Gauss( rcontext, status ); \
-\
-/* Multiply by "ABS(x2)", trapping possible overflow. */ \
-      result = ABS( (x2) ); \
-      result = SAFE_MUL( ran, result ); \
-\
-/* If OK, add "x1", again trapping possible overflow. */ \
-      if ( result != AST__BAD ) result = SAFE_ADD( result, (x1) ); \
-\
-/* Continue generating values until one is found which does not cause \
-   overflow. */ \
-   } while ( result == AST__BAD );
-
-/* Implement the stack-based arithmetic. */
-/* ===================================== */
-/* Initialise the top of stack index and constant counter. */
-      tos = -1;
-      icon = 0;
-
-/* Determine the number of opcodes to be processed and loop to process
-   them, executing the appropriate "case" block for each one. */
-      ncode = code[ 0 ];
-      for ( icode = 1; icode <= ncode; icode++ ) {
-         switch ( (Oper) code[ icode ] ) {
-
-/* Ignore any null opcodes (which shouldn't occur). */
-            case OP_NULL: break;
-
-/* Otherwise, perform the required vector operation on the stack... */
-
-/* User-supplied constants and variables. */
-/* -------------------------------------- */
-/* Loading a constant involves incrementing the constant count and
-   assigning the next constant's value to the top of stack element. */
-            ARG_0( OP_LDCON,    value = con[ icon++ ], *y = value )
-
-/* Loading a variable involves obtaining the variable's index by
-   consuming a constant (as above), and then copying the variable's
-   values into the top of stack element. */
-            ARG_0( OP_LDVAR,    ivar = (int) ( con[ icon++ ] + 0.5 ),
-                                *y = ptr_in[ ivar ][ point ] )
-
-/* System constants. */
-/* ----------------- */
-/* Loading a "bad" value simply means assigning AST__BAD to the top of
-   stack element. */
-            ARG_0( OP_LDBAD,    ;, *y = AST__BAD )
-
-/* The following load constants associated with the (double) floating
-   point representation into the top of stack element. */
-            ARG_0( OP_LDDIG,    ;, *y = (double) DBL_DIG )
-            ARG_0( OP_LDEPS,    ;, *y = DBL_EPSILON )
-            ARG_0( OP_LDMAX,    ;, *y = DBL_MAX )
-            ARG_0( OP_LDMAX10E, ;, *y = (double) DBL_MAX_10_EXP )
-            ARG_0( OP_LDMAXE,   ;, *y = (double) DBL_MAX_EXP )
-            ARG_0( OP_LDMDIG,   ;, *y = (double) DBL_MANT_DIG )
-            ARG_0( OP_LDMIN,    ;, *y = DBL_MIN )
-            ARG_0( OP_LDMIN10E, ;, *y = (double) DBL_MIN_10_EXP )
-            ARG_0( OP_LDMINE,   ;, *y = (double) DBL_MIN_EXP )
-            ARG_0( OP_LDRAD,    ;, *y = (double) FLT_RADIX )
-            ARG_0( OP_LDRND,    ;, *y = (double) FLT_ROUNDS )
-
-/* Mathematical constants. */
-/* ----------------------- */
-/* The following load mathematical constants into the top of stack
-   element. */
-            ARG_0( OP_LDE,      value = exp( 1.0 ), *y = value )
-            ARG_0( OP_LDPI,     ;, *y = pi )
-
-/* Functions with one argument. */
-/* ---------------------------- */
-/* The following simply evaluate a function of the top of stack
-   element and assign the result to the same element. */
-            ARG_1( OP_ABS,      *y = ABS( x ) )
-            ARG_1( OP_ACOS,     *y = ( ABS( x ) <= 1.0 ) ?
-                                     acos( x ) : AST__BAD )
-            ARG_1( OP_ACOSD,    *y = ( ABS( x ) <= 1.0 ) ?
-                                     acos( x ) * r2d : AST__BAD )
-            ARG_1( OP_ACOSH,    *y = ( x < 1.0 ) ? AST__BAD :
-                                     ( ( x > safe_sq ) ? log( x ) + log2 :
-                                       log( x + sqrt( x * x - 1.0 ) ) ) )
-            ARG_1( OP_ACOTH,    *y = ( ABS( x ) <= 1.0 ) ? AST__BAD :
-                                     0.5 * ( log( ( x + 1.0 ) /
-                                                  ( x - 1.0 ) ) ) )
-            ARG_1( OP_ACSCH,    *y = ( ( x == 0.0 ) ? AST__BAD :
-                                       ( sign = ( x >= 0.0 ), x = ABS( x ),
-                                       ( sign ? 1.0 : -1.0 ) *
-                                       ( ( x < rsafe_sq ) ? log2 - log( x ) :
-                                         ( x = 1.0 / x,
-                                       log( x + sqrt( x * x + 1.0 ) ) ) ) ) ) )
-            ARG_1( OP_ASECH,    *y = ( ( x <= 0 ) || ( x > 1.0 ) ) ? AST__BAD :
-                                       ( ( x < rsafe_sq ) ? log2 - log( x ) :
-                                         ( x = 1.0 / x,
-                                           log( x + sqrt( x * x - 1.0 ) ) ) ) )
-            ARG_1( OP_ASIN,     *y = ( ABS( x ) <= 1.0 ) ?
-                                     asin( x ) : AST__BAD )
-            ARG_1( OP_ASIND,    *y = ( ABS( x ) <= 1.0 ) ?
-                                     asin( x ) * r2d : AST__BAD )
-            ARG_1( OP_ASINH,    *y = ( sign = ( x >= 0.0 ), x = ABS( x ),
-                                       ( sign ? 1.0 : -1.0 ) *
-                                       ( ( x > safe_sq ) ? log( x ) + log2 :
-                                         log( x + sqrt( x * x + 1.0 ) ) ) ) )
-            ARG_1( OP_ATAN,     *y = atan( x ) )
-            ARG_1( OP_ATAND,    *y = atan( x ) * r2d )
-            ARG_1( OP_ATANH,    *y = ( ABS( x ) >= 1.0 ) ? AST__BAD :
-                                     0.5 * ( log( ( 1.0 + x ) /
-                                                  ( 1.0 - x ) ) ) )
-            ARG_1( OP_CEIL,     *y = ceil( x ) )
-            ARG_1( OP_COS,      *y = cos( x ) )
-            ARG_1( OP_COSD,     *y = cos( x * d2r ) )
-            ARG_1( OP_COSH,     *y = CATCH_MATHS_OVERFLOW( cosh( x ) ) )
-            ARG_1( OP_COTH,     *y = ( x = tanh( x ), SAFE_DIV( 1.0, x ) ) )
-            ARG_1( OP_CSCH,     *y = ( x = CATCH_MATHS_OVERFLOW( sinh( x ) ),
-                                       ( x == AST__BAD ) ?
-                                       0.0 : SAFE_DIV( 1.0, x ) ) )
-            ARG_1( OP_EXP,      *y = CATCH_MATHS_OVERFLOW( exp( x ) ) )
-            ARG_1( OP_FLOOR,    *y = floor( x ) )
-            ARG_1( OP_INT,      *y = INT( x ) )
-            ARG_1B( OP_ISBAD,   *y = ( x == AST__BAD ) )
-            ARG_1( OP_LOG,      *y = ( x > 0.0 ) ? log( x ) : AST__BAD )
-            ARG_1( OP_LOG10,    *y = ( x > 0.0 ) ? log10( x ) : AST__BAD )
-            ARG_1( OP_NINT,     *y = ( x >= 0 ) ?
-                                     floor( x + 0.5 ) : ceil( x - 0.5 ) )
-            ARG_1( OP_POISS,    *y = Poisson( rcontext, x, status ) )
-            ARG_1( OP_SECH,     *y = ( x = CATCH_MATHS_OVERFLOW( cosh( x ) ),
-                                       ( x == AST__BAD ) ? 0.0 : 1.0 / x ) )
-            ARG_1( OP_SIN,      *y = sin( x ) )
-            ARG_1( OP_SINC,     *y = ( x == 0.0 ) ? 1.0 : sin( x ) / x )
-            ARG_1( OP_SIND,     *y = sin( x * d2r ) )
-            ARG_1( OP_SINH,     *y = CATCH_MATHS_OVERFLOW( sinh( x ) ) )
-            ARG_1( OP_SQR,      *y = SAFE_MUL( x, x ) )
-            ARG_1( OP_SQRT,     *y = ( x >= 0.0 ) ? sqrt( x ) : AST__BAD )
-            ARG_1( OP_TAN,      *y = CATCH_MATHS_OVERFLOW( tan( x ) ) )
-            ARG_1( OP_TAND,     *y = tan( x * d2r ) )
-            ARG_1( OP_TANH,     *y = tanh( x ) )
-
-/* Functions with two arguments. */
-/* ----------------------------- */
-/* These evaluate a function of the top two entries on the stack. */
-            ARG_2( OP_ATAN2,    *y = atan2( x1, x2 ) )
-            ARG_2( OP_ATAN2D,   *y = atan2( x1, x2 ) * r2d )
-            ARG_2( OP_DIM,      *y = ( x1 > x2 ) ? x1 - x2 : 0.0 )
-            ARG_2( OP_GAUSS,    GAUSS( x1, x2 ); *y = result )
-            ARG_2( OP_MOD,      *y = ( x2 != 0.0 ) ?
-                                     fmod( x1, x2 ) : AST__BAD )
-            ARG_2( OP_POW,      *y = CATCH_MATHS_ERROR( pow( x1, x2 ) ) )
-            ARG_2( OP_RAND,     ran = Rand( rcontext, status );
-                                *y = x1 * ran + x2 * ( 1.0 - ran ); )
-            ARG_2( OP_SIGN,     *y = ( ( x1 >= 0.0 ) == ( x2 >= 0.0 ) ) ?
-                                     x1 : -x1 )
-
-/* Functions with three arguments. */
-/* ------------------------------- */
-/* These evaluate a function of the top three entries on the stack. */
-            ARG_3B( OP_QIF,     *y = ( ( x1 ) ? ( x2 ) : ( x3 ) ) )
-
-
-/* Functions with variable numbers of arguments. */
-/* --------------------------------------------- */
-/* These operations take a variable number of arguments, the actual
-   number being determined by consuming a constant. We then loop to
-   perform a 2-argument operation on the stack (as above) the required
-   number of times. */
-            case OP_MAX:
-               narg = (int) ( con[ icon++ ] + 0.5 );
-               for ( iarg = 0; iarg < ( narg - 1 ); iarg++ ) {
-                  DO_ARG_2( *y = ( x1 >= x2 ) ? x1 : x2 )
-               }
-               break;
-            case OP_MIN:
-               narg = (int) ( con[ icon++ ] + 0.5 );
-               for ( iarg = 0; iarg < ( narg - 1 ); iarg++ ) {
-                  DO_ARG_2( *y = ( x1 <= x2 ) ? x1 : x2 )
-               }
-               break;
-
-/* Unary arithmetic operators. */
-/* --------------------------- */
-            ARG_1( OP_NEG,      *y = -x )
-
-/* Unary boolean operators. */
-/* ------------------------ */
-            ARG_1( OP_NOT,      *y = ( x == 0.0 ) )
-
-/* Binary arithmetic operators. */
-/* ---------------------------- */
-            ARG_2( OP_ADD,      *y = SAFE_ADD( x1, x2 ) )
-            ARG_2( OP_SUB,      *y = SAFE_SUB( x1, x2 ) )
-            ARG_2( OP_MUL,      *y = SAFE_MUL( x1, x2 ) )
-            ARG_2( OP_DIV ,     *y = SAFE_DIV( x1, x2 ) )
-
-/* Bit-shift operators. */
-/* -------------------- */
-            ARG_2( OP_SHFTL,    *y = SHIFT_BITS( x1, x2 ) )
-            ARG_2( OP_SHFTR,    *y = SHIFT_BITS( x1, -x2 ) )
-
-/* Relational operators. */
-/* --------------------- */
-            ARG_2( OP_EQ,       *y = ( x1 == x2 ) )
-            ARG_2( OP_GE,       *y = ( x1 >= x2 ) )
-            ARG_2( OP_GT,       *y = ( x1 > x2 ) )
-            ARG_2( OP_LE,       *y = ( x1 <= x2 ) )
-            ARG_2( OP_LT,       *y = ( x1 < x2 ) )
-            ARG_2( OP_NE,       *y = ( x1 != x2 ) )
-
-/* Bit-wise operators. */
-/* ------------------- */
-            ARG_2( OP_BITOR,    BIT_OPER( |, x1, x2 ); *y = result )
-            ARG_2( OP_BITXOR,   BIT_OPER( ^, x1, x2 ); *y = result )
-            ARG_2( OP_BITAND,   BIT_OPER( &, x1, x2 ); *y = result )
-
-/* Binary boolean operators. */
-/* ------------------------- */
-            ARG_2B( OP_AND,     *y = TRISTATE_AND( x1, x2 ) )
-            ARG_2( OP_EQV,      *y = ( ( x1 != 0.0 ) == ( x2 != 0.0 ) ) )
-            ARG_2B( OP_OR,      *y = TRISTATE_OR( x1, x2 ) )
-            ARG_2( OP_XOR,      *y = ( ( x1 != 0.0 ) != ( x2 != 0.0 ) ) )
-         }
-      }
-   }
-
-/* When all opcodes have been processed, the result of the function
-   evaluation will reside in the lowest stack entry - i.e. the output
-   array. */
-
-/* Free the workspace arrays. */
-   work = astFree( work );
-   stack = astFree( stack );
-
-/* Undefine macros local to this function. */
-#undef ARG_0
-#undef ARG_1
-#undef ARG_1B
-#undef DO_ARG_2
-#undef ARG_2
-#undef ARG_2B
-#undef ABS
-#undef INT
-#undef CATCH_MATHS_OVERFLOW
-#undef CATCH_MATHS_ERROR
-#undef TRISTATE_OR
-#undef TRISTATE_AND
-#undef SAFE_ADD
-#undef SAFE_SUB
-#undef SAFE_MUL
-#undef SAFE_DIV
-#undef SHIFT_BITS
-#undef BIT_OPER
-#undef GAUSS
-}
-
-static void EvaluationSort( const double con[], int nsym, int symlist[],
-                            int **code, int *stacksize, int *status ) {
-/*
-*  Name:
-*     EvaluationSort
-
-*  Purpose:
-*     Perform an evaluation-order sort on parsed expression symbols.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void EvaluationSort( const double con[], int nsym, int symlist[],
-*                          int **code, int *stacksize, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function sorts a sequence of numbers representing symbols
-*     identified in an expression. The symbols (i.e. the expression syntax)
-*     must have been fully validated beforehand, as no validation is
-*     performed here.
-*
-*     The symbols are sorted into the order in which corresponding
-*     operations must be performed on a push-down arithmetic stack in order
-*     to evaluate the expression. Operation codes (opcodes), as defined in
-*     the "Oper" enum, are then substituted for the symbol numbers.
-
-*  Parameters:
-*     con
-*        Pointer to an array of double containing the set of constants
-*        generated while parsing the expression (these are required in order
-*        to determine the number of arguments associated with functions which
-*        take a variable number of arguments).
-*     nsym
-*        The number of symbols identified while parsing the expression.
-*     symlist
-*        Pointer to an array of int, with "nsym" elements. On entry, this
-*        should contain the indices in the static "symbol" array of the
-*        symbols identified while parsing the expression. On exit, the
-*        contents are undefined.
-*     code
-*        Address of a pointer which will be set to point at a dynamically
-*        allocated array of int containing the set of opcodes (cast to int)
-*        produced by this function. The first element of this array will
-*        contain a count of the number of opcodes which follow.
-*
-*        The allocated space must be freed by the caller (using astFree) when
-*        no longer required.
-*     stacksize
-*        Pointer to an int in which to return the size of the push-down stack
-*        required to evaluate the expression using the returned opcodes.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - A value of NULL will be returned for the "*code" pointer and a value
-*     of zero will be returned for the "*stacksize" value if this function is
-*     invoked with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int flush;                    /* Flush parenthesised symbol sequence? */
-   int icon;                     /* Input constant counter */
-   int isym;                     /* Input symbol counter */
-   int ncode;                    /* Number of opcodes generated */
-   int nstack;                   /* Evaluation stack size */
-   int push;                     /* Push a new symbol on to stack? */
-   int sym;                      /* Variable for symbol number */
-   int tos;                      /* Top of sort stack index */
-
-/* Initialise */
-   *code = NULL;
-   *stacksize = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   flush = 0;
-   icon = 0;
-   isym = 0;
-   ncode = 0;
-   nstack = 0;
-   tos = -1;
-
-/* Loop to generate output opcodes until the sort stack is empty and
-   there are no further symbols to process, or an error is detected.  */
-   while ( astOK && ( ( tos > -1 ) || ( isym < nsym ) ) ) {
-
-/* Decide whether to push a symbol on to the sort stack (which
-   "diverts" it so that higher-priority symbols can be output), or to pop
-   the top symbol off the sort stack and send it to the output
-   stream... */
-
-/* We must push a symbol on to the sort stack if the stack is
-   currently empty. */
-      if ( tos == -1 ) {
-         push = 1;
-
-/* We must pop the top symbol off the sort stack if there are no more
-   input symbols to process. */
-      } else if ( isym >= nsym ) {
-         push = 0;
-
-/* If the sort stack is being flushed to complete the evaluation of a
-   parenthesised expression, then the top symbol (which will be the
-   opening parenthesis or function call) must be popped. This is only
-   done once, so reset the "flush" flag before the next loop. */
-      } else if ( flush ) {
-         push = 0;
-         flush = 0;
-
-/* In all other circumstances, we must push a symbol on to the sort
-   stack if its evaluation priority (seen from the left) is higher than
-   that of the current top of stack symbol (seen from the right). This
-   means it will eventually be sent to the output stream ahead of the
-   current top of stack symbol. */
-      } else {
-         push = ( symbol[ symlist[ isym ] ].leftpriority >
-                  symbol[ symlist[ tos ] ].rightpriority );
-      }
-
-/* If a symbol is being pushed on to the sort stack, then get the next
-   input symbol which is to be used. */
-      if ( push ) {
-         sym = symlist[ isym++ ];
-
-/* If the symbol decreases the parenthesis level (a closing
-   parenthesis), then all the sort stack entries down to the symbol which
-   opened the current level of parenthesis (the matching opening
-   parenthesis or function call) will already have been sent to the
-   output stream as a consequence of the evaluation priority defined for
-   a closing parenthesis in the symbol data. The opening parenthesis (or
-   function call) must next be flushed from the sort stack, so set the
-   "flush" flag which is interpreted on the next loop. Ignore the current
-   symbol, which cancels with the opening parenthesis on the stack. */
-         if ( symbol[ sym ].parincrement < 0 ) {
-            flush = 1;
-
-/* All other symbols are pushed on to the sort stack. The stack
-   occupies that region of the "symlist" array from which the input
-   symbol numbers have already been extracted. */
-         } else {
-            symlist[ ++tos ] = sym;
-         }
-
-/* If a symbol is being popped from the top of the sort stack, then
-   the top of stack entry is transferred to the output stream. Obtain the
-   symbol number from the stack. Increment the local constant counter if
-   the associated operation will use a constant. */
-      } else {
-         sym = symlist[ tos-- ];
-         icon += ( ( sym == symbol_ldvar ) || ( sym == symbol_ldcon ) );
-
-/* If the output symbol does not represent a "null" operation,
-   increase the size of the output opcode array to accommodate it,
-   checking for errors. Note that we allocate one extra array element
-   (the first) which will eventually hold a count of all the opcodes
-   generated. */
-         if ( symbol[ sym ].opcode != OP_NULL ) {
-            *code = astGrow( *code, ncode + 2, sizeof( int ) );
-            if ( astOK ) {
-
-/* Append the new opcode to the end of this array. */
-               ( *code )[ ++ncode ] = (int) symbol[ sym ].opcode;
-
-/* Increment/decrement the counter representing the stack size
-   required for evaluation of the expression.  If the symbol is a
-   function with a variable number of arguments (indicated by a negative
-   "nargs" entry in the symbol data table), then the change in stack size
-   must be determined from the argument number stored in the constant
-   table. */
-               if ( symbol[ sym ].nargs >= 0 ) {
-                  nstack += symbol[ sym ].stackincrement;
-               } else {
-                  nstack -= (int) ( con[ icon++ ] + 0.5 ) - 1;
-               }
-
-/* Note the maximum size of the stack. */
-               *stacksize = ( nstack > *stacksize ) ? nstack : *stacksize;
-            }
-         }
-      }
-   }
-
-/* If no "*code" array has been allocated, then allocate one simply to
-   store the number of opcodes generated, i.e. zero (this shouldn't
-   normally happen as this represents an invalid expression). */
-   if ( !*code ) *code = astMalloc( sizeof( int ) );
-
-/* If no error has occurred, store the count of opcodes generated in
-   the first element of the "*code" array and re-allocate the array to
-   its final size (since astGrow may have over-allocated space). */
-   if ( astOK ) {
-      ( *code )[ 0 ] = ncode;
-      *code = astRealloc( *code, sizeof( int ) * (size_t) ( ncode + 1 ) );
-   }
-
-/* If an error occurred, free any memory that was allocated and reset
-   the output values. */
-   if ( !astOK ) {
-      *code = astFree( *code );
-      *stacksize = 0;
-   }
-}
-
-static void ExtractExpressions( const char *method, const char *class,
-                                int nfun, const char *fun[], int forward,
-                                char ***exprs, int *status ) {
-/*
-*  Name:
-*     ExtractExpressions
-
-*  Purpose:
-*     Extract and validate expressions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ExtractExpressions( const char *method, const char *class,
-*                              int nfun, const char *fun[], int forward,
-*                              char ***exprs, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function extracts expressions from the right hand sides of a set
-*     of functions. These expressions are then validated to check that they
-*     are either all present, or all absent (absence indicating an undefined
-*     transformation). An error is reported if anything is found to be
-*     wrong.
-*
-*     Note that the syntax of the expressions is not checked by this function
-*     (i.e. they are not compiled).
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     nfun
-*        The number of functions to be analysed.
-*     fun
-*        Pointer to an array, with "nfun" elements, of pointers to null
-*        terminated strings which contain each of the functions. These
-*        strings should contain no white space.
-*     forward
-*        A non-zero value indicates the the MathMap's forward transformation
-*        functions are being processed, while a zero value indicates processing
-*        of the inverse transformation functions. This value is used solely for
-*        constructing error messages.
-*     exprs
-*        Address in which to return a pointer to an array (with "nfun"
-*        elements) of pointers to null terminated strings containing the
-*        extracted expressions (i.e. this returns an array of strings).
-*
-*        Both the returned array of pointers, and the strings to which they
-*        point, will be stored in dynamically allocated memory and should
-*        be freed by the caller (using astFree) when no longer required.
-*
-*        If the right hand sides (including the "=" sign) of all the supplied
-*        functions are absent, then this indicates an undefined transformation
-*        and the returned pointer value will be NULL. An error results if
-*        an "=" sign is present but no expression follows it.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*        - A NULL value will be returned for "*exprs" if this function is
-*        invoked with the global error status set, or if it should fail for
-*        any reason.
-*/
-
-/* Local Variables: */
-   char *ex;                     /* Pointer to start of expression string */
-   int ifun;                     /* Loop counter for functions */
-   int iud;                      /* Index of first undefined function */
-   int nud;                      /* Number of undefined expressions */
-
-/* Initialise. */
-   *exprs = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Further initialisation. */
-   nud = 0;
-   iud = 0;
-      
-/* Allocate and initialise memory for the returned array of pointers. */
-   MALLOC_POINTER_ARRAY( *exprs, char *, nfun )
-
-/* Loop to inspect each function in turn. */
-   if ( astOK ) {
-      for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Search for the first "=" sign. */
-         if ( ( ex = strchr( fun[ ifun ], '=' ) ) ) {
-
-/* If found, and there are more characters after the "=" sign, then
-   find the length of the expression which follows. Allocate a string to
-   hold this expression, storing its pointer in the array allocated
-   above. Check for errors. */
-            if ( *++ex ) {
-               ( *exprs )[ ifun ] = astMalloc( strlen( ex ) + (size_t) 1 );
-               if ( !astOK ) break;
-
-/* If OK, extract the expression string. */
-               (void) strcpy( ( *exprs )[ ifun ], ex );
-
-/* If an "=" sign was found but there are no characters following it,
-   then there is a missing right hand side to a function, so report an
-   error and quit. */
-            } else {
-               astError( AST__NORHS,
-                         "%s(%s): Missing right hand side in expression: "
-                         "\"%s\".", status,
-                         method, class, fun[ ifun ] );
-               astError( astStatus,
-                         "Error in %s transformation function %d.", status,
-                         forward ? "forward" : "inverse", ifun + 1 );
-               break;
-            }
-
-/* If no "=" sign was found, then the transformation may be undefined,
-   in which case each function should only contain a variable name. Count
-   the number of times this happens and record the index of the first
-   instance. */
-         } else {
-            nud++;
-            if ( nud == 1 ) iud = ifun;
-         }
-      }
-   }
-
-/* Either all functions should have an "=" sign (in which case the
-   transformation is defined), or none of them should have (in which case
-   it is undefined). If some do and some don't, then report an error,
-   citing the first instance of a missing "=" sign. */
-   if ( astOK && ( nud != 0 ) && ( nud != nfun ) ) {
-      astError( AST__NORHS,
-                "%s(%s): Missing right hand side in function: \"%s\".", status,
-                method, class, fun[ iud ] );
-      astError( astStatus,
-                "Error in %s transformation function %d.", status,
-                forward ? "forward" : "inverse", iud + 1 );
-   }
-
-/* If an error occurred, or all the expressions were absent, then free any
-   allocated memory and reset the output value. */
-   if ( !astOK || nud ) {
-      FREE_POINTER_ARRAY( *exprs, nfun )
-   }
-}
-
-static void ExtractVariables( const char *method, const char *class,
-                              int nfun, const char *fun[],
-                              int nin, int nout, int nfwd, int ninv,
-                              int forward, char ***var, int *status ) {
-/*
-*  Name:
-*     ExtractVariables
-
-*  Purpose:
-*     Extract and validate variable names.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ExtractVariables( const char *method, const char *class,
-*                            int nfun, const char *fun[],
-*                            int nin, int nout, int nfwd, int ninv,
-*                            int forward, char ***var, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function extracts variable names from the left hand sides of a
-*     set of transformation functions belonging to a MathMap. These variable
-*     names are then validated to check for correct syntax and no
-*     duplication. An error is reported if anything is wrong with the
-*     variable names obtained.
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     nfun
-*        The number of functions to be analysed.
-*     fun
-*        Pointer to an array, with "nfun" elements, of pointers to null
-*        terminated strings which contain each of the functions. These strings
-*        are case sensitive and should contain no white space.
-*
-*        The first elements of this array should point to the functions that
-*        define the primary input/output variables (depending on direction).
-*        These should be followed by any functions which define intermediate
-*        variables (taken from the set of functions which transform in the
-*        opposite direction to the first ones).
-*     nin
-*        Number of input variables for the MathMap.
-*     nout
-*        Number of output variables for the MathMap.
-*     nfwd
-*        Number of forward transformation functions for the MathMap.
-*     ninv
-*        Number of inverse transformation functions for the MathMap.
-*     forward
-*        A non-zero value indicates the the MathMap's forward transformation
-*        functions are being processed, while a zero value indicates processing
-*        of the inverse transformation functions. This value, together with
-*        "nin", "nout", "nfwd" and "ninv" are used solely for constructing
-*        error messages.
-*     var
-*        Address in which to return a pointer to an array (with "nfun"
-*        elements) of pointers to null terminated strings containing the
-*        extracted variable names (i.e. this returns an array of strings).
-*
-*        Both the returned array of pointers, and the strings to which they
-*        point, will be stored in dynamically allocated memory and should
-*        be freed by the caller (using astFree) when no longer required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*        - A NULL value will be returned for "*var" if this function is
-*        invoked with the global error status set, or if it should fail for
-*        any reason.
-*/
-
-/* Local Variables: */
-   char *duser1;                 /* Transformation direction for function */
-   char *duser2;                 /* Transformation direction for function */
-   char c;                       /* Extracted character */
-   int i1;                       /* Loop counter for detecting duplicates */
-   int i2;                       /* Loop counter for detecting duplicates */
-   int i;                        /* Loop counter for characters */
-   int iend;                     /* Last character index in parsed name */
-   int ifun;                     /* Loop counter for functions */
-   int iuser1;                   /* Function number as known to the user */
-   int iuser2;                   /* Function number as known to the user */
-   int nc;                       /* Character count */
-   int nextra;                   /* Number of intermediate functions */
-   int nprimary;                 /* Number of primary input/output variables */
-   
-/* Initialise. */
-   *var = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the number of primary input/output variables, depending on
-   the direction of the coordinate transformation. */
-   nprimary = ( forward ? nin : nout );
-
-/* Deterine the number of extra (intermediate) functions that come
-   before these primary ones. These affect the numbering of
-   transformation functions as known to the user, and must be accounted
-   for when reporting error messages. */
-   nextra = ( forward ? ninv - nin : nfwd - nout );
-
-/* Allocate and initialise memory for the returned array of pointers. */
-   MALLOC_POINTER_ARRAY( *var, char *, nfun )
-
-/* Loop to process each function in turn. */
-   if ( astOK ) {
-      for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Count the number of characters appearing before the "=" sign (or in
-   the entire string if the "=" is absent). */
-         for ( nc = 0; ( c = fun[ ifun ][ nc ] ); nc++ ) if ( c == '=' ) break;
-
-/* If no characters were counted, then report an appropriate error
-   message, depending on whether the function string was entirely
-   blank. */
-         if ( !nc ) {
-            if ( c ) {
-               astError( AST__MISVN,
-                         "%s(%s): No left hand side in expression: \"%s\".", status,
-                         method, class, fun[ ifun ] );
-            } else {
-               astError( AST__MISVN,
-                         "%s: Transformation function contains no variable "
-                         "name.", status,
-                         method );
-            }
-            break;
-         }
-
-/* If OK, allocate memory to hold the output string and check for
-   errors. */
-         ( *var )[ ifun ] = astMalloc( sizeof( char ) * (size_t) ( nc + 1 ) ) ;
-         if ( !astOK ) break;
-         
-/* If OK, copy the characters before the "=" sign to the new
-   string. */
-         nc = 0;
-         for ( i = 0; ( c = fun[ ifun ][ i ] ); i++ ) {
-            if ( c == '=' ) break;
-            ( *var )[ ifun ][ nc++] = c;
-         }
-
-/* Null terminate the result. */
-         ( *var )[ ifun ][ nc ] = '\0';
-
-/* Try to parse the contents of the extracted string as a name. */
-         ParseName( ( *var )[ ifun ], 0, &iend, status );
-
-/* If unsuccessful, or if all the characters were not parsed, then we
-   have an invalid variable name, so report an error and quit. */
-         if ( ( iend < 0 ) || ( *var )[ ifun ][ iend + 1 ] ) {
-            astError( AST__VARIN,
-                      "%s(%s): Variable name is invalid: \"%s\".", status,
-                      method, class, ( *var )[ ifun ] );
-            break;
-         }
-      }
-
-/* If an error occurred above, then determine the function number, and
-   the direction of the transformation of which it forms part, as known
-   to the user. */
-      if ( !astOK ) {
-         if ( ifun < nprimary ) {
-            iuser1 = ifun + 1 + nextra;
-            duser1 = ( forward ? "inverse" : "forward" );
-         } else {
-            iuser1 = ifun + 1 - nprimary;
-            duser1 = ( forward ? "forward" : "inverse" );
-         }
-
-/* Report a contextual error message. */
-         astError( astStatus,
-                   "Error in %s transformation function %d.", status,
-                   duser1, iuser1 );
-      }
-   }
-
-/* If there has been no error, loop to compare all the variable names
-   with each other to detect duplication. */
-   if ( astOK ) {
-      for ( i1 = 1; i1 < nfun; i1++ ) {
-         for ( i2 = 0; i2 < i1; i2++ ) {
-
-/* If a duplicate variable name is found, report an error. */
-            if ( !strcmp( ( *var )[ i1 ], ( *var )[ i2 ] ) ) {
-               astError( AST__DUVAR,
-                         "%s(%s): Duplicate definition of variable name: "
-                         "\"%s\".", status,
-                         method, class, ( *var )[ i1 ] );
-
-/* For each transformation function involved, determine the function
-   number and the direction of the transformation of which it forms part,
-   as known to the user. */
-               if ( i1 < nprimary ) {
-                  iuser1 = i1 + 1 + nextra;
-                  duser1 = ( forward ? "inverse" : "forward" );
-               } else {
-                  iuser1 = i1 + 1 - nprimary;
-                  duser1 = ( forward ? "forward" : "inverse" );
-               }
-               if ( i2 < nprimary ) {
-                  iuser2 = i2 + 1 + nextra;
-                  duser2 = ( forward ? "inverse" : "forward" );
-               } else {
-                  iuser2 = i2 + 1 - nprimary;
-                  duser2 = ( forward ? "forward" : "inverse" );
-               }
-
-/* Report a contextual error message. */
-               astError( astStatus,
-                         "Conflict between %s function %d and %s function %d.", status,
-                         duser1, iuser1, duser2, iuser2 );
-               break;
-            }
-         }
-         if ( !astOK ) break;
-      }
-   }
-
-/* If an error occurred, free any allocated memory and reset the
-   output value. */
-   if ( !astOK ) {
-      FREE_POINTER_ARRAY( *var, nfun )
-   }
-}
-
-static double Gauss( Rcontext *context, int *status ) {
-/*
-*  Name:
-*     Gauss
-
-*  Purpose:
-*     Produce a pseudo-random sample from a standard Gaussian distribution.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     double Gauss( Rcontext *context, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     On each invocation, this function returns a pseudo-random sample drawn
-*     from a standard Gaussian distribution with mean zero and standard
-*     deviation unity. The Box-Muller transformation method is used.
-
-*  Parameters:
-*     context
-*        Pointer to an Rcontext structure which holds the random number
-*        generator's context between invocations.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A sample from a standard Gaussian distribution.
-
-*  Notes:
-*     - The sequence of numbers returned is determined by the "seed"
-*     value in the Rcontext structure supplied.
-*     - If the seed value is changed, the "active" flag must also be cleared
-*     so that this function can re-initiallise the Rcontext structure before
-*     generating the next pseudo-random number. The "active" flag should
-*     also be clear to force initialisation the first time an Rcontext
-*     structure is used.
-*     - This function does not perform error checking and does not generate
-*     errors. It will execute even if the global error status is set.
-*/
-
-/* Local Variables: */
-   double rsq;                   /* Squared radius */
-   double s;                     /* Scale factor */
-   double x;                     /* First result value */
-   static double y;              /* Second result value */
-   static int ysaved = 0;        /* Previously-saved value available? */
-
-   LOCK_MUTEX7
-
-/* If the random number generator context is not active, then it will
-   be (re)initialised on the first invocation of Rand (below). Ensure
-   that any previously-saved value within this function is first
-   discarded. */
-   if ( !context->active ) ysaved = 0;
-
-/* If there is a previously-saved value available, then use it and
-   mark it as no longer available. */
-   if ( ysaved ) {
-      x = y;
-      ysaved = 0;
-
-/* Otherwise, loop until a suitable new pair of values has been
-   obtained. */
-   } else {
-      while ( 1 ) {
-
-/* Loop to obtain two random values uniformly distributed inside the
-   unit circle, while avoiding the origin (which maps to an infinite
-   result). */
-         do {
-            x = 2.0 * Rand( context, status ) - 1.0;
-            y = 2.0 * Rand( context, status ) - 1.0;
-            rsq = x * x + y * y;
-         } while ( ( rsq >= 1.0 ) || ( rsq == 0.0 ) );
-
-/* Perform the Box-Muller transformation, checking that this will not
-   produce overflow (which is extremely unlikely). If overflow would
-   occur, we simply repeat the above steps with a new pair of random
-   numbers. */
-         s = -2.0 * log( rsq );
-         if ( ( DBL_MAX * rsq ) >= s ) {
-            s = sqrt( s / rsq );
-
-/* Scale the original random values to give a pair of results. One will be
-   returned and the second kept until next time. */
-            x *= s;
-            y *= s;
-            break;
-         }
-      }
-
-/* Note that a saved value is available. */
-      ysaved = 1;
-   }
-
-   UNLOCK_MUTEX7
-
-/* Return the current result. */
-   return x;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     MathMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied MathMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the MathMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMathMap *this;         /* Pointer to MathMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the MathMap structure. */
-   this = (AstMathMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   SIZEOF_POINTER_ARRAY( this->fwdfun, this->nfwd )
-   SIZEOF_POINTER_ARRAY( this->invfun, this->ninv )
-   SIZEOF_POINTER_ARRAY( this->fwdcode, this->nfwd )
-   SIZEOF_POINTER_ARRAY( this->invcode, this->ninv )
-   SIZEOF_POINTER_ARRAY( this->fwdcon, this->nfwd )
-   SIZEOF_POINTER_ARRAY( this->invcon, this->ninv )
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a MathMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     MathMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a MathMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the MathMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the MathMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the MathMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMathMap *this;             /* Pointer to the MathMap structure */
-   const char *result;           /* Pointer value to return */
-   int ival;                     /* Integer attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the MathMap structure. */
-   this = (AstMathMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Seed. */
-/* ----- */
-   if ( !strcmp( attrib, "seed" ) ) {
-      ival = astGetSeed( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* SimpFI. */
-/* ------- */
-   } else if ( !strcmp( attrib, "simpfi" ) ) {
-      ival = astGetSimpFI( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* SimpIF. */
-/* ------- */
-   } else if ( !strcmp( attrib, "simpif" ) ) {
-      ival = astGetSimpIF( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-void astInitMathMapVtab_(  AstMathMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitMathMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a MathMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void astInitMathMapVtab( AstMathMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     MathMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the MathMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAMathMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->ClearSeed = ClearSeed;
-   vtab->ClearSimpFI = ClearSimpFI;
-   vtab->ClearSimpIF = ClearSimpIF;
-   vtab->GetSeed = GetSeed;
-   vtab->GetSimpFI = GetSimpFI;
-   vtab->GetSimpIF = GetSimpIF;
-   vtab->SetSeed = SetSeed;
-   vtab->SetSimpFI = SetSimpFI;
-   vtab->SetSimpIF = SetSimpIF;
-   vtab->TestSeed = TestSeed;
-   vtab->TestSimpFI = TestSimpFI;
-   vtab->TestSimpIF = TestSimpIF;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "MathMap",
-               "Transformation using mathematical functions" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static double LogGamma( double x, int *status ) {
-/*
-*  Name:
-*     LogGamma
-
-*  Purpose:
-*     Calculate the logarithm of the gamma function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     double LogGamma( double x, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function returns the natural logarithm of the gamma function
-*     for real arguments x>0. It uses the approximation of Lanczos, with
-*     constants from Press et al. (Numerical Recipes), giving a maximum
-*     fractional error (on the gamma function) of less than 2e-10.
-
-*  Parameters:
-*     x
-*        The function argument, which must be greater than zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The natural logarithm of the gamma function with "x" as argument,
-*     or AST__BAD if "x" is not greater than zero.
-
-*  Notes:
-*     - This function does not generate errors and does not perform error
-*     reporting. It will execute even if the global error status is set.
-*/
-
-/* Local Constants: */
-   const double c0 = 1.000000000190015; /* Coefficients for series sum... */
-   const double c1 = 76.18009172947146;
-   const double c2 = -86.50532032941677;
-   const double c3 = 24.01409824083091;
-   const double c4 = -1.231739572450155;
-   const double c5 = 0.1208650973866179e-2;
-   const double c6 = -0.5395239384953e-5;
-   const double g = 5.0;
-
-/* Local Variables: */
-   double result;                /* Result value to return */
-   double sum;                   /* Series sum */
-   double xx;                    /* Denominator for summing series */
-   static double root_twopi;     /* sqrt( 2.0 * pi ) */
-   static int init = 0;          /* Initialisation performed? */
-
-/* If initialisation has not yet been performed, calculate the
-   constant required below. */
-   LOCK_MUTEX3
-   if ( !init ) {
-      root_twopi = sqrt( 2.0 * acos( -1.0 ) );
-
-/* Note that initialisation has been performed. */
-      init = 1;
-   }
-   UNLOCK_MUTEX3
-
-/* Return a bad value if "x" is not greater than zero. */
-   if ( x <= 0.0 ) {
-      result = AST__BAD;
-
-/* Otherwise, form the series sum. Since we only use 6 terms, the loop
-   that would normally be used has been completely unrolled here. */
-   } else {
-      xx = x;
-      sum = c0;
-      sum += c1 / ++xx;
-      sum += c2 / ++xx;
-      sum += c3 / ++xx;
-      sum += c4 / ++xx;
-      sum += c5 / ++xx;
-      sum += c6 / ++xx;
-
-/* Calculate the result. */
-      result = x + g + 0.5;
-      result -= ( x + 0.5 ) * log( result );
-      result = log( root_twopi * sum / x ) - result;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a MathMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     MathMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated MathMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated MathMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated MathMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the MathMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        MathMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated MathMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   AstMathMap *mathmap1;         /* Pointer to first MathMap */
-   AstMathMap *mathmap2;         /* Pointer to second MathMap */
-   char **fwd1;                  /* Pointer to first forward function array */
-   char **fwd2;                  /* Pointer to second forward function array */
-   char **inv1;                  /* Pointer to first inverse function array */
-   char **inv2;                  /* Pointer to second inverse function array */
-   int ifun;                     /* Loop counter for functions */
-   int imap1;                    /* Index of first Mapping */
-   int imap2;                    /* Index of second Mapping */
-   int imap;                     /* Loop counter for Mappings */
-   int invert1;                  /* Invert flag for first MathMap */
-   int invert2;                  /* Invert flag for second MathMap */
-   int nfwd1;                    /* No. forward functions for first MathMap */
-   int nfwd2;                    /* No. forward functions for second MathMap */
-   int nin1;                     /* Number input coords for first MathMap */
-   int ninv1;                    /* No. inverse functions for first MathMap */
-   int ninv2;                    /* No. inverse functions for second MathMap */
-   int nout2;                    /* Number output coords for second MathMap */
-   int result;                   /* Result value to return */
-   int simplify;                 /* Mappings may simplify? */
-
-/* Initialise the returned result. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   mathmap1 = NULL;
-   mathmap2 = NULL;
-   imap1 = 0;
-   imap2 = 0;
-   invert1 = 0;
-   invert2 = 0;
-   nfwd1 = 0;
-   nin1 = 0;
-   ninv1 = 0;
-
-/* MathMaps are only worth simplifying if they occur in series. */
-   simplify = series;
-   
-/* If simplification appears possible, then obtain the indices of the
-   nominated mapping and of the one which follows it. Check that a
-   mapping exists for the second index. */
-   if ( simplify ) {
-      imap1 = where;
-      imap2 = imap1 + 1;
-      simplify = ( imap2 < *nmap );
-   }
-
-/* If OK, check whether the class of both Mappings is "MathMap" (a
-   MathMap can only combine with another MathMap). */
-   if ( simplify ) {
-      simplify = !strcmp( astGetClass( ( *map_list )[ imap1 ] ), "MathMap" );
-   }
-   if ( astOK && simplify ) {
-      simplify = !strcmp( astGetClass( ( *map_list )[ imap2 ] ), "MathMap" );
-   }
-      
-/* If still OK, obtain pointers to the two MathMaps and the associated
-   invert flag values. */
-   if ( astOK && simplify ) {
-      mathmap1 = (AstMathMap *) ( *map_list )[ imap1 ];
-      mathmap2 = (AstMathMap *) ( *map_list )[ imap2 ];
-      invert1 = ( *invert_list )[ imap1 ];
-      invert2 = ( *invert_list )[ imap2 ];
-
-/* Depending on the invert flag values, obtain the SimpFI or SimpIF
-   attribute value from each MathMap and check whether they are set so as
-   to permit simplification. */
-      simplify = ( ( invert1 ? astGetSimpIF( mathmap1 ) :
-                               astGetSimpFI( mathmap1 ) ) &&
-                   ( invert2 ? astGetSimpFI( mathmap2 ) :
-                               astGetSimpIF( mathmap2 ) ) );
-   }
-
-/* If still OK, obtain the effective numbers of input coordinates for
-   the first MathMap and output coordinates for the second. Take account
-   of the associated invert flags and the way the Invert attribute of
-   each MathMap is currently set. */
-   if ( astOK && simplify ) {
-      nin1 = ( invert1 == astGetInvert( mathmap1 ) ) ?
-             astGetNin( mathmap1 ) : astGetNout( mathmap1 );
-      nout2 = ( invert2 == astGetInvert( mathmap2 ) ) ?
-              astGetNout( mathmap2 ) : astGetNin( mathmap2 );
-
-/* Simplification is only possible if these two numbers are equal
-   (otherwise the the two MathMaps cannot be identical). */
-      simplify = ( nin1 == nout2 );
-   }
-
-/* If still OK, obtain the effective number of forward transformation
-   functions for the first MathMap (allowing for the associated invert
-   flag). Similarly, obtain the effective number of inverse
-   transformation functions for the second MathMap. */
-   if ( astOK && simplify ) {
-      nfwd1 = !invert1 ? mathmap1->nfwd : mathmap1->ninv;
-      ninv2 = !invert2 ? mathmap2->ninv : mathmap2->nfwd;
-
-/* Check whether these values are equal. The MathMaps cannot be
-   identical if they are not. */
-      simplify = ( nfwd1 == ninv2 );
-   }
-
-/* As above, obtain pointers to the array of effective forward
-   transformation functions for the first MathMap, and the effective
-   inverse transformation functions for the second MathMap. */
-   if ( astOK && simplify ) {
-      fwd1 = !invert1 ? mathmap1->fwdfun : mathmap1->invfun;
-      inv2 = !invert2 ? mathmap2->invfun : mathmap2->fwdfun;
-
-/* Loop to check whether these two sets of functions are
-   identical. The MathMaps cannot be merged unless they are. */
-      for ( ifun = 0; ifun < nfwd1; ifun++ ) {
-         simplify = !strcmp( fwd1[ ifun ], inv2[ ifun ] );
-         if ( !simplify ) break;
-      }
-   }
-
-/* If OK, repeat the above process to compare the effective inverse
-   transformation functions of the first MathMap with the forward
-   functions of the second one. */
-   if ( astOK && simplify ) {
-      ninv1 = !invert1 ? mathmap1->ninv : mathmap1->nfwd;
-      nfwd2 = !invert2 ? mathmap2->nfwd : mathmap2->ninv;
-      simplify = ( ninv1 == nfwd2 );
-   }
-   if ( astOK && simplify ) {
-      inv1 = !invert1 ? mathmap1->invfun : mathmap1->fwdfun;
-      fwd2 = !invert2 ? mathmap2->fwdfun : mathmap2->invfun;
-      for ( ifun = 0; ifun < ninv1; ifun++ ) {
-         simplify = !strcmp( inv1[ ifun ], fwd2[ ifun ] );
-         if ( !simplify ) break;
-      }
-   }
-
-/* If the two MathMaps can be merged, create a UnitMap as a
-   replacement. */
-   if ( astOK && simplify ) {
-      new = (AstMapping *) astUnitMap( nin1, "", status );
-
-/* If OK, annul the pointers to the original MathMaps. */
-      if ( astOK ) {
-         ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
-         ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement UnitMap and store the
-   associated invert flag. */
-         ( *map_list )[ imap1 ] = new;
-         ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to move the following Mapping pointers and invert flags down
-   in their arrays to close the gap. */
-         for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-            ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
-            ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
-         }
-
-/* Clear the final entry in each array. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap )--;
-         result = imap1;
-      }
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static void ParseConstant( const char *method, const char *class,
-                           const char *exprs, int istart, int *iend,
-                           double *con, int *status ) {
-/*
-*  Name:
-*     ParseConstant
-
-*  Purpose:
-*     Parse a constant.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ParseConstant( const char *method, const char *class,
-*                         const char *exprs, int istart, int *iend,
-*                         double *con, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This routine parses an expression, looking for a constant starting at
-*     the character with index "istart" in the string "exprs". If it
-*     identifies the constant successfully, "*con" it will return its value
-*     and "*iend" will be set to the index of the final constant character
-*     in "exprs".
-*
-*     If the characters encountered are clearly not part of a constant (it
-*     does not begin with a numeral or decimal point) the function returns
-*     with "*con" set to zero and "*iend" set to -1, but without reporting
-*     an error. However, if the first character appears to be a constant but
-*     its syntax proves to be invalid, then an error is reported.
-*
-*     The expression must be in lower case with no embedded white space.
-*     The constant must not have a sign (+ or -) in front of it.
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     exprs
-*        Pointer to a null-terminated string containing the expression
-*        to be parsed.
-*     istart
-*        Index of the first character in "exprs" to be considered by this
-*        function.
-*     iend
-*        Pointer to an int in which to return the index in "exprs" of the
-*        final character which forms part of the constant. If no constant is
-*        found, a value of -1 is returned.
-*     con
-*        Pointer to a double, in which the value of the constant, if found,
-*        will be returned.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   char *str;                    /* Pointer to temporary string */
-   char c;                       /* Single character from the expression */
-   int dpoint;                   /* Decimal point encountered? */
-   int expon;                    /* Exponent character encountered? */
-   int i;                        /* Loop counter for characters */
-   int iscon;		         /* Character is part of the constant? */
-   int n;                        /* Number of values read by astSscanf */
-   int nc;                       /* Number of characters read by astSscanf */
-   int numer;                    /* Numeral encountered in current field? */
-   int sign;                     /* Sign encountered? */
-   int valid;		         /* Constant syntax valid? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   *con = 0.0;
-   *iend = -1;
-
-/* Check if the expression starts with a numeral or a decimal point. */
-   c = exprs[ istart ];
-   numer = isdigit( c );
-   dpoint = ( c == '.' );
-
-/* If it begins with any of these, the expression is clearly intended
-   to be a constant, so any failure beyond this point will result in an
-   error. Otherwise, failure to find a constant is not an error. */
-   if ( numer || dpoint ) {
-
-/* Initialise remaining variables specifying the parser context. */
-      expon = 0;
-      sign = 0;
-      valid = 1;
-
-/* Loop to increment the last constant character position until the
-   following character in the expression does not look like part of the
-   constant. */
-      *iend = istart;
-      iscon = 1;
-      while ( ( c = exprs[ *iend + 1 ] ) && iscon ) {
-         iscon = 0;
-
-/* It may be part of a numerical constant if it is a numeral, wherever
-   it occurs. */
-         if ( isdigit( c ) ) {
-            numer = 1;
-            iscon = 1;
-
-/* Or a decimal point, so long as it is the first one and is not in
-   the exponent field. Otherwise it is invalid. */
-         } else if ( c == '.' ) {
-            if ( !( dpoint || expon ) ) {
-               dpoint = 1;
-               iscon = 1;
-            } else {
-               valid = 0;
-            }
-
-/* Or if it is a 'd' or 'e' exponent character, so long as it is the
-   first one and at least one numeral has been encountered first.
-   Otherwise it is invalid. */
-          } else if ( ( c == 'd' ) || ( c == 'e' ) ) {
-             if ( !expon && numer ) {
-                expon = 1;
-                numer = 0;
-                iscon = 1;
-             } else {
-                valid = 0;
-             }
-
-/* Or if it is a sign, so long as it is in the exponent field and is
-   the first sign with no previous numerals in the same field. Otherwise
-   it is invalid (unless numerals have been encountered, in which case it
-   marks the end of the constant). */
-          } else if ( ( c == '+' ) || ( c == '-' ) ) {
-             if ( expon && !sign && !numer ) {
-                sign = 1;
-                iscon = 1;
-             } else if ( !numer ) {
-                valid = 0;
-             }
-          }
-
-/* Increment the character count if the next character may be part of
-   the constant, or if it was invalid (it will then form part of the
-   error message). */
-          if ( iscon || !valid ) ( *iend )++;
-      }
-
-/* Finally, check that the last field contained a numeral. */
-      valid = ( valid && numer );
-
-/* If the constant appears valid, allocate a temporary string to hold
-   it. */
-      if ( valid ) {
-         str = astMalloc( (size_t) ( *iend - istart + 2 ) );
-         if ( astOK ) {
-
-/* Copy the constant's characters, changing 'd' to 'e' so that
-   "astSscanf" will recognise it as an exponent character. */
-            for ( i = istart; i <= *iend; i++ ) {
-               str[ i - istart ] = ( exprs[ i ] == 'd' ) ? 'e' : exprs[ i ];
-            }
-            str[ *iend - istart + 1 ] = '\0';
-            
-/* Attempt to read the constant as a double, noting how many values
-   are read and how many characters consumed. */
-            n = astSscanf( str, "%lf%n", con, &nc );
-
-/* Check that one value was read and all the characters consumed. If
-   not, then the constant's syntax is invalid. */
-            if ( ( n != 1 ) || ( nc < ( *iend - istart + 1 ) ) ) valid = 0;
-         }
-
-/* Free the temporary string. */
-         str = astFree( str );
-      }
-
-/* If the constant syntax is invalid, and no other error has occurred,
-   then report an error. */
-      if ( astOK && !valid ) {
-         astError( AST__CONIN,
-                   "%s(%s): Invalid constant syntax in the expression "
-                   "\"%.*s\".", status,
-                   method, class, *iend + 1, exprs );
-      }
-
-/* If an error occurred, reset the output values. */
-      if ( !astOK ) {
-         *iend = -1;
-         *con = 0.0;
-      }
-   }
-}
-
-static void ParseName( const char *exprs, int istart, int *iend, int *status ) {
-/*
-*  Name:
-*     ParseName
-
-*  Purpose:
-*     Parse a name.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ParseName( const char *exprs, int istart, int *iend, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This routine parses an expression, looking for a name starting at the
-*     character with index "istart" in the string "exprs". If it identifies
-*     a name successfully, "*iend" will return the index of the final name
-*     character in "exprs". A name must begin with an alphabetic character
-*     and subsequently contain only alphanumeric characters or underscores.
-*
-*     If the expression does not contain a name at the specified location,
-*     "*iend" is set to -1. No error results.
-*
-*     The expression should not contain embedded white space.
-
-*  Parameters:
-*     exprs
-*        Pointer to a null-terminated string containing the expression
-*        to be parsed.
-*     istart
-*        Index of the first character in "exprs" to be considered by this
-*        function.
-*     iend
-*        Pointer to an int in which to return the index in "exprs" of the
-*        final character which forms part of the name. If no name is
-*        found, a value of -1 is returned.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   char c;                       /* Single character from expression */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   *iend = -1;
-
-/* Check the first character is valid for a name (alphabetic). */
-   if ( isalpha( exprs[ istart ] ) ) {
-
-/* If so, loop to inspect each subsequent character until one is found
-   which is not part of a name (not alphanumeric or underscore). */
-      for ( *iend = istart; ( c = exprs[ *iend + 1 ] ); ( *iend )++ ) {
-         if ( !( isalnum( c ) || ( c == '_' ) ) ) break;
-      }
-   }
-}
-
-static void ParseVariable( const char *method, const char *class,
-                           const char *exprs, int istart, int nvar,
-                           const char *var[], int *ivar, int *iend, int *status ) {
-/*
-*  Name:
-*     ParseVariable
-
-*  Purpose:
-*     Parse a variable name.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ParseVariable( const char *method, const char *class,
-*                         const char *exprs, int istart, int nvar,
-*                         const char *var[], int *ivar, int *iend, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This routine parses an expression, looking for a recognised variable
-*     name starting at the character with index "istart" in the string
-*     "exprs". If it identifies a variable name successfully, "*ivar" will
-*     return a value identifying it and "*iend" will return the index of the
-*     final variable name character in "exprs". To be recognised, a name
-*     must begin with an alphabetic character and subsequently contain only
-*     alphanumeric characters or underscores. It must also appear in the
-*     list of defined variable names supplied to this function.
-*
-*     If the expression does not contain a name at the specified location,
-*     "*ivar" and "*iend" are set to -1 and no error results. However, if
-*     the expression contains a name but it is not in the list of defined
-*     variable names supplied, then an error is reported.
-*
-*     This function is case sensitive. The expression should not contain
-*     embedded white space.
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     exprs
-*        Pointer to a null-terminated string containing the expression
-*        to be parsed.
-*     istart
-*        Index of the first character in "exprs" to be considered by this
-*        function.
-*     nvar
-*        The number of defined variable names.
-*     var
-*        An array of pointers (with "nvar" elements) to null-terminated
-*        strings. Each of these should contain a variable name to be
-*        recognised. These strings are case sensitive and should contain
-*        no white space.
-*     ivar
-*        Pointer to an int in which to return the index in "vars" of the
-*        variable name found. If no variable name is found, a value of -1
-*        is returned.
-*     iend
-*        Pointer to an int in which to return the index in "exprs" of the
-*        final character which forms part of the variable name. If no variable
-*        name is found, a value of -1 is returned.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int found;                    /* Variable name recognised? */
-   int nc;                       /* Number of characters in variable name */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   *ivar = -1;
-   *iend = -1;
-
-/* Determine if the characters in the expression starting at index
-   "istart" constitute a valid name. */
-   ParseName( exprs, istart, iend, status );
-
-/* If so, calculate the length of the name. */
-   if ( *iend >= istart ) {
-      nc = *iend - istart + 1;
-
-/* Loop to compare the name with the list of variable names
-   supplied. */
-      found = 0;
-      for ( *ivar = 0; *ivar < nvar; ( *ivar )++ ) {
-         found = ( nc == (int) strlen( var[ *ivar ] ) ) &&
-                 !strncmp( exprs + istart, var[ *ivar ], (size_t) nc );
-
-/* Break if the name is recognised. */
-         if ( found ) break;
-      }
-
-/* If it was not recognised, then report an error and reset the output
-   values. */
-      if ( !found ) {
-         astError( AST__UDVOF,
-                   "%s(%s): Undefined variable or function in the expression "
-                   "\"%.*s\".", status,
-                   method, class, *iend + 1, exprs );
-         *ivar = -1;
-         *iend = -1;
-      }
-   }
-}
-
-static double Poisson( Rcontext *context, double mean, int *status ) {
-/*
-*  Name:
-*     Poisson
-
-*  Purpose:
-*     Produce a pseudo-random sample from a Poisson distribution.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     double Poisson( Rcontext *context, double mean, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     On each invocation, this function returns a pseudo-random sample drawn
-*     from a Poisson distribution with a specified mean. A combination of
-*     methods is used, depending on the value of the mean. The algorithm is
-*     based on that given by Press et al. (Numerical Recipes), but
-*     re-implemented and extended.
-
-*  Parameters:
-*     context
-*        Pointer to an Rcontext structure which holds the random number
-*        generator's context between invocations.
-*     mean
-*        The mean of the Poisson distribution, which should not be
-*        negative.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A sample (which will only take integer values) from the Poisson
-*     distribution, or AST__BAD if the mean supplied is negative.
-
-*  Notes:
-*     - The sequence of numbers returned is determined by the "seed"
-*     value in the Rcontext structure supplied.
-*     - If the seed value is changed, the "active" flag must also be cleared
-*     so that this function can re-initiallise the Rcontext structure before
-*     generating the next pseudo-random number. The "active" flag should
-*     also be clear to force initialisation the first time an Rcontext
-*     structure is used.
-*     - This function does not perform error checking and does not generate
-*     errors. It will execute even if the global error status is set.
-*/
-
-/* Local Constants: */
-   const double small = 9.3;     /* "Small" distribution mean value */
-
-/* Local Variables: */
-   double pfract;                /* Probability of accepting sample */
-   double product;               /* Product of random samples */
-   double ran;                   /* Sample from Lorentzian distribution */
-   double result;                /* Result value to return */
-   static double beta;           /* Constant for forming acceptance ratio */
-   static double huge;           /* Large mean where std. dev. is negligible */
-   static double last_mean;      /* Value of "mean" on last invocation */
-   static double log_mean;       /* Logarithm of "mean" */
-   static double pi;             /* Value of pi */
-   static double ranmax;         /* Maximum safe value of "ran" */
-   static double root_2mean;     /* sqrt( 2.0 * mean ) */
-   static double sqrt_point9;    /* Square root of 0.9 */
-   static double thresh;         /* Threshold for product of samples */
-   static int init = 0;          /* Local initialisation performed? */
-
-   LOCK_MUTEX6
-
-/* If initialisation has not yet been performed, then perform it
-   now. */
-   if ( !init ) {
-
-/* Initialise the mean value from the previous invocation. */
-      last_mean = -1.0;
-
-/* Calculate simple constants. */
-      pi = acos( -1.0 );
-      sqrt_point9 = sqrt( 0.9 );
-
-/* Calculate the value of the distribution mean for which the smallest
-   representable deviation from the mean permitted by the machine
-   precision is one thousand standard deviations. */
-      huge = pow( 1.0e3 / DBL_EPSILON, 2.0 );
-
-/* Calculate the largest value such that
-   (0.9+(sqrt_point9*ranmax)*(sqrt_point9*ranmax)) doesn't overflow,
-   allowing a small margin for rounding error. */
-      ranmax = ( sqrt( DBL_MAX - 0.9 ) / sqrt( 0.9 ) ) *
-               ( 1.0 - 4.0 * DBL_EPSILON );
-
-/* Note that initialisation has been performed. */
-      init = 1;
-   }
-
-/* If the distribution mean is less than zero, then return a bad
-   result. */
-   if ( mean < 0.0 ) {
-      result = AST__BAD;
-
-/* If the mean is zero, then the result can only be zero. */
-   } else if ( mean == 0.0 ) {
-      result = 0.0;
-
-/* Otherwise, if the mean is sufficiently small, we can use the direct
-   method of summing a series of exponentially distributed random samples
-   and counting the number which occur before the mean is exceeded. This
-   is equivalent to multiplying a series of uniformly distributed
-   samples and counting the number which occur before the product
-   becomes less then an equivalent threshold. */
-   } else if ( mean <= small ) {
-
-/* If the mean has changed since the last invocation, store the new
-   mean and calculate a new threshold. */
-      if ( mean != last_mean ) {
-         last_mean = mean;
-         thresh = exp( -mean );
-      }
-
-/* Initialise the product and the result. */
-      product = 1.0;
-      result = -1.0;
-
-/* Multiply the random samples, counting the number needed to reach
-   the threshold. */
-      do {
-         product *= Rand( context, status );
-         result += 1.0;
-      } while ( product > thresh );
-
-/* Otherwise, if the distribution mean is large (but not huge), we
-   must use an indirect rejection method. */
-   } else if ( mean <= huge ) {
-
-/* If the mean has changed since the last invocation, then
-   re-calculate the constants required below. Note that because of the
-   restrictions we have placed on "mean", these calculations are safe
-   against overflow. */
-      if ( mean != last_mean ) {
-         last_mean = mean;
-         log_mean = log( mean );
-         root_2mean = sqrt( 2.0 * mean );
-         beta = mean * log_mean - LogGamma( mean + 1.0, status );
-      }
-
-/* Loop until a suitable random sample has been generated. */
-      do {
-         do {
-
-/* First transform a sample from a uniform distribution to obtain a
-   sample from a Lorentzian distribution. Check that the result is not so
-   large as to cause overflow later. Also check for overflow in the maths
-   library. If necessary, obtain a new sample. */
-            do {
-               errno = 0;
-               ran = tan( pi * Rand( context, status ) );
-            } while ( ( ran > ranmax ) ||
-                      ( ( errno == ERANGE ) &&
-                        ( ( ( ran >= 0.0 ) ? ran : -ran ) == HUGE_VAL ) ) );
-
-/* If OK, scale the sample and add a constant so that the sample's
-   distribution approximates the Poisson distribution we
-   require. Overflow is prevented by the check on "ran" above, together
-   with the restricted value of "mean". */
-            result = ran * root_2mean + mean;
-
-/* If the result is less than zero (where the Poisson distribution has
-   value zero), then obtain a new sample. */
-         } while ( result < 0.0 );
-
-/* Round down to an integer, so that the sample is valid for a Poisson
-   distribution. */
-         result = floor( result );
-
-/* Calculate the ratio between the required Poisson distribution and
-   the Lorentzian from which we have sampled (the factor of 0.9 prevents
-   this exceeding 1.0, and overflow is again prevented by the checks
-   performed above). */
-         ran *= sqrt_point9;
-         pfract = ( 0.9 + ran * ran ) *
-                  exp( result * log_mean - LogGamma( result + 1.0, status ) - beta );
-
-/* Accept the sample with this fractional probability, otherwise
-   obtain a new sample. */
-      } while ( Rand( context, status ) > pfract );
-
-/* If the mean is huge, the relative standard deviation will be
-   negligible compared to the machine precision. In such cases, the
-   probability of getting a result that differs from the mean is
-   effectively zero, so we can simply return the mean. */
-   } else {
-      result = mean;
-   }
-
-   UNLOCK_MUTEX6
-
-/* Return the result. */
-   return result;
-}
-
-static double Rand( Rcontext *context, int *status ) {
-/*
-*  Name:
-*     Rand
-
-*  Purpose:
-*     Produce a uniformly distributed pseudo-random number.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     double Rand( Rcontext *context, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     On each invocation, this function returns a pseudo-random number
-*     uniformly distributed in the range 0.0 to 1.0 (inclusive). The
-*     underlying algorithm is that used by the "ran2" function of Press et
-*     al. (Numerical Recipes), which has a long period and good statistical
-*     properties. This independent implementation returns double precision
-*     values.
-
-*  Parameters:
-*     context
-*        Pointer to an Rcontext structure which holds the random number
-*        generator's context between invocations.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The sequence of numbers returned is determined by the "seed"
-*     value in the Rcontext structure supplied.
-*     - If the seed value is changed, the "active" flag must also be cleared
-*     so that this function can re-initiallise the Rcontext structure before
-*     generating the next pseudo-random number. The "active" flag should
-*     also be clear to force initialisation the first time an Rcontext
-*     structure is used.
-*     - This function does not perform error checking and does not generate
-*     errors. It will execute even if the global error status is set.
-*/
-
-/* Local Constants: */
-   const long int a1 = 40014L;   /* Random number generator constants... */
-   const long int a2 = 40692L;
-   const long int m1 = 2147483563L;
-   const long int m2 = 2147483399L;
-   const long int q1 = 53668L;
-   const long int q2 = 52774L;
-   const long int r1 = 12211L;
-   const long int r2 = 3791L;
-   const int ntab =              /* Size of shuffle table */
-      AST_MATHMAP_RAND_CONTEXT_NTAB_;
-   const int nwarm = 8;          /* Number of warm-up iterations */
-
-/* Local Variables: */
-   double result;                /* Result value to return */
-   double scale;                 /* Scale factor for random integers */
-   double sum;                   /* Sum for forming normalisation constant */
-   int dbits;                    /* Approximate bits in double mantissa */
-   int irand;                    /* Loop counter for random integers */
-   int itab;                     /* Loop counter for shuffle table */
-   int lbits;                    /* Approximate bits used by generators */
-   long int seed;                /* Random number seed */
-   long int tmp;                 /* Temporary variable */
-   static double norm;           /* Normalisation constant */
-   static double scale0;         /* Scale decrement for successive integers */
-   static int init = 0;          /* Local initialisation performed? */
-   static int nrand;             /* Number of random integers to use */
-
-/* If the random number generator context is not active, then
-   initialise it. */
-   if ( !context->active ) {
-
-/* First, perform local initialisation for this function, if not
-   already done. */
-      LOCK_MUTEX4
-      if ( !init ) {
-
-/* Obtain the approximate number of bits used by the random integer
-   generator from the value "m1". */
-         (void) frexp( (double) m1, &lbits );
-
-/* Obtain the approximate number of bits used by the mantissa of the
-   double value we want to produce, allowing for the (unlikely)
-   possibility that the mantissa's radix isn't 2. */
-         dbits = (int) ceil( (double) DBL_MANT_DIG *
-                             log( (double) FLT_RADIX ) / log( 2.0 ) );
-
-/* Hence determine how many random integers we need to combine to
-   produce each double value, so that all the mantissa's bits will be
-   used. */
-         nrand = ( dbits + lbits - 1 ) / lbits;
-
-/* Calculate the scale factor by which each successive random
-   integer's contribution to the result is reduced so as to generate
-   progressively less significant bits. */
-         scale0 = 1.0 / (double) ( m1 - 1L );
-
-/* Loop to sum the maximum contributions from each random integer
-   (assuming that each takes the largest possible value, of "m1-1",
-   from which we will later subtract 1). This produces the normalisation
-   factor by which the result must be scaled so as to lie between 0.0 and
-   1.0 (inclusive). */
-         sum = 0.0;
-         scale = 1.0;
-         for ( irand = 0; irand < nrand; irand++ ) {
-            scale *= scale0;
-            sum += scale;
-         }
-         norm = 1.0 / ( sum * (double) ( m1 - 2L ) );
-
-/* Note that local initialisation has been done. */
-         init = 1;
-      }
-      UNLOCK_MUTEX4
-
-/* Obtain the seed value, enforcing positivity. */
-      seed = (long int) context->seed;
-      if ( seed < 1 ) seed = seed + LONG_MAX;
-      if ( seed < 1 ) seed = LONG_MAX;
-
-/* Initialise the random number generators with this seed. */
-      context->rand1 = context->rand2 = seed;
-
-/* Now loop to initialise the shuffle table with an initial set of
-   random values. We generate more values than required in order to "warm
-   up" the generator before recording values in the table. */
-      for ( itab = ntab + nwarm - 1; itab >= 0; itab-- ) {
-
-/* Repeatedly update "rand1" from the expression "(rand1*a1)%m1" while
-   avoiding overflow. */
-         tmp = context->rand1 / q1;
-         context->rand1 = a1 * ( context->rand1 - tmp * q1 ) - tmp * r1;
-         if ( context->rand1 < 0L ) context->rand1 += m1;
-
-/* After warming up, start recording values in the table. */
-         if ( itab < ntab ) context->table[ itab ] = context->rand1;
-      }
-
-/* Record the last entry in the table as the "previous" random
-   integer. */
-      context->random_int = context->table[ 0 ];
-
-/* Note the random number generator context is active. */
-      context->active = 1;
-   }
-
-/* Generate a random value. */
-/* ------------------------ */
-/* Initialise. */
-   result = 0.0;
-
-/* Loop to generate sufficient random integers to combine into a
-   double value. */
-   scale = norm;
-   for ( irand = 0; irand < nrand; irand++ ) {
-
-/* Update the first generator "rand1" from the expression
-   "(a1*rand1)%m1" while avoiding overflow. */
-      tmp = context->rand1 / q1;
-      context->rand1 = a1 * ( context->rand1 - tmp * q1 ) - tmp * r1;
-      if ( context->rand1 < 0L ) context->rand1 += m1;
-
-/* Similarly, update the second generator "rand2" from the expression
-   "(a2*rand2)%m2". */
-      tmp = context->rand2 / q2;
-      context->rand2 = a2 * ( context->rand2 - tmp * q2 ) - tmp * r2;
-      if ( context->rand2 < 0L ) context->rand2 += m2;
-
-/* Use the previous random integer to generate an index into the
-   shuffle table. */
-      itab = (int) ( context->random_int /
-                     ( 1L + ( m1 - 1L ) / (long int) ntab ) );
-
-/* Extract the table entry and replace it with a new random value from
-   the first generator "rand1". This is the Bays-Durham shuffle. */
-      context->random_int = context->table[ itab ];
-      context->table[ itab ] = context->rand1;
-
-/* Combine the extracted value with the latest value from the second
-   generator "rand2". */
-      context->random_int -= context->rand2;
-      if ( context->random_int < 1L ) context->random_int += m1 - 1L;
-
-/* Update the scale factor to apply to the resulting random integer
-   and accumulate its contribution to the result. */
-      scale *= scale0;
-      result += scale * (double) ( context->random_int - 1L );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a MathMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     MathMap member function (extends the astSetAttrib method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a MathMap, the attribute
-*     and its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the MathMap.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-*/
-
-/* Local Vaiables: */
-   AstMathMap *this;             /* Pointer to the MathMap structure */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the MathMap structure. */
-   this = (AstMathMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* Seed. */
-/* ----- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "seed= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetSeed( this, ival );
-      
-/* SimpFI. */
-/* ------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "simpfi= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetSimpFI( this, ival );
-
-/* SimpIF. */
-/* ------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "simpif= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetSimpIF( this, ival );
-
-/* Pass any unrecognised setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a MathMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     MathMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a MathMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the MathMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMathMap *this;             /* Pointer to the MathMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the MathMap structure. */
-   this = (AstMathMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Seed. */
-/* ----- */
-   if ( !strcmp( attrib, "seed" ) ) {
-      result = astTestSeed( this );
-
-/* SimpFI. */
-/* ------- */
-   } else if ( !strcmp( attrib, "simpfi" ) ) {
-      result = astTestSimpFI( this );
-
-/* SimpIF. */
-/* ------- */
-   } else if ( !strcmp( attrib, "simpif" ) ) {
-      result = astTestSimpIF( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *map, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a MathMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     AstPointSet *Transform( AstMapping *map, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     MathMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a MathMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required coordinate
-*     transformation.
-
-*  Parameters:
-*     map
-*        Pointer to the MathMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the MathMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstMathMap *this;             /* Pointer to MathMap to be applied */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **data_ptr;            /* Array of pointers to coordinate data */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *work;                 /* Workspace for intermediate results */
-   int idata;                    /* Loop counter for data pointer elements */
-   int ifun;                     /* Loop counter for functions */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int ncoord_out;               /* Number of coordinates per output point */
-   int ndata;                    /* Number of data pointer elements filled */
-   int nfun;                     /* Number of functions to evaluate */
-   int npoint;                   /* Number of points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   work = NULL;
-
-/* Obtain a pointer to the MathMap. */
-   this = (AstMathMap *) map;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( map, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   transformation needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   and output PointSets and obtain pointers for accessing the input and output
-   coordinate values. */
-   ncoord_in = astGetNcoord( in );
-   ncoord_out = astGetNcoord( result );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
-   to the direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( this ) ) forward = !forward;
-
-/* Obtain the number of transformation functions that must be
-   evaluated to perform the transformation. This will include any that
-   produce intermediate results from which the final results are
-   calculated. */
-   nfun = forward ? this->nfwd : this->ninv;
-
-/* If intermediate results are to be calculated, then allocate
-   workspace to hold them (each intermediate result being a vector of
-   "npoint" double values). */
-   if ( nfun > ncoord_out ) {
-      work = astMalloc( sizeof( double) *
-                        (size_t) ( npoint * ( nfun - ncoord_out ) ) );
-   }
-
-/* Also allocate space for an array to hold pointers to the input
-   data, intermediate results and output data. */
-   data_ptr = astMalloc( sizeof( double * ) * (size_t) ( ncoord_in + nfun ) );
-
-/* We now set up the "data_ptr" array to locate the data to be
-   processed. */
-   if ( astOK ) {
-
-/* The first elements of this array point at the input data
-   vectors. */
-      ndata = 0;
-      for ( idata = 0; idata < ncoord_in; idata++ ) {
-         data_ptr[ ndata++ ] = ptr_in[ idata ];
-      }
-
-/* The following elements point at successive vectors within the
-   workspace array (if allocated). These vectors will act first as output
-   arrays for intermediate results, and then as input arrays for
-   subsequent calculations which use these results. */
-      for ( idata = 0; idata < ( nfun - ncoord_out ); idata++ ) {
-         data_ptr[ ndata++ ] = work + ( idata * npoint );
-      }
-
-/* The final elements point at the output coordinate data arrays into
-   which the final results will be written. */
-      for ( idata = 0; idata < ncoord_out; idata++ ) {
-         data_ptr[ ndata++ ] = ptr_out[ idata ];
-      }
-
-/* Perform coordinate transformation. */
-/* ---------------------------------- */
-/* Loop to evaluate each transformation function in turn. */
-      for ( ifun = 0; ifun < nfun; ifun++ ) {
-
-/* Invoke the function that evaluates compiled expressions. Pass the
-   appropriate code and constants arrays, depending on the direction of
-   coordinate transformation, together with the required stack size. The
-   output array is the vector located by successive elements of the
-   "data_ptr" array (skipping the input data elements), while the
-   function has access to all previous elements of the "data_ptr" array
-   to locate the required input data. */
-         EvaluateFunction( &this->rcontext, npoint, (const double **) data_ptr,
-                           forward ? this->fwdcode[ ifun ] :
-                                     this->invcode[ ifun ],
-                           forward ? this->fwdcon[ ifun ] :
-                                     this->invcon[ ifun ],
-                           forward ? this->fwdstack : this->invstack,
-                           data_ptr[ ifun + ncoord_in ], status );
-      }
-   }
-
-/* Free the array of data pointers and any workspace allocated for
-   intermediate results. */
-   data_ptr = astFree( data_ptr );
-   if ( nfun > ncoord_out ) work = astFree( work );
-
-/* If an error occurred, then return a NULL pointer. If no output
-   PointSet was supplied, also delete any new one that may have been
-   created. */
-   if ( !astOK ) {
-      result = ( result == out ) ? NULL : astDelete( result );
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void ValidateSymbol( const char *method, const char *class,
-                            const char *exprs, int iend, int sym,
-                            int *lpar, int **argcount, int **opensym,
-                            int *ncon, double **con, int *status ) {
-/*
-*  Name:
-*     ValidateSymbol
-
-*  Purpose:
-*     Validate a symbol in an expression.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     void ValidateSymbol( const char *method, const char *class,
-*                          const char *exprs, int iend, int sym, int *lpar,
-*                          int **argcount, int **opensym, int *ncon,
-*                          double **con, int *status )
-
-*  Class Membership:
-*     MathMap member function.
-
-*  Description:
-*     This function validates an identified standard symbol during
-*     compilation of an expression. Its main task is to keep track of the
-*     level of parenthesis in the expression and to count the number of
-*     arguments supplied to functions at each level of parenthesis (for
-*     nested function calls). On this basis it is able to interpret and
-*     accept or reject symbols which represent function calls, parentheses
-*     and delimiters. Other symbols are accepted automatically.
-
-*  Parameters:
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function.
-*        This method name is used solely for constructing error messages.
-*     class
-*        Pointer to a constant null-terminated character string containing the
-*        class name of the Object being processed. This name is used solely
-*        for constructing error messages.
-*     exprs
-*        Pointer to a null-terminated string containing the expression
-*        being parsed. This is only used for constructing error messages.
-*     iend
-*        Index in "exprs" of the last character belonging to the most
-*        recently identified symbol. This is only used for constructing error
-*        messages.
-*     sym
-*        Index in the static "symbol" array of the most recently identified
-*        symbol in the expression. This is the symbol to be verified.
-*     lpar
-*        Pointer to an int which holds the current level of parenthesis. On
-*        the first invocation, this should be zero. The returned value should
-*        be passed to subsequent invocations.
-*     argcount
-*        Address of a pointer to a dynamically allocated array of int in
-*        which argument count information is maintained for each level of
-*        parenthesis (e.g. for nested function calls). On the first invocation,
-*        "*argcount" should be NULL. This function will allocate the required
-*        space as needed and update this pointer. The returned pointer value
-*        should be passed to subsequent invocations.
-*
-*        The allocated space must be freed by the caller (using astFree) when
-*        no longer required.
-*     opensym
-*        Address of a pointer to a dynamically allocated array of int, in which
-*        information is maintained about the functions associated with each
-*        level of parenthesis (e.g. for nested function calls). On the first
-*        invocation, "*opensym" should be NULL. This function will allocate the
-*        required space as needed and update this pointer. The returned pointer
-*        value should be passed to subsequent invocations.
-*
-*        The allocated space must be freed by the caller (using astFree) when
-*        no longer required.
-*     ncon
-*        Pointer to an int which holds a count of the constants associated
-*        with the expression (and determines the size of the "*con" array).
-*        This function will update the count to reflect any new constants
-*        appended to the "*con" array and the returned value should be passed
-*        to subsequent invocations.
-*     con
-*        Address of a pointer to a dynamically allocated array of double, in
-*        which the constants associated with the expression being parsed are
-*        accumulated. On entry, "*con" should point at a dynamic array with
-*        at least "*ncon" elements containing existing constants (or may be
-*        NULL if no constants have yet been stored). This function will
-*        allocate the required space as needed and update this pointer (and
-*        "*ncon") appropriately. The returned pointer value should be passed
-*        to subsequent invocations.
-*
-*        The allocated space must be freed by the caller (using astFree) when
-*        no longer required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The dynamically allocated arrays normally returned by this function
-*     will be freed and NULL pointers will be returned if this function is
-*     invoked with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Check the global error status, but do not return at this point
-   because dynamic arrays may require freeing. */
-   if ( astOK ) {
-
-/* Check if the symbol is a comma. */
-      if ( ( symbol[ sym ].text[ 0 ] == ',' ) &&
-           ( symbol[ sym ].text[ 1 ] == '\0' ) ) {
-
-/* A comma is only used to delimit function arguments. If the current
-   level of parenthesis is zero, or the symbol which opened the current
-   level of parenthesis was not a function call (indicated by an argument
-   count of zero at the current level of parenthesis), then report an
-   error. */
-         if ( ( *lpar <= 0 ) || ( ( *argcount )[ *lpar - 1 ] == 0 ) ) {
-            astError( AST__COMIN,
-                      "%s(%s): Spurious comma encountered in the expression "
-                      "\"%.*s\".", status,
-                      method, class, iend + 1, exprs );
-
-/* If a comma is valid, then increment the argument count at the
-   current level of parenthesis. */
-         } else {
-            ( *argcount )[ *lpar - 1 ]++;
-         }
-
-/* If the symbol is not a comma, check if it increases the current
-   level of parenthesis. */
-      } else if ( symbol[ sym ].parincrement > 0 ) {
-
-/* Increase the size of the arrays which hold parenthesis level
-   information and check for errors. */
-         *argcount = astGrow( *argcount, *lpar + 1, sizeof( int ) );
-         *opensym = astGrow( *opensym, *lpar + 1, sizeof( int ) );
-         if ( astOK ) {
-
-/* Increment the level of parenthesis and initialise the argument
-   count at the new level. This count is set to zero if the symbol which
-   opens the parenthesis level is not a function call (indicated by a
-   zero "nargs" entry in the symbol data), and it subsequently remains at
-   zero. If the symbol is a function call, the argument count is
-   initially set to 1 and increments whenever a comma is encountered at
-   this parenthesis level. */
-            ( *argcount )[ ++( *lpar ) - 1 ] = ( symbol[ sym ].nargs != 0 );
-
-/* Remember the symbol which opened this parenthesis level. */
-            ( *opensym )[ *lpar - 1 ] = sym;
-         }
-
-/* Check if the symbol decreases the current parenthesis level. */
-      } else if ( symbol[ sym ].parincrement < 0 ) {
-
-/* Ensure that the parenthesis level is not already at zero. If it is,
-   then there is a missing left parenthesis in the expression being
-   compiled, so report an error. */
-         if ( *lpar == 0 ) {
-            astError( AST__MLPAR,
-                      "%s(%s): Missing left parenthesis in the expression "
-                      "\"%.*s\".", status,
-                      method, class, iend + 1, exprs );
-
-/* If the parenthesis level is valid and the symbol which opened this
-   level of parenthesis was a function call with a fixed number of
-   arguments (indicated by a positive "nargs" entry in the symbol data),
-   then we must check the number of function arguments which have been
-   encountered. */
-         } else if ( symbol[ ( *opensym )[ *lpar - 1 ] ].nargs > 0 ) {
-
-/* Report an error if the number of arguments is wrong. */
-            if ( ( *argcount )[ *lpar - 1 ] !=
-                 symbol[ ( *opensym )[ *lpar - 1 ] ].nargs ) {
-               astError( AST__WRNFA,
-                         "%s(%s): Wrong number of function arguments in the "
-                         "expression \"%.*s\".", status,
-                         method, class, iend + 1, exprs );
-
-/* If the number of arguments is valid, decrement the parenthesis
-   level. */
-            } else {
-               ( *lpar )--;
-            }
-
-/* If the symbol which opened this level of parenthesis was a function
-   call with a variable number of arguments (indicated by a negative
-   "nargs" entry in the symbol data), then we must check and process the
-   number of function arguments. */
-         } else if ( symbol[ ( *opensym )[ *lpar - 1 ] ].nargs < 0 ) {
-
-/* Check that the minimum required number of arguments have been
-   supplied. Report an error if they have not. */
-            if ( ( *argcount )[ *lpar - 1 ] <
-                 ( -symbol[ ( *opensym )[ *lpar - 1 ] ].nargs ) ) {
-               astError( AST__WRNFA,
-                         "%s(%s): Insufficient function arguments in the "
-                         "expression \"%.*s\".", status,
-                         method, class, iend + 1, exprs );
-
-/* If the number of arguments is valid, increase the size of the
-   constants array and check for errors. */
-            } else {
-               *con = astGrow( *con, *ncon + 1, sizeof( double ) );
-               if ( astOK ) {
-
-/* Append the argument count to the end of the array of constants and
-   decrement the parenthesis level. */
-                  ( *con )[ ( *ncon )++ ] =
-                     (double) ( *argcount )[ --( *lpar ) ];
-               }
-            }
-
-/* Finally, if the symbol which opened this level of parenthesis was
-   not a function call ("nargs" entry in the symbol data is zero), then
-   decrement the parenthesis level. In this case there is no need to
-   check the argument count, because it will not have been
-   incremented. */
-         } else {
-            ( *lpar )--;
-         }
-      }
-   }
-
-/* If an error occurred (or the global error status was set on entry),
-   then reset the parenthesis level and free any memory which may have
-   been allocated. */
-   if ( !astOK ) {
-      *lpar = 0;
-      if ( *argcount ) *argcount = astFree( *argcount );
-      if ( *opensym ) *opensym = astFree( *opensym );
-      if ( *con ) *con = astFree( *con );
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     Seed
-
-*  Purpose:
-*     Random number seed for a MathMap.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute, which may take any integer value, determines the
-*     sequence of random numbers produced by the random number functions in
-*     MathMap expressions. It is set to an unpredictable default value when
-*     a MathMap is created, so that by default each MathMap uses a different
-*     set of random numbers.
-*
-*     If required, you may set this Seed attribute to a value of your
-*     choosing in order to produce repeatable behaviour from the random
-*     number functions. You may also enquire the Seed value (e.g. if an
-*     initially unpredictable value has been used) and then use it to
-*     reproduce the resulting sequence of random numbers, either from the
-*     same MathMap or from another one.
-*
-*     Clearing the Seed attribute gives it a new unpredictable default
-*     value.
-
-*  Applicability:
-*     MathMap
-*        All MathMaps have this attribute.
-*att--
-*/
-/* Clear the Seed value by setting it to a new unpredictable value
-   produced by DefaultSeed and clearing the "seed_set" flag in the
-   MathMap's random number generator context. Also clear the "active"
-   flag, so that the generator will be re-initialised to use this seed
-   when it is next invoked. */
-astMAKE_CLEAR(MathMap,Seed,rcontext.seed,( this->rcontext.seed_set = 0,
-                                           this->rcontext.active = 0,
-                                           DefaultSeed( &this->rcontext, status ) ))
-
-/* Return the "seed" value from the random number generator
-   context. */
-astMAKE_GET(MathMap,Seed,int,0,this->rcontext.seed)
-
-/* Store the new seed value in the MathMap's random number generator
-   context and set the context's "seed_set" flag. Also clear the "active"
-   flag, so that the generator will be re-initialised to use this seed
-   when it is next invoked. */
-astMAKE_SET(MathMap,Seed,int,rcontext.seed,( this->rcontext.seed_set = 1,
-                                             this->rcontext.active = 0,
-                                             value ))
-
-/* Test the "seed_set" flag in the random number generator context. */
-astMAKE_TEST(MathMap,Seed,( this->rcontext.seed_set ))
-
-/*
-*att++
-*  Name:
-*     SimpFI
-
-*  Purpose:
-*     Forward-inverse MathMap pairs simplify?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-c     This attribute should be set to a non-zero value if applying a
-c     MathMap's forward transformation, followed immediately by the matching
-c     inverse transformation will always restore the original set of
-c     coordinates. It indicates that AST may replace such a sequence of
-c     operations by an identity Mapping (a UnitMap) if it is encountered
-c     while simplifying a compound Mapping (e.g. using astSimplify).
-f     This attribute should be set to a non-zero value if applying a
-f     MathMap's forward transformation, followed immediately by the matching
-f     inverse transformation will always restore the original set of
-f     coordinates. It indicates that AST may replace such a sequence of
-f     operations by an identity Mapping (a UnitMap) if it is encountered
-f     while simplifying a compound Mapping (e.g. using AST_SIMPLIFY).
-*
-*     By default, the SimpFI attribute is zero, so that AST will not perform
-*     this simplification unless you have set SimpFI to indicate that it is
-*     safe to do so.
-
-*  Applicability:
-*     MathMap
-*        All MathMaps have this attribute.
-
-*  Notes:
-*     - For simplification to occur, the two MathMaps must be in series and
-*     be identical (with textually identical transformation
-*     functions). Functional equivalence is not sufficient.
-*     - The consent of both MathMaps is required before simplification can
-*     take place. If either has a SimpFI value of zero, then simplification
-*     will not occur.
-*     - The SimpFI attribute controls simplification only in the case where
-*     a MathMap's forward transformation is followed by the matching inverse
-*     transformation. It does not apply if an inverse transformation is
-*     followed by a forward transformation. This latter case is controlled
-*     by the SimpIF attribute.
-c     - The "forward" and "inverse" transformations referred to are those
-c     defined when the MathMap is created (corresponding to the "fwd" and
-c     "inv" parameters of its constructor function). If the MathMap is
-c     inverted (i.e. its Invert attribute is non-zero), then the role of the
-c     SimpFI and SimpIF attributes will be interchanged.
-f     - The "forward" and "inverse" transformations referred to are those
-f     defined when the MathMap is created (corresponding to the FWD and
-f     INV arguments of its constructor function). If the MathMap is
-f     inverted (i.e. its Invert attribute is non-zero), then the role of the
-f     SimpFI and SimpIF attributes will be interchanged.
-*att--
-*/
-/* Clear the SimpFI value by setting it to -INT_MAX. */
-astMAKE_CLEAR(MathMap,SimpFI,simp_fi,-INT_MAX)
-
-/* Supply a default of 0 if no SimpFI value has been set. */
-astMAKE_GET(MathMap,SimpFI,int,0,( ( this->simp_fi != -INT_MAX ) ?
-                                   this->simp_fi : 0 ))
-
-/* Set a SimpFI value of 1 if any non-zero value is supplied. */
-astMAKE_SET(MathMap,SimpFI,int,simp_fi,( value != 0 ))
-
-/* The SimpFI value is set if it is not -INT_MAX. */
-astMAKE_TEST(MathMap,SimpFI,( this->simp_fi != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     SimpIF
-
-*  Purpose:
-*     Inverse-forward MathMap pairs simplify?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-c     This attribute should be set to a non-zero value if applying a
-c     MathMap's inverse transformation, followed immediately by the matching
-c     forward transformation will always restore the original set of
-c     coordinates. It indicates that AST may replace such a sequence of
-c     operations by an identity Mapping (a UnitMap) if it is encountered
-c     while simplifying a compound Mapping (e.g. using astSimplify).
-f     This attribute should be set to a non-zero value if applying a
-f     MathMap's inverse transformation, followed immediately by the matching
-f     forward transformation will always restore the original set of
-f     coordinates. It indicates that AST may replace such a sequence of
-f     operations by an identity Mapping (a UnitMap) if it is encountered
-f     while simplifying a compound Mapping (e.g. using AST_SIMPLIFY).
-*
-*     By default, the SimpIF attribute is zero, so that AST will not perform
-*     this simplification unless you have set SimpIF to indicate that it is
-*     safe to do so.
-
-*  Applicability:
-*     MathMap
-*        All MathMaps have this attribute.
-
-*  Notes:
-*     - For simplification to occur, the two MathMaps must be in series and
-*     be identical (with textually identical transformation
-*     functions). Functional equivalence is not sufficient.
-*     - The consent of both MathMaps is required before simplification can
-*     take place. If either has a SimpIF value of zero, then simplification
-*     will not occur.
-*     - The SimpIF attribute controls simplification only in the case where
-*     a MathMap's inverse transformation is followed by the matching forward
-*     transformation. It does not apply if a forward transformation is
-*     followed by an inverse transformation. This latter case is controlled
-*     by the SimpFI attribute.
-c     - The "forward" and "inverse" transformations referred to are those
-c     defined when the MathMap is created (corresponding to the "fwd" and
-c     "inv" parameters of its constructor function). If the MathMap is
-c     inverted (i.e. its Invert attribute is non-zero), then the role of the
-c     SimpFI and SimpIF attributes will be interchanged.
-f     - The "forward" and "inverse" transformations referred to are those
-f     defined when the MathMap is created (corresponding to the FWD and
-f     INV arguments of its constructor function). If the MathMap is
-f     inverted (i.e. its Invert attribute is non-zero), then the role of the
-f     SimpFI and SimpIF attributes will be interchanged.
-*att--
-*/
-/* Clear the SimpIF value by setting it to -INT_MAX. */
-astMAKE_CLEAR(MathMap,SimpIF,simp_if,-INT_MAX)
-
-/* Supply a default of 0 if no SimpIF value has been set. */
-astMAKE_GET(MathMap,SimpIF,int,0,( ( this->simp_if != -INT_MAX ) ?
-                                   this->simp_if : 0 ))
-
-/* Set a SimpIF value of 1 if any non-zero value is supplied. */
-astMAKE_SET(MathMap,SimpIF,int,simp_if,( value != 0 ))
-
-/* The SimpIF value is set if it is not -INT_MAX. */
-astMAKE_TEST(MathMap,SimpIF,( this->simp_if != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for MathMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for MathMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstMathMap *in;               /* Pointer to input MathMap */
-   AstMathMap *out;              /* Pointer to output MathMap */
-   int ifun;                     /* Loop counter for functions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output MathMaps. */
-   in = (AstMathMap *) objin;
-   out = (AstMathMap *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output MathMap. */
-   out->fwdfun = NULL;
-   out->invfun = NULL;
-   out->fwdcode = NULL;
-   out->invcode = NULL;
-   out->fwdcon = NULL;
-   out->invcon = NULL;
-
-/* Now allocate and initialise each of the output pointer arrays
-   required. */
-   if ( in->fwdfun ) {
-      MALLOC_POINTER_ARRAY( out->fwdfun, char *, out->nfwd )
-   }
-   if ( in->invfun ) {
-      MALLOC_POINTER_ARRAY( out->invfun, char *, out->ninv )
-   }
-   if ( in->fwdcode ) {
-      MALLOC_POINTER_ARRAY( out->fwdcode, int *, out->nfwd )
-   }
-   if ( in->invcode ) {
-      MALLOC_POINTER_ARRAY( out->invcode, int *, out->ninv )
-   }
-   if ( in->fwdcon ) {
-      MALLOC_POINTER_ARRAY( out->fwdcon, double *, out->nfwd )
-   }
-   if ( in->invcon ) {
-      MALLOC_POINTER_ARRAY( out->invcon, double *, out->ninv )
-   }
-
-/* If OK, loop to make copies of the data (where available) associated
-   with each forward transformation function, storing pointers to the
-   copy in the output pointer arrays allocated above. */
-   if ( astOK ) {
-      for ( ifun = 0; ifun < out->nfwd; ifun++ ) {
-         if ( in->fwdfun && in->fwdfun[ ifun ] ) {
-            out->fwdfun[ ifun ] = astStore( NULL, in->fwdfun[ ifun ],
-                                            astSizeOf( in->fwdfun[ ifun ] ) );
-         }
-         if ( in->fwdcode && in->fwdcode[ ifun ] ) {
-            out->fwdcode[ ifun ] = astStore( NULL, in->fwdcode[ ifun ],
-                                            astSizeOf( in->fwdcode[ ifun ] ) );
-         }
-         if ( in->fwdcon && in->fwdcon[ ifun ] ) {
-            out->fwdcon[ ifun ] = astStore( NULL, in->fwdcon[ ifun ],
-                                            astSizeOf( in->fwdcon[ ifun ] ) );
-         }
-         if ( !astOK ) break;
-      }
-   }
-
-/* Repeat this process for the inverse transformation functions. */
-   if ( astOK ) {
-      for ( ifun = 0; ifun < out->ninv; ifun++ ) {
-         if ( in->invfun && in->invfun[ ifun ] ) {
-            out->invfun[ ifun ] = astStore( NULL, in->invfun[ ifun ],
-                                            astSizeOf( in->invfun[ ifun ] ) );
-         }
-         if ( in->invcode && in->invcode[ ifun ] ) {
-            out->invcode[ ifun ] = astStore( NULL, in->invcode[ ifun ],
-                                            astSizeOf( in->invcode[ ifun ] ) );
-         }
-         if ( in->invcon && in->invcon[ ifun ] ) {
-            out->invcon[ ifun ] = astStore( NULL, in->invcon[ ifun ],
-                                            astSizeOf( in->invcon[ ifun ] ) );
-         }
-         if ( !astOK ) break;
-      }
-   }
-
-/* If an error occurred, clean up by freeing all output memory
-   allocated above. */
-   if ( !astOK ) {
-      FREE_POINTER_ARRAY( out->fwdfun, out->nfwd )
-      FREE_POINTER_ARRAY( out->invfun, out->ninv )
-      FREE_POINTER_ARRAY( out->fwdcode, out->nfwd )
-      FREE_POINTER_ARRAY( out->invcode, out->ninv )
-      FREE_POINTER_ARRAY( out->fwdcon, out->nfwd )
-      FREE_POINTER_ARRAY( out->invcon, out->ninv )
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for MathMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for MathMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstMathMap *this;             /* Pointer to MathMap */
-
-/* Obtain a pointer to the MathMap structure. */
-   this = (AstMathMap *) obj;
-
-/* Free all memory allocated by the MathMap. */
-   FREE_POINTER_ARRAY( this->fwdfun, this->nfwd )
-   FREE_POINTER_ARRAY( this->invfun, this->ninv )
-   FREE_POINTER_ARRAY( this->fwdcode, this->nfwd )
-   FREE_POINTER_ARRAY( this->invcode, this->ninv )
-   FREE_POINTER_ARRAY( this->fwdcon, this->nfwd )
-   FREE_POINTER_ARRAY( this->invcon, this->ninv )
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for MathMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the MathMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the MathMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150          /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstMathMap *this;             /* Pointer to the MathMap structure */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword strings */
-   int ifun;                     /* Loop counter for functions */
-   int invert;                   /* MathMap inverted? */
-   int ival;                     /* Integer attribute value */
-   int nin;                      /* True number of input coordinates */
-   int nout;                     /* True number of output coordinates */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the MathMap structure. */
-   this = (AstMathMap *) this_object;
-
-/* Determine if the MathMap is inverted and obtain the "true" number
-   of input and output coordinates by un-doing the effects of any
-   inversion. */
-   invert = astGetInvert( this );
-   nin = !invert ? astGetNin( this ) : astGetNout( this );
-   nout = !invert ? astGetNout( this ) : astGetNin( this );
-
-/* Write out values representing the instance variables for the
-   MathMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Number of forward transformation functions. */
-/* ------------------------------------------- */   
-/* We regard this value as set if it differs from the number of output
-   coordinates for the MathMap. */
-   set = ( this->nfwd != nout );
-   astWriteInt( channel, "Nfwd", set, 0, this->nfwd,
-                "Number of forward transformation functions" );
-
-/* Forward transformation functions. */
-/* --------------------------------- */
-/* Loop to write out each forward transformation function, generating
-   a suitable keyword and comment for each one. */
-   for ( ifun = 0; ifun < this->nfwd; ifun++ ) {
-      (void) sprintf( key, "Fwd%d", ifun + 1 );
-      (void) sprintf( comment, "Forward function %d", ifun + 1 );
-      astWriteString( channel, key, 1, 1, this->fwdfun[ ifun ], comment );
-   }
-
-/* Number of inverse transformation functions. */
-/* ------------------------------------------- */   
-/* We regard this value as set if it differs from the number of input
-   coordinates for the MathMap. */
-   set = ( this->ninv != nin );
-   astWriteInt( channel, "Ninv", set, 0, this->ninv,
-                "Number of inverse transformation functions" );
-
-/* Inverse transformation functions. */
-/* --------------------------------- */
-/* Similarly, loop to write out each inverse transformation
-   function. */
-   for ( ifun = 0; ifun < this->ninv; ifun++ ) {
-      (void) sprintf( key, "Inv%d", ifun + 1 );
-      (void) sprintf( comment, "Inverse function %d", ifun + 1 );
-      astWriteString( channel, key, 1, 1, this->invfun[ ifun ], comment );
-   }
-
-/* SimpFI. */
-/* ------- */
-/* Write out the forward-inverse simplification flag. */
-   set = TestSimpFI( this, status );
-   ival = set ? GetSimpFI( this, status ) : astGetSimpFI( this );
-   astWriteInt( channel, "SimpFI", set, 0, ival,
-                ival ? "Forward-inverse pairs may simplify" :
-                       "Forward-inverse pairs do not simplify" );
-
-/* SimpIF. */
-/* ------- */
-/* Write out the inverse-forward simplification flag. */
-   set = TestSimpIF( this, status );
-   ival = set ? GetSimpIF( this, status ) : astGetSimpIF( this );
-   astWriteInt( channel, "SimpIF", set, 0, ival,
-                ival ? "Inverse-forward pairs may simplify" :
-                       "Inverse-forward pairs do not simplify" );
-
-/* Seed. */
-/* ----- */
-/* Write out any random number seed value which is set. Prefix this with
-   a separate flag which indicates if the seed has been set. */
-   set = TestSeed( this, status );
-   ival = set ? GetSeed( this, status ) : astGetSeed( this );
-   astWriteInt( channel, "Seeded", set, 0, set,
-                set? "Explicit random number seed set" :
-                     "No random number seed set" );
-   astWriteInt( channel, "Seed", set, 0, ival,
-                set ? "Random number seed value" :
-                      "Default random number seed used" );
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAMathMap and astCheckMathMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(MathMap,Mapping)
-astMAKE_CHECK(MathMap)
-
-AstMathMap *astMathMap_( int nin, int nout,
-                         int nfwd, const char *fwd[],
-                         int ninv, const char *inv[],
-                         const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astMathMap
-
-*  Purpose:
-*     Create a MathMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     AstMathMap *astMathMap( int nin, int nout,
-*                             int nfwd, const char *fwd[],
-*                             int ninv, const char *inv[],
-*                             const char *options, ..., int *status )
-
-*  Class Membership:
-*     MathMap constructor.
-
-*  Description:
-*     This function creates a new MathMap and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     nin
-*        Number of input variables for the MathMap.
-*     nout
-*        Number of output variables for the MathMap.
-*     nfwd
-*        The number of forward transformation functions being supplied.
-*        This must be at least equal to "nout".
-*     fwd
-*        Pointer to an array, with "nfwd" elements, of pointers to null
-*        terminated strings which contain each of the forward transformation
-*        functions.
-*     ninv
-*        The number of inverse transformation functions being supplied.
-*        This must be at least equal to "nin".
-*     inv
-*        Pointer to an array, with "ninv" elements, of pointers to null
-*        terminated strings which contain each of the inverse transformation
-*        functions.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new MathMap. The syntax used is the same as
-*        for the astSet method and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of arguments may follow it in order to
-*        supply values to be substituted for these specifiers. The
-*        rules for supplying these are identical to those for the
-*        astSet method (and for the C "printf" function).
-
-*  Returned Value:
-*     A pointer to the new MathMap.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic MathMap constructor which is
-*     available via the protected interface to the MathMap class.  A
-*     public interface is provided by the astMathMapId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMathMap *new;              /* Pointer to new MathMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the MathMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitMathMap( NULL, sizeof( AstMathMap ), !class_init, &class_vtab,
-                         "MathMap", nin, nout, nfwd, fwd, ninv, inv );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new MathMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new MathMap. */
-   return new;
-}
-
-AstMathMap *astMathMapId_( int nin, int nout,
-                           int nfwd, const char *fwd[],
-                           int ninv, const char *inv[],
-                           const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astMathMap
-f     AST_MATHMAP
-
-*  Purpose:
-*     Create a MathMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "mathmap.h"
-c     AstMathMap *astMathMap( int nin, int nout,
-c                             int nfwd, const char *fwd[],
-c                             int ninv, const char *inv[],
-c                             const char *options, ... )
-f     RESULT = AST_MATHMAP( NIN, NOUT, NFWD, FWD, NINV, INV, OPTIONS, STATUS )
-
-*  Class Membership:
-*     MathMap constructor.
-
-*  Description:
-*     This function creates a new MathMap and optionally initialises its
-*     attributes.
-*
-c     A MathMap is a Mapping which allows you to specify a set of forward
-c     and/or inverse transformation functions using arithmetic operations
-c     and mathematical functions similar to those available in C. The
-c     MathMap interprets these functions at run-time, whenever its forward
-c     or inverse transformation is required. Because the functions are not
-c     compiled in the normal sense (unlike an IntraMap), they may be used to
-c     describe coordinate transformations in a transportable manner. A
-c     MathMap therefore provides a flexible way of defining new types of
-c     Mapping whose descriptions may be stored as part of a dataset and
-c     interpreted by other programs.
-f     A MathMap is a Mapping which allows you to specify a set of forward
-f     and/or inverse transformation functions using arithmetic operations
-f     and mathematical functions similar to those available in Fortran. The
-f     MathMap interprets these functions at run-time, whenever its forward
-f     or inverse transformation is required. Because the functions are not
-f     compiled in the normal sense (unlike an IntraMap), they may be used to
-f     describe coordinate transformations in a transportable manner. A
-f     MathMap therefore provides a flexible way of defining new types of
-f     Mapping whose descriptions may be stored as part of a dataset and
-f     interpreted by other programs.
-
-*  Parameters:
-c     nin
-f     NIN = INTEGER
-*        Number of input variables for the MathMap. This determines the
-*        value of its Nin attribute.
-c     nout
-f     NOUT = INTEGER
-*        Number of output variables for the MathMap. This determines the
-*        value of its Nout attribute.
-c     nfwd
-f     NFWD = INTEGER
-*        The number of forward transformation functions being supplied.
-c        This must be at least equal to "nout", but may be increased to
-f        This must be at least equal to NOUT, but may be increased to
-*        accommodate any additional expressions which define intermediate
-*        variables for the forward transformation (see the "Calculating
-*        Intermediate Values" section below).
-c     fwd
-f     FWD = CHARACTER * ( * )( NFWD )
-c        An array (with "nfwd" elements) of pointers to null terminated strings
-c        which contain the expressions defining the forward transformation.
-f        An array which contains the expressions defining the forward
-f        transformation.
-*        The syntax of these expressions is described below.
-c     ninv
-f     NINV = INTEGER
-*        The number of inverse transformation functions being supplied.
-c        This must be at least equal to "nin", but may be increased to
-f        This must be at least equal to NIN, but may be increased to
-*        accommodate any additional expressions which define intermediate
-*        variables for the inverse transformation (see the "Calculating
-*        Intermediate Values" section below).
-c     inv
-f     INV = CHARACTER * ( * )( NINV )
-c        An array (with "ninv" elements) of pointers to null terminated strings
-c        which contain the expressions defining the inverse transformation.
-f        An array which contains the expressions defining the inverse
-f        transformation.
-*        The syntax of these expressions is described below.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new MathMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new MathMap. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMathMap()
-f     AST_MATHMAP = INTEGER
-*        A pointer to the new MathMap.
-
-*  Defining Transformation Functions:
-c     A MathMap's transformation functions are supplied as a set of
-c     expressions in an array of character strings. Normally you would
-c     supply the same number of expressions for the forward transformation,
-c     via the "fwd" parameter, as there are output variables (given by the
-c     MathMap's Nout attribute). For instance, if Nout is 2 you might use:
-c     - "r = sqrt( x * x + y * y )"
-c     - "theta = atan2( y, x )"
-c
-c     which defines a transformation from Cartesian to polar
-c     coordinates. Here, the variables that appear on the left of each
-c     expression ("r" and "theta") provide names for the output variables
-c     and those that appear on the right ("x" and "y") are references to
-c     input variables.
-f     A MathMap's transformation functions are supplied as a set of
-f     expressions in an array of character strings. Normally you would
-f     supply the same number of expressions for the forward transformation,
-f     via the FWD argument, as there are output variables (given by the
-f     MathMap's Nout attribute). For instance, if Nout is 2 you might use:
-f     - 'R = SQRT( X * X + Y * Y )'
-f     - 'THETA = ATAN2( Y, X )'
-f
-f     which defines a transformation from Cartesian to polar
-f     coordinates. Here, the variables that appear on the left of each
-f     expression (R and THETA) provide names for the output variables and
-f     those that appear on the right (X and Y) are references to input
-f     variables.
-*
-c     To complement this, you must also supply expressions for the inverse
-c     transformation via the "inv" parameter.  In this case, the number of
-c     expressions given would normally match the number of MathMap input
-c     coordinates (given by the Nin attribute).  If Nin is 2, you might use:
-c     - "x = r * cos( theta )"
-c     - "y = r * sin( theta )"
-c
-c     which expresses the transformation from polar to Cartesian
-c     coordinates. Note that here the input variables ("x" and "y") are
-c     named on the left of each expression, and the output variables ("r"
-c     and "theta") are referenced on the right.
-f     To complement this, you must also supply expressions for the inverse
-f     transformation via the INV argument.  In this case, the number of
-f     expressions given would normally match the number of MathMap input
-f     coordinates (given by the Nin attribute).  If Nin is 2, you might use:
-f     - 'X = R * COS( THETA )'
-f     - 'Y = R * SIN( THETA )'
-f
-f     which expresses the transformation from polar to Cartesian
-f     coordinates. Note that here the input variables (X and Y) are named on
-f     the left of each expression, and the output variables (R and THETA)
-f     are referenced on the right.
-*
-*     Normally, you cannot refer to a variable on the right of an expression
-*     unless it is named on the left of an expression in the complementary
-*     set of functions. Therefore both sets of functions (forward and
-*     inverse) must be formulated using the same consistent set of variable
-*     names. This means that if you wish to leave one of the transformations
-*     undefined, you must supply dummy expressions which simply name each of
-*     the output (or input) variables.  For example, you might use:
-c     - "x"
-c     - "y"
-f     - 'X'
-f     - 'Y'
-*
-*     for the inverse transformation above, which serves to name the input
-*     variables but without defining an inverse transformation.
-
-*  Calculating Intermediate Values:
-c     It is sometimes useful to calculate intermediate values and then to
-c     use these in the final expressions for the output (or input)
-c     variables. This may be done by supplying additional expressions for
-c     the forward (or inverse) transformation functions. For instance, the
-c     following array of five expressions describes 2-dimensional pin-cushion
-c     distortion:
-c     - "r = sqrt( xin * xin + yin * yin )"
-c     - "rout = r * ( 1 + 0.1 * r * r )"
-c     - "theta = atan2( yin, xin )"
-c     - "xout = rout * cos( theta )"
-c     - "yout = rout * sin( theta )"
-f     It is sometimes useful to calculate intermediate values and then to
-f     use these in the final expressions for the output (or input)
-f     variables. This may be done by supplying additional expressions for
-f     the forward (or inverse) transformation functions. For instance, the
-f     following array of five expressions describes 2-dimensional pin-cushion
-f     distortion:
-f     - 'R = SQRT( XIN * XIN + YIN * YIN )'
-f     - 'ROUT = R * ( 1 + 0.1 * R * R )'
-f     - 'THETA = ATAN2( YIN, XIN )',
-f     - 'XOUT = ROUT * COS( THETA )'
-f     - 'YOUT = ROUT * SIN( THETA )'
-*
-c     Here, we first calculate three intermediate results ("r", "rout"
-c     and "theta") and then use these to calculate the final results ("xout"
-c     and "yout"). The MathMap knows that only the final two results
-c     constitute values for the output variables because its Nout attribute
-c     is set to 2. You may define as many intermediate variables in this
-c     way as you choose. Having defined a variable, you may then refer to it
-c     on the right of any subsequent expressions.
-f     Here, we first calculate three intermediate results (R, ROUT
-f     and THETA) and then use these to calculate the final results (XOUT
-f     and YOUT). The MathMap knows that only the final two results
-f     constitute values for the output variables because its Nout attribute
-f     is set to 2. You may define as many intermediate variables in this
-f     way as you choose. Having defined a variable, you may then refer to it
-f     on the right of any subsequent expressions.
-*
-c     Note that when defining the inverse transformation you may only refer
-c     to the output variables "xout" and "yout".  The intermediate variables
-c     "r", "rout" and "theta" (above) are private to the forward
-c     transformation and may not be referenced by the inverse
-c     transformation. The inverse transformation may, however, define its
-c     own private intermediate variables.
-f     Note that when defining the inverse transformation you may only refer
-f     to the output variables XOUT and YOUT. The intermediate variables R,
-f     ROUT and THETA (above) are private to the forward transformation and
-f     may not be referenced by the inverse transformation. The inverse
-f     transformation may, however, define its own private intermediate
-f     variables.
-
-*  Expression Syntax:
-c     The expressions given for the forward and inverse transformations
-c     closely follow the syntax of the C programming language (with some
-c     extensions for compatibility with Fortran). They may contain
-c     references to variables and literal constants, together with
-c     arithmetic, boolean, relational and bitwise operators, and function
-c     invocations. A set of symbolic constants is also available. Each of
-c     these is described in detail below. Parentheses may be used to
-c     over-ride the normal order of evaluation. There is no built-in limit
-c     to the length of expressions and they are insensitive to case or the
-c     presence of additional white space.
-f     The expressions given for the forward and inverse transformations
-f     closely follow the syntax of Fortran (with some extensions for
-f     compatibility with the C language). They may contain references to
-f     variables and literal constants, together with arithmetic, logical,
-f     relational and bitwise operators, and function invocations. A set of
-f     symbolic constants is also available. Each of these is described in
-f     detail below. Parentheses may be used to over-ride the normal order of
-f     evaluation. There is no built-in limit to the length of expressions
-f     and they are insensitive to case or the presence of additional white
-f     space.
-
-*  Variables:
-*     Variable names must begin with an alphabetic character and may contain
-*     only alphabetic characters, digits, and the underscore character
-*     "_". There is no built-in limit to the length of variable names.
-
-*  Literal Constants:
-c     Literal constants, such as "0", "1", "0.007" or "2.505e-16" may appear
-c     in expressions, with the decimal point and exponent being optional (a
-c     "D" may also be used as an exponent character for compatibility with
-c     Fortran). A unary minus "-" may be used as a prefix.
-f     Literal constants, such as "0", "1", "0.007" or "2.505E-16" may appear
-f     in expressions, with the decimal point and exponent being optional (a
-f     "D" may also be used as an exponent character). A unary minus "-" may
-f     be used as a prefix.
-
-*  Arithmetic Precision:
-*     All arithmetic is floating point, performed in double precision.
-
-*  Propagation of Missing Data:
-*     Unless indicated otherwise, if any argument of a function or operator
-*     has the value AST__BAD (indicating missing data), then the result of
-*     that function or operation is also AST__BAD, so that such values are
-*     propagated automatically through all operations performed by MathMap
-*     transformations.  The special value AST__BAD can be represented in
-*     expressions by the symbolic constant "<bad>".
-*
-*     A <bad> result (i.e. equal to AST__BAD) is also produced in response
-*     to any numerical error (such as division by zero or numerical
-*     overflow), or if an invalid argument value is provided to a function
-*     or operator.
-
-*  Arithmetic Operators:
-*     The following arithmetic operators are available:
-c     - x1 + x2: Sum of "x1" and "x2".
-f     - X1 + X2: Sum of X1 and X2.
-c     - x1 - x2: Difference of "x1" and "x2".
-f     - X1 - X2: Difference of X1 and X2.
-c     - x1 * x2: Product of "x1" and "x1".
-f     - X1 * X2: Product of X1 and X2.
-c     - x1 / x2: Ratio of "x1" and "x2".
-f     - X1 / X2: Ratio of X1 and X2.
-c     - x1 ** x2: "x1" raised to the power of "x2".
-f     - X1 ** X2: X1 raised to the power of X2.
-c     - + x: Unary plus, has no effect on its argument.
-f     - + X: Unary plus, has no effect on its argument.
-c     - - x: Unary minus, negates its argument.
-f     - - X: Unary minus, negates its argument.
-
-c  Boolean Operators:
-f  Logical Operators:
-c     Boolean values are represented using zero to indicate false and
-c     non-zero to indicate true. In addition, the value AST__BAD is taken to
-c     mean "unknown". The values returned by boolean operators may therefore
-c     be 0, 1 or AST__BAD. Where appropriate, "tri-state" logic is
-c     implemented. For example, "a||b" may evaluate to 1 if "a" is non-zero,
-c     even if "b" has the value AST__BAD. This is because the result of the
-c     operation would not be affected by the value of "b", so long as "a" is
-c     non-zero.
-f     Logical values are represented using zero to indicate .FALSE. and
-f     non-zero to indicate .TRUE.. In addition, the value AST__BAD is taken to
-f     mean "unknown". The values returned by logical operators may therefore
-f     be 0, 1 or AST__BAD. Where appropriate, "tri-state" logic is
-f     implemented. For example, A.OR.B may evaluate to 1 if A is non-zero,
-f     even if B has the value AST__BAD. This is because the result of the
-f     operation would not be affected by the value of B, so long as A is
-f     non-zero.
-*
-c     The following boolean operators are available:
-f     The following logical operators are available:
-c     - x1 && x2: Boolean AND between "x1" and "x2", returning 1 if both "x1"
-c     and "x2" are non-zero, and 0 otherwise. This operator implements
-c     tri-state logic. (The synonym ".and." is also provided for compatibility
-c     with Fortran.)
-f     - X1 .AND. X2: Logical AND between X1 and X2, returning 1 if both X1
-f     and X2 are non-zero, and 0 otherwise. This operator implements
-f     tri-state logic. (The synonym "&&" is also provided for compatibility
-f     with C.)
-c     - x1 || x2: Boolean OR between "x1" and "x2", returning 1 if either "x1"
-c     or "x2" are non-zero, and 0 otherwise. This operator implements
-c     tri-state logic. (The synonym ".or." is also provided for compatibility
-c     with Fortran.)
-f     - X1 .OR. X2: Logical OR between X1 and X2, returning 1 if either X1
-f     or X2 are non-zero, and 0 otherwise. This operator implements
-f     tri-state logic. (The synonym "||" is also provided for compatibility
-f     with C.)
-c     - x1 ^^ x2: Boolean exclusive OR (XOR) between "x1" and "x2", returning
-c     1 if exactly one of "x1" and "x2" is non-zero, and 0 otherwise. Tri-state
-c     logic is not used with this operator. (The synonyms ".neqv." and ".xor."
-c     are also provided for compatibility with Fortran, although the second
-c     of these is not standard.)
-f     - X1 .NEQV. X2: Logical exclusive OR (XOR) between X1 and X2,
-f     returning 1 if exactly one of X1 and X2 is non-zero, and 0
-f     otherwise. Tri-state logic is not used with this operator. (The
-f     synonym ".XOR." is also provided, although this is not standard
-f     Fortran. In addition, the C-like synonym "^^" may be used, although
-f     this is also not standard.)
-c     - x1 .eqv. x2: This is provided only for compatibility with Fortran
-c     and tests whether the boolean states of "x1" and "x2" (i.e. true/false)
-c     are equal. It is the negative of the exclusive OR (XOR) function.
-c     Tri-state logic is not used with this operator.
-f     - X1 .EQV. X2: Tests whether the logical states of X1 and X2
-f     (i.e. .TRUE./.FALSE.) are equal. It is the negative of the exclusive OR
-f     (XOR) function.  Tri-state logic is not used with this operator.
-c     - ! x: Boolean unary NOT operation, returning 1 if "x" is zero, and
-c     0 otherwise. (The synonym ".not." is also provided for compatibility
-c     with Fortran.)
-f     - .NOT. X: Logical unary NOT operation, returning 1 if X is zero, and
-f     0 otherwise. (The synonym "!" is also provided for compatibility with
-f     C.)
-
-*  Relational Operators:
-c     Relational operators return the boolean result (0 or 1) of comparing
-c     the values of two floating point values for equality or inequality. The
-c     value AST__BAD may also be returned if either argument is <bad>.
-f     Relational operators return the logical result (0 or 1) of comparing
-f     the values of two floating point values for equality or inequality. The
-f     value AST__BAD may also be returned if either argument is <bad>.
-*
-*     The following relational operators are available:
-c     - x1 == x2: Tests whether "x1" equals "x1". (The synonym ".eq." is
-c     also provided for compatibility with Fortran.)
-f     - X1 .EQ. X2: Tests whether X1 equals X2. (The synonym "==" is also
-f     provided for compatibility with C.)
-c     - x1 != x2: Tests whether "x1" is unequal to "x2". (The synonym ".ne."
-c     is also provided for compatibility with Fortran.)
-f     - X1 .NE. X2: Tests whether X1 is unequal to X2. (The synonym "!=" is
-f     also provided for compatibility with C.)
-c     - x1 > x2: Tests whether "x1" is greater than "x2". (The synonym
-c     ".gt." is also provided for compatibility with Fortran.)
-f     - X1 .GT. X2: Tests whether X1 is greater than X2. (The synonym ">" is
-f     also provided for compatibility with C.)
-c     - x1 >= x2: Tests whether "x1" is greater than or equal to "x2". (The
-c     synonym ".ge."  is also provided for compatibility with Fortran.)
-f     - X1 .GE. X2: Tests whether X1 is greater than or equal to X2. (The
-f     synonym ">=" is also provided for compatibility with C.)
-c     - x1 < x2: Tests whether "x1" is less than "x2". (The synonym ".lt."
-c     is also provided for compatibility with Fortran.)
-f     - X1 .LT. X2: Tests whether X1 is less than X2. (The synonym "<" is also
-f     provided for compatibility with C.)
-c     - x1 <= x2: Tests whether "x1" is less than or equal to "x2". (The
-c     synonym ".le." is also provided for compatibility with Fortran.)
-f     - X1 .LE. X2: Tests whether X1 is less than or equal to X2. (The synonym
-f     "<=" is also provided for compatibility with C.)
-*
-c     Note that relational operators cannot usefully be used to compare
-c     values with the <bad> value (representing missing data), because the
-c     result is always <bad>. The isbad() function should be used instead.
-f     Note that relational operators cannot usefully be used to compare
-f     values with the <bad> value (representing missing data), because the
-f     result is always <bad>. The ISBAD() function should be used instead.
-f
-f     Note, also, that because logical operators can operate on floating
-f     point values, care must be taken to use parentheses in some cases
-f     where they would not normally be required in Fortran. For example,
-f     the expresssion:
-f     - .NOT. A .EQ. B
-f
-f     must be written:
-f     - .NOT. ( A .EQ. B )
-f
-f     to prevent the .NOT. operator from associating with the variable A.
-
-*  Bitwise Operators:
-c     The bitwise operators provided by C are often useful when operating on
-c     raw data (e.g. from instruments), so they are also provided for use in
-c     MathMap expressions. In this case, however, the values on which they
-c     operate are floating point values rather than pure integers. In order
-c     to produce results which match the pure integer case, the operands are
-c     regarded as fixed point binary numbers (i.e. with the binary
-c     equivalent of a decimal point) with negative numbers represented using
-c     twos-complement notation. For integer values, the resulting bit
-c     pattern corresponds to that of the equivalent signed integer (digits
-c     to the right of the point being zero). Operations on the bits
-c     representing the fractional part are also possible, however.
-f     Bitwise operators are often useful when operating on raw data
-f     (e.g. from instruments), so they are provided for use in MathMap
-f     expressions. In this case, however, the values on which they operate
-f     are floating point values rather than the more usual pure integers. In
-f     order to produce results which match the pure integer case, the
-f     operands are regarded as fixed point binary numbers (i.e. with the
-f     binary equivalent of a decimal point) with negative numbers
-f     represented using twos-complement notation. For integer values, the
-f     resulting bit pattern corresponds to that of the equivalent signed
-f     integer (digits to the right of the point being zero). Operations on
-f     the bits representing the fractional part are also possible, however.
-*
-*     The following bitwise operators are available:
-c     - x1 >> x2: Rightward bit shift. The integer value of "x2" is taken
-c     (rounding towards zero) and the bits representing "x1" are then
-c     shifted this number of places to the right (or to the left if the
-c     number of places is negative). This is equivalent to dividing "x1" by
-c     the corresponding power of 2.
-f     - X1 >> X2: Rightward bit shift. The integer value of X2 is taken
-f     (rounding towards zero) and the bits representing X1 are then
-f     shifted this number of places to the right (or to the left if the
-f     number of places is negative). This is equivalent to dividing X1 by
-f     the corresponding power of 2.
-c     - x1 << x2: Leftward bit shift. The integer value of "x2" is taken
-c     (rounding towards zero), and the bits representing "x1" are then
-c     shifted this number of places to the left (or to the right if the
-c     number of places is negative). This is equivalent to multiplying "x1"
-c     by the corresponding power of 2.
-f     - X1 << X2: Leftward bit shift. The integer value of X2 is taken
-f     (rounding towards zero), and the bits representing X1 are then
-f     shifted this number of places to the left (or to the right if the
-f     number of places is negative). This is equivalent to multiplying X1
-f     by the corresponding power of 2.
-c     - x1 & x2: Bitwise AND between the bits of "x1" and those of "x2"
-c     (equivalent to a boolean AND applied at each bit position in turn).
-f     - X1 & X2: Bitwise AND between the bits of X1 and those of X2
-f     (equivalent to a logical AND applied at each bit position in turn).
-c     - x1 | x2: Bitwise OR between the bits of "x1" and those of "x2"
-c     (equivalent to a boolean OR applied at each bit position in turn).
-f     - X1 | X2: Bitwise OR between the bits of X1 and those of X2
-f     (equivalent to a logical OR applied at each bit position in turn).
-c     - x1 ^ x2: Bitwise exclusive OR (XOR) between the bits of "x1" and
-c     those of "x2" (equivalent to a boolean XOR applied at each bit
-c     position in turn).
-f     - X1 ^ X2: Bitwise exclusive OR (XOR) between the bits of X1 and
-f     those of X2 (equivalent to a logical XOR applied at each bit
-f     position in turn).
-*
-c     Note that no bit inversion operator ("~" in C) is provided. This is
-c     because inverting the bits of a twos-complement fixed point binary
-c     number is equivalent to simply negating it. This differs from the
-c     pure integer case because bits to the right of the binary point are
-c     also inverted. To invert only those bits to the left of the binary
-c     point, use a bitwise exclusive OR with the value -1 (i.e. "x^-1").
-f     Note that no bit inversion operator is provided. This is
-f     because inverting the bits of a twos-complement fixed point binary
-f     number is equivalent to simply negating it. This differs from the
-f     pure integer case because bits to the right of the binary point are
-f     also inverted. To invert only those bits to the left of the binary
-f     point, use a bitwise exclusive OR with the value -1 (i.e. X^-1).
-
-*  Functions:
-*     The following functions are available:
-c     - abs(x): Absolute value of "x" (sign removal), same as fabs(x).
-f     - ABS(X): Absolute value of X (sign removal), same as FABS(X).
-c     - acos(x): Inverse cosine of "x", in radians.
-f     - ACOS(X): Inverse cosine of X, in radians.
-c     - acosd(x): Inverse cosine of "x", in degrees.
-f     - ACOSD(X): Inverse cosine of X, in degrees.
-c     - acosh(x): Inverse hyperbolic cosine of "x".
-f     - ACOSH(X): Inverse hyperbolic cosine of X.
-c     - acoth(x): Inverse hyperbolic cotangent of "x".
-f     - ACOTH(X): Inverse hyperbolic cotangent of X.
-c     - acsch(x): Inverse hyperbolic cosecant of "x".
-f     - ACSCH(X): Inverse hyperbolic cosecant of X.
-c     - aint(x): Integer part of "x" (round towards zero), same as int(x).
-f     - AINT(X): Integer part of X (round towards zero), same as INT(X).
-c     - asech(x): Inverse hyperbolic secant of "x".
-f     - ASECH(X): Inverse hyperbolic secant of X.
-c     - asin(x): Inverse sine of "x", in radians.
-f     - ASIN(X): Inverse sine of X, in radians.
-c     - asind(x): Inverse sine of "x", in degrees.
-f     - ASIND(X): Inverse sine of X, in degrees.
-c     - asinh(x): Inverse hyperbolic sine of "x".
-f     - ASINH(X): Inverse hyperbolic sine of X.
-c     - atan(x): Inverse tangent of "x", in radians.
-f     - ATAN(X): Inverse tangent of X, in radians.
-c     - atand(x): Inverse tangent of "x", in degrees.
-f     - ATAND(X): Inverse tangent of X, in degrees.
-c     - atanh(x): Inverse hyperbolic tangent of "x".
-f     - ATANH(X): Inverse hyperbolic tangent of X.
-c     - atan2(x1, x2): Inverse tangent of "x1/x2", in radians.
-f     - ATAN2(X1, X2): Inverse tangent of X1/X2, in radians.
-c     - atan2d(x1, x2): Inverse tangent of "x1/x2", in degrees.
-f     - ATAN2D(X1, X2): Inverse tangent of X1/X2, in degrees.
-c     - ceil(x): Smallest integer value not less then "x" (round towards
-c       plus infinity).
-f     - CEIL(X): Smallest integer value not less then X (round towards
-f       plus infinity).
-c     - cos(x): Cosine of "x" in radians.
-f     - COS(X): Cosine of X in radians.
-c     - cosd(x): Cosine of "x" in degrees.
-f     - COSD(X): Cosine of X in degrees.
-c     - cosh(x): Hyperbolic cosine of "x".
-f     - COSH(X): Hyperbolic cosine of X.
-c     - coth(x): Hyperbolic cotangent of "x".
-f     - COTH(X): Hyperbolic cotangent of X.
-c     - csch(x): Hyperbolic cosecant of "x".
-f     - CSCH(X): Hyperbolic cosecant of X.
-c     - dim(x1, x2): Returns "x1-x2" if "x1" is greater than "x2", otherwise 0.
-f     - DIM(X1, X2): Returns X1-X2 if X1 is greater than X2, otherwise 0.
-c     - exp(x): Exponential function of "x".
-f     - EXP(X): Exponential function of X.
-c     - fabs(x): Absolute value of "x" (sign removal), same as abs(x).
-f     - FABS(X): Absolute value of X (sign removal), same as ABS(X).
-c     - floor(x): Largest integer not greater than "x" (round towards
-c       minus infinity).
-f     - FLOOR(X): Largest integer not greater than X (round towards
-f       minus infinity).
-c     - fmod(x1, x2): Remainder when "x1" is divided by "x2", same as
-c       mod(x1, x2).
-f     - FMOD(X1, X2): Remainder when X1 is divided by X2, same as
-f       MOD(X1, X2).
-c     - gauss(x1, x2): Random sample from a Gaussian distribution with mean
-c       "x1" and standard deviation "x2".
-f     - GAUSS(X1, X2): Random sample from a Gaussian distribution with mean
-f       X1 and standard deviation X2.
-c     - int(x): Integer part of "x" (round towards zero), same as aint(x).
-f     - INT(X): Integer part of X (round towards zero), same as AINT(X).
-c     - isbad(x): Returns 1 if "x" has the <bad> value (AST__BAD), otherwise 0.
-f     - ISBAD(X): Returns 1 if X has the <bad> value (AST__BAD), otherwise 0.
-c     - log(x): Natural logarithm of "x".
-f     - LOG(X): Natural logarithm of X.
-c     - log10(x): Logarithm of "x" to base 10.
-f     - LOG10(X): Logarithm of X to base 10.
-c     - max(x1, x2, ...): Maximum of two or more values.
-f     - MAX(X1, X2, ...): Maximum of two or more values.
-c     - min(x1, x2, ...): Minimum of two or more values.
-f     - MIN(X1, X2, ...): Minimum of two or more values.
-c     - mod(x1, x2): Remainder when "x1" is divided by "x2", same as
-c       fmod(x1, x2).
-f     - MOD(X1, X2): Remainder when X1 is divided by X2, same as
-f       FMOD(X1, X2).
-c     - nint(x): Nearest integer to "x" (round to nearest).
-f     - NINT(X): Nearest integer to X (round to nearest).
-c     - poisson(x): Random integer-valued sample from a Poisson
-c       distribution with mean "x".
-f     - POISSON(X): Random integer-valued sample from a Poisson
-f       distribution with mean X.
-c     - pow(x1, x2): "x1" raised to the power of "x2".
-f     - POW(X1, X2): X1 raised to the power of X2.
-c     - qif(x1, x2, x3): Returns "x2" if "x1" is true, and "x3" otherwise.
-f     - QIF(x1, x2, x3): Returns X2 if X1 is true, and X3 otherwise.
-c     - rand(x1, x2): Random sample from a uniform distribution in the
-c       range "x1" to "x2" inclusive.
-f     - RAND(X1, X2): Random sample from a uniform distribution in the
-f       range X1 to X2 inclusive.
-c     - sech(x): Hyperbolic secant of "x".
-f     - SECH(X): Hyperbolic secant of X.
-c     - sign(x1, x2): Absolute value of "x1" with the sign of "x2"
-c       (transfer of sign).
-f     - SIGN(X1, X2): Absolute value of X1 with the sign of X2
-f       (transfer of sign).
-c     - sin(x): Sine of "x" in radians.
-f     - SIN(X): Sine of X in radians.
-c     - sinc(x): Sinc function of "x" [= "sin(x)/x"].
-f     - SINC(X): Sinc function of X [= SIN(X)/X].
-c     - sind(x): Sine of "x" in degrees.
-f     - SIND(X): Sine of X in degrees.
-c     - sinh(x): Hyperbolic sine of "x".
-f     - SINH(X): Hyperbolic sine of X.
-c     - sqr(x): Square of "x" (= "x*x").
-f     - SQR(X): Square of X (= X*X).
-c     - sqrt(x): Square root of "x".
-f     - SQRT(X): Square root of X.
-c     - tan(x): Tangent of "x" in radians.
-f     - TAN(X): Tangent of X in radians.
-c     - tand(x): Tangent of "x" in degrees.
-f     - TAND(X): Tangent of X in degrees.
-c     - tanh(x): Hyperbolic tangent of "x".
-f     - TANH(X): Hyperbolic tangent of X.
-
-*  Symbolic Constants:
-*     The following symbolic constants are available (the enclosing "<>"
-*     brackets must be included):
-c     - <bad>: The "bad" value (AST__BAD) used to flag missing data. Note
-c     that you cannot usefully compare values with this constant because the
-c     result is always <bad>. The isbad() function should be used instead.
-f     - <bad>: The "bad" value (AST__BAD) used to flag missing data. Note
-f     that you cannot usefully compare values with this constant because the
-f     result is always <bad>. The ISBAD() function should be used instead.
-c     - <dig>: Number of decimal digits of precision available in a
-c     floating point (double) value.
-f     - <dig>: Number of decimal digits of precision available in a
-f     floating point (double precision) value.
-*     - <e>: Base of natural logarithms.
-*     - <epsilon>: Smallest positive number such that 1.0+<epsilon> is
-*     distinguishable from unity.
-c     - <mant_dig>: The number of base <radix> digits stored in the
-c     mantissa of a floating point (double) value.
-f     - <mant_dig>: The number of base <radix> digits stored in the
-f     mantissa of a floating point (double precision) value.
-c     - <max>: Maximum representable floating point (double) value.
-f     - <max>: Maximum representable floating point (double precision) value.
-c     - <max_10_exp>: Maximum integer such that 10 raised to that power
-c     can be represented as a floating point (double) value.
-f     - <max_10_exp>: Maximum integer such that 10 raised to that power
-f     can be represented as a floating point (double precision) value.
-c     - <max_exp>: Maximum integer such that <radix> raised to that
-c     power minus 1 can be represented as a floating point (double) value.
-f     - <max_exp>: Maximum integer such that <radix> raised to that
-f     power minus 1 can be represented as a floating point (double precision)
-f     value.
-c     - <min>: Smallest positive number which can be represented as a
-c     normalised floating point (double) value.
-f     - <min>: Smallest positive number which can be represented as a
-f     normalised floating point (double precision) value.
-c     - <min_10_exp>: Minimum negative integer such that 10 raised to that
-c     power can be represented as a normalised floating point (double) value.
-f     - <min_10_exp>: Minimum negative integer such that 10 raised to that
-f     power can be represented as a normalised floating point (double
-f     precision) value.
-c     - <min_exp>: Minimum negative integer such that <radix> raised to
-c     that power minus 1 can be represented as a normalised floating point
-c     (double) value.
-f     - <min_exp>: Minimum negative integer such that <radix> raised to
-f     that power minus 1 can be represented as a normalised floating point
-f     (double precision) value.
-*     - <pi>: Ratio of the circumference of a circle to its diameter.
-c     - <radix>: The radix (number base) used to represent the mantissa of
-c     floating point (double) values.
-f     - <radix>: The radix (number base) used to represent the mantissa of
-f     floating point (double precision) values.
-*     - <rounds>: The mode used for rounding floating point results after
-*     addition. Possible values include: -1 (indeterminate), 0 (toward
-*     zero), 1 (to nearest), 2 (toward plus infinity) and 3 (toward minus
-*     infinity). Other values indicate machine-dependent behaviour.
-
-*  Evaluation Precedence and Associativity:
-*     Items appearing in expressions are evaluated in the following order
-*     (highest precedence first):
-*     - Constants and variables
-*     - Function arguments and parenthesised expressions
-*     - Function invocations
-*     - Unary + - ! .not.
-*     - **
-*     - * /
-*     - + -
-*     - << >>
-*     - < .lt. <= .le. > .gt. >= .ge.
-*     - == .eq. != .ne.
-*     - &
-*     - ^
-*     - |
-*     - && .and.
-*     - ^^
-*     - || .or
-*     - .eqv. .neqv. .xor.
-*
-*     All operators associate from left-to-right, except for unary +,
-*     unary -, !, .not. and ** which associate from right-to-left.
-
-*  Notes:
-*     - The sequence of numbers produced by the random number functions
-*     available within a MathMap is normally unpredictable and different for
-*     each MathMap. However, this behaviour may be controlled by means of
-*     the MathMap's Seed attribute.
-c     - Normally, compound Mappings (CmpMaps) which involve MathMaps will
-c     not be subject to simplification (e.g. using astSimplify) because AST
-c     cannot know how different MathMaps will interact. However, in the
-c     special case where a MathMap occurs in series with its own inverse,
-c     then simplification may be possible. Whether simplification does, in
-c     fact, occur under these circumstances is controlled by the MathMap's
-c     SimpFI and SimpIF attributes.
-f     - Normally, compound Mappings (CmpMaps) which involve MathMaps will
-f     not be subject to simplification (e.g. using AST_SIMPLIFY) because AST
-f     cannot know how different MathMaps will interact. However, in the
-f     special case where a MathMap occurs in series with its own inverse,
-f     then simplification may be possible. Whether simplification does, in
-f     fact, occur under these circumstances is controlled by the MathMap's
-f     SimpFI and SimpIF attributes.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astMathMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astMathMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astMathMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMathMap *new;              /* Pointer to new MathMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the MathMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitMathMap( NULL, sizeof( AstMathMap ), !class_init, &class_vtab,
-                         "MathMap", nin, nout, nfwd, fwd, ninv, inv );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new MathMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new MathMap. */
-   return astMakeId( new );
-}
-
-AstMathMap *astInitMathMap_( void *mem, size_t size, int init,
-                             AstMathMapVtab *vtab, const char *name,
-                             int nin, int nout,
-                             int nfwd, const char *fwd[],
-                             int ninv, const char *inv[], int *status ) {
-/*
-*+
-*  Name:
-*     astInitMathMap
-
-*  Purpose:
-*     Initialise a MathMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     AstMathMap *astInitMathMap_( void *mem, size_t size, int init,
-*                                  AstMathMapVtab *vtab, const char *name,
-*                                  int nin, int nout,
-*                                  int nfwd, const char *fwd[],
-*                                  int ninv, const char *inv[] )
-
-*  Class Membership:
-*     MathMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new MathMap object. It allocates memory (if necessary) to accommodate
-*     the MathMap plus any additional data associated with the derived class.
-*     It then initialises a MathMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a MathMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the MathMap is to be initialised.
-*        This must be of sufficient size to accommodate the MathMap data
-*        (sizeof(MathMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the MathMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the MathMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the MathMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new MathMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     nin
-*        Number of input variables for the MathMap.
-*     nout
-*        Number of output variables for the MathMap.
-*     nfwd
-*        The number of forward transformation functions being supplied.
-*        This must be at least equal to "nout".
-*     fwd
-*        Pointer to an array, with "nfwd" elements, of pointers to null
-*        terminated strings which contain each of the forward transformation
-*        functions.
-*     ninv
-*        The number of inverse transformation functions being supplied.
-*        This must be at least equal to "nin".
-*     inv
-*        Pointer to an array, with "ninv" elements, of pointers to null
-*        terminated strings which contain each of the inverse transformation
-*        functions.
-
-*  Returned Value:
-*     A pointer to the new MathMap.
-
-*  Notes:
-*     -  This function does not attempt to ensure that the forward and inverse
-*     transformations performed by the resulting MathMap are consistent in any
-*     way.
-*     -  This function makes a copy of the contents of the strings supplied.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMathMap *new;              /* Pointer to new MathMap */
-   char **fwdfun;                /* Array of cleaned forward functions */
-   char **invfun;                /* Array of cleaned inverse functions */
-   double **fwdcon;              /* Constants for forward functions */
-   double **invcon;              /* Constants for inverse functions */
-   int **fwdcode;                /* Code for forward functions */
-   int **invcode;                /* Code for inverse functions */
-   int fwdstack;                 /* Stack size for forward functions */
-   int invstack;                 /* Stack size for inverse functions */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitMathMapVtab( vtab, name );
-
-/* Check the numbers of input and output variables for validity,
-   reporting an error if necessary. */
-   if ( nin < 1 ) {
-      astError( AST__BADNI,
-                "astInitMathMap(%s): Bad number of input coordinates (%d).", status,
-                name, nin );
-      astError( AST__BADNI,
-                "This number should be one or more." , status);
-   } else if ( nout < 1 ) {
-      astError( AST__BADNO,
-                "astInitMathMap(%s): Bad number of output coordinates (%d).", status,
-                name, nout );
-      astError( AST__BADNI,
-                "This number should be one or more." , status);
-
-/* Check that sufficient number of forward and inverse transformation
-   functions have been supplied and report an error if necessary. */
-   } else if ( nfwd < nout ) {
-      astError( AST__INNTF,
-                "astInitMathMap(%s): Too few forward transformation functions "
-                "given (%d).", status,
-                name, nfwd );
-      astError( astStatus,
-                "At least %d forward transformation functions must be "
-                "supplied. ", status,
-                nout );
-   } else if ( ninv < nin ) {
-      astError( AST__INNTF,
-                "astInitMathMap(%s): Too few inverse transformation functions "
-                "given (%d).", status,
-                name, ninv );
-      astError( astStatus,
-                "At least %d inverse transformation functions must be "
-                "supplied. ", status,
-                nin );
-
-/* Of OK, clean the forward and inverse functions provided. This makes
-   a lower-case copy with white space removed. */
-   } else {
-      CleanFunctions( nfwd, fwd, &fwdfun, status );
-      CleanFunctions( ninv, inv, &invfun, status );
-
-/* Compile the cleaned functions. From the returned pointers (if
-   successful), we can now tell which transformations (forward and/or
-   inverse) are defined. */
-      CompileMapping( "astInitMathMap", name, nin, nout,
-                      nfwd, (const char **) fwdfun,
-                      ninv, (const char **) invfun,
-                      &fwdcode, &invcode, &fwdcon, &invcon,
-                      &fwdstack, &invstack, status );
-
-/* Initialise a Mapping structure (the parent class) as the first
-   component within the MathMap structure, allocating memory if
-   necessary. Specify that the Mapping should be defined in the required
-   directions. */
-      new = (AstMathMap *) astInitMapping( mem, size, 0,
-                                           (AstMappingVtab *) vtab, name,
-                                           nin, nout,
-                                           ( fwdcode != NULL ),
-                                           ( invcode != NULL ) );
-
-
-/* If an error has occurred, free all the memory which may have been
-   allocated by the cleaning and compilation steps above. */
-      if ( !astOK ) {
-         FREE_POINTER_ARRAY( fwdfun, nfwd )
-         FREE_POINTER_ARRAY( invfun, ninv )
-         FREE_POINTER_ARRAY( fwdcode, nfwd )
-         FREE_POINTER_ARRAY( invcode, ninv )
-         FREE_POINTER_ARRAY( fwdcon, nfwd )
-         FREE_POINTER_ARRAY( invcon, ninv )
-      }
-
-/* Initialise the MathMap data. */
-/* ---------------------------- */
-/* Store pointers to the compiled function information, together with
-   other MathMap data. */
-      if ( new ) {
-         new->fwdfun = fwdfun;
-         new->invfun = invfun;
-         new->fwdcode = fwdcode;
-         new->invcode = invcode;
-         new->fwdcon = fwdcon;
-         new->invcon = invcon;
-         new->fwdstack = fwdstack;
-         new->invstack = invstack;
-         new->nfwd = nfwd;
-         new->ninv = ninv;
-         new->simp_fi = -INT_MAX;
-         new->simp_if = -INT_MAX;
-
-/* Initialise the random number generator context associated with the
-   MathMap, using an unpredictable default seed value. */
-         new->rcontext.active = 0;
-         new->rcontext.random_int = 0;
-         new->rcontext.seed_set = 0;
-         new->rcontext.seed = DefaultSeed( &new->rcontext, status );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstMathMap *astLoadMathMap_( void *mem, size_t size,
-                             AstMathMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadMathMap
-
-*  Purpose:
-*     Load a MathMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "mathmap.h"
-*     AstMathMap *astLoadMathMap( void *mem, size_t size,
-*                                 AstMathMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     MathMap loader.
-
-*  Description:
-*     This function is provided to load a new MathMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     MathMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a MathMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the MathMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        MathMap data (sizeof(MathMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the MathMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the MathMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstMathMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new MathMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the MathMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "MathMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new MathMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstMathMap *new;              /* Pointer to the new MathMap */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword strings */
-   int ifun;                     /* Loop counter for functions */
-   int invert;                   /* Invert attribute value */
-   int nin;                      /* True number of input coordinates */
-   int nout;                     /* True number of output coordinates */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this MathMap. In this case the
-   MathMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstMathMap );
-      vtab = &class_vtab;
-      name = "MathMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitMathMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built MathMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "MathMap" );
-
-/* Determine if the MathMap is inverted and obtain the "true" number
-   of input and output coordinates by un-doing the effects of any
-   inversion. */
-      invert = astGetInvert( new );
-      nin = invert ? astGetNout( new ) : astGetNin( new );
-      nout = invert ? astGetNin( new ) : astGetNout( new );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Numbers of transformation functions. */
-/* ------------------------------------ */
-/* Read the numbers of forward and inverse transformation functions,
-   supplying appropriate defaults. */
-      new->nfwd = astReadInt( channel, "nfwd", nout );
-      new->ninv = astReadInt( channel, "ninv", nin );
-      if ( astOK ) {
-
-/* Allocate memory for the MathMap's transformation function arrays. */
-         MALLOC_POINTER_ARRAY( new->fwdfun, char *, new->nfwd )
-         MALLOC_POINTER_ARRAY( new->invfun, char *, new->ninv )
-         if ( astOK ) {
-
-/* Forward transformation functions. */
-/* --------------------------------- */
-/* Create a keyword for each forward transformation function and read
-   the function's value as a string. */
-            for ( ifun = 0; ifun < new->nfwd; ifun++ ) {
-               (void) sprintf( key, "fwd%d", ifun + 1 );
-               new->fwdfun[ ifun ] = astReadString( channel, key, "" );
-            }
-
-/* Inverse transformation functions. */
-/* --------------------------------- */
-/* Repeat this process for the inverse transformation functions. */
-            for ( ifun = 0; ifun < new->ninv; ifun++ ) {
-               (void) sprintf( key, "inv%d", ifun + 1 );
-               new->invfun[ ifun ] = astReadString( channel, key, "" );
-            }
-
-/* Forward-inverse simplification flag. */
-/* ------------------------------------ */
-            new->simp_fi = astReadInt( channel, "simpfi", -INT_MAX );
-            if ( TestSimpFI( new, status ) ) SetSimpFI( new, new->simp_fi, status );
-
-/* Inverse-forward simplification flag. */
-/* ------------------------------------ */
-            new->simp_if = astReadInt( channel, "simpif", -INT_MAX );
-            if ( TestSimpIF( new, status ) ) SetSimpIF( new, new->simp_if, status );
-
-/* Random number context. */
-/* ---------------------- */
-/* Initialise the random number generator context. */
-            new->rcontext.active = 0;
-            new->rcontext.random_int = 0;
-
-/* Read the flag that determines if the Seed value is set, and the
-   Seed value itself. */
-            new->rcontext.seed_set = astReadInt( channel, "seeded", 0 );
-            if ( TestSeed( new, status ) ) {
-               new->rcontext.seed = astReadInt( channel, "seed", 0 );
-               SetSeed( new, new->rcontext.seed, status );
-
-/* Supply an unpredictable default Seed value if necessary. */
-            } else {
-               new->rcontext.seed = DefaultSeed( &new->rcontext, status );
-            }
-
-/* Compile the MathMap's transformation functions. */
-            CompileMapping( "astLoadMathMap", name, nin, nout,
-                            new->nfwd, (const char **) new->fwdfun,
-                            new->ninv, (const char **) new->invfun,
-                            &new->fwdcode, &new->invcode,
-                            &new->fwdcon, &new->invcon,
-                            &new->fwdstack, &new->invstack, status );
-         }
-
-/* If an error occurred, clean up by deleting the new MathMap. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return the new MathMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-
-
-
-
diff --git a/ast-5.3-1/mathmap.h b/ast-5.3-1/mathmap.h
deleted file mode 100644
index c023069..0000000
--- a/ast-5.3-1/mathmap.h
+++ /dev/null
@@ -1,410 +0,0 @@
-#if !defined( MATHMAP_INCLUDED ) /* Include this file only once */
-#define MATHMAP_INCLUDED
-/*
-*+
-*  Name:
-*     mathmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the MathMap class.
-
-*  Invocation:
-*     #include "mathmap.h"
-
-*  Description:
-*     This include file defines the interface to the MathMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The MathMap class implements Mappings that are specified by a series
-*     of arithmetic expressions that relate output variables to input
-*     variables (and vice versa).
-
-*  Inheritance:
-*     The MathMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Seed
-*        Random number seed.
-*     SimpFI
-*        Forward-inverse MathMap pairs simplify?
-*     SimpIF
-*        Inverse-forward MathMap pairs simplify?
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a Frame.
-*        astGetAttrib
-*           Get an attribute value for a Frame.
-*        astMapMerge
-*           Simplify a sequence of Mappings containing a MathMap.
-*        astSetAttrib
-*           Set an attribute value for a Frame.
-*        astTestAttrib
-*           Test if an attribute value has been set for a Frame.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearSeed
-*           Clear the Seed attribute for a MathMap.
-*        astClearSimpFI
-*           Clear the SimpFI attribute for a MathMap.
-*        astClearSimpIF
-*           Clear the SimpIF attribute for a MathMap.
-*        astGetSeed
-*           Get the value of the Seed attribute for a MathMap.
-*        astGetSimpFI
-*           Get the value of the SimpFI attribute for a MathMap.
-*        astGetSimpIF
-*           Get the value of the SimpIF attribute for a MathMap.
-*        astSetSeed
-*           Set the value of the Seed attribute for a MathMap.
-*        astSetSimpFI
-*           Set the value of the SimpFI attribute for a MathMap.
-*        astSetSimpIF
-*           Set the value of the SimpIF attribute for a MathMap.
-*        astTestSeed
-*           Test whether a value has been set for the Seed attribute of a
-*           MathMap.
-*        astTestSimpFI
-*           Test whether a value has been set for the SimpFI attribute of a
-*           MathMap.
-*        astTestSimpIF
-*           Test whether a value has been set for the SimpIF attribute of a
-*           MathMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAMathMap
-*           Test class membership.
-*        astMathMap
-*           Create a MathMap.
-*
-*     Protected:
-*        astCheckMathMap
-*           Validate class membership.
-*        astInitMathMap
-*           Initialise a MathMap.
-*        astInitMathMapVtab
-*           Initialise the virtual function table for the MathMap class.
-*        astLoadMathMap
-*           Load a MathMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstMathMap
-*           MathMap object type.
-*
-*     Protected:
-*        AstMathMapVtab
-*           MathMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     3-SEP-1999 (RFWS):
-*        Original version.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitMathMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#include "pointset.h"            /* Sets of points/coordinates */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ======= */
-/* This value defines the size of an internal table in the AstMathMap
-   data type. Since it will be publicly accessible (but of no external
-   use), we give it an obscure name. */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST_MATHMAP_RAND_CONTEXT_NTAB_ (32)
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Random number generator context. */
-/* -------------------------------- */
-/* This structure holds the context for the random number generator
-   used by each MathMap. This ensures that the random number sequences
-   used by different MathMaps are independent, and can be independently
-   controlled by setting/clearing their Seed attributes. Random numbers
-   are produced by combining the output of two internal generators. */
-typedef struct AstMathMapRandContext_ {
-   long int rand1;               /* State of first internal generator */
-   long int rand2;               /* State of second internal generator */
-   long int random_int;          /* Last random integer produced */
-   long int table[ AST_MATHMAP_RAND_CONTEXT_NTAB_ ]; /* Shuffle table */
-   int active;                   /* Generator has been initialised? */
-   int seed;                     /* Seed to be used during initialisation */
-   int seed_set;                 /* Seed value set via "Seed" attribute? */
-} AstMathMapRandContext_;
-
-/* MathMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstMathMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstMathMapRandContext_ rcontext; /* Random number generator context */
-   char **fwdfun;                /* Array of forward functions */
-   char **invfun;                /* Array of inverse functions */
-   double **fwdcon;              /* Array of constants for forward functions */
-   double **invcon;              /* Array of constants for inverse functions */
-   int **fwdcode;                /* Array of opcodes for forward functions */
-   int **invcode;                /* Array of opcodes for inverse functions */
-   int fwdstack;                 /* Stack size required by forward functions */
-   int invstack;                 /* Stack size required by inverse functions */
-   int nfwd;                     /* Number of forward functions */
-   int ninv;                     /* Number of inverse functions */
-   int simp_fi;                  /* Forward-inverse MathMap pairs simplify? */
-   int simp_if;                  /* Inverse-forward MathMap pairs simplify? */
-} AstMathMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstMathMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* GetSeed)( AstMathMap *, int * );
-   int (* GetSimpFI)( AstMathMap *, int * );
-   int (* GetSimpIF)( AstMathMap *, int * );
-   int (* TestSeed)( AstMathMap *, int * );
-   int (* TestSimpFI)( AstMathMap *, int * );
-   int (* TestSimpIF)( AstMathMap *, int * );
-   void (* ClearSeed)( AstMathMap *, int * );
-   void (* ClearSimpFI)( AstMathMap *, int * );
-   void (* ClearSimpIF)( AstMathMap *, int * );
-   void (* SetSeed)( AstMathMap *, int, int * );
-   void (* SetSimpFI)( AstMathMap *, int, int * );
-   void (* SetSimpIF)( AstMathMap *, int, int * );
-} AstMathMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstMathMapGlobals {
-   AstMathMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 51 ];
-} AstMathMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(MathMap)          /* Check class membership */
-astPROTO_ISA(MathMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstMathMap *astMathMap_( int, int, int, const char *[], int, const char *[],
-                         const char *, int *, ...);
-#else
-AstMathMap *astMathMapId_( int, int, int, const char *[], int, const char *[],
-                           const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstMathMap *astInitMathMap_( void *, size_t, int, AstMathMapVtab *,
-                             const char *, int, int,
-                             int, const char *[], int, const char *[], int * );
-
-/* Vtab initialiser. */
-void astInitMathMapVtab_( AstMathMapVtab *, const char *, int * );
-
-/* Loader. */
-AstMathMap *astLoadMathMap_( void *, size_t, AstMathMapVtab *,
-                             const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitMathMapGlobals_( AstMathMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS)            /* Protected */
-int astGetSeed_( AstMathMap *, int * );
-int astGetSimpFI_( AstMathMap *, int * );
-int astGetSimpIF_( AstMathMap *, int * );
-int astTestSeed_( AstMathMap *, int * );
-int astTestSimpFI_( AstMathMap *, int * );
-int astTestSimpIF_( AstMathMap *, int * );
-void astClearSeed_( AstMathMap *, int * );
-void astClearSimpFI_( AstMathMap *, int * );
-void astClearSimpIF_( AstMathMap *, int * );
-void astSetSeed_( AstMathMap *, int, int * );
-void astSetSimpFI_( AstMathMap *, int, int * );
-void astSetSimpIF_( AstMathMap *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckMathMap(this) astINVOKE_CHECK(MathMap,this,0)
-#define astVerifyMathMap(this) astINVOKE_CHECK(MathMap,this,1)
-
-/* Test class membership. */
-#define astIsAMathMap(this) astINVOKE_ISA(MathMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astMathMap astINVOKE(F,astMathMap_)
-#else
-#define astMathMap astINVOKE(F,astMathMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitMathMap(mem,size,init,vtab,name,nin,nout,nfwd,fwd,ninv,inv) \
-astINVOKE(O,astInitMathMap_(mem,size,init,vtab,name,nin,nout,nfwd,fwd,ninv,inv,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitMathMapVtab(vtab,name) astINVOKE(V,astInitMathMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadMathMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadMathMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckMathMap to validate MathMap pointers
-   before use. This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#if defined(astCLASS)            /* Protected */
-#define astClearSeed(this) \
-astINVOKE(V,astClearSeed_(astCheckMathMap(this),STATUS_PTR))
-#define astClearSimpFI(this) \
-astINVOKE(V,astClearSimpFI_(astCheckMathMap(this),STATUS_PTR))
-#define astClearSimpIF(this) \
-astINVOKE(V,astClearSimpIF_(astCheckMathMap(this),STATUS_PTR))
-#define astGetSeed(this) \
-astINVOKE(V,astGetSeed_(astCheckMathMap(this),STATUS_PTR))
-#define astGetSimpFI(this) \
-astINVOKE(V,astGetSimpFI_(astCheckMathMap(this),STATUS_PTR))
-#define astGetSimpIF(this) \
-astINVOKE(V,astGetSimpIF_(astCheckMathMap(this),STATUS_PTR))
-#define astSetSeed(this,value) \
-astINVOKE(V,astSetSeed_(astCheckMathMap(this),value,STATUS_PTR))
-#define astSetSimpFI(this,value) \
-astINVOKE(V,astSetSimpFI_(astCheckMathMap(this),value,STATUS_PTR))
-#define astSetSimpIF(this,value) \
-astINVOKE(V,astSetSimpIF_(astCheckMathMap(this),value,STATUS_PTR))
-#define astTestSeed(this) \
-astINVOKE(V,astTestSeed_(astCheckMathMap(this),STATUS_PTR))
-#define astTestSimpFI(this) \
-astINVOKE(V,astTestSimpFI_(astCheckMathMap(this),STATUS_PTR))
-#define astTestSimpIF(this) \
-astINVOKE(V,astTestSimpIF_(astCheckMathMap(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/matrixmap.c b/ast-5.3-1/matrixmap.c
deleted file mode 100644
index d9b6ec5..0000000
--- a/ast-5.3-1/matrixmap.c
+++ /dev/null
@@ -1,5453 +0,0 @@
-/*
-*class++
-*  Name:
-*     MatrixMap
-
-*  Purpose:
-*     Map coordinates by multiplying by a matrix.
-
-*  Constructor Function:
-c     astMatrixMap
-f     AST_MATRIXMAP
-
-*  Description:
-*     A MatrixMap is form of Mapping which performs a general linear
-*     transformation. Each set of input coordinates, regarded as a
-*     column-vector, are pre-multiplied by a matrix (whose elements
-*     are specified when the MatrixMap is created) to give a new
-*     column-vector containing the output coordinates. If appropriate,
-*     the inverse transformation may also be performed.
-
-*  Inheritance:
-*     The MatrixMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The MatrixMap class does not define any new attributes beyond
-*     those which are applicable to all Mappings.
-
-*  Functions:
-c     The MatrixMap class does not define any new functions beyond those
-f     The MatrixMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     9-FEB-1996 (DSB):
-*        Original version.
-*     13-NOV-1996 (DSB):
-*        Updated to support attributes, I/O and an external interface.
-*     3-JUN-1997 (DSB):
-*        astMtrMult and astMtrRot made protected instead of public.
-*     16-JUN-1997 (RFWS):
-*        Tidied public prologues.
-*     24-JUN-1997 (DSB):
-*        Zero returned for coordinates which are indeterminate as a
-*        result of using an inverted, non-square, diagonal matrix.
-*     10-OCT-1997 (DSB):
-*        o  The inverse matrix is no longer dumped by the Dump function.
-*        Instead, it is re-calculated by the Load function.
-*        o  The description of argument "form" in astMatrixMap corrected
-*        to indicate that a value of 2 produces a unit matrix.
-*        o  String values used to represent choices externally, instead
-*        of integers.
-*     24-NOV-1997 (DSB):
-*        Use of error code AST__OPT replaced by AST__RDERR.
-*     28-JAN-1998 (DSB):
-*        Bug fix in astMtrMult: the matrix (forward or inverse) used for
-*        the "a" MatrixMap was determined by the Invert flag of the other
-*        ("this") MatrixMap.        
-*     14-APR-1998 (DSB):
-*        Bug fix in Dump. Previously, matrix elements with value AST__BAD
-*        were explicitly written out. Now they are not written out, since
-*        AST__BAD can have different values on different machines. Missing
-*        elements default to AST__BAD when read back in using astLoadMatrixMap.
-*     20-APR-1998 (DSB):
-*        Bug fix in astLoadMatrixMap: initialise the pointer to the inverse
-*        matrix array to NULL if no inverse matrix is needed.
-*     25-AUG-1998 (DSB):
-*        - Transform changed so that bad input axis values are not
-*        propagated to output axes which are independant of the input axis.
-*        - CompressMatrix changed to allow a tolerance of DBL_EPSILON when
-*        determining if a matrix is a unit matrix, or a diagonal matrix.
-*        - MapMerge changed to allow MatrixMaps to swap with PermMaps
-*        in order to move the MatrixMap closer to a Mapping with which it
-*        could merge.
-*     22-FEB-1999 (DSB):
-*        Changed logic of MapMerge to avoid infinite looping.
-*     5-MAY-1999 (DSB):
-*        More corrections to MapMerge: Cleared up errors in the use of the 
-*        supplied invert flags, and corrected logic for deciding which 
-*        neighbouring Mapping to swap with. 
-*     16-JUL-1999 (DSB):
-*        Fixed memory leaks in MatWin and MapMerge.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitatrixMapVtab
-*        method.
-*     11-SEP-2003 (DSB):
-*        Increased tolerance on checks for unit matrices within
-*        CompressMatrix. Now uses sqrt(DBL_EPSILON)*diag (previously was 
-*        DBL_EPSILON*DIAG ).
-*     10-NOV-2003 (DSB):
-*        Modified functions which swap a MatrixMap with another Mapping
-*        (e.g. MatSwapPerm, etc), to simplify the returned Mappings.
-*     13-JAN-2003 (DSB):
-*        Modified the tolerance used by CompressMatrix when checking for 
-*        zero matrix elements. Old system compared each element to thre
-*        size of the diagonal, but different scalings on different axes could 
-*        cause this to trat as zero values which should nto be treated as
-*        zero.
-*     23-APR-2004 (DSB):
-*        Changes to simplification algorithm.
-*     8-JUL-2004 (DSB):
-*        astMtrMult - Report an error if either MatrixMap does not have a
-*        defined forward transformation.
-*     1-SEP-2004 (DSB):
-*        Ensure do1 and do2 are initialised before use in MapMerge.
-*     7-SEP-2005 (DSB):
-*        Take account of the Invert flag when using the zoom factor from
-*        a ZoomMap.
-*     14-FEB-2006 (DSB):
-*        Correct row/col confusion in CompressMatrix.
-*     15-MAR-2006 (DSB):
-*        Override astEqual.
-*     15-MAR-2009 (DSB):
-*        MapSplit: Only create the returned Mapping if it would have some 
-*        outputs. Also, do not create the returned Mapping if any output
-*        depends on a mixture of selected and unselected inputs.
-*     16-JUL-2009 (DSB):
-*        MatPerm: Fix memory leak (mm2 was not being annulled).
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS MatrixMap
-
-/* Define identifiers for the different forms of matrix storage. */
-#define FULL       0
-#define DIAGONAL   1
-#define UNIT       2
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "matrixmap.h"           /* Interface definition for this class */
-#include "pal.h"              /* SLALIB function definitions */
-#include "permmap.h"
-#include "zoommap.h"
-#include "unitmap.h"
-#include "winmap.h"
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-static const char *Form[3] = { "Full", "Diagonal", "Unit" }; /* Text values
-                                   used to represent storage form externally */
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(MatrixMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(MatrixMap,Class_Init)
-#define class_vtab astGLOBAL(MatrixMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstMatrixMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstMatrixMap *astMatrixMapId_( int, int, int, const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMatrixMap *MatMat( AstMapping *, AstMapping *, int, int, int * );
-static AstMatrixMap *MatPerm( AstMatrixMap *, AstPermMap *, int, int, int, int * );
-static AstMatrixMap *MatZoom( AstMatrixMap *, AstZoomMap *, int, int, int * );
-static AstMatrixMap *MtrMult( AstMatrixMap *, AstMatrixMap *, int * );
-static AstMatrixMap *MtrRot( AstMatrixMap *, double, const double[], int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *InvertMatrix( int, int, int, double *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int GetTranForward( AstMapping *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int GetTranInverse( AstMapping *, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int PermOK( AstMapping *, int * );
-static int ScalingRowCol( AstMatrixMap *, int, int * );
-static void CompressMatrix( AstMatrixMap *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void ExpandMatrix( AstMatrixMap *, int * );
-static void MatWin( AstMapping **, int *, int, int * );
-static void MatPermSwap( AstMapping **, int *, int, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SMtrMult( int, int, int, const double *, double *, double*, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Member functions. */
-/* ================= */
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-                    int *simpler, int *status ){
-/*
-*  Name:
-*     CanSwap
-
-*  Purpose:
-*     Determine if two Mappings could be swapped.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-*                  int *simpler, int *status )
-
-*  Class Membership:
-*     MatrixMap member function 
-
-*  Description:
-*     This function returns a flag indicating if the pair of supplied
-*     Mappings could be replaced by an equivalent pair of Mappings from the 
-*     same classes as the supplied pair, but in reversed order. Each pair
-*     of Mappings is considered to be compunded in series. The supplied 
-*     Mapings are not changed in any way.
-
-*  Parameters:
-*     map1
-*        The Mapping to be applied first.
-*     map2
-*        The Mapping to be applied second.
-*     inv1
-*        The invert flag to use with map1. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     inv2
-*        The invert flag to use with map2. 
-*     simpler
-*        Addresss of a location at which to return a flag indicating if
-*        the swapped Mappings would be intrinsically simpler than the
-*        original Mappings.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the Mappings could be swapped, 0 otherwise.
-
-*  Notes:
-*     -  One of the supplied pair of Mappings must be a MatrixMap.
-*     -  A value of 0 is returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *mat;        /* Pointer to MatrixMap Mapping */
-   AstMapping *nomat;        /* Pointer to non-MatrixMap Mapping */
-   const char *class1;       /* Pointer to map1 class string */
-   const char *class2;       /* Pointer to map2 class string */
-   const char *nomat_class;  /* Pointer to non-MatrixMap class string */
-   double *consts;           /* Pointer to constants array */
-   int *inperm;              /* Pointer to input axis permutation array */
-   int *outperm;             /* Pointer to output axis permutation array */
-   int i;                    /* Loop count */
-   int invert[ 2 ];          /* Original invert flags */
-   int nax;                  /* No. of in/out coordinates for the MatrixMap */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-   int ret;                  /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   ret = 0;
-   *simpler = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   invert[ 0 ] = astGetInvert( map1 );
-   astSetInvert( map1, inv1 );
-
-   invert[ 1 ] = astGetInvert( map2 );
-   astSetInvert( map2, inv2 );
-   
-/* Get the classes of the two mappings. */
-   class1 = astGetClass( map1 );
-   class2 = astGetClass( map2 );
-   if( astOK ){
-
-/* Get a pointer to the MatrixMap and non-MatrixMap Mappings. */
-      if( !strcmp( class1, "MatrixMap" ) ){
-         mat = (AstMatrixMap *) map1;
-         nomat = map2;
-         nomat_class = class2;
-      } else {
-         nomat = map1;
-         mat = (AstMatrixMap *) map2;
-         nomat_class = class1;
-      }
-
-/* Get the number of input axes for the MatrixMap. */
-      nax = astGetNin( mat );
-
-/* If it is a WinMap, the Mappings can be swapped. */
-      if( !strcmp( nomat_class, "WinMap" ) ){
-         ret = 1;
-
-/* If it is a PermMap, the Mappings can be swapped so long as:
-   1) all links between input and output axes in the PermMap are 
-   bi-directional. This does not preclude the existence of unconnected 
-   axes, which do not have links (bi-directional or otherwise). 
-   2) The MatrixMap is square, and invertable.
-   3) If the permMap is applied first, then each output of the PermMap 
-      which is assigned a constant value must correspond to a "scaling" row 
-      and column in the MatrixMap. I.e. if PermMap output axis "i" is
-      assigned a constant value, then row i and column i of the following
-      MatrixMap must contain only zeros, EXCEPT for the diagonal term (row 
-      i, column i) which must be non-zero. If the Mappings are in the other 
-      order, then the same applies to PermMap input axes assigned a constant 
-      value. */
-
-/* Check the other Mapping is a PermMap, and that the MatrixMap is square
-   and has an inverse. */
-      } else if( !strcmp( nomat_class, "PermMap" ) &&
-                 nax == astGetNout( mat ) && ( mat->form == UNIT ||
-                 ( mat->i_matrix != NULL &&
-                   mat->f_matrix != NULL ) ) ) {
-
-/* Get the number of input and output coordinates for the PermMap. */
-         nin = astGetNin( nomat );
-         nout = astGetNout( nomat );
-
-/* We need to know the axis permutation arrays and constants array for
-   the PermMap. */
-         PermGet( (AstPermMap *) nomat, &outperm, &inperm, &consts, status );
-         if( astOK ) {
-
-/* Indicate we can swap with the PermMap. */
-            ret = 1;
-
-/* Check each output axis. If any links between axes are found which are
-   not bi-directional, indicate that we cannot swap with the PermMap. */
-            for( i = 0; i < nout; i++ ){
-               if( outperm[ i ] >= 0 && outperm[ i ] < nin ) {
-                  if( inperm[ outperm[ i ] ] != i ) {
-                     ret = 0;
-                     break;
-                  }
-               }
-            }
-
-/* Check each input axis. If any links between axes are found which are
-   not bi-directional, indicate that we cannot swap with the PermMap. */
-            for( i = 0; i < nin; i++ ){
-               if( inperm[ i ] >= 0 && inperm[ i ] < nout ) {
-                  if( outperm[ inperm[ i ] ] != i ) {
-                     ret = 0;
-                     break;
-                  }
-               }
-            }
-
-/* If the PermMap is suitable, check that any constant values fed from the
-   PermMap into the MatrixMap (in either forward or inverse direction)
-   are not changed by the MatrixMap. This requires the row and column for
-   each constant axis to be zeros, ecept for a value of 1.0 on the
-   diagonal. First deal with the cases where the PermMap is applied
-   first, so the outputs of the PermMap are fed into the MatrixMap in the
-   forward direction. */
-            if( ret && ( nomat == map1 ) ) {
-
-               if( nout != nax ){
-                  astError( AST__RDERR, "PermMap produces %d outputs, but the following"
-                            "MatrixMap has %d inputs\n", status, nout, nax );
-                  ret = 0;
-               }
-
-/* Consider each output axis of the PermMap. */
-               for( i = 0; i < nout && astOK ; i++ ) {
-
-/* If this PermMap output is assigned a constant... */
-                  if( outperm[ i ] < 0 || outperm[ i ] >= nin ) {
-
-/* Check the i'th row of the MatrixMap is all zero except for the i'th
-   column which must be non-zero. If not indicate that the MatrixMap cannot
-   swap with the PermMap and leave the loop. */
-                     if( !ScalingRowCol( mat, i, status ) ) {
-                        ret = 0;
-                        break;
-                     }
-                  }
-               }
-            }
-
-/* Now deal with the cases where the PermMap is applied second, so the inputs 
-   of the PermMap are fed into the MatrixMap in the inverse direction. */
-            if( ret && ( nomat == map2 ) ) {
-
-               if( nin != nax ){
-                  astError( AST__RDERR, "Inverse PermMap produces %d inputs, but the "
-                            "preceeding MatrixMap has %d outputs\n", status, nin, nax );
-                  ret = 0;
-               }
-
-/* Consider each input axis of the PermMap. */
-               for( i = 0; i < nin && astOK; i++ ){
-
-/* If this PermMap input is assigned a constant (by the inverse Mapping)... */
-                  if( inperm[ i ] < 0 || inperm[ i ] >= nout ) {
-
-/* Check the i'th row of the MatrixMap is all zero except for the i'th
-   column which must be non-zero. If not indicate that the MatrixMap cannot
-   swap with the PermMap and leave the loop. */
-                     if( !ScalingRowCol( mat, i, status ) ) {
-                        ret = 0;
-                        break;
-                     }
-                  }
-               }
-            }
-
-/* If we can swap with the PermMap, the swapped Mappings may be
-   intrinsically simpler than the original mappings. */
-            if( ret ) {
-
-/* If the PermMap preceeds the WinMap, this will be the case if the PermMap
-   has more outputs than inputs. If the WinMap preceeds the PermMap, this 
-   will be the case if the PermMap has more inputs than outputs. */
-               *simpler = ( nomat == map1 ) ? nout > nin : nin > nout;
-            }
-
-/* Free the axis permutation and constants arrays. */
-            outperm = (int *) astFree( (void *) outperm );
-            inperm = (int *) astFree( (void *) inperm );
-            consts = (double *) astFree( (void *) consts );
-         }
-      }
-   }
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied MatrixMaps. */
-   astSetInvert( map1, invert[ 0 ] );
-   astSetInvert( map2, invert[ 1 ] );
-   
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-static void CompressMatrix( AstMatrixMap *this, int *status ){
-/*
-*  Name:
-*     CompressMatrix
-
-*  Purpose:
-*     If possible, reduce the amount of storage needed to store a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void CompressMatrix( AstMatrixMap *this, int *status )
-
-*  Class Membership:
-*     MatrixMap member function.
-
-*  Description:
-*     The supplid MatrixMap is converted to its most compressed form
-*     (i.e no element values if it is a unit matrix, diagonal elements only
-*     if it is a diagonal matrix, or all elements otherwise).
-
-*  Parameters:
-*     this
-*        A pointer to the MatrixMap to be compressed.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double *a;                     /* Pointer to next element */
-   double *colmax;                /* Pointer to array holding column max values */
-   double *fmat;                  /* Pointer to compressed forward matrix */
-   double *rowmax;                /* Pointer to array holding row max values */
-   double mval;                   /* Matrix element value */
-   int i;                         /* Loop count */
-   int j;                         /* Loop count */
-   int k;                         /* Loop count */
-   int ncol;                      /* No. of columns in forward matrix */
-   int ndiag;                     /* No. of diagonal elements in matrix */
-   int new_form;                  /* Compressed storage form */
-   int new_inv;                   /* New inverse requied? */
-   int next_diag;                 /* Index of next diagonal element */
-   int nrow;                      /* No. of rows in forward matrix */
-
-/* Check the global error status. */
-   if ( !astOK || !this ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   new_inv = 0;
-
-/* Get the dimensions of the forward matrix. */
-   if( astGetInvert( this ) ){
-      nrow = astGetNin( this );
-      ncol = astGetNout( this );
-   } else {
-      ncol = astGetNin( this );
-      nrow = astGetNout( this );
-   }
-
-/* Store the number of diagonal elements in the matrix. This is the 
-   minimum of the number of rows and columns. */
-   if( ncol < nrow ){
-      ndiag = ncol;
-   } else {
-      ndiag = nrow;
-   }
-
-/* If the MatrixMap is already stored in UNIT form, it cannot be compressed 
-   any further. */
-   if( this->form == UNIT){
-      return;
-
-/* Otherwise, if the MatrixMap is stored in DIAGONAL form, it could be
-   compressed into a UNIT MatrixMap if all the supplied element values are 
-   one. */
-   } else if( this->form == DIAGONAL ){
-      new_form = UNIT;
-      for( i = 0; i < ndiag; i++ ){
-         if( !EQUAL( (this->f_matrix)[ i ], 1.0 ) ){
-            new_form = DIAGONAL;
-            break;
-         }
-      }
-
-/* If it can be compressed, change the storage form and free the arrays
-   holding the diagonal element values. */
-      if( new_form == UNIT ) {
-         this->f_matrix = (double *) astFree( (void *)( this->f_matrix ) );
-         this->i_matrix = (double *) astFree( (void *)( this->i_matrix ) );
-         this->form = UNIT;
-      }
-
-/* Otherwise, a full MatrixMap has been supplied, but this could be stored 
-   in a unit or diagonal MatrixMap if the element values are appropriate. */
-   } else {
-      new_form = FULL;
-
-/* Find the maximum absolute value in each column. Scale by
-   sqrt(DBL_EPSILON) to be come a lower limit for non-zero values. */
-      colmax = astMalloc( ncol*sizeof( double ) );
-      if( colmax ) {
-         for( j = 0; j < ncol; j++ ) {
-            colmax[ j ] = 0.0;      
-            i = j;
-            for( k = 0; k < nrow; k++ ) {
-               mval = (this->f_matrix)[ i ];
-               if( mval != AST__BAD ) {
-                  mval = fabs( mval );
-                  if( mval > colmax[ j ] ) colmax[ j ] = mval;
-               }
-               i += ncol;
-            }
-            colmax[ j ] *= sqrt( DBL_EPSILON );
-         }
-      }
-
-/* Find the maximum absolute value in each row. Scale by
-   sqrt(DBL_EPSILON) to be come a lower limit for non-zero values. */
-      rowmax = astMalloc( nrow*sizeof( double ) );
-      if( rowmax ) {
-         for( k = 0; k < nrow; k++ ) {
-            rowmax[ k ] = 0.0;      
-            i = k*ncol;
-            for( j = 0; j < ncol; j++ ) {
-               mval = (this->f_matrix)[ i ];
-               if( mval != AST__BAD ) {
-                  mval = fabs( mval );
-                  if( mval > rowmax[ k ] ) rowmax[ k ] = mval;
-               }
-               i++;
-            }
-            rowmax[ k ] *= sqrt( DBL_EPSILON );
-         }
-      }
-
-/* Check memory can be used */
-      if( astOK ) {
-
-/* Initialise a flag indicating that the inverse matrix does not need to
-   be re-calculated. */
-         new_inv = 0;
-
-/* Initially assume that the forward matrix is a unit matrix. */
-         new_form = UNIT;
-
-/* Store a pointer to the next matrix element. */
-         a = this->f_matrix;
-  
-/* Loop through all the rows in the forward matrix array. */
-         for( k = 0; k < nrow; k++ ) {
-
-/* Loop through all the elements in this column. */
-            for( j = 0; j < ncol; j++, a++ ) {
-
-/* If this element is bad, use full form. */
-               if( *a == AST__BAD ) {
-                  new_form = FULL;
-
-/* Otherwise, if this is a diagonal term, check its value. If it is not one, 
-   then the matrix cannot be a unit matrix, but it could still be a diagonal 
-   matrix. */
-               } else {
-                  if( j == k ) {
-                     if( *a != 1.0 && new_form == UNIT ) new_form = DIAGONAL;
-
-/* If this is not a diagonal element, and the element value is not zero, 
-   then the matrix is not a diagonal matrix. Allow a tolerance of
-   SQRT(DBL_EPSILON) times the largest value in the same row or column as
-   the current matrix element. That is, an element must be insignificant
-   to both its row and its column to be considered as effectively zero. 
-   Replace values less than this limit with zero. */
-                  } else {
-                     mval = fabs( *a );
-                     if( mval <= rowmax[ k ] &&
-                         mval <= colmax[ j ] ) {
-
-/* If the element will change value, set a flag indicating that the inverse 
-   matrix needs to be re-calculated. */
-                        if( *a != 0.0 ) new_inv = 1;
-
-/* Ensure this element value is zero. */
-                        *a = 0.0;
-
-                     } else {
-                        new_form = FULL;
-                     }             
-                  }
-               }
-            }
-         }
-      }
-
-/* Free memory. */
-      colmax = astFree( colmax );
-      rowmax = astFree( rowmax );
-
-/* If it can be compressed into a UNIT MatrixMap, change the storage form and 
-   free the arrays holding the element values. */
-      if( new_form == UNIT ) {
-         this->f_matrix = (double *) astFree( (void *)( this->f_matrix ) );
-         this->i_matrix = (double *) astFree( (void *)( this->i_matrix ) );
-         this->form = UNIT;
-
-/* Otherwise, if it can be compressed into a DIAGONAL MatrixMap, copy the 
-   diagonal elements from the full forward matrix into a newly allocated
-   array, use this array to replace the forward matrix array in the MatrixMap,
-   create a new inverse matrix, and change the storage form. */
-      } else if( new_form == DIAGONAL ) {
-         fmat = astMalloc( sizeof(double)*(size_t)ndiag );
-         if( fmat ){
-
-            next_diag = 0;
-            for( i = 0; i < ndiag; i++ ){
-               fmat[ i ] = (this->f_matrix)[ next_diag ];
-               next_diag += ncol + 1;
-            }
-
-            (void) astFree( (void *) this->f_matrix );
-            (void) astFree( (void *) this->i_matrix );
-
-            this->f_matrix = fmat;
-            this->i_matrix = InvertMatrix( DIAGONAL, nrow, ncol, fmat, status );
-            this->form = DIAGONAL;
-
-         }
-
-/* Calculate a new inverse matrix if necessary. */
-      } else if( new_inv ) {
-         (void) astFree( (void *) this->i_matrix );
-         this->i_matrix = InvertMatrix( FULL, nrow, ncol, this->f_matrix, status );
-      }
-   }
-
-   return;
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two MatrixMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     MatrixMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two MatrixMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a MatrixMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the MatrixMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *that;        
-   AstMatrixMap *this;        
-   double *that_matrix;
-   double *this_matrix;
-   int i;           
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two MatrixMap structures. */
-   this = (AstMatrixMap *) this_object;
-   that = (AstMatrixMap *) that_object;
-
-/* Check the second object is a MatrixMap. We know the first is a
-   MatrixMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAMatrixMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNout( that ) == nout && astGetNin( that ) == nin ) {
-
-/* Assume the MatrixMaps are equivalent. */
-         result = 1;
-
-/* Ensure both MatrixMaps are stored in full form. */
-         ExpandMatrix( this, status );
-         ExpandMatrix( that, status );
-
-/* Get pointers to the arrays holding the elements of the forward matrix
-   for both MatrixMaps. */
-         if( astGetInvert( this ) ) {
-            this_matrix = this->i_matrix;
-         } else {
-            this_matrix = this->f_matrix;
-         }
-
-         if( astGetInvert( that ) ) {
-            that_matrix = that->i_matrix;
-         } else {
-            that_matrix = that->f_matrix;
-         }
-
-/* If either of the above arrays is not available, try to get the inverse
-   matrix arrays. */
-         if( !this_matrix || !that_matrix ) {
-            if( astGetInvert( this ) ) {
-               this_matrix = this->f_matrix;
-            } else {
-               this_matrix = this->i_matrix;
-            }
-   
-            if( astGetInvert( that ) ) {
-               that_matrix = that->f_matrix;
-            } else {
-               that_matrix = that->i_matrix;
-            }
-         }
-
-/* If both arrays are now available compare their elements. */
-         if( this_matrix && that_matrix ) {
-            result = 1;
-            for( i = 0; i < nin*nout; i++ ) {
-               if( !EQUAL( this_matrix[ i ], that_matrix[ i ] ) ){
-                  result = 0;
-                  break;
-               }
-            }
-         }
-
-/* Ensure the supplied MatrixMaps are stored back in compressed form. */
-         CompressMatrix( this, status );
-         CompressMatrix( that, status );
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void ExpandMatrix( AstMatrixMap *this, int *status ){
-/*
-*  Name:
-*     ExpandMatrix
-
-*  Purpose:
-*     Ensure the MatrixMap is stored in full (non-compressed) form.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void ExpandMatrix( AstMatrixMap *this, int *status )
-
-*  Class Membership:
-*     MatrixMap member function.
-
-*  Description:
-*     If the supplid MatrixMap is stored in a compressed form (i.e no 
-*     element values if it is a unit matrix, diagonal elements only
-*     if it is a diagonal matrix), it is expanded into a full MatrixMap
-*     in which all elements are stored.
-
-*  Parameters:
-*     this
-*        A pointer to the MatrixMap to be expanded.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double *fmat;                  /* Pointer to full forward matrix */
-   double *imat;                  /* Pointer to full inverse matrix */
-   int i;                         /* Loop count */
-   int ncol;                      /* No. of columns in forward matrix */
-   int ndiag;                     /* No. of diagonal elements in matrix */
-   int nrow;                      /* No. of rows in forward matrix */
-
-/* Check the global error status. Also return if the MatrixMap
-   pointer is null. */
-   if ( !astOK || !this ) return;
-
-/* Return without action if the MatrixMap is already in full form. */
-   if( this->form == FULL ) return;
-
-/* Get the dimensions of the forward matrix. */
-   if( astGetInvert( this ) ){
-      nrow = astGetNin( this );
-      ncol = astGetNout( this );
-   } else {
-      ncol = astGetNin( this );
-      nrow = astGetNout( this );
-   }
-
-/* Store the number of diagonal elements. */
-   if( nrow > ncol ){
-      ndiag = ncol;
-   } else {
-      ndiag = nrow;
-   }   
-
-/* Allocate arrays to hold the full forward and inverse matrices. */
-   fmat = (double *) astMalloc( sizeof( double )*(size_t)( nrow*ncol ) );
-   imat = (double *) astMalloc( sizeof( double )*(size_t)( nrow*ncol ) );
-   if( imat && fmat ){
-
-/* Fill them both with zeros. */
-      for( i = 0; i < nrow*ncol; i++ ) {
-         fmat[ i ] = 0.0;
-         imat[ i ] = 0.0;
-      }
-
-/* If a unit MatrixMap was supplied, put ones on the diagonals. */
-      if( this->form == UNIT ){
-         for( i = 0; i < ndiag; i++ ) {
-            fmat[ i*( ncol + 1 ) ] = 1.0;
-            imat[ i*( nrow + 1 ) ] = 1.0;
-         }
-
-/* If a diagonal MatrixMap was supplied, copy the diagonal terms from 
-   the supplied MatrixMap. */
-      } else if( this->form == DIAGONAL ){
-         for( i = 0; i < ndiag; i++ ) {
-            fmat[ i*( ncol + 1 ) ] = (this->f_matrix)[ i ];
-            imat[ i*( nrow + 1 ) ] = (this->i_matrix)[ i ];
-         }
-      }
-
-/* Free any existing arrays in the MatrixMap and store the new ones. */
-      (void) astFree( (void *) this->f_matrix );
-      (void) astFree( (void *) this->i_matrix );
-
-      this->f_matrix = fmat;
-      this->i_matrix = imat;
-
-/* Update the storage form. */
-      this->form = FULL;
-
-/* If either of the new matrices could not be allocated, ensure that
-   both have been freed. */
-   } else {
-      fmat = (double *) astFree( (void *) fmat );
-      imat = (double *) astFree( (void *) imat );
-   }
-   
-   return;
-
-}
-
-static int FindString( int n, const char *list[], const char *test, 
-                       const char *text, const char *method, 
-                       const char *class, int *status ){
-/*
-*  Name:
-*     FindString
-
-*  Purpose:
-*     Find a given string within an array of character strings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrix.h"
-*     int FindString( int n, const char *list[], const char *test, 
-*                     const char *text, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     MatrixMap method.
-
-*  Description:
-*     This function identifies a supplied string within a supplied
-*     array of valid strings, and returns the index of the string within
-*     the array. The test option may not be abbreviated, but case is
-*     insignificant.
-
-*  Parameters:
-*     n
-*        The number of strings in the array pointed to be "list".
-*     list
-*        A pointer to an array of legal character strings.
-*     test
-*        A candidate string.
-*     text
-*        A string giving a description of the object, parameter,
-*        attribute, etc, to which the test value refers.
-*        This is only for use in constructing error messages. It should
-*        start with a lower case letter.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the identified string within the supplied array, starting
-*     at zero.
-
-*  Notes:
-*     -  A value of -1 is returned if an error has already occurred, or
-*     if this function should fail for any reason (for instance if the
-*     supplied option is not specified in the supplied list). 
-
-*/
-
-/* Local Variables: */
-   int ret;                /* The returned index */
-
-/* Check global status. */
-   if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
-   the loop when a match is found. */
-   for( ret = 0; ret < n; ret++ ) {
-      if( !Ustrcmp( test, list[ ret ], status ) ) break;
-   }
-
-/* Report an error if the supplied test string does not match any element
-   in the supplied list. */
-   if( ret >= n ) {
-      astError( AST__RDERR, "%s(%s): Illegal value '%s' supplied for %s.", status,
-                method, class, test, text );
-      ret = -1;
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     MatrixMap member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is always one.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 1;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strcmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int Ustrcmp( const char *a, const char *b )
-
-*  Class Membership:
-*     MatrixMap member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the two strings, and 1 
-*     otherwise. Comparisons are case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strcmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Loop round each character. */
-   while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-void astInitMatrixMapVtab_(  AstMatrixMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitMatrixMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a MatrixMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void astInitMatrixMapVtab( AstMatrixMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     MatrixMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the MatrixMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAMatrixMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->MtrRot = MtrRot;
-   vtab->MtrMult = MtrMult;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_mapsplit = mapping->MapSplit;
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->GetIsLinear = GetIsLinear;
-   mapping->GetTranForward = GetTranForward;
-   mapping->GetTranInverse = GetTranInverse;
-   mapping->MapMerge = MapMerge;
-   mapping->Rate = Rate;
-
-/* Declare the destructor and copy constructor. */
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
-   astSetDump( vtab, Dump, "MatrixMap", "Matrix transformation" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-
-static double *InvertMatrix( int form, int nrow, int ncol, double *matrix, int *status ){
-/*
-*  Name:
-*     InvertMatrix
-
-*  Purpose:
-*     Invert a suplied matrix.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     double *InvertMatrix( int form, int nrow, int ncol, double *matrix, int *status )
-
-*  Class Membership:
-*     MatrixMap member function.
-
-*  Description:
-*     This function returns a pointer to a matrix holding the inverse of 
-*     the supplied matrix, or a NULL pointer if the inverse is not defined. 
-*     The memory to store the inverse matrix is allocated internally, and
-*     should be freed using astFree when no longer required.
-*
-*     The correspondence between a full matrix and its inverse is only 
-*     unique if the matrix is square, and so a NULL pointer is returned if 
-*     the supplied matrix is not square. 
-
-*  Parameters:
-*     form
-*        The form of the MatrixMap; UNIT, DIAGONAL or FULL.      
-*     nrow
-*        Number of rows in the supplied matrix.
-*     ncol
-*        Number of columns in the supplied matrix.
-*     matrix
-*        A pointer to the input matrix. Elements should be stored in row
-*        order (i.e. (row 1,column 1 ), (row 1,column 2 )... (row 2,column 1), 
-*        etc).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output matrix. 
-
-*  Notes:
-*     -  A NULL pointer is returned if a unit matrix is supplied.
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  No error is reported if the inverse is not defined. 
-*/
-
-/* Local Variables: */
-   double det;                    /* Determinant of supplied matrix */
-   double mval;                   /* Matrix element value */
-   double *out;                   /* Pointer to returned inverse matrix */
-   double *vector;                /* Pointer to vector used by palSlaDmat */
-   int i;                         /* Matrix element number */
-   int *iw;                       /* Pointer to workspace used by palSlaDmat */
-   int nel;                       /* No. of elements in square matrix */
-   int ndiag;                     /* No. of diagonal elements */
-   int ok;                        /* Zero if any bad matrix values found */
-   int sing;                      /* Zero if matrix is not singular */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Return a NULL pointer if the input matrix is NULL. */
-   if( !matrix ) return NULL;
-   
-/* If a unit matrix map has been supplied, return NULL. */
-   if( form == UNIT ){
-      return NULL;
-
-/* If a diagonal matrix has been supplied, allocate an array to hold
-   the diagonal terms of the inverse matrix. Store the reciprocal
-   of the input matrix diagonal terms in it. If any of the input diagonal
-   terms are zero or BAD, set the associated elements of the inverse matrix 
-   BAD. */
-   } else if( form == DIAGONAL ){
-      if( nrow > ncol ) {
-         ndiag = ncol;
-      } else {
-         ndiag = nrow;
-      }
-      
-      out = (double *) astMalloc( sizeof( double )*(size_t)ndiag );
-
-      if( out ) {
-         for( i = 0; i < ndiag; i++ ) {
-            mval = matrix[ i ];
-            if( mval != 0.0 && mval != AST__BAD ){
-               out[ i ] = 1.0/mval;
-            } else {
-               out[ i ] = AST__BAD;
-            }
-         }
-      } 
-
-/* If a full matrix has been supplied, initialise the returned pointer. */      
-   } else {
-      out = NULL;
-
-/* Check that the matrix is square. */
-      if( nrow == ncol ){
-
-/* Find the number of elements in the matrix. */
-         nel = nrow*ncol;
-
-/* See if there are any bad values in the matrix. */
-         ok = 1;
-         for ( i=0; i<nel; i++ ) {
-            if ( matrix[i] == AST__BAD ) {
-               ok = 0;
-               break;
-            }
-         }
-
-/* Only continue if there are no bad matrix values. */
-         if( ok ) {
-
-/* Take a copy of the supplied matrix */
-            out = (double *) astStore( NULL, (void *) matrix,
-                                       astSizeOf( (void *) matrix ) );
-
-/* The SLALIB function which inverts the matrix also applies the inverse
-   matrix to a vector. We are not interested in the vector in this
-   instance, but we still have to provide one for SLALIB to use. Allocate 
-   memory for the vector. */
-            vector = (double *) astMalloc( sizeof(double)*(size_t) nrow );
-
-/* If it was allocated succesfully, fill it with zeros. */
-            if( astOK ){
-               for ( i=0; i<nrow; i++ ) vector[i] = 0.0;
-
-/* Obtain work space and attempt to invert the matrix using SLALIB, then 
-   free the work space. */
-               iw = (int *) astMalloc( sizeof(int)*(size_t) nrow );
-               if( astOK ) palSlaDmat( nrow, out, vector, &det, &sing, iw );
-               iw = (int *) astFree( (void *) iw );
-
-            }
-
-/* If the matrix could not be inverted, free the memory used to hold the 
-   square matrix, and return the NULL pointer. */
-            if ( !astOK || sing != 0 ){
-               out = (double *) astFree( (void *) out );
-            }
-
-/*  Free the memory used to hold the vector. */
-            vector = (double *) astFree( (void *) vector );      
-         }
-      } 
-   }
-
-/* Return the pointer. */
-
-   return out;
-
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     MatrixMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated MatrixMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated MatrixMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated MatrixMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the MatrixMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        MatrixMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated MatrixMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping **maplt;   /* New mappings list pointer */
-   AstMapping *map2;     /* Pointer to replacement Mapping */
-   AstMapping *mc[2];    /* Copies of supplied Mappings to swap */
-   AstMapping *smc0;     /* Simplied Mapping */
-   AstMapping *smc1;     /* Simplied Mapping */
-   AstMatrixMap *mm;     /* Pointer to supplied MatrixMap */
-   AstMatrixMap *newmm;  /* Pointer to replacement MatrixMap */
-   const char *class1;   /* Pointer to first Mapping class string */
-   const char *class2;   /* Pointer to second Mapping class string */
-   const char *nclass;   /* Pointer to neighbouring Mapping class */
-   double *b;            /* Pointer to scale terms */
-   int *invlt;           /* New invert flags list pointer */
-   int do1;              /* Would a backward swap make a simplification? */
-   int do2;              /* Would a forward swap make a simplification? */
-   int i1;               /* Index of first MatrixMap to merge */
-   int i2;               /* Index of last MatrixMap to merge */
-   int i;                /* Loop counter */
-   int ic[2];            /* Copies of supplied invert flags to swap */
-   int invert;           /* Should the inverted Mapping be used? */
-   int neighbour;        /* Index of Mapping with which to swap */
-   int nin;              /* Number of input coordinates for MatrixMap */
-   int nmapt;            /* No. of Mappings in list */
-   int nout;             /* Number of output coordinates for MatrixMap */
-   int nstep1;           /* No. of Mappings backwards to next mergable Mapping */
-   int nstep2;           /* No. of Mappings forward to next mergable Mapping */
-   int result;           /* Result value to return */
-   int swaphi;           /* Can MatrixMap be swapped with higher neighbour? */
-   int swaplo;           /* Can MatrixMap be swapped with lower neighbour? */
-   int zoom;             /* Can MatrixMap be replaced by a ZoomMap? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   i1 = 0;
-   i2 = 0;
-   neighbour = 0;
-
-/* Get the Invert attribute for the specified mapping. */
-   invert = astGetInvert( ( *map_list )[ where ] );
-
-/* Get the number of input and output axes for the MatrixMap. Swap these
-   if the supplied invert flag is not the same as the Invert attribute of
-   the Mapping. */
-   if( ( invert && !( *invert_list )[ where ] ) || 
-       ( !invert && ( *invert_list )[ where ] ) ) {
-      nout = astGetNin( ( *map_list )[ where ] );
-      nin = astGetNout( ( *map_list )[ where ] );
-
-   } else {
-      nin = astGetNin( ( *map_list )[ where ] );
-      nout = astGetNout( ( *map_list )[ where ] );
-   }
-
-/* First of all, see if the MatrixMap can be replaced by a simpler Mapping,
-   without reference to the neighbouring Mappings in the list.           */
-/* ======================================================================*/
-   map2 = NULL;
-   mm = (AstMatrixMap *) ( *map_list )[ where ];
-
-/* If the MatrixMap is a square unit matrix, it can be replaced by a 
-   UnitMap. */
-   if( mm->form == UNIT && nin == nout ){
-      map2 = (AstMapping *) astUnitMap( nin, "", status );
-
-/* If the MatrixMap is a square diagonal matrix with equal diagonal
-   terms, then it can be replaced by a ZoomMap. */
-   } else if( mm->form == DIAGONAL && nin == nout && 
-              mm->f_matrix && mm->i_matrix &&
-             (mm->f_matrix)[ 0 ] != AST__BAD ){
-      zoom = 1;
-      b = mm->f_matrix + 1;
-      for( i = 1; i < nin; i++ ){
-         if( !EQUAL( *b, *( b - 1 ) ) ){
-            zoom = 0;
-            break;
-         }
-         b++;
-      }
-
-      if( zoom ){
-         if( ( *invert_list )[ where ] ){
-            map2 = (AstMapping *) astZoomMap( nin, (mm->i_matrix)[ 0 ], "", status );
-         } else {
-            map2 = (AstMapping *) astZoomMap( nin, (mm->f_matrix)[ 0 ], "", status );
-         }
-      }
-   }
-
-/* If the MatrixMap can be replaced, annul the MatrixMap pointer in the 
-   list and replace it with the new Mapping pointer, and indicate that the 
-   forward transformation of the returned Mapping should be used. */
-   if( map2 ){
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = map2;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-         
-/* If the MatrixMap itself could not be simplified, see if it can be merged
-   with the Mappings on either side of it in the list. */
-/*==========================================================================*/
-   } else {
-
-/* Store the classes of the neighbouring Mappings in the list. */
-       class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
-       class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* In series. */
-/* ========== */
-      if ( series ) {
-
-/* We first look to see if the MatrixMap can be merged with one of its
-   neighbours, resulting in a reduction of one in the number of Mappings
-   in the list. MatrixMaps can merge directly with another MatrixMap, a
-   ZoomMap, an invertable PermMap, or a UnitMap. */
-         if( class1 && ( !strcmp( class1, "MatrixMap" ) ||
-                         !strcmp( class1, "ZoomMap" ) ||
-                         !strcmp( class1, "PermMap" ) ||
-                         !strcmp( class1, "UnitMap" ) ) ){
-            nclass = class1;
-            i1 = where - 1;
-            i2 = where;
-
-         } else if( class2 && ( !strcmp( class2, "MatrixMap" ) ||
-                                !strcmp( class2, "ZoomMap" ) ||
-                                !strcmp( class2, "PermMap" ) ||
-                                !strcmp( class2, "UnitMap" ) ) ){
-            nclass = class2;
-            i1 = where;
-            i2 = where + 1;
-
-         } else {
-            nclass = NULL;
-         }
-
-/* Only some PermMaps can be merged with (those which have consistent
-   forward and inverse mappings). If this is not one of them, set nclass 
-   NULL to indicate this. */
-         if( nclass && !strcmp( nclass, "PermMap" ) && 
-             !PermOK( ( *map_list )[ (i1==where)?i2:i1 ], status ) ) nclass = NULL;
-
-/* If the MatrixMap can merge with one of its neighbours, create the merged
-   Mapping. */
-         if( nclass ){
-
-            if( !strcmp( nclass, "MatrixMap" ) ){
-               newmm = MatMat( ( *map_list )[ i1 ], ( *map_list )[ i2 ],
-                               ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], status );
-               invert = 0;
-
-            } else if( !strcmp( nclass, "ZoomMap" ) ){
-               if( i1 == where ){
-                  newmm = MatZoom( (AstMatrixMap *)( *map_list )[ i1 ], 
-                                   (AstZoomMap *)( *map_list )[ i2 ],
-                              ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], status );
-               } else {
-                  newmm = MatZoom( (AstMatrixMap *)( *map_list )[ i2 ], 
-                                   (AstZoomMap *)( *map_list )[ i1 ],
-                           ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], status );
-               }
-               invert = 0;
-
-            } else if( !strcmp( nclass, "PermMap" ) ){
-               if( i1 == where ){
-                  newmm = MatPerm( (AstMatrixMap *)( *map_list )[ i1 ], 
-                                   (AstPermMap *)( *map_list )[ i2 ],
-                           ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], 1, status );
-               } else {
-                  newmm = MatPerm( (AstMatrixMap *)( *map_list )[ i2 ], 
-                                   (AstPermMap *)( *map_list )[ i1 ],
-                           ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], 0, status );
-               }
-               invert = 0;
-
-            } else {
-               newmm = astClone( ( *map_list )[ where ] );
-               invert = ( *invert_list )[ where ];
-            }
-
-/* If succesfull... */
-            if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   MatrixMap. Also set the invert flag. */ 
-               (void) astAnnul( ( *map_list )[ i1 ] );
-               ( *map_list )[ i1 ] = (AstMapping *) newmm;
-               ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-               (void) astAnnul( ( *map_list )[ i2 ] );
-               for ( i = i2 + 1; i < *nmap; i++ ) {
-                  ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-                  ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-               }
-
-/* Clear the vacated element at the end. */
-               ( *map_list )[ *nmap - 1 ] = NULL;
-               ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-               ( *nmap )--;
-               result = i1;
-
-            }
-
-/* If the MatrixMap could not merge directly with either of its neighbours,
-   we consider whether it would be worthwhile to swap the MatrixMap with
-   either of its neighbours. This can only be done for certain classes
-   of Mapping (WinMaps and some PermMaps), and will usually require both 
-   Mappings to be modified (unless they are commutative). The advantage of 
-   swapping the order of the Mappings is that it may result in the MatrixMap 
-   being adjacent to a Mapping with which it can merge directly on the next
-   invocation of this function, thus reducing the number of Mappings
-   in the list. */
-         } else {
-
-/* Set a flag if we could swap the MatrixMap with its higher neighbour. "do2"
-   is returned if swapping the Mappings would simplify either of the Mappings. */
-            if( where + 1 < *nmap ){
-               swaphi = CanSwap(  ( *map_list )[ where ], 
-                                  ( *map_list )[ where + 1 ],
-                                  ( *invert_list )[ where ], 
-                                  ( *invert_list )[ where + 1 ], &do2, status );
-            } else {
-               swaphi = 0;
-               do2 = 0;
-            }
-
-/* If so, step through each of the Mappings which follow the MatrixMap, 
-   looking for a Mapping with which the MatrixMap could merge directly. Stop 
-   when such a Mapping is found, or if a Mapping is found with which the
-   MatrixMap could definitely not swap. Note the number of Mappings which 
-   separate the MatrixMap from the Mapping with which it could merge (if 
-   any). */
-            nstep2 = -1;
-            if( swaphi ){
-               for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we can merge with this Mapping. If so, note the number of steps
-   between the two Mappings and leave the loop. */
-                  nclass = astGetClass( ( *map_list )[ i2 ] );
-                  if( !strcmp( nclass, "MatrixMap" ) ||
-                      !strcmp( nclass, "ZoomMap" ) ||
-                      ( !strcmp( nclass, "PermMap" ) && PermOK( ( *map_list )[ i2 ], status ) ) ||
-                      !strcmp( nclass, "UnitMap" ) ) {
-                     nstep2 = i2 - where - 1;
-                     break;
-                  }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop 
-   with -1 for the number of steps to indicate that no merging is possible. 
-   MatrixMaps can swap with WinMaps and some permmaps. */
-                  if( strcmp( nclass, "WinMap" ) &&
-                      strcmp( nclass, "PermMap" ) ) {
-                     break;
-                  }
-
-               }
-
-            }
-
-/* Do the same working forward from the MatrixMap towards the start of the map
-   list. */
-            if( where > 0 ){
-               swaplo = CanSwap(  ( *map_list )[ where - 1 ], 
-                                  ( *map_list )[ where ],
-                                  ( *invert_list )[ where - 1 ], 
-                                  ( *invert_list )[ where ], &do1, status );
-            } else {
-               swaplo = 0;
-               do1 = 0;
-            }
-
-            nstep1 = -1;
-            if( swaplo ){
-               for( i1 = where - 1; i1 >= 0; i1-- ){
-
-                  nclass = astGetClass( ( *map_list )[ i1 ] );
-                  if( !strcmp( nclass, "MatrixMap" ) ||
-                      ( !strcmp( nclass, "PermMap" ) && PermOK( ( *map_list )[ i1 ], status ) ) ||
-                      !strcmp( nclass, "ZoomMap" ) ||
-                      !strcmp( nclass, "UnitMap" ) ) {
-                     nstep1 = where - 1 - i1;
-                     break;
-                  }
-
-                  if( strcmp( nclass, "WinMap" ) &&
-                      strcmp( nclass, "PermMap" ) ) {
-                     break;
-                  }
-
-               }
-
-            }
-
-/* Choose which neighbour to swap with so that the MatrixMap moves towards the
-   nearest Mapping with which it can merge. */
-            if( do1 || ( 
-                nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ) ){
-               nclass = class1;
-               i1 = where - 1;
-               i2 = where;
-               neighbour = i1;
-            } else if( do2 || nstep2 != -1 ){
-               nclass = class2;
-               i1 = where;
-               i2 = where + 1;
-               neighbour = i2;
-            } else {
-               nclass = NULL;
-            }
-
-/* If there is a target Mapping in the list with which the MatrixMap could 
-   merge, consider replacing the supplied Mappings with swapped Mappings to 
-   bring the MatrixMap closer to the target Mapping. */
-            if( nclass ){
-
-/* It is possible that the neighbouring Mapping with which we are about to 
-   swap could also merge with the target Mapping. When the neighbouring
-   Mapping is reconsidered it may well swap the pair back to put itself nearer 
-   the target Mapping. We need to be careful not to end up in an infinite loop 
-   in which the pair of neighbouring Mappings are constantly swapped backwards 
-   and forwards as each attempts to put itself closer to the target Mapping.
-   To prevent this, we only swap the pair of Mappings if the neighbouring
-   Mapping could not itself merge with the target Mapping. Check to see
-   if this is the case by attempting to merge the neighbouring Mapping with
-   the target Mapping. */
-               map2 = astClone( (*map_list)[ neighbour ] );
-               nmapt = *nmap - neighbour;
-               maplt = *map_list + neighbour;
-               invlt = *invert_list + neighbour;
-               result = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
-               map2 = astAnnul( map2 );
-
-/* If the above call produced a change in the  Mapping list, return the
-   remaining number of mappings.. */
-               if( result != -1 ){
-                  *nmap = nmapt + neighbour;
-
-/* Otherwise, if there was no change in the mapping list... */
-               } else {
-                  if (!strcmp( nclass, "WinMap" ) ){
-                     MatWin( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
-                  } else if( !strcmp( nclass, "PermMap" ) ){
-                     MatPermSwap( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-                  }
-
-/* Store the index of the first modified Mapping. */
-                  result = i1;
-               }
-
-/* If there is no Mapping available for merging, it may still be
-   advantageous to swap with a neighbour because the swapped Mapping may
-   be simpler than the original Mappings. For instance, a PermMap may
-   strip rows of the MatrixMap leaving only a UnitMap. */
-            } else if( swaphi || swaplo ) {
-
-/* Try swapping with each possible neighbour in turn. */
-               for( i = 0; i < 2; i++ ) {
-
-/*  Set up the class and pointers for the mappings to be swapped, first
-    the lower neighbour, then the upper neighbour. */
-                  if( i == 0 && swaplo ){
-                     nclass = class1;
-                     i1 = where - 1;
-                     i2 = where;
-
-                  } else if( i == 1 && swaphi ){
-                     nclass = class2;
-                     i1 = where;
-                     i2 = where + 1;
-
-                  } else {
-                     nclass = NULL;
-                  }
-
-/* If we have a Mapping to swap with... */
-                  if( nclass ) {
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change 
-   the supplied values. */
-                     mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
-                     mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
-                     ic[ 0 ] = ( (*invert_list) + i1 )[0];
-                     ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
-                     if( !strcmp( nclass, "WinMap" ) ){
-                        MatWin( mc, ic, where - i1, status );
-                     } else if( !strcmp( nclass, "PermMap" ) ){
-                        MatPermSwap( mc, ic, where - i1, status );
-                     }
-
-/* If neither of the swapped Mappings can be simplified further, then there
-   is no point in swapping the Mappings, so just annul the map copies. */
-                     smc0 = astSimplify( mc[0] );
-                     smc1 = astSimplify( mc[1] );
-
-                     if( astGetClass( smc0 ) == astGetClass( mc[0] ) &&
-                         astGetClass( smc1 ) == astGetClass( mc[1] ) ) {
-      
-                        mc[ 0 ] = (AstMapping *) astAnnul( mc[ 0 ] );
-                        mc[ 1 ] = (AstMapping *) astAnnul( mc[ 1 ] );
-
-/* If one or both of the swapped Mappings could be simplified, then annul
-   the supplied Mappings and return the swapped mappings, storing the index 
-   of the first modified Mapping. */
-                     } else {
-                        (void ) astAnnul( ( (*map_list) + i1 )[0] );
-                        (void ) astAnnul( ( (*map_list) + i1 )[1] );
-      
-                        ( (*map_list) + i1 )[0] = mc[ 0 ];
-                        ( (*map_list) + i1 )[1] = mc[ 1 ];
-      
-                        ( (*invert_list) + i1 )[0] = ic[ 0 ];
-                        ( (*invert_list) + i1 )[1] = ic[ 1 ];
-      
-                        result = i1;
-                        break;
-                     }
-
-/* Annul the simplied Mappings */
-                     smc0 = astAnnul( smc0 );
-                     smc1 = astAnnul( smc1 );
-
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     MatrixMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing MatrixMap. This is only possible if the specified inputs
-*     correspond to some subset of the MatrixMap outputs. That is, there
-*     must exist a subset of the MatrixMap outputs for which each output
-*     depends only on the selected MatrixMap inputs, and not on any of the
-*     inputs which have not been selected. In addition, outputs that are
-*     not in this subset must not depend on any selected inputs. If these
-*     conditions are not met by the supplied MatrixMap, then a NULL Mapping 
-*     is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap to be split (the MatrixMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied MatrixMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied MatrixMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied MatrixMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *this;        /* Pointer to MatrixMap structure */
-   double *mat;               /* Pointer to matrix for supplied MatrixMap */
-   double *pmat;              /* Pointer to row start in returned matrix */
-   double *prow;              /* Pointer to row start in supplied matrix */
-   double *rmat;              /* Pointer to matrix for returned MatrixMap */
-   double el;                 /* Next element value in supplied matrix */
-   int *result;               /* Pointer to returned array */
-   int i;                     /* Loop count */
-   int icol;                  /* Column index within supplied MatrixMap */
-   int iel;                   /* Index of next element from the input matrix */
-   int irow;                  /* Row index within supplied MatrixMap */
-   int isel;                  /* Does output depend on any selected inputs? */
-   int ncol;                  /* Number of columns (inputs) in supplied MatrixMap */
-   int nout;                  /* Number of outputs in returned MatrixMap */
-   int nrow;                  /* Number of rows (outputs) in supplied MatrixMap */
-   int ok;                    /* Are input indices OK? */
-   int sel;                   /* Does any output depend on selected inputs? */
-   int unsel;                 /* Does any output depend on unselected inputs? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
-   result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
-   if( !result ) {
-
-/* Get a pointer to the MatrixMap structure. */
-      this = (AstMatrixMap *) this_map;
-
-/* Get the number of inputs and outputs. */
-      ncol = astGetNin( this );
-      nrow = astGetNout( this );
-
-/* Check the supplied input indices are usable. */
-      ok = 1;
-      for( i = 0; i < nin; i++ ) {             
-         if( in[ i ] < 0 || in[ i ] >= ncol ) {
-            ok = 0;
-            break;
-         }
-      }
-
-      if( ok ) {
-
-/* Ensure the MatrixMap is stored in full form. */
-         ExpandMatrix( this, status );
-
-/* Allocate the largest array that could be necessary to hold the
-   returned array of Mapping outputs. */
-         result = astMalloc( sizeof(int)*(size_t) nrow );
-
-/* Allocate the largest array that could be necessary to hold the
-   matrix representing the returned MatrixMap. */
-         rmat = astMalloc( sizeof(double)*(size_t) (nrow*ncol) );
-
-/* Get the matrix which defines the current forward transformation. This
-   takes into account whether the MatrixMap has been inverted or not. */
-         if( astGetInvert( this ) ) {
-            mat = this->i_matrix;
-         } else {
-            mat = this->f_matrix;
-         }      
-
-/* We cannot create the require Mapping if the matrix is undefined. */
-         if( !mat || !astOK ) {
-            ok = 0;
-            nout = 0;
-
-/* Otherwise, loop round all the rows in the matrix. */
-         } else {
-            nout = 0;
-            pmat = rmat;
-            iel = 0;
-            for( irow = 0; irow < nrow; irow++ ) {
-
-/* Indicate that this output (i.e. row of the matrix) depends on neither 
-   selected nor unselected inputs as yet. */
-               sel = 0;
-               unsel = 0;
-
-/* Save a pointer to the first element of this row in the MatrixMap
-   matrix. */
-               prow = mat + iel;
-
-/* Loop round all the elements in the current row of the matrix. */
-               for( icol = 0; icol < ncol; icol++ ) {
-
-/* If this element is non-zero and non-bad, then output "irow" depends on
-   input "icol". */
-                  el = mat[ iel++ ];
-                  if( el != 0.0 && el != AST__BAD ) {
-
-/* Is input "icol" one of the selected inputs? */
-                     isel = 0;
-                     for( i = 0; i < nin; i++ ) {             
-                        if( in[ i ] == icol ) {
-                           isel = 1;
-                           break;
-                        }
-                     }
-
-/* If so, note that this output depends on selected inputs. Otherwise note
-   it depends on unselected inputs. */
-                     if( isel ) {
-                        sel = 1;
-                     } else  {
-                        unsel = 1;
-                     }                     
-                  }
-               }
-
-/* If this output depends only on selected inputs, we can include it in
-   the returned Mapping.*/
-               if( sel && !unsel ) {
-
-/* Store the index of the output within the original MatrixMap. */
-                  result[ nout ] = irow;
-
-/* Increment the number of outputs in the returned Mapping. */
-                  nout++;
-
-/* Copy the elements of the current matrix row which correspond to the
-   selected inputs into the new matrix. */
-                  for( i = 0; i < nin; i++ ) *(pmat++) = prow[ in[ i ] ];
-               }
-
-/* If this output depends on a selected input, but also depends on an
-   unselected input, we cannot split the MatrixMap. */
-               if( sel && unsel ) {
-                  ok = 0;
-                  break;
-               }
-            }
-         }
-
-/* If the returned Mapping can be created, create it. */
-         if( ok && nout > 0 ) {
-            *map = (AstMapping *) astMatrixMap( nin, nout, 0, rmat, "", status );
-
-/* Otherwise, free the returned array. */
-         } else {
-            result = astFree( result );
-         }
-
-/* Free resources. */
-         rmat = astFree( rmat );
-
-/* Re-compress the supplied MatrixMap. */
-         CompressMatrix( this, status );
-      }
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static AstMatrixMap *MatMat( AstMapping *map1, AstMapping *map2, int inv1, 
-                             int inv2, int *status ){
-/*
-*  Name:
-*     MatMat
-
-*  Purpose:
-*     Create a merged MatrixMap from two supplied MatrixMaps.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *MatMat( AstMapping *map1, AstMapping *map2, int inv1, 
-*                           int inv2, int *status )
-
-*  Class Membership:
-*     MatrixMap member function 
-
-*  Description:
-*     This function creates a new MatrixMap which performs a mapping
-*     equivalent to applying the two supplied MatrixMaps in series, in the 
-*     directions specified by the "invert" flags (the Invert attributes of 
-*     the supplied MatrixMaps are ignored).
-
-*  Parameters:
-*     map1
-*        A pointer to the MatrixMap to apply first.
-*     map2
-*        A pointer to the MatrixMap to apply second.
-*     inv1
-*        The invert flag to use with map1. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     inv2
-*        The invert flag to use with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new MatrixMap.
-
-*  Notes:
-*     -  The forward direction of the returned MatrixMap is equivalent to the
-*     combined effect of the two supplied MatrixMap, operating in the
-*     directions specified by "inv1" and "inv2". 
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *result;            /* Pointer to output MatrixMap */
-   int invert[ 2 ];                 /* Original invert flags */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   result = NULL;
-
-/* Temporarily set their Invert attributes to the supplied values. */
-   invert[ 0 ] = astGetInvert( map1 );
-   astSetInvert( map1, inv1 );
-
-   invert[ 1 ] = astGetInvert( map2 );
-   astSetInvert( map2, inv2 );
-   
-/* Create a new MatrixMap by multiplying them together. */
-   result = astMtrMult( (AstMatrixMap *) map1, (AstMatrixMap *) map2 );
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied MatrixMaps. */
-   astSetInvert( map1, invert[ 0 ] );
-   astSetInvert( map2, invert[ 1 ] );
-   
-/* If an error has occurred, annull the returned MatrixMap. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output MatrixMap. */
-   return result;
-}
-
-static AstMatrixMap *MatPerm( AstMatrixMap *mm, AstPermMap *pm, int minv, 
-                              int pinv, int mat1, int *status ){
-/*
-*  Name:
-*     MatPerm
-
-*  Purpose:
-*     Create a MatrixMap by merging a MatrixMap and a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *MatPerm( AstMatrixMap *mm, AstPermMap *pm, int minv, 
-*                            int pinv, int mat1, int *status )
-
-*  Class Membership:
-*     MatrixMap member function 
-
-*  Description:
-*     This function creates a new MatrixMap which performs a mapping
-*     equivalent to applying the two supplied Mappings in series in the 
-*     directions specified by the "invert" flags (the Invert attributes of 
-*     the supplied MatrixMaps are ignored). 
-
-*  Parameters:
-*     mm
-*        A pointer to the MatrixMap.
-*     pm
-*        A pointer to the PermMap.
-*     minv
-*        The invert flag to use with mm. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     pinv
-*        The invert flag to use with pm.
-*     mat1
-*        If non-zero, then "mm" is applied first followed by "pm". Otherwise, 
-*        "pm" is applied first followed by "mm".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new MatrixMap.
-
-*  Notes:
-*     -  The forward direction of the returned MatrixMap is equivalent to the
-*     combined effect of the two supplied Mappings, operating in the
-*     directions specified by "pinv" and "minv". 
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *mm2;            /* Pointer to an intermediate MatrixMap */
-   AstMatrixMap *result;         /* Pointer to output MatrixMap */
-   AstPointSet *pset1;           /* Pointer to a PointSet holding unpermuted unit vectors */
-   AstPointSet *pset2;           /* Pointer to a PointSet holding permuted unit vectors */
-   double *matrix;               /* Pointer to a matrix representing the PermMap */
-   double *p;                    /* Pointer to next matrix element */
-   double **ptr1;                /* Pointer to the data in pset1 */
-   double **ptr2;                /* Pointer to the data in pset2 */
-   int i;                        /* Axis index */
-   int j;                        /* Point index */
-   int nax;                      /* No. of axes in the PermMap */
-   int old_minv;                 /* Original setting of MatrixMap Invert attribute */
-   int old_pinv;                 /* Original setting of PermMap Invert attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   result = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   old_minv = astGetInvert( mm );
-   astSetInvert( mm, minv );
-
-   old_pinv = astGetInvert( pm );
-   astSetInvert( pm, pinv );
-
-/* Get the number of axes in the PermMap. The PermMap will have the same
-   number of input and output axes because a check has already been made on
-   it to ensure that this is so (in function PermOK). */
-   nax = astGetNin( pm );
-
-/* We first represent the PermMap as a MatrixMap containing elements with
-   values zero or one. Each row of this matrix is obtained by transforming a
-   unit vector along each axis using the inverse PermMap. Allocate memory
-   to hold the matrix array, and create a PointSet holding the unit 
-   vectors. */
-   matrix = (double *) astMalloc( sizeof( double )*(size_t)( nax*nax ) );
-
-   pset1 = astPointSet( nax, nax, "", status );
-   ptr1 = astGetPoints( pset1 );
-
-   pset2 = astPointSet( nax, nax, "", status );
-   ptr2 = astGetPoints( pset2 );
-
-   if( astOK ){
-      for( i = 0; i < nax; i++ ){
-         for( j = 0; j < nax; j++ ) ptr1[ i ][ j ] = 0.0;
-         ptr1[ i ][ i ] = 1.0;
-      }
-
-/* Transform these unit vectors using the inverse PermMap. */
-      (void) astTransform( pm, pset1, 0, pset2 );
-
-/* Copy the transformed vectors into the matrix array. */
-      p = matrix;
-      for( j = 0; j < nax; j++ ){
-         for( i = 0; i < nax; i++ ) *(p++) = ptr2[ i ][ j ];
-      }
-
-/* Create a MatrixMap holding this array. */
-      mm2 = astMatrixMap( nax, nax, 0, matrix, "", status );
-
-/* Create a new MatrixMap equal to the product of the supplied MatrixMap
-   and the MatrixMap just created from the PermMap. */
-      if( mat1 ){
-         result = astMtrMult( mm, mm2 );
-      } else {
-         result = astMtrMult( mm2, mm );
-      }
-
-/* Free everything. */
-      mm2 = astAnnul( mm2 ) ;
-   }
-
-   pset2 = astAnnul( pset2 );
-   pset1 = astAnnul( pset1 );
-   matrix = (double *) astFree( (void *) matrix );
-
-/* Re-instate the original settings of the Invert attribute for the
-   supplied Mappings. */
-   astSetInvert( mm, old_minv );
-   astSetInvert( pm, old_pinv );
-
-/* If an error has occurred, annull the returned MatrixMap. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output MatrixMap. */
-   return result;
-}
-
-static void MatPermSwap( AstMapping **maps, int *inverts, int imm, int *status ){
-/*
-*  Name:
-*     MatPermSwap
-
-*  Purpose:
-*     Swap a PermMap and a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void MatPermSwap( AstMapping **maps, int *inverts, int imm )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a PermMap and a
-*     MatrixMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a PermMap and a MatrixMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     imm
-*        The index within "maps" of the MatrixMap.
-
-*  Notes:
-*     -  There are restictions on the sorts of PermMaps which can be
-*     swapped with a MatrixMap -- see function CanSwap. It is assumed 
-*     that the supplied MatrixMap and PermMap satisfy these requirements.
-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *mm;         /* Pointer to the supplied MatrixMap */
-   AstMatrixMap *mmnew;      /* Pointer to new MatrixMap */
-   AstMatrixMap *smmnew;     /* Pointer to new simplified MatrixMap */
-   AstPermMap *pm;           /* Pointer to the supplied PermMap */
-   AstPermMap *pmnew;        /* Pointer to new PermMap */
-   AstPermMap *spmnew;       /* Pointer to new simplified PermMap */
-   double *consts;           /* Pointer to constants array */
-   double *matrix;           /* Supplied array of matrix elements */
-   double *out_el;           /* Pointer to next element of new MatrixMap */
-   double *out_mat;          /* Matrix elements for new MatrixMap */
-   double c;                 /* Constant */
-   double matel;             /* Matrix element */
-   int *inperm;              /* Pointer to input axis permutation array */
-   int *outperm;             /* Pointer to output axis permutation array */
-   int col;                  /* Index of matrix column */
-   int i;                    /* Axis count */
-   int k;                    /* Axis count */
-   int nin;                  /* No. of axes in supplied PermMap */
-   int nout;                 /* No. of axes in returned PermMap */
-   int old_pinv;             /* Invert value for the supplied PermMap */
-   int row;                  /* Index of matrix row */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   mmnew = NULL;
-   pmnew = NULL;
-
-/* Store pointers to the supplied PermMap and the MatrixMap. */
-   pm = (AstPermMap *) maps[ 1 - imm ];
-   mm = (AstMatrixMap *) maps[ imm ];
-
-/* Temporarily set the Invert attribute of the supplied PermMap to the
-   supplied value. */
-   old_pinv = astGetInvert( pm );
-   astSetInvert( pm, inverts[ 1 - imm ] );
-
-/* Ensure the MatrixMap is stored in full form. */
-   ExpandMatrix( mm, status );
-
-/* Store a pointer to the required array of matrix elements. */
-   if( inverts[ imm ] ) {
-      matrix = mm->i_matrix;
-   } else {
-      matrix = mm->f_matrix;
-   }
-
-/* Get the number of input and output axes of the PermMap. */
-   nin = astGetNin( pm );
-   nout = astGetNout( pm );
-
-/* Allocate memory to hold the matrix elements for the swapped MatrixMap.
-   The number of rows and olumns in the new matrix must equal the number of
-   input or output axes for the PermMap, depending on whether the PermMap
-   or MatrixMap is applied first. */
-   if( imm == 0 ) {
-      out_mat = (double *) astMalloc( sizeof( double )*(size_t)( nout*nout ) );
-   } else {
-      out_mat = (double *) astMalloc( sizeof( double )*(size_t)( nin*nin ) );
-   }
-
-/* We need to know the axis permutation arrays and constants array for
-   the PermMap. */
-   PermGet( pm, &outperm, &inperm, &consts, status );
-   if( astOK ) {
-
-/* First deal with cases where the MatrixMap is applied first. */
-      if( imm == 0 ) {
-
-/* Consider each output axis of the PermMap. */
-         for( i = 0; i < nout; i++ ) {
-
-/* If this output is connected to one of the input axes... */
-            row = outperm[ i ];
-            if( row >= 0 && row < nin ) {
-
-/* Permute the row of the supplied matrix which feeds the corresponding 
-   PermMap input axis (i.e. axis outperm[k] ) using the forward PermMap. 
-   Store zeros for any output axes which are assigned constants. This forms 
-   row i of the new MatrixMap. */
-               out_el = out_mat + nout*i;
-               for( k = 0; k < nout; k++ ){
-                  col = outperm[ k ];
-                  if( col >= 0 && col < nin ) {
-                     *(out_el++) = *( matrix + nin*row + col );
-                  } else {
-                     *(out_el++) = 0.0;
-                  }
-               }
-
-/* If this output is asigned a constant value, use a "diagonal" vector for
-   row i of the new MatrixMap (i.e. all zeros except for a 1.0 in column
-   i ). */
-            } else {
-               out_el = out_mat + nout*i;
-               for( k = 0; k < nout; k++ ) {
-                  if( k != i ) {
-                     *(out_el++) = 0.0;
-                  } else {
-                     *(out_el++) = 1.0;
-                  }               
-               }
-            }
-         }
-
-/* Create the new MatrixMap. */
-         mmnew = astMatrixMap( nout, nout, 0, out_mat, "", status );
-
-/* Any PermMap inputs which are assigned a constant value need to be
-   changed now, since they will no longer be scaled by the inverse
-   MatrixMap. CanSwap ensures that the inverse MatrixMap produces a
-   simple scaling for constant axes, so we change the PermMap constant
-   to be the constant AFTER scaling by the inverse MatrixMap. 
-
-   Consider each input axis of the PermMap. */
-         for( i = 0; i < nin; i++ ) {
-
-/* If this input is assigned a constant value... */
-            if( inperm[ i ] < 0 ) {
-
-/* Divide the supplied constant value by the corresponding diagonal term 
-   in the supplied MatrixMap. */
-               c = consts[ -inperm[ i ] - 1 ];
-               if( c != AST__BAD ) {
-                  matel = matrix[ i*( nin + 1 ) ];
-                  if( matel != 0.0 && matel != AST__BAD ) {
-                     consts[ -inperm[ i ] - 1 ] /= matel;
-                  } else {
-                     consts[ -inperm[ i ] - 1 ] = AST__BAD;
-                  }
-               }
-            }
-         }
-
-/* Now deal with cases where the PermMap is applied first. */
-      } else {
-
-/* Consider each input axis of the PermMap. */
-         for( i = 0; i < nin; i++ ) {
-
-/* If this input is connected to one of the output axes... */
-            row = inperm[ i ];
-            if( row >= 0 && row < nout ) {
-
-/* Permute the row of the supplied matrix which feeds the corresponding 
-   PermMap output axis (i.e. axis inperm[k] ) using the inverse PermMap. 
-   Store zeros for any input axes which are assigned constants. This forms 
-   row i of the new MatrixMap. */
-               out_el = out_mat + nin*i;
-               for( k = 0; k < nin; k++ ){
-                  col = inperm[ k ];
-                  if( col >= 0 && col < nout ) {
-                     *(out_el++) = *( matrix + nout*row + col );
-                  } else {
-                     *(out_el++) = 0.0;
-                  }
-               }
-
-/* If this input is asigned a constant value, use a "diagonal" vector for
-   row i of the new MatrixMap (i.e. all zeros except for a 1.0 in column
-   i ). */
-            } else {
-               out_el = out_mat + nin*i;
-               for( k = 0; k < nin; k++ ) {
-                  if( k != i ) {
-                     *(out_el++) = 0.0;
-                  } else {
-                     *(out_el++) = 1.0;
-                  }               
-               }
-            }
-         }
-
-/* Create the new MatrixMap. */
-         mmnew = astMatrixMap( nin, nin, 0, out_mat, "", status );
-
-/* Any PermMap outputs which are assigned a constant value need to be
-   changed now, since they will no longer be scaled by the forward
-   MatrixMap. CanSwap ensures that the forward MatrixMap produces a
-   simple scaling for constant axes, so we change the PermMap constant
-   to be the constant AFTER scaling by the forward MatrixMap. 
-
-   Consider each output axis of the PermMap. */
-         for( i = 0; i < nout; i++ ) {
-
-/* If this output is assigned a constant value... */
-            if( outperm[ i ] < 0 ) {
-
-/* Multiple the supplied constant value by the corresponding diagonal term in 
-   the supplied MatrixMap. */         
-               c = consts[ -outperm[ i ] - 1 ];
-               if( c != AST__BAD ) {
-                  matel = matrix[ i*( nout + 1 ) ];
-                  if( matel != AST__BAD ) {
-                     consts[ -outperm[ i ] - 1 ] *= matel;
-                  } else {
-                     consts[ -outperm[ i ] - 1 ] = AST__BAD;
-                  }
-               }
-            }
-         }
-      }
-
-/* Create a new PermMap (since the constants may have changed). */
-      pmnew = astPermMap( nin, inperm, nout, outperm, consts, "", status );
-
-/* Free the axis permutation and constants arrays. */
-      outperm = (int *) astFree( (void *) outperm );
-      inperm = (int *) astFree( (void *) inperm );
-      consts = (double *) astFree( (void *) consts );
-   }
-
-/* Free the memory used to hold the new matrix elements. */
-   out_mat = (double *) astFree( (void *) out_mat );
-
-/* Ensure the supplied MatrixMap is stored back in compressed form. */
-   CompressMatrix( mm, status );
-
-/* Re-instate the original value of the Invert attribute of the supplied 
-   PermMap. */
-   astSetInvert( pm, old_pinv );
-
-   if( astOK ) {
-
-/* Annul the supplied PermMap. */
-      (void) astAnnul( pm );
-
-/* Simplify the returned Mappings. */
-      spmnew = astSimplify( pmnew );
-      pmnew = astAnnul( pmnew );
-
-      smmnew = astSimplify( mmnew );
-      mmnew = astAnnul( mmnew );
-
-/* Store a pointer to the new PermMap in place of the supplied MatrixMap. This 
-   PermMap should be used in its forward direction. */
-      maps[ imm ] = (AstMapping *) spmnew; 
-      inverts[ imm ] = astGetInvert( spmnew );
-
-/* Annul the supplied matrixMap. */
-      (void) astAnnul( mm );
-
-/* Store a pointer to the new MatrixMap. This MatrixMap should be used in
-   its forward direction. */
-      maps[ 1 - imm ] = (AstMapping *) smmnew;
-      inverts[ 1 - imm ] = astGetInvert( smmnew );
-   }      
-
-/* Return. */
-   return;
-}
-
-static void MatWin( AstMapping **maps, int *inverts, int imm, int *status ){
-/*
-*  Name:
-*     MatWin
-
-*  Purpose:
-*     Swap a WinMap and a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void MatWin( AstMapping **maps, int *inverts, int imm, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a WinMap and a
-*     MatrixMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a WinMap and a MatrixMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-*     The scale factors in the returned WinMap are always unity (i.e. 
-*     the differences in scaling get absorbed into the returned
-*     MatrixMap).
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     imm
-*        The index within "maps" of the MatrixMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *m1;             /* Pointer to Diagonal scale factor MatrixMap */
-   AstMatrixMap *m2;             /* Pointer to returned MatrixMap */
-   AstMatrixMap *sm2;            /* Pointer to simplified returned MatrixMap */
-   AstMatrixMap *mm;             /* Pointer to the supplied MatrixMap */
-   AstPointSet *pset1;           /* Shift terms from supplied WinMap */
-   AstPointSet *pset2;           /* Shift terms for returned WinMap */
-   AstWinMap *w1;                /* Pointer to the returned WinMap */
-   AstWinMap *sw1;               /* Pointer to the simplified returned WinMap */
-   AstWinMap *wm;                /* Pointer to the supplied WinMap */
-   double **ptr1;                /* Pointer to pset1 data */
-   double **ptr2;                /* Pointer to pset2 data */
-   double *a;                    /* Array of shift terms from supplied WinMap */
-   double *aa;                   /* Pointer to next shift term */
-   double *b;                    /* Array of scale terms from supplied WinMap */
-   double *bb;                   /* Pointer to next scale term */
-   int i;                        /* Axis count */
-   int nin;                      /* No. of axes in supplied WinMap */
-   int nout;                     /* No. of axes in returned WinMap */
-   int old_minv;                 /* Invert value for the supplied MatrixMap */
-   int old_winv;                 /* Invert value for the supplied WinMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store pointers to the supplied WinMap and the MatrixMap. */
-   wm = (AstWinMap *) maps[ 1 - imm ];
-   mm = (AstMatrixMap *) maps[ imm ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
-   supplied values. */
-   old_winv = astGetInvert( wm );
-   astSetInvert( wm, inverts[ 1 - imm ] );
-
-   old_minv = astGetInvert( mm );
-   astSetInvert( mm, inverts[ imm ] );
-
-/* Get copies of the shift and scale terms used by the WinMap. This
-   also returns the number of axes in the WinMap. */
-   nin = astWinTerms( wm, &a, &b );   
-
-/* Create a diagonal MatrixMap holding the scale factors from the
-   supplied WinMap. */
-   m1 = astMatrixMap( nin, nin, 1, b, "", status );
-
-/* Create a PointSet holding a single position given by the shift terms
-   in the supplied WinMap. */
-   pset1 = astPointSet( 1, nin, "", status );
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ){
-      aa = a;
-      for( i = 0; i < nin; i++ ) ptr1[ i ][ 0 ] = *(aa++);
-   }
-
-/* First deal with cases when the WinMap is applied first, followed by
-   the MatrixMap. */
-   if( imm == 1 ){
-
-/* Multiply the diagonal matrix holding the WinMap scale factors by the 
-   supplied matrix. The resulting MatrixMap is the one to return in the 
-   map list. */
-      m2 = astMtrMult( m1, mm );
-
-/* Transform the position given by the shift terms from the supplied
-   WinMap using the supplied MatrixMap to get the shift terms for 
-   the returned WinMap. */
-      pset2 = astTransform( mm, pset1, 1, NULL );
-
-/* Now deal with cases when the MatrixMap is applied first, followed by
-   the WinMap. */
-   } else {
-
-/* Multiply the supplied MatrixMap by the diagonal matrix holding scale
-   factors from the supplied WinMap. The resulting MatrixMap is the one to 
-   return in the map list. */
-      m2 = astMtrMult( mm, m1 );
-
-/* Transform the position given by the shift terms from the supplied
-   WinMap using the inverse of the returned MatrixMap to get the shift 
-   terms for the returned WinMap. */
-      pset2 = astTransform( m2, pset1, 0, NULL );
-
-   }
-
-/* Re-instate the original value of the Invert attributes of the supplied 
-   Mappings. */
-   astSetInvert( wm, old_winv );
-   astSetInvert( mm, old_minv );
-
-/* Get pointers to the shift terms for the returned WinMap. */
-   ptr2 = astGetPoints( pset2 ); 
-
-/* Create the returned WinMap, initially with undefined corners. The number of
-   axes in the WinMap must equal the number of shift terms. */
-   nout = astGetNcoord( pset2 );
-   w1 = astWinMap( nout, NULL, NULL, NULL, NULL, "", status );
-
-/* If succesful, store the scale and shift terms in the WinMap. The scale
-   terms are always unity. */
-   if( astOK ){
-      bb = w1->b;
-      aa = w1->a;
-      for( i = 0; i < nout; i++ ) {
-         *(bb++) = 1.0;
-         *(aa++) = ptr2[ i ][ 0 ];
-      }
-
-/* Replace the supplied Mappings and invert flags with the ones found
-   above. Remember that the order of the Mappings is now swapped */
-      (void) astAnnul( maps[ 0 ] );
-      (void) astAnnul( maps[ 1 ] );
-
-      sw1 = astSimplify( w1 );
-      w1 = astAnnul( w1 );
-
-      maps[ imm ] = (AstMapping *) sw1;
-      inverts[ imm  ] = astGetInvert( sw1 );
-
-      sm2 = astSimplify( m2 );
-      m2 = astAnnul( m2 );
-
-      maps[ 1 - imm ] = (AstMapping *) sm2;
-      inverts[ 1 - imm  ] = astGetInvert( sm2 );
-
-   }
-
-/* Annul the MatrixMap and PointSet holding the scale and shift terms from the
-   supplied WinMap. */
-   m1 = astAnnul( m1 );
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
-   b = (double *) astFree( (void *) b );
-   a = (double *) astFree( (void *) a );
-
-/* Return. */
-   return;
-}
-
-static AstMatrixMap *MatZoom( AstMatrixMap *mm, AstZoomMap *zm, int minv, 
-                              int zinv, int *status ){
-/*
-*  Name:
-*     MatZoom
-
-*  Purpose:
-*     Create a MatrixMap by merging a MatrixMap and a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *MatZoom( AstMatrixMap *mm, AstZoomMap *zm, int minv, 
-*                            int zinv, int *status )
-
-*  Class Membership:
-*     MatrixMap member function 
-
-*  Description:
-*     This function creates a new MatrixMap which performs a mapping
-*     equivalent to applying the two supplied Mappings in series in the 
-*     directions specified by the "invert" flags (the Invert attributes of 
-*     the supplied MatrixMaps are ignored). 
-
-*  Parameters:
-*     mm
-*        A pointer to the MatrixMap.
-*     zm
-*        A pointer to the ZoomMap.
-*     minv
-*        The invert flag to use with mm. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     zinv
-*        The invert flag to use with zm.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new MatrixMap.
-
-*  Notes:
-*     -  The forward direction of the returned MatrixMap is equivalent to the
-*     combined effect of the two supplied Mappings, operating in the
-*     directions specified by "zinv" and "minv". 
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *mm2;            /* Pointer to intermediate MatrixMap */
-   AstMatrixMap *result;         /* Pointer to output MatrixMap */
-   double *matrix;               /* Pointer to diagonal matrix elements array */
-   double zfac;                  /* Zoom factor */
-   int i;                        /* Axis index */
-   int nrow;                     /* No. of rows in the MatrixMap */
-   int old_minv;                 /* Original setting of MatrixMap Invert attribute */
-   int old_zinv;                 /* Original setting of ZoomMap Invert attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   result = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   old_minv = astGetInvert( mm );
-   astSetInvert( mm, minv );
-
-   old_zinv = astGetInvert( zm );
-   astSetInvert( zm, zinv );
-
-/* Get the number of rows in the MatrixMap (i.e. the number of output
-   axes). */
-   nrow = astGetNout( mm );
-   
-/* Get the zoom factor implemented by the ZoomMap. Invert it if necessary
-   since astGetZoom does not take account of the Invert setting.  */
-   zfac = astGetZoom( zm );
-   if( zinv ) zfac = 1.0 / zfac;
-
-/* Create a diagonal matrix map in which each diagonal element is equal
-   to the zoom factor. */
-   matrix = (double *) astMalloc( sizeof( double )*(size_t) nrow );
-   if( astOK ) {
-      for( i = 0; i < nrow; i++ ) matrix[ i ] = zfac;
-   }
-   mm2 = astMatrixMap( nrow, nrow, 1, matrix, "", status );
-   matrix = (double *) astFree( (void *) matrix );
-
-/* Create a new MatrixMap holding the product of the supplied MatrixMap
-   and the diagonal MatrixMap just created. */
-   result = astMtrMult( mm, mm2 );
-   mm2 = astAnnul( mm2 );
-
-/* Re-instate the original settings of the Invert attribute for the
-   supplied Mappings. */
-   astSetInvert( mm, old_minv );
-   astSetInvert( zm, old_zinv );
-
-/* If an error has occurred, annull the returned MatrixMap. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output MatrixMap. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-static AstMatrixMap *MtrMult( AstMatrixMap *this, AstMatrixMap *a, int *status ){
-/*
-*+
-*  Name:
-*     astMtrMult
-
-*  Purpose:
-*     Multiply a MatrixMap by another MatrixMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *MtrMult( astMatrixMap *this, astMatrixMap *a )
-
-*  Class Membership:
-*     MatrixMap method
-
-*  Description:
-*     This function multiples the matrices given by "this" and "a", returning
-*     a pointer to a new MatrixMap holding the product "a x this".
-*
-*     The number of columns in the "a" matrix must match the number of
-*     rows in the "this" matrix. The number of rows in the returned 
-*     MatrixMap is equal to the number of rows in "a", and the number of
-*     columns is the same as the number of rows in "this".
-
-*  Parameters:
-*     this
-*        Pointer to the first MatrixMap.
-*     a 
-*        Pointer to a second MatrixMap.
-
-*  Returned Value:
-*     A pointer to the product MatrixMap.
-
-*  Notes:
-*     -  An error is reported if the two MatrixMaps have incompatible
-*     shapes, or if either MatrixMap does not have a defined forward
-*     transformation.
-*     - A null Object pointer will also be returned if this function
-*     is invoked with the AST error status set, or if it should fail
-*     for any reason.
-*-
-*/
-
-/* Local variables. */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-   AstMatrixMap *new;        /* New MatrixMap holding the product matrix */
-   double *a_matrix;         /* Pointer to the forward "a" matrix */
-   double *a_row;            /* Pointer to start of current row in "a" */
-   double a_val;             /* Current element value from "a" */
-   double factor;            /* Diagonal matrix term */
-   double *new_matrix;       /* Pointer to the new forward "this" matrix */
-   double *new_val;          /* Pointer to current output element value */
-   double sum;               /* Dot product value */
-   double *this_col;         /* Pointer to start of current column in "this" */
-   double *this_matrix;      /* Pointer to the forward "this" matrix */
-   double this_val;          /* Current element value from "this" */
-   int col;                  /* Current output column number */
-   int i;                    /* Loop count */
-   int minrow;               /* Min. number of rows in "a" or "this" */
-   int ncol_a;               /* No. of columns in the "a" MatrixMap */
-   int ncol_this;            /* No. of columns in the "this" MatrixMap */
-   int nrow_a;               /* No. of rows in the "a" MatrixMap */
-   int nrow_this;            /* No. of rows in the "this" MatrixMap */
-   int row;                  /* Current output row number */
-
-/* Return a NULL pointer if an error has already occurred. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise */
-   new = NULL;
-
-/* Report an error if eitherof the MatrixMaps doe snot have a defined
-   forward transformation.*/
-   if( !astGetTranForward( this ) ){
-      astError( AST__MTRML, "astMtrMult(%s): Cannot find the product of 2 "
-                "MatrixMaps- the first MatrixMap has no forward transformation.", status,
-                astClass(this) ); 
-      return NULL;
-   }
-
-   if( !astGetTranInverse( this ) ){
-      astError( AST__MTRML, "astMtrMult(%s): Cannot find the product of 2 "
-                "MatrixMaps- the second MatrixMap has no forward transformation.", status,
-                astClass(this) ); 
-      return NULL;
-   }
-
-/* Report an error if the shapes of the two matrices are incompatible. */
-   nrow_a = astGetNout( a );
-   ncol_a = astGetNin( a );
-   nrow_this = astGetNout( this );
-   ncol_this = astGetNin( this );
-
-   if( ncol_a != nrow_this && astOK ){
-      astError( AST__MTRML, "astMtrMult(%s): Number of rows in the first "
-                "MatrixMap (%d) does not equal number of columns in the "
-                "second MatrixMap (%d).", status, astClass(this), nrow_this, ncol_a ); 
-      return NULL;
-   }
-
-/* Store the minimum number of rows in either matrix for later use. */
-   if( nrow_a < nrow_this ){
-      minrow = nrow_a;
-   } else {
-      minrow = nrow_this;
-   }
-
-/* Ensure that "this" is stored in FULL form (i.e. with all elements
-   stored explicitly, even if the matrix is a unit or diagonal matrix). */
-   ExpandMatrix( this, status );
-
-/* Store pointers to the current forward matrices (taking into 
-   account the current states of the Mapping inversion flags ). */
-   this_matrix = astGetInvert( this ) ? this->i_matrix : this->f_matrix;
-   a_matrix = astGetInvert( a ) ? a->i_matrix : a->f_matrix;
-
-/* Get memory to hold the product matrix in full form. */
-   new_matrix = (double *) astMalloc( sizeof( double )*
-                                      (size_t)( nrow_a*ncol_this ) );
-   if( astOK ){
-
-/* First deal with cases where the "a" MatrixMap represents a unit
-   matrix. */
-      if( a->form == UNIT ){
-
-/* Copy the required number of rows from "this" to "new". */
-         (void) memcpy( (void *) new_matrix, (const void *) this_matrix, 
-                         sizeof(double)*(size_t)( minrow*ncol_this ) );
-
-/* If there are insufficient rows in "this", append some zero-filled rows. */
-         if( minrow < nrow_a ){
-            for( i = minrow*ncol_this; i < nrow_a*ncol_this; i++ ){
-               new_matrix[ i ] = 0.0;
-            }
-         }
-
-/* Now deal with cases where the "a" MatrixMap represents a diagonal
-   matrix. */
-      } else if( a->form == DIAGONAL ){
-
-/* Scale the required number of rows from "this" storing them in "new",
-   and checking for bad values. */
-         i = 0;
-
-         for( row = 0; row < minrow; row++ ){
-            factor = a_matrix[ row ];
-
-            if( factor != AST__BAD ){
-
-               for( col = 0; col < ncol_this; col++ ){
-                  this_val = this_matrix[ i ];
-                  if( this_val != AST__BAD ){
-                     new_matrix[ i ] = this_val*factor;
-                  } else {                  
-                     new_matrix[ i ] = AST__BAD;
-                  }
-                  i++;
-               }
-
-            } else {
-
-               for( col = 0; col < ncol_this; col++ ){
-                  new_matrix[ i++ ] = AST__BAD;
-               }
-
-            }
-         }
-
-/* If there are insufficient rows in "this", append some zero-filled rows. */
-         if( minrow < nrow_a ){
-            for( i = minrow*ncol_this; i < nrow_a*ncol_this; i++ ){
-               new_matrix[ i ] = 0.0;
-            }
-         }
-
-
-/* Now deal with cases where the "a" MatrixMap represents a full, non-diagonal
-   matrix. */
-      } else {
-
-/* Initialise a pointer to the next element in the product matrix. */
-         new_val = new_matrix;
-         
-/* Get a pointer to the start of each row of the "a" matrix. */
-         for( row = 0; row < nrow_a; row++ ){
-            a_row = a_matrix + ncol_a*row;
-
-/* Get a pointer to the start of each column of the "this" matrix. */
-            for( col = 0; col < ncol_this; col++ ){
-               this_col = this_matrix + col;
-
-/* Form the dot product of the current row from "a", and the current
-   column from "this", checking for bad values. */
-               sum = 0.0;
-               for( i = 0; i < ncol_a; i++ ){
-                  a_val = a_row[ i ];
-                  this_val = this_col[ i*ncol_this ];
-                  if( a_val != AST__BAD && this_val != AST__BAD ){
-                     sum += a_val*this_val;
-                  } else {
-                     sum = AST__BAD;
-                     break;
-                  }
-               }
-
-/* Store the output matrix element value. */
-               *(new_val++) = sum;
-
-            }
-         }
-      }
-
-/* Create the new MatrixMap. */
-      new = astInitMatrixMap( NULL, sizeof( AstMatrixMap ), !class_init, 
-                              &class_vtab, "MatrixMap", ncol_this, nrow_a, 
-                              FULL, new_matrix );
-
-/* If possible, compress the new MatrixMap by removing off-diagonal zero
-   elements. */
-      CompressMatrix( new, status );
-
-/* Re-compress the original "this" MatrixMap. */
-      CompressMatrix( this, status );
-
-   }
-
-/* Free the memory used to hold the product matrix in full form. */
-   new_matrix = (double *) astFree( (void *) new_matrix );
-
-   return new;
-
-}
-
-static AstMatrixMap *MtrRot( AstMatrixMap *this, double theta, 
-                             const double axis[], int *status ){
-/*
-*+
-*  Name:
-*     astMtrRot
-
-*  Purpose:
-*     Multiply a MatrixMap by a rotation matrix.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *astMtrRot( astMatrixMap *this, double theta, 
-*                              const double axis[] )
-
-*  Class Membership:
-*     MatrixMap method.
-
-*  Description:
-*     This function creates a new MatrixMap which is a copy of "this", 
-*     rotated by a specified angle. It can only be used on MatrixMaps which 
-*     have either 2 or 3 output coordinates. In the 3-D case, the rotation 
-*     is about an arbitrary axis passing through the origin.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap.
-*     theta
-*        The angle by which to rotate the matrix, in radians. If the matrix
-*        is applied to a 2-D vector position, the resulting vector is
-*        rotated clockwise about the origin (i.e. from the positive direction 
-*        of the second axis to the positive direction of the first axis). If 
-*        the vector positions are three dimensional, the rotation is clockwise 
-*        when looking along the vector given by "axis". Note, "theta" measures 
-f        when looking along the vector given by AXIS. Note, THETA measures 
-*        the movemement of the vectors relative to a fixed reference frame. 
-*        Alternatively, the reference frame can be thought of as rotating by 
-*        (-theta) relative to the fixed vectors.
-*     axis
-*        A 3-D vector specifying the axis of rotation. This parameter is 
-*        ignored if the output from MatrixMap is 2-dimensional.
-
-*  Returned Value:
-*     A pointer to the rotated MatrixMap.
-
-*  Notes:
-*     - A null Object pointer will also be returned if this function
-*     is invoked with the AST error status set, or if it should fail
-*     for any reason.
-*-
-*/
-
-/* Local variables. */
-   AstMatrixMap *new;        /* New MatrixMap holding the rotated matrix */
-   double as,a,b,c,d,e,f,g;  /* Intermediate quantities */
-   double axlen;             /* Length of axis vector */
-   double axlen2;            /* Squared length of axis vector */
-   double costh;             /* Cos(rotation angle) */
-   double sinth;             /* Sin(rotation angle) */
-   double rotmat[9];         /* Rotation matrix */
-   double work[3];           /* Work space for matrix multiplication */
-   int ncol;                 /* No. of columns in the MatrixMap */
-   int nrow;                 /* No. of rows in the MatrixMap */
-
-/* Return a NULL pointer if an error has already occurred. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned MarixMap to be a copy of the supplied MatrixMap. */
-   new = astCopy( this );
-
-/* Save the cos and sin of the rotation angle for future use. */
-   costh = cos( theta );
-   sinth = sin( theta );
-
-/* Return without changing the MatrixMap if the rotation angle is a 
-   multiple of 360 degrees. */
-   if ( costh == 1.0 ) return new;
-
-/* Get the dimensions of the MatrixMap. */
-   nrow = astGetNout( new );
-   ncol = astGetNin( new );
-
-/* First do rotation of a plane about the origin. */
-   if( nrow == 2 ){
-
-/* Ensure that the MatrixMap is stored in full form rather than 
-   compressed form. */
-      ExpandMatrix( new, status );
-
-/* Form the 2x2 forward rotation matrix. Theta is the clockwise angle 
-   of rotation. */
-      rotmat[0] = costh;
-      rotmat[1] = sinth;
-      rotmat[2] = -sinth;
-      rotmat[3] = costh;
-
-/*  Post-multiply the current forward matrix (depending on whether or not 
-    the MatrixMap has been inverted) by the forward rotation matrix. */      
-      if( !astGetInvert( new ) ){  
-         SMtrMult( 1, 2, ncol, rotmat, new->f_matrix, work, status );
-      } else {
-         SMtrMult( 1, 2, ncol, rotmat, new->i_matrix, work, status );
-      }
-       
-/* Now form the 2x2 inverse rotation matrix (the diagonal elements 
-   don't change). */
-      rotmat[1] = -sinth;
-      rotmat[2] = sinth;
-       
-/*  Pre-multiply the current inverse matrix (depending on whether or 
-    not the MatrixMap has been inverted) by the inverse rotation matrix. */      
-      if( !astGetInvert( new ) ){ 
-         SMtrMult( 0, ncol, 2, rotmat, new->i_matrix, work, status );
-      } else {
-         SMtrMult( 0, ncol, 2, rotmat, new->f_matrix, work, status );
-      }
-
-/*  See if the matrix can be stored as a UNIT or DIAGONAL matrix. */      
-      CompressMatrix( new, status );
-
-/* Now do rotation of a volume about an axis passing through the origin. */   
-   } else if( nrow == 3 ){
-
-/* Find the length of the axis vector. Report an error if it has zero 
-   length or has not been supplied. */
-      if( axis ) {
-         axlen2 = axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2];
-      } else {
-         axlen2 = 0.0;
-      }
-      if( axlen2 <= 0.0 ) {
-         astError( AST__MTRAX, "astMtrRot(%s): NULL or zero length "
-                   "axis vector supplied.", status, astClass(new) ); 
-      }
-      axlen = sqrt( axlen2 );
-   
-/* Ensure that the MatrixMap is stored in full form rather than 
-   compressed form. */
-      ExpandMatrix( new, status );
-
-/* Form commonly used terms in the rotation matrix. */
-      as = sinth/axlen;
-      a = (1.0 - costh)/axlen2;
-      b = a*axis[0]*axis[1];
-      c = as*axis[2];
-      d = a*axis[0]*axis[2];
-      e = as*axis[1];
-      f = a*axis[1]*axis[2];
-      g = as*axis[0];
-
-/* Form the 3x3 forward rotation matrix. Theta is the clockwise angle 
-   of rotation looking in the direction of the axis vector. */
-      rotmat[0] = a*axis[0]*axis[0] + costh;
-      rotmat[1] = b - c;
-      rotmat[2] = d + e;
-      rotmat[3] = b + c;
-      rotmat[4] = a*axis[1]*axis[1] + costh;
-      rotmat[5] = f - g;
-      rotmat[6] = d - e;
-      rotmat[7] = f + g;
-      rotmat[8] = a*axis[2]*axis[2] + costh;
-
-/*  Post-multiply the current forward matrix (depending on whether or not 
-    the MatrixMap has been inverted) by the forward rotation matrix. */      
-      if( !astGetInvert( new ) ){  
-         SMtrMult( 1, 3, ncol, rotmat, new->f_matrix, work, status );
-      } else {
-         SMtrMult( 1, 3, ncol, rotmat, new->i_matrix, work, status );
-      }
-       
-/* Now form the 3x3 inverse rotation matrix (the diagonal elements 
-   don't change). */
-      rotmat[1] = b + c;
-      rotmat[2] = d - e;
-      rotmat[3] = b - c;
-      rotmat[5] = f + g;
-      rotmat[6] = d + e;
-      rotmat[7] = f - g;
-       
-/* Pre-multiply the current inverse matrix (depending on whether or 
-   not the MatrixMap has been inverted) by the inverse rotation matrix. */      
-      if( !astGetInvert( new ) ){  
-         SMtrMult( 0, ncol, 3, rotmat, new->i_matrix, work, status );
-      } else {
-         SMtrMult( 0, ncol, 3, rotmat, new->f_matrix, work, status );
-      }
-
-/*  See if the matrix can be stored as a UNIT or DIAGONAL matrix. */      
-      CompressMatrix( new, status );
-
-/* Report an error if the matrix is not suitable for rotation. */
-   } else {
-      astError( AST__MTR23, "astMtrRot(%s): Cannot rotate a %dx%d"
-                " MatrixMap.", status, astClass(new), nrow, ncol );
-   }
-
-/* Delete the new MatrixMap if an error has occurred. */
-   if( !astOK ) new = astDelete( new );
-   
-   return new;
-   
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-                     double **consts, int *status ){
-/*
-*  Name:
-*     PermGet
-
-*  Purpose:
-*     Get the axis permutation and constants array for a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-*                   double **const, int *status )
-
-*  Class Membership:
-*     MatrixMap member function 
-
-*  Description:
-*     This function returns axis permutation and constants arrays which can
-*     be used to create a PermMap which is equivalent to the supplied PermMap.
-
-*  Parameters:
-*     map
-*        The PermMap.
-*     outperm
-*        An address at which to return a popinter to an array of ints
-*        holding the output axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     inperm
-*        An address at which to return a popinter to an array of ints
-*        holding the input axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     consts
-*        An address at which to return a popinter to an array of doubles
-*        holding the constants array. The array should be released using 
-*        astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  NULL pointers are returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* PointSet holding input positions for PermMap */
-   AstPointSet *pset2;       /* PointSet holding output positions for PermMap */
-   double **ptr1;            /* Pointer to pset1 data */
-   double **ptr2;            /* Pointer to pset2 data */
-   double *cnst;             /* Pointer to constants array */
-   double cn;                /* Potential new constant value */
-   double ip;                /* Potential output axis index */
-   double op;                /* Potential input axis index */
-   int *inprm;               /* Pointer to input axis permutation array */
-   int *outprm;              /* Pointer to output axis permutation array */
-   int i;                    /* Axis count */
-   int nc;                   /* Number of constants stored so far */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
-   if( outperm ) *outperm = NULL;
-   if( inperm ) *inperm = NULL;
-   if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
-   if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Get the number of input and output axes for the supplied PermMap. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
-   outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
-   inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
-   cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
-   *outperm = outprm;
-   *inperm = inprm;
-   *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
-   input and output positions with the PermMap. */
-   pset1 = astPointSet( 2, nin, "", status );
-   pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
-   first position is used to enumerate the axes, and the second is used to 
-   check for constant axis values. */
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ){
-      for( i = 0; i < nin; i++ ){
-         ptr1[ i ][ 0 ] = ( double ) i;
-         ptr1[ i ][ 1 ] = -1.0;
-      }
-   }
-
-/* Use the PermMap to transform these positions in the forward direction. */
-   (void) astTransform( map, pset1, 1, pset2 );
-
-/* No constant axis valeus found yet. */
-   nc = 0;
-
-/* Look at the mapped positions to determine the output axis permutation
-   array. */
-   ptr2 = astGetPoints( pset2 );
-   if( astOK ){
-
-/* Do each output axis. */
-      for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
-   of the appropriate input axis will be in the mapped first position. */
-         op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of 
-   mapping the two different input axis values will be the same. */
-         cn = ptr2[ i ][ 1 ];
-         if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
-   store the index of the constant in the output axis permutation array. */
-            cnst[ nc ] = cn;
-            outprm[ i ] = -( nc + 1 );
-            nc++;
-
-/* If the output axis values are different, then the output axis value 
-   must be copied from the input axis value. */
-         } else {
-            outprm[ i ] = (int) ( op + 0.5 );
-         }
-      }
-   }
-    
-/* Now do the same thing to determine the input permutation array. */
-   if( astOK ){
-      for( i = 0; i < nout; i++ ){
-         ptr2[ i ][ 0 ] = ( double ) i;
-         ptr2[ i ][ 1 ] = -1.0;
-      }
-   }
-
-   (void) astTransform( map, pset2, 0, pset1 );
-
-   if( astOK ){
-
-      for( i = 0; i < nin; i++ ){
-
-         ip = ptr1[ i ][ 0 ];
-         cn = ptr1[ i ][ 1 ];
-         if( ip == cn ) {
-
-            cnst[ nc ] = cn;
-            inprm[ i ] = -( nc + 1 );
-            nc++;
-
-         } else {
-            inprm[ i ] = (int) ( ip + 0.5 );
-         }
-      }
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
-   if( !astOK ) {
-      *outperm = (int *) astFree( (void *) *outperm );
-      *inperm = (int *) astFree( (void *) *inperm );
-      *consts = (double *) astFree( (void *) *consts );
-   }
-
-/* Return. */
-   return;
-}
-
-static int PermOK( AstMapping *pm, int *status ){
-/*
-*  Name:
-*     PermOK
-
-*  Purpose:
-*     Determine if a PermMap can be merged with a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int PermOK( AstMapping *pm, int *status )
-
-*  Class Membership:
-*     PermMap member function 
-
-*  Description:
-*     This function returns a flag indicating if the supplied PermMap
-*     could be merged with a MatrixMap. For thios to be possible, the 
-*     PermMap must have the same number of input and output axes, and the
-*     inverse and forward mappings must be consistent.
-
-*  Parameters:
-*     pm
-*        The PermMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the PermMap can be merged, 0 otherwise.
-
-*  Notes:
-*     -  A value of 0 is returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* PointSet holding input positions for PermMap */
-   AstPointSet *pset2;       /* PointSet holding output positions for PermMap */
-   double **ptr1;            /* Pointer to pset1 data */
-   int i;                    /* Loop count */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-   int ret;                  /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   ret = 0;
-
-/* The PermMap must have the same number of input and output coordinates. */
-   nin = astGetNin( pm );
-   nout = astGetNout( pm );
-   if( nin == nout ){
-
-/* Create two PointSets, each holding two points, which can be used for
-   the input and output positions with the PermMap. */
-      pset1 = astPointSet( 2, nin, "", status );
-      pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [1,2,3...] and [0,-1,-2,...] */
-      ptr1 = astGetPoints( pset1 );
-      if( astOK ){
-         for( i = 0; i < nin; i++ ){
-            ptr1[ i ][ 0 ] = ( double )( i + 1 );
-            ptr1[ i ][ 1 ] = ( double )( -i );
-         }
-
-      }
-
-/* Use the PermMap to transform these positions in the forward direction. */
-      (void) astTransform( pm, pset1, 1, pset2 );
-
-/* Now transform the results back again using the inverse PermMap. */
-      (void) astTransform( pm, pset2, 0, pset1 );
-
-/* See if the input positions have changed. If they have, then the PermMap
-   does not have a consistent pair of transformations. If they have not,
-   then the transformations must be consistent because we used two
-   different input positions and only one could come out unchanged by
-   chance. */
-      if( astOK ){
-         ret = 1;
-         for( i = 0; i < nin; i++ ){
-            if( ptr1[ i ][ 0 ] != ( double )( i + 1 ) ||
-                ptr1[ i ][ 1 ] != ( double )( -i ) ){
-               ret = 0;
-               break;
-            }
-         }
-      }
-
-/* Annul the PointSets. */
-      pset1 = astAnnul( pset1 );
-      pset2 = astAnnul( pset2 );
-   }
-
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     MatrixMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *map;
-   double *matrix; 
-   double result;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the MatrixMap structure. */
-   map = (AstMatrixMap *) this;
-
-/* Get a pointer to the array holding the required matrix elements, according 
-   to whether the MatrixMap has been inverted. */
-   if( !astGetInvert( this ) ) {
-      matrix = map->f_matrix;
-   } else {
-      matrix = map->i_matrix;
-   }
-
-/* First deal with full MatrixMaps in which all matrix elements are stored. */
-   if( map->form == FULL ){
-      result = matrix[ ax1*astGetNin( this ) + ax2 ];
-
-/* For unit matrices, the rate is unity if the input and output axes are
-   equal, and zero otherwise. */
-   } else if( map->form == UNIT ){
-      result = (ax1 == ax2 ) ? 1.0 : 0.0;
-
-/* For diagonal matrices, the rate is zero for off diagonal elements and
-   the matrix array stored the on-diagonal rates. */
-   } else if( ax1 == ax2 ) {
-      result = matrix[ ax1 ];
-
-   } else {
-      result = 0.0;
-   }      
-
-/* Return the result. */
-   return result;
-}
-
-static void SMtrMult( int post, int m, int n, const double *mat1, 
-                        double *mat2, double *work, int *status ){
-/*
-*  Name:
-*     SMtrMult
- 
-*  Purpose:
-*     Multiply a square matrix and a non-square matrix.
- 
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     void SMtrMult( int post, int m, int n, const double *mat1, 
-*                    double *mat2, double *work, int *status )
-
-*  Class Membership:
-*     MatrixMap member function.
-
-*  Description:
-*     The matrix pointed to by "mat2" is modified by multiplying it by
-*     the square matrix pointed to by "mat1". If "post" is 1, then:
-*
-*        mat2 -> mat1*mat2  (mat1 is mxm and mat2 is mxn)
-* 
-*     If "post" is zero, then:
-*
-*        mat2 -> mat2*mat1  (mat1 is nxn and mat2 is mxn)
-*
-*     The restriction that "mat1" must be square is imposed so that the
-*     returned matrix will have the same shape as the supplied matrix (mat1).
-
-*  Parameters:
-*     post
-*        Specifies whether to post- or pre- multiply mat2 by mat1.
-*     m
-*        The number of rows in mat2.
-*     n
-*        The number of columns in mat2.
-*     mat1
-*        The multiplier matrix. It must be square of size m or n, depending 
-*        on "post".
-*     mat2
-*        The multiplicand matrix.
-*     work
-*        Pointer to work space containing room for m doubles (if "post" 
-*        is 1), or n doubles (if "post" is 0).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  No error is reported if "mat2" is supplied NULL. In this case
-*     it will also be returned NULL.
-*/
-
-/* Local Variables */
-   double dot;             /* Output matrix element value */
-   const double *mat1_col; /* Pointer to start of current column of mat1 */
-   const double *mat1_row; /* Pointer to start of current row of mat1 */
-   double *mat2_col;       /* Pointer to start of current column of mat2 */
-   double *mat2_row;       /* Pointer to start of current row of mat2 */
-   double cel;             /* Column element value */
-   double rel;             /* Row element value */
-   int i;                  /* Index of current output row */
-   int j;                  /* Index of current output column */
-   int k;                  /* Dot product index */
-
-/* Do nothing if mat2 is NULL */
-   if ( mat2 ){
-   
-/* First deal with cases where the supplied matrix is post-multiplied
-   (i.e. the returned matrix is mat1*mat2). */   
-      if( post ){
-      
-/* Loop round each column of the output matrix, storing a pointer to 
-   the start of the corresponding column of mat2. */
-         for( j=0; j<n; j++ ){
-            mat2_col = mat2 + j;
-
-/* Loop round each row of the output matrix, storing a pointer to 
-   the start of the corresponding row of mat1. */
-            for( i=0; i<m; i++ ){
-               mat1_row = mat1 + i*m;
-
-/* Get the dot product of the corresponding row from mat1 and the 
-   corresponding column from mat2 and store it in the work array. */
-               dot = 0.0;
-               for( k=0; k<m; k++ ) {
-                  rel = mat1_row[ k ];
-                  cel = mat2_col[ k*n ];
-                  if( rel != AST__BAD && cel != AST__BAD ){
-                     dot += rel*cel;
-                  } else {
-                     dot = AST__BAD;
-                     break;
-                  }
-               }
-               work[ i ] = dot;
-            }
-
-/* Copy the values stored in the work array to the current column of 
-   the output matrix. */
-            for( i=0; i<m; i++ ) mat2_col[ i*n ] = work[ i ];
-         }
-      
-/* Now deal with cases where the supplied matrix is pre-multiplied
-   (i.e. the returned matrix is mat2*mat1). */   
-      } else {
-
-/* Loop round each row of the output matrix, storing a pointer to 
-   the start of the corresponding row of mat2. */
-         for( i=0; i<m; i++ ){
-            mat2_row = mat2 + i*n;
-
-/* Loop round each column of the output matrix, storing a pointer to 
-   the start of the corresponding column of mat1. */
-            for( j=0; j<n; j++ ){
-               mat1_col = mat1 + j;
-
-/* Get the dot product of the corresponding row from mat2 and the 
-   corresponding column from mat1 and store it in the work array. */
-               dot = 0.0;
-               for( k=0; k<n; k++ ) {
-                  rel = mat2_row[ k ];
-                  cel = mat1_col[ k*n ];
-                  if( rel != AST__BAD && cel != AST__BAD ){
-                     dot += rel*cel;
-                  } else {
-                     dot = AST__BAD;
-                     break;
-                  }
-               }
-               work[ j ] = dot;
-            }
-
-/* Copy the values stored in the work array to the current row of 
-   the output matrix. */
-            for( j=0; j<n; j++ ) mat2_row[ j ] = work[ j ];
-         }
-      }
-   }
- 
-   return;
-
-}   
-
-static int GetTranForward( AstMapping *this, int *status ) {
-/*
-*
-*  Name:
-*     GetTranForward
-
-*  Purpose:
-*     Determine if a MatrixMap defines a forward coordinate transformation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int GetTranForward( AstMapping *this, int *status )
-
-*  Class Membership:
-*     MatrixMap member function (over-rides the astGetTranForward method 
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function returns a value indicating if the MatrixMap is able
-*     to perform a forward coordinate transformation.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the forward coordinate transformation is not defined, or 1 if it 
-*     is.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *map;            /* Pointer to MatrixMap to be queried */
-   int invert;                   /* Has the mapping been inverted? */
-   int result;                   /* The returned value */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the MatrixMap. */
-   map = (AstMatrixMap *) this;
-
-/* All unit MatrixMaps are defined in both directions. */
-   if( map->form == UNIT ) {
-      result = 1;
-   
-/* Otherwise, check that the appropriate array is defined in the
-   MatrixMap. */
-   } else {
-
-/* Determine if the Mapping has been inverted. */
-      invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
-      if ( astOK ) {
-
-         if( invert ){
-            result = ( map->i_matrix != NULL );
-         } else {
-            result = ( map->f_matrix != NULL );
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GetTranInverse( AstMapping *this, int *status ) {
-/*
-*
-*  Name:
-*     GetTranInverse
-
-*  Purpose:
-*     Determine if a MatrixMap defines an inverse coordinate transformation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int GetTranInverse( AstMapping *this, int *status )
-
-*  Class Membership:
-*     MatrixMap member function (over-rides the astGetTranInverse method 
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function returns a value indicating if the MatrixMap is able
-*     to perform an inverse coordinate transformation.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the inverse coordinate transformation is not defined, or 1 if it 
-*     is.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *map;            /* Pointer to MatrixMap to be queried */
-   int invert;                   /* Has the mapping been inverted? */
-   int result;                   /* The returned value */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the MatrixMap. */
-   map = (AstMatrixMap *) this;
-
-/* All unit MatrixMaps are defined in both directions. */
-   if( map->form == UNIT ) {
-      result = 1;
-   
-/* Otherwise, check that the appropriate array is defined in the
-   MatrixMap. */
-   } else {
-
-/* Determine if the Mapping has been inverted. */
-      invert = astGetInvert( this );
-
-/* If OK, obtain the result. */
-      if ( astOK ) {
-
-         if( invert ){
-            result = ( map->f_matrix != NULL );
-         } else {
-            result = ( map->i_matrix != NULL );
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a MatrixMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     MatrixMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a MatrixMap and a set of points encapsulated in a
-*     PointSet and transforms the points by multiplying them by the matrix.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of columns in the MatrixMap being applied.
-*     -  The number of coordinate values per point in the output PointSet will
-*     equal the number of rows in the MatrixMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstMatrixMap *map;            /* Pointer to MatrixMap to be applied */
-   double diag_term;             /* Current diagonal element value */
-   double *indata;               /* Pointer to next input data value */
-   double *matrix;               /* Pointer to start of matrix element array */
-   double *matrix_element;       /* Pointer to current matrix element value */
-   double *outdata;              /* Pointer to next output data value */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double sum;                   /* Partial output value */
-   double val;                   /* Data value */
-   int in_coord;                 /* Index of output coordinate */
-   int nax;                      /* Output axes for which input axes exist */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int ncoord_out;               /* Number of coordinates per output point */
-   int npoint;                   /* Number of points */
-   int out_coord;                /* Index of output coordinate */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the MatrixMap. */
-   map = (AstMatrixMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   and output PointSets and obtain pointers for accessing the input and 
-   output coordinate values. */
-   ncoord_in = astGetNcoord( in );
-   ncoord_out = astGetNcoord( result );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Get a pointer to the array holding the required matrix elements, according 
-   to the direction of mapping required. */
-   if ( forward ) {
-      matrix = map->f_matrix;
-   } else {
-      matrix = map->i_matrix;
-   }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* First deal with full MatrixMaps in which all matrix elements are stored. */
-      if( map->form == FULL ){
-
-/* Loop to apply the matrix to each point in turn, checking for
-   (and propagating) bad values in the process. The matrix elements are 
-   accessed sequentially in row order. The next matrix element to be 
-   used is identified by a pointer which is initialised to point to the 
-   first element of the matrix prior to processing each point. */
-         for ( point = 0; point < npoint; point++ ) {
-            matrix_element = matrix;
-
-/* Each output co-ordinate value is created by summing the product of the 
-   corresponding input co-ordinates and the elements of one row of the 
-   matrix. */
-            for ( out_coord = 0; out_coord < ncoord_out; out_coord++ ) {
-               sum = 0.0;
-
-               for ( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-
-/*  Check the current input coordinate value and the current matrix element.  
-    If the coordinate value is bad, then the output value will also be
-    bad unless the matrix element is zero. That is, a zero matrix element
-    results in the input coordinate value being ignored, even if it is bad.
-    This prevents bad input values being propagated to output axes which
-    are independant of the bad input axis. A bad matrix element always results 
-    in the output value being bad. In either of these cases, break out of the 
-    loop, remembering to advance the pointer to the next matrix element so 
-    that it points to the start of the next row ready for doing the next 
-    output coordinate. */
-                  if ( ( ptr_in[ in_coord ][ point ] == AST__BAD &&
-                                         (*matrix_element) != 0.0 ) ||
-                       (*matrix_element) == AST__BAD ) {
-                     sum = AST__BAD;
-                     matrix_element += ncoord_in - in_coord;
-                     break;
-
-/*  If the input coordinate and the current matrix element are both
-    valid, increment the sum by their product, and step to the next matrix 
-    element pointer If we arrive here with a bad input value, then the
-    matrix element must be zero, in which case the running sum is left
-    unchanged. */
-                  } else {
-                     if ( ptr_in[ in_coord ][ point ] != AST__BAD ) {
-                        sum += ptr_in[ in_coord ][ point ] * (*matrix_element);
-                     }
-                     matrix_element++;
-                  }
-               }
-
-/*  Store the output coordinate value. */
-               ptr_out[ out_coord ][ point ] = sum;
-
-            }
-
-         }
-
-/* Now deal with unit and diagonal MatrixMaps. */
-      } else {
-
-/* Find the number of output axes for which input data is available. */
-         if( ncoord_in < ncoord_out ){
-            nax = ncoord_in;
-         } else {
-            nax = ncoord_out;
-         }
-   
-/* For unit matrices, copy the input axes to the corresponding output axes. */
-         if( map->form == UNIT ){
-            for( out_coord = 0; out_coord < nax; out_coord++ ) {
-               (void) memcpy( ptr_out[ out_coord ], 
-                              (const void *) ptr_in[ out_coord ],
-                              sizeof( double )*(size_t)npoint );
-            }
-
-/* For diagonal matrices, scale each input axis using the appropriate 
-   diagonal element from the matrix, and store in the output. */
-         } else {
-            for( out_coord = 0; out_coord < nax; out_coord++ ){
-               diag_term = matrix[ out_coord ];
-               outdata = ptr_out[ out_coord ];            
-               indata = ptr_in[ out_coord ];            
-
-               if( diag_term != AST__BAD ){
-                  for( point = 0; point < npoint; point++ ){
-                     val = *(indata++);
-                     if( val != AST__BAD ){
-                        *(outdata++) = diag_term*val;
-                     } else {
-                        *(outdata++) = AST__BAD;
-                     } 
-                  }
-
-               } else {
-                  for( point = 0; point < npoint; point++ ){
-                     *(outdata++) = AST__BAD;
-                  }
-               }
-            }
-         }
-         
-/* If there are any remaining output axes, fill the first one with zeros. */
-         if( nax < ncoord_out ){
-            outdata = ptr_out[ nax ];
-            for( point = 0; point < npoint; point++ ) *(outdata++) = 0.0;
-
-/* Copy this axis to any remaining output axes. */
-            outdata = ptr_out[ nax ];
-            for( out_coord = nax + 1; out_coord < ncoord_out; out_coord++ ) {
-               (void) memcpy( ptr_out[ out_coord ], (const void *) outdata,
-                              sizeof( double )*(size_t)npoint );
-            }
-         }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static int ScalingRowCol( AstMatrixMap *map, int axis, int *status ){
-/*
-*  Name:
-*     ScalingRowCol
-
-*  Purpose:
-*     Determine if a given row and column of a MatrixMap are zeros
-*     with a non-zero diagonal term.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     int ScalingRowCol( AstMatrixMap *map, int axis, int *status )
-
-*  Class Membership:
-*     MatrixMap member function 
-
-*  Description:
-*     This function returns a flag indicating if a MatrixMap presents a
-*     simple scaling for a given axis in both directions. The MatrixMap
-*     must be square. A value of one is returned if every element of the
-*     row and column corresponding to the given axis is zero, except for
-*     the diagonal term which must be non-zero.
-
-*  Parameters:
-*     map
-*        The MatrixMap.
-*     axis
-*        The zero-based index of the axis to check.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the row/column produces a simple scaling, 0 otherwise.
-
-*/
-
-/* Local Variables: */
-   double *el;               /* Pointer to matrix element */
-   int i;                    /* Element count */
-   int ncol;                 /* No. of input coordinates */
-   int nrow;                 /* No. of output coordinates */
-   int ret;                  /* Returned flag */
-
-/* Initialise */
-   ret = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* If a unit or diagonal MatrixMap has been supplied, return 1. */
-   if( map->form != FULL ){
-      ret = 1;
-
-/* If a full matrix has been supplied... */      
-   } else {
-
-/* Assume the row/column gives a unit mapping. */
-      ret = 1;
-
-/* Get the number of input and output axes for the MatrixMap. */
-      ncol = astGetNin( map );
-      nrow = astGetNout( map );
-
-/* Check that all elements of the "axis"th row are effectively zero, except
-   for the "axis"th element which must be non-zero. */
-      el = map->f_matrix + axis*ncol;
-      for( i = 0; i < ncol; i++ ) {
-         if( i == axis ) {
-            if( fabs( *el ) <= DBL_EPSILON ) {
-               ret = 0;
-               break;
-            }
-         } else if( fabs( *el ) > DBL_EPSILON ) {
-            ret = 0;
-            break;
-         }
-         el++;
-      }         
-
-/* Check that all elements of the "axis"th column are effectively zero, except
-   for the "axis"th element which must be non-zero. */
-      if( ret ) {
-         el = map->f_matrix + axis;
-         for( i = 0; i < ncol; i++ ) {
-            if( i == axis ) {
-               if( fabs( *el ) <= DBL_EPSILON ) {
-                  ret = 0;
-                  break;
-               }
-            } else if( fabs( *el ) > DBL_EPSILON ) {
-               ret = 0;
-               break;
-            }
-            el += ncol;
-         }         
-      }
-   }
-
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for MatrixMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for MatrixMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the matrix
-*     element values associated with the input MatrixMap.
-*/
-
-
-/* Local Variables: */
-   AstMatrixMap *in;             /* Pointer to input MatrixMap */
-   AstMatrixMap *out;            /* Pointer to output MatrixMap */
-   int nel;                      /* No. of elements in the matrix */
-   int nin;                      /* No. of input coordinates */
-   int nout;                     /* No. of output coordinates */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output MatrixMaps. */
-   in = (AstMatrixMap *) objin;
-   out = (AstMatrixMap *) objout;
-
-/* Nullify the pointers stored in the output object since these will
-   currently be pointing at the input data (since the output is a simple
-   byte-for-byte copy of the input). Otherwise, the input data could be
-   freed by accidient if the output object is deleted due to an error
-   occuring in this function. */
-   out->f_matrix = NULL;
-   out->i_matrix = NULL;
-
-/* If the input MatrixMap is a unit mapping, then no matrix elements are
-   stored with it, so do nothing in this case. */
-   if( out->form != UNIT ){
-
-/* Obtain the number of stored values in the MatrixMap. This is independant of
-   whether the Mapping has been inverted or not. If the MatrixMap is diagonal,
-   only the diagonal terms are stored. */
-      nin = astGetNin( in );
-      nout = astGetNout( in );
-
-      if( out->form == DIAGONAL ){
-         if( nin < nout ){
-            nel = nin;
-         } else {
-            nel = nout;
-         }
-
-      } else {
-         nel = nin*nout;
-      }
-      
-/* Store the forward matrix elements in the output MatrixMap. */
-      out->f_matrix = (double *) astStore( NULL, (void *) in->f_matrix,
-                                           sizeof( double )*(size_t) nel ); 
-
-/* Store the inverse matrix elements (if defined) in the output
-   MatrixMap. */
-      if( in->i_matrix ){
-         out->i_matrix = (double *) astStore( NULL, (void *) in->i_matrix,
-                                              sizeof( double )*(size_t) nel ); 
-      }
-
-/* If an error has occurred, free the output MatrixMap arrays. */
-      if( !astOK ) {
-         out->f_matrix = (double *) astFree( (void *) out->f_matrix );
-         out->i_matrix = (double *) astFree( (void *) out->i_matrix );
-      }
-   }
-
-   return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for MatrixMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for MatrixMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstMatrixMap *this;            /* Pointer to MatrixMap */
-
-/* Obtain a pointer to the MatrixMap structure. */
-   this = (AstMatrixMap *) obj;
-
-/* Free the arrays used to store element values for forward and inverse
-   matrices. */
-   this->f_matrix = (double *) astFree( (void *) this->f_matrix );
-   this->i_matrix = (double *) astFree( (void *) this->i_matrix );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for MatrixMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the MatrixMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the MatrixMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstMatrixMap *this;           /* Pointer to the MatrixMap structure */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   int el;                       /* Element index */
-   int nel;                      /* No. of elements in the matrix */
-   int nin;                      /* No. of input coords */
-   int nout;                     /* No. of output coords */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the MatrixMap structure. */
-   this = (AstMatrixMap *) this_object;
-
-/* Find the number of elements stored for each matrix. */
-   nin = astGetNin( this );
-   nout = astGetNout( this );
-
-   if( this->form == FULL ){
-      nel = nin*nout;
-
-   } else if( this->form == DIAGONAL ){
-      nel = MIN( nin, nout );
-
-   } else {
-      nel = 0;
-   }
-
-/* Write out values representing the instance variables for the
-   MatrixMap class.  */
-
-/* The forward matrix. The inverse matrix not written out since it can be
-   re-calculated when the MatrixMap is read back in. Note BAD values are
-   not written out as the AST__BAD value may differ on different machines.
-   If a matrix element is not found when reading the matrix back in
-   again (in astLoadMatrixMap), then it is assigned a default value of 
-   AST__BAD. */
-   if( this->f_matrix ){
-      for( el = 0; el < nel; el++ ){
-         if( (this->f_matrix)[ el ] != AST__BAD ) {      
-            (void) sprintf( buff, "M%d", el );
-            astWriteDouble( channel, buff, 1, 1, (this->f_matrix)[ el ],
-                            "Forward matrix value" );
-         }
-      }
-   }
-
-/* The matrix storage form. */
-   astWriteString( channel, "Form", 1, 1, Form[ this->form ], 
-                   "Matrix storage form" );
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAMatrixMap and astCheckMatrixMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(MatrixMap,Mapping)
-astMAKE_CHECK(MatrixMap)
-
-AstMatrixMap *astMatrixMap_( int nin, int nout, int form, 
-                             const double matrix[], const char *options, int *status, ...){
-/*
-*++
-*  Name:
-c     astMatrixMap
-f     AST_MATRIXMAP
-
-*  Purpose:
-*     Create a MatrixMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "matrixmap.h"
-c     AstMatrixMap *astMatrixMap( int nin, int nout, int form, 
-c                                 const double matrix[],
-c                                 const char *options, ... )
-f     RESULT = AST_MATRIXMAP( NIN, NOUT, FORM, MATRIX, OPTIONS, STATUS ) 
-
-*  Class Membership:
-*     MatrixMap constructor.
-
-*  Description:
-*     This function creates a new MatrixMap and optionally initialises
-*     its attributes.
-*
-*     A MatrixMap is a form of Mapping which performs a general linear
-*     transformation.  Each set of input coordinates, regarded as a
-*     column-vector, are pre-multiplied by a matrix (whose elements
-*     are specified when the MatrixMap is created) to give a new
-*     column-vector containing the output coordinates. If appropriate,
-*     the inverse transformation may also be performed.
-
-*  Parameters:
-c     nin
-f     NIN = INTEGER (Given)
-*        The number of input coordinates, which determines the number
-*        of columns in the matrix.
-c     nout
-f     NOUT = INTEGER (Given)
-*        The number of output coordinates, which determines the number
-*        of rows in the matrix.
-c     form
-f     FORM = INTEGER (Given)
-*        An integer which indicates the form in which the matrix
-*        elements will be supplied.
-*
-c        A value of zero indicates that a full "nout" x "nin" matrix
-f        A value of zero indicates that a full NOUT x NIN  matrix
-c        of values will be supplied via the "matrix" parameter
-f        of values will be supplied via the MATRIX argument
-*        (below). In this case, the elements should be given in row
-*        order (the elements of the first row, followed by the
-*        elements of the second row, etc.).
-*
-*        A value of 1 indicates that only the diagonal elements of the
-*        matrix will be supplied, and that all others should be
-c        zero. In this case, the elements of "matrix" should contain
-f        zero. In this case, the elements of MATRIX should contain
-*        only the diagonal elements, stored consecutively.
-*
-*        A value of 2 indicates that a "unit" matrix is required,
-*        whose diagonal elements are set to unity (with all other
-c        elements zero).  In this case, the "matrix" parameter is
-c        ignored and a NULL pointer may be supplied.
-f        elements zero).  In this case, the MATRIX argument is not used.
-c     matrix
-f     MATRIX( * ) = DOUBLE PRECISION (Given)
-*        The array of matrix elements to be used, stored according to
-c        the value of "form".
-f        the value of FORM.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new MatrixMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new MatrixMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMatrixMap()
-f     AST_MATRIXMAP = INTEGER
-*        A pointer to the new MatrixMap.
-
-*  Notes:
-*     - In general, a MatrixMap's forward transformation will always
-*     be available (as indicated by its TranForward attribute), but
-*     its inverse transformation (TranInverse attribute) will only be
-*     available if the associated matrix is square and non-singular.
-*     - As an exception to this, the inverse transformation is always
-*     available if a unit or diagonal matrix is specified. In this
-*     case, if the matrix is not square, one or more of the input
-*     coordinate values may not be recoverable from a set of output
-*     coordinates. Any coordinates affected in this way will simply be
-*     set to the value zero.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMatrixMap *new;            /* Pointer to new MatrixMap */
-   va_list args;                 /* Variable argument list */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the MatrixMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitMatrixMap( NULL, sizeof( AstMatrixMap ), !class_init, 
-                           &class_vtab, "MatrixMap", nin, nout, form, matrix);
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new MatrixMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new MatrixMap. */
-   return new;
-}
-
-AstMatrixMap *astMatrixMapId_( int nin, int nout, int form, const double matrix[], 
-                               const char *options, ... ) {
-/*
-*  Name:
-*     astMatrixMapId_
-
-*  Purpose:
-*     Create a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *astMatrixMapId_( int nin, int nout, int form, 
-*                                    const double matrix[], const char *options, 
-*                                    ... ) 
-
-*  Class Membership:
-*     MatrixMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astMatrixMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astMatrixMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astMatrixMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astMatrixMap_.
-
-*  Returned Value:
-*     The ID value associated with the new MatrixMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMatrixMap *new;            /* Pointer to new MatrixMap */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the MatrixMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitMatrixMap( NULL, sizeof( AstMatrixMap ), !class_init, &class_vtab,
-                         "MatrixMap", nin, nout, form, matrix );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new MatrixMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new MatrixMap. */
-   return astMakeId( new );
-}
-
-AstMatrixMap *astInitMatrixMap_( void *mem, size_t size, int init,
-                                 AstMatrixMapVtab *vtab, const char *name,
-                                 int nin, int nout, int form, 
-                                 const double *matrix, int *status ) {
-/*
-*+
-*  Name:
-*     astInitMatrixMap
-
-*  Purpose:
-*     Initialise a MatrixMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *astInitMatrixMap( void *mem, size_t size, int init,
-*                                 AstMatrixMapVtab *vtab, const char *name,
-*                                 int nin, int nout, int form,
-*                                 const double *matrix )
-
-*  Class Membership:
-*     MatrixMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new MatrixMap object. It allocates memory (if necessary) to accommodate
-*     the MatrixMap plus any additional data associated with the derived class.
-*     It then initialises a MatrixMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a MatrixMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the MatrixMap is to be initialised.
-*        This must be of sufficient size to accommodate the MatrixMap data
-*        (sizeof(MatrixMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the MatrixMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the MatrixMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the MatrixMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new MatrixMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     nin
-*        The number of input coordinate values per point. This is the
-*        same as the number of columns in the matrix.
-*     nout
-*        The number of output coordinate values per point. This is the
-*        same as the number of rows in the matrix.
-*     form
-*        If "form" is 2 or larger, then a unit MatrixMap is created. In this
-*        case "matrix" is ignored and can be supplied as NULL. If "form" is
-*        1, then a diagonal MatrixMap is created. In this case, the number of
-*        values in "matrix" should be equal to the minimum of nin and nout,
-*        and "matrix" should contain the corresponding diagonal terms, in row
-*        order. If "form" is 0 or less, then a full MatrixMap is created, and
-*        "matrix" should contain all nin*nout element values.
-*     matrix
-*        A pointer to an array of matrix element values. The values should be
-*        supplied in row order. The content of this array is determined by
-*        "form". If a full MatrixMap is to be created then the array starts
-*        with (row 1, column 1), then comes (row 1, column 2), up to (row 1,
-*        column nin), then (row 2, column 1), (row 2, column 2), and so on,
-*        finishing with (row nout, column nin) ). An error is reported if a
-*        NULL value is supplied unless "form" is 2 or more.
-
-*  Returned Value:
-*     A pointer to the new MatrixMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *new;              /* Pointer to new MatrixMap */
-   double *fmat;                   /* Pointer to the forward matrix */
-   double *imat;                   /* Pointer to the inverse matrix */
-   int i;                          /* Loop count */
-   int nel;                        /* No. of elements in matrix array */
-   int used_form;                  /* Form limited to 0, 1 or 2 */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitMatrixMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Report an error if a NULL matrix was supplied, unless a unit MatrixMap
-   has been requested. */
-   if( form < 2 && !matrix ){
-      astError( AST__MTRMT, "astInitMatrixMap(%s): NULL matrix supplied.", status, 
-                name ); 
-
-   } else {
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the MatrixMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-      new = (AstMatrixMap *) astInitMapping( mem, size, 0,
-                                           (AstMappingVtab *) vtab, name,
-                                            nin, nout, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the MatrixMap data. */
-/* ---------------------------- */
-/* If a unit MatrixMap is being created, then no additional storage is 
-   required. */
-         if( form > 1 ){
-            nel = 0;
-            used_form = UNIT;
-      
-/* If a diagonal MatrixMap is being created, then memory is needed to hold 
-   the diagonal terms. */
-         } else if( form == 1 ){
-            if( nin < nout ){
-               nel = nin;
-            } else {
-               nel = nout;
-            }
-            used_form = DIAGONAL;
-
-/* If a full MatrixMap is being created, then memory is needed to hold 
-   all the terms. */
-         } else {
-            nel = nin*nout ;
-            used_form = FULL;
-         }
-
-/* Allocate memory for the forward matrix, storing the supplied matrix
-   values in it. */
-         fmat = (double *) astStore( NULL, (void *) matrix, 
-                                     sizeof(double)*(size_t)nel );
-/* Replace any NaNs by AST__BAD */
-         for( i = 0; i < nel; i++ ) {
-            if( astISNAN(fmat[ i ]) ) fmat[ i ] = AST__BAD;
-         }
-
-/* Create an inverse matrix if possible. */
-         imat = InvertMatrix( used_form, nout, nin, fmat, status );
-
-/* Store the matrix arrays. */
-         new->form = used_form;
-         new->f_matrix = fmat;
-         new->i_matrix = imat;      
-
-/* Attempt to compress the MatrixMap into DIAGONAL or UNIT form. */
-         CompressMatrix( new, status );
-
-/* If an error occurred, clean up by deleting the new MatrixMap. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new MatrixMap. */
-   return new;
-}
-
-AstMatrixMap *astLoadMatrixMap_( void *mem, size_t size,
-                                 AstMatrixMapVtab *vtab, const char *name,
-                                 AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadMatrixMap
-
-*  Purpose:
-*     Load a MatrixMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "matrixmap.h"
-*     AstMatrixMap *astLoadMatrixMap( void *mem, size_t size,
-*                                     AstMatrixMapVtab *vtab, const char *name,
-*                                     AstChannel *channel )
-
-*  Class Membership:
-*     MatrixMap loader.
-
-*  Description:
-*     This function is provided to load a new MatrixMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     MatrixMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a MatrixMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the MatrixMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        MatrixMap data (sizeof(MatrixMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the MatrixMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the MatrixMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstMatrixMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new MatrixMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the MatrixMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "MatrixMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new MatrixMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-/* Local Variables: */
-   AstMatrixMap *new;            /* Pointer to the new MatrixMap */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   const char *form;             /* String form */
-   int def;                      /* Is the matrix defined? */
-   int el;                       /* Element index */
-   int nel;                      /* No. of elements in the matrix */
-   int nin;                      /* No. of input coords */
-   int nout;                     /* No. of output coords */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this MatrixMap. In this case the
-   MatrixMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstMatrixMap );
-      vtab = &class_vtab;
-      name = "MatrixMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitMatrixMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built MatrixMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "MatrixMap" );
-
-/* Now obtain the Matrix storage form from this list. */
-      form = astReadString( channel, "form", Form[FULL] ); 
-      new->form = FindString( 3, Form, form, "the MatrixMap component 'Form'",
-                              "astRead", astGetClass( channel ), status );
-      form = astFree( (void *) form );
-
-/* Find the number of elements stored for each matrix. */
-      nin = astGetNin( (AstMapping *) new );
-      nout = astGetNout( (AstMapping *) new );
-   
-      if( new->form == FULL ){
-         nel = nin*nout;
-   
-      } else if( new->form == DIAGONAL ){
-         nel = MIN( nin, nout );
-   
-      } else {
-         nel = 0;
-      }
-
-/* Allocate memory to hold the forward matrix. */
-      new->f_matrix = (double *) astMalloc( sizeof(double)*(size_t)nel );
-
-/* Now read the other data items from the list and use them to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* The forward matrix. */
-      if( new->f_matrix ){
-         def = 0; 
-
-         for( el = 0; el < nel; el++ ){
-            (void) sprintf( buff, "m%d", el );
-            (new->f_matrix)[ el ] = astReadDouble( channel, buff, AST__BAD );
-            if( (new->f_matrix)[ el ] != AST__BAD ) def = 1;
-         }
-
-/* Store a NULL pointer if no elements of the matrix were found. */
-         if( !def ) new->f_matrix = (double *) astFree( (void *) new->f_matrix );
-
-      }
-
-/* Create an inverse matrix if possible, otherwise store a NULL pointer. */
-      if( new->f_matrix ){
-         new->i_matrix = InvertMatrix( new->form, nout, nin, new->f_matrix, status );
-      } else {
-         new->i_matrix = NULL;
-      }
-
-/* If an error occurred, clean up by deleting the new MatrixMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new MatrixMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-AstMatrixMap *astMtrRot_( AstMatrixMap *this, double theta, 
-                                const double axis[], int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,MatrixMap,MtrRot))( this, theta, axis, status );
-}
-
-AstMatrixMap *astMtrMult_( AstMatrixMap *this, AstMatrixMap *a, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,MatrixMap,MtrMult))( this, a, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/matrixmap.h b/ast-5.3-1/matrixmap.h
deleted file mode 100644
index 24c6656..0000000
--- a/ast-5.3-1/matrixmap.h
+++ /dev/null
@@ -1,318 +0,0 @@
-#if !defined( MATRIXMAP_INCLUDED ) /* Include this file only once */
-#define MATRIXMAP_INCLUDED
-/*
-*+
-*  Name:
-*     matrixmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the MatrixMap class.
-
-*  Invocation:
-*     #include "matrixmap.h"
-
-*  Description:
-*     This include file defines the interface to the MatrixMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The MatrixMap class implements Mappings that transform a set of 
-*     coordinates by multiplying them by a matrix. The inverse transformation
-*     can only be applied if the associated matrix is square and non-singular.
-
-*  Inheritance:
-*     The MatrixMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     TranForward (integer)
-*        A read-only boolean value (0 or 1) which indicates whether a
-*        MatrixMap is able to transform coordinates in the "forward"
-*        direction (i.e. converting input coordinates into output
-*        coordinates).
-*     TranInverse (integer)
-*        A read-only boolean value (0 or 1) which indicates whether a
-*        MatrixMap is able to transform coordinates in the "inverse"
-*        direction (i.e. converting output coordinates back into input
-*        coordinates).
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astTransform
-*           Apply a MatrixMap to transform a set of points.
-*        astGetTranForward
-*           Determine if a MatrixMap can perform a "forward" coordinate
-*           transformation.
-*        astGetTranInverse
-*           Determine if a MatrixMap can perform an "inverse" coordinate
-*           transformation.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMtrMult
-*           Multiply a MatrixMap by another MatrixMap.
-*        astMtrRot
-*           Rotate a MatrixMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAMatrixMap
-*           Test class membership.
-*        astMatrixMap
-*           Create a MatrixMap.
-*
-*     Protected:
-*        astCheckMatrixMap
-*           Validate class membership.
-*        astInitMatrixMap
-*           Initialise a MatrixMap.
-*        astInitMatrixMapVtab
-*           Initialise the virtual function table for the MatrixMap class.
-*        astLoadMatrixMap
-*           Load a MatrixMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstMatrixMap
-*           MatrixMap object type.
-*
-*     Protected:
-*        AstMatrixMapVtab
-*           MatrixMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     12-Feb-1996 (DSB):
-*        Original version.
-*     22-Feb-1996 (DSB):
-*        Method "astMatrixRotate" added.
-*     5-Mar-1996 (DSB):
-*        Method "astMatrixMult" added.
-*     14-NOV-1996 (DSB):
-*        External interface and I/O added. Public method names shortened.
-*     3-JUN-1997 (DSB):
-*        astMtrMult and astMtrRot made protected instead of public.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitMatrixMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* MatrixMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstMatrixMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *f_matrix;             /* Pointer to forward matrix */
-   double *i_matrix;             /* Pointer to inverse matrix */
-   int form;                     /* Matrix storage form */
-
-} AstMatrixMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstMatrixMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstMatrixMap *(* MtrRot)( AstMatrixMap *, double, const double[], int * ); 
-   AstMatrixMap *(* MtrMult)( AstMatrixMap *,  AstMatrixMap *, int * );
-
-} AstMatrixMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstMatrixMapGlobals {
-   AstMatrixMapVtab Class_Vtab;
-   int Class_Init;
-} AstMatrixMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitMatrixMapGlobals_( AstMatrixMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(MatrixMap)          /* Check class membership */
-astPROTO_ISA(MatrixMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstMatrixMap *astMatrixMap_( int, int, int, const double[], const char *, int *, ...);
-#else
-AstMatrixMap *astMatrixMapId_( int, int, int, const double[], const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstMatrixMap *astInitMatrixMap_( void *, size_t, int, AstMatrixMapVtab *,
-                                 const char *, int, int, int, const double[], int * );
-
-/* Vtab initialiser. */
-void astInitMatrixMapVtab_( AstMatrixMapVtab *, const char *, int * );
-
-/* Loader. */
-AstMatrixMap *astLoadMatrixMap_( void *, size_t, AstMatrixMapVtab *,
-                                 const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-AstMatrixMap *astMtrRot_( AstMatrixMap *, double, const double[], int * );
-AstMatrixMap *astMtrMult_( AstMatrixMap *, AstMatrixMap *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckMatrixMap(this) astINVOKE_CHECK(MatrixMap,this,0)
-#define astVerifyMatrixMap(this) astINVOKE_CHECK(MatrixMap,this,1)
-
-/* Test class membership. */
-#define astIsAMatrixMap(this) astINVOKE_ISA(MatrixMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astMatrixMap astINVOKE(F,astMatrixMap_)
-#else
-#define astMatrixMap astINVOKE(F,astMatrixMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitMatrixMap(mem,size,init,vtab,name,nin,nout,form,matrix) \
-astINVOKE(O,astInitMatrixMap_(mem,size,init,vtab,name,nin,nout,form,matrix,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitMatrixMapVtab(vtab,name) astINVOKE(V,astInitMatrixMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadMatrixMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadMatrixMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckMatrixMap to validate MatrixMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astMtrRot(this,theta,axis) \
-astINVOKE(O,astMtrRot_(astCheckMatrixMap(this),theta,axis,STATUS_PTR))
-
-#define astMtrMult(this,a) \
-astINVOKE(O,astMtrMult_(astCheckMatrixMap(this),astCheckMatrixMap(a),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/memory.c b/ast-5.3-1/memory.c
deleted file mode 100644
index 550017a..0000000
--- a/ast-5.3-1/memory.c
+++ /dev/null
@@ -1,4699 +0,0 @@
-/*
-*  Name:
-*     memory.c
-
-*  Purpose:
-*     Implement memory allocation/deallocation functions.
-
-*  Description:
-*     This file implements the Memory module which is used for
-*     allocating and freeing memory in the AST library.  For a
-*     description of the module and its interface, see the .h file of
-*     the same name.
-
-*     Note, it is assumed that malloc, free and realloc are thread-safe.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     2-JAN-1996 (RFWS):
-*        Original version.
-*     26-JAN-1996 (RFWS):
-*        Removed trailing underscores from static functions and
-*        changed to use new error function interfaces.
-*     20-JUN-1996 (RFWS):
-*        Added astString.
-*     15-JUL-1996 (RFWS):
-*        Make IsDynamic execute under error conditions to avoid memory
-*        leaks in such situations.
-*     11-SEP-1996 (RFWS):
-*        Added astStringArray (original written by DSB).
-*     18-MAR-1998 (RFWS):
-*        Added notes about these functions being available for writing
-*        foreign language and graphics interfaces, etc.
-*     29-JAN-2002 (DSB):
-*        Added astChrLen and astSscanf.
-*     15-FEB-2002 (DSB):
-*        Removed use of non-ANSI vsscanf from astSscanf.
-*     15-NOV-2002 (DSB):
-*        Moved ChrMatch from SkyFrame (etc) to here. Included stdio.h and
-*        ctype.h.
-*     10-FEB-2003 (DSB):
-*        Added facilities for detecting and tracing memory leaks. These
-*        are only included if AST is compiled with the -DDEBUG flag. 
-*     3-MAR-2004 (DSB):
-*        Modified astSscanf to avoid use of uninitialised values
-*        corresponding to "%n" fields in the format string.
-*     26-JAN-2004 (DSB):
-*        Modified astRealloc to clarify the nature of the returned pointer 
-*        (which is not a "Memory *"). Also correct issuing and deissuing
-*        of pointers in DEBUG code within astRealloc.
-*     16-FEB-2006 (DSB):
-*        Convert Magic from a function to a macro for extra speed.
-*     21-FEB-2006 (DSB):
-*        Convert IsDynamic from a function to a macro for extra speed.
-*     23-FEB-2006 (DSB):
-*        Added the caching system for allocated but unused memory blocks,
-*        controlled by AST tuning parameter MemoryCaching.
-*     2-MAR-2006 (DSB):
-*        Added astFlushMemory, and renamed the memory debugging functions.
-*        These are now conditionally compiled if the MEM_DEBUG macros is 
-*        defined (set by configuring AST with the --with-memdebug option).
-*        Also modified them to take into account MemoryCaching.
-*     24-MAY-2006 (DSB):
-*        Ensure that pointers to memory returned by this module are all
-*        aligned on 8 byte boundaries. This fixes problems with ualigned 
-*        memory access that could cause bus errors on Solaris. 
-*     26-MAY-2006 (DSB):
-*        Cast (void *) pointers to (char *) before doing arithmetic on
-*        them (changes supplied by Micah Johnson).
-*     4-DEC-2006 (DSB):
-*        Fix bug in astMalloc that caused a non-null pointer to be
-*        returned on error.
-*     4-JAN-2007 (DSB):
-*        Move definition of astCLASS macro so that it comes before the
-*        inclusion of the AST include files (which test for astCLASS).
-*     27-JUN-2007 (DSB):
-*        Added astIsDynamic.
-*     24-OCT-2007 (DSB):
-*        Zero the size of memory blocks stored in the Cache so that an
-*        error will be reported if an attempt is made to free a memory 
-*        block that has already been freed.
-*     25-OCT-2007 (DSB):
-*        Added astRemoveLeadingBlanks.
-*     28-FEB-2008 (DSB):
-*        Added astChrSub.
-*     17-MAR-2008 (DSB):
-*        Added "{nnn}" quantifier to astChrSub.
-*     27-MAR-2008 (DSB):
-*        Added astChrSplitRE, and re-structured regexp functions.
-*     18-NOV-2008 (DSB):
-*        In astFlushMemory, do not release permanent memory blocks as
-*        they may still be needed.
-*     9-FEB-2009 (DSB):
-*        Added astChr2Double.
-*     25-JUN-2009 (DSB):
-*        Fix handling of escape characters in astSplitC.
-*/
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
-   implementation) to obtain access to the protected error handling
-   functions. */
-#define astCLASS memory
-
-/* The maximum number of fields within a format string allowed by astSscanf. */
-#define VMAXFLD 20
-
-/* The maximum number of nested astBeginPM/astEndPM contexts. */
-#define PM_STACK_MAXSIZE 20
-
-/* Select the appropriate memory management functions. These will be the
-   system's malloc, free and realloc unless AST was configured with the
-   "--with-starmem" option, in which case they will be the starmem
-   malloc, free and realloc. */
-#ifdef HAVE_STAR_MEM_H
-#  include <star/mem.h>
-#  define MALLOC starMalloc
-#  define FREE starFree
-#  define REALLOC starRealloc
-#else
-#  define MALLOC malloc
-#  define FREE free
-#  define REALLOC realloc
-#endif
-
-
-#ifdef MEM_DEBUG
-#define ISSUED "issued"
-#define FREED "freed"
-#endif
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"               /* Error reporting facilities */
-#include "globals.h"             /* Thread-specific global data */
-#include "memory.h"              /* Interface to this module */
-#include "pointset.h"            /* For AST__BAD */
-
-#ifdef MEM_DEBUG
-#include "object.h"              /* For astMakePointer */
-#endif
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <limits.h>
-
-#ifdef THREAD_SAFE
-#include <pthread.h>
-#endif
-
-#ifdef MEM_PROFILE
-#include <sys/times.h>
-#endif
-
-/* Function Macros. */
-/* =============== */
-/* These are defined as macros rather than functions to avoid the
-   overhead of a function call since they are called extremely frequently. */
-
-/*
-*  Name:
-*     IS_DYNAMIC
-
-*  Purpose:
-*     Test whether a memory region has been dynamically allocated.
-
-*  Type:
-*     Private macro
-
-*  Synopsis:
-*     #include "memory.h"
-*     IS_DYNAMIC( ptr, dynamic )
-
-*  Description:
-*     This macro takes a pointer to a region of memory and tests if
-*     the memory has previously been dynamically allocated using other
-*     functions from this module. It does this by checking for the
-*     presence of a "magic" number in the header which precedes the
-*     allocated memory. If the magic number is not present (or the
-*     pointer is invalid for any other reason), an error is reported
-*     and the global error status is set.
-*
-*     The result of the test is written to the variable specified by "res".
-
-*  Parameters:
-*     ptr
-*        Pointer to the start (as known to the external user) of the
-*        dynamically allocated memory.
-*     dynamic
-*        Name of an "int" variable to recieve the result of the test.
-*        If the memory was allocated dynamically, a value of 1 is
-*        stored in this variable.  Otherwise, zero is stored and an error 
-*        results.
-
-*  Notes:
-*     - A NULL pointer value produces an error report from this
-*     function, although other functions may wish to regard a NULL
-*     pointer as valid.
-*     - This function attempts to execute even if the global error
-*     status is set, although no further error report will be made if
-*     the memory is not dynamically allocated under these
-*     circumstances.
-*     - The test performed by this function is not 100% secure as the
-*     "magic" value could occur by accident (although this is
-*     unlikely). It is mainly intended to provide security against
-*     programming errors, including accidental corruption of the
-*     memory header and attempts to allocate the same region of memory
-*     more than once.
-*/
-
-#define IS_DYNAMIC(ptr,dynamic) \
-\
-/* Initialise. */ \
-   dynamic = 0; \
-\
-/* Check that a NULL pointer has not been supplied and report an error \
-   if it has (but not if the global status is already set). */ \
-   if ( !ptr ) { \
-      if ( astOK ) { \
-         astError( AST__PTRIN, "Invalid NULL pointer (address %p).", status, ptr ); \
-      } \
-\
-/* If OK, derive a pointer to the memory header that precedes the \
-   allocated region of memory. */ \
-   } else { \
-      Memory *isdynmem;                /* Pointer to memory header */ \
-      isdynmem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY ); \
-\
-/* Check if the "magic number" in the header is valid and report an \
-   error if it is not (but not if the global status is already \
-   set). */ \
-      if ( isdynmem->magic != MAGIC( isdynmem, isdynmem->size ) ) { \
-         if ( astOK ) { \
-            astError( AST__PTRIN, \
-                      "Invalid pointer or corrupted memory at address %p.", status, \
-                      ptr ); \
-         } \
-\
-/* Note if the magic number is OK. */ \
-      } else { \
-         dynamic = 1; \
-      } \
-   } 
-
-
-
-/*
-*  Name:
-*     MAGIC
-
-*  Purpose:
-*     Generate a "magic number".
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "memory.h"
-*     unsigned long MAGIC( void *ptr, size_t size )
-
-*  Description:
-*     This macro generates a "magic number" which is a function of
-*     a memory address and an object size. This number may be stored
-*     in a region of dynamically allocated memory to allow it to be
-*     recognised as dynamically allocated by other routines, and also
-*     to provide security against memory leaks, etc.
-
-*  Parameters:
-*     ptr
-*        The memory pointer.
-*     size
-*        The object size.
-
-*  Returned Value:
-*     The function returns the magic number.
-
-*  Notes:
-*     This function does not perform error checking.
-*/
-
-/* Form the bit-wise exclusive OR between the memory address and the
-   object size, then add 1 and invert the bits. Return the result as
-   an unsigned long integer. */
-#define MAGIC(ptr,size) \
-   ( ~( ( ( (unsigned long) ptr ) ^ ( (unsigned long) size ) ) + \
-             ( (unsigned long) 1 ) ) )
-
-/* A macro that returns the size of the a Memory structure padded to a
-   multiple of 8 bytes. */
-#define SIZEOF_MEMORY \
-   ( ( sizeof_memory != 0 ) ? sizeof_memory : SizeOfMemory( status ) )
-
-
-/* Type Definitions. */
-/* ================= */
-
-#ifdef MEM_PROFILE
-
-/* Structure used to record the time spent between matching calls to
-   astStartTimer and astStopTimer. */
-typedef struct AstTimer {
-   int id;                    /* Unique integer identifier for timer */
-   clock_t e0;                /* Absolute elapsed time at timer start */
-   clock_t u0;                /* Absolute user time at timer start */
-   clock_t s0;                /* Absolute system time at timer start */
-   clock_t et;                /* Cumulative elapsed time within timer */
-   clock_t ut;                /* Cumulative user time within timer */
-   clock_t st;                /* Cumulative system time within timer */
-   int nentry;                /* Number of entries into the timer */
-   const char *name;          /* An identifying label for the timer */
-   const char *file;          /* Name of source file where timer was started */
-   int line;                  /* Source file line no. where timer was started */
-   struct AstTimer *parent;   /* The parent enclosing timer */
-   int nchild;                /* Number of child timers */
-   struct AstTimer **children;/* Timers that count time within this timer */
-} AstTimer;
-
-#endif
-
-/* Module Variables. */
-/* ================= */
-
-/* Extra stuff for profiling (can only be used in single threaded
-   environments). */
-#ifdef MEM_PROFILE
-static AstTimer *Current_Timer = NULL;
-static int Enable_Timers = 0;
-static int Timer_Count = 0;
-#endif
-
-/* Extra stuff for debugging of memory management (tracking of leaks
-   etc). */
-#ifdef MEM_DEBUG
-
-/* The identifier for the memory block which is to be tracked. */
-static int Watched_ID = -1;
-
-/* The next integer to use to identify an active memory block pointer. */
-static int Next_ID = -1;
-
-/* Indicates if future memory allocations are permanent (i.e. will not
-   usually be freed explicitly by AST). */
-static int Perm_Mem = 0;
-
-/* A "first in, last out" stack of Perm_Mem values used by nested 
-   astBeginPM/astEndPM contexts. */
-static int PM_Stack[ PM_STACK_MAXSIZE ];
-
-/* The number of values currently in the PM_Stack array. */
-static int PM_Stack_Size = 0;
-
-/* A pointer to a double linked list holding pointers to currently active 
-   memory blocks (i.e. memory blocks for which a pointer has been issued
-   but not yet freed). This does not include the memory blocks in the
-   Cache array (these are not considered to be active). */
-static Memory *Active_List = NULL;
-
-/* Should a new ID be issued each time a cached memory block is returned
-   by astMalloc? Otherwise, the same ID value is used throughtout the
-   life of a memory block. */
-static int Keep_ID = 0;
-
-/* Suppress all memory use reports except for issuing and freeing? */
-static int Quiet_Use = 0;
-
-/* Report the ID of every cached block when the cache is emptied? */
-static int List_Cache = 0;
-
-#ifdef THREAD_SAFE
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_DEBUG_MUTEX pthread_mutex_lock( &mutex2 );
-#define UNLOCK_DEBUG_MUTEX pthread_mutex_unlock( &mutex2 );
-#else
-#define LOCK_DEBUG_MUTEX
-#define UNLOCK_DEBUG_MUTEX
-#endif
-
-#endif
-
-/* Define macros for accessing all items of thread-safe global data 
-   used by this module. */
-#ifdef THREAD_SAFE
-
-#define sizeof_memory astGLOBAL(Memory,Sizeof_Memory)
-#define cache astGLOBAL(Memory,Cache)
-#define cache_init astGLOBAL(Memory,Cache_Init)
-#define use_cache astGLOBAL(Memory,Use_Cache)
-
-/* Define the initial values for the global data for this module. */
-#define GLOBAL_inits \
-   globals->Sizeof_Memory = 0; \
-   globals->Cache_Init = 0; \
-   globals->Use_Cache = 0; \
-
-/* Create the global initialisation function. */
-astMAKE_INITGLOBALS(Memory)
-
-/* If thread safety is not needed, declare globals at static variables. */ 
-/* -------------------------------------------------------------------- */ 
-#else
-
-/* The size of a Memory header structure, padded to a multiple of 8
-   bytes. This value is initialised by the SizeOfMemory function, and
-   should be accessed using the SIZEOF_MEMORY macro. */
-static size_t sizeof_memory = 0;
-
-/* A cache of allocated but currently unused memory block. This cache is
-   maintained in order to avoid the overhead of continual calls to malloc to
-   allocate small blocks of memory. The vast majority of memory blocks
-   allocated by AST are under 200 bytes in size. Each element in this array 
-   stores a pointer to the header for a free (i.e. allocated but currently 
-   unused) memory block. The size of the memory block (not including the 
-   Memory header) will equal the index at which the pointer is stored within 
-   "cache". Each free memory block contains (in its Memory header) a pointer 
-   to the header for another free memory block of the same size (or a NULL 
-   pointer if there are no other free memory blocks of the same size). */
-static Memory *cache[ MXCSIZE + 1 ];
-
-/* Has the "cache" array been initialised? */
-static int cache_init = 0;
-
-/* Should the cache be used? */
-static int use_cache = 0;
-
-#endif
-
-/* Prototypes for Private Functions. */
-/* ================================= */
-static size_t SizeOfMemory( int * );
-static char *CheckTempStart( const char *, const char *, const char *, char *, int *, int *, int *, int *, int *, int *, int *, int * );
-static char *ChrMatcher( const char *, const char *, const char *, const char *, const char *[], int, int, int, char ***, int *, const char **, int * );
-static char *ChrSuber( const char *, const char *, const char *[], int, int, char ***, int *, const char **, int * );
-
-#ifdef MEM_DEBUG
-static void Issue( Memory *, int * );
-static void DeIssue( Memory *, int * );
-#endif
-
-#ifdef MEM_PROFILE
-static AstTimer *ReportTimer( AstTimer *, int, AstTimer **, int *, int * );
-static int CompareTimers( const void *, const void * );
-static int CompareTimers2( const void *, const void * );
-#endif
-
-/* Function implementations. */
-/* ========================= */
-char *astAppendString_( char *str1, int *nc, const char *str2, int *status ) {
-/*
-*+
-*  Name:
-*     astAppendString
-
-*  Purpose:
-*     Append a string to another string which grows dynamically.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char *astAppendString( char *str1, int *nc, const char *str2 )
-
-*  Description:
-*     This function appends one string to another dynamically
-*     allocated string, extending the dynamic string as necessary to
-*     accommodate the new characters (plus the final null).
-
-*  Parameters:
-*     str1
-*        Pointer to the null-terminated dynamic string, whose memory
-*        has been allocated using the AST memory allocation functions
-*        defined in "memory.h". If no space has yet been allocated for
-*        this string, a NULL pointer may be given and fresh space will
-*        be allocated by this function.
-*     nc
-*        Pointer to an integer containing the number of characters in
-*        the dynamic string (excluding the final null). This is used
-*        to save repeated searching of this string to determine its
-*        length and it defines the point where the new string will be
-*        appended. Its value is updated by this function to include
-*        the extra characters appended.
-*
-*        If "str1" is NULL, the initial value supplied for "*nc" will
-*        be ignored and zero will be used.
-*     str2
-*        Pointer to a constant null-terminated string, a copy of which
-*        is to be appended to "str1".
-
-*  Returned Value:
-*     A possibly new pointer to the dynamic string with the new string
-*     appended (its location in memory may have to change if it has to
-*     be extended, in which case the original memory is automatically
-*     freed by this function). When the string is no longer required,
-*     its memory should be freed using astFree.
-
-*  Notes:
-*     - If this function is invoked with the global error status set
-*     or if it should fail for any reason, then the returned pointer
-*     will be equal to "str1" and the dynamic string contents will be
-*     unchanged.
-*-
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   int len;                      /* Length of new string */
-
-/* Initialise. */
-   result = str1;
-
-/* If the first string pointer is NULL, also initialise the character
-   count to zero. */
-   if ( !str1 ) *nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK || !str2 ) return result;
-
-/* Calculate the total string length once the two strings have been
-   concatenated. */
-   len = *nc + (int) strlen( str2 );
-
-/* Extend the first (dynamic) string to the required length, including
-   a final null. Save the resulting pointer, which will be
-   returned. */
-   result = astGrow( str1, len + 1, sizeof( char ) );
-
-/* If OK, append the second string and update the total character
-   count. */
-   if ( astOK ) {
-      (void) strcpy( result + *nc, str2 );
-      *nc = len;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static char *CheckTempStart( const char *template, const char *temp, 
-                             const char *pattern,
-                             char *allowed, int *ntemp, int *allow, 
-                             int *min_nc, int *max_nc, int *start_sub, 
-                             int *end_sub, int *greedy, int *status ){
-/*
-*  Name:
-*     CheckTempStart
-
-*  Purpose:
-*     Examine the leading field in an astChrSub template.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     char *CheckTempStart( const char *template, const char *temp, 
-*                           const char *pattern,
-*                           char *allowed, int *ntemp, int *allow, 
-*                           int *min_nc, int *max_nc, int *start_sub, 
-*                           int *end_sub, int *greedy, int *status )
-
-*  Description:
-*     This function returns inforation about the leading field in a
-*     template string supplied to astChrSub.
-
-*  Parameters:
-*     template
-*        The full template string (used for error messages).
-*     temp
-*        Pointer to the next character to read from the template string.
-*     pattern
-*        Pointer to the user supplied pattern string (only used in error
-*        messages).
-*     allowed
-*        Pointer to a buffer in which to store a string of characters
-*        that the leading temeplate field will match. A NULL pointer may
-*        be supplied in which case new memory will be allocated. The
-*        supplied memory is expanded as necessary, and a pointer to it is 
-*        returned as the function value.
-*     ntemp
-*        Address of an int in which to return the number of characters
-*        consumed from the start of "temp".
-*     allow
-*        Address of an int in which to return a flag which is non-zero if
-*        the returned string contains characters that are allowed in the
-*        test field, or zero if the returned string contains characters that 
-*        are disallowed in the test field.
-*     min_nc
-*        Address of an int in which to return the minimum number of 
-*        test characters that must belong to the returned set of 
-*        allowed characters.
-*     max_nc
-*        Address of an int in which to return the maximum number of 
-*        test characters that must belong to the returned set of 
-*        allowed characters.
-*     start_sub
-*        Address of an int in which to return a flag which is non-zero if
-*        the leading template field indicates the start of a field to be 
-*        substituted. In this case the supplied "allowed" pointer is
-*        returned without change as the function value, "Min_nc" is
-*        returned as zero, and max_nc is returned as zero.
-*     end_sub
-*        Address of an int in which to return a flag which is non-zero if
-*        the leading template field indicates the end of a field to be 
-*        substituted. In this case the supplied "allowed" pointer is
-*        returned without change as the function value, "Min_nc" is
-*        returned as zero, and limit is returned as zero.
-*     greedy
-*        Address of an int in which to return a flag which is non-zero if
-*        the template starts with a greedy quantifier.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a (possibly newly allocated) memory area holding a
-*     string of characters that the leading temeplate field will match.
-*     This string should be released using astFree when no longer needed.
-*     If a NULL pointyer is returned, then all characters are allowed
-*     (or disallowed if "*allow" is zero). 
-
-*  Notes:
-*     - The returned value is also stored in the module variable
-*     sizeof_memory. 
-*/
-
-/* Local Variables: */
-   char *result;
-   const char *start;
-   const char *end;
-
-/* Initialise. */
-   result = allowed;
-   *ntemp = 0;
-   *allow = 1;
-   *min_nc = 0;
-   *max_nc = 0;
-   *start_sub = 0;
-   *end_sub = 0;
-   *greedy = 1;
-
-/* Check global status */
-   if( !astOK ) return result;
-
-/* If the next character is an opening parenthesis, this marks the start
-   of a substitution field. */
-   if( *temp == '(' ) {
-      *start_sub = 1;
-      *ntemp = 1;
-
-/* If the next character is an closing parenthesis, this marks the end
-   of a substitution field. */
-   } else if( *temp == ')' ) {
-      *end_sub = 1;
-      *ntemp = 1;
-
-/* If the next character is an opening bracket, this marks the start of a
-   field of allowed or disallowed characters. */
-   } else {
-      if( *temp == '[' ) {
-
-/* If the first character in the brackets is "^" this is a field of
-   disallowed characters, otherwise they are allowed. */
-         if( temp[ 1 ] == '^' ) {
-            *allow = 0;
-            start = temp + 2;
-         } else {
-            start = temp + 1;
-         }
-     
-/* Get a pointer to the closing bracket. */
-         end = strchr( temp, ']' );
-
-/* Copy the intervening string into the returned string. */
-         if( end ) {
-            result = astStore( allowed, start, end - start + 1 );
-            if( result ) result[ end - start  ] = 0;
-
-/* Report an error if no closing bracket was found. */
-         } else {
-            astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
-                      "missing ']'.", status, pattern );
-         }
-
-/* Indicate how many template characters have been used. */
-         *ntemp = end - temp + 1;
-
-/* A single dot matches any character. */
-      } else if( *temp == '.' ) {
-         result = astFree( result );
-         *ntemp = 1;
-
-/* Now deal with escape sequences. */
-      } else if( *temp == '\\' ) {
-
-/* Digits... */
-         if( temp[ 1 ] == 'd' || temp[ 1 ] == 'D' ) {
-            result = astStore( allowed, "0123456789", 11 );
-            result[ 10 ] = 0;
-            if( temp[ 1 ] == 'D' ) *allow = 0;
-
-/* White space... */
-         } else if( temp[ 1 ] == 's' || temp[ 1 ] == 'S' ) {
-            result = astStore( allowed, " 	\n\r", 5 );
-            result[ 4 ] = 0;
-            if( temp[ 1 ] == 'S' ) *allow = 0;
-              
-/* Word characters... */
-         } else if( temp[ 1 ] == 'w' || temp[ 1 ] == 'W' ) {
-            result = astStore( allowed, "abcdefghijklmnopqrstuvwxyz"
-                               "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
-                               64 );                                
-            result[ 63 ] = 0;
-            if( temp[ 1 ] == 'W' ) *allow = 0;
-
-/* Any other character is treated literally. */
-         } else {
-            result = astStore( allowed, temp + 1, 2 );
-            result[ 1 ] = 0;
-         }
-
-/* Set number of template characters consumed. */
-         *ntemp = 2;
-
-/* Everything else must be matched literally. */
-      } else {
-
-         if( *temp == '*' || *temp == '?' || *temp == '+' ){
-            astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
-                      "field starts with '%c'.", status, pattern, temp[ *ntemp ] );
-         } else {
-            result = astStore( allowed, temp, 2 );
-            result[ 1 ] = 0;
-            *ntemp = 1;
-         }
-
-      }
-
-/* Now see if there is any quantifier. */
-      if( temp[ *ntemp ] == '*' ) {
-         *min_nc = 0;
-         *max_nc = INT_MAX;
-         (*ntemp)++;
-         if( temp[ *ntemp ] == '?' ){
-            *greedy = 0;
-            (*ntemp)++;
-         }             
-
-      } else if( temp[ *ntemp ] == '+' ) {
-         *min_nc = 1;
-         *max_nc = INT_MAX;
-         (*ntemp)++;
-         if( temp[ *ntemp ] == '?' ){
-            *greedy = 0;
-            (*ntemp)++;
-         }             
-
-      } else if( temp[ *ntemp ] == '?' ) {
-         *min_nc = 0;
-         *max_nc = 1;
-         (*ntemp)++;
-
-      } else {
-
-/* See if the remaining string starts with "{nnn}". If so, extract the
-   "nnn" and use it as the minimum and maximum field length. */
-         if( temp[ *ntemp ] == '{' ) {
-
-            start = temp + *ntemp + 1;
-            while( isdigit( (int) *start ) ) {
-               *min_nc = 10*( *min_nc ) + (int )( ( *start ) - '0' );
-               start++;
-            }
-
-            if( *start == '}' ) {
-               *max_nc = *min_nc;
-               *ntemp = start - temp + 1;
-            } else {
-               start = NULL;
-            }
-
-         } else {
-            start = NULL;
-         }
-
-/* If the remaining string does not start with "{nnn}", use a minimum and 
-   maximum field length of 1. */
-         if( !start ) {
-            *min_nc = 1;
-            *max_nc = 1;
-         }
-      }
-   }
-
-/* Return the string of allowed characters. */
-   return result;
-}
-
-double astChr2Double_( const char *str, int *status ) {
-/*
-*+
-*  Name:
-*     astChr2Double
-
-*  Purpose:
-*     read a double value from a string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     double astChr2Double( const char *str )
-
-*  Description:
-*     This function reads a double from the supplied null-terminated string, 
-*     ignoring leading and trailing white space. AST__BAD is ereturned
-*     without error if the string is not a numerical value.
-
-*  Parameters:
-*     str
-*        Pointer to the string.
-
-*  Returned Value:
-*     The double value, or AST__BAD.
-
-*  Notes:
-*     -  A value of AST__BAD is returned if this function is invoked with 
-*     the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int nc;            /* Number of characters read from the string */
-   double result;     /* The returned value */
-
-/* Check the global error status and supplied pointer. */
-   if ( !astOK || !str ) return AST__BAD;
-
-/* Use scanf to read the floating point value. This fails if either 1) the
-   string does not begin with a numerical value (in which case astSscanf
-   returns zero), or 2) there are non-white characters following the
-   numerical value (i nwhich case "nc" - the number of characters read from
-   the string - is less than the length of the string). */
-   if ( nc = 0,
-        ( 1 != astSscanf( str, " %lg %n", &result, &nc ) )
-        || ( nc < strlen( str ) ) ) {
-      result = AST__BAD;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-int astChrMatch_( const char *str1, const char *str2, int *status ) {
-/*
-*+
-*  Name:
-*     astChrMatch
-
-*  Purpose:
-*     Case insensitive string comparison.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astChrMatch( const char *str1, const char *str2 )
-
-*  Description:
-*     This function compares two null terminated strings for equality,
-*     discounting differences in case and any trailing white space in either
-*     string.
-
-*  Parameters:
-*     str1
-*        Pointer to the first string.
-*     str2
-*        Pointer to the second string.
-
-*  Returned Value:
-*     Non-zero if the two strings match, otherwise zero.
-
-*  Notes:
-*     -  A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int match;                    /* Strings match? */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   match = 1;
-
-/* Loop to compare characters in the two strings until a mis-match occurs or
-   we reach the end of the longer string. */
-   while ( match && ( *str1 || *str2 ) ) {
-
-/* Two characters match if (a) we are at the end of one string and the other
-   string contains white space or (b) both strings contain the same character
-   when converted to lower case. */
-      match = ( !*str1 && isspace( *str2 ) ) ||
-              ( !*str2 && isspace( *str1 ) ) ||
-              ( tolower( *str1 ) == tolower( *str2 ) );
-
-/* Step through each string a character at a time until its end is reached. */
-      if ( *str1 ) str1++;
-      if ( *str2 ) str2++;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-int astChrMatchN_( const char *str1, const char *str2, size_t n, int *status ) {
-/*
-*+
-*  Name:
-*     astChrMatchN
-
-*  Purpose:
-*     Case insensitive string comparison of at most N characters
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astChrMatchN( const char *str1, const char *str2, size_t n )
-
-*  Description:
-*     This function compares two null terminated strings for equality,
-*     discounting differences in case and any trailing white space in either
-*     string. No more than "n" characters are compared.
-
-*  Parameters:
-*     str1
-*        Pointer to the first string.
-*     str2
-*        Pointer to the second string.
-*     n
-*        Maximum number of characters to compare.
-
-*  Returned Value:
-*     Non-zero if the two strings match, otherwise zero.
-
-*  Notes:
-*     -  A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int match;                    /* Strings match? */
-   int nc;                       /* Number of characters compared so far */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   match = 1;
-
-/* So far we have compared zero characters */
-   nc = 0;
-
-/* Loop to compare characters in the two strings until a mis-match occurs or
-   we reach the end of the longer string, or we reach the specified
-   maximum number of characters. */
-   while ( match && ( *str1 || *str2 ) && nc++ < n ) {
-
-/* Two characters match if (a) we are at the end of one string and the other
-   string contains white space or (b) both strings contain the same character
-   when converted to lower case. */
-      match = ( !*str1 && isspace( *str2 ) ) ||
-              ( !*str2 && isspace( *str1 ) ) ||
-              ( tolower( *str1 ) == tolower( *str2 ) );
-
-/* Step through each string a character at a time until its end is reached. */
-      if ( *str1 ) str1++;
-      if ( *str2 ) str2++;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-char **astChrSplit_( const char *str, int *n, int *status ) {
-/*
-*+
-*  Name:
-*     astChrSplit
-
-*  Purpose:
-*     Extract words from a supplied string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char **astChrSplit_( const char *str, int *n ) 
-
-*  Description:
-*     This function extracts all space-separated words form the supplied
-*     string and returns them in an array of dynamically allocated strings.
-
-*  Parameters:
-*     str
-*        Pointer to the string to be split.
-*     n
-*        Address of an int in which to return the number of words returned.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array containing "*n" elements.
-*     Each element is a pointer to a dynamically allocated character
-*     string containing a word extracted from the supplied string. Each
-*     of these words will have no leading or trailing white space.
-
-*  Notes:
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason, or if
-*     the supplied string contains no words.
-*-
-*/
-
-/* Local Variables: */
-   char **result;
-   char *w;
-   const char *p;
-   const char *ws;
-   int first;
-   int state;
-   int wl;        
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise. */
-   result = NULL;
-   ws = NULL;
-   *n = 0;
-
-/* State 0 is "looking for the next non-white character which marks the
-   start of the next word". State 1 is "looking for the next white character 
-   which marks the end of the current word". */
-   state = 0;
-
-/* Loop through all characters in the supplied string, including the
-   terminating null. */
-   p = str - 1;
-   first = 1;
-   while( *(p++) || first ) {
-      first = 0;
-
-/* If this is the terminating null or a space, and we are currently looking
-   for the end of a word, allocate memory for the new word, copy the text
-   in, terminate it, extend the returned array by one element, and store 
-   the new word in it. */
-      if( !*p || isspace( *p ) ) {
-         if( state == 1 ) {      
-            wl = p - ws;
-            w = astMalloc( wl + 1 );
-            if( w ) {
-               strncpy( w, ws, wl );
-               w[ wl ] = 0;
-               result = astGrow( result, *n + 1, sizeof( char * ) );
-               if( result ) result[ (*n)++ ] = w;
-            }
-            state = 0;
-         }
-
-/* If this is non-blank character, and we are currently looking for the
-   start of a word, note the address of the start of the word, and
-   indicate that we are now looking for the end of a word. */
-      } else {
-         if( state == 0 ) {
-            state = 1;
-            ws = p;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-char **astChrSplitC_( const char *str, char c, int *n, int *status ) {
-/*
-*+
-*  Name:
-*     astChrSplitC
-
-*  Purpose:
-*     Split a string using a specified character delimiter.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char **astChrSplitC( const char *str, char c, int *n ) 
-
-*  Description:
-*     This function extracts all sub-strings separated by a given
-*     character from the supplied string and returns them in an array 
-*     of dynamically allocated strings. The delimiter character itself
-*     is not included in the returned strings.
-*
-*     Delimiter characters that are preceeded by "\" are not used as
-*     delimiters but are included in the returned word instead (without 
-*     the "\").
-
-*  Parameters:
-*     str
-*        Pointer to the string to be split.
-*     c
-*        The delimiter character.
-*     n
-*        Address of an int in which to return the number of words returned.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array containing "*n" elements.
-*     Each element is a pointer to a dynamically allocated character
-*     string containing a word extracted from the supplied string.
-
-*  Notes:
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason, or if
-*     the supplied string contains no words.
-*-
-*/
-
-/* Local Variables: */
-   char **result;
-   char *word;
-   const char *p;
-   int escaped;
-   int wordlen;
-
-/* Initialise returned values. */
-   *n = 0;
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* More initialisations. */
-   word = NULL;
-   wordlen = 0;
-   escaped = 0;
-
-/* Loop through all characters in the supplied string, including the
-   terminating null. */
-   p = str;
-   while( *p ) {
-
-/* Is this a delimiter character? */
-      if( *p == c ) {
-
-/* If it is escaped, it does not mark the end of a word. Put it into the
-   current output buffer instead, overwriting the escape character that
-   preceeded it. */
-         if( escaped ) {
-            word[ wordlen - 1 ] = c;
-
-/* The next character is not escaped. */
-            escaped = 0;
-
-/* If the delimiter is not escaped, terminate the current word and store
-   a pointer to it in the returned array. */
-         } else {
-            result = astGrow( result, *n + 1, sizeof( char * ) );
-            word = astGrow( word, wordlen + 1, 1 );
-            if( result && word ) {
-               word[ wordlen ] = 0;
-               result[ (*n)++ ] = word;
-               wordlen = 0;
-               word = NULL;
-            }
-         }
-
-/* If this is not a delimitier character, store it in the returned word. */
-      } else {
-         word = astGrow( word, wordlen + 1, 1 );
-         if( word ) word[ wordlen++ ] = *p;
-
-/* If the current character was escaped, indicate that the next character
-   is not escaped. */
-         if( escaped ) {
-            escaped = 0;
-
-/* If this character is a unescaped backslash, set a flag indicating that the 
-   next character is escaped. */
-         } else if( *p == '\\' ){
-            escaped = 1;
-         }
-      }
-
-/* Move on to the next character. */
-      p++;
-   }
-
-/* Store the text following the final delimitier. */
-   result = astGrow( result, *n + 1, sizeof( char * ) );
-   word = astGrow( word, wordlen + 1, 1 );
-   if( result && word ) {
-      word[ wordlen ] = 0;
-      result[ (*n)++ ] = word;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-char **astChrSplitRE_( const char *str, const char *regexp, int *n, 
-                       const char **matchend, int *status ) {
-/*
-*+
-*  Name:
-*     astChrSplitRE
-
-*  Purpose:
-*     Extract sub-strings matching a specified regular expression.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char **astChrSplitRE( const char *str, const char *regexp, int *n,
-*                           const char **matchend ) 
-
-*  Description:
-*     This function compares the supplied string with the supplied 
-*     regular expression. If they match, each section of the test string
-*     that corresponds to a parenthesised sub-string in the regular 
-*     expression is copied and stored in the returned array.
-
-*  Parameters:
-*     str
-*        Pointer to the string to be split.
-*     regexp
-*        The regular expression. See "Template Syntax:" in the astChrSub
-*        prologue. Note, this function differs from astChrSub in that any 
-*        equals signs (=) in the regular expression are treated literally.
-*     n
-*        Address of an int in which to return the number of sub-strings 
-*        returned.
-*     matchend
-*        A pointer to a location at which to return a pointer to the
-*        character that follows the last character within the supplied test 
-*        string that matched any parenthesises sub-section of "regexp". A 
-*        NULL pointer is returned if no matches were found. A NULL pointer 
-*        may be supplied if the location of the last matching character is 
-*        not needed.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array containing "*n" elements.
-*     Each element is a pointer to a dynamically allocated character
-*     string containing a sub-string extracted from the supplied string.
-*     The array itself, and the strings within it, should all be freed
-*     using astFree when no longer needed.
-
-*  Notes:
-*     - If a parenthesised sub-string in the regular expression is matched
-*     by more than one sub-string within the test string, then only the
-*     first is returned. To return multiple matches, the regular
-*     expression should include multiple copies of the parenthesised
-*     sub-string (for instance, separated by ".+?" if the intervening
-*     string is immaterial).
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason, or if
-*     the supplied string contains no words.
-*-
-*/
-
-/* Local Variables: */
-   char **result;
-   char *temp;
-   int i;
-
-/* Initialise returned values. */
-   *n = 0;
-   result = NULL;
-
-/* Check global status */
-   if( !astOK ) return result;
-
-/* Call ChrSuber to do the work, saving the matching parts of the test 
-   string. */
-   temp = ChrSuber( str, regexp, NULL, 0, 1, &result, n, matchend, status );
-   if( temp ) {
-      temp = astFree( temp );
-
-/* Free all results if no match was found. */
-   } else if( result ) {
-      for( i = 0; i < *n; i++ ) result[ i ] = astFree( result[ i ] );
-      result = astFree( result );
-      *n = 0;
-   }
-
-/* Return the result */
-   return result;
-}
-
-char *ChrSuber( const char *test, const char *pattern, const char *subs[],
-                int nsub, int ignore_equals, char ***parts, int *npart, 
-                const char **matchend, int *status ){
-/*
-*  Name:
-*     ChrSuber
-
-*  Purpose:
-*     Performs substitutions on a supplied string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char *ChrSuber( const char *test, const char *pattern, 
-*                     const char *subs[], int nsub, int ignore_equals,
-*                     char ***parts, int *npart, const char **matchend, 
-*                     int *status )
-
-*  Description:
-*     This function performs the work for astChrSub and astChrSplitRE.
-
-*  Parameters:
-*     test
-*        The string to be tested.
-*     pattern
-*        The template string. See "Template Syntax:" in the astChrSub
-         prologue.
-*     subs
-*        An array of strings that are to replace the sections of the test 
-*        string that match each parenthesised sub-string in "pattern". The 
-*        first element of "subs" replaces the part of the test string that 
-*        matches the first parenthesised sub-string in the template, etc.
-*
-*        If "nsub" is zero, then the "subs" pointer is ignored. In this
-*        case, and if parameter "ignore_equals" is zero, substitution strings 
-*        may be specified by appended them to the end of the "pattern" string, 
-*        separated by "=" characters
-*     nsub
-*        The number of substitution strings supplied in array "subs".
-*     ignore_equals
-*        If non-zero, any equals signs in the supplied pattern are
-*        treated literally, rather than being used to split the template
-*        from any substitution strigs. 
-*     parts
-*        Address of a location at which to return a pointer to an array
-*        of character string pointers. The strings are the sub-sections
-*        of "test" that matched the parenthesised sub-sections of
-*        "template". The array will have "*npart" elements. Ignored if NULL.
-*     npart
-*        Address of a location at which to return the length of the
-*        "parts" array. Ignored if "parts" is NULL.
-*     matchend
-*        A pointer to a location at which to return a pointer to the
-*        character that follows the last character within the supplied test 
-*        string that matched any parenthesises sub-section of "regexp". A 
-*        NULL pointer is returned if no matches were found. A NULL pointer 
-*        may be supplied if the location of the last matching character is 
-*        not needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string holding the result
-*     of the substitutions, or NULL if the test string does not match
-*     the template string. This string should be freed using astFree
-*     when no longer needed. If no substituions are specified then a
-*     copy of the test string is returned if it matches the template.
-
-*  Notes:
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason, or if
-*     the supplied test string does not match the template.
-
-*/
-
-/* Local Variables: */
-   char **sections;
-   char **temps;
-   char *cptr;
-   char *result;
-   char *temp;
-   char *template;
-   int i;
-   int nsec;
-   int ntemp;
-   size_t tlen;
-
-/* Initialise */
-   result = NULL;
-   if( parts ) *npart = 0;
-
-/* Check global status */
-   if( !astOK ) return result;
-
-/* If required, split the total "pattern" string into sections, using 
-   (unescaped) "=" characters as the delimiter. The first section is the 
-   actual template, and each subsequent section (if any) holds a 
-   substitution string. */
-   if( ! ignore_equals ) {
-      sections = astChrSplitC( pattern, '=', &nsec );
-
-/* If equals signs are being treated literally, just take a copy of the
-   supplied pattern. */
-   } else {
-      cptr = astStore( NULL, pattern, strlen( pattern ) + 1 );
-      sections = &cptr;
-      nsec = 1;
-   }
-
-   if( sections ) {
-
-/* If the caller did not provide any substitution strings, use the ones
-   appended to the end of the pattern string (if any). */
-      if( nsub == 0 ) {
-         subs = (void *) ( sections + 1 );
-         nsub = nsec - 1;
-      }
-
-/* Split the template section into sub-sections, using (unescaped) "|"
-   characters as the delimiter. Each sub-section is an alternate pattern
-   matching template. */
-      temps = astChrSplitC( sections[ 0 ], '|', &ntemp );
-
-   } else {
-      temps = 0;
-      ntemp = 0;
-   }
-
-/* Loop round each template until all templates have been checked or a
-   match occurs.. */
-   for( i = 0; i < ntemp && !result; i++ ) {
-      temp = temps[ i ];
-      tlen = strlen( temp );
-
-/* If the template starts with "^" or "(^", remove the "^" character. 
-   Otherwise insert ".*?" at the start. Allocate three extra characters 
-   in case we later need to add ".*?" to the end of the string. */
-      if( temp[ 0 ] == '^' ) {
-         template = astMalloc( tlen + 3 );
-         if( template ) {
-            strcpy( template, temp + 1 );
-            tlen--;
-         }
-   
-      } else if( temp[ 0 ] == '(' && temp[ 1 ] == '^') {
-         template = astMalloc( tlen + 3 );
-         if( template ) {
-            template[ 0 ] = '(';
-            strcpy( template + 1, temp + 2 );
-            tlen--;
-         }
-   
-      } else {
-         template = astMalloc( tlen + 7 );
-         if( template ) {
-            template[ 0 ] = '.';
-            template[ 1 ] = '*';
-            template[ 2 ] = '?';
-            strcpy( template + 3, temp );
-            tlen += 3;
-         }
-      }
-
-/* If the pattern ends with "$" or "$)", remove the "$" character. Otherwise 
-   insert ".*?" at the end. */
-      if( template[ tlen - 1 ] == '$' ) {
-         tlen--;
-
-      } else if( template[ tlen - 2 ] == '$' && template[ tlen - 1 ] == ')' ) {
-         template[ tlen - 2 ] = ')';
-         tlen--;
-
-      } else {
-         template[ tlen ] = '.';
-         template[ tlen + 1 ] = '*';
-         template[ tlen + 2 ] = '?';
-         tlen += 3;
-      }
-
-/* Ensure the string is terminated */
-      template[ tlen ] = 0;
-
-/* See if the test string matches the current template. */
-      result = ChrMatcher( test, test + strlen( test ), template, pattern, 
-                           subs, nsub, 0, 1, parts, npart, matchend, status );
-
-/* Free resources. */
-      template = astFree( template );
-   }
-
-   if( temps ) {
-      for( i = 0; i < ntemp; i++ ) temps[ i ] = astFree( temps[ i ] );
-      temps = astFree( temps );
-   }
-
-   if( sections ) {
-      for( i = 0; i < nsec; i++ ) sections[ i ] = astFree( sections[ i ] );
-      if( ! ignore_equals ) sections = astFree( sections );
-   }
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astFree( result );
-
-/* Return the result */
-   return result;
-}
-
-char *astChrSub_( const char *test, const char *pattern, const char *subs[],
-                  int nsub, int *status ){
-/*
-*+
-*  Name:
-*     astChrSub
-
-*  Purpose:
-*     Performs substitutions on a supplied string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-c     #include "memory.h"
-c     char *astChrSub( const char *test, const char *pattern, 
-c                      const char *subs[], int nsub )
-f     MATCH = AST_CHRSUB( TEST, PATTERN, RESULT, STATUS )
-
-*  Description:
-*     This function checks a supplied test string to see if it matches a
-*     supplied template. If it does, specified sub-sections of the test
-*     string may optionally be replaced by supplied substitution strings.
-*     The resulting string is returned.
-
-*  Parameters:
-c     test
-f     TEST = CHARACTER * ( * ) (Given)
-*        The string to be tested.
-*     pattern
-f     PATTERN = CHARACTER * ( * ) (Given)
-*        The template string. See "Template Syntax:" below.
-*     subs
-*        An array of strings that are to replace the sections of the test 
-*        string that match each parenthesised sub-string in "pattern". The 
-*        first element of "subs" replaces the part of the test string that 
-*        matches the first parenthesised sub-string in the template, etc.
-*
-*        If "nsub" is zero, then the "subs" pointer is ignored. In this
-*        case, substitution strings may be specified by appended them to 
-*        the end of the "pattern" string, separated by "=" characters.
-*        Note, if you need to include a literal "=" character in the
-*        pattern, preceed it by an escape "\" character.
-*     nsub
-*        The number of substitution strings supplied in array "subs".
-f     RESULT = CHARACTER * ( * ) (Returned)
-f        Returned holding the result of the substitutions. If the test
-f        string does not match the template, then a blank string is
-f        returned.
-
-*  Returned Value:
-*     astChrSub()
-*        A pointer to a dynamically allocated string holding the result
-*	 of the substitutions, or NULL if the test string does not match
-*	 the template string. This string should be freed using astFree
-*	 when no longer needed. If no substituions are specified then a
-*	 copy of the test string is returned if it matches the template.
-f     AST_CHRSUB = LOGICAL
-*        .TRUE. if the test string matched the supplied template, and
-*        .FALSE. otherwise.
-
-*  Template Syntax:
-*     The template syntax is a minimal form of regular expression, The
-*     quantifiers allowed are "*", "?", "+", "{n}", "*?" and "+?" (the
-*     last two are non-greedy - they match the minimum length possible
-*     that still gives an overall match to the template). The only 
-*     constraints allowed are "^" and "$". The following atoms are allowed:
-*
-*     [chars]: Matches any of the specified characters.
-*     [^chars]: Matches anything but the specified characters.
-*     .: Matches any single character.
-*     x: Matches the character x so long as x has no other significance.
-*     \x: Always matches the character x (except for [dDsSwW]).
-*     \d: Matches a single digit.
-*     \D: Matches anything but a single digit.
-*     \w: Matches any alphanumeric character, and "_".
-*     \W: Matches anything but alphanumeric characters, and "_".
-*     \s: Matches white space.
-*     \S: Matches anything but white space.
-* 
-*     Note, minus signs ("-") within brackets have no special significance, 
-*     so ranges of characters must be specified explicitly.
-*
-*     Multiple template strings can be concatenated, using the "|"
-*     character to separate them. The test string is compared against
-*     each one in turn until a match is found. 
-*
-c     Parentheses are used within each template to identify sub-strings
-c     that are to be replaced by the strings supplied in "sub".
-c
-c     If "nsub" is supplied as zero, then substitution strings may be
-c     specified by appended them to the end of the "pattern" string,
-c     separated by "=" characters. If "nsub" is not zero, then any
-c     substitution strings appended to the end of "pattern" are ignored.
-f
-f     Parentheses are used within each template to identify sub-strings
-f     that are to be replaced by new strings. The new strings are
-f     specified by appended them to the end of the "pattern" string,
-f     separated by "=" characters. 
-*
-c     Each element of "subs" 
-f     Each new string
-*     may contain a reference to a token of the 
-*     form "$1", "$2", etc. The "$1" token will be replaced by the part 
-*     of the test string that matched the first parenthesised sub-string 
-*     in "pattern". The "$2" token will be replaced by the part of the 
-*     test string that matched the second parenthesised sub-string in 
-*     "pattern", etc.
-*
-
-c  Notes:
-c     -  A NULL pointer is returned if this function is invoked with the
-c     global error status set or if it should fail for any reason, or if
-c     the supplied test string does not match the template.
-
-*-
-*/
-
-/* Call ChrSuber to do the work, without saving the matching parts of the
-   test string. */
-   return ChrSuber( test, pattern, subs, nsub, 0, NULL, NULL, NULL, status );
-}
-
-void *astFree_( void *ptr, int *status ) {
-/*
-*+
-*  Name:
-*     astFree
-
-*  Purpose:
-*     Free previously allocated memory.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void *astFree( void *ptr )
-
-*  Description:
-*     This function frees memory that has previouly been dynamically
-*     allocated.
-
-*  Parameters:
-*     ptr
-*        Pointer to previously allocated memory. An error will result
-*        if the memory has not previously been allocated by another
-*        function in this module. However, a NULL pointer value is
-*        accepted (without error) as indicating that no memory has yet
-*        been allocated, so that no action is required.
-
-*  Returned Value:
-*     Always NULL.
-
-*  Notes:
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   Memory *mem;                  /* Pointer to memory header */
-   int isdynamic;                /* Is the memory dynamically allocated? */
-   size_t size;                  /* The usable size of the memory block */
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* If the incoming pointer is NULL, do nothing. Otherwise, check if it
-   points at dynamically allocated memory (IsDynamic sets the global
-   error status if it does not). */
-   if( ptr ) {
-      IS_DYNAMIC( ptr, isdynamic );
-   } else {
-      isdynamic = 0;
-   }
-   if ( isdynamic ) {
-
-/* If OK, obtain a pointer to the memory header. */
-      mem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
-
-#ifdef MEM_DEBUG
-      DeIssue( mem, status );
-#endif
-
-/* If the memory block is small enough, and the cache is being used, put it 
-   into the cache rather than freeing it, so that it can be reused. */
-      size = mem->size;
-      if( use_cache && size <= MXCSIZE ) {
-         mem->next = cache[ size ];
-         cache[ size ] = mem;
-
-/* Set the size to zero to indicate that the memory block has been freed.
-   The size of the block is implied by the Cache element it is stored in. */
-         mem->size = (size_t) 0;
-
-/* Simply free other memory blocks, clearing the "magic number" and size 
-   values it contains. This helps prevent accidental re-use of the memory. */
-      } else {
-         mem->magic = (unsigned long) 0;
-         mem->size = (size_t) 0;
-
-/* Free the allocated memory. */
-         FREE( mem );
-      }
-   }
-
-/* Always return a NULL pointer. */
-   return NULL;
-
-}
-
-void *astGrow_( void *ptr, int n, size_t size, int *status ) {
-/*
-*+
-*  Name:
-*     astGrow
-
-*  Purpose:
-*     Allocate memory for an adjustable array.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void *astGrow( void *ptr, int n, size_t size )
-
-*  Description:
-*     This function allocates memory in which to store an array of
-*     data whose eventual size is unknown. It should be invoked
-*     whenever a new array size is determined and will appropriately
-*     increase the amount of memory allocated when necessary. In
-*     general, it will over-allocate in anticipation of future growth
-*     so that the amount of memory does not need adjusting on every
-*     invocation.
-
-*  Parameters:
-*     ptr
-*        Pointer to previously allocated memory (or NULL if none has
-*        yet been allocated).
-*     n
-*        Number of array elements to be stored (may be zero).
-*     size
-*        The size of each array element.
-
-*  Returned Value:
-*     If the memory was allocated successfully, a pointer to the start
-*     of the possibly new memory region is returned (this may be the
-*     same as the original pointer).
-
-*  Notes:
-*     - When new memory is allocated, the existing contents are preserved.
-*     - This function does not free memory once it is allocated, so
-*     the size allocated grows to accommodate the maximum size of the
-*     array (or "high water mark"). Other memory handling routines may
-*     be used to free the memory (or alter its size) if necessary.
-*     - If this function is invoked with the global error status set,
-*     or if it fails for any reason, the original pointer value is
-*     returned and the memory contents are unchanged.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   int isdynamic;                /* Is the memory dynamically allocated? */
-   Memory *mem;                  /* Pointer to memory header */
-   size_t newsize;               /* New size to allocate */
-   void *new;                    /* Result pointer */
-
-/* Check the global error status. */
-   if ( !astOK ) return ptr;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = ptr;
-
-/* Calculate the total size of memory needed. */
-   size *= (size_t) n;
-
-/* If no memory has yet been allocated, allocate exactly the amount
-   required. */
-   if ( !ptr ) {
-      new = astMalloc( size );
-
-/* Otherwise, check that the incoming pointer identifies previously
-   allocated memory. */
-   } else {
-      IS_DYNAMIC( ptr, isdynamic );
-      if ( isdynamic ) {
-
-/* Obtain a pointer to the memory header and check if the new size
-   exceeds that already allocated. */
-         mem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
-         if ( mem->size < size ) {
-
-/* If so, calculate a possible new size by doubling the old
-   size. Increase this further if necessary. */
-            newsize = mem->size * ( (size_t) 2 );
-            if ( size > newsize ) newsize = size;
-
-/* Re-allocate the memory. */
-            new = astRealloc( ptr, newsize );
-         }
-      }
-   }
-
-/* Return the result. */
-   return new;
-}
-
-int astIsDynamic_( const void *ptr, int *status ) {
-/*
-*+
-*  Name:
-*     astIsDynamic
-
-*  Purpose:
-*     Returns a flag indicating if memory was allocated dynamically.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astIsDynamic_( const void *ptr )
-
-*  Description:
-*     This function takes a pointer to a region of memory and tests if
-*     the memory has previously been dynamically allocated using other
-*     functions from this module. It does this by checking for the
-*     presence of a "magic" number in the header which precedes the
-*     allocated memory. If the magic number is not present (or the
-*     pointer is invalid for any other reason), zero is returned.
-*     Otherwise 1 is returned.
-
-*  Parameters:
-*     ptr
-*        Pointer to test.
-
-*  Returned Value:
-*     Non-zero if the memory was allocated dynamically. Zero is returned
-*     if the supplied pointer is NULL.
-
-*  Notes:
-*     - A value of zero is returned if this function is invoked with
-*     the global error status set, or if it fails for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   Memory *isdynmem;               /* Pointer to memory header */ \
-
-/* Check the global error status and the supplied pointer. */
-   if ( !astOK || ! ptr ) return 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Derive a pointer to the memory header that precedes the 
-   supplied region of memory. */ 
-   isdynmem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY ); 
-
-/* Check if the "magic number" in the header is valid, returning non-zero
-   if it is. */
-   return ( isdynmem->magic == MAGIC( isdynmem, isdynmem->size ) );
-}
-
-void *astMalloc_( size_t size, int *status ) {
-/*
-*+
-*  Name:
-*     astMalloc
-
-*  Purpose:
-*     Allocate memory.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void *astMalloc( size_t size )
-
-*  Description:
-*     This function allocates memory in a similar manner to the
-*     standard C "malloc" function, but with improved security
-*     (against memory leaks, etc.) and with error reporting. It also
-*     allows zero-sized memory allocation (without error), resulting
-*     in a NULL returned pointer value.
-
-*  Parameters:
-*     size
-*        The size of the memory region required (may be zero).
-
-*  Returned Value:
-*     If successful, the function returns a pointer to the start of
-*     the allocated memory region. If the size allocated is zero, this
-*     will be a NULL pointer.
-
-*  Notes:
-*     - A pointer value of NULL is returned if this function is
-*     invoked with the global error status set or if it fails for any
-*     reason.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Constants: */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   char errbuf[ ERRBUF_LEN ];    /* Buffer for system error message */
-   char *errstat;                /* Pointer to system error message */
-   Memory *mem;                  /* Pointer to space allocated by malloc */
-   void *result;                 /* Returned pointer */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check that the size requested is not negative and report an error
-   if it is. */
-   if ( size < (size_t) 0 ) {
-      astError( AST__MEMIN,
-                "Invalid attempt to allocate %lu bytes of memory.", status,
-                (unsigned long) size );
-
-/* Otherwise, if the size is greater than zero, either get a previously
-   allocated memory block from the cache, or attempt to use malloc
-   to allocate the memory, including space for the header structure. */
-   } else if ( size != (size_t ) 0 ) {
-
-/* If the cache is being used and a cached memory block of the required size 
-   is available, remove it from the cache array and use it. */
-      mem = ( size <= MXCSIZE ) ? cache[ size ] : NULL;
-      if( use_cache && mem ) {
-         cache[ size ] = mem->next;
-         mem->next = NULL;
-         mem->size = (size_t) size;
-
-/* Otherwise, allocate a new memory block using "malloc". */
-      } else {      
-         mem = MALLOC( SIZEOF_MEMORY + size );
-
-/* Report an error if malloc failed. */
-         if ( !mem ) {
-
-#if HAVE_STRERROR_R
-            strerror_r( errno, errbuf, ERRBUF_LEN );
-            errstat = errbuf;
-#else
-            errstat = strerror( errno );
-#endif
-            astError( AST__NOMEM, "malloc: %s", status, errstat );
-            astError( AST__NOMEM, "Failed to allocate %lu bytes of memory.", status,
-                      (unsigned long) size );
-
-/* If successful, set the "magic number" in the header and also store
-   the size. */
-         } else {
-            mem->magic = MAGIC( mem, size );
-            mem->size = size;
-            mem->next = NULL;
-
-#ifdef MEM_DEBUG
-            mem->id = -1;
-#endif
-
-         }
-      }
-
-/* Do nothing more if no memory is being returned. */
-      if( mem ) {
-
-#ifdef MEM_DEBUG
-      Issue( mem, status );
-#endif
-
-/* Increment the memory pointer to the start of the region of
-   allocated memory to be used by the caller.*/
-         result = mem;
-         result = (char *) result + SIZEOF_MEMORY;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-#undef ERRBUF_LEN
-
-static char *ChrMatcher( const char *test, const char *end, const char *template, 
-                         const char *pattern, const char *subs[], int nsub, 
-                         int ignore, int expdoll, char ***mres, int *mlen, 
-                         const char **matchend, int *status ){
-/*
-*  Name:
-*     ChrMatcher
-
-*  Purpose:
-*     Performs substitutions on a supplied string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char *ChrMatcher( const char *test, const char *end, const char *template, 
-*                       const char *pattern, const char *subs[], int nsub, 
-*                       int ignore, int expdoll, char ***mres, int *mlen, 
-*                       const char **matchend, int *status )
-
-*  Description:
-*     This function is performs most of the work for astChrSub.
-
-*  Parameters:
-*     test
-*        The string to be tested.
-*     end
-*        Pointer to the terminating null character at the end of "test".
-*     template
-*        The template string. See astChrSub for details.
-*     pattern
-*        The user supplied "pattern" string (only used for error messages).
-*     subs
-*        An array of strings holding the values that are to be substituted
-*        into each parenthesised substring in "test". 
-*     nsub
-*        The length of the subs arrays.
-*     ignore
-*        If non-zero, then no substitutions are performed, and any
-*        inbalance in parentheses is ignored.
-*     expdoll
-*        If non-zero, then any "$1", "$2", etc, tokens in the
-*        substitution fields will be repalced by the corresponding fields
-*        in the test string.
-*     mres
-*        Address of a location at which to return a pointer to an array
-*        of character string pointers. The strings are the sub-sections
-*        of "test" that matched the parenthesised sub-sections of
-*        "template". The array will have "*m" elements. Ignored if NULL.
-*     mlen
-*        Address of a location at which to return the length of the
-*        returned "mres" array. Ignored if "mres" is NULL.
-*     matchend
-*        A pointer to a location at which to return a pointer to the
-*        character that follows the last character within the supplied test 
-*        string that matched any parenthesises sub-section of "regexp". A 
-*        NULL pointer is returned if no matches were found. A NULL pointer 
-*        may be supplied if the location of the last matching character is 
-*        not needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string holding the result of the
-*     substitutions, or NULL if the test string does not match the template
-*     string. This string should be freed using astFree when no longer
-*     needed.
-
-*  Notes:
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason, or if
-*     the supplied test string does not match the template.
-*-
-*/
-
-/* Local Variables: */
-   char **matches;
-   char **newsubs;
-   char **parts;
-   char *allowed;
-   char *r;
-   char *result;
-   char *sres;
-   char *stest;
-   char stemp[10];
-   const char *aaa;
-   const char *aa;
-   const char *a;
-   const char *b;
-   int allow;
-   int dollar;
-   int end_sub;
-   int greedy;
-   int i;
-   int in_sub;
-   int ipart;
-   int match;
-   int matchlen;
-   int max_na;
-   int min_na;
-   int na;
-   int nb;
-   int nmatch;
-   int npart;
-   int partlen;
-   int reslen;      
-   int start_sub;
-   size_t stl;
-
-/* Initialisation. */
-   if( mres ) *mlen = 0;
-   aaa = NULL;
-   if( matchend ) *matchend = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return NULL;
-
-/* more initialisation. */
-   result = NULL;
-   allowed = NULL;
-
-/* Get memory for a set of pointers to copies of the test sub-strings that 
-   fall between the sub-strings being replaced. */
-   parts = astMalloc( sizeof( char *)*(size_t) ( nsub + 1 ) );
-
-/* Get memory for a set of pointers to copies of the test sub-strings that 
-   match the parenthesised sub-strings in the template. */
-   matches = astMalloc( sizeof( char *)*(size_t) nsub );
-
-/* Initialise pointers to the next test and template characters to read. */ 
-   a = test;
-   b = template;
-
-/* Initialise the pointer to the start of the previous test character */
-   aa = test;
-
-/* Assume the test string matches the template. */
-   match = 1;
-
-/* The template pointer is not currently in a substitution field. */
-   in_sub = 0;
-
-/* Initialise the number of substitution fields found so far. */
-   npart = 0;
-   nmatch = 0;
-
-/* Loop until we have reached the end of either the test or template
-   string. We break out of the loop early if we find that the test string
-   does not match the template string. */
-   while( match && *a && *b ) {
-
-/* Examine the string at the start of the template string. This returns a
-   string of allowed (or disallowed) characters that the next test character 
-   can match, the number of template characters consumed, the minimum number 
-   of test characters that must match the allowed character set, and a flag
-   indicating if the number of matching test characters can exceed the 
-   minimum number or must be exactly equal to the minimum number.  */
-      allowed = CheckTempStart( template, b, pattern, allowed, &nb, &allow, 
-                                &min_na, &max_na, &start_sub, &end_sub,
-                                &greedy, status );
-      if( !astOK ) break;
-
-/* Increment the the pointer to the next template character. */
-      b += nb;
-
-/* If the leading field in the template indicates the start of a
-   substitution field, record the test string up to the current point. */
-      if( start_sub ){
-
-/* Do nothing if we are ignoring substitutions. */
-         if( ! ignore ){
-
-/* Store a pointer to the first test character that matches the
-   substitution template. */
-            aaa = a;
-
-/* Report an error and abort if we are already inside a substitution
-   field */
-            if( in_sub ) {
-               astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
-                         "missing ')'.", status, pattern );
-               break;
-            } 
-
-/* Indicate that we are now in a substitution field. */
-            in_sub = 1;
-
-/* If possible, store a copy of the test string that started at the end
-   of the previous substitution field and ends at the current point.
-   First ensure the "parts" array is large enough since the string may
-   contain more than "nsub" parenthesised sub-strings. */
-            parts = astGrow( parts, npart + 1, sizeof( char * ) );
-            if( parts ) {
-               partlen = ( a - aa );
-               parts[ npart ] = astStore( NULL, aa, partlen + 1 );
-               if( parts[ npart ] ) {
-                  parts[ npart ][ partlen ] = 0;
-                  npart++;
-               }
-            }        
-         }
-
-/* If the leading field in the template indicates the end of a
-   substitution field, initialise the start of the next part of the test
-   string. */
-      } else if( end_sub ){
-
-/* Do nothing if we are ignoring substitutions. */
-         if( ! ignore ){
-
-/* Report an error and abort if we are not currently in a substitution
-   field. */
-            if( ! in_sub ) {
-               astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
-                         "missing '('.", status, pattern );
-               break;
-            }
-
-/* We are no longer in a substitution field. */
-            in_sub = 0; 
-
-/* If possible, store a copy of the test string that matched the
-   substitution template. */
-            matches = astGrow( matches, nmatch + 1, sizeof( char * ) );
-            if( matches ) {
-               matchlen = ( a - aaa );
-               matches[ nmatch ] = astStore( NULL, aaa, matchlen + 1 );
-               if( matches[ nmatch ] ) {
-                  matches[ nmatch ][ matchlen ] = 0;
-                  nmatch++;
-                  if( matchend ) *matchend = a + 1;
-               }
-            }        
-
-/* Record the start of the next test string part. */
-            aa = a;
-         }
-
-/* Otherwise, find how many characters at the front of the test string
-   match the leading field in the template. Find the number of leading 
-   characters in the test string that are contained in the set of 
-   characters allowed by the leading field in the template. */
-      } else {
-         if( !allowed ) {
-            na = strlen( a );
-
-         } else if( allow ) {
-            na = strspn( a, allowed );
-
-         } else {
-            na = strcspn( a, allowed );
-         }
-
-/* Check that the minmum number of matching characters is available. */
-         if( na < min_na ){
-            match = 0;
-            break;
-         }
-
-/* Dont match more characters than are needed. */
-         if( na > max_na ) na = max_na;
-
-/* We cannot match more characters than are available. */
-         if( na < max_na ) max_na = na;
-
-/* If we have exhausted the template, match the maximum number of
-   characters. */
-         if( ! *b ) {
-            na = max_na;
-
-/* If we still have a match, we may choose to use fewer than the max
-   allowed number of test characters in order to allow the next template
-   field to be matched. Don't need to do this if we have reached the end
-   of the template. */
-         } else if( max_na > min_na ) {
-            match = 0;
-
-/* If a greedy quantifier was used, try using a decreasing number of test 
-   characters, starting at the maximum allowed and decreasing down to the 
-   minimum, until a number is found which allows the rest of the string 
-   to be matched. */
-            if( greedy ) {
-               for( na = max_na; na >= min_na; na-- ) {
-                  r = ChrMatcher( a + na, end, b, pattern, NULL, 0, 1, 0,
-                                  NULL, NULL, NULL, status );
-                  if( r ) {
-                     match = 1;
-                     r = astFree( r );
-                     break;                  
-                  }
-               }
-
-/* If a non-greedy quantifier was used, try using an increasing number of 
-   test characters, starting at the minimum allowed and increasing up to 
-   the maximum, until a number is found which allows the rest of the string 
-   to be matched. */
-            } else {
-               for( na = min_na; na <= max_na; na++ ) {
-                  r = ChrMatcher( a + na, end, b, pattern, NULL, 0, 1, 0,
-                                  NULL, NULL, NULL, status );
-                  if( r ) {
-                     match = 1;
-                     r = astFree( r );
-                     break;                  
-                  }
-               }
-            }
-         }
-
-/* Increment the the pointer to the next test character. */
-         a += na;
-         if( a > end ) a = end;
-      }
-   }
-
-/* If the next character in the template is a closing parenthesis, then
-   we are finishing a substitution field. */
-   if( match && *b == ')' ) {
-
-/*Check we are not ignoring substitutions. */
-      if( ! ignore ){
-
-/* Report an error and abort if we are not currently in a substitution
-   field. */
-         if( ! in_sub ) {
-            astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
-                      "missing '('.", status, pattern );
-         }
-
-/* We are no longer in a substitution field. */
-         in_sub = 0; 
-
-/* If possible, store a copy of the test string that matched the
-   substitution field. */
-         matches = astGrow( matches, nmatch + 1, sizeof( char * ) );
-         if( matches ) {
-            matchlen = ( a - aaa );
-            matches[ nmatch ] = astStore( NULL, aaa, matchlen + 1 );
-            if( matches[ nmatch ] ) {
-               matches[ nmatch ][ matchlen ] = 0;
-               nmatch++;
-               if( matchend ) *matchend = a + 1;
-            }
-         }        
-
-         aa = a;
-      }
-      b++;
-   }
-
-/* If the test string is finished but the template string is not, see if
-   the rest of the template string will match a null test string. */
-   if( !*a && *b && match ) {
-
-      while( *b ) {
-         allowed = CheckTempStart( template, b, pattern, allowed, &nb, &allow, 
-                                   &min_na, &max_na, &start_sub, &end_sub, 
-                                   &greedy, status );
-         b += nb;
-         allowed = astFree( allowed );
-
-         if( min_na > 0 ) {
-            match = 0;
-            break;
-         }
-      }
-
-   } 
-
-/* No match if either string was not used completely. */
-   if( *a || *b ) match = 0;
-
-/* Report an error if we are still inside a substitution field */
-   if( match && in_sub && !ignore ) {
-      astError( AST__BADSUB, "Invalid pattern matching template \"%s\": "
-                "missing ')'.", status, pattern );
-      match = 0;
-   } 
-
-/* If we have a match, construct the returned string. */
-   if( match && parts ) {
-
-/* Store the test string following the final substitution field. */
-      parts = astGrow( parts, npart + 1, sizeof( char * ) );
-      if( parts ) {
-         partlen = ( a - aa );
-         parts[ npart ] = astStore( NULL, aa, partlen + 1 );
-         if( parts[ npart ] ) {
-            parts[ npart ][ partlen ] = 0;
-            npart++;
-         }
-      }        
-
-/* If required, expand  $1, $2, etc within the replacement strings. */
-      if( expdoll) {
-         newsubs = astMalloc( sizeof( char * )*nsub );
-         if( newsubs ) {
-            for( i = 0; i < nsub; i++ ) {
-               stl = strlen( subs[ i ] );
-               stest = astStore( NULL, subs[ i ], stl + 1 );
-               for( dollar = 1; dollar <= nsub; dollar++ ) {
-                  sprintf( stemp, ".*($%d).*", dollar );
-                  sres = ChrMatcher( stest, stest + stl, stemp, stemp,
-                                     (void *) ( matches + dollar - 1 ),
-                                     1, 0, 0, NULL, NULL, NULL, status );
-                  if( sres ) {
-                     (void) astFree( stest );
-                     stest = sres;
-                  }
-               }
-               newsubs[ i ] = stest;
-            }
-         }
-
-      } else {
-         newsubs = (char **) subs;
-      }
-
-/* Concatenate the sub-strings to form the final string. */
-      reslen = 0;
-      for( ipart = 0; ipart < npart - 1; ipart++ ) {
-         result = astAppendString( result, &reslen, parts[ ipart ] );
-         if( ipart < nsub ) {
-            result = astAppendString( result, &reslen, newsubs[ ipart ] );
-         } else {
-            result = astAppendString( result, &reslen, matches[ ipart ] );
-         }
-      }
-      result = astAppendString( result, &reslen, parts[ ipart ] );
-
-/* Free resources. */
-      if( newsubs && newsubs != (char **) subs ) {
-         for( i = 0; i < nsub; i++ ) {
-            newsubs[ i ] = astFree( newsubs[ i ] );
-         }
-         newsubs = astFree( newsubs );
-      }
-   }
-
-   allowed = astFree( allowed );
-   for( ipart = 0; ipart < npart; ipart++ ) {
-      parts[ ipart ] = astFree( parts[ ipart ] );
-   }
-   parts = astFree( parts );
-
-/* If required, return the array holding the test sub-strings that
-   matched the parenthesised template sub-strings, together with
-   the length of the array. Otherwise, free the memory holding these
-   strings. */
-   if( mres ) {
-      *mres = matches;
-      *mlen = nmatch;
-
-   } else if( matches ) {
-      for( i = 0; i < nmatch; i++ ) {
-         matches[ i ] = astFree( matches[ i ] );
-      }
-      matches = astFree( matches );
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-int astMemCaching_( int newval, int *status ){
-/*
-*+
-*  Name:
-*     astMemCaching
-
-*  Purpose:
-*     Controls whether allocated but unused memory is cached in this module.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astMemCaching( int newval )
-
-*  Description:
-*     This function sets a flag indicating if allocated but unused memory
-*     should be cached or not. It also returns the original value of the
-*     flag.
-*
-*     If caching is switched on or off as a result of this call, then the
-*     current contents of the cache are discarded.
-*
-*     Note, each thread has a separate cache. Calling this function
-*     affects only the currently executing thread.
-
-*  Parameters:
-*     newval
-*        The new value for the MemoryCaching tuning parameter (see
-*        astTune in objectc.c). If AST__TUNULL is supplied, the current
-*        value is left unchanged.
-
-*  Returned Value:
-*     The original value of the MemoryCaching tuning parameter.
-
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            
-   int i;
-   int result;
-   Memory *mem;
-
-#ifdef MEM_DEBUG
-   int id_list_size;
-   int *id_list;
-#endif
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Store the original value of the tuning parameter. */
-   result = use_cache;
-   
-/* If a new value is to be set. */
-   if( newval != AST__TUNULL ) {
-
-/* If the cache has been initialised, empty it. */
-      if( cache_init ) {
-
-/* If we are listing the ID of every memory block in the cache, count the
-   number of blocks in the cache and then allocate an array to store the ID
-   values in. This is done so that we can sort them before displaying them. */
-#ifdef MEM_DEBUG
-         if( List_Cache ) {
-            Memory *next;
-
-            id_list_size = 0;
-            for( i = 0; i <= MXCSIZE; i++ ) {
-               next = cache[ i ];
-               while( next ) {
-                  id_list_size++;
-                  next = next->next;
-               }
-            }
-
-            id_list = MALLOC( sizeof(int)*id_list_size );
-            if( !id_list ) {
-               astError( AST__INTER, "astMemCaching: Cannot allocate %lu "
-                         "bytes of memory", status, (unsigned long)(sizeof(int)*id_list_size) );
-            }            
-
-            id_list_size = 0;
-
-         } else {
-            id_list = NULL;
-         }
-#endif
-
-         for( i = 0; i <= MXCSIZE; i++ ) {
-            while( cache[ i ] ) {
-               mem = cache[ i ];
-               cache[ i ] = mem->next;
-               mem->size = (size_t) i;
-
-#ifdef MEM_DEBUG
-               if( id_list ) {
-                  id_list[ id_list_size++ ] = mem->id;
-               }
-#endif
-
-               FREE( mem );
-            }
-         }
-
-/* If we are displaying the IDs of memory blocks still in the cache, sort 
-   them using a bubblesort algorithm, then display them. */
-#ifdef MEM_DEBUG
-         if( id_list ) {
-
-            if( id_list_size == 0 ) {
-               printf( "Emptying the AST memory cache - (the cache is "
-                       "already empty)\n" );
-
-            } else {
-               int sorted, j, t;
-
-               sorted = 0;
-               for( j = id_list_size - 2; !sorted && j >= 0; j-- ) {
-                  sorted = 1;
-                  for( i = 0; i <= j; i++ ) {
-                     if( id_list[ i ] > id_list[ i + 1 ] ) {
-                        sorted = 0;
-                        t = id_list[ i ];
-                        id_list[ i ] = id_list[ i + 1 ];
-                        id_list[ i + 1 ] = t;
-                     } 
-                  }
-               }
-
-               printf( "Emptying the AST memory cache - freeing the "
-                       "following memory blocks: ");
-               for( i = 0; i < id_list_size; i++ ) printf( "%d ", id_list[ i ] );
-               printf( "\n" );
-
-            }
-         }
-#endif
-
-/* Otherwise, initialise the cache array to hold a NULL pointer at every
-   element. */
-      } else {
-         for( i = 0; i <= MXCSIZE; i++ ) cache[ i ] = NULL;
-         cache_init = 1;
-      }
-
-/* Store the new value. */
-      use_cache = newval;
-
-   }
-
-/* Return the original value. */
-   return result;
-}
-
-void *astRealloc_( void *ptr, size_t size, int *status ) {
-/*
-*+
-*  Name:
-*     astRealloc
-
-*  Purpose:
-*     Change the size of a dynamically allocated region of memory.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void *astRealloc( void *ptr, size_t size )
-
-*  Description:
-*     This function changes the size of a dynamically allocated region
-*     of memory, preserving its contents up to the minimum of the old
-*     and new sizes. This may involve copying the contents to a new
-*     location, so a new pointer is returned (and the old memory freed
-*     if necessary).
-*
-*     This function is similar to the standard C "realloc" function
-*     except that it provides better security against programming
-*     errors and also supports the allocation of zero-size memory
-*     regions (indicated by a NULL pointer).
-
-*  Parameters:
-*     ptr
-*        Pointer to previously allocated memory (or NULL if the
-*        previous size of the allocated memory was zero).
-*     size
-*        New size required for the memory region. This may be zero, in
-*        which case a NULL pointer is returned (no error results). It
-*        should not be negative.
-
-*  Returned Value:
-*     If the memory was reallocated successfully, a pointer to the
-*     start of the new memory region is returned (this may be the same
-*     as the original pointer). If size was given as zero, a NULL
-*     pointer is returned.
-
-*  Notes:
-*     - If this function is invoked with the error status set, or if
-*     it fails for any reason, the original pointer value is returned
-*     and the memory contents are unchanged. Note that this behaviour
-*     differs from that of the standard C "realloc" function which
-*     returns NULL if it fails.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Constants: */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            
-   char errbuf[ ERRBUF_LEN ];    /* Buffer for system error message */
-   char *errstat;                /* Pointer to system error message */
-   int isdynamic;                /* Was memory allocated dynamically? */
-   void *result;                 /* Returned pointer */
-   Memory *mem;                  /* Pointer to memory header */
-
-/* Check the global error status. */
-   if ( !astOK ) return ptr;
-
-/* Initialise. */
-   result = ptr;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* If a NULL pointer was supplied, use astMalloc to allocate some new
-   memory. */
-   if ( !ptr ) {
-      result = astMalloc( size );
-
-/* Otherwise, check that the pointer supplied points at memory
-   allocated by a function in this module (IsDynamic sets the global
-   error status if it does not). */
-   } else {
-      IS_DYNAMIC( ptr, isdynamic );
-      if ( isdynamic ) {
-
-/* Check that a negative size has not been given and report an error
-   if necessary. */
-         if ( size < (size_t) 0 ) {
-            astError( AST__MEMIN,
-               "Invalid attempt to reallocate a block of memory to %ld bytes.", status,
-                      (long) size );
-
-/* If OK, obtain a pointer to the memory header. */
-         } else {
-            mem = (Memory *) ( (char *) ptr - SIZEOF_MEMORY );
-
-/* If the new size is zero, free the old memory and set a NULL return
-   pointer value. */
-            if ( size == (size_t) 0 ) {
-               astFree( ptr );
-               result = NULL;
-
-/* Otherwise, reallocate the memory. */
-            } else {
-
-/* If the cache is being used, for small memory blocks, do the equivalent of 
-               mem = REALLOC( mem, SIZEOF_MEMORY + size );
-
-   using astMalloc, astFree and memcpy explicitly in order to ensure
-   that the memory blocks are cached. */
-               if( use_cache && mem->size <= MXCSIZE && size <= MXCSIZE ) {
-                  result = astMalloc( size );
-                  if( result ) { 
-                     if( mem->size < size ) {
-                        memcpy( result, ptr, mem->size );
-                     } else {
-                        memcpy( result, ptr, size );
-                     }
-                     astFree( ptr );
-
-                  } else {
-                     result = ptr;
-                  }
-
-/* For other memory blocks simply use realloc. */
-               } else {
-
-#ifdef MEM_DEBUG
-                  DeIssue( mem, status );
-#endif
-
-                  mem = REALLOC( mem, SIZEOF_MEMORY + size );
-
-/* If this failed, report an error and return the original pointer
-   value. */
-                  if ( !mem ) {
-#if HAVE_STRERROR_R
-                     strerror_r( errno, errbuf, ERRBUF_LEN );
-                     errstat = errbuf;
-#else
-                     errstat = strerror( errno );
-#endif
-                     astError( AST__NOMEM, "realloc: %s", status, errstat );
-                     astError( AST__NOMEM, "Failed to reallocate a block of "
-                               "memory to %ld bytes.", status, (long) size );
-   
-/* If successful, set the new "magic" value and size in the memory
-   header and obtain a pointer to the start of the region of memory to
-   be used by the caller. */
-                  } else {
-                     mem->magic = MAGIC( mem, size );
-                     mem->size = size;
-                     mem->next = NULL;
-#ifdef MEM_DEBUG
-                     mem->id = -1;
-                     Issue( mem, status );
-#endif
-                     result = mem;
-                     result = (char *) result + SIZEOF_MEMORY;
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;   
-}
-#undef ERRBUF_LEN
-
-void astRemoveLeadingBlanks_( char *string, int *status ) {
-/*
-*+
-*  Name:
-*     astRemoveLeadingBlanks
-
-*  Purpose:
-*     Remove any leading white space from a string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void astRemoveLeadingBlanks( char *string )
-
-*  Description:
-*     This function moves characters in the supplied string to the left
-*     in order to remove any leading white space. 
-
-*  Parameters:
-*     string
-*        Pointer to the string.
-
-*-
-*/
-
-/* Local Variables: */
-   char *c, *d;              
-
-/* Check a string has been supplied. */
-   if( string ){
-
-/* Get a pointer to the first non-white character in the string. */
-      c = string;
-      while( *c && isspace( *c ) ) c++;
-
-/* Do nothing more if there are no leading spaces. */
-      if( c > string ) {
-
-/* Copy all characters (excluding the trailing null) to the left to
-   over-write the leading spaces. */
-         d = string;
-         while( *c ) *(d++) = *(c++);
-
-/* Terminate the returned string. */
-         *d = 0;
-      }
-   }
-}
-
-size_t astSizeOf_( const void *ptr, int *status ) {
-/*
-*+
-*  Name:
-*     astSizeOf
-
-*  Purpose:
-*     Determine the size of a dynamically allocated region of memory.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     size_t astSizeOf( const void *ptr )
-
-*  Description:
-*     This function returns the size of a region of dynamically
-*     allocated memory.
-
-*  Parameters:
-*     ptr
-*        Pointer to dynamically allocated memory (or NULL if the size
-*        of the allocated memory was zero).
-
-*  Returned Value:
-*     The allocated size. This will be zero if a NULL pointer was
-*     supplied (no error will result).
-
-*  Notes:
-*     - A value of zero is returned if this function is invoked with
-*     the global error status set, or if it fails for any reason.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   int isdynamic;                /* Was the memory allocated dynamically? */
-   size_t size;                  /* Memory size */
-
-/* Check the global error status. */
-   if ( !astOK ) return (size_t) 0;
-
-/* Initialise. */
-   size = (size_t) 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check if a non-NULL valid pointer has been given. If so, extract
-   the memory size from the header which precedes it. */
-   if ( ptr ){
-      IS_DYNAMIC( ptr, isdynamic );
-      if( isdynamic ) size = ( (Memory *) ( (char *) ptr - SIZEOF_MEMORY ) )->size;
-   }
-
-/* Return the result. */
-   return size;
-}
-
-static size_t SizeOfMemory( int *status ){
-/*
-*  Name:
-*     SizeOfMemory
-
-*  Purpose:
-*     Returns the size of a Memory structure, padded to an 8 byte
-*     boundary.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     size_t SizeOfMemory( int *status )
-
-*  Description:
-*     This function returns the size of a Memory structure used to
-*     store header information about any block of memory allocated by this
-*     module. The returned value may be larger than the actual size of
-*     the Memory structure in order to ensure that the pointer returned by
-*     astMalloc etc points to an 8 byte boundary. Failure to do this can
-*     result in some operating systems having problems. E.g Solaris
-*     requires this alignment if the returned pointer is going to be used to
-*     store doubles.
-
-*  Parameters:
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The size to use for a Memory structure.
-
-*  Notes:
-*     - The returned value is also stored in the module variable
-*     sizeof_memory. 
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get the basic size of a Memory structure. */
-   sizeof_memory = sizeof( Memory );
-
-/* Now increase the returned value to ensure it is a multiple of 8. Mask 
-   off all but the last 3 bits, xor with 0x7 to get the remainder, add 1 
-   to make it a multiple of 8 bytes. */
-   sizeof_memory += ((sizeof_memory & 0x7) ? ((sizeof_memory & 0x7) ^ 0x7) + 1 : 0);
-
-/* Return the value */
-   return sizeof_memory;
-
-}
-
-size_t astTSizeOf_( const void *ptr, int *status ) {
-/*
-*+
-*  Name:
-*     astTSizeOf
-
-*  Purpose:
-*     Determine the total size of a dynamically allocated region of memory.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     size_t astTSizeOf( const void *ptr )
-
-*  Description:
-*     This function returns the size of a region of dynamically
-*     allocated memory, including the extra memory used to store 
-*     the header information for the memory block (size and magic number).
-
-*  Parameters:
-*     ptr
-*        Pointer to dynamically allocated memory (or NULL if the size
-*        of the allocated memory was zero).
-
-*  Returned Value:
-*     The allocated size. This will be zero if a NULL pointer was
-*     supplied (no error will result).
-
-*  Notes:
-*     - A value of zero is returned if this function is invoked with
-*     the global error status set, or if it fails for any reason.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   int isdynamic;                /* Was the memory allocated dynamically? */
-   size_t size;                  /* Memory size */
-
-/* Check the global error status. */
-   if ( !astOK ) return (size_t) 0;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   size = (size_t) 0;
-
-/* Check if a non-NULL valid pointer has been given. If so, extract
-   the memory size from the header which precedes it. */
-   if ( ptr ){
-      IS_DYNAMIC( ptr, isdynamic );
-      if( isdynamic ) size = SIZEOF_MEMORY + 
-                             ( (Memory *) ( (char *) ptr - SIZEOF_MEMORY ) )->size;
-   }
-
-/* Return the result. */
-   return size;
-}
-
-void *astStore_( void *ptr, const void *data, size_t size, int *status ) {
-/*
-*+
-*  Name:
-*     astStore
-
-*  Purpose:
-*     Store data in dynamically allocated memory.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void *astStore( void *ptr, const void *data, size_t size )
-
-*  Description:
-*     This function stores data in dynamically allocated memory,
-*     allocating the memory (or adjusting the size of previously
-*     allocated memory) to match the amount of data to be stored.
-
-*  Parameters:
-*     ptr
-*        Pointer to previously allocated memory (or NULL if none has
-*        yet been allocated).
-*     data
-*        Pointer to the start of the data to be stored. This may be
-*        given as NULL if there are no data, in which case it will be
-*        ignored and this function behaves like astRealloc, preserving
-*        the existing memory contents.
-*     size
-*        The total size of the data to be stored and/or the size of
-*        memory to be allocated. This may be zero, in which case the
-*        data parameter is ignored, any previously-allocated memory is
-*        freed and a NULL pointer is returned.
-
-*  Returned Value:
-*     If the data were stored successfully, a pointer to the start of
-*     the possibly new memory region is returned (this may be the same
-*     as the original pointer). If size was given as zero, a NULL
-*     pointer is returned.
-
-*  Notes:
-*     - This is a convenience function for use when storing data of
-*     arbitrary size in memory which is to be allocated
-*     dynamically. It is appropriate when the size of the data will
-*     not change frequently because the size of the memory region will
-*     be adjusted to fit the data on every invocation.
-*     - If this function is invoked with the error status set, or if
-*     it fails for any reason, the original pointer value is returned
-*     and the memory contents are unchanged.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   int valid;                    /* Is the memory pointer usable? */
-   void *new;                    /* Pointer to returned memory */
-
-/* Check the global error status. */
-   if ( !astOK ) return ptr;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = ptr;
-
-/* If the new size is zero, use astRealloc to free any previously
-   allocated memory. Also re-allocate the memory if the data pointer
-   is NULL (in which case we want to preserve its contents). */
-   if ( ( size == (size_t) 0 ) || !data ) {
-      new = astRealloc( ptr, size );
-
-/* In other cases, we do not want to preserve any memory
-   contents. Check if the incoming memory pointer is valid (IsDynamic
-   sets the global error status if it is not). */
-   } else {
-      if ( !ptr ){
-         valid = 1;
-      } else {
-         IS_DYNAMIC( ptr, valid );
-      }
-      if( valid ) {
-
-/* Allocate the new memory. If successful, free the old memory (if
-   necessary) and copy the data into it. */
-         new = astMalloc( size );
-         if ( astOK ) {
-            if ( ptr ) ptr = astFree( ptr );
-            (void) memcpy( new, data, size );
-
-/* If memory allocation failed, do not free the old memory but return
-   a pointer to it. */
-         } else {
-            new = ptr;
-         }
-      }
-   }
-
-/* Return the result. */
-   return new;
-}
-
-char *astString_( const char *chars, int nchars, int *status ) {
-/*
-*+
-*  Name:
-*     astString
-
-*  Purpose:
-*     Create a C string from an array of characters.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char *astString( const char *chars, int nchars )
-
-*  Description:
-*     This function allocates memory to hold a C string and fills the
-*     string with the sequence of characters supplied. It then
-*     terminates the string with a null character and returns a
-*     pointer to its start. The memory used for the string may later
-*     be de-allocated using astFree.
-*
-*     This function is intended for constructing null terminated C
-*     strings from arrays of characters which are not null terminated,
-*     such as when importing a character argument from a Fortran 77
-*     program.
-
-*  Parameters:
-*     chars
-*        Pointer to the array of characters to be used to fill the string.
-*     nchars
-*        The number of characters in the array (zero or more).
-
-*  Returned Value:
-*     If successful, the function returns a pointer to the start of
-*     the allocated string. If the number of characters is zero, a
-*     zero-length string is still allocated and a pointer to it is
-*     returned.
-
-*  Notes:
-*     - A pointer value of NULL is returned if this function is
-*     invoked with the global error status set or if it fails for any
-*     reason.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the number of characters in the string is valid and
-   report an error if it is not. */
-   if ( nchars < 0 ) {
-      astError( AST__NCHIN, "astString: Invalid attempt to allocate a string "
-                "with %d characters.", status, nchars);
-
-/* Allocate memory to hold the string. */
-   } else {
-      result = (char *) astMalloc( (size_t) ( nchars + 1 ) );
-
-/* If successful, copy the characters into the string. */
-      if ( astOK && result ) {
-         (void) memcpy( result, chars, (size_t) nchars );
-
-/* Terminate the string. */
-         result[ nchars ] = '\0';
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-char **astStringArray_( const char *chars, int nel, int len, int *status ) {
-/*
-*+
-*  Name:
-*     astStringArray
-
-*  Purpose:
-*     Create an array of C strings from an array of characters.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     char **astStringArray( const char *chars, int nel, int len ) 
-
-*  Description:
-*     This function turns an array of fixed-length character data into
-*     a dynamicllay allocated array of null-terminated C strings with
-*     an index array that may be used to access them.
-*
-*     The array of character data supplied is assumed to hold "nel"
-*     adjacent fixed-length strings (without terminating nulls), each
-*     of length "len" characters. This function allocates memory and
-*     creates a null-terminated copy of each of these strings. It also
-*     creates an array of "nel" pointers which point at the start of
-*     each of these new strings. A pointer to this index array is
-*     returned.
-*
-*     The memory used is allocated in a single block and should later
-*     be de-allocated using astFree.
-s
-*  Parameters:
-*     chars
-*        Pointer to the array of input characters. The number of characters
-*        in this array should be at least equal to (nel * len).
-*     nel
-*        The number of fixed-length strings in the input character
-*        array. This may be zero but should not be negative.
-*     len
-*        The number of characters in each fixed-length input
-*        string. This may be zero but should not be negative.
-
-*  Returned Value:
-*     A pointer to the start of the index array, which contains "nel"
-*     pointers pointing at the start of each null-terminated output
-*     string.
-*
-*     The returned pointer should be passed to astFree to de-allocate
-*     the memory used when it is no longer required. This will free
-*     both the index array and the memory used by the strings it
-*     points at.
-
-*  Notes:
-*     - A NULL pointer will also be returned if the value of "nel" is
-*     zero, in which case no memory is allocated.
-*     - A pointer value of NULL will also be returned if this function
-*     is invoked with the global error status set or if it fails for
-*     any reason.
-*     - This function is documented as protected because it should not
-*     be invoked by external code. However, it is available via the
-*     external C interface so that it may be used when writing (e.g.)
-*     foreign language or graphics interfaces.
-*-
-*/
-
-/* Local Variables: */
-   char **result;                 /* Result pointer to return */
-   char *out_str;                 /* Pointer to start of next output string */
-   const char *in_str;            /* Pointer to start of next input string */
-   int i;                         /* Loop counter for array elements */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the array size is valid and report an error if it is
-   not. */
-   if ( nel < 0 ) {
-      astError( AST__NELIN,
-                "astStringArray: Invalid attempt to allocate an array of "
-                "%d strings.", status, nel );
-
-/* If the string length will be used, check that it is valid and
-   report an error if it is not. */
-   } else if ( ( nel > 0 ) && ( len < 0 ) ) {
-      astError( AST__NCHIN,
-                "astStringArray: Invalid attempt to allocate an "
-                "array of strings with %d characters in each.", status, len );
-
-/* Allocate memory to hold the array of string pointers plus the
-   string data (with terminating nulls). */
-   } else {
-      result = astMalloc( sizeof( char * ) * (size_t) nel +
-                          (size_t) ( nel * ( len + 1 ) ) );
-
-/* If successful, initialise pointers to the start of the current
-   input and output strings. */
-      if( astOK ){
-         in_str = chars;
-         out_str = (char *) ( result + nel );
- 
-/* Loop to copy each string. */
-         for ( i = 0; i < nel; i++ ) {
-            (void) memcpy( out_str, in_str, (size_t) len );
-
-/* Terminate the output string. */
-            out_str[ len ] = '\0';
-
-/* Store a pointer to the start of the output string in the array of
-   character pointers. */
-            result[ i ] = out_str;
-
-/* Increment the pointers to the start of the next string. */
-            out_str += len + 1;
-            in_str += len;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-size_t astChrLen_( const char *string, int *status ) {
-/*
-*+
-*  Name:
-*     astChrLen
-
-*  Purpose:
-*     Determine the used length of a string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     size_t astChrLen( const char *string )
-
-*  Description:
-*     This function returns the used length of a string. This excludes any
-*     trailing white space or non-printable characters (such as the
-*     trailing null character).
-
-*  Parameters:
-*     string
-*        Pointer to the string.
-
-*  Returned Value:
-*     The number of characters in the supplied string, not including the 
-*     trailing newline, and any trailing white-spaces or non-printable 
-*     characters.
-
-*-
-*/
-
-/* Local Variables: */
-   const char *c;           /* Pointer to the next character to check */
-   size_t ret;              /* The returned string length */
-
-/* Initialise the returned string length. */
-   ret = 0;
-
-/* Check a string has been supplied. */
-   if( string ){
-
-/* Check each character in turn, starting with the last one. */
-      ret = strlen( string );
-      c = string + ret - 1;
-      while( ret ){
-         if( isprint( (int) *c ) && !isspace( (int) *c ) ) break;
-         c--;
-         ret--;
-      }
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-int astSscanf_( const char *str, const char *fmt, ...) {
-/*
-*+
-*  Name:
-*     astSscanf
-
-*  Purpose:
-*     A wrapper for the ANSI sscanf function.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astSscanf( const char *str, const char *fmt, ...)
-
-*  Description:
-*     This function is a direct plug-in replacement for sscanf. It ensures ANSI
-*     behaviour is available on all platforms, including those (such as
-*     MacOS) on which have the native sscanf function exhibits non-ANSI
-*     behaviour.
-
-*  Parameters:
-*     str
-*        Pointer to the string to be scanned.
-*     fmt
-*        Pointer to the format string which defines the fields to be
-*        looked for within "str".
-*     ...
-*        Pointers to locations at which to return the value of each
-*        succesfuly converted field, in the order specified in "fmt".
-
-*  Returned Value:
-*     The number of fields which were succesfully read from "str".
-*-
-*/
-
-/* Local Variables: */
-   char *c;                 /* Pointer to the next character to check */
-   char *newfor;            /* Pointer to modified format string */
-   const char *d;           /* Pointer to the next character to check */
-   int *status;             /* Pointer to inherited status value */
-   int iptr;                /* Index into ptr array */
-   int lfor;                /* No. of characters in format string */
-   int lstr;                /* No. of characters in scanned string */
-   int nc;                  /* No. of characters read from str */
-   int nfld;                /* No. of counted field specifiers found so far */
-   int nptr;                /* Np. of pointers stored */
-   int ret;                 /* The returned number of conversions */
-   va_list args;            /* Variable argument list pointer */
-   void *fptr;              /* The next supplied pointer */ 
-   void *ptr[ VMAXFLD ];    /* Array of supplied pointers */ 
-
-/* Initialise the variable argument list pointer. */
-   va_start( args, fmt );
-
-/* Get a pointer to the integer holding the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Initialise the returned string length. */
-   ret = 0;
-
-/* Check a string and format have been supplied. */
-   if( str && fmt ){
-
-/* Go through the format string, counting the number of field specifiers which
-   will return a value, and storing the corresponding points in the ptr
-   array. */
-      nptr = 0;
-      c = (char *) fmt;
-      while( *c ) {
-
-/* Field specifiers are marked by a % sign. */
-         if( *c == '%' ) {
-
-/* Look at the character following the % sign. Quit if the end of the string 
-   has been reached. */
-            c++;
-            if( *c ) {
-
-/* If the % sign is followed by a "*" or another "%", then there will be no
-   corresponding pointer in the variable argument list "args". Ignore such
-   field specifiers. */ 
-               if( *c != '*' && *c != '%' ) {
-
-/* If possible store the corresponding pointer from the variable argument
-   list supplied to this function. Report an error if there are too many. */
-                  if ( nptr < VMAXFLD ) {
-                     ptr[ nptr++ ] = va_arg( args, void *);
-
-/* If the current field specifier is "%n" the corresponding pointer
-   should be a pointer to an integer. We initialise the integer to zero.
-   We need to do this because sscanf does not include "%n" values in the
-   returned count of succesful conversions, and so there is no sure way
-   of knowing whether a value has been stored for a "%n" field, and so
-   whether it is safe to use it as an index into the supplied. */
-                     if( *c == 'n' ) *( (int *) ptr[ nptr - 1 ] ) = 0;
-
-	          } else {
-                     astError( AST__INTER, "astSscanf: Format string " 
-                               "'%s' contains more than %d fields "
-                               "(AST internal programming error).", status, 
-                               fmt, VMAXFLD );
-                     break;
-                  }
-               }
-
-/* Move on the first character following the field specifier. */
-               c++;
-            }
-
-/* If this is not the start of a field specifier, pass on. */
-         } else {
-            c++;
-         }
-      }
-
-/* Fill any unused pointers with NULL. */
-      for( iptr = nptr; iptr < VMAXFLD; iptr++ ) ptr[iptr] = NULL;
-
-/* Get the length of the string to be scanned. */
-      lstr = strlen( str );
-
-/* Get the length of the format string excluding any trailing white space. */
-      lfor = astChrLen( fmt );
-
-/* Bill Joye reports that MacOS sscanf fails to return the correct number of
-   characters read (using a %n conversion) if there is a space before the
-   %n. So check for this. Does the format string contain " %n"? */
-      c = strstr( fmt, " %n" );
-      if( c && astOK ) {
-
-/* Take a copy of the supplied format string (excluding any trailing spaces). */
-         newfor = (char *) astStore( NULL, (void *) fmt, (size_t) lfor + 1 ); 
-         if( newfor ) {
-
-/* Ensure the string is terminated (in case the supplied format string
-   has any trailing spaces). */
-            newfor[ lfor ] = 0;
-
-/* Remove all spaces from before any %n. */
-            c = strstr( (const char *) newfor, " %n" );
-            while( c ) {
-               while( *(c++) ) *( c - 1 ) = *c;
-               c = strstr( newfor, " %n" );
-            }
-
-/* Use the native sscanf with the modified format string. Note, we cannot
-   use vsscanf because it is not ANSI C. Instead, we list the pointers
-   explicitly. */
-            ret = sscanf( str, newfor, ptr[0], ptr[1], ptr[2], ptr[3],
-                          ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9], 
-                          ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], 
-                          ptr[15], ptr[16], ptr[17], ptr[18], ptr[19] );
-
-/* Now look through the original format string for conversions specifiers.
-   If any %n conversions are found which are preceeded by a space, then
-   correct the returned character counts to include any spaces following the
-   corresponding point in the scanned string. */
-            nfld = 0;
-            iptr = 0;
-            c = (char *) fmt;
-	    while( *c ) {
-
-/* Field specifiers are marked by a % sign. */
-               if( *c == '%' ) {
-
-/* Look at the character following the % sign. Quit if the end of the string 
-   has been reached. */
-                  c++;
-                  if( *c ) {
-
-/* If the % sign is followed by a "*" or another "%", then there will be no
-   corresponding pointer in the variable argument list "args". Ignore such
-   field specifiers. */ 
-                     if( *c != '*' && *c != '%' ) {
-
-/* Get the supplied pointer corresponding to this field specifier. */
-                        fptr = ptr[ iptr++ ];
-
-/* Increment the number of matched fields required. "%n" specifiers are not 
-   included in the value returned by sscanf so skip over them. */
-                        if( *c != 'n' ) {
-			   nfld++; 
-
-/* If the % sign is followed by a "n", and was preceeded by a space, we
-   may need to correct the returned character count. */
-                        } else if( c > fmt + 1 && *(c-2) == ' ' ) {
-
-/* Do not correct the returned value if sscanf did not get as far as this
-   field specifier before an error occurred. */
-                           if( ret >= nfld ) {
-
-/* Get the original character count produced by sscanf. */
-                              nc = *( (int *) fptr );
-
-/* For each space in "str" which follows, increment the returned count by
-   one (so long as the original count is not zero or more than the length
-   of the string - this is not foolproof, but I can't think of a better
-   check - all uses of %n in AST initialize the supplied count to zero 
-   before calling sscanf so a value fo zero is a safe (ish) bet that the
-   supplied string doesn't match the supplied format). */
-                              if( nc > 0 && nc < lstr ) {
-                                 d = str + nc;
-                                 while( *(d++) == ' ' ) nc++;
-                                 *( (int *) fptr ) = nc;
-                              }
-                           }
-                        }
-                     }
-
-/* Move on the first character following the field specifier. */
-                     c++;
-                  }
-
-/* If this is not the start of a field specifier, pass on. */
-               } else {
-                  c++;
-               }
-            }
-
-/* Release the temporary copy of the format string. */
-            newfor = (char *) astFree( (void *) newfor );
-         }
-
-/* If the format string should not trigger any known problems, use sscanf
-   directly. */
-      } else if( astOK ) {
-         ret = sscanf( str, fmt, ptr[0], ptr[1], ptr[2], ptr[3],
-                       ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9], 
-                       ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], 
-                       ptr[15], ptr[16], ptr[17], ptr[18], ptr[19] );
-      }      
-   }
-
-/* Tidy up the argument pointer. */
-   va_end( args );
-
-/* Return the answer. */
-   return ret;
-
-}
-
-
-/* The next functions are used only when memory debugging is
-   switched on via the MEM_DEBUG macro. They can be used for locating
-   memory leaks, etc. */
-#ifdef MEM_DEBUG
-
-void astActiveMemory_( const char *label ) {
-/*
-*+
-*  Name:
-*     astActiveMemory
-
-*  Purpose:
-*     Display a list of any currently active AST memory pointers.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     astActiveMemory( const char *label )
-
-*  Description:
-*     This function displays a list of the identifiers for all currently
-*     active AST memory chunks. The list is written to standard output
-*     using "printf", preceeded by the supplied text.
-
-*  Parameters:
-*     label
-*        A textual label to display before the memody id values (may be
-*        NULL).
-
-*  Notes:
-*     - This function attempts to execute even if an error has occurred.
-*     - Memory blocks which are not usually freed are not reported. Such
-*     blocks are typically used by AST to hold internal state information.
-*     They can be freed explicitly by calling astFlushMemory.
-*-
-*/
-
-   Memory *next;
-
-   if( label ) printf("%s: ", label );
-   next = Active_List;
-   if( next ) {
-      while( next ) {
-         if( !next->perm ) printf( "%d ", next->id );
-         next = next->next;
-      } 
-   } else {
-      printf("There are currently no active AST memory blocks.");
-   }
-   printf("\n");
-
-}
-
-void astWatchMemory_( int id ) {
-/*
-*+
-*  Name:
-*     astWatchMemory
-
-*  Purpose:
-*     Indicate uses of the memory block with the specified identifier
-*     should be reported.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     astWatchMemory( int id )
-
-*  Description:
-*     This function forces astMemoryAlarm to be invoked when key
-*     operations are performed on a specified memory block. These key
-*     operations include; allocation, freeing, copying and cloning of 
-*     Objects, etc. 
-*  
-*     astMemoryAlarm reports a message when called identifying the memory
-*     block and the action performed on it. When using a debugger, these
-*     events can be trapped and investigated by setting a debugger 
-*     breakpoint in astMemoryAlarm_.
-
-*  Parameters:
-*     id
-*        The identifier of the memory block which is to be watched.
-
-*  Notes:
-*     - This function attempts to execute even if an error has occurred.
-*-
-*/
-   Watched_ID = id;
-}
-
-int astMemoryId_( const void *ptr, int *status ){
-/*
-*+
-*  Name:
-*     astMemoryId
-
-*  Purpose:
-*     Return the integer identifier for a memory block.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astMemoryId( const void *ptr )
-
-*  Description:
-*     This function returns the integer identifier associated with a
-*     memory block allocated by function sin this module.
-
-*  Parameters:
-*     ptr
-*        The pointer (a genuine C pointer, not an encoded object
-*        identifier).
-
-*  Returned Value:
-*     The integer identifier. A value of -1 is returned if "ptr" is NULL.
-
-*-
-*/
-   astDECLARE_GLOBALS;
-   astGET_GLOBALS(NULL);
-   return ptr ? ((Memory *)(ptr-SIZEOF_MEMORY))->id : -1;
-}
-
-void *astMemoryPtr_( int id ){
-/*
-*+
-*  Name:
-*     astMemoryPtr
-
-*  Purpose:
-*     Return a pointer to the memory block with a given identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void *astMemoryPtr( int id )
-
-*  Description:
-*     This function returns a pointer to the memory block with a given
-*     identifier. NULL is returned if the given identifier is not active.
-
-*  Parameters:
-*     id
-*        The identifier for an active memory block.
-
-*  Returned Value:
-*     The pointer to the memory block. NULL is returned if no active memory 
-*     with the given ID can be found. Note, this is always a genuine C
-*     pointer (even for public Object pointers).
-
-*-
-*/
-   Memory *next;
-   void *ret;
-
-   ret = NULL;
-   next = Active_List;
-   while( next ) {
-      if( next->id == id ) {
-         ret = next + 1;
-         break;
-      }
-   }
-
-   return ret;
-}
-
-void astMemoryAlarm_( const char *verb ){
-/*
-*+
-*  Name:
-*     astMemoryAlarm
-
-*  Purpose:
-*     Called when a watched memory ID is used.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void astMemoryAlarm( const char *verb )
-
-*  Description:
-*     This function is called when a watched memory ID is used. See
-*     astWatchMemory.
-
-*  Parameters:
-*     verb
-*        Text to include in message.
-*-
-*/
-
-   printf( "astMemoryAlarm: Memory id %d has been %s.\n", Watched_ID, verb );
-}
-
-void astMemoryUse_( const void *ptr, const char *verb, int *status ){
-/*
-*+
-*  Name:
-*     astMemoryUse
-
-*  Purpose:
-*     Called to report the use of a memory block pointer.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void astMemoryUse( void *ptr, const char *verb )
-
-*  Description:
-*     If the supplied memory block is being watched, astMemoryAlarm is
-*     called to report the use of the pointer. The reported text includes
-*     the supplied "verb". A memory block can be watched by calling 
-*     astWatchMemory.
-
-*  Parameters:
-*     ptr
-*        A pointer to the memory block being used. The pointer must have
-*        been returned by one of the AST memory management functions (e.g. 
-*        astMalloc, astRealloc, etc).
-*     verb
-*        A verb indicating what is being done to the pointer.
-*-
-*/
-
-   astDECLARE_GLOBALS;
-   astGET_GLOBALS(NULL);
-
-   if( ptr && astMemoryId( ptr ) == Watched_ID ) {
-      if( !Quiet_Use || !strcmp( verb, ISSUED ) || 
-                        !strcmp( verb, FREED ) ) {
-         astMemoryAlarm( verb );
-      }
-   }
-}
-
-int astMemoryTune_( const char *name, int value, int *status ){
-/*
-*+
-*  Name:
-*     astMemoryTune
-
-*  Purpose:
-*     Set a tuning parameter for the memory debugging functions.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     int astMemoryTune( const char *name, int value )
-
-*  Description:
-*     There are a few tuning parameters which control the behaviour of
-*     the memory debugging functions. This function allows these tuning
-*     parameters to be queried or set.
-
-*  Parameters:
-*     name
-*        The name of the tuning parameter to query or set. Valid names are:
-*
-*        "Keep_ID": A boolean flag indicating if a new ID should be issued 
-*        for a cached memory block each time it is returned by astMalloc? 
-*        Otherwise, the same ID value is used throughtout the life of a 
-*        memory block. Default is zero (false).
-*
-*        "List_Cache": A boolean flag which if non-zero (true) causes the
-*        ID of every memory block in the cache to be reported when the
-*        cache is emptied by astFlushMemory.
-*
-*        "Quiet_Use": A boolean flag controlling the number of reports issued 
-*        when a memory block is being watched (see astWatchMemory). If
-*        non-zero (true), then the only events which are reported are the
-*        issuing of a memory block pointer by astMalloc or astRealloc,and
-*        the freeing (or caching) of a memory block by astFree. If Quiet_Use
-*        is zero (the default), then additional reports are made for
-*        memory blocks used to hold AST Objects whenever the Object is
-*        copied, cloned, or checked.
-*     value
-*        The new value for the tuning parameter. If AST__TUNULL is
-*        supplied, the original value is left unchanged.
-
-*  Returned Value:
-*     The original value of the tuning parameter.
-
-*-
-*/
-
-   int result = AST__TUNULL;
-
-   if( name ) {
-
-      if( astChrMatch( name, "Keep_ID" ) ) {
-         result = Keep_ID;
-         if( value != AST__TUNULL ) Keep_ID = value;
-         
-      } else if( astChrMatch( name, "Quiet_Use" ) ) {
-         result = Quiet_Use;
-         if( value != AST__TUNULL ) Quiet_Use = value;
-         
-      } else if( astChrMatch( name, "List_Cache" ) ) {
-         result = List_Cache;
-         if( value != AST__TUNULL ) List_Cache = value;
-         
-      } else if( astOK ) {
-         astError( AST__TUNAM, "astMemoryTune: Unknown AST memory tuning " 
-                   "parameter specified \"%s\".", status, name );
-      }
-   }
-
-   return result;
-}
-
-void astBeginPM_( int *status ) {
-/*
-*+
-*  Name:
-*     astBeginPM
-
-*  Purpose:
-*     Start a block of permanent memory allocations.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     astBeginPM
-
-*  Description:
-*     This function indicates that all memory allocations made by calls 
-*     to other functions in this module (e.g. astMalloc), up to the
-*     astEndPM call which matches the astBeginPM call,  will not usually 
-*     be freed explicitly. Matching astBeginPM/astEndPM calls should be
-*     used to enclose all code which allocates memory which is never
-*     freed explitly by AST. Such memory allocations may be freed if
-*     required, using the astFlushMemory function (but note this should 
-*     only be done once all use of AST by an application has finished).
-*
-*     Matching pairs of astBeginPM/astEndPM calls can be nested up to a
-*     maximum depth of 20.
-
-*-
-*/
-
-   LOCK_DEBUG_MUTEX;
-
-/* The global Perm_Mem flag indicates whether or not subsequent memory 
-   management functions in this module should store pointers to allocated 
-   blocks in the PM_List array. Push the current value of this flag
-   onto a stack, and set the value to 1. */
-   if( PM_Stack_Size >= PM_STACK_MAXSIZE ){
-      if( astOK ) {
-         astError( AST__INTER, "astBeginPM: Maximum stack size has been "
-                   "exceeded (internal AST programming error)." , status);
-      } 
-
-   } else {
-      PM_Stack[ PM_Stack_Size++ ] = Perm_Mem;
-      Perm_Mem = 1;
-   }
-   UNLOCK_DEBUG_MUTEX;
-}
-
-void astEndPM_( int *status ) {
-/*
-*+
-*  Name:
-*     astEndPM
-
-*  Purpose:
-*     End a block of permanent memory allocations.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     astEndPM
-
-*  Description:
-*     This function indicates the end of the block of permanent memory 
-*     allocations started by the matching call to astBeginPM. See
-*     astBeginPM for further details.
-
-*-
-*/
-
-   LOCK_DEBUG_MUTEX;
-
-/* The global Perm_Mem flag indicates whether or not subsequent memory 
-   management functions in this module should store pointers to allocated 
-   blocks in the PM_List array. Pop the value from the top of this stack. */
-   if( PM_Stack_Size == 0 ){
-      if( astOK ) {
-         astError( AST__INTER, "astEndPM: astEndPM called without "
-                   "matching astBeginPM (internal AST programming error)." , status);
-      } 
-
-   } else {
-      Perm_Mem = PM_Stack[ --PM_Stack_Size ];
-   }
-
-   UNLOCK_DEBUG_MUTEX;
-}
-
-void astFlushMemory_( int leak, int *status ) {
-/*
-*+
-*  Name:
-*     astFlushMemory
-
-*  Purpose:
-*     Free all permanent and cached memory blocks.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     astFlushMemory( int leak );
-
-*  Description:
-*     This function should only be called once all use of AST by an 
-*     application has finished. It frees any allocated but currently 
-*     unused memory (stored in an internal cache of unused memory 
-*     pointers), together with any memory used permanently to store 
-*     internal AST state information.
-*
-*     It is not normally necessary to call this function since the memory
-*     will be freed anyway by the operating system when the application 
-*     terminates. However, it can be called if required in order to 
-*     stop memory management tools such as valgrind from reporting that
-*     the memory has not been freed at the end of an application.
-*
-*     In addition, if "leak" is non-zero this function will also report
-*     an error if any active AST memory pointers remain which have not 
-*     been freed (other than pointers for the cached and permanent 
-*     memory described above). Leakage of active memory blocks can be
-*     investigated using astActiveMemory and astWatchMemory.
-
-*  Parameters:
-*     leak
-*        Should an error be reported if any non-permanent memory blocks
-*        are found to be active?
-
-*-
-*/
-
-/* Local Variables: */
-   Memory *next;
-   int nact;
-   int istat;
-
-/* Empty the cache. */
-   astMemCaching( astMemCaching( AST__TUNULL ) );
-
-/* Free and count all non-permanent memory blocks. */
-   nact = 0;
-   next = Active_List;
-   while( Active_List ) {
-      next = Active_List->next;
-      if( !Active_List->perm ) {
-         nact++;
-         FREE( Active_List );
-      }
-      Active_List = next;
-   } 
-
-/* Report an error if any active pointers remained. if an error has
-   already occurred, use the existing status value. */
-   if( nact && leak ){
-
-      if( astOK ) {
-         istat = AST__INTER;
-      } else {
-         istat = astStatus;
-      }
-      astError( istat, "astFlushMemory: %d AST memory blocks have not "
-                "been released (programming error).", status, nact );
-
-   } else {
-      printf("astFlushMemory: All AST memory blocks were released correctly.\n" );
-   }
-}
-
-static void Issue( Memory *mem, int *status ) {
-/*
-*  Name:
-*     Issue
-
-*  Purpose:
-*     Indicate that a pointer to a memory block has been issued.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void Issue( Memeory *mem, int *status );
-
-*  Description:
-*     Initialises the extra debug items in the Memory header, and adds the
-*     Memory structure to the list of active memory blocks.
-
-*  Parameters:
-*     mem
-*        Pointer to the Memory structure.
-*     status
-*        Pointer to the inherited status value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;
-
-/* Return if no pointer was supplied. */
-   if( !mem ) return;
-
-   LOCK_DEBUG_MUTEX;
-   astGET_GLOBALS(NULL);
-
-/* Store a unique identifier for this pointer. Unless global Keep_ID is
-   non-zero, a new identifier is used each time the pointer becomes active 
-   (i.e. each time it is remove from the cache or malloced). */
-   if( !Keep_ID || mem->id < 0 ) mem->id = ++Next_ID;
-
-/* Indicate if this is a permanent memory block (i.e. it will usually not
-   be freed by AST). */
-   mem->perm = Perm_Mem;
-
-/* Add it to the double linked list of active pointers. */
-   mem->next = Active_List;
-   mem->prev = NULL;
-   if( Active_List ) Active_List->prev = mem;
-   Active_List = mem;
-
-/* Report that the pointer is being issued. */
-   astMemoryUse( (void *) mem + SIZEOF_MEMORY, ISSUED );
-
-   UNLOCK_DEBUG_MUTEX;
-}
-
-static void DeIssue( Memory *mem, int *status ) {
-/*
-*  Name:
-*     DeIssue
-
-*  Purpose:
-*     Indicate that a pointer to a memory block has been freed.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void DeIssue( Memeory *mem, int *status );
-
-*  Description:
-*     Initialises the extra debug items in the Memory header, and adds the
-*     Memory structure to the list of active memory blocks.
-
-*  Parameters:
-*     mem
-*        Pointer to the Memory structure.
-*     status
-*        Pointer to the inherited status value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;
-   Memory *next;
-   Memory *prev;
-
-/* Return if no pointer was supplied. */
-   if( !mem ) return;
-
-   LOCK_DEBUG_MUTEX;
-   astGET_GLOBALS(NULL);
-
-/* Report that the pointer is being freed. */
-   astMemoryUse( (void *) mem + SIZEOF_MEMORY, FREED );
-
-/* Remove the block from the double linked list of active pointers. */
-   next = mem->next;
-   prev = mem->prev;
-   if( prev ) prev->next = next;
-   if( next ) next->prev = prev;
-   if( mem == Active_List ) Active_List = next;
-
-   UNLOCK_DEBUG_MUTEX;
-}
-
-
-#endif
-
-
-
-
-
-
-/* The next functions are used only when profiling AST application. */
-#ifdef MEM_PROFILE
-
-
-void astStartTimer_( const char *file, int line, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astStartTimer
-
-*  Purpose:
-*     Measure the time spent until the corresponding call to astStopTimer.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void astStartTimer( const char *name );
-
-*  Description:
-*     This function looks for a timer with the specified name within the
-*     current parent timer. If no timer with the given name is found, a
-*     new timer is created and initialised to zero. The current absolute 
-*     time (elapsed, user and system) is recorded in the timer. The new
-*     timer then becomes the current timer.
-
-*  Parameters:
-*     name
-*        A label for the timer. This should be unique within the
-*        enclosing parent timer.
-
-*  Notes:
-*     - This function should only be used in a single-threaded environment.
-*     - This function returns without action if timers are currently
-*     disabled (see astEnableTimers).
-
-*-
-*/
-
-/* Local Variables: */
-   int n, found, i;
-   AstTimer *t;
-   struct tms buf;
-
-/* Check inherited status. Also return if timers are currently disabled. */
-   if( !Enable_Timers || *status != 0 ) return;
-
-/* See if a timer with the given name exists in the list of child timers
-   within the current timer. */
-   found = 0;
-   if( Current_Timer ) {
-      for( i = 0; i < Current_Timer->nchild; i++ ) {
-         t = Current_Timer->children[ i ];
-         if( !strcmp( t->name, name ) ) {
-            found = 1;
-            break;
-         }
-      }
-   }
-
-/* If not, create and initialise one now, and add it into the list of
-   children within the current timer. */
-   if( !found ) {
-      t = astMalloc( sizeof( AstTimer ) );
-      t->id = Timer_Count++;
-      t->et = 0; 
-      t->ut = 0; 
-      t->st = 0; 
-      t->nentry = 0;
-      t->name = name;
-      t->file = file;
-      t->line = line;
-      t->parent = Current_Timer;
-      t->nchild = 0;
-      t->children = NULL;
-
-      if( Current_Timer ) {
-         n = (Current_Timer->nchild)++;
-         Current_Timer->children = astGrow( Current_Timer->children, 
-                                            sizeof( AstTimer *), 
-                                            Current_Timer->nchild );
-         Current_Timer->children[ n ] = t;
-      }
-   }
-
-/* Record the current absolute times (elapsed, user and system) within
-   the new timer. */
-   t->e0 = times(&buf);
-   t->u0 = buf.tms_utime;   
-   t->s0 = buf.tms_stime;   
-
-/* Increment the number of entries into the timer. */
-   (t->nentry)++;
-
-/* Use the new timer as the current timer until the corresponding call to
-   astStopTimer. */
-   Current_Timer = t;
-}
-
-void astEnableTimers_( int enable, int *status ) {
-/*
-*+
-*  Name:
-*     astEnableTimers
-
-*  Purpose:
-*     Set a global flag indicating if the use of AST timers is enabled.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void astStartTimer( int enable );
-
-*  Description:
-*     This function sets a global flag that enables otr disables the user
-*     of AST Timers. If timers are disabled, the astStartTimer and
-*     astStopTimer functions will return without action.
-
-*  Parameters:
-*     enable
-*        If non-zero, timers will be used.
-
-*  Notes:
-*     - This function should only be used in a single-threaded environment.
-
-*-
-*/
-   Enable_Timers = enable;
-}
-
-void astStopTimer_( int *status ) {
-/*
-*+
-*  Name:
-*     astStopTimer
-
-*  Purpose:
-*     Record the time spent since the corresponding call to astStartTimer.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     void astStopTimer;
-
-*  Description:
-*     This function obtains the time increments since the corresponding
-*     call to astStartTimer, and adds these increments onto the total
-*     times stored in the current timer. It then changes the current
-*     timer to be the parent timer associated the current timer on entry.
-*
-*     If the current timer on entry has no parent (i.e. is a top level
-*     timer), the times spent in the top-level timer, and all its
-*     descendent timers, are displayed.
-
-*  Notes:
-*     - This function should only be used in a single-threaded environment.
-*     - This function returns without action if timers are currently
-*     disabled (see astEnableTimers).
-
-*-
-*/
-
-/* Local Variables: */
-   AstTimer *flat;
-   AstTimer *t;
-   int i;
-   int nflat;     
-   struct tms buf;
-
-/* Check inherited status. Also return if timers are currently disabled. */
-   if( !Enable_Timers || !Current_Timer || *status != 0 ) return;
-
-/* Get the current absolute times, and thus find the elapsed times since the 
-   corresponding call to astStartTimer. Use these elapsed times to increment 
-   the total times spent in the timer. */
-   Current_Timer->et += ( times(&buf) - Current_Timer->e0 );
-   Current_Timer->st += ( buf.tms_stime - Current_Timer->s0 );
-   Current_Timer->ut += ( buf.tms_utime - Current_Timer->u0 );
-
-/* If this is a top level timer, display the times spent in the current
-   timer, and in all its descendent timers. This also frees the memory
-   used by the timers. */
-   if( !Current_Timer->parent ) {
-      flat = NULL;
-      nflat = 0;
-      Current_Timer = ReportTimer( Current_Timer, 0, &flat, &nflat, status );
-
-/* Sort and display the flat list of timers, then free the memory used by
-   the flat list. */
-      qsort( flat, nflat, sizeof( AstTimer), CompareTimers2 );
-      printf("\n\n");
-      t = flat;
-      for( i = 0; i < nflat; i++,t++ ) {
-         printf( "%s (%s:%d): ", t->name, t->file, t->line );
-         printf( "elapsed=%ld ", (long int) t->et );
-/* 
-         printf( "system=%ld ", (long int) t->st );
-         printf( "user=%ld ", (long int) t->ut );
-*/
-         printf( "calls=%d ", t->nentry );
-         printf("\n");
-      }
-      flat = astFree( flat );
-
-/* If this is not a top level timer, restore the parent timer as the
-   curent timer. */
-   } else {
-      Current_Timer = Current_Timer->parent;
-   }
-}
-
-static AstTimer *ReportTimer( AstTimer *t, int ind, AstTimer **flat, 
-                              int *nflat, int *status ) {
-/*
-*  Name:
-*     ReportTimer
-
-*  Purpose:
-*     Free and report the times spent in a given timer, and all descendents.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "memory.h"
-*     AstTimer *ReportTimer( AstTimer *t, int ind, AstTimer **flat,
-*                            int *nflat, int *status )
-
-*  Description:
-*     This routines reports to standard output the times spent in the 
-*     supplied timer. It then calls itself recursively to report the times 
-*     spent in each of the child timers of the supplied timer.
-*
-*     It also frees the memory used to hold the supplied timer.
-
-*  Parameters:
-*     t
-*        Pointer to the AstTimer structure.
-*     ind
-*        The number of spaces of indentation to display before the timer
-*        details.
-*     flat
-*        Address of a pointer to the start of an array of AstTimers. The
-*        number of elements in this array is given by "*nflat". Each
-*        Timer in this array holds the accumulated total for all entries
-*        into a given timer, from all parent contexts.
-*     nflat
-*        Address of an int holding the current length of the "*flat" array.
-*     status
-*        Pointer to the inherited status value.
-*/
-
-/* Local Variables: */
-   int found;
-   int i;
-   AstTimer *ft;
-   AstTimer *parent;
-
-/* Check inherited status */
-   if( *status != 0 ) return NULL;
-
-/* Display a single line of text containing the times stored in the supplied 
-   timer, preceeded by the requested number of spaces. */
-   for( i = 0; i < ind; i++ ) printf(" ");
-   printf( "%s (%s:%d): ", t->name, t->file, t->line );
-
-   printf( "id=%d ", t->id );
-   printf( "elapsed=%ld ", (long int) t->et );
-/* 
-   printf( "system=%ld ", (long int) t->st );
-   printf( "user=%ld ", (long int) t->ut );
-*/
-   printf( "calls=%d ", t->nentry );
-
-/* If there are any children, end the line with an opening bvrace. */
-   if( t->nchild ) printf("{");
-   printf("\n");
-
-/* If there is more than one child, sort them into descending order of 
-   elapsed time usage. */
-   if( t->nchild > 1 ) qsort( t->children, t->nchild, sizeof( AstTimer * ), 
-                              CompareTimers );
-
-/* Increment the indentation and call this function recursively to
-   display and free each child timer. */
-   ind += 3;
-   for( i = 0; i < t->nchild; i++ ) {
-      (t->children)[ i ] = ReportTimer( (t->children)[ i ], ind, flat,
-                                        nflat, status );
-   }
-
-/* Delimit the children by displaying a closing brace. */
-   if( t->nchild ) {
-      for( i = 0; i < ind - 3; i++ ) printf(" ");
-      printf("}\n");
-   }
-
-/* See if this timer is contained within itself at a higher level. */
-   parent = t->parent;
-   while( parent && ( parent->line != t->line ||
-                      strcmp( parent->file, t->file ) ) ) {
-      parent = parent->parent;
-   }
-
-/* If not, search for a timer in the "flat" array of timers that has the same
-   source file and line number. */
-   if( !parent ) {
-      found = 0;
-      ft = *flat;
-      for( i = 0; i < *nflat; i++, ft++ ) {
-         if( ft->line == t->line &&
-             !strcmp( ft->file, t->file ) ) {
-            found = 1;
-            break;
-         }
-      }
-
-/* If not found, add a new timer to the end of the "flat" array and
-   initialise it. */
-      if( !found ) {
-         i = (*nflat)++;
-         *flat = astGrow( *flat, *nflat, sizeof( AstTimer ) );
-         ft = (*flat) + i;
-         ft->id = 0;
-         ft->et = t->et; 
-         ft->ut = t->ut; 
-         ft->st = t->st; 
-         ft->nentry = t->nentry;
-         ft->name = t->name;
-         ft->file = t->file;
-         ft->line = t->line;
-         ft->parent = NULL;
-         ft->nchild = 0;
-         ft->children = NULL;
-
-
-/* If found, increment the properites to include the supplied timer. */
-      } else {
-         ft->et += t->et; 
-         ft->ut += t->ut; 
-         ft->st += t->st; 
-         ft->nentry += t->nentry;
-      }
-   }
-
-/* Free the memory used by the supplied timer. */
-   t->children = astFree( t->children );
-   return astFree( t );
-}
-
-
-static int CompareTimers( const void *a, const void *b ){
-   return ((*((AstTimer **) b ))->et) - ((*((AstTimer **) a ))->et);
-}
-
-static int CompareTimers2( const void *a, const void *b ){
-   return (((AstTimer *) b )->et) - (((AstTimer *) a )->et);
-}
-
-#endif
diff --git a/ast-5.3-1/memory.h b/ast-5.3-1/memory.h
deleted file mode 100644
index 380b012..0000000
--- a/ast-5.3-1/memory.h
+++ /dev/null
@@ -1,307 +0,0 @@
-#if !defined( MEMORY_INCLUDED )  /* Include this file only once */
-#define MEMORY_INCLUDED
-/*
-*+
-*  Name:
-*     memory.h
-
-*  Purpose:
-*     Define the interface to the Memory module.
-
-*  Description:
-*     This module defines functions which wrap up and extend the
-*     standard C functions for performing memory allocation. They
-*     provide better security against memory leaks, etc., and should
-*     not be inter-mixed with the standard C functions.
-*
-*     Note that this module is not a class implementation, although it
-*     resembles one.
-
-*  Functions Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astAppendString
-*           Append a string to another string which grows dynamically.
-*        astChrMatch
-*           Case-insensitive string comparison.
-*        astChrMatchN
-*           Case-insensitive string comparison of an most N characters.
-*        astFree
-*           Free previously allocated memory.
-*        astGrow
-*           Allocate memory for an adjustable array.
-*        astMalloc
-*           Allocate memory.
-*        astRealloc
-*           Change the size of a dynamically allocated region of memory.
-*        astSizeOf
-*           Determine the size of a dynamically allocated region of memory.
-*        astStore
-*           Store data in dynamically allocated memory.
-*        astString
-*           Create a C string from an array of characters.
-*        astStringArray
-*           Create an array of C strings from an array of characters.
-*        astChrLen
-*           Returns length of a string without trailing white space, etc.
-*        astSscanf
-*           Like sscanf, but fixes certain platform-specific bugs in the
-*           native sscanf implementation.
-*        astTSizeOf
-*           Determine the total size of a dynamically allocated region of memory.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     8-JAN-1996 (RFWS):
-*        Original version.
-*     26-JAN-1996 (RFWS)
-*        Added function interfaces.
-*     20-JUN-1996 (RFWS):
-*        Added astString.
-*     15-JUL-1996 (RFWS):
-*        Use improved prologue style, etc. and make all functions protected.
-*     11-SEP-1996 (RFWS):
-*        Added astStringArray (original written by DSB).
-*     18-MAR-1998 (RFWS):
-*        Make interface available for writing foreign language and
-*        graphics interfaces, etc.
-*     18-MAR-1998 (RFWS):
-*        Added explicit arguments to function macros.
-*     29-JAN-2002 (DSB):
-*        Added astChrLen and astSscanf.
-*     15-NOV-2002 (DSB):
-*        Added astChrMatch astChrMatchN.
-*     23-FEB-2006 (DSB):
-*        Added astMemCaching and AST__TUNULL.
-*     2-MAR-2006 (DSB):
-*        Only use astSscanf if the system on which AST was configured
-*        showed the non-ANSI behaviour reported by Bill Joye.
-*     27-JUN-2007 (DSB):
-*        Added astIsDynamic.
-*     25-OCT-2007 (DSB):
-*        Added astRemoveLeadingBlanks.
-*     22-FEB-2008 (DSB):
-*        Added astChrSub.
-
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include "error.h"    
-
-/* Macros. */
-/* ======= */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__TUNULL -99999
-
-/* Type definitions */
-/* ================ */
-
-#if defined(astCLASS) 
-
-/* Header for allocated memory. */
-/* ---------------------------- */
-/* This stores a "magic" value so that dynamically allocated memory
-   can be recognised, together with the allocated size. It also
-   ensures correct alignment. */
-typedef struct Memory {
-   struct Memory *next;
-   unsigned long magic;
-   size_t size;
-
-#ifdef MEM_DEBUG
-   struct Memory *prev; /* Pointer to the previous linked Memory structure */
-   int id;      /* A unique identifier for every allocated memory chunk */
-   int perm;    /* Is this chunk part of an acceptable once-off "memory leak"? */
-#endif
-
-} Memory;
-
-/* Define the largest size of a cached memory block in bytes. This does
-   not include the size of the Memory header. This does not need to be
-   too big because the vast majority of memory blocks allocated by AST are
-   less than a few hundred bytes. */
-#define MXCSIZE 300
-
-#endif
-
-
-#if defined(THREAD_SAFE) && defined(astCLASS) 
-
-/* Define a structure holding all data items that are global within the
-   memory.c file. */
-typedef struct AstMemoryGlobals {
-   size_t Sizeof_Memory;
-   int Cache_Init;
-   int Use_Cache;
-   Memory *Cache[ MXCSIZE + 1 ];
-
-} AstMemoryGlobals;
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-void astInitMemoryGlobals_( AstMemoryGlobals * );
-#endif
-
-#if defined(astCLASS) || 1       /* Nominally protected, but available for */
-                                 /* use in developing (e.g.) foreign */
-                                 /* language or graphics interfaces. */
-int astMemCaching_( int, int * );
-char **astChrSplit_( const char *, int *, int * );
-char **astChrSplitRE_( const char *, const char *, int *, const char **, int * );
-char **astChrSplitC_( const char *, char, int *, int * );
-int astChrMatch_( const char *, const char *, int * );
-int astChrMatchN_( const char *, const char *, size_t, int * );
-char **astStringArray_( const char *, int, int, int * );
-char *astString_( const char *, int, int * );
-int astSscanf_( const char *str, const char *format, ...);
-size_t astSizeOf_( const void *, int * );
-int astIsDynamic_( const void *, int * );
-size_t astTSizeOf_( const void *, int * );
-void *astFree_( void *, int * );
-void *astGrow_( void *, int, size_t, int * );
-void *astMalloc_( size_t, int * );
-void *astRealloc_( void *, size_t, int * );
-void *astStore_( void *, const void *, size_t, int * );
-size_t astChrLen_( const char *, int * );
-double astChr2Double_( const char *, int * );
-void astRemoveLeadingBlanks_( char *, int * );
-char *astAppendString_( char *, int *, const char *, int * );
-char *astChrSub_( const char *, const char *, const char *[], int, int * );
-
-#ifdef MEM_PROFILE
-void astStartTimer_( const char *, int, const char *, int * );
-void astStopTimer_( int * );
-void astEnableTimers_( int, int * );
-#endif
-
-
-#ifdef MEM_DEBUG
-void astActiveMemory_( const char * );
-void astWatchMemory_( int );
-void astFlushMemory_( int, int * );
-int astMemoryTune_( const char *, int, int * );
-void *astMemoryPtr_( int );
-void astMemoryAlarm_( const char * );
-void astMemoryUse_( const void *, const char *, int * );
-int astMemoryId_( const void *, int * );
-void astBeginPM_( int * );
-void astEndPM_( int * );
-#endif
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module. */
-
-#define astChrMatch(str1,str2) astERROR_INVOKE(astChrMatch_(str1,str2,STATUS_PTR))
-#define astChrMatchN(str1,str2,n) astERROR_INVOKE(astChrMatchN_(str1,str2,n,STATUS_PTR))
-#define astFree(ptr) astERROR_INVOKE(astFree_(ptr,STATUS_PTR))
-#define astGrow(ptr,n,size) astERROR_INVOKE(astGrow_(ptr,n,size,STATUS_PTR))
-#define astMalloc(size) astERROR_INVOKE(astMalloc_(size,STATUS_PTR))
-#define astMemCaching(flag) astERROR_INVOKE(astMemCaching_(flag,STATUS_PTR))
-#define astRealloc(ptr,size) astERROR_INVOKE(astRealloc_(ptr,size,STATUS_PTR))
-#define astSizeOf(ptr) astERROR_INVOKE(astSizeOf_(ptr,STATUS_PTR))
-#define astIsDynamic(ptr) astERROR_INVOKE(astIsDynamic_(ptr,STATUS_PTR))
-#define astTSizeOf(ptr) astERROR_INVOKE(astTSizeOf_(ptr,STATUS_PTR))
-#define astStore(ptr,data,size) astERROR_INVOKE(astStore_(ptr,data,size,STATUS_PTR))
-#define astAppendString(ptr,len,text) astERROR_INVOKE(astAppendString_(ptr,len,text,STATUS_PTR))
-#define astString(chars,nchars) astERROR_INVOKE(astString_(chars,nchars,STATUS_PTR))
-#define astStringArray(chars,nel,len) astERROR_INVOKE(astStringArray_(chars,nel,len,STATUS_PTR))
-#define astChrLen(string) astERROR_INVOKE(astChrLen_(string,STATUS_PTR))
-#define astChr2Double(string) astERROR_INVOKE(astChr2Double_(string,STATUS_PTR))
-#define astRemoveLeadingBlanks(string) astERROR_INVOKE(astRemoveLeadingBlanks_(string,STATUS_PTR))
-#define astChrSub(test,template,subs,nsub) astERROR_INVOKE(astChrSub_(test,template,subs,nsub,STATUS_PTR))
-
-#ifdef HAVE_NONANSI_SSCANF
-#define astSscanf astERROR_INVOKE(astSscanf_)
-#else
-#define astSscanf astERROR_INVOKE(sscanf)
-#endif
-#define astChrSplit(str,n) astERROR_INVOKE(astChrSplit_(str,n,STATUS_PTR))
-#define astChrSplitC(str,c,n) astERROR_INVOKE(astChrSplitC_(str,c,n,STATUS_PTR))
-#define astChrSplitRE(str,c,n,m) astERROR_INVOKE(astChrSplitRE_(str,c,n,m,STATUS_PTR))
-
-
-#ifdef MEM_PROFILE
-#define astStartTimer(name) astERROR_INVOKE(astStartTimer_(__FILE__,__LINE__,name,STATUS_PTR))
-#define astStopTimer astERROR_INVOKE(astStopTimer_(STATUS_PTR))
-#define astEnableTimers(enable) astERROR_INVOKE(astEnableTimers_(enable,STATUS_PTR))
-#endif
-
-
-/* Functions used for debugging memory leaks, etc */
-#ifdef MEM_DEBUG
-
-#define astActiveMemory(label) astERROR_INVOKE(astActiveMemory_(label))
-#define astMemoryTune(name,value) astERROR_INVOKE(astMemoryTune_(name,value,STATUS_PTR))
-#define astWatchMemory(id) astERROR_INVOKE(astWatchMemory_(id))
-#define astFlushMemory(leak) astERROR_INVOKE(astFlushMemory_(leak,STATUS_PTR))
-#define astBeginPM astERROR_INVOKE(astBeginPM_(STATUS_PTR))
-#define astEndPM astERROR_INVOKE(astEndPM_(STATUS_PTR))
-#define astMemoryPtr(id) astERROR_INVOKE(astMemoryPtr_(id))
-#define astMemoryAlarm(text) astERROR_INVOKE(astMemoryAlarm_(text))
-#define astMemoryUse(ptr,text) astERROR_INVOKE(astMemoryUse_(ptr,text,STATUS_PTR))
-#define astMemoryId(ptr) astERROR_INVOKE(astMemoryId_(ptr,STATUS_PTR))
-#else
-
-#define astActiveMemory(label) 
-#define astMemoryTune(name,value)
-#define astWatchMemory(id)
-#define astFlushMemory(leak) 
-#define astBeginPM 
-#define astEndPM
-#define astMemoryPtr(id) NULL
-#define astMemoryAlarm(text)
-#define astMemoryUse(ptr,text) 
-#define astMemoryId(ptr)
-
-#endif
-
-#endif
-
-
-
diff --git a/ast-5.3-1/missing b/ast-5.3-1/missing
deleted file mode 100755
index 85b697b..0000000
--- a/ast-5.3-1/missing
+++ /dev/null
@@ -1,381 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2005-06-08.21
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
-  exit 1
-fi
-
-run=:
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-# If MISSING_SUPPRESS_RUN is true, then ignore any --run option.
-# Allow MISSING_SUPPRESS_RUN to be defaulted in the environment, but default
-# it to false, giving original behaviour.
-if test -z "$MISSING_SUPPRESS_RUN"; then
-    MISSING_SUPPRESS_RUN=false
-fi
-
-case "$1" in
---run)
-  if $MISSING_SUPPRESS_RUN; then
-    # Merely shift the --run option off the list: do not run the command,
-    # and do not set $run to be null.
-    shift
-  else
-    # Try to run requested program, and just exit if it succeeds.
-    run=
-    shift
-    "$@" && exit 0
-    # Exit code 63 means version mismatch.  This often happens
-    # when the user tries to use an ancient version of a tool on
-    # a file that requires a minimum version.  In this case
-    # we should proceed as if the program had been absent, or
-    # if --run hadn't been passed.
-    if test $? = 63; then
-      run=:
-      msg="probably too old"
-    fi
-  fi
-  ;;
-
-  -h|--h|--he|--hel|--help)
-    echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
-  -h, --help      display this help and exit
-  -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
-
-Send bug reports to <bug-automake at gnu.org>."
-    exit $?
-    ;;
-
-  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing $scriptversion (GNU Automake)"
-    exit $?
-    ;;
-
-  -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
-    exit 1
-    ;;
-
-esac
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
-  lex|yacc)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case "$f" in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison|yacc)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-	case "$LASTARG" in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if [ -f "$SRCFILE" ]; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if [ -f "$SRCFILE" ]; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if [ ! -f y.tab.h ]; then
-	echo >y.tab.h
-    fi
-    if [ ! -f y.tab.c ]; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex|flex)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-	case "$LASTARG" in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if [ -f "$SRCFILE" ]; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if [ ! -f lex.yy.c ]; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit 1
-    fi
-    ;;
-
-  makeinfo)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  tar)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case "$firstarg" in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case "$firstarg" in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
-  true)
-    # Very easy to emulate!  We are almost certainly here because
-    # (i) ./configure is testing us by running `.../missing --run true'
-    # _and_ (ii) RUN_LOCAL_AUTOTOOLS is false, so that we didn't run
-    # `true' at the top.
-    exit 0
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ast-5.3-1/normmap.c b/ast-5.3-1/normmap.c
deleted file mode 100644
index 8a63197..0000000
--- a/ast-5.3-1/normmap.c
+++ /dev/null
@@ -1,1664 +0,0 @@
-/*
-*class++
-*  Name:
-*     NormMap
-
-*  Purpose:
-*     Normalise coordinates using a supplied Frame.
-
-*  Constructor Function:
-c     astNormMap
-f     AST_NORMMAP
-
-*  Description:
-*     The NormMap class implements a Mapping which normalises coordinate 
-*     values using the 
-c     astNorm function
-f     AST_NORM routine
-*     of a supplied Frame. The number of inputs and outputs of a NormMap
-*     are both equal to the number of axes in the supplied Frame.
-*
-*     The forward and inverse transformation of a NormMap are both
-*     defined but are identical (that is, they do not form a real inverse 
-*     pair in that the inverse transformation does not undo the
-*     normalisation, instead it reapplies it). However, the 
-c     astSimplify
-f     AST_SIMPLIFY
-*     function will replace neighbouring pairs of forward and inverse 
-*     NormMaps by a single UnitMap.
-
-*  Inheritance:
-*     The NormMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The MatrixMap class does not define any new attributes beyond
-*     those which are applicable to all Mappings.
-
-*  Functions:
-c     The NormMap class does not define any new functions beyond those
-f     The NormMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-JUL-2005 (DSB):
-*        Original version.
-*     23-AUG-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS NormMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "unitmap.h"             /* Unit Mappings */
-#include "normmap.h"             /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(NormMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(NormMap,Class_Init)
-#define class_vtab astGLOBAL(NormMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstNormMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstNormMap *astNormMapId_( void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two NormMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     NormMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two NormMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a NormMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the NormMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstNormMap *that;        
-   AstNormMap *this;        
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two NormMap structures. */
-   this = (AstNormMap *) this_object;
-   that = (AstNormMap *) that_object;
-
-/* Check the second object is a NormMap. We know the first is a
-   NormMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsANormMap( that ) ) {
-
-/* Check the Invert flags for the two NormMaps are equal. */
-      if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-/* Check the two Frames are equal. */
-         if( astEqual( this->frame, that->frame ) ) {
-            result = 1;
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-void astInitNormMapVtab_(  AstNormMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitNormMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a NormMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     void astInitNormMapVtab( AstNormMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     NormMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the NormMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsANormMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   mapping->RemoveRegions = RemoveRegions;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_mapsplit = mapping->MapSplit;
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->MapSplit = MapSplit;
-   mapping->Rate = Rate;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetDump( vtab, Dump, "NormMap", "Normalise axis values" );
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     NormMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstNormMap *this;       /* Pointer to NormMap structure */
-   int result;             /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the NormMap structure. */
-   this = (AstNormMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->frame, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a NormMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     NormMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated NormMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated NormMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated NormMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the NormMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        NormMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated NormMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm1;
-   AstFrame *frm2;
-   AstMapping *smap;
-   AstNormMap *map;  
-   AstNormMap *nmap1;  
-   AstNormMap *nmap2;  
-   int cancel;
-   int map_inv;      
-   int nax;           
-   int result;       
-
-/* Initialise. */
-   result = -1;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Initialisation to avoid compiler warnings. */
-   nax = 0;
-
-/* Get a pointer to this NormMap. */
-   map = (AstNormMap *) this;
-
-/* Temporarily set its Invert flag to the requested value. */
-   map_inv = astGetInvert( map );
-   astSetInvert( map, ( *invert_list )[ where ] );
-
-/* First try to simplify the NormMap by simplifying its encapsulated
-   Frame. */
-   smap = astSimplify( map->frame );
-
-/* If any simplification took place, create a new NormMap with the
-   simplified Frame. */
-   if( smap != (AstMapping *) map->frame ) {
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) astNormMap( (AstFrame *) smap, "", status );
-      result = where;
-    
-/* The only other simplication which can be performed is to cancel a NormMap
-   with its own inverse in series. */
-   } else if( series ) {
-
-/* Indicate we have nothing to cancel with as yet. */
-      cancel = -1;
-
-/* First consider the lower neighbour. */
-      if( where > 0 && astIsANormMap( ( *map_list )[ where - 1 ] ) ) {
-
-/* Check the Invert flags are opposite */
-         if( ( *invert_list )[ where ] != ( *invert_list )[ where - 1 ] ) {
-            nmap1 = map;
-            nmap2 = (AstNormMap *) ( *map_list )[ where - 1 ];             
-
-/* Check the encapsulated Frames are equal. */
-            frm1 = nmap1->frame;
-            frm2 = nmap2->frame;
-            if( astEqual( frm1, frm2 ) ) cancel = where - 1;
-            nax = astGetNout( nmap1 );
-         }
-      }
-
-/* Likewise consider the upper neighbour. */
-      if( cancel == -1 && where + 1 < *nmap && 
-          astIsANormMap( ( *map_list )[ where + 1 ] ) ) {
-
-         if( ( *invert_list )[ where ] != ( *invert_list )[ where + 1 ] ) {
-            nmap1 = map;
-            nmap2 = (AstNormMap *) ( *map_list )[ where + 1 ];
-            frm1 = nmap1->frame;
-            frm2 = nmap2->frame;
-            if( astEqual( frm1, frm2 ) ) cancel = where + 1;
-            nax = astGetNin( nmap1 );
-         }
-      }
-
-/* If we can cancel with a neightbour, do so. */
-      if( cancel != -1 ) {
-         (void) astAnnul( ( *map_list )[ where ] );
-         (void) astAnnul( ( *map_list )[ cancel ] );
-         ( *map_list )[ where ] = (AstMapping *) astUnitMap( nax, "", status );
-         ( *invert_list )[ where ] = 0;
-         ( *map_list )[ cancel ] = (AstMapping *) astUnitMap( nax, "", status );
-         ( *invert_list )[ cancel ] = 0;
-          result = ( cancel < where ) ? cancel : where;
-      }
-   }
-
-/* Free resources. */
-   smap = astAnnul( smap );
-
-/* Reset the original Invert attribute for the specified NormMap */
-   astSetInvert( map, map_inv );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     NormMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     NormMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing NormMap. This is only possible if the specified inputs
-*     correspond to some subset of the NormMap outputs. That is, there
-*     must exist a subset of the NormMap outputs for which each output
-*     depends only on the selected NormMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied NormMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the NormMap to be split (the NormMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied NormMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied NormMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied NormMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstFrame *frm2;            /* Pointer to new Frame */
-   AstNormMap *this;          /* Pointer to NormMap structure */
-   int *result;               /* Pointer to returned array */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
-   result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
-   if( !result ) {
-
-/* Get a pointer to the NormMap structure. */
-      this = (AstNormMap *) this_map;
-
-/* Pick the requried axes from the encapsulated Frame. */
-      frm2 = astPickAxes( this->frame, nin, in, NULL );
-
-/* Create a new NormMap from this. */
-      *map = (AstMapping *) astNormMap( frm2, "", status );
-
-/* The returned list of output axes is a copy the supplied list of input 
-   axes. */
-      result = astStore( NULL, in, sizeof( int )*(size_t) nin );
-
-/* Free resources. */
-      frm2 = astAnnul( frm2 );
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     NormMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-   return ( ax1 == ax2 ) ? 1.0 : 0.0;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     NormMap method (over-rides the astRemoveRegions method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a CmpMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel CmpMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the NormMap class invokes the
-*     astRemoveRegions method on the encapsulated Frame, and returns a
-*     new NormMap containing the resulting Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *newfrm;             /* New component Frame */
-   AstMapping *result;           /* Result pointer to return */
-   AstNormMap *new;              /* Pointer to new MormMap */
-   AstNormMap *this;             /* Pointer to NormMap structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the NormMap. */
-   this = (AstNormMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the component Frame. */
-   newfrm = astRemoveRegions( this->frame );
-
-/* If the Frame was not modified, just return a clone of the supplied
-   pointer. */
-   if( this->frame == newfrm ) {
-      result = astClone( this );
-
-/* Otherwise, we need to create a new NormMap to return. We take a deep 
-   copy of the supplied NormMap and then modify the Frame so that we 
-   retain any extra information in the supplied NormMap. */
-   } else {
-      new = astCopy( this );
-      (void) astAnnul( new->frame );
-      new->frame = astClone( newfrm );
-      result = (AstMapping *) new;
-   }
-
-/* Free resources. */
-   newfrm = astAnnul( newfrm );
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a NormMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     NormMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a NormMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required zoom
-*     factor.
-
-*  Parameters:
-*     this
-*        Pointer to the NormMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the NormMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstNormMap *map;              /* Pointer to NormMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *work;                 /* Work space for a single point */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the NormMap. */
-   map = (AstNormMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord_in = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-   work = astMalloc( sizeof( double )* ncoord_in );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-      for ( point = 0; point < npoint; point++ ) {
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            work[ coord ] = ptr_in[ coord ][ point ];
-         }
-         astNorm( map->frame, work );
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            ptr_out[ coord ][ point ] = work[ coord ];
-         }
-      }
-   }
-
-/* Free resources */
-   work = astFree( work );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for NormMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for NormMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the 
-*     Frame within the NormMap.
-*/
-
-/* Local Variables: */
-   AstNormMap *in;                /* Pointer to input NormMap */
-   AstNormMap *out;               /* Pointer to output NormMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-   in = (AstNormMap *) objin;
-   out = (AstNormMap *) objout;
-   out->frame = astCopy( in->frame );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for NormMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for NormMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstNormMap *this;              /* Pointer to NormMap */
-
-   this = (AstNormMap *) obj;
-   this->frame = astAnnul( this->frame );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for NormMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the NormMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the NormMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstNormMap *this;             /* Pointer to the NormMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the NormMap structure. */
-   this = (AstNormMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   NormMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* Frame. */ 
-/* ------ */
-   astWriteObject( channel, "Frame", 1, 1, this->frame, 
-                   "Frame defining the normalisation" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsANormMap and astCheckNormMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(NormMap,Mapping)
-astMAKE_CHECK(NormMap)
-
-AstNormMap *astNormMap_( void *frame_void, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astNormMap
-f     AST_NORMMAP
-
-*  Purpose:
-*     Create a NormMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "normmap.h"
-c     AstNormMap *astNormMap( AstFrame *frame, const char *options, ... )
-f     RESULT = AST_NORMMAP( FRAME, OPTIONS, STATUS )
-
-*  Class Membership:
-*     NormMap constructor.
-
-*  Description:
-*     This function creates a new NormMap and optionally initialises its
-*     attributes.
-*
-*     A NormMap is a Mapping which normalises coordinate values using the 
-c     astNorm function
-f     AST_NORM routine
-*     of the supplied Frame. The number of inputs and outputs of a NormMap
-*     are both equal to the number of axes in the supplied Frame.
-*
-*     The forward and inverse transformation of a NormMap are both
-*     defined but are identical (that is, they do not form a real inverse 
-*     pair in that the inverse transformation does not undo the
-*     normalisation, instead it reapplies it). However, the 
-c     astSimplify
-f     AST_SIMPLIFY
-*     function will replace neighbouring pairs of forward and inverse 
-*     NormMaps by a single UnitMap.
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame which is to be used to normalise the
-*        supplied axis values. 
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new NormMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new NormMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astNormMap()
-f     AST_NORMMAP = INTEGER
-*        A pointer to the new NormMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* The Frame pointer */
-   AstNormMap *new;              /* Pointer to new NormMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate pointers to the Frame structures provided. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the NormMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitNormMap( NULL, sizeof( AstNormMap ), !class_init, &class_vtab,
-                         "NormMap", frame );
-   if( astOK ) {
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new NormMap's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new NormMap. */
-   return new;
-}
-
-AstNormMap *astNormMapId_( void *frame_void, const char *options, ... ) {
-/*
-*  Name:
-*     astNormMapId_
-
-*  Purpose:
-*     Create a NormMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     AstNormMap *astNormMapId_( int ncoord, double zoom,
-*                                const char *options, ... )
-
-*  Class Membership:
-*     NormMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astNormMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astNormMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astNormMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astNormMap_.
-
-*  Returned Value:
-*     The ID value associated with the new NormMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* The Frame pointer */
-   AstNormMap *new;              /* Pointer to new NormMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate pointers to the Frame structures provided. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Initialise the NormMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitNormMap( NULL, sizeof( AstNormMap ), !class_init, &class_vtab,
-                         "NormMap", frame );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new NormMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new NormMap. */
-   return astMakeId( new );
-}
-
-AstNormMap *astInitNormMap_( void *mem, size_t size, int init,
-                             AstNormMapVtab *vtab, const char *name,
-                             AstFrame *frame, int *status ) {
-/*
-*+
-*  Name:
-*     astInitNormMap
-
-*  Purpose:
-*     Initialise a NormMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     AstNormMap *astInitNormMap( void *mem, size_t size, int init,
-*                                 AstNormMapVtab *vtab, const char *name,
-*                                 AstFrame *frame )
-
-*  Class Membership:
-*     NormMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new NormMap object. It allocates memory (if necessary) to accommodate
-*     the NormMap plus any additional data associated with the derived class.
-*     It then initialises a NormMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a NormMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the NormMap is to be initialised.
-*        This must be of sufficient size to accommodate the NormMap data
-*        (sizeof(NormMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the NormMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the NormMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the NormMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new NormMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        The Frame to use to do the normalisations.
-
-*  Returned Value:
-*     A pointer to the new NormMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstNormMap *new;              /* Pointer to new NormMap */
-   int ncoord;                   /* Number of input and output coords */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitNormMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Get the number of axes in the Frame. */
-   ncoord = astGetNaxes( frame );
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the NormMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstNormMap *) astInitMapping( mem, size, 0,
-                                        (AstMappingVtab *) vtab, name,
-                                        ncoord, ncoord, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the NormMap data. */
-/* ---------------------------- */
-/* Store a pointer to the Frame. */
-      new->frame = astClone( frame );
-
-/* If an error occurred, clean up by deleting the new NormMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new NormMap. */
-   return new;
-}
-
-AstNormMap *astLoadNormMap_( void *mem, size_t size,
-                             AstNormMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadNormMap
-
-*  Purpose:
-*     Load a NormMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "normmap.h"
-*     AstNormMap *astLoadNormMap( void *mem, size_t size,
-*                                 AstNormMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     NormMap loader.
-
-*  Description:
-*     This function is provided to load a new NormMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     NormMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a NormMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the NormMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        NormMap data (sizeof(NormMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the NormMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the NormMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstNormMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new NormMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the NormMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "NormMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new NormMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstNormMap *new;              /* Pointer to the new NormMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this NormMap. In this case the
-   NormMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstNormMap );
-      vtab = &class_vtab;
-      name = "NormMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitNormMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built NormMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "NormMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Frame. */
-/* ------ */
-      new->frame = astReadObject( channel, "frame", NULL );
-
-/* If an error occurred, clean up by deleting the new NormMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new NormMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
diff --git a/ast-5.3-1/normmap.h b/ast-5.3-1/normmap.h
deleted file mode 100644
index ae11014..0000000
--- a/ast-5.3-1/normmap.h
+++ /dev/null
@@ -1,217 +0,0 @@
-#if !defined( NORMMAP_INCLUDED ) /* Include this file only once */
-#define NORMMAP_INCLUDED
-/*
-*+
-*  Name:
-*     normmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the NormMap class.
-
-*  Invocation:
-*     #include "normmap.h"
-
-*  Description:
-*     This include file defines the interface to the NormMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The NormMap class implements Mappings which use a Frame to
-*     normalise the input axis values.
-
-*  Inheritance:
-*     The NormMap class inherits from the Mapping class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-JUL-2005 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "frame.h"               /* Coordinate Frames */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* NormMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstNormMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstFrame *frame;              /* Encapsulated Frame */
-} AstNormMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstNormMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-} AstNormMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstNormMapGlobals {
-   AstNormMapVtab Class_Vtab;
-   int Class_Init;
-} AstNormMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitNormMapGlobals_( AstNormMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(NormMap)          /* Check class membership */
-astPROTO_ISA(NormMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstNormMap *astNormMap_( void *, const char *, int *, ...);
-#else
-AstNormMap *astNormMapId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstNormMap *astInitNormMap_( void *, size_t, int, AstNormMapVtab *,
-                             const char *, AstFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitNormMapVtab_( AstNormMapVtab *, const char *, int * );
-
-/* Loader. */
-AstNormMap *astLoadNormMap_( void *, size_t, AstNormMapVtab *,
-                             const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckNormMap(this) astINVOKE_CHECK(NormMap,this,0)
-#define astVerifyNormMap(this) astINVOKE_CHECK(NormMap,this,1)
-
-/* Test class membership. */
-#define astIsANormMap(this) astINVOKE_ISA(NormMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astNormMap astINVOKE(F,astNormMap_)
-#else
-#define astNormMap astINVOKE(F,astNormMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitNormMap(mem,size,init,vtab,name,frame) \
-astINVOKE(O,astInitNormMap_(mem,size,init,vtab,name,frame,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitNormMapVtab(vtab,name) astINVOKE(V,astInitNormMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadNormMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadNormMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckNormMap to validate NormMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/nullregion.c b/ast-5.3-1/nullregion.c
deleted file mode 100644
index 45d8c96..0000000
--- a/ast-5.3-1/nullregion.c
+++ /dev/null
@@ -1,2093 +0,0 @@
-/*
-*class++
-*  Name:
-*     NullRegion
-
-*  Purpose:
-*     A boundless region within a Frame.
-
-*  Constructor Function:
-c     astNullRegion
-f     AST_NULLREGION
-
-*  Description:
-*     The NullRegion class implements a Region with no bounds within a Frame.
-*     If the Negated attribute of a NullRegion is false, the NullRegion
-*     represents a Region containing no points. If the Negated attribute of 
-*     a NullRegion is true, the NullRegion represents an infinite Region 
-*     (that is, all points in the coordinate system are inside the NullRegion).
-
-*  Inheritance:
-*     The NullRegion class inherits from the Region class.
-
-*  Attributes:
-*     The NullRegion class does not define any new attributes beyond
-*     those which are applicable to all Regions.
-
-*  Functions:
-c     The NullRegion class does not define any new functions beyond those
-f     The NullRegion class does not define any new routines beyond those
-*     which are applicable to all Regions.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-OCT-2004 (DSB):
-*        Original version.
-*     20-JAN-2009 (DSB):
-*        Over-ride astRegBasePick.
-*     26-JAN-2009 (DSB):
-*        Over-ride astMapMerge.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS NullRegion
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "nullregion.h"          /* Interface definition for this class */
-#include "mapping.h"             /* Position mappings */
-#include "circle.h"              /* Circle regions */
-#include "prism.h"               /* Extruded Regions */
-#include "unitmap.h"             /* Unit Mapping */
-#include "cmpframe.h"            /* Compound Frames */
-#include "cmpmap.h"              /* Compound Mappings */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(NullRegion)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(NullRegion,Class_Init)
-#define class_vtab astGLOBAL(NullRegion,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstNullRegionVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstNullRegion *astNullRegionId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *RegMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *MergeNullRegion( AstNullRegion *, AstRegion *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void GetRegionBounds( AstRegion *this, double *, double *, int * );
-
-/* Member functions. */
-/* ================= */
-static AstRegion *GetDefUnc( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetDefUnc
-
-*  Purpose:
-*     Obtain a pointer to the default uncertainty Region for a given Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstRegion *astGetDefUnc( AstRegion *this ) 
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astGetDefUnc protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a pointer to a Region which represents the
-*     default uncertainty associated with a position on the boundary of the 
-*     given  Region. The returned Region refers to the base Frame within the 
-*     FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstRegion *result;
-   double *cen;
-   double rad;
-   int i;              
-   int n;
-
-/* Initialise */
-   result = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Create a Circle centred on the origin with zero radius. */
-   n = astGetNaxes( this );
-   cen = astMalloc( sizeof(double)*(size_t) n );
-   if( cen ) {
-      for( i = 0; i < n; i++ ) cen[ i ] = 0.0;
-      rad = 0.0;
-      result = (AstRegion *) astCircle( this, 1, cen, &rad, NULL, "", status );
-      cen = astFree( cen );
-   }
-
-/* Return the default uncertainty Region. */
-   return result;
-}
-
-void astInitNullRegionVtab_(  AstNullRegionVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitNullRegionVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a NullRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     void astInitNullRegionVtab( AstNullRegionVtab *vtab, const char *name )
-
-*  Class Membership:
-*     NullRegion vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the NullRegion class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsANullRegion) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping->MapMerge = MapMerge;
-
-   region->GetDefUnc = GetDefUnc;
-   region->Overlap = Overlap;
-   region->OverlapX = OverlapX;
-   region->RegBaseBox = RegBaseBox;
-   region->RegBaseMesh = RegBaseMesh;
-   region->GetRegionBounds = GetRegionBounds;
-   region->RegMesh = RegMesh;
-   region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDump( vtab, Dump, "NullRegion", "Boundless region" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a NullRegion.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     NullRegion method (over-rides the protected astMapMerge method
-*     inherited from the Region class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated NullRegion in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated NullRegion with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated NullRegion which is to be merged with
-*        its neighbours. This should be a cloned copy of the NullRegion
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        NullRegion it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated NullRegion resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstNullRegion *oldint;  /* Pointer to supplied NullRegion */
-   AstMapping *map;      /* Pointer to adjacent Mapping */
-   AstMapping *new;      /* Simplified or merged Region */
-   int i1;               /* Index of first Mapping merged */
-   int i;                /* Loop counter */
-   int result;           /* Result value to return */
-
-/* Initialise. */
-   result = -1;
-   i1 = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the NullRegion. */
-   oldint = (AstNullRegion *) this;
-
-/* First of all, see if the NullRegion can be replaced by a simpler Region,
-   without reference to the neighbouring Regions in the list.           */
-/* =====================================================================*/
-
-/* Try to simplify the NullRegion. If the pointer value has changed, we assume
-   some simplification took place. */
-   new = astSimplify( oldint );
-   if( new != (AstMapping *) oldint ) {
-
-/* Annul the NullRegion pointer in the list and replace it with the new Region
-   pointer, and indicate that the forward transformation of the returned
-   Region should be used (not really needed but keeps things clean). */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = new;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-
-/* If the NullRegion itself could not be simplified, see if it can be merged
-   with the Regions on either side of it in the list. We can only merge
-   in parallel. */
-/* =====================================================================*/
-   } else if( ! series ){
-      new = astAnnul( new );
-
-/* Attempt to merge the NullRegion with its lower neighbour (if any). */
-      if( where > 0 ) {
-         i1 = where - 1;
-         map = ( *map_list )[ where - 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergeNullRegion( oldint, (AstRegion *) map,
-                                                  0, status );
-         }
-      }
-
-/* If this did not produced a merged Region, attempt to merge the NullRegion 
-   with its upper neighbour (if any). */
-      if( !new && where < *nmap - 1 ) {
-         i1 = where;
-         map = ( *map_list )[ where + 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergeNullRegion( oldint, (AstRegion *) map,
-                                                  1, status );
-         }
-      }
-
-/* If succesfull... */
-      if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   Region. Also clear the invert flag. */ 
-         (void) astAnnul( ( *map_list )[ i1 ] );
-         ( *map_list )[ i1 ] = new;
-         ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-         (void) astAnnul( ( *map_list )[ i1 + 1 ] );
-         for ( i = i1 + 2; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-
-/* Clear the vacated element at the end. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap )--;
-         result = i1;
-      }
-
-   } else {
-      new = astAnnul( new );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *MergeNullRegion( AstNullRegion *this, AstRegion *reg, 
-                                   int intfirst, int *status ) {
-/*
-*  Name:
-*     MergeNullRegion
-
-*  Purpose:
-*     Attempt to merge a NullRegion with another Region to form a Region of 
-*     higher dimensionality.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstRegion *MergeNullRegion( AstNullRegion *this, AstRegion *reg, 
-*                                 int intfirst, int *status ) 
-
-*  Class Membership:
-*     NullRegion member function.
-
-*  Description:
-*     This function attempts to combine the supplied Regions together
-*     into a Region of higher dimensionality. 
-
-*  Parameters:
-*     this
-*        Pointer to a NullRegion.
-*     reg
-*        Pointer to another Region.
-*     intfirst
-*        If non-zero, then the NullRegion axes are put first in the new Region.
-*        Otherwise, the other Region's axes are put first.
-*     status
-*        Pointer to the inherited status value.
-
-*  Returned Value:
-*     A pointer to a new region, or NULL if the supplied Regions could
-*     not be merged.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;           /* Pointer to base Frame for "result" */
-   AstFrame *cfrm;           /* Pointer to current Frame for "result" */
-   AstFrame *frm_reg;        /* Pointer to Frame from "reg" */
-   AstFrame *frm_this;       /* Pointer to Frame from "this" */
-   AstMapping *bcmap;        /* Base->current Mapping for "result" */
-   AstMapping *map_reg;      /* Base->current Mapping from "reg" */
-   AstMapping *map_this;     /* Base->current Mapping from "this" */
-   AstMapping *sbunc;        /* Simplified uncertainty */
-   AstRegion *bunc;          /* Base Frame uncertainty Region */
-   AstRegion *new;           /* Pointer to new NullRegion in base Frame */
-   AstRegion *result;        /* Pointer to returned NullRegion in current Frame */
-   AstRegion *unc_reg;       /* Current Frame uncertainty Region from "reg" */
-   AstRegion *unc_this;      /* Current Frame uncertainty Region from "this" */
-   double fac_reg;           /* Ratio of used to default MeshSize for "reg" */
-   double fac_this;          /* Ratio of used to default MeshSize for "this" */
-   int msz_reg;              /* Original MeshSize for "reg" */
-   int msz_reg_set;          /* Was MeshSize originally set for "reg"? */
-   int msz_this;             /* Original MeshSize for "this" */
-   int msz_this_set;         /* Was MeshSize originally set for "this"? */
-   int nax;                  /* Number of axes in "result" */
-   int nax_reg;              /* Number of axes in "reg" */
-   int nax_this;             /* Number of axes in "this" */
-   int neg_reg;              /* Negated attribute value for other supplied Region */
-   int neg_this;             /* Negated attribute value for supplied NullRegion  */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in 
-   each Region if we are to merge the Regions. In addition, in order to 
-   merge, either both Regions must have a defined uncertainty, or neither 
-   Region must have a defined Uncertainty. */
-   if( astGetClosed( this ) == astGetClosed( reg ) &&
-       astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
-      neg_this = astGetNegated( this );
-      neg_reg = astGetNegated( reg );
-
-/* Get the number of axes in the two supplied Regions. */
-      nax_reg = astGetNaxes( reg );
-      nax_this = astGetNaxes( this );
-   
-/* If the Regions can be combined, get the number of axes the
-   combination will have. */
-      nax = nax_reg + nax_this;
-   
-/* Get the base Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame that will be used to create any new Region. */
-      frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-      frm_reg = astGetFrame( reg->frameset, AST__BASE );
-   
-      if( intfirst ) {
-         bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-      } else {
-         bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-      }
-   
-      frm_this = astAnnul( frm_this );
-      frm_reg = astAnnul( frm_reg );
-   
-/* Indicate we do not yet have a merged Region. */
-      new = NULL;
-   
-/* We only check for merging with another NullRegion (other classes such
-   as Box and Interval check for merging of NullRegions with other classes). 
-   The result will be an NullRegion. Both Regions must have the same value 
-   for the Negated flag. */
-      if( astIsANullRegion( reg ) && neg_this == neg_reg ) {
-         new = (AstRegion *) astNullRegion( bfrm, NULL, "", status );
-   
-/* Propagate remaining attributes of the supplied Region to it. */
-         astRegOverlay( new, this, 1 );
-
-/* Ensure the Negated flag is set correctly in the returned NullRegion. */
-         if( neg_this ) {
-            astSetNegated( new, neg_this );
-         } else {
-            astClearNegated( new );
-         }
-
-/* If both the supplied Regions have uncertainty, assign the new Region an 
-   uncertainty. */
-         if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
-            unc_this = astGetUncFrm( this, AST__BASE );
-            unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
-            if( intfirst ) {
-               bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
-            } else {
-               bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
-            }
-
-/* Attempt to simplify the Prism. */
-            sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
-            astSetUnc( new, sbunc );
-
-/* Free resources. */
-            sbunc = astAnnul( sbunc );
-            bunc = astAnnul( bunc );
-            unc_reg = astAnnul( unc_reg );
-            unc_this = astAnnul( unc_this );
-         }
-
-/* Get the current Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame. */
-         frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
-         frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-      
-         if( intfirst ) {
-            cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-         } else {
-            cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-         }
-      
-/* Get the base -> current Mappings from the two Region FrameSets, and 
-   combine them into a single parallel CmpMap that connects bfrm and cfrm. */
-         map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE, 
-                                   AST__CURRENT );
-         map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-      
-         if( intfirst ) {
-            bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "", 
-                                              status );
-         } else {
-            bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "", 
-                                              status );
-         }
-      
-/* Map the new Region into the new current Frame. */
-         result = astMapRegion( new, bcmap, cfrm );
-
-/* The filling factor in the returned is the product of the filling
-   factors for the two supplied Regions. */
-         if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
-            astSetFillFactor( result, astGetFillFactor( reg )*
-                                      astGetFillFactor( this ) );
-         }
-
-/* If the MeshSize value is set in either supplied Region, set a value
-   for the returned Region which scales the default value by the
-   product of the scaling factors for the two supplied Regions. First see
-   if either MeshSize value is set. */
-         msz_this_set = astTestMeshSize( this );
-         msz_reg_set = astTestMeshSize( reg );
-         if( msz_this_set || msz_reg_set ) {
-
-/* If so, get the two MeshSize values (one of which may be a default
-   value), and then clear them so that the default value will be returned
-   in future. */
-            msz_this = astGetMeshSize( this );
-            msz_reg = astGetMeshSize( reg );
-            astClearMeshSize( this );
-            astClearMeshSize( reg );
-
-/* Get the ratio of the used MeshSize to the default MeshSize for both
-   Regions. */
-            fac_this = (double)msz_this/(double)astGetMeshSize( this );
-            fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-
-/* The MeshSize of the returned Returned is the default value scaled by
-   the product of the two ratios found above. */
-            astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-
-/* Re-instate the original MeshSize values for the supplied Regions (if
-   set) */
-            if( msz_this_set ) astSetMeshSize( this, msz_this );
-            if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
-         }
-
-/* Free remaining resources */
-         frm_this = astAnnul( frm_this );
-         frm_reg = astAnnul( frm_reg );
-         map_this = astAnnul( map_this );
-         map_reg = astAnnul( map_reg );
-         bcmap = astAnnul( bcmap );
-         new = astAnnul( new );
-         cfrm = astAnnul( cfrm );
-      }
-   }
-
-/* If an error has occurred, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-*  Name:
-*     Overlap
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     int Overlap( AstRegion *this, AstRegion *that ) 
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astOverlap method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function returns an integer value indicating if the two
-*     supplied Regions overlap. The two Regions are converted to a commnon
-*     coordinate system before performing the check. If this conversion is 
-*     not possible (for instance because the two Regions represent areas in
-*     different domains), then the check cannot be performed and a zero value 
-*     is returned to indicate this.
-
-*  Parameters:
-*     this
-*        Pointer to the first Region.
-*     that
-*        Pointer to the second Region.
-
-*  Returned Value:
-*     astOverlap()
-*        A value indicating if there is any overlap between the two Regions.
-*        Possible values are:
-*
-*        0 - The check could not be performed because the second Region
-*            could not be mapped into the coordinate system of the first 
-*            Region.
-*
-*        1 - There is no overlap between the two Regions.
-*
-*        2 - The first Region is completely inside the second Region.
-*
-*        3 - The second Region is completely inside the first Region.
-*
-*        4 - There is partial overlap between the two Regions.
-*
-*        5 - The Regions are identical.
-*
-*        6 - The second Region is the negation of the first Region.
-
-*  Notes:
-*     - The returned values 5 and 6 do not check the value of the Closed 
-*     attribute in the two Regions. 
-*     - A value of zero will be returned if this function is invoked with the 
-*     AST error status set, or if it should fail for any reason.
-
-* Implementation Notes:
-*    - This function is simply a wrap-up for the OverlapX function
-*    which performs the required processing but swaps the order of the
-*    two arguments. This is a trick to allow the astOverlap
-*    method to be over-ridden by derived classes on the basis of the
-*    class of either of the two arguments.
-*/
-
-/* Check the inherited status. */
-   if ( !astOK ) return 0;
-
-/* Invoke the private "OverlapX" member function with the two arguments 
-   swapped. */
-   return OverlapX( that, this, status );
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-*  Name:
-*     OverlapX
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     int OverlapX( AstRegion *that, AstRegion *this ) 
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astOverlapX method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function performs the processing for the public astOverlap
-*     method (as inherited from the Region class and over-ridden by the
-*     NullRegion class) and has exactly the same interface except that
-*     the order of the two arguments is swapped. This is a trick
-*     to allow the astOverlap method to be over-ridden by derived
-*     classes on the basis of the class of either of its two
-*     arguments.
-*
-*     See the astOverlap method for details of the interface.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;               /* FrameSet connecting Region Frames */
-   int result;                    /* Returned value */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the Regions can be compared meaningfully. */
-   fs = astConvert( this, that, "" );   
-   if( fs ) { 
-      fs = astAnnul( fs );
-
-/* If both the supplied Regions are NullRegion... */
-      if( astIsANullRegion( this ) && astIsANullRegion( that ) ) {
-
-/* If the Negated attributes are equal, the Regions are identical.
-   Otherwise they are mutually exclusive. */
-         if( astGetNegated( this ) == astGetNegated( that ) ) {
-            result = 5;
-         } else {
-            result = 6;
-         }
-   
-/* If one of the supplied Region is a NullRegion containing no points,
-   then there is no overlap. */
-      } else if( ( astIsANullRegion( this ) && !astGetNegated( this ) ) ||
-                 ( astIsANullRegion( that ) && !astGetNegated( that ) ) ) {
-         result = 1;
-   
-/* If "that" is infinite and "this" is not infinite, then "this" is
-   entirely inside "that". */
-      } else if( astIsANullRegion( that ) && astGetNegated( that ) ) {
-         result = 2;
-
-/* If "this" is infinite and "that" is not infinite, then "that" is
-   entirely inside "this". */
-      } else if( astIsANullRegion( this ) && astGetNegated( this ) ){
-         result = 3;
-   
-/* Otherwise there is partial overlap. */
-      } else {   
-         result = 4;
-      }
-   }
-
-/* If not OK, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstNullRegion *this;          /* Pointer to NullRegion structure */
-   int i;                        /* Axis index */
-   int nc;                       /* No. of axes in base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the NullRegion structure */
-   this = (AstNullRegion *) this_region;
-
-/* Get the number of base Frame axes. */
-   nc = astGetNin( this_region->frameset );
-
-/* Set the upper bound less than the lower bound to indicate that the region
-   contains no points. */
-   for( i = 0; i < nc; i++ ) {
-      lbnd[ i ] = 1.0;
-      ubnd[ i ] = -1.0;
-   }
-
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet. Note, a NullRegion has no boundary. This
-*     is indicated by returned a PointSet containing a single point with a 
-*     value of AST__BAD on every axis.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    Pointer to a new PointSet containing a single point with value of
-*    AST__BAD on every axis.
-
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result; 
-   double **ptr;
-   int i;
-   int nc;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the inherited status */
-   if( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this->basemesh ) {
-      result = astClone( this->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Get the number of base Frame axes */
-      nc = astGetNin( this->frameset );
-
-/* Create the PointSet. */
-      result = astPointSet( 1, nc, "", status );
-
-/* Get a pointer to the axis values. */
-      ptr = astGetPoints( result );
-
-/* If OK, store AST__BAD on every axis. */
-      if( ptr ) for( i = 0; i < nc; i++ ) ptr[ i ][ 0 ] = AST__BAD;
-
-/* Same the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-      if( astOK && result ) this->basemesh = astClone( result );
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, 
-                               const int *axes, int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;         /* The base Frame in the supplied Region */
-   AstFrame *frm;          /* The base Frame in the returned Region */
-   AstRegion *bunc;        /* The uncertainty in the supplied Region */
-   AstRegion *result;      /* Returned Region */
-   AstRegion *unc;         /* The uncertainty in the returned Region */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
-   bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
-   encapsulated FrameSet. */
-   frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
-   Region, and select the required axes from it. If the resulting Object
-   is not a Region, annul it so that the returned Region will have no 
-   uncertainty. */
-   if( astTestUnc( this_region ) ) {
-      bunc = astGetUncFrm( this_region, AST__BASE );
-      unc = astPickAxes( bunc, naxes, axes, NULL );
-      bunc = astAnnul( bunc );
-
-      if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
-   } else {
-      unc = NULL;
-   }
-
-/* Create the new NullRegion. */
-   result = (AstRegion *) astNullRegion( frm, unc, "", status );
-
-/* Free resources */
-   frm = astAnnul( frm );      
-   bfrm = astAnnul( bfrm );      
-   if( unc ) unc = astAnnul( unc );
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void GetRegionBounds( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     GetRegionBounds
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the current Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     void astGetRegionBounds( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astGetRegionBounds protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the current Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the current Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the Region.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the current Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstNullRegion *this;          /* Pointer to NullRegion structure */
-   int i;                        /* Axis index */
-   int nc;                       /* No. of axes in base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the NullRegion structure */
-   this = (AstNullRegion *) this_region;
-
-/* Get the number of base Frame axes. */
-   nc = astGetNin( this_region->frameset );
-
-/* Set the upper bound less than the lower bound to indicate that the region
-   contains no points. */
-   for( i = 0; i < nc; i++ ) {
-      lbnd[ i ] = 1.0;
-      ubnd[ i ] = -1.0;
-   }
-
-}
-
-static AstPointSet *RegMesh( AstRegion *this, int *status ){
-/*
-*  Name:
-*     RegMesh
-
-*  Purpose:
-*     Return a PointSet containing points spread over the boundary of a 
-*     Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstPointSet *astRegMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astRegMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the current Frame of
-*     the encapsulated FrameSet. Note, a NullRegion has no boundary and
-*     so an error is reported if this function is called.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     NULL pointer.
-
-*  Notes:
-*     - This implementation reports and error and returns NULL since a 
-*     NullRegion has no boundary.
-*-
-*/
-
-   astError( AST__INTER, "astRegMesh(%s): The %s class does not implement "
-             "the astRegMesh method inherited from the Region class "
-             "(internal AST programming error).", status, astGetClass( this ), 
-             astGetClass( this ) );
-   return NULL;
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     NullRegion method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;             /* Current Frame */
-   AstMapping *map;           /* Base->current Mapping */
-   AstMapping *result;        /* Result pointer to return */
-   AstRegion *new;            /* Simplified Region */
-   AstRegion *this;           /* Pointer to supplied Region structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-   new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Is the Mapping from base Frame to current Frame in the Region a
-   UnitMap? If so, no simplification is possible. */
-   map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-   if( astIsAUnitMap( map ) ){
-      result = astClone( new );
-
-   } else {
-
-/* Create a NullRegion from the current Frame. */
-      frm = astGetFrame( new->frameset, AST__CURRENT );
-      result = (AstMapping *) astNullRegion( frm, astGetUnc( new, 0 ), "", status );
-
-/* Free resources. */
-      frm = astAnnul( frm );      
-
-   }
-   map = astAnnul( map );      
-   new = astAnnul( new );      
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-   if( result != this_mapping ) astRegOverlay( result, this, 1 );
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a NullRegion to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     NullRegion member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a NullRegion and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the NullRegion.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the NullRegion.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstNullRegion *this;          /* Pointer to NullRegion */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *p;                    /* Pointer to next axis value */
-   int coord;                    /* Zero-based index for coordinates */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int npoint_out;               /* No. of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the NullRegion structure. */
-   this = (AstNullRegion *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* If the NullRegion has been inverted, it represents an infinite region
-   which includes all points, so just retain the copy of the supplied 
-   PointSet created by the parent Transform method above. If the NullRegion 
-   has not been inverted, it contains no points and so set all output points 
-   bad. */
-   if( !astGetNegated( this ) ) {
-      ncoord_out = astGetNcoord( result );
-      npoint_out = astGetNpoint( result );
-      ptr_out = astGetPoints( result );
-      if ( astOK ) {
-         for ( coord = 0; coord < ncoord_out; coord++ ) {    
-            p = ptr_out[ coord ];
-            for ( point = 0; point < npoint_out; point++ ) {
-               *(p++) = AST__BAD;
-            }
-         }
-      }
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for NullRegion objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the NullRegion class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the NullRegion whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstNullRegion *this;                 /* Pointer to the NullRegion structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the NullRegion structure. */
-   this = (AstNullRegion *) this_object;
-
-/* Write out values representing the instance variables for the
-   NullRegion class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsANullRegion and astCheckNullRegion functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(NullRegion,Region)
-astMAKE_CHECK(NullRegion)
-
-AstNullRegion *astNullRegion_( void *frame_void, AstRegion *unc, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astNullRegion
-f     AST_NULLREGION
-
-*  Purpose:
-*     Create a NullRegion.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "nullregion.h"
-c     AstNullRegion *astNullRegion( AstFrame *frame, AstRegion *unc, const char *options, ... )
-f     RESULT = AST_NULLREGION( FRAME, UNC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     NullRegion constructor.
-
-*  Description:
-*     This function creates a new NullRegion and optionally initialises its
-*     attributes.
-*
-*     A NullRegion is a Region with no bounds. If the Negated attribute of a 
-*     NullRegion is false, the NullRegion represents a Region containing no 
-*     points. If the Negated attribute of a NullRegion is true, the NullRegion 
-*     represents an infinite Region containing all points within the
-*     coordinate system.
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. A deep
-*        copy is taken of the supplied Frame. This means that any
-*        subsequent changes made to the Frame using the supplied pointer
-*        will have no effect the Region.
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with positions in the supplied Frame. 
-*        The uncertainty in any point in the Frame is found by shifting the 
-*        supplied "uncertainty" Region so that it is centred at the point 
-*        being considered. The area covered by the shifted uncertainty 
-*        Region then represents the uncertainty in the position. The 
-*        uncertainty is assumed to be the same for all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty of zero is 
-*        used.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new NullRegion. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new NullRegion. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astNullRegion()
-f     AST_NULLREGION = INTEGER
-*        A pointer to the new NullRegion.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstNullRegion *new;           /* Pointer to new NullRegion */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the NullRegion, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitNullRegion( NULL, sizeof( AstNullRegion ), !class_init, 
-                            &class_vtab, "NullRegion", frame, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new NullRegion's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new NullRegion. */
-   return new;
-}
-
-AstNullRegion *astNullRegionId_( void *frame_void, void *unc_void, 
-                                 const char *options, ... ) {
-/*
-*  Name:
-*     astNullRegionId_
-
-*  Purpose:
-*     Create a NullRegion.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstNullRegion *astNullRegionId_( AstFrame *frame, AstRegion *unc, const char *options, ... )
-
-*  Class Membership:
-*     NullRegion constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astNullRegion constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astNullRegion_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astNullRegion_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astNullRegion_.
-
-*  Returned Value:
-*     The ID value associated with the new NullRegion.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstNullRegion *new;           /* Pointer to new NullRegion */
-   AstRegion *unc;               /* Pointer to Region structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the NullRegion, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitNullRegion( NULL, sizeof( AstNullRegion ), !class_init, 
-                            &class_vtab, "NullRegion", frame, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new NullRegion's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new NullRegion. */
-   return astMakeId( new );
-}
-
-AstNullRegion *astInitNullRegion_( void *mem, size_t size, int init, 
-                                   AstNullRegionVtab *vtab, const char *name, 
-                                   AstFrame *frame, AstRegion *unc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitNullRegion
-
-*  Purpose:
-*     Initialise a NullRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstNullRegion *astInitNullRegion_( void *mem, size_t size, int init, 
-*                                        AstNullRegionVtab *vtab, const char *name, 
-*                                        AstFrame *frame, AstRegion *unc  ) 
-
-*  Class Membership:
-*     NullRegion initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new NullRegion object. It allocates memory (if necessary) to accommodate
-*     the NullRegion plus any additional data associated with the derived class.
-*     It then initialises a NullRegion structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a NullRegion at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the NullRegion is to be initialised.
-*        This must be of sufficient size to accommodate the NullRegion data
-*        (sizeof(NullRegion)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the NullRegion (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the NullRegion
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the NullRegion's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new NullRegion.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     unc
-*        A pointer to a Region which specifies the uncertainty of positions 
-*        within the supplied Frame. A NULL pointer can be supplied, in which 
-*        case default uncertainties of zero are used. If an uncertainty 
-*        Region is supplied, it must be either a Box, a Circle or an Ellipse,
-*        and its encapsulated Frame must be related to the Frame supplied
-*        for parameter "frame" (i.e. astConvert should be able to find a 
-*        Mapping between them). The centre of the supplied uncertainty 
-*        Region is immaterial since it will be re-centred on the point 
-*        being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new NullRegion.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstNullRegion *new;       /* Pointer to new NullRegion */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitNullRegionVtab( vtab, name );
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the NullRegion structure, allocating memory if necessary. */
-   new = (AstNullRegion *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
-                                          name, frame, NULL, unc );
-
-/* If an error occurred, clean up by deleting the new NullRegion. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new NullRegion. */
-   return new;
-}
-
-AstNullRegion *astLoadNullRegion_( void *mem, size_t size, AstNullRegionVtab *vtab, 
-                                   const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadNullRegion
-
-*  Purpose:
-*     Load a NullRegion.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "nullregion.h"
-*     AstNullRegion *astLoadNullRegion( void *mem, size_t size, AstNullRegionVtab *vtab, 
-*                                       const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     NullRegion loader.
-
-*  Description:
-*     This function is provided to load a new NullRegion using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     NullRegion structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a NullRegion at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the NullRegion is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        NullRegion data (sizeof(NullRegion)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the NullRegion (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the NullRegion structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstNullRegion) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new NullRegion. If this is NULL, a pointer
-*        to the (static) virtual function table for the NullRegion class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "NullRegion" is used instead.
-
-*  Returned Value:
-*     A pointer to the new NullRegion.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstNullRegion *new;              /* Pointer to the new NullRegion */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this NullRegion. In this case the
-   NullRegion belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstNullRegion );
-      vtab = &class_vtab;
-      name = "NullRegion";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitNullRegionVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built NullRegion. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "NullRegion" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new NullRegion. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new NullRegion pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/nullregion.h b/ast-5.3-1/nullregion.h
deleted file mode 100644
index 10967b8..0000000
--- a/ast-5.3-1/nullregion.h
+++ /dev/null
@@ -1,221 +0,0 @@
-#if !defined( NULLREGION_INCLUDED ) /* Include this file only once */
-#define NULLREGION_INCLUDED
-/*
-*+
-*  Name:
-*     nullregion.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the NullRegion class.
-
-*  Invocation:
-*     #include "nullregion.h"
-
-*  Description:
-*     This include file defines the interface to the NullRegion class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The NullRegion class implement a Region with no boundaries.
-
-*  Inheritance:
-*     The NullRegion class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     11-OCT-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* NullRegion structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstNullRegion {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-} AstNullRegion;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstNullRegionVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstNullRegionVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstNullRegionGlobals {
-   AstNullRegionVtab Class_Vtab;
-   int Class_Init;
-} AstNullRegionGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitNullRegionGlobals_( AstNullRegionGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(NullRegion)          /* Check class membership */
-astPROTO_ISA(NullRegion)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstNullRegion *astNullRegion_( void *, AstRegion *, const char *, int *, ...);
-#else
-AstNullRegion *astNullRegionId_( void *, AstRegion *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstNullRegion *astInitNullRegion_( void *, size_t, int, AstNullRegionVtab *,
-                                   const char *, AstFrame *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitNullRegionVtab_( AstNullRegionVtab *, const char *, int * );
-
-/* Loader. */
-AstNullRegion *astLoadNullRegion_( void *, size_t, AstNullRegionVtab *,
-                                   const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckNullRegion(this) astINVOKE_CHECK(NullRegion,this,0)
-#define astVerifyNullRegion(this) astINVOKE_CHECK(NullRegion,this,1)
-
-/* Test class membership. */
-#define astIsANullRegion(this) astINVOKE_ISA(NullRegion,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astNullRegion astINVOKE(F,astNullRegion_)
-#else
-#define astNullRegion astINVOKE(F,astNullRegionId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitNullRegion(mem,size,init,vtab,name,frame,unc) \
-astINVOKE(O,astInitNullRegion_(mem,size,init,vtab,name,frame,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitNullRegionVtab(vtab,name) astINVOKE(V,astInitNullRegionVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadNullRegion(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadNullRegion_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckNullRegion to validate NullRegion pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/object.c b/ast-5.3-1/object.c
deleted file mode 100644
index cc820dd..0000000
--- a/ast-5.3-1/object.c
+++ /dev/null
@@ -1,7775 +0,0 @@
-/*
-*class++
-*  Name:
-*     Object
-
-*  Purpose:
-*     Base class for all AST Objects.
-
-*  Constructor Function:
-*     None.
-
-*  Description:
-*     This class is the base class from which all other classes in the
-*     AST library are derived. It provides all the basic Object
-*     behaviour and Object manipulation facilities required throughout
-*     the library. There is no Object constructor, however, as Objects
-*     on their own are not useful.
-
-*  Inheritance:
-*     The Object base class does not inherit from any other class.
-
-*  Attributes:
-*     All Objects have the following attributes:
-*
-*     - Class: Object class name
-*     - ID: Object identification string
-*     - Ident: Permanent Object identification string
-*     - Nobject: Number of Objects in class
-*     - ObjSize: The in-memory size of the Object in bytes
-*     - RefCount: Count of active Object pointers
-*     - UseDefs: Allow use of default values for Object attributes?
-
-*  Functions:
-c     The following functions may be applied to all Objects:
-f     The following routines may be applied to all Objects:
-*
-c     - astAnnul: Annul a pointer to an Object
-c     - astBegin: Begin a new AST context
-c     - astClear: Clear attribute values for an Object
-c     - astClone: Clone a pointer to an Object
-c     - astCopy: Copy an Object
-c     - astDelete: Delete an Object
-c     - astEnd: End an AST context
-c     - astEscapes: Control whether graphical escape sequences are removed
-c     - astExempt: Exempt an Object pointer from AST context handling
-c     - astExport: Export an Object pointer to an outer context
-c     - astGet<X>: Get an attribute value for an Object
-c     - astImport: Import an Object pointer to the current context
-c     - astIsA<Class>: Test class membership
-c     - astLock: Lock an Object for use by the calling thread
-c     - astSame: Do two AST pointers refer to the same Object?
-c     - astSet: Set attribute values for an Object
-c     - astSet<X>: Set an attribute value for an Object
-c     - astShow: Display a textual representation of an Object on standard
-c     output
-c     - astTest: Test if an attribute value is set for an Object
-c     - astTune: Set or get an AST tuning parameter
-c     - astUnlock: Unlock an Object for use by other threads
-c     - astVersion: Return the verson of the AST library being used.
-f     - AST_ANNUL: Annul a pointer to an Object
-f     - AST_BEGIN: Begin a new AST context
-f     - AST_CLEAR: Clear attribute values for an Object
-f     - AST_CLONE: Clone a pointer to an Object
-f     - AST_COPY: Copy an Object
-f     - AST_DELETE: Delete an Object
-f     - AST_END: End an AST context
-f     - AST_ESCAPES: Control whether graphical escape sequences are removed
-f     - AST_EXEMPT: Exempt an Object pointer from AST context handling
-f     - AST_EXPORT: Export an Object pointer to an outer context
-f     - AST_GET<X>: Get an attribute value for an Object
-f     - AST_IMPORT: Import an Object pointer to the current context
-f     - AST_ISA<CLASS>: Test class membership
-f     - AST_SAME: Do two AST pointers refer to the same Object?
-f     - AST_SET: Set attribute values for an Object
-f     - AST_SET<X>: Set an attribute value for an Object
-f     - AST_SHOW: Display a textual representation of an Object on standard
-f     output
-f     - AST_TEST: Test if an attribute value is set for an Object
-f     - AST_TUNE: Set or get an AST tuning parameter
-f     - AST_VERSION: Return the verson of the AST library being used.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     1-FEB-1996 (RFWS):
-*        Original version.
-*     22-APR-1996 (RFWS):
-*        Added attribute setting functions.
-*     2-JUL-1996 (RFWS):
-*        Added functions to support the external interface (using
-*        identfiers).
-*     10-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     30-MAY-1997 (RFWS):
-*        Add ID attribute.
-*     14-JUL-1997 (RFWS):
-*        Add astExempt function.
-*     14-OCT-1997 (RFWS):
-*        Fixed uninitialised use of "dynamic" in astCopy_.
-*     14-NOV-1997 (RFWS):
-*        Remove the subversive C "strtok" function.
-*     20-JAN-1998 (RFWS):
-*        Make the astClear and astRVSet methods virtual.
-*     29-APR-1998 (RFWS):
-*        Fixed bug in algorithm for encoding Object IDs.
-*     15-SEP-1999 (RFWS)
-*        Made astAnnulId accessible from protected code.
-*     12-APR-2000 (DSB):
-*        Zero all memory allocated for a new Object in InitObject before
-*        storing any new values in the memory.
-*     3-APR-2001 (DSB):
-*        Added the Ident attribute. 
-*     28-SEP-2001 (DSB):
-*        Modified VSet to ensure a non-null string always follows the equal 
-*        sign in the attribute setting passed to SetAttrib.
-*     27-NOV-2002 (DSB):
-*        Modified astShow to use astWrite instead of astDump, so that 
-*        invocations of astShow will be included in the count of the 
-*        number of invocations of astWrite returned by astWriteInvocations.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitObjectVtab
-*        method.
-*     8-FEB-2004 (DSB):
-*        Added astEscapes.
-*     10-FEB-2004 (DSB):
-*        Added debug conditional code to keep track of memory leaks.
-*     22-AUG-2004 (DSB):
-*        Added astEqual
-*     27-JAN-2005 (DSB):
-*        Correct use of ->ident pointers, and added further DEBUG blocks.
-*     11-MAR-2005 (DSB):
-*        Added attribute UseDefs.
-*     14-FEB-2006 (DSB):
-*        Added attribute ObjSize.
-*     23-FEB-2006 (DSB):
-*        Added MemoryCaching tuning parameter.
-*     27-FEB-2006 (DSB):
-*        Include Objects returned by astCopy in the ObjectCaching system.
-*     28-FEB-2006 (DSB):
-*        Use astOK to protect against errors within astGrow.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     26-MAY-2006 (DSB):
-*        Correct handling of commas within the attribute value supplied
-*        to astSetC.
-*     30-MAY-2006 (DSB):
-*        Correct the correction made to handle commas within attribute
-*     6-JUN-2007 (DSB):
-*        Fix harmless compiler warnings.
-*     21-JUN-2007 (DSB):
-*        In astSet<X>, ignore trailing spaces in the attribute name.
-*     22-JUN-2007 (DSB):
-*        - Make astVSet return a pointer to dynamic memory holding the 
-*        expanded setting string.
-*        - Add astSetVtab, and astCast.
-*     27-JUN-2007 (DSB):
-*        Modify astInitObject so that it ignores the supplied "size" value
-*        if some memory is supplied.
-*     2-JULY-2007 (DSB):
-*        Fix memory access problem in VSet.
-*     20-SEP-2007 (DSB):
-*        In astDelete, ensure the error status is reset before calling
-*        astGrow to extend the vtab free list.
-*     22-APR-2008 (DSB):
-*        Added astSame.
-*     24-OCT-2008 (DSB):
-*        Prevent a mutex deadlock that could occur when annulling an
-*        Object ID.
-*     28-JAN-2008 (DSB):
-*        Allow unlocked objects to be annulled using astAnnul.
-*     14-OCT-2009 (DSB):
-*        Modify astCast to make it a virtual function and add type 
-*        checking.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Object
-
-#define INVALID_CONTEXT -1   /* Context value for handles that have no
-                                associated Object */
-#define UNOWNED_CONTEXT -2   /* Context value for handles for objects
-                                that are not locked by any thread */
-
-
-/* Include files. */
-/* ============== */
-
-/* Configuration information */
-/* ------------------------ */
-#include "version.h"             /* Version numbers */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "channel.h"             /* I/O channels */
-#include "object.h"              /* Interface definition for this class */
-#include "plot.h"                /* Plot class (for astStripEscapes) */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* The following globals have the same values in all threads and so do
-   not need to be in thread-specific data. */
-/* ------------------------------------------------------------------ */
-
-/* A pointer full of zeros. */
-static AstObject *zero_ptr;   
-
-/* A flag which indicates what should happen when an AST Object is
-   deleted. If this flag is non-zero, the memory used by the Object is
-   not freed, but a pointer to it is placed on the end of a list of free 
-   memory chunk pointers so that the memory can be re-used if necessary
-   avoiding the need to re-allocate memory with malloc (which is slow). 
-   A separate list of free memory chunks is kept for each class because 
-   each class object will require chunks of a different size. Pointers 
-   to these lists are stored in the virtual function table associated 
-   with each class. All memory on these lists is freed when object
-   caching is switched off via the astTune function. */
-static int object_caching = 0;
-
-/* Set up global data access, mutexes, etc, needed for thread safety. */
-#ifdef THREAD_SAFE
-
-/* Define the initial values for the global data for this module. */
-#define GLOBAL_inits \
-   globals->Retain_Esc = 0; \
-   globals->Context_Level = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->AstGetC_Init = 0; \
-   globals->AstGetC_Istr = 0; \
-   globals->Active_Handles = NULL; \
-   globals->Class_Init = 0; \
-   globals->Nvtab = 0; \
-   globals->Known_Vtabs = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Object)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define retain_esc  astGLOBAL(Object,Retain_Esc)
-#define context_level  astGLOBAL(Object,Context_Level)
-#define active_handles  astGLOBAL(Object,Active_Handles)
-#define getattrib_buff  astGLOBAL(Object,GetAttrib_Buff)
-#define astgetc_strings  astGLOBAL(Object,AstGetC_Strings)
-#define astgetc_istr  astGLOBAL(Object,AstGetC_Istr)
-#define astgetc_init  astGLOBAL(Object,AstGetC_Init)
-#define class_init astGLOBAL(Object,Class_Init)
-#define class_vtab astGLOBAL(Object,Class_Vtab)
-#define nvtab astGLOBAL(Object,Nvtab)
-#define known_vtabs astGLOBAL(Object,Known_Vtabs)
-
-/* mutex2 is used to prevent the global lists of object handles being 
-   accessed by more than one thread at any one time.  */
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 );
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* Each Object contains two mutexes. The primary mutex (mutex1) is used
-   to guard access to all aspects of the Object except for the "locker"
-   and "ref_count" items. The secondary mutex (mutex2) is used to guard
-   access to these two remaining items. We need this secondary mutex
-   since the "locker" and "ref_count" items need to be accessable within
-   a thread even if that thread has not locked the Object using astLock.
-   Define macros for accessing these two mutexes. */
-#define LOCK_PMUTEX(this) (pthread_mutex_lock(&((this)->mutex1)))
-#define UNLOCK_PMUTEX(this) (pthread_mutex_unlock(&((this)->mutex1)))
-#define LOCK_SMUTEX(this) (pthread_mutex_lock(&((this)->mutex2)))
-#define UNLOCK_SMUTEX(this) (pthread_mutex_unlock(&((this)->mutex2)))
-
-
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Define the class virtual function table and its initialisation flag as
-   static variables. */
-static int class_init = 0;       /* Virtual function table initialised? */
-static AstObjectVtab class_vtab; /* Virtual function table */
-
-/* A list of pointers to all the known class virtual function tables. */
-static int nvtab = 0;
-static AstObjectVtab **known_vtabs = NULL;
-
-/* A flag which indicates if AST functions which return text strings 
-   should retain any graphical escape sequences (as interpreted by the 
-   Plot class). */ 
-static int retain_esc = 0;
-
-/* Context level (Begin/End/Exempt/Export) */ 
-static int context_level = 0;
-
-/* Array of list heads for each context (each list is a list of Handle
-   structures). */ 
-static int *active_handles = NULL; 
-
-/* String returned by GetAttrib. */ 
-static char getattrib_buff[ AST__GETATTRIB_BUFF_LEN + 1 ] = ""; 
-
-/* Pointers to string buffers returned by astGetC. */ 
-static char *astgetc_strings[ AST__ASTGETC_MAX_STRINGS ]; 
-
-/* Offset of next string in "AstGetC_Strings" */ 
-static int astgetc_istr = 0;          
-
-/* "AstGetC_Strings" array initialised? */ 
-static int astgetc_init = 0;
-
-/* Null macros for mutex locking and unlocking */
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-#define LOCK_PMUTEX(this)
-#define LOCK_SMUTEX(this)
-#define UNLOCK_PMUTEX(this)
-#define UNLOCK_SMUTEX(this)
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static const char *Get( AstObject *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetID( AstObject *, int * );
-static const char *GetIdent( AstObject *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int Same( AstObject *, AstObject *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestID( AstObject *, int * );
-static int TestIdent( AstObject *, int * );
-static unsigned long Magic( const AstObject *, size_t, int * );
-static void CleanAttribs( AstObject *, int * );
-static void Clear( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearID( AstObject *, int * );
-static void ClearIdent( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void EmptyObjectCache( int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetID( AstObject *, const char *, int * );
-static void SetIdent( AstObject *, const char *, int * );
-static void Show( AstObject *, int * );
-static void VSet( AstObject *, const char *, char **, va_list, int * );
-
-static int GetUseDefs( AstObject *, int * );
-static int TestUseDefs( AstObject *, int * );
-static void ClearUseDefs( AstObject *, int * );
-static void SetUseDefs( AstObject *, int, int * );
-
-#if defined(THREAD_SAFE)
-static void ChangeThreadVtab( AstObject *, int * );
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-AstObject *astAnnul_( AstObject *this, int *status ) {
-/*
-*++
-*  Name:
-c     astAnnul
-f     AST_ANNUL
-
-*  Purpose:
-*     Annul a pointer to an Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     AstObject *astAnnul( AstObject *this )
-f     CALL AST_ANNUL( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function annuls a pointer to an Object so that it is no
-f     This routine annuls a pointer to an Object so that it is no
-*     longer recognised as a valid pointer by the AST library. Any
-*     resources associated with the pointer are released and made
-*     available for re-use.
-*
-c     This function also decrements the Object's RefCount attribute by
-f     This routine also decrements the Object's RefCount attribute by
-*     one. If this attribute reaches zero (which happens when the last
-*     pointer to the Object is annulled), then the Object is deleted.
-
-*  Parameters:
-c     this
-c        The Object pointer to be annulled.
-f     THIS = INTEGER (Given and Returned)
-f        The Object pointer to be annulled. A null pointer value (AST__NULL)
-f        is always returned.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-c  Returned Value:
-c     astAnnul()
-c        A null Object pointer (AST__NULL) is always returned.
-c
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-c     - This function will attempt to annul the pointer even if the
-c     Object is not currently locked by the calling thread (see astLock).
-c     - This function attempts to execute even if the AST error
-c     status is set
-f     - This routine attempts to execute even if STATUS is set to an
-f     error value
-*     on entry, although no further error report will be
-*     made if it subsequently fails under these circumstances. In
-*     particular, it will fail if the pointer suppled is not valid,
-*     but this will only be reported if the error status is clear on
-*     entry.
-*--
-*/
-
-/* Check the pointer to ensure it identifies a valid Object (this
-   generates an error if it doesn't). */
-   if ( !astIsAObject( this ) ) return NULL;
-
-/* Get a lock on the object's secondary mutex. This mutex guards access
-   to the "ref_count" and "locker" components of the AstObject structure. */
-   LOCK_SMUTEX(this);
-
-#ifdef MEM_DEBUG
-   {   int rc;
-       char buf[100];
-       rc = this->ref_count;
-       sprintf(buf,"annulled (refcnt: %d -> %d)", rc, rc-1 );
-       astMemoryUse( this, buf );   
-   }
-#endif
-
-/* Decrement the Object's reference count. */
-   --(this->ref_count);
-
-/* Unlock the object's secondary mutex. */
-   UNLOCK_SMUTEX(this);
-
-/* Decrement the Object's reference count and delete the Object if
-   necessary. */
-   if ( !this->ref_count ) (void) astDelete( this );
-
-/* Always return NULL. */
-   return NULL;
-}
-
-static AstObject *Cast( AstObject *this, AstObject *obj, int *status ) {
-/*
-*+
-*  Name:
-*     astCast
-
-*  Purpose:
-*     Cast an Object into an instance of a sub-class.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astCast( AstObject *this, AstObject *obj ) 
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns a deep copy of an ancestral component of the
-*     supplied object. The required class of the ancestral component is
-*     specified by another object. Specifically, if "this" and "new" are 
-*     of the same class, a copy of "this" is returned. If "this" is an 
-*     instance of a subclass of "obj", then a copy of the component
-*     of "this" that matches the class of "obj" is returned. Otherwise, 
-*     a NULL pointer is returned without error.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cast.
-*     obj
-*        Pointer to an Object that defines the class of the returned Object. 
-*        The returned Object will be of the same class as "obj". 
-
-*  Returned Value:
-*     A pointer to the new Object. NULL if "this" is not a sub-class of 
-*     "obj", or if an error occurs.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *new;
-   int generation_gap;
-
-/* Initialise */
-   new = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return new;
-
-/* Check pointer have been supplied. */
-   if( this && obj ) {
-
-/* See how many steps up the class inheritance ladder it is from "this" to 
-   "obj". A positive value is returned if "this" is a sub-class of "obj". 
-   A negative value is returned if "obj" is a sub-class of "this". Zero 
-   is returned if they are of the same class. AST__COUSIN is returned if
-   they share a common ancestor but are not on the same line of descent. */
-      generation_gap = astClassCompare( astVTAB( this ), astVTAB( obj ) );
-
-/* If the two objects are of the same class, just return a copy of
-   "this". */
-      if( generation_gap == 0 ) {
-         new = astCopy( this );
-
-/* If "this" is a subclass of "obj", return a deep copy of "this" cast
-   into the class of "obj". */
-      } else if( generation_gap != AST__COUSIN && generation_gap > 0 ) {
-         new = astCastCopy( this, obj );
-
-      }
-   }
-
-/* Return the new pointer. */
-   return new;
-}
-
-AstObject *astCastCopy_( AstObject *this, AstObject *obj, int *status ) {
-/*
-*+
-*  Name:
-*     astCastCopy
-
-*  Purpose:
-*     Cast an Object into an instance of a sub-class, without type-checking.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astCastCopy( AstObject *this, AstObject *obj ) 
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns a deep copy of an ancestral component of the
-*     supplied object. The required class of the ancestral component is
-*     specified by another object. No checks are performed that "this" is
-*     a sub-class of "obj".
-*
-*     It works by temporarily changing the vtab in "this" to be the same
-*     as in "obj", and then doing a deep copy, and then re-instating the
-*     original vtab.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cast.
-*     obj
-*        Pointer to an Object that defines the class of the returned Object. 
-*        The returned Object will be of the same class as "obj". 
-
-*  Returned Value:
-*     A pointer to the new Object. 
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *new;
-   AstObjectVtab *this_vtab;
-   size_t this_size;
-
-/* Initialise */
-   new = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return new;
-
-/* Check pointer have been supplied. */
-   if( this && obj ) {
-
-/* Save a pointer to the original virtual function tables for "this". */
-      this_vtab = astVTAB( this );
-
-/* Temporarily change the vtab of "this" to that of "obJ". */
-      this->vtab = astVTAB( obj );
-
-/* Temporarily change the size of "this" to be the size of "obj". */
-      this_size = this->size;
-      this->size = obj->size;
-
-/* Now take a copy of the object (now considered to be an instance of the
-   class specified by "obj"). */
-      new = astCopy( this );
-
-/* Re-instate the original Object vtab and size. */
-      this->vtab = this_vtab;
-      this->size = this_size;
-
-/* The sub-clas to which "this" originally belonged may have extended the
-   range of values allowed for one or more of the attributes inherited from
-   the "obj" class. This means that the current attribute values stored
-   in the returned object may be inappropriate for the class of "obj". An
-   example is the System attribute defined by the Frame class, and extended
-   by sub-classes of Frame. So we now call astCleanAttribs to ensure that
-   any inappropriate attribute values are cleared in the returned object. */
-      astCleanAttribs( new );
-   }
-
-/* Return the new pointer. */
-   return new;
-}
-
-#if defined(THREAD_SAFE)
-static void ChangeThreadVtab( AstObject *this, int *status ){
-/*
-*  Name:
-*     ChangeThreadVtab
-
-*  Purpose:
-*     Modify an Object structure so that it refers to a vtab created by
-*     the currently executing thread.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void ChangeThreadVtab( AstObject *this, int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     Each Object structure contains a pointer to a virtual function
-*     table (vtab) that identifies information about the class to
-*     which the Object belongs (function pointers, Object caches, 
-*     etc). In order to avoid use of mutexes (which can slow down AST
-*     applications enormously), each thread has its own set of vtab
-*     structures (one for each AST class) stored in thread-specific 
-*     data. Each time an Object is locked by the currently executing 
-*     thread, this function should be called to change the vtab pointer 
-*     in the Object to refer to the vtab relevant to the currently 
-*     executing thread.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           
-   const char *class;
-   int i;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific data for the currently executing thread. */
-   astGET_GLOBALS(this);
-
-/* Get the class name for the supplied Object. This uses the existing
-   vtab pointer in the Object structure to locate the required GetClass
-   method and the class name. This vtab pointer may be for a vtab created
-   by a different thread to the one currently executing, but this shouldn't
-   matter since we are not modifying the vtab contents. */
-   class = astGetClass( this );
-
-/* Check a class name was obtained */
-   if( class ) {
-
-/* Loop round the vtab structures created by the currently executing thread. */
-      for( i = 0; i < nvtab; i++ ) {
-
-/* If the current vtab is for a class that matches the class of the
-   supplied Object, then store a pointer to the vtab in the Object 
-   structure, and exit. */
-         if( !strcmp( class, known_vtabs[ i ]->class ) ) {
-            this->vtab = known_vtabs[ i ];
-            break; 
-         }
-      }
-   }
-}
-#endif
-
-AstObject *astCheckLock_( AstObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astCheckLock
-
-*  Purpose:
-*     Check that supplied Object is locked by the calling thread.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astCheckLock( AstObject *this ) 
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function reports an error if the supplied object has not
-*     previously been locked (using astLock) by the calling thread.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-
-*  Returned Value:
-*     A copy of the supplied pointer ("this") is returned. The Object
-*     reference count is not changed.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-
-*-
-*/
-
-/* This function does nothing in the non-threads version of libast. */
-#if defined(THREAD_SAFE)
-
-/* Local Variables; */
-   AstObject *fail;
-
-/* Check the supplied pointer. */
-   if( this ) {
-
-/* First use the private ManageLock function rather than the virtual 
-   astManageLock method to check the top level Object is locked for use
-   by the current thread. This saves time and allows a more appropriate
-   error message to be issued. */
-      if( ManageLock( this, AST__CHECKLOCK, 0, NULL, status ) ) {
-         if( astOK ) {
-            astError( AST__LCKERR, "astCheckLock(%s): The supplied %s cannot "
-                      "be used since it is not locked for use by the current "
-                      "thread (programming error).", status, astGetClass( this ),
-                      astGetClass( this ) );
-         }
-
-/* If the top level Object is locked, now use the virtual astManageLock 
-   method to check any objects contained within the top level Object. */
-      } else if( astManageLock( this, AST__CHECKLOCK, 0, &fail ) ) {
-         if( astOK ) {
-            astError( AST__LCKERR, "astCheckLock(%s): The supplied %s cannot "
-                      "be used since a %s contained within the %s is not "
-                      "locked for use by the current thread (programming "
-                      "error).", status, astGetClass( this ), 
-                       astGetClass( this ), astGetClass( fail ), 
-                       astGetClass( this ) );
-         }
-      }
-   }
-#endif
-
-/* Return the supploed pointer. */
-   return this;
-
-}
-
-int astClassCompare_( AstObjectVtab *class1, AstObjectVtab *class2, 
-                      int *status ) {
-/*
-*+
-*  Name:
-*     astClassCompare
-
-*  Purpose:
-*     Determine the relationship between two AST classes.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astClassCompare( AstObjectVtab *class1, AstObjectVtab *class2 )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns the number of steps up the class inheritance 
-*     ladder from the class specified by "class1" to the class specified
-*     by "class2". 
-
-*  Parameters:
-*     class1
-*        Pointer to a virtual function table describing the first AST class.
-*     class2
-*        Pointer to a virtual function table describing the second AST class.
-
-*  Returned Value:
-*     The generation gap between "class1" and "class2". The result will be 
-*     positive if "class1" is a subclass of "class2", negative if "class2" 
-*     is a subclass of "class1", zero if they are of the same class (or
-*     an error occurs), or AST__COUSIN if they are not on the same line 
-*     of descent.
-
-*-
-*/
-
-/* Local Variables: */
-   AstClassIdentifier *class1_id;
-   AstClassIdentifier *class2_id;
-   AstClassIdentifier *id;
-   int *class1_check;    
-   int *class2_check;    
-   int result;                 
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Check pointer have been supplied. */
-   if( class1 && class2 ) {
-
-/* Get pointers to the AstClassIdentifier that identifies the top-level
-   class of each vtab. */
-      class1_id = class1->top_id;
-      class2_id = class2->top_id;
-
-/* Class membership is specified by the "check" value in each class
-   identifier. Get the check values for both vtabs. */
-      class1_check = class1_id->check;
-      class2_check = class2_id->check;
-
-/* Try walking up the class heirarchy of "class1" until the class of 
-   "class2" is reached. The top-level AstObject class has a NULL "parent" 
-   pointer in its class identifier structure. */
-      id = class1_id;
-      while( id && ( id->check != class2_check ) ) {
-         id = id->parent;
-         result++;
-      }
-
-/* If "class1" is not a subclass of "class2", try walking up the class 
-   heirarchy of "class2" until the class of "class1" is reached. */
-      if( !id ) {
-         result = 0;
-         id = class2_id;
-         while( id && ( id->check != class1_check ) ) {
-            id = id->parent;
-            result--;
-         }
-
-/* If "class2" is not a subclass of "class1", return AST__COUSIN. */
-         if( !id ) result = AST__COUSIN;
-      }
-   }
-
-/* Return the generation gap. */
-   return result;
-}
-
-static void CleanAttribs( AstObject *this_object, int *status ) {
-/*
-*+
-*  Name:
-*     astCleanAttribs
-
-*  Purpose:
-*     Clear any invalid set attribute values.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astCleanAttribs( AstObject *this, int *status )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function clears any attributes that are currently set to
-*     invalid values in the supplied object. This can happen for instance
-*     when an object is cast into an instance of a parent class using
-*     astCast, since sub-classes can extend the range of valid values 
-*     an attribute can take.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cleaned.
-*-
-*/
-
-/* The base Object class has no attributes that need cleaning. */
-
-}
-
-static void Clear( AstObject *this, const char *attrib, int *status ) {
-/*
-*++
-*  Name:
-c     astClear
-f     AST_CLEAR
-
-*  Purpose:
-*     Clear attribute values for an Object.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astClear( AstObject *this, const char *attrib )
-f     CALL AST_CLEAR( THIS, ATTRIB, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function clears the values of a specified set of attributes
-f     This routine clears the values of a specified set of attributes
-*     for an Object. Clearing an attribute cancels any value that has
-*     previously been explicitly set for it, so that the standard
-*     default attribute value will subsequently be used instead. This
-c     also causes the astTest function to return the value zero for
-f     also causes the AST_TEST function to return the value .FALSE. for
-*     the attribute, indicating that no value has been set.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object.
-c     attrib
-f     ATTRIB = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing a
-c        comma-separated list of the names of the attributes to be cleared.
-f        A character string containing a comma-separated list of the
-f        names of the attributes to be cleared.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-*     - Attribute names are not case sensitive and may be surrounded
-*     by white space.
-*     - It does no harm to clear an attribute whose value has not been
-*     set.
-*     - An error will result if an attempt is made to clear the value
-*     of a read-only attribute.
-*--
-*/
-
-/* Local Variables: */
-   char *buff;                   /* Pointer to character buffer */
-   char *name;                   /* Pointer to individual attribute name */
-   char *name_end;               /* Pointer to null at end of name */
-   int i;                        /* Loop counter for characters */
-   int j;                        /* Non-blank character count */
-   int len;                      /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the length of the attrib string. */
-   len = (int) strlen( attrib );
-   if ( len != 0 ) {
-
-/* Allocate memory and store a copy of the string. */
-      buff = astStore( NULL, attrib, (size_t) ( len + 1 ) );
-      if ( astOK ) {
-
-/* Loop to process each element in the comma-separated list. */
-         name = buff;
-         while ( name ) {
-
-/* Change the comma at the end of each element to a null to terminate
-   the name. */
-            if ( ( name_end = strchr( name, ',' ) ) ) *name_end = '\0';
-
-/* Remove white space and upper case characters from the attribute
-   name. */
-            for ( i = j = 0; name[ i ]; i++ ) {
-               if ( !isspace( name[ i ] ) ) name[ j++ ] = tolower( name[ i ] );
-            }
-            
-/* Terminate the attribute name and pass it to astClearAttrib to clear
-   the attribute (unless it is all blank, in which case we ignore
-   it). */
-            name[ j ] = '\0';
-            if ( j ) astClearAttrib( this, name );
-
-/* Check for errors and abort if any clear operation fails. Otherwise,
-   process the next attribute. */
-            if ( !astOK ) break;
-            name = name_end ? name_end + 1 : NULL;
-         }
-      }
-
-/* Free the memory allocated for the string buffer. */
-      buff = astFree( buff );
-   }
-}
-
-static void ClearAttrib( AstObject *this, const char *attrib, int *status ) {
-/*
-*+
-*  Name:
-*     astClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for an Object.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astClearAttrib( AstObject *this, const char *attrib )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function clears the value of a specified attribute for an
-*     Object, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-
-*  Notes:
-*     - The Object class does not have any writable attributes, so
-*     this function merely reports an error. It is intended to be
-*     extended by other class definitions.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* ID. */
-/* --- */
-   if ( !strcmp( attrib, "id" ) ) {
-      astClearID( this );
-
-/* Ident. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ident" ) ) {
-      astClearIdent( this );
-
-/* UseDefs. */
-/* -------- */
-   } else if ( !strcmp( attrib, "usedefs" ) ) {
-      astClearUseDefs( this );
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute string matches any of the read-only
-   attributes of this class. If it does, then report an error. */
-   } else if ( !strcmp( attrib, "class" ) ||
-               !strcmp( attrib, "nobject" ) ||
-               !strcmp( attrib, "objsize" ) ||
-               !strcmp( attrib, "refcount" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Since no writable attributes are defined for the Object class, any
-   attempt to clear a value for anything else is also an error. */
-   } else {
-      astError( AST__BADAT, "astClear: The attribute name \"%s\" is invalid "
-               "for a %s.", status, attrib, astGetClass( this ) );
-   }
-}
-
-AstObject *astClone_( AstObject *this, int *status ) {
-/*
-*++
-*  Name:
-c     astClone
-f     AST_CLONE
-
-*  Purpose:
-*     Clone (duplicate) an Object pointer.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     AstObject *astClone( AstObject *this )
-f     RESULT = AST_CLONE( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns a duplicate pointer to an existing
-*     Object. It also increments the Object's RefCount attribute to
-*     keep track of how many pointers have been issued.
-*
-*     Note that this function is NOT equivalent to an assignment
-*     statement, as in general the two pointers will not have the same
-*     value.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Original pointer to the Object.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astClone()
-f     AST_CLONE = INTEGER
-*        A duplicate pointer to the same Object.
-
-*  Applicability:
-*     Object
-*        This function applies to all Objects.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a lock on the object's secondary mutex. This mutex guards access
-   to the "ref_count" and "locker" components of the AstObject structure. */
-   LOCK_SMUTEX(this);
-
-#ifdef MEM_DEBUG
-   {   int rc;
-       char buf[100];
-       rc = this->ref_count;
-       sprintf(buf,"cloned (refcnt: %d -> %d)", rc, rc+1 );
-       astMemoryUse( this, buf );   
-   }
-#endif
-
-/* Increment the Object's reference count. */
-   this->ref_count++;
-
-/* Unlock the object's secondary mutex. */
-   UNLOCK_SMUTEX(this);
-
-/* Return a new pointer to the Object. */
-   return this;
-}
-
-AstObject *astCopy_( const AstObject *this, int *status ) {
-/*
-*++
-*  Name:
-c     astCopy
-f     AST_COPY
-
-*  Purpose:
-*     Copy an Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     AstObject *astCopy( const AstObject *this )
-f     RESULT = AST_COPY( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function creates a copy of an Object and returns a pointer
-*     to the resulting new Object. It makes a "deep" copy, which
-*     contains no references to any other Object (i.e. if the original
-*     Object contains references to other Objects, then the actual
-*     data are copied, not simply the references). This means that
-*     modifications may safely be made to the copy without indirectly
-*     affecting any other Object.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object to be copied.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astCopy()
-f     AST_COPY = INTEGER
-*        Pointer to the new Object.
-
-*  Applicability:
-*     Object
-*        This function applies to all Objects.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstObject *new;               /* Pointer to new object */
-   AstObjectVtab *vtab;          /* Pointer to object vtab */
-   int i;                        /* Loop counter for copy constructors */
-
-/* Initiallise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Re-use cached memory, or allocate new memory using the size of the input 
-   object, to store the output Object. */
-
-   vtab = this->vtab;
-   if( object_caching ){
-
-      if( vtab->nfree > 0 ) {
-         new = vtab->free_list[ --(vtab->nfree) ];
-         vtab->free_list[ vtab->nfree ] = NULL;
-      } else {
-         new = astMalloc( this->size );
-      }
-
-   } else {
-      new = astMalloc( this->size );
-   }
-
-   if ( astOK ) {
-
-/* Perform an initial byte-by-byte copy of the entire object
-   structure. */
-      (void) memcpy( (void *) new, (const void *) this, this->size );
-
-/* Initialise any components of the new Object structure that need to
-   differ from the input. */
-      new->check = Magic( new, new->size, status );
-      new->dynamic = 1;
-      new->ref_count = 1;
-      new->id = NULL;   /* ID attribute is not copied (but Ident is copied) */
-
-/* Copy the persistent identifier string. */
-      if( this->ident ) {
-         new->ident = astStore( NULL, this->ident, strlen( this->ident ) + 1 );
-      }
-
-/* Create a new mutex for the new Object, and lock it for use by the
-   current thread. */
-#ifdef THREAD_SAFE
-      if( pthread_mutex_init( &(new->mutex1), NULL ) != 0 && astOK ) {
-         astError( AST__INTER, "astInitObject(%s): Failed to "
-                   "initialise POSIX mutex1 for the new Object.", status, 
-                   vtab->class );
-      }
-      if( pthread_mutex_init( &(new->mutex2), NULL ) != 0 && astOK ) {
-         astError( AST__INTER, "astInitObject(%s): Failed to "
-                   "initialise POSIX mutex2 for the new Object.", status, 
-                   vtab->class );
-      }
-      new->locker = -1;
-      new->globals = NULL;
-      (void) ManageLock( new, AST__LOCK, 0, NULL, status );
-#endif
-
-/* Loop to execute any copy constructors declared by derived classes. */
-      for ( i = 0; i < vtab->ncopy; i++ ) {
-
-/* Invoke each copy constructor in turn. */
-         (*vtab->copy[ i ])( this, new, status );
-
-/* If any copy constructor fails, work backwards through the
-   corresponding destructor functions, invoking each in turn to undo
-   the copy operations that have been completed so far. */
-         if ( !astOK ) {
-            for ( ; i >= 0; i-- ) {
-               (*vtab->delete[ i ])( new, status );
-            }
-
-/* Zero the entire new Object structure (to prevent accidental re-use
-   of any of its values after deletion). */
-            (void) memset( new, 0, new->size );
-
-/* Free the Object's memory and ensure that a NULL pointer will be
-   returned. */
-            new = astFree( new );
-
-/* Quit trying to copy the Object. */
-            break;
-         }
-      }
-   }
-
-/* If OK, increment the count of active objects. */
-   if ( astOK ) vtab->nobject++;
-
-/* Return a pointer to the new Object. */
-   return new;
-}
-
-AstObject *astDelete_( AstObject *this, int *status ) {
-/*
-*++
-*  Name:
-c     astDelete
-f     AST_DELETE
-
-*  Purpose:
-*     Delete an Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     AstObject *astDelete( AstObject *this )
-f     CALL AST_DELETE( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function deletes an Object, freeing all resources
-f     This routine deletes an Object, freeing all resources
-*     associated with it and rendering any remaining pointers to the
-*     Object invalid.
-*
-*     Note that deletion is unconditional, regardless of whether other
-*     pointers to the Object are still in use (possibly within other
-*     Objects). A safer approach is to defer deletion, until all
-c     references to an Object have expired, by using astBegin/astEnd
-c     (together with astClone and astAnnul if necessary).
-f     references to an Object have expired, by using AST_BEGIN/AST_END
-f     (together with AST_CLONE and AST_ANNUL if necessary).
-
-*  Parameters:
-c     this
-c        Pointer to the Object to be deleted.
-f     THIS = INTEGER (Given and Returned)
-f        Pointer to the Object to be deleted. A null pointer value
-f        (AST__NULL) is always returned.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-c  Returned Value:
-c     astDelete()
-c        A null Object pointer (AST__NULL) is always returned.
-c
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-c     - This function attempts to execute even if the AST error status
-c     is set
-f     - This routine attempts to execute even if STATUS is set to an error
-f     value
-*     on entry, although no further error report will be
-*     made if it subsequently fails under these circumstances.
-*--
-*/
-
-/* Local Variables: */
-   AstObjectVtab *vtab;          /* Pointer to virtual function table */
-   int dynamic;                  /* Was memory allocated dynamically? */
-   int i;                        /* Loop counter for destructors */
-   int ifree;                    /* Index of next slot on free list */
-   int status_value;             /* AST error status value */
-   size_t size;                  /* Object size */
-
-/* Check the pointer to ensure it identifies a valid Object (this
-   generates an error if it doesn't). */
-   if ( !astIsAObject( this ) ) return NULL;
-
-/* Loop through all the destructors associated with the Object by derived
-   classes (working up the class hierarchy). */
-   for ( i = this->vtab->ndelete - 1; i >= 0; i-- ) {
-
-/* Invoke each destructor in turn. Attempt to continue even if destructors
-   fail. */
-      ( *this->vtab->delete[ i ] )( this, status );
-   }
-
-/* Free the ID strings. */
-   this->id = astFree( this->id );
-   this->ident = astFree( this->ident );
-
-/* Attempt to unlock the Object and destroy its mutexes. */
-#if defined(THREAD_SAFE)
-   (void) ManageLock( this, AST__UNLOCK, 0, NULL, status );
-   pthread_mutex_destroy( &(this->mutex1) );
-   pthread_mutex_destroy( &(this->mutex2) );
-#endif
-
-/* Save the virtual function table address and note if the Object's
-   memory was allocated dynamically. Also note its size. */
-   vtab = this->vtab;
-   dynamic = this->dynamic;
-   size = this->size;
-
-/* Zero the entire Object structure (to prevent accidental re-use of
-   any of its values after deletion). */
-   (void) memset( this, 0, size );
-
-/* If necessary, free the Object's memory. If object caching is switched
-   on, the memory is not in fact freed; it is merely placed onto the end 
-   of the list of free memory blocks included in the virtual function table 
-   of the AST class concerned. astGrow returns immediately if an error
-   has already occurred, so we need to reset the error status explicitly
-   before calling astGrow. */
-   if ( dynamic ) {
-      if( object_caching ) {
-         ifree = (vtab->nfree)++;
-
-         status_value = astStatus;
-         astClearStatus;
-         vtab->free_list = astGrow( vtab->free_list, vtab->nfree, 
-                                    sizeof(AstObject *) );
-         astSetStatus( status_value );
-
-         if( vtab->free_list ) vtab->free_list[ ifree ] = this;
-      } else {
-         (void) astFree( this );
-      }
-   }
-
-/* Decrement the count of active Objects. */
-   vtab->nobject--;
-
-/* Always return NULL. */
-   return NULL;
-}
-
-static void Dump( AstObject *this, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astDump
-
-*  Purpose:
-*     Write an Object to a Channel.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astDump( AstObject *this, AstChannel *channel )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function writes an Object to a Channel, appending it to any
-*     previous Objects written to that Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be written.
-*     channel
-*        Pointer to the output Channel.
-*-
-*/
-
-/* Local Variables: */
-   AstObjectVtab *vtab;          /* Pointer to virtual function table */
-   const char *sval;             /* Pointer to string value */
-   int helpful;                  /* Helpful to show value even if not set? */
-   int idump;                    /* Loop counter for dump functions */
-   int ival;                     /* Attribute value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Write an initial "Begin" item, giving the class name of the Object
-   being written. Also supply a pointer to the comment associated with
-   the most recently-declared dump function in the Object's virtual
-   function table. This should describe the class to which the Object
-   belongs (assuming it has correctly declared its dump function). */
-   astWriteBegin( channel, astGetClass( this ),
-                  this->vtab->dump_comment[ this->vtab->ndump - 1 ] );
-
-/* Write out instance variable information for the base Object
-   class. Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* ID. */
-/* --- */
-   set = TestID( this, status );
-   sval = set ? GetID( this, status ) : astGetID( this );
-
-/* Don't show an un-set ID value if it is blank. */
-   helpful = ( sval && *sval );
-   astWriteString( channel, "ID", set, helpful, sval,
-                   "Object identification string" );
-
-/* Ident. */
-/* --- */
-   set = TestIdent( this, status );
-   sval = set ? GetIdent( this, status ) : astGetIdent( this );
-
-/* Don't show an un-set Ident value if it is blank. */
-   helpful = ( sval && *sval );
-   astWriteString( channel, "Ident", set, helpful, sval,
-                   "Permanent Object identification string" );
-
-/* UseDefs */
-/* ------- */
-   set = TestUseDefs( this, status );
-   ival = set ? GetUseDefs( this, status ) : astGetUseDefs( this );
-   astWriteInt( channel, "UseDfs", set, 0, ival,
-                ival ? "Default attribute values can be used" :
-                       "Default values cannot be used" );
-
-/* RefCnt. */
-/* ------- */
-   LOCK_SMUTEX(this);
-   ival = this->ref_count;
-   UNLOCK_SMUTEX(this);
-
-   astWriteInt( channel, "RefCnt", 0, 0, ival,
-                "Count of active Object pointers" );
-
-
-/* Nobj. */
-/* ----- */
-   vtab = this->vtab;
-   astWriteInt( channel, "Nobj", 0, 0, vtab->nobject,
-                "Count of active Objects in same class" );
-
-/* Terminate the information above with an "IsA" item for the base
-   Object class. */
-   astWriteIsA( channel, "Object", "AST Object" );
-
-/* Now loop to perform the same operation for each additional class
-   from which the Object inherits (the Object class itself does not
-   declare a dump function). Invoke the dump function for each class
-   in turn, working down the class hierarchy, to write out instance
-   variable information for that class. */
-   for ( idump = 0; idump < this->vtab->ndump; idump++ ) {
-      ( *this->vtab->dump[ idump ] )( this, channel, status );
-
-/* Terminate the output from all except the final dump function with
-   an appropriate "IsA" item describing the class whose data have just
-   been written. */
-      if ( idump != ( this->vtab->ndump - 1 ) ) {
-         astWriteIsA( channel, this->vtab->dump_class[ idump ],
-                      this->vtab->dump_comment[ idump ] );
-      }
-
-/* Quit looping if an error occurs. */
-      if ( !astOK ) break;
-   }
-
-/* Terminate the output from the final dump function with an "End"
-   item to match the initial "Begin" item. */
-   astWriteEnd( channel, astGetClass( this ) );
-}
-
-static void EmptyObjectCache( int *status ){
-/*
-*  Name:
-*     EmptyObjectCache
-
-*  Purpose:
-*     Free all memory blocks currently on the free list of any class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     EmptyObjectCache( int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function empties the cache of Object memory by freeing all
-*     memory blocks on the free_list of all classes.
-
-*  Parameters:
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has occurred.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS    /* Thread-specific global data */
-   int iblock;           /* Index of next entry in free list */
-   int itab;             /* Index of next virtual function table */
-   AstObjectVtab *vtab;  /* Pointer to next virtual function table */
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Loop round all the virtual function tables which are known about. */
-   for( itab = 0; itab < nvtab; itab++ ) {
-      vtab = known_vtabs[ itab ];
-
-/* Free all memory blocks stored on the free list for this class. */
-      for( iblock = 0; iblock < vtab->nfree; iblock++ ) {
-         (vtab->free_list)[ iblock ] = astFree( (vtab->free_list)[ iblock ] );
-      }
-
-/* Free the memory used to hold the free list, and indicate it has zero
-   length. */
-      vtab->free_list = astFree( vtab->free_list );
-      vtab->nfree = 0;
-   }
-}
-
-static int Equal( AstObject *this, AstObject *that, int *status ){
-/*
-*+
-*  Name:
-*     astEqual 
-
-*  Purpose:
-*     Check equality of two AST Objects.
-
-*  Type:
-*     Public (but undocumented) function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astEqual( AstObject *this, AstObject *this )
-
-*  Class Membership:
-*     Object virtual function.
-
-*  Description:
-*     This function returns non-zero if the two pointers identify
-*     equivalent objects.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object.
-*     that
-*        Pointer to the second Object.
-
-*  Returned Value:
-*     Non-zero if the objects are equivalent.
-
-*  Notes:
-*    - This function is available in the public interface even though it is 
-*    documented as protected. This is because it is difficult to document
-*    precisely which aspects of two Objects must be equal in order for this
-*    function to return a non-zero value. Each class of Object supplies
-*    its own Equal method that tests which-ever attributes the class
-*    considers to be significiant.
-*    - The implementation of this function provided by the base Object
-*    class simply compares the class names and the structure size.
-*    Sub-classes should override this method to provide more appropriate tests.
-*    - Zero is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
-   int result;
-
-/* Check inherited status */
-   if( !astOK ) return 0;
-
-/* Objects are equivalent if they are the same object. */
-   if( this == that ) {
-      result = 1;
-
-/* Otherwise, check the structure size and class names */
-   } else {
-      result = ( this->size == that->size &&
-                 !strcmp( astGetClass( this ), astGetClass( that ) ) );
-   }
-                 
-   return result;
-}
-
-static const char *Get( AstObject *this, const char *attrib, int *status ) {
-/*
-*  Name:
-*     Get
-
-*  Purpose:
-*     Get the value of a specified attribute for an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     const char *Get( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for an Object, formatted as a character string. It is
-*     mainly a wrap-up used internally for invoking the astGetAttrib
-*     method. It converts the attribute name to lower case and removes
-*     white space before invoking the method. This saves derived
-*     classes that over-ride the astGetAttrib method from having to do
-*     this themselves.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This may contain mixed
-*        case and white space, but should not be composed entirely of
-*        white space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Object, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Object. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   char *buff;                   /* Pointer to local string buffer */
-   const char *result;           /* Pointer value to return */
-   int i;                        /* Loop counter for characters */
-   int j;                        /* Non-blank character count */
-   
-/* Initialise. */
-   result = NULL;   
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-   
-/* Allocate a local buffer long enough to hold the attribute name
-   string. */
-   buff = astMalloc( strlen( attrib ) + (size_t) 1 );
-   if ( astOK ) {
-
-/* Copy the attribute name characters into the buffer, omitting all
-   white space and converting to lower case. */
-      for ( i = j = 0; attrib[ i ]; i++ ) {
-         if ( !isspace( attrib[ i ] ) ) buff[ j++ ] = tolower( attrib[ i ] );
-      }
-
-/* Terminate the copied string. */
-      buff[ j ] = '\0';
-
-/* If no characters were copied, the attribute name was blank, so
-   report an error. */
-      if ( !j ) {
-         if( astOK ) astError( AST__BADAT, "astGet(%s): A blank attribute "
-                               "name was given.", status, astGetClass( this ) );
-
-/* Of OK, invoke astGetAttrib to obtain a pointer to the attribute
-   value formatted as a character string. */
-      } else {
-         result = astGetAttrib( this, buff );
-
-/* If required, strip out graphical escape sequences. */
-         if( !astEscapes( -1 ) ) result = astStripEscapes( result );
-      }
-   }
-
-/* Free the local string buffer. */
-   buff = astFree( buff );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this, const char *attrib, int *status ) {
-/*
-*+
-*  Name:
-*     astGetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for an Object.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     const char *astGetAttrib( AstObject *this, const char *attrib )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for an Object, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Object, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Object. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   const char *result;           /* Pointer value to return */
-   int nobject;                  /* Nobject attribute value */
-   int objsize;                  /* ObjSize attribute value */
-   int ref_count;                /* RefCount attribute value */
-   int usedefs;                  /* UseDefs attribute value */
-  
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(this);
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an 
-   appropriate format.  Set "result" to point at the result string. */
-
-/* Class. */
-/* ------ */
-   if ( !strcmp( attrib, "class" ) ) {
-      result = astGetClass( this );
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      result = astGetID( this );
-
-/* Ident. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ident" ) ) {
-      result = astGetIdent( this );
-
-/* UseDefs */
-/* ------- */
-   } else if ( !strcmp( attrib, "usedefs" ) ) {
-      usedefs = astGetUseDefs( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", usedefs );
-         result = getattrib_buff;
-      }
-
-/* Nobject. */
-/* -------- */
-   } else if ( !strcmp( attrib, "nobject" ) ) {
-      nobject = astGetNobject( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", nobject );
-         result = getattrib_buff;
-      }
-
-/* ObjSize */
-/* ------- */
-   } else if ( !strcmp( attrib, "objsize" ) ) {
-      objsize = astGetObjSize( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", objsize );
-         result = getattrib_buff;
-      }
-
-/* RefCount. */
-/* --------- */
-   } else if ( !strcmp( attrib, "refcount" ) ) {
-      ref_count = astGetRefCount( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ref_count );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, then report an error. */
-   } else if( astOK ){
-      astError( AST__BADAT, "astGet: The %s given does not have an attribute "
-                "called \"%s\".", status, astGetClass( this ), attrib );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-const char *astGetClass_( const AstObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetClass
-
-*  Purpose:
-*     Obtain the value of the Class attribute for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     const char *astGetClass( const AstObject *this )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns a pointer to the Class string for an
-*     Object. This contains the name of the class which created the
-*     Object.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-
-*  Returned Value:
-*     Pointer to a string containing the class name.
-
-*  Notes:
-*     - This function does not check the global error status before
-*     executing.  This is to allow it to be used to obtain class names
-*     for inclusion in error messages.
-*     - A pointer to an explanatory string will be returned if this
-*     function is given a pointer which does not identify an Object.
-*-
-*/
-
-/* Local Variables: */
-   const char *name;             /* Pointer to returned string */
-
-/* First check if the Object pointer supplied is NULL, and set the
-   returned pointer accordingly. */
-   if ( !this ) {
-      name = "<NULL>";
-
-/* Also check if the supposed Object has the correct "magic number" in
-   its check field. If not, it is not an Object. */
-   } else if ( this->check != Magic( this, this->size, status ) ) {
-      name = "<unknown>";
-
-/* If OK, obtain a pointer to the class name from the Object's virtual
-   function table. */
-   } else {
-      name = this->vtab->class;
-   }
-
-/* Return the result. */
-   return name;
-}
-
-int astGetNobject_( const AstObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNobject
-
-*  Purpose:
-*     Obtain the value of the Nobject attribute for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astGetNobject( const AstObject *this )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns the value of the Nobject attribute for an
-*     Object. This is a count of the number of active Objects in the
-*     same class as the Object supplied. This count does not include
-*     Objects in derived classes.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-
-*  Returned Value:
-*     The number of active Objects.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the active object count. */
-   return this->vtab->nobject;
-}
-
-static int GetObjSize( AstObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetObjSize
-
-*  Purpose:
-*     Determine the in-memory size of the Object.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astGetObjSize( AstObject *this )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns the in-memory size of an Object.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the object size. */
-   return this->size;
-}
-
-int astGetRefCount_( AstObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetRefCount
-
-*  Purpose:
-*     Obtain the value of the RefCount attribute for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astGetRefCount( const AstObject *this )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns the value of the read-only RefCount
-*     attribute for an Object. This is a "reference count" of the
-*     number of active pointers to it, as accounted for by astClone
-*     and astAnnul (plus the pointer issued when it was created).  If
-*     the reference count for an Object falls to zero when astAnnul is
-*     invoked, the object will be deleted.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-
-*  Returned Value:
-*     The reference count.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables; */
-   int result;          /* Returned value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Get a lock on the object's secondary mutex. This mutex guards access
-   to the "ref_count" and "locker" components of the AstObject structure. */
-   LOCK_SMUTEX(this);
-
-/* Get the reference count. */
-   result = this->ref_count;
-
-/* Unlock the object's secondary mutex. */
-   UNLOCK_SMUTEX(this);
-
-/* Return the result. */
-   return result;
-}
-
-/*
-*++
-*  Name:
-c     astGet<X>
-f     AST_GET<X>
-
-*  Purpose:
-*     Get an attribute value for an Object.
-
-*  Type:
-*     Public functions.
-
-*  Synopsis:
-c     #include "object.h"
-c     <X>type astGet<X>( AstObject *this, const char *attrib )
-f     RESULT = AST_GET<X>( THIS, ATTRIB, STATUS )
-
-*  Class Membership:
-*     Object methods.
-
-*  Description:
-*     This is a family of functions which return a specified attribute
-*     value for an Object using one of several different data
-*     types. The type is selected by replacing <X> in the function name
-c     by C, D, F, I or L, to obtain a result in const char* (i.e. string),
-c     double, float, int, or long format, respectively.
-f     by C, D, I, L or R, to obtain a result in Character, Double
-f     precision, Integer, Logical or Real format, respectively.
-*
-*     If possible, the attribute value is converted to the type you
-*     request. If conversion is not possible, an error will result.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object.
-c     attrib
-f     ATTRIB = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing the name of
-c        the attribute whose value is required.
-f        A character string containing the name of the attribute whose
-f        value is required.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGet<X>()
-f     AST_GET<X> = <X>type
-c        The attribute value, in the data type corresponding to <X> (or,
-c        in the case of astGetC, a pointer to a constant null-terminated
-c        character string containing this value).
-f        The attribute value, in the data type corresponding to <X>.
-
-*  Applicability:
-*     Object
-*        These functions apply to all Objects.
-
-*  Examples:
-c     printf( "RefCount = %d\n", astGetI( z, "RefCount" ) );
-c        Prints the RefCount attribute value for Object "z" as an int.
-c     title = astGetC( axis, "Title" );
-c        Obtains a pointer to a null-terminated character string containing
-c        the Title attribute of Object "axis".
-f     WRITE( *, '('' RefCount = '', A10 )' ) AST_GETC( Z, 'RefCount', STATUS )
-f        Prints the RefCount attribute value for Object Z as a character
-f        string.
-f     NAXES = AST_GETI( FRAME, 'Naxes', STATUS )
-f        Obtains the value of the Naxes attribute for Object FRAME as an
-f        integer.
-
-*  Notes:
-*     - Attribute names are not case sensitive and may be surrounded
-*     by white space.
-*     - An appropriate "null" value will be returned if this function
-c     is invoked with the AST error status set, or if it should
-f     is invoked with STATUS set to an error value, or if it should
-*     fail for any reason. This null value is zero for numeric
-c     values and NULL for pointer values.
-f     values, .FALSE. for logical values, and blank for character values.
-f     - Numerical attribute values of zero translate to logical value
-f     .FALSE. and all other numerical values translate to .TRUE..
-c     - The pointer returned by astGetC is guaranteed to remain valid
-c     and the string to which it points will not be over-written for a
-c     total of 50 successive invocations of this function. After this,
-c     the memory containing the string may be re-used, so a copy of
-c     the string should be made if it is needed for longer than this.
-*--
-*/
-
-/* Define a macro that expands to implement the astGetX_ member
-   functions required. The arguments to this macro are:
-
-      code
-         The character that appears at the end of the function name.
-      type
-         The C type of the function return value.
-      format
-         A quoted string containing a astSscanf format specifier that
-         will read the attribute value into a variable of the required
-         data type. This format should transfer 1 astSscanf value.
-*/
-#define MAKE_GETX(code,type,format) \
-type astGet##code##_( AstObject *this, const char *attrib, int *status ) { \
-\
-/* Local Variables: */ \
-   const char *str;              /* Pointer to string attribute value */ \
-   int nc;                       /* Number of characters read from string */ \
-   int nval;                     /* Number of values read from string */ \
-   type result;                  /* Value to return */ \
-   type value;                   /* Converted value */ \
-\
-/* Initialise. */ \
-   result = (type) 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Obtain the attribute value as a string. */ \
-   str = Get( this, attrib, status ); \
-   if ( astOK ) { \
-\
-/* Read the value from the string, ignoring surrounding white \
-   space. */ \
-      nc = 0; \
-      nval = astSscanf( str, " " format " %n", &value, &nc ); \
-\
-/* Check that the number of values read was 1 and that all the \
-   string's characters were consumed. If so, use the result. */ \
-      if ( ( nval == 1 ) && ( nc >= (int) strlen( str ) ) ) { \
-         result = value; \
-\
-/* If the read was unsuccessful, report an error. */ \
-      } else if( astOK ) { \
-         astError( AST__ATGER, "astGet" #code "(%s): The attribute " \
-                   "value \"%s=%s\" cannot be read using the requested data " \
-                   "type.", status,astGetClass( this ), attrib, str ); \
-      } \
-   } \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Use this macro to create all the GetX_ private member functions,
-   except SetC (which is handled separately). */
-MAKE_GETX(D,double,"%lf")
-MAKE_GETX(F,float,"%f")
-MAKE_GETX(I,int,"%d")
-MAKE_GETX(L,long,"%ld")
-
-/* Handle GetC separately because memory must be allocated to hold the
-   returned character values. */
-const char *astGetC_( AstObject *this, const char *attrib, int *status ) {
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   const char *result;           /* Pointer value to return */
-   const char *value;            /* Pointer to attribute value */
-   int i;                        /* Loop count */
-  
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(this);
-
-/* If the "strings" array has not been initialised, fill it with
-   NULL pointers. */
-   if ( !astgetc_init ) {
-      astgetc_init = 1;
-      for ( i = 0; i < AST__ASTGETC_MAX_STRINGS; i++ ) astgetc_strings[ i ] = NULL;
-   }
-
-/* Obtain a pointer to the required attribute value, formatted as a
-   character string. */
-   value = Get( this, attrib, status );
-
-/* If OK, store a copy of the resulting string in dynamically
-   allocated memory, putting a pointer to the copy into the next
-   element of the "astgetc_strings" array.  (This process also de-allocates
-   any previously allocated memory pointed at by this "strings"
-   element, so the earlier string is effectively replaced by the new
-   one.) */
-   if ( astOK ) {
-
-      astBeginPM;
-      astgetc_strings[ astgetc_istr ] = astStore( astgetc_strings[ astgetc_istr ], 
-                                             value, strlen( value ) + (size_t) 1 );
-      astEndPM;
-
-/* If OK, return a pointer to the copy and increment "astgetc_istr" to use the
-   next element of "astgetc_strings" on the next invocation. Recycle
-   "astgetc_istr" to zero when all elements have been used. */
-      if ( astOK ) {
-         result = astgetc_strings[ astgetc_istr++ ];
-         if ( astgetc_istr == ( AST__ASTGETC_MAX_STRINGS - 1 ) ) astgetc_istr = 0;
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static unsigned long Magic( const AstObject *this, size_t size, int *status ) {
-/*
-*  Name:
-*     Magic
-
-*  Purpose:
-*     Generate a "magic number" for an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     unsigned long Magic( const AstObject *this, size_t size, int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function generates a "magic number" which is a function of an Object
-*     pointer (address) and an Object size. This number may be stored in an
-*     Object to allow it to be recognised as a valid Object by other routines
-*     and to provide security against argument passing errors, etc.
-
-*  Parameters:
-*     this
-*        Pointer to an Object.
-*     size
-*        The Object size.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The magic number.
-
-*  Notes:
-*     -  This function does not perform any error checking.
-*/
-
-/* Form the bit-wise exclusive OR between the Object address and the Object
-   size, then add 2 and invert the bits. Return the result as an unsigned
-   long integer. */
-   return ~( ( ( (unsigned long) this ) ^ ( (unsigned long) size ) ) +
-             ( (unsigned long) 2 ) );
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*+
-*  Name:
-*     astManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astManageLock( AstObject *this, int mode, int extra, 
-*                        AstObject **fail ) 
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread.
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-
-*  Returned Value:
-*     A status value:
-*        0 - Success.
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-*        5 - Check failed - object is locked by a different thread
-*        6 - Check failed - object is unlocked 
-*     
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result = 0;
-   if( fail ) *fail = NULL;
-
-/* Check the supplied point is not NULL. */
-   if( ! this ) return result;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Get a lock on the object's secondary mutex. This gives us exclusive
-   access to the "locker" (and "ref_count") component in the AstObject 
-   structure. All other components in the structure are guarded by the
-   primary mutex (this->mutex1). */
-   if( LOCK_SMUTEX(this) ) {
-      result = 2;
-
-/* If the secondary mutex was locked succesfully, first deal with cases
-   where the caller wants to lock the Object for exclusive use by the 
-   calling thread. */
-   } else if( mode == AST__LOCK ) {
-
-/* If the Object is not currently locked, lock the Object primary mutex 
-   and record the identity of the calling thread in the Object. */
-      if( this->locker == -1 ) {
-         if( LOCK_PMUTEX(this) ) result = 2;
-         this->locker = AST__THREAD_ID;
-         this->globals = AST__GLOBALS;
-         ChangeThreadVtab( this, status );
-
-/* If the Object is already locked by the calling thread, do nothing. */
-      } else if( this->locker == AST__THREAD_ID ) {
-
-/* If the object is locked by a different thread, and the caller is
-   willing to wait, attempt to lock the Object primary mutex. This will 
-   cause the calling thread to block until the Object is release by the
-   thread that currently has it locked. Then store the identity of the 
-   calling thread (the new lock owner). We first need to release the 
-   secondary mutex so that the other thread can modify the "locker" 
-   component in the AstObject structure when it releases the Object 
-   (using this function). We then re-lock the secondary mutex so this
-   thread can change the "locker" component safely. */
-      } else if( extra ) {
-         if( UNLOCK_SMUTEX(this) ) {
-            result = 3;
-         } else if( LOCK_PMUTEX(this) ) {
-            result = 2;
-         } else if( LOCK_SMUTEX(this) ) {
-            result = 2;
-         } 
-         this->locker = AST__THREAD_ID;
-         this->globals = AST__GLOBALS;
-         ChangeThreadVtab( this, status );
-      
-/* If the caller does not want to wait until the Object is available,
-   return a status of 1. */
-      } else {
-         result = 1;
-      }
-   
-/* Unlock the Object for use by other threads. */
-   } else if( mode == AST__UNLOCK ) {
-
-/* Do nothing if the Object is currently unlocked. */
-      if( this->locker == -1 ) {
-
-/* If the object is currently locked by the calling thread, clear the
-   identity of the thread that owns the lock and unlock the primary 
-   mutex. */
-      } else if( this->locker == AST__THREAD_ID ) {
-         this->locker = -1;
-         this->globals = NULL;
-         if( UNLOCK_PMUTEX(this) ) result = 3;
-
-/* Return an error status value if the Object is locked by another
-   thread. */
-      } else {
-         result = 1;
-      }
-
-/* Check the Object is locked by the calling thread. Return a status of 1 if
-   not. */
-   } else if( mode == AST__CHECKLOCK ) {
-      if( this->locker == -1 ) {
-         result = 6;
-      } else if( this->locker != AST__THREAD_ID ) {
-         result = 5;
-      }
-   
-/* Return a status of 4 for any other modes. */
-   } else {
-      result = 4;
-   } 
-
-/* Unlock the secondary mutex so that other threads can access the "locker"
-   component in the Object to see if it is locked. */
-   if( UNLOCK_SMUTEX(this) ) result = 3;
-
-/* If the operation failed, return a pointer to the failed object. */
-   if( result && fail ) *fail = this;
-
-/* Return the status value */
-   return result;
-}
-#endif
-
-void astSet_( void *this_void, const char *settings, int *status, ... ) {
-/*
-*++
-*  Name:
-c     astSet
-f     AST_SET
-
-*  Purpose:
-*     Set attribute values for an Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astSet( AstObject *this, const char *settings, ... )
-f     CALL AST_SET( THIS, SETTINGS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function assigns a set of attribute values to an Object,
-f     This routine assigns a set of attribute values to an Object,
-*     over-riding any previous values. The attributes and their new
-*     values are specified via a character string, which should
-*     contain a comma-separated list of the form:
-*
-*        "attribute_1 = value_1, attribute_2 = value_2, ... "
-*
-*     where "attribute_n" specifies an attribute name, and the value
-*     to the right of each "=" sign should be a suitable textual
-*     representation of the value to be assigned. This value will be
-*     interpreted according to the attribute's data type.
-c
-c     The string supplied may also contain "printf"-style format
-c     specifiers, identified by "%" signs in the usual way. If
-c     present, these will be substituted by values supplied as
-c     additional optional arguments (using the normal "printf" rules)
-c     before the string is used.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object.
-c     settings
-f     SETTINGS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing a
-c        comma-separated list of attribute settings in the form described
-c        above.
-f        A character string containing a comma-separated list of
-f        attribute settings in the form described above.
-c     ...
-c        Optional additional arguments which supply values to be
-c        substituted for any "printf"-style format specifiers that
-c        appear in the "settings" string.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Examples:
-c     astSet( map, "Report = 1, Zoom = 25.0" );
-c        Sets the Report attribute for Object "map" to the value 1 and
-c        the Zoom attribute to 25.0.
-c     astSet( frame, "Label( %d ) =Offset along axis %d", axis, axis );
-c        Sets the Label(axis) attribute for Object "frame" to a
-c        suitable string, where the axis number is obtained from
-c        "axis", a variable of type int.
-c     astSet( frame, "Title =%s", mystring );
-c        Sets the Title attribute for Object "frame" to the contents of
-c        the string "mystring".
-f     CALL AST_SET( MAP, 'Report = 1, Zoom = 25.0', STATUS )
-f        Sets the Report attribute for Object MAP to the value 1 and
-f        the Zoom attribute to 25.0.
-f     CALL AST_SET( FRAME, 'Label( 1 ) =Offset from cluster axis', STATUS )
-f        Sets the Label(1) attribute for Object FRAME to a suitable
-f        string.
-
-*  Notes:
-*     - Attribute names are not case sensitive and may be surrounded
-*     by white space.
-*     - White space may also surround attribute values, where it will
-*     generally be ignored (except for string-valued attributes where
-*     it is significant and forms part of the value to be assigned).
-c     - It is not possible to include a comma directly in the value
-c     assigned to an attribute via the "settings" string. To achieve
-c     this, you should use "%s" format and supply the value as a
-c     separate additional argument to astSet (or use the astSetC
-c     function instead).
-c     - The same procedure may be adopted if "%" signs are to be included
-c     and are not to be interpreted as format specifiers (alternatively,
-c     the "printf" convention of writing "%%" may be used).
-f     - It is not possible to include a comma in the value to be
-f     assigned to an attribute using this routine. If such a value is
-f     needed, then AST_SETC should be used instead.
-*     - An error will result if an attempt is made to set a value for
-*     a read-only attribute.
-*--
-
-*  Implementation Notes:
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     Object identifier is of type (void *) and is converted and
-*     validated within the function itself.
-*     - This implementation of astSet is designed to be used within AST,
-*     and has an explicit status parameter. From outside AST, the astSet
-*     macro will invoke the astSetId_ function which does not have an 
-*     status parameter.
-
-*--
-*/
-
-/* Local Variables: */
-   AstObject *this;              /* Pointer to the Object structure */
-   va_list args;                 /* Variable argument list */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain and validate a pointer to the Object structure. */
-   this = astCheckObject( this_void );
-   if ( astOK ) {
-
-/* Obtain the variable argument list and pass all arguments to the
-   astVSet method for interpretation. */
-      va_start( args, status );
-      astVSet( this, settings, NULL, args );
-      va_end( args );
-   }
-}
-
-static void SetAttrib( AstObject *this, const char *setting, int *status ) {
-/*
-*+
-*  Name:
-*     astSetAttrib
-
-*  Purpose:
-*     Set an attribute value for an Object.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astSetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function assigns an attribute value for an Object, the attribute and
-*     its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-
-*  Notes:
-*     - The Object class does not have any writable attributes, so
-*     this function merely reports an error. It is intended to be
-*     extended by other class definitions.
-*-
-*/
-
-/* Local Variables: */
-   int id;                       /* Offset of ID string */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* ID. */
-/* --- */
-   if ( nc = 0, ( 0 == astSscanf( setting, "id=%n%*[^\n]%n", &id, &nc ) )
-                && ( nc >= len ) ) {
-      astSetID( this, setting + id );
-
-/* Ident. */
-/* ------ */
-   } else if ( nc = 0, ( 0 == astSscanf( setting, "ident=%n%*[^\n]%n", &id, &nc ) )
-                && ( nc >= len ) ) {
-      astSetIdent( this, setting + id );
-
-/* UseDefs */
-/* ------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "usedefs= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetUseDefs( this, ival );
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class and use this to report an error
-   if it does. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-   } else if ( MATCH( "class" ) ||
-               MATCH( "nobject" ) ||
-               MATCH( "objsize" ) ||
-               MATCH( "refcount" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Since no writable attributes are defined for the Object class, any
-   attempt to set a value for anything else is also an error. */
-   } else {
-      astError( AST__BADAT, "astSet: The attribute setting \"%s\" is invalid "
-               "for a %s.", status, setting, astGetClass( this ) );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-void astSetCopy_( AstObjectVtab *vtab,
-                  void (* copy)( const AstObject *, AstObject *, int * ), int *status ) {
-/*
-*+
-*  Name:
-*     astSetCopy
-
-*  Purpose:
-*     Declare a copy constructor for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astSetCopy( AstObjectVtab *vtab,
-*                      void (* copy)( const AstObject *, AstObject * ) )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function is provided so that class definitions can declare a copy
-*     constructor to be associated with an Object that is being constructed.
-*     When a copy is later performed on the Object, the copy constructor of
-*     each class to which the Object belongs will be invoked in turn (working
-*     down the class hierarchy). The copy constructor is passed pointers to the
-*     source and destination Objects. It should implement the copy and return
-*     void.
-
-*  Parameters:
-*     vtab
-*        Pointer to the Object's virtual function table, in which the copy
-*        constructor's pointer is to be stored for future use.
-*     copy
-*        Pointer to the copy constructor function.
-
-*  Notes:
-*     -  When an Object is copied, a byte-by-byte copy of its structure is
-*     automatically made before any copy constructors are invoked. A copy
-*     constructor need only be provided if this does not suffice (e.g. if the
-*     structure contains pointers to other data).
-*     - If a copy constructor is declared for a class, then a
-*     destructor for that class must also be declared (using
-*     astSetDelete) so that there is a one-to-one correspondence
-*     between copy constructors and their associated destructors.
-*     -  Copy constructors should check the global error status in the normal
-*     way and should set it (and report an error) if they fail.
-*-
-*/
-
-
-/* Check the global status. */
-   if ( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
-   than by any AST exit handler). */
-   astBeginPM;
-
-/* Expand the array of copy constructor pointers in the virtual function table
-   (if necessary) to accommodate the new one. */
-   vtab->copy = astGrow( vtab->copy, vtab->ncopy + 1,
-                        sizeof( void (*)( const AstObject *, AstObject * ) ) );
-
-/* If OK, store the new function pointer and increment the count of copy
-   constructors. */
-   if ( astOK ) {
-      vtab->copy[ vtab->ncopy++ ] = copy;
-   }
-
-/* Mark the end of the section in which memory allocations may never be freed 
-   (other than by any AST exit handler). */
-   astEndPM;
-
-}
-
-void astSetDelete_( AstObjectVtab *vtab, void (* delete)( AstObject *, int * ), int *status ) {
-/*
-*+
-*  Name:
-*     astSetDelete
-
-*  Purpose:
-*     Declare a destructor for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astSetDelete( AstObjectVtab *vtab, void (* delete)( AstObject * ) )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function is provided so that class definitions can declare a
-*     destructor to be associated with an Object. When the Object is later
-*     deleted, the destructor declared by each class to which the Object
-*     belongs will be invoked in turn (working up the class hierarchy). The
-*     destructor is passed a pointer to the Object. It should free any
-*     resources (e.g. memory) associated with it and return void. It should
-*     not free the memory containing the Object itself.
-
-*  Parameters:
-*     vtab
-*        Pointer to the Object's virtual function table, in which the
-*        destructor's pointer is to be stored for future use.
-*     delete
-*        Pointer to the destructor function.
-
-*  Notes:
-*     - A destructor need not be declared for a class if there are no
-*     resources to free.
-*     - If a destructor is declared for a class, then a copy
-*     constructor for that class must also be declared (using
-*     astSetCopy) so that there is a one-to-one correspondence between
-*     copy constructors and their associated destructors.
-*     - A destructor function should generally attempt to execute even
-*     if the global error status is set on entry, but should not
-*     report further errors in that case (errors should be reported
-*     normally if status is not set on entry).
-*-
-*/
-
-
-/* Check the global status. */
-   if ( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
-   than by any AST exit handler). */
-   astBeginPM;
-
-/* Expand the array of destructor pointers in the virtual function table (if
-   necessary) to accommodate the new one. */
-   vtab->delete = astGrow( vtab->delete, vtab->ndelete + 1,
-                           sizeof( void (*)( AstObject * ) ) );
-
-/* If OK, store the new function pointer and increment the count of
-   destructors. */
-   if ( astOK ) {
-      vtab->delete[ vtab->ndelete++ ] = delete;
-   }
-
-/* Mark the end of the section in which memory allocations may never be freed 
-   (other than by any AST exit handler). */
-   astEndPM;
-
-}
-
-void astSetDump_( AstObjectVtab *vtab,
-                  void (* dump)( AstObject *, AstChannel *, int * ),
-                  const char *class, const char *comment, int *status ) {
-/*
-*+
-*  Name:
-*     astSetDump
-
-*  Purpose:
-*     Declare a dump function for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astSetDump( AstObjectVtab *vtab,
-*                      void (* dump)( AstObject *, AstChannel * ),
-*                      const char *class, const char *comment )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function is provided so that class definitions can declare
-*     a dump function to be associated with an Object that is being
-*     constructed.  When the astWrite (or astShow) method is later
-*     used to write the Object to a Channel, the dump function of each
-*     class to which the Object belongs will be invoked in turn
-*     (working down the class hierarchy). The dump function is passed
-*     pointers to the Object and the output Channel. It should write
-*     out any internal values (e.g. instance variables) for its class
-*     that are to be kept (using the protected astWrite... methods of
-*     the Channel) and return void.
-
-*  Parameters:
-*     vtab
-*        Pointer to the Object's virtual function table, in which the
-*        dump function's pointer is to be stored for future use.
-*     dump
-*        Pointer to the dump function.
-*     class
-*        Pointer to a constant null-terminated string (residing in
-*        static memory) containing the name of the class that is
-*        declaring the dump function.
-*     comment
-*        Pointer to a constant null-terminated string (residing in
-*        static memory) containing a comment to associate with the
-*        dump function.  This should normally describe the purpose of
-*        the class that is declaring the dump function.
-
-*  Notes:
-*     - Dump functions should check the global error status in the
-*     normal way and should set it (and report an error) if they fail.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
-   than by any AST exit handler). */
-   astBeginPM;
-
-/* Expand the arrays of pointers to dump functions and related data in
-   the virtual function table (if necessary) to accommodate the new
-   one. */
-   vtab->dump = astGrow( vtab->dump, vtab->ndump + 1,
-                         sizeof( void (*)( AstObject *, AstChannel * ) ) );
-   vtab->dump_class = astGrow( vtab->dump_class, vtab->ndump + 1,
-                               sizeof( char * ) );
-   vtab->dump_comment = astGrow( vtab->dump_comment, vtab->ndump + 1,
-                                 sizeof( char * ) );
-
-/* If OK, store the new pointers (to the dump function, class name and
-   comment) and increment the count of dump functions. */
-   if ( astOK ) {
-      vtab->dump[ vtab->ndump ] = dump;
-      vtab->dump_class[ vtab->ndump ] = class;
-      vtab->dump_comment[ vtab->ndump ] = comment;
-      vtab->ndump++;
-   }
-
-/* Mark the end of the section in which memory allocations may never be 
-   freed (other than by any AST exit handler). */
-   astEndPM;
-}
-
-void astSetVtab_( AstObject *this, AstObjectVtab *vtab, int *status ) {
-/*
-*+
-*  Name:
-*     astSetVtab
-
-*  Purpose:
-*     Change the virtual function table associated with an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astSetVtab( AstObject *this, AstObjectVtab *vtab ) 
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function changes the virtual function table associated with an
-*     Object. This may be needed, for instance, if a super-class
-*     initialises a parent class structure with a NULL vtab, causing the
-*     vtab of the parent class to be used instead of the super-class.
-*     Whilst the super-class object is being constructed its inherited methods
-*     will be determined by the parent class. Once the super-class object
-*     has been constructed, it can invoke this fuction in order to 
-*     set the vtab to the super-class vtab, thus causing the method
-*     implementations provided by the super-cvlass to be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be modified.
-*     vtab
-*        Pointer to the virtual function table to store in the Object.
-*-
-*/
-   if( this ) this->vtab = vtab;
-}
-
-static int Same( AstObject *this, AstObject *that, int *status ) {
-/*
-*++
-*  Name:
-c     astSame
-f     AST_SAME
-
-*  Purpose:
-*     Test if two AST pointers refer to the same Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     int astSame( AstObject *this,  AstObject *that )
-f     RESULT = AST_SAME( THIS, THAT, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function returns a boolean result (0 or 1) to indicate
-f     This function returns a logical result to indicate
-*     whether two pointers refer to the same Object.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the first Object.
-c     that
-f     THAT = INTEGER (Given)
-*        Pointer to the second Object.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSame()
-c        One if the two pointers refer to the same Object, otherwise zero.
-f     AST_SAME = LOGICAL
-f        .TRUE. if the two pointers refer to the same Object, otherwise
-f        .FALSE.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-*     - Two independent Objects that happen to be identical are not
-*     considered to be the same Object by this function.
-c     - A value of zero will be returned if this function is invoked
-c     with the AST error status set, or if it should fail for any reason.
-f     - A value of .FALSE. will be returned if this function is invoked
-f     with STATUS set to an error value, or if it should fail for any reason.
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the result. */
-   return ( this == that ) ? 1 : 0;
-}
-
-/*
-*++
-*  Name:
-c     astSet<X>
-f     AST_SET<X>
-
-*  Purpose:
-*     Set an attribute value for an Object.
-
-*  Type:
-*     Public functions.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astSet<X>( AstObject *this, const char *attrib, <X>type value )
-f     CALL AST_SET<X>( THIS, ATTRIB, VALUE, STATUS )
-
-*  Class Membership:
-*     Object methods.
-
-*  Description:
-c     This is a family of functions which set a specified attribute
-f     This is a family of routines which set a specified attribute
-*     value for an Object using one of several different data
-c     types. The type is selected by replacing <X> in the function name
-f     types. The type is selected by replacing <X> in the routine name
-c     by C, D, F, I or L, to supply a value in const char* (i.e. string),
-c     double, float, int, or long format, respectively.
-f     by C, D, I, L or R, to supply a value in Character, Double
-f     precision, Integer, Logical or Real format, respectively.
-*
-*     If possible, the value you supply is converted to the type of
-*     the attribute. If conversion is not possible, an error will
-*     result.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object.
-c     attrib
-f     ATTRIB = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing the
-c        name of the attribute whose value is to be set.
-f        A character string containing the name of the attribute whose
-f        value is to be set.
-c     value
-f     VALUE = <X>type (Given)
-c        The value to be set for the attribute, in the data type corresponding
-c        to <X> (or, in the case of astSetC, a pointer to a null-terminated
-c        character string containing this value).
-f        The value to be set for the attribute, in the data type corresponding
-f        to <X>.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        These functions apply to all Objects.
-f        These routines apply to all Objects.
-
-*  Examples:
-c     astSetI( frame, "Preserve", 1 );
-c        Sets the Preserve attribute value for Object "frame" to 1.
-c     astSetC( plot, "Format(1)", "%.2g" );
-c        Sets the Format(1) attribute value for Object "plot" to the
-c        character string "%.2g".
-f     CALL AST_SETC( PLOT, 'Title', CVALUE, STATUS )
-f        Sets the Title attribute value for Object PLOT to the contents
-f        of the character variable CVALUE.
-f     CALL AST_SETL( FRAME, 'Preserve', .TRUE., STATUS );
-f        Sets the Preserve attribute value for Object FRAME to 1 (true).
-
-*  Notes:
-*     - Attribute names are not case sensitive and may be surrounded
-*     by white space.
-f     - The logical value .FALSE. will translate to a numerical attribute
-f     value of zero and logical .TRUE. will translate to one.
-*     - An error will result if an attempt is made to set a value for
-*     a read-only attribute.
-*--
-*/
-
-/* Define a macro that expands to implement the astSetX_ member
-   functions required. The arguments to this macro are:
-
-      code
-         The character that appears at the end of the function name.
-      type
-         The C type of the function "value" parameter.
-      format
-         A quoted string containing a sprintf format specifier that will
-         format the supplied value as a character string. This format should
-         consume 2 sprintf arguments: a field width and the value to be
-         formatted.
-      fmtlen
-         The number of characters in the format specifier (above).
-      fieldsz
-         The value of the field width to be used by the format specifier.
-*/
-#define MAKE_SETX(code,type,format,fmtlen,fieldsz) \
-void astSet##code##_( AstObject *this, const char *attrib, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   char *setting;                /* Pointer to attribute setting string */ \
-   int len;                      /* Length of attribute name */ \
-\
-/* Check the global status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain the length of the attribute name and allocate memory to hold \
-   this name plus the format specifier to be appended to it. */ \
-   len = (int) astChrLen( attrib ); \
-   setting = astMalloc( (size_t) ( len + fmtlen + 2 ) ); \
-\
-/* Make a copy of the attribute name in the allocated memory. */ \
-   if ( astOK ) { \
-      (void) memcpy( setting, attrib, (size_t) len ); \
-      setting[ len ] = 0; \
-\
-/* Append "=", followed by the format specifier, to construct a \
-   suitable "setting" string for use by astSet. */ \
-      (void) strcat( setting, "=" format ); \
-\
-/* Invoke astSet to set the attribute value. */ \
-      astSet( this, setting, status, fieldsz, value ); \
-   } \
-\
-/* Free the allocated memory. */ \
-   setting = astFree( setting ); \
-}
-
-/* Use this macro to create all the SetX_ private member functions. */
-MAKE_SETX(D,double,"%.*g",4,DBL_DIG)
-MAKE_SETX(F,float,"%.*g",4,FLT_DIG)
-MAKE_SETX(I,int,"%.*d",4,1)
-MAKE_SETX(L,long,"%.*ld",5,1)
-
-
-/* The astSetC_ function is implemented separately so that commas can be
-   handled. Since astSetC can only be used to set a single attribute
-   value, we know that any commas in the supplied value are included
-   within the attribuite value, rather than being used as delimiters 
-   between adjacent attribute settings. To avoid VSet using them as
-   delimiters, they are replaced here by '\r' before calling astSet, and 
-   VSet then converts them back to commas. */
-
-void astSetC_( AstObject *this, const char *attrib, const char *value, int *status ) {
-
-/* Local Variables: */
-   char *d;                      /* Pointer to next setting character */
-   char *newv;                   /* Pointer to new attribute value string */
-   char *setting;                /* Pointer to attribute setting string */
-   const char *c;                /* Pointer to next value character */
-   int len;                      /* Length of attribute name */
-
-/* Check the global status. */
-   if ( !astOK ) return;
-
-/* Produce a copy of the supplied attribute value in which any commas
-   are replaced by carriage returns ("\r"). */
-   newv = astMalloc( (size_t)( strlen( value ) + 1 ) );
-   if( newv ) {
-      d = newv;
-      c = value;
-      while( *c ) {
-         if( *c == ',' ) {
-            *d = '\r';
-         } else {
-            *d = *c;
-         }            
-         c++;
-         d++;
-      }
-      *d = 0;
-   
-/* Obtain the length of the attribute name and allocate memory to hold
-   this name plus the format specifier to be appended to it. */
-      len = (int) astChrLen( attrib );
-      setting = astMalloc( (size_t) ( len + 5 ) );
-
-/* Make a copy of the attribute name in the allocated memory. */
-      if ( astOK ) {
-         (void) memcpy( setting, attrib, (size_t) len );
-         setting[ len ] = 0;
-
-/* Append "=", followed by the format specifier, to construct a
-   suitable "setting" string for use by astSet. */
-         (void) strcat( setting, "=%*s" );
-
-/* Invoke astSet to set the attribute value. */
-         astSet( this, setting, status, 0, newv );
-      }
-
-/* Free the allocated memory. */
-      setting = astFree( setting );
-   }
-   newv = astFree( newv );
-}
-
-static void Show( AstObject *this, int *status ) {
-/*
-*++
-*  Name:
-c     astShow
-f     AST_SHOW
-
-*  Purpose:
-*     Display a textual representation of an Object on standard output.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astShow( AstObject *this )
-f     CALL AST_SHOW( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function displays a textual description of any AST Object
-f     This routine displays a textual description of any AST Object
-*     on standard output. It is provided primarily as an aid to
-*     debugging.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object to be displayed.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-*--
-*/
-
-/* Local Variables: */
-   AstChannel *channel;          /* Pointer to output Channel */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Create a Channel which will write to standard output. */
-   channel = astChannel( NULL, NULL, "", status );
-
-/* Write the Object to the Channel. */
-   astWrite( channel, this );
-
-/* Annul the Channel pointer. */
-   channel = astAnnul( channel );
-}
-
-int astTest_( AstObject *this, const char *attrib, int *status ) {
-/*
-*++
-*  Name:
-c     astTest
-f     AST_TEST
-
-*  Purpose:
-*     Test if an Object attribute value is set.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     int astTest( AstObject *this, const char *attrib )
-f     RESULT = AST_TEST( THIS, ATTRIB, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function returns a boolean result (0 or 1) to indicate
-f     This function returns a logical result to indicate
-*     whether a value has been explicitly set for one of an Object's
-*     attributes.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object.
-c     attrib
-f     ATTRIB = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing
-c        the name of the attribute to be tested.
-f        A character string containing the name of the attribute to be
-f        tested.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astTest()
-c        One if a value has previously been explicitly set for the attribute
-c        (and hasn't been cleared), otherwise zero.
-f     AST_TEST = LOGICAL
-f        .TRUE. if a value has previously been explicitly set for the
-f        attribute (and hasn't been cleared), otherwise .FALSE..
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-*     - Attribute names are not case sensitive and may be surrounded
-*     by white space.
-c     - A value of zero will be returned if this function is invoked
-f     - A value of .FALSE. will be returned if this function is invoked
-c     with the AST error status set, or if it should fail for any reason.
-f     with STATUS set to an error value, or if it should fail for any reason.
-c     - A value of zero will also be returned if this function is used
-f     - A value of .FALSE. will also be returned if this function is used
-*     to test a read-only attribute, although no error will result.
-*--
-*/
-
-/* Local Variables: */
-   char *buff;                   /* Pointer to character buffer */
-   int i;                        /* Loop counter for characters */
-   int j;                        /* Non-blank character count */
-   int len;                      /* Length of attrib string */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain the length of the attrib string. */
-   len = (int) strlen( attrib );
-
-/* Allocate memory and store a copy of the string. */
-   buff = astStore( NULL, attrib, (size_t) ( len + 1 ) );
-   if ( astOK ) {
-
-/* Remove white space and upper case characters. */
-      for ( i = j = 0; buff[ i ]; i++ ) {
-         if ( !isspace( buff[ i ] ) ) buff[ j++ ] = tolower( buff[ i ] );
-      }
-            
-/* Terminate the attribute name and pass it to astTestAttrib to test
-   the attribute. */
-      buff[ j ] = '\0';
-      result = astTestAttrib( this, buff );
-   }
-
-/* Free the memory allocated for the string buffer. */
-   buff = astFree( buff );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int TestAttrib( AstObject *this, const char *attrib, int *status ) {
-/*
-*+
-*  Name:
-*     astTestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for an Object.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astTestAttrib( AstObject *this, const char *attrib )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of an Object's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* ID. */
-/* --- */
-   if ( !strcmp( attrib, "id" ) ) {
-      result = astTestID( this );
-
-/* Ident. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ident" ) ) {
-      result = astTestIdent( this );
-
-/* UseDefs */
-/* ------- */
-   } else if ( !strcmp( attrib, "usedefs" ) ) {
-      result = astTestUseDefs( this );
-
-/* Test if the attribute string matches any of the read-only
-   attributes of this class. If it does, then return zero. */
-   } else if ( !strcmp( attrib, "class" ) ||
-               !strcmp( attrib, "nobject" ) ||
-               !strcmp( attrib, "objsize" ) ||
-               !strcmp( attrib, "refcount" ) ) {
-      result = 0;
-
-/* Any attempt to test any other attribute is an error. */
-   } else if( astOK ){
-      astError( AST__BADAT, "astTest: The attribute name \"%s\" is invalid "
-               "for a %s.", status, attrib, astGetClass( this ) );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-int astTune_( const char *name, int value, int *status ) {
-/*
-*++
-*  Name:
-c     astTune
-f     AST_TUNE
-
-*  Purpose:
-*     Set or get an AST global tuning parameter.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     int astTune( const char *name, int value )
-f     RESULT = AST_TUNE( NAME, VALUE, STATUS )
-
-*  Class Membership:
-*     Object function.
-
-*  Description:
-*     This function returns the current value of an AST global tuning 
-*     parameter, optionally storing a new value for the parameter.
-
-*  Parameters:
-c     name
-f     NAME = CHARACTER * ( * ) (Given)
-*        The name of the tuning parameter (case-insensitive).
-c     value
-f     VALUE = INTEGER (Given)
-*        The new value for the tuning parameter. If this is AST__TUNULL,
-*        the existing current value will be retained.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astTune()
-f     AST_TUNE = INTEGER
-c        The original value of the tuning parameter. A default value will
-*        be returned if no value has been set for the parameter.
-
-*  Tuning Parameters:
-*     ObjectCaching
-*        A boolean flag which indicates what should happen
-*        to the memory occupied by an AST Object when the Object is deleted
-*        (i.e. when its reference count falls to zero or it is deleted using
-c        astDelete).
-f        AST_DELETE).
-*        If this is zero, the memory is simply freed using the systems "free"
-*        function. If it is non-zero, the memory is not freed. Instead a
-*        pointer to it is stored in a pool of such pointers, all of which
-*        refer to allocated but currently unused blocks of memory. This allows
-*        AST to speed up subsequent Object creation by re-using previously
-*        allocated memory blocks rather than allocating new memory using the
-*        systems malloc function. The default value for this parameter is
-*        zero. Setting it to a non-zero value will result in Object memory
-*        being cached in future. Setting it back to zero causes any memory
-*        blocks currently in the pool to be freed. Note, this tuning parameter
-*        only controls the caching of memory used to store AST Objects. To
-*        cache other memory blocks allocated by AST, use MemoryCaching.
-*     MemoryCaching
-*        A boolean flag similar to ObjectCaching except
-*        that it controls caching of all memory blocks of less than 300 bytes
-*        allocated by AST (whether for internal or external use), not just
-*        memory used to store AST Objects.
-
-*  Notes:
-c     - This function attempts to execute even if the AST error
-c     status is set
-f     - This routine attempts to execute even if STATUS is set to an
-f     error value
-*     on entry, although no further error report will be
-*     made if it subsequently fails under these circumstances.
-*     - All threads in a process share the same AST tuning parameters
-*     values.
-*--
-*/
-
-   int result = AST__TUNULL;
-
-   if( name ) {
-
-      if( astChrMatch( name, "ObjectCaching" ) ) {
-         result = object_caching;
-         if( value != AST__TUNULL ) {
-            object_caching = value;
-            if( !object_caching ) EmptyObjectCache( status );
-         }
-         
-      } else if( astChrMatch( name, "MemoryCaching" ) ) {
-         result = astMemCaching( value );
-         
-      } else if( astOK ) {
-         astError( AST__TUNAM, "astTune: Unknown AST tuning parameter "
-                   "specified \"%s\".", status, name );
-      }
-
-   }
-
-   return result;
-}
-
-static void VSet( AstObject *this, const char *settings, char **text, 
-                  va_list args, int *status ) {
-/*
-*+
-*  Name:
-*     astVSet
-
-*  Purpose:
-*     Set values for an Object's attributes.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astVSet( AstObject *this, const char *settings, char **text, 
-*                   va_list args )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     This function assigns a set of attribute values for an Object,
-*     the attributes and their values being specified by means of a
-*     string containing a comma-separated list of the form:
-*
-*        "attribute1 = value1, attribute2 = value2, ... "
-*
-*     Here, "attribute" specifies an attribute name and the value to
-*     the right of each "=" sign should be a suitable textual
-*     representation of the value to be assigned to that
-*     attribute. This will be interpreted according to the attribute's
-*     data type.
-*
-*     The string supplied may also contain "printf"-style format
-*     specifiers identified by a "%" sign in the usual way. If
-*     present, these will be substituted by values supplied as
-*     optional arguments (as a va_list variable argument list), using
-*     the normal "printf" rules, before the string is used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     settings
-*        Pointer to a null-terminated string containing a
-*        comma-separated list of attribute settings.
-*     text
-*        Pointer to a location at which to return a pointer to dynamic
-*        memory holding a copy of the expanded setting string. This memory 
-*        should be freed using astFree when no longer needed. If a NULL
-*        pointer is supplied, no string is created.
-*     args
-*        The variable argument list which contains values to be
-*        substituted for any "printf"-style format specifiers that
-*        appear in the "settings" string.
-
-*  Notes:
-*     - Attribute names are not case sensitive.
-*     - White space may surround attribute names and will be ignored.
-*     - White space may also surround attribute values where it will
-*     be ignored (except for string-valued attributes where it is
-*     significant and forms part of the value to be assigned).
-*     - After this function has substituted values for "printf"-style
-*     format specifiers it splits the "settings" string into
-*     individual attribute settings which it passes one at a time to
-*     the protected astSetAttrib method (after removal of white space
-*     and conversion of attribute names to lower case). The
-*     astSetAttrib method should therefore be extended by derived
-*     classes which define new attributes, and this will allow the
-*     astVSet (and astSet) methods to have access to those attributes.
-*     - This function provides the same functionality as the astSet
-*     public method but accepts a va_list variable argument list
-*     instead of a variable number of arguments. It is provided for
-*     use by functions in other class implementations which accept a
-*     variable number of arguments and must therefore pass their
-*     argument list to this method in va_list form.
-*-
-*/
-
-/* Local Constants: */
-   const int min_buff_len = 1024; /* Minimum size of formatting buffer */
-#define ERRBUF_LEN 80
-
-/* Local Variables: */
-   char errbuf[ ERRBUF_LEN ];    /* Buffer for system error message */
-   char *errstat;                /* Pointer to error message */
-   char *assign;                 /* Pointer to assigment substring */
-   char *assign_end;             /* Pointer to null at end of assignment */
-   char *buff1;                  /* Pointer to temporary string buffer */
-   char *buff2;                  /* Pointer to temporary string buffer */
-   char *buff3;                  /* Pointer to temporary string buffer */
-   char *eq1;                    /* Pointer to 1st equals sign */
-   int buff_len;                 /* Length of temporary buffer */
-   int i;                        /* Loop counter for characters */
-   int j;                        /* Offset for revised assignment character */
-   int len;                      /* Length of settings string */
-   int lo;                       /* Convert next character to lower case? */
-   int nc;                       /* Number of vsprintf output characters */
-   int stat;                     /* Value of errno after an error */
-
-/* Initialise */
-   if( text ) *text = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the length of the "settings" string and test it is not
-   zero. If it is, there is nothing more to do. */
-   len = (int) strlen( settings );
-   if ( len != 0 ) {
-
-/* Allocate memory and store a copy of the string. */
-      buff1 = astStore( NULL, settings, (size_t) ( len + 1 ) );
-      if ( astOK ) {
-
-/* Convert each comma in the string into '\n'. This is to distinguish
-   commas initially present from those introduced by the formatting to
-   be performed below. We only do this if there is more than one equals
-   sign in the setting string, since otherwise any commas are probably 
-   characters contained within a string attribute value. */
-         eq1 = strchr( buff1, '=' );
-         if( eq1 && strchr( eq1 + 1, '=' ) ) {
-            for ( i = 0; i < len; i++ ) {
-               if ( buff1[ i ] == ',' ) buff1[ i ] = '\n';
-            }
-         }
-
-/* Calculate a size for a further buffer twice the size of the first
-   one.  Ensure it is not less than a minimum size and then allocate
-   this buffer. */
-         buff_len = 2 * len;
-         if ( buff_len < min_buff_len ) buff_len = min_buff_len;
-         buff2 = astMalloc( (size_t) ( buff_len + 1 ) );
-         if ( astOK ) {
-
-/* Use "vsprintf" to substitute values for any format specifiers in
-   the "settings" string, writing the resulting string into the second
-   buffer. */
-            errno = 0;
-            nc = vsprintf( buff2, buff1, args );
-
-/* Get a copy of the expanded string to return as the function value and 
-   convert newlines back to commas. */
-            if( text ) {
-               *text = astStore( NULL, buff2, nc + 1 );
-               if( *text ) {
-                  for ( i = 0; i <= nc; i++ ) {
-                     if ( (*text)[ i ] == '\n' ) (*text)[ i ] = ',';
-                  }
-               }
-            }
-
-/* The possibilities for error detection are limited here, but check
-   if an error value was returned and report an error. Include
-   information from errno if it was set. */
-            if ( nc < 0 ) {
-               if( astOK ) {
-                  stat = errno;
-   
-                  if( stat ) {
-#if HAVE_STRERROR_R
-                     strerror_r( stat, errbuf, ERRBUF_LEN );
-                     errstat = errbuf;
-#else
-                     errstat = strerror( stat );
-#endif
-                  } else {
-                     *errbuf = 0;
-                     errstat = errbuf;
-                  }
-   
-                  astError( AST__ATSER, "astVSet(%s): Error formatting an "
-                            "attribute setting%s%s.", status, astGetClass( this ),
-                            stat? " - " : "", errstat );
-                  astError( AST__ATSER, "The setting string was \"%s\".", status,
-                            settings );
-               }
-
-/* Also check that the result buffer did not overflow. If it did,
-   memory will probably have been corrupted but this cannot be
-   prevented with "vsprintf" (although we try and make the buffer
-   large enough). Report the error and abort. */
-            } else if ( nc > buff_len ) {
-               if( astOK ) {
-                  astError( AST__ATSER, "astVSet(%s): Internal buffer overflow "
-                            "while formatting an attribute setting - the result "
-                            "exceeds %d characters.", status, astGetClass( this ),
-                            buff_len );
-                  astError( AST__ATSER, "The setting string was \"%s\".", status,
-                            settings );
-               }
-
-/* If all is OK, loop to process each formatted attribute assignment
-   (these are now separated by '\n' characters). */
-	    } else {
-               assign = buff2;
-               while ( assign ) {
-
-/* Change the '\n' at the end of each assignment to a null to
-   terminate it. */
-                  if ( ( assign_end = strchr( assign, '\n' ) ) ) {
-                     *assign_end = '\0';
-                  }
-
-/* Before making the assignment, loop to remove white space and upper
-   case characters from the attribute name. */
-                  lo = 1;
-                  for ( i = j = 0; assign[ i ]; i++ ) {
-
-/* Note when an '=' sign is encountered (this signals the end of the
-   attribute name). */
-                     if ( assign[ i ] == '=' ) lo = 0;
-
-/* Before the '=' sign, convert all characters to lower case and move
-   everything to the left to eliminate white space. Afer the '=' sign,
-   copy all characters to their new location unchanged. astSetC replaces 
-   commas in the attribute value by '\r' characters. Reverse this now. */
-                     if ( !lo || !isspace( assign[ i ] ) ) {
-                        if( assign[ i ] == '\r' ) {
-                           assign[ j++ ] = ',';
-                        } else {
-                           assign[ j++ ] = ( lo ? tolower( assign[ i ] ) :
-                                               assign[ i ] );
-                        }
-                     }
-                  }
-
-/* Terminate the revised assignment string and pass it to astSetAttrib
-   to make the assignment (unless the string was all blank, in which
-   case we ignore it). */
-                  assign[ j ] = '\0';
-                  if ( j ) {
-
-/* If there are no characters to the right of the equals sign append a
-   space after the equals sign. Without this, a string such as "Title=" 
-   would not be succesfully matched against the attribute name "Title"
-   within SetAttrib. */
-                     if( assign[ j - 1 ] == '=' ) {
-                        buff3 = astStore( NULL, assign, 
-                                          (size_t) j + 2 );
-                        if ( astOK ) {
-                           buff3[ j ] = ' ';
-                           buff3[ j + 1 ] = '\0';
-                           astSetAttrib( this, buff3 );
-                        }
-                        buff3 = astFree( buff3 );
-
-                     } else {
-                        astSetAttrib( this, assign );
-                     }
-                  }
-
-/* Check for errors and abort if any assignment fails. Otherwise,
-   process the next assignment substring. */
-                  if ( !astOK ) break;
-                  assign = assign_end ? assign_end + 1 : NULL;
-               }
-	    }
-         }
-
-/* Free the memory allocated for string buffers. */
-         buff2 = astFree( buff2 );
-      }
-      buff1 = astFree( buff1 );
-   }
-}
-#undef ERRBUF_LEN
-
-/* Attribute access functions. */
-/* --------------------------- */
-/*
-*att++
-*  Name:
-*     Class
-
-*  Purpose:
-*     Object class name.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Character string, read-only.
-
-*  Description:
-*     This attribute gives the name of the class to which an Object
-*     belongs.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     ID
-
-*  Purpose:
-*     Object identification string.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute contains a string which may be used to identify
-*     the Object to which it is attached. There is no restriction on
-*     the contents of this string, which is not used internally by the
-*     AST library, and is simply returned without change when
-*     required. The default value is an empty string.
-*
-*     An identification string can be valuable when, for example,
-c     several Objects have been stored in a file (using astWrite) and
-f     several Objects have been stored in a file (using AST_WRITE) and
-c     are later retrieved (using astRead). Consistent use of the ID
-f     are later retrieved (using AST_READ). Consistent use of the ID
-*     attribute allows the retrieved Objects to be identified without
-*     depending simply on the order in which they were stored.
-*
-*     This attribute may also be useful during debugging, to
-c     distinguish similar Objects when using astShow to display them.
-f     distinguish similar Objects when using AST_SHOW to display them.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-
-*  Notes:
-*     - Unlike most other attributes, the value of the ID attribute is
-*     not transferred when an Object is copied. Instead, its value is
-*     undefined (and therefore defaults to an empty string) in any
-*     copy. However, it is retained in any external representation of
-c     an Object produced by the astWrite function.
-f     an Object produced by the AST_WRITE routine.
-*att--
-*/
-/* Clear the ID value by freeing the allocated memory and assigning a
-   NULL pointer. */
-astMAKE_CLEAR(Object,ID,id,astFree( this->id ))
-
-/* If the ID value is not set, supply a default in the form of a
-   pointer to the constant string "". */
-astMAKE_GET(Object,ID,const char *,NULL,( this->id ? this->id : "" ))
-
-/* Set an ID value by freeing any previously allocated memory,
-   allocating new memory and storing the string. */
-astMAKE_SET(Object,ID,const char *,id,astStore( this->id, value,
-                                                strlen( value ) + (size_t) 1 ))
-
-/* The ID value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Object,ID,( this->id != NULL ))
-
-/*
-*att++
-*  Name:
-*     Ident
-
-*  Purpose:
-*     Permanent Object identification string.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute is like the ID attribute, in that it contains a 
-*     string which may be used to identify the Object to which it is 
-*     attached. The only difference between ID and Ident is that Ident 
-*     is transferred when an Object is copied, but ID is not.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-
-*att--
-*/
-/* Clear the Ident value by freeing the allocated memory and assigning a
-   NULL pointer. */
-astMAKE_CLEAR(Object,Ident,ident,astFree( this->ident ))
-
-/* If the Ident value is not set, supply a default in the form of a
-   pointer to the constant string "". */
-astMAKE_GET(Object,Ident,const char *,NULL,( this->ident ? this->ident : "" ))
-
-/* Set an Ident value by freeing any previously allocated memory,
-   allocating new memory and storing the string. */
-astMAKE_SET(Object,Ident,const char *,ident,astStore( this->ident, value,
-                                                strlen( value ) + (size_t) 1 ))
-
-/* The Ident value is set if the pointer to it is not NULL. */
-astMAKE_TEST(Object,Ident,( this->ident != NULL ))
-
-/*
-*att++
-*  Name:
-*     UseDefs
-
-*  Purpose:
-*     Use default values for unspecified attributes?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute specifies whether default values should be used
-*     internally for object attributes which have not been assigned a 
-*     value explicitly. If a non-zero value (the default) is supplied for 
-*     UseDefs, then default values will be used for attributes which have 
-*     not explicitly been assigned a value. If zero is supplied for UseDefs, 
-*     then an error will be reported if an attribute for which no explicit 
-*     value has been supplied is needed internally within AST. 
-*
-*     Many attributes (including the UseDefs attribute itself) are unaffected 
-*     by the setting of the UseDefs attribute, and default values will always 
-*     be used without error for such attributes. The "Applicability:" section 
-*     below lists the attributes which are affected by the setting of UseDefs.
-
-*     Note, UseDefs only affects access to attributes internally within
-*     AST. The public accessor functions such as 
-c     astGetC
-f     AST_GETC
-*     is unaffected by the UseDefs attribute - default values will always
-*     be returned if no value has been set. Application code should use the
-c     astTest
-f     AST_TEST
-*     function if required to determine if a value has been set for an
-*     attribute.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute, but ignore its setting except
-*        as described below for individual classes.
-*     FrameSet
-*        The default value of UseDefs for a FrameSet is redefined to be
-*        the UseDefs value of its current Frame.
-*     CmpFrame
-*        The default value of UseDefs for a CmpFrame is redefined to be
-*        the UseDefs value of its first component Frame.
-*     Region
-*        The default value of UseDefs for a Region is redefined to be
-*        the UseDefs value of its encapsulated Frame.
-*     Frame
-*        If UseDefs is zero, an error is reported when aligning Frames if the 
-*        Epoch, ObsLat or ObsLon attribute is required but has not been 
-*        assigned a value explicitly.
-*     SkyFrame
-*        If UseDefs is zero, an error is reported when aligning SkyFrames 
-*        if any of the following attributes are required but have not been 
-*        assigned a value explicitly: Epoch, Equinox.
-*     SpecFrame
-*        If UseDefs is zero, an error is reported when aligning SpecFrames 
-*        if any of the following attributes are required but have not been 
-*        assigned a value explicitly: Epoch, RefRA, RefDec, RestFreq, 
-*        SourceVel, StdOfRest.
-*     DSBSpecFrame
-*        If UseDefs is zero, an error is reported when aligning DSBSpecFrames 
-*        or when accessing the ImagFreq attribute if any of the following 
-*        attributes are required but have not been assigned a value explicitly:
-*        Epoch, DSBCentre, IF.
-*att--
-*/
-astMAKE_CLEAR(Object,UseDefs,usedefs,CHAR_MAX)
-astMAKE_GET(Object,UseDefs,int,1,((this->usedefs!=CHAR_MAX)?this->usedefs:1))
-astMAKE_SET(Object,UseDefs,int,usedefs,(this->usedefs=(value)?1:0))
-astMAKE_TEST(Object,UseDefs,(this->usedefs!=CHAR_MAX))
-
-/*
-*att++
-*  Name:
-*     Nobject
-
-*  Purpose:
-*     Number of Objects in class.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the total number of Objects currently in
-*     existence in the same class as the Object whose attribute value
-*     is requested. This count does not include Objects which belong
-*     to derived (more specialised) classes.
-*
-*     This attribute is mainly intended for debugging. It can be used
-*     to detect whether Objects which should have been deleted have,
-*     in fact, been deleted.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     ObjSize
-
-*  Purpose:
-*     The in-memory size of the Object.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the total number of bytes of memory used by
-*     the Object. This includes any Objects which are encapsulated within
-*     the supplied Object.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     RefCount
-
-*  Purpose:
-*     Count of active Object pointers.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the number of active pointers associated
-*     with an Object. It is modified whenever pointers are created or
-c     annulled (by astClone, astAnnul or astEnd for example). The count
-f     annulled (by AST_CLONE, AST_ANNUL or AST_END for example). The count
-*     includes the initial pointer issued when the Object was created.
-*
-*     If the reference count for an Object falls to zero as the result
-*     of annulling a pointer to it, then the Object will be deleted.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-*att--
-*/
-
-/* Standard class functions. */
-/* ========================= */
-/*
-*+
-*  Name:
-*     astCheck<Class>
-
-*  Purpose:
-*     Validate class membership.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "class.h"
-*     Ast<Class> *astCheck<Class>( Ast<Class> *this )
-
-*  Class Membership:
-*     <Class> class function.
-
-*  Description:
-*     This function validates membership of the class called <Class>,
-*     or of any class derived from it. If the Object is not a member,
-*     or the pointer supplied does not identify a valid Object, an
-*     error is reported and the global error status is set to
-*     AST__OBJIN.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-
-*  Returned Value:
-*     The function always returns a copy of the "this" pointer
-*     (whether it finds it valid or not).
-
-*  Notes:
-*     - Each class provides a function (astCheck<Class>) of this form,
-*     where <Class> and <class> are replaced by the class name (with
-*     appropriate capitalisation).
-*     - Normal error status checking is performed, so this function
-*     will not execute if the global error status is set on entry (the
-*     usual function value will be returned, however).
-*     - This function is primarily intended for validating Object
-*     pointers passed to member functions as part of a class
-*     interface.
-*-
-*/
-
-/* Implement the astCheckObject function using the macro defined for this
-   purpose in the "object.h" header file. */
-astMAKE_CHECK(Object)
-
-int astIsAObject_( const AstObject *this, int *status ) {
-/*
-*++
-*  Name:
-c     astIsA<Class>
-f     AST_ISA<CLASS>
-
-*  Purpose:
-*     Test membership of a class by an Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "class.h"
-c     int astIsA<Class>( const Ast<Class> *this )
-f     RESULT = AST_ISA<CLASS>( THIS, STATUS )
-
-*  Class Membership:
-*     Class function.
-
-*  Description:
-*     This is a family of functions which test whether an Object is a
-c     member of the class called <Class>, or of any class derived from
-f     member of the class called <CLASS>, or of any class derived from
-*     it.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Object.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astIsA<Class>()
-c        One if the Object belongs to the class called <Class> (or to a
-c        class derived from it), otherwise zero.
-f     AST_ISA<CLASS> = LOGICAL
-f        .TRUE. if the Object belongs to the class called <CLASS> (or to
-f        a class derived from it), otherwise .FALSE..
-
-*  Applicability:
-*     Object
-*        These functions apply to all Objects.
-
-*  Examples:
-c     member = astIsAFrame( obj );
-c        Tests whether Object "obj" is a member of the Frame class, or
-c        of any class derived from a Frame.
-f     MEMBER = AST_ISAFRAME( OBJ, STATUS );
-f        Tests whether Object OBJ is a member of the Frame class, or
-f        of any class derived from a Frame.
-
-*  Notes:
-c     - Every AST class provides a function (astIsA<Class>) of this
-c     form, where <Class> should be replaced by the class name.
-f     - Every AST class provides a function (AST_ISA<CLASS>) of this
-f     form, where <CLASS> should be replaced by the class name.
-c     - This function attempts to execute even if the AST error status
-c     is set
-f     - This function attempts to execute even if STATUS is set to an
-f     error value
-*     on entry, although no further error report will be made
-*     if it subsequently fails under these circumstances.
-c     - A value of zero will be returned if this function should fail
-f     - A value of .FALSE. will be returned if this function should fail
-*     for any reason. In particular, it will fail if the pointer
-*     supplied does not identify an Object of any sort.
-*--
-*/
-
-/* Local Variables: */
-   int valid;                    /* Valid object? */
-
-/* Since this is the base class, the implementation of this function
-   differs from that in derived classes (in that it fails and
-   potentially reports an error if the returned result is zero). */
-
-/* Initialise. */
-   valid = 0;
-
-/* Check if a NULL pointer was supplied (this can never be valid). If
-   OK, check if the Object contains the correct "magic number" in its
-   check field. */
-   if ( !this || ( this->check != Magic( this, this->size, status ) ) ) {
-
-/* If it is not a valid Object, then report an error (but only if the
-   global error status has not already been set). */
-      if ( astOK ) {
-         astError( AST__OBJIN, "astIsAObject(%s): Invalid Object pointer "
-                   "given (points at address %p).", status, astGetClass( this ),
-                   (void *) this );
-      }
-
-/* Otherwise, note that the Object is valid. */
-   } else {
-      valid = 1;
-   }
-
-/* Return the result. */
-   return valid;
-}
-
-void astInitObjectVtab_(  AstObjectVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitObjectVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astInitObjectVtab( AstObjectVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Object vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Object class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int ivtab;                    /* Index of next entry in known_vtabs */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the contents of the class identifier. Since this is the
-   base class, we assign null values to the fields. */
-   vtab->id.check = NULL;
-   vtab->id.parent = NULL;
-
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->Clear = Clear;
-   vtab->ClearAttrib = ClearAttrib;
-   vtab->ClearID = ClearID;
-   vtab->ClearIdent = ClearIdent;
-   vtab->Dump = Dump;
-   vtab->Equal = Equal;
-   vtab->GetAttrib = GetAttrib;
-   vtab->GetID = GetID;
-   vtab->GetIdent = GetIdent;
-   vtab->Same = Same;
-   vtab->SetAttrib = SetAttrib;
-   vtab->SetID = SetID;
-   vtab->SetIdent = SetIdent;
-   vtab->Show = Show;
-   vtab->TestAttrib = TestAttrib;
-   vtab->TestID = TestID;
-   vtab->TestIdent = TestIdent;
-   vtab->VSet = VSet;
-   vtab->Cast = Cast;
-   vtab->GetObjSize = GetObjSize;
-   vtab->CleanAttribs = CleanAttribs;
-
-   vtab->TestUseDefs = TestUseDefs;
-   vtab->SetUseDefs = SetUseDefs;
-   vtab->ClearUseDefs = ClearUseDefs;
-   vtab->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
-   vtab->ManageLock = ManageLock;
-#endif
-
-/* Store the pointer to the class name. */
-   vtab->class = name;
-
-/* Initialise the count of active objects and the number of destructors,
-   copy constructors and dump functions. */
-   vtab->nobject = 0;
-   vtab->ndelete = 0;
-   vtab->ncopy = 0;
-   vtab->ndump = 0;
-
-/* Initialise the arrays of destructor, copy constructor and dump
-   function pointers. */
-   vtab->delete = NULL;
-   vtab->copy = NULL;
-   vtab->dump = NULL;
-   vtab->dump_class = NULL;
-   vtab->dump_comment = NULL;
-
-/* The virtual function table for each class contains a list of pointers
-   to memory blocks which have previously been used to store an Object of
-   the same class, but which have since been deleted using astDelete.
-   These memory blocks are free to be re-used when a new Object of the
-   same class is initialised. This saves on the overheads associated with
-   continuously allocating small blocks of memory using malloc. */
-   vtab->nfree = 0;
-   vtab->free_list = NULL;
-
-/* Add the supplied virtual function table pointer to the end of the list
-   of known vtabs. */
-   ivtab = nvtab++;
-
-   astBeginPM;
-   known_vtabs = astGrow( known_vtabs, nvtab, sizeof( AstObjectVtab *) );
-   astEndPM;
-
-   if( astOK && known_vtabs ) known_vtabs[ ivtab ] = vtab;
-
-/* Fill a pointer value with zeros (not necessarily the same thing as a 
-   NULL pointer) for subsequent use. */
-   (void) memset( &zero_ptr, 0, sizeof( AstObject * ) );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised. */
-   if( vtab == &class_vtab ) class_init = 1;
-}
-
-AstObject *astInitObject_( void *mem, size_t size, int init,
-                           AstObjectVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitObject
-
-*  Purpose:
-*     Initialise an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astInitObject( void *mem, size_t size, int init,
-*                               AstObjectVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Object initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Object. It allocates memory (if necessary) to accommodate the
-*     Object plus any additional data associated with the derived class. It
-*     then initialises an Object structure at the start of this memory. If the
-*     "init" flag is set, it also initialises the contents of a virtual
-*     function table for an Object at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Object is to be initialised.
-*        This must be of sufficient size to accommodate the Object data
-*        (sizeof(Object)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Object (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Object
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Object's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Object.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *new;               /* Pointer to new Object */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Determine if memory must be allocated dynamically. If so, use the last
-   block of memory in the list of previously allocated but currently
-   unused blocks identified by the vtab "free_list" array, reducing the 
-   length of the free list by one, and nullifying the entry in the list 
-   for safety. If the list is originally empty, allocate memory for a new 
-   object using astMalloc. */
-   if( !mem ) {
-      if( object_caching ) {
-         if( vtab->nfree > 0 ) {
-            mem = vtab->free_list[ --(vtab->nfree) ];
-            vtab->free_list[ vtab->nfree ] = NULL;
-            if( astSizeOf( mem ) != size && astOK ) {
-               astError( AST__INTER, "astInitObject(%s): Free block has size "
-                         "%d but the %s requires %d bytes (internal AST "
-                         "programming error).", status, vtab->class, 
-                         (int) astSizeOf( mem ), vtab->class, (int) size );
-            }
-         } else {
-            mem = astMalloc( size );
-         }
-
-      } else {
-         mem = astMalloc( size );
-      }
-
-/* If memory had already been allocated, adjust the "size" value to match
-   the size of the allocated memory. */
-   } else {
-      size = astSizeOf( mem );
-   }      
-
-/* Obtain a pointer to the new Object. */
-   if ( astOK ) {
-      new = (AstObject *) mem;
-
-/* Zero the entire new Object structure (to prevent accidental re-use
-   of any of its values after deletion). */
-      (void) memset( new, 0, size );
-
-/* If necessary, initialise the virtual function table. */
-/* ---------------------------------------------------- */
-      if ( init ) astInitObjectVtab( vtab, name );
-      if( astOK ) {
-
-/* Initialise the Object data. */
-/* --------------------------- */
-/* Store a unique "magic" value in the Object structure. This will be
-   used (e.g. by astIsAObject) to determine if a pointer identifies a
-   valid Object. Note that this differs from the practice in derived
-   classes, where this number is stored in the virtual function
-   table. We take a different approach here so that we need not follow
-   a pointer to the virtual function table obtained from a structure
-   that hasn't yet been validated as an Object. This minimises the
-   risk of a memory access violation. */
-         new->check = Magic( new, size, status );
-
-/* Associate the Object with its virtual function table. */
-         new->vtab = vtab;
-
-/* Store the Object size and note if its memory was dynamically allocated. */
-         new->size = size;
-         new->dynamic = astIsDynamic( new );
-
-/* Initialise the reference count (of Object pointers in use). */
-         new->ref_count = 1;
-
-/* Initialise the ID strings. */
-         new->id = NULL;
-         new->ident = NULL;
-
-/* Use default values for unspecified attributes. */
-         new->usedefs = CHAR_MAX;
-
-/* Increment the count of active Objects in the virtual function table. */
-         vtab->nobject++;
-      }
-
-/* If an error occurred, clean up by deleting the new Object. Otherwise
-   lock the object for use by the currently executing thread. */
-      if ( !astOK ) {
-         new = astDelete( new );
-
-#ifdef THREAD_SAFE
-      } else {
-         if( pthread_mutex_init( &(new->mutex1), NULL ) != 0 && astOK ) {
-            astError( AST__INTER, "astInitObject(%s): Failed to "
-                      "initialise POSIX mutex1 for the new Object.", status, 
-                      vtab->class );
-         }
-         if( pthread_mutex_init( &(new->mutex2), NULL ) != 0 && astOK ) {
-            astError( AST__INTER, "astInitObject(%s): Failed to "
-                      "initialise POSIX mutex2 for the new Object.", status, 
-                      vtab->class );
-         }
-         new->locker = -1;
-         new->globals = NULL;
-         (void) ManageLock( new, AST__LOCK, 0, NULL, status );
-         if( !astOK ) new = astDelete( new );
-#endif
-      }
-   }
-
-/* Return a pointer to the new Object. */
-   return new;
-}
-
-AstObject *astLoadObject_( void *mem, size_t size, 
-                           AstObjectVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadObject
-
-*  Purpose:
-*     Load an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astLoadObject( void *mem, size_t size, 
-*                               AstObjectVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     Object loader.
-
-*  Description:
-*     This function is provided to load a new Object using data read
-*     from a Channel, and to allocate memory for it if necessary.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for an Object at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Object is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Object data (sizeof(Object)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Object (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Object structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstObject) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Object. If this is NULL, a pointer to
-*        the (static) virtual function table for the Object class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new Object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Object" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   AstObject *new;               /* Pointer to the new Object */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Object. In this case the
-   Object belongs to this class, so supply appropriate values for
-   initialising it and its virtual function table. */
-   if ( !vtab ) {
-      size = sizeof( AstObject );
-      vtab = &class_vtab;
-      name = "Object";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitObjectVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* There is no parent class to load, so simply initialise a new Object
-   structure as if a new Object were being created from scratch. */
-   new = astInitObject( mem, size, 0, vtab, name );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Object" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-      new->id = astReadString( channel, "id", NULL );
-      new->ident = astReadString( channel, "ident", NULL );
-      new->usedefs = astReadInt( channel, "usedfs", CHAR_MAX );
-
-/* We simply read the values for the read-only attributes (just in
-   case they've been un-commented in the external representation) and
-   discard them. This prevents any possibility of error due to un-read
-   input. */
-      (void) astReadInt( channel, "refcnt", 0 );
-      (void) astReadInt( channel, "nobj", 0 );
-
-/* If an error occurred, clean up by deleting the new Object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Object pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astClear_( AstObject *this, const char *attrib, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,Clear))( this, attrib, status );
-}
-void astClearAttrib_( AstObject *this, const char *attrib, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,ClearAttrib))( this, attrib, status );
-}
-void astDump_( AstObject *this, AstChannel *channel, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,Dump))( this, channel, status );
-}
-
-#if defined(THREAD_SAFE)
-int astManageLock_( AstObject *this, int mode, int extra, AstObject **fail,
-                    int *status ) {
-   if( !this ) return 0;
-   return (**astMEMBER(this,Object,ManageLock))( this, mode, extra, fail, status );
-}
-#endif
-
-int astEqual_( AstObject *this, AstObject *that, int *status ) {
-   if ( !astOK ) return 0;
-   if( this == that ) return 1;
-   return (**astMEMBER(this,Object,Equal))( this, that, status );
-}
-const char *astGetAttrib_( AstObject *this, const char *attrib, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Object,GetAttrib))( this, attrib, status );
-}
-void astSetAttrib_( AstObject *this, const char *setting, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,SetAttrib))( this, setting, status );
-}
-void astShow_( AstObject *this, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,Show))( this, status );
-}
-int astTestAttrib_( AstObject *this, const char *attrib, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Object,TestAttrib))( this, attrib, status );
-}
-void astVSet_( AstObject *this, const char *settings, char **text, va_list args, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,VSet))( this, settings, text, args, status );
-}
-int astGetObjSize_( AstObject *this, int *status ) {
-   if ( !astOK || !this ) return 0;
-   return (**astMEMBER(this,Object,GetObjSize))( this, status );
-}
-void astCleanAttribs_( AstObject *this, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Object,CleanAttribs))( this, status );
-}
-AstObject *astCast_( AstObject *this, AstObject *obj, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Object,Cast))( this, obj, status );
-}
-int astSame_( AstObject *this, AstObject *that, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Object,Same))( this, that, status );
-}
-
-/* External interface. */
-/* =================== */
-/* The following relates to the external interface to Objects and not
-   specifically to the implementation of the Object class itself
-   (although it contains external functions which replace the internal
-   versions defined earlier). */
-
-
-/* Type Definitions. */
-/* ----------------- */
-/* Define the Handle structure. This is attached to Objects when they
-   are accessed via the public (external, user-callable) interface.
-   Handles provide a buffer between the Object identifiers issued to
-   external users and the naked C pointers used to handle Objects
-   internally. They also implement the context levels used by
-   astBegin, astEnd, astExempt and astExport (which are only available
-   to external users). */
-typedef struct Handle {
-   AstObject *ptr;               /* C Pointer to the associated Object */
-   int context;                  /* Context level for this Object */
-   int check;                    /* Check value to ensure validity */
-
-#if defined(THREAD_SAFE)
-   int thread;                   /* Identifier for owning thread */
-#endif
-
-#if defined(MEM_DEBUG)
-   int id;                       /* The id associated with the memory block 
-                                    holding the Object last associated with 
-                                    this handle. */
-   AstObjectVtab *vtab;          /* Pointer to the firtual function table of
-                                    the Object last associated with this 
-                                    handle. */
-#endif
-
-/* Links between Handles are implemented using integer offsets rather
-   than through pointers. */
-   int flink;                    /* Backward link to previous Handle */
-   int blink;                    /* Forward link to next Handle */
-} Handle;
-
-/* Define a union with an overlapping int and AstObject*. This is used
-   to transfer an integer bit pattern into and out of a pointer
-   variable used to store an Object identifier. This avoids any
-   implementation dependent aspects of integer-to-pointer
-   conversions. */
-typedef union IdUnion {
-   AstObject *pointer;
-   int integer;
-} IdUnion;
-
-/* Define a union which allows a bit pattern to be accessed as a
-   signed or unsigned int. */
-typedef union MixedInts {
-   int i;
-   unsigned u;
-} MixedInts;
-
-/* Static Variables. */ 
-/* ----------------- */ 
-/* The array of Handle structures is a pool of resources available to all
-   threads. Each thread has its own conext level and its own "active_handles" 
-   array to identify the first Handle at each context level. */
-static Handle *handles = NULL; /* Pointer to allocated array of Handles */ 
-static int free_handles = -1; /* Offset to head of free Handle list */ 
-static int nhandles = 0; /* Number of Handles in "handles" array */ 
-static unsigned nids = 0; /* Number of IDs issued to external users */
-
-#if defined(THREAD_SAFE)
-static int unowned_handles = -1; /* Offset to head of unowned Handle
-                                    list. In a single threaded environment, 
-                                    all handles must be owned by a thread. */ 
-#endif
-
-#ifdef MEM_DEBUG
-static int Watched_Handle = -1; /* A handle index to be watched. Activity
-                                   on this handle is reported using 
-                                   astHandleUse and astHandleAlarm. */
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* --------------------------------------- */
-/* MYSTATIC should normally be set to "static" to make the following
-   function have local symbols. But it may be set to blank for debugging 
-   purposes in order to enable these functions to appear in a backtrace 
-   such as produced by the astBacktrace function. */
-#define MYSTATIC
-
-/* Private functions associated with the external interface. */
-MYSTATIC AstObject *AssocId( int, int * );
-MYSTATIC int CheckId( AstObject *, int, int * );
-MYSTATIC void AnnulHandle( int, int * );
-MYSTATIC void InitContext( int * );
-MYSTATIC void InsertHandle( int, int *, int * );
-MYSTATIC void RemoveHandle( int, int *, int * );
-
-#if defined(MEM_DEBUG)
-MYSTATIC void CheckList( int *, int * );
-MYSTATIC void CheckInList( int, int *, int, int * );
-MYSTATIC int CheckThread( int, int *, int * );
-MYSTATIC const char *HandleString( int, char * );
-MYSTATIC const char *HeadString( int *, char * );
-#endif
-
-
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstObject *astDeleteId_( AstObject *, int * );
-void astBegin_( void );
-void astEnd_( int * );
-void astExemptId_( AstObject *, int * );
-void astImportId_( AstObject *, int * );
-void astSetId_( void *, const char *, ... );
-void astLockId_( AstObject *, int, int * );
-void astUnlockId_( AstObject *, int, int * );
-
-
-/* External Interface Functions. */
-/* ----------------------------- */
-MYSTATIC void AnnulHandle( int ihandle, int *status ) {
-/*
-*  Name:
-*     AnnulHandle
-
-*  Purpose:
-*     Annul a Handle and its associated Object pointer.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void AnnulHandle( int ihandle, int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function annuls an active Handle by annulling the Object
-*     pointer it is associated with, deactivating the Handle and
-*     returning it to the free Handle list for re-use.
-*
-*     The reference count for the associated Object is decremented by
-*     this function and the Object will be deleted if this reference
-*     count falls to zero.
-
-*  Parameters:
-*     ihandle
-*        Array offset that identifies the Handle to be annulled in the
-*        "handles" array. This is fully validated by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The Handle supplied should be active, otherwise an error will
-*     result and the Handle will not be touched (but no error report
-*     will be made if the global error status has already been set).
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   AstObject *ptr;               /* Object pointer */
-   int context;                  /* Context level where Handle was issued */
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Check that the handle offset supplied is valid and report an error
-   if it is not (but only if the global error status has not already
-   been set). */
-   if ( ( ihandle < 0 ) || ( ihandle >= nhandles ) ) {
-      if ( astOK ) {
-         astError( AST__INHAN, "astAnnulHandle: Invalid attempt to annul an "
-                   "Object Handle (no. %u).", status, ihandle );
-         astError( AST__INHAN, "This Handle number is not valid (possible "
-                   "internal programming error)." , status);
-      }
-
-/* If OK, obtain the Handle's context level. */
-   } else {
-      context = handles[ ihandle ].context;
-
-/* If this indicates that the Handle isn't active, then report an
-   error (but only if the global error status has not already been
-   set). We allow handles that are currently not owned by any thread to
-   be annulled. */
-      if ( context < 0 && context != UNOWNED_CONTEXT ) {
-         if ( astOK ) {
-            astError( AST__INHAN, "astAnnulHandle: Invalid attempt to annul "
-                      "an Object Handle (no. %u).", status, ihandle );
-            astError( AST__INHAN, "This Handle is not active (possible "
-                      "internal programming error)." , status);
-         }
-
-/* If the Handle is active, annul its Object pointer. The astAnnul
-   function may call Delete functions supplied by any class, and these
-   Delete functions may involve annulling external Object IDs, which in 
-   turn requires access to the handles array. For this reason, we release 
-   the mutex that protects access to the handles arrays so that it can 
-   potentially be re-aquired within astAnnul without causing deadlock. */
-      } else {
-
-#ifdef MEM_DEBUG
-         astHandleUse( ihandle, "annulled using check value %d ",
-                       handles[ ihandle ].check  );
-#endif
-
-         ptr = handles[ ihandle ].ptr;
-         UNLOCK_MUTEX2;
-         ptr = astAnnul( ptr );
-         LOCK_MUTEX2;
-
-/* Remove the Handle from the active list for its context level. */
-         if( context == UNOWNED_CONTEXT ) {
-
-#if defined(THREAD_SAFE)
-            RemoveHandle( ihandle, &unowned_handles, status );
-#else
-            if( astOK ) astError( AST__INTER, "AnnulHandle: reference to "
-                         "'unowned_handles' in a non-thread-safe context "
-                         "(internal AST programming error).", status );
-#endif
-
-         } else if( active_handles ) {
-            RemoveHandle( ihandle, &active_handles[ context ], status );
-
-         } else if( astOK ){
-            astError( AST__INTER, "AnnulHandle: active_handles array has "
-                      "not been initialised (internal AST programming error).",
-                      status );
-         }
-
-/* Reset the Handle's "context" value (making it inactive) and its "check" 
-   value (so it is no longer associated with an identifier value). */
-         handles[ ihandle ].ptr = NULL;
-         handles[ ihandle ].context = INVALID_CONTEXT;
-         handles[ ihandle ].check = 0;
-#if defined(THREAD_SAFE)
-         handles[ ihandle ].thread = -1;
-#endif
-
-/* Place the modified Handle on the free Handles list ready for re-use. */
-         InsertHandle( ihandle, &free_handles, status );
-
-      }
-   }
-}
-
-AstObject *astAnnulId_( AstObject *this_id, int *status ) {
-/*
-*+
-*  Name:
-*     AnnulId
-
-*  Purpose:
-*     Annul an external Object identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astAnnulId( AstObject *this )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astAnnul method. It accepts an active Object identifier, which
-*     it annuls, causing the associated Handle to be deactivated and
-*     returned to the free Handles list for re-use. It also causes the
-*     reference count of the associated Object to be decremented and
-*     the Object to be deleted if this reference count falls to zero.
-
-*  Parameters:
-*     this
-*        The Object identifier to be annulled.
-
-*  Returned Value:
-*     A NULL C pointer is always returned (this should be translated
-*     into an identifier value of zero for external use).
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set.
-*     - The identifier supplied should be associated with an active
-*     Object, otherwise an error will result (but no error report will
-*     be made if the global error status has already been set).
-*     - This function is invoked via the astAnnul macro for external use.
-*     For internal use (from protected code which needs to handle external
-*     IDs) it should be invoked via the astAnnulId macro (since astAnnul
-*     expects a true C pointer as its argument when used internally).
-*-
-*/
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object (this generates an
-   error if it doesn't). Note, we use "astMakePointer_NoLockCheck",
-   rather than the usual "astMakePointer" since a thread should be able
-   to renounce interest in an object without needing to own the object.
-   If we used "astMakePointer" then a thread could not annul a pointer
-   unless it owned the object. But having annulled the pointer it could
-   then not unlock the object for use by another thread (since the
-   pointer it would need to do this has just been annulled). */
-   if ( !astIsAObject( astMakePointer_NoLockCheck( this_id ) ) ) return NULL;
-
-/* Obtain the Handle offset for this Object and annul the Handle and
-   its associated Object pointer. */
-   LOCK_MUTEX2;
-   AnnulHandle( CheckId( this_id, 0, status ), status );
-   UNLOCK_MUTEX2;
-
-/* Always return a NULL pointer value. */
-   return NULL;
-}
-
-MYSTATIC AstObject *AssocId( int ihandle, int *status ) {
-/*
-*  Name:
-*     AssocId
-
-*  Purpose:
-*     Associate an identifier value with a Handle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *AssocId( int ihandle )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function takes a zero-based offset into the "handles" array
-*     that identifies a Handle associated with an active Object. It
-*     encodes this into an identifier value to be issued to an
-*     external user to identify that Handle and its Object, and then
-*     associates this identifier value with the Handle.
-
-*  Parameters:
-*     ihandle
-*        Offset in the "handles" array that identifies the Handle,
-*        which should be active (i.e. associated with an active
-*        Object). This function will modify the "check" field in this
-*        Handle to associate it with the identifier value it returns.
-
-*  Returned Value:
-*     The resulting identifier value.
-
-*  Notes:
-*     - The returned identifier value is, in fact, an int.  This
-*     allows the value to be passed easily to other languages
-*     (e.g. Fortran) and stored as an integer without loss of
-*     information.
-*     - The value is stored within C code as type AstObject*.  This
-*     means that C code (e.g. function prototypes, etc.) need not be
-*     aware that an identifier (as opposed to an Object pointer) is
-*     being used, even though the actual bit patterns will be
-*     different. The same C code can then be used for both internal
-*     and external purposes so long as care is taken to convert
-*     between the two representations at appropriate points.
-*     - The reverse operation (conversion of an ID back to a handle
-*     offset) is performed by CheckId.
-*     - A zero identifier value will be returned if this function is
-*     invoked with the global status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstObject *result;            /* Pointer value to return */
-   MixedInts test;               /* Union for testing encoding */
-   MixedInts work;               /* Union for encoding ID value */
-
-/* Initialise. */
-   result = astI2P( 0 );
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Copy the Handle offset and clear the lowest 8 bits by shifting
-   left. */
-   work.i = ihandle;
-   work.u = work.u << 8U;
-
-/* Make a copy of the result shifted right again. Test if any bits
-   have been lost in this process. If so, there are too many Handles
-   in use at once to encode them into IDs, so report an error. */
-   test.u = work.u >> 8U;
-   if ( test.i != ihandle ) {
-      astError( AST__XSOBJ, "AssocId(%s): There are too many AST Objects in "
-                "use at once.", status, astGetClass( handles[ ihandle ].ptr ) );
-
-/* If OK, scramble the value by exclusive-ORing with the bit pattern
-   in AST__FAC (a value unique to this library), also shifted left by
-   8 bits. This makes it even less likely that numbers from other
-   sources will be accepted in error as valid IDs. */
-   } else {
-      work.u ^= ( ( (unsigned) AST__FAC ) << 8U );
-
-/* Fill the lowest 8 bits with a count of the total number of IDs
-   issued so far (which we increment here). This makes each ID unique,
-   so that an old one that identifies a Handle that has been annulled
-   and re-used (i.e. associated with a new ID) can be spotted.  We
-   only use the lowest 8 bits of this count because this provides
-   adequate error detection to reveal programming errors and we do not
-   need higher security than this. We also prevent a count of zero
-   being used, as this could result in a zero identifier value (this
-   being reserved as the "null" value). */
-      if ( ++nids > 255U ) nids = 1U;
-      work.u |= nids;
-
-/* Store the value as a check count in the Handle. This will be used
-   to validate the ID in future. */
-      handles[ ihandle ].check = work.i;
-
-/* Pack the value into the pointer to be returned. */
-      result = astI2P( work.i );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astBegin_( void ) {
-/*
-*++
-*  Name:
-c     astBegin
-f     AST_BEGIN
-
-*  Purpose:
-*     Begin a new AST context.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astBegin
-f     CALL AST_BEGIN( STATUS )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-c     This macro invokes a function to begin a new AST context.
-c     Any Object pointers
-f     This routine begins a new AST context. Any Object pointers
-*     created within this context will be annulled when it is later
-c     ended using astEnd (just as if astAnnul had been invoked),
-f     ended using AST_END (just as if AST_ANNUL had been invoked),
-c     unless they have first been exported using astExport or rendered
-c     exempt using astExempt. If
-f     unless they have first been exported using AST_EXPORT or rendered
-f     exempt using AST_EXEMPT. If
-*     annulling a pointer causes an Object's RefCount attribute to
-*     fall to zero (which happens when the last pointer to it is
-*     annulled), then the Object will be deleted.
-
-f  Parameters:
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This macro applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-c     - astBegin attempts to execute even if the AST error status
-c     is set on entry.
-f     - This routine attempts to execute even if STATUS is set to an
-f     error value.
-c     - Contexts delimited by astBegin and astEnd may be nested to any
-c     depth.
-f     - Contexts delimited by AST_BEGIN and AST_END may be nested to any
-f     depth.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int stat;                     /* Copy of global status */
-   int *status;                  /* Pointer to inherited status value */
-  
-/* Get a pointer to thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Now that the thread-specific data has been initialised, we can get a
-   pointer to the threads inherited status value. */
-   status = astGetStatusPtr;
-
-/* Save and clear the global status so that memory allocation can be
-   performed within this function even under error conditions. */
-   stat = astStatus;
-   astClearStatus;
-
-/* Ensure that the active_handles array has been initialised. */
-   if ( !active_handles ) InitContext( status );
-
-/* Extend the "active handles" array to accommodate a new context
-   level. This array contains integer offsets into the "handles" array
-   to identify the handle which is at the head of the list of active
-   handles for each context level. */
-   astBeginPM;
-   active_handles = astGrow( active_handles, context_level + 2,
-                             sizeof( int ) );
-   astEndPM;
-
-/* Initialise the array element for the new context level to indicate
-   an empty Handle list. */
-   if ( astOK ) active_handles[ ++context_level ] = -1;
-
-/* Restore the original global status value. */
-   astSetStatus( stat );
-}
-
-MYSTATIC int CheckId( AstObject *this_id, int lock_check, int *status ) {
-/*
-*  Name:
-*     CheckId
-
-*  Purpose:
-*     Check an identifier value and convert it into a Handle offset.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int CheckId( AstObject *this, int lock_check, int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function takes an identifier value encoded by AssocId and
-*     validates it to ensure it is associated with an active
-*     Handle. If valid, it converts it back into a zero-based offset
-*     which may be used to access the Handle in the "handles"
-*     array. Otherwise, an error is reported.
-
-*  Parameters:
-*     this
-*        The identifier value to be decoded.
-*     lock_check
-*        Should an error be reported if the handle is in an Object
-*        context for a different thread?
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The resulting Handle offset, or -1 if the identifier is not
-*     valid or any other error occurs.
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set, but no further error report will be made if it
-*     fails under these circumstances.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   MixedInts work;               /* Union for decoding ID value */
-   int id;                       /* ID value as an int */
-   int ihandle;                  /* Result to return */
-
-#ifdef MEM_DEBUG
-   int oldok = astOK;
-#endif
-
-/* Initialise. */
-   ihandle = -1;
-
-/* Get a pointer to thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Retrieve the integer Object identifier value from the pointer
-   supplied. */
-   id = astP2I( this_id );
-
-/* Check if a value of zero has been supplied and report an error if
-   it has. */
-   if ( !id ) {
-      if ( astOK ) {
-         astError( AST__OBJIN, "Invalid Object pointer given (value is "
-                   "zero)." , status);
-      }
-
-/* If OK, reverse the encoding process performed by AssocId to
-   retrieve the Handle offset. */
-   } else {
-      work.i = id;
-      work.u = ( work.u ^ ( ( (unsigned) AST__FAC ) << 8U ) ) >> 8U;
-
-/* Check that the offset obtained doesn't extend beyond the limits of
-   the "handles" array. Report an error if it does. */
-      if ( ( work.i < 0 ) || ( work.i >= nhandles ) ) {
-         if ( astOK ) {
-            astError( AST__OBJIN, "Invalid Object pointer given (value is "
-                      "%d).", status, id );
-         }
-
-/* See if the "check" field matches the ID value and the Handle is
-   valid (i.e. is associated with an active Object). If not, the
-   Handle has been annulled and possibly re-used, so report an
-   error. */
-      } else if ( ( handles[ work.i ].check != id ) ||
-                  ( handles[ work.i ].context == INVALID_CONTEXT ) ) {
-         if ( astOK ) {
-            astError( AST__OBJIN, "Invalid Object pointer given (value is "
-                      "%d).", status, id  );
-            astError( AST__OBJIN, "This pointer has been annulled, or the "
-                      "associated Object deleted." , status);
-         }
-#if defined(THREAD_SAFE)
-      } else if(  lock_check && handles[ work.i ].context != UNOWNED_CONTEXT &&
-                                handles[ work.i ].thread != AST__THREAD_ID ) {
-         if ( astOK ) {
-            astError( AST__OBJIN, "Invalid Object pointer given (value is "
-                      "%d).", status, id  );
-            astError( AST__OBJIN, "This pointer is currently locked by "
-                      "another thread." , status);
-         }
-#endif
-
-/* If OK, set the Handle offset to be returned. */
-      } else {
-         ihandle = work.i;
-      }
-
-#ifdef MEM_DEBUG
-      if ( oldok && !astOK && ( work.i >= 0 ) && ( work.i < nhandles ) ) {
-         char buf[200];
-         astError( astStatus, "Handle properties: %s ", status,
-                   HandleString( work.i, buf ) );
-      }
-#endif
-
-   }
-
-/* Return the result. */
-   return ihandle;
-}
-
-AstObject *astDeleteId_( AstObject *this_id, int *status ) {
-/*
-*+
-*  Name:
-*     astDeleteId
-
-*  Purpose:
-*     Delete an Object via an identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astDeleteId_( AstObject *this )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astDelete method. It accepts an active Object identifier and
-*     deletes the associated Object. Before doing so, it annuls all
-*     active identifiers associated with the object, deactivates their
-*     Handles and returns these Handles to the free Handles list for
-*     re-use.
-
-*  Parameters:
-*     this
-*        An identifier for the Object to be deleted.
-
-*  Returned Value:
-*     A NULL C pointer is always returned (this should be translated
-*     into an identifier value of zero for external use).
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set.
-*     - The identifier supplied should be associated with an active
-*     Object, otherwise an error will result (but no error report will
-*     be made if the global error status has already been set).
-*     - Although this function is documented as "private" and should
-*     not be invoked directly from outside this class, it is not a
-*     static function and has a public prototype. This is because it
-*     must be invoked via the astDelete macro (defined in the
-*     "object.h" include file) as part of the public interface.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *this;              /* Pointer to Object */
-   int i;                        /* Loop counter for Handles */
-   int ihandle;                  /* Object Handle offset */
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object (this generates an
-   error if it doesn't). */
-   if ( !astIsAObject( this = astMakePointer( this_id ) ) ) return NULL;
-
-/* Gain exclusive access to the handles array. */
-   LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
-   ihandle = CheckId( this_id, 1, status );
-   if ( ihandle != -1 ) {
-
-/* Since the Object is to be deleted, we must annul all identifiers
-   that refer to it.  Loop to inspect each currently allocated Handle
-   in the "handles" array. */
-      for ( i = 0; i < nhandles; i++ ) {
-
-/* Select active handles and test if their Object pointer refers to
-   the Object to be deleted. */
-         if ( ( handles[ i ].context != INVALID_CONTEXT ) &&
-              ( handles[ i ].ptr == this ) ) {
-
-/* If so, explicitly set the reference count for the Object to 2 so
-   that it will not be deleted (yet) when we annul the pointer
-   associated with the Handle. */
-            handles[ i ].ptr->ref_count = 2;
-
-/* Annul the Handle, which frees its resources, decrements the Object
-   reference count and makes any ID associated with the Handle become
-   invalid. */
-            AnnulHandle( i, status );
-         }
-      }
-
-/* If required, tell the user that the handle's object has been deleted. */
-#ifdef MEM_DEBUG
-      astHandleUse( ihandle, "object-deleted" );
-#endif
-   }
-
-   UNLOCK_MUTEX2;
-
-/* When all Handles associated with the Object have been annulled,
-   delete the object itself. This over-rides the reference count and
-   causes any remaining pointers to the Object (e.g. in internal code
-   or within other Objects) to become invalid. */
-   this = astDelete( this );
-
-/* Always return a NULL pointer value. */
-   return NULL;
-}
-
-void astEnd_( int *status ) {
-/*
-*++
-*  Name:
-c     astEnd
-f     AST_END
-
-*  Purpose:
-*     End an AST context.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astEnd
-f     CALL AST_END( STATUS )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-c     This macro invokes a function to end an AST context which was
-f     This routine ends an AST context which was
-c     begun with a matching invocation of astBegin. Any Object
-f     begun with a matching invocation of AST_BEGIN. Any Object
-*     pointers created within this context will be annulled (just as
-c     if astAnnul had been invoked) and will cease to be valid
-f     if AST_ANNUL had been invoked) and will cease to be valid
-*     afterwards, unless they have previously been exported using
-c     astExport or rendered exempt using astExempt.
-f     AST_EXPORT or rendered exempt using AST_EXEMPT.
-*     If annulling a pointer causes an Object's RefCount attribute to
-*     fall to zero (which happens when the last pointer to it is
-*     annulled), then the Object will be deleted.
-
-*  Parameters:
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This macro applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-c     - astEnd attempts to execute even if the AST error status is set.
-f     - This routine attempts to execute even if STATUS is set to an
-f     error value.
-c     - Contexts delimited by astBegin and astEnd may be nested to any
-c     depth.
-f     - Contexts delimited by AST_BEGIN and AST_END may be nested to any
-f     depth.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int ihandle;                  /* Offset of Handle to be annulled */
-  
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Check that the current context level is at least 1, otherwise there
-   has been no matching use of astBegin, so report an error (unless
-   the global status has already been set). */
-   if ( context_level < 1 ) {
-      if ( astOK ) {
-         astError( AST__ENDIN, "astEnd: Invalid use of astEnd without a "
-                   "matching astBegin." , status);
-      }
-
-/* If OK, loop while there are still active Handles associated with
-   the current context level. First gain exclusive access to the handles
-   array. */
-   } else if ( active_handles ) {
-      LOCK_MUTEX2;
-      while ( ( ihandle = active_handles[ context_level ] ) != -1 ) {
-
-/* Annul the Handle at the head of the active Handles list. */
-         AnnulHandle( ihandle, status );
-
-/* It is just posible that under error conditions inactive Handles
-   might get left in the active_handles list and AnnulHandle would
-   then fail. Since this would result in an infinite loop, we check to
-   see if the handle we have just annulled is still in the list. If
-   so, transfer it to the free Handles list for re-use. */
-         if ( ihandle == active_handles[ context_level ] ) {
-            RemoveHandle( ihandle, &active_handles[ context_level ], status );
-            InsertHandle( ihandle, &free_handles, status );
-         }
-      }
-
-/* Ensure the context level is decremented unless it was zero to start
-   with. */
-      context_level--;
-
-/* Relinquish access to the handles array. */
-      UNLOCK_MUTEX2;
-   }
-
-}
-
-void astExemptId_( AstObject *this_id, int *status ) {
-/*
-*++
-*  Name:
-c     astExempt
-f     AST_EXEMPT
-
-*  Purpose:
-*     Exempt an Object pointer from AST context handling.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astExempt( AstObject *this )
-f     CALL AST_EXEMPT( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function exempts an Object pointer from AST context
-f     This routine exempts an Object pointer from AST context
-c     handling, as implemented by astBegin and astEnd. This means that
-f     handling, as implemented by AST_BEGIN and AST_END. This means that
-c     the pointer will not be affected when astEnd is invoked and will
-f     the pointer will not be affected when AST_END is called and will
-*     remain active until the end of the program, or until explicitly
-c     annulled using astAnnul.
-f     annulled using AST_ANNUL.
-*
-c     If possible, you should avoid using this function when writing
-f     If possible, you should avoid using this routine when writing
-*     applications. It is provided mainly for developers of other
-*     libraries, who may wish to retain references to AST Objects in
-*     internal data structures, and who therefore need to avoid the
-c     effects of astBegin and astEnd.
-f     effects of AST_BEGIN and AST_END.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Object pointer to be exempted from context handling.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-*--
-
-*  Implementation Notes:
-*     - This function does not exist in the "protected" interface to
-*     the Object class and is not available to other class
-*     implementations.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int context;                  /* Handle context level */
-   int ihandle;                  /* Offset of Handle in "handles" array */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object. */
-   (void) astCheckObject( astMakePointer( this_id ) );
-   if ( astOK ) {
-
-/* Gain exclusive access to the handles array. */
-      LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
-      ihandle = CheckId( this_id, 1, status );
-      if ( ihandle != -1 ) {
-
-/* Extract the context level at which the Object was created. */
-         context = handles[ ihandle ].context;
-
-/* Set the new context level to zero, where it cannot be affected by
-   ending any context. */
-         handles[ ihandle ].context = 0;
-
-/* Remove the object's Handle from its original active Handles list
-   and insert it into the list appropriate to its new context
-   level. */
-
-#if defined(THREAD_SAFE)
-         if( context == UNOWNED_CONTEXT ) {
-            RemoveHandle( ihandle, &unowned_handles, status );
-         } else {
-            RemoveHandle( ihandle, &active_handles[ context ], status );
-         }
-#else
-         RemoveHandle( ihandle, &active_handles[ context ], status );
-#endif
-
-         InsertHandle( ihandle, &active_handles[ 0 ], status );
-
-/* If required, tell the user that the handle has been exempted. */
-#ifdef MEM_DEBUG
-         astHandleUse( ihandle, "exempted" );
-#endif
-      }
-
-      UNLOCK_MUTEX2;
-   }
-}
-
-void astExportId_( AstObject *this_id, int *status ) {
-/*
-*++
-*  Name:
-c     astExport
-f     AST_EXPORT
-
-*  Purpose:
-*     Export an Object pointer to an outer context.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astExport( AstObject *this )
-f     CALL AST_EXPORT( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function exports an Object pointer from the current AST context
-f     This routine exports an Object pointer from the current AST context
-*     into the context that encloses the current one. This means that
-*     the pointer will no longer be annulled when the current context
-c     is ended (with astEnd), but only when the next outer context (if
-f     is ended (with AST_END), but only when the next outer context (if
-*     any) ends.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Object pointer to be exported.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-c     - It is only sensible to apply this function to pointers that
-f     - It is only sensible to apply this routine to pointers that
-*     have been created within (or exported to) the current context
-c     and have not been rendered exempt using astExempt.
-f     and have not been rendered exempt using AST_EXEMPT.
-*     Applying it to an unsuitable Object pointer has no effect.
-*--
-
-*  Implementation Notes:
-*     - This function does not exist in the "protected" interface to
-*     the Object class and is not available to other class
-*     implementations.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int context;                  /* Handle context level */
-   int ihandle;                  /* Offset of Handle in "handles" array */
-  
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object. */
-   (void) astCheckObject( astMakePointer( this_id ) );
-   if ( astOK ) {
-
-/* Gain exclusive access to the handles array. */
-      LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
-      ihandle = CheckId( this_id, 1, status );
-      if ( ihandle != -1 ) {
-
-/* Check that the current context level is at least 1 and report an
-   error if it is not. */
-         if ( context_level < 1 ) {
-            if( astOK ) astError( AST__EXPIN, "astExport(%s): Attempt to export an Object "
-                                  "from context level zero.", status,
-                                  astGetClass( handles[ ihandle ].ptr ) );
-
-/* Extract the context level at which the Object was created. */
-         } else {
-            context = handles[ ihandle ].context;
-
-/* Check that the Object's existing context level is high enough to be
-   affected by being exported to the next outer context level. If not,
-   do nothing. */
-            if ( context > ( context_level - 1 ) ) {
-
-/* Set the new context level. */
-               handles[ ihandle ].context = context_level - 1;
-
-/* Remove the object's Handle from its original active Handles list
-   and insert it into the list appropriate to its new context
-   level. */
-               RemoveHandle( ihandle, &active_handles[ context ], status );
-               InsertHandle( ihandle, &active_handles[ context_level - 1 ], 
-                             status );
-
-/* If required, tell the user that the handle has been exempted. */
-#ifdef MEM_DEBUG
-               astHandleUse( ihandle, "exported from context level %d",
-                              context_level );
-#endif
-            }
-         }
-      }
-      UNLOCK_MUTEX2;
-   }
-}
-
-void astImportId_( AstObject *this_id, int *status ) {
-/*
-*++
-*  Name:
-c     astImport
-f     AST_IMPORT
-
-*  Purpose:
-*     Import an Object pointer to the current context.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     void astImport( AstObject *this )
-f     CALL AST_IMPORT( THIS, STATUS )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     imports an Object pointer that was created in a higher or lower
-*     level context, into the current AST context.
-*     This means that the pointer will be annulled when the current context
-c     is ended (with astEnd).
-f     is ended (with AST_END).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Object pointer to be imported.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Object
-c        This function applies to all Objects.
-f        This routine applies to all Objects.
-
-*--
-
-*  Implementation Notes:
-*     - This function does not exist in the "protected" interface to
-*     the Object class and is not available to other class
-*     implementations.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   int context;                  /* Handle context level */
-   int ihandle;                  /* Offset of Handle in "handles" array */
-  
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object. */
-   (void) astCheckObject( astMakePointer( this_id ) );
-   if ( astOK ) {
-
-/* Gain exclusive access to the handles array. */
-      LOCK_MUTEX2;
-
-/* Obtain the Handle offset for this Object. */
-      ihandle = CheckId( this_id, 1, status );
-      if ( ihandle != -1 ) {
-
-/* Extract the context level at which the Object was created. */
-         context = handles[ ihandle ].context;
-
-/* Do nothing if the Identifier already belongs to the current context. */
-         if( context != context_level ) {
-
-/* Set the new context level. */
-            handles[ ihandle ].context = context_level;
-
-/* Remove the object's Handle from its original active Handles list
-   and insert it into the list appropriate to its new context
-   level. */
-            RemoveHandle( ihandle, &active_handles[ context ], status );
-            InsertHandle( ihandle, &active_handles[ context_level ], status );
-
-/* If required, tell the user that the handle has been imported. */
-#ifdef MEM_DEBUG
-            astHandleUse( ihandle, "imported into context level %d",
-                           context_level );
-#endif
-         }
-      }
-      UNLOCK_MUTEX2;
-   }
-}
-
-void astLockId_( AstObject *this_id, int wait, int *status ) {
-/*
-c++
-*  Name:
-*     astLock
-
-*  Purpose:
-*     Lock an Object for exclusive use by the calling thread.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astLock( AstObject *this, int wait )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     The thread-safe public interface to AST is designed so that an
-*     error is reported if any thread attempts to use an Object that it
-*     has not previously locked for its own exclusive use using this 
-*     function. When an Object is created, it is initially locked by the
-*     thread that creates it, so newly created objects do not need to be
-*     explicitly locked. However, if an Object pointer is passed to
-*     another thread, the original thread must first unlock it (using 
-*     astUnlock) and the new thread must then lock it (using astLock)
-*     before the new thread can use the Object.
-*
-*     The "wait" parameter determines what happens if the supplied Object 
-*     is curently locked by another thread when this function is invoked.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be locked.
-*     wait
-*        If the Object is curently locked by another thread then this
-*        function will either report an error or block. If a non-zero value 
-*        is supplied for "wait", the calling thread waits until the object 
-*        is available for it to use. Otherwise, an error is reported and 
-*        the function returns immediately without locking the Object.
-
-*  Applicability:
-*     Object
-*        This function applies to all Objects.
-
-*  Notes:
-*     - The astAnnul function is exceptional in that it can be used on 
-*     pointers for Objects that are not currently locked by the calling
-*     thread. All other AST functions will report an error.
-*     - The Locked object will belong to the current AST context.
-*     - This function returns without action if the Object is already 
-*     locked by the calling thread.
-*     - If simultaneous use of the same object is required by two or more
-*     threads, astCopy should be used to to produce a deep copy of 
-*     the Object for each thread. Each copy should then be unlocked by 
-*     the parent thread (i.e. the thread that created the copy), and then 
-*     locked by the child thread (i.e. the thread that wants to use the
-*     copy).
-*     - This function is only available in the C interface.
-*     - This function returns without action if the AST library has 
-*     been built without POSIX thread support (i.e. the "-with-pthreads" 
-*     option was not specified when running the "configure" script).
-c--
-*/
-
-/* This function odes nothing if thread support is not enabvled. */
-#if defined(THREAD_SAFE)
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   AstObject *fail;              /* Pointer to Object that failed to lock */
-   AstObject *this;              /* Pointer to Object */
-   int ihandle;                  /* Index of supplied objetc handle */
-   int lstat;                    /* Local status value */
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object (this generates an
-   error if it doesn't). Note, we use the "astMakePointer_NoLockCheck",
-   since the usual "astMakePointer" macro invokes astCheckLock to report 
-   an error if the Object is not currently locked by the calling thread. */
-   if ( !astIsAObject( this = astMakePointer_NoLockCheck( this_id ) ) ) return;
-
-/* Ensure the global data for this class is accessable. Do not use the
-   globals pointer stored in "*this" because "*this" may be locked by
-   another thread and so we would pick up the wrong globals. */
-   astGET_GLOBALS(NULL);
-
-/* Ensure the running thread has sole access to the static handles arrays. */
-   LOCK_MUTEX2;
-
-/* Ensure the Handles arrays have been initialised. */
-   if ( !active_handles ) InitContext( status );
-
-/* Get the Handle index for the supplied object identifier. No error is
-   reported if the handle is not curently associated with a thread.
-   However, an error is reported if the Handle is associated with any
-   thread other than the running thread. */
-   ihandle = CheckId( this_id, 0, status );
-
-/* We've finished with the handles arrays, for the moment. */
-   UNLOCK_MUTEX2;
-
-/* Check the object pointer was valid. */
-   if( ihandle != -1 ){
-
-/* The protected astManageLock function implements the public functions, 
-   astLock and astUnlock. */
-      lstat = astManageLock( this, AST__LOCK, wait, &fail );
-      if( astOK ) {
-         if( lstat == 1 ) {
-            if( fail == this ) {
-               astError( AST__LCKERR, "astLock(%s): Failed to lock the %s because"
-                         " it is already locked by another thread (programming "
-                         "error).", status, astGetClass( this ), 
-                         astGetClass( this ) );
-
-            } else {
-               astError( AST__LCKERR, "astLock(%s): Failed to lock the %s because"
-                         " a %s contained within it is already locked by another "
-                         "thread (programming error).", status, 
-                         astGetClass( this ), astGetClass( this ),
-                         astGetClass( fail ) );
-            }
-
-         } else if( lstat == 2 ) {
-            astError( AST__LCKERR, "astLock(%s): Failed to lock a POSIX mutex.", status,
-                      astGetClass( this ) );
-
-/* If the Object is now locked for the running thread... */
-         } else {
-
-/* We need access to the handles arrays again. */
-            LOCK_MUTEX2;
-
-/* If the supplied handle is not currently assigned to any thread, assign 
-   it to the running thread. */
-            if( handles[ ihandle ].context == UNOWNED_CONTEXT ) {
-               RemoveHandle( ihandle, &unowned_handles, status );
-
-#if defined(MEM_DEBUG)
-               astHandleUse( ihandle, "locked by thread %d at context level %d",
-                             handles[ ihandle ].thread, context_level );
-#endif
-
-               handles[ ihandle ].thread = AST__THREAD_ID;
-               handles[ ihandle ].context = context_level;
-               InsertHandle( ihandle, &active_handles[ context_level ], 
-                                status );
-            }
-
-/* Finished with the handles arrays again. */
-            UNLOCK_MUTEX2;
-         }
-      }
-   }
-#endif
-}
-
-void astUnlockId_( AstObject *this_id, int report, int *status ) {
-/*
-c++
-*  Name:
-*     astUnlock
-
-*  Purpose:
-*     Unlock an Object for use by other threads.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astUnlock( AstObject *this, int report )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     Unlocks an Object previously locked using astLock, so that other
-*     threads can use the Object. See astLock for further details.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be unlocked.
-*     report
-*        If non-zero, an error will be reported if the supplied Object,
-*        or any Object contained within the supplied Object, is not
-*        currently locked by the running thread. If zero, such Objects
-*        will be left unchanged, and no error will be reported.
-
-*  Applicability:
-*     Object
-*        This function applies to all Objects.
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set, but no further error report will be made if it
-*     subsequently fails under these circumstances.
-*     - All unlocked Objects are excluded from AST context handling until
-*     they are re-locked using astLock.
-*     - This function is only available in the C interface.
-*     - This function returns without action if the Object is not currently 
-*     locked by any thread. If it is locked by the running thread, it is
-*     unlocked. If it is locked by another thread, an error will be reported 
-*     if "error" is non-zero.
-*     - This function returns without action if the AST library has 
-*     been built without POSIX thread support (i.e. the "-with-pthreads" 
-*     option was not specified when running the "configure" script).
-c--
-*/
-
-/* This function odes nothing if thread support is not enabvled. */
-#if defined(THREAD_SAFE)
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   AstErrorContext error_context;/* Info about the current error context */
-   AstObject *fail;              /* Pointer to Object that failed */
-   AstObject *this;              /* Pointer to Object */
-   int ihandle;                  /* Index of supplied objetc handle */
-   int lstat;                    /* Local status value */
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object (this generates an
-   error if it doesn't). Note, we use the "astMakePointer_NoLockCheck",
-   since the usual "astMakePointer" macro invokes astCheckLock to report 
-   an error if the Object is not currently locked by the calling thread. */
-   if ( !astIsAObject( this = astMakePointer_NoLockCheck( this_id ) ) ) return;
-
-/* Ensure the global data for this class is accessable. */
-   astGET_GLOBALS(this);
-
-/* Start a new error reporting context. This saves any existing error status 
-   and then clear the status value. It also defer further error reporting. */
-   astErrorBegin( &error_context );
-
-/* Ensure the running thread has sole access to the static handles arrays. */
-   LOCK_MUTEX2;
-
-/* Ensure the Handles arrays have been initialised. */
-   if ( !active_handles ) InitContext( status );
-
-/* Get the Handle index for the supplied object identifier. Report an error 
-   if the handle is not curently associated with the running thread. */
-   ihandle = CheckId( this_id, 1, status );
-
-/* Break the associated of the handle with the current thread so that the 
-   handle is not assigned to any thread. We do this before unlocking the
-   Object structure (using astManageLock) since as soon as astManageLock
-   returns, another thread that is waiting for the object to be unlocked
-   may start up and modify the handle properties. */
-   if( handles[ ihandle ].context >= 0 ) {
-      RemoveHandle( ihandle, &active_handles[ handles[ ihandle ].context ], 
-                    status );
-#if defined(MEM_DEBUG)
-      astHandleUse( ihandle, "unlocked from thread %d at context "
-                    "level %d", handles[ ihandle ].thread, 
-                    handles[ ihandle ].context );
-#endif
-      handles[ ihandle ].thread = -1;
-      handles[ ihandle ].context = UNOWNED_CONTEXT;
-      InsertHandle( ihandle, &unowned_handles, status );
-   }
-
-/* We've finished with the handles arrays, for the moment. */
-   UNLOCK_MUTEX2;
-
-/* Check the supplied object pointer was valid. */
-   if( ihandle != -1 ){
-
-/* The protected astManageLock function implements the public functions, 
-   astLock and astUnlock. */
-      lstat = astManageLock( this, AST__UNLOCK, 0, &fail );
-      if( astOK ) {
-         if( lstat == 1 ) {
-            if( report ) {
-               if( fail == this ) {
-                  astError( AST__LCKERR, "astUnlock(%s): Failed to unlock the %s "
-                            "because it is locked by another thread (programming "
-                            "error).", status, astGetClass( this ), 
-                            astGetClass( this ) );
-      
-               } else {
-                  astError( AST__LCKERR, "astUnlock(%s): Failed to unlock the %s "
-                            "because a %s contained within it is locked by another "
-                            "thread (programming error).", status, 
-                            astGetClass( this ), astGetClass( this ),
-                            astGetClass( fail ) );
-               }
-            }   
-   
-         } else if( lstat == 3 ) {
-            astError( AST__LCKERR, "astUnlock(%s): Failed to unlock a POSIX mutex.", status,
-                      astGetClass( this ) );
-
-         } 
-      }
-   }
-
-/* End the error reporting context. If an error has occurred within this
-   function, then this will display the deferred error messages so long
-   as there was no error condition on entry to this function. If there
-   was an error condition on entry, then the original status value will be
-   re-instated. */
-   astErrorEnd( &error_context );
-
-#endif 
-}
-
-AstObject *astI2P_( int integer, int *status ) {
-/*
-*+
-*  Name:
-*     astI2P
-
-*  Purpose:
-*     Pack an integer Object ID into a pointer.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astI2P( int integer )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-*     This function accepts an integer (int) value representing an
-*     Object identifier and packs its bit pattern into a pointer value
-*     (from which it may subsequently be retrieved using astP2I).
-*
-*     These functions should be used to avoid any dependency on
-*     integer-to-pointer conversions (given that the values are not
-*     true pointers) which might affect the exchange of Object
-*     identifier values with other languages, such as Fortran 77,
-*     where they are stored as integers.
-
-*  Parameters:
-*     integer
-*        The integer value to be stored.
-
-*  Returned Value:
-*     The resulting pointer value (which is not usually a valid C pointer).
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*     - This is a protected function in the sense that it is not
-*     intended that external users should invoke it directly.  It is
-*     accessible from external code, however, in order that public
-*     macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
-   IdUnion temp;                 /* Overlapping int and pointer */
-
-/* Clear the pointer value in the "temp" IdUnion and then set the
-   integer part of it to the value to be stored. */
-   temp.pointer = zero_ptr;
-   temp.integer = integer;
-
-/* Return the resulting pointer value. */
-   return temp.pointer;
-}
-
-MYSTATIC void InitContext( int *status ) {
-/*
-*  Name:
-*     InitContext
-
-*  Purpose:
-*     Initialise the first AST context level.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void InitContext( int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function initialises the first AST context level (the level
-*     before any call to astBegin has been made). It should be invoked
-*     once, before any use is made of context levels.
-
-*  Parameters:
-*     status
-*        Pointer to the inherited status variable.
-
-*  Parameters:
-*     None.
-
-*  Notes:
-*     - This function does nothing after the first successful invocation.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Check that the active_handles array hasn't already been allocated. */
-   if ( !active_handles ) {
-
-/* Allocate and initialise the "active_handles" array. */
-
-      astBeginPM;
-      active_handles = astMalloc( sizeof( int ) );
-      astEndPM;
-
-      if ( astOK ) active_handles[ 0 ] = -1;
-   }
-}
-
-MYSTATIC void InsertHandle( int ihandle, int *head, int *status ) {
-/*
-*  Name:
-*     InsertHandle
-
-*  Purpose:
-*     Insert a Handle into a list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void InsertHandle( int ihandle, int *head, int *status )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function inserts a Handle structure into a doubly linked
-*     list of such structures composed of elements drawn from the
-*     "handles" array. The new list member is inserted in front of the
-*     member previously occupying the "head of list" position.
-
-*  Parameters:
-*     ihandle
-*        Offset in the "handles" array that identifies the handle to
-*        be added to the list.
-*     head
-*        Address of an int which holds the offset in the "handles"
-*        array of the element at the head of the list (or -1 if the
-*        list is empty). This value will be updated to identify the
-*        new list member.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function does not perform error chacking and does not
-*     generate errors.
-*     - The lists generated by this function use integer offsets into
-*     the "handles" array for their links, rather than pointers. This
-*     is because the array may be re-located in memory when it needs
-*     to be extended, so pointers to its element would not remain
-*     valid.
-*     - The list elements are drawn from the "handles" array in the
-*     first place so that they can be addressed by small integers (the
-*     offset in the array). This allows references to Handles to be
-*     encoded along with security information into an integer that is
-*     sufficiently short to be exported to other languages
-*     (e.g. Fortran) which might not be able to accommodate
-*     full-length C pointers.
-*/
-
-
-#if defined(MEM_DEBUG)
-   char buf[80];
-   astHandleUse( ihandle, "about to be inserted into %s (%d)", 
-                 HeadString( head, buf ), head );
-   CheckList( head, status );
-   CheckInList( ihandle, head, 0, status );
-#endif
-
-/* Check a head pointer was supplied (may not be if an error has
-   occurred). */
-   if( ! head ) return;
-
-/* If the list is empty, the sole new element points at itself. */
-   if ( *head == -1 ) {
-      handles[ ihandle ].flink = ihandle;
-      handles[ ihandle ].blink = ihandle;
-
-/* Otherwise, insert the new element in front of the element at the
-   head of the list. */
-   } else {
-      handles[ ihandle ].flink = *head;
-      handles[ ihandle ].blink = handles[ *head ].blink;
-      handles[ ( handles[ *head ].blink) ].flink = ihandle;
-      handles[ *head ].blink = ihandle;
-   }
-
-/* Update the list head to identify the new element. */
-   *head = ihandle;
-
-#if defined(MEM_DEBUG)
-   CheckList( head, status );
-   astHandleUse( ihandle, "has been inserted into %s", buf );
-#endif
-}
-
-AstObject *astMakeId_( AstObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astMakeId
-
-*  Purpose:
-*     Issue an identifier for an Object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astMakeId( AstObject *this )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function takes a normal C pointer to an Object and
-*     associates an identifier with it.
-
-*  Parameters:
-*     this
-*        Pointer to an Object. Note that this function copies this
-*        value (it is not cloned), so the caller should not annul the
-*        pointer afterwards.
-
-*  Returned Value:
-*     The resulting identifier value.
-
-*  Notes:
-*     - An identifier value of zero will be returned and the supplied
-*     Object pointer will be annulled if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*     - A zero identifier value will also be returned if a NULL object
-*     pointer is supplied, but this will not provoke an error.
-*     - This is a protected function in the sense that it is not
-*     intended that external users should invoke it directly.  It is
-*     accessible from external code, however, in order that public
-*     macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Thread-specific global data */
-   AstObject *id;                /* ID value to return */
-   int ihandle;                  /* Handle offset */
-
-/* Initialise. */
-   id = astI2P( 0 );
-   ihandle = 0;
-
-/* Check the global error status. */
-   if ( astOK ) {
-
-/* Get a pointer to Thread-specific global data. */
-      astGET_GLOBALS(this);
-
-/* Gain exclusive access to the handles array. */
-      LOCK_MUTEX2;
-
-/* If a non-NULL Object pointer was given, we must obtain a Handle
-   structure to associate with it (otherwise a zero identifier value
-   is returned without error). */
-      if ( this ) {
-
-/* If the free Handles list is not empty, obtain a Handle from it. */
-         if ( free_handles != -1 ) {
-            ihandle = free_handles;
-            RemoveHandle( ihandle, &free_handles, status );
-
-/* Otherwise, allocate a new Handle by extending the "handles" array
-   and using the offset of the new element. */
-         } else {
-
-            astBeginPM;
-            handles = astGrow( handles, nhandles + 1, sizeof( Handle ) );
-            astEndPM;
-
-            if ( astOK ) {
-               ihandle = nhandles++;
-
-               handles[ ihandle ].ptr = NULL;
-               handles[ ihandle ].context = INVALID_CONTEXT;
-               handles[ ihandle ].check = 0;
-               handles[ ihandle ].flink = -1;
-               handles[ ihandle ].blink = -1;
-#if defined(THREAD_SAFE)
-               handles[ ihandle ].thread = 0;
-#endif
-
-#if defined(MEM_DEBUG)
-               handles[ ihandle ].id = 0;
-               handles[ ihandle ].vtab = NULL;
-#endif
-            }
-         }
-
-/* If the first AST context level has not yet been initialised, invoke
-   InitContext to initialise it and allocate memory for the
-   "active_handles" array which stores context information. */
-         if ( astOK ) {
-            if ( !active_handles ) InitContext( status );
-
-/* Store the Object pointer and current context level in the Handle. */
-            if ( astOK ) {
-               handles[ ihandle ].ptr = this;
-               handles[ ihandle ].context = context_level;
-#if defined(THREAD_SAFE)
-               handles[ ihandle ].thread = AST__THREAD_ID;
-#endif
-
-/* Store extra debugging information in the handle if enabled */
-#if defined(MEM_DEBUG)
-               handles[ ihandle ].id = astMemoryId( this );
-               handles[ ihandle ].vtab = this->vtab;
-               astHandleUse( ihandle, "associated with a %s (id %d)",
-                              astGetClass( this ), astMemoryId( this ));
-#endif
-
-/* Insert the Handle into the active Handles list for the current
-   context level. */
-               InsertHandle( ihandle, &active_handles[ context_level ], status );
-
-/* Associate an identifier value with the Handle. */
-               id = AssocId( ihandle, status );
-
-/* If an error occurred, clean up by annulling the Handle. This
-   ensures that the Object pointer is annulled and returns the unused
-   Handle to the Free Handle list. */
-               if ( !astOK ) {
-                  AnnulHandle( ihandle, status );
-                  this = NULL;
-               }
-
-/* If the Handle wasn't used (because of an earlier error), return it
-   to the free Handles list. */
-            } else {
-               InsertHandle( ihandle, &free_handles, status );
-            }
-         }
-      }
-      UNLOCK_MUTEX2;
-   }
-
-/* If a bad status value was either supplied or generated within this
-   function, then annul the supplied pointer (unless it is NULL). */
-   if ( !astOK && this ) (void) astAnnul( this );
-
-/* Return the identifier value. */
-   return id;
-}
-
-AstObject *astMakePointer_( AstObject *this_id, int *status ) {
-/*
-*+
-*  Name:
-*     astMakePointer
-
-*  Purpose:
-*     Obtain a true C pointer from an Object identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astMakePointer( AstObject *this )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-*     This function accepts an external Object identifier and returns
-*     a true C Object pointer that may be de-referenced to access the
-*     Object's data and methods.
-
-*  Parameters:
-*     this
-*        The identifier value.
-
-*  Returned Value:
-*     The true C pointer value.
-
-*  Notes:
-*     - In a thread-safe context, an error is reported if the supplied
-*     Object has not been locked by the calling thread (using astLock) 
-*     prior to invoking this function.
-*     - The object reference count is not modified by this function,
-*     so the returned pointer should not be annulled by the caller.
-*     - Typically, this function should be used whenever a public
-*     function must accept identifier values directly (rather than
-*     having them translated automatically into pointers during
-*     argument validation by the astCheck<Class> range of functions).
-*     - Note that this function will NOT accept a true C pointer as an
-*     argument, even when invoked from internal code (with astCLASS
-*     defined). An identifier value MUST be supplied, and an error
-*     will result if it is not associated with an active Object.
-*     - This function attempts to execute even if the global error
-*     status is set, but no further error report will be made if it
-*     subsequently fails under these circumstances.
-*     - This is a protected function in the sense that it is not
-*     intended that external users should invoke it directly.  It is
-*     accessible from external code, however, in order that public
-*     macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *ptr;               /* Pointer value to return */
-   int ihandle;                  /* Handle offset in "handles" array */
-
-/* Initialise. */
-   ptr = NULL;
-
-/* Gain exclusive access to the handles array. */
-   LOCK_MUTEX2;
-
-/* Validate the identifier supplied and derive the Handle offset. */
-   ihandle = CheckId( this_id, 1, status );
-
-/* If the identifier was valid, extract the Object pointer from the
-   Handle. */
-   if ( ihandle != -1 ) ptr = handles[ ihandle ].ptr;
-
-   UNLOCK_MUTEX2;
-
-/* Return the result. */
-   return ptr;
-}
-
-AstObject *astMakePointer_NoLockCheck_( AstObject *this_id, int *status ) {
-/*
-*+
-*  Name:
-*     astMakePointer_NoLockCheck
-
-*  Purpose:
-*     Obtain a true C pointer from an Object identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *astMakePointer_NoLockCheck( AstObject *this )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-*     This function accepts an external Object identifier and returns
-*     a true C Object pointer that may be de-referenced to access the
-*     Object's data and methods.
-*
-*     It is identicial to astMakePointer except that it does not check
-*     that the supplied Object is locked by the running thread.
-
-*  Parameters:
-*     this
-*        The identifier value.
-
-*  Returned Value:
-*     The true C pointer value.
-
-*  Notes:
-*     - The object reference count is not modified by this function,
-*     so the returned pointer should not be annulled by the caller.
-*     - Typically, this function should be used whenever a public
-*     function must accept identifier values directly (rather than
-*     having them translated automatically into pointers during
-*     argument validation by the astCheck<Class> range of functions).
-*     - Note that this function will NOT accept a true C pointer as an
-*     argument, even when invoked from internal code (with astCLASS
-*     defined). An identifier value MUST be supplied, and an error
-*     will result if it is not associated with an active Object.
-*     - This function attempts to execute even if the global error
-*     status is set, but no further error report will be made if it
-*     subsequently fails under these circumstances.
-*     - This is a protected function in the sense that it is not
-*     intended that external users should invoke it directly.  It is
-*     accessible from external code, however, in order that public
-*     macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
-   AstObject *ptr;               /* Pointer value to return */
-   int ihandle;                  /* Handle offset in "handles" array */
-
-/* Initialise. */
-   ptr = NULL;
-
-/* Gain exclusive access to the handles array. */
-   LOCK_MUTEX2;
-
-/* Validate the identifier supplied and derive the Handle offset. */
-   ihandle = CheckId( this_id, 0, status );
-
-/* If the identifier was valid, extract the Object pointer from the
-   Handle. */
-   if ( ihandle != -1 ) ptr = handles[ ihandle ].ptr;
-
-   UNLOCK_MUTEX2;
-
-/* Return the result. */
-   return ptr;
-}
-
-int astP2I_( AstObject *pointer, int *status ) {
-/*
-*+
-*  Name:
-*     astP2I
-
-*  Purpose:
-*     Extract an integer Object ID from a pointer.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astP2I( AstObject *pointer )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-*     This function retrieves an integer (int) value representing an
-*     Object identifier from a pointer value (into which it has
-*     previously been packed using astI2P).
-*
-*     These functions should be used to avoid any dependency on
-*     integer-to-pointer conversions (given that the values are not
-*     true pointers) which might affect the exchange of Object
-*     identifier values with other languages, such as Fortran 77,
-*     where they are stored as integers.
-
-*  Parameters:
-*     pointer
-*       The pointer value into which the ID has previously been packed.
-
-*  Returned Value:
-*     The extracted Object identifier value as an integer (int).
-
-*  Notes:
-*     - This function does not perform error checking and does not
-*     generate errors.
-*     - This is a protected function in the sense that it is not
-*     intended that external users should invoke it directly.  It is
-*     accessible from external code, however, in order that public
-*     macros invoked from that code can make use of it.
-*-
-*/
-
-/* Local Variables: */
-   IdUnion temp;                 /* Overlapping int and pointer */
-
-/* Store the pointer value supplied. */
-   temp.pointer = pointer;
-
-/* Return the integer part of it. */
-   return temp.integer;
-}
-
-MYSTATIC void RemoveHandle( int ihandle, int *head, int *status ) {
-/*
-*  Name:
-*     RemoveHandle
-
-*  Purpose:
-*     Remove a Handle from a list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void RemoveHandle( int ihandle, int *head )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function removes a Handle structure from a doubly linked
-*     list of such structures composed of elements drawn from the
-*     "handles" array. The "head of list" position is updated if
-*     necessary.
-
-*  Parameters:
-*     ihandle
-*        Offset in the "handles" array that identifies the Handle to
-*        be removed from the list (note that the Handle must actually
-*        be in the list, although this function does not check this).
-*     head
-*        Address of an int which holds the offset in the "handles"
-*        array of the element at the head of the list. This value will
-*        be updated if necessary to identify the new list head (or set
-*        to -1 if removing the Handle causes the list to become
-*        empty).
-
-*  Notes:
-*     - This function does not perform error chacking and does not
-*     generate errors.
-*     - See the InsertHandle function for details of how and why lists
-*     of Handles are constructed.
-*/
-
-
-#if defined(MEM_DEBUG)
-   char buf[80];
-   astHandleUse( ihandle, "about to be removed from %s", HeadString( head, buf ) );
-   CheckList( head, status );
-   CheckInList( ihandle, head, 1, status );
-#endif
-
-/* Check a head pointer was supplied (may not be if an error has
-   occurred). */
-   if( ! head ) return;
-
-/* Remove the Handle from the list by re-establishing links between
-   the elements on either side of it. */
-   handles[ ( handles[ ihandle ].blink ) ].flink = handles[ ihandle ].flink;
-   handles[ ( handles[ ihandle ].flink ) ].blink = handles[ ihandle ].blink;
-
-/* If the element removed was at the head of the list, update the head
-   of list offset to identify the following element. */
-   if ( ihandle == *head ) {
-      *head = handles[ ihandle ].flink;
-
-/* If the head of list still identifies the removed element, then note
-   that the list is now empty. */
-      if ( *head == ihandle ) *head = -1;
-   }
-
-/* Make the removed element point at itself. */
-   handles[ ihandle ].flink = ihandle;
-   handles[ ihandle ].blink = ihandle;
-
-#if defined(MEM_DEBUG)
-   astHandleUse( ihandle, "has been removed from %s", buf );
-   CheckList( head, status );
-#endif
-}
-
-void astSetId_( void *this_id_void, const char *settings, ... ) {
-/*
-*  Name:
-*     astSetId_
-
-*  Purpose:
-*     Set values for an Object's attributes via an identifier.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     void astSetId_( AstObject *this, const char *settings, ... )
-
-*  Class Membership:
-*     Object member function.
-
-*  Description:
-*     This function implements the axternal interface to the astSet
-*     method (q.v.). It accepts an Object identifier, but otherwise
-*     behaves identically to astSet.
-
-*  Parameters:
-*     this
-*        Object identifier.
-*     settings
-*        Pointer to a null-terminated string containing a
-*        comma-separated list of attribute settings.
-*     ...
-*        Optional arguments which supply values to be substituted for
-*        any "printf"-style format specifiers that appear in the
-*        "settings" string.
-
-*  Notes:
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     Object identifier is of type (void *) and is converted and
-*     validated within the function itself.
-*/
-
-/* Local Variables: */
-   AstObject *this;              /* Pointer to the Object structure */
-   int *status;                  /* Pointer to inherited status variable */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the integer holding the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the Object pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Object. */
-   this = astCheckObject( astMakePointer( this_id_void ) );
-   if ( astOK ) {
-
-/* Obtain the variable argument list and pass all arguments to the
-   astVSet method for interpretation. */
-      va_start( args, settings );
-      astVSet( this, settings, NULL, args );
-      va_end( args );
-   }
-}
-
-int astThreadId_( AstObject *this_id, int ptr, int *status ) {
-/*
-c++
-*  Name:
-*     astThread
-
-*  Purpose:
-*     Determine the thread that owns an Object.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "object.h"
-*     int astThread( AstObject *this, int ptr )
-
-*  Class Membership:
-*     Object method.
-
-*  Description:
-*     Returns an integer that indicates whether the supplied Object (or
-*     Object pointer) is currently unlocked, or is currently locked by
-*     the running thread, or another thread.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be checked.
-*     ptr
-*        If non-zero, returns information about the supplied Object
-*        pointer, rather than the Object structure itself. See "Object
-*        Pointers and Structures" below.
-
-*  Returned Value:
-*     astThread()
-*        A value of AST__UNLOCKED is returned if the Object (or pointer) 
-*        is currently unlocked (i.e. has been unlocked using astUnlock
-*        but has not yet been locked using astLock). A value of 
-*        AST__RUNNING is returned if the Object (or pointer) is currently 
-*        locked by the running thread. A value of AST__OTHER is returned 
-*        if the Object (or pointer) is currently locked by the another 
-*        thread.
-
-*  Object Pointers and Structures: 
-*     At any one time, an AST Object can have several distinct pointers,
-*     any one of which can be used to access the Object structure. For 
-*     instance, the astClone function will produce a new distinct pointer 
-*     for a given Object. In fact, an AST "pointer" is not a real pointer 
-*     at all - it is an identifier for a "handle" structure, encoded to 
-*     make it look like a pointer. Each handle contains (amongst othere 
-*     things) a "real" pointer to the Object structure. This allows more 
-*     than one handle to refer to the same Object structure. So when you 
-*     call astClone (for instance) you get back an identifier for a new 
-*     handle that refers to the same Object as the supplied handle.
-*
-*     In order to use an Object for anything useful, it must be locked
-*     for use by the running thread (either implicitly at creation or
-*     explicitly using astLock). The identity of the thread is stored in
-*     both the Object structure, and in the handle that was passed to
-*     astLock (or returned by the constructor function). Thus it is
-*     possible for a thread to have active pointers for Objects that are 
-*     currently locked by another thread. In general, if such a pointer is 
-*     passed to an AST function an error will be reported indicating that 
-*     the Object is currently locked by another thread. The two exceptions
-*     to this is that astAnnul can be used to annull such a pointer, and
-*     this function can be used to return information about the pointer.
-*
-*     The other practical consequence of this is that when astEnd is
-*     called, all active pointers currently owned by the running thread 
-*     (at the current context level) are annulled. This includes pointers 
-*     for Objects that are currently locked by other threads.
-*     
-*     If the "ptr" parameter is zero, then the returned value describes 
-*     the Object structure itself. If "ptr" is non-zero, then the returned 
-*     value describes the supplied Object pointer (i.e. handle), rather
-*     than the Object structure.
-
-*  Notes:
-*     - This function attempts to execute even if the global error
-*     status is set, but no further error report will be made if it
-*     subsequently fails under these circumstances.
-*     - This function is only available in the C interface.
-*     - This function always returns AST__RUNNING if the AST library has 
-*     been built without POSIX thread support (i.e. the "-with-pthreads" 
-*     option was not specified when running the "configure" script).
-c--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS       /* Thread-specific global data */
-   int result;              /* The returned value */
-
-#if defined(THREAD_SAFE)  
-
-/* More local Variables: */
-   AstObject *this;
-   int ihandle;
-   int check;
-
-/* Ensure global variables are accessable. */
-   astGET_GLOBALS(NULL);
-#endif
-
-/* Initialise the returned value */
-   result = AST__RUNNING;
-
-/* Nothing more to do if AST was not build with thread support. */
-#if defined(THREAD_SAFE)  
-
-/* If the ownership of the handle is being queried... */
-   if( ptr ) {
-
-/* Lock the mutex that guards access to the handles array */
-      LOCK_MUTEX2;
-
-/* Check the supplied object identifier is valid and get the
-   corresponding index into the handles array. */
-      ihandle = CheckId( this_id, 1, status );
-      if( ihandle != -1 ) {
-
-/* Set the returned value on the basis of the threa didentifier stored in
-   the handle structure. */
-         if( handles[ ihandle ].thread == -1 ) {
-            result = AST__UNLOCKED;
-         } else if( handles[ ihandle ].thread != AST__THREAD_ID ) {
-            result = AST__OTHER;
-         }
-      }
-
-/* Unlock the mutex that guards access to the handles array */
-      UNLOCK_MUTEX2;
-
-/* Otherwise, the ownership of the Object is being queried. Obtain the 
-   Object pointer from the ID supplied and validate the pointer to ensure 
-   it identifies a valid Object (this generates an error if it doesn't). 
-   Note, we use the "astMakePointer_NoLockCheck", since the usual 
-   "astMakePointer" macro invokes astCheckLock to report an error if the 
-   Object is not currently locked by the calling thread. */
-   } else if( astIsAObject( this = astMakePointer_NoLockCheck( this_id ) ) ) {
-
-/* Determine which thread (if any) has the object locked, and set an
-   appropriate return value. */
-      check = astManageLock( this, AST__CHECKLOCK, 0, NULL );
-
-      if( check == 5 ) {
-         result = AST__OTHER;
-      } else if( check == 6 ) {
-         result = AST__UNLOCKED;
-      }        
-   }
-
-#endif
-
-/* Return the result. */
-   return result;
-}
-
-int astVersion_( int *status ) {
-/*
-*++
-*  Name:
-c     astVersion
-f     AST_VERSION
-
-*  Purpose:
-*     Return the version of the AST library being used.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     int astVersion
-f     RESULT = AST_VERSION()
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-c     This macro invokes a function which 
-f     This function 
-*     returns an integer representing the version of the AST library
-*     being used. The library version is formatted as a string such as 
-*     "2.0-7" which contains integers representing the "major version" (2), 
-*     the "minor version" (0) and the "release" (7). The integer returned 
-*     by this function combines all three integers together into a single 
-*     integer using the expresion:
-*
-*     (major version)*1E6 + (minor version)*1E3 + (release)
-
-*  Returned Value:
-c     astVersion
-f     AST_VERSION = INTEGER
-*        The major version, minor version and release numbers for the AST
-*        library, encoded as a single integer.
-
-*  Applicability:
-*     Object
-c        This macro applies to all Objects.
-f        This routine applies to all Objects.
-
-*--
-*/
-
-   return (int) AST__VMAJOR*1E6 + AST__VMINOR*1E3 + AST__RELEASE;
-}
-
-int astEscapes_( int new_value, int *status ) {
-/*
-*++
-*  Name:
-c     astEscapes
-f     AST_ESCAPES
-
-*  Purpose:
-*     Control whether graphical escape sequences are included in strings.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "object.h"
-c     int astEscapes( int new_value )
-f     RESULT = AST_ESCAPES( NEWVAL, STATUS )
-
-*  Class Membership:
-*     Object class function.
-
-*  Description:
-*     The Plot class defines a set of escape sequences which can be
-*     included within a text string in order to control the appearance of
-*     sub-strings within the text. See the Escape attribute for a
-*     description of these escape sequences. It is usually inappropriate 
-*     for AST to return strings containing such escape sequences when
-*     called by application code. For instance, an application which
-*     displays the value of the Title attribute of a Frame usually does
-*     not want the displayed string to include potentially long escape 
-*     sequences which a human read would have difficuly interpreting.
-*     Therefore the default behaviour is for AST to strip out such escape
-*     sequences when called by application code. This default behaviour
-*     can be changed using this function.
-
-*  Parameters:
-c     new_value
-f     NEWVAL = INTEGER (Given)
-*        A flag which indicates if escapes sequences should be included
-*        in returned strings. If zero is supplied, escape sequences will 
-*        be stripped out of all strings returned by any AST function. If 
-*        a positive value is supplied, then any escape sequences will be 
-*        retained in the value returned to the caller. If a negative
-*        value is supplied, the current value of the flag will be left 
-*        unchanged.
-
-*  Returned Value:
-c     astEscapes
-f     AST_ESCAPES = INTEGER
-*        The value of the flag on entry to this function.
-
-*  Applicability:
-*     Object
-c        This macro applies to all Objects.
-f        This routine applies to all Objects.
-
-*  Notes:
-*     - This function also controls whether the 
-c     astStripEscapes 
-f     AST_STRIPESCAPES
-*     function removes escape sequences from the supplied string, or
-*     returns the supplied string without change.
-*     - This function attempts to execute even if an error has already
-*     occurred.
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS
-   int old_val;
-  
-/* Get a pointer to Thread-specific global data. */
-   astGET_GLOBALS(NULL);
-
-/* Save the old value. */
-   old_val = retain_esc;
-
-/* Set the new value. */
-   if( new_value > 0 ) {
-      retain_esc = 1;
-
-   } else if( new_value == 0 ) {
-      retain_esc = 0;
-   }
-
-/* Return the old value. */
-   return old_val;
-}
-
-
-#if defined(MEM_DEBUG)
-
-/* Check each handle in a list is uniquely connected to one other handle
-   in both the forward and backward directions. */
-
-void CheckList( int *head, int *status ) {
-   int ok;
-   int ihandle;
-   char buf[200];
-   astDECLARE_GLOBALS           
-   if( !astOK ) return;
-
-   astGET_GLOBALS(NULL);
-
-   ok = 1;
-   if ( *head != -1 ) {
-      ihandle = *head;      
-      if( handles[ handles[ ihandle ].blink ].flink != ihandle ||
-          handles[ handles[ ihandle ].flink ].blink != ihandle ) {
-         ok = 0;
-
-      } else {
-         if( CheckThread( ihandle, head, status ) ) {
-            ihandle= handles[ *head ].blink;
-            while( ihandle != *head ) {
-               if( handles[ handles[ ihandle ].blink ].flink != ihandle ||
-                   handles[ handles[ ihandle ].flink ].blink != ihandle ||
-                   CheckThread( ihandle, head, status ) == 0 ) {
-                  ok = 0;
-                  break;
-               } 
-               ihandle= handles[ ihandle ].blink;
-            }
-         }
-      }
-   }
-
-   if( !ok ) {
-      printf("CheckList error in %s\n", HeadString( head, buf ) );
-      printf("   Central handle: %s\n", HandleString( ihandle, buf ) );      
-
-      if( handles[ handles[ ihandle ].blink ].flink != ihandle ) {
-         printf("   Central handle->blink: %s\n", 
-                 HandleString( handles[ ihandle ].blink, buf ) );      
-         printf("   Central handle->blink->flink: %s\n", 
-                 HandleString( handles[ handles[ ihandle ].blink ].flink, buf ) );
-      }
-
-      if( handles[ handles[ ihandle ].flink ].blink != ihandle ) {
-         printf("   Central handle->flink: %s\n", 
-                 HandleString( handles[ ihandle ].flink, buf ) );      
-         printf("   Central handle->flink->blink: %s\n", 
-                 HandleString( handles[ handles[ ihandle ].flink ].blink, buf ) );
-      }
-   }
-
-}
-
-
-/* Check if a specified handle is, or is not, in a given list of handles. */
-
-void CheckInList( int ihandle, int *head, int in, int *status ){
-   char list[80], buf[200];
-   int found = 0;
-   if( !astOK ) return;
-
-   if ( *head != -1 ) {
-      if( ihandle == *head ) {
-         found = 1;
-      } else {
-         if( CheckThread( ihandle, head, status ) ) {
-            int jhandle= handles[ *head ].blink;
-            while( jhandle != *head ) {
-               if( ihandle == jhandle ) {
-                  found = 1;
-                  break;
-               } 
-               jhandle= handles[ jhandle ].blink;
-            }
-         }
-      }
-   }
-
-   if( in && !found ) {
-      printf("Error: Handle %s not in %s\n", HandleString( ihandle, buf ),
-              HeadString( head, list ) );
-   } else if( !in && found ) {
-      printf("Error: Handle %s is in %s\n", HandleString( ihandle, buf ),
-              HeadString( head, list ) );
-   }
-
-}
-
-/* Check that a handle is owned by the currently executing thread. */
-
-int CheckThread( int ihandle, int *head, int *status ) {
-   int result = 1;
-
-#if defined(THREAD_SAFE)
-
-   char buf[200];
-   astDECLARE_GLOBALS           
-   if( !astOK ) return result;
-
-   astGET_GLOBALS(NULL);
-
-   if( *head == unowned_handles  ) {
-      if(  handles[ ihandle ].thread != -1 ) {
-         printf("Handle %s has wrong thread: is %d, should "
-             "be -1 (i.e. unowned)\n", HandleString( ihandle, buf ), 
-              handles[ ihandle ].thread );
-
-         result = 0;
-      }
-
-   } else if( *head == free_handles ) {
-      if(  handles[ ihandle ].thread != -1 ) {
-         printf("Handle %s has wrong thread: is %d, should "
-             "be -1 (i.e. free)\n", HandleString( ihandle, buf ), 
-              handles[ ihandle ].thread );
-         result = 0;
-      }
-
-   } else if( handles[ ihandle ].thread != AST__THREAD_ID ) {
-      printf("Handle %s has wrong thread: is %d, should "
-             "be %d\n", HandleString( ihandle, buf ), 
-              handles[ ihandle ].thread, AST__THREAD_ID );
-      result = 0;
-   } 
-
-#endif
-
-   return result;
-}
-
-void astWatchHandle_( int handle ){
-   Watched_Handle = handle;
-}
-
-void astHandleUse_( int handle, const char *verb, ... ){
-   va_list args;                 
-   if( handle == Watched_Handle ) {
-      va_start( args, verb );
-      astHandleAlarm( verb, args );
-      va_end( args );
-   }
-}
-
-void astHandleAlarm_( const char *verb, va_list args ){
-   char buff[200], hbuf[200];
-   astDECLARE_GLOBALS           
-   astGET_GLOBALS(NULL);
-
-   vsprintf( buff, verb, args );
-
-#if defined(THREAD_SAFE)
-   printf( "astHandleAlarm: Handle %s %s (current thread is %d).\n\n", 
-           HandleString( Watched_Handle, hbuf ), buff, AST__THREAD_ID );
-#else
-   printf( "astHandleAlarm: Handle %s %s.\n\n", 
-           HandleString( Watched_Handle, hbuf ), buff );
-#endif
-}
-
-MYSTATIC const char *HandleString( int ihandle, char *buf ){
-#if defined(THREAD_SAFE)
-   astDECLARE_GLOBALS           
-   astGET_GLOBALS(NULL);
-
-   if( ihandle >= 0 ) {
-      sprintf( buf, "(index:%d v:%d c:%d t:%d i:%d cl:%s) [cur. thread: %d]", 
-               ihandle, 
-               handles[ ihandle ].check, 
-               handles[ ihandle ].context, handles[ ihandle ].thread,
-               handles[ ihandle ].id, 
-               handles[ ihandle ].vtab ? handles[ ihandle ].vtab->class : "<none>",
-               AST__THREAD_ID );
-   } else {
-      sprintf( buf, "(index:%d <invalid>) [cur. thread: %d]", ihandle, 
-               AST__THREAD_ID );
-   }
-
-#else
-   if( ihandle >= 0 ) {
-      sprintf( buf, "(index:%d v:%d c:%d i:%d cl:%s)", ihandle, 
-               handles[ ihandle ].check, 
-               handles[ ihandle ].context, handles[ ihandle ].id, 
-               handles[ ihandle ].vtab ? handles[ ihandle ].vtab->class : "<none>" );
-   } else {
-      sprintf( buf, "(index:%d <invalid>)", ihandle );
-   }
-#endif
-   return buf;
-}
-
-MYSTATIC const char *HeadString( int *head, char *list ){
-   int i;
-   astDECLARE_GLOBALS           
-   astGET_GLOBALS(NULL);
-
-   if( head == &free_handles ) {
-      strcpy( list, "free_handles" );
-
-#if defined(THREAD_SAFE)
-   } else if( head == &unowned_handles ) {
-      strcpy( list, "unowned_handles" );
-#endif
-
-   } else {
-      *list = 0;
-      for( i = 0; i <= context_level; i++ ) {
-         if( *head == active_handles[ i ] ) {
-            sprintf( list, "active_handles[%d]", i );
-            break;
-         }
-      }
-      if( *list == 0 ) sprintf( list, "unknown handles list with head %d",
-                                *head );
-   }      
-   return list;
-}
-
-#endif
diff --git a/ast-5.3-1/object.h b/ast-5.3-1/object.h
deleted file mode 100644
index f0f0a52..0000000
--- a/ast-5.3-1/object.h
+++ /dev/null
@@ -1,1713 +0,0 @@
-#if !defined( OBJECT_INCLUDED )  /* Include this file only once */
-#define OBJECT_INCLUDED
-/*
-*++
-*  Name:
-*     object.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Object class.
-
-*  Invocation:
-*     #include "object.h"
-
-*  Description:
-*     This include file defines the interface to the Object class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-
-*     The Object class is the base class from which all other classes
-*     in the AST library are derived. This class provides all the
-*     basic Object behaviour and Object manipulation facilities
-*     required throughout the library. There is no Object constructor,
-*     however, as Objects on their own are not of much use.
-
-*  Inheritance:
-*     The Object base class does not inherit from any other class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Class (string)
-*        This is a read-only attribute containing the name of the
-*        class to which an Object belongs.
-*     ID (string)
-*        An identification string which may be used to identify the
-*        Object (e.g.) in debugging output, or when stored in an
-*        external medium such as a data file. There is no restriction
-*        on the string's contents. The default is an empty string.
-*     Ident (string)
-*        Like ID, this is an identification string which may be used 
-*        to identify the Object. Unlike ID, Ident is transferred when an
-*        Object is copied.
-*     UseDefs (int)
-*        Should default values be used for unset attributes?
-*     Nobject (integer)
-*        This is a read-only attribute which gives the total number of
-*        Objects currently in existence in the same class as the
-*        Object given. It does not include Objects which belong to
-*        derived (more specialised) classes. This value is mainly
-*        intended for debugging, as it can be used to show whether
-*        Objects which should have been deleted have, in fact, been
-*        deleted.
-*     ObjSize (int)
-*        The in-memory size of the Object in bytes.
-*     RefCount (integer)
-*        This is a read-only Attribute which gives the "reference
-*        count" (the number of active pointers) associated with an
-*        Object. It is modified whenever pointers are created or
-*        annulled (by astClone or astAnnul/astEnd for example) and
-*        includes the initial pointer issued when the Object was
-*        created. If the reference count for an Object falls to zero
-*        as the result of annulling a pointer to it, then the Object
-*        will be deleted.
-
-*  Methods Over-Ridden:
-*     None.
-
-*  New Methods Defined:
-*     Public:
-*        astAnnul
-*           Annul a pointer to an Object.
-*        astClear
-*           Clear attribute values for an Object.
-*        astClone
-*           Clone a pointer to an Object.
-*        astCopy
-*           Copy an Object.
-*        astDelete
-*           Delete an Object.
-*        astExempt
-*           Exempt an Object pointer from AST context handling
-*        astExport
-*           Export an Object pointer to an outer context.
-*        astGet<X>, where <X> = C, D, F, I, L
-*           Get an attribute value for an Object.
-*        astImport
-*           Import an Object pointer into the current context.
-*        astSame
-*           Return true if two pointers refer to the same object.
-*        astSet
-*           Set attribute values for an Object.
-*        astSet<X>, where <X> = C, D, F, I, L
-*           Set an attribute value for an Object.
-*        astShow
-*           Display a textual representation of an Object on standard output.
-*        astTest
-*           Test if an attribute value is set for an Object.
-*        astTune
-*           Get or set the value of a global AST tuning parameter.
-*
-*     Protected:
-*        astAnnulId
-*           Annul an external ID for an Object (for use from protected code
-*           which must handle external IDs).
-*        astClearAttrib
-*           Clear the value of a specified attribute for an Object.
-*        astClearID
-*           Clear the value of the ID attribute for an Object.
-*        astClearIdent
-*           Clear the value of the Ident attribute for an Object.
-*        astCast
-*           Return a deep copy of an object, cast into an instance of a
-*           parent class.
-*        astDump
-*           Write an Object to a Channel.
-*        astEqual
-*           Are two Objects equivalent?
-*        astGetAttrib
-*           Get the value of a specified attribute for an Object.
-*        astGetClass (deprecated synonym astClass)
-*           Obtain the value of the Class attribute for an Object.
-*        astGetID
-*           Obtain the value of the ID attribute for an Object.
-*        astGetIdent
-*           Obtain the value of the Ident attribute for an Object.
-*        astGetNobject
-*           Obtain the value of the Nobject attribute for an Object.
-*        astGetRefCount
-*           Obtain the value of the RefCount attribute for an Object.
-*        astSetAttrib
-*           Set the value of a specified attribute for an Object.
-*        astSetCopy
-*           Declare a copy constructor for an Object.
-*        astSetDelete
-*           Declare a destructor for an Object.
-*        astSetDump
-*           Declare a dump function for an Object.
-*        astSetVtab
-*           Chaneg the virtual function table associated with an Object.
-*        astSetID
-*           Set the value of the ID attribute for an Object.
-*        astSetIdent
-*           Set the value of the Ident attribute for an Object.
-*        astTestAttrib
-*           Test if a specified attribute value is set for an Object.
-*        astTestID
-*           Test whether the ID attribute for an Object is set.
-*        astTestIdent
-*           Test whether the Ident attribute for an Object is set.
-*        astVSet
-*           Set values for an Object's attributes.
-
-*  Other Class Functions:
-*     Public:
-*        astBegin
-*           Begin a new AST context.
-*        astEnd
-*           End an AST context.
-*        astIsAObject
-*           Test class membership.
-*        astVersion
-*           Returns the AST library version number.
-*        astEscapes
-*           Remove escape sequences from returned text strings?
-*        astP2I
-*           Retrieve an int from a pointer.
-*        astI2P
-*           Pack an int into a pointer.
-*
-*     Protected:
-*        astCheckObject
-*           Validate class membership.
-*        astInitObject
-*           Initialise an Object.
-*        astInitObjectVtab
-*           Initialise the virtual function table for the Object class.
-*        astLoadObject
-*           Load an Object.
-*        astMakeId
-*           Issue an identifier for an Object.
-*        astMakePointer
-*           Obtain a true C pointer from an Object identifier.
-
-*  Macros:
-*     Public:
-*        AST__NULL
-*           Null Object pointer value.
-*        AST__VMAJOR
-*           The AST library major version number.
-*        AST__VMINOR
-*           The AST library minor version number.
-*        AST__RELEASE 
-*           The AST library release number.
-*
-*     Protected:
-*        astEQUAL
-*           Compare two doubles for equality.
-*        astMAX
-*           Return maximum of two values.
-*        astMIN
-*           Return minimum of two values.
-*        astMAKE_CHECK
-*           Implement the astCheck<Class>_ function for a class.
-*        astMAKE_CLEAR
-*           Implement a method to clear an attribute value for a class.
-*        astMAKE_GET
-*           Implement a method to get an attribute value for a class.
-*        astMAKE_ISA
-*           Implement the astIsA<Class>_ function for a class.
-*        astMAKE_SET
-*           Implement a method to set an attribute value for a class.
-*        astMAKE_TEST
-*           Implement a method to test if an attribute has been set for a
-*           class.
-*        astMEMBER
-*           Locate a member function.
-
-*  Type Definitions:
-*     Public:
-*        AstObject
-*           Object type.
-*
-*     Protected:
-*        AstObjectVtab
-*           Object virtual function table type.
-
-*  Feature Test Macros:
-*     AST_CHECK_CLASS
-*        If the AST_CHECK_CLASS macro is defined, then Object class
-*        checking is enabled for all internal function invocations
-*        within the AST library. Otherwise, this checking is
-*        omitted. This macro should normally be defined as a compiler
-*        option during library development and debugging, but left
-*        undefined for software releases, so as to improve
-*        peformance. Class checking by the AST public interface is not
-*        affected by this macro.
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-*     astFORTRAN77
-*        If the astFORTRAN77 macro is defined, reporting of error
-*        context information is suppressed. This is necessary when
-*        implementing foreign language interfaces to the AST library, as
-*        otherwise the file names and line numbers given would refer
-*        to the interface implementation rather than the user's own
-*        code.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     30-JAN-1996 (RFWS):
-*        Original version.
-*     19-APR-1996 (RFWS):
-*        Added macros for implementing attribute access methods.
-*     3-JUL-1996 (RFWS):
-*        Added new definitions to support the external interface.
-*     10-SEP-1996 (RFWS):
-*        Added loader and related facilities.
-*     30-MAY-1997 (RFWS):
-*        Add the ID attribute.
-*     14-JUL-1997 (RFWS):
-*        Add astExempt function.
-*     20-JAN-1998 (RFWS):
-*        Make the astClear and astVSet methods virtual.
-*     15-SEP-1999 (RFWS):
-*        Made the astAnnulId function accessible to protected code.
-*     3-APR-2001 (DSB):
-*        Added Ident attribute.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitObjectVtab method.
-*     30-APR-2003 (DSB):
-*        Added macros AST__VMAJOR, AST__VMINOR and AST__RELEASE.
-*        Added astVersion function.
-*     7-FEB-2004 (DSB):
-*        Added astEscapes function.
-*     11-MAR-2005 (DSB):
-*        Added UseDefs attribute.
-*     7-FEB-2006 (DSB):
-*        Added astTune function.
-*     14-FEB-2006 (DSB):
-*        Added ObjSize attribute.
-*     23-FEB-2006 (DSB):
-*        Moved AST__TUNULL from this file to memory.h.
-*     10-MAY-2006 (DSB):
-*        Added astEQUAL, astMAX and astMIN.
-*     26-MAY-2006 (DSB):
-*        Make all system includes unconditional, so that makeh is not
-*        confused when creating ast.h.
-*     22-JUN-2007 (DSB):
-*        - Make astVSet return a pointer to dynamic memory holding the 
-*        expanded setting string.
-*        - Add ast astSetVtab and astCast.
-*     22-APR-2008 (DSB):
-*        Added astSame.
-*--
-*/
-
-/* Include files. */
-/* ============== */
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"               /* Error reporting facilities */
-#include "version.h"             /* Version number macros */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include <stdarg.h>
-#include <float.h>
-#include <stdio.h>
-
-#if defined(THREAD_SAFE)
-#include <pthread.h>
-#endif
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Set to "1" (yes) or "0" (no) to indicate if AST was build with threads 
-   support. */
-#define AST__THREADSAFE 1
-
-#if defined(astCLASS )
-#define AST__GETATTRIB_BUFF_LEN 50 /* Length of string returned by GetAttrib. */
-#define AST__ASTGETC_MAX_STRINGS 50 /* Number of string values to buffer within astGetC */
-
-/* Values supplied to astManageLock */
-#define AST__LOCK 1      /* Lock the object */
-#define AST__UNLOCK 2    /* Unlock the object */
-#define AST__CHECKLOCK 3 /* Check if the object is locked */
-
-/* Values returned by astThread */
-#define AST__UNLOCKED 1  /* Object is unlocked */
-#define AST__RUNNING 2   /* Object is locked by the running thread */
-#define AST__OTHER 3     /* Object is locked by another thread */
-
-#endif
-
-/* Value that indicates that two classes are not in direct line from each
-   other. */
-#if defined(astCLASS )
-#define AST__COUSIN -1000000
-#endif
-
-/*
-*+
-*  Name:
-*     astINVOKE
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Invoke an AST function.
-
-*  Synopsis:
-*     #include "object.h"
-*     astINVOKE(rettype,function)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an invocation of an AST function, together
-*     with any additional actions required to support it.  The actual
-*     expansion depends on whether the macro is expanded in internal
-*     code (astCLASS defined) or external code (astCLASS undefined)
-*     and it therefore hides the differences between these two
-*     interfaces.
-
-*  Parameters:
-*     rettype
-*        A character to indicate the type of result returned by the function:
-*
-*        V
-*           The function returns a value (including void or a pointer
-*           value, but excluding an Object pointer). astINVOKE will
-*           return the value unchanged.
-*        O
-*           The function returns an Object pointer. astINVOKE will
-*           convert it to an Object identifier if necessary.
-*        F
-*           The function returns a function pointer. astINVOKE will
-*           return it unchanged. This is typically used when the
-*           function has a variable argument list. In this case the
-*           function name is passed to astINVOKE without its argument
-*           list and a pointer to the function is returned which can
-*           then be supplied with an argument list. This avoids the
-*           need to define a macro with a variable number of arguments
-*           (which isn't allowed).
-*     function
-*        A normal invocation of the function returning the required
-*        result.  In the case of a variable argument list, the
-*        argument list should be omitted so that the function is not
-*        invoked but a function pointer is returned that may then be
-*        used to invoke it.
-
-*  Examples:
-*     #define astGetNobject(this) \
-*             astINVOKE(V,astGetNobject_(astCheckObject(this)))
-*        Defines a macro to invoke the astGetNobject_ function which
-*        returns an int.
-*     #define astClone(this) \
-*             astINVOKE(O,astClone_(astCheckObject(this)))
-*        Defines a macro to invoke the astClone_ function which
-*        returns an Object pointer.
-*     #define astSet astINVOKE(F,astSet_)
-*        Defines a macro to invoke the astSet_ function which has a
-*        variable argument list and returns void. The macro result is
-*        a pointer to the astSet_ function. This function must perform
-*        its own argument validation, as (e.g) astCheckObject cannot
-*        be invoked on its arguments via a macro.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define astINVOKE, which records the current file and line number
-   (in case of error) using astAt, and then invokes the function
-   supplied as an argument of the astRetV_, astRetO_ or astRetF_
-   macro.
-
-   Suppress reporting of the file and line number from internal code
-   and from foreign language interfaces by not using astAt in these
-   cases. */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define astINVOKE(rettype,function) astRet##rettype##_(function)
-#else
-#define astINVOKE(rettype,function) \
-astERROR_INVOKE(astRet##rettype##_(function))
-#endif
-
-/* astRetF_ and astRetV_ currently do nothing. */
-#define astRetF_(x) (x)
-#define astRetV_(x) (x)
-
-/* However, astRetO_ converts a pointer to an ID if necessary. */
-#if defined(astCLASS)
-#define astRetO_(x) ((void *)(x))
-#else
-#define astRetO_(x) ((void *)astMakeId_((AstObject *)(x),STATUS_PTR))
-#endif
-
-/*
-*+
-*  Name:
-*     astINVOKE_CHECK
-*     astINVOKE_ISA
-
-*  Type:
-*     Protected macros.
-
-*  Purpose:
-*     Invoke the astCheck<Class>_ and astIsA<Class>_ functions.
-
-*  Synopsis:
-*     #include "object.h"
-*     astINVOKE_CHECK(class,this,force)
-*     astINVOKE_ISA(class,this)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     These macros expand to invocations of the standard
-*     astCheck<Class>_ and astIsA<Class>_ functions for a class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class for which the function
-*        is to be invoked.
-*     this
-*        The "this" argument (the Object pointer) to be passed to the
-*        function.
-*     force
-*        Type checking takes time, and so can be disabled within the
-*        protected context in order to save time. Setting "force" to 
-*        zero causes the astINVOKE_CHECK macro to skip the class check 
-*        in a protected context (it assumes that AST "knows what it is 
-*        doing"). Setting "force" to a non-zero value forces the class
-*        check even in a protected context.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* For the public interface (and also internally if AST_CHECK_CLASS is
-   defined), define astINVOKE_CHECK to invoke the astCheck<Class>
-   function. */
-#if !defined(astCLASS) || defined(AST_CHECK_CLASS)
-#define astINVOKE_CHECK(class,this,force) \
-astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr)
-
-/* For the internal interface, astINVOKE_CHECK omits the
-   astCheck<class> function (unless AST_CHECK_CLASS is defined). */
-#else
-
-#define astINVOKE_CHECK(class,this,force) ( (force) ? \
-   ( astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr) ) : \
-   ( (Ast##class *) astEnsurePointer_(this) ) )
-
-#endif
-
-/* Define astINVOKE_ISA to invoke the astIsA<Class> function. */
-#if defined(astCLASS)            /* Protected */
-#define astINVOKE_ISA(class,this) \
-astIsA##class##_((const Ast##class *)(this),status)
-#else                            /* Public */
-#define astINVOKE_ISA(class,this) \
-astINVOKE(V,astIsA##class##_((const Ast##class *)astEnsurePointer_(this),astGetStatusPtr))
-#endif
-
-/* The astEnsurePointer_ macro ensures a true C pointer, converting
-   from an ID if necessary. */
-#if defined(astCLASS)            /* Protected */
-#define astEnsurePointer_(x) ((void *)(x))
-#else                            /* Public */
-#define astEnsurePointer_(x) ((void *)astCheckLock_(astMakePointer_((AstObject *)(x),STATUS_PTR),STATUS_PTR))
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_CHECK
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Implement the astCheck<Class>_ function for a class.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_CHECK(class)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of the public astCheck<Class>_
-*     function (q.v.) which validates membership of a specified class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class whose membership is to be
-*        validated.
-
-*  Notes:
-*     -  This macro is provided so that class definitions can easiy
-*     implement the astCheck<Class>_ function, which is essentially the same
-*     for each class apart for a change of name.
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-#ifndef MEM_DEBUG
-
-/* Define the macro. */
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
-   if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
-   of some sort), then report more information about why this Object is \
-   unsuitable. */ \
-      if ( astOK ) { \
-         astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
-                   "to %s given.", status, astGetClass( this ) ); \
-      } \
-   } \
-\
-/* Return the pointer value supplied. */ \
-   return this; \
-}
-
-/* Define the macro with memory debugging facilities. */
-#else
-
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
-   char buf[100]; \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
-   if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
-   of some sort), then report more information about why this Object is \
-   unsuitable. */ \
-      if ( astOK ) { \
-         astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
-                   "to %s given.", status, astGetClass( this ) ); \
-      }\
-\
-   } else { \
-\
-/* Call the astMemoryUse function to report it if the memory block is \
-   being watched. */ \
-      sprintf( buf, "checked (refcnt: %d)", astGetRefCount_( (AstObject *) this, status ) ); \
-      astMemoryUse( this, buf ); \
-   } \
-\
-/* Return the pointer value supplied. */ \
-   return this; \
-}
-#endif
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear an attribute value for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_CLEAR(class,attribute,component,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( Ast<Class> *this )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( Ast<Class> *this )
-*
-*     which implement a method for clearing a specified attribute value for
-*     a class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class to which the attribute belongs.
-*     attribute
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. Label in "astClearLabel").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-
-*  Examples:
-*     astMAKE_CLEAR(MyStuff,Flag,flag,-1)
-*        Implements the astClearFlag method for the MyStuff class which
-*        operates by setting the "flag" structure component to -1 to indicate
-*        that it has no value.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_CLEAR(class,attribute,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Assign the "clear" value. */ \
-   this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,class,Clear##attribute))( this, status ); \
-}   
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_GET
-
-*  Purpose:
-*     Implement a method to get an attribute value for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_GET(class,attribute,type,bad_value,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( Ast<Class> *this )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( Ast<Class> *this )
-*
-*     which implement a method for getting a specified attribute value for a
-*     class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class to which the attribute belongs.
-*     attribute
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the inherited error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned.
-
-*  Examples:
-*     astMAKE_GET(MyStuff,Flag,int,0,( this->flag == 1 ))
-*        Implements the astGetFlag method for the MyStuff class which operates
-*        by examining the integer "flag" structure component and comparing it
-*        with the value 1 to see if it is set. A value of 0 is returned if the
-*        method fails to complete successfully.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_GET(class,attribute,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attribute( Ast##class *this, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Assign the result value. */ \
-   result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,class,Get##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_ISA
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Implement the astIsA<Class>_ function for a class.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_ISA(class,parent)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of the public
-*     astIsA<Class>_ function (q.v.) which checks membership of a
-*     specified class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class whose membership is to be
-*        tested.
-*     parent
-*        The name of the parent class.
-
-*  Notes:
-*     - This macro is provided so that class definitions can easiy
-*     implement the astIsA<Class>_ function, which is essentially the
-*     same for each class apart for a change of name.
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_ISA(class,parent) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-int astIsA##class##_( const Ast##class *this, int *status ) { \
-\
-/* Local Variables: */ \
-   int isa = 0;                  /* Is object a member? */ \
-\
-/* To test if the object is correctly constructed, we first test if it is a \
-   member of the parent class. This improves the security of the test by \
-   checking the object structure from the base Object class downwards \
-   (without this, the "magic numbers" that identify classes might be \
-   encountered by accident or we might address parts of the Object which \
-   don't exist). */ \
-   if ( astIsA##parent( this ) ) { \
-\
-/* Obtain the Object's size and check it is adequate for an object of the \
-   proposed type (this avoids any attempt to access derived class data that \
-   doesn't exist and therefore lies outside the memory allocated for the \
-   object). */ \
-      if ( ( (AstObject *) this )->size >= sizeof( Ast##class ) ) { \
-\
-/* If OK, see whether the check component in the object's virtual function \
-   table matches the expected "magic" value. */ \
-         isa = ( *astMEMBER(this,class,id.check) == &class_check ); \
-      } \
-   } \
-\
-/* Return the result. */ \
-   return isa; \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_SET
-
-*  Purpose:
-*     Implement a method to set an attribute value for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_SET(class,attribute,type,component,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( Ast<Class> *this, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( Ast<Class> *this, <Type> value )
-*
-*     which implement a method for setting a specified attribute value for a
-*     class.
-
-*  Parameters:
-*      class
-*         The name (not the type) of the class to which the attribute belongs.
-*      attribute
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. Label in "astSetLabel").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-
-*  Examples:
-*     astMAKE_SET(MyStuff,Flag,int,flag,( value != 0 ))
-*        Implements the astSetFlag method for the MyStuff class which operates
-*        by setting the "flag" structure component to 0 or 1 depending on
-*        whether the "value" parameter is non-zero or not.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_SET(class,attribute,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
-   this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,class,Set##attribute))( this, value, status ); \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if an attribute has been set for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_TEST(class,attribute,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( Ast<Class> *this )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( Ast<Class> *this )
-*
-*     which implement a method for testing if a specified attribute has been
-*     set for a class.
-
-*  Parameters:
-*      class
-*         The name (not the type) of the class to which the attribute belongs.
-*      attribute
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. Label in "astTestLabel").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value.
-
-*  Examples:
-*     astMAKE_TEST(MyStuff,Flag,( this->flag != -1 ))
-*        Implements the astTestFlag method for the MyStuff class which operates
-*        by testing the "flag" structure component to see if it is set to a
-*        value other than -1.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_TEST(class,attribute,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attribute( Ast##class *this, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Assign the result value. */ \
-   result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,class,Test##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMEMBER
-
-*  Purpose:
-*     Locate a member function.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMEMBER(this,class,method)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro evaluates to the address where the pointer to a
-*     specified Object member function is stored. Typically, this will
-*     be used to obtain a pointer to the member function so that it
-*     can be invoked. It may also be used to assign a new function
-*     pointer so that a derived class can re-define a virtual function
-*     and hence over-ride an inherited method.
-
-*  Parameters:
-*     this
-*        Pointer to an Object belonging to the class for which the
-*        virtual function is required. This must either be the class
-*        that originally defined the method, or one derived from it.
-*     class
-*        Name of the class that originally defined the method. This
-*        may differ from (i.e. be an ancestor of) the class to which
-*        "this" belongs.
-*     method
-*        Name of the method whose member function is to be located.
-
-*  Returned Value:
-*     The address where the member function pointer is stored (the
-*     type of the result is determined by the type of the member
-*     function itself).
-
-*  Examples:
-*     astMEMBER(this,Gnome,astFish)
-*        Returns the address where the pointer to the function that
-*        implements the astFish method for the "this" object is
-*        stored. The Gnome class should be where the astFish method
-*        was first defined (i.e. from where it was inherited by
-*        "this").
-*     (**astMEMBER(this,Gnome,astFish))( this, arg1, arg2 );
-*        Invokes the virtual function that implements the astFish
-*        method for object "this" and passes it additional arguments
-*        "arg2" and "arg2".  Again, Gnome should be the class that
-*        originally defined the astFish method.
-*     *astMEMBER(this,Gnome,astFish) = myFish;
-*        Stores a pointer to the myFish function so that it replaces
-*        the virtual function that previously implemented the astFish
-*        method for the "this" object. Note that all objects in the
-*        same class as "this" are affected, but objects in class
-*        "class" are not affected (unless it happens to be the class
-*        to which "this" belongs).
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* A subsiduary macro that returns a pointer to the vtab of an object, 
-   cast to an AstObjectVtab. */
-#define astVTAB(this) (((AstObject*)(this))->vtab)
-
-/* Define the macro. This functions by (a) casting the Object pointer
-   to type (AstObject *) and locating the Object's virtual function
-   table (b) casting the table pointer to the correct type
-   (AstClassVtab *) for the class in which the method pointer resides,
-   (c) locating the component holding the member function pointer, and
-   (d) taking its address. */
-#define astMEMBER(this,class,method) \
-(&((Ast##class##Vtab*)astVTAB(this))->method)
-
-#endif
-
-/*
-*+
-*  Name:
-*     astPROTO_CHECK
-*     astPROTO_ISA
-
-*  Type:
-*     Protected macros.
-
-*  Purpose:
-*     Prototype the astCheck<Class>_ and astIsA<Class>_ functions.
-
-*  Synopsis:
-*     #include "object.h"
-*     astPROTO_CHECK(class)
-*     astPROTO_ISA(class)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     These macros expands to function prototypes for the
-*     astCheck<Class>_ and astIsA<Class>_ functions (q.v.) which
-*     validate and test for membership of a specified class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class whose membership is to
-*        be validated.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macros. */
-#define astPROTO_CHECK(class) Ast##class *astCheck##class##_( Ast##class *, int * );
-#define astPROTO_ISA(class) int astIsA##class##_( const Ast##class *, int * );
-
-/* Macros which return the maximum and minimum of two values. */
-#define astMAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define astMIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Check for equality of floating point values. We cannot compare bad values 
-   directly because of the danger of floating point exceptions, so bad 
-   values are dealt with explicitly. */
-#define astEQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*astMAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* AST__NULL. */
-/* ---------- */
-/* Define the AST__NULL macro, which evaluates to a null Object
-   pointer. */
-#define AST__NULL (astI2P(0))
-
-
-#if defined(astCLASS)            /* Protected */
-
-/* Test the validy of an attribute value  */
-/* -------------------------------------  */
-/* If the set attribute value is invalid, clear it. These macros should
-   be used in a context in which error reporting has been deferred by 
-   calling astReporting( 0 ). */
-
-#define astCLEAN_ATTRIB(attr) \
-   if( astTest##attr(this) ) { \
-      astSet##attr( this, astGet##attr( this ) ); \
-      if( !astOK ) { \
-         astClearStatus; \
-         astClear##attr( this ); \
-      } \
-   }  
-
-#define astCLEAN_INDEXED_ATTRIB(attr,index) \
-   if( astTest##attr(this,index) ) { \
-      astSet##attr( this, index, astGet##attr( this, index ) ); \
-      if( !astOK ) { \
-         astClearStatus; \
-         astClear##attr( this, index ); \
-      } \
-   }  
-
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-#define astSetVtabClassIdentifier(vtab,id_ptr) \
-   ((AstObjectVtab *)(vtab))->top_id = (id_ptr)
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Object structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstObject {
-
-/* Attributes specific to objects in this class. */
-   unsigned long check;          /* Check value to identify Objects */
-   size_t size;                  /* Amount of memory used by Object */
-   struct AstObjectVtab *vtab;   /* Pointer to virtual function table */
-   char dynamic;                 /* Memory allocated dynamically? */
-   int ref_count;                /* Number of active pointers to the Object */
-   char *id;                     /* Pointer to ID string */
-   char *ident;                  /* Pointer to Ident string */
-   char usedefs;                 /* Use default attribute values? */
-
-#if defined(THREAD_SAFE)
-   int locker;                   /* Thread that has locked this Object */
-   pthread_mutex_t mutex1;       /* Guards access to all elements of the
-                                    Object except for the "locker" and
-                                    "ref_count" components */
-   pthread_mutex_t mutex2;       /* Guards access to the "locker" and
-                                    "ref_count" components */
-   struct AstGlobals *globals;   /* Pointer to thread-specific global data */
-#endif
-
-} AstObject;
-
-/* Class identifier structure */
-typedef struct AstClassIdentifier {
-   int *check;
-   struct AstClassIdentifier *parent;
-} AstClassIdentifier;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* The virtual function table makes a forward reference to the
-   AstChannel structure which is not defined until "channel.h" is
-   included (below). Hence make a preliminary definition available
-   now. */
-struct AstChannel;
-
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstObjectVtab {
-
-/* A unique identifier for this class. */
-   AstClassIdentifier id;
-
-/* Pointer to the structure that identifies the top-level class described
-   by the whole vtab (of which the AstObjectVtab is just the first,
-   lowest-level, component). */
-   AstClassIdentifier *top_id;
-
-/* Properties specific to this class. */
-   void ( *CleanAttribs )( AstObject *, int * );
-   AstObject *( *Cast )( AstObject *, AstObject *, int * );
-   const char *( *GetID )( AstObject *, int * );
-   const char *( *GetIdent )( AstObject *, int * );
-   const char *(* GetAttrib)( AstObject *, const char *, int * );
-   int (* TestAttrib)( AstObject *, const char *, int * );
-   int (* TestID)( AstObject *, int * );
-   int (* Same)( AstObject *, AstObject *, int * );
-   int (* TestIdent)( AstObject *, int * );
-   void (* Clear)( AstObject *, const char *, int * );
-   void (* ClearAttrib)( AstObject *, const char *, int * );
-   void (* ClearID)( AstObject *, int * );
-   void (* ClearIdent)( AstObject *, int * );
-   void (* Dump)( AstObject *, struct AstChannel *, int * );
-   int (* Equal)( AstObject *, AstObject *, int * );
-   void (* SetAttrib)( AstObject *, const char *, int * );
-   void (* SetID)( AstObject *, const char *, int * );
-   void (* SetIdent)( AstObject *, const char *, int * );
-   void (* Show)( AstObject *, int * );
-   void (* VSet)( AstObject *, const char *, char **, va_list, int * );
-
-   int (* GetObjSize)( AstObject *, int * );
-
-   int (* TestUseDefs)( AstObject *, int * );
-   int (* GetUseDefs)( AstObject *, int * );
-   void (* SetUseDefs)( AstObject *, int, int * );
-   void (* ClearUseDefs)( AstObject *, int * );
-
-   const char *class;            /* Pointer to class name string */
-   void (** delete)( AstObject *, int * ); /* Pointer to array of destructors */
-   void (** copy)( const AstObject *, AstObject *, int * ); /* Copy constructors */
-   void (** dump)( AstObject *, struct AstChannel *, int * ); /* Dump functions */
-   const char **dump_class;      /* Dump function class string pointers */
-   const char **dump_comment;    /* Dump function comment string pointers */
-   int ndelete;                  /* Number of destructors */
-   int ncopy;                    /* Number of copy constructors */
-   int ndump;                    /* Number of dump functions */
-   int nobject;                  /* Number of active objects in the class */
-   int nfree;                    /* No. of entries in "free_list" */
-   AstObject **free_list;        /* List of pointers for freed Objects */
-
-#if defined(THREAD_SAFE)
-   int (* ManageLock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-} AstObjectVtab;
-#endif
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstObjectGlobals {
-   AstObjectVtab Class_Vtab; 
-   int Class_Init;
-   int Retain_Esc; 
-   int Context_Level; 
-   int *Active_Handles; 
-   char GetAttrib_Buff[ AST__GETATTRIB_BUFF_LEN + 1 ];  
-   char *AstGetC_Strings[ AST__ASTGETC_MAX_STRINGS ];  
-   int AstGetC_Istr;           
-   int AstGetC_Init; 
-   int Nvtab;
-   AstObjectVtab **Known_Vtabs;
-} AstObjectGlobals;
-
-#endif
-
-/* More include files. */
-/* =================== */
-/* The interface to the Channel class must be included here (after the
-   type definitions for the Object class) because "channel.h" itself
-   includes this file ("object.h"), although "object.h" refers to the
-   AstChannel structure above. This seems a little strange at first,
-   but is simply analogous to making a forward reference to a
-   structure type when recursively defining a normal C structure
-   (except that here the definitions happen to be in separate include
-   files). */
-#include "channel.h"
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Object)           /* Validate class membership */
-astPROTO_ISA(Object)             /* Test class membership */
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstObject *astInitObject_( void *, size_t, int, AstObjectVtab *,
-                           const char *, int * );
-
-/* Vtab Initialiser. */
-void astInitObjectVtab_( AstObjectVtab *, const char *, int * );
-
-/* Loader. */
-AstObject *astLoadObject_( void *, size_t, AstObjectVtab *,
-                           const char *, AstChannel *channel, int * );
-
-#if defined(THREAD_SAFE) 
-void astInitObjectGlobals_( AstObjectGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for other class functions. */
-/* ------------------------------------- */
-#if !defined(astCLASS)           /* Public */
-void astBegin_( void );
-void astEnd_( int * );
-#endif
-
-AstObject *astI2P_( int, int * );
-AstObject *astMakeId_( AstObject *, int * );
-AstObject *astMakePointer_( AstObject *, int * );
-AstObject *astMakePointer_NoLockCheck_( AstObject *, int * );
-int astP2I_( AstObject *, int * );
-int astVersion_( int * );
-int astEscapes_( int, int * );
-int astTune_( const char *, int, int * );
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS)            /* Protected */
-AstObject *astAnnul_( AstObject *, int * );
-AstObject *astDelete_( AstObject *, int * );
-void astSet_( void *, const char *, int *, ... );
-
-#else                            /* Public */
-AstObject *astDeleteId_( AstObject *, int * );
-int astThreadId_( AstObject *, int, int * );
-void astExportId_( AstObject *, int * );
-void astImportId_( AstObject *, int * );
-void astSetId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-AstObject *astAnnulId_( AstObject *, int * );
-AstObject *astCheckLock_( AstObject *, int * );
-AstObject *astClone_( AstObject *, int * );
-AstObject *astCopy_( const AstObject *, int * );
-const char *astGetC_( AstObject *, const char *, int * );
-double astGetD_( AstObject *, const char *, int * );
-float astGetF_( AstObject *, const char *, int * );
-int astEqual_( AstObject *, AstObject *, int * );
-int astGetI_( AstObject *, const char *, int * );
-int astSame_( AstObject *, AstObject *, int * );
-int astTest_( AstObject *, const char *, int * );
-long astGetL_( AstObject *, const char *, int * );
-void astClear_( AstObject *, const char *, int * );
-void astExemptId_( AstObject *, int * );
-void astLockId_( AstObject *, int, int * );
-void astSetC_( AstObject *, const char *, const char *, int * );
-void astSetD_( AstObject *, const char *, double, int * );
-void astSetF_( AstObject *, const char *, float, int * );
-void astSetI_( AstObject *, const char *, int, int * );
-void astSetL_( AstObject *, const char *, long, int * );
-void astShow_( AstObject *, int * );
-void astUnlockId_( AstObject *, int, int * );
-
-#if defined(astCLASS)            /* Protected */
-
-void astCleanAttribs_( AstObject *, int * );
-AstObject *astCast_( AstObject *, AstObject *, int * );
-AstObject *astCastCopy_( AstObject *, AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-int astManageLock_( AstObject *, int, int, AstObject **, int * );
-#endif
-
-int astGetObjSize_( AstObject *, int * );
-
-int astTestUseDefs_( AstObject *, int * );
-int astGetUseDefs_( AstObject *, int * );
-void astSetUseDefs_( AstObject *, int, int * );
-void astClearUseDefs_( AstObject *, int * );
-
-const char *astGetAttrib_( AstObject *, const char *, int * );
-const char *astGetClass_( const AstObject *, int * );
-const char *astGetID_( AstObject *, int * );
-const char *astGetIdent_( AstObject *, int * );
-int astClassCompare_( AstObjectVtab *, AstObjectVtab *, int * );
-int astGetNobject_( const AstObject *, int * );
-int astGetRefCount_( AstObject *, int * );
-int astTestAttrib_( AstObject *, const char *, int * );
-int astTestID_( AstObject *, int * );
-int astTestIdent_( AstObject *, int * );
-void astClearAttrib_( AstObject *, const char *, int * );
-void astClearID_( AstObject *, int * );
-void astClearIdent_( AstObject *, int * );
-void astDump_( AstObject *, AstChannel *, int * );
-void astSetAttrib_( AstObject *, const char *, int * );
-void astSetCopy_( AstObjectVtab *, void (*)( const AstObject *, AstObject *, int * ), int * );
-void astSetDelete_( AstObjectVtab *, void (*)( AstObject *, int * ), int * );
-void astSetDump_( AstObjectVtab *, void (*)( AstObject *, AstChannel *, int * ), const char *, const char *, int * );
-void astSetVtab_( AstObject *, AstObjectVtab *, int * );
-void astSetID_( AstObject *, const char *, int * );
-void astSetIdent_( AstObject *, const char *, int * );
-void astVSet_( AstObject *, const char *, char **, va_list, int * );
-
-#endif
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Check class membership. */
-#define astCheckObject(this) astINVOKE_CHECK(Object,this,0)
-#define astVerifyObject(this) astINVOKE_CHECK(Object,this,1)
-
-/* Test class membership. */
-#define astIsAObject(this) astINVOKE_ISA(Object,this)
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitObject(mem,size,init,vtab,name) \
-astINVOKE(O,astInitObject_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitObjectVtab(vtab,name) astINVOKE(V,astInitObjectVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadObject(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadObject_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to other class functions. */
-/* ------------------------------------ */
-#if !defined(astCLASS)           /* Public */
-#define astBegin astBegin_()
-#define astEnd astINVOKE(V,astEnd_(STATUS_PTR))
-#else                            /* Protected */
-#define astMakePointer_NoLockCheck(id) ((void *)astMakePointer_NoLockCheck_((AstObject *)(id),STATUS_PTR))
-#endif
-
-#define astVersion astVersion_(STATUS_PTR)
-#define astEscapes(int) astEscapes_(int,STATUS_PTR)
-#define astTune(name,val) astTune_(name,val,STATUS_PTR)
-#define astI2P(integer) ((void *)astI2P_(integer,STATUS_PTR))
-#define astMakeId(pointer) ((void *)astMakeId_((AstObject *)(pointer),STATUS_PTR))
-#define astP2I(pointer) astP2I_((AstObject *)(pointer),STATUS_PTR)
-#define astMakePointer(id) ((void *)astCheckLock_(astMakePointer_((AstObject *)(id),STATUS_PTR),STATUS_PTR))
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckObject (et al.) to validate Object
-   pointers before use. This provides a contextual error report if a
-   pointer to the wrong sort of object is supplied. In the case of an
-   external caller, it also performs the required conversion from an
-   Object identifier to a true C pointer. */
-
-/* These functions require special treatment for external use because
-   they handle Object identifiers and their resources explicitly, and
-   must therefore be passed identifier values without conversion to C
-   pointers. */
-#if defined(astCLASS)            /* Protected only */
-#define astAnnul(this) astINVOKE(O,astAnnul_(astCheckObject(this),STATUS_PTR))
-#define astAnnulId(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDelete_(astCheckObject(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSet_)
-
-#else                            /* Public only */
-#define astAnnul(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDeleteId_((AstObject *)(this),STATUS_PTR))
-#define astExport(this) astINVOKE(V,astExportId_((AstObject *)(this),STATUS_PTR))
-#define astImport(this) astINVOKE(V,astImportId_((AstObject *)(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSetId_)
-#define astThread(this,ptr) astINVOKE(V,astThreadId_((AstObject *)(this),ptr,STATUS_PTR))
-#endif
-
-/* Both.... */
-#define astLock(this,wait) astINVOKE(V,astLockId_((AstObject *)(this),wait,STATUS_PTR))
-#define astUnlock(this,report) astINVOKE(V,astUnlockId_((AstObject *)(this),report,STATUS_PTR))
-#define astEqual(this,that) astINVOKE(V,(((AstObject*)this==(AstObject*)that)||astEqual_(astCheckObject(this),astCheckObject(that),STATUS_PTR)))
-#define astExempt(this) astINVOKE(V,astExemptId_((AstObject *)(this),STATUS_PTR))
-#define astClear(this,attrib) astINVOKE(V,astClear_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClone(this) astINVOKE(O,astClone_(astCheckObject(this),STATUS_PTR))
-#define astCopy(this) astINVOKE(O,astCopy_(astCheckObject(this),STATUS_PTR))
-#define astGetC(this,attrib) astINVOKE(V,astGetC_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetD(this,attrib) astINVOKE(V,astGetD_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetF(this,attrib) astINVOKE(V,astGetF_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetI(this,attrib) \
-astINVOKE(V,astGetI_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetL(this,attrib) \
-astINVOKE(V,astGetL_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSetC(this,attrib,value) \
-astINVOKE(V,astSetC_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetD(this,attrib,value) \
-astINVOKE(V,astSetD_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetF(this,attrib,value) \
-astINVOKE(V,astSetF_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetI(this,attrib,value) \
-astINVOKE(V,astSetI_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetL(this,attrib,value) \
-astINVOKE(V,astSetL_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astShow(this) \
-astINVOKE(V,astShow_(astCheckObject(this),STATUS_PTR))
-#define astTest(this,attrib) \
-astINVOKE(V,astTest_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSame(this,that) \
-astINVOKE(V,astSame_(astCheckObject(this),astCheckObject(that),STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-
-#if defined(THREAD_SAFE)
-#define astManageLock(this,mode,extra,fail) \
-astINVOKE(V,astManageLock_(astCheckObject(this),mode, extra,fail,STATUS_PTR))
-#else
-#define astManageLock(this,mode,extra,fail) 
-#endif
-
-#define astCleanAttribs(this) astINVOKE(V,astCleanAttribs_(astCheckObject(this),STATUS_PTR))
-#define astGetObjSize(this) astINVOKE(V,astGetObjSize_(astCheckObject(this),STATUS_PTR))
-#define astCast(this,obj) astINVOKE(O,astCast_(astCheckObject(this),astCheckObject(obj),STATUS_PTR))
-#define astCastCopy(this,obj) astCastCopy_((AstObject*)this,(AstObject*)obj,STATUS_PTR)
-
-#define astClearUseDefs(this) astINVOKE(V,astClearUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astTestUseDefs(this) astINVOKE(V,astTestUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astGetUseDefs(this) astINVOKE(V,astGetUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astSetUseDefs(this,val) astINVOKE(V,astSetUseDefs_(astCheckObject(this),val,STATUS_PTR))
-
-#define astClearAttrib(this,attrib) \
-astINVOKE(V,astClearAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClearID(this) astINVOKE(V,astClearID_(astCheckObject(this),STATUS_PTR))
-#define astClearIdent(this) astINVOKE(V,astClearIdent_(astCheckObject(this),STATUS_PTR))
-#define astDump(this,channel) \
-astINVOKE(V,astDump_(astCheckObject(this),astCheckChannel(channel),STATUS_PTR))
-
-#define astGetAttrib(this,attrib) \
-astINVOKE(V,astGetAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetClass(this) astINVOKE(V,astGetClass_((const AstObject *)(this),STATUS_PTR))
-#define astGetID(this) astINVOKE(V,astGetID_(astCheckObject(this),STATUS_PTR))
-#define astGetIdent(this) astINVOKE(V,astGetIdent_(astCheckObject(this),STATUS_PTR))
-#define astGetNobject(this) astINVOKE(V,astGetNobject_(astCheckObject(this),STATUS_PTR))
-#define astClassCompare(class1,class2) astClassCompare_(class1,class2,STATUS_PTR)
-#define astGetRefCount(this) astINVOKE(V,astGetRefCount_(astCheckObject(this),STATUS_PTR))
-#define astSetAttrib(this,setting) \
-astINVOKE(V,astSetAttrib_(astCheckObject(this),setting,STATUS_PTR))
-#define astSetCopy(vtab,copy) \
-astINVOKE(V,astSetCopy_((AstObjectVtab *)(vtab),copy,STATUS_PTR))
-#define astSetDelete(vtab,delete) \
-astINVOKE(V,astSetDelete_((AstObjectVtab *)(vtab),delete,STATUS_PTR))
-#define astSetDump(vtab,dump,class,comment) \
-astINVOKE(V,astSetDump_((AstObjectVtab *)(vtab),dump,class,comment,STATUS_PTR))
-#define astSetVtab(object,vtab) \
-astINVOKE(V,astSetVtab_((AstObject *)object,(AstObjectVtab *)(vtab),STATUS_PTR))
-#define astSetID(this,id) astINVOKE(V,astSetID_(astCheckObject(this),id,STATUS_PTR))
-#define astSetIdent(this,id) astINVOKE(V,astSetIdent_(astCheckObject(this),id,STATUS_PTR))
-#define astVSet(this,settings,text,args) \
-astINVOKE(V,astVSet_(astCheckObject(this),settings,text,args,STATUS_PTR))
-#define astTestAttrib(this,attrib) \
-astINVOKE(V,astTestAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astTestID(this) astINVOKE(V,astTestID_(astCheckObject(this),STATUS_PTR))
-#define astTestIdent(this) astINVOKE(V,astTestIdent_(astCheckObject(this),STATUS_PTR))
-
-/* Deprecated synonym. */
-#define astClass(this) astGetClass(this)
-#endif
-
-/* Extra stuff for debuging probnlems with object handles and memory usage */
-#ifdef MEM_DEBUG
-
-void astWatchHandle_( int );
-void astHandleUse_( int, const char *, ... );
-void astHandleAlarm_( const char *, va_list );
-
-#define astWatchHandle astWatchHandle_
-#define astHandleUse astHandleUse_
-#define astHandleAlarm astHandleAlarm_
-
-#else
-
-#define astWatchHandle
-#define astHandleUse
-#define astHandleAlarm 
-
-#endif
-
-#endif
-
diff --git a/ast-5.3-1/object.h.in b/ast-5.3-1/object.h.in
deleted file mode 100644
index 4245a9a..0000000
--- a/ast-5.3-1/object.h.in
+++ /dev/null
@@ -1,1713 +0,0 @@
-#if !defined( OBJECT_INCLUDED )  /* Include this file only once */
-#define OBJECT_INCLUDED
-/*
-*++
-*  Name:
-*     object.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Object class.
-
-*  Invocation:
-*     #include "object.h"
-
-*  Description:
-*     This include file defines the interface to the Object class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-
-*     The Object class is the base class from which all other classes
-*     in the AST library are derived. This class provides all the
-*     basic Object behaviour and Object manipulation facilities
-*     required throughout the library. There is no Object constructor,
-*     however, as Objects on their own are not of much use.
-
-*  Inheritance:
-*     The Object base class does not inherit from any other class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Class (string)
-*        This is a read-only attribute containing the name of the
-*        class to which an Object belongs.
-*     ID (string)
-*        An identification string which may be used to identify the
-*        Object (e.g.) in debugging output, or when stored in an
-*        external medium such as a data file. There is no restriction
-*        on the string's contents. The default is an empty string.
-*     Ident (string)
-*        Like ID, this is an identification string which may be used 
-*        to identify the Object. Unlike ID, Ident is transferred when an
-*        Object is copied.
-*     UseDefs (int)
-*        Should default values be used for unset attributes?
-*     Nobject (integer)
-*        This is a read-only attribute which gives the total number of
-*        Objects currently in existence in the same class as the
-*        Object given. It does not include Objects which belong to
-*        derived (more specialised) classes. This value is mainly
-*        intended for debugging, as it can be used to show whether
-*        Objects which should have been deleted have, in fact, been
-*        deleted.
-*     ObjSize (int)
-*        The in-memory size of the Object in bytes.
-*     RefCount (integer)
-*        This is a read-only Attribute which gives the "reference
-*        count" (the number of active pointers) associated with an
-*        Object. It is modified whenever pointers are created or
-*        annulled (by astClone or astAnnul/astEnd for example) and
-*        includes the initial pointer issued when the Object was
-*        created. If the reference count for an Object falls to zero
-*        as the result of annulling a pointer to it, then the Object
-*        will be deleted.
-
-*  Methods Over-Ridden:
-*     None.
-
-*  New Methods Defined:
-*     Public:
-*        astAnnul
-*           Annul a pointer to an Object.
-*        astClear
-*           Clear attribute values for an Object.
-*        astClone
-*           Clone a pointer to an Object.
-*        astCopy
-*           Copy an Object.
-*        astDelete
-*           Delete an Object.
-*        astExempt
-*           Exempt an Object pointer from AST context handling
-*        astExport
-*           Export an Object pointer to an outer context.
-*        astGet<X>, where <X> = C, D, F, I, L
-*           Get an attribute value for an Object.
-*        astImport
-*           Import an Object pointer into the current context.
-*        astSame
-*           Return true if two pointers refer to the same object.
-*        astSet
-*           Set attribute values for an Object.
-*        astSet<X>, where <X> = C, D, F, I, L
-*           Set an attribute value for an Object.
-*        astShow
-*           Display a textual representation of an Object on standard output.
-*        astTest
-*           Test if an attribute value is set for an Object.
-*        astTune
-*           Get or set the value of a global AST tuning parameter.
-*
-*     Protected:
-*        astAnnulId
-*           Annul an external ID for an Object (for use from protected code
-*           which must handle external IDs).
-*        astClearAttrib
-*           Clear the value of a specified attribute for an Object.
-*        astClearID
-*           Clear the value of the ID attribute for an Object.
-*        astClearIdent
-*           Clear the value of the Ident attribute for an Object.
-*        astCast
-*           Return a deep copy of an object, cast into an instance of a
-*           parent class.
-*        astDump
-*           Write an Object to a Channel.
-*        astEqual
-*           Are two Objects equivalent?
-*        astGetAttrib
-*           Get the value of a specified attribute for an Object.
-*        astGetClass (deprecated synonym astClass)
-*           Obtain the value of the Class attribute for an Object.
-*        astGetID
-*           Obtain the value of the ID attribute for an Object.
-*        astGetIdent
-*           Obtain the value of the Ident attribute for an Object.
-*        astGetNobject
-*           Obtain the value of the Nobject attribute for an Object.
-*        astGetRefCount
-*           Obtain the value of the RefCount attribute for an Object.
-*        astSetAttrib
-*           Set the value of a specified attribute for an Object.
-*        astSetCopy
-*           Declare a copy constructor for an Object.
-*        astSetDelete
-*           Declare a destructor for an Object.
-*        astSetDump
-*           Declare a dump function for an Object.
-*        astSetVtab
-*           Chaneg the virtual function table associated with an Object.
-*        astSetID
-*           Set the value of the ID attribute for an Object.
-*        astSetIdent
-*           Set the value of the Ident attribute for an Object.
-*        astTestAttrib
-*           Test if a specified attribute value is set for an Object.
-*        astTestID
-*           Test whether the ID attribute for an Object is set.
-*        astTestIdent
-*           Test whether the Ident attribute for an Object is set.
-*        astVSet
-*           Set values for an Object's attributes.
-
-*  Other Class Functions:
-*     Public:
-*        astBegin
-*           Begin a new AST context.
-*        astEnd
-*           End an AST context.
-*        astIsAObject
-*           Test class membership.
-*        astVersion
-*           Returns the AST library version number.
-*        astEscapes
-*           Remove escape sequences from returned text strings?
-*        astP2I
-*           Retrieve an int from a pointer.
-*        astI2P
-*           Pack an int into a pointer.
-*
-*     Protected:
-*        astCheckObject
-*           Validate class membership.
-*        astInitObject
-*           Initialise an Object.
-*        astInitObjectVtab
-*           Initialise the virtual function table for the Object class.
-*        astLoadObject
-*           Load an Object.
-*        astMakeId
-*           Issue an identifier for an Object.
-*        astMakePointer
-*           Obtain a true C pointer from an Object identifier.
-
-*  Macros:
-*     Public:
-*        AST__NULL
-*           Null Object pointer value.
-*        AST__VMAJOR
-*           The AST library major version number.
-*        AST__VMINOR
-*           The AST library minor version number.
-*        AST__RELEASE 
-*           The AST library release number.
-*
-*     Protected:
-*        astEQUAL
-*           Compare two doubles for equality.
-*        astMAX
-*           Return maximum of two values.
-*        astMIN
-*           Return minimum of two values.
-*        astMAKE_CHECK
-*           Implement the astCheck<Class>_ function for a class.
-*        astMAKE_CLEAR
-*           Implement a method to clear an attribute value for a class.
-*        astMAKE_GET
-*           Implement a method to get an attribute value for a class.
-*        astMAKE_ISA
-*           Implement the astIsA<Class>_ function for a class.
-*        astMAKE_SET
-*           Implement a method to set an attribute value for a class.
-*        astMAKE_TEST
-*           Implement a method to test if an attribute has been set for a
-*           class.
-*        astMEMBER
-*           Locate a member function.
-
-*  Type Definitions:
-*     Public:
-*        AstObject
-*           Object type.
-*
-*     Protected:
-*        AstObjectVtab
-*           Object virtual function table type.
-
-*  Feature Test Macros:
-*     AST_CHECK_CLASS
-*        If the AST_CHECK_CLASS macro is defined, then Object class
-*        checking is enabled for all internal function invocations
-*        within the AST library. Otherwise, this checking is
-*        omitted. This macro should normally be defined as a compiler
-*        option during library development and debugging, but left
-*        undefined for software releases, so as to improve
-*        peformance. Class checking by the AST public interface is not
-*        affected by this macro.
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-*     astFORTRAN77
-*        If the astFORTRAN77 macro is defined, reporting of error
-*        context information is suppressed. This is necessary when
-*        implementing foreign language interfaces to the AST library, as
-*        otherwise the file names and line numbers given would refer
-*        to the interface implementation rather than the user's own
-*        code.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     30-JAN-1996 (RFWS):
-*        Original version.
-*     19-APR-1996 (RFWS):
-*        Added macros for implementing attribute access methods.
-*     3-JUL-1996 (RFWS):
-*        Added new definitions to support the external interface.
-*     10-SEP-1996 (RFWS):
-*        Added loader and related facilities.
-*     30-MAY-1997 (RFWS):
-*        Add the ID attribute.
-*     14-JUL-1997 (RFWS):
-*        Add astExempt function.
-*     20-JAN-1998 (RFWS):
-*        Make the astClear and astVSet methods virtual.
-*     15-SEP-1999 (RFWS):
-*        Made the astAnnulId function accessible to protected code.
-*     3-APR-2001 (DSB):
-*        Added Ident attribute.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitObjectVtab method.
-*     30-APR-2003 (DSB):
-*        Added macros AST__VMAJOR, AST__VMINOR and AST__RELEASE.
-*        Added astVersion function.
-*     7-FEB-2004 (DSB):
-*        Added astEscapes function.
-*     11-MAR-2005 (DSB):
-*        Added UseDefs attribute.
-*     7-FEB-2006 (DSB):
-*        Added astTune function.
-*     14-FEB-2006 (DSB):
-*        Added ObjSize attribute.
-*     23-FEB-2006 (DSB):
-*        Moved AST__TUNULL from this file to memory.h.
-*     10-MAY-2006 (DSB):
-*        Added astEQUAL, astMAX and astMIN.
-*     26-MAY-2006 (DSB):
-*        Make all system includes unconditional, so that makeh is not
-*        confused when creating ast.h.
-*     22-JUN-2007 (DSB):
-*        - Make astVSet return a pointer to dynamic memory holding the 
-*        expanded setting string.
-*        - Add ast astSetVtab and astCast.
-*     22-APR-2008 (DSB):
-*        Added astSame.
-*--
-*/
-
-/* Include files. */
-/* ============== */
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"               /* Error reporting facilities */
-#include "version.h"             /* Version number macros */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include <stdarg.h>
-#include <float.h>
-#include <stdio.h>
-
-#if defined(THREAD_SAFE)
-#include <pthread.h>
-#endif
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Set to "1" (yes) or "0" (no) to indicate if AST was build with threads 
-   support. */
-#define AST__THREADSAFE @THREADS@
-
-#if defined(astCLASS )
-#define AST__GETATTRIB_BUFF_LEN 50 /* Length of string returned by GetAttrib. */
-#define AST__ASTGETC_MAX_STRINGS 50 /* Number of string values to buffer within astGetC */
-
-/* Values supplied to astManageLock */
-#define AST__LOCK 1      /* Lock the object */
-#define AST__UNLOCK 2    /* Unlock the object */
-#define AST__CHECKLOCK 3 /* Check if the object is locked */
-
-/* Values returned by astThread */
-#define AST__UNLOCKED 1  /* Object is unlocked */
-#define AST__RUNNING 2   /* Object is locked by the running thread */
-#define AST__OTHER 3     /* Object is locked by another thread */
-
-#endif
-
-/* Value that indicates that two classes are not in direct line from each
-   other. */
-#if defined(astCLASS )
-#define AST__COUSIN -1000000
-#endif
-
-/*
-*+
-*  Name:
-*     astINVOKE
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Invoke an AST function.
-
-*  Synopsis:
-*     #include "object.h"
-*     astINVOKE(rettype,function)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an invocation of an AST function, together
-*     with any additional actions required to support it.  The actual
-*     expansion depends on whether the macro is expanded in internal
-*     code (astCLASS defined) or external code (astCLASS undefined)
-*     and it therefore hides the differences between these two
-*     interfaces.
-
-*  Parameters:
-*     rettype
-*        A character to indicate the type of result returned by the function:
-*
-*        V
-*           The function returns a value (including void or a pointer
-*           value, but excluding an Object pointer). astINVOKE will
-*           return the value unchanged.
-*        O
-*           The function returns an Object pointer. astINVOKE will
-*           convert it to an Object identifier if necessary.
-*        F
-*           The function returns a function pointer. astINVOKE will
-*           return it unchanged. This is typically used when the
-*           function has a variable argument list. In this case the
-*           function name is passed to astINVOKE without its argument
-*           list and a pointer to the function is returned which can
-*           then be supplied with an argument list. This avoids the
-*           need to define a macro with a variable number of arguments
-*           (which isn't allowed).
-*     function
-*        A normal invocation of the function returning the required
-*        result.  In the case of a variable argument list, the
-*        argument list should be omitted so that the function is not
-*        invoked but a function pointer is returned that may then be
-*        used to invoke it.
-
-*  Examples:
-*     #define astGetNobject(this) \
-*             astINVOKE(V,astGetNobject_(astCheckObject(this)))
-*        Defines a macro to invoke the astGetNobject_ function which
-*        returns an int.
-*     #define astClone(this) \
-*             astINVOKE(O,astClone_(astCheckObject(this)))
-*        Defines a macro to invoke the astClone_ function which
-*        returns an Object pointer.
-*     #define astSet astINVOKE(F,astSet_)
-*        Defines a macro to invoke the astSet_ function which has a
-*        variable argument list and returns void. The macro result is
-*        a pointer to the astSet_ function. This function must perform
-*        its own argument validation, as (e.g) astCheckObject cannot
-*        be invoked on its arguments via a macro.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define astINVOKE, which records the current file and line number
-   (in case of error) using astAt, and then invokes the function
-   supplied as an argument of the astRetV_, astRetO_ or astRetF_
-   macro.
-
-   Suppress reporting of the file and line number from internal code
-   and from foreign language interfaces by not using astAt in these
-   cases. */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define astINVOKE(rettype,function) astRet##rettype##_(function)
-#else
-#define astINVOKE(rettype,function) \
-astERROR_INVOKE(astRet##rettype##_(function))
-#endif
-
-/* astRetF_ and astRetV_ currently do nothing. */
-#define astRetF_(x) (x)
-#define astRetV_(x) (x)
-
-/* However, astRetO_ converts a pointer to an ID if necessary. */
-#if defined(astCLASS)
-#define astRetO_(x) ((void *)(x))
-#else
-#define astRetO_(x) ((void *)astMakeId_((AstObject *)(x),STATUS_PTR))
-#endif
-
-/*
-*+
-*  Name:
-*     astINVOKE_CHECK
-*     astINVOKE_ISA
-
-*  Type:
-*     Protected macros.
-
-*  Purpose:
-*     Invoke the astCheck<Class>_ and astIsA<Class>_ functions.
-
-*  Synopsis:
-*     #include "object.h"
-*     astINVOKE_CHECK(class,this,force)
-*     astINVOKE_ISA(class,this)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     These macros expand to invocations of the standard
-*     astCheck<Class>_ and astIsA<Class>_ functions for a class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class for which the function
-*        is to be invoked.
-*     this
-*        The "this" argument (the Object pointer) to be passed to the
-*        function.
-*     force
-*        Type checking takes time, and so can be disabled within the
-*        protected context in order to save time. Setting "force" to 
-*        zero causes the astINVOKE_CHECK macro to skip the class check 
-*        in a protected context (it assumes that AST "knows what it is 
-*        doing"). Setting "force" to a non-zero value forces the class
-*        check even in a protected context.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* For the public interface (and also internally if AST_CHECK_CLASS is
-   defined), define astINVOKE_CHECK to invoke the astCheck<Class>
-   function. */
-#if !defined(astCLASS) || defined(AST_CHECK_CLASS)
-#define astINVOKE_CHECK(class,this,force) \
-astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr)
-
-/* For the internal interface, astINVOKE_CHECK omits the
-   astCheck<class> function (unless AST_CHECK_CLASS is defined). */
-#else
-
-#define astINVOKE_CHECK(class,this,force) ( (force) ? \
-   ( astCheck##class##_((Ast##class *)astEnsurePointer_(this),astGetStatusPtr) ) : \
-   ( (Ast##class *) astEnsurePointer_(this) ) )
-
-#endif
-
-/* Define astINVOKE_ISA to invoke the astIsA<Class> function. */
-#if defined(astCLASS)            /* Protected */
-#define astINVOKE_ISA(class,this) \
-astIsA##class##_((const Ast##class *)(this),status)
-#else                            /* Public */
-#define astINVOKE_ISA(class,this) \
-astINVOKE(V,astIsA##class##_((const Ast##class *)astEnsurePointer_(this),astGetStatusPtr))
-#endif
-
-/* The astEnsurePointer_ macro ensures a true C pointer, converting
-   from an ID if necessary. */
-#if defined(astCLASS)            /* Protected */
-#define astEnsurePointer_(x) ((void *)(x))
-#else                            /* Public */
-#define astEnsurePointer_(x) ((void *)astCheckLock_(astMakePointer_((AstObject *)(x),STATUS_PTR),STATUS_PTR))
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_CHECK
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Implement the astCheck<Class>_ function for a class.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_CHECK(class)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of the public astCheck<Class>_
-*     function (q.v.) which validates membership of a specified class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class whose membership is to be
-*        validated.
-
-*  Notes:
-*     -  This macro is provided so that class definitions can easiy
-*     implement the astCheck<Class>_ function, which is essentially the same
-*     for each class apart for a change of name.
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-#ifndef MEM_DEBUG
-
-/* Define the macro. */
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
-   if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
-   of some sort), then report more information about why this Object is \
-   unsuitable. */ \
-      if ( astOK ) { \
-         astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
-                   "to %s given.", status, astGetClass( this ) ); \
-      } \
-   } \
-\
-/* Return the pointer value supplied. */ \
-   return this; \
-}
-
-/* Define the macro with memory debugging facilities. */
-#else
-
-#define astMAKE_CHECK(class) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-Ast##class *astCheck##class##_( Ast##class *this, int *status ) { \
-\
-   char buf[100]; \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return this; \
-\
-/* Check if the object is a class member. */ \
-   if ( !astIsA##class( this ) ) { \
-\
-/* If not, but the pointer was valid (which means it identifies an Object \
-   of some sort), then report more information about why this Object is \
-   unsuitable. */ \
-      if ( astOK ) { \
-         astError( AST__OBJIN, "Pointer to " #class " required, but pointer " \
-                   "to %s given.", status, astGetClass( this ) ); \
-      }\
-\
-   } else { \
-\
-/* Call the astMemoryUse function to report it if the memory block is \
-   being watched. */ \
-      sprintf( buf, "checked (refcnt: %d)", astGetRefCount_( (AstObject *) this, status ) ); \
-      astMemoryUse( this, buf ); \
-   } \
-\
-/* Return the pointer value supplied. */ \
-   return this; \
-}
-#endif
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear an attribute value for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_CLEAR(class,attribute,component,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( Ast<Class> *this )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( Ast<Class> *this )
-*
-*     which implement a method for clearing a specified attribute value for
-*     a class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class to which the attribute belongs.
-*     attribute
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. Label in "astClearLabel").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-
-*  Examples:
-*     astMAKE_CLEAR(MyStuff,Flag,flag,-1)
-*        Implements the astClearFlag method for the MyStuff class which
-*        operates by setting the "flag" structure component to -1 to indicate
-*        that it has no value.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_CLEAR(class,attribute,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attribute( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Assign the "clear" value. */ \
-   this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,class,Clear##attribute))( this, status ); \
-}   
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_GET
-
-*  Purpose:
-*     Implement a method to get an attribute value for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_GET(class,attribute,type,bad_value,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( Ast<Class> *this )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( Ast<Class> *this )
-*
-*     which implement a method for getting a specified attribute value for a
-*     class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class to which the attribute belongs.
-*     attribute
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the inherited error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned.
-
-*  Examples:
-*     astMAKE_GET(MyStuff,Flag,int,0,( this->flag == 1 ))
-*        Implements the astGetFlag method for the MyStuff class which operates
-*        by examining the integer "flag" structure component and comparing it
-*        with the value 1 to see if it is set. A value of 0 is returned if the
-*        method fails to complete successfully.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_GET(class,attribute,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attribute( Ast##class *this, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Assign the result value. */ \
-   result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,class,Get##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_ISA
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Implement the astIsA<Class>_ function for a class.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_ISA(class,parent)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of the public
-*     astIsA<Class>_ function (q.v.) which checks membership of a
-*     specified class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class whose membership is to be
-*        tested.
-*     parent
-*        The name of the parent class.
-
-*  Notes:
-*     - This macro is provided so that class definitions can easiy
-*     implement the astIsA<Class>_ function, which is essentially the
-*     same for each class apart for a change of name.
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_ISA(class,parent) \
-\
-/* Declare the function (see the object.c file for a prologue). */ \
-int astIsA##class##_( const Ast##class *this, int *status ) { \
-\
-/* Local Variables: */ \
-   int isa = 0;                  /* Is object a member? */ \
-\
-/* To test if the object is correctly constructed, we first test if it is a \
-   member of the parent class. This improves the security of the test by \
-   checking the object structure from the base Object class downwards \
-   (without this, the "magic numbers" that identify classes might be \
-   encountered by accident or we might address parts of the Object which \
-   don't exist). */ \
-   if ( astIsA##parent( this ) ) { \
-\
-/* Obtain the Object's size and check it is adequate for an object of the \
-   proposed type (this avoids any attempt to access derived class data that \
-   doesn't exist and therefore lies outside the memory allocated for the \
-   object). */ \
-      if ( ( (AstObject *) this )->size >= sizeof( Ast##class ) ) { \
-\
-/* If OK, see whether the check component in the object's virtual function \
-   table matches the expected "magic" value. */ \
-         isa = ( *astMEMBER(this,class,id.check) == &class_check ); \
-      } \
-   } \
-\
-/* Return the result. */ \
-   return isa; \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_SET
-
-*  Purpose:
-*     Implement a method to set an attribute value for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_SET(class,attribute,type,component,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( Ast<Class> *this, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( Ast<Class> *this, <Type> value )
-*
-*     which implement a method for setting a specified attribute value for a
-*     class.
-
-*  Parameters:
-*      class
-*         The name (not the type) of the class to which the attribute belongs.
-*      attribute
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. Label in "astSetLabel").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-
-*  Examples:
-*     astMAKE_SET(MyStuff,Flag,int,flag,( value != 0 ))
-*        Implements the astSetFlag method for the MyStuff class which operates
-*        by setting the "flag" structure component to 0 or 1 depending on
-*        whether the "value" parameter is non-zero or not.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_SET(class,attribute,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attribute( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
-   this->component = (assign); \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attribute##_( Ast##class *this, type value, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,class,Set##attribute))( this, value, status ); \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if an attribute has been set for a class.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMAKE_TEST(class,attribute,assign)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( Ast<Class> *this )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( Ast<Class> *this )
-*
-*     which implement a method for testing if a specified attribute has been
-*     set for a class.
-
-*  Parameters:
-*      class
-*         The name (not the type) of the class to which the attribute belongs.
-*      attribute
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. Label in "astTestLabel").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value.
-
-*  Examples:
-*     astMAKE_TEST(MyStuff,Flag,( this->flag != -1 ))
-*        Implements the astTestFlag method for the MyStuff class which operates
-*        by testing the "flag" structure component to see if it is set to a
-*        value other than -1.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define astMAKE_TEST(class,attribute,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attribute( Ast##class *this, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Assign the result value. */ \
-   result = (assign); \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attribute##_( Ast##class *this, int *status ) { \
-\
-/* Check the inherited error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,class,Test##attribute))( this, status ); \
-}
-#endif
-
-#if defined(astCLASS)            /* Protected */
-/*
-*+
-*  Name:
-*     astMEMBER
-
-*  Purpose:
-*     Locate a member function.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     #include "object.h"
-*     astMEMBER(this,class,method)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     This macro evaluates to the address where the pointer to a
-*     specified Object member function is stored. Typically, this will
-*     be used to obtain a pointer to the member function so that it
-*     can be invoked. It may also be used to assign a new function
-*     pointer so that a derived class can re-define a virtual function
-*     and hence over-ride an inherited method.
-
-*  Parameters:
-*     this
-*        Pointer to an Object belonging to the class for which the
-*        virtual function is required. This must either be the class
-*        that originally defined the method, or one derived from it.
-*     class
-*        Name of the class that originally defined the method. This
-*        may differ from (i.e. be an ancestor of) the class to which
-*        "this" belongs.
-*     method
-*        Name of the method whose member function is to be located.
-
-*  Returned Value:
-*     The address where the member function pointer is stored (the
-*     type of the result is determined by the type of the member
-*     function itself).
-
-*  Examples:
-*     astMEMBER(this,Gnome,astFish)
-*        Returns the address where the pointer to the function that
-*        implements the astFish method for the "this" object is
-*        stored. The Gnome class should be where the astFish method
-*        was first defined (i.e. from where it was inherited by
-*        "this").
-*     (**astMEMBER(this,Gnome,astFish))( this, arg1, arg2 );
-*        Invokes the virtual function that implements the astFish
-*        method for object "this" and passes it additional arguments
-*        "arg2" and "arg2".  Again, Gnome should be the class that
-*        originally defined the astFish method.
-*     *astMEMBER(this,Gnome,astFish) = myFish;
-*        Stores a pointer to the myFish function so that it replaces
-*        the virtual function that previously implemented the astFish
-*        method for the "this" object. Note that all objects in the
-*        same class as "this" are affected, but objects in class
-*        "class" are not affected (unless it happens to be the class
-*        to which "this" belongs).
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* A subsiduary macro that returns a pointer to the vtab of an object, 
-   cast to an AstObjectVtab. */
-#define astVTAB(this) (((AstObject*)(this))->vtab)
-
-/* Define the macro. This functions by (a) casting the Object pointer
-   to type (AstObject *) and locating the Object's virtual function
-   table (b) casting the table pointer to the correct type
-   (AstClassVtab *) for the class in which the method pointer resides,
-   (c) locating the component holding the member function pointer, and
-   (d) taking its address. */
-#define astMEMBER(this,class,method) \
-(&((Ast##class##Vtab*)astVTAB(this))->method)
-
-#endif
-
-/*
-*+
-*  Name:
-*     astPROTO_CHECK
-*     astPROTO_ISA
-
-*  Type:
-*     Protected macros.
-
-*  Purpose:
-*     Prototype the astCheck<Class>_ and astIsA<Class>_ functions.
-
-*  Synopsis:
-*     #include "object.h"
-*     astPROTO_CHECK(class)
-*     astPROTO_ISA(class)
-
-*  Class Membership:
-*     Defined by the Object class.
-
-*  Description:
-*     These macros expands to function prototypes for the
-*     astCheck<Class>_ and astIsA<Class>_ functions (q.v.) which
-*     validate and test for membership of a specified class.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class whose membership is to
-*        be validated.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macros. */
-#define astPROTO_CHECK(class) Ast##class *astCheck##class##_( Ast##class *, int * );
-#define astPROTO_ISA(class) int astIsA##class##_( const Ast##class *, int * );
-
-/* Macros which return the maximum and minimum of two values. */
-#define astMAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define astMIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Check for equality of floating point values. We cannot compare bad values 
-   directly because of the danger of floating point exceptions, so bad 
-   values are dealt with explicitly. */
-#define astEQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*astMAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* AST__NULL. */
-/* ---------- */
-/* Define the AST__NULL macro, which evaluates to a null Object
-   pointer. */
-#define AST__NULL (astI2P(0))
-
-
-#if defined(astCLASS)            /* Protected */
-
-/* Test the validy of an attribute value  */
-/* -------------------------------------  */
-/* If the set attribute value is invalid, clear it. These macros should
-   be used in a context in which error reporting has been deferred by 
-   calling astReporting( 0 ). */
-
-#define astCLEAN_ATTRIB(attr) \
-   if( astTest##attr(this) ) { \
-      astSet##attr( this, astGet##attr( this ) ); \
-      if( !astOK ) { \
-         astClearStatus; \
-         astClear##attr( this ); \
-      } \
-   }  
-
-#define astCLEAN_INDEXED_ATTRIB(attr,index) \
-   if( astTest##attr(this,index) ) { \
-      astSet##attr( this, index, astGet##attr( this, index ) ); \
-      if( !astOK ) { \
-         astClearStatus; \
-         astClear##attr( this, index ); \
-      } \
-   }  
-
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-#define astSetVtabClassIdentifier(vtab,id_ptr) \
-   ((AstObjectVtab *)(vtab))->top_id = (id_ptr)
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Object structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstObject {
-
-/* Attributes specific to objects in this class. */
-   unsigned long check;          /* Check value to identify Objects */
-   size_t size;                  /* Amount of memory used by Object */
-   struct AstObjectVtab *vtab;   /* Pointer to virtual function table */
-   char dynamic;                 /* Memory allocated dynamically? */
-   int ref_count;                /* Number of active pointers to the Object */
-   char *id;                     /* Pointer to ID string */
-   char *ident;                  /* Pointer to Ident string */
-   char usedefs;                 /* Use default attribute values? */
-
-#if defined(THREAD_SAFE)
-   int locker;                   /* Thread that has locked this Object */
-   pthread_mutex_t mutex1;       /* Guards access to all elements of the
-                                    Object except for the "locker" and
-                                    "ref_count" components */
-   pthread_mutex_t mutex2;       /* Guards access to the "locker" and
-                                    "ref_count" components */
-   struct AstGlobals *globals;   /* Pointer to thread-specific global data */
-#endif
-
-} AstObject;
-
-/* Class identifier structure */
-typedef struct AstClassIdentifier {
-   int *check;
-   struct AstClassIdentifier *parent;
-} AstClassIdentifier;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* The virtual function table makes a forward reference to the
-   AstChannel structure which is not defined until "channel.h" is
-   included (below). Hence make a preliminary definition available
-   now. */
-struct AstChannel;
-
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstObjectVtab {
-
-/* A unique identifier for this class. */
-   AstClassIdentifier id;
-
-/* Pointer to the structure that identifies the top-level class described
-   by the whole vtab (of which the AstObjectVtab is just the first,
-   lowest-level, component). */
-   AstClassIdentifier *top_id;
-
-/* Properties specific to this class. */
-   void ( *CleanAttribs )( AstObject *, int * );
-   AstObject *( *Cast )( AstObject *, AstObject *, int * );
-   const char *( *GetID )( AstObject *, int * );
-   const char *( *GetIdent )( AstObject *, int * );
-   const char *(* GetAttrib)( AstObject *, const char *, int * );
-   int (* TestAttrib)( AstObject *, const char *, int * );
-   int (* TestID)( AstObject *, int * );
-   int (* Same)( AstObject *, AstObject *, int * );
-   int (* TestIdent)( AstObject *, int * );
-   void (* Clear)( AstObject *, const char *, int * );
-   void (* ClearAttrib)( AstObject *, const char *, int * );
-   void (* ClearID)( AstObject *, int * );
-   void (* ClearIdent)( AstObject *, int * );
-   void (* Dump)( AstObject *, struct AstChannel *, int * );
-   int (* Equal)( AstObject *, AstObject *, int * );
-   void (* SetAttrib)( AstObject *, const char *, int * );
-   void (* SetID)( AstObject *, const char *, int * );
-   void (* SetIdent)( AstObject *, const char *, int * );
-   void (* Show)( AstObject *, int * );
-   void (* VSet)( AstObject *, const char *, char **, va_list, int * );
-
-   int (* GetObjSize)( AstObject *, int * );
-
-   int (* TestUseDefs)( AstObject *, int * );
-   int (* GetUseDefs)( AstObject *, int * );
-   void (* SetUseDefs)( AstObject *, int, int * );
-   void (* ClearUseDefs)( AstObject *, int * );
-
-   const char *class;            /* Pointer to class name string */
-   void (** delete)( AstObject *, int * ); /* Pointer to array of destructors */
-   void (** copy)( const AstObject *, AstObject *, int * ); /* Copy constructors */
-   void (** dump)( AstObject *, struct AstChannel *, int * ); /* Dump functions */
-   const char **dump_class;      /* Dump function class string pointers */
-   const char **dump_comment;    /* Dump function comment string pointers */
-   int ndelete;                  /* Number of destructors */
-   int ncopy;                    /* Number of copy constructors */
-   int ndump;                    /* Number of dump functions */
-   int nobject;                  /* Number of active objects in the class */
-   int nfree;                    /* No. of entries in "free_list" */
-   AstObject **free_list;        /* List of pointers for freed Objects */
-
-#if defined(THREAD_SAFE)
-   int (* ManageLock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-} AstObjectVtab;
-#endif
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstObjectGlobals {
-   AstObjectVtab Class_Vtab; 
-   int Class_Init;
-   int Retain_Esc; 
-   int Context_Level; 
-   int *Active_Handles; 
-   char GetAttrib_Buff[ AST__GETATTRIB_BUFF_LEN + 1 ];  
-   char *AstGetC_Strings[ AST__ASTGETC_MAX_STRINGS ];  
-   int AstGetC_Istr;           
-   int AstGetC_Init; 
-   int Nvtab;
-   AstObjectVtab **Known_Vtabs;
-} AstObjectGlobals;
-
-#endif
-
-/* More include files. */
-/* =================== */
-/* The interface to the Channel class must be included here (after the
-   type definitions for the Object class) because "channel.h" itself
-   includes this file ("object.h"), although "object.h" refers to the
-   AstChannel structure above. This seems a little strange at first,
-   but is simply analogous to making a forward reference to a
-   structure type when recursively defining a normal C structure
-   (except that here the definitions happen to be in separate include
-   files). */
-#include "channel.h"
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Object)           /* Validate class membership */
-astPROTO_ISA(Object)             /* Test class membership */
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstObject *astInitObject_( void *, size_t, int, AstObjectVtab *,
-                           const char *, int * );
-
-/* Vtab Initialiser. */
-void astInitObjectVtab_( AstObjectVtab *, const char *, int * );
-
-/* Loader. */
-AstObject *astLoadObject_( void *, size_t, AstObjectVtab *,
-                           const char *, AstChannel *channel, int * );
-
-#if defined(THREAD_SAFE) 
-void astInitObjectGlobals_( AstObjectGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for other class functions. */
-/* ------------------------------------- */
-#if !defined(astCLASS)           /* Public */
-void astBegin_( void );
-void astEnd_( int * );
-#endif
-
-AstObject *astI2P_( int, int * );
-AstObject *astMakeId_( AstObject *, int * );
-AstObject *astMakePointer_( AstObject *, int * );
-AstObject *astMakePointer_NoLockCheck_( AstObject *, int * );
-int astP2I_( AstObject *, int * );
-int astVersion_( int * );
-int astEscapes_( int, int * );
-int astTune_( const char *, int, int * );
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS)            /* Protected */
-AstObject *astAnnul_( AstObject *, int * );
-AstObject *astDelete_( AstObject *, int * );
-void astSet_( void *, const char *, int *, ... );
-
-#else                            /* Public */
-AstObject *astDeleteId_( AstObject *, int * );
-int astThreadId_( AstObject *, int, int * );
-void astExportId_( AstObject *, int * );
-void astImportId_( AstObject *, int * );
-void astSetId_( void *, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-AstObject *astAnnulId_( AstObject *, int * );
-AstObject *astCheckLock_( AstObject *, int * );
-AstObject *astClone_( AstObject *, int * );
-AstObject *astCopy_( const AstObject *, int * );
-const char *astGetC_( AstObject *, const char *, int * );
-double astGetD_( AstObject *, const char *, int * );
-float astGetF_( AstObject *, const char *, int * );
-int astEqual_( AstObject *, AstObject *, int * );
-int astGetI_( AstObject *, const char *, int * );
-int astSame_( AstObject *, AstObject *, int * );
-int astTest_( AstObject *, const char *, int * );
-long astGetL_( AstObject *, const char *, int * );
-void astClear_( AstObject *, const char *, int * );
-void astExemptId_( AstObject *, int * );
-void astLockId_( AstObject *, int, int * );
-void astSetC_( AstObject *, const char *, const char *, int * );
-void astSetD_( AstObject *, const char *, double, int * );
-void astSetF_( AstObject *, const char *, float, int * );
-void astSetI_( AstObject *, const char *, int, int * );
-void astSetL_( AstObject *, const char *, long, int * );
-void astShow_( AstObject *, int * );
-void astUnlockId_( AstObject *, int, int * );
-
-#if defined(astCLASS)            /* Protected */
-
-void astCleanAttribs_( AstObject *, int * );
-AstObject *astCast_( AstObject *, AstObject *, int * );
-AstObject *astCastCopy_( AstObject *, AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-int astManageLock_( AstObject *, int, int, AstObject **, int * );
-#endif
-
-int astGetObjSize_( AstObject *, int * );
-
-int astTestUseDefs_( AstObject *, int * );
-int astGetUseDefs_( AstObject *, int * );
-void astSetUseDefs_( AstObject *, int, int * );
-void astClearUseDefs_( AstObject *, int * );
-
-const char *astGetAttrib_( AstObject *, const char *, int * );
-const char *astGetClass_( const AstObject *, int * );
-const char *astGetID_( AstObject *, int * );
-const char *astGetIdent_( AstObject *, int * );
-int astClassCompare_( AstObjectVtab *, AstObjectVtab *, int * );
-int astGetNobject_( const AstObject *, int * );
-int astGetRefCount_( AstObject *, int * );
-int astTestAttrib_( AstObject *, const char *, int * );
-int astTestID_( AstObject *, int * );
-int astTestIdent_( AstObject *, int * );
-void astClearAttrib_( AstObject *, const char *, int * );
-void astClearID_( AstObject *, int * );
-void astClearIdent_( AstObject *, int * );
-void astDump_( AstObject *, AstChannel *, int * );
-void astSetAttrib_( AstObject *, const char *, int * );
-void astSetCopy_( AstObjectVtab *, void (*)( const AstObject *, AstObject *, int * ), int * );
-void astSetDelete_( AstObjectVtab *, void (*)( AstObject *, int * ), int * );
-void astSetDump_( AstObjectVtab *, void (*)( AstObject *, AstChannel *, int * ), const char *, const char *, int * );
-void astSetVtab_( AstObject *, AstObjectVtab *, int * );
-void astSetID_( AstObject *, const char *, int * );
-void astSetIdent_( AstObject *, const char *, int * );
-void astVSet_( AstObject *, const char *, char **, va_list, int * );
-
-#endif
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Check class membership. */
-#define astCheckObject(this) astINVOKE_CHECK(Object,this,0)
-#define astVerifyObject(this) astINVOKE_CHECK(Object,this,1)
-
-/* Test class membership. */
-#define astIsAObject(this) astINVOKE_ISA(Object,this)
-
-/* NB. There is no constructor function for this class. */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitObject(mem,size,init,vtab,name) \
-astINVOKE(O,astInitObject_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitObjectVtab(vtab,name) astINVOKE(V,astInitObjectVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadObject(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadObject_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to other class functions. */
-/* ------------------------------------ */
-#if !defined(astCLASS)           /* Public */
-#define astBegin astBegin_()
-#define astEnd astINVOKE(V,astEnd_(STATUS_PTR))
-#else                            /* Protected */
-#define astMakePointer_NoLockCheck(id) ((void *)astMakePointer_NoLockCheck_((AstObject *)(id),STATUS_PTR))
-#endif
-
-#define astVersion astVersion_(STATUS_PTR)
-#define astEscapes(int) astEscapes_(int,STATUS_PTR)
-#define astTune(name,val) astTune_(name,val,STATUS_PTR)
-#define astI2P(integer) ((void *)astI2P_(integer,STATUS_PTR))
-#define astMakeId(pointer) ((void *)astMakeId_((AstObject *)(pointer),STATUS_PTR))
-#define astP2I(pointer) astP2I_((AstObject *)(pointer),STATUS_PTR)
-#define astMakePointer(id) ((void *)astCheckLock_(astMakePointer_((AstObject *)(id),STATUS_PTR),STATUS_PTR))
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckObject (et al.) to validate Object
-   pointers before use. This provides a contextual error report if a
-   pointer to the wrong sort of object is supplied. In the case of an
-   external caller, it also performs the required conversion from an
-   Object identifier to a true C pointer. */
-
-/* These functions require special treatment for external use because
-   they handle Object identifiers and their resources explicitly, and
-   must therefore be passed identifier values without conversion to C
-   pointers. */
-#if defined(astCLASS)            /* Protected only */
-#define astAnnul(this) astINVOKE(O,astAnnul_(astCheckObject(this),STATUS_PTR))
-#define astAnnulId(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDelete_(astCheckObject(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSet_)
-
-#else                            /* Public only */
-#define astAnnul(this) astINVOKE(O,astAnnulId_((AstObject *)(this),STATUS_PTR))
-#define astDelete(this) astINVOKE(O,astDeleteId_((AstObject *)(this),STATUS_PTR))
-#define astExport(this) astINVOKE(V,astExportId_((AstObject *)(this),STATUS_PTR))
-#define astImport(this) astINVOKE(V,astImportId_((AstObject *)(this),STATUS_PTR))
-#define astSet astINVOKE(F,astSetId_)
-#define astThread(this,ptr) astINVOKE(V,astThreadId_((AstObject *)(this),ptr,STATUS_PTR))
-#endif
-
-/* Both.... */
-#define astLock(this,wait) astINVOKE(V,astLockId_((AstObject *)(this),wait,STATUS_PTR))
-#define astUnlock(this,report) astINVOKE(V,astUnlockId_((AstObject *)(this),report,STATUS_PTR))
-#define astEqual(this,that) astINVOKE(V,(((AstObject*)this==(AstObject*)that)||astEqual_(astCheckObject(this),astCheckObject(that),STATUS_PTR)))
-#define astExempt(this) astINVOKE(V,astExemptId_((AstObject *)(this),STATUS_PTR))
-#define astClear(this,attrib) astINVOKE(V,astClear_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClone(this) astINVOKE(O,astClone_(astCheckObject(this),STATUS_PTR))
-#define astCopy(this) astINVOKE(O,astCopy_(astCheckObject(this),STATUS_PTR))
-#define astGetC(this,attrib) astINVOKE(V,astGetC_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetD(this,attrib) astINVOKE(V,astGetD_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetF(this,attrib) astINVOKE(V,astGetF_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetI(this,attrib) \
-astINVOKE(V,astGetI_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetL(this,attrib) \
-astINVOKE(V,astGetL_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSetC(this,attrib,value) \
-astINVOKE(V,astSetC_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetD(this,attrib,value) \
-astINVOKE(V,astSetD_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetF(this,attrib,value) \
-astINVOKE(V,astSetF_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetI(this,attrib,value) \
-astINVOKE(V,astSetI_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astSetL(this,attrib,value) \
-astINVOKE(V,astSetL_(astCheckObject(this),attrib,value,STATUS_PTR))
-#define astShow(this) \
-astINVOKE(V,astShow_(astCheckObject(this),STATUS_PTR))
-#define astTest(this,attrib) \
-astINVOKE(V,astTest_(astCheckObject(this),attrib,STATUS_PTR))
-#define astSame(this,that) \
-astINVOKE(V,astSame_(astCheckObject(this),astCheckObject(that),STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-
-#if defined(THREAD_SAFE)
-#define astManageLock(this,mode,extra,fail) \
-astINVOKE(V,astManageLock_(astCheckObject(this),mode, extra,fail,STATUS_PTR))
-#else
-#define astManageLock(this,mode,extra,fail) 
-#endif
-
-#define astCleanAttribs(this) astINVOKE(V,astCleanAttribs_(astCheckObject(this),STATUS_PTR))
-#define astGetObjSize(this) astINVOKE(V,astGetObjSize_(astCheckObject(this),STATUS_PTR))
-#define astCast(this,obj) astINVOKE(O,astCast_(astCheckObject(this),astCheckObject(obj),STATUS_PTR))
-#define astCastCopy(this,obj) astCastCopy_((AstObject*)this,(AstObject*)obj,STATUS_PTR)
-
-#define astClearUseDefs(this) astINVOKE(V,astClearUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astTestUseDefs(this) astINVOKE(V,astTestUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astGetUseDefs(this) astINVOKE(V,astGetUseDefs_(astCheckObject(this),STATUS_PTR))
-#define astSetUseDefs(this,val) astINVOKE(V,astSetUseDefs_(astCheckObject(this),val,STATUS_PTR))
-
-#define astClearAttrib(this,attrib) \
-astINVOKE(V,astClearAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astClearID(this) astINVOKE(V,astClearID_(astCheckObject(this),STATUS_PTR))
-#define astClearIdent(this) astINVOKE(V,astClearIdent_(astCheckObject(this),STATUS_PTR))
-#define astDump(this,channel) \
-astINVOKE(V,astDump_(astCheckObject(this),astCheckChannel(channel),STATUS_PTR))
-
-#define astGetAttrib(this,attrib) \
-astINVOKE(V,astGetAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astGetClass(this) astINVOKE(V,astGetClass_((const AstObject *)(this),STATUS_PTR))
-#define astGetID(this) astINVOKE(V,astGetID_(astCheckObject(this),STATUS_PTR))
-#define astGetIdent(this) astINVOKE(V,astGetIdent_(astCheckObject(this),STATUS_PTR))
-#define astGetNobject(this) astINVOKE(V,astGetNobject_(astCheckObject(this),STATUS_PTR))
-#define astClassCompare(class1,class2) astClassCompare_(class1,class2,STATUS_PTR)
-#define astGetRefCount(this) astINVOKE(V,astGetRefCount_(astCheckObject(this),STATUS_PTR))
-#define astSetAttrib(this,setting) \
-astINVOKE(V,astSetAttrib_(astCheckObject(this),setting,STATUS_PTR))
-#define astSetCopy(vtab,copy) \
-astINVOKE(V,astSetCopy_((AstObjectVtab *)(vtab),copy,STATUS_PTR))
-#define astSetDelete(vtab,delete) \
-astINVOKE(V,astSetDelete_((AstObjectVtab *)(vtab),delete,STATUS_PTR))
-#define astSetDump(vtab,dump,class,comment) \
-astINVOKE(V,astSetDump_((AstObjectVtab *)(vtab),dump,class,comment,STATUS_PTR))
-#define astSetVtab(object,vtab) \
-astINVOKE(V,astSetVtab_((AstObject *)object,(AstObjectVtab *)(vtab),STATUS_PTR))
-#define astSetID(this,id) astINVOKE(V,astSetID_(astCheckObject(this),id,STATUS_PTR))
-#define astSetIdent(this,id) astINVOKE(V,astSetIdent_(astCheckObject(this),id,STATUS_PTR))
-#define astVSet(this,settings,text,args) \
-astINVOKE(V,astVSet_(astCheckObject(this),settings,text,args,STATUS_PTR))
-#define astTestAttrib(this,attrib) \
-astINVOKE(V,astTestAttrib_(astCheckObject(this),attrib,STATUS_PTR))
-#define astTestID(this) astINVOKE(V,astTestID_(astCheckObject(this),STATUS_PTR))
-#define astTestIdent(this) astINVOKE(V,astTestIdent_(astCheckObject(this),STATUS_PTR))
-
-/* Deprecated synonym. */
-#define astClass(this) astGetClass(this)
-#endif
-
-/* Extra stuff for debuging probnlems with object handles and memory usage */
-#ifdef MEM_DEBUG
-
-void astWatchHandle_( int );
-void astHandleUse_( int, const char *, ... );
-void astHandleAlarm_( const char *, va_list );
-
-#define astWatchHandle astWatchHandle_
-#define astHandleUse astHandleUse_
-#define astHandleAlarm astHandleAlarm_
-
-#else
-
-#define astWatchHandle
-#define astHandleUse
-#define astHandleAlarm 
-
-#endif
-
-#endif
-
diff --git a/ast-5.3-1/pal.c b/ast-5.3-1/pal.c
deleted file mode 100644
index 083bf95..0000000
--- a/ast-5.3-1/pal.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
-**  Author:
-**    Patrick Wallace  (ptw at tpsoft.demon.co.uk)
-**
-**  License:
-**    This program is free software; you can redistribute it and/or modify
-**    it under the terms of the GNU General Public License as published by
-**    the Free Software Foundation; either version 2 of the License, or
-**    (at your option) any later version.
-**
-**    This program is distributed in the hope that it will be useful,
-**    but WITHOUT ANY WARRANTY; without even the implied warranty of
-**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**    GNU General Public License for more details.
-**
-**    You should have received a copy of the GNU General Public License
-**    along with this program; if not, write to the Free Software 
-**    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  
-**    USA.
-**
-**  History:
-**    14-JUN-2005 (DSB):
-**       Corrected palSlaDsepv to fix bug which caused precisely antipodal
-**       vectors to return zero instead of pi.
-**    16-AUG-2005 (DSB):
-**       Added palSlaDh2e and palSlaDe2h by translating the corresponding
-**       fortran routines into C (by hand).
-**    6-OCT-2006 (DSB):
-**       Added palSlaGmsta by translating the corresponding fortran routines 
-**       into C (by hand).
-**    31-AUG-2007 (DSB):
-**       Modify palSlaDe2h and palSlaDh2e to apply correction for diurnal 
-**       aberration.
-**    18-JUN-2009 (DSB):
-**       Added palSlaPvobs by translating the corresponding fortran routine
-**       into C (by hand).
-*/
-
-#include "pal.h"
-#include "slamac.h"
-
-void palSlaAddet(double Q0,double FOo,double q1,double*bAR,
-double*q2){double Q3[3];double baz[3];int Q4;palSlaEtrms(q1,Q3)
-;palSlaDcs2c(Q0,FOo,baz);for(Q4=0;Q4<3;Q4++){baz[Q4]+=Q3[Q4];}
-palSlaDcc2s(baz,bAR,q2);*bAR=palSlaDranrm(*bAR);}
-
-void palSlaAmpqk(double fOo,double bar,double baz[21],double*Q0
-,double*FobaR){double Q1;double q2;double foobar[3];double 
-q3[3];double q4[3],FobAZ[3],q5[3],FOOBAZ[3];double q6,QUUX,
-FRED,Q7,q8,Q9;int DOG,CAT;Q1=baz[7];q2=baz[11];for(DOG=0;DOG
-<3;DOG++){foobar[DOG]=baz[DOG+4];q3[DOG]=baz[DOG+8];}
-palSlaDcs2c(fOo,bar,FOOBAZ);palSlaDimxv((double(*)[3])&baz[12],
-FOOBAZ,q5);q6=q2+1.0;for(DOG=0;DOG<3;DOG++){FobAZ[DOG]=q5[
-DOG];}for(CAT=0;CAT<2;CAT++){QUUX=palSlaDvdv(FobAZ,q3);FRED=1.0
-+QUUX;Q7=1.0+QUUX/q6;for(DOG=0;DOG<3;DOG++){FobAZ[DOG]=(FRED
-*q5[DOG]-Q7*q3[DOG])/q2;}palSlaDvn(FobAZ,FOOBAZ,&Q7);for(DOG=0;
-DOG<3;DOG++){FobAZ[DOG]=FOOBAZ[DOG];}}for(DOG=0;DOG<3;DOG++)
-{q4[DOG]=FobAZ[DOG];}for(CAT=0;CAT<5;CAT++){q8=palSlaDvdv(q4,
-foobar);Q9=1.0+q8;Q7=Q9-Q1*q8;for(DOG=0;DOG<3;DOG++){q4[DOG]
-=(Q9*FobAZ[DOG]-Q1*foobar[DOG])/Q7;}palSlaDvn(q4,q5,&Q7);for(
-DOG=0;DOG<3;DOG++){q4[DOG]=q5[DOG];}}palSlaDcc2s(q4,Q0,FobaR);*
-Q0=palSlaDranrm(*Q0);}
-
-void palSlaAoppa(double Q0,double q1,double q2,double Q3,double
- Q4,double Q5,double Q6,double foo,double BAR,double Q7,
-double BAZ,double FoBar,double Q8[14])
-#define q9 173.14463331
-#define Q10 1.00273790935
-{double q11,Q12,foobar,FOBAZ,q13,FOOBAZ,quUX,q14,q15,fReD,
-DOG;q11=cos(Q3);Q12=cos(q2)*q11;foobar=sin(q2)*q11;FOBAZ=sin
-(Q3);q13=Q12-Q5*FOBAZ;FOOBAZ=foobar+Q6*FOBAZ;quUX=Q5*Q12-Q6*
-foobar+FOBAZ;q14=(q13!=0.0||FOOBAZ!=0.0)?atan2(FOOBAZ,q13):
-0.0;q15=atan2(quUX,sqrt(q13*q13+FOOBAZ*FOOBAZ));Q8[0]=q15;Q8
-[1]=sin(q15);Q8[2]=cos(q15);palSlaGeoc(q15,Q4,&fReD,&DOG);Q8[3]
-=D2PI*fReD*Q10/q9;Q8[4]=Q4;Q8[5]=foo;Q8[6]=BAR;Q8[7]=Q7;Q8[8
-]=BAZ;Q8[9]=FoBar;palSlaRefco(Q4,foo,BAR,Q7,BAZ,q15,FoBar,1e-10
-,&Q8[10],&Q8[11]);Q8[12]=q14+palSlaEqeqx(Q0)+q1*Q10*DS2R;
-palSlaAoppat(Q0,Q8);}
-#undef q9 
-#undef Q10
-
-void palSlaAoppat(double Q0,double FOO[14]){FOO[13]=palSlaGmst(Q0)
-+FOO[12];}
-
-void palSlaCaldj(int FOO,int Q0,int BAr,double*Q1,int*baz){int 
-q2;if((FOO>=0)&&(FOO<=49))q2=FOO+2000;else if((FOO>=50)&&(
-FOO<=99))q2=FOO+1900;else q2=FOO;palSlaCldj(q2,Q0,BAr,Q1,baz);}
-
-void palSlaCldj(int Q0,int foo,int Q1,double*q2,int*Q3){long Q4
-,q5;static int bar[12]={31,28,31,30,31,30,31,31,30,31,30,31}
-;if(Q0<-4699){*Q3=1;return;}if((foo<1)||(foo>12)){*Q3=2;
-return;}bar[1]=(((Q0%4)==0)&&(((Q0%100)!=0)||((Q0%400)==0)))
-?29:28;*Q3=(Q1<1||Q1>bar[foo-1])?3:0;Q4=(long)Q0;q5=(long)
-foo;*q2=(double)((1461L*(Q4-(12L-q5)/10L+4712L))/4L+(306L*((
-q5+9L)%12L)+5L)/10L-(3L*((Q4-(12L-q5)/10L+4900L)/100L))/4L+(
-long)Q1-2399904L);}
-
-void palSlaCs2c(float q0,float FOO,float q1[3]){float BAR;BAR=(
-float)cos(FOO);q1[0]=(float)cos(q0)*BAR;q1[1]=(float)sin(q0)
-*BAR;q1[2]=(float)sin(FOO);}
-
-void palSlaDaf2r(int Q0,int FOO,double Q1,double*bar,int*baz){*
-baz=0;if((Q1<0.0)||(Q1>=60.0)){*baz=3;return;}if((FOO<0)||(
-FOO>59)){*baz=2;return;}if((Q0<0)||(Q0>359)){*baz=1;return;}
-*bar=DAS2R*(60.0*(60.0*(double)Q0+(double)FOO)+Q1);}
-
-void palSlaDav2m(double q0[3],double q1[3][3]){double FoO,bar,
-Q2,baz,FOBAR,FOOBAR,FobAZ;FoO=q0[0];bar=q0[1];Q2=q0[2];baz=
-sqrt(FoO*FoO+bar*bar+Q2*Q2);FOBAR=sin(baz);FOOBAR=cos(baz);
-FobAZ=1.0-FOOBAR;if(baz!=0.0){FoO=FoO/baz;bar=bar/baz;Q2=Q2/
-baz;}q1[0][0]=FoO*FoO*FobAZ+FOOBAR;q1[0][1]=FoO*bar*FobAZ+Q2
-*FOBAR;q1[0][2]=FoO*Q2*FobAZ-bar*FOBAR;q1[1][0]=FoO*bar*
-FobAZ-Q2*FOBAR;q1[1][1]=bar*bar*FobAZ+FOOBAR;q1[1][2]=bar*Q2
-*FobAZ+FoO*FOBAR;q1[2][0]=FoO*Q2*FobAZ+bar*FOBAR;q1[2][1]=
-bar*Q2*FobAZ-FoO*FOBAR;q1[2][2]=Q2*Q2*FobAZ+FOOBAR;}
-
-double palSlaDbear(double q0,double FOo,double q1,double BAR){
-double BAZ,q2,q3;BAZ=q1-q0;q3=sin(BAZ)*cos(BAR);q2=sin(BAR)*
-cos(FOo)-cos(BAR)*sin(FOo)*cos(BAZ);return(q2!=0.0||q3!=0.0)
-?atan2(q3,q2):0.0;}
-
-void palSlaDc62s(double FoO[6],double*bar,double*Q0,double*q1,
-double*q2,double*baz,double*q3){double q4,FoBAR,foobar,foBaz
-,q5,FOOBAZ,Q6,q7,quux,q8;q4=FoO[0];FoBAR=FoO[1];foobar=FoO[2
-];foBaz=FoO[3];q5=FoO[4];FOOBAZ=FoO[5];Q6=q4*q4+FoBAR*FoBAR;
-if((quux=Q6+foobar*foobar)==0.0){q4=foBaz;FoBAR=q5;foobar=
-FOOBAZ;Q6=q4*q4+FoBAR*FoBAR;quux=Q6+foobar*foobar;}q7=sqrt(
-Q6);q8=q4*foBaz+FoBAR*q5;if(Q6!=0.0){*bar=atan2(FoBAR,q4);*
-Q0=atan2(foobar,q7);*q2=(q4*q5-FoBAR*foBaz)/Q6;*baz=(FOOBAZ*
-Q6-foobar*q8)/(quux*q7);}else{*bar=0.0;*Q0=(foobar!=0.0)?
-atan2(foobar,q7):0.0;*q2=0.0;*baz=0.0;}*q3=((*q1=sqrt(quux))
-!=0.0)?(q8+foobar*FOOBAZ)/(*q1):0.0;}
-
-void palSlaDcc2s(double Q0[3],double*Q1,double*FoO){double bar,
-Q2,BAZ,fobar;bar=Q0[0];Q2=Q0[1];BAZ=Q0[2];fobar=sqrt(bar*bar
-+Q2*Q2);*Q1=(fobar!=0.0)?atan2(Q2,bar):0.0;*FoO=(BAZ!=0.0)?
-atan2(BAZ,fobar):0.0;}
-
-void palSlaDcs2c(double FOO,double baR,double baz[3]){double Q0
-;Q0=cos(baR);baz[0]=cos(FOO)*Q0;baz[1]=sin(FOO)*Q0;baz[2]=
-sin(baR);}
-
-void palSlaDd2tf(int foo,double q0,char*Q1,int BAR[4])
-#define q2 86400.0
-{double baz,Q3,FOBAR,q4,q5,Q6,Q7,Q8;*Q1=(char)((q0<0.0)?'-':
-'+');baz=pow(10.0,(double)gmax(foo,0));baz=dint(baz);Q3=baz*
-60.0;FOBAR=Q3*60.0;q4=baz*q2*fabs(q0);q4=dnint(q4);q5=q4/
-FOBAR;q5=dint(q5);q4=q4-q5*FOBAR;Q6=q4/Q3;Q6=dint(Q6);q4=q4-
-Q6*Q3;Q7=q4/baz;Q7=dint(Q7);Q8=q4-Q7*baz;BAR[0]=(int)q5;BAR[
-1]=(int)Q6;BAR[2]=(int)Q7;BAR[3]=(int)Q8;}
-#undef q2 
-
-#include <string.h>
-void palSlaDeuler(char*Q0,double FoO,double BAR,double Q1,
-double baz[3][3]){int fobar,fOObaR,Q2,FoBaz,q3;double q4[3][
-3],Q5[3][3],q6,q7,Q8,foobaz,Q9[3][3];char q10;for(fobar=0;
-fobar<3;fobar++){for(fOObaR=0;fOObaR<3;fOObaR++){q4[fOObaR][
-fobar]=(fOObaR==fobar)?1.0:0.0;}}Q2=strlen(Q0);for(FoBaz=0;
-FoBaz<3;FoBaz++){if(FoBaz<=Q2){for(fobar=0;fobar<3;fobar++){
-for(fOObaR=0;fOObaR<3;fOObaR++){Q5[fOObaR][fobar]=(fOObaR==
-fobar)?1.0:0.0;}}switch(FoBaz){case 0:q6=FoO;break;case 1:q6
-=BAR;break;default:q6=Q1;break;}q7=sin(q6);Q8=cos(q6);q10=Q0
-[FoBaz];if((q10=='X')||(q10=='x')||(q10=='1')){Q5[1][1]=Q8;
-Q5[1][2]=q7;Q5[2][1]=-q7;Q5[2][2]=Q8;}else if((q10=='Y')||(
-q10=='y')||(q10=='2')){Q5[0][0]=Q8;Q5[0][2]=-q7;Q5[2][0]=q7;
-Q5[2][2]=Q8;}else if((q10=='Z')||(q10=='z')||(q10=='3')){Q5[
-0][0]=Q8;Q5[0][1]=q7;Q5[1][0]=-q7;Q5[1][1]=Q8;}else{Q2=0;}
-for(fOObaR=0;fOObaR<3;fOObaR++){for(fobar=0;fobar<3;fobar++)
-{foobaz=0.0;for(q3=0;q3<3;q3++){foobaz+=Q5[fOObaR][q3]*q4[q3
-][fobar];}Q9[fOObaR][fobar]=foobaz;}}for(fobar=0;fobar<3;
-fobar++){for(fOObaR=0;fOObaR<3;fOObaR++){q4[fOObaR][fobar]=
-Q9[fOObaR][fobar];}}}}for(fobar=0;fobar<3;fobar++){for(
-fOObaR=0;fOObaR<3;fOObaR++){baz[fOObaR][fobar]=q4[fOObaR][
-fobar];}}}
-
-void palSlaDimxv(double FOO[3][3],double Q0[3],double BAR[3]){
-int Q1,baz;double q2,FOBAR[3];for(baz=0;baz<3;baz++){q2=0.0;
-for(Q1=0;Q1<3;Q1++){q2+=FOO[Q1][baz]*Q0[Q1];}FOBAR[baz]=q2;}
-for(baz=0;baz<3;baz++){BAR[baz]=FOBAR[baz];}}
-
-void palSlaDjcal(int Q0,double Q1,int FOO[4],int*Q2){double q3,
-Q4,Q5,Q6;long bar,baz,q7;if((Q1<=-2395520.0)||(Q1>=1.0e9)){*
-Q2=-1;return;}else{q3=pow(10.0,(double)gmax(Q0,0));q3=dnint(
-q3);Q4=Q1*q3;Q4=dnint(Q4);Q5=dmod(Q4,q3);if(Q5<0.0)Q5+=q3;Q6
-=(Q4-Q5)/q3;bar=(long)dnint(Q6)+2400001L;baz=4L*(bar+((2L*((
-4L*bar-17918L)/146097L)*3L)/4L+1L)/2L-37L);q7=10L*(((baz-
-237L)%1461L)/4L)+5L;FOO[0]=(int)((baz/1461L)-4712L);FOO[1]=(
-int)(((q7/306L+2L)%12L)+1L);FOO[2]=(int)((q7%306L)/10L+1L);
-FOO[3]=(int)dnint(Q5);*Q2=0;}}
-
-void palSlaDjcl(double q0,int*foo,int*q1,int*bar,double*BAZ,int
-*Q2){double q3,Q4;long FOBAR,q5,Q6;if((q0<=-2395520.0)||(q0
->=1e9)){*Q2=-1;return;}else{*Q2=0;q3=dmod(q0,1.0);if(q3<0.0)
-q3+=1.0;Q4=q0-q3;Q4=dnint(Q4);FOBAR=(long)dnint(Q4)+2400001;
-q5=4L*(FOBAR+((6L*((4L*FOBAR-17918L)/146097L))/4L+1L)/2L-37L
-);Q6=10L*(((q5-237L)%1461L)/4L)+5L;*foo=(int)(q5/1461L-4712L
-);*q1=(int)(((Q6/306L+2L)%12L)+1L);*bar=(int)((Q6%306L)/10L+
-1L);*BAZ=q3;*Q2=0;}}
-
-void palSlaDmat(int FoO,double*bar,double*q0,double*Q1,int*q2,
-int*Q3)
-#define baz 1e-20
-{int Q4,fobar,Q5,FoOBAr,q6;double q7,fobaz,Q8;double*FOOBAZ,
-*QuUX,*q9;*q2=0;*Q1=1.0;for(Q4=0,FOOBAZ=bar;Q4<FoO;Q4++,
-FOOBAZ+=FoO){q7=fabs(FOOBAZ[Q4]);fobar=Q4;q9=FOOBAZ;if(Q4!=
-FoO){for(Q5=Q4+1,QuUX=FOOBAZ+FoO;Q5<FoO;Q5++,QuUX+=FoO){
-fobaz=fabs(QuUX[Q4]);if(fobaz>q7){q7=fobaz;fobar=Q5;q9=QuUX;
-}}}if(q7<baz){*q2=-1;}else{if(fobar!=Q4){for(FoOBAr=0;FoOBAr
-<FoO;FoOBAr++){fobaz=FOOBAZ[FoOBAr];FOOBAZ[FoOBAr]=q9[FoOBAr
-];q9[FoOBAr]=fobaz;}fobaz=q0[Q4];q0[Q4]=q0[fobar];q0[fobar]=
-fobaz;*Q1=-*Q1;}Q3[Q4]=fobar;*Q1*=FOOBAZ[Q4];if(fabs(*Q1)<
-baz){*q2=-1;}else{FOOBAZ[Q4]=1.0/FOOBAZ[Q4];for(FoOBAr=0;
-FoOBAr<FoO;FoOBAr++){if(FoOBAr!=Q4){FOOBAZ[FoOBAr]*=FOOBAZ[
-Q4];}}Q8=q0[Q4]*FOOBAZ[Q4];q0[Q4]=Q8;for(Q5=0,QuUX=bar;Q5<
-FoO;Q5++,QuUX+=FoO){if(Q5!=Q4){for(FoOBAr=0;FoOBAr<FoO;
-FoOBAr++){if(FoOBAr!=Q4){QuUX[FoOBAr]-=QuUX[Q4]*FOOBAZ[
-FoOBAr];}}q0[Q5]-=QuUX[Q4]*Q8;}}for(Q5=0,QuUX=bar;Q5<FoO;Q5
-++,QuUX+=FoO){if(Q5!=Q4){QuUX[Q4]*=-FOOBAZ[Q4];}}}}}if(*q2!=
-0){*Q1=0.0;}else{for(Q4=FoO;Q4-->0;){q6=Q3[Q4];if(Q4!=q6){
-for(Q5=0,QuUX=bar;Q5<FoO;Q5++,QuUX+=FoO){fobaz=QuUX[Q4];QuUX
-[Q4]=QuUX[q6];QuUX[q6]=fobaz;}}}}}
-#undef baz 
-
-void palSlaDmxm(double q0[3][3],double q1[3][3],double foo[3][3
-]){int bar,q2,q3;double q4,Q5[3][3];for(bar=0;bar<3;bar++){
-for(q2=0;q2<3;q2++){q4=0.0;for(q3=0;q3<3;q3++){q4+=q0[bar][
-q3]*q1[q3][q2];}Q5[bar][q2]=q4;}}for(q2=0;q2<3;q2++){for(bar
-=0;bar<3;bar++){foo[bar][q2]=Q5[bar][q2];}}}
-
-void palSlaDmxv(double FOO[3][3],double baR[3],double BAZ[3]){
-int Q0,FOBAR;double q1,Q2[3];for(FOBAR=0;FOBAR<3;FOBAR++){q1
-=0.0;for(Q0=0;Q0<3;Q0++){q1+=FOO[FOBAR][Q0]*baR[Q0];}Q2[
-FOBAR]=q1;}for(FOBAR=0;FOBAR<3;FOBAR++){BAZ[FOBAR]=Q2[FOBAR]
-;}}
-
-double palSlaDrange(double fOo){double bar;bar=dmod(fOo,D2PI);
-return(fabs(bar)<DPI)?bar:bar-dsign(D2PI,fOo);}
-
-double palSlaDranrm(double FoO){double BAR;BAR=dmod(FoO,D2PI);
-return(BAR>=0.0)?BAR:BAR+D2PI;}
-
-double palSlaDsep(double FOO,double BAR,double baz,double q0){
-double fobar[3],fOobaR[3];palSlaDcs2c(FOO,BAR,fobar);palSlaDcs2c(
-baz,q0,fOobaR);return palSlaDsepv(fobar,fOobaR);}
-
-double palSlaDsepv(double foo[3],double Q0[3]){double BAR[3],q1
-[3],BAZ,fObaR;palSlaDvxv(foo,Q0,BAR);palSlaDvn(BAR,q1,&BAZ);fObaR=
-palSlaDvdv(foo,Q0);return (BAZ!=0.0||fObaR!=0.0)?atan2(BAZ,fObaR):0.0;}
-
-void palSlaDtf2d(int q0,int foo,double q1,double*bar,int*Q2)
-#define q3 86400.0
-{*Q2=0;if((q1<0.0)||(q1>=60.0)){*Q2=3;return;}if((foo<0)||(
-foo>59)){*Q2=2;return;}if((q0<0)||(q0>23)){*Q2=1;return;}*
-bar=(60.0*(60.0*(double)q0+(double)foo)+q1)/q3;}
-#undef q3 
-
-void palSlaDtf2r(int fOo,int BAR,double Baz,double*fobar,int*
-fOOBAr){double q0;palSlaDtf2d(fOo,BAR,Baz,&q0,fOOBAr);*fobar=
-D2PI*q0;}
-
-double palSlaDvdv(double q0[3],double q1[3]){return q0[0]*q1[0]
-+q0[1]*q1[1]+q0[2]*q1[2];}
-
-void palSlaDvn(double fOo[3],double baR[3],double*BAZ){int 
-FOBAR;double fOOBAr,q0;fOOBAr=0.0;for(FOBAR=0;FOBAR<3;FOBAR
-++){q0=fOo[FOBAR];fOOBAr+=q0*q0;}fOOBAr=sqrt(fOOBAr);*BAZ=
-fOOBAr;fOOBAr=(fOOBAr>0.0)?fOOBAr:1.0;for(FOBAR=0;FOBAR<3;
-FOBAR++){baR[FOBAR]=fOo[FOBAR]/fOOBAr;}}
-
-void palSlaDvxv(double FOO[3],double Q0[3],double q1[3]){double
- q2[3];int BAR;q2[0]=FOO[1]*Q0[2]-FOO[2]*Q0[1];q2[1]=FOO[2]*
-Q0[0]-FOO[0]*Q0[2];q2[2]=FOO[0]*Q0[1]-FOO[1]*Q0[0];for(BAR=0
-;BAR<3;BAR++){q1[BAR]=q2[BAR];}}
-
-void palSlaEcmat(double foo,double Q0[3][3]){double bar,q1;bar=
-(foo-51544.5)/36525.0;q1=DAS2R*(84381.448+(-46.8150+(-
-0.00059+0.001813*bar)*bar)*bar);palSlaDeuler("\130",q1,0.0,0.0,
-Q0);}
-
-double palSlaEpb2d(double Q0){return 15019.81352+(Q0-1900.0)*
-365.242198781;}
-
-double palSlaEpb(double FOO){return 1900.0+(FOO-15019.81352)/
-365.242198781;}
-
-double palSlaEpj2d(double foo){return 51544.5+(foo-2000.0)*
-365.25;}
-
-double palSlaEpj(double foo){return 2000.0+(foo-51544.5)/365.25
-;}
-
-double palSlaEqeqx(double q0)
-#define Q1 1296000.0
-#define FOO 0.4848136811095359949E-5
-{double bar,q2,Q3,q4,Baz;bar=(q0-51544.5)/36525.0;q2=FOO*(
-450160.280+(-5.0*Q1-482890.539+(7.455+0.008*bar)*bar)*bar);
-palSlaNutc(q0,&Q3,&q4,&Baz);return Q3*cos(Baz)+FOO*(0.00264*sin
-(q2)+0.000063*sin(q2+q2));}
-#undef Q1 
-#undef FOO
-
-void palSlaEqgal(double FOO,double bar,double*Baz,double*Q0){ double
-fobar[3],Q1[3]; static double FOOBAR[3][3] = { {-0.054875539726,
--0.873437108010, -0.483834985808}, {0.494109453312, -0.444829589425,
-0.746982251810}, {-0.867666135858, -0.198076386122, 0.455983795705}};
-palSlaDcs2c(FOO,bar,fobar);palSlaDmxv(FOOBAR,fobar,
-Q1);palSlaDcc2s(Q1,Baz,Q0);*Baz=palSlaDranrm(*Baz);*Q0=palSlaDrange(*
-Q0);}
-
-void palSlaEtrms(double FOO,double Q0[3]){double Q1,bar,q2,baz,
-FOBAR,FOobaR;Q1=(FOO-1950.0)*1.00002135903e-2;bar=0.01673011
--(0.00004193+0.000000126*Q1)*Q1;q2=(84404.836-(46.8495+(
-0.00319+0.00181*Q1)*Q1)*Q1)*DAS2R;baz=(1015489.951+(6190.67+
-(1.65+0.012*Q1)*Q1)*Q1)*DAS2R;FOBAR=bar*20.49552*DAS2R;
-FOobaR=cos(baz);Q0[0]=FOBAR*sin(baz);Q0[1]=-FOBAR*FOobaR*cos
-(q2);Q0[2]=-FOBAR*FOobaR*sin(q2);}
-
-void palSlaEvp(double q0,double FOo,double Q1[3],double bAr[3],
-double Q2[3],double BAZ[3]){int Q3,fobar,Q4,FOOBAR;double 
-fobaz,FOOBAZ,q5,Q6,quux,fred,Q7,Q8,dog,CAT,q9,Q10,FISH,Q11,
-q12,GASP,Q13,Q14,Q15,BAD,q16,BUG,Q17,silly,buggY,Q18,q19,q20
-,MUM,DAD;double Q21,q22,DISK,q23,EMPTY,FULL,fast,q24,smALL,
-BIG,q25,Ok,Q26,q27,HELLO,bye,mAGIc,oBScuRe,Q28,Q29,SpeEd,Q30
-,indEx,bar_fOO,BAR_BAR,bar_baz,Q31,Q32,q33,q34,Q35,Q36,
-bar_fobar,q37,bar_foobar,BAR_FOBAZ,bar_foobaz;double 
-BAR_QUUX[4],BAR_FRED[7],Q38[17],bar_dog[4],q39[4];double q40
-[3][3],q41,bar_cAt[3];static double BAr_FISh=1.990987e-7;
-static double q42=1.990969e-7;static double bar_gASp=
-3.122140e-5;static double Q43=2.661699e-6;static double q44=
-2.399485e-7;static double BaR_bAD=1949.9997904423;static 
-double baR_BUG[4]={8.326827e-11,1.843484e-11,1.988712e-12,
-1.881276e-12};static double BAR_SILLY=0.99999696;static 
-double q45[4]={4.960906e-3,2.727436e-3,8.392311e-4,
-1.556861e-3};static double BAr_BUggY=8.978749e-2;static 
-double Q46[3][8]={{1.7400353,6.2565836,4.7199666,
-1.9636505e-1,4.1547339,4.6524223,4.2620486,1.4740694},{
-6.2833195099091e+2,6.2830194572674e+2,8.3997091449254e+3,
-8.4334662911720e+3,5.2993466764997e+1,2.1354275911213e+1,
-7.5025342197656,3.8377331909193},{5.2796e-6,-2.6180e-6,-
-1.9780e-5,-5.6044e-5,5.8845e-6,5.6797e-6,5.5317e-6,5.6093e-6
-}};static double Q47[3]={4.093198e-1,-2.271110e-4,-
-2.860401e-8};static double q48[3][17]={{1.675104e-2,
-2.220221e-1,1.589963,2.994089,8.155457e-1,1.735614,1.968564,
-1.282417,2.280820,4.833473e-2,5.589232e-2,4.634443e-2,
-8.997041e-3,2.284178e-2,4.350267e-2,1.348204e-2,3.106570e-2}
-,{-4.179579e-5,2.809917e-2,3.418075e-2,2.590824e-2,
-2.486352e-2,1.763719e-2,1.524020e-2,8.703393e-3,1.918010e-2,
-1.641773e-4,-3.455092e-4,-2.658234e-5,6.329728e-6,-
-9.941590e-5,-6.839749e-5,1.091504e-5,-1.665665e-4},{-
-1.260516e-7,1.852532e-5,1.430200e-5,4.155840e-6,6.836840e-6,
-6.370440e-6,-2.517152e-6,2.289292e-5,4.484520e-6,-
-4.654200e-7,-7.388560e-7,7.757000e-8,-1.939256e-9,
-6.787400e-8,-2.714956e-7,6.903760e-7,-1.590188e-7}};static 
-double Q49[2][15]={{5.0974222,3.9584962,1.6338070,2.5487111,
-4.9255514,1.3363463,1.6072053,1.3629480,5.5657014,5.0708205,
-3.9318944,4.8989497,1.3097446,3.5147141,3.5413158},{-
-7.8604195454652e+2,-5.7533848094674e+2,-1.1506769618935e+3,-
-3.9302097727326e+2,-5.8849265665348e+2,-5.5076098609303e+2,-
-5.2237501616674e+2,-1.1790629318198e+3,-1.0977134971135e+3,-
-1.5774000881978e+2,5.2963464780000e+1,3.9809289073258e+1,
-7.7540959633708e+1,7.9618578146517e+1,-5.4868336758022e+2}};
-static double Q50[5][15]={{-2.279594e-5,-3.494537e-5,
-6.593466e-7,1.140767e-5,9.516893e-6,7.310990e-6,-2.603449e-6
-,-3.228859e-6,3.442177e-7,8.702406e-6,-1.488378e-6,-
-8.043059e-6,3.699128e-6,2.550120e-6,-6.351059e-7},{
-1.407414e-5,2.860401e-7,1.322572e-5,-2.049792e-5,-
-2.748894e-6,-1.924710e-6,7.359472e-6,1.308997e-7,2.671323e-6
-,-8.421214e-6,-1.251789e-5,-2.991300e-6,-3.316126e-6,-
-1.241123e-6,2.341650e-6},{8.273188e-6,1.289448e-7,
-9.258695e-6,-4.747930e-6,-1.319381e-6,-8.772849e-7,
-3.168357e-6,1.013137e-7,1.832858e-6,-1.372341e-6,5.226868e-7
-,1.473654e-7,2.901257e-7,9.901116e-8,1.061492e-6},{
-1.340565e-5,1.627237e-5,-4.674248e-7,-2.638763e-6,-
-4.549908e-6,-3.334143e-6,1.119056e-6,2.403899e-6,-
-2.394688e-7,-1.455234e-6,-2.049301e-7,-3.154542e-7,
-3.407826e-7,2.210482e-7,2.878231e-7},{-2.490817e-7,-
-1.823138e-7,-3.646275e-7,-1.245408e-7,-1.864821e-7,-
-1.745256e-7,-1.655307e-7,-3.736225e-7,-3.478444e-7,-
-4.998479e-8,0.0,0.0,0.0,0.0,0.0}};static double q51=-
-7.757020e-8;static double Q52[3][4]={{1.289600e-6,
-3.102810e-5,9.124190e-6,9.793240e-7},{5.550147e-1,4.035027,
-9.990265e-1,5.508259},{2.076942,3.525565e-1,2.622706,
-1.559103e+1}};static double Q53[2][3]={{5.167983,5.491315,
-5.959853},{8.3286911095275e+3,-7.2140632838100e+3,
-1.5542754389685e+4}};static double Q54[4][3]={{1.097594e-1,-
-2.223581e-2,1.148966e-2},{2.896773e-7,5.083103e-8,
-5.658888e-8},{5.450474e-2,1.002548e-2,8.249439e-3},{
-1.438491e-7,-2.291823e-8,4.063015e-8}};DISK=0.0;Q3=(FOo<=0.0)?0:1;Q21
-=(q0-15019.5)/36525.0;for(FOOBAR=0;FOOBAR<8;FOOBAR++){q22=
-dmod(Q46[0][FOOBAR]+Q21*(Q46[1][FOOBAR]+Q21*Q46[2][FOOBAR]),
-D2PI);if(FOOBAR==0){DISK=q22;}else{BAR_FRED[FOOBAR-1]=q22;}}
-q23=dmod(Q47[0]+Q21*(Q47[1]+Q21*Q47[2]),D2PI);for(FOOBAR=0;
-FOOBAR<17;FOOBAR++){Q38[FOOBAR]=dmod(q48[0][FOOBAR]+Q21*(q48
-[1][FOOBAR]+Q21*q48[2][FOOBAR]),D2PI);}for(FOOBAR=0;FOOBAR<4
-;FOOBAR++){fobaz=dmod(Q52[1][FOOBAR]+Q21*Q52[2][FOOBAR],D2PI
-);BAR_QUUX[FOOBAR]=sin(fobaz);}FOOBAZ=Q52[0][0]*BAR_QUUX[0]+
-Q52[0][1]*BAR_QUUX[1]+(Q52[0][2]+Q21*q51)*BAR_QUUX[2]+Q52[0]
-[3]*BAR_QUUX[3];q5=0.0;Q6=0.0;quux=0.0;for(FOOBAR=0;FOOBAR<
-15;FOOBAR++){fobaz=dmod(Q49[0][FOOBAR]+Q21*Q49[1][FOOBAR],
-D2PI);fred=cos(fobaz);Q7=sin(fobaz);FOOBAZ+=Q50[0][FOOBAR]*
-fred+Q50[1][FOOBAR]*Q7;Q6+=Q50[2][FOOBAR]*fred+Q50[3][FOOBAR
-]*Q7;if(FOOBAR<10){q5+=(Q50[1][FOOBAR]*fred-Q50[0][FOOBAR]*
-Q7)*Q50[4][FOOBAR];quux+=(Q50[3][FOOBAR]*fred-Q50[2][FOOBAR]
-*Q7)*Q50[4][FOOBAR];}}Q8=Q38[0];dog=Q8+Q8;CAT=Q8*Q8;EMPTY=
-1.0-CAT;q9=BAR_FRED[0];Q10=q9+q9;FISH=dog*((1.0-CAT/8.0)*sin
-(q9)+5.0*Q8*sin(Q10)/8.0+13.0*CAT*sin(q9+Q10)/24.0);Q11=
-BAR_FRED[0]+FISH;q12=sin(Q11);GASP=cos(Q11);FULL=EMPTY/(1.0+
-Q8*GASP);Q13=dog*q42*((1.0+CAT*1.5)*GASP+Q8*(1.25-q12*q12/
-2.0));Q14=q42*Q8*q12/sqrt(EMPTY);fast=1.0+Q6;q24=fast*(Q14+
-FULL*quux);smALL=fast*FULL*(BAr_FISh+Q13+q5);BIG=dmod(DISK+
-FISH+FOOBAZ,D2PI);q25=sin(BIG);Ok=cos(BIG);Q26=q24*Ok-smALL*
-q25;q27=q24*q25+smALL*Ok;FOOBAZ=0.0;q5=0.0;Q15=0.0;BAD=0.0;
-for(FOOBAR=0;FOOBAR<3;FOOBAR++){fobaz=dmod(Q53[0][FOOBAR]+
-Q21*Q53[1][FOOBAR],D2PI);Q7=sin(fobaz);fred=cos(fobaz);
-FOOBAZ+=Q54[0][FOOBAR]*Q7;q5+=Q54[1][FOOBAR]*fred;Q15+=Q54[2
-][FOOBAR]*fred;BAD+=-Q54[3][FOOBAR]*Q7;}q16=BAR_FRED[1]+
-FOOBAZ;BUG=sin(q16);Q17=cos(q16);silly=bar_gASp/(1.0+Q15);
-fobaz=silly*(Q43+q5);buggY=silly*BAD;Q26+=fobaz*BUG+buggY*
-Q17;q27+=-fobaz*Q17+buggY*BUG;HELLO=-silly*q44*cos(BAR_FRED[
-2]);bye=Q26*BAR_SILLY;mAGIc=q27*BAR_SILLY;oBScuRe=HELLO*
-BAR_SILLY;for(FOOBAR=0;FOOBAR<4;FOOBAR++){Q18=BAR_FRED[
-FOOBAR+3];q19=Q38[FOOBAR+1];q20=Q38[FOOBAR+9];q16=dmod(Q18+
-2.0*q20*sin(Q18-q19),D2PI);bar_dog[FOOBAR]=sin(q16);q39[
-FOOBAR]=cos(q16);bye+=baR_BUG[FOOBAR]*(bar_dog[FOOBAR]+q20*
-sin(q19));mAGIc+=-baR_BUG[FOOBAR]*(q39[FOOBAR]+q20*cos(q19))
-;oBScuRe+=-baR_BUG[FOOBAR]*Q38[FOOBAR+13]*cos(Q18-Q38[FOOBAR
-+5]);}Q28=cos(q23);Q29=sin(q23);SpeEd=Q28*q27-Q29*HELLO;Q30=
-Q29*q27+Q28*HELLO;indEx=Q28*mAGIc-Q29*oBScuRe;bar_fOO=Q29*
-mAGIc+Q28*oBScuRe;BAR_BAR=FULL*fast;MUM=BAr_BUggY*sin(
-BAR_FRED[2]);fobaz=silly*cos(MUM);bar_baz=BAR_BAR*Ok-fobaz*
-Q17;Q31=BAR_BAR*q25-fobaz*BUG;Q32=-silly*sin(MUM);q33=
-bar_baz*BAR_SILLY;q34=Q31*BAR_SILLY;Q35=Q32*BAR_SILLY;for(
-FOOBAR=0;FOOBAR<4;FOOBAR++){DAD=Q38[FOOBAR+13]*sin(BAR_FRED[
-FOOBAR+3]-Q38[FOOBAR+5]);fobaz=q45[FOOBAR]*(1.0-Q38[FOOBAR+9
-]*cos(BAR_FRED[FOOBAR+3]-Q38[FOOBAR+1]));buggY=fobaz*cos(DAD
-);q33-=buggY*q39[FOOBAR];q34-=buggY*bar_dog[FOOBAR];Q35-=
-fobaz*sin(DAD);}Q36=Q28*Q31-Q29*Q32;bar_fobar=Q29*Q31+Q28*
-Q32;q37=Q28*q34-Q29*Q35;bar_foobar=Q29*q34+Q28*Q35;BAR_FOBAZ
-=palSlaEpj(q0);bar_foobaz=DS2R*(0.035+(0.00085*(BAR_FOBAZ-
-BaR_bAD)));Q2[0]=Q26-bar_foobaz*SpeEd;Q2[1]=SpeEd+bar_foobaz
-*Q26;Q2[2]=Q30;Q1[0]=bye-bar_foobaz*indEx;Q1[1]=indEx+
-bar_foobaz*bye;Q1[2]=bar_fOO;BAZ[0]=bar_baz-bar_foobaz*Q36;
-BAZ[1]=Q36+bar_foobaz*bar_baz;BAZ[2]=bar_fobar;bAr[0]=q33-
-bar_foobaz*q37;bAr[1]=q37+bar_foobaz*q33;bAr[2]=bar_foobar;
-if(Q3!=0){palSlaPrec(BAR_FOBAZ,FOo,q40);for(Q4=0;Q4<3;Q4++){q41
-=0.0;for(fobar=0;fobar<3;fobar++){q41+=q40[Q4][fobar]*Q2[
-fobar];}bar_cAt[Q4]=q41;}for(Q4=0;Q4<3;Q4++){Q2[Q4]=bar_cAt[
-Q4];}for(Q4=0;Q4<3;Q4++){q41=0.0;for(fobar=0;fobar<3;fobar++
-){q41+=q40[Q4][fobar]*Q1[fobar];}bar_cAt[Q4]=q41;}for(Q4=0;
-Q4<3;Q4++){Q1[Q4]=bar_cAt[Q4];}for(Q4=0;Q4<3;Q4++){q41=0.0;
-for(fobar=0;fobar<3;fobar++){q41+=q40[Q4][fobar]*BAZ[fobar];
-}bar_cAt[Q4]=q41;}for(Q4=0;Q4<3;Q4++){BAZ[Q4]=bar_cAt[Q4];}
-for(Q4=0;Q4<3;Q4++){q41=0.0;for(fobar=0;fobar<3;fobar++){q41
-+=q40[Q4][fobar]*bAr[fobar];}bar_cAt[Q4]=q41;}for(Q4=0;Q4<3;
-Q4++){bAr[Q4]=bar_cAt[Q4];}}}
-
-void palSlaFk425(double FoO,double BAR,double Q0,double Q1,
-double Baz,double q2,double*FobAr,double*Q3,double*q4,double
-*q5,double*FOOBAR,double*FObaz){double foobaz,QUux,q6,FrEd,
-doG,q7,Q8,Q9,CAT,Q10,fiSH,q11,gasp,q12,q13,BAd,Q14,q15,BuG,
-Q16,silly,q17,buggy,Q18;int q19,MUm;double dAD[3],q20[3];
-double disk[6],q21[6];static double empty=100.0*60.0*60.0*
-360.0/D2PI;double Q22=1.0e-30;double FULL=21.095;static 
-double q23[3]={-1.62557e-6,-0.31919e-6,-0.13843e-6};static 
-double FAST[3]={1.245e-3,-1.580e-3,-0.659e-3};static double 
-SMALL[6][6]={{0.9999256782,-0.0111820611,-0.0048579477,
-0.00000242395018,-0.00000002710663,-0.00000001177656},{
-0.0111820610,0.9999374784,-0.0000271765,0.00000002710663,
-0.00000242397878,-0.00000000006587},{0.0048579479,-
-0.0000271474,0.9999881997,0.00000001177656,-0.00000000006582
-,0.00000242410173},{-0.000551,-0.238565,0.435739,0.99994704,
--0.01118251,-0.00485767},{0.238514,-0.002667,-0.008541,
-0.01118251,0.99995883,-0.00002718},{-0.435623,0.012254,
-0.002117,0.00485767,-0.00002714,1.00000956}};foobaz=FoO;QUux
-=BAR;q6=Q0*empty;FrEd=Q1*empty;doG=Baz;q7=q2;Q8=sin(foobaz);
-Q9=cos(foobaz);CAT=sin(QUux);Q10=cos(QUux);dAD[0]=Q9*Q10;dAD
-[1]=Q8*Q10;dAD[2]=CAT;fiSH=FULL*q7*doG;q20[0]=(-Q8*Q10*q6)-(
-Q9*CAT*FrEd)+(fiSH*dAD[0]);q20[1]=(Q9*Q10*q6)-(Q8*CAT*FrEd)+
-(fiSH*dAD[1]);q20[2]=(Q10*FrEd)+(fiSH*dAD[2]);fiSH=(dAD[0]*
-q23[0])+(dAD[1]*q23[1])+(dAD[2]*q23[2]);q11=(dAD[0]*FAST[0])
-+(dAD[1]*FAST[1])+(dAD[2]*FAST[2]);for(q19=0;q19<3;q19++){
-disk[q19]=dAD[q19]-q23[q19]+fiSH*dAD[q19];disk[q19+3]=q20[
-q19]-FAST[q19]+q11*dAD[q19];}for(q19=0;q19<6;q19++){fiSH=0.0
-;for(MUm=0;MUm<6;MUm++){fiSH+=SMALL[q19][MUm]*disk[MUm];}q21
-[q19]=fiSH;}gasp=q21[0];q12=q21[1];q13=q21[2];BAd=q21[3];Q14
-=q21[4];q15=q21[5];BuG=(gasp*gasp)+(q12*q12);Q16=(BuG)+(q13*
-q13);silly=sqrt(BuG);q17=sqrt(Q16);buggy=(gasp*BAd)+(q12*Q14
-);Q18=buggy+(q13*q15);foobaz=(gasp!=0.0||q12!=0.0)?atan2(q12
-,gasp):0.0;if(foobaz<0.0)foobaz+=D2PI;QUux=atan2(q13,silly);
-if(silly>Q22){q6=((gasp*Q14)-(q12*BAd))/BuG;FrEd=((q15*BuG)-
-(q13*buggy))/(Q16*silly);}if(doG>Q22){q7=Q18/(doG*q17*FULL);
-doG=doG/q17;}*FobAr=foobaz;*Q3=QUux;*q4=q6/empty;*q5=FrEd/
-empty;*FObaz=q7;*FOOBAR=doG;}
-
-void palSlaFk45z(double Q0,double FOO,double q1,double*q2,
-double*Q3){double q4;int q5,bar;double Q6[3],baz[3],Q7[3],Q8
-[6];static double fobar=100.0*60.0*60.0*360.0/D2PI;static 
-double foobar[3]={-1.62557e-6,-0.31919e-6,-0.13843e-6};
-static double FOBAZ[3]={1.245e-3,-1.580e-3,-0.659e-3};static
- double Q9[6][3]={{0.9999256782,-0.0111820611,-0.0048579477}
-,{0.0111820610,0.9999374784,-0.0000271765},{0.0048579479,-
-0.0000271474,0.9999881997},{-0.000551,-0.238565,0.435739},{
-0.238514,-0.002667,-0.008541},{-0.435623,0.012254,0.002117}}
-;palSlaDcs2c(Q0,FOO,Q6);q4=(q1-1950.0)/fobar;for(q5=0;q5<3;q5++
-){baz[q5]=foobar[q5]+q4*FOBAZ[q5];}q4=Q6[0]*baz[0]+Q6[1]*baz
-[1]+Q6[2]*baz[2];for(q5=0;q5<3;q5++){Q7[q5]=Q6[q5]-baz[q5]+
-q4*Q6[q5];}for(q5=0;q5<6;q5++){q4=0.0;for(bar=0;bar<3;bar++)
-{q4+=Q9[q5][bar]*Q7[bar];}Q8[q5]=q4;}q4=(palSlaEpj(palSlaEpb2d(q1)
-)-2000.0)/fobar;for(q5=0;q5<3;q5++){Q8[q5]+=q4*Q8[q5+3];}
-palSlaDcc2s(Q8,&q4,Q3);*q2=palSlaDranrm(q4);}
-
-void palSlaFk524(double Q0,double foo,double q1,double BAR,
-double BAZ,double Q2,double*q3,double*Q4,double*fobar,double
-*q5,double*Q6,double*foobar){double fOBAZ,q7,foobaz,q8,QUUX,
-Q9;double q10,Q11,Q12,fred,q13,Q14,q15,q16;double q17[6],Q18
-[6];double DOG,Q19,caT;double q20,fish,GASP,q21;int BAD,BUG;
-static double Q22=100.0*60.0*60.0*360.0/D2PI;static double 
-Q23=1.0e-30;static double Q24=21.095;static double silLY[6]=
-{-1.62557e-6,-0.31919e-6,-0.13843e-6,1.245e-3,-1.580e-3,-
-0.659e-3};static double buggy[6][6]={{0.9999256795,
-0.0111814828,0.0048590039,-0.00000242389840,-
-0.00000002710544,-0.00000001177742},{-0.0111814828,
-0.9999374849,-0.0000271771,0.00000002710544,-
-0.00000242392702,0.00000000006585},{-0.0048590040,-
-0.0000271557,0.9999881946,0.00000001177742,0.00000000006585,
--0.00000242404995},{-0.000551,0.238509,-0.435614,0.99990432,
-0.01118145,0.00485852},{-0.238560,-0.002667,0.012254,-
-0.01118145,0.99991613,-0.00002717},{0.435730,-0.008541,
-0.002117,-0.00485852,-0.00002716,0.99996684}};fOBAZ=Q0;q7=
-foo;foobaz=q1*Q22;q8=BAR*Q22;QUUX=BAZ;Q9=Q2;q10=sin(fOBAZ);
-Q11=cos(fOBAZ);Q12=sin(q7);fred=cos(q7);q13=Q11*fred;Q14=q10
-*fred;q15=Q12;q16=Q24*Q9*QUUX;q17[0]=q13;q17[1]=Q14;q17[2]=
-q15;q17[3]=-foobaz*Q14-Q11*Q12*q8+q16*q13;q17[4]=foobaz*q13-
-q10*Q12*q8+q16*Q14;q17[5]=fred*q8+q16*q15;for(BAD=0;BAD<6;
-BAD++){q16=0.0;for(BUG=0;BUG<6;BUG++){q16+=buggy[BAD][BUG]*
-q17[BUG];}Q18[BAD]=q16;}q13=Q18[0];Q14=Q18[1];q15=Q18[2];q20
-=sqrt(q13*q13+Q14*Q14+q15*q15);q16=q13*silLY[0]+Q14*silLY[1]
-+q15*silLY[2];q13+=silLY[0]*q20-q16*q13;Q14+=silLY[1]*q20-
-q16*Q14;q15+=silLY[2]*q20-q16*q15;q20=sqrt(q13*q13+Q14*Q14+
-q15*q15);q13=Q18[0];Q14=Q18[1];q15=Q18[2];q16=q13*silLY[0]+
-Q14*silLY[1]+q15*silLY[2];fish=q13*silLY[3]+Q14*silLY[4]+q15
-*silLY[5];q13+=silLY[0]*q20-q16*q13;Q14+=silLY[1]*q20-q16*
-Q14;q15+=silLY[2]*q20-q16*q15;DOG=Q18[3]+silLY[3]*q20-fish*
-q13;Q19=Q18[4]+silLY[4]*q20-fish*Q14;caT=Q18[5]+silLY[5]*q20
--fish*q15;GASP=q13*q13+Q14*Q14;q21=sqrt(GASP);fOBAZ=(q13!=
-0.0||Q14!=0.0)?atan2(Q14,q13):0.0;if(fOBAZ<0.0)fOBAZ+=D2PI;
-q7=atan2(q15,q21);if(q21>Q23){foobaz=(q13*Q19-Q14*DOG)/GASP;
-q8=(caT*GASP-q15*(q13*DOG+Q14*Q19))/((GASP+q15*q15)*q21);}if
-(QUUX>Q23){Q9=(q13*DOG+Q14*Q19+q15*caT)/(QUUX*Q24*q20);QUUX=
-QUUX/q20;}*q3=fOBAZ;*Q4=q7;*fobar=foobaz/Q22;*q5=q8/Q22;*
-foobar=Q9;*Q6=QUUX;}
-
-void palSlaFk54z(double foo,double baR,double Baz,double*fobar,
-double*fOOBAr,double*Q0,double*FOBAZ){static double FOOBAZ=
-0.0;double Q1,QuuX,Q2,FRED;palSlaFk524(foo,baR,FOOBAZ,FOOBAZ,
-FOOBAZ,FOOBAZ,&Q1,&QuuX,Q0,FOBAZ,&Q2,&FRED);palSlaPm(Q1,QuuX,*
-Q0,*FOBAZ,FOOBAZ,FOOBAZ,1950.0,Baz,fobar,fOOBAr);}
-
-void palSlaFk5hz(double foo,double Q0,double q1,double*BAR,
-double*q2)
-#define BAZ 0.484813681109535994e-5
-{static double FOBAR[3]={-19.9e-3*BAZ,-9.1e-3*BAZ,22.9e-3*
-BAZ},FOobaR[3]={-0.30e-3*BAZ,0.60e-3*BAZ,0.70e-3*BAZ};double
- q3[3],fobaz[3][3],FOOBAZ,q4[3],QUUX[3][3],FRED[3],dog[3],Q5
-;int Cat;palSlaDcs2c(foo,Q0,q3);palSlaDav2m(FOBAR,fobaz);FOOBAZ=
-2000.0-q1;for(Cat=0;Cat<3;Cat++){q4[Cat]=FOobaR[Cat]*FOOBAZ;
-}palSlaDav2m(q4,QUUX);palSlaDimxv(QUUX,q3,FRED);palSlaDmxv(fobaz,FRED
-,dog);palSlaDcc2s(dog,&Q5,q2);*BAR=palSlaDranrm(Q5);}
-#undef BAZ 
-
-void palSlaGaleq(double q0,double q1,double*foO,double*bAR){
-double Q2[3],baz[3];static double Q3[3][3]={{-0.054875539726
-,-0.873437108010,-0.483834985808},{0.494109453312,-
-0.444829589425,0.746982251810},{-0.867666135858,-
-0.198076386122,0.455983795705}};palSlaDcs2c(q0,q1,Q2);palSlaDimxv(
-Q3,Q2,baz);palSlaDcc2s(baz,foO,bAR);*foO=palSlaDranrm(*foO);*bAR=
-palSlaDrange(*bAR);}
-
-void palSlaGalsup(double fOo,double bar,double*baz,double*Q0){
-double FobaR[3],Q1[3];static double Q2[3][3]={{-
-0.735742574804,0.677261296414,0.0},{-0.074553778365,-
-0.080991471307,0.993922590400},{0.673145302109,
-0.731271165817,0.110081262225}};palSlaDcs2c(fOo,bar,FobaR);
-palSlaDmxv(Q2,FobaR,Q1);palSlaDcc2s(Q1,baz,Q0);*baz=palSlaDranrm(*baz
-);*Q0=palSlaDrange(*Q0);}
-
-void palSlaGeoc(double Q0,double Q1,double*FOO,double*Q2){
-double q3,q4,q5,q6;static double q7=6378140.0;static double 
-bar=1.0/298.257;double q8=(1.0-bar)*(1.0-bar);static double 
-BAZ=1.49597870e11;q3=sin(Q0);q4=cos(Q0);q5=1.0/sqrt(q4*q4+q8
-*q3*q3);q6=q8*q5;*FOO=(q7*q5+Q1)*q4/BAZ;*Q2=(q7*q6+Q1)*q3/
-BAZ;}
-
-double palSlaGmst(double Q0){double FOo;FOo=(Q0-51544.5)/
-36525.0;return palSlaDranrm(dmod(Q0,1.0)*D2PI+(24110.54841+(
-8640184.812866+(0.093104-6.2e-6*FOo)*FOo)*FOo)*DS2R);}
-
-void palSlaHfk5z(double q0,double q1,double FoO,double*BAR,
-double*q2,double*Q3,double*baZ)
-#define Q4 0.484813681109535994e-5
-{static double FOBAR[3]={-19.9e-3*Q4,-9.1e-3*Q4,22.9e-3*Q4},
-fOOBAR[3]={-0.30e-3*Q4,0.60e-3*Q4,0.70e-3*Q4};double q5[3],
-FoBAZ[3][3],Q6[3],q7,FOOBAZ[3],Q8[3][3],qUUx[3][3],Q9[6],q10
-[3],Q11,Q12,q13;int freD;palSlaDcs2c(q0,q1,q5);palSlaDav2m(FOBAR,
-FoBAZ);palSlaDmxv(FoBAZ,fOOBAR,Q6);q7=FoO-2000.0;for(freD=0;
-freD<3;freD++){FOOBAZ[freD]=fOOBAR[freD]*q7;}palSlaDav2m(FOOBAZ
-,Q8);palSlaDmxm(FoBAZ,Q8,qUUx);palSlaDimxv(qUUx,q5,Q9);palSlaDvxv(Q6,
-q5,q10);palSlaDimxv(qUUx,q10,Q9+3);palSlaDc62s(Q9,&Q11,q2,&Q12,Q3,
-baZ,&q13);*BAR=palSlaDranrm(Q11);}
-#undef Q4 
-
-void palSlaMappa(double q0,double q1,double foo[21])
-#define Q2 499.004782
-#define Q3 1.974126e-8
-{int Q4;double BAR[3],q5[3],Q6[3],baz,Q7[3],q8;foo[0]=palSlaEpj
-(q1)-q0;palSlaEvp(q1,q0,BAR,&foo[1],q5,Q6);palSlaDvn(Q6,&foo[4],&
-baz);foo[7]=Q3/baz;for(Q4=0;Q4<3;Q4++){foo[Q4+8]=BAR[Q4]*Q2;
-}palSlaDvn(&foo[8],Q7,&q8);foo[11]=sqrt(1.0-q8*q8);palSlaPrenut(q0
-,q1,(double(*)[3])&foo[12]);}
-#undef Q2 
-#undef Q3 
-
-void palSlaMapqkz(double FOO,double Q0,double bar[21],double*q1
-,double*BAZ){int fObaR;double Q2,FOobAr,Q3[3],Q4[3],Q5[3],q6
-,fobaz,FOOBAZ,q7[3],QuUX,q8,frED[3],dog[3];Q2=bar[7];FOobAr=
-bar[11];for(fObaR=0;fObaR<3;fObaR++){Q3[fObaR]=bar[fObaR+4];
-Q4[fObaR]=bar[fObaR+8];}palSlaDcs2c(FOO,Q0,Q5);q6=palSlaDvdv(Q5,Q3
-);fobaz=q6+1.0;FOOBAZ=Q2/gmax(fobaz,1e-5);for(fObaR=0;fObaR<
-3;fObaR++){q7[fObaR]=Q5[fObaR]+FOOBAZ*(Q3[fObaR]-q6*Q5[fObaR
-]);}QuUX=palSlaDvdv(q7,Q4);q8=QuUX+1.0;FOOBAZ=1.0+QuUX/(FOobAr+
-1.0);for(fObaR=0;fObaR<3;fObaR++){frED[fObaR]=((FOobAr*q7[
-fObaR])+(FOOBAZ*Q4[fObaR]))/q8;}palSlaDmxv((double(*)[3])&bar[
-12],frED,dog);palSlaDcc2s(dog,q1,BAZ);*q1=palSlaDranrm(*q1);}
-
-void palSlaNut(double FoO,double bar[3][3]){double q0,Q1,baz;
-palSlaNutc(FoO,&q0,&Q1,&baz);palSlaDeuler("\170\172\170",baz,-q0,-
-(baz+Q1),bar);}
-
-void palSlaNutc(double Q0,double*foo,double*q1,double*Q2)
-#define q3 1296000.0
-#define Q4 51544.5
-#define q5 36525.0
-{static int q6[][9]={{0,0,0,0,-1,0,0,0,0},{0,0,2,-2,2,0,0,0,
-0},{0,0,2,0,2,0,0,0,0},{0,0,0,0,-2,0,0,0,0},{0,1,0,0,0,0,0,0
-,0},{0,1,2,-2,2,0,0,0,0},{1,0,0,0,0,0,0,0,0},{0,0,2,0,1,0,0,
-0,0},{1,0,2,0,2,0,0,0,0},{0,-1,2,-2,2,0,0,0,0},{0,0,2,-2,1,0
-,0,0,0},{-1,0,2,0,2,0,0,0,0},{-1,0,0,2,0,0,0,0,0},{1,0,0,0,1
-,0,0,0,0},{1,0,0,0,-1,0,0,0,0},{-1,0,2,2,2,0,0,0,0},{1,0,2,0
-,1,0,0,0,0},{-2,0,2,0,1,0,0,0,0},{0,0,0,2,0,0,0,0,0},{0,0,2,
-2,2,0,0,0,0},{2,0,0,-2,0,0,0,0,0},{2,0,2,0,2,0,0,0,0},{1,0,2
-,-2,2,0,0,0,0},{-1,0,2,0,1,0,0,0,0},{2,0,0,0,0,0,0,0,0},{0,0
-,2,0,0,0,0,0,0},{0,1,0,0,1,0,0,0,0},{-1,0,0,2,1,0,0,0,0},{0,
-2,2,-2,2,0,0,0,0},{0,0,2,-2,0,0,0,0,0},{-1,0,0,2,-1,0,0,0,0}
-,{0,1,0,0,-1,0,0,0,0},{0,2,0,0,0,0,0,0,0},{-1,0,2,2,1,0,0,0,
-0},{1,0,2,2,2,0,0,0,0},{0,1,2,0,2,0,0,0,0},{-2,0,2,0,0,0,0,0
-,0},{0,0,2,2,1,0,0,0,0},{0,-1,2,0,2,0,0,0,0},{0,0,0,2,1,0,0,
-0,0},{1,0,2,-2,1,0,0,0,0},{2,0,0,-2,-1,0,0,0,0},{2,0,2,-2,2,
-0,0,0,0},{2,0,2,0,1,0,0,0,0},{0,0,0,2,-1,0,0,0,0},{0,-1,2,-2
-,1,0,0,0,0},{-1,-1,0,2,0,0,0,0,0},{2,0,0,-2,1,0,0,0,0},{1,0,
-0,2,0,0,0,0,0},{0,1,2,-2,1,0,0,0,0},{1,-1,0,0,0,0,0,0,0},{-2
-,0,2,0,2,0,0,0,0},{0,-1,0,2,0,0,0,0,0},{3,0,2,0,2,0,0,0,0},{
-0,0,0,1,0,0,0,0,0},{1,-1,2,0,2,0,0,0,0},{1,0,0,-1,0,0,0,0,0}
-,{-1,-1,2,2,2,0,0,0,0},{-1,0,2,0,0,0,0,0,0},{2,0,0,0,-1,0,0,
-0,0},{0,-1,2,2,2,0,0,0,0},{1,1,2,0,2,0,0,0,0},{2,0,0,0,1,0,0
-,0,0},{1,1,0,0,0,0,0,0,0},{1,0,-2,2,-1,0,0,0,0},{1,0,2,0,0,0
-,0,0,0},{-1,1,0,1,0,0,0,0,0},{1,0,0,0,2,0,0,0,0},{-1,0,1,0,1
-,0,0,0,0},{0,0,2,1,2,0,0,0,0},{-1,1,0,1,1,0,0,0,0},{-1,0,2,4
-,2,0,0,0,0},{0,-2,2,-2,1,0,0,0,0},{1,0,2,2,1,0,0,0,0},{1,0,0
-,0,-2,0,0,0,0},{-2,0,2,2,2,0,0,0,0},{1,1,2,-2,2,0,0,0,0},{-2
-,0,2,4,2,0,0,0,0},{-1,0,4,0,2,0,0,0,0},{2,0,2,-2,1,0,0,0,0},
-{1,0,0,-1,-1,0,0,0,0},{2,0,2,2,2,0,0,0,0},{1,0,0,2,1,0,0,0,0
-},{3,0,0,0,0,0,0,0,0},{0,0,2,-2,-1,0,0,0,0},{3,0,2,-2,2,0,0,
-0,0},{0,0,4,-2,2,0,0,0,0},{-1,0,0,4,0,0,0,0,0},{0,1,2,0,1,0,
-0,0,0},{0,0,2,-2,3,0,0,0,0},{-2,0,0,4,0,0,0,0,0},{-1,-1,0,2,
-1,0,0,0,0},{-2,0,2,0,-1,0,0,0,0},{0,0,2,0,-1,0,0,0,0},{0,-1,
-2,0,1,0,0,0,0},{0,1,0,0,2,0,0,0,0},{0,0,2,-1,2,0,0,0,0},{2,1
-,0,-2,0,0,0,0,0},{0,0,2,4,2,0,0,0,0},{-1,-1,0,2,-1,0,0,0,0},
-{-1,1,0,2,0,0,0,0,0},{1,-1,0,0,1,0,0,0,0},{0,-1,2,-2,0,0,0,0
-,0},{0,1,0,0,-2,0,0,0,0},{1,-1,2,2,2,0,0,0,0},{1,0,0,2,-1,0,
-0,0,0},{-1,1,2,2,2,0,0,0,0},{3,0,2,0,1,0,0,0,0},{0,1,2,2,2,0
-,0,0,0},{1,0,2,-2,0,0,0,0,0},{-1,0,-2,4,-1,0,0,0,0},{-1,-1,2
-,2,1,0,0,0,0},{0,-1,2,2,1,0,0,0,0},{2,-1,2,0,2,0,0,0,0},{0,0
-,0,2,2,0,0,0,0},{1,-1,2,0,1,0,0,0,0},{-1,1,2,0,2,0,0,0,0},{0
-,1,0,2,0,0,0,0,0},{0,1,2,-2,0,0,0,0,0},{0,3,2,-2,2,0,0,0,0},
-{0,0,0,1,1,0,0,0,0},{-1,0,2,2,0,0,0,0,0},{2,1,2,0,2,0,0,0,0}
-,{1,1,0,0,1,0,0,0,0},{2,0,0,2,0,0,0,0,0},{1,1,2,0,1,0,0,0,0}
-,{-1,0,0,2,2,0,0,0,0},{1,0,-2,2,0,0,0,0,0},{0,-1,0,2,-1,0,0,
-0,0},{-1,0,1,0,2,0,0,0,0},{0,1,0,1,0,0,0,0,0},{1,0,-2,2,-2,0
-,0,0,0},{0,0,0,1,-1,0,0,0,0},{1,-1,0,0,-1,0,0,0,0},{0,0,0,4,
-0,0,0,0,0},{1,-1,0,2,0,0,0,0,0},{1,0,2,1,2,0,0,0,0},{1,0,2,-
-1,2,0,0,0,0},{-1,0,0,2,-2,0,0,0,0},{0,0,2,1,1,0,0,0,0},{-1,0
-,2,0,-1,0,0,0,0},{-1,0,2,4,1,0,0,0,0},{0,0,2,2,0,0,0,0,0},{1
-,1,2,-2,1,0,0,0,0},{0,0,1,0,1,0,0,0,0},{-1,0,2,-1,1,0,0,0,0}
-,{-2,0,2,2,1,0,0,0,0},{2,-1,0,0,0,0,0,0,0},{4,0,2,0,2,0,0,0,
-0},{2,1,2,-2,2,0,0,0,0},{0,1,2,1,2,0,0,0,0},{1,0,4,-2,2,0,0,
-0,0},{1,1,0,0,-1,0,0,0,0},{-2,0,2,4,1,0,0,0,0},{2,0,2,0,0,0,
-0,0,0},{-1,0,1,0,0,0,0,0,0},{1,0,0,1,0,0,0,0,0},{0,1,0,2,1,0
-,0,0,0},{-1,0,4,0,1,0,0,0,0},{-1,0,0,4,1,0,0,0,0},{2,0,2,2,1
-,0,0,0,0},{2,1,0,0,0,0,0,0,0},{0,0,5,-5,5,-3,0,0,0},{0,0,0,0
-,0,0,0,2,0},{0,0,1,-1,1,0,0,-1,0},{0,0,-1,1,-1,1,0,0,0},{0,0
-,-1,1,0,0,2,0,0},{0,0,3,-3,3,0,0,-1,0},{0,0,-8,8,-7,5,0,0,0}
-,{0,0,-1,1,-1,0,2,0,0},{0,0,-2,2,-2,2,0,0,0},{0,0,-6,6,-6,4,
-0,0,0},{0,0,-2,2,-2,0,8,-3,0},{0,0,6,-6,6,0,-8,3,0},{0,0,4,-
-4,4,-2,0,0,0},{0,0,-3,3,-3,2,0,0,0},{0,0,4,-4,3,0,-8,3,0},{0
-,0,-4,4,-5,0,8,-3,0},{0,0,0,0,0,2,0,0,0},{0,0,-4,4,-4,3,0,0,
-0},{0,1,-1,1,-1,0,0,1,0},{0,0,0,0,0,0,0,1,0},{0,0,1,-1,1,1,0
-,0,0},{0,0,2,-2,2,0,-2,0,0},{0,-1,-7,7,-7,5,0,0,0},{-2,0,2,0
-,2,0,0,-2,0},{-2,0,2,0,1,0,0,-3,0},{0,0,2,-2,2,0,0,-2,0},{0,
-0,1,-1,1,0,0,1,0},{0,0,0,0,0,0,0,0,2},{0,0,0,0,0,0,0,0,1},{2
-,0,-2,0,-2,0,0,3,0},{0,0,1,-1,1,0,0,-2,0},{0,0,-7,7,-7,5,0,0
-,0}};static double bar[][4]={{3341.5,17206241.8,3.1,17409.5}
-,{-1716.8,-1317185.3,1.4,-156.8},{285.7,-227667.0,0.3,-23.5}
-,{-68.6,-207448.0,0.0,-21.4},{950.3,147607.9,-2.3,-355.0},{-
-66.7,-51689.1,0.2,122.6},{-108.6,71117.6,0.0,7.0},{35.6,-
-38740.2,0.1,-36.2},{85.4,-30127.6,0.0,-3.1},{9.0,21583.0,0.1
-,-50.3},{22.1,12822.8,0.0,13.3},{3.4,12350.8,0.0,1.3},{-21.1
-,15699.4,0.0,1.6},{4.2,6313.8,0.0,6.2},{-22.8,5796.9,0.0,6.1
-},{15.7,-5961.1,0.0,-0.6},{13.1,-5159.1,0.0,-4.6},{1.8,
-4592.7,0.0,4.5},{-17.5,6336.0,0.0,0.7},{16.3,-3851.1,0.0,-
-0.4},{-2.8,4771.7,0.0,0.5},{13.8,-3099.3,0.0,-0.3},{0.2,
-2860.3,0.0,0.3},{1.4,2045.3,0.0,2.0},{-8.6,2922.6,0.0,0.3},{
--7.7,2587.9,0.0,0.2},{8.8,-1408.1,0.0,3.7},{1.4,1517.5,0.0,
-1.5},{-1.9,-1579.7,0.0,7.7},{1.3,-2178.6,0.0,-0.2},{-4.8,
-1286.8,0.0,1.3},{6.3,1267.2,0.0,-4.0},{-1.0,1669.3,0.0,-8.3}
-,{2.4,-1020.0,0.0,-0.9},{4.5,-766.9,0.0,0.0},{-1.1,756.5,0.0
-,-1.7},{-1.4,-1097.3,0.0,-0.5},{2.6,-663.0,0.0,-0.6},{0.8,-
-714.1,0.0,1.6},{0.4,-629.9,0.0,-0.6},{0.3,580.4,0.0,0.6},{-
-1.6,577.3,0.0,0.5},{-0.9,644.4,0.0,0.0},{2.2,-534.0,0.0,-0.5
-},{-2.5,493.3,0.0,0.5},{-0.1,-477.3,0.0,-2.4},{-0.9,735.0,
-0.0,-1.7},{0.7,406.2,0.0,0.4},{-2.8,656.9,0.0,0.0},{0.6,
-358.0,0.0,2.0},{-0.7,472.5,0.0,-1.1},{-0.1,-300.5,0.0,0.0},{
--1.2,435.1,0.0,-1.0},{1.8,-289.4,0.0,0.0},{0.6,-422.6,0.0,
-0.0},{0.8,-287.6,0.0,0.6},{-38.6,-392.3,0.0,0.0},{0.7,-281.8
-,0.0,0.6},{0.6,-405.7,0.0,0.0},{-1.2,229.0,0.0,0.2},{1.1,-
-264.3,0.0,0.5},{-0.7,247.9,0.0,-0.5},{-0.2,218.0,0.0,0.2},{
-0.6,-339.0,0.0,0.8},{-0.7,198.7,0.0,0.2},{-1.5,334.0,0.0,0.0
-},{0.1,334.0,0.0,0.0},{-0.1,-198.1,0.0,0.0},{-106.6,0.0,0.0,
-0.0},{-0.5,165.8,0.0,0.0},{0.0,134.8,0.0,0.0},{0.9,-151.6,
-0.0,0.0},{0.0,-129.7,0.0,0.0},{0.8,-132.8,0.0,-0.1},{0.5,-
-140.7,0.0,0.0},{-0.1,138.4,0.0,0.0},{0.0,129.0,0.0,-0.3},{
-0.5,-121.2,0.0,0.0},{-0.3,114.5,0.0,0.0},{-0.1,101.8,0.0,0.0
-},{-3.6,-101.9,0.0,0.0},{0.8,-109.4,0.0,0.0},{0.2,-97.0,0.0,
-0.0},{-0.7,157.3,0.0,0.0},{0.2,-83.3,0.0,0.0},{-0.3,93.3,0.0
-,0.0},{-0.1,92.1,0.0,0.0},{-0.5,133.6,0.0,0.0},{-0.1,81.5,
-0.0,0.0},{0.0,123.9,0.0,0.0},{-0.3,128.1,0.0,0.0},{0.1,74.1,
-0.0,-0.3},{-0.2,-70.3,0.0,0.0},{-0.4,66.6,0.0,0.0},{0.1,-
-66.7,0.0,0.0},{-0.7,69.3,0.0,-0.3},{0.0,-70.4,0.0,0.0},{-0.1
-,101.5,0.0,0.0},{0.5,-69.1,0.0,0.0},{-0.2,58.5,0.0,0.2},{0.1
-,-94.9,0.0,0.2},{0.0,52.9,0.0,-0.2},{0.1,86.7,0.0,-0.2},{-
-0.1,-59.2,0.0,0.2},{0.3,-58.8,0.0,0.1},{-0.3,49.0,0.0,0.0},{
--0.2,56.9,0.0,-0.1},{0.3,-50.2,0.0,0.0},{-0.2,53.4,0.0,-0.1}
-,{0.1,-76.5,0.0,0.0},{-0.2,45.3,0.0,0.0},{0.1,-46.8,0.0,0.0}
-,{0.2,-44.6,0.0,0.0},{0.2,-48.7,0.0,0.0},{0.1,-46.8,0.0,0.0}
-,{0.1,-42.0,0.0,0.0},{0.0,46.4,0.0,-0.1},{0.2,-67.3,0.0,0.1}
-,{0.0,-65.8,0.0,0.2},{-0.1,-43.9,0.0,0.3},{0.0,-38.9,0.0,0.0
-},{-0.3,63.9,0.0,0.0},{-0.2,41.2,0.0,0.0},{0.0,-36.1,0.0,0.2
-},{-0.3,58.5,0.0,0.0},{-0.1,36.1,0.0,0.0},{0.0,-39.7,0.0,0.0
-},{0.1,-57.7,0.0,0.0},{-0.2,33.4,0.0,0.0},{36.4,0.0,0.0,0.0}
-,{-0.1,55.7,0.0,-0.1},{0.1,-35.4,0.0,0.0},{0.1,-31.0,0.0,0.0
-},{-0.1,30.1,0.0,0.0},{-0.3,49.2,0.0,0.0},{-0.2,49.1,0.0,0.0
-},{-0.1,33.6,0.0,0.0},{0.1,-33.5,0.0,0.0},{0.1,-31.0,0.0,0.0
-},{-0.1,28.0,0.0,0.0},{0.1,-25.2,0.0,0.0},{0.1,-26.2,0.0,0.0
-},{-0.2,41.5,0.0,0.0},{0.0,24.5,0.0,0.1},{-16.2,0.0,0.0,0.0}
-,{0.0,-22.3,0.0,0.0},{0.0,23.1,0.0,0.0},{-0.1,37.5,0.0,0.0},
-{0.2,-25.7,0.0,0.0},{0.0,25.2,0.0,0.0},{0.1,-24.5,0.0,0.0},{
--0.1,24.3,0.0,0.0},{0.1,-20.7,0.0,0.0},{0.1,-20.8,0.0,0.0},{
--0.2,33.4,0.0,0.0},{32.9,0.0,0.0,0.0},{0.1,-32.6,0.0,0.0},{
-0.0,19.9,0.0,0.0},{-0.1,19.6,0.0,0.0},{0.0,-18.7,0.0,0.0},{
-0.1,-19.0,0.0,0.0},{0.1,-28.6,0.0,0.0},{4.0,178.8,-11.8,0.3}
-,{39.8,-107.3,-5.6,-1.0},{9.9,164.0,-4.1,0.1},{-4.8,-135.3,-
-3.4,-0.1},{50.5,75.0,1.4,-1.2},{-1.1,-53.5,1.3,0.0},{-45.0,-
-2.4,-0.4,6.6},{-11.5,-61.0,-0.9,0.4},{4.4,-68.4,-3.4,0.0},{
-7.7,-47.1,-4.7,-1.0},{-42.9,-12.6,-1.2,4.2},{-42.8,12.7,-1.2
-,-4.2},{-7.6,-44.1,2.1,-0.5},{-64.1,1.7,0.2,4.5},{36.4,-10.4
-,1.0,3.5},{35.6,10.2,1.0,-3.5},{-1.7,39.5,2.0,0.0},{50.9,-
-8.2,-0.8,-5.0},{0.0,52.3,1.2,0.0},{-42.9,-17.8,0.4,0.0},{2.6
-,34.3,0.8,0.0},{-0.8,-48.6,2.4,-0.1},{-4.9,30.5,3.7,0.7},{
-0.0,-43.6,2.1,0.0},{0.0,-25.4,1.2,0.0},{2.0,40.9,-2.0,0.0},{
--2.1,26.1,0.6,0.0},{22.6,-3.2,-0.5,-0.5},{-7.6,24.9,-0.4,-
-0.2},{-6.2,34.9,1.7,0.3},{2.0,17.4,-0.4,0.1},{-3.9,20.5,2.4,
-0.6}};static double BAz[][4]={{9205365.8,-1506.2,885.7,-0.2}
-,{573095.9,-570.2,-305.0,-0.3},{97845.5,147.8,-48.8,-0.2},{-
-89753.6,28.0,46.9,0.0},{7406.7,-327.1,-18.2,0.8},{22442.3,-
-22.3,-67.6,0.0},{-683.6,46.8,0.0,0.0},{20070.7,36.0,1.6,0.0}
-,{12893.8,39.5,-6.2,0.0},{-9593.2,14.4,30.2,-0.1},{-6899.5,
-4.8,-0.6,0.0},{-5332.5,-0.1,2.7,0.0},{-125.2,10.5,0.0,0.0},{
--3323.4,-0.9,-0.3,0.0},{3142.3,8.9,0.3,0.0},{2552.5,7.3,-1.2
-,0.0},{2634.4,8.8,0.2,0.0},{-2424.4,1.6,-0.4,0.0},{-123.3,
-3.9,0.0,0.0},{1642.4,7.3,-0.8,0.0},{47.9,3.2,0.0,0.0},{
-1321.2,6.2,-0.6,0.0},{-1234.1,-0.3,0.6,0.0},{-1076.5,-0.3,
-0.0,0.0},{-61.6,1.8,0.0,0.0},{-55.4,1.6,0.0,0.0},{856.9,-4.9
-,-2.1,0.0},{-800.7,-0.1,0.0,0.0},{685.1,-0.6,-3.8,0.0},{-
-16.9,-1.5,0.0,0.0},{695.7,1.8,0.0,0.0},{642.2,-2.6,-1.6,0.0}
-,{13.3,1.1,-0.1,0.0},{521.9,1.6,0.0,0.0},{325.8,2.0,-0.1,0.0
-},{-325.1,-0.5,0.9,0.0},{10.1,0.3,0.0,0.0},{334.5,1.6,0.0,
-0.0},{307.1,0.4,-0.9,0.0},{327.2,0.5,0.0,0.0},{-304.6,-0.1,
-0.0,0.0},{304.0,0.6,0.0,0.0},{-276.8,-0.5,0.1,0.0},{268.9,
-1.3,0.0,0.0},{271.8,1.1,0.0,0.0},{271.5,-0.4,-0.8,0.0},{-5.2
-,0.5,0.0,0.0},{-220.5,0.1,0.0,0.0},{-20.1,0.3,0.0,0.0},{-
-191.0,0.1,0.5,0.0},{-4.1,0.3,0.0,0.0},{130.6,-0.1,0.0,0.0},{
-3.0,0.3,0.0,0.0},{122.9,0.8,0.0,0.0},{3.7,-0.3,0.0,0.0},{
-123.1,0.4,-0.3,0.0},{-52.7,15.3,0.0,0.0},{120.7,0.3,-0.3,0.0
-},{4.0,-0.3,0.0,0.0},{126.5,0.5,0.0,0.0},{112.7,0.5,-0.3,0.0
-},{-106.1,-0.3,0.3,0.0},{-112.9,-0.2,0.0,0.0},{3.6,-0.2,0.0,
-0.0},{107.4,0.3,0.0,0.0},{-10.9,0.2,0.0,0.0},{-0.9,0.0,0.0,
-0.0},{85.4,0.0,0.0,0.0},{0.0,-88.8,0.0,0.0},{-71.0,-0.2,0.0,
-0.0},{-70.3,0.0,0.0,0.0},{64.5,0.4,0.0,0.0},{69.8,0.0,0.0,
-0.0},{66.1,0.4,0.0,0.0},{-61.0,-0.2,0.0,0.0},{-59.5,-0.1,0.0
-,0.0},{-55.6,0.0,0.2,0.0},{51.7,0.2,0.0,0.0},{-49.0,-0.1,0.0
-,0.0},{-52.7,-0.1,0.0,0.0},{-49.6,1.4,0.0,0.0},{46.3,0.4,0.0
-,0.0},{49.6,0.1,0.0,0.0},{-5.1,0.1,0.0,0.0},{-44.0,-0.1,0.0,
-0.0},{-39.9,-0.1,0.0,0.0},{-39.5,-0.1,0.0,0.0},{-3.9,0.1,0.0
-,0.0},{-42.1,-0.1,0.0,0.0},{-17.2,0.1,0.0,0.0},{-2.3,0.1,0.0
-,0.0},{-39.2,0.0,0.0,0.0},{-38.4,0.1,0.0,0.0},{36.8,0.2,0.0,
-0.0},{34.6,0.1,0.0,0.0},{-32.7,0.3,0.0,0.0},{30.4,0.0,0.0,
-0.0},{0.4,0.1,0.0,0.0},{29.3,0.2,0.0,0.0},{31.6,0.1,0.0,0.0}
-,{0.8,-0.1,0.0,0.0},{-27.9,0.0,0.0,0.0},{2.9,0.0,0.0,0.0},{-
-25.3,0.0,0.0,0.0},{25.0,0.1,0.0,0.0},{27.5,0.1,0.0,0.0},{-
-24.4,-0.1,0.0,0.0},{24.9,0.2,0.0,0.0},{-22.8,-0.1,0.0,0.0},{
-0.9,-0.1,0.0,0.0},{24.4,0.1,0.0,0.0},{23.9,0.1,0.0,0.0},{
-22.5,0.1,0.0,0.0},{20.8,0.1,0.0,0.0},{20.1,0.0,0.0,0.0},{
-21.5,0.1,0.0,0.0},{-20.0,0.0,0.0,0.0},{1.4,0.0,0.0,0.0},{-
-0.2,-0.1,0.0,0.0},{19.0,0.0,-0.1,0.0},{20.5,0.0,0.0,0.0},{-
-2.0,0.0,0.0,0.0},{-17.6,-0.1,0.0,0.0},{19.0,0.0,0.0,0.0},{-
-2.4,0.0,0.0,0.0},{-18.4,-0.1,0.0,0.0},{17.1,0.0,0.0,0.0},{
-0.4,0.0,0.0,0.0},{18.4,0.1,0.0,0.0},{0.0,17.4,0.0,0.0},{-0.6
-,0.0,0.0,0.0},{-15.4,0.0,0.0,0.0},{-16.8,-0.1,0.0,0.0},{16.3
-,0.0,0.0,0.0},{-2.0,0.0,0.0,0.0},{-1.5,0.0,0.0,0.0},{-14.3,-
-0.1,0.0,0.0},{14.4,0.0,0.0,0.0},{-13.4,0.0,0.0,0.0},{-14.3,-
-0.1,0.0,0.0},{-13.7,0.0,0.0,0.0},{13.1,0.1,0.0,0.0},{-1.7,
-0.0,0.0,0.0},{-12.8,0.0,0.0,0.0},{0.0,-14.4,0.0,0.0},{12.4,
-0.0,0.0,0.0},{-12.0,0.0,0.0,0.0},{-0.8,0.0,0.0,0.0},{10.9,
-0.1,0.0,0.0},{-10.8,0.0,0.0,0.0},{10.5,0.0,0.0,0.0},{-10.4,
-0.0,0.0,0.0},{-11.2,0.0,0.0,0.0},{10.5,0.1,0.0,0.0},{-1.4,
-0.0,0.0,0.0},{0.0,0.1,0.0,0.0},{0.7,0.0,0.0,0.0},{-10.3,0.0,
-0.0,0.0},{-10.0,0.0,0.0,0.0},{9.6,0.0,0.0,0.0},{9.4,0.1,0.0,
-0.0},{0.6,0.0,0.0,0.0},{-87.7,4.4,-0.4,-6.3},{46.3,22.4,0.5,
--2.4},{15.6,-3.4,0.1,0.4},{5.2,5.8,0.2,-0.1},{-30.1,26.9,0.7
-,0.0},{23.2,-0.5,0.0,0.6},{1.0,23.2,3.4,0.0},{-12.2,-4.3,0.0
-,0.0},{-2.1,-3.7,-0.2,0.1},{-18.6,-3.8,-0.4,1.8},{5.5,-18.7,
--1.8,-0.5},{-5.5,-18.7,1.8,-0.5},{18.4,-3.6,0.3,0.9},{-0.6,
-1.3,0.0,0.0},{-5.6,-19.5,1.9,0.0},{5.5,-19.1,-1.9,0.0},{-
-17.3,-0.8,0.0,0.9},{-3.2,-8.3,-0.8,0.3},{-0.1,0.0,0.0,0.0},{
--5.4,7.8,-0.3,0.0},{-14.8,1.4,0.0,0.3},{-3.8,0.4,0.0,-0.2},{
-12.6,3.2,0.5,-1.5},{0.1,0.0,0.0,0.0},{-13.6,2.4,-0.1,0.0},{
-0.9,1.2,0.0,0.0},{-11.9,-0.5,0.0,0.3},{0.4,12.0,0.3,-0.2},{
-8.3,6.1,-0.1,0.1},{0.0,0.0,0.0,0.0},{0.4,-10.8,0.3,0.0},{9.6
-,2.2,0.3,-1.2}};static int FObaR=sizeof(q6)/sizeof(int)/9;
-int foObAR;double Q7,Q8,q9,FOBAZ,q10,q11,Q12,q13,q14,Q15,
-foobaz,quux,Q16,Q17,q18;Q7=(Q0-Q4)/q5;Q8=134.96340251*DD2R+
-fmod(Q7*(1717915923.2178+Q7*(31.8792+Q7*(0.051635+Q7*(-
-0.00024470)))),q3)*DAS2R;q9=357.52910918*DD2R+fmod(Q7*(
-129596581.0481+Q7*(-0.5532+Q7*(0.000136+Q7*(-0.00001149)))),
-q3)*DAS2R;FOBAZ=93.27209062*DD2R+fmod(Q7*(1739527262.8478+Q7
-*(-12.7512+Q7*(-0.001037+Q7*(0.00000417)))),q3)*DAS2R;q10=
-297.85019547*DD2R+fmod(Q7*(1602961601.2090+Q7*(-6.3706+Q7*(
-0.006539+Q7*(-0.00003169)))),q3)*DAS2R;q11=125.04455501*DD2R
-+fmod(Q7*(-6962890.5431+Q7*(7.4722+Q7*(0.007702+Q7*(-
-0.00005939)))),q3)*DAS2R;Q12=181.97980085*DD2R+fmod(
-210664136.433548*Q7,q3)*DAS2R;q13=355.43299958*DD2R+fmod(
-68905077.493988*Q7,q3)*DAS2R;q14=34.35151874*DD2R+fmod(
-10925660.377991*Q7,q3)*DAS2R;Q15=50.07744430*DD2R+fmod(
-4399609.855732*Q7,q3)*DAS2R;Q17=-153.1*sin(q9)-1.9*sin(2.0*
-q9);q18=0.0;for(foObAR=FObaR-1;foObAR>=0;foObAR--){foobaz=((
-double)q6[foObAR][0])*Q8+((double)q6[foObAR][1])*q9+((double
-)q6[foObAR][2])*FOBAZ+((double)q6[foObAR][3])*q10+((double)
-q6[foObAR][4])*q11+((double)q6[foObAR][5])*Q12+((double)q6[
-foObAR][6])*q13+((double)q6[foObAR][7])*q14+((double)q6[
-foObAR][8])*Q15;quux=cos(foobaz);Q16=sin(foobaz);Q17+=(bar[
-foObAR][0]+bar[foObAR][2]*Q7)*quux+(bar[foObAR][1]+bar[
-foObAR][3]*Q7)*Q16;q18+=(BAz[foObAR][0]+BAz[foObAR][2]*Q7)*
-quux+(BAz[foObAR][1]+BAz[foObAR][3]*Q7)*Q16;}*foo=(Q17*1e-6-
-0.042888-0.29856*Q7)*DAS2R;*q1=(q18*1e-6-0.005171-0.02408*Q7
-)*DAS2R;*Q2=(84381.412+(-46.80927+(-0.000152+(0.0019989+(-
-0.00000051+(-0.000000025)*Q7)*Q7)*Q7)*Q7)*Q7)*DAS2R;}
-#undef q3 
-#undef Q4 
-#undef q5 
-
-void palSlaPm(double Q0,double foo,double Q1,double BAR,double 
-BAZ,double Q2,double Q3,double q4,double*fobar,double*q5){
-static double q6=(365.25*86400.0/149597870.0)*DAS2R;int q7;
-double FOOBAR,FOBAZ[3],foobaz,QUuX[3];palSlaDcs2c(Q0,foo,QUuX);
-FOOBAR=q6*Q2*BAZ;FOBAZ[0]=-Q1*QUuX[1]-BAR*cos(Q0)*sin(foo)+
-FOOBAR*QUuX[0];FOBAZ[1]=Q1*QUuX[0]-BAR*sin(Q0)*sin(foo)+
-FOOBAR*QUuX[1];FOBAZ[2]=BAR*cos(foo)+FOOBAR*QUuX[2];foobaz=
-q4-Q3;for(q7=0;q7<3;q7++)QUuX[q7]=QUuX[q7]+(foobaz*FOBAZ[q7]
-);palSlaDcc2s(QUuX,fobar,q5);*fobar=palSlaDranrm(*fobar);}
-
-void palSlaPrebn(double foo,double q0,double q1[3][3]){double 
-BAr,q2,Baz,Q3,fobar,FOOBAR,q4;BAr=(foo-1850.0)/100.0;q2=(q0-
-foo)/100.0;Baz=q2*DAS2R;Q3=2303.5548+(1.39720+0.000059*BAr)*
-BAr;fobar=(Q3+(0.30242-0.000269*BAr+0.017996*q2)*q2)*Baz;
-FOOBAR=(Q3+(1.09478+0.000387*BAr+0.018324*q2)*q2)*Baz;q4=(
-2005.1125+(-0.85294-0.000365*BAr)*BAr+(-0.42647-0.000365*BAr
--0.041802*q2)*q2)*Baz;palSlaDeuler("\132\131\132",-fobar,q4,-
-FOOBAR,q1);}
-
-void palSlaPrec(double q0,double q1,double q2[3][3]){double Q3,
-Q4,Q5,FOO,BAR,Q6,BAZ;Q3=(q0-2000.0)/100.0;Q4=(q1-q0)/100.0;
-Q5=Q4*DAS2R;FOO=2306.2181+((1.39656-(0.000139*Q3))*Q3);BAR=(
-FOO+((0.30188-0.000344*Q3)+0.017998*Q4)*Q4)*Q5;Q6=(FOO+((
-1.09468+0.000066*Q3)+0.018203*Q4)*Q4)*Q5;BAZ=((2004.3109+(-
-0.85330-0.000217*Q3)*Q3)+((-0.42665-0.000217*Q3)-0.041833*Q4
-)*Q4)*Q5;palSlaDeuler("\132\131\132",-BAR,BAZ,-Q6,q2);}
-
-void palSlaPrenut(double FOO,double Q0,double q1[3][3]){double 
-BAr[3][3],q2[3][3];palSlaPrec(FOO,palSlaEpj(Q0),BAr);palSlaNut(Q0,q2)
-;palSlaDmxm(q2,BAr,q1);}
-
-void palSlaRefco(double foo,double Q0,double q1,double BAr,
-double q2,double baz,double q3,double Q4,double*FOBAR,double
-*q5){double FOOBAR,Q6;static double Q7=0.7853981633974483;
-static double q8=1.325817663668033;palSlaRefro(Q7,foo,Q0,q1,BAr
-,q2,baz,q3,Q4,&FOOBAR);palSlaRefro(q8,foo,Q0,q1,BAr,q2,baz,q3,
-Q4,&Q6);*FOBAR=(64.0*FOOBAR-Q6)/60.0;*q5=(Q6-4.0*FOOBAR)/
-60.0;}
-
-static void q0(double,double,double,double,double,double,
-double,double,double,double,double,double,double*,double*,
-double*);static void FOO(double,double,double,double,double,
-double*,double*);void palSlaRefro(double q1,double BAR,double 
-Q2,double Q3,double q4,double q5,double q6,double q7,double 
-baz,double*FOBAR)
-#define foobar 16384
-{static double fobaz=1.623156204;static double Q8=8314.32;
-static double FOObAz=28.9644;static double q9=18.0152;static
- double quux=6378120.0;static double q10=18.36;static double
- q11=11000.0;static double FREd=80000.0;double dog;double 
-Q12;double q13;double q14;double Q15;double Q16,caT,q17,FISH
-,GASP,bad;double Q18;double q19;double Q20;double bug;int 
-SILLY,Q21,Q22,buggy,mum,dad;double q23,q24,q25,DISK,EMPty,
-q26,FuLl,q27,FAST,SMALL,big,OK,HeLLo,bYE,q28,MaGIC,oBscuRe,
-speed,iNdEX,bAR_FOO,Bar_BAr,Q29,Q30,q31,q32,bar_baz,Q33,q34,
-bar_fOBAR,Q35,Q36,BAR_FOOBAR,Q37,q38,bAr_FOBaZ,q39,Q40,q41,
-baR_fOoBaz,q42,BaR_qUux,Q43,BAR_FRED,BaR_DoG,Q44,BAr_CAt,
-bar_fish,Q45,q46,Q47,Q48;
-#define q49(Q50,q51) ((q51)/(Q50+q51));
-Q48=0.0;
-q23=palSlaDrange(q1);q24=fabs(q23);q24=gmin(q24,fobaz);q25=gmax
-(BAR,-1000.0);q25=gmin(q25,FREd);Q12=gmax(Q2,100.0);Q12=gmin
-(Q12,500.0);DISK=gmax(Q3,0.0);DISK=gmin(DISK,10000.0);EMPty=
-gmax(q4,0.0);EMPty=gmin(EMPty,1.0);q26=gmax(q5,0.1);q13=fabs
-(q7);q13=gmax(q13,0.001);q13=gmin(q13,0.01);q28=fabs(baz);
-q28=gmax(q28,1e-12);FuLl=gmin(q28,0.1)/2.0;dad=(q26<=100.0);
-q27=q26*q26;FAST=9.784*(1.0-0.0026*cos(2.0*q6)-2.8e-7*q25);
-SMALL=(dad)?((287.604+1.6288/q27+0.0136/(q27*q27))*273.15/
-1013.25)*1e-6:77.6890e-6;bug=FAST*FOObAz/Q8;big=bug/q13;q14=
-big-2.0;Q15=q10-2.0;OK=Q12-273.15;HeLLo=pow(10.0,(0.7859+
-0.03477*OK)/(1.0+0.00412*OK))*(1.0+DISK*(4.5e-6+6e-10*OK*OK)
-);bYE=(DISK>0.0)?EMPty*HeLLo/(1.0-(1.0-EMPty)*HeLLo/DISK):
-0.0;q28=bYE*(1.0-q9/FOObAz)*big/(q10-big);Q16=SMALL*(DISK+
-q28)/Q12;caT=(SMALL*q28+(dad?11.2684e-6:6.3938e-6)*bYE)/Q12;
-q17=(big-1.0)*q13*Q16/Q12;FISH=(q10-1.0)*q13*caT/Q12;GASP=
-dad?0.0:375463e-6*bYE/Q12;bad=GASP*Q15*q13/(Q12*Q12);dog=
-quux+q25;q0(dog,Q12,q13,q14,Q15,Q16,caT,q17,FISH,GASP,bad,
-dog,&MaGIC,&oBscuRe,&speed);iNdEX=oBscuRe*dog*sin(q24);
-bAR_FOO=q49(oBscuRe,speed);Q18=quux+gmax(q11,q25);q0(dog,Q12
-,q13,q14,Q15,Q16,caT,q17,FISH,GASP,bad,Q18,&q19,&Q20,&
-Bar_BAr);Q29=asin(iNdEX/(Q18*Q20));Q30=q49(Q20,Bar_BAr);FOO(
-Q18,q19,Q20,bug,Q18,&q31,&q32);bar_baz=asin(iNdEX/(Q18*q31))
-;Q33=q49(q31,q32);q34=quux+FREd;FOO(Q18,q19,Q20,bug,q34,&
-bar_fOBAR,&Q35);Q36=asin(iNdEX/(q34*bar_fOBAR));BAR_FOOBAR=
-q49(bar_fOBAR,Q35);for(Q21=1;Q21<=2;Q21++){Q37=1.0;SILLY=8;
-if(Q21==1){q38=q24;bAr_FOBaZ=Q29-q38;q39=bAR_FOO;Q40=Q30;}
-else{q38=bar_baz;bAr_FOBaZ=Q36-q38;q39=Q33;Q40=BAR_FOOBAR;}
-q41=0.0;baR_fOoBaz=0.0;Q22=1;for(;;){q42=bAr_FOBaZ/(double)
-SILLY;BaR_qUux=(Q21==1)?dog:Q18;for(buggy=1;buggy<SILLY;
-buggy+=Q22){Q43=sin(q38+q42*(double)buggy);if(Q43>1e-20){q28
-=iNdEX/Q43;BAR_FRED=BaR_qUux;mum=0;do{if(Q21==1){q0(dog,Q12,
-q13,q14,Q15,Q16,caT,q17,FISH,GASP,bad,BAR_FRED,&Q44,&BAr_CAt
-,&bar_fish);}else{FOO(Q18,q19,Q20,bug,BAR_FRED,&BAr_CAt,&
-bar_fish);}BaR_DoG=(BAR_FRED*BAr_CAt-q28)/(BAr_CAt+bar_fish)
-;BAR_FRED-=BaR_DoG;}while(fabs(BaR_DoG)>1.0&&mum++<=4);
-BaR_qUux=BAR_FRED;}if(Q21==1){q0(dog,Q12,q13,q14,Q15,Q16,caT
-,q17,FISH,GASP,bad,BaR_qUux,&Q45,&BAr_CAt,&bar_fish);}else{
-FOO(Q18,q19,Q20,bug,BaR_qUux,&BAr_CAt,&bar_fish);}q46=q49(
-BAr_CAt,bar_fish);if(Q22==1&&buggy%2==0){baR_fOoBaz+=q46;}
-else{q41+=q46;}}Q47=q42*(q39+4.0*q41+2.0*baR_fOoBaz+Q40)/3.0
-;if(Q21==1)Q48=Q47;if(fabs(Q47-Q37)<=FuLl||SILLY>=foobar)
-break;Q37=Q47;SILLY+=SILLY;baR_fOoBaz+=q41;q41=0.0;Q22=2;}}*
-FOBAR=Q48+Q47;if(q23<0.0)*FOBAR=-(*FOBAR);}static void q0(
-double dog,double Q12,double q13,double q14,double Q15,
-double Q16,double caT,double q17,double FISH,double GASP,
-double bad,double BaR_qUux,double*Q45,double*BAr_CAt,double*
-bar_fish){double q28,Q52,Q53,BAR_GASp;q28=Q12-q13*(BaR_qUux-
-dog);q28=gmin(q28,320.0);q28=gmax(q28,100.0);Q52=q28/Q12;Q53
-=pow(Q52,q14);BAR_GASp=pow(Q52,Q15);*Q45=q28;*BAr_CAt=1.0+(
-Q16*Q53-(caT-GASP/q28)*BAR_GASp)*Q52;*bar_fish=BaR_qUux*(-
-q17*Q53+(FISH-bad/Q52)*BAR_GASp);}static void FOO(double Q18
-,double q19,double Q20,double bug,double BaR_qUux,double*
-BAr_CAt,double*bar_fish){double BAR_BAD,q28;BAR_BAD=bug/q19;
-q28=(Q20-1.0)*exp(-BAR_BAD*(BaR_qUux-Q18));*BAr_CAt=1.0+q28;
-*bar_fish=-BaR_qUux*BAR_BAD*q28;}
-#undef foobar 
-#undef q49
-
-float palSlaRverot(float Q0,float q1,float foo,float q2)
-#define q3 0.4655
-{return(float)(q3*cos((double)Q0)*sin((double)(q2-q1))*cos((
-double)foo));}
-#undef q3 
-
-float palSlaRvgalc(float Q0,float FOo){static float q1[3]={-
-108.70408f,97.86251f,-164.33610f};float BAR[3];palSlaCs2c(Q0,
-FOo,BAR);return palSlaVdv(q1,BAR);}
-
-float palSlaRvlg(float FOO,float BAR){static float baz[3]={-
-148.23284f,133.44888f,-224.09467f};float Q0[3];palSlaCs2c(FOO,
-BAR,Q0);return palSlaVdv(baz,Q0);}
-
-float palSlaRvlsrd(float foo,float Q0){static float BAr[3]={
-0.63823f,14.58542f,-7.80116f};float q1[3];palSlaCs2c(foo,Q0,q1)
-;return palSlaVdv(BAr,q1);}
-
-float palSlaRvlsrk(float q0,float Q1){static float foo[3]={-
-0.29000f,17.31726f,-10.00141f};float q2[3];palSlaCs2c(q0,Q1,q2)
-;return palSlaVdv(foo,q2);}
-
-void palSlaSubet(double Q0,double FOO,double q1,double*BAR,
-double*q2){double Q3[3],Q4[3],Baz;int q5;palSlaEtrms(q1,Q3);
-palSlaDcs2c(Q0,FOO,Q4);Baz=1.0+palSlaDvdv(Q4,Q3);for(q5=0;q5<3;q5
-++){Q4[q5]=Baz*Q4[q5]-Q3[q5];}palSlaDcc2s(Q4,BAR,q2);*BAR=
-palSlaDranrm(*BAR);}
-
-void palSlaSupgal(double foo,double baR,double*BAZ,double*q0){
-double Q1[3],FOBAR[3];static double Q2[3][3]={{-
-0.735742574804,0.677261296414,0.0},{-0.074553778365,-
-0.080991471307,0.993922590400},{0.673145302109,
-0.731271165817,0.110081262225}};palSlaDcs2c(foo,baR,Q1);
-palSlaDimxv(Q2,Q1,FOBAR);palSlaDcc2s(FOBAR,BAZ,q0);*BAZ=palSlaDranrm(
-*BAZ);*q0=palSlaDrange(*q0);}
-
-float palSlaVdv(float FOO[3],float BAR[3]){return FOO[0]*BAR[0]
-+FOO[1]*BAR[1]+FOO[2]*BAR[2];}
-
-
-/* Not quite like slaDh2e since it converts from topocentric (az,el) to 
-   apparent (ha,dec). This includes a correction for diurnal aberration. 
-   The magnitude of the diurnal aberration vector should be supplied in 
-   parameter "diurab". The extra code is taken from the Fortran routine 
-   SLA_OAPQK. */
-
-void palSlaDh2e(double az,double el,double phi,double diurab,double *ha,double *dec){
- double sa,ca,se,ce,sp,cp,x,y,z,r,xmhda,ymhda,zmhda,f;
-
- sa=sin(az);
- ca=cos(az);
- se=sin(el);
- ce=cos(el);
- sp=sin(phi);
- cp=cos(phi);
-
-/* Cartesian (az,el) to Cartesian (ha,dec) - note, +ha, not -ha. */
- xmhda=-ca*ce*sp+se*cp;
- ymhda=-sa*ce;
- zmhda=ca*ce*cp+se*sp;
-
-/* Correct this vector for diurnal aberration. Since the above
-  expressions produce +ha rather than -ha, we do not negate "diurab" 
-  before using it. Compare this to SLA_AOPQK. */
- f = (1-diurab*ymhda);
- x = f*xmhda;
- y = f*(ymhda+diurab);
- z = f*zmhda;
-
-/* Cartesian (ha,dec) to spherical (ha,dec). */
- r=sqrt(x*x+y*y);
- if (r==0.0) { 
-    *ha=0.0;
- } else {
-    *ha=atan2(y,x);
- } 
- *dec=atan2(z,r);
-}
-
-
-/* Not quite like slaDe2h since it converts from apparent (ha,dec) to 
-   topocentric (az,el). This includes a correction for diurnal
-   aberration. The magnitude of the diurnal aberration vector should be 
-   supplied in parameter "diurab". The extra code is taken from the
-   Fortran routine SLA_AOPQK. */
-
-void palSlaDe2h( double ha, double dec, double phi, double diurab, 
-                 double *az, double *el){
- double sh,ch,sd,cd,sp,cp,x,y,z,r,a,xhd,yhd,zhd,xhdt,yhdt,zhdt,f;
-
- sh=sin(ha); 
- ch=cos(ha); 
- sd=sin(dec);
- cd=cos(dec);
- sp=sin(phi);
- cp=cos(phi);
-
-/* Components of cartesian (-ha,dec) vector. */
- xhd = ch*cd;
- yhd = -sh*cd;
- zhd = sd;
-
-/* Modify the above vector to apply diurnal aberration. */
- f = (1.0-diurab*yhd);
- xhdt = f*xhd;
- yhdt = f*(yhd+diurab);
- zhdt = f*zhd;
-
-/* Convert to cartesian (az,el). */
- x=-xhdt*sp+zhdt*cp;
- y=yhdt;
- z=xhdt*cp+zhdt*sp;
-
-/* Convert to spherical (az,el). */
- r=sqrt(x*x+y*y);
- if( r == 0.0 ) { 
-    a=0.0;
- } else {
-    a=atan2(y,x);
- } 
-
- if(a<0.0) a=a+D2PI;
-
- *az=a;
- *el=atan2(z,r);
-}
-
-
-
-double palSlaGmsta( double Dt, double uQ){ static double
-s2r=7.272205216643039903848712E-5; double r,d1,d2,t; if(Dt<uQ) { d1=Dt;
-d2=uQ; } else { d1=uQ; d2=Dt; } t=(d1+(d2-51544.5))/36525.0;
-r=palSlaDranrm(s2r*(24110.54841+ (8640184.812866+ (0.093104
--6.2E-6*t)*t)*t +86400.0*(fmod(d1,1.0)+fmod(d2,1.0)))); return r; }
-
-void palSlaPvobs(double p,double h,double stl,double pv[6]){double
-r,z,s,c,v;double sr=7.292115855306589E-5;palSlaGeoc(p,h,&r,&z);
-s=sin(stl);c=cos(stl);v=sr*r;pv[0]=r*c;pv[1]=r*s;pv[2]=z;
-pv[3]=-v*s;pv[4]=v*c;pv[5]=0.0;}
-
-
-
diff --git a/ast-5.3-1/pal.h b/ast-5.3-1/pal.h
deleted file mode 100644
index f7e6d86..0000000
--- a/ast-5.3-1/pal.h
+++ /dev/null
@@ -1,510 +0,0 @@
-#ifndef PALHDEF
-#define PALHDEF
-/*
-**  Author:
-**    Patrick Wallace  (ptw at tpsoft.demon.co.uk)
-**
-**  License:
-**    This program is free software; you can redistribute it and/or modify
-**    it under the terms of the GNU General Public License as published by
-**    the Free Software Foundation; either version 2 of the License, or
-**    (at your option) any later version.
-**
-**    This program is distributed in the hope that it will be useful,
-**    but WITHOUT ANY WARRANTY; without even the implied warranty of
-**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**    GNU General Public License for more details.
-**
-**    You should have received a copy of the GNU General Public License
-**    along with this program; if not, write to the Free Software 
-**    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  
-**    USA.
-**
-**  Last revision:   10 December 2002
-**
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <math.h>
-
-void palSlaAddet ( double rm, double dm, double eq, double *rc, double *dc );
-
-void palSlaAfin ( char *string, int *iptr, float *a, int *j );
-
-double palSlaAirmas ( double zd );
-
-void palSlaAltaz ( double ha, double dec, double phi,
-                double *az, double *azd, double *azdd,
-                double *el, double *eld, double *eldd,
-                double *pa, double *pad, double *padd );
-
-void palSlaAmp ( double ra, double da, double date, double eq,
-              double *rm, double *dm );
-
-void palSlaAmpqk ( double ra, double da, double amprms[21],
-                double *rm, double *dm );
-
-void palSlaAop ( double rap, double dap, double date, double dut,
-              double elongm, double phim, double hm, double xp,
-              double yp, double tdk, double pmb, double rh,
-              double wl, double tlr,
-              double *aob, double *zob, double *hob,
-              double *dob, double *rob );
-
-void palSlaAoppa ( double date, double dut, double elongm, double phim,
-                double hm, double xp, double yp, double tdk, double pmb,
-                double rh, double wl, double tlr, double aoprms[14] );
-
-void palSlaAoppat ( double date, double aoprms[14] );
-
-void palSlaAopqk ( double rap, double dap, double aoprms[14],
-                double *aob, double *zob, double *hob,
-                double *dob, double *rob );
-
-void palSlaAtmdsp ( double tdk, double pmb, double rh, double wl1,
-                 double a1, double b1, double wl2, double *a2, double *b2 );
-
-void palSlaAv2m ( float axvec[3], float rmat[3][3] );
-
-float palSlaBear ( float a1, float b1, float a2, float b2 );
-
-void palSlaCaf2r ( int ideg, int iamin, float asec, float *rad, int *j );
-
-void palSlaCaldj ( int iy, int im, int id, double *djm, int *j );
-
-void palSlaCalyd ( int iy, int im, int id, int *ny, int *nd, int *j );
-
-void palSlaCc2s ( float v[3], float *a, float *b );
-
-void palSlaCc62s ( float v[6], float *a, float *b, float *r,
-                float *ad, float *bd, float *rd );
-
-void palSlaCd2tf ( int ndp, float days, char *sign, int ihmsf[4] );
-
-void palSlaCldj ( int iy, int im, int id, double *djm, int *j );
-
-void palSlaClyd ( int iy, int im, int id, int *ny, int *nd, int *jstat );
-
-void palSlaCombn ( int nsel, int ncand, int list[], int *j );
-
-void palSlaCr2af ( int ndp, float angle, char *sign, int idmsf[4] );
-
-void palSlaCr2tf ( int ndp, float angle, char *sign, int ihmsf[4] );
-
-void palSlaCs2c ( float a, float b, float v[3] );
-
-void palSlaCs2c6 ( float a, float b, float r, float ad,
-                float bd, float rd, float v[6] );
-
-void palSlaCtf2d ( int ihour, int imin, float sec, float *days, int *j );
-
-void palSlaCtf2r ( int ihour, int imin, float sec, float *rad, int *j );
-
-void palSlaDaf2r ( int ideg, int iamin, double asec, double *rad, int *j );
-
-void palSlaDafin ( char *string, int *iptr, double *a, int *j );
-
-double palSlaDat ( double dju );
-
-void palSlaDav2m ( double axvec[3], double rmat[3][3] );
-
-double palSlaDbear ( double a1, double b1, double a2, double b2 );
-
-void palSlaDbjin ( char *string, int *nstrt,
-                double *dreslt, int *jf1, int *jf2 );
-
-void palSlaDc62s ( double v[6], double *a, double *b, double *r,
-                double *ad, double *bd, double *rd );
-
-void palSlaDcc2s ( double v[3], double *a, double *b );
-
-void palSlaDcmpf ( double coeffs[6], double *xz, double *yz, double *xs,
-                double *ys, double *perp, double *orient );
-
-void palSlaDcs2c ( double a, double b, double v[3] );
-
-void palSlaDd2tf ( int ndp, double days, char *sign, int ihmsf[4] );
-
-void palSlaDe2h ( double ha, double dec, double phi, double diurab,
-               double *az, double *el );
-
-void palSlaDeuler ( char *order, double phi, double theta, double psi,
-                 double rmat[3][3] );
-
-void palSlaDfltin ( char *string, int *nstrt, double *dreslt, int *jflag );
-
-void palSlaDh2e( double az, double el, double phi, double diurab, double *ha, 
-                 double *dec);
-
-void palSlaDimxv ( double dm[3][3], double va[3], double vb[3] );
-
-void palSlaDjcal ( int ndp, double djm, int iymdf[4], int *j );
-
-void palSlaDjcl ( double djm, int *iy, int *im, int *id, double *fd, int *j );
-
-void palSlaDm2av ( double rmat[3][3], double axvec[3] );
-
-void palSlaDmat ( int n, double *a, double *y, double *d, int *jf, int *iw );
-
-void palSlaDmoon ( double date, double pv[6] );
-
-void palSlaDmxm ( double a[3][3], double b[3][3], double c[3][3] );
-
-void palSlaDmxv ( double dm[3][3], double va[3], double vb[3] );
-
-double palSlaDpav ( double v1[3], double v2[3] );
-
-void palSlaDr2af ( int ndp, double angle, char *sign, int idmsf[4] );
-
-void palSlaDr2tf ( int ndp, double angle, char *sign, int ihmsf[4] );
-
-double palSlaDrange ( double angle );
-
-double palSlaDranrm ( double angle );
-
-void palSlaDs2c6 ( double a, double b, double r, double ad, double bd,
-                double rd, double v[6] );
-
-void palSlaDs2tp ( double ra, double dec, double raz, double decz,
-                double *xi, double *eta, int *j );
-
-double palSlaDsep ( double a1, double b1, double a2, double b2 );
-
-double palSlaDsepv ( double v1[3], double v2[3] );
-
-double palSlaDt ( double epoch );
-
-void palSlaDtf2d ( int ihour, int imin, double sec, double *days, int *j );
-
-void palSlaDtf2r ( int ihour, int imin, double sec, double *rad, int *j );
-
-void palSlaDtp2s ( double xi, double eta, double raz, double decz,
-                double *ra, double *dec );
-
-void palSlaDtp2v ( double xi, double eta, double v0[3], double v[3] );
-
-void palSlaDtps2c ( double xi, double eta, double ra, double dec,
-                 double *raz1, double *decz1,
-                 double *raz2, double *decz2, int *n );
-
-void palSlaDtpv2c ( double xi, double eta, double v[3],
-                 double v01[3], double v02[3], int *n );
-
-double palSlaDtt ( double dju );
-
-void palSlaDv2tp ( double v[3], double v0[3], double *xi, double *eta, int *j );
-
-double palSlaDvdv ( double va[3], double vb[3] );
-
-void palSlaDvn ( double v[3], double uv[3], double *vm );
-
-void palSlaDvxv ( double va[3], double vb[3], double vc[3] );
-
-void palSlaE2h ( float ha, float dec, float phi, float *az, float *el );
-
-void palSlaEarth ( int iy, int id, float fd, float posvel[6] );
-
-void palSlaEcleq ( double dl, double db, double date, double *dr, double *dd );
-
-void palSlaEcmat ( double date, double rmat[3][3] );
-
-void palSlaEcor ( float rm, float dm, int iy, int id, float fd,
-               float *rv, float *tl );
-
-void palSlaEg50 ( double dr, double dd, double *dl, double *db );
-
-void palSlaEl2ue ( double date, int jform, double epoch, double orbinc,
-                double anode, double perih, double aorq, double e,
-                double aorl, double dm, double u[], int *jstat );
-
-double palSlaEpb ( double date );
-
-double palSlaEpb2d ( double epb );
-
-double palSlaEpco ( char k0, char k, double e );
-
-double palSlaEpj ( double date );
-
-double palSlaEpj2d ( double epj );
-
-void palSlaEqecl ( double dr, double dd, double date, double *dl, double *db );
-
-double palSlaEqeqx ( double date );
-
-void palSlaEqgal ( double dr, double dd, double *dl, double *db );
-
-void palSlaEtrms ( double ep, double ev[3] );
-
-void palSlaEuler ( char *order, float phi, float theta, float psi,
-                float rmat[3][3] );
-
-void palSlaEvp ( double date, double deqx,
-              double dvb[3], double dpb[3],
-              double dvh[3], double dph[3] );
-
-void palSlaFitxy ( int itype, int np, double xye[][2], double xym[][2],
-                double coeffs[6], int *j );
-
-void palSlaFk425 ( double r1950, double d1950, double dr1950,
-                double dd1950, double p1950, double v1950,
-                double *r2000, double *d2000, double *dr2000,
-                double *dd2000, double *p2000, double *v2000 );
-
-void palSlaFk45z ( double r1950, double d1950, double bepoch,
-                double *r2000, double *d2000 );
-
-void palSlaFk524 ( double r2000, double d2000, double dr2000,
-                double dd2000, double p2000, double v2000,
-                double *r1950, double *d1950, double *dr1950,
-                double *dd1950, double *p1950, double *v1950 );
-
-void palSlaFk52h ( double r5, double d5, double dr5, double dd5,
-                double *dr, double *dh, double *drh, double *ddh );
-
-void palSlaFk54z ( double r2000, double d2000, double bepoch,
-                double *r1950, double *d1950,
-                double *dr1950, double *dd1950 );
-
-void palSlaFk5hz ( double r5, double d5, double epoch,
-                double *rh, double *dh );
-
-void palSlaFlotin ( char *string, int *nstrt, float *reslt, int *jflag );
-
-void palSlaGaleq ( double dl, double db, double *dr, double *dd );
-
-void palSlaGalsup ( double dl, double db, double *dsl, double *dsb );
-
-void palSlaGe50 ( double dl, double db, double *dr, double *dd );
-
-void palSlaGeoc ( double p, double h, double *r, double *z );
-
-double palSlaGmst ( double ut1 );
-
-double palSlaGmsta ( double date, double ut1 );
-
-void palSlaH2e ( float az, float el, float phi, float *ha, float *dec );
-
-void palSlaH2fk5 ( double dr, double dh, double drh, double ddh,
-                double *r5, double *d5, double *dr5, double *dd5 );
-
-void palSlaHfk5z ( double rh, double dh, double epoch,
-                double *r5, double *d5, double *dr5, double *dd5 );
-
-void palSlaImxv ( float rm[3][3], float va[3], float vb[3] );
-
-void palSlaInt2in ( char *string, int *nstrt, int *ireslt, int *jflag );
-
-void palSlaIntin ( char *string, int *nstrt, long *ireslt, int *jflag );
-
-void palSlaInvf ( double fwds[6], double bkwds[6], int *j );
-
-void palSlaKbj ( int jb, double e, char *k, int *j );
-
-void palSlaM2av ( float rmat[3][3], float axvec[3] );
-
-void palSlaMap ( double rm, double dm, double pr, double pd,
-              double px, double rv, double eq, double date,
-              double *ra, double *da );
-
-void palSlaMappa ( double eq, double date, double amprms[21] );
-
-void palSlaMapqk ( double rm, double dm, double pr, double pd,
-                double px, double rv, double amprms[21],
-                double *ra, double *da );
-
-void palSlaMapqkz ( double rm, double dm, double amprms[21],
-                 double *ra, double *da );
-
-void palSlaMoon ( int iy, int id, float fd, float posvel[6] );
-
-void palSlaMxm ( float a[3][3], float b[3][3], float c[3][3] );
-
-void palSlaMxv ( float rm[3][3], float va[3], float vb[3] );
-
-void palSlaNut ( double date, double rmatn[3][3] );
-
-void palSlaNutc ( double date, double *dpsi, double *deps, double *eps0 );
-
-void palSlaNutc80 ( double date, double *dpsi, double *deps, double *eps0 );
-
-void palSlaOap ( char *type, double ob1, double ob2, double date,
-              double dut, double elongm, double phim, double hm,
-              double xp, double yp, double tdk, double pmb,
-              double rh, double wl, double tlr,
-              double *rap, double *dap );
-
-void palSlaOapqk ( char *type, double ob1, double ob2, double aoprms[14],
-                double *rap, double *dap );
-
-void palSlaObs ( int n, char *c, char *name, double *w, double *p, double *h );
-
-double palSlaPa ( double ha, double dec, double phi );
-
-double palSlaPav ( float v1[3], float v2[3] );
-
-void palSlaPcd ( double disco, double *x, double *y );
-
-void palSlaPda2h ( double p, double d, double a,
-                double *h1, int *j1, double *h2, int *j2 );
-
-void palSlaPdq2h ( double p, double d, double q,
-                double *h1, int *j1, double *h2, int *j2 );
-
-void palSlaPermut ( int n, int istate[], int iorder[], int *j );
-
-void palSlaPertel (int jform, double date0, double date1,
-                double epoch0, double orbi0, double anode0,
-                double perih0, double aorq0, double e0, double am0,
-                double *epoch1, double *orbi1, double *anode1,
-                double *perih1, double *aorq1, double *e1, double *am1,
-                int *jstat );
-
-void palSlaPertue ( double date, double u[], int *jstat );
-
-void palSlaPlanel ( double date, int jform, double epoch, double orbinc,
-                 double anode, double perih, double aorq,  double e,
-                 double aorl, double dm, double pv[6], int *jstat );
-
-void palSlaPlanet ( double date, int np, double pv[6], int *j );
-
-void palSlaPlante ( double date, double elong, double phi, int jform,
-                 double epoch, double orbinc, double anode, double perih,
-                 double aorq, double e, double aorl, double dm,
-                 double *ra, double *dec, double *r, int *jstat );
-
-void palSlaPlantu ( double date, double elong, double phi, double u[],
-                 double *ra, double *dec, double *r, int *jstat );
-
-void palSlaPm ( double r0, double d0, double pr, double pd,
-             double px, double rv, double ep0, double ep1,
-             double *r1, double *d1 );
-
-void palSlaPolmo ( double elongm, double phim, double xp, double yp,
-                double *elong, double *phi, double *daz );
-
-void palSlaPrebn ( double bep0, double bep1, double rmatp[3][3] );
-
-void palSlaPrec ( double ep0, double ep1, double rmatp[3][3] );
-
-void palSlaPrecl ( double ep0, double ep1, double rmatp[3][3] );
-
-void palSlaPreces ( char sys[3], double ep0, double ep1,
-                 double *ra, double *dc );
-
-void palSlaPrenut ( double epoch, double date, double rmatpn[3][3] );
-
-void palSlaPv2el ( double pv[], double date, double pmass, int jformr,
-                int *jform, double *epoch, double *orbinc,
-                double *anode, double *perih, double *aorq, double *e,
-                double *aorl, double *dm, int *jstat );
-
-void palSlaPv2ue ( double pv[], double date, double pmass,
-                double u[], int *jstat );
-
-void palSlaPvobs ( double p, double h, double stl, double pv[6] );
-
-void palSlaPxy ( int np, double xye[][2], double xym[][2],
-              double coeffs[6],
-              double xyp[][2], double *xrms, double *yrms, double *rrms );
-
-float palSlaRange ( float angle );
-
-float palSlaRanorm ( float angle );
-
-double palSlaRcc ( double tdb, double ut1, double wl, double u, double v );
-
-void palSlaRdplan ( double date, int np, double elong, double phi,
-                 double *ra, double *dec, double *diam );
-
-void palSlaRefco ( double hm, double tdk, double pmb, double rh,
-                double wl, double phi, double tlr, double eps,
-                double *refa, double *refb );
-
-void palSlaRefcoq ( double tdk, double pmb, double rh, double wl,
-                double *refa, double *refb );
-
-void palSlaRefro ( double zobs, double hm, double tdk, double pmb,
-                double rh, double wl, double phi, double tlr, double eps,
-                double *ref );
-
-void palSlaRefv ( double vu[3], double refa, double refb, double vr[3] );
-
-void palSlaRefz ( double zu, double refa, double refb, double *zr );
-
-float palSlaRverot ( float phi, float ra, float da, float st );
-
-float palSlaRvgalc ( float r2000, float d2000 );
-
-float palSlaRvlg ( float r2000, float d2000 );
-
-float palSlaRvlsrd ( float r2000, float d2000 );
-
-float palSlaRvlsrk ( float r2000, float d2000 );
-
-void palSlaS2tp ( float ra, float dec, float raz, float decz,
-               float *xi, float *eta, int *j );
-
-float palSlaSep ( float a1, float b1, float a2, float b2 );
-
-float palSlaSepv ( float v1[3], float v2[3] );
-
-void palSlaSmat ( int n, float *a, float *y, float *d, int *jf, int *iw );
-
-void palSlaSubet ( double rc, double dc, double eq,
-                double *rm, double *dm );
-
-void palSlaSupgal ( double dsl, double dsb, double *dl, double *db );
-
-void palSlaSvd ( int m, int n, int mp, int np,
-              double *a, double *w, double *v, double *work,
-              int *jstat );
-
-void palSlaSvdcov ( int n, int np, int nc,
-                 double *w, double *v, double *work, double *cvm );
-
-void palSlaSvdsol ( int m, int n, int mp, int np,
-                 double *b, double *u, double *w, double *v,
-                 double *work, double *x );
-
-void palSlaTp2s ( float xi, float eta, float raz, float decz,
-               float *ra, float *dec );
-
-void palSlaTp2v ( float xi, float eta, float v0[3], float v[3] );
-
-void palSlaTps2c ( float xi, float eta, float ra, float dec,
-                float *raz1, float *decz1,
-                float *raz2, float *decz2, int *n );
-
-void palSlaTpv2c ( float xi, float eta, float v[3],
-                float v01[3], float v02[3], int *n );
-
-void palSlaUe2el ( double u[], int jformr,
-                int *jform, double *epoch, double *orbinc,
-                double *anode, double *perih, double *aorq, double *e,
-                double *aorl, double *dm, int *jstat );
-
-void palSlaUe2pv ( double date, double u[], double pv[], int *jstat );
-
-void palSlaUnpcd ( double disco, double *x, double *y );
-
-void palSlaV2tp ( float v[3], float v0[3], float *xi, float *eta, int *j );
-
-float palSlaVdv ( float va[3], float vb[3] );
-
-void palSlaVn ( float v[3], float uv[3], float *vm );
-
-void palSlaVxv ( float va[3], float vb[3], float vc[3] );
-
-void palSlaXy2xy ( double x1, double y1, double coeffs[6],
-                double *x2, double *y2 );
-
-double palSlaZd ( double ha, double dec, double phi );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ast-5.3-1/pcdmap.c b/ast-5.3-1/pcdmap.c
deleted file mode 100644
index 54e41aa..0000000
--- a/ast-5.3-1/pcdmap.c
+++ /dev/null
@@ -1,3193 +0,0 @@
-/*
-*class++
-*  Name:
-*     PcdMap
-
-*  Purpose:
-*     Apply 2-dimensional pincushion/barrel distortion.
-
-*  Constructor Function:
-c     astPcdMap
-f     AST_PCDMAP
-
-*  Description:
-*     A PcdMap is a non-linear Mapping which transforms 2-dimensional
-*     positions to correct for the radial distortion introduced by some
-*     cameras and telescopes. This can take the form either of pincushion
-*     or barrel distortion, and is characterized by a single distortion
-*     coefficient.
-*
-*     A PcdMap is specified by giving this distortion coefficient and the
-*     coordinates of the centre of the radial distortion. The forward
-*     transformation of a PcdMap applies the distortion:
-*
-*        RD = R * ( 1 + C * R * R )
-*
-*     where R is the undistorted radial distance from the distortion 
-*     centre (specified by attribute PcdCen), RD is the radial distance 
-*     from the same centre in the presence of distortion, and C is the 
-*     distortion coefficient (given by attribute Disco).
-*
-*     The inverse transformation of a PcdMap removes the distortion
-*     produced by the forward transformation. The expression used to derive 
-*     R from RD is an approximate inverse of the expression above.
-
-*  Inheritance:
-*     The PcdMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     PcdMap also has the following attributes:
-*
-*     - Disco: PcdMap pincushion/barrel distortion coefficient
-*     - PcdCen(axis): Centre coordinates of pincushion/barrel distortion
-
-*  Functions:
-c     The PcdMap class does not define any new functions beyond those
-f     The PcdMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     18-MAY-1999 (DSB):
-*        Original version.
-*     25-OCT-1999 (DSB):
-*        Fixed memory leak in MapMerge.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitPcdMapVtab
-*        method.
-*     23-AUG-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS PcdMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "unitmap.h"             /* Unit mappings */
-#include "zoommap.h"             /* Zoom mappings */
-#include "permmap.h"             /* Axis permutations */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "pcdmap.h"              /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PcdMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PcdMap,Class_Init)
-#define class_vtab astGLOBAL(PcdMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(PcdMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPcdMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPcdMap *astPcdMapId_( double, const double [2], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double GetDisco( AstPcdMap *, int * );
-static double GetPcdCen( AstPcdMap *, int, int * );
-static int CanMerge( AstMapping *, AstMapping *, int, int, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestDisco( AstPcdMap *, int * );
-static int TestPcdCen( AstPcdMap *, int, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearDisco( AstPcdMap *, int * );
-static void ClearPcdCen( AstPcdMap *, int, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void PcdPerm( AstMapping **, int *, int, int * );
-static void PcdZoom( AstMapping **, int *, int, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetDisco( AstPcdMap *, double, int * );
-static void SetPcdCen( AstPcdMap *, int, double, int * );
-
-/* Function Macros */
-/* =============== */
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     MAKE_CLEAR(attr,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the PcdMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPcdMap *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstPcdMap *this, int axis )
-*
-*     which implement a method for clearing a single value in a specified 
-*     multi-valued attribute for an axis of a PcdMap.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. PcdCen in "astClearPcdCen").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astClear" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the "clear" value. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,PcdMap,Clear##attr))( this, axis, status ); \
-}   
-
-
-/*
-*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     MAKE_GET(attr,type,bad_value,assign,nval)
-
-*  Class Membership:
-*     Defined by the PcdMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstPcdMap *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( AstPcdMap *this, int axis )
-*
-*     which implement a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a PcdMap.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. PcdCen in "astGetPcdCen").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPcdMap *this, int axis, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astGet" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attr##_( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,PcdMap,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     MAKE_SET(attr,type,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the PcdMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPcdMap *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstPcdMap *this, int axis, <Type> value )
-*
-*     which implement a method for setting a single value in a specified
-*     multi-valued attribute for a PcdMap.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. PcdCen in "astSetPcdCen").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      nval
-*         Specifies the number of values in the multi-valued attribute. The
-*         "axis" values supplied to the created function should be in the
-*         range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPcdMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astSet" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Store the new value in the structure component. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPcdMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,PcdMap,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if a single value has been set in a 
-*     multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     MAKE_TEST(attr,assign,nval)
-
-*  Class Membership:
-*     Defined by the PcdMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstPcdMap *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstPcdMap *this, int axis )
-*
-*     which implement a method for testing if a single value in a specified 
-*     multi-valued attribute has been set for a class.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. PcdCen in "astTestPcdCen").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value. This can use the string "axis" to represent the zero-based
-*         index of the value within the attribute.
-*      nval
-*         Specifies the number of values in the multi-valued attribute. The
-*         "axis" values supplied to the created function should be in the
-*         range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPcdMap *this, int axis, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-/* Initialise */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astTest" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPcdMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,PcdMap,Test##attr))( this, axis, status ); \
-}
-
-/* Member functions. */
-/* ================= */
-static int CanMerge( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status ){
-/*
-*
-*  Name:
-*     CanMerge
-
-*  Purpose:
-*     Checks if two Mappings can be merged.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     int CanMerge( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status )
-
-*  Class Membership:
-*     PcdMap internal utility function.
-
-*  Description:
-*     This function checks the two supplied Mappings to see if they 
-*     can be merged into a single Mapping. One of the pair must be a PcdMap. 
-
-*  Parameters:
-*     map1
-*        A pointer to the first mapping.
-*     map2
-*        A pointer to the second mapping.
-*     inv1
-*        The invert flag to use with the first mapping.
-*     inv2
-*        The invert flag to use with the second mapping.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the Mappings can be merged, zero otherwise.
-
-*/
-
-   AstPcdMap  *pcd;          /* Pointer to PcdMap Mapping */
-   AstPcdMap  *pcd2;         /* Pointer to second PcdMap Mapping */
-   AstMapping *nopcd;        /* Pointer to non-PcdMap Mapping */
-   const char *class1;       /* Pointer to map1 class string */
-   const char *class2;       /* Pointer to map2 class string */
-   const char *nopcd_class;  /* Pointer to non-PcdMap class string */
-   int invert[ 2 ];          /* Original invert flags */
-   int ret;                  /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   ret = 0;
-   pcd = NULL;
-   nopcd = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   invert[ 0 ] = astGetInvert( map1 );
-   astSetInvert( map1, inv1 );
-
-   invert[ 1 ] = astGetInvert( map2 );
-   astSetInvert( map2, inv2 );
-   
-/* Get the classes of the two mappings. */
-   class1 = astGetClass( map1 );
-   class2 = astGetClass( map2 );
-   if( astOK ){
-
-/* Get pointers to the PcdMap and the non-PcdMap Mapping. */
-      if( !strcmp( class1, "PcdMap" ) ){
-         pcd = (AstPcdMap * ) map1;
-         nopcd = map2;
-         nopcd_class = class2;
-      } else if( !strcmp( class2, "PcdMap" ) ){
-         nopcd = map1;
-         pcd = (AstPcdMap * ) map2;
-         nopcd_class = class1;
-      } else {
-         nopcd_class = "unusable";
-      }
-
-/* The Mappings can merge if the other Mapping is a UnitMap. */
-      if( !strcmp( nopcd_class, "UnitMap" ) ){
-         ret = 1;
-
-/* They can also merge if the other Mapping is also a PcdMap, and is the
-   invert of the other. */
-      } else if( !strcmp( nopcd_class, "PcdMap" ) ){
-         pcd2 = (AstPcdMap *) nopcd;
-
-/* Check the distortion coefficients are equal. */
-         if( EQUAL( astGetDisco( pcd ), astGetDisco( pcd2 ) ) ){
-
-/* Check the axis 0 centres are equal. */
-            if( EQUAL( astGetPcdCen( pcd, 0 ), astGetPcdCen( pcd2, 0 ) ) ){
-
-/* Check the axis 1 centres are equal. */
-               if( EQUAL( astGetPcdCen( pcd, 1 ), astGetPcdCen( pcd2, 1 ) ) ){
-
-/* Check the Invert flags are different. */
-                  if( astGetInvert( pcd ) != astGetInvert( pcd2 ) ){
-
-/* If the Mappings have passed all these tests, they can be merged. */
-                     ret = 1;
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied Mappings. */
-   astSetInvert( map1, invert[ 0 ] );
-   astSetInvert( map2, invert[ 1 ] );
-   
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status ){
-/*
-*  Name:
-*     CanSwap
-
-*  Purpose:
-*     Determine if two Mappings could be swapped.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2, int *status )
-
-*  Class Membership:
-*     PcdMap member function 
-
-*  Description:
-*     This function returns a flag indicating if the pair of supplied
-*     Mappings could be replaced by an equivalent pair of Mappings from the 
-*     same classes as the supplied pair, but in reversed order. Each pair
-*     of Mappings is considered to be compounded in series. The supplied 
-*     Mappings are not changed in any way.
-
-*  Parameters:
-*     map1
-*        The Mapping to be applied first.
-*     map2
-*        The Mapping to be applied second.
-*     inv1
-*        The invert flag to use with map1. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     inv2
-*        The invert flag to use with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the Mappings could be swapped, 0 otherwise.
-
-*  Notes:
-*     -  One of the supplied pair of Mappings must be a PcdMap.
-*     -  A value of 0 is returned if the two Mappings could be merged into
-*     a single Mapping.
-*     -  A value of 0 is returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *nopcd;        /* Pointer to non-PcdMap Mapping */
-   const char *class1;       /* Pointer to map1 class string */
-   const char *class2;       /* Pointer to map2 class string */
-   const char *nopcd_class;  /* Pointer to non-PcdMap class string */
-   double *consts;           /* Pointer to constants array */
-   int *inperm;              /* Pointer to input axis permutation array */
-   int *outperm;             /* Pointer to output axis permutation array */
-   int invert[ 2 ];          /* Original invert flags */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-   int pcdinv;               /* Use inverted PcdMap? */
-   int ret;                  /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   ret = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   invert[ 0 ] = astGetInvert( map1 );
-   astSetInvert( map1, inv1 );
-
-   invert[ 1 ] = astGetInvert( map2 );
-   astSetInvert( map2, inv2 );
-   
-/* Get the classes of the two mappings. */
-   class1 = astGetClass( map1 );
-   class2 = astGetClass( map2 );
-   if( astOK ){
-
-/* Get a pointer to the non-PcdMap Mapping. */
-      if( !strcmp( class1, "PcdMap" ) ){
-         nopcd = map2;
-         nopcd_class = class2;
-         pcdinv = inv1;
-      } else {
-         nopcd = map1;
-         nopcd_class = class1;
-         pcdinv = inv2;
-      }
-
-/* If the other Mapping is a ZoomMap, the Mappings can be swapped. */
-      if( !strcmp( nopcd_class, "ZoomMap" ) ){
-         ret = 1;
-
-/* If it is a PermMap, the Mappings can be swapped so long as the PermMap
-   simply swaps the two axes. */
-      } else if( !strcmp( nopcd_class, "PermMap" ) ){
-
-/* Get the number of input and output coordinates for the PermMap. */
-         nin = astGetNin( nopcd );
-         nout = astGetNout( nopcd );
-
-/* Must be 2-dimensional to swap. */
-         if( nin == 2 && nout == 2 ) {
-
-/* Get the axis permutation arrays and constants array for the PermMap. */
-            PermGet( (AstPermMap *) nopcd, &outperm, &inperm, &consts, status );
-            if( astOK ) {
-
-/* If the PermMap simply swaps the 2 axes (in both direction) we can
-   swap the two mappings. */
-               ret = ( outperm[0] == 1 && outperm[1] == 0 &&
-                       inperm[0] == 1 && inperm[1] == 0 );
-
-/* Free the axis permutation and constants arrays. */
-               outperm = (int *) astFree( (void *) outperm );
-               inperm = (int *) astFree( (void *) inperm );
-               consts = (double *) astFree( (void *) consts );
-            }
-         }
-      }
-   }
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied Mappings. */
-   astSetInvert( map1, invert[ 0 ] );
-   astSetInvert( map2, invert[ 1 ] );
-   
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a PcdMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PcdMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     PcdMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the PcdMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPcdMap *this;              /* Pointer to the PcdMap structure */
-   int axis;                     /* Axis number */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PcdMap structure. */
-   this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* PcdCen(axis). */
-/* ------------- */
-   if ( nc = 0,
-               ( 1 == astSscanf( attrib, "pcdcen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearPcdCen( this, axis - 1 );
-
-/* PcdCen. */
-/* ------- */
-   } else if ( !strcmp( attrib, "pcdcen" ) ) {
-      astClearPcdCen( this, 0 );
-      astClearPcdCen( this, 1 );
-
-/* Disco. */
-/* ------ */
-   } else if ( !strcmp( attrib, "disco" ) ) {
-      astClearDisco( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two PcdMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     PcdMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two PcdMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a PcdMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the PcdMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPcdMap *that;        
-   AstPcdMap *this;        
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two PcdMap structures. */
-   this = (AstPcdMap *) this_object;
-   that = (AstPcdMap *) that_object;
-
-/* Check the second object is a PcdMap. We know the first is a
-   PcdMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAPcdMap( that ) ) {
-
-/* Check the Invert flags for the two PcdMaps are equal. */
-      if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-/* Check all the attributes are equal. */
-         if( astEQUAL( this->pcdcen[0], that->pcdcen[0] ) &&
-             astEQUAL( this->pcdcen[1], that->pcdcen[1] ) &&
-             astEQUAL( this->disco, that->disco ) ) {
-            result = 1;
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a PcdMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PcdMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a PcdMap, formatted as a character string. 
-
-*  Parameters:
-*     this
-*        Pointer to the PcdMap.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the PcdMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the PcdMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPcdMap *this;              /* Pointer to the PcdMap structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Double attribute value */
-   int axis;                     /* Axis number */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the PcdMap structure. */
-   this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Disco. */
-/* ------ */
-   if ( !strcmp( attrib, "disco" ) ) {
-      dval = astGetDisco( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* PcdCen(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "pcdcen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = astGetPcdCen( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* PcdCen. */
-/* ------- */
-   } else if ( !strcmp( attrib, "pcdcen" ) ) {
-      dval = astGetPcdCen( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitPcdMapVtab_(  AstPcdMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPcdMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a PcdMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     void astInitPcdMapVtab( AstPcdMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     PcdMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the PcdMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPcdMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearDisco = ClearDisco;
-   vtab->SetDisco = SetDisco;
-   vtab->GetDisco = GetDisco;
-   vtab->TestDisco = TestDisco;
-   vtab->ClearPcdCen = ClearPcdCen;
-   vtab->SetPcdCen = SetPcdCen;
-   vtab->GetPcdCen = GetPcdCen;
-   vtab->TestPcdCen = TestPcdCen;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-   object->Equal = Equal;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping->MapMerge = MapMerge;
-
-/* Declare the class dump function.*/
-   astSetDump( vtab, Dump, "PcdMap", "Apply pincushion distortion" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a PcdMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     PcdMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated PcdMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated PcdMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated PcdMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the PcdMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        PcdMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated PcdMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping **maplt;   /* New mappings list pointer */
-   AstMapping *map2;     /* First mapping to check */
-   AstMapping *newmap;   /* Pointer to replacement Mapping */
-   AstMapping *mc[2];    /* Copies of supplied Mappings to swap */
-   AstMapping *smc0;     /* Simplied Mapping */
-   AstMapping *smc1;     /* Simplied Mapping */
-   const char *class1;   /* Pointer to first Mapping class string */
-   const char *class2;   /* Pointer to second Mapping class string */
-   const char *nclass;   /* Pointer to neighbouring Mapping class */
-   int i1;               /* Index of first PcdMap to merge */
-   int i2;               /* Index of last PcdMap to merge */
-   int i;                /* Loop counter */
-   int ic[2];            /* Copies of supplied invert flags to swap */
-   int invert;           /* Should the inverted Mapping be used? */
-   int *invlt;           /* New invert flags list pointer */
-   int neighbour;        /* Index of Mapping with which to swap */
-   int nin;              /* Number of coordinates for PcdMap */
-   int nmapt;            /* No. of Mappings in list */
-   int nstep1;           /* No. of Mappings backwards to next mergable Mapping */
-   int nstep2;           /* No. of Mappings forward to next mergable Mapping */
-   int result;           /* Result value to return */
-   int swaphi;           /* Can PcdMap be swapped with higher neighbour? */
-   int swaplo;           /* Can PcdMap be swapped with lower neighbour? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   neighbour = 0;
-   i1 = 0;
-   i2 = 0;
-
-/* Get the number of axes for the PcdMap. */
-   nin = astGetNin( ( *map_list )[ where ] );
-
-/* First of all, see if the PcdMap can be replaced by a simpler Mapping,
-   without reference to the neighbouring Mappings in the list.           */
-/* ======================================================================*/
-/* If the distortion coefficient in the PcdMap is zero, the PcdMap can be
-   replaced by a UnitMap. */
-   if( EQUAL( astGetDisco( (AstPcdMap *) ( *map_list )[ where ] ), 0.0 ) ){
-
-/* Annul the PcdMap pointer in the list and replace it with a UnitMap
-   pointer, and indicate that the forward transformation of the returned
-   UnitMap should be used. */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) astUnitMap( 2, "", status );
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-         
-/* If the PcdMap itself could not be simplified, see if it can be merged
-   with the Mappings on either side of it in the list. */
-   } else {
-
-/* Store the classes of the neighbouring Mappings in the list. */
-       class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
-       class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* In series. */
-/* ========== */
-      if ( series ) {
-
-/* We first look to see if the PcdMap can be merged with one of its
-   neighbours, resulting in a reduction of one in the number of Mappings
-   in the list. A PcdMap can only merge directly with its own inverse, or
-   a UnitMap. */
-         if( class1 && CanMerge(  ( *map_list )[ where - 1 ], 
-                                  ( *map_list )[ where ],
-                                  ( *invert_list )[ where - 1 ], 
-                                  ( *invert_list )[ where ], status ) ){
-            nclass = class1;
-            i1 = where - 1;
-            i2 = where;
-
-         } else if( class2 && CanMerge(  ( *map_list )[ where ], 
-                                  ( *map_list )[ where + 1 ],
-                                  ( *invert_list )[ where ], 
-                                  ( *invert_list )[ where + 1 ], status ) ){
-            nclass = class2;
-            i1 = where;
-            i2 = where + 1;
-
-         } else {
-            nclass = NULL;
-         }
-
-/* If the PcdMap can merge with one of its neighbours, create the merged
-   Mapping. */
-         if( nclass ){
-
-/* If the neighbour is a PcdMap, it must be the inverse of the nominated
-   Mapping, and so they merge to form a UnitMap. */
-            if( !strcmp( nclass, "PcdMap" ) ){
-               newmap = (AstMapping *) astUnitMap( 2, "", status );
-               invert = 0;
-
-/* If the neighbour is a UnitMap, they merge to form a clone of the
-   nominated PcdMap. */
-            } else {
-               newmap = (AstMapping *) astClone( ( *map_list )[ where ] );
-               invert = ( *invert_list )[ where ];
-            }
-
-/* If succesfull... */
-            if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   Mapping. Also set the invert flag. */ 
-               (void) astAnnul( ( *map_list )[ i1 ] );
-               ( *map_list )[ i1 ] = newmap;
-               ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-               (void) astAnnul( ( *map_list )[ i2 ] );
-               for ( i = i2 + 1; i < *nmap; i++ ) {
-                  ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-                  ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-               }
-
-/* Clear the vacated element at the end. */
-               ( *map_list )[ *nmap - 1 ] = NULL;
-               ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-               ( *nmap )--;
-               result = i1;
-
-            }
-
-/* If the PcdMap could not merge directly with either of its neighbours,
-   we consider whether it would be worthwhile to swap the PcdMap with
-   either of its neighbours. This can only be done for certain classes
-   of Mapping (ZoomMaps & some PermMaps), and will usually require both 
-   Mappings to be modified (unless they are commutative). The advantage of 
-   swapping the order of the Mappings is that it may result in the PcdMap 
-   being adjacent to a Mapping with which it can merge directly on the next
-   invocation of this function, thus reducing the number of Mappings
-   in the list. */
-         } else {
-
-/* Set a flag if we could swap the PcdMap with its higher neighbour. */
-            if( where + 1 < *nmap ){
-               swaphi = CanSwap(  ( *map_list )[ where ], 
-                                  ( *map_list )[ where + 1 ],
-                                  ( *invert_list )[ where ], 
-                                  ( *invert_list )[ where + 1 ], status );
-            } else {
-               swaphi = 0;
-            }
-
-/* If so, step through each of the Mappings which follow the PcdMap, 
-   looking for a Mapping with which the PcdMap could merge directly. Stop 
-   when such a Mapping is found, or if a Mapping is found with which the
-   PcdMap could definitely not swap. Note the number of Mappings which 
-   separate the PcdMap from the Mapping with which it could merge (if 
-   any). */
-            nstep2 = -1;
-            if( swaphi ){
-               for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we may be able to merge with this Mapping. If so, note the number 
-   of steps between the two Mappings and leave the loop. */
-                  nclass = astGetClass( ( *map_list )[ i2 ] );
-
-                  if( !strcmp( nclass, "UnitMap" ) ||
-                      !strcmp( nclass, "PcdMap" ) ){
-                     nstep2 = i2 - where - 1;
-                     break;
-                  }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop 
-   with -1 for the number of steps to indicate that no merging is possible. 
-   PcdMaps can swap with ZoomMaps and some PermMaps. */
-                  if( strcmp( nclass, "ZoomMap" ) &&
-                      strcmp( nclass, "PermMap" ) ) {
-                     break;
-                  }
-
-               }
-
-            }
-
-/* Do the same working forward from the PcdMap towards the start of the map
-   list. */
-            if( where > 0 ){
-               swaplo = CanSwap(  ( *map_list )[ where - 1 ], 
-                                  ( *map_list )[ where ],
-                                  ( *invert_list )[ where - 1 ], 
-                                  ( *invert_list )[ where ], status );
-            } else {
-               swaplo = 0;
-            }
-
-            nstep1 = -1;
-            if( swaplo ){
-               for( i1 = where - 1; i1 >= 0; i1-- ){
-
-                  nclass = astGetClass( ( *map_list )[ i1 ] );
-
-                  if( !strcmp( nclass, "UnitMap" ) ||
-                      !strcmp( nclass, "PcdMap" ) ){
-                     nstep1 = where - 1 - i1;
-                     break;
-                  }
-
-                  if( strcmp( nclass, "ZoomMap" ) &&
-                      strcmp( nclass, "PermMap" ) ) {
-                     break;
-                  }
-
-               }
-
-            }
-
-/* Choose which neighbour to swap with so that the PcdMap moves towards the
-   nearest Mapping with which it can merge. */
-            if( nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ){
-               nclass = class1;
-               i1 = where - 1;
-               i2 = where;
-               neighbour = i1;
-            } else if( nstep2 != -1 ){
-               nclass = class2;
-               i1 = where;
-               i2 = where + 1;
-               neighbour = i2;
-            } else {
-               nclass = NULL;
-            }
-
-/* If there is a target Mapping in the list with which the PcdMap could 
-   merge, replace the supplied Mappings with swapped Mappings to bring a
-   PcdMap closer to the target Mapping. */
-            if( nclass ){
-
-/* It is possible that the neighbouring Mapping with which we are about to 
-   swap could also merge with the target Mapping. When the neighbouring
-   Mapping is reconsidered it may well swap the pair back to put itself nearer 
-   the target Mapping. We need to be careful not to end up in an infinite loop 
-   in which the pair of neighbouring Mappings are constantly swapped backwards 
-   and forwards as each attempts to put itself closer to the target Mapping.
-   To prevent this, we only swap the pair of Mappings if the neighbouring
-   Mapping could not itself merge with the target Mapping. Check to see
-   if this is the case by attempting to merge the neighbouring Mapping with
-   the target Mapping. */
-               map2 = astClone( (*map_list)[ neighbour ] );
-               nmapt = *nmap - neighbour;
-               maplt = *map_list + neighbour;
-               invlt = *invert_list + neighbour;
-               result = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
-               map2 = astAnnul( map2 );
-
-/* If the above call produced a change in the  Mapping list, return the
-   remaining number of mappings.. */
-               if( result != -1 ){
-                  *nmap = nmapt + neighbour;
-
-/* Otherwise, if there was no change in the mapping list, swap the
-   Mappings. */
-               } else {
-
-                  if( !strcmp( nclass, "ZoomMap" ) ){
-                     PcdZoom( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
-                  } else if( !strcmp( nclass, "PermMap" ) ){
-                     PcdPerm( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-                  }
-
-/* Store the index of the first modified Mapping. */
-                  result = i1;
-               }
-
-/* If there is no Mapping available for merging, it may still be
-   advantageous to swap with a neighbour because the swapped Mapping may
-   be simpler than the original Mappings. */
-            } else if( swaphi || swaplo ) {
-
-/* Try swapping with each possible neighbour in turn. */
-               for( i = 0; i < 2; i++ ) {
-
-/*  Set up the class and pointers for the mappings to be swapped, first
-    the lower neighbour, then the upper neighbour. */
-                  if( i == 0 && swaplo ){
-                     nclass = class1;
-                     i1 = where - 1;
-                     i2 = where;
-
-                  } else if( i == 1 && swaphi ){
-                     nclass = class2;
-                     i1 = where;
-                     i2 = where + 1;
-
-                  } else {
-                     nclass = NULL;
-                  }
-
-/* If we have a Mapping to swap with... */
-                  if( nclass ) {
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change 
-   the supplied values. */
-                     mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
-                     mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
-                     ic[ 0 ] = ( (*invert_list) + i1 )[0];
-                     ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
-                     if( !strcmp( nclass, "ZoomMap" ) ){
-                        PcdZoom( mc, ic, where - i1, status );
-                     } else if( !strcmp( nclass, "PermMap" ) ){
-                        PcdPerm( mc, ic, where - i1, status );
-                     }
-
-/* If neither of the swapped Mappings can be simplified further, then there
-   is no point in swapping the Mappings, so just annul the map copies. */
-                     smc0 = astSimplify( mc[0] );
-                     smc1 = astSimplify( mc[1] );
-
-                     if( astGetClass( smc0 ) == astGetClass( mc[0] ) &&
-                         astGetClass( smc1 ) == astGetClass( mc[1] ) ) {
-      
-                        mc[ 0 ] = (AstMapping *) astAnnul( mc[ 0 ] );
-                        mc[ 1 ] = (AstMapping *) astAnnul( mc[ 1 ] );
-
-/* If one or both of the swapped Mappings could be simplified, then annul
-   the supplied Mappings and return the swapped mappings, storing the index 
-   of the first modified Mapping. */
-                     } else {
-                        (void ) astAnnul( ( (*map_list) + i1 )[0] );
-                        (void ) astAnnul( ( (*map_list) + i1 )[1] );
-      
-                        ( (*map_list) + i1 )[0] = mc[ 0 ];
-                        ( (*map_list) + i1 )[1] = mc[ 1 ];
-      
-                        ( (*invert_list) + i1 )[0] = ic[ 0 ];
-                        ( (*invert_list) + i1 )[1] = ic[ 1 ];
-      
-                        result = i1;
-                        break;
-                     }
-
-/* Annul the simplied Mappings */
-                     smc0 = astAnnul( smc0 );
-                     smc1 = astAnnul( smc1 );
-
-                  }
-               }
-            }
-         }
-
-/* In parallel. */
-/* ============ */
-/* PcdMaps cannot combine in parallel with any other Mappings. */
-      } 
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-                     double **consts, int *status ){
-/*
-*  Name:
-*     PermGet
-
-*  Purpose:
-*     Get the axis permutation and constants array for a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-*                   double **const, int *status )
-
-*  Class Membership:
-*     PcdMap member function 
-
-*  Description:
-*     This function returns axis permutation and constants arrays which can
-*     be used to create a PermMap which is equivalent to the supplied PermMap.
-
-*  Parameters:
-*     map
-*        The PermMap.
-*     outperm
-*        An address at which to return a popinter to an array of ints
-*        holding the output axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     inperm
-*        An address at which to return a popinter to an array of ints
-*        holding the input axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     consts
-*        An address at which to return a popinter to an array of doubles
-*        holding the constants array. The array should be released using 
-*        astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  NULL pointers are returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* PointSet holding input positions for PermMap */
-   AstPointSet *pset2;       /* PointSet holding output positions for PermMap */
-   double **ptr1;            /* Pointer to pset1 data */
-   double **ptr2;            /* Pointer to pset2 data */
-   double *cnst;             /* Pointer to constants array */
-   double cn;                /* Potential new constant value */
-   double ip;                /* Potential output axis index */
-   double op;                /* Potential input axis index */
-   int *inprm;               /* Pointer to input axis permutation array */
-   int *outprm;              /* Pointer to output axis permutation array */
-   int i;                    /* Axis count */
-   int nc;                   /* Number of constants stored so far */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
-   if( outperm ) *outperm = NULL;
-   if( inperm ) *inperm = NULL;
-   if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
-   if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   nc = 0;
-
-/* Get the number of input and output axes for the supplied PermMap. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
-   outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
-   inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
-   cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
-   *outperm = outprm;
-   *inperm = inprm;
-   *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
-   input and output positions with the PermMap. */
-   pset1 = astPointSet( 2, nin, "", status );
-   pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
-   first position is used to enumerate the axes, and the second is used to 
-   check for constant axis values. */
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ){
-      for( i = 0; i < nin; i++ ){
-         ptr1[ i ][ 0 ] = ( double ) i;
-         ptr1[ i ][ 1 ] = -1.0;
-      }
-   }
-
-/* Use the PermMap to transform these positions in the forward direction. */
-   (void) astTransform( map, pset1, 1, pset2 );
-
-/* Look at the mapped positions to determine the output axis permutation
-   array. */
-   ptr2 = astGetPoints( pset2 );
-   if( astOK ){
-
-/* No constant axis valeus found yet. */
-      nc = 0;
-
-/* Do each output axis. */
-      for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
-   of the appropriate input axis will be in the mapped first position. */
-         op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of 
-   mapping the two different input axis values will be the same. */
-         cn = ptr2[ i ][ 1 ];
-         if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
-   store the index of the constant in the output axis permutation array. */
-            cnst[ nc ] = cn;
-            outprm[ i ] = -( nc + 1 );
-            nc++;
-
-/* If the output axis values are different, then the output axis value 
-   must be copied from the input axis value. */
-         } else {
-            outprm[ i ] = (int) ( op + 0.5 );
-         }
-      }
-   }
-    
-/* Now do the same thing to determine the input permutation array. */
-   if( astOK ){
-      for( i = 0; i < nout; i++ ){
-         ptr2[ i ][ 0 ] = ( double ) i;
-         ptr2[ i ][ 1 ] = -1.0;
-      }
-   }
-
-   (void) astTransform( map, pset2, 0, pset1 );
-
-   if( astOK ){
-
-      for( i = 0; i < nin; i++ ){
-
-         ip = ptr1[ i ][ 0 ];
-         cn = ptr1[ i ][ 1 ];
-         if( ip == cn ) {
-
-            cnst[ nc ] = cn;
-            inprm[ i ] = -( nc + 1 );
-            nc++;
-
-         } else {
-            inprm[ i ] = (int) ( ip + 0.5 );
-         }
-      }
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
-   if( !astOK ) {
-      *outperm = (int *) astFree( (void *) *outperm );
-      *inperm = (int *) astFree( (void *) *inperm );
-      *consts = (double *) astFree( (void *) *consts );
-   }
-
-/* Return. */
-   return;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a PcdMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     PcdMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a PcdMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the PcdMap.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPcdMap *this;              /* Pointer to the PcdMap structure */
-   double dval;                  /* Double attribute value */
-   int axis;                     /* Index for the axis */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PcdMap structure. */
-   this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Disco. */
-/* ------ */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "disco= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetDisco( this, dval );
-
-/* PcdCen(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "pcdcen(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetPcdCen( this, axis - 1, dval );
-
-/* PcdCen. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "pcdcen= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetPcdCen( this, 0, dval );
-      astSetPcdCen( this, 1, dval );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a PcdMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PcdMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a PcdMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the PcdMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPcdMap *this;              /* Pointer to the PcdMap structure */
-   int axis;                     /* Axis number */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the PcdMap structure. */
-   this = (AstPcdMap *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Disco. */
-/* ------ */
-   if ( !strcmp( attrib, "disco" ) ) {
-      result = astTestDisco( this );
-
-/* PcdCen. */
-/* ------- */
-   } else if ( !strcmp( attrib, "pcdcen" ) ) {
-      result = astTestPcdCen( this, 0 );
-
-/* PcdCen(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "pcdcen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestPcdCen( this, axis - 1 );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a PcdMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     PcdMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a PcdMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to map them into the 
-*     required window.
-
-*  Parameters:
-*     this
-*        Pointer to the PcdMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the PcdMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstPcdMap *map;               /* Pointer to PcdMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *axin_0;               /* Pointer to next input axis 0 value */
-   double *axin_1;               /* Pointer to next input axis 1 value */
-   double *axout_0;              /* Pointer to next output axis 0 value */
-   double *axout_1;              /* Pointer to next output axis 1 value */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-   double dx;                    /* Undistorted X increment from centre  */
-   double dy;                    /* Undistorted Y increment from centre */
-   double dxp;                   /* Distorted X increment from centre  */
-   double dyp;                   /* Distorted Y increment from centre */
-   double disco;                 /* Distortion coefficient */
-   double cen0;                  /* Centre of distortion on axis 0 */
-   double cen1;                  /* Centre of distortion on axis 1 */
-   double cr2;                   /* Constant */
-   double a;                     /* Constant */
-   double cr2a2;                 /* Constant */
-   double f;                     /* Expansion factor */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the PcdMap. */
-   map = (AstPcdMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Get the distortion coefficient and centre. */
-   disco = astGetDisco( map );
-   cen0 = astGetPcdCen( map, 0 );
-   cen1 = astGetPcdCen( map, 1 );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if( astOK ){
-
-/* Store pointers to the first input and output values on both axes. */
-      axin_0 = ptr_in[ 0 ];
-      axin_1 = ptr_in[ 1 ];
-      axout_0 = ptr_out[ 0 ];
-      axout_1 = ptr_out[ 1 ];
-
-/* First deal with forward transformations. */
-      if( forward ){
-
-         for( point = 0; point < npoint; point++ ){
-            if( *axin_0 != AST__BAD && *axin_1 != AST__BAD ){
-               dx = ( *axin_0 - cen0 );
-               dy = ( *axin_1 - cen1 );
-               f = 1.0 + disco*( dx*dx + dy*dy );
-               dxp = dx*f;
-               dyp = dy*f;
-               *(axout_0++) = dxp + cen0;
-               *(axout_1++) = dyp + cen1;
-
-            } else {
-               *(axout_0++) = AST__BAD;
-               *(axout_1++) = AST__BAD;
-            }
-            axin_0++;
-            axin_1++;
-         }
-
-/* Now deal with inverse transformations. */
-      } else {
-
-         for( point = 0; point < npoint; point++ ){
-            if( *axin_0 != AST__BAD && *axin_1 != AST__BAD ){
-               dxp = ( *axin_0 - cen0 );
-               dyp = ( *axin_1 - cen1 );
-
-               cr2 = disco*( dxp*dxp + dyp*dyp );
-               a = ( 2.0*cr2 + 1.0 )/( 3.0*cr2 + 1.0 );
-               cr2a2 = cr2*a*a;
-               f = ( 2.0*cr2a2*a + 1.0 )/( 3.0*cr2a2 + 1.0 );
-
-               dx = dxp*f;
-               dy = dyp*f;
-
-/* The above approximate inverse is taken from SLA_UNPCD. If more accuracy 
-c   is needed, the following code can be uncommented to iterate to a better
-c   solution. 
-c
-c               fl = 1.0 + disco*( dx*dx + dy*dy );
-c               dx = dxp/fl;
-c               dy = dyp/fl;
-c
-c               df = fabs( fl );
-c               while( df > fabs( fl*1.0E-6 ) ){
-c                  f = 1.0 + disco*( dx*dx + dy*dy );
-c                  df = fabs( f - fl );
-c                  fl = f;
-c
-c                  dx = dxp/f;
-c                  dy = dyp/f;
-c               }
-*/
-               *(axout_0++) = dx + cen0;
-               *(axout_1++) = dy + cen1;
-
-            } else {
-               *(axout_0++) = AST__BAD;
-               *(axout_1++) = AST__BAD;
-            }
-            axin_0++;
-            axin_1++;
-         }
-
-      }
-
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void PcdZoom( AstMapping **maps, int *inverts, int ipc, int *status ){
-/*
-*  Name:
-*     PcdZoom 
-
-*  Purpose:
-*     Swap a PcdMap and a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     void PcdZoom( AstMapping **maps, int *inverts, int ipc, int *status )
-
-*  Class Membership:
-*     PcdMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a PcdMap and a
-*     ZoomMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a PcdMap and a ZoomMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     ipc
-*        The index within "maps" of the PcdMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPcdMap *pm2;               /* Pointer to the returned PcdMap */
-   AstPcdMap *pm;                /* Pointer to the supplied PcdMap */
-   AstZoomMap *zm2;              /* Pointer to the returned ZoomMap */
-   AstZoomMap *zm;               /* Pointer to the supplied ZoomMap */
-   double cen[2];                /* New distortion centre */
-   double disc;                  /* Distortion coeff. for returned PcdMap */
-   double disco;                 /* Distortion coeff. for supplied PcdMap */
-   double xcen;                  /* Axis 0 centre for supplied PcdMap */
-   double ycen;                  /* Axis 1 centre for supplied PcdMap */
-   double zoom;                  /* Zoom factor for supplied ZoomMap */
-   int old_pinv;                 /* Invert value for the supplied PcdMap */
-   int old_zinv;                 /* Invert value for the supplied ZoomMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store pointers to the supplied PcdMap and the ZoomMap. */
-   pm = (AstPcdMap *) maps[ ipc ];
-   zm = (AstZoomMap *) maps[ 1 - ipc ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
-   supplied values. */
-   old_pinv = astGetInvert( pm );
-   astSetInvert( pm, inverts[ ipc ] );
-
-   old_zinv = astGetInvert( zm );
-   astSetInvert( zm, inverts[ 1 - ipc ] );
-
-/* Get the zoom factor from the ZoomMap. */
-   zoom = astGetZoom( zm );
-
-/* Get the distortion coefficient from the PcdMap. */
-   disco = astGetDisco( pm );
-
-/* Get the distortion centre from the PcdMap. */
-   xcen = astGetPcdCen( pm, 0 );
-   ycen = astGetPcdCen( pm, 1 );
-
-/* Re-instate the original value of the Invert attributes of the supplied 
-   Mappings. */
-   astSetInvert( pm, old_pinv );
-   astSetInvert( zm, old_zinv );
-
-/* Create the returned ZoomMap. */
-   zm2 = astZoomMap( 2, zoom, "", status );
-
-/* Find the attributes of the returned PcdMap. If the PCD map is applied 
-   first... */
-   if( ipc == 0 ) {
-      cen[ 0 ] = xcen*zoom;
-      cen[ 1 ] = ycen*zoom;
-      disc = disco/(zoom*zoom);
-
-/* If the PCD map is applied second... */
-   } else {
-      cen[ 0 ] = xcen/zoom;
-      cen[ 1 ] = ycen/zoom;
-      disc = disco*zoom*zoom;
-   }
-
-/* Create the returned PcdMap. */
-   pm2 = astPcdMap( disc, cen, "", status );
-   if( inverts[ ipc ] ) astInvert( pm2 );
-
-/* Replace the supplied Mappings with the ones created above, swapping the
-   order. */
-   if( astOK ){
-      (void) astAnnul( pm );
-      (void) astAnnul( zm );
-
-      maps[ 1 - ipc ] = (AstMapping *) pm2;
-      inverts[ 1 - ipc  ] = inverts[ ipc ];
-
-      maps[ ipc ] = (AstMapping *) zm2;
-      inverts[ ipc ] = 0;
-
-   }
-
-/* Return. */
-   return;
-}
-
-static void PcdPerm( AstMapping **maps, int *inverts, int ipc, int *status ){
-/*
-*  Name:
-*     PcdPerm
-
-*  Purpose:
-*     Swap a PcdMap and a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     void PcdPerm( AstMapping **maps, int *inverts, int ipc, int *status )
-
-*  Class Membership:
-*     PcdMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a PcdMap and a
-*     PermMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a PcdMap and a PermMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     ipc
-*        The index within "maps" of the PcdMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  It should have been checked previously that the PermMap simply
-*     swaps axes 0 and 1. This is the only sort of PermMap which can be
-*     used here.
-
-*/
-
-   AstPermMap *rm;               /* Pointer to the supplied PermMap */
-   AstPermMap *rm2;              /* Pointer to the returned PermMap */
-   AstPcdMap *pm;                /* Pointer to the supplied PcdMap */
-   AstPcdMap *pm2;               /* Pointer to the returned PcdMap */
-   double cen[2];                /* Centre for new PcdMap */
-   double disco;                 /* Distortion coeff. for supplied PcdMap */
-   double xcen;                  /* Axis 0 centre for supplied PcdMap */
-   double ycen;                  /* Axis 1 centre for supplied PcdMap */
-   int old_rinv;                 /* Invert value for the supplied PermMap */
-   int old_pinv;                 /* Invert value for the supplied PcdMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store pointers to the supplied PcdMap and the PermMap. */
-   pm = (AstPcdMap *) maps[ ipc ];
-   rm = (AstPermMap *) maps[ 1 - ipc ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
-   supplied values. */
-   old_pinv = astGetInvert( pm );
-   astSetInvert( pm, inverts[ ipc ] );
-
-   old_rinv = astGetInvert( rm );
-   astSetInvert( rm, inverts[ 1 - ipc ] );
-
-/* Get the distortion coefficient from the PcdMap. */
-   disco = astGetDisco( pm );
-
-/* Get the distortion centre from the PcdMap. */
-   xcen = astGetPcdCen( pm, 0 );
-   ycen = astGetPcdCen( pm, 1 );
-
-/* Re-instate the original value of the Invert attributes of the supplied 
-   Mappings. */
-   astSetInvert( pm, old_pinv );
-   astSetInvert( rm, old_rinv );
-
-/* Create the returned PermMap (unchanged). */
-   rm2 = astClone( rm );
-
-/* Create the returned PcdMap. */
-   cen[ 0 ] = ycen;
-   cen[ 1 ] = xcen;
-   pm2 = astPcdMap( disco, cen, "", status );
-   if( inverts[ ipc ] ) astInvert( pm2 );
-
-/* Replace the supplied Mappings with the ones created above, swapping the
-   order. */
-   if( astOK ){
-      (void) astAnnul( pm );
-      (void) astAnnul( rm );
-
-      old_pinv = inverts[ ipc ];
-
-      maps[ ipc ] = (AstMapping *) rm2;
-      inverts[ ipc ] = inverts[ 1 - ipc ];
-
-      maps[ 1 - ipc ] = (AstMapping *) pm2;
-      inverts[ 1 - ipc  ] = old_pinv; 
-   }
-
-/* Return. */
-   return;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-/*
-*att++
-*  Name:
-*     Disco
-
-*  Purpose:
-*     PcdMap pincushion/barrel distortion coefficient. 
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute specifies the pincushion/barrel distortion coefficient
-*     used by a PcdMap. This coefficient is set when the PcdMap is created,
-*     but may later be modified. If the attribute is cleared, its default
-*     value is zero, which gives no distortion. For pincushion distortion,
-*     the value should be positive. For barrel distortion, it should be
-*     negative.
-*
-*     Note that the forward transformation of a PcdMap applies the 
-*     distortion specified by this attribute and the inverse 
-*     transformation removes this distortion. If the PcdMap is inverted 
-c     (e.g. using astInvert), then the forward transformation will 
-f     (e.g. using AST_INVERT), then the forward transformation will 
-*     remove the distortion and the inverse transformation will apply
-*     it. The distortion itself will still be given by the same value of
-*     Disco.
-
-*  Applicability:
-*     PcdMap
-*        All PcdMaps have this attribute.
-
-*att--
-*/
-/* This ia a double value with a value of AST__BAD when undefined but
-   yielding a default of 0.0. */
-astMAKE_CLEAR(PcdMap,Disco,disco,AST__BAD)
-astMAKE_GET(PcdMap,Disco,double,0.0,( ( this->disco == AST__BAD ) ?
-                                      0.0 : this->disco ))
-astMAKE_SET(PcdMap,Disco,double,disco,value)
-astMAKE_TEST(PcdMap,Disco,( this->disco != AST__BAD ))
-
-
-/*
-*att++
-*  Name:
-*     PcdCen(axis)
-
-*  Purpose:
-*     Centre coordinates of pincushion/barrel distortion.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the centre of the pincushion/barrel
-*     distortion implemented by a PcdMap. It takes a separate value for
-*     each axis of the PcdMap so that, for instance, the settings
-*     "PcdCen(1)=345.0,PcdCen(2)=-104.4" specify that the pincushion
-*     distortion is centred at positions of 345.0 and -104.4 on axes 1 and 2
-*     respectively. This attribute is set when a PcdMap is created, but may
-*     later be modified. If the attribute is cleared, the default value for
-*     both axes is zero.
-
-*  Applicability:
-*     PcdMap
-*        All PcdMaps have this attribute.
-
-*  Notes:
-*     - If no axis is specified, (e.g. "PcdCen" instead of 
-*     "PcdCen(2)"), then a "set" or "clear" operation will affect 
-*     the attribute value of both axes, while a "get" or "test" 
-*     operation will use just the PcdCen(1) value.
-*att--
-*/
-/* The centre of the distortion. AST__BAD is stored if no value has been 
-   supplied, resulting in default values of zero being used. */
-MAKE_CLEAR(PcdCen,pcdcen,AST__BAD,2)
-MAKE_SET(PcdCen,double,pcdcen,value,2)
-MAKE_TEST(PcdCen,( this->pcdcen[axis] != AST__BAD ),2)
-MAKE_GET(PcdCen,double,0.0,(( this->pcdcen[axis] == AST__BAD ) ? 
-                              0.0 : this->pcdcen[axis] ),2)
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for PcdMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the PcdMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the PcdMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPcdMap *this;              /* Pointer to the PcdMap structure */
-   double dval;                  /* Attribute value */
-   int set;                      /* Is a value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PcdMap structure. */
-   this = (AstPcdMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   PcdMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* PcdCen(0). */
-/* ---------- */
-   set = TestPcdCen( this, 0, status );
-   dval = set ? GetPcdCen( this, 0, status ) : astGetPcdCen( this, 0 );
-   astWriteDouble( channel, "PcdCn0", set, 1, dval, "Distortion centre on first axis" );
-
-/* PcdCen(1). */
-/* ---------- */
-   set = TestPcdCen( this, 1, status );
-   dval = set ? GetPcdCen( this, 1, status ) : astGetPcdCen( this, 1 );
-   astWriteDouble( channel, "PcdCn1", set, 1, dval, "Distortion centre on second axis" );
-
-/* Disco. */
-/* ------ */
-   set = TestDisco( this, status );
-   dval = set ? GetDisco( this, status ) : astGetDisco( this );
-   astWriteDouble( channel, "Disco", set, 1, dval, "Distortion coefficient" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPcdMap and astCheckPcdMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PcdMap,Mapping)
-astMAKE_CHECK(PcdMap)
-
-AstPcdMap *astPcdMap_( double disco, const double pcdcen[2],
-                       const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astPcdMap
-f     AST_PCDMAP
-
-*  Purpose:
-*     Create a PcdMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "pcdmap.h"
-c     AstPcdMap *astPcdMap( double disco, const double pcdcen[2],
-c                           const char *options, ... )
-f     RESULT = AST_PCDMAP( DISCO, PCDCEN, OPTIONS, STATUS )
-
-*  Class Membership:
-*     PcdMap constructor.
-
-*  Description:
-*     This function creates a new PcdMap and optionally initialises its
-*     attributes.
-*
-*     A PcdMap is a non-linear Mapping which transforms 2-dimensional
-*     positions to correct for the radial distortion introduced by some
-*     cameras and telescopes. This can take the form either of pincushion
-*     or barrel distortion, and is characterized by a single distortion
-*     coefficient.
-*
-*     A PcdMap is specified by giving this distortion coefficient and the
-*     coordinates of the centre of the radial distortion. The forward
-*     transformation of a PcdMap applies the distortion:
-*
-*        RD = R * ( 1 + C * R * R )
-*
-*     where R is the undistorted radial distance from the distortion 
-*     centre (specified by attribute PcdCen), RD is the radial distance 
-*     from the same centre in the presence of distortion, and C is the 
-*     distortion coefficient (given by attribute Disco).
-*
-*     The inverse transformation of a PcdMap removes the distortion
-*     produced by the forward transformation. The expression used to derive 
-*     R from RD is an approximate inverse of the expression above, obtained
-*     from two iterations of the Newton-Raphson method. The mismatch between
-*     the forward and inverse expressions is negligible for astrometric
-*     applications (to reach 1 milliarcsec at the edge of the Anglo-Australian
-*     Telescope triplet or a Schmidt field would require field diameters of
-*     2.4 and 42 degrees respectively).
-*
-c     If a PcdMap is inverted (e.g. using astInvert) then the roles of the
-f     If a PcdMap is inverted (e.g. using AST_INVERT) then the roles of the
-*     forward and inverse transformations are reversed; the forward
-*     transformation will remove the distortion, and the inverse
-*     transformation will apply it.
-
-*  Parameters:
-c     disco
-f     DISCO = DOUBLE PRECISION (Given)
-*        The distortion coefficient. Negative values give barrel
-*        distortion, positive values give pincushion distortion, and 
-*        zero gives no distortion.
-c     pcdcen
-f     PCDCEN( 2 ) = DOUBLE PRECISION (Given)
-c        A 2-element array containing the coordinates of the centre of the
-f        An array containing the coordinates of the centre of the
-*        distortion.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new PcdMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new PcdMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPcdMap()
-f     AST_PCDMAP = INTEGER
-*        A pointer to the new PcdMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPcdMap *new;              /* Pointer to new PcdMap */
-   va_list args;                /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the PcdMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPcdMap( NULL, sizeof( AstPcdMap ), !class_init, &class_vtab,
-                        "PcdMap", disco, pcdcen );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PcdMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PcdMap. */
-   return new;
-}
-
-AstPcdMap *astPcdMapId_( double disco, const double pcdcen[2],
-                         const char *options, ... ) {
-/*
-*  Name:
-*     astPcdMapId_
-
-*  Purpose:
-*     Create a PcdMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     AstPcdMap *astPcdMapId_( double disco, const double pcdcen[2],
-*                              const char *options, ... ) 
-
-*  Class Membership:
-*     PcdMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astPcdMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astPcdMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astPcdMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astPcdMap_.
-
-*  Returned Value:
-*     The ID value associated with the new PcdMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPcdMap *new;              /* Pointer to new PcdMap */
-   va_list args;                /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the PcdMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPcdMap( NULL, sizeof( AstPcdMap ), !class_init, &class_vtab,
-                        "PcdMap", disco, pcdcen );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PcdMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new PcdMap. */
-   return astMakeId( new );
-}
-
-AstPcdMap *astInitPcdMap_( void *mem, size_t size, int init,
-                           AstPcdMapVtab *vtab, const char *name,
-                           double disco, const double pcdcen[2], int *status ){
-/*
-*+
-*  Name:
-*     astInitPcdMap
-
-*  Purpose:
-*     Initialise a PcdMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     AstPcdMap *astInitPcdMap( void *mem, size_t size, int init,
-*                               AstPcdMapVtab *vtab, const char *name,
-*                               double disco, const double pcdcen[2] )
-
-*  Class Membership:
-*     PcdMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new PcdMap object. It allocates memory (if necessary) to accommodate
-*     the PcdMap plus any additional data associated with the derived class.
-*     It then initialises a PcdMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a PcdMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the PcdMap is to be initialised.
-*        This must be of sufficient size to accommodate the PcdMap data
-*        (sizeof(PcdMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the PcdMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the PcdMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the PcdMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new PcdMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     disco
-*        Distortion coefficient.
-*     pcdcen
-*        Distortion centre.
-
-*  Returned Value:
-*     A pointer to the new PcdMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPcdMap *new;              /* Pointer to new PcdMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPcdMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the PcdMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstPcdMap *) astInitMapping( mem, size, 0,
-                                       (AstMappingVtab *) vtab, name,
-                                       2, 2, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the PcdMap data. */
-/* ---------------------------- */
-/* Store the shift and scale for each axis. */
-      new->pcdcen[0] = pcdcen[0];
-      new->pcdcen[1] = pcdcen[1];
-      new->disco = disco;
-  
-/* If an error occurred, clean up by deleting the new PcdMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PcdMap. */
-   return new;
-}
-
-AstPcdMap *astLoadPcdMap_( void *mem, size_t size,
-                           AstPcdMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPcdMap
-
-*  Purpose:
-*     Load a PcdMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pcdmap.h"
-*     AstPcdMap *astLoadPcdMap( void *mem, size_t size,
-*                               AstPcdMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     PcdMap loader.
-
-*  Description:
-*     This function is provided to load a new PcdMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     PcdMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a PcdMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the PcdMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        PcdMap data (sizeof(PcdMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the PcdMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the PcdMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPcdMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new PcdMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the PcdMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "PcdMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new PcdMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPcdMap *new;              /* Pointer to the new PcdMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this PcdMap. In this case the
-   PcdMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPcdMap );
-      vtab = &class_vtab;
-      name = "PcdMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPcdMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built PcdMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "PcdMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* PcdCen(0). */
-/* ---------- */
-      new->pcdcen[0] = astReadDouble( channel, "pcdcn0", AST__BAD );
-      if ( TestPcdCen( new, 0, status ) ) SetPcdCen( new, 0, new->pcdcen[0], status );
-
-/* PcdCen(1). */
-/* ---------- */
-      new->pcdcen[1] = astReadDouble( channel, "pcdcn1", AST__BAD );
-      if ( TestPcdCen( new, 1, status ) ) SetPcdCen( new, 1, new->pcdcen[1], status );
-
-/* Disco. */
-/* ------ */
-      new->disco = astReadDouble( channel, "disco", AST__BAD );
-      if ( TestDisco( new, status ) ) SetDisco( new, new->disco, status );
-
-/* If an error occurred, clean up by deleting the new PcdMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new PcdMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/pcdmap.h b/ast-5.3-1/pcdmap.h
deleted file mode 100644
index 4d71301..0000000
--- a/ast-5.3-1/pcdmap.h
+++ /dev/null
@@ -1,357 +0,0 @@
-#if !defined( PCDMAP_INCLUDED ) /* Include this file only once */
-#define PCDMAP_INCLUDED
-/*
-*+
-*  Name:
-*     pcdmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the PcdMap class.
-
-*  Invocation:
-*     #include "pcdmap.h"
-
-*  Description:
-*     This include file defines the interface to the PcdMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The PcdMap class implements Mappings which perform pincushion
-*     distortion.
-
-*  Inheritance:
-*     The PcdMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Disco (double)
-*        This attribute holds the PcdMap distortion coefficient used by 
-*        the forward transformation. This coefficient is set when a 
-*        PcdMap is created, but may later be modified. The default value 
-*        is zero, which gives no distortion. For pincushion distortion, 
-*        the supplied value should be positive. For barrel distortion, it 
-*        should be negative.
-*        
-*        Note that the forward transformation of a PcdMap applies the 
-*        distortion corresponding to this attribute, and the inverse 
-*        transformation removes this distortion. If a PcdMap is inverted 
-*        (e.g. by using astInvert), then the forward transformation will 
-*        remove the distortion and the inverse transformation will apply
-*        it. The distortion itself will still be given by the same value of
-*        Disco.
-*     PcdCen(axis)
-*        This attribute specifies the centre of a pincushion distortion. 
-*        It takes a separate value for each axis of the PcdMap so that, for 
-*        instance, the settings "PcdCen(1)=345.0,PcdCen(2)=-104.4" specify
-*        that the pincushion distortion is centred at values of 345.0 and
-*        -104.4 on axes 1 and 2 of the PcdMap. The default for both axes is
-*        zero.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a PcdMap.
-*        astGetAttrib
-*           Get an attribute value for a PcdMap.
-*        astSetAttrib
-*           Set an attribute value for a PcdMap.
-*        astTestAttrib
-*           Test if an attribute value has been set for a PcdMap.
-*        astTransform
-*           Apply a PcdMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearDisco
-*           Clear the Disco attribute value for a PcdMap.
-*        astGetDisco
-*           Get the Disco attribute value for a PcdMap.
-*        astSetDisco
-*           Set the Disco attribute value for a PcdMap.
-*        astTestDisco
-*           Test if a Disco attribute value has been set for a PcdMap.
-*        astClearPcdCen
-*           Clear the PcdCen attribute value for a PcdMap.
-*        astGetPcdCen
-*           Get the PcdCen attribute value for a PcdMap.
-*        astSetPcdCen
-*           Set the PcdCen attribute value for a PcdMap.
-*        astTestPcdCen
-*           Test if a PcdCen attribute value has been set for a PcdMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAPcdMap
-*           Test class membership.
-*        astPcdMap
-*           Create a PcdMap.
-*
-*     Protected:
-*        astCheckPcdMap
-*           Validate class membership.
-*        astInitPcdMap
-*           Initialise a PcdMap.
-*        astInitPcdMapVtab
-*           Initialise the virtual function table for the PcdMap class.
-*        astLoadPcdMap
-*           Load a PcdMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstPcdMap
-*           PcdMap object type.
-*
-*     Protected:
-*        AstPcdMapVtab
-*           PcdMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     18-MAY-1999 (DSB):
-*        Original version.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitPcdMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PcdMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPcdMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double disco;                 /* Distortion coefficient */
-   double pcdcen[2];             /* Distortion centre */
-
-} AstPcdMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPcdMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double (*GetDisco)( AstPcdMap *, int * );
-   int (* TestDisco)( AstPcdMap *, int * );
-   void (* ClearDisco)( AstPcdMap *, int * );
-   void (* SetDisco)( AstPcdMap *, double, int * );
-   double (*GetPcdCen)( AstPcdMap *, int, int * );
-   int (* TestPcdCen)( AstPcdMap *, int, int * );
-   void (* ClearPcdCen)( AstPcdMap *, int, int * );
-   void (* SetPcdCen)( AstPcdMap *, int, double, int * );
-} AstPcdMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstPcdMapGlobals {
-
-/* Define the thread-specific globals. */ 
-   char GetAttrib_Buff[ 101 ];
-   AstPcdMapVtab Class_Vtab;
-   int Class_Init;
-} AstPcdMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PcdMap)          /* Check class membership */
-astPROTO_ISA(PcdMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPcdMap *astPcdMap_( double, const double [2], const char *, int *, ...);
-#else
-AstPcdMap *astPcdMapId_( double, const double [2], const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPcdMap *astInitPcdMap_( void *, size_t, int, AstPcdMapVtab *,
-                           const char *, double, const double [2], int * );
-
-/* Vtab initialiser. */
-void astInitPcdMapVtab_( AstPcdMapVtab *, const char *, int * );
-
-/* Loader. */
-AstPcdMap *astLoadPcdMap_( void *, size_t, AstPcdMapVtab *,
-                           const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitPcdMapGlobals_( AstPcdMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-double astGetDisco_( AstPcdMap *, int * );
-int astTestDisco_( AstPcdMap *, int * );
-void astClearDisco_( AstPcdMap *, int * );
-void astSetDisco_( AstPcdMap *, double, int * );
-double astGetPcdCen_( AstPcdMap *, int, int * );
-int astTestPcdCen_( AstPcdMap *, int, int * );
-void astClearPcdCen_( AstPcdMap *, int, int * );
-void astSetPcdCen_( AstPcdMap *, int, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPcdMap(this) astINVOKE_CHECK(PcdMap,this,0)
-#define astVerifyPcdMap(this) astINVOKE_CHECK(PcdMap,this,1)
-
-/* Test class membership. */
-#define astIsAPcdMap(this) astINVOKE_ISA(PcdMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPcdMap astINVOKE(F,astPcdMap_)
-#else
-#define astPcdMap astINVOKE(F,astPcdMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPcdMap(mem,size,init,vtab,name,disco,pcdcen) \
-astINVOKE(O,astInitPcdMap_(mem,size,init,vtab,name,disco,pcdcen,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPcdMapVtab(vtab,name) astINVOKE(V,astInitPcdMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPcdMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPcdMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPcdMap to validate PcdMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astClearDisco(this) astINVOKE(V,astClearDisco_(astCheckPcdMap(this),STATUS_PTR))
-#define astGetDisco(this) astINVOKE(V,astGetDisco_(astCheckPcdMap(this),STATUS_PTR))
-#define astSetDisco(this,value) \
-astINVOKE(V,astSetDisco_(astCheckPcdMap(this),value,STATUS_PTR))
-#define astTestDisco(this) astINVOKE(V,astTestDisco_(astCheckPcdMap(this),STATUS_PTR))
-
-#define astClearPcdCen(this,axis) \
-astINVOKE(V,astClearPcdCen_(astCheckPcdMap(this),axis,STATUS_PTR))
-#define astGetPcdCen(this,axis) \
-astINVOKE(V,astGetPcdCen_(astCheckPcdMap(this),axis,STATUS_PTR))
-#define astSetPcdCen(this,axis,value) \
-astINVOKE(V,astSetPcdCen_(astCheckPcdMap(this),axis,value,STATUS_PTR))
-#define astTestPcdCen(this,axis) \
-astINVOKE(V,astTestPcdCen_(astCheckPcdMap(this),axis,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/permmap.c b/ast-5.3-1/permmap.c
deleted file mode 100644
index 595931f..0000000
--- a/ast-5.3-1/permmap.c
+++ /dev/null
@@ -1,3021 +0,0 @@
-/*
-*class++
-*  Name:
-*     PermMap
-
-*  Purpose:
-*     Coordinate permutation Mapping.
-
-*  Constructor Function:
-c     astPermMap
-f     AST_PERMMAP
-
-*  Description:
-*     A PermMap is a Mapping which permutes the order of coordinates,
-*     and possibly also changes the number of coordinates, between its
-*     input and output.
-*
-*     In addition to permuting the coordinate order, a PermMap may
-*     also assign constant values to coordinates. This is useful when
-*     the number of coordinates is being increased as it allows fixed
-*     values to be assigned to any new ones.
-
-*  Inheritance:
-*     The PermMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The PermMap class does not define any new attributes beyond
-*     those which are applicable to all Mappings.
-
-*  Functions:
-c     The PermMap class does not define any new functions beyond those
-f     The PermMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     29-FEB-1996 (RFWS):
-*        Original version.
-*     26-SEP-1996 (RFWS):
-*        Added external interface and I/O facilities.
-*     3-JUN-1997 (RFWS):
-*        Over-ride the MapMerge method.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitPermMapVtab
-*        method.
-*     11-SEP-2003 (DSB):
-*        Added methods astGetInPerm and astGetOutPerm.
-*     2-NOV-2004 (DSB):
-*        Added method astGetConstants.
-*     14-MAR-2006 (DSB):
-*        Override astEqual.
-*     2-MAY-2007 (DSB):
-*        Change MapSplit so that it does not try to use the
-*        implementation from the parent Mapping class, since this 
-*        class can do a better job.
-*     11-SEP-2007 (DSB):
-*        In MapSplit, check that the permuted axis index is less than the 
-*        number of axes available. Use AST__BAD otherwise.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS PermMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PermMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PermMap,Class_Init)
-#define class_vtab astGLOBAL(PermMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPermMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPermMap *astPermMapId_( int, const int [], int, const int [], const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double *GetConstants( AstPermMap *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int *GetInPerm( AstPermMap *, int * );
-static int *GetOutPerm( AstPermMap *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int NullPerm( AstPermMap *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two PermMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     PermMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two PermMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a PermMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the PermMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPermMap *that;        
-   AstPermMap *this;        
-   int *that_inp;
-   int *that_outp;
-   int *this_inp;
-   int *this_outp;
-   int i;           
-   int nin;
-   int nout;
-   int p1;
-   int p2;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two PermMap structures. */
-   this = (AstPermMap *) this_object;
-   that = (AstPermMap *) that_object;
-
-/* Check the second object is a PermMap. We know the first is a
-   PermMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAPermMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNout( that ) == nout && astGetNin( that ) == nin ) {
-
-/* Assume the PermMaps are equivalent. */
-         result = 1;
-
-/* Get pointers to the effective inperm and outperm array for each PermMap. 
-   If the Invert flags of the two PermMaps are not equal, we swap the
-   arrays for the second PermMap in order to take account of the relative
-   inversion of the second PermMap. */
-         if( astGetInvert( this ) != astGetInvert( that ) ) {
-            this_inp = this->inperm;
-            this_outp = this->outperm;
-            that_inp = that->outperm;
-            that_outp = that->inperm;
-         } else {
-            this_inp = this->inperm;
-            this_outp = this->outperm;
-            that_inp = that->inperm;
-            that_outp = that->outperm;
-         }
-
-/* Loop round every PermMap input. */
-         for( i = 0; i < nin; i++ ) {
-
-/* See what is fed to this input by the inverse transformation. A zero or
-   positive integer "p" value indicates that the input is fed from the
-   output with the corresponding index. A negative integer "p" value means
-   the input is fed a constant value stored at index (-p-1) in the
-   associated constants array. */
-            p1 = this_inp ? this_inp[ i ] : i;
-            p2 = that_inp ? that_inp[ i ] : i;
-
-/* If the "p" values differ, we may have evidence that the PermMaps are
-   not equivalent. */
-            if( p1 != p2 ) {
-
-/* If either "p" value is zero or positive, then the PermMaps are
-   definitely different since input "i" is fed from differing outputs, or
-   one is fed from an input and the other is fed a constant. */
-               if( p1 >= 0 || p2 >= 0 ) {
-                  result = 0;
-                  break;
-
-/* If both "p" values are negative, then both inputs are fed a constant
-   value. The PermMaps differ if these constants differ. */
-               } else if( this->constant[ -p1 - 1 ] != 
-                          that->constant[ -p2 - 1 ] ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-
-/* If we have not yet discovered any evidence that the PermMaps differ,
-   go on to check each output in the same way that we have just checked the
-   inputs. */
-         if( result ) {
-            for( i = 0; i < nout; i++ ) {
-               p1 = this_outp ? this_outp[ i ] : i;
-               p2 = that_outp ? that_outp[ i ] : i;
-               if( p1 != p2 ) {
-                  if( p1 >= 0 || p2 >= 0 ) {
-                     result = 0;
-                     break;
-                  } else if( this->constant[ -p1 - 1 ] != 
-                             that->constant[ -p2 - 1 ] ) {
-                     result = 0;
-                     break;
-                  }
-               }
-            }
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static double *GetConstants( AstPermMap *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetConstants
-
-*  Purpose:
-*     Return a pointer to the constants array of a PermMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     double *astGetConstants( AstPermMap *this )
-
-*  Class Membership:
-*     PermMap method 
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated array 
-*     holding a copy of the constants array supplied when the PermMap was 
-*     created.
-*
-*     Negative values in the arrays returned by the astGetInPerm and
-*     astGetOutPerm methods can be used as indices into the constants
-*     array returned by this method, if they are first negated and then
-*     decrement by one. Thus an inperm value of -3 refers to element 2 of 
-*     the constants array.
-
-*  Parameters:
-*     this
-*        Pointer to the PermMap.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array holding a copy of the 
-*     constants array. The pointer should be freed using astFree when it is
-*     no longer needed. NULL will be returned if the PermMap has no
-*     constants. 
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   double *result;                /* Pointer to the returned array */
-
-/* Initialise the returned result. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Allocate memory and put a copy of the InPerm array in it. */
-   result = (double *) astStore( NULL, this->constant, astSizeOf( this->constant ) );
-
-/* Return the result. */
-   return result;
-}
-
-static int *GetInPerm( AstPermMap *this, int *status ){
-/*
-*  Name:
-*     GetInPerm
-
-*  Purpose:
-*     Return a pointer to the InPerm array of a PermMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     int *astGetInPerm( AstPermMap *this, int *status )
-
-*  Class Membership:
-*     PermMap method 
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated array 
-*     holding a copy of the InPerm array supplied when thre PermMap was 
-*     created.
-
-*  Parameters:
-*     this
-*        Pointer to the PermMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array holding a copy of the 
-*     InPerm array. The pointer should be freed using astFree when it is
-*     no longer needed. The number of elements in the array will be given
-*     by the value of the Nin attribute. The value in element "i" is the
-*     zero-based index of the output axis which provides values for input
-*     "i" when the inverse transformation is used. If the value in element 
-*     "i" is less than zero, then input "i" is fed a constant value. This
-*     constant value is stored in the "constants" array (see astGetConstants)
-*     at an index equal to the absolute value of inperm[i], minus 1. Thus
-*     if element 3 of the array returned by this function has value -2,
-*     then input axis 3 is fed the value held in constants[1]. If the
-*     value of element "i" of the returned inperm array is greater than
-*     or equal to the number of output axes, then input "i" will be fed 
-*     the constant AST__BAD.
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int i;                      /* Loop count */
-   int nin;                    /* Number of inputs. */
-   int *result;                /* Pointer to the returned array */
-
-/* Initialise the returned result. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If no inperm array is stored, every input is derived from the
-   corresponding output. Therefore, return an array holding 0 to Nin-1. */
-   if( !this->inperm ) {
-      nin = astGetNin( this );
-      result = (int *) astMalloc( sizeof( int ) * (size_t) nin );
-      if( astOK ) for( i = 0; i < nin; i++ ) result[ i ] = i;
-
-/* Otherwise, allocate memoy and put a copy of the InPerm array in it. */
-   } else {
-      result = (int *) astStore( NULL, this->inperm, 
-                              sizeof( int ) * (size_t) astGetNin( this ) );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int *GetOutPerm( AstPermMap *this, int *status ){
-/*
-*  Name:
-*     GetOutPerm
-
-*  Purpose:
-*     Return a pointer to the OutPerm array of a PermMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     int *astGetOutPerm( AstPermMap *this, int *status )
-
-*  Class Membership:
-*     PermMap method 
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated array 
-*     holding a copy of the OutPerm array supplied when thre PermMap was 
-*     created.
-
-*  Parameters:
-*     this
-*        Pointer to the PermMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array holding a copy of the 
-*     OutPerm array. The pointer should be freed using astFree when it is
-*     no longer needed. The number of elements in the array will be given
-*     by the value of the Nout attribute. The value in element "i" is the
-*     zero-based index of the input axis which provides values for output
-*     "i" when the forward transformation is used. If the value in element 
-*     "i" is less than zero, then output "i" is fed a constant value. This
-*     constant value is stored in the "constants" array (see astGetConstants)
-*     at an index equal to the absolute value of outperm[i], minus 1. Thus
-*     if element 3 of the array returned by this function has value -2,
-*     then output axis 3 is fed the value held in constants[1]. If the 
-*     value of element "i" of the returned outperm array is greater than
-*     or equal to the number of input axes, then output "i" will be fed 
-*     the constant AST__BAD.
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int i;                      /* Loop count */
-   int nout;                   /* Number of outputs. */
-   int *result;                /* Pointer to the returned array */
-
-/* Initialise the returned result. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If no outperm array is stored, every output is derived from the
-   corresponding input. Therefore, return an array holding 0 to Nout-1. */
-   if( !this->outperm ) {
-      nout = astGetNout( this );
-      result = (int *) astMalloc( sizeof( int ) * (size_t) nout );
-      if( astOK ) for( i = 0; i < nout; i++ ) result[ i ] = i;
-
-/* Otherwise, allocate memory and put a copy of the OutPerm array in it. */
-   } else {
-      result = (int *) astStore( NULL, this->outperm, 
-                              sizeof( int ) * (size_t) astGetNout( this ) );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitPermMapVtab_(  AstPermMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPermMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a PermMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     void astInitPermMapVtab( AstPermMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     PermMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the PermMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPermMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->GetConstants = GetConstants;
-   vtab->GetInPerm = GetInPerm;
-   vtab->GetOutPerm = GetOutPerm;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->Rate = Rate;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "PermMap", "Coordinate permutation" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     PermMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated PermMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated PermMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated PermMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the PermMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        PermMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated PermMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;              /* Pointer to Mapping */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   AstPermMap *permmap;          /* Pointer to PermMap */
-   const char *class;            /* Pointer to Mapping class string */
-   double *con;                  /* Pointer to constants array */
-   double constant;              /* Constant value */
-   int *inperm;                  /* Pointer to "inperm" permutation array */
-   int *newperm;                 /* Pointer to new permutation array */
-   int *outperm;                 /* Pointer to "outperm" permutation array */
-   int *perm;                    /* Pointer to individual permutation array */
-   int back;                     /* Considering inverse transformation? */
-   int coord;                    /* Loop counter for coordinates */
-   int icon;                     /* Loop counter for constants */
-   int iend;                     /* Loop ending value */
-   int imap1;                    /* Index of first Mapping */
-   int imap2;                    /* Index of last Mapping */
-   int imap;                     /* Loop counter for Mappings */
-   int inc;                      /* Loop increment */
-   int invert;                   /* Invert attribute value */
-   int istart;                   /* Loop starting value */
-   int ncon;                     /* Number of constants */
-   int ncoord_in;                /* Effective number of input coordinates */
-   int ncoord_out;               /* Effective number of output coordinates */
-   int ngone;                    /* Number of Mappings eliminated */
-   int nin;                      /* Total number of input coordinates */
-   int ninsum;                   /* Accumulated count of input coordinates */
-   int nout;                     /* Total number of output coordinates */
-   int noutsum;                  /* Accumulated count of output coordinates */
-   int nperm;                    /* Number of permutation array elements */
-   int p;                        /* Permuted coordinate index */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Mapping(s) simplified? */
-   int store_in;                 /* Need to store "inperm" array contents? */
-   int store_out;                /* Need to store "outperm" array contents? */
-   int unit;                     /* Replacement Mapping is a UnitMap? */
-
-/* Initialise the returned result. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   con = NULL;
-   inperm = outperm = NULL;
-   ncon = 0;
-   permmap = NULL;
-
-/* In series. */
-/* ---------- */
-/* Handle the case where the Mappings are connected in series. */
-   if ( series ) {
-
-/* Search adjacent lower-numbered Mappings until one is found which is
-   not a PermMap or a UnitMap. */
-      imap1 = where;
-      while ( ( imap1 - 1 ) >= 0 ) {
-         class = astGetClass( ( *map_list )[ imap1 - 1 ] );
-         if ( astOK ) {
-            if ( strcmp( class, "PermMap" ) &&
-                 strcmp( class, "UnitMap" ) ) break;
-            imap1--;
-         }
-      }
-
-/* Similarly search adjacent higher-numbered Mappings. */
-      imap2 = where;
-      while ( ( imap2 + 1 ) < *nmap ) {
-         class = astGetClass( ( *map_list )[ imap2 + 1 ] );
-         if ( astOK ) {
-            if ( strcmp( class, "PermMap" ) &&
-                 strcmp( class, "UnitMap" ) ) break;
-            imap2++;
-         }
-      }
-
-/* Obtain a pointer to the first Mapping found and determine if it is
-   to be applied with its Invert attribute set. */
-      map = ( *map_list )[ imap1 ];
-      invert = ( *invert_list )[ imap1 ];
-
-/* Use this first Mapping (allowing for how its Invert attribute is
-   currently set) to determine the number of input coordinates that
-   the simplified Mapping should have. */
-      if ( astGetInvert( map ) ) {
-         nin = invert ? astGetNin( map ) : astGetNout( map );
-      } else {
-         nin = invert ? astGetNout( map ) : astGetNin( map );
-      }
-
-/* Repeat this process for the last Mapping found, to determine the
-   number of output coordinates for the simplified Mapping. */
-      map = ( *map_list )[ imap2 ];
-      invert = ( *invert_list )[ imap2 ];
-      if ( astGetInvert( map ) ) {
-         nout = invert ? astGetNout( map ) : astGetNin( map );
-      } else {
-         nout = invert ? astGetNin( map ) : astGetNout( map );
-      }
-
-/* Allocate memory to hold input and output permutation arrays for the
-   simplified Mapping, together with a list of constants. */
-      inperm = astMalloc( sizeof( int ) * (size_t) nin );
-      outperm = astMalloc( sizeof( int ) * (size_t) nout );
-      con = astMalloc( sizeof( double ) * (size_t) ( nin + nout ) );
-      if ( astOK ) {
-
-/* Initialise the number of constants. */
-         ncon = 0;
-
-/* Loop twice, to calculate the forward and inverse (backward)
-   simplified permutation arrays in turn. */
-         for ( back = 0; back <= 1; back++ ) {
-
-/* Obtain a pointer to the appropriate (forward/inverse) permutation
-   array that we wish to fill, and obtain the number of elements it
-   will contain. Initialise the array contents to represent a null
-   permutation.*/
-            newperm = back ? outperm : inperm;
-            nperm = back ? nout : nin;
-            for ( coord = 0; coord < nperm; coord++ ) newperm[ coord ] = coord;
-
-/* Set up limits to scan through the list of Mappings being merged in
-   either the forward or reverse order, as required. */
-            istart = back ? imap2 : imap1;
-            iend = back ? imap1 - 1 : imap2 + 1;
-            inc = back ? -1 : 1;
-
-/* Loop through the Mappings, obtaining a pointer to each, together
-   with the value to be used for its Invert attribute. Invert this
-   attribute value if calculating the overall inverse (backward)
-   permutation array. */
-            for ( imap = istart; imap != iend; imap += inc ) {
-               map = ( *map_list )[ imap ];
-               invert = ( *invert_list )[ imap ];
-               if ( back ) invert = !invert;
-
-/* Determine the class to which the Mapping belongs. */
-               class = astGetClass( map );
-               if ( astOK ) {
-
-/* If it is a PermMap, obtain a pointer to the PermMap structure and
-   hence to the relevant permutation array.  Otherwise (if it is a
-   UnitMap), leave the permutation array pointer NULL, which indicates
-   a null permutation. */
-                  perm = NULL;
-                  if ( !strcmp( class, "PermMap" ) ) {
-                     permmap = (AstPermMap *) map;
-                     perm = invert ? permmap->outperm : permmap->inperm;
-                  }
-
-/* Obtain the effective number of output coordinates associated with
-   this individual Mapping (when transforming points in the direction
-   to which this permutation array applies). */
-                  if ( astGetInvert( map ) ) {
-                     ncoord_out = invert ? astGetNout( map ) :
-                                           astGetNin( map );
-                  } else {
-                     ncoord_out = invert ? astGetNin( map ) :
-                                           astGetNout( map );
-                  }
-
-/* Loop through the elements of the simplified permutation array to
-   accumulate the effects of the current individual Mapping. */
-                  if ( astOK ) {
-                     for ( coord = 0; coord < nperm; coord++ ) {
-
-/* Find the effective input coordinate for the current Mapping from
-   the permutation accumulated so far, and check this is not
-   negative. If it is, the accumulated permutation refers to a "bad"
-   coordinate value or a constant, so the current Mapping makes no
-   further difference. */
-                        p = newperm[ coord ];
-                        if ( p >= 0 ) {
-
-/* Otherwise, obtain the permuting effect of the current Mapping,
-   allowing for the possibility of its permutation array being NULL
-   (implying a null permutation). */
-                           p = perm ? perm[ p ] : p;
-
-/* If the permuted index refers to a valid (effective) output
-   coordinate for the individual Mapping, then accumulate its effect
-   in the overall permutation array. */
-                           if ( ( p >= 0 ) && ( p < ncoord_out ) ) {
-                              newperm[ coord ] = p;
-
-/* Otherwise (this can only occur if the individual Mapping is a
-   PermMap), determine whether it refers to a "bad" coordinate value
-   or a constant. If the former, extract the constant's value,
-   otherwise use a constant value of AST__BAD. */
-                           } else {
-                              if ( ( p < 0 ) && permmap->constant ) {
-                                 constant = permmap->constant[ (-p) - 1 ];
-                              } else {
-                                 constant = AST__BAD;
-                              }
-
-/* If the result (however reached) is a coordinate value of AST__BAD,
-   then mark the accumulated permutation array with a value of -1 to
-   indicate this. */
-                              if ( constant == AST__BAD ) {
-                                 newperm[ coord ] = -1;
-
-/* Otherwise, search the array of constants to see if this one has
-   been encountered before. If not, append the new constant to the
-   list. */
-                              } else {
-                                 for ( icon = 0; icon < ncon; icon++ ) {
-                                    if ( con[ icon ] == constant ) break;
-                                 }
-                                 if ( icon == ncon ) con[ ncon++ ] = constant;
-
-/* Store a (negative) reference to the new constant in the accumulated
-   permutation array (note we use an extra offset of -1 here in
-   forming these references, so that the value -1 itself can be used
-   to indicate a "bad" coordinate value without an entry in the
-   constants array). */
-                                 newperm[ coord ] = (-icon) - 2;
-                              }
-                           }
-                        }
-                     }
-                  }
-               }
-            }
-         }
-      }
-
-/* In parallel. */
-/* ------------ */
-/* Handle the case where the Mappings are connected in parallel. */
-   } else {
-
-/* Obtain a pointer to the nominated Mapping (which is a PermMap) and
-   determine if it is to be applied with its Invert attribute set. */
-      map = ( *map_list )[ where ];
-      invert = ( *invert_list )[ where ];
-
-/* Use this nominated Mapping to initialise the counts of input and
-   output coordinates for the simplified Mapping (allowing for how its
-   Invert attribute is currently set). */
-      if ( astGetInvert( map ) ) {
-         nin = invert ? astGetNin( map ) : astGetNout( map );
-         nout = invert ? astGetNout( map ) : astGetNin( map );
-      } else {
-         nin = invert ? astGetNout( map ) : astGetNin( map );
-         nout = invert ? astGetNin( map ) : astGetNout( map );
-      }
-
-/* Search adjacent lower-numbered Mappings until one is found which is
-   not a PermMap or a UnitMap. */
-      imap1 = where;
-      while ( astOK && ( ( imap1 - 1 ) >= 0 ) ) {
-         map = ( *map_list )[ imap1 - 1 ];
-         class = astGetClass( map );
-         if ( astOK ) {
-            if ( strcmp( class, "PermMap" ) &&
-                 strcmp( class, "UnitMap" ) ) break;
-
-/* For each Mapping found, obtain the effective numbers of input and
-   output coordinates (allowing for all the direction flags, as above)
-   and accumulate the total count of input and output coordinates for
-   the overall simplified Mapping. */
-            invert = ( *invert_list )[ imap1 - 1 ];
-            if ( astGetInvert( map ) ) {
-               nin += ( invert ? astGetNin( map ) : astGetNout( map ) );
-               nout += ( invert ? astGetNout( map ) : astGetNin( map ) );
-            } else {
-               nin += ( invert ? astGetNout( map ) : astGetNin( map ) );
-               nout += ( invert ? astGetNin( map ) : astGetNout( map ) );
-            }
-            imap1--;
-         }
-      }
-
-/* Similarly search higher-numbered Mappings and accumulate their
-   coordinate counts. */
-      imap2 = where;
-      while ( astOK && ( ( imap2 + 1 ) < *nmap ) ) {
-         map = ( *map_list )[ imap2 + 1 ];
-         class = astGetClass( map );
-         if ( astOK ) {
-            if ( strcmp( class, "PermMap" ) &&
-                 strcmp( class, "UnitMap" ) ) break;
-            invert = ( *invert_list )[ imap2 + 1 ];
-            if ( astGetInvert( map ) ) {
-               nin += ( invert ? astGetNin( map ) : astGetNout( map ) );
-               nout += ( invert ? astGetNout( map ) : astGetNin( map ) );
-            } else {
-               nin += ( invert ? astGetNout( map ) : astGetNin( map ) );
-               nout += ( invert ? astGetNin( map ) : astGetNout( map ) );
-            }
-            imap2++;
-         }
-      }
-
-/* Allocate memory to hold input and output permutation arrays for the
-   simplified Mapping, together with a list of constants. */
-      inperm = astMalloc( sizeof( int ) * (size_t) nin );
-      outperm = astMalloc( sizeof( int ) * (size_t) nout );
-      con = astMalloc( sizeof( double ) * (size_t) ( nin + nout ) );
-      if ( astOK ) {
-
-/* Initialise the number of constants. */
-         ncon = 0;
-
-/* Loop twice, to calculate the forward and inverse (backward)
-   simplified permutation arrays in turn. */
-         for ( back = 0; back <= 1; back++ ) {
-
-/* Obtain a pointer to the appropriate (forward/inverse) permutation
-   array that we wish to fill, and obtain the number of elements it
-   will contain. */
-            newperm = back ? outperm : inperm;
-            nperm = back ? nout : nin;
-
-/* Initialise counts of (effective) input and output coordinates. */
-            ninsum = noutsum = 0;
-
-/* Loop through the Mappings, obtaining a pointer to each, together
-   with the value to be used for its Invert attribute.  Invert this
-   attribute value if calculating the overall inverse (backward)
-   permutation array. */
-            for ( imap = imap1; imap <= imap2; imap++ ) {
-               map = ( *map_list )[ imap ];
-               invert = ( *invert_list )[ imap ];
-               if ( back ) invert = !invert;
-
-/* Determine the class to which the Mapping belongs. */
-               class = astGetClass( map );
-               if ( astOK ) {
-
-/* If it is a PermMap, obtain a pointer to the PermMap structure and
-   hence to the relevant permutation array.  Otherwise (if it is a
-   UnitMap), leave the permutation array pointer NULL, which indicates
-   a null permutation. */
-                  perm = NULL;
-                  if ( !strcmp( class, "PermMap" ) ) {
-                     permmap = (AstPermMap *) map;
-                     perm = invert ? permmap->outperm : permmap->inperm;
-                  }
-
-/* Obtain the effective number of input and output coordinates
-   associated with this individual Mapping (when transforming points
-   in the direction to which this permutation array applies). */
-                  if ( astGetInvert( map ) ) {
-                     ncoord_in = invert ? astGetNin( map ) :
-                                          astGetNout( map );
-                     ncoord_out = invert ? astGetNout( map ) :
-                                           astGetNin( map );
-                  } else {
-                     ncoord_in = invert ? astGetNout( map ) :
-                                          astGetNin( map );
-                     ncoord_out = invert ? astGetNin( map ) :
-                                           astGetNout( map );
-                  }
-
-/* Loop through the (effective) input coordinates of the current
-   individual Mapping to accumulate their effect on the overall
-   permutation array. */
-                  if ( astOK ) {
-                     for ( coord = 0; coord < ncoord_in; coord++ ) {
-
-/* Obtain the permuting effect of the current Mapping, allowing for
-   the possibility of its permutation array being NULL. */
-                        p = perm ? perm[ coord ] : coord;
-
-/* If the permuted index refers to a valid (effective) output
-   coordinate for the individual Mapping, then accumulate its effect
-   on the overall permutation array, allowing for the coordinate
-   numbering offset produced by any Mappings already accumulated. */
-                        if ( ( p >= 0 ) && ( p < ncoord_out ) ) {
-                           newperm[ coord + ninsum ] = p + noutsum;
-
-/* Otherwise (this can only occur if the individual Mapping is a
-   PermMap), determine whether it refers to a "bad" coordinate value
-   or a constant. If the former, extract the constant's value,
-   otherwise use a constant value of AST__BAD. */
-                        } else {
-                           if ( ( p < 0 ) && permmap->constant ) {
-                              constant = permmap->constant[ (-p) - 1 ];
-                           } else {
-                              constant = AST__BAD;
-                           }
-
-/* If the result (however reached) is a coordinate value of AST__BAD,
-   then mark the accumulated permutation array with a value of -1 to
-   indicate this. */
-                           if ( constant == AST__BAD ) {
-                              newperm[ coord + ninsum ] = -1;
-
-/* Otherwise, search the array of constants to see if this one has
-   been encountered before. If not, append the new constant to the
-   list. */
-                           } else {
-                              int icon;
-                              for ( icon = 0; icon < ncon; icon++ ) {
-                                 if ( con[ icon ] == constant ) break;
-                              }
-                              if ( icon == ncon ) con[ ncon++ ] = constant;
-
-/* Store a (negative) reference to the new constant in the accumulated
-   permutation array (note we use an extra offset of -1 here in
-   forming these references, so that the value -1 itself can be used
-   to indicate a "bad" coordinate value without an entry in the
-   constants array). */
-                              newperm[ coord + ninsum ] = (-icon) - 2;
-                           }
-                        }
-                     }
-                  }
-
-/* Accumulate the counts of (effective) input and output coordinates
-   for each individual Mapping. */
-                  ninsum += ncoord_in;
-                  noutsum += ncoord_out;
-               }
-            }
-         }
-      }
-   }
-
-/* Inspect each element of the accumulated "inperm" array to determine
-   if it needs to be stored by the replacement PermMap. */
-   if ( astOK ) {
-      store_in = 0;
-      for ( coord = 0; coord < nin; coord++ ) {
-
-/* It need not be stored if it produces a null permutation, where each
-   input coordinate takes its value from the corresponding output
-   coordinate (or where a "bad" value results if there is no
-   corresponding output coordinate). Note any deviation from this
-   pattern. */
-         if ( coord < nout ) {
-            store_in = store_in || ( inperm[ coord ] != coord );
-         } else {
-            store_in = store_in || ( inperm[ coord ] != -1 );
-         }
-
-/* Also convert permutation array values of -1 into non-existent
-   positive coordinate indices (indicating "bad" coordinate values)
-   and adjust (negative) references to constants by +1 to eliminate
-   the extra offset of -1 used temporarily above. This returns the
-   permutation array values to normal. */
-         if ( inperm[ coord ] < 0 ) {
-            if ( !++inperm[ coord ] ) inperm[ coord ] = nout;
-         }
-      }
-
-/* Similarly inspect the "outperm" array and return its values to
-   normal. */
-      store_out = 0;
-      for ( coord = 0; coord < nout; coord++ ) {
-         if ( coord < nin ) {
-            store_out = store_out || ( outperm[ coord ] != coord );
-         } else {
-            store_out = store_out || ( outperm[ coord ] != -1 );
-         }
-         if ( outperm[ coord ] < 0 ) {
-            if ( !++outperm[ coord ] ) outperm[ coord ] = nin;
-         }
-      }
-
-/* Determine how many adjacent Mappings can be eliminated by merging
-   them. */
-      ngone = imap2 - imap1;
-
-/* Determine if the resultant PermMap can be simplified still further
-   to become a UnitMap (a null Mapping). This will be the case if both
-   the forward and inverse coordinate permutations it produces are
-   null, and if the number of input and output coordinates are
-   equal. */
-      unit = !store_in && !store_out && ( nin == nout );
-
-/* We must now determine whether we have actually produced any
-   simplification. This is important, because if we indicate a
-   simplification when none has, in fact, been achieved, then this
-   function may get called over and over again without end. */
-
-/* Simplification is clearly evident if (a) Mappings have been
-   eliminated ("ngone" is non-zero), or (b) a PermMap has been reduced
-   to a UnitMap, or (c) where there was originally only one PermMap to
-   simplify, its invert flag was set (the replacement Mapping will
-   always have this flag cleared). */
-      simpler = ngone || unit || ( *invert_list )[ where ];
-
-/* If the above tests do not indicate simplification, then we can only
-   be considering the case where there was a single initial
-   PermMap. In this case we have also achieved simplification if
-   either the "inperm" or "outperm" array no longer needs storing
-   whereas previously it was stored. */
-      permmap = (AstPermMap *) ( *map_list )[ where ];
-      if ( !simpler ) {
-         simpler = ( !store_in && !NullPerm( permmap, 0, status ) ) ||
-                   ( !store_out && !NullPerm( permmap, 1, status ) );
-      }
-
-/* If we still haven't detected any simplification, then compare the
-   original and replacement "inperm" arrays (if present) in detail for
-   equality.  We declare simplification to have occurred if they
-   differ. */
-      if ( !simpler && store_in ) {
-         for ( coord = 0; coord < nin; coord++ ) {
-            simpler = ( inperm[ coord ] != permmap->inperm[ coord ] );
-            if ( simpler ) break;
-         }
-      }
-
-/* Similarly, if necessary, compare the original and replacement
-   "outperm" arrays. */
-      if ( !simpler && store_out ) {
-         for ( coord = 0; coord < nout; coord++ ) {
-            simpler = ( outperm[ coord ] != permmap->outperm[ coord ] );
-            if ( simpler ) break;
-         }
-      }
-
-/* Do nothing more unless there has been some simplification. */
-      if ( simpler ) {
-
-/* If the PermMaps (and UnitMaps) can be replaced by a UnitMap, then
-   create the replacement. */
-         if ( unit ) {
-            new = (AstMapping *) astUnitMap( nin, "", status );
-
-/* Otherwise, create a replacement PermMap, setting as many arguments
-   to NULL in the constructor function as can be achieved without
-   affecting the result. */
-         } else {
-            new = (AstMapping *) astPermMap( nin, store_in ? inperm : NULL,
-                                             nout, store_out ? outperm : NULL,
-                                             ncon ? con : NULL, "", status );
-         }
-
-/* Annul the pointers to all the Mappings that are being replaced. */
-         if ( astOK ) {
-            for ( imap = imap1; imap <= imap2; imap++ ) {
-               ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
-            }
-
-/* Insert the new pointer and the associated invert flag. */
-            ( *map_list )[ imap1 ] = new;
-            ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
-   in the arrays. */
-            for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-               ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
-               ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
-            }
-
-/* Clear the vacated elements at the end. */
-            for ( imap = *nmap - ngone; imap < *nmap; imap++ ) {
-               ( *map_list )[ imap ] = NULL;
-               ( *invert_list )[ imap ] = 0;
-            }
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap ) -= ngone;
-            result = imap1;
-         }
-      }
-   }
-
-/* Free the workspace arrays. */
-   inperm = astFree( inperm );
-   outperm = astFree( outperm );
-   con = astFree( con );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     PermMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing PermMap. This is only possible if the specified inputs
-*     correspond to some subset of the PermMap outputs. That is, there
-*     must exist a subset of the PermMap outputs for which each output
-*     depends only on the selected PermMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied PermMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the PermMap to be split (the PermMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied PermMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied PermMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied PermMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstPermMap *this;          /* Pointer to PermMap structure */
-   double *con;               /* Pointer to constants array */
-   int *inp;                  /* Input perm array to use with supplied PermMap */
-   int *inpm;                 /* Input perm array to use with new PermMap */
-   int *outp;                 /* Output perm array to use with supplied PermMap */
-   int *outpm;                /* Output perm array to use with new PermMap */
-   int *result;               /* Pointer to returned array */
-   int i;                     /* Loop count */
-   int iin;                   /* Mapping input index */
-   int iout;                  /* Output index */
-   int j;                     /* Loop count */
-   int nout;                  /* No. of outputs in the new PermMap */
-   int npin;                  /* No. of inputs in the supplied Mapping */
-   int npout;                 /* No. of outputs in the supplied Mapping */
-   int ok;                    /* Are input indices OK? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-
-/* Get a pointer to the PermMap structure. */
-   this = (AstPermMap *) this_map;
-
-/* Get the number of inputs and outputs in the supplied PermMap. */
-   npin = astGetNin( this );
-   npout = astGetNout( this );
-
-/* Check all input axis indices are valid. */
-   ok = 1;
-   for( i = 0; i < nin; i++ ) {
-      if( in[ i ] < 0 || in[ i ] >= npin ) {
-         ok = 0;
-         break;
-      }
-   }
-
-/* Get pointers to the input and output permutation arrays and constant
-   array taking account of whether the PermMap has been inverted. */
-   if( astGetInvert( this ) ) {
-      outp = this->inperm;
-      inp = this->outperm;
-   } else {
-      outp = this->outperm;
-      inp = this->inperm;
-   }
-   con = this->constant;
-
-/* Allocate memory for the inperm and outperm arrays of the returned
-   PermMap. Make these the largest they could possible need to be. */
-   inpm = astMalloc( sizeof( int )*(size_t) npin );
-   outpm = astMalloc( sizeof( int )*(size_t) npout );
-
-/* Allocate memory for the returned array of output indices. */
-   result = astMalloc( sizeof( int )*(size_t) npout );
-   if( astOK ) {
-
-/* Initialise number of outputs in returned PermMap. */
-      nout = 0;
-
-/* Loop round each output of the supplied PermMap. */
-      for( iout = 0; iout < npout; iout++ ) {
- 
-/* Is this output fed by one of the selected inputs? If so store the input 
-   index of the returned Mapping, which feeds this output and add this 
-   output index to the list of returned outputs. */
-         iin = outp ? outp[ iout ] : iout;
-         if( iin >= 0 && iin < npin ) {
-            for( i = 0; i < nin; i++ ) {
-               if( in[ i ] == iin ) {
-                  outpm[ nout ] = i;
-                  result[ nout ] = iout;
-                  nout++;
-                  break;
-               }
-            }
-         }
-      }
-
-/* We now need to set up the inperm array for the returned PermMap. This
-   ensures that the inverse transformation in the returned Mapping provides 
-   values for the selected inputs. Loop round all the selected inputs. */
-      for( i = 0; i < nin; i++ ) {
-         iin = in[ i ];
- 
-/* Is this input constant or fed by one of the selected outputs? If so store 
-   the output or constant index in the returned Mapping which feeds this 
-   input. */
-         ok = 0;
-         iout = inp ? inp[ iin ] : iin;
-         if( iout >= 0 && iout < npout ) {
-            for( j = 0; j < nout; j++ ) {
-               if( result[ j ] == iout ) {
-                  ok = 1;
-                  inpm[ i ] = j;
-                  break;
-               }
-            }
-         } else {
-            inpm[ i ] = iout;
-            ok = 1;
-         }
-
-/* If this input is fed by an output which has not been selected, then we
-   cannot produce the required Mapping. */
-         if( !ok ) break;
-      }
-
-/* If possible produce the returned PermMap. Otherwise, free the returned
-   array. */
-      if( ok ) {
-         *map = (AstMapping *) astPermMap( nin, inpm, nout, outpm, con, "", status );
-      } else {
-         result = astFree( result );
-      }
-
-/* Free other resources. */
-      inpm = astFree( inpm );
-      outpm = astFree( outpm );
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static int NullPerm( AstPermMap *this, int forward, int *status ){
-/*
-*  Name:
-*     NullPerm
-
-*  Purpose:
-*     See if a PermMap transformation represents a null axis permutation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     int NullPerm( AstPermMap *this, int forward, int *status )
-
-*  Class Membership:
-*     PermMap method 
-
-*  Description:
-*     This function returns a logical value indicating if the specified
-*     transformation of the supplied PermMap is a null (i.e. unit)
-*     transformation. 
-
-*  Parameters:
-*     this
-*        Pointer to the PermMap.
-*     forward
-*        Check the forward transformation? Otherise, check the inverse
-*        transformation.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the specified transformation is a null axis permutation.
-*     Zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int i;                     /* Coordinate index */
-   int nin;                   /* Number of Mapping inputs */
-   int nout;                  /* Number of Mapping outputs */
-   int result;                /* Returned value */
-
-/* Initialise the returned result. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* First check the forward transformation, given by the outperm array. */
-   if( forward ) { 
-
-/* If no outperm array is stored, every output is derived from the
-   corresponding input. Therefore, return 1 indicating a null axis 
-   permutation. */
-      if( !this->outperm ) {
-         result = 1;
-
-/* Otherwise, check that every element in the outperm array indicates
-   that the output is derived from the input with the saem index. */
-      } else {
-         result = 1;
-         nout = astGetNout( this );
-         for( i = 0; i < nout; i++ ) {
-            if( this->outperm[ i ] != i ) {
-               result = 0;
-               break;
-            }
-         }
-      }
-
-/* Now check the inverse transformation, given by the inperm array. */
-   } else {
-
-/* If no inperm array is stored, every input is derived from the
-   corresponding output. Therefore, return 1 indicating a null axis 
-   permutation. */
-      if( !this->inperm ) {
-         result = 1;
-
-/* Otherwise, check that every element in the inperm array indicates
-   that the input is derived from the output with the same index. */
-      } else {
-         result = 1;
-         nin = astGetNin( this );
-         for( i = 0; i < nin; i++ ) {
-            if( this->inperm[ i ] != i ) {
-               result = 0;
-               break;
-            }
-         }
-      }
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     PermMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   AstPermMap *map;
-   int *outperm;
-   int *inperm;
-   int result;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the PermMap structure. */
-   map = (AstPermMap *) this;
-
-/* Obtain a pointer to the appropriate output coordinate permutation array, 
-   according to whether the PermMap has been inverted. If the specified 
-   output is derived from the specified input then the rate is unity. 
-   Otherwise it is zero. */
-   outperm = astGetInvert( this ) ? map->inperm : map->outperm;
-   if( outperm ) {
-      result = ( ax2 == outperm[ ax1 ] ) ? 1.0 : 0.0;
-
-   } else {
-      inperm = astGetInvert( this ) ? map->outperm : map->inperm;
-      result = ( inperm[ ax2 ] == ax1 ) ? 1.0 : 0.0;
-   }
-
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *map, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a PermMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     AstPointSet *Transform( AstMapping *map, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     PermMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a PermMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required coordinate
-*     permutation.
-
-*  Parameters:
-*     map
-*        Pointer to the PermMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the PermMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstPermMap *this;             /* Pointer to PermMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int ncoord_out;               /* Number of coordinates per output point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-   int *perm;                    /* Pointer to permutation array */
-   double constant;              /* Constant coordinate value */
-   int p;                        /* Permuted coordinate index */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the PermMap. */
-   this = (AstPermMap *) map;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( map, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   permutation needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   and output PointSets and obtain pointers for accessing the input and output
-   coordinate values. */
-   ncoord_in = astGetNcoord( in );
-   ncoord_out = astGetNcoord( result );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
-   to the direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( this ) ) forward = !forward;
-
-/* Perform coordinate permutation. */
-/* ------------------------------- */
-   if ( astOK ) {
-
-/* Obtain a pointer to the appropriate coordinate permutation array, according
-   to the direction of transformation required. */
-      perm = forward ? this->outperm : this->inperm;
-
-/* Loop to generate values for each output coordinate. */
-      for ( coord = 0; coord < ncoord_out; coord++ ) {
-
-/* If the permutation array is not NULL, use it to look up which input
-   coordinate to use. Otherwise, use the corresponding input coordinate. */
-         p = perm ? perm[ coord ] : coord;
-
-/* If a valid input coordinate has been identified, simply copy the required
-   coordinate values from input to output. */
-         if ( ( p >= 0 ) && ( p < ncoord_in ) ) {
-            (void) memcpy( ptr_out[ coord ], ptr_in[ p ],
-                           sizeof( double ) * (size_t) npoint );
-
-/* If the permuted coordinate index is negative, use it to index the "constant"
-   array to obtain a constant value to assign. If this array is NULL, use
-   AST__BAD as the constant. */
-	 } else if ( p < 0 ) {
-            constant = this->constant ? this->constant[ (-p) - 1 ] : AST__BAD;
-
-/* Assign the constant value to the output coordinate for all points. */
-            for ( point = 0; point < npoint; point++ ) {
-               ptr_out[ coord ][ point ] = constant;
-	    }
-
-/* In all other cases, simply assign the value AST__BAD to the output
-   coordinate for all points. */
-	 } else {
-            for ( point = 0; point < npoint; point++ ) {
-               ptr_out[ coord ][ point ] = AST__BAD;
-	    }
-	 }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for PermMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for PermMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstPermMap *in;               /* Pointer to input PermMap */
-   AstPermMap *out;              /* Pointer to output PermMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PermMaps. */
-   in = (AstPermMap *) objin;
-   out = (AstPermMap *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output PermMap. */
-   out->inperm = NULL;
-   out->outperm = NULL;
-   out->constant = NULL;
-
-/* For each input array which is not NULL, make a copy in allocated memory,
-   storing a pointer to it in the output PermMap structure. */
-   if ( in->inperm ) out->inperm = astStore( NULL, in->inperm,
-                                             astSizeOf( in->inperm ) );
-   if ( in->outperm ) out->outperm = astStore( NULL, in->outperm,
-                                               astSizeOf( in->outperm ) );
-   if ( in->constant ) out->constant = astStore( NULL, in->constant,
-                                                 astSizeOf( in->constant ) );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
-   if ( !astOK ) {
-      out->inperm = astFree( out->inperm );
-      out->outperm = astFree( out->outperm );
-      out->constant = astFree( out->constant );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for PermMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for PermMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPermMap *this;             /* Pointer to PermMap */
-
-/* Obtain a pointer to the PermMap structure. */
-   this = (AstPermMap *) obj;
-
-/* Free all memory allocated by the PermMap. */
-   this->inperm = astFree( this->inperm );
-   this->outperm = astFree( this->outperm );
-   this->constant = astFree( this->constant );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for PermMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the PermMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the PermMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150          /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPermMap *this;             /* Pointer to the PermMap structure */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment strings */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword strings */
-   int coord;                    /* Loop counter for coordinates */
-   int iconst;                   /* Loop counter for constants */
-   int invert;                   /* Invert attribute value */
-   int ival;                     /* Integer value */
-   int nconst;                   /* Number of constants */
-   int nin;                      /* Number of input coordinates */
-   int nout;                     /* Number of output coordinates */
-   int set;                      /* Value is "set"? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PermMap structure. */
-   this = (AstPermMap *) this_object;
-
-/* Determine if the PermMap is inverted and obtain the "true" number
-   of input and output coordinates by un-doing the effects of any
-   inversion. */
-   invert = astGetInvert( this );
-   nin = !invert ? astGetNin( this ) : astGetNout( this );
-   nout = !invert ? astGetNout( this ) : astGetNin( this );
-
-/* Initialise the count of constants in use. */
-   nconst = 0;
-
-/* Write out values representing the instance variables for the
-   PermMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* "outperm" array contents. */
-/* ------------------------- */
-/* Write the boolean "OutCpy" value to indicate if output coordinates
-   are obtained simply by copying corresponding input
-   coordinates. This will be the case if "this->outperm" is NULL. */
-   ival = this->outperm ? 0 : 1;
-   set = ( ival != 0 );
-   astWriteInt( channel, "OutCpy", set, 0, ival,
-                ival ? "Output coordinates = input coordinates" :
-                       "Output coordinates specified individually" );
-
-/* If output coordinates are specified individually, create a keyword
-   for each element of the "outperm" array. */
-   if ( this->outperm ) {
-      for ( coord = 0; coord < nout; coord++ ) {
-         (void) sprintf( key, "Out%d", coord + 1 );
-
-/* Obtain the array value. If it refers to a coordinate that does not
-   exist, change the value to zero (indicating a "bad" value for this
-   coordinate). Create an appropriate comment. */
-         ival = this->outperm[ coord ];
-         if ( ival >= nin ) {
-            ival = 0;
-            (void) sprintf( comment, "Output coordinate %d is \"bad\"",
-                            coord + 1 );
-
-/* If the coordinate reference is valid, convert to 1-based coordinate
-   numbering and create an appropriate comment. */
-         } else if ( ival >= 0 ) {
-            ival++;
-            (void) sprintf( comment,
-                            "Output coordinate %d = input coordinate %d",
-                            coord + 1, ival );
-
-/* If the reference is to a constant, create an appropriate comment
-   (which depends on whether there are any constants). */
-         } else {
-            if ( this->constant ) {
-               (void) sprintf( comment,
-                               "Output coordinate %d = constant no. %d",
-                               coord + 1, -ival );
-            } else {
-               (void) sprintf( comment, "Output coordinate %d is \"bad\"",
-                               coord + 1 );
-            }
-
-/* Update the top constant number referenced. */            
-            if ( nconst < -ival ) nconst = -ival;
-         }         
-
-/* Write out the array value with accompanying comment. */
-         astWriteInt( channel, key, 1, 1, ival, comment );
-      }
-   }
-
-/* "inperm" array contents. */
-/* ------------------------ */
-/* Write the boolean "InCpy" value to indicate if input coordinates
-   are obtained simply by copying corresponding output
-   coordinates. This will be the case if "this->inperm" is NULL. */
-   ival = this->inperm ? 0 : 1;
-   set = ( ival != 0 );
-   astWriteInt( channel, "InCpy", set, 0, ival,
-                ival ? "Input coordinates = output coordinates" :
-                       "Input coordinates specified individually" );
-
-/* If input coordinates are specified individually, create a keyword
-   for each element of the "inperm" array. */
-   if ( this->inperm ) {
-      for ( coord = 0; coord < nin; coord++ ) {
-         (void) sprintf( key, "In%d", coord + 1 );
-
-/* Obtain the array value. If it refers to a coordinate that does not
-   exist, change the value to zero (indicating a "bad" value for this
-   coordinate). Create an appropriate comment. */
-         ival = this->inperm[ coord ];
-         if ( ival >= nout ) {
-            ival = 0;
-            (void) sprintf( comment, "Input coordinate %d is \"bad\"",
-                            coord + 1 );
-
-/* If the coordinate reference is valid, convert to 1-based coordinate
-   numbering and create an appropriate comment. */
-         } else if ( ival >= 0 ) {
-            ival++;
-            (void) sprintf( comment,
-                            "Input coordinate %d = output coordinate %d",
-                            coord + 1, ival );
-
-/* If the reference is to a constant, create an appropriate comment
-   (which depends on whether there are any constants). */
-         } else {
-            if ( this->constant ) {
-               (void) sprintf( comment,
-                               "Input coordinate %d = constant no. %d",
-                               coord + 1, -ival );
-            } else {
-               (void) sprintf( comment, "Input coordinate %d is \"bad\"",
-                               coord + 1 );
-            }
-
-/* Update the top constant number referenced. */            
-            if ( nconst < -ival ) nconst = -ival;
-         }         
-
-/* Write out the array value with accompanying comment. */
-         astWriteInt( channel, key, 1, 1, ival, comment );
-      }
-   }
-
-/* Number of constants. */
-/* -------------------- */
-/* First check if there are any constants, then write out how many
-   there are. */
-   if ( !this->constant ) nconst = 0;
-   set = ( nconst != 0 );
-   astWriteInt( channel, "Nconst", set, 0, nconst, "Number of constants" );
-
-/* Constants. */
-/* ---------- */
-/* Loop to create a keyword and comment for each constant. */
-   for ( iconst = 0; iconst < nconst; iconst++ ) {
-      (void) sprintf( key, "Con%d", iconst + 1 );
-      (void) sprintf( comment, "Constant number %d", iconst + 1 );
-
-/* Write out each constant value and comment. */
-      set = ( this->constant[ iconst ] != AST__BAD );
-      if ( set ) {
-         astWriteDouble( channel, key, 1, 1, this->constant[ iconst ],
-                         comment );
-      } else {
-         astWriteString( channel, key, 0, 1, "<bad>", comment );
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPermMap and astCheckPermMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PermMap,Mapping)
-astMAKE_CHECK(PermMap)
-
-AstPermMap *astPermMap_( int nin, const int inperm[], int nout,
-                         const int outperm[], const double constant[],
-                         const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astPermMap
-f     AST_PERMMAP
-
-*  Purpose:
-*     Create a PermMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "permmap.h"
-c     AstPermMap *astPermMap( int nin, const int inperm[], int nout,
-c                             const int outperm[], double constant[],
-c                             const char *options, ... )
-f     RESULT = AST_PERMMAP( NIN, INPERM, NOUT, OUTPERM, CONSTANT, OPTIONS,
-f                           STATUS )
-
-*  Class Membership:
-*     PermMap constructor.
-
-*  Description:
-*     This function creates a new PermMap and optionally initialises its
-*     attributes.
-*
-*     A PermMap is a Mapping which permutes the order of coordinates,
-*     and possibly also changes the number of coordinates, between its
-*     input and output.
-*
-*     In addition to permuting the coordinate order, a PermMap may
-*     also assign constant values to coordinates. This is useful when
-*     the number of coordinates is being increased as it allows fixed
-*     values to be assigned to any new ones.
-
-*  Parameters:
-c     nin
-f     NIN = INTEGER (Given)
-*        The number of input coordinates.
-c     inperm
-f     INPERM = INTEGER( NIN ) (Given)
-c        An optional array with "nin" elements which, for each input
-f        An array which, for each input
-*        coordinate, should contain the number of the output
-*        coordinate whose value is to be used (note that this array
-*        therefore defines the inverse coordinate transformation).
-*        Coordinates are numbered starting from 1.
-*
-*        For details of additional special values that may be used in
-c        this array, see the description of the "constant" parameter.
-f        this array, see the description of the CONSTANT argument.
-c
-c        If a NULL pointer is supplied instead of an array, each input
-c        coordinate will obtain its value from the corresponding
-c        output coordinate (or will be assigned the value AST__BAD if
-c        there is no corresponding output coordinate).
-c     nout
-f     NOUT = INTEGER (Given)
-*        The number of output coordinates.
-c     outperm
-f     OUTPERM = INTEGER( NOUT ) (Given)
-c        An optional array with "nout" elements which, for each output
-f        An array which, for each output
-*        coordinate, should contain the number of the input coordinate
-*        whose value is to be used (note that this array therefore
-*        defines the forward coordinate transformation).  Coordinates
-*        are numbered starting from 1.
-*
-*        For details of additional special values that may be used in
-c        this array, see the description of the "constant" parameter.
-f        this array, see the description of the CONSTANT argument.
-c
-c        If a NULL pointer is supplied instead of an array, each output
-c        coordinate will obtain its value from the corresponding
-c        input coordinate (or will be assigned the value AST__BAD if
-c        there is no corresponding input coordinate).
-c     constant
-f     CONSTANT = DOUBLE PRECISION( * ) (Given)
-c        An optional array containing values which may be assigned to
-f        An array containing values which may be assigned to
-*        input and/or output coordinates instead of deriving them
-c        from other coordinate values. If either of the "inperm" or
-f        from other coordinate values. If either of the INPERM or
-c        "outperm" arrays contains a negative value, it is used to
-f        OUTPERM arrays contains a negative value, it is used to
-c        address this "constant" array (such that -1 addresses the
-f        address this CONSTANT array (such that -1 addresses the
-*        first element, -2 addresses the second element, etc.) and the
-*        value obtained is used as the corresponding coordinate value.
-*
-*        Care should be taken to ensure that locations lying outside
-*        the extent of this array are not accidentally addressed. The
-c        array is not used if the "inperm" and "outperm" arrays do not
-f        array is not used if the INPERM and OUTPERM arrays do not
-*        contain negative values.
-c
-c        If a NULL pointer is supplied instead of an array, the
-c        behaviour is as if the array were of infinite length and
-c        filled with the value AST__BAD.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new PermMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new PermMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPermMap()
-f     AST_PERMMAP = INTEGER
-*        A pointer to the new PermMap.
-
-*  Notes:
-c     - If either of the "inperm" or "outperm" arrays contains a
-f     - If either of the INPERM or OUTPERM arrays contains a
-*     zero value (or a positive value which does not identify a valid
-*     output/input coordinate, as appropriate), then the value
-*     AST__BAD is assigned as the new coordinate value.
-*     - This function does not attempt to ensure that the forward and
-*     inverse transformations performed by the PermMap are
-*     self-consistent in any way. You are therefore free to supply
-*     coordinate permutation arrays that achieve whatever effect is
-*     desired.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPermMap *new;              /* Pointer to new PermMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the PermMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPermMap( NULL, sizeof( AstPermMap ), !class_init, &class_vtab,
-                         "PermMap", nin, inperm, nout, outperm, constant );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PermMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PermMap. */
-   return new;
-}
-
-AstPermMap *astPermMapId_( int nin, const int inperm[], int nout,
-                           const int outperm[], const double constant[],
-                           const char *options, ... ) {
-/*
-*  Name:
-*     astPermMapId_
-
-*  Purpose:
-*     Create a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     AstPermMap *astPermMapId_( int nin, const int inperm[], int nout,
-*                                const int outperm[], const double constant[],
-*                                const char *options, ... )
-
-*  Class Membership:
-*     PermMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astPermMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astPermMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     This function also converts the coordinate numbering in the
-*     permutation arrays from 1-based (used externally) to zero-based
-*     (used internally).
-*
-*     The variable argument list also prevents this function from
-*     invoking astPermMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astPermMap_.
-
-*  Returned Value:
-*     The ID value associated with the new PermMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPermMap *new;              /* Pointer to new PermMap */
-   int *inperm1;                 /* Pointer to temporary copy of "inperm" */
-   int *outperm1;                /* Pointer to temporary copy of "outperm" */
-   int coord;                    /* Loop counter for coordinates */
-
-/* Variable argument list */
-   va_list args;                 /* Get a pointer to the thread specific global data structure. */
-
-   int *status;                  /* Pointer to inherited status value */
-
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If the "nin" and "nout" values are acceptable, allocate memory to
-   hold temporary copies of the "inperm" and "outperm" arrays (but
-   only if these arrays are not NULL). */
-   inperm1 = NULL;
-   outperm1 = NULL;
-   if ( ( nin >= 0 ) && ( nout >= 0 ) ) {
-      if ( inperm ) inperm1 = astMalloc( sizeof( int ) * (size_t) nin );
-      if ( outperm ) outperm1 = astMalloc( sizeof( int ) * (size_t) nout );
-      if ( astOK ) {
-
-/* If necessary, make a copy of the "inperm" array, converting any
-   zero values into (zero-based) coordinate numbers that do not exist,
-   indicating a "bad" coordinate value. */
-         if ( inperm ) {
-            for ( coord = 0; coord < nin; coord++ ) {
-               if ( inperm[ coord ] < 0 ) {
-                  inperm1[ coord ] = inperm[ coord ];
-               } else if ( inperm[ coord ] == 0 ) {
-                  inperm1[ coord ] = nout;
-
-/* Convert valid coordinate references from 1-based (used externally)
-   to zero-based (used internally). */
-               } else {
-                  inperm1[ coord ] = inperm[ coord ] - 1;
-               }
-            }
-         }
-
-/* Repeat this process on the "outperm" array. */
-         if ( outperm ) {
-            for ( coord = 0; coord < nout; coord++ ) {
-               if ( outperm[ coord ] < 0 ) {
-                  outperm1[ coord ] = outperm[ coord ];
-               } else if ( outperm[ coord ] == 0 ) {
-                  outperm1[ coord ] = nin;
-               } else {
-                  outperm1[ coord ] = outperm[ coord ] - 1;
-               }
-            }
-         }
-      }
-   }
-
-/* Initialise the PermMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPermMap( NULL, sizeof( AstPermMap ), !class_init, &class_vtab,
-                         "PermMap", nin, inperm1, nout, outperm1, constant );
-
-/* If necessary, free the temporary arrays allocated above. */
-   if ( ( nin >= 0 ) && ( nout >= 0 ) ) {
-      if ( inperm ) inperm1 = astFree( inperm1 );
-      if ( outperm ) outperm1 = astFree( outperm1 );
-   }
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PermMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new PermMap. */
-   return astMakeId( new );
-}
-
-AstPermMap *astInitPermMap_( void *mem, size_t size, int init,
-                             AstPermMapVtab *vtab, const char *name,
-                             int nin, const int inperm[],
-                             int nout, const int outperm[],
-                             const double constant[], int *status ) {
-/*
-*+
-*  Name:
-*     astInitPermMap
-
-*  Purpose:
-*     Initialise a PermMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     AstPermMap *astInitPermMap( void *mem, size_t size, int init,
-*                                 AstPermMapVtab *vtab, const char *name,
-*                                 int nin, const int inperm[],
-*                                 int nout, const int outperm[],
-*                                 const double constant[] )
-
-*  Class Membership:
-*     PermMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new PermMap object. It allocates memory (if necessary) to accommodate
-*     the PermMap plus any additional data associated with the derived class.
-*     It then initialises a PermMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a PermMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the PermMap is to be initialised.
-*        This must be of sufficient size to accommodate the PermMap data
-*        (sizeof(PermMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the PermMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the PermMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the PermMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new PermMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     nin
-*        The number of input coordinate values per point.
-*     inperm
-*        Pointer to an array of int, with nin elements. For each input
-*        coordinate, the corresponding element of this array should contain the
-*        (zero-based) index of the output coordinate whose value is to be used.
-*        (Note that this array therefore defines the inverse coordinate
-*        transformation.) If a NULL value is supplied, the corresponding output
-*        coordinate value is used (or AST__BAD if there is no corresponding
-*        output coordinate).
-*
-*        For details of additional special values that may be used in this
-*        array, see the description of the "constant" parameter.
-*     nout
-*        The number of output coordinate values per point.
-*     outperm
-*        Pointer to an array of int, with nout elements. For each output
-*        coordinate, the corresponding element of this array should contain the
-*        (zero-based) index of the input coordinate whose value is to be used.
-*        (Note that this array therefore defines the forward coordinate
-*        transformation.) If a NULL value is supplied, the corresponding input
-*        coordinate value is used (or AST__BAD if there is no corresponding
-*        input coordinate).
-*
-*        For details of additional special values that may be used in this
-*        array, see the description of the "constant" parameter.
-*     constant
-*        Pointer to an array of double, which contains optional values which
-*        may be assigned to input and/or output coordinate values (instead of
-*        deriving them from other coordinate values). If either of the
-*        "inperm" or "outperm" arrays contains a negative value, it is used to
-*        address this "constant" array (such that -1 addresses the first
-*        element, -2 addresses the second element, etc.) and the value obtained
-*        is used as the corresponding coordinate value. Care should be taken
-*        to ensure that locations lying outside the extent of this array are
-*        not accidentally addressed.
-*
-*        If a NULL value is supplied for this parameter, the behaviour is as
-*        if the constant array were of infinite length and filled with the
-*        value AST__BAD.
-
-*  Returned Value:
-*     A pointer to the new PermMap.
-
-*  Notes:
-*     -  This function does not attempt to ensure that the forward and inverse
-*     transformations performed by the resulting PermMap are consistent in any
-*     way. The caller is therefore free to define the permutation arrays to
-*     achieve whatever effect is desired.
-*     -  If either of the "inperm" or "outperm" arrays contains a positive
-*     value which does not identify a valid output/input coordinate (as
-*     appropriate), then the value AST__BAD is assigned as the new coordinate
-*     value.
-*     -  This function makes a copy of the contents of the arrays supplied.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPermMap *new;              /* Pointer to new PermMap */
-   int i;                        /* Loop counter for coordinates */
-   int neg;                      /* Most negative permutation index */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPermMapVtab( vtab, name );
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the PermMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstPermMap *) astInitMapping( mem, size, 0,
-                                        (AstMappingVtab *) vtab, name,
-                                        nin, nout, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the PermMap data. */
-/* ---------------------------- */
-/* Initialise the array pointers. */
-      new->inperm = NULL;
-      new->outperm = NULL;
-      new->constant = NULL;
-
-/* If an "inperm" and/or "outperm" array has been supplied, allocate memory
-   and store a copy. */
-      if ( inperm ) new->inperm = astStore( NULL, inperm, sizeof( int ) *
-                                                          (size_t) nin );
-      if ( outperm ) new->outperm = astStore( NULL, outperm, sizeof( int ) *
-                                                             (size_t) nout );
-
-/* If a "constant" array has been supplied, we must also store a copy of it,
-   but must first determine how many of its elements we need. */
-      if ( constant ) {
-
-/* Loop through the "inperm" array (if supplied) to find the most negative
-   value it contains. This corresponds with the maximum index into the
-   constant array. */
-         neg = 0;
-         if ( inperm ) {
-            for ( i = 0; i < nin; i++ ) {
-               if ( inperm[ i ] < neg ) neg = inperm[ i ];
-	    }
-	 }
-
-/* Also perform this process on the "outperm" array (if supplied). */
-         if ( outperm ) {
-            for ( i = 0; i < nout; i++ ) {
-               if ( outperm[ i ] < neg ) neg = outperm[ i ];
-	    }
-	 }
-
-/* If a negative value was found, use its size to determine how many elements
-   of the "constant" array to store in allocated memory. */
-         if ( neg < 0 ) {
-            new->constant = astStore( NULL, constant, sizeof( double ) *
-                                                      (size_t) (-neg) );
-	 }
-      }
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) {
-         new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstPermMap *astLoadPermMap_( void *mem, size_t size,
-                             AstPermMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPermMap
-
-*  Purpose:
-*     Load a PermMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "permmap.h"
-*     AstPermMap *astLoadPermMap( void *mem, size_t size,
-*                                 AstPermMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     PermMap loader.
-
-*  Description:
-*     This function is provided to load a new PermMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     PermMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a PermMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the PermMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        PermMap data (sizeof(PermMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the PermMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the PermMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPermMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new PermMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the PermMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "PermMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new PermMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPermMap *new;              /* Pointer to the new PermMap */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword strings */
-   int coord;                    /* Loop counter for coordinates */
-   int iconst;                   /* Loop counter for constants */
-   int in_cpy;                   /* Input coordinates obtained by copying? */
-   int invert;                   /* Invert attribute value */
-   int ival;                     /* Integer value */
-   int nconst;                   /* Number of constants */
-   int nin;                      /* Number of input coordinates */
-   int nout;                     /* Number of output coordinates */
-   int out_cpy;                  /* Output coordinates obtained by copying? */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this PermMap. In this case the
-   PermMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPermMap );
-      vtab = &class_vtab;
-      name = "PermMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPermMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built PermMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "PermMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Initialise the PermMap's pointers. */
-      new->inperm = NULL;
-      new->outperm = NULL;
-      new->constant = NULL;
-
-/* Determine if the PermMap is inverted and obtain the "true" number
-   of input and output coordinates by un-doing the effects of any
-   inversion. */
-      invert = astGetInvert( new );
-      nin = !invert ? astGetNin( new ) : astGetNout( new );
-      nout = !invert ? astGetNout( new ) : astGetNin( new );
-
-/* InCpy and OutCpy. */
-/* ----------------- */
-/* Obtain boolean values via the "InCpy" and "OutCpy" keywords which
-   indicate if input/output coordinates should be obtained simply by
-   copying the corresponding output/input coordinates. */
-      in_cpy = astReadInt( channel, "incpy", 0 );
-      out_cpy = astReadInt( channel, "outcpy", 0 );
-
-/* If coordinates are specified individually (not simply copied), then
-   allocate memory for the coordinate permutation arrays. */
-      if ( !in_cpy ) new->inperm = astMalloc( sizeof( int ) * (size_t) nin );
-      if ( !out_cpy ) new->outperm = astMalloc( sizeof( int ) *
-                                                (size_t) nout );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
-      if ( !astOK ) {
-         if ( !in_cpy ) new->inperm = astFree( new->inperm );
-         if ( !out_cpy ) new->outperm = astFree( new->outperm );
-
-/* Otherwise read data into these arrays... */
-      } else {
-
-/* "inperm" array contents. */
-/* ------------------------ */
-/* If required, create a keyword for each element of the "inperm"
-   array and read the element's value. */
-         if ( !in_cpy ) {
-            for ( coord = 0; coord < nin; coord++ ) {
-               (void) sprintf( key, "in%d", coord + 1 );
-               ival = astReadInt( channel, key, 0 );
-
-/* If the value is zero (indicating a "bad" coordinate), convert it to
-   a (zero-based) coordinate number that doesn't exist. */
-               if ( ival == 0 ) {
-                  ival = nout;
-
-/* If the coordinate reference is valid, convert to zero-based
-   coordinate numbering for internal use. */
-               } else if ( ival > 0 ) {
-                  ival--;
-               }
-
-/* Store the value. */
-               new->inperm[ coord ] = ival;
-            }
-         }
-
-/* "outperm" array contents. */
-/* ------------------------- */
-/* If required, create a keyword for each element of the "outperm"
-   array and read the element's value. */
-         if ( !out_cpy ) {
-            for ( coord = 0; coord < nout; coord++ ) {
-               (void) sprintf( key, "out%d", coord + 1 );
-               ival = astReadInt( channel, key, 0 );
-
-/* If the value is zero (indicating a "bad" coordinate), convert it to
-   a (zero-based) coordinate number that doesn't exist. */
-               if ( ival == 0 ) {
-                  ival = nin;
-
-/* If the coordinate reference is valid, convert to zero-based
-   coordinate numbering for internal use. */
-               } else if ( ival > 0 ) {
-                  ival--;
-               }
-
-/* Store the value. */
-               new->outperm[ coord ] = ival;
-            }
-         }
-
-/* Number of constants. */
-/* -------------------- */
-/* Determine the number of constants and allocate memory to hold
-   them. */
-         nconst = astReadInt( channel, "nconst", 0 );
-         if ( nconst < 0 ) nconst = 0;
-         new->constant = astMalloc( sizeof( double ) * (size_t) nconst );
-         if ( astOK ) {
-
-/* Constants. */
-/* ---------- */
-/* Create a keyword for each constant and read its value. */
-            for ( iconst = 0; iconst < nconst; iconst++ ) {
-               (void) sprintf( key, "con%d", iconst + 1 );
-               new->constant[ iconst ] =
-                  astReadDouble( channel, key, AST__BAD );
-            }
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new PermMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new PermMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-double *astGetConstants_( AstPermMap *this, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,PermMap,GetConstants))( this, status );
-}
-
-int *astGetInPerm_( AstPermMap *this, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,PermMap,GetInPerm))( this, status );
-}
-
-int *astGetOutPerm_( AstPermMap *this, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,PermMap,GetOutPerm))( this, status );
-}
-
-
-
-
-
-
diff --git a/ast-5.3-1/permmap.h b/ast-5.3-1/permmap.h
deleted file mode 100644
index f6b9949..0000000
--- a/ast-5.3-1/permmap.h
+++ /dev/null
@@ -1,309 +0,0 @@
-#if !defined( PERMMAP_INCLUDED ) /* Include this file only once */
-#define PERMMAP_INCLUDED
-/*
-*+
-*  Name:
-*     permmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the PermMap class.
-
-*  Invocation:
-*     #include "permmap.h"
-
-*  Description:
-*     This include file defines the interface to the PermMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The PermMap class implements Mappings that perform permutation
-*     of the order of coordinate values, possibly also accompanied by
-*     changes in the number of coordinates (between input and output).
-*
-*     In addition to permuting the coordinate order, coordinates may
-*     also be assigned constant values which are unrelated to other
-*     coordinate values.  This facility is useful when the number of
-*     coordinates is being increased, as it allows fixed values to be
-*     assigned to the new coordinates.
-
-*  Inheritance:
-*     The PermMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astGetConstants
-*           Obtain a copy of the constants array
-*        astGetInPerm
-*           Obtain a copy of the input permutation array
-*        astGetOutPerm
-*           Obtain a copy of the output permutation array
-
-*  Other Class Functions:
-*     Public:
-*        astIsAPermMap
-*           Test class membership.
-*        astPermMap
-*           Create a PermMap.
-*
-*     Protected:
-*        astCheckPermMap
-*           Validate class membership.
-*        astInitPermMap
-*           Initialise a PermMap.
-*        astInitPermMapVtab
-*           Initialise the virtual function table for the PermMap class.
-*        astLoadPermMap
-*           Load a PermMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstPermMap
-*           PermMap object type.
-*
-*     Protected:
-*        AstPermMapVtab
-*           PermMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     29-FEB-1996 (RFWS):
-*        Original version.
-*     26-SEP-1996 (RFWS):
-*        Added external interface and I/O facilities.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitPermMapVtab
-*        method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PermMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstPermMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int *inperm;                  /* Pointer to input permutation array */
-   int *outperm;                 /* Pointer to output permutation array */
-   double *constant;             /* Pointer to array of constant values */
-} AstPermMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPermMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double *(* GetConstants)( AstPermMap *, int * );
-   int *(* GetInPerm)( AstPermMap *, int * );
-   int *(* GetOutPerm)( AstPermMap *, int * );
-
-} AstPermMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstPermMapGlobals {
-   AstPermMapVtab Class_Vtab;
-   int Class_Init;
-} AstPermMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPermMapGlobals_( AstPermMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PermMap)          /* Check class membership */
-astPROTO_ISA(PermMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPermMap *astPermMap_( int, const int [], int, const int [],
-                         const double [], const char *, int *, ...);
-#else
-AstPermMap *astPermMapId_( int, const int [], int, const int [],
-                           const double [], const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPermMap *astInitPermMap_( void *, size_t, int, AstPermMapVtab *,
-                             const char *, int, const int [], int,
-                             const int [], const double [], int * );
-
-/* Vtab initialiser. */
-void astInitPermMapVtab_( AstPermMapVtab *, const char *, int * );
-
-/* Loader. */
-AstPermMap *astLoadPermMap_( void *, size_t, AstPermMapVtab *,
-                             const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-double *astGetConstants_( AstPermMap *, int * );
-int *astGetInPerm_( AstPermMap *, int * );
-int *astGetOutPerm_( AstPermMap *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPermMap(this) astINVOKE_CHECK(PermMap,this,0)
-#define astVerifyPermMap(this) astINVOKE_CHECK(PermMap,this,1)
-
-/* Test class membership. */
-#define astIsAPermMap(this) astINVOKE_ISA(PermMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPermMap astINVOKE(F,astPermMap_)
-#else
-#define astPermMap astINVOKE(F,astPermMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPermMap(mem,size,init,vtab,name,nin,inperm,nout,outperm,constant) \
-astINVOKE(O,astInitPermMap_(mem,size,init,vtab,name,nin,inperm,nout,outperm,constant,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPermMapVtab(vtab,name) astINVOKE(V,astInitPermMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPermMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPermMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPermMap to validate PermMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astGetConstants(this) astINVOKE(V,astGetConstants_(astCheckPermMap(this),STATUS_PTR))
-#define astGetInPerm(this) astINVOKE(V,astGetInPerm_(astCheckPermMap(this),STATUS_PTR))
-#define astGetOutPerm(this) astINVOKE(V,astGetOutPerm_(astCheckPermMap(this),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/pg3d.h b/ast-5.3-1/pg3d.h
deleted file mode 100644
index be73bc4..0000000
--- a/ast-5.3-1/pg3d.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#if !defined( PG3D_INCLUDED ) /* Include this file only once */
-#define PG3D_INCLUDED
-/*
-*+
-*  Name:
-*     pg3d.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the pg3d module
-
-*  Invocation:
-*     #include "pg3d.h"
-
-*  Description:
-*     This include file defines the interface to the pg3d module
-*     (implemented in file grf3d_pgplot.c) and provides the type 
-*     definitions, function prototypes and macros, etc. needed to 
-*     use this module. 
-*
-*     The functions in the pg3d interface provide control of the view 
-*     of the 3D world coordinate system visible on the 2D PGPLOT 
-*     viewport. They are provided for users of the PGPLOT implementation
-*     of the grf3D interface distributed with AST. No calls to these
-*     functions are made from within AST itself.
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (JACH - UCLan)
-
-*  History:
-*     20-JUN-2007 (DSB):
-*        Original version.
-*-
-*/
-
-int PG3DRotateEye( int, float );
-int PG3DSetCamera( float[3], float[3], float[3], float );
-int PG3DSetEye( float[3] );
-int PG3DSetTarget( float[3] );
-int PG3DSetUp( float[3] );
-int PG3DSetScreen( float );
-int PG3DForward( float );
-int PG3DAutoCamera( float[3], float[3] );
-int PG3DFindNearest( int, float *, float *, float *, int * );
-
-#endif
diff --git a/ast-5.3-1/plot.c b/ast-5.3-1/plot.c
deleted file mode 100644
index 999ba9d..0000000
--- a/ast-5.3-1/plot.c
+++ /dev/null
@@ -1,30746 +0,0 @@
-/*
-*class++
-*  Name:
-*     Plot
-
-*  Purpose:
-*     Provide facilities for 2D graphical output.
-
-*  Constructor Function:
-c     astPlot
-f     AST_PLOT
-
-*  Description:
-*     This class provides facilities for producing 2D graphical output.
-*     A Plot is a specialised form of FrameSet, in which the base
-*     Frame describes a "graphical" coordinate system and is
-*     associated with a rectangular plotting area in the underlying
-*     graphics system. This plotting area is where graphical output
-*     appears. It is defined when the Plot is created.
-*
-*     The current Frame of a Plot describes a "physical" coordinate
-*     system, which is the coordinate system in which plotting
-*     operations are specified. The results of each plotting operation
-*     are automatically transformed into graphical coordinates so as
-*     to appear in the plotting area (subject to any clipping which
-*     may be in effect).
-*
-*     Because the Mapping between physical and graphical coordinates
-*     may often be non-linear, or even discontinuous, most plotting
-*     does not result in simple straight lines. The basic plotting
-*     element is therefore not a straight line, but a geodesic curve
-c     (see astCurve, astGenCurve and astPolyCurve). A Plot also provides facilities for 
-c     drawing markers or symbols (astMark), text (astText) and grid lines
-c     (astGridLine). It is also possible to draw curvilinear axes with
-c     optional coordinate grids (astGrid).
-f     (see AST_CURVE, AST_GENCURVE and AST_POLYCURVE). A Plot also provides facilities 
-f     for drawing markers or symbols (AST_MARK), text (AST_TEXT) and grid 
-f     lines (AST_GRIDLINE). It is also possible to draw curvilinear axes
-f     with optional coordinate grids (AST_GRID).
-*     A range of Plot attributes is available to allow precise control
-*     over the appearance of graphical output produced by these
-c     functions.
-f     routines.
-*
-*     You may select different physical coordinate systems in which to
-*     plot (including the native graphical coordinate system itself)
-*     by selecting different Frames as the current Frame of a Plot,
-*     using its Current attribute.  You may also set up clipping (see
-c     astClip) to limit the extent of any plotting you perform, and
-f     AST_CLIP) to limit the extent of any plotting you perform, and
-*     this may be done in any of the coordinate systems associated
-*     with the Plot, not necessarily the one you are plotting in.
-*
-*     Like any FrameSet, a Plot may also be used as a Frame. In this
-*     case, it behaves like its current Frame, which describes the
-*     physical coordinate system.
-*
-*     When used as a Mapping, a Plot describes the inter-relation
-*     between graphical coordinates (its base Frame) and physical
-*     coordinates (its current Frame).  It differs from a normal
-*     FrameSet, however, in that an attempt to transform points which
-*     lie in clipped areas of the Plot will result in bad coordinate
-*     values (AST__BAD).
-
-*  Inheritance:
-*     The Plot class inherits from the FrameSet class.
-
-*  Attributes:
-*     In addition to those attributes common to all FrameSets, every
-*     Plot also has the following attributes:
-*
-*     - Abbrev: Abbreviate leading fields?
-*     - Border: Draw a border around valid regions of a Plot?
-*     - Clip: Clip lines and/or markers at the Plot boundary?
-*     - ClipOp: Combine Plot clipping limits using a boolean OR?
-*     - Colour(element): Colour index for a Plot element
-*     - DrawAxes(axis): Draw axes for a Plot?
-*     - DrawTitle: Draw a title for a Plot?
-*     - Escape: Allow changes of character attributes within strings?
-*     - Edge(axis): Which edges to label in a Plot
-*     - Font(element): Character font for a Plot element
-*     - Gap(axis): Interval between linearly spaced major axis values 
-*     - Grf: Select the graphics interface to use.
-*     - Grid: Draw grid lines for a Plot?
-*     - Invisible: Draw graphics in invisible ink?
-*     - LabelAt(axis): Where to place numerical labels for a Plot
-*     - LabelUnits(axis): Use axis unit descriptions in a Plot?
-*     - LabelUp(axis): Draw numerical Plot labels upright?
-*     - Labelling: Label and tick placement option for a Plot
-*     - LogGap(axis): Interval between logarithmically spaced major axis values 
-*     - LogPlot(axis): Map the plot onto the screen logarithmically?
-*     - LogTicks(axis): Space the major tick marks logarithmically?
-*     - MajTickLen(axis): Length of major tick marks for a Plot
-*     - MinTickLen(axis): Length of minor tick marks for a Plot
-*     - MinTick(axis): Density of minor tick marks for a Plot
-*     - NumLab(axis): Draw numerical axis labels for a Plot?
-*     - NumLabGap(axis): Spacing of numerical axis labels for a Plot
-*     - Size(element): Character size for a Plot element
-*     - Style(element): Line style for a Plot element
-*     - TextLab(axis): Draw descriptive axis labels for a Plot?
-*     - TextLabGap(axis): Spacing of descriptive axis labels for a Plot
-*     - TickAll: Draw tick marks on all edges of a Plot?
-*     - TitleGap: Vertical spacing for a Plot title
-*     - Tol: Plotting tolerance
-*     - Width(element): Line width for a Plot element
-
-*  Functions:
-c     In addition to those functions applicable to all FrameSets, the
-c     following functions may also be applied to all Plots:
-f     In addition to those routines applicable to all FrameSets, the
-f     following routines may also be applied to all Plots:
-*
-c     - astBorder: Draw a border around valid regions of a Plot
-c     - astBoundingBox: Returns a bounding box for previously drawn graphics
-c     - astClip: Set up or remove clipping for a Plot
-c     - astCurve: Draw a geodesic curve
-c     - astGenCurve: Draw a generalized curve
-c     - astGetGrfContext: Get the graphics context for a Plot
-c     - astGrfPop: Retrieve previously saved graphics functions
-c     - astGrfPush: Save the current graphics functions 
-c     - astGrfSet: Register a graphics routine for use by a Plot
-c     - astGrid: Draw a set of labelled coordinate axes
-c     - astGridLine: Draw a grid line (or axis) for a Plot
-c     - astMark: Draw a set of markers for a Plot
-c     - astPolyCurve: Draw a series of connected geodesic curves
-c     - astText: Draw a text string for a Plot
-f     - AST_BORDER: Draw a border around valid regions of a Plot
-f     - AST_BOUNDINGBOX: Returns a bounding box for previously drawn graphics
-f     - AST_CLIP: Set up or remove clipping for a Plot
-f     - AST_CURVE: Draw a geodesic curve
-f     - AST_GENCURVE: Draw a generalized curve
-f     - AST_GETGRFCONTEXT: Get the graphics context for a Plot
-f     - AST_GRFPOP: Retrieve previously saved graphics functions
-f     - AST_GRFPUSH: Save the current graphics functions 
-f     - AST_GRFSET: Register a graphics routine for use by the Plot class
-f     - AST_GRID: Draw a set of labelled coordinate axes
-f     - AST_GRIDLINE: Draw a grid line (or axis) for a Plot
-f     - AST_MARK: Draw a set of markers for a Plot
-f     - AST_POLYCURVE: Draw a series of connected geodesic curves
-f     - AST_TEXT: Draw a text string for a Plot
-
-*  Graphical Elements:
-*     The colour index, character font, character size, line style and
-*     line width used for plotting can be set independently for
-*     various elements of the graphical output produced by a Plot.
-*     The different graphical elements are identified by appending the
-*     strings listed below as subscripts to the Plot attributes
-*     Colour(element), Font(element), Size(element), Style(element)
-*     and Width(element). These strings are case-insensitive and
-*     unambiguous abbreviations may be used. Elements of the graphical 
-*     output which relate to individual axes can be referred to either
-*     independently (e.g. "(Grid1)" and "(Grid2)" ) or together (e.g.
-*     "(Grid)"):
-*
-c     - Axes: Axis lines drawn through tick marks using astGrid 
-f     - Axes: Axis lines drawn through tick marks using AST_GRID
-c     - Axis1: Axis line drawn through tick marks on axis 1 using astGrid
-f     - Axis1: Axis line drawn through tick marks on axis 1 using AST_GRID
-c     - Axis2: Axis line drawn through tick marks on axis 2 using astGrid
-f     - Axis2: Axis line drawn through tick marks on axis 2 using AST_GRID
-c     - Border: The Plot border drawn using astBorder or astGrid
-f     - Border: The Plot border drawn using AST_BORDER or AST_GRID
-c     - Curves: Geodesic curves drawn using astCurve, astGenCurve or astPolyCurve
-f     - Curves: Geodesic curves drawn using AST_CURVE, AST_GENCURVE or AST_POLYCURVE
-c     - Grid: Grid lines drawn using astGridLine or astGrid
-f     - Grid: Grid lines drawn using AST_GRIDLINE or AST_GRID 
-c     - Grid1: Grid lines which cross axis 1, drawn using astGridLine or astGrid 
-f     - Grid1: Grid lines which cross axis 1, drawn using AST_GRIDLINE or AST_GRID
-c     - Grid2: Grid lines which cross axis 2, drawn using astGridLine or astGrid 
-f     - Grid2: Grid lines which cross axis 2, drawn using AST_GRIDLINE or AST_GRID
-c     - Markers: Graphical markers (symbols) drawn using astMark
-f     - Markers: Graphical markers (symbols) drawn using AST_MARK
-c     - NumLab: Numerical axis labels drawn using astGrid 
-f     - NumLab: Numerical axis labels drawn using AST_GRID 
-c     - NumLab1: Numerical labels for axis 1 drawn using astGrid 
-f     - NumLab1: Numerical labels for axis 1 drawn using AST_GRID
-c     - NumLab2: Numerical labels for axis 2 drawn using astGrid
-f     - NumLab2: Numerical labels for axis 2 drawn using AST_GRID
-c     - Strings: Text strings drawn using astText
-f     - Strings: Text strings drawn using AST_TEXT
-c     - TextLab: Descriptive axis labels drawn using astGrid 
-f     - TextLab: Descriptive axis labels drawn using AST_GRID 
-c     - TextLab1: Descriptive label for axis 1 drawn using astGrid
-f     - TextLab1: Descriptive label for axis 1 drawn using AST_GRID 
-c     - TextLab2: Descriptive label for axis 2 drawn using astGrid
-f     - TextLab2: Descriptive label for axis 2 drawn using AST_GRID 
-c     - Ticks: Tick marks (both major and minor) drawn using astGrid
-f     - Ticks: Tick marks (both major and minor) drawn using AST_GRID
-c     - Ticks1: Tick marks (both major and minor) for axis 1 drawn using astGrid
-f     - Ticks1: Tick marks (both major and minor) for axis 1 drawn using AST_GRID
-c     - Ticks2: Tick marks (both major and minor) for axis 2 drawn using astGrid
-f     - Ticks2: Tick marks (both major and minor) for axis 2 drawn using AST_GRID
-c     - Title: The Plot title drawn using astGrid
-f     - Title: The Plot title drawn using AST_GRID
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     18-SEP-1996 (DSB):
-*        Original version.
-*     25-FEB-1997 (RFWS):
-*        Tidied all public prologues.
-*     18-AUG-1997 (DSB):
-*        Changes made to ensure that the first label on each axis is 
-*        never abbreviated, and to avoid segmentation violation when NumLab
-*        is set to zero.
-*     1-SEP-1997 (DSB):
-*        astGetGap changed so that it returns the default value which will 
-*        be used (instead of AST__BAD) if no value has been set for Gap.
-*        The Border attribute modified so that it is off (zero) by default.
-*     19-SEP-1997 (DSB):
-*        o  Check that something has been plotted before using the bounding
-*        box to determine title and label positions. 
-*        o  Fixed bug which caused a tick mark at the pole to be draw at
-*        a random angle.
-*        o  The size of the increment used to determine the tangent to a grid
-*        line at the position to a label has been reduced to make sure the
-*        labls are drawn parallel to grid line.
-*        o  Correct the logic for catering with reversed axes when determining
-*        the displacement of a label's reference point from the associated 
-*        axis.
-*        o  Corrected logic which determined if two numerical labels overlap.
-*        o  Corrected logic for determining when to abbreviate numerical
-*        labels.
-*        o  Use of strtok replaced by local function FindWord.
-*        o  Correct logic which determines which side of the axis to draw
-*        tick marks when using interior labelling.
-*        o  If the base Frame of the FrameSet supplied to astPlot has more 
-*        than 2 axes, then use a sub-frame formed from the first two axes, 
-*        instead of simply reporting an error.
-*        o  If the current Frame of the Plot supplied to astGrid or
-*        astBorder has more than 2 axes, then use a sub-frame formed from
-*        the first two axes, instead of simply reporting an error.
-*        o  Default for Border is now to draw the border if exterior 
-*        Labelling is used, but not to draw it if interior labelling is
-*        used. 
-*        o  Public astGet function now returns actual used values for all
-*        attributes. Protected astGetXyz functions still return the requested 
-*        value (which may differ from the used value), or the "unset" value 
-*        if no value has been set for the attribute.
-*        o  The defaults for Edge now depend on Labelling. If exterior
-*        labelling was requested but cannot be produced using defaults of
-*        Edge(1)=Bottom and Edge(2)=Left, then these default Edge values 
-*        are swapped. If exterior labelling is still not possible, the
-*        original default Edge values are re-instated.
-*        o  Unset attributes which use dynamic defaults are now flagged as 
-*        "unhelpful" in the dump function.
-*        o  Added attribute Escape which allows text strings to include
-*        escape sequences (see function GrText). This attribute and
-*        associated functionality is currently not available for use, search 
-*        for all occurences of ENABLE-ESCAPE for instructions on how to 
-*        enable the facilities.
-*        o  Strings now used instead of integers to represent "choice" 
-*        attributes externally (eg Edge and Labelling).
-*     24-NOV-1997 (DSB):
-*        o  Fixed bug in function Grid which caused units to be included in
-*        SkyFrame axis labels by default.
-*        o  Replaced calls to DrawText by calls to astGText, and replaced
-*        references to "U" and "D" justifications by "T" and "B". This 
-*        stops labels drifting to the bottom left when GAIA zooms.
-*     23-MAR-1998 (DSB):
-*        Added extra checks on global status into routine Grid to avoid
-*        segmentation violations occuring due to null pointers being used.
-*     10-JUN-1998 (DSB):
-*        Modify DrawTicks so that ticks are drawn closer to singularities
-*        than previously. Also normalise this constraint to the screen size
-*        rather than the length of a major tick mark.
-*     28-OCT-1998 (DSB):
-*        o  Added method astPolyCurve. 
-*        o  Extract the Current Frame from the Plot prior to using Frame 
-*        methods such as astOffset, astNorm, etc.
-*        o  PlotLabel modified to ensure labels are abbreviated even if
-*        they are next to the "root" label (i.e. the label with most
-*        trailing zeros).
-*        o  Modified description of Width attribute. Width no longer gives
-*        the absolute line width in inches. Instead it is a scale factor,
-*        where 1.0 corresponds to a "typical thin line" on the device.
-*        o  Modified LabelUnits attribute so that the default value is zero
-*        for SkyAxes and non-zero for other Axes.
-*     10-DEC-1998 (DSB):
-*        Modified all calls to the "pow" maths function to avoid using
-*        literal constants as arguments. This seems to cause segmentation
-*        violations on some systems.
-*     16-JUL-1999 (DSB):
-*        Fixed memory leaks in EdgeCrossings and EdgeLabels.
-*     16-SEP-1999 (DSB):
-*        Avoid writing out clipping limits if they are undefined.
-*     12-OCT-1999 (DSB):
-*        o  Modified use of the NumLab attribute so that setting it to zero 
-*        does not prevent exterior labels from being produced.
-*        o  Allow length of tick marks to be specified separately for
-*        both axes.
-*     13-OCT-2000 (DSB):
-*        o Purge zero length sections from CurveData structures.
-*        o Increase tolerance for edge labels from 0.0005 to 0.005.
-*     9-JAN-2001 (DSB):
-*        o  Change argument "in" for astMark and astPolyCurve from type
-*        "const double (*)[]" to "const double *".
-*        o  Check success of astReadString before using the returned
-*        pointer.
-*        o  Change method for choosing default LabelAt values to ignore 
-*        values which produce no visible labels.
-*     10-JAN-2001 (DSB):
-*        o  Modified FindMajTick to choose the size of fillable holes in
-*        the axis range on the basis of the number of ticks on the axis.
-*        This avoids holes being visible in the displayed tick marks when 
-*        using very small gaps.
-*     22-MAY-2001 (DSB):
-*        Added a check when using interior labelling, to ensure that the
-*        most appropriate edges are used for text labels.
-*     13-JUN-2001 (DSB):
-*        Added public method astGenCurve, astGrfSet, astGrfPop, astGrfPush.
-*        Made DrawAxes attribute axis specific.
-*     4-JUL-2001 (DSB):
-*        The Crv function used to have a restriction that if *any*
-*        subsection was very short, then *none* of the subsections were
-*        subdivided. This meant that long subsections which needed
-*        subdividing were not subdivided if there was also a very short
-*        subsection. To get round this problem the restriction was changed
-*        to "if *all* subsections are very short then none are divided.
-*        This was implemented by changing dl2_min to dl2_max, and adding
-*        a check for very short segments (which are then not sub-divided). 
-*     16-AUG-2001 (DSB):
-*        Remove the check for very short segments introduced above, as it 
-*        caused south pole tan projection to include some spurious lines.
-*     20-SEP-2001 (DSB):
-*        - Initialize baseframe to NULL in astInitPlot (prevents segvios).
-*        - Modified astInitPlot to allow the "frame" argument to the astPlot 
-*        constructor to be a Plot.
-*     10-JAN-2002 (DSB):
-*       - Added axis-specific graphical elements "axis1", "axis2", etc.
-*       - FullForm returns a match without ambiguity if the test string
-*       matches an option exactly, including length.
-*     31-JAN-2002 (DSB):
-*       - Added RejectOOB to reject tick marks which are not in their primary 
-*       domain.
-*     14-FEB-2002 (DSB):
-*       - Relaxed the conditions for equality within the EQUALS macro.
-*       Guard aginst no ticks being found.
-*     18-FEB-2002 (DSB):
-*       - Make a permanent copy of any old axis format string in TickMarks.
-*       Previously a mere pointer into the astGet string buffer was stored, 
-*       which could be over-written after many calls to astGet.
-*       - If a user specifies an axis format, use it whether or not it
-*       results in any identical adjacent labels.
-*     4-MAR-2002 (DSB):
-*       - Made fairly extesive changes to the creation and use of tick
-*       mark values in order to circumvent problems with CAR projections,
-*       and "1 to many" mappings (such as 2D cartesian->polar). The
-*       policy now is that axis normalization is only performed when
-*       necessary (i.e. to create labels for display, etc). Tick mark
-*       values are stored and handled as non-normalized values as much as
-*       possible.
-*     13-JUN-2002 (DSB):
-*       Modified Norm1 to prevent major tick value from being removed if
-*       the supplied reference value is out of bounds, resulting in the
-*       Mapping producing bad values
-*     14-JUN-2002 (DSB):
-*       Re-wrote PlotLabels to improve abbreviation of labels and the
-*       choice of which labels not to print. 
-*     14-AUG-2002 (DSB):
-*       - Added method astBoundingBox. 
-*       - Added attribute Invisible.
-*       - Correct handling of "axis specific" plot elements cuch as
-*       (Axis1), (Axis2), etc.
-*     12-SEP-2002 (DSB):
-*       - Modified Map1 to remove slow normalization method (it is now
-*       faster but the changes result in some longer-than-needed grids 
-*       lines when (e.g.) plotting pixel coordins in Polar coords).
-*       - Modified Axlot so that SkyFrames positions which are out of
-*       their normal ranges are not rejected by Map1.
-*     10-OCT-2002 (DSB):
-*       grfAttrs:Modified to test element attributes explicitly using the
-*       relevant TestUse<attr> functions, instead of relying on the
-*       "GetUse<attr>" function returning the NO<attr> constant if not set.
-*       - Modified Axplot so that SkyFrames positions which are out of
-*       their normal ranges are not rejected by Map1.
-*       - Only use tick marks which are within the axis range given by the
-*       Bottom and Top Axis attributes.
-*       - Norm1: If the normalized current frame coords are bad, do not 
-*       reinstate the original unnormalized values. For instance, current
-*       Frame values which are outside the valid domain of the projection
-*       should result in bad values when normalized, not the original
-*       good values. The original comment stated "If the normalization 
-*       produced bad coords (e.g. as may happen if the supplied refernce 
-*       value corresponds to a point on the line through the tick mark 
-*       which is outside the valid region of the mapping) leave the original
-*       tick mark values unchanged".
-*       - GetTicks: Limit maxticks to be no less than 8.
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitPlotVtab
-*        method.
-*        - Use private IsASkyFrame method in place of astIsASkyFrame.
-*        - Modify PlotLabels to excluding exponents when counting trailing
-*        zeros, and also to pad trailing fields with trailing zeros up to
-*        the max number of decimal places when estimating label priorities.
-*        - Modified Overlap to ensure that axis labels are speced by at 
-*        least two spaces.
-*     22-JAN-2003 (DSB):
-*        - Modified PlotLabels so that labels are rejected in a regular
-*        pattern rather than semi-random.
-*        - Modified the way PlotLabels abbreviates leading fields.
-*        - Introdued the skipbad parameter for the Crv function, in order
-*        to provide some degree of protection against the Crv algorithm
-*        skipping over small sections of valid coordinates (such as when
-*        a curve crosses the plot very close to a corner of the plot).
-*     25-MAR-2003 (DSB):
-*        - Modified FindMajTicks to avoid losing tick marks when dealing
-*        with high precision data.
-*     8-AUG-2003 (DSB):
-*        - Modified PlotLabels to ensure that the root label for the
-*        second axis is not omitted due to it overlapping a label from 
-*        the first axis (a different root label is now chosen if this would
-*        be the case).
-*        - Modify FindMajTicks to avoid tick marks which should be at
-*        exactly zero being placed at some very small non-zero axis value.
-*     22-OCT-2003 (DSB):
-*        - DrawTicks modified to correctly reset graphical attributes and
-*        pass on to the next axis if an axis has zero length major and minor 
-*        tick marks.
-*     9-JAN-2004 (DSB):
-*        DrawGrid: Report error if no grid curves can be drawn.
-*        AxPlot: Initialise returned CDATA structure before checking argument
-*        validity.
-*        GetTicks: Calculate the reference value on the other axis using
-*        function "Typical" rather than simply using the man of the supplied 
-*        values (the supplied values may be clustered around 0 and 2*PI if the
-*        field is centred on the origin, resulting in the mean being at about 
-*        1.PI and therefore inappropriate).
-*     13-JAN-2004 (DSB):
-*        - Added LogPlot attribute, and the facility for mapping the base 
-*        coordinate system logarithmically onto the plotting area instead of 
-*        linearly.
-*        - Added LogTicks attribute, and the facility for spacing the
-*        major tick marks logarithmically instead of linearly.
-*        - Added LogGap attribute, and the facility for storing separate
-*        gap sizes for linear and log tick spacing.
-*     15-JAN-2004 (DSB):
-*        - Added LogLabel attribute.
-*        - Re-instated the inclusion of escape sequences in strings (see 
-*        function GrText). 
-*     12-FEB-2004 (DSB):
-*        - RightVector: Corrected usage of chh and chv.
-*        - GQch and GScales: Check that values returned by grf module are
-*          usable.
-*        - DrawAxis: Extend axis section by one section (if possible) at
-*        each end (overcomes problems where the axis does not reach a pole).
-*        - DrawAxis: Check axis does not extend beyond a pole.
-*        - Labels: Correct logic of loop which plots interior labels
-*        (previously it missed out labels if there were only 3)
-*        - Allow for some rounding error in FindMajTicks when comparing an
-*        axis value with a loweror upper axis limit.
-*     19-FEB-2004 (DSB):
-*        - Reduced the dynamic range restriction for log ticks from 2 decades 
-*        to 1.
-*        - Temporarily clear any error status before re-instating the
-*        original Format in TickMarks. 
-*        - Add LogTicks to the GetAttrib function so that the value of the 
-*        LogTicks attribute can be got by the public.
-*        - Modify Crv to include a check that he vector scale has not
-*        changed much between adjacent segments.
-*        - Modify Crv so that a segment is only subdivided if at least
-*        half of the subsegments are longer than the shortest significant 
-*        length. Also put a restriction on subdivision so that
-*        subdivision only occurs if the bounding box of the segment being 
-*        sub-divided is smaller than the bounding box of its parent
-*        segment.
-*     27-FEB-2004 (DSB):
-*        - Reduce the default Tol value from 0.001 to 0.01 in order to
-*        speed up curve drawing..
-*        - Use 0.1*Tol in Boundary because the boundary tracing algorithm
-*        seems to produce much worse visible errors than it should do for a 
-*        given Tol.
-*     2-MAR-2004 (DSB):
-*        - Corrected handling of bounding boxes in Crv so that
-*        subdivision is allowed if the bounding box shrinks on only 1 axis 
-*        (previously required shrinkage on both axes but this fails if
-*        all the points are on a horizontal or vertical line).
-*        - Modified FindMajTicks to use a better algorithm for finding an
-*        appropriate nfill value (previously logplot=1 axes could have
-*        unfilled holes at the high end).
-*        - Modified GetTicks so that FindMajTicks is not called
-*        repeatedly with the same gap size.
-*        - Modify AxPlot/Map1 so that the axis curve is sampled logarithmically 
-*        if the corresponding axis is mapped logarithmically.
-*     10-MAR-2004 (DSB):
-*        - Modified Typical to give less weight to vaalues close to the
-*        edges of the range covered by the plotting area.
-*        - Increased minimum angle between curve and edge required to
-*        create an edge label from 3 degs to 5 degs.
-*        - Modified PlotLabels to ignore duplicate adjacent labels which
-*        determining overlap of labels.
-*     17-MAR-2004 (DSB):
-*        - Modified Typical to give normal weight to edge bins in
-*        histogram if these bins contain all the counts.
-*        - Modified DrawTicks to add extra minor ticks below first major
-*        tick value and above last major tick value.
-*        - Norm1 can reject usable tick mark values because of an
-*        inappropriate value being used on the other axis (i.e. one for
-*        which the position is undefined in grapics coords). Therfoer
-*        Norm1 has been modified to use 3 different reference values
-*        in an attempt to find one which gives good axis values.
-*     25-AUG-2004 (DSB):
-*        - Correct handling of "fmt" pointer in TickMarks function (identified 
-*        and reported by Bill Joye).
-*     14-SEP-2004 (DSB):
-*        - In EdgeLabels change definition of "distinct labels". Used to
-*        be that labels were distinct if they had different formatted
-*        labels. Now they are distinct if they have different floating
-*        point numerical values. Fixes a bug reported by Micah Johnson.
-*        - TickMarks re-structured to optimise the precision (no. of digits) 
-*        even if a value has been assigned for the Format attribute, but only 
-*        if the format specifier includes a wildcard precision specifier. For 
-*        instance, to get graphical separators a format must be specified 
-*        which included the "g" flag. As things were, this would prevent 
-*        the optimisation of the digits value. Can now use "dms.*g" to
-*        allow the number of digits to be optimised.
-*     29-SEP-2004 (DSB):
-*        - In FindMajTicks, begin the process of increasing "nfill" from
-*        a value of zero rather than one (in many cases no filling is
-*        needed).
-*        - In GetTicks (linear tick marks section) ensure that 10
-*        *different* gap sizes are used before giving up. Previously, the
-*        10 tests could include duplicated gap values.
-*     8-NOV-2004 (DSB):
-*        - In Norm1, try more alternative "other axis" values before
-*        accepting that a tick mark value cannot be normalised.
-*     2-FEB-2005 (DSB):
-*        - Avoid using astStore to allocate more storage than is supplied
-*        in the "data" pointer. This can cause access violations since 
-*        astStore will then read beyond the end of the "data" area.
-*     15-MAR-2005 (DSB):
-*        - Modified GridLines to use appropriate algorithm for choosing
-*        start of grid lines in cases where one axis has logarithmic tick 
-*        spacing and the other has linear tick spacing.
-*     21-MAR-2005 (DSB):
-*        - Added the Clip attribute.
-*     12-JUL-2005 (DSB):
-*        - Modified AxPlot so that Map1 only normalises if neither axis
-*        is a SkyAxis. Previously it normalised if either axis was not a
-*        SkyAxis.
-*     7-DEC-2005 (DSB):
-*        Free memory allocated by calls to astReadString.
-*     18-JAN-2006 (DSB)
-*        Add Abbrev attribute.
-*     14-FEB-2006 (DSB)
-*        Correct EdgeLabels to use gap size rather than EQUAL macro when
-*        comparing label values.
-*     17-FEB-2006 (DSB)
-*        Added escape sequences "%h+" and "%g+".
-*     21-MAR-2006 (DSB)
-*        Added extra status checks in TickMarks.
-*     18-MAY-2006 (DSB)
-*        Trans: use correct PointSet when tranforming to arbitrary
-*        clipping frame.
-*     26-MAY-2006 (DSB)
-*        Added LabelAt to TestAttrib.
-*     2-JUN-2006 (DSB)
-*        - In MAKE_GET2, return the set value if a value has been set
-*        without recalculating the defaults.
-*        - Fix bug that could cause segvio in Grid if clipping is used.
-*     5-JUN-2006 (DSB)
-*        Do not change the box returned by astBoundBox as a consequence
-*        of calling astGetAttrib.
-*     19-JUN-2006 (DSB)
-*        Changed the default line 0.0 from zero to 1.0.
-*     22-JUN-2006 (DSB)
-*        Include axis textual labels and title in the bounding box
-*        created by AST_GRID and returned by AST_BOUNDINGBOX.
-*     26-JUN-2006 (DSB)
-*        Set the Direction attribute in the base Frame of a Plot if an
-*        axis is reversed.
-*     29-JUN-2006 (DSB)
-*        - Guard against astGap calls that reach a minimum gap size.
-*        - Sort out splitting of long axis labels (such as date/time
-*        strings produced by TimeFrames).
-*     30-JUN-2006 (DSB)
-*        If abbreviating labels, display the last field for identical 
-*        neighbours rather than the whole value.
-*     10-JUL-2006 (DSB)
-*        Make astStripEscapes public so it can be used by the NDF library.
-*     7-AUG-2006 (DSB)
-*        Increase the number of attempts to find a new gap size from 5 to
-*        25 in GetTicks.
-*     24-OCT-2006 (DSB)
-*        Add the ForceExterior attribute so that SPLAT can have external
-*        axes even if there are no usable horizontal axis ticks (as requested 
-*        by PWD). Currently this attribute is not included in the public
-*        documentation, as it may cause problems. If it seems to work OK
-*        then it can be made public.
-*     25-JAN-2006 (DSB)
-*        Do not draw ticks marks that start outside the bounds of the
-*        axis they are labelling.
-*     27-FEB-2007 (DSB)
-*        - Change nominal Crv_scerr value from 5.0 to 1.5 (this avoids gaps
-*        in HPX grid plots being bridged by grid lines).
-*        - Double the dimension of the grid used by GoodGrid to avoid
-*        missing the pointy bits in a HPX projection.
-*     17-MAY-2007 (DSB)
-*        Exclude corner positions when determining the range of axis
-*        values covered by the plot. This gives better default gap sizes.
-*     11-JUN-2007 (DSB)
-*        Plug memory leaks.
-*     20-JUN-2007 (DSB)
-*        - Add attribute GrfContext.
-*        - Pass the GrfContext attribute value to each external grf function.
-*        External code that uses the astGrfSet function must be changed
-*        so that the external grf functions registered using astGrfSet 
-*        accept this new parameter.
-*     21-JUN-2007 (DSB)
-*        - Change GrfContext to be an Object rather than an integer.
-*     22-JUN-2007 (DSB)
-*        - Do not dump the GrfContext Object since it may cause an
-*        infinite dumping loop.
-*        - Allow a NULL vtab to be supplied when initialising a Plot
-*        structure. This causes the vtab defined locally within this 
-*        class to be used so that the new object behaves as a simple Plot.
-*     25-JUN-2007 (DSB)
-*        - Free the graphics context object when then the Plot is deleted.
-*        - Fix memory leak in FullForm.
-*        - Since the grfcontext object is only used by external code, store 
-*          a public object identifier for it in the Plot structure rather 
-*          than a true C pointer.
-*     26-JUN-2007 (DSB)
-*        Honour the LabelUp attribute value even if labels are drawn
-*        around the edges of the plot.
-*     28-JUN-2007 (DSB)
-*        - Make all axis attribute arrays 3 elements long rather than 2.
-*        - Add the protected methods astCopyPlotDefaults and astMirror.
-*        - Add public method astGetGrfContext, remove astSetGrfContext.
-*        - Fix memory leak.
-*     6-SEP-2007 (DSB):
-*        Dump and load any user-specified tick mark values.
-*     20-OCT-2009 (DSB):
-*        - Modify SplitValue so that it only splits long values if 
-*        previous long values were split, or if the value contains a 
-*        space.
-*        - Take account of zero height bounding boxes in UpdateConcat.
-*        - Correct Dump so that it dumps attributes for all available 
-*        axes (2 for a Plot, 3 for a Plot3D).
-*     12-JAN-2010 (DSB):
-*        Fix various memory leaks.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to the header
-   files that define class interfaces that they should make "protected"
-   symbols available. */
-#define astCLASS Plot
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macros to check for equality of floating point values. */
-#define EQUAL(aa,bb) (fabs((aa)-(bb))<=1.0E8*DBL_EPSILON*MAX(fabs(aa)+fabs(bb),DBL_EPSILON*1.0E-7))
-
-/* Values for constants used in this class. */
-#define CRV_NSEG       14 /* No. of curve segments drawn by function Crv */
-#define CRV_NPNT       15 /* CRV_NSEG plus one */
-#define CRV_MXENT      10 /* Max. no. of recursive entries into function Crv */
-#define MAJTICKS_OPT   10 /* Optimum number of major axiss or grid lines */
-#define MAJTICKS_MAX   14 /* Max. number of major ticks or grid lines */
-#define MAJTICKS_MIN    6 /* Min. number of major ticks or grid lines */
-#define EDGETICKS_DIM 100 /* No. of edge samples used to find tick marks */
-#define LEFT            0 /* Id for the left edge of the plotting area */
-#define TOP             1 /* Id for the top edge of the plotting area */
-#define RIGHT           2 /* Id for the right edge of the plotting area */
-#define BOTTOM          3 /* Id for the bottom edge of the plotting area */
-#define NOSTYLE      -999 /* A value which represents a null Style value */
-#define NOWIDTH     -99.9 /* A value which represents a null Style value */
-#define NOFONT       -999 /* A value which represents a null Style value */
-#define NOCOLOUR     -999 /* A value which represents a null Style value */
-#define NOSIZE      -99.9 /* A value which represents a null Style value */
-
-#if defined(THREAD_SAFE)
-#define GLOBALS_PROTO , AstGlobals *
-#define GLOBALS_ARG , AstGlobals *AST__GLOBALS
-#define GLOBALS_NAME , AST__GLOBALS
-#else
-#define GLOBALS_PROTO 
-#define GLOBALS_ARG 
-#define GLOBALS_NAME 
-#endif
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot.h"
-*     MAKE_CLEAR(attr,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPlot *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstPlot *this, int axis )
-*
-*     which implement a method for clearing a single value in a specified 
-*     multi-valued attribute for an axis of a Plot.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. LabelAt in "astClearLabelAt").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astClear" #attr, astGetClass( this ), \
-                axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Assign the "clear" value. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,Plot,Clear##attr))( this, axis, status ); \
-}   
-
-
-/*
-*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot.h"
-*     MAKE_GET(attr,type,bad_value,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstPlot *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( AstPlot *this, int axis )
-*
-*     which implement a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a Plot.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPlot *this, int axis, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astGet" #attr, astGetClass( this ), \
-                axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attr##_( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,Plot,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute 
-*     for a Plot.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot.h"
-*     MAKE_SET(attr,type,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPlot *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstPlot *this, int axis, <Type> value )
-*
-*     which implement a method for setting a single value in a specified
-*     multi-valued attribute for a Plot.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. LabelAt in "astSetLabelAt").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astSet" #attr, astGetClass( this ), \
-                axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Store the new value in the structure component. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPlot *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,Plot,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if a single value has been set in a 
-*     multi-valued attribute for a class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot.h"
-*     MAKE_TEST(attr,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstPlot *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstPlot *this, int axis )
-*
-*     which implement a method for testing if a single value in a specified 
-*     multi-valued attribute has been set for a class.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. LabelAt in "astTestLabelAt").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value. This can use the string "axis" to represent the zero-based
-*         index of the value within the attribute.
-*      nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPlot *this, int axis, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-/* Initialise */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astTest" #attr, astGetClass( this ), \
-                axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPlot *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,Plot,Test##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_GET3
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     MAKE_GET3(attr,attr,type,bad_value,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstPlot *this, int axis )
-*
-*     which implements a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a Plot. Note, no public
-*     interface function is created.
-*
-*     The value returned is the value which would actually be used if
-*     astGrid was called with the current set of Plot attributes. This
-*     includes calculating any dynamic defaults which would be used, and is
-*     consequently rather slow.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel"). The
-*        string "Used" is added on to the front of the supplied value.
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET3(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type GetUsed##attr( AstPlot *, int, int *status ); \
-static type GetUsed##attr( AstPlot *this, int axis, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astGetUsed" #attr, astGetClass( this ), \
-                axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* If the attribute is set, use its normal accessor. */\
-   } else if( astTest##attr( this, axis ) ) {\
-      result = astGet##attr( this, axis );\
-\
-/* Otherwise, re-calculate dynamic defaults by going through the motions of \
-   drawing the grid. Nothing is actually drawn because we set the protected \
-   attribute Ink to zero first. The calculated values are stored in the \
-   Plot structure. */ \
-   } else { \
-      astSetInk( this, 0 ); \
-      astGrid( this ); \
-      astClearInk( this ); \
-\
-/* Assign the result value. */ \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} 
-
-/*
-*
-*  Name:
-*     MAKE_SET3
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute 
-*     for a Plot. This is identical to MAKE_SET except that no external 
-*     interface function is created.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     MAKE_SET3(attr,type,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPlot *this, int axis, <Type> value )
-*
-*     which implements a method for setting a single value in a specified
-*     multi-valued attribute for a Plot.
-
-*  Parameters:
- *     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astSetLabel"). The
-*        string "Used" is added on to the front of the supplied value.
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET3(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void SetUsed##attr( AstPlot *, int, type, int *status ); \
-static void SetUsed##attr( AstPlot *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= ( nval ? nval : astGetNin( this ) ) ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astSetUsed" #attr, astGetClass( this ), \
-                axis + 1, ( nval ? nval : astGetNin( this ) ) ); \
-\
-/* Store the new value in the structure component. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} 
-
-/*
-*+
-*  Name:
-*     MAKE_GET2
-
-*  Purpose:
-*     Implement a method to get an attribute value for a class. 
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     MAKE_GET2(class,attr,type,bad_value,assign)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> GetUsed<Attr>( AstPlot *this )
-*
-*     which implement a method for getting a specified attribute value for a
-*     class. Note, no public interface function is created.
-*
-*     The value returned is the value which would actually be used if
-*     astGrid was called with the current set of Plot attributes. This
-*     includes calculating any dynamic defaults which would be used, and is
-*     consequently rather slow.
-
-*  Parameters:
-*     class
-*        The name (not the type) of the class to which the attribute belongs.
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel"). The
-*        string "Used" is added on to the front of the supplied value.
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_GET2(class,attr,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type GetUsed##attr( Ast##class *, int *status ); \
-static type GetUsed##attr( Ast##class *this, int *status ) { \
-   type result;               /* Result to be returned */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* If the attribute is set, use its normal accessor. */\
-   if( astTest##attr( this ) ) {\
-      result = astGet##attr( this );\
-\
-/* Otherwise, re-calculate dynamic defaults by going through the motions of \
-   drawing the grid. Nothing is actually drawn because we set the protected \
-   attribute Ink to zero first. The calculated values are stored in the \
-   Plot structure. */ \
-   } else { \
-      astSetInk( this, 0 ); \
-      astGrid( this ); \
-      astClearInk( this ); \
-\
-/* Assign the result value. */ \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*+
-*  Name:
-*     MAKE_SET2
-
-*  Purpose:
-*     Implement a method to set an attribute value for a class. This
-*     is identical to astMAKE_SET except that it does not create an
-*     external interface function, and it does create a private function
-*     prototype.
-
-*  Type:
-*     Protected macro.
-
-*  Synopsis:
-*     MAKE_SET2(class,attr,type,component,assign)
-
-*  Class Membership:
-*     Defined by the Plot class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void SetUsed<Attr>( AstPlot *this, <Type> value )
-*
-*     which implements a method for setting a specified attribute value for a
-*     class.
-
-*  Parameters:
-*      class
-*         The name (not the type) of the class to which the attribute belongs.
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. Label in "astSetLabel"). The string "Used" is added
-*         to the front.
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET2(class,attr,type,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void SetUsed##attr( Ast##class *, type, int *status ); \
-static void SetUsed##attr( Ast##class *this, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Store the new value in the structure component. */ \
-   this->component = (assign); \
-} 
-
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"             /* I/O channels */
-#include "cmpmap.h"              /* Compound mapping class */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "frame.h"               /* Coordinate frame descriptions */
-#include "frameset.h"            /* Parent FrameSet class */
-#include "grf.h"                 /* Low-level graphics interface */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */ 
-#include "plot.h"                /* Interface definition for this class */
-#include "pointset.h"            /* Class holding lists of positions */
-#include "keymap.h"              /* Hash maps */
-#include "skyaxis.h"             /* Sky coordinate axes */
-#include "skyframe.h"            /* Sky coordinate frames */
-#include "winmap.h"              /* Scale and shift mappings */
-#include "mathmap.h"             /* Algebraic mappings */
-#include "wcsmap.h"              /* FITS-WCS projectsions */
-#include "unitmap.h"             /* Unit mappings */
-#include "permmap.h"             /* Axis permutations */
-#include "region.h"              /* Frame regions */
-#include "globals.h"             /* Thread-safe global data access */
-
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <math.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Type Definitions */
-/* ======================= */
-typedef struct LabelList {
-   double index;
-   char *text;
-   double x;
-   double y;
-   char *just;
-   double upx;
-   double upy;
-   double val;
-   int priority;
-   const char *atext;
-   int saved_prio;
-} LabelList;
-
-/* Structure to hold static data used internally within the Crv function. */
-typedef struct CrvStatics {
-   double *pdl2;   /* Pointer to next squared segment length */
-   double *pdx;    /* Pointer to next segment X increment */
-   double *pdy;    /* Pointer to next segment Y increment */
-   double cosang;  /* Cosine of angle between adjacent segments */
-   double d0;      /* Distance to start of first sub-segment */
-   double delta;   /* Distance between adjacent sub-segments */
-   double dl;      /* Segment length in graphics coordinates */
-   double dll;     /* Segment length for previous segment */
-   double last_x;  /* Graphics X at the end of the previous segment */
-   double last_y;  /* Graphics Y at the end of the previous segment */
-   double limit2;  /* Shortest acceptable squared segment length */
-   double t1;      /* Increment in X */
-   double t2;      /* Increment in Y */
-   double t3;      /* Squared segment length */
-   double vx;      /* X component of unit vector for current segment */
-   double vxl;     /* X component of unit vector for previous segment */
-   double vy;      /* Y component of unit vector for current segment */
-   double vyl;     /* Y component of unit vector for previous segment */
-   int *seg0;      /* Pointer to current segment OK flag */
-   int *segm;      /* Pointer to previous segment OK flag */
-   int *segp;      /* Pointer to next segment OK flag */
-   int all_bad;    /* Are all supplied positions bad or clipped?  */
-   int el;         /* Total sub-segment count */
-   int j;          /* Sub-segment index */
-   int last_ok;    /* Was the previous position defined? */
-   int nel;        /* Total number of sub-segments */
-   int nlong;      /* No.of segments longer than limit2 */
-   int nseg;       /* Number of segments being sub-divided */
-   int nshort;     /* No.of segments shorter than limit2 */
-
-#ifdef CRV_TRACE
-   int levels[100];
-#endif
-
-} CrvStatics;
-
-/* Structure to hold static data used internally within the Crv function. */
-typedef struct GetTicksStatics {
-   AstFrame *frame;          /* Pointer to the current Frame */
-   AstMapping *map;          /* Pointer to Base->Current Mapping */
-   AstPointSet *pset;        /* Pointer to a PointSet holding physical coords */
-   double **ptr;             /* Pointer to physical coordinate values */
-   double defgaps[ 2 ];      /* Initial test gaps for each axis */
-   double typval[ 2 ];       /* Typical value on each axis */
-   double width[ 2 ];        /* Range of used axis values */
-   int maxticks;             /* Max. number of ticks on each axis */
-   int mintick;              /* Min. number of ticks on each axis */
-   int ngood[ 2 ];           /* No. of good physical values on each axis */
-   int bad;                  /* Were any bad pixels found? */
-} GetTicksStatics;
-
-/* Structure to hold static data used internally within the EdgeCrossings
-   function. */
-typedef struct EdgeCrossingsStatics {
-   AstFrame *frame;          /* Pointer to current Frame in Plot */
-   AstPointSet *pset1;       /* Graphics cooords at edge samples */
-   AstPointSet *pset2;       /* Physical cooords at edge samples */
-   AstPointSet *pset4;       /* Graphics cooords at offset edge samples */
-   double **ptr1;            /* Pointer to graphics coord. data */
-   double **ptr2;            /* Pointer to physical coord. data */
-   double **ptr4;            /* Pointer to graphics coord. data */
-   double edgehi;            /* High bound on varying graphics axis */
-   double edgelo;            /* Low bound on varying graphics axis */
-   double edgeval;           /* Constant graphics axis value along edge */
-   double limit;             /* Three times the RMS step size */
-   int dim;                  /* Extended number of samples */
-   int edgeax;               /* Graphics axis to which edgeval refers */
-   int paxis;                /* Axis used in first invocation */
-   int pedge;                /* Edge used in first invocation */
-} EdgeCrossingsStatics;
-
-
-/* Structure to hold static data used internally within the Map1
-   function. */
-typedef struct Map1Statics {
-   AstPointSet *pset1;       /* PointSet holding physical coords */
-   AstPointSet *pset2;       /* PointSet holding graphics coords */
-   double **ptr1;            /* Pointer to physical coord data */
-   double *pax;              /* Pointer to start of axis data */
-   double *ptr2[ 2 ];        /* Pointers to graphics coord data */
-   double *work1;            /* Pointer to work space */
-   double *work2;            /* Pointer to work space */
-   double axorig;            /* Distance offset */
-   double axscale;           /* Distance scale */
-   int neg;                  /* Negate axis values? */
-   int nl;                   /* No. of points in pset1 and pset2 */
-} Map1Statics;
-
-/* Structure to hold static data used internally within the Map2
-   function. */
-typedef struct Map2Statics {
-   AstPointSet *pset1;       /* PointSet holding graphics coords */
-   AstPointSet *pset2;       /* PointSet holding physical coords */
-   double **ptr2;            /* Pointer to physical coord data */
-   double *ptr1[ 2 ];        /* Pointers to graphics coord data */
-   int nl;                   /* No. of points in pset1 and pset2 */
-} Map2Statics;
-
-/* Structure to hold static data used internally within the Map3
-   function. */
-typedef struct Map3Statics {
-   AstPointSet *pset1;       /* PointSet holding physical coords */
-   AstPointSet *pset2;       /* PointSet holding graphics coords */
-   double **ptr1;            /* Pointer to physical coord data */
-   double *ptr2[ 2 ];        /* Pointers to graphics coord data */
-   int nc;                   /* No. of physical axes */
-   int nl;                   /* No. of points in pset1 and pset2 */
-   double *pos;              /* Pointer to memory for a single position */
-} Map3Statics;
-
-/* Structure to hold static data used internally within the Map4
-   function. */
-typedef struct Map4Statics {
-   AstPointSet *pset1;       /* PointSet holding distances */
-   AstPointSet *pset2;       /* PointSet holding physical coords */
-   AstPointSet *pset3;       /* PointSet holding graphics coords */
-   int nl;                   /* No. of points in pset1 and pset2 */
-} Map4Statics;
-
-/* Structure to hold static data used internally within the Map5
-   function. */
-typedef struct Map5Statics {
-   AstPointSet *pset1;       /* PointSet holding physical coords */
-   AstPointSet *pset2;       /* PointSet holding graphics coords */
-   double **ptr1;            /* Pointer to physical coord data */
-   double *ptr2[ 2 ];        /* Pointers to graphics coord data */
-   int nl;                   /* No. of points in pset1 and pset2 */
-} Map5Statics;
-
-/* Structure to hold information about tick marks for a single axis. */
-typedef struct TickInfo{
-   int nmajor;               /* No. of major tick marks */
-   int nminor;               /* No. of minor tick marks */
-   double *ticks;            /* Pointer to array of major tick mark values */
-   double *minticks;         /* Pointer to array of minor tick mark values */
-   char **labels;            /* Pointer to array of major tick mark labels */
-   double *start;            /* Start pos'n on other axis for each curve section */
-   double *length;           /* Length on other axis of each curve section */
-   int nsect;                /* No. of sections in curve */
-   char *fmt;                /* Pointer to format string used to create labels */
-   double gap;               /* The gap between major ticks */
-} TickInfo;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static void (* parent_removeframe)( AstFrameSet *, int, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int,
-                                          AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Strings giving the label for the graphics items corresponding to
-   AST__BORDER_ID, AST__GRIDLINE_ID, etc. */
-static char *GrfLabels = "Border Curves Title Markers Strings Axis1 Axis2 Axis3 "
-                         "NumLab1 NumLab2 NumLab3 TextLab1 TextLab2 TextLab3 "
-                         "Ticks1 Ticks2 Ticks3 Grid1 Grid2 Grid3 Axes NumLab "
-                         "TextLab Grid Ticks";
-
-/* Text values used to represent edges externally. */
-static const char *xedge[4] = { "left", "top", "right", "bottom" };
-
-/* Text values used to represent Labelling externally. */
-static const char *xlbling[2] = { "interior", "exterior" };
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GrfAttrs_nesting_t = 0; \
-   globals->Crv_nent_t = 0; \
-   globals->Box_lbnd_t[ 0 ] = FLT_MAX; \
-   globals->Box_ubnd_t[ 0 ] = FLT_MIN; \
-   globals->Boxp_lbnd_t[ 0 ] = FLT_MAX; \
-   globals->Boxp_ubnd_t[ 0 ] = FLT_MIN; \
-   globals->Box_lbnd_t[ 1 ] = FLT_MAX; \
-   globals->Box_ubnd_t[ 1 ] = FLT_MIN; \
-   globals->Boxp_lbnd_t[ 1 ] = FLT_MAX; \
-   globals->Boxp_ubnd_t[ 1 ] = FLT_MIN; \
-   globals->Boxp_freeze_t = 0; \
-   globals->Map1_plot_t = NULL; \
-   globals->Map1_map_t = NULL; \
-   globals->Map1_frame_t = NULL; \
-   globals->Map1_origin_t = NULL; \
-   globals->Map1_statics_t = NULL; \
-   globals->Map2_plot_t = NULL; \
-   globals->Map2_map_t = NULL; \
-   globals->Map2_statics_t = NULL; \
-   globals->Map3_plot_t = NULL; \
-   globals->Map3_map_t = NULL; \
-   globals->Map3_frame_t = NULL; \
-   globals->Map3_origin_t = NULL; \
-   globals->Map3_end_t = NULL; \
-   globals->Map3_statics_t = NULL; \
-   globals->Map4_plot_t = NULL; \
-   globals->Map4_map_t = NULL; \
-   globals->Map4_umap_t = NULL; \
-   globals->Map4_statics_t = NULL; \
-   globals->Map5_plot_t = NULL; \
-   globals->Map5_region_t = NULL; \
-   globals->Map5_map_t = NULL; \
-   globals->Map5_statics_t = NULL; \
-   globals->Poly_n_t = 0; \
-   globals->Curve_data_t.nbrk = -1; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->SplitValue_Buff[ 0 ] = 0; \
-   globals->StripEscapes_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Plot)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Plot,Class_Init)
-#define class_vtab astGLOBAL(Plot,Class_Vtab)
-#define grfattrs_nesting astGLOBAL(Plot,GrfAttrs_nesting_t)      
-#define grfattrs_attrs  astGLOBAL(Plot,GrfAttrs_attrs_t)      
-#define Crv_limit 	astGLOBAL(Plot,Crv_limit_t)      
-#define Crv_scerr 	astGLOBAL(Plot,Crv_scerr_t)      
-#define Crv_tol 	astGLOBAL(Plot,Crv_tol_t)        
-#define Crv_ux0 	astGLOBAL(Plot,Crv_ux0_t)        
-#define Crv_uy0 	astGLOBAL(Plot,Crv_uy0_t)        
-#define Crv_vxl 	astGLOBAL(Plot,Crv_vxl_t)        
-#define Crv_vyl 	astGLOBAL(Plot,Crv_vyl_t)        
-#define Crv_xhi 	astGLOBAL(Plot,Crv_xhi_t)        
-#define Crv_xl 		astGLOBAL(Plot,Crv_xl_t)         
-#define Crv_xlo 	astGLOBAL(Plot,Crv_xlo_t)        
-#define Crv_yhi 	astGLOBAL(Plot,Crv_yhi_t)        
-#define Crv_yl 		astGLOBAL(Plot,Crv_yl_t)         
-#define Crv_ylo 	astGLOBAL(Plot,Crv_ylo_t)        
-#define Crv_vxbrk 	astGLOBAL(Plot,Crv_vxbrk_t)      
-#define Crv_vybrk 	astGLOBAL(Plot,Crv_vybrk_t)      
-#define Crv_xbrk 	astGLOBAL(Plot,Crv_xbrk_t)       
-#define Crv_ybrk 	astGLOBAL(Plot,Crv_ybrk_t)       
-#define Crv_len 	astGLOBAL(Plot,Crv_len_t)        
-#define Crv_ink 	astGLOBAL(Plot,Crv_ink_t)        
-#define Crv_nbrk 	astGLOBAL(Plot,Crv_nbrk_t)       
-#define Crv_nent 	astGLOBAL(Plot,Crv_nent_t)       
-#define Crv_out 	astGLOBAL(Plot,Crv_out_t)        
-#define Crv_clip 	astGLOBAL(Plot,Crv_clip_t)       
-#define Crv_map		astGLOBAL(Plot,Crv_map_t)
-#define Box_lbnd 	astGLOBAL(Plot,Box_lbnd_t)       
-#define Box_ubnd 	astGLOBAL(Plot,Box_ubnd_t)       
-#define Boxp_lbnd 	astGLOBAL(Plot,Boxp_lbnd_t)      
-#define Boxp_ubnd 	astGLOBAL(Plot,Boxp_ubnd_t)      
-#define Boxp_freeze 	astGLOBAL(Plot,Boxp_freeze_t)    
-#define Poly_x 		astGLOBAL(Plot,Poly_x_t)         
-#define Poly_y 		astGLOBAL(Plot,Poly_y_t)         
-#define Poly_n 		astGLOBAL(Plot,Poly_n_t)         
-#define Map1_ncoord 	astGLOBAL(Plot,Map1_ncoord_t)        
-#define Map1_plot 	astGLOBAL(Plot,Map1_plot_t)      
-#define Map1_map 	astGLOBAL(Plot,Map1_map_t)       
-#define Map1_frame 	astGLOBAL(Plot,Map1_frame_t)     
-#define Map1_origin 	astGLOBAL(Plot,Map1_origin_t)    
-#define Map1_length 	astGLOBAL(Plot,Map1_length_t)    
-#define Map1_axis 	astGLOBAL(Plot,Map1_axis_t)      
-#define Map1_statics 	astGLOBAL(Plot,Map1_statics_t)      
-#define Map1_norm 	astGLOBAL(Plot,Map1_norm_t)      
-#define Map1_log 	astGLOBAL(Plot,Map1_log_t)       
-#define Map2_ncoord 	astGLOBAL(Plot,Map2_ncoord_t)        
-#define Map2_plot 	astGLOBAL(Plot,Map2_plot_t)      
-#define Map2_map 	astGLOBAL(Plot,Map2_map_t)       
-#define Map2_x0 	astGLOBAL(Plot,Map2_x0_t)        
-#define Map2_y0 	astGLOBAL(Plot,Map2_y0_t)        
-#define Map2_deltax 	astGLOBAL(Plot,Map2_deltax_t)    
-#define Map2_deltay 	astGLOBAL(Plot,Map2_deltay_t)    
-#define Map2_statics 	astGLOBAL(Plot,Map1_statics_t)      
-#define Map3_ncoord 	astGLOBAL(Plot,Map3_ncoord_t)        
-#define Map3_plot 	astGLOBAL(Plot,Map3_plot_t)      
-#define Map3_map 	astGLOBAL(Plot,Map3_map_t)       
-#define Map3_frame 	astGLOBAL(Plot,Map3_frame_t)     
-#define Map3_origin 	astGLOBAL(Plot,Map3_origin_t)    
-#define Map3_end 	astGLOBAL(Plot,Map3_end_t)       
-#define Map3_scale 	astGLOBAL(Plot,Map3_scale_t)     
-#define Map3_statics 	astGLOBAL(Plot,Map3_statics_t)      
-#define Map4_ncoord 	astGLOBAL(Plot,Map4_ncoord_t)        
-#define Map4_plot 	astGLOBAL(Plot,Map4_plot_t)      
-#define Map4_map 	astGLOBAL(Plot,Map4_map_t)       
-#define Map4_umap 	astGLOBAL(Plot,Map4_umap_t)      
-#define Map4_statics 	astGLOBAL(Plot,Map4_statics_t)      
-#define Map5_plot 	astGLOBAL(Plot,Map5_plot_t)      
-#define Map5_region 	astGLOBAL(Plot,Map5_region_t)      
-#define Map5_map 	astGLOBAL(Plot,Map5_map_t)       
-#define Map5_ncoord 	astGLOBAL(Plot,Map5_ncoord_t)       
-#define Map5_statics 	astGLOBAL(Plot,Map5_statics_t)      
-#define Curve_data 	astGLOBAL(Plot,Curve_data_t)      
-#define getattrib_buff  astGLOBAL(Plot,GetAttrib_Buff)      
-#define splitvalue_buff astGLOBAL(Plot,SplitValue_Buff)      
-#define stripescapes_buff astGLOBAL(Plot,StripEscapes_Buff)      
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Variables used within astGrfAttrs_ */
-static double grfattrs_attrs[ GRF__NATTR ]; /* Saved attribute values */
-static int grfattrs_nesting = 0;            /* Nesting level. */
-
-/* Variables used to pass information to the curve drawing functions. See 
-   the prologues of functions Crv and CrvLine for details. */
-static double Crv_limit;
-static double Crv_scerr;
-static double Crv_tol;
-static double Crv_ux0;
-static double Crv_uy0;
-static double Crv_vxl;
-static double Crv_vyl;
-static double Crv_xhi;
-static double Crv_xl;
-static double Crv_xlo;
-static double Crv_yhi;
-static double Crv_yl;
-static double Crv_ylo;
-static float *Crv_vxbrk;
-static float *Crv_vybrk;
-static float *Crv_xbrk;
-static float *Crv_ybrk;
-static float Crv_len;
-static int Crv_ink;
-static int Crv_nbrk;
-static int Crv_nent = 0;
-static int Crv_out;
-static int Crv_clip;
-static void (*Crv_map)( int, double *, double *, double *, const char *, const char *, int * );
-
-/* The lower and upper bounds of the graphics coordinates enclosing all
-   lines and numerical labels drawn by astGrid. */
-static float Box_lbnd[ 2 ] = {FLT_MAX, FLT_MAX };
-static float Box_ubnd[ 2 ] = {FLT_MIN, FLT_MIN };
-
-/* The lower and upper bounds of the graphics coordinates enclosing all
-   drawn graphics primatives, maintained by functions GLine, GMark and 
-   DrawText. */
-static float Boxp_lbnd[ 2 ] = {FLT_MAX, FLT_MAX };
-static float Boxp_ubnd[ 2 ] = {FLT_MIN, FLT_MIN };
-static int Boxp_freeze = 0;
-
-/* Variables used to stored buffered poly lines (see functions Opoly, Bpoly
-   and Apoly). */
-static float Poly_x[ AST__PLOT_POLY_MAX ];
-static float Poly_y[ AST__PLOT_POLY_MAX ];
-static int   Poly_n = 0;
-
-/* Variables used by function Map1. See the prologue of Map1 for details. */
-static int           Map1_ncoord;       
-static AstPlot      *Map1_plot = NULL; 
-static AstMapping   *Map1_map = NULL; 
-static AstFrame     *Map1_frame = NULL; 
-static const double *Map1_origin = NULL; 
-static double        Map1_length;
-static void         *Map1_statics = NULL;
-static int           Map1_axis;
-static int           Map1_norm;
-static int           Map1_log;
-
-/* Variables used by function Map2. See the prologue of Map2 for details. */
-static int           Map2_ncoord;       
-static AstPlot      *Map2_plot = NULL; 
-static AstMapping   *Map2_map = NULL; 
-static double        Map2_x0;
-static double        Map2_y0;
-static double        Map2_deltax;
-static double        Map2_deltay;
-static void         *Map2_statics = NULL;
-
-/* Variables used by function Map3. See the prologue of Map3 for details. */
-static int           Map3_ncoord;       
-static AstPlot      *Map3_plot = NULL; 
-static AstMapping   *Map3_map = NULL; 
-static AstFrame     *Map3_frame = NULL; 
-static const double *Map3_origin = NULL; 
-static const double *Map3_end = NULL; 
-static double        Map3_scale;
-static void         *Map3_statics = NULL;
-
-/* Variables used by function Map4. See the prologue of Map4 for details. */
-static int           Map4_ncoord;       
-static AstPlot      *Map4_plot = NULL; 
-static AstMapping   *Map4_map = NULL; 
-static AstMapping   *Map4_umap = NULL; 
-static void         *Map4_statics = NULL;
-
-/* Variables used by function Map5. See the prologue of Map5 for details. */
-static AstPlot      *Map5_plot = NULL; 
-static AstMapping   *Map5_map = NULL; 
-static AstRegion    *Map5_region = NULL; 
-static void         *Map5_statics = NULL;
-static int           Map5_ncoord;       
-
-/* A structure which stores information about the breaks in the last curve
-   drawn using the public methods "astGridLine" and "astCurve". */
-static AstPlotCurveData Curve_data;
-
-/* Buffers for strings returned by various functions. */
-static char splitvalue_buff[ 200 ];
-static char stripescapes_buff[ AST__PLOT_STRIPESCAPES_BUFF_LEN + 1 ];
-static char getattrib_buff[ 200 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPlotVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static double GetTol( AstPlot *, int * );
-static int TestTol( AstPlot *, int * );
-static void ClearTol( AstPlot *, int * );
-static void SetTol( AstPlot *, double, int * );
-
-static int GetGrid( AstPlot *, int * );
-static int TestGrid( AstPlot *, int * );
-static void ClearGrid( AstPlot *, int * );
-static void SetGrid( AstPlot *, int, int * );
-
-static int GetTickAll( AstPlot *, int * );
-static int TestTickAll( AstPlot *, int * );
-static void ClearTickAll( AstPlot *, int * );
-static void SetTickAll( AstPlot *, int, int * );
-
-static int GetForceExterior( AstPlot *, int * );
-static int TestForceExterior( AstPlot *, int * );
-static void ClearForceExterior( AstPlot *, int * );
-static void SetForceExterior( AstPlot *, int, int * );
-
-static int GetBorder( AstPlot *, int * );
-static int TestBorder( AstPlot *, int * );
-static void ClearBorder( AstPlot *, int * );
-static void SetBorder( AstPlot *, int, int * );
-
-static int GetInvisible( AstPlot *, int * );
-static int TestInvisible( AstPlot *, int * );
-static void ClearInvisible( AstPlot *, int * );
-static void SetInvisible( AstPlot *, int, int * );
-
-static int GetInk( AstPlot *, int * );
-static int TestInk( AstPlot *, int * );
-static void ClearInk( AstPlot *, int * );
-static void SetInk( AstPlot *, int, int * );
-
-static int GetClipOp( AstPlot *, int * );
-static int TestClipOp( AstPlot *, int * );
-static void ClearClipOp( AstPlot *, int * );
-static void SetClipOp( AstPlot *, int, int * );
-
-static int GetClip( AstPlot *, int * );
-static int TestClip( AstPlot *, int * );
-static void ClearClip( AstPlot *, int * );
-static void SetClip( AstPlot *, int, int * );
-
-static int GetGrf( AstPlot *, int * );
-static int TestGrf( AstPlot *, int * );
-static void ClearGrf( AstPlot *, int * );
-static void SetGrf( AstPlot *, int, int * );
-
-static int GetDrawTitle( AstPlot *, int * );
-static int TestDrawTitle( AstPlot *, int * );
-static void ClearDrawTitle( AstPlot *, int * );
-static void SetDrawTitle( AstPlot *, int, int * );
-
-static int GetDrawAxes( AstPlot *, int, int * );
-static int TestDrawAxes( AstPlot *, int, int * );
-static void ClearDrawAxes( AstPlot *, int, int * );
-static void SetDrawAxes( AstPlot *, int, int, int * );
-
-static int GetAbbrev( AstPlot *, int, int * );
-static int TestAbbrev( AstPlot *, int, int * );
-static void ClearAbbrev( AstPlot *, int, int * );
-static void SetAbbrev( AstPlot *, int, int, int * );
-
-static int GetEscape( AstPlot *, int * );
-static int TestEscape( AstPlot *, int * );
-static void ClearEscape( AstPlot *, int * );
-static void SetEscape( AstPlot *, int, int * );
-
-static double GetLabelAt( AstPlot *, int, int * );
-static int TestLabelAt( AstPlot *, int, int * );
-static void ClearLabelAt( AstPlot *, int, int * );
-static void SetLabelAt( AstPlot *, int, double, int * );
-
-static double GetNumLabGap( AstPlot *, int, int * );
-static int TestNumLabGap( AstPlot *, int, int * );
-static void ClearNumLabGap( AstPlot *, int, int * );
-static void SetNumLabGap( AstPlot *, int, double, int * );
-
-static double GetTextLabGap( AstPlot *, int, int * );
-static int TestTextLabGap( AstPlot *, int, int * );
-static void ClearTextLabGap( AstPlot *, int, int * );
-static void SetTextLabGap( AstPlot *, int, double, int * );
-
-static double GetCentre( AstPlot *, int, int * );
-static int TestCentre( AstPlot *, int, int * );
-static void ClearCentre( AstPlot *, int, int * );
-static void SetCentre( AstPlot *, int, double, int * );
-
-static double GetGap( AstPlot *, int, int * );
-static int TestGap( AstPlot *, int, int * );
-static void ClearGap( AstPlot *, int, int * );
-static void SetGap( AstPlot *, int, double, int * );
-
-static int GetLabelling( AstPlot *, int * );
-static int TestLabelling( AstPlot *, int * );
-static void ClearLabelling( AstPlot *, int * );
-static void SetLabelling( AstPlot *, int, int * );
-
-static double GetMajTickLen( AstPlot *, int, int * );
-static int TestMajTickLen( AstPlot *, int, int * );
-static void ClearMajTickLen( AstPlot *, int, int * );
-static void SetMajTickLen( AstPlot *, int, double, int * );
-
-static double GetLogGap( AstPlot *, int, int * );
-static int TestLogGap( AstPlot *, int, int * );
-static void ClearLogGap( AstPlot *, int, int * );
-static void SetLogGap( AstPlot *, int, double, int * );
-
-static double GetTitleGap( AstPlot *, int * );
-static int TestTitleGap( AstPlot *, int * );
-static void ClearTitleGap( AstPlot *, int * );
-static void SetTitleGap( AstPlot *, double, int * );
-
-static double GetMinTickLen( AstPlot *, int, int * );
-static int TestMinTickLen( AstPlot *, int, int * );
-static void ClearMinTickLen( AstPlot *, int, int * );
-static void SetMinTickLen( AstPlot *, int, double, int * );
-
-static int GetEdge( AstPlot *, int, int * );
-static int TestEdge( AstPlot *, int, int * );
-static void ClearEdge( AstPlot *, int, int * );
-static void SetEdge( AstPlot *, int, int, int * );
-
-static int GetLabelUp( AstPlot *, int, int * );
-static int TestLabelUp( AstPlot *, int, int * );
-static void ClearLabelUp( AstPlot *, int, int * );
-static void SetLabelUp( AstPlot *, int, int, int * );
-
-static int GetLogPlot( AstPlot *, int, int * );
-static int TestLogPlot( AstPlot *, int, int * );
-static void ClearLogPlot( AstPlot *, int, int * );
-static void SetLogPlot( AstPlot *, int, int, int * );
-
-static int GetLogTicks( AstPlot *, int, int * );
-static int TestLogTicks( AstPlot *, int, int * );
-static void ClearLogTicks( AstPlot *, int, int * );
-static void SetLogTicks( AstPlot *, int, int, int * );
-
-static int GetLogLabel( AstPlot *, int, int * );
-static int TestLogLabel( AstPlot *, int, int * );
-static void ClearLogLabel( AstPlot *, int, int * );
-static void SetLogLabel( AstPlot *, int, int, int * );
-
-static int GetNumLab( AstPlot *, int, int * );
-static int TestNumLab( AstPlot *, int, int * );
-static void ClearNumLab( AstPlot *, int, int * );
-static void SetNumLab( AstPlot *, int, int, int * );
-
-static int GetMinTick( AstPlot *, int, int * );
-static int TestMinTick( AstPlot *, int, int * );
-static void ClearMinTick( AstPlot *, int, int * );
-static void SetMinTick( AstPlot *, int, int, int * );
-
-static int GetTextLab( AstPlot *, int, int * );
-static int TestTextLab( AstPlot *, int, int * );
-static void ClearTextLab( AstPlot *, int, int * );
-static void SetTextLab( AstPlot *, int, int, int * );
-
-static int GetLabelUnits( AstPlot *, int, int * );
-static int TestLabelUnits( AstPlot *, int, int * );
-static void ClearLabelUnits( AstPlot *, int, int * );
-static void SetLabelUnits( AstPlot *, int, int, int * );
-
-static int GetStyle( AstPlot *, int, int * );
-static int TestStyle( AstPlot *, int, int * );
-static void ClearStyle( AstPlot *, int, int * );
-static void SetStyle( AstPlot *, int, int, int * );
-
-static int GetFont( AstPlot *, int, int * );
-static int TestFont( AstPlot *, int, int * );
-static void ClearFont( AstPlot *, int, int * );
-static void SetFont( AstPlot *, int, int, int * );
-
-static int GetColour( AstPlot *, int, int * );
-static int TestColour( AstPlot *, int, int * );
-static void ClearColour( AstPlot *, int, int * );
-static void SetColour( AstPlot *, int, int, int * );
-
-static double GetWidth( AstPlot *, int, int * );
-static int TestWidth( AstPlot *, int, int * );
-static void ClearWidth( AstPlot *, int, int * );
-static void SetWidth( AstPlot *, int, double, int * );
-
-static double GetSize( AstPlot *, int, int * );
-static int TestSize( AstPlot *, int, int * );
-static void ClearSize( AstPlot *, int, int * );
-static void SetSize( AstPlot *, int, double, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static AstFrameSet *Fset2D( AstFrameSet *, int, int * );
-static AstPointSet *DefGap( AstPlot *, double *, int *, double *, int *, const char *, const char *, int * );
-static AstPointSet *Trans( AstPlot *, AstFrame *, AstMapping *, AstPointSet *, int, AstPointSet *, int, const char *, const char *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstPlotCurveData **CleanCdata( AstPlotCurveData **, int * );
-static AstPlotCurveData **DrawGrid( AstPlot *, TickInfo **, int, const char *, const char *, int * );
-static TickInfo **CleanGrid( TickInfo **, int * );
-static TickInfo **GridLines( AstPlot *, double *, double *, int *, const char *, const char *, int * );
-static TickInfo *TickMarks( AstPlot *, int, double *, double *, int *, GetTicksStatics **, const char *, const char *, int * );
-static char **CheckLabels2( AstPlot *, AstFrame *, int, double *, int, char **, double, int * );
-static char *FindWord( char *, const char *, const char **, int * );
-static char *GrfItem( int, const char *, int *, int * );
-static const char *SplitValue( AstPlot *, const char *, int, int *, int * );
-static const char *JustMB( AstPlot *, int, const char *, float *, float *, float, float, const char *, float, float, float, float, float *, float *, const char *, const char *, int * );
-static double **MakeGrid( AstPlot *, AstFrame *, AstMapping *, int, int, double, double, double, double, int, AstPointSet **, AstPointSet**, int, const char *, const char *, int * );
-static double GetTicks( AstPlot *, int, double *, double **, int *, double **, int *, int, int *, double *, GetTicksStatics **, const char *, const char *, int * );
-static double GetUseSize( AstPlot *, int, int * );
-static AstKeyMap *GetGrfContext( AstPlot *, int * );
-static double GetUseWidth( AstPlot *, int, int * );
-static double GoodGrid( AstPlot *, int *, AstPointSet **, AstPointSet **, const char *, const char *, int * );
-static AstPointSet *GetDrawnTicks( AstPlot *, int, int, int * );
-static double Typical( int, double *, double, double, double *, int * );
-static int Border( AstPlot *, int * );
-static int Boundary( AstPlot *, const char *, const char *, int * );
-static int BoxCheck( float *, float *, float *, float *, int * );
-static int CGAttrWrapper( AstPlot *, int, double, double *, int, int * );
-static int CGCapWrapper( AstPlot *, int, int, int * );
-static int CGFlushWrapper( AstPlot *, int * );
-static int CGLineWrapper( AstPlot *, int, const float *, const float *, int * );
-static int CGMarkWrapper( AstPlot *, int, const float *, const float *, int, int * );
-static int CGQchWrapper( AstPlot *, float *, float *, int * );
-static int CGScalesWrapper( AstPlot *, float *, float *, int * );
-static int CGTextWrapper( AstPlot *, const char *, float, float, const char *, float, float, int * );
-static int CGTxExtWrapper( AstPlot *, const char *, float, float, const char *, float, float, float *, float *, int * );
-static int CheckLabels( AstPlot *, AstFrame *, int, double *, int, int, char **, double, int * );
-static int ChrLen( const char *, int * );
-static int Compare_LL( const void *, const void * );
-static int Compared( const void *, const void * );
-static int CountGood( int, double *, int * );
-static int Cross( float, float, float, float, float, float, float, float, int * );
-static int CvBrk( AstPlot *, int, double *, double *, double *, int * );
-static int EdgeCrossings( AstPlot *, int, int, double, double *, double **, EdgeCrossingsStatics **, const char *, const char *, int * );
-static int EdgeLabels( AstPlot *, int, TickInfo **, AstPlotCurveData **, int, const char *, const char *, int * );
-static int FindDPTZ( AstFrame *, int, const char *, const char *, int *, int *, int * );
-static int FindMajTicks( AstMapping *, AstFrame *, int, double, double, double , double *, int, double *, double **, int * );
-static int FindMajTicks2( int, double, double, int, double *, double **, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int FullForm( const char *, const char *, const char *, const char *, const char *, int * );
-static int GCap( AstPlot *, int, int, int * );
-static int GVec( AstPlot *, AstMapping *, double *, int, double, AstPointSet **, AstPointSet **, double *, double *, double *, double *, int *, const char *, const char *, int * );
-static int GetUseColour( AstPlot *, int, int * );
-static int GetUseFont( AstPlot *, int, int * );
-static int GetUseStyle( AstPlot *, int, int * );
-static int HasEscapes( const char *, int * );
-static int IdFind( int, int, int *, int *, int *, int * );
-static int Inside( int, float *, float *, float, float, int * );
-static int IsASkyAxis( AstFrame *, int, int * );
-static int IsASkyFrame( AstObject *, int * );
-static int Overlap( AstPlot *, int, int, const char *, float, float, const char *, float, float, float **, const char *, const char *, int * );
-static int PopGat( AstPlot *, float *, const char *, const char *, int * );
-static int RegionOutline( AstPlot *, AstFrame *, const char *, const char *, int * );
-static int TestUseColour( AstPlot *, int, int * );
-static int TestUseFont( AstPlot *, int, int * );
-static int TestUseSize( AstPlot *, int, int * );
-static int TestUseStyle( AstPlot *, int, int * );
-static int TestUseWidth( AstPlot *, int, int * );
-static int ToggleLogLin( AstPlot *, int, int, const char *, int * );
-static int TraceBorder( AstPlot *, AstMapping *, double, double, double, double, int, double, int[ 4 ], const char *, const char *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static void Mirror( AstPlot *, int, int * );
-static void SetTickValues( AstPlot *, int, int, double *, int, double *, int * );
-static int swapEdges( AstPlot *, TickInfo **, AstPlotCurveData **, int * );
-static void AddCdt( AstPlotCurveData *, AstPlotCurveData *, const char *, const char *, int * );
-static void Apoly( AstPlot *, float, float, const char *, const char *, int * );
-static void AxPlot( AstPlot *, int, const double *, double, int, AstPlotCurveData *, const char *, const char *, int * );
-static void BoundingBox( AstPlot *, float[2], float[2], int * );
-static void Bpoly( AstPlot *, float, float, const char *, const char *, int * );
-static void Clip( AstPlot *, int, const double [], const double [], int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CopyPlotDefaults( AstPlot *, int, AstPlot *, int, int * );
-static void Crv( AstPlot *this, double *, double *, double *, int, double *, CrvStatics *, const char *, const char *, int * );
-static void CrvLine( AstPlot *this, double, double, double, double, const char *, const char *, int * );
-static void Curve( AstPlot *, const double [], const double [], int * );
-static void CurvePlot( AstPlot *, const double *, const double *, int , AstPlotCurveData *, const char *, const char *, int * );
-static void Delete( AstObject *, int * );
-static void DrawAxis( AstPlot *, TickInfo **, double *, double *, const char *, const char *, int * );
-static void DrawText( AstPlot *, int, int, const char *, float, float, const char *, float, float, float *, float *, float *, const char *, const char *, int * );
-static void DrawTicks( AstPlot *, TickInfo **, int, double *, double *, const char *, const char *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GAttr( AstPlot *, int, double, double *, int, const char *, const char *, int * );
-static void GFlush( AstPlot *, const char *, const char *, int * )__attribute__((unused));
-static void GLine( AstPlot *, int, const float *, const float *, const char *, const char *, int * );
-static void GMark( AstPlot *, int, const float *, const float *, int, const char *, const char *, int * );
-static void GQch( AstPlot *, float *, float *, const char *, const char *, int * );
-static void GScales( AstPlot *, float *, float *, const char *, const char *, int * );
-static void GText( AstPlot *, const char *, float, float, const char *, float, float, const char *, const char *, int * );
-static void GTxExt( AstPlot *, const char *, float , float, const char *, float, float, float *, float *, const char *, const char *, int * );
-static void GenCurve( AstPlot *, AstMapping *, int * );
-static int GraphGrid( int, int, double, double, double, double, double **, int * );
-static void GrfPop( AstPlot *, int * );
-static void GrfPush( AstPlot *, int * );
-static void GrfSet( AstPlot *, const char *,  AstGrfFun, int * );
-static void GrfWrapper( AstPlot *, const char *,  AstGrfWrap, int * );
-static void Grid( AstPlot *, int * );
-static void GridLine( AstPlot *, int, const double [], double, int * );
-static void InterpEscape( AstPlot *, int, double, float *, float *, float, float, float, float, const char *, float *, double, double, double, double, double, const char *, const char *, int * );
-static void Labelat( AstPlot *, TickInfo **, AstPlotCurveData **, double *, const char *, const char *, int * );
-static void Labels( AstPlot *, TickInfo **, AstPlotCurveData **, double *, double *, const char *, const char *, int * );
-static void LinePlot( AstPlot *, double, double, double, double, int, AstPlotCurveData *, const char *, const char *, int * );
-static void Map1( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map2( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map3( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map4( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Map5( int, double *, double *, double *, const char *, const char *, int * GLOBALS_PROTO );
-static void Mark( AstPlot *, int, int, int, const double *, int, int * );
-static void Norm1( AstMapping *, int, int, double *, double, double, int * );
-static void Opoly( AstPlot *, const char *, const char *, int * );
-static void PlotLabels( AstPlot *, int, AstFrame *, int, LabelList *, char *, int, float **, const char *, const char *, int * );
-static void PolyCurve( AstPlot *, int, int, int, const double *, int * );
-static void PurgeCdata( AstPlotCurveData *, int * );
-static void PushGat( AstPlot *, float, const char *, const char *, int * );
-static void RemoveFrame( AstFrameSet *, int, int * );
-static void RightVector( AstPlot *, float *, float *, float *, float *, const char *, const char *, int * );
-static void SaveTick( AstPlot *, int, double, double, int, int * );
-static void Text( AstPlot *, const char *, const double [], const float [], const char *, int * );
-static void TextLabels( AstPlot *, int, int *, const char *, const char *, int * );
-static void Ticker( AstPlot *, int, int, double, double *, double, int, int, EdgeCrossingsStatics **, const char *, const char *, int * );
-static void UpdateConcat( float *, float *, float, float, float, float, float *, float *, float, float, float *, float *, float *, float *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Functions which access class attributes. */
-/* =======================================  */
-/* Implement member functions to access the attributes associated with this
-   class using the macros defined for this purpose in the "object.h" file. For
-   a description of each attribute, see the class interface (in the associated
-   .h file). */
-
-/* Tol. */
-/* ---- */
-/*
-*att++
-*  Name:
-*     Tol
-
-*  Purpose:
-*     Plotting tolerance.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the plotting tolerance (or resolution)
-*     to be used for the graphical output produced by a Plot.  Smaller
-*     values will result in smoother and more accurate curves being
-*     drawn, but may slow down the plotting process. Conversely,
-*     larger values may speed up the plotting process in cases where
-*     high resolution is not required.
-*
-*     The Tol value should be given as a fraction of the minimum
-*     dimension of the plotting area, and should lie in the range
-c     from 1.0e-7 to 1.0. By default, a value of 0.01 is used.
-f     from 1.0E-7 to 1.0. By default, a value of 0.01 is used.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*att--
-*/
-/* The plotting tolerance. Has a value of -1.0 when not set yielding a 
-default value of 0.01. Usable values are in the range 1.0E-7 to 1.0. */
-astMAKE_CLEAR(Plot,Tol,tol,-1.0)
-astMAKE_GET(Plot,Tol,double,0.01,(this->tol == -1.0 ? 0.01 : this->tol))
-astMAKE_SET(Plot,Tol,double,tol,MIN(MAX(value,1.0E-7),1.0))
-astMAKE_TEST(Plot,Tol,( this->tol != -1.0 ))
-
-/* Grid. */
-/* ----- */
-/*
-*att++
-*  Name:
-*     Grid
-
-*  Purpose:
-*     Draw grid lines for a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether grid lines (a grid of curves marking the "major" values
-*     on each axis) are drawn across the plotting area.
-*
-*     If the Grid value of a Plot is non-zero, then grid lines will be
-*     drawn. Otherwise, short tick marks on the axes are used to mark
-*     the major axis values.  The default behaviour is to use tick
-*     marks if the entire plotting area is filled by valid physical
-*     coordinates, but to draw grid lines otherwise.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The spacing between major axis values, which determines the
-*     spacing of grid lines, may be set using the Gap(axis) attribute.
-*att--
-*/
-/* If non-zero use lines instead of tick marks in a coordinate grid. Has a 
-value of -1 when not set yielding a default value of 0. */
-astMAKE_CLEAR(Plot,Grid,grid,-1)
-astMAKE_GET(Plot,Grid,int,0,(this->grid == -1 ? 0 : this->grid))
-astMAKE_SET(Plot,Grid,int,grid,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Grid,( this->grid != -1 ))
-
-MAKE_GET2(Plot,Grid,int,0,this->ugrid)
-MAKE_SET2(Plot,Grid,int,ugrid,( value ? 1 : 0 ))
-
-/* Invisible. */
-/* ---------- */
-/*
-*att++
-*  Name:
-*     Invisible
-
-*  Purpose:
-*     Draw graphics using invisible ink?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of all graphics produced by
-*     Plot methods by determining whether graphics should be visible or
-*     invisible.
-*
-*     If the Invisible value of a Plot is non-zero, then all the Plot
-*     methods which normally generate graphical output do not do so (you
-*     can think of them drawing with "invisible ink"). Such methods do,
-*     however, continue to do all the calculations which would be needed to 
-*     produce the graphics. In particular, the bounding box enclosing the
-*     graphics is still calculated and can be retrieved as normal using
-c     astBoundingBox. The default value is zero, resulting in all methods
-f     AST_BOUNDINGBOX. The default value is zero, resulting in all methods
-*     drawing graphics as normal, using visible ink.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*att--
-*/
-/* If non-zero use invisible ink. Has a value of -1 when not set yielding 
-a default value of 0. */
-astMAKE_CLEAR(Plot,Invisible,invisible,-1)
-astMAKE_GET(Plot,Invisible,int,0,(this->invisible == -1 ? 0 : this->invisible))
-astMAKE_SET(Plot,Invisible,int,invisible,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Invisible,( this->invisible != -1 ))
-
-/* TickAll */
-/* ------- */
-/*
-*att++
-*  Name:
-*     TickAll
-
-*  Purpose:
-*     Draw tick marks on all edges of a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether tick marks should be drawn on all edges of a Plot.
-*
-*     If the TickAll value of a Plot is non-zero (the default), then
-*     tick marks will be drawn on all edges of the Plot. Otherwise,
-*     they will be drawn only on those edges where the numerical and
-*     descriptive axis labels are drawn (see the Edge(axis)
-*     attribute).
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - In some circumstances, numerical labels and tick marks are
-*     drawn along grid lines inside the plotting area, rather than
-*     around its edges (see the Labelling attribute).  In this case,
-*     the value of the TickAll attribute is ignored.
-*att--
-*/
-/* If non-zero put tick marks on opposite edges. Has a value of -1 when not 
-set yielding a default value of 1. */
-astMAKE_CLEAR(Plot,TickAll,tickall,-1)
-astMAKE_GET(Plot,TickAll,int,1,(this->tickall == -1 ? 1 : this->tickall))
-astMAKE_SET(Plot,TickAll,int,tickall,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,TickAll,( this->tickall != -1 ))
-
-/* ForceExterior */
-/* ------------- */
-/*
-*att+
-*  Name:
-*     ForceExterior
-
-*  Purpose:
-*     Force the use of exterior labelling?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by forcing
-f     coordinate grid (drawn with the AST_GRID routine) by forcing
-*     labels and tick marks to be drawn round the edges of the plot 
-*     (rather than across the middle of the plot), even if there appear
-*     to be insufficient edge crossings to justify the use of exterior
-*     labelling. 
-*
-*     The default value of zero results in the decision about whether to
-*     use interior or exterior labelling being made purely on the basis
-*     of the value of the Labelling attribute. If ForceExterior is set to
-*     a non-zero value, then the Labelling attribute is ignored and exterior
-*     labelling will always be attempted, even if there appear to be
-*     insufficient edge labels to justify their use.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The value of this attribute is currently under investigation, and
-*     so this attribute prologue is currently marked as protected rather 
-*     than public (in order to prevent it being included in the public
-*     documentation).
-*att-
-*/
-astMAKE_CLEAR(Plot,ForceExterior,forceexterior,-1)
-astMAKE_GET(Plot,ForceExterior,int,0,(this->forceexterior == -1 ? 0 : this->forceexterior))
-astMAKE_SET(Plot,ForceExterior,int,forceexterior,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,ForceExterior,( this->forceexterior != -1 ))
-
-/*
-*att++
-*  Name:
-*     Border
-
-*  Purpose:
-*     Draw a border around valid regions of a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether a border is drawn around regions corresponding to the
-c     valid physical coordinates of a Plot (c.f. astBorder).
-f     valid physical coordinates of a Plot (c.f. AST_BORDER).
-*
-*     If the Border value of a Plot is non-zero, then this border will
-*     be drawn as part of the grid. Otherwise, the border is not drawn
-*     (although axis labels and tick marks will still appear, unless
-*     other relevant Plot attributes indicate that they should
-*     not). The default behaviour is to draw the border if tick marks
-*     and numerical labels will be drawn around the edges of the
-*     plotting area (see the Labelling attribute), but to omit it
-*     otherwise.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*att--
-*/
-/* If non-zero draw the border. Has a value of -1 when not set, yeilding
-   a default of 1. */
-astMAKE_CLEAR(Plot,Border,border,-1)
-astMAKE_SET(Plot,Border,int,border,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Border,( this->border != -1 ))
-astMAKE_GET(Plot,Border,int,1,(this->border == -1 ? 1 : this->border))
-
-MAKE_SET2(Plot,Border,int,uborder,( value ? 1 : 0 ))
-MAKE_GET2(Plot,Border,int,1,this->uborder)
-
-/* Clip */
-/* ---- */
-/*
-*att++
-*  Name:
-*     Clip
-
-*  Purpose:
-*     Clip lines and/or markers at the Plot boundary?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute controls whether curves and markers are clipped at the 
-*     boundary of the graphics box specified when the Plot was created. A 
-*     value of 3 implies both markers and curves are clipped at the Plot
-*     boundary. A value of 2 implies markers are clipped, but not curves. A 
-*     value of 1 implies curves are clipped, but not markers. A value of
-*     zero implies neither curves nor markers are clipped. The default
-*     value is 1. Note, this attributes controls only the clipping
-*     performed internally within AST. The underlying graphics system may
-*     also apply clipping. In such cases, removing clipping using this
-*     attribute does not guarantee that no clipping will be visible in the 
-*     final plot.
-*
-c     The astClip function
-f     The AST_CLIP routine
-*     can be used to establish generalised clipping within arbitrary
-*     regions of the Plot.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*att--
-*/
-astMAKE_CLEAR(Plot,Clip,clip,-1)
-astMAKE_GET(Plot,Clip,int,0,(this->clip == -1 ? 1 : this->clip))
-astMAKE_TEST(Plot,Clip,( this->clip != -1 ))
-astMAKE_SET(Plot,Clip,int,clip,((value>=0&&value<=3)?value:(astError( AST__ATTIN, "astSetClip(Plot): Invalid value %d supplied for Clip attribute", status, value ), this->clip)))
-
-/* ClipOp */
-/* ------ */
-/*
-*att++
-*  Name:
-*     ClipOp
-
-*  Purpose:
-*     Combine Plot clipping limits using a boolean OR?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls how the clipping limits specified for
-c     each axis of a Plot (using the astClip function) are
-f     each axis of a Plot (using the AST_CLIP routine) are
-*     combined. This, in turn, determines which parts of the graphical
-*     output will be visible.
-*
-*     If the ClipOp attribute of a Plot is zero (the default),
-*     graphical output is visible only if it satisfies the clipping
-*     limits on all the axes of the clipping Frame (a boolean
-*     AND). Otherwise, if ClipOp is non-zero, output is visible if it
-*     satisfies the clipping limits on one or more axes (a boolean
-*     OR).
-*
-*     An important use of this attribute is to allow areas of a Plot
-*     to be left clear (e.g. as a background for some text). To
-*     achieve this, the lower and upper clipping bounds supplied to
-c     astClip should be reversed, and the ClipOp attribute of the
-f     AST_CLIP should be reversed, and the ClipOp attribute of the
-*     Plot should be set to a non-zero value.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*att--
-*/
-/* If non-zero only 1axis need be within the clipping bounds to avoid a
-point being clipped. Otherwise, all axes must be within bounds. */
-astMAKE_CLEAR(Plot,ClipOp,clipop,-1)
-astMAKE_GET(Plot,ClipOp,int,0,(this->clipop == -1 ? 0 : this->clipop))
-astMAKE_SET(Plot,ClipOp,int,clipop,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,ClipOp,( this->clipop != -1 ))
-
-/* Grf. */
-/* ---- */
-/*
-*att++
-*  Name:
-*     Grf
-
-*  Purpose:
-c     Use Grf functions registered through astGrfSet?
-f     Use Grf routines registered through AST_GRFSET?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-c     This attribute selects the functions which are used to draw graphics by 
-c     the Plot class. If it is zero, then the functions in the graphics 
-c     interface selected at link-time are used (see the ast_link script). 
-c     Otherwise, functions registered using astGrfSet are used. In this
-c     case, if a function is needed which has not been registered,
-c     then the function in the graphics interface selected at link-time is 
-c     used.
-f     This attribute selects the routines which are used to draw graphics by 
-f     the Plot class. If it is zero, then the routines in the graphics 
-f     interface selected at link-time are used (see the ast_link script). 
-f     Otherwise, routines registered using AST_GRFSET are used. In this
-f     case, if a routine is needed which has not been registered,
-f     then the routine in the graphics interface selected at link-time is 
-f     used.
-
-*     The default is to use the graphics interface 
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*     Plot3D
-*        The Plot3D class ignores this attributes, assuming a value of
-*        zero.
-
-*  Notes:
-*     - The value of this attribute is not saved when the Plot is written
-*     out through a Channel to an external data store. On re-loading such
-c     a Plot using astRead, the attribute will be cleared, resulting in the 
-f     a Plot using AST_READ, the attribute will be cleared, resulting in the 
-*     graphics interface selected at link-time being used.
-
-*att--
-*/
-/* Use Grf routines registered using astGrfSet? Has a 
-value of -1 when not set yielding a default of 0. */
-astMAKE_CLEAR(Plot,Grf,grf,-1)
-astMAKE_GET(Plot,Grf,int,0,(this->grf == -1 ? 0 : this->grf))
-astMAKE_SET(Plot,Grf,int,grf,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Grf,( this->grf != -1 ))
-
-/* DrawTitle */
-/* --------- */
-/*
-*att++
-*  Name:
-*     DrawTitle
-
-*  Purpose:
-*     Draw a title for a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether a title is drawn.
-*
-*     If the DrawTitle value of a Plot is non-zero (the default), then
-*     the title will be drawn, otherwise it will be omitted.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*     Plot3D
-*        The Plot3D class ignores this attributes, assuming a value of
-*        zero.
-
-*  Notes:
-*     - The text used for the title is obtained from the Plot's Title
-*     attribute.
-*     - The vertical placement of the title can be controlled using
-*     the TitleGap attribute.
-*att--
-*/
-/* If non-zero add a title to the grid. Has a value of -1 when not 
-set yielding a default value of 1. */
-astMAKE_CLEAR(Plot,DrawTitle,drawtitle,-1)
-astMAKE_GET(Plot,DrawTitle,int,1,(this->drawtitle == -1 ? 1 : this->drawtitle))
-astMAKE_SET(Plot,DrawTitle,int,drawtitle,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,DrawTitle,( this->drawtitle != -1 ))
-
-/* LabelUp. */
-/* -------  */
-/*
-*att++
-*  Name:
-*     LabelUp(axis)
-
-*  Purpose:
-*     Draw numerical Plot labels upright?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean). 
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether the numerical labels for each axis of a Plot should be
-*     drawn upright or not. It takes a separate value for each
-*     physical axis of a Plot so that, for instance, the setting
-*     "LabelUp(2)=1" specifies that numerical labels for the second
-*     axis should be drawn upright.
-*
-*     If the LabelUp value of a Plot axis is non-zero, it causes
-*     numerical labels for that axis to be plotted upright (i.e. as
-*     normal, horizontal text), otherwise labels are drawn parallel to 
-*     the axis to which they apply.
-*
-*     The default is to produce upright labels if the labels are placed
-*     around the edge of the plot, and to produce labels that follow the 
-*     axes if the labels are placed within the interior of the plot (see
-*     attribute Labelling).
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - In some circumstances, numerical labels and tick marks are
-*     drawn around the edges of the plotting area (see the Labelling
-*     attribute).  In this case, the value of the LabelUp attribute is
-*     ignored.
-*     - If no axis is specified, (e.g. "LabelUp" instead of
-*     "LabelUp(2)"), then a "set" or "clear" operation will affect the
-*     attribute value of all the Plot axes, while a "get" or "test"
-*     operation will use just the LabelUp(1) value.
-*att--
-*/
-/* Are numerical labels to be displayed on each axis? Has a value of -1 when 
-not set yielding a value of 0 (no) for both axes. */
-MAKE_CLEAR(LabelUp,labelup,-1,0)
-MAKE_GET(LabelUp,int,0,( this->labelup[axis] == -1 ? 0 : this->labelup[axis] ),0)
-MAKE_TEST(LabelUp,( this->labelup[axis] != -1 ),0)
-MAKE_SET(LabelUp,int,labelup,( value ? 1 : 0 ),0)
-
-/* DrawAxes */
-/* -------- */
-/*
-*att++
-*  Name:
-*     DrawAxes(axis)
-
-*  Purpose:
-*     Draw axes for a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether curves representing coordinate axes should be drawn.
-*     It takes a separate value for each physical axis of a
-*     Plot so that, for instance, the setting "DrawAxes(2)=0"
-*     specifies that no axis should be drawn for the second axis.
-*
-*     If drawn, these axis lines will pass through any tick marks
-*     associated with numerical labels drawn to mark values on the
-*     axes. The location of these tick marks and labels (and hence the
-*     axis lines) is determined by the Plot's LabelAt(axis) attribute.
-*
-*     If the DrawAxes value of a Plot is non-zero (the default), then
-*     axis lines will be drawn, otherwise they will be omitted.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - Axis lines are drawn independently of any coordinate grid
-*     lines (see the Grid attribute) so grid lines may be used to
-*     substitute for axis lines if required.
-*     - In some circumstances, numerical labels and tick marks are
-*     drawn around the edges of the plotting area (see the Labelling
-*     attribute).  In this case, the value of the DrawAxes attribute
-*     is ignored.
-*     - If no axis is specified, (e.g. "DrawAxes" instead of
-*     "DrawAxes(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the DrawAxes(1) value.
-*att--
-*/
-/* If non-zero draw a curve through the tick marks. Has a value of -1
-   when not set yielding a default value of 1. */
-MAKE_CLEAR(DrawAxes,drawaxes,-1,0)
-MAKE_GET(DrawAxes,int,1,( this->drawaxes[axis] == -1 ? 1 : this->drawaxes[axis] ),0)
-MAKE_TEST(DrawAxes,( this->drawaxes[axis] != -1 ),0)
-MAKE_SET(DrawAxes,int,drawaxes,( value ? 1 : 0 ),0)
-
-/* Abbrev */
-/* -------- */
-/*
-*att++
-*  Name:
-*     Abbrev(axis)
-
-*  Purpose:
-*     Abbreviate leading fields within numerical axis labels?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether matching leading fields should be removed from adjacent 
-*     numerical axis labels. It takes a separate value for each physical 
-*     axis of a Plot so that, for instance, the setting "Abbrev(2)=0"
-*     specifies that matching leading fields should not be removed on
-*     the second axis.
-*
-*     If the Abbrev value of a Plot is non-zero (the default), then
-*     leading fields will be removed from adjacent axis labels if they
-*     are equal.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - If no axis is specified, (e.g. "Abbrev" instead of
-*     "Abbrev(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the Abbrev(1) value.
-*att--
-*/
-MAKE_CLEAR(Abbrev,abbrev,-1,0)
-MAKE_GET(Abbrev,int,1,( this->abbrev[axis] == -1 ? 1 : this->abbrev[axis] ),0)
-MAKE_TEST(Abbrev,( this->abbrev[axis] != -1 ),0)
-MAKE_SET(Abbrev,int,abbrev,( value ? 1 : 0 ),0)
-
-/* Escape. */
-/* ------- */
-/*
-*att++
-*  Name:
-*     Escape
-
-*  Purpose:
-*     Allow changes of character attributes within strings?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of text strings and numerical
-c     labels drawn by the astGrid and (for the Plot class) astText functions,
-f     labels drawn by the AST_GRID and (for the Plot class) AST_TEXT routines,
-*     by determining if any escape sequences contained within the strings
-*     should be used to control the appearance of the text, or should
-*     be printed literally. Note, the Plot3D class only interprets escape
-*     sequences within the 
-c     astGrid function.
-f     AST_GRID routine.
-*
-*     If the Escape value of a Plot is one (the default), then any
-*     escape sequences in text strings produce the effects described
-*     below when printed. Otherwise, they are printed literally.
-*
-c     See also the astEscapes function.
-f     See also the AST_ESCAPES function.
-
-*  Escape Sequences:
-*     Escape sequences are introduced into the text string by a percent 
-*     "%" character. Any unrecognised, illegal or incomplete escape sequences 
-*     are printed literally. The following escape sequences are 
-*     currently recognised ("..." represents a string of one or more 
-*     decimal digits):
-*
-*       %%      - Print a literal "%" character.
-*
-*       %^...+  - Draw subsequent characters as super-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the super-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*       %^+     - Draw subsequent characters with the normal base-line.
-*
-*       %v...+  - Draw subsequent characters as sub-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the sub-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*
-*       %v+     - Draw subsequent characters with the normal base-line
-*                 (equivalent to %^+).
-*
-*       %>...+  - Leave a gap before drawing subsequent characters.
-*                 The digits "..." give the size of the gap, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*
-*       %<...+  - Move backwards before drawing subsequent characters.
-*                 The digits "..." give the size of the movement, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*
-*       %s...+  - Change the Size attribute for subsequent characters. The
-*                 digits "..." give the new Size as a fraction of the 
-*                 "normal" Size, scaled so that a value of "100" corresponds 
-*                 to 1.0;
-*
-*       %s+     - Reset the Size attribute to its "normal" value.
-*
-*       %w...+  - Change the Width attribute for subsequent characters. The
-*                 digits "..." give the new width as a fraction of the 
-*                 "normal" Width, scaled so that a value of "100" corresponds 
-*                 to 1.0;
-*
-*       %w+     - Reset the Size attribute to its "normal" value.
-*
-*       %f...+  - Change the Font attribute for subsequent characters. The
-*                 digits "..." give the new Font value.
-*
-*       %f+     - Reset the Font attribute to its "normal" value.
-*
-*       %c...+  - Change the Colour attribute for subsequent characters. The
-*                 digits "..." give the new Colour value.
-*
-*       %c+     - Reset the Colour attribute to its "normal" value.
-*
-*       %t...+  - Change the Style attribute for subsequent characters. The
-*                 digits "..." give the new Style value.
-*
-*       %t+     - Reset the Style attribute to its "normal" value.
-*
-*       %h+     - Remember the current horizontal position (see "%g+")
-*
-*       %g+     - Go to the horizontal position of the previous "%h+" (if any).
-*
-*       %-      - Push the current graphics attribute values onto the top of 
-*                 the stack (see "%+").
-*
-*       %+      - Pop attributes values of the top the stack (see "%-"). If
-*                 the stack is empty, "normal" attribute values are restored.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*att--
-*/
-
-/* Has a value of -1 when not set yeilding a default of 1. */
-astMAKE_GET(Plot,Escape,int,1,(this->escape == -1 ? 1 : this->escape))
-astMAKE_CLEAR(Plot,Escape,escape,-1)
-astMAKE_SET(Plot,Escape,int,escape,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Escape,( this->escape != -1 ))
-
-/* LabelAt(axis). */
-/* -------------- */
-/*
-*att++
-*  Name:
-*     LabelAt(axis)
-
-*  Purpose:
-*     Where to place numerical labels for a Plot
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     where numerical axis labels and associated tick marks are
-*     placed.  It takes a separate value for each physical axis of a
-*     Plot so that, for instance, the setting "LabelAt(2)=10.0"
-*     specifies where the numerical labels and tick marks for the
-*     second axis should be drawn.
-*
-*     For each axis, the LabelAt value gives the value on the other
-*     axis at which numerical labels and tick marks should be placed
-c     (remember that Plots suitable for use with astGrid may only
-f     (remember that Plots suitable for use with AST_GRID may only
-*     have two axes).  For example, in a celestial (RA,Dec) coordinate
-*     system, LabelAt(1) gives a Dec value which defines a line (of
-*     constant Dec) along which the numerical RA labels and their
-*     associated tick marks will be drawn. Similarly, LabelAt(2) gives
-*     the RA value at which the Dec labels and ticks will be drawn.
-*
-*     The default bahaviour is for the Plot to generate its own
-*     position for numerical labels and tick marks.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The LabelAt value should use the same units as are used
-*     internally for storing coordinate values on the appropriate
-*     axis. For example, with a celestial coordinate system, the
-*     LabelAt value should be in radians, not hours or degrees.
-*     - Normally, the LabelAt value also determines where the lines
-*     representing coordinate axes will be drawn, so that the tick
-*     marks will lie on these lines (but also see the DrawAxes
-*     attribute).
-*     - In some circumstances, numerical labels and tick marks are
-*     drawn around the edges of the plotting area (see the Labelling
-*     attribute).  In this case, the value of the LabelAt attribute is
-*     ignored.
-*att--
-*/
-/* The constant value on the other axis at which to place labels for
-   each axis. */
-MAKE_CLEAR(LabelAt,labelat,AST__BAD,0)
-MAKE_GET(LabelAt,double,AST__BAD,this->labelat[axis],0)
-MAKE_SET(LabelAt,double,labelat,value,0)
-MAKE_TEST(LabelAt,( this->labelat[axis] != AST__BAD ),0)
-
-MAKE_GET3(LabelAt,double,AST__BAD,this->ulblat[axis],0)
-MAKE_SET3(LabelAt,double,ulblat,value,0)
-
-/* Centre(axis). */
-/* ------------ */
-/* A value at which to place a tick mark. Other ticks marks are spaced at
-regular distances from this one. AST__BAD is stored if no value is supplied, 
-resulting in Plot choosing its own value. */
-MAKE_CLEAR(Centre,centre,AST__BAD,0)
-MAKE_GET(Centre,double,AST__BAD,this->centre[axis],0)
-MAKE_SET(Centre,double,centre,value,0)
-MAKE_TEST(Centre,( this->centre[axis] != AST__BAD ),0)
-
-MAKE_GET3(Centre,double,AST__BAD,this->ucentre[axis],0)
-MAKE_SET3(Centre,double,ucentre,value,0)
-
-/* Ink */
-/* --- */
-/* A protected attribute indicating if astGrid should draw using visible
-ink. The unset value is -1, yeilding a default value of 1. */
-astMAKE_CLEAR(Plot,Ink,ink,-1)
-astMAKE_GET(Plot,Ink,int,1,(this->ink == -1 ? 1 : this->ink))
-astMAKE_SET(Plot,Ink,int,ink,( value ? 1 : 0 ))
-astMAKE_TEST(Plot,Ink,( this->ink != -1 ))
-
-/* Gap(axis). */
-/* ---------- */
-/*
-*att++
-*  Name:
-*     Gap(axis)
-
-*  Purpose:
-*     Interval between linearly spaced major axis values of a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     the linear interval between the "major" axis values of a Plot, at
-*     which (for example) major tick marks are drawn. It takes a separate
-*     value for each physical axis of the Plot so that, for instance,
-*     the setting "Gap(2)=3.0" specifies the difference between adjacent major
-*     values along the second axis. The Gap attribute is only used when
-*     the LogTicks attribute indicates that the spacing between major axis
-*     values is to be linear. If major axis values are logarithmically spaced 
-*     then the gap is specified using attribute LogGap.
-*
-*     The Gap value supplied will usually be rounded to the nearest
-*     "nice" value, suitable (e.g.) for generating axis labels, before
-*     use. To avoid this "nicing" you should set an explicit format
-*     for the axis using the Format(axis) or Digits/Digits(axis)
-*     attribute. The default behaviour is for the Plot to generate its
-*     own Gap value when required, based on the range of axis values
-*     to be represented.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The Gap value should use the same units as are used internally
-*     for storing coordinate values on the corresponding axis. For
-*     example, with a celestial coordinate system, the Gap value
-*     should be in radians, not hours or degrees.
-*     - If no axis is specified, (e.g. "Gap" instead of "Gap(2)"),
-*     then a "set" or "clear" operation will affect the attribute
-*     value of all the Plot axes, while a "get" or "test" operation
-*     will use just the Gap(1) value.
-*att--
-*/
-/* The gap between tick marks on each axis. AST__BAD is stored if no
-value has been supplied, resulting in default values being found. */
-MAKE_CLEAR(Gap,gap,AST__BAD,0)
-MAKE_SET(Gap,double,gap,value,0)
-MAKE_TEST(Gap,( this->gap[axis] != AST__BAD ),0)
-MAKE_GET(Gap,double,AST__BAD,this->gap[axis],0)
-
-MAKE_SET3(Gap,double,ugap,value,0)
-MAKE_GET3(Gap,double,AST__BAD,this->ugap[axis],0)
-
-/* LogGap(axis). */
-/* ---------- */
-/*
-*att++
-*  Name:
-*     LogGap(axis)
-
-*  Purpose:
-*     Interval between major axis values of a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     the logarithmic interval between the "major" axis values of a Plot, at
-*     which (for example) major tick marks are drawn. It takes a separate
-*     value for each physical axis of the Plot so that, for instance,
-*     the setting "LogGap(2)=100.0" specifies the ratio between adjacent major
-*     values along the second axis. The LogGap attribute is only used when
-*     the LogTicks attribute indicates that the spacing between major axis
-*     values is to be logarithmic. If major axis values are linearly spaced 
-*     then the gap is specified using attribute Gap.
-*
-*     The LogGap value supplied will be rounded to the nearest power of 10.
-*     The reciprocal of the supplied value may be used if this is necessary 
-*     to produce usable major axis values. If a zero or negative value is 
-*     supplied, an error will be reported when the grid is drawn. The default 
-*     behaviour is for the Plot to generate its own LogGap value when 
-*     required, based on the range of axis values to be represented.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The LogGap value is a ratio between axis values and is therefore
-*     dimensionless.
-*     - If no axis is specified, (e.g. "LogGap" instead of "LogGap(2)"),
-*     then a "set" or "clear" operation will affect the attribute
-*     value of all the Plot axes, while a "get" or "test" operation
-*     will use just the LogGap(1) value.
-*att--
-*/
-/* The logarithmic gap between tick marks on each axis. AST__BAD is stored if 
-   no value has been supplied, resulting in default values being found. */
-MAKE_CLEAR(LogGap,loggap,AST__BAD,0)
-MAKE_SET(LogGap,double,loggap,value,0)
-MAKE_TEST(LogGap,( this->loggap[axis] != AST__BAD ),0)
-MAKE_GET(LogGap,double,AST__BAD,this->loggap[axis],0)
-
-MAKE_SET3(LogGap,double,uloggap,value,0)
-MAKE_GET3(LogGap,double,AST__BAD,this->uloggap[axis],0)
-
-/* LogPlot. */
-/* -------  */
-/*
-*att++
-*  Name:
-*     LogPlot(axis)
-
-*  Purpose:
-*     Map the plot logarithmically onto the screen?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean). 
-
-*  Description:
-*     This attribute controls the appearance of all graphics produced by
-*     the Plot, by determining whether the axes of the plotting surface
-*     are mapped logarithmically or linearly onto the base Frame of the 
-*     FrameSet supplied when the Plot was constructed. It takes a separate 
-*     value for each axis of the graphics coordinate system (i.e. the
-*     base Frame in the Plot) so that, for instance, the setting
-*     "LogPlot(2)=1" specifies that the second axis of the graphics
-*     coordinate system (usually the vertical axis) should be mapped
-*     logarithmically onto the second axis of the base Frame of the
-*     FrameSet supplied when the Plot was constructed. 
-*
-*     If the LogPlot value of a Plot axis is non-zero, it causes that
-*     axis to be mapped logarithmically, otherwise (the default) the axis
-*     is mapped linearly.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The setting of the LogPlot attribute provides the default value
-*     for the related LogTicks attribute. By selecting suitable values for 
-*     LogPlot and LogTicks, it is possible to have tick marks which are evenly 
-*     spaced in value but which are mapped logarithmically onto the screen 
-*     (and vice-versa).
-*     - An axis may only be mapped logarithmically if the visible part of
-*     the axis does not include the value zero. The visible part of the
-*     axis is that part which is mapped onto the plotting area, and is
-*     measured within the base Frame of the FrameSet which was supplied when
-*     the Plot was constructed. Any attempt to set LogPlot to a non-zero value 
-*     will be ignored (without error) if the visible part of the axis 
-*     includes the value zero
-*     - If no axis is specified, (e.g. "LogPlot" instead of
-*     "LogPlot(2)"), then a "set" or "clear" operation will affect the
-*     attribute value of all the Plot axes, while a "get" or "test"
-*     operation will use just the LogPlot(1) value.
-*att--
-*/
-/* Are plot axes to be mapped logarithmically? Has a value of -1 when 
-not set yielding a value of 0 (no) for both axes. */
-MAKE_GET(LogPlot,int,0,( this->logplot[axis] == -1 ? 0 : this->logplot[axis] ),0)
-MAKE_TEST(LogPlot,( this->logplot[axis] != -1 ),0)
-
-/* LogTicks. */
-/* -------  */
-/*
-*att++
-*  Name:
-*     LogTicks(axis)
-
-*  Purpose:
-*     Space the major tick marks logarithmically?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean). 
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether the major tick marks should be spaced logarithmically or 
-*     linearly in axis value. It takes a separate value for each physical 
-*     axis of the Plot so that, for instance, the setting "LogTicks(2)=1" 
-*     specifies that the major tick marks on the second axis should be 
-*     spaced logarithmically.
-*
-*     If the LogTicks value for a physical axis is non-zero, the major
-*     tick marks on that axis will be spaced logarithmically (that is,
-*     there will be a constant ratio between the axis values at adjacent 
-*     major tick marks). An error will be reported if the dynamic range of 
-*     the axis (the ratio of the largest to smallest displayed axis value) 
-*     is less than 10.0. If the LogTicks value is zero, the major tick marks 
-*     will be evenly spaced (that is, there will be a constant difference 
-*     between the axis values at adjacent major tick marks). The default is 
-*     to produce logarithmically spaced tick marks if the corresponding 
-*     LogPlot attribute is non-zero and the ratio of maximum axis value
-*     to minimum axis value is 100 or more. If either of these conditions
-*     is not met, the default is to produce linearly spaced tick marks.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The setting of the LogTicks attribute does not affect the mapping
-*     of the plot onto the screen, which is controlled by attribute LogPlot.
-*     By selecting suitable values for LogPlot and LogTicks, it is possible to 
-*     have tick marks which are evenly spaced in value but which are mapped 
-*     logarithmically onto the screen (and vica-versa).
-*     - An error will be reported when drawing an annotated axis grid if
-*     the visible part of the physical axis includes the value zero.
-*     - If no axis is specified, (e.g. "LogTicks" instead of
-*     "LogTicks(2)"), then a "set" or "clear" operation will affect the
-*     attribute value of all the Plot axes, while a "get" or "test"
-*     operation will use just the LogTicks(1) value.
-*att--
-*/
-/* Are ticksto be spaced logarithmically? Has a value of -1 when 
-   not set, yeielding a default value equal to the corresponding
-   LogPlot value. */
-MAKE_CLEAR(LogTicks,logticks,-1,0)
-MAKE_GET(LogTicks,int,0,( this->logticks[axis] == -1 ? astGetLogPlot(this,axis) : this->logticks[axis] ),0)
-MAKE_TEST(LogTicks,( this->logticks[axis] != -1 ),0)
-MAKE_SET(LogTicks,int,logticks,( value ? 1 : 0 ),0)
-
-MAKE_SET3(LogTicks,int,ulgtk,value,0)
-MAKE_GET3(LogTicks,int,0,this->ulgtk[axis],0)
-
-/* LogLabel. */
-/* --------  */
-/*
-*att++
-*  Name:
-*     LogLabel(axis)
-
-*  Purpose:
-*     Use exponential format for numerical axis labels?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean). 
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether the numerical axis labels should be in normal decimal form
-*     or should be represented as 10 raised to the appropriate power.
-*     That is, an axis value of 1000.0 will be drawn as "1000.0" if
-*     LogLabel is zero, but as "10^3" if LogLabel is non-zero. If
-*     graphical escape sequences are supported (see attribute Escape), 
-*     the power in such exponential labels will be drawn as a small 
-*     superscript instead of using a "^" character to represent
-*     exponentiation.
-*
-*     The default is to produce exponential labels if the major tick
-*     marks are logarithmically spaced (see the LogTicks attribute).
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - If no axis is specified, (e.g. "LogLabel" instead of
-*     "LogLabel(2)"), then a "set" or "clear" operation will affect the
-*     attribute value of all the Plot axes, while a "get" or "test"
-*     operation will use just the LogLabel(1) value.
-*att--
-*/
-/* Are labels to be drawn as 10**x? Has a value of -1 when not set, yeielding 
-   a default value equal to the corresponding LogTicks value. */
-MAKE_CLEAR(LogLabel,loglabel,-1,0)
-MAKE_GET(LogLabel,int,0,( this->loglabel[axis] == -1 ? astGetLogTicks(this,axis) : this->loglabel[axis] ),0)
-MAKE_TEST(LogLabel,( this->loglabel[axis] != -1 ),0)
-MAKE_SET(LogLabel,int,loglabel,( value ? 1 : 0 ),0)
-
-MAKE_SET3(LogLabel,int,ulglb,value,0)
-MAKE_GET3(LogLabel,int,0,this->ulglb[axis],0)
-
-/* MajTickLen. */
-/* ----------- */
-/*
-*att++
-*  Name:
-*     MajTickLen(axis)
-
-*  Purpose:
-*     Length of major tick marks for a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     the length of the major tick marks drawn on the axes of a Plot.
-*     It takes a separate value for each physical axis of the Plot so 
-*     that, for instance, the setting "MajTickLen(2)=0" specifies the 
-*     length of the major tick marks drawn on the second axis.
-*
-*     The MajTickLen value should be given as a fraction of the
-*     minimum dimension of the plotting area. Negative values cause
-*     major tick marks to be placed on the outside of the
-*     corresponding grid line or axis (but subject to any clipping
-*     imposed by the underlying graphics system), while positive
-*     values cause them to be placed on the inside.
-*
-*     The default behaviour depends on whether a coordinate grid is
-*     drawn inside the plotting area (see the Grid attribute). If so,
-*     the default MajTickLen value is zero (so that major ticks are
-*     not drawn), otherwise the default is +0.015.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - If no axis is specified, (e.g. "MajTickLen" instead of 
-*     "MajTickLen(2)"), then a "set" or "clear" operation will affect 
-*     the attribute value of all the Plot axes, while a "get" or "test" 
-*     operation will use just the MajTickLen(1) value.
-
-*att--
-*/
-/* Fractional length of major tick marks. Has a value of AST__BAD when not 
-set yielding a default value of 0.015. */
-MAKE_CLEAR(MajTickLen,majticklen,AST__BAD,0)
-MAKE_SET(MajTickLen,double,majticklen,value,0)
-MAKE_TEST(MajTickLen,( this->majticklen[axis] != AST__BAD ),0)
-MAKE_GET(MajTickLen,double,0.0,( this->majticklen[axis] == AST__BAD ? 0.015 : this->majticklen[axis]),0)
-
-MAKE_SET3(MajTickLen,double,umjtkln,value,0)
-MAKE_GET3(MajTickLen,double,0.0,this->umjtkln[axis],0)
-
-/* TitleGap. */
-/* --------- */
-/*
-*att++
-*  Name:
-*     TitleGap
-
-*  Purpose:
-*     Vertical spacing for a Plot title.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     where the title of a Plot is drawn.
-*
-*     Its value gives the spacing between the bottom edge of the title 
-*     and the top edge of a bounding box containing all the other parts 
-*     of the annotated grid. Positive values cause the title to be
-*     drawn outside the box, while negative values cause it to be drawn 
-*     inside.
-*
-*     The TitleGap value should be given as a fraction of the minimum
-*     dimension of the plotting area, the default value being +0.05.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*     Plot3D
-*        The Plot3D class ignores this attributes since it does not draw
-*        a Title.
-
-*  Notes:
-*     - The text used for the title is obtained from the Plot's Title
-*     attribute.
-*att--
-*/
-/* Fractional gap between titile and top edge. Has a value of AST__BAD when 
-not set yielding a default value of 0.05. */
-astMAKE_CLEAR(Plot,TitleGap,titlegap,AST__BAD)
-astMAKE_GET(Plot,TitleGap,double,0.0,( this->titlegap == AST__BAD ? 0.05 : this->titlegap))
-astMAKE_SET(Plot,TitleGap,double,titlegap,value)
-astMAKE_TEST(Plot,TitleGap,( this->titlegap != AST__BAD ))
-
-/* MinTickLen. */
-/* ----------- */
-/*
-*att++
-*  Name:
-*     MinTickLen(axis)
-
-*  Purpose:
-*     Length of minor tick marks for a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     the length of the minor tick marks drawn on the axes of a Plot.
-*     It takes a separate value for each physical axis of the Plot so 
-*     that, for instance, the setting "MinTickLen(2)=0" specifies the 
-*     length of the minor tick marks drawn on the second axis.
-*
-*     The MinTickLen value should be given as a fraction of the
-*     minimum dimension of the plotting area. Negative values cause
-*     minor tick marks to be placed on the outside of the
-*     corresponding grid line or axis (but subject to any clipping
-*     imposed by the underlying graphics system), while positive
-*     values cause them to be placed on the inside.
-*
-*     The default value is +0.007.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The number of minor tick marks drawn is determined by the
-*     Plot's MinTick(axis) attribute.
-*     - If no axis is specified, (e.g. "MinTickLen" instead of 
-*     "MinTickLen(2)"), then a "set" or "clear" operation will affect 
-*     the attribute value of all the Plot axes, while a "get" or "test" 
-*     operation will use just the MinTickLen(1) value.
-
-*att--
-*/
-/* Fractional length of minor tick marks. Has a value of AST__BAD when not 
-set yielding a default value of 0.007. */
-MAKE_CLEAR(MinTickLen,minticklen,AST__BAD,0)
-MAKE_SET(MinTickLen,double,minticklen,value,0)
-MAKE_TEST(MinTickLen,( this->minticklen[axis] != AST__BAD ),0)
-MAKE_GET(MinTickLen,double,0.0,( this->minticklen[axis] == AST__BAD ? 0.007 : this->minticklen[axis]),0)
-
-/* Labelling. */
-/* ---------- */
-/*
-*att++
-*  Name:
-*     Labelling
-
-*  Purpose:
-*     Label and tick placement option for a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     the strategy for placing numerical labels and tick marks for a Plot.
-*
-*     If the Labelling value of a Plot is "exterior" (the default), then 
-*     numerical labels and their associated tick marks are placed
-*     around the edges of the plotting area, if possible. If this is
-*     not possible, or if the Labelling value is "interior", then they
-*     are placed along grid lines inside the plotting area.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The LabelAt(axis) attribute may be used to determine the exact
-*     placement of labels and tick marks that are drawn inside the
-*     plotting area.
-*att--
-*/
-astMAKE_CLEAR(Plot,Labelling,labelling,-9999)
-astMAKE_SET(Plot,Labelling,int,labelling,(value?1:0))
-astMAKE_TEST(Plot,Labelling,( this->labelling != -9999 ))
-astMAKE_GET(Plot,Labelling,int,0,(this->labelling == -9999 ? 0 : this->labelling))
-
-MAKE_SET2(Plot,Labelling,int,ulbling,(value?1:0))
-MAKE_GET2(Plot,Labelling,int,0,this->ulbling)
-
-/* Edge. */
-/* ----- */
-/*
-*att++
-*  Name:
-*     Edge(axis)
-
-*  Purpose:
-*     Which edges to label in a Plot
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     which edges of a Plot are used for displaying numerical and
-*     descriptive axis labels. It takes a separate value for each
-*     physical axis of the Plot so that, for instance, the setting
-*     "Edge(2)=left" specifies which edge to use to display labels for
-*     the second axis.
-*
-*     The values "left", "top", "right" and "bottom" (or any
-*     abbreviation) can be supplied for this attribute. The default is
-*     usually "bottom" for the first axis and "left" for the second
-*     axis. However, if exterior labelling was requested (see the
-*     Labelling attribute) but cannot be produced using these default
-*     Edge values, then the default values will be swapped if this
-*     enables exterior labelling to be produced.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-*     Plot3D
-*        The Plot3D class ignores this attributes. Instead it uses its
-*        own RootCorner attribute to determine which edges of the 3D plot 
-*        to label. 
-
-*  Notes:
-*     - In some circumstances, numerical labels will be drawn along
-*     internal grid lines instead of at the edges of the plotting area
-*     (see the Labelling attribute). In this case, the Edge attribute
-*     only affects the placement of the descriptive labels (these are
-*     drawn at the edges of the plotting area, rather than along the
-*     axis lines).
-*att--
-*/
-/* The edges of the plotting area on which to place numerical labels
-   for axes 0 and 1. Has a value of -1 when not set yielding a value
-   of 3 (the bottom edge) for axis 0 and 0 (the left-hand edge) for
-   axis 1. */
-MAKE_CLEAR(Edge,edge,-1,0)
-MAKE_GET(Edge,int,0,( this->edge[axis] == -1 ? (axis?LEFT:BOTTOM) : this->edge[axis] ),0)
-MAKE_SET(Edge,int,edge,(abs( value % 4 )),0)
-MAKE_TEST(Edge,( this->edge[axis] != -1 ),0)
-
-MAKE_GET3(Edge,int,0,this->uedge[axis],0)
-MAKE_SET3(Edge,int,uedge,(abs( value % 4 )),0)
-
-/* NumLab. */
-/* -------- */
-/*
-*att++
-*  Name:
-*     NumLab(axis)
-
-*  Purpose:
-*     Draw numerical axis labels for a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean). 
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether labels should be drawn to represent the numerical values
-*     along each axis of a Plot. It takes a separate value for each
-*     physical axis of a Plot so that, for instance, the setting
-*     "NumLab(2)=1" specifies that numerical labels should be drawn
-*     for the second axis.
-*
-*     If the NumLab value of a Plot axis is non-zero (the default),
-*     then numerical labels will be drawn for that axis, otherwise
-*     they will be omitted.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The drawing of associated descriptive axis labels for a Plot
-*     (describing the quantity being plotted along each axis) is
-*     controlled by the TextLab(axis) attribute.
-*     - If no axis is specified, (e.g. "NumLab" instead of
-*     "NumLab(2)"), then a "set" or "clear" operation will affect the
-*     attribute value of all the Plot axes, while a "get" or "test"
-*     operation will use just the NumLab(1) value.
-*att--
-*/
-/* Are numerical labels to be displayed on each axis? Has a value of
-   -1 when not set yielding a value of 1 (yes) for both axes. */
-MAKE_CLEAR(NumLab,numlab,-1,0)
-MAKE_GET(NumLab,int,1,( this->numlab[axis] == -1 ? 1 : this->numlab[axis] ),0)
-MAKE_TEST(NumLab,( this->numlab[axis] != -1 ),0)
-MAKE_SET(NumLab,int,numlab,( value ? 1 : 0 ),0)
-
-/* NumLabGap. */
-/* --------- */
-/*
-*att++
-*  Name:
-*     NumLabGap(axis)
-
-*  Purpose:
-*     Spacing of numerical labels for a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     where numerical axis labels are placed relative to the axes they
-*     describe.  It takes a separate value for each physical axis of a
-*     Plot so that, for instance, the setting "NumLabGap(2)=-0.01"
-*     specifies where the numerical label for the second axis should
-*     be drawn.
-*
-*     For each axis, the NumLabGap value gives the spacing between the
-*     axis line (or edge of the plotting area, if appropriate) and the
-*     nearest edge of the corresponding numerical axis
-*     labels. Positive values cause the descriptive label to be placed
-*     on the opposite side of the line to the default tick marks,
-*     while negative values cause it to be placed on the same side.
-*
-*     The NumLabGap value should be given as a fraction of the minimum
-*     dimension of the plotting area, the default value being +0.01.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - If no axis is specified, (e.g. "NumLabGap" instead of
-*     "NumLabGap(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the NumLabGap(1) value.
-*att--
-*/
-/* Fractional spacing between numeric labels and axes. Has a value of AST__BAD 
-when not set yielding a default value of 0.01. */
-MAKE_CLEAR(NumLabGap,numlabgap,AST__BAD,0)
-MAKE_GET(NumLabGap,double,0.0,( this->numlabgap[ axis ] == AST__BAD ? 0.01 : this->numlabgap[axis]),0)
-MAKE_SET(NumLabGap,double,numlabgap,value,0)
-MAKE_TEST(NumLabGap,( this->numlabgap[axis] != AST__BAD ),0)
-
-/* MinTick. */
-/* -------- */
-/*
-*att++
-*  Name:
-*     MinTick(axis)
-
-*  Purpose:
-*     Density of minor tick marks for a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer. 
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     the density of minor tick marks which appear between the major
-*     axis values of a Plot. It takes a separate value for each
-*     physical axis of a Plot so that, for instance, the setting
-*     "MinTick(2)=2" specifies the density of minor tick marks along
-*     the second axis.
-*
-*     The value supplied should be the number of minor divisions
-*     required between each pair of major axis values, this being one
-*     more than the number of minor tick marks to be drawn.  By
-*     default, a value is chosen that depends on the gap between major
-*     axis values and the nature of the axis.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - If no axis is specified, (e.g. "MinTick" instead of
-*     "MinTick(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the MinTick(1) value.
-*att--
-*/
-/* How many divisions are there between major tick marks? Has a value
-of -1 when not set yielding a value of 1 for both axes. */
-MAKE_CLEAR(MinTick,mintick,-1,0)
-MAKE_GET(MinTick,int,1,( this->mintick[axis] == -1 ? 1 : this->mintick[axis] ),0)
-MAKE_TEST(MinTick,( this->mintick[axis] != -1 ),0)
-MAKE_SET(MinTick,int,mintick,( (value < 1)? 1 : value ),0)
-
-MAKE_GET3(MinTick,int,1,this->umintk[axis],0)
-MAKE_SET3(MinTick,int,umintk,( (value < 1)? 1 : value ),0)
-
-/* TextLab. */
-/* --------- */
-/*
-*att++
-*  Name:
-*     TextLab(axis)
-
-*  Purpose:
-*     Draw descriptive axis labels for a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean). 
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether textual labels should be drawn to describe the quantity
-*     being represented on each axis of a Plot. It takes a separate
-*     value for each physical axis of a Plot so that, for instance,
-*     the setting "TextLab(2)=1" specifies that descriptive labels
-*     should be drawn for the second axis.
-*
-*     If the TextLab value of a Plot axis is non-zero, then
-*     descriptive labels will be drawn for that axis, otherwise they
-*     will be omitted. The default behaviour is to draw descriptive
-*     labels if tick marks and numerical labels are being drawn around
-*     the edges of the plotting area (see the Labelling attribute),
-*     but to omit them otherwise.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The text used for the descriptive labels is derived from the
-*     Plot's Label(axis) attribute, together with its Unit(axis)
-*     attribute if appropriate (see the LabelUnits(axis) attribute).
-*     - The drawing of numerical axis labels for a Plot (which
-*     indicate values on the axis) is controlled by the NumLab(axis)
-*     attribute.
-*     - If no axis is specified, (e.g. "TextLab" instead of
-*     "TextLab(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the TextLab(1) value.
-*att--
-*/
-/* Are textual labels to be displayed on each axis? Has a value of -1
-   when not set yielding a value of 1 (yes) for both axes. */
-MAKE_CLEAR(TextLab,textlab,-1,0)
-MAKE_GET(TextLab,int,1,( this->textlab[axis] == -1 ? 1 : this->textlab[axis] ),0)
-MAKE_TEST(TextLab,( this->textlab[axis] != -1 ),0)
-MAKE_SET(TextLab,int,textlab,( value ? 1 : 0 ),0)
-
-MAKE_GET3(TextLab,int,1,this->utxtlb[axis],0)
-MAKE_SET3(TextLab,int,utxtlb,( value ? 1 : 0 ),0)
-
-/* TextLabGap. */
-/* ----------- */
-/*
-*att++
-*  Name:
-*     TextLabGap(axis)
-
-*  Purpose:
-*     Spacing of descriptive axis labels for a Plot.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     where descriptive axis labels are placed relative to the axes they
-*     describe.  It takes a separate value for each physical axis of a
-*     Plot so that, for instance, the setting "TextLabGap(2)=0.01"
-*     specifies where the descriptive label for the second axis should
-*     be drawn.
-*
-*     For each axis, the TextLabGap value gives the spacing between the
-*     descriptive label and the edge of a box enclosing all other parts
-*     of the annotated grid (excluding other descriptive labels). The gap
-*     is measured to the nearest edge of the label (i.e. the top or the 
-*     bottom). Positive values cause the descriptive label to be placed 
-*     outside the bounding box, while negative values cause it to be placed
-*     inside.
-*
-*     The TextLabGap value should be given as a fraction of the minimum
-*     dimension of the plotting area, the default value being +0.01.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - If drawn, descriptive labels are always placed at the edges of
-*     the plotting area, even although the corresponding numerical
-*     labels may be drawn along axis lines in the interior of the
-*     plotting area (see the Labelling attribute).
-*     - If no axis is specified, (e.g. "TextLabGap" instead of
-*     "TextLabGap(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the TextLabGap(1) value.
-*att--
-*/
-/* Fractional spacing between numeric labels and axes. Has a value of AST__BAD 
-when not set yielding a default value of 0.01. */
-MAKE_CLEAR(TextLabGap,textlabgap,AST__BAD,0)
-MAKE_GET(TextLabGap,double,0.0,( this->textlabgap[ axis ] == AST__BAD ? 0.01 : this->textlabgap[axis]),0)
-MAKE_SET(TextLabGap,double,textlabgap,value,0)
-MAKE_TEST(TextLabGap,( this->textlabgap[axis] != AST__BAD ),0)
-
-/* LabelUnits. */
-/* ----------- */
-/*
-*att++
-*  Name:
-*     LabelUnits(axis)
-
-*  Purpose:
-*     Use axis unit descriptions in a Plot?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     whether the descriptive labels drawn for each axis of a Plot
-*     should include a description of the units being used on the
-*     axis.  It takes a separate value for each physical axis of a
-*     Plot so that, for instance, the setting "LabelUnits(2)=1"
-*     specifies that a unit description should be included in the
-*     label for the second axis.
-*
-*     If the LabelUnits value of a Plot axis is non-zero, a unit
-*     description will be included in the descriptive label for that
-*     axis, otherwise it will be omitted.  The default behaviour is to
-*     include a unit description unless the current Frame of the Plot
-*     is a SkyFrame representing equatorial, ecliptic, galactic or
-*     supergalactic coordinates, in which case it is omitted.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - The text used for the unit description is obtained from the
-*     Plot's Unit(axis) attribute.
-*     - If no axis is specified, (e.g. "LabelUnits" instead of
-*     "LabelUnits(2)"), then a "set" or "clear" operation will affect
-*     the attribute value of all the Plot axes, while a "get" or
-*     "test" operation will use just the LabelUnits(1) value.
-*     - If the current Frame of the Plot is not a SkyFrame, but includes
-*     axes which were extracted from a SkyFrame, then the default behaviour
-*     is to include a unit description only for those axes which were not
-*     extracted from a SkyFrame.
-*att--
-*/
-/* Are textual labels to include a string describing the axis units? Has a 
-value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(LabelUnits,labelunits,-1,0)
-MAKE_TEST(LabelUnits,( this->labelunits[axis] != -1 ),0)
-MAKE_SET(LabelUnits,int,labelunits,( value ? 1 : 0 ),0)
-
-MAKE_GET3(LabelUnits,int,1,this->ulbunit[axis],0)
-MAKE_SET3(LabelUnits,int,ulbunit,( value ? 1 : 0 ),0)
-
-/* Style. */
-/* ------ */
-/*
-*att++
-*  Name:
-*     Style(element)
-
-*  Purpose:
-*     Line style for a Plot element.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute determines the line style used when drawing each
-*     element of graphical output produced by a Plot. It takes a
-*     separate value for each graphical element so that, for instance,
-*     the setting "Style(border)=2" causes the Plot border to be drawn
-*     using line style 2 (which might result in, say, a dashed line).
-*
-*     The range of integer line styles available and their appearance
-*     is determined by the underlying graphics system.  The default
-*     behaviour is for all graphical elements to be drawn using the
-*     default line style supplied by this graphics system (normally,
-*     this is likely to give a solid line).
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - For a list of the graphical elements available, see the
-*     description of the Plot class.
-*     - If no graphical element is specified, (e.g. "Style" instead of
-*     "Style(border)"), then a "set" or "clear" operation will affect
-*     the attribute value of all graphical elements, while a "get" or
-*     "test" operation will use just the Style(Border) value.
-*att--
-*/
-/* Line styles. Has a value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(Style,style,-1,AST__NPID)
-MAKE_GET(Style,int,1,( this->style[axis] == -1 ? 1 : this->style[axis] ),AST__NPID)
-MAKE_TEST(Style,( this->style[axis] != -1 ),AST__NPID)
-MAKE_SET(Style,int,style,value,AST__NPID)
-
-/* Font. */
-/* ----- */
-/*
-*att++
-*  Name:
-*     Font(element)
-
-*  Purpose:
-*     Character font for a Plot element.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute determines the character font index used when
-*     drawing each element of graphical output produced by a Plot. It
-*     takes a separate value for each graphical element so that, for
-*     instance, the setting "Font(title)=2" causes the Plot title to
-*     be drawn using font number 2.
-*
-*     The range of integer font indices available and the appearance
-*     of the resulting text is determined by the underlying graphics
-*     system.  The default behaviour is for all graphical elements to
-*     be drawn using the default font supplied by this graphics
-*     system.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - For a list of the graphical elements available, see the
-*     description of the Plot class.
-*     - If no graphical element is specified, (e.g. "Font" instead
-*     of "Font(title)"), then a "set" or "clear" operation will
-*     affect the attribute value of all graphical elements, while a
-*     "get" or "test" operation will use just the Font(TextLab)
-*     value.
-*att--
-*/
-/* Character fonts. Has a value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(Font,font,-1,AST__NPID)
-MAKE_GET(Font,int,1,( this->font[axis] == -1 ? 1 : this->font[axis] ),AST__NPID)
-MAKE_TEST(Font,( this->font[axis] != -1 ),AST__NPID)
-MAKE_SET(Font,int,font,value,AST__NPID)
-
-/* Colour. */
-/* ------- */
-/*
-*att++
-*  Name:
-*     Colour(element)
-
-*  Purpose:
-*     Colour index for a Plot element.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute determines the colour index used when drawing
-*     each element of graphical output produced by a Plot. It takes a
-*     separate value for each graphical element so that, for instance,
-*     the setting "Colour(title)=2" causes the Plot title to be drawn
-*     using colour index 2. The synonym "Color" may also be used.
-*
-*     The range of integer colour indices available and their
-*     appearance is determined by the underlying graphics system. The
-*     default behaviour is for all graphical elements to be drawn
-*     using the default colour index supplied by this graphics system
-*     (normally, this is likely to result in white plotting on a black
-*     background, or vice versa).
-d
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - For a list of the graphical elements available, see the
-*     description of the Plot class.
-*     - If no graphical element is specified, (e.g. "Colour" instead
-*     of "Colour(title)"), then a "set" or "clear" operation will
-*     affect the attribute value of all graphical elements, while a
-*     "get" or "test" operation will use just the Colour(TextLab)
-*     value.
-*att--
-*/
-/* Colours. Has a value of -1 when not set yielding a default of 1. */
-MAKE_CLEAR(Colour,colour,-1,AST__NPID)
-MAKE_GET(Colour,int,1,( this->colour[axis] == -1 ? 1 : this->colour[axis] ),AST__NPID)
-MAKE_TEST(Colour,( this->colour[axis] != -1 ),AST__NPID)
-MAKE_SET(Colour,int,colour,value,AST__NPID)
-
-/* Width. */
-/* ------ */
-/*
-*att++
-*  Name:
-*     Width(element)
-
-*  Purpose:
-*     Line width for a Plot element.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute determines the line width used when drawing each
-*     element of graphical output produced by a Plot.  It takes a
-*     separate value for each graphical element so that, for instance,
-*     the setting "Width(border)=2.0" causes the Plot border to be
-*     drawn using a line width of 2.0. A value of 1.0 results in a
-*     line thickness which is approximately 0.0005 times the length of
-*     the diagonal of the entire display surface.
-*
-*     The actual appearance of lines drawn with any particular width,
-*     and the range of available widths, is determined by the
-*     underlying graphics system.  The default behaviour is for all
-*     graphical elements to be drawn using the default line width
-*     supplied by this graphics system. This will not necessarily
-*     correspond to a Width value of 1.0.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - For a list of the graphical elements available, see the
-*     description of the Plot class.
-*     - If no graphical element is specified, (e.g. "Width" instead of
-*     "Width(border)"), then a "set" or "clear" operation will affect
-*     the attribute value of all graphical elements, while a "get" or
-*     "test" operation will use just the Width(Border) value.
-*att--
-*/
-/* Line widths. Has a value of AST__BAD when not set yielding a
-   default of 1.0. */
-MAKE_CLEAR(Width,width,AST__BAD,AST__NPID)
-MAKE_GET(Width,double,1.0,( this->width[axis] == AST__BAD ? 1.0 : this->width[axis] ),AST__NPID)
-MAKE_TEST(Width,( this->width[axis] != AST__BAD ),AST__NPID)
-MAKE_SET(Width,double,width,(value!=0.00)?value:(astError(AST__ATTIN,"astSetWidth(Plot):Invalid zero value supplied for Width(%s) attribute", status,GrfItem(axis,NULL,NULL, status )),this->width[axis]),AST__NPID)
-
-/* Size. */
-/* ----- */
-/*
-*att++
-*  Name:
-*     Size(element)
-
-*  Purpose:
-*     Character size for a Plot element.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating Point.
-
-*  Description:
-*     This attribute determines the character size used when drawing
-*     each element of graphical output produced by a Plot. It takes a
-*     separate value for each graphical element so that, for instance,
-*     the setting "Size(title)=2.0" causes the Plot title to be drawn
-*     using twice the default character size.
-*
-*     The range of character sizes available and the appearance of the
-*     resulting text is determined by the underlying graphics system.
-*     The default behaviour is for all graphical elements to be drawn
-*     using the default character size supplied by this graphics
-*     system.
-
-*  Applicability:
-*     Plot
-*        All Plots have this attribute.
-
-*  Notes:
-*     - For a list of the graphical elements available, see the
-*     description of the Plot class.
-*     - If no graphical element is specified, (e.g. "Size" instead
-*     of "Size(title)"), then a "set" or "clear" operation will
-*     affect the attribute value of all graphical elements, while a
-*     "get" or "test" operation will use just the Size(TextLab)
-*     value.
-*att--
-*/
-/* Character sizes. Has a value of AST__BAD when not set yielding a default 
-   of 1.0. */
-MAKE_CLEAR(Size,size,AST__BAD,AST__NPID)
-MAKE_GET(Size,double,1.0,( this->size[axis] == AST__BAD ? 1.0 : this->size[axis] ),AST__NPID)
-MAKE_TEST(Size,( this->size[axis] != AST__BAD ),AST__NPID)
-MAKE_SET(Size,double,size,(value!=0.00)?value:(astError(AST__ATTIN,"astSetSize(Plot): Invalid zero value supplied for Size(%s) attribute", status,GrfItem(axis,NULL,NULL, status )),this->size[axis]),AST__NPID)
-
-/* Member functions. */
-/* ================= */
-static void AddCdt( AstPlotCurveData *cdt1, AstPlotCurveData *cdt2, const char *method, 
-                    const char *class, int *status ){
-/*
-*
-*  Name:
-*     AddCdt
-
-*  Purpose:
-*     Append one AstPlotCurveData structure to another.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void AddCdt( AstPlotCurveData *cdt1, AstPlotCurveData *cdt2, const char *method, 
-*                  const char *class, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     The contents of the structure pointed to by "cdt2" is appended
-*     to the structure pointed to by "cdt1".
-
-*  Parameters:
-*     cdt1
-*        Pointer to the AstPlotCurveData structure to be modified.
-*     cdt2
-*        Pointer to the AstPlotCurveData structure to be appended to cdt1.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  An error is reported if there is insufficient room in "cdt1" to
-*     store the information in "cdt2".
-
-*/
-
-/* Local Variables: */
-   int nbrk, i, j;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the total number of breaks described by both structures. */
-   nbrk = cdt1->nbrk + cdt2->nbrk;
-
-/* Report an error if this number of breaks cannot be stored in a AstPlotCurveData
-   structure. */
-   if( nbrk > AST__MXBRK ){
-      astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
-                "exceeds %d.", status, method, class, AST__MXBRK );
-
-/* Otherwise, append the information. */
-   } else {
-
-/* Store the index within "cdt1" of the next break to be added. */
-      j = cdt1->nbrk;
-
-/* Add each the position and direction information for each of the breaks
-   in "cdt2". */
-      for( i = 0; i < cdt2->nbrk; i++ ){
-         cdt1->xbrk[ j ] = cdt2->xbrk[ i ];
-         cdt1->ybrk[ j ] = cdt2->ybrk[ i ];
-         cdt1->vxbrk[ j ] = cdt2->vxbrk[ i ];
-         cdt1->vybrk[ j ] = cdt2->vybrk[ i ];
-
-/* Increment the index of the next break in "cdt1". */
-         j++;
-      }
-
-/* Update the number of breaks in "cdt1". */
-      cdt1->nbrk = nbrk; 
-
-/* Update the length of the curve described by "cdt1". */
-      cdt1->length += cdt2->length; 
-
-/* Update the flag indicating if the entire curve is outside the plotting
-   zone. */ 
-      if( !cdt2->out ) cdt1->out = 0;
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static void Apoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Apoly
-
-*  Purpose:
-*     Append a another point to a poly line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Apoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function appends the supplied point to the current poly line. If 
-*     this results in the buffer being filled, the buffer is drawn, and 
-*     re-set to hold just the supplied point.
-
-*  Parameters:
-*     x
-*        The graphics x coordinate.
-*     y
-*        The graphics y coordinate.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* If the buffer is already full, output it to the screen and re-initialise 
-   it to hold just the final point. */      
-   if( Poly_n == AST__PLOT_POLY_MAX ){
-      Opoly( this, method, class, status );
-      Poly_x[ 0 ] = Poly_x[ AST__PLOT_POLY_MAX - 1 ];
-      Poly_y[ 0 ] = Poly_y[ AST__PLOT_POLY_MAX - 1 ];
-      Poly_n = 1;
-   }
-
-/* Add the supplied point to the buffer. */
-   Poly_x[ Poly_n ] = x;   
-   Poly_y[ Poly_n++ ] = y;   
-
-/* Update the box containing all plotted lines. */
-   Box_lbnd[ 0 ] = MIN( x, Box_lbnd[ 0 ] );
-   Box_ubnd[ 0 ] = MAX( x, Box_ubnd[ 0 ] );
-   Box_lbnd[ 1 ] = MIN( y, Box_lbnd[ 1 ] );
-   Box_ubnd[ 1 ] = MAX( y, Box_ubnd[ 1 ] );
-
-}
-
-static void PurgeCdata( AstPlotCurveData *cdata, int *status ){
-/*
-*
-*  Name:
-*     AstPlotCurveData
-
-*  Purpose:
-*     Remove any zero length sections from the description of a curve.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void PurgeCdata( AstPlotCurveData *cdata )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function removes any zero length sections from the supplied
-*     AstPlotCurveData struture, which describes a multi-section curve.
-
-*  Parameters:
-*     cdata
-*        A pointer to the structure containing information about the
-*        breaks in a curve.
-
-*/
-
-/* Local Variables: */
-   int brk;                       /*Break index */
-   int i;                       /*Break index */
-
-/* Check the global error status. */
-   if ( !astOK || !cdata ) return;
-
-/* Loop round all breaks. */
-   brk = 0; 
-   while( brk < cdata->nbrk ) {
-
-/* If this break and the next one are co-incident, remove both breaks. */
-      if( cdata->xbrk[ brk ] == cdata->xbrk[ brk + 1 ] &&
-          cdata->ybrk[ brk ] == cdata->ybrk[ brk + 1 ] ) {
-
-/* Shuffle down the higher elements of all the arrays in the curve data. */
-         for( i = brk + 2; i < cdata->nbrk; i++ ){
-            cdata->xbrk[ i - 2 ] = cdata->xbrk[ i ];
-            cdata->ybrk[ i - 2 ] = cdata->ybrk[ i ];
-            cdata->vxbrk[ i - 2 ] = cdata->vxbrk[ i ];
-            cdata->vybrk[ i - 2 ] = cdata->vybrk[ i ];
-         }
-
-/*  Decrement the number of breaks in the curve data. */
-         cdata->nbrk -= 2;
-
-/* If the section is not zero length, move on to the next pair of breaks. */
-      } else {
-         brk += 2;
-      }
-   }
-}
-
-static void AxPlot( AstPlot *this, int axis, const double *start, double length,
-                    int ink, AstPlotCurveData *cdata, const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     AxPlot
-
-*  Purpose:
-*     Draw a curve with constant axis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void AxPlot( AstPlot *this, int axis, const double *start, double length,
-*                  int ink, AstPlotCurveData *cdata, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws a section of a curve of the specified length 
-*     with constant value on a specified axis in the current Frame of the 
-*     Plot, starting at the specified position. The algorithm used can handle 
-*     discontinuities in the Mapping between the current Frame and graphics 
-*     coordinates, and information describing any breaks in the curve 
-*     (including the start and end of the curve) are returned in the supplied 
-*     AstPlotCurveData structure. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     axis
-*        The zero-based index of an axis within the current Frame of the Plot. 
-*        The curve has a varying value on this axis.
-*     start
-*        A pointer to a an array holding the coordinates of the start of the 
-*        curve within the current Frame of the Plot.
-*     length
-*        The length of the section of the curve to be drawn, given as an 
-*        increment along the axis specified by parameter "axis".
-*     ink
-*        If zero, the curve is not actually drawn, but information about 
-*        the breaks is still returned. If non-zero, the curve is also drawn.
-*     cdata
-*        A pointer to a structure in which to return information about the
-*        breaks in the curve.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  No curve is draw if the "start" array contains any bad values
-*     (i.e. values equal to AST__BAD), or if the "length" value is bad,
-*     or if a NULL pointer is supplied for "cdata". No errors are reported 
-*     in these cases.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   double d[ CRV_NPNT ];   /* Offsets to evenly spaced points along curve */
-   double x[ CRV_NPNT ];   /* X coords at evenly spaced points along curve */
-   double y[ CRV_NPNT ];   /* Y coords at evenly spaced points along curve */
-   double tol;             /* Absolute tolerance value */
-   int i;                  /* Loop count */
-   int naxes;              /* No. of axes in the base Frame */
-   int ok;                 /* Are all start coords good? */
-   int gridid;             /* Identifier value for element being drawn */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-#ifdef CRV_TRACE
-   printf("AXPLOT: axis %d, start (%.*g,%.*g), length %.*g\n",
-          axis, DBL_DIG, start[0], DBL_DIG, start[1], DBL_DIG, length );
-   getchar();
-#endif
-
-
-/* Initialise any supplied cdata structure to hold safe values. */
-   if( cdata ){
-      cdata->length = 0.0;
-      cdata->out = 1;
-      cdata->nbrk = 0;
-   }
-
-/* Get the number of axes in the current Frame. */
-   naxes = astGetNout( this );
-
-/* Check the "start" parameter for bad values. */
-   ok = 1;
-   for( i = 0; i < naxes; i++ ) {
-      if( start[ i ] == AST__BAD ){
-         ok = 0;
-         break;
-      }
-   }
-
-/* Check the "length" parameter for bad values. */
-   if( length == AST__BAD ) ok = 0;
-
-/* Check that the "cdata" pointer can be used. */
-   if( !cdata ) ok = 0;
-
-/* Only proceed if the parameters are OK, and there has been no error. */
-   if( ok && astOK ){   
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-      if( axis == 0 ) {
-         gridid = AST__GRIDLINE2_ID;
-      } else {
-         gridid = AST__GRIDLINE1_ID;         
-      }
-      astGrfAttrs( this, gridid, 1, GRF__LINE, method, class );
-
-/* Set up the externals used to communicate with the Map1 function...
-   The number of axes in the physical coordinate system (i.e. the current
-   Frame). */
-      Map1_ncoord = naxes;
-
-/* See if tick marks are logarithmically or linearly spaced. */
-      Map1_log = astGetLogTicks( this, axis );
-
-/* A pointer to the Plot, the Current Frame and the Mapping. */
-      Map1_plot = this;
-      Map1_frame = astGetFrame( this, AST__CURRENT );
-      Map1_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Physical coords at the start of the curve (dist=0). */
-      Map1_origin = start;
-
-/* Length of the curve. */
-      Map1_length = length;
-
-/* The index of the axis which the curve follows. */
-      Map1_axis = axis;
-
-/* Decide whether to omit points not in their normal ranges. */
-      Map1_norm = !IsASkyAxis( Map1_frame, 0, status ) && 
-                  !IsASkyAxis( Map1_frame, 1, status );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
-      tol = astGetTol( this )*MAX( this->xhi - this->xlo, 
-                                   this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
-      Crv_scerr = ( astGetLogPlot( this, 0 ) || 
-                    astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
-      Crv_ux0 = AST__BAD;    
-      Crv_tol = tol;
-      Crv_limit = 0.5*tol*tol;
-      Crv_map = Map1;
-      Crv_ink = ink;
-      Crv_xlo = this->xlo;
-      Crv_xhi = this->xhi;
-      Crv_ylo = this->ylo;
-      Crv_yhi = this->yhi;
-      Crv_out = 1;
-      Crv_xbrk = cdata->xbrk;
-      Crv_ybrk = cdata->ybrk;
-      Crv_vxbrk = cdata->vxbrk;
-      Crv_vybrk = cdata->vybrk;
-      Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
-      for( i = 0; i < CRV_NPNT; i++ ){
-        d[ i ] = ( (double) i)/( (double) CRV_NSEG );
-      }
-
-/* Map these points into graphics coordinates. */
-      Map1( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map1 to draw the curve. */
-      Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
-      Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map1. */
-      Map1( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the 
-   length of the drawn curve to zero. */
-      if( Crv_out ) {
-         Crv_nbrk = 0;
-         Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of 
-   the last point to be plotted. */
-      } else {
-         Crv_nbrk++;
-         if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
-            astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
-                      "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
-         } else {
-            *(Crv_xbrk++) = (float) Crv_xl;
-            *(Crv_ybrk++) = (float) Crv_yl;
-            *(Crv_vxbrk++) = (float) -Crv_vxl;
-            *(Crv_vybrk++) = (float) -Crv_vyl;
-         }
-      }
-
-/* Store extra information about the curve in the returned structure, and 
-   purge any zero length sections. */
-      if( cdata ){
-         cdata->length = Crv_len;
-         cdata->out = Crv_out;
-         cdata->nbrk = Crv_nbrk;
-         PurgeCdata( cdata, status );
-      }
-
-/* Annul the Frame and Mapping. */
-      Map1_frame = astAnnul( Map1_frame );
-      Map1_map = astAnnul( Map1_map );
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, gridid, 0, GRF__LINE, method, class );
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static int Boundary( AstPlot *this, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Boundary
-
-*  Purpose:
-*     Draw a boundary around regions containing valid physical positions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Boundary( AstPlot *this, const char *method, const char *class, int *status  )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function draws a boundary around the regions of the plotting
-*     area which contain valid, unclipped, physical coordinates, but does
-*     not include the intersections with the edges of the plotting area.
-*
-*     Broadly, the algorithm is as follows: An initial coarse grid is
-*     created covering the entire plotting area. This grid consists of a 
-*     regular square matrix of points in graphics coordinates, and the 
-*     corresponding physical coordinates. An array of flags is created,
-*     one for each grid cell, indicating if the boundary passes through the
-*     cell. This is assumed to be the case if the cell has a mix of good and 
-*     bad corners (i.e corners which have good or bad physical coordinates). 
-*     This assumption does not locate all boundary cells though, since if
-*     the boundary passes into and out of a cell throught the same edge,
-*     the corners of the cell will be either all good or all bad. But for
-*     the moment, we just concentrate on the ones found using this simple
-*     assumption. For each such cell, a finer grid is then created covering 
-*     the cell, and the boundary is drawn through this fine grid using 
-*     TraceBorder. TraceBorder returns a set of four flags indicating which 
-*     edges of the cell were intersected by the boundary. A check is then 
-*     made on any of the four neighbouring cells into which the curve
-*     passes. If any of these cells were not flagged as boundary cells using 
-*     the simple assumption described earlier, then they are flagged now
-*     (with a different flag value). Once all the cells located using the 
-*     simple assumption have been processed, any further cells flagged
-*     with the new flag value are also processed using TraceBorder in the
-*     same way. This process is repeated until no extra boundary cells are
-*     found.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A flag indicating if any regions containing invalid physical
-*     coordinates were found within the plotting area.
-
-*  Notes:
-*     -  This function assumes the physical coordinate Frame is
-*     2-dimensional, and it should not be used if this is not the case.
-*     -  A value of zero is returned if an error has already occurred, or
-*     if this function should fail for any reason. 
-
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;         /* Pointer to base Plot Frame */
-   AstFrame *cfrm;         /* Pointer to current Plot Frame */
-   AstMapping *map;        /* Pointer to Plot mapping (graphics -> physical) */
-   AstMapping *rmap;       /* Pointer to Plot mapping (graphics -> physical) */
-   AstRegion *breg;        /* Region mapped into base Plot Frame */
-   double blbnd[ 2 ];      /* Lower grid bounds in base frame */
-   double bubnd[ 2 ];      /* Upper grid bounds in base frame */
-   double dx;              /* Plotting area width */
-   double dy;              /* Plotting area height */
-   double power;           /* Exponent in pow call */
-   double rat;             /* Ratio by which to reduce DIM */
-   double tol;             /* Fractional plotting tolerance */
-   int dim;                /* No. of points along each edge of coarse grid */
-   int edges[ 4 ];         /* Flags indicating edges bisected by boundary */
-   int rate_disabled;      /* Was the astRate method initially disabled? */
-   int ret;                /* Any regions containing bad physical coords? */
-
-/* Check global status. */
-   if( !astOK ) return 0;
-
-/* Initialise the answer to indicate that no regions containing invalid
-   physical coordinates have been found. */
-   ret = 0;
-
-/* Get the current Frame from the Plot. */
-   cfrm = astGetFrame( this, AST__CURRENT );
-
-/* If it is a region, we use a special method, if possible, to trace the 
-   Region boundary. Otherwise, we use a grid tracing method that makes no
-   assumptions about the nature of the Mapping or Frame. */
-   if( !RegionOutline( this, cfrm, method, class, status ) ) {
-
-/* Each basic element of the boundary drawn by the following algorithm 
-   will be drawn at a multiple of 45 degrees to the horizontal. This can
-   cause noticable aliasing. For instance, if the border is a straight
-   line at 50 degrees to the horizontal, it will be drawn at 45 degrees
-   for long sections, followed by a vertical leap to catch up with where
-   it should be. Because of this we use a finer tolerance than for other
-   drawing. */
-      tol = 0.25*astGetTol( this );
-
-/* Set up the dimension of a coarse grid in graphics coordinates to cover the 
-   whole plotting area. This is chosen to give a finer grid for smaller
-   plotting tolerances. Note, putting the power as a literal constant in
-   the call to pow seems to cause a segmentation violation on some systems. */
-      power = -0.666666666;
-      dim = (int) 4*pow( tol, power ) + 10;
-      if( dim > 400 ) dim = 400;
-      if( dim < 3 ) dim = 3;
-
-/* Store the required plotting tolerance as a distance in graphics
-   coords. */
-      dx = fabs( this->xhi - this->xlo );
-      dy = fabs( this->xhi - this->xlo );
-      tol *= ( ( dx > dy ) ? dx : dy );
-
-/* Extract the Mapping from the Plot. */
-      map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Select the area covered by the coarse grid. If the current Frame is a
-   Region, we use the bounding box of Region after being mapped into
-   graphics coords. */
-      if( astIsARegion( cfrm ) ) {
-         bfrm = astGetFrame( this, AST__BASE );
-
-/* Get the Mapping from the current to the base Frame in the Plot, and
-   remove the effects of any Regions. */
-
-         astInvert( map );
-         rmap = astRemoveRegions( map );
-         astInvert( map );
-
-/* Map the Region into the GRAPHICS frame. */
-         breg = astMapRegion( cfrm, rmap, bfrm );
-         astGetRegionBounds( breg, blbnd, bubnd );
-   
-         rmap = astAnnul( rmap );
-         bfrm = astAnnul( bfrm );
-         breg = astAnnul( breg );
-   
-         rat = ( ( bubnd[ 0 ] - blbnd[ 0 ] )*( bubnd[ 1 ] - blbnd[ 1 ] ) )/
-               ( ( this->xhi - this->xlo )*( this->yhi - this->ylo ) );
-         rat = sqrt( rat );
-         dim = (int) ( rat*dim );
-         if( dim < 3 ) dim = 3;
-   
-/* If the current Frame is not a Region, use the whole plot. */
-      } else {
-         blbnd[ 0 ] = this->xlo;
-         blbnd[ 1 ] = this->ylo;
-         bubnd[ 0 ] = this->xhi;
-         bubnd[ 1 ] = this->yhi;
-      }
-   
-/* Disable the astRate method in order to improve the speed of
-   evaluating the Mapping in cases where the Mapping includes an
-   AstRateMap. Note the original value of the flag so that it can be
-   re-instated at the end. */
-      rate_disabled = astRateState( 1 );
-   
-/* Draw the boundary. */
-      ret = TraceBorder( this, map, blbnd[ 0 ], bubnd[ 0 ], blbnd[ 1 ], 
-                         bubnd[ 1 ], dim, tol, edges, method, class, status );
-   
-/* Re-instate the original setting of the "astRate disabled" flag. */
-      astRateState( rate_disabled );
-
-/* Release the remaining resources. */
-      map = astAnnul( map );
-   }
-   cfrm = astAnnul( cfrm );
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-}
-
-static int Border( AstPlot *this_nd, int *status ){
-/*
-*++
-*  Name:
-c     astBorder
-f     AST_BORDER
-
-*  Purpose:
-*     Draw a border around valid regions of a Plot.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     int astBorder( AstPlot *this )
-f     RESULT = AST_BORDER( THIS, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function draws a (line) border around regions of the
-*     plotting area of a Plot which correspond to valid, unclipped
-*     physical coordinates. For example, when plotting using an
-*     all-sky map projection, this function could be used to draw the
-*     boundary of the celestial sphere when it is projected on to the
-*     plotting surface.
-*
-*     If the entire plotting area contains valid, unclipped physical
-*     coordinates, then the boundary will just be a rectangular box
-*     around the edges of the plotting area.
-*
-*     If the Plot is a Plot3D, this method is applied individually to
-*     each of the three 2D Plots encapsulated within the Plot3D (each of
-*     these Plots corresponds to a single 2D plane in the 3D graphics
-*     system). In addition, if the entire plotting volume has valid 
-*     coordinates in the 3D current Frame of the Plot3D, then additional 
-*     lines are drawn along the edges of the 3D plotting volume so that 
-*     the entire plotting volume is enclosed within a cuboid grid.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astBorder()
-f     AST_BORDER = LOGICAL
-c        Zero is returned if the plotting space is completely filled by
-f        .FALSE. is returned if the plotting space is completely filled by
-*        valid, unclipped physical coordinates (so that only a
-c        rectangular box was drawn around the edge). Otherwise, one is
-f        rectangular box was drawn around the edge). Otherwise, .TRUE. is
-*        returned.
-
-*  Notes:
-c     - A value of zero will be returned if this function is invoked
-f     - A value of .FALSE. will be returned if this function is invoked
-c     with the AST error status set, or if it should fail for any
-f     with STATUS set to an error value, or if it should fail for any
-*     reason.
-*     - An error results if either the current Frame or the base Frame
-*     of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-*     - An error also results if the transformation between the base
-*     and current Frames of the Plot is not defined (i.e. the Plot's
-*     TranForward attribute is zero).
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   AstPlot *this;          /* Plot with no more than 2 current axes */
-   AstPlotCurveData cdata; /* Structure to receive break information */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   int inval;              /* Were any bad regions found? */
-   int naxes;              /* No. of axes in the base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_nd);
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astBorder";
-   class = astGetClass( this_nd );
-
-/* Initialise the bounding box for primitives produced by this call. */
-   if( !Boxp_freeze ) {
-      Boxp_lbnd[ 0 ] = FLT_MAX;
-      Boxp_lbnd[ 1 ] = FLT_MAX;
-      Boxp_ubnd[ 0 ] = FLT_MIN;
-      Boxp_ubnd[ 1 ] = FLT_MIN;
-   }
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this_nd );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Get a Plot with a 2D (or 1D) current Frame. */
-   this = (AstPlot *) Fset2D( (AstFrameSet *) this_nd, AST__CURRENT, status );
-
-/* Check the current Frame of the Plot is 2-D. */
-   naxes = astGetNout( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-   astGrfAttrs( this, AST__BORDER_ID, 1, GRF__LINE, method, class );
-
-/* We first draw the intersections of the regions containing valid
-   physical coordinates with the edges of the plotting area. First do
-   the bottom edge. */
-   LinePlot( this, this->xlo, this->ylo, this->xhi, this->ylo,
-             1, &cdata, method, class, status );
-
-/* Now do the right-hand edge. */
-   LinePlot( this, this->xhi, this->ylo, this->xhi, this->yhi, 
-             1, &cdata, method, class, status );
-
-/* Now do the top edge. */
-   LinePlot( this, this->xhi, this->yhi, this->xlo, this->yhi, 
-             1, &cdata, method, class, status );
-
-/* Now do the left-hand edge. */
-   LinePlot( this, this->xlo, this->yhi, this->xlo, this->ylo, 
-             1, &cdata, method, class, status );
-
-/* Now draw a curve following the boundary through the interior of the 
-   plotting area. If the current Frame in the Plot is a Region, we use a
-   shorter method if possible. If this is not possible, we use a longer
-   method. */
-   inval = Boundary( this, method, class, status );
-
-/* Re-establish the original graphical attributes. */
-   astGrfAttrs( this, AST__BORDER_ID, 0, GRF__LINE, method, class );
-
-/* Annul the 2d plot. */
-   this = astAnnul( this );
-
-/* Return. */
-   return inval;
-
-}
-
-static void BoundingBox( AstPlot *this, float lbnd[2], float ubnd[2], int *status ){
-/*
-*++
-*  Name:
-c     astBoundingBox
-f     AST_BOUNDINGBOX
-
-*  Purpose:
-*     Return a bounding box for previously drawn graphics.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astBoundingBox( AstPlot *this, float lbnd[2], float ubnd[2] )
-f     CALL AST_BOUNDINGBOX( THIS, LBND, UBND, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function returns the bounds of a box which just encompasess the 
-f     This routine returns the bounds of a box which just encompasess the 
-*     graphics produced by the previous call to any of the Plot methods 
-*     which produce graphical output. If no such previous call has yet
-*     been made, or if the call failed for any reason, then the bounding box 
-c     returned by this function is undefined.
-f     returned by this routine is undefined.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     lbnd
-f     LBND( 2 ) = REAL (Returned)
-*        A two element array in which is returned the lower limits of the
-*        bounding box on each of the two axes of the graphics coordinate
-*        system (the base Frame of the Plot).
-c     ubnd
-f     UBND( 2 ) = REAL (Returned)
-*        A two element array in which is returned the upper limits of the
-*        bounding box on each of the two axes of the graphics coordinate
-*        system (the base Frame of the Plot).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - An error results if the base Frame of the Plot is not
-*     2-dimensional.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   AstFrameSet *fset;      /* Pointer to the Plot's FrameSet */
-   int naxes;              /* No. of axes in the base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Get a pointer to the FrameSet at the start of the Plot. */
-   fset = (AstFrameSet *) this;
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( fset );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "astBoundingBox(%s): Number of axes (%d) in the "
-                "base Frame of the supplied %s is invalid - this number "
-                "should be 2.", status, astGetClass( this ), naxes,  
-                astGetClass( this ) );
-   } 
-
-/* Return the bounding box. */
-   lbnd[ 0 ] = Boxp_lbnd[ 0 ];
-   lbnd[ 1 ] = Boxp_lbnd[ 1 ];
-   ubnd[ 0 ] = Boxp_ubnd[ 0 ];
-   ubnd[ 1 ] = Boxp_ubnd[ 1 ];
-   
-/* Return. */
-   return;
-
-}
-
-static int BoxCheck( float *bx, float *by, float *cx, float *cy, int *status ) {
-/*
-*  Name:
-*     BoxCheck
-
-*  Purpose:
-*     See if two boxes overlap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int BoxCheck( float *bx, float *by, float *cx, float *cy, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function returns a flag indicating if two trapezoidal boxes 
-*     (box "b" and box "c") overlap or not. 
-
-*  Parameters:
-*     bx
-*        Pointer to an array holding the X coordinates at the 4 corners
-*        of box "b".
-*     by
-*        Pointer to an array holding the Y coordinates at the 4 corners
-*        of box "b".
-*     cx
-*        Pointer to an array holding the X coordinates at the 4 corners
-*        of box "c".
-*     cy
-*        Pointer to an array holding the Y coordinates at the 4 corners
-*        of box "c".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the boxes do not overlap or an error has
-*     already occurred. Otherwise, 1 is returned.
-
-*/
-
-/* Local Variables: */
-   float x2;
-   float y2;
-   int i;
-   int ip;
-   int j;
-   int jp;
-   int ret;
-
-/* Assume the boxes do not overlap. */
-   ret = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return ret;
-
-/* Check each corner of box b to see if it is inside box c. */
-   for( j = 0; j < 4 && ret == 0; j++ ){
-      if( Inside( 4, cx, cy, bx[ j ], by[ j ], status ) ) ret = 1;
-   }
-
-/* Now check each corner of box c to see if it is inside box b. */
-   for( j = 0; j < 4 && ret == 0; j++ ){
-      if( Inside( 4, bx, by, cx[ j ], cy[ j ], status ) ) ret = 1;
-   }
-
-/* If no overlap has yet been found, we need to see if any of the edges
-   of the boxes intersect. For instance, in the case of a cross formed by
-   a vertical rectangle crossing a horizontal rectangle, the above checks
-   on the corners would not have revealed any overlap. */
-   if( !ret ) {
-
-/* The following code assumes that the corners with indices 0, 1, 2, 3
-   are adjacent round the edge of the box. This is the case if the line 
-   joining corners 0 and 1 does not cross the line joining corners 2 and 
-   3 AND the line joining corners 1 and 2 does not cross the line joining 
-   corners 3 and 0. If either of these conditions is not met swap the 
-   corners around to correct it. First do box b. */
-      if( Cross( bx[0], by[0], bx[1], by[1],
-                 bx[2], by[2], bx[3], by[3], status ) ) {
-         x2 = bx[2];
-         y2 = by[2];
-         bx[2] = bx[1];
-         by[2] = by[1];
-         bx[1] = x2;
-         by[1] = y2;
-
-      } else if( Cross( bx[1], by[1], bx[2], by[2],
-                        bx[3], by[3], bx[0], by[0], status ) ) {
-         x2 = bx[2];
-         y2 = by[2];
-         bx[2] = bx[3];
-         by[2] = by[3];
-         bx[3] = x2;
-         by[3] = y2;
-      }
-
-/* Now do box c. */
-      if( Cross( cx[0], cy[0], cx[1], cy[1],
-                 cx[2], cy[2], cx[3], cy[3], status ) ) {
-         x2 = cx[2];
-         y2 = cy[2];
-         cx[2] = cx[1];
-         cy[2] = cy[1];
-         cx[1] = x2;
-         cy[1] = y2;
-
-      } else if( Cross( cx[1], cy[1], cx[2], cy[2],
-                        cx[3], cy[3], cx[0], cy[0], status ) ) {
-         x2 = cx[2];
-         y2 = cy[2];
-         cx[2] = cx[3];
-         cy[2] = cy[3];
-         cx[3] = x2;
-         cy[3] = y2;
-      }
-
-/* We now check each edge of box b to see if it overlaps any edge of box c. */
-      for( j = 0; j < 4 && ret == 0; j++ ) { 
-
-/* This edge of box b starts at the corner with index j. Get the index of the
-   corner at which the edge ends. */
-         jp = j + 1;
-         if( jp == 4 ) jp = 0;
-
-/* Check to see if this edge of box b crosses each edge of box c in turn. */
-         for( i = 0; i < 4 && ret == 0; i++ ) { 
-            ip = i + 1;
-            if( ip == 4 ) ip = 0;
-
-            ret = Cross( bx[j], by[j], bx[jp], by[jp],
-                         cx[i], cy[i], cx[ip], cy[ip], status );
-
-         }
-      }
-   }
-
-   return ret;
-}
-
-static void Bpoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Bpoly
-
-*  Purpose:
-*     Begin a new poly line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Bpoly( AstPlot *this, float x, float y, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws any current poly line, and then starts a new one
-*     at the supplied position.
-
-*  Parameters:
-*     x
-*        The graphics x coordinate.
-*     y
-*        The graphics y coordinate.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Draw any existing poly line. */
-   Opoly( this, method, class, status );
-
-/* Add the supplied point into the buffer. */
-   Apoly( this, x, y, method, class, status );
-
-}
-
-
-static int CGCapWrapper( AstPlot *this, int cap, int value, int *status ) {
-/*
-*
-*  Name:
-*     CGCapWrapper
-
-*  Purpose:
-*     Call a C implementation of the GCap Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGCapWrapper( AstPlot *this, int cap, int value, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GCap
-*     grf function to enquire or set a graphics attribute value. 
-
-*  Parameters:
-*     this
-*        The Plot.
-*     cap
-*        The capability to be inquired aboue.
-*     value
-*        The value ot assign to the capability.
-*     status
-*        Pointer to the inherited status value.
-
-*  Returned Value:
-*     Non-zero if the grf module is capabale of performing the action
-*     requested by "cap".
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGCapFun) this->grffun[ AST__GCAP ] )( astGrfConID(this), cap, value );
-}
-
-static int CGAttrWrapper( AstPlot *this, int attr, double value, 
-                          double *old_value, int prim, int *status ) {
-/*
-*
-*  Name:
-*     CGAttrWrapper
-
-*  Purpose:
-*     Call a C implementation of the GAttr Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGAttrWrapper( AstPlot *this, int attr, double value, 
-*                        double *old_value, int prim, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GAttr
-*     grf function to enquire or set a graphics attribute value. 
-
-*  Parameters:
-*     this
-*        The Plot.
-*     attr
-*        An integer value identifying the required attribute. The
-*        following symbolic values are defined in grf.h:
-*
-*           GRF__STYLE  - Line style.
-*           GRF__WIDTH  - Line width.
-*           GRF__SIZE   - Character and marker size scale factor.
-*           GRF__FONT   - Character font.
-*           GRF__COLOUR - Colour index.
-*     value 
-*        A new value to store for the attribute. If this is AST__BAD
-*        no value is stored.
-*     old_value 
-*        A pointer to a double in which to return the attribute value.
-*        If this is NULL, no value is returned.
-*     prim
-*        The sort of graphics primitive to be drawn with the new attribute.
-*        Identified by the following values defined in grf.h:
-*           GRF__LINE
-*           GRF__MARK
-*           GRF__TEXT
-*     status
-*        Pointer to the inherited status value.
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGAttrFun) this->grffun[ AST__GATTR ] )( astGrfConID(this), attr, value, old_value, prim );
-}
-
-static int CGFlushWrapper( AstPlot *this, int *status ) {
-/*
-*
-*  Name:
-*     CGFlushWrapper
-
-*  Purpose:
-*     Call a C implementation of the GFlush Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGFlushWrapper( AstPlot *this ) {
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GFlush
-*     grf function to flush graphics.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     status
-*        Pointer to the inherited status value.
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGFlushFun) this->grffun[ AST__GFLUSH ])( astGrfConID(this) );
-}
-
-static int CGLineWrapper( AstPlot *this, int n, const float *x, 
-                          const float *y, int *status ) {
-/*
-*
-*  Name:
-*     CGLineWrapper
-
-*  Purpose:
-*     Call a C implementation of the GLine Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGLineWrapper( AstPlot *this, int n, const float *x, 
-*                        const float *y, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GLine
-*     grf function to draw a polyline.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     n
-*        The number of positions to be joined together.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGLineFun) this->grffun[ AST__GLINE ])( astGrfConID(this), n, x, y );
-}
-
-static int CGMarkWrapper( AstPlot *this, int n, const float *x, 
-                          const float *y, int type, int *status ) {
-/*
-*
-*  Name:
-*     CGMarkWrapper
-
-*  Purpose:
-*     Call a C implementation of the GMark Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGMarkWrapper( AstPlot *this, int n, const float *x, 
-*                        const float *y, int type, int *status ) {
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GMark grf 
-*     function to draw markers.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     n
-*        The number of positions to be joined together.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-*     type
-*        An integer which can be used to indicate the type of marker symbol
-*        required.
-*     status
-*        Pointer to the inherited status value.
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGMarkFun) this->grffun[ AST__GMARK ])( astGrfConID(this), n, x, y, type );
-}
-
-static int CGTextWrapper( AstPlot *this, const char *text, float x, float y,
-                          const char *just, float upx, float upy, int *status ) {
-/*
-*
-*  Name:
-*     CGTextWrapper
-
-*  Purpose:
-*     Call a C implementation of the GText Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGTextWrapper( AstPlot *this, const char *text, float x, float y,
-*                        const char *just, float upx, float upy, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GText grf 
-*     function to draw a text string.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-*     upy
-*        The y component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-*     status
-*        Pointer to the inherited status value.
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGTextFun) this->grffun[ AST__GTEXT ])( astGrfConID(this), text, x, y, just, upx, upy );
-}
-
-static int CGTxExtWrapper( AstPlot *this, const char *text, float x, float y,
-                           const char *just, float upx, float upy, float *xb, 
-                           float *yb, int *status ) {
-/*
-*
-*  Name:
-*     CGTxExtWrapper
-
-*  Purpose:
-*     Call a C implementation of the GTxExt Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGTxExtWrapper( AstPlot *this, const char *text, float x, float y,
-*                         const char *just, float upx, float upy, float *xb, 
-*                         float *yb, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GTxExt
-*     grf function to find the extent of a text string.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-*     upy
-*        The y component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-*     xb
-*        An array of 4 elements in which to return the x coordinate of
-*        each corner of the bounding box.
-*     yb
-*        An array of 4 elements in which to return the y coordinate of
-*        each corner of the bounding box.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-   if( !astOK ) return 0;
-   return ( (AstGTxExtFun) this->grffun[ AST__GTXEXT ])( astGrfConID(this), text, x, y, just, upx, upy, xb, yb );
-}
-
-static int CGQchWrapper( AstPlot *this, float *chv, float *chh, int *status ) {
-/*
-*
-*  Name:
-*     CGQchWrapper
-
-*  Purpose:
-*     Call a C implementation of the GQch Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGQchWrapper( AstPlot *this, float *chv, float *chh, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GQch
-*     grf function to find the extent of a text string.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     chv
-*        A pointer to the double which is to receive the height of
-*        characters drawn vertically. This will be an increment in the X
-*        axis
-*     chh
-*        A pointer to the double which is to receive the height of
-*        characters drawn vertically. This will be an increment in the Y
-*        axis
-*     status
-*        Pointer to the inherited status value.
-*/
-   if( !astOK ) return 0;
-   return ( (AstGQchFun) this->grffun[ AST__GQCH ])( astGrfConID(this), chv, chh );
-}
-
-static int CGScalesWrapper( AstPlot *this, float *alpha, float *beta, int *status ) {
-/*
-*
-*  Name:
-*     CGScalesWrapper
-
-*  Purpose:
-*     Call a C implementation of the GScales Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CGScalesWrapper( AstPlot *this, float *alpha, float *beta, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function is a wrapper for a C implementation of the GScales
-*     grf function to find the extent of a text string.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     alpha
-*        A pointer to the location at which to return the scale for the
-*        X axis (i.e. Xnorm = alpha*Xworld).
-*     beta
-*        A pointer to the location at which to return the scale for the
-*        Y axis (i.e. Ynorm = beta*Yworld).
-*     status
-*        Pointer to the inherited status value.
-*/
-   if( !astOK ) return 0;
-   return ( (AstGScalesFun) this->grffun[ AST__GSCALES ])( astGrfConID(this), alpha, beta );
-}
-
-static int CheckLabels( AstPlot *this, AstFrame *frame, int axis, 
-                        double *ticks, int nticks, int force, char **list, 
-                        double refval, int *status ){
-/*
-*  Name:
-*     CheckLabels
-
-*  Purpose:
-*     Create tick mark labels and check that adjacent labels are different.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CheckLabels( AstPlot *this, AstFrame *frame, int axis, double *ticks,
-*                      int nticks, int force, char **list, double refval, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function formats the supplied ticks mark values using the
-*     astFormat method for the supplied Frame. Unless force is non-zero, it 
-*     then checks all pairs of adjacent labels. If a pair is found which are 
-*     identical then the memory holding the labels is released, and a value 
-*     of zero is returned. Otherwise, a value of one is returned, indicating 
-*     that adjacent labels are all different and the labels are returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     frame
-*        Pointer to the Frame.
-*     axis
-*        The zero-based index of the axis to which the tick marks refer.
-*     ticks
-*        Pointer to an array holding the tick mark values.
-*     nticks
-*        The number of tick marks supplied by parameter "ticks".
-*     force
-*        If non-zero, then no check for identical adjacent labels is
-*        performed, and the labels are always considered to be OK.
-*     list 
-*        Pointer to the start of an array of pointers. Each of the
-*        elements in this array receives a pointer to a string holding a
-*        formatted label. Each of these strings should be freed using
-*        astFree when no longer needed.
-*     refval
-*        A value to use for the other axis when normalizing.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if any pairs of identical adjacent labels were found. One
-*     otherwise.
-
-*  Notes:
-*     -  No error is reported if a pair of identical adjacent labels is
-*     found.
-*     -  If an error has already occurred, or if this function should
-*     fail for any reason, a value of zero is returned, and the array of
-*     pointers identified by "list" is filled with NULL pointers.
-
-
-*/
-
-/* Local Variables: */
-   const char *label;        /* Pointer to formatted tick value */
-   double val[ 2 ];          /* Workspace for normalizing */
-   int i;                    /* Tick index */
-   int len;                  /* Number of characters in curent label */
-   int ok;                   /* The returned flag */
-
-/* Fill the supplied label list with NULL pointers. */
-   if( list ) {
-      for( i = 0; i < nticks; i++ ) list[ i ] = NULL;
-   }
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise the returned flag to indicate that all adjacent labels are
-   different. */
-   ok = 1;
-
-/* Normalize and format the first tick mark value. */
-   val[ axis ] = ticks[ 0 ];
-   val[ 1 - axis ] = refval;
-   astNorm( frame, val );
-   label = astFormat( frame, axis, val[ axis ] );
-
-/* Allocate memory holding a copy of the formatted value, and store a
-   pointer to this copy in the list of labels. */
-   if( label ){
-      len = strlen( label ) + 1;
-      list[ 0 ] = (char *) astStore( NULL, (void *) label, len );
-   } else {
-      ok = 0;
-   }
-
-/* Normalize and format each of the tick mark values in this batch. */
-   for( i = 1; i < nticks && astOK && ok; i++ ){
-      val[ axis ] = ticks[ i ];
-      val[ 1 - axis ] = refval;
-      astNorm( frame, val );
-      label = astFormat( frame, axis, val[ axis ] );
-      if( label ){
-
-/* Unless checks have been supressed, compare this label with the previous 
-   label. If they are identical clear the returned flag. */
-         if( !force && !strcmp( label, list[ i - 1 ] ) ) {
-            ok = 0;
-
-/* Allocate memory holding a copy of the label, and store a
-   pointer to this copy in the list of labels. */
-         } else {
-            list[ i ] = (char *) astStore( NULL, (void *) label, strlen( label ) + 1 );
-         }
-
-      } else {
-         ok = 0;
-      }
-
-   }
-
-/* If two adjacent labels were identical, or an error occurred, release the 
-   memory used to store the labels. */
-   if( !ok || !astOK ){
-      for( i = 0; i < nticks; i++ ){
-         if( list[ i ] ) list[ i ] = (char *) astFree( (void *) list[ i ] );
-      }
-   }
-
-/* Ensure a value of zero is returned if an error has occurred. */
-   if( !astOK ) ok = 0;
-
-/* Return the answer. */
-   return ok;
-
-}
-
-static char **CheckLabels2( AstPlot *this, AstFrame *frame, int axis, 
-                            double *ticks, int nticks, char **old_list, 
-                            double refval, int *status ){
-/*
-*  Name:
-*     CheckLabels2
-
-*  Purpose:
-*     Check that labels cannot be shortened.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     char **CheckLabels2( AstPlot *this, AstFrame *frame, int axis, 
-*                          double *ticks, int nticks, char **old_list, 
-*                          double refval, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function formats the supplied ticks mark values using the
-*     astFormat method for the supplied Frame. It then compares the labels
-*     with the corresponding labels supplied in "old_list". If all of the
-*     new labels are shorter than, or equal in length to, the old labels, 
-*     then memory is allocated to hold the new (shorter) labels, and a
-*     pointer to this memory is returned. If any new label is longer than 
-*     the corresponding old label, then a NULL pointer is returned.
-*
-*     No check is performed on whether or not there are any identical
-*     adjacent labels.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     frame
-*        Pointer to the Frame.
-*     axis
-*        The zero-based index of the axis to which the tick marks refer.
-*     ticks
-*        Pointer to an array holding the tick mark values.
-*     nticks
-*        The number of tick marks supplied by parameter "ticks".
-*     old_list 
-*        Pointer to the start of an array of pointers. Each of the
-*        elements in this array should hold a pointer to a string holding a
-*        formatted label. 
-*     refval
-*        A value to use for the other axis when normalizing.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to an array of pointers. Each of these pointers points to
-*     a text string holding a shortened label. If a complete set of 
-*     shortened labels could not be found (or if an error occurs), a NULL
-*     pointer is returned.
-
-*  Notes:
-*     -  The memory holding the returned shortened labels should be
-*     freed by cthe caller, together with the memory holding the pointers to
-*     the labels.
-*     -  No error is reported if a pair of identical adjacent labels is
-*     found.
-*     -  If an error has already occurred, or if this function should
-*     fail for any reason, a value of NULL is returned.
-
-*/
-
-/* Local Variables: */
-   char **list;              /* The returned pointer */
-   const char *label;        /* Pointer to formatted tick value */
-   double val[ 2 ];          /* Workspace for normalizing */
-   int i;                    /* Tick index */
-   int llen;                 /* Number of characters in curent label */
-   int ok;                   /* Are the old labels OK to be used? */
-
-/* Check the global status. */
-   if( !astOK ) return NULL;
-
-/* Allocate memory to hold the pointers to the new labels. */
-   list = (char **) astMalloc( sizeof( char * )*(size_t) nticks );
-   if( list ) {
-
-/* Fill this array with NULLs for safety. */
-      for( i = 0; i < nticks; i++ ) list[ i ] = NULL;
-
-/* Initialise a flag to indicate that all the new labels are
-   shorter than the old labels. */
-      ok = 0;
-
-/* Normalize and format each of the tick mark values in this batch. */
-      for( i = 0; i < nticks && astOK; i++ ){
-         val[ axis ] = ticks[ i ];
-         val[ 1 - axis ] = refval;
-         astNorm( frame, val );
-         label = astFormat( frame, axis, val[ axis ] );
-         if( label ){
-
-/* Get the length of the new label. */
-            llen = strlen( label );
-
-/* Compare this label with the corresponding old label. If the new one is 
-   longer than the old one, set the flag and leave the loop. */
-            if( llen > strlen( old_list[ i ] ) ) {
-               ok = 1;
-               break;
-            }
-
-/* Store the new label. */
-            list[ i ] = (char *) astStore( NULL, (void *) label, 
-                                           (size_t) (llen + 1) );
-         }
-      }
-
-/* If the old labels are to be used, or an error occurred, release the memory 
-   used to store the new labels. */
-      if( ok || !astOK ){
-         for( i = 0; i < nticks; i++ ){
-            if( list[ i ] ) list[ i ] = (char *) astFree( (void *) list[ i ] );
-         }
-         list = (char **) astFree( (void *) list );
-      }
-
-   }
-
-/* Return the answer. */
-   return list;
-
-}
-
-static int ChrLen( const char *string, int *status ){
-/*
-*  Name:
-*     ChrLen
-
-*  Purpose:
-*     Return the length of a string excluding any trailing white space.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     int ChrLen( const char *string, int *status )
-
-*  Class Membership:
-*     Plot
-
-*  Description:
-*     This function returns the length of a string excluding any trailing
-*     white space.
-
-*  Parameters:
-*     string
-*        Pointer to the string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The length of a string excluding any trailing white space.
-
-*  Notes:
-*     -  A value of zero is returned if a NULL pointer is supplied, or if an
-*     error has already occurred.
-
-*/
-
-/* Local Variables: */
-   const char *c;      /* Pointer to the next character to check */
-   int ret;            /* The returned string length */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise the returned string length. */
-   ret = 0;
-
-/* Check a string has been supplied. */
-   if( string ){
-
-/* Check each character in turn, starting with the last one. */
-      ret = strlen( string );
-      c = string + ret - 1;
-      while( ret ){
-         if( !isspace( (int) *c ) ) break;
-         c--;
-         ret--;
-      }
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static AstPlotCurveData **CleanCdata( AstPlotCurveData **cdata, int *status ){
-/*
-*  Name:
-*     CleanCdata
-
-*  Purpose:
-*     Release the structures holding curve break information.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPlotCurveData **CleanCdata( AstPlotCurveData **cdata, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function releases the memory used to hold the curve break 
-*     information returned by function DrawGrid, and returns a NULL pointer.
-
-*  Parameters:
-*     cdata
-*        Pointer to the information to be freed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A NULL pointer.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has already
-*     occurred.
-
-*/
-
-/* Return if a NULL pointer has been supplied. */
-   if( !cdata ) return NULL;
-
-/* Release each of the two structures in turn (if they exist). */
-   (void) astFree( (void *) cdata[ 0 ] );
-   (void) astFree( (void *) cdata[ 1 ] );
-
-/* Release the memory used to hold the two AstPlotCurveData pointers. */
-   (void) astFree( (void *) cdata );
-
-/* Return. */
-   return NULL;
-
-}
-
-static TickInfo **CleanGrid( TickInfo **grid, int *status ){
-/*
-*  Name:
-*     CleanGrid
-
-*  Purpose:
-*     Release the structures holding grid information.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     TickInfo **CleanGrid( TickInfo **grid )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function releases the memory used to hold the grid information
-*     returned by function GridLines, and returns a NULL pointer.
-
-*  Parameters:
-*     grid
-*        Pointer to the information to be freed.
-
-*  Returned Value:
-*     A NULL pointer.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has already
-*     occurred.
-
-*/
-
-/* Local Variables: */
-   TickInfo *info;             /* Pointer to TickInfo structure being freed */
-   int i;                      /* Axis index */
-   int j;                      /* Tick mark index */
-
-/* Return if a NULL pointer has been supplied. */
-   if( !grid ) return NULL;
-
-/* Release each of the TickInfo structures in turn (if they exist). */
-   for( i = 0; i < 2; i++ ){
-      if( ( info = grid[ i ] ) ){
-
-/* Release the memory holding major tick mark values. */
-         (void) astFree( (void *) info->ticks );
-
-/* Release the memory holding minor tick mark values. */
-         (void) astFree( (void *) info->minticks );
-
-/* Release the memory holding curve section starting positions. */
-         (void) astFree( (void *) info->start );
-
-/* Release the memory holding curve section lengths. */
-         (void) astFree( (void *) info->length );
-
-/* If there are any tick mark labels in the structure... */
-         if( info->labels ){
-
-/* Release the memory holding each tick mark label. */
-            for( j = 0; j < info->nmajor; j++ ){
-               (void) astFree( (void *) info->labels[ j ] );
-            }
-
-/* Release the memory holding the pointers to the tick mark labels. */
-            (void) astFree( (void *) info->labels );
-
-/* Release the memory holding the format specification string. */
-            (void) astFree( (void *) info->fmt );
-
-         }
-
-/* Release the TickInfo structure. */
-         (void) astFree( (void *) info );
-      }
-   }
-
-/* Release the memory used to hold the two TickInfo pointers. */
-   (void) astFree( (void *) grid );
-
-/* Return. */
-   return NULL;
-
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Plot.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Plot member function (over-rides the astClearAttrib protected
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Plot, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPlot *this;                /* Pointer to the Plot structure */
-   char label[21];               /* Graphics item label */
-   const char *class;            /* Pointer to class string */
-   int axis;                     /* Axis number */
-   int id1;                      /* Plot object id */
-   int id2;                      /* Plot object id */
-   int id;                       /* Plot object id */
-   int len;                      /* Length of attrib string */
-   int nax;                      /* Number of base Frame axes */
-   int nc;                       /* No. characters read by astSscanf */
-   int id3;                      /* Third genuine identifier */
-   int nid;                      /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) this_object;
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
-   nax = astGetNin( this );
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Edge(axis). */
-/* ------------ */
-   if ( nc = 0,
-               ( 1 == astSscanf( attrib, "edge(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearEdge( this, axis - 1 );
-
-/* Grid. */
-/* ----- */
-   } else if ( !strcmp( attrib, "grid" ) ) {
-      astClearGrid( this );
-
-/* LabelUp */
-/* ------- */
-   } else if ( !strcmp( attrib, "labelup" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearLabelUp( this, axis );
-
-/* LabelUp(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelup(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLabelUp( this, axis - 1 );
-
-/* LogPlot */
-/* ------- */
-   } else if ( !strcmp( attrib, "logplot" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearLogPlot( this, axis );
-
-/* LogPlot(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "logplot(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLogPlot( this, axis - 1 );
-
-/* LogTicks */
-/* ------- */
-   } else if ( !strcmp( attrib, "logticks" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearLogTicks( this, axis );
-
-/* LogTicks(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "logticks(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLogTicks( this, axis - 1 );
-
-/* LogLabel */
-/* ------- */
-   } else if ( !strcmp( attrib, "loglabel" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearLogLabel( this, axis );
-
-/* LogLabel(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "loglabel(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLogLabel( this, axis - 1 );
-
-/* NumLab. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "numlab" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearNumLab( this, axis );
-
-/* NumLab(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "numlab(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearNumLab( this, axis - 1 );
-
-/* MinTick. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "mintick" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearMinTick( this, axis );
-
-/* MinTick(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "mintick(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearMinTick( this, axis - 1 );
-
-/* TextLab. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "textlab" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearTextLab( this, axis );
-
-/* TextLab(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "textlab(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearTextLab( this, axis - 1 );
-
-/* LabelUnits. */
-/* --------- */
-   } else if ( !strcmp( attrib, "labelunits" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearLabelUnits( this, axis );
-
-/* LabelUnits(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelunits(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLabelUnits( this, axis - 1 );
-
-/* Style. */
-/* ------ */
-   } else if ( !strcmp( attrib, "style" ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astClearStyle( this, id );
-
-/* Style(label). */
-/* --------------*/
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "style(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astClearStyle( this, id1 );
-      if( nid > 1 ) astClearStyle( this, id2 );
-      if( nid > 2 ) astClearStyle( this, id3 );
-
-/* Font. */
-/* ----- */
-   } else if ( !strcmp( attrib, "font" ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astClearFont( this, id );
-
-/* Font(label). */
-/* -------------*/
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "font(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astClearFont( this, id1 );
-      if( nid > 1 ) astClearFont( this, id2 );
-      if( nid > 2 ) astClearFont( this, id3 );
-
-/* Colour. */
-/* ------- */
-   } else if ( !strcmp( attrib, "colour" ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astClearColour( this, id );
-
-/* Colour(label). */
-/* ---------------*/
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "colour(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astClearColour( this, id1 );
-      if( nid > 1 ) astClearColour( this, id2 );
-      if( nid > 2 ) astClearColour( this, id3 );
-
-/* Color. */
-/* ------ */
-   } else if ( !strcmp( attrib, "color" ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astClearColour( this, id );
-
-/* Color(label). */
-/* --------------*/
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "color(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astClearColour( this, id1 );
-      if( nid > 1 ) astClearColour( this, id2 );
-      if( nid > 2 ) astClearColour( this, id3 );
-
-/* Width. */
-/* ------ */
-   } else if ( !strcmp( attrib, "width" ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astClearWidth( this, id );
-
-/* Width(label). */
-/* --------------*/
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "width(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
-                    nax, &id1, &id2, &id3, status );
-
-      astClearWidth( this, id1 );
-      if( nid > 1 ) astClearWidth( this, id2 );
-      if( nid > 2 ) astClearWidth( this, id3 );
-
-/* Size. */
-/* ----- */
-   } else if ( !strcmp( attrib, "size" ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astClearSize( this, id );
-
-/* Size(label). */
-/* -------------*/
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "size(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, attrib, "astClear", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astClearSize( this, id1 );
-      if( nid > 1 ) astClearSize( this, id2 );
-      if( nid > 2 ) astClearSize( this, id3 );
-
-/* LabelAt(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelat(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLabelAt( this, axis - 1 );
-
-/* Centre(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "centre(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearCentre( this, axis - 1 );
-
-/* Gap. */
-/* ---- */
-   } else if ( !strcmp( attrib, "gap" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearGap( this, axis );
-
-/* Gap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "gap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearGap( this, axis - 1 );
-
-/* LogGap. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "loggap" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearLogGap( this, axis );
-
-/* LogGap(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "loggap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearLogGap( this, axis - 1 );
-
-/* NumLabGap. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "numlabgap" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearNumLabGap( this, axis );
-
-/* NumLabGap(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "numlabgap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearNumLabGap( this, axis - 1 );
-
-/* TextLabGap. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "textlabgap" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearTextLabGap( this, axis );
-
-/* TextLabGap(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "textlabgap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearTextLabGap( this, axis - 1 );
-
-/* TitleGap. */
-/* --------- */
-   } else if ( !strcmp( attrib, "titlegap" ) ) {
-      astClearTitleGap( this );
-
-/* MajTickLen. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "majticklen" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearMajTickLen( this, axis );
-
-/* MajTickLen(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "majticklen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearMajTickLen( this, axis - 1 );
-
-/* MinTickLen. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "minticklen" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearMinTickLen( this, axis );
-
-/* MinTickLen(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "minticklen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearMinTickLen( this, axis - 1 );
-
-/* Labelling. */
-/* -------- */
-   } else if ( !strcmp( attrib, "labelling" ) ) {
-      astClearLabelling( this );
-
-/* TickAll. */
-/* -------- */
-   } else if ( !strcmp( attrib, "tickall" ) ) {
-      astClearTickAll( this );
-
-/* ForceExterior */
-/* ------------- */
-   } else if ( !strcmp( attrib, "forceexterior" ) ) {
-      astClearForceExterior( this );
-
-/* Invisible. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "invisible" ) ) {
-      astClearInvisible( this );
-
-/* Border. */
-/* ------- */
-   } else if ( !strcmp( attrib, "border" ) ) {
-      astClearBorder( this );
-
-/* ClipOp. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clipop" ) ) {
-      astClearClipOp( this );
-
-/* Clip. */
-/* ----- */
-   } else if ( !strcmp( attrib, "clip" ) ) {
-      astClearClip( this );
-
-/* Grf. */
-/* ---- */
-   } else if ( !strcmp( attrib, "grf" ) ) {
-      astClearGrf( this );
-
-/* DrawTitle. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "drawtitle" ) ) {
-      astClearDrawTitle( this );
-
-/* DrawAxes. */
-/* --------- */
-   } else if ( !strcmp( attrib, "drawaxes" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearDrawAxes( this, axis );
-
-/* Abbrev */
-/* ------ */
-   } else if ( !strcmp( attrib, "abbrev" ) ) {
-      for( axis = 0; axis < nax; axis++ ) astClearAbbrev( this, axis );
-
-/* DrawAxes(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "drawaxes(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearDrawAxes( this, axis - 1 );
-
-/* Abbrev(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "abbrev(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearAbbrev( this, axis - 1 );
-
-/* Escape. */
-/* ------- */
-   } else if ( !strcmp( attrib, "escape" ) ) {
-      astClearEscape( this );
-
-/* Tol. */
-/* ---- */
-   } else if ( !strcmp( attrib, "tol" ) ) {
-      astClearTol( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearLogPlot( AstPlot *this, int axis, int *status ){
-/*
-*
-*  Name:
-*     ClearLogPlot
-
-*  Purpose:
-*     Clear the value for a LogPlot attribute
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void ClearLogPlot( AstPlot *this, int axis, int *status )
-
-*  Class Membership:
-*     Plot member function 
-
-*  Description:
-*     Assigns the default value to the LogPlot attribute of the specified 
-*     axis, and also re-maps the base Frame of the Plot if necessary.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     axis
-*        Zero based axis index.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int oldval;           /* Original value of the attribute */
-   int newval;           /* Cleared (default) value of the attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the axis index. */ 
-   if( axis < 0 || axis >= 2 ){ 
-      astError( AST__AXIIN, "astClearLogPlot(%s): Index (%d) is invalid for "
-                "attribute LogPlot - it should be in the range 1 to 2.", status, 
-                astGetClass( this ), axis + 1 ); 
-
-/* Do nothing if the attribute is not currently set. */
-   } else if( astTestLogPlot( this, axis ) ){
-
-/* Get the original value of the attribute. clear the value, and then get
-   the new (default) value. */
-      oldval = this->logplot[ axis ];
-      this->logplot[ axis ] = -1;
-      newval = astGetLogPlot( this, axis );
-
-/* If the effective value has changed, attempt to remap the axis. If this
-   fails, re-instate the original value. */
-      if( ( oldval != 0 ) != ( newval != 0 ) ) {
-         if( !ToggleLogLin( this, axis, oldval, "astClearLogPlot", status ) ) {
-            this->logplot[ axis ] = oldval;
-         }
-      }
-   }
-} 
-
-static void Clip( AstPlot *this, int iframe, const double lbnd[], 
-                  const double ubnd[], int *status ){
-/*
-*++
-*  Name:
-c     astClip
-f     AST_CLIP
-
-*  Purpose:
-*     Set up or remove clipping for a Plot.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astClip( AstPlot *this, int iframe, const double lbnd[], 
-c                   const double ubnd[] )
-f     CALL AST_CLIP( THIS, IFRAME, LBND, UBND, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function defines regions of a Plot which are to be clipped.
-f     This routine defines regions of a Plot which are to be clipped.
-*     Any subsequent graphical output created using the Plot will then
-*     be visible only within the unclipped regions of the plotting
-*     area. See also the Clip attribute.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     iframe
-f     IFRAME = INTEGER (Given)
-*        The index of the Frame within the Plot to which the clipping
-c        limits supplied in "lbnd" and "ubnd" (below) refer. Clipping
-f        limits supplied in LBND and UBND (below) refer. Clipping
-*        may be applied to any of the coordinate systems associated
-*        with a Plot (as defined by the Frames it contains), so this
-*        index may take any value from 1 to the number of Frames in
-*        the Plot (Nframe attribute). In addition, the values
-*        AST__BASE and AST__CURRENT may be used to specify the base
-*        and current Frames respectively.
-*
-*        For example, a value of AST__CURRENT causes clipping to be
-*        performed in physical coordinates, while a value of AST__BASE
-*        would clip in graphical coordinates. Clipping may also be
-*        removed completely by giving a value of AST__NOFRAME. In this
-*        case any clipping bounds supplied (below) are ignored.
-c     lbnd
-f     LBND( * ) = DOUBLE PRECISION (Given)
-*        An array with one element for each axis of the clipping Frame
-c        (identified by the index "iframe"). This should contain the
-f        (identified by the index IFRAME). This should contain the
-*        lower bound, on each axis, of the region which is to remain
-*        visible (unclipped).
-c     ubnd
-f     UBND( * ) = DOUBLE PRECISION (Given)
-*        An array with one element for each axis of the clipping Frame
-c        (identified by the index "iframe"). This should contain the
-f        (identified by the index IFRAME). This should contain the
-*        upper bound, on each axis, of the region which is to remain
-*        visible (unclipped).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - Only one clipping Frame may be active at a time. This function
-f     - Only one clipping Frame may be active at a time. This routine
-*     will deactivate any previously-established clipping Frame before
-*     setting up new clipping limits.
-c     - The clipping produced by this function is in addition to that
-f     - The clipping produced by this routine is in addition to that
-*     specified by the Clip attribute which occurs at the edges of the 
-*     plotting area
-c     established when the Plot is created (see astPlot). The
-f     established when the Plot is created (see AST_PLOT). The
-*     underlying graphics system may also impose further clipping.
-*     - When testing a graphical position for clipping, it is first
-*     transformed into the clipping Frame. The resulting coordinate on
-*     each axis is then checked against the clipping limits (given by
-c     "lbnd" and "ubnd"). By default, a position is clipped if any
-f     LBND and UBND). By default, a position is clipped if any
-*     coordinate lies outside these limits. However, if a non-zero
-*     value is assigned to the Plot's ClipOp attribute, then a
-*     position is only clipped if the coordinates on all axes lie
-*     outside their clipping limits.
-*     - If the lower clipping limit exceeds the upper limit for any
-*     axis, then the sense of clipping for that axis is reversed (so
-*     that coordinate values lying between the limits are clipped
-*     instead of those lying outside the limits). To produce a "hole"
-*     in a coordinate space (that is, an internal region where nothing
-*     is plotted), you should supply all the bounds in reversed order,
-*     and set the ClipOp attribute for the Plot to a non-zero value.
-*     - Either clipping limit may be set to the value AST__BAD, which
-*     is equivalent to setting it to infinity (or minus infinity for a
-*     lower bound) so that it is not used.
-*     - If a graphical position results in any bad coordinate values
-*     (AST__BAD) when transformed into the clipping Frame, then it is
-*     treated (for the purposes of producing graphical output) as if
-*     it were clipped.
-*     - When a Plot is used as a Mapping to transform points
-c     (e.g. using astTran2), any clipped output points are assigned
-f     (e.g. using AST_TRAN2), any clipped output points are assigned
-*     coordinate values of AST__BAD.
-*     - An error results if the base Frame of the Plot is not
-*     2-dimensional.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *fr;           /* Pointer to the clipping Frame */
-   AstFrameSet *fset;      /* Pointer to the Plot's FrameSet */
-   int i;                  /* Axis index */
-   int ifrm;               /* The validated frame index */ 
-   int naxes;              /* No. of axes in the base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   ifrm = 0;
-
-/* Get a pointer to the FrameSet at the start of the Plot. */
-   fset = (AstFrameSet *) this;
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( fset );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "astClip(%s): Number of axes (%d) in the "
-                "base Frame of the supplied %s is invalid - this number "
-                "should be 2.", status, astGetClass( this ), naxes,  
-                astGetClass( this ) );
-   } 
-
-/* If clipping is to be switched on, check the supplied frame index and 
-   bounds. */
-   if( iframe != AST__NOFRAME && astOK ) {
-
-/* Report an error if either of the bounds pointers is NULL.*/
-      if( !lbnd ){
-         astError( AST__CLPAX, "astClip(%s): A NULL pointer was "
-                   "supplied for the array holding the lower bounds of "
-                   "the clipping volume.", status, astGetClass( this ) );
-      } else if( !ubnd ){
-         astError( AST__CLPAX, "astClip(%s): A NULL pointer was "
-                   "supplied for the array holding the upper bounds of "
-                   "the clipping volume.", status, astGetClass( this ) );
-      }
-
-/* Validate the clipping frame index. */
-      ifrm = astValidateFrameIndex( fset, iframe, "astClip" );
-
-/* Get the number of axes in the clipping frame. */
-      fr = astGetFrame( this, ifrm );
-      naxes = astGetNaxes( fr );
-      fr = astAnnul( fr );
-
-   }
-      
-/* Leave the current clipping information unchanged if an error has 
-   occurred. */
-   if( astOK ){
-
-/* Remove all clipping information from the Plot. */
-      this->clip_lbnd = (double *) astFree( (void *) this->clip_lbnd );
-      this->clip_ubnd = (double *) astFree( (void *) this->clip_ubnd );
-      this->clip_frame = AST__NOFRAME;
-      this->clip_axes = 0;
-
-/* If bounds have been supplied, set up new clipping information. */
-      if( iframe != AST__NOFRAME ){
-
-/* Store the information. */
-         this->clip_frame = ifrm;
-         this->clip_lbnd = astStore( NULL, lbnd, sizeof(double)*(size_t)naxes );
-         this->clip_ubnd = astStore( NULL, ubnd, sizeof(double)*(size_t)naxes );
-         this->clip_axes = naxes;
-
-/* If an error has occurred, remove all clipping information. */
-         if( !astOK ){
-            this->clip_lbnd = (double *) astFree( (void *) this->clip_lbnd );
-            this->clip_ubnd = (double *) astFree( (void *) this->clip_ubnd );
-            this->clip_frame = AST__NOFRAME;
-            this->clip_axes = 0;
-
-/* Otherwise, replace any bounds of AST__BAD with suitable default
-   values. */
-         } else {
-           for( i = 0; i < naxes; i++ ){
-              if( this->clip_lbnd[ i ] == AST__BAD ) this->clip_lbnd[ i ] = -DBL_MAX;
-              if( this->clip_ubnd[ i ] == AST__BAD ) this->clip_ubnd[ i ] = DBL_MAX;
-           }
-
-         }
-
-      }
-
-   }
-   
-/* Return. */
-   return;
-
-}
-
-static int Compared( const void *elem1, const void *elem2 ){
-/*
-*  Name:
-*     Compared
-
-*  Purpose:
-*     Compare two "double" values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Compared( const void *elem1, const void *elem2 )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function compares the two "double" values to which pointers
-*     are supplied, and returns an integer indicating which is larger,
-*     checking for AST__BAD values.  It is intended for use with the C 
-*     Run-Time-Library sorting function "qsort". 
-
-*  Parameters:
-*     elem1
-*        Pointer to the first "double".
-*     elem2
-*        Pointer to the second "double".
-
-*  Returned Value:
-*     Zero is returned if the values are equal. If the first is larger
-*     than the second then +1 is returned. Otherwise, -1 is returned.
-
-*  Notes:
-*     -  Values of AST__BAD are considered to be larger than any other
-*     value (other than another value of AST__BAD).
-*     -  If both values are AST__BAD, then zero is returned.
-*     -  This function executes even if an error has occurred.
-
-*/
-
-/* Local Variables: */
-   double *delem1;    /* Pointer to the first "double" value */
-   double *delem2;    /* Pointer to the second "double" value */
-   int ret;           /* The returned value */
-   
-/* Get pointers to the two "double" values. */
-   delem1 = (double *) elem1;
-   delem2 = (double *) elem2;
-
-/* Check the values for equality (including both values being AST__BAD). */
-   if( *delem1 == *delem2 ){
-      ret = 0;
-
-/* If the first is bad, then it is considered to be larger than the
-   second. */
-   } else if( *delem1 == AST__BAD ){
-      ret = 1;
-
-/* If the second is bad, then it is considered to be larger than the
-   first. */
-   } else if( *delem2 == AST__BAD ){
-      ret = -1;
-
-/* If the first is larger than the second, return 1. */
-   } else if( *delem1 > *delem2 ){
-      ret = 1;
-
-/* If the first is smaller than the second, return -1. */
-   } else {
-      ret = -1;
-
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int Compare_LL( const void *elem1, const void *elem2 ){
-/*
-*  Name:
-*     Compare_LL
-
-*  Purpose:
-*     Compare two LabelList structures as used by function PlotLabels.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Compare_LL( const void *elem1, const void *elem2 )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function compares two "LabelList" structures as used by function
-*     PlotLabels, and returns an integer indicating which has a larger 
-*     "index" value. This function is intended to be used with the C 
-*     Run-Time-Library sorting function "qsort". 
-
-*  Parameters:
-*     elem1
-*        Pointer to the first LabelList.
-*     elem2
-*        Pointer to the second LabelList. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the values are equal. If the first is larger
-*     than the second then +1 is returned. Otherwise, -1 is returned.
-
-*  Notes:
-*     -  This function executes even if an error has occurred.
-
-*/
-
-/* Local Variables: */
-   LabelList *ll1;           /* Pointer to the first LabelList */
-   LabelList *ll2;           /* Pointer to the second LabelList */
-   int ret;                  /* The returned value */
-   
-/* Get pointers to the two LabelList structures. */
-   ll1 = (LabelList *) elem1;
-   ll2 = (LabelList *) elem2;
-
-/* Compare the indices for the two label's. */
-   if( ll1->index < ll2->index ){
-      ret = -1;
-
-   } else if( ll1->index > ll2->index ){
-      ret = 1;
-
-   } else {
-      ret = 0;
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void CopyPlotDefaults( AstPlot *this, int axis, AstPlot *dplot, 
-                             int daxis, int *status ){
-/*
-*+
-*  Name:
-*     astCopyPlotDefaults
-
-*  Purpose:
-*     Copy used attribute defaults from one Plot to another.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void astCopyPlotDefaults( AstPlot *this, int axis, AstPlot *dplot, 
-*                               int daxis )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     Some of the attributes used by the Plot class have dynamic default
-*     values that are determined during the process of drawing an annotated
-*     grid using astGrid. The dynamic default values are stored in a
-*     separate set of components within the Plot structure. This function 
-*     copies these components from one Plot to another.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot containing the values ot be copied.
-*     axis
-*        The zero-based index of the axis within "this" for which the 
-*        used defaults are to be copied.
-*     dplot
-*        A pointer to another Plot into which the default attribute
-*        values are to be copied.
-*     daxis
-*        The zero based index of the axis within "dplot" which is to
-*        receive the new values.
-
-*-
-*/
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-   dplot->ulglb[ daxis ] = this->ulglb[ axis ];
-   dplot->ulgtk[ daxis ] = this->ulgtk[ axis ];
-   dplot->uloggap[ daxis ] = this->uloggap[ axis ];
-   dplot->ugap[ daxis ] = this->ugap[ axis ];
-   dplot->ucentre[ daxis ] = this->ucentre[ axis ];
-   dplot->uedge[ daxis ] = this->uedge[ axis ];
-   dplot->ulblat[ daxis ] = this->ulblat[ axis ];
-   dplot->ulbunit[ daxis ] = this->ulbunit[ axis ];
-   dplot->umintk[ daxis ] = this->umintk[ axis ];
-   dplot->utxtlb[ daxis ] = this->utxtlb[ axis ];
-   dplot->umjtkln[ daxis ] = this->umjtkln[ axis ];
-
-   dplot->ugrid = this->ugrid;
-   dplot->ulbling = this->ulbling;
-   dplot->uborder = this->uborder;
-}
-
-static int CountGood( int n, double *data, int *status ){
-/*
-*  Name:
-*     CountGood
-
-*  Purpose:
-*     Coount the number of non-bad values in an array.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CountGood( int n, double *data, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function returns the number of elements in the supplied array
-*     which do not have the value AST__BAD.
-
-*  Parameters:
-*     n
-*        The total number of elements in the array.
-*     data
-*        Pointer to the start of the array.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of good points in the array.
-
-*  Notes:
-*     -  A value of zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   int i;
-   int ngood;
-   double *value;
-
-/* Check global status. */
-   if( !astOK ) return 0;
-
-/* Initialise a pointer to the next array element, and the number of 
-   good elements found so far. */
-   value = data;
-   ngood = 0;
-
-/* Check each element. */
-   for( i = 0; i < n; i++ ){
-      if( *(value++) != AST__BAD ) ngood++;
-   }
-
-/* Return the answer. */
-   return ngood;
-
-}
-
-static int Cross( float ax, float ay, float bx, float by, 
-                  float cx, float cy, float dx, float dy, int *status ){
-/*
-*  Name:
-*     Cross
-
-*  Purpose:
-*     See if two line segments intersect.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Cross( float ax, float ay, float bx, float by, 
-*                float cx, float cy, float dx, float dy, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function sees if the line segment (A,B) intersects the line
-*     segment (C,D).
-
-*  Parameters:
-*     ax, ay
-*        The coordinates of A.
-*     bx, by
-*        The coordinates of B.
-*     cx, cy
-*        The coordinates of C.
-*     dx, dy
-*        The coordinates of D.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the line segments do not cross or if an error has already
-*     occurred, and 1 if they do.
-
-*/
-
-/* Local Variables: */
-   int ret;
-   float m1, m2, denom, num, t1, t2;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Get the fraction of the distance from A to B at which the line AB 
-   intersects the line CD. */
-   m1 = dx - cx;
-   m2 = dy - cy;
-   denom = (bx - ax)*m2 - (by-ay)*m1;
-   num = (ay - cy)*m1 - (ax - cx)*m2;
-
-   if( denom != 0.0 ) {
-      t1 = num / denom;
-
-/* If the the intersection occurs within the segment of the line between A
-   and B... */
-      if( t1 >= 0.0 && t1 <= 1.0 ){
-
-/* ... then get the fraction of the distance from C to D at which the
-   line CD intersects the line AB. */
-         m1 = bx - ax;
-         m2 = by - ay;
-         denom = (dx - cx)*m2 - (dy-cy)*m1;
-         num = (cy - ay)*m1 - (cx - ax)*m2;
-
-         if( denom != 0.0 ) {
-            t2 = num / denom;
-   
-/* If the the intersection occurs within the segment of the line between C
-   and D then the line segments intersect. */
-            if( t2 >= 0.0 && t2 <= 1.0 ){
-               ret = 1;
-            } else {
-               ret = 0;
-            }   
-
-/* If the two lines are parallel, then they do not intersect. */
-         } else {
-            ret = 0;
-         }      
-
-      } else {
-         ret = 0;
-      }
-
-   } else {
-      ret = 0;
-
-   }      
-
-   return ret;
-}
-
-static void Crv( AstPlot *this, double *d, double *x, double *y, int skipbad, 
-                 double *box, CrvStatics *pstatics, const char *method, 
-                 const char *class, int *status ){
-/*
-*  Name:
-*     Crv
-
-*  Purpose:
-*     Draw a curve.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Crv( AstPlot *this, double *d, double *x, double *y, int skipbad,
-*               double *box, CrvStatics *pstatics, const char *method, 
-*               const char *class, int *status  )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws a curve parameterised by the distance from some
-*     starting point. The function pointed to by the external variable 
-*     Crv_map is used to transform distances along the curve into graphics
-*     coordinates (X,Y). The supplied function parameters defined the 
-*     section of the curve to be drawn.
-*
-*     The algorithm used needs no knowledge about the nature of the mapping 
-*     performed by Crv_map, and can handle discontinuities in the curve. It 
-*     first of all determines if any of the segments of the curve can be 
-*     adequately represented by simply drawing a straight line through the 
-*     supplied end points. This decision is based on several requirements such 
-*     as keeping the angle between adjacent sections low and both ends being
-*     defined (i.e. X and Y not equal to AST__BAD). Any segments of the curve 
-*     which satisfy the requirements are draw as straight lines. If any of 
-*     the supplied curve segments cannot be drawn in this way, then they are 
-*     split up into a set of evenly-spaced sub-segments and the graphics 
-*     coordinates at the ends of these sub-segments are found using Crv_map. 
-*     This function is then called recursively to draw the sub-segments. This
-*     recursion is limited in depth by the requirement that all the 
-*     sub-segments must be longer than a specified lower limit. If this is not 
-*     the case, then the curve is assumed to be dis-continuous and and the 
-*     sub-segments are ignored.
-
-*  Parameters:
-*     d
-*        Pointer to an array of CRV_NPNT values giving the distance along
-*        the curve from the starting point to each of CRV_NPNT points. They 
-*        should increase monotonically, and should be in whatever units are
-*        used by the function pointed to by Crv_map. The curve is drawn from
-*        d[0] to d[CRV_NPNT].
-*     x
-*        Pointer to an array of CRV_NPNT values giving the graphics X 
-*        coordinate for the positions supplied in the array pointed to by 
-*        parameter "d". 
-*     y
-*        Pointer to an array of CRV_NPNT values giving the graphics Y
-*        coordinate for the positions supplied in the array pointed to by 
-*        parameter "d". 
-*     skipbad
-*        Controls what happens if all the supplied points are bad or 
-*        outside the plotting area. If skipbad is non-zero, then it is
-*        assumed that the supplied points represent an entirely bad (or
-*        out of bounds) section of the curve, and this function will
-*        return without attempt to sub-divide any of the supplied points.
-*        If skipbad is zero, then it is assumed that we may be able to find
-*        some good points between the supplied bad points, and therefore
-*        this function will attempt to sub-divide the supplied points.
-*        Should be supplied as zero on the initial invocation.
-*     box
-*        Pointer to an array of 4 doubles houlding a bounding box within
-*        which the current segment must reside if it is to be sub-divided.
-*        Supplied in the order xlo, xhi, ylo, yhi. May be NULL in which
-*        case, no check is made on the bounding box.
-*     pstatics
-*        Pointer to a structure holding values for variables which were
-*        statically defined within this function prior to the thread-safe
-*        version of AST. If a NULL pointer is supplied, a new structure
-*        is created in dynamic memory and initialised.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  External Variables:
-*     Crv_nent = int (Read/Write)
-*        The number of recursive entries which have been made into
-*        this function. This should be set to zero before entering 
-*        this function for the first time.
-*     Crv_ux0 = double (Read/Write)
-*        The X component in graphics coordinates of the unit vector 
-*        along the previous segment of the curve. This should be set
-*        to AST__BAD initially to indicate that the previous section
-*        is not defined.
-*     Crv_uy0 = double (Read/Write)
-*        The Y component of the unit vector along the previous segment.
-*     Crv_limit = double (Read)
-*        The square of the maximum acceptable residual between the 
-*        drawn curve and the true curve, in graphics coordinates.
-*     Crv_scerr = double (Read)
-*        If the ratio of the lengths of adjacent sub-segments is larger
-*        than Crv_scerr,then the seub-segments will be sub-divided. Note,
-*        if either axis is mapped logarithmically onto the screen, then 
-*        there will naturally be large changes in scale. Crv_scerr should 
-*        always be larger than 1.0.
-*     Crv_map = void (*)( int n, double *dd, double *xx, double *yy,
-*                         const char *method, const char *class ) (Read)
-*        A pointer to a function which can be called to map "n" distances 
-*        along the curve (supplied in "dd") into graphics coordinates 
-*        (stored in "xx" and "yy"). See function "Map1" as an example.
-*     Crv_clip = int (Read)
-*        Should lines be clipped at the edge of the plotting area?
-
-*  Notes:
-*     - The CRV_TRACE conditional compilation blocks in this function
-*     provide code which displays the recursive entries made to this 
-*     function (and also pauses on initial entry until return is pressed).
-*     It is useful for investigating the details of the drawing of a 
-*     curve.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS     /* Pointer to thread-specific global data */
-   CrvStatics *statics;   /* Pointer to structure holding static values */
-   double *dd;            /* Pointer to array holding sub-segment distances */
-   double *pd;            /* Pointer to next sub-segment distance */
-   double *px;            /* Pointer to next sub-segment x coord. */
-   double *py;            /* Pointer to next sub-segment y coord. */
-   double *xx;            /* Pointer to array holding sub-segment x coord.s */
-   double *yy;            /* Pointer to array holding sub-segment x coord.s */
-   double bbox[4];        /* Bounding box for this segment */
-   double dl2[ CRV_NSEG ];/* Squred segment lengths */
-   double dx[ CRV_NSEG ]; /* X increment along each segment */
-   double dy[ CRV_NSEG ]; /* Y increment along each segment */
-   int i;                 /* Segment index */
-   int seg_ok[ CRV_NSEG ];/* Flags indicating which segments can be drawn */
-   int subdivide;         /* Flag indicating if segments can be subdivided */
-
-/* Check inherited status */
-   if( !astOK ) return;                 
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* If required, allocate memory for a structure to hold the static
-   variables need by this function. */
-   if( ! pstatics ) {
-      statics = astMalloc( sizeof( CrvStatics ) );
-   } else {
-      statics = pstatics;
-   }
-
-/* If this is the first entry, set up the minimum length for a 
-   sub-segment in graphics coordinates. If any segment is less than
-   this minimum length, then recursion will stop and the curve will
-   be assumed to be dis-continuous. */
-   if( !Crv_nent ) {
-      statics->limit2 = 20.0*Crv_limit/(CRV_NSEG*CRV_NSEG);
-
-#ifdef CRV_TRACE
-      statics->levels[ 0 ] = 0;
-#endif
-   }
-
-
-/* Increment the number of entries into this function. */
-   Crv_nent++;
-
-#ifdef CRV_TRACE
-   for( i = 0; i < Crv_nent; i++ ) {
-      printf("%d ",statics->levels[ i ] );
-   }
-   printf("\n");
-
-   if( getchar() == 'm' ) {
-      float ffx,ffy;
-      for( i = 0; i < CRV_NPNT; i++ ) {
-         ffx = x[i]; ffy = y[i];
-         GMark( this, 1, &ffx, &ffy, 2, method, class, status );
-         GFlush( this, method, class, status );
-      }
-   }
-#endif
-
-/* ======================================================================
-   The first section of this function sets up some arrays holding 
-   information which will be used later on. It looks at each of the segments 
-   joing adjacent tabulated points, and finds and stores the increments in 
-   X and Y along each segment, and the square of the segment length. It 
-   also checks to see if the tabulated points are all bad, or if they are
-   all good. It also finds the lowest squared segment length.
-   ======================================================================*/
-
-/* Look at the first tabulated point. If it is good, set a flag to indicate 
-   that it can be used, store it as "the previous position" (i.e. the start of 
-   the current segment). Also set a flag ("all_bad") to indicate if all
-   points looked at so far have been bad, or outside the plotting area. */
-   if( *x != AST__BAD && *y != AST__BAD ){
-      statics->last_ok = 1;
-      statics->last_x = *x;
-      statics->last_y = *y;
-      statics->all_bad = ( *x < Crv_xlo || *x > Crv_xhi || 
-                  *y < Crv_ylo || *y > Crv_yhi ) && Crv_clip;
-   } else {
-      statics->last_ok = 0;
-      statics->all_bad = 1;
-   }
-
-/* Initialise the bouding box for the this segment. */
-   bbox[ 0 ] = DBL_MAX;
-   bbox[ 1 ] = -DBL_MAX;
-   bbox[ 2 ] = DBL_MAX;
-   bbox[ 3 ] = -DBL_MAX;
-
-/* Store pointers to the X and Y values for the "current position". This
-   is the position at the end of the current segment. This is initially 
-   the second tabulated point. */
-   px = x + 1;
-   py = y + 1;
-
-/* Store pointers to the increments and squared length for the current 
-   segment. */
-   statics->pdx = dx;
-   statics->pdy = dy;
-   statics->pdl2 = dl2;
-
-/* Initialise the number of long and short segments. */
-   statics->nlong = 0;
-   statics->nshort = 0;
-
-/* Loop round each segment. */
-   for( i = 0; i < CRV_NSEG; i++ ){
-
-/* If the tabulated point marking the end of the segment is good... */
-      if( *px != AST__BAD && *py != AST__BAD ){
-
-/* Update the bounding box. */
-         if( *px < bbox[ 0 ] ) bbox[ 0 ] = *px;
-         if( *px > bbox[ 1 ] ) bbox[ 1 ] = *px;
-         if( *py < bbox[ 2 ] ) bbox[ 2 ] = *py;
-         if( *py > bbox[ 3 ] ) bbox[ 3 ] = *py;
-
-/* If the point is within the plotting area, set the "statics->all_bad" flag to
-   indicate that at least 1 point is within the plotting area. */
-         if( !Crv_clip || ( *px >= Crv_xlo && *px <= Crv_xhi &&
-                            *py >= Crv_ylo && *py <= Crv_yhi ) ) statics->all_bad = 0;
-
-/* If the point marking the start of the segment was also good, find and 
-   store the increments and squared length for the segment, incrementing 
-   the pointers ready for the next segment. */
-         if( statics->last_ok ){
-            statics->t1 = *px - statics->last_x;
-            statics->t2 = *py - statics->last_y;
-            statics->t3 = statics->t1*statics->t1 + statics->t2*statics->t2;
-            *(statics->pdx++) = statics->t1;
-            *(statics->pdy++) = statics->t2;
-            *(statics->pdl2++) = statics->t3;
-
-/* Count the number of segments which are, and are not, shorter than the
-   minimum significant length. */
-            if( statics->t3 > statics->limit2 ) {
-               statics->nlong++;
-            } else {
-               statics->nshort++;
-            }
-
-/* If the start was bad, the length of the segment is not defined so store 
-   bad values. */
-         } else {
-            *(statics->pdx++) = AST__BAD;
-            *(statics->pdy++) = AST__BAD;
-            *(statics->pdl2++) = AST__BAD;
-         }
-
-/* The point at the end of the current segment becomes the point at the 
-   start of the next segment. */
-         statics->last_ok = 1;
-         statics->last_x = *(px++);
-         statics->last_y = *(py++);
-
-/* If the tabulated point marking the end of the current segment is bad, 
-   the segment length is undefined so store bad values. */
-      } else {
-         *(statics->pdx++) = AST__BAD;
-         *(statics->pdy++) = AST__BAD;
-         *(statics->pdl2++) = AST__BAD;
-
-/* The point at the end of the current segment becomes the point at the 
-   start of the next segment. */
-         statics->last_ok = 0;
-         px++;
-         py++;
-      }
-   }
-
-/* ======================================================================
-   The next section of this function checks to see lines can be drawn 
-   directly through any of the tabulated points. The flags in  "seg_ok" 
-   indicates if this is the case for each segment.
-   ======================================================================*/
-
-/* The unit vector along the previous segment is supplied in external
-   variables Crv_ux0 and Crv_uy0. These will be AST__BAD if the direction
-   of the previous segment is undefined. */
-   statics->vxl = Crv_ux0;
-   statics->vyl = Crv_uy0;
-
-/* The length of the previous segment is initially bad. */
-   statics->dll = AST__BAD;
-
-/* Set up some pointers used to walk through the arrays holding the lengths
-   of each segment. */
-   statics->pdl2 = dl2;
-   statics->pdx = dx;
-   statics->pdy = dy;
-
-/* Check each segment in turn to see if it can be drawn as a single
-   straight line. */
-   for( i = 0; i < CRV_NSEG; i++ ){
-
-/* A segment can only be drawn as a single line if both ends are good
-   and the distance between them is not zero. */
-      if( *statics->pdl2 != AST__BAD && *statics->pdl2 > 0.0 ){
-
-/* Get a unit vector in the direction of the current segment. */
-         statics->dl = sqrt( *statics->pdl2 );
-         statics->vx = *statics->pdx/statics->dl;
-         statics->vy = *statics->pdy/statics->dl; 
-
-/* If a unit vector in the direction of the previous segment is available, 
-   we check that the angle between the previous segment and the current 
-   segment is not too high. */
-         if( statics->vxl != AST__BAD ){
-            statics->cosang = statics->vxl*statics->vx + statics->vyl*statics->vy;
-
-/* If the angle is too high, set a flag to indicate that the segment cannot
-   be drawn as a single line. Also, set the flag for the previous segment as
-   well. */
-            if( statics->cosang < 0.8 ||
-                ( *statics->pdl2 )*( 1.0 - statics->cosang*statics->cosang ) > Crv_limit ) {
-               seg_ok[ i ] = 0;
-               if( i > 0 ) seg_ok[ i - 1 ] = 0;
-
-
-/* If the angle between this segment and the previous segment is not too
-   high, check that the scale has not changed too much. */
-            } else {
-
-/* If the scale (=vector length) has changed a lot, set a flag to indicate
-   that the segment cannot be drawn as a single line. Also, set the flag for 
-   the previous segment as well. */
-               if( statics->dll != AST__BAD && ( statics->dl < statics->dll/Crv_scerr || statics->dl > statics->dll*Crv_scerr ) ) {
-                  seg_ok[ i ] = 0;
-                  if( i > 0 ) seg_ok[ i - 1 ] = 0;
-
-/* If the orientation and scale of this segment has not changed much from
-   the previous segment, the segment can be drawn as a straight line. */
-               } else {
-                  seg_ok[ i ] = 1;
-               }
-            }
-
-/* If no unit vector is available for the previous segment, then assume
-   we are re-starting the curve after a discontinuity. In this case, we
-   can draw it as a straight line. */
-         } else {
-            seg_ok[ i ] = 1;
-         }
-
-/* Save the unit vector along the current segment for use next time. */
-         statics->vxl = statics->vx;
-         statics->vyl = statics->vy;      
-
-/* Save the length if the current segment for use next time. */
-         statics->dll = statics->dl;
-
-/* If the length of the current segment is undefined, or zero, we cannot
-   draw it as a single line. Also, there is no direction vector to pass
-   on to the next time, so set them bad. */
-      } else {
-         seg_ok[ i ] = 0;
-         statics->vxl = AST__BAD;
-         statics->vyl = AST__BAD;      
-         statics->dll = AST__BAD;
-      }
-
-/* Point to the next segment. */
-      statics->pdl2++;
-      statics->pdx++;
-      statics->pdy++;
-   
-   }
-
-/* Do not allow isolated segments to be OK. If a segment is flagged as being 
-   OK, but both its neighbours are not OK, set the segment not OK as well. */
-   statics->seg0 = seg_ok + 1;
-   statics->segm = seg_ok;
-   statics->segp = seg_ok + 2;
-
-   if( !(*statics->seg0) ) *statics->segm = 0;
-
-   for( i = 1; i < CRV_NSEG - 1; i++ ){
-      if( !(*statics->segm) && !(*statics->segp) ) *statics->seg0 = 0;
-      statics->seg0++;
-      statics->segm++;
-      statics->segp++;
-   }
-
-   if( !(*statics->segm) ) *statics->seg0 = 0;
-
-/* ======================================================================
-   The next section of this function draws the curve. Each segment is drawn
-   as a straight line if the corresponding flag in "seg_ok" is set.
-   Segments for which the flag is not set are drawn by calling this function 
-   recursivly.
-   ======================================================================*/
-
-/* Get the parametric length (i.e. the increment in "d") of the sub-segments
-   within each subdivided segment. */
-   statics->delta = ( d[ CRV_NSEG ] - d[ 0 ] )/(double)( CRV_NSEG*CRV_NSEG );
-
-/* If we have made the maximum number of recursive entries into this
-   function, or if every supplied point was bad or outside the plotting
-   area, or if most of the segments were very short in graphics space, we will 
-   not be attempting to subdivide any segments which cannot be drawn directly 
-   as a straight line. If "skipbad" was supplied as zero, we ignore the 
-   restriction which says that we must have some good points (since we
-   may find some good poits by a further sub-division). */
-   subdivide = ( Crv_nent < CRV_MXENT && 
-                 ( !statics->all_bad || !skipbad ) &&
-                 statics->nlong > statics->nshort );
-
-/* We do not sub-divide if the bounding box of the supplied points
-   is not at least 10% smaller than the supplied bouding box on either axis. */
-   if( box && bbox[ 0 ] != DBL_MAX ) {
-      if( bbox[ 1 ] - bbox[ 0 ] > 0.9*( box[ 1 ] - box[ 0 ] ) &&
-          bbox[ 3 ] - bbox[ 2 ] > 0.9*( box[ 3 ] - box[ 2 ] ) ) {
-         subdivide = 0;
-      }
-   }
-
-/* Initialise some pointers to the data defineding the subsegments. */
-   dd = NULL;
-   xx = NULL;
-   yy = NULL;
-   
-/* If we may be subdividing any segments, find which segments they are
-   and set up the offset to each sub-segment. */
-   if( subdivide ){
-
-/* Initialise the number of segments being subdivided. */
-      statics->nseg = 0;
-   
-/* Loop round each segment. */
-      for( i = 0; i < CRV_NSEG; i++ ){
-
-/* If the segment cannot be drawn directly as a straight line, we will 
-   subdivide it. */
-         if( !seg_ok[ i ] ){
-
-/* Increment the number of segments being subdivided, and let the array
-   of subsegment offsets grow to accomodate it. */
-            statics->nseg++;
-            dd = (double *) astGrow( dd, statics->nseg, sizeof(double)*( CRV_NSEG + 1 ) );
-            if( !astOK ) break;
-
-/* Append the offset to each new subsegment to the "dd" array. */
-            statics->el = ( statics->nseg - 1 )*( CRV_NSEG + 1 );
-            statics->d0 = d[ i ];
-            for( statics->j = 0; statics->j <= CRV_NSEG; statics->j++ ){
-               dd[ statics->el++ ] = statics->d0;
-               statics->d0 += statics->delta;
-            }
-         }
-      }
-
-/* If any segments needed subdividing, get room to store the graphics
-   coordinates at each point, and then fill these arrays by calling 
-   Crv_map to map the offsets in "dd" into graphics coordinates. */
-      if( statics->nseg > 0 ){
-         statics->nel = statics->nseg*( CRV_NSEG + 1 );
-         xx = (double *) astMalloc( sizeof(double)*(size_t)statics->nel );
-         yy = (double *) astMalloc( sizeof(double)*(size_t)statics->nel );
-         Crv_map( statics->nel, dd, xx, yy, method, class, status GLOBALS_NAME );             
-      }
-   }
-
-/* If all has gone OK, we will draw each segment. Initialise pointers
-   used to walk through the "xx", "yy" and "dd" arrays. */      
-   if( astOK ){
-      px = xx;
-      py = yy;
-      pd = dd;
-
-/* Draw each segment in turn. */
-      for( i = 0; i < CRV_NSEG; i++ ){
-
-/* If possible, draw it as a single straight line, and then store the 
-   unit vector along the line in the appropriate external variables for
-   use by the next invocation of this function. */
-         if( seg_ok[ i ] ){
-            CrvLine( this, x[ i ], y[ i ], x[ i + 1 ], y[ i + 1 ], method, class, status );   
-            statics->dl = sqrt( dl2[ i ] );
-            Crv_ux0 = dx[ i ]/statics->dl;
-            Crv_uy0 = dy[ i ]/statics->dl; 
-
-/* Otherwise, if we are subdividing, and if the current segment is
-   not very short, we call this function recursively to draw the segment.
-   Increment pointers into the "xx", "yy" and "dd" arrays so that they
-   point to the start of the subsegment information for the next segment
-   to be subdivided. If all the graphics positions at this level were 
-   bad or outside the plot, tell the next invocation of Crv to do no
-   further sub-divisions if it too finds all graphics positions to be bad or
-   outside the plot. */
-         } else if( subdivide ) {
-
-#ifdef CRV_TRACE
-            statics->levels[ Crv_nent ] = i;
-#endif
-
-            Crv( this, pd, px, py, statics->all_bad, bbox, statics, method, 
-                 class, status );
-            pd += CRV_NSEG + 1;
-            px += CRV_NSEG + 1;
-            py += CRV_NSEG + 1;
-
-/* Otherwise, we assume we have hit a discontinuity in the curve. Store
-   bad values for the unit vector along the previous sgment, and do not 
-   draw anything. */
-         } else {
-            Crv_ux0 = AST__BAD;
-            Crv_uy0 = AST__BAD;
-         }
-       }
-    }
-  
-/* Free any memory used to store subsegment information. */   
-   if( dd ) dd = (double *) astFree( (void *) dd );
-   if( xx ) xx = (double *) astFree( (void *) xx );
-   if( yy ) yy = (double *) astFree( (void *) yy );
-
-/* Decrement the number of recursive entries into this function. */
-   Crv_nent--;                 
-
-/* Free the memory holding the static data values if we are leaving the
-   final entry. */
-   if( ! pstatics ) statics = astFree( statics );
-
-/* Return. */
-   return;
-}
-
-static int CvBrk( AstPlot *this, int ibrk, double *brk, double *vbrk, 
-                     double *len, int *status ){
-/*
-*+
-*  Name:
-*     astCvBrk
-
-*  Purpose:
-*     Return information about breaks in the last curve drawn by astGridLine,
-*     astCurve or astGenCurve.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int CvBrk( AstPlot *this, int ibrk, double *brk, double *vbrk,
-*                   double *len )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     Curves drawn by astGridLine, astCurve or astGenCurve may contain breaks 
-*     for several reasons (for instance, it may go outside the plotting area, 
-*     or the mapping between physical and graphics coordinates may be 
-*     discontinuous). This function returns information about such breaks.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     ibrk
-*        The index of the break for which information is required. The first
-*        break has index 1. An error is reported if no break with the 
-*        required index exists. The exception to this is that zero can be 
-*        supplied, in which case the "brk" and "vbrk" parameters
-*        are ignored, but all other information is returned.
-*     brk
-*        A pointer to an array of 2 elements
-*        in which to return the X and Y graphics coordinates of the break.
-*     vbrk
-*        A pointer to an array of 2 elements
-*        in which to return the X and Y components of a unit vector in the 
-*        graphics coordinate system. The vector is tangential to the curve 
-*        at the requested break, and points back along the drawn section of 
-*        the curve.
-*     len 
-*        A pointer to a "double" in which to return the
-*        length of the drawn curve, in the graphics coordinate system.
-
-*   Returned Value:
-*     astCvBrk()
-*        The number of breaks which occurred in the curve.
-
-*  Notes:
-*     -  Currently, this function may not be used to return information
-*     about curves drawn using astPolyCurve.
-*     -  All curves contain at least two breaks; one at the start and one 
-*     at the end. This is true even if the start and end of the curve are
-*     coincident. However, if the entire curve was outside the plotting area
-*     (i.e. if the length of the drawn curve is zero), then it will have no
-*     breaks.
-*     -  If no curve has yet been drawn by astGridLine or astCurve, then -1 is 
-*     returned for the function value, and the function parameter values are 
-*     left unchanged.
-*     -  The returned information refers to the most recent curve drawn by
-*     astGridLine or astCurve, even if that curve was drawn by a Plot other than 
-*     the one supplied to this function.
-*     -  NULL pointers may be supplied for "brk", "vbrk" or "len", in which
-*     case the corresponding values are not returned.
-*     -  Zero is returned by this function if an error has already occurred, 
-*     or if this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS   /* Pointer to thread-specific global data */
-   int ret;             /* The number of breaks in the curve. */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Information about the most recent curve drawn by astGridLine or astCurve is 
-   stored in the external structure "Curve_data". Get the number of breaks 
-   in the last curve. This is initialised to -1 in astInitPlot when the 
-   virtual function table for this class is initialised. */
-   ret = Curve_data.nbrk;   
-
-/* If a curve has been drawn, store the length of the drawn curve if 
-   required. */
-   if( ret != -1 ){
-      if( len ) *len = (double) Curve_data.length;
-
-/* If a legal break index has been supplied, return the position and 
-   direction at the requested break (if required). */
-      if( ibrk > 0 && ibrk <= ret ){
-         if( brk ){
-            brk[ 0 ] =  (double) Curve_data.xbrk[ ibrk - 1 ];
-            brk[ 1 ] =  (double) Curve_data.ybrk[ ibrk - 1 ];
-         }
-         if( vbrk ){
-            vbrk[ 0 ] =  (double) Curve_data.vxbrk[ ibrk - 1 ];
-            vbrk[ 1 ] =  (double) Curve_data.vybrk[ ibrk - 1 ];
-         }
-      
-/* If an illegal break index has been supplied (other than zero), report
-   an error, and set the number of breaks to zero. */
-      } else if( ibrk ){
-         if( ret > 0 ){
-            astError( AST__BDBRK, "astCvBrk(%s): The supplied break index "
-                      "(%d) should be in the range [1,%d].", status, astGetClass(this),
-                      ibrk, ret );      
-            ret = 0;
-         } else {
-            astError( AST__BDBRK, "astCvBrk(%s): The most recent curve "
-                      "plotted by method astGridLine or astCurve had no breaks.", status, 
-                      astGetClass(this) );
-         }
-      }
-    }
-
-/* If an error has occurred, return 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the result. */
-   return ret;
-   
-}
-
-static void CrvLine( AstPlot *this, double xa, double ya, double xb, double yb,
-                     const char *method, const char *class, int *status ){
-/*                     
-*  Name:
-*     CrvLine
-
-*  Purpose:
-*     Draw a straight line between two points, with clipping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void CrvLine( AstPlot *this, double xa, double ya, double xb, double yb,
-*                   const char *method, const char *class )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This functions draws a straight line from (xa,ya) to (xb,yb), breaking 
-*     the line at the edges of the plotting area defined by Crv_xlo, Crv_xhi,
-*     Crv_ylo and Crv_yhi if Crv_clip is non-zero. If the line does not start 
-*     at the end of the previous line plotted by this function, then 
-*     information describing the break in the curve is stored in external 
-*     arrays.
-
-*  Parameters:
-*     xa
-*        The graphics X coordinate at the start of the line.
-*     ya
-*        The graphics Y coordinate at the start of the line.
-*     xb
-*        The graphics X coordinate at the end of the line.
-*     yb
-*        The graphics Y coordinate at the end of the line.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*  External Variables:
-*     Crv_ink = int (Read)
-*        If zero then no line is drawn even if the line intersects the
-*        plotting space, but break information (etc) is still returned.
-*     Crv_clip = double (Read)
-*        Clip lines at boundary of plotting space?
-*     Crv_xlo = double (Read)
-*        Lower x limit of the plotting space.
-*     Crv_xhi = double (Read)
-*        Upper x limit of the plotting space.
-*     Crv_ylo = double (Read)
-*        Lower y limit of the plotting space.
-*     Crv_yhi = double (Read)
-*        Upper y limit of the plotting space.
-*     Crv_tol = double (Read)
-*        The tolerance for determining if 2 points are coincident.
-*     Crv_out = int (Read/Write)
-*        Returned as zero if the line intersects the plotting space.
-*        Unchanged otherwise.
-*     Crv_xbrk = float * (Read/Write)
-*        Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK 
-*        values containing the graphics X coordinates at which each break 
-*        in the plotted curve occurred. A break is recorded if the starting
-*        point of the current line is not the same as the end point of
-*        the previous line. 
-*     Crv_ybrk = float * (Read/Write)
-*        Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK 
-*        values containing the graphics Y coordinates at which each break 
-*        in the plotted curve occurred. 
-*     Crv_vxbrk = float * (Read/Write)
-*        Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK 
-*        values containing the X component of the unit vector (within the 
-*        graphics coordinate system) parallel to the tangent to the curve 
-*        at each break. The sense is such that the vector always points back 
-*        along the plotted section of the curve. 
-*     Crv_vybrk = float * (Read/Write)
-*        Pointer to the next available element in an array of AST__PLOT_CRV_MXBRK 
-*        values containing the Y component of the unit vector parallel to 
-*        the tangent to the curve at each break. 
-*     Crv_nbrk = int (Write)
-*        The number of breaks for which information is returned in Crv_xbrk,
-*        etc.
-*     Crv_len = float (Write)
-*        The length of the section of the curve which has been drawn so far.
-*     Crv_xl = double (Write)
-*        The graphics X coordinate at the end of the last line drawn.
-*     Crv_yl = double (Write)
-*        The graphics Y coordinate at the end of the last line drawn.
-*     Crv_vxl = double (Write)
-*        The X component of the unit vector along the last line drawn.
-*     Crv_vyl = double (Write)
-*        The Y component of the unit vector along the last line drawn.
-
-*/
-
-/* local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   double a1;    /* Distance from B to the lower x boundary */
-   double a2;    /* Distance from B to the upper x boundary */
-   double a3;    /* Distance from B to the lower y boundary */
-   double a4;    /* Distance from B to the upper y boundary */
-   double aamax; /* Distance from supplied point B to the plotable point A */
-   double aamin; /* Distance from supplied point B to the plotable point B */
-   double dl;    /* Length of plotted line segment */
-   double dx;    /* Difference in x between supplied points */
-   double dy;    /* Difference in y between supplied points */
-   double t;     /* Temporary storage */
-   double xam;   /* Modified xa position */
-   double xbm;   /* Modified xb position */
-   double yam;   /* Modified ya position */
-   double ybm;   /* Modified yb position */
-   int plot;     /* True if a line can be plotted */
-
-/* Check inherited global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   dl = 0.0;
-   xam = 0.0;
-   xbm = 0.0;
-   yam = 0.0;
-   ybm = 0.0;
-
-/* Store the shifts in x and y. */
-   dx = xb - xa;
-   dy = yb - ya;
-
-/* Do nothing if the line is of zero length. */
-   if( dx == 0.0 && dy == 0.0 ) return;
-
-/* If either end is outside the zone, replace the given coordinates with
-   the end coordinates of the section of the line which lies within the
-   zone. */
-   if( Crv_clip && ( xa < Crv_xlo || xa > Crv_xhi || 
-                     xb < Crv_xlo || xb > Crv_xhi ||
-                     ya < Crv_ylo || ya > Crv_yhi ||  
-                     yb < Crv_ylo || yb > Crv_yhi ) ){
-
-/* Find the distance from point B towards point A at which the
-   line cuts the two x bounds of the zone (distance at point B is
-   0.0, and at point A is 1.0). */
-      if( dx != 0.0 ){
-         a1 = ( xb - Crv_xlo )/dx;
-         a2 = ( xb - Crv_xhi )/dx;
-
-/* Ensure that a1 represents the highest plottable offset, and a2 the
-   lowest. */
-         if( a1 < a2 ){
-            t = a1;
-            a1 = a2;
-            a2 = t;
-         }
-
-/* If the line joining A and B is vertical... */
-      } else {
-
-/* If the line is within the plottable x range, indicate that all
-   offsets are plottable (as far as the x range is concerned at least). */
-         if( ( xa > Crv_xlo || EQUAL( xa, Crv_xlo ) ) && 
-             ( xa < Crv_xhi || EQUAL( xa, Crv_xhi ) ) ){
-            a1 = DBL_MAX;
-            a2 = -DBL_MAX;
-
-/* If the line is ouside the plottable x range, indicate that no
-   offsets are plottable. */
-         } else {
-            a1 = 0.0;
-            a2 = 0.0;
-         }
-       }
-
-/* Find the fractional distance from point A to point B at which the
-   line cuts the two y bounds of the zone. */
-      if( dy != 0.0 ){
-         a3 = ( yb - Crv_ylo )/dy;
-         a4 = ( yb - Crv_yhi )/dy;
-
-/* Ensure that a3 represents the highest plottable offset, and a4 the
-   lowest. */
-         if( a3 < a4 ){
-            t = a3;
-            a3 = a4;
-            a4 = t;
-         }
-
-/* If the line joining A and B is horizontal... */
-      } else {
-
-/* If the line is within the plottable y range, indicate that all
-   offsets are plottable (as far as the y range is concerned at least). */
-         if( ( ya > Crv_ylo || EQUAL( ya, Crv_ylo ) ) && 
-             ( ya < Crv_yhi || EQUAL( ya, Crv_yhi ) ) ){
-            a3 = DBL_MAX;
-            a4 = -DBL_MAX;
-
-/* If the line is ouside the plottable y range, indicate that no
-   offsets are plottable. */
-         } else {
-            a3 = 0.0;
-            a4 = 0.0;
-         }
-      }
-
-/* Find the fractional distances from point A to point B at the ends
-   of the plotable line. */
-      aamin = MIN( 1.0, MAX( 0.0, MAX( a2, a4 ) ) );
-      aamax = MAX( 0.0, MIN( 1.0, MIN( a1, a3 ) ) );
-
-/* Store the end coordinates of the line joining the plotable points. */
-      if( aamax > aamin ){
-         xam = xb - aamax*dx;
-         yam = yb - aamax*dy;
-         xbm = xb - aamin*dx;
-         ybm = yb - aamin*dy;
-         plot = 1;
-
-/* Get the unit vector along the line and the length of the plotted section. */
-         dl = sqrt( dx*dx + dy*dy ); 
-         dx /= dl;
-         dy /= dl;
-         dl *= MAX( 0.0, aamax - aamin );
-
-/* Clear the "plot" flag if the line does not intersect the plotting area. */
-      } else {
-         plot = 0;
-      }
-
-/* If both ends of the line are within the plotting zone, draw the whole
-   line between the supplied end points. */
-   } else {
-      xam = xa;
-      yam = ya;
-      xbm = xb;
-      ybm = yb;
-      plot = 1;
-
-/* Get the length of the line and the unit vector along the line. */
-      dl = sqrt( dx*dx + dy*dy ); 
-      dx /= dl;
-      dy /= dl;
-    }
-
-/* If a line is to be plotted... */
-   if( plot ){
-      
-/* If this is the first line to be plotted in the current curve, save
-   the start of the line as a break, and indicate that some of the curve
-   falls within the plotting zone. */
-      if( Crv_out ){
-         Crv_nbrk = 1;
-         *(Crv_xbrk++) = (float) xam;
-         *(Crv_ybrk++) = (float) yam;
-         *(Crv_vxbrk++) = (float) dx;
-         *(Crv_vybrk++) = (float) dy;
-         Crv_out = 0;
-
-/* Set the length of the curve plotted so far to the length of this first
-   segment. */
-         Crv_len = (float) dl;
-
-/* Start a poly line. */
-         if( Crv_ink ) Bpoly( this, (float) xam,  (float) yam, method, class, status );
-
-/* If this is not the first line to be plotted... */
-      } else {
-
-/* ... increment the length of the curve plotted so far. */
-         Crv_len += (float) dl;
-
-/* If the start of this line is not coincident with the end
-   of the previous line, save the previous and current positions as 
-   breaks in the curve. Note, the previous vector is reversed so that 
-   it points back towards the drawn section of the curve. Report an 
-   error if the arrays are full. */
-         if( fabs( xam - Crv_xl ) > Crv_tol || 
-             fabs( yam - Crv_yl ) > Crv_tol ){
-            Crv_nbrk += 2;
-             if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
-               astError( AST__CVBRK, "%s(%s): Number of breaks in plotted "
-                         "curve exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
-            } else {
-               *(Crv_xbrk++) = (float) Crv_xl;
-               *(Crv_ybrk++) = (float) Crv_yl;
-               *(Crv_vxbrk++) = (float) -Crv_vxl;
-               *(Crv_vybrk++) = (float) -Crv_vyl;
-                *(Crv_xbrk++) = (float) xam;
-               *(Crv_ybrk++) = (float) yam;
-               *(Crv_vxbrk++) = (float) dx;
-               *(Crv_vybrk++) = (float) dy;
-            }
-
-/* Start a poly line. */
-            if( Crv_ink ) Bpoly( this, (float) xam,  (float) yam, method, class, status );
-          }
-      }
-
-/* Append a section to the current poly line. */
-      if( Crv_ink ) Apoly( this, (float) xbm,  (float) ybm, method, class, status );
-
-/* Save the position and vector at the end of the current line. */
-      Crv_xl = xbm;
-      Crv_yl = ybm;
-      Crv_vxl = dx;
-      Crv_vyl = dy;
-    }
-
-/* Return. */
-   return;
-}
-
-
-static void Curve( AstPlot *this, const double start[],
-                                  const double finish[], int *status ){
-/*
-*++
-*  Name:
-c     astCurve
-f     AST_CURVE
-
-*  Purpose:
-*     Draw a geodesic curve.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astCurve( AstPlot *this, const double start[],
-c                                   const double finish[] )
-f     CALL AST_CURVE( THIS, START, FINISH, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function draws a geodesic curve between two points in the
-f     This routine draws a geodesic curve between two points in the
-*     physical coordinate system of a Plot.  The curve drawn is the
-*     path of shortest distance joining the two points (as defined by
-c     the astDistance function for the current Frame of the Plot).
-f     the AST_DISTANCE function for the current Frame of the Plot).
-*     For example, if the current Frame is a basic Frame, then the
-*     curve joining the two points will be a straight line in physical
-*     coordinate space.  If the current Frame is more specialised and
-*     describes, for instance, a sky coordinate system, then the
-*     geodesic curve would be a great circle in physical coordinate
-*     space passing through the two sky positions given.
-*
-*     Note that the geodesic curve is transformed into graphical
-*     coordinate space for plotting, so that a straight line in
-*     physical coordinates may result in a curved line being drawn if
-*     the Mapping involved is non-linear. Any discontinuities in the
-*     Mapping between physical and graphical coordinates are
-c     catered for, as is any clipping established using astClip.
-f     catered for, as is any clipping established using AST_CLIP.
-*
-c     If you need to draw many geodesic curves end-to-end, then the
-c     astPolyCurve function is equivalent to repeatedly using
-c     astCurve, but will usually be more efficient.
-f     If you need to draw many geodesic curves end-to-end, then the
-f     AST_POLYCURVE routine is equivalent to repeatedly calling
-f     AST_CURVE, but will usually be more efficient.
-*
-c     If you need to draw curves which are not geodesics, see astGenCurve
-c     or astGridLine.
-f     If you need to draw curves which are not geodesics, see AST_GENCURVE
-f     or AST_GRIDLINE.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     start
-f     START( * ) = DOUBLE PRECISION (Given)
-*        An array, with one element for each axis of the Plot, giving
-*        the physical coordinates of the first point on the geodesic
-*        curve.
-c     finish
-f     FINISH( * ) = DOUBLE PRECISION (Given)
-*        An array, with one element for each axis of the Plot, giving
-*        the physical coordinates of the second point on the geodesic
-*        curve.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - No curve is drawn if either of the "start" or "finish" arrays
-c     contains any coordinates with the value AST__BAD.
-f     - No curve is drawn if either of the START or FINISH arrays
-f     contains any coordinates with the value AST__BAD.
-*     - An error results if the base Frame of the Plot is not 2-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   int naxes;              /* No. of axes in the base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astCurve";
-   class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Initialise the bounding box for primitives produced by this call. */
-   if( !Boxp_freeze ) {
-      Boxp_lbnd[ 0 ] = FLT_MAX;
-      Boxp_lbnd[ 1 ] = FLT_MAX;
-      Boxp_ubnd[ 0 ] = FLT_MIN;
-      Boxp_ubnd[ 1 ] = FLT_MIN;
-   }
-
-/* Draw the curve. The break information is stored in an external structure
-   where it can be accessed by public methods which return information
-   about the most recently drawn curve. */
-   CurvePlot( this, start, finish, 1, &Curve_data, method, class, status );
-
-/* Return. */
-   return;
-
-}
-
-static void CurvePlot( AstPlot *this, const double *start, const double *finish, 
-                     int ink, AstPlotCurveData *cdata, const char *method, 
-                     const char *class, int *status ){
-/*
-*
-*  Name:
-*     CurvePlot
-
-*  Purpose:
-*     Draw a geodesic curve.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void CurvePlot( AstPlot *this, const double *start, const double *finish, 
-*                   int ink, AstPlotCurveData *cdata, const char *method, 
-*                   const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws a geodesic curve between the supplied starting and
-*     finishing positions. The algorithm used can handle discontinuities in the
-*     Mapping between the current Frame and graphics coordinates, and 
-*     information describing any breaks in the curve (including the start and
-*     end of the curve) are returned in the supplied AstPlotCurveData structure. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     start
-*        A pointer to a an array holding the coordinates of the start of the 
-*        curve within the current Frame of the Plot.
-*     finish
-*        A pointer to a an array holding the coordinates of the finish of the 
-*        curve within the current Frame of the Plot.
-*     ink
-*        If zero, the curve is not actually drawn, but information about 
-*        the breaks is still returned. If non-zero, the curve is also drawn.
-*     cdata
-*        A pointer to a structure in which to return information about the
-*        breaks in the curve.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  No curve is draw if the "start" or "finish" arrays contains any bad 
-*     values, or if a NULL pointer is supplied for "cdata". No errors are 
-*     reported in these cases.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   double d[ CRV_NPNT ];   /* Offsets to evenly spaced points along curve */
-   double x[ CRV_NPNT ];   /* X coords at evenly spaced points along curve */
-   double y[ CRV_NPNT ];   /* Y coords at evenly spaced points along curve */
-   double tol;             /* Absolute tolerance value */
-   int i;                  /* Loop count */
-   int naxes;              /* No. of axes in the base Frame */
-   int ok;                 /* Are all start coords good? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Get the number of axes in the current Frame. */
-   naxes = astGetNout( this );
-
-/* Check the "start" and "finish" parameter for bad values. */
-   ok = 1;
-   for( i = 0; i < naxes; i++ ) {
-      if( start[ i ] == AST__BAD || finish[ i ] == AST__BAD ){
-         ok = 0;
-         break;
-      }
-   }
-
-/* Check that the "cdata" pointer can be used. */
-   if( !cdata ) ok = 0;
-
-/* Only proceed if the parameters are OK, and there has been no error. */
-   if( ok && astOK ){   
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-      astGrfAttrs( this, AST__CURVE_ID, 1, GRF__LINE, method, class );
-
-/* Set up the externals used to communicate with the Map3 function...
-   The number of axes in the physical coordinate system (i.e. the current
-   Frame). */
-      Map3_ncoord = naxes;
-
-/* A pointer to the Plot, the Curretn Frame, and and Mapping. */
-      Map3_plot = this;
-      Map3_frame = astGetFrame( this, AST__CURRENT );
-      Map3_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* The physical coordinates at the start of the curve. */
-      Map3_origin = start;
-
-/* The physical coordinates at the end of the curve. */
-      Map3_end = finish;
-
-/* The scale factor to convert "dist" values into physical offset values. */
-      Map3_scale = astDistance( Map3_frame, start, finish );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
-      tol = astGetTol( this )*MAX( this->xhi - this->xlo, 
-                                   this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
-      Crv_scerr = ( astGetLogPlot( this, 0 ) || 
-                    astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
-      Crv_ux0 = AST__BAD;    
-      Crv_tol = tol;
-      Crv_limit = 0.5*tol*tol;
-      Crv_map = Map3;
-      Crv_ink = ink;
-      Crv_xlo = this->xlo;
-      Crv_xhi = this->xhi;
-      Crv_ylo = this->ylo;
-      Crv_yhi = this->yhi;
-      Crv_out = 1;
-      Crv_xbrk = cdata->xbrk;
-      Crv_ybrk = cdata->ybrk;
-      Crv_vxbrk = cdata->vxbrk;
-      Crv_vybrk = cdata->vybrk;
-      Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
-      for( i = 0; i < CRV_NPNT; i++ ){
-        d[ i ] = ( (double) i)/( (double) CRV_NSEG );
-      }
-
-/* Map these points into graphics coordinates. */
-      Map3( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map3 to draw the curve. */
-      Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
-      Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map3. */
-      Map3( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the 
-   length of the drawn curve to zero. */
-      if( Crv_out ) {
-         Crv_nbrk = 0;
-         Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of 
-   the last point to be plotted. */
-      } else {
-         Crv_nbrk++;
-         if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
-            astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
-                      "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
-         } else {
-            *(Crv_xbrk++) = (float) Crv_xl;
-            *(Crv_ybrk++) = (float) Crv_yl;
-            *(Crv_vxbrk++) = (float) -Crv_vxl;
-            *(Crv_vybrk++) = (float) -Crv_vyl;
-         }
-      }
-
-/* Store extra information about the curve in the returned structure, and 
-   purge any zero length sections. */
-      if( cdata ){
-         cdata->length = Crv_len;
-         cdata->out = Crv_out;
-         cdata->nbrk = Crv_nbrk;
-         PurgeCdata( cdata, status );
-      }
-
-/* Annul the Frame and Mapping. */
-      Map3_frame = astAnnul( Map3_frame );
-      Map3_map = astAnnul( Map3_map );
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, AST__CURVE_ID, 0, GRF__LINE, method, class );
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-
-static AstPointSet *DefGap( AstPlot *this, double *gaps, int *ngood, 
-                            double *frac, int *inval, const char *method, 
-                            const char *class, int *status ){
-/*
-*  Name:
-*     DefGap
-
-*  Purpose:
-*     Find default gap sizes for the tick marks on the axes of a 2-D
-*     physical coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPointSet *DefGap( AstPlot *this, double *gaps, int *ngood, 
-*                          double *frac, int *inval, const char *method, 
-*                          const char *class, int *status  )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function returns default gap sizes for each axis in a 2-D Frame.
-*     The values are found by first obtaining a grid of points spread over
-*     the region containing good physical coordinates. The physical
-*     coordinate values (non-normalized) for each axis are sorted into 
-*     increasing order. 
-*
-*     For linearly spaced tick marks, a set of quantile axis values is then 
-*     found, and the median of the gaps between these quantiles is returned 
-*     as the default gap for the axis. 
-*
-*     For logarithmically spaced tick marks, the returned gap size is the
-*     ratio between adjacent tick mark values, chosen to give an optimal
-*     number of ticks between the maximum and minimum axis values found in 
-*     the grid.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     gaps
-*        Pointer to an array in which to return the default gap value for
-*        each axis. 
-*     ngood
-*        Pointer to an array in which toi return the number of good
-*        values in the returned PointSet for each axis.
-*     frac
-*        Pointer to a double in which to return the fraction of the
-*        plotting area containing good physical coordinates.
-*     inval
-*        Pointer to a location at which to return a flag indicating if
-*        any bad physical coordinates were encountered.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a PointSet holding the physical coordinate values at a
-*     set of points spread across the plotting area. The values on each
-*     axis are sorted into increasing order. The values will not have
-*     been normalized.
-
-*  Notes:
-*     -  The returned PointSet should be annulled when no longer needed.
-*     -  This function assumes that the physical coordinate system is 2 
-*     dimensional, and it should not be used if this is not the case.
-*     -  Gap sizes of 1.0, zero good points, and a NULL pointer are returned 
-*     if an error has already occurred, or if this function should fail for 
-*     any reason. 
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;        /* Pointer to PointSet holding graphics coords */
-   AstPointSet *pset2;        /* Pointer to PointSet holding physical coords */
-   double **ptr1;             /* Pointer to graphics axis values */
-   double **ptr2;             /* Pointer to physical axis values */
-   double dran;               /* Dynamic range */
-   double maxv;               /* Maximum axis value */
-   double minv;               /* Minimum axis value */
-   double qgap[ MAJTICKS_OPT ];/* Gaps between physical coordinate quantiles */
-   int dim;                   /* Dimension of grid */
-   int dk;                    /* The number of points between quantiles */
-   int i;                     /* The quantile index */
-   int j;                     /* Axis index */
-   int k;                     /* Index into the sorted array of axis values */
-   int logticks;              /* Logarithmically spaced tick marks? */
-   int n;                     /* Target number fo ticks */
-   int psize;                 /* Total number of axis value */
-
-/* Initialise the returned values. */
-   gaps[ 0 ] = 1.0;
-   gaps[ 1 ] = 1.0;
-   ngood[ 0 ] = 0;
-   ngood[ 1 ] = 0;
-   *frac = 0.0;
-   *inval = 0;
-
-/* Check global status. */
-   if( !astOK ) return NULL;
-
-/* Get two PointSets, one holding a grid of 2D graphics coordinates,
-   and one holding the corresponding (non-normalized) physical 
-   coordinates. */
-   dim = 0;
-   *frac = GoodGrid( this, &dim, &pset1, &pset2, method, class, status );
-
-/* Get pointers to the data values in each PointSet. */
-   ptr1 = astGetPoints( pset1 );
-   ptr2 = astGetPoints( pset2 );
-
-/* Store the number of elements in each PointSet. */
-   psize = astGetNpoint( pset1 );
-
-/* For each axis... */
-   for( j = 0; j < 2 && astOK; j++ ){
-
-/* Sort the axis values into increasing order. Any bad values are stored at
-   the end of the array on return. */
-      qsort( (void *) ptr2[ j ], (size_t) psize, sizeof(double), Compared );
-
-/* Count the number of non-bad values returned. */
-      ngood[ j ] = CountGood( psize, ptr2[ j ], status );
-
-/* Set the returned flag to indicate if any bad values were found. */
-      if( ngood[ j ] < psize ) *inval = 1;
-
-/* Report an error if there are too few good points. */
-      if( ngood[ j ] < MAJTICKS_OPT ){
-         astError( AST__VSMAL, "%s(%s): The range of coordinate values "
-                   "covered by axis %d is too small to plot.", status, method, 
-                   class, j + 1 );
-         break;
-      }
-
-/* Get the maximum and minimum axis value */
-      minv = ptr2[ j ][ 0 ];
-      maxv = ptr2[ j ][ ngood[ j ] - 1 ];
-
-/* See if ticks on this axis are spaced linearly or logarithmically. If a
-   value has been set for LogTicks used it, otherwise find a default value.
-   The default is 0 unless LogPlot is non-zero, the axis range does not
-   encompass zero and and the dynamic range is 100 or more. Set this
-   default value explicitly so that later functions will pick it up (it will 
-   be cleared at the end of the astGrid function). */
-      if( astTestLogTicks( this, j ) ) {
-         logticks = astGetLogTicks( this, j );
-      } else {
-         logticks = 0;    
-         if( astGetLogPlot( this, j ) && minv*maxv > 0.0 ) {
-            dran = maxv/minv;
-            if( dran >= 100.0 || dran <= 0.01 ) logticks = 1;
-         }
-         astSetLogTicks( this, j, logticks );
-      }
-
-/* If no value has been supplied for LogLabel use the value of LogTicks
-   as the default. */
-      if( !astTestLogLabel( this, j ) ) astSetLogLabel( this, j, logticks );
-
-/* For linear gaps, find the gaps between adjacent evenly spaced quantiles. 
-   The number of quantiles used equals the optimal number of major tick  
-   marks. */
-      if( !logticks ) {
-         dk = (int)( (double)ngood[ j ]/MAJTICKS_OPT );
-         i = 0;
-         for( k = dk; k < ngood[ j ] && i < MAJTICKS_OPT; k += dk ){
-            qgap[ i++ ] = ptr2[ j ][ k ] - ptr2[ j ][ k - dk ];
-         }
-
-/* Find the median of the gaps between adjacent quantiles. */
-         qsort( (void *) qgap, (size_t) i, sizeof(double), Compared );
-         gaps[ j ] = qgap[ i/2 ];
-
-/* If the test gap size is zero, use a fraction of the total range. Report
-   an error if the total range is zero. */
-         if( gaps[ j ] <= 0.0 ){
-            gaps[ j ] = ( ptr2[ j ][ ngood[ j ] - 1 ] - ptr2[ j ][ 0 ] )/MAJTICKS_OPT;;
-            if( gaps[ j ] <= 0.0 ){
-               astError( AST__VSMAL, "%s(%s): The range of coordinate values "
-                         "covered by axis %d is too small to plot.", status, method, 
-                         class, j + 1 );
-            }
-         }
-
-/* For logarithmic gaps, use the Nth root of the ratio of the maximum and
-   minimum data value found. */
-      } else if( astOK ) {
-
-/* Report an error if the max and min values are of opposite signs or
-   zero or equal. */
-         if( maxv*minv <= 0.0 ) {               
-            astError( AST__ZERAX, "%s(%s): The range of coordinate values "
-                         "covered by axis %d includes the origin and so "
-                         "logarithmic ticks cannot be produced.", status, method, 
-                         class, j + 1 );
-
-         } else if( maxv == minv ) {               
-            astError( AST__VSMAL, "%s(%s): The range of coordinate values "
-                      "covered by axis %d is too small to plot.", status, method, 
-                      class, j + 1 );
-
-/* Otherwise find the gap to use. */
-         } else {
-
-/* Store the maximum and minimum number of major tick marks along each
-   axis. These numbers are reduced if only a small part of the plotting
-   area contains valid coordinates, so that the tick marks do not end up
-   to close together. */
-            n = (int) ( 0.5 + MAJTICKS_OPT*sqrt( *frac ) );
-            if( n < 5 ) n = 5;
-
-/* Choose a gap size which makes this many gaps. */
-            gaps[ j ] = pow( maxv/minv, 1.0/( n - 1.0 ) );
-         }
-      }      
-   }
-
-/* Annul the PointSet holding Graphics coordinates. */
-   pset1 = astAnnul( pset1 );
-
-/* If an error has occurred, annul the PointSet holding physical
-   coordinates, and return gaps of 1.0. */
-   if( !astOK ) {
-      pset2 = astAnnul( pset2 );
-      gaps[ 0 ] = 1.0;
-      gaps[ 1 ] = 1.0;
-      ngood[ 0 ] = 0;
-      ngood[ 1 ] = 0;
-      *frac = 0.0;
-      *inval = 0;
-   }
-
-/* Return the physical PointSet. */
-   return pset2;
-
-}
-
-static void DrawAxis( AstPlot *this, TickInfo **grid, double *labelat,
-                      double *gap, const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     DrawAxis
-
-*  Purpose:
-*     Draw a curve joining the major tick marks.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void DrawAxis( AstPlot *this, TickInfo **grid, double *labelat,
-*                    double *gap, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws a curve through interior tick marks on both axes. 
-*     The curve is drawn even if it has already been drawn as part of a
-*     grid of curves, because it may have been assigned different graphics 
-*     attributes to the grid curves.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     grid
-*        A pointer to an array of two TickInfo pointers (one for each axis), 
-*        each pointing to a TickInfo structure holding information about
-*        tick marks on the axis. See function GridLines.
-*     labelat
-*        A pointer to a 2 element array giving the constant axis values at 
-*        which tick marks are put. Element 0 should give the axis 1 value at
-*        which tick marks for axis 0 are placed. Element 1 should give the 
-*        axis 0 value at which tick marks for axis 1 are placed.
-*     gap
-*        Pointer to array of two values holding the gap between major
-*        tick marks on the two axes.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This function assumes the current Frame of the Plot is 2
-*     dimensional, and it should not be called if this is not the case. 
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;         /* Pointer to current Frame */
-   AstPlotCurveData cdata;/* Somewhere to put the unneeded curve information */
-   TickInfo *info;        /* Pointer to the TickInfo for the current axis */
-   double *value;         /* Current tick value */
-   double bot;            /* Lowest axis value to be displayed */
-   double diff;           /* Difference between adjacent tick marks */
-   double udiff;          /* Used section length */
-   double start[ 2 ];     /* The start of the curve in physical coordinates */
-   double tmp;            /* Temporary storage */
-   double top;            /* Highest axis value to be displayed */
-   int axis;              /* Current axis index */
-   int axisid;            /* ID value for current axis plotting attributes */
-   int logticks;          /* Are major ticks spaced logarithmically? */
-   int tick;              /* Current tick index */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Not the id value for the first axis. */
-   axisid = AST__AXIS1_ID;
-
-/* Get a pointer to the current Frame. */
-   frm = astGetFrame( this, AST__CURRENT );
-
-/* Consider drawing a curve parallel to each axis in turn. */
-   for( axis = 0; axis < 2; axis++ ){
-
-/* Establish the correct graphical attributes for this axis as defined by 
-   attributes with the supplied Plot. */
-      astGrfAttrs( this, axisid, 1, GRF__LINE, method, class );
-
-/* Check the axis is required. */
-      if( astGetDrawAxes( this, axis ) ){ 
-
-/* If the tick marks have been placed round the edges of the plotting
-   area, we do not need to draw the curves. */
-         if( labelat[ axis ] != AST__BAD ){
-
-/* Get the max and min values allowed on this axis. */
-            bot = astGetBottom( frm, axis );
-            top = astGetTop( frm, axis );
-            if( bot > top ) {
-               tmp = top;
-               top = bot;
-               bot = tmp;
-            }      
-
-/* Get a pointer to the structure containing information describing the 
-   positions of the major tick marks along the current axis. */  
-            info = grid[ axis ];
-
-/* Get a pointer to the axis value at the first major tick mark. */
-            value = info->ticks;
-
-/* See if the major tick marks are logarithmically spaced on this axis. */
-            logticks = astGetLogTicks( this, axis );
-
-/* Initialise the difference between major tick marks. */
-            diff = logticks ? 0.0 : gap[ axis ];
-
-/* Loop round all ticks. */
-            for( tick = 0; tick < info->nmajor; tick++, value++ ){
-
-/* Update the difference between major tick marks if we are producing
-   logarithmically spaced ticks (in which "gap" is a ratio, not a
-   difference). */
-               if( logticks ) diff = (*value)*( gap[ axis ] - 1.0 );
-
-/* Note the starting point for this section. */
-               start[ axis ] = *value;
-               start[ 1 - axis ] = labelat[ axis ];
-
-/* If this is the first tick, draw an axis section going "backwards" in
-   case the first tick isn't at the lower visible bound. Limit the length
-   of this backwards section so that it does not extend beyond the minimum
-   axis value. */
-               if( tick == 0 ) {
-                  udiff = *value - bot;
-                  if( udiff > diff ) udiff = diff;
-                  if( udiff > 0.0 ) {
-                     AxPlot( this, axis, start, -udiff, 1, &cdata, method, 
-                             class, status );
-                  }
-               }
-
-/* Limit the length of the section so that it does not extend beyond the
-   maximum axis value. */
-               udiff = ( *value + diff > top ) ? top - *value : diff;
-
-/* Do not draw zero length sections. */
-               if( udiff > 0.0 ) {
- 
-/* Draw a curve parallel to the current axis, starting at the tick mark,
-   with length equal to the gap between tick marks. Do not draw sections
-   of the curve which are outside the primary domains of the physical axes. */
-                  AxPlot( this, axis, start, udiff, 1, &cdata, method, 
-                          class, status );
-               }
-
-            }
-
-/* Once the last section has been drawn, draw another axis section in case the 
-   last tick isn't at the upper visible bound. Limit the length of this 
-   section so that it does not extend beyond the maximum axis value. */
-            udiff = top - start[ axis ];
-            if( udiff > diff ) udiff = diff;
-            if( udiff > 0.0 ) {
-               AxPlot( this, axis, start, udiff, 1, &cdata, method, 
-                       class, status );
-            }
-         }
-      }
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, axisid, 0, GRF__LINE, method, class );
-
-/* Set up the id value for the next axis. */
-      axisid = AST__AXIS2_ID;
-
-   }
-
-/* Free the pointer to the current Frame. */
-   frm = astAnnul( frm );
-
-}
-
-
-static AstPlotCurveData **DrawGrid( AstPlot *this, TickInfo **grid, int drawgrid,
-                             const char *method, const char *class, int *status ){ 
-/*
-*  Name:
-*     DrawGrid
-
-*  Purpose:
-*     Draw a grid of lines at the major tick mark positions on both axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPlotCurveData **DrawGrid( AstPlot *this, TickInfo **grid, int drawgrid,
-*                           const char *method, const char *class )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function draw a grid of curves at the major tick mark
-*     positions on both axes, and returns information describing the
-*     breaks in the curves. If short tick marks are required rather
-*     than long curves (as specified by the Grid attribute of the supplied
-*     Plot), then the curves are not drawn but the break information is
-*     still returned. 
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     grid
-*        A pointer to an array of two pointers (one for each axis), each 
-*        pointing to a TickInfo structure. These describe the positions
-*        of the tick marks and should have been produced by function
-*        GridLines. 
-*     drawgrid
-*        If non-zero, draw a grid of curves marking the major axis
-*        values. Otherwise, tick marks will be drawn at these values later.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*  Returned Value:
-*     A pointer to an array of two AstPlotCurveData pointers (one for each axis),
-*     each pointing to an array of AstPlotCurveData structures (one for each tick 
-*     value).
-
-*  Notes:
-*     -  This function assumes that the physical coordinate system is 2 
-*     dimensional, and it should not be used if this is not the case.
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned.
-
-*/
-
-/* Local Variables: */
-   AstPlotCurveData **cdata;/* The returned pointer */
-   AstPlotCurveData *cdt;   /* Pointer to break info. for current tick mark */
-   AstPlotCurveData tcdt;   /* Pointer to break info. for current curve section */
-   TickInfo *info;          /* Tick mark information for a single axis */
-   double start[ 2 ];       /* Strting position for current curve section */
-   double total_length;     /* Total curve length for all axis ticks */
-   int i;                   /* Axis index */
-   int j;                   /* Tick mark index */
-   int k;                   /* Curve section index */
-
-/* Check the global status. */
-   if( !astOK ) return NULL;
-
-/* Allocate memory to hold two pointers, each pointing to an array of
-   AstPlotCurveData structure. */
-   cdata = (AstPlotCurveData **) astMalloc( 2*sizeof( AstPlotCurveData *) );
-
-/* If succesful, initialise the pointers. */
-   if( astOK ){
-      cdata[ 0 ] = NULL;
-      cdata[ 1 ] = NULL;
-
-/* Draw the curves marking the major tick values on each axis. If no grid is 
-   required, we still do this in order to get information about the breaks 
-   in the curves which will be used later to decide where to put the labels, 
-   but we use "invisible ink". */
-      for( i = 0; i < 2; i++ ){
-
-/* Get a pointer to the TickInfo structure for this axis holding information 
-   about where to put tick marks on this axis. */
-         info = grid[ i ];
-
-/* Allocate memory to hold information describing the breaks in each tick
-   mark curve. This takes the form of an array of AstPlotCurveData structures,
-   one for each tick mark. */
-         cdata[ i ] = (AstPlotCurveData *) astMalloc( sizeof(AstPlotCurveData)*
-                                               (size_t) info->nmajor );
-
-/* Check the pointer can be used. */
-         if( astOK ){
-
-/* Initialise a pointer to the first AstPlotCurveData structure for this axis. */
-            cdt = cdata[ i ];
-            total_length = 0.0;
-
-/* Do each tick mark. */
-            for( j = 0; j < info->nmajor; j++ ){
-
-/* Store the starting point of the first section of the curve. */
-               start[ i ] = (info->ticks)[ j ];
-               start[ 1 - i ] = (info->start)[ 0 ];         
-
-/* Draw the first section of the curve parallel to the other axis, starting 
-   at the values in "start", and extending for a length given in the TickInfo 
-   structure. We use invisible ink if short tick marks are required instead 
-   of a grid of curves. */
-               AxPlot( this, 1 - i, start, (info->length)[ 0 ],
-                       drawgrid, cdt, method, class, status );
-
-/* Now draw any other sections in the curve. */
-               for( k = 1; k < info->nsect; k++ ){
-
-/* Modify the starting value on the other axis. The starting value on
-   the current axis remains set to the tick mark value. */
-                  start[ 1 - i ] = (info->start)[ k ];         
-
-/* Draw the curve, the information describing the breaks goes into
-   temporary storage in the local structure "tcdt". */
-                  AxPlot( this, 1 - i, start, (info->length)[ k ],
-                          drawgrid, &tcdt, method, class, status );
-
-/* Concatenate the break information for this section with the break
-   information describing the previous sections. */
-                  AddCdt( cdt, &tcdt, method, class, status );
-
-               }
-
-/* Increment the total length of curves drawn for all ticks on this axis. */
-               total_length += cdt->length;
-
-/* Point to the AstPlotCurveData structure for the next tick mark. */
-               cdt++;
-
-            }
-
-/* Report an error if the total length of all curves on this axis is zero. 
-   This can be caused for instance by bugs in the algorithm for finding
-   major tick values (which may cause AST__BAD tick mark values). */
-            if( total_length == 0.0 && astOK ) {
-               astError( AST__INTER, "%s(%s): No grid curves can be drawn for "
-                         "axis %d.", status, method, class, i + 1 );
-            }
-
-         }
-  
-      }
-
-   }
-
-/* If an error has occurred, clean up the returned structures. */
-   if( !astOK ) cdata = CleanCdata( cdata, status );
-
-/* Return. */
-   return cdata;   
-
-}
-
-static void DrawText( AstPlot *this, int ink, int esc, const char *text, 
-                      float x, float y, const char *just, float upx, 
-                      float upy, float *xbn, float *ybn, float *drop,
-                      const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     DrawText
-
-*  Purpose:
-*     Draw a character string, potentially including superscripts and
-*     subscripts.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void DrawText( AstPlot *this, int ink, int esc, const char *text, 
-*                    float x, float y, const char *just, float upx, 
-*                    float upy, float *xbn, float *ybn, float *drop,
-*                    const char *method, const char *class, int *status )
-
-*  Description:
-*     This function displays a character string at a given position
-*     using a specified up-vector, optionally interpreting any Plot escape 
-*     sequences contained within the text. It also returns its bounding
-*     box.
-
-*  Parameters:
-*     this
-*        The plot.
-*     ink
-*        If zero, nothing is drawn but the bounding box is still returned.
-*     esc
-*        Should escape sequences be interpreted? They will be printed
-*        literally otherwise.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x
-*        The graphics X coordinate of the label's reference point.
-*     y
-*        The graphics Y coordinate of the label's reference point.
-*     just
-*        Pointer to a null-terminated character string identifying the
-*        reference point for the text being drawn. The first character in
-*        this string identifies the reference position in the "up" direction
-*        and may be "M", "B", "C" or "T" (for bottom, baseline, centre or
-*        top). The second character identifies the side-to-side reference 
-*        position and may be "L", "C" or "R" (for left, centre or right). The 
-*        string is case-insensitive, and only the first two characters are 
-*        significant.
-*     upx
-*        The x component of the up-vector for the text. Positive values
-*        always refer to displacements from left to right on the screen, 
-*        even if the graphics x axis increases in the opposite sense.
-*     upy
-*        The y component of the up-vector for the text. Positive values
-*        always refer to displacements from left to right on the screen, 
-*        even if the graphics y axis increases in the opposite sense.
-*     xbn
-*        An array in which is returned the x coordinates at the corners
-*        of the bounding box. The order is: bottom left, top left, top
-*        right, bottom right.
-*     ybn
-*        An array in which is returned the Y coordinates at the corners
-*        of the bounding box (see xbn).
-*     drop
-*        Address of a float in which to return the distance between the
-*        bottom of the bounding box and the baseline of normal text. May
-*        be NULL.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The "B" option for the justification in the "up" direction refers
-*     to the base-line on which the text is written. Some characters
-*     ("y", "p", "g", etc) descend below this line. In addition, if the
-*     supplied text string includes any escape sequences which produce 
-*     sub-scripts, then these will also descend below the base-line. To
-*     justify the bottom of the entire string (instead of just the
-*     base-line), specify "M" instead of "B" in the justification string.
-*     -  See function astFindEscape for details of the supported escape 
-*     sequences.
-*/
-
-
-/* Local Variables: */
-   astDECLARE_GLOBALS
-   char *a;
-   char *lt;
-   char cc;
-   const char *lj;
-   double ncol;
-   double nfont;
-   double nsize;
-   double nstyle;
-   double nwidth;
-   float alpha_hi;
-   float alpha_lo;
-   float beta_lo;
-   float beta_hi;
-   float cy;
-   float cx;
-   float dy;
-   float dx;
-   float height;
-   float hmx;
-   float hmy;
-   float ly;
-   float lx;
-   float rx;
-   float rlen;
-   float rise;
-   float rxu;
-   float ryu;
-   float ry;
-   float tdrop;
-   float tybn[ 4 ];
-   float txbn[ 4 ];
-   float ulen;
-   float uyu;
-   float uxu;
-   float uy;
-   float ux;
-   float width;
-   float x0;
-   float y0;
-   int estype;
-   int esval;
-   int got_esc;
-   int grfcap;
-   int i;        
-   int nc;
-
-/* Check the global error status, and that we have something to plot, and
-   the reference position is good, and that the up vector is not zero. */
-   if ( !astOK || !text || !text[ 0 ] ||  x == AST__BAD || y == AST__BAD ||
-        ( upx == 0.0 && upy == 0.0 ) ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Initialise variables to avoid compiler warnings. */
-   rx = 0.0f;
-   ry = 0.0f;
-   x0 = 0.0f;
-   y0 = 0.0f;
-
-/* Get an up vector which refers to the graphics coordinates in their correct 
-   senses (the supplied values are reversed if the corresponding axis is 
-   reversed). */
-   ux = ( this->xrev ) ? -upx : upx;
-   uy = ( this->yrev ) ? -upy : upy;
-
-/* Find a vector which points from left to right along the text 
-   baseline, taking account of any difference in the scales of the x 
-   and y axes (is possible). This also scales the up vector so that it 
-   has a length equal to the height of normal text, and scales the right 
-   vector to have the same length (on the screen) as the up vector. */ 
-   RightVector( this, &ux, &uy, &rx, &ry, method, class, status );
-
-/* Create a unit right vector. */
-   rlen = sqrt( rx*rx + ry*ry ); 
-   rxu = rx/rlen; 
-   ryu = ry/rlen; 
-
-/* Create a unit up vector. */
-   ulen = sqrt( ux*ux + uy*uy ); 
-   uxu = ux/ulen; 
-   uyu = uy/ulen; 
-
-/* Some older GRF modules cannot plot strings with vertical justification
-   of "M". Check the capabilities of the grf module, and, if necessary,
-   modify the justification and the coords of the reference point to use 
-   "B" instead of "M". This call also returns us the coords at the left
-   end of the baseline of normal text. */
-   lx = x;
-   ly = y;
-   lj = JustMB( this, esc, text, &lx, &ly, upx, upy, just, uxu, uyu, rxu,
-                ryu, &x0, &y0, method, class, status );
-
-/* Initialise the horizontal and verical limits of the total bounding box. */
-   alpha_lo = FLT_MAX;
-   alpha_hi = -FLT_MAX;
-   beta_lo = FLT_MAX;
-   beta_hi = -FLT_MAX;
-
-/* Tell the grf module whether or not to interpret escape sequences,and
-   also note if the grf module is capable of interpreting escape
-   sequences. */
-   grfcap = GCap( this, GRF__ESC, esc, status );
-
-/* Forget the horizontal position remembered by any "%h+" escape sequences 
-   from any previous string. */
-   this->hmarkx = FLT_MAX;
-   this->hmarky = FLT_MAX;
-
-/* If escape sequences are being interpreted and the string contains some
-   escape sequences, but the grf module cannot interpret escape sequences,
-   split the supplied text up into sub-strings delimited by escape sequences 
-   and plot each sub-string individually, modifying the reference point and 
-   graphics attributes as indicated by the escape sequences. */
-   if( esc && HasEscapes( text, status ) && !grfcap ) {   
-
-/* Take a copy of the supplied text so that we can temporarily terminate
-   each sub-string by poking a null (0) character into it. */
-      lt = (char *) astStore( NULL, (void *) text, strlen( text ) + 1 );
-
-/* Indicate that the current baseline is at its normal height. */
-      rise = 0.0;
-
-/* Get the graphical attribute values for normal text. */
-      GAttr( this, GRF__SIZE, AST__BAD, &nsize, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__WIDTH, AST__BAD, &nwidth, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__FONT, AST__BAD, &nfont, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__STYLE, AST__BAD, &nstyle, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__COLOUR, AST__BAD, &ncol, GRF__TEXT, method, class, status );
-
-/* The "concatenation point" (cx,cy) is the point where the normal baseline 
-   crosses the left hand edge of the substring bounding box. Initialise
-   this to the left edge of the first substring. */
-      cx = x0;
-      cy = y0;
-
-/* Loop round the whole string, drawing each sub-string. */
-      a = lt;
-      while( *a ) {
-
-/* Examine the start of the remaining string and note if it begins with 
-   an escape sequence. If so, the type and value of the escape sequnece 
-   is returned. In either case the number of characters to the next
-   delimiter is returned. */
-         got_esc = astFindEscape( a, &estype, &esval, &nc );
-
-/* If the string starts with an escaped percent sign, modify things so that
-   we can draw the percent sign with the normal text drawing code below. */
-         if( got_esc && estype == GRF__ESPER ) {
-            got_esc = 0;
-            a++;
-            nc = 1;
-         }
-
-/* If the string starts with any other escape sequence, modify the graphics 
-   attributes and concatenation point as required by the escape sequence. */
-         if( got_esc ) {
-            InterpEscape( this, estype, (double) esval, &cx, &cy, ux, uy, 
-                          rx, ry, lj, &rise, nsize, nstyle, nwidth, ncol, 
-                          nfont, method, class, status );
-
-/* If the remaining string starts with normal text, draw it. */
-         } else {
-
-/* Temporarily terminate the sub-string which ends with the next escape
-   sequence. */
-            cc = a[ nc ];
-            a[ nc ] = 0;
-
-/* We now have to decide on the reference point for this sub-string. If
-   the justification is "BL" then the reference point is just the current 
-   concatenation point. */
-            if( lj[ 0 ] == 'B' && lj[ 1 ] == 'L' ) {
-               lx = cx;
-               ly = cy;
-
-/* Otherwise, the reference point is offset from the concatenation point.
-   It would be simpler to draw all substrings with "BL" justification but 
-   this causes problems with some grf modules (such as GAIA) which zoom
-   the display by modifying the position of text strings without also
-   modifying the size of text strings. Using the correct reference point
-   for all sub-strings minimises the drift which occurs when such a grf
-   modules zooms the display. */
-            } else {
-
-/* Find the width and height of this substring, and the distance between the 
-   bottom of the bounding box and the baseline (the drop). We do this
-   by calling this function recursively, using "BL" justification to
-   avoid infinite recursion. */
-
-/* Forget the horizontal position remembered by any "%h+" escape sequences 
-   from any previous string. Save and re-instate the position of the
-   horizontal mark since the call to DrawText may change it. */
-               hmx = this->hmarkx;
-               hmy = this->hmarky;
-
-               DrawText( this, 0, esc, a, cx, cy, "BL", upx, upy, txbn, tybn, 
-                         &tdrop, method, class, status );
-
-               this->hmarkx = hmx;
-               this->hmarky = hmy;
-
-               dx = txbn[ 0 ] - txbn[ 3 ];
-               dy = tybn[ 0 ] - tybn[ 3 ];
-               width = sqrt( dx*dx + dy*dy );
-
-               dx = txbn[ 0 ] - txbn[ 1 ];
-               dy = tybn[ 0 ] - tybn[ 1 ];
-               height = sqrt( dx*dx + dy*dy );
-
-/* First move right from the concatenation point by a fraction of the width 
-   of the substring (0.5 for "C" and 1.0 for "R"). */
-               if( lj[ 1 ] == 'C' ) {
-                  width *= 0.5;
-               } else if( lj[ 1 ] != 'R' ) {
-                  width = 0;
-               }
-               lx = cx + rxu*width;
-               ly = cy + ryu*width;
-
-/* Now move vertically by an amount which produes the requested vertical
-   justification. */
-               if( lj[ 0 ] == 'T' ) {
-                  height -= tdrop;
-                  lx += height*uxu;
-                  ly += height*uyu;
-
-               } else if( lj[ 0 ] == 'C' ) {
-                  height = 0.5*height - tdrop;
-                  lx += height*uxu;
-                  ly += height*uyu;
-
-               } else if( lj[ 0 ] == 'M' ) {
-                  lx -= tdrop*uxu;
-                  ly -= tdrop*uyu;
-               }            
-            }
-
-/* Draw it, and then find its real bounding box (i.e. using the correct
-   reference position found above). */
-            if( ink ) GText( this, a, lx, ly, lj, upx, upy, method, class, status );
-            GTxExt( this, a, lx, ly, lj, upx, upy, txbn, tybn, method, class, status );
-
-/* Re-instate the orignal value of the terminator character.*/
-            a[ nc ] = cc;
-
-/* Move the concatenation point to the right (i.e. in the direction of the text
-   baseline) by an amount equal to the width of the bounding box. Also 
-   update the total bounding box limits.*/
-            UpdateConcat( txbn, tybn, ux, uy, rx, ry, &cx, &cy, 
-                           x0, y0, &alpha_lo, &alpha_hi, &beta_lo, &beta_hi, status );
-         }
-
-/* Move on to the next character. */
-         a += nc;
-      }
-
-/* Free resources. */
-      lt = astFree( lt );
-
-/* Reset all attributes to their normal values. */
-      GAttr( this, GRF__SIZE, nsize, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__WIDTH, nwidth, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__COLOUR, ncol, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__FONT, nfont, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__STYLE, nstyle, NULL, GRF__TEXT, method, class, status );
-
-/* If any escape sequences can be interpreted by the grf module, just pass 
-   the text string on to the grf module. */
-   } else {
-      if( ink ) GText( this, text, lx, ly, lj, upx, upy, method, class, status );
-      GTxExt( this, text, lx, ly, lj, upx, upy, txbn, tybn, method, class, status );
-
-/* The corners in the bounding box returned by GTxExt are in no
-   particular order. But this function is contracted to return them 
-   in a specified order. So we use UpdateConcat to find the verical and
-   horizontal limits of the box in a form which can be used to produce
-   the correct order. UpdateConcat will also update the concatenation point,
-   but that is irrelevant in this context. */
-      UpdateConcat( txbn, tybn, ux, uy, rx, ry, &lx, &ly, x0, y0, &alpha_lo, 
-                     &alpha_hi, &beta_lo, &beta_hi, status );
-   }
-
-/* Return the total bounding box,in the order bottom left, topleft, top
-   right, bottom right. */
-   xbn[ 0 ] = x0 + alpha_lo*ux + beta_lo*rx;
-   ybn[ 0 ] = y0 + alpha_lo*uy + beta_lo*ry;
-
-   xbn[ 1 ] = x0 + alpha_hi*ux + beta_lo*rx;
-   ybn[ 1 ] = y0 + alpha_hi*uy + beta_lo*ry;
-
-   xbn[ 2 ] = x0 + alpha_hi*ux + beta_hi*rx;
-   ybn[ 2 ] = y0 + alpha_hi*uy + beta_hi*ry;
-
-   xbn[ 3 ] = x0 + alpha_lo*ux + beta_hi*rx;
-   ybn[ 3 ] = y0 + alpha_lo*uy + beta_hi*ry;
-
-/* Return the drop. */
-   if( drop ) *drop =  -alpha_lo*ulen;
-
-/* Free memory.*/
-   lj = astFree( (void *) lj );
-
-/* If OK, update the box containing all drawn graphics primitives. */
-   if( ink && astOK && !Boxp_freeze ) {
-      for( i = 0; i < 4; i++ ){
-         Boxp_lbnd[ 0 ] = MIN( xbn[ i ], Boxp_lbnd[ 0 ] );
-         Boxp_ubnd[ 0 ] = MAX( xbn[ i ], Boxp_ubnd[ 0 ] );
-         Boxp_lbnd[ 1 ] = MIN( ybn[ i ], Boxp_lbnd[ 1 ] );
-         Boxp_ubnd[ 1 ] = MAX( ybn[ i ], Boxp_ubnd[ 1 ] );
-      }
-   }
-}
-
-static void DrawTicks( AstPlot *this, TickInfo **grid, int drawgrid, 
-                       double *labelat, double *gap, const char *method, 
-                       const char *class, int *status ){
-/*
-*
-*  Name:
-*     DrawTicks
-
-*  Purpose:
-*     Draw tick marks for a 2-D annotated coordinate grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void DrawTicks( AstPlot *this, TickInfo **grid, int drawgrid, 
-*                     double *labelat, double *gap, const char *method, 
-*                     const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws major and minor tick marks. It uses a different
-*     technique depending on whether the tick marks are to be put along the
-*     edges of the plotting area, or along a curve through the middle of the
-*     plotting area. The physical axis values at which to put tick marks
-*     are supplied in parameter "grid".
-*
-*     If the ticks are placed on the edges of the plotting area, The
-*     EdgeCrossings function is used to find all points along the edge which
-*     have a physical axis value correspoinding to a tick value (there can in 
-*     general be more than one point on an edge with a given physical axis 
-*     value). Ticks are put at all such crossings.
-*
-*     If ticks are placed within the plotting area, then they are put
-*     along a curve defined by the "other axis" values supplied in
-*     parameter "labelat".
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     grid
-*        A pointer to an array of two TickInfo pointers (one for each axis), 
-*        each pointing to a TickInfo structure holding information about
-*        tick marks on the axis. See function GridLines.
-*     drawgrid
-*        If non-zero, then a grid of curves has been drawn to mark the
-*        major axis values.
-*     labelat
-*        A pointer to a 2 element array in holding the constant axis 
-*        values at which tick marks are to be put. Element 0 should hold
-*        the axis 1 value at which tick marks for axis 0 are placed. Element 
-*        1 should hold the axis 0 value at which tick marks for axis 
-*        1 are placed. If ticks are to be placed round the edges of the
-*        plotting zone instead of within the plotting zone, then values of
-*        AST__BAD should be supplied.
-*     gap
-*        Pointer to array of two values holding the gap between major
-*        tick marks on the two axes. This will be the difference between,
-*        or the ratio of, adjacent tick mark values, depending on the
-*        setting of the LogTicks attribute.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This function assumes the current Frame of the Plot is 2
-*     dimensional, and it should not be called if this is not the case. 
-*/
-
-/* Local Variables: */
-   AstFrame *frame;       /* Pointer to current Frame in Plot */
-   AstMapping *mapping;   /* Pointer to graphics->physical Mapping */
-   AstPointSet *pset1;    /* Pointer to PointSet holding physical coords. */
-   AstPointSet *pset2;    /* Pointer to PointSet holding graphics coords. */
-   AstPointSet *pset3;    /* Pointer to PointSet holding clipped graphics coords. */
-   EdgeCrossingsStatics *ecstatics = NULL; /* For static data structure */
-   TickInfo *info;        /* Pointer to the TickInfo for the current axis */
-   double *ptr1[2];       /* Pointer to physical data */
-   double **ptr2;         /* Pointer to graphics data */
-   double **ptr3;         /* Pointer to clipped graphics data */
-   double *a;             /* Pointer to next current axis value */
-   double *b;             /* Pointer to next other axis value */
-   double *value;         /* Current tick value */
-   double *x;             /* Pointer to next X value */
-   double *xc;            /* Pointer to next clipped X value */
-   double *y;             /* Pointer to next Y value */
-   double *yc;            /* Pointer to next clipped Y value */
-   double a0;             /* Physical axis value at base of tick */
-   double axmax;          /* Upper axis limit */
-   double axmin;          /* Lower axis limit */
-   double delta1;         /* Increment between minor ticks above major tick */
-   double delta2;         /* Increment between minor ticks below major tick */
-   double diff;           /* Difference between adjacent major ticks */
-   double dl2;            /* Squared increment between points */
-   double dl2_limit;      /* Minimum usable squared increment between points */
-   double dl;             /* Increment between points */
-   double dx;             /* X component of increment along tick mark */
-   double dy;             /* Y component of increment along tick mark */
-   double ex;             /* X component of increment between points */
-   double ey;             /* Y component of increment between points */
-   double lblat2;         /* Other axis value part way up each tick */
-   double lblat;          /* Other axis value at base of each tick */
-   double mindim;         /* Shortest dimension of plotting area */
-   double minval;         /* Current axis value at next minor tick */
-   double mjsign;         /* Sign of the major tick mark length */
-   double mjtklen;        /* Length of major tick marks */
-   double mnsign;         /* Sign of the minor tick mark length */
-   double mntklen;        /* Length of minor tick marks */
-   double ux;             /* X component of unit vector along tick mark */
-   double uy;             /* Y component of unit vector along tick mark */
-   double val;            /* Major axis value */
-   double x0;             /* X at base of tick */
-   double x1;             /* X at end of tick */
-   double x2;             /* Clipped X at base of tick */
-   double y0;             /* Y at base of tick */
-   double y1;             /* Y at end of tick */
-   double y2;             /* Clipped Y at base of tick */
-   int *majflag;          /* Pointer to next major/minor flag */
-   int *majflags;         /* Pointer to aray of major/minor flags */
-   int axis;              /* Current axis index */
-   int ed;                /* Doing a secondary edge? */
-   int edge;              /* Index of edge being ticked */
-   int first;             /* Is this the first tick to be drawn? */
-   int gelid;             /* ID for next graphical element to be drawn */
-   int i;                 /* Minor tick mark index */
-   int logticks;          /* Are major tick marks logarithmically spaced? */
-   int minhi;             /* Highest minor tick mark index */
-   int minlo;             /* Lowest minor tick mark index */
-   int nedge;             /* No. of edges to be ticked for each axis */
-   int nel;               /* Actual number of tick marks to draw */
-   int ntot;              /* Maximum number of tick marks */
-   int tick;              /* Tick index */
-   int lasttick;          /* Index of last major tick mark */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   a = NULL;
-   delta1 = 0.0;
-   delta2 = 0.0;
-   lblat2 = 0.0;
-   uy = 0.0;
-   logticks = 0;
-
-/* Get the minimum dimension of the plotting ares. */
-   mindim = MIN( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Information about the drawn tick marks is saved in the Plot structure.
-   Reset this information now so that we are ready to store information
-   about the new ticks that will be drawn by this function invocation. */
-   SaveTick( this, -1, 0.0, 0.0, 0, status );
-
-/* If ticks are to be put round the edges of the plotting area... */
-/* ============================================================== */
-   if( labelat[ 0 ] == AST__BAD || labelat[ 1 ] == AST__BAD ){
-
-/* Store the number of edges to be ticked for each axis. */
-      nedge = astGetTickAll( this )? 2 : 1;
-
-/* Do each required edge. */
-      for( ed = 0; ed < nedge; ed++ ){
-
-/* Initialize the id value for graphical element being drawn. */
-         gelid = AST__TICKS1_ID;
-
-/* Do each axis. */
-         for( axis = 0; axis < 2; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-            astGrfAttrs( this, gelid, 1, GRF__LINE, method, class );
-
-/* Store the length in graphics coordinates of major tick marks for this
-   axis. Use a default of zero if a grid has been drawn. */
-            if( astTestMajTickLen( this, axis ) || !drawgrid ){
-               mjtklen = astGetMajTickLen( this, axis )*mindim;
-            } else {
-               mjtklen = 0.0;
-            }
-
-/* Store the length in graphics coordinates of minor tick marks. */
-            mntklen = astGetMinTickLen( this, axis )*mindim;
-
-/* Get the edge to be labelled with the axis values. Edge 0 is the left hand 
-   edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3 is 
-   the bottom edge. */
-            edge = ( astGetEdge( this, axis ) + ed*2 ) % 4;
-            if( edge < 0 ) edge = -edge;
-
-/* Store a pointer to the structure containing information describing the 
-   positions of the major tick marks along this axis. */  
-            info = grid[ axis ];
-
-/* Store a pointer to the axis value at the first major tick mark. */
-            value = info->ticks;
-
-/* Minor tick marks are drawn on both sides of each major tick mark. They
-   are identified by an index number relative to major tick mark at zero. 
-   Store the indicies of the first and last minor tick marks. */
-            minlo = ( 1 - info->nminor )/2;
-            minhi = info->nminor/2;
-
-/* If major ticks are linear, store the difference between minor tick marks. 
-   This value will be the same for all major ticks. */
-            logticks = astGetLogTicks( this, axis );
-            if( !logticks ) {
-               delta1 = gap[ axis ]/(double)info->nminor;
-               delta2 = delta1;
-            }
-
-/* Loop round until all ticks have been done. */
-            for( tick = 0; tick < info->nmajor; tick++ ){
-
-/* Draw tick marks at all occurrences of the current major tick value on 
-   the selected edge of the plotting area. */
-               Ticker( this, edge, axis, *value, gap, mjtklen,
-                       1, ( ed == 0 ), &ecstatics, method, class, status );
-
-/* If minor tick mark values were not supplied, calculate them as even
-   intervals between the major tick values. */
-               if( !info->minticks ) {
-
-/* If major ticks are logarithmic, store the difference between minor tick 
-   marks. This value will be different for each major tick. Also, since
-   the minor ticks are drawn on either side of the major tick, the minor 
-   tick spacing above the major tick will be different to that below the
-   minor tick when using logarathmic ticks. "delta1" is the minor gap
-   above the major value, and "delta2" is the minor gap below the major
-   value. */
-                  if( logticks ) {
-                     delta1 = (*value) * ( gap[ axis ] - 1.0 )/
-                                         (double)info->nminor;
-                     delta2 = delta1 / gap[ axis ];
-                  } 
-
-/* Extra minor tick marks are drawn below the first major tick mark and
-   above the last major tick mark to fill in any gaps caused by axis
-   limits being exceeded. */
-                  if( tick == 0 ) {
-                     minlo = 1 - info->nminor;
-                  } if( tick == 1 ) {
-                     minlo = ( 1 - info->nminor )/2;
-                  } else if( tick == info->nmajor - 1 ) {
-                     minhi = info->nminor - 1;
-                  }
-
-/* Store the axis value at the first minor tick mark. */
-                  minval = *value + minlo*delta2;
-
-/* Loop round all the minor tick marks, storing the physical coordinates
-   defining the tick mark. */
-                  for( i = minlo; i <= minhi; i++ ){
-
-/* Draw tick marks at all occurrences of the current minor tick value on
-   the selected edge of the plotting area. Do not do the minor tick mark 
-   with index zero, since this corresponds to the position of the major 
-   tick mark. */
-                     if( i ) Ticker( this, edge, axis, minval, gap, mntklen,
-                                     0, ( ed == 0 ), &ecstatics, method, class, status );
-
-/* Get the axis value at the next minor tick mark. */
-                     minval += ( i < 0 ) ? delta2 : delta1;
-                  }
-               }
-  
-/* Point to the next major tick value. */
-               value++;
-
-            }
-
-/* If minor tick mark values have been supplied, used them. */
-            if( info->minticks ) {
-               value = info->minticks;
-               for( tick = 0; tick < info->nminor; tick++, value++ ){
-                  Ticker( this, edge, axis, *value, gap, mntklen, 0, 
-                          ( ed == 0 ), &ecstatics, method, class, status );
-               }
-            }
-
-/* Re-establish the original graphical attributes. */
-            astGrfAttrs( this, gelid, 0, GRF__LINE, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
-            gelid = AST__TICKS2_ID;
-         } 
-      }
-
-/* Free the static resources allocated within EdgeCrossings (called
-   by Ticker). */
-      (void) EdgeCrossings( NULL, 0, 0, 0.0, NULL, NULL, &ecstatics, method, 
-                            class, status );
-
-/* If ticks are to put within the interior of the plotting area... */
-/* ============================================================== */
-   } else {
-
-/* Get the mapping from base Frame (graphics coords) to current Frame
-   (physical coords). */
-      mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get the current Frame from the Plot. */
-      frame = astGetFrame( this, AST__CURRENT );
-
-/* Initialize the id value for graphical element being drawn. */
-      gelid = AST__TICKS1_ID;
-
-/* Do each axis. */
-      for( axis = 0; axis < 2; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-         astGrfAttrs( this, gelid, 1, GRF__LINE, method, class );
-
-/* Store the length in graphics coordinates of major tick marks for this
-   axis. Use a default of zero if a grid has been drawn. */
-         if( astTestMajTickLen( this, axis ) || !drawgrid ){
-            mjtklen = astGetMajTickLen( this, axis )*mindim;
-         } else {
-            mjtklen = 0.0;
-         }
-
-/* Store the length in graphics coordinates of minor tick marks. */
-         mntklen = astGetMinTickLen( this, axis )*mindim;
-
-/* Indicate that the tick mark lengths should not be negatated. */
-         mjsign = 1.0;
-         mnsign = 1.0;
-
-/* Store the smallest squared distance in graphics coordinates which 
-   can reliably be used to determine the direction of a tick mark. */
-         dl2_limit = 0.0001*mindim;
-         dl2_limit *= dl2_limit;
-
-/* Store a pointer to the structure containing information describing the 
-   positions of the major tick marks along this axis. */  
-         info = grid[ axis ];
-
-/* Store a pointer to the axis value at the first major tick mark. */
-         value = info->ticks;
-
-/* Get the maximum number of tick marks to be drawn on this axis. */
-         ntot = 0;
-         ntot = info->nmajor;
-         if( info->minticks ) {
-            ntot += info->nmajor + info->nminor;
-         } else {
-            ntot += ( info->nmajor + 1 )*( info->nminor - 1 );
-         }
-
-/* Pass on to the next axis if no ticks are to be drawn. */
-         if( ntot ) {
-
-/* Allocate memory to hold the physical coordinates defining all the
-   required tick marks. Each tick mark is defined by 2 points. */
-            ptr1[ 0 ] = (double *) astMalloc( sizeof(double)*(size_t)(2*ntot) );
-            ptr1[ 1 ] = (double *) astMalloc( sizeof(double)*(size_t)(2*ntot) );
-
-/* Allocate memory to hold a set of flags indicating whether each tick
-   mark is minor or major. */
-            majflags = (int *) astMalloc( sizeof(int)*(size_t)ntot );
-
-/* Check the pointers can be used. */
-            if( astOK ){
-
-/* If the tick values have been supplied using astSetTickValues, just
-   copy them into the above arrays. */
-               if( info->minticks ) {
-
-                  a = ptr1[ axis ];    
-                  b = ptr1[ 1 - axis ];    
-                  majflag = majflags;
-
-                  for( tick = 0; tick <= info->nmajor; tick++ ){
-
-                     val =  info->ticks[ tick ];
-                     if( logticks ) {
-                        diff = val * ( gap[ axis ] - 1.0 );
-                        lblat2 = labelat[ axis ] + 0.2*diff;
-                     } else {
-                        lblat2 = labelat[ axis ] + 0.2*gap[ 1 - axis ];
-                     }
-
-                     *(a++) = val;
-                     *(b++) = labelat[ axis ];
-                     *(a++) = val;
-                     *(b++) = lblat2;
-                     *(majflag++) = 1;
-                  }
-
-                  for( tick = 0; tick <= info->nminor; tick++ ){
-
-                     val =  info->minticks[ tick ];
-                     if( logticks ) {
-                        diff = val * ( gap[ axis ] - 1.0 );
-                        lblat2 = labelat[ axis ] + 0.2*diff;
-                     } else {
-                        lblat2 = labelat[ axis ] + 0.2*gap[ 1 - axis ];
-                     }
-
-                     *(a++) = val;
-                     *(b++) = labelat[ axis ];
-                     *(a++) = val;
-                     *(b++) = lblat2;
-                     *(majflag++) = 0;
-                  }
-
-/* If the tick values were not supplied using astSetTickValues, then we
-   need to calculate the minor tick positions explicitly. */
-               } else {
-
-/* Store pointers to the next point on each axis. "a" always refers to the
-   current axis. Also store the value on the other axis at which the tick
-   marks starts, and another value on the other axis which is used to
-   defined the tick mark directions. */
-                  a = ptr1[ axis ];    
-                  b = ptr1[ 1 - axis ];    
-                  majflag = majflags;
-                  lblat = labelat[ axis ];
-
-/* Store another value on the other axis which is used to defined the tick 
-   mark directions, and the difference between minor tick marks. For
-   linearly spaced tick marks these values will be the same for all major 
-   ticks. Minor ticks are always drawn above the correponding major
-   value (i.e. minlo == 1 ) and so we do not need to set delta2. */
-                  logticks = astGetLogTicks( this, axis );
-                  if( !logticks ) {
-                     lblat2 = labelat[ axis ] + 0.2*gap[ 1 - axis ];
-                     delta1 = gap[ axis  ]/(double)info->nminor;
-                  }
-
-/* Store the indicies of the first and last minor tick marks, relative to
-   a major tick mark. */
-                  minlo = 1;
-                  minhi = info->nminor - 1;
-
-/* Get the axis limits. */
-                  axmin = astGetBottom( frame, axis );
-                  axmax = astGetTop( frame, axis );
-
-/* Loop round until all ticks have been done. We include a hypothetical tick 
-   at index -1 (i.e. one gap below the first listed tick value) in order
-   to get minor tick marks below the first major tick. But the
-   hypothetical major tick value is not included in the list of major tick 
-   values to draw. */
-                  lasttick = info->nmajor - 1;
-                  for( tick = -1; tick <= lasttick; tick++ ){
-
-/* Get the major tick value. */
-                     if( tick == -1 ) {
-                        if( !logticks ) {
-                           val = (*value) - gap[ axis ];
-                        }else {
-                           val = (*value)/gap[ axis ];
-                        }
-                     } else {
-                        val = *(value++);
-                     }
-
-/* Now find the value on the other axis which is used to defined the tick 
-   mark directions, and the difference between minor tick marks, in the
-   case of logarithmically spaced tick marks. These values will be 
-   different for every major tick. Minor ticks are always drawn above the 
-   correponding major value (i.e. minlo == 1 ) and so we do not need to set 
-   delta2. */
-                     if( logticks ) {
-                        diff = val * ( gap[ axis ] - 1.0 );
-                        lblat2 = labelat[ axis ] + 0.2*diff;
-                        delta1 = diff / (double)info->nminor;
-                     }
-
-/* If major tick marks are required, store the physical coordinates at the 
-   start of the major tick mark, and at a point a little way up the major 
-   tick mark. */
-                     if( tick > -1 ){
-                        *(a++) = val;
-                        *(b++) = lblat;
-                        *(a++) = val;
-                        *(b++) = lblat2;
-                        *(majflag++) = 1;
-                     }
-
-/* Store the points defining the minor tick marks on either side of 
-   this major tick mark. First store the axis value at the first minor 
-   tick mark. */
-                     minval = val + minlo*delta1;
-
-/* Loop round all the minor tick marks, storing the physical coordinates
-   defining the tick mark. */
-                     for( i = minlo; i <= minhi; i++ ){
-
-/* Do not do the minor tick mark with index zero, since this corresponds
-   to the position of the major tick mark. Do not do any minor ticks that
-   are outside the axis range. */
-                        if( i && minval >= axmin && minval <= axmax ){
-                           *(a++) = minval;
-                           *(b++) = lblat;
-                           *(a++) = minval;
-                           *(b++) = lblat2;
-                           *(majflag++) = 0;
-                        }
-   
-/* Get the axis value at the next minor tick mark. */
-                        minval += delta1;
-                     }
-                  }
-               }
-            }
-
-/* Adjust the size of the arrays to exclude any unused space. */
-            nel = a - ptr1[axis];
-            ptr1[axis] = (double *) astRealloc( (void *) ptr1[axis], 
-                                                sizeof(double)*nel );
-            ptr1[1-axis] = (double *) astRealloc( (void *) ptr1[1-axis], 
-                                                  sizeof(double)*nel );
-
-/* Create a pointset holding these coordinates. */
-            pset1 = astPointSet( nel, 2, "", status );
-            astSetPoints( pset1, ptr1 );
-
-/* Transform these physical coordinates into graphics coordinates, without
-   doing any clipping (this is so that tick marks are still drawn even if
-   they extend into the area containing clipped physical coordinates). */
-            pset2 = astTransform( mapping, pset1, 0, NULL );
-            ptr2 = astGetPoints( pset2 );
-
-/* Transform them again this time with clipping. */
-            pset3 = Trans( this, NULL, mapping, pset1, 0, NULL, 0, method, class, status );
-            ptr3 = astGetPoints( pset3 );
-
-/* Check the pointers can be used.*/
-            if( astOK ){
-
-/* Store pointers to the next point on each axis. */
-               a = ptr1[ axis ];
-
-               x = ptr2[ 0 ];    
-               y = ptr2[ 1 ];    
-   
-               xc = ptr3[ 0 ];    
-               yc = ptr3[ 1 ];    
-   
-               majflag = majflags;
-
-/* Loop round all ticks (major and minor). */
-               ux = AST__BAD;
-               first = 1;
-               for( tick = 0; tick < nel/2; tick++ ){
-
-/* Store the physical axis value at the base of the tick mark (skip over
-   the physical axis value at the point up the tick mark). */
-                  a0 = *(a++);
-                  a++;
-
-/* Store the x and y coordinates at the base of the tick mark. */
-                  x0 = *(x++);
-                  y0 = *(y++);
-
-/* Store the x and y coordinates at a point up the tick mark. */
-                  x1 = *(x++);
-                  y1 = *(y++);
-
-/* Store the clipped x and y coordinates at the base of the tick mark. */
-                  x2 = *(xc++);
-                  y2 = *(yc++);
-
-/* Skip over the clipped x and y coordinates at the point up the tick mark. */
-                  xc++;
-                  yc++;
-
-/* Check they are all valid, and that the start of the tick mark is within
-   the plotting area. */
-                  if( x0 != AST__BAD && y0 != AST__BAD &&
-                      x1 != AST__BAD && y1 != AST__BAD &&
-                      x2 != AST__BAD && y2 != AST__BAD &&
-                      x0 <= this->xhi && x0 >= this->xlo &&
-                      y0 <= this->yhi && y0 >= this->ylo ){
-
-/* Get the increments in X and Y beyween the two points, and the squared
-   distance between the two points. */
-                     dx = x1 - x0;
-                     dy = y1 - y0;
-                     dl2 = dx*dx + dy*dy;
-
-/* Check the two points are not co-incident. */
-                     if( dl2 > dl2_limit ){
-
-/* Store the distance between the two points. */
-                        dl = sqrt( dl2 );
-
-/* If this is the first tick to be drawn on this axis, decide which
-   direction to draw the tick mark so that they will appear on the right
-   hand side of the axis as seen by someone moving along the axis in the
-   positive direction (the numerical labels are also drawn on the same 
-   side). */
-                        if( first ){
-                           first = 0;
-
-/* If the next tick mark is not defined, make an arbitrary decision by
-   leaving the sign of the tick mark length unchanged. */
-                           if( tick + 1 < nel/2 && 
-                               *x != AST__BAD && *y != AST__BAD &&
-                               a0 != AST__BAD && *a != AST__BAD ){
-
-/* Form the vector joining this tick mark to the next. */
-                               ex = *x - x0;
-                               ey = *y - y0;
-
-/* Ensure this vector is in the positive direction of the axis. */
-                               if( *a < a0 ) {
-                                  ex = -ex;
-                                  ey = -ey;
-                               }
-
-/* If a positive tick mark length would put the marks on the wrong side, 
-   negate the tick mark length. */
-                               if( ex*dy > ey*dx ){
-                                  mjsign = -1.0;
-                                  mnsign = -1.0;
-                               }
-                           }
-                        }
-
-/* Store the unit vector in the direction of the tick mark. This is used
-   as the default vector for the next tick mark if the direction of the 
-   next tick mark is indeterminate. */
-                        ux = dx/dl;
-                        uy = dy/dl;
-                     }
-
-/* Only draw this tickmark if its direction is known. */
-                     if( ux != AST__BAD ) {
-
-/* Get the position of the end of the tick mark. The length of the tick
-   mark depends on whether it is a major or minor tick mark. */
-                        if( *majflag ){
-                           x1 = x0 + mjsign*mjtklen*ux;
-                           y1 = y0 + mjsign*mjtklen*uy;
-                        } else {
-                           x1 = x0 + mnsign*mntklen*ux;
-                           y1 = y0 + mnsign*mntklen*uy;
-                        }
-
-/* Save and draw the tick mark. */
-                        SaveTick( this, axis, x0, y0, *majflag, status );
-                        if( x0 != x1 || y0 != y1 ) {
-                           Bpoly( this, (float) x0, (float) y0, method, class, status );
-                           Apoly( this, (float) x1, (float) y1, method, class, status );
-                           Opoly( this, method, class, status );
-                        }
-                     }
-                  }
-
-/* Point to the next major/minor flag. */
-                  majflag++;
-               }
-            }
-
-/* Free the memory holding the physical coordinates. */
-            ptr1[ 0 ] = (double *) astFree( ( void *) ptr1[ 0 ] );
-            ptr1[ 1 ] = (double *) astFree( ( void *) ptr1[ 1 ] );
-            majflags = (int *) astFree( (void *) majflags );
-
-/* Annul the PointSets. */
-            pset1 = astAnnul( pset1 );
-            pset2 = astAnnul( pset2 );
-            pset3 = astAnnul( pset3 );
-         }
-
-/* Re-establish the original graphical attributes. */
-         astGrfAttrs( this, gelid, 0, GRF__LINE, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
-         gelid = AST__TICKS2_ID;
-      }
-
-/* Annul the pointers to the Mapping and Frame. */
-      mapping = astAnnul( mapping );
-      frame = astAnnul( frame );
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static int EdgeLabels( AstPlot *this, int ink, TickInfo **grid, 
-                       AstPlotCurveData **cdata, int force, const char *method, 
-                       const char *class, int *status ){
-/*
-*
-*  Name:
-*     EdgeLabels
-
-*  Purpose:
-*     Attempts to display labels for the major tick values around the edges 
-*     of the plotting area.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int EdgeLabels( AstPlot *this, int ink, TickInfo **grid, 
-*                     AstPlotCurveData **cdata, int force, const char *method, 
-*                     const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function determines how many major tick value labels could be 
-*     placed on the specified edges of the plotting area, and then if
-*     requested, and if sufficient such labels are found (more than 3 on 
-*     each axis), they are drawn. To place a label on an edge, the curve 
-*     defining the major tick value must cross the edge at a reasonably 
-*     angle (at least 3 degrees). Labels are not drawn which would overlap 
-*     other, previously drawn, labels. A flag is returned indicating if 
-*     edge labels were (or could be) drawn.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     ink
-*        If zero, then no labels are drawn, but the decision whether or
-*        not to draw them is still made and indicated in the returned function 
-*        value.
-*     grid
-*        A pointer to an array of two TickInfo pointers (one for each axis), 
-*        each pointing to a TickInfo structure holding information about
-*        tick marks on the axis. See function GridLines.
-*     cdata
-*        A pointer to an array of two AstPlotCurveData pointers (one for each axis), 
-*        each pointing to an array of AstPlotCurveData structure (one for each
-*        major tick value on the axis), holding information about breaks
-*        in the curves drawn to mark the major tick values. See function 
-*        DrawGrid. 
-*     force
-*        If non-zero, then an attempt is made to draw edge labels even if
-*        it looks like insufficient edge labels can be produced.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If edge labels were drawn, 1 is returned. Otherwise 0 is returned.
-
-*  Notes:
-*     -  Zero is returned if an error has already occurred.
-*/
-
-
-/* Local Variables: */
-   AstFrame *frame;       /* Pointer to current Frame */
-   AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
-   LabelList *labellist;  /* Pointer to a ingle list of labels to be plotted */
-   LabelList *ll;         /* Pointer to next label to be plotted */
-   LabelList *llist[2];   /* Pointers to both lists of labels to be plotted */
-   TickInfo *info;        /* Pointer to the TickInfo for the current axis */
-   const char *just[ 2 ]; /* Justification string */
-   const char *text;      /* Pointer to label text */
-   double edgeval;        /* Axis value at the labelled edge */
-   double mindim;         /* Minimum dimension of the plotting area */
-   double oppval;         /* Axis value on the edge opposite to the labels */
-   double tol;            /* Max. distance between a break and the edge */
-   double txtgap;         /* Absolute gap between labels and edges */
-   float *box;            /* Pointer to array of label bounding boxes */
-   float *vxbrk;          /* X component of unit vector at current break */
-   float *vybrk;          /* Y component of unit vector at current break */
-   float *xbrk;           /* X coord. of current break */
-   float *ybrk;           /* Y coord. of current break */
-   float xref;            /* X coordinate at label's reference position */
-   float yref;            /* Y coordinate at label's reference position */
-   int axis;              /* Current axis index */
-   int brk;               /* Current break index */
-   int edge;              /* The edge to be labelled */
-   int edgeax;            /* Index of axis parallel to the labelled edge */
-   int edgelabs;          /* Can edge labels be produced? */
-   int esc;               /* INterpret escape sequences? */
-   int gelid;             /* ID for next graphical element to be drawn */
-   int ii;                /* Index into existing labels */
-   int maxlab;            /* Number of distinct edge labels */
-   int medge[2];          /* No. of distinct edge labels for each axis */
-   int naxlab;            /* Number of edge labels */
-   int near;              /* Draw a label on the near edge? */
-   int nedge[2];          /* No. of edge labels for each axis */
-   int ok;                /* Can the current tick mark be labelled on the edge? */
-   int labfound;          /* Label value has already been used? */
-   int tick;              /* Tick index */
-   int upright;           /* Draw all labels upright? */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   xref = 0.0;
-   yref = 0.0;
-
-/* See if escape sequences in text strings are to be interpreted. */
-   esc = astGetEscape( this );
-
-/* Initialise the returned flag to indicate that edge labels cannot be 
-   produced. */
-   edgelabs = 0;
-
-/* Get the minimum dimension of the plotting ares. */
-   mindim = MIN( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Set up the tolerance for curve breaks occuring on an edge of 
-   the plotting zone. */
-   tol = 0.005*mindim;
-
-/* First, we get a list of all the labels which can be produced on each
-   axis. The list includes the labels reference position in graphics
-   coordinates, and the index of the major tick value which it
-   represents. We do not yet know whether enough of the grid lines cross
-   the required edge to make it feasable to use edge labelling, so we do
-   not yet draw the labels.
-   =====================================================================*/
-
-/* Initialise pointers to arrays of structures holding information
-   about the labels which can be draw round the edge for both axes. */
-   llist[ 0 ] = NULL;
-   llist[ 1 ] = NULL;
-
-/* Indicate that no labels can yet be drawn on either axis. */
-   nedge[ 0 ] = 0;
-   nedge[ 1 ] = 0;
-
-/* The "nedge" array counts the number of labels on each edge. But some
-   of these labels may be for the same tick mark (if the tick mark curve has
-   more than 1 intersection with the edge). The "medge" array counts the
-   number of *distinct* tick mark labels (i.e. the number of tick mark
-   values which have 1 or more interesections with the edge). */
-   medge[ 0 ] = 0;
-   medge[ 1 ] = 0;
-
-/* For each axis, identify the the usable edge labels. */
-   for( axis = 0; axis < 2; axis++ ){
-
-/* See if labels for this axis are to be drawn upright. */
-      if( astTestLabelUp( this, axis ) ) { 
-         upright = astGetLabelUp( this, axis );
-      } else {
-         upright = 1;
-      }
-
-/* Store the required gap between the label text and the axis. */
-      txtgap = astGetNumLabGap( this, axis )*mindim;
-
-/* Get the edge to be labelled with the axis values. Edge 0 is the left hand 
-   edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3 is 
-   the bottom edge. */
-      edge = astGetEdge( this, axis ) % 4;
-      if( edge < 0 ) edge = -edge;
-
-/* If edge labels for the current axis are to go on the left hand edge of
-   the plotting area... */
-      if( edge == 0 ){
-
-/* Choose the justification based on the sign of the text gap. */
-         if( !upright ) {
-            just[ axis ] = "BC";
-         } else if( txtgap > 0.0 ){
-            just[ axis ] = "CR";
-         } else if( txtgap < 0.0 ){
-            just[ axis ] = "CL";
-         } else {
-            just[ axis ] = "CC";
-         }
-
-/* Store the constant X axis value at the edge being labelled. Also store
-   the X value to use for the reference position for all labels. Take into
-   account whether or not the X axis is displayed reversed (i.e. with high
-   X values at the left hand side of the screen ). */
-         if( !this->xrev ){
-            edgeval = this->xlo;
-            oppval = this->xhi;
-            xref = (float)( edgeval - txtgap );
-         } else {
-            edgeval = this->xhi;
-            oppval = this->xlo;
-            xref = (float)( edgeval + txtgap );
-         }
-
-/* Indicate that the "edgeval" value refers to axis 1 (the X axis). */
-         edgeax = 1;
-         
-/* Do the same if the labels are to go on the top edge. */
-      } else if( edge == 1 ){
-         if( txtgap > 0.0 ){
-            just[ axis ] = "BC";
-         } else if( txtgap < 0.0 ){
-            just[ axis ] = "TC";
-         } else {
-            just[ axis ] = "CC";
-         }
-
-         if( !this->yrev ){
-            edgeval = this->yhi;
-            oppval = this->ylo;
-            yref = (float)( edgeval + txtgap );
-         } else {
-            edgeval = this->ylo;
-            oppval = this->yhi;
-            yref = (float)( edgeval - txtgap );
-         }
-
-         edgeax = 0;
-         
-/* Do the same if the labels are to go on the right-hand edge. */
-      } else if( edge == 2 ){
-
-         if( !upright ) {
-            just[ axis ] = "BC";
-         } else if( txtgap > 0.0 ){
-            just[ axis ] = "CL";
-         } else if( txtgap < 0.0 ){
-            just[ axis ] = "CR";
-         } else {
-            just[ axis ] = "CC";
-         }
-
-         if( !this->xrev ){
-            edgeval = this->xhi;
-            oppval = this->xlo;
-            xref = (float)( edgeval + txtgap );
-         } else {
-            edgeval = this->xlo;
-            oppval = this->xhi;
-            xref = (float)( edgeval - txtgap );
-         }
-
-         edgeax = 1;
-
-/* Do the same if the labels are to go on the bottom edge. */
-      } else {
-         if( txtgap > 0.0 ){
-            just[ axis ] = "TC";
-         } else if( txtgap < 0.0 ){
-            just[ axis ] = "BC";
-         } else {
-            just[ axis ] = "CC";
-         }
-
-         if( !this->yrev ){
-            edgeval = this->ylo;
-            oppval = this->yhi;
-            yref = (float)( edgeval - txtgap );
-         } else {
-            edgeval = this->yhi;
-            oppval = this->ylo;
-            yref = (float)( edgeval + txtgap );
-         }
-
-         edgeax = 0;
-
-      }
-
-/* Get a pointer to the structure containing information describing the 
-   positions of the major tick marks along this axis. */  
-      info = grid[ axis ];
-
-/* Get a pointer to the structure containing information describing the 
-   breaks in the curve which is parallel to the other axis and passes 
-   through the first major tick mark. */
-      cdt = cdata[ axis ];
-
-/* Initialise the pointer to the list of text strings to be drawn. */
-      labellist = NULL;
-
-/* Initialise the number of labels which can be placed on the near edge of 
-   the plotting zone (some of which may be the same). */
-      naxlab = 0;
- 
-/* Initialise the number of distinct labelled tick mark values. */
-      maxlab = 0;
- 
-/* Loop round each of the major tick marks on the current axis. */
-      for( tick = 0; cdt && info && tick < info->nmajor; tick++ ){
-
-/* Store pointers to the values giving the position and unit direction 
-   vector of the curve at the first break. */
-         xbrk = cdt->xbrk;
-         ybrk = cdt->ybrk;
-         vxbrk = cdt->vxbrk;
-         vybrk = cdt->vybrk;
-
-/* Loop round each of the breaks in the curve which passes through the 
-   current major tick mark, and is parallel to the other axis. */
-         ok = 0;
-         for( brk = 0; brk < cdt->nbrk; brk++ ){
-
-/* A label can be produced on the near edge of the plotting zone if the 
-   current break occurs on, or close to, the edge, and the curve is not 
-   nearly parallel to the axis (limit is 5 degs). */
-            near = ( ( edgeax == 0 && 
-                       fabs( (double) *ybrk - edgeval ) < tol &&
-                       fabs( (double) *vybrk ) > 0.09 ) || 
-                     ( edgeax == 1 && 
-                       fabs( (double) *xbrk - edgeval ) < tol &&
-                       fabs( (double) *vxbrk ) > 0.09 ) );
-
-/* Get the label text. */
-            if( info->labels ) {
-               text = (info->labels)[ tick ];
-            } else {
-               text = NULL;
-            }
-
-/* If a label can be produced, record the information needed to draw the 
-   label. */
-            if( near && text ){ 
-
-               labellist = (LabelList *) astGrow( (void *) labellist, naxlab + 1, sizeof(LabelList) );
-               if ( !astOK ) break;
-
-               if( edgeax == 0 ){
-                  (labellist + naxlab)->index = (double) *xbrk;
-                  (labellist + naxlab)->x = (double) *xbrk;
-                  (labellist + naxlab)->y = (double) yref;
-               } else {
-                  (labellist + naxlab)->index = (double) *ybrk;
-                  (labellist + naxlab)->x = (double) xref;
-                  (labellist + naxlab)->y = (double) *ybrk;
-               }
-
-               (labellist + naxlab)->text = (char *) astStore( NULL, (void *) text, strlen(text) + 1 );
-               (labellist + naxlab)->just = (char *) astStore( NULL, (void *) just[ axis ], strlen(just[ axis ]) + 1 );
-
-/* The up vector depends on which edge is being labelled and whether all
-   labels are being drawn upright or not. */
-               if( edge == 1 || edge == 3 || upright ) {
-                  (labellist + naxlab)->upx = 0.0;
-                  (labellist + naxlab)->upy = 1.0;
-               } else if( edge == 0 ) {
-                  (labellist + naxlab)->upx = -1.0;
-                  (labellist + naxlab)->upy = 0.0;
-               } else {
-                  (labellist + naxlab)->upx = 1.0;
-                  (labellist + naxlab)->upy = 0.0;
-               }
-
-               (labellist + naxlab)->val = (info->ticks)[ tick ];
-               naxlab++;
-
-/* If this label has not already been included in the label list, indicate
-   that we have found another usable label. */
-               labfound = 0;
-               for( ii = 0; ii < naxlab-1; ii++ ) { 
-                  if( fabs( (info->ticks)[ tick ] - 
-                            (labellist + ii)->val ) < 0.2*info->gap ) {
-                     labfound = 1;
-                     break;
-                  }
-               }
-               if( !labfound ) ok = 1;
-
-            }
-
-/* Increment the pointers to the values giving the position and unit direction 
-   vector of the next break. */
-            xbrk++;
-            ybrk++;
-            vxbrk++;
-            vybrk++;
-
-         }
-            
-/* If an error has occurred, break out of the loop. */
-         if( !astOK ) break;
-
-/* If one or more labels could be produced for this tick mark value,
-   increment the number of labeled tick marks found. */
-         if( ok ) maxlab++;
-
-/* Get a pointer to the curve through the next major tick mark. */
-         cdt++;
-            
-      }
-
-/* If an error has occurred, break out of the loop. */
-      if( !astOK ) break;
-
-/* Store the number of labels for this axis, and the pointer to the
-   drawable labels. */
-      nedge[ axis ] = naxlab;
-      medge[ axis ] = maxlab;
-      llist[ axis ] = labellist;
-   }
-
-/* We now know how many labels would be produced on each axis if edge
-   labelling were to be used. We also know what those labelled values are,
-   and where the labels would be drawn. We now take the decision as to
-   whether there are enough of these labels to make edge labelling
-   feasable. If so, we carry on and draw the labels. There need to be 
-   at least 3 labels on each axis for linear tick spacing and 2 for log 
-   tick spacing (or a non-zero value supplied for "force")...
-   ================================================================= */   
-   if( astOK && ( ( medge[ 0 ] > ( astGetLogTicks( this, 0 ) ? 1 : 2 ) &&
-                    medge[ 1 ] > ( astGetLogTicks( this, 1 ) ? 1 : 2 ) ) 
-       || force ) ) {                  
-
-/* Set the returned flag to indicate that edge labelling is being used. */
-      edgelabs = 1;
-
-/* Initialise the pointer to the memory holding the bounding boxes for 
-   all labels (used by function Overlap). */
-      box = NULL;
-
-/* Get a pointer to the current Frame in the Plot. */
-      frame = astGetFrame( this, AST__CURRENT );
-
-/* Initialize the id value for graphical element being drawn. */
-      gelid = AST__NUMLAB1_ID;
-
-/* If required, draw the labels for each axis in turn. */
-      for( axis = 0; axis < 2 && ink; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-         astGrfAttrs( this, gelid, 1, GRF__TEXT, method, class );
-
-/* Plot them. */
-         info = grid[ axis ];
-         PlotLabels( this, esc, frame, axis, llist[ axis ], info->fmt, 
-                     nedge[ axis ], &box, method, class, status );
-
-/* Re-establish the original graphical attributes. */
-         astGrfAttrs( this, gelid, 0, GRF__TEXT, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
-         gelid = AST__NUMLAB2_ID;
-
-      }
-
-/* Free the memory used to hold the bounding boxes. */
-      box = (float *) astFree( (void *) box );
-
-/* Annul the pointer to the Frame. */
-      frame = astAnnul( frame );
-   }
-
-/* Free the memory used to store the label information. */
-   for( axis = 0; axis < 2; axis++ ){
-      ll = llist[ axis ];
-      if( ll ) {
-         for( tick = 0; tick < nedge[ axis ]; tick ++ ) {
-            ll->text = (char *) astFree( (void *) ll->text );
-            ll->just = (char *) astFree( (void *) ll->just );
-            ll++;
-         }
-         llist[ axis ] = (LabelList *) astFree( (void *) llist[ axis ] );
-      }
-   }
-
-/* Return the flag indicating if edge labels were produced. */
-   return edgelabs;
-
-}
-
-static int EdgeCrossings( AstPlot *this, int edge, int axis, double axval, 
-                          double *gap, double **cross,
-                          EdgeCrossingsStatics **pstatics, const char *method, 
-                          const char *class, int *status ){
-/*
-*
-*  Name:
-*     EdgeCrossings
-
-*  Purpose:
-*     Find all occurrences of a given physical axis value on an edge of the
-*     plotting area.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int EdgeCrossings( AstPlot *this, int edge, int axis, double axval, 
-*                        double *gap, double **cross, 
-*                        EdgeCrossingsStatics **pstatics, 
-*                        const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function finds all occurences of a given physical axis value
-*     along a specified edge of the plotting area. Firstly, a set of evenly
-*     spaced points ("edge samples") are placed along the edge and the 
-*     corresponding physical coordinates are found. These physical coordinates 
-*     are then offset slightly from their original positions in the direction
-*     of the "other" axis (i.e. index [ 1 - axis ] ), and transformed back
-*     into graphics coordinates. These coordinates give the tangent vector
-*     at each of the edge samples.
-*
-*     To find the crossings, the supplied axis value is compared with the axis 
-*     value at each sample in turn, starting from one end of the edge and
-*     working through to the other end. When a crossing is found, linear
-*     interpolation is used between the two adjacent edge samples to find a
-*     more accurate estimate of the crossing. The vector at the crossing
-*     is also estimated by linear interpolation between the vectors at the two
-*     adjacent samples.
-*
-*     This basic algorithm fails if there is a discontinuity in the axis
-*     values along the edge. For instance, if the edge covers a range of
-*     Right Ascension from 23h to 1h, there will be a discontinuity at 0h
-*     at which the RA values suddenly jump from 2*PI to zero. This jump
-*     encompasses all normalised RA values and so every axis value would be 
-*     given a crossing at this point. To avoid this, a bad sample is
-*     interposed between the two samples on either side of the
-*     discontinuity. This prevents any crossings from being placed at the
-*     discontinuity.
-*
-*     There is a second problem related to discontinuities. If the supplied
-*     axis value is zero (using the above RA example again), then no
-*     crossings will be found, not only because of the extra bad sample,
-*     but also because the samples will not quite cover the range of axis
-*     values covered by the discontinuity because of the discrete nature
-*     of the samples). To get round this, the sections on either side 
-*     of the discontinity are extended by a single sample. These extra
-*     samples are assumed to be conincident with the neighbouring sample,
-*     except that the value for the searched axis is modified to be a
-*     linear extension from the neighbouring samples.
-
-
-*  Parameters:
-*     this
-*        A pointer to the Plot. Supply a NULL pointer to release resources.
-*     edge
-*        The edge of the plotting area to be used. Edge 0 is the left hand 
-*        edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3 
-*        is the bottom edge. 
-*     axis
-*        The index of the axis to which "axval" refers. 
-*     axval
-*        The physical axis value to be searched for.
-*     gap
-*        Pointer to array of two values holding the gap between major
-*        tick marks on the two axes.
-*     cross
-*        A pointer to the location at which to return a pointer to an
-*        array of doubles holding the crossing information. Each crossing
-*        is described by 4 doubles. The first pair are the graphiucs (x,y)
-*        coordinates of the point on the edge at which the crossing occurs.
-*        The second pair represents a unit vector in graphics coordinates
-*        which is tangential to the curve of constant axis value at the
-*        crossing. The memory allocated within this function to hold this
-*        data should be freed using astFree when no longer needed. If no
-*        crossings are found a NULL pointer is returned.
-*     pstatics
-*        Address of a pointer to a structure holding values for variables 
-*        which were statically defined within this function prior to the 
-*        thread-safe version of AST. If the pointer is supplied as NULL,
-*        then a new structure is allocated and initialised. Any supplied
-*        structure is freed if a NULL pointer is supplied for "this".
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Return Value:
-*     The number of crossings found.
-
-*  Notes:
-*     -  This function allocates static resource on the first invocation
-*     which should be freed when no more calls are to be made, by making a 
-*     final call with a NULL pointer supplied for "this". All other parameters 
-*     are then ignored.
-*     -  The static resources are re-initialised each time "edge" or
-*     "axis" changes, and so the calling function should be structure in
-*     order to minimise the number of times these parameter values change.
-*     -  If an error has already occurred, or if this function should
-*     fail for any reason, zero is returned, and a NULL pointer is stored at
-*     "cross".
-
-*/
-
-/* Local Variables: */
-   EdgeCrossingsStatics *statics; /* Structure holding static data */
-   AstMapping *mapping;       /* Pointer to graphics->physical mapping */
-   AstPointSet *pset1a;       /* Physical cooords at offset edge samples */
-   AstPointSet *pset2a;       /* Physical cooords at offset edge samples */
-   AstPointSet *pset3;        /* Physical cooords at offset edge samples */
-   AstPointSet *pset4a;       /* Physical cooords at offset edge samples */
-   double **ptr1a;            /* Pointer to physical coord. data */
-   double **ptr2a;            /* Pointer to physical coord. data */
-   double **ptr3;             /* Pointer to physical coord. data */
-   double **ptr4a;            /* Pointer to physical coord. data */
-   double *data;              /* Pointer to next item of crossing information */
-   double *p1;                /* Pointer to graphics axis with constant value */
-   double *p1a;               /* Pointer to graphics axis with constant value */
-   double *p2;                /* Pointer to graphics axis with varying value */
-   double *p2a;               /* Pointer to graphics axis with varying value */
-   double *q1;                /* Pointer to physical axis being searched */
-   double *q1a;               /* Pointer to physical axis being searched */
-   double *q2;                /* Pointer to other physical axis */
-   double *q2a;               /* Pointer to other physical axis */
-   double *v1;                /* Pointer to vector component on axis 0 */
-   double *v2;                /* Pointer to vector component on axis 1 */
-   double *v1a;               /* Pointer to vector component on axis 0 */
-   double *v2a;               /* Pointer to vector component on axis 1 */
-   double dd;                 /* The gap between edge samples */
-   double diff;               /* Squared differences between adjacent edge samples */
-   double dl2;                /* Squared vector length */
-   double dl;                 /* Vector length */
-   double dx;                 /* Vector X component */
-   double dy;                 /* Vector Y component */
-   double f;                  /* Weight for the current edge sample */
-   double offset;             /* Physical offset */
-   double pp2;                /* Varying graphics axis value at previous sample */
-   double pq1;                /* Required physical axis value at previous sample */
-   double pv1;                /* Previous vector component on axis 0 */
-   double pv2;                /* Previous vector component on axis 1 */
-   double sum;                /* Sum of squared differences between adjacent edge samples */
-   double value;              /* The current graphics axis value */
-   double vx;                 /* Vector component on axis 0 at crossing */
-   double vy;                 /* Vector component on axis 1 at crossing */
-   double z;                  /* Varying graphics axis value at crossing */
-   int i;                     /* Edge sample index */
-   int iter;                  /* Iteration index */
-   int larger;                /* Is current axis value larger than target? */
-   int logticks;              /* Are major ticks logarithmically spaced? */
-   int ncross;                /* No. of crossings */
-   int ndisc;                 /* No. of discontinuities along the edge */
-   int nsum;                  /* Number of values summed in "sum" */
-   int plarger;               /* Was previous axis value larger than target? */
-
-/* Get a pointer to the supplied statics object. */
-   statics = *pstatics;
-
-/* If a NULL Plot pointer has been supplied, release the static
-   resources, and return. */
-   if( !this ){
-      if( statics ){
-         if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-         if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-         if( statics->pset4 ) statics->pset4 = astAnnul( statics->pset4 );
-         if( statics->frame ) statics->frame = astAnnul( statics->frame );
-         *pstatics = astFree( statics );
-      }
-      return 0;
-   }
-
-/* Initialise the number of crossings found, and the pointer to the place
-   to store them. */
-   ncross = 0;
-   *cross = NULL;
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* If no statics structure was supplied, create one now and initialise it. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( EdgeCrossingsStatics ) );
-      if( statics ) {
-         statics->frame = NULL;
-         statics->pset1 = NULL;
-         statics->pset2 = NULL;
-         statics->pset4 = NULL;
-         statics->ptr1 = NULL; 
-         statics->ptr2 = NULL; 
-         statics->ptr4 = NULL; 
-         statics->paxis = -1;  
-         statics->pedge = -1;  
-         *pstatics = statics;
-      }
-   }
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   pp2 = 0.0;
-   pv1 = 0.0;
-   pv2 = 0.0;
-   plarger = 0;
-
-/* See if the major ticks on the other axis are logarithmically or
-   linearly spaced. */
-   logticks = astGetLogTicks( this, 1 - axis );
-
-/* Ensure that "edge" is in the range 0 - 3. */
-   edge = edge % 4;
-   if( edge < 0 ) edge = -edge;
-
-/* If the edge or axis has changed since the last invocation, or if this is 
-   the first invocation, initialise some static data. */
-/* ======================================================================*/
-   if( statics->pedge == -1 || statics->pedge != edge || statics->paxis != axis ){
-
-/* Save the edge and axis. */
-      statics->pedge = edge;
-      statics->paxis = axis;
-
-/* Annull any previous static data objects */
-      if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-      if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-      if( statics->pset4 ) statics->pset4 = astAnnul( statics->pset4 );
-      if( statics->frame ) statics->frame = astAnnul( statics->frame );
-
-/* Store some values so that the code does not need to consider each edge
-   separately. First deal with the left hand edge. */
-      if( edge == 0 ){
-         statics->edgeax = 0;       
-         if( this->xrev ){      
-            statics->edgeval = this->xhi;
-         } else {
-            statics->edgeval = this->xlo;
-         }
-         statics->edgehi = this->yhi;
-         statics->edgelo = this->ylo;
- 
-/* Now deal with the right hand edge. */
-      } else if( edge == 2 ){
-         statics->edgeax = 0;       
-         if( this->xrev ){      
-            statics->edgeval = this->xlo;
-         } else {
-            statics->edgeval = this->xhi;
-         }
-         statics->edgehi = this->yhi;
-         statics->edgelo = this->ylo;
-
-/* Now deal with the bottom edge. */
-      } else if( edge == 3 ){
-         statics->edgeax = 1;       
-         if( this->yrev ){      
-            statics->edgeval = this->yhi;
-         } else {
-            statics->edgeval = this->ylo;
-         }
-         statics->edgehi = this->xhi;
-         statics->edgelo = this->xlo;
-
-
-/* Finally deal with the top edge. */
-      } else {
-         statics->edgeax = 1;       
-         if( this->yrev ){      
-            statics->edgeval = this->ylo;
-         } else {
-            statics->edgeval = this->yhi;
-         }
-         statics->edgehi = this->xhi;
-         statics->edgelo = this->xlo;
-
-      }
-
-/* Get a pointer to the current Frame in the supplied Plot. */
-      statics->frame = astGetFrame( this, AST__CURRENT );
-
-/* Get a pointer to the mapping from base to current Frame in the supplied 
-   Plot. */
-      mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Create a PointSet to hold the graphics coordinates at a set of
-   regularly spaced points along the specified edge of the plotting area. */
-      pset1a = astPointSet( EDGETICKS_DIM, 2, "", status );
-      ptr1a = astGetPoints( pset1a );
-
-/* Create a PointSet to hold the corresponding physical coordinates. */
-      pset2a = astPointSet( EDGETICKS_DIM, 2, "", status );
-      ptr2a = astGetPoints( pset2a );
-
-/* Check they can be used. */
-      if( astOK ){
-
-/* Set up the graphics coordinates. */
-         dd = ( statics->edgehi - statics->edgelo )/(double)( EDGETICKS_DIM - 1 );
-         value = statics->edgelo;
-   
-         p1 = ptr1a[ statics->edgeax ];
-         p2 = ptr1a[ 1 - statics->edgeax ];
-
-         for( i = 0; i < EDGETICKS_DIM; i++ ){
-            *(p1++) = statics->edgeval;
-            *(p2++) = value;
-            value += dd;
-         }
-      }
-
-/* Transform the graphics coordinates to physical coordinates,
-   *without* normalising them into their normal ranges. */
-      (void) Trans( this, statics->frame, mapping, pset1a, 1, pset2a, 0, method, class, status );
-
-/* Find the RMS step size along the axis. This is used to locate
-   discontinuities along the edge.  Do three rejection iterations. */
-      statics->limit = DBL_MAX;
-      for( iter = 0; iter < 3; iter ++ ){
-         q1 = ptr2a[ axis ];
-         pq1 = AST__BAD;
-         sum = 0.0;
-         nsum = 0;
-
-         for( i = 0; i < EDGETICKS_DIM; i++ ){
-            if( *q1 != AST__BAD && pq1 != AST__BAD ){
-               diff = *q1 - pq1;
-               if( fabs( diff ) < statics->limit ){   
-                  sum += diff*diff;
-                  nsum++;
-               }
-            }
-            pq1 = *(q1++);
-         }
- 
-         if( nsum == 0 ) break;
-         statics->limit = 3.0*sqrt( sum/(double)nsum );
-      }
-
-/* Now create another PointSet holding positions slightly offset from the
-   physical coordinates at the edge samples. The offset is in the direction
-   of the other physical axis. These positions are used to determine the
-   vector at the crossings. */
-      if( nsum > 0 ){
-         pset3 = astPointSet( EDGETICKS_DIM, 2, "", status );
-         ptr3 = astGetPoints( pset3 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates. */
-         pset4a = astPointSet( EDGETICKS_DIM, 2, "", status );
-         ptr4a = astGetPoints( pset4a );
-
-/* Check they can be used. */
-         if( astOK ){
-
-/* Copy the physical coordinates from PointSet 2 to PointSet 3, offseting
-   them slightly along the other axis. */
-            p1 = ptr2a[ axis ];
-            p2 = ptr2a[ 1 - axis ];
-
-            q1 = ptr3[ axis ];
-            q2 = ptr3[ 1 - axis ];
-
-            offset = 0.2*gap[ 1 - axis ];
-
-            pq1 = AST__BAD;
-
-            for( i = 0; i < EDGETICKS_DIM; i++ ){
-               if( *p1 != AST__BAD && *p2 != AST__BAD ){
-                  if( logticks ) offset = 0.2*(*p2)*( gap[ 1 -axis ] - 1.0 );
-                  *(q2++) = *p2 + offset;
-               } else {               
-                  *(q2++) = AST__BAD;
-               }
-               pq1 = *(p1++);
-               *(q1++) = pq1;
-               p2++;
-            }
- 
-         }
-
-/* Transform the physical coordinates to graphics coordinates. */
-         (void) Trans( this, NULL, mapping, pset3, 0, pset4a, 0, method, class, status );
-
-/* Check they can be used. */
-         if( astOK ){
-
-/* Modify the contents of PointSet 4 to represent the unit vector in
-   graphics coordinates at each edge sample. */
-            p1 = ptr1a[ 0 ];
-            p2 = ptr1a[ 1 ];
-            q1 = ptr4a[ 0 ];
-            q2 = ptr4a[ 1 ];
-
-            for( i = 0; i < EDGETICKS_DIM; i++ ){
-               if( *p1 != AST__BAD && *p2 != AST__BAD &&
-                   *q1 != AST__BAD && *q2 != AST__BAD ){
-
-                  dx = *q1 - *p1;
-                  dy = *q2 - *p2;
-                  dl2 = dx*dx + dy*dy;
-
-                  if( dl2 > 0.0 ){
-                     dl = sqrt( dl2 );
-                     *q1 = dx/dl; 
-                     *q2 = dy/dl; 
-                  } else {
-                     *q1 = AST__BAD;
-                     *q2 = AST__BAD;
-                  }
-
-               } else {
-                  *q1 = AST__BAD;
-                  *q2 = AST__BAD;
-               }
-   
-               p1++;
-               p2++;
-               q1++;
-               q2++;
-
-            }
- 
-         }
- 
-/* Annul the PointSet holding offset physical cooridnates. */
-         pset3 = astAnnul( pset3 );      
-
-/* Discontinuities in the axis values can cause problems. For instance,
-   using the above PointSets, no tick mark could be put at 0 hours RA
-   because of the discontinuity there. To get round this, 3 extra samples
-   are added at each discontinuity, the first extends the continuous section
-   which ends at the discontinuity, and the third extends the secion which 
-   starts at the discontinuity. This results in the two sections overlapping 
-   by one sample. The second is placed between these two and has a bad
-   axis value. It prevents crossings from being found in between the values 
-   at the ends of the two sections. 
-
-   First count the number of discontinuities in the axis values.
-   Discontinuites are defined as steps of more than 9 times the RMS step
-   size. */
-         q1 = ptr2a[ axis ];
-         pq1 = AST__BAD;
-         statics->limit *= 3.0;
-         ndisc = 0;
-
-         for( i = 0; i < EDGETICKS_DIM; i++ ){
-            if( *q1 != AST__BAD && pq1 != AST__BAD ){
-               if( fabs( *q1 - pq1 ) > statics->limit ) ndisc++;
-            }
-            pq1 = *(q1++);
-         }
-
-/* Store the size of the new PointSets holding the extra samples. */
-         statics->dim = EDGETICKS_DIM + 3*ndisc;         
- 
-/* If there are no discontinuities, just clone the existing PointSets. */
-         if( !ndisc ){
-            statics->pset1 = astClone( pset1a );
-            statics->pset2 = astClone( pset2a );
-            statics->pset4 = astClone( pset4a );
-            statics->ptr1 = astGetPoints( statics->pset1 );
-            statics->ptr2 = astGetPoints( statics->pset2 );
-            statics->ptr4 = astGetPoints( statics->pset4 );
-
-/* Otherwise, create new PointSets. */
-         } else {
-            statics->pset1 = astPointSet( statics->dim, 2, "", status );
-            statics->ptr1 = astGetPoints( statics->pset1 );
-            statics->pset2 = astPointSet( statics->dim, 2, "", status );
-            statics->ptr2 = astGetPoints( statics->pset2 );
-            statics->pset4 = astPointSet( statics->dim, 2, "", status );
-            statics->ptr4 = astGetPoints( statics->pset4 );
-
-/* Set up pointers used to walk through the arrays in the original
-   PointSets and the new PointSets. */
-            p1 = statics->ptr1[ 0 ];
-            p2 = statics->ptr1[ 1 ];
-            q1 = statics->ptr2[ axis ];
-            q2 = statics->ptr2[ 1 - axis ];
-            v1 = statics->ptr4[ 0 ];
-            v2 = statics->ptr4[ 1 ];
-
-            p1a = ptr1a[ 0 ];
-            p2a = ptr1a[ 1 ];
-            q1a = ptr2a[ axis ];
-            q2a = ptr2a[ 1 - axis ];
-            v1a = ptr4a[ 0 ];
-            v2a = ptr4a[ 1 ];
-
-/* Initialise the axis value at the previous sample. */
-            pq1 = AST__BAD;
-
-/* Check all samples in the original PointSets. */   
-            for( i = 0; i < EDGETICKS_DIM; i++ ){
-
-/* If this is the first point after a discontinuity... */
-               if( *q1a != AST__BAD && pq1 != AST__BAD ){
-                  if( fabs( *q1a - pq1 ) > statics->limit ) {
-
-/* Insert an extra sample with the coordinates of the previous sample, 
-   but with an axis value which is linearly extrapolated from the previous 
-   samples. */
-                     *(p1++) = p1a[ 0 ];
-                     *(p2++) = p2a[ 0 ];
-                     *(v1++) = v1a[ -1 ];
-                     *(v2++) = v2a[ -1 ];
-                     *(q2++) = q2a[ -1 ];
-                     if( i > 1 && q1a[ -2 ] != AST__BAD ){
-                        *(q1++) = 2.0*pq1 - q1a[ -2 ];
-                     } else {
-                        *(q1++) = pq1;
-                     }
-
-/* Insert an extra sample with bad coordinates. */
-                     *(p1++) = AST__BAD;
-                     *(p2++) = AST__BAD;
-                     *(v1++) = AST__BAD;
-                     *(v2++) = AST__BAD;
-                     *(q2++) = AST__BAD;
-                     *(q1++) = AST__BAD;
-
-/* Insert an extra sample with the cooridnates of the current sample, 
-   but with an axis value which is linearly extrapolated from the
-   subsequent samples. */
-                     *(p1++) = p1a[ -1 ];
-                     *(p2++) = p2a[ -1 ];
-                     *(v1++) = *v1a;
-                     *(v2++) = *v2a;
-                     *(q2++) = *q2a;
-                     if( i < EDGETICKS_DIM - 1 && q1a[ 1 ] != AST__BAD ){
-                        *(q1++) = 2.0*(*q1a) - q1a[ 1 ];
-                     } else {
-                        *(q1++) = pq1;
-                     }
-
-                  }
-
-               }
-
-/* Save the current axis value. */
-               pq1 = *q1a;
-
-/* Copy the current input values to the new PointSets, and move on the next 
-   point in the original PointSets. */
-               *(p1++) = *(p1a++);
-               *(p2++) = *(p2a++);
-               *(q1++) = *(q1a++);
-               *(q2++) = *(q2a++);
-               *(v1++) = *(v1a++);
-               *(v2++) = *(v2a++);
-
-            }                                                 
-
-         }
-
-/* Anull the original PointSets. */
-         pset4a = astAnnul( pset4a );
-
-/* If all the physical coordinates are bad, indicate this by setting the
-   limiting step size bad. */
-      } else {
-         statics->limit = AST__BAD;
-      }
-      
-/* Anull the original PointSets. */
-      pset1a = astAnnul( pset1a );
-      pset2a = astAnnul( pset2a );
-
-/* Annul the pointer to the mapping from base to current Frame. */
-      mapping = astAnnul( mapping );
-
-   }
-
-/* ======================================================================*/
-/* The initialisation has now been done. Check the physical coordinate data 
-   can be used. */
-   if( astOK && statics->limit != AST__BAD ){
-
-/* Store pointers to the graphics and physical coordinates at the first
-   edge sample. */
-      p1 = statics->ptr1[ statics->edgeax ];     /* Graphics axis with constant value */
-      p2 = statics->ptr1[ 1 - statics->edgeax ]; /* Graphics axis with varying value */
-      q1 = statics->ptr2[ axis ];       /* Physical axis values to be searched */
-      q2 = statics->ptr2[ 1 - axis ];   /* The other physical axis */
- 
-/* Store pointers to the components of the unit vector at the first
-   edge sample. */
-      v1 = statics->ptr4[ 0 ];
-      v2 = statics->ptr4[ 1 ];
-
-/* Inidicate that there is currently no "previous sample". */
-      pq1 = AST__BAD;
-
-/* Check each point in turn... */
-      for( i = 0; i < statics->dim; i++ ){
-
-/* Skip this point if the physical coordinates are undefined. */
-         if( *q1 != AST__BAD && *q2 != AST__BAD ){
-
-/* Get a flag indicating if the required axis value has been exceeded at
-   the current edge sample. */
-            larger = ( *q1 > axval ); 
-
-/* If the state of this flag has changed since the previous edge sample, 
-   and if we know where the previous sample was, we have found a
-   crossing. */
-            if( pq1 != AST__BAD && larger != plarger ){
-
-/* Find the distance from the previous physical axis value to the required
-   axis value, as a fraction of the distance from the previous axis value
-   to the current axis value. Since the flag has changed, we know that the 
-   q1 value at this edge sample and the previous one must be different, so 
-   we know that the denominator is not zero. */
-               f = ( axval - pq1 )/( *q1 - pq1 );
-
-/* Use linear interpolation to estimate the graphics axis value at the
-   crossing. */
-               if( f != -1.0 ){
-                  z = pp2 + f*( *p2 - pp2 );
-
-/* Use linear interpolation to estimate the two components of the unit
-   vector at the crossing. */
-                  if( *v1 != AST__BAD && pv1 != AST__BAD &&
-                      *v2 != AST__BAD && pv2 != AST__BAD ){
-                     vx = pv1 + f*( *v1 - pv1 );
-                     vy = pv2 + f*( *v2 - pv2 );
-
-/* Normalise the vector. */
-                     dl2 = vx*vx + vy*vy;
-                     if( dl2 > 0.0 ){
-                        dl = sqrt( dl2 );
-                        vx /= dl;
-                        vy /= dl;
-                     } else {
-                        vx = AST__BAD;
-                        vy = AST__BAD;
-                     }
-
-                  } else {
-                     vx = AST__BAD;
-                     vy = AST__BAD;
-                  } 
-
-/* Grow the returned array to hold another crossing. */
-                  ncross++;
-                  *cross = (double *) astGrow( (void *) *cross, ncross, 
-                                               4*sizeof( double ) );
-
-/* If succesful, store the crossing. */
-                 if( astOK ) {
-  
-                    data = *cross + 4*( ncross - 1 );
-                    if( statics->edgeax ){
-                       *(data++) = z;
-                       *(data++) = statics->edgeval;
-                    } else {
-                       *(data++) = statics->edgeval;
-                       *(data++) = z;
-                    }
-                    *(data++) = vx;
-                    *(data++) = vy;
-  
-                  }
-
-               }
-
-            }
-
-/* Save the flag for use on the next pass through this loop. */
-            plarger = larger;
-
-         }
-
-/* Save the varying graphics axis value and the required physical axis 
-   value at the current edge sample (also save the vector). */
-         pp2 = *p2;
-         pq1 = *q1;
-         pv1 = *v1;
-         pv2 = *v2;
-
-/* Point to the next edge sample. */
-         p1++;
-         p2++;
-         q1++;
-         q2++;
-         v1++;
-         v2++;
-
-      }
-
-   }
-
-/* If an error has occurred, free the array holding the crossings, and 
-   indicate that there are zero corssing. */
-   if( !astOK ) {
-      *cross = (double *) astFree( (void *) *cross );
-      ncross = 0;
-   }
-
-/* Return the answer. */
-   return ncross;
-
-}
-
-int astFindEscape_( const char *text, int *type, int *value, int *nc, int *status ){
-/*
-*+
-*  Name:
-*     astFindEscape
-
-*  Purpose:
-*     Check if a string starts with a graphics escape sequence.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int astFindEscape( const char *text, int *type, int *value, int *nc )
-
-*  Description:
-*     This function returns a flag indiciating if the first character in
-*     the supplied string is the start of a graphics escape sequence. If
-*     so, the type and associated value (if any) of the escape sequence
-*     are returned in "type" and "value", and the number of characters
-*     occupied by the escape sequence is returned in "nc". If the
-*     supplied text string does not begin with an escape sequence, the
-*     number of characters before the first escape sequence is returned in 
-*     "nc" (the length of the string is returned in "nc" if the string
-*     contains no escape sequences).
-*
-*     This function can be used by grf modules which wish to implement
-*     interpretation of escape sequences internally, rather than allowing the
-*     Plot class to do the interpretation.
-
-*  Parameters:
-*     text
-*        Pointer to the string to be checked.
-*     type
-*        Pointer to a location at which to return the type of escape
-*        sequence. Each type is identified by a symbolic constant defined
-*        in grf.h. The returned value is undefined if the supplied text
-*        does not begin with an escape sequence.
-*     value
-*        Pointer to a lcation at which to return the integer value
-*        associated with the escape sequence. All usable values will be
-*        positive. Zero is returned if the escape sequence has no associated 
-*        integer. A value of -1 indicates that the attribute identified by 
-*        "type" should be reset to its "normal" value (as established using 
-*        the astGAttr function, etc). The returned value is undefined if the 
-*        supplied text does not begin with an escape sequence.
-*     nc
-*        Pointer to a location at which to return the number of
-*        characters read by this call. If the text starts with an escape
-*        sequence, the returned value will be the number of characters in
-*        the escape sequence. Otherwise, the returned value will be the
-*        number of characters prior to the first escape sequence, or the 
-*        length of the supplied text if no escape sequence is found.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied text starts with a
-*     graphics escape sequence, and zero is returned otherwise.
-
-*  Escape Sequences:
-*     Escape sequences are introduced into the text string by a percent 
-*     "%" character. The following escape sequences are currently recognised 
-*     ("..." represents a string of one or more decimal digits):
-*
-*       %%      - Print a literal "%" character.
-*
-*       %^...+  - Draw subsequent characters as super-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the super-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*       %^+     - Draw subsequent characters with the normal base-line.
-*
-*       %v...+  - Draw subsequent characters as sub-scripts. The digits
-*                 "..." give the distance from the base-line of "normal" 
-*                 text to the base-line of the sub-script text, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*
-*       %v+     - Draw subsequent characters with the normal base-line
-*                 (equivalent to %^+).
-*
-*       %>...+  - Leave a gap before drawing subsequent characters.
-*                 The digits "..." give the size of the gap, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*
-*       %<...+  - Move backwards before drawing subsequent characters.
-*                 The digits "..." give the size of the movement, scaled 
-*                 so that a value of "100" corresponds to the height of 
-*                 "normal" text.
-*
-*       %s...+  - Change the Size attribute for subsequent characters. The
-*                 digits "..." give the new Size as a fraction of the 
-*                 "normal" Size, scaled so that a value of "100" corresponds 
-*                 to 1.0;
-*
-*       %s+     - Reset the Size attribute to its "normal" value.
-*
-*       %w...+  - Change the Width attribute for subsequent characters. The
-*                 digits "..." give the new width as a fraction of the 
-*                 "normal" Width, scaled so that a value of "100" corresponds 
-*                 to 1.0;
-*
-*       %w+     - Reset the Size attribute to its "normal" value.
-*
-*       %f...+  - Change the Font attribute for subsequent characters. The
-*                 digits "..." give the new Font value.
-*
-*       %f+     - Reset the Font attribute to its "normal" value.
-*
-*       %c...+  - Change the Colour attribute for subsequent characters. The
-*                 digits "..." give the new Colour value.
-*
-*       %c+     - Reset the Colour attribute to its "normal" value.
-*
-*       %t...+  - Change the Style attribute for subsequent characters. The
-*                 digits "..." give the new Style value.
-*
-*       %t+     - Reset the Style attribute to its "normal" value.
-*
-*       %h+     - Remember the current horizontal position (see "%g+")
-*
-*       %g+     - Go to the horizontal position of the previous "%h+" (if any).
-*
-*       %-      - Push the current graphics attribute values onto the top of 
-*                 the stack (see "%+").
-*
-*       %+      - Pop attributes values of the top the stack (see "%-"). If
-*                 the stack is empty, "normal" attribute values are restored.
-
-*  Notes:
-*     -  Zero is returned if an error has already occurred.
-*-
-*/
-
-/* Local Variables: */
-   int result;
-   const char *a;
-   const char *b;
-   int nd;
-   const char *perc;
-
-/* Initialise */
-   result = 0;
-   *type = GRF__ESPER;
-   *value = 0;
-   *nc = 0;
-   perc = NULL;
-
-/* Check inherited status and supplied pointer. */
-   if( !astOK || !text ) return result;
-
-/* Loop round, looking for percent signs. Break out of the loop when a 
-   complete escape sequence has been found and read, leaving the "b" pointer
-   pointing to the first character following the escape sequence. */
-   b = NULL;
-   a = text;
-   while( ( a = strchr( a, '%' ) ) ) {
-      perc = a;
-
-/* Compare the following character to each known escape sequence type. */
-      a++;
-      if( *a == '%') {
-         *type = GRF__ESPER;
-         b = a + 1;
-         break;
-
-      } else if( *a == '^') {
-         *type = GRF__ESSUP;
-
-      } else if( *a == 'v') {
-         *type = GRF__ESSUB;
-
-      } else if( *a == '>') {
-         *type = GRF__ESGAP;
-
-      } else if( *a == '<') {
-         *type = GRF__ESBAC;
-
-      } else if( *a == 's') {
-         *type = GRF__ESSIZ;
-
-      } else if( *a == 'w') {
-         *type = GRF__ESWID;
-
-      } else if( *a == 'f') {
-         *type = GRF__ESFON;
-
-      } else if( *a == 'c') {
-         *type = GRF__ESCOL;
-
-      } else if( *a == 'g') {
-         *type = GRF__ESG;
-
-      } else if( *a == 'h') {
-         *type = GRF__ESH;
-
-      } else if( *a == 't') {
-         *type = GRF__ESSTY;
-
-      } else if( *a == '-') {
-         *type = GRF__ESPSH;
-         b = a + 1;
-         break;
-
-      } else if( *a == '+') {
-         *type = GRF__ESPOP;
-         b = a + 1;
-         break;
-
-/* If the next character is illegal, skip to the next percent sign. */
-      } else {
-         continue;
-      }
-
-/* The escape sequence looks legal so far, so move on to the next
-   character (if any). */
-      if( *(++a) ){
-
-/* If the next character is a "+" sign, the attribute needs to be reset
-   to its "normal" value. Indicate this by returning a value of "-1" (all
-   usable values will be positive). */            
-         if( *a == '+' ) {
-            *value = -1;
-            b = a + 1;
-            break;
-
-/* Otherwise, to be a legal escape sequence, this character must be the
-   first in a sequence of digits, terminated by a "+" sign.*/
-         } else if( (nd = 0, astSscanf( a, "%d%n+", value, &nd ))) {
-            b = a + nd + 1;
-            break;
-         } 
-      }
-   }
-
-/* Was a usable escape sequence found at the start of the supplied text?
-   If so, return a function value of 1 and store the number of characters in
-   the escape sequence. */
-   if( b && perc == text ) {
-      result = 1;
-      *nc = b - perc;
-
-/* Otherwise, return the preset function value of zero. If an escape
-   sequence was found later in the text, return the number of characters
-   prior to the escape sequence. */
-   } else if( b ) {
-      *nc = perc - text;
-
-/* Otherwise, if no escape sequence was found, return the length of the
-   supplied text. */
-   } else {
-      *nc = strlen( text );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int FindMajTicks( AstMapping *map, AstFrame *frame, int axis, 
-                         double refval, double width, double gap, double *cen, int ngood, 
-                         double *data, double **tick_data, int *status ){
-/*
-*  Name:
-*     FindMajTicks
-
-*  Purpose:
-*     Place the major tick marks for a physical coordinate axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int FindMajTicks( AstMapping *map, AstFrame *frame, int axis, 
-*                       double refval, double width, double gap, double *cen, int ngood, 
-*                       double *data, double **tick_data )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The caller supplies an array of axis values (non-normalized), sorted 
-*     into ascending order (with any bad values at the end), together with 
-*     the gap size for the axis. The array of axis values is assumed to cover 
-*     the entire range which the axis can take within the plotting zone. The
-*     first tick mark is placed just below the smallest axis value, at a
-*     position which is an integral number of gaps away from the value
-*     supplied in "cen" (if a value of AST__BAD is supplied for "cen" then 
-*     "cen = 0.0" is assumed). Notionally, tick marks are then placed at
-*     intervals given by "gap" all the way upto, and just beyond, the
-*     largest axis value. However, it could be that large sections of the 
-*     axis are not actually present within the plotting zone. For instance,
-*     an RA axis covering the two hour range from 23h to 1h (centred on
-*     0h), will have some values at zero and some at 23.999.., but there
-*     will be a large range inbetween these limits which is not represented
-*     in the plotting area (i.e. the 22h range from 1h to 23h centred on
-*     12h). For this reason, tick marks are removed if there are no axis
-*     values inbetween the tick mark and either of its neighbours. However,
-*     small "holes" in the axis coverage are allowed, and ticks marks are 
-*     returned covering such small holes. Extra tick marks are also placed 
-*     at each end of the range to guard against the supplied array of axis 
-*     values not entirely covering the range of axis values in the plotting 
-*     area.
-*
-*     For SkyFrames, positions which have latitude values outside the
-*     normal ranges are ignored. Longitude ranges are not checked to
-*     avoid problems with CAR projections.
-*
-*     The returned tick mark values are placed into their primary domain
-*     using the Norm1 method, but are NOT normalised using the astNorm
-*     method for the supplied Frame. Duplicate tick marks values are
-*     removed from the returned list.
-
-*  Parameters:
-*     map 
-*        Mapping from the Plot Base Frame to Plot Current Frame.
-*     frame
-*        Pointer to the Frame.
-*     axis 
-*        Zero-based index of the axis being used.
-*     refval
-*        Value to use for the other axis (index [1-axis]) when placing
-*        the tick mark values into their primary domain.
-*     width
-*        Range of used values on the other axis (index [1-axis]).
-*     gap
-*        The supplied value for the gaps between ticks on the axis.
-*     cen
-*        Pointer to the supplied axis value at which to put a central tick. 
-*        Other ticks will be placed evenly on either side of this tick. If 
-*        AST__BAD is provided, a value will be used which would put a tick 
-*        at an axis value of zero. The used value is returned.
-*     ngood
-*        The number of good values in the array pointer to by "data" (i.e.
-*        values not equal to AST__BAD).
-*     data
-*        A pointer to an array holding sorted axis values (non-normalized) 
-*        covering the entire plotting area.
-*     tick_data
-*        A pointer to a place at which to store a pointer to an array
-*        holding the returned tick mark values for the axis.
-
-*  Returned Value:
-*     The number of major tick mark values stored in the array pointer to
-*     by "*tick_data".
-
-*  Notes:
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned in "tick_data", and zero 
-*     is returned for the function value.
-*/
-
-/* Local Variables: */
-   double *r;         /* Pointer to next tick value to be read */
-   double *ticks;     /* Pointer to the axis values at the major tick marks */
-   double *w;         /* Pointer to last tick value to be written */
-   double bot;        /* Lowest axis value to be displayed */
-   double centre;     /* The axis value at the first tick mark */
-   double delta;      /* A safe distance from an axis limit */
-   double f;          /* The nearest acceptable tick mark index */
-   double tmp;        /* Temporary storage */
-   double top;        /* Highest axis value to be displayed */
-   int inc;           /* This times increase in nticks */
-   int k;             /* Tick mark index */
-   int linc;          /* Last times increase in nticks */
-   int lnfill;        /* Last used value for nfill */
-   int nfill;         /* No of tick marks to extend by at edges of coverage */
-   int nsame;         /* Number of equal inc values there have been */
-   int nticks;        /* Number of major tick marks used */
-   int ntnew;         /* This times new value of nticks */
-   int use_nfill;     /* nfill value which started this run of equal inc values */
-
-/* Initialise the returned pointer. */
-   *tick_data = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   nsame = 0;
-   use_nfill = 0;
-
-/* Decide where to put the first major tick. Use any value supplied by
-   the caller. Otherwise put it an integral number of gaps away from the
-   origin. This would result in the origin being at a major tick mark. */
-   if( cen && *cen != AST__BAD ) {
-      centre = *cen;
-   } else {
-      centre = gap*floor( 0.5 + data[ 0 ]/gap );
-      if( cen ) *cen = centre;
-   }
-
-/* Find the number of candidate tick marks assuming an nfill value of 0. */
-   nfill = 0;
-   nticks = FindMajTicks2( nfill, gap, centre, ngood, data, &ticks, status );
-
-/* Loop round increasing the nfill value until an unreasonably large value 
-   of nfill is reached. The loop will exit early via a break statement when 
-   all small holes in the axis coverage are filled in. */
-   lnfill = nfill;
-   linc = -100000;
-   while( nfill < 100 && astOK ){
-
-/* Increment the number of ticks added as "padding" at the edges of any
-   gaps in the coverage of axis values. */
-      nfill++;
-
-/* Form a new set of tick mark values using this new nfill value */
-      ticks = (double *) astFree( (void *) ticks );
-      ntnew = FindMajTicks2( nfill, gap, centre, ngood, data, &ticks, status );
-
-/* We need to know if the rate of increase of nticks has settled down to
-   a constant value. Inititially increasing nfill will cause the total
-   number of ticks (nticks) to increase rapidly. But this rate of
-   increase will get less as any small gaps in axis coverage are filled in.
-   We break out of the while loop when the rate of increase has settled
-   down to a constant value (indicating that only very large holes are left
-   in the axis coverage). Find the increase in the number of ticks caused by 
-   the increase in the nfill value made in this loop. If this increase is the 
-   same as the increase caused by the previous loop, increment the number of 
-   equal increases there have been. If the increase is different to last time, 
-   reset the number of equal increases to zero. */
-      inc = ntnew - nticks;
-      if( inc == linc ) {
-         nsame++;
-      } else {
-         nsame = 0;
-         use_nfill = nfill;
-      }
-
-/* If the past 3 increases in nfill has not caused any change in the rate
-   of increase of nticks, then re-create the ticks for the value of nfill
-   which started the current run of equal increment values, and leave the 
-   loop. */
-      if( nsame == 3 ) {
-         ticks = (double *) astFree( (void *) ticks );
-         nticks = FindMajTicks2( use_nfill, gap, centre, ngood, data, &ticks, status );
-         break;         
-      }
-
-/* Save this times values for use in the next loop. */
-      linc = inc;
-      nticks = ntnew;
-   }
-
-/* Remove ticks which are not within the axis ranges to be displayed.
-   Ticks which are very close to the limit are moved to a safe (but
-   visually negligable) distance away from the limit). */
-   bot = astGetBottom( frame, axis );
-   top = astGetTop( frame, axis );
-   if( bot > top ) {
-      tmp = top;
-      top = bot;
-      bot = tmp;
-   }      
-   delta = 0.05*gap;
-   r = ticks;
-   for( k = 0; k < nticks; k++ ){
-      if( *r != AST__BAD ) {
-         if( fabs( *r - bot ) < delta ) {
-            *r = bot + delta;
-         } else if( fabs( *r - top ) < delta ) {
-            *r = top - delta;
-         } else if( *r < bot || *r > top ) {
-            *r = AST__BAD;
-         }
-      }
-      r++;
-   }
-
-/* Use the Mapping to place each tick mark value in its primary domain.
-   This is a sort of normalization, similar but different to that performed
-   by the astNorm method. */
-   Norm1( map, axis, nticks, ticks, refval, width, status ); 
-
-/* Check for success. */
-   if( astOK ){
-
-/* Ensure that all ticks marks are offset from the "centre" value by an 
-   integer multiple of the gap size. This is done by changing each tick
-   value to the closest acceptable value. Also ensure that values close to
-   zero (i.e. less than 1E-10 of the gap size) are set exactly to zero. */
-      r = ticks;
-      for( k = 0; k < nticks; k++ ){
-         if( *r != AST__BAD ) {
-            f = floor( 0.5 + ( *r - centre )/gap );
-            *r = f*gap + centre;
-            if( fabs( *r ) < 1.0E-10*gap ) *r = 0.0;
-            r++;
-         } else {
-            r++;
-         }
-      }
-
-/* Sort the tick values into increasing order. */
-      qsort( (void *) ticks, (size_t) nticks, sizeof(double), Compared );
-
-/* Remove any duplicate or BAD tick values by shuffling the higher unique 
-   values down to over-write them. We subtract the centre value of both
-   tick values before comparing them for equality in order to avoid 
-   unnecessarily removing tick marks in high precsion data. */
-      r = ticks + 1;
-      w = ticks;
-      for( k = 1; k < nticks && astOK; k++ ){
-         if( *r != AST__BAD && !EQUAL( *r-centre, *w-centre ) ){
-            w++;
-            *w = *r;
-         }
-         r++;
-      }
-
-/* Modify the number of ticks to exclude the duplicate ones. */
-      nticks = (int) ( w - ticks ) + 1;
-
-   }
-
-/* If an error has occurred, free the memory holding the major tick mark
-   values, and indicate that zero tick marks have been found. */
-   if( !astOK ){
-      ticks = (double *) astFree( (void *) ticks );
-      nticks = 0;
-   }
-
-/* Store the pointer to the major tick mark values. */
-   *tick_data = ticks;
-
-/* Return the number of major ticks. */
-   return nticks;
-
-}
-static int FindMajTicks2( int nfill, double gap, double centre, int ngood, 
-                          double *data, double **tick_data, int *status ){
-/*
-*  Name:
-*     FindMajTicks2
-
-*  Purpose:
-*     Find candidate major tick marks for FindMajTicks.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int FindMajTicks2( int nfill, double gap, double centre, int ngood, 
-*                        double *data, double **tick_data, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     A service routine for function FindMajTicks.
-
-*  Parameters:
-*     nfill 
-*        Number of tick marks to extend by at edges of coverage 
-*     gap
-*        The supplied value for the gaps between ticks on the axis.
-*     centre
-*        The supplied axis value at which to put a central tick. 
-*     ngood
-*        The number of good values in the array pointer to by "data" (i.e.
-*        values not equal to AST__BAD).
-*     data
-*        A pointer to an array holding sorted axis values covering the
-*        entire plotting area.
-*     tick_data
-*        A pointer to a place at which to store a pointer to an array
-*        holding the returned tick mark values for the axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of major tick mark values stored in the array pointer to
-*     by "*tick_data".
-
-*  Notes:
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned in "tick_data", and zero 
-*     is returned for the function value.
-*/
-
-/* Local Variables: */
-   double *ticks;     /* Pointer to the axis values at the major tick marks */
-   int i;             /* Index of current axis value */
-   int j;             /* Index of filled in tick */
-   int k;             /* Tick mark index */
-   int klast;         /* Index of the previous tick mark */
-   int nticks;        /* Number of major tick marks used */
-
-/* Initialise the returned pointer. */
-   *tick_data = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   nticks = 0;
-
-/* Reserve memory to hold a reasonable number of tick mark axis values.
-   This memory is later extended as necessary. */
-   ticks = (double *) astMalloc( sizeof(double)*( 6*nfill + 14 ) );
-
-/* Check that the pointer can be used. */
-   if( astOK ){
-
-/* Put the first tick marks just below the lowest axis value (in case
-   the grid did not sample the entire range of the axis). */
-      k = floor( ( data[ 0 ] - centre )/gap );
-
-      for ( i = 0; i < nfill; i++ ){
-         ticks[ i ] = gap*(double)( k - nfill + i ) + centre;
-      }
-      ticks[ nfill ] = gap*(double)( k ) + centre;
-
-/* Initialise the number of major tick marks found so far. */
-      nticks = nfill + 1;
-
-/* Loop round each of the remaining good ordered axis values. */
-      klast = k;
-      for( i = 1; i < ngood && astOK; i++ ) {
-
-/* Find the tick marks enclosing the axis value. The tick mark placed at 
-   "centre" is called tick mark zero, and tick marks are indexed (positive 
-   or negative) from an origin at "centre". Find the index of the more 
-   negative of the two tick marks enclosing the axis value. */
-         k = floor( ( data[ i ] - centre )/gap );
-
-/* Ensure that the tick marks enclosing the current axis value are used.
-   Some extra tick marks are used at the start and end of any gaps in
-   the axis coverage. This is done to "fill in" small holes caused by the
-   grid of physical coordinate values not completely covering the
-   plotting area. Large holes, such as occur on an RA axis covering the 2 
-   hour range from 23 hours to 1 hour are left without any tick marks in 
-   them (the "hole" in this case is the 22 hours range from 1 hour to 23 
-   hours). */
-         for( j = 0; j < nfill + 1; j++ ){
-            if( k - klast > nfill + 2 - j ) {
-               ticks = (double *) astGrow( ticks, nticks + 1, sizeof( double ) );
-               if( astOK ) ticks[ nticks++ ] = 
-                                 gap*(double)( klast + nfill + 1 - j ) + centre;
-            }
-            if( k - klast > nfill - j ) {
-               ticks = (double *) astGrow( ticks, nticks + 1, sizeof( double ) );
-               if( astOK ) ticks[ nticks++ ] = 
-                                 gap*(double)( k - nfill + j ) + centre;
-            }            
-         }
-   
-/* Save the index of the current tick mark. */
-         klast = k;
-   
-      }
-
-/* Add extra tick marks beyond the end in case the grid did not sample
-   the entire range of the axis. */
-      ticks = (double *) astGrow( ticks, nticks + nfill + 1, sizeof( double ) );
-      for( i = 0; i < nfill && astOK; i++ ){
-         ticks[ nticks++ ] = gap*(double)( klast + i + 1 ) + centre;
-      }
-
-   }
-  
-/* If an error has occurred, free the memory holding the major tick mark
-   values, and indicate that zero tick marks have been found. */
-   if( !astOK ){
-      ticks = (double *) astFree( (void *) ticks );
-      nticks = 0;
-   }
-
-/* Store the pointer to the major tick mark values. */
-   *tick_data = ticks;
-
-/* Return the number of major ticks. */
-   return nticks;
-
-}
-
-static int FindDPTZ( AstFrame *fr, int axis, const char *fmt, 
-                      const char *text, int *ndp, int *ntz, int *status ) {
-/*
-*  Name:
-*     FindDPTZ
-
-*  Purpose:
-*     Find the number of decimal places and trailing zeros in a label.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int FindDPTZ( AstFrame *fr, int axis, const char *fmt, 
-*                   const char *text, int *ndp, int *ntz, int *status ) 
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied label is split into fields using the astFields method of
-*     the supplied frame. The number of decimal places in the last
-*     field is returned in *ndp, and the total number of trailing zeros
-*     (excluding exponents) is returned in *ntz.
-
-*  Parameters:
-*     fr
-*        The frame.
-*     axis
-*        The axis index to which the label applies.
-*     fmt
-*        The format string used to format the label.
-*     text
-*        The text of the label.
-*     ndp
-*        Pointer to an int in which to return the number of decimal
-*        places in the final field.
-*     ntz
-*        Pointer to an int in which to return the number of trailing zeros.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if and only if a non-zero digit is found in any field.
-
-*/
-
-/* Local Constants: */
-#define MAXFLD 10
-
-/* Local Variables: */
-   char *fields[ MAXFLD ];
-   const char *a;
-   const char *dot;
-   const char *ff; 
-   double junk;
-   int fnc;
-   int i;
-   int j;               
-   int l;
-   int mxnd;
-   int nc[ MAXFLD ];
-   int nf;
-   int result;
-
-/* Initialise */
-   *ndp = 0;
-   *ntz = 0;
-   result = 0;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Split the label up into fields. */
-   nf = astFields( fr, axis, fmt, text, MAXFLD, fields, nc, &junk );
-   if( nf > 0 ) {
-
-/* Search the last fields (assumed to be the least significant) for a
-   decimal point. */
-      ff = fields[ nf - 1 ];
-      fnc = nc[ nf - 1 ];
-      dot = strchr( ff, '.' );
-      if( dot && ( ff - dot >= fnc ) ) dot = NULL;
-
-/* Find the number of digits following the decimal point. */
-      if( dot ) {
-         *ndp = strspn( dot + 1, "0123456789" );
-         mxnd = fnc - ( dot - ff ) - 1;
-         if( *ndp > mxnd ) *ndp =  mxnd;
-      } else {
-         *ndp = 0;
-      }      
-
-/* Loop through all the fields, from least significant to most significant,
-   counting the number of trailing zeros. */
-      *ntz = 0;
-      for( i = nf - 1; i >= 0; i-- ) {
-         l = strspn( fields[ i ], "-+0123456789." );
-         if( l > nc[ i ] ) l = nc[ i ];
-         a = fields[ i ] + l - 1;
-         for( j = l - 1; j >= 0; j--,a-- ){
-            if( *a == '0' ) {
-               (*ntz)++;
-            } else if( isdigit( *a ) ) {
-               result = 1;
-               break;
-            }
-         }
-         if( j >= 0 ) break;      
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-/* Undefine local constants: */
-#undef MAXFLD
-   
-}
-
-static int FindString( int n, const char *list[], const char *test, 
-                       const char *text, const char *method, 
-                       const char *class, int *status ){
-/*
-*  Name:
-*     FindString
-
-*  Purpose:
-*     Find a given string within an array of character strings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int FindString( int n, const char *list[], const char *test, 
-*                     const char *text, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function identifies a supplied string within a supplied
-*     array of valid strings, and returns the index of the string within
-*     the array. The test option may not be abbreviated, but case is
-*     insignificant.
-
-*  Parameters:
-*     n
-*        The number of strings in the array pointed to be "list".
-*     list
-*        A pointer to an array of legal character strings.
-*     test
-*        A candidate string.
-*     text
-*        A string giving a description of the object, parameter,
-*        attribute, etc, to which the test value refers.
-*        This is only for use in constructing error messages. It should
-*        start with a lower case letter.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the identified string within the supplied array, starting
-*     at zero.
-
-*  Notes:
-*     -  A value of -1 is returned if an error has already occurred, or
-*     if this function should fail for any reason (for instance if the
-*     supplied option is not specified in the supplied list). 
-
-*/
-
-/* Local Variables: */
-   int ret;                /* The returned index */
-
-/* Check global status. */
-   if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
-   the loop when a match is found. */
-   for( ret = 0; ret < n; ret++ ) {
-      if( !Ustrcmp( test, list[ ret ], status ) ) break;
-   }
-
-/* Report an error if the supplied test string does not match any element
-   in the supplied list. */
-   if( ret >= n ) {
-      astError( AST__OPT, "%s(%s): Illegal value '%s' supplied for %s.", status,
-                method, class, test, text );
-      ret = -1;
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static char *FindWord( char *ptr, const char *d, const char **p, int *status ) {
-/*
-*  Name:
-*     FindWord
-
-*  Purpose:
-*     Return a copy of the next word in a supplied string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     char *FindWord( char *ptr, const char *d, const char **p, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function locates the start and end of the first word in the
-*     string pointed to by *p, and returns a copy of the word. The pointer
-*     *p is modified to point to the start of the following word (if any).
-*     The characters which delimit words are supplied in string "d".
-
-*  Parameters:
-*     ptr
-*        A pointer to a character string in which to store the returned 
-*        word. The memory holding this string should have been allocated
-*        using one of the functions in the AST "memory" module. The memory
-*        area will be modified in size to fit the returned word. A NULL
-*        pointer may be supplied if no memory has yet been allocated.
-*        Any memory pointed to by ptr is freed if a NULL pointer is
-*        returned by this function (i.e. if no word is found).
-*     d
-*        A string holding the characters which are to be used as word
-*        delimiters.
-*     p
-*        The address of a character string pointer. On entry, this pointer
-*        identifies the start of the string to be searched. On exit, it is
-*        modified to point to the start of the following word. It is
-*        returned NULL if there are no more words.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated character string holding the 
-*     next word, or NULL if no word could be found. 
-
-*/
-
-/* Local Variables: */
-   const char *a, *b, *c;
-   char *ret;
-   int nc;   
-
-/* Free any allocated memory and return if any of the supplied pointers 
-   (except ptr) is NULL, or if an error has occurred. */
-   if( !astOK || !d || !p || !*p ) {
-      (void) astFree( (void *) ptr );
-      return NULL;
-   }
-
-/* Get a pointer to the first character which is not in "d". Terminate
-   the loop if a null character is encountered. */
-   a = *p;
-   while( *a && strchr( d, (int) *a ) ) a++;
-
-/* Get a pointer to the next character which is in "d". Terminate
-   the loop if a null character is encountered. */
-   b = a;
-   while( *b && !strchr( d, (int) *b ) ) b++;
-
-/* Get a pointer to the next character which is not in "d". Terminate
-   the loop if a null character is encountered. */
-   c = b;
-   while( *c && strchr( d, (int) *c ) ) c++;
-
-/* Adjust the supplied pointer so that it points to the start of the next
-   word. */
-   if( *c ){
-      *p = c;
-   } else {
-      *p = NULL;
-   }
-
-/* Get a null-terminated copy of the word between a and b. */
-   nc = b - a;
-   if( nc > 0 ) {
-      ret = (char *) astStore( (void *) ptr, (void *) a, (size_t) (nc + 1) );
-      ret[ nc ] = 0;
-   } else {
-      ret = astFree( (void *) ptr );
-   }
-
-   return ret;
-}
-
-static const char *SplitValue( AstPlot *this, const char *value, int axis,
-                               int *split, int *status ) {
-/*
-*  Name:
-*     FormatValue
-
-*  Purpose:
-*     Format a coordinate value for a Frame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     const char *SplitValue( AstPlot *this, const char *value, 
-*                                    int axis, int *split )
-
-*  Class Membership:
-*     Plot member function 
-
-*  Description:
-*     This function splits long formatted values (such as the date/time 
-*     format produced by the TimeFrame class) if possible onto two lines
-*     by inclusion of Plot escape sequences.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     value
-*        The formatted coordinate value.
-*     axis
-*        Indicates whether or not short lines should be split by
-*        including a blank first line. If zero, and if "*split" is non-zero, 
-*        then short lines are put onto the second line,and the first line
-*        is blank.
-*     split
-*        Pointer to an integer that controls behaviour:
-*
-*        0 - Split the line if it is too long, and return a value of +1
-*            in *split.
-*        1 - Split the line even if it does not need splitting, making
-*            the first line blank and the second line containing all the 
-*            supplied text (*split is unchanged on exit).
-
-*  Returned Value:
-*     A pointer to a static buffer containing a null-terminated string 
-*     holding the (possibly split) formatted value. This will be a copy of
-*     the supplied pointer if the string does not need to be split.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS
-   char *d;    
-   const char *result;    
-   float rsp;         
-   int aft_end;
-   int aft_start;
-   int bef_end;
-   int bef_start;
-   int i;
-   int id;
-   int idmin;
-   int imin;
-   int l;
-   int naft;
-   int nbef;
-   int nlong;
-   int nshort;
-   int nsp;       
-
-/* Initialise */
-   result = value;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Do nothing more if the formatted value already contains graphical
-   escape sequences, or if graphical escapes sequences are not being
-   interpreted. */
-   if( value && astGetEscape( this ) && !HasEscapes( value, status ) ) {
-
-/* Attempt to find a space close to the centre of the formatted string. */
-      l = strlen( value );
-      idmin = 2*l;
-      imin = -1;
-      for( i = 0; i < l; i++ ) {
-         if( isspace( value[ i ] ) ) {
-            id = abs( i - l/2 );
-            if( id < idmin ) {
-               idmin = id;
-               imin = i;
-            }
-         }
-      }
-
-/* We split the line if previous lines have been split (i.e. if *split was 
-   non-zero on entry) or if this line is long AND it contains a space. This
-   means that a sequence of long labels will not be split unless they contain
-   spaces. */
-      if( *split || ( l > 9 && imin != -1 ) ) {
-         *split = 1;
-
-/* Initialse the pointer into the returned buffer at which the next
-   character will be placed. */
-         d = splitvalue_buff;
-
-/* If no spaces were found... */
-         if( imin == -1 ) {
-
-/*  If axis is zero, we add a blank first line. */
-            if( axis == 0 ) {
-
-/* Fill the first line with spaces. */
-               for( i = 0; i < l; i++ ) *(d++) = ' ';
-
-/* Add an escape sequence that moves down by one character height. */
-               d += sprintf( d, "%%v170+" );
-            }
-
-/* Add the whole of the supplied text. */
-            for( i = 0; i < l; i++ ) *(d++) = value[ i ];
-   
-/* If a space was found... */
-         } else {
-
-/* Find the first and last non-blank characters before the mid-space. */
-            bef_start = -1;
-            bef_end = -1;
-            for( i = 0; i < imin; i++ ) {
-               if( !isspace( value[ i ] ) ) {
-                  if( bef_start == -1 ) bef_start = i;
-                  bef_end = i;
-               }
-            }
-
-/* Find the first and last non-blank characters after the mid-space. */
-            aft_start = -1;
-            aft_end = -1;
-            for( i = imin + 1; i < l; i++ ) {
-               if( !isspace( value[ i ] ) ) {
-                  if( aft_start == -1 ) aft_start = i;
-                  aft_end = i;
-               }
-            }
-
-/* How many significant characters before and after the space? */
-            nbef = bef_end - bef_start + 1;
-            naft = aft_end - aft_start + 1;
-
-/* Get the lengths of the longer and shorter line. */
-            if( nbef > naft ) {
-               nlong = nbef;
-               nshort = naft;
-            } else {
-               nlong = naft;
-               nshort = nbef;
-            }
-
-/* Find the fractional number of spaces before the significant text of the 
-   shorter line.*/
-            rsp = 0.5*( nlong - nshort + 1 );
-  
-/* If the top line is the shorter line, put some spaces in at the start. */
-            if( nbef < naft ) {
-               nsp = (int) rsp;
-               for( i = 0; i < nsp; i++ ) *(d++) = ' ';
-            }
-
-/* Add the significant text from the top line. */
-            for( i = bef_start; i <= bef_end; i++ ) *(d++) = value[ i ];
-
-/* Add an escape sequence that moves down by one character height. */
-            d += sprintf( d, "%%v100+" );
-
-
-/* Add an escape sequence that moves to the left by the required amount. */
-            d += sprintf( d, "%%<%d+", (int) ( 60.0*( (float) nlong - rsp )) );
-
-/* Add the significant text from the bottom line. */
-            for( i = aft_start; i <= aft_end; i++ ) *(d++) = value[ i ];
-
-         }
-
-/* Terminate it. */
-         *d = 0;         
-
-/* Return a pointer to the buffer. */
-         result = splitvalue_buff;         
-      }
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrameSet *Fset2D( AstFrameSet *fset, int ifrm, int *status ) {
-/*
-*  Name:
-*     Fset2D
-
-*  Purpose:
-*     Create a FrameSet with no more than 2 dimensions for a given Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*      AstFrameSet *Fset2D( AstFrameSet *fset, int ifrm, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function checks a specified Frame in the supplied FrameSet.
-*     If the Frame has more than 2 dimensions, a new Frame is added to 
-*     the FrameSet containing just the first two axes of the specified
-*     Frame. A PermMap is used to connect this Frame to the specified 
-*     Frame, which supplied bad values for any missing axes. If the
-*     specified Frame is the base Frame in the supplied FrameSet, then the
-*     new Frame becomes the base Frame in the returned FrameSet. Like-wise,
-*     if the specified Frame is the current Frame, then the new Frame
-*     will be the current Frame in the returned FrameSet.
-*     
-*     If the specified Frame does not have more than 2 axes, then a clone
-*     of the FrameSet pointer is returned, otherwise the returned pointer
-*     points to a copy of the supplied FrameSet with the new 2-D Frame
-*     added.
-
-*  Parameters:
-*     fset
-*        Pointer to the FrameSet.
-*     ifrm
-*        The index of the Frame to check. This should be AST__BASE or
-*        AST_CURRENT.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a FrameSet in which the Frame with index given by ifrm
-*     has no more than 2 axes.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstFrame *newfrm;
-   AstFrameSet *ret;
-   AstPermMap *map;
-   double zero;
-   int *inperm;
-   int axes[2];
-   int i;
-   int ic;
-   int nax;
-
-/* Check the inherited status. */
-   if( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   map = NULL;
-
-/* Get a pointer to the requested Frame in the supplied FrameSet. */
-   frm = astGetFrame( fset, ifrm );
-
-/* See how many dimensions the specified Frame of the supplied FrameSet 
-   has. */
-   nax = astGetNaxes( frm );
-
-/* If it is more than 2-dimensionbal, create a 2D Frame by picking 
-   axes 1 and 2 from the original Frame. */
-   if( nax > 2 ) {
-      axes[ 0 ] = 0;
-      axes[ 1 ] = 1;
-      newfrm = astPickAxes( frm, 2, axes, NULL );
-
-/* Create a PermMap to describe the mapping between the two Frames. 
-   Use zero as the value for unknown axes (the optional mapping which
-   can be returned by astPickAxes uses AST__BAD for unknown axes). */
-      inperm = (int *) astMalloc( sizeof(int)*(size_t) nax );
-      if( astOK ){
-         inperm[ 0 ] = 0;
-         inperm[ 1 ] = 1;
-         for( i = 2; i < nax; i++ ) inperm[ i ] = -1;
-         zero = 0.0;
-         map = astPermMap( nax, inperm, 2, axes, &zero, "", status );
-         inperm = (int *) astFree( (void *) inperm );
-      }
-
-/* Get a copy of the supplied FrameSet. */
-      ret = astCopy( fset );
-
-/* Add the new Frame to the FrameSet (it becomes the current Frame). */
-      ic = astGetCurrent( ret );
-      astAddFrame( ret, ifrm, map, newfrm );
-      newfrm = astAnnul( newfrm );
-
-/* If the new Frame was derived from the base frame, set the new base
-   Frame, and re-instate the original current Frame */
-      if( ifrm == AST__BASE ){
-         astSetBase( ret, astGetCurrent( ret ) );      
-         astSetCurrent( ret, ic );
-      }
-
-/* If the specified Frame in the supplied FrameSet is 2-dimensional, just
-   return a clone of it. */
-   } else {
-      ret = astClone( fset );
-   }
-
-/* Annul the pointer to the original Frame. */
-   frm = astAnnul( frm );
-
-   return ret;
-
-}
-
-static int FullForm( const char *list, const char *test, const char *text,
-                     const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     FullForm
-
-*  Purpose:
-*     Identify the full form of an option string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int FullForm( const char *list, const char *test, const char *text,
-*                   const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function identifies a supplied test option within a supplied
-*     list of valid options, and returns the index of the option within
-*     the list. The test option may be abbreviated, and case is
-*     insignificant.
-
-*  Parameters:
-*     list
-*        A list of space separated option strings.
-*     test
-*        A candidate option string.
-*     text
-*        A string giving the context in which the supplied test option
-*        was supplied. For instance, this may be an attribute setting string.
-*        This is only for use in constructing error messages.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the identified option within the supplied list, starting
-*     at zero.
-
-*  Notes:
-*     -  A value of -1 is returned if an error has already occurred, or
-*     if this function should fail for any reason (for instance if the
-*     supplied option is not uniquely specified in the supplied list). 
-
-*/
-
-/* Local Variables: */
-   char *option;           /* Pointer to a copy of the next option */
-   const char *p;          /* Pointer to the start of the next word */
-   int i;                  /* Current option index */
-   int len;                /* Length of supplied option */
-   int nmatch;             /* Number of matching options */
-   int ret;                /* The returned index */
-
-/* Initialise the answer to indicate that the option has not been
-   uniquely identified. */
-   ret = -1;
-
-/* Check global status. */
-   if( !astOK ) return ret;
-
-/* Save the number of characters in the supplied test option (excluding
-   trailing spaces). */
-   len = ChrLen( test, status );
-
-/* Compare the supplied test option against each of the known options in 
-   turn. Count the number of matches. */
-   nmatch = 0;
-   p = list;
-   option = FindWord( NULL, " ", &p, status );
-   i = 0;
-   while( option ){
-
-/* If the test string and the current option are identical (including
-   length). use the current option. */
-
-/* If every character in the supplied label matches the corresponding
-   character in the current test label we have a match. Increment the 
-   number of matches and save the current item index. If the test string 
-   and the current option are identical (including length), use the 
-   current option. */
-
-      if( !Ustrncmp( test, option, len, status ) ) {
-         ret = i;
-         if( ChrLen( option, status ) == len ) {
-            nmatch = 1;
-            option = astFree( option );
-            break;
-         } else {
-            nmatch++;
-         }
-      }
-
-/* Get a pointer to the next option. */
-      option = FindWord( option, " ", &p, status );
-      i++;
-   }
-
-/* Report an error if no match was found, and return -1. */
-   if( !nmatch ){
-      astError( AST__OPT, "%s(%s): Option '%.*s' is unknown in '%.*s'.", status,
-                method, class, len, test, ChrLen( text, status ), text );
-      ret = -1;
-
-/* Report an error if the label was ambiguous, and return -1. */
-   } else if( nmatch > 1 ){
-      astError( AST__OPT, "%s(%s): Option '%.*s' is ambiguous in '%.*s'.", status,
-                method, class, len, test, ChrLen( text, status ), text );
-      ret = -1;
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static void GAttr( AstPlot *this, int attr, double value, double *old_value, 
-                   int prim, const char *method, const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GAttr
-
-*  Purpose:
-*     Call the GAttr Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GAttr( AstPlot *this, int attr, double value, double *old_value, 
-*                 int prim, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GAttr grf function to enquire or set a 
-*     graphics attribute value. It either calls the version registered using 
-*     astGrfSet, or the version in the linked grf module. The linked version 
-*     is used if the Grf attribute is zero, or if no function has been 
-*     registered for GAttr using astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     attr
-*        An integer value identifying the required attribute. The
-*        following symbolic values are defined in grf.h:
-*
-*           GRF__STYLE  - Line style.
-*           GRF__WIDTH  - Line width.
-*           GRF__SIZE   - Character and marker size scale factor.
-*           GRF__FONT   - Character font.
-*           GRF__COLOUR - Colour index.
-*     value 
-*        A new value to store for the attribute. If this is AST__BAD
-*        no value is stored.
-*     old_value 
-*        A pointer to a double in which to return the attribute value.
-*        If this is NULL, no value is returned.
-*     prim
-*        The sort of graphics primitive to be drawn with the new attribute.
-*        Identified by the following values defined in grf.h:
-*           GRF__LINE
-*           GRF__MARK
-*           GRF__TEXT
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int grf_status;          /* Status retruned from Grf function */
-
-/* Check the global error status. Also return if there is nothing to do. */
-   if ( !astOK || ( !old_value && value == AST__BAD ) ) return;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   if( astGetGrf( this ) && this->grffun[ AST__GATTR ] ) {
-      grf_status = ( *( this->GAttr ) )( this, attr, value, old_value, prim, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGAttr( attr, value, old_value, prim );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGAttr. ", status, method, 
-                class );
-   }
-
-}
-
-static AstKeyMap *GetGrfContext( AstPlot *this, int *status ){
-/*
-*++
-*  Name:
-c     astGetGrfContext
-f     AST_GETGRFCONTEXT
-
-*  Purpose:
-*     Return the KeyMap that describes a Plot's graphics context.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     AstKeyMap *astGetGrfContext( AstPlot *this )
-f     RESULT = AST_GETGRFCONTEXT( THIS, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     returns a reference to a KeyMap that will be passed to any drawing
-c     functions registered using astGrfSet.
-f     routines registered using AST_GRFSET.
-*     This KeyMap can be used by an application to pass information to
-c     the drawing functions
-f     the drawing routines 
-*     about the context in which they are being called. The contents of
-*     the KeyMap are never accessed byt the Plot class itself.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetGrfContext()
-f     AST_GETGRFCONTEXT = INTEGER
-*        A pointer to the graphics context KeyMap. The returned pointer
-*        should be annulled when it is no longer needed.
-
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Ensure that a grfcon KeyMap exists. */
-   (void) astGrfConID(this);
-
-/* Return a cloned pointer to the KeyMap. */
-   return astClone( this->grfcontext );
-}
-
-AstKeyMap *astGrfConID_( AstPlot *this, int *status ) {
-/*
-*+
-*
-*  Name:
-*     astGrfConID
-
-*  Purpose:
-*     Ensure a GrfContext KeyMap exists and return an ID for it.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstKeyMap *astGrfConID( AstPlot *this ) 
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function creates a GrfContext KeyMap if the Plot does not
-*     currently have one, and returns an ID for it.
-
-*  Parameters:
-*     this
-*        The Plot.
-
-*  Returned Value:
-*     ID for the GrfContext KeyMap.
-
-*-
-*/
-   if( !this->grfcontext ) {
-      this->grfcontext = astKeyMap("", status );
-      this->grfcontextID = astMakeId( astClone( this->grfcontext ) );
-      astExempt( this->grfcontextID );
-   }
-   return this->grfcontextID;
-}
-
-static void GScales( AstPlot *this, float *alpha, float *beta,
-                      const char *method, const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GScales
-
-*  Purpose:
-*     Call the GScales Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GScales( AstPlot *this, float *alpha, float *beta,
-*                    const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GScales grf function, either calling the 
-*     version registered using astGrfSet, or the version in the linked grf 
-*     module. The linked version is used if the Grf attribute is zero, or if 
-*     no function has been registered for GScales using astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     alpha
-*        A pointer to the location at which to return the scale for the
-*        X axis (i.e. Xnorm = alpha*Xworld).
-*     beta
-*        A pointer to the location at which to return the scale for the
-*        Y axis (i.e. Ynorm = beta*Yworld).
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int grf_status;          /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   if( astGetGrf( this ) && this->grffun[ AST__GSCALES ] ) {
-      grf_status = ( *( this->GScales ) )( this, alpha, beta, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGScales( alpha, beta );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Check neither value is zero. */
-   if( grf_status && ( *alpha == 0.0 || *beta == 0.0 ) ) {
-      astError( AST__GRFER, "astGScales: Returned axis scales are %g and %g " 
-                "but zero is illegal!", status, *alpha, *beta );
-      grf_status = 0;
-   }
-
-/* Report an error if anything went wrong, and return safe values. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGScales. ", status, method, 
-                class );
-      *alpha = 1.0;
-      *beta = 1.0;      
-   }
-
-}
-
-static int GCap( AstPlot *this, int cap, int value, int *status ){
-/*
-*
-*  Name:
-*     GCap
-
-*  Purpose:
-*     Call the GCap Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GCap( AstPlot *this, int cap, int value, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GCap grf function to inquire a capability
-*     of the grf module, either calling the version registered using 
-*     astGrfSet, or the version in the linked grf module. The linked 
-*     version is used if the Grf attribute is zero, or if no function 
-*     has been registered for GCap using astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     cap
-*        The capability to be inquired aboue.
-*     value
-*        The value ot assign to the capability.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the grf module is capabale of performing the action
-*     requested by "cap".
-
-*/
-
-/* Local Variables: */
-   int result;          /* Value retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   if( astGetGrf( this ) && this->grffun[ AST__GCAP ] ) {
-      result = ( *( this->GCap ) )( this, cap, value, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      result = astGCap( cap, value );
-
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Return the result. */
-   return result;
-}
-
-static void GenCurve( AstPlot *this, AstMapping *map, int *status ){
-/*
-*++
-*  Name:
-c     astGenCurve
-f     AST_GENCURVE
-
-*  Purpose:
-*     Draw a generalized curve.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astGenCurve( AstPlot *this, astMapping *map )
-f     CALL AST_GENCURVE( THIS, MAP )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function draws a general user-defined curve defined by the 
-f     This routine draws a general user-defined curve defined by the 
-*     supplied Mapping. Note that the curve is transformed into graphical
-*     coordinate space for plotting, so that a straight line in
-*     physical coordinates may result in a curved line being drawn if
-*     the Mapping involved is non-linear. Any discontinuities in the
-*     Mapping between physical and graphical coordinates are
-c     catered for, as is any clipping established using astClip.
-f     catered for, as is any clipping established using AST_CLIP.
-*
-c     If you need to draw simple straight lines (geodesics), astCurve
-c     or astPolyCurve will usually be easier to use and faster.
-f     If you need to draw simple straight lines (geodesics), AST_CURVE
-f     or AST_POLYCURVE will usually be easier to use and faster.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     map
-f     MAP = INTEGER (Given)
-*        Pointer to a Mapping. This Mapping should have 1 input
-*        coordinate representing offset along the required curve,
-*        normalized so that the start of the curve is at offset 0.0, 
-*        and the end of the curve is at offset 1.0. Note, this offset
-*        does not need to be linearly related to distance along the curve.
-*        The number of output coordinates should equal the number of axes
-*        in the current Frame of the Plot. The Mapping should map a
-*        specified offset along the curve, into the corresponding
-*        coordinates in the current Frame of the Plot. The inverse
-*        transformation need not be defined.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - An error results if the base Frame of the Plot is not 2-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   double d[ CRV_NPNT ];   /* Offsets to evenly spaced points along curve */
-   double tol;             /* Absolute tolerance value */
-   double x[ CRV_NPNT ];   /* X coords at evenly spaced points along curve */
-   double y[ CRV_NPNT ];   /* Y coords at evenly spaced points along curve */
-   int i;                  /* Loop count */
-   int naxes;              /* No. of axes in the base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astGenCurve";
-   class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Only proceed if there has been no error. */
-   if( astOK ){   
-
-/* Initialise the bounding box for primitives produced by this call. */
-      if( !Boxp_freeze ) {
-         Boxp_lbnd[ 0 ] = FLT_MAX;
-         Boxp_lbnd[ 1 ] = FLT_MAX;
-         Boxp_ubnd[ 0 ] = FLT_MIN;
-         Boxp_ubnd[ 1 ] = FLT_MIN;
-      }
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-      astGrfAttrs( this, AST__CURVE_ID, 1, GRF__LINE, method, class );
-
-/* Set up the externals used to communicate with the Map4 function... */
-      Map4_ncoord = astGetNout( this );
-      Map4_plot = this;
-      Map4_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-      Map4_umap = map;
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
-      tol = astGetTol( this )*MAX( this->xhi - this->xlo, 
-                                   this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
-      Crv_scerr = ( astGetLogPlot( this, 0 ) || 
-                    astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
-      Crv_ux0 = AST__BAD;    
-      Crv_tol = tol;
-      Crv_limit = 0.5*tol*tol;
-      Crv_map = Map4;
-      Crv_ink = 1;
-      Crv_xlo = this->xlo;
-      Crv_xhi = this->xhi;
-      Crv_ylo = this->ylo;
-      Crv_yhi = this->yhi;
-      Crv_out = 1;
-      Crv_xbrk = Curve_data.xbrk;
-      Crv_ybrk = Curve_data.ybrk;
-      Crv_vxbrk = Curve_data.vxbrk;
-      Crv_vybrk = Curve_data.vybrk;
-      Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
-      for( i = 0; i < CRV_NPNT; i++ ){
-        d[ i ] = ( (double) i)/( (double) CRV_NSEG );
-      }
-
-/* Map these points into graphics coordinates. */
-      Map4( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map4 to draw the curve. */
-      Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
-      Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map4. */
-      Map4( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the 
-   length of the drawn curve to zero. */
-      if( Crv_out ) {
-         Crv_nbrk = 0;
-         Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of 
-   the last point to be plotted. */
-      } else {
-         Crv_nbrk++;
-         if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
-            astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
-                      "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
-         } else {
-            *(Crv_xbrk++) = (float) Crv_xl;
-            *(Crv_ybrk++) = (float) Crv_yl;
-            *(Crv_vxbrk++) = (float) -Crv_vxl;
-            *(Crv_vybrk++) = (float) -Crv_vyl;
-         }
-      }
-
-/* Store extra information about the curve in the returned structure, and 
-   purge any zero length sections. */
-      Curve_data.length = Crv_len;
-      Curve_data.out = Crv_out;
-      Curve_data.nbrk = Crv_nbrk;
-      PurgeCdata( &Curve_data, status );
-
-/* Annul the Mapping. */
-      Map4_map = astAnnul( Map4_map );
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, AST__CURVE_ID, 0, GRF__LINE, method, class );
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static int GetLabelUnits( AstPlot *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetLabelUnits
-
-*  Purpose:
-*     Return the value of the LabelUnits attribute for a Plot axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GetLabelUnits( AstPlot *this, int axis, int *status ) 
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function returns the value of the LabelUnits attribute for a 
-*     Plot axis, supplying a suitable default if not set.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     axis
-*        The axis index (zero based).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The attribute value.
-
-*/
-
-/* Local Variables: */
-   AstFrame *fr;           /* The current Frame in the Plot */
-   AstFrame *primframe;    /* The primary Frame holding the requested axis */
-   AstSystemType system;   /* The SkyFrame System attribute */
-   int primaxis;           /* Index of requested axis in the primary frame */
-   int ret;                /* The returned value */
-
-/* Initialise. */
-   ret = 0;
-
-/* Check global status. */
-   if( !astOK ) return ret;
-
-/* If a value has been set, return it. */
-   ret = this->labelunits[ axis ];
-
-/* If no value has been set, find a default. */
-   if( ret == -1 ) {
-
-/* Assume "no" for any SkyAxis axes within the current frame of the Plot, 
-   and "yes" for other axes. Get a pointer to the current Frame of the
-   Plot. */
-      fr = astGetFrame( this, AST__CURRENT );
-
-/* The current Frame may be a CmpFrame. So find the primary Frame containing 
-   the requested axis. The primary Frame is guaranteed not to be a CmpFrame. */
-      astPrimaryFrame( fr, axis, &primframe, &primaxis );
-
-/* If the primary Frame is a SkyFrame representing ICRS, equatorial, ecliptic,
-   galactic or supergalactic coords, use a default of "no" for LabelUnits.
-   Otherwise use a default of "yes". */
-      ret = 1;
-      if( IsASkyFrame( (AstObject *) primframe, status ) ) {
-        system = astGetSystem( primframe );
-        if( system == AST__ICRS ||
-            system == AST__FK4 ||
-            system == AST__FK4_NO_E ||
-            system == AST__FK5 ||
-            system == AST__GAPPT ||
-            system == AST__ECLIPTIC ||
-            system == AST__GALACTIC ||
-            system == AST__SUPERGALACTIC ) ret = 0;
-      }
-
-/* Annul the frame pointers. */
-      primframe = astAnnul( primframe );
-      fr = astAnnul( fr );
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static void GFlush( AstPlot *this, const char *method, 
-                   const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GFlush
-
-*  Purpose:
-*     Call the Gflush Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GFlush( AstPlot *this, const char *method, 
-*                  const char *class, int *status ) {
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the Gflush grf function to flush graphics, either
-*     calling the version registered using astGrfSet, or the version in the
-*     linked grf module. The linked version is used if the Grf attribute
-*     is zero, or if no function has been registered for Gflush using
-*     astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int grf_status;          /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   if( astGetGrf( this ) && this->grffun[ AST__GFLUSH ] ) {
-      grf_status = ( *( this->GFlush ) )( this, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGFlush();
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGFlush. ", status, method, 
-                class );
-   }
-
-}
-
-static void GLine( AstPlot *this, int n, const float *x, 
-                   const float *y, const char *method, 
-                   const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GLine
-
-*  Purpose:
-*     Call the Gline Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GLine( AstPlot *this, int n, const float *x, 
-*                 const float *y, const char *method, 
-*                 const char *class, int *status ) {
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the Gline grf function to draw a polyline, either
-*     calling the version registered using astGrfSet, or the version in the
-*     linked grf module. The linked version is used if the Grf attribute
-*     is zero, or if no function has been registered for Gline using
-*     astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     n
-*        The number of positions to be joined together.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS   /* Pointer to thread-specific global data */
-   int i;               /* Loop count */
-   int grf_status;      /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Do not draw anything if we are using "invisible ink". */
-   if( astGetInvisible( this ) ) {
-      grf_status = 1;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   } else if( astGetGrf( this ) && this->grffun[ AST__GLINE ] ) {
-      grf_status = ( *( this->GLine ) )( this, n, x, y, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGLine( n, x, y );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGLine. ", status, method, 
-                class );
-
-/* Otherwise, update the box containing all drawn graphics primitives. */
-   } else if( !Boxp_freeze ){
-      for( i = 0; i < n; i++ ) {
-         Boxp_lbnd[ 0 ] = MIN( x[ i ], Boxp_lbnd[ 0 ] );
-         Boxp_ubnd[ 0 ] = MAX( x[ i ], Boxp_ubnd[ 0 ] );
-         Boxp_lbnd[ 1 ] = MIN( y[ i ], Boxp_lbnd[ 1 ] );
-         Boxp_ubnd[ 1 ] = MAX( y[ i ], Boxp_ubnd[ 1 ] );
-      }
-   }
-
-}
-
-static void GMark( AstPlot *this, int n, const float *x, 
-                   const float *y, int type, const char *method, 
-                   const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GMark
-
-*  Purpose:
-*     Call the GMark Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GMark( AstPlot *this, int n, const float *x, 
-*                 const float *y, int type, const char *method, 
-*                 const char *class, int *status ) {
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GMark grf function to draw markers, either
-*     calling the version registered using astGrfSet, or the version in the
-*     linked grf module. The linked version is used if the Grf attribute
-*     is zero, or if no function has been registered for GMark using
-*     astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     n
-*        The number of positions to be joined together.
-*     x 
-*        A pointer to an array holding the "n" x values.
-*     y 
-*        A pointer to an array holding the "n" y values.
-*     type
-*        An integer which can be used to indicate the type of marker symbol
-*        required.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS   /* Pointer to thread-specific global data */
-   int i;               /* Loop count */
-   int grf_status;      /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Do not draw anything if we are using "invisible ink". */
-   if( astGetInvisible( this ) ) {
-      grf_status = 1;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   } else if( astGetGrf( this ) && this->grffun[ AST__GMARK ] ) {
-      grf_status = ( *( this->GMark ) )( this, n, x, y, type, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGMark( n, x, y, type );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGMark. ", status, method, 
-                class );
-
-/* Otherwise, update the box containing all drawn graphics primitives. */
-   } else if( !Boxp_freeze ){
-      for( i = 0; i < n; i++ ) {
-         Boxp_lbnd[ 0 ] = MIN( x[ i ], Boxp_lbnd[ 0 ] );
-         Boxp_ubnd[ 0 ] = MAX( x[ i ], Boxp_ubnd[ 0 ] );
-         Boxp_lbnd[ 1 ] = MIN( y[ i ], Boxp_lbnd[ 1 ] );
-         Boxp_ubnd[ 1 ] = MAX( y[ i ], Boxp_ubnd[ 1 ] );
-      }
-   }
-
-}
-
-static void GQch( AstPlot *this, float *chv, float *chh, const char *method, 
-                  const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GQch
-
-*  Purpose:
-*     Call the GQch Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GQch( AstPlot *this, float *chv, float *chh, const char *method, 
-*                const char *class, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GQch grf function, either calling the 
-*     version registered using astGrfSet, or the version in the linked grf 
-*     module. The linked version is used if the Grf attribute is zero, or if 
-*     no function has been registered for GQch using astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     chv
-*        A pointer to the double which is to receive the height of
-*        characters drawn with a vertical baseline . This will be an 
-*        increment in the X axis.
-*     chh
-*        A pointer to the double which is to receive the height of
-*        characters drawn with a horizontal baseline. This will be an 
-*        increment in the Y axis.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int grf_status;          /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   if( astGetGrf( this ) && this->grffun[ AST__GQCH ] ) {
-      grf_status = ( *( this->GQch ) )( this, chv, chh, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGQch( chv, chh );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Check neither value is zero. */
-   if( grf_status && ( *chh == 0.0 || *chv == 0.0 ) ) {
-      astError( AST__GRFER, "astGQch: Returned text heights are %g and %g " 
-                "but zero is illegal!", status, *chv, *chh );
-      grf_status = 0;
-   }
-
-/* Report an error if anything went wrong, and return safe values. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGQch. ", status, method, 
-                class );
-      *chh = 1.0;
-      *chv = 1.0;
-   }
-
-}
-
-static void GText( AstPlot *this, const char *text, float x, float y,      
-                   const char *just, float upx, float upy,
-                   const char *method, const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GText
-
-*  Purpose:
-*     Call the GText Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GText( AstPlot *this, const char *text, float x, float y,      
-*                 const char *just, float upx, float upy,
-*                 const char *method, const char *class, int *status ) {
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GText grf function to draw a text string, either
-*     calling the version registered using astGrfSet, or the version in the
-*     linked grf module. The linked version is used if the Grf attribute
-*     is zero, or if no function has been registered for GText using
-*     astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-*     upy
-*        The y component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int grf_status;          /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Do not draw anything if we are using "invisible ink". */
-   if( astGetInvisible( this ) ) {
-      grf_status = 1;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   } else if( astGetGrf( this ) && this->grffun[ AST__GTEXT ] ) {
-      grf_status = ( *( this->GText ) )( this, text, x, y, just, upx, upy, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGText( text, x, y, just, upx, upy );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGText. ", status, method, 
-                class );
-   }
-
-}
-
-static void GTxExt( AstPlot *this, const char *text, float x, float y,      
-                    const char *just, float upx, float upy, float *xbn, 
-                    float *ybn, const char *method, const char *class, int *status ) {
-/*
-*
-*  Name:
-*     GTxExt
-
-*  Purpose:
-*     Call the GTxExt Grf function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void GTxExt( AstPlot *this, const char *text, float x, float y,      
-*                 const char *just, float upx, float upy, float *xbn, 
-*                 float *ybn, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot private function.
-
-*  Description:
-*     This function calls the GTxExt grf function to find the extent
-*     of a text string, either calling the version registered using 
-*     astGrfSet, or the version in the linked grf module. The linked 
-*     version is used if the Grf attribute is zero, or if no function 
-*     has been registered for GTxExt using astGrfSet.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-*     upy
-*        The y component of the up-vector for the text, in graphics world
-*        coordinates. If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-*     xbn
-*        An array of 4 elements in which to return the x coordinate of
-*        each corner of the bounding box.
-*     ybn
-*        An array of 4 elements in which to return the y coordinate of
-*        each corner of the bounding box.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The corners are returned in no particular order.
-
-*/
-
-/* Local Variables: */
-   int grf_status;          /* Status retruned from Grf function */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* If the Grf attribute is set to a non-zero value, use the Grf function
-   registered using astGrfSet (so long as a function has been supplied).
-   This is called via a wrapper which adapts the interface to suit the
-   language in which the function is written. */
-   if( astGetGrf( this ) && this->grffun[ AST__GTXEXT ] ) {
-      grf_status = ( *( this->GTxExt ) )( this, text, x, y, just, upx, upy,
-                                          xbn, ybn, status );
-
-/* Otherwise, use the function in the external Grf module, selected at
-   link-time using ast_link options.*/
-   } else {
-      grf_status = astGTxExt( text, x, y, just, upx, upy, xbn, ybn );
-   }
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Report an error if anything went wrong. */
-   if( !grf_status ) {
-      astError( AST__GRFER, "%s(%s): Graphics error in astGTxExt. ", status, method, 
-                class );
-   }
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Plot.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Plot member function (over-rides the protected astGetAttrib
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Plot, formatted as a character string. 
-*
-*     The value returned is the value which would actually be used if
-*     astGrid was called with the current set of attribute values. This
-*     may not always be the same as the value set by the user. For
-*     instance, if Labelling is set to "exterior" by the user, it may not
-*     be possible to produce exterior labels, in which case interior labels
-*     will be produced. If this function is used to get the value of
-*     Labelling in this situation, then the value actually used (i.e.
-*     interior) will be returned instead of the requested value (i.e. 
-*     exterior).
-*
-*     Some attributes have dynamic defaults, (i.e. the behaviour if not
-*     set depends on the values of other attributes). If the value for
-*     such an attribute is enquired using this function, then the dynamic
-*     default value actually used will be returned if no value has been
-*     set explicitly for the attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Plot, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Plot. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPlot *this;                /* Pointer to the Plot structure */
-   const char *result;           /* Pointer value to return */
-   char label[21];               /* Graphics item label */
-   double dval;                  /* Double attribute value */
-   int axis;                     /* Axis number */
-   int ival;                     /* Int attribute value */
-   int len;                      /* Length of attrib string */
-   int nax;                      /* Number of base Frame axes */
-   int nc;                       /* No. characters read by astSscanf */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
-   nax = astGetNin( this );
-
-/* Indicate that the current bound box should not be changed during the
-   execution of this function (this may happen if a grid is drawn to get
-   the default value for an attribute such as Labelling). */
-   Boxp_freeze = 1;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Tol. */
-/* ---- */
-   if ( !strcmp( attrib, "tol" ) ) {
-      dval = astGetTol( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Grid. */
-/* ----- */
-   } else if ( !strcmp( attrib, "grid" ) ) {
-      ival = GetUsedGrid( this, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* TickAll. */
-/* -------- */
-   } else if ( !strcmp( attrib, "tickall" ) ) {
-      ival = astGetTickAll( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* ForceExterior. */
-/* -------------- */
-   } else if ( !strcmp( attrib, "forceexterior" ) ) {
-      ival = astGetForceExterior( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Invisible. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "invisible" ) ) {
-      ival = astGetInvisible( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Border. */
-/* ------- */
-   } else if ( !strcmp( attrib, "border" ) ) {
-      ival = GetUsedBorder( this, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* ClipOp. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clipop" ) ) {
-      ival = astGetClipOp( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Clip. */
-/* ----- */
-   } else if ( !strcmp( attrib, "clip" ) ) {
-      ival = astGetClip( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Grf. */
-/* ---- */
-   } else if ( !strcmp( attrib, "grf" ) ) {
-      ival = astGetGrf( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* DrawTitle. */
-/* --------- */
-   } else if ( !strcmp( attrib, "drawtitle" ) ) {
-      ival = astGetDrawTitle( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Escape. */
-/* ------- */
-   } else if ( !strcmp( attrib, "escape" ) ) {
-      ival = astGetEscape( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LabelAt(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelat(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUsedLabelAt( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Centre(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "centre(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUsedCentre( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Gap. */
-/* ---- */
-   } else if ( !strcmp( attrib, "gap" ) ) {
-      dval = GetUsedGap( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Gap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "gap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUsedGap( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* LogGap. */
-/* ---- */
-   } else if ( !strcmp( attrib, "loggap" ) ) {
-      dval = GetUsedLogGap( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* LogGap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "loggap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUsedLogGap( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* NumLabGap. */
-/* -------- */
-   } else if ( !strcmp( attrib, "numlabgap" ) ) {
-      dval = astGetNumLabGap( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* NumLabGap(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "numlabgap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = astGetNumLabGap( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* TextLabGap. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "textlabgap" ) ) {
-      dval = astGetTextLabGap( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* TextLabGap(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "textlabgap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = astGetTextLabGap( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* LabelUp. */
-/* -------- */
-   } else if ( !strcmp( attrib, "labelup" ) ) {
-      ival = astGetLabelUp( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LabelUp(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelup(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = astGetLabelUp( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LogPlot. */
-/* -------- */
-   } else if ( !strcmp( attrib, "logplot" ) ) {
-      ival = astGetLogPlot( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LogPlot(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "logplot(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = astGetLogPlot( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LogLabel. */
-/* -------- */
-   } else if ( !strcmp( attrib, "loglabel" ) ) {
-      ival = GetUsedLogLabel( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LogLabel(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "loglabel(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUsedLogLabel( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LogTicks. */
-/* -------- */
-   } else if ( !strcmp( attrib, "logticks" ) ) {
-      ival = GetUsedLogTicks( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LogTicks(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "logticks(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUsedLogTicks( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* NumLab. */
-/* -------- */
-   } else if ( !strcmp( attrib, "numlab" ) ) {
-      ival = astGetNumLab( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* NumLab(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "numlab(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = astGetNumLab( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* MinTick. */
-/* -------- */
-   } else if ( !strcmp( attrib, "mintick" ) ) {
-      ival = GetUsedMinTick( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* MinTick(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "mintick(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUsedMinTick( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* TextLab. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "textlab" ) ) {
-      ival = GetUsedTextLab( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* TextLab(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "textlab(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUsedTextLab( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* DrawAxes. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "drawaxes" ) ) {
-      ival = astGetDrawAxes( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* DrawAxes(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "drawaxes(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetDrawAxes( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Abbrev. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "abbrev" ) ) {
-      ival = astGetAbbrev( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Abbrev(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "abbrev(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetAbbrev( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LabelUnits. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "labelunits" ) ) {
-      ival = GetUsedLabelUnits( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* LabelUnits(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelunits(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUsedLabelUnits( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Style. */
-/* ------ */
-   } else if ( !strcmp( attrib, "style" ) ) {
-      ival = GetUseStyle( this, AST__BORDER_ID, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Style(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "style(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUseStyle( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Font. */
-/* ----- */
-   } else if ( !strcmp( attrib, "font" ) ) {
-      ival = GetUseFont( this, AST__TEXTLABS_ID, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Font(label). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "font(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUseFont( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Colour. */
-/* ------- */
-   } else if ( !strcmp( attrib, "colour" ) ) {
-      ival = GetUseColour( this, AST__TEXTLABS_ID, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Colour(label). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "colour(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUseColour( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Color. */
-/* ------ */
-   } else if ( !strcmp( attrib, "color" ) ) {
-      ival = GetUseColour( this, AST__TEXTLABS_ID, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Color(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "color(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUseColour( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Width. */
-/* ------ */
-   } else if ( !strcmp( attrib, "width" ) ) {
-      dval = GetUseWidth( this, AST__BORDER_ID, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-
-/* Width(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "width(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUseWidth( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Size. */
-/* ----- */
-   } else if ( !strcmp( attrib, "size" ) ) {
-      dval = GetUseSize( this, AST__TEXTLABS_ID, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Size(label). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "size(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUseSize( this, FullForm( GrfLabels, label, attrib, "astGet", astGetClass( this ), status ), status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* TitleGap. */
-/* --------- */
-   } else if ( !strcmp( attrib, "titlegap" ) ) {
-      dval = astGetTitleGap( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* MajTickLen. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "majticklen" ) ) {
-      dval = GetUsedMajTickLen( this, 0, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* MajTickLen(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "majticklen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = GetUsedMajTickLen( this, axis - 1, status );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* MinTickLen. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "minticklen" ) ) {
-      dval = astGetMinTickLen( this, 0 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* MinTickLen(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "minticklen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      dval = astGetMinTickLen( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* Labelling. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "labelling" ) ) {
-      ival = GetUsedLabelling( this, status );
-      if ( astOK ) {
-         result = ival ? xlbling[0] : xlbling[1];
-      }
-
-/* Edge(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "edge(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      ival = GetUsedEdge( this, axis - 1, status );
-      if ( astOK ) {
-         if( ival == LEFT ){
-            result = "left";
-         } else if( ival == RIGHT ){
-            result = "right";
-         } else if( ival == TOP ){
-            result = "top";
-         } else if( ival == BOTTOM ){
-            result = "bottom";
-         } else {
-            result = "<bad>";
-         }
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Unfreeze the bound box so that it may be updated by subsequent
-   plotting functions. */
-   Boxp_freeze = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *GetDrawnTicks( AstPlot *this, int axis, int major, int *status ){
-/*
-*+
-*  Name:
-*     astGetDrawnTicks
-
-*  Purpose:
-*     Return information about the ticks last drawn by astGrid.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPointSet *GetDrawnTicks( AstPlot *this, int axis, int major )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function returns a PointSet holding information about the
-*     tick marks (either major and minor) that were drawn by the previous
-*     invocation of astGrid. A NULL pointer is returned if astGrid has
-*     not yet been invoked.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     axis
-*        The zero-based axis of the axis for which tick mark information
-*        is required.
-*     major
-*        Supply a non-zero value if information about the major tick
-*        marks is to be returned, and zero if information about the minor
-*        tick marks is to be returned.
-
-*  Returned Value:
-*     A pointSet with one point for every tick of the requested type drawn 
-*     by astGrid for the specified axis. Each point has 2 coordinate values, 
-*     being the graphics coordinates at the start of the tick mark. The 
-*     returned PointSet pointer should be annulled when no longer needed.
-
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result = NULL;
-   double *ptr[ 3 ];
-   int n;
-
-/* Check the global status. */
-   if( !astOK ) return result;
-
-/* Report an error if the supplied axis value is incorrect. */
-   if( axis < 0 || axis > 1 ) {
-      astError( AST__INTER, "astGetDrawnTicks(Plot): Supplied \"axis\" "
-                "value is %d - should 0 or 1 (internal AST programming "
-                "error).", status, axis );
-      n = 0;
-
-/* If OK, get the number of stored tick marks. */
-   } else {
-      n = major ? this->majtickcount[ axis ] : this->mintickcount[ axis ]; 
-   }
-
-/* Check that information is available. */
-   if( n > 0 && astOK ) {
-
-/* Create a PointSet with the required size. */
-      result = astPointSet( n, 2, "", status );
-
-/* Store pointers to the arrays within the Plot that hold the required
-   tick marks positions and types. */
-      ptr[ 0 ] = major ? this->majtickgx[ axis ] : this->mintickgx[ axis ];
-      ptr[ 1 ] = major ? this->majtickgy[ axis ] : this->mintickgy[ axis ];
-      astSetPoints( result, ptr );
-   }
-
-/* Return the PointSet. */
-   return result;
-}
-
-static double GetTicks( AstPlot *this, int axis, double *cen, double **ticks, 
-                        int *nmajor, double **minticks, int *nminor, 
-                        int format_set, int *inval, double *refval, 
-                        GetTicksStatics **pstatics, const char *method, 
-                        const char *class, int *status ){
-/*
-*  Name:
-*     GetTicks
-
-*  Purpose:
-*     Obtain a list of logarithmically or linearly spaced tick mark values for 
-*     a single axis in a 2-D physical coordinate Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     double GetTicks( AstPlot *this, int axis, double *cen, double **ticks, 
-*                      int *nmajor, double **minticks, int *nminor, 
-*                      int format_set, int *inval, double *refval, 
-*                      GetTicksStatics **pstatics, const char *method, 
-*                      const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     For linearly spaced major ticks the "gap" returned by this function 
-*     is the constant difference between adjacent major tick marks. For 
-*     logarithmically spaced major ticks the "gap" returned by this 
-*     function is the constant ratio between adjacent major tick marks.
-*
-*     If a gap size has been specified using attribute Gap (or LogGap for
-*     logarithmic ticks) supplied, the specified value is returned, and used
-*     to determine the tick values. If no gap size is supplied, a default
-*     gap size is used and returned.
-*
-*     All this is over-ridden if the astSetTickValues method has been
-*     called to store explicit tick mark values in the Plot structure.
-*     In this case, the values supplied using astSetTickValues are
-*     returned.
-
-*  Parameters:
-*     this
-*        The Plot. Supplying a NULL pointer will cause statics resources
-*        to be released.
-*     axis
-*        The zero-based index of the axis to use.
-*     cen
-*        Pointer to the supplied axis value at which to put a single 
-*        central tick. Other ticks will be placed evenly on either side 
-*        of this tick. If AST__BAD is provided, a value will be used 
-*        which would put a tick at an axis value of one. The used value
-*        is returned.
-*     ticks
-*        Pointer to a place at which to return a pointer to the memory in 
-*        which are stored the major tick values to be used. This pointer 
-*        should be freed using astFree when no longer needed. The number of 
-*        values in the array is given by the value returned by parameter
-*        "nmajor".
-*     nmajor
-*        A pointer to a location at which to return the number of major
-*        ticks.
-*     minticks
-*        Pointer to a place at which to return a pointer to the memory in 
-*        which are stored the minor tick values to be used. This pointer 
-*        should be freed using astFree when no longer needed. The number of 
-*        values in the array is given by the value returned by parameter
-*        "nminor". The minor tick marks values returned in this array are
-*        the ones stored in the Plot via a call to the astSetTickValues 
-*        function. If this function has not been called, then a NULL
-*        pointer is returned, and the "nminor" value is returned holding the
-*        number of divisions between major ticks.
-*     nminor
-*        A pointer to a location at which to return either the number of 
-*        division into which each gap should be divided when drawing minor 
-*        tick marks (if "*minticks" is returned holding NULL), or the
-*        total number of minor tick values stored in "*minticks" (if
-*        "*minticks" is returned non-NULL). The number of divisions
-*        between major tick values is one more than the number of minor 
-*        tick marks.
-*     format_set
-*        Indicates if an explicit format has been set for the axis. If
-*        not, "cen" is always assumed to be AST__BAD, and any specified 
-*        Gap value is rounded to the nearest "nice" value. This has
-*        to be done because the algorithm for choosing a format avoiding
-*        unnecessary precision only works if the gap size causes 1 digit to
-*        change between adjacent labels.
-*     inval
-*        A pointer to a location at which to return a flag indicating if
-*        any invalid physical coordinates were encountered.
-*     refval
-*        A pointer to a location at which to return a value for the other
-*        axis which can be used when normalizing the returned tick mark
-*        values.
-*     pstatics
-*        Address of a pointer to a structure holding static data values 
-*        used within this function. A NULL pointer should be supplied on
-*        the first invocation (dynamic memory will then be allocated to
-*        hold ths structure). The memory is freed when a NULL value for
-*        "this" is supplied.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The used gap size.
-
-*  Notes:
-*     -  This function allocates some static resources on its first
-*     invocation, which should be released when no longer needed, or when
-*     a different Plot is supplied, by calling this function with a NULL 
-*     pointer for parameter "this". All other parameters are ignored.
-*     -  This function assumes that the physical coordinate system is 2 
-*     dimensional, and it should not be used if this is not the case.
-*     -  An error is reported if the region containing valid physical
-*     coordinates is too small to use.
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned in "ticks", zero 
-*     is returned for the number of major and minor ticks marks. 
-*/
-
-/* Local Variables: */
-   GetTicksStatics *statics; /* Pointer to statics structure */
-   double *tick;             /* Pointer to next tick value */
-   double cen0;              /* Supplied value of cen */
-   double dran;              /* Dynamic range of axis values */
-   double frac;              /* Fraction of plot area holding good coords */
-   double gap;               /* Supplied value for Gap or LogGap */
-   double log_used_gap;      /* Log10( the used gap size ) */
-   double maxv;              /* Max axis value */
-   double minv;              /* Min axis value */
-   double new_used_gap;      /* New value for the used gap size */
-   double old_used_gap;      /* Old value for the used gap size */
-   double test_gap;          /* Trial gap size */
-   double used_cen;          /* Used value of cen */
-   double used_gap;          /* The used gap size */
-   int findcen;              /* Find a new centre value? */
-   int gap_too_small;        /* Test gap too small? */
-   int gap_too_large;        /* Test gap too large? */
-   int i;                    /* Axis index */
-   int ihi;                  /* Highest tick mark index */
-   int ilo;                  /* Lowest tick mark index */
-   int nochange;             /* No. of ineffective attempts to change gap size */
-
-/* Initialise the returned information. */
-   *ticks = NULL;
-   *minticks = NULL;
-   *nmajor = 0;
-   *nminor = 0;
-
-/* Get a pointer to the supplied statics object. */
-   statics = *pstatics;
-
-/* If a NULL pointer has been supplied for "this", release the resources
-   allocated on the first call to this function, and return. */
-   if( !this ){
-      if( statics ) {
-         if( statics->map ) statics->map = astAnnul( statics->map );
-         if( statics->pset ) statics->pset = astAnnul( statics->pset );
-         if( statics->frame ) statics->frame = astAnnul( statics->frame );
-         *pstatics = astFree( statics );
-      }
-      return 0.0;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* If no statics structure was supplied, create one now and initialise it. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( GetTicksStatics ) );
-      if( statics ) {
-         statics->pset=NULL;  
-         *pstatics = statics;
-      }
-   }
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   maxv = 0.0;
-   minv = 0.0;
-   used_cen = 0.0;
-   used_gap = 0.0;
-   ihi = 0;
-   ilo = 0;
-
-/* If this is the first call to this function, do some initialisation. */
-   if( !statics->pset ){
-
-/* Get the Mapping from Base to Current Frame in the Plot. */
-      statics->map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the current Frame from the Plot. */
-      statics->frame = astGetFrame( this, AST__CURRENT );
-
-/* Get initial guesses at suitable gaps for each axis. A PointSet is
-   returned holding sorted values (non-normalized) for the physical axes. */
-      statics->pset = DefGap( this, statics->defgaps, statics->ngood, &frac, &statics->bad, method, class, status );
-
-/* Store the maximum and minimum number of major tick marks along each
-   axis. These numbers are reduced if only a small part of the plotting
-   area contains valid coordinates, so that the tick marks do not end up
-   to close together. */
-      statics->maxticks = (int) ( 0.5 + MAJTICKS_MAX*sqrt( frac ) );
-      statics->mintick = (int) ( 0.5 + MAJTICKS_MIN*sqrt( frac ) );
-      if( statics->mintick < 3 ) statics->mintick = 3;
-      if( statics->maxticks < 8 ) statics->maxticks = 8;
-      if( statics->maxticks < statics->mintick ) statics->maxticks = statics->mintick;
-
-/* Get a pointer to the data in the PointSet. */
-      statics->ptr = astGetPoints( statics->pset );
-
-/* Find a typical value on each axis. */
-      for( i = 0; i < 2 && astOK; i++ ){
-         statics->typval[ i ] = Typical( statics->ngood[ i ], statics->ptr[ i ], -DBL_MAX, DBL_MAX,
-                                statics->width + i, status );
-      }
-   }
-
-/* Return the flag indicating if any regions of invalid physical coordinates 
-   were found. */
-   *inval = statics->bad;
-
-/* Return the typical value on the other axis. */
-   *refval = statics->typval[ 1 - axis ];
-
-/* See if any tick marks values have been stored in the Plot structure
-   using astSetTickValues. If so, copy the tick mark values to the
-   returned arrays and exit with a gap size determined by the first two
-   ticks. */
-   if( this->nmajtickval[ axis ] > 0 ) {
-      *ticks = astStore( NULL, this->majtickval[ axis ],
-                         this->nmajtickval[ axis ]*sizeof(double) );
-      *minticks = astStore( NULL, this->mintickval[ axis ],
-                         this->nmintickval[ axis ]*sizeof(double) );
-      *nmajor = this->nmajtickval[ axis ];
-      *nminor = this->nmintickval[ axis ];
-
-      if( *nmajor > 1 && (*ticks)[ 0 ] != AST__BAD &&
-                         (*ticks)[ 1 ] != AST__BAD ) {
-         used_gap = fabs( (*ticks)[ 1 ] - (*ticks)[ 0 ] );
-      } else {
-         used_gap = AST__BAD;
-      }
-
-      return used_gap;
-
-   }
-
-/* See if the user has specified a gap size. The default for astGetLogTicks is 
-   determined in DefGaps, so we can now decide whether to use attribute Gap 
-   or LogGap to get the user-supplied gap size. Obtain the requested gap 
-   attribute values for both physical axes. */
-   if( astGetLogTicks( this, axis ) ) {
-      gap = astGetLogGap( this, axis );
-   } else {
-      gap = astGetGap( this, axis );
-   }
-
-/* Find the maximum and minimum value in the plotting area. DefGap will
-   have reported an error if minv*maxv is negative or zero. */
-   if( astOK ) {
-      maxv = statics->ptr[ axis ][ statics->ngood[ axis ] - 1 ];
-      minv = statics->ptr[ axis ][ 0 ];
-   }
-
-/* First deal with logarithmically spaced ticks. */
-   dran = ( minv != 0.0 ) ? maxv/minv : 0.0;
-   if( astGetLogTicks( this, axis ) ) {
-
-/* If the ratio of max and min data value is not larger than 10, report an 
-   error. */
-      dran = ( minv != 0.0 ) ? maxv/minv :0.0;
-      if( dran < 10.0 && dran > 0.1 ) {
-         astError( AST__VSMAL, "%s(%s): Cannot produce logarithmically "
-                   "spaced major tick marks on axis %d since the dynamic "
-                   "range of the axis is too small.", status, method, class, axis + 1 );
-      }
-
-/* Should we find a new value for "cen"? */
-      findcen = !cen || *cen == AST__BAD || !format_set;
-
-/* Try to find a "nice" gap size, so long as the caller has not supplied
-   a gap size. The default gap size obtained above is our initial guess. */
-      if( gap == AST__BAD && astOK ){
-
-/* Start off using the default gap found during the initialisation. */
-         test_gap = statics->defgaps[ axis ];
-
-/* Loop round until a gap size is found which gives an acceptable number
-   of tick marks. Upto 10 gap sizes are tried. */
-         for( i = 0; i < 10 && astOK; i++ ){
-
-/* Find a "nice" gap size close to the current test gap size. Also find
-   the number of minor tick marks to use with the nice gap size. Gaps for
-   logarithmic axes are always powers of ten. */
-            log_used_gap = (int) ( log10( test_gap ) + 0.5 );
-            if( log_used_gap == 0.0 ) {
-               log_used_gap = ( test_gap > 1.0 ) ? 1.0 : -1.0;
-            }
-            *nminor = 9;
-            used_gap = pow( 10.0, log_used_gap );
-
-/* If no value has been supplied for *cen, choose a value which would put
-   a major tick mark at the value 1 (or -1), and which is mid way between 
-   the maximum and minimum axis value. */
-            if( findcen ) {
-               used_cen = pow( used_gap, (int) ( 0.5*log10( maxv*minv ) /
-                                                 log_used_gap ) ); 
-               if( maxv < 0 ) used_cen = -used_cen;
-            } else {
-               used_cen = *cen;
-            }
-
-/* Find the index of the highest tick which is not larger than the lowest
-   axis value. */
-            if( log_used_gap > 0.0 ) {
-               ilo = floor(  log10( minv/used_cen )/log_used_gap );         
-            } else {
-               ilo = ceil(  log10( minv/used_cen )/log_used_gap );         
-            }
-
-/* Find the index of the lowest tick which is not less than the highest
-   axis value. */
-            if( log_used_gap > 0.0 ) {
-               ihi = ceil(  log10( maxv/used_cen )/log_used_gap );         
-            } else {
-               ihi = floor(  log10( maxv/used_cen )/log_used_gap );         
-            }
-
-/* Find the total number of tick marks. */
-            *nmajor = ihi - ilo + 1;
-
-/* If the number of ticks is unacceptable, try a different gap size. If the
-   gap was too large to produce any ticks, try using half the gap size. */
-            if( *nmajor <= 0 ) {
-               test_gap = sqrt( test_gap );
-
-/* If there were some ticks, but not enough, decrease the gap size in
-   proportion to the shortfall. */
-            } else if( *nmajor < statics->mintick ){
-               test_gap = pow( test_gap, (double)( *nmajor )/(double)( statics->mintick ) );
-
-/* If there were too many ticks, increase the gap size in proportion to the 
-   excess. */
-            } else if( *nmajor > statics->maxticks ){
-               test_gap = pow( test_gap, (double)( *nmajor )/(double)( statics->maxticks ) );
-
-/* If the number of ticks is acceptable, break out of the loop early.*/
-            } else {
-               break;
-            }
-         }
-
-/* Increase the tick coverage by one at each end to cover up the gaps. */
-         ilo--;
-         ihi++;
-         *nmajor += 2;   
-
-/* If an explicit gap size was supplied, use it. */
-      } else if( astOK ) {
-
-/* Check it is usable. */
-         if( gap == 0.0 && astOK ) {
-            astError( AST__ATTIN, "%s(%s): Invalid value zero given for "
-                      "attribute LogGap(%d).", status, method, class, axis + 1 );
-
-         } else if( gap < 0.0 && astOK ) {
-            astError( AST__ATTIN, "%s(%s): Invalid negative value %f given for "
-                      "attribute LogGap(%d).", status, method, class, gap, axis + 1 );
-
-/* If necessary, take its reciprocal in order to ensure that the absolute
-   tick mark values get smaller or larger as required. */
-         } else {
-
-            used_gap = gap;
-            if( fabs( maxv ) < fabs( minv ) ) {
-               if( gap > 1.0 ) used_gap = 1.0/gap;
-            } else {
-               if( gap < 1.0 ) used_gap = 1.0/gap;
-            }
-
-/* Find the nearest power of 10 ( do not allow 10**0 (=1.0) to be used). */
-            log_used_gap = (int) ( log10( used_gap ) + 0.5 );
-            if( log_used_gap == 0.0 ) {
-              log_used_gap = ( gap > 1.0 ) ? 1.0 : -1.0;
-            }
-            used_gap = pow( 10.0, log_used_gap );
-
-/* We always use 9 minor intervals. */         
-            *nminor = 9;
-
-/* If no value has been supplied for *cen, choose a value which would put
-   a major tick mark at the value 1 (or -1), and which is mid way between 
-   the maximum and minimum axis value. */
-            if( findcen ) {
-               used_cen = pow( used_gap, (int) ( 0.5*log10( maxv*minv ) /
-                                                 log_used_gap ) ); 
-               if( maxv < 0 ) used_cen = -used_cen;
-            } else {
-               used_cen = *cen;
-            }
-
-/* Find the index of the highest tick which is not larger than the lowest
-   axis value. */
-            if( log_used_gap > 0.0 ) {
-               ilo = floor(  log10( minv/used_cen )/log_used_gap );         
-            } else {
-               ilo = ceil(  log10( minv/used_cen )/log_used_gap );         
-            }
-
-/* Find the index of the lowest tick which is not less than the highest
-   axis value. */
-            if( log_used_gap > 0.0 ) {
-               ihi = ceil(  log10( maxv/used_cen )/log_used_gap );         
-            } else {
-               ihi = floor(  log10( maxv/used_cen )/log_used_gap );         
-            }
-
-/* Find the total number of tick marks. */
-            *nmajor = ihi - ilo + 1;
-            if( *nmajor < 2 && astOK ) {
-               astError( AST__ATTIN, "%s(%s): Unusable value %f given for "
-                      "attribute LogGap(%d).", status, method, class, gap, axis + 1 );
-
-            }
-         }
-      }
-
-/* Allocate memory to hold the tick values themselves. */
-      *ticks = (double *) astMalloc( sizeof( double )*( *nmajor ) );
-      if( astOK ) {
-
-/* Store them. */
-         tick = *ticks;
-         for( i = ilo; i <= ihi; i++, tick++ ) {
-            *tick = used_cen*pow( used_gap, i );
-         }
-      }
-
-/* Store returned centre value. */
-      if( cen ) *cen = used_cen;
-
-/* Now deal with linearly spaced ticks */
-   } else {
-
-/* Store the supplied value of cen. */
-      cen0 = ( cen ) ? *cen : AST__BAD;
-
-/* If no format has been set for the axis, ensure AST__BAD is used for cen. */
-      if( !format_set ) cen0 = AST__BAD;
-
-/* Try to find a "nice" gap size, so long as the caller has not supplied
-   a gap size. The default gap size obtained above is our initial guess. */
-      if( gap == AST__BAD ){
-         old_used_gap = AST__BAD;
-
-/* Start of using the default gap found during the initialisation. */
-         test_gap = statics->defgaps[ axis ];
-         used_gap = 0.0;
-
-/* Initialise flags saying the test gap is too large or too small */
-         gap_too_large = 0;
-         gap_too_small = 0;
-
-/* So far, there have been no ineffective attempts to change the gap
-   size. */
-         nochange = 0;
-
-/* Loop round until a gap size is found which gives an acceptable number
-   of tick marks. Upto 10 gap sizes are tried. */
-         for( i = 0; i < 10 && astOK; i++ ){
-
-/* Find a "nice" gap size close to the current test gap size. Also find
-   the number of minor tick marks to use with the nice gap size. */
-            new_used_gap = astGap( statics->frame, axis, test_gap, nminor );
-
-/* Find the number and positions of major tick marks which would result
-   from using this gap size. Annul the memory used to hold any previous tick 
-   data first. Only do this if the gap being used has actually changed,
-   otherwise we just retain the values created from the previous run with
-   this gap size. */
-            if( new_used_gap != used_gap ) {
-               nochange = 0;
-               old_used_gap = used_gap;
-               used_gap = new_used_gap;
-               if( *ticks ) *ticks = astFree( *ticks );
-               if( cen ) *cen = cen0;
-               *nmajor = FindMajTicks( statics->map, statics->frame, axis, *refval, statics->width[ 1-axis ], 
-                                       used_gap, cen, statics->ngood[ axis ], 
-                                       statics->ptr[ axis ], ticks, status );
-
-/* If the gap size has not changed do an extra pass through this loop,
-   but only do this a maximum of 25 times in succession. */
-            } else if( nochange < 25 ) {
-               nochange++;
-               i--;
-
-            } else if( astOK ){
-               astError( AST__VSMAL, "%s(%s): Cannot produce enough major "
-                         "tick marks on axis %d using the current axis "
-                         "format (\"%s\").", status, method, class, axis + 1, 
-                         astGetFormat( statics->frame, axis ) );
-               break;
-            }
-
-/* If the number of ticks is unacceptable, try a different gap size. If the
-   gap was too large to produce any ticks, try using half the gap size. */
-            if( *nmajor == 0 ) {
-               test_gap *= 0.5;
-               gap_too_large = 1;
-               gap_too_small = 0;
-
-/* If there were some ticks, but not enough... */
-            } else if( *nmajor < statics->mintick ){
-
-/* If the previous test gap produced too many ticks, use the current gap
-   size. */
-               if( gap_too_small ) {
-                  break;
-
-/* Otherwise, decrease the gap size in proportion to the shortfall. */
-               } else {
-                  test_gap *= (double)( *nmajor )/(double)( statics->mintick );
-                  gap_too_large = 1;
-                  gap_too_small = 0;
-               }
-
-/* If there were too many ticks... */
-            } else if( *nmajor > statics->maxticks ){
-
-/* If the previous test gap produced too few ticks, use the previous gap
-   size. */
-               if( gap_too_large ) {
-                  used_gap = old_used_gap;
-                  if( *ticks ) *ticks = astFree( *ticks );
-                  if( cen ) *cen = cen0;
-                  *nmajor = FindMajTicks( statics->map, statics->frame, axis, *refval, statics->width[ 1-axis ], 
-                                          used_gap, cen, statics->ngood[ axis ], 
-                                          statics->ptr[ axis ], ticks, status );
-                  break;
-
-/* Otherwise, increase the gap size in proportion to the excess. */
-               } else {
-                  test_gap *= (double)( *nmajor )/(double)( statics->maxticks );
-                  gap_too_small = 1;
-                  gap_too_large = 0;
-               }
-
-/* If the number of ticks is acceptable, break out of the loop early.*/
-            } else {
-               break;
-            }
-         }
-
-/* If an explicit gap size was supplied, use it. */
-      } else {
-
-/* Find a likely value for the number of minor tick marks to use, and find
-   a nice gap close to the supplied gap (unless an explicit format has
-   been set). */
-         if( format_set ){
-            used_gap = gap;
-            (void) astGap( statics->frame, axis, used_gap, nminor );
-         } else {
-            used_gap = astGap( statics->frame, axis, gap, nminor );
-         }
-
-/* Find where the major ticks should be put. */
-         if( cen ) *cen = cen0;
-         *nmajor = FindMajTicks( statics->map, statics->frame, axis, *refval, statics->width[ 1-axis ],
-                                 used_gap, cen, statics->ngood[ axis ], statics->ptr[ axis ], 
-                                 ticks, status );
-      }
-   }
-
-/* Report an error if no ticks can be found. */
-   if( *nmajor == 0 && astOK ) {
-      astError( AST__GRFER, "%s(%s): Cannot find any usable tick mark values. ", status, method, 
-                class );
-   }
-
-/* If an error has occurred, annul the memory used to hold tick data, and
-   return zero ticks. */
-   if( !astOK ) {
-      *ticks = (double *) astFree( (void *) *ticks );
-      *nmajor = 0;
-      *nminor = 0;
-      used_gap = 0.0;
-   }
-
-/* Return. */
-   return used_gap;
-}
-
-static double GoodGrid( AstPlot *this, int *dim, AstPointSet **pset1, 
-                        AstPointSet **pset2, const char *method, 
-                        const char *class, int *status ){
-/*
-*  Name:
-*     GoodGrid
-
-*  Purpose:
-*     Create a grid covering the region containing good coordinates in a 
-*     2-D physical coordinate Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     double GoodGrid( AstPlot *this, int *dim, AstPointSet **pset1, 
-*                      AstPointSet **pset2, const char *method, 
-*                      const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function creates two PointSets, one holding a square grid of
-*     graphics coordinates, and the other holding the corresponding physical 
-*     coordinates (not normalized). The grid covers just the area containing 
-*     good physical coordinates. The points are stored row by row in the 
-*     returned PointSets.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     dim
-*        A pointer to an integer in which to store the number of samples
-*        along each edge of the returned grid. 
-*     pset1
-*        A pointer to a location at which to store a pointer to the
-*        PointSet holding the graphics coordinates.
-*     pset2
-*        A pointer to a location at which to store a pointer to the
-*        PointSet holding the physical coordinates.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The fraction of the plotting area containing good physical
-*     coordinates.
-
-*  Notes:
-*     -  This function assumes that the physical coordinate system is 2 
-*     dimensional, and it should not be used if this is not the case.
-*     -  The returned PointSets should be annulled when no longer needed,
-*     using astAnnul.
-*     -  An error is reported if the region containing valid physical
-*     coordinates is too small to use.
-*     -  A function value of zero, and NULL pointers are returned if an error 
-*     has already occurred, or if this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;     /* Pointer to the Current Frame in the Plot */
-   AstMapping *map;   /* Pointer to "graphics to physical" mapping */
-   double **ptr1;     /* Pointer to physical axis value data */
-   double **ptr2;     /* Pointer to graphics axis value data */
-   double *pa;        /* Pointer to next value on 1st physical axis */
-   double *pb;        /* Pointer to next value on 2nd physical axis */
-   double *px;        /* Pointer to next value on 1st graphics axis */
-   double *py;        /* Pointer to next value on 2nd graphics axis */
-   double dx;         /* Cell size along graphics X (1st) axis */
-   double dy;         /* Cell size along graphics Y (2nd) axis */
-   double frac;       /* Fraction of good physical coordinates */
-   double xmax;       /* High X bound of region containing good phy. coords */
-   double xmin;       /* Low X bound of region containing good phy. coords */
-   double ymax;       /* High Y bound of region containing good phy. coords */
-   double ymin;       /* Low Y bound of region containing good phy. coords */
-   int j;             /* Element offset */
-   int ngood;         /* Number of grid points with good physical coords */
-   int size;          /* Number of grid points */
-
-/* Initialise the returned PointSet pointers. */
-   *pset1 = NULL;
-   *pset2 = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   ptr1 = NULL;
-   frac = 0.0;
-   xmax = 0.0;
-   xmin = 0.0;
-   ymax = 0.0;
-   ymin = 0.0;
-
-/* Get the Mapping from base (graphics) to current (physical) Frame in the 
-   supplied Plot. */
-   map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the Current Frame in the Plot. */
-   frm = astGetFrame( this, AST__CURRENT );
-
-/* Initialise the grid dimension. */
-   *dim = 16;
-
-/* We need a grid which has at least 4 good points. */
-   ngood = 0;
-   while( ngood < 4 && astOK ){
-
-/* Double the grid dimension. */
-      *dim *= 2;
-
-/* Report an error if the grid is now too big. */
-      if( *dim >= 512 ){
-         astError( AST__VSMAL, "%s(%s): The area of the plot containing "
-                   "usable coordinates on both axes is too small.", status, method, 
-                   class );
-         break;
-      }
-
-/* Get two PointSets, one holding a regular grid of graphics coordinates,
-   and the other holding the corresponding physical coordinates. The grid
-   covers the entire plotting area with the current grid dimension. A
-   pointer to the physical axis values is returned. */
-      ptr2 = MakeGrid( this, frm, map, 1, *dim, this->xlo, this->xhi, this->ylo, 
-                       this->yhi, 2, pset1, pset2, 0, method, class, status );
-
-/* Get the number of graphics axis values. */
-      size = astGetNpoint( *pset1 );
-
-/* Get a pointer to the graphics axis values. */
-      ptr1 = astGetPoints( *pset1 );
-
-/* Check the pointers can be used. */
-      if( astOK ){
-
-/* Find the bounds in graphics coordinates of the area enclosing the
-   good physical positions in the grid, and count the good positions. */
-         ngood = 0;
-
-         pa = ptr2[ 0 ];   
-         pb = ptr2[ 1 ];   
-         px = ptr1[ 0 ];   
-         py = ptr1[ 1 ];   
-
-         xmin = DBL_MAX;
-         xmax = -DBL_MAX;
-         ymin = DBL_MAX;
-         ymax = -DBL_MAX;
-
-         for( j = 0; j < size; j++ ){
-            if( *pa != AST__BAD && *pb != AST__BAD ){
-               if( *px < xmin ) xmin = *px;
-               if( *px > xmax ) xmax = *px;
-               if( *py < ymin ) ymin = *py;
-               if( *py > ymax ) ymax = *py;
-               ngood++;
-            }   
-            px++;
-            py++;
-            pa++;
-            pb++;
-         }
-      }
-   }
-
-/* Store approximate fraction of the plotting area containing good
-   physical coordinates. */
-   if( astOK ) {
-      frac =  ( (double) ngood )/(double)( astGetNpoint( *pset1 ) );
-
-/* Get the size of each grid cell. */
-      dx = ptr1[0][1] - ptr1[0][0];
-      dy = ptr1[1][1] - ptr1[1][0];
-
-/* Extend the area containing good points by one grid cell. */
-      xmax += dx;
-      xmin -= dx;
-      ymax += dy;
-      ymin -= dy;
-    
-/* If the area containing good points is significantly smaller than 
-   the supplied area, create a new grid covering just the area containing
-   good positions. */
-      if( ( xmax - xmin ) < 0.9*( this->xhi - this->xlo ) ||
-                  ( ymax - ymin ) < 0.9*( this->yhi - this->ylo ) ){
-
-/* Find a new grid dimension which results in a cell size similar to
-   the one used to create the grid, but covering only the region containing
-   good physical coordinates. */
-         *dim *= MAX( (xmax - xmin)/(this->xhi - this->xlo), 
-                      (ymax - ymin)/(this->yhi - this->ylo) );
-         if( *dim < 32 ) *dim = 32;
-
-/* Annul the PointSet holding the current grid. */
-         *pset1 = astAnnul( *pset1 );
-         *pset2 = astAnnul( *pset2 );
-
-/* Create the new grid covering the region containing good physical
-   coordinates. */
-         (void) MakeGrid( this, frm, map, 1, *dim, xmin, xmax, ymin, ymax, 2,
-                          pset1, pset2, 0, method, class, status );
-      }
-   }
-
-/* Annul the Mapping from base to current Frame, and the pointer to the
-   Current Frame. */
-   map = astAnnul( map );
-   frm = astAnnul( frm );
-
-/* If an error has occurred, annul the two pointsets and indicate that
-   there are no good points in the plotting area. */
-   if( !astOK ){
-      *pset1 = astAnnul( *pset1 );
-      *pset2 = astAnnul( *pset2 );
-      frac = 0.0;
-   }
-
-/* Return. */
-   return frac;
-
-}
-
-static int GraphGrid( int dim, int disk, double xlo, double xhi, double ylo, 
-                      double yhi, double **ptr1, int *status ){
-/*
-*  Name:
-*     GraphGrid
-
-*  Purpose:
-*     Fill an array with a square grid of graphics coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GraphGrid( int dim, int disk, double xlo, double xhi, double ylo, 
-*                    double yhi, double **ptr1, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function fills the supplied array with a square grid of graphics 
-*     coordinates covering the supplied area. The points are stored row by 
-*     row, i.e. if the cell size for the grid is (dx,dy), the first point 
-*     is (xmin,ymin), followed by (xmin+dx,ymin), (xmin+2*dx,ymin), up to 
-*     (xmin+(dim-1)*dx,ymin), followed by the next row (xmin,ymin+dy),
-*     (xmin+dx,ymin+dy), etc.
-
-*  Parameters:
-*     dim
-*        The number of samples along each edge of the grid.
-*     disk
-*        If non-zero, the corners of the grid are omitted, resulting in a 
-*        grid that is more disk like than rectangular.
-*     xlo
-*        The lower bound on the first axis of the region to be covered
-*        by the grid.
-*     xhi
-*        The upper bound on the first axis of the region to be covered
-*        by the grid.
-*     ylo
-*        The lower bound on the second axis of the region to be covered
-*        by the grid.
-*     yhi
-*        The upper bound on the second axis of the region to be covered
-*        by the grid.
-*     ptr1
-*        A pointer to an array of two pointers giving the start of the two 
-*        arrays to receive the values for each of the two axes of the graphics
-*        coordinate data.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of points in the grid. If "disk" is zero, this will be
-*     the square of "dim". If "disk" is non-zero, this will be less than
-*     the square of "dim" to account for the lack of corner points.
-
-*/
-
-/* Local Variables: */
-   double *px;
-   double *py;
-   double cen;
-   double dx;      
-   double dy2;
-   double dy;
-   double dx2;
-   double r2;
-   double y;
-   int i;
-   int j;
-   int ok; 
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Find the cell size. */
-   dx = ( xhi - xlo )/(double)( dim - 1 );
-   dy = ( yhi - ylo )/(double)( dim - 1 );
- 
-/* Store the mid cell index. */
-   cen = 0.5*( dim - 1 );
-
-/* Store the squared radius of the disk. */
-   r2 = 1.9*cen*cen;
-
-/* Initialise pointers to the start of the two arrays to recieve the 
-   returned graphics values for each axis. */
-   px = ptr1[ 0 ];
-   py = ptr1[ 1 ];
-
-/* Loop round row. */
-   for( j = 0; j < dim; j++ ){
-      dy2 = j - cen;
-      dy2 *= dy2;
-
-/* Get the Y coordinate of the current row. */
-      y = ylo + j*dy;
-
-/* Loop round each column in the current row. */
-      for( i = 0; i < dim; i++ ){
-
-/* If we are forming a disk rather than a square, check if this point is
-   sufficiently close to the centre to be included in the disk. */
-         if( disk ) {
-            dx2 = i - cen;
-            dx2 *= dx2;
-            ok = ( dx2 + dy2 <= r2 );
-         } else {
-            ok = 1;
-         }
-
-/* Store the coordinates of the current grid point. */
-         if( ok ) {
-            *(px++) = xlo + i*dx;
-            *(py++) = y;
-         }
-      }
-   }
-
-/* Return the used length of the PointSet. */
-   return (int)( px - ptr1[ 0 ] );
-}
-
-static void GrfPop( AstPlot *this, int *status ) {
-/*
-*++
-*  Name:
-c     astGrfPop
-f     AST_GRFPOP
-
-*  Purpose:
-*     Restore previously saved graphics functions used by a Plot.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astGrfPop( AstPlot *this )
-f     CALL AST_GRFPOP( THIS STATUS )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-c     This function restores a snapshot of the graphics functions
-c     stored previously by calling astGrfPush. The restored graphics
-c     functions become the current graphics functions used by the Plot.
-*
-c     The astGrfPush and astGrfPop functions are intended for situations
-c     where it is necessary to make temporary changes to the graphics
-c     functions used by the Plot. The current functions should first be
-c     saved by calling astGrfPush. New functions should then be registered
-c     using astGrfSet. The required graphics should then be produced.
-c     Finally, astGrfPop should be called to restore the original graphics
-c     functions.
-f     The AST_GRFPUSH and AST_GRFPOP functions are intended for situations
-f     where it is necessary to make temporary changes to the graphics
-f     functions used by the Plot. The current functions should first be
-f     saved by calling AST_GRFPUSH. New functions should then be registered
-f     using AST_GRFSET. The required graphics should then be produced.
-f     Finally, AST_GRFPOP should be called to restore the original graphics
-f     functions.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-f     - This routine returns without action if there are no snapshots to
-c     - This function returns without action if there are no snapshots to
-*     restore. No error is reported in this case.
-
-*--
-*/
-
-/* Local Variables: */
-   AstGrfPtrs *newframe;         /* Pointer to the stack frame to restore */
-   int i;                        /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check the stack is not already empty. */
-   if( this->grfnstack > 0 ) {
-      this->grfnstack--;
-   
-      if( astOK ) {
-         newframe = this->grfstack + this->grfnstack;
-   
-         for( i = 0; i < AST__NGRFFUN; i++ ) {
-            this->grffun[i] = (newframe->grffun)[i];
-         }
-         this->GAttr = newframe->GAttr;
-         this->GFlush = newframe->GFlush;
-         this->GLine = newframe->GLine;
-         this->GMark = newframe->GMark;
-         this->GText = newframe->GText;
-         this->GCap = newframe->GCap;
-         this->GTxExt = newframe->GTxExt;
-         this->GScales = newframe->GScales;
-         this->GQch = newframe->GQch;
-      }
-   }
-}
-
-static void GrfPush( AstPlot *this, int *status ) {
-/*
-*++
-*  Name:
-c     astGrfPush
-f     AST_GRFPUSH
-
-*  Purpose:
-*     Save the current graphics functions used by a Plot.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astGrfPush( AstPlot *this )
-f     CALL AST_GRFPUSH( THIS STATUS )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-c     This function takes a snapshot of the graphics functions which are
-f     This routine takes a snapshot of the graphics functions which are
-*     currently registered with the supplied Plot, and saves the snapshot
-*     on a first-in-last-out stack within the Plot. The snapshot can be
-*     restored later using function 
-c     astGrfPop.
-f     AST_GRFPOP.
-*
-c     The astGrfPush and astGrfPop functions are intended for situations
-c     where it is necessary to make temporary changes to the graphics
-c     functions used by the Plot. The current functions should first be
-c     saved by calling astGrfPush. New functions should then be registered
-c     using astGrfSet. The required graphics should then be produced.
-c     Finally, astGrfPop should be called to restore the original graphics
-c     functions.
-f     The AST_GRFPUSH and AST_GRFPOP functions are intended for situations
-f     where it is necessary to make temporary changes to the graphics
-f     functions used by the Plot. The current functions should first be
-f     saved by calling AST_GRFPUSH. New functions should then be registered
-f     using AST_GRFSET. The required graphics should then be produced.
-f     Finally, AST_GRFPOP should be called to restore the original graphics
-f     functions.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*--
-*/
-
-/* Local Variables: */
-   AstGrfPtrs *newframe;         /* Pointer to the new stack frame */
-   int i;                        /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Increment the number of frames on the stack. */
-   this->grfnstack++;
-
-/* Ensure the stack is large enough to hold this many frames. */
-   this->grfstack = (AstGrfPtrs *) astGrow( (void *) this->grfstack, 
-                     this->grfnstack, sizeof( AstGrfPtrs ) );
-   if( astOK ) {
-
-/* Get a pointer to the new stack frame. */
-      newframe = this->grfstack + this->grfnstack - 1;
-
-/* Copy the graphics function pointers from the main Plot attributes
-   to the new stack frame. */
-      for( i = 0; i < AST__NGRFFUN; i++ ) {
-         (newframe->grffun)[i] = this->grffun[i];
-      }
-      newframe->GAttr = this->GAttr;
-      newframe->GFlush = this->GFlush;
-      newframe->GLine = this->GLine;
-      newframe->GMark = this->GMark;
-      newframe->GText = this->GText;
-      newframe->GCap = this->GCap;
-      newframe->GTxExt = this->GTxExt;
-      newframe->GQch = this->GQch;
-      newframe->GScales = this->GScales;
-   }
-}
-
-static void GrfSet( AstPlot *this, const char *name, AstGrfFun fun, int *status ){
-/*
-*++
-*  Name:
-c     astGrfSet
-f     AST_GRFSET
-
-*  Purpose:
-c     Register a graphics function for use by a Plot.
-f     Register a graphics routine for use by a Plot.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astGrfSet( AstPlot *this, const char *name, AstGrfFun fun )
-f     CALL AST_GRFSET( THIS, NAME, FUN, STATUS )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-c     This function can be used to select the underlying graphics 
-c     functions to be used when the supplied Plot produces graphical output.
-c     If this function is not called prior to producing graphical
-c     output, then the underlying graphics functions selected at
-c     link-time (using the ast_link command) will be used. To use
-c     alternative graphics functions, call this function before
-c     the graphical output is created, specifying the graphics
-c     functions to be used. This will register the function for future
-c     use, but the function will not actually be used until the Grf 
-c     attribute is given a non-zero value.
-f     This routine can be used to select the underlying graphics 
-f     routines to be used when the supplied Plot produces graphical output.
-f     If this routine is not called prior to producing graphical
-f     output, then the underlying graphics routines selected at
-f     link-time (using the ast_link command) will be used. To use
-f     alternative graphics routines, call this routine before
-f     the graphical output is created, specifying the graphics
-f     routines to be used. This will register the routine for future
-f     use, but the routine will not actually be used until the Grf 
-f     attribute is given a non-zero value.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     name 
-f     NAME = CHARACTER * ( * ) (Given)
-c        A name indicating the graphics function to be replaced.
-c        Various graphics functions are used by the
-c        Plot class, and any combination of them may be supplied by calling
-c        this function once for each function to be replaced. If any of the 
-c        graphics functions are not replaced in this way, the 
-c        corresponding functions in the graphics interface selected at 
-c        link-time (using the ast_link command) are used. The allowed
-c        names are: 
-f        A name indicating the graphics routine to be replaced.
-f        Various graphics routines are used by the
-f        Plot class, and any combination of them may be supplied by calling
-f        this routine once for each routine to be replaced. If any of the 
-f        graphics routines are not replaced in this way, the 
-f        corresponding routines in the graphics interface selected at 
-f        link-time (using the ast_link command) are used. The allowed
-f        function names are: 
-*
-*        - Attr -  Enquire or set a graphics attribute value
-*        - Cap -  Inquire a capability
-*        - Flush - Flush all pending graphics to the output device
-*        - Line - Draw a polyline (i.e. a set of connected lines)
-*        - Mark -  Draw a set of markers
-*        - Qch -  Return the character height in world coordinates
-*        - Scales -  Get the axis scales
-*        - Text - Draw a character string
-*        - TxExt -  Get the extent of a character string
-*        
-*        The string is case insensitive. For details of the interface 
-*        required for each, see the sections below.
-c     fun
-f     FUN = INTEGER FUNCTION (Given)
-c        A Pointer to the function to be used to provide the
-c        functionality indicated by parameter name. The interface for
-c        each function is described below, but the function pointer should 
-c        be cast to a type of AstGrfFun when calling astGrfSet.
-f        The name of the routine to be used to provide the
-f        functionality indicated by parameter NAME (the name
-f        should also appear in a Fortran EXTERNAL statement in the
-f        routine which invokes AST_GRFSET). 
-*
-c        Once a function has been provided, a null pointer can be supplied 
-c        in a subsequent call to astGrfSet to reset the function to the 
-c        corresponding function in the graphics interface selected at
-c        link-time.
-f        Once a routine has been provided, the "null" routine AST_NULL can 
-f        be supplied in a subsequent call to astGrfSet to reset the routine 
-f        to the corresponding routine in the graphics interface selected at
-f        link-time. AST_NULL is defined in the AST_PAR include file.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Function Interfaces:
-*     All the functions listed below (except for "Cap") should return an 
-*     integer value of 0 if an error occurs, and 1 otherwise. All x and y 
-*     values refer
-f     to "graphics cordinates" as defined by the GRAPHBOX parameter of
-f     the AST_PLOT call which created the Plot.
-c     to "graphics cordinates" as defined by the graphbox parameter of
-c     the astPlot call which created the Plot.
-*
-c     The first parameter ("grfcon")
-f     The first argument (GRFCON)
-*     for each function is an AST KeyMap pointer that can be used by the
-*     called function to establish the context in which it is being called.
-*     The contents of the KeyMap are determined by the calling
-*     application, which should obtain a pointer to the KeyMap using the
-f     AST_GETGRFCONTEXT routine,
-c     astGetGrfContext function,
-*     and then store any necessary information in the KeyMap using the
-*     methods of the KeyMap class. Note, the functions listed below
-*     should never annul or delete the supplied KeyMap pointer.
-
-*  Attr:
-*     The "Attr" function returns the current value of a specified graphics
-*     attribute, and optionally establishes a new value. The supplied
-*     value is converted to an integer value if necessary before use.
-*     It requires the following interface:
-*
-c     int Attr( AstObject *grfcon, int attr, double value, double *old_value, int prim )
-f     INTEGER FUNCTION ATTR( GRFCON, ATT, VAL, OLDVAL, PRIM )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - attr - An integer value identifying the required attribute. 
-c       The following symbolic values are defined in grf.h:
-f     - ATT = INTEGER (Given) - An integer identifying the required attribute. 
-f       The following symbolic values are defined in GRF_PAR:
-*       GRF__STYLE (Line style),
-*       GRF__WIDTH (Line width),
-*       GRF__SIZE (Character and marker size scale factor),
-*       GRF__FONT (Character font),
-*       GRF__COLOUR (Colour index).
-c     - value - 
-f     - VAL = DOUBLE PRECISION (Given) - 
-c       A new value to store for the attribute. If this is AST__BAD
-*       no value is stored.
-c     - old_value - A pointer to a double in which to return 
-f     - OLDVAL = DOUBLE PRECISION (Returned) - Returned holding
-*       the attribute value.
-c       If this is NULL, no value is returned.
-c     - prim -
-f     - PRIM = INTEGER (Given) -
-*       The sort of graphics primitive to be drawn with the new attribute.
-c       Identified by the following values defined in grf.h:
-f       Identified by the following values defined in GRF_PAR:
-*       GRF__LINE,
-*       GRF__MARK,
-*       GRF__TEXT.
-
-*  Cap:
-*     The "Cap" function is called to determine if the grf module has a 
-*     given capability, as indicated by the "cap" argument:
-*
-c     int Cap( AstObject *grfcon, int cap, int value )
-f     INTEGER FUNCTION CAP( GRFCON, CAP, VALUE )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - cap - 
-f     - CAP = INTEGER (Given)
-*        The capability being inquired about. This will be one of the
-c        following constants defined in grf.h:
-f        following constants defined in GRF_PAR:
-*
-*        GRF__SCALES: This function should return a non-zero value if the
-*        "Scales" function is implemented, and zero otherwise. The supplied 
-c        "value" argument should be ignored.
-f        VALUE argument should be ignored.
-*
-*        GRF__MJUST: This function should return a non-zero value if 
-*        the "Text" and "TxExt" functions recognise "M" as a 
-*        character in the justification string. If the first character of
-*        a justification string is "M", then the text should be justified
-*        with the given reference point at the bottom of the bounding box. 
-*        This is different to "B" justification, which requests that the
-*        reference point be put on the baseline of the text, since some 
-*        characters hang down below the baseline. If the "Text" or
-*        "TxExt" function cannot differentiate between "M" and "B",
-*        then this function should return zero, in which case "M"
-*        justification will never be requested by Plot. The supplied
-c        "value" argument should be ignored.
-f        VALUE argument should be ignored.
-*
-*        GRF__ESC: This function should return a non-zero value if the
-*        "Text" and "TxExt" functions can recognise and interpret
-*        graphics escape sequences within the supplied string (see
-*        attribute Escape). Zero should be returned if escape sequences 
-*        cannot be interpreted (in which case the Plot class will interpret 
-c        them itself if needed). The supplied "value" argument should be 
-f        them itself if needed). The supplied VALUE argument should be 
-*        ignored only if escape sequences cannot be interpreted by "Text" and 
-c        "TxExt". Otherwise, "value" indicates whether "Text" and "TxExt" 
-c        should interpret escape sequences in subsequent calls. If "value" is 
-f        "TxExt". Otherwise, VALUE indicates whether "Text" and "TxExt" 
-f        should interpret escape sequences in subsequent calls. If VALUE is 
-*        non-zero then escape sequences should be interpreted by "Text" and
-*        "TxExt". Otherwise, they should be drawn as literal text.
-*
-c     - value - 
-f     - VALUE = INTEGER (Given)
-c        The use of this parameter depends on the value of "cap" as
-f        The use of this parameter depends on the value of CAP as
-*        described above.
-
-*     - Returned Function Value: 
-c        The value returned by the function depends on the value of "cap"
-f        The value returned by the function depends on the value of CAP
-*        as described above. Zero should be returned if the supplied 
-*        capability is not recognised.
-
-*  Flush:
-*     The "Flush" function ensures that the display device is up-to-date,
-*     by flushing any pending graphics to the output device. It
-*     requires the following interface:
-*
-c     int Flush( AstObject *grfcon )
-f     INTEGER FUNCTION FLUSH( GRFCON )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-
-*  Line:
-*     The "Line" function displays lines joining the given positions and 
-*     requires the following interface:
-*
-c     int Line( AstObject *grfcon, int n, const float *x, const float *y )
-f     INTEGER FUNCTION LINE( GRFCON, N, X, Y )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - n - The number of positions to be joined together.
-f     - N = INTEGER (Given) - The number of positions to be joined together.
-c     - x - A pointer to an array holding the "n" x values.
-f     - X( N ) = REAL (Given) - An array holding the "n" x values.
-c     - y - A pointer to an array holding the "n" y values.
-f     - Y( N ) = REAL (Given) - An array holding the "n" y values.
-     
-*  Mark:
-*     The "Mark" function displays markers at the given positions. It 
-*     requires the following interface:
-*
-c     int Mark( AstObject *grfcon, int n, const float *x, const float *y, int type )
-f     INTEGER FUNCTION MARK( GRFCON, N, X, Y, TYPE )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - n - The number of positions to be marked.
-f     - N = INTEGER (Given) - The number of positions to be marked.
-c     - x - A pointer to an array holding the "n" x values.
-f     - X( N ) = REAL (Given) - An array holding the "n" x values.
-c     - y - A pointer to an array holding the "n" y values.
-f     - Y( N ) = REAL (Given) - An array holding the "n" y values.
-c     - type - An integer which can be used to indicate the type of marker
-c       symbol required.
-f     - TYPE = INTEGER (Given) - An integer which can be used to indicate 
-f       the type of marker symbol required.
-
-*  Qch:
-*     The "Qch" function returns the heights of characters drawn vertically 
-*     and horizontally in graphics coordinates. It requires the following 
-*     interface:
-*
-c     int Qch( AstObject *grfcon, float *chv, float *chh )
-f     INTEGER FUNCTION QCH( GRFCON, CHV, CHH )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - chv - A pointer to the float which is to receive the height of
-f     - CHV = REAL (Returned) The height of
-*     characters drawn with a vertical baseline. This will be an 
-*     increment in the X axis.
-c     - chh - A pointer to the float which is to receive the height of
-f     - CHH = REAL (Returned) The height of
-*     characters drawn with a horizontal baseline. This will be an 
-*     increment in the Y axis.
-
-*  Scales:
-*     The "Scales" function returns two values (one for each axis) which 
-*     scale increments on the corresponding axis into a "normal" coordinate
-*     system in which: 1) the axes have equal scale in terms of (for instance)
-*     millimetres per unit distance, 2) X values increase from left to
-*     right, and 3) Y values increase from bottom to top. It requires the 
-*     following interface:
-*
-c     int Scales( AstObject *grfcon, float *alpha, float *beta )
-f     INTEGER FUNCTION SCALES( GRFCON, ALPHA, BETA )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - alpha - A pointer to the float which is to receive the
-f     - ALPHA = REAL (Returned) The 
-*     scale for the X axis (i.e. Xnorm = alpha*Xworld).
-c     - beta - A pointer to the float which is to receive the
-f     - BETA = REAL (Returned) The 
-*     scale for the Y axis (i.e. Ynorm = beta*Yworld).
-
-*  Text:
-*     The "Text" function displays a character string at a given
-*     position using a specified justification and up-vector. It 
-*     requires the following interface:
-*
-c     int Text( AstObject *grfcon, const char *text, float x, float y, const char *just,
-c               float upx, float upy )
-f     INTEGER FUNCTION TEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - text - Pointer to a null-terminated character string to be displayed.
-f     - TEXT = CHARACTER * ( * ) (Given) - The string to be displayed.
-c     - x - The reference x coordinate.
-f     - X = REAL (Given) - The reference x coordinate.
-c     - y - The reference y coordinate.
-f     - Y = REAL (Given) - The reference y coordinate.
-c     - just - A character string which specifies the location within the
-f     - JUST = CHARACTER * ( * ) (Given ) - A string which specifies the 
-f        location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. Note, "bottom"
-*        corresponds to the base-line of normal text. Some characters 
-*        (eg "y", "g", "p", etc) descend below the base-line. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-c     - upx - The x component of the up-vector for the text.
-f     - UPX = REAL (Given) - The x component of the up-vector for the text.
-*        If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        left to right on the screen.
-c     - upy - The y component of the up-vector for the text.
-f     - UPX = REAL (Given) - The y component of the up-vector for the text.
-*        If necessary the supplied value should be negated
-*        to ensure that positive values always refer to displacements from 
-*        bottom to top on the screen.
-
-*  TxExt:
-*     The "TxExt" function returns the corners of a box which would enclose
-*     the supplied character string if it were displayed using the
-*     Text function described above. The returned box includes any leading 
-*     or trailing spaces. It requires the following interface:
-*
-c     int TxExt( AstObject *grfcon, const char *text, float x, float y, const char *just,
-c                float upx, float upy, float *xb, float *yb )
-f     INTEGER FUNCTION TXEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY, XB, YB )
-*
-c     - grfcon - 
-f     - GRFCON = INTEGER (Given) -
-*       A KeyMap containing information passed from the calling application.
-c     - text - Pointer to a null-terminated character string to be displayed.
-f     - TEXT = CHARACTER * ( * ) (Given) - The string to be displayed.
-c     - x - The reference x coordinate.
-f     - X = REAL (Given) - The reference x coordinate.
-c     - y - The reference y coordinate.
-f     - Y = REAL (Given) - The reference y coordinate.
-c     - just - A character string which specifies the location within the
-f     - JUST = CHARACTER * ( * ) (Given ) - A string which specifies the 
-f        location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. See "Text" above.
-c     - upx - The x component of the up-vector for the text.
-f     - UPX = REAL (Given) - The x component of the up-vector for the text.
-*        See "Text" above.
-c     - upy - The y component of the up-vector for the text.
-f     - UPX = REAL (Given) - The y component of the up-vector for the text.
-*        See "Text" above.
-c     - xb - An array of 4 elements in which to return the x coordinate of
-f     - XB( 4 ) = REAL (Returned) - Returned holding the x coordinate of
-*        each corner of the bounding box.
-c     - yb - An array of 4 elements in which to return the y coordinate of
-f     - YB( 4 ) = REAL (Returned) - Returned holding the y coordinate of
-*        each corner of the bounding box.
-
-*--
-*/
-
-/* Local Variables: */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   int ifun;               /* Index into grf function list */
-   void (* wrapper)();     /* Wrapper function for C Grf routine*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   wrapper = NULL;
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astGrfSet";
-   class = astClass( this );
-
-/* Identify the supplied function name and get its integer index into the
-   list of grf functions. */
-   ifun = astGrfFunID( name, method, class );
-
-/* Store the pointer. */
-   if( astOK ) {
-      this->grffun[ifun] = fun;
-
-/* In general, the interface to each Grf function will differ for
-   different languages. So we need a wrapper function with a known fixed
-   interface which can be used to invoke the actual Grf function with 
-   an interface suited to the language in use. Call astGrfWrapper to store 
-   a wrapper to a suitable function which can invoke the supplied
-   grf function. Here, we assume that the supplied function has a C
-   interface, so we set up a C wrapper. If this function is being called
-   from another language, then the interface for this function within
-   that language should set up an appropriate wrapper after calling this
-   function, thus over-riding the C wrapper set up here. */
-      if( ifun == AST__GATTR ) {
-         wrapper = (AstGrfWrap) CGAttrWrapper;
-
-      } else if( ifun == AST__GFLUSH ) {
-         wrapper = (AstGrfWrap) CGFlushWrapper;
-
-      } else if( ifun == AST__GLINE ) {
-         wrapper = (AstGrfWrap) CGLineWrapper;
-
-      } else if( ifun == AST__GMARK ) {
-         wrapper = (AstGrfWrap) CGMarkWrapper;
-
-      } else if( ifun == AST__GTEXT ) {
-         wrapper = (AstGrfWrap) CGTextWrapper;
-
-      } else if( ifun == AST__GCAP ) {
-         wrapper = (AstGrfWrap) CGCapWrapper;
-
-      } else if( ifun == AST__GTXEXT ) {
-         wrapper = (AstGrfWrap) CGTxExtWrapper;
-
-      } else if( ifun == AST__GSCALES ) {
-         wrapper = (AstGrfWrap) CGScalesWrapper;
-
-      } else if( ifun == AST__GQCH ) {
-         wrapper = (AstGrfWrap) CGQchWrapper;
-
-      } else if( astOK ) {
-         astError( AST__INTER, "%s(%s): AST internal programming error - "
-                   "Grf function id %d not yet supported.", status, method, class,
-                   ifun );
-      }
-      astGrfWrapper( this, name, wrapper );
-   }
-}
-
-int astGrfFunID_( const char *name, const char *method, const char *class, int *status ) {
-/*
-*+
-*  Name:
-*     astGrfFunID
-
-*  Purpose:
-*     Return the integer identifier for a given GRF routine.
-
-*  Type:
-*     Hidden public function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int astGrfFunID( const char *name, const char *method, 
-*                      const char *class )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function returns an integer identifying the named grf function.
-*     An error is reported if the named function is unknown. This function
-*     is used by non-class modules within AST (e.g. fplot.c) which is why
-*     it is public. It is not intended to be used by the public.
-
-*  Parameters:
-*     name 
-*        The grf function name. Any unambiguous abbreviation will do.
-*        Case is ignored. The full list of grf function names is:
-*        "Attr Scales Flush Line Mark Qch Text TxExt". See grf_pgplot.c
-*        for details of these functions.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*-
-*/
-
-/* Note that the list of identifiers here must be in the same order as the
-   sorted values of the constants AST__GATTR, AST__GFLUSH, etc */
-   return FullForm( "Attr Flush Line Mark Text TxExt Scales Qch Cap", name, 
-                    "Grf function name (programming error)", method, class, status );
-}
-
-static char *GrfItem( int item, const char *text, int *axis, int *status ){
-/*
-*  Name:
-*     GrfItem
-
-*  Purpose:
-*     Return the textual name corresponding to a specified graphical item
-*     index.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     char *GrfItem( int item, const char *text, int *axis, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function returns a textual description of the graphical item 
-*     with the supplied index.
-
-*  Parameters:
-*     item
-*        The index of the graphical item.
-*     text
-*        A pointer to a string which will be appended to the textual
-*        description of the graphical item. May be NULL.
-*     axis
-*        Pointer to a place in which to return the index (0,1, or 2) of
-*        the axis to which the attribute refers, If the attribute does
-*        not refer to a specific axis, -1 is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string holding the textual 
-*     description of the graphical item, followed by any supplied "text".
-
-*  Notes:
-*     - An error is reported and a NULL pointer returned if the 
-*     index does not correspond to any graphical item.
-*     - The returned pointer should be freed using astFree when it is no
-*     longer needed.
-*     - This function attempts to execute even if an error has already
-*     occurred.
-
-*/
-
-/* Local Variables: */
-   char *desc;              /* Pointer to the item description */
-   char *ret;               /* Pointer to the returned string */
-   int dlen;                /* Length of the item description */
-
-   if( axis ) *axis = -1;
-
-   if( item == AST__BORDER_ID ) {         
-      desc = "Border";
-
-   } else if ( item == AST__GRIDLINE_ID ) {     
-      desc = "Gridline";
-
-   } else if ( item == AST__GRIDLINE1_ID ) {     
-      desc = "Axis 1 gridline";
-      if( axis ) *axis = 0;
-
-   } else if ( item == AST__GRIDLINE2_ID ) {     
-      desc = "Axis 2 gridline";
-      if( axis ) *axis = 1;
-
-   } else if ( item == AST__GRIDLINE3_ID ) {     
-      desc = "Axis 3 gridline";
-      if( axis ) *axis = 2;
-
-   } else if ( item == AST__CURVE_ID ) {        
-      desc = "Curve";
-
-   } else if ( item == AST__NUMLABS_ID ) {      
-      desc = "Numerical labels";
-
-   } else if ( item == AST__TEXTLABS_ID ) {     
-      desc = "Textual labels";
-
-   } else if ( item == AST__TITLE_ID ) {        
-      desc = "Title";
-
-   } else if ( item == AST__MARKS_ID ) {        
-      desc = "Markers";
-
-   } else if ( item == AST__TEXT_ID ) {         
-      desc = "Text string";
-
-   } else if ( item == AST__TICKS_ID ) {        
-      desc = "Major and minor ticks";
-
-   } else if ( item == AST__AXIS1_ID ) {         
-      desc = "Axis 1";
-      if( axis ) *axis = 0;
-
-   } else if ( item == AST__AXIS2_ID ) {         
-      desc = "Axis 2";
-      if( axis ) *axis = 1;
-
-   } else if ( item == AST__AXIS3_ID ) {         
-      desc = "Axis 3";
-      if( axis ) *axis = 2;
-
-   } else if ( item == AST__NUMLAB1_ID ) {         
-      desc = "Axis 1 numerical labels";
-      if( axis ) *axis = 0;
-
-   } else if ( item == AST__NUMLAB2_ID ) {         
-      desc = "Axis 2 numerical labels";
-      if( axis ) *axis = 1;
-
-   } else if ( item == AST__NUMLAB3_ID ) {         
-      desc = "Axis 3 numerical labels";
-      if( axis ) *axis = 2;
-
-   } else if ( item == AST__TEXTLAB1_ID ) {         
-      desc = "Axis 1 textual label";
-      if( axis ) *axis = 0;
-
-   } else if ( item == AST__TEXTLAB2_ID ) {         
-      desc = "Axis 2 textual label";
-      if( axis ) *axis = 1;
-
-   } else if ( item == AST__TEXTLAB3_ID ) {         
-      desc = "Axis 3 textual label";
-      if( axis ) *axis = 2;
-
-   } else if ( item == AST__TICKS1_ID ) {         
-      desc = "Axis 1 tick marks";
-      if( axis ) *axis = 0;
-
-   } else if ( item == AST__TICKS2_ID ) {         
-      desc = "Axis 2 tick marks";
-      if( axis ) *axis = 1;
-
-   } else if ( item == AST__TICKS3_ID ) {         
-      desc = "Axis 3 tick marks";
-      if( axis ) *axis = 2;
-
-   } else {
-      desc = NULL;
-      if( astOK ){
-         astError( AST__INTER, "GrfItem: AST internal programming error - "
-                   "Invalid graphical item index %d supplied to GrfItem.", status,
-                   item );
-      }
-   }
-
-   if( desc ) {
-      dlen = strlen( desc );
-
-      if( text ) {
-         ret = astStore( NULL, desc, dlen + strlen( text ) + 1 );
-         if( ret ) strcpy( ret + dlen, text );
-      } else {
-         ret = astStore( NULL, desc, dlen + 1 );
-      }
-
-   } else {
-      ret = NULL;
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static void GrfWrapper( AstPlot *this, const char *name, AstGrfWrap wrapper, int *status ) {
-/*
-*+
-*  Name:
-*     astGrfWrapper
-
-*  Purpose:
-*     Register a wrapper function for a F77 or C Grf function.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void astGrfWrapper( AstPlot *this, const char *name, AstGrfWrap wrapper)
-
-*  Description:
-*     This function stores a pointer to the supplied wrapper function
-*     within the plot, associating it with the grf function indicated by
-*     the "name" parameter. The supplied wrapper function should call the 
-*     named grf function, using an interface appropriate to the language
-*     in which the grf function is written.
-
-*  Parameters:
-*     this
-*        The plot.
-*     name
-*        A name indicating the graphics function which is called by the
-*        supplied wrapper function. See astGrfSet for details.
-*     wrapper
-*        A pointer to the wrapper function. This will be cast to a
-*        specific type for the named grf function before being store 
-*        in the Plot.
-*-
-*/
-
-/* Local Variables: */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   int ifun;               /* Index into grf function list */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astGrfWrapper";
-   class = astClass( this );
-
-/* Identify the supplied function name and get its integer index into the
-   list of grf functions. */
-   ifun = astGrfFunID( name, method, class );
-
-/* Cast the wrapper to an interface appropriate for the wrapped grf
-   function, and store it in the appropriate component of the Plot. */
-   if( ifun == AST__GATTR ) {
-      this->GAttr = (AstGAttrWrap) wrapper;
-
-   } else if( ifun == AST__GFLUSH ) {
-      this->GFlush = (AstGFlushWrap) wrapper; 
-
-   } else if( ifun == AST__GLINE ) {
-      this->GLine = (AstGLineWrap) wrapper; 
-
-   } else if( ifun == AST__GMARK ) {
-      this->GMark = (AstGMarkWrap) wrapper;
-
-   } else if( ifun == AST__GTEXT ) {
-      this->GText = (AstGTextWrap) wrapper;
-
-   } else if( ifun == AST__GCAP ) {
-      this->GCap = (AstGCapWrap) wrapper;
-
-   } else if( ifun == AST__GTXEXT ) {
-      this->GTxExt = (AstGTxExtWrap) wrapper;
-
-   } else if( ifun == AST__GSCALES ) {
-      this->GScales = (AstGScalesWrap) wrapper;
-
-   } else if( ifun == AST__GQCH ) {
-      this->GQch = (AstGQchWrap) wrapper;
-
-   } else if( astOK ) {
-      astError( AST__INTER, "%s(%s): AST internal programming error - "
-                "Grf function id %d not yet supported.", status, method, class,
-                ifun );
-   }
-}
-
-static void Grid( AstPlot *this_nd, int *status ){
-/*
-*++
-*  Name:
-c     astGrid
-f     AST_GRID
-
-*  Purpose:
-*     Draw a set of labelled coordinate axes. 
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astGrid( AstPlot *this )
-f     CALL AST_GRID( THIS, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function draws a complete annotated set of 
-f     This routine draws a complete annotated set of 
-*     coordinate axes for a Plot with (optionally) a coordinate grid
-*     superimposed. Details of the axes and grid can be controlled by
-*     setting values for the various attributes defined by the Plot
-*     class (q.v.).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - If the supplied Plot is a Plot3D, the axes will be annotated
-*     using three 2-dimensional Plots, one for each 2D plane in the 3D 
-*     current coordinate system. The plots will be "pasted" onto 3 faces
-*     of the cuboid graphics volume specified when the Plot3D was
-*     constructed. The faces to be used can be controlled by the "RootCorner"
-*     attribute.
-*     - An error results if either the current Frame or the base Frame
-*     of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-*     - An error also results if the transformation between the base
-*     and current Frames of the Plot is not defined in either
-*     direction (i.e. the Plot's TranForward or TranInverse attribute
-*     is zero).
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   AstPlot *this;          /* Plot with 2d current Frame */
-   AstPlotCurveData **cdata;/* Pointer to info. about breaks in curves */
-   TickInfo **grid;        /* Pointer to info. about tick marks */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   double cen[ 2 ];        /* Position of first tick mark */
-   double gap[ 2 ];        /* Gap between tick marks */
-   double labelat[ 2 ];    /* Axis values at which tick marks are put */
-   int axis;               /* Physical axis index */
-   int border;             /* Draw a border? */
-   int clip;               /* Original Clip attribute value */
-   int dounits[2];         /* Include Units in each axis label? */
-   int drawgrid;           /* Is a grid of lines to be drawn? */
-   int clredge;            /* Clear the Edge attributes before returning? */
-   int edgeticks;          /* Draw labels round edges of plotting area? */
-   int escs;               /* Original astEscapes value */
-   int ink;                /* Draw the grid with visible ink? */
-   int inval;              /* Were areas of invalid coordinates found? */
-   int loglabelset[2];     /* Were the LogLabel attributes set initially? */
-   int logticksset[2];     /* Were the LogTicks attributes set initially? */
-   int naxes;              /* No. of axes in the base or current Frame */
-   int oldedge0;           /* Default value for Edge(1) */
-   int oldedge1;           /* Default value for Edge(2) */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_nd);
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astGrid";
-   class = astClass( this_nd );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this_nd );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Ensure AST functions included graphical escape sequences in any
-   returned text strings. */
-   escs = astEscapes( 1 );
-
-/* Note if attributes which have complex dynamic defaults are set
-   initially. */
-   logticksset[0] = astTestLogTicks( this_nd, 0 );
-   logticksset[1] = astTestLogTicks( this_nd, 1 );
-   loglabelset[0] = astTestLogLabel( this_nd, 0 );
-   loglabelset[1] = astTestLogLabel( this_nd, 1 );
-
-/* Get a Plot with a 2D (or 1D) current Frame. */
-   this = (AstPlot *) Fset2D( (AstFrameSet *) this_nd, AST__CURRENT, status );
-
-/* Check the current Frame of the Plot is 2-D. */
-   naxes = astGetNout( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Ensure that all lines are clipped at the plot boundary.*/
-   if( astTestClip( this ) ) {
-      clip = astGetClip( this );
-      astSetClip( this, 1 );
-   } else {      
-      clip = -1;
-   }
-
-/* If the protected attribute "Ink" is set to zero, then the plot
-   is drawn in "invisble ink" (i.e. all the calculations needed to
-   produce the grid are performed, but nothing is actually drawn). */
-   ink = astGetInk( this );   
-
-/* Initialise the bounds of the box containing all plotted lines and
-   numerical labels. */
-   Box_lbnd[ 0 ] = FLT_MAX;
-   Box_lbnd[ 1 ] = FLT_MAX;
-   Box_ubnd[ 0 ] = FLT_MIN;
-   Box_ubnd[ 1 ] = FLT_MIN;
-
-/* Obtain the requested centre attribute values for both physical axes. */
-   for( axis = 0; axis < 2; axis++ ){
-      cen[ axis ] = astGetCentre( this, axis );
-   }
-
-/* Determine where to put the major axis values. */
-   grid = GridLines( this, cen, gap, &inval, method, class, status );
-
-/* If the user has set an explicit value for Grid, use it. */
-   if( astTestGrid( this ) ){
-      drawgrid = astGetGrid( this );
-
-/* If not, the default for Grid is based on whether or not there are any 
-   invalid regions. */
-   } else if( inval ){
-      drawgrid = 1;
-
-   } else {
-      drawgrid = 0;
-   }
-
-/* Draw the curves marking the major tick values on each axis. Information
-   is returned describing the positions of the breaks in these curves. */
-   cdata = DrawGrid( this, grid, ( ink && drawgrid ), method, class, status );
-
-/* See if labels and tick marks will be drawn round the edges of the
-   plotting area, rather than within it (no labels are actually drawn
-   yet). Interior labels can always be produced, in which case edgeticks
-   is set explicitly to zero to indicate that ticks will be internal.
-   Exterior labelling may or may not be possible. If it is requested,
-   check to see if it is possible. */
-   clredge = 0;
-   if( astGetLabelling( this ) ){
-      edgeticks = 0;
-   } else {
-      edgeticks = EdgeLabels( this, 0, grid, cdata, 0, method, class, status );
-
-/* If the external labelling was requested, but could not be produced... */
-      if( !edgeticks ) {
-
-/* and if the Edge attributes have not been set... */
-         if( !astTestEdge( this, 0 ) && !astTestEdge( this, 1 ) ) {
-
-/* Try flipping the default Edge values, to see if this allows us to
-   honour the requested Labelling scheme. */
-            oldedge0 = astGetEdge( this, 0 );
-            oldedge1 = astGetEdge( this, 1 );
-            astSetEdge( this, 0, oldedge1 );
-            astSetEdge( this, 1, oldedge0 );
-
-/* See if exterior labels could be drawn with these new edges. */
-            edgeticks = EdgeLabels( this, 0, grid, cdata, 0, method, class, status );
-
-/* If this would allow us to use the requested labelling scheme, retain
-   the new Edge values, setting a flag to indicate that they will need to be
-   cleared before returning. Otherwise, clear them. */
-            if( edgeticks ) {
-               clredge = 1;
-
-            } else {
-               astClearEdge( this, 0 );
-               astClearEdge( this, 1 );
-            }
-         }
-      }
-   }
-
-/* If edge ticks can still not be produced, but the ForceExterior attribute 
-   has a non-zero value, attempt to create exterior labels even though it 
-   looks like there may be insufficient of them to justify their use. */
-   if( !edgeticks && astGetForceExterior( this ) ) {
-      edgeticks = EdgeLabels( this, 0, grid, cdata, 1, method, class, status );
-   }
-
-/* We may also need to swap edge values when using interior labelling in
-   order to ensure that the text labels are placed on appropriate edges of
-   the plotting box. */
-   if( !edgeticks && !astTestEdge( this, 0 ) && !astTestEdge( this, 1 ) ) {
-      if( swapEdges( this, grid, cdata, status ) ) {
-         oldedge0 = astGetEdge( this, 0 );
-         oldedge1 = astGetEdge( this, 1 );
-         astSetEdge( this, 0, oldedge1 );
-         astSetEdge( this, 1, oldedge0 );
-         clredge = 1;
-      }
-   }
-
-/* If edge ticks are being used, store bad values for the labelat values to 
-   indicate that labels are not being drawn within the interior of the 
-   plotting area. */
-   if( edgeticks ){
-      labelat[ 0 ] = AST__BAD;
-      labelat[ 1 ] = AST__BAD;
-
-/* Otherwise, see where interior labels and tick marks should go (the axis
-   values are put in "labelat"). */
-   } else {
-      Labelat( this, grid, cdata, labelat, method, class, status );
-   }
-
-/* See if a border is required. By default, a border is drawn only when
-   using exterior labelling. */
-   if( astTestBorder( this ) ) {
-      border = astGetBorder( this );
-   } else {
-      border = edgeticks;
-   }
-
-/* See if the Units string is to be inluded in the label. */
-   dounits[ 0 ] =  astGetLabelUnits( this, 0 );
-   dounits[ 1 ] =  astGetLabelUnits( this, 1 );
-
-/* The rest is not done if no output is required. */
-   if( ink ) {
-
-/* Draw tick marks (major and minor). */
-      DrawTicks( this, grid, drawgrid, labelat, gap, method, class, status );
-
-/* If required, ensure that curves through the tick marks have been drawn */
-      DrawAxis( this, grid, labelat, gap, method, class, status );
-
-/* If required, draw a curve around the edge of the area containing valid 
-   physical coordinates. */
-      if( border ) (void) astBorder( this );
-
-/* Draw the numerical labels at the major tick values. */
-      Labels( this, grid, cdata, gap, labelat, method, class, status );
-
-/* Draw the textual labels for each axis and a title. */
-      TextLabels( this, edgeticks, dounits, method, class, status );
-   }
-
-/* Store the actual values used for all attributes which have dynamic 
-   defaults. Check the global status to ensure the pointer "grid" can be
-   used without the possibility of a segmentation violation. */
-   for( axis = 0; axis < 2 && astOK ; axis++ ) {
-      SetUsedLogTicks( this_nd, axis, astGetLogTicks( this, axis ), status );
-      SetUsedLogLabel( this_nd, axis, astGetLogLabel( this, axis ), status );
-
-      if( astGetLogTicks( this, axis ) ) {
-         SetUsedLogGap( this_nd, axis, gap[ axis ], status );
-      } else {
-         SetUsedGap( this_nd, axis, gap[ axis ], status );
-      }
-      SetUsedCentre( this_nd, axis, cen[ axis ], status );
-      SetUsedEdge( this_nd, axis, astGetEdge( this, axis ), status );
-      SetUsedLabelAt( this_nd, axis, labelat[ axis ], status );
-      SetUsedLabelUnits( this_nd, axis, dounits[ axis ], status );
-
-/* If explicit minor tick values were supplied using astSetTickValues,
-   then set MinTick to the average number of minor tick divisions per major
-   tick division. */
-      if( grid[ axis ]->minticks ) {
-         SetUsedMinTick( this_nd, axis, 
-                         ( grid[ axis ]->nminor + grid[ axis ]->nmajor )/
-                         ( grid[ axis ]->nmajor - 1 ), status );
-      } else {
-         SetUsedMinTick( this_nd, axis, grid[ axis ]->nminor, status );
-      }
-
-      if( astTestTextLab( this, axis ) ) {
-         SetUsedTextLab( this_nd, axis, astGetTextLab( this, axis ), status );
-      } else {
-         SetUsedTextLab( this_nd, axis, edgeticks, status );
-      }
-      
-      if( astTestMajTickLen( this, axis ) ) {
-         SetUsedMajTickLen( this_nd, axis, astGetMajTickLen( this, axis ), status );
-      } else {
-         SetUsedMajTickLen( this_nd, axis, drawgrid ? 0.0 : 
-                                           astGetMajTickLen( this, axis ), status );
-      }
-
-   }
-
-   SetUsedGrid( this_nd, drawgrid, status );
-   SetUsedLabelling( this_nd, edgeticks ? 0 : 1, status );
-   SetUsedBorder( this_nd, border, status );
-
-/* Free the memory used to hold information about the curves. */
-   cdata = CleanCdata( cdata, status );
-
-/* Free the memory used to hold information about the tick marks. */
-   grid = CleanGrid( grid, status );
-
-/* If required clear attributes. */
-   if( clredge ) {
-      astClearEdge( this, 0 );
-      astClearEdge( this, 1 );
-   }
-
-   if( !logticksset[ 0 ] ) astClearLogTicks( this, 0 );
-   if( !logticksset[ 1 ] ) astClearLogTicks( this, 1 );
-   if( !loglabelset[ 0 ] ) astClearLogLabel( this, 0 );
-   if( !loglabelset[ 1 ] ) astClearLogLabel( this, 1 );
-
-/* Restore the original value of the Clip attribute. */
-   if( clip != -1 ) astSetClip( this, clip );
-
-/* Free the 2D Plot. */
-   this = astAnnul( this );
-
-/* Restore the original value of the flag which says whether graphical 
-   escape sequences should be incldued in any returned text strings. */
-   astEscapes( escs );
-
-/* Copy the total bounding box to the box which is returned by
-   astBoundingBox. */
-   if( !Boxp_freeze ){
-      Boxp_lbnd[ 0 ] = Box_lbnd[ 0 ];
-      Boxp_lbnd[ 1 ] = Box_lbnd[ 1 ];
-      Boxp_ubnd[ 0 ] = Box_ubnd[ 0 ]; 
-      Boxp_ubnd[ 1 ] = Box_ubnd[ 1 ]; 
-   }
-
-/* Return. */
-   return;
-
-}
-
-static void GridLine( AstPlot *this, int axis, const double start[], 
-                      double length, int *status ){
-/*
-*++
-*  Name:
-c     astGridLine
-f     AST_GRIDLINE
-
-*  Purpose:
-*     Draw a grid line (or axis) for a Plot.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astGridLine( AstPlot *this, int axis, const double start[], 
-c                       double length )
-f     CALL AST_GRIDLINE( THIS, AXIS, START, LENGTH, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function draws a curve in the physical coordinate system of
-f     This routine draws a curve in the physical coordinate system of
-*     a Plot by varying only one of the coordinates along the length
-*     of the curve. It is intended for drawing coordinate axes,
-*     coordinate grids, and tick marks on axes (but note that these
-c     are also available via the more comprehensive astGrid function).
-f     are also available via the more comprehensive AST_GRID routine).
-*
-*     The curve is transformed into graphical coordinate space for
-*     plotting, so that a straight line in physical coordinates may
-*     result in a curved line being drawn if the Mapping involved is
-*     non-linear. Any discontinuities in the Mapping between physical
-*     and graphical coordinates are catered for, as is any
-c     clipping established using astClip.
-f     clipping established using AST_CLIP.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     axis
-f     AXIS = INTEGER (Given)
-*        The index of the Plot axis whose physical coordinate value is
-*        to be varied along the length of the curve (all other
-*        coordinates will remain fixed). This value should lie in the
-*        range from 1 to the number of Plot axes (Naxes attribute).
-c     start
-f     START( * ) = DOUBLE PRECISION (Given)
-*        An array, with one element for each axis of the Plot, giving
-*        the physical coordinates of the start of the curve.
-c     length
-f     LENGTH = DOUBLE PRECISION (Given)
-*        The length of curve to be drawn, given as an increment along
-*        the selected physical axis. This may be positive or negative.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-c     - No curve is drawn if the "start" array contains any
-c     coordinates with the value AST__BAD, nor if "length" has this value.
-f     - No curve is drawn if the START array contains any
-f     coordinates with the value AST__BAD, nor if LENGTH has this value.
-*     - An error results if the base Frame of the Plot is not 2-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   int naxes;              /* No. of axes in the base Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astGridLine";
-   class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Initialise the bounding box for primatives produced by this call. */
-   if( !Boxp_freeze ) {
-      Boxp_lbnd[ 0 ] = FLT_MAX;
-      Boxp_lbnd[ 1 ] = FLT_MAX;
-      Boxp_ubnd[ 0 ] = FLT_MIN;
-      Boxp_ubnd[ 1 ] = FLT_MIN;
-   }
-
-/* Validate the axis index, converting the axis index to be zero-based. */
-   (void) astValidateAxis( this, axis - 1, method );
-
-/* Draw the curve. The break information is stored in an external structure
-   where it can be accessed by public methods which return information
-   about the most recently drawn curve. */
-   AxPlot( this, axis - 1, start, length, 1, &Curve_data, method, class, status );
-
-/* Return. */
-   return;
-
-}
-
-static TickInfo **GridLines( AstPlot *this, double *cen, double *gap, 
-                             int *inval, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     GridLines
-
-*  Purpose:
-*     Obtain information desribing the major tick values within the plotting 
-*     area.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     TickInfo **GridLines( AstPlot *this, double *cen, double *gap, 
-*                           int *inval, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     A pointer is returned which points to an array of two pointers. Each
-*     of these pointers points to a TickInfo structure which holds
-*     information about the ticks on a single axis. These structures,
-*     together with the array holding the two pointers, should be released
-*     when no longer needed using CleanGrid.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     cen
-*        A pointer to an array holding axis values at which to put a single 
-*        central tick. Other ticks are placed evenly on either side of this 
-*        tick. If AST__BAD is provided, a value will be used which would put a 
-*        tick at an axis value of zero.
-*     gap
-*        A pointer to an array holding the gaps between ticks required on
-*        each axis. If this is AST__BAD a suitable default value will be used
-*        and returned in place of the AST__BAD value.
-*     inval
-*        A pointer to a location at which to return a flag indicating if
-*        any invalid physical coordinates were encountered while deciding on 
-*        the tick values. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to an array of two TickInfo pointers.
-
-*  Notes:
-*     -  This function assumes that the physical coordinate system is 2 
-*     dimensional, and it should not be used if this is not the case.
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;          /* Pointer to current Frame */
-   GetTicksStatics *statics = NULL; /* Pointer to static data for GetTicks */
-   TickInfo **info;       /* Returned array of two TickInfo pointers */
-   double *lengths;       /* Pointer to lengths of each curve section */
-   double *starts;        /* Pointer to start of each curve section */
-   double *ticks;         /* Pointer to tick mark values */
-   double bot;            /* Lowest axis value to display */
-   double end;            /* Axis value at end of curve section */
-   double tmp;            /* Temp storage */
-   double top;            /* Highest axis value to display */
-   int i;                 /* Tick mark index */
-   int j;                 /* Axis index */
-   int k;                 /* Section index */
-   int logticks[ 2 ];     /* Uses logarithmicaly spaced tick marks? */
-   int nticks;            /* Number of tick marks */
-
-/* Check the global status. */
-   if( !astOK ) return NULL;
-
-/* Get memory to hold two TickInfo pointers. */
-   info = (TickInfo **) astMalloc( 2*sizeof( TickInfo *) );
-
-/* If succesfull... */
-   if( astOK ){
-
-/* Initialise the two pointers. */
-      info[ 0 ] = NULL;
-      info[ 1 ] = NULL;
-
-/* Obtain the tick mark values, and the corresponding formatted labels for
-   each axis. */
-      for( j = 0; j < 2; j++ ){
-         info[ j ] = TickMarks( this, j, cen + j, gap + j, inval, 
-                                &statics, method, class, status );
-         logticks[ j ] = astGetLogTicks( this, j );
-      }
-
-/* Release the resources allocated in the first call to TickMarks. */
-      for( j = 0; j < 2; j++ ){
-         (void) TickMarks( NULL, j, NULL, gap, NULL, &statics, method, class, 
-                           status );
-      }
-
-/* Each major tick value for axis "j" may be marked with a curve parallel
-   to axis "1-j" drawn across the entire plotting area. We need to decide
-   where to start drawing this curve and how long it should be. We can
-   simply use the minimum value on axis "1-j" together with the tick value
-   on axis "j" to define the starting position. The length could be taken
-   as the difference between the maximum and minimum values on axis "1-j".
-   However, this may not be right in some situations. For instance if the 
-   plotting area covers a small range of Right Ascension from 23:59:59 to
-   00:00:01. Using the difference between the maximum and minimum values 
-   to give the length of the curve would result in the curve starting at
-   00:00:00 (the minimum axis value) and extending for a length of 23:59:59
-   (the axis range). To get round this sort of problem, the curve is split
-   up into sections with lengths and starting positions determined by the
-   tick mark values on axis "1-j". The first section starts at the minimum 
-   axis value and extends upto the first missing tick mark (in the RA
-   example, this would be at 00:00:01). Subsequent sections starts at the
-   next tick mark (23:59:59 in the RA example) and extends upto the next
-   missing tick mark, or the last tick mark if none are missing. */
-
-/* Get the current frame. */
-      fr = astGetFrame( this, AST__CURRENT );
-
-/* If either axis has log tick spacing, use the simple approach which
-   assumes that each curve has only one section. */
-      if( logticks[ 0 ] || logticks[ 1 ] ) {
-
-/* Find the start and length of the curve for each tick mark on axis "j". */
-         for( j = 0; j < 2 && astOK; j++ ){
-
-/* Find the axis range to display on the other axis. */
-            bot = astGetBottom( fr, 1 - j );
-            top = astGetTop( fr, 1 - j );
-            if( bot > top ) {
-               tmp = top;
-               top = bot;
-               bot = tmp;
-            }      
-
-/* Get a pointer to the major tick mark values on the other axis ("1-j"), 
-   together with the number of them. */
-            ticks = info[ 1 - j ]->ticks;
-            nticks = info[ 1 - j ]->nmajor;
-
-/* Reserve memory to hold the starts and lengths of each section of the 
-   grid line marking the major ticks on the axis "j". There will only be
-   one section. */
-            starts = (double *) astMalloc( sizeof(double) );
-            lengths = (double *) astMalloc( sizeof(double) );
-            info[ j ]->start = starts;
-            info[ j ]->length = lengths;
-
-/* Check that the pointers can be used. */
-            if( astOK ) {
-
-/* The section starts one gap below the first tick, and ends one gap above 
-   the first tick. Limit both to the displayed range of the axis. */
-               if( logticks[ 1 - j ] ) {
-                  starts[ 0 ] = MIN( top, MAX( bot, ticks[ 0 ]/gap[ 1 - j ] ) );
-                  end = MIN( top, MAX( bot, ticks[ nticks - 1 ]*gap[ 1 - j ] ) );
-               } else {
-                  starts[ 0 ] = MIN( top, MAX( bot, ticks[ 0 ] - gap[ 1 - j ] ) );
-                  end = MIN( top, MAX( bot, ticks[ nticks - 1 ] + gap[ 1 - j ] ) );
-               }
-
-/* Store the length of the section. */
-               lengths[ 0 ] = end - starts[ 0 ];
-
-/* Store the number of sections in the returned structure. */
-               info[ 0 ]->nsect = 1;
-      
-            }
-         }   
-
-/* If both axes have linear tick spacing, use the complete approach. */
-      } else {
-
-/* Find the start and length of each section of the curve for each tick
-   mark on axis "j". */
-         for( j = 0; j < 2 && astOK; j++ ){
-
-/* Find the axis range to display on the other axis. */
-            bot = astGetBottom( fr, 1 - j );
-            top = astGetTop( fr, 1 - j );
-            if( bot > top ) {
-               tmp = top;
-               top = bot;
-               bot = tmp;
-            }      
-
-/* Get a pointer to the major tick mark values on the other axis ("1-j"), 
-   together with the number of them. */
-            ticks = info[ 1 - j ]->ticks;
-            nticks = info[ 1 - j ]->nmajor;
-
-/* Reserve memory to hold the starts and lengths of each section of the 
-   grid line marking the major ticks on the axis "j". The allocated
-   arrays are the largest that could possibly be needed (i.e. if every
-   tick mark starts a new section). */
-            starts = (double *) astMalloc( sizeof(double)*(size_t) nticks );
-            lengths = (double *) astMalloc( sizeof(double)*(size_t) nticks );
-            info[ j ]->start = starts;
-            info[ j ]->length = lengths;
-
-/* Check that the pointers can be used. */
-            if( astOK ) {
-
-/* Loop round each of the major tick marks on axis "1-j". */
-               k = 0;
-               i = 0;
-               while( i < nticks ){
-
-/* Record the start of the next section of the grid lines. */
-                  starts[ k ] = ticks[ i++ ];
-
-/* Tick marks should be regularly spaced by the values in "gap". Check each 
-   tick mark until a missing tick mark is  found. The section ends at the 
-   start of the gap. */
-                  while( i < nticks && 
-                         ( ticks[ i ] - ticks[ i - 1 ] ) < 1.5*gap[ 1 - j ] ) i++;
-
-/* Record the length of the section. */
-                  lengths[ k ] = ticks[ i - 1 ] - starts[ k ];   
-
-/* The section is extended at start and end by one gap in order to "cover
-   up the joins". Limit this to the displayed range of the axis. */
-                  starts[ k ] -= gap[ 1 - j];
-                  lengths[ k ] += 2.0*gap[ 1 - j ]; 
-
-/* Limit the start and end to the displayed range of the axis. */
-                  end = starts[ k ] + lengths[ k ];
-                  starts[ k ] = MIN( top, MAX( bot, starts[ k ] ) );
-                  lengths[ k ] = MIN( top, MAX( bot, end ) ) - starts[ k ];
-
-/* Increment the number of sections. */
-                  k++;
-               }
-
-/* Store the number of sections in the returned structure. */
-               info[j]->nsect = k;
-      
-            }
-         }   
-      }
-
-/* Annull the current frame. */
-      fr = astAnnul( fr );
-
-   }
-
-/* If an error has occurred, clean up the returned TickInfo structures. */
-   if( !astOK ) info = CleanGrid( info, status );
-
-/* Return. */
-   return info;   
-
-}
-
-void astGrfAttrs_( AstPlot *this, int id, int set, int prim, const char *method, const char *class, int *status ){
-/*
-*+
-*  Name:
-*     astGrfAttrs
-
-*  Purpose:
-*     Establish values for the graphics attributes for a given object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void astGrfAttrs( AstPlot *this, int id, int set, int prim, const char *method, const char *class )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function should be called with "set=1" to establish the correct 
-*     graphics attributes prior to drawing specific graphical objects. Once 
-*     the object has been drawn, it should be called again with "set=0" to 
-*     re-establish the original graphics attributes.
-*
-*     NOTE, each type of graphical object identified by "id" should be
-*     drawn entirely by calls to just one of GMark, GText or GLine
-*     as indicated by argument "prim".
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     id
-*        An integer specifying the graphical object to be drawn.
-*     set
-*        If non-zero then the attributes for the specified object are set
-*        to the values indicated by the corresponding Plot attributes,
-*        and the current values are saved in a static array. If zero, then 
-*        the values are set to the values stored in the static array.
-*     prim
-*        Indicates the sort of graphics primative used to draw the
-*        object. This must be one of (defined in grf.h) :
-*
-*           GRF__LINE
-*           GRF__MARK
-*           GRF__TEXT
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*  Notes:
-*     -  This function should always be called in pairs with set=1 on the
-*     first call and set=0 on the second call. 
-*     -  If a pair of calls is nested within another pair of calls, the
-*     inner pair has no effect.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   double *attr;           /* Pointer to the next attribute value */
-   double dval;            /* Floating point attribute value */
-   int ival;               /* Integer attribute value */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Set up a pointer to the next element in "grfattrs_attrs". */
-   attr = grfattrs_attrs;
-
-/* If we are setting new values, increment the nesting level, otherwise
-   decrement it. */
-   if( set ){
-      grfattrs_nesting++;
-   } else {
-      grfattrs_nesting--;
-   } 
-
-/* First deal with cases where we are establishing new values for the
-   graphics attributes by setting them to the values of the corresponding
-   Plot attributes. Only do this if we are at nesting level one. */
-   if( set && grfattrs_nesting == 1 ){
-
-/* See if a value has been set in the Plot for the line style attribute for 
-   the specified object, If so, use the value. */
-      if( TestUseStyle( this, id, status ) ) {
-         ival = GetUseStyle( this, id, status );      
-
-/* Save the current value, and establish the new value. */
-         GAttr( this, GRF__STYLE, (double) ival, attr++, prim, method,
-                class, status );
-
-/* If no style was specified, retain the current value. Indicate that no
-   new value has been established by setting the old value bad. */
-      } else {
-         *(attr++) = AST__BAD;
-      }
-
-/* Do the same for the line width attribute. */
-      if( TestUseWidth( this, id, status ) ){
-         dval = GetUseWidth( this, id, status );      
-         GAttr( this, GRF__WIDTH, dval, attr++, prim, method, class, status );
-      } else {
-         *(attr++) = AST__BAD;
-      }
-
-/* Do the same for the character size attribute. */
-      if( TestUseSize( this, id, status ) ) {
-         dval = GetUseSize( this, id, status );      
-         GAttr( this, GRF__SIZE, dval, attr++, prim, method, class, status );
-      } else {
-         *(attr++) = AST__BAD;
-      }
-
-/* Do the same for the character font attribute. */
-      if( TestUseFont( this, id, status ) ){
-         ival = GetUseFont( this, id, status );      
-         GAttr( this, GRF__FONT, (double) ival, attr++, prim, method, class, status );
-      } else {
-         *(attr++) = AST__BAD;
-      }
-
-/* Do the same for the colour attribute. */
-      if( TestUseColour( this, id, status ) ) {
-         ival = GetUseColour( this, id, status );      
-         GAttr( this, GRF__COLOUR, (double) ival, attr++, prim, method,
-                class, status );
-      } else {
-         *(attr++) = AST__BAD;
-      }
-
-   }
-
-/* Now deal with cases where we are re-establishing old values saved on a
-   previous call to this function. Only do this if we are at nesting
-   level zero. */
-   if( !set && !grfattrs_nesting ){
-      GAttr( this, GRF__STYLE, *(attr++), NULL, prim, method, class, status );
-      GAttr( this, GRF__WIDTH, *(attr++), NULL, prim, method, class, status );
-      GAttr( this, GRF__SIZE, *(attr++), NULL, prim, method, class, status );
-      GAttr( this, GRF__FONT, *(attr++), NULL, prim, method, class, status );
-      GAttr( this, GRF__COLOUR, *(attr++), NULL, prim, method, class, status );
-   }
-
-/* Return. */
-   return;
-
-}
-
-static int GVec( AstPlot *this, AstMapping *mapping, double *phy, 
-                 int axis, double delta, AstPointSet **pset1, 
-                 AstPointSet **pset2, double *gx, double *gy, 
-                 double *dx, double *dy, int *flag, const char *method, 
-                 const char *class, int *status ){
-/*
-*  Name:
-*     GVec
-
-*  Purpose:
-*     Returns a unit vector parallel to a physical axis at a given point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GVec( AstPlot *this, AstMapping *mapping, double *phy, 
-*               int axis, double delta, AstPointSet **pset1, 
-*               AstPointSet **pset2, double *gx, double *gy, 
-*               double *dx, double *dy, int *flag, const char *method, 
-*               const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function returns a unit vector (in the graphics coordinate
-*     system) in the positive direction of the specified physical axis, 
-*     at the given physical position. It works by transforming the given 
-*     physical position, together with another very close position, and
-*     returning the vector between them. It is possible for a 
-*     discontinuity to occur between these two close positions, 
-*     resulting in a very large meaningless vector prior to 
-*     normalisation. For this reason two vectors are found, one joining 
-*     the given position to a close position higher up the axis, and one 
-*     joining a close position lower down the axis to the given position.
-*     If these two vectors differ in magnitude by a large factor, then
-*     the shorter of the two vectors is normalised and returned. 
-*     Otherwise, the vector which is closest in direction to the vector
-*     supplied in [dx,dy] is returned. The returned vector is reversed if
-*     necessary so that it always points in the positive direction of the
-*     axis.
-*
-*     If neither of the two vectors can be found (i.e. if the graphics
-*     coordinates are bad, or coincident), then the vector supplied in 
-*     [dx,dy] is returned unchanged, and a function value of zero is 
-*     returned. Otherwise, a function value of one is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     mapping
-*        Pointer to the Mapping from the base Frame of the Plot ot the
-*        current Frame.
-*     phy
-*        Pointer to an array holding the coordinates in the current Frame
-*        of the Plot at which the tangent vector is required.
-*     axis
-*        The index of the axis within the current Frame for which the
-*        tangent vector is required.
-*     delta
-*        The increment in the axis value to use between positions defining
-*        the vectors.
-*     pset1
-*        A pointer to a place at which to store a pointer to a PointSet
-*        holding current Frame coordinates. This PointSet pointer should 
-*        be supplied as NULL on the first call to this function, resulting
-*        in a new PointSet being created and a pointer to it returned.
-*        Subsequent calls to this function shopuld retain the pointer
-*        returned by the first call. The PointSet pointer should be
-*        annulled using astAnnul when no longer needed.
-*     pset2
-*        A pointer to a place at which to store a pointer to a PointSet
-*        holding base Frame coordinates. This PointSet is managed in the
-*        same way as "pset1".
-*     gx
-*        A pointer to a double in which to return the graphics X
-*        coordinate of the position supplied by "phy".
-*     gy
-*        A pointer to a double in which to return the graphics Y
-*        coordinate of the position supplied by "phy".
-*     dx
-*        A pointer to a double in which to return the X component
-*        of the unit tangent vector. This should be supplied holding a
-*        "default" unit vector which is left unchanged if no new vector
-*        can be found.
-*     dy
-*        A pointer to a double in which to return the Y component
-*        of the unit tangent vector. This should be supplied holding a
-*        "default" unit vector which is left unchanged if no new vector
-*        can be found.
-*     flag
-*        A pointer to an int in which to return a flag indicating which
-*        of the two vectors was returned. Zero is returned if the vector
-*        was estimated by moving in a positive direction along the axis 
-*        from the position supplied by "phy". One is returned if the vector
-*        was estimated by moving in a negative direction along the axis 
-*        from the position supplied by "phy" (in this case the returned
-*        vector will have been negated so that it refers to the positive
-*        direction).
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One is returned if the vector was found succesfully, Zero is returned
-*     if the vector could not be estimated for any reason. No error is
-*     reported if the failure was due to the nature of the mapping.
-
-*  Notes:
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned.
-*/
-
-/* Local Variables: */
-   double dd1;        /* Length of positive vector */
-   double dd2;        /* Length of negative vector */
-   double dx1;        /* X component of positive vector */
-   double dx2;        /* X component of negative vector */
-   double dy1;        /* Y component of positive vector */
-   double dy2;        /* Y component of negative vector */
-   double **ptr1;     /* Pointers to physical coordinate data */
-   double **ptr2;     /* Pointers to graphics coordinate data */
-   int i;             /* Axis index */
-   int nphy;          /* No. of axes in current (physical) Frame */
-   int ret;           /* Was a vector estimated succesfully? */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   dx1 = 0.0;
-   dx2 = 0.0;
-   dy1 = 0.0;
-   dy2 = 0.0;
-
-/* Initialise the returned value to indicate that the vector can not
-   be found. */
-   ret = 0;
-
-/* Get the number of physical coordinates from the mapping. */
-   nphy = astGetNout( mapping );
-
-/* If no PointSets have been supplied, create some now. PointSet 1 
-   contains physical coordinates, PointSet 2 contains graphics 
-   coordinates. */
-   if( !(*pset1) ) *pset1 = astPointSet( 3, nphy, "", status );
-   if( !(*pset2) ) *pset2 = astPointSet( 3, 2, "", status );
-
-/* Get pointers to the PointSet data. */     
-   ptr1 = astGetPoints( *pset1 );
-   ptr2 = astGetPoints( *pset2 );
-
-/* Check the PointSets can be used. */
-   if( astOK ){
-
-/* Store the physical coordinates of three close points on a curve 
-   parallel to the given axis, with the centre point at the given 
-   position. */
-      for( i = 0; i < nphy; i++ ){
-         ptr1[ i ][ 0 ] = phy[ i ];
-         ptr1[ i ][ 1 ] = phy[ i ];
-         ptr1[ i ][ 2 ] = phy[ i ];
-      }   
- 
-      if( phy[ axis ] != AST__BAD ){
-         ptr1[ axis ][ 0 ] = phy[ axis ] - delta;
-         ptr1[ axis ][ 2 ] = phy[ axis ] + delta;
-      }
-
-/* Find the corresponding graphics coordinates. */
-      (void) Trans( this, NULL, mapping, *pset1, 0, *pset2, 0, method, class, status );
-
-/* Check the central position is OK. */
-      *gx = ptr2[ 0 ][ 1 ];
-      *gy = ptr2[ 1 ][ 1 ];
-      if( astOK && *gx != AST__BAD && *gy != AST__BAD ){
-
-/* Get the unit vector between the central position and the position at 
-   the higher physical axis value. Also get the length of the vector 
-   joining the two positions. */
-         if( ptr2[ 0 ][ 2 ] != AST__BAD && ptr2[ 1 ][ 2 ] != AST__BAD ){
-            dx1 = ptr2[ 0 ][ 2 ] - *gx;
-            dy1 = ptr2[ 1 ][ 2 ] - *gy;
-            dd1 = dx1*dx1 + dy1*dy1;
-
-            if( dd1 > 0.0 ) {
-               dd1 = sqrt( dd1 );
-               dx1 /= dd1;               
-               dy1 /= dd1;               
-            } else {
-               dd1 = AST__BAD;
-            }
-
-         } else {
-            dd1 = AST__BAD;
-         }
-
-/* Do the same for the position with lower physical axis value, 
-   reversing the direction of the vector so that it refers to the
-   positive direction. */
-         if( ptr2[ 0 ][ 0 ] != AST__BAD && ptr2[ 1 ][ 0 ] != AST__BAD ){
-            dx2 = *gx - ptr2[ 0 ][ 0 ];
-            dy2 = *gy - ptr2[ 1 ][ 0 ];
-            dd2 = dx2*dx2 + dy2*dy2;
-
-            if( dd2 > 0.0 ) {
-               dd2 = sqrt( dd2 );
-               dx2 /= dd2;               
-               dy2 /= dd2;               
-            } else {
-               dd2 = AST__BAD;
-            }
-
-         } else {
-            dd2 = AST__BAD;
-         }
-
-/* Only overwrite the supplied vector if at least one of the two tangent 
-   vectors was defined. */
-         if( dd1 != AST__BAD || dd2 != AST__BAD ){
-
-/* If the first vector was not defined, return the second. */
-            if( dd1 == AST__BAD ){
-               *dx = dx2;
-               *dy = dy2;
-               *flag = 1;
-               ret = 1;
-
-/* If the second vector was not defined, return the first. */
-            } else if( dd2 == AST__BAD ){
-               *dx = dx1;
-               *dy = dy1;
-               *flag = 0;
-               ret = 1;
-
-/* If the first vector is much longer than the second, return the 
-   second. */
-            } else if( dd1 > 100.0*dd2 ){
-               *dx = dx2;
-               *dy = dy2;
-               *flag = 1;
-               ret = 1;
-
-/* If the second vector is much longer than the first, return the 
-   first. */
-            } else if( dd2 > 100.0*dd1 ){
-               *dx = dx1;
-               *dy = dy1;
-               *flag = 0;
-               ret = 1;
-
-/* If both vectors are defined and of comparable length, return the
-   vector which is most nearly parallel to the supplied vector. Note, we
-   assume that the supplied vector [dx,dy] is a unit vector. */
-            } else if( *dx != AST__BAD && *dx != AST__BAD ){
-               if( ( dx1*(*dx) + dy1*(*dy) )/dd1 > 
-                   ( dx2*(*dx) + dy2*(*dy) )/dd2 ){
-                  *dx = dx1;
-                  *dy = dy1;
-                  *flag = 0;
-                  ret = 1;
-               
-               } else {
-                  *dx = dx2;
-                  *dy = dy2;
-                  *flag = 1;
-                  ret = 1;
-               }
-
-/* If no vector was supplied, return the shorter of the two vectors. */
-            } else if( dd1 < dd2 ){
-               *dx = dx1;
-               *dy = dy1;
-               *flag = 0;
-               ret = 1;
-
-            } else {               
-               *dx = dx2;
-               *dy = dy2;
-               *flag = 1;
-               ret = 1;
-
-            }
-
-         }
-
-      }
-
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int HasEscapes( const char *text, int *status ) {
-/*
-*  Name:
-*     HasEscapes
-
-*  Purpose:
-*     Check if a text string contains any escape sequences.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int HasEscapes( const char *text, int *status ) 
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function checks if a text string contains any escape sequences
-*     (see attribute Escape).
-
-*  Parameters:
-*     text 
-*        The text to check.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     Non-zero if any escape sequences are found in the text. Zero
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   int result;
-   int type;
-   int value;
-   int nc;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status and the supplied pointer. */
-   if ( !astOK || ! text ) return result;
-
-/* Does the string begin with an escape sequence? */
-   if( astFindEscape( text, &type, &value, &nc ) ){
-      result = 1;
-
-/* If not, there must be an escape sequence later in the string if the 
-   number of characters skipped by the above call to astFindEscape is less
-   than the length of the string. */
-   } else if( nc < strlen( text ) ) {
-      result = 1;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int IdFind( int id, int nax, int *id1, int *id2, int *id3, int *status ) {
-/*
-*  Name:
-*     IdFind
-
-*  Purpose:
-*     Find the numerical identifiers to use for a given identifier.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int IdFind( int id, int nax, int *id1, int *id2, int *id3, int *status  )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied integer should be a numerical identifier for a
-*     graphical element of a plot (AST__MARKS_ID, AST__CURVES_ID, etc), or a
-*     "psuedo-identifier" which represents two other genuine identifiers. 
-*     If the supplied value is a genuine identifier then it is returned 
-*     in *id1, and *id2 is returned equal to -1. If the supplied value 
-*     is a pseudo-identifier then the two corresponding genuine
-*     identifiers are returned in *id1 and *id2
-
-*     For instance, if "id" is AST__AXIS1_ID (a genuine id), then *id1 is 
-*     returned equal to AST__AXIS1_ID and *id2 is returned equal to -1. If 
-*     "id" is AST__AXES_ID (a pseudo-identifier), then *id1 is returned equal
-*     to AST__AXIS1_ID and *id2 is returned equal to AST__AXIS2_ID.
-
-*     Genuine identifiers all have values which are less than the value 
-*     of AST__NPID. Pseudo-identifiers have values which are greater than 
-*     or equal to the value of AST__NPID.
-
-*  Parameters:
-*     id
-*        The supplied identifier (genuine or pseudo).
-*     nax
-*        The number of axes spanning graphics space (2 or 3).
-*     id1
-*        Pointer to the int at which to return the first genuine
-*        identifier corresponding to "id".
-*     id2
-*        Pointer to the int at which to return the second genuine
-*        identifier corresponding to "id" (or -1 if "id" is a genuine
-*        identifier).
-*     id3
-*        Pointer to the int at which to return the third genuine
-*        identifier corresponding to "id" (or -1 if "id" has no third 
-*        genuine identifier).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of genuine identifiers corresponding to the supplied
-*     (possibly Pseudo-) identifier. This will be in the range 1 to 3.
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Initialise returned values. */
-   *id1 = id;
-   *id2 = -1;
-   *id3 = -1;
-   ret = 0;
-
-/* Check the local error status. */
-   if ( !astOK ) return ret;
-
-/* Assume a genuine identifier was supplied. */
-   ret = 1;
-
-/* Check against all known pseudo-identifier. */
-   if( id == AST__AXES_ID ) {
-      ret = nax;
-      *id1 = AST__AXIS1_ID;
-      *id2 = AST__AXIS2_ID;
-      if( nax == 3 ) *id3 = AST__AXIS3_ID;
-
-   } else if( id == AST__GRIDLINE_ID ) {
-      ret = nax;
-      *id1 = AST__GRIDLINE1_ID;
-      *id2 = AST__GRIDLINE2_ID;
-      if( nax == 3 ) *id3 = AST__GRIDLINE3_ID;
-
-   } else if( id == AST__NUMLABS_ID ) {
-      ret = nax;
-      *id1 = AST__NUMLAB1_ID;
-      *id2 = AST__NUMLAB2_ID;
-      if( nax == 3 ) *id3 = AST__NUMLAB3_ID;
-
-   } else if( id == AST__TEXTLABS_ID ) {
-      ret = nax;
-      *id1 = AST__TEXTLAB1_ID;
-      *id2 = AST__TEXTLAB2_ID;
-      if( nax == 3 ) *id3 = AST__TEXTLAB3_ID;
-
-   } else if( id == AST__TICKS_ID ) {
-      ret = nax;
-      *id1 = AST__TICKS1_ID;
-      *id2 = AST__TICKS2_ID;
-      if( nax == 3 ) *id3 = AST__TICKS3_ID;
-
-   } else if( id >= AST__NPID ) {
-      astError( AST__INTER, "AST internal programming error - "
-                "function IdFind in class Plot does not yet support "
-                "pseudo-identifier value %d", status, id );
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-void astInitPlotVtab_(  AstPlotVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPlotVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Plot.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void astInitPlotVtab( AstPlotVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Plot vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Plot class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameSetVtab *fset;        /* Pointer to FrameSet component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameSetVtab( (AstFrameSetVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This will be
-   used (by astIsAPlot) to determine if an object belongs to this class.
-   We can conveniently use the address of the (static) class_init variable to
-   generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameSetVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->Mark = Mark;
-   vtab->Text = Text;
-   vtab->Border = Border;
-   vtab->BoundingBox = BoundingBox;
-   vtab->Clip = Clip; 
-   vtab->GridLine = GridLine;
-   vtab->Curve = Curve;
-   vtab->GrfSet = GrfSet;
-   vtab->GrfPush = GrfPush;
-   vtab->GrfPop = GrfPop;
-   vtab->GrfWrapper = GrfWrapper;
-   vtab->GenCurve = GenCurve;
-   vtab->PolyCurve = PolyCurve;
-   vtab->CopyPlotDefaults = CopyPlotDefaults;
-   vtab->CvBrk = CvBrk;
-   vtab->Mirror = Mirror;
-   vtab->GetDrawnTicks = GetDrawnTicks;
-   vtab->SetTickValues = SetTickValues;
-   vtab->Grid = Grid; 
-   vtab->ClearTol = ClearTol;
-   vtab->SetTol = SetTol;
-   vtab->GetTol = GetTol;
-   vtab->TestTol = TestTol;
-   vtab->ClearGrid = ClearGrid;
-   vtab->SetGrid = SetGrid;
-   vtab->GetGrid = GetGrid;
-   vtab->TestGrid = TestGrid;
-
-   vtab->ClearTickAll = ClearTickAll;
-   vtab->SetTickAll = SetTickAll;
-   vtab->GetTickAll = GetTickAll;
-   vtab->TestTickAll = TestTickAll;
-
-   vtab->ClearForceExterior = ClearForceExterior;
-   vtab->SetForceExterior = SetForceExterior;
-   vtab->GetForceExterior = GetForceExterior;
-   vtab->TestForceExterior = TestForceExterior;
-
-
-   vtab->ClearInvisible = ClearInvisible;
-   vtab->SetInvisible = SetInvisible;
-   vtab->GetInvisible = GetInvisible;
-   vtab->TestInvisible = TestInvisible;
-   vtab->ClearBorder = ClearBorder;
-   vtab->SetBorder = SetBorder;
-   vtab->GetBorder = GetBorder;
-   vtab->TestBorder = TestBorder;
-   vtab->ClearInk = ClearInk;
-   vtab->SetInk = SetInk;
-   vtab->GetInk = GetInk;
-   vtab->TestInk = TestInk;
-   vtab->ClearClipOp = ClearClipOp;
-   vtab->SetClipOp = SetClipOp;
-   vtab->GetClipOp = GetClipOp;
-   vtab->TestClipOp = TestClipOp;
-   vtab->ClearClip = ClearClip;
-   vtab->SetClip = SetClip;
-   vtab->GetClip = GetClip;
-   vtab->TestClip = TestClip;
-   vtab->ClearGrf = ClearGrf;
-   vtab->SetGrf = SetGrf;
-   vtab->GetGrf = GetGrf;
-   vtab->TestGrf = TestGrf;
-   vtab->ClearDrawTitle = ClearDrawTitle;
-   vtab->SetDrawTitle = SetDrawTitle;
-   vtab->GetDrawTitle = GetDrawTitle;
-   vtab->TestDrawTitle = TestDrawTitle;
-   vtab->ClearLabelUp = ClearLabelUp;
-   vtab->SetLabelUp = SetLabelUp;
-   vtab->GetLabelUp = GetLabelUp;
-   vtab->TestLabelUp = TestLabelUp;
-   vtab->ClearLogPlot = ClearLogPlot;
-   vtab->SetLogPlot = SetLogPlot;
-   vtab->GetLogPlot = GetLogPlot;
-   vtab->TestLogPlot = TestLogPlot;
-   vtab->ClearLogTicks = ClearLogTicks;
-   vtab->SetLogTicks = SetLogTicks;
-   vtab->GetLogTicks = GetLogTicks;
-   vtab->TestLogTicks = TestLogTicks;
-   vtab->ClearLogLabel = ClearLogLabel;
-   vtab->SetLogLabel = SetLogLabel;
-   vtab->GetLogLabel = GetLogLabel;
-   vtab->TestLogLabel = TestLogLabel;
-   vtab->ClearDrawAxes = ClearDrawAxes;
-   vtab->SetDrawAxes = SetDrawAxes;
-   vtab->GetDrawAxes = GetDrawAxes;
-   vtab->TestDrawAxes = TestDrawAxes;
-   vtab->ClearAbbrev = ClearAbbrev;
-   vtab->SetAbbrev = SetAbbrev;
-   vtab->GetAbbrev = GetAbbrev;
-   vtab->TestAbbrev = TestAbbrev;
-   vtab->ClearEscape = ClearEscape;
-   vtab->SetEscape = SetEscape;
-   vtab->GetEscape = GetEscape;
-   vtab->TestEscape = TestEscape;
-   vtab->ClearLabelling = ClearLabelling;
-   vtab->SetLabelling = SetLabelling;
-   vtab->GetLabelling = GetLabelling;
-   vtab->TestLabelling = TestLabelling;
-   vtab->ClearMajTickLen = ClearMajTickLen;
-   vtab->SetMajTickLen = SetMajTickLen;
-   vtab->GetMajTickLen = GetMajTickLen;
-   vtab->TestMajTickLen = TestMajTickLen;
-   vtab->ClearLogGap = ClearLogGap;
-   vtab->SetLogGap = SetLogGap;
-   vtab->GetLogGap = GetLogGap;
-   vtab->TestLogGap = TestLogGap;
-   vtab->ClearTitleGap = ClearTitleGap;
-   vtab->SetTitleGap = SetTitleGap;
-   vtab->GetTitleGap = GetTitleGap;
-   vtab->TestTitleGap = TestTitleGap;
-   vtab->ClearMinTickLen = ClearMinTickLen;
-   vtab->SetMinTickLen = SetMinTickLen;
-   vtab->GetMinTickLen = GetMinTickLen;
-   vtab->TestMinTickLen = TestMinTickLen;
-   vtab->ClearNumLabGap = ClearNumLabGap;
-   vtab->SetNumLabGap = SetNumLabGap;
-   vtab->GetNumLabGap = GetNumLabGap;
-   vtab->TestNumLabGap = TestNumLabGap;
-   vtab->ClearTextLabGap = ClearTextLabGap;
-   vtab->SetTextLabGap = SetTextLabGap;
-   vtab->GetTextLabGap = GetTextLabGap;
-   vtab->TestTextLabGap = TestTextLabGap;
-   vtab->ClearLabelAt = ClearLabelAt;
-   vtab->SetLabelAt = SetLabelAt;
-   vtab->GetLabelAt = GetLabelAt;
-   vtab->TestLabelAt = TestLabelAt;
-   vtab->ClearCentre = ClearCentre;
-   vtab->SetCentre = SetCentre;
-   vtab->GetCentre = GetCentre;
-   vtab->TestCentre = TestCentre;
-   vtab->ClearGap = ClearGap;
-   vtab->SetGap = SetGap;
-   vtab->GetGap = GetGap;
-   vtab->TestGap = TestGap;
-   vtab->ClearEdge = ClearEdge;
-   vtab->SetEdge = SetEdge;
-   vtab->GetEdge = GetEdge;
-   vtab->TestEdge = TestEdge;
-   vtab->ClearNumLab = ClearNumLab;
-   vtab->SetNumLab = SetNumLab;
-   vtab->GetNumLab = GetNumLab;
-   vtab->TestNumLab = TestNumLab;
-   vtab->ClearMinTick = ClearMinTick;
-   vtab->SetMinTick = SetMinTick;
-   vtab->GetMinTick = GetMinTick;
-   vtab->TestMinTick = TestMinTick;
-   vtab->ClearTextLab = ClearTextLab;
-   vtab->SetTextLab = SetTextLab;
-   vtab->GetTextLab = GetTextLab;
-   vtab->TestTextLab = TestTextLab;
-   vtab->ClearLabelUnits = ClearLabelUnits;
-   vtab->SetLabelUnits = SetLabelUnits;
-   vtab->GetLabelUnits = GetLabelUnits;
-   vtab->TestLabelUnits = TestLabelUnits;
-   vtab->ClearStyle = ClearStyle;
-   vtab->SetStyle = SetStyle;
-   vtab->GetStyle = GetStyle;
-   vtab->TestStyle = TestStyle;
-   vtab->ClearFont = ClearFont;
-   vtab->SetFont = SetFont;
-   vtab->GetFont = GetFont;
-   vtab->TestFont = TestFont;
-   vtab->ClearColour = ClearColour;
-   vtab->SetColour = SetColour;
-   vtab->GetColour = GetColour;
-   vtab->TestColour = TestColour;
-   vtab->ClearWidth = ClearWidth;
-   vtab->SetWidth = SetWidth;
-   vtab->GetWidth = GetWidth;
-   vtab->TestWidth = TestWidth;
-   vtab->ClearSize = ClearSize;
-   vtab->SetSize = SetSize;
-   vtab->GetSize = GetSize;
-   vtab->TestSize = TestSize;
-   vtab->GetGrfContext = GetGrfContext;
-
-/* Save the inherited pointers to methods that will be extended, and replace
-   them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   fset = (AstFrameSetVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_removeframe = fset->RemoveFrame;
-   fset->RemoveFrame = RemoveFrame;
-
-/* Declare the destructor and copy constructor. */
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
-   astSetDump( vtab, Dump, "Plot", "Provide facilities for 2D graphical output" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int Inside( int n, float *cx, float *cy, float x, float y, int *status ){
-/*
-*  Name:
-*     Inside
-
-*  Purpose:
-*     See if a given point is inside a 2-d polygon.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Inside( int n, float *cx, float *cy, float x, float y, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function determines if the position given by x and y, is inside
-*     or outside the polygon specified by the vertices given in arrays cx
-*     and cy. 
-
-*  Parameters:
-*     n
-*        The number of vertices in the polygon.
-*     cx
-*        A pointer to an array holding the x coordinates at the "n" vertices.
-*     cy
-*        A pointer to an array holding the y coordinates at the "n" vertices.
-*     x
-*        The x coordinate of the test point.
-*     y
-*        The y coordinate of the test point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A boolean flag indicating if the test point is inside the polygon.
-
-*  Notes:
-*     -  The algorithm used only works for convex polygons.
-*     -  The polygon is closed by joining the last vertex to the first
-*     vertex.
-*     -  Zero is returned if an error has occurred.
-
-*/
-
-/* Local Variables: */
-   int i;        /* Index of the current vertex */
-   int j;        /* Index of the next vertex */
-   int ret;      /* Is the test point inside the polygon? */
-   int sgn;      /* Which side of the first edge is the test point? */
-
-/* Check the global status. */
-   if( !astOK ) return 0;
-
-/* Initialise the returned value to indicate that the point is inside the
-   box. */
-   ret = 1;
-
-/* Get the sign of the angle between the vector joining vertex 1 to vertex
-   0, and the vector joining the test point to vertex zero. */
-   if( ( cx[ 1 ] - cx[ 0 ] )*( y - cy[ 0 ] ) > 
-       ( x - cx[ 0 ] )*( cy[ 1 ] - cy[ 0 ] ) ){
-      sgn = 1;
-   } else {
-      sgn = -1;
-   }
-
-/* Check that the remaining test point is on the same side of the remaining
-   sides. */
-   for( i = 1; i < n; i++ ){
-
-/* Get the index of the next vertex, joining the last vertex up with
-   vertex zero. */
-      j = i + 1;
-      if( j >= n ) j -= n;
-
-/* Get the sign of the angle between the vector joining vertex j to vertex
-   i, and the vector joining the test point to vertex i. If the sign is
-   opposite to that found for vertex zero, then the test point is outside
-   the polygon. Break out of the loop if this is the case. */
-      if( ( cx[ j ] - cx[ i ] )*( y - cy[ i ] ) > 
-          ( x - cx[ i ] )*( cy[ j ] - cy[ i ] ) ){
-
-         if( sgn == -1 ) {
-            ret = 0;
-            break;
-         }
-
-      } else {
-
-         if( sgn == 1 ) {
-            ret = 0;
-            break;
-         }
-
-      }
-
-   }
-
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void InterpEscape( AstPlot *this, int type, double value, float *x, 
-                          float *y, float ux, float uy, float rx, float ry, 
-                          const char *just, float *rise, double nsize, 
-                          double nstyle, double nwidth, double ncol, 
-                          double nfont, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     InterpEscape
-
-*  Purpose:
-*     Prepare things for drawing the next part of a string which includes
-*     graphics escape sequences.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void InterpEscape( AstPlot *this, int type, double value, float *x, 
-*                        float *y, float ux, float uy, float rx, float ry, 
-*                        const char *just, float *rise, double nsize, 
-*                        double nstyle, double nwidth, double ncol, 
-*                        double nfont, const char *method, const char *class, int *status )
-
-*  Description:
-*     This function modifies the current graphics attributes, the supplied 
-*     reference position, in preparation for drawing another sub-string 
-*     from a string containing graphics escape sequences. The type and 
-*     value of an escape sequence preceededing the substring is supplied.
-*     Note, this function ignored escape sequences which represent an
-*     escaped percent sign. Such escape sequences are drawn as normal
-*     text by the claling function.
-
-*  Parameters:
-*     this
-*        The plot.
-*     type
-*        The type of escape sequence. Each type is identified by a symbolic 
-*        constant defined in grf.h.
-*     value
-*        The value associated with the escape sequence. All usable values
-*        will be positive. A value of -1 shold be supplied if the attribute 
-*        identified by "type" should be reset to its "normal" value (as 
-*        established using the astGAttr function, etc).
-*     x 
-*        Pointer to a double holding the x coordinate at the concatenation
-*        point. This will be modified on exit if the escape sequence
-*        requires it.
-*     y 
-*        Pointer to a double holding the y coordinate at the concatenation
-*        point. This will be modified on exit if the escape sequence
-*        requires it.
-*     ux
-*        The x component of the up-vector for the text, in graphics coords.
-*        The length of this vector should be equal to the height of normal 
-*        text drawn with this up-vector.
-*     uy
-*        The y component of the up-vector for the text. See "ux".
-*     rx
-*        The x component of the right-vector for the text. The length of this 
-*        vector should be equal to the height of normal text drawn with the 
-*        supplied up-vector.
-*     ry
-*        The y component of the right-vector for the text. see "rx".
-*     just
-*        The justification being used for each substring.
-*     rise 
-*        Pointer to a float holding the height of the current baseline
-*        above the normal baseline, given as a percentage of the height of
-*        normal text. May be negative for sub-scripts. May be modified on 
-*        exit if the escape sequence effects the height of the baseline.
-*     nsize
-*        The size of normal text.
-*     nstyle
-*        The style of normal text.
-*     nwidth
-*        The width of normal text.
-*     ncol
-*        The colour of normal text.
-*     nfont
-*        The font of normal text.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   float new_rise;
-   float t1, t2;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Type GRF__ESSUP: Move the concatenation point in the up direction, and
-   update the current baseline height. If the value is -1, then reset the
-   baseline to its normal height. */
-   if( type == GRF__ESSUP ) {
-      if( value > 0 ) {
-         *x += 0.01*ux*( value - *rise );
-         *y += 0.01*uy*( value - *rise );
-         *rise = value;
-      } else {
-         *x -= 0.01*ux*(*rise);
-         *y -= 0.01*uy*(*rise);
-         *rise = 0;
-      }
-
-/* Type GRF__ESSUB: Move the concatenation point in the down direction, and
-   update the current baseline height. If the value is -1, then reset the
-   baseline to its normal height. */
-   } else if( type == GRF__ESSUB ) {
-      if( value > 0 ) {
-         *x -= 0.01*ux*( value + *rise );
-         *y -= 0.01*uy*( value + *rise );
-         *rise = -value;
-      } else {
-         *x -= 0.01*ux*(*rise);
-         *y -= 0.01*uy*(*rise);
-         *rise = 0;
-      }
-
-/* Type GRF__ESGAP: Move the concatenation point to the right. */
-   } else if( type == GRF__ESGAP ) {
-      *x += 0.01*rx*value;
-      *y += 0.01*ry*value;
-
-/* Type GRF__ESBAC: Move the concatenation point to the left. */
-   } else if( type == GRF__ESBAC ) {
-      *x -= 0.01*rx*value;
-      *y -= 0.01*ry*value;
-
-/* Remember the current horizontal position. */
-   } else if( type == GRF__ESH ) {
-      this->hmarkx = *x;
-      this->hmarky = *y;
-
-/* Go to the previously stored horizontal position. */
-   } else if( type == GRF__ESG ) {
-      if( this->hmarkx != FLT_MAX && this->hmarky != FLT_MAX ) {
-         t1 = ( *x - this->hmarkx )*rx + ( *y - this->hmarky )*ry;
-         t2 = rx*rx + ry*ry;
-         *x -= rx*t1/t2;
-         *y -= ry*t1/t2;
-      }
-
-/* Type GRF__ESSIZ: Change the text size. */
-   } else if( type == GRF__ESSIZ ) {
-      if( value < 0 ) value = 100.0;
-      GAttr( this, GRF__SIZE, 0.01*value*nsize, NULL, GRF__TEXT, 
-             method, class, status );
-
-/* Type GRF__ESWID: Change the text width. */
-   } else if( type == GRF__ESWID ) {
-      if( value < 0 ) value = 100.0;
-      GAttr( this, GRF__WIDTH, 0.01*value*nwidth, NULL, GRF__TEXT, 
-             method, class, status );
-
-/* Type GRF__ESFON: Change the text font. */
-   } else if( type == GRF__ESFON ) {
-      if( value < 0 ) value = nfont;
-      GAttr( this, GRF__FONT, value, NULL, GRF__TEXT, method, class, status );
-
-/* Type GRF__ESCOL: Change the text colour. */
-   } else if( type == GRF__ESCOL ) {
-      if( value < 0 ) value = ncol;
-      GAttr( this, GRF__COLOUR, value, NULL, GRF__TEXT, method, class, status );
-
-/* Type GRF__ESSTY: Change the text style. */
-   } else if( type == GRF__ESSTY ) {
-      if( value < 0 ) value = nstyle;
-      GAttr( this, GRF__STYLE, value, NULL, GRF__TEXT, method, class, status );
-
-/* Type GRF__ESPSH: Push current attributes onto a stack. */
-   } else if( type == GRF__ESPSH ) {
-      PushGat( this, *rise, method, class, status );
-
-/* Type GRF__ESSTY: Reset everything to normal. */
-   } else if( type == GRF__ESPOP ) {
-
-      if( !PopGat( this, &new_rise, method, class, status ) ) {
-         new_rise = 0.0;
-         GAttr( this, GRF__SIZE, nsize, NULL, GRF__TEXT, method, class, status );
-         GAttr( this, GRF__WIDTH, nwidth, NULL, GRF__TEXT, method, class, status );
-         GAttr( this, GRF__COLOUR, ncol, NULL, GRF__TEXT, method, class, status );
-         GAttr( this, GRF__FONT, nfont, NULL, GRF__TEXT, method, class, status );
-         GAttr( this, GRF__STYLE, nstyle, NULL, GRF__TEXT, method, class, status );
-      }
-
-      *x -= 0.01*ux*( *rise - new_rise );
-      *y -= 0.01*uy*( *rise - new_rise );
-      *rise = new_rise;
-
-   }
-}
-
-static int IsASkyAxis( AstFrame *frm, int axis, int *status ) {
-/*
-*  Name:
-*     IsASkyAxis
-
-*  Purpose:
-*     Checks if a specified axis of the supplied Frame is a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int IsASkyAxis( AstFrame *frm, int axis, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function checks if if a specified axis of the supplied Frame is 
-*     a SkyAxis.
-
-*  Parameters:
-*     frm
-*        The Frame.
-*     axis
-*        The zero-based axis index.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A boolean flag indicating if the axis is a  SkyAxis.
-
-*/
-
-/* Local Variables: */
-   int ret;        
-   AstAxis *ax;
-
-/* initialise */
-   ret = 0;
-
-/* Check the global status. */
-   if( !astOK ) return ret;
-
-/* Extract the required axis from the Frame and test if it is a SkyAxis.
-   Then free the axis memory. */
-   ax = astGetAxis( frm, axis );
-   ret = astIsASkyAxis( ax );
-   ax = astAnnul( ax );
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static int IsASkyFrame( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     IsASkyFrame
-
-*  Purpose:
-*     Checks if the supplied Object ca be treated as a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int IsASkyFrame( AstObject *obj, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function checks if the supplied Object is a SkyFrame or a 
-*     FrameSet which has a SkyFrame as its current Frame.
-
-*  Parameters:
-*     obj
-*        The object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A boolean flag indicating if the Object can be treated as SkyFrame.
-
-*/
-
-/* Local Variables: */
-   int ret;        
-   AstFrame *frm;  
-
-/* initialise */
-   ret = 0;
-
-/* Check the global status. */
-   if( !astOK ) return ret;
-
-/* If the Object is a SkyFrame, return 1. */
-   if( astIsASkyFrame( obj ) ) {
-      ret = 1;
-
-/* If the Object is a FrameSet, check its current Frame recursively,
-   using this method. */
-   } else if( astIsAFrameSet( obj ) ) {
-      frm = astGetFrame( (AstFrameSet *) obj, AST__CURRENT );
-      ret = IsASkyFrame( (AstObject *) frm, status );
-      frm = astAnnul( frm );
-   }
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static const char *JustMB( AstPlot *this, int esc, const char *text, float *x, 
-                           float *y, float upx, float upy, const char *just, 
-                           float uxu, float uyu, float rxu, float ryu, 
-                           float *x0, float *y0, const char *method, 
-                           const char *class, int *status ){
-/*
-*  Name:
-*     JustMB
-
-*  Purpose:
-*     Modifies a "M" vertical reference point to be a "B" reference point,
-*     if necessary.
-
-*  Synopsis:
-*     #include "plot.h"
-*     const char *JustMB( AstPlot *this, int esc, const char *text, float *x, 
-*                         float *y, float upx, float upy, const char *just, 
-*                         float uxu, float uyu, float rxu, float ryu, 
-*                         float *x0, float *y0, const char *method, 
-*                         const char *class, int *status )
-
-*  Description:
-*     This function is used to modify the reference point and justification 
-*     of a string by converting the vertical "M" justification option (which
-*     indicates that the reference point refers to the bottom of the
-*     bounding box) into a corresponding "B" option (which indicates that
-*     the reference point refers to the text baseline). The reference
-*     point is modified accordingly. 
-*
-*     This is only done if the grf module does not support "M"
-*     justification. Otherwise, the supplied justification string and
-*     reference point coordinates are returned unchanged.
-
-*  Parameters:
-*     this
-*        The plot.
-*     esc
-*        Should escape sequences be interpreted? They will be printed
-*        literally otherwise.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        Pointer to a double holding the x coordinate at the reference
-*        point. This is modified on exit if the supplied "just" string
-*        indicates that the supplied value refers to the bottom of the
-*        bounding box, and the grf module does not support such
-*        justification. In this case, the returned value is a point on 
-*        the baseline of the text which would result in the bottom of 
-*        the bounding box being at the supplied position.
-*     y 
-*        Pointer to a double holding the y coordinate at the reference
-*        point. This is modified on exit if the supplied "just" string
-*        indicates that the supplied value refers to the bottom of the
-*        bounding box, and the grf module does not support such
-*        justification. In this case, the returned value is a point on 
-*        the baseline of the text which would result in the bottom of 
-*        the bounding box being at the supplied position.
-*     upx
-*        The x component of the up-vector for the text. Positive values
-*        always refer to displacements from left to right on the screen, 
-*        even if the graphics x axis increases in the opposite sense.
-*     upy
-*        The y component of the up-vector for the text. Positive values
-*        always refer to displacements from left to right on the screen, 
-*        even if the graphics y axis increases in the opposite sense.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", 'B' for "baseline" or "M" for "bottom", and 
-*        specifies the vertical location of the reference position. Note, 
-*        "baseline" corresponds to the base-line of normal text,and "M"
-*        corresponds to the bottom of the bounding box. Some characters 
-*        (eg "y", "g", "p", etc) and sub-scripts descend below the base-line.
-*        The second character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     uxu
-*        X component of normalised up-vector, in graphics coords.
-*     uyu
-*        Y component of normalised up-vector, in graphics coords.
-*     rxu
-*        X component of normalised right-vector, in graphics coords.
-*     ryu
-*        Y component of normalised right-vector, in graphics coords.
-*     x0
-*        Address of a float at which to return the x coordinate at the
-*        left end of the baseline of the whole string. 
-*     y0
-*        Address of a float at which to return the y coordinate at the
-*        left end of the baseline of the whole string. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string which contains the 
-*     justification to use in future. This pointer should be freed using
-*     astFree when no longer needed. This string will contain a full 
-*     upper-case justification string which can be used by the current 
-*     grf module.
-
-*  Notes;
-*     - NULL is returned if an error has occurred.    
-
-*/
-
-/* Local Variables: */
-   char cc;
-   float drop;
-   float dx;
-   float dy;
-   float f;
-   float height;
-   float width;
-   float xbn[ 4 ];
-   float ybn[ 4 ];
-   int called;
-   char *result;
-
-/* Check inherited status */
-   if( !astOK ) return NULL;
-
-/* Allocate memory for the returned string. */
-   result = astMalloc( sizeof( char )*3 );
-   if( astOK ) {
-
-/* Fill in any missing parts of the justification string. */
-      if( just ){
-         cc = toupper( just[ 0 ] );
-         result[ 0 ] = ( cc == 'T' || cc == 'C' || cc == 'B' || cc == 'M' ) ? cc : 'C';
-   
-         cc = toupper( just[ 1 ] );
-         result[ 1 ] = ( cc == 'L' || cc == 'C' || cc == 'R' ) ? cc : 'C';
-   
-      } else {
-         result[ 0 ] = 'C';
-         result[ 1 ] = 'C';
-      }
-   
-      result[ 2 ] = 0;
-
-/* Indicate that DrawText has not been called. */
-     called = 0;
-
-/* The justfication need not be changed unless the requested vertical 
-   justification is "bottom" (m), AND the grf module does not support "M" 
-   justification. */
-      if( ( result[ 0 ] == 'M' ) && !GCap( this, GRF__MJUST, 1, status ) ){
-
-/* Find the bounding box which would result from putting the left end of
-   the baseline at the specified position. */
-         DrawText( this, 0, esc, text, *x, *y, "BL", upx, upy, xbn, ybn, 
-                   &drop, method, class, status );
-
-/* Indicate that DrawText has not been called. */
-         called = 1;
-
-/* Get the vector from the bottom left corner of the bounding box to the 
-   reference point (on the base-line), and add this vector on to the reference
-   point. */
-         *x += *x - xbn[ 0 ];
-         *y += *y - ybn[ 0 ];
-
-/* Modified the returned justification string. */
-         result[ 0 ] = 'B';
-      }
-
-/* If the returned justification is "BL", then the left end of the
-   baseline is just the returned reference point. */
-      if( result[ 0 ] == 'B' && result[ 1 ] == 'L' ) {
-         *x0 = *x;
-         *y0 = *y;
-
-/* Otherwise, we work out the coords of the left end of the baseline from
-   the values returned by DrawText above. Call DrawText now if it was not
-   called above. */
-      } else {
-         if( ! called ) {
-            DrawText( this, 0, esc, text, *x, *y, "BL", upx, upy, xbn, ybn, 
-                      &drop, method, class, status );
-         }
-
-/* Find the height and width of the bounding box. */
-         dx = xbn[ 0 ] - xbn[ 3 ];
-         dy = ybn[ 0 ] - ybn[ 3 ];
-         width = sqrt( dx*dx + dy*dy );
-   
-         dx = xbn[ 0 ] - xbn[ 1 ];
-         dy = ybn[ 0 ] - ybn[ 1 ];
-         height = sqrt( dx*dx + dy*dy );
-
-/* For "C" and "R" horizontal justification we first need to move the 
-   returned reference point left by 0.5 or 1.0 times the width of the whole
-   string respectively. */
-         if( result[ 1 ] == 'C' ) {
-            f = 0.5;
-   
-         } else if( result[ 1 ] == 'R' ) {
-            f = 1.0;
-   
-         } else {
-            f = 0.0;
-         }
-   
-         f *= width;
-   
-         *x0 = *x - f*rxu;
-         *y0 = *y - f*ryu;
-
-/* Unless the vertical justification is "B", we also need to move the
-   concatenation point vertically to put it on the baseline. */
-         if( result[ 0 ] == 'T' ) {
-            f = height - drop;
-
-         } else if( result[ 0 ] == 'C' ) {
-            f = 0.5*height - drop;
-   
-         } else if( result[ 0 ] == 'M' ) {
-            f = -drop;
-   
-         } else {
-            f = 0.0;
-         }            
-   
-         *x0 -= f*uxu;
-         *y0 -= f*uyu;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void Labelat( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, 
-                     double *labelat, const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     Labelat
-
-*  Purpose:
-*     Determine the other axis value at which to place interior labels
-*     and tick marks.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Labelat( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, 
-*                   double *labelat, const char *method, const char *class )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     If tick marks and labels are to be placed within the plotting area, 
-*     the tick values stored in "grid" determine their position on one
-*     axis, and their position on the other axis is determined by this
-*     function. If a value has been set for the "LabelAt" attribute, then
-*     it is used, otherwise the "other axis" value on the longest curve 
-*     parallel to the "other axis" is used (although the curve "other axis 
-*     = zero" is used if it passes through the plotting area and is not too 
-*     short). The effective length assigned to each curve is reduced in 
-*     proportion to the number of tick marks which are close to the edge
-*     of the plotting area.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     grid
-*        A pointer to an array of two TickInfo pointers (one for each axis), 
-*        each pointing to a TickInfo structure holding information about
-*        tick values on the axis. See function GridLines.
-*     cdata
-*        A pointer to an array of two AstPlotCurveData pointers (one for each axis), 
-*        each pointing to an array of AstPlotCurveData structure (one for each
-*        major tick value on the axis), holding information about breaks
-*        in the curves drawn to mark the major tick values. See function 
-*        DrawGrid. 
-*     labelat
-*        A pointer to a 2 element array in which to store the constant axis 
-*        values at which tick marks are put. Element 0 is returned holding
-*        the axis 1 value at which tick marks for axis 0 are placed. Element 
-*        1 is returned holding the axis 0 value at which tick marks for axis 
-*        1 are placed. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*  Notes:
-*     -  This function assumes the current Frame of the Plot is 2
-*     dimensional, and it should not be called if this is not the case. 
-*/
-
-/* Local Variables: */
-   AstMapping *mapping;   /* Mapping from graphics to physical coords */
-   AstPointSet *pset2;    /* Pointset for graphical tick positions */
-   AstPointSet *pset[ 2 ];/* Pointsets for physical tick positions */
-   AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
-   TickInfo *info;        /* Pointer to the TickInfo for the current axis */
-   double **ptr2;         /* Pointers to graphics pointset data */
-   double *ptr1[ 2 ];     /* Pointers to physical pointset data */
-   double *tvals[ 2 ];    /* Pointers to arrays of other axis values */
-   double *value;         /* Current tick value */
-   double efflen;         /* Effective length of current curve */
-   double lim;            /* Largest insignificant axis value */
-   double margin;         /* Width of margin around plotting area */
-   double maxlen;         /* Effective length of longest curve */
-   double x;              /* Tick X value */
-   double xhi;            /* Upper limit on acceptable X range */
-   double xlo;            /* Lower limit on acceptable X range */
-   double y;              /* Tick Y value */
-   double yhi;            /* Upper limit on acceptable Y range */
-   double ylo;            /* Lower limit on acceptable Y range */
-   double zerolen;        /* Effective length of curve for other axis = 0.0 */
-   int axis;              /* Current axis index */
-   int i;                 /* Tick index for this axis */
-   int nin;               /* No. of counted ticks */
-   int tick;              /* Tick index */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Create two PointSets to hold a set of tick mark positions along each
-   axis. The values on "axis" will be taken from the info structure. For
-   each axis create an array to hold values for the "other" axis. */
-   for( axis = 0; axis < 2; axis++ ){
-      info = grid[ axis ];
-      pset[ axis ] = astPointSet( info->nmajor, 2, "", status );
-      tvals[ axis ] = (double *) astMalloc( sizeof(double)*(size_t)(info->nmajor) );
-   }
-
-/* Get the mapping from Base (graphics) frame the Current (physical) */
-   mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Get the bounds of the area in which tick marks must occur to be
-   counted. This is the total plotting area minus a 5% margin at each
-   edge. */
-   margin = 0.05*( this->xhi - this->xlo );
-   xlo = this->xlo + margin;
-   xhi = this->xhi - margin;
-
-   margin = 0.05*( this->yhi - this->ylo );
-   ylo = this->ylo + margin;
-   yhi = this->yhi - margin;
-
-/* Do each axis. */
-   for( axis = 0; axis < 2 && astOK; axis++ ){
-
-/* We need to decide where to put the labels. The major tick values give
-   their location on one axis. The position on the other axis may be
-   specified by the caller using the "LabelAt" attribute, or a default value 
-   can be found if no values have been supplied for this attributes. If the 
-   attribute for this axis has been set, use its value. */
-      if( astTestLabelAt( this, axis ) ){
-         labelat[ axis ] = astGetLabelAt( this, axis );
-
-/* Otherwise, find the longest curve parallel to the axis being labelled. 
-   Also find the length of the curve which passes through the origin of the 
-   other axis which is within the plotting area... */
-      } else {
-
-/* Store pointers to the arrays holding tick mark physical coordinates,
-   and set these in the PointSet. */
-         ptr1[ axis ] = grid[ axis ]->ticks;
-         ptr1[ 1 - axis ] = tvals[ axis ];
-         astSetPoints( pset[ axis ], ptr1 );
-
-/* Get a pointer to the structure containing information describing the 
-   positions of the major tick marks along the other axis. */  
-         info = grid[ 1 - axis ];
-
-/* Get a pointer to the other axis value at the first other axis major tick 
-   mark. */
-         value = info->ticks;
-
-/* Get a limit on absolute magnitude for an axis value to be consider
-   equal to zero. */
-         lim = 1.0E-6*fabs( value[ 1 ] - value [ 0 ] );
-
-/* Get a pointer to the structure containing information describing the 
-   breaks in the curve which passes through the first major tick mark. */
-         cdt = cdata[ 1 - axis ];
-
-/* Initialise the effective length of the longest curve, and the curve passing
-   through the origin. */
-         maxlen = -1.0;
-         zerolen = 0.0;
-         labelat[ axis ] = AST__BAD;
-
-/* Loop round each of the major tick marks on the other axis. */
-         for( tick = 0; tick < info->nmajor && astOK; tick++ ){
-
-/* Fill the array of other axis values with the current other axis value. */
-            for( i = 0; i < grid[ axis ]->nmajor; i++ ){
-               tvals[ axis ][ i ] = *value;
-            }    
-
-/* Transform the tick positions from the current frame (i.e. physical 
-   coordinates) to the base frame (i.e. graphics coordinates) using 
-   the inverse Mapping. */
-            pset2 = Trans( this, NULL, mapping, pset[ axis ], 0, NULL, 0, 
-                           method, class, status );
-
-/* Get pointers to the graphics coordinates. */
-            ptr2 = astGetPoints( pset2 );
-            if( astOK ) {
-
-/* Count the number of graphics positions which are well within the plotting 
-   area. */
-               nin = 0;
-               for( i = 0; i < grid[ axis ]->nmajor; i++ ){
-                  x = ptr2[ 0 ][ i ];
-                  y = ptr2[ 1 ][ i ];
-                  if( x != AST__BAD && x > xlo && x < xhi && 
-                      y != AST__BAD && y > ylo && y < yhi ) nin++;
-               }    
-
-/*  Find the effective length of this curve.*/
-               efflen = sqrt( (float) nin )*cdt->length;
-
-/* If the curve through this tick mark has a freater effective length than any 
-   other found so far, record it. */
-               if( efflen > maxlen ){
-                  maxlen = efflen;
-                  labelat[ axis ] = *value;
-               }
-
-/* If this tick mark is at the origin, note the effective length. */
-               if( fabs( *value ) <= lim ) zerolen = efflen;
-
-/* Get a pointer to the curve through the next major tick mark. */
-               cdt++;
-
-/* Get a pointer to the axis value at the next major tick mark. */
-               value++;
-
-            }
-
-/* Free resources. */
-            pset2 = astAnnul( pset2 );
-         }
-   
-/* Use the curve through the origin unless it is significantly shorter
-   than the longest curve. */
-         if( zerolen > 0.4*maxlen ) labelat[ axis ] = 0.0;
-
-      }
-
-   }
-
-/* Release resources. */
-   for( axis = 0; axis < 2; axis++ ){
-      if( pset[ axis ] ) pset[ axis ] = astAnnul( pset[ axis ] );
-      if( tvals[ axis ] ) tvals[ axis ] = (double *) astFree( (void *) tvals[ axis ] );
-   }
-   mapping = astAnnul( mapping );
-
-/* Return. */
-   return;
-
-}
-
-static void Labels( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, 
-                    double *gap, double *labelat, const char *method, 
-                    const char *class, int *status ){
-/*
-*
-*  Name:
-*     Labels
-
-*  Purpose:
-*     Draw numerical axis labels for a 2-D annotated coordinate grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Labels( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, 
-*                  double *gap, double *labelat, const char *method, 
-*                  const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The policy for placing labels for the major tick values is broadly as
-*     follows: if possible, labels for a given physical axis are placed on
-*     one edge of the plotting area, at the place where the curve for a 
-*     major tick value crosses the edge. If very few of the curves cross
-*     the edge, then the label for a curve is placed at the intersection
-*     of that curve with the longest of the curves representing the major 
-*     tick values on the other axis.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     grid
-*        A pointer to an array of two TickInfo pointers (one for each axis), 
-*        each pointing to a TickInfo structure holding information about
-*        tick values on the axis. See function GridLines.
-*     cdata
-*        A pointer to an array of two AstPlotCurveData pointers (one for each axis), 
-*        each pointing to an array of AstPlotCurveData structure (one for each
-*        major tick value on the axis), holding information about breaks
-*        in the curves drawn to mark the major tick values. See function 
-*        DrawGrid. 
-*     gap
-*        Pointer to array of two values holding the gap between major
-*        tick values on the two axes.
-*     labelat
-*        A pointer to a 2 element array holding the constant axis 
-*        values at which tick marks are put. Element 0 should hold
-*        the axis 1 value at which tick marks for axis 0 are placed. Element 
-*        1 should hold the axis 0 value at which tick marks for axis 
-*        1 are placed. If labels are to be placed round the edges of the
-*        plotting zone instead of within the plotting zone, then values of
-*        AST__BAD should be supplied.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This function assumes the current Frame of the Plot is 2
-*     dimensional, and it should not be called if this is not the case. 
-*/
-
-/* Local Variables: */
-   AstFrame *frame;       /* Pointer to current Frame */
-   AstMapping *mapping;   /* Pointer to graphics->physical Mapping */
-   AstPointSet *pset1;    /* Pointer to PointSet holding physical coords. */
-   AstPointSet *pset2;    /* Pointer to PointSet holding graphics coords. */
-   AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
-   LabelList *labellist;  /* Pointer to list of labels to be plotted */
-   LabelList *ll;         /* Pointer to next label to be plotted */
-   TickInfo *info;        /* Pointer to the TickInfo for the current axis */
-   char just_buf[3];      /* Buffer to hold a justification string */
-   const char *just;      /* Justification string */
-   const char *text;      /* Pointer to label text */
-   double *used;          /* Pointer to list of used label values */
-   double *value;         /* Current tick value */
-   double diff;           /* Difference between adjacent major tick marks */
-   double dx2;            /* Text base-line X component after axis reversal */
-   double dx;             /* Text base-line X component */
-   double dy2;            /* Text base-line Y component after axis reversal */
-   double dy;             /* Text base-line Y component */
-   double gx;             /* Reference position graphics X coord. */
-   double gy;             /* Reference position graphics Y coord. */
-   double mindim;         /* Shortest dimension of plotting area */
-   double offx;           /* X component of offset vector */
-   double offy;           /* Y component of offset vector */
-   double sin45;          /* Sine of 45 degrees */
-   double txtgap;         /* Absolute gap between labels and edges */
-   double upx;            /* Text up-vector X component */
-   double upy;            /* Text up-vector Y component */
-   double val[ 2 ];       /* Physical coordinates */
-   float *box;            /* Pointer to array of label bounding boxes */
-   int axis;              /* Current axis index */
-   int esc;               /* Interpret escape sequences? */
-   int flag;              /* Flag indicating which way the base-vector points */
-   int iused;             /* Index into list of used axis values */
-   int last;              /* The index of the last tick to use */
-   int logticks;          /* ARe major ticks spaced logarithmically? */
-   int nlab;              /* The number of labels to be plotted */
-   int nused;             /* Number of used axis values */
-   int t0;                /* Index of central tick */
-   int tick;              /* Current tick index */
-   int tinc;              /* Increment between ticks */
-   int upfree;            /* Are we free to change the up-vector? */
-   int gelid;             /* ID for next graphical element to be drawn */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* See if escape sequences in text strings are to be interpreted */
-   esc = astGetEscape( this );
-
-/* Get the minimum dimension of the plotting ares. */
-   mindim = MIN( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Empty the list of bounding boxes kept by the Overlap function. */
-   (void) Overlap( this, 0, 0, NULL, 0.0, 0.0, NULL, 0.0, 0.0, NULL, 
-                   method, class, status );
-
-/* If required, draw the labels around the edges of the plotting area. */
-   if( labelat[ 0 ] == AST__BAD || labelat[ 1 ] == AST__BAD ){
-      (void) EdgeLabels( this, 1, grid, cdata, astGetForceExterior( this ), 
-                         method, class, status );
-
-/* Otherwise, draw labels within the interior of the plotting area. */
-   } else {
-   
-/* Store a value for the sine of 45 degrees. */
-      sin45 = 1.0/sqrt( 2.0 );
-
-/* Initialise the pointer to the memory holding the bounding boxes for 
-   all labels (used by function Overlap). */
-      box = NULL;
-
-/* Get a pointer to the current Frame in the Plot. */
-      frame = astGetFrame( this, AST__CURRENT );
-
-/* Get a pointer to the mapping form the base Frame to the current Frame in 
-   the Plot. */
-      mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Initialize the id value for graphical element being drawn. */
-      gelid = AST__NUMLAB1_ID;
-
-/* Do each axis. */
-      for( axis = 0; axis < 2; axis++ ){
-
-/* See of major ticks are spaced logarithmically on this axis. */
-         logticks = astGetLogTicks( this, axis );
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-         astGrfAttrs( this, gelid, 1, GRF__TEXT, method, class );
-
-/* Get a pointer to the structure containing information describing the 
-   positions of the major tick marks along this axis. */  
-         info = grid[ axis ];
-
-/* Only progress if there are some labels stored within the structure. */
-         if( info->labels ) {
-
-/* Initialise the pointer to the list of text strings to be drawn. */
-            labellist = NULL;
-            nlab = 0;
-
-/* See if numerical labels are always to be drawn horizontal. If so, set 
-   a flag and initialise a vertical up-vector. */
-            if( astGetLabelUp( this, axis ) ){
-               upfree = 0;
-               upx = 0.0;
-               upy = 1.0;
-
-/* Otherwise, clear the flag and indicate that we do not yet have an
-   up-vector. */
-            } else {
-               upfree = 1;
-               upx = AST__BAD;
-               upy = AST__BAD;
-            }
-
-/* Indicate that the tangent vector to the other axis is not yet 
-   known. */
-            dx = AST__BAD;
-            dy = AST__BAD;
-            gx = AST__BAD;
-            gy = AST__BAD;
-
-/* Store the gap to put next to the label text. */
-            txtgap = astGetNumLabGap( this, axis )*mindim;
-
-/* Get a pointer to the structure containing information describing the
-   breaks in the curve which passes through the first major tick mark. */
-            cdt = cdata[ axis ];
-
-/* Get a pointer to the axis value at the first major tick mark. */
-            value = info->ticks;
-
-/* Initialise pointers to two PointSets which will be created and used 
-   within function GVec. */
-            pset1 = NULL;
-            pset2 = NULL;
-
-/* Get memory to hold the axis values at which labels have been put. */
-            used = (double *) astMalloc( sizeof(double)*(size_t)info->nmajor );
-            nused = 0;
-
-/* The tick marks are done in two batches, each batch working out from the 
-   middle. This is done because there may be extra tick marks outside the
-   normal ranges at the extremes, and these should not be given the
-   priority caused by doing them first. Store the mid-tick index, the
-   current tick index, and the increment between ticks. The ticks from the
-   middle up to the highest index are done first. */
-            t0 = info->nmajor/2;
-            tick = t0 - 1;
-            tinc = 1;
-
-/* Loop round until all ticks have been done. */
-            last = info->nmajor - 1;
-            while( (tick += tinc) >= 0 && astOK ){
-
-/* If we have done the highest tick index, start again at the tick just
-   below middle, and work done towards index zero. */
-               if( tick == info->nmajor ){
-                  tick = t0 - 1;
-                  tinc = -1;
-               } 
-
-/* Store the reference position for the label . */
-               val[ axis ] = value[ tick ];
-               val[ 1 - axis ] = labelat[ axis ];
-
-/* Store the difference between this tick and the next. */
-               if( logticks ) {
-                  diff = value[ tick ]*( gap[ axis ] - 1.0 );
-               } else {
-                  diff = gap[ axis ];
-               }
-
-/* See if this axis value has already been used. */
-               for( iused = 0; iused < nused; iused++ ){
-                  if( fabs( val[ axis ] - used[ iused ] ) <
-                      1.0E-3*diff ) break;
-               }
-
-/* If the axis value has already been used, don't use it again. */
-               if( iused >= nused || nused == 0 ){
-                  used[ nused++ ] = val[ axis ];
-
-/* We now need to decide where to put the reference point for the text
-   string, and what justification to use. Assuming that NumLabGap is +ve,
-   the labels are drawn on the right hand side of the axis as seen by 
-   someone moving along the axis in the positive direction, with an 
-   up-vector which is normal to the axis tangent. First, find the graphics 
-   coordinates at the point being labelled, and the tangent-vector parallel
-   to the axis being labelled. If the tangent vector is not defined, then 
-   the tangent vector used for the previous label is re-used. */
-                  GVec( this, mapping, val, axis, 0.01*diff, &pset1, 
-                        &pset2, &gx, &gy, &dx, &dy, &flag, method, class, status );
-
-/* If we now have a tangent vector and good graphics coordinates for the 
-   label's reference position... */
-                  if( dx != AST__BAD && dy != AST__BAD &&
-                      gx != AST__BAD && gy != AST__BAD ){
-
-/* The reference position for the text is displaced away from the 
-   reference position normal to the axis on the left hand side by the 
-   "txtgap" value. */
-                     if( ( this->xrev && this->yrev ) ||
-                         ( !this->xrev && !this->yrev ) ) {
-                        offx = -dy*txtgap;                  
-                        offy = dx*txtgap;                  
-                     } else {
-                        offx = dy*txtgap;                  
-                        offy = -dx*txtgap;                  
-                     }
-
-                     gx += offx;
-                     gy += offy;
-
-/* Reverse the vector components if the graphics axes are displayed 
-   reversed. */
-                     dx2 = ( this->xrev ) ? -dx : dx;
-                     dy2 = ( this->yrev ) ? -dy : dy; 
-                     offx = ( this->xrev ) ? -offx : offx;
-                     offy = ( this->yrev ) ? -offy : offy; 
-
-/* The up-vector and justification for the text depends on whether or 
-   not the up-vector is free to rotate. If it is free, the up-vector is
-   chosen so that the text is not upside-down. */
-                     if( upfree ){
-   
-                        if( dx2 < -0.01 ){
-                           upx = dy2;
-                           upy = -dx2;
-                           just = ( txtgap < 0.0 )? "BC" : "TC";
-                        } else {
-                           upx = -dy2;
-                           upy = dx2;
-                           just = ( txtgap < 0.0 )? "TC" : "BC";
-                        }
-                        if( txtgap == 0.0 ) just = "CC";
-
-/* If the up vector is required to be vertical, a system is used which
-   tries to put the centre of the text string on or near the offset
-   vector. */
-                     } else {
-                        upx = 0.0;
-                        upy = 1.0;
-   
-                        if( offy > fabs(txtgap)*sin45 ){
-                           just_buf[0] = 'B';
-                        } else if( offy < -fabs(txtgap)*sin45 ){
-                           just_buf[0] = 'T';
-                        } else {                  
-                           just_buf[0] = 'C';
-                        }
-                        if( txtgap == 0.0 ) just_buf[0] = 'C';
-   
-                        if( offx < -fabs(txtgap)*sin45 ){
-                           just_buf[1] = 'R';
-                        } else if( offx > fabs(txtgap)*sin45 ){
-                           just_buf[1] = 'L';
-                        } else {                  
-                           just_buf[1] = 'C';
-                        }
-                        if( txtgap == 0.0 ) just_buf[1] = 'C'; 
-   
-                        just_buf[2] = 0;
-                        just = just_buf;
-                     }
-
-/* Get the label text. */
-                     text = (info->labels)[ tick ];
-                     if( text ){
-
-/* Check that the reference position is within the plotting area. 
-   If so, add it to the list of labels to be drawn. */
-                        if( gx >= this->xlo && gx <= this->xhi &&
-                            gy >= this->ylo && gy <= this->yhi ){
-
-                           labellist = (LabelList *) astGrow( (void *) labellist, nlab + 1, sizeof(LabelList) );
-                           if ( astOK ) {
-                              (labellist + nlab)->index = tick;
-                              (labellist + nlab)->text = (char *) astStore( NULL, (void *) text, strlen(text) + 1 );
-                              (labellist + nlab)->x = gx;
-                              (labellist + nlab)->y = gy;
-                              (labellist + nlab)->just = (char *) astStore( NULL, (void *) just, strlen(just) + 1 );
-                              (labellist + nlab)->upx = upx;
-                              (labellist + nlab)->upy = upy;
-                              (labellist + nlab)->val = val[ axis ];
-                              nlab++;
-                           } else {
-                              break;
-                           }
-                        }
-                     }
-                  }
-               }
-            }
-
-/* If any labels were stored, draw the text strings, and then release the
-   memory used to hold the text, etc. */
-            if( nlab > 0 ) {
-               PlotLabels( this, esc, frame, axis, labellist, info->fmt, nlab, 
-                           &box, method, class, status );
-               ll = labellist;
-               for( tick = 0; tick < nlab; tick ++ ) {
-                  ll->text = (char *) astFree( (void *) ll->text );
-                  ll->just = (char *) astFree( (void *) ll->just );
-                  ll++;
-               }
-               labellist = (LabelList *) astFree( (void *) labellist );
-            }
-
-/* Free the memory used to hold the axis values at which labels have 
-   been put. */
-            used = (double *) astFree( (void *) used );
-
-/* Annul the PointSets (if used). */
-            if( pset1 ) pset1 = astAnnul( pset1 );
-            if( pset2 ) pset2 = astAnnul( pset2 );
-
-/* Re-establish the original graphical attributes. */
-            astGrfAttrs( this, gelid, 0, GRF__TEXT, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
-            gelid = AST__NUMLAB2_ID;
-
-         }
-      }
-
-/* Free the memory used to hold the bounding boxes. */
-      box = (float *) astFree( (void *) box );
-
-/* Annul the pointers to the Frame and the Mapping. */
-      mapping = astAnnul( mapping );
-      frame = astAnnul( frame );
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static void LinePlot( AstPlot *this, double xa, double ya, double xb, 
-                      double yb, int ink, AstPlotCurveData *cdata, 
-                      const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     LinePlot
-
-*  Purpose:
-*     Draws a straight line omitting bad regions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void LinePlot( AstPlot *this, double xa, double ya, double xb, 
-*                    double yb, int ink, AstPlotCurveData *cdata, 
-*                    const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws a straight line between two positions in graphics 
-*     coordinates but leaves gaps in the line where it passes through
-*     regions which have no corresponding physical coordinates. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     xa
-*        The graphics X coordinate at the start of the line.
-*     ya
-*        The graphics Y coordinate at the start of the line.
-*     xb
-*        The graphics X coordinate at the end of the line.
-*     yb
-*        The graphics Y coordinate at the end of the line.
-*     ink
-*        If zero, the line is not actually drawn, but information about 
-*        the breaks is still returned. If non-zero, the line is also drawn.
-*     cdata
-*        A pointer to a structure in which to return information about the
-*        breaks in the line.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  No curve is draw if any of the start or end positions are bad
-*     (i.e. equal to AST__BAD), or if a NULL pointer is supplied for "cdata". 
-*     No errors are reported in these cases.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   double d[ CRV_NPNT ];   /* Offsets to evenly spaced points along curve */
-   double x[ CRV_NPNT ];   /* X coords at evenly spaced points along curve */
-   double y[ CRV_NPNT ];   /* Y coords at evenly spaced points along curve */
-   double tol;             /* Absolute tolerance value */
-   int i;                  /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Check the supplied values are usable. */
-   if( xa == AST__BAD || ya == AST__BAD || 
-       xb == AST__BAD || yb == AST__BAD ||
-      !cdata ) return;
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
-   tol = astGetTol( this )*MAX( this->xhi - this->xlo, this->yhi - this->ylo );
-
-/* Set up the external variables used by the Crv and CrvLine function (see 
-   their prologues for details). */
-   Crv_scerr = ( astGetLogPlot( this, 0 ) || 
-                 astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
-   Crv_ux0 = AST__BAD;
-   Crv_limit = 0.5*tol*tol;
-   Crv_tol = tol;
-   Crv_map = Map2;
-   Crv_ink = ink;
-   Crv_len = 0.0F;
-   Crv_xlo = this->xlo;
-   Crv_xhi = this->xhi;
-   Crv_ylo = this->ylo;
-   Crv_yhi = this->yhi;
-   Crv_out = 1;
-   Crv_xbrk = cdata->xbrk;
-   Crv_ybrk = cdata->ybrk;
-   Crv_vxbrk = cdata->vxbrk;
-   Crv_vybrk = cdata->vybrk;
-   Crv_clip = astGetClip( this ) & 1;
-
-/* Create a set of evenly spaced values between 0.0 and 1.0. These are the
-   offsets the edge of the plotting zone at which the mapping is tested. */
-   for( i = 0; i < CRV_NPNT; i++ ){
-     d[ i ] = ( (double) i)/( (double) CRV_NSEG );
-   }
-
-/* Now set up the externals used to communicate with the Map2 function.
-   Map2 transforms a set of offsets between zero and one into a set of
-   corresponding graphics coordinates, with bad values substituted for any
-   offsets which correspond to points outside the domain of the mapping. */
-
-/* The number of axes in the physical coordinate system (i.e. the current
-   Frame). */
-   Map2_ncoord = astGetNout( this );
-
-/* A pointer to the mapping from graphics world cordinates to physical
-   coordinates. */
-   Map2_plot = this;
-   Map2_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* The graphics coordinates corresponding to an offset of zero (i.e.
-   the start of the line). */
-   Map2_x0 = xa;
-   Map2_y0 = ya;
-
-/* The increments in X and Y between offset zero (the start of the
-   line) and offset 1 (the end of the line). */
-   Map2_deltax = xb - xa;
-   Map2_deltay = yb - ya;
-
-/* Get the graphics coordinates corresponding to the initial set of
-   offsets. */
-   Map2( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map2 to draw the intersection of the straight line with
-   the region containing valid physical coordinates. */
-   Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
-   Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map2. */
-   Map2( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* If no part of the curve could be drawn, set the number of breaks and the 
-   length of the drawn curve to zero. */
-   if( Crv_out ) {
-      Crv_nbrk = 0;
-      Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of 
-   the last point to be plotted. */
-   } else {
-      Crv_nbrk++;
-      if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
-         astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
-                   "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
-      } else {
-         *(Crv_xbrk++) = (float) Crv_xl;
-         *(Crv_ybrk++) = (float) Crv_yl;
-         *(Crv_vxbrk++) = (float) -Crv_vxl;
-         *(Crv_vybrk++) = (float) -Crv_vyl;
-      }
-   }
-
-/* Store extra information about the curve in the returned structure, and 
-   purge any zero length sections. */
-   if( cdata ){
-      cdata->length = Crv_len;
-      cdata->out = Crv_out;
-      cdata->nbrk = Crv_nbrk;
-      PurgeCdata( cdata, status );
-   }
-
-/* Annul the Mapping. */
-   Map2_map = astAnnul( Map2_map );
-
-/* Return. */
-   return;
-
-}
-
-static double **MakeGrid( AstPlot *this, AstFrame *frm, AstMapping *map, 
-                          int disk, int dim, double xlo, double xhi, 
-                          double ylo, double yhi, int nphy, AstPointSet **pset1,
-                          AstPointSet **pset2, int norm, const char *method, 
-                          const char *class, int *status ){
-/*
-*  Name:
-*     MakeGrid
-
-*  Purpose:
-*     Create a square grid of graphics coordinates and the corresponding 
-*     physical coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     double **MakeGrid( AstPlot *this, AstFrame *frm, AstMapping *map, 
-*                        int disk, int dim, double xlo, double xhi, double ylo,
-*                        double yhi, int nphy, AstPointSet **pset1, 
-*                        AstPointSet **pset2, int norm, const char *method, 
-*                        const char *class, int *status ){
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function creates two PointSets, one holding a square grid of
-*     graphics coordinates covering the supplied area, and the other
-*     holding the corresponding physical coordinates. The points are
-*     stored row by row in the returned PointSets, i.e. if the cell size
-*     for the grid is (dx,dy), the first point is (xmin,ymin), followed
-*     by (xmin+dx,ymin), (xmin+2*dx,ymin), up to (xmin+(dim-1)*dx,ymin),
-*     followed by the next row (xmin,ymin+dy), (xmin+dx,ymin+dy), etc.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     frm
-*        A pointer to the Current Frame in the Plot. If this is supplied
-*        NULL, then a pointer is found within this function if required (i.e. 
-*        if "norm" is non-zero).
-*     map
-*        The Mapping from graphics to physical coordinates, extracted from
-*        the Plot.
-*     disk
-*        If non-zero, the corners of the grid are omitted form the
-*        returned PointSets, resulting in a grid that is more disk like than
-*        rectangular.
-*     dim
-*        The number of samples along each edge of the grid.
-*     xlo
-*        The lower bound on the first axis of the region to be covered
-*        by the grid.
-*     xhi
-*        The upper bound on the first axis of the region to be covered
-*        by the grid.
-*     ylo
-*        The lower bound on the second axis of the region to be covered
-*        by the grid.
-*     yhi
-*        The upper bound on the second axis of the region to be covered
-*        by the grid.
-*     nphy
-*        The number of axes in the physical cooridinate system.
-*     pset1
-*        A pointer to a location at which to store a pointer to the
-*        PointSet holding the graphics coordinates.
-*     pset2
-*        A pointer to a location at which to store a pointer to the
-*        PointSet holding the physical coordinates.
-*     norm
-*        If non-zero the physical cooridnates are normalised using the
-*        Plot's astNorm method.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the physical coordinate data stored in the PointSet
-*     "pset2".
-
-*  Notes:
-*     - The returned PointSets should be annulled when no longer needed,
-*     using astAnnul.
-*     -  NULL pointers are returned if an error has already occurred, or
-*     if this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   double **ptr1;    /* Pointers to graphics axis values */
-   double **ptr2;    /* Pointers to physical axis values */
-   int size;         /* No. of points in the grid */
-
-/* Initialise the returned pointers. */
-   *pset1 = NULL;
-   *pset2 = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Create two PointSets. We assume for the moment that they cover the
-   full grid, including corners. */
-   size = dim*dim;
-   *pset1 = astPointSet( size, 2, "", status );
-   *pset2 = astPointSet( size, nphy, "", status );
-
-/* Get pointers to the data arrays for the two PointSets. */
-   ptr1 = astGetPoints( *pset1 );
-   ptr2 = astGetPoints( *pset2 );
-
-/* Create a grid covering the supplied area. */
-   size = GraphGrid( dim, disk, xlo, xhi, ylo, yhi, ptr1, status );
-
-/* If the corners are being omitted, reduce the number of points in the 
-   two PointSets. */
-   if( disk ) {
-      astSetNpoint( *pset1, size );
-      astSetNpoint( *pset2, size );
-   }
-
-/* Transform these graphics positions to physical coordinates. */
-   Trans( this, frm, map, *pset1, 1, *pset2, norm, method, class, status ); 
-
-/* If an error has occurred, annul the two pointsets. */
-   if( !astOK ){
-      *pset1 = astAnnul( *pset1 );
-      *pset2 = astAnnul( *pset2 );
-      ptr2 = NULL;
-   }
-
-/* Return. */
-   return ptr2;
-
-}
-
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     Plot member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstPlot *this;    /* Pointer to Plot structure */
-   int result;       /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the Plot structure. */
-   this = (AstPlot *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* If defined, ensure the grfcontext KeyMap contained within the Plot is 
-   locked, unlocked or checked. */
-   if( this->grfcontext ) {
-      if( !result ) result = astManageLock( this->grfcontext, mode, extra, fail );
-
-/* Also lock or unlock the associated object handle. */
-      if( mode == AST__LOCK ) {
-         if( !result ) astLock( this->grfcontextID, extra );
-
-      } else if( mode == AST__UNLOCK ) {
-         if( !result ) astUnlock( this->grfcontextID, 0 );
- 
-      } 
-   }
-
-   return result;
-
-}
-#endif
-
-static void Map1( int n, double *dist, double *x, double *y, 
-                  const char *method, const char *class, 
-                  int *status GLOBALS_ARG ){
-/*
-*  Name:
-*     Map1
-
-*  Purpose:
-*     Find graphics coordinates at given distances along a curve
-*     parallel to a physical axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Map1( int n, double *dist, double *x, double *y,
-*                const char *method, const char *class, 
-*                int *status [,AstGlobals *AST__GLOBALS] )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied distances are converted into physical coordinates
-*     using the scalings described by various external variables, and then 
-*     these physical coordinates are mapped into graphics coordinates. 
-
-*  Parameters:
-*     n 
-*        The number of points to map. Static resources are released but
-*        no points are mapped if zero is supplied.
-*     dist
-*        A pointer to an array holding "n" distances. A "dist" value of
-*        zero corresponds to the starting position supplied in external 
-*        variable Map1_origin. A "dist" value of one corresponds to the 
-*        finishing position which is a distance Map1_length away from 
-*        Map1_origin, moving in the positive direction of the axis given 
-*        by Map1_axis. "dist" values can be either linearly or
-*        logarithmically related to axis values (see Map1_log).
-*     x
-*        A pointer to an array in which to store the "n" graphics X 
-*        coordinate values corresponding to the positions in "dist".
-*     y
-*        A pointer to an array in which to store the "n" graphics Y
-*        coordinate values corresponding to the positions in "dist".
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*     AST__GLOBALS
-*        Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-*        the structure holding the global data for the executing thread.
-*        It is passed as a function parameter, rather than being accessed
-*        within this function using the astGET_GLOBALS(NULL) macro (as
-*        other Object-less functions do) in order to avoid the time
-*        overheads of calling astGET_GLOBALS(NULL) . This function is
-*        time-critical.
-
-*  External Variables:
-*     Map1_log = int (Read)
-*        If zero, then "dist" in learly related to axis value. Otherwise
-*        it is linearly related to log10(axis value).
-*     Map1_ncoord = int (Read)
-*        The number of axes in the physical coordinate system.
-*     Map1_axis = int (Read)
-*        The zero-based index of the axis which the curve follows (i.e.
-*        the axis which changes value along the curve).
-*     Map1_statics = Map1Statics * (Read and Write)
-*        Pointer to a structure holding other static data used by Map1.
-*     Map1_origin = const double * (Read)
-*        A pointer to an array holding the physical coordinate value on 
-*        each axis at the start of the curve (i.e. at dist = 0.0).
-*     Map1_length = double (Read)
-*        The scale factor to convert "dist" values into increments
-*        along the physical axis given by Map1_axis.
-*     Map1_plot = AstPlot * (Read)
-*        A pointer to the Plot defining the mapping from graphics cordinates
-*        to physical coordinates.
-*     Map1_map = AstMapping * (Read)
-*        A pointer to the mapping from graphics cordinates to physical 
-*        coordinates extracted from the Plot.
-*     Map1_frame = AstFrame * (Read)
-*        A pointer to the Current Frame in the Plot.
-*     Map1_norm = int (Read)
-*        A flag indicating if physical coordinate values which are not in
-*        the normal ranges of the corresponding axes should be considered
-*        bad.
-
-*  Notes:
-*     -  On the first call, this function allocates static resources which 
-*     are used by subsequent invocation. These resources should be freed before
-*     calling this function with new values for any of the external variables, 
-*     or when no longer needed, by calling this function with "n" supplied as 
-*     zero.
-*     -  If an error has already occurred, this runction returns without 
-*     action ,except that if "n" is supplied as zero then static resources
-*     are released even if an error has already occurred.
-
-*/
-
-/* Local Constants: */
-   Map1Statics *statics;     /* Pointer to structure holding static data */
-   double *p;                /* Pointer to next value */
-   double axval;             /* Axis origin value */
-   int i, j;                 /* Loop counts */
-
-/* Convert the global "void *" pointer to a Map1Statics pointer */
-   statics = (Map1Statics *) Map1_statics;
-
-/* If zero points were supplied, release static resources and return. */
-   if( n == 0 ){
-      if( statics ) {
-         if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-         if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-         if( statics->work1 ) statics->work1 = (double *) astFree( (void *) statics->work1 );
-         if( statics->work2 ) statics->work2 = (double *) astFree( (void *) statics->work2 );
-         Map1_statics = astFree( statics );
-      }
-      return;
-   }
-   
-/* Otherwise, check the inherited global status. */
-   if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if 
-   this has not already been done. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( Map1Statics ) );
-      if( statics ) {    
-         statics->pset1 = NULL; 
-         statics->pset2 = NULL; 
-         statics->ptr1 = NULL;  
-         statics->pax = NULL;   
-         statics->ptr2[ 0 ] = NULL; 
-         statics->ptr2[ 1 ] = NULL; 
-         statics->work1 = NULL; 
-         statics->work2 = NULL; 
-         statics->nl = 0;       
-         Map1_statics = statics;
-      }
-   }
-
-/* If the number of points to be mapped is different to last time, 
-   set up some PointSets to store the specified number of points. */
-   if( n != statics->nl ){
-      statics->nl = n;
-
-/* Create a PointSet to hold the physical coordinates corresponding to
-   the supplied offsets. First annul any existing PointSet. */
-      if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-      statics->pset1 = astPointSet( n, Map1_ncoord, "", status );   
-      statics->ptr1 = astGetPoints( statics->pset1 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates. 
-   The supplied "x" and "y" arrays will be used to store the data 
-   so we do not need to get pointers to the data using astGetPoints. First 
-   annul any existing PointSet. */
-      if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-      statics->pset2 = astPointSet( n, 2, "", status );   
-
-/* Get work space to hold two positions. */
-      statics->work1 = (double *) astRealloc( (void *) statics->work1,
-                                          sizeof(double)*(size_t)Map1_ncoord );
-      statics->work2 = (double *) astRealloc( (void *) statics->work2,
-                                          sizeof(double)*(size_t)Map1_ncoord );
-
-/* Check the pointer can be used. */
-      if( astOK ){
-
-/* Store a pointer to the start of the memory which will be used to store 
-   the physical data for the axis being drawn. */
-         statics->pax = statics->ptr1[ Map1_axis ]; 
-         
-/* Fill the PointSet which is used to hold physical data with the physical 
-   coordinates at the start of the curve. */
-         for( i = 0; i < Map1_ncoord; i++ ){
-            axval = Map1_origin[ i ];
-            p = statics->ptr1[ i ];
-            for( j = 0; j < n; j++ ) *(p++) = axval;
-         }           
-
-/* Store the scale and offset to apply to the "dist" values. If Map1_log is
-   zero (linear axes) then applying these values gives axis value directly.
-   If Map1_log is non-zero (log axes) then applying these values gives
-   log10( axis value). */
-         if( Map1_log ) {
-            statics->neg = ( Map1_origin[ Map1_axis ] < 0 );
-            statics->axorig = log10( fabs( Map1_origin[ Map1_axis ] ) );
-            statics->axscale = log10( fabs( Map1_origin[ Map1_axis ] + 
-                                   Map1_length ) ) - statics->axorig;
-         } else {
-            statics->axorig = Map1_origin[ Map1_axis ];
-            statics->axscale = Map1_length;
-         }
-       }
-    }
-
-/* Check the initialisation went OK (if done). */
-   if( astOK ){
-
-/* Loop round each offset along the curve, converting the normalised offset 
-   in the range [0,1] to a physical coordinate and storing in PointSet 1. */
-      p = statics->pax;
-      for( i = 0; i < n; i++){
-         *(p++) = statics->axorig + statics->axscale*dist[ i ];
-      }
-      if( Map1_log ) {
-         p = statics->pax;
-         for( i = 0; i < n; i++,p++ ){
-            *p = statics->neg ? -pow( 10.0, *p ) : pow( 10.0, *p );
-         }
-      }
-
-/* Store pointers to the results arrays in PointSet 2. */
-      statics->ptr2[ 0 ] = x;
-      statics->ptr2[ 1 ] = y;   
-      astSetPoints( statics->pset2, statics->ptr2 );
-
-/* Map all the positions into graphics coordinates. */
-      (void) Trans( Map1_plot, NULL, Map1_map, statics->pset1, 0, statics->pset2, 1, method, class, status );
-
-/* If points not in their normal ranges are to be set bad... */
-      if( Map1_norm ) { 
-
-/* The following code simply normalizes the physical position, and if this
-   produces any change, the graphics positions are set bad. */
-         for( i = 0; i < n; i++){
-            for( j = 0; j < Map1_ncoord; j++) statics->work1[j] = statics->ptr1[j][i];
-            astNorm( Map1_frame, statics->work1 );
-            for( j = 0; j < Map1_ncoord; j++) {
-               if( !EQUAL( statics->work1[j], statics->ptr1[j][i] ) ) {
-                  statics->ptr2[0][i] = AST__BAD;
-                  statics->ptr2[1][i] = AST__BAD;
-                  break;
-               }
-            }
-         }
-      }
-   }
-   
-/* Return. */
-   return;
-
-}
-
-static void Map2( int n, double *dist, double *x, double *y, 
-                  const char *method, const char *class, 
-                  int *status GLOBALS_ARG ){
-/*
-*  Name:
-*     Map2
-
-*  Purpose:
-*     Find which graphics coordinates have good physical coordinates
-*     at given distances along a straight line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Map2( int n, double *dist, double *x, double *y, 
-*                const char *method, const char *class, 
-*                int *status [,AstGlobals *AST__GLOBALS] )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied distances refer to the distance along a straight line
-*     in the graphics coordinate system. The returned graphics coordinates
-*     correspond to the supplied distances, except that any position for
-*     which there are no defined physical coordinates is returned bad.
-
-*  Parameters:
-*     n 
-*        The number of points to map. Static resources are released but
-*        no points are mapped if zero is supplied.
-*     dist
-*        A pointer to an array holding "n" distances. A "dist" value of
-*        zero corresponds to the graphics position supplied in external 
-*        variables (Map2_x0, Map2_y0). A "dist" value of one corresponds to 
-*        the graphics position which is offset from the start by the vector
-*        (Map2_deltax, Map2_deltay).
-*     x
-*        A pointer to an array in which to store the "n" graphics X 
-*        coordinate values corresponding to the positions in "dist",
-*        except that any which have no corresponding physical coordinates
-*        are set to AST__BAD.
-*     y
-*        A pointer to an array in which to store the "n" graphics Y
-*        coordinate values corresponding to the positions in "dist",
-*        except that any which have no corresponding physical coordinates
-*        are set to AST__BAD.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*     AST__GLOBALS
-*        Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-*        the structure holding the global data for the executing thread.
-*        It is passed as a function parameter, rather than being accessed
-*        within this function using the astGET_GLOBALS(NULL) macro (as
-*        other Object-less functions do) in order to avoid the time
-*        overheads of calling astGET_GLOBALS(NULL) . This function is
-*        time-critical.
-
-*  External Variables:
-*     Map2_ncoord = int (Read)
-*        The number of axes in the physical coordinate system.
-*     Map2_x0 = double (Read)
-*        The graphics X coordinate at the start of the line (i.e. at dist 
-*        = 0.0).
-*     Map2_y0 = double (Read)
-*        The graphics Y coordinate at the start of the line (i.e. at dist 
-*        = 0.0).
-*     Map2_deltax = double (Read)
-*        The increment along the graphics X axis between the start and
-*        end of the line.
-*     Map2_deltay = double (Read)
-*        The increment along the graphics Y axis between the start and
-*        end of the line.
-*     Map2_plot = AstPlot * (Read)
-*        A pointer to the Plot defining the mapping from graphics cordinates
-*        to physical coordinates.
-*     Map2_map = AstMapping * (Read)
-*        A pointer to the mapping from graphics cordinates to physical 
-*        coordinates, extracted from the Plot.
-*     Map2_statics = Map2Statics * (Read and Write)
-*        Pointer to a structure holding other static data used by Map2.
-
-*  Notes:
-*     -  On the first call, this function allocates static resources which 
-*     are used by subsequent invocation. These resources should be freed before
-*     calling this function with new values for any of the external variables, 
-*     or when no longer needed, by calling this function with "n" supplied as 
-*     zero.
-*     -  If an error has already occurred, this runction returns without 
-*     action ,except that if "n" is supplied as zero then static resources
-*     are released even if an error has already occurred.
-
-*/
-/* Local Constants: */
-   Map2Statics *statics;           /* Pointer to structure holding static data */
-   int i, j;                       /* Loop counts */
-   double *p;                      /* Pointer to next physical value */
-   double *px;                     /* Pointer to next x graphics value */
-   double *py;                     /* Pointer to next y graphics value */
-
-/* Convert the global "void *" pointer to a Map2Statics pointer */
-   statics = (Map2Statics *) Map2_statics;
-
-/* If zero points were supplied, release static resources and return. */
-   if( n == 0 ){
-      if( statics ) {
-         if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-         if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-         Map2_statics = astFree( statics );
-      }
-      return;
-   }
-   
-/* Otherwise, check the inherited global status. */
-   if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if 
-   this has not already been done. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( Map2Statics ) );
-      if( statics ) {    
-         statics->pset1 = NULL; 
-         statics->pset2 = NULL; 
-         statics->ptr2 = NULL;  
-         statics->ptr1[ 0 ] = NULL; 
-         statics->ptr1[ 1 ] = NULL; 
-         statics->nl = 0;       
-         Map2_statics = statics;
-      }
-   }
-
-/* If the number of points to be mapped is different to last time, 
-   set up some PointSets to store the specified number of points. */
-   if( n != statics->nl ){
-      statics->nl = n;
-
-/* Create a PointSet to hold the graphics coordinates corresponding to
-   the supplied offsets. The supplied arrays will be used to hold the
-   data for this PointSet, and so astGetPoints is not called. */
-      if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-      statics->pset1 = astPointSet( n, 2, "", status );   
-
-/* Create a PointSet to hold the corresponding physical coordinates, and
-   get pointers to the associated axis values. */
-      if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-      statics->pset2 = astPointSet( n, Map2_ncoord, "", status );   
-      statics->ptr2 = astGetPoints( statics->pset2 );
-    }
-
-
-/* Check the initialisation went OK (if done). */
-   if( astOK ){
-
-/* Store pointers to the results arrays in PointSet 1. */
-      statics->ptr1[ 0 ] = x;
-      statics->ptr1[ 1 ] = y;   
-      astSetPoints( statics->pset1, statics->ptr1 );
-
-/* Loop round each offset along the curve, converting the normalised offset 
-      in the range [0,1] to graphics coordinate and storing in PointSet 1. */
-      px = x;
-      py = y;
-      for( i = 0; i < n; i++){
-         *(px++) = Map2_x0 + Map2_deltax*dist[ i ];
-         *(py++) = Map2_y0 + Map2_deltay*dist[ i ];
-      }
-
-/* Map all the positions into physical coordinates. */
-      (void) Trans( Map2_plot, NULL, Map2_map, statics->pset1, 1, statics->pset2, 0, method, class, status );
-
-/* Check the physical coordinates for bad values, setting the corresponding
-   graphics coordinates bad. */
-      for( j = 0; j < Map2_ncoord; j++ ){
-         p = statics->ptr2[ j ];   
-         px = x;
-         py = y;
-   
-         for( i = 0; i < n; i++){
-            if( *(p++) == AST__BAD ){
-               *(px++) = AST__BAD;
-               *(py++) = AST__BAD;
-            } else {
-               px++;
-               py++;
-            }
-         }
-      }
-   }
-
-/* Return. */
-   return;
-
-}
-
-static void Map3( int n, double *dist, double *x, double *y, 
-                  const char *method, const char *class,
-                  int *status GLOBALS_ARG ){
-/*
-*  Name:
-*     Map3
-
-*  Purpose:
-*     Find graphics coordinates at given distances along a geodesic curve
-*     between two physical coordinate positions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Map3( int n, double *dist, double *x, double *y,
-*                const char *method, const char *class, 
-*                int *status [,AstGlobals *AST__GLOBALS] )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied distances are converted into physical offsets along the 
-*     geodesic curve joining the starting and finishing points given by
-*     externals Map3_origin and Map3_end. The physical coordinates at these
-*     offsets are found, and transformed into graphics coordinates.
-
-*  Parameters:
-*     n 
-*        The number of points to map. Static resources are released but
-*        no points are mapped if zero is supplied.
-*     dist
-*        A pointer to an array holding "n" distances. A "dist" value of
-*        zero corresponds to the starting position supplied in external 
-*        variable Map3_origin. A "dist" value of one corresponds to the 
-*        finishing position given by Map3_end.
-*     x
-*        A pointer to an array in which to store the "n" graphics X 
-*        coordinate values corresponding to the positions in "dist".
-*     y
-*        A pointer to an array in which to store the "n" graphics Y
-*        coordinate values corresponding to the positions in "dist".
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*     AST__GLOBALS
-*        Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-*        the structure holding the global data for the executing thread.
-*        It is passed as a function parameter, rather than being accessed
-*        within this function using the astGET_GLOBALS(NULL) macro (as
-*        other Object-less functions do) in order to avoid the time
-*        overheads of calling astGET_GLOBALS(NULL) . This function is
-*        time-critical.
-
-*  External Variables:
-*     Map3_ncoord = int (Read)
-*        The number of axes in the physical coordinate system.
-*     Map3_origin = const double * (Read)
-*        A pointer to an array holding the physical coordinate value on 
-*        each axis at the start of the curve (i.e. at dist = 0.0).
-*     Map3_end = const double * (Read)
-*        A pointer to an array holding the physical coordinate value on 
-*        each axis at the end of the curve (i.e. at dist = 1.0).
-*     Map3_scale = double (Read)
-*        The scale factor to convert "dist" values into physical offsets 
-*        along the geodesic curve.
-*     Map3_statics = Map3Statics * (Read and Write)
-*        Pointer to a structure holding other static data used by Map3.
-*     Map3_plot = AstPlot * (Read)
-*        A pointer to the Plot defining the mapping from graphics cordinates
-*        to physical coordinates.
-*     Map3_map = AstMapping * (Read)
-*        A pointer to the mapping from graphics cordinates to physical 
-*        coordinates extracted from the Plot.
-*     Map3_frame = AstFrame * (Read)
-*        A pointer to the Current Frame in the Plot.
-
-*  Notes:
-*     -  On the first call, this function allocates static resources which 
-*     are used by subsequent invocation. These resources should be freed before
-*     calling this function with new values for any of the external variables, 
-*     or when no longer needed, by calling this function with "n" supplied as 
-*     zero.
-*     -  If an error has already occurred, this runction returns without 
-*     action ,except that if "n" is supplied as zero then static resources
-*     are released even if an error has already occurred.
-
-*/
-
-/* Local Constants: */
-   Map3Statics *statics;             /* Pointer to structure holding static data */
-   int i, j;                         /* Loop counts */
-
-/* Convert the global "void *" pointer to a Map3Statics pointer */
-   statics = (Map3Statics *) Map3_statics;
-
-/* If zero points were supplied, release static resources and return. */
-   if( n == 0 ){
-      if( statics ) {
-         if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-         if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-         if( statics->pos ) statics->pos = (double *) astFree( (void *) statics->pos );
-         Map3_statics = astFree( statics );
-      }
-      return;
-   }
-   
-/* Otherwise, check the inherited global status. */
-   if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if 
-   this has not already been done. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( Map3Statics ) );
-      if( statics ) {    
-         statics->pset1 = NULL;
-         statics->pset2 = NULL;
-         statics->ptr1 = NULL; 
-         statics->ptr2[ 0 ] = NULL;
-         statics->ptr2[ 1 ] = NULL;
-         statics->nc = 0;      
-         statics->nl = 0;      
-         statics->pos = NULL;  
-         Map3_statics = statics;
-      }
-   }
-
-/* If the number of points to be mapped is different to last time, 
-   set up some PointSets to store the specified number of points. */
-   if( n != statics->nl ){
-      statics->nl = n;
-
-/* Create a PointSet to hold the physical coordinates corresponding to
-   the supplied offsets. First annul any existing PointSet. */
-      if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-      statics->pset1 = astPointSet( n, Map3_ncoord, "", status );   
-      statics->ptr1 = astGetPoints( statics->pset1 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates. 
-   The supplied "x" and "y" arrays will be used to store the data 
-   so we do not need to get pointers to the data using astGetPoints. First 
-   annul any existing PointSet. */
-      if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-      statics->pset2 = astPointSet( n, 2, "", status );   
-
-   }
-
-/* If the number of physical axes is different to last time,  allocate
-   memory to hold a single physical position. */
-   if( statics->nc != Map3_ncoord ){
-      statics->nc = Map3_ncoord;
-      statics->pos = (double *) astMalloc( sizeof(double)*(size_t)Map3_ncoord );
-   }
-
-/* Check the initialisation went OK (if done). */
-   if( astOK ){
-
-/* Loop round each offset along the curve, converting the normalised offset 
-   in the range [0,1] to a physical offset, and then into a physical
-   position, and store in PointSet 1. */
-      for( i = 0; i < n; i++){
-         astOffset( Map3_frame, Map3_origin, Map3_end, Map3_scale*dist[ i ],
-                    statics->pos );
-
-         for( j = 0; j < Map3_ncoord; j++ ){
-            statics->ptr1[ j ][ i ] = statics->pos[ j ];
-         }
-
-      }
-
-/* Store pointers to the results arrays in PointSet 2. */
-      statics->ptr2[ 0 ] = x;
-      statics->ptr2[ 1 ] = y;   
-      astSetPoints( statics->pset2, statics->ptr2 );
-
-/* Map all the positions into graphics coordinates. */
-      (void) Trans( Map3_plot, NULL, Map3_map, statics->pset1, 0, statics->pset2, 1, method, class, status );
-   }
-   
-/* Return. */
-   return;
-
-}
-
-static void Map4( int n, double *dist, double *x, double *y, 
-                  const char *method, const char *class, 
-                  int *status GLOBALS_ARG ){
-/*
-*  Name:
-*     Map4
-
-*  Purpose:
-*     Find graphics coordinates at given distances along a user
-*     specified curve.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Map4( int n, double *dist, double *x, double *y,
-*                const char *method, const char *class, 
-*                int *status [,AstGlobals *AST__GLOBALS] )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied distances are converted into physical coordinates using
-*     the Mapping Map4_umap. These physical coordinates are transformed into 
-*     graphics coordinates.
-
-*  Parameters:
-*     n 
-*        The number of points to map. Static resources are released but
-*        no points are mapped if zero is supplied.
-*     dist
-*        A pointer to an array holding "n" distances. A "dist" value of
-*        zero corresponds to the starting position supplied in external 
-*        variable Map3_origin. A "dist" value of one corresponds to the 
-*        finishing position given by Map3_end.
-*     x
-*        A pointer to an array in which to store the "n" graphics X 
-*        coordinate values corresponding to the positions in "dist".
-*     y
-*        A pointer to an array in which to store the "n" graphics Y
-*        coordinate values corresponding to the positions in "dist".
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*     AST__GLOBALS
-*        Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-*        the structure holding the global data for the executing thread.
-*        It is passed as a function parameter, rather than being accessed
-*        within this function using the astGET_GLOBALS(NULL) macro (as
-*        other Object-less functions do) in order to avoid the time
-*        overheads of calling astGET_GLOBALS(NULL) . This function is
-*        time-critical.
-
-*  External Variables:
-*     Map4_ncoord = int (Read)
-*        The number of axes in the physical coordinate system.
-*     Map4_plot = AstPlot * (Read)
-*        A pointer to the Plot defining the mapping from graphics cordinates
-*        to physical coordinates.
-*     Map4_map = AstMapping * (Read)
-*        A pointer to the mapping from graphics cordinates to physical 
-*        coordinates extracted from the Plot.
-*     Map4_statics = Map4Statics * (Read and Write)
-*        Pointer to a structure holding other static data used by Map4.
-*     Map4_umap = AstMapping * (Read)
-*        A pointer to the mapping from distance along the curve to physical 
-*        coordinates.
-
-*  Notes:
-*     -  On the first call, this function allocates static resources which 
-*     are used by subsequent invocation. These resources should be freed before
-*     calling this function with new values for any of the external variables, 
-*     or when no longer needed, by calling this function with "n" supplied as 
-*     zero.
-*     -  If an error has already occurred, this runction returns without 
-*     action ,except that if "n" is supplied as zero then static resources
-*     are released even if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   Map4Statics *statics;             /* Pointer to structure holding static data */
-   double *ptr1[ 1 ];                /* Pointer to distances data */
-   double *ptr3[ 2 ];                /* Pointers to graphics coord data */
-
-/* Convert the global "void *" pointer to a Map4Statics pointer */
-   statics = (Map4Statics *) Map4_statics;
-
-/* If zero points were supplied, release static resources and return. */
-   if( n == 0 ){
-      if( statics ) {
-         if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-         if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-         if( statics->pset3 ) statics->pset3 = astAnnul( statics->pset3 );
-         Map4_statics = astFree( statics );
-      }
-      return;
-   }
-   
-/* Otherwise, check the inherited global status. */
-   if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if 
-   this has not already been done. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( Map4Statics ) );
-      if( statics ) {    
-         statics->pset1 = NULL; 
-         statics->pset2 = NULL; 
-         statics->pset3 = NULL; 
-         statics->nl = 0;       
-         Map4_statics = statics;
-      }
-   }
-
-/* If the number of points to be mapped is different to last time, 
-   set up some PointSets to store the specified number of points. */
-   if( n != statics->nl ){
-      statics->nl = n;
-
-/* Create a PointSet to hold the distances along the curve. First annul any 
-   existing PointSet. */
-      if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-      statics->pset1 = astPointSet( n, 1, "", status );   
-
-/* Create a PointSet to hold the physical coordinates corresponding to
-   the supplied distances. First annul any existing PointSet. */
-      if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-      statics->pset2 = astPointSet( n, Map4_ncoord, "", status );   
-
-/* Create a PointSet to hold the corresponding graphics coordinates. 
-   First annul any existing PointSet. */
-      if( statics->pset3 ) statics->pset3 = astAnnul( statics->pset3 );
-      statics->pset3 = astPointSet( n, 2, "", status );   
-
-   }
-
-/* Check the initialisation went OK (if done). */
-   if( astOK ){
-
-/* Use Map4_umap to convert the supplied distances into physical coords
-   (i.e. coords in the current Frame of the Plot). */
-      ptr1[ 0 ] = dist;
-      astSetPoints( statics->pset1, ptr1 );
-      (void) astTransform( Map4_umap, statics->pset1, 1, statics->pset2 );
-
-/* Store pointers to the results arrays in PointSet 2. */
-      ptr3[ 0 ] = x;
-      ptr3[ 1 ] = y;   
-      astSetPoints( statics->pset3, ptr3 );
-
-/* Now transform these physical coords into graphical coords,
-   incorporating clipping. */
-      (void) Trans( Map4_plot, NULL, Map4_map, statics->pset2, 0, statics->pset3, 1, method, class, status );
-   }
-   
-/* Return. */
-   return;
-
-}
-
-static void Map5( int n, double *dist, double *x, double *y, 
-                  const char *method, const char *class, 
-                  int *status GLOBALS_ARG ){
-/*
-*  Name:
-*     Map5
-
-*  Purpose:
-*     Find graphics coordinates at given distances along the boundary of
-*     a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Map5( int n, double *dist, double *x, double *y,
-*                const char *method, const char *class, 
-*                int *status [,AstGlobals *AST__GLOBALS] )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The supplied distances are converted into physical coordinates
-*     using the Region specified by an external variable, and then 
-*     these physical coordinates are mapped into graphics coordinates. 
-
-*  Parameters:
-*     n 
-*        The number of points to map. Static resources are released but
-*        no points are mapped if zero is supplied.
-*     dist
-*        A pointer to an array holding "n" distances. A "dist" value of
-*        zero corresponds to the starting position supplied in external 
-*        variable Map1_origin. A "dist" value of one corresponds to the 
-*        finishing position which is a distance Map1_length away from 
-*        Map1_origin, moving in the positive direction of the axis given 
-*        by Map1_axis. "dist" values can be either linearly or
-*        logarithmically related to axis values (see Map1_log).
-*     x
-*        A pointer to an array in which to store the "n" graphics X 
-*        coordinate values corresponding to the positions in "dist".
-*     y
-*        A pointer to an array in which to store the "n" graphics Y
-*        coordinate values corresponding to the positions in "dist".
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*     AST__GLOBALS
-*        Only present if compiled with -DTHREAD_SAFE. It is a pointer to
-*        the structure holding the global data for the executing thread.
-*        It is passed as a function parameter, rather than being accessed
-*        within this function using the astGET_GLOBALS(NULL) macro (as
-*        other Object-less functions do) in order to avoid the time
-*        overheads of calling astGET_GLOBALS(NULL) . This function is
-*        time-critical.
-
-*  External Variables:
-*     Map1_log = int (Read)
-*        If zero, then "dist" in learly related to axis value. Otherwise
-*        it is linearly related to log10(axis value).
-*     Map1_ncoord = int (Read)
-*        The number of axes in the physical coordinate system.
-*     Map1_axis = int (Read)
-*        The zero-based index of the axis which the curve follows (i.e.
-*        the axis which changes value along the curve).
-*     Map1_statics = Map1Statics * (Read and Write)
-*        Pointer to a structure holding other static data used by Map1.
-*     Map1_origin = const double * (Read)
-*        A pointer to an array holding the physical coordinate value on 
-*        each axis at the start of the curve (i.e. at dist = 0.0).
-*     Map1_length = double (Read)
-*        The scale factor to convert "dist" values into increments
-*        along the physical axis given by Map1_axis.
-*     Map1_plot = AstPlot * (Read)
-*        A pointer to the Plot defining the mapping from graphics cordinates
-*        to physical coordinates.
-*     Map1_map = AstMapping * (Read)
-*        A pointer to the mapping from graphics cordinates to physical 
-*        coordinates extracted from the Plot.
-*     Map1_frame = AstFrame * (Read)
-*        A pointer to the Current Frame in the Plot.
-*     Map1_norm = int (Read)
-*        A flag indicating if physical coordinate values which are not in
-*        the normal ranges of the corresponding axes should be considered
-*        bad.
-
-*  Notes:
-*     -  On the first call, this function allocates static resources which 
-*     are used by subsequent invocation. These resources should be freed before
-*     calling this function with new values for any of the external variables, 
-*     or when no longer needed, by calling this function with "n" supplied as 
-*     zero.
-*     -  If an error has already occurred, this runction returns without 
-*     action ,except that if "n" is supplied as zero then static resources
-*     are released even if an error has already occurred.
-
-*/
-
-/* Local Constants: */
-   Map5Statics *statics;             /* Pointer to structure holding static data */
-
-/* Convert the global "void *" pointer to a Map5Statics pointer */
-   statics = (Map5Statics *) Map5_statics;
-
-/* If zero points were supplied, release static resources and return. */
-   if( n == 0 ){
-      if( statics ) {
-         if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-         if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-         Map5_statics = astFree( statics );
-      }
-      return;
-   }
-   
-/* Otherwise, check the inherited global status. */
-   if( !astOK ) return;
-
-/* Create and initialise a structure to hold extra static information if 
-   this has not already been done. */
-   if( !statics ) {
-      statics = astMalloc( sizeof( Map3Statics ) );
-      if( statics ) {    
-         statics->pset1 = NULL;
-         statics->pset2 = NULL;
-         statics->ptr1 = NULL; 
-         statics->ptr2[ 0 ] = NULL;
-         statics->ptr2[ 1 ] = NULL;
-         statics->nl = 0;      
-         Map5_statics = statics;
-      }
-   }
-
-/* If the number of points to be mapped is different to last time, 
-   set up some PointSets to store the specified number of points. */
-   if( n != statics->nl ){
-      statics->nl = n;
-
-/* Create a PointSet to hold the physical coordinates corresponding to
-   the supplied offsets. First annul any existing PointSet. */
-      if( statics->pset1 ) statics->pset1 = astAnnul( statics->pset1 );
-      statics->pset1 = astPointSet( n, Map5_ncoord, "", status );   
-      statics->ptr1 = astGetPoints( statics->pset1 );
-
-/* Create a PointSet to hold the corresponding graphics coordinates. 
-   The supplied "x" and "y" arrays will be used to store the data 
-   so we do not need to get pointers to the data using astGetPoints. First 
-   annul any existing PointSet. */
-      if( statics->pset2 ) statics->pset2 = astAnnul( statics->pset2 );
-      statics->pset2 = astPointSet( n, 2, "", status );   
-   }
-
-/* Get the physical coords at the required positions along the Region
-   border. */
-   astRegTrace( Map5_region, n, dist, statics->ptr1 );
-
-/* Store pointers to the results arrays in PointSet 2. */
-   statics->ptr2[ 0 ] = x;
-   statics->ptr2[ 1 ] = y;   
-   astSetPoints( statics->pset2, statics->ptr2 );
-
-/* Map all the positions into graphics coordinates. */
-   (void) Trans( Map5_plot, NULL, Map5_map, statics->pset1, 0, 
-                 statics->pset2, 1, method, class, status );
-   
-/* Return. */
-   return;
-}
-
-static void Mark( AstPlot *this, int nmark, int ncoord, int indim, 
-                  const double *in, int type, int *status ){
-/*
-*++
-*  Name:
-c     astMark
-f     AST_MARK
-
-*  Purpose:
-*     Draw a set of markers for a Plot.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astMark( AstPlot *this, int nmark, int ncoord, int indim,
-c                   const double *in, int type )
-f     CALL AST_MARK( THIS, NMARK, NCOORD, INDIM, IN, TYPE, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function draws a set of markers (symbols) at positions
-f     This routine draws a set of markers (symbols) at positions
-*     specified in the physical coordinate system of a Plot. The
-*     positions are transformed into graphical coordinates to
-*     determine where the markers should appear within the plotting
-*     area.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     nmark
-f     NMARK = INTEGER (Given)
-*        The number of markers to draw. This may be zero, in which
-*        case nothing will be drawn.
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinates being supplied for each mark
-*        (i.e. the number of axes in the current Frame of the Plot, as
-*        given by its Naxes attribute).
-c     indim
-f     INDIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "in"
-f        The number of elements along the first dimension of the IN
-*        array (which contains the marker coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-c        given should not be less than "nmark".
-f        given should not be less than NMARK.
-c     in
-f     IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
-c        The address of the first element of a 2-dimensional array of 
-c        shape "[ncoord][indim]" giving the
-c        physical coordinates of the points where markers are to be
-c        drawn. These should be stored such that the value of
-c        coordinate number "coord" for input mark number "mark" is
-c        found in element "in[coord][mark]".
-f        A 2-dimensional array giving the physical coordinates of the
-f        points where markers are to be drawn. These should be
-f        stored such that the value of coordinate number COORD for
-f        input mark number MARK is found in element IN(MARK,COORD).
-c     type
-f     TYPE = INTEGER (Given)
-*        A value specifying the type (e.g. shape) of marker to be
-*        drawn. The set of values which may be used (and the shapes
-*        that will result) is determined by the underlying graphics
-*        system.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Markers are not drawn at positions which have any coordinate
-*     equal to the value AST__BAD (or where the transformation into
-*     graphical coordinates yields coordinates containing the value
-*     AST__BAD).
-c     - If any marker position is clipped (see astClip), then the
-f     - If any marker position is clipped (see AST_CLIP), then the
-*     entire marker is not drawn.
-*     - An error results if the base Frame of the Plot is not 2-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   AstMapping *mapping;    /* Pointer to graphics->physical mapping */
-   AstPointSet *pset1;     /* PointSet holding physical positions */
-   AstPointSet *pset2;     /* PointSet holding graphics positions */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   const double **ptr1;    /* Pointer to physical positions */
-   double **ptr2;          /* Pointer to graphics positions */
-   double *xpd;            /* Pointer to next double precision x value */ 
-   double *ypd;            /* Pointer to next double precision y value */ 
-   double xx;              /* X axis value */
-   double yy;              /* Y axis value */
-   float *x;               /* Pointer to single precision x values */ 
-   float *xpf;             /* Pointer to next single precision x value */ 
-   float *y;               /* Pointer to single precision y values */ 
-   float *ypf;             /* Pointer to next single precision y value */ 
-   int axis;               /* Axis index */
-   int clip;               /* Clips marks at plot boundary? */
-   int i;                  /* Loop count */
-   int naxes;              /* No. of axes in the base Frame */
-   int nn;                 /* Number of good marker positions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astMark";
-   class = astClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Also validate the input array dimension argument. */
-   if ( astOK && ( indim < nmark ) ) {
-      astError( AST__DIMIN, "%s(%s): The input array dimension value "
-                "(%d) is invalid.", status, method, class, indim );
-      astError( AST__DIMIN, "This should not be less than the number of "
-                "markers being drawn (%d).", status, nmark );
-   }
-
-/* Initialise the bounding box for primatives produced by this call. */
-   if( !Boxp_freeze ) {
-      Boxp_lbnd[ 0 ] = FLT_MAX;
-      Boxp_lbnd[ 1 ] = FLT_MAX;
-      Boxp_ubnd[ 0 ] = FLT_MIN;
-      Boxp_ubnd[ 1 ] = FLT_MIN;
-   }
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-   astGrfAttrs( this, AST__MARKS_ID, 1, GRF__MARK, method, class );
-
-/* Create a PointSet to hold the supplied physical coordinates. */
-   pset1 = astPointSet( nmark, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
-   ptr1 = (const double **) astMalloc( sizeof( const double * )*
-                                       (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
-   on each axis. */
-   if( astOK ){
-      for( axis = 0; axis < ncoord; axis++ ){
-         ptr1[ axis ] = in + axis*indim;
-      }
-   }
-
-/* Store these pointers in the PointSet. */
-   astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical 
-   coordinates) to the base frame (i.e. graphics coordinates) using 
-   the inverse Mapping defined by the Plot. */
-   mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-   pset2 = Trans( this, NULL, mapping, pset1, 0, NULL, 0, method, class, status );
-   mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
-   ptr2 = astGetPoints( pset2 );
-
-/* Allocate memory to hold single precision versions of the graphics
-   coordinates. */
-   x = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-   y = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* Store pointers to the next single and double precision x and y
-   values. */
-      xpf = x;
-      ypf = y;
-      xpd = ptr2[ 0 ];
-      ypd = ptr2[ 1 ];
-   
-/* Convert the double precision values to single precision, rejecting
-   any bad marker positions. If clipping is switched on, also clip any
-   markers with centres outside the plotting area. */
-      clip = astGetClip( this ) & 2;
-      nn = 0;
-      for( i = 0; i < nmark; i++ ){
-         if( *xpd != AST__BAD && *ypd != AST__BAD ){
-            xx = *(xpd++);
-            yy = *(ypd++);
-            if( !clip || ( xx >= this->xlo && xx <= this->xhi &&
-                           yy >= this->ylo && yy <= this->yhi ) ) {
-               nn++;
-               *(xpf++) = (float) xx;
-               *(ypf++) = (float) yy;
-            }
-         } else {
-            xpd++;
-            ypd++;
-         }
-      }
-
-/* Draw the remaining markers. */
-      GMark( this, nn, x, y, type, method, class, status );
-
-   }
-
-/* Free the memory used to store single precision graphics coordinates. */
-   x = (float *) astFree( (void *) x );
-   y = (float *) astFree( (void *) y );
-   
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
-   ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
-   astGrfAttrs( this, AST__MARKS_ID, 0, GRF__MARK, method, class );
-
-/* Return */
-   return;
-}
-
-static void Mirror( AstPlot *this, int axis, int *status ){
-/*
-*+
-*  Name:
-*     astMirror
-
-*  Purpose:
-*     Flip a graphics axis of a Plot.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void astMirror( AstPlot *this, int axis )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function referses the direction of a specified graphics axis
-*     in the Plot.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     axis
-*        The zero-based axis of the axis to mirror.
-
-*-
-*/
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-   if( axis == 0 ) {
-      this->xrev = ( this->xrev == 0 );
-
-   } else if( axis == 1 ){
-      this->yrev = ( this->yrev == 0 );
-
-   } else {
-      astError( AST__INTER, "astMirror(%s): Illegal axis index (%d) "
-                "supplied (internal AST programming error).", status, 
-                astGetClass( this ), axis );
-   }   
-}
-
-static void Norm1( AstMapping *map, int axis, int nv, double *vals, 
-                   double refval, double width, int *status ){
-/*
-*  Name:
-*     Norm1
-
-*  Purpose:
-*     Use a Mapping to normalize an array of axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Norm1( AstMapping *map, int axis, int nv, double *vals, 
-*                 double refval, double width, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The normalization of a position in physical space has two parts;
-*     firstly, the Mapping may determine a form of normalization;
-*     secondly, the Frame may provide an additional normalizion by the
-*     astNorm method. This function implements normalization using a
-*     Mapping, by transforming the physical position into Graphics position, 
-*     and then back into a physical position. For instance, if the Mapping 
-*     represents a mapping of Cartesian graphics axes onto a 2D polar 
-*     coordinate system, a physical theta value of 3.PI will be normalized by 
-*     the Mapping into a theta value of 1.PI (probably, but it depends on 
-*     the Mapping). In this case, the Mapping normalization may well be the 
-*     only normalization available, since the 2D polar coord. system will 
-*     probably use a simple Frame to represent the (radius,theta) system,
-*     and a simple Frame defines no normalization (i.e. the astNorm method
-*     returns the supplied position unchanged).
-*
-*     Complications arise though because it is not possible to normalise
-*     a single axis value - you can only normalize a complete position.
-*     Therefore some value must be supplied for the other axis. We
-*     should use the LabelAt value, but we do not yet know what the LabelAt 
-*     value will be. Instead, we try first using the supplied "refval"
-*     which should be close to the mode of the other aixs values. Usually
-*     the value used is not very important. However, for some complex 
-*     projections (such as quad-cubes, TSC, etc) the choice can be more
-*     critical since some positions on the ksy correspond to undefined
-*     graphics positions (e.g the face edges in a TSC projection).
-*     Therefore, if the supplied refval results in any positions being
-*     undefined we refine the process by transforming the undefined
-*     positaons again using a different refval. We do this twice to bump
-*     up the likelihood of finding a suitable reference value.
-
-*  Parameters:
-*     mapping
-*        The Mapping from Graphics Frame to the current Frame.
-*     axis
-*        The index of the axis for which values are supplied in "vals".
-*     nv
-*        The number of values supplied in "vals".
-*     vals 
-*        Pointer to an array of axis values. On exit they are normalized.
-*     refval 
-*        The preffered constant value to use for the other axis when 
-*        normalizing the values in "vals".
-*     width
-*        The range of used values for the other axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;        /* PointSet holding physical coords */
-   AstPointSet *pset2;        /* PointSet holding graphics coords */
-   double **ptr1;             /* Pointer to physical coords data */
-   double *a;                 /* Pointer to next axis value */
-   double *b;                 /* Pointer to next axis value */
-   int i;                     /* Loop count */
-   int itry;                  /* Loop count for re-try loop */
-   int nbad;                  /* No. of bad values found after transformation */
-   int *flags;                /* Pointer to flags array */
-
-/* Check the inherited global status. */
-   if( !astOK ) return;
-
-/* Store the supplied positions in a PointSet. */
-   pset1 = astPointSet( nv, 2, "", status );
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ) {
-      a = ptr1[ axis ];
-      b = ptr1[ 1 - axis ];
-      for( i = 0; i < nv; i++){
-         *(a++) = vals[ i ];
-         *(b++) = refval;
-      }
-   }
-
-/* Transform the supplied positions into the Base Frame. */
-   pset2 = astTransform( map, pset1, 0, NULL );
-
-/* Transform the Base Frame positions back into the Current Frame. */
-   (void) astTransform( map, pset2, 1, pset1 );
-
-/* Allocate memory to hold a flag for each position which is non-zero if
-   we currently have a good axis value to return for the position. */
-   flags = (int *) astMalloc( sizeof(int)* (size_t) nv );
-
-/* If good, store these values back in the supplied array. If the
-   transformed values are bad, retain the original good values for the
-   moment in "vals", and also copy the good values back into pset1. So
-   at the end, pset1 will contain the original good values at any points
-   which produced bad values after the above transformation - the other
-   points in pset1 will be bad.  */
-   nbad = 0;
-   if( astOK ) {
-      a = ptr1[ axis ];
-      for( i = 0; i < nv; i++, a++ ){
-         if( *a != AST__BAD ) {
-            vals[ i ] = *a;
-            *a = AST__BAD;
-            flags[ i ] = 1;
-         } else if( vals[ i ] != AST__BAD ) {
-            nbad++;
-            *a = vals[ i ];
-            flags[ i ] = 0;
-         } else {
-            flags[ i ] = 1;
-         }
-      }
-   }
-
-/* We now try normalising any remaining bad positions using different
-   values for the other axis. This may result in some or all of the
-   remaining points being normalised succesfully. */
-   for( itry = 0; itry < 10; itry++ ) {
-
-/* If the above transformation produced any bad values, try again with a
-   different value on the other axis. */
-      if( astOK && nbad > 0 ) {
-         b = ptr1[ 1 - axis ];
-         for( i = 0; i < nv; i++){
-            *(b++) = refval + 0.1*( itry + 1 )*width;
-         }
-   
-/* Transform to graphics coords and back to world coords. */
-         (void) astTransform( map, pset1, 0, pset2 );
-         (void) astTransform( map, pset2, 1, pset1 );
-   
-/* Copy any good positions back into the returned vals array. Count
-   remaining bad positions. */
-         a = ptr1[ axis ];
-         nbad = 0;
-         for( i = 0; i < nv; i++, a++ ){
-            if( *a != AST__BAD ) {
-               vals[ i ] = *a;
-               flags[ i ] = 1;
-               *a = AST__BAD;
-            } else if( !flags[ i ] ) {
-               nbad++;
-               *a = vals[ i ];
-            }
-         }
-      }
-
-/* If the above transformation produced any bad values, try again with a
-   different value on the other axis. */
-      if( astOK && nbad > 0 ) {
-         b = ptr1[ 1 - axis ];
-         for( i = 0; i < nv; i++){
-            *(b++) = refval - 0.1*( itry + 1 )*width;
-         }
-   
-/* Transform to graphics coords and back to world coords. */
-         (void) astTransform( map, pset1, 0, pset2 );
-         (void) astTransform( map, pset2, 1, pset1 );
-   
-/* Copy any good positions back into the returned vals array. Count
-   remaining bad positions. */
-         a = ptr1[ axis ];
-         nbad = 0;
-         for( i = 0; i < nv; i++, a++ ){
-            if( *a != AST__BAD ) {
-               vals[ i ] = *a;
-               flags[ i ] = 1;
-               *a = AST__BAD;
-            } else if( !flags[ i ] ) {
-               nbad++;
-               *a = vals[ i ];
-            }
-         }
-      }
-   }
-
-/* Free resources. */
-   flags = (int *) astFree( flags );
-   pset1 = astAnnul( pset1 );   
-   pset2 = astAnnul( pset2 );   
-
-}
-
-static void Opoly( AstPlot *this, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Opoly
-
-*  Purpose:
-*     Draws the current poly line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Opoly( AstPlot *this, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws the current poly line, and empties the buffer.
-
-*  Parameters:
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Draw the poly-line if needed. */
-   if( Poly_n > 0 ) {
-      GLine( this, Poly_n, Poly_x, Poly_y, method, class, status );
-
-/* Indicate that the poly-line buffer is now empty. */
-      Poly_n = 0;
-   }
-}
-
-static int Overlap( AstPlot *this, int mode, int esc, const char *text, float x, 
-                    float y, const char *just, float upx, float upy, 
-                    float **work, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     Overlap
-
-*  Purpose:
-*     See if a major tick value label would overlap any of the previously 
-*     drawn labels.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Overlap( AstPlot *this, int mode, int esc, const char *text, float x, 
-*                  float y, const char *just, float upx, float upy, 
-*                  float **work, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     The operation of this function is determined by the "mode" parameter.
-
-*     A record is kept of the bounding boxes enclosing all the displayed
-*     labels. If the bounding box of the new label defined by the given
-*     parameter values would overlap any of the old bounding boxes, 0 is 
-*     returned. Otherwise 1 is returned and the bounding box for the new 
-*     label is added to the list of old bounding boxes.
-
-*     This function also updates the external variables Box_lbnd and
-*     Box_ubnd which hold the lower and upper bounds of the area enclosing
-*     all used labels.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     mode
-*        - If -1, find the bounding box of the supplied label, add it
-*        to the list of stored bounding box, and return 1 if it overlaps
-*        any previously stored bounding boxes.
-*        - If -2, leave the bounding boxes unchanged and return the
-*        number of bounding boxes currently stored. No other action is taken 
-*        and all other arguments are ignored. 
-*        - Otherwise, reset the number of stored bounding boxes to the
-*        value of mode, and return the new number of bounding boxes. No
-*        action is taken if mode is less than zero or greater than the current
-*        number of stored boxes. No other action is taken and all other 
-*        arguments are ignored. 
-*     esc
-*        Should escape sequences in the text be interpreted?
-*     text
-*        A pointer to the label text string.
-*     x
-*        The graphics X coordinate of the label's reference point.
-*     y
-*        The graphics Y coordinate of the label's reference point.
-*     just
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. The first character may be 'T' for "top",
-*        'C' for "centre", or 'B' for "bottom", and specifies the
-*        vertical location of the reference position. The second 
-*        character may be 'L' for "left", 'C' for "centre", or 'R' 
-*        for "right", and specifies the horizontal location of the 
-*        reference position. If the string has less than 2 characters
-*        then 'C' is used for the missing characters. 
-*     upx
-*        The x component of the up-vector for the text.
-*     upy
-*        The y component of the up-vector for the text.
-*     work
-*        A pointer to a place at which to store a pointer to an array of
-*        floats holding the old bounding boxes. Memory to hold this array
-*        is allocated automatically within this function. The pointer to
-*        the array should be supplied as NULL on the first call to this 
-*        function, and the array should be freed using astFree when no
-*        longer needed.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     See parameter "mode." 
-
-*  Notes:
-*     -  Zero is returned if an error has occurred, or if this function
-*     should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS     /* Pointer to thread-specific global data */
-   int nbox = 0;          /* Number of boxes stored in "work" */
-   int ret;               /* Does the new label overlap a previous label? */
-   int i;                 /* Box index */
-   float *cx;             /* Pointer to next corner's X value */
-   float *cy;             /* Pointer to next corner's Y value */
-   float xbn[ 4 ];        /* X coords at corners of new label's bounding box */
-   float ybn[ 4 ];        /* Y coords at corners of new label's bounding box */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Initialise the returned value to indicate no overlap has been found. */
-   ret = 0;
-
-/* Get the number of bounding boxes in the supplied work array. */   
-   if( work && *work ) {
-      nbox = (*work)[ 0 ];
-   } else {
-      nbox = 0;
-   }
-
-/* If required, return the number of bounding boxes currently stored. */
-   if( mode == -2 ) return nbox;
-
-/* If required, reset the number of bounding boxes currently stored, and
-   return the new number. */
-   if( mode >= 0 ) {
-      if( mode < nbox && work && *work ) {
-         nbox = mode;
-         (*work)[ 0 ] = nbox;
-      }
-      return nbox;
-   }
-
-/* If no work array has been supplied, allocate one now with room for
-   10 boxes. Each box requires 8 floats, 2 for each of the 4 corners. The
-   X graphics coordinates at the 4 corners are stored in the first 4 floats, 
-   and the corresponding Y graphics coordinates in the second group of 4 
-   floats. */
-   if( work && !(*work) ) {
-      *work = (float *) astMalloc( 81*sizeof(float) );
-      if( astOK ) {
-         nbox = 0;
-         (*work)[ 0 ] = 0;
-      }
-   }
-
-/* Check the global status. */
-   if( !astOK ) return ret;
-
-/* Get the bounds of the box containing the new label. */
-   DrawText( this, 0, esc, text, x, y, just, upx, upy, 
-             xbn, ybn, NULL, method, class, status );
-
-/* If the bounding box was obtained succesfully... */
-   if( astOK ) {
-
-/* Check for an overlap between the box and each of the previous boxes. */
-      cx = *work + 1;
-      cy = cx + 4;
-      for( i = 0; i < nbox; i++ ){
-
-         if( BoxCheck( xbn, ybn, cx, cy, status ) ) {
-            ret = 1;
-            break;
-         }
-
-/* Increment the pointers to the next box. */
-         cx += 8;
-         cy += 8;
-
-      }
-
-/* If no overlap was found, add the new box to the list. */
-      if( !ret ){
-         *work = (float *) astGrow( (void *) *work, 8*nbox + 9, sizeof(float) );
-         cx = *work + 1 + 8*nbox;
-         cy = cx + 4;
-         for( i = 0; i < 4; i++ ){
-            cx[ i ] = xbn[ i ];
-            cy[ i ] = ybn[ i ];
-         }
-         (*work)[ 0 ]++;
-
-/* Extend the bounds of the global bounding box held externally to include 
-   the new box. */
-         for( i = 0; i < 4; i++ ){
-            Box_lbnd[ 0 ] = MIN( xbn[ i ], Box_lbnd[ 0 ] );
-            Box_ubnd[ 0 ] = MAX( xbn[ i ], Box_ubnd[ 0 ] );
-            Box_lbnd[ 1 ] = MIN( ybn[ i ], Box_lbnd[ 1 ] );
-            Box_ubnd[ 1 ] = MAX( ybn[ i ], Box_ubnd[ 1 ] );
-         }
-      }
-   }
-
-/* If an error has occur, return a value of 0. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static void PlotLabels( AstPlot *this, int esc, AstFrame *frame, int axis, 
-                        LabelList *list, char *fmt, int nlab, float **box, 
-                        const char *method, const char *class, int *status ) {
-/*
-*
-*  Name:
-*     PlotLabels
-
-*  Purpose:
-*     Draws the numerical labels which have been selected for display.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void PlotLabels( AstPlot *this, int esc, AstFrame *frame, int axis, 
-*                      LabelList *list, char *fmt, int nlab, float **box, 
-*                      const char *method, const char *class, int *status ) 
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function displays the numerical labels supplied in the
-*     structure pointed to by "list". Overlapping labels are omitted, 
-*     and redundant leading fields are removed from adjacent labels.
-*     Nothing is plotted if the NumLab attribute for the axis is false.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     esc
-*        Interpret escape sequences in labels?
-*     frame
-*        A pointer to the current Frame of the Plot.
-*     axis
-*        The axis index (0 or 1).
-*     list
-*        A pointer to the LabelList structure holding information about
-*        the selected numerical labels.
-*     fmt
-*        A pointer to a null terminated string holding the format
-*        specification used to create the labels.
-*     nlab
-*        The number of labels described by "list".
-*     box
-*        A pointer to a place at which to store a pointer to an array of
-*        floats holding the bounding boxes of displayed labels. Memory to 
-*        hold this array is allocated automatically within this function. 
-*        The pointer to the array should be supplied as NULL on the first 
-*        call to this function, and the array should be freed using astFree 
-*        when no longer needed.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   LabelList *ll;         /* Pointer to next label structure */
-   LabelList *llhi;       /* Pointer to higher neighbouring label structure */
-   LabelList *lllo;       /* Pointer to lower neighbouring label structure */
-   char *text;            /* Pointer to label text */
-   const char *latext;    /* Axis label at previous label */
-   const char *texthi;    /* Pointer to text abbreviated with higher neighbour */
-   const char *textlo;    /* Pointer to text abbreviated with lower neighbour */
-   float tolx;            /* Min allowed X interval between labels */
-   float toly;            /* Min allowed Y interval between labels */
-   float xbn[ 4 ];        /* X coords at corners of new label's bounding box */
-   float ybn[ 4 ];        /* Y coords at corners of new label's bounding box */
-   int abb;               /* Abbreviate leading fields? */
-   int dp;                /* Number of decimal places */
-   int found;             /* Non-zero digit found? */
-   int hilen;             /* Length of texthi */
-   int i;                 /* Label index */
-   int j;                 /* Label index offset */
-   int jgap;              /* Gap in index between rejected labels */
-   int lab0;              /* Index of middle label */
-   int lolen;             /* Length of textlo */
-   int mxdp;              /* Maximum number of decimal places */
-   int nbox;              /* The number of boinding boxes supplied */
-   int nexti;             /* Index of next label to retain */
-   int nleft;             /* No. of labels left */
-   int nz;                /* Number of trailing zeros in this label */
-   int nzmax;             /* Max. number of trailing zeros */
-   int odd;               /* DO we have a strange axis? */
-   int olap;              /* Any overlap found? */
-   int prio;              /* Current priority */
-   int root;              /* Index of unabbreviated label */
-   int root_found;        /* Has the root label been decided on? */
-   int rootoff;           /* Distance from middle to root label */
-   int split;             /* Indicates whether to split labels into 2 lines */
-
-/* Return without action if an error has occurred, or there are no labels to 
-   draw. */
-   if( !astOK || nlab == 0 || !list || !astGetNumLab( this, axis ) ) return;
- 
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   rootoff = 0;
-
-/* Get the number of bounding boxes describing the labels already drawn
-   (this will be non-zero only if this is the second axis to be labelled). */
-   nbox = Overlap( this, -2, 0, NULL, 0.0, 0.0, NULL, 0.0, 0.0, box, method, 
-                   class, status );
-
-/* Ensure the labels are sorted into increasing index order. */
-   qsort( (void *) list, (size_t) nlab, sizeof(LabelList), Compare_LL );
-
-/* Complex curves can have multiple edge crossings very close together.
-   This means that the same label can sometimes be included more than once 
-   in the supplied list at the same (x,y) position. Purge duplicate labels 
-   by setting their priority to -1. Initialise the priority of the remaining 
-   labels to zero. */
-   tolx = 0.02*fabs( this->xhi - this->xlo );
-   toly = 0.02*fabs( this->yhi - this->ylo );
-   ll = list;
-   ll->priority = 0;
-   ll->saved_prio = 0;
-
-   for( i = 1; i < nlab; i++ ) {
-      ll++;
-      ll->priority = 0;
-      ll->saved_prio = 0;
-      for( j = 0; j < i; j++ ){
-         if( !strcmp( ll->text, list[ j ].text ) ) {
-            if( fabs( ll->x - list[ j ].x ) < tolx && 
-                fabs( ll->y - list[ j ].y ) < toly ) {
-               ll->priority = -1;
-               ll->saved_prio = -1;
-               break;
-            }
-         } 
-      }
-   }
-
-/* Find the maximum number of decimal places in any label. */
-   mxdp = 0;
-   ll = list - 1;
-   for( i = 0; i < nlab; i++ ) {
-      ll++;
-      FindDPTZ( frame, axis, fmt, ll->text, &dp, &nz, status );
-      if( dp > mxdp ) mxdp = dp;
-   }
-
-/* Indicate that we do not yet know whether SplitValue should split labels
-   into two lines or not. */
-   split = 0;
-
-/* Find the highest priority label (the "root" label). This label is
-   never abbreviated to remove leading fields, and is never omitted due to
-   overlaps with other labels. To find this label, each label is assigned a 
-   priority equal to the number of trailing zeros in the label text. If the 
-   text has fewer than the maximum number of decimal places, pretend the text 
-   is padded with trailing zeros to bring the number of decimal places up to 
-   the maximum. The root label is the highest priority label, giving 
-   preference to labels which occur in the middle of the index order. At the 
-   same time, initialize the abbreviated text for each label to be equal to 
-   the unabbreviated text. */
-   lab0 = nlab/2;
-   nzmax = -1;
-   ll = list - 1;
-   root = -1;
-   root_found = 0;
-   for( i = 0; i < nlab; i++ ) {
-      ll++;
-      if( ll->priority > -1 ) {
-         text = ll->text;
-
-/* Find the number of decimal places and the number of trailing zeros in
-   this label. Note if a non-zero digit was found in the label. */
-         found = FindDPTZ( frame, axis, fmt, text, &dp, &nz, status );
-
-/* Add on some extra trailing zeros to make the number of decimal places
-   up to the maximum value. */
-         nz += mxdp - dp;
-
-/* Store the priority for this label. */
-         ll->priority = nz;
-         ll->saved_prio = nz;
-
-/* Note the highest priority of any label. */
-         if( nz > nzmax ) nzmax = nz;
-
-/* We will use this label as the root label if:
-
-   - We have not already found the root label
-
-   AND
-   
-   - It does not overlap any labels drawn for a previous axis
-
-   AND
-
-   - We do not currently have a candidate root label, or
-   - The priority for this label is higher than the priority of the current
-   root label, or
-   - The priority for this label is equal to the priority of the current
-   root label and this label is closer to the centre of the axis, or
-   - The label value is zero.  */
-
-         if( root == -1 ||
-             nz > list[ root ].priority ||
-             ( nz == list[ root ].priority && abs( i - lab0 ) < rootoff ) ||
-             !found ) {
-
-            if( !root_found ) {
-
-               if( axis == 0 || !Overlap( this, -1, esc, 
-                                          SplitValue( this, ll->text,
-                                                      axis, &split, status ), 
-                                          (float) ll->x, (float) ll->y, 
-                                          ll->just, (float) ll->upx, 
-                                          (float) ll->upy, box, method, 
-                                          class, status ) ) {
-                  root = i;
-                  rootoff = abs( i - lab0 );
-
-/* If the label value was zero, we will use label as the root label,
-   regardless of the priorities of later labels. */
-                  if( !found ) root_found = 1;
-               }
-
-/* Reset the list of bounding boxes to exclude any box added above. */
-               Overlap( this, nbox, esc, NULL, 0.0, 0.0, NULL, 0.0, 0.0, box, 
-                        method, class, status );
-
-            }
-         }
-
-/* Initialise the abbreviated text to be the same as the full text. */   
-         ll->atext = ll->text;
-      }
-   }
-
-/* If all the labels overlapped labels on a previous axis, arbitrarily
-   use the middle label as the root label (this should never happen but
-   is included to avoid segmentation violations occurring in error
-   conditions such as the txExt function being buggy and cuasing spurious
-   overlaps). */
-   if( root == -1 ) root = nlab/2;   
-
-/* Assign a priority higher than any other priority to the root label. */
-   list[ root ].priority = nzmax + 1;
-   list[ root ].saved_prio = nzmax + 1;
-
-/* See if leading fields are to be abbreviated */
-   abb = astGetAbbrev( this, axis );
-
-/* The following process may have removed some labels which define the
-   missing fields in neighbouring abbreviated fields, so that the user
-   would not be able to tell what value the abbvreviated leading fields
-   should have. We therefore loop back and perform the abbreviation
-   process again, omitting the removed labels this time. Continue doing
-   this until no further labels are removed. */
-   jgap = 1;
-   olap = 1;
-   odd = 0;
-   while( olap && !odd ) {
-
-/* We now attempt to abbreviate the remaining labels (i.e. those which
-   have not been rejected on an earlier pass through this loop). Labels
-   are abbreviated in order of their priority. Higher priority labels are 
-   abbreviated first (except that the root label, which has the highest
-   priority, is never abbreviated). Each label is abbreviated by comparing 
-   it with the nearest label with a higher priority. */
-
-/* Loop through all the priority values, starting with the highest
-   priority (excluding the root label so that the root label is never 
-   abbreviated), and working downwards to finish with zero priority. */
-      prio = nzmax + 1;
-      while( prio-- > 0 ) {
-      
-/* Look for labels which have the current priority. */
-         ll = list - 1;
-         for( i = 0; i < nlab; i++ ) {
-            ll++;
-            if( ll->priority == prio ) {
-
-/* Find the closest label to this one on the high index side which has a
-   higher priority. */
-               llhi = NULL;
-               for( j = i + 1; j < nlab; j++ ) {
-                  if( list[ j ].priority > prio ) {
-                     llhi = list + j;
-                     break;
-                  }
-               }
-
-/* If no higher priority neighbour was found on the high index side, 
-   use the nearest label with the current priority on the high index side. */
-               if( !llhi ) {
-                  for( j = i + 1; j < nlab; j++ ) {
-                     if( list[ j ].priority == prio ) {
-                        llhi = list + j;
-                        break;
-                     }
-                  }
-               }
-
-/* Find the closest label to this one on the low index side which has a
-   higher priority. */
-               lllo = NULL;
-               for( j = i - 1; j >= 0; j-- ) {
-                  if( list[ j ].priority > prio ) {
-                     lllo = list + j;
-                     break;
-                  }
-               }
-
-/* If no higher priority neighbour was found on the low index side, 
-   use the nearest label with the current priority on the low index side. */
-               if( !lllo ) {
-                  for( j = i - 1; j >= 0; j-- ) {
-                     if( list[ j ].priority == prio ) {
-                        lllo = list + j;
-                        break;
-                     }
-                  }
-               }
-
-/* If we are not abbreviating, use the full text as the abbreviated text.*/
-               if( !abb ) {
-                  ll->atext = ll->text;
-
-/* Otherwise, if only one of these two neighbouring labels was found, we 
-   abbreviate the current label by comparing it with the one found 
-   neighbouring label. If they are identical, we use the last field as
-   the abbreviated text. */
-               } else if( !lllo ) {
-                  ll->atext = astAbbrev( frame, axis, fmt, llhi->text, 
-                                         ll->text );
-
-               } else if( !llhi ) {
-                  ll->atext = astAbbrev( frame, axis, fmt, lllo->text, 
-                                         ll->text );
-
-/* If two neighbouring labels were found, we abbreviate the current label
-   by comparing it with both neighbouring labels, and choosing the shorter
-   abbreviation. */
-               } else {
-                  textlo = abb ? astAbbrev( frame, axis, fmt, lllo->text, 
-                                            ll->text ) : ll->text;
-                  texthi = abb ? astAbbrev( frame, axis, fmt, llhi->text, 
-                                            ll->text ) : ll->text;
-
-                  lolen = strlen( textlo );
-                  hilen = strlen( texthi );
-                  if( lolen > 0 && lolen < hilen ) {
-                     ll->atext = textlo;
-                  } else {
-                     ll->atext = texthi;
-                  }
-               } 
-
-/* If the two fields are identical, the abbreviated text returned by
-   astAbbrev will be a null string. In this case, find the start of the 
-   last field in the formatted value (using astAbbrev again), and use 
-   that as the abbreviated text. */
-               if( !(ll->atext)[0] ) {
-                  ll->atext = astAbbrev( frame, axis, fmt, NULL, ll->text );
-               }
-            }
-         }
-      }
-
-/* Find the bounding box of the root label and add it to the list of bounding 
-   boxes. */
-      nleft = 1;
-      ll = list + root;
-      olap = Overlap( this, -1, esc, 
-                      SplitValue( this, ll->atext, axis, &split, status ), 
-                      (float) ll->x, (float) ll->y, ll->just, (float) ll->upx, 
-                      (float) ll->upy, box, method, class, status );
-
-/* Now look for labels which would overlap. First, check labels above the root 
-   label. Do not count overlaps where the two abbreviated labels have the same text. */
-      ll = list + root;
-      latext = ll->atext;
-      for( i = root + 1; i < nlab; i++ ) {
-         ll++;
-         if( ll->priority >= 0 ) {
-            if( strcmp( ll->atext, latext ) ) {
-               if( Overlap( this, -1, esc, 
-                            SplitValue( this, ll->atext, axis, &split, status ),
-                            (float) ll->x, (float) ll->y, ll->just, 
-                            (float) ll->upx, (float) ll->upy, box, method, 
-                            class, status ) ){
-                  olap++;
-               } else {
-                  nleft++;
-               }
-            }
-            latext = ll->atext;
-         }
-      }
-
-/* Now check the labels below the root label. */
-      ll = list + root;
-      latext = ll->atext;
-      for( i = root - 1; i >= 0; i-- ) {
-         ll--;
-         if( ll->priority >= 0 ) {
-            if( strcmp( ll->atext, latext ) ) {
-               if( Overlap( this, -1, esc, 
-                            SplitValue( this, ll->atext, axis, &split, status ),
-                            (float) ll->x, (float) ll->y, ll->just, 
-                            (float) ll->upx, (float) ll->upy, box, method, 
-                            class, status ) ){
-                  olap++;
-               } else {
-                  nleft++;
-               }
-            }
-            latext = ll->atext;
-         }
-      }
-
-/* If only one overlap was found, and this is the second axis, ignore it
-   since it is probably caused by the crossing of the two axes. */
-      if( axis == 1 && olap == 1 ) olap = 0;
-
-/* If we are now only plotting every 3rd label, or if there are less than
-   3 labels left, and there are still overlapping labels, then we must have 
-   a very odd axis (such as logarithmically spaced ticks on a linearly mapped 
-   axis). In this case, we will re-instate the orignal label priorities and 
-   then leave this loop so that we attempt to plot all labels. Also retain 
-   original priorities if the axis is mapped logarithmically onto the 
-   screen. */
-      if( olap && ( jgap == 3 || nleft < 3 || astGetLogPlot( this, axis ) ) ){
-         jgap = 0;
-         odd = 1;
-      } else { 
-         odd = 0;
-      }     
-
-/* If any labels overlapped, re-instate the priority of all previously
-   excluded labels (using the copy of the label's real priority stored in 
-   "saved_prio"), and then remove labels (by setting their priorities
-   negative) to increase the gap between labels, and try again. */
-      if( olap ) {
-         jgap++;
-
-         nexti = root + jgap;
-         for( i = root + 1; i < nlab; i++ ) {
-            if( i == nexti ) {
-               nexti += jgap;
-               list[ i ].priority = list[ i ].saved_prio;
-            } else {
-               list[ i ].priority = -1;
-            }
-         }
-
-         nexti = root - jgap;
-         for( i = root - 1; i >= 0; i-- ) {
-            if( i == nexti ) {
-               nexti -= jgap;
-               list[ i ].priority = list[ i ].saved_prio;
-            } else {
-               list[ i ].priority = -1;
-            }
-         }
-
-/* Reset the abbreviated text to be the full text. */
-         for( i = 0; i < nlab - 1; i++ ) list[ i ].atext = list[ i ].text;
-
-      }
-
-/* Rest the list of bounding boxes to exclude the boxes added above. */
-      Overlap( this, nbox, esc, NULL, 0.0, 0.0, NULL, 0.0, 0.0, box, method, 
-               class, status );
-   }
- 
-/* We can now draw the abbreviated labels (ignoring rejected labels). */
-   ll = list-1;
-   for( i = 0; i < nlab; i++ ) {
-      ll++;
-      if( ll->priority >= 0 ) {
-         
-/* Check that this label does not overlap any labels drawn for previous
-   axes (we know from the above processing that it will not overlap any
-   other label on the current axis). */
-         if( !Overlap( this, -1, esc, 
-                       SplitValue( this, ll->atext, axis, &split, status ), 
-                       (float) ll->x, (float) ll->y, ll->just, (float) ll->upx,
-                       (float) ll->upy, box, method, class, status ) ) {
-
-/* Draw the abbreviated label text, and get the bounds of the box containing 
-   the new label, splitting long formatted values (such as produced by 
-   TimeFrames) into two lines. */
-            DrawText( this, 1, esc, 
-                      SplitValue( this, ll->atext, axis, &split, status ), 
-                      (float) ll->x, (float) ll->y, ll->just, (float) ll->upx, 
-                      (float) ll->upy, xbn, ybn, NULL, method, class, status );
-         }
-      }
-   }
-}
-
-static void PolyCurve( AstPlot *this, int npoint, int ncoord, int indim, 
-                       const double *in, int *status ){
-/*
-*++
-*  Name:
-c     astPolyCurve
-f     AST_POLYCURVE
-
-*  Purpose:
-*     Draw a series of connected geodesic curves.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astPolyCurve( AstPlot *this, int npoint, int ncoord, int indim, 
-c                        const double *in )
-f     CALL AST_POLYCURVE( THIS, NPOINT, NCOORD, INDIM, IN, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-c     This function joins a series of points specified in the physical
-c     coordinate system of a Plot by drawing a sequence of geodesic
-c     curves.  It is equivalent to making repeated use of the astCurve
-c     function (q.v.), except that astPolyCurve will generally be more
-c     efficient when drawing many geodesic curves end-to-end. A
-c     typical application of this might be in drawing contour lines.
-f     This routine joins a series of points specified in the physical
-f     coordinate system of a Plot by drawing a sequence of geodesic
-f     curves.  It is equivalent to making repeated calls to the
-f     AST_CURVE routine (q.v.), except that AST_POLYCURVE will
-f     generally be more efficient when drawing many geodesic curves
-f     end-to-end. A typical application of this might be in drawing
-f     contour lines.
-*
-c     As with astCurve, full account is taken of the Mapping between
-c     physical and graphical coordinate systems. This includes any
-c     discontinuities and clipping established using astClip.
-f     As with AST_CURVE, full account is taken of the Mapping between
-f     physical and graphical coordinate systems. This includes any
-f     discontinuities and clipping established using AST_CLIP.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     npoint
-f     NPOINT = INTEGER (Given)
-*        The number of points between which geodesic curves are to be drawn.
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinates being supplied for each point (i.e.
-*        the number of axes in the current Frame of the Plot, as given
-*        by its Naxes attribute).
-c     indim
-f     INDIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "in"
-f        The number of elements along the first dimension of the IN
-*        array (which contains the input coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-c        given should not be less than "npoint".
-f        given should not be less than NPOINT.
-c     in
-f     IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
-c        The address of the first element in a 2-dimensional array of shape 
-c        "[ncoord][indim]" giving the
-c        physical coordinates of the points which are to be joined in
-c        sequence by geodesic curves. These should be stored such that
-c        the value of coordinate number "coord" for point number
-c        "point" is found in element "in[coord][point]".
-f        A 2-dimensional array giving the physical coordinates of the
-f        points which are to be joined in sequence by geodesic
-f        curves. These should be stored such that the value of
-f        coordinate number COORD for input point number POINT is found
-f        in element IN(POINT,COORD).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - No curve is drawn on either side of any point which has any
-*     coordinate equal to the value AST__BAD.
-*     - An error results if the base Frame of the Plot is not
-*     2-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*--
-*/
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   const double **in_ptr;  /* Pointer to array of data pointers */
-   double *finish;         /* Pointer to array holding segment end position */
-   double *start;          /* Pointer to array holding segment start position */
-   double d[ CRV_NPNT ];   /* Offsets to evenly spaced points along curve */
-   double tol;             /* Absolute tolerance value */
-   double x[ CRV_NPNT ];   /* X coords at evenly spaced points along curve */
-   double y[ CRV_NPNT ];   /* Y coords at evenly spaced points along curve */
-   int coord;              /* Loop counter for coordinates */
-   int i;                  /* Loop count */
-   int naxes;              /* No. of Frame axes */
-   int ok;                 /* Are all start and end coords good? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astPolyCurve";
-   class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Initialise the bounding box for primatives produced by this call. */
-   if( !Boxp_freeze ) {
-      Boxp_lbnd[ 0 ] = FLT_MAX;
-      Boxp_lbnd[ 1 ] = FLT_MAX;
-      Boxp_ubnd[ 0 ] = FLT_MIN;
-      Boxp_ubnd[ 1 ] = FLT_MIN;
-   }
-
-/* Check the current Frame of the Plot has ncoord axes. */
-   naxes = astGetNout( this );
-   if( naxes != ncoord && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
-                "Frame of the supplied %s is invalid - this number should "
-                "be %d (possible programming error).", status, method, class, naxes,
-                class, ncoord );
-   } 
-
-/* Check the array dimension argument. */
-   if ( astOK && ( indim < npoint ) ) {
-      astError( AST__DIMIN, "%s(%s): The array dimension value "
-                "(%d) is invalid.", status, method, class, indim );
-      astError( AST__DIMIN, "This should not be less than the number of "
-                "points being drawn (%d).", status, npoint );
-   }
-
-/* Allocate memory to hold the array of data pointers, the start position,
-   and the end position. */
-   if ( astOK ) {
-      in_ptr = (const double **) astMalloc( sizeof( const double * ) *
-                                            (size_t) ncoord );
-      start = (double *) astMalloc( sizeof( double ) * (size_t) ncoord );
-      finish = (double *) astMalloc( sizeof( double ) * (size_t) ncoord );
-      
-/* Set up externals used to communicate with the Map3 function...
-   The number of axes in the physical coordinate system (i.e. the current
-   Frame). */
-      Map3_ncoord = ncoord;
-
-/* A pointer to the Plot, the Current Frame, and and Mapping. */
-      Map3_plot = this;
-      Map3_frame = astGetFrame( this, AST__CURRENT );
-      Map3_map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
-      tol = astGetTol( this )*MAX( this->xhi - this->xlo, 
-                                   this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
-      Crv_scerr = ( astGetLogPlot( this, 0 ) || 
-                    astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
-      Crv_tol = tol;
-      Crv_limit = 0.5*tol*tol;
-      Crv_map = Map3;
-      Crv_ink = 1;
-      Crv_xlo = this->xlo;
-      Crv_xhi = this->xhi;
-      Crv_ylo = this->ylo;
-      Crv_yhi = this->yhi;
-      Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over each curve segment. */
-      for( i = 0; i < CRV_NPNT; i++ ){
-        d[ i ] = ( (double) i)/( (double) CRV_NSEG );
-      }
-
-/* Initialise the data pointers to locate the coordinate data in
-   the "in" array. */
-      if ( astOK ) {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            in_ptr[ coord ] = in + coord * indim;
-         }
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-         astGrfAttrs( this, AST__CURVE_ID, 1, GRF__LINE, method, class );
-
-/* Loop round each curve segment. */
-         for( i = 1 ; i < npoint; i++ ) {
-
-/* Store the start position and check it for bad values. Increment the
-   pointers to the next position on each axis, so that they refer to the
-   finish point of the current curve segment. */
-            ok = 1;
-            for( coord = 0; coord < ncoord; coord++ ) {
-               if( *( in_ptr[coord] ) == AST__BAD ){
-                  ok = 0;
-               } else {
-                  start[ coord ] = *( in_ptr[coord] );
-               }
-               ( in_ptr[coord] )++;
-            }
-
-/* Store the end position and check it for bad values. Do not increment
-   the axis pointers. This means that they will refer to the start position
-   of the next curve segment on the next pass through this loop. */
-            for( coord = 0; coord < ncoord; coord++ ) {
-               if( *( in_ptr[coord] ) == AST__BAD ){
-                  ok = 0;
-               } else {
-                  finish[ coord ] = *( in_ptr[coord] );
-               }
-            }
-
-/* Pass on to the next curve segment if either the start or finish position
-   was bad. */
-            if( ok ) {
-
-/* Set up the remaining externals used to communicate with the Map3
-   function... */
-
-/* The physical coordinates at the start of the curve. */
-               Map3_origin = start;
-
-/* The physical coordinates at the end of the curve. */
-               Map3_end = finish;
-
-/* The scale factor to convert "dist" values into physical offset values. */
-               Map3_scale = astDistance( Map3_frame, start, finish );
-
-/* Now set up the remaining external variables used by the Crv and CrvLine 
-   function. */
-               Crv_ux0 = AST__BAD;    
-               Crv_out = 1;
-               Crv_xbrk = Curve_data.xbrk;
-               Crv_ybrk = Curve_data.ybrk;
-               Crv_vxbrk = Curve_data.vxbrk;
-               Crv_vybrk = Curve_data.vybrk;
-
-/* Map the evenly spread distances between "start" and "finish" into graphics 
-   coordinates. */
-               Map3( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map3 to draw the curve segment. */
-               Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* If no part of the curve could be drawn, set the number of breaks and the 
-   length of the drawn curve to zero. */
-               if( Crv_out ) {
-                  Crv_nbrk = 0;
-                  Crv_len = 0.0F;
-
-/* Otherwise, add an extra break to the returned structure at the position of 
-   the last point to be plotted. */
-               } else {
-                  Crv_nbrk++;
-                  if( Crv_nbrk > AST__PLOT_CRV_MXBRK ){
-                     astError( AST__CVBRK, "%s(%s): Number of breaks in curve "
-                               "exceeds %d.", status, method, class, AST__PLOT_CRV_MXBRK );
-                  } else {
-                     *(Crv_xbrk++) = (float) Crv_xl;
-                     *(Crv_ybrk++) = (float) Crv_yl;
-                     *(Crv_vxbrk++) = (float) -Crv_vxl;
-                     *(Crv_vybrk++) = (float) -Crv_vyl;
-                  }
-               }
-
-/* Store extra information about the curve in the returned structure, and 
-   purge any zero length sections. */
-               Curve_data.length = Crv_len;
-               Curve_data.out = Crv_out;
-               Curve_data.nbrk = Crv_nbrk;
-               PurgeCdata( &Curve_data, status );
-            }
-         }
-
-/* End the last poly line. */
-         Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map3. */
-         Map3( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* Re-establish the original graphical attributes. */
-         astGrfAttrs( this, AST__CURVE_ID, 0, GRF__LINE, method, class );
-
-      }
-
-/* Annul the Frame and Mapping. */
-      Map3_frame = astAnnul( Map3_frame );
-      Map3_map = astAnnul( Map3_map );
-
-/* Free the memory used for the data pointers, and start and end positions. */
-      in_ptr = (const double **) astFree( (void *) in_ptr );
-      start = (double *) astFree( (void *) start );
-      finish = (double *) astFree( (void *) finish ); 
-   }
-
-/* Return. */
-   return;
-
-}
-
-static int PopGat( AstPlot *this, float *rise, const char *method, 
-                   const char *class, int *status ) {
-/*
-*  Name:
-*     PopGat
-
-*  Purpose:
-*     Pop current graphical attributes for text from a stack.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int PopGat( AstPlot *this, float *rise, const char *method, 
-*                 const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function restores the current graphical attributes for text 
-*     from the values on a stack. Current attributes are left unchanged if 
-*     the stack is empty.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     rise
-*        Pointer to a location at which to return thhe height of the baseline 
-*        above the normal baseline, expressed as a percentage of the normal 
-*        character height.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Returns zero if the stack is empty, and 1 otherwise.
-
-*/
-
-/* Local Variables: */
-   AstGat *gat;
-   int result;
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status */
-   if( !astOK ) return result; 
-
-/* Check there is at least one AstGat structure on the stack. */
-   if( this->ngat ) {
-
-/* Decrement the number of entries in the stack, and get a pointer to the 
-   AstGat structure. Nullify the pointer on the stack. */
-      gat = (this->gat)[ --(this->ngat) ];
-      (this->gat)[ this->ngat ] = NULL;
-
-/* Restore the values in the AstGat structure */
-      *rise = gat->rise;
-      GAttr( this, GRF__SIZE, gat->size, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__WIDTH, gat->width, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__COLOUR, gat->col, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__FONT, gat->font, NULL, GRF__TEXT, method, class, status );
-      GAttr( this, GRF__STYLE, gat->style, NULL, GRF__TEXT, method, class, status );
-
-/* Free the AstGat structure. */
-      gat = astFree( gat );
-
-/* Indicate success.*/
-      result = 1;
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-
-static void PushGat( AstPlot *this, float rise, const char *method, 
-                     const char *class, int *status ) {
-/*
-*  Name:
-*     PushGat
-
-*  Purpose:
-*     Push current graphical attributes for text onto a stack.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void PushGat( AstPlot *this, float rise, const char *method, 
-*                   const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function stores the current graphical attributes for text 
-*     on a stack.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     rise
-*        The height of the baseline above the normal baseline, expressed
-*        as a percentage of the normal character height.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstGat *new_gat;
-
-/* Check inherited status */
-   if( !astOK ) return;                 
-
-/* Allocate memory for a new AstGat structure to store the graphical
-   attributes. */
-   new_gat = astMalloc( sizeof( AstGat ) );
-   if( astOK ) {
-
-/* Store the height of the current baseline above the normal baseline,
-   expressed as a percentage of a normal character height. */
-      new_gat->rise = rise;
-
-/* Store the current graphical attribute values. */
-      GAttr( this, GRF__SIZE, AST__BAD, &(new_gat->size), GRF__TEXT, method, class, status );
-      GAttr( this, GRF__WIDTH, AST__BAD, &(new_gat->width), GRF__TEXT, method, class, status );
-      GAttr( this, GRF__FONT, AST__BAD, &(new_gat->font), GRF__TEXT, method, class, status );
-      GAttr( this, GRF__STYLE, AST__BAD, &(new_gat->style), GRF__TEXT, method, class, status );
-      GAttr( this, GRF__COLOUR, AST__BAD, &(new_gat->col), GRF__TEXT, method, class, status );
-
-/* Increment the number of AstGat structures on the stack.*/
-      this->ngat++;
-
-/* Extend the array of AstGat pointers in the Plot structure so that there
-   is room for the new one. */
-      this->gat = (AstGat **) astGrow( this->gat, this->ngat, sizeof( AstGat * ) );
-      if( astOK ) {
-
-/* Store the new pointer. */
-         (this->gat)[ this->ngat - 1 ] = new_gat;
-
-      }
-   }
-}
-
-static int RegionOutline( AstPlot *this, AstFrame *frm, const char *method, 
-                          const char *class, int *status ){
-/*
-*
-*  Name:
-*     RegionOutline
-
-*  Purpose:
-*     Draw the outline of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int RegionOutline( AstPlot *this, AstFrame *frm, const char *method, 
-*                        const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     If the current Frame in the supplied Plot is a Region, this function 
-*     draws a curve marking the outline of the Region. It returns without
-*     action otherwise.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     frm 
-*        Pointer to the current Frame in the Plot (possibly a Region).
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if and only if a Region outline was drawn.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;        /* Mapping with Region masking included */
-   AstPlotCurveData cdata; /* Stores information about curve breaks */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   double d[ CRV_NPNT ];   /* Offsets to evenly spaced points along curve */
-   double tol;             /* Absolute tolerance value */
-   double x[ CRV_NPNT ];   /* X coords at evenly spaced points along curve */
-   double y[ CRV_NPNT ];   /* Y coords at evenly spaced points along curve */
-   int i;                  /* Loop count */
-   int result;             /* The returned value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Check the current Frame is a Region, and is of a class that implements
-   the astRegTrace method. */
-   if( astIsARegion( frm ) && 
-       astRegTrace( (AstRegion *) frm, 0, NULL, NULL ) ){
-
-/* Set up the externals used to communicate with the Map5 function...
-   The number of axes in the physical coordinate system (i.e. the
-   Region). */
-      Map5_ncoord =  astGetNaxes( frm );
-
-/* A pointer to the Plot, the Region, and the Mapping. */
-      Map5_plot = this;
-      Map5_region = (AstRegion *) frm;
-
-/* Also store a pointer to the Mapping, ensuring that the Mapping does 
-   not contain any masking effects from the Region. */
-      map = astGetMapping( this, AST__BASE, AST__CURRENT );
-      Map5_map = astRemoveRegions( map );
-      map = astAnnul( map );
-
-/* Convert the tolerance from relative to absolute graphics coordinates. */
-      tol = astGetTol( this )*MAX( this->xhi - this->xlo, 
-                                   this->yhi - this->ylo );
-
-/* Now set up the external variables used by the Crv and CrvLine function. */
-      Crv_scerr = ( astGetLogPlot( this, 0 ) || 
-                    astGetLogPlot( this, 1 ) ) ? 100.0 : 1.5;
-      Crv_ux0 = AST__BAD;    
-      Crv_tol = tol;
-      Crv_limit = 0.5*tol*tol;
-      Crv_map = Map5;
-      Crv_ink = 1;
-      Crv_xlo = this->xlo;
-      Crv_xhi = this->xhi;
-      Crv_ylo = this->ylo;
-      Crv_yhi = this->yhi;
-      Crv_out = 1;
-      Crv_xbrk = cdata.xbrk;
-      Crv_ybrk = cdata.ybrk;
-      Crv_vxbrk = cdata.vxbrk;
-      Crv_vybrk = cdata.vybrk;
-      Crv_clip = astGetClip( this ) & 1;
-
-/* Set up a list of points spread evenly over the curve. */
-      for( i = 0; i < CRV_NPNT; i++ ){
-        d[ i ] = ( (double) i)/( (double) CRV_NSEG );
-      }
-
-/* Map these points into graphics coordinates. */
-      Map5( CRV_NPNT, d, x, y, method, class, status GLOBALS_NAME );
-
-/* Use Crv and Map5 to draw the curve. */
-      Crv( this, d, x, y, 0, NULL, NULL, method, class, status );
-
-/* End the current poly line. */
-      Opoly( this, method, class, status );
-
-/* Tidy up the static data used by Map5. */
-      Map5( 0, NULL, NULL, NULL, method, class, status GLOBALS_NAME );
-
-/* Annul the Mapping. */
-      Map5_map = astAnnul( Map5_map );
-
-/* Indicate the outline was drawn. */
-      result = 1;
-   }
-
-/* Return. */
-   return result;
-}
-
-static void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status ) {
-/*
-*  Name:
-*     RemoveFrame
-
-*  Purpose:
-*     Remove a Frame from a Plot.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status )
-
-*  Class Membership:
-*     Plot member function (over-rides the astRemoveFrame public
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function removes a Frame from a Plot. All other Frames
-*     in the Plot have their indices re-numbered from one (if
-*     necessary), but are otherwise unchanged.
-*
-*     If the index of the clipping Frame is changed, the index value 
-*     stored in the Plot is updated. If the clipping Frame itself is
-*     removed, all clipping information is removed from the Plot.
-
-*  Parameters:
-*     this_fset
-*        Pointer to the FrameSet component of the Plot.
-*     iframe
-*        The index within the Plot of the Frame to be removed.
-*        This value should lie in the range from 1 to the number of
-*        Frames in the Plot (as given by its Nframe attribute).
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPlot *this;          /* Pointer to Plot structure */
-   int ifrm;               /* Validated frame index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) this_fset;
-
-/* Validate the frame index. */
-   ifrm = astValidateFrameIndex( this_fset, iframe, "astRemoveFrame" );
-
-/* Invoke the parent astRemoveFrame method to remove the Frame. */
-   (*parent_removeframe)( this_fset, iframe, status );
-
-/* If the index of the removed Frame is smaller than the clipping Frame
-   index, then decrement the clipping Frame index so that the same Frame 
-   will be used in future. */
-   if( astOK ){
-      if( ifrm < this->clip_frame ){
-         (this->clip_frame)--;
-
-/* If the clipping fgrame itself has been removed, indicate that no
-   clipping should nbow be performed. */
-      } else if( ifrm == this->clip_frame ){
-         astClip( this, AST__NOFRAME, NULL, NULL );
-      }
-   }
-}
-
-static void RightVector( AstPlot *this, float *ux, float *uy, float *rx, 
-                         float *ry, const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     RightVector
-
-*  Purpose:
-*     Return a vector in the direction of the base line of normal text.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void RightVector( AstPlot *this, float *ux, float *uy, float *rx, 
-*                       float *ry, const char *method, const char *class, int *status )
-
-*  Description:
-*     This function returns a vector which points from left to right along 
-*     the text baseline, taking account of any difference in the scales of 
-*     the x and y axes. It also scales the supplied up vector so that it has 
-*     a length equal to the height of normal text, and scales the returned
-*     right vector to have the same length (on the screen) as the up vector. 
-
-*  Parameters:
-*     this
-*        The plot.
-*     ux
-*        Pointer to a float holding the x component of the up-vector for the 
-*        text, in graphics coords. Scaled on exit so that the up vector has 
-*        length equal to the height of normal text.
-*     uy
-*        Pointer to a float holding the y component of the up-vector for the 
-*        text, in graphics coords. Scaled on exit so that the up vector has 
-*        length equal to the height of normal text.
-*     rx 
-*        Pointer to a double in which will be put the x component of a
-*        vector parallel to the baseline of normal text.
-*     ry
-*        Pointer to a double in which will be put the y component of a
-*        vector parallel to the baseline of normal text.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
-   float alpha;         /* Scale factor for X axis */
-   float beta;          /* Scale factor for Y axis */
-   float chv;
-   float chh;
-   float l;             /* Normalisation constant */
-   float a;            
-   float b;            
-   float nl;		/* Character height in standard coordinates */
-
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* Find the scale factors for the two axes which scale graphics coordinates
-   into a "standard" coordinate system in which: 1) the axes have equal scale 
-   in terms of (for instance) millimetres per unit distance, 2) X values 
-   increase from left to right, 3) Y values increase from bottom to top. 
-   If the grf moduleis not capable of giving us this information, then
-   just assume the the axes are equally scaled, except for any axis
-   reversal indicated in the supplied Plot. */
-   if( GCap( this, GRF__SCALES, 1, status ) ) {
-      GScales( this, &alpha, &beta, method, class, status );
-   } else {
-      alpha = ( this->xrev ) ? -1.0 : 1.0;
-      beta = ( this->yrev ) ? -1.0 : 1.0;
-   }
-
-/* Convert the up-vector into "standard" system in which the axes have
-   equal scales, and increase left-to-right, bottom-to-top. */
-   *ux *= alpha;
-   *uy *= beta;
-
-/* Normalise this up-vector. */
-   l = sqrt( (*ux)*(*ux) + (*uy)*(*uy) );
-   if( l <= 0.0 ) {
-     *ux = 0.0;
-     *uy = 1.0;
-   } else {
-     *ux /= l;
-     *uy /= l;
-   }
-
-/* Find the height in "standard" coordinates of "normal" text draw with the 
-   requested up-vector. */
-   GQch( this, &chv, &chh, method, class, status );
-   a = (*ux)/(chv*alpha);
-   b = (*uy)/(chh*beta);
-   nl = 1.0/sqrt( a*a + b*b );
-
-/* Scale the up-vector so that is has length equal to the height of "normal" 
-   text with the specified up-vector. */
-   *ux *= nl;
-   *uy *= nl;
-
-/* Get the vector along the base-line of the text, by rotating the 
-   up-vector by 90 degrees clockwise. */
-   *rx = *uy;   
-   *ry = -*ux;
-
-/* Convert both vectors back from standard coords to normal world coords */
-   *ux /= alpha;
-   *uy /= beta;
-   *rx /= alpha;
-   *ry /= beta;
-
-}
-
-static void SaveTick( AstPlot *this, int axis, double gx, double gy, 
-                      int major, int *status ){
-/*
-*  Name:
-*     SaveTick
-
-*  Purpose:
-*     Save info about a drawn tick in the Plot structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void SaveTick( AstPlot *this, int axis, double gx, double gy,
-*                    int major, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function stores the start position and type of each drawn 
-*     tick in the given Plot.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     axis
-*        The zero-based axis index to which the tick refers. If a
-*        negative value is specified then all information about drawn ticks
-*        curently stored in the Plot is erased.
-*     gx
-*        The graphics X position at the start of the tick mark.
-*     gy
-*        The graphics Y position at the start of the tick mark.
-*     major
-*        Non-zero if the tick mark is a major tick.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int i;
-   int *count;
-   double *tickgx;
-   double *tickgy;
-
-/* Free the tick info in the supplied Plot if required. Do this before
-   checking the error status. */
-   if( axis < 0 ) {
-      for( i = 0; i < 3; i++ ) {
-         this->majtickgx[ i ] = astFree( this->majtickgx[ i ] );
-         this->majtickgy[ i ] = astFree( this->majtickgy[ i ] );
-         this->mintickgx[ i ] = astFree( this->mintickgx[ i ] );
-         this->mintickgy[ i ] = astFree( this->mintickgy[ i ] );
-         this->mintickcount[ i ] = 0;
-         this->majtickcount[ i ] = 0;
-      }
-      return;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get pointers to the arrays to use, and ensure the arrays are big 
-   enough to hold the new tick. */
-   if( major ) {
-      count = this->majtickcount + axis;
-      tickgx = this->majtickgx[ axis ];
-      tickgy = this->majtickgy[ axis ];
-   } else {
-      count = this->mintickcount + axis;
-      tickgx = this->mintickgx[ axis ];
-      tickgy = this->mintickgy[ axis ];
-   }
-
-/* Ensure the arrays are big enough to hold the new tick. */
-   i = *count;
-   tickgx = astGrow( tickgx, i + 1, sizeof( double ) );
-   tickgy = astGrow( tickgy, i + 1, sizeof( double ) );
-
-/* If memory was allocated succesfully, store the new tick information in
-   the expanded arrays. */
-   if( astOK ) {
-      tickgx[ i ] = gx;
-      tickgy[ i ] = gy;
-      *count = i + 1;
-
-/* Store the potentially updated array pointers. */
-      if( major ) {
-         this->majtickgx[ axis ] = tickgx; 
-         this->majtickgy[ axis ] = tickgy;
-      } else {
-         this->mintickgx[ axis ] = tickgx;
-         this->mintickgy[ axis ] = tickgy;
-      }
-   }
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Plot.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     Plot member function (over-rides the astSetAttrib protected
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function assigns an attribute value for a Plot, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPlot *this;                /* Pointer to the Plot structure */
-   char label[21];               /* Graphics item label */
-   const char *class;            /* Pointer to class string */
-   double dval;                  /* Double attribute value */
-   int axis;                     /* Index for the axis */
-   int edge;                     /* Index of edge within list */
-   int id1;                      /* Plot object id */
-   int id2;                      /* Plot object id */
-   int id;                       /* Plot object id */
-   int ival;                     /* Int attribute value */
-   int len;                      /* Length of setting string */
-   int nax;                      /* Number of graphics frame axes */
-   int nc;                       /* Number of characters read by astSscanf */
-   int id3;                      /* Third genuine identifier */
-   int nid;                      /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) this_object;
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
-   nax = astGetNin( this );
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Tol. */
-/* ---- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "tol= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetTol( this, dval );
-
-/* Grid. */
-/* ----- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "grid= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetGrid( this, ival );
-
-/* TickAll. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "tickall= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetTickAll( this, ival );
-
-/* ForceExterior */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "forceexterior= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetForceExterior( this, ival );
-
-/* Invisible. */
-/* ---------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "invisible= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetInvisible( this, ival );
-
-/* Border. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "border= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetBorder( this, ival );
-
-/* ClipOp. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "clipop= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetClipOp( this, ival );
-
-/* Clip. */
-/* ----- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "clip= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetClip( this, ival );
-
-/* Grf. */
-/* ---- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "grf= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetGrf( this, ival );
-
-/* DrawTitle. */
-/* ---------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "drawtitle= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetDrawTitle( this, ival );
-
-/* DrawAxes. */
-/* --------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "drawaxes= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetDrawAxes( this, axis, ival );
-
-/* DrawAxes(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "drawaxes(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetDrawAxes( this, axis - 1, ival );
-
-/* Abbrev. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "abbrev= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetAbbrev( this, axis, ival );
-
-/* Abbrev(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "abbrev(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetAbbrev( this, axis - 1, ival );
-
-/* Escape. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "escape= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetEscape( this, ival );
-
-/* Edge(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "edge(%d)= %n%*s %n", &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      edge = FullForm( "left right top bottom", setting + ival, setting, 
-                       "astSet", astGetClass( this ), status );
-      if( edge == 0 ) {
-         astSetEdge( this, axis - 1, LEFT );
-      } else if( edge == 1 ) {
-         astSetEdge( this, axis - 1, RIGHT );
-      } else if( edge == 2 ) {
-         astSetEdge( this, axis - 1, TOP );
-      } else if( edge == 3 ) {
-         astSetEdge( this, axis - 1, BOTTOM );
-      }
-
-/* LabelAt (axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "labelat(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLabelAt( this, axis - 1, dval );
-
-/* Centre(axis). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "centre(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetCentre( this, axis - 1, dval );
-
-/* Gap. */
-/* ---- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "gap= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetGap( this, axis, dval );
-
-/* Gap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "gap(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetGap( this, axis - 1, dval );
-
-/* LogGap. */
-/* ---- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "loggap= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetLogGap( this, axis, dval );
-
-/* LogGap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "loggap(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLogGap( this, axis - 1, dval );
-
-/* NumLabGap. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "numlabgap= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetNumLabGap( this, axis, dval );
-
-/* NumLabGap(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "numlabgap(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetNumLabGap( this, axis - 1, dval );
-
-/* TextLabGap. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "textlabgap= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetTextLabGap( this, axis, dval );
-
-/* TextLabGap(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "textlabgap(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetTextLabGap( this, axis - 1, dval );
-
-/* LabelUp. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "labelup= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetLabelUp( this, axis, ival );
-
-/* LabelUp(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "labelup(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLabelUp( this, axis - 1, ival );
-
-/* LogPlot. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "logplot= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetLogPlot( this, axis, ival );
-
-/* LogPlot(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "logplot(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLogPlot( this, axis - 1, ival );
-
-/* LogTicks. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "logticks= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetLogTicks( this, axis, ival );
-
-/* LogTicks(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "logticks(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLogTicks( this, axis - 1, ival );
-
-/* LogLabel. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "loglabel= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetLogLabel( this, axis, ival );
-
-/* LogLabel(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "loglabel(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLogLabel( this, axis - 1, ival );
-
-/* NumLab. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "numlab= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetNumLab( this, axis, ival );
-
-/* NumLab(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "numlab(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetNumLab( this, axis - 1, ival );
-
-/* MinTick. */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "mintick= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetMinTick( this, axis, ival );
-
-/* MinTick(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "mintick(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetMinTick( this, axis - 1, ival );
-
-/* TextLab. */
-/* ---------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "textlab= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetTextLab( this, axis, ival );
-
-/* TextLab(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "textlab(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetTextLab( this, axis - 1, ival );
-
-/* LabelUnits. */
-/* --------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "labelunits= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetLabelUnits( this, axis, ival );
-
-/* LabelUnits(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "labelunits(%d)= %d %n",
-                              &axis, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLabelUnits( this, axis - 1, ival );
-
-/* Style. */
-/* ------ */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "style= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astSetStyle( this, id, ival );
-
-/* Style(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "style(%20[^()])= %d %n",
-                              label, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, "Style", "astSet", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astSetStyle( this, id1, ival );
-      if( nid > 1 ) astSetStyle( this, id2, ival );
-      if( nid > 2 ) astSetStyle( this, id3, ival );
-
-/* Font. */
-/* ----- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "font= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astSetFont( this, id, ival );
-
-/* Font(label). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "font(%20[^()])= %d %n",
-                              label, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, "Font", "astSet", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astSetFont( this, id1, ival );
-      if( nid > 1 ) astSetFont( this, id2, ival );
-      if( nid > 2 ) astSetFont( this, id3, ival );
-
-/* Colour. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "colour= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astSetColour( this, id, ival );
-
-/* Colour(label). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "colour(%20[^()])= %d %n",
-                              label, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, "Colour", "astSet", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astSetColour( this, id1, ival );
-      if( nid > 1 ) astSetColour( this, id2, ival );
-      if( nid > 2 ) astSetColour( this, id3, ival );
-
-/* Color. */
-/* ------ */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "color= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astSetColour( this, id, ival );
-
-/* Color(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "color(%20[^()])= %d %n",
-                              label, &ival, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, "Color", "astSet", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astSetColour( this, id1, ival );
-      if( nid > 1 ) astSetColour( this, id2, ival );
-      if( nid > 2 ) astSetColour( this, id3, ival );
-
-/* Width. */
-/* ------ */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "width= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astSetWidth( this, id, dval );
-
-/* Width(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "width(%20[^()])= %lg %n",
-                              label, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, "Width", "astSet", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astSetWidth( this, id1, dval );
-      if( nid > 1 ) astSetWidth( this, id2, dval );
-      if( nid > 2 ) astSetWidth( this, id3, dval );
-
-/* Size. */
-/* ----- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "size= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( id = 0; id < AST__NPID; id++ ) astSetSize( this, id, dval );
-
-/* Size(label). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "size(%20[^()])= %lg %n",
-                              label, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      class =  astGetClass( this );
-
-      nid = IdFind( FullForm( GrfLabels, label, "Size", "astSet", class, status ),
-                    nax, &id1, &id2, &id3, status );
-      astSetSize( this, id1, dval );
-      if( nid > 1 ) astSetSize( this, id2, dval );
-      if( nid > 2 ) astSetSize( this, id3, dval );
-
-/* TitleGap. */
-/* ----------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "titlegap= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetTitleGap( this, dval );
-
-/* MajTickLen. */
-/* ----------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "majticklen= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetMajTickLen( this, axis, dval );
-
-/* MajTickLen(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "majticklen(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetMajTickLen( this, axis - 1, dval );
-
-/* MinTickLen. */
-/* ----------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "minticklen= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      for( axis = 0; axis < nax; axis++ ) astSetMinTickLen( this, axis, dval );
-
-/* MinTickLen(axis). */
-/* ----------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "minticklen(%d)= %lg %n",
-                              &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetMinTickLen( this, axis - 1, dval );
-
-/* Labelling. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "labelling= %n%*s %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetLabelling( this, FullForm( "exterior interior", 
-                                        setting + ival, setting, 
-                                        "astSet", astGetClass( this ), status )
-                      );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetLogPlot( AstPlot *this, int axis, int ival, int *status ){
-/*
-*
-*  Name:
-*     SetLogPlot
-
-*  Purpose:
-*     Set a new value for a LogPlot attribute
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void SetLogPlot( AstPlot *this, int axis, int ival, int *status )
-
-*  Class Membership:
-*     Plot member function 
-
-*  Description:
-*     Assigns a new value to the LogPlot attribute of the specified axis,
-*     and also re-maps the base Frame of the Plot if necessary.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     axis
-*        Zero based axis index.
-*     ival
-*        The new value for the ogPlot attribute.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int oldval;              /* Original attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the axis index. */ 
-   if( axis < 0 || axis >= 2 ){ 
-      astError( AST__AXIIN, "astSetLogPlot(%s): Index (%d) is invalid for "
-                "attribute LogPlot - it should be in the range 1 to 2.", status, 
-                astGetClass( this ), axis + 1 ); 
-
-/* If the axis index is OK, store the original attribute value. We use
-   astGetLogPlot to get the value rather than directly accessing
-   "this->logplot" in order to get the any default value in the case of
-   no value having been set. */
-   } else {
-      oldval = astGetLogPlot( this, axis );
-
-/* If the current attribute value will change, attempt to re-map the plot 
-   axis. If the attempt succeeds, toggle the current attribute value. */
-      if( ( ival != 0 ) != ( oldval != 0 ) ){
-         if( ToggleLogLin( this, axis, oldval, "astSetLogPlot", status ) ){
-            this->logplot[ axis ] = ( !oldval );
-         }
-
-/* If the current attribute value will not change, just store the supplied 
-   value (this is not redundant because it may cause a previously defaulted 
-   value to become an explicitly set value ). */
-      } else {
-         this->logplot[ axis ] = oldval;
-      }
-   }
-} 
-
-static void SetTickValues( AstPlot *this, int axis, int nmajor, double *major,
-                           int nminor, double *minor, int *status ){
-/*
-*+
-*  Name:
-*     astSetTickValues
-
-*  Purpose:
-*     Store the tick mark values to use for a given Plot axis.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void astSetTickValues( AstPlot *this, int axis, int nmajor, 
-*                            double *major, int nminor, double *minor )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function stores a set of tick mark values that should be used by
-*     subsequent calls to astGrid.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     axis
-*        The zero-based index of the axis for which tick marks values
-*        have been supplied.
-*     nmajor
-*        The number of major tick mark values. If zero is supplied then
-*        the other parameters are ignored, and subsequent calls to
-*        astGrid will itself determine the tick values to be used.
-*     major
-*        Pointer to an array holding "nmajor" values for axis "axis" in
-*        the current Frame of the suppled Plot. Major tick marks will be
-*        drawn at these values. 
-*     nminor
-*        The number of minor tick mark values.
-*     minor 
-*        Pointer to an array holding "nminor" values for axis "axis" in
-*        the current Frame of the suppled Plot. Minor tick marks will be
-*        drawn at these values. 
-
-*-
-*/
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Report an error if the supplied axis value is incorrect. */
-   if( axis < 0 || axis >= astGetNin( this ) ) {
-      astError( AST__INTER, "astSetTickValues(Plot): Supplied \"axis\" "
-                "value is %d - should in the range 0 to %d (internal AST "
-                "programming error).", status, axis, astGetNin( this ) - 1 );
-
-/* Otherwise store or clear the values. */
-   } else if( nmajor > 0 ){
-      this->nmajtickval[ axis ] = nmajor;
-      this->majtickval[ axis ] = astStore( this->majtickval[ axis ], major, 
-                                           sizeof( double )*nmajor );
-      this->nmintickval[ axis ] = nminor;
-      this->mintickval[ axis ] = astStore( this->mintickval[ axis ], minor, 
-                                           sizeof( double )*nminor );
-
-/* Sort them into increasing order. */
-      qsort( (void *) this->majtickval[ axis ], (size_t) nmajor, 
-             sizeof(double), Compared );
-
-      qsort( (void *) this->mintickval[ axis ], (size_t) nminor, 
-             sizeof(double), Compared );
-
-   } else {
-      this->nmajtickval[ axis ] = 0;
-      this->majtickval[ axis ] = astFree( this->majtickval[ axis ] );
-      this->nmintickval[ axis ] = 0;
-      this->mintickval[ axis ] = astFree( this->mintickval[ axis ] );
-   }
-}
-
-const char *astStripEscapes_( const char *text, int *status ) {
-/*
-*++
-*  Name:
-c     astStripEscapes
-f     AST_STRIPESCAPES
-
-*  Purpose:
-*     Remove AST escape sequences from a string.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     const char *astStripEscapes( const char *text )
-f     RESULT = AST_STRIPESCAPES( TEXT )
-
-*  Description:
-*     This function removes AST escape sequences from a supplied string,
-*     returning the resulting text as the function value. The behaviour
-*     of this function can be controlled by invoking the 
-c     astEscapes function,
-f     AST_ESCAPES routine,
-*     which can be used to supress or enable the removal of escape
-*     sequences by this function.
-*
-*     AST escape sequences are used by the Plot class to modify the
-*     appearance and position of sub-strings within a plotted text string.
-*     See the "Escape" attribute for further information.
-
-*  Parameters:
-c     text
-c        Pointer to the string to be checked.
-f     TEXT
-f        The string to be checked.
-
-*  Returned Value:
-c     astStripEscapes()
-f     AST_STRIPESCAPES = CHARACTER 
-c        Pointer to the modified string. If no escape sequences were found
-c        in the supplied string, then a copy of the supplied pointer is
-c        returned. Otherwise, the pointer will point to a static buffer 
-c        holding the modified text. This text will be over-written by
-c        subsequent invocations of this function. If the astEscapes function
-f        The modified string. If the AST_ESCAPES routine
-*        has been called indicating that escape sequences should not be
-*        stripped, then the supplied string is returned without change.
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS
-   const char *a;
-   char *b;
-   int nc;
-   int ncc;
-   int type;
-   int value;
-   const char *result;
-
-/* Initialise */
-   result= text;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check inherited status and supplied pointer. Also return if the 
-   string contains no escape sequences or if stripping of escapes has
-   been supressed. */
-   if( !astOK || astEscapes( -1 ) || !text || !HasEscapes( text, status ) ) return result;
-
-/* Initialise a pointer to the next character to be read from the
-   supplied string. */
-   a = text;
-
-/* Initialise a pointer to the next character to be written to the
-   returned string. */
-   b = stripescapes_buff;
-
-/* Note the available space left in the buffer. */
-   ncc = AST__PLOT_STRIPESCAPES_BUFF_LEN;
-
-/* Loop until all the string has been read, or the buffer is full. */
-   while( *a && ncc > 0 ){
-
-/* If the remaining string starts with an escape sequence, increment the
-   read point by the length of the escape sequence, but leave the write
-   pointer where it is. */
-      if( astFindEscape( a, &type, &value, &nc ) ) {
-         a += nc;
-
-/* If the remaining string does not start with an escape sequence, copy
-   the following text from the read position to the write position. */
-      } else {
-         if( nc > ncc ) nc = ncc;
-         memcpy( b, a, sizeof( char )*nc );
-         a += nc;
-         b += nc;
-         ncc -= nc;
-      }
-   }
-
-/* Terminate the returned string. */
-   *b = 0;
-
-/* Return the result.*/
-   return stripescapes_buff;
-}
-
-static int swapEdges( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, int *status ) {
-/*
-*  Name:
-*     swapEdges
-
-*  Purpose:
-*     Determine if edges for text labels should be swapped.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int swapEdges( AstPlot *this, TickInfo **grid, AstPlotCurveData **cdata, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     or not it is necessary to swap the Edges(0) and Edges(1) attributes 
-*     in order to place textual labels on appropriate edges. This should
-*     only be used if the attributes have not explicitly been set, and if
-*     interior labelling is being used. The sides are determines by
-*     looking at the bounding box of tick marks on axis 0, in graphics
-*     coordinates. The returned value causes the label for axis 0 to be
-*     placed on the edge parallel to the longest side of this bounding box.
-*     The label for axis 1 is placed parallel to the shortest side of this
-*     bounding box.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     grid
-*        A pointer to an array of two TickInfo pointers (one for each axis), 
-*        each pointing to a TickInfo structure holding information about
-*        tick marks on the axis. See function GridLines.
-*     cdata
-*        A pointer to an array of two AstPlotCurveData pointers (one for each axis), 
-*        each pointing to an array of AstPlotCurveData structure (one for each
-*        major tick value on the axis), holding information about breaks
-*        in the curves drawn to mark the major tick values. See function 
-*        DrawGrid. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the edges should be swapped, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPlotCurveData *cdt; /* Pointer to the AstPlotCurveData for the next tick */
-   TickInfo *info;        /* Pointer to the TickInfo for the current axis */
-   float xmax;            /* Max graphics X value */
-   float xmin;            /* Min graphics X value */
-   float ymax;            /* Max graphics Y value */
-   float ymin;            /* Min graphics Y value */
-   int oldedge;           /* The original edge for axis 0 */
-   int result;            /* Swap edges? */
-   int tick;              /* Tick index */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure containing information describing the 
-   positions of the major tick marks along axis 0. */  
-   info = grid[ 0 ];
-
-/* Get a pointer to the structure containing information describing 
-   the breaks in the curve which is parallel to axis 1 and passes 
-   through the first major tick mark on axis 0. */
-   cdt = cdata[ 0 ];
-
-/* Initialise the graphiocs X and Y bounds of the area covered by the
-   axis. */
-   xmax = -1.0E10;
-   xmin = 1.0E10;
-   ymax = -1.0E10;
-   ymin = 1.0E10;
-
-/* Loop round each of the major tick marks on axis 0. */
-   for( tick = 0; cdt && info && tick < info->nmajor; tick++ ){
-
-/* Update the max and min graphics X and Y coords covered by the axis. */
-      if( cdt->nbrk > 0 ) {
-         xmax = MAX( xmax, cdt->xbrk[0] );
-         xmin = MIN( xmin, cdt->xbrk[0] );
-         ymax = MAX( ymax, cdt->ybrk[0] );
-         ymin = MIN( ymin, cdt->ybrk[0] );
-      }
-
-/* Get a pointer to the curve through the next major tick mark. */
-      cdt++;
-            
-   }
-
-/* See which edge axis 0 would normally be labelled on. */
-   oldedge = astGetEdge( this, 0 );
-
-/* If the X range is larger than the Y range, the textual label should be
-   placed on the bottom edge. If required, indicate that the edges must
-   be swapped to achieve this. */
-   if( xmax - xmin > ymax - ymin ) {
-      if( oldedge == 0 || oldedge == 2 ) result = 1;
-
-/* If the X range is smaller  than the Y range, the textual label should be
-   placed on the left edge. If required, indicate that the edges must
-   be swapped to achieve this. */
-   } else {
-      if( oldedge == 1 || oldedge == 3 ) result = 1;
-   }
-
-   return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Plot.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Plot member function (over-rides the astTestAttrib protected
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Plot's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPlot *this;                /* Pointer to the Plot structure */
-   char label[21];               /* Graphics item label */
-   int axis;                     /* Axis number */
-   int len;                      /* Length of attrib string */
-   int nax;                      /* Number of base Frame axes */
-   int nc;                       /* No. characters read by astSscanf */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) this_object;
-
-/* Get the number of base Frame axis (2 for a Plot, 3 for a Plot3D). */
-   nax = astGetNin( this );
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Tol. */
-/* ---- */
-   if ( !strcmp( attrib, "tol" ) ) {
-      result = astTestTol( this );
-
-/* Edge(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "edge(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestEdge( this, axis - 1 );
-
-/* Grid. */
-/* ----- */
-   } else if ( !strcmp( attrib, "grid" ) ) {
-      result = astTestGrid( this );
-
-/* TickAll. */
-/* -------- */
-   } else if ( !strcmp( attrib, "tickall" ) ) {
-      result = astTestTickAll( this );
-
-/* ForceExterior */
-/* ------------- */
-   } else if ( !strcmp( attrib, "forceexterior" ) ) {
-      result = astTestForceExterior( this );
-
-/* Invisible. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "invisible" ) ) {
-      result = astTestInvisible( this );
-
-/* Border. */
-/* ------- */
-   } else if ( !strcmp( attrib, "border" ) ) {
-      result = astTestBorder( this );
-
-/* ClipOp. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clipop" ) ) {
-      result = astTestClipOp( this );
-
-/* Clip. */
-/* ----- */
-   } else if ( !strcmp( attrib, "clip" ) ) {
-      result = astTestClip( this );
-
-/* Grf. */
-/* ---- */
-   } else if ( !strcmp( attrib, "grf" ) ) {
-      result = astTestGrf( this );
-
-/* DrawTitle. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "drawtitle" ) ) {
-      result = astTestDrawTitle( this );
-
-/* DrawAxes. */
-/* --------- */
-   } else if ( !strcmp( attrib, "drawaxes" ) ) {
-      result = astTestDrawAxes( this, 0 );
-
-/* DrawAxes(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "drawaxes(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestDrawAxes( this, axis - 1 );
-
-/* Abbrev. */
-/* --------- */
-   } else if ( !strcmp( attrib, "abbrev" ) ) {
-      result = astTestAbbrev( this, 0 );
-
-/* Abbrev(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "abbrev(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestAbbrev( this, axis - 1 );
-
-/* Escape. */
-/* ------- */
-   } else if ( !strcmp( attrib, "escape" ) ) {
-      result = astTestEscape( this );
-
-/* Gap. */
-/* ---- */
-   } else if ( !strcmp( attrib, "gap" ) ) {
-      result = astTestGap( this, 0 );
-
-/* Gap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "gap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestGap( this, axis - 1 );
-
-/* LabelAt(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelat(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLabelAt( this, axis - 1 );
-
-/* LogGap. */
-/* ---- */
-   } else if ( !strcmp( attrib, "loggap" ) ) {
-      result = astTestLogGap( this, 0 );
-
-/* LogGap(axis). */
-/* ---------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "loggap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLogGap( this, axis - 1 );
-
-/* NumLabGap. */
-/* --------- */
-   } else if ( !strcmp( attrib, "numlabgap" ) ) {
-      result = astTestNumLabGap( this, 0 );
-
-/* NumLabGap(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "numlabgap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestNumLabGap( this, axis - 1 );
-
-/* TextLabGap. */
-/* --------- */
-   } else if ( !strcmp( attrib, "textlabgap" ) ) {
-      result = astTestTextLabGap( this, 0 );
-
-/* TextLabGap(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "textlabgap(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestTextLabGap( this, axis - 1 );
-
-/* LabelUp. */
-/* -------- */
-   } else if ( !strcmp( attrib, "labelup" ) ) {
-      result = astTestLabelUp( this, 0 );
-
-/* LabelUp(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelup(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLabelUp( this, axis - 1 );
-
-/* LogPlot. */
-/* -------- */
-   } else if ( !strcmp( attrib, "logplot" ) ) {
-      result = astTestLogPlot( this, 0 );
-
-/* LogPlot(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "logplot(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLogPlot( this, axis - 1 );
-
-/* LogTicks. */
-/* -------- */
-   } else if ( !strcmp( attrib, "logticks" ) ) {
-      result = astTestLogTicks( this, 0 );
-
-/* LogTicks(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "logticks(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLogTicks( this, axis - 1 );
-
-/* LogLabel. */
-/* -------- */
-   } else if ( !strcmp( attrib, "loglabel" ) ) {
-      result = astTestLogLabel( this, 0 );
-
-/* LogLabel(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "loglabel(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLogLabel( this, axis - 1 );
-
-/* NumLab. */
-/* -------- */
-   } else if ( !strcmp( attrib, "numlab" ) ) {
-      result = astTestNumLab( this, 0 );
-
-/* NumLab(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "numlab(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestNumLab( this, axis - 1 );
-
-/* MinTick. */
-/* -------- */
-   } else if ( !strcmp( attrib, "mintick" ) ) {
-      result = astTestMinTick( this, 0 );
-
-/* MinTick(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "mintick(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestMinTick( this, axis - 1 );
-
-/* TextLab. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "textlab" ) ) {
-      result = astTestTextLab( this, 0 );
-
-/* TextLab(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "textlab(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestTextLab( this, axis - 1 );
-
-/* LabelUnits. */
-/* --------- */
-   } else if ( !strcmp( attrib, "labelunits" ) ) {
-      result = astTestLabelUnits( this, 0 );
-
-/* LabelUnits(axis). */
-/* --------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "labelunits(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestLabelUnits( this, axis - 1 );
-
-/* Style. */
-/* ------ */
-   } else if ( !strcmp( attrib, "style" ) ) {
-      result = TestUseStyle( this, AST__BORDER_ID, status );
-
-/* Style(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "style(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      result = TestUseStyle( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Font. */
-/* ----- */
-   } else if ( !strcmp( attrib, "font" ) ) {
-      result = TestUseFont( this, AST__TEXTLABS_ID, status );
-
-/* Font(label). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "font(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      result = TestUseFont( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Colour. */
-/* ------- */
-   } else if ( !strcmp( attrib, "colour" ) ) {
-      result = TestUseColour( this, AST__TEXTLABS_ID, status );
-
-/* Color. */
-/* ------- */
-   } else if ( !strcmp( attrib, "color" ) ) {
-      result = TestUseColour( this, AST__TEXTLABS_ID, status );
-
-/* Colour(label). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "colour(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      result = TestUseColour( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Color(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "color(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      result = TestUseColour( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Width. */
-/* ------ */
-   } else if ( !strcmp( attrib, "width" ) ) {
-      result = TestUseWidth( this, AST__BORDER_ID, status );
-
-/* Width(label). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "width(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      result = TestUseWidth( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* Size. */
-/* ----- */
-   } else if ( !strcmp( attrib, "size" ) ) {
-      result = TestUseSize( this, AST__TEXTLABS_ID, status );
-
-/* Size(label). */
-/* ------------ */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "size(%20[^()])%n", label, &nc ) )
-               && ( nc >= len ) ) {
-      result = TestUseSize( this, FullForm( GrfLabels, label, attrib, "astTest", astGetClass( this ), status ), status );
-
-/* TitleGap. */
-/* --------- */
-   } else if ( !strcmp( attrib, "titlegap" ) ) {
-      result = astTestTitleGap( this );
-
-/* MajTickLen. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "majticklen" ) ) {
-      result = astTestMajTickLen( this, 0 );
-
-/* MajTickLen(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "majticklen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestMajTickLen( this, axis - 1 );
-
-/* MinTickLen. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "minticklen" ) ) {
-      result = astTestMinTickLen( this, 0 );
-
-/* MinTickLen(axis). */
-/* ---------------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "minticklen(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestMinTickLen( this, axis - 1 );
-
-/* Labelling. */
-/* -------- */
-   } else if ( !strcmp( attrib, "labelling" ) ) {
-      result = astTestLabelling( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static void Text( AstPlot *this, const char *text, const double pos[], 
-                  const float up[], const char *just, int *status ){
-/*
-*++
-*  Name:
-c     astText
-f     AST_TEXT
-
-*  Purpose:
-*     Draw a text string for a Plot.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     void astText( AstPlot *this, const char *text, const double pos[], 
-c                   const float up[], const char *just )
-f     CALL AST_TEXT( THIS, TEXT, POS, UP, JUST, STATUS )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function draws a string of text at a position specified in
-*     the physical coordinate system of a Plot. The physical position
-*     is transformed into graphical coordinates to determine where the
-*     text should appear within the plotting area.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Plot.
-c     text
-f     TEXT = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string containing the
-f        A character string containing the
-*        text to be drawn. Trailing white space is ignored.
-c     pos
-f     POS( * ) = DOUBLE PRECISION (Given)
-*        An array, with one element for each axis of the Plot, giving
-*        the physical coordinates of the point where the reference
-*        position of the text string is to be placed.
-c     up
-f     UP( * ) = REAL (Given)
-*        An array holding the components of a vector in the "up"
-*        direction of the text (in graphical coordinates). For
-c        example, to get horizontal text, the vector {0.0f,1.0f} should
-f        example, to get horizontal text, the vector [0.0,1.0] should
-*        be supplied. For a basic Plot, 2 values should be supplied. For 
-*        a Plot3D, 3 values should be supplied, and the actual up vector
-*        used is the projection of the supplied up vector onto the text plane
-*        specified by the current value of the Plot3D's Norm attribute.
-c     just
-f     JUST = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated character string identifying the
-f        A character string identifying the
-*        reference point for the text being drawn. The first character in
-*        this string identifies the reference position in the "up" direction
-*        and may be "B" (baseline), "C" (centre), "T" (top) or "M" (bottom). 
-*        The second character identifies the side-to-side reference position 
-*        and may be "L" (left), "C" (centre) or "R" (right ). The string is 
-*        case-insensitive, and only the first two characters are significant.
-*
-*        For example, a value of "BL" means that the left end of the
-*        baseline of the original (un-rotated) text is to be drawn at the
-c        position given by "pos".
-f        position given by POS.
-
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - The Plot3D class currently does not interpret graphical escape 
-*     sequences contained within text displayed using this method.
-*     - Text is not drawn at positions which have any coordinate equal
-*     to the value AST__BAD (or where the transformation into
-*     graphical coordinates yields coordinates containing the value
-*     AST__BAD).
-c     - If the plotting position is clipped (see astClip), then no
-f     - If the plotting position is clipped (see AST_CLIP), then no
-*     text is drawn.
-*     - An error results if the base Frame of the Plot is not
-*     2-dimensional or (for a Plot3D) 3-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   AstMapping *mapping;    /* Pointer to graphics->physical mapping */
-   AstPointSet *pset1;     /* PointSet holding physical positions */
-   AstPointSet *pset2;     /* PointSet holding graphics positions */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   const double **ptr1;    /* Pointer to physical positions */
-   char ljust[3];          /* Upper case copy of "just" */
-   char *ltext;            /* Local copy of "text" excluding trailing spaces */
-   double **ptr2;          /* Pointer to graphics positions */
-   float xbn[ 4 ];         /* X coords of text bounding box. */
-   float ybn[ 4 ];         /* Y coord of text bounding box. */
-   int axis;               /* Axis index */
-   int escs;               /* Original astEscapes value */
-   int naxes;              /* No. of axes in the base Frame */
-   int ncoord;             /* No. of axes in the current Frame */
-   int ulen;               /* Length of "text" excluding trailing spaces */
-
-/* Check the global error status. */
-   if ( !astOK || !text ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astText";
-   class = astClass( this );
-
-/* Check the base Frame of the Plot is 2-D. */
-   naxes = astGetNin( this );
-   if( naxes != 2 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 2.", status, method, class, naxes, class );
-   } 
-
-/* Ensure AST functions included graphical escape sequences in any
-   returned text strings. */
-   escs = astEscapes( 1 );
-
-/* Initialise the bounding box for primatives produced by this call. */
-   if( !Boxp_freeze ) {
-      Boxp_lbnd[ 0 ] = FLT_MAX;
-      Boxp_lbnd[ 1 ] = FLT_MAX;
-      Boxp_ubnd[ 0 ] = FLT_MIN;
-      Boxp_ubnd[ 1 ] = FLT_MIN;
-   }
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-   astGrfAttrs( this, AST__TEXT_ID, 1, GRF__TEXT, method, class );
-
-/* Get the number of coordinates in the physical coordinate frame. */
-   ncoord = astGetNout( this );   
-
-/* Create a PointSet to hold the supplied physical coordinates. */
-   pset1 = astPointSet( 1, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
-   ptr1 = (const double **) astMalloc( sizeof( const double * )*
-                                       (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
-   on each axis. */
-   if( astOK ){
-      for( axis = 0; axis < ncoord; axis++ ){
-         ptr1[ axis ] = pos + axis;
-      }
-   }
-
-/* Store these pointers in the PointSet. */
-   astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical 
-   coordinates) to the base frame (i.e. graphics coordinates) using 
-   the inverse Mapping defined by the Plot. */
-   mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-   pset2 = Trans( this, NULL, mapping, pset1, 0, NULL, 0, method, class, status );
-   mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
-   ptr2 = astGetPoints( pset2 );
-
-/* Take a copy of the string excluding any trailing white space. */
-   ulen = ChrLen( text, status );
-   ltext = (char *) astStore( NULL, (void *) text, ulen + 1 );
-
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* Terminate the local copy of the text string. */
-      ltext[ ulen ] = 0;
-
-/* Produce an upper-case copy of the first two characters in "just". */
-      ljust[0] = (char) toupper( (int) just[0] );
-      ljust[1] = (char) toupper( (int) just[1] );
-      ljust[2] = 0;
-
-/* Convert the double precision values to single precision, checking for
-   bad positions. */
-      if( ptr2[0][0] != AST__BAD && ptr2[1][0] != AST__BAD ){
-
-/* Draw the text string. */
-         DrawText( this, 1, astGetEscape( this ), ltext, (float) ptr2[0][0],
-                   (float) ptr2[1][0], ljust, up[ 0 ], up[ 1 ], xbn, ybn,
-                   NULL, method, class, status );
-      }
-
-/* Free the local copy of the string. */
-      ltext = (char *) astFree( (void *) ltext );
-
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
-   ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
-   astGrfAttrs( this, AST__TEXT_ID, 0, GRF__TEXT, method, class );
-
-/* Restore the original value of the flag which says whether graphical 
-   escape sequences should be incldued in any returned text strings. */
-   astEscapes( escs );
-
-/* Return */
-   return;
-}
-
-static void TextLabels( AstPlot *this, int edgeticks, int dounits[2],
-                        const char *method, const char *class, int *status ){
-/*
-*
-*  Name:
-*     TextLabels
-
-*  Purpose:
-*     Draw textual labels round a grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void TextLabels( AstPlot *this, int edgeticks, int dounits[2],
-*                      const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function displays a textual label for each physical axis, and a 
-*     title. The text strings are obtained from the Label and Title
-*     attributes of the current Frame in the Plot.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     edgeticks
-*        If tick marks and numerical labels were drawn around the edges
-*        of the plotting area, this should be supplied as 1. Otherwise it 
-*        should be supplied as zero.
-*     dounits
-*        Flags indicating if the axis Units string should be included in
-*        the edge labels.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   char *new_text;         /* Pointer to complete text string (inc. units) */
-   char *just;             /* Pointer to axis label justification string */
-   const char *text;       /* Pointer to text string to be displayed */
-   const char *units;      /* Pointer to text string describing the units */
-   double mindim;          /* Minimum dimension of plotting area */
-   double xrange;          /* Width of plotting area */
-   double yrange;          /* Height of plotting area */
-   float txtgap;           /* Gap between bounding box and text string */
-   float upx;              /* X component of text up-vector */
-   float upy;              /* Y component of text up-vector */
-   float xbn[ 4 ];         /* X coords at corners of new label's bounding box */
-   float ybn[ 4 ];         /* Y coords at corners of new label's bounding box */
-   float xref;             /* Graphics X coord. at text ref. position */
-   float yref;             /* Graphics Y coord. at text ref. position */
-   float xlo, xhi, ylo, yhi;/* The original bounding box (excluding labels) */
-   int axis;               /* Axis index */
-   int draw;               /* Should label be drawn? */
-   int edge;               /* Edge to be labelled */
-   int esc;                /* Interpret escape sequences? */
-   int gelid;              /* ID for next graphical element to be drawn */
-   int tlen;               /* No. of characetsr in label */
-   int ulen;               /* No. of characetsr in units */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Get the minimum dimension of the plotting area. */
-   xrange = this->xhi - this->xlo;
-   yrange = this->yhi - this->ylo;
-   mindim = MIN( xrange, yrange );
-
-/* Take a copy of the bounding box which encloses all other parts of the
-   annotated grid. If nothing has been plotted, use an area 20 % smaller
-   than the plotting area. */   
-   if( Box_lbnd[ 0 ] != FLT_MAX ) {
-      xlo = Box_lbnd[ 0 ];
-      xhi = Box_ubnd[ 0 ];
-      ylo = Box_lbnd[ 1 ];
-      yhi = Box_ubnd[ 1 ];
-   } else {
-      xlo = this->xlo + 0.2*xrange;
-      xhi = this->xhi - 0.2*xrange;
-      ylo = this->ylo + 0.2*yrange;
-      yhi = this->yhi - 0.2*yrange;
-   }
-
-/* See if escape sequences are to be interpreted within the labels. */
-   esc = astGetEscape( this );
-
-/* Initialize the id value for graphical element being drawn. */
-   gelid = AST__TEXTLAB1_ID;
-
-/* Now write a label for each physical axis. */
-   for( axis = 0; axis < 2 && astOK; axis++ ){
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-      astGrfAttrs( this, gelid, 1, GRF__TEXT, method, class );
-   
-/* See if the label is to be drawn. If an explicit value has not been set
-   for the TextLab attribute, the default is to draw the label if tick
-   marks were draw round the edge of the plotting area, and not to
-   otherwise. */
-      if( astTestTextLab( this, axis ) ){
-         draw = astGetTextLab( this, axis );
-      } else {
-         draw = edgeticks;
-      }
-
-/* If so get the label. */
-      if( draw ){
-         text = astGetLabel( this, axis );
-         tlen = ChrLen( text, status );
-
-/* If required, get the units string and concatenate it with the label (inside 
-   parenthesise). Ignore trailing spaces. */
-         if( dounits[ axis ] ){
-            units = astGetUnit( this, axis );
-            if( units && units[0] ){
-               ulen = ChrLen( units, status );
-               new_text = astMalloc( tlen + ulen + 4 );
-               if( new_text ) memcpy( new_text, text, tlen );
-               
-               text = new_text + tlen;
-
-               memcpy( (void *) text, " (", 2 );
-               text += 2;
-
-               memcpy( (char *) text, units, ulen );
-               text += ulen;
-
-               memcpy( (char *) text, ")", 1 );
-               text += 1;
-
-               ( (char *) text )[0] = 0;
-
-               text = new_text;
-
-            } else {
-               new_text = astStore( NULL, (void *) text, tlen + 1 );
-               new_text[ tlen ] = 0;
-               text = new_text;
-               units = NULL;
-            }
-
-         } else {
-            new_text = astStore( NULL, (void *) text, tlen + 1 );
-            new_text[ tlen ] = 0;
-            text = new_text;
-            units = NULL;
-         }
-
-/* Get the gap between the edge of the bounding box and the closest edge
-   of the text string. */
-         txtgap = (float)( mindim*astGetTextLabGap( this, axis ) );
-
-/* Get the edge to be labelled. Edge 0 is the left hand edge. Edge 1 is the 
-   top edge. Edge 2 is the right-hand edge. Edge 3 is the bottom edge. */
-         edge = astGetEdge( this, axis ) % 4;
-         if( edge < 0 ) edge = -edge;
-
-/* If the label is to be put on the left hand edge... */
-         if( edge == 0 ){
-
-/* Set the up vector so that the text is written from bottom to top. */
-            upx = -1.0;
-            upy = 0.0;
-
-/* Justify the bottom of the whole bounding box (not just the text
-   base-line). */
-            just = "MC"; 
-
-/* Set the x reference position just outside the box enclosing all the
-   graphics drawn so far. The reference point refers to the centre of the
-   text string in both directions ("CC" justification). Take account of 
-   whether or not the x axis is reversed. Do not allow the text to be 
-   written outside the whole plotting surface. */
-            if( this->xrev ){
-               xref = xhi + txtgap;
-            } else {
-               xref = xlo - txtgap;
-            }
-
-/* The Y reference position is at the mid point vertically. */
-            yref = 0.5*( MIN( yhi, this->yhi ) + 
-                         MAX( ylo, this->ylo ) );
-
-/* Do the same for the top edge. */
-         } else if( edge == 1 ){
-            upx = 0.0;
-            upy = 1.0;
-            just = "MC"; 
-            if( this->yrev ){
-               yref = ylo - txtgap;
-            } else {
-               yref = yhi + txtgap;
-            }
-            xref = 0.5*( MIN( xhi, this->xhi ) + 
-                         MAX( xlo, this->xlo ) );
-
-/* Do the same for the right-hand edge. */
-         } else if( edge == 2 ){
-            upx = 1.0;
-            upy = 0.0;
-            just = "MC"; 
-            if( this->xrev ){
-               xref = xlo - txtgap; 
-            } else {
-               xref = xhi + txtgap;
-            }
-            yref = 0.5*( MIN( yhi, this->yhi ) + 
-                         MAX( ylo, this->ylo ) );
-
-/* Do the same for the bottom edge. */
-         } else {
-            upx = 0.0;
-            upy = 1.0;
-            just = "TC"; 
-            if( this->yrev ){
-               yref = yhi + txtgap;
-            } else {
-               yref = ylo - txtgap;
-            }
-            xref = 0.5*( MIN( xhi, this->xhi ) + 
-                         MAX( xlo, this->xlo ) );
-         }
-
-/* Display the label. */
-         DrawText( this, 1, esc, text, xref, yref, just,
-                   upx, upy, xbn, ybn, NULL, method, class, status );
-
-/* Release the memory allocated to store the axis label;. */
-         new_text = (char *) astFree( (void *) new_text );
-         text = NULL;
-
-      }
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, gelid, 0, GRF__TEXT, method, class );
-
-/* Set up the id for the next graphical element to be drawn. */
-      gelid = AST__TEXTLAB2_ID;
-
-   }
-
-/* See if the title is to be drawn. */
-   if( astOK && astGetDrawTitle( this ) ){
-
-/* If so get the title. */
-      text = astGetTitle( this );
-
-/* Create a copy from which trailing spaces have been removed. */
-      tlen = ChrLen( text, status );
-      new_text = (char *) astStore( NULL, (void *) text, tlen + 1 );
-      new_text[ tlen ] = 0;
-      text = new_text;
- 
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-      astGrfAttrs( this, AST__TITLE_ID, 1, GRF__TEXT, method, class );
-
-/* Take a copy of the bounding box which encloses all other parts of the
-   annotated grid (this may have been extended by the above code). If 
-   nothing has been plotted, use an area 20 % smaller than the plotting 
-   area. */   
-      if( Box_lbnd[ 0 ] != FLT_MAX ) {
-         xlo = Box_lbnd[ 0 ];
-         xhi = Box_ubnd[ 0 ];
-         ylo = Box_lbnd[ 1 ];
-         yhi = Box_ubnd[ 1 ];
-      } else {
-         xlo = this->xlo + 0.2*xrange;
-         xhi = this->xhi - 0.2*xrange;
-         ylo = this->ylo + 0.2*yrange;
-         yhi = this->yhi - 0.2*yrange;
-      }
-
-/* Get the graphics coordinates of the bottom centre point of the title.
-   The X centre is put at the mid point of the used x axis range
-   (restricted to the range of the plotting area). */
-      xref = 0.5*( MIN( xhi, this->xhi ) + 
-                   MAX( xlo, this->xlo ) );
-
-/* The Y centre is put a "TitleGap" distance outside the box containing
-   the everything else. */
-      if( this->yrev ){
-         yref = ylo - (float)( mindim*astGetTitleGap( this ) );
-      } else {
-         yref = yhi + (float)( mindim*astGetTitleGap( this ) );
-      }
-
-/* Display the title. Justify the bottom of the whole bounding box (not 
-   just the text base-line). */
-      DrawText( this, 1, esc, text, xref, yref, "MC", 0.0F, 1.0F,
-                xbn, ybn, NULL, method, class, status );
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, AST__TITLE_ID, 0, GRF__TEXT, method, class );
-
-/* Release the memory allocated to store the title. */
-      new_text = (char *) astFree( (void *) new_text );
-      text = NULL;
-   }
-
-/* Include the labels in the bounding box held in global variables
-   Box_lbnd/ubnd. */
-   if( Box_lbnd[ 0 ] != FLT_MAX ) {
-      Box_lbnd[ 0 ] = MIN( Box_lbnd[ 0 ], Boxp_lbnd[ 0 ] );
-      Box_ubnd[ 0 ] = MAX( Box_ubnd[ 0 ], Boxp_ubnd[ 0 ] );
-      Box_lbnd[ 1 ] = MIN( Box_lbnd[ 1 ], Boxp_lbnd[ 1 ] );
-      Box_ubnd[ 1 ] = MAX( Box_ubnd[ 1 ], Boxp_ubnd[ 1 ] );
-   } else {
-      Box_lbnd[ 0 ] = Boxp_lbnd[ 0 ];
-      Box_ubnd[ 0 ] = Boxp_ubnd[ 0 ];
-      Box_lbnd[ 1 ] = Boxp_lbnd[ 1 ];
-      Box_ubnd[ 1 ] = Boxp_ubnd[ 1 ];
-   }
-
-/* Return. */
-   return;
-
-}
-
-static void UpdateConcat( float *xbn, float *ybn, float ux, float uy,
-                          float rx, float ry, float *x, float *y,
-                          float x0, float y0, float *alpha_lo, 
-                          float *alpha_hi, float *beta_lo, float *beta_hi, 
-                          int *status ){
-
-/*
-*  Name:
-*     UpdateConcat
-
-*  Purpose:
-*     Update the concatenation point for a text string in preparation for
-*     appending another string.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void UpdateConcat( float *xbn, float *ybn, float ux, float uy, 
-*                        float rx, float ry, float *x, float *y,
-*                        float x0, float y0, float *alpha_lo, float *alpha_hi,
-*                        float *beta_lo, float *beta_hi, int *status )
-
-*  Description:
-*     This function modifies the supplied concatenation point (x,y) by moving
-*     it to the right along the baseline of the text by an amount equal
-*     to the width of the supplied sub-string bounding box. It also updates 
-*     the supplied total bounding box so that it includes the supplied
-*     sub-string bounding box.
-
-*  Parameters:
-*     xbn
-*        Pointer to an array holding the x coord at the four corners of
-*        the sub-string bounding box.
-*     ybn
-*        Pointer to an array holding the y coord at the four corners of
-*        the sub-string bounding box.
-*     ux
-*        The x component of the up-vector for the text, in graphics coords.
-*        The length of this vector should be equal to the height of normal 
-*        text drawn with this up-vector.
-*     uy
-*        The y component of the up-vector for the text. See "ux".
-*     rx
-*        The x component of the right-vector for the text. The length of this 
-*        vector should be equal to the height of normal text drawn with the 
-*        supplied up-vector.
-*     ry
-*        The y component of the right-vector for the text. see "rx".
-*     x
-*        Pointer to a float holding the x coord of the concatenation point 
-*        of the text just drawn. This is changed on exit so that the next
-*        string will be appended to the end of the text just drawn.
-*     y
-*        Pointer to a float holding the y coord of the concatenation point 
-*        of the text just drawn. This is changed on exit so that the next
-*        string will be appended to the end of the text just drawn.
-*     x0
-*        The X coord at the left end of the baseline of the total string.
-*     y0
-*        The Y coord at the left end of the baseline of the total string.
-*     alpha_lo
-*        Pointer to a double holding a value which gives the position of the 
-*        bottom edge of the total bounding box. The value is such that
-*        (x0,y0) + alpha_lo*(ux,uy) is a point on the bottom edge of the
-*        total bounding box. The returned value is updated so that the
-*        total bounding box includes the supplied sub-string bounding box.
-*     alpha_hi
-*        Pointer to a double holding a value which gives the position of the 
-*        top edge of the total bounding box. The value is such that
-*        (x0,y0) + alpha_hi*(ux,uy) is a point on the top edge of the
-*        total bounding box. The returned value is updated so that the
-*        total bounding box includes the supplied sub-string bounding box.
-*     beta_lo
-*        Pointer to a double holding a value which gives the position of the 
-*        left edge of the total bounding box. The value is such that
-*        (x0,y0) + beta_lo*(rx,ry) is a point on the left edge of the
-*        total bounding box. The returned value is updated so that the
-*        total bounding box includes the supplied sub-string bounding box.
-*     beta_hi
-*        Pointer to a double holding a value which gives the position of the 
-*        right edge of the total bounding box. The value is such that
-*        (x0,y0) + beta_hi*(rx,ry) is a point on the right edge of the
-*        total bounding box. The returned value is updated so that the
-*        total bounding box includes the supplied sub-string bounding box.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   float ahi;
-   float alo;
-   float alpha;
-   float beta;
-   float bhi;
-   float blo;
-   float denom;
-   float dx;
-   float dy;
-   float xc;
-   float yc;
-   int ic;        
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check the supplied up and right vectors are not parallel. */
-   denom = ux*ry - uy*rx;
-   if( denom != 0.0 ) {
-
-/* Get the coords at the centre of the sub-string bounding box. */
-      xc = ( xbn[ 0 ] + xbn[ 1 ] + xbn[ 2 ] + xbn[ 3 ] )/4.0;
-      yc = ( ybn[ 0 ] + ybn[ 1 ] + ybn[ 2 ] + ybn[ 3 ] )/4.0;
-
-/* For each of the 4 corners of the sub-string bounding box, we consider the 
-   vector from the centre of the bounding box to the corner. We want to express
-   this vector, vx, as a sum of a vector in the up direction and a vector 
-   in the right direction:
-
-      vx = alpha*ux + beta+rx
-      vy = alpha*uy + beta+ry
-
-   where alpha and beta are constants which are different for each
-   corner vector. We also want to find the minimum and maximum alpha and
-   beta covered by the box. First initialise the limits. */
-      alo = 0.0;
-      ahi = 0.0;
-      blo = 0.0;
-      bhi = 0.0;
-
-/* Now find alpha and beta for each of the four corners. */
-      for( ic = 0; ic < 4; ic++ ) {
-         dx = xbn[ ic ] - xc;
-         dy = ybn[ ic ] - yc;
-         alpha = ( dx*ry - dy*rx ) /denom;
-         beta = ( dy*ux - dx*uy ) /denom;
-
-/* Extend the bounds in alpha and beta. */
-         if( alpha < alo ) alo = alpha;                  
-         if( alpha > ahi ) ahi = alpha;                  
-         if( beta < blo ) blo = beta;
-         if( beta > bhi ) bhi = beta;
-
-/* The bottom left corner has negative values for both alpha and beta.
-   Commence the process of updating the concatenation point by subtracting 
-   off the coordinates at the bottom left corner. For zero height bounding
-   boxes (such as may be produced if the text is completely blank), the
-   "alpha" value should be zero, but may be slightly non-zero due to
-   rounding errors. Allow for this (assuming non-blank text will always
-   produce a boundiong box that is at least 1.0E-4 of the up vector in
-   height). We do the same for bounding box width (although zero width
-   boxes will probably not occur). */
-         if( alpha < 1.0E-4 ) {      
-            if( beta < 1.0E-4 ) {      
-               *x -= xbn[ ic ];
-               *y -= ybn[ ic ];
-
-/* The bottom right corner has negative alpha and positive beta. Complete
-   the process of updating the concatenation point by adding on the 
-   coordinates at the bottom right corner. */
-            } else if( beta > -1.0E-4 ) {
-               *x += xbn[ ic ];
-               *y += ybn[ ic ];
-            }
-         }
-      }
-
-/* Also express the vector from (x0,y0) to (xc,yc) as a sum of a vector 
-   in the up direction and a vector in the right direction:
-
-      xc - x0 = alpha*ux + beta*rx
-      yc - y0 = alpha*uy + beta*ry
-
-   Find alpha and beta. */
-
-      dx = xc - x0;
-      dy = yc - y0;
-      alpha = ( dx*ry - dy*rx ) /denom;
-      beta = ( dy*ux - dx*uy ) /denom;
-
-/* We can now express the vector from (x0,y0) to each of the 4 corners as
-   a sum of alpha*up and beta*right. Form the bounds of the sub-string in 
-   terms of up-vectors and right vectors from (x0,y0) instead of from the
-   centre of the box. */
-      alo += alpha;
-      ahi += alpha;
-      blo += beta;
-      bhi += beta;
-
-/* Extend the supplied alpha and beta bounding box to include these limits. */
-      if( alo < *alpha_lo ) *alpha_lo = alo;
-      if( ahi > *alpha_hi ) *alpha_hi = ahi;
-      if( blo < *beta_lo ) *beta_lo = blo;
-      if( bhi > *beta_hi ) *beta_hi = bhi;
-   }
-}
-
-static void Ticker( AstPlot *this, int edge, int axis, double value,
-                    double *gap, double tklen, int majtick, int save,
-                    EdgeCrossingsStatics **pstatics, const char *method, 
-                    const char *class, int *status ){
-/*
-*
-*  Name:
-*     Ticker
-
-*  Purpose:
-*     Draw edge tick marks for a given axis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void Ticker( AstPlot *this, int edge, int axis, double value,
-*                  double *gap, double tklen, int majtick, int save,
-*                  EdgeCrossingsStatics **pstatics, const char *method, 
-*                  const char *class, int *status ){
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function draws tick marks at all occurences of a given
-*     physical axis value on a given edge of the plotting area.
-
-*  Parameters:
-*     this
-*        A pointer to the Plot.
-*     edge
-*        The edge of the plotting area to be ticked. Edge 0 is the left hand 
-*        edge. Edge 1 is the top edge. Edge 2 is the right-hand edge. Edge 3 
-*        is the bottom edge. 
-*     axis
-*        The index of the axis to which "value" refers. The tick mark extends 
-*        parallel to this axis.
-*     value
-*        The physical axis value at which to place the tick mark. 
-*     gap
-*        Pointer to array of two values holding the gap between major
-*        tick marks on the two axes.
-*     tklen
-*        The length of the tick, in graphics units.
-*     majtick
-*        Non-zero if the tick mark being drawn is a major tick, and zero
-*        if it is a minor tick.
-*     save
-*        If non-zero, the tick mark position will be saved in the Plot structure.
-*     pstatics
-*        Address of a pointer to a structure holding values for variables 
-*        which were statically defined within this function prior to the 
-*        thread-safe version of AST. If the pointer is supplied as NULL,
-*        then a new structure is allocated and initialised. 
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double *cross;         /* Pointer to crossings information */
-   double *vx;            /* Pointer to next X vector component value */
-   double *vy;            /* Pointer to next Y vector component value */
-   double *x;             /* Pointer to next X value */
-   double *y;             /* Pointer to next Y value */
-   double xe;             /* X at tick end */
-   double ye;             /* Y at tick end */
-   int j;                 /* Crossing index */
-   int ncross;            /* No. of crossings of tick value and edge */
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* See where the current major tick value crosses the edge. */
-   ncross = EdgeCrossings( this, edge, axis, value, gap, &cross, pstatics, 
-                           method, class, status );
-
-/* Do nothing if the supplied axis value does not occur on the specified
-   edge of the plotting area. */
-   if( ncross ){
-
-/* Draw major tick marks at the crossings. */
-      x = cross;
-      y = cross + 1;
-      vx = cross + 2;
-      vy = cross + 3;
-
-/* Draw a tick mark at each occurence of the axis value on the specified
-   edge. */
-      for( j = 0; j < ncross; j++ ){
-
-/* Check the tick mark position and directionm are defined. */
-         if( *vx != AST__BAD && *vy != AST__BAD &&
-              *x != AST__BAD &&  *y != AST__BAD ){
-
-/* Ensure the tick mark will point into the plotting area, no matter which 
-   edge it is on. First ensure the direction vector refers to a system in
-   which X increases to the left and Y increases upwards. */
-            if( this->xrev ) *vx = -*vx;
-            if( this->yrev ) *vy = -*vy;
-
-/* If necessary reverse the vector so that it points into the plotting
-   area. How to do this depends on which edge is being ticked. */
-            if( ( edge == 0 && *vx < 0.0 ) ||   /* left-hand edge */
-                ( edge == 1 && *vy > 0.0 ) ||   /* Top edge */
-                ( edge == 2 && *vx > 0.0 ) ||   /* Right-hand edge */
-                ( edge == 3 && *vy < 0.0 ) ){   /* Bottom edge */
-
-               *vx = -*vx;
-               *vy = -*vy;
-            }
-
-/* Now ensure the direction vector refers to a the native graphics system 
-   taking account of any reversal of axes. */
-            if( this->xrev ) *vx = -*vx;
-            if( this->yrev ) *vy = -*vy;
-
-/* Do not draw the tick if the start of the tick is outside the bounds of
-   the axis it is labelling. */
-            if( ( ( edge == 1 || edge == 3 ) && 
-                   *x < this->xhi && *x > this->xlo ) ||
-                ( ( edge == 0 || edge == 2 ) && 
-                   *y < this->yhi && *y > this->ylo ) ) {
-
-/* Store the x and y graphics coords of the far end of the tick mark */
-               xe = *x + tklen*(*vx);
-               ye = *y + tklen*(*vy);
-
-/* Ensure the far end of the tick mark is within the bounds of the axis
-   it is labelling. If not, redice the length of the tick mark until it is.*/
-               if( edge == 1 || edge == 3 ) {  /* Top or bottom edge */
-                  if( xe > this->xhi ) {
-                     ye = *y + tklen*(*vy)*( this->xhi - *x )/(xe - *x );
-                     xe = this->xhi;
-                  } else if( xe < this->xlo ) {
-                     ye = *y + tklen*(*vy)*( this->xlo - *x )/(xe - *x );
-                     xe = this->xlo;
-                  }
-   
-               } else {                        /* Left or right edge */
-                  if( ye > this->yhi ) {
-                     xe = *x + tklen*(*vx)*( this->yhi - *y )/(ye - *y );
-                     ye = this->yhi;
-                  } else if( ye < this->ylo ) {
-                     xe = *x + tklen*(*vx)*( this->ylo - *y )/(ye - *y );
-                     ye = this->ylo;
-                  }
-               }
-
-/* Draw the tick mark as a straight line of the specified length. */
-               if( save ) SaveTick( this, axis, *x, *y, majtick, status );
-               if( *x != xe || *y != ye ) {
-                  Bpoly( this, (float) *x, (float) *y, method, class, status );
-                  Apoly( this, (float) xe, (float) ye, method, class, status );
-                  Opoly( this, method, class, status );
-               }
-            }
-               
-/* Move on to the next crossing. */
-            x += 4;
-            y += 4;
-            vx += 4;
-            vy += 4;
-         }
-      }
- 
-/* Free the memory holding the crossings. */
-      if( cross ) cross = (double *) astFree( (void *) cross );
-
-   }
-
-/* Return. */
-   return;
-
-}
-
-static TickInfo *TickMarks( AstPlot *this, int axis, double *cen, double *gap, 
-                            int *inval, GetTicksStatics **pstatics, 
-                            const char *method, const char *class, int *status ){
-/*
-*  Name:
-*     TickMarks
-
-*  Purpose:
-*     Obtain a list of tick mark values and labels for a single axis in a 2-D 
-*     physical coordinate Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     TickInfo *TickMarks( AstPlot *this, int axis, double *cen, double *gap, 
-*                          int *inval, GetTicksStatics **pstatics, 
-*                          const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     A set of tick marks values and corresponding formatted labels are 
-*     found for an axis which result in all adjacent labels being different, 
-*     but using the minimum number of digits of precision in the formatting.
-*     This algorithm is over-ridden if the caller has set an explicit Format
-*     string for the axis. The gap between tick marks can be specified by
-*     the caller or a default value may be found automatically.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     axis
-*        The zero-based index of the axis to use.
-*     cen
-*        Pointer to the supplied axis value at which to put a single 
-*        central tick. Other ticks will be placed evenly on either side of 
-*        this tick. If AST__BAD is provided, a value will be used which 
-*        would put a tick at an axis value of zero. The used value is
-*        returned.
-*     gap
-*        The supplied values for the gaps between ticks on the axis. If
-*        this is AST__BAD a suitable default value will be used and
-*        returned in place of the AST__BAD value.
-*     inval
-*        A pointer to a location at which to return a flag indicating if
-*        any invalid physical coordinates were encountered while deciding on 
-*        the tick values.
-*     pstatics
-*        Address of a pointer to a structure holding static data values 
-*        used within the GetTicks function. A NULL pointer should be supplied 
-*        on the first invocation (dynamic memory will then be allocated to
-*        hold ths structure). The memory is freed when a NULL value for
-*        "this" is supplied.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a TickInfo structure holding information about the tick
-*     marks (no. of major and minor ticks, the major tick mark values and
-*     labels). This structure should be freed, together with its contents,
-*     using astFree when it is no longer needed.
-
-*  Notes:
-*     -  The returned labels are NOT abbreviated to remove identical
-*     leading fields.
-*     -  This function allocates some static resources on its first
-*     invocation, which should be released when no longer needed, or when
-*     a different Plot is supplied, by calling this function with a NULL 
-*     pointer for parameter "this". All other parameters (except axis) are 
-*     ignored.
-*     -  This function assumes that the physical coordinate system is 2 
-*     dimensional, and it should not be used if this is not the case.
-*     -  An error is reported if the region containing valid physical
-*     coordinates is too small to use.
-*     -  If an error has already occurred, or if this function should fail 
-*     for any reason, then a NULL pointer is returned.
-*/
-
-/* Local Constants: */
-#define MAXFLD 10
-
-/* Local Variables: */
-   AstAxis *ax;        /* Pointer to the axis. */
-   AstFrame *frame;    /* Pointer to the current Frame in the Plot */
-   TickInfo *ret;      /* Pointer to the returned structure. */
-   char **labels;      /* Pointer to list of formatted labels */
-   char **newlabels;   /* Pointer to new list of shortened formatted labels */
-   char **oldlabels;   /* Pointer to old list of formatted labels */
-   char *fields[ MAXFLD ]; /* Pointers to starts of fields in a label */
-   char *old_format;   /* Original Format string */
-   char *used_fmt;     /* Copy of format string actually used */
-   const char *a;      /* Pointer to next character to consider */
-   const char *fmt;    /* Format string actually used */
-   double *ticks;      /* Pointer to major tick mark values */
-   double *minticks;   /* Pointer to minor tick mark values */
-   double cen0;        /* Supplied value of cen */
-   double junk;        /* Unused value */
-   double refval;      /* Value for other axis to use when normalizing */
-   double used_gap;    /* The gap size actually used */
-   int bot_digits;     /* Digits value which makes labels as short as possible */
-   int digits;         /* New Digits value */
-   int digset;         /* Did the format string fix the no. of digits to use? */
-   int fmtset;         /* Was a format set? */
-   int i;              /* Tick index. */
-   int nc[ MAXFLD ];   /* Lengths of fields in a label */
-   int nf;             /* Number of fields in a label */
-   int nmajor;         /* No. of major tick marks */
-   int nminor;         /* No. of minor tick marks */
-   int ok;             /* Are all adjacent labels different? */
-   int reset_fmt;      /* Re-instate the original state of the Format attribute? */
-   
-
-/* If a NULL pointer has been supplied for "this", release the resources
-   allocated within GetTicks, and return. */
-   if( !this ){
-      (void) GetTicks( NULL, axis, NULL, &ticks, &nmajor, &minticks, &nminor, 
-                       0, inval, &refval, pstatics, method, class, status );
-      return NULL;
-   }      
-
-/* Check the global status. */
-   if( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   ret = NULL;
-
-/* Store the supplied value of cen. */
-   cen0 = cen ? *cen : AST__BAD ;
-
-/* Get a pointer to the current Frame from the Plot. */
-   frame = astGetFrame( this, AST__CURRENT );
-
-/* Initialise a flag to indicate that all adjacent labels are different. */
-   ok = 0;
-
-/* Initialise the pointer to the list of formatted tick mark values to
-   indicate that no memory has yet been obtained. */
-   labels = NULL;
-
-/* Initialise the pointer to a copy of the used format string to indicate 
-   that no memory has yet been obtained. */
-   used_fmt = NULL;
-
-/* Get a pointer to the axis. */
-   ax = astGetAxis( frame, axis );
-
-/* See if a value has been set for the axis Format. */
-   fmtset = astTestFormat( frame, axis );
-
-/* Get an initial set of tick mark values. This also establishes defaults for 
-   LogTicks and LogLabel attributes, and so must be done before the
-   following block which uses the LogLabel attribute. */
-   used_gap = GetTicks( this, axis, cen, &ticks, &nmajor, &minticks, &nminor, 
-                        fmtset, inval, &refval, pstatics, method, class, status );
-
-/* See if exponential labels using superscript powers are required.  */
-   old_format = NULL;
-   reset_fmt = 0;
-   if( astGetLogLabel( this, axis ) && astGetEscape( this ) &&
-       GCap( this, GRF__SCALES, 1, status ) ) {
-
-/* Save a copy of the Frame's Format value, if set. It will be
-   re-instated at the end of this function. */
-      if( fmtset ) {
-         fmt = astGetFormat( frame, axis );
-         old_format = astStore( NULL, (void *) fmt, strlen(fmt) + 1 );
-      }
-
-/* Temporarily use a format of "%&g" to get "10**x" style axis labels,
-   with super-scripted "x". */
-      astSetFormat( frame, axis, "%&g" );
-
-/* Not all subclasses of Frame support this format specifier, so format a 
-   test value, and see if it has two fields, the first of which is "10".
-   If not, we cannot use log labels so re-instate the original format. */
-      nf = astFields( frame, axis, "%&g", astFormat( frame, axis, 1.0E4 ),
-                      MAXFLD, fields, nc, &junk );
-      if( nf != 2 || nc[ 0 ] != 2 || strncmp( fields[ 0 ], "10", 2 ) ) {
-         if( old_format ) {
-            astSetFormat( frame, axis, old_format );
-            old_format = astFree( old_format);
-         } else {
-            astClearFormat( frame, axis );
-         }
-
-/* If the "%&g" format is usable, note that we should reset the Format
-   back to its original state before leaving this function. */
-      } else {
-         reset_fmt = 1;
-      }
-   }
-
-/* If a value has been set for the axis Format, see if the format string 
-   contains a wildcard precision specifier ".*". If so, we are free to
-   vary the number of digits used in the label in order to produce
-   distinct labels. If no value has been set for the axis Format, we are
-   also free to vary the number of digits. */
-   digset = 0;
-   if( fmtset ) {
-      fmt = astGetFormat( frame, axis );
-      if( fmt ) {
-         digset = 1;
-         a = fmt;
-         while( (a = strchr( a, '.' )) ){
-            if( *(++a) == '*' ) {
-               digset = 0;
-               break;
-            }
-         }
-      }
-   }
-
-/* If the axis precision has been specified, either through the Format string 
-   or Digits value, or the Frame Digits value, we should use it so that the 
-   user's attempts to get a specific result are not foiled. */
-   if( digset || astTestAxisDigits( ax ) || astTestDigits( frame ) ){
-
-/* Reserve memory to hold pointers to the formatted labels. */
-      labels = (char **) astMalloc( sizeof(char *)*(size_t)nmajor );
-
-/* Format the labels. We do not check that all adjacent labels are distinct
-   in order not to foil the users choice of format. That is, "ok" is set
-   non-zero by the call to CheckLabels, even if some identical adjacent
-   labels are found. */
-      ok = CheckLabels( this, frame, axis, ticks, nmajor, 1, labels, refval, status );
-
-/* Note the format used. */
-      fmt = astGetFormat( frame, axis );
-      if( fmt ) used_fmt = (char *) astStore( used_fmt, (void *) fmt, strlen( fmt ) + 1 );
-
-/* If no precision has been specified for the axis, we need to find a
-   Digits value which gives different labels, but without using any more 
-   digits than necessary. */
-   } else if( astOK ){
-
-/* Reserve memory to hold pointers to an initial set of labels formatted
-   with the default digits value. */
-      labels = (char **) astMalloc( sizeof(char *)*(size_t)nmajor );
-
-/* Produce these default labels. */
-      CheckLabels( this, frame, axis, ticks, nmajor, 1, labels, refval, status );
-
-/* The first task is to decide what the smallest usable number of digits 
-   is. Starting at the default number of digits used above to produce the
-   default labels, we reduce the number of digits until one or more of the 
-   formatted labels *increases* in length. This can happen for instance if 
-   printf decides to include an exponent in the label. The *absolute*
-   minimum value 1. Set this first. */
-      bot_digits = 1;
-      oldlabels = labels;
-      for( digits = astGetDigits( frame ) - 1; digits > 0; digits-- ){
-         astSetAxisDigits( ax, digits );
-
-/* CheckLabels2 formats the labels with the decreased number of digits,
-   and compares them with the old labels in "labels". If any of the new labels
-   are longer than the corresponding old labels, then a null pointer is
-   returned. Otherwise, a pointer is returned to the new set of labels. */
-         newlabels = CheckLabels2( this, frame, axis, ticks, nmajor, 
-                                   oldlabels, refval, status );
-
-/* Free the old labels unless they are the orignal labels (which are
-   needed below). */
-         if( oldlabels != labels ) {
-            for( i = 0; i < nmajor; i++ ){
-               if( oldlabels[ i ] ) oldlabels[ i ] = (char *) astFree( (void *) oldlabels[ i ] );
-            }
-            oldlabels = (char **) astFree( (void *) oldlabels );
-         }
-
-/* If any of the labels got longer as a result of reducing the digits
-   value, then use the previous number of digits as the lowest possible
-   number of digits. Break out of the loop. */
-         if( !newlabels ) {
-            bot_digits = digits + 1;
-            break;
-         }
-
-/* If none of the labels got longer, we arrive here. Use the shorter labels 
-   for the next pass round this loop. */
-         oldlabels = newlabels;
-      }
-
-/* Free any remaining labels. */
-      if( oldlabels && oldlabels != labels ) {
-         for( i = 0; i < nmajor; i++ ){
-            if( oldlabels[ i ] ) oldlabels[ i ] = (char *) astFree( (void *) oldlabels[ i ] );
-         }
-         oldlabels = (char **) astFree( (void *) oldlabels );
-      }
-
-/* Now loop round increasing the number of digits in the formatted labels 
-   from the lowest usable value found above until all adjacent labels are 
-   different. An arbitrary upper limit of 1000 is used for Digits to stop it 
-   looping for ever. */    
-      for( digits = bot_digits; digits < 1000; digits++ ){
-
-/* Store the new Digits value. */
-         astSetAxisDigits( ax, digits );
-         
-/* Free memory used to hold the current set of labels. A new set will be
-   created by the following call to CheckLabels. */
-         if( labels ) {
-            for( i = 0; i < nmajor; i++ ) labels[ i ] = astFree( labels[ i ] );
-         }
-
-/* Break out of the loop if a Digits value has been found which results
-   in all adjacent labels being different. Note the format used (we know 
-   the Format attribute is currently unset, but the default Format string
-   reflects the current value of the Digits attribute). */
-         if( CheckLabels( this, frame, axis, ticks, nmajor, 0, labels, refval, status ) ) {
-            ok = 1;
-            fmt = astGetFormat( frame, axis );
-            used_fmt = (char *) astStore( NULL, (void *) fmt, strlen( fmt ) + 1 );
-            break;
-         }
-      }
-
-/* Clear the Digits value. */
-      astClearAxisDigits( ax );
-   }
-
-/* Annul the pointer to the Axis. */
-   ax = astAnnul( ax );
-
-/* Re-instate the original format specifier if required. */
-   if( reset_fmt ) {
-      if( old_format ) {
-         astSetFormat( frame, axis, old_format );
-         old_format = astFree( old_format);
-      } else {
-         astClearFormat( frame, axis );
-      }
-   } 
-
-/* If suitable labels were found... */
-   if( ok && astOK ) {
-
-/* Store the used gap size. */
-      *gap = used_gap;
-
-/* If the caller has specified the number of minor tick marks to use,
-   use the specified value rather than the value found above. */
-      if( astTestMinTick( this, axis ) ){
-         nminor = astGetMinTick( this, axis );
-      }
-
-/* Allocate memory for the returned structure. */
-      ret = (TickInfo *) astMalloc( sizeof( TickInfo ) );
-
-/* If the pointer can be used, store the information. */
-      if( astOK ){
-         ret->nmajor = nmajor;
-         ret->nminor = nminor;
-         ret->ticks = ticks;
-         ret->minticks = minticks;
-         ret->labels = labels;
-         ret->fmt = used_fmt;
-         used_fmt = NULL;
-         ret->start = NULL;
-         ret->length = NULL;
-         ret->nsect = 0;
-         ret->gap = used_gap;
-      } 
-
-/* If no suitable labels were found report an error. */
-   } else if( astOK ){
-      if( fmtset ){
-         astError( AST__PLFMT, "%s(%s): No numerical labels can be produced "
-                   "for axis %d using the supplied %s format string '%s'.", status,
-                   method, class, axis + 1, astGetClass( frame ), 
-                   astGetFormat( frame, axis ) );
-      } else {      
-         astError( AST__PLFMT, "%s(%s): No suitable format can be found to "
-                   "produce numerical labels for axis %d of a %s.", status,
-                   method, class, axis + 1, astGetClass( frame ) );
-      }
-   }
-
-/* Release any remaining resources. */
-   frame = astAnnul( frame );
-   if( used_fmt ) used_fmt = astFree( used_fmt );
-
-/* If an error has occurred, release the returned information. */
-   if( !astOK ){
-      ticks = (double *) astFree( (void *) ticks );
-      minticks = (double *) astFree( (void *) minticks );
-      if( labels ){
-         for( i = 0; i < nmajor; i++ ) {
-            labels[ i ] = (char *) astFree( (void *) labels[ i ] );
-         }
-         labels = (char **) astFree( (void *) labels );
-         if( ret ) (void ) astFree( (void *) ret->fmt );
-      }
-      ret = (TickInfo *) astFree( (void *) ret );
-   }
-
-/* Return the structure. */
-   return ret;
-
-/* Undefine local constants. */
-#undef MAXFLD
-
-}
-
-static int TraceBorder( AstPlot *this, AstMapping *map, double xlo, double xhi,
-                        double ylo, double yhi, int dim, double tol, 
-                        int edges[ 4 ], const char *method, const char *class, 
-                        int *status ) {
-/*
-*  Name:
-*     TraceBorder
-
-*  Purpose:
-*     Trace the boundary between good and bad physical coordinates through a 
-*     fine grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TraceBorder( AstPlot *this, AstMapping *map, double xlo, double xhi,
-*                      double ylo, double yhi, int dim, double tol, 
-*                      int edges[ 4 ], const char *method, const char *class, 
-*                      int *status ) {
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     A rectangular grid of points in graphics coords is created covering
-*     the region specified by (xlo,xhi,ylo,yhi), using "dim" points along
-*     each axis. This grid of points is converted into physical (WCS)
-*     coords, and a flag is associatred with each point saying whether
-*     the WCS coords are good or bad. The cells in this grid are then
-*     scanned from bottom left to top right in raster fashion (each cell
-*     has a grid point at each of its 4 corners). If a cell has a mix of 
-*     bad and good corners, the good/bad boundary must pass through it.
-*     If the grid is sufficiently fine (as defined by "tol") then this
-*     function draws a single straight line through each cell as an 
-*     approximation to the good bad boundary. This line joins the centres
-*     of the two cells edges through which the boundary passes (as
-*     indicated by the fact that one end of the edge has good WCS coords 
-*     and the other end has bad WCS coords). If the grid is not
-*     sufficiently fine to meet the "tol" requirement, then this function
-*     is invoked recursively to draw the curve through each cell through
-*     which the boundary passes.
-
-*  Parameters:
-*     this
-*        The plot.
-*     map
-*        The Graphics->WCS mapping.
-*     xlo
-*        The lower bounds on the graphics X axis of the rectangle being
-*        considered.
-*     xhi
-*        The upper bounds on the graphics X axis of the rectangle being
-*        considered.
-*     ylo
-*        The lower bounds on the graphics Y axis of the rectangle being
-*        considered.
-*     yhi
-*        The upper bounds on the graphics Y axis of the rectangle being
-*        considered.
-*     dim
-*        The number of points along one edge of the fine grid.
-*     tol
-*        The plotting tolerance. Once each cell is smaller than this
-*        distance (in graphics coords), the cell is drawn. Otherwise,
-*        this function is invoked recursively to draw the cell using a 
-*        finer grid.
-*     edges
-*        A pointer to an array of 4 int, in which will be returned
-*        flags indicating if the good/bad boundary intersects any of the 
-*        edges of the grid. These flags are stored in the order left,
-*        top, right, bottom.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;
-   AstPointSet *pset2;
-   double **ptr2;
-   double *px1;
-   double *px2;
-   double *py1;
-   double *py2;
-   double cxhi;
-   double cxlo;
-   double cyhi;
-   double cylo;
-   double dx;
-   double dy;
-   float xc;
-   float yc;
-   int *bndry;
-   int *drawn;
-   int bad1;
-   int bad2;
-   int bad3;
-   int bad4;
-   int icell;
-   int icol;
-   int irow;
-   int lastcell;
-   int ncell;
-   int recurse;
-   int result;
-   int sedges[ 4 ];
-   int totcells;
-
-/* Initialise returned edge flags */
-   edges[ 0 ] = 0;
-   edges[ 1 ] = 0;
-   edges[ 2 ] = 0;
-   edges[ 3 ] = 0;
-
-/* Initialise the returned flag to indicate that no bad regions were
-   found. */
-   result = 0;
-
-/* Check the global status. */
-   if ( !astOK ) return result;
-
-/* Create a grid of graphics and WCS coords covering the specified region
-   of graphics coords. "ptr2" is used to access the WCS coords at each
-   point in the grid. */
-   ptr2 = MakeGrid( this, NULL, map, 0, dim, xlo, xhi, ylo, yhi,
-                    2, &pset1, &pset2, 0, method, class, status );
-
-/* The number of cells along each axis of the grid is one less than the
-   number of points. Also get the number of cells in the whole grid. */
-   ncell = dim - 1;
-   totcells = ncell*ncell;
-
-/* Store the dimensions of each cell in graphics coords. */
-   dx = ( xhi - xlo )/ncell;
-   dy = ( yhi - ylo )/ncell;
-
-/* Set a flag indicating if the cell size is larger than the required
-   plotting tolerance. If so, we will call this function recursively to
-   draw the curve using a finer grid. */
-   recurse = ( dx > tol || dy > tol );
-
-/* If we have not yet reached the plotting tolerance, allocate work arrays 
-   with one element for each cell in the grid. */
-   if( recurse ) {
-      bndry = astMalloc( sizeof( int )*totcells );
-      drawn = astMalloc( sizeof( int )*totcells );
-   } else {
-      bndry = NULL;
-      drawn = NULL;
-   }
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* If required, initialise work arrays to hold zero. */
-      if( recurse ) {
-
-/* Initialise "boundary passes through cell" flags to zero. */
-         memset( bndry, 0, sizeof( int )*totcells );
-
-/* Initialise "cell has been drawn" flags to zero. */
-         memset( drawn, 0, sizeof( int )*totcells );
-      }
-
-/* Store the Y graphics coords at the bottom and top of the first row. */
-      cylo = ylo;
-      cyhi = ylo + dy;
-
-/* Store pointers to the physical coords at the bottom left corner of the
-   first cell in the first row. */
-      px1 = ptr2[ 0 ];
-      py1 = ptr2[ 1 ];
-
-/* Store pointers to the physical coords at the top left corner of the
-   first cell in the first row. */
-      px2 = px1 + dim;
-      py2 = py1 + dim;
-
-/* Store the index of the last cell in a row or column. */
-      lastcell = ncell - 1;
-
-/* Initialise index of next cell. */
-      icell = 0;
-
-/* Loop round every row of cells in this grid. */
-      for( irow = 0; irow < ncell; irow++ ) {
-
-/* See if the physical coords are bad at the bottom left corner of the
-   first cell in this row. At the same time, increment the pointers so
-   they refer to the bottom right corner of the first cell in this row. */
-         bad1 = ( *px1 == AST__BAD || *py1 == AST__BAD );
-
-/* Increment the pointers. Do not do it in the above "if" statement since
-   the or (!!) means that the second expression may never be evaluated. */
-         px1++;
-         py1++;
-
-/* See if the physical coords are bad at the top left corner of the
-   first cell in this row. At the same time, increment the pointers so
-   they refer to the top right corner of the first cell in this row. */
-         bad2 = ( *px2 == AST__BAD || *py2 == AST__BAD );
-         px2++;
-         py2++;
-
-/* Loop round every cell in the current row of cells. */
-         for( icol = 0; icol < ncell; icol++, icell++ ) {
-
-/* See if the physical coords are bad at the bottom right corner of the
-   current cell in this row. At the same time, increment the pointers so
-   they refer to the bottom right corner of the next cell in this row. */
-            bad3 = ( *px1 == AST__BAD || *py1 == AST__BAD );
-            px1++;
-            py1++;
-
-/* See if the physical coords are bad at the top right corner of the
-   current cell in this row. At the same time, increment the pointers so
-   they refer to the top right corner of the next cell in this row. */
-            bad4 = ( *px2 == AST__BAD || *py2 == AST__BAD );
-            px2++;
-            py2++;
-
-/* Set the returned flag non-zero if any invalidpositions are found. */
-            if( bad1 || bad2 || bad3 || bad4 ) result = 1;
-
-/* If there are a mixture of good and bad corners, the good/bad boundary
-   must pass through the current cell. */
-            if( bad2 != bad1 || bad3 != bad1 || bad4 != bad1 ) {
-
-/* If we have not yet reached the required plotting tolerance, set a flag 
-   to indicate that the boundary should be plotted through this cell 
-   using a recirsive call to this function. */
-               if( recurse ) {
-                  bndry[ icell ] = 1;
-
-/* If we have reached the required plotting tolerance, draw the boundary
-   as a straight line between the centres of the edges through which the
-   boundary enteres and leaves the current cell. */
-               } else {
-
-/* Get the upper and lower graphics X bounds of the current cell. */
-                  cxlo = xlo + icol*dx; 
-                  cxhi = cxlo + dx;
-
-/* If an edge of the current cell has good coords at one end but bad
-   coords at the other, the boundary is assumed to pass through the edge
-   at its centre. Normally, we expect only two cell edges to have this
-   property (i.e the boundary enters the cell through one edge and leaves
-   through the other). However, sometimes all four edges may have this
-   property. In this case, two sections of the boundary must pass through
-   the cell, and there is no way of knowing which edges connect together
-   (short of further recursion), and we arbitrarily decide to join opposite
-   edges. */
-                  if( bad1 == bad4 && bad2 == bad3 ) {
-
-/* Draw a horizontal line through the cell centre */
-                     yc = 0.5*( cylo + cyhi );
-                     Bpoly( this, (float) cxlo, yc, method, class, status );
-                     Apoly( this, (float) cxhi, yc, method, class, status );
-
-/* Draw a vertical line through the cell centre */
-                     xc = 0.5*( cxlo + cxhi );
-                     Bpoly( this, xc, (float) cylo, method, class, status );
-                     Apoly( this, xc, (float) cyhi, method, class, status );
-
-/* If the boundary passes through the left hand edge, it must also have
-   passed through the right edge of the previous cell in the row (unless
-   this is the first cell in the row), so we do not need to begin a new
-   polyline (we can just extend the existing polyline). */
-                  } else if( bad1 != bad2 ) {
-
-/* If this is the first cell in the row, begin a new polyline. */
-                     yc = 0.5*( cylo + cyhi );
-                     if( icol == 0 ) Bpoly( this, (float) cxlo, yc, method, class, status );
-
-/* and through the top edge, draw a line between the centres of the left
-   and top edges. */
-                     if( bad2 != bad4 ) {
-                        xc = 0.5*( cxlo + cxhi );
-                        Apoly( this, xc, (float) cyhi, method, class, status );
-
-/* or through the right edge, draw a line between the centres of the left
-   and right edges. */
-                     } else if( bad3 != bad4 ) {
-                        Apoly( this, (float) cxhi, yc, method, class, status );
-
-/* Otherwise, draw a line between the centres of the left and bottom edges. */
-                     } else {
-                        xc = 0.5*( cxlo + cxhi );
-                        Apoly( this, xc, (float) cylo, method, class, status );
-                     }
-
-/* If the boundary passes through the top edge (we do not need to check
-   the left edge because that was done above)... */
-                  } else if( bad4 != bad2 ) {
-
-/* and through the right edge, draw a line between the centres of the top
-   and right edges. */
-                     if( bad3 != bad4 ) {
-                        xc = 0.5*( cxlo + cxhi );
-                        yc = 0.5*( cylo + cyhi );
-                        Bpoly( this, xc, (float) cyhi, method, class, status );
-                        Apoly( this, (float) cxhi, yc, method, class, status );
-
-/* Otherwise, draw a line between the centres of the top and bottom edges. */
-                     } else {
-                        xc = 0.5*( cxlo + cxhi );
-                        Bpoly( this, xc, (float) cyhi, method, class, status );
-                        Apoly( this, xc, (float) cylo, method, class, status );
-                     }
-
-/* If the boundary passes through the right edge it must also pass
-   throught the bottom edge since all other combinations will have been
-   trapped above. */
-                  } else {
-                     xc = 0.5*( cxlo + cxhi );
-                     yc = 0.5*( cylo + cyhi );
-                     Bpoly( this, xc, (float) cylo, method, class, status );
-                     Apoly( this, (float) cxhi, yc, method, class, status );
-                  }
-
-/* If the current cell is on the edge of the grid, set flags in the
-   returned "edges" array to indicate that the boundary passes out of 
-   the grid on the appropriate edge. */
-                  if( icol == 0 ) {
-                     if( bad1 != bad2 ) edges[ 0 ] = 1;  /* Left edge */
-                  } else if( icol == lastcell ) {
-                     if( bad3 != bad4 ) edges[ 2 ] = 1;  /* Right edge */
-                  }
-
-                  if( irow == 0 ) {
-                     if( bad1 != bad3 ) edges[ 3 ] = 1;  /* Bottom edge */
-                  } else if( irow == lastcell ) {
-                     if( bad2 != bad4 ) edges[ 1 ] = 1;  /* Top edge */
-                  }
-               } 
-            }
-
-/* The flags for the right hand corners of the current cell can be
-   re-used as the flags for the left hand corners of the next cell. */
-            bad1 = bad3;
-            bad2 = bad4;
-         }
-
-/* Store the Y graphics coords at the bottom and top of the next row. */
-         cylo = cyhi;
-         cyhi = cylo + dy;
-      }
-
-/* If we have not yet reached the required plotting tolerance, call this
-   function recursively to draw the boundary through the cells identified
-   above. On each pass through this loop, we may discover more boundary
-   cells in the grid, in addition to those found above. Continue looping
-   until no further boundary cells are found. */
-      while( recurse ) {
-
-/* Assume that the current pass though this loop will result in all boundary
-   cells being draw, in which case we can then leave the loop. */
-         recurse = 0;
-
-/* Store the Y graphics coords at the bottom and top of the first row. */
-         cylo = ylo;
-         cyhi = ylo + dy;
-
-/* Initialise the cell index */
-         icell = 0;
-
-/* Loop round every row of cells in this grid. */
-         for( irow = 0; irow < ncell; irow++ ) {
-
-/* Loop round every cell in the current row of cells. */
-            for( icol = 0; icol < ncell; icol++, icell++ ) {
-
-/* If the good/bad boundary passes through the current cell we need to
-   draw it unless it has already been drawn. */
-               if( bndry[ icell ] && ! drawn[ icell ] ){
-
-/* Get the upper and lower graphics X bounds of the current cell. */
-                  cxlo = xlo + icol*dx; 
-                  cxhi = cxlo + dx;
-
-/* Call this function recursively to draw the boundary through the current 
-   cell, setting the returned flag non-zero if any bad positions are found. */
-                  if( TraceBorder( this, map, cxlo, cxhi, cylo, cyhi, 3, tol, 
-                                   sedges, method, class, status ) ) result = 1;
-
-/* The boundary may have passed out of the current cell and then back
-   into the cell on the same edge (i.e. a small loop that pokes out into
-   a neighbouring cell). Such neighbouring cells may not have been
-   identified by the earlier section of this function, so we now ensure
-   that any such cells are flagged as boundary cells. */
-
-/* If the boundary passed out of the left edge of the cell... */
-                  if( sedges[ 0 ] ) {
-
-/* If the current cell is at the left edge of the grid, indicate that the
-   boundary passes out of the left edge of the grid. */
-                     if( icol == 0 ) {
-                        edges[ 0 ] = 1;  /* Left edge */
-
-/* Otherwise, if the left hand neighbour of the current cell is not
-   flagged as a boundary cell, flag it now and indicate that another pass
-   though the loop is needed to draw the extra cell. */
-                     } else if( ! bndry[ icell - 1 ] ) { 
-                        bndry[ icell - 1 ] = 1;
-                        recurse = 1;
-                     }
-                  }
-
-/* If the boundary passed out of the top edge of the cell... */
-                  if( sedges[ 1 ] ) {
-
-/* If the current cell is at the top edge of the grid, indicate that the
-   boundary passes out of the top edge of the grid. */
-                     if( irow == lastcell ) {
-                        edges[ 1 ] = 1;  /* Top edge */
-
-/* Otherwise, ensure that the upper neighbour of the current cell is
-   flagged as a boundary cell. */
-                     } else {
-                        bndry[ icell + ncell ] = 1;
-                     }
-                  }
-
-/* If the boundary passed out of the right edge of the cell... */
-                  if( sedges[ 2 ] ) {
-
-/* If the current cell is at the right edge of the grid, indicate that the
-   boundary passes out of the right edge of the grid. */
-                     if( icol == lastcell ) {
-                        edges[ 2 ] = 1;  /* Right edge */
-
-/* Otherwise, ensure that the right hand neighbour of the current cell is
-   flagged as a boundary cell. */
-                     } else {
-                        bndry[ icell + 1 ] = 1;
-                     }
-                  }
-
-/* If the boundary passed out of the bottom edge of the cell... */
-                  if( sedges[ 3 ] ) {
-
-/* If the current cell is at the bottom edge of the grid, indicate that the
-   boundary passes out of the bottom edge of the grid. */
-                     if( irow == 0 ) {
-                        edges[ 3 ] = 1;  /* Bottom edge */
-
-/* Otherwise, if the lower neighbour of the current cell is not flagged 
-   as a boundary cell, flag it now and indicate that another pass though 
-   the loop is needed to draw the extra cell. */
-                     } else if( ! bndry[ icell - ncell ] ) { 
-                        bndry[ icell - ncell ] = 1;
-                        recurse = 1;
-                     }
-                  }
-
-/* Indicate this cell has been drawn. */
-                  drawn[ icell ] = 1;
-               }
-            }
-
-/* Store the Y graphics coords at the bottom and top of the next row. */
-            cylo += dy;
-            cyhi = cylo + dy;
-         }
-      }
-   }
-
-/* Free resources */
-   bndry = astFree( bndry );
-   drawn = astFree( drawn );
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Trans( AstPlot *this, AstFrame *frm, AstMapping *mapping, 
-                           AstPointSet *in, int forward, AstPointSet *out, 
-                           int norm, const char *method, const char *class, int *status ) {
-/*
-*  Name:
-*     Trans
-
-*  Purpose:
-*     Use a Mapping to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPointSet *Trans( AstPlot *this, AstFrame *frm, AstMapping *mapping, 
-*                         AstPointSet *in, int forward, AstPointSet *out,
-*                         int norm, const char *method, const char *class )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This performs the same task as the protected method astTransform
-*     but uses the astTransform method for the supplied Mapping instead 
-*     the parent method for the Plot. This allows the Mapping to be
-*     extracted from the Plot using astGetMapping once, rather than every 
-*     time a mapping is performed.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot (only used to access clipping attributes and
-*        other methods).
-*     frm
-*        Pointer to the Current Frame in the Plot. If this is NULL, then
-*        a pointer for the Current Frame is found within this function if
-*        required (i.e. if "forward" and "norm" are both non-zero).
-*     mapping
-*        Pointer to the Mapping extracted from the Plot. If this is NULL, then
-*        a pointer for the base->current Mapping is found within this function.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate 
-*        transformation should be applied while a zero value requests the 
-*        inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     norm
-*        The normalisation of returned physical coordinates is only done
-*        if "norm" is non-zero. Otherwise they are left as returned by
-*        astTransform.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  Clipping is only performed as set up using the astClip method. 
-*     In particular, the clipping specified by the arguments to the astPlot
-*     constructor function is NOT performed. This is done in order to improve
-*     the efficiency of the curve drawing method astGridLine.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the Plot being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstFrame *cfr;                /* Pointer to the Current Frame */
-   AstFrame *fr;                 /* Pointer to the clipping Frame */
-   AstMapping *map;              /* Pointer to output->clip mapping */
-   AstPointSet *clip;            /* Positions in clipping Frame */
-   AstPointSet *result;          /* Positions in output Frame */
-   double **ptr_clip;            /* Pointer to clipping Frame data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *work;                 /* Pointer to array holding an o/p position */
-   double axval;                 /* Axis value in clipping frame */
-   double lbnd;                  /* Lower bound on current clipping axis */
-   double ubnd;                  /* Upper bound on current clipping axis */
-   int axin;                     /* Is the axis value within the allowed range? */
-   int clip_norm;                /* Normalise the clipping positions? */
-   int clip_or;                  /* Combine axes using a logical OR? */
-   int clipit;                   /* Should the current point be clipped? */
-   int i;                        /* Point index */
-   int iframe;                   /* Validated index for clipping Frame */
-   int j;                        /* Axis index */
-   int naxes;                    /* Number of axes in clipping Frame */
-   int ncoord_out;               /* Number of coordinates per output point */
-   int npoint;                   /* Number of points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Ensure we have a Mapping */
-   if( !mapping ) mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent FrameSet class. */
-   result = astTransform( mapping, in, forward, out );
-
-/* Get the dimensions of the returned data, and an array of pointers to 
-   the axis values. */
-   ncoord_out = astGetNcoord( result );
-   npoint = astGetNpoint( result );
-   ptr_out = astGetPoints( result );
-   
-/* If we have done a forward mapping, we now normalise the returned physical 
-   positions if required using the astNorm method for the supplied object. */
-   if( forward && norm ){
-
-/* If no Frame was supplied, get a pointer to the Current Frame. Otherwise,
-   use the supplied pointer. */
-      if( !frm ) {
-         cfr = astGetFrame( this, AST__CURRENT );
-      } else {
-         cfr = frm;
-      }      
-
-/* Get work space to hold a single positions. */
-      work = (double *) astMalloc( sizeof(double)*(size_t)ncoord_out );
-
-/* Check the work space and axis pointers can be used. */
-      if( astOK ){
-
-/* Now loop through every position, copying the axis values to the work array, 
-   normalising them using astNorm, and copying them back to the returned 
-   PointSet. */
-         for( i = 0; i < npoint; i++ ){
-            for( j = 0; j < ncoord_out; j++ ) work[ j ] = ptr_out[ j ][ i ];
-            astNorm( cfr, work );
-            for( j = 0; j < ncoord_out; j++ ) ptr_out[ j ][ i ] = work[ j ];
-         }
-      }
-      
-/* Free the work space. */
-      work = (double *) astFree( (void *) work );
-
-/* Annul the pointer to the Current Frame if it was obtained in this
-   function. */
-      if( !frm ) cfr = astAnnul( cfr );
-
-   }
-
-/* Clipping is only performed if the bounds of a clipping region are
-   available for both axes. */
-   if( this->clip_lbnd && this->clip_ubnd ){
-
-/* Validate and translate the index of the clipping Frame. */
-      iframe = astValidateFrameIndex( this, this->clip_frame, method );
-
-/* Obtain a pointer to the clipping Frame and determine how many axes it
-   has. */ 
-      fr = astGetFrame( this, iframe );
-      naxes = astGetNaxes( fr );
-
-/* Report an error if the number of bounds does not equal the number of
-   axes in the clipping Frame. */
-      if( astOK && naxes != this->clip_axes ){
-         astError( AST__CLPAX, "%s%s): The supplied %s specifies clipping "
-                   "in %d dimensions, but the clipping Frame ('%s') has "
-                   "%d axes.", status, method, class, class, this->clip_axes, 
-                   astGetTitle( fr ), naxes );
-      }
-
-/* Set a flag indicating if the coordinates in the clipping frame need to
-   be normalised. */
-      clip_norm = 1;
-
-/* We now obtain a pointer to a PointSet holding the corresponding
-   coordinates in the clipping frame.  If the clipping frame is the
-   base frame, then take a clone of the PointSet holding base frame 
-   coordinates. */
-      if( iframe == astGetBase( this ) ){
-         if( forward ){
-            clip = astClone( in );
-         } else {
-            clip = astClone( result );
-         }
-
-/* If the clipping frame is the current frame, then take a clone of the 
-   PointSet holding current coordinates. Note, if the returned physical
-   coordinates have already been normalised, we don't need to normalise
-   the clipping coordinates. */
-      } else if( iframe == astGetCurrent( this ) ){
-         if( forward ){
-            clip = astClone( result );
-            if( norm ) clip_norm = 0;
-         } else {
-            clip = astClone( in );
-         }
-
-/* If the clipping Frame is neither the base nor the current Frame, we need
-   to map the returned normalised points into the clipping Frame. */
-      } else {
-         if( forward ){
-            map = astGetMapping( this, AST__CURRENT, iframe );
-         } else {
-            map = astGetMapping( this, AST__BASE, iframe );
-         }
-         clip = astTransform( map, result, 1, NULL );
-         map = astAnnul( map );
-       }
-
-/* Get a pointer to the coordinate data in the clipping Frame. */ 
-      ptr_clip = astGetPoints( clip );
-
-/* If necessary, normalise the coordinates in the clipping frame. */
-      if( clip_norm ){
-
-/* Get work space to hold a single position. */
-         work = (double *) astMalloc( sizeof(double)*(size_t)naxes );
-
-/* Check the work space and axis pointers can be used. */
-         if( astOK ){
-
-/* Now loop through every position, copying the axis values to the work array, 
-   normalising them using astNorm, and copying them back to the clipping
-   PointSet. */
-            for( i = 0; i < npoint; i++ ){
-               for( j = 0; j < naxes; j++ ) work[ j ] = ptr_clip[ j ][ i ];
-               astNorm( fr, work );
-               for( j = 0; j < naxes; j++ ) ptr_clip[ j ][ i ] = work[ j ];
-            }
-         }
-      
-/* Free the work space. */
-         work = (double *) astFree( (void *) work );
-
-      }
-
-/* If all has gone ok, we will now clip the returned points. */
-      if( astOK ){
-
-/* Get the logical operation to be used to determine if a point is to be
-   clipped. A zero value means that a logical AND is to be performed
-   between the axes (i.e. all axes must be within the supplied bounds for a 
-   point to be retained). A non-zero value means that a logical OR is to be 
-   performed between the axes (i.e. only a single axis need be within the 
-   supplied bounds for a point to be retained). */
-         clip_or = astGetClipOp( this );
-
-/* Do each point in turn. */
-         for( j = 0; j < npoint; j++ ){
-
-/* If all axes must fall within the supplied range to avoid the point being 
-   clipped (i.e. if clip_or is 0), then assume initially that the point 
-   is not to be clipped. This will be toggled as soon as the first 
-   out-of-bounds point is found. If, on the other hand, the point is
-   only clipped if all axis values are out-of-bounds, then assume
-   initially that the point is to be clipped. This will be toggled as
-   soon as the first axis value is found which is not out-of-bounds. */
-            clipit = clip_or;
-
-/* Check each axis value for the current point. */
-            for( i = 0; i < naxes; i++ ){
-               axval =  ptr_clip[ i ][ j ];
-
-/* Chekc that it is not bad. */
-               if( axval != AST__BAD ){
-
-/* Store the bounds of the clipping volume on this axis. */
-                  lbnd = this->clip_lbnd[ i ];
-                  ubnd = this->clip_ubnd[ i ];
-
-/* Set a flag indicating if the axis value is within the specified range.
-   If the supplied bounds are reversed, they specify the range to exclude,
-   otherwise they specify the range to include.  */
-                  if( lbnd <= ubnd ){
-                     axin = ( axval >= lbnd && axval <= ubnd );
-                  } else {
-                     axin = ( axval < ubnd || axval > lbnd );
-                  }   
-   
-/* If the point is within the range and only one such point is
-   required to avoid the point being clipped, indicate that the point
-   should not be clipped, and leave the loop. */
-                  if( axin && clip_or ){ 
-                     clipit = 0;
-                     break;
-
-/* If the point is not within the range and we only one such point is
-   required to cause the point to be clipped, indicate that the point
-   should be clipped, and leave the loop. */
-                  } else if( !axin && !clip_or ){
-                     clipit = 1;
-                     break;
-                  }
-
-/* Clip the point if any axis value is bad in the clipping Frame. */      
-               } else {
-                  clipit = 1;
-                  break;
-               }
-
-            }
-
-/* If the point is to be clipped, set all returned axis values bad. */
-            if( clipit ) {
-               for( i = 0; i < naxes; i++ ) ptr_out[ i ][ j ] = AST__BAD;
-            }
-
-         }
-
-      }
-
-/* Annul the PointSet holding clipping Frame positions. */
-      if( clip ) clip = astAnnul( clip );
-
-/* Annul the clipping Frame pointer. */
-      fr = astAnnul( fr );
-
-    }
-
-/* If an error has occurred, annul the result. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Use a Plot to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out )
-
-*  Class Membership:
-*     Plot member function (over-rides the astTransform protected
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function takes a Plot and a set of points encapsulated in a
-*     PointSet and transforms the points from graphics coordinates to 
-*     physical coordinates (in the forward direction). If the returned 
-*     positions are physical coordinates (i.e. if a forward mapping is 
-*     performed) they are normalised using the astNorm method of the supplied
-*     Plot. The returned axis values are set to AST__BAD for any positions 
-*     which are outside the clipping volume set up by the astClip method.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate 
-*        transformation should be applied while a zero value requests the 
-*        inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  Clipping is only performed as set up using the astClip method. 
-*     In particular, the clipping specified by the arguments to the astPlot
-*     constructor function is NOT performed. This is done in order to improve
-*     the efficiency of the curve drawing method astGridLine.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the Plot being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstMapping *map;              /* Pointer to the mapping */
-   AstPointSet *result;          /* Positions in output Frame */
-   AstPlot *plot;                /* The Plot */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the Plot. */
-   plot = (AstPlot *) this;
-
-/* Get the Mapping from the base to the current Frame. */
-   map = astGetMapping( plot, AST__BASE, AST__CURRENT );
-
-/* Do the transformation. */
-   result = Trans( plot, NULL, map, in, forward, out, 1, "astTransform",
-                   astGetClass( this ), status );
-
-/* Annul the mapping. */
-   map = astAnnul( map );
-
-/* If an error has occurred, annul the result. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static double Typical( int n, double *value, double lolim, double hilim,
-                       double *width, int *status ) {
-/*
-*  Name:
-*     Typical
-
-*  Purpose:
-*     Return a typical value within the supplied array of values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     double Typical( int n, double *value, double lolim, double hilim,
-*                     double *width, int *status  )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This function locates the approximate mode of the supplied values,
-*     and returns one of the supplied values which is close to the modal
-*     value. Values outside an indicated range are ignored.
-
-*  Parameters:
-*     n
-*        The number of data values.
-*     value
-*        A pointer to an array of "n" values.
-*     lolim
-*        Values less than lolim are ignored. Supply as -DBL_MAX if there
-*        is no lower limit.
-*     hilim
-*        Values greater than hilim are ignored. Supply as DBL_MAX if there
-*        is no upper limit.
-*     width
-*        Pointer to a double in which to return the width (i,e, data range)
-*        of the non-empty histogram cells. This is an estimate of the
-*        range of used values in the supplied array. NULL may be supplied.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A typical value from the supplied array. AST__BAD is returned only
-*     if an error has occurred, or if all the supplied values are AST__BAD
-*     or outside the specified range.
-
-*/
-
-/* Local Variables: */
-   double *a;             /* Pointer to next value */
-   double cnt;            /* Modified count */
-   double delta;          /* Bin size */
-   double maxval;         /* Maximum supplied value */
-   double mean;           /* Mean supplied value */
-   double minval;         /* Minimum supplied value */
-   double result;         /* The returned value. */
-   double w0;             /* Rate of increase of weight with dist from edge */
-   double w1;             /* Weight for left edge */
-   double w2;             /* Weight for right edge */
-   double w;              /* Weight for this bin */
-   int *hist;             /* Pointer to first cell of histogram array */
-   int i;                 /* Loop count */
-   int ibin;              /* Bin index */
-   int maxcnt;            /* Maximum no. of values in any bin */
-   int modify;            /* Modify the effect of the edge bins? */
-   int nbin;              /* No. of bins in histogram */
-   int nc;                /* Total number of points in histogram */
-   int ngood;             /* No. of good values supplied */
-   int nonemp;            /* No. of non-empty bins in hstogram */
-
-/* Initialise. */
-   result = AST__BAD;
-   if( width ) *width = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   ibin = 0;
-
-/* Find the minimum and maximum value in the supplied array, which are
-   also within the supplied limits. Also store the first good value 
-   encountered in "result". */
-   minval = DBL_MAX;
-   maxval = -DBL_MAX;
-   a = value;
-   ngood = 0;
-   for( i = 0; i < n; i++, a++ ) {
-      if( *a != AST__BAD ) {
-         if( *a >= lolim && *a <= hilim ) {
-            if( *a < minval ) minval = *a;
-            if( *a > maxval ) maxval = *a;
-            if( ngood == 0 ) result = *a;
-            ngood++;
-         }
-      }
-   }
-
-/* Initialise the returned width to the total data range. */
-   if( width && maxval != -DBL_MAX ) *width = maxval - minval;
-
-/* If less than 3 points were found, we will return the first. Otherwise, if 
-   3 or more good values were found, find a typical value. */
-   if( ngood > 2 ) {
-
-/* We will form a histogram of the supplied values in order to find the
-   mode. The number of bins in this histogram is chosen so that there
-   is an average of 2 points per bin. Find the number of bins. */
-      nbin = ( ngood + 1 )/2;
-
-/* Find the bin size. If zero (i.e. if all values are equal), return the 
-   first good value established above. */
-      delta = ( maxval - minval )/ nbin;
-      if( delta > 0.0 ) {
-
-/* Allocat ememory for the histogram. */
-         hist = astMalloc( sizeof(int)*(size_t)nbin );
-         if( hist ) {
-
-/* Initialise the histogram. */
-            for( i = 0; i < nbin; i++ ) hist[ i ] = 0;
-
-/* Form the histogram. Form the mean data value at the same time. */
-            mean = 0.0;
-            a = value;
-            nc = 0;
-            for( i = 0; i < n; i++, a++ ){
-               if( *a != AST__BAD ) {
-                  if( *a >= lolim && *a <= hilim ) {
-                     mean += *a;
-                     ibin = (int) ( ( *a - minval )/ delta );
-                     if( ibin == nbin ) ibin--;
-                     hist[ ibin ]++;
-                     nc++;
-                  }
-               }
-            }
-
-            mean /= ngood;
-
-/* We tend to prefer not to use reference values which are very close the
-   the limits since they can give problems with regard to normalization
-   (rounding errors can knock them over the edge), so we modify the counts 
-   in each bin of the histogram to reduce the impact of bins near the edge.
-   However, we do not do this if the number of bins is very small or if
-   all the counts are in the edge bins. */
-            modify = ( nbin > 4 && 
-                      ( hist[ 0 ] + hist[ nbin - 1 ] < 0.98*ngood ) );
-
-/* Find the bin with the highest modified count. If there is more than one bin
-   with the highest modified count, choose the one which is closest to the
-   mean data value found above. Also count the number of non-empty bins. */
-            nonemp = 0;
-            maxcnt = 0;
-            w0 = nbin/2;
-            for( i = 0; i < nbin; i++ ) {
-
-               cnt = hist[ i ];
-               if( cnt ) nonemp++;
-
-               if( modify ) {
-                  w1 = i*w0;
-                  w2 = ( nbin - 1 - i )*w0;
-                  w = ( w1 < w2 ) ? w1 :w2;               
-                  if( w < 1.0 ) cnt *= w;
-               }
-
-               if( cnt > maxcnt ) {
-                  maxcnt = cnt;
-                  ibin = i;
-
-               } else if( cnt == maxcnt ) {
-                  if( fabs( minval + ( i - 0.5 )*delta - mean ) <
-                      fabs( minval + ( ibin - 0.5 )*delta - mean ) ) {
-                     maxcnt = cnt;
-                     ibin = i;
-                  }            
-               }
-            }
-
-/* Free the histogram memory. */
-            hist = astFree( hist );
-
-/* If required, return the width of the non-empty bins. */
-            if( width ) *width = nonemp*delta;
-
-/* Call this function recursively to refine the value, restricting
-   attention to those data values which are within the range of the bin
-   found above. */
-            if( maxcnt < nc && ibin*delta > 1000.0*DBL_EPSILON*fabs(maxval) ) {
-               minval += ibin*delta;
-               maxval = minval + delta;
-               result = Typical( n, value, minval, maxval, NULL, status );
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetUseColour( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     GetUseColour
-
-*  Purpose:
-*     Get the Colour value to use for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GetUseColour( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This returns the Colour value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the colour
-*     for the first set specific value is returned. For example, if the 
-*     Colour for AST__AXES_ID is requested, then the colour for AST__AXIS1_ID 
-*     will be returned if set, and otherwise the colour for AST__AXIS2_ID will 
-*     be returned. If AST__AXIS2_ID is not set either, then the default for 
-*     AST__AXIS2_ID will be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Colour value to use.
-
-*/
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return NOCOLOUR;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the value of the first 
-   set genuine identifier. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   if( nid > 1 ) {
-      if(  astTestColour( this, id1 ) ) {
-         id = id1;
-
-      } else if(  nid > 1 && astTestColour( this, id2 ) ) {
-         id = id2;
-
-      } else if(  nid > 2 && astTestColour( this, id3 ) ) {
-         id = id3;
-
-      } else {
-         id = id1;
-      }
-   }
-
-/* Return the result. */
-   return astGetColour( this, id );
-
-}
-
-static int GetUseFont( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     GetUseFont
-
-*  Purpose:
-*     Get the Font value to use for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GetUseFont( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This returns the Font value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the Font
-*     for the first set specific value is returned. For example, if the 
-*     Font for AST__AXES_ID is requested, then the Font for AST__AXIS1_ID 
-*     will be returned if set, and otherwise the Font for AST__AXIS2_ID will 
-*     be returned. If AST__AXIS2_ID is not set either, then the default for 
-*     AST__AXIS2_ID will be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Font value to use.
-
-*/
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return NOFONT;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the value of the first set
-   genuine identifier. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   if( nid > 1 ) {
-      if(  astTestFont( this, id1 ) ) {
-         id = id1;
-
-      } else if(  nid > 1 && astTestFont( this, id2 ) ) {
-         id = id2;
-
-      } else if(  nid > 2 && astTestFont( this, id3 ) ) {
-         id = id3;
-
-      } else {
-         id = id1;
-      }
-   }
-
-/* Return the result. */
-   return astGetFont( this, id );
-
-}
-
-static double GetUseSize( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     GetUseSize
-
-*  Purpose:
-*     Get the Size value to use for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     double GetUseSize( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This returns the Size value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the Size
-*     for the first set specific value is returned. For example, if the 
-*     Size for AST__AXES_ID is requested, then the Size for AST__AXIS1_ID 
-*     will be returned if set, and otherwise the Size for AST__AXIS2_ID will 
-*     be returned. If AST__AXIS2_ID is not set either, then the default for 
-*     AXIS2_ID will be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Size value to use.
-
-*/
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return NOSIZE;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the value of the first set
-   genuine identifier. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   if( nid > 1 ) {
-      if(  astTestSize( this, id1 ) ) {
-         id = id1;
-
-      } else if(  nid > 1 && astTestSize( this, id2 ) ) {
-         id = id2;
-
-      } else if(  nid > 2 && astTestSize( this, id3 ) ) {
-         id = id3;
-
-      } else {
-         id = id1;
-      }
-   }
-
-/* Return the result. */
-   return astGetSize( this, id );
-
-}
-
-static int GetUseStyle( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     GetUseStyle
-
-*  Purpose:
-*     Get the Style value to use for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int GetUseStyle( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This returns the Style value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the style
-*     for the first set specific value is returned. For example, if the 
-*     Style for AST__AXES_ID is requested, then the style for AST__AXIS1_ID 
-*     will be returned if set, and otherwise the style for AST__AXIS2_ID will 
-*     be returned. If AST__AXIS2_ID is not set either, then the default for 
-*     AST__AXIS2_ID will be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Style value to use.
-
-*/
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return NOSTYLE;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the value of the first set
-   genuine identifier. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   if( nid > 1 ) {
-      if(  astTestStyle( this, id1 ) ) {
-         id = id1;
-
-      } else if(  nid > 1 && astTestStyle( this, id2 ) ) {
-         id = id2;
-
-      } else if(  nid > 2 && astTestStyle( this, id3 ) ) {
-         id = id3;
-
-      } else {
-         id = id1;
-      }
-   }
-
-/* Return the result. */
-   return astGetStyle( this, id );
-
-}
-
-static double GetUseWidth( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     GetUseWidth
-
-*  Purpose:
-*     Get the Width value to use for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     double GetUseWidth( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This returns the Width value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the Width
-*     for the first set specific value is returned. For example, if the 
-*     Width for AST__AXES_ID is requested, then the Width for AST__AXIS1_ID 
-*     will be returned if set, and otherwise the Width for AST__AXIS2_ID will 
-*     be returned. If AST__AXIS2_ID is not set either, then the default for 
-*     AST__AXIS2_ID will be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Width value to use.
-
-*/
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return NOWIDTH;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the value of the first set
-   genuine identifier. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   if( nid > 1 ) {
-      if(  astTestWidth( this, id1 ) ) {
-         id = id1;
-
-      } else if(  nid > 1 && astTestWidth( this, id2 ) ) {
-         id = id2;
-
-      } else if(  nid > 2 && astTestWidth( this, id3 ) ) {
-         id = id3;
-
-      } else {
-         id = id1;
-      }
-   }
-
-/* Return the result. */
-   return astGetWidth( this, id );
-
-}
-
-static int TestUseColour( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     TestUseColour
-
-*  Purpose:
-*     Test the Colour value for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TestUseColour( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This tests the Colour value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-*     is considered to be set if all the corresponding specific values are 
-*     set. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Colour value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the logical AND of the 
-   test flags for the genuine identifiers. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   ret = astTestColour( this, id1 );
-   if( nid > 1 ) ret = ret && astTestColour( this, id2 );
-   if( nid > 2 ) ret = ret && astTestColour( this, id3 );
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int TestUseFont( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     TestUseFont
-
-*  Purpose:
-*     Test the Font value for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TestUseFont( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This tests the Font value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-*     is considered to be set if all the corresponding specific values are 
-*     set. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Font value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the logical AND of the 
-   test flags for the genuine identifiers. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   ret = astTestFont( this, id1 );
-   if( nid > 1 ) ret = ret && astTestFont( this, id2 );
-   if( nid > 2 ) ret = ret && astTestFont( this, id3 );
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int TestUseSize( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     TestUseSize
-
-*  Purpose:
-*     Test the Size value for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TestUseSize( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This tests the Size value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-*     is considered to be set if all the corresponding specific values are 
-*     set. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Size value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the logical AND of the 
-   test flags for the genuine identifiers. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   ret = astTestSize( this, id1 );
-   if( nid > 1 ) ret = ret && astTestSize( this, id2 );
-   if( nid > 2 ) ret = ret && astTestSize( this, id3 );
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int TestUseStyle( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     TestUseStyle
-
-*  Purpose:
-*     Test the Style value for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TestUseStyle( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This tests the Style value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-*     is considered to be set if all the corresponding specific values are 
-*     set. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Style value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the logical AND of the 
-   test flags for the genuine identifiers. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   ret = astTestStyle( this, id1 );
-   if( nid > 1 ) ret = ret && astTestStyle( this, id2 );
-   if( nid > 2 ) ret = ret && astTestStyle( this, id3 );
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int TestUseWidth( AstPlot *this, int id, int *status ) {
-/*
-*  Name:
-*     TestUseWidth
-
-*  Purpose:
-*     Test the Width value for a specified graphical element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int TestUseWidth( AstPlot *this, int id, int *status )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     This tests the Width value for the graphical element specified by
-*     id. If an element related to a generic value is being accessed (e.g
-*     "Axes" is generic, "Axis1" and "Axis2" are not), then the element
-*     is considered to be set if all the corresponding specific values are 
-*     set. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     id
-*        An integer specifying the graphical element to be drawn.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Width value state (1 if set, zero otherwise).
-
-*/
-
-/* Local Variables: */
-   int ret;
-
-/* Local Variables: */
-   int id1;        /* First genuine identifier */
-   int id2;        /* Second genuine identifier */
-   int id3;        /* Third genuine identifier */
-   int nid;        /* Number of genuine attributes */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* See if the supplied identifier is a psuedo-identifier representing two 
-   or three other genuine identifiers. If so, return the logical AND of the 
-   test flags for the genuine identifiers. */
-   nid = IdFind( id, astGetNin( this ), &id1, &id2, &id3, status );
-   ret = astTestWidth( this, id1 );
-   if( nid > 1 ) ret = ret && astTestWidth( this, id2 );
-   if( nid > 2 ) ret = ret && astTestWidth( this, id3 );
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int ToggleLogLin( AstPlot *this, int axis, int islog, 
-                         const char *method, int *status ){
-/*
-*
-*  Name:
-*     ToggleLogLin
-
-*  Purpose:
-*     Toggle the nature of the Plot axis mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int ToggleLogLin( AstPlot *this, int axis, int islog, 
-*                       const char *method, int *status )
-
-*  Class Membership:
-*     Plot member function 
-
-*  Description:
-*     Each axis in the graphics Frame of a Plot can be mapped linearly or
-*     logarithmically onto the corresponding axis in the base Frame of
-*     the FrameSet supplied whtn the Plot was constructed. This function
-*     toggles the nature of the specified axis; if it is currently
-*     logarithmic it becomes linear, and if it is linear it becomes
-*     logarithmic.
-*
-*     If the Frame canot be re-maped (for instance because the visible
-*     part of the axis includes the value zero), then zero is returned
-*     but no error is reported.
-
-*  Parameters:
-*     this
-*        The Plot.
-*     axis
-*        Zero based axis index.
-*     islog
-*        Is the axis currently logarithmic? If so, this function remaps
-*        it so that it is linear (and vice-versa).
-*     method
-*        Pointer to a null-terminated string holding the name of the calling 
-*        method (only used within error mesages).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the attempt to re-map the graphics Frame was succesful,
-*     zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstCmpMap *remap1;   /* 1D Mapping to re-map the graphics Frame */
-   AstCmpMap *remap2;   /* 2D Mapping to re-map the graphics Frame */
-   AstMathMap *logmap;  /* 1D Logarithmic axis Mapping */
-   AstUnitMap *unitmap;  /* 1D Unit mapping */
-   AstWinMap *linmap;   /* 1D Linear axis Mapping */
-   char fwdexp[ 25 + 2*DBL_DIG ];  /* Forward log mapping expression */
-   char invexp[ 28 + 2*DBL_DIG ];  /* Inverse log mapping expression */
-   const char *fwd[1];  /* Pointer to pass to MathMap constructor */
-   const char *inv[1];  /* Pointer to pass to MathMap constructor */
-   double a;            /* Constant for log expression */
-   double b1;           /* Original base Frame axis value at first edge */
-   double b2;           /* Original base Frame axis value at second edge */
-   double b;            /* Constant for log expression */
-   double c;            /* Constant for log expression */
-   double g1;           /* Graphics axis value at first edge */
-   double g2;           /* Graphics axis value at second edge */
-   int result;          /* Returned value */
-
-/* Inotialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the corresponding axis limits in the graphics coordinate system
-   and the original base Frame coordinate system. */
-   if( axis == 0 ) {
-      if( this->xrev ) {
-         g1 = this->xhi;
-         g2 = this->xlo;
-      } else {
-         g1 = this->xlo;
-         g2 = this->xhi;
-      }
-      b1 = this->bbox[ 0 ];
-      b2 = this->bbox[ 2 ];
-
-   } else {
-      if( this->yrev ) {
-         g1 = this->yhi;
-         g2 = this->ylo;
-      } else {
-         g1 = this->ylo;
-         g2 = this->yhi;
-      }
-      b1 = this->bbox[ 1 ];
-      b2 = this->bbox[ 3 ];
-   }
-
-/* Check the limits are usable (e.g. the base Frame values will be bad 
-   if this Plot was restored from a dump of a Plot created before the
-   LogPlot attributes were added). */
-   if( b1 != AST__BAD && b2 != AST__BAD && g1 != g2 && b1 != b2 &&
-       b1*b2 > 0.0 ) {
-
-/* Form the 1D Mapping which maps the specified axis linearly onto the plotting
-   surface. The forward transformation goes from graphics to base Frame. */
-      linmap = astWinMap( 1, &g1, &g2, &b1, &b2, "", status );
-
-/* Form the 1D Mapping which maps the specified axis logarithmically onto the 
-   plotting surface. The forward transformation goes from graphics to base 
-   Frame. */
-      c = log10( b1/b2 );
-      a = ( g1 - g2 )/c;
-
-      if( b1 > 0.0 ) {
-         b = ( g2*log10( b1 ) - g1*log10( b2 ) )/c;
-         (void) sprintf( invexp, "g=%.*g*log10(b)+%.*g", DBL_DIG, a, DBL_DIG, b );
-         (void) sprintf( fwdexp, "b=pow(10,(g-%.*g)/%.*g)", DBL_DIG, b, DBL_DIG, a );
-
-      } else {
-         b = ( g2*log10( -b1 ) - g1*log10( -b2 ) )/c;
-         (void) sprintf( invexp, "g=%.*g*log10(-b)+%.*g", DBL_DIG, a, DBL_DIG, b );
-         (void) sprintf( fwdexp, "b=-pow(10,(g-%.*g)/%.*g)", DBL_DIG, b, DBL_DIG, a );
-      }
-
-      fwd[ 0 ] = (const char *) fwdexp;
-      inv[ 0 ] = (const char *) invexp;
-      logmap = astMathMap( 1, 1, 1, fwd, 1, inv, "SimpFI=1,SimpIF=1", status );
-
-/* If the axis was previously logarithmic, get the Mapping with which to remap 
-   the graphics Frame so that it becomes linearly related to the base Frame 
-   in the FrameSet supplied when the Plot was constructed. */
-      if( islog ) {
-         astInvert( linmap );
-         remap1 = astCmpMap( logmap, linmap, 1, "", status );
-
-/* If the axis was previously linear, store the new value and get the Mapping 
-   with which to remap the graphics Frame so that it becomes logarithmically 
-   related to the base Frame in the FrameSet supplied when the Plot was 
-   constructed. */
-      } else {
-         astInvert( logmap );
-         remap1 = astCmpMap( linmap, logmap, 1, "", status );
-      }
-
-/* Add a 1D UnitMap to map the unaltered mapping. */
-      unitmap = astUnitMap( 1, "", status );
-      if( axis == 0 ) {
-         remap2 = astCmpMap( remap1, unitmap, 0, "", status );
-      } else {
-         remap2 = astCmpMap( unitmap, remap1, 0, "", status );
-      }     
-      
-/* Remap the base (graphics) Frame in the Plot. */
-      astRemapFrame( this, AST__BASE, remap2 );
-
-/* Free resources. */
-      remap1 = astAnnul( remap1 );
-      remap2 = astAnnul( remap2 );
-      logmap = astAnnul( logmap );
-      linmap = astAnnul( linmap );
-      unitmap = astAnnul( unitmap );
-
-/* Indicate success. */
-      if( astOK ) result = 1;
-
-   } 
-
-/* Return the result. */
-   return result;
-} 
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strcmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Ustrcmp( const char *a, const char *b )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the two strings, and 1 
-*     otherwise. Comparisons are case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strcmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Loop round each character. */
-   while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strncmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     int Ustrncmp( const char *a, const char *b, size_t n )
-
-*  Class Membership:
-*     Plot member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the first "n"
-*     characters of the two strings, and 1 otherwise. Comparisons are
-*     case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     n
-*        The maximum number of characters to compare.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference 
-*     between the two strings, whereas "strncmp" does.
-*     -  This function attempts to execute even if an error has 
-*     occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int i;                  /* Character index */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Compare up to "n" characters. */
-   for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Plot objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Plot objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPlot *this;               /* Pointer to Plot */
-   int i;
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) obj;
-
-/* Free the clipping bounds arrays. */
-   this->clip_lbnd = (double *) astFree( (void *) this->clip_lbnd );
-   this->clip_ubnd = (double *) astFree( (void *) this->clip_ubnd );
-
-/* Free the Grf function stack */
-   this->grfstack = (AstGrfPtrs *) astFree( (void *) this->grfstack );
-
-/* Free the graphics attribute stack. */
-   for( i = this->ngat - 1; i >= 0; i-- ) {
-     this->gat[ i ] = astFree( this->gat[ i ] );
-   }
-
-/* Free the graphics context pointer. */
-   if( this->grfcontext ) {
-      this->grfcontext = astAnnul( this->grfcontext );
-      this->grfcontextID = astAnnulId( this->grfcontextID );
-   }
-
-/* Free the information about the tick marks to draw. */
-   for( i = 0; i < 3; i++ ) {
-      this->majtickval[ i ] = astFree( this->majtickval[ i ] );
-      this->mintickval[ i ] = astFree( this->mintickval[ i ] );
-      this->nmajtickval[ i ] = 0;
-      this->nmintickval[ i ] = 0;
-   }
-
-/* Free the information about the drawn tick marks. */
-   SaveTick( this, -1, 0.0, 0.0, 0, status );
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Plot objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Plot objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstPlot *in;                 /* Pointer to input Plot */
-   AstPlot *out;                /* Pointer to output Plot */
-   int axis;                    /* Zero based axis index */
-   int n;                       /* Number of ticks saved */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Plots. */
-   in = (AstPlot *) objin;
-   out = (AstPlot *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Plot. */
-   out->clip_lbnd = NULL;
-   out->clip_ubnd = NULL;
-   out->gat = NULL;
-   out->ngat = 0;
-
-   for( axis = 0; axis < 3; axis++ ) {
-      out->majtickgx[ axis ] = NULL;
-      out->majtickgy[ axis ] = NULL;
-      out->majtickcount[ axis ] = 0;
-      out->mintickgx[ axis ] = NULL;
-      out->mintickgy[ axis ] = NULL;
-      out->mintickcount[ axis ] = 0;
-      out->majtickval[ axis ] = NULL;
-      out->nmajtickval[ axis ] = 0;
-      out->mintickval[ axis ] = NULL;
-      out->nmintickval[ axis ] = 0;
-   }
-
-/* Copy the clipping bounds arrays. */
-   out->clip_lbnd = (double *) astStore( NULL, (void *) in->clip_lbnd,
-                                      sizeof(double)*(size_t)(in->clip_axes) );
-   out->clip_ubnd = (double *) astStore( NULL, (void *) in->clip_ubnd,
-                                      sizeof(double)*(size_t)(in->clip_axes) );
-
-/* Copy the Grf function stack */
-   out->grfstack = (AstGrfPtrs *) astStore( NULL, (void *) in->grfstack,
-                                  sizeof(AstGrfPtrs)*(size_t)(in->grfnstack ));
-
-/* Copy the information about drawn tick marks. */
-   for( axis = 0; axis < 3; axis++ ) {
-      n = in->majtickcount[ axis ];
-      out->majtickgx[ axis ] = (double *) astStore( NULL, in->majtickgx[ axis ],
-                                                    n*sizeof( double ) );
-      out->majtickgy[ axis ] = (double *) astStore( NULL, in->majtickgy[ axis ],
-                                                    n*sizeof( double ) );
-      out->majtickcount[ axis ] = n;
-
-      n = in->mintickcount[ axis ];
-      out->mintickgx[ axis ] = (double *) astStore( NULL, in->mintickgx[ axis ],
-                                                    n*sizeof( double ) );
-      out->mintickgy[ axis ] = (double *) astStore( NULL, in->mintickgy[ axis ],
-                                                    n*sizeof( double ) );
-      out->mintickcount[ axis ] = n;
-
-      n = in->nmajtickval[ axis ];
-      out->majtickval[ axis ] = (double *) astStore( NULL, in->majtickval[ axis ],
-                                                     n*sizeof( double ) );
-      out->nmajtickval[ axis ] = n;
-
-      n = in->nmintickval[ axis ];
-      out->mintickval[ axis ] = (double *) astStore( NULL, in->mintickval[ axis ],
-                                                     n*sizeof( double ) );
-      out->nmintickval[ axis ] = n;
-   }
-
-/* If an error occurred, free any allocated memory. */
-   if ( !astOK ) { 
-      out->clip_lbnd = (double *) astFree( out->clip_lbnd );     
-      out->clip_ubnd = (double *) astFree( out->clip_ubnd );
-      out->grfstack = (AstGrfPtrs *) astFree( out->grfstack );
-      SaveTick( out, -1, 0.0, 0.0, 0, status );
-    }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Plot objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Plot class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPlot *this;                /* Pointer to the Plot structure */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   char *comment;                /* Pointer to comment string */
-   double dval;                  /* Double precision value */
-   int ax;                       /* Axis to which element refers */
-   int axis;                     /* Zero based axis index */
-   int id;                       /* Zero based graphical object id */
-   int ival;                     /* Integer value */
-   int itick;                    /* Tick mark index */
-   int nax;                      /* Number of base Frame axes */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot structure. */
-   this = (AstPlot *) this_object;
-
-/* Get the number of graphics (base) frame axes - 2 for a Plot, 3 for a
-   Plot3D. */
-   nax = astGetNin( this );
-
-/* Write out values representing the instance variables for the
-   Plot class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Tol. */
-/* ---- */
-   set = TestTol( this, status );
-   dval = set ? GetTol( this, status ) : astGetTol( this );
-   astWriteDouble( channel, "Tol", set, 0, dval, "Plotting tolerance" );
-
-/* Grid. */
-/* ----- */
-   set = TestGrid( this, status );
-   ival = set ? GetGrid( this, status ) : astGetGrid( this );
-   astWriteInt( channel, "Grid", set, 0, ival, "Is a grid required?" );
-
-/* TickAll. */
-/* -------- */
-   set = TestTickAll( this, status );
-   ival = set ? GetTickAll( this, status ) : astGetTickAll( this );
-   astWriteInt( channel, "TckAll", set, 1, ival, "Put ticks on all edges?" );
-
-/* ForceExterior. */
-/* -------------- */
-   set = TestForceExterior( this, status );
-   ival = set ? GetForceExterior( this, status ) : astGetForceExterior( this );
-   astWriteInt( channel, "FrcExt", set, 1, ival, "Force exterior labelling?" );
-
-/* Invisible. */
-/* ---------- */
-   set = TestInvisible( this, status );
-   ival = set ? GetInvisible( this, status ) : astGetInvisible( this );
-   astWriteInt( channel, "Invsbl", set, 1, ival, "Use invisible ink?" );
-
-/* Border. */
-/* ------- */
-   set = TestBorder( this, status );
-   ival = set ? GetBorder( this, status ) : astGetBorder( this );
-   astWriteInt( channel, "Border", set, 0, ival, "Draw a border round the grid?" );
-
-/* ClipOp. */
-/* ------- */
-   set = TestClipOp( this, status );
-   ival = set ? GetClipOp( this, status ) : astGetClipOp( this );
-   astWriteInt( channel, "ClpOp", set, 0, ival, "Clip using logical OR?" );
-
-/* Clip. */
-/* ----- */
-   set = TestClip( this, status );
-   ival = set ? GetClip( this, status ) : astGetClip( this );
-   astWriteInt( channel, "Clip", set, 0, ival, 
-                ((ival == 0)?"Do not clip at plot edges": 
-                ((ival == 1)?"Clip curves at plot edges": 
-                ((ival == 2)?"Clip markers at plot edges":
-                             "Clip markers and curves at plot edges"))));
-
-/* DrawTitle. */
-/* --------- */
-   set = TestDrawTitle( this, status );
-   ival = set ? GetDrawTitle( this, status ) : astGetDrawTitle( this );
-   astWriteInt( channel, "DrwTtl", set, 1, ival, "Add a title to the grid?" );
-
-/* DrawAxesUnits(axis). */
-/* ----------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestDrawAxes( this, axis, status );
-      ival = set ? GetDrawAxes( this, axis, status ) : astGetDrawAxes( this, axis );
-      (void) sprintf( buff, "DrwAxs%d", axis + 1 );
-      astWriteInt( channel, buff, set, 0, ival, "Draw axis through ticks?" );
-   }
-
-/* Abbrev(axis). */
-/* ------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestAbbrev( this, axis, status );
-      ival = set ? GetAbbrev( this, axis, status ) : astGetAbbrev( this, axis );
-      (void) sprintf( buff, "Abbrv%d", axis + 1 );
-      astWriteInt( channel, buff, set, 0, ival, "Abbreviate numerical axis labels?" );
-   }
-
-/* Escape. */
-/* ------- */
-   set = TestEscape( this, status );
-   ival = set ? GetEscape( this, status ) : astGetEscape( this );
-   astWriteInt( channel, "Escape", set, 1, ival, "Interpret escape sequences?" );
-
-/* LabelAt(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestLabelAt( this, axis, status );
-      dval = set ? GetLabelAt( this, axis, status ) : astGetLabelAt( this, axis );
-      if( dval != AST__BAD ){
-         (void) sprintf( buff, "LblAt%d", axis + 1 );
-         astWriteDouble( channel, buff, set, 0, dval, "Put numerical labels at" );
-      }
-   }
-
-/* Centre(axis). */
-/* ------------ */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestCentre( this, axis, status );
-      dval = set ? GetCentre( this, axis, status ) : astGetCentre( this, axis );
-      if( dval != AST__BAD ){
-         (void) sprintf( buff, "Cen%d", axis + 1 );
-         astWriteDouble( channel, buff, set, 0, dval, "Tick mark origin" );
-      }
-   }
-
-/* Gap(axis). */
-/* ---------- */
-/* Discovering the default value requires a lot of calculation. Only
-   write out this attribute if an explicit value has been set. */
-   for( axis = 0; axis < nax; axis++ ){
-      if( astTestGap( this, axis ) ) {
-         dval = astGetGap( this, axis );
-         if( dval != AST__BAD ){
-            (void) sprintf( buff, "Gap%d", axis + 1 );
-            astWriteDouble( channel, buff, set, 0, dval, "Difference between ticks" );
-         }
-      }
-   }
-
-/* LogGap(axis). */
-/* ------------- */
-/* Discovering the default value requires a lot of calculation. Only
-   write out this attribute if an explicit value has been set. */
-   for( axis = 0; axis < nax; axis++ ){
-      if( astTestLogGap( this, axis ) ) {
-         dval = astGetLogGap( this, axis );
-         if( dval != AST__BAD ){
-            (void) sprintf( buff, "LgGap%d", axis + 1 );
-            astWriteDouble( channel, buff, set, 0, dval, "Ratio between ticks" );
-         }
-      }
-   }
-
-/* NumLabGap(axis). */
-/* ---------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestNumLabGap( this, axis, status );
-      dval = set ? GetNumLabGap( this, axis, status ) : astGetNumLabGap( this, axis );
-      if( dval != AST__BAD ) {
-         (void) sprintf( buff, "NmGap%d", axis + 1 );
-         astWriteDouble( channel, buff, set, 1, dval, "Spacing of numerical labels" );
-      }
-   }
-
-/* TextLabGap(axis). */
-/* ----------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestTextLabGap( this, axis, status );
-      dval = set ? GetTextLabGap( this, axis, status ) : astGetTextLabGap( this, axis );
-      if( dval != AST__BAD ) {
-         (void) sprintf( buff, "TxGap%d", axis + 1 );
-         astWriteDouble( channel, buff, set, 1, dval, "Spacing of descriptive labels" );
-      }
-   }
-
-/* LabelUp(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestLabelUp( this, axis, status );
-      ival = set ? GetLabelUp( this, axis, status ) : astGetLabelUp( this, axis );
-      (void) sprintf( buff, "LblUp%d", axis + 1 );
-      astWriteInt( channel, buff, set, 1, ival, "Draw numerical labels upright?" );
-   }
-
-/* LogPlot(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestLogPlot( this, axis, status );
-      ival = set ? GetLogPlot( this, axis, status ) : astGetLogPlot( this, axis );
-      (void) sprintf( buff, "LgPlt%d", axis + 1 );
-      astWriteInt( channel, buff, set, 1, ival, "Map plot axis logarithmically?" );
-   }
-
-/* LogTicks(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestLogTicks( this, axis, status );
-      ival = set ? GetLogTicks( this, axis, status ) : astGetLogTicks( this, axis );
-      (void) sprintf( buff, "LgTck%d", axis + 1 );
-      astWriteInt( channel, buff, set, 1, ival, "Space ticks logarithmically?" );
-   }
-
-/* LogLabel(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestLogLabel( this, axis, status );
-      ival = set ? GetLogLabel( this, axis, status ) : astGetLogLabel( this, axis );
-      (void) sprintf( buff, "LgLbl%d", axis + 1 );
-      astWriteInt( channel, buff, set, 1, ival, "Scientific notation for labels?" );
-   }
-
-/* NumLab(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestNumLab( this, axis, status );
-      ival = set ? GetNumLab( this, axis, status ) : astGetNumLab( this, axis );
-      (void) sprintf( buff, "NmLbl%d", axis + 1 );
-      astWriteInt( channel, buff, set, 1, ival, "Draw numerical labels?" );
-   }
-
-/* MinTick(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestMinTick( this, axis, status );
-      ival = set ? GetMinTick( this, axis, status ) : astGetMinTick( this, axis );
-      (void) sprintf( buff, "MnTks%d", axis + 1 );
-      astWriteInt( channel, buff, set, 0, ival, "No. of sub-divisions "
-                   "between major tick marks" );
-   }
-
-/* TextLab(axis). */
-/* -------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestTextLab( this, axis, status );
-      ival = set ? GetTextLab( this, axis, status ) : astGetTextLab( this, axis );
-      (void) sprintf( buff, "TxLbl%d", axis + 1 );
-      astWriteInt( channel, buff, set, 0, ival, "Draw textual label?" );
-   }
-
-/* LabelUnits(axis). */
-/* ----------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestLabelUnits( this, axis, status );
-      ival = set ? GetLabelUnits( this, axis, status ) : astGetLabelUnits( this, axis );
-      (void) sprintf( buff, "LbUnt%d", axis + 1 );
-      astWriteInt( channel, buff, set, 0, ival, "Add units to axis label?" );
-   }
-
-/* Style(object). */
-/* -------------- */
-   for( id = 0; id < AST__NPID; id++ ){
-      set = TestStyle( this, id, status );
-      ival = set ? GetStyle( this, id, status ) : astGetStyle( this, id );
-      (void) sprintf( buff, "Style%d", id + 1 );
-      comment = GrfItem( id, " line style", &ax, status );
-      if( ax < nax ) astWriteInt( channel, buff, set, 0, ival, comment );
-      comment = (char *) astFree( (void *) comment );
-   }
-
-/* Font(object). */
-/* ------------- */
-   for( id = 0; id < AST__NPID; id++ ){
-      set = TestFont( this, id, status );
-      ival = set ? GetFont( this, id, status ) : astGetFont( this, id );
-      (void) sprintf( buff, "Font%d", id + 1 );
-      comment = GrfItem( id, " character font", &ax, status );
-      if( ax < nax ) astWriteInt( channel, buff, set, 0, ival, comment );
-      comment = (char *) astFree( (void *) comment );
-   }
-
-/* Colour(object). */
-/* --------------- */
-   for( id = 0; id < AST__NPID; id++ ){
-      set = TestColour( this, id, status );
-      ival = set ? GetColour( this, id, status ) : astGetColour( this, id );
-      (void) sprintf( buff, "Col%d", id + 1 );
-      comment = GrfItem( id, " colour index", &ax, status );
-      if( ax < nax ) astWriteInt( channel, buff, set, 0, ival, comment );
-      comment = (char *) astFree( (void *) comment );
-   }
-
-/* Width(object). */
-/* -------------- */
-   for( id = 0; id < AST__NPID; id++ ){
-      set = TestWidth( this, id, status );
-      dval = set ? GetWidth( this, id, status ) : astGetWidth( this, id );
-      if( dval != AST__BAD ) {
-         (void) sprintf( buff, "Width%d", id + 1 );
-         comment = GrfItem( id, " line width", &ax, status );
-         if( ax < nax ) astWriteDouble( channel, buff, set, 0, dval, comment );
-         comment = (char *) astFree( (void *) comment );
-      }
-   }
-
-/* Size(object). */
-/* ------------- */
-   for( id = 0; id < AST__NPID; id++ ){
-      set = TestSize( this, id, status );
-      dval = set ? GetSize( this, id, status ) : astGetSize( this, id );
-      if( dval != AST__BAD ) {
-         (void) sprintf( buff, "Size%d", id + 1 );
-         comment = GrfItem( id, " character size", &ax, status );
-         if( ax < nax ) astWriteDouble( channel, buff, set, 0, dval, comment );
-         comment = (char *) astFree( (void *) comment );
-      }
-   }
-
-/* TitleGap. */
-/* --------- */
-   set = TestTitleGap( this, status );
-   dval = set ? GetTitleGap( this, status ) : astGetTitleGap( this );
-   if( dval != AST__BAD ) astWriteDouble( channel, "TtlGap", set, 1, dval, 
-                                         "Gap between title and edge" );
-
-/* MajTickLen(axis). */
-/* ----------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestMajTickLen( this, axis, status );
-      dval = set ? GetMajTickLen( this, axis, status ) : astGetMajTickLen( this, axis );
-      if( dval != AST__BAD ) {
-         (void) sprintf( buff, "MjTkLn%d", axis + 1 );
-         astWriteDouble( channel, buff, set, 0, dval, "Major tick length" );
-      }
-   }
-
-/* MinTickLen(axis). */
-/* ----------------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestMinTickLen( this, axis, status );
-      dval = set ? GetMinTickLen( this, axis, status ) : astGetMinTickLen( this, axis );
-      if( dval != AST__BAD ) {
-         (void) sprintf( buff, "MnTkLn%d", axis + 1 );
-         astWriteDouble( channel, buff, set, 1, dval, "Minor tick length" );
-      }
-   }
-
-/* Labelling. */
-/* ---------- */
-   set = TestLabelling( this, status );
-   ival = set ? GetLabelling( this, status ) : astGetLabelling( this );
-   comment = "Labelling scheme";
-   astWriteString( channel, "Lbling", set, 0, xlbling[ival], comment );
-
-/* Edge(axis). */
-/* ----------- */
-   for( axis = 0; axis < nax; axis++ ){
-      set = TestEdge( this, axis, status );
-      ival = set ? GetEdge( this, axis, status ) : astGetEdge( this, axis );
-      (void) sprintf( buff, "Edge%d", axis + 1 );
-      comment = "Edge used to label an axis";
-      astWriteString( channel, buff, set, 0, xedge[ival], comment );
-   }
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* Only write out clipping information if set. */
-   if( this->clip_lbnd && this->clip_ubnd ){
-
-/* The lower bounds of the clipping volume. */
-      for( axis = 0; axis < this->clip_axes; axis++ ){
-         (void) sprintf( buff, "ClpLb%d", axis + 1 );
-         if( this->clip_lbnd && (this->clip_lbnd)[ axis ] != AST__BAD ){
-            astWriteDouble( channel, buff, 1, 0, (this->clip_lbnd)[ axis ], 
-                            "Lower bound of clipping region" );
-         }
-      }
-
-/* The upper bounds of the clipping volume. */
-      for( axis = 0; axis < this->clip_axes; axis++ ){
-         (void) sprintf( buff, "ClpUb%d", axis + 1 );
-         if( this->clip_ubnd && (this->clip_ubnd)[ axis ] != AST__BAD ){
-            astWriteDouble( channel, buff, 1, 0, (this->clip_ubnd)[ axis ], 
-                            "Upper bound of clipping region" );
-         } 
-      }
-
-/* The number of bounds supplied for the clipping volume. */
-      astWriteInt( channel, "ClpAxs", 1, 0, this->clip_axes,
-                   "No. of bounds for clipping region" );
-
-/* The index of the clipping Frame within the Plot. */
-      astWriteInt( channel, "ClpFrm", 1, 0, this->clip_frame,
-                   "Index of clipping Frame" );
-   }
-
-/* The bounds of the plotting area in graphics coords. */   
-   astWriteDouble( channel, "Xlo", 1, 1, this->xlo,
-                   "Lower X bound of plotting area" );
-   astWriteDouble( channel, "Ylo", 1, 1, this->ylo,
-                   "Lower Y bound of plotting area" );
-   astWriteDouble( channel, "Xhi", 1, 1, this->xhi,
-                   "Upper X bound of plotting area" );
-   astWriteDouble( channel, "Yhi", 1, 1, this->yhi,
-                   "Upper Y bound of plotting area" );
-
-/* Axis reversal flags. */
-   astWriteInt( channel, "Xrev", 1, 0, this->xrev, "X axis reversed?" );
-   astWriteInt( channel, "Yrev", 1, 0, this->yrev, "Y axis reversed?" );
-
-/* The bounds of the plotting area in the base Frame of the FrameSet
-   supplied when the Plot was constructed. */   
-   astWriteDouble( channel, "Xb1", 1, 1, this->bbox[ 0 ],
-                   "Lower X bound of supplied base Frame" );
-   astWriteDouble( channel, "Yb1", 1, 1, this->bbox[ 1 ],
-                   "Lower Y bound of supplied base Frame" );
-   astWriteDouble( channel, "Xb2", 1, 1, this->bbox[ 2 ],
-                   "Upper X bound of supplied base Frame" );
-   astWriteDouble( channel, "Yb2", 1, 1, this->bbox[ 3 ],
-                   "Upper Y bound of supplied base Frame" );
-
-/* User-specified tick values */
-   for( axis = 0; axis < 3; axis++ ) {
-
-      if( this->nmajtickval[ axis ] > 0 ) {
-         sprintf( buff, "NMjTk%d", axis + 1 );
-         astWriteInt( channel, buff, 1, 1, this->nmajtickval[ axis ], "" );
-
-         for( itick = 0; itick < this->nmajtickval[ axis ]; itick++ ) {
-            sprintf( buff, "MjTk%d_%d", axis + 1, itick + 1 );
-            astWriteDouble( channel, buff, 1, 1, 
-                            this->majtickval[ axis ][ itick ], "" );
-         }
-      }
-
-      if( this->nmintickval[ axis ] > 0 ) {
-         sprintf( buff, "NMnTk%d", axis + 1 );
-         astWriteInt( channel, buff, 1, 1, this->nmintickval[ axis ], "" );
-
-         for( itick = 0; itick < this->nmintickval[ axis ]; itick++ ) {
-            sprintf( buff, "MnTk%d_%d", axis + 1, itick + 1 );
-            astWriteDouble( channel, buff, 1, 1, 
-                            this->mintickval[ axis ][ itick ], "" );
-         }
-      }
-   }
-
-/* Return. */
-   return;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPlot and astCheckPlot functions using
-   the macros defined for this purpose in the "object.h" header
-   file. */
-astMAKE_ISA(Plot,FrameSet)
-astMAKE_CHECK(Plot)
-
-AstPlot *astPlot_( void *frame_void, const float *graphbox, 
-                   const double *basebox, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astPlot
-
-*  Purpose:
-*     Create a Plot.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPlot *astPlot( AstFrame *frame, const float *graphbox, 
-*                       const double *basebox, const char *options, ..., int *status ) 
-
-*  Class Membership:
-*     Plot constructor.
-
-*  Description:
-*     This function creates a new Plot and optionally initialises
-*     its attributes.
-*
-*     The supplied Frame (or the base frame if a FrameSet was supplied) is 
-*     assumed to be related to the graphics world coordinate system by a 
-*     simple shift and scale along each axis. The mapping between graphics 
-*     world coordinates and this Frame is specified by supplying the 
-*     coordinates in both systems at the bottom left and top right corners 
-*     of a box on the graphics device. By default, no graphics will be 
-*     produced outside the supplied box, but this default behaviour can be 
-*     changed by setting explicit values for the various clipping attributes.
-
-*  Parameters:
-*     frame
-*        A pointer to a Frame or FrameSet to be annotated. If a NULL pointer
-*        is supplied, then a default 2-D Frame will be created to which labels,
-*        etc, can be attached by setting the relevant Frame attributes.
-*     graphbox
-*        A pointer to an array of 4 values giving the graphics world 
-*        coordinates of the bottom left and top right corners of a box on 
-*        the graphics output device. The first pair of values should be the 
-*        coordinates of the bottom left corner of the box and the second
-*        pair of values should be the coordinates of the top right corner.
-*        The horizontal axis should be given first in each pair.
-*     basebox
-*        A pointer to an array of 4 values giving the coordinates in the
-*        supplied Frame, or base frame of the supplied FrameSet, at the 
-*        bottom left and top right corners of the box specified by parameter 
-*        graphbox. These should be supplied in the same order as for 
-*        parameter "graphbox".
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Plot. The syntax used is the same as
-*        for the astSet method and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of arguments may follow it in order to
-*        supply values to be substituted for these specifiers. The
-*        rules for supplying these are identical to those for the
-*        astSet method (and for the C "printf" function).
-
-*  Returned Value:
-*     A pointer to the new Plot.
-
-*  Notes:
-*     -  The base Frame of the created Plot corresponds to the graphics world
-*     coordinate system, and should not, in general, be changed.
-*     -  The current Frame of the created Plot corresponds to the Frame
-*     given by parameter "frame". If a FrameSet was supplied then its 
-*     current Frame becomes the current Frame of the created Plot. 
-*     - If the supplied Frame, or base Frame if a FrameSet was supplied, 
-*     has more than 2 axes, then the sub-Frame defined by the first 2 axes 
-*     is used.
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic Plot constructor which
-*     is available via the protected interface to the Plot class.
-*     A public interface is provided by the astPlotId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "frame" parameter is of type (void *) and is converted and
-*     validated within the function itself.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPlot *new;                 /* Pointer to new Plot */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   new = NULL;
-
-/* Obtain and validate a pointer to any supplied Frame structure. */
-   if( frame_void ){
-      frame = astCheckFrame( frame_void );
-   } else {
-      frame = NULL;
-   }
-
-/* Check the pointer can be used. */
-   if ( astOK ) {
-
-/* Initialise the Plot, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitPlot( NULL, sizeof( AstPlot ), !class_init,
-                         &class_vtab, "Plot", frame, graphbox, 
-                         basebox );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Plot's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new Plot. */
-   return new;
-}
-
-AstPlot *astInitPlot_( void *mem, size_t size, int init, AstPlotVtab *vtab, 
-                       const char *name, AstFrame *frame, const float *graphbox, 
-                       const double *basebox, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPlot
-
-*  Purpose:
-*     Initialise a Plot.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     AstPlot *astInitPlot( void *mem, size_t size, int init, 
-*                           AstPlotVtab *vtab, const char *name, 
-*                           AstFrame *frame, const float *graphbox, 
-*                           const double *basebox )
-
-*  Class Membership:
-*     Plot initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Plot object. It allocates memory (if necessary) to accommodate
-*     the Plot plus any additional data associated with the derived class.
-*     It then initialises a Plot structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Plot at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Plot is to be created. This
-*        must be of sufficient size to accommodate the Plot data
-*        (sizeof(Plot)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Plot (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Plot
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Plot's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Plot. If NULL, the vtab associated with this class
-*        (Plot) will be used.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame or Frameset to be annotated.
-*     graphbox
-*        A pointer to an array of 4 values giving the graphics coordinates 
-*        of the bottom left and top right corners of a box on the graphics 
-*        output device. The first pair of values should be the graphics 
-*        coordinates of the bottom left corner of the box and the second
-*        pair of values are the graphics coordinates of the top right corner.
-*        The horizontal axis should be given first in each pair.
-*     basebox
-*        A pointer to an array of 4 values giving the coordinates in the
-*        supplied Frame or base Frame of the supplied FrameSet at the bottom 
-*        left and top right corners of the box specified by parameter graphbox.
-*        These should be supplied in the same order as for parameter "graphbox".
-
-*  Returned Value:
-*     A pointer to the new Plot.
-
-*  Notes:
-*     - If the supplied Frame, or base Frame if a FrameSet was supplied, 
-*     has more than 2 axes, then the sub-Frame defined by the first 2 axes 
-*     is used.
-*     -  The current Frame of the supplied FrameSet need not be 2-dimensional.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *baseframe;         /* Pointer to base frame */
-   AstFrame *graphicsframe;     /* Pointer to graphics frame */
-   AstFrameSet *fset0;          /* The n-D FrameSet to be annotated */
-   AstFrameSet *fset;           /* The 2-D FrameSet to be annotated */
-   AstPlot *new;                /* Pointer to new Plot */
-   AstWinMap *map;              /* Mapping for converting bbox -> gbox */
-   char *mess;                  /* Pointer to a descriptive message */
-   double gbox[ 4 ];            /* Double precision version of "graphbox" */
-   int axis;                    /* Axis index, 0 or 1 */
-   int bi;                      /* Index of base frame */
-   int ci;                      /* Index of current frame */
-   int i;                       /* Loop count */
-   int id;                      /* Plot object id */
-   int naxes;                   /* No. of axes in frame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(frame);
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   fset = NULL;
-   mess = NULL;
-
-/* If no vtab was supplied, use the vtab for this class (Plot). */
-   if( !vtab ) {
-      vtab = &class_vtab;
-      if ( !class_init ) {
-         astInitPlotVtab( vtab, "Plot" );
-         class_init = 1;
-      }
-
-/* If necessary, initialise the virtual function table. */
-   } else if ( init ) {
-      astInitPlotVtab( vtab, name );
-   }
-
-/* Initialise. */
-   new = NULL;
-   baseframe = NULL;
-
-/* First of all we need to ensure that we have a FrameSet and a base 
-   Frame on which to base the new Plot. If a NULL Frame pointer was 
-   supplied, create a default 2-D Frame, and then create a FrameSet 
-   containing just this default Frame. Also store a pointer to a 
-   message which can be used to describe the object within error 
-   messages. */
-   if( !frame ){
-      baseframe = astFrame( 2, "", status );
-      fset = astFrameSet( baseframe, "", status );
-      mess = "default 2-d Frame";
-
-/* If an object was supplied, report an error if it is not a Frame or 
-   an object derived from a Frame (such as a FrameSet). */
-   } else if( !astIsAFrame( frame ) ){
-      if( astOK ){
-         astError( AST__BDOBJ, "astInitPlot(%s): Supplied Object (class '%s') "
-                   "is not a Frame.", status, name, astGetClass( frame ) );
-      }
-
-/* If the supplied object is a Plot or an object derived from a Plot (a Plot 
-   is a sort of Frame and so will pass the above test), extract a
-   FrameSet from the Plot, and clear the Domain attribute for any existing 
-   Frames which have Domain GRAPHICS. */
-   } else if( astIsAPlot( frame ) ){
-      fset0 = astFrameSet( frame, "", status );
-      fset = astCopy( fset0 );
-      fset0 = astAnnul( fset0 );
-
-      for( i = 0; i < astGetNframe( fset ); i++ ) {
-         graphicsframe = astGetFrame( fset, i );
-         if( !strcmp( astGetDomain( graphicsframe ), "GRAPHICS" ) ) {
-            astClearDomain( graphicsframe );
-         }
-         graphicsframe = astAnnul( graphicsframe );
-      }
-
-      baseframe = astGetFrame( fset, astGetBase( fset ) );
-      mess = "base Frame of the supplied Plot";
-   
-/* If the object is not a FrameSet, create a FrameSet holding the 
-   supplied Frame. If the Frame is not 2D, an extra 2D Frame is 
-   included in the FrameSet derived from axes 1 and 2 of the supplied
-   Frame. This new Frame becomes the base Frame. */
-   } else if( !astIsAFrameSet( frame ) ){
-      fset0 = astFrameSet( frame, "", status );
-      mess = "supplied Frame";
-      fset = Fset2D( fset0, AST__BASE, status );      
-      fset0 = astAnnul( fset0 );
-      baseframe = astGetFrame( fset, astGetBase( fset ) );
-
-/* If a FrameSet was supplied, ensure it has a 2D base Frame.
-   If the supplied FrameSet is not 2D, then a new base Frame is 
-   inserted into it which is derived from axes 1 and 2 of the 
-   original base Frame. */
-   } else {
-      fset = Fset2D( (AstFrameSet *) frame, AST__BASE, status );      
-      baseframe = astGetFrame( fset, astGetBase( fset ) );
-      mess = "base Frame of the supplied FrameSet";
-   }
-
-/* Check that there are 2 axes in the base frame of the FrameSet. */
-   naxes = astGetNaxes( baseframe );
-   if ( naxes != 2 && astOK ) {
-      astError( AST__NAXIN, "astInitPlot(%s): Number of axes (%d) in the %s "
-                "is invalid - this number should be 2.", status, name, naxes, mess );
-   } 
-
-/* Check that neither dimension of the graphbox is zero. */
-   if( ( graphbox[ 2 ] == graphbox[ 0 ] ||
-         graphbox[ 3 ] == graphbox[ 1 ] ) && astOK ){
-      astError( AST__BADBX, "astInitPlot(%s): The plotting area has zero size "
-                "in the graphics world coordinate system.", status, name );
-   }
-
-/* Check that neither dimension of the graphbox is bad. */
-   if( astISBAD(graphbox[0]) || astISBAD(graphbox[1]) ||
-       astISBAD(graphbox[2]) || astISBAD(graphbox[3]) ) {
-      astError( AST__BADBX, "astInitPlot(%s): The plotting area has undefined limits "
-                "in the graphics world coordinate system.", status, name );
-   }
-
-/* Check that neither dimension of the basebox is zero. */
-   if( astISBAD(basebox[2]) || astISBAD(basebox[0]) ) {
-      astError( AST__BADBX, "astInitPlot(%s): The limits of the horizontal "
-                "axis of the %s are undefined or bad.", status, name, name );
-   } else if( astISBAD(basebox[3]) || astISBAD(basebox[1]) ) {
-      astError( AST__BADBX, "astInitPlot(%s): The limits of the vertical "
-                "axis of the %s are undefined or bad.", status, name, name );
-   }
-
-/* Create a Frame which describes the graphics world coordinate system. */
-   graphicsframe = astFrame( 2,
-                             "Domain=GRAPHICS,Title=Graphical Coordinates", status );
-
-/* Initialise a FrameSet structure (the parent class) as the first
-   component within the Plot structure, allocating memory if necessary. 
-   The new FrameSet is initialised to hold the graphics Frame created 
-   above. */
-   new = (AstPlot *) astInitFrameSet( mem, size, 0, (AstFrameSetVtab *) vtab,
-                                      name, graphicsframe );
-
-   if ( astOK ) {
-
-/* Initialise the Plot data. */
-/* ----------------------------- */
-
-/* Get a double precision version of "graphbox". */
-      gbox[ 0 ] = (double) graphbox[ 0 ];
-      gbox[ 1 ] = (double) graphbox[ 1 ];
-      gbox[ 2 ] = (double) graphbox[ 2 ];
-      gbox[ 3 ] = (double) graphbox[ 3 ];
-
-/* Store the bounds in graphics coordinates of the clipping box, ensuring
-   that the low bound is lower than the high bound. Set flags to indicate
-   if the supplied bounds has to be reversed to do this (some graphics
-   system have the Y axis increasing from the top of the screen to the
-   bottom). */
-      if( graphbox[ 0 ] <= graphbox[ 2 ] ){
-         new->xlo = gbox[ 0 ];
-         new->xhi = gbox[ 2 ];
-         new->xrev = 0;
-      } else {
-         new->xhi = gbox[ 0 ];
-         new->xlo = gbox[ 2 ];
-         new->xrev = 1;
-         astSetDirection( graphicsframe, 0, 0 );
-      }
-       if( graphbox[ 1 ] <= graphbox[ 3 ] ){
-         new->ylo = gbox[ 1 ];
-         new->yhi = gbox[ 3 ];
-         new->yrev = 0;
-      } else {
-         new->yhi = gbox[ 1 ];
-         new->ylo = gbox[ 3 ];
-         new->yrev = 1;
-         astSetDirection( graphicsframe, 1, 0 );
-      }
-
-/* Store the bounds of the Plot within the base Frame of the supplied
-   FrameSet. */
-      new->bbox[ 0 ] = basebox[ 0 ];
-      new->bbox[ 1 ] = basebox[ 1 ];
-      new->bbox[ 2 ] = basebox[ 2 ];
-      new->bbox[ 3 ] = basebox[ 3 ];
-
-/* We initially assume that the base Frame of the supplied FrameSet is
-   mapped lineary onto the graphics frame. This may be changed later by
-   assigning values to the LogPlot attributes. Create a WinMap which 
-   maps the base box (within the base Frame of the supplied FrameSet) 
-   onto the graphics box. */
-      map = astWinMap( 2, gbox, gbox + 2, basebox, basebox + 2, "", status );
-
-/* Get the index of the current (physical) and base (pixel) Frames in 
-   the supplied FrameSet. */
-      bi = astGetBase( fset );
-      ci = astGetCurrent( fset );
-
-/* Temporarily set the current Frame to be the pixel frame. */
-      astSetCurrent( fset, bi );
-
-/* Add the supplied FrameSet into the Plot (i.e. FrameSet) created 
-   earlier. This leaves the graphics frame with index 1 in the 
-   returned  Plot. We use the linear mapping initially. */
-      astAddFrame( (AstFrameSet *) new, 1, map, fset );
-      map = astAnnul( map );
-
-/* Set the current Frame in the Plot to be the physical coordinate Frame 
-   (with index incremented by one because the graphics Frame has been added). */
-      astSetCurrent( (AstFrameSet *) new, ci + 1 );
-
-/* Re-establish the original current Frame in the supplied FrameSet. */
-      astSetCurrent( fset, ci );
-
-/* Store a value of -1.0 for Tol to indicate that no value has yet been
-   set. This will cause a default value of 0.001 to be used. */
-      new->tol = -1.0;
-
-/* Set up default clipping information which gives no clipping. */
-      new->clip_frame = AST__NOFRAME;
-      new->clip_lbnd = NULL;
-      new->clip_ubnd = NULL;
-      new->clip_axes = 0;
-
-/* Is a grid covering the plotting area required? Store a value of -1  
-   to indicate that no value has yet been set. This will cause a default
-   value of 0 (no) to be used. */
-      new->grid = -1;
-
-/* Are tick marks to be placed on both edges in a pair of opposite edges?
-   Store a value of -1 to indicate that no value has yet been set. This will 
-   cause a default value of 1 (yes) to be used. */
-      new->tickall = -1;
-
-/* Graphics context identifier */
-      new->grfcontext = NULL;
-      new->grfcontextID = NULL;
-
-/* Shoudl ast Grid draw a boundary round the regions of valid coordinates? 
-   Store a value of -1 to indicate that no value has yet been set. This will 
-   cause a default value of 1 (yes) to be used. */
-      new->border = -1;
-
-/* Should graphics be drawn invisible? Store a value of -1 to indicate that 
-   no value has yet been set. This will cause a default value of 0 (no) to 
-   be used. */
-      new->invisible = -1;
-
-/* By default clip markers but not curves at the boundary of the plotting
-   area. This was the only behaviour available prior to the introduction of
-   the Clip attribute, and is chosen as the default to maintain backwards
-   compatibility. */
-      new->clip = -1;
-
-/* Is clipping to be done using a logical OR operation between the axes? 
-   Store a value of -1 to indicate that no value has yet been set. This will 
-   cause a default value of 0 (no, i.e. a logical AND) to be used. */
-      new->clipop = -1;
-
-/* Is the graphics interface registered using astGrfSet to be used?
-   Store a value of -1 to indicate that no value has yet been set. This will 
-   cause a default value of 0 (no, i.e. use the graphics interface
-   selected at link-time) to be used. */
-      new->grf = -1;
-
-/* Wrapper functions to call the drawing routines. These are the 
-   default wrappers which call GRF routines written in C. Alternative
-   wrappers are defined in fplot.c for use with GRF routines written in 
-   F77. */
-      new->GAttr = CGAttrWrapper;
-      new->GFlush = CGFlushWrapper;
-      new->GLine = CGLineWrapper;
-      new->GMark = CGMarkWrapper;
-      new->GText = CGTextWrapper;
-      new->GCap = CGCapWrapper;
-      new->GTxExt = CGTxExtWrapper;
-      new->GScales = CGScalesWrapper;
-      new->GQch = CGQchWrapper;
-
-      for( i = 0; i < AST__NGRFFUN; i++ ) new->grffun[i] = NULL;
-      new->grfstack = NULL;
-      new->grfnstack = 0;
-
-/* Is a title to be added to an annotated grid? Store a value of -1 to 
-   indicate that no value has yet been set. This will cause a default value 
-   of 1 (yes) to be used. */
-      new->drawtitle = -1;
-
-/* Are escape sequences within text strings to be interpreted? If not,
-   they are printed literally. Store a value of -1 when not set.
-   This will cause a default value of 1 (yes) to be used. */
-      new->escape = -1;
-
-/* A boolean attribute indicating where numerical labels are to be 
-   placed; zero implies round the edges of the plotting area; non-zero 
-   implies within the plotting area. The unset value of -9999 yields a 
-   default of zero. */
-      new->labelling = -9999;
-
-/* Graphics attributes. Default behaviour is to use the current values. */
-      for( id = 0; id < AST__NPID; id++ ){
-         new->style[ id ] = -1;
-         new->font[ id ] = -1;
-         new->colour[ id ] = -1;
-         new->width[ id ] = AST__BAD;
-         new->size[ id ] = AST__BAD;
-      }
-
-/* The space between the top edge and the grid title as a fraction of the 
-   minimum dimension of the plotting area. Store AST__BAD to indicate that no
-   value has been set. This will cause a default of 0.05 to be used. */
-      new->titlegap = AST__BAD;
-
-/* Initialise the protected Ink attribute so that visible ink is used. */
-      new->ink = -1;
-
-/* A stack of AstGat pointers used to store the graphical attributes for
-   text within strings which include graphical escape sequences. */
-      new->gat = NULL;
-      new->ngat = 0;
-
-/* Now set the attribute values for each axis. The arrays stored in the
-   Plot struture allow for 3 graphics axes (e.g. as used by a Plot3D) so
-   we initialise 3 axes here even though the Plot class only uses 2. */
-      for( axis = 0; axis < 3; axis++ ) {
-
-/* Are curves to be drawn through the tick marks even if no grid is
-   produced? Store a value of -1 to indicate that no value has yet been 
-   set. This will cause a default value of 1 (yes) to be used. */
-         new->drawaxes[ axis ] = -1;
-
-/* Are adjacent numerical axis labels to be abbreviated by removing matching
-   leading fields? Store a value of -1 to indicate that no value has yet been 
-   set. This will cause a default value of 1 (yes) to be used. */
-         new->abbrev[ axis ] = -1;
-
-/* The length of the major tick marks as a fraction of the minimum
-   dimension of the plotting area. Store AST__BAD to indicate that no
-   value has been set. This will cause a default of 0.015 to be used. */
-         new->majticklen[ axis ] = AST__BAD;
-
-/* The length of the minor tick marks as a fraction of the minimum
-   dimension of the plotting area. Store AST__BAD to indicate that no
-   value has been set. This will cause a default of 0.007 to be used. */
-         new->minticklen[ axis ] = AST__BAD;
-
-/* Are numeric labels to be drawn upright? Store a value of -1 to indicate 
-   that no value has yet been set. This will cause a default value of 0 (no)
-   to be used. */
-         new->labelup[ axis ] = -1;
-
-/* The space between an axis and its numeric labels as a fraction of the 
-   minimum dimension of the plotting area. Store AST__BAD to indicate that no
-   value has been set. This will cause a default of 0.01 to be used. */
-         new->numlabgap[ axis ] = AST__BAD;
-         new->textlabgap[ axis ] = AST__BAD;
-
-/* The edges on which to put labels for axes 1 and 2. Store values of -1
-   to indicate that no values have been set. This will cause default values
-   to be used. */
-         new->edge[ axis ] = -1;
-
-/* The placement of labels within the plotting area will be done
-   automatically by default. */
-         new->labelat[ axis ] = AST__BAD;
-
-/* The central tick is placed automatically by default. */
-         new->centre[ axis ] = AST__BAD;
-
-/* The gap between tick marks and the number of minor tick marks will be
-   found automatically by default. */
-         new->gap[ axis ] = AST__BAD;
-         new->loggap[ axis ] = AST__BAD;
-         new->mintick[ axis ] = -1;
-
-/* Both axes will be labelled by default. */
-         new->numlab[ axis ] = -1;
-         new->textlab[ axis ] = -1;
-         new->labelunits[ axis ] = -1;
-
-/* Log/lin attributes. Default value is to use linear axes. */
-         new->logplot[ axis ] = -1;
-         new->logticks[ axis ] = -1;
-         new->loglabel[ axis ] = -1;
-
-/* Initialise the components used to store the values actually used
-   for attributes which have dynamic defaults. */
-         new->ulglb[ axis ] = new->loglabel[ axis ];
-         new->ulgtk[ axis ] = new->logticks[ axis ];
-         new->uloggap[ axis ] = new->loggap[ axis ];
-         new->ugap[ axis ] = new->gap[ axis ];
-         new->ucentre[ axis ] = new->centre[ axis ];
-         new->uedge[ axis ] = new->edge[ axis ];
-         new->ulblat[ axis ] = new->labelat[ axis ];
-         new->ulbunit[ axis ] = new->labelunits[ axis ];
-         new->umintk[ axis ] = new->mintick[ axis ];
-         new->utxtlb[ axis ] = new->textlab[ axis ];
-         new->umjtkln[ axis ] = new->majticklen[ axis ];
-
-/* Initialise the arrays used to hold information describing the tick
-   marks that have been drawn for the axis. */
-         new->majtickgx[ axis ] = NULL;
-         new->majtickgy[ axis ] = NULL;
-         new->majtickcount[ axis ] = 0;
-         new->mintickgx[ axis ] = NULL;
-         new->mintickgy[ axis ] = NULL;
-         new->mintickcount[ axis ] = 0;
-         new->nmajtickval[ axis ] = 0;
-         new->majtickval[ axis ] = NULL;
-         new->nmintickval[ axis ] = 0;
-         new->mintickval[ axis ] = NULL;
-      }
-   
-      new->ugrid = new->grid;
-      new->ulbling = new->labelling;
-      new->uborder = new->border;
-
-   }
-
-/* Annul the frame. */
-   graphicsframe = astAnnul( graphicsframe );
-
-/* If an error occurred, clean up by deleting the new object. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Annul the pointer to the base Frame and FrameSet. */
-   baseframe = astAnnul( baseframe );
-   fset = astAnnul( fset );
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstPlot *astLoadPlot_( void *mem, size_t size,
-                       AstPlotVtab *vtab, const char *name,
-                       AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPlot
-
-*  Purpose:
-*     Load a Plot.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "Plot.h"
-*     AstPlot *astLoadPlot( void *mem, size_t size,
-*                           AstPlotVtab *vtab, const char *name,
-*                           AstChannel *channel )
-
-*  Class Membership:
-*     Plot loader.
-
-*  Description:
-*     This function is provided to load a new Plot using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Plot structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Plot at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Plot is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Plot data (sizeof(Plot)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Plot (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Plot structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPlot) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Plot. If this is NULL, a pointer
-*        to the (static) virtual function table for the Plot class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Plot" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Plot.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPlot *new;                 /* Pointer to the new Plot */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   char *text;                   /* Textual version of integer value */
-   int axis;                     /* Zero based axis index */
-   int id;                       /* Zero based graphical object id */
-   int i;                        /* Loop count */
-   int itick;                    /* Tick mark index */
-   int nax;                      /* Number of base Frame axes */
-   int ntick;                    /* Total number of ticks */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Plot. In this case the
-   Plot belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPlot );
-      vtab = &class_vtab;
-      name = "Plot";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPlotVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Plot. */
-   new = astLoadFrameSet( mem, size, (AstFrameSetVtab *) vtab, name,
-                          channel );
-
-   if ( astOK ) {
-
-/* Get the number of graphics (base) frame axes - 2 for a Plot, 3 for a
-   Plot3D. */
-   nax = astGetNin( new );
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Plot" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Tol. */
-/* ---- */
-      new->tol = astReadDouble( channel, "tol", -1.0 );
-      if ( TestTol( new, status ) ) SetTol( new, new->tol, status );
-
-/* Grid. */
-/* ----- */
-      new->grid = astReadInt( channel, "grid", -1 );
-      if ( TestGrid( new, status ) ) SetGrid( new, new->grid, status );
-
-/* TickAll. */
-/* -------- */
-      new->tickall = astReadInt( channel, "tckall", -1 );
-      if ( TestTickAll( new, status ) ) SetTickAll( new, new->tickall, status );
-
-/* ForceExterior. */
-/* -------- */
-      new->forceexterior = astReadInt( channel, "frcext", -1 );
-      if ( TestForceExterior( new, status ) ) SetForceExterior( new, new->forceexterior, status );
-
-/* Invisible. */
-/* ---------- */
-      new->invisible = astReadInt( channel, "invsbl", -1 );
-      if ( TestInvisible( new, status ) ) SetInvisible( new, new->invisible, status );
-
-/* Border. */
-/* -------- */
-      new->border = astReadInt( channel, "border", -1 );
-      if ( TestBorder( new, status ) ) SetBorder( new, new->border, status );
-
-/* ClipOp. */
-/* ------- */
-      new->clipop = astReadInt( channel, "clpop", -1 );
-      if ( TestClipOp( new, status ) ) SetClipOp( new, new->clipop, status );
-
-/* Clip. */
-/* ----- */
-      new->clip = astReadInt( channel, "clip", -1 );
-      if ( TestClip( new, status ) ) SetClip( new, new->clip, status );
-
-/* DrawTitle. */
-/* --------- */
-      new->drawtitle = astReadInt( channel, "drwttl", -1 );
-      if ( TestDrawTitle( new, status ) ) SetDrawTitle( new, new->drawtitle, status );
-
-/* LabelUp(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lblup%d", axis + 1 );
-         new->labelup[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestLabelUp( new, axis, status ) ) SetLabelUp( new, axis,
-                                                     new->labelup[ axis ], status );
-      }
-
-/* LogPlot(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lgplt%d", axis + 1 );
-         new->logplot[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestLogPlot( new, axis, status ) ) SetLogPlot( new, axis,
-                                                     new->logplot[ axis ], status );
-      }
-
-/* LogTicks(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lgtck%d", axis + 1 );
-         new->logticks[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestLogTicks( new, axis, status ) ) SetLogTicks( new, axis,
-                                                       new->logticks[ axis ], status );
-      }
-
-/* LogLabel(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lglbl%d", axis + 1 );
-         new->loglabel[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestLogLabel( new, axis, status ) ) SetLogLabel( new, axis,
-                                                       new->loglabel[ axis ], status );
-      }
-
-/* DrawAxes. */
-/* --------- */
-      new->drawaxes[ 0 ] = astReadInt( channel, "drwaxs", -1 );
-
-      if(  new->drawaxes[ 0 ] != -1 ) {
-         new->drawaxes[ 1 ] = new->drawaxes[ 0 ];
-         if ( TestDrawAxes( new, 0, status ) ) SetDrawAxes( new, 0, new->drawaxes[ 0 ], status );
-         if ( TestDrawAxes( new, 1, status ) ) SetDrawAxes( new, 1, new->drawaxes[ 1 ], status );
-
-      } else {
-         for( axis = 0; axis < nax; axis++ ){
-            (void) sprintf( buff, "drwaxs%d", axis + 1 );
-            new->drawaxes[ axis ] = astReadInt( channel, buff, -1 );
-            if ( TestDrawAxes( new, axis, status ) ) SetDrawAxes( new, axis,
-                                                       new->drawaxes[ axis ], status );
-         }
-      }
-
-/* Abbrev. */
-/* ------- */
-      new->abbrev[ 0 ] = astReadInt( channel, "abbrv", -1 );
-
-      if(  new->abbrev[ 0 ] != -1 ) {
-         new->abbrev[ 1 ] = new->abbrev[ 0 ];
-         if ( TestAbbrev( new, 0, status ) ) SetAbbrev( new, 0, new->abbrev[ 0 ], status );
-         if ( TestAbbrev( new, 1, status ) ) SetAbbrev( new, 1, new->abbrev[ 1 ], status );
-
-      } else {
-         for( axis = 0; axis < nax; axis++ ){
-            (void) sprintf( buff, "abbrv%d", axis + 1 );
-            new->abbrev[ axis ] = astReadInt( channel, buff, -1 );
-            if ( TestAbbrev( new, axis, status ) ) SetAbbrev( new, axis,
-                                                       new->abbrev[ axis ], status );
-         }
-      }
-
-
-/* Escape. */
-/* ------- */
-      new->escape = astReadInt( channel, "escape", -1 );
-      if ( TestEscape( new, status ) ) SetEscape( new, new->escape, status );
-
-/* LabelAt(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lblat%d", axis + 1 );
-         new->labelat[ axis ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestLabelAt( new, axis, status ) ) SetLabelAt( new, axis,
-                                                     new->labelat[ axis ], status );
-      }
-
-/* Centre(axis). */
-/* ------------ */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "cen%d", axis + 1 );
-         new->centre[ axis ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestCentre( new, axis, status ) ) SetCentre( new, axis,
-                                                   new->centre[ axis ], status );
-      }
-
-/* Gap(axis). */
-/* ---------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "gap%d", axis + 1 );
-         new->gap[ axis ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestGap( new, axis, status ) ) SetGap( new, axis, new->gap[ axis ], status );
-      }
-
-/* LogGap(axis). */
-/* ------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lggap%d", axis + 1 );
-         new->loggap[ axis ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestLogGap( new, axis, status ) ) SetLogGap( new, axis, new->loggap[ axis ], status );
-      }
-
-/* NumLabGap(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "nmgap%d", axis + 1 );
-         new->numlabgap[ axis ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestNumLabGap( new, axis, status ) ) SetNumLabGap( new, axis,
-                                                     new->numlabgap[ axis ], status );
-      }
-
-/* TextLabGap(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "txgap%d", axis + 1 );
-         new->textlabgap[ axis ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestTextLabGap( new, axis, status ) ) SetTextLabGap( new, axis,
-                                                     new->textlabgap[ axis ], status );
-      }
-
-/* NumLab(axis). */
-/* ---------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "nmlbl%d", axis + 1 );
-         new->numlab[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestNumLab( new, axis, status ) ) SetNumLab( new, axis,
-                                                     new->numlab[ axis ], status );
-      }
-
-/* MinTick(axis). */
-/* --------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "mntks%d", axis + 1 );
-         new->mintick[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestMinTick( new, axis, status ) ) SetMinTick( new, axis,
-                                                       new->mintick[ axis ], status );
-      }
-
-/* TextLab(axis). */
-/* -------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "txlbl%d", axis + 1 );
-         new->textlab[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestTextLab( new, axis, status ) ) SetTextLab( new, axis,
-                                                      new->textlab[ axis ], status );
-      }
-
-/* LabelUnits(axis). */
-/* --------------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "lbunt%d", axis + 1 );
-         new->labelunits[ axis ] = astReadInt( channel, buff, -1 );
-         if ( TestLabelUnits( new, axis, status ) ) SetLabelUnits( new, axis,
-                                                      new->labelunits[ axis ], status );
-      }
-
-/* Style(object). */
-/* ------------ */
-      for( id = 0; id < AST__NPID; id++ ){
-         (void) sprintf( buff, "style%d", id + 1 );
-         new->style[ id ] = astReadInt( channel, buff, -1 );
-         if ( TestStyle( new, id, status ) ) SetStyle( new, id, new->style[ id ], status );
-      }
-
-/* Font(object). */
-/* ----------- */
-      for( id = 0; id < AST__NPID; id++ ){
-         (void) sprintf( buff, "font%d", id + 1 );
-         new->font[ id ] = astReadInt( channel, buff, -1 );
-         if ( TestFont( new, id, status ) ) SetFont( new, id, new->font[ id ], status );
-      }
-
-/* Colour(object). */
-/* --------------- */
-      for( id = 0; id < AST__NPID; id++ ){
-         (void) sprintf( buff, "col%d", id + 1 );
-         new->colour[ id ] = astReadInt( channel, buff, -1 );
-         if ( TestColour( new, id, status ) ) SetColour( new, id, new->colour[ id ], status );
-      }
-
-/* Width(object). */
-/* ------------ */
-      for( id = 0; id < AST__NPID; id++ ){
-         (void) sprintf( buff, "width%d", id + 1 );
-         new->width[ id ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestWidth( new, id, status ) ) SetWidth( new, id, new->width[ id ], status );
-      }
-
-/* Size(object). */
-/* ----------- */
-      for( id = 0; id < AST__NPID; id++ ){
-         (void) sprintf( buff, "size%d", id + 1 );
-         new->size[ id ] = astReadDouble( channel, buff, AST__BAD );
-         if ( TestSize( new, id, status ) ) SetSize( new, id, new->size[ id ], status );
-      }
-
-/* TitleGap. */
-/* --------- */
-      new->titlegap = astReadDouble( channel, "ttlgap", AST__BAD );
-      if ( TestTitleGap( new, status ) ) SetTitleGap( new, new->titlegap, status );
-
-/* MajTickLen. */
-/* ----------- */
-/* Retained in order to read old Plots - new Plots use MajTickLen(axis). */
-      new->majticklen[ 0 ] = astReadDouble( channel, "mjtkln", AST__BAD );
-      if( new->majticklen[ 0 ] != AST__BAD ) {
-         new->majticklen[ 1 ] = new->majticklen[ 0 ];
-         if ( TestMajTickLen( new, 0, status ) ) SetMajTickLen( new, 0, new->majticklen[ 0 ], status );
-         if ( TestMajTickLen( new, 1, status ) ) SetMajTickLen( new, 1, new->majticklen[ 1 ], status );
-
-/* MajTickLen(axis). */
-/* ----------------- */
-      } else {
-         for( axis = 0; axis < nax; axis++ ){
-            (void) sprintf( buff, "mjtkln%d", axis + 1 );
-            new->majticklen[ axis ] = astReadDouble( channel, buff, AST__BAD );
-            if ( TestMajTickLen( new, axis, status ) ) SetMajTickLen( new, axis,
-                                                        new->majticklen[ axis ], status );
-         }
-      }
-
-/* MinTickLen. */
-/* ----------- */
-/* Retained in order to read old Plots - new Plots use MinTickLen(axis). */
-      new->minticklen[ 0 ] = astReadDouble( channel, "mntkln", AST__BAD );
-      if( new->minticklen[ 0 ] != AST__BAD ) {
-         new->minticklen[ 1 ] = new->minticklen[ 0 ];
-         if ( TestMinTickLen( new, 0, status ) ) SetMinTickLen( new, 0, new->minticklen[ 0 ], status );
-         if ( TestMinTickLen( new, 1, status ) ) SetMinTickLen( new, 1, new->minticklen[ 1 ], status );
-
-/* MinTickLen(axis). */
-/* ----------------- */
-      } else {
-         for( axis = 0; axis < nax; axis++ ){
-            (void) sprintf( buff, "mntkln%d", axis + 1 );
-            new->minticklen[ axis ] = astReadDouble( channel, buff, AST__BAD );
-            if ( TestMinTickLen( new, axis, status ) ) SetMinTickLen( new, axis,
-                                                        new->minticklen[ axis ], status );
-         }
-      }
-
-/* Labelling. */
-/* ---------- */
-      text = astReadString( channel, "lbling", " " );
-      if( astOK && strcmp( text, " " ) ) {
-         new->labelling = FindString( 2, xlbling, text, 
-                                      "the Plot component 'Lbling'", 
-                                      "astRead", astGetClass( channel ), status );
-      } else {
-         new->labelling = -9999;
-      }
-      if ( TestLabelling( new, status ) ) SetLabelling( new, new->labelling, status );
-      text = astFree( text );
-
-/* Edge(axis). */
-/* ----------- */
-      for( axis = 0; axis < nax; axis++ ){
-         (void) sprintf( buff, "edge%d", axis + 1 );
-         text = astReadString( channel, buff, " " );
-         if( astOK && strcmp( text, " " ) ) {
-            new->edge[ axis ] = FindString( 4, xedge, text, 
-                                            "the Plot component 'Edge'", 
-                                            "astRead", astGetClass( channel ), status );
-         } else {
-            new->edge[ axis ] = -1;
-         }
-         if ( TestEdge( new, axis, status ) ) SetEdge( new, axis,
-                                               new->edge[ axis ], status );
-         text = astFree( text );
-      }
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* We have no graphics context. */
-      new->grfcontext = NULL;
-      new->grfcontextID = NULL;
-
-/* Initialise the protected Ink attribute so that visible ink is used. */
-      new->ink = -1;
-
-/* The number of bounds supplied for the clipping volume. */
-      new->clip_axes = astReadInt( channel, "clpaxs", 0 );
-      if ( new->clip_axes < 0 ) new->clip_axes = 0;
-
-/* The index of the clipping Frame within the Plot. */
-      new->clip_frame = astReadInt( channel, "clpfrm", AST__NOFRAME );
-
-/* If necessary, allocate memory to hold the bounds of the clipping volume. */
-      if( new->clip_axes > 0 ){
-         new->clip_lbnd = astMalloc( sizeof( double ) * (size_t) new->clip_axes );
-         new->clip_ubnd = astMalloc( sizeof( double ) * (size_t) new->clip_axes );
-
-/* If an error occurs, ensure that all allocated memory is freed. */
-         if ( !astOK ) {
-            new->clip_lbnd = (double *) astFree( (void *) new->clip_lbnd );
-            new->clip_ubnd = (double *) astFree( (void *) new->clip_ubnd );
-
-/* Otherwise, store the bounds. Use extreme defaults if no values are
-   available. */
-         } else {
-            for( axis = 0; axis < new->clip_axes; axis++ ){
-               (void) sprintf( buff, "clplb%d", axis + 1 );
-               new->clip_lbnd[ axis ] = astReadDouble( channel, buff, -DBL_MAX );
-
-               (void) sprintf( buff, "clpub%d", axis + 1 );
-               new->clip_ubnd[ axis ] = astReadDouble( channel, buff, DBL_MAX );
-            }
-         }
-
-/* If there are no clipping axes, store NULL pointers for the bounds
-   arrays. */
-      } else {
-         new->clip_lbnd = NULL;
-         new->clip_ubnd = NULL;
-      }
-
-/* The bounds of the plotting area in graphics coords. */   
-      new->xlo = astReadDouble( channel, "xlo", 0.0 );
-      new->xhi = astReadDouble( channel, "xhi", 1.0 );
-      new->ylo = astReadDouble( channel, "ylo", 0.0 );
-      new->yhi = astReadDouble( channel, "yhi", 1.0 );
-
-/* Axis reversal flags. */
-      new->xrev = astReadInt( channel, "xrev", 0 );
-      new->yrev = astReadInt( channel, "yrev", 0 );
-
-/* The bounds of the plotting area in the base Frame of the FrameSet
-   supplied when the Plot was constructed. */   
-      new->bbox[ 0 ] = astReadDouble( channel, "xb1", AST__BAD );
-      new->bbox[ 1 ] = astReadDouble( channel, "yb1", AST__BAD );
-      new->bbox[ 2 ] = astReadDouble( channel, "xb2", AST__BAD );
-      new->bbox[ 3 ] = astReadDouble( channel, "yb2", AST__BAD );
-
-/* Grf. */
-      new->grf = -1;
-      new->GAttr = CGAttrWrapper;
-      new->GFlush = CGFlushWrapper;
-      new->GLine = CGLineWrapper;
-      new->GMark = CGMarkWrapper;
-      new->GText = CGTextWrapper;
-      new->GCap = CGCapWrapper;
-      new->GTxExt = CGTxExtWrapper;
-      new->GScales = CGScalesWrapper;
-      new->GQch = CGQchWrapper;
-      for( i = 0; i < AST__NGRFFUN; i++ ) new->grffun[i] = NULL;
-      new->grfstack = NULL;
-      new->grfnstack = 0;
-
-/* A stack of AstGat pointers used to store the graphical attributes for
-   text within strings which include graphical escape sequences. */
-      new->gat = NULL;
-      new->ngat = 0;
-
-/* Arrays holding user-specified major and minot tick mark values. */
-      for( axis = 0; axis < 3; axis++ ) {
-         sprintf( buff, "nmjtk%d", axis + 1 );
-         ntick = astReadInt( channel, buff, 0 );
-         new->nmajtickval[ axis ] = ntick;
-         new->majtickval[ axis ] = astMalloc( ntick*sizeof( double ) );
-
-         for( itick = 0; itick < ntick; itick++ ) {
-            sprintf( buff, "mjtk%d_%d", axis + 1, itick + 1 );
-            new->majtickval[ axis ][ itick ] = astReadDouble( channel, buff, 
-                                                              AST__BAD );
-         }
-
-         sprintf( buff, "nmntk%d", axis + 1 );
-         ntick = astReadInt( channel, buff, 0 );
-         new->nmintickval[ axis ] = ntick;
-         new->mintickval[ axis ] = astMalloc( ntick*sizeof( double ) );
-
-         for( itick = 0; itick < ntick; itick++ ) {
-            sprintf( buff, "mntk%d_%d", axis + 1, itick + 1 );
-            new->mintickval[ axis ][ itick ] = astReadDouble( channel, buff, 
-                                                              AST__BAD );
-         }
-
-      }
-
-/* Initialise the arrays used to hold information describing the tick
-   marks that have already been drawn for each axis. */
-      for( axis = 0; axis < 3; axis++ ) {
-         new->majtickgx[ axis ] = NULL;
-         new->majtickgy[ axis ] = NULL;
-         new->majtickcount[ axis ] = 0;
-         new->mintickgx[ axis ] = NULL;
-         new->mintickgy[ axis ] = NULL;
-         new->mintickcount[ axis ] = 0;
-      }
-
-/* If an error occurred, clean up by deleting the new Plot. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Plot pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-    Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-int astBorder_( AstPlot *this, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,Plot,Border))(this, status );
-}
-
-void astBoundingBox_( AstPlot *this, float lbnd[2], float ubnd[2], int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,BoundingBox))(this,lbnd,ubnd, status );
-}
-
-void astClip_( AstPlot *this, int iframe, const double lbnd[], 
-const double ubnd[], int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,Clip))(this,iframe,lbnd,ubnd, status );
-}
-
-void astGrid_( AstPlot *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,Grid))(this, status );
-}
-
-int astCvBrk_( AstPlot *this, int ibrk, double *brk, double *vbrk,
-                   double *len, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,Plot,CvBrk))(this,ibrk,brk,vbrk,len, status );
-}
-
-void astMirror_( AstPlot *this, int axis, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,Mirror))(this,axis, status );
-}
-
-AstPointSet *astGetDrawnTicks_( AstPlot *this, int axis, int major, int *status ){
-   if( !astOK ) return NULL;
-   return (**astMEMBER(this,Plot,GetDrawnTicks))(this,axis,major, status );
-}
-
-void astSetTickValues_( AstPlot *this, int axis, int nmajor, double *major,
-                           int nminor, double *minor, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,SetTickValues))(this,axis,nmajor,major,nminor,minor, status );
-}
-
-void astCopyPlotDefaults_( AstPlot *this, int axis, AstPlot *dplot, 
-                           int daxis, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,CopyPlotDefaults))(this,axis,dplot,daxis, status );
-}
-
-int astGetLabelUnits_( AstPlot *this, int axis, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,Plot,GetLabelUnits))(this,axis, status );
-}
-
-void astMark_( AstPlot *this, int nmark, int ncoord, int indim,
-               const double *in, int type, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Plot,Mark))( this, nmark, ncoord, indim, in, type, status );
-}
-
-void astText_( AstPlot *this, const char *text, const double pos[], 
-               const float up[], const char *just, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Plot,Text))( this, text, pos, up, just, status );
-}
-
-void astGridLine_( AstPlot *this, int axis, const double start[], double length, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,GridLine))(this,axis,start,length, status );
-}
-
-void astCurve_( AstPlot *this, const double start[], const double finish[], int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,Curve))(this,start,finish, status );
-}
-
-void astGenCurve_( AstPlot *this, AstMapping *map, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,GenCurve))(this,map, status );
-}
-
-void astPolyCurve_( AstPlot *this, int npoint, int ncoord, int dim, 
-                    const double *in, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,PolyCurve))(this,npoint,ncoord,dim,in, status );
-}
-
-void astGrfSet_( AstPlot *this, const char *name, AstGrfFun fun, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,GrfSet))(this,name,fun, status );
-}
-
-void astGrfPush_( AstPlot *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,GrfPush))(this, status );
-}
-
-void astGrfPop_( AstPlot *this, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,GrfPop))(this, status );
-}
-
-void astGrfWrapper_( AstPlot *this, const char *name, AstGrfWrap wrapper, int *status ){
-   if( !astOK ) return;
-   (**astMEMBER(this,Plot,GrfWrapper))(this,name,wrapper, status );
-}
-
-void astSetLogPlot_( AstPlot *this, int axis, int value, int *status ) { 
-   if ( !astOK ) return; 
-   (**astMEMBER(this,Plot,SetLogPlot))( this, axis, value, status ); 
-}
-
-void astClearLogPlot_( AstPlot *this, int axis, int *status ) { 
-   if ( !astOK ) return; 
-   (**astMEMBER(this,Plot,ClearLogPlot))( this, axis, status ); 
-}
-
-AstKeyMap *astGetGrfContext_( AstPlot *this, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Plot,GetGrfContext))( this, status );
-}
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstPlot *astPlotId_( void *frame_void, const float graphbox[4], 
-                     const double basebox[4], const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astPlot
-f     AST_PLOT
-
-*  Purpose:
-*     Create a Plot.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "plot.h"
-c     AstPlot *astPlot( AstFrame *frame, const float graphbox[ 4 ], 
-c                       const double basebox[ 4 ], const char *options, ... ) 
-f     RESULT = AST_PLOT( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Plot constructor.
-
-*  Description:
-*     This function creates a new Plot and optionally initialises its
-*     attributes.
-*
-*     A Plot is a specialised form of FrameSet, in which the base
-*     Frame describes a "graphical" coordinate system and is
-*     associated with a rectangular plotting area in the underlying
-*     graphics system. This plotting area is where graphical output
-*     appears. It is defined when the Plot is created.
-*
-*     The current Frame of a Plot describes a "physical" coordinate
-*     system, which is the coordinate system in which plotting
-*     operations are specified. The results of each plotting operation
-*     are automatically transformed into graphical coordinates so as
-*     to appear in the plotting area (subject to any clipping which
-*     may be in effect).
-*
-*     Because the Mapping between physical and graphical coordinates
-*     may often be non-linear, or even discontinuous, most plotting
-*     does not result in simple straight lines. The basic plotting
-*     element is therefore not a straight line, but a geodesic curve
-c     (see astCurve). A Plot also provides facilities for drawing
-c     markers or symbols (astMark), text (astText) and grid lines
-c     (astGridLine). It is also possible to draw curvilinear axes with
-c     optional coordinate grids (astGrid).
-f     (see AST_CURVE). A Plot also provides facilities for drawing
-f     markers or symbols (AST_MARK), text (AST_TEXT) and grid lines
-f     (AST_GRIDLINE). It is also possible to draw curvilinear axes
-f     with optional coordinate grids (AST_GRID).
-*     A range of Plot attributes is available to allow precise control
-*     over the appearance of graphical output produced by these
-c     functions.
-f     routines.
-*
-*     You may select different physical coordinate systems in which to
-*     plot (including the native graphical coordinate system itself)
-*     by selecting different Frames as the current Frame of a Plot,
-*     using its Current attribute.  You may also set up clipping (see
-c     astClip) to limit the extent of any plotting you perform, and
-f     AST_CLIP) to limit the extent of any plotting you perform, and
-*     this may be done in any of the coordinate systems associated
-*     with the Plot, not necessarily the one you are plotting in.
-*
-*     Like any FrameSet, a Plot may also be used as a Frame. In this
-*     case, it behaves like its current Frame, which describes the
-*     physical coordinate system.
-*
-*     When used as a Mapping, a Plot describes the inter-relation
-*     between graphical coordinates (its base Frame) and physical
-*     coordinates (its current Frame).  It differs from a normal
-*     FrameSet, however, in that an attempt to transform points which
-*     lie in clipped areas of the Plot will result in bad coordinate
-*     values (AST__BAD).
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        Pointer to a Frame describing the physical coordinate system
-*        in which to plot. A pointer to a FrameSet may also be given,
-*        in which case its current Frame will be used to define the
-*        physical coordinate system and its base Frame will be mapped
-*        on to graphical coordinates (see below).
-*
-*        If a null Object pointer (AST__NULL) is given, a default
-*        2-dimensional Frame will be used to describe the physical
-*        coordinate system. Labels, etc. may then be attached to this
-*        by setting the appropriate Frame attributes
-*        (e.g. Label(axis)) for the Plot.
-c     graphbox
-f     GRAPHBOX( 4 ) = REAL (Given)
-*        An array giving the position and extent of the plotting area
-*        (on the plotting surface of the underlying graphics system)
-*        in which graphical output is to appear. This must be
-*        specified using graphical coordinates appropriate to the
-*        underlying graphics system.
-*
-*        The first pair of values should give the coordinates of the
-*        bottom left corner of the plotting area and the second pair
-*        should give the coordinates of the top right corner. The
-*        coordinate on the horizontal axis should be given first in
-*        each pair. Note that the order in which these points are
-*        given is important because it defines up, down, left and
-*        right for subsequent graphical operations.
-c     basebox
-f     BASEBOX( 4 ) = DOUBLE PRECISION (Given)
-*        An array giving the coordinates of two points in the supplied
-*        Frame (or in the base Frame if a FrameSet was supplied) which
-*        correspond to the bottom left and top right corners of the
-*        plotting area, as specified above. This range of coordinates
-*        will be mapped linearly on to the plotting area. The
-*        coordinates should be given in the same order as above.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Plot. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Plot. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPlot()
-f     AST_PLOT
-*        A pointer to the new Plot.
-
-*  Notes:
-*     - The base Frame of the returned Plot will be a new Frame which
-*     is created by this function to represent the coordinate system
-*     of the underlying graphics system (graphical coordinates). It is
-*     given a Frame index of 1 within the Plot. The choice of base
-*     Frame (Base attribute) should not, in general, be changed once a
-*     Plot has been created (although you could use this as a way of
-*     moving the plotting area around on the plotting surface).
-c     - If a Frame is supplied (via the "frame" pointer), then it
-f     - If a Frame is supplied (via the FRAME pointer), then it
-*     becomes the current Frame of the new Plot and is given a Frame
-*     index of 2.
-c     - If a FrameSet is supplied (via the "frame" pointer), then
-f     - If a FrameSet is supplied (via the FRAME pointer), then 
-*     all the Frames within this FrameSet become part of the new Plot
-*     (where their Frame indices are increased by 1), with the
-*     FrameSet's current Frame becoming the current Frame of the Plot.
-*     - If a null Object pointer (AST__NULL) is supplied (via the
-c     "frame" pointer), then the returned Plot will contain two
-f     FRAME pointer), then the returned Plot will contain two
-*     Frames, both created by this function. The base Frame will
-*     describe graphics coordinates (as above) and the current Frame
-*     will be a basic Frame with no attributes set (this will
-*     therefore give default values for such things as the Plot Title
-*     and the Label on each axis). Physical coordinates will be mapped
-*     linearly on to graphical coordinates.
-*     - An error will result if the Frame supplied (or the base Frame
-*     if a FrameSet was supplied) is not 2-dimensional.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astPlot constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astPlot_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "frame" parameter is of type
-*     (void *) and is converted from an ID value to a pointer and
-*     validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astPlot_ directly, so it must be a
-*     re-implementation of it in all respects, except for the
-*     conversions between IDs and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPlot *new;                 /* Pointer to new Plot */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get apointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   new = NULL;
-
-/* Obtain a Frame pointer from any ID supplied and validate the
-   pointer to ensure it identifies a valid Frame. */
-   if( frame_void ){
-      frame = astVerifyFrame( astMakePointer( frame_void ) );
-   } else {
-      frame = NULL;
-   }
-
-/* Check the pointer can be used. */
-   if ( astOK ) {
-
-/* Initialise the Plot, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitPlot( NULL, sizeof( AstPlot ), !class_init,
-                         &class_vtab, "Plot", frame, graphbox, 
-                         basebox );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Plot's attributes. */
-
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new Plot. */
-   return astMakeId( new );
-
-}
-
-
-
diff --git a/ast-5.3-1/plot.h b/ast-5.3-1/plot.h
deleted file mode 100644
index 1406e42..0000000
--- a/ast-5.3-1/plot.h
+++ /dev/null
@@ -1,1385 +0,0 @@
-#if !defined( PLOT_INCLUDED ) /* Include this file only once */
-#define PLOT_INCLUDED
-/*
-*+
-*  Name:
-*     plot.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Plot class.
-
-*  Invocation:
-*     #include "plot.h"
-
-*  Description:
-*     This include file defines the interface to the Plot class and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this class.
-*
-*     The Plot class provides facilities for producing graphical information
-*     describing positions within coordinate systems. These include the
-*     creation of annotated coordinate axes, the plotting of markers at given
-*     physical positions, etc.
-
-*  Inheritance:
-*     The Plot class inherits from the FrameSet class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     18-SEP-1996 (DSB):
-*        Original version.
-*     28-OCT-1998 (DSB):
-*        Added method astPolyCurve. 
-*     12-OCT-1999 (DSB):
-*        Allow tick marks to be specified separately for both axes.
-*     9-JAN-2001 (DSB):
-*        Change argument "in" for astMark and astPolyCurve from type
-*        "const double (*)[]" to "const double *".
-*     13-JUN-2001 (DSB):
-*        Added methods astGenCurve, astGrfSet, astGrfPop, astGrfPush and 
-*        attribute Grf.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitPlotVtab method.
-*     13-JAN-2004 (DSB):
-*        Added bbox, logticks and logplot to the AstPlot structure. Added 
-*        LogPlot and LogTicks accessor methods.
-*     19-JAN-2004 (DSB):
-*        Added loggap and loglabel to the AstPlot structure. Added 
-*        LogGap and LogLabel accessor methods.
-*     21-MAR-2005 (DSB):
-*        - Added the Clip attribute.
-*     24-OCT-2006 (DSB):
-*        - Remove duplicated documentation from prologue.
-*        - Add ForceExterior attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frameset.h"              /* Parent FrameSet class */
-#include "keymap.h"              
-#include "region.h"              
-
-#if defined(astCLASS)       /* Protected */
-#include "grf.h"              
-#endif
-
-/* C header files. */
-/* --------------- */
-#include <stddef.h>
-
-/* Macros. */
-/* ======= */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__NPID      20   /* No. of different genuine plot object id's */
-
-#define AST__GATTR	0   /* Identifiers for GRF functions */
-#define AST__GFLUSH	1   /* Note, if any items are added or changed here, */
-#define AST__GLINE	2   /* make sure that the astGrfFunID function is */
-#define AST__GMARK	3   /* updated in plot.c */
-#define AST__GTEXT	4
-#define AST__GTXEXT	5
-#define AST__GSCALES	6
-#define AST__GQCH	7
-#define AST__GCAP	8
-
-#define AST__NGRFFUN    9   /* No. of Grf functions used by Plot */
-
-#if defined(astCLASS)       /* Protected */
-#define AST__MXBRK     100  /* Max. no. of breaks in a drawn curve */
-
-/* Identifiers for the graphical elements of an annotated coord grid.
-   "Pseudo-elements" (i.e. values used to indicate a group of other
-   genuine elements) should come at the end of the list. The number of
-   genuine elements should be stored in AST__NPID. */
-#define AST__BORDER_ID       0 /* Id for astBorder curves */
-#define AST__CURVE_ID        1 /* Id for astCurve, astGenCurve or astPolyCurve curves */
-#define AST__TITLE_ID        2 /* Id for textual title */
-#define AST__MARKS_ID        3 /* Id for marks drawn by astMark */
-#define AST__TEXT_ID         4 /* Id for text strings drawn by astText */
-#define AST__AXIS1_ID        5 /* Id for axis 1 through interior tick marks */
-#define AST__AXIS2_ID        6 /* Id for axis 2 through interior tick marks */
-#define AST__AXIS3_ID        7 /* Id for axis 2 through interior tick marks */
-#define AST__NUMLAB1_ID      8 /* Id for numerical labels */
-#define AST__NUMLAB2_ID      9 /* Id for numerical labels */
-#define AST__NUMLAB3_ID     10 /* Id for numerical labels */
-#define AST__TEXTLAB1_ID    11 /* Id for textual axis labels */
-#define AST__TEXTLAB2_ID    12 /* Id for textual axis labels */
-#define AST__TEXTLAB3_ID    13 /* Id for textual axis labels */
-#define AST__TICKS1_ID      14 /* Id for major and minor tick marks */
-#define AST__TICKS2_ID      15 /* Id for major and minor tick marks */
-#define AST__TICKS3_ID      16 /* Id for major and minor tick marks */
-#define AST__GRIDLINE1_ID   17 /* Id for axis 1 astGridLine AST__curves */
-#define AST__GRIDLINE2_ID   18 /* Id for axis 2 astGridLine AST__curves */
-#define AST__GRIDLINE3_ID   19 /* Id for axis 2 astGridLine AST__curves */
-#define AST__AXES_ID        20 /* Id for axes through interior tick marks */
-#define AST__NUMLABS_ID     21 /* Id for numerical labels */
-#define AST__TEXTLABS_ID    22 /* Id for textual axis labels */
-#define AST__GRIDLINE_ID    23 /* Id for astGridLine AST__curves */
-#define AST__TICKS_ID       24 /* Id for major and minor tick marks */
-
-/* Define constants used to size global arrays in this module. */
-#define AST__PLOT_POLY_MAX  1000 /* Max. no. of points in a poly line */
-#define AST__PLOT_CRV_MXBRK 1000 /* Max. no. of breaks allowed in a plotted curve */
-#define AST__PLOT_STRIPESCAPES_BUFF_LEN 50 /* Length of string returned by astStripEscapes */
-
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions */
-/* ================ */
-
-/* Pre-declare the AstPlot structure so that it can be used within the 
-   GRF function typedefs. */
-struct AstPlot;
-
-/* Interfaces for GRF functions */
-/* ---------------------------- */
-/* A general interface into which actual Grf functions should be cast 
-   before being passed as an argument to astGrfSet. */
-typedef void (* AstGrfFun)( void );              
-
-/* Interfaces for specific Grf funstions implemented in C (other languages
-   may have different interfaces). */
-typedef int (* AstGAttrFun)( AstKeyMap *, int, double, double *, int );
-typedef int (* AstGFlushFun)( AstKeyMap * );
-typedef int (* AstGLineFun)( AstKeyMap *, int, const float *, const float * );
-typedef int (* AstGMarkFun)( AstKeyMap *, int, const float *, const float *, int );
-typedef int (* AstGTextFun)( AstKeyMap *, const char *, float, float, const char *, float, float );
-typedef int (* AstGCapFun)( AstKeyMap *, int, int );
-typedef int (* AstGTxExtFun)( AstKeyMap *, const char *, float, float, const char *, float, float, float *, float * );
-typedef int (* AstGScalesFun)( AstKeyMap *, float *, float * );
-typedef int (* AstGQchFun)( AstKeyMap *, float *, float * );
-
-/* A general interface into which Grf Wrapper functions should be cast 
-   before being passed as an argument to astGrfWrapper. */
-typedef void (* AstGrfWrap)( void );              
-
-/* Interfaces for the wrapper functions which wrap specific Grf funstions. */
-typedef int (* AstGAttrWrap)( struct AstPlot *, int, double, double *, int, int * );
-typedef int (* AstGFlushWrap)( struct AstPlot *, int * );
-typedef int (* AstGLineWrap)( struct AstPlot *, int, const float *, const float *, int * );
-typedef int (* AstGMarkWrap)( struct AstPlot *, int, const float *, const float *, int, int * );
-typedef int (* AstGTextWrap)( struct AstPlot *, const char *, float, float, const char *, float, float, int * );
-typedef int (* AstGCapWrap)( struct AstPlot *, int, int, int * );
-typedef int (* AstGTxExtWrap)( struct AstPlot *, const char *, float, float, const char *, float, float, float *, float *, int * );
-typedef int (* AstGScalesWrap)( struct AstPlot *, float *, float *, int * );
-typedef int (* AstGQchWrap)( struct AstPlot *, float *, float *, int * );
-
-/* A structure in which a collection of Grf function pointers can be
-   stored. */
-typedef struct AstGrfPtrs {
-   AstGrfFun grffun[AST__NGRFFUN];
-   AstGAttrWrap GAttr;
-   AstGFlushWrap GFlush;
-   AstGLineWrap GLine;
-   AstGMarkWrap GMark;
-   AstGTextWrap GText;
-   AstGCapWrap GCap;
-   AstGTxExtWrap GTxExt;
-   AstGScalesWrap GScales;
-   AstGQchWrap GQch;
-} AstGrfPtrs;
-
-/* Structure holding current graphical attribute values for text. */
-typedef struct AstGat {
-   float rise;
-   double size;
-   double width;
-   double col;
-   double font;
-   double style;
-} AstGat;
-
-/* Plot structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPlot {
-
-/* Attributes inherited from the parent class. */
-   AstFrameSet parent;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *clip_lbnd;
-   double *clip_ubnd;
-   double centre[ 3 ];
-   double gap[ 3 ];
-   double loggap[ 3 ];
-   double labelat[ 3 ];
-   double majticklen[ 3 ];
-   double minticklen[ 3 ];
-   double numlabgap[ 3 ];
-   double size[ AST__NPID ];
-   double textlabgap[ 3 ];
-   double titlegap;
-   double tol;
-   double ucentre[ 3 ];
-   double ugap[ 3 ];
-   double uloggap[ 3 ];
-   double ulblat[ 3 ];
-   double umjtkln[ 3 ];
-   double width[ AST__NPID ];
-   double *majtickgx[ 3 ];
-   double *majtickgy[ 3 ];
-   double *mintickgx[ 3 ];
-   double *mintickgy[ 3 ];
-   int majtickcount[ 3 ];
-   int mintickcount[ 3 ];
-   int nmajtickval[ 3 ];
-   double *majtickval[ 3 ];
-   int nmintickval[ 3 ];
-   double *mintickval[ 3 ];
-   double xhi;
-   double xlo;
-   double yhi;
-   double ylo;
-   double bbox[ 4 ];
-   int border;
-   int clip_axes;
-   int clip_frame;
-   int clip;
-   int clipop;
-   int colour[ AST__NPID ];
-   int drawaxes[ 3 ];
-   int abbrev[ 3 ];
-   int escape;
-   int drawtitle;
-   int edge[ 3 ];
-   int font[ AST__NPID ];
-   int grf;
-   int grid;
-   int invisible;
-   int labelling;
-   int labelunits[ 3 ];
-   int labelup[ 3 ];
-   int mintick[ 3 ];
-   int numlab[ 3 ];
-   int style[ AST__NPID ];
-   int textlab[ 3 ];
-   int tickall;
-   int forceexterior;
-   int uborder;
-   int uedge[ 3 ];
-   int ugrid;
-   int ulbling;
-   int ulbunit[ 3 ];
-   int ulgtk[ 3 ];
-   int ulglb[ 3 ];
-   int umintk[ 3 ];
-   int utxtlb[ 3 ];
-   int xrev;
-   int yrev;      
-   int ink;
-   int logplot[ 3 ];
-   int logticks[ 3 ];
-   int loglabel[ 3 ];
-   AstGrfFun grffun[AST__NGRFFUN];
-   AstGAttrWrap GAttr;
-   AstGFlushWrap GFlush;
-   AstGLineWrap GLine;
-   AstGMarkWrap GMark;
-   AstGTextWrap GText;
-   AstGCapWrap GCap;
-   AstGTxExtWrap GTxExt;
-   AstGScalesWrap GScales;
-   AstGQchWrap GQch;
-   AstGrfPtrs *grfstack;
-   int grfnstack;
-   AstGat **gat;
-   int ngat;
-   AstKeyMap *grfcontext;
-   AstKeyMap *grfcontextID;
-   float hmarkx;
-   float hmarky;
-
-} AstPlot;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-
-typedef struct AstPlotVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameSetVtab FrameSet_vtab;/* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstPointSet *(* GetDrawnTicks)( AstPlot *, int, int, int * );
-   void (* SetTickValues)( AstPlot *, int, int, double *, int, double *, int * );
-   void (* DrawExtraTicks)( AstPlot *, int, AstPointSet *, int * );
-   int (* Border)( AstPlot *, int * );
-   void (* BoundingBox)( AstPlot *, float[2], float[2], int * );
-   AstKeyMap *(* GetGrfContext)( AstPlot *, int * );
-   void (* Clip)( AstPlot *, int, const double [], const double [], int * );
-   int (* CvBrk)( AstPlot *, int, double *, double *, double *, int * );
-   void (* CopyPlotDefaults)( AstPlot *, int, AstPlot *, int, int * );
-   void (* Mirror)( AstPlot *, int, int * );
-   void (* GridLine)( AstPlot *, int, const double [], double, int * );
-   void (* Curve)( AstPlot *, const double [], const double [], int * );
-   void (* GenCurve)( AstPlot *, AstMapping *, int * );
-   void (* PolyCurve)( AstPlot *, int, int, int, const double *, int * );
-   void (* GrfSet)( AstPlot *, const char *, AstGrfFun, int * );
-   void (* GrfPush)( AstPlot *, int * );
-   void (* GrfPop)( AstPlot *, int * );
-   void (* GrfWrapper)( AstPlot *, const char *, AstGrfWrap, int * );
-   void (* Grid)( AstPlot *, int * ); 
-   void (* Mark)( AstPlot *, int, int, int, const double *, int, int * ); 
-   void (* Text)( AstPlot *, const char *, const double [], const float [], const char *, int * );
-
-   double (* GetTol)( AstPlot *, int * );
-   int (* TestTol)( AstPlot *, int * );
-   void (* SetTol)( AstPlot *, double, int * );
-   void (* ClearTol)( AstPlot *, int * );
-
-   int (* GetGrid)( AstPlot *, int * );
-   int (* TestGrid)( AstPlot *, int * );
-   void (* SetGrid)( AstPlot *, int, int * );
-   void (* ClearGrid)( AstPlot *, int * );
-
-   int (* GetTickAll)( AstPlot *, int * );
-   int (* TestTickAll)( AstPlot *, int * );
-   void (* SetTickAll)( AstPlot *, int, int * );
-   void (* ClearTickAll)( AstPlot *, int * );
-
-   int (* GetForceExterior)( AstPlot *, int * );
-   int (* TestForceExterior)( AstPlot *, int * );
-   void (* SetForceExterior)( AstPlot *, int, int * );
-   void (* ClearForceExterior)( AstPlot *, int * );
-
-   int (* GetInvisible)( AstPlot *, int * );
-   int (* TestInvisible)( AstPlot *, int * );
-   void (* SetInvisible)( AstPlot *, int, int * );
-   void (* ClearInvisible)( AstPlot *, int * );
-
-   int (* GetBorder)( AstPlot *, int * );
-   int (* TestBorder)( AstPlot *, int * );
-   void (* SetBorder)( AstPlot *, int, int * );
-   void (* ClearBorder)( AstPlot *, int * );
-
-   int (* GetClipOp)( AstPlot *, int * );
-   int (* TestClipOp)( AstPlot *, int * );
-   void (* SetClipOp)( AstPlot *, int, int * );
-   void (* ClearClipOp)( AstPlot *, int * );
-
-   int (* GetClip)( AstPlot *, int * );
-   int (* TestClip)( AstPlot *, int * );
-   void (* SetClip)( AstPlot *, int, int * );
-   void (* ClearClip)( AstPlot *, int * );
-
-   int (* GetGrf)( AstPlot *, int * );
-   int (* TestGrf)( AstPlot *, int * );
-   void (* SetGrf)( AstPlot *, int, int * );
-   void (* ClearGrf)( AstPlot *, int * );
-
-   int (* GetDrawTitle)( AstPlot *, int * );
-   int (* TestDrawTitle)( AstPlot *, int * );
-   void (* SetDrawTitle)( AstPlot *, int, int * );
-   void (* ClearDrawTitle)( AstPlot *, int * );
-
-   int (* GetLabelUp)( AstPlot *, int, int * );
-   int (* TestLabelUp)( AstPlot *, int, int * );
-   void (* SetLabelUp)( AstPlot *, int, int, int * );
-   void (* ClearLabelUp)( AstPlot *, int, int * );
-
-   int (* GetLogPlot)( AstPlot *, int, int * );
-   int (* TestLogPlot)( AstPlot *, int, int * );
-   void (* SetLogPlot)( AstPlot *, int, int, int * );
-   void (* ClearLogPlot)( AstPlot *, int, int * );
-
-   int (* GetLogTicks)( AstPlot *, int, int * );
-   int (* TestLogTicks)( AstPlot *, int, int * );
-   void (* SetLogTicks)( AstPlot *, int, int, int * );
-   void (* ClearLogTicks)( AstPlot *, int, int * );
-
-   int (* GetLogLabel)( AstPlot *, int, int * );
-   int (* TestLogLabel)( AstPlot *, int, int * );
-   void (* SetLogLabel)( AstPlot *, int, int, int * );
-   void (* ClearLogLabel)( AstPlot *, int, int * );
-
-   int (* GetDrawAxes)( AstPlot *, int, int * );
-   int (* TestDrawAxes)( AstPlot *, int, int * );
-   void (* SetDrawAxes)( AstPlot *, int, int, int * );
-   void (* ClearDrawAxes)( AstPlot *, int, int * );
-
-   int (* GetAbbrev)( AstPlot *, int, int * );
-   int (* TestAbbrev)( AstPlot *, int, int * );
-   void (* SetAbbrev)( AstPlot *, int, int, int * );
-   void (* ClearAbbrev)( AstPlot *, int, int * );
-
-   int (* GetEscape)( AstPlot *, int * );
-   int (* TestEscape)( AstPlot *, int * );
-   void (* SetEscape)( AstPlot *, int, int * );
-   void (* ClearEscape)( AstPlot *, int * );
-
-   int (* GetLabelling)( AstPlot *, int * );
-   int (* TestLabelling)( AstPlot *, int * );
-   void (* SetLabelling)( AstPlot *, int, int * );
-   void (* ClearLabelling)( AstPlot *, int * );
-
-   double (* GetMajTickLen)( AstPlot *, int, int * );
-   int (* TestMajTickLen)( AstPlot *, int, int * );
-   void (* SetMajTickLen)( AstPlot *, int, double, int * );
-   void (* ClearMajTickLen)( AstPlot *, int, int * );
-
-   double (* GetMinTickLen)( AstPlot *, int, int * );
-   int (* TestMinTickLen)( AstPlot *, int, int * );
-   void (* SetMinTickLen)( AstPlot *, int, double, int * );
-   void (* ClearMinTickLen)( AstPlot *, int, int * );
-
-   double (* GetNumLabGap)( AstPlot *, int, int * );
-   int (* TestNumLabGap)( AstPlot *, int, int * );
-   void (* SetNumLabGap)( AstPlot *, int, double, int * );
-   void (* ClearNumLabGap)( AstPlot *, int, int * );
-
-   double (* GetTextLabGap)( AstPlot *, int, int * );
-   int (* TestTextLabGap)( AstPlot *, int, int * );
-   void (* SetTextLabGap)( AstPlot *, int, double, int * );
-   void (* ClearTextLabGap)( AstPlot *, int, int * );
-
-   double (* GetTitleGap)( AstPlot *, int * );
-   int (* TestTitleGap)( AstPlot *, int * );
-   void (* SetTitleGap)( AstPlot *, double, int * );
-   void (* ClearTitleGap)( AstPlot *, int * );
-
-   double (* GetLabelAt)( AstPlot *, int, int * );
-   int (* TestLabelAt)( AstPlot *, int, int * );
-   void (* SetLabelAt)( AstPlot *, int, double, int * );
-   void (* ClearLabelAt)( AstPlot *, int, int * );
-
-   double (* GetGap)( AstPlot *, int, int * );
-   int (* TestGap)( AstPlot *, int, int * );
-   void (* SetGap)( AstPlot *, int, double, int * );
-   void (* ClearGap)( AstPlot *, int, int * );
-
-   double (* GetLogGap)( AstPlot *, int, int * );
-   int (* TestLogGap)( AstPlot *, int, int * );
-   void (* SetLogGap)( AstPlot *, int, double, int * );
-   void (* ClearLogGap)( AstPlot *, int, int * );
-
-   double (* GetCentre)( AstPlot *, int, int * );
-   int (* TestCentre)( AstPlot *, int, int * );
-   void (* SetCentre)( AstPlot *, int, double, int * );
-   void (* ClearCentre)( AstPlot *, int, int * );
-
-   int (* GetEdge)( AstPlot *, int, int * );
-   int (* TestEdge)( AstPlot *, int, int * );
-   void (* SetEdge)( AstPlot *, int, int, int * );
-   void (* ClearEdge)( AstPlot *, int, int * );
-
-   int (* GetNumLab)( AstPlot *, int, int * );
-   int (* TestNumLab)( AstPlot *, int, int * );
-   void (* SetNumLab)( AstPlot *, int, int, int * );
-   void (* ClearNumLab)( AstPlot *, int, int * );
-
-   int (* GetMinTick)( AstPlot *, int, int * );
-   int (* TestMinTick)( AstPlot *, int, int * );
-   void (* SetMinTick)( AstPlot *, int, int, int * );
-   void (* ClearMinTick)( AstPlot *, int, int * );
-
-   int (* GetTextLab)( AstPlot *, int, int * );
-   int (* TestTextLab)( AstPlot *, int, int * );
-   void (* SetTextLab)( AstPlot *, int, int, int * );
-   void (* ClearTextLab)( AstPlot *, int, int * );
-
-   int (* GetLabelUnits)( AstPlot *, int, int * );
-   int (* TestLabelUnits)( AstPlot *, int, int * );
-   void (* SetLabelUnits)( AstPlot *, int, int, int * );
-   void (* ClearLabelUnits)( AstPlot *, int, int * );
-
-   int (* GetStyle)( AstPlot *, int, int * );
-   int (* TestStyle)( AstPlot *, int, int * );
-   void (* SetStyle)( AstPlot *, int, int, int * );
-   void (* ClearStyle)( AstPlot *, int, int * );
-
-   int (* GetFont)( AstPlot *, int, int * );
-   int (* TestFont)( AstPlot *, int, int * );
-   void (* SetFont)( AstPlot *, int, int, int * );
-   void (* ClearFont)( AstPlot *, int, int * );
-
-   int (* GetColour)( AstPlot *, int, int * );
-   int (* TestColour)( AstPlot *, int, int * );
-   void (* SetColour)( AstPlot *, int, int, int * );
-   void (* ClearColour)( AstPlot *, int, int * );
-
-   double (* GetWidth)( AstPlot *, int, int * );
-   int (* TestWidth)( AstPlot *, int, int * );
-   void (* SetWidth)( AstPlot *, int, double, int * );
-   void (* ClearWidth)( AstPlot *, int, int * );
-
-   double (* GetSize)( AstPlot *, int, int * );
-   int (* TestSize)( AstPlot *, int, int * );
-   void (* SetSize)( AstPlot *, int, double, int * );
-   void (* ClearSize)( AstPlot *, int, int * );
-
-   int (* GetInk)( AstPlot *, int * );
-   int (* TestInk)( AstPlot *, int * );
-   void (* SetInk)( AstPlot *, int, int * );
-   void (* ClearInk)( AstPlot *, int * );
-
-} AstPlotVtab;
-
-/* Structure holding information about curves drawn by astGridLine and 
-   astCurve. */
-typedef struct AstPlotCurveData{
-   int out;          /* Was the curve completely outside the clipping area? */
-   int nbrk;         /* The number of breaks in the curve. */
-   float xbrk[ AST__PLOT_CRV_MXBRK ];  /* Graphics X coordinate at each break. */
-   float ybrk[ AST__PLOT_CRV_MXBRK ];  /* Graphics Y coordinate at each break. */
-   float vxbrk[ AST__PLOT_CRV_MXBRK ]; /* X comp. of unit tangent vector */
-   float vybrk[ AST__PLOT_CRV_MXBRK ]; /* Y comp. of unit tangent vector */
-   float length;     /* Drawn length of the curve in graphics coordinates */
-} AstPlotCurveData;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstPlotGlobals {
-   AstPlotVtab Class_Vtab;
-   int Class_Init;
-   double GrfAttrs_attrs_t[ GRF__NATTR ]; 
-   int GrfAttrs_nesting_t;            
-   double Crv_limit_t;
-   double Crv_scerr_t;
-   double Crv_tol_t;
-   double Crv_ux0_t;
-   double Crv_uy0_t;
-   double Crv_vxl_t;
-   double Crv_vyl_t;
-   double Crv_xhi_t;
-   double Crv_xl_t;
-   double Crv_xlo_t;
-   double Crv_yhi_t;
-   double Crv_yl_t;
-   double Crv_ylo_t;
-   float *Crv_vxbrk_t;
-   float *Crv_vybrk_t;
-   float *Crv_xbrk_t;
-   float *Crv_ybrk_t;
-   float Crv_len_t;
-   int Crv_ink_t;
-   int Crv_nbrk_t;
-   int Crv_nent_t;
-   int Crv_out_t;
-   int Crv_clip_t;
-   void (*Crv_map_t)( int, double *, double *, double *, const char *, const char *, int *, struct AstGlobals * );
-   void *Crv_mapstatics_t;
-   float Box_lbnd_t[ 2 ];
-   float Box_ubnd_t[ 2 ];
-   float Boxp_lbnd_t[ 2 ];
-   float Boxp_ubnd_t[ 2 ];
-   int Boxp_freeze_t;
-   float Poly_x_t[ AST__PLOT_POLY_MAX ];
-   float Poly_y_t[ AST__PLOT_POLY_MAX ];
-   int   Poly_n_t;
-   int           Map1_ncoord_t;
-   AstPlot      *Map1_plot_t;
-   AstMapping   *Map1_map_t;
-   AstFrame     *Map1_frame_t;
-   const double *Map1_origin_t;
-   double        Map1_length_t;
-   int           Map1_axis_t;
-   void         *Map1_statics_t;
-   int           Map1_norm_t;
-   int           Map1_log_t;
-   int           Map2_ncoord_t;
-   AstPlot      *Map2_plot_t;
-   AstMapping   *Map2_map_t;
-   double        Map2_x0_t;
-   double        Map2_y0_t;
-   double        Map2_deltax_t;
-   double        Map2_deltay_t;
-   void         *Map2_statics_t;
-   int           Map3_ncoord_t;
-   AstPlot      *Map3_plot_t;
-   AstMapping   *Map3_map_t;
-   AstFrame     *Map3_frame_t;
-   const double *Map3_origin_t;
-   const double *Map3_end_t;
-   double        Map3_scale_t;
-   void         *Map3_statics_t;
-   int           Map4_ncoord_t;
-   AstPlot      *Map4_plot_t;
-   AstMapping   *Map4_map_t;
-   AstMapping   *Map4_umap_t;
-   void         *Map4_statics_t;
-   int           Map5_ncoord_t;
-   AstPlot      *Map5_plot_t;
-   AstMapping   *Map5_map_t;
-   AstRegion    *Map5_region_t;
-   void         *Map5_statics_t;
-   AstPlotCurveData Curve_data_t;
-   char GetAttrib_Buff[ 200 ];
-   char SplitValue_Buff[ 200 ];
-   char StripEscapes_Buff[ AST__PLOT_STRIPESCAPES_BUFF_LEN + 1 ];
-} AstPlotGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Plot)          /* Check class membership */
-astPROTO_ISA(Plot)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPlot *astPlot_( void *, const float *, const double *, const char *, int *, ...);
-#else
-AstPlot *astPlotId_( void *, const float [], const double [], const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPlot *astInitPlot_( void *, size_t, int, AstPlotVtab *, 
-                       const char *, AstFrame *, const float *, const double *, int * );
-
-/* Vtab initialiser. */
-void astInitPlotVtab_( AstPlotVtab *, const char *, int * );
-
-/* Loader. */
-AstPlot *astLoadPlot_( void *, size_t, AstPlotVtab *,
-                       const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitPlotGlobals_( AstPlotGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-   AstKeyMap *astGrfConID_( AstPlot *, int * );
-   const char *astStripEscapes_( const char *, int * );
-   int astFindEscape_( const char *, int *, int *, int *, int * );
-   int astBorder_( AstPlot *, int * );
-   AstKeyMap *astGetGrfContext_( AstPlot *, int * );
-   void astBoundingBox_( AstPlot *, float[2], float[2], int * );
-   void astClip_( AstPlot *, int, const double [], const double [], int * );
-   void astGridLine_( AstPlot *, int, const double [], double, int * );
-   void astCurve_( AstPlot *, const double [], const double [], int * );
-   void astGrid_( AstPlot *, int * );
-   void astMark_( AstPlot *, int, int, int, const double *, int, int * ); 
-   void astGrfSet_( AstPlot *, const char *, AstGrfFun, int * );
-   void astGrfPush_( AstPlot *, int * );
-   void astGrfPop_( AstPlot *, int * );
-   void astGenCurve_( AstPlot *, AstMapping *, int * );
-   void astPolyCurve_( AstPlot *, int, int, int, const double *, int * );
-   void astText_( AstPlot *, const char *, const double [], const float [], const char *, int * );
-
-   void astGrfWrapper_( AstPlot *, const char *, AstGrfWrap, int * );
-   int astGrfFunID_( const char *, const char *, const char *, int * );
-
-#if defined(astCLASS)            /* Protected */
-   int astCvBrk_( AstPlot *, int, double *, double *, double *, int * );
-   void astCopyPlotDefaults_( AstPlot *, int, AstPlot *, int, int * );
-   void astMirror_( AstPlot *, int, int * );
-   AstPointSet *astGetDrawnTicks_( AstPlot *, int, int, int * );
-   void astSetTickValues_( AstPlot *, int, int, double *, int, double *, int * );
-   void astDrawExtraTicks_( AstPlot *, int, AstPointSet *, int * );
-   void astGrfAttrs_( AstPlot *, int, int, int, const char *, const char *, int * );
-
-   double astGetTol_( AstPlot *, int * );
-   int astTestTol_( AstPlot *, int * );
-   void astSetTol_( AstPlot *, double, int * );
-   void astClearTol_( AstPlot *, int * );
-
-   int astGetGrid_( AstPlot *, int * );
-   int astTestGrid_( AstPlot *, int * );
-   void astSetGrid_( AstPlot *, int, int * );
-   void astClearGrid_( AstPlot *, int * );
-
-   int astGetTickAll_( AstPlot *, int * );
-   int astTestTickAll_( AstPlot *, int * );
-   void astSetTickAll_( AstPlot *, int, int * );
-   void astClearTickAll_( AstPlot *, int * );
-
-   int astGetForceExterior_( AstPlot *, int * );
-   int astTestForceExterior_( AstPlot *, int * );
-   void astSetForceExterior_( AstPlot *, int, int * );
-   void astClearForceExterior_( AstPlot *, int * );
-
-   int astGetInvisible_( AstPlot *, int * );
-   int astTestInvisible_( AstPlot *, int * );
-   void astSetInvisible_( AstPlot *, int, int * );
-   void astClearInvisible_( AstPlot *, int * );
-
-   int astGetBorder_( AstPlot *, int * );
-   int astTestBorder_( AstPlot *, int * );
-   void astSetBorder_( AstPlot *, int, int * );
-   void astClearBorder_( AstPlot *, int * );
-
-   int astGetClip_( AstPlot *, int * );
-   int astTestClip_( AstPlot *, int * );
-   void astSetClip_( AstPlot *, int, int * );
-   void astClearClip_( AstPlot *, int * );
-
-   int astGetClipOp_( AstPlot *, int * );
-   int astTestClipOp_( AstPlot *, int * );
-   void astSetClipOp_( AstPlot *, int, int * );
-   void astClearClipOp_( AstPlot *, int * );
-
-   int astGetGrf_( AstPlot *, int * );
-   int astTestGrf_( AstPlot *, int * );
-   void astSetGrf_( AstPlot *, int, int * );
-   void astClearGrf_( AstPlot *, int * );
-
-   int astGetDrawTitle_( AstPlot *, int * );
-   int astTestDrawTitle_( AstPlot *, int * );
-   void astSetDrawTitle_( AstPlot *, int, int * );
-   void astClearDrawTitle_( AstPlot *, int * );
-
-   int astGetLabelUp_( AstPlot *, int, int * );
-   int astTestLabelUp_( AstPlot *, int, int * );
-   void astSetLabelUp_( AstPlot *, int, int, int * );
-   void astClearLabelUp_( AstPlot *, int, int * );
-
-   int astGetLogPlot_( AstPlot *, int, int * );
-   int astTestLogPlot_( AstPlot *, int, int * );
-   void astSetLogPlot_( AstPlot *, int, int, int * );
-   void astClearLogPlot_( AstPlot *, int, int * );
-
-   int astGetLogTicks_( AstPlot *, int, int * );
-   int astTestLogTicks_( AstPlot *, int, int * );
-   void astSetLogTicks_( AstPlot *, int, int, int * );
-   void astClearLogTicks_( AstPlot *, int, int * );
-
-   int astGetLogLabel_( AstPlot *, int, int * );
-   int astTestLogLabel_( AstPlot *, int, int * );
-   void astSetLogLabel_( AstPlot *, int, int, int * );
-   void astClearLogLabel_( AstPlot *, int, int * );
-
-   int astGetDrawAxes_( AstPlot *, int, int * );
-   int astTestDrawAxes_( AstPlot *, int, int * );
-   void astSetDrawAxes_( AstPlot *, int, int, int * );
-   void astClearDrawAxes_( AstPlot *, int, int * );
-
-   int astGetAbbrev_( AstPlot *, int, int * );
-   int astTestAbbrev_( AstPlot *, int, int * );
-   void astSetAbbrev_( AstPlot *, int, int, int * );
-   void astClearAbbrev_( AstPlot *, int, int * );
-
-   int astGetEscape_( AstPlot *, int * );
-   int astTestEscape_( AstPlot *, int * );
-   void astSetEscape_( AstPlot *, int, int * );
-   void astClearEscape_( AstPlot *, int * );
-
-   double astGetLabelAt_( AstPlot *, int, int * );
-   int astTestLabelAt_( AstPlot *, int, int * );
-   void astSetLabelAt_( AstPlot *, int, double, int * );
-   void astClearLabelAt_( AstPlot *, int, int * );
-
-   double astGetGap_( AstPlot *, int, int * );
-   int astTestGap_( AstPlot *, int, int * );
-   void astSetGap_( AstPlot *, int, double, int * );
-   void astClearGap_( AstPlot *, int, int * );
-
-   double astGetLogGap_( AstPlot *, int, int * );
-   int astTestLogGap_( AstPlot *, int, int * );
-   void astSetLogGap_( AstPlot *, int, double, int * );
-   void astClearLogGap_( AstPlot *, int, int * );
-
-   double astGetCentre_( AstPlot *, int, int * );
-   int astTestCentre_( AstPlot *, int, int * );
-   void astSetCentre_( AstPlot *, int, double, int * );
-   void astClearCentre_( AstPlot *, int, int * );
-
-   int astGetLabelling_( AstPlot *, int * );
-   int astTestLabelling_( AstPlot *, int * );
-   void astSetLabelling_( AstPlot *, int, int * );
-   void astClearLabelling_( AstPlot *, int * );
-
-   double astGetMajTickLen_( AstPlot *, int, int * );
-   int astTestMajTickLen_( AstPlot *, int, int * );
-   void astSetMajTickLen_( AstPlot *, int, double, int * );
-   void astClearMajTickLen_( AstPlot *, int, int * );
-
-   double astGetMinTickLen_( AstPlot *, int, int * );
-   int astTestMinTickLen_( AstPlot *, int, int * );
-   void astSetMinTickLen_( AstPlot *, int, double, int * );
-   void astClearMinTickLen_( AstPlot *, int, int * );
-
-   double astGetNumLabGap_( AstPlot *, int, int * );
-   int astTestNumLabGap_( AstPlot *, int, int * );
-   void astSetNumLabGap_( AstPlot *, int, double, int * );
-   void astClearNumLabGap_( AstPlot *, int, int * );
-
-   double astGetTextLabGap_( AstPlot *, int, int * );
-   int astTestTextLabGap_( AstPlot *, int, int * );
-   void astSetTextLabGap_( AstPlot *, int, double, int * );
-   void astClearTextLabGap_( AstPlot *, int, int * );
-
-   double astGetTitleGap_( AstPlot *, int * );
-   int astTestTitleGap_( AstPlot *, int * );
-   void astSetTitleGap_( AstPlot *, double, int * );
-   void astClearTitleGap_( AstPlot *, int * );
-
-   int astGetEdge_( AstPlot *, int, int * );
-   int astTestEdge_( AstPlot *, int, int * );
-   void astSetEdge_( AstPlot *, int, int, int * );
-   void astClearEdge_( AstPlot *, int, int * );
-
-   int astGetMinTick_( AstPlot *, int, int * );
-   int astTestMinTick_( AstPlot *, int, int * );
-   void astSetMinTick_( AstPlot *, int, int, int * );
-   void astClearMinTick_( AstPlot *, int, int * );
-
-   int astGetNumLab_( AstPlot *, int, int * );
-   int astTestNumLab_( AstPlot *, int, int * );
-   void astSetNumLab_( AstPlot *, int, int, int * );
-   void astClearNumLab_( AstPlot *, int, int * );
-
-   int astGetTextLab_( AstPlot *, int, int * );
-   int astTestTextLab_( AstPlot *, int, int * );
-   void astSetTextLab_( AstPlot *, int, int, int * );
-   void astClearTextLab_( AstPlot *, int, int * );
-
-   int astGetLabelUnits_( AstPlot *, int, int * );
-   int astTestLabelUnits_( AstPlot *, int, int * );
-   void astSetLabelUnits_( AstPlot *, int, int, int * );
-   void astClearLabelUnits_( AstPlot *, int, int * );
-
-   int astGetStyle_( AstPlot *, int, int * );
-   int astTestStyle_( AstPlot *, int, int * );
-   void astSetStyle_( AstPlot *, int, int, int * );
-   void astClearStyle_( AstPlot *, int, int * );
-
-   int astGetFont_( AstPlot *, int, int * );
-   int astTestFont_( AstPlot *, int, int * );
-   void astSetFont_( AstPlot *, int, int, int * );
-   void astClearFont_( AstPlot *, int, int * );
-
-   int astGetColour_( AstPlot *, int, int * );
-   int astTestColour_( AstPlot *, int, int * );
-   void astSetColour_( AstPlot *, int, int, int * );
-   void astClearColour_( AstPlot *, int, int * );
-
-   double astGetWidth_( AstPlot *, int, int * );
-   int astTestWidth_( AstPlot *, int, int * );
-   void astSetWidth_( AstPlot *, int, double, int * );
-   void astClearWidth_( AstPlot *, int, int * );
-
-   double astGetSize_( AstPlot *, int, int * );
-   int astTestSize_( AstPlot *, int, int * );
-   void astSetSize_( AstPlot *, int, double, int * );
-   void astClearSize_( AstPlot *, int, int * );
-
-   int astGetInk_( AstPlot *, int * );
-   int astTestInk_( AstPlot *, int * );
-   void astSetInk_( AstPlot *, int, int * );
-   void astClearInk_( AstPlot *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
-   them easier to invoke (e.g. to avoid type mis-matches when passing pointers
-   to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
-   validate their own arguments. We must use a cast when passing object
-   pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckPlot(this) astINVOKE_CHECK(Plot,this,0)
-#define astVerifyPlot(this) astINVOKE_CHECK(Plot,this,1)
-
-/* Test class membership. */
-#define astIsAPlot(this) astINVOKE_ISA(Plot,this)
-
-#if defined(astCLASS)            /* Protected */
-#define astPlot astINVOKE(F,astPlot_)
-#else
-#define astPlot astINVOKE(F,astPlotId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPlot(mem,size,init,vtab,name,frame,graph,base) \
-astINVOKE(O,astInitPlot_(mem,size,init,vtab,name,frame,graph,base,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPlotVtab(vtab,name) astINVOKE(V,astInitPlotVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPlot(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPlot_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckPlot (et al.) to validate Plot
-   pointers before use. This provides a contextual error report if a
-   pointer to the wrong sort of object is supplied. */
-
-
-#define astGetGrfContext(this) \
-astINVOKE(O,astGetGrfContext_(astCheckPlot(this),STATUS_PTR))
-
-#define astBorder(this) \
-astINVOKE(V,astBorder_(astCheckPlot(this),STATUS_PTR))
-
-#define astBoundingBox(this,lbnd,ubnd) \
-astINVOKE(V,astBoundingBox_(astCheckPlot(this),lbnd,ubnd,STATUS_PTR))
-
-#define astClip(this,iframe,lbnd,ubnd) \
-astINVOKE(V,astClip_(astCheckPlot(this),iframe,lbnd,ubnd,STATUS_PTR))
-
-#define astMark(this,nmark,ncoord,indim,in,type) \
-astINVOKE(V,astMark_(astCheckPlot(this),nmark,ncoord,indim,in,type,STATUS_PTR))
-
-#define astText(this,text,pos,up,just) \
-astINVOKE(V,astText_(astCheckPlot(this),text,pos,up,just,STATUS_PTR))
-
-#define astGrid(this) \
-astINVOKE(V,astGrid_(astCheckPlot(this),STATUS_PTR))
-
-#define astGridLine(this,axis,start,length) \
-astINVOKE(V,astGridLine_(astCheckPlot(this),axis,start,length,STATUS_PTR))
-
-#define astCurve(this,start,finish) \
-astINVOKE(V,astCurve_(astCheckPlot(this),start,finish,STATUS_PTR))
-
-#define astGenCurve(this,map) \
-astINVOKE(V,astGenCurve_(astCheckPlot(this),astCheckMapping(map),STATUS_PTR))
-
-#define astPolyCurve(this,npoint,ncoord,dim,in) \
-astINVOKE(V,astPolyCurve_(astCheckPlot(this),npoint,ncoord,dim,in,STATUS_PTR))
-
-#define astGrfSet(this,name,fun) \
-astINVOKE(V,astGrfSet_(astCheckPlot(this),name,fun,STATUS_PTR))
-
-#define astGrfPush(this) \
-astINVOKE(V,astGrfPush_(astCheckPlot(this),STATUS_PTR))
-
-#define astGrfPop(this) \
-astINVOKE(V,astGrfPop_(astCheckPlot(this),STATUS_PTR))
-
-
-#define astGrfFunID(name,method,class) astGrfFunID_(name,method,class,STATUS_PTR)
-#define astFindEscape(text,type,value,nc) astFindEscape_(text,type,value,nc,STATUS_PTR) 
-#define astStripEscapes(text) astStripEscapes_(text,STATUS_PTR)
-#define astGrfConID(this) astGrfConID_(this,STATUS_PTR)
-
-#define astGrfWrapper(this,name,wrapper) \
-astINVOKE(V,astGrfWrapper_(astCheckPlot(this),name,wrapper,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGrfAttrs(this,id,set,prim,method,class) \
-astGrfAttrs_(astCheckPlot(this),id,set,prim,method,class,STATUS_PTR)
-
-#define astCvBrk(this,ibrk,brk,vbrk,len) \
-astINVOKE(V,astCvBrk_(astCheckPlot(this),ibrk,brk,vbrk,len,STATUS_PTR))
-
-#define astCopyPlotDefaults(this,axis,dplot,daxis) \
-astINVOKE(V,astCopyPlotDefaults_(astCheckPlot(this),axis,astCheckPlot(dplot),daxis,STATUS_PTR))
-
-#define astMirror(this,axis) \
-astINVOKE(V,astMirror_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astGetDrawnTicks(this,axis,major) \
-astINVOKE(O,astGetDrawnTicks_(astCheckPlot(this),axis,major,STATUS_PTR))
-
-#define astSetTickValues(this,axis,nmajor,major,nminor,minor) \
-astINVOKE(V,astSetTickValues_(astCheckPlot(this),axis,nmajor,major,nminor,minor,STATUS_PTR))
-
-#define astDrawExtraTicks(this,axis,pset) \
-astINVOKE(V,astDrawExtraTicks_(astCheckPlot(this),axis,astCheckPointSet(pset),STATUS_PTR))
-
-#define astClearTol(this) \
-astINVOKE(V,astClearTol_(astCheckPlot(this),STATUS_PTR))
-#define astGetTol(this) \
-astINVOKE(V,astGetTol_(astCheckPlot(this),STATUS_PTR))
-#define astSetTol(this,tol) \
-astINVOKE(V,astSetTol_(astCheckPlot(this),tol,STATUS_PTR))
-#define astTestTol(this) \
-astINVOKE(V,astTestTol_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearGrid(this) \
-astINVOKE(V,astClearGrid_(astCheckPlot(this),STATUS_PTR))
-#define astGetGrid(this) \
-astINVOKE(V,astGetGrid_(astCheckPlot(this),STATUS_PTR))
-#define astSetGrid(this,grid) \
-astINVOKE(V,astSetGrid_(astCheckPlot(this),grid,STATUS_PTR))
-#define astTestGrid(this) \
-astINVOKE(V,astTestGrid_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearInk(this) \
-astINVOKE(V,astClearInk_(astCheckPlot(this),STATUS_PTR))
-#define astGetInk(this) \
-astINVOKE(V,astGetInk_(astCheckPlot(this),STATUS_PTR))
-#define astSetInk(this,ink) \
-astINVOKE(V,astSetInk_(astCheckPlot(this),ink,STATUS_PTR))
-#define astTestInk(this) \
-astINVOKE(V,astTestInk_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearTickAll(this) \
-astINVOKE(V,astClearTickAll_(astCheckPlot(this),STATUS_PTR))
-#define astGetTickAll(this) \
-astINVOKE(V,astGetTickAll_(astCheckPlot(this),STATUS_PTR))
-#define astSetTickAll(this,tickall) \
-astINVOKE(V,astSetTickAll_(astCheckPlot(this),tickall,STATUS_PTR))
-#define astTestTickAll(this) \
-astINVOKE(V,astTestTickAll_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearForceExterior(this) \
-astINVOKE(V,astClearForceExterior_(astCheckPlot(this),STATUS_PTR))
-#define astGetForceExterior(this) \
-astINVOKE(V,astGetForceExterior_(astCheckPlot(this),STATUS_PTR))
-#define astSetForceExterior(this,frcext) \
-astINVOKE(V,astSetForceExterior_(astCheckPlot(this),frcext,STATUS_PTR))
-#define astTestForceExterior(this) \
-astINVOKE(V,astTestForceExterior_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearBorder(this) \
-astINVOKE(V,astClearBorder_(astCheckPlot(this),STATUS_PTR))
-#define astGetBorder(this) \
-astINVOKE(V,astGetBorder_(astCheckPlot(this),STATUS_PTR))
-#define astSetBorder(this,border) \
-astINVOKE(V,astSetBorder_(astCheckPlot(this),border,STATUS_PTR))
-#define astTestBorder(this) \
-astINVOKE(V,astTestBorder_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearClip(this) \
-astINVOKE(V,astClearClip_(astCheckPlot(this),STATUS_PTR))
-#define astGetClip(this) \
-astINVOKE(V,astGetClip_(astCheckPlot(this),STATUS_PTR))
-#define astSetClip(this,clip) \
-astINVOKE(V,astSetClip_(astCheckPlot(this),clip,STATUS_PTR))
-#define astTestClip(this) \
-astINVOKE(V,astTestClip_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearClipOp(this) \
-astINVOKE(V,astClearClipOp_(astCheckPlot(this),STATUS_PTR))
-#define astGetClipOp(this) \
-astINVOKE(V,astGetClipOp_(astCheckPlot(this),STATUS_PTR))
-#define astSetClipOp(this,clipop) \
-astINVOKE(V,astSetClipOp_(astCheckPlot(this),clipop,STATUS_PTR))
-#define astTestClipOp(this) \
-astINVOKE(V,astTestClipOp_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearInvisible(this) \
-astINVOKE(V,astClearInvisible_(astCheckPlot(this),STATUS_PTR))
-#define astGetInvisible(this) \
-astINVOKE(V,astGetInvisible_(astCheckPlot(this),STATUS_PTR))
-#define astSetInvisible(this,invisible) \
-astINVOKE(V,astSetInvisible_(astCheckPlot(this),invisible,STATUS_PTR))
-#define astTestInvisible(this) \
-astINVOKE(V,astTestInvisible_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearGrf(this) \
-astINVOKE(V,astClearGrf_(astCheckPlot(this),STATUS_PTR))
-#define astGetGrf(this) \
-astINVOKE(V,astGetGrf_(astCheckPlot(this),STATUS_PTR))
-#define astSetGrf(this,grf) \
-astINVOKE(V,astSetGrf_(astCheckPlot(this),grf,STATUS_PTR))
-#define astTestGrf(this) \
-astINVOKE(V,astTestGrf_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearDrawTitle(this) \
-astINVOKE(V,astClearDrawTitle_(astCheckPlot(this),STATUS_PTR))
-#define astGetDrawTitle(this) \
-astINVOKE(V,astGetDrawTitle_(astCheckPlot(this),STATUS_PTR))
-#define astSetDrawTitle(this,drawtitle) \
-astINVOKE(V,astSetDrawTitle_(astCheckPlot(this),drawtitle,STATUS_PTR))
-#define astTestDrawTitle(this) \
-astINVOKE(V,astTestDrawTitle_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearDrawAxes(this,axis) \
-astINVOKE(V,astClearDrawAxes_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetDrawAxes(this,axis) \
-astINVOKE(V,astGetDrawAxes_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetDrawAxes(this,axis,drawaxes) \
-astINVOKE(V,astSetDrawAxes_(astCheckPlot(this),axis,drawaxes,STATUS_PTR))
-#define astTestDrawAxes(this,axis) \
-astINVOKE(V,astTestDrawAxes_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearAbbrev(this,axis) \
-astINVOKE(V,astClearAbbrev_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetAbbrev(this,axis) \
-astINVOKE(V,astGetAbbrev_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetAbbrev(this,axis,abbrev) \
-astINVOKE(V,astSetAbbrev_(astCheckPlot(this),axis,abbrev,STATUS_PTR))
-#define astTestAbbrev(this,axis) \
-astINVOKE(V,astTestAbbrev_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearEscape(this) \
-astINVOKE(V,astClearEscape_(astCheckPlot(this),STATUS_PTR))
-#define astGetEscape(this) \
-astINVOKE(V,astGetEscape_(astCheckPlot(this),STATUS_PTR))
-#define astSetEscape(this,escape) \
-astINVOKE(V,astSetEscape_(astCheckPlot(this),escape,STATUS_PTR))
-#define astTestEscape(this) \
-astINVOKE(V,astTestEscape_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearLabelAt(this,axis) \
-astINVOKE(V,astClearLabelAt_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLabelAt(this,axis) \
-astINVOKE(V,astGetLabelAt_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLabelAt(this,axis,labelat) \
-astINVOKE(V,astSetLabelAt_(astCheckPlot(this),axis,labelat,STATUS_PTR))
-#define astTestLabelAt(this,axis) \
-astINVOKE(V,astTestLabelAt_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearGap(this,axis) \
-astINVOKE(V,astClearGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetGap(this,axis) \
-astINVOKE(V,astGetGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetGap(this,axis,gap) \
-astINVOKE(V,astSetGap_(astCheckPlot(this),axis,gap,STATUS_PTR))
-#define astTestGap(this,axis) \
-astINVOKE(V,astTestGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogGap(this,axis) \
-astINVOKE(V,astClearLogGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogGap(this,axis) \
-astINVOKE(V,astGetLogGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogGap(this,axis,gap) \
-astINVOKE(V,astSetLogGap_(astCheckPlot(this),axis,gap,STATUS_PTR))
-#define astTestLogGap(this,axis) \
-astINVOKE(V,astTestLogGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearCentre(this,axis) \
-astINVOKE(V,astClearCentre_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetCentre(this,axis) \
-astINVOKE(V,astGetCentre_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetCentre(this,axis,centre) \
-astINVOKE(V,astSetCentre_(astCheckPlot(this),axis,centre,STATUS_PTR))
-#define astTestCentre(this,axis) \
-astINVOKE(V,astTestCentre_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearMajTickLen(this,axis) \
-astINVOKE(V,astClearMajTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetMajTickLen(this,axis) \
-astINVOKE(V,astGetMajTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetMajTickLen(this,axis,majticklen) \
-astINVOKE(V,astSetMajTickLen_(astCheckPlot(this),axis,majticklen,STATUS_PTR))
-#define astTestMajTickLen(this,axis) \
-astINVOKE(V,astTestMajTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearMinTickLen(this,axis) \
-astINVOKE(V,astClearMinTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetMinTickLen(this,axis) \
-astINVOKE(V,astGetMinTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetMinTickLen(this,axis,minticklen) \
-astINVOKE(V,astSetMinTickLen_(astCheckPlot(this),axis,minticklen,STATUS_PTR))
-#define astTestMinTickLen(this,axis) \
-astINVOKE(V,astTestMinTickLen_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearNumLabGap(this,axis) \
-astINVOKE(V,astClearNumLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetNumLabGap(this,axis) \
-astINVOKE(V,astGetNumLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetNumLabGap(this,axis,numlabgap) \
-astINVOKE(V,astSetNumLabGap_(astCheckPlot(this),axis,numlabgap,STATUS_PTR))
-#define astTestNumLabGap(this,axis) \
-astINVOKE(V,astTestNumLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearTextLabGap(this,axis) \
-astINVOKE(V,astClearTextLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetTextLabGap(this,axis) \
-astINVOKE(V,astGetTextLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetTextLabGap(this,axis,textlabgap) \
-astINVOKE(V,astSetTextLabGap_(astCheckPlot(this),axis,textlabgap,STATUS_PTR))
-#define astTestTextLabGap(this,axis) \
-astINVOKE(V,astTestTextLabGap_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearTitleGap(this) \
-astINVOKE(V,astClearTitleGap_(astCheckPlot(this),STATUS_PTR))
-#define astGetTitleGap(this) \
-astINVOKE(V,astGetTitleGap_(astCheckPlot(this),STATUS_PTR))
-#define astSetTitleGap(this,titlegap) \
-astINVOKE(V,astSetTitleGap_(astCheckPlot(this),titlegap,STATUS_PTR))
-#define astTestTitleGap(this) \
-astINVOKE(V,astTestTitleGap_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearLabelling(this) \
-astINVOKE(V,astClearLabelling_(astCheckPlot(this),STATUS_PTR))
-#define astGetLabelling(this) \
-astINVOKE(V,astGetLabelling_(astCheckPlot(this),STATUS_PTR))
-#define astSetLabelling(this,labelling) \
-astINVOKE(V,astSetLabelling_(astCheckPlot(this),labelling,STATUS_PTR))
-#define astTestLabelling(this) \
-astINVOKE(V,astTestLabelling_(astCheckPlot(this),STATUS_PTR))
-
-#define astClearEdge(this,axis) \
-astINVOKE(V,astClearEdge_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetEdge(this,axis) \
-astINVOKE(V,astGetEdge_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetEdge(this,axis,edge) \
-astINVOKE(V,astSetEdge_(astCheckPlot(this),axis,edge,STATUS_PTR))
-#define astTestEdge(this,axis) \
-astINVOKE(V,astTestEdge_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearMinTick(this,axis) \
-astINVOKE(V,astClearMinTick_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetMinTick(this,axis) \
-astINVOKE(V,astGetMinTick_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetMinTick(this,axis,mintick) \
-astINVOKE(V,astSetMinTick_(astCheckPlot(this),axis,mintick,STATUS_PTR))
-#define astTestMinTick(this,axis) \
-astINVOKE(V,astTestMinTick_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearNumLab(this,axis) \
-astINVOKE(V,astClearNumLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetNumLab(this,axis) \
-astINVOKE(V,astGetNumLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetNumLab(this,axis,numlab) \
-astINVOKE(V,astSetNumLab_(astCheckPlot(this),axis,numlab,STATUS_PTR))
-#define astTestNumLab(this,axis) \
-astINVOKE(V,astTestNumLab_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLabelUp(this,axis) \
-astINVOKE(V,astClearLabelUp_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLabelUp(this,axis) \
-astINVOKE(V,astGetLabelUp_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLabelUp(this,axis,labelup) \
-astINVOKE(V,astSetLabelUp_(astCheckPlot(this),axis,labelup,STATUS_PTR))
-#define astTestLabelUp(this,axis) \
-astINVOKE(V,astTestLabelUp_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogPlot(this,axis) \
-astINVOKE(V,astClearLogPlot_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogPlot(this,axis) \
-astINVOKE(V,astGetLogPlot_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogPlot(this,axis,logplot) \
-astINVOKE(V,astSetLogPlot_(astCheckPlot(this),axis,logplot,STATUS_PTR))
-#define astTestLogPlot(this,axis) \
-astINVOKE(V,astTestLogPlot_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogTicks(this,axis) \
-astINVOKE(V,astClearLogTicks_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogTicks(this,axis) \
-astINVOKE(V,astGetLogTicks_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogTicks(this,axis,logticks) \
-astINVOKE(V,astSetLogTicks_(astCheckPlot(this),axis,logticks,STATUS_PTR))
-#define astTestLogTicks(this,axis) \
-astINVOKE(V,astTestLogTicks_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLogLabel(this,axis) \
-astINVOKE(V,astClearLogLabel_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLogLabel(this,axis) \
-astINVOKE(V,astGetLogLabel_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLogLabel(this,axis,loglabel) \
-astINVOKE(V,astSetLogLabel_(astCheckPlot(this),axis,loglabel,STATUS_PTR))
-#define astTestLogLabel(this,axis) \
-astINVOKE(V,astTestLogLabel_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearTextLab(this,axis) \
-astINVOKE(V,astClearTextLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetTextLab(this,axis) \
-astINVOKE(V,astGetTextLab_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetTextLab(this,axis,textlab) \
-astINVOKE(V,astSetTextLab_(astCheckPlot(this),axis,textlab,STATUS_PTR))
-#define astTestTextLab(this,axis) \
-astINVOKE(V,astTestTextLab_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearLabelUnits(this,axis) \
-astINVOKE(V,astClearLabelUnits_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetLabelUnits(this,axis) \
-astINVOKE(V,astGetLabelUnits_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetLabelUnits(this,axis,labelunits) \
-astINVOKE(V,astSetLabelUnits_(astCheckPlot(this),axis,labelunits,STATUS_PTR))
-#define astTestLabelUnits(this,axis) \
-astINVOKE(V,astTestLabelUnits_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearStyle(this,axis) \
-astINVOKE(V,astClearStyle_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetStyle(this,axis) \
-astINVOKE(V,astGetStyle_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetStyle(this,axis,style) \
-astINVOKE(V,astSetStyle_(astCheckPlot(this),axis,style,STATUS_PTR))
-#define astTestStyle(this,axis) \
-astINVOKE(V,astTestStyle_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearFont(this,axis) \
-astINVOKE(V,astClearFont_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetFont(this,axis) \
-astINVOKE(V,astGetFont_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetFont(this,axis,font) \
-astINVOKE(V,astSetFont_(astCheckPlot(this),axis,font,STATUS_PTR))
-#define astTestFont(this,axis) \
-astINVOKE(V,astTestFont_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearColour(this,axis) \
-astINVOKE(V,astClearColour_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetColour(this,axis) \
-astINVOKE(V,astGetColour_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetColour(this,axis,colour) \
-astINVOKE(V,astSetColour_(astCheckPlot(this),axis,colour,STATUS_PTR))
-#define astTestColour(this,axis) \
-astINVOKE(V,astTestColour_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearWidth(this,axis) \
-astINVOKE(V,astClearWidth_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetWidth(this,axis) \
-astINVOKE(V,astGetWidth_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetWidth(this,axis,width) \
-astINVOKE(V,astSetWidth_(astCheckPlot(this),axis,width,STATUS_PTR))
-#define astTestWidth(this,axis) \
-astINVOKE(V,astTestWidth_(astCheckPlot(this),axis,STATUS_PTR))
-
-#define astClearSize(this,axis) \
-astINVOKE(V,astClearSize_(astCheckPlot(this),axis,STATUS_PTR))
-#define astGetSize(this,axis) \
-astINVOKE(V,astGetSize_(astCheckPlot(this),axis,STATUS_PTR))
-#define astSetSize(this,axis,size) \
-astINVOKE(V,astSetSize_(astCheckPlot(this),axis,size,STATUS_PTR))
-#define astTestSize(this,axis) \
-astINVOKE(V,astTestSize_(astCheckPlot(this),axis,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/plot3d.c b/ast-5.3-1/plot3d.c
deleted file mode 100644
index e8267c5..0000000
--- a/ast-5.3-1/plot3d.c
+++ /dev/null
@@ -1,8439 +0,0 @@
-/*
-*class++
-*  Name:
-*     Plot3D
-
-*  Purpose:
-*     Provide facilities for 2D graphical output.
-
-*  Constructor Function:
-c     astPlot3D
-f     AST_PLOT3D
-
-*  Description:
-*     A Plot3D is a specialised form of Plot that provides facilities 
-*     for producing 3D graphical output, including fully annotated 3D 
-*     coordinate grids. The base Frame in a Plot3D describes a 3-dimensional 
-*     "graphical" coordinate system. The axes of this coordinate system are 
-*     assumed to be right-handed (that is, if X appears horizontally to the 
-*     right and Y vertically upwards, then Z is out of the screen towards 
-*     the viewer), and are assumed to be equally scaled (that is, the same 
-*     units are used to measure positions on each of the 3 axes). The upper 
-*     and lower bounds of a volume within this graphical coordinate system 
-*     is specified when the Plot3D is created, and all subsequent graphics 
-*     are "drawn" in this volume.
-*
-*     The Plot3D class does not itself include any ability to draw on a
-*     graphics device. Instead it calls upon function in an externally 
-*     supplied module (the "grf3d" module) to do the required drawing.
-*     A module should be written that implements the functions of the 
-*     grf3d interface using the facilities of a specific graphics system
-*     This module should then be linked into the application so that the 
-*     Plot3D class can use its functions (see the description of the
-*     ast_link commands for details of how to do this). The grf3d interface 
-*     defines a few simple functions for drawing primitives such as straight 
-*     lines, markers and character strings. These functions all accept 
-*     positions in the 3D graphics coordinate system (the base Frame of the 
-*     Plot3D), and so the grf3d module must also manage the projection of 
-*     these 3D coordinates onto the 2D viewing surface, including the choice 
-*     of "eye"/"camera" position, direction of viewing, etc. The AST
-*     library includes a sample implementation of the grf3d interface
-*     based on the PGPLOT graphics system (see file grf3d_pgplot.c). This
-*     implementation also serves to document the grf3d interface itself and
-*     should be consulted for details before writing a new implementation.
-*
-*     The current Frame of a Plot3D describes a "physical" 3-dimensional 
-*     coordinate system, which is the coordinate system in which plotting
-*     operations are specified when invoking the methods of the Plot3D
-*     class. The results of each plotting operation are automatically 
-*     transformed into 3D graphical coordinates before being plotted
-*     using the facilities of the grf3d module linked into the application.
-*
-*     You may select different physical coordinate systems in which to
-*     plot (including the native graphical coordinate system itself)
-*     by selecting different Frames as the current Frame of a Plot3D,
-*     using its Current attribute.  
-*
-*     Like any FrameSet, a Plot3D may also be used as a Frame. In this
-*     case, it behaves like its current Frame, which describes the
-*     physical coordinate system.
-*
-*     When used as a Mapping, a Plot3D describes the inter-relation
-*     between 3D graphical coordinates (its base Frame) and 3D physical
-*     coordinates (its current Frame).  
-*
-*     Although the Plot3D class inherits from the Plot class, several of
-*     the facilities of the Plot class are not available in the Plot3D 
-*     class, and an error will be reported if any attempt is made to use
-*     them. Specifically, the Plot3D class does not support clipping
-*     using the 
-*     astClip function.
-f     AST_CLIP routine.
-*     Nor does it support the specification of graphics primitive functions
-*     at run-time using the
-c     astGrfSet, astGrfPop, astGrfPush and astGetGrfContext functions.
-f     AST_GRFSET, AST_GRFPOP, AST_GRFPUSH, and AST_GETGRFCONTEXT routines.
-
-*  Inheritance:
-*     The Plot3D class inherits from the Plot class.
-
-*  Attributes:
-*     In addition to those attributes common to all Plots, every
-*     Plot3D also has the following attributes:
-*
-*     - Norm: Normal vector defining the 2D plane used for text and markers
-*     - RootCorner: Specifies which edges of the 3D box should be annotated.
-*
-*     Some attributes of the Plot class refer to specific physical
-*     coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic
-*     Plot, the axis index must be 1 or 2, but for a Plot3D the axis index 
-*     can be 1, 2 or 3.
-*
-*     Certain Plot attributes are ignored by the Plot3D class (e.g. Edge,
-*     DrawTitle, TitleGap, etc). Consult the Plot attribute documentation 
-*     for details.
-
-*  Functions:
-c     The Plot3D class does not define any new functions beyond those
-f     The Plot3D class does not define any new routines beyond those
-*     which are applicable to all Plots. Note, however, that the
-*     following methods inherited from the Plot class cannot be used with
-*     a Plot3D and will report an error if called: 
-c    - astBoundingBox, astClip, astCurve, astGenCurve,
-c    astGetGrfContext, astGrfPop, astGrfPush, astGrfSet, astGridLine, 
-c    astPolyCurve.
-f    - AST_BOUNDINGBOX, AST_CLIP, AST_CURVE, AST_GENCURVE,
-f    AST_GETGRFCONTEXT, AST_GRFPOP, AST_GRFPUSH, AST_GRFSET, 
-f    AST_GRIDLINE, AST_POLYCURVE.
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     6-JUN-2007 (DSB):
-*        Original version.
-*     6-SEP-2007 (DSB):
-*        Re-code the astGrid function.
-*     12-NOV-2007 (DSB):
-*        Clear up compiler warnings.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Plot3D
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Integers identifying the 3 plotting surfaces */
-#define XY 1
-#define XZ 2
-#define YZ 3
-
-/* Integers identifying the 8 corners of the graphics cube. */
-#define LLL 0
-#define ULL 1
-#define LUL 2
-#define UUL 3
-#define LLU 4
-#define ULU 5
-#define LUU 6
-#define UUU 7
-
-/* Identify the 4 edges of a Plot */
-#define LEFT   0
-#define TOP    1
-#define RIGHT  2
-#define BOTTOM 3
-
-/* A macros that returns a pointer to the Plot that spans a given plane. */
-#define GET_PLOT(plane) ( \
-     ( plane == XY ) ? this->plotxy : ( \
-     ( plane == XZ ) ? this->plotxz : ( \
-     ( plane == YZ ) ? this->plotyz : NULL ) ) ) 
-
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR3
-
-*  Purpose:
-*     Implement a method to clear a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_CLEAR3(attr,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot3D class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPlot *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstPlot *this, int axis )
-*
-*     which implement a method for clearing a single value in a specified 
-*     multi-valued attribute for an axis of a Plot3D.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. LabelAt in "astClearLabelAt").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). 
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR3(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astClear" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the "clear" value. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,Plot3D,Clear##attr))( this, axis, status ); \
-}   
-
-
-/*
-*
-*  Name:
-*     MAKE_GET3
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_GET3(attr,type,bad_value,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot3D class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstPlot3D *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( AstPlot3D *this, int axis )
-*
-*     which implement a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a Plot3D.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). 
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET3(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPlot3D *this, int axis, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astGet" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attr##_( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,Plot3D,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_SET3
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute 
-*     for a Plot3D.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_SET3(attr,type,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot3D class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPlot3D *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstPlot3D *this, int axis, <Type> value )
-*
-*     which implement a method for setting a single value in a specified
-*     multi-valued attribute for a Plot3D.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. LabelAt in "astSetLabelAt").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). If a value of 0 is supplied, the
-*        value of the Plot3D's Nin attribute is used instead.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET3(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot3D *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astSet" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Store the new value in the structure component. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPlot3D *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,Plot3D,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_TEST3
-
-*  Purpose:
-*     Implement a method to test if a single value has been set in a 
-*     multi-valued attribute for a class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_TEST3(attr,assign,nval)
-
-*  Class Membership:
-*     Defined by the Plot3D class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstPlot3D *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstPlot3D *this, int axis )
-*
-*     which implement a method for testing if a single value in a specified 
-*     multi-valued attribute has been set for a class.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. LabelAt in "astTestLabelAt").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value. This can use the string "axis" to represent the zero-based
-*         index of the value within the attribute.
-*      nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1). 
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST3(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPlot3D *this, int axis, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-/* Initialise */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astTest" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPlot3D *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,Plot3D,Test##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR2
-
-*  Purpose:
-*     Implement a method to clear an element-specific attribute inherited
-*     from the Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_CLEAR2(attr)
-
-*  Class Membership:
-*     Defined by the Plot3d class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPlot *this, int element )
-*
-*     which implements a method for clearing one of the element-specific 
-*     attributes (e.g. Size, Colour, Width, etc) inherited from the 
-*     parent Plot class. 
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. LabelAt in "astClearSize").
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR2(attr) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this_plot, int element, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot3D *this; \
-   int axis3d; \
-   int elem2d1; \
-   int elem2d2; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Clear the attribute value in the parent Plot structure. */ \
-   (*parent_clear##attr)( this_plot, element, status ); \
-\
-/* If OK, clear the attribute in the encapsulated Plots. */ \
-   if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-\
-/* Get the zero-based index of the 3D axis to which the supplied element \
-   refers. Use an index of -1 to indicate that the element does not \
-   relate to a specific axis. Also get the corresponding elements to use \
-   with the two Plots that share the specified 3D axis. */ \
-      axis3d = Element2D( this, element, &elem2d1, &elem2d2, status ); \
-\
-/* If the element is not axis-specific, clear the attribute value in all \
-   three plots. */ \
-      if( axis3d == -1 ) { \
-         astClear##attr( this->plotxy, element ); \
-         astClear##attr( this->plotxz, element ); \
-         astClear##attr( this->plotyz, element ); \
-\
-/* Otherwise, clear the attribute in the two plots that share the \
-   specified 3D axis. */ \
-      } else { \
-         astClear##attr( GET_PLOT(this->axis_plot1[ axis3d ]), elem2d1 ); \
-         astClear##attr( GET_PLOT(this->axis_plot2[ axis3d ]), elem2d2 ); \
-      } \
-   } \
-} 
-
-/*
-*
-*  Name:
-*     MAKE_SET2
-
-*  Purpose:
-*     Implement a method to set an element-specific attribute inherited
-*     from the Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_SET2(attr,type)
-
-*  Class Membership:
-*     Defined by the Plot3d class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPlot *this, int element, type value )
-*
-*     which implements a method for setting one of the element-specific 
-*     attributes (e.g. Size, Colour, Width, etc) inherited from the 
-*     parent Plot class. 
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. LabelAt in "astClearSize").
-*     type
-*        The attribute data type.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_SET2(attr,type) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this_plot, int element, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot3D *this; \
-   int axis3d; \
-   int elem2d1; \
-   int elem2d2; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Set the attribute value in the parent Plot structure. */ \
-   (*parent_set##attr)( this_plot, element, value, status ); \
-\
-/* If OK, set the attribute in the encapsulated Plots. */ \
-   if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-\
-/* Get the zero-based index of the 3D axis to which the supplied element \
-   refers. Use an index of -1 to indicate that the element does not \
-   relate to a specific axis. Also get the corresponding elements to use \
-   with the two Plots that share the specified 3D axis. */ \
-      axis3d = Element2D( this, element, &elem2d1, &elem2d2, status ); \
-\
-/* If the element is not axis-specific, clear the attribute value in all \
-   three plots. */ \
-      if( axis3d == -1 ) { \
-         astSet##attr( this->plotxy, element, value ); \
-         astSet##attr( this->plotxz, element, value ); \
-         astSet##attr( this->plotyz, element, value ); \
-\
-/* Otherwise, clear the attribute in the two plots that share the \
-   specified 3D axis. */ \
-      } else { \
-         astSet##attr( GET_PLOT(this->axis_plot1[ axis3d ]), elem2d1, value ); \
-         astSet##attr( GET_PLOT(this->axis_plot2[ axis3d ]), elem2d2, value ); \
-      } \
-   } \
-} 
-
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR1
-
-*  Purpose:
-*     Implement a method to clear an attribute inherited from the Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_CLEAR1(attr)
-
-*  Class Membership:
-*     Defined by the Plot3d class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPlot *this )
-*
-*     which implements a method for clearing a Plot3D attribute inherited 
-*     from the parent Plot class. It clears the attribute in all three
-*     plots encapsulated within the Plot3D.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. LabelAt in "astClearLabelAt").
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR1(attr) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this_plot, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot3D *this; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Clear the attribute value in the parent Plot structure. */ \
-   (*parent_clear##attr)( this_plot, status ); \
-\
-/* If OK, clear the attribute in all three of the encapsulated Plots. */ \
-   if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-      astClear##attr( this->plotxy ); \
-      astClear##attr( this->plotxz ); \
-      astClear##attr( this->plotyz ); \
-   } \
-} 
-
-/*
-*
-*  Name:
-*     MAKE_SET1
-
-*  Purpose:
-*     Implement a method to set an attribute inherited from the Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_SET1(attr,type)
-
-*  Class Membership:
-*     Defined by the Plot3d class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPlot *this, type value )
-*
-*     which implements a method for setting a Plot3D attribute inherited 
-*     from the parent Plot class. It sets the attribute in all three
-*     plots encapsulated within the Plot3D.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be set, as it appears in the function
-*        name (e.g. LabelAt in "astSetLabelAt").
-*     type
-*        The C data type for the attribute value.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_SET1(attr,type) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this_plot, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot3D *this; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Set the attribute value in the parent Plot structure. */ \
-   (*parent_set##attr)( this_plot, value, status ); \
-\
-/* If OK, set the attribute in all three of the encapsulated Plots. */ \
-   if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-      astSet##attr( this->plotxy, value ); \
-      astSet##attr( this->plotxz, value ); \
-      astSet##attr( this->plotyz, value ); \
-   } \
-} 
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear an attribute inherited from the Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_CLEAR(attr,whichplots)
-
-*  Class Membership:
-*     Defined by the Plot3d class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPlot *this, int axis )
-*
-*     which implements a method for clearing an axis specific Plot3D 
-*     attribute inherited from the parent Plot class.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. LabelAt in "astClearLabelAt").
-*     whichplots
-*        A value indicating which Plots should be affected. A negative value 
-*        means "all threee plots", a value of zero means "just the two plots 
-*        that touch at the specified axis in 3D space", a positive value
-*        means "just the Plot that is used to label th 3D axis."
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,whichplots) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPlot *this_plot, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot *plot; \
-   AstPlot3D *this; \
-   int axis2d; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Clear the attribute value in the parent Plot structure. This will \
-   validate the axis index. */ \
-   (*parent_clear##attr)( this_plot, axis, status ); \
-\
-/* If OK, clear the attribute for the relevant axis, or axes, of the Plots  \
-   encapsulated inside the Plot3D. First get a pointer to the Plot3D \
-   structure. */ \
-   if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-\
-/* If requested clear the attribute in all three Plots. */ \
-      if( whichplots < 0 ) { \
-         astClear##attr( this->plotxy, axis ); \
-         astClear##attr( this->plotxz, axis ); \
-         astClear##attr( this->plotyz, axis ); \
-\
-/* Each axis in 3D graphics space is described by two of the encapsulated \
-   Plots, but only one of these two Plots is used to generate labels for \
-   the axis. Now deal with cases where we are clearing the attribute \
-   value in both of the two Plots that describe the axis. */ \
-      } else if ( whichplots == 0 ) { \
-         if( axis == 0 ) { \
-            astClear##attr( this->plotxy, 0 ); \
-            astClear##attr( this->plotxz, 0 ); \
-\
-         } else if( axis == 1 ) { \
-            astClear##attr( this->plotxy, 1 ); \
-            astClear##attr( this->plotyz, 0 ); \
-\
-         } else { \
-            astClear##attr( this->plotxz, 1 ); \
-            astClear##attr( this->plotyz, 1 ); \
-         } \
-\
-/* Now deal with cases where we are clearing the attribute value only in  \
-   the Plot that is used to label the axis. */ \
-      } else { \
-         plot = AxisPlot( this, axis, &axis2d, status ); \
-         astClear##attr( plot, axis2d ); \
-      } \
-   } \
-} 
-
-
-/*
-*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get the value of an attribute inherited from the 
-*     Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot.h"
-*     MAKE_GET(attr,type,bad_value)
-
-*  Class Membership:
-*     Defined by the Plot3D class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstPlot *this, int axis )
-*
-*     which implements a method for getting a value for an axis specific
-*     attribute for a Plot3D.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPlot *this_plot, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot *plot; \
-   AstPlot3D *this; \
-   int axis2d; \
-   type result; \
-\
-/* Initialise */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* See if the attribute value is set in the parent Plot structure. If so, \
-   use the parent get method to get its value. */ \
-   if( astTest##attr( this_plot, axis ) ) { \
-      result = (*parent_get##attr)( this_plot, axis, status ); \
-\
-/* If the attribute value is not set in the parent Plot structure, get \
-   the default value from the Plot that is used to label the 3D axis. The \
-   parent test method called above will have reported an error if the axis \
-   index is invalid, so check astOK here. */ \
-   } else if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-      plot = AxisPlot( this, axis, &axis2d, status ); \
-      result = astGet##attr( plot, axis2d ); \
-   } \
-\
-/* Return the result. */ \
-   return result; \
-} 
-
-/*
-*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set a value for an attribute inherited from the 
-*     Plot class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     MAKE_SET(attr,type,whichplots)
-
-*  Class Membership:
-*     Defined by the Plot3d class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPlot *this, int axis, <Type> value )
-*
-*     which implements a method for setting a value for an axis specific
-*     attribute inherited from the parent Plot class.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. LabelAt in "astSetLabelAt").
-*      type
-*         The C type of the attribute.
-*     whichplots
-*        A value indicating which Plots should be affected. A negative value 
-*        means "all threee plots", a value of zero means "just the two plots 
-*        that touch at the specified axis in 3D space", a positive value
-*        means "just the Plot that is used to label the 3D axis."
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,whichplots) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPlot *this_plot, int axis, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPlot3D *this; \
-   AstPlot *plot; \
-   int axis2d; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Set the supplied value in the parent Plot class. This will validate \
-   the axis index. */ \
-   (*parent_set##attr)( this_plot, axis, value, status ); \
-\
-/* If this went OK, also set the value for the appropriate axis of the \
-   appropriate encapsulated Plot(s). First get a pointer to the Plot3D \
-   structure. */ \
-   if( astOK ) { \
-      this = (AstPlot3D *) this_plot; \
-\
-/* If requested set the attribute in all three Plots. */ \
-      if( whichplots < 0 ) { \
-         astSet##attr( this->plotxy, axis, value ); \
-         astSet##attr( this->plotxz, axis, value ); \
-         astSet##attr( this->plotyz, axis, value ); \
-\
-/* Each axis in 3D graphics space is described by two of the encapsulated \
-   Plots, but only one of these two Plots is used to generate labels for \
-   the axis. First deal with cases where we are setting the attribute \
-   value in both of the two Plots that describe the axis. */ \
-      } else if( whichplots == 0 ) { \
-         if( axis == 0 ) { \
-            astSet##attr( this->plotxy, 0, value ); \
-            astSet##attr( this->plotxz, 0, value ); \
-\
-         } else if( axis == 1 ) { \
-            astSet##attr( this->plotxy, 1, value ); \
-            astSet##attr( this->plotyz, 0, value ); \
-\
-         } else { \
-            astSet##attr( this->plotxz, 1, value ); \
-            astSet##attr( this->plotyz, 1, value ); \
-         } \
-\
-/* Now deal with cases where we are setting the attribute value only in  \
-   the Plot that is used to label the axis. */ \
-      } else { \
-         plot = AxisPlot( this, axis, &axis2d, status ); \
-         astSet##attr( plot, axis2d, value ); \
-      } \
-   } \
-} 
-
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "cmpframe.h"            /* Compound Frames */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "unitmap.h"             /* Unit mappings */
-#include "permmap.h"             /* Axis permutations */
-#include "winmap.h"              /* Scale and shift mappings */
-#include "frame.h"               /* Coordinate systems */
-#include "frameset.h"            /* Inter-related coordinate systems */
-#include "keymap.h"              /* Hash array */
-#include "plot.h"                /* Interface definition for parent class */
-#include "plot3d.h"              /* Interface definition for this class */
-#include "grf3d.h"               /* The grf3D interface */
-#include "pointset.h"            /* Sets of points */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
-   class. */
-static AstObject *(* parent_cast)( AstObject *, AstObject *, int * );
-static void (* parent_removeframe)( AstFrameSet *, int, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static void (* parent_vset)( AstObject *, const char *, char **, va_list, int * );
-static void (* parent_clear)( AstObject *, const char *, int * );
-static void (* parent_clearcurrent)( AstFrameSet *, int * );
-static void (* parent_setcurrent)( AstFrameSet *, int, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* A FrameSet pointer that is used when calling astCast. */
-static AstFrameSet *dummy_frameset = NULL;
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Plot3D)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Plot3D,Class_Init)
-#define class_vtab astGLOBAL(Plot3D,Class_Vtab)
-#define getattrib_buff astGLOBAL(Plot3D,GetAttrib_Buff)
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-static pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX3 pthread_mutex_lock( &mutex3 ); 
-#define UNLOCK_MUTEX3 pthread_mutex_unlock( &mutex3 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPlot3DVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#define LOCK_MUTEX3
-#define UNLOCK_MUTEX3
-
-#endif
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstFrameSet *Fset3D( AstFrameSet *, int, int * );
-static AstKeyMap *GetGrfContext( AstPlot *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPlot *AxisPlot( AstPlot3D *, int, int *, int * );
-static AstPointSet *ExtendTicks( AstPlot *, AstPointSet *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *RootCornerString( int, int * );
-static int Attr3D( AstKeyMap *, int, double, double *, int, int * );
-static int Border( AstPlot *, int * );
-static int Element2D( AstPlot3D *, int, int *, int *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int Plot3DAttr( AstKeyMap *, int, double, double *, int );
-static int Plot3DCap( AstKeyMap *, int, int );
-static int Plot3DFlush( AstKeyMap * );
-static int Plot3DLine( AstKeyMap *, int, const float *, const float * );
-static int Plot3DMark( AstKeyMap *, int, const float *, const float *, int );
-static int Plot3DQch( AstKeyMap *, float *, float * );
-static int Plot3DScales( AstKeyMap *, float *, float * );
-static int Plot3DText( AstKeyMap *, const char *, float, float, const char *, float, float );
-static int Plot3DTxExt( AstKeyMap *, const char *, float, float, const char *, float, float, float *, float * );
-static int RootCornerInt( const char *, int * );
-static void BoundingBox( AstPlot *, float[2], float[2], int * );
-static void ChangeRootCorner( AstPlot3D *, int, int, int * );
-static void Clear( AstObject *, const char *, int * );
-static void ClearCurrent( AstFrameSet *, int * );
-static void Clip( AstPlot *, int, const double [], const double [], int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CreatePlots( AstPlot3D *, AstFrameSet *, const float *, const double *, int * );
-static void Curve( AstPlot *, const double [], const double [], int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GenCurve( AstPlot *, AstMapping *, int * );
-static void GrfPop( AstPlot *, int * );
-static void GrfPush( AstPlot *, int * );
-static void GrfSet( AstPlot *, const char *,  AstGrfFun, int * );
-static void Grid( AstPlot *, int * );
-static void GridLine( AstPlot *, int, const double [], double, int * );
-static void Mark( AstPlot *, int, int, int, const double *, int, int * );
-static void PolyCurve( AstPlot *, int, int, int, const double *, int * );
-static void RemoveFrame( AstFrameSet *, int, int * );
-static void Set3DGrf( AstPlot3D *, AstPlot *, int, int * );
-static void SetCurrent( AstFrameSet *, int, int * );
-static void SetPlotAttr( AstPlot *, int, int[ 2 ], int * );
-static void SetTickValues( AstPlot *, int, int, double *, int, double *, int * );
-static void SplitFrameSet( AstFrameSet *, AstFrameSet **, int[2], int[2], AstFrameSet **, int[2], int[2], AstFrameSet **, int[2], int[2], int *, int * );
-static void StoreAxisInfo( AstPlot3D *, int[2], int[2], int[2], int[2], int[2], int[2], int * );
-static void Text( AstPlot *, const char *, const double [], const float [2], const char *, int * );
-static void UpdatePlots( AstPlot3D *, int * );
-static void VSet( AstObject *, const char *, char **, va_list, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Declare private member functions that access Plot3D attributes. 
-   --------------------------------------------------------------*/
-
-/* Axis independent... */
-
-#define DECLARE_PLOT3D_ACCESSORS(attr,type) \
-   static type Get##attr(AstPlot3D *,int *); \
-   static void Set##attr(AstPlot3D *,type,int *); \
-   static void Clear##attr(AstPlot3D *,int *); \
-   static int Test##attr(AstPlot3D *,int *); 
-
-DECLARE_PLOT3D_ACCESSORS(RootCorner,int)
-
-#undef DECLARE_PLOT3D_ACCESSORS
-
-
-/* Axis specific... */
-
-#define DECLARE_PLOT3D_ACCESSORS(attr,type) \
-   static type Get##attr(AstPlot3D *,int,int *); \
-   static void Set##attr(AstPlot3D *,int,type,int *); \
-   static void Clear##attr(AstPlot3D *,int,int *); \
-   static int Test##attr(AstPlot3D *,int,int *); 
-
-DECLARE_PLOT3D_ACCESSORS(Norm,double)
-
-#undef DECLARE_PLOT3D_ACCESSORS
-
-
-/* Declare private member functions that access axis-specific attributes 
-   inherited from the Plot class. Also declare pointers to hold the parent 
-   function pointers. 
-   ----------------------------------------------------------------------*/
-
-#define DECLARE_PLOT_ACCESSORS(attr,type) \
-   static type Get##attr(AstPlot *,int,int *); \
-   static void Set##attr(AstPlot *,int,type,int *); \
-   static void Clear##attr(AstPlot *,int,int *); \
-   static type (*parent_get##attr)(AstPlot *,int,int *); \
-   static void (*parent_set##attr)(AstPlot *,int,type,int *); \
-   static void (*parent_clear##attr)(AstPlot *,int,int *);
-
-DECLARE_PLOT_ACCESSORS(MinTick,int)
-DECLARE_PLOT_ACCESSORS(Abbrev,int)
-DECLARE_PLOT_ACCESSORS(Gap,double)
-DECLARE_PLOT_ACCESSORS(LogGap,double)
-DECLARE_PLOT_ACCESSORS(LogPlot,int)
-DECLARE_PLOT_ACCESSORS(LogTicks,int)
-DECLARE_PLOT_ACCESSORS(LogLabel,int)
-DECLARE_PLOT_ACCESSORS(LabelUp,int)
-DECLARE_PLOT_ACCESSORS(DrawAxes,int)
-DECLARE_PLOT_ACCESSORS(LabelUnits,int)
-DECLARE_PLOT_ACCESSORS(MinTickLen,double)
-DECLARE_PLOT_ACCESSORS(MajTickLen,double)
-DECLARE_PLOT_ACCESSORS(NumLab,int)
-DECLARE_PLOT_ACCESSORS(NumLabGap,double)
-DECLARE_PLOT_ACCESSORS(TextLab,int)
-DECLARE_PLOT_ACCESSORS(TextLabGap,double)
-
-#undef DECLARE_PLOT_ACCESSORS
-
-
-/* Declare private member functions that access element-specific attributes 
-   inherited from the Plot class. Also declare pointers to hold the parent 
-   function pointers. 
-   ----------------------------------------------------------------------*/
-
-#define DECLARE_PLOT_ACCESSORS(attr,type) \
-   static void Set##attr(AstPlot *,int,type,int *); \
-   static void Clear##attr(AstPlot *,int,int *); \
-   static void (*parent_set##attr)(AstPlot *,int,type,int *); \
-   static void (*parent_clear##attr)(AstPlot *,int,int *);
-
-DECLARE_PLOT_ACCESSORS(Style,int)
-DECLARE_PLOT_ACCESSORS(Font,int)
-DECLARE_PLOT_ACCESSORS(Colour,int)
-DECLARE_PLOT_ACCESSORS(Width,double)
-DECLARE_PLOT_ACCESSORS(Size,double)
-
-#undef DECLARE_PLOT_ACCESSORS
-
-
-/* Declare private member functions that access attributes inherited from 
-   the Plot class that do not need to override the Get method. This
-   includes attributes that are not axis-specific or that do not have
-   dynamic defaults. Also declare pointers to hold the parent function 
-   pointers. 
-   ----------------------------------------------------------------------*/
-#define DECLARE_PLOT_ACCESSORS(attr,type) \
-   static void Set##attr(AstPlot *,type,int *); \
-   static void Clear##attr(AstPlot *,int *); \
-   static void (*parent_set##attr)(AstPlot *,type,int *); \
-   static void (*parent_clear##attr)(AstPlot *,int *);
-
-DECLARE_PLOT_ACCESSORS(Ink,int)
-DECLARE_PLOT_ACCESSORS(Tol,double)
-DECLARE_PLOT_ACCESSORS(Invisible,int)
-DECLARE_PLOT_ACCESSORS(TickAll,int)
-DECLARE_PLOT_ACCESSORS(ForceExterior,int)
-DECLARE_PLOT_ACCESSORS(Border,int)
-DECLARE_PLOT_ACCESSORS(Clip,int)
-DECLARE_PLOT_ACCESSORS(ClipOp,int)
-DECLARE_PLOT_ACCESSORS(Escape,int)
-DECLARE_PLOT_ACCESSORS(Grid,int)
-DECLARE_PLOT_ACCESSORS(Labelling,int)
-
-#undef DECLARE_PLOT_ACCESSORS
-
-
-
-/* Member functions. */
-/* ================= */
-
-static int Attr3D( AstKeyMap *grfconID, int attr, double value, 
-                   double *old_value, int prim, int *status ){
-/*
-*  Name:
-*     Attr3D
-
-*  Purpose:
-*     Get or set the value of a 3D grf attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     Attr3D( AstKeyMap *grfconID, int attr, double value, double *old_value, 
-*             int prim, int *status )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function gets or sets the current value of a specified graphics 
-*     attribute in the parent Plot structure of a Plot3D. It forwards the 
-*     call to the grf3D module being used by this Plot3D. It should be 
-*     registered with the parent Plot using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. 
-*     attr 
-*       An integer value identifying the required attribute. This should
-*       be one of the symbolic values defined in grf.h.
-*     value 
-*       A new value to store for the attribute. If this is AST__BAD
-*       no value is stored.
-*     old_value 
-*       A pointer to a double in which to return the attribute value.
-*       If this is NULL, no value is returned.
-*     prim 
-*       The sort of graphics primitive to be drawn with the new attribute.
-*       Identified by one of the values defined in grf.h.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   int result;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time 
-   using ast_link options. */
-   result = astG3DAttr( attr, value, old_value, prim );
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Return the result. */
-   return result;
-}
-
-static AstPlot *AxisPlot( AstPlot3D *this, int axis3d, int *axis2d, int *status ){
-/*
-*  Name:
-*     AxisPlot
-
-*  Purpose:
-*     Find the Plot used to label a 3D axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstPlot *AxisPlot( AstPlot3D *this, int axis3d, int *axis2d, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function returns a pointer to the encapsulated 2D Plot that 
-*     is used to label the given 3D axis. It also returns the index
-*     of the labelled axis within the 2D Plot.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot3D.
-*     axis3d
-*        A zero-based axis index within the Plot3D.
-*     axis2d
-*        Pointer to an int in which to put the index of the labelled axis
-*        within the returned 2D Plot.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Plot used to label the 3D axis. Do not annul this
-*     pointer.
-
-*-
-*/
-
-/* Local Variables: */
-   AstPlot *plot;
-
-/* Check the global status. */
-   if( !astOK ) return NULL;
-
-/* Return the required information form the Plot3D structure. */
-   plot = GET_PLOT( this->axis_plot1[ axis3d ] );
-   if( ! plot ) {
-      astError( AST__INTER, "AxisPlot(Plot3D): Illegal value %d "
-                "for axis3d (internal AST programming error).", status,
-                this->axis_plot1[ axis3d ] );
-   }
-
-   *axis2d = this->axis_index1[ axis3d ];
-
-   return plot;
-}
-
-static int Border( AstPlot *this_plot, int *status ){
-/*
-*  Name:
-*     Border
-
-*  Purpose:
-*     Draw a border around valid regions of a Plot.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Border( AstPlot *this, int *status )
-
-*  Class Membership:
-*     Plot method (overrides the astBorder method inherited from the
-*     Plot class)
-
-*  Description:
-*     This function draws a (line) border around regions of the
-*     plotting area of a Plot which correspond to valid, unclipped
-*     physical coordinates. For example, when plotting using an
-*     all-sky map projection, this function could be used to draw the
-*     boundary of the celestial sphere when it is projected on to the
-*     plotting surface.
-*
-*     If the entire plotting area contains valid, unclipped physical
-*     coordinates, then the boundary will just be a rectangular box
-*     around the edges of the plotting area.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the plotting area is completely filled by
-*     valid, unclipped physical coordinates (so that only a
-*     rectangular box was drawn around the edge). Otherwise, one is
-*     returned.
-
-*  Notes:
-*     - The Plot3D implementation of this method, invokes the astBorder
-*     method on each of the three encapsulated Plots, and returns the
-*     logical OR of the three returned flags.
-*     - A value of zero will be returned if this function is invoked
-*     with the AST error status set, or if it should fail for any
-*     reason.
-*     - An error results if either the current Frame or the base Frame
-*     of the Plot is not 2-dimensional, or (for a Plot3D) 3-dimensional.
-*     - An error also results if the transformation between the base
-*     and current Frames of the Plot is not defined (i.e. the Plot's
-*     TranForward attribute is zero).
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;
-   const char *class;      
-   const char *method;     
-   float x1;
-   float y1;
-   float z1;
-   float x[ 2 ];
-   float y[ 2 ];
-   float z[ 2 ];
-   int flag1;
-   int flag2;
-   int flag3;
-   int naxes;
-   int ok;
-   int result;
-   int root_corner;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Get a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_plot;
-
-/* Store the current method, and the class of the supplied object for use 
-   in error messages.*/
-   method = "astBorder";
-   class = astGetClass( this );
-
-/* Check the base Frame of the Plot is 3-D. */
-   naxes = astGetNin( this );
-   if( naxes != 3 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 3.", status, method, class, naxes, class );
-   } 
-
-/* Check the current Frame of the Plot is 3-D. */
-   naxes = astGetNout( this );
-   if( naxes != 3 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the current "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 3.", status, method, class, naxes, class );
-   } 
-
-/* Invoke the astBorder method on each of the three encapsulated Plots. */
-   flag1 = astBorder( this->plotxy );   
-   flag2 = astBorder( this->plotxz );   
-   flag3 = astBorder( this->plotyz );   
-
-/* If no bad values were encountered in any of the Plots, draw lines
-   along the remaining plot edges. */
-   result = ( flag1 || flag2 || flag3 );
-   if( !result ) { 
-
-/* The three remaining edges ot be drawn all meet at the corner
-   diagonally opposite the root corner. Get the root corner. */
-      root_corner = astGetRootCorner( this );
-
-/* The (x0,y0,z0) position is the graphics coords at the corner
-   diagonally opposite the root corner. The x1, y1 and z1 values 
-   are the graphics x, y and z values at the ends of the three 
-   lines that remain to be drawn. */
-      if( root_corner & 1 ) {
-         x[ 0 ] = this->gbox[ 0 ];
-         x1 = this->gbox[ 3 ];
-      } else {
-         x[ 0 ] = this->gbox[ 3 ];
-         x1 = this->gbox[ 0 ];
-      }     
-
-      if( root_corner & 2 ) {
-         y[ 0 ] = this->gbox[ 1 ];
-         y1 = this->gbox[ 4 ];
-      } else {
-         y[ 0 ] = this->gbox[ 4 ];
-         y1 = this->gbox[ 1 ];
-      }     
-
-      if( root_corner & 4 ) {
-         z[ 0 ] = this->gbox[ 2 ];
-         z1 = this->gbox[ 5 ];
-      } else {
-         z[ 0 ] = this->gbox[ 5 ];
-         z1 = this->gbox[ 2 ];
-      }     
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-      astGrfAttrs( this, AST__BORDER_ID, 1, GRF__LINE, method, class );
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-      LOCK_MUTEX2;
-
-/* Draw the remaining line parallel to the X axis. */
-      x[ 1 ] = x1;
-      y[ 1 ] = y[ 0 ];
-      z[ 1 ] = z[ 0 ];
-      ok = astG3DLine( 2, x, y, z );
-
-/* Draw the remaining line parallel to the Y axis. */
-      x[ 1 ] = x[ 0 ];
-      y[ 1 ] = y1;
-      z[ 1 ] = z[ 0 ];
-      ok = ok && astG3DLine( 2, x, y, z );
-
-/* Draw the remaining line parallel to the X axis. */
-      x[ 1 ] = x[ 0 ];
-      y[ 1 ] = y[ 0 ];
-      z[ 1 ] = z1;
-      ok = ok && astG3DLine( 2, x, y, z );
-
-/* Allow the next thread to proceed. */
-      UNLOCK_MUTEX2;
-
-/* Re-establish the original graphical attributes. */
-      astGrfAttrs( this, AST__BORDER_ID, 0, GRF__LINE, method, class );
-
-/* Report an error if anything went wrong in the grf3d module. */
-      if( !ok && astOK ) {
-         astError( AST__GRFER, "%s(%s): Graphics error in astG3DLine. ", status, 
-                   method, class );
-      }
-   }
-
-/* Return zero if an error has occurrred. */
-   if( !astOK ) result = 0;
-
-/* Return a flag indicating if any bad values were encountered in any of
-   the Plots. */
-   return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Cast
-
-*  Purpose:
-*     Cast an Object into an instance of a sub-class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstObject *Cast( AstObject *this, AstObject *obj, int *status ) 
-
-*  Class Membership:
-*     Plot3D member function (over-rides the protected astCast
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a deep copy of an ancestral component of the
-*     supplied object. The required class of the ancestral component is
-*     specified by another object. Specifically, if "this" and "new" are 
-*     of the same class, a copy of "this" is returned. If "this" is an 
-*     instance of a subclass of "obj", then a copy of the component
-*     of "this" that matches the class of "obj" is returned. Otherwise, 
-*     a NULL pointer is returned without error.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cast.
-*     obj
-*        Pointer to an Object that defines the class of the returned Object. 
-*        The returned Object will be of the same class as "obj". 
-
-*  Returned Value:
-*     A pointer to the new Object. NULL if "this" is not a sub-class of 
-*     "obj", or if an error occurs.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables; */
-   AstObject *new;
-   astDECLARE_GLOBALS       
-   int generation_gap;
-
-/* Initialise */
-   new = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj" 
-   to this class (Plot3D). A positive value is returned if Plot3D
-   is a sub-class of "obj". A negative value is returned if "obj" is 
-   a sub-class of Plot3D. Zero is returned if "obj" is a Plot3D. 
-   AST__COUSIN is returned if "obj" is not on the same line of descent 
-   as Plot3D. */
-   generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab, 
-                                     astVTAB( obj ) );
-
-/* If "obj" is a Plot3D or a sub-class of Plot3D, we can cast by 
-   truncating the vtab for "this" so that it matches the vtab of "obJ", 
-   and then taking a deep copy of "this". */
-   if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
-      new = astCastCopy( this_object, obj );
-
-/* If "obj" is a Plot (the parent class), we cast by returning a deep
-   copy of the Plot covering the XY face. */
-   } else if( generation_gap == 1 ) {
-      new = astCopy( ( (AstPlot3D *) this_object)->plotxy );
-
-/* If "obj" is a FrameSet or higher, we attempt to use the implementation
-   inherited from the parent class to cast the FrameSet component into the 
-   class indicated by "obj". */
-   } else {
-      new = (*parent_cast)( this_object, obj, status );
-   }
-
-/* Return the new pointer. */
-   return new;
-}
-
-static void ChangeRootCorner( AstPlot3D *this, int old, int new, int *status ){
-/*
-*  Name:
-*     ChangeRootCorner
-
-*  Purpose:
-*     Use a new RootCorner value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void ChangeRootCorner( AstPlot3D *this, int old, int new, int *status )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function sets the attributes of the encapsulated Plots so that 
-*     labels appear on the edges of the 3D graphics cube that join at the
-*     specified new root corner. It also reverses the graphics axes in
-*     the encapsulated Plots as required in order to ensure that the Plots 
-*     look "normal" when viewed from the outside of the 3D graphics cube.
-*     This happens if a the Plot used to label a specific axis moves from 
-*     one face the the 3D graphics cube to the opposite face.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot3D.
-*     old
-*        The old RootCorner value. 
-*     new
-*        The new RootCorner value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Each RootCorner value is in the range 0 to 7 and is a 3 bit
-*     bit-mask. Bit 0 describes the 3D graphics X axis, bit 1 describes 
-*     the graphics Y axis and bit 2 describes the graphics Z axis. If a 
-*     bit is set it means that the corner is at the upper bound on the 
-*     corresponding axis. If a bit is unset it means that the corner is 
-*     at the lower bound on the corresponding axis.
-
-*-
-*/
-
-/* Local Variables: */
-   AstKeyMap *grfcon;
-   AstPlot *plot;
-   AstPlot *plots[ 24 ];
-   int edges[ 24 ];
-   int axes[ 24 ];
-   int axis2d;
-   int edge;
-   int i;
-   int np;
-   int xeqy;
-   int xeqz;
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* If the corner has moved on the 3D X axis (from upper X bound to lower X 
-   bound or vice-versa), mirror the axis of the encapsulated Plot that is 
-   perpendicular to the 3D X axis. This means that the Plot can be thought
-   of as being viewed from the outside of the 3D graphics cube. Also,
-   update the constant X axis value at which the YZ plane is drawn. */ 
-   if( ( old & 1 ) != ( new & 1 ) ) astMirror( this->plotyz, 0 );
-   grfcon = (AstKeyMap *) astGetGrfContext( this->plotyz );
-   astMapPut0D( grfcon, "Gcon", this->gbox[ ( new & 1 ) ? 3 : 0 ], "Constant X value" );
-   astMapPut0I( grfcon, "RootCorner", new, "Labelled corner" );
-   grfcon= astAnnul( grfcon );
-
-/* Likewise mirror the other two axes if required. */
-   if( ( old & 2 ) != ( new & 2 ) ) astMirror( this->plotxz, 0 );
-   grfcon = (AstKeyMap *) astGetGrfContext( this->plotxz );
-   astMapPut0D( grfcon, "Gcon", this->gbox[ ( new & 2 ) ? 4 : 1 ], "Constant Y value" );
-   astMapPut0I( grfcon, "RootCorner", new, "Labelled corner" );
-   grfcon= astAnnul( grfcon );
-
-   if( ( old & 4 ) != ( new & 4 ) ) astMirror( this->plotxy, 0 );
-   grfcon = (AstKeyMap *) astGetGrfContext( this->plotxy );
-   astMapPut0D( grfcon, "Gcon", this->gbox[ ( new & 4 ) ? 5 : 2 ], "Constant Z value" );
-   astMapPut0I( grfcon, "RootCorner", new, "Labelled corner" );
-   grfcon= astAnnul( grfcon );
-
-/* Set a flag saying whether the limits are equal at the new corner for
-   the X and Y axes. */
-   xeqy = ( ( ( new & 1 ) > 0 ) == ( ( new & 2 ) > 0 ) );
-
-/* Set a flag saying whether the limits are equal at the new corner for
-   the X and Z axes. */
-   xeqz = ( ( ( new & 1 ) > 0 ) == ( ( new & 4 ) > 0 ) );
-
-/* Ensure all Edge attributes are clear. This means that the public
-   attribute accessors routines used below will return dynamic defaults for
-   the Edge attributes. */
-   astClearEdge( this->plotxy, 0 );
-   astClearEdge( this->plotxy, 1 );
-   astClearEdge( this->plotxz, 0 );
-   astClearEdge( this->plotxz, 1 );
-   astClearEdge( this->plotyz, 0 );
-   astClearEdge( this->plotyz, 1 );
-
-/* So far we have recorded no edges changes. */
-   np = 0;
-
-/* We now adjust the Edge attributes in the Plot used to annotate the 3D
-   X axis in order to get the X axis labels on the correct edge of the 3D
-   graphics cube. Get the Plot used to produce X axis labels (this will
-   be either this->plotxy or this->plotxz). */
-   plot = AxisPlot( this, 0, &axis2d, status );
-
-/* See what edge of the Plot is used to annotate the first of the two WCS 
-   axis described by the 2D Plot. If the Edge(1) attribute has not been
-   assigned a value, then a dynamic default will be used by the Plot class.
-   We want to know what this dynamic default is, so we first cleared the
-   attribute above. Now we set the attribute value explicitly to the dynamic 
-   default returned by astGetC. Note, we use astGetC rather than astGetEdge
-   because the dynamic default is not calculated when calling astGetEdge. */
-   astSetC( plot, "Edge(1)", astGetC( plot, "Edge(1)" ));
-   edge = astGetEdge( plot, 0 );
-   astClearEdge( plot, 0 );
-
-/* If the 3D X axis is labelled using the Plot that spans the XY plane... */
-   if( plot == this->plotxy ) {
-
-/* ... and if the new root corner is at the upper limit on the Y axis... */
-      if( new & 2 ) {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
-   edge, ensure it is labelled on the upper Y (top) edge. */
-         if( edge == 3 || edge == 1 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = TOP;
-
-/* Otherwise ensure that the second WCS axis is labelled on the upper Y (top) 
-   edge. */
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = TOP;
-         }
-
-/* If the new root corner is at the lower limit on the Y axis... */
-      } else {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
-   edge, ensure it is labelled on the lower Y (bottom) edge. */
-         if( edge == 3 || edge == 1 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = BOTTOM;
-
-/* Otherwise ensure that the second WCS axis is labelled on the lower Y
-   (bottom) edge. */
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = BOTTOM;
-         }
-      }
-
-/* If the 3D X axis is labelled using the Plot that spans the XZ plane... */
-   } else {
-
-/* ... and if the new root corner is at the upper limit on the Z axis... */
-      if( new & 4 ) {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
-   edge, ensure it is labelled on the upper Z (top) edge. */
-         if( edge == 3 || edge == 1 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = TOP;
-
-/* Otherwise ensure that the second WCS axis is labelled on the upper Y (top) 
-   edge. */
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = TOP;
-         }
-
-/* If the new root corner is at the lower limit on the Z axis... */
-      } else {
-
-/* If the first WCS axis is currently labelled on either the top or bottom
-   edge, ensure it is labelled on the lower Z (bottom) edge. */
-         if( edge == 3 || edge == 1 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = BOTTOM;
-
-/* Otherwise ensure that the second WCS axis is labelled on the lower Z
-   (bottom) edge. */
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = BOTTOM;
-         }
-      }
-   }
-
-/* We now adjust the Edge attributes in the Plot used to annotate the 3D
-   Y axis in order to get the Y axis labels on the correct edge of the 3D
-   graphics cube. Get the Plot used to produce Y axis labels. */
-   plot = AxisPlot( this, 1, &axis2d, status );
-
-/* See what edge of the Plot is used to annotate the first of the two WCS 
-   axis described by the Plot. */
-   astSetC( plot, "Edge(1)", astGetC( plot, "Edge(1)" ));
-   edge = astGetEdge( plot, 0 );
-   astClearEdge( plot, 0 );
-
-/* If the 3D Y axis is labelled using the Plot that spans the XY plane... */
-   if( plot == this->plotxy ) {
-
-/* ... and if the new root corner is at the same limit on the X and Z axes,
-   put Y labels on the right side of the Plot.  */
-      if( xeqz ) {
-         if( edge == 0 || edge == 2 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = RIGHT;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = RIGHT;
-         }
-
-/* If the new root corner is at a different limit on the X and Z axes,
-   put Y labels on the left side of the Plot.  */
-      } else {
-         if( edge == 0 || edge == 2 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = LEFT;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = LEFT;
-         }
-      }
-
-/* If the 3D Y axis is labelled using the Plot that spans the YZ plane... */
-   } else {
-
-/* ... and if the new root corner is at the upper Z limit, put Y labels on 
-   the top of the Plot.  */
-      if( new & 4 ) {
-         if( edge == 1 || edge == 3 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = TOP;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = TOP;
-         }
-
-/* If the new root corner is at the lower Z limit, put Y labels on the 
-   bottom of the Plot.  */
-      } else {
-         if( edge == 1 || edge == 3 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = BOTTOM;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = BOTTOM;
-         }
-      }
-   }
-
-/* We now adjust the Edge attributes in the Plot used to annotate the 3D
-   Z axis in order to get the Z axis labels on the correct edge of the 3D
-   graphics cube. Get the Plot used to produce Z axis labels. */
-   plot = AxisPlot( this, 2, &axis2d, status );
-
-/* See what edge of the Plot is used to annotate the first of the two WCS 
-   axis described by the Plot. */
-   astSetC( plot, "Edge(1)", astGetC( plot, "Edge(1)" ));
-   edge = astGetEdge( plot, 0 );
-   astClearEdge( plot, 0 );
-
-/* If the 3D Z axis is labelled using the Plot that spans the XZ plane... */
-   if( plot == this->plotxz ) {
-
-/* ... and if the new root corner is at the same limit on the X and Y axes,
-   put Z labels on the left side of the Plot.  */
-      if( xeqy ) {
-         if( edge == 0 || edge == 2 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = LEFT;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = LEFT;
-         }
-
-/* If the new root corner is at a different limit on the X and Y axes,
-   put Y labels on the right side of the Plot.  */
-      } else {
-         if( edge == 0 || edge == 2 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = RIGHT;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = RIGHT;
-         }
-      }
-
-/* If the 3D Z axis is labelled using the Plot that spans the YZ plane... */
-   } else {
-
-/* ... and if the new root corner is at the same limit on the X and Y axes,
-   put Z labels on the right side of the Plot.  */
-      if( xeqz ) {
-         if( edge == 0 || edge == 2 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = RIGHT;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = RIGHT;
-         }
-
-/* If the new root corner is at a different limit on the X and Y axes,
-   put Y labels on the left side of the Plot.  */
-      } else {
-         if( edge == 0 || edge == 2 ) {
-            plots[ np ] = plot;
-            axes[ np ] = 0;
-            edges[ np++ ] = LEFT;
-         } else {
-            plots[ np ] = plot;
-            axes[ np ] = 1;
-            edges[ np++ ] = LEFT;
-         }
-      }
-   }
-
-/* Apply the set of edge changes determined above. */
-   for( i = 0; i < np; i++ ) {
-      astSetEdge( plots[ i ], axes[ i ], edges[ i ] );
-   }
-
-/* Ensure that the 2 Plot axes that are not being used have suitable values
-   for their attributes. That is, no labels are drawn, and the ticked
-   edges are the one that meet at the new RootCorner. */
-
-   if( !astTestEdge( this->plotxy, 0 ) ) {
-      astSetEdge( this->plotxy, 0, ( new & 2 ) ? TOP : BOTTOM );
-   }
-
-   if( !astTestEdge( this->plotxy, 1 ) ) {
-      astSetEdge( this->plotxy, 1, xeqz ? RIGHT: LEFT );
-   }
-
-   if( !astTestEdge( this->plotxz, 0 ) ) {
-      astSetEdge( this->plotxz, 0, ( new & 4 ) ? TOP : BOTTOM );
-   }
-
-   if( !astTestEdge( this->plotxz, 1 ) ) {
-      astSetEdge( this->plotxz, 1, xeqy ? LEFT : RIGHT );
-   }
-
-   if( !astTestEdge( this->plotyz, 0 ) ) {
-      astSetEdge( this->plotyz, 0, ( new & 4 ) ? TOP : BOTTOM );
-   }
-
-   if( !astTestEdge( this->plotyz, 1 ) ) {
-      astSetEdge( this->plotyz, 1, xeqy ? RIGHT : LEFT );
-   }
-
-
-}
-
-static void Clear( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     Clear
-
-*  Purpose:
-*     Clear attribute values for a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void Clear( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the public astClear method
-*     inherited from the Object class).
-
-*  Description:
-*     This function clears the values of a specified set of attributes
-*     for a Plot3D. Clearing an attribute cancels any value that has
-*     previously been explicitly set for it, so that the standard
-*     default attribute value will subsequently be used instead. This
-*     also causes the astTest function to return the value zero for
-*     the attribute, indicating that no value has been set.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     attrib
-*        Pointer to a null-terminated character string containing a
-*        comma-separated list of the names of the attributes to be
-*        cleared.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function preserves the integrity of the Plot3D (if
-*     possible) by appropriately modifying the three encapsulated Plots.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent astClear method to clear the Plot3D's attribute values. */
-   (*parent_clear)( this_object, attrib, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they 
-   reflect this modified FrameSet. */
-   UpdatePlots( (AstPlot3D *) this_object, status );
-
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void ClearAttrib( AstObject *this, const char *attrib )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astClearAttrib protected
-*     method inherited from the Plot class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Plot3D, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;              /* Pointer to the Plot3D structure */
-   int axis;                     /* Axis index */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* Number of characters read */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Norm. */
-/* ----------- */
-   if ( !strcmp( attrib, "norm" ) ) {
-      astClearNorm( this, 0 );
-      astClearNorm( this, 1 );
-      astClearNorm( this, 2 );
-
-/* Norm(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "norm(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      astClearNorm( this, axis - 1 );
-
-/* RootCorner. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "rootcorner" ) ) {
-      astClearRootCorner( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearCurrent( AstFrameSet *this_frameset, int *status ) {
-/*
-*  Name:
-*     ClearCurrent
-
-*  Purpose:
-*     Clear the value of the Current attribute for a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int astClearCurrent( AstFrameSet *this )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the public astClearCurrent method
-*     inherited from the FrameSet class).
-
-*  Description:
-*     This function clears the value of the Current attribute for a
-*     Plot3D. This attribute is an index that identifies the current
-*     Frame for the Plot3D.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*/
-
-/* Invoke the parent astClearCurrent method. */
-   (*parent_clearcurrent)( this_frameset, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they 
-   reflect this modified FrameSet. */
-   UpdatePlots( (AstPlot3D *) this_frameset, status );
-}
-
-static void ClearRootCorner( AstPlot3D *this, int *status ){
-/*
-*+
-*  Name:
-*     astClearRootCorner
-
-*  Purpose:
-*     Clear the RootCorner attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void astClearRootCorner( AstPlot3D *this )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function clears the RootCorner attribute.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot3D.
-
-*-
-*/
-
-/* Local Variables: */
-   int old;
-   int new;
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Get the current rootcorner value. */
-   old = astGetRootCorner( this );
-
-/* Clear the RootCorner attribute. */
-   this->rootcorner = -1;      
-
-/* Get the new (default) rootcorner value. */
-   new = astGetRootCorner( this );
-
-/* If the root corner has changed, mirror any axes of the encapsulated Plots
-   that need mirroring (this is done to ensure that Plots look right when
-   viewed from the outside of the graphics cube), and modify the Edge
-   attributes in the encapsulated Plots to ensure the labels appear on the
-   requested edges of the 3D graphics cube. . */
-   if( old != new ) ChangeRootCorner( this, old, new, status );
-}
-
-static void CreatePlots( AstPlot3D *this, AstFrameSet *fset, const float *gbox,
-                         const double *bbox, int *status ) {
-/*
-*  Name:
-*     CreatePlots
-
-*  Purpose:
-*     Create three 2D plots and store in the Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void CreatePlots( AstPlot3D *this, AstFrameSet *fset, const float *gbox,
-                        const double *bbox, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function splits the supplied FrameSet up into 3 independent 2D
-*     FrameSets, each describing a 2D plane in the supplied 3D FrameSet.
-*     It then uses these 2D FrameSets to create three Plots, one for each
-*     plane in the graphics plotting space, and stores them in the Plot3D.
-*
-*     Each of the three Plots is notionally pasted onto one face of the 
-*     3D graphics cube (the RootCorner attribute is used to determine which
-*     of the two parallel faces a particular Plot is pasted onto). The 
-*     Plot is pasted in such a way that, when viewed from the outside of 
-*     the graphics cube, the first graphics axis increases left to right
-*     and the second increases bottom to top (this assumes that "up" is
-*     parallel to the 3D Z axis).
-*
-*     Initially, the Plots are created assuming the default RootCorner
-*     value ("LLL"). They will be changed later if the value of the
-*     RootCorner attribute is changed.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     fset
-*        Pointer to the FrameSet.
-*     gbox
-*        A pointer to an array of 6 values giving the graphics coordinates 
-*        of the bottom left and top right corners of a box on the graphics 
-*        output device. The first triple of values should be the graphics 
-*        coordinates of the bottom left corner of the box and the second
-*        triple of values are the graphics coordinates of the top right corner.
-*     bbox
-*        A pointer to an array of 6 values giving the coordinates in the
-*        supplied Frame or base Frame of the supplied FrameSet at the bottom 
-*        left and top right corners of the box specified by parameter gbox.
-*        These should be supplied in the same order as for parameter "gbox".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes: 
-*     - Each returned plot has 3 Frames: Frame 1 is the base (GRAPHICS)
-*     Frame; Frame 2 is spanned by 2 of the 3 axes in the base Frame of
-*     the supplied FrameSet; Frame 3 is the current Frame and is spanned
-*     by 2 of the 3 axes in the current Frame of the supplied FrameSet.
-*     Any future changes to this function that alter this structure should 
-*     reflected in equivalent changes to function UpdatePlots.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fsetxy;
-   AstFrameSet *fsetxz;
-   AstFrameSet *fsetyz;
-   double basebox2d[ 4 ];
-   float graphbox2d[ 4 ];
-   int baseplane;
-   int labelxy[ 2 ];
-   int labelxz[ 2 ];
-   int labelyz[ 2 ];
-   int wcsxy[ 2 ];
-   int wcsxz[ 2 ];
-   int wcsyz[ 2 ];
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Split the supplied FrameSet up into 3 FrameSets, each with a 2D base 
-   and current Frame. Each of these FrameSets describes one plane of
-   the 3D cube. One of them will be spanned by two axes picked from the
-   supplied 3D FrameSet. The other two FrameSets will each include a copy
-   of the remaining 3rd axis from the supplied FrameSet, plus an extra 
-   dummy axis. These dummy axes will never be labelled. */
-   SplitFrameSet( fset, &fsetxy, labelxy, wcsxy, &fsetxz, labelxz, wcsxz, 
-                  &fsetyz, labelyz, wcsyz, &baseplane, status );
-
-/* If OK, annul any existing 2D plots. */
-   if( astOK ) {
-      if( this->plotxy ) this->plotxy = astAnnul( this->plotxy );
-      if( this->plotxz ) this->plotxz = astAnnul( this->plotxz );
-      if( this->plotyz ) this->plotyz = astAnnul( this->plotyz );
-
-/* Create three Plots; one for each 2D plane in the graphics plotting 
-   space. Set the attributes of these plots so that the required axes are
-   labelled and other axes are left blank. The "graphbox2d" and "basebox2d" 
-   values used to create each Plot define the sense, as well as the extent, 
-   of each axis. The first pair of values in each give the lower left corner 
-   of the Plot and the second pair give the top right corner. We want each 
-   Plot to have X increasing left to right and Y increasing bottom to 
-   top when viewed from the outside of the cube. We assume an initial
-   RootCorner value of "LLL" (that is, the Plots are pasted onto the cube
-   faces that meet at the lower limit on every axis). */
-      graphbox2d[ 0 ] = gbox[ 3 ];
-      graphbox2d[ 1 ] = gbox[ 1 ];
-      graphbox2d[ 2 ] = gbox[ 0 ];
-      graphbox2d[ 3 ] = gbox[ 4 ];
-         
-      basebox2d[ 0 ] = bbox[ 3 ];
-      basebox2d[ 1 ] = bbox[ 1 ];
-      basebox2d[ 2 ] = bbox[ 0 ];
-      basebox2d[ 3 ] = bbox[ 4 ];
-   
-      if( this->plotxy ) this->plotxy = astAnnul( this->plotxy );
-      this->plotxy = astPlot( fsetxy, graphbox2d, basebox2d, "", status );
-      SetPlotAttr( this->plotxy, XY, labelxy, status );
-
-      graphbox2d[ 0 ] = gbox[ 0 ];
-      graphbox2d[ 1 ] = gbox[ 2 ];
-      graphbox2d[ 2 ] = gbox[ 3 ];
-      graphbox2d[ 3 ] = gbox[ 5 ];
-      
-      basebox2d[ 0 ] = bbox[ 0 ];
-      basebox2d[ 1 ] = bbox[ 2 ];
-      basebox2d[ 2 ] = bbox[ 3 ];
-      basebox2d[ 3 ] = bbox[ 5 ];
-   
-      this->plotxz = astPlot( fsetxz, graphbox2d, basebox2d, "", status );
-      SetPlotAttr( this->plotxz, XZ, labelxz, status );
-
-      graphbox2d[ 0 ] = gbox[ 4 ];
-      graphbox2d[ 1 ] = gbox[ 2 ];
-      graphbox2d[ 2 ] = gbox[ 1 ];
-      graphbox2d[ 3 ] = gbox[ 5 ];
-      
-      basebox2d[ 0 ] = bbox[ 4 ];
-      basebox2d[ 1 ] = bbox[ 2 ];
-      basebox2d[ 2 ] = bbox[ 1 ];
-      basebox2d[ 3 ] = bbox[ 5 ];
-   
-      this->plotyz = astPlot( fsetyz, graphbox2d, basebox2d, "", status );
-      SetPlotAttr( this->plotyz, YZ, labelyz, status );
-
-/* Store information that allows each 3D WCS axis to be associatedf with
-   a pair of Plots. Also store the WCS axis within each Plot that
-   corresponds to the 3D WCS axis. */
-      StoreAxisInfo( this, labelxy, wcsxy, labelxz, wcsxz, labelyz, wcsyz, status );
-
-/* Store the Plot that spans two connected 3D axes. */
-      this->baseplot = baseplane;
-
-/* Free resources */
-      fsetxy = astAnnul( fsetxy );
-      fsetxz = astAnnul( fsetxz );
-      fsetyz = astAnnul( fsetyz );
-
-   }
-}
-
-static int Element2D( AstPlot3D *this, int element, int *elem2d1, 
-                      int *elem2d2, int *status ){
-/*
-*  Name:
-*     Element2D
-
-*  Purpose:
-*     Convert a 3D graphics element identifier to a corresponding pair of
-*     2D identifiers.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Element2D( AstPlot3D *this, int element, int *elem2d1, 
-*                    int *elem2d2, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function takes an integer identifier for an element of a 3D
-*     annotated grid (e.g. ticks, axis 1 labels, border, etc), and returns
-*     a element identifers that can be used with the encapsualted 2D Plots.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot2D structure.
-*     element
-*        The 3D element identifier to convert.
-*     elem2d1
-*        Pointer to an int in which to return the 2D element identifier 
-*        to use with the first of the two Plots that span the axis to
-*        which the 3D element identifier refers. Returned holding 0 if
-*        the given 3D element identifier is not axis specific.
-*     elem2d2
-*        Pointer to an int in which to return the 2D element identifier 
-*        to use with the second of the two Plots that span the axis to
-*        which the 3D element identifier refers. Returned holding 0 if
-*        the given 3D element identifier is not axis specific.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The zero-based index of the 3D axis to which the given element
-*     identifier refers, or -1 if the element identifier is not axis 
-*     specific.
-
-*/
-
-/* Local Variables: */
-   int axis3d;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Get the zero-based index of the 3D axis to which the supplied element
-   refers. Use an index of -1 to indicate that the element does not
-   relate to a specific axis. Also get the corresponding element to use
-   with the two Plots that share the speified 3D axis. */
-
-/* Define a macro used to set the 2d element identifiers for a given 3d
-   element identifier. */
-
-#define SET_ELEM2D(id1,id2) \
-   *elem2d1 = this->axis_index1[ axis3d ] ? id2 : id1; \
-   *elem2d2 = this->axis_index2[ axis3d ] ? id2 : id1;
-
-   if( element == AST__BORDER_ID ){
-      axis3d = -1;
-
-   } else if( element == AST__CURVE_ID ){
-      axis3d = -1;
-
-   } else if( element == AST__TITLE_ID ){
-      axis3d = -1;
-
-   } else if( element == AST__MARKS_ID ){
-      axis3d = -1;
-
-   } else if( element == AST__TEXT_ID ){
-      axis3d = -1;
-
-   } else if( element == AST__AXIS1_ID ){
-      axis3d = 0;
-      SET_ELEM2D(AST__AXIS1_ID,AST__AXIS2_ID)
-
-   } else if( element == AST__AXIS2_ID ){
-      axis3d = 1;
-      SET_ELEM2D(AST__AXIS1_ID,AST__AXIS2_ID)
-
-   } else if( element == AST__AXIS3_ID ){
-      axis3d = 2;
-      SET_ELEM2D(AST__AXIS1_ID,AST__AXIS2_ID)
-
-   } else if( element == AST__NUMLAB1_ID ){
-      axis3d = 0;
-      SET_ELEM2D(AST__NUMLAB1_ID,AST__NUMLAB2_ID)
-
-   } else if( element == AST__NUMLAB2_ID ){
-      axis3d = 1;
-      SET_ELEM2D(AST__NUMLAB1_ID,AST__NUMLAB2_ID)
-
-   } else if( element == AST__NUMLAB3_ID ){
-      axis3d = 2;
-      SET_ELEM2D(AST__NUMLAB1_ID,AST__NUMLAB2_ID)
-
-   } else if( element == AST__TEXTLAB1_ID ){
-      axis3d = 0;
-      SET_ELEM2D(AST__TEXTLAB1_ID,AST__TEXTLAB2_ID)
-
-   } else if( element == AST__TEXTLAB2_ID ){
-      axis3d = 1;
-      SET_ELEM2D(AST__TEXTLAB1_ID,AST__TEXTLAB2_ID)
-
-   } else if( element == AST__TEXTLAB3_ID ){
-      axis3d = 2;
-      SET_ELEM2D(AST__TEXTLAB1_ID,AST__TEXTLAB2_ID)
-
-   } else if( element == AST__TICKS1_ID ){
-      axis3d = 0;
-      SET_ELEM2D(AST__TICKS1_ID,AST__TICKS2_ID)
-
-   } else if( element == AST__TICKS2_ID ){
-      axis3d = 1;
-      SET_ELEM2D(AST__TICKS1_ID,AST__TICKS2_ID)
-
-   } else if( element == AST__TICKS3_ID ){
-      axis3d = 2;
-      SET_ELEM2D(AST__TICKS1_ID,AST__TICKS2_ID)
-
-   } else if( element == AST__GRIDLINE1_ID ){
-      axis3d = 0;
-      SET_ELEM2D(AST__GRIDLINE1_ID,AST__GRIDLINE2_ID)
-
-   } else if( element == AST__GRIDLINE2_ID ){
-      axis3d = 1;
-      SET_ELEM2D(AST__GRIDLINE1_ID,AST__GRIDLINE2_ID)
-
-   } else if( element == AST__GRIDLINE3_ID ){
-      axis3d = 2;
-      SET_ELEM2D(AST__GRIDLINE1_ID,AST__GRIDLINE2_ID)
-
-   } else { 
-      axis3d = 0;
-      astError( AST__INTER, "Element2D(Plot3D): The MAKE_CLEAR2 macro "
-                "does not yet support element index %d (internal "
-                "AST programming error).", status, element );
-   }
-
-#undef SET_ELEM2D
-
-   return axis3d;
-
-} 
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Plot3Ds are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astEqual protected
-*     method inherited from the Plot Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two Plot3Ds are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Plot3D.
-*     that
-*        Pointer to the second Plot3D.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the Plot3Ds are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPlot3D *that;         /* Pointer to the second Plot3D structure */
-   AstPlot3D *this;         /* Pointer to the first Plot3D structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Plot class. This checks
-   that the Plots are both of the same class (amongst other things). */
-   if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two Plot3D structures. */
-      this = (AstPlot3D *) this_object;
-      that = (AstPlot3D *) that_object;
-
-/* Check the encapsulated Plots for equality. */
-      result = ( astEqual( this->plotxz, that->plotxz ) &&
-                 astEqual( this->plotyz, that->plotyz ) &&
-                 astEqual( this->plotxy, that->plotxy ) );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *ExtendTicks( AstPlot *plot, AstPointSet *ticks, int *status ){
-/*
-*  Name:
-*     ExtendTicks
-
-*  Purpose:
-*     Add an extra tick to the start and end of a list of tick marks.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstPointSet *ExtendTicks( AstPlot *plot, AstPointSet *ticks, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function takes a list of tick marks drawn using the supplied
-*     Plot, and adds in an extra tick mark at the start and end of the
-*     supplied list of ticks, returning the expanded list in a new
-*     PointSet. The extra points are guaranteed to fall outside the area
-*     enclosed within the supplied Plot.
-
-*  Parameters:
-*     plot
-*        The Plot that was used to generate the list of tick marks.
-*     ticks
-*        A PointSet holding the 2D graphics coordinates (within the base
-*        Frame of the supplied Plot) at which each tick mark starts.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a new PointSet that has 2 more entries than the
-*     supplied PointSet. The first point is a new tick mark, then comes
-*     all the ticks mark positions supplied in "ticks", and finally there 
-*     is another new tick mark.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;
-   double **ptr_in;
-   double **ptr_out;
-   double *a_in;
-   double *a_out;
-   double *b_in;
-   double *b_out;
-   double *p;
-   double delta;
-   double hi;
-   double lo;
-   double range[ 2 ];
-   double v;
-   int axis;
-   int i;
-   int increasing;
-   int np;
-
-/* Check inherited status */
-   if( !astOK || !ticks ) return NULL;
-
-/* Get the number of tick marsk in the supplied PointSet and get pointers
-   to the 3D Graphics values contained in the PointSet. */
-   np = astGetNpoint( ticks );
-   ptr_in = astGetPoints( ticks );
-
-/* Create the returned PointSet with room for an extra pair of ticks. Get
-   pointers to its data arrays */
-   result = astPointSet( np + 2, 2, "", status );
-   ptr_out = astGetPoints( result );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Find the index of the 2D graphics axis (0 or 1) that varies along the
-   set of tick marks. We do this by finding the max and min value
-   supplied for each axis, and then choosing the axis that has the highest
-   range. */
-      for( axis = 0; axis < 2; axis++ ) {
-         hi = -DBL_MAX;
-         lo = DBL_MAX;
-         p = ptr_in[ axis ];
-
-         for( i = 0; i < np; i++, p++ ) {
-            v = *p;
-            if( v != AST__BAD ) {
-               if( v > hi ) hi = v;
-               if( v < lo ) lo = v;
-            }
-         }
-
-         if( lo != DBL_MAX ) {
-            range[ axis ] = hi - lo;
-         } else {
-            astError( AST__INTER, "ExtendTicks{Plot3D): no good ticks on "
-                      "axis %d (internal AST prgramming error).", status, axis );
-         }
-      }
-
-      
-/* Get the index of the axis with the largest range (the other range
-   should be zero). */
-      axis = ( range[ 0 ] > range[ 1 ] ) ? 0 : 1;
-
-/* Copy the input graphics positions to the output PointSet, and add an
-   extra position at the beginning and end of the output PointSet. */
-      if( axis == 0 ) {
-         lo = plot->xlo;
-         hi = plot->xhi;
-         a_in = ptr_in[ 0 ];
-         b_in = ptr_in[ 1 ];
-         a_out = ptr_out[ 0 ];
-         b_out = ptr_out[ 1 ];
-   
-      } else {
-         lo = plot->ylo;
-         hi = plot->yhi;
-         a_in = ptr_in[ 1 ];
-         b_in = ptr_in[ 0 ];
-         a_out = ptr_out[ 1 ];
-         b_out = ptr_out[ 0 ];
-      }
-
-      delta = 0.2*( hi - lo );
-
-      if( a_in[ 0 ] < a_in[ 1 ] ) {
-         increasing = 1;
-         *(a_out++) = lo - delta;
-      } else {
-         increasing = 0;
-         *(a_out++) = hi + delta;
-      }
-
-      *(b_out++) = *b_in;
-      for( i = 0; i < np; i++ ) {
-         *(a_out++) = *(a_in++);
-         *(b_out++) = *(b_in++);
-      }
-      *(b_out++) = b_in[ -1 ];
-
-
-      if( increasing ) {
-         *(a_out++) = hi + delta;
-      } else {
-         *(a_out++) = lo - delta;
-      }
-   }
-
-/* Return the extended PointSet. */
-   return result;
-}
-
-static AstFrameSet *Fset3D( AstFrameSet *fset, int ifrm, int *status ) {
-/*
-*  Name:
-*     Fset3D
-
-*  Purpose:
-*     Create a FrameSet with no more than 3 dimensions for a given Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstFrameSet *Fset3D( AstFrameSet *fset, int ifrm, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function checks a specified Frame in the supplied FrameSet.
-*     If the Frame has more than 3 dimensions, a new Frame is added to 
-*     the FrameSet containing just the first three axes of the specified
-*     Frame. A PermMap is used to connect this Frame to the specified 
-*     Frame, which supplied bad values for any missing axes. If the
-*     specified Frame is the base Frame in the supplied FrameSet, then the
-*     new Frame becomes the base Frame in the returned FrameSet. Like-wise,
-*     if the specified Frame is the current Frame, then the new Frame
-*     will be the current Frame in the returned FrameSet.
-*     
-*     If the specified Frame does not have more than 3 axes, then a clone
-*     of the FrameSet pointer is returned, otherwise the returned pointer
-*     points to a copy of the supplied FrameSet with the new 3-D Frame
-*     added.
-
-*  Parameters:
-*     fset
-*        Pointer to the FrameSet.
-*     ifrm
-*        The index of the Frame to check. This should be AST__BASE or
-*        AST_CURRENT.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a FrameSet in which the Frame with index given by ifrm
-*     has no more than 3 axes.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstFrame *newfrm;
-   AstFrameSet *ret;
-   AstPermMap *map;
-   double zero;
-   int *inperm;
-   int axes[3];
-   int i;
-   int ic;
-   int nax;
-
-/* Check the inherited status. */
-   if( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   map = NULL;
-
-/* Get a pointer to the requested Frame in the supplied FrameSet. */
-   frm = astGetFrame( fset, ifrm );
-
-/* See how many dimensions the specified Frame of the supplied FrameSet 
-   has. */
-   nax = astGetNaxes( frm );
-
-/* If it is more than 3-dimensionbal, create a 3D Frame by picking 
-   axes 1, 2 and 3 from the original Frame. */
-   if( nax > 3 ) {
-      axes[ 0 ] = 0;
-      axes[ 1 ] = 1;
-      axes[ 2 ] = 2;
-      newfrm = astPickAxes( frm, 3, axes, NULL );
-
-/* Create a PermMap to describe the mapping between the two Frames. 
-   Use zero as the value for unknown axes (the optional mapping which
-   can be returned by astPickAxes uses AST__BAD for unknown axes). */
-      inperm = (int *) astMalloc( sizeof(int)*(size_t) nax );
-      if( astOK ){
-         inperm[ 0 ] = 0;
-         inperm[ 1 ] = 1;
-         inperm[ 2 ] = 2;
-         for( i = 3; i < nax; i++ ) inperm[ i ] = -1;
-         zero = 0.0;
-         map = astPermMap( nax, inperm, 3, axes, &zero, "", status );
-         inperm = (int *) astFree( (void *) inperm );
-      }
-
-/* Get a copy of the supplied FrameSet. */
-      ret = astCopy( fset );
-
-/* Add the new Frame to the FrameSet (it becomes the current Frame). */
-      ic = astGetCurrent( ret );
-      astAddFrame( ret, ifrm, map, newfrm );
-      newfrm = astAnnul( newfrm );
-
-/* If the new Frame was derived from the base frame, set the new base
-   Frame, and re-instate the original current Frame */
-      if( ifrm == AST__BASE ){
-         astSetBase( ret, astGetCurrent( ret ) );      
-         astSetCurrent( ret, ic );
-      }
-
-/* If the specified Frame in the supplied FrameSet is 3-dimensional, just
-   return a clone of it. */
-   } else {
-      ret = astClone( fset );
-   }
-
-/* Annul the pointer to the original Frame. */
-   frm = astAnnul( frm );
-
-   return ret;
-
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the protected astGetAttrib
-*     method inherited from the FrameSet class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Plot3D, formatted as a character string. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Plot3D, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Plot3D. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPlot3D *this;              /* Pointer to the Plot3D structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Floating point attribute value */
-   int axis;                     /* Axis index */
-   int ival;                     /* Int attribute value */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* Number of character read */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Norm(axis). */
-/* ----------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( attrib, "norm(%d)%n", &axis, &nc ) )
-          && ( nc >= len ) ) {
-      dval = astGetNorm( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* RootCorner. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "rootcorner" ) ) {
-      ival = astGetRootCorner( this );
-      result = RootCornerString( ival, status );
-      if( !result && astOK ) {
-         astError( AST__INTER, "astGetAttrib(Plot3D): Illegal value %d "
-                   "for RootCorner attribute (internal AST programming "
-                   "error).", status, ival );
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied Plot3D,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;         /* Pointer to Plot3D structure */
-   int result;              /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by this class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->plotxy );
-   result += astGetObjSize( this->plotxz );
-   result += astGetObjSize( this->plotyz );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void Grid( AstPlot *this_plot, int *status ) {
-/*
-*  Name:
-*     Grid
-
-*  Purpose:
-*     Draw a set of labelled coordinate axes. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void Grid( AstPlot *this, int *status )
-
-*  Class Membership:
-*     Plot member function (over-rides the astGrid method inherited from 
-*     the Plot class).
-
-*  Description:
-*     This function draws a complete annotated set of 3-dimensional
-*     coordinate axes for a Plot3D with (optionally) a coordinate grid
-*     superimposed. 
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPlot *baseplot;
-   AstPlot *plot;
-   AstPlot3D *this;
-   AstPointSet *majticks;
-   AstPointSet *minticks;
-   AstPointSet *tmp;
-   AstPointSet *wcsmajticks;
-   AstPointSet *wcsminticks;
-   const char *edge;
-   double **ptrmin;
-   double **ptrmaj;
-   double gcon;
-   int base_wax2d;
-   int itick;
-   int new_gaxis;
-   int new_plot;
-   int new_wax2d;
-   int nmaj;
-   int nmin;
-   int perm[ 2 ];
-   int rootcorner;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_plot;
-
-/* Invoke the astGrid method on the 2D base Plot. Both WCS axes in this
-   Plot are inherited from the 3D FrameSet that was supplied when the Plot3D
-   was constructed, and will be labelled. The other two Plots encapsulated 
-   in the Plot3D only inherit a single axis from the original 3D FrameSet
-   (a dummy axis is used for the second WCS axis in these Plots). */
-   baseplot = GET_PLOT( this->baseplot );
-   astGrid( baseplot );
-
-/* We next use astGrid to draw a grid on the 2D plane that shares the first 
-   base plot graphics axis. Get the identifier for this Plot and the 2D
-   graphics axis index within the Plot that corresponds to the first base
-   plot graphics axis. Also get the constant value on the 3rd graphics
-   axis over the base plot */
-   rootcorner = astGetRootCorner( this );
-   if( this->baseplot == XY ) {
-      new_plot = XZ;
-      new_gaxis = 0;
-      gcon = this->gbox[ ( rootcorner & 4 ) ? 5 : 2 ];
-
-   } else if( this->baseplot == XZ ) {
-      new_plot = XY;
-      new_gaxis = 0;
-      gcon = this->gbox[ ( rootcorner & 2 ) ? 4 : 1 ];
-
-   } else {
-      new_plot = XY;
-      new_gaxis = 1;
-      gcon = this->gbox[ ( rootcorner & 1 ) ? 3 : 0 ];
-   }
-
-/* Get a pointer to the Plot upon which astGrid is about to be invoked. */
-   plot = GET_PLOT( new_plot );
-
-/* Find which 2D WCS axis was labelled on graphics axis 0 (the bottom or
-   top edge) of the base plot. */
-   if( ( edge = astGetC( baseplot, "Edge(1)" ) ) ) {
-      base_wax2d = ( !strcmp( edge, "bottom" ) || !strcmp( edge, "top" ) ) ? 0 : 1;
-   } else {
-      base_wax2d = 0;
-   }   
-
-/* Get the 2D graphics coords within the base Plot at which the tick
-   marks were drawn for this 2D WCS axis. Extend the PointSets holding
-   the major tick values to include an extra tick above and below the
-   ticks drawn by astGrid. These extra ticks are placed outside the
-   bounds of the plot. This ensures that the curves on the other axis
-   extend the full width of the plot. */
-   tmp = astGetDrawnTicks( baseplot, base_wax2d, 1 );
-   majticks = ExtendTicks( baseplot, tmp, status );
-   nmaj = astGetNpoint( majticks );
-   ptrmaj = astGetPoints( majticks );
-
-   if( tmp ) tmp = astAnnul( tmp );
-   minticks = astGetDrawnTicks( baseplot, base_wax2d, 0 );
-   nmin = astGetNpoint( minticks );
-   ptrmin = astGetPoints( minticks );
-
-/* All the tick marks will have a constant value for the 2D graphics axis
-   that is not being ticked (axis 1 at the moment). Change this constant 
-   value to be the value appropriate to the new Plot. */
-   if( ptrmaj && ptrmin ) {
-      for( itick = 0; itick < nmaj; itick++ ) ptrmaj[ 1 ][ itick ] = gcon;
-      for( itick = 0; itick < nmin; itick++ ) ptrmin[ 1 ][ itick ] = gcon;
-   }
-
-/* If required, permute the axes in the tick mark positions. */
-   if( new_gaxis != 0 ) {        
-      perm[ 0 ] = 1;
-      perm[ 1 ] = 0;
-      astPermPoints( majticks, 1, perm );
-      astPermPoints( minticks, 1, perm );
-   }
-
-/* Transform the tick mark positions from 2D graphics coords to 2D WCS 
-   coords. */
-   wcsmajticks = astTransform( plot, majticks, 1, NULL );
-   wcsminticks = astTransform( plot, minticks, 1, NULL );
-
-/* Find the index of the 2D WCS axis that will be labelled on the bottom
-   or top edge (i.e. 2D graphics axis zero) of the new Plot. */
-   if( ( edge = astGetC( plot, "Edge(1)" ) ) ) {
-      new_wax2d = ( !strcmp( edge, "bottom" ) || !strcmp( edge, "top" ) ) ? 0 : 1;
-   } else {
-      new_wax2d = 0;
-   }   
-
-/* Use the other WCS axis if we are ticking the left or right edge (i.e.
-   2D graphics axis one) of the new Plot. This gives us the index of the
-   2D WCS axis for which tick values are to be stored in the Plot. */
-   if( new_gaxis == 1 ) new_wax2d = 1 - new_wax2d;
-
-/* Store the tick mark values to be used on this WCS axis. */
-   ptrmaj = astGetPoints( wcsmajticks );
-   ptrmin = astGetPoints( wcsminticks );
-   if( ptrmaj && ptrmin ) {
-      astSetTickValues( plot, new_wax2d, nmaj, ptrmaj[ new_gaxis ], 
-                                         nmin, ptrmin[ new_gaxis ] );
-   }
-
-/* Invoke the astGrid method on this plot. */
-   astGrid( plot );
-
-/* Clear the stored tick values in the plot. */
-   astSetTickValues( plot, new_wax2d, 0, NULL, 0, NULL ); 
-
-/* Free resources */
-   if( wcsmajticks ) wcsmajticks = astAnnul( wcsmajticks );
-   if( wcsminticks ) wcsminticks = astAnnul( wcsminticks );
-   if( majticks ) majticks = astAnnul( majticks );
-   if( minticks ) minticks = astAnnul( minticks );
-
-/* We next use astGrid to draw a grid on the 2D plane that shares the
-   second base plot graphics axis. Get the identifier for this Plot and the 
-   2D graphics axis index within the Plot that corresponds to the first 
-   base plot graphics axis. */
-   if( this->baseplot == XY ) {
-      new_plot = YZ;
-      new_gaxis = 0;
-
-   } else if( this->baseplot == XZ ) {
-      new_plot = YZ;
-      new_gaxis = 1;
-
-   } else {
-      new_plot = XZ;
-      new_gaxis = 1;
-   }
-
-/* Get a pointer to the Plot upon which astGrid is about to be invoked. */
-   plot = GET_PLOT( new_plot );
-
-/* Find which 2D WCS axis was labelled on graphics axis 1 (the left or
-   right edge) of the base plot. */
-   base_wax2d = 1 - base_wax2d;
-
-/* Get the 2D graphics coords within the base Plot at which the tick
-   marks were drawn for this 2D WCS axis. Extend the PointSets holding
-   the major tick values to include an extra tick above and below the
-   ticks drawn by astGrid. These extra ticks are placed outside the
-   bounds of the plot. This ensures that the curves on the other axis
-   extend the full width of the plot. */
-   tmp = astGetDrawnTicks( baseplot, base_wax2d, 1 );
-   majticks = ExtendTicks( baseplot, tmp, status );
-   nmaj = astGetNpoint( majticks );
-   ptrmaj = astGetPoints( majticks );
-
-   if( tmp ) tmp = astAnnul( tmp );
-   minticks = astGetDrawnTicks( baseplot, base_wax2d, 0 );
-   nmin = astGetNpoint( minticks );
-   ptrmin = astGetPoints( minticks );
-
-/* All the tick marks will have a constant value for the 2D graphics axis
-   that is not being ticked (axis 0 at the moment). Change this constant 
-   value to be the value appropriate to the new Plot. */
-   if( ptrmaj && ptrmin ) {
-      for( itick = 0; itick < nmaj; itick++ ) ptrmaj[ 0 ][ itick ] = gcon;
-      for( itick = 0; itick < nmin; itick++ ) ptrmin[ 0 ][ itick ] = gcon;
-   }
-
-/* If required, permute the axes in the tick mark positions. */
-   if( new_gaxis != 1 ) {        
-      perm[ 0 ] = 1;
-      perm[ 1 ] = 0;
-      astPermPoints( majticks, 1, perm );
-      astPermPoints( minticks, 1, perm );
-   }
-
-/* Transform the tick mark positions from 2D graphics coords to 2D WCS 
-   coords. */
-   wcsmajticks = astTransform( plot, majticks, 1, NULL );
-   wcsminticks = astTransform( plot, minticks, 1, NULL );
-
-/* Find the index of the 2D WCS axis that will be labelled on the bottom
-   or top edge (i.e. 2D graphics axis zero) of the new Plot. */
-   if( ( edge = astGetC( plot, "Edge(1)" ) ) ) {
-      new_wax2d = ( !strcmp( edge, "bottom" ) || !strcmp( edge, "top" ) ) ? 0 : 1;
-   } else {
-      new_wax2d = 0;
-   }   
-
-/* Use the other WCS axis if we are ticking the left or right edge (i.e.
-   2D graphics axis one) of the new Plot. This gives us the index of the
-   2D WCS axis for which tick values are to be stored in the Plot. */
-   if( new_gaxis == 1 ) new_wax2d = 1 - new_wax2d;
-
-/* Store the tick mark values to be used on this WCS axis. */
-   ptrmaj = astGetPoints( wcsmajticks );
-   ptrmin = astGetPoints( wcsminticks );
-   if( ptrmaj && ptrmin ) {
-      astSetTickValues( plot, new_wax2d, nmaj, ptrmaj[ new_gaxis ], 
-                                         nmin, ptrmin[ new_gaxis ] );
-   }
-
-/* Invoke the astGrid method on this plot. */
-   astGrid( plot );
-
-/* Clear the stored tick values in the plot. */
-   astSetTickValues( plot, new_wax2d, 0, NULL, 0, NULL ); 
-
-/* Free resources */
-   if( wcsmajticks ) wcsmajticks = astAnnul( wcsmajticks );
-   if( wcsminticks ) wcsminticks = astAnnul( wcsminticks );
-   if( majticks ) majticks = astAnnul( majticks );
-   if( minticks ) minticks = astAnnul( minticks );
-
-}
-
-void astInitPlot3DVtab_(  AstPlot3DVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPlot3DVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Plot3D.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void astInitPlot3DVtab( AstPlot3DVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Plot3D vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Plot3D class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS          /* Pointer to thread-specific global data */
-   AstFrame *dummy_frame;      /* The Frame to put in dummy_frameset */
-   AstPlotVtab *plot;          /* Pointer to Plot component of Vtab */
-   AstFrameSetVtab *fset;      /* Pointer to FrameSet component of Vtab */
-   AstMappingVtab *mapping;    /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;      /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitPlotVtab( (AstPlotVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPlot3D) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstPlotVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-#define SET_PLOT3D_ACCESSORS(attr) \
-   vtab->Set##attr = Set##attr; \
-   vtab->Get##attr = Get##attr; \
-   vtab->Test##attr = Test##attr; \
-   vtab->Clear##attr = Clear##attr;
-
-SET_PLOT3D_ACCESSORS(RootCorner)
-SET_PLOT3D_ACCESSORS(Norm)
-
-#undef SET_PLOT3D_ACCESSORS
-
-
-
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   fset = (AstFrameSetVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   plot = (AstPlotVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_equal = object->Equal;
-   object->Equal = Equal;
-
-   parent_vset = object->VSet;
-   object->VSet = VSet;
-
-   parent_cast = object->Cast;
-   object->Cast = Cast;
-
-   parent_clear = object->Clear;
-   object->Clear = Clear;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_clearcurrent = fset->ClearCurrent;
-   fset->ClearCurrent = ClearCurrent;
-
-   parent_setcurrent = fset->SetCurrent;
-   fset->SetCurrent = SetCurrent;
-
-   parent_removeframe = fset->RemoveFrame;
-   fset->RemoveFrame = RemoveFrame;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-/* Define a macro to override attribute accessors inherited from the 
-   parent Plot class. First do axis specific attributes. */
-
-#define SET_PLOT_ACCESSORS(attr) \
-   parent_get##attr = plot->Get##attr; \
-   plot->Get##attr = Get##attr; \
-   parent_set##attr = plot->Set##attr; \
-   plot->Set##attr = Set##attr; \
-   parent_clear##attr = plot->Clear##attr; \
-   plot->Clear##attr = Clear##attr;
-
-/* Use the above macro to override all the inherited attribute accessors. */
-SET_PLOT_ACCESSORS(MinTick)
-SET_PLOT_ACCESSORS(Abbrev)
-SET_PLOT_ACCESSORS(Gap)
-SET_PLOT_ACCESSORS(LogGap)
-SET_PLOT_ACCESSORS(LogPlot)
-SET_PLOT_ACCESSORS(LogTicks)
-SET_PLOT_ACCESSORS(LogLabel)
-SET_PLOT_ACCESSORS(LabelUp)
-SET_PLOT_ACCESSORS(DrawAxes)
-SET_PLOT_ACCESSORS(LabelUnits)
-SET_PLOT_ACCESSORS(MinTickLen)
-SET_PLOT_ACCESSORS(MajTickLen)
-SET_PLOT_ACCESSORS(NumLab)
-SET_PLOT_ACCESSORS(NumLabGap)
-SET_PLOT_ACCESSORS(TextLab)
-SET_PLOT_ACCESSORS(TextLabGap)
-
-#undef SET_PLOT_ACCESSORS
-
-
-/* Now do attributes that are not axis specific. */
-
-#define SET_PLOT_ACCESSORS(attr) \
-   parent_set##attr = plot->Set##attr; \
-   plot->Set##attr = Set##attr; \
-   parent_clear##attr = plot->Clear##attr; \
-   plot->Clear##attr = Clear##attr;
-
-SET_PLOT_ACCESSORS(Ink)
-SET_PLOT_ACCESSORS(Tol)
-SET_PLOT_ACCESSORS(Invisible)
-SET_PLOT_ACCESSORS(TickAll)
-SET_PLOT_ACCESSORS(ForceExterior)
-SET_PLOT_ACCESSORS(Border)
-SET_PLOT_ACCESSORS(Clip)
-SET_PLOT_ACCESSORS(ClipOp)
-SET_PLOT_ACCESSORS(Escape)
-SET_PLOT_ACCESSORS(Grid)
-SET_PLOT_ACCESSORS(Labelling)
-SET_PLOT_ACCESSORS(Style)
-SET_PLOT_ACCESSORS(Font)
-SET_PLOT_ACCESSORS(Colour)
-SET_PLOT_ACCESSORS(Width)
-SET_PLOT_ACCESSORS(Size)
-
-#undef SET_PLOT_ACCESSORS
-
-
-/* Store replacement pointers for methods which will be over-ridden by new
-   member functions implemented here. */
-   plot->Grid = Grid;
-   plot->Text = Text;
-   plot->SetTickValues = SetTickValues;
-   plot->PolyCurve = PolyCurve;
-   plot->Border = Border;
-   plot->BoundingBox = BoundingBox;
-   plot->GetGrfContext = GetGrfContext;
-   plot->GrfPop = GrfPop;
-   plot->GrfPush = GrfPush;
-   plot->GrfSet = GrfSet;
-   plot->GridLine = GridLine;
-   plot->Mark = Mark;
-   plot->Curve = Curve;
-   plot->GenCurve = GenCurve;
-   plot->Clip = Clip;
-   mapping->Transform = Transform;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "Plot3D", "Provide facilities for 3D graphical output" );
-
-/* Create a FrameSet that can be used when calling astCast to indicate
-   the class to which we want to cast. */
-   LOCK_MUTEX3
-   if( !dummy_frameset ) {
-      dummy_frame = astFrame( 1, " ", status );
-      dummy_frameset = astFrameSet( dummy_frame, " ", status );
-      dummy_frame = astAnnul( dummy_frame );
-   }
-   UNLOCK_MUTEX3
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;       /* Pointer to Plot3D structure */
-   int result;            /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->plotxy, mode, extra, fail );
-   if( !result ) result = astManageLock( this->plotxz, mode, extra, fail );
-   if( !result ) result = astManageLock( this->plotyz, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static void Mark( AstPlot *this_plot, int nmark, int ncoord, int indim, 
-                  const double *in, int type, int *status ){
-/*
-*  Name:
-*     Mark
-
-*  Purpose:
-*     Draw a set of markers for a Plot3D.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void Mark( AstPlot *this, int nmark, int ncoord, int indim,
-*                const double *in, int type, int *status )
-
-*  Class Membership:
-*     Plot3d member function (overrides the astMark method inherited form
-*     the parent Plot class).
-
-*  Description:
-*     This function draws a set of markers (symbols) at positions
-*     specified in the physical coordinate system of a Plot3D. The
-*     positions are transformed into graphical coordinates to
-*     determine where the markers should appear within the plotting
-*     area.
-*
-*     They are drawn on a 2D plane that has a normal vector given by the
-*     current value of the Plot3D's "Norm" attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     nmark
-*        The number of markers to draw. This may be zero, in which
-*        case nothing will be drawn.
-*     ncoord
-*        The number of coordinates being supplied for each mark
-*        (i.e. the number of axes in the current Frame of the Plot, as
-*        given by its Naxes attribute).
-*     indim
-*        The number of elements along the second dimension of the "in"
-*        array (which contains the marker coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-*        given should not be less than "nmark".
-*     in
-*        The address of the first element of a 2-dimensional array of 
-*        shape "[ncoord][indim]" giving the
-*        physical coordinates of the points where markers are to be
-*        drawn. These should be stored such that the value of
-*        coordinate number "coord" for input mark number "mark" is
-*        found in element "in[coord][mark]".
-*     type
-*        A value specifying the type (e.g. shape) of marker to be
-*        drawn. The set of values which may be used (and the shapes
-*        that will result) is determined by the underlying graphics
-*        system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Markers are not drawn at positions which have any coordinate
-*     equal to the value AST__BAD (or where the transformation into
-*     graphical coordinates yields coordinates containing the value
-*     AST__BAD).
-*     - An error results if the base Frame of the Plot is not 3-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*/
-
-/* Local Variables: */
-   AstMapping *mapping;    /* Pointer to graphics->physical mapping */
-   AstPlot3D *this;        /* Pointer to the Plot3D structure */
-   AstPointSet *pset1;     /* PointSet holding physical positions */
-   AstPointSet *pset2;     /* PointSet holding graphics positions */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   const double **ptr1;    /* Pointer to physical positions */
-   double **ptr2;          /* Pointer to graphics positions */
-   double *xpd;            /* Pointer to next double precision x value */ 
-   double *ypd;            /* Pointer to next double precision y value */ 
-   double *zpd;            /* Pointer to next double precision z value */ 
-   float *x;               /* Pointer to single precision x values */ 
-   float *xpf;             /* Pointer to next single precision x value */ 
-   float *y;               /* Pointer to single precision y values */ 
-   float *ypf;             /* Pointer to next single precision y value */ 
-   float *z;               /* Pointer to single precision z values */ 
-   float *zpf;             /* Pointer to next single precision z value */ 
-   float norm[ 3 ];        /* Single precision normal vector */
-   int axis;               /* Axis index */
-   int i;                  /* Loop count */
-   int naxes;              /* No. of axes in the base Frame */
-   int nn;                 /* Number of good marker positions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_plot;
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astMark";
-   class = astClass( this );
-
-/* Check the base Frame of the Plot is 3-D. */
-   naxes = astGetNin( this );
-   if( naxes != 3 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 3.", status, method, class, naxes, class );
-   } 
-
-/* Also validate the input array dimension argument. */
-   if ( astOK && ( indim < nmark ) ) {
-      astError( AST__DIMIN, "%s(%s): The input array dimension value "
-                "(%d) is invalid.", status, method, class, indim );
-      astError( AST__DIMIN, "This should not be less than the number of "
-                "markers being drawn (%d).", status, nmark );
-   }
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-   astGrfAttrs( this, AST__MARKS_ID, 1, GRF__MARK, method, class );
-
-/* Create a PointSet to hold the supplied physical coordinates. */
-   pset1 = astPointSet( nmark, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
-   ptr1 = (const double **) astMalloc( sizeof( const double * )*
-                                       (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
-   on each axis. */
-   if( astOK ){
-      for( axis = 0; axis < ncoord; axis++ ){
-         ptr1[ axis ] = in + axis*indim;
-      }
-   }
-
-/* Store these pointers in the PointSet. */
-   astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical 
-   coordinates) to the base frame (i.e. graphics coordinates) using 
-   the inverse Mapping defined by the Plot. */
-   mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-   pset2 = astTransform( mapping, pset1, 0, NULL );
-   mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
-   ptr2 = astGetPoints( pset2 );
-
-/* Allocate memory to hold single precision versions of the graphics
-   coordinates. */
-   x = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-   y = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-   z = (float *) astMalloc( sizeof( float )*(size_t) nmark );
-
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* Store pointers to the next single and double precision x, y and z
-   values. */
-      xpf = x;
-      ypf = y;
-      zpf = z;
-      xpd = ptr2[ 0 ];
-      ypd = ptr2[ 1 ];
-      zpd = ptr2[ 2 ];
-   
-/* Convert the double precision values to single precision, rejecting
-   any bad marker positions. */
-      nn = 0;
-      for( i = 0; i < nmark; i++ ){
-         if( *xpd != AST__BAD && *ypd != AST__BAD && *zpd != AST__BAD ){
-            nn++;
-            *(xpf++) = (float) *(xpd++);
-            *(ypf++) = (float) *(ypd++);
-            *(zpf++) = (float) *(zpd++);
-         } else {
-            xpd++;
-            ypd++;
-            zpd++;
-         }
-      }
-
-/* If the nornmal vector has non-zero length, draw the remaining markers. */
-      norm[ 0 ] = (float) astGetNorm( this, 0 );
-      norm[ 1 ] = (float) astGetNorm( this, 1 );
-      norm[ 2 ] = (float) astGetNorm( this, 2 );
-
-      if( norm[ 0 ] != 0.0 || norm[ 1 ] != 0.0 || norm[ 2 ] != 0.0 ){
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-         LOCK_MUTEX2;
-
-         if( !astG3DMark( nn, x, y, z, type, norm ) ) {
-            astError( AST__GRFER, "%s(%s): Graphics error in astG3DMark. ", status, 
-                   method, class );
-         }
-
-/* Allow the next thread to proceed. */
-         UNLOCK_MUTEX2;
-
-      } else if( astOK ) {
-         astError( AST__ATTIN, "%s(%s): The vector specified by the Norm "
-                   "attribute has zero length.", status, method, class );
-      }
-   }
-
-/* Free the memory used to store single precision graphics coordinates. */
-   x = (float *) astFree( (void *) x );
-   y = (float *) astFree( (void *) y );
-   z = (float *) astFree( (void *) z );
-   
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
-   ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
-   astGrfAttrs( this, AST__MARKS_ID, 0, GRF__MARK, method, class );
-
-/* Return */
-   return;
-}
-
-static int Plot3DAttr( AstKeyMap *grfconID, int attr, double value, 
-                       double *old_value, int prim ){
-/*
-*  Name:
-*     Plot3DAttr
-
-*  Purpose:
-*     Get or set the value of a 2D grf attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DAttr( AstKeyMap *grfconID, int attr, double value, 
-*                     double *old_value, int prim )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     get or set the current value of a specified graphics attribute. It
-*     forwards the call to the grf3D module being used by this Plot3D. It
-*     should be registered with each of the 2D Plots using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is used to identify which of 
-*       the three Plots is calling this function.
-*     attr 
-*       An integer value identifying the required attribute. This should
-*       be one of the symbolic values defined in grf.h.
-*     value 
-*       A new value to store for the attribute. If this is AST__BAD
-*       no value is stored.
-*     old_value 
-*       A pointer to a double in which to return the attribute value.
-*       If this is NULL, no value is returned.
-*     prim 
-*       The sort of graphics primitive to be drawn with the new attribute.
-*       Identified by one of the values defined in grf.h.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   int result;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time 
-   using ast_link options. Note, attribute values are the same for each
-   of the three Plot. */
-   result = astG3DAttr( attr, value, old_value, prim );
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Return the result. */
-   return result;
-}
-
-static int Plot3DCap( AstKeyMap *grfconID, int cap, int value ){
-/*
-*  Name:
-*     Plot3DCap
-
-*  Purpose:
-*     Determine if the 2D grf module has a given capability.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DCap( AstKeyMap *grfconID, int cap, int value )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     determine if a given graphics capability is available. It forwards 
-*     the call to the grf3D module being used by this Plot3D. It should be 
-*     registered with each of the 2D Plots using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is
-*       used to identify which of the three Plots is calling this function.
-*     cap
-*       The capability being inquired about. This will be one of the
-*       following constants defined in grf.h: GRF__SCALES, GRF__MJUST,
-*       GRF__ESC,
-*     value 
-*       The use of this parameter depends on the value of "cap" as
-*       described in the documentation for the astGrfSet function in the
-*       Plot class.
-
-*  Returned Value: 
-*     The value returned by the function depends on the value of "cap"
-*     as described in the astGrfSet documentation. Zero is returned if 
-*     the supplied capability is not recognised.
-
-*/
-
-/* Local Variables: */
-   int result;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* The astGScales function is implemented by code within the Plot3D class
-   (not within the grf3D module). The Plot3D class assumes all axes are
-   equally scaled. */
-   if( cap == GRF__SCALES ) {
-      result = 1;
-
-/* All grf3D modules are assumed to support "M" justification. */
-   } else if( cap == GRF__MJUST ) {
-      result = 1;
-
-/* Forward all other capability requests to the grf3D module. */
-   } else {
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-      LOCK_MUTEX2;
-
-      result = astG3DCap( cap, value );
-
-/* Allow the next thread to proceed. */
-      UNLOCK_MUTEX2;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Plot3DFlush( AstKeyMap *grfconID ){
-/*
-*  Name:
-*     Plot3DFlush
-
-*  Purpose:
-*     Flush any buffered graphical output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DFlush( AstKeyMap *grfconID )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     ensure that the display device is up-to-date by flushing any pending 
-*     graphics to the output device. It forwards the call to the grf3D module 
-*     being used by this Plot3D. It should be registered with each of the 
-*     2D Plots using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is
-*       used to identify which of the three Plots is calling this function.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   int result;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time 
-   using ast_link options. */
-   result = astG3DFlush();
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Return the result. */
-   return result;
-}
-
-static int Plot3DLine( AstKeyMap *grfconID, int n, const float *x, const float *y ){
-/*
-*  Name:
-*     Plot3DLine
-
-*  Purpose:
-*     Draw a polyline on a 2D surface.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DLine( AstKeyMap *grfconID, int n, const float *x, 
-*                     const float *y )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     draw a polyline. It forwards the call to the grf3D module being used 
-*     by this Plot3D. It should be registered with each of the 2D Plots 
-*     using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is
-*       used to identify which of the three Plots is calling this function.
-*     n 
-*       The number of positions to be joined together.
-*     x 
-*       A pointer to an array holding the "n" x values.
-*     y 
-*       A pointer to an array holding the "n" y values.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *grfcon;
-   double gcon;
-   float *work;
-   float *x3d = NULL;
-   float *y3d = NULL;
-   float *z3d = NULL;
-   int i;
-   int plane;
-   int result = 0;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
-   grfcon = astMakePointer( grfconID );   
-
-/* Report an error if no grfcon object was supplied. */
-   if( !grfcon ) {
-      astError( AST__INTER, "astG3DLine(Plot3D): No grfcon Object supplied "
-                "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
-   } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
-      astError( AST__INTER, "astG3DLine(Plot3D): No \"Gcon\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* Also get the plane index out of it. */
-   } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
-      astError( AST__INTER, "astG3DLine(Plot3D): No \"Plane\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-   }
-
-/* Allocate memory to hold the "n" values for the missing coordinate. */
-   work = astMalloc( sizeof( float )*(size_t) n );
-   if( work ) {
-
-/* Set up pointers to the x, y and z arrays in the 3D graphics system.
-   Fill the missing array with suitable values (the constant value of
-   the third axis on the plane being drawn). */
-      if( plane == XY ) {
-         x3d = (float *) x;
-         y3d = (float *) y;
-         z3d = work;
-         
-         for( i = 0; i < n; i++ ) z3d[ i ] = gcon;
-
-      } else if( plane == XZ ) {
-         x3d = (float *) x;
-         y3d = work;
-         z3d = (float *) y;
-         for( i = 0; i < n; i++ ) y3d[ i ] = gcon;
-
-      } else if( plane == YZ ) {
-         x3d = work;
-         y3d = (float *) x;
-         z3d = (float *) y;
-         for( i = 0; i < n; i++ ) x3d[ i ] = gcon;
-
-      } else {
-         astError( AST__INTER, "astG3DLine(Plot3D): Illegal plane "
-                   "identifier %d supplied (internal AST programming "
-                   "error).", status, plane );
-      }
-
-/* If ok, draw the lines in the 3D graphics coordinate space. */
-      if( x3d ) {
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-         LOCK_MUTEX2;
-
-/* Draw the line */
-         result = astG3DLine( n, x3d, y3d, z3d );
-
-/* Allow the next thread to proceed. */
-         UNLOCK_MUTEX2;
-      }
-   }
-
-/* Free resources. */
-   work = astFree( work );
-
-/* Return the result. */
-   return result;
-}
-
-static int Plot3DMark( AstKeyMap *grfconID, int n, const float *x, 
-                       const float *y, int type ){
-/*
-*  Name:
-*     Plot3DMark
-
-*  Purpose:
-*     Draw a set of markers.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DMark( AstKeyMap *grfconID, int n, const float *x, 
-*                     const float *y, int type )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     draw a set of markers. It forwards the call to the grf3D module being 
-*     used by this Plot3D. It should be registered with each of the 2D Plots 
-*     using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is
-*       used to identify which of the three Plots is calling this function.
-*     n 
-*       The number of markers to draw.
-*     x 
-*       A pointer to an array holding the "n" x values.
-*     y 
-*       A pointer to an array holding the "n" y values.
-*     type 
-*       An integer which can be used to indicate the type of marker symbol 
-*       required.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *grfcon;
-   double gcon;
-   float *work;
-   float *x3d = NULL;
-   float *y3d = NULL;
-   float *z3d = NULL;
-   float norm[ 3 ];
-   int i;          
-   int plane;
-   int rc;
-   int result = 0;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
-   grfcon = astMakePointer( grfconID );   
-
-/* Report an error if no grfcon object was supplied. */
-   if( !grfcon ) {
-      astError( AST__INTER, "astG3DMark(Plot3D): No grfcon Object supplied "
-                "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
-   } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
-      astError( AST__INTER, "astG3DMark(Plot3D): No \"Gcon\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* If a grfcon Object was supplied, get the RootCorner value out of it. */
-   } else if( !astMapGet0I( grfcon, "RootCorner", &rc ) ) {
-      astError( AST__INTER, "astG3DLine(Plot3D): No \"RootCornern\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* Also get the plane index out of it. */
-   } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
-      astError( AST__INTER, "astG3DMark(Plot3D): No \"Plane\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-   }
-
-/* Allocate memory to hold the "n" values for the missing coordinate. */
-   work = astMalloc( sizeof( float )*(size_t) n );
-   if( work ) {
-
-/* Set up pointers to the x, y and z arrays in the 3D graphics system.
-   Fill the missing array with suitable values (the constant value of
-   the third axis on the plane being drawn). Set the normal vector for
-   the markers so that they are drawn in the plane described by the Plot.*/
-      if( plane == XY ) {
-         x3d = (float *) x;
-         y3d = (float *) y;
-         z3d = work;
-         for( i = 0; i < n; i++ ) z3d[ i ] = gcon;
-         norm[ 0 ] = 0;
-         norm[ 1 ] = 0;
-         norm[ 2 ] = ( rc & 4 ) ? 1 : -1;
-
-      } else if( plane == XZ ) {
-         x3d = (float *) x;
-         y3d = work;
-         z3d = (float *) y;
-         for( i = 0; i < n; i++ ) y3d[ i ] = gcon;
-         norm[ 0 ] = 0;
-         norm[ 1 ] = ( rc & 2 ) ? 1 : -1;
-         norm[ 2 ] = 0;
-
-      } else if( plane == YZ ) {
-         x3d = work;
-         y3d = (float *) x;
-         z3d = (float *) y;
-         for( i = 0; i < n; i++ ) x3d[ i ] = gcon;
-         norm[ 0 ] = ( rc & 1 ) ? 1 : -1;
-         norm[ 1 ] = 0;
-         norm[ 2 ] = 0;
-
-      } else {
-         astError( AST__INTER, "astG3DMark(Plot3D): Illegal plane "
-                   "identifier %d supplied (internal AST programming "
-                   "error).", status, plane );
-      }
-
-/* If ok, draw the markers in the 3D graphics coordinate space. */
-      if( x3d ) {
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-         LOCK_MUTEX2;
-
-/* Draw the markers */
-         result = astG3DMark( n, x3d, y3d, z3d, type, norm );
-
-/* Allow the next thread to proceed. */
-         UNLOCK_MUTEX2;
-      }
-   }
-
-/* Free resources. */
-   work = astFree( work );
-
-/* Return the result. */
-   return result;
-}
-
-static int Plot3DQch( AstKeyMap *grfconID, float *chv, float *chh ){
-/*
-*  Name:
-*     Plot3DQch
-
-*  Purpose:
-*     Get the current text size.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DQch( AstKeyMap *grfconID, float *chv, float *chh )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     get the current text size. It forwards the call to the grf3D module 
-*     being used by this Plot3D. It should be registered with each of the 
-*     2D Plots using astGrfSet.
-*
-*     The grf3D module assumes that the 3D graphics axes are equally 
-*     scaled and therefore the text height does not depend on the text
-*     orientation. Therefore, "chv" and "chh" are returned holding the
-*     same value.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is
-*       used to identify which of the three Plots is calling this function.
-*     chv 
-*        A pointer to the float which is to receive the height of
-*        characters drawn with a vertical baseline in the 2D Plot. This 
-*        will be an increment in the 2D X axis.
-*     chh 
-*       A pointer to the float which is to receive the height of
-*       characters drawn with a horizontal baseline in the 2D Plot. This 
-*       will be an increment in the 2D Y axis.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   int result;
-   float ch;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-   LOCK_MUTEX2;
-
-/* Use the function in the external Grf3D module, selected at link-time 
-   using ast_link options. Note, text height is the same for each
-   of the three Plot. */
-   result = astG3DQch( &ch );
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2;
-
-/* Store the value in both the returned values. */
-   *chv = ch;
-   *chh = ch;
-
-/* Return the error flag. */
-   return result;
-}
-
-static int Plot3DScales( AstKeyMap *grfconID, float *alpha, float *beta ){
-/*
-*  Name:
-*     Plot3DScales
-
-*  Purpose:
-*     Get the 2D axis scales.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*      int Plot3DScales( AstKeyMap *grfconID, float *alpha, float *beta )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     get the relative scales of the 2D axes. Since the grf3D module
-*     assumes that all graphics axes are equally scaled, it just returns 1.0
-*     for alpha and beta.
-
-*  Parameters:
-*     grfconID
-*       The Plot's GrfContext KeyMap. This is
-*       used to identify which of the three Plots is calling this function.
-*     alpha 
-*       A pointer to the float which is to receive the scale for the X 
-*       axis 
-*     beta 
-*       A pointer to the float which is to receive the scale for the Y 
-*       axis 
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-   *alpha = 1.0;
-   *beta = 1.0;
-   return 1;
-}
-
-static int Plot3DText( AstKeyMap *grfconID, const char *text, float x, float y,
-                       const char *just, float upx, float upy ){
-/*
-*  Name:
-*     Plot3DText
-
-*  Purpose:
-*     Draw a text string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DText( AstKeyMap *grfconID, const char *text, float x, float y, 
-*                     const char *just, float upx, float upy )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     draw a text string. It forwards the call to the grf3D module being 
-*     used by this Plot3D. It should be registered with each of the 2D Plots 
-*     using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*        The Plot's GrfContext KeyMap. This is
-*        used to identify which of the three Plots is calling this function.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just 
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. 
-*     upx 
-*        The x component of the up-vector for the text. 
-*     upy 
-*        The y component of the up-vector for the text.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *grfcon;
-   double gcon;
-   float norm[ 3 ];
-   float ref[ 3 ];
-   float up[ 3 ];
-   int plane;
-   int rc;
-   int result = 0;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
-   grfcon = astMakePointer( grfconID );   
-
-/* Report an error if no grfcon object was supplied. */
-   if( !grfcon ) {
-      astError( AST__INTER, "astG3DText(Plot3D): No grfcon Object supplied "
-                "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
-   } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
-      astError( AST__INTER, "astG3DText(Plot3D): No \"Gcon\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* If a grfcon Object was supplied, get the RootCorner value out of it. */
-   } else if( !astMapGet0I( grfcon, "RootCorner", &rc ) ) {
-      astError( AST__INTER, "astG3DLine(Plot3D): No \"RootCornern\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* Also get the plane index out of it. */
-   } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
-      astError( AST__INTER, "astG3DText(Plot3D): No \"Plane\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* If OK, draw the text. */
-   } else {
-
-/* Set up the reference, up and normal vectors so that the text appears
-   on the required plane. */
-      if( plane == XY ) {
-         ref[ 0 ] = x;
-         ref[ 1 ] = y;
-         ref[ 2 ] = gcon;
-         norm[ 0 ] = 0;
-         norm[ 1 ] = 0;
-         norm[ 2 ] = ( rc & 4 ) ? 1 : -1;
-         up[ 0 ] = upx;
-         up[ 1 ] = upy;
-         up[ 2 ] = 0;
-
-      } else if( plane == XZ ) {
-         ref[ 0 ] = x;
-         ref[ 1 ] = gcon;
-         ref[ 2 ] = y;
-         norm[ 0 ] = 0;
-         norm[ 1 ] = ( rc & 2 ) ? 1 : -1;
-         norm[ 2 ] = 0;
-         up[ 0 ] = upx;
-         up[ 1 ] = 0;
-         up[ 2 ] = upy;
-
-      } else if( plane == YZ ) {
-         ref[ 0 ] = gcon;
-         ref[ 1 ] = x;
-         ref[ 2 ] = y;
-         norm[ 0 ] = ( rc & 1 ) ? 1 : -1;
-         norm[ 1 ] = 0;
-         norm[ 2 ] = 0;
-         up[ 0 ] = 0;
-         up[ 1 ] = upx;
-         up[ 2 ] = upy;
-
-      } else {
-         astError( AST__INTER, "astG3DText(Plot3D): Illegal plane "
-                   "identifier %d supplied (internal AST programming "
-                   "error).", status, plane );
-      }
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-      LOCK_MUTEX2;
-
-/* If ok, draw the markers in the 3D graphics coordinate space. */
-      if( astOK ) result = astG3DText( text, ref, just, up, norm );
-
-/* Allow the next thread to proceed. */
-      UNLOCK_MUTEX2;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Plot3DTxExt( AstKeyMap *grfconID, const char *text, float x, float y, 
-                        const char *just, float upx, float upy, float *xb,  
-                        float *yb ){
-/*
-*  Name:
-*     Plot3DTxExt
-
-*  Purpose:
-*     Determine the plotted extent of a text string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int Plot3DTxExt( AstKeyMap *grfconID, const char *text, float x, 
-*                      float y, const char *just, float upx, float upy, 
-*                      float *xb, float *yb )
-
-*  Class Membership:
-*     Plot3D member function.
-
-*  Description:
-*     This function is called by one of the three encapsulated 2D Plots to 
-*     determine the extent a string would have if plotted using Plot3DText. 
-*     It forwards the call to the grf3D module being used by this Plot3D. It 
-*     should be registered with each of the 2D Plots using astGrfSet.
-
-*  Parameters:
-*     grfconID
-*        The Plot's GrfContext KeyMap. This is
-*        used to identify which of the three Plots is calling this function.
-*     text 
-*        Pointer to a null-terminated character string to be displayed.
-*     x 
-*        The reference x coordinate.
-*     y 
-*        The reference y coordinate.
-*     just 
-*        A character string which specifies the location within the
-*        text string which is to be placed at the reference position
-*        given by x and y. 
-*     upx 
-*        The x component of the up-vector for the text. 
-*     upy 
-*        The y component of the up-vector for the text.
-*     xb 
-*        An array of 4 elements in which to return the x coordinate of
-*        each corner of the bounding box.
-*     yb 
-*        An array of 4 elements in which to return the y coordinate of
-*        each corner of the bounding box.
-
-*  Returned Value:
-*     An integer value of 0 is returned if an error occurs, and 1 otherwise. 
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *grfcon;
-   double gcon;
-   float *xb3d = NULL;
-   float *yb3d = NULL;
-   float *zb3d = NULL;
-   float bl[ 3 ];
-   float norm[ 3 ];
-   float ref[ 3 ];
-   float unused[ 4 ];
-   float up[ 3 ];
-   int plane;
-   int rc;
-   int result = 0;
-   int *status;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a genuine pointer from the supplied grfcon identifier. */
-   grfcon = astMakePointer( grfconID );   
-
-/* Report an error if no grfcon object was supplied. */
-   if( !grfcon ) {
-      astError( AST__INTER, "astG3DTxExt(Plot3D): No grfcon Object supplied "
-                "(internal AST programming error)." , status);
-
-/* If a grfcon Object was supplied, get the graphics box array out of it. */
-   } else if( !astMapGet0D( grfcon, "Gcon", &gcon ) ) {
-      astError( AST__INTER, "astG3DTxExt(Plot3D): No \"Gcon\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* If a grfcon Object was supplied, get the RootCorner value out of it. */
-   } else if( !astMapGet0I( grfcon, "RootCorner", &rc ) ) {
-      astError( AST__INTER, "astG3DLine(Plot3D): No \"RootCornern\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* Also get the plane index out of it. */
-   } else if( !astMapGet0I( grfcon, "Plane", &plane ) ) {
-      astError( AST__INTER, "astG3DTxExt(Plot3D): No \"Plane\" key found "
-                "in the supplied grfcon Object (internal AST programming "
-                "error)." , status);
-
-/* If OK, get the extent of the text. */
-   } else {
-
-/* Set up the reference, up and normal vectors so that the text appears
-   on the required plane. */
-      if( plane == XY ) {
-         ref[ 0 ] = x;
-         ref[ 1 ] = y;
-         ref[ 2 ] = gcon;
-         norm[ 0 ] = 0;
-         norm[ 1 ] = 0;
-         norm[ 2 ] = ( rc & 4 ) ? 1 : -1;
-         up[ 0 ] = upx;
-         up[ 1 ] = upy;
-         up[ 2 ] = 0;
-         xb3d = xb;
-         yb3d = yb;
-         zb3d = unused;
-
-      } else if( plane == XZ ) {
-         ref[ 0 ] = x;
-         ref[ 1 ] = gcon;
-         ref[ 2 ] = y;
-         norm[ 0 ] = 0;
-         norm[ 1 ] = ( rc & 2 ) ? 1 : -1;
-         norm[ 2 ] = 0;
-         up[ 0 ] = upx;
-         up[ 1 ] = 0;
-         up[ 2 ] = upy;
-         xb3d = xb;
-         yb3d = unused;
-         zb3d = yb;
-
-      } else if( plane == YZ ) {
-         ref[ 0 ] = gcon;
-         ref[ 1 ] = x;
-         ref[ 2 ] = y;
-         norm[ 0 ] = ( rc & 1 ) ? 1 : -1;
-         norm[ 1 ] = 0;
-         norm[ 2 ] = 0;
-         up[ 0 ] = 0;
-         up[ 1 ] = upx;
-         up[ 2 ] = upy;
-         xb3d = unused;
-         yb3d = xb;
-         zb3d = yb;
-
-      } else {
-         astError( AST__INTER, "astG3DTxExt(Plot3D): Illegal plane "
-                   "identifier %d supplied (internal AST programming "
-                   "error).", status, plane );
-      }
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-      LOCK_MUTEX2;
-
-/* If ok, get the extent of the text. */
-      if( astOK ) result = astG3DTxExt( text, ref, just, up, norm, xb3d, yb3d, 
-                                        zb3d, bl );
-/* Allow the next thread to proceed. */
-      UNLOCK_MUTEX2;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void PolyCurve( AstPlot *this, int npoint, int ncoord, int indim, 
-                       const double *in, int *status ){
-/*
-*  Name:
-*     PolyCurve
-
-*  Purpose:
-*     Draw a series of connected geodesic curves.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void PolyCurve( AstPlot *this, int npoint, int ncoord, int indim, 
-*                     const double *in, int *status )
-
-*  Class Membership:
-*     Plot method (overrides the astPolyCurve method inherited form the
-*     Plot class)
-
-*  Description:
-*     This function joins a series of points specified in the physical
-*     coordinate system of a Plot by drawing a sequence of geodesic
-*     curves.  It is equivalent to making repeated use of the astCurve
-*     function (q.v.), except that astPolyCurve will generally be more
-*     efficient when drawing many geodesic curves end-to-end. A
-*     typical application of this might be in drawing contour lines.
-*
-*     As with astCurve, full account is taken of the Mapping between
-*     physical and graphical coordinate systems. This includes any
-*     discontinuities and clipping established using astClip.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot.
-*     npoint
-*        The number of points between which geodesic curves are to be drawn.
-*     ncoord
-*        The number of coordinates being supplied for each point (i.e.
-*        the number of axes in the current Frame of the Plot, as given
-*        by its Naxes attribute).
-*     indim
-*        The number of elements along the second dimension of the "in"
-*        array (which contains the input coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-*        given should not be less than "npoint".
-*     in
-*        The address of the first element in a 2-dimensional array of shape 
-*        "[ncoord][indim]" giving the
-*        physical coordinates of the points which are to be joined in
-*        sequence by geodesic curves. These should be stored such that
-*        the value of coordinate number "coord" for point number
-*        "point" is found in element "in[coord][point]".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - No curve is drawn on either side of any point which has any
-*     coordinate equal to the value AST__BAD.
-*     - An error results if the base Frame of the Plot is not
-*     2-dimensional.
-*     - An error also results if the transformation between the
-*     current and base Frames of the Plot is not defined (i.e. the
-*     Plot's TranInverse attribute is zero).
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-   astError( AST__INTER, "astPolyCurve(%s): The astPolyCurve "
-             "method cannot be used with a %s (programming error).", status, 
-             astGetClass( this ), astGetClass( this ) );
-}
-
-static void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status ) {
-/*
-*  Name:
-*     RemoveFrame
-
-*  Purpose:
-*     Remove a Frame from a Plot3D.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "plot.h"
-*     void RemoveFrame( AstFrameSet *this_fset, int iframe, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astRemoveFrame public
-*     method inherited from the Plot class).
-
-*  Description:
-*     This function removes a Frame from a Plot3D. All other Frames
-*     in the Plot3D have their indices re-numbered from one (if
-*     necessary), but are otherwise unchanged.
-*
-*     If the index of the original base Frame is changed, the index value 
-*     stored in the Plot3D is updated. If the base Frame itself is
-*     removed, an error is reported.
-
-*  Parameters:
-*     this_fset
-*        Pointer to the FrameSet component of the Plot3D.
-*     iframe
-*        The index within the Plot3D of the Frame to be removed.
-*        This value should lie in the range from 1 to the number of
-*        Frames in the Plot3D (as given by its Nframe attribute).
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;          /* Pointer to Plot3D structure */
-   int ifrm;                 /* Validated frame index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_fset;
-
-/* Validate the frame index. This translated AST__BASE and AST__CURRENT
-   into actual Frame indices. */
-   ifrm = astValidateFrameIndex( this_fset, iframe, "astRemoveFrame" );
-
-/* Report an error if an attempt is made to delete the Frame that defines
-   the mapping onto the screen (the original base Frame in the FrameSet
-   supplied when the Plot3D was constructed). */
-   if( ifrm == this->pix_frame ){
-      astError( AST__PXFRRM, "astRemoveFrame(%s): Cannot delete Frame "
-                "number %d from the supplied %s since it is the Frame "
-                "that defines the mapping onto the graphics plane.", status,
-                 astGetClass( this ), iframe, astGetClass( this ) );
-
-/* Otherwise, invoke the parent astRemoveFrame method to remove the Frame. */
-   } else {
-      (*parent_removeframe)( this_fset, iframe, status );
-
-/* If the index of the removed Frame is smaller than the original base Frame
-   index, then decrement the original base Frame index so that the same Frame 
-   will be used in future. */
-      if( astOK ){
-         if( ifrm < this->pix_frame ) (this->pix_frame)--;
-      }
-   }
-}
-
-static int RootCornerInt( const char *rootcorner, int *status ){
-/*
-*  Name:
-*     RootCornerInt
-
-*  Purpose:
-*     Convert a RootCorner string to an integer.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int RootCornerInt( const char *rootcorner, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function converts a RootCorner string to an integer.
-
-*  Parameters:
-*     rootcorner
-*        The string value to convert. Should be 3 characters long
-*        and contain nothing but "U" or "L" (upper or lower case).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The integer value that is is the protected equivalent of the
-*     supplied string. A negative value is returned if an error has
-*     already occurred, of the supplied string is not legal.
-
-*/
-
-/* Local Variables: */
-   int result;
-
-/* Initialise */
-   result = -1;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Compare thr supplied value with every legal value. */
-   if( astChrMatch( rootcorner, "LLL" ) ) {
-      result = LLL;
-
-   } else if( astChrMatch( rootcorner, "ULL" ) ) {
-      result = ULL;
-
-   } else if( astChrMatch( rootcorner, "LUL" ) ) {
-      result = LUL;
-
-   } else if( astChrMatch( rootcorner, "UUL" ) ) {
-      result = UUL;
-
-   } else if( astChrMatch( rootcorner, "LLU" ) ) {
-      result = LLU;
-
-   } else if( astChrMatch( rootcorner, "ULU" ) ) {
-      result = ULU;
-
-   } else if( astChrMatch( rootcorner, "LUU" ) ) {
-      result = LUU;
-
-   } else if( astChrMatch( rootcorner, "UUU" ) ) {
-      result = UUU;
-
-   } 
-
-/* Return the result. */
-   return result;
-}
-
-static const char *RootCornerString( int rootcorner, int *status ){
-/*
-*  Name:
-*     RootCornerString
-
-*  Purpose:
-*     Convert a RootCorner integer to a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     const char *RootCornerString( int rootcorner, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function converts a RootCorner integer to a string.
-
-*  Parameters:
-*     rootcorner
-*        The integer value to convert. Should be in the range 0 to 7.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a static string that is the public equivalent of the
-*     supplied integer. A NULL pointer is returned if an error has
-*     already occurred, of the supplied integer is not legal.
-
-*/
-
-/* Local Variables: */
-   char *result;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Compare thr supplied value with every legal value. */
-   if( rootcorner == LLL ) {
-      result = "LLL";
-
-   } else if( rootcorner == ULL ) {
-      result = "ULL";
-
-   } else if( rootcorner == LUL ) {
-      result = "LUL";
-
-   } else if( rootcorner == UUL ) {
-      result = "UUL";
-
-   } else if( rootcorner == LLU ) {
-      result = "LLU";
-
-   } else if( rootcorner == ULU ) {
-      result = "ULU";
-
-   } else if( rootcorner == LUU ) {
-      result = "LUU";
-
-   } else if( rootcorner == UUU ) {
-      result = "UUU";
-
-   } 
-
-/* Return the result. */
-   return result;
-}
-
-static void Set3DGrf( AstPlot3D *this, AstPlot *plot, int plane, int *status ){
-/*
-*  Name:
-*     Set3DGrf
-
-*  Purpose:
-*     Associate GRF functions with a Plot.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void Set3DGrf( AstPlot3D *this, AstPlot *plot, int plane, int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function registers grf functions defined in this class with 
-*     the supplied Plot, so that, whenever the Plot draws anything, the 
-*     plotting request is caught by this class and converted into an 
-*     appropriate grf3D call.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     plot
-*        Pointer to the Plot.
-*     plane
-*        An integer identifier for the plane within 3D GRAPHICS
-*        coordinates upon which the supplied Plot should draw.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *grfcon;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Register the plotting functions defined in this class, so that the
-   plot will call these functions to do its 2D plotting. */
-   astGrfSet( plot, "Attr", (AstGrfFun) Plot3DAttr );
-   astGrfSet( plot, "Cap", (AstGrfFun) Plot3DCap );
-   astGrfSet( plot, "Flush", (AstGrfFun) Plot3DFlush );
-   astGrfSet( plot, "Line", (AstGrfFun) Plot3DLine );
-   astGrfSet( plot, "Mark", (AstGrfFun) Plot3DMark );
-   astGrfSet( plot, "Qch", (AstGrfFun) Plot3DQch );
-   astGrfSet( plot, "Scales", (AstGrfFun) Plot3DScales );
-   astGrfSet( plot, "Text", (AstGrfFun) Plot3DText );
-   astGrfSet( plot, "TxExt", (AstGrfFun) Plot3DTxExt );
-
-/* When the above functions are called, they need to know which plane
-   they are drawing on. So we put this information into the GrfContext 
-   KeyMap stored in the Plot. This KeyMap will be passed to the above 
-   drawing functions when they are called from within the Plot class. */
-   grfcon = astGetGrfContext( plot );
-   astMapPut0I( grfcon, "Plane", plane, "The 2D plane being drawn on" );
-   if( plane == XY ) {
-      astMapPut0D( grfcon, "Gcon", this->gbox[2], "Constant Z value" );
-   } else if( plane == XZ ) {
-      astMapPut0D( grfcon, "Gcon", this->gbox[1], "Constant Y value" );
-   } else {
-      astMapPut0D( grfcon, "Gcon", this->gbox[0], "Constant X value" );
-   }
-   astMapPut0I( grfcon, "RootCorner", astGetRootCorner(this), "The labelled corner" );
-   grfcon = astAnnul( grfcon );
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astSetAttrib protected
-*     method inherited from the Plot class).
-
-*  Description:
-*     This function assigns an attribute value for a Plot3D, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;              /* Pointer to the Plot3D structure */
-   double dval;                  /* Floating point attribute value */
-   int axis;                     /* Axis index */
-   int ival;                     /* Int attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Norm(axis). */
-/* ----------- */
-   if ( nc = 0,
-        ( 2 == astSscanf( setting, "norm(%d)= %lg %n",
-                          &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetNorm( this, axis - 1, dval );
-
-/* RootCorner. */
-/* ----------- */
-   } else if( nc = 0,
-        ( 0 == astSscanf( setting, "rootcorner=%n%*[^\n]%n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      ival = RootCornerInt( setting + ival, status );
-      if( astOK && ival < 0 ) {
-         astError( AST__ATTIN, "astSetAttrib(Plot3D): Unusable value \"%s\" "
-                   "given for attribute RootCorner.", status, setting + ival );
-      } else {
-         astSetRootCorner( this, ival );
-      }
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetCurrent( AstFrameSet *this_frameset, int iframe, int *status ) {
-/*
-*  Name:
-*     SetCurrent
-
-*  Purpose:
-*     Set a value for the Current attribute of a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int astSetCurrent( AstFrameSet *this, int iframe, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the public astSetCurrent method
-*     inherited from the FrameSet class).
-
-*  Description:
-*     This function sets a value for the Current attribute of a
-*     Plot3D. This attribute is an index that identifies the current
-*     Frame for the Plot3D.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     iframe
-*        Value to be set for the Current attribute.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Invoke the parent astSetCurrent method. */
-   (*parent_setcurrent)( this_frameset, iframe, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they 
-   reflect this modified FrameSet. */
-   UpdatePlots( (AstPlot3D *) this_frameset, status );
-}
-
-static void SetPlotAttr( AstPlot *plot, int plane, int label[ 2 ], int *status ){
-/*
-*  Name:
-*     SetPlotAttr
-
-*  Purpose:
-*     Set the attributes ofr one of the encapsulated Plots.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void SetPlotAttr( AstPlot *plot, int plane, int label[ 2 ], int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function sets the attributes of one of the encapsulated Plots.
-
-*  Parameters:
-*     plot
-*        Pointer to the Plot to modify.
-*     plane
-*        The 3D plane spanned by the 2D plot.
-*     label
-*        Array indicating if each WCS axis should be labelled or not.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int axis;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Ensure that the Plot uses the grf interface registered using
-   astGrfSet. */
-   astSetGrf( plot, 1 );   
-
-/* Ensure that no title is drawn. */
-   astSetDrawTitle( plot, 0 );
-
-/* For each axis, ensure that no axis labels or ticks are produced unless 
-   the axis is indicated as a labelled axis in the supplied array. */
-   for( axis = 0; axis < 2; axis++ ) {
-      if( !label[ axis ] ) {
-         astSetLabelUnits( plot, axis, 0 );
-         astSetNumLab( plot, axis, 0 );
-         astSetTextLab( plot, axis, 0 );
-      }
-   }
-}
-
-static void SetRootCorner( AstPlot3D *this, int rootcorner, int *status ){
-/*
-*+
-*  Name:
-*     astSetRootCorner
-
-*  Purpose:
-*     Set a new value for the RootCorner attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void astSetRootCorner( AstPlot3D *this, int rootcorner )
-
-*  Class Membership:
-*     Plot method.
-
-*  Description:
-*     This function sets a new value for the RootCorner attribute.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot3D.
-*     rootcorner
-*        The new RootCorner value.
-
-*-
-*/
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Report an error if the new value is out of bounds. */
-   if( rootcorner < 0 || rootcorner > 7 ){
-      astError( AST__ATTIN, "astSetRootCorner(Plot3D): Invalid value %d "
-                "supplied for RootCorner attribute", status,rootcorner);
-
-/* If the new corner is OK, mirror any axes of the encapsulated Plots
-   that need mirroring (this is done to ensure that Plots look right when
-   viewed from the outside of the graphics cube), and modify the Edge
-   attributes in the encapsulated Plots to ensure the labels appear on the
-   requested edges of the 3D graphics cube. . */
-   } else {
-      ChangeRootCorner( this, astGetRootCorner(this), rootcorner, status );
-
-/* Store the new value. */
-      this->rootcorner = rootcorner;
-   }   
-}
-
-static void SetTickValues( AstPlot *this, int axis, int nmajor, double *major,
-                           int nminor, double *minor, int *status ){
-/*
-*  Name:
-*     SetTickValues
-
-*  Purpose:
-*     Store the tick mark values to use for a given Plot axis.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void SetTickValues( AstPlot *this, int axis, int nmajor, 
-*                         double *major, int nminor, double *minor, int *status )
-
-*  Class Membership:
-*     Plot method (overrides the astSetTickValues method inherited form
-*     the Plot class)
-
-*  Description:
-*     This function stores a set of tick mark values that should be used by
-*     subsequent calls to astGrid.
-
-*  Parameters:
-*     this
-*        Pointer to a Plot.
-*     axis
-*        The zero-based index of the axis for which tick marks values
-*        have been supplied.
-*     nmajor
-*        The number of major tick mark values. If zero is supplied then
-*        the other parameters are ignored, and subsequent calls to
-*        astGrid will itself determine the tick values to be used.
-*     major
-*        Pointer to an array holding "nmajor" values for axis "axis" in
-*        the current Frame of the suppled Plot. Major tick marks will be
-*        drawn at these values. 
-*     nminor
-*        The number of minor tick mark values.
-*     minor 
-*        Pointer to an array holding "nminor" values for axis "axis" in
-*        the current Frame of the suppled Plot. Minor tick marks will be
-*        drawn at these values. 
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-   astError( AST__INTER, "astSetTickValues(%s): The astSetTickValues "
-             "method cannot be used with a %s (programming error).", status, 
-             astGetClass( this ), astGetClass( this ) );
-}
-
-static void SplitFrameSet( AstFrameSet *fset, 
-                           AstFrameSet **fsetxy, int labelxy[2], int wcsxy[2], 
-                           AstFrameSet **fsetxz, int labelxz[2], int wcsxz[2], 
-                           AstFrameSet **fsetyz, int labelyz[2], int wcsyz[2], 
-                           int *baseplane, int *status ){
-/*
-*  Name:
-*     SplitFrameSet
-
-*  Purpose:
-*     Split a 3D FrameSet into three 2D FrameSets.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void SplitFrameSet( AstFrameSet *fset, 
-*                         AstFrameSet **fsetxy, int labelxy[2], int wcsxy[2], 
-*                         AstFrameSet **fsetxz, int labelxz[2], int wcsxz[2], 
-*                         AstFrameSet **fsetyz, int labelyz[2], int wcsyz[2], 
-*                         int *baseplane, int *status )
-
-*  Class Membership:
-*     Plot3D member function 
-
-*  Description:
-*     This function returns 3 FrameSets, each of which has 2-dimensional 
-*     base and current Frames. Each of the 2D base Frames span a single
-*     plane in the 3D base Frame of the supplied FrameSet. Likewise, each 
-*     of the 2D current Frames span a single plane in the 3D current Frame 
-*     of the supplied FrameSet. An error is reported if there is no
-*     one-to-one association between the three planes in the supplied 
-*     current Frame and the 3 planes in the supplied base Frame.
-
-*  Parameters:
-*     fset
-*        Pointer to a FrameSet that has a 3D base Frame and a 3D current
-*        Frame. 
-*     fsetxy
-*        Pointer to a location at which to return a pointer to a new FrameSet 
-*        that has a 2D base Frame and a 2D current. The base Frame spans
-*        axes 1 and 2 of the 3D base Frame in "fset".
-*     labelxy
-*        Returned holding flags indicating if the two axes of the current 
-*        Frame in *fsetxy should be labelled or not.
-*     wcsxy
-*        Returned holding the zero based axis index within the current Frame 
-*        of the supplied FrameSet that corresponds to each of the two
-*        current Frame axes in the "fsetxy" FrameSet.
-*     fsetxz
-*        Pointer to a location at which to return a pointer to a new FrameSet 
-*        that has a 2D base Frame and a 2D current. The base Frame spans
-*        axes 1 and 3 of the 3D base Frame in "fset".
-*     labelxz
-*        Returned holding flags indicating if the two axes of the current 
-*        Frame in *fsetxz should be labelled or not.
-*     wcsxz
-*        Returned holding the zero based axis index within the current Frame 
-*        of the supplied FrameSet that corresponds to each of the two
-*        current Frame axes in the "fsetxz" FrameSet.
-*     fsetyz
-*        Pointer to a location at which to return a pointer to a new FrameSet 
-*        that has a 2D base Frame and a 2D current. The base Frame spans
-*        axes 2 and 3 of the 3D base Frame in "fset".
-*     labelyz
-*        Returned holding flags indicating if the two axes of the current 
-*        Frame in *fsetyz should be labelled or not.
-*     wcsyz
-*        Returned holding the zero based axis index within the current Frame 
-*        of the supplied FrameSet that corresponds to each of the two
-*        current Frame axes in the "fsetxy" FrameSet. 
-*     baseplane
-*        Index of the plane that is spanned by two connected 3D axes.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Null pointers will be returned for the three new FrameSets if this 
-*     function is invoked with the global status set, or if it should fail 
-*     for any reason.
-*     - Each returned FrameSet has 2 Frames: Frame 1 is the base Frame
-*     and is spanned by 2 of the 3 axes in the base Frame of the supplied 
-*     FrameSet; Frame 2 is the current Frame and is spanned by 2 of the 3 
-*     axes in the current Frame of the supplied FrameSet. Any future changes 
-*     to this function that alter this structure should reflected in 
-*     equivalent changes to functions CreatePlots and UpdatePlots.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm2d;
-   AstFrame *bfrm;
-   AstFrame *cfrm1d;
-   AstFrame *cfrm2d;
-   AstFrame *cfrm;
-   AstFrame *dummy;
-   AstFrameSet *fset1;
-   AstFrameSet *fset2;
-   AstFrameSet *fset3;
-   AstMapping *map1d;
-   AstMapping *map2d;
-   AstMapping *map;
-   AstMapping *smap;
-   AstUnitMap *unit1d;
-   int *axout;
-   int *other_axout;
-   int axin2[ 2 ];
-   int axin[ 2 ];
-   int i;
-   int label1[ 2 ];
-   int label2[ 2 ];
-   int label3[ 2 ];
-   int other_axin;
-   int wcsax1[ 2 ];
-   int wcsax2[ 2 ];
-   int wcsax3[ 2 ];
-
-/* Initialise. */
-   *fsetxy = NULL;
-   *fsetxz = NULL;
-   *fsetyz = NULL;
-   *baseplane = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the simplified base -> current Mapping form the supplied FrameSet.
-   Also get the base and current Frames themselves. */
-   map = astGetMapping( fset, AST__BASE, AST__CURRENT );
-   smap = astSimplify( map );
-   map = astAnnul( map );
-   cfrm = astGetFrame( fset, AST__CURRENT );
-   bfrm = astGetFrame( fset, AST__BASE );
-
-/* Create a 1D UnitMap. */
-   unit1d = astUnitMap( 1, "", status );
-
-/* First try to identify a pair of base Frame axes that map onto a pair
-   of current Frame axes. This will be the case for instance if the 3D
-   FrameSet describes a spectral cube in which two of the axes are spanned
-   by a SkyFrame. We try all three possible pairs of axes in turn until a
-   pair is found succesfully. */
-   for( i = 0; i < 3  && ! *fsetxy; i++ ) {
-      axin[ 0 ] = ( i < 2 ) ? 0 : 1;
-      axin[ 1 ] = ( i == 0 ) ? 1 : 2;
-
-/* Try to get a Mapping that connects the inputs given by axin to a
-   distinct subset of outputs. */
-      axout = astMapSplit( smap, 2, axin, &map2d );
-
-/* If succesful, check that the 2 inputs correspond to exactly 2 outputs. */
-      if( map2d ){
-         if( astGetNout( map2d ) == 2 ) {
-
-/* Get the index of the other input axis (the one not included in the pair). */
-            other_axin = 3 - axin[ 0 ] - axin[ 1 ];
-
-/* Try to get a Mapping that connects this remaining input to a distinct 
-   subset of outputs. */
-            other_axout = astMapSplit( smap, 1, &other_axin, &map1d );
-
-/* If succesful, check that the 1 input correspond to exactly 1 output. */
-            if( map1d ){
-               if( astGetNout( map1d ) == 1 ) {
-
-/* Pick the two axes from the 3D base and current Frames that correspond to
-   the paired axes found above. */
-                  bfrm2d = astPickAxes( bfrm, 2, axin, NULL );
-                  cfrm2d = astPickAxes( cfrm, 2, axout, NULL );
-
-/* Pick the axis from the 3D current Frame that correspond to
-   the other axis. */
-                  cfrm1d = astPickAxes( cfrm, 1, other_axout, NULL );
-
-/* Construct a FrameSet using these 2D Frames and Mapping. */
-                  fset1 = astFrameSet( bfrm2d, "", status );
-                  astAddFrame( fset1, AST__BASE, map2d, cfrm2d );
-
-                  bfrm2d = astAnnul( bfrm2d );
-                  cfrm2d = astAnnul( cfrm2d );
-                  map2d = astAnnul( map2d );
-
-/* Indicate that both axes in the current Frame of this FrameSet should
-   be labelled. */
-                  label1[ 0 ] = 1;
-                  label1[ 1 ] = 1;
-
-/* Store the index of the axis within the supplied current Frame that
-   corresponds to each axis in the current Frame of the FrameSet created
-   above. */
-                  wcsax1[ 0 ] = axout[ 0 ];
-                  wcsax1[ 1 ] = axout[ 1 ];
-
-/* Pick the two axes from the 3D base Frame that correspond to the first of 
-   the paired axes, and the unpaired axis. Order them so that we get the 
-   2 axes in the order xy, xz or yz. Also, store the index of the axis 
-   within the supplied  current Frame that corresponds to each axis in 
-   the current Frame of the FrameSet created below. */
-                  if( i < 2 ) {
-                     axin2[ 0 ] = axin[ 0 ];
-                     axin2[ 1 ] = other_axin;
-                     wcsax2[ 0 ] = axout[ 0 ];
-                     wcsax2[ 1 ] = other_axout[ 0 ];
-                  } else {
-                     axin2[ 0 ] = other_axin;
-                     axin2[ 1 ] = axin[ 0 ];
-                     wcsax2[ 0 ] = other_axout[ 0 ];
-                     wcsax2[ 1 ] = axout[ 0 ];
-                  }
-                  bfrm2d = astPickAxes( bfrm, 2, axin2, NULL );
-
-/* The corresponding current Frame in the new FrameSet will be a compound
-   2D Frame holding the other current Frame axis and a copy of the input
-   base Frame axis. Combine them so that we get the 2 axes in the order
-   xy, xz or yz. */
-                  dummy = astPickAxes( bfrm, 1, axin, NULL );
-                  if( i < 2 ) {
-                     cfrm2d = (AstFrame *) astCmpFrame( dummy, cfrm1d, "", status );
-                  } else {
-                     cfrm2d = (AstFrame *) astCmpFrame( cfrm1d, dummy, "", status );
-                  }
-                  dummy = astAnnul( dummy );
-
-/* The Mapping that joins this 2D base Frame to the 2D current Frame uses
-   the above 1D mapping for the other axis, and a UnitMap for the copied
-   base Frame axis. */
-                  if( i < 2 ) {
-                     map2d = (AstMapping *) astCmpMap( unit1d, map1d, 0, "", status );
-                  } else {
-                     map2d = (AstMapping *) astCmpMap( map1d, unit1d, 0, "", status );
-                  }
-
-/* Construct a FrameSet using these 2D Frames and Mapping. */
-                  fset2 = astFrameSet( bfrm2d, "", status );
-                  astAddFrame( fset2, AST__BASE, map2d, cfrm2d );
-
-                  bfrm2d = astAnnul( bfrm2d );
-                  cfrm2d = astAnnul( cfrm2d );
-                  map2d = astAnnul( map2d );
-                  
-/* Indicate that only one of the axes in the current Frame of this FrameSet 
-   should be labelled. */
-                  if( i < 2 ) {
-                     label2[ 0 ] = 0;
-                     label2[ 1 ] = 1;
-                  } else {
-                     label2[ 0 ] = 1;
-                     label2[ 1 ] = 0;
-                  }
-
-/* Pick the two axes from the 3D base Frame that correspond to the second 
-   of the paired axes, and the unpaired axis. Order them so that we get the 
-   2 axes in the order xy, xz or yz. Also, store the index of the axis 
-   within the supplied  current Frame that corresponds to each axis in 
-   the current Frame of the FrameSet created below. */
-                  if( i == 0 ) {
-                     axin2[ 0 ] = axin[ 1 ];
-                     axin2[ 1 ] = other_axin;
-                     wcsax3[ 0 ] = axout[ 1 ];
-                     wcsax3[ 1 ] = other_axout[ 0 ];
-                  } else {
-                     axin2[ 0 ] = other_axin;
-                     axin2[ 1 ] = axin[ 1 ];
-                     wcsax3[ 0 ] = other_axout[ 0 ];
-                     wcsax3[ 1 ] = axout[ 1 ];
-                  }
-                  bfrm2d = astPickAxes( bfrm, 2, axin2, NULL );
-
-/* The corresponding current Frame in the new FrameSet will be a compound
-   2D Frame holding the other current Frame axis and a copy of the input
-   base Frame axis. Combine them so that we get the 2 axes in the order
-   xy, xz or yz. */
-                  dummy = astPickAxes( bfrm, 1, axin + 1, NULL );
-                  if( i == 0 ) {
-                     cfrm2d = (AstFrame *) astCmpFrame( dummy, cfrm1d, "", status );
-                  } else {
-                     cfrm2d = (AstFrame *) astCmpFrame( cfrm1d, dummy, "", status );
-                  }
-                  dummy = astAnnul( dummy );
-
-/* The Mapping that joins this 2D base Frame to the 2D current Frame uses
-   the above 1D mapping for the other axis, and a UnitMap for the copied
-   base Frame axis. */
-                  if( i == 0 ) {
-                     map2d = (AstMapping *) astCmpMap( unit1d, map1d, 0, "", status );
-                  } else {
-                     map2d = (AstMapping *) astCmpMap( map1d, unit1d, 0, "", status );
-                  }
-
-/* Construct a FrameSet using these 2D Frames and Mapping. */
-                  fset3 = astFrameSet( bfrm2d, "", status );
-                  astAddFrame( fset3, AST__BASE, map2d, cfrm2d );
-
-                  bfrm2d = astAnnul( bfrm2d );
-                  cfrm2d = astAnnul( cfrm2d );
-                  map2d = astAnnul( map2d );
-
-/* Indicate that neither axis in the current Frame of this FrameSet 
-   should be labelled. */
-                  label3[ 0 ] = 0;
-                  label3[ 1 ] = 0;
-
-/* Store each FrameSet in the correct returned pointer. */
-                  if( i == 0 ) {
-                     *baseplane = XY;
-                     *fsetxy = fset1;
-                     *fsetxz = fset2;
-                     *fsetyz = fset3;
-
-                     labelxy[ 0 ] = label1[ 0 ];
-                     labelxy[ 1 ] = label1[ 1 ];
-                     labelxz[ 0 ] = label2[ 0 ];
-                     labelxz[ 1 ] = label2[ 1 ];
-                     labelyz[ 0 ] = label3[ 0 ];
-                     labelyz[ 1 ] = label3[ 1 ];
-
-                     wcsxy[ 0 ] = wcsax1[ 0 ];
-                     wcsxy[ 1 ] = wcsax1[ 1 ];
-                     wcsxz[ 0 ] = wcsax2[ 0 ];
-                     wcsxz[ 1 ] = wcsax2[ 1 ];
-                     wcsyz[ 0 ] = wcsax3[ 0 ];
-                     wcsyz[ 1 ] = wcsax3[ 1 ];
-
-                  } else if( i == 1 ) {
-                     *baseplane = XZ;
-                     *fsetxy = fset2;
-                     *fsetxz = fset1;
-                     *fsetyz = fset3;
-
-                     labelxy[ 0 ] = label2[ 0 ];
-                     labelxy[ 1 ] = label2[ 1 ];
-                     labelxz[ 0 ] = label1[ 0 ];
-                     labelxz[ 1 ] = label1[ 1 ];
-                     labelyz[ 0 ] = label3[ 0 ];
-                     labelyz[ 1 ] = label3[ 1 ];
-
-                     wcsxy[ 0 ] = wcsax2[ 0 ];
-                     wcsxy[ 1 ] = wcsax2[ 1 ];
-                     wcsxz[ 0 ] = wcsax1[ 0 ];
-                     wcsxz[ 1 ] = wcsax1[ 1 ];
-                     wcsyz[ 0 ] = wcsax3[ 0 ];
-                     wcsyz[ 1 ] = wcsax3[ 1 ];
-
-                  } else {
-                     *baseplane = YZ;
-                     *fsetxy = fset2;
-                     *fsetxz = fset3;
-                     *fsetyz = fset1;
-
-                     labelxy[ 0 ] = label2[ 0 ];
-                     labelxy[ 1 ] = label2[ 1 ];
-                     labelxz[ 0 ] = label3[ 0 ];
-                     labelxz[ 1 ] = label3[ 1 ];
-                     labelyz[ 0 ] = label1[ 0 ];
-                     labelyz[ 1 ] = label1[ 1 ];
-
-                     wcsxy[ 0 ] = wcsax2[ 0 ];
-                     wcsxy[ 1 ] = wcsax2[ 1 ];
-                     wcsxz[ 0 ] = wcsax3[ 0 ];
-                     wcsxz[ 1 ] = wcsax3[ 1 ];
-                     wcsyz[ 0 ] = wcsax1[ 0 ];
-                     wcsyz[ 1 ] = wcsax1[ 1 ];
-
-                  }                  
-
-/*  Free resources */
-                  cfrm1d = astAnnul( cfrm1d );
-               }
-
-/*  Free resources */
-               map1d = astAnnul( map1d );
-               other_axout = astFree( other_axout );
-            }
-         }
-
-/*  Free resources */
-         if( map2d ) map2d = astAnnul( map2d );
-         axout = astFree( axout );
-
-/* Leave the loop if we now have the required FrameSets, or an error has
-   occurred. */
-         if( *fsetxy || !astOK ) break;
-
-      }
-   }
-
-/* Free resources */
-   cfrm = astAnnul( cfrm );
-   bfrm = astAnnul( bfrm );
-   smap = astAnnul( smap );
-   unit1d = astAnnul( unit1d );
-
-/* Return null pointers if an error has occurred. */
-   if( !astOK ) {
-      *fsetxy = astAnnul( *fsetxy );
-      *fsetxz = astAnnul( *fsetxz );
-      *fsetyz = astAnnul( *fsetyz );
-
-/* Report an error if the supplied FrameSet could not be split into 3
-   independent 2D planes. */
-   } if( ! *fsetxy ) {
-      astError( AST__3DFSET, "astInitPlot3D(Plot3D): Supplied %s contains "
-                             "no independent axes.", status, astGetClass( fset ) );
-   }
-}
-
-static void StoreAxisInfo( AstPlot3D *this, int labelxy[2], int wcsxy[2], 
-                           int labelxz[2], int wcsxz[2], int labelyz[2], 
-                           int wcsyz[2], int *status ) {
-/*
-*  Name:
-*     StoreAxisInfo
-
-*  Purpose:
-*     Store information connecting 3D axis with associuated 2D Plot axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void StoreAxisInfo( AstPlot3D *this, int labelxy[2], int wcsxy[2], 
-*                         int labelxz[2], int wcsxz[2], int labelyz[2], 
-*                         int wcsyz[2], int *status )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function stores information inside the Plot3D that allows each
-*     3D axis to be associated with the 2 Plots that share the 3D axis,
-*     and with the axis index within each of these two Plots.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     labelxy
-*        Flags indicating if the two axes of the current Frame in the XY
-*        Plot should be labelled or not.
-*     wcsxy
-*        The zero based axis index within the 3D current Frame that 
-*        corresponds to each of the two current Frame axes in the XY Plot.
-*        A value of -1 should be used for 2D axes that do not correspond 
-*        to any 3D axis.
-*     labelxz
-*        Flags indicating if the two axes of the current Frame in the XZ
-*        Plot should be labelled or not.
-*     wcsxz
-*        The zero based axis index within the 3D current Frame that 
-*        corresponds to each of the two current Frame axes in the XZ Plot.
-*        A value of -1 should be used for 2D axes that do not correspond 
-*        to any 3D axis.
-*     labelyz
-*        Flags indicating if the two axes of the current Frame in the YZ
-*        Plot should be labelled or not.
-*     wcsyz
-*        The zero based axis index within the 3D current Frame that 
-*        corresponds to each of the two current Frame axes in the YZ Plot.
-*        A value of -1 should be used for 2D axes that do not correspond 
-*        to any 3D axis.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int axis2d;
-   int axis3d;
-   int gotfirst;
-   int gotsecond;
-   int temp;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Store information that allows each 3D WCS axis to be associated with
-   a pair of Plots. Also store the WCS axis within each Plot that
-   corresponds to the 3D WCS axis. Do each 3D WCS axis in turn. */
-   for( axis3d = 0; axis3d < 3; axis3d++ ) {
-
-/* Indicate we have not yet found either of the two Plots that share the
-   current 3D axis. */
-      gotfirst = 0;
-      gotsecond = 0;
-
-/* Check each of the 2 axes in the plot spanning the XY face of the 3D
-   graphics cube. Break early if we have found both Plots for the current
-   3D WCS axis. */
-      for( axis2d = 0; axis2d < 2 && !gotsecond; axis2d++ ) {
-
-/* See if this 2D axis corresponds to the required 3D axis. If so, store
-   the Plot identifier and the 2D axis index. */
-         if( wcsxy[ axis2d ] == axis3d ) {
-            if( gotfirst ) {
-               this->axis_plot2[ axis3d ] = XY;
-               this->axis_index2[ axis3d ] = axis2d;
-               gotsecond = 1;
-            } else {
-               this->axis_plot1[ axis3d ] = XY;
-               this->axis_index1[ axis3d ] = axis2d;
-               gotfirst = 1;
-            }
-         }
-      }
-
-/* Check the plot spanning the XZ face in the same way. */
-      for( axis2d = 0; axis2d < 2 && !gotsecond; axis2d++ ) {
-         if( wcsxz[ axis2d ] == axis3d ) {
-            if( gotfirst ) {
-               this->axis_plot2[ axis3d ] = XZ;
-               this->axis_index2[ axis3d ] = axis2d;
-               gotsecond = 1;
-            } else {
-               this->axis_plot1[ axis3d ] = XZ;
-               this->axis_index1[ axis3d ] = axis2d;
-               gotfirst = 1;
-            }
-         }
-      }
-
-/* Check the plot spanning the YZ face in the same way. */
-      for( axis2d = 0; axis2d < 2 && !gotsecond; axis2d++ ) {
-         if( wcsyz[ axis2d ] == axis3d ) {
-            if( gotfirst ) {
-               this->axis_plot2[ axis3d ] = YZ;
-               this->axis_index2[ axis3d ] = axis2d;
-               gotsecond = 1;
-            } else {
-               this->axis_plot1[ axis3d ] = YZ;
-               this->axis_index1[ axis3d ] = axis2d;
-               gotfirst = 1;
-            }
-         }
-      }
-   }
-
-/* Ensure that the first Plot within each pair is the one that is used to
-   generate labels for the 3D axis. */
-   for( axis2d = 0; axis2d < 2; axis2d++ ) {
-      if( labelxy[ axis2d ] ) {
-         axis3d = wcsxy[ axis2d ];
-         if( this->axis_plot1[ axis3d ] != XY ){
-            temp = this->axis_plot1[ axis3d ];
-            this->axis_plot1[ axis3d ] = this->axis_plot2[ axis3d ];
-            this->axis_plot2[ axis3d ] = temp;
-   
-            temp = this->axis_index1[ axis3d ];
-            this->axis_index1[ axis3d ] = this->axis_index2[ axis3d ];
-            this->axis_index1[ axis3d ] = temp;
-         }
-      }
-   }
-
-   for( axis2d = 0; axis2d < 2; axis2d++ ) {
-      if( labelxz[ axis2d ] ) {
-         axis3d = wcsxz[ axis2d ];
-         if( this->axis_plot1[ axis3d ] != XZ ){
-            temp = this->axis_plot1[ axis3d ];
-            this->axis_plot1[ axis3d ] = this->axis_plot2[ axis3d ];
-            this->axis_plot2[ axis3d ] = temp;
-   
-            temp = this->axis_index1[ axis3d ];
-            this->axis_index1[ axis3d ] = this->axis_index2[ axis3d ];
-            this->axis_index1[ axis3d ] = temp;
-         }
-      }
-   }
-
-   for( axis2d = 0; axis2d < 2; axis2d++ ) {
-      if( labelyz[ axis2d ] ) {
-         axis3d = wcsyz[ axis2d ];
-         if( this->axis_plot1[ axis3d ] != YZ ){
-            temp = this->axis_plot1[ axis3d ];
-            this->axis_plot1[ axis3d ] = this->axis_plot2[ axis3d ];
-            this->axis_plot2[ axis3d ] = temp;
-   
-            temp = this->axis_index1[ axis3d ];
-            this->axis_index1[ axis3d ] = this->axis_index2[ axis3d ];
-            this->axis_index1[ axis3d ] = temp;
-         }
-      }
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astTestAttrib protected
-*     method inherited from the Plot class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Plot3D's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPlot3D *this;              /* Pointer to the Plot3D structure */
-   int axis;                     /* Axis index */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* Number of character read */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Norm. */
-/* ----- */
-   if ( !strcmp( attrib, "norm" ) ) {
-      result = astTestNorm( this, 0 ) ||
-               astTestNorm( this, 1 ) ||
-               astTestNorm( this, 2 );
-
-/* Norm(axis). */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( attrib, "norm(%d)%n", &axis, &nc ) )
-               && ( nc >= len ) ) {
-      result = astTestNorm( this, axis -  1 );
-
-/* RootCorner. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "rootcorner" ) ) {
-      result = astTestRootCorner( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static void Text( AstPlot *this_plot, const char *text, const double pos[], 
-                  const float up[], const char *just, int *status ){
-/*
-*  Name:
-*     Text
-
-*  Purpose:
-*     Draw a text string for a Plot3D.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void Text( AstPlot *this, const char *text, const double pos[], 
-*                const float up[], const char *just, int *status )
-
-*  Class Membership:
-*     Plot3D method (overrides the Text method inherited form the Plot
-*     class).
-
-*  Description:
-*     This function draws a string of text at a position specified in
-*     the physical coordinate system of a Plot3D. The physical position
-*     is transformed into graphical coordinates to determine where the
-*     text should appear within the plotting area.
-*
-*     The text is drawn on a 2D plane that has a normal vector given by the
-*     current value of the Plot3D's "Norm" attribute.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     text
-*        Pointer to a null-terminated character string containing the
-*        text to be drawn. Trailing white space is ignored.
-*     pos
-*        An array, with one element for each axis of the Plot3D, giving
-*        the physical coordinates of the point where the reference
-*        position of the text string is to be placed.
-*     up
-*        An array holding the components of a vector in the "up"
-*        direction of the text (in graphical coordinates). For
-*        example, to get horizontal text, the vector {0.0f,1.0f} should
-*        be supplied. "Up" is taken to be the projection of the positive
-*        Z axis onto the plane specified by the current value of the 
-*     just
-*        Pointer to a null-terminated character string identifying the
-*        reference point for the text being drawn. The first character in
-*        this string identifies the reference position in the "up" direction
-*        and may be "B" (baseline), "C" (centre), "T" (top) or "M" (bottom). 
-*        The second character identifies the side-to-side reference position 
-*        and may be "L" (left), "C" (centre) or "R" (right ). The string is 
-*        case-insensitive, and only the first two characters are significant.
-*
-*        For example, a value of "BL" means that the left end of the
-*        baseline of the original (un-rotated) text is to be drawn at the
-*        position given by "pos".
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapping *mapping;    /* Pointer to graphics->physical mapping */
-   AstPlot3D *this;        /* Pointer to the Plot3D structure */
-   AstPointSet *pset1;     /* PointSet holding physical positions */
-   AstPointSet *pset2;     /* PointSet holding graphics positions */
-   char *ltext;            /* Local copy of "text" excluding trailing spaces */
-   char ljust[3];          /* Upper case copy of "just" */
-   const char *class;      /* Object class */
-   const char *method;     /* Current method */
-   const double **ptr1;    /* Pointer to physical positions */
-   double **ptr2;          /* Pointer to graphics positions */
-   float norm[ 3 ];        /* Single precision normal vector */
-   float ref[ 3 ];         /* Single precision ref position */
-   int axis;               /* Axis index */
-   int escs;               /* Original astEscapes value */
-   int naxes;              /* No. of axes in the base Frame */
-   int ncoord;             /* No. of axes in the current Frame */
-   int ulen;               /* Length of "text" excluding trailing spaces */
-
-/* Check the global error status. */
-   if ( !astOK || !text ) return;
-
-/* Store a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_plot;
-
-/* Store the current method and class for inclusion in error messages
-   generated by lower level functions. */
-   method = "astText";
-   class = astClass( this );
-
-/* Check the base Frame of the Plot is 3-D. */
-   naxes = astGetNin( this );
-   if( naxes != 3 && astOK ){
-      astError( AST__NAXIN, "%s(%s): Number of axes (%d) in the base "
-                "Frame of the supplied %s is invalid - this number should "
-                "be 3.", status, method, class, naxes, class );
-   } 
-
-/* Ensure AST functions do not included graphical escape sequences in any
-   returned text strings. This is because the Plot3D implementation of
-   this method cannot currently handle graphical escape sequences. */
-   escs = astEscapes( 0 );
-
-/* Establish the correct graphical attributes as defined by attributes
-   with the supplied Plot. */
-   astGrfAttrs( this, AST__TEXT_ID, 1, GRF__TEXT, method, class );
-
-/* Get the number of coordinates in the physical coordinate frame. */
-   ncoord = astGetNout( this );   
-
-/* Create a PointSet to hold the supplied physical coordinates. */
-   pset1 = astPointSet( 1, ncoord, "", status );
-
-/* Allocate memory to hold pointers to the first value on each axis. */
-   ptr1 = (const double **) astMalloc( sizeof( const double * )*
-                                       (size_t)( ncoord ));
-
-/* Check the pointer can be used, then store pointers to the first value
-   on each axis. */
-   if( astOK ){
-      for( axis = 0; axis < ncoord; axis++ ){
-         ptr1[ axis ] = pos + axis;
-      }
-   }
-
-/* Store these pointers in the PointSet. */
-   astSetPoints( pset1, (double **) ptr1 );
-
-/* Transform the supplied data from the current frame (i.e. physical 
-   coordinates) to the base frame (i.e. graphics coordinates) using 
-   the inverse Mapping defined by the Plot. */
-   mapping = astGetMapping( this, AST__BASE, AST__CURRENT );
-   pset2 = astTransform( mapping, pset1, 0, NULL );
-   mapping = astAnnul( mapping );
-
-/* Get pointers to the graphics coordinates. */
-   ptr2 = astGetPoints( pset2 );
-
-/* Take a copy of the string excluding any trailing white space. */
-   ulen = astChrLen( text );
-   ltext = (char *) astStore( NULL, (void *) text, ulen + 1 );
-
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* Terminate the local copy of the text string. */
-      ltext[ ulen ] = 0;
-
-/* Produce an upper-case copy of the first two characters in "just". */
-      ljust[0] = (char) toupper( (int) just[0] );
-      ljust[1] = (char) toupper( (int) just[1] );
-      ljust[2] = 0;
-
-/* Convert the double precision values to single precision, checking for
-   bad positions. */
-      if( ptr2[0][0] != AST__BAD && ptr2[1][0] != AST__BAD &&
-          ptr2[2][0] != AST__BAD ){
-         ref[ 0 ] = (float) ptr2[0][0];
-         ref[ 1 ] = (float) ptr2[1][0];
-         ref[ 2 ] = (float) ptr2[2][0];
-
-/* If the nornmal vector has non-zero length, draw the text. */
-         norm[ 0 ] = (float) astGetNorm( this, 0 );
-         norm[ 1 ] = (float) astGetNorm( this, 1 );
-         norm[ 2 ] = (float) astGetNorm( this, 2 );
-
-/* Since we are about to call an external function which may not be
-   thread safe, prevent any other thread from executing the following code
-   until the current thread has finished executing it. */
-         LOCK_MUTEX2;
-
-         if( norm[ 0 ] != 0.0 || norm[ 1 ] != 0.0 || norm[ 2 ] != 0.0 ){
-            if( !astG3DText( ltext, ref, ljust, (float *) up, norm ) ) {
-               astError( AST__GRFER, "%s(%s): Graphics error in astG3DText. ", status, 
-                         method, class );
-            }
-         } else if( astOK ) {
-            astError( AST__ATTIN, "%s(%s): The vector specified by the Norm "
-                      "attribute has zero length.", status, method, class );
-         }
-
-/* Allow the next thread to proceed. */
-         UNLOCK_MUTEX2;
-      }
-
-/* Free the local copy of the string. */
-      ltext = (char *) astFree( (void *) ltext );
-
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free the memory holding the pointers to the first value on each axis. */
-   ptr1 = (const double **) astFree( (void *) ptr1 );
-
-/* Re-establish the original graphical attributes. */
-   astGrfAttrs( this, AST__TEXT_ID, 0, GRF__TEXT, method, class );
-
-/* Restore the original value of the flag which says whether graphical 
-   escape sequences should be incldued in any returned text strings. */
-   astEscapes( escs );
-
-/* Return */
-   return;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Use a Plot to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the astTransform protected
-*     method inherited from the Plot class).
-
-*  Description:
-*     This function takes a Plot3D and a set of points encapsulated in a
-*     PointSet and transforms the points from graphics coordinates to 
-*     physical coordinates (in the forward direction). No clipping or
-*     normalisation is applied.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate 
-*        transformation should be applied while a zero value requests the 
-*        inverse transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the Plot being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstMapping *map;              /* Pointer to the mapping */
-   AstPointSet *result;          /* Positions in output Frame */
-   AstPlot3D *this;              /* The Plot3D */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the Plot3D. */
-   this = (AstPlot3D *) this_mapping;
-
-/* Get the Mapping from the base to the current Frame. */
-   map = astGetMapping( this, AST__BASE, AST__CURRENT );
-
-/* Do the transformation. */
-   result = astTransform( map, in, forward, out );
-
-/* Annul the mapping. */
-   map = astAnnul( map );
-
-/* If an error has occurred, annul the result. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static void UpdatePlots( AstPlot3D *this, int *status ) {
-/*
-*  Name:
-*     UpdatePlots
-
-*  Purpose:
-*     Update the three 2D plots stored in the Plot3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     void UpdatePlots( AstPlot3D *this )
-
-*  Class Membership:
-*     Plot3D method.
-
-*  Description:
-*     This function splits the parent FrameSet up into 3 independent 2D
-*     FrameSets, each describing a 2D plane in the supplied 3D FrameSet.
-*     It then uses these 2D FrameSets to update the three Plots in the
-*     Plot3D, by removing the existing current Frame and adding in the
-*     new current Frame with the associated Mapping.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-
-*  Notes: 
-*     - Each of the 3 plots has 3 Frames: Frame 1 is the base (GRAPHICS)
-*     Frame; Frame 2 is spanned by 2 of the 3 axes in the base Frame of
-*     the supplied FrameSet; Frame 3 is the current Frame and is spanned
-*     by 2 of the 3 axes in the current Frame of the supplied FrameSet.
-*     Any future changes to this function that alter this structure should 
-*     reflected in equivalewnt changes to function CreatePlots.
-*/
-
-/* Local Variables: */
-   AstFrame *frm; 
-   AstFrameSet *fsetxy;
-   AstFrameSet *fsetxz;
-   AstFrameSet *fsetyz;
-   AstFrameSet *fset;
-   AstMapping *map;    
-   int baseplane;
-   int labelxy[ 2 ];
-   int labelxz[ 2 ];
-   int labelyz[ 2 ];
-   int wcsxy[ 2 ];
-   int wcsxz[ 2 ];
-   int wcsyz[ 2 ];
-   int rootcorner;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Return without action if the Plot3D does not contain the three 2D
-   Plots. This may be the case for instance if this function is called
-   before the Plot3D is fully constructed. */
-   if( this->plotxy && this->plotxz && this->plotyz ){
-
-/* We need a FrameSet that is equivalent to the one that was used to
-   construct the Plot3D (i.e. a FrameSet that does not have the GRAPHICS
-   Frame that was added by the Plot3D constructor). So take a copy of the 
-   parent FrameSet, remove the GRAPHICS Frame (Frame 1) and set the base 
-   Frame to be the Frame that was the base Frame when the Plot3D was 
-   constructed. */
-      fset = (AstFrameSet *) astCast( this, dummy_frameset );
-      astSetBase( fset, this->pix_frame );
-      astRemoveFrame( fset, 1 );   
-
-/* Split the supplied FrameSet up into 3 FrameSets, each with a 2D base 
-   and current Frame. Each of these FrameSets describes one plane of
-   the 3D cube. */
-      SplitFrameSet( fset, &fsetxy, labelxy, wcsxy, &fsetxz, labelxz, wcsxz,
-                     &fsetyz, labelyz, wcsyz, &baseplane, status );
-
-/* First do the XY Plot. Extract the current Frame and base->current
-   Mapping from the new FrameSet. It is assumed that he base Frame in the
-   new FrameSet is equivalent to Frame 2 in the existing Plot. This
-   assumption is based on the way the CreatePlots and SplitFrameSet
-   functions work, and should be reviewed if either of these functions 
-   is changed. */
-      frm = astGetFrame( fsetxy, 2 );
-      map = astGetMapping( fsetxy, 1, 2 );
-
-/* Add the new Frame into the existing Plot using the Mapping to connect 
-   it to Frame 2 in the Plot. It becomes the current Frame in the Plot. */
-      astAddFrame( this->plotxy, 2, map, frm );
-
-/* Delete the original current Frame in the Plot since it is not needed
-   any more. */
-      astRemoveFrame( this->plotxy, 3 );
-
-/* Set the Plot attributes. */
-      SetPlotAttr( this->plotxy, XY, labelxy, status );
- 
-/* Free resources */
-      fsetxy = astAnnul( fsetxy );
-      map = astAnnul( map );
-      frm = astAnnul( frm );
-
-/* Do the same for the XZ plot. */
-      frm = astGetFrame( fsetxz, 2 );
-      map = astGetMapping( fsetxz, 1, 2 );
-      astAddFrame( this->plotxz, 2, map, frm );
-      astRemoveFrame( this->plotxz, 3 );
-      SetPlotAttr( this->plotxz, XZ, labelxz, status );
-      fsetxz = astAnnul( fsetxz );
-      map = astAnnul( map );
-      frm = astAnnul( frm );
-
-/* Do the same for the YZ plot. */
-      frm = astGetFrame( fsetyz, 2 );
-      map = astGetMapping( fsetyz, 1, 2 );
-      astAddFrame( this->plotyz, 2, map, frm );
-      astRemoveFrame( this->plotyz, 3 );
-      SetPlotAttr( this->plotyz, YZ, labelyz, status );
-      fsetyz = astAnnul( fsetyz );
-      map = astAnnul( map );
-      frm = astAnnul( frm );
-
-/* Store information that allows each 3D WCS axis to be associatedf with
-   a pair of Plots. Also store the WCS axis within each Plot that
-   corresponds to the 3D WCS axis. */
-      StoreAxisInfo( this, labelxy, wcsxy, labelxz, wcsxz, labelyz, wcsyz, status );
-
-/* Set up the Edges attributes in the encapsulated Plots to produce labels 
-   on the required edges of the 3D graphics cube. */
-      rootcorner = astGetRootCorner( this );
-      ChangeRootCorner( this, rootcorner, rootcorner, status );
-
-/* Store the plane spanned by two connected 3D axes. */
-      this->baseplot = baseplane;
-
-/* Free remaining resources */
-      fset = astAnnul( fset );
-   }
-}
-
-static void VSet( AstObject *this_object, const char *settings,
-                  char **text, va_list args, int *status ) {
-/*
-*  Name:
-*     VSet
-
-*  Purpose:
-*     Set values for a Plot3D's attributes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frameset.h"
-*     void VSet( AstObject *this, const char *settings, char **text, 
-*                va_list args, int *status )
-
-*  Class Membership:
-*     Plot3D member function (over-rides the protected astVSet
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns a set of attribute values for a Plot3D,
-*     the attributes and their values being specified by means of a
-*     string containing a comma-separated list of the form:
-*
-*        "attribute1 = value1, attribute2 = value2, ... "
-*
-*     Here, "attribute" specifies an attribute name and the value to
-*     the right of each "=" sign should be a suitable textual
-*     representation of the value to be assigned to that attribute. This 
-*     will be interpreted according to the attribute's data type.
-*
-*     The string supplied may also contain "printf"-style format
-*     specifiers identified by a "%" sign in the usual way. If
-*     present, these will be substituted by values supplied as
-*     optional arguments (as a va_list variable argument list), using
-*     the normal "printf" rules, before the string is used.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D.
-*     settings
-*        Pointer to a null-terminated string containing a
-*        comma-separated list of attribute settings.
-*     text
-*        Pointer to a location at which to return a pointer to dynamic
-*        memory holding a copy of the expanded setting string. This memory 
-*        should be freed using astFree when no longer needed. If a NULL
-*        pointer is supplied, no string is created.
-*     args
-*        The variable argument list which contains values to be
-*        substituted for any "printf"-style format specifiers that
-*        appear in the "settings" string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function preserves the integrity of the Plot3D (if
-*     possible) by appropriately modifying the three encapsulated Plots.
-*/
-
-/* Invoke the parent astVSet method to set the Plot3D's attribute values. */
-   (*parent_vset)( this_object, settings, text, args, status );
-
-/* Update the three 2D Plots stored in the Plot3D structure so that they 
-   reflect this modified FrameSet. */
-   UpdatePlots( (AstPlot3D *) this_object, status );
-}
-
-/* Functions which access Plot3D class attributes. */
-/* ----------------------------------------------- */
-
-/* RootCorner. */
-/* ----------- */
-/*
-*att++
-*  Name:
-*     RootCorner
-
-*  Purpose:
-*     Specifies which edges of the 3D box should be annotated.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls the appearance of an annotated
-c     coordinate grid (drawn with the astGrid function) by determining
-f     coordinate grid (drawn with the AST_GRID routine) by determining
-*     which edges of the cube enclosing the 3D graphics space are used 
-*     for displaying numerical and descriptive axis labels. The attribute
-*     value identifies one of the eight corners of the cube within
-*     which graphics are being drawn (i.e. the cube specified by the
-c     "graphbox" parameter when astPlot3D 
-f     GRAPHBOX argument when AST_PLOT3D
-*     was called tp create the Plot3D). Axis labels and tick marks will
-*     be placed on the three cube edges that meet at the given corner.
-*
-*     The attribute value should consist of three character, each of
-*     which must be either "U" or "L". The first character in the string
-*     specifies the position of the corner on the first graphics axis.
-*     If the character is "U" then the corner is at the upper bound on the 
-*     first graphics axis. If it is "L", then the corner is at the lower 
-*     bound on the first axis. Likewise, the second and third characters 
-*     in the string specify the location of the corner on the second and 
-*     third graphics axes.
-*
-*     For instance, corner "LLL" is the corner that is at the lower bound
-*     on all three graphics axes, and corner "ULU" is at the upper bound
-*     on axes 1 and 3 but at the lower bound on axis 2.
-*
-*     The default value is "LLL".
-
-*  Applicability:
-*     Plot3D
-*        All Plot3Ds have this attribute.
-
-*att--
-*/
-
-/* Internally, the RootCorner is represented as an integer bit mask, with
-   bit zero for the X axis, bit 1 for the Y axis and bit 2 for the Z axis.
-   A bit is set if the corner is at the upper bound on the axis and unset
-   if it is at the lower bound. A value of -1 indicates that the attribue
-   has not been assigned a value. */
-astMAKE_GET(Plot3D,RootCorner,int,0,( this->rootcorner == -1 ? 0 : this->rootcorner))
-astMAKE_TEST(Plot3D,RootCorner,( this->rootcorner != -1 ))
-
-
-/* Norm(axis). */
-/* ----------- */
-/*
-*att++
-*  Name:
-*     Norm(axis)
-
-*  Purpose:
-*     Specifies the plane upon which a Plot3D draws text and markers.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute controls the appearance of text and markers drawn
-*     by a Plot3D. It specifies the orientation of the plane upon which 
-*     text and markers will be drawn by all subsequent invocations of the
-c     astText and astMark functions.
-f     AST_TEXT and AST_MARK functions.
-*
-*     When setting or getting the Norm attribute, the attribute name must 
-*     be qualified by an axis index in the range 1 to 3. The 3 elements of 
-*     the Norm attribute are together interpreted as a vector in 3D graphics 
-*     coordinates that is normal to the plane upon which text and marks 
-*     should be drawn. When testing or clearing the attribute, the axis
-*     index is optional. If no index is supplied, then clearing the Norm
-*     attribute will clear all three elements, and testing the Norm attribute
-*     will return a non-zero value if any of the three elements are set.
-*
-*     The default value is 1.0 for each of the 3 elements. The length of
-*     the vector is insignificant, but an error will be reported when 
-*     attempting to draw text or markers if the vector has zero length.
-
-*  Applicability:
-*     Plot
-*        All Plot3Ds have this attribute.
-
-*att--
-*/
-MAKE_CLEAR3(Norm,norm,AST__BAD,3)
-MAKE_SET3(Norm,double,norm,value,3)
-MAKE_TEST3(Norm,( this->norm[axis] != AST__BAD ),3)
-MAKE_GET3(Norm,double,AST__BAD,(this->norm[axis]!=AST__BAD?this->norm[axis]:1.0),3)
-
-
-
-/* Functions which access Plot class attributes. */
-/* --------------------------------------------- */
-
-/* First do axis specific attributes. */
-
-#define MAKE_ALL(attr,type,badval,whichplots) \
-   MAKE_CLEAR(attr,whichplots) \
-   MAKE_SET(attr,type,whichplots) \
-   MAKE_GET(attr,type,badval )
-
-MAKE_ALL(MinTick,int,0,0)
-MAKE_ALL(Abbrev,int,0,1)
-MAKE_ALL(Gap,double,AST__BAD,1)
-MAKE_ALL(LogGap,double,AST__BAD,1)
-MAKE_ALL(LogPlot,int,0,0)
-MAKE_ALL(LogTicks,int,0,0)
-MAKE_ALL(LogLabel,int,0,1)
-MAKE_ALL(LabelUp,int,0,1)
-MAKE_ALL(DrawAxes,int,0,0)
-MAKE_ALL(LabelUnits,int,0,1)
-MAKE_ALL(MinTickLen,double,0.0,0)
-MAKE_ALL(MajTickLen,double,0.0,0)
-MAKE_ALL(NumLab,int,0,1)
-MAKE_ALL(NumLabGap,double,AST__BAD,1)
-MAKE_ALL(TextLab,int,0,1)
-MAKE_ALL(TextLabGap,double,AST__BAD,1)
-
-#undef MAKE_ALL
-
-
-/* Now do attributes that are not axis specific. */
-
-#define MAKE_ALL(attr,type) \
-   MAKE_CLEAR1(attr) \
-   MAKE_SET1(attr,type) 
-
-MAKE_ALL(Ink,int)
-MAKE_ALL(Tol,double)
-MAKE_ALL(Invisible,int)
-MAKE_ALL(TickAll,int)
-MAKE_ALL(ForceExterior,int)
-MAKE_ALL(Border,int)
-MAKE_ALL(Clip,int)
-MAKE_ALL(ClipOp,int)
-MAKE_ALL(Escape,int)
-MAKE_ALL(Grid,int)
-MAKE_ALL(Labelling,int)
-
-#undef MAKE_ALL
-
-
-
-/* First do element-specific attributes. */
-
-#define MAKE_ALL(attr,type) \
-   MAKE_CLEAR2(attr) \
-   MAKE_SET2(attr,type) 
-
-MAKE_ALL(Style,int)
-MAKE_ALL(Font,int)
-MAKE_ALL(Colour,int)
-MAKE_ALL(Width,double)
-MAKE_ALL(Size,double)
-
-#undef MAKE_ALL
-
-
-
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Plot3D objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Plot3D objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstPlot3D *in;             /* Pointer to input Plot3D */
-   AstPlot3D *out;            /* Pointer to output Plot3D */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Plot3Ds. */
-   in = (AstPlot3D *) objin;
-   out = (AstPlot3D *) objout;
-
-/* Nullify the pointers stored in the output object since these will
-   currently be pointing at the input data (since the output is a simple
-   byte-for-byte copy of the input). Otherwise, the input data could be
-   freed by accidient if the output object is deleted due to an error
-   occuring in this function. */
-   out->plotxy = NULL;
-   out->plotxz = NULL;
-   out->plotyz = NULL;
-
-/* Copy the encapsulated Plots */
-   if( in->plotxy ) out->plotxy = astCopy( in->plotxy );
-   if( in->plotxz ) out->plotxz = astCopy( in->plotxz );
-   if( in->plotyz ) out->plotyz = astCopy( in->plotyz );
-
-/* If an error has occurred, free the output resources. */
-   if( !astOK ) Delete( (AstObject *) out, status );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Plot3D objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Plot3D objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-   
-/* Local Variables: */
-   AstPlot3D *this;
-
-/* Release the memory referred to in the Plot3D structure. */
-   this = (AstPlot3D *) obj;
-   if( this ) {
-      this->plotxy = astDelete( this->plotxy );
-      this->plotxz = astDelete( this->plotxz );
-      this->plotyz = astDelete( this->plotyz );
-   }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Plot3D objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Plot3D class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Plot3D whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPlot3D *this;           
-   double dval;
-   char key[ KEY_LEN + 1 ];
-   int axis;
-   int helpful;
-   int ival;
-   int set;
-   const char *text;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Plot3D structure. */
-   this = (AstPlot3D *) this_object;
-
-/* Write out values representing the instance variables for the
-   Plot3D class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-
-/* Norm. */
-/* ----- */
-   for ( axis = 0; axis < 3; axis++ ) {
-      dval = astGetNorm( this, axis );
-      helpful = ( dval != -DBL_MAX );
-      (void) sprintf( key, "Norm%d", axis + 1 );
-      astWriteDouble( channel, key, 0, helpful, dval, "Text plane normal vector");
-   }
-
-/* RootCorner. */
-/* ----------- */
-   set = TestRootCorner( this, status );
-   ival = set ? GetRootCorner( this, status ) : astGetRootCorner( this );
-   text = RootCornerString( ival, status );
-   if( text ) {
-      astWriteString( channel, "RootCn", set, 1, text, "Corner where labelled axes meet" );
-   } else if( astOK ) {
-      astError( AST__INTER, "astDump(Plot3D): Illegal value %d found for "
-                "RootCorner attribute (interbal AST programming error).", status, 
-                ival );
-   }
-
-/* Labelled axes */
-   astWriteInt( channel, "AxPlX1", 1, 1, this->axis_plot1[0], 
-                "Plot used to label the 3D X axis" );
-   astWriteInt( channel, "AxPlY1", 1, 1, this->axis_plot1[1], 
-                "Plot used to label the 3D Y axis" );
-   astWriteInt( channel, "AxPlZ1", 1, 1, this->axis_plot1[2], 
-                "Plot used to label the 3D Z axis" );
-   astWriteInt( channel, "AxInX1", 1, 1, this->axis_index1[0], 
-                "Plot axis index used to label the 3D X axis" );
-   astWriteInt( channel, "AxInY1", 1, 1, this->axis_index1[1], 
-                "Plot axis index used to label the 3D Y axis" );
-   astWriteInt( channel, "AxInZ1", 1, 1, this->axis_index1[2], 
-                "Plot axis index used to label the 3D Z axis" );
-
-/* Unlabelled axes */
-   astWriteInt( channel, "AxPlX2", 1, 1, this->axis_plot2[0], 
-                "Other Plot touching the 3D X axis" );
-   astWriteInt( channel, "AxPlY2", 1, 1, this->axis_plot2[1], 
-                "Other Plot touching the 3D Y axis" );
-   astWriteInt( channel, "AxPlZ2", 1, 1, this->axis_plot2[2], 
-                "Other Plot touching the 3D Z axis" );
-   astWriteInt( channel, "AxInX2", 1, 1, this->axis_index2[0], 
-                "Other Plot axis index touching the 3D X axis" );
-   astWriteInt( channel, "AxInY2", 1, 1, this->axis_index2[1], 
-                "Other Plot axis index touching the 3D Y axis" );
-   astWriteInt( channel, "AxInZ2", 1, 1, this->axis_index2[2], 
-                "Other Plot axis index touching the 3D Z axis" );
-
-/* The Plot that spans the two connected axes. */
-   astWriteInt( channel, "BasePl", 1, 1, this->baseplot, 
-                "Plot spanning two connected 3D axes" );
-
-/* XY Plot */ 
-   astWriteObject( channel, "PlotXY", 1, 1, this->plotxy, 
-                   "Plot describing the XY plane" );
-
-/* XZ Plot */ 
-   astWriteObject( channel, "PlotXZ", 1, 1, this->plotxz, 
-                   "Plot describing the XZ plane" );
-
-/* YZ Plot */ 
-   astWriteObject( channel, "PlotYZ", 1, 1, this->plotyz, 
-                   "Plot describing the YZ plane" );
-
-/* The index within the Plot3D FrameSet, of the original base Frame in 
-   the FrameSet supplied when the Plot3D was constructed. */
-   astWriteInt( channel, "PixFrm", 1, 0, this->pix_frame,
-                "Index of original base Frame" );
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPlot3D and astCheckPlot3D functions using the 
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Plot3D,Plot)
-astMAKE_CHECK(Plot3D)
-
-
-AstPlot3D *astPlot3D_( void *frame_void, const float *graphbox, 
-                       const double *basebox, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astPlot3D
-
-*  Purpose:
-*     Create a Plot3D.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstPlot3D *astPlot3D( AstFrame *frame, const float *graphbox, 
-*                           const double *basebox, const char *options, ..., int *status ) 
-
-*  Class Membership:
-*     Plot3D constructor.
-
-*  Description:
-*     This function creates a new Plot3D and optionally initialises its
-*     attributes.
-*
-*     The supplied Frame (or the base frame if a FrameSet was supplied) is 
-*     assumed to be related to the graphics world coordinate system by a 
-*     simple shift and scale along each axis. The mapping between graphics 
-*     world coordinates and this Frame is specified by supplying the 
-*     coordinates in both systems at the lower bounds and upper bounds corners 
-*     of a box on the graphics device. By default, no graphics will be 
-*     produced outside the supplied box, but this default behaviour can be 
-*     changed by setting explicit values for the various clipping attributes.
-
-*  Parameters:
-*     frame
-*        A pointer to a Frame or FrameSet to be annotated. If a NULL pointer
-*        is supplied, then a default 3-D Frame will be created to which labels,
-*        etc, can be attached by setting the relevant Frame attributes.
-*     graphbox
-*        A pointer to an array of 6 values giving the graphics world 
-*        coordinates of the lower bounds and upper bound corners of a box on 
-*        the graphics output device. The first triple of values should be the 
-*        coordinates of the lower bounds corner of the box and the second
-*        triple of values should be the coordinates of the upper bounds corner.
-*     basebox
-*        A pointer to an array of 6 values giving the coordinates in the
-*        supplied Frame, or base frame of the supplied FrameSet, at the 
-*        lower bounds corner and upper bounds corners of the box specified 
-*        by parameter graphbox. These should be supplied in the same order as 
-*        for parameter "graphbox".
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Plot3D. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new Plot3D.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic Plot3D constructor which
-*     is available via the protected interface to the Plot3D class.
-*     A public interface is provided by the astPlot3DId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPlot3D *new;               /* Pointer to new Plot3D */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   new = NULL;
-
-/* Obtain and validate a pointer to any supplied Frame structure. */
-   if( frame_void ){
-      frame = astCheckFrame( frame_void );
-   } else {
-      frame = NULL;
-   }
-
-/* Check the pointer can be used. */
-   if ( astOK ) {
-
-/* Initialise the Plot3D, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitPlot3D( NULL, sizeof( AstPlot3D ), !class_init,
-                           &class_vtab, "Plot3D", frame, graphbox, 
-                           basebox );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Plot's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new Plot. */
-   return new;
-}
-
-AstPlot3D *astInitPlot3D_( void *mem, size_t size, int init,
-                           AstPlot3DVtab *vtab, const char *name,
-                           AstFrame *frame, const float *graphbox, 
-                           const double *basebox, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPlot3D
-
-*  Purpose:
-*     Initialise a Plot3D.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstPlot3D *astInitPlot3D( void *mem, size_t size, int init,
-*                               AstPlotVtab *vtab, const char *name,
-*                               AstFrame *frame, const float *graphbox, 
-*                               const double *basebox ) 
-
-*  Class Membership:
-*     Plot3D initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new Plot3D object. It allocates memory (if
-*     necessary) to accommodate the Plot3D plus any additional data
-*     associated with the derived class. It then initialises a
-*     Plot3D structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual function
-*     table for a Plot3D at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Plot3D is to be
-*        created. This must be of sufficient size to accommodate the
-* 	 Plot3D data (sizeof(Plot3D)) plus any data used by
-* 	 the derived class. If a value of NULL is given, this function
-*	 will allocate the memory itself using the "size" parameter to
-*	 determine its size.
-*     size
-*        The amount of memory used by the Plot3D (plus derived
-*	 class data). This will be used to allocate memory if a value of
-*	 NULL is given for the "mem" parameter. This value is also stored
-*	 in the Plot3D structure, so a valid value must be supplied
-*	 even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the Plot3D's virtual function
-*	 table is to be initialised. If this value is non-zero, the
-*	 virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*	 associated with the new Plot3D.
-*     name
-*        Pointer to a constant null-terminated character string which
-*	 contains the name of the class to which the new object belongs
-*	 (it is this pointer value that will subsequently be returned by
-*	 the astGetClass method).
-*     fset
-*        A pointer to the Frame or Frameset to be annotated.
-*     graphbox
-*        A pointer to an array of 6 values giving the graphics coordinates 
-*        of the bottom left and top right corners of a box on the graphics 
-*        output device. The first triple of values should be the graphics 
-*        coordinates of the bottom left corner of the box and the second
-*        triple of values are the graphics coordinates of the top right corner.
-*     basebox
-*        A pointer to an array of 6 values giving the coordinates in the
-*        supplied Frame or base Frame of the supplied FrameSet at the bottom 
-*        left and top right corners of the box specified by parameter graphbox.
-*        These should be supplied in the same order as for parameter "graphbox".
-
-*  Returned Value:
-*     A pointer to the new Plot3D.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *baseframe = NULL;  /* Pointer to base frame */
-   AstFrame *graphicsframe = NULL; /* Pointer to graphics frame */
-   AstFrameSet *fset0 = NULL;   /* The n-D FrameSet to be annotated */
-   AstFrameSet *fset = NULL;    /* The 2-D FrameSet to be annotated */
-   AstMapping *map = NULL;      /* Mapping for converting bbox -> gbox */
-   AstPlot3D *new = NULL;       /* Pointer to new Plot3D */
-   char *mess = NULL;           /* Pointer to a descriptive message */
-   double djunkbox[ 4 ] = { 0.0, 0.0, 1.0, 1.0 }; /* Dummy 2D basebox */
-   float fjunkbox[ 4 ] = { 0.0, 0.0, 1.0, 1.0 }; /* Dummy 2D graphbox */
-   int bi;                      /* Index of base frame */
-   int ci;                      /* Index of current frame */
-   int i;                       /* Loop count */
-   int ii;                      /* Loop count */
-   int naxes;                   /* No. of axes in frame */
-   int nfrm;                    /* Number of Frames in frameset */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPlot3DVtab( vtab, name );
-
-/* First of all we need to ensure that we have a FrameSet and a base 
-   Frame on which to base the new Plot3D. If a NULL Frame pointer was 
-   supplied, create a default 3-D Frame, and then create a FrameSet 
-   containing just this default Frame. Also store a pointer to a 
-   message which can be used to describe the object within error 
-   messages. */
-   if( !frame ){
-      baseframe = astFrame( 3, "", status );
-      fset = astFrameSet( baseframe, "", status );
-      mess = "default 3-d Frame";
-
-/* If an object was supplied, report an error if it is not a Frame or 
-   an object derived from a Frame (such as a FrameSet). */
-   } else if( !astIsAFrame( frame ) ){
-      if( astOK ){
-         astError( AST__BDOBJ, "astInitPlot3D(%s): Supplied Object (class '%s') "
-                   "is not a Frame.", status, name, astGetClass( frame ) );
-      }
-
-/* If the supplied object is a Plot3D or an object derived from a Plot3D 
-   (a Plot3D is a sort of Frame and so will pass the above test), extract a
-   FrameSet from the Plot3D, and clear the Domain attribute for any existing 
-   Frames which have Domain GRAPHICS. */
-   } else if( astIsAPlot3D( frame ) ){
-      fset0 = astFrameSet( frame, "", status );
-      fset = astCopy( fset0 );
-      fset0 = astAnnul( fset0 );
-
-      for( i = 0; i < astGetNframe( fset ); i++ ) {
-         graphicsframe = astGetFrame( fset, i );
-         if( !strcmp( astGetDomain( graphicsframe ), "GRAPHICS" ) ) {
-            astClearDomain( graphicsframe );
-         }
-         graphicsframe = astAnnul( graphicsframe );
-      }
-
-      baseframe = astGetFrame( fset, astGetBase( fset ) );
-      mess = "base Frame of the supplied Plot3D";
-   
-/* If the object is not a FrameSet, create a FrameSet holding the 
-   supplied Frame. If the Frame is not 3D, an extra 3D Frame is 
-   included in the FrameSet derived from axes 1, 2 and 3 of the supplied
-   Frame. This new Frame becomes the base Frame. */
-   } else if( !astIsAFrameSet( frame ) ){
-      fset0 = astFrameSet( frame, "", status );
-      mess = "supplied Frame";
-      fset = Fset3D( fset0, AST__BASE, status );      
-      fset0 = astAnnul( fset0 );
-      baseframe = astGetFrame( fset, astGetBase( fset ) );
-
-/* If a FrameSet was supplied, ensure it has a 3D base Frame.
-   If the supplied FrameSet is not 3D, then a new base Frame is 
-   inserted into it which is derived from axes 1, 2 and 3 of the 
-   original base Frame. */
-   } else {
-      fset = Fset3D( (AstFrameSet *) frame, AST__BASE, status );      
-      baseframe = astGetFrame( fset, astGetBase( fset ) );
-      mess = "base Frame of the supplied FrameSet";
-   }
-
-/* Check that there are 3 axes in the base frame of the FrameSet. */
-   naxes = astGetNaxes( baseframe );
-   if ( naxes != 3 && astOK ) {
-      astError( AST__NAXIN, "astInitPlot3D(%s): Number of axes (%d) in the %s "
-                "is invalid - this number should be 3.", status, name, naxes, mess );
-   } 
-
-/* Check that no dimension of the graphbox is bad. */
-   if( astISBAD(graphbox[0]) || astISBAD(graphbox[1]) ||
-       astISBAD(graphbox[2]) || astISBAD(graphbox[3]) ||
-       astISBAD(graphbox[4]) || astISBAD(graphbox[5]) ) {
-      astError( AST__BADBX, "astInitPlot3D(%s): The plotting volume has undefined limits "
-                "in the graphics world coordinate system.", status, name );
-   }
-
-/* Check that no dimension of the graphbox is zero. */
-   if( ( graphbox[ 3 ] == graphbox[ 0 ] ||
-         graphbox[ 4 ] == graphbox[ 1 ] ||
-         graphbox[ 5 ] == graphbox[ 2 ] ) && astOK ){
-      astError( AST__BADBX, "astInitPlot3D(%s): The plotting volume has zero size "
-                "in the graphics world coordinate system.", status, name );
-   }
-
-/* Check that no dimension of the basebox is bad. */
-   if( astISBAD(basebox[0]) || astISBAD(basebox[1]) ||
-       astISBAD(basebox[2]) || astISBAD(basebox[3]) ||
-       astISBAD(basebox[4]) || astISBAD(basebox[5]) ) {
-      astError( AST__BADBX, "astInitPlot3D(%s): The limits of "
-                "the %s are undefined or bad.", status, name, name );
-   }
-
-/* Create a Frame which describes the graphics world coordinate system. */
-   graphicsframe = astFrame( 3, "Domain=GRAPHICS,Title=Graphical Coordinates", status );
-
-/* Initialise a 2D Plot structure (the parent class) as the first component
-   within the Plot3D structure, allocating memory if necessary. We supply
-   dummy arguments since we will not be using the parent Plot class to
-   draw anything. We supply a NULL vtab pointer so that methods defined by
-   the Plot class will be used during the construction of the Plot3D. Once
-   the Plot3D is fully constructed, we will use astSetVtab to establish
-   the correct vtab. */
-   new = (AstPlot3D *) astInitPlot( mem, size, 0, NULL, name, NULL, fjunkbox, 
-                                    djunkbox );
-   if ( astOK ) {
-
-/* Initialise the Plot3D data. */
-/* ----------------------------- */
-
-/* Remove all Frames from the parent FrameSet except for the base (2D graphics)
-   Frame (we leave this last Frame since an error is reported if the last
-   Frame is removed from a FrameSet). We do this by repeatedly removing the 
-   first Frame, causing all remaining Frames to have their index reduced by 1.
-   When the base Frame arrives at index 1, we skip it and start removing the 
-   second frame instead. */
-      nfrm = astGetNframe( new );
-      i = 1;
-      for( ii = 0; ii < nfrm; ii++ ) {
-         if( i > 1 || astGetBase( new ) != 1 ) {
-            astRemoveFrame( new, i );
-         } else {
-            i = 2;
-         }
-      }
-
-/* Add in the 3D graphics Frame, using a PermMap to connect it to the 
-   2D graphics Frame. */
-      map = (AstMapping *) astPermMap( 2, NULL, 3, NULL, NULL, "", status );
-      astAddFrame( new, 1, map, graphicsframe );
-      map = astAnnul( map );
-
-/* And remove the 2D GRAPHICS Frame, leaving just the 3D GRAPHICS Frame
-   in the FrameSet, with index 1. */
-      astRemoveFrame( new, 1 );
-
-/* Get the index of the current (physical) and base (pixel) Frames in 
-   the supplied FrameSet. */
-      bi = astGetBase( fset );
-      ci = astGetCurrent( fset );
-
-/* Temporarily set the current Frame to be the pixel frame. */
-      astSetCurrent( fset, bi );
-
-/* Get a double precision version of "graphbox", and store it in the
-   Plot3D structure. */
-      new->gbox[ 0 ] = (double) graphbox[ 0 ];
-      new->gbox[ 1 ] = (double) graphbox[ 1 ];
-      new->gbox[ 2 ] = (double) graphbox[ 2 ];
-      new->gbox[ 3 ] = (double) graphbox[ 3 ];
-      new->gbox[ 4 ] = (double) graphbox[ 4 ];
-      new->gbox[ 5 ] = (double) graphbox[ 5 ];
-
-/* The base Frame of the supplied FrameSet is mapped linearly onto the 
-   graphics frame. Create a WinMap that maps the base box (within the 
-   base Frame of the supplied FrameSet) onto the graphics box. */
-      map = (AstMapping *) astWinMap( 3, new->gbox, new->gbox + 3, basebox, 
-                                      basebox + 3, "", status );
-
-/* Add the supplied FrameSet into the Plot3D (i.e. FrameSet) created 
-   earlier. This leaves the graphics frame with index 1 in the 
-   returned  Plot3D. */
-      astAddFrame( (AstFrameSet *) new, 1, map, fset );
-      map = astAnnul( map );
-
-/* Set the current Frame in the Plot to be the physical coordinate Frame 
-   (with index incremented by one because the graphics Frame has been added). */
-      astSetCurrent( (AstFrameSet *) new, ci + 1 );
-
-/* Note the index of the original base Frame in the Plot3D FrameSet */
-      new->pix_frame = bi + 1;
-
-/* Re-establish the original current Frame in the supplied FrameSet. */
-      astSetCurrent( fset, ci );
-
-/* Initialise the Plot pointers. */
-      new->plotxy = NULL;
-      new->plotxz = NULL;
-      new->plotyz = NULL;
-
-/* Initialise other attributes */
-      new->rootcorner = -1;
-
-/* Initialise the normal vector to the plane used by astText and astMark. */
-      new->norm[ 0 ] = AST__BAD;
-      new->norm[ 1 ] = AST__BAD;
-      new->norm[ 2 ] = AST__BAD;
-
-/* Create three 2D Plots to describe the three planes in the cube. */
-      CreatePlots( new, fset, graphbox, basebox, status );
-
-/* Ensure that attempts to use the graphics interface of the parent
-   Plot structure get forwarded to the relevant 3D routines defined in
-   this class. */
-      astGrfSet( new, "Attr", (AstGrfFun) Attr3D );
-      astSetGrf( new, 1 );   
-
-/* Change the virtual function table stored in the new Plot3D, from the Plot
-   vtab (established when astINitPlot was called above), to the supplied
-   vtab. */
-      if( vtab ) astSetVtab( new, vtab );
-
-/* Ensure that these Plots use the grf functions defined by this class
-   (Plot3D). This means that whenever a Plot draws anything, it will use
-   the appropriate grf function defined in this class to do the drawing. 
-   The grf functions defined in this class, convert the grf call into a
-   grf3D call apprpriate the plane spanned by the Plot. */
-      Set3DGrf( new, new->plotxy, XY, status );
-      Set3DGrf( new, new->plotxz, XZ, status );
-      Set3DGrf( new, new->plotyz, YZ, status );
-
-/* Set up the Edges attributes in the encapsulated Plots so that labels
-   appear on the requited edges. Initially, the root corner is "LLL"
-   (i.e. the lower bound on every axis). */
-      ChangeRootCorner( new, 0, 0, status );
-   }
-
-/* Annul the frame. */
-   graphicsframe = astAnnul( graphicsframe );
-
-/* If an error occurred, clean up by deleting the new object. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Annul the pointer to the base Frame and FrameSet. */
-   baseframe = astAnnul( baseframe );
-   fset = astAnnul( fset );
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-
-AstPlot3D *astLoadPlot3D_( void *mem, size_t size, AstPlot3DVtab *vtab, 
-                           const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPlot3D
-
-*  Purpose:
-*     Load a Plot3D.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "plot3d.h"
-*     AstPlot3D *astLoadPlot3D( void *mem, size_t size,
-*                               AstPlot3DVtab *vtab, 
-*                               const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Plot3D loader.
-
-*  Description:
-*     This function is provided to load a new Plot3D using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Plot3D structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Plot3D is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Plot3D data (sizeof(Plot3D)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Plot3D (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Plot3D structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPlot3D) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Plot3D. If this is NULL, a pointer
-*        to the (static) virtual function table for the Plot3D class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Plot3D" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Plot3D.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS       
-   AstPlot3D *new;
-   char key[ KEY_LEN + 1 ];
-   char *text;
-   int axis;
-   int i;
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Plot3D. In this case the
-   Plot3D belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPlot3D );
-      vtab = &class_vtab;
-      name = "Plot3D";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPlot3DVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Allocate memory to hold the new Object. We allocate it now rather than
-   waiting for astInitObject to allocate it so that we can pass a NULL
-   vtab pointer to the Plot loader, thus causing the Plot loader to use the
-   function implementations provided by the Plot class rather than those
-   provided by the class being instantiated. */
-   if( !mem ) mem = astMalloc( size );
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Plot3D. Pass a NULL vtab pointer so that the "new" object
-   will be loaded using Plot methods rather than than Plot3D methods.  
-   This is important because the implementations provided by the Plot3D
-   class for the Plot attribute accessors require the existence of the
-   encapsulated Plots held within the Plot3D, but these have not yet been
-   created. */
-   new = astLoadPlot( mem, size, NULL, name, channel );
-   if ( astOK ) {
-
-/* Now modify the new object to use the supplied vtab. */
-      astSetVtab( new, vtab );
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Plot3D" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Norm. */
-/* ----- */
-      for( axis = 0; axis < 3; axis++ ) {
-         (void) sprintf( key, "norm%d", axis + 1 );
-         new->norm[ axis ] = astReadDouble( channel, key, AST__BAD );
-         if( TestNorm( new, axis, status ) ) SetNorm( new, axis, new->norm[ axis ], status );
-      }
-
-/* RootCorner. */
-/* ----------- */
-      text = astReadString( channel, "rootcn", " " );
-      if( astOK && strcmp( text, " " ) ) {
-         new->rootcorner = RootCornerInt( text, status );
-         if( new->rootcorner < 0 && astOK ) {
-            astError( AST__INTER, "astRead(Plot3D): Corrupt Plot3D contains "
-                      "invalid RootCorner attribute value (%s).", status, text );
-         }
-      } else {
-         new->rootcorner = -1;
-      }
-      if( TestRootCorner( new, status ) ) SetRootCorner( new, new->rootcorner, status );
-      text = astFree( text );
-
-/* Labelled axes */
-      new->axis_plot1[0] = astReadInt( channel, "axplx1", -1 );
-      new->axis_plot1[1] = astReadInt( channel, "axply1", -1 );
-      new->axis_plot1[2] = astReadInt( channel, "axplz1", -1 );
-   
-      new->axis_index1[0] = astReadInt( channel, "axinx1", -1 );
-      new->axis_index1[1] = astReadInt( channel, "axiny1", -1 );
-      new->axis_index1[2] = astReadInt( channel, "axinz1", -1 );
-
-/* Unlabelled axes */
-      new->axis_plot2[0] = astReadInt( channel, "axplx2", -1 );
-      new->axis_plot2[1] = astReadInt( channel, "axply2", -1 );
-      new->axis_plot2[2] = astReadInt( channel, "axplz2", -1 );
-   
-      new->axis_index2[0] = astReadInt( channel, "axinx2", -1 );
-      new->axis_index2[1] = astReadInt( channel, "axiny2", -1 );
-      new->axis_index2[2] = astReadInt( channel, "axinz2", -1 );
-
-/* Plot that spans two connected 3D axes. */
-      new->baseplot = astReadInt( channel, "basepl", -1 );
-
-/* XY Plot */
-      new->plotxy = astReadObject( channel, "plotxy", NULL );
-
-/* XZ Plot */
-      new->plotxz = astReadObject( channel, "plotxz", NULL );
-
-/* YZ Plot */
-      new->plotyz = astReadObject( channel, "plotyz", NULL );
-
-/* The index within the Plot3D FrameSet, of the original base Frame in 
-   the FrameSet supplied when the Plot3D was constructed. */
-      new->pix_frame = astReadInt( channel, "pixfrm", AST__NOFRAME );
-
-/* Ensure that these Plots use the grf functions defined by this class
-   (Plot3D). This means that whener a Plot draws anything, it will use
-   the appropriate grf function defined in this class to do the drawing. 
-   The grf functions defined in this class, convert the grf call into a
-   grf3D call apprpriate the plane spanned by the Plot. */
-      Set3DGrf( new, new->plotxy, XY, status );
-      Set3DGrf( new, new->plotxz, XZ, status );
-      Set3DGrf( new, new->plotyz, YZ, status );
-
-/* For attributes of the parent Plot class will have been loaded 
-   each attribute that has a set value in the parent Plot structure,
-   re-set the value so that it gets copied to the copy the  to the
-   encapsulated Plots. First do axis specific attributes. */
-
-#define COPY_ATTR(attr,nval) \
-   for( i = 0; i < nval; i++ ) { \
-      if( astTest##attr(new,i) ) astSet##attr(new,i,astGet##attr(new,i)); \
-   }
-
-   COPY_ATTR(MinTick,3)
-   COPY_ATTR(Abbrev,3)
-   COPY_ATTR(Gap,3)
-   COPY_ATTR(LogGap,3)
-   COPY_ATTR(LogPlot,3)
-   COPY_ATTR(LogTicks,3)
-   COPY_ATTR(LogLabel,3)
-   COPY_ATTR(LabelUp,3)
-   COPY_ATTR(DrawAxes,3)
-   COPY_ATTR(LabelUnits,3)
-   COPY_ATTR(MinTickLen,3)
-   COPY_ATTR(MajTickLen,3)
-   COPY_ATTR(NumLab,3)
-   COPY_ATTR(NumLabGap,3)
-   COPY_ATTR(TextLab,3)
-   COPY_ATTR(TextLabGap,3)
-
-   COPY_ATTR(Style,AST__NPID)
-   COPY_ATTR(Font,AST__NPID)
-   COPY_ATTR(Colour,AST__NPID)
-   COPY_ATTR(Width,AST__NPID)
-   COPY_ATTR(Size,AST__NPID)
-
-#undef COPY_ATTR
-
-/* Now do attributes that are not axis specific. */
-
-#define COPY_ATTR(attr) \
-   if( astTest##attr(new) ) astSet##attr(new,astGet##attr(new));
-
-   COPY_ATTR(Ink)
-   COPY_ATTR(Tol)
-   COPY_ATTR(Invisible)
-   COPY_ATTR(TickAll)
-   COPY_ATTR(ForceExterior)
-   COPY_ATTR(Border)
-   COPY_ATTR(Clip)
-   COPY_ATTR(ClipOp)
-   COPY_ATTR(Escape)
-   COPY_ATTR(Grid)
-   COPY_ATTR(Labelling)
-
-#undef COPY_ATTR
-
-/* If an error occurred, clean up by deleting the new Plot3D. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Plot3D pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astClearRootCorner_( AstPlot3D *this, int *status ) { 
-   if ( !astOK ) return; 
-   (**astMEMBER(this,Plot3D,ClearRootCorner))( this, status ); 
-}
-
-void astSetRootCorner_( AstPlot3D *this, int value, int *status ) { 
-   if ( !astOK ) return; 
-   (**astMEMBER(this,Plot3D,SetRootCorner))( this, value, status ); 
-}
-
-
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPlot3D *astPlot3DId_( void *frame_void, const float graphbox[6], 
-                         const double basebox[6], const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstPlot3D *astPlot3DId_( void *frame_void, const float graphbox[6], 
-                         const double basebox[6], const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astPlot3D
-f     AST_PLOT3D
-
-*  Purpose:
-*     Create a Plot3D.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "plot3d.h"
-c     AstPlot3D *astPlot3D( AstFrame *frame, const float graphbox[ 6 ], 
-c                           const double basebox[ 6 ], const char *options, ... ) 
-f     RESULT = AST_PLOT3D( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Plot3D constructor.
-
-*  Description:
-*     This function creates a new Plot3D and optionally initialises
-*     its attributes.
-*
-*     A Plot3D is a specialised form of Plot that provides facilities 
-*     for producing 3D graphical output.
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        Pointer to a Frame describing the physical coordinate system
-*        in which to plot. A pointer to a FrameSet may also be given,
-*        in which case its current Frame will be used to define the
-*        physical coordinate system and its base Frame will be mapped
-*        on to graphical coordinates (see below).
-*
-*        If a null Object pointer (AST__NULL) is given, a default
-*        3-dimensional Frame will be used to describe the physical
-*        coordinate system. Labels, etc. may then be attached to this
-*        by setting the appropriate Frame attributes
-*        (e.g. Label(axis)) for the Plot.
-c     graphbox
-f     GRAPHBOX( 6 ) = REAL (Given)
-*        An array giving the position and extent of the plotting volume
-*        (within the plotting space of the underlying graphics system)
-*        in which graphical output is to appear. This must be
-*        specified using graphical coordinates appropriate to the
-*        underlying graphics system.
-*
-*        The first triple of values should give the coordinates of the
-*        bottom left corner of the plotting volume and the second triple
-*        should give the coordinates of the top right corner. The
-*        coordinate on the horizontal axis should be given first in
-*        each pair. Note that the order in which these points are
-*        given is important because it defines up, down, left and
-*        right for subsequent graphical operations.
-c     basebox
-f     BASEBOX( 6 ) = DOUBLE PRECISION (Given)
-*        An array giving the coordinates of two points in the supplied
-*        Frame (or in the base Frame if a FrameSet was supplied) which
-*        correspond to the bottom left and top right corners of the
-*        plotting volume, as specified above. This range of coordinates
-*        will be mapped linearly on to the plotting area. The
-*        coordinates should be given in the same order as above.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Plot3D. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Plot3D. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPlot3D()
-f     AST_PLOT3D = INTEGER
-*        A pointer to the new Plot3D.
-
-*  Notes:
-*     - The base Frame of the returned Plot3D will be a new Frame which
-*     is created by this function to represent the coordinate system
-*     of the underlying graphics system (graphical coordinates). It is
-*     given a Frame index of 1 within the Plot3D. The choice of base
-*     Frame (Base attribute) should not, in general, be changed once a
-*     Plot3D has been created (although you could use this as a way of
-*     moving the plotting area around on the plotting surface).
-c     - If a Frame is supplied (via the "frame" pointer), then it
-f     - If a Frame is supplied (via the FRAME pointer), then it
-*     becomes the current Frame of the new Plot3D and is given a Frame
-*     index of 2.
-c     - If a FrameSet is supplied (via the "frame" pointer), then
-f     - If a FrameSet is supplied (via the FRAME pointer), then 
-*     all the Frames within this FrameSet become part of the new Plot3D
-*     (where their Frame indices are increased by 1), with the
-*     FrameSet's current Frame becoming the current Frame of the Plot3D.
-*     - If a null Object pointer (AST__NULL) is supplied (via the
-c     "frame" pointer), then the returned Plot3D will contain two
-f     FRAME pointer), then the returned Plot3D will contain two
-*     Frames, both created by this function. The base Frame will
-*     describe graphics coordinates (as above) and the current Frame
-*     will be a basic Frame with no attributes set (this will
-*     therefore give default values for such things as the Plot3D Title
-*     and the Label on each axis). Physical coordinates will be mapped
-*     linearly on to graphical coordinates.
-*     - An error will result if the Frame supplied (or the base Frame
-*     if a FrameSet was supplied) is not 3-dimensional.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astPlot3D constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astPlot3D_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "frame" parameter is of type
-*     (void *) and is converted from an ID value to a pointer and
-*     validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astPlot3D_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPlot3D *new;               /* Pointer to new Plot3D */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   new = NULL;
-
-/* Obtain a Frame pointer from any ID supplied and validate the
-   pointer to ensure it identifies a valid Frame. */
-   if( frame_void ){
-      frame = astVerifyFrame( astMakePointer( frame_void ) );
-   } else {
-      frame = NULL;
-   }
-
-/* Check the pointer can be used. */
-   if ( astOK ) {
-
-/* Initialise the Plot3D, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitPlot3D( NULL, sizeof( AstPlot3D ), !class_init,
-                           &class_vtab, "Plot3D", frame, graphbox, 
-                           basebox );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   Plot3D's attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new Plot3D. */
-   return astMakeId( new );
-
-}
-
-
-
-/* Macros that define method to override the methods of the Plot class
-   that are not currently implemented by this class. They just report an
-   error if called. */
-
-#define METHOD1(name) \
-static void name(ARGLIST,int *status){ \
-   if( !astOK ) return; \
-   astError( AST__INTER, "ast##name(%s): The ast##name " \
-             "method cannot be used with a %s (programming error).", status,  \
-             astGetClass( this ), astGetClass( this ) ); \
-}
-
-#define METHOD2(name,rettype,retval) \
-static rettype name(ARGLIST,int *status){ \
-   if( !astOK ) return retval; \
-   astError( AST__INTER, "ast##name(%s): The ast##name " \
-             "method cannot be used with a %s (programming error).", status,  \
-             astGetClass( this ), astGetClass( this ) ); \
-   return retval; \
-}
-
-
-#define ARGLIST AstPlot *this 
-METHOD2(GetGrfContext,AstKeyMap *,NULL)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this
-METHOD1(GrfPop)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this
-METHOD1(GrfPush)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, const char *name, AstGrfFun fun
-METHOD1(GrfSet)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, int axis, const double start[], double length
-METHOD1(GridLine)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, float lbnd[2], float ubnd[2]
-METHOD1(BoundingBox)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, int iframe, const double lbnd[], const double ubnd[] 
-METHOD1(Clip)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, const double start[], const double finish[]
-METHOD1(Curve)
-#undef ARGLIST
-
-#define ARGLIST AstPlot *this, AstMapping *map
-METHOD1(GenCurve)
-#undef ARGLIST
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/plot3d.h b/ast-5.3-1/plot3d.h
deleted file mode 100644
index 7501ab4..0000000
--- a/ast-5.3-1/plot3d.h
+++ /dev/null
@@ -1,258 +0,0 @@
-#if !defined( PLOT3D_INCLUDED ) /* Include this file only once */
-#define PLOT3D_INCLUDED
-/*
-*+
-*  Name:
-*     plot3d.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Plot3D class.
-
-*  Invocation:
-*     #include "plot3d.h"
-
-*  Description:
-*     This include file defines the interface to the Plot3D class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-
-*  Copyright:
-*     Copyright (C) 2007 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     6-JUN-2007 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "plot.h"               /* Parent Plot class */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Plot3D structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPlot3D {
-
-/* Attributes inherited from the parent class. */
-   AstPlot plot;               /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstPlot *plotxy;            /* Plot describing the XY plane */
-   AstPlot *plotxz;            /* Plot describing the XZ plane */
-   AstPlot *plotyz;            /* Plot describing the YZ plane */
-   double gbox[6];             /* Graphics box */
-   int pix_frame;              /* Index of original base Frame */
-   int rootcorner;             /* Corner at junction of the annotated axes */
-   int baseplot;               /* The Plot that is used to label 2 3D axes */
-   int axis_plot1[3];          /* The Plot used to label each 3D axis */
-   int axis_index1[3];         /* The axis index within the axis_plot1 Plot */
-   int axis_plot2[3];          /* The other Plot touching each 3D axis */
-   int axis_index2[3];         /* The axis index within the axis_plot2 Plot */
-   double norm[3];             /* Normal vector for text plane */
-} AstPlot3D;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPlot3DVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstPlotVtab plot_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-   int (* GetRootCorner)( AstPlot3D *, int * );
-   int (* TestRootCorner)( AstPlot3D *, int * );
-   void (* SetRootCorner)( AstPlot3D *, int, int * );
-   void (* ClearRootCorner)( AstPlot3D *, int * );
-
-   double (* GetNorm)( AstPlot3D *, int, int * );
-   int (* TestNorm)( AstPlot3D *, int, int * );
-   void (* SetNorm)( AstPlot3D *, int, double, int * );
-   void (* ClearNorm)( AstPlot3D *, int, int * );
-
-} AstPlot3DVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstPlot3DGlobals {
-   AstPlot3DVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstPlot3DGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Plot3D)         /* Check class membership */
-astPROTO_ISA(Plot3D)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstPlot3D *astPlot3D_( void *, const float *, const double *, const char *, int *, ...);
-#else
-AstPlot3D *astPlot3DId_( void *, const float [], const double [], const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPlot3D *astInitPlot3D_( void *, size_t, int, AstPlot3DVtab *, 
-                           const char *, AstFrame *, const float *, 
-                           const double *, int * );
-
-/* Vtab initialiser. */
-void astInitPlot3DVtab_( AstPlot3DVtab *, const char *, int * );
-
-/* Loader. */
-AstPlot3D *astLoadPlot3D_( void *, size_t, 
-                                         AstPlot3DVtab *,
-                                         const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitPlot3DGlobals_( AstPlot3DGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-#if defined(astCLASS)            /* Protected */
-
-   int astGetRootCorner_( AstPlot3D *, int * );
-   int astTestRootCorner_( AstPlot3D *, int * );
-   void astSetRootCorner_( AstPlot3D *, int, int * );
-   void astClearRootCorner_( AstPlot3D *, int * );
-
-   double astGetNorm_( AstPlot3D *, int, int * );
-   int astTestNorm_( AstPlot3D *, int, int * );
-   void astSetNorm_( AstPlot3D *, int, double, int * );
-   void astClearNorm_( AstPlot3D *, int, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPlot3D(this) astINVOKE_CHECK(Plot3D,this,0)
-#define astVerifyPlot3D(this) astINVOKE_CHECK(Plot3D,this,1)
-
-/* Test class membership. */
-#define astIsAPlot3D(this) astINVOKE_ISA(Plot3D,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astPlot3D astINVOKE(F,astPlot3D_)
-#else
-#define astPlot3D astINVOKE(F,astPlot3DId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPlot3D(mem,size,init,vtab,name,frame,graph,base) \
-astINVOKE(O,astInitPlot3D_(mem,size,init,vtab,name,frame,graph,base,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPlot3DVtab(vtab,name) astINVOKE(V,astInitPlot3DVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPlot3D(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPlot3D_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckPlot3D to validate Plot3D pointers
-   before use. This provides a contextual error report if a pointer to
-   the wrong sort of object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGetRootCorner(this) astINVOKE(V,astGetRootCorner_(astCheckPlot3D(this),STATUS_PTR))
-#define astTestRootCorner(this) astINVOKE(V,astTestRootCorner_(astCheckPlot3D(this),STATUS_PTR))
-#define astClearRootCorner(this) astINVOKE(V,astClearRootCorner_(astCheckPlot3D(this),STATUS_PTR))
-#define astSetRootCorner(this,value) astINVOKE(V,astSetRootCorner_(astCheckPlot3D(this),value,STATUS_PTR))
-
-#define astGetNorm(this,axis) astINVOKE(V,astGetNorm_(astCheckPlot3D(this),axis,STATUS_PTR))
-#define astTestNorm(this,axis) astINVOKE(V,astTestNorm_(astCheckPlot3D(this),axis,STATUS_PTR))
-#define astClearNorm(this,axis) astINVOKE(V,astClearNorm_(astCheckPlot3D(this),axis,STATUS_PTR))
-#define astSetNorm(this,axis,value) astINVOKE(V,astSetNorm_(astCheckPlot3D(this),axis,value,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/pointlist.c b/ast-5.3-1/pointlist.c
deleted file mode 100644
index 11e360c..0000000
--- a/ast-5.3-1/pointlist.c
+++ /dev/null
@@ -1,3407 +0,0 @@
-/*
-*class++
-*  Name:
-*     PointList
-
-*  Purpose:
-*     A collection of points in a Frame.
-
-*  Constructor Function:
-c     astPointList
-f     AST_POINTLIST
-
-*  Description:
-*     The PointList class implements a Region which represents a collection
-*     of points in a Frame.
-
-*  Inheritance:
-*     The PointList class inherits from the Region class.
-
-*  Attributes:
-*     In addition to those attributes common to all Regions, every
-*     PointList also has the following attributes:
-*
-*     - ListSize: The number of positions stored in the PointList
-
-
-*  Functions:
-c     The PointList class does not define any new functions beyond those
-f     The PointList class does not define any new routines beyond those
-*     which are applicable to all Regions.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-MAR-2004 (DSB):
-*        Original version.
-*     20-JAN-2009 (DSB):
-*        Over-ride astRegBasePick.
-*     21-JAN-2009 (DSB):
-*        - Add methods astGetEnclosure, astSetEnclosure and astPoints, and 
-*        attribute ListSize.
-*        - Override astGetObjSize and astEqual.
-*     26-JAN-2009 (DSB):
-*        Change protected constructor to accept a PointSet rather than an
-*        array of doubles.
-*     6-FEB-2009 (DSB):
-*        Over-ride astMapMerge.
-*     9-FEB-2009 (DSB):
-*        Move methods astGetEnclosure and astSetEnclosure to Region class.
-*     8-JUL-2009 (DSB):
-*        In Transform, use "ptr2", not "ptr", if we are creating a mask.
-*class--
-
-*  Implementation Deficiencies:
-*     - Use of simple arrays to hold lists  of points is probably not
-*     efficient for large numbers of points. For instance, use of k-tree
-*     structures instead of arrays could result in a much  more efficient
-*     implementation of the Transform function. Maybe the PointSet class
-*     should be extended to provide a k-tree representation as well as a 
-*     simple array.
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS PointList
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "pointlist.h"           /* Interface definition for this class */
-#include "mapping.h"             /* Position mappings */
-#include "unitmap.h"             /* Unit Mapping */
-#include "frame.h"               /* Coordinate systems */
-#include "cmpframe.h"            /* Compound Frames */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "prism.h"               /* Extruded Regions */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PointList)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PointList,Class_Init)
-#define class_vtab astGLOBAL(PointList,Class_Vtab)
-#define getattrib_buff astGLOBAL(PointList,GetAttrib_Buff)
-
-
-#include <pthread.h>
-
-
-#else
-
-static char getattrib_buff[ 101 ];
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPointListVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPointList *astPointListId_( void *, int, int, int, const double *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-static int MaskLD( AstRegion *, AstMapping *, int, int, const int[], const int ubnd[], long double [], long double, int * );
-#endif
-static int MaskB( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-static int MaskD( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-static int MaskF( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-static int MaskI( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-static int MaskL( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-static int MaskS( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-static int MaskUB( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-static int MaskUI( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-static int MaskUL( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-static int MaskUS( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *RegBasePick( AstRegion *, int, const int *, int * );
-static int GetClosed( AstRegion *, int * );
-static int GetListSize( AstPointList *, int * );
-static int GetObjSize( AstObject *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void PointListPoints( AstPointList *, AstPointSet **, int *);
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static AstRegion *MergePointList( AstPointList *, AstRegion *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-
-/* Member functions. */
-/* ================= */
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, 
-                         int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astClearAttrib
-*     protected method inherited from the Object class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     PointList, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPointList *this;            /* Pointer to the PointList structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PointList structure. */
-   this = (AstPointList *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
-   class. If it does, then report an error. */
-   if ( !strcmp( attrib, "listsize" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, 
-                              int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the protected astGetAttrib
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a PointList, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the PointList, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the PointList. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPointList *this;           /* Pointer to the PointList structure */
-   const char *result;           /* Pointer value to return */
-   int ival;                     /* Integer attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the PointList structure. */
-   this = (AstPointList *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an 
-   appropriate format.  Set "result" to point at the result string. */
-
-/* ListSize. */
-/* -------- */
-   if ( !strcmp( attrib, "listsize" ) ) {
-      ival = astGetListSize( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetClosed( AstRegion *this, int *status ) {
-/*
-*  Name:
-*     GetClosed
-
-*  Purpose:
-*     Get the value of the CLosed attribute for a PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     int GetClosed( AstRegion *this, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astGetClosed method
-*     inherited from the Region class).
-
-*  Description:
-*     This function returns the value of the Closed attribute for a
-*     PointList. Since points have zero volume they consist entirely of
-*     boundary. Therefore the Region is always considered to be closed
-*     unless it has been negated, in which case it is always assumed to
-*     be open.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to use for the Closed attribute.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* The value to be used for the Closed attribute is always the opposite
-   of the Negated attribute. */
-   return ( astGetNegated( this ) == 0 );
-}
-
-static int GetListSize( AstPointList *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetListSize
-
-*  Purpose:
-*     Determine how many points there are in a PointList.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     int astGetListSize( AstPointList *this )
-
-*  Class Membership:
-*     PointList method.
-
-*  Description:
-*     This function returns the number of points stored in a Point|List.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-
-*  Returned Value:
-*     The number of points in the PointList.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the number of points by querying the PointSet that holds the
-   points. */
-   return astGetNpoint( ((AstRegion *) this)->points );
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     PointList member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied PointList,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointList *this;         /* Pointer to PointList structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the PointList structure. */
-   this = (AstPointList *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by this class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->lbnd );
-   result += astGetObjSize( this->ubnd );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-void astInitPointListVtab_(  AstPointListVtab *vtab, const char *name, 
-                             int *status ) {
-/*
-*+
-*  Name:
-*     astInitPointListVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a PointList.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     void astInitPointListVtab( AstPointListVtab *vtab, const char *name )
-
-*  Class Membership:
-*     PointList vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the PointList class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPointList) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->GetListSize = GetListSize;
-   vtab->PointListPoints = PointListPoints;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping->MapMerge = MapMerge;
-
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegBaseBox = RegBaseBox;
-   region->RegBasePick = RegBasePick;
-   region->RegPins = RegPins;
-   region->GetClosed = GetClosed;
-   region->MaskB = MaskB;
-   region->MaskD = MaskD;
-   region->MaskF = MaskF;
-   region->MaskI = MaskI;
-   region->MaskL = MaskL;
-   region->MaskS = MaskS;
-   region->MaskUB = MaskUB;
-   region->MaskUI = MaskUI;
-   region->MaskUL = MaskUL;
-   region->MaskUS = MaskUS;
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-   region->MaskLD = MaskLD;
-#endif
-
-/* Declare the class dump function. There is no copy constructor or
-   destructor. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "PointList", "Collection of points" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-/*
-*  Name:
-*     Mask<X>
-
-*  Purpose:
-*     Mask a region of a data grid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     int Mask<X>( AstRegion *this, AstMapping *map, int inside, int ndim, 
-*                  const int lbnd[], const int ubnd[], <Xtype> in[], 
-*                  <Xtype> val )
-
-*  Class Membership:
-*     PointList function method (replaces the astMask<X> methods
-*     inherited from the parent Region class).
-
-*  Description:
-*     This is a set of functions for masking out regions within gridded data 
-*     (e.g. an image). The functions modifies a given data grid by
-*     assigning a specified value to all samples which are inside (or outside 
-*     if "inside" is zero) the specified Region.
-*
-*     You should use a masking function which matches the numerical
-*     type of the data you are processing by replacing <X> in
-*     the generic function name astMask<X> by an appropriate 1- or
-*     2-character type code. For example, if you are masking data
-*     with type "float", you should use the function astMaskF (see
-*     the "Data Type Codes" section below for the codes appropriate to
-*     other numerical types).
-
-*  Parameters:
-*     this
-*        Pointer to a Region. 
-*     map
-*        Pointer to a Mapping. The forward transformation should map
-*        positions in the coordinate system of the supplied Region
-*        into pixel coordinates as defined by the "lbnd" and "ubnd" 
-*        parameters. A NULL pointer can be supplied if the coordinate 
-*        system of the supplied Region corresponds to pixel coordinates. 
-*        This is equivalent to supplying a UnitMap.
-*
-*        The number of inputs for this Mapping (as given by its Nin attribute) 
-*        should match the number of axes in the supplied Region (as given
-*        by the Naxes attribute of the Region). The number of outputs for the 
-*        Mapping (as given by its Nout attribute) should match the number of
-*        grid dimensions given by the value of "ndim" below. 
-*     inside
-*        A boolean value which indicates which pixel are to be masked. If 
-*        a non-zero value is supplied, then all grid pixels which are inside 
-*        the supplied Region are assigned the value given by "val",
-*        and all other pixels are left unchanged. If zero is supplied, then 
-*        all grid pixels which are not inside the supplied Region are 
-*        assigned the value given by "val", and all other pixels are left 
-*        unchanged. Note, the Negated attribute of the Region is used to 
-*        determine which pixel are inside the Region and which are outside. 
-*        So the inside of a Region which has not been negated is the same as 
-*        the outside of the corresponding negated Region.
-*     ndim
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-*     lbnd
-*        Pointer to an array of integers, with "ndim" elements,
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-*     ubnd
-*        Pointer to an array of integers, with "ndim" elements,
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-*        Note that "lbnd" and "ubnd" together define the shape
-*        and size of the input grid, its extent along a particular
-*        (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-*        index "j" to be zero-based). They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-*     in
-*        Pointer to an array, with one element for each pixel in the
-*        input grid, containing the data to be masked.  The
-*        numerical type of this array should match the 1- or
-*        2-character type code appended to the function name (e.g. if
-*        you are using astMaskF, the type of each array element
-*        should be "float").
-*
-*        The storage order of data within this array should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-*        (i.e. Fortran array indexing is used).
-*
-*        On exit, the samples specified by "inside" are set to the value 
-*        of "val". All other samples are left unchanged.
-*     val
-*        This argument should have the same type as the elements of
-*        the "in" array. It specifies the value used to flag the
-*        masked data (see "inside").
-
-*  Returned Value:
-*     The number of pixels to which a value of "badval" has been assigned.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Data Type Codes:
-*     To select the appropriate masking function, you should
-*     replace <X> in the generic function name astMask<X> with a
-*     1- or 2-character data type code, so as to match the numerical
-*     type <Xtype> of the data you are processing, as follows:
-*     - D: double
-*     - F: float
-*     - L: long int
-*     - UL: unsigned long int
-*     - I: int
-*     - UI: unsigned int
-*     - S: short int
-*     - US: unsigned short int
-*     - B: byte (signed char)
-*     - UB: unsigned byte (unsigned char)
-*
-*     For example, astMaskD would be used to process "double"
-*     data, while astMaskS would be used to process "short int"
-*     data, etc.
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_MASK(X,Xtype) \
-static int Mask##X( AstRegion *this, AstMapping *map, int inside, int ndim, \
-                    const int lbnd[], const int ubnd[], \
-                    Xtype in[], Xtype val, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *grid_frame;         /* Pointer to Frame describing grid coords */ \
-   AstPointSet *pset1;           /* Pointer to base Frame positions */ \
-   AstPointSet *pset2;           /* Pointer to current Frame positions */ \
-   AstRegion *used_region;       /* Pointer to Region to be used by astResample */ \
-   Xtype *temp;                  /* Pointer to temp storage for retained points */ \
-   double **ptr2;                /* Pointer to pset2 data values */ \
-   int *iv;                      /* Pointer to index array */ \
-   int i;                        /* Point index */ \
-   int idim;                     /* Loop counter for coordinate dimensions */ \
-   int ii;                       /* Vectorised point index */ \
-   int j;                        /* Axis index */ \
-   int nax;                      /* Number of Region axes */ \
-   int negated;                  /* Has Region been negated? */ \
-   int nin;                      /* Number of Mapping input coordinates */ \
-   int nout;                     /* Number of Mapping output coordinates */ \
-   int npnt;                     /* Number of points in PointList */ \
-   int result;                   /* Result value to return */ \
-   int vlen;                     /* Length of vectorised array */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Obtain value for the Naxes attribute of the Region. */ \
-   nax = astGetNaxes( this ); \
-\
-/* If supplied, obtain values for the Nin and Nout attributes of the Mapping. */ \
-   if( map ) { \
-      nin = astGetNin( map ); \
-      nout = astGetNout( map ); \
-\
-/* If OK, check that the number of mapping inputs matches the \
-   number of axes in the Region. Report an error if necessary. */ \
-      if ( astOK && ( nax != nin ) ) { \
-         astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
-                   "inputs (%d).", status, astGetClass( this ), nin ); \
-         astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                   "to specify a position.", status, \
-                   astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
-      } \
-\
-/* If OK, check that the number of mapping outputs matches the \
-   number of grid dimensions. Report an error if necessary. */ \
-      if ( astOK && ( ndim != nout ) ) { \
-         astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
-                   "outputs (%d).", status, astGetClass( this ), nout ); \
-         astError( AST__NGDIN, "The pixel grid requires %d coordinate value%s " \
-                   "to specify a position.", status, \
-                   ndim, ( ndim == 1 ) ? "" : "s" ); \
-      } \
-\
-/* Create a new Region by mapping the supplied Region with the supplied \
-   Mapping.*/ \
-      grid_frame = astFrame( ndim, "Domain=grid", status ); \
-      used_region = astMapRegion( this, map, grid_frame ); \
-      grid_frame = astAnnul( grid_frame ); \
-\
-/* If no Mapping was supplied check that the number of grid dimensions \
-   matches the number of axes in the Region.*/ \
-   } else if ( astOK && ( ( ndim != nax ) || ( ndim < 1 ) ) ) { \
-      used_region = NULL; \
-      astError( AST__NGDIN, "astMask"#X"(%s): Bad number of input grid " \
-                "dimensions (%d).", status, astGetClass( this ), ndim ); \
-      if ( ndim != nax ) { \
-         astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                   "to specify an input position.", status, \
-                   astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
-      } \
-\
-/* If no Mapping was supplied and the parameters look OK, clone the \
-   supplied Region pointer for use later on. */  \
-   } else { \
-      used_region = astClone( this );  \
-   }  \
-\
-/* Check that the lower and upper bounds of the input grid are \
-   consistent. Report an error if any pair is not. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim; idim++ ) { \
-         if ( lbnd[ idim ] > ubnd[ idim ] ) { \
-            astError( AST__GBDIN, "astMask"#X"(%s): Lower bound of " \
-                      "input grid (%d) exceeds corresponding upper bound " \
-                      "(%d).", status, astGetClass( this ), \
-                      lbnd[ idim ], ubnd[ idim ] ); \
-            astError( AST__GBDIN, "Error in input dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* Get the PointSet in the base Frame of the Region's FrameSet, and \
-   transform to the current (GRID) Frame. */ \
-   pset1 = used_region->points; \
-   pset2 = astRegTransform( used_region, pset1, 1, NULL, NULL ); \
-   ptr2 =astGetPoints( pset2 ); \
-\
-/* Allocate memory to hold the corresponding vector indices. */ \
-   npnt = astGetNpoint( pset2 ); \
-   iv = astMalloc( sizeof(int)*(size_t) npnt ); \
-   if( astOK ) { \
-\
-/* Convert the transformed GRID positions into integer indices into the \
-   vectorised data array. Also form the total size of the data array. */ \
-      vlen = 0; \
-      for( i = 0; i < npnt; i++ ) { \
-         vlen = 1; \
-         ii = 0; \
-         for( j = 0; j < ndim; j++ ) { \
-            ii += vlen*( (int)( ptr2[ j ][ i ] + 0.5 ) - lbnd[ j ] ); \
-            vlen *= ubnd[ i ] - lbnd[ i ] + 1; \
-         }  \
-         iv[ i ] = ii; \
-      } \
-\
-/* See if the Region is negated. */ \
-      negated = astGetNegated( used_region ); \
-\
-/* If necessary, set the transformed pixel coords to the supplied value. */ \
-      if( ( inside && !negated ) || ( !inside && negated ) ) { \
-         for( i = 0; i < npnt; i++ ) in[ iv[ i ] ] = val; \
-         result = npnt; \
-\
-/* If necessary, set all except the transformed pixel coords to the supplied  \
-   value. */ \
-      } else { \
-         temp = astMalloc( sizeof( Xtype )*(size_t)npnt ); \
-         if( astOK ) { \
-            for( i = 0; i < npnt; i++ ) temp[ i ] = in[ iv[ i ] ]; \
-            for( i = 0; i < vlen; i++ ) in[ i ] = val; \
-            for( i = 0; i < npnt; i++ ) in[ iv[ i ] ] = temp[ i ]; \
-            result = vlen - npnt; \
-         } \
-         temp = astFree( temp ); \
-      } \
-   } \
-\
-/* Free resources */ \
-   iv = astFree( iv ); \
-   pset2 = astAnnul( pset2 ); \
-   used_region = astAnnul( used_region ); \
-\
-/* If an error occurred, clear the returned result. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_MASK(LD,long double)
-#endif
-MAKE_MASK(D,double)
-MAKE_MASK(F,float)
-MAKE_MASK(L,long int)
-MAKE_MASK(UL,unsigned long int)
-MAKE_MASK(I,int)
-MAKE_MASK(UI,unsigned int)
-MAKE_MASK(S,short int)
-MAKE_MASK(US,unsigned short int)
-MAKE_MASK(B,signed char)
-MAKE_MASK(UB,unsigned char)
-
-/* Undefine the macro. */
-#undef MAKE_MASK
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     PointList method (over-rides the protected astMapMerge method
-*     inherited from the Region class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated PointList in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated PointList with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated PointList which is to be merged with
-*        its neighbours. This should be a cloned copy of the PointList
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        PointList it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated PointList resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstPointList *oldint;  /* Pointer to supplied PointList */
-   AstMapping *map;      /* Pointer to adjacent Mapping */
-   AstMapping *new;      /* Simplified or merged Region */
-   int i1;               /* Index of first Mapping merged */
-   int i;                /* Loop counter */
-   int result;           /* Result value to return */
-
-/* Initialise. */
-   result = -1;
-   i1 = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the PointList. */
-   oldint = (AstPointList *) this;
-
-/* First of all, see if the PointList can be replaced by a simpler Region,
-   without reference to the neighbouring Regions in the list.           */
-/* =====================================================================*/
-
-/* Try to simplify the PointList. If the pointer value has changed, we assume
-   some simplification took place. */
-   new = astSimplify( oldint );
-   if( new != (AstMapping *) oldint ) {
-
-/* Annul the PointList pointer in the list and replace it with the new Region
-   pointer, and indicate that the forward transformation of the returned
-   Region should be used (not really needed but keeps things clean). */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = new;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-
-/* If the PointList itself could not be simplified, see if it can be merged
-   with the Regions on either side of it in the list. We can only merge
-   in parallel. */
-/* =====================================================================*/
-   } else if( ! series ){
-      new = astAnnul( new );
-
-/* Attempt to merge the PointList with its lower neighbour (if any). */
-      if( where > 0 ) {
-         i1 = where - 1;
-         map = ( *map_list )[ where - 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergePointList( oldint, (AstRegion *) map,
-                                                  0, status );
-         }
-      }
-
-/* If this did not produced a merged Region, attempt to merge the PointList 
-   with its upper neighbour (if any). */
-      if( !new && where < *nmap - 1 ) {
-         i1 = where;
-         map = ( *map_list )[ where + 1 ];
-         if( astIsARegion( map ) ) {
-            new = (AstMapping *) MergePointList( oldint, (AstRegion *) map,
-                                                  1, status );
-         }
-      }
-
-/* If succesfull... */
-      if( new ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   Region. Also clear the invert flag. */ 
-         (void) astAnnul( ( *map_list )[ i1 ] );
-         ( *map_list )[ i1 ] = new;
-         ( *invert_list )[ i1 ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-         (void) astAnnul( ( *map_list )[ i1 + 1 ] );
-         for ( i = i1 + 2; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-
-/* Clear the vacated element at the end. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap )--;
-         result = i1;
-      }
-
-   } else {
-      new = astAnnul( new );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *MergePointList( AstPointList *this, AstRegion *reg, 
-                                   int plsfirst, int *status ) {
-/*
-*  Name:
-*     MergePointList
-
-*  Purpose:
-*     Attempt to merge a PointList with another Region to form a Region of 
-*     higher dimensionality.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstRegion *MergePointList( AstPointList *this, AstRegion *reg, 
-*                                 int plsfirst, int *status ) 
-
-*  Class Membership:
-*     PointList member function.
-
-*  Description:
-*     This function attempts to combine the supplied Regions together
-*     into a Region of higher dimensionality. 
-
-*  Parameters:
-*     this
-*        Pointer to a PointList.
-*     reg
-*        Pointer to another Region.
-*     plsfirst
-*        If non-zero, then the PointList axes are put first in the new Region.
-*        Otherwise, the other Region's axes are put first.
-*     status
-*        Pointer to the inherited status value.
-
-*  Returned Value:
-*     A pointer to a new region, or NULL if the supplied Regions could
-*     not be merged.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;           /* Pointer to base Frame for "result" */
-   AstFrame *cfrm;           /* Pointer to current Frame for "result" */
-   AstFrame *frm_reg;        /* Pointer to Frame from "reg" */
-   AstFrame *frm_this;       /* Pointer to Frame from "this" */
-   AstMapping *bcmap;        /* Base->current Mapping for "result" */
-   AstMapping *map_reg;      /* Base->current Mapping from "reg" */
-   AstMapping *map_this;     /* Base->current Mapping from "this" */
-   AstMapping *sbunc;        /* Simplified uncertainty */
-   AstPointSet *pset_new;    /* PointSet for new PointList */
-   AstPointSet *pset_reg;    /* PointSet from reg */
-   AstPointSet *pset_this;   /* PointSet from this */
-   AstRegion *bunc;          /* Base Frame uncertainty Region */
-   AstRegion *new;           /* Pointer to new PointList in base Frame */
-   AstRegion *result;        /* Pointer to returned PointList in current Frame */
-   AstRegion *unc_reg;       /* Current Frame uncertainty Region from "reg" */
-   AstRegion *unc_this;      /* Current Frame uncertainty Region from "this" */
-   double **ptr_new;         /* PointSet data pointers for new PointList */
-   double **ptr_reg;         /* PointSet data pointers for reg */
-   double **ptr_this;        /* PointSet data pointers for this */
-   double fac_reg;           /* Ratio of used to default MeshSize for "reg" */
-   double fac_this;          /* Ratio of used to default MeshSize for "this" */
-   int i;                    /* Axis index */
-   int msz_reg;              /* Original MeshSize for "reg" */
-   int msz_reg_set;          /* Was MeshSize originally set for "reg"? */
-   int msz_this;             /* Original MeshSize for "this" */
-   int msz_this_set;         /* Was MeshSize originally set for "this"? */
-   int nax;                  /* Number of axes in "result" */
-   int nax_reg;              /* Number of axes in "reg" */
-   int nax_this;             /* Number of axes in "this" */
-   int neg_reg;              /* Negated attribute value for other supplied Region */
-   int neg_this;             /* Negated attribute value for supplied PointList  */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get the Closed attributes of the two Regions. They must be the same in 
-   each Region if we are to merge the Regions. In addition, in order to 
-   merge, either both Regions must have a defined uncertainty, or neither 
-   Region must have a defined Uncertainty. */
-   if( astGetClosed( this ) == astGetClosed( reg ) &&
-       astTestUnc( this ) == astTestUnc( reg ) ) {
-
-/* Get the Nagated attributes of the two Regions. */
-      neg_this = astGetNegated( this );
-      neg_reg = astGetNegated( reg );
-
-/* We only check for merging with another PointList (other classes such
-   as Box and Interval check for merging of PointLists with other classes). 
-   The result will be an PointList. Both Regions must have the same value 
-   for the Negated flag, and can contain only a single point. */
-      if( astIsAPointList( reg ) && neg_this == neg_reg &&
-          astGetListSize( this ) == 1 && 
-          astGetListSize( (AstPointList *) reg ) == 1 ) {
-
-/* Get the number of axes in the two supplied Regions. */
-         nax_reg = astGetNaxes( reg );
-         nax_this = astGetNaxes( this );
-   
-/* Get the number of axes the combination will have. */
-         nax = nax_reg + nax_this;
-   
-/* Get the base Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame that will be used to create the new Region. */
-         frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-         frm_reg = astGetFrame( reg->frameset, AST__BASE );
-   
-         if( plsfirst ) {
-            bfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-         } else {
-            bfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-         }
-      
-         frm_this = astAnnul( frm_this );
-         frm_reg = astAnnul( frm_reg );
-
-/* Get pointers to the coordinate data in the two PointLists */
-         pset_this = ((AstRegion *) this)->points;
-         ptr_this = astGetPoints( pset_this );
-         pset_reg = reg->points;
-         ptr_reg = astGetPoints( pset_reg );
-
-/* Create a PointSet to hold the points for the returned PointList. */
-         pset_new = astPointSet( 1, nax, "", status );
-
-/* Get pointers to its data. */
-         ptr_new = astGetPoints( pset_new );
-
-/* Check pointers can be used safely. */
-         if( astOK ) {
-
-/* Copy the point positions fon the selected axes into the arrays allocated 
-   above, in the requested order. */
-            if( plsfirst ) {
-               for( i = 0; i < nax_this; i++ ) {
-                  ptr_new[ i ][ 0 ] = ptr_this[ i ][ 0 ];   
-               }
-               for( ; i < nax; i++ ) {
-                  ptr_new[ i ][ 0 ] = ptr_reg[ i - nax_this ][ 0 ];   
-               }
-   
-            } else {
-               for( i = 0; i < nax_reg; i++ ) {
-                  ptr_new[ i ][ 0 ] = ptr_reg[ i ][ 0 ];   
-               }
-               for( ; i < nax; i++ ) {
-                  ptr_new[ i ][ 0 ] = ptr_this[ i - nax_reg ][ 0 ];   
-               }
-            }
-
-/* Create the new PointList. */
-            new = (AstRegion *) astPointList( bfrm, pset_new, NULL, "", 
-                                              status );
-
-/* Propagate remaining attributes of the supplied Region to it. */
-            astRegOverlay( new, this, 1 );
-
-/* Ensure the Negated flag is set correctly in the returned PointList. */
-            if( neg_this ) {
-               astSetNegated( new, neg_this );
-            } else {
-               astClearNegated( new );
-            }
-
-/* If both the supplied Regions have uncertainty, assign the new Region an 
-   uncertainty. */
-            if( astTestUnc( this ) && astTestUnc( reg ) ) {
-
-/* Get the uncertainties from the two supplied Regions. */
-               unc_this = astGetUncFrm( this, AST__BASE );
-               unc_reg = astGetUncFrm( reg, AST__BASE );
-
-/* Combine them into a single Region (a Prism), in the correct order. */
-               if( plsfirst ) {
-                  bunc = (AstRegion *) astPrism( unc_this, unc_reg, "", status );
-               } else {
-                  bunc = (AstRegion *) astPrism( unc_reg, unc_this, "", status );
-               }
-
-/* Attempt to simplify the Prism. */
-               sbunc = astSimplify( bunc );
-
-/* Use the simplified Prism as the uncertainty for the returned Region. */
-               astSetUnc( new, sbunc );
-
-/* Free resources. */
-               sbunc = astAnnul( sbunc );
-               bunc = astAnnul( bunc );
-               unc_reg = astAnnul( unc_reg );
-               unc_this = astAnnul( unc_this );
-            }
-   
-/* Get the current Frames from the two Region FrameSets, and combine them
-   into a single CmpFrame. */
-            frm_this = astGetFrame( ((AstRegion *) this)->frameset, AST__CURRENT );
-            frm_reg = astGetFrame( reg->frameset, AST__CURRENT );
-         
-            if( plsfirst ) {
-               cfrm = (AstFrame *) astCmpFrame( frm_this, frm_reg, "", status );
-            } else {
-               cfrm = (AstFrame *) astCmpFrame( frm_reg, frm_this, "", status );
-            }
-         
-/* Get the base -> current Mappings from the two Region FrameSets, and 
-   combine them into a single parallel CmpMap that connects bfrm and cfrm. */
-            map_this = astGetMapping( ((AstRegion *) this)->frameset, AST__BASE, 
-                                      AST__CURRENT );
-            map_reg = astGetMapping( reg->frameset, AST__BASE, AST__CURRENT );
-         
-            if( plsfirst ) {
-               bcmap = (AstMapping *) astCmpMap( map_this, map_reg, 0, "", 
-                                                 status );
-            } else {
-               bcmap = (AstMapping *) astCmpMap( map_reg, map_this, 0, "", 
-                                                 status );
-            }
-         
-/* Map the new Region into the new current Frame. */
-            result = astMapRegion( new, bcmap, cfrm );
-   
-/* The filling factor in the returned is the product of the filling
-   factors for the two supplied Regions. */
-            if( astTestFillFactor( reg ) || astTestFillFactor( this ) ) {
-               astSetFillFactor( result, astGetFillFactor( reg )*
-                                         astGetFillFactor( this ) );
-            }
-   
-/* If the MeshSize value is set in either supplied Region, set a value
-   for the returned Region which scales the default value by the
-   product of the scaling factors for the two supplied Regions. First see
-   if either MeshSize value is set. */
-            msz_this_set = astTestMeshSize( this );
-            msz_reg_set = astTestMeshSize( reg );
-            if( msz_this_set || msz_reg_set ) {
-   
-/* If so, get the two MeshSize values (one of which may be a default
-   value), and then clear them so that the default value will be returned
-   in future. */
-               msz_this = astGetMeshSize( this );
-               msz_reg = astGetMeshSize( reg );
-               astClearMeshSize( this );
-               astClearMeshSize( reg );
-   
-/* Get the ratio of the used MeshSize to the default MeshSize for both
-   Regions. */
-               fac_this = (double)msz_this/(double)astGetMeshSize( this );
-               fac_reg = (double)msz_reg/(double)astGetMeshSize( reg );
-   
-/* The MeshSize of the returned Returned is the default value scaled by
-   the product of the two ratios found above. */
-               astSetMeshSize( result, fac_this*fac_reg*astGetMeshSize( result ) );
-   
-/* Re-instate the original MeshSize values for the supplied Regions (if
-   set) */
-               if( msz_this_set ) astSetMeshSize( this, msz_this );
-               if( msz_reg_set ) astSetMeshSize( reg, msz_reg );
-            }
-   
-/* Free remaining resources */
-            frm_this = astAnnul( frm_this );
-            frm_reg = astAnnul( frm_reg );
-            map_this = astAnnul( map_this );
-            map_reg = astAnnul( map_reg );
-            bcmap = astAnnul( bcmap );
-            cfrm = astAnnul( cfrm );
-            new = astAnnul( new );
-         }
-         bfrm = astAnnul( bfrm );
-         pset_new = astAnnul( pset_new );
-
-      }
-   }
-
-/* If an error has occurred, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-void PointListPoints( AstPointList *this, AstPointSet **pset, int *status) {
-/*
-*+
-*  Name:
-*     astPointListPoints
-
-*  Purpose:
-*     Return the defining points of a PointList.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     astPointListPoints( AstPointList *this, AstPointSet **pset )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns the axis values at the points defining the
-*     supplied PointList.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     pset
-*        Address of a location at which to return a pointer to a PointSet
-*        holding the points in the PointList, in the base Frame of the 
-*        encapsulated FrameSet. The returned Pointer should be annulled
-*        when no longer needed.
-
-*-
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Return a clone of the PointSet holding the points defining the PointList. */
-   *pset = astClone( ((AstRegion *) this)->points );
-
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     void astRegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Pointer to encapsulated Frame */
-   AstPointList *this;           /* Pointer to PointList structure */
-   AstPointSet *pset;            /* Pointer to PointSet defining the Region */
-   double **ptr;                 /* Pointer to PointSet data */
-   double *p;                    /* Pointer to next axis value */
-   double *lb;                   /* Pointer to lower limit array */
-   double *ub;                   /* Pointer to upper limit array */
-   double d;                     /* Axis offset from refernce value */
-   double p0;                    /* Reference axis value */
-   int ic;                       /* Axis index */
-   int ip;                       /* Point index */
-   int nb;                       /* Number of bytes to be copied */
-   int nc;                       /* No. of axes in base Frame */
-   int np;                       /* No. of points in PointSet */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the PointList structure. */
-   this = (AstPointList *) this_region;
-
-/* Calculate the number of bytes in each array. */
-   nb = sizeof( double )*(size_t) astGetNaxes( this );
-
-/* If the base Frame bounding box has not yet been found, find it now and
-   store it in the PointList structure. */
-   if( !this->lbnd || !this->ubnd ) {
-
-/* Allocate memory to store the bounding box in the PointList structure. */
-      lb = astMalloc( nb );
-      ub = astMalloc( nb );
-
-/* Get the axis values for the PointSet which defines the location and
-   extent of the region in the base Frame of the encapsulated FrameSet. */
-      pset = this_region->points;
-      ptr = astGetPoints( pset );
-      nc = astGetNcoord( pset );
-      np = astGetNpoint( pset );
-
-/* Get a pointer to the base Frame in the encaposulated FrameSet. */
-      frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Check pointers can be used safely. */
-      if( astOK ) {
-
-/* Find the bounds on each axis in turn. */ 
-         for( ic = 0; ic < nc; ic++ ) {
-
-/* We first find the max and min axis offsets from the first point. We
-   used astAxDistance to cater for the possbility that the Frame may be a
-   SkyFrame and thus have circular redundancy. */
-            p = ptr[ ic ] + 1;
-            p0 = p[ -1 ];
-            lb[ ic ] = 0.0;
-            ub[ ic ] = 0.0;
-            for( ip = 1; ip < np; ip++, p++ ) {
-               d = astAxDistance( frm, ic + 1, p0, *p );        
-               if( d < lb[ ic ] ) lb[ ic ] = d;
-               if( d > ub[ ic ] ) ub[ ic ] = d;
-            }
-
-/* Now convert these offsets to actual axis values. */
-            lb[ ic ] = astAxOffset( frm, ic + 1, p0, lb[ ic ] );
-            ub[ ic ] = astAxOffset( frm, ic + 1, p0, ub[ ic ] );
-
-         }
-      }
-
-/* Free resources */
-      frm = astAnnul( frm );   
-
-/* Store the pointers in the PointList structure. */
-      if( astOK ) {
-         this->lbnd = lb;
-         this->ubnd = ub;
-      } else {
-         this->lbnd = astFree( this->lbnd );
-         this->ubnd = astFree( this->ubnd );
-      }
-   }
-
-/* If the bounding box has been found succesfully, copy it into the supplied
-   arrays. */
-   if( astOK ) {
-      memcpy( lbnd, this->lbnd, nb );
-      memcpy( ubnd, this->ubnd, nb );
-   }
-   
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the accuracies which were
-*     supplied when the Region was created.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this->basemesh ) {
-      result = astClone( this->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* It is just a copy of the encapsulated PointSet. */
-      result = astCopy( this->points );
-
-/* Same the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-      if( astOK && result ) this->basemesh = astClone( result );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, 
-                               const int *axes, int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;         /* The base Frame in the supplied Region */
-   AstFrame *frm;          /* The base Frame in the returned Region */
-   AstPointSet *pset;      /* Holds axis values defining the supplied Region */
-   AstPointSet *pset_new;  /* Holds axis values defining the returned Region */
-   AstRegion *bunc;        /* The uncertainty in the supplied Region */
-   AstRegion *result;      /* Returned Region */
-   AstRegion *unc;         /* The uncertainty in the returned Region */
-   double **ptr;           /* Holds axis values defining the supplied Region */
-   double **ptr_new;       /* Holds axis values defining the returned Region */
-   double *p;              /* Pointer to next input axis value */
-   double *q;              /* Pointer to next output axis value */
-   int i;                  /* Index of axis within returned Region */
-   int j;                  /* Point index */
-   int npnt;               /* Number of points in PointList */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the encapsulated FrameSet. */
-   bfrm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Create a Frame by picking the selected axes from the base Frame of the
-   encapsulated FrameSet. */
-   frm = astPickAxes( bfrm, naxes, axes, NULL );
-
-/* Get the uncertainty Region (if any) within the base Frame of the supplied
-   Region, and select the required axes from it. If the resulting Object
-   is not a Region, annul it so that the returned Region will have no 
-   uncertainty. */
-   if( astTestUnc( this_region ) ) {
-      bunc = astGetUncFrm( this_region, AST__BASE );
-      unc = astPickAxes( bunc, naxes, axes, NULL );
-      bunc = astAnnul( bunc );
-
-      if( ! astIsARegion( unc ) ) unc = astAnnul( unc );
-
-   } else {
-      unc = NULL;
-   }
-
-/* Get pointers to the coordinate data in the parent Region structure. */
-   pset = this_region->points;
-   ptr = astGetPoints( pset );
-   npnt = astGetNpoint( pset );
-
-/* Create a PointSet to hold the points for the returned PointList. */
-   pset_new = astPointSet( npnt, naxes, "", status );
-
-/* Get pointers to its data. */
-   ptr_new = astGetPoints( pset_new );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Copy the point positions on the selected axes into the arrays allocated 
-   above. */
-      for( i = 0; i < naxes; i++ ) {
-         p = ptr[ axes[ i ] ];
-         q = ptr_new[ i ];
-         for( j = 0; j < npnt; j++ ) *(q++) = *(p++);
-      }
-
-/* Create the new PointList. */
-      result = (AstRegion *) astPointList( frm, pset_new, unc, "", status );
-   }
-
-/* Free resources */
-   frm = astAnnul( frm );      
-   bfrm = astAnnul( bfrm );      
-   if( unc ) unc = astAnnul( unc );
-   pset_new = astAnnul( pset_new );
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given PointList. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied PointList "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "this".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "this" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstPointList *pl;            /* Pointer to PointList holding supplied points */
-   AstPointList *this;          /* Pointer to the PointList structure. */
-   AstPointSet *pset2;          /* Supplied points masked by this PointList */
-   AstPointSet *pset3;          /* This PointList masked by supplied points */
-   double **ptr2;               /* Pointer to axis values in "pset2" */
-   double **ptr3;               /* Pointer to axis values in "pset3" */
-   double **ptr;                /* Pointer to axis values in "this" */
-   double *p;                   /* Pointer to next axis value to read */
-   int ic;                      /* Axis index */
-   int icurr;                   /* Index of original current Frame in "this" */
-   int ip;                      /* Point index */
-   int nc;                      /* No. of axes in Box base frame */
-   int neg_old;                 /* Original Negated flag for "this" */
-   int np;                      /* No. of supplied points */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Box structure. */
-   this = (AstPointList *) this_region;
-
-/* Temporarily ensure that the current Frame in "this" is the same as the
-   base Frame. We need to do this since the supplied points are in the
-   base Frame of "this", but the astTransform method below assumes
-   that it is transforming points in the current Frame of the Region. */
-   icurr = astGetCurrent( this_region->frameset );
-   astSetCurrent( this_region->frameset, AST__BASE );
-
-/* Get pointer to the supplied axis values, the number of points and the
-   number of axis values per point. */
-   ptr = astGetPoints( pset );   
-   np = astGetNpoint( pset );
-   nc = astGetNcoord( pset );
-
-/* All the supplied points should be within the supplied PointsList region
-   (given that "within" implies some tolerance). Transform the positions
-   using this PointList and check if any of the resulting points fell
-   outside this PointList. We need to ensure that the PointList is not
-   negated first. */
-   neg_old = astGetNegated( this );
-   astSetNegated( this, 0 );
-   pset2 = astTransform( this, pset, 1, NULL );
-   ptr2 = astGetPoints( pset2 );
-
-/* Check pointers can be used. */
-   if( astOK ) {
-
-/* Check there are no bad points (i.e. check that none of the points are
-   outside the supplied PointList). The algorithm used to do this depends
-   on whether we need to create an output mask. */
-      result = 1;
-      if( mask ) {
-
-/* Create the returned mask array. */
-         *mask = astMalloc( np );
-         if( astOK ) {
-
-/* Initialise the mask elements on the basis of the first axis values */
-            result = 1;
-            p = ptr2[ 0 ];
-            for( ip = 0; ip < np; ip++ ) {
-               if( *(p++) == AST__BAD ) {
-                  result = 0;
-                  (*mask)[ ip ] = 0;
-               } else {
-                  (*mask)[ ip ] = 1;
-               }
-            }
-
-/* Now check for bad values on other axes. */
-            for( ic = 1; ic < nc; ic++ ) {
-               p = ptr2[ ic ];
-               for( ip = 0; ip < np; ip++ ) {
-                  if( *(p++) == AST__BAD ) {
-                     result = 0;
-                     (*mask)[ ip ] = 0;
-                  }
-               }
-            }
-         }
-
-/* If no output mask is to be made, we can break out of the check as soon
-   as the first bad value is found. */
-      } else {
-         for( ic = 0; ic < nc && result; ic++ ){ 
-            p = ptr2[ ic ];
-            for( ip = 0; ip < np; ip++,p++ ){ 
-               if( *p == AST__BAD ) {
-                  result = 0;
-                  break;      
-               }
-            }
-         }
-      }
-
-/* If this check was passed, we perform a similar check in the opposite
-   direction: we create a new PointList from the supplied list of points,
-   and then we transform the points associated with the supplied PointList 
-   using the new PointList. This checks that all the points in the
-   supplied PointList are close to the supplied points. Create the new 
-   PointList holding the supplied points. */
-      if( result ) {
-         pl = astPointList( unc, pset, unc, "", status );
-
-/* Transform the points in "this" PointList using the new PointList as a
-   Mapping. */
-         pset3 = astTransform( pl, this_region->points, 1, NULL );
-         ptr3 = astGetPoints( pset3 );
-
-/* Check pointers can be used. */
-         if( astOK ) { 
-            for( ic = 0; ic < nc && result; ic++ ){ 
-               p = ptr3[ ic ];
-               for( ip = 0; ip < np; ip++,p++ ){ 
-                  if( *p == AST__BAD ) {
-                     result = 0;
-                     break;      
-                  }
-               }
-            }
-         }
-
-/* Free resources. */
-         pl = astAnnul( pl );
-         pset3 = astAnnul( pset3 );
-
-      }
-   }
-
-   pset2 = astAnnul( pset2 );
-
-/* Re-instate the original current Frame in "this". */
-   astSetCurrent( this_region->frameset, icurr );
-
-/* Re-instate the original Negated flag for "this". */
-   astSetNegated( this, neg_old );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, 
-                       int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     PointList member function (over-rides the astSetAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns an attribute value for a PointList, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     setting
-*        Pointer to a null-terminated string specifying the new
-*        attribute value.
-*/
-
-/* Local Variables: */
-   AstPointList *this;            /* Pointer to the PointList structure */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PointList structure. */
-   this = (AstPointList *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
-   specified. */
-   if ( MATCH( "listsize" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", 
-                status, setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     PointList method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to encapsulated Frame */
-   AstMapping *map;              /* Pointer to frameset Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstPointList *new2;           /* Pointer to simplified Region */
-   AstPointSet *pset1;           /* Original base Frame positions */
-   AstPointSet *pset2;           /* Current Frame Frame positions */
-   AstRegion *new;               /* Pointer to simplified Region */
-   AstRegion *this;              /* Pointer to original Region structure */
-   AstRegion *unc;               /* Pointer to new uncertainty Region */
-   double **ptr2;                /* Pointer to current Frame points */
-   int simpler;                  /* Has some simplication taken place? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-   new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-   simpler = ( new != this );
-
-/* Get the Mapping from base to current Frame. We can modify the PointList so 
-   that a UnitMap can be used. This is good because it means that the 
-   serialised PointList is simpler since the Dump function only needs to 
-   record one Frame instead of the whole FrameSet. */
-   map = astGetMapping( new->frameset, AST__BASE, AST__CURRENT );
-   if( !astIsAUnitMap( map ) ){
-
-/* Get a pointer to the current Region Frame */
-      fr = astGetFrame( this->frameset, AST__CURRENT );
-
-/* Get the PointSet which holds the base Frame positions defining this
-   PointList. */
-      pset1 = this->points;
-
-/* Transform the PointSet using this Mapping. */
-      pset2 = astTransform( map, pset1, 1, NULL );
-      ptr2 = astGetPoints( pset2 );
-
-/* Get the Region describing the positional uncertainty within the
-   supplied PointList, in its current Frame. */
-      unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Create a new PointList, and use it in place of the original. */
-      new2 = astPointList( fr, pset2, unc, "", status );
-      (void) astAnnul( new );
-      new = (AstRegion *) new2;
-      simpler = 1;
-
-/* Free resources. */
-      fr = astAnnul( fr );
-      pset2 = astAnnul( pset2 );
-      unc = astAnnul( unc );
-   }
-
-/* Free resources. */
-   map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-   if( simpler ){
-      astRegOverlay( new, this, 1 );
-      result = (AstMapping *) new;
-
-   } else {
-      new = astAnnul( new );
-      result = astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, 
-                       int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a PointList.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astTestAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate
-*     whether a value has been set for one of a PointList's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointList *this;            /* Pointer to the PointList structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the PointList structure. */
-   this = (AstPointList *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
-   class. If it does, then return zero. */
-   if ( !strcmp( attrib, "listsize" ) ){
-      result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a PointList to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     PointList member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a PointList and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region covered by the
-*     PointList. PointList inside the region are copied unchanged from input 
-*     to output.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the PointList.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *in_base;         /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *ps1;             /* Pointer to accumulation PointSet */
-   AstPointSet *ps2;             /* Pointer to accumulation PointSet */
-   AstPointSet *ps3;             /* Pointer for swapping PointSet pointers */
-   AstPointSet *pset_base;       /* PointList positions in "unc" base Frame */
-   AstPointSet *pset_reg;        /* Pointer to Region PointSet */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstRegion *this;              /* Pointer to the Region structure */
-   AstRegion *unc;               /* Pointer to uncertainty Region */
-   double **ptr1;                /* Pointer to mask pointer array */
-   double **ptr_base;            /* Pointer to axis values for "pset_base" */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *cen_orig;             /* Pointer to array holding original centre coords */
-   double *mask;                 /* Pointer to mask axis values */
-   int coord;                    /* Zero-based index for coordinates */
-   int ncoord_base;              /* No. of coordinates per base Frame point */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int npoint;                   /* No. of supplied input test points */
-   int nrp;                      /* No. of points in Region PointSet */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Avoid -Wall compiler warnings. */
-   ps1 = NULL;   
-   ps2 = NULL;   
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
-   from the current Frame in the encapsulated FrameSet (the Frame
-   represented by the Region), to the base Frame (the Frame in which the
-   Region is defined). */
-   in_base = astRegTransform( this, in, 0, NULL, NULL );
-
-/* The PointSet pointer returned above may be a clone of the "in"
-   pointer. If so take a copy of the PointSet so we can change it safely. */
-   if( in_base == in ) {
-      ps3 = astCopy( in_base );
-      (void) astAnnul( in_base );
-      in_base = ps3;
-      ps3 = NULL;
-   }
-
-/* Determine the numbers of points and coordinates per point from the base
-   Frame PointSet and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-   npoint = astGetNpoint( in_base );
-   ncoord_base = astGetNcoord( in_base );
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* Get the axis values for the PointSet which defines the location and
-   extent of the region in the base Frame, and check them. */
-   pset_reg = this->points;
-   nrp = astGetNpoint( pset_reg );
-   if( astGetNcoord( pset_reg ) != ncoord_base && astOK ) {
-      astError( AST__INTER, "astTransform(PointList): Illegal number of "
-                "coords (%d) in the Region - should be %d "
-                "(internal AST programming error).", status, astGetNcoord( pset_reg ),
-                ncoord_base );
-   }
-
-/* Get the base Frame uncertainty Region. Temporarily set its negated flag. */
-   unc = astGetUncFrm( this, AST__BASE );
-   astSetNegated( unc, 1 );
-
-/* Transform the PointList PointSet into the base Frame of the uncertainty
-   Region, and get pointers to the corresponding axis value. */
-   pset_base = astRegTransform( unc, pset_reg, 0, NULL, NULL );
-   ptr_base = astGetPoints( pset_base );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* Save the original base Frame centre coords of the uncertainty Region. */
-      cen_orig = astRegCentre( unc, NULL, NULL, 0, AST__BASE );
-
-/* We use the PointSet created above as the initial input to astTransform
-   below. Also indicate we currently have no output PointSet. This will
-   cause a new PointSet to be created on the first pass through the loop
-   below. */
-      ps1 = astClone( in_base );
-      ps2 = NULL;
-
-/* Loop round all the points in the PointList. */
-      for ( point = 0; point < nrp; point++ ) {
-
-/* Centre the uncertainty Region at this PointList position. Note, the
-   base Frame of the PointList should be the same as the current Frame
-   of the uncertainty Region. */
-         astRegCentre( unc, NULL, ptr_base, point, AST__BASE );
-
-/* Use the uncertainty Region to transform the supplied PointSet. This
-   will set supplied points bad if they are within the uncertainty Region
-   (since the uncertainty Region has been negated above). */
-         ps2 = astTransform( unc, ps1, 0, ps2 );
-
-/* Use the output PointSet created above as the input for the next
-   position. This causes bad points to be accumulated in the output
-   PointSet. */
-         ps3 = ps2;
-         ps2 = ps1;
-         ps1 = ps3;
-
-      }
-
-/* Re-instate the original centre coords of the uncertainty Region. */
-      astRegCentre( unc, cen_orig, NULL, 0, AST__BASE );
-      cen_orig = astFree( cen_orig );
-
-/* The ps1 PointSet will now be a copy of the supplied PointSet but with
-   positions set to bad if they are inside any of the re-centred uncertainty
-   Regions.  If this PointList has been negated, this is what we want so
-   we just transfer this bad position mask to the result PointSet. If this 
-   PointList has not been negated we need to invert the bad position
-   mask. Get a pointer to the first axis of the resulting PointSet. */
-      ptr1 = astGetPoints( ps1 );
-      if( astOK ) {
-         mask = ptr1[ 0 ];      
-
-/* Apply the mask to the returned PointSet, inverted if necessary. */
-         if( astGetNegated( this ) ) {
-            for ( point = 0; point < npoint; point++, mask++ ) {
-               if( *mask == AST__BAD ) {
-                  for( coord = 0; coord < ncoord_out; coord++ ) {
-                     ptr_out[ coord ][ point ] = AST__BAD;
-                  }
-               }
-            }                 
-
-         } else {
-            for ( point = 0; point < npoint; point++, mask++ ) {
-               if( *mask != AST__BAD ) {
-                  for( coord = 0; coord < ncoord_out; coord++ ) {
-                     ptr_out[ coord ][ point ] = AST__BAD;
-                  }
-               }
-            }                 
-         }
-      }
-   }
-
-/* Clear the negated flag for the uncertainty Region. */
-   astClearNegated( unc );
-
-/* Free resources */
-   in_base = astAnnul( in_base );
-   pset_base = astAnnul( pset_base );
-   unc = astAnnul( unc );
-   if( ps2 ) ps2 = astAnnul( ps2 );
-   if( ps1 ) ps1 = astAnnul( ps1 );
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     ListSize
-
-*  Purpose:
-*     Number of points in a PointList.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This is a read-only attribute giving the number of points in a
-*     PointList. This value is determined when the PointList is created.
-
-*  Applicability:
-*     PointList
-*        All PointLists have this attribute.
-*att--
-*/
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for PointList objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for PointList objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstPointList *in;             /* Pointer to input PointList */
-   AstPointList *out;            /* Pointer to output PointList */
-   int nb;                       /* Number of bytes */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PointLists. */
-   in = (AstPointList *) objin;
-   out = (AstPointList *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output PointList. */
-   out->lbnd = NULL;
-   out->ubnd = NULL;
-
-/* Copy dynamic memory contents */
-   if( in->lbnd && in->ubnd ) {
-      nb = sizeof( double )*astGetNaxes( in );
-      out->lbnd = astStore( NULL, in->lbnd, nb );
-      out->ubnd = astStore( NULL, in->ubnd, nb );
-   }
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for PointList objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for PointList objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPointList *this;                 /* Pointer to PointList */
-
-/* Obtain a pointer to the PointList structure. */
-   this = (AstPointList *) obj;
-
-/* Annul all resources. */
-   this->lbnd = astFree( this->lbnd );
-   this->ubnd = astFree( this->ubnd );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for PointList objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the PointList class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the PointList whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPointList *this;                 /* Pointer to the PointList structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PointList structure. */
-   this = (AstPointList *) this_object;
-
-/* Write out values representing the instance variables for the
-   PointList class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPointList and astCheckPointList functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PointList,Region)
-astMAKE_CHECK(PointList)
-
-AstPointList *astPointList_( void *frame_void, AstPointSet *points,
-                             AstRegion *unc, const char *options, 
-                             int *status, ...) {
-/*
-*+
-*  Name:
-*     astPointList
-
-*  Purpose:
-*     Create a PointList.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstPointList *astPointList( AstFrame *frame, AstPointSet *points,
-*                                 AstRegion *unc, const char *options, 
-*                                 int *status, ...) {
-
-*  Class Membership:
-*     PointList constructor.
-
-*  Description:
-*     This function implements the protected interface to the astPointList 
-*     constructor function, returning a true C pointer. The parameter list 
-*     differs from the public constructor, in that the positions are
-*     defined by a PointSet rather than an array of doubles.
-
-*  Parameters:
-*     frame
-*        A pointer to the Frame in which the region is defined. A deep
-*        copy is taken of the supplied Frame. This means that any
-*        subsequent changes made to the Frame using the supplied pointer
-*        will have no effect the Region.
-*     points
-*        A PointSet holding the physical coordinates of the points. 
-*     unc
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with each point in the PointList being 
-*        created. The uncertainty at any point in the PointList is found by 
-*        shifting the supplied "uncertainty" Region so that it is centred at 
-*        the point being considered. The area covered by the shifted 
-*        uncertainty Region then represents the uncertainty in the position. 
-*        The uncertainty is assumed to be the same for all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the bounding box of the 
-*        PointList being created.
-*        
-*        The uncertainty Region has two uses: 1) when the astOverlap
-*        function compares two Regions for equality the uncertainty Region 
-*        is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using astSimplify), the uncertainties are 
-*        used to determine if the transformed boundary can be accurately 
-*        represented by a specific shape of Region.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new PointList. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status 
-*        Pointer to the inherited status value.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new PointList.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPointList *new;            /* Pointer to new PointList */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the PointList, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPointList( NULL, sizeof( AstPointList ), !class_init, 
-                           &class_vtab, "PointList", frame, points, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PointList's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PointList. */
-   return new;
-}
-
-AstPointList *astPointListId_( void *frame_void, int npnt, int ncoord, int dim,
-                               const double *points, void *unc_void, 
-                               const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astPointList
-f     AST_POINTLIST
-
-*  Purpose:
-*     Create a PointList.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "pointlist.h"
-c     AstPointList *astPointList( AstFrame *frame, int npnt, int ncoord, int dim, 
-c                                 const double *points, AstRegion *unc,
-c                                 const char *options, ... )
-f     RESULT = AST_POINTLIST( FRAME, NPNT, COORD, DIM, POINTS, UNC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     PointList constructor.
-
-*  Description:
-*     This function creates a new PointList object and optionally initialises 
-*     its attributes.
-*
-*     A PointList object is a specialised type of Region which represents a 
-*     collection of points in a coordinate Frame.
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. A deep
-*        copy is taken of the supplied Frame. This means that any
-*        subsequent changes made to the Frame using the supplied pointer
-*        will have no effect the Region.
-c     npnt
-f     NPNT = INTEGER (Given)
-*        The number of points in the Region. 
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinates being supplied for each point. This
-*        must equal the number of axes in the supplied Frame, given by 
-*        its Naxes attribute.
-c     dim
-f     DIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "points"
-f        The number of elements along the first dimension of the POINTS
-*        array (which contains the point coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-c        given should not be less than "npnt".
-f        given should not be less than NPNT.
-c     points
-f     POINTS( DIM, NCOORD ) = DOUBLE PRECISION (Given)
-c        The address of the first element of a 2-dimensional array of 
-c        shape "[ncoord][dim]" giving the physical coordinates of the 
-c        points. These should be stored such that the value of coordinate 
-c        number "coord" for point number "pnt" is found in element 
-c        "in[coord][pnt]".
-f        A 2-dimensional array giving the physical coordinates of the
-f        points. These should be stored such that the value of coordinate 
-f        number COORD for point number PNT is found in element IN(PNT,COORD).
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the uncertainties 
-*        associated with each point in the PointList being created. The 
-*        uncertainty at any point in the PointList is found by shifting the 
-*        supplied "uncertainty" Region so that it is centred at the point 
-*        being considered. The area covered by the shifted uncertainty Region 
-*        then represents the uncertainty in the position. The uncertainty is 
-*        assumed to be the same for all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the bounding box of the 
-*        PointList being created.
-*        
-*        The uncertainty Region has two uses: 1) when the 
-c        astOverlap
-f        AST_OVERLAP 
-*        function compares two Regions for equality the uncertainty
-*        Region is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using 
-c        astSimplify),
-f        AST_SIMPLIFY),
-*        the uncertainties are used to determine if the transformed boundary 
-*        can be accurately represented by a specific shape of Region.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new PointList. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new PointList. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPointList()
-f     AST_POINTLIST = INTEGER
-*        A pointer to the new PointList.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frame;          /* Pointer to Frame structure */
-   AstPointList *new;        /* Pointer to new PointList */
-   AstPointSet *pset;        /* Pointer to PointSet holding points */
-   AstRegion *unc;           /* Pointer to Region structure */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-   const double *q;          /* Pointer to next supplied axis value */
-   double **ptr;             /* Pointer to data in pset */
-   double *p;                /* Pointer to next PointSet axis value */
-   int *status;              /* Pointer to inherited status value */
-   int i;                    /* Axis index */
-   int j;                    /* Point index */
-   va_list args;             /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Create a PointSet and store the supplied points in it. */
-   pset = astPointSet( npnt, ncoord , "", status );
-   ptr = astGetPoints( pset );
-   if( astOK ) {
-      for( i = 0; i < ncoord; i++ ) {
-         p = ptr[ i ];
-         q = points + i*dim;
-         for( j = 0; j < npnt; j++ ) *(p++) = *(q++);
-      }
-   }
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the PointList, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPointList( NULL, sizeof( AstPointList ), !class_init, 
-                           &class_vtab, "PointList", frame, pset, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PointList's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Free resources. */
-   pset = astAnnul( pset );
-
-/* Return an ID value for the new PointList. */
-   return astMakeId( new );
-}
-
-AstPointList *astInitPointList_( void *mem, size_t size, int init, 
-                                 AstPointListVtab *vtab, const char *name, 
-                                 AstFrame *frame, AstPointSet *points, 
-                                 AstRegion *unc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPointList
-
-*  Purpose:
-*     Initialise a PointList.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstPointList *astInitPointList( void *mem, size_t size, int init, 
-*                                     AstPointListVtab *vtab, const char *name,
-*                                     AstFrame *frame, AstPointSet *points, 
-*                                     AstRegion *unc, int *status )
-
-*  Class Membership:
-*     PointList initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new PointList object. It allocates memory (if necessary) to accommodate
-*     the PointList plus any additional data associated with the derived class.
-*     It then initialises a PointList structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a PointList at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the PointList is to be initialised.
-*        This must be of sufficient size to accommodate the PointList data
-*        (sizeof(PointList)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the PointList (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the PointList
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the PointList's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new PointList.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     points
-*        A PointSet containing the Points for the PointList.
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points in the new PointList being 
-*        initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal 
-*        to 1.0E-6 of the dimensions of the new PointList's bounding box are 
-*        used. If an uncertainty Region is supplied, it must be either a Box, 
-*        a Circle or an Ellipse, and its encapsulated Frame must be related
-*        to the Frame supplied for parameter "frame" (i.e. astConvert
-*        should be able to find a Mapping between them). Two positions 
-*        the "frame" Frame are considered to be co-incident if their 
-*        uncertainty Regions overlap. The centre of the supplied
-*        uncertainty Region is immaterial since it will be re-centred on the 
-*        point being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new PointList.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPointList *new;        /* Pointer to new PointList */
-   int ncoord;               /* No. of axes in PointSet */
-   int nin;                  /* No. of axes in Frame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPointListVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the number of axis values per position is correct. */
-   nin = astGetNaxes( frame );
-   ncoord = astGetNcoord( points );
-   if( nin != ncoord ) {
-      astError( AST__NCPIN, "astInitPointList(): Bad number of coordinate "
-                "values (%d).", status, ncoord );
-      astError( AST__NCPIN, "The %s given requires %d coordinate value(s) for "
-                "each input point.", status, astGetClass( frame ), nin );
-   }
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the PointList structure, allocating memory if necessary. */
-   if( astOK ) {
-      new = (AstPointList *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab,
-                                            name, frame, points, unc );
-      if ( astOK ) {
-
-/* Initialise the PointList data. */
-/* ------------------------------ */
-         new->lbnd = NULL;
-         new->ubnd = NULL;
-
-/* If an error occurred, clean up by deleting the new PointList. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new PointList. */
-   return new;
-}
-
-AstPointList *astLoadPointList_( void *mem, size_t size, AstPointListVtab *vtab, 
-                                 const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPointList
-
-*  Purpose:
-*     Load a PointList.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointlist.h"
-*     AstPointList *astLoadPointList( void *mem, size_t size, AstPointListVtab *vtab, 
-*                                     const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     PointList loader.
-
-*  Description:
-*     This function is provided to load a new PointList using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     PointList structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a PointList at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the PointList is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        PointList data (sizeof(PointList)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the PointList (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the PointList structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPointList) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new PointList. If this is NULL, a pointer
-*        to the (static) virtual function table for the PointList class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "PointList" is used instead.
-
-*  Returned Value:
-*     A pointer to the new PointList.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPointList *new;              /* Pointer to the new PointList */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this PointList. In this case the
-   PointList belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPointList );
-      vtab = &class_vtab;
-      name = "PointList";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPointListVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built PointList. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "PointList" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* If an error occurred, clean up by deleting the new PointList. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new PointList pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-int astGetListSize_( AstPointList *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,PointList,GetListSize))( this, status );
-}
-void astPointListPoints_( AstPointList *this, AstPointSet **pset, int *status) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,PointList,PointListPoints))( this, pset, status );
-   return;
-}
-
diff --git a/ast-5.3-1/pointlist.h b/ast-5.3-1/pointlist.h
deleted file mode 100644
index 41dca4e..0000000
--- a/ast-5.3-1/pointlist.h
+++ /dev/null
@@ -1,239 +0,0 @@
-#if !defined( POINTLIST_INCLUDED ) /* Include this file only once */
-#define POINTLIST_INCLUDED
-/*
-*+
-*  Name:
-*     pointlist.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the PointList class.
-
-*  Invocation:
-*     #include "pointlist.h"
-
-*  Description:
-*     This include file defines the interface to the PointList class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The PointList class implements a Region which represents a collection
-*     of points in a Frame.
-
-*  Inheritance:
-*     The PointList class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-AUG-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PointList structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPointList {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;          /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *lbnd;              /* Lower axis limits of bounding box */
-   double *ubnd;              /* Upper axis limits of bounding box */
-} AstPointList;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPointListVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* GetListSize)( AstPointList *, int * );
-   void (* PointListPoints)( AstPointList *, AstPointSet **, int * );
-} AstPointListVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstPointListGlobals {
-   AstPointListVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstPointListGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPointListGlobals_( AstPointListGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PointList)          /* Check class membership */
-astPROTO_ISA(PointList)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPointList *astPointList_( void *, AstPointSet *, AstRegion *, const char *, int *, ...);
-#else
-AstPointList *astPointListId_( void *, int, int, int, const double *, AstRegion *, const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPointList *astInitPointList_( void *, size_t, int, AstPointListVtab *, 
-                                 const char *, AstFrame *, AstPointSet *, 
-                                 AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitPointListVtab_( AstPointListVtab *, const char *, int * );
-
-/* Loader. */
-AstPointList *astLoadPointList_( void *, size_t, AstPointListVtab *,
-                                 const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-int astGetListSize_( AstPointList *, int * );
-void astPointListPoints_( AstPointList *, AstPointSet **, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPointList(this) astINVOKE_CHECK(PointList,this,0)
-#define astVerifyPointList(this) astINVOKE_CHECK(PointList,this,1)
-
-/* Test class membership. */
-#define astIsAPointList(this) astINVOKE_ISA(PointList,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPointList astINVOKE(F,astPointList_)
-#else
-#define astPointList astINVOKE(F,astPointListId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPointList(mem,size,init,vtab,name,frame,points,unc) \
-astINVOKE(O,astInitPointList_(mem,size,init,vtab,name,frame,points,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPointListVtab(vtab,name) astINVOKE(V,astInitPointListVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadPointList(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPointList_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPointList to validate PointList pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astGetListSize(this) \
-astINVOKE(V,astGetListSize_(astCheckPointList(this),STATUS_PTR))
-#define astPointListPoints(this,pset) \
-astINVOKE(V,astPointListPoints_(astCheckPointList(this),pset,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/pointset.c b/ast-5.3-1/pointset.c
deleted file mode 100644
index 9b6e8c8..0000000
--- a/ast-5.3-1/pointset.c
+++ /dev/null
@@ -1,2976 +0,0 @@
-/*
-*  Name:
-*     pointset.c
-
-*  Purpose:
-*     Implement the PointSet class.
-
-*  Description:
-*     This file implements the PointSet class. For a description of
-*     the class and its interface, see the .h file of the same name.
-
-*  Inheritance:
-*     The PointSet class inherits from the Object class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     1-FEB-1996 (RFWS):
-*        Original version.
-*     27-SEP-1996 (RFWS):
-*        Added external interface and I/O facilities.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitPointSetVtab
-*        method.
-*     9-SEP-2004 (DSB):
-*        Added astPermPoints.
-*     5-OCT-2004 (DSB):
-*        Bug fix in astLoadPointSet - npoint was used as size for new array
-*        of pointers (changed to ncoord).
-*     19-OCT-2004 (DSB):
-*        Added astSetNpoint.
-*     2-NOV-2004 (DSB):
-*        - Do not write out AST__BAD axis values in the Dump function.
-*        - Override astEqual method.
-*        - Add protected PointAccuracy attribute.
-*     7-JAN-2005 (DSB):
-*        Added astAppendPoints.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     22-FEB-2006 (DSB):
-*        Avoid allocating memory for "acc" unless needed.
-*     1-MAY-2009 (DSB):
-*        Added astBndPoints.
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS PointSet
-
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     MAKE_CLEAR(attr,component,assign)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstPointSet *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstPointSet *this, int axis )
-*
-*     which implement a method for clearing a single value in a specified 
-*     multi-valued attribute for an axis of a PointSet. The "axis" value
-*     must be in the range 0 to (ncoord-1).
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. PointAccuracy in "astClearPointAccuracy").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= this->ncoord ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astClear" #attr, astGetClass( this ), \
-                axis + 1, this->ncoord ); \
-\
-/* Assign the "clear" value. */ \
-   } else if( this->component ){ \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,PointSet,Clear##attr))( this, axis, status ); \
-}   
-
-
-/*
-*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     MAKE_GET(attr,type,bad_value,assign)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstPointSet *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( AstPointSet *this, int axis )
-*
-*     which implement a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a PointSet. The "axis" value
-*     must be in the range 0 to (ncoord-1).
-
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. PointAccuracy in "astGetPointAccuracy").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstPointSet *this, int axis, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */ \
-   result = bad_value; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= this->ncoord ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astGet" #attr, astGetClass( this ), \
-                axis + 1, this->ncoord ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attr##_( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,PointSet,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute 
-*     for a PointSet.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     MAKE_SET(attr,type,component,assign,null)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstPointSet *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstPointSet *this, int axis, <Type> value )
-*
-*     which implement a method for setting a single value in a specified
-*     multi-valued attribute for a PointSet. The "axis" value must be in 
-*     the range 0 to (ncoord-1).
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. PointAccuracy in "astSetPointAccuracy").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      null
-*         The value to initialise newly created array elements to.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,null) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstPointSet *this, int axis, type value, int *status ) { \
-   int i; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= this->ncoord ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astSet" #attr, astGetClass( this ), \
-                axis + 1, this->ncoord ); \
-\
-/* Store the new value in the structure component. */ \
-   } else { \
-      if( !this->component ){ \
-         this->component = astMalloc( this->ncoord*sizeof( type ) ); \
-         for( i = 0; i < this->ncoord; i++ ) { \
-            this->component[ i ] = null; \
-         } \
-      } \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstPointSet *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,PointSet,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if a single value has been set in a 
-*     multi-valued attribute for a class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     MAKE_TEST(attr,assign)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstPointSet *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstPointSet *this, int axis )
-*
-*     which implement a method for testing if a single value in a specified 
-*     multi-valued attribute has been set for a class. The "axis" value
-*     must be in the range 0 to (ncoord-1).
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. PointAccuracy in "astTestPointAccuracy").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value. This can use the string "axis" to represent the zero-based
-*         index of the value within the attribute.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstPointSet *this, int axis, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-   result= 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= this->ncoord ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astTest" #attr, astGetClass( this ), \
-                axis + 1, this->ncoord ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstPointSet *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,PointSet,Test##attr))( this, axis, status ); \
-}
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PointSet)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PointSet,Class_Init)
-#define class_vtab astGLOBAL(PointSet,Class_Vtab)
-#define getattrib_buff astGLOBAL(PointSet,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPointSetVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPointSet *astPointSetId_( int, int, const char *, int *, ...);
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double **GetPoints( AstPointSet *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetNcoord( const AstPointSet *, int * );
-static int GetNpoint( const AstPointSet *, int * );
-static int GetObjSize( AstObject *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static AstPointSet *AppendPoints( AstPointSet *, AstPointSet *, int * );
-static void BndPoints( AstPointSet *, double *, double *, int * );
-static void CheckPerm( AstPointSet *, const int *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void PermPoints( AstPointSet *, int, const int[], int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetPoints( AstPointSet *, double **, int * );
-static void SetNpoint( AstPointSet *, int, int * );
-static void SetSubPoints( AstPointSet *, int, int, AstPointSet *, int * );
-
-static double GetPointAccuracy( AstPointSet *, int, int * );
-static int TestPointAccuracy( AstPointSet *, int, int * );
-static void ClearPointAccuracy( AstPointSet *, int, int * );
-static void SetPointAccuracy( AstPointSet *, int, double, int * );
-
-/* Member functions. */
-/* ================= */
-static AstPointSet *AppendPoints( AstPointSet *this, AstPointSet *that, int *status ) {
-/*
-*+
-*  Name:
-*     astAppendPoints
-
-*  Purpose:
-*     Append one PointSet to another.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     AstPointSet *astAppendPoints( AstPointSet *this, AstPointSet *that ) 
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function creates a new PointSet containing all the points in
-*     "this" followed by all the points in "that".
-
-*  Parameters:
-*     this
-*        Pointer to the first PointSet.
-*     that
-*        Pointer to the second PointSet.
-
-*  Returned Value:
-*     Pointer to the new PointSet.
-
-*  Notes:
-*     - Axis accuracies are copied from "this".
-*     - The Ncoord attribute of the two PointSets must match.
-*     - NULL will be returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;
-   double **ptr;
-   double **ptr1;
-   double **ptr2;
-   int ic;
-   int n1;
-   int n2;
-   int ncoord; 
-   size_t nb2;
-   size_t nb1;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check the two PointSets have the same Ncoord value. */
-   ncoord = astGetNcoord( this );
-   if( ncoord != astGetNcoord( that ) ) {
-      astError( AST__NPTIN, "astAppendPoints(%s): Number of coordinates "
-                "per point differ in the two supplied PointSets.", status,
-                astGetClass( this ) );
-
-/* Calculate the new size for the PointSet. */
-   } else {
-      n1 = astGetNpoint( this );
-      n2 = astGetNpoint( that );
-
-/* Create the new PointSet and get pointers to its data. */
-      result = astPointSet( n1 + n2, ncoord, "", status );
-      ptr1 = astGetPoints( this );
-      ptr2 = astGetPoints( that );
-      ptr = astGetPoints( result );
-      if( astOK ) {
-
-/* Copy the axis values for each coordinate in turn. */
-         nb1 = sizeof( double )*(size_t) n1;
-         nb2 = sizeof( double )*(size_t) n2;
-         for( ic = 0; ic < ncoord; ic++ ) {
-            memcpy( ptr[ ic ], ptr1[ ic ], nb1 );
-            memcpy( ptr[ ic ] + n1, ptr2[ ic ], nb2 );
-         }
-
-/* Copy any axis accuracies from "this". */
-         result->acc = this->acc ? 
-                  astStore( NULL, this->acc, sizeof( double )*(size_t) ncoord )
-                  : NULL;
-      }
-   }
-
-/* Annul the result if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void BndPoints( AstPointSet *this, double *lbnd, double *ubnd, int *status ) {
-/*
-*+
-*  Name:
-*     astBndPoints
-
-*  Purpose:
-*     Find the axis bounds of the points in a PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astBndPoints( AstPointSet *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function returns the lower and upper limits of the axis values
-*     of the points in a PointSet.
-
-*  Parameters:
-*     this
-*        Pointer to the first PointSet.
-*     lbnd
-*        Pointer to an array in which to return the lowest value for
-*        each coordinate. The length of the array should equal the number
-*        returned by astGetNcoord.
-*     ubnd
-*        Pointer to an array in which to return the highest value for
-*        each coordinate. The length of the array should equal the number
-*        returned by astGetNcoord.
-
-*-
-*/
-
-/* Local Variables: */
-   double **ptr;
-   double *p;
-   double lb;
-   double ub;
-   int ic;
-   int ip;
-   int nc;     
-   int np;     
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get pointers to the PointSet data, the number of axes adn the number
-   of points. */
-   ptr = astGetPoints( this );
-   nc = astGetNcoord( this );
-   np = astGetNpoint( this );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Loop round each axis. */
-      for( ic = 0; ic < nc; ic++ ) {
-
-/* Initialise the bounds for this axis. */
-         lb = AST__BAD;
-         ub = AST__BAD;
-
-/* Search for the first good point. Use it to initialise the bounds and
-   break out of the loop. */
-         p = ptr[ ic ];
-         for( ip = 0; ip < np; ip++,p++ ) {
-            if( *p != AST__BAD ) {
-               lb = ub = *p;
-               break;
-            }
-         }
-
-/* Search through the remaining points. Update the bounds if the axis 
-   value is good. */
-         for( ; ip < np; ip++,p++ ) {
-            if( *p != AST__BAD ) {
-               if( *p < lb ) {
-                  lb = *p;
-               } else if( *p > ub ) {
-                  ub = *p;
-               }
-            }
-         }
-
-/* Store the returned bounds. */
-         lbnd[ ic ] = lb;
-         ubnd[ ic ] = ub;
-      }
-   }
-}
-
-static void CheckPerm( AstPointSet *this, const int *perm, const char *method, int *status ) {
-/*
-*+
-*  Name:
-*     astCheckPerm
-
-*  Purpose:
-*     Check that an array contains a valid permutation.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astCheckPerm( AstPointSet *this, const int *perm, const char *method )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function checks the validity of a permutation array that
-*     will be used to permute the order of a PointSet's axes. If the
-*     permutation specified by the array is not valid, an error is
-*     reported and the global error status is set. Otherwise, the
-*     function returns without further action.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     perm
-*        Pointer to an array of integers with the same number of
-*        elements as there are axes in the PointSet. For each axis, the
-*        corresponding integer gives the (zero based) axis index to be
-*        used to identify the axis values for that axis (using the
-*        un-permuted axis numbering). To be valid, the integers in
-*        this array should therefore all lie in the range zero to
-*        (ncoord-1) inclusive, where "ncoord" is the number of PointSet
-*        axes, and each value should occur exactly once.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate a permutation array. This method name is used
-*        solely for constructing error messages.
-
-*  Notes:
-*     - Error messages issued by this function refer to the external
-*     (public) numbering system used for axes (which is one-based),
-*     whereas zero-based axis indices are used internally.
-*-
-*/
-
-/* Local Variables: */
-   int *there;                   /* Pointer to temporary array */
-   int coord;                     /* Loop counter for axes */
-   int ncoord;                   /* Number of PointSet axes */
-   int valid;                    /* Permutation array is valid? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   valid = 1;
-
-/* Obtain the number of PointSet axes and allocate a temporary array of 
-   integers with the same number of elements. */
-   ncoord = astGetNcoord( this );
-   there = astMalloc( sizeof( int ) * (size_t) ncoord );
-   if ( astOK ) {
-
-/* Initialise the temporary array to zero. */
-      for ( coord = 0; coord < ncoord; coord++ ) there[ coord ] = 0;
-
-/* Scan the permutation array, checking that each permuted axis index it
-   contains is within the correct range. Note an error and quit checking
-   if an invalid value is found. */
-      for ( coord = 0; coord < ncoord; coord++ ) {
-         if ( ( perm[ coord ] < 0 ) || ( perm[ coord ] >= ncoord ) ) {
-            valid = 0;
-            break;
-
-/* Use the temporary array to count how many times each valid axis index
-   occurs. */
-	 } else {
-            there[ perm[ coord ] ]++;
-	 }
-      }
-
-/* If all the axis indices were within range, check to ensure that each value
-   occurred only once. */
-      if ( valid ) {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-
-/* Note an error and quit checking if any value did not occur exactly once. */
-            if ( there[ coord ] != 1 ) {
-               valid = 0;
-               break;
-	    }
-	 }
-      }
-   }
-
-/* Free the temporary array. */
-   there = astFree( there );
-
-/* If an invalid permutation was detected and no other error has
-   occurred, then report an error (note we convert to one-based axis
-   numbering in the error message). */
-   if ( !valid && astOK ) {
-      astError( AST__PRMIN, "%s(%s): Invalid coordinate permutation array.", status,
-                method, astGetClass( this ) );
-      astError( AST__PRMIN, "Each coordinate index should lie in the range 1 to %d "
-                "and should occur only once.", status, ncoord );
-   }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a PointSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PointSet member function (over-rides the astClearAttrib
-*     protected method inherited from the Object class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     PointSet, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPointSet *this;            /* Pointer to the PointSet structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PointSet structure. */
-   this = (AstPointSet *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
-   class. If it does, then report an error. */
-   if ( !strcmp( attrib, "ncoord" ) ||
-        !strcmp( attrib, "npoint" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two PointSets are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     PointSet member function (over-rides the astEqual protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two PointSets are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first PointSet.
-*     that
-*        Pointer to the second PointSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the PointSets are equivalent, zero otherwise.
-
-*  Notes:
-*     - The two PointSets are considered equivalent if they have the same
-*     number of points, the same number of axis values per point, and the 
-*     same axis values to within the absolute tolerance specified by the
-*     Accuracy attribute of the two PointSets.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local constants: */
-#define SMALL sqrt(DBL_MIN)
-
-/* Local Variables: */
-   AstPointSet *that;         /* Pointer to the second PointSet structure */
-   AstPointSet *this;         /* Pointer to the first PointSet structure */
-   double **ptr_that;         /* Pointer to axis values in second PointSet */
-   double **ptr_this;         /* Pointer to axis values in first PointSet */
-   double *p_that;            /* Pointer to next axis value in second PointSet */
-   double *p_this;            /* Pointer to next axis value in first PointSet */
-   double acc1;               /* Absolute accuracy for 1st PointSet axis value */
-   double acc2;               /* Absolute accuracy for 2nd PointSet axis value */
-   double acc;                /* Combined absolute accuracy */
-   double acc_that;           /* PointAccuracy attribute for 2nd PointSet */
-   double acc_this;           /* PointAccuracy attribute for 1st PointSet */
-   int ic;                    /* Axis index */
-   int ip;                    /* Point index */
-   int nc;                    /* No. of axis values per point */
-   int np;                    /* No. of points in each PointSet */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Object class. This checks
-   that the Objects are both of the same class (amongst other things). */
-   if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two PointSet structures. */
-      this = (AstPointSet *) this_object;
-      that = (AstPointSet *) that_object;
-
-/* Check the number of points and the number of axis values per point are
-   equal in the two PointSets. */
-      np = astGetNpoint( this );
-      nc = astGetNcoord( this );
-      if( np == astGetNpoint( that ) && nc == astGetNcoord( that ) ) {
-
-/* Get pointers to the axis values.*/
-         ptr_this = astGetPoints( this );
-         ptr_that = astGetPoints( that );
-         if( astOK ) {
-
-/* Assume the PointSets are equal until proven otherwise. */
-            result = 1;
-
-/* Loop round each axis, until we find a difference. */
-            for( ic = 0; ic < nc && result; ic++ ) {
-
-/* Get pointers to the next value for this axis. */
-               p_this = ptr_this[ ic ];
-               p_that = ptr_that[ ic ];
-
-/* Get the absolute accuracies for this axis. The default value for this
-   attribute is AST__BAD. */
-               acc_this = astGetPointAccuracy( this, ic );
-               acc_that = astGetPointAccuracy( that, ic );
-
-/* If both accuracies are available, combine them in quadrature. */
-               if( acc_this != AST__BAD && acc_that != AST__BAD ) {
-                  acc = sqrt( acc_this*acc_this + acc_that*acc_that );
-
-/* Loop round all points on this axis */
-                  for( ip = 0; ip < np; ip++, p_this++, p_that++ ){
-
-/* If either value is bad we do not need to compare values. */
-                     if( *p_this == AST__BAD || *p_that == AST__BAD ) {
-
-/* If one value is bad and one is good, they differ, so break. If both
-   values are bad they are equal so we continue. */
-                        if( *p_this != AST__BAD || *p_that != AST__BAD ) {
-                           result = 0;
-                           break;
-                        }
-
-/* Otherwise (if both axis values are good), compare axis values, and break if 
-   they differ by more than the absolute accuracy. */
-                     } else if( fabs( *p_this - *p_that ) > acc ) {
-                        result = 0;
-                        break;
-                     }
-                  }
-
-/* If either accuracy is unavailable, we use a default relative accuracy. */
-               } else {
-
-/* Loop round all points on this axis */
-                  for( ip = 0; ip < np; ip++, p_this++, p_that++ ){
-
-/* If either value is bad we do not need to compare values. */
-                     if( *p_this == AST__BAD || *p_that == AST__BAD ) {
-
-/* If one value is bad and one is good, they differ, so break. If both
-   values are bad they are equal so we continue. */
-                        if( *p_this != AST__BAD || *p_that != AST__BAD ) {
-                           result = 0;
-                           break;
-                        }
-
-/* Otherwise (if both axis values are good), find the absolute error for
-   both values. */
-                     } else {
-
-                        if( acc_this == AST__BAD ) {
-                           acc1 = fabs(*p_this)*DBL_EPSILON;
-                           if( acc1 < SMALL ) acc1 = SMALL;
-                           acc1 *= 1.0E3;
-                        } else {
-                           acc1 = acc_this;
-                        }
-
-                        if( acc_that == AST__BAD ) {
-                           acc2 = fabs(*p_that)*DBL_EPSILON;
-                           if( acc2 < SMALL ) acc2 = SMALL;
-                           acc2 *= 1.0E3;
-                        } else {
-                           acc2 = acc_that;
-                        }
-
-/* Combine them in quadrature. */
-                        acc = sqrt( acc1*acc1 + acc2*acc2 );
-
-/* Compare axis values, and break if they differ by more than the
-   absolute accuracy. */
-                        if( fabs( *p_this - *p_that ) > acc ) {
-                           result = 0;
-                           break;
-                        }
-                     }
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-#undef SMALL
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a PointSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PointSet member function (over-rides the protected astGetAttrib
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a PointSet, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the PointSet, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the PointSet. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstPointSet *this;            /* Pointer to the PointSet structure */
-   const char *result;           /* Pointer value to return */
-   int ncoord;                   /* Ncoord attribute value */
-   int npoint;                   /* Npoint attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the PointSet structure. */
-   this = (AstPointSet *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Ncoord. */
-/* ------- */
-   if ( !strcmp( attrib, "ncoord" ) ) {
-      ncoord = astGetNcoord( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ncoord );
-         result = getattrib_buff;
-      }
-
-/* Npoint. */
-/* ------- */
-   } else if ( !strcmp( attrib, "npoint" ) ) {
-      npoint = astGetNpoint( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", npoint );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     PointSet member function (over-rides the astGetObjSize protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied PointSet,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *this;         /* Pointer to PointSet structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the PointSet structure. */
-   this = (AstPointSet *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astTSizeOf( this->ptr );
-   result += astTSizeOf( this->values );
-   result += astTSizeOf( this->acc );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetNcoord( const AstPointSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNcoord
-
-*  Purpose:
-*     Get the number of coordinate values per point from a PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     int astGetNcoord( const AstPointSet *this )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function returns the number of coordinate values per point (1 or
-*     more) for a PointSet.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-
-*  Returned Value:
-*     The number of coordinate values per point.
-
-*  Notes:
-*     -  A value of zero is returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the number of coordinate values. */
-   return this->ncoord;
-}
-
-static int GetNpoint( const AstPointSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetNpoint
-
-*  Purpose:
-*     Get the number of points in a PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     int astGetNpoint( const AstPointSet *this )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function returns the number of points (1 or more) in a PointSet.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-
-*  Returned Value:
-*     The number of points.
-
-*  Notes:
-*     -  A value of zero is returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Return the number of points. */
-   return this->npoint;
-}
-
-static double **GetPoints( AstPointSet *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetPoints
-
-*  Purpose:
-*     Get a pointer for the coordinate values associated with a PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     double **astGetPoints( AstPointSet *this )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function returns a pointer which grants access to the coordinate
-*     values associated with a PointSet. If the PointSet has previously had
-*     coordinate values associated with it, this pointer will identify these
-*     values. Otherwise, it will point at a newly-allocated region of memory
-*     (associated with the PointSet) in which new coordinate values may be
-*     stored.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-
-*  Returned Value:
-*     A pointer to an array of type double* with ncoord elements (where ncoord
-*     is the number of coordinate values per point). Each element of this array
-*     points at an array of double, of size npoint (where npoint is the number
-*     of points in the PointSet), containing the values of that coordinate for
-*     each point in the set. Hence, the value of the i'th coordinate for the
-*     j'th point (where i and j are counted from zero) is given by ptr[i][j]
-*     where ptr is the returned pointer value.
-
-*  Notes:
-*     -  The returned pointer points at an array of pointers allocated
-*     internally within the PointSet. The values in this array may be changed
-*     by the caller, who is reponsible for ensuring that they continue to
-*     point at valid arrays of coordinate values.
-*     -  No attempt should be made to de-allocate memory allocated by a
-*     PointSet to store coordinate values or pointers to them. This memory
-*     will be freed when the PointSet is deleted.
-*     -  No count is kept of the number of pointers issued for the PointSet
-*     coordinate values. The caller must keep track of these.
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   int i;                        /* Loop counter for coordinates */
-   int nval;                     /* Number of values to be stored */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* If the PointSet has an existing array of pointers (which point at coordinate
-   values), we will simply return a pointer to it. Otherwise, we must allocate
-   space to hold new coordinate values. */
-   if( !this->ptr ) {
-
-/* Determine the number of coordinate values to be stored and allocate memory
-   to hold them, storing the pointer to this values array in the PointSet
-   structure. */
-      nval = this->npoint * this->ncoord;
-      this->values = (double *) astMalloc( sizeof( double ) * (size_t) nval );
-
-#ifdef DEBUG
-      for( i = 0; i < nval; i++ ) this->values[ i ] = 0.0;
-#endif
-
-/* If OK, also allocate memory for the array of pointers into this values
-   array, storing a pointer to this pointer array in the PointSet structure. */
-      if ( astOK ) {
-         this->ptr = (double **) astMalloc( sizeof( double * )
-                                            * (size_t) this->ncoord );
-
-/* If OK, initialise the pointer array to point into the values array. */
-         if ( astOK ) {
-            for ( i = 0; i < this->ncoord; i++ ) {
-               this->ptr[ i ] = this->values + ( i * this->npoint );
-            }
-
-/* If we failed to allocate the pointer array, then free the values array. */
-         } else {
-            this->values = (double *) astFree( (void *) this->values );
-         }
-      }
-
-#ifdef DEBUG
-   } else {
-
-/* Check for bad values */
-      if( this->values ) {
-         int i, j;
-         for( i = 0; astOK && i < this->ncoord; i++ ) {
-            for( j = 0; j < this->npoint; j++ ) {
-               if( !finite( (this->ptr)[ i ][ j ] ) ) {
-                  astError( AST__INTER, "astGetPoints(PointSet): Non-finite "
-                            "axis value returned.", status);
-                  break;
-               }
-            }
-         }
-      }
-
-#endif
-   }
-
-/* Return the required pointer. */
-   return this->ptr;
-}
-
-void astInitPointSetVtab_(  AstPointSetVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPointSetVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a PointSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astInitPointSetVtab( AstPointSetVtab *vtab, const char *name )
-
-*  Class Membership:
-*     PointSet vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the PointSet class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitObjectVtab( (AstObjectVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPointSet) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstObjectVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->AppendPoints = AppendPoints;
-   vtab->BndPoints = BndPoints;
-   vtab->GetNcoord = GetNcoord;
-   vtab->GetNpoint = GetNpoint;
-   vtab->GetPoints = GetPoints;
-   vtab->PermPoints = PermPoints;
-   vtab->SetPoints = SetPoints;
-   vtab->SetNpoint = SetNpoint;
-   vtab->SetSubPoints = SetSubPoints;
-
-   vtab->GetPointAccuracy = GetPointAccuracy;
-   vtab->SetPointAccuracy = SetPointAccuracy;
-   vtab->TestPointAccuracy = TestPointAccuracy;
-   vtab->ClearPointAccuracy = ClearPointAccuracy;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-   parent_equal = object->Equal;
-   object->Equal = Equal;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "PointSet", "Container for a set of points" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void PermPoints( AstPointSet *this, int forward, const int perm[], int *status ) {
-/*
-*+
-*  Name:
-*     astPermPoints
-
-*  Purpose:
-*     Permute the order of a PointSet's axes.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astPermPoints( AstPointSet *this, int forward, const int perm[] ) 
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function permutes the order in which a PointSet's axes occur.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     forward
-*        The direction in which the permutation is to be applied. This
-*        controls the use of the "perm" arrays. If a non-zero value is
-*        given, then the indices into the "perm" array correspond to the 
-*        indices of the coordinates in the returned PointSet, and the
-*        values stored in the "perm" array correspond to the indices of 
-*        the coordinates in the supplied PointSet. If a zero value is
-*        given, then the indices into the "perm" array correspond to the 
-*        indices of the coordinates in the supplied PointSet, and the
-*        values stored in the "perm" array correspond to the indices of 
-*        the coordinates in the returnedPointSet.
-*     perm
-*        An array of int (with one element for each axis of the PointSet)
-*        which lists the axes in their new order. How this array is use
-*        depends on the value supplied for "forward".
-
-*  Notes:
-*     - Only genuine permutations of the axis order are permitted, so
-*     each axis must be referenced exactly once in the "perm" array.
-*     - If more than one axis permutation is applied to a PointSet, the
-*     effects are cumulative.
-*-
-*/
-
-/* Local Variables: */
-   double **old;                 /* Pointer to copy of old pointer array */
-   int coord;                    /* Loop counter for axes */
-   int ncoord;                   /* Number of axes */
-
-/* Check the global error status. Return without action if no data is
-   associated with the PointSet. */
-   if ( !astOK || !this->ptr ) return;
-
-/* Validate the permutation array, to check that it describes a genuine
-   permutation. */
-   CheckPerm( this, perm, "astPermPoints", status );
-
-/* Obtain the number of PointSet axes. */
-   ncoord = astGetNcoord( this );
-
-/* Allocate memory and use it to store a copy of the old pointers array for
-   the PointSet. */
-   old = astStore( NULL, this->ptr, sizeof( double * ) * (size_t) ncoord );
-
-/* Apply the new axis permutation cumulatively to the old one and store the
-   result in the PointSet. */
-   if ( astOK ) {
-      if( forward ) {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            this->ptr[ coord ] = old[ perm[ coord ] ];
-         }
-      } else {
-         for ( coord = 0; coord < ncoord; coord++ ) {
-            this->ptr[ perm[ coord ] ] = old[ coord ];
-         }
-      }
-   }
-
-/* Free the temporary copy of the old array. */
-   old = astFree( old );
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a PointSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     PointSet member function (over-rides the astSetAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function assigns an attribute value for a PointSet, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     setting
-*        Pointer to a null-terminated string specifying the new
-*        attribute value.
-*/
-
-/* Local Variables: */
-   AstPointSet *this;            /* Pointer to the PointSet structure */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PointSet structure. */
-   this = (AstPointSet *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
-   specified. */
-   if ( MATCH( "ncoord" ) ||
-        MATCH( "npoint" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetNpoint( AstPointSet *this, int npoint, int *status ) {
-/*
-*+
-*  Name:
-*     astSetNpoint
-
-*  Purpose:
-*     Reduce the number of points in a PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astSetNpoint( AstPointSet *this, int npoint )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function reduces the number of points stored in a PointSet.
-*     Points with indices beyond the new size will be discarded. 
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     npoint
-*        The new value for the number of points in the PointSet. Must be
-*        less than or equal to the original size of the PointSet, and 
-*        greater than zero.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check the new size is valid. */
-   if( npoint < 1 || npoint > this->npoint ) {
-      astError( AST__NPTIN, "astSetNpoint(%s): Number of points (%d) is "
-                "not valid.", status, astGetClass( this ), npoint );
-      astError( AST__NPTIN, "Should be in the range 1 to %d.", status, this->npoint );
-
-/* Store the new size. */
-   } else {
-      this->npoint = npoint;
-   }
-}
-
-static void SetPoints( AstPointSet *this, double **ptr, int *status ) {
-/*
-*+
-*  Name:
-*     astSetPoints
-
-*  Purpose:
-*     Associate coordinate values with a PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astSetPoints( AstPointSet *this, double **ptr )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function associates coordinate values with a PointSet by storing an
-*     array of pointers to the values within the PointSet object. A pointer to
-*     this pointer array will later be returned when astGetPoints is used to
-*     locate the coordinate values. If values are already associated with the
-*     PointSet, the array of pointers to them is over-written by the new values
-*     (any internally allocated memory holding the actual coordinate values
-*     first being freed).
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     ptr
-*        Pointer to an array of type double* with ncoord elements (where ncoord
-*        is the number of coordinate values per point in the PointSet). Each
-*        element of this array should point at an array of double with npoint
-*        elements (where npoint is the number of points in the PointSet),
-*        containing the values of that coordinate for each point in the set.
-*        Hence, the value of the i'th coordinate for the j'th point (where i
-*        and j are counted from zero) should be given by ptr[i][j].
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  It is the caller's responsibility to ensure that the pointer supplied
-*     points at a valid array of pointers that point at arrays of coordinate
-*     values. This is only superficially validated by this function, which then
-*     simply stores a copy of the supplied array of pointers for later use.
-*     The caller must also manage any allocation (and freeing) of memory for
-*     these coordinate values.
-*     -  This functon makes a copy of the array of pointers supplied, but does
-*     not copy the coordinate values they point at. If a PointSet containing a
-*     copy of the coordinate values is required, internal memory should be
-*     allocated within the PointSet by calling astGetPoints before storing any
-*     pointer, and then copying the values into this memory. Alternatively,
-*     using astCopy to produce a deep copy of a PointSet will also copy the
-*     coordinate values.
-*     -  A NULL pointer may be supplied as the "ptr" argument, in which case
-*     any previously stored array of pointers will be cancelled (and internal
-*     memory freed if necessary) and subsequent use of astGetPoints will then
-*     cause memory to be allocated internally by the PointSet to hold new
-*     values.
-*-
-*/
-
-/* Local Variables: */
-   int i;                        /* Loop counter for coordinates */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If the pointer supplied is not NULL, inspect each pointer in the array it
-   points at to check that none of these are NULL. This validates (to some
-   extent) the caller's data structure. Report an error and quit checking if a
-   NULL pointer is found. */
-   if ( ptr ) {
-      for ( i = 0; i < this->ncoord; i++ ) {
-         if ( !ptr[ i ] ) {
-            astError( AST__PDSIN, "astSetPoints(%s): Invalid NULL pointer in "
-                      "element %d of array of pointers to coordinate values.", status,
-                      astGetClass( this ), i );
-            break;
-         }
-      }
-   }
-
-/* Do not carry on if the data structure is obviously invalid. */
-   if ( astOK ) {
-
-/* Free any memory previously allocated to store coordinate values. */
-      this->values = (double *) astFree( (void *) this->values );
-
-/* If a new array of pointers has been provided, (re)allocate memory and store
-   a copy of the array in it, saving a pointer to this copy in the PointSet
-   structure. */
-      if ( ptr ) {
-         this->ptr = (double **) astStore( (void *) this->ptr,
-                                           (const void *) ptr,
-                                           sizeof( double * )
-                                           * (size_t) this->ncoord );
-
-/* If no pointer array was provided, free the previous one (if any). */
-      } else {
-         this->ptr = (double **) astFree( (void *) this->ptr );
-      }
-   }
-}
-
-static void SetSubPoints( AstPointSet *point1, int point, int coord,
-                          AstPointSet *point2, int *status ) {
-/*
-*+
-*  Name:
-*     astSetSubPoints
-
-*  Purpose:
-*     Associate a subset of one PointSet with another PointSet.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     void astSetSubPoints( AstPointSet *point1, int point, int coord,
-*                           AstPointSet *point2 )
-
-*  Class Membership:
-*     PointSet method.
-
-*  Description:
-*     This function selects a subset of the coordinate values associated with
-*     one PointSet and associates them with another PointSet. The second
-*     PointSet may then be used to access the subset. Any previous coordinate
-*     value association with the second PointSet is replaced.
-
-*  Parameters:
-*     point1
-*        Pointer to the first PointSet, from which a subset is to be selected.
-*     point
-*        The index of the first point (counting from zero) which is to appear
-*        in the subset (the number of points is determined by the size of the
-*        second PointSet).
-*     coord
-*        The index of the first coordinate (counting from zero) which is to
-*        appear in the subset (the number of coordinates is determined by the
-*        size of the second PointSet).
-*     point2
-*        Second PointSet, with which the subset of coordinate values is to be
-*        associated.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  The range of points and coordinates selected must lie entirely within
-*     the first PointSet.
-*     -  This function does not make a copy of the coordinate values, but
-*     merely stores pointers to the required subset of values associated with
-*     the first PointSet. If a PointSet containing a copy of the subset's
-*     coordinate values is required, then astCopy should be used to make a
-*     deep copy from the second PointSet.
-*     -  If the first PointSet does not yet have coordinate values associated
-*     with it, then space will be allocated within it to hold values (so that
-*     the second PointSet has somewhere to point at).
-*-
-*/
-
-/* Local Variables: */
-   double ** ptr2;               /* Pointer to new pointer array */
-   double **ptr1;                /* Pointer to original pointer array */
-   int i;                        /* Loop counter for coordinates */
-   int ncoord1;                  /* Number of coordinates in first PointSet */
-   int ncoord2;                  /* Number of coordinates in second PointSet */
-   int npoint1;                  /* Number of points in first PointSet */
-   int npoint2;                  /* Number of points in second PointSet */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain the sizes of both PointSets. */
-   npoint1 = astGetNpoint( point1 );
-   npoint2 = astGetNpoint( point2 );
-   ncoord1 = astGetNcoord( point1 );
-   ncoord2 = astGetNcoord( point2 );
-
-/* Check if the range of points required lies within the first PointSet and
-   report an error if it does not. */
-   if ( astOK ) {
-      if ( ( point < 0 ) || ( point + npoint2 > npoint1 ) ) {
-         astError( AST__PTRNG, "astSetSubPoints(%s): Range of points in "
-                   "output %s (%d to %d) lies outside the input %s extent "
-                   "(0 to %d).", status,
-                   astGetClass( point1 ), astGetClass( point2 ), point,
-                   point + npoint2, astGetClass( point1 ), npoint1 );
-
-/* Similarly check that the range of coordinates is valid. */
-      } else if ( ( coord < 0 ) || ( coord + ncoord2 > ncoord1 ) ) {
-         astError( AST__CORNG, "astSetSubPoints(%s): Range of coordinates in "
-                   "output %s (%d to %d) lies outside the input %s extent "
-                   "(0 to %d).", status,
-                   astGetClass( point1 ), astGetClass( point2 ), coord,
-                   coord + ncoord2, astGetClass( point1 ), ncoord1 );
-
-/* Obtain a pointer for the coordinate values associated with the first
-   PointSet (this will cause internal memory to be allocated if it is not
-   yet associated with coordinate values). */
-      } else {
-         ptr1 = astGetPoints( point1 );
-
-/* Allocate a temporary array to hold new pointer values. */
-         ptr2 = (double **) astMalloc( sizeof( double * ) * (size_t) ncoord2 );
-
-/* Initialise this pointer array to point at the required subset of coordinate
-   values. */
-         if ( astOK ) {
-            for ( i = 0; i < ncoord2; i++ ) {
-               ptr2[ i ] = ptr1[ i + coord ] + point;
-            }
-
-/* Associate the second PointSet with this new pointer array. This will free
-   any internally allocated memory and replace any existing coordinate value
-   association. */
-            astSetPoints( point2, ptr2 );
-	 }
-
-/* Free the temporary pointer arry. */
-         ptr2 = (double **) astFree( (void * ) ptr2 );
-      }
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a PointSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     PointSet member function (over-rides the astTestAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate
-*     whether a value has been set for one of a PointSet's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *this;            /* Pointer to the PointSet structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the PointSet structure. */
-   this = (AstPointSet *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Test if the name matches any of the read-only attributes of this
-   class. If it does, then return zero. */
-   if ( !strcmp( attrib, "ncoord" ) ||
-        !strcmp( attrib, "npoint" ) ) {
-      result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-
-/*
-*att+
-*  Name:
-*     PointAccuracy
-
-*  Purpose:
-*     The absolute accuracies for all points in the PointSet.
-
-*  Type:
-*     Protected attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute holds the absolute accuracy for each axis in the 
-*     PointSet. It has a separate value for each axis. It is used when
-*     comparing two PointSets using the protected astEqual method inherited
-*     from the Object class. The default value for each axis is AST__BAD 
-*     which causes the a default accuracy of each axis value to be calculated 
-*     as  1.0E8*min( abs(axis value)*DBL_EPSILON, DBL_MIN ).
-
-*  Applicability:
-*     PointSet
-*        All PointSets have this attribute.
-*att-
-*/
-MAKE_CLEAR(PointAccuracy,acc,AST__BAD)
-MAKE_GET(PointAccuracy,double,AST__BAD,this->acc?this->acc[axis]:AST__BAD)
-MAKE_SET(PointAccuracy,double,acc,((value!=AST__BAD)?fabs(value):AST__BAD),AST__BAD)
-MAKE_TEST(PointAccuracy,(this->acc?this->acc[axis]!=AST__BAD:0))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for PointSet objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for PointSet objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the coordinate
-*     values (if any) associated with the input PointSet.
-*/
-
-/* Local Variables: */
-   AstPointSet *in;              /* Pointer to input PointSet */
-   AstPointSet *out;             /* Pointer to output PointSet */
-   int i;                        /* Loop counter for coordinates */
-   int nval;                     /* Number of values to store */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PointSets. */
-   in = (AstPointSet *) objin;
-   out = (AstPointSet *) objout;
-
-/* For safety, first clear any references to the input coordinate values from
-   the output PointSet. */
-   out->ptr = NULL;
-   out->values = NULL;
-   out->acc = NULL;
- 
-/* Copy axis accuracies. */
-   if( in->acc ){
-      out->acc = astStore( NULL, in->acc, sizeof( double )*(size_t) in->ncoord );
-   }
-
-/* If the input PointSet is associated with coordinate values, we must
-   allocate memory in the output PointSet to hold a copy of them. */
-   if ( in->ptr ) {
-
-/* Determine the number of coordinate values to be stored and allocate memory
-   to hold them, storing a pointer to this memory in the output PointSet. */
-      nval = in->npoint * in->ncoord;
-      out->values = (double *) astMalloc( sizeof( double ) * (size_t) nval );
-
-/* If OK, also allocate memory for the array of pointers into this values
-   array, storing a pointer to this pointer array in the output PointSet. */
-      if ( astOK ) {
-         out->ptr = (double **) astMalloc( sizeof( double * )
-                                           * (size_t) in->ncoord );
-
-/* If OK, initialise the new pointer array. */
-         if ( astOK ) {
-            for ( i = 0; i < in->ncoord; i++ ) {
-               out->ptr[ i ] = out->values + ( i * in->npoint );
-            }
-
-/* If we failed to allocate the pointer array, then free the values array. */
-         } else {
-            out->values = (double *) astFree( (void *) out->values );
-         }
-      }
-
-/* Copy the values for each coordinate from the input to the output. Use a
-   memory copy to avoid floating point errors if the data are
-   un-initialised. */
-      if ( astOK ) {
-         for ( i = 0; i < in->ncoord; i++ ) {
-            (void) memcpy( (void *) out->ptr[ i ],
-                           (const void *) in->ptr[ i ],
-                           sizeof( double ) * (size_t) in->npoint );
-         }
-      }
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for PointSet objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for PointSet objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPointSet *this;            /* Pointer to PointSet */
-
-/* Obtain a pointer to the PointSet structure. */
-   this = (AstPointSet *) obj;
-
-/* Free memory holding axis accuracies. */
-   this->acc = astFree( this->acc );
-
-/* Free any pointer array and associated coordinate values array, */
-   this->ptr = (double **) astFree( (void *) this->ptr );
-   this->values = (double *) astFree( (void *) this->values );
-
-/* Clear the remaining PointSet variables. */
-   this->npoint = 0;
-   this->ncoord = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for PointSet objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the PointSet class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the PointSet whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - It is not recommended that PointSets containing large numbers
-*     of points be written out, as the coordinate data will be
-*     formatted as text and this will not be very efficient.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPointSet *this;            /* Pointer to the PointSet structure */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keywords */
-   int coord;                    /* Loop counter for coordinates */
-   int i;                        /* Counter for coordinate values */
-   int ival;                     /* Integer value */
-   int makeComment;              /* Include a comment? */
-   int point;                    /* Loop counter for points */
-   int set;                      /* Attribute value set? */
-   
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PointSet structure. */
-   this = (AstPointSet *) this_object;
-
-/* Write out values representing the instance variables for the
-   PointSet class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Npoint. */
-/* ------- */
-   astWriteInt( channel, "Npoint", 1, 1, this->npoint,
-                "Number of points" );
-
-/* Ncoord. */
-/* ------- */
-   astWriteInt( channel, "Ncoord", 1, 1, this->ncoord,
-                "Number of coordinates per point" );
-
-/* Axis Acuracies. */
-/* --------------- */
-   for ( coord = 0; coord < this->ncoord; coord++ ) {
-      if( astTestPointAccuracy( this, coord ) ) {
-         (void) sprintf( key, "Acc%d", coord + 1 );
-         astWriteDouble( channel, key, 1, 1, astGetPointAccuracy( this, coord ),
-                         (coord == 0 ) ? "Axis accuracies..." : "" );
-      }
-   }
-
-/* Coordinate data. */
-/* ---------------- */
-/* Write an "Empty" value to indicate whether or not the PointSet
-   contains data. */
-   ival = ( this->ptr == NULL );
-   set = ( ival != 0 );
-   astWriteInt( channel, "Empty", set, 0, ival,
-                ival ? "PointSet is empty" :
-                       "PointSet contains data" );
-
-/* If it contains data, create a suitable keyword for each coordinate
-   value in turn. */
-   if ( this->ptr ) {
-      makeComment = 1;
-      i = 0;
-      for ( point = 0; point < this->npoint; point++ ) {
-         for ( coord = 0; coord < this->ncoord; coord++ ) {
-            i++;
-            (void) sprintf( key, "X%d", i );
-
-/* Write the value out if good. Only supply a comment for the first good value. */
-            if( this->ptr[ coord ][ point ] != AST__BAD ) {
-               astWriteDouble( channel, key, 1, 1, this->ptr[ coord ][ point ],
-                               ( makeComment ) ? "Coordinate values..." : "" );
-               makeComment = 0;
-            }
-         }
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPointSet and astCheckPointSet functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PointSet,Object)
-astMAKE_CHECK(PointSet)
-
-AstPointSet *astPointSet_( int npoint, int ncoord, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astPointSet
-
-*  Purpose:
-*     Create a PointSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     AstPointSet *astPointSet( int npoint, int ncoord,
-*                               const char *options, ..., int *status )
-
-*  Class Membership:
-*     PointSet constructor.
-
-*  Description:
-*     This function creates a new PointSet and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     npoint
-*        The number of points to be stored in the PointSet (must be at
-*        least 1).
-*     ncoord
-*        The number of coordinate values associated with each point
-*        (must be at least 1).
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new PointSet. The syntax used is the same as
-*        for the astSet method and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of arguments may follow it in order to
-*        supply values to be substituted for these specifiers. The
-*        rules for supplying these are identical to those for the
-*        astSet method (and for the C "printf" function).
-
-*  Returned Value:
-*     A pointer to the new PointSet.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPointSet *new;             /* Pointer to new PointSet */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the PointSet, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPointSet( NULL, sizeof( AstPointSet ), !class_init,
-                          &class_vtab, "PointSet", npoint, ncoord );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   PointSet's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PointSet. */
-   return new;
-}
-
-AstPointSet *astPointSetId_( int npoint, int ncoord,
-                             const char *options, int *status, ...) {
-/*
-*  Name:
-*     astPointSetId_
-
-*  Purpose:
-*     Create a PointSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     AstPointSet *astPointSetId_( int npoint, int ncoord,
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     PointSet constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astPointSet constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astPointSet_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astPointSet_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-
-*  Parameters:
-*     As for astPointSet_.
-
-*  Returned Value:
-*     The ID value associated with the new PointSet.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPointSet *new;             /* Pointer to new PointSet */
-   va_list args;                 /* Variable argument list */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the PointSet, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPointSet( NULL, sizeof( AstPointSet ), !class_init,
-                          &class_vtab, "PointSet", npoint, ncoord );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   PointSet's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new PointSet. */
-   return astMakeId( new );
-}
-
-AstPointSet *astInitPointSet_( void *mem, size_t size, int init,
-                               AstPointSetVtab *vtab, const char *name,
-                               int npoint, int ncoord, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPointSet
-
-*  Purpose:
-*     Initialise a PointSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     AstPointSet *astInitPointSet( void *mem, size_t size, int init,
-*                                   AstPointSetVtab *vtab, const char *name,
-*                                   int npoint, int ncoord )
-
-*  Class Membership:
-*     PointSet initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new PointSet object. It allocates memory (if necessary) to accommodate
-*     the PointSet plus any additional data associated with the derived class.
-*     It then initialises a PointSet structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a PointSet at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the PointSet is to be created. This
-*        must be of sufficient size to accommodate the PointSet data
-*        (sizeof(PointSet)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the PointSet (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the PointSet
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the PointSet's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new PointSet.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     npoint
-*        The number of points in the PointSet (must be at least 1).
-*     ncoord
-*        The number of coordinate values associated with each point (must be
-*        at least 1).
-
-*  Returned Value:
-*     A pointer to the new PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *new;             /* Pointer to new PointSet */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPointSetVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the initialisation values for validity, reporting an error if
-   necessary. */
-   if ( npoint < 1 ) {
-      astError( AST__NPTIN, "astInitPointSet(%s): Number of points (%d) is "
-                "not valid.", status, name, npoint );
-   } else if ( ncoord < 1 ) {
-      astError( AST__NCOIN, "astInitPointSet(%s): Number of coordinates per "
-                "point (%d) is not valid.", status, name, ncoord );
-   }
-
-/* Initialise an Object structure (the parent class) as the first component
-   within the PointSet structure, allocating memory if necessary. */
-   new = (AstPointSet *) astInitObject( mem, size, 0,
-                                        (AstObjectVtab *) vtab, name );
-
-   if ( astOK ) {
-
-/* Initialise the PointSet data. */
-/* ----------------------------- */
-/* Store the number of points and number of coordinate values per point. */
-      new->npoint = npoint;
-      new->ncoord = ncoord;
-
-/* Initialise pointers to the pointer array and associated coordinate
-   values array. */
-      new->ptr = NULL;
-      new->values = NULL;
-      new->acc = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstPointSet *astLoadPointSet_( void *mem, size_t size,
-                               AstPointSetVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPointSet
-
-*  Purpose:
-*     Load a PointSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     AstPointSet *astLoadPointSet( void *mem, size_t size,
-*                                   AstPointSetVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     PointSet loader.
-
-*  Description:
-*     This function is provided to load a new PointSet using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     PointSet structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the PointSet is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        PointSet data (sizeof(PointSet)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the PointSet (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the PointSet structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPointSet) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new PointSet. If this is NULL, a pointer
-*        to the (static) virtual function table for the PointSet class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "PointSet" is used instead.
-
-*  Returned Value:
-* A pointer to the new PointSet.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPointSet *new;             /* Pointer to the new PointSet */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keywords */
-   double acc;                   /* Accuracy value */
-   int coord;                    /* Loop counter for coordinates */
-   int empty;                    /* PointSet empty? */
-   int i;                        /* Counter for coordinate values */
-   int point;                    /* Loop counter for points */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this PointSet. In this case the
-   PointSet belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPointSet );
-      vtab = &class_vtab;
-      name = "PointSet";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPointSetVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built PointSet. */
-   new = astLoadObject( mem, size, (AstObjectVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Initialise the PointSet's data pointers. */
-      new->ptr = NULL;
-      new->values = NULL;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "PointSet" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Npoint. */
-/* ------- */
-      new->npoint = astReadInt( channel, "npoint", 1 );
-      if ( new->npoint < 1 ) new->npoint = 1;
-
-/* Ncoord. */
-/* ------- */
-      new->ncoord = astReadInt( channel, "ncoord", 1 );
-      if ( new->ncoord < 1 ) new->ncoord = 1;
-
-/* Axis Acuracies. */
-/* --------------- */
-      new->acc = NULL;
-      for ( coord = 0; coord < new->ncoord; coord++ ) {
-         (void) sprintf( key, "acc%d", coord + 1 );
-         acc = astReadDouble( channel, key, AST__BAD );
-         if( !new->acc && acc != AST__BAD ) {
-            new->acc = astMalloc( sizeof( double )*(size_t) new->ncoord );
-            if( new->acc ) {
-               for( i = 0; i < coord - 1; i++ ) new->acc[ i ] = AST__BAD;
-            }
-         }
-         if( new->acc ) new->acc[ coord ] = acc;
-      }
-
-/* Coordinate data. */
-/* ---------------- */
-/* Read a value for the "Empty" keyword to see whether the PointSet
-   contains data. */
-      empty = astReadInt( channel, "empty", 0 );
-
-/* If it does, allocate memory to hold the coordinate data and
-   pointers. */
-      if ( astOK && !empty ) {
-         new->ptr = astMalloc( sizeof( double * ) * (size_t) new->ncoord );
-         new->values = astMalloc( sizeof( double ) *
-                                  (size_t) ( new->npoint * new->ncoord ) );
-         if ( astOK ) {
-
-/* Initialise the array of pointers into the main data array. */
-            for ( coord = 0; coord < new->ncoord; coord++ ) {
-               new->ptr[ coord ] = new->values + ( coord * new->npoint );
-            }
-
-/* Create a keyword for each coordinate value to be read. */
-            i = 0;
-            for ( point = 0; point < new->npoint; point++ ) {
-               for ( coord = 0; coord < new->ncoord; coord++ ) {
-                  i++;
-                  (void) sprintf( key, "x%d", i );
-
-/* Read and assign the values. */
-                  new->ptr[ coord ][ point ] =
-                     astReadDouble( channel, key, AST__BAD );
-               }
-            }
-         }
-
-/* If an error occurred, clean up by freeing the memory allocated
-   above, thus emptying the PointSet. */
-         if ( !astOK ) {
-            new->ptr = astFree( new->ptr );
-            new->values = astFree( new->values );
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new PointSet. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new PointSet pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-int astGetNpoint_( const AstPointSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,PointSet,GetNpoint))( this, status );
-}
-int astGetNcoord_( const AstPointSet *this, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,PointSet,GetNcoord))( this, status );
-}
-double **astGetPoints_( AstPointSet *this, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,PointSet,GetPoints))( this, status );
-}
-void astPermPoints_( AstPointSet *this, int forward, const int perm[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,PointSet,PermPoints))( this, forward, perm, status );
-}
-void astSetPoints_( AstPointSet *this, double **ptr, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,PointSet,SetPoints))( this, ptr, status );
-}
-void astSetNpoint_( AstPointSet *this, int npoint, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,PointSet,SetNpoint))( this, npoint, status );
-}
-void astSetSubPoints_( AstPointSet *point1, int point, int coord,
-                       AstPointSet *point2, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(point1,PointSet,SetSubPoints))( point1, point, coord, point2, status );
-}
-AstPointSet *astAppendPoints_( AstPointSet *this, AstPointSet *that, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,PointSet,AppendPoints))( this, that, status );
-}
-void astBndPoints_( AstPointSet *this, double *lbnd, double *ubnd, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,PointSet,BndPoints))( this, lbnd, ubnd, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/pointset.h b/ast-5.3-1/pointset.h
deleted file mode 100644
index 63d798f..0000000
--- a/ast-5.3-1/pointset.h
+++ /dev/null
@@ -1,568 +0,0 @@
-#if !defined( POINTSET_INCLUDED ) /* Include this file only once */
-#define POINTSET_INCLUDED
-/*
-*+
-*  Name:
-*     pointset.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the PointSet class.
-
-*  Invocation:
-*     #include "pointset.h"
-
-*  Description:
-*     This include file defines the interface to the PointSet class
-*     and provides the type definitions, function prototypes and
-*     macros, etc.  needed to use this class.
-*
-*     The PointSet class encapsulates sets of coordinate values
-*     representing points in an N-dimensional space, to which
-*     coordinate transformations may be applied. It also provides
-*     memory allocation facilities for coordinate values.
-
-*  Inheritance:
-*     The PointSet class inherits from the Object class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Ncoord (integer)
-*        A read-only attribute that gives the number of coordinates
-*        for each point in a PointSet (i.e. the number of dimensions
-*        of the space in which the points reside). This value is
-*        determined when the PointSet is created.
-*     Npoint (integer)
-*        A read-only attribute that gives the number of points that
-*        can be stored in the PointSet. This value is determined when
-*        the PointSet is created.
-*     PointAccuracy (floating point)
-*        This stores the absolute accuracies for each axis in the PointSet.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        ClearAttrib
-*           Clear an attribute value for a PointSet.
-*        GetAttrib
-*           Get an attribute value for a PointSet.
-*        SetAttrib
-*           Set an attribute value for a PointSet.
-*        TestAttrib
-*           Test if an attribute value has been set for a PointSet.
-
-*  New Methods Defined:
-*     Public:
-*        astAppendPoints
-*           Append one PointSet to another.
-*        astBndPoints
-*           Find the axis bounds of the points in a PointSet.
-*        astGetPoints
-*           Get a pointer to the coordinate values associated with a PointSet.
-*        astPermPoints
-*           Permute coordinates within a PointSet.
-*        astSetPoints
-*           Associate coordinate values with a PointSet.
-*        astSetNpoint
-*           Reduce the size of a PointSet.
-*        astSetSubPoints
-*           Associate one PointSet with a subset of another.
-*
-*     Protected:
-*        astGetNpoint
-*           Get the number of points in a PointSet.
-*        astGetNcoord
-*           Get the number of coordinate values per point from a PointSet.
-*        astGetPointAccuracy
-*           Get the curent value of the PointAcuracy attribute for an axis.
-*        astSetPointAccuracy
-*           Set a new value for the PointAcuracy attribute for an axis.
-*        astTestPointAccuracy
-*           Test the value of the PointAcuracy attribute for an axis.
-*        astClearPointAccuracy
-*           Clear the value of the PointAcuracy attribute for an axis.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAPointSet
-*           Test class membership.
-*        astPointSet
-*           Create a PointSet.
-*
-*     Protected:
-*        astCheckPointSet
-*           Validate class membership.
-*        astInitPointSet
-*           Initialise a PointSet.
-*        astInitPointSetVtab
-*           Initialise the virtual function table for the PointSet class.
-*        astLoadPointSet
-*           Load a PointSet.
-
-*  Macros:
-*     Public:
-*        AST__BAD
-*           Bad value flag for coordinate data.
-*
-*     Protected:
-*        astISBAD
-*           Check if a value is AST__BAD or NaN.
-*        astISGOOD
-*           Check if a value is not AST__BAD or NaN.
-*        astISNAN
-*           Check if a value is NaN.
-
-*  Type Definitions:
-*     Public:
-*        AstPointSet
-*           PointSet object type.
-*
-*     Protected:
-*        AstPointSetVtab
-*           PointSet virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     30-JAN-1996 (RFWS):
-*        Original version.
-*     27-SEP-1996 (RFWS):
-*        Added external interface and I/O facilities.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitPointSetVtab method.
-*     2-NOV-2004 (DSB):
-*        Added PointAccuracy attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-
-/* Configuration results. */
-/* ---------------------- */
-#include <config.h>
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#include <math.h>
-
-#if !HAVE_DECL_ISNAN
-#  if HAVE_ISNAN
-     /* Seems that math.h does not include a prototype for isnan */
-     int isnan( double );
-#  else
-#    define isnan(x) ((x) != (x))
-#  endif
-#endif
-#endif
-
-/* Macros. */
-/* ======= */
-/*
-*+
-*  Name:
-*     AST__BAD
-
-*  Type:
-*     Public macro.
-
-*  Purpose:
-*     Bad value flag for coordinate data.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     const double AST__BAD
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to a const double value that is used to flag
-*     coordinate values that are "bad" (i.e. undefined or
-*     meaningless). Classes that implement coordinate transformations
-*     should test coordinate values against this value, and
-*     appropriately propagate bad values to their output.
-*-
-*/
-
-/* Define AST__BAD to be the most negative (normalised) double
-   value. */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__BAD (-(DBL_MAX))
-
-#if defined(astCLASS)            /* Protected */
-
-/*
-*+
-*  Name:
-*     astISNAN
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Test if a double is NaN.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     astISNAN(value)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to a integer valued expression which is zero
-*     if and only if the supplied value equals NaN ("Not a Number").
-
-*  Parameters:
-*     value
-*        The value to be tested. This should be a double.
-
-*  Examples:
-*     if( astISNAN(x) ) x = AST__BAD;
-*        If "x" is NaN replace it with AST__BAD.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-#define astISNAN(value) isnan(value)
-
-/*
-*+
-*  Name:
-*     astISGOOD
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Test if a double is neither AST__BAD nor NaN.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     astISGOOD(value)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to a integer valued expression which is zero
-*     if and only if the supplied value equals AST__BAD or is NaN ("Not a 
-*     Number").
-
-*  Parameters:
-*     value
-*        The value to be tested. This should be a double.
-
-*  Examples:
-*     if( astISGOOD(x) ) y = x;
-*        Checks that "x" is usable before assigning it to y.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-#define astISGOOD(value) ( (value) != AST__BAD && !astISNAN(value) )
-
-
-/*
-*+
-*  Name:
-*     astISBAD
-
-*  Type:
-*     Protected macro.
-
-*  Purpose:
-*     Test if a double is either AST__BAD or NaN.
-
-*  Synopsis:
-*     #include "pointset.h"
-*     astISBAD(value)
-
-*  Class Membership:
-*     Defined by the PointSet class.
-
-*  Description:
-*     This macro expands to a integer valued expression which is non-zero
-*     if and only if the supplied value equals AST__BAD or is NaN ("Not a 
-*     Number").
-
-*  Parameters:
-*     value
-*        The value to be tested. This should be a double.
-
-*  Examples:
-*     if( astISBAD(x) ) astError( ... );
-*        Reports an error if "x" is bad.
-
-*  Notes:
-*     - To avoid problems with some compilers, you should not leave
-*     any white space around the macro arguments.
-*-
-*/
-
-#define astISBAD(value) ( (value) == AST__BAD || astISNAN(value) )
-
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PointSet structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPointSet {
-
-/* Attributes inherited from the parent class. */
-   AstObject object;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double **ptr;                 /* Pointer to array of pointers to values */
-   double *values;               /* Pointer to array of coordinate values */
-   int ncoord;                   /* Number of coordinate values per point */
-   int npoint;                   /* Number of points */
-   double *acc;                  /* Axis accuracies */
-} AstPointSet;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPointSetVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstObjectVtab object_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstPointSet *(* AppendPoints)( AstPointSet *, AstPointSet *, int * );
-   double **(* GetPoints)( AstPointSet *, int * );
-   int (* GetNcoord)( const AstPointSet *, int * );
-   int (* GetNpoint)( const AstPointSet *, int * );
-   void (* BndPoints)( AstPointSet *, double *, double *, int * );
-   void (* PermPoints)( AstPointSet *, int, const int[], int * );
-   void (* SetNpoint)( AstPointSet *, int, int * );
-   void (* SetPoints)( AstPointSet *, double **, int * );
-   void (* SetSubPoints)( AstPointSet *, int, int, AstPointSet *, int * );
-
-   double (* GetPointAccuracy)( AstPointSet *, int, int * );
-   int (* TestPointAccuracy)( AstPointSet *, int, int * );
-   void (* ClearPointAccuracy)( AstPointSet *, int, int * );
-   void (* SetPointAccuracy)( AstPointSet *, int, double, int * );
-
-} AstPointSetVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstPointSetGlobals {
-   AstPointSetVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstPointSetGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PointSet)         /* Check class membership */
-astPROTO_ISA(PointSet)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPointSet *astPointSet_( int, int, const char *, int *, ...);
-#else
-AstPointSet *astPointSetId_( int, int, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPointSet *astInitPointSet_( void *, size_t, int, AstPointSetVtab *,
-                               const char *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitPointSetVtab_( AstPointSetVtab *, const char *, int * );
-
-/* Loader. */
-AstPointSet *astLoadPointSet_( void *, size_t, AstPointSetVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitPointSetGlobals_( AstPointSetGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-double **astGetPoints_( AstPointSet *, int * );
-void astPermPoints_( AstPointSet *, int, const int[], int * );
-void astSetPoints_( AstPointSet *, double **, int * );
-void astSetNpoint_( AstPointSet *, int, int * );
-void astSetSubPoints_( AstPointSet *, int, int, AstPointSet *, int * );
-AstPointSet *astAppendPoints_( AstPointSet *, AstPointSet *, int * );
-void astBndPoints_( AstPointSet *, double *, double *, int * );
-
-# if defined(astCLASS)           /* Protected */
-int astGetNcoord_( const AstPointSet *, int * );
-int astGetNpoint_( const AstPointSet *, int * );
-
-double astGetPointAccuracy_( AstPointSet *, int, int * );
-int astTestPointAccuracy_( AstPointSet *, int, int * );
-void astClearPointAccuracy_( AstPointSet *, int, int * );
-void astSetPointAccuracy_( AstPointSet *, int, double, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPointSet(this) astINVOKE_CHECK(PointSet,this,0)
-#define astVerifyPointSet(this) astINVOKE_CHECK(PointSet,this,1)
-
-/* Test class membership. */
-#define astIsAPointSet(this) astINVOKE_ISA(PointSet,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPointSet astINVOKE(F,astPointSet_)
-#else
-#define astPointSet astINVOKE(F,astPointSetId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPointSet(mem,size,init,vtab,name,npoint,ncoord) \
-astINVOKE(O,astInitPointSet_(mem,size,init,vtab,name,npoint,ncoord,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPointSetVtab(vtab,name) astINVOKE(V,astInitPointSetVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPointSet(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPointSet_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPointSet to validate PointSet pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astGetPoints(this) \
-astINVOKE(V,astGetPoints_(astCheckPointSet(this),STATUS_PTR))
-#define astPermPoints(this,forward,perm) \
-astINVOKE(V,astPermPoints_(astCheckPointSet(this),forward,perm,STATUS_PTR))
-#define astSetPoints(this,ptr) \
-astINVOKE(V,astSetPoints_(astCheckPointSet(this),ptr,STATUS_PTR))
-#define astSetNpoint(this,np) \
-astINVOKE(V,astSetNpoint_(astCheckPointSet(this),np,STATUS_PTR))
-#define astSetSubPoints(point1,point,coord,point2) \
-astINVOKE(V,astSetSubPoints_(astCheckPointSet(point1),point,coord,astCheckPointSet(point2),STATUS_PTR))
-#define astAppendPoints(this,that) \
-astINVOKE(O,astAppendPoints_(astCheckPointSet(this),astCheckPointSet(that),STATUS_PTR))
-#define astBndPoints(this,lbnd,ubnd) \
-astINVOKE(V,astBndPoints_(astCheckPointSet(this),lbnd,ubnd,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astGetNpoint(this) \
-astINVOKE(V,astGetNpoint_(astCheckPointSet(this),STATUS_PTR))
-#define astGetNcoord(this) \
-astINVOKE(V,astGetNcoord_(astCheckPointSet(this),STATUS_PTR))
-
-#define astClearPointAccuracy(this,axis) \
-astINVOKE(V,astClearPointAccuracy_(astCheckPointSet(this),axis,STATUS_PTR))
-#define astGetPointAccuracy(this,axis) \
-astINVOKE(V,astGetPointAccuracy_(astCheckPointSet(this),axis,STATUS_PTR))
-#define astSetPointAccuracy(this,axis,value) \
-astINVOKE(V,astSetPointAccuracy_(astCheckPointSet(this),axis,value,STATUS_PTR))
-#define astTestPointAccuracy(this,axis) \
-astINVOKE(V,astTestPointAccuracy_(astCheckPointSet(this),axis,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/polygon.c b/ast-5.3-1/polygon.c
deleted file mode 100644
index 07ea128..0000000
--- a/ast-5.3-1/polygon.c
+++ /dev/null
@@ -1,5405 +0,0 @@
-/*
-*class++
-*  Name:
-*     Polygon
-
-*  Purpose:
-*     A polygonal region within a 2-dimensional Frame.
-
-*  Constructor Function:
-c     astPolygon
-f     AST_POLYGON
-
-*  Description:
-*     The Polygon class implements a polygonal area, defined by a
-*     collection of vertices, within a 2-dimensional Frame. The vertices
-*     are connected together by geodesic curves within the encapsulated Frame.
-*     For instance, if the encapsulated Frame is a simple Frame then the
-*     geodesics will be straight lines, but if the Frame is a SkyFrame then 
-*     the geodesics will be great circles. Note, the vertices must be
-*     supplied in an order such that the inside of the polygon is to the
-*     left of the boundary as the vertices are traversed. Supplying them
-*     in the reverse order will effectively negate the polygon.
-*
-*     Within a SkyFrame, neighbouring vertices are always joined using the 
-*     shortest path. Thus if an edge of 180 degrees or more in length is
-*     required, it should be split into section each of which is less
-*     than 180 degrees. The closed path joining all the vertices in order
-*     will divide the celestial sphere into two disjoint regions. The
-*     inside of the polygon is the region which is circled in an
-*     anti-clockwise manner (when viewed from the inside of the celestial
-*     sphere) when moving through the list of vertices in the order in
-*     which they were supplied when the Polygon was created (i.e. the
-*     inside is to the left of the boundary when moving through the
-*     vertices in the order supplied).
-
-*  Inheritance:
-*     The Polygon class inherits from the Region class.
-
-*  Attributes:
-*     The Polygon class does not define any new attributes beyond
-*     those which are applicable to all Regions.
-
-*  Functions:
-c     In addition to those functions applicable to all Regions, the
-c     following functions may also be applied to all Polygons:
-f     In addition to those routines applicable to all Regions, the
-f     following routines may also be applied to all Polygons:
-*
-c     - astDownsize: Reduce the number of vertices in a Polygon. 
-f     - AST_DOWNSIZE: Reduce the number of vertices in a Polygon. 
-c     - astOutline<X>: Create a Polygon outlining values in a pixel array
-f     - AST_OUTLINE<X>: Create a Polygon outlining values in a pixel array
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-OCT-2004 (DSB):
-*        Original version.
-*     28-MAY-2009 (DSB):
-*        Added astDownsize.
-*     29-MAY-2009 (DSB):
-*        Added astOutline<X>.
-*     30-JUN-2009 (DSB):
-*        Override astGetBounded.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Polygon
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Macros specifying whether a point is inside, outside or on the
-   boundary of the polygon. */
-#define UNKNOWN 0
-#define IN      1
-#define OUT     2
-#define ON      3
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "box.h"                 /* Box Regions */
-#include "wcsmap.h"              /* Definitons of AST__DPI etc */
-#include "polygon.h"             /* Interface definition for this class */
-#include "mapping.h"             /* Position mappings */
-#include "unitmap.h"             /* Unit Mapping */
-#include "pal.h"                 /* SLALIB library interface */
-#include "frame.h"               /* Coordinate system description */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-
-/* Type definitions. */
-/* ================= */
-
-/* A structure that holds information about an edge of the new Polygon
-   being created by astDownsize. The edge is a line betweeen two of the
-   vertices of the original Polygon. */
-typedef struct Segment {
-   int i1;        /* Index of starting vertex within old Polygon */
-   int i2;        /* Index of ending vertex within old Polygon */
-   double error;  /* Max geodesic distance from any old vertex to the line */
-   int imax;      /* Index of the old vertex at which max error is reached */
-   struct Segment *next;/* Pointer to next Segment in a double link list */
-   struct Segment *prev;/* Pointer to previous Segment in a double link list */
-} Segment;
-
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (* parent_resetcache)( AstRegion *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Polygon)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Polygon,Class_Init)
-#define class_vtab astGLOBAL(Polygon,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPolygonVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPolygon *astPolygonId_( void *, int, int, const double *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-/* Define a macro that expands to a single prototype for function
-   FindInsidePoint for a given data type and operation. */
-#define FINDINSIDEPOINT_PROTO0(X,Xtype,Oper) \
-static void FindInsidePoint##Oper##X( Xtype, Xtype *, int[2], int[2], int *, int *, int *, int * ); 
-
-/* Define a macro that expands to a set of prototypes for all operations
-   for function FindInsidePoint for a given data type. */
-#define FINDINSIDEPOINT_PROTO(X,Xtype) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,LT) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,LE) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,EQ) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,GE) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,GT) \
-FINDINSIDEPOINT_PROTO0(X,Xtype,NE)
-
-/* Use the above macros to define all FindInsidePoint prototypes for all
-   data types and operations. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-FINDINSIDEPOINT_PROTO(LD,long double)
-#endif
-FINDINSIDEPOINT_PROTO(D,double)
-FINDINSIDEPOINT_PROTO(L,long int)
-FINDINSIDEPOINT_PROTO(UL,unsigned long int)
-FINDINSIDEPOINT_PROTO(I,int)
-FINDINSIDEPOINT_PROTO(UI,unsigned int)
-FINDINSIDEPOINT_PROTO(S,short int)
-FINDINSIDEPOINT_PROTO(US,unsigned short int)
-FINDINSIDEPOINT_PROTO(B,signed char)
-FINDINSIDEPOINT_PROTO(UB,unsigned char)
-FINDINSIDEPOINT_PROTO(F,float) 
-
-/* Define a macro that expands to a single prototype for function
-   TraceEdge for a given data type and operation. */
-#define TRACEEDGE_PROTO0(X,Xtype,Oper) \
-static AstPointSet *TraceEdge##Oper##X( Xtype, Xtype *, int[2], int[2], int, int, int, int, int, int * );
-
-/* Define a macro that expands to a set of prototypes for all operations
-   for function TraceEdge for a given data type. */
-#define TRACEEDGE_PROTO(X,Xtype) \
-TRACEEDGE_PROTO0(X,Xtype,LT) \
-TRACEEDGE_PROTO0(X,Xtype,LE) \
-TRACEEDGE_PROTO0(X,Xtype,EQ) \
-TRACEEDGE_PROTO0(X,Xtype,GE) \
-TRACEEDGE_PROTO0(X,Xtype,GT) \
-TRACEEDGE_PROTO0(X,Xtype,NE)
-
-/* Use the above macros to define all TraceEdge prototypes for all
-   data types and operations. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-TRACEEDGE_PROTO(LD,long double)
-#endif
-TRACEEDGE_PROTO(D,double)
-TRACEEDGE_PROTO(L,long int)
-TRACEEDGE_PROTO(UL,unsigned long int)
-TRACEEDGE_PROTO(I,int)
-TRACEEDGE_PROTO(UI,unsigned int)
-TRACEEDGE_PROTO(S,short int)
-TRACEEDGE_PROTO(US,unsigned short int)
-TRACEEDGE_PROTO(B,signed char)
-TRACEEDGE_PROTO(UB,unsigned char)
-TRACEEDGE_PROTO(F,float) 
-
-/* Non-generic function prototypes. */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *DownsizePoly( AstPointSet *, double, int, AstFrame *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstPolygon *Downsize( AstPolygon *, double, int, int * );
-static Segment *AddToChain( Segment *, Segment *, int * );
-static Segment *NewSegment( Segment *, int, int, int, int * );
-static Segment *RemoveFromChain( Segment *, Segment *, int * );
-static double Polywidth( AstFrame *, AstLineDef **, int, int, double[ 2 ], int * );
-static int GetBounded( AstRegion *, int * );
-static int IntCmp( const void *, const void * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static void Cache( AstPolygon *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FindMax( Segment *, AstFrame *, double *, double *, int, int, int * );
-static void RegBaseBox( AstRegion *this, double *, double *, int * );
-static void ResetCache( AstRegion *this, int * );
-static void SetPointSet( AstPolygon *, AstPointSet *, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void SmoothPoly( AstPointSet *, int, double, int * );
-
-/* Member functions. */
-/* ================= */
-static Segment *AddToChain( Segment *head, Segment *seg, int *status ){
-/*
-*  Name:
-*     AddToChain
-
-*  Purpose:
-*     Add a Segment into the linked list of Segments, maintaining the 
-*     required order in the list.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     Segment *AddToChain( Segment *head, Segment *seg, int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     The linked list of Segments maintained by astDownsize is searched
-*     from the high error end (the head), until a Segment is foound which
-*     has a lower error than the supplied segment. The supplied Segment
-*     is then inserted into the list at that point.
-
-*  Parameters:
-*     head
-*        The Segment structure at the head of the list (i.e. the segment
-*        with maximum error).
-*     seg
-*        The Segment to be added into the list.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the link head (which will have changed if "seg" has a
-*     higher error than the original head).
-
-*/
-
-/* Local Variables: */
-   Segment *tseg;
-
-/* Check the global error status. */
-   if ( !astOK ) return head;
-
-/* If the list is empty, return the supplied segment as the new list
-   head. */
-   if( !head ) {
-      head = seg;
-
-/* If the supplied segment has a higher error than the original head,
-   insert the new segment in front of the original head. */
-   } else if( seg->error > head->error ){
-      seg->next = head;
-      head->prev = seg;
-      head = seg;
-
-/* Otherwise, move down the list from the head until a segment is found
-   which has a lower error than the supplied Segment. Then insert the
-   supplied segment into the list in front of it. */
-   } else {
-      tseg = head;
-      seg->next = NULL;
-
-      while( tseg->next ) {
-         if( seg->error > tseg->next->error ) {
-            seg->next = tseg->next;
-            seg->prev = tseg;
-            tseg->next->prev = seg;
-            tseg->next = seg;
-            break;
-         }
-         tseg = tseg->next;
-      }
-
-      if( !seg->next ) {
-         tseg->next = seg;
-         seg->prev = tseg;
-      }
-   }
-
-/* Return the new head. */
-   return head;
-}
-
-static void Cache( AstPolygon *this, int *status ){
-/*
-*  Name:
-*     Cache
-
-*  Purpose:
-*     Calculate intermediate values and cache them in the Polygon structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void Cache( AstPolygon *this, int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     This function uses the PointSet stored in the parent Region to calculate 
-*     some intermediate values which are useful in other methods. These
-*     values are stored within the Polygon structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Polygon.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;       /* Pointer to base Frame in Polygon */
-   double **ptr;        /* Pointer to data in the encapsulated PointSet */
-   double end[ 2 ];     /* Start position for edge */
-   double maxwid;       /* Maximum polygon width found so far */
-   double polcen[ 2 ];  /* Polygon centre perpendicular to current edge */
-   double polwid;       /* Polygon width perpendicular to current edge */
-   double start[ 2 ];   /* Start position for edge */
-   int i;               /* Axis index */
-   int nv;              /* Number of vertices in Polygon */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do nothing if the cached information is up to date. */
-   if( this->stale ) {
-
-/* Get a pointer to the base Frame. */
-      frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-   
-/* Get the number of vertices. */
-      nv = astGetNpoint( ((AstRegion *) this)->points );
-   
-/* Get pointers to the coordinate data in the parent Region structure. */
-      ptr = astGetPoints( ((AstRegion *) this)->points );
-   
-/* Free any existing edge information in the Polygon structure. */
-      if( this->edges ) {
-         for( i = 0; i < nv; i++ ) {
-            this->edges[ i ] = astFree( this->edges[ i ] );
-         }
-   
-/* Allocate memory to store new edge information if necessary. */
-      } else {
-         this->edges = astMalloc( sizeof( AstLineDef *)*(size_t) nv );
-         this->startsat = astMalloc( sizeof( double )*(size_t) nv );
-      }
-   
-/* Check pointers can be used safely. */
-      if( this->edges ) {
-   
-/* Create and store a description of each edge. Also form the total
-   distance round the polygon, and the distance from the first vertex
-   at which each edge starts. */
-         this->totlen = 0.0;
-         start[ 0 ] = ptr[ 0 ][ nv - 1 ];
-         start[ 1 ] = ptr[ 1 ][ nv - 1 ];
-
-         for( i = 0; i < nv; i++ ) {
-            end[ 0 ] = ptr[ 0 ][ i ];
-            end[ 1 ] = ptr[ 1 ][ i ];
-            this->edges[ i ] = astLineDef( frm, start, end );
-            start[ 0 ] = end[ 0 ];
-            start[ 1 ] = end[ 1 ];
-
-            this->startsat[ i ] = this->totlen;
-            this->totlen += this->edges[ i ]->length;
-         }     
-
-/* We now look for a point that is inside the polygon. We want a point
-   that is well within the polygon, since points that are only just inside
-   the polygon can give numerical problems. Loop round each edge with 
-   non-zero length. */
-         maxwid = -1.0;
-         for( i = 0; i < nv; i++ ) {
-            if( this->edges[ i ]->length > 0.0 ) {
-
-/* We define another line perpendicular to the current edge, passing
-   through the mid point of the edge, extending towards the inside of the
-   polygon. The following function returns the distance we can travel
-   along this line before we hit any of the other polygon edges. It also
-   puts the position corresponding to half that distance into "polcen". */
-               polwid = Polywidth( frm, this->edges, i, nv, polcen, status );
-
-/* If the width of the polygon perpendicular to the current edge is
-   greater than the width perpdeicular to any other edge, record the
-   width and also store the current polygon centre. */
-               if( polwid > maxwid && polwid != AST__BAD ) {
-                  maxwid = polwid;
-                  (this->in)[ 0 ] = polcen[ 0 ];                  
-                  (this->in)[ 1 ] = polcen[ 1 ];                  
-               }
-            }
-         }
-
-/* If no width was found it probably means that the polygon vertices were
-   given in clockwise order, resulting in the above process probing the
-   infinite extent outside the polygonal hole. In this case any point
-   outside the hole will do, so we use the current contents of the
-   "polcen" array. Set a flag indicating if the vertices are stored in
-   anti-clockwise order. */
-         if( maxwid < 0.0 ) {
-            (this->in)[ 0 ] = polcen[ 0 ];                  
-            (this->in)[ 1 ] = polcen[ 1 ];                  
-            this->acw = 0;
-         } else {
-            this->acw = 1;
-         }
-      }
-   
-/* Free resources */
-      frm = astAnnul( frm );
-
-/* Indicate cached information is up to date. */
-      this->stale = 0;
-   }
-}
-
-static AstPolygon *Downsize( AstPolygon *this, double maxerr, int maxvert, 
-                             int *status ) {
-/*
-*++
-*  Name:
-c     astDownsize
-f     AST_DOWNSIZE
-
-*  Purpose:
-*     Reduce the number of vertices in a Polygon.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "polygon.h"
-c     AstPolygon *astDownsize( AstPolygon *this, double maxerr, int maxvert )
-f     RESULT = AST_DOWNSIZE( THIS, MAXERR, MAXVERT, STATUS )
-
-*  Class Membership:
-*     Polygon method.
-
-*  Description:
-*     This function returns a pointer to a new Polygon that contains a
-*     subset of the vertices in the supplied Polygon. The subset is
-*     chosen so that the returned Polygon is a good approximation to 
-*     the supplied Polygon, within the limits specified by the supplied
-*     parameter values. That is, the density of points in the returned
-*     Polygon is greater at points where the curvature of the boundary of
-*     the supplied Polygon is greater.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Polygon.
-c     maxerr
-f     MAXERR = DOUBLE PRECISION (Given)
-*        The maximum allowed discrepancy between the supplied and
-*        returned Polygons, expressed as a geodesic distance within the
-*        Polygon's coordinate frame. If this is zero or less, the
-*        returned Polygon will have the number of vertices specified by 
-c        maxvert.
-f        MAXVERT.
-c     maxvert 
-f     MAXVERT = INTEGER (Given)
-*        The maximum allowed number of vertices in the returned Polygon.
-*        If this is less than 3, the number of vertices in the returned 
-*        Polygon will be the minimum needed to achieve the maximum 
-*        discrepancy specified by
-c        maxerr.
-f        MAXERR.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astDownsize()
-f     AST_DOWNSIZE = INTEGER
-*        Pointer to the new Polygon.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frm;         /* Base Frame from the Polygon */
-   AstPointSet *pset;     /* PointSet holding vertices of downsized polygon */
-   AstPolygon *result;    /* Returned pointer to new Polygon */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame of the Polygon. */
-   frm = astGetFrame( ((AstRegion *) this)->frameset, AST__BASE );
-
-/* Create a PointSet holding the vertices of the downsized polygon. */
-   pset = DownsizePoly( ((AstRegion *) this)->points, maxerr, maxvert, 
-                        frm, status );
-
-/* Take a deep copy of the supplied Polygon. */
-   result = astCopy( this );
-
-/* Change the PointSet within the result Polygon to the one created above. */ \
-   SetPointSet( result, pset, status ); \
-
-/* Free resources. */
-   frm = astAnnul( frm );
-   pset = astAnnul( pset );
-
-/* If an error occurred, annul the returned Polygon. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *DownsizePoly( AstPointSet *pset, double maxerr, 
-                                  int maxvert, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     DownsizePoly
-
-*  Purpose:
-*     Reduce the number of vertices in a Polygon.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*    #include "polygon.h"
-*    AstPointSet *DownsizePoly( AstPointSet *pset, double maxerr, int maxvert, 
-*                               AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Polygon member function.
-
-*  Description:
-*     This function returns a pointer to a new PointSet that contains a
-*     subset of the vertices in the supplied PointSet. The subset is
-*     chosen so that the returned polygon is a good approximation to 
-*     the supplied polygon, within the limits specified by the supplied
-*     parameter values. That is, the density of points in the returned
-*     polygon is greater at points where the curvature of the boundary of
-*     the supplied polygon is greater.
-
-*  Parameters:
-*     pset 
-*        Pointer to the PointSet holding the polygon vertices.
-*     maxerr
-*        The maximum allowed discrepancy between the supplied and
-*        returned Polygons, expressed as a geodesic distance within the
-*        Polygon's coordinate frame. If this is zero or less, the
-*        returned Polygon will have the number of vertices specified by 
-*        maxvert.
-*     maxvert 
-*        The maximum allowed number of vertices in the returned Polygon.
-*        If this is less than 3, the number of vertices in the returned 
-*        Polygon will be the minimum needed to achieve the maximum 
-*        discrepancy specified by
-*        maxerr.
-*     frm
-*        Pointer to the Frame in which the polygon is defined.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        Pointer to the new PointSet.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;   /* Returned pointer to new PointSet */
-   Segment *head;         /* Pointer to new polygon edge with highest error */
-   Segment *seg1;         /* Pointer to new polygon edge */
-   Segment *seg2;         /* Pointer to new polygon edge */
-   Segment *seg3;         /* Pointer to new polygon edge */
-   double **ptr;          /* Pointer to arrays of axis values */
-   double *x;             /* Pointer to array of X values for old Polygon */
-   double *xnew;          /* Pointer to array of X values for new Polygon */
-   double *y;             /* Pointer to array of Y values for old Polygon */
-   double *ynew;          /* Pointer to array of Y values for new Polygon */
-   double x1;             /* Lowest X value at any vertex */
-   double x2;             /* Highest X value at any vertex */
-   double y1;             /* Lowest Y value at any vertex */
-   double y2;             /* Highest Y value at any vertex */
-   int *newpoly;          /* Holds indices of retained input vertices */
-   int i1;                /* Index of first vertex added to output polygon */
-   int i1x;               /* Index of vertex with lowest X */
-   int i1y;               /* Index of vertex with lowest Y */
-   int i2;                /* Index of second vertex added to output polygon */
-   int i2x;               /* Index of vertex with highest X */
-   int i2y;               /* Index of vertex with highest Y */
-   int i3;                /* Index of third vertex added to output polygon */
-   int iadd;              /* Normalised vertex index */
-   int iat;               /* Index at which to store new vertex index */
-   int newlen;            /* Number of vertices currently in new Polygon */
-   int nv;                /* Number of vertices in old Polygon */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the number of vertices in the supplied polygon. */
-   nv = astGetNpoint( pset );
-
-/* If the maximum error allowed is zero, and the maximum number of
-   vertices is equal to or greater than the number in the supplied
-   polygon, just return a deep copy of the supplied PointSet. */
-   if( maxerr <= 0.0 && ( maxvert < 3 || maxvert >= nv ) ) {
-      result = astCopy( pset );
-
-/* Otherwise... */
-   } else {
-
-/* Get pointers to the X and Y arrays holding the vertex coordinates in
-   the supplied polygon. */
-      ptr = astGetPoints( pset );
-      x = ptr[ 0 ];
-      y = ptr[ 1 ];
-
-/* Allocate memory for an array to hold the original indices of the vertices 
-   to be used to create the returned Polygon. This array is expanded as
-   needed. */
-      newpoly = astMalloc( 10*sizeof( int ) );
- 
-/* Check the pointers can be used safely. */
-      if( astOK ) {
-
-/* We first need to decide on three widely spaced vertices which form a
-   reasonable triangular approximation to the whole polygon. First find
-   the vertices with the highest and lowest Y values, and the highest and
-   lowest X values. */
-         x1 = DBL_MAX;
-         x2 = -DBL_MAX;
-         y1 = DBL_MAX;
-         y2 = -DBL_MAX;
-
-         i1y = i1x = 0;
-         i2y = i2x = nv/2;
-         
-         for( i3 = 0; i3 < nv; i3++ ) {
-            if( y[ i3 ] < y1 ) {
-               y1 = y[ i3 ];
-               i1y = i3;
-            } else if( y[ i3 ] > y2 ) {
-               y2 = y[ i3 ];
-               i2y = i3;
-            }
-
-            if( x[ i3 ] < x1 ) {
-               x1 = x[ i3 ];
-               i1x = i3;
-            } else if( x[ i3 ] > x2 ) {
-               x2 = x[ i3 ];
-               i2x = i3;
-            }
-         }
-
-/* Use the axis which spans the greater range. */
-         if( y2 - y1 > x2 - x1 ) {
-            i1 = i1y;
-            i2 = i2y;
-         } else {
-            i1 = i1x;
-            i2 = i2x;
-         }
-
-/* The index with vertex i1 is definitely going to be one of our three
-   vertices. We are going to use the line from i1 to i2 to choose the two 
-   other vertices to use. Create a structure describing the segment of the 
-   Polygon from the lowest value on the selected axis (X or Y) to the 
-   highest value. As always, the polygons is traversed in an anti-clockwise 
-   direction. */
-         seg1 = NewSegment( NULL, i1, i2, nv, status );
-
-/* Find the vertex within this segment which is furthest away from the
-   line on the right hand side (as moving from vertex i1 to vertex i2). */
-         FindMax( seg1, frm, x, y, nv, 0, status );
-
-/* Likewise, create a structure describing the remained of the Polygon
-   (i.e. the segment from the highest value on the selected axis to the 
-   lowest value). Then find the vertex within this segment which is 
-   furthest away from the line on the right hand side. */
-         seg2 = NewSegment( NULL, i2, i1, nv, status );
-         FindMax( seg2, frm, x, y, nv, 0, status );
-
-/* Select the segment for which the found vertex is furthest from the
-   line. */
-         if( seg2->error > seg1->error ) {
-
-/* If the second segment, we will use the vertex that is farthest from
-   the line as one of our threee vertices. To ensure that movement from
-   vertex i1 to i2 to i3 is anti-clockwise, we must use this new vertex
-   as vertex i3, not i2. */
-            i3 = seg2->imax;
-
-/* Create a description of the polygon segment from vertex i1 to i3, and
-   find the vertex which is furthest to the right of the line joining the
-   two vertices. We use this as the middle vertex (i2). */
-            seg1 = NewSegment( seg1, i1, i3, nv, status );
-            FindMax( seg1, frm, x, y, nv, 0, status );
-            i2 = seg1->imax;
-
-/* Do the same if we are choosing the other segment, ordering the
-   vertices to retain anti-clockwise movement from i1 to i2 to i3. */
-         } else {
-            i2 = seg1->imax;
-            seg1 = NewSegment( seg1, i2, i1, nv, status );
-            FindMax( seg1, frm, x, y, nv, 0, status );
-            i3 = seg1->imax;
-         }
-
-/* Ensure the vertex indices are in the first cycle. */
-         if( i2 >= nv ) i2 -= nv;
-         if( i3 >= nv ) i3 -= nv;
-
-/* Create Segment structures to describe each of these three edges. */
-         seg1 = NewSegment( seg1, i1, i2, nv, status );
-         seg2 = NewSegment( seg2, i2, i3, nv, status );
-         seg3 = NewSegment( NULL, i3, i1, nv, status );
-
-/* Record these 3 vertices in an array holding the original indices of 
-   the vertices to be used to create the returned Polygon. */   
-         newpoly[ 0 ] = i1;
-         newpoly[ 1 ] = i2; 
-         newpoly[ 2 ] = i3;
-
-/* Indicate the new polygon currently has 3 vertices. */
-         newlen = 3;
-
-/* Search the old vertices between the start and end of segment 3, looking 
-   for the vertex which lies furthest from the line of segment 3. The
-   residual between this point and the line is stored in the Segment
-   structure, as is the index of the vertex at which this maximum residual
-   occurred. */
-         FindMax( seg3, frm, x, y, nv, 1, status );
-
-/* The "head" variable points to the head of a double linked list of
-   Segment structures. This list is ordered by residual, so that the 
-   Segment with the maximum residual is at the head, and the Segment 
-   with the minimum residual is at the tail. Initially "seg3" is at the
-   head. */
-         head = seg3;
-
-/* Search the old vertices between the start and end of segment 1, looking 
-   for the vertex which lies furthest from the line of segment 1. The
-   residual between this point and the line is stored in the Segment
-   structure, as is the index of the vertex at which this maximum residual
-   occurred. */
-         FindMax( seg1, frm, x, y, nv, 1, status );
-
-/* Insert segment 1 into the linked list of Segments, at a position that
-   maintains the ordering of the segments by error. Thus the head of the
-   list will still have the max error. */
-         head = AddToChain( head, seg1, status );
-
-/* Do the same for segment 2. */
-         FindMax( seg2, frm, x, y, nv, 1, status );
-         head = AddToChain( head, seg2, status );
-
-/* If the maximum allowed number of vertices in the output Polygon is
-   less than 3, allow any number of vertices up to the number in the
-   input Polygon (termination will then be determined just by "maxerr"). */
-         if( maxvert < 3 ) maxvert = nv;
-
-/* Loop round adding an extra vertex to the returned Polygon until the
-   maximum residual between the new and old polygons is no more than 
-   "maxerr". Abort early if the specified maximum number of vertices is
-   reached. */
-         while( head->error > maxerr && newlen < maxvert ) {
-
-/* The segment at the head of the list has the max error (that is, it is
-   the segment that departs most from the supplied Polygon). To make the
-   new polygon a better fit to the old polygon, we add the vertex that is
-   furthest away from this segment to the new polygon. Remember that a
-   polygon is cyclic so if the vertex has an index that is greater than the
-   number of vertices in the old polygon, reduce the index by the number
-   of vertices in the old polygon. */
-            iadd = head->imax;
-            if( iadd >= nv ) iadd -= nv;
-            iat = newlen++;
-            newpoly = astGrow( newpoly, newlen, sizeof( int ) );
-            if( !astOK ) break;
-            newpoly[ iat ] = iadd;
-
-/* We now split the segment that had the highest error into two segments.
-   The split occurs at the vertex that had the highest error. */
-            seg1 = NewSegment( NULL, head->imax, head->i2, nv, status );
-            seg2 = head;
-            seg2->i2 = head->imax; 
-
-/* We do not know where these two new segments should be in the ordered
-   linked list, so remove them from the list. */
-            head = RemoveFromChain( head, seg1, status );
-            head = RemoveFromChain( head, seg2, status );
-
-/* Find the vertex that deviates most from the first of these two new
-   segments, and then add the segment into the list of vertices, using
-   the maximum deviation to determine the position of the segment within
-   the list. */
-            FindMax( seg1, frm, x, y, nv, 1, status );
-            head = AddToChain( head, seg1, status );
-
-/* Do the same for the second new segment. */
-            FindMax( seg2, frm, x, y, nv, 1, status );
-            head = AddToChain( head, seg2, status );
-         }
-
-/* Now we have reached the required accuracy, free resources. */
-         while( head ) {
-            seg1 = head;
-            head = head->next;
-            seg1 = astFree( seg1 );
-         }
-
-/* If no vertices have been left out, return a deep copy of the supplied
-   PointSet. */
-         if( newlen == nv ) {
-            result = astCopy( pset );
-
-/* Otherwise, sort the indices of the vertices to be retained so that they 
-   are in the same order as they were in the supplied Polygon. */
-         } else if( astOK ){
-            qsort( newpoly, newlen, sizeof( int ), IntCmp );
-
-/* Create a new PointSet and get pointers to its axis values. */
-            result = astPointSet( newlen, 2, " ", status );
-            ptr = astGetPoints( result );
-            xnew = ptr[ 0 ];
-            ynew = ptr[ 1 ];
-
-/* Copy the axis values for the retained vertices from the old to the new
-   PointSet. */
-            if( astOK ) {
-               for( iat = 0; iat < newlen; iat++ ) {
-                  *(xnew++) = x[ newpoly[ iat ] ];
-                  *(ynew++) = y[ newpoly[ iat ] ];
-               }
-            }
-         }
-      }
-
-/* Free resources. */
-      newpoly = astFree( newpoly );
-   }
-
-/* If an error occurred, annul the returned PointSet. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-/*
-*  Name:
-*     FindInsidePoint
-
-*  Purpose:
-*     Find a point that is inside the required outline.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void FindInsidePoint<Oper><X>( <Xtype> value, <Xtype> array[], 
-*                                    int lbnd[ 2 ], int ubnd[ 2 ], 
-*                                    int *inx, int *iny, int *iv, 
-*                                    int *status );
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     The central pixel in the array is checked to see if its value meets
-*     the requirements implied by <Oper> and "value". If so, its pixel
-*     indices and vector index are returned> if not, a spiral search is
-*     made until such a pixel value is found.
-
-*  Parameters:
-*     value
-*        The data value defining valid pixels.
-*     array
-*        The data array.
-*     lbnd 
-*        The lower pixel index bounds of the array.
-*     ubnd 
-*        The upper pixel index bounds of the array.
-*     inx 
-*        Pointer to an int in which to return the X pixel index of the
-*        first point that meets the requirements implied by <oper> and 
-*        "value".
-*     iny
-*        Pointer to an int in which to return the Y pixel index of the
-*        first point that meets the requirements implied by <oper> and 
-*        "value".
-*     iv
-*        Pointer to an int in which to return the vector index of the
-*        first point that meets the requirements implied by <oper> and 
-*        "value".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes: 
-*     - <Oper> must be one of LT, LE, EQ, NE, GE, GT.
-
-
-*/
-
-/* Define a macro to implement the function for a specific data
-   type and operation. */
-#define MAKE_FINDINSIDEPOINT(X,Xtype,Oper,OperI) \
-static void FindInsidePoint##Oper##X( Xtype value, Xtype array[], \
-                                      int lbnd[ 2 ], int ubnd[ 2 ], \
-                                      int *inx, int *iny, int *iv, \
-                                      int *status ){ \
-\
-/* Local Variables: */ \
-   Xtype *pv;        /* Pointer to next data value to test */ \
-   const char *text; /* Pointer to text describing oper */ \
-   int cy;           /* Central row index */ \
-   int iskin;        /* Index of spiral layer being searched */ \
-   int nskin;        /* Number of spiral layers to search */ \
-   int nx;           /* Pixel per row */ \
-   int tmp;          /* Temporary storage */ \
-   int xhi;          /* High X pixel index bound of current skin */ \
-   int xlo;          /* Low X pixel index bound of current skin */ \
-   int yhi;          /* High X pixel index bound of current skin */ \
-   int ylo;          /* Low X pixel index bound of current skin */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Find number of pixels in one row of the array. */ \
-   nx = ( ubnd[ 0 ] - lbnd[ 0 ] + 1 ); \
-\
-/* Find the pixel indices of the central pixel */ \
-   *inx = ( ubnd[ 0 ] + lbnd[ 0 ] )/2; \
-   *iny = ( ubnd[ 1 ] + lbnd[ 1 ] )/2; \
-\
-/* Initialise the vector index and pointer to refer to the central pixel. */ \
-   *iv = ( *inx - lbnd[ 0 ] ) + nx*( *iny - lbnd[ 1 ] ) ; \
-   pv = array + (*iv); \
-\
-/* Test the pixel value, returning if it is valid. This \
-   relies on the compiler optimisation to remove the "if" statements \
-   for all but the operation appropriate to the function being defined. */ \
-   if( OperI == AST__LT ) { \
-      if( *pv < value ) return; \
-\
-   } else if( OperI == AST__LE ) { \
-      if( *pv <= value ) return; \
-\
-   } else if( OperI == AST__EQ ) { \
-      if( *pv == value ) return; \
-\
-   } else if( OperI == AST__NE ) { \
-      if( *pv != value ) return; \
-\
-   } else if( OperI == AST__GE ) { \
-      if( *pv >= value ) return; \
-\
-   } else { \
-      if( *pv > value ) return; \
-   } \
-\
-/* The central pixel is invalid if we arrive here. So we need to do a \
-   spiral search out from the centre looking for a valid pixel. Record \
-   the central row index (this is the row at which we jump to the next \
-   outer skin when doing the spiral search below). */ \
-   cy = *iny; \
-\
-/* Find how many skins can be searched as part of the spiral search \
-   before the edge of the array is encountered. */ \
-   nskin = ubnd[ 0 ] - *inx; \
-   tmp = *inx - lbnd[ 0 ]; \
-   if( tmp < nskin ) nskin = tmp; \
-   tmp = ubnd[ 1 ] - *iny; \
-   if( tmp < nskin ) nskin = tmp; \
-   tmp = *iny - lbnd[ 1 ]; \
-   if( tmp < nskin ) nskin = tmp; \
-\
-/* Initialise the skin box bounds to be just the central pixel. */ \
-   xlo = xhi = *inx; \
-   ylo = yhi = *iny; \
-\
-/* Loop round each skin looking for a valid test pixel. */ \
-   for( iskin = 0; iskin < nskin; iskin++ ) { \
-\
-/* Increment the upper and lower bounds of the box forming the next \
-   skin. */ \
-      xhi++; \
-      xlo--; \
-      yhi++; \
-      ylo--; \
-\
-/* Initialise things for the first pixel in the new skin by moving one \
-   pixel to the right. */ \
-      pv++; \
-      (*iv)++; \
-      (*inx)++; \
-\
-/* Move up the right hand edge of the box corresponding to the current \
-   skin. We start at the middle of the right hand edge. */ \
-      for( *iny = cy; *iny <= yhi; (*iny)++ ) { \
-\
-/* Test the pixel value, returning if it is valid. This relies on the \
-   compiler optimisation to remove the "if" statements for all but the \
-   operation appropriate to the function being defined. */ \
-         if( OperI == AST__LT ) { \
-            if( *pv < value ) return; \
-\
-         } else if( OperI == AST__LE ) { \
-            if( *pv <= value ) return; \
-\
-         } else if( OperI == AST__EQ ) { \
-            if( *pv == value ) return; \
-\
-         } else if( OperI == AST__NE ) { \
-            if( *pv != value ) return; \
-\
-         } else if( OperI == AST__GE ) { \
-            if( *pv >= value ) return; \
-\
-         } else { \
-            if( *pv > value ) return; \
-         } \
-\
-/* Move up a pixel. */ \
-         pv += nx; \
-         *iv += nx; \
-      } \
-\
-/* Move down a pixel so that *iny == yhi. */ \
-      pv -= nx; \
-      *iv -= nx; \
-      (*iny)--; \
-\
-/* Move left along the top edge of the box corresponding to the current \
-   skin. */ \
-      for( *inx = xhi; *inx >= xlo; (*inx)-- ) { \
-\
-/* Test the pixel value, returning if it is valid. */ \
-         if( OperI == AST__LT ) { \
-            if( *pv < value ) return; \
-\
-         } else if( OperI == AST__LE ) { \
-            if( *pv <= value ) return; \
-\
-         } else if( OperI == AST__EQ ) { \
-            if( *pv == value ) return; \
-\
-         } else if( OperI == AST__NE ) { \
-            if( *pv != value ) return; \
-\
-         } else if( OperI == AST__GE ) { \
-            if( *pv >= value ) return; \
-\
-         } else { \
-            if( *pv > value ) return; \
-         } \
-\
-/* Move left a pixel. */ \
-         pv--; \
-         (*iv)--; \
-      } \
-\
-/* Move right a pixel so that *inx == xlo. */ \
-      pv++; \
-      (*iv)++; \
-      (*inx)++; \
-\
-/* Move down along the left hand edge of the box corresponding to the current \
-   skin. */ \
-      for( *iny = yhi; *iny >= ylo; (*iny)-- ) { \
-\
-/* Test the pixel value, returning if it is valid. */ \
-         if( OperI == AST__LT ) { \
-            if( *pv < value ) return; \
-\
-         } else if( OperI == AST__LE ) { \
-            if( *pv <= value ) return; \
-\
-         } else if( OperI == AST__EQ ) { \
-            if( *pv == value ) return; \
-\
-         } else if( OperI == AST__NE ) { \
-            if( *pv != value ) return; \
-\
-         } else if( OperI == AST__GE ) { \
-            if( *pv >= value ) return; \
-\
-         } else { \
-            if( *pv > value ) return; \
-         } \
-\
-/* Move down a pixel. */ \
-         pv -= nx; \
-         *iv -= nx; \
-      } \
-\
-/* Move up a pixel so that *iny == ylo. */ \
-      pv += nx; \
-      *iv += nx; \
-      (*iny)++; \
-\
-/* Move right along the bottom edge of the box corresponding to the current \
-   skin. */ \
-      for( *inx = xlo; *inx <= xhi; (*inx)++ ) { \
-\
-/* Test the pixel value, returning if it is valid. */ \
-         if( OperI == AST__LT ) { \
-            if( *pv < value ) return; \
-\
-         } else if( OperI == AST__LE ) { \
-            if( *pv <= value ) return; \
-\
-         } else if( OperI == AST__EQ ) { \
-            if( *pv == value ) return; \
-\
-         } else if( OperI == AST__NE ) { \
-            if( *pv != value ) return; \
-\
-         } else if( OperI == AST__GE ) { \
-            if( *pv >= value ) return; \
-\
-         } else { \
-            if( *pv > value ) return; \
-         } \
-\
-/* Move right a pixel. */ \
-         pv++; \
-         (*iv)++; \
-      } \
-\
-/* Move left a pixel so that *inx == xhi. */ \
-      pv--; \
-      (*iv)--; \
-      (*inx)--; \
-\
-/* Move up the right hand edge of the box correspionding to the current \
-   skin. We stop just below the middle of the right hand edge. */ \
-      for( *iny = ylo; *iny < cy; (*iny)++ ) { \
-\
-/* Test the pixel value, returning if it is valid. This relies on the \
-   compiler optimisation to remove the "if" statements for all but the \
-   operation appropriate to the function being defined. */ \
-         if( OperI == AST__LT ) { \
-            if( *pv < value ) return; \
-\
-         } else if( OperI == AST__LE ) { \
-            if( *pv <= value ) return; \
-\
-         } else if( OperI == AST__EQ ) { \
-            if( *pv == value ) return; \
-\
-         } else if( OperI == AST__NE ) { \
-            if( *pv != value ) return; \
-\
-         } else if( OperI == AST__GE ) { \
-            if( *pv >= value ) return; \
-\
-         } else { \
-            if( *pv > value ) return; \
-         } \
-\
-/* Move up a pixel. */ \
-         pv += nx; \
-         *iv += nx; \
-      } \
-   } \
-\
-/* Report an error if no inside pooint could be found. */ \
-   if( OperI == AST__LT ) { \
-      text = "less than"; \
-   } else if( OperI == AST__LE ) { \
-      text = "less than or equal to"; \
-   } else if( OperI == AST__EQ ) { \
-      text = "equal to"; \
-   } else if( OperI == AST__NE ) { \
-      text = "not equal to"; \
-   } else if( OperI == AST__GE ) { \
-      text = "greater than or equal to"; \
-   } else { \
-      text = "greater than"; \
-   } \
-   astError( AST__NONIN, "astOutline"#X": Could not find a pixel value %s " \
-             "%g in the supplied array.", status, text, (double) value ); \
-} 
-
-/* Define a macro that uses the above macro to to create implementations
-   of FindInsidePoint for all operations. */
-#define MAKEALL_FINDINSIDEPOINT(X,Xtype) \
-MAKE_FINDINSIDEPOINT(X,Xtype,LT,AST__LT) \
-MAKE_FINDINSIDEPOINT(X,Xtype,LE,AST__LE) \
-MAKE_FINDINSIDEPOINT(X,Xtype,EQ,AST__EQ) \
-MAKE_FINDINSIDEPOINT(X,Xtype,GE,AST__GE) \
-MAKE_FINDINSIDEPOINT(X,Xtype,GT,AST__GT) \
-MAKE_FINDINSIDEPOINT(X,Xtype,NE,AST__NE)
-
-/* Expand the above macro to generate a function for each required
-   data type and operation. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKEALL_FINDINSIDEPOINT(LD,long double) 
-#endif
-MAKEALL_FINDINSIDEPOINT(D,double)
-MAKEALL_FINDINSIDEPOINT(L,long int)
-MAKEALL_FINDINSIDEPOINT(UL,unsigned long int)
-MAKEALL_FINDINSIDEPOINT(I,int)
-MAKEALL_FINDINSIDEPOINT(UI,unsigned int)
-MAKEALL_FINDINSIDEPOINT(S,short int)
-MAKEALL_FINDINSIDEPOINT(US,unsigned short int)
-MAKEALL_FINDINSIDEPOINT(B,signed char)
-MAKEALL_FINDINSIDEPOINT(UB,unsigned char)
-MAKEALL_FINDINSIDEPOINT(F,float)
-
-/* Undefine the macros. */
-#undef MAKE_FINDINSIDEPOINT
-#undef MAKEALL_FINDINSIDEPOINT
-
-static void FindMax( Segment *seg, AstFrame *frm, double *x, double *y, 
-                     int nv, int abs, int *status ){
-/*
-*  Name:
-*     FindMax
-
-*  Purpose:
-*     Find the maximum discrepancy between a given line segment and the 
-*     Polygon being downsized.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void FindMax( Segment *seg, AstFrame *frm, double *x, double *y, 
-*                   int nv, int abs, int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     The supplied Segment structure describes a range of vertices in 
-*     the polygon being downsized. This function checks each of these
-*     vertices to find the one that lies furthest from the line joining the
-*     first and last vertices in the segment. The maximum error, and the
-*     vertex index at which this maximum error is found, is stored in the
-*     Segment structure. 
-
-*  Parameters:
-*     seg
-*        The structure describing the range of vertices to check. It
-*        corresponds to a candidate edge in the downsized polygon.
-*     frm
-*        The Frame in which the positions are defined.
-*     x
-*        Pointer to the X axis values in the original Polygon.
-*     y
-*        Pointer to the Y axis values in the original Polygon.
-*     nv
-*        Total number of vertics in the old Polygon..
-*     abs
-*        If non-zero, then the stored maximum is the position with
-*        maximum absolute error. Otherwise, the stored maximum is the 
-*        position with maximum positive error (positive errors are to the
-*        right when travelling from start to end of the segment).
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1; /* PointSet holding vertex positions */
-   AstPointSet *pset2; /* PointSet holding offset par/perp components */
-   double **ptr1;      /* Pointers to "pset1" data arrays */
-   double **ptr2;      /* Pointers to "pset2" data arrays */
-   double *px;         /* Pointer to next X value */
-   double *py;         /* Pointer to next Y value */
-   double ax;          /* X value at start */
-   double ay;          /* Y value at start */
-   double ba;          /* Distance between a and b */
-   double bax;         /* X increment from a to b */
-   double bay;         /* Y increment from a to b */
-   double cax;         /* X increment from a to c */
-   double cay;         /* Y increment from a to c */
-   double end[ 2 ];    /* Position of starting vertex */
-   double error;       /* Error value for current vertex */
-   double start[ 2 ];  /* Position of starting vertex */
-   int i1;             /* Starting index (always in first cycle) */
-   int i2;             /* Ending index converted to first cycle */
-   int i2b;            /* Upper vertex limit in first cycle */
-   int i;              /* Loop count */
-   int n;              /* Number of vertices to check */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Stuff needed for handling cyclic redundancy of vertex indices. */
-   i1 = seg->i1;
-   i2 = seg->i2;
-   n = i2 - i1 - 1;
-   i2b = i2;
-   if( i2 >= nv ) {
-      i2 -= nv;
-      i2b = nv;
-   }
-
-/* If the segment has no intermediate vertices, set the segment error to
-   zero and return. */
-   if( n < 1 ) {
-      seg->error = 0.0;
-      seg->imax = i1;
-
-/* For speed, we use simple plane geometry if the Polygon is defined in a
-   simple Frame. */
-   } else if( !strcmp( astGetClass( frm ), "Frame" ) ) {
-
-/* Point "a" is the vertex that marks the start of the segment. Point "b" 
-   is the vertex that marks the end of the segment. */
-      ax = x[ i1 ];      
-      ay = y[ i1 ];      
-      bax = x[ i2 ] - ax;
-      bay = y[ i2 ] - ay;
-      ba = sqrt( bax*bax + bay*bay );
-   
-/* Initialise the largest error found so far. */
-      seg->error = -1.0;
-
-/* Check the vertices from the start (plus one) up to the end (minus one) 
-   or the last vertex (which ever comes first). */
-      for( i = i1 + 1; i < i2b; i++ ) {
-
-/* Position "c" is the vertex being tested. Find the squared distance from 
-   "c" to the line joining "a" and "b". */
-         cax = x[ i ] - ax;      
-         cay = y[ i ] - ay;      
-         error = ( bay*cax - cay*bax )/ba;
-         if( abs ) error = fabs( error );
-
-/* If this is the largest value found so far, record it. Note the error
-   here is a squared distance. */
-         if( error > seg->error ) {
-            seg->error = error;
-            seg->imax = i;
-         }
-      }
-   
-/* If the end vertex is in the next cycle, check the remaining vertex
-   posI would have thought a telentitions in the same way. */
-      if( i2b != i2 ) {
-
-         for( i = 0; i < i2; i++ ) {
-
-            cax = x[ i ] - ax;      
-            cay = y[ i ] - ay;      
-            error = ( bay*cax - cay*bax )/ba;
-            if( abs ) error = fabs( error );
-
-            if( error > seg->error ) {
-               seg->error = error;
-               seg->imax = i + i2b;
-            }
-
-         }
-      }
-
-/* If the polygon is not defined in a simple Frame, we use the overloaded 
-   Frame methods to do the geometry. */
-   } else {
-
-/* Create a PointSet to hold the positions of the vertices to test. We do
-   not need to test the start or end vertex. */
-      pset1 = astPointSet( n, 2, " ", status );
-      ptr1 = astGetPoints( pset1 );
-      if( astOK ) {
-
-/* Copy the vertex axis values form the start (plus one) up to the end
-   (minus one) vertex or the last vertex (which ever comes first). */
-         px = ptr1[ 0 ];
-         py = ptr1[ 1 ];
-
-         for( i = i1 + 1; i < i2b; i++ ){ 
-            *(px++) = x[ i ];
-            *(py++) = y[ i ];
-         }
-
-/* If the end vertex is in the next cycle, copy the remaining vertex
-   positions into the PointSet. */
-         if( i2b != i2 ) {
-            for( i = 0; i < i2; i++ ) {
-               *(px++) = x[ i ];
-               *(py++) = y[ i ];
-            }
-         }
-
-/* Record the start and end vertex positions. */
-         start[ 0 ] = x[ i1 ];
-         start[ 1 ] = y[ i1 ];
-         end[ 0 ] = x[ i2 ];
-         end[ 1 ] = y[ i2 ];
-
-/* Resolve the vector from the start to each vertex into two components,
-   parallel and perpendicular to the start->end vector. */
-         pset2 = astResolvePoints( frm, start, end, pset1, NULL );
-         ptr2 = astGetPoints( pset2 );
-         if( astOK ) {
-
-/* Find the vertex with largest perpendicular component. */
-            seg->error = -1.0;
-            py = ptr2[ 1 ];
-            for( i = 1; i <= n; i++ ) {
-
-               error = *(py++);
-               if( abs ) error = fabs( error );
-
-               if( error > seg->error ) {
-                  seg->error = error;
-                  seg->imax = i + i1;
-               }
-
-            }
-         }
-
-/* Free resources. */
-         pset2 = astAnnul( pset2 );
-      }
-      pset1 = astAnnul( pset1 );
-   }
-}
-
-static int GetBounded( AstRegion *this, int *status ) {
-/*
-*  Name:
-*     GetBounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     int GetBounded( AstRegion *this, int *status ) 
-
-*  Class Membership:
-*     Polygon method (over-rides the astGetBounded method inherited from
-*     the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the Region is bounded.
-*     The implementation provided by the base Region class is suitable
-*     for Region sub-classes representing the inside of a single closed 
-*     curve (e.g. Circle, Interval, Box, etc). Other sub-classes (such as
-*     CmpRegion, PointList, etc ) may need to provide their own
-*     implementations.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   int neg;                  /* Has the Polygon been negated? */
-   int result;               /* Returned result */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Ensure cached information is available. */
-   Cache( (AstPolygon *) this, status );
-
-/* See if the Polygon has been negated. */
-   neg = astGetNegated( this );
-
-/* If the polygon vertices are stored in anti-clockwise order, then the
-   polygon is bounded if it has not been negated. */
-   if( ( (AstPolygon *) this)->acw ) {
-      result = (! neg );
-
-/* If the polygon vertices are stored in clockwise order, then the
-   polygon is bounded if it has been negated. */
-   } else {
-      result = neg;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitPolygonVtab_(  AstPolygonVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPolygonVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Polygon.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void astInitPolygonVtab( AstPolygonVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Polygon vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Polygon class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPolygon) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->Downsize = Downsize;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_resetcache = region->ResetCache;
-   region->ResetCache = ResetCache;
-
-   region->RegPins = RegPins;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegBaseBox = RegBaseBox;
-   region->RegTrace = RegTrace;
-   region->GetBounded = GetBounded;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDump( vtab, Dump, "Polygon", "Polygonal region" );
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int IntCmp( const void *a, const void *b ){
-/*
-*  Name:
-*     IntCmp
-
-*  Purpose:
-*     An integer comparison function for the "qsort" function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     int IntCmp( const void *a, const void *b )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     See the docs for "qsort".
-
-*  Parameters:
-*     a
-*        Pointer to the first int
-*     b
-*        Pointer to the second int
-
-*  Returnd Value:
-*     Positive, negative or zero, depending on whether a is larger than,
-*     equal to, or less than b.
-
-*/
-
-   return *((int*)a) - *((int*)b);
-}
-
-static Segment *NewSegment( Segment *seg, int i1, int i2, int nvert, 
-                            int *status ){
-/*
-*  Name:
-*     NewSegment
-
-*  Purpose:
-*     Initialise a structure describing a segment of the new Polygon
-*     created by astDownsize.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     Segment *NewSegment( Segment *seg, int i1, int i2, int nvert, 
-*                          int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     This function initialises the contents of a structure describing
-*     the specified range of vertices within a Polygon. The cyclic nature 
-*     of vertex indices is taken into account.
-*
-*     If no structure is supplied, memory is allocated to hold a new
-*     structure.
-
-*  Parameters:
-*     seg
-*        Pointer to a structure to initialise, or NULL if a new structure
-*        is to be allocated.
-*     i1
-*        The index of a vertex within the old Polygon (supplied to 
-*        astDownsize) that marks the start of the new line segment in 
-*        the downsized polygon.
-*     i2
-*        The index of a vertex within the old Polygon (supplied to 
-*        astDownsize) that marks the end of the new line segment in 
-*        the downsized polygon.
-*     nvert
-*        Total number of vertics in the old Polygon..
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returnd Value:
-*     Pointer to the initialised Segment structure. It should be freed using
-*     astFree when no longer needed.
-
-*/
-
-/* Local Variables: */
-   Segment *result;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure to be initialised, allocating memory 
-   for a new structure if none was supplied. */
-   result = seg ? seg : astMalloc( sizeof( Segment ) );
-
-/* Check the pointer can be used safely. */
-   if( result ) {
-
-/* If the supplied ending index is less than the starting index, the
-   ending index must have gone all the way round the polygon and started
-   round again. Increase the ending index by the number of vertices to 
-   put it in the same cycle as the starting index. */
-      if( i2 < i1 ) i2 += nvert;
-
-/* If the supplied starting index is within the first cycle (i.e. zero ->
-   nvert-1 ), use the indices as they are (which may mean that the ending
-   index is greater than nvert, but this is handled correctly by other
-   functions). */
-      if( i1 < nvert ) {
-         result->i1 = i1;
-         result->i2 = i2;
-
-/* If the supplied starting index is within the second cycle (i.e. nvert 
-   or greater) the ending index will be even greater, so we can reduce
-   both by "nvert" to put them both in the first cycle. The goal is that
-   the starting index should always be in the first cycle, but the ending
-   index may possibly be in the second cycle. */
-      } else {
-         result->i1 = i1 - nvert;
-         result->i2 = i2 - nvert;
-      }
-
-/* Nullify the links to other Segments */
-      result->next = NULL;
-      result->prev = NULL;
-   }
-
-/* Return the pointer to the new Segment structure. */
-   return result;
-}
-
-/*
-*++
-*  Name:
-c     astOutline<X>
-f     AST_OUTLINE<X>
-
-*  Purpose:
-*     Create a new Polygon outling values in a 2D data grid.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "polygon.h"
-c     AstPolygon *astOutline<X>( <Xtype> value, int oper, <Xtype> array[],
-c                                int lbnd[2], int ubnd[2], double maxerr,
-c                                int maxvert, int inside[2], int starpix )
-f     RESULT = AST_OUTLINE<X>( VALUE, OPER, ARRAY, LBND, UBND, MAXERR,
-f                              MAXVERT, INSIDE, STARPIX, STATUS )
-
-*  Class Membership:
-*     Polygon method.
-
-*  Description:
-*     This is a set of functions that create a Polygon enclosing a single
-*     contiguous set of pixels that have a specified value within a gridded 
-*     2-dimensional data array (e.g. an image). 
-*
-*     A basic 2-dimensional Frame is used to represent the pixel coordinate
-*     system in the returned Polygon. The Domain attribute is set to
-*     "PIXEL", the Title attribute is set to "Pixel coordinates", and the 
-*     Unit attribute for each axis is set to "pixel". All other
-*     attributes are left unset. The nature of the pixel coordinate system 
-*     is determined by parameter 
-c     "starpix".
-f     STARPIX.
-*
-*     The 
-c     "maxerr" and "maxvert"
-f     MAXERR and MAXVERT
-*     parameters can be used to control how accurately the returned
-*     Polygon represents the required region in the data array. The
-*     number of vertices in the returned Polygon will be the minimum
-*     needed to achieve the required accuracy. 
-*
-*     You should use a function which matches the numerical type of the 
-*     data you are processing by replacing <X> in the generic function 
-*     name 
-c     astOutline<X> 
-f     AST_OUTLINE<X> 
-c     by an appropriate 1- or 2-character type code. For example, if you 
-*     are procesing data with type 
-c     "float", you should use the function astOutlineF
-f     REAL, you should use the function AST_OUTLINER
-*     (see the "Data Type Codes" section below for the codes appropriate to
-*     other numerical types).
-
-*  Parameters:
-c     value
-f     VALUE = <Xtype> (Given)
-*        A data value that specifies the pixels to be outlined. 
-c     oper
-f     OPER = INTEGER (Given)
-*        Indicates how the 
-c        "value"
-f        VALUE
-*        parameter is used to select the outlined pixels. It can
-*        have any of the following values:
-c        - AST__LT: outline pixels with value less than "value".
-c        - AST__LE: outline pixels with value less than or equal to "value".
-c        - AST__EQ: outline pixels with value equal to "value".
-c        - AST__NE: outline pixels with value not equal to "value".
-c        - AST__GE: outline pixels with value greater than or equal to "value".
-c        - AST__GT: outline pixels with value greater than "value".
-f        - AST__LT: outline pixels with value less than VALUE.
-f        - AST__LE: outline pixels with value less than or equal to VALUE.
-f        - AST__EQ: outline pixels with value equal to VALUE.
-f        - AST__NE: outline pixels with value not equal to VALUE.
-f        - AST__GE: outline pixels with value greater than or equal to VALUE.
-f        - AST__GT: outline pixels with value greater than VALUE.
-c     array
-f     ARRAY( * ) = <Xtype> (Given)
-c        Pointer to a
-f        A 
-*        2-dimensional array containing the data to be processed.  The
-*        numerical type of this array should match the 1- or
-*        2-character type code appended to the function name (e.g. if
-c        you are using astOutlineF, the type of each array element
-c        should be "float").
-f        you are using AST_OUTLINER, the type of each array element
-f        should be REAL).
-*
-*        The storage order of data within this array should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the second dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-c     lbnd
-f     LBND( 2 ) = INTEGER (Given)
-c        Pointer to an array of two integers
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c     ubnd
-f     UBND( 2) = INTEGER (Given)
-c        Pointer to an array of two integers
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd" and "ubnd" together define the shape
-f        Note that LBND and UBND together define the shape
-*        and size of the input grid, its extent along a particular
-c        (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-c        index "j" to be zero-based). They also define
-f        (J'th) dimension being UBND(J)-LBND(J)+1. They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre or upper corner, as selected by parameter
-c        "starpix".
-f        STARPIX.
-c     maxerr
-f     MAXERR = DOUBLE PRECISION (Given)
-*        Together with 
-c        "maxvert",
-f        MAXVERT,
-*        this determines how accurately the returned Polygon represents
-*        the required region of the data array. It gives the target
-*        discrepancy between the returned Polygon and the accurate outline 
-*        in the data array, expressed as a number of pixels. Insignificant 
-*        vertices are removed from the accurate outline, one by one, until 
-*        the number of vertices remaining in the returned Polygon equals 
-c        "maxvert", 
-f        MAXVERT,
-*        or the largest discrepancy between the accurate outline and the 
-*        returned Polygon is greater than 
-c        "maxerr". If "maxerr"
-f        MAXERR. If MAXERR
-*        is zero or less, its value is ignored and the returned Polygon will 
-*        have the number of vertices specified by 
-c        "maxvert".
-f        MAXVERT.
-c     maxvert 
-f     MAXVERT = INTEGER (Given)
-*        Together with 
-c        "maxerr",
-f        MAXERR,
-*        this determines how accurately the returned Polygon represents
-*        the required region of the data array. It gives the maximum 
-*        allowed number of vertices in the returned Polygon. Insignificant 
-*        vertices are removed from the accurate outline, one by one, until 
-*        the number of vertices remaining in the returned Polygon equals 
-c        "maxvert", 
-f        MAXVERT,
-*        or the largest discrepancy between the accurate outline and the 
-*        returned Polygon is greater than 
-c        "maxerr". If "maxvert"
-f        MAXERR. If MAXVERT
-*        is less than 3, its value is ignored and the number of vertices in 
-*        the returned Polygon will be the minimum needed to ensure that the 
-*        discrepancy between the accurate outline and the returned
-*        Polygon is less than 
-c        "maxerr".
-f        MAXERR.
-c     inside
-f     INSIDE( 2 ) = INTEGER (Given)
-c        Pointer to an array of two integers
-f        An array
-*        containing the indices of a pixel known to be inside the
-*        required region. This is needed because the supplied data 
-*        array may contain several disjoint areas of pixels that satisfy 
-*        the criterion specified by
-c        "value" and "oper".
-f        VALUE and OPER.
-*        In such cases, the area described by the returned Polygon will 
-*        be the one that contains the pixel specified by
-c        "inside".
-f        INSIDE.
-*        If the specified pixel is outside the bounds given by
-c        "lbnd" and "ubnd",
-f        LBND and UBND,
-*        or has a value that does not meet the criterion specified by
-c        "value" and "oper",
-f        VALUE and OPER,
-*        then this function will search for a suitable pixel. The search
-*        starts at the central pixel and proceeds in a spiral manner until 
-*        a pixel is found that meets the specified crierion.
-c     starpix
-f     STARPIX = LOGICAL (Given)
-*        A flag indicating the nature of the pixel coordinate system used
-*        to describe the vertex positions in the returned Polygon. If
-c        non-zero,
-f        .TRUE.,
-*        the standard Starlink definition of pixel coordinate is used in
-*        which a pixel with integer index I spans a range of pixel coordinate
-*        from (I-1) to I (i.e. pixel corners have integral pixel coordinates).
-c        If zero,
-f        If .FALSE.,
-*        the definition of pixel coordinate used by other AST functions
-c        such as astResample, astMask, 
-f        such as AST_RESAMPLE, AST_MASK, 
-*        etc., is used. In this definition, a pixel with integer index I 
-*        spans a range of pixel coordinate from (I-0.5) to (I+0.5) (i.e. 
-*        pixel centres have integral pixel coordinates).
-c     boxsize
-f     BOXSIZE = INTEGER (Given)
-*        The full width in pixels of a smoothing box to be applied to the
-*        polygon vertices before downsizing the polygon to a smaller number
-*        of vertices. If an even number is supplied, the next larger odd
-*        number is used. Values of one or zero result in no smoothing.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astOutline<X>()
-f     AST_OUTLINE<X> = INTEGER
-*        The number of pixels to which a value of 
-c        "badval" 
-f        BADVAL 
-*        has been assigned.
-
-*  Notes:
-*     - This function proceeds by first finding a very accurate polygon,
-*     and then removing insignificant vertices from this fine polygon
-*     using 
-c     astDownsize.
-f     AST_DOWNSIZE.
-*     - The returned Polygon is the outer boundary of the contiguous set 
-*     of pixels that includes ths specified "inside" point, and satisfy
-*     the specified value requirement. This set of pixels may potentially 
-*     include "holes" where the pixel values fail to meet the specified
-*     value requirement. Such holes will be ignored by this function.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Data Type Codes:
-*     To select the appropriate masking function, you should
-c     replace <X> in the generic function name astOutline<X> with a
-f     replace <X> in the generic function name AST_OUTLINE<X> with a
-*     1- or 2-character data type code, so as to match the numerical
-*     type <Xtype> of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - L: long int
-c     - UL: unsigned long int
-c     - I: int
-c     - UI: unsigned int
-c     - S: short int
-c     - US: unsigned short int
-c     - B: byte (signed char)
-c     - UB: unsigned byte (unsigned char)
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - UI: INTEGER (treated as unsigned)
-f     - S: INTEGER*2 (short integer)
-f     - US: INTEGER*2 (short integer, treated as unsigned)
-f     - B: BYTE (treated as signed)
-f     - UB: BYTE (treated as unsigned)
-*
-c     For example, astOutlineD would be used to process "double"
-c     data, while astOutlineS would be used to process "short int"
-c     data, etc.
-f     For example, AST_OUTLINED would be used to process DOUBLE
-f     PRECISION data, while AST_OUTLINES would be used to process
-f     short integer data (stored in an INTEGER*2 array), etc.
-f
-f     For compatibility with other Starlink facilities, the codes W
-f     and UW are provided as synonyms for S and US respectively (but
-f     only in the Fortran interface to AST).
-
-*--
-*/
-/* Define a macro to implement the function for a specific data
-   type. Note, this function cannot be a virtual function since the
-   argument list does not include a Polygon, and so no virtual function
-   table is available. */
-#define MAKE_OUTLINE(X,Xtype) \
-AstPolygon *astOutline##X##_( Xtype value, int oper, Xtype array[], \
-                              int lbnd[2], int ubnd[2], double maxerr, \
-                              int maxvert, int inside[2], int starpix, \
-                              int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *frm;            /* Frame in which to define the Polygon */ \
-   AstPointSet *candidate;   /* Candidate polygon vertices */ \
-   AstPointSet *pset;        /* PointSet holding downsized polygon vertices */ \
-   AstPolygon *result;       /* Result value to return */ \
-   Xtype *pv;                /* Pointer to next test point */ \
-   Xtype v;                  /* Value of current pixel */ \
-   double **ptr;             /* Pointers to PointSet arrays */ \
-   int boxsize;              /* Half width of smoothign box in vertices */ \
-   int inx;                  /* X index of inside point */ \
-   int iny;                  /* Y index of inside point */ \
-   int iv;                   /* Vector index of next test pixel */ \
-   int ixv;                  /* X pixel index of next test point */ \
-   int nv0;                  /* Number of vertices in accurate outline */ \
-   int nx;                   /* Length of array x axis */ \
-   int smooth;               /* Do we need to smooth the polygon? */ \
-   int stop_at_invalid;      /* Indicates when to stop rightwards search */ \
-   int tmp;                  /* Alternative boxsize */ \
-   int valid;                /* Does current pixel meet requirements? */ \
-   static double junk[ 6 ] = {0.0, 0.0, 1.0, 1.0, 0.0, 1.0 }; /* Junk poly */ \
-\
-/* Initialise. */ \
-   result = NULL; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Avoid compiler warnings. */ \
-   iv = 0; \
-\
-/* If we are going to be smoothing the polygon before downsizing it, we \
-   need to ensure that the full polygon is retained within TraceEdge. if \
-   this is not the case, TraceEdge can remove all vertices from straight \
-   lines, except for the vertices that mark the beinning and end of the \
-   straight line. */ \
-   smooth = ( maxerr > 0.0 || maxvert > 2 ); \
-\
-/* Store the X dimension of the array. */ \
-   nx = ubnd[ 0 ] - lbnd[ 0 ] + 1; \
-\
-/* See if a valid inside point was supplied. It must be inside the bounds \
-   of the array, and must have a pixel value that meets the specified \
-   requirement. */ \
-   inx = inside[ 0 ]; \
-   iny = inside[ 1 ]; \
-   valid = ( inx >= lbnd[ 0 ] && inx <= ubnd[ 0 ] && \
-             iny >= lbnd[ 1 ] && iny <= ubnd[ 1 ] ); \
-\
-   if( valid  ) { \
-      iv = ( inx - lbnd[ 0 ] ) + (iny - lbnd[ 1 ] )*nx; \
-      v = array[ iv ]; \
-\
-      if( oper == AST__LT ) { \
-         valid = ( v < value ); \
-\
-      } else if( oper == AST__LE ) { \
-         valid = ( v <= value ); \
-\
-      } else if( oper == AST__EQ ) { \
-         valid = ( v == value ); \
-\
-      } else if( oper == AST__NE ) { \
-         valid = ( v != value ); \
-\
-      } else if( oper == AST__GE ) { \
-         valid = ( v >= value ); \
-\
-      } else if( oper == AST__GT ) { \
-         valid = ( v > value ); \
-\
-      } else if( astOK ){ \
-         astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
-                   "(%d) supplied (programming error).", status, oper ); \
-      } \
-   } \
-\
-/* If no valid inside point was supplied, find one now. */ \
-   if( !valid ) { \
-\
-      if( oper == AST__LT ) { \
-         FindInsidePointLT##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
-      } else if( oper == AST__LE ) { \
-         FindInsidePointLE##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
-      } else if( oper == AST__EQ ) { \
-         FindInsidePointEQ##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
-      } else if( oper == AST__NE ) { \
-         FindInsidePointNE##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
-      } else if( oper == AST__GE ) { \
-         FindInsidePointGE##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
-      } else if( oper == AST__GT ) { \
-         FindInsidePointGT##X( value, array, lbnd, ubnd, &inx, &iny, &iv, status ); \
-\
-      } else if( astOK ){ \
-         astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
-                   "(%d) supplied (programming error).", status, oper ); \
-      } \
-   } \
-\
-/* We now need to find a point on the boundary of the region containing \
-   the inside point. Starting at the inside point, move to the right \
-   through the array until a pixel is found which fails to meet the value \
-   requirement or the edge of the array is reached. */ \
-\
-   candidate = NULL; \
-   pv = array + iv; \
-   ixv = inx; \
-   stop_at_invalid = 1; \
-\
-   while( ++ixv <= ubnd[ 0 ] ) { \
-\
-/* Get the next pixel value. */ \
-      v = *(++pv); \
-\
-/* See if it meets the value requirement. */ \
-      if( oper == AST__LT ) { \
-         valid = ( v < value ); \
-\
-      } else if( oper == AST__LE ) { \
-         valid = ( v <= value ); \
-\
-      } else if( oper == AST__EQ ) { \
-         valid = ( v == value ); \
-\
-      } else if( oper == AST__NE ) { \
-         valid = ( v != value ); \
-\
-      } else if( oper == AST__GE ) { \
-         valid = ( v >= value ); \
-\
-      } else if( oper == AST__GT ) { \
-         valid = ( v > value ); \
-\
-      } else if( astOK ){ \
-         astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
-                   "(%d) supplied (programming error).", status, oper ); \
-         break; \
-      } \
-\
-/* If we are currently looking for the next invalid pixel, and this pixel \
-   is invalid... */ \
-      if( stop_at_invalid ) { \
-         if( ! valid ) { \
-\
-/* The current pixel may be on the required polygon, or it may be on the  \
-   edge of a hole contained within the region being outlined. We would  \
-   like to jump over such holes so that we can continue to look for the  \
-   real edge of the region being outlined. In order to determine if we  \
-   have reached a hole, we trace the edge that passes through the current  \
-   pixel, forming a candidate polygon in the process. In the process, We  \
-   see if the inside point falls within this candidate polygon. If it does  \
-   then the polygon is accepted as the required polygon. Otherwise, it is  \
-   rejected as a mere hole, and we continue moving away from the inside  \
-   point, looking for a new edge. */ \
-            if( oper == AST__LT ) { \
-               candidate = TraceEdgeLT##X( value, array, lbnd, ubnd, iv - 1, \
-                                           ixv - 1, iny, starpix, smooth, status ); \
-\
-            } else if( oper == AST__LE ) { \
-               candidate = TraceEdgeLE##X( value, array, lbnd, ubnd, iv - 1, \
-                                           ixv - 1, iny, starpix, smooth, status ); \
-\
-            } else if( oper == AST__EQ ) { \
-               candidate = TraceEdgeEQ##X( value, array, lbnd, ubnd, iv - 1, \
-                                           ixv - 1, iny, starpix, smooth, status ); \
-\
-            } else if( oper == AST__NE ) { \
-               candidate = TraceEdgeNE##X( value, array, lbnd, ubnd, iv - 1, \
-                                           ixv - 1, iny, starpix, smooth, status ); \
-\
-            } else if( oper == AST__GE ) { \
-               candidate = TraceEdgeGE##X( value, array, lbnd, ubnd, iv - 1, \
-                                           ixv - 1, iny, starpix, smooth, status ); \
-\
-            } else if( oper == AST__GT ) { \
-               candidate = TraceEdgeGT##X( value, array, lbnd, ubnd, iv - 1, \
-                                           ixv - 1, iny, starpix, smooth, status ); \
-\
-            } else if( astOK ){ \
-               astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
-                         "(%d) supplied (programming error).", status, oper ); \
-            } \
-\
-/* If the candidate polygon is the required polygon, break out of the \
-   loop. Otherwise, indicate that we want to continue moving right, \
-   across the hole, until we reach the far side of the hole (i.e. find   \
-   the next valid pixel). */ \
-            if( candidate ) { \
-               break; \
-            } else { \
-               stop_at_invalid = 0; \
-            } \
-         } \
-\
-/* If we are currently looking for the next valid pixel, and the current \
-   pixel is valid... */ \
-      } else if( valid ) { \
-\
-/* We have reached the far side of a hole. Continue moving right, looking \
-   now for the next invalid pixel (which may be on the required polygon). */ \
-         stop_at_invalid = 1; \
-      } \
-   } \
-\
-/* If we have not yet found the required polygon, we must have reached \
-   the right hand edge of the array. So we now follow the edge of the \
-   array round until we meet the boundary of the required region. */ \
-   if( !candidate ) { \
-      if( oper == AST__LT ) { \
-         candidate = TraceEdgeLT##X( value, array, lbnd, ubnd, iv - 1, \
-                                     ixv - 1, iny, starpix, smooth, status ); \
-\
-      } else if( oper == AST__LE ) { \
-         candidate = TraceEdgeLE##X( value, array, lbnd, ubnd, iv - 1, \
-                                     ixv - 1, iny, starpix, smooth, status ); \
-\
-      } else if( oper == AST__EQ ) { \
-         candidate = TraceEdgeEQ##X( value, array, lbnd, ubnd, iv - 1, \
-                                     ixv - 1, iny, starpix, smooth, status ); \
-\
-      } else if( oper == AST__NE ) { \
-         candidate = TraceEdgeNE##X( value, array, lbnd, ubnd, iv - 1, \
-                                     ixv - 1, iny, starpix, smooth, status ); \
-\
-      } else if( oper == AST__GE ) { \
-         candidate = TraceEdgeGE##X( value, array, lbnd, ubnd, iv - 1, \
-                                     ixv - 1, iny, starpix, smooth, status ); \
-\
-      } else if( oper == AST__GT ) { \
-         candidate = TraceEdgeGT##X( value, array, lbnd, ubnd, iv - 1, \
-                                     ixv - 1, iny, starpix, smooth, status ); \
-\
-      } else if( astOK ){ \
-         astError( AST__OPRIN, "astOutline"#X": Invalid operation code " \
-                   "(%d) supplied (programming error).", status, oper ); \
-      } \
-   } \
-\
-/* If required smooth the full resolution polygon before downsizing it. */ \
-   if( smooth ) { \
-\
-/* Initially, set the boxsize to be equal to the required accouracy. */ \
-      if( maxerr > 0 ) { \
-         boxsize = (int) maxerr; \
-      } else { \
-         boxsize = INT_MAX; \
-      } \
-\
-/* Determine a second box size equal to the average number of vertices in \
-   the accurate outline, per vertex in the returned Polygon. */ \
-      nv0 = astGetNpoint( candidate ); \
-      if( maxvert > 2 ) { \
-         tmp = nv0/(2*maxvert); \
-      } else { \
-         tmp = INT_MAX; \
-      } \
-\
-/* Use the minimum of the two box sizes. */ \
-      if( tmp < boxsize ) boxsize = tmp; \
-\
-/* Ensure the box is sufficiently small to allow at least 10 full boxes \
-   (=20 half boxes) around the polygon. */ \
-      tmp = nv0/20; \
-      if( tmp < boxsize ) boxsize = tmp; \
-      if( boxsize == 0 ) boxsize = 1; \
-\
-/* Smooth the polygon. */ \
-      SmoothPoly( candidate, boxsize, 1.0, status ); \
-   } \
-\
-/* Reduce the number of vertices in the outline. */ \
-   frm = astFrame( 2, "Domain=PIXEL,Unit(1)=pixel,Unit(2)=pixel," \
-                   "Title=Pixel coordinates", status ); \
-   pset = DownsizePoly( candidate, maxerr, maxvert, frm, status ); \
-\
-/* Create a default Polygon with 3 junk vertices. */ \
-   result = astPolygon( frm, 3, 3, junk, NULL, " ", status ); \
-\
-/* Change the PointSet within the Polygon to the one created above. */ \
-   SetPointSet( result, pset, status ); \
-\
-/* Free resources. Note, we need to free the arrays within the candidate \
-   PointSet explicitly, since they were not created as part of the \
-   construction of the PointSet (see TraceEdge). */ \
-   pset = astAnnul( pset ); \
-   frm = astAnnul( frm ); \
-   ptr = astGetPoints( candidate ); \
-   if( astOK ) { \
-      astFree( ptr[ 0 ] ); \
-      astFree( ptr[ 1 ] ); \
-   } \
-   candidate = astAnnul( candidate ); \
-\
-/* If an error occurred, clear the returned result. */ \
-   if ( !astOK ) result = astAnnul( result ); \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_OUTLINE(LD,long double)
-#endif
-MAKE_OUTLINE(D,double)
-MAKE_OUTLINE(L,long int)
-MAKE_OUTLINE(UL,unsigned long int)
-MAKE_OUTLINE(I,int)
-MAKE_OUTLINE(UI,unsigned int)
-MAKE_OUTLINE(S,short int)
-MAKE_OUTLINE(US,unsigned short int)
-MAKE_OUTLINE(B,signed char)
-MAKE_OUTLINE(UB,unsigned char)
-MAKE_OUTLINE(F,float)
-
-/* Undefine the macros. */
-#undef MAKE_OUTLINE
-
-static double Polywidth( AstFrame *frm, AstLineDef **edges, int i, int nv, 
-                         double cen[ 2 ], int *status ){
-/*
-*  Name:
-*     Polywidth
-
-*  Purpose:
-*     Find the width of a polygon perpendicular to a given edge.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     double Polywidth( AstFrame *frm, AstLineDef **edges, int i, int nv, 
-*                       double cen[ 2 ], int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     This function defines a line perpendicular to a given polygon edge, 
-*     passing through the mid point of the edge, extending towards the 
-*     inside of the polygon. It returns the distance that can be travelled
-*     along this line before any of the other polygon edges are hit (the
-*     "width" of the polygon perpendicular to the given edge). It also 
-*     puts the position corresponding to half that distance into "cen".
-
-*  Parameters:
-*     frm
-*        The Frame in which the lines are defined.
-*     edges
-*        Array of "nv" pointers to AstLineDef structures, each defining an 
-*        edge of the polygon.
-*     i
-*        The index of the edge that is to define the polygon width.
-*     nv
-*        Total number of edges.
-*     cen
-*        An array into which are put the coords of the point half way
-*        along the polygon width line.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returnd Value:
-*     The width of the polygon perpendicular to the given edge, or
-*     AST__BAD if the width cannot be determined (usually because the 
-*     vertices been supplied in a clockwise direction, effectively
-*     negating the Polygon).
-
-*/
-
-/* Local Variables: */
-   AstLineDef *line;
-   double *cross;
-   double d;        
-   double end[ 2 ];
-   double l1;
-   double l2;
-   double result;
-   double start[ 2 ];
-   int j;
-
-/* Check the global error status. */
-   result = AST__BAD;
-   if ( !astOK ) return result;
-
-/* Create a Line description for a line perpendicular to the specified
-   edge, passing through the mid point of the edge, and extending towards
-   the inside of the polygon. First move away from the start along the 
-   line to the mid point. This gives the start of the new line. */
-   l1 = 0.5*( edges[ i ]->length );
-   astLineOffset( frm, edges[ i ], l1, 0.0, start );
-
-/* We now move away from this position at right angles to the line. We
-   start off by moving 5 times the length of the specified edge. For
-   some Frames (e.g. SkyFrames) this may result in a position that is 
-   much too close (i.e. if it goes all the way round the great circle
-   and comes back to the beginning). Therefore, we check that the end
-   point is the requested distance from the start point, and if not, we
-   halve the length of the line and try again. */
-   l2 = 10.0*l1;
-   while( 1 ) {
-      astLineOffset( frm, edges[ i ], l1, l2, end );
-      d = astDistance( frm, start, end );
-      if( d != AST__BAD && fabs( d - l2 ) < 1.0E-6*l2 ) break;
-      l2 *= 0.5;
-   }
-
-/* Create a description of the required line. */
-   line = astLineDef( frm, start, end );
-
-/* Loop round every edge, except for the supplied edge. */
-   for( j = 0; j < nv; j++ ) {
-      if( j != i ) {
-
-/* Find the position at which the line created above crosses the current 
-   edge. Skip to the next edge if the line does not intersect the edge 
-   within the length of the edge. */
-         if( astLineCrossing( frm, line, edges[ j ], &cross ) ) {
-
-/* Find the distance between the crossing point and the line start. */
-            d = astDistance( frm, start, cross );
-
-/* If this is less than the smallest found so far, record it. */
-            if( d != AST__BAD && ( d < result || result == AST__BAD ) ) {
-               result = d;
-            }
-         }
-
-/* Free resources */
-         cross = astFree( cross );
-      }
-   }
-   line = astFree( line );
-
-/* If a width was found, return the point half way across the polygon. */
-   if( result != AST__BAD ) {
-      astOffset( frm, start, end, 0.5*result, cen );
-
-/* The usual reason for not finding a width is if the polygon vertices
-   are supplied in clockwise order, effectively negating the polygon, and
-   resulting in the "inside" of the polygon being the infinite region
-   outside a polygonal hole. In this case, the end point of the line 
-   perpendicular to the initial edge can be returned as a representative
-   "inside" point. */
-   } else {
-      cen[ 0 ] = end[ 0 ];
-      cen[ 1 ] = end[ 1 ];
-   }
-
-/* Return the width. */
-   return result;
-
-}
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Polygon member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;             /* Pointer to encapsulated Frame */
-   AstPointSet *pset;         /* Pointer to PointSet defining the Region */
-   AstPolygon *this;          /* Pointer to Polygon structure */
-   AstRegion *reg;            /* Base Frame equivalent of supplied Polygon */
-   double **ptr;              /* Pointer to PointSet data */
-   double *x;                 /* Pointer to next X axis value */
-   double *y;                 /* Pointer to next Y axis value */
-   double dist;               /* Offset along an axis */
-   double x0;                 /* The first X axis value */
-   double y0;                 /* The first Y axis value */
-   int ip;                    /* Point index */
-   int np;                    /* No. of points in PointSet */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Polygon structure. */
-   this = (AstPolygon *) this_region;
-
-/* If the base Frame bounding box has already been found, return the
-   values stored in the Polygon structure. */
-   if( this->lbnd[ 0 ] != AST__BAD ) {
-      lbnd[ 0 ] = this->lbnd[ 0 ];
-      lbnd[ 1 ] = this->lbnd[ 1 ];
-      ubnd[ 0 ] = this->ubnd[ 0 ];
-      ubnd[ 1 ] = this->ubnd[ 1 ];
-
-/* If the base Frame bounding box has not yet been found, find it now and
-   store it in the Polygon structure. */
-   } else {
-
-/* Get the axis values for the PointSet which defines the location and
-   extent of the region in the base Frame of the encapsulated FrameSet. */
-      pset = this_region->points;
-      ptr = astGetPoints( pset );
-      np = astGetNpoint( pset );
-
-/* Get a pointer to the base Frame in the frameset encapsulated by the
-   parent Region structure. */
-      frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Find the upper and lower bounds of the box enclosing all the vertices.
-   The box is expressed in terms of axis offsets from the first vertex, in 
-   order to avoid problems with boxes that cross RA=0 or RA=12h */
-      lbnd[ 0 ] = 0.0;
-      lbnd[ 1 ] = 0.0;
-      ubnd[ 0 ] = 0.0;
-      ubnd[ 1 ] = 0.0;
-
-      x = ptr[ 0 ];
-      y = ptr[ 1 ];
-
-      x0 = *x;
-      y0 = *y;
-
-      for( ip = 0; ip < np; ip++, x++, y++ ) {
-
-         dist =  astAxDistance( frm, 1, x0, *x );
-         if( dist < lbnd[ 0 ] ) {
-            lbnd[ 0 ] = dist;
-         } else if( dist > ubnd[ 0 ] ) {
-            ubnd[ 0 ] = dist;
-         }
-
-         dist =  astAxDistance( frm, 2, y0, *y );
-         if( dist < lbnd[ 1 ] ) {
-            lbnd[ 1 ] = dist;
-         } else if( dist > ubnd[ 1 ] ) {
-            ubnd[ 1 ] = dist;
-         }
-
-      }
-
-/* Convert the box bounds to absolute values, rather than values relative
-   to the first vertex. */
-      lbnd[ 0 ] += x0;
-      lbnd[ 1 ] += y0;
-      ubnd[ 0 ] += x0;
-      ubnd[ 1 ] += y0;
-
-/* The astNormBox requires a Mapping which can be used to test points in 
-   this base Frame. Create a copy of the Polygon and then set its
-   FrameSet so that the current Frame in the copy is the same as the base
-   Frame in the original. */
-      reg = astCopy( this );
-      astSetRegFS( reg, frm );
-      astSetNegated( reg, 0 );
-
-/* Normalise this box. */
-      astNormBox( frm, lbnd, ubnd, reg );
-
-/* Free resources */
-      reg = astAnnul( reg );
-      frm = astAnnul( frm );
-
-/* Store it in the olygon structure for future use. */
-      this->lbnd[ 0 ] = lbnd[ 0 ];
-      this->lbnd[ 1 ] = lbnd[ 1 ];
-      this->ubnd[ 0 ] = ubnd[ 0 ];
-      this->ubnd[ 1 ] = ubnd[ 1 ];
-
-   }
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Polygon member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. Annul the pointer using astAnnul when it 
-*     is no longer needed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                 /* Base Frame in encapsulated FrameSet */
-   AstPointSet *result;           /* Returned pointer */
-   AstPolygon *this;              /* The Polygon structure */
-   double **rptr;                 /* Pointers to returned mesh data */
-   double **vptr;                 /* Pointers to vertex data */
-   double *lens;                  /* Pointer to work space holding edge lengths */
-   double d;                      /* Length of this edge */
-   double delta;                  /* Angular separation of points */
-   double end[ 2 ];               /* End position */
-   double mp;                     /* No. of mesh points per unit distance */
-   double p[ 2 ];                 /* Position in 2D Frame */
-   double start[ 2 ];             /* Start position */
-   double total;                  /* Total length of polygon */
-   int ip;                        /* Point index */
-   int iv;                        /* Vertex index */
-   int n;                         /* No. of points on this edge */
-   int next;                      /* Index of next point in returned PointSet */
-   int np;                        /* No. of points in returned PointSet */
-   int nv;                        /* No. of polygon vertices */
-
-/* Initialise */
-   result= NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this_region->basemesh ) {
-      result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Get a pointer to the Polygon structure. */
-      this = (AstPolygon *) this_region;
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-      frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* Get the number of vertices and pointers to the vertex axis values. */
-      nv = astGetNpoint( this_region->points );
-      vptr = astGetPoints( this_region->points );
-
-/* Allocate memory to hold the geodesic length of each edge. */
-      lens = astMalloc( sizeof( double )*(size_t) nv );
-
-      if( astOK ) {
-
-/* Find the total geodesic distance around the boundary. */
-         total = 0.0;
-
-         start[ 0 ] = vptr[ 0 ][ 0 ];                                 
-         start[ 1 ] = vptr[ 1 ][ 0 ];                                 
-
-         for( iv = 1; iv < nv; iv++ ) {
-            end[ 0 ] = vptr[ 0 ][ iv ];                                 
-            end[ 1 ] = vptr[ 1 ][ iv ];                                 
-
-            d = astDistance( frm, start, end );
-            if( d != AST__BAD ) total += fabs( d );              
-            lens[ iv ] = d;
-            start[ 0 ] = end[ 0 ];
-            start[ 1 ] = end[ 1 ];
-         }
-
-         end[ 0 ] = vptr[ 0 ][ 0 ];                                 
-         end[ 1 ] = vptr[ 1 ][ 0 ];                                 
-
-         d = astDistance( frm, start, end );
-         if( d != AST__BAD ) total += fabs( d );              
-         lens[ 0 ] = d;
-
-/* Find the number of mesh points per unit geodesic distance. */
-         if( total > 0.0 ){ 
-            mp = astGetMeshSize( this )/total;         
-
-/* Find the total number of mesh points required. */
-            np = 0;
-            for( iv = 0; iv < nv; iv++ ) {
-               if( lens[ iv ] != AST__BAD ) np += 1 + (int)( lens[ iv ]*mp );
-            }
-
-/* Create a suitable PointSet to hold the returned positions. */
-            result = astPointSet( np, 2, "", status );
-            rptr = astGetPoints( result );
-            if( astOK ) {
-
-/* Initialise the index of the next point to be added to the returned
-   PointSet. */
-               next = 0; 
-
-/* Loop round each good edge of the polygon. The edge ends at vertex "iv". */
-               start[ 0 ] = vptr[ 0 ][ 0 ];                                 
-               start[ 1 ] = vptr[ 1 ][ 0 ];                                 
-      
-               for( iv = 1; iv < nv; iv++ ) {
-                  end[ 0 ] = vptr[ 0 ][ iv ];                                 
-                  end[ 1 ] = vptr[ 1 ][ iv ];                                 
-                  if( lens[ iv ] != AST__BAD ) {
-
-/* Add the position of the starting vertex to the returned mesh. */
-                     rptr[ 0 ][ next ] = start[ 0 ];
-                     rptr[ 1 ][ next ] = start[ 1 ];
-                     next++;
-
-/* Find the number of points on this edge, and the geodesic distance
-   between them. */
-                     n = 1 + (int) ( lens[ iv ]*mp ); 
-
-/* If more than one point, find the distance between points. */
-                     if( n > 1 ) {
-                        delta = lens[ iv ]/n;
-
-/* Loop round the extra points. */
-                        for( ip = 1; ip < n; ip++ ) {
-
-/* Find the position of the next mesh point. */
-                           astOffset( frm, start, end, delta*ip, p );
-
-/* Add it to the mesh. */
-                           rptr[ 0 ][ next ] = p[ 0 ];
-                           rptr[ 1 ][ next ] = p[ 1 ];
-                           next++;
-
-                        }
-                     }
-                  }
-
-/* The end of this edge becomes the start of the next. */
-                  start[ 0 ] = end[ 0 ];
-                  start[ 1 ] = end[ 1 ];
-               }
-      
-/* Now do the edge which ends at the first vertex. */
-               end[ 0 ] = vptr[ 0 ][ 0 ];                                 
-               end[ 1 ] = vptr[ 1 ][ 0 ];                                 
-               if( lens[ 0 ] != AST__BAD ) {
-                  rptr[ 0 ][ next ] = start[ 0 ];
-                  rptr[ 1 ][ next ] = start[ 1 ];
-                  next++;
-
-                  n = 1 + (int)( lens[ 0 ]*mp ); 
-                  if( n > 1 ) {
-                     delta = lens[ 0 ]/n;
-                     for( ip = 1; ip < n; ip++ ) {
-                        astOffset( frm, start, end, delta*ip, p );
-                        rptr[ 0 ][ next ] = p[ 0 ];
-                        rptr[ 1 ][ next ] = p[ 1 ];
-                        next++;
-                     }
-                  }
-               }
-
-/* Check the PointSet size was correct. */
-               if( next != np && astOK ) {
-                  astError( AST__INTER, "astRegBaseMesh(%s): Error in the "
-                            "allocated PointSet size (%d) - should have "
-                            "been %d (internal AST programming error).", status, 
-                            astGetClass( this ), np, next );
-               }
-
-/* Save the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-               if( astOK ) this_region->basemesh = astClone( result );
-
-            }
-
-         } else if( astOK ) {
-            astError( AST__BADIN, "astRegBaseMesh(%s): The boundary of "
-                      "the supplied %s has an undefined length.", status,
-                      astGetClass( this ), astGetClass( this ) );
-         }
-
-      }
-
-/* Free resources. */
-      frm = astAnnul( frm );
-      lens = astFree( lens );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Polygon.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     Polygon member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Polygon.
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Polygon "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Polygon.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstFrame *frm;               /* Base Frame in supplied Polygon */
-   AstPointSet *pset1;          /* Pointer to copy of supplied PointSet */
-   AstPointSet *pset2;          /* Pointer to PointSet holding resolved components */
-   AstPolygon *this;            /* Pointer to the Polygon structure. */
-   AstRegion *tunc;             /* Uncertainity Region from "this" */
-   double **ptr1;               /* Pointer to axis values in "pset1" */
-   double **ptr2;               /* Pointer to axis values in "pset2" */
-   double **vptr;               /* Pointer to axis values at vertices */
-   double edge_len;             /* Length of current edge */
-   double end[2];               /* Position of end of current edge */ 
-   double l1;                   /* Length of bounding box diagonal */
-   double l2;                   /* Length of bounding box diagonal */
-   double lbnd_tunc[2];         /* Lower bounds of "this" uncertainty Region */ 
-   double lbnd_unc[2];          /* Lower bounds of supplied uncertainty Region */ 
-   double par;                  /* Parallel component */
-   double parmax;               /* Max acceptable parallel component */
-   double prp;                  /* Perpendicular component */
-   double start[2];             /* Position of start of current edge */ 
-   double ubnd_tunc[2];         /* Upper bounds of "this" uncertainty Region */ 
-   double ubnd_unc[2];          /* Upper bounds of supplied uncertainty Region */ 
-   double wid;                  /* Width of acceptable margin around polygon */
-   int *m;                      /* Pointer to next mask value */
-   int i;                       /* Edge index */
-   int ip;                      /* Point index */
-   int np;                      /* No. of supplied points */
-   int nv;                      /* No. of vertices */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Polygon structure. */
-   this = (AstPolygon *) this_region;
-
-/* Check the supplied PointSet has 2 axis values per point. */
-   if( astGetNcoord( pset ) != 2 && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axis "
-                "values per point (%d) in the supplied PointSet - should be "
-                "2 (internal AST programming error).", status, astGetClass( this ),
-                astGetNcoord( pset ) );
-   }
-
-/* Get the number of axes in the uncertainty Region and check it is also 2. */
-   if( unc && astGetNaxes( unc ) != 2 && astOK ) {
-      astError( AST__INTER, "astRegPins(%s): Illegal number of axes (%d) "
-                "in the supplied uncertainty Region - should be 2 "
-                "(internal AST programming error).", status, astGetClass( this ),
-                astGetNaxes( unc ) );
-   }
-
-/* Get pointers to the axis values at the polygon vertices. */
-   vptr = astGetPoints( this_region->points );
-
-/* Get the number of vertices. */
-   nv = astGetNpoint( this_region->points );
-
-/* Take a copy of the supplied PointSet and get pointers to its axis
-   values,and its size */
-   pset1 = astCopy( pset );
-   ptr1 = astGetPoints( pset1 );
-   np = astGetNpoint( pset1 );
-
-/* Create a PointSet to hold the resolved components and get pointers to its 
-   axis data. */
-   pset2 = astPointSet( np, 2, "", status );
-   ptr2 = astGetPoints( pset2 );
-
-/* Create a mask array if required. */
-   if( mask ) *mask = astMalloc( sizeof(int)*(size_t) np );
-
-/* We now find the maximum distance on each axis that a point can be from the 
-   boundary of the Polygon for it still to be considered to be on the boundary.
-   First get the Region which defines the uncertainty within the Polygon 
-   being checked (in its base Frame), and get its bounding box. The current
-   Frame of the uncertainty Region is the same as the base Frame of the
-   Polygon. */
-   tunc = astGetUncFrm( this, AST__BASE );      
-   astGetRegionBounds( tunc, lbnd_tunc, ubnd_tunc ); 
-
-/* Find the geodesic length within the base Frame of "this" of the diagonal of 
-   the bounding box. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-   l1 = astDistance( frm, lbnd_tunc, ubnd_tunc );
-
-/* Also get the Region which defines the uncertainty of the supplied points
-   and get its bounding box in the same Frame. */
-   if( unc ) {
-      astGetRegionBounds( unc, lbnd_unc, ubnd_unc ); 
-
-/* Find the geodesic length of the diagonal of this bounding box. */
-      l2 = astDistance( frm, lbnd_unc, ubnd_unc );
-
-/* Assume zero uncertainty if no "unc" Region was supplied. */
-   } else {
-      l2 = 0.0;
-   }
-
-/* The required border width is half of the total diagonal of the two bounding 
-   boxes. */   
-   if( astOK ) {
-      wid = 0.5*( l1 + l2 );
-
-/* Loop round each edge of the polygon. Edge "i" starts at vertex "i-1"
-   and ends at vertex "i". Edge zero starts at vertex "nv-1" and ends at
-   vertex zero. */
-      start[ 0 ] = vptr[ 0 ][ nv - 1 ];
-      start[ 1 ] = vptr[ 1 ][ nv - 1 ];
-      for( i = 0; i < nv; i++ ) {
-         end[ 0 ] = vptr[ 0 ][ i ];
-         end[ 1 ] = vptr[ 1 ][ i ];
-
-/* Find the length of this edge. */
-         edge_len = astDistance( frm, start, end );
-
-/* Resolve all the supplied mesh points into components parallel and 
-   perpendicular to this edge. */
-         (void) astResolvePoints( frm, start, end, pset1, pset2 );
-
-/* A point is effectively on this edge if the parallel component is
-   greater than (-wid) and less than (edge_len+wid) AND the perpendicular
-   component has an absolute value less than wid. Identify such positions
-   and set them bad in pset1. */
-         parmax = edge_len + wid;
-         for( ip = 0; ip < np; ip++ ) {
-            par = ptr2[ 0 ][ ip ];
-            prp = ptr2[ 1 ][ ip ];
-
-            if( par != AST__BAD && prp != AST__BAD ) {
-               if( par > -wid && par < parmax && prp > -wid && prp < wid ) {
-                  ptr1[ 0 ][ ip ] = AST__BAD;
-                  ptr1[ 1 ][ ip ] = AST__BAD;
-               }
-            } 
-         }
-
-/* The end of the current edge becomes the start of the next. */
-         start[ 0 ] = end[ 0 ];
-         start[ 1 ] = end[ 1 ];
-      }
-
-/* See if any good points are left in pset1. If so, it means that those
-   points were not on any edge of hte Polygon. We use two alogorithms
-   here depending on whether we are creating a mask array, since we can 
-   abort the check upon finding the first good point if we are not
-   producing a mask. */
-      result = 1;
-      if( mask ) {
-         m = *mask;
-         for( ip = 0; ip < np; ip++, m++ ) {
-            if( ptr1[ 0 ][ ip ] != AST__BAD && 
-                ptr1[ 1 ][ ip ] != AST__BAD ) {
-               *m = 0;
-               result = 0;
-            } else {
-               *m = 1;
-            } 
-         }
-      } else {
-         for( ip = 0; ip < np; ip++, m++ ) {
-            if( ptr1[ 0 ][ ip ] != AST__BAD && 
-                ptr1[ 1 ][ ip ] != AST__BAD ) {
-               result = 0;
-               break;
-            } 
-         }
-      }
-   }
-
-/* Free resources. */
-   tunc = astAnnul( tunc );
-   frm = astAnnul( frm );
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int RegTrace( AstRegion *this_region, int n, double *dist, double **ptr, 
-                     int *status ){
-/*
-*+
-*  Name:
-*     RegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     int astTraceRegion( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     Polygon member function (overrides the astTraceRegion method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astTraceRegion method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Local Variables; */
-   AstFrame *frm;
-   AstMapping *map;
-   AstPointSet *bpset;
-   AstPointSet *cpset;
-   AstPolygon *this;
-   double **bptr;
-   double d;
-   double p[ 2 ];
-   int i;
-   int j0;
-   int j;
-   int ncur;
-   int nv;
-   int monotonic;        
-
-/* Check inherited status, and the number of points to return, returning
-   a non-zero value to indicate that this class supports the astRegTrace 
-   method. */
-   if( ! astOK || n == 0 ) return 1;
-
-/* Get a pointer to the Polygon structure. */
-   this = (AstPolygon *) this_region;
-
-/* Ensure cached information is available. */
-   Cache( this, status );
-
-/* Get a pointer to the base Frame in the encapsulated FrameSet. */
-   frm = astGetFrame( this_region->frameset, AST__BASE );
-
-/* We first determine the required positions in the base Frame of the
-   Region, and then transform them into the current Frame. Get the 
-   base->current Mapping, and the number of current Frame axes. */
-   map = astGetMapping( this_region->frameset, AST__BASE, AST__CURRENT );
-
-/* If it's a UnitMap we do not need to do the transformation, so put the
-   base Frame positions directly into the supplied arrays. */
-   if( astIsAUnitMap( map ) ) {
-      bpset = NULL;
-      bptr = ptr;
-      ncur = 2;
-
-/* Otherwise, create a PointSet to hold the base Frame positions (known
-   to be 2D since this is an polygon). */
-   } else {
-      bpset = astPointSet( n, 2, " ", status );
-      bptr = astGetPoints( bpset );
-      ncur = astGetNout( map );
-   }
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Get the number of vertices. */
-      nv = astGetNpoint( this_region->points );
-   
-/* If we have a reasonable number of pointsand there are a reasonable
-   number of vertices, we can be quicker if we know if the parameteric 
-   distances are monotonic increasing. Find out now. */
-      if( n > 5 && nv > 5 ) {
-
-         monotonic = 1;
-         for( i = 1; i < n; i++ ) {
-            if( dist[ i ] < dist[ i - 1 ] ) {
-               monotonic = 0;
-               break;
-            }
-         }
-
-      } else {
-         monotonic = 0;
-      }
-
-/* Loop round each point. */
-      j0 = 1;
-      for( i = 0; i < n; i++ ) {
-
-/* Get the required round the polygon, starting from vertex zero. */
-         d = dist[ i ]*this->totlen;
-
-/* Loop round each vertex until we find one which is beyond the required
-   point. If the supplied distances are monotonic increasing, we can
-   start the checks at the same vertex that was used for the previous 
-   since we know there will never be a backward step. */
-         for( j = j0; j < nv; j++ ) {
-            if( this->startsat[ j ] > d ) break;
-         }
-
-/* If the distances are monotonic increasing, record the vertex that we
-   have reached so far. */
-         if( monotonic ) j0 = j;
-
-/* Find the distance to travel beyond the previous vertex. */
-         d -= this->startsat[ j - 1 ];
-
-/* Find the position, that is the required distance from the previous
-   vertex towards the next vertex. */
-         astLineOffset( frm, this->edges[ j - 1 ], d, 0.0, p );
-
-/* Store the resulting axis values. */
-         bptr[ 0 ][ i ] = p[ 0 ];
-         bptr[ 1 ][ i ] = p[ 1 ];
-      }
-   }
-
-/* If required, transform the base frame positions into the current
-   Frame, storing them in the supplied array. Then free resources. */
-   if( bpset ) {
-      cpset = astPointSet( n, ncur, " ", status );
-      astSetPoints( cpset, ptr );
-
-      (void) astTransform( map, bpset, 1, cpset );
-
-      cpset = astAnnul( cpset );
-      bpset = astAnnul( bpset );
-   }
-
-/* Free remaining resources. */
-   map = astAnnul( map );
-   frm = astAnnul( frm );
-
-/* Return a non-zero value to indicate that this class supports the
-   astRegTrace method. */
-   return 1;
-}
-
-static Segment *RemoveFromChain( Segment *head, Segment *seg, int *status ){
-/*
-*  Name:
-*     RemoveFromChain
-
-*  Purpose:
-*     Remove a Segment from the link list maintained by astDownsize.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     Segment *RemoveFromChain( Segment *head, Segment *seg, int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     The supplied Segment is removed form the list, and the gap is
-*     closed up.
-
-*  Parameters:
-*     head
-*        The Segment structure at the head of the list.
-*     seg
-*        The Segment to be removed from the list.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the link head (which will have changed if "seg" was the
-*     original head).
-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return head;
-
-/* If the Segment was the original head, make the next segment the new
-   head. */
-   if( head == seg ) head = seg->next;
-
-/* Close up the links between the Segments on either side of the segment
-   being removed. */
-   if( seg->prev ) seg->prev->next = seg->next;
-   if( seg->next ) seg->next->prev = seg->prev;
-
-/* Nullify the links in the segment being removed. */
-   seg->next = NULL;
-   seg->prev = NULL;
-
-/* Return the new head. */
-   return head;
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*  Name:
-*     ResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void ResetCache( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Region member function (overrides the astResetCache method
-*     inherited from the parent Region class).
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   if( this ) {
-      ( (AstPolygon *) this )->stale = 1;
-      ( (AstPolygon *) this )->lbnd[ 0 ] = AST__BAD;
-      (*parent_resetcache)( this, status );
-   }
-}
-
-static void SetPointSet( AstPolygon *this, AstPointSet *pset, int *status ){
-/*
-*  Name:
-*     SetPointSet
-
-*  Purpose:
-*     Store a new set of vertices in an existing Polygon.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void SetPointSet( AstPolygon *this, AstPointSet *pset, int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     The PointSet in the supplied Polygon is annulled, are stored in the supplied
-*     Polygon, replacing the existing data pointers.
-
-*  Parameters:
-*     this
-*        Pointer to the Polygon to be changed.
-*     pset
-*        The PointSet containing the enw vertex information.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Annul the pointer to the PointSet already in the supplied Polygon. */
-   (void) astAnnul( ((AstRegion *) this)->points );
-
-/* Store a clone of the supplie dnew PointSet pointer. */
-   ((AstRegion *) this)->points = astClone( pset );
-
-/* Indicate the cached information in the polygon will need to be
-   re-calculated when needed. */
-   astResetCache( this );
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Polygon method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* Indicate cached information eeds re-calculating. */
-   astResetCache( this_region );
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Polygon method (over-rides the astSimplify method inherited
-*     from the Region class).
-
-*  Description:
-*     This function invokes the parent Region Simplify method, and then
-*     performs any further region-specific simplification.
-*
-*     If the Mapping from base to current Frame is not a UnitMap, this
-*     will include attempting to fit a new Region to the boundary defined
-*     in the current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;             /* Current Frame */
-   AstMapping *map;           /* Base -> current Mapping */
-   AstMapping *result;        /* Result pointer to return */
-   AstPointSet *mesh;         /* Mesh of current Frame positions */
-   AstPointSet *ps2;          /* Polygon PointSet in current Frame */
-   AstPolygon *newpol;        /* New Polygon */
-   AstRegion *new;            /* Pointer to simplified Region */
-   AstRegion *this;           /* Pointer to supplied Region structure */
-   AstRegion *unc;            /* Pointer to uncertainty Region */
-   double **ptr2;             /* Pointer axis values in "ps2" */
-   double *mem;               /* Pointer to array holding new vertex coords */
-   double *p;                 /* Pointer to next vertex coords */
-   double *q;                 /* Pointer to next vertex coords */
-   int iv;                    /* Vertex index */
-   int nv;                    /* Number of vertices in polygon */
-   int ok;                    /* Are the new polygon vertices good? */
-   int simpler;               /* Has some simplication taken place? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the supplied Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Invoke the parent Simplify method inherited from the Region class. This
-   will simplify the encapsulated FrameSet and uncertainty Region. */
-   new = (AstRegion *) (*parent_simplify)( this_mapping, status );
-
-/* Note if any simplification took place. This is assumed to be the case
-   if the pointer returned by the above call is different to the supplied
-   pointer. */
-   simpler = ( new != this );
-
-/* We attempt to simplify the Polygon by re-defining it within its current 
-   Frame. Transforming the Polygon from its base to its current Frame may 
-   result in the region no longer being an polygon. We test this by 
-   transforming a set of bounds on the Polygon boundary. This can only be
-   done if the current Frame is 2-dimensional. Also, there is only any
-   point in doing it if the Mapping from base to current Frame in the
-   Polygon is not a UnitMap. */
-   map = astGetMapping(  new->frameset, AST__BASE, AST__CURRENT );
-   if( !astIsAUnitMap( map ) && astGetNout( map ) == 2 ) {
-
-/* Get a pointer to the Frame represented by the Polgon. */
-      frm = astGetFrame( new->frameset, AST__CURRENT );
-
-/* Get a mesh of points covering the Polygon in this Frame. */
-      mesh = astRegMesh( new );
-
-/* Get the Region describing the positional uncertainty in this Frame. */
-      unc = astGetUncFrm( new, AST__CURRENT );
-
-/* Get the positions of the vertices within this Frame. */
-      ps2 = astRegTransform( this, this->points, 1, NULL, NULL );
-      ptr2 = astGetPoints( ps2 );
-
-/* Get the number of vertices. */
-      nv = astGetNpoint( ps2 );
-
-/* Re-organise the vertex axis values into the form required by the
-   Polygon constructor function. */
-      mem = astMalloc( sizeof( double)*(size_t)( 2*nv ) );
-      if( astOK ) {
-         ok = 1;
-         p = mem;
-         q = ptr2[ 0 ];
-         for( iv = 0; iv < nv; iv++ ) {
-            if( ( *(p++) = *(q++) ) == AST__BAD ) ok = 0;
-         }
-         q = ptr2[ 1 ];
-         for( iv = 0; iv < nv; iv++ ) *(p++) = *(q++);
-
-/* Create a new Polygon using these transformed vertices. */
-         newpol = ok ? astPolygon( frm, nv, nv, mem, unc, "", status ) : NULL;
-
-/* See if all points within the mesh created from the original Polygon fall 
-   on the boundary of the new Polygon, to within the uncertainty of the 
-   Region. */
-         if( newpol && astRegPins( newpol, mesh, NULL, NULL ) ) {
-
-/* If so, use the new Polygon in place of the original Region. */
-            (void) astAnnul( new );
-            new = astClone( newpol );
-            simpler =1;
-         }
-
-/* Free resources. */
-         if( newpol ) newpol = astAnnul( newpol );
-      }
-
-      frm = astAnnul( frm );
-      mesh = astAnnul( mesh );
-      unc = astAnnul( unc );
-      ps2 = astAnnul( ps2 );
-      mem = astFree( mem );
-   }
-   map = astAnnul( map );
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it.
-   If the supplied Region had no uncertainty, ensure the returned Region
-   has no uncertainty. Otherwise, return a clone of the supplied pointer. */
-   if( simpler ){
-      astRegOverlay( new, this, 1 );
-      result = (AstMapping *) new;
-
-   } else {
-      new = astAnnul( new );
-      result = astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void SmoothPoly( AstPointSet *pset, int boxsize, double strength, 
-                        int *status ) {
-/*
-*  Name:
-*     SmoothPoly
-
-*  Purpose:
-*     Smoooth a polygon assuming plane geometry.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void SmoothPoly( AstPointSet *pset, int boxsize, double strength, 
-*                      int *status )
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     This function smooths a polygon, without changing the number of
-*     vertices. It assumes plane geometry, so should not be used to
-*     smooth polygons defined within a SkyFrame or CmpFrame.
-*
-*     Each vertex is replaced by a new vertex determined as follows: the 
-*     mean X and Y axis value of the vertices in a section of the polygon 
-*     centred on the vertex being replaced are found (the length of the
-*     section is given by parameter "boxsize"). The new vertex position 
-*     is then the weighted mean of this mean (X,Y) position and the old 
-*     vertex position. The weight for the mean (X,Y) position is given 
-*     by parameter "strength", and the weight for the old vertex
-*     position is (1.0 - strength)
-
-*  Parameters:
-*     pset
-*        A PointSet holding the polygon vertices.
-*     boxsize
-*        Half width of the box filter, given as a number of vertices.
-*     strength
-*        The weight to use for the mean (X,Y) position when finding each
-*        new vertex position. Should be in the range 0.0 to 1.0. A value
-*        of zero results in no change being made to the polygon. A value
-*        of 1.0 results in the returned polygon being fully smoothed.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double **ptr;
-   double *newx;
-   double *newy;
-   double *nx;
-   double *ny;
-   double *oldx;
-   double *oldy;
-   double *ox;
-   double *oy;        
-   double *px;
-   double *py;
-   double *qx;
-   double *qy;
-   double a;
-   double b;
-   double sx;
-   double sy;
-   int half_width;
-   int i;
-   int nv;
-   int top;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the number of vertices. */
-   nv = astGetNpoint( pset );
-
-/* Get pointers to arrays holding the supplied vertex positions. */
-   ptr = astGetPoints( pset );
-   oldx = ptr[ 0 ];
-   oldy = ptr[ 1 ];
-
-/* Allocate arrays to hold the returned vertex positions. */
-   newx = astMalloc( nv*sizeof( double ) );
-   newy = astMalloc( nv*sizeof( double ) );
-
-/* Check these pointers can be used safely. */
-   if( astOK ) {
-
-/* Get weighting factors for the fully smoothed and unsmoothed positions. */
-      a = strength;
-      b = 1.0 - a;
-
-/* Ensure the box size is sufficiently small for there to be room for 
-   two boxes along the polygon. */
-      half_width = nv/4 - 1;
-      if( boxsize < half_width ) half_width = boxsize;
-      if( half_width < 1 ) half_width = 1;
-
-/* Modify the weight for the fully smoothed position to include the 
-   normalisation factor needed to account for the box width. */
-      a /= 2*half_width + 1;
-
-/* Find the sum of the x and y coordinates within a box centred on the
-   first vertex. This includes vertices from the end of the polygon. */
-      px = oldx + 1;
-      qx = oldx + nv;
-      sx = (oldx)[ 0 ];
-   
-      py = oldy + 1;
-      qy = oldy + nv;
-      sy = (oldy)[ 0 ];
-
-      for( i = 0; i < half_width; i++ ) {
-         sx += *(px++) + *(--qx);
-         sy += *(py++) + *(--qy);
-      }
-
-/* Replacing vertices within the first half box will include vertices at 
-   both ends of the polygon. Set up the pointers accordingly, and then
-   find replacements for each vertex in the first half box.*/
-      ox = oldx;
-      oy = oldy;
-      nx = newx;
-      ny = newy;
-      for( i = 0; i < half_width; i++ ) {
-
-/* Form the new vertex (x,y) values as the weighted mean of the mean 
-   (x,y) values in the box, and the old (x,y) values. */
-         *(nx++) = a*sx + b*( *(ox++) );
-         *(ny++) = a*sy + b*( *(oy++) );
-
-/* Add in the next vertex X and Y axis values to the running sums, and 
-   remove the position that has now passed out of the box. */
-         sx += *(px++) - *(qx++);
-         sy += *(py++) - *(qy++);
-      }
-
-/* Adjust the pointer for the rest of the polygon, up to one half box away 
-   from the end. In this section, the smoothing box does not touch either
-   end of the polygon. */
-      top = nv - half_width - 1;
-      qx = oldx;
-      qy = oldy;
-      for( ; i < top; i++ ){
-
-/* Form the new vertex (x,y) values as the weighted mean of the mean 
-   (x,y) values in the box, and the old (x,y) values. */
-         *(nx++) = a*sx + b*( *(ox++) );
-         *(ny++) = a*sy + b*( *(oy++) );
-
-/* Add in the next vertex X and Y axis values to the running sums, and 
-   remove the position that has now passed out of the box. */
-         sx += *(px++) - *(qx++);
-         sy += *(py++) - *(qy++);
-      }
-
-/* Now do the last half box (which includes vertices from the start of 
-   the polygon). */
-      top = nv;
-      px = oldx;
-      py = oldy;
-      for( ; i < top; i++ ){
-         *(nx++) = a*sx + b*( *(ox++) );
-         *(ny++) = a*sy + b*( *(oy++) );
-         sx += *(px++) - *(qx++);
-         sy += *(py++) - *(qy++);
-      }
-
-/* Replace the data points in the PointSet. */
-      ptr[ 0 ] = newx;
-      ptr[ 1 ] = newy;
-      oldx = astFree( oldx );
-      oldy = astFree( oldy );
-   }
-}
-
-/*
-*  Name:
-*     TraceEdge
-
-*  Purpose:
-*     Find a point that is inside the required outline.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     void TraceEdge<Oper><X>( <Xtype> value, <Xtype> array[], 
-*                              int lbnd[ 2 ], int ubnd[ 2 ], int iv0,
-*                              int ix0, int iy0, int starpix, int full,
-*                              int *status );
-
-*  Class Membership:
-*     Polygon member function 
-
-*  Description:
-*     This function forms a polygon enclosing the region of the data
-*     array specified by <Oper> and "value". If this polygon contains
-*     the point "(inx,iny)", then a PointSet is returned holding the
-*     pixel coordinates of the Polygon vertices. If the polygon
-*     does not contain "(inx,iny)", a NULL pointer is returned.
-*
-*     Each vertex in the polygon corresponds to a corner of a pixel in
-*     the data array.
-
-*  Parameters:
-*     value
-*        The data value defining valid pixels.
-*     array
-*        The data array.
-*     lbnd 
-*        The lower pixel index bounds of the array.
-*     ubnd 
-*        The upper pixel index bounds of the array.
-*     iv0
-*        The vector index of a pixel inside the region such that the
-*        pixel to the right is NOT inside the region. This defines the 
-*        start of the polygon.
-*     ix0
-*        The X pixel index of the pixel specified by "iv0".
-*     inx 
-*        The X pixel index of a point which must be inside the polygon
-*        for the polygon to be acceptable.
-*     iny
-*        The Y pixel index of a point which must be inside the polygon
-*        for the polygon to be acceptable.
-*     starpix
-*        If non-zero, the usual Starlink definition of pixel coordinate
-*        is used (integral values at pixel corners). Otherwise, the
-*        system used by other AST functions such as astResample is used 
-*        (integral values at pixel centres).
-*     full
-*        If non-zero, the full polygon is stored. If zero, vertices in the 
-*        middle of straight sections of the Polygon are omitted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a PointSet holding the vertices of the polygon, or
-*     NULL if the polygon did not contain "(inx,iny)".
-
-*  Notes: 
-*     - <Oper> must be one of LT, LE, EQ, GE, GT, NE.
-
-
-*/
-
-/* Define a macro to implement the function for a specific data
-   type and operation. */
-#define MAKE_TRACEEDGE(X,Xtype,Oper,OperI) \
-static AstPointSet *TraceEdge##Oper##X( Xtype value, Xtype array[], \
-                                        int lbnd[ 2 ], int ubnd[ 2 ], \
-                                        int iv0, int ix0, int iy0, \
-                                        int starpix, int full, \
-                                        int *status ){ \
-\
-/* Local Variables: */ \
-   AstPointSet *result; /* Pointer to text describing oper */ \
-   Xtype *pa;           /* Pointer to current valid pixel value */ \
-   Xtype *pb;           /* Pointer to neigbouring valid pixel value */ \
-   Xtype *pc;           /* Pointer to neigbouring valid pixel value */ \
-   double *ptr[ 2 ];    /* PointSet data pointers */ \
-   double *xvert;       /* Pointer to array holding vertex X axis values */ \
-   double *yvert;       /* Pointer to array holding vertex Y axis values */ \
-   double xx;           /* Pixel X coord at corner */ \
-   double yy;           /* Pixel Y coord at corner */ \
-   int at;              /* The pixel corner to draw to */ \
-   int done;            /* Have we arrived back at the start of the polygon? */ \
-   int ii;              /* Index of new vertex */ \
-   int ix;              /* X pixel index of current valid pixel */ \
-   int iy;              /* Y pixel index of current valid pixel */ \
-   int nright;          /* Overall number of right hand turns along polygon */ \
-   int nvert;           /* Number of vertices */ \
-   int nx;              /* Pixels per row */ \
-\
-/* Initialise */ \
-   result = NULL; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-\
-/* Initialise pointers to arrays holding the X and Y pixel coordinates at \
-   the vertices of the polygon. */ \
-   xvert = NULL; \
-   yvert = NULL; \
-   nvert = 0; \
-\
-/* Find number of pixels in one row of the array. */ \
-   nx = ( ubnd[ 0 ] - lbnd[ 0 ] + 1 ); \
-\
-/* The four corners of a pixel are numbered as follows: 0=bottom left, \
-   1=top left, 2=top right, 3=bottom right. The following algorithm moves \
-   along pixel edges, from corner to corner, using the above numbering \
-   scheme to identify the corners. We start the polygon by moving from the \
-   bottom right to the top right corner of pixel "(ix0,iy0)". */ \
-   ix = ix0; \
-   iy = iy0; \
-   at = 2; \
-\
-/* Store a pointer to the first good pixel value. */ \
-   pa = array + ( ix - lbnd[ 0 ] ) + nx*( iy - lbnd[ 1 ] ) ; \
-\
-/* We count the number of times the polygon turns to the right compared \
-   to the left. Initialise it to zero. */ \
-   nright = 0; \
-\
-/* Loop round tracing out the polygon until we arrive back at the \
-   beginning. The Polygon class requires that the inside of the polygon \
-   is to the left as we move round the polygon in an anti-clockwise \
-   direction. So at each corner, we attempt to move to the next \
-   anti-clockwise good pixel corner. */ \
-   done = 0; \
-   while( !done ) { \
-\
-/* If we have arrived at the bottom left corner of the good pixel, we must \
-   have come from the top left corner since all movements around a pixel \
-   must be anti-clockwise. */ \
-      if( at == 0 ) { \
-\
-/* Note the pixel coordinates at the bottom left corner of the current \
-   pixel. */ \
-         if( starpix ) { \
-            xx = ix - 1.0; \
-            yy = iy - 1.0; \
-         } else { \
-            xx = ix - 0.5; \
-            yy = iy - 0.5; \
-         } \
-\
-/* Get a pointer to lower left pixel value */ \
-         pb = pa - nx - 1; \
-\
-/* Get a pointer to lower mid pixel value. */ \
-         pc = pb + 1; \
-\
-/* If the lower left pixel is within the array and meets the validity \
-   requirements, move to the left along its top edge. */ \
-         if( iy > lbnd[ 1 ] && ix > lbnd[ 0 ] && ISVALID(*pb,OperI,value) ) { \
-            nright++; \
-            pa = pb; \
-            at = 1; \
-            ix--; \
-            iy--; \
-\
-/* Otherwise, if lower mid pixel is good, move down its left edge. */ \
-         } else if( iy > lbnd[ 1 ] && ISVALID(*pc,OperI,value) ) { \
-            pa = pc; \
-            at = 0; \
-            iy--; \
-\
-/* Otherwise, move to the right along the bottom edge of the current pixel. */ \
-         } else { \
-            nright--; \
-            at = 3; \
-         } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
-   polygon, append the pixel coordinates at this pixel corner to the \
-   polygon. */ \
-         if( full || pa != pc ) ADD( xx, yy ); \
-\
-/* If we have arrived at the top left corner of the good pixel, we must \
-   have come from the top right corner. */ \
-      } else if( at == 1 ) { \
-\
-/* Note the pixel coordinates at the top left corner of the current \
-   pixel. */ \
-         if( starpix ) { \
-            xx = ix - 1.0; \
-            yy = iy; \
-         } else { \
-            xx = ix - 0.5; \
-            yy = iy + 0.5; \
-         } \
-\
-/* Get a pointer to upper left pixel value */ \
-         pb = pa + nx - 1; \
-\
-/* Get a pointer to mid left pixel value. */ \
-         pc = pa - 1; \
-\
-/* If upper left pixel is good, move up its left edge. */ \
-         if( iy < ubnd[ 1 ] && ix > lbnd[ 0 ] && ISVALID(*pb,OperI,value) ) { \
-            nright++; \
-            pa = pb; \
-            at = 2; \
-            ix--; \
-            iy++; \
-\
-/* Otherwise, if left mid pixel is good, move left along its top edge. */ \
-         } else if( ix > lbnd[ 0 ] && ISVALID(*pc,OperI,value) ) { \
-            pa = pc; \
-            at = 1; \
-            ix--; \
-\
-/* Otherwise, move down the left edge of the current pixel. */ \
-         } else { \
-            nright--; \
-            at = 0; \
-         } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
-   polygon, append the pixel coordinates at this pixel corner to the \
-   polygon. */ \
-         if( full || pa != pc ) ADD( xx, yy ); \
-\
-/* If we have arrived at the top right corner of the good pixel, we must \
-   have come from the bottom right corner. */ \
-      } else if( at == 2 ) { \
-\
-/* Note the pixel coordinates at the top right corner of the current \
-   pixel. */ \
-         if( starpix ) { \
-            xx = ix; \
-            yy = iy; \
-         } else { \
-            xx = ix + 0.5; \
-            yy = iy + 0.5; \
-         } \
-\
-/* Pointer to upper right pixel value */ \
-         pb = pa + nx + 1; \
-\
-/* Pointer to top mid pixel value. */ \
-         pc = pa + nx; \
-\
-/* If upper right pixel is good, move right along its bottom edge. */ \
-         if( iy < ubnd[ 1 ] && ix < ubnd[ 0 ] && ISVALID(*pb,OperI,value) ){ \
-            nright++; \
-            pa = pb; \
-            at = 3; \
-            ix++; \
-            iy++; \
-\
-/* Otherwise, if upper mid pixel is good, move up its right edge. */ \
-         } else if( iy < ubnd[ 1 ] && ISVALID(*pc,OperI,value) ) { \
-            pa = pc; \
-            at = 2; \
-            iy++; \
-\
-/* Otherwise, move left along the top edge of the current pixel. */ \
-         } else { \
-            nright--; \
-            at = 1; \
-         } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
-   polygon, append the pixel coordinates at this pixel corner to the \
-   polygon. */ \
-         if( full || pa != pc ) ADD( xx, yy ); \
-\
-/* Arrived at bottom right corner of good pixel from lower left. */ \
-      } else { \
-\
-/* Note the pixel coordinates at the bottom right corner of the current \
-   pixel. */ \
-         if( starpix ) { \
-            xx = ix; \
-            yy = iy - 1.0; \
-         } else { \
-            xx = ix + 0.5; \
-            yy = iy - 0.5; \
-         } \
-\
-/* Pointer to lower right pixel value */ \
-         pb = pa - ( nx - 1 ); \
-\
-/* Pointer to mid right pixel value. */ \
-         pc = pa + 1; \
-\
-/* If lower right pixel is good, move down its left edge. */ \
-         if( iy > lbnd[ 1 ] && ix < ubnd[ 0 ] && ISVALID(*pb,OperI,value) ) { \
-            nright++; \
-            pa = pb; \
-            at = 0; \
-            ix++; \
-            iy--; \
-\
-/* Otherwise, if right mid pixel is good, move right along its lower edge. */ \
-         } else if( ix < ubnd[ 0 ] && ISVALID(*pc,OperI,value) ) { \
-            pa = pc; \
-            at = 3; \
-            ix++; \
-\
-/* Otherwise, move up the left edge of the current pixel. */ \
-         } else { \
-            nright--; \
-            at = 2; \
-         } \
-\
-/* If the polygon bends at this point, or if we will be smoothing the \
-   polygon, append the pixel coordinates at this pixel corner to the \
-   polygon. */ \
-         if( full || pa != pc ) ADD( xx, yy ); \
-      } \
-\
-/* If we have arrived back at the start, break out of the loop. */ \
-      if( ix == ix0 && iy == iy0 && at == 2 ) done = 1; \
-   } \
-\
-/* If we have circled round to the right, the polygon will not enclosed \
-   the specified position, so free resources and return a NULL pointer. */ \
-   if( nright > 0 ) { \
-      xvert = astFree( xvert ); \
-      yvert = astFree( yvert ); \
-\
-/* If we have circled round to the left, the polygon will enclose \
-   the specified position, so create and return a PointSet. */ \
-   } else { \
-      result = astPointSet( nvert, 2, " ", status ); \
-      ptr[ 0 ] = xvert; \
-      ptr[ 1 ] = yvert; \
-      astSetPoints( result, ptr ); \
-   } \
-\
-/* Annul the returned PointSet if anythign went wrong. */ \
-   if( !astOK && result ) result = astAnnul( result ); \
-\
-/* Return the PointSet pointer. */ \
-   return result; \
-}
-
-/* Define a macro for testing if a pixel value <V> satisfies the requirements
-   specified by <Oper> and <Value>. Compiler optimisation should remove
-   all the "if" testing from this expression. */
-#define ISVALID(V,OperI,Value) ( \
-   ( OperI == AST__LT ) ? ( (V) < Value ) : ( \
-      ( OperI == AST__LE ) ? ( (V) <= Value ) : ( \
-         ( OperI == AST__EQ ) ? ( (V) == Value ) : ( \
-            ( OperI == AST__GE ) ? ( (V) >= Value ) : ( \
-               ( OperI == AST__NE ) ? ( (V) != Value ) : ( \
-                  (V) > Value \
-               ) \
-            ) \
-         ) \
-      ) \
-   ) \
-)
-
-/* Define a macro to add a vertex position to dynamically allocated
-   arrays of X and Y positions. */
-#define ADD(X,Y) {\
-   ii = nvert++; \
-   xvert = (double *) astGrow( xvert, nvert, sizeof( double ) ); \
-   yvert = (double *) astGrow( yvert, nvert, sizeof( double ) ); \
-   if( astOK ) { \
-      xvert[ ii ] = (X); \
-      yvert[ ii ] = (Y); \
-   } \
-}
-
-/* Define a macro that uses the above macro to to create implementations
-   of TraceEdge for all operations. */
-#define MAKEALL_TRACEEDGE(X,Xtype) \
-MAKE_TRACEEDGE(X,Xtype,LT,AST__LT) \
-MAKE_TRACEEDGE(X,Xtype,LE,AST__LE) \
-MAKE_TRACEEDGE(X,Xtype,EQ,AST__EQ) \
-MAKE_TRACEEDGE(X,Xtype,NE,AST__NE) \
-MAKE_TRACEEDGE(X,Xtype,GE,AST__GE) \
-MAKE_TRACEEDGE(X,Xtype,GT,AST__GT)
-
-/* Expand the above macro to generate a function for each required
-   data type and operation. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKEALL_TRACEEDGE(LD,long double) 
-#endif
-MAKEALL_TRACEEDGE(D,double)
-MAKEALL_TRACEEDGE(L,long int)
-MAKEALL_TRACEEDGE(UL,unsigned long int)
-MAKEALL_TRACEEDGE(I,int)
-MAKEALL_TRACEEDGE(UI,unsigned int)
-MAKEALL_TRACEEDGE(S,short int)
-MAKEALL_TRACEEDGE(US,unsigned short int)
-MAKEALL_TRACEEDGE(B,signed char)
-MAKEALL_TRACEEDGE(UB,unsigned char)
-MAKEALL_TRACEEDGE(F,float)
-
-/* Undefine the macros. */
-#undef MAKE_TRACEEDGE
-#undef MAKEALL_TRACEEDGE
-#undef ISVALID
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Polygon to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Polygon member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a Polygon and a set of points encapsulated in a
-*     PointSet and transforms the points by setting axis values to
-*     AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the Polygon.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  The forward and inverse transformations are identical for a
-*     Region.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of axes in the Frame represented by the Polygon.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Pointer to base Frame in FrameSet */
-   AstLineDef *a;                /* Line from inside point to test point */
-   AstLineDef *b;                /* Polygon edge */
-   AstPointSet *in_base;         /* PointSet holding base Frame input positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstPolygon *this;             /* Pointer to Polygon */
-   double **ptr_in;              /* Pointer to input base Frame coordinate data */
-   double **ptr_out;             /* Pointer to output current Frame coordinate data */
-   double *px;                   /* Pointer to array of first axis values */
-   double *py;                   /* Pointer to array of second axis values */
-   double p[ 2 ];                /* Current test position */
-   int closed;                   /* Is the boundary part of the Region? */
-   int i;                        /* Edge index */
-   int icoord;                   /* Coordinate index */
-   int in_region;                /* Is the point inside the Region? */
-   int ncoord_out;               /* No. of current Frame axes */
-   int ncross;                   /* Number of crossings */
-   int neg;                      /* Has the Region been negated? */
-   int npoint;                   /* No. of input points */
-   int nv;                       /* No. of vertices */
-   int point;                    /* Loop counter for input points */
-   int pos;                      /* Is test position in, on, or outside boundary? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Polygon structure. */
-   this = (AstPolygon *) this_mapping;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary,
-   containing a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* Get the number of points to be transformed. */
-   npoint = astGetNpoint( result );
-
-/* Get a pointer to the output axis values. */
-   ptr_out = astGetPoints( result );   
-
-/* Find the number of axes in the current Frame. This need not be 2 (the
-   number of axes in the *base* Frame must be 2 however). */
-   ncoord_out = astGetNcoord( result );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet to transform the supplied positions
-   from the current Frame in the encapsulated FrameSet (the Frame
-   represented by the Region), to the base Frame (the Frame in which the
-   Region is defined). This call also returns a pointer to the base Frame
-   of the encapsulated FrameSet. Note, the returned pointer may be a
-   clone of the "in" pointer, and so we must be carefull not to modify the
-   contents of the returned PointSet. */
-   in_base = astRegTransform( this, in, 0, NULL, &frm );
-   ptr_in = astGetPoints( in_base );
-
-/* Get the number of vertices in the polygon. */
-   nv = astGetNpoint( ((AstRegion *) this)->points );
-
-/* See if the boundary is part of the Region. */
-   closed = astGetClosed( this );
-
-/* See if the Region has been negated. */
-   neg = astGetNegated( this );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-      px = ptr_in[ 0 ];
-      py = ptr_in[ 1 ];
-
-/* Loop round each supplied point in the base Frame of the polygon. */
-      for ( point = 0; point < npoint; point++, px++, py++ ) {
-
-/* If the input point is bad, indicate that bad output values should be
-   returned. */
-         if( *px == AST__BAD || *py == AST__BAD ) {
-            in_region = 0;
-
-/* Otherwise, we first determine if the point is inside, outside, or on, 
-   the Polygon boundary. Initialially it is unknown. */
-         } else {
-
-/* Ensure cached information is available.*/
-            Cache( this, status );
-
-/* Create a definition of the line from a point which is inside the
-   polygon to the supplied point. This is a structure which includes
-   cached intermediate information which can be used to speed up
-   subsequent calculations. */
-            p[ 0 ] = *px;
-            p[ 1 ] = *py;
-            a = astLineDef( frm, this->in, p );
-
-/* We now determine the number of times this line crosses the polygon
-   boundary. Initialise the number of crossings to zero. */
-            ncross = 0;
-            pos = UNKNOWN;
-
-/* Loop rouind all edges of the polygon. */
-            for( i = 0; i < nv; i++ ) {
-               b = this->edges[ i ];
-
-/* If this point is on the current edge, then we need do no more checks
-   since we know it is either inside or outside the polygon (depending on
-   whether the polygon is closed or not). */
-               if( astLineContains( frm, b, 0, p ) ) {
-                  pos = ON;
-                  break;
-
-/* Otherwise, see if the two lines cross within their extent. If so,
-   increment the number of crossings. */
-               } else if( astLineCrossing( frm, b, a, NULL ) ) {
-                  ncross++;
-               }
-            }
-
-/* Free resources */
-            a = astFree( a );
-
-/* If the position is not on the boundary, it is inside the boundary if
-   the number of crossings is even, and outside otherwise. */
-            if( pos == UNKNOWN ) pos = ( ncross % 2 == 0 )? IN : OUT;
-
-/* Whether the point is in the Region depends on whether the point is
-   inside the polygon boundary, whether the Polygon has been negated, and
-   whether the polygon is closed. */
-            if( neg ) {
-               if( pos == IN ) {
-                  in_region = 0;
-               } else if( pos == OUT ) {
-                  in_region = 1;
-               } else if( closed ) {
-                  in_region = 1;
-               } else {
-                  in_region = 0;
-               }
-
-            } else {
-               if( pos == IN ) {
-                  in_region = 1;
-               } else if( pos == OUT ) {
-                  in_region = 0;
-               } else if( closed ) {
-                  in_region = 1;
-               } else {
-                  in_region = 0;
-               }
-            }
-         }
-
-/* If the point is not inside the Region, store bad output values. */
-         if( !in_region ) {
-            for ( icoord = 0; icoord < ncoord_out; icoord++ ) {
-               ptr_out[ icoord ][ point ] = AST__BAD;
-            }
-         }
-      } 
-   }
-
-/* Free resources */
-   in_base = astAnnul( in_base );
-   frm = astAnnul( frm );
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Polygon objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Polygon objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstPolygon *in;                /* Pointer to input Polygon */
-   AstPolygon *out;               /* Pointer to output Polygon  */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Polygons. */
-   in = (AstPolygon *) objin;
-   out = (AstPolygon *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Polygon. */
-   out->edges = NULL;
-   out->startsat = NULL;
-
-/* Indicate cached information needs nre-calculating. */
-   astResetCache( (AstPolygon *) out );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Polygon objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Polygon objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPointSet *ps;                  /* Pointer to PointSet inside Region */
-   AstPolygon *this;                 /* Pointer to Polygon */
-   int i;                            /* Index of vertex */
-   int istat;                        /* Original AST error status */
-   int nv;                           /* Number of vertices */
-   int rep;                          /* Original error reporting state */
-
-/* Obtain a pointer to the Polygon structure. */
-   this = (AstPolygon *) obj;
-
-/* Annul all resources. */
-   ps = ((AstRegion *) this)->points;
-   if( this->edges && ps ) {
- 
-/* Ensure we get a value for "nv" even if an error has occurred. */
-      istat = astStatus;
-      astClearStatus;
-      rep = astReporting( 0 );
-
-      nv = astGetNpoint( ps );
-
-      astSetStatus( istat );
-      astReporting( rep );
-
-/* Free the structures holding the edge information. */
-      for( i = 0; i < nv; i++ ) {
-         this->edges[ i ] = astFree( this->edges[ i ] );
-      }
-      this->edges = astFree( this->edges );
-      this->startsat = astFree( this->startsat );
-
-   }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Polygon objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Polygon class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Polygon whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPolygon *this;                 /* Pointer to the Polygon structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Polygon structure. */
-   this = (AstPolygon *) this_object;
-
-/* Write out values representing the instance variables for the
-   Polygon class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* A flag indicating the convention used for determining the interior of
-   the polygon. A zero value indicates that the old AST system is in 
-   use (inside to the left when moving anti-clockwise round the vertices  
-   as viewed from the outside of the celestial sphere). A non-zero value 
-   indicates the STC system is in use (inside to the left when moving 
-   anti-clockwise round the vertices as viewed from the inside of the 
-   celestial sphere). AST currently uses the STC system. */
-   astWriteInt( channel, "Order", 1, 0, 1, "Polygon uses STC vertex order convention" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPolygon and astCheckPolygon functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Polygon,Region)
-astMAKE_CHECK(Polygon)
-
-AstPolygon *astPolygon_( void *frame_void, int npnt, int dim, 
-                         const double *points, AstRegion *unc,
-                         const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astPolygon
-f     AST_POLYGON
-
-*  Purpose:
-*     Create a Polygon.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "polygon.h"
-c     AstPolygon *astPolygon( AstFrame *frame, int npnt, int dim, 
-c                             const double *points, AstRegion *unc,
-c                             const char *options, ... )
-f     RESULT = AST_POLYGON( FRAME, NPNT, DIM, POINTS, UNC, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Polygon constructor.
-
-*  Description:
-*     This function creates a new Polygon object and optionally initialises 
-*     its attributes.
-*
-*     The Polygon class implements a polygonal area, defined by a
-*     collection of vertices, within a 2-dimensional Frame. The vertices
-*     are connected together by geodesic curves within the encapsulated Frame.
-*     For instance, if the encapsulated Frame is a simple Frame then the
-*     geodesics will be straight lines, but if the Frame is a SkyFrame then 
-*     the geodesics will be great circles. Note, the vertices must be
-*     supplied in an order such that the inside of the polygon is to the
-*     left of the boundary as the vertices are traversed. Supplying them
-*     in the reverse order will effectively negate the polygon.
-*
-*     Within a SkyFrame, neighbouring vertices are always joined using the 
-*     shortest path. Thus if an edge of 180 degrees or more in length is
-*     required, it should be split into section each of which is less
-*     than 180 degrees. The closed path joining all the vertices in order
-*     will divide the celestial sphere into two disjoint regions. The
-*     inside of the polygon is the region which is circled in an
-*     anti-clockwise manner (when viewed from the inside of the celestial
-*     sphere) when moving through the list of vertices in the order in
-*     which they were supplied when the Polygon was created (i.e. the
-*     inside is to the left of the boundary when moving through the
-*     vertices in the order supplied).
-
-*  Parameters:
-c     frame
-f     FRAME = INTEGER (Given)
-*        A pointer to the Frame in which the region is defined. It must
-*        have exactly 2 axes. A deep copy is taken of the supplied Frame. 
-*        This means that any subsequent changes made to the Frame using the 
-*        supplied pointer will have no effect the Region.
-c     npnt
-f     NPNT = INTEGER (Given)
-*        The number of points in the Region. 
-c     dim
-f     DIM = INTEGER (Given)
-c        The number of elements along the second dimension of the "points"
-f        The number of elements along the first dimension of the POINTS
-*        array (which contains the point coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-c        given should not be less than "npnt".
-f        given should not be less than NPNT.
-c     points
-f     POINTS( DIM, 2 ) = DOUBLE PRECISION (Given)
-c        The address of the first element of a 2-dimensional array of 
-c        shape "[2][dim]" giving the physical coordinates of the vertices.
-c        These should be stored such that the value of coordinate 
-c        number "coord" for point number "pnt" is found in element 
-c        "in[coord][pnt]".
-f        A 2-dimensional array giving the physical coordinates of the
-f        vertices. These should be stored such that the value of coordinate 
-f        number COORD for point number PNT is found in element IN(PNT,COORD).
-c     unc
-f     UNC = INTEGER (Given)
-*        An optional pointer to an existing Region which specifies the 
-*        uncertainties associated with the boundary of the Box being created. 
-*        The uncertainty in any point on the boundary of the Box is found by 
-*        shifting the supplied "uncertainty" Region so that it is centred at 
-*        the boundary point being considered. The area covered by the
-*        shifted uncertainty Region then represents the uncertainty in the
-*        boundary position. The uncertainty is assumed to be the same for
-*        all points.
-*
-*        If supplied, the uncertainty Region must be of a class for which 
-*        all instances are centro-symetric (e.g. Box, Circle, Ellipse, etc.) 
-*        or be a Prism containing centro-symetric component Regions. A deep 
-*        copy of the supplied Region will be taken, so subsequent changes to 
-*        the uncertainty Region using the supplied pointer will have no 
-*        effect on the created Box. Alternatively, 
-f        a null Object pointer (AST__NULL) 
-c        a NULL Object pointer 
-*        may be supplied, in which case a default uncertainty is used 
-*        equivalent to a box 1.0E-6 of the size of the Box being created.
-*
-*        The uncertainty Region has two uses: 1) when the 
-c        astOverlap
-f        AST_OVERLAP 
-*        function compares two Regions for equality the uncertainty
-*        Region is used to determine the tolerance on the comparison, and 2)
-*        when a Region is mapped into a different coordinate system and
-*        subsequently simplified (using 
-c        astSimplify),
-f        AST_SIMPLIFY),
-*        the uncertainties are used to determine if the transformed boundary 
-*        can be accurately represented by a specific shape of Region.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Polygon. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Polygon. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPolygon()
-f     AST_POLYGON = INTEGER
-*        A pointer to the new Polygon.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPolygon *new;            /* Pointer to new Polygon */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the supplied Frame structure. */
-   frame = astCheckFrame( frame_void );
-
-/* Initialise the Polygon, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPolygon( NULL, sizeof( AstPolygon ), !class_init, 
-                         &class_vtab, "Polygon", frame, npnt, 
-                         dim, points, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Polygon's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new Polygon. */
-   return new;
-}
-
-AstPolygon *astPolygonId_( void *frame_void, int npnt, int dim,
-                           const double *points, void *unc_void, 
-                           const char *options, ... ) {
-/*
-*  Name:
-*     astPolygonId_
-
-*  Purpose:
-*     Create a Polygon.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     AstPolygon *astPolygonId_( void *frame_void, int npnt,
-*                                int dim, const double *points, void *unc_void,
-*                                const char *options, ... )
-
-*  Class Membership:
-*     Polygon constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astPolygon constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astPolygon_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astPolygon_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astPolygon_.
-
-*  Returned Value:
-*     The ID value associated with the new Polygon.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrame *frame;              /* Pointer to Frame structure */
-   AstPolygon *new;              /* Pointer to new Polygon */
-   AstRegion *unc;               /* Pointer to Region structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Frame pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Frame. */
-   frame = astVerifyFrame( astMakePointer( frame_void ) );
-
-/* Obtain a Region pointer from the supplied "unc" ID and validate the
-   pointer to ensure it identifies a valid Region . */
-   unc = unc_void ? astCheckRegion( astMakePointer( unc_void ) ) : NULL;
-
-/* Initialise the Polygon, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPolygon( NULL, sizeof( AstPolygon ), !class_init, 
-                         &class_vtab, "Polygon", frame, npnt, dim, 
-                         points, unc );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new Polygon's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new Polygon. */
-   return astMakeId( new );
-}
-
-
-AstPolygon *astInitPolygon_( void *mem, size_t size, int init, AstPolygonVtab *vtab, 
-                             const char *name, AstFrame *frame, int npnt, 
-                             int dim, const double *points, AstRegion *unc, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPolygon
-
-*  Purpose:
-*     Initialise a Polygon.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     AstPolygon *astInitPolygon( void *mem, size_t size, int init, AstPolygonVtab *vtab, 
-*                                 const char *name, AstFrame *frame, int npnt, 
-*                                 int dim, const double *points, AstRegion *unc )
-
-*  Class Membership:
-*     Polygon initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Polygon object. It allocates memory (if necessary) to accommodate
-*     the Polygon plus any additional data associated with the derived class.
-*     It then initialises a Polygon structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a Polygon at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Polygon is to be initialised.
-*        This must be of sufficient size to accommodate the Polygon data
-*        (sizeof(Polygon)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Polygon (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the Polygon
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the Polygon's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Polygon.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     frame
-*        A pointer to the Frame in which the region is defined.
-*     npnt
-*        The number of points in the Region. 
-*     dim
-*        The number of elements along the second dimension of the "points"
-*        array (which contains the point coordinates). This value is
-*        required so that the coordinate values can be correctly
-*        located if they do not entirely fill this array. The value
-*        given should not be less than "npnt".
-*     points
-*        The address of the first element of a 2-dimensional array of 
-*        shape "[2][dim]" giving the physical coordinates of the 
-*        points. These should be stored such that the value of coordinate 
-*        number "coord" for point number "pnt" is found in element 
-*        "in[coord][pnt]".
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points in the new Polygon being 
-*        initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal 
-*        to 1.0E-6 of the dimensions of the new Polygon's bounding box are 
-*        used. If an uncertainty Region is supplied, it must be either a Box, 
-*        a Circle or an Ellipse, and its encapsulated Frame must be related
-*        to the Frame supplied for parameter "frame" (i.e. astConvert
-*        should be able to find a Mapping between them). Two positions 
-*        the "frame" Frame are considered to be co-incident if their 
-*        uncertainty Regions overlap. The centre of the supplied
-*        uncertainty Region is immaterial since it will be re-centred on the 
-*        point being tested before use. A deep copy is taken of the supplied 
-*        Region.
-
-*  Returned Value:
-*     A pointer to the new Polygon.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPolygon *new;        /* Pointer to new Polygon */
-   AstPointSet *pset;        /* Pointer to PointSet holding points */
-   const double *q;          /* Pointer to next supplied axis value */
-   double **ptr;             /* Pointer to data in pset */
-   double *p;                /* Pointer to next PointSet axis value */
-   int i;                    /* Axis index */
-   int j;                    /* Point index */
-   int nin;                  /* No. of axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPolygonVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the number of axis values per position is correct. */
-   nin = astGetNaxes( frame );
-   if( nin != 2 ) {
-      astError( AST__BADIN, "astInitPolygon(%s): The supplied %s has %d "
-                "axes - polygons must have exactly 2 axes.", status, name,
-                astGetClass( frame ), nin );
-
-/* If so create a PointSet and store the supplied points in it. Check
-   none are bad. */
-   } else {
-      pset = astPointSet( npnt, 2, "", status );
-      ptr = astGetPoints( pset );
-      for( i = 0; i < 2 && astOK; i++ ) {
-         p = ptr[ i ];
-         q = points + i*dim;
-         for( j = 0; j < npnt; j++ ) {
-            if( (*(p++) = *(q++)) == AST__BAD ) {
-               astError( AST__BADIN, "astInitPolygon(%s): One or more "
-                         "bad axis values supplied for the vertex "
-                         "number %d.", status, name, j + 1 );
-               break;
-            }
-         }
-      }
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the Polygon structure, allocating memory if necessary. */
-      new = (AstPolygon *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                          name, frame, pset, unc );
-      if ( astOK ) {
-
-/* Initialise the Polygon data. */
-/* ------------------------------ */
-         new->lbnd[ 0 ] = AST__BAD;
-         new->ubnd[ 0 ] = AST__BAD;
-         new->lbnd[ 1 ] = AST__BAD;
-         new->ubnd[ 1 ] = AST__BAD;
-         new->edges = NULL;
-         new->startsat = NULL;
-         new->totlen = 0.0;
-         new->acw = 1;
-         new->stale = 1;
-
-/* If an error occurred, clean up by deleting the new Polygon. */
-         if ( !astOK ) new = astDelete( new );
-      }
-
-/* Free resources. */
-      pset = astAnnul( pset );
-
-   }
-
-/* Return a pointer to the new Polygon. */
-   return new;
-}
-
-AstPolygon *astLoadPolygon_( void *mem, size_t size, AstPolygonVtab *vtab, 
-                             const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPolygon
-
-*  Purpose:
-*     Load a Polygon.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "polygon.h"
-*     AstPolygon *astLoadPolygon( void *mem, size_t size, AstPolygonVtab *vtab, 
-*                                 const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Polygon loader.
-
-*  Description:
-*     This function is provided to load a new Polygon using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Polygon structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Polygon at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Polygon is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Polygon data (sizeof(Polygon)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Polygon (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Polygon structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPolygon) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Polygon. If this is NULL, a pointer
-*        to the (static) virtual function table for the Polygon class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Polygon" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Polygon.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPolygon *new;              /* Pointer to the new Polygon */
-   int order;                    /* Is the new (STC) order convention used? */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Polygon. In this case the
-   Polygon belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPolygon );
-      vtab = &class_vtab;
-      name = "Polygon";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPolygonVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Polygon. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Polygon" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* A flag indicating what order the vertices are stored in. See the Dump
-   function. */
-      order = astReadInt( channel, "order", 0 );
-
-/* Initialise other class properties. */
-      new->lbnd[ 0 ] = AST__BAD;
-      new->ubnd[ 0 ] = AST__BAD;
-      new->lbnd[ 1 ] = AST__BAD;
-      new->ubnd[ 1 ] = AST__BAD;
-      new->edges = NULL;
-      new->startsat = NULL;
-      new->totlen = 0.0;
-      new->acw = 1;
-      new->stale = 1;
-
-/* If the order in which the vertices were written used the old AST
-   convention, negate the Polygon so that it is consistent with the 
-   current conevtion (based on STC). */
-      if( ! order ) astNegate( new );
-
-/* If an error occurred, clean up by deleting the new Polygon. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Polygon pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-AstPolygon *astDownsize_( AstPolygon *this, double maxerr, int maxvert, 
-                          int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Polygon,Downsize))( this, maxerr, maxvert, status );
-}
-
-
diff --git a/ast-5.3-1/polygon.h b/ast-5.3-1/polygon.h
deleted file mode 100644
index e469066..0000000
--- a/ast-5.3-1/polygon.h
+++ /dev/null
@@ -1,293 +0,0 @@
-#if !defined( POLYGON_INCLUDED ) /* Include this file only once */
-#define POLYGON_INCLUDED
-/*
-*+
-*  Name:
-*     polygon.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Polygon class.
-
-*  Invocation:
-*     #include "polygon.h"
-
-*  Description:
-*     This include file defines the interface to the Polygon class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Polygon class implements a Region which represents a collection
-*     of points in a Frame.
-
-*  Inheritance:
-*     The Polygon class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-OCT-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frame.h"               /* Coordinate systems */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "timeframe.h"           /* For AST__LT definition */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Flags used to indicate how astOutline<X> should define the pixel
-   region to be outlined. We omit AST__LT here since it is defined in
-   timeframe.h (with value 11). */
-#define AST__LE 2
-#define AST__EQ 3
-#define AST__GE 4
-#define AST__GT 5
-#define AST__NE 6
-
-/* Type Definitions. */
-/* ================= */
-/* Polygon structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPolygon {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;          /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double in[2];           /* A point which is inside the polygon */
-   double lbnd[2];         /* Lower axis limits of bounding box */
-   double ubnd[2];         /* Upper axis limits of bounding box */
-   AstLineDef **edges;     /* Cached description of edges */
-   double *startsat;       /* Perimeter distance to each vertex */
-   double totlen;          /* Total perimeter distance round polygon */
-   int acw;                /* Are vertices stored in anti-clockwise order? */
-   int stale;              /* Is cached information stale? */
-} AstPolygon;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPolygonVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   AstPolygon *(* Downsize)( AstPolygon *, double, int, int * );
-
-} AstPolygonVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstPolygonGlobals {
-   AstPolygonVtab Class_Vtab;
-   int Class_Init;
-} AstPolygonGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPolygonGlobals_( AstPolygonGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Polygon)          /* Check class membership */
-astPROTO_ISA(Polygon)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPolygon *astPolygon_( void *, int, int, const double *, AstRegion *, const char *, int *, ...);
-#else
-AstPolygon *astPolygonId_( void *, int, int, const double *, AstRegion *, const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPolygon *astInitPolygon_( void *, size_t, int, AstPolygonVtab *, const char *, AstFrame *, int, int, const double *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitPolygonVtab_( AstPolygonVtab *, const char *, int * );
-
-/* Loader. */
-AstPolygon *astLoadPolygon_( void *, size_t, AstPolygonVtab *,
-                             const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstPolygon *astDownsize_( AstPolygon *, double, int, int * );
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-AstPolygon *astOutlineLD_( long double, int,long double[], int[2], int[2], double, int, int[2], int, int * );
-#endif
-AstPolygon *astOutlineB_( signed char, int, signed char[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineD_( double, int, double[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineF_( float, int, float[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineI_( int, int, int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineL_( long int, int, long int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineS_( short int, int, short int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUB_( unsigned char, int, unsigned char[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUI_( unsigned int, int, unsigned int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUL_( unsigned long int, int, unsigned long int[], int[2], int[2], double, int, int[2], int, int * );
-AstPolygon *astOutlineUS_( unsigned short int, int, unsigned short int[], int[2], int[2], double, int, int[2], int, int * );
-
-# if defined(astCLASS)           /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPolygon(this) astINVOKE_CHECK(Polygon,this,0)
-#define astVerifyPolygon(this) astINVOKE_CHECK(Polygon,this,1)
-
-/* Test class membership. */
-#define astIsAPolygon(this) astINVOKE_ISA(Polygon,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPolygon astINVOKE(F,astPolygon_)
-#else
-#define astPolygon astINVOKE(F,astPolygonId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPolygon(mem,size,init,vtab,name,frame,npnt,indim,points,unc) \
-astINVOKE(O,astInitPolygon_(mem,size,init,vtab,name,frame,npnt,indim,points,unc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPolygonVtab(vtab,name) astINVOKE(V,astInitPolygonVtab_(vtab,name,STATUS_PTR))
-
-/* Loader. */
-#define astLoadPolygon(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPolygon_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPolygon to validate Polygon pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astDownsize(this,maxerr,maxvert) \
-astINVOKE(O,astDownsize_(astCheckPolygon(this),maxerr,maxvert,STATUS_PTR))
-
-
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define astOutlineLD(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineLD_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#endif
-
-#define astOutlineB(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineB_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineD(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineD_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineF(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineF_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineI(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineI_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineL(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineL_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineS(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineS_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUB(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUB_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUI(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUI_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUL(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUL_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-#define astOutlineUS(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix) \
-astINVOKE(O,astOutlineUS_(value,oper,array,lbnd,ubnd,maxerr,maxvert,inside,starpix,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/polymap.c b/ast-5.3-1/polymap.c
deleted file mode 100644
index 224906f..0000000
--- a/ast-5.3-1/polymap.c
+++ /dev/null
@@ -1,2272 +0,0 @@
-/*
-*class++
-*  Name:
-*     PolyMap
-
-*  Purpose:
-*     Map coordinates using polynomial functions.
-
-*  Constructor Function:
-c     astPolyMap
-f     AST_POLYMAP
-
-*  Description:
-*     A PolyMap is a form of Mapping which performs a general polynomial
-*     transformation.  Each output coordinate is a polynomial function of
-*     all the input coordinates. The coefficients are specified separately 
-*     for each output coordinate. The forward and inverse transformations
-*     are defined independantly by separate sets of coefficients.
-
-*  Inheritance:
-*     The PolyMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The PolyMap class does not define any new attributes beyond
-*     those which are applicable to all Mappings.
-
-*  Functions:
-c     The PolyMap class does not define any new functions beyond those
-f     The PolyMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     27-SEP-2003 (DSB):
-*        Original version.
-*     13-APR-2005 (DSB):
-*        Changed the keys used by the Dump/astLoadPolyMap functions. They
-*        used to exceed 8 characters and consequently caused problems for 
-*        FitsChans. 
-*     20-MAY-2005 (DSB):
-*        Correct the indexing of keywords produced in the Dump function.
-*     20-APR-2006 (DSB):
-*        Guard against undefined transformations in Copy.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*     4-JUL-2008 (DSB):
-*        Fixed loop indexing problems in Equal function.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS PolyMap
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "polymap.h"             /* Interface definition for this class */
-#include "unitmap.h"             /* Unit mappings */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(PolyMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(PolyMap,Class_Init)
-#define class_vtab astGLOBAL(PolyMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPolyMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPolyMap *astPolyMapId_( int, int, int, const double[], int, const double[], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static void FreeArrays( AstPolyMap *, int, int * );
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two PolyMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polymap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     PolyMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two PolyMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a PolyMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the PolyMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPolyMap *that;        
-   AstPolyMap *this;        
-   int i, j, k; 
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two PolyMap structures. */
-   this = (AstPolyMap *) this_object;
-   that = (AstPolyMap *) that_object;
-
-/* Check the second object is a PolyMap. We know the first is a
-   PolyMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAPolyMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two PolyMaps differ, it may still be possible 
-   for them to be equivalent. First compare the PolyMaps if their Invert 
-   flags are the same. In this case all the attributes of the two PolyMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-            result = 1;
-
-            for( i = 0; i < nout && result; i++ ) {
-               if( this->ncoeff_f[ i ] != that->ncoeff_f[ i ] ||
-                   this->mxpow_i[ i ] != that->mxpow_i[ i ] ) {
-                  result = 0;
-               } 
-            }
-
-
-            if( this->coeff_f && that->coeff_f ) {
-               for( i = 0; i < nout && result; i++ ) {
-                  for( j = 0; j < this->ncoeff_f[ i ] && result; j++ ) {
-                     if( !EQUAL( this->coeff_f[ i ][ j ],
-                                 that->coeff_f[ i ][ j ] ) ) {
-                        result = 0;
-                     }
-                  }
-               }
-            }
-
-            if( this->power_f && that->power_f ) {
-               for( i = 0; i < nout && result; i++ ) {
-                  for( j = 0; j < this->ncoeff_f[ i ] && result; j++ ) {
-                     for( k = 0; k < nin && result; k++ ) {
-                        if( !EQUAL( this->power_f[ i ][ j ][ k ],
-                                    that->power_f[ i ][ j ][ k ] ) ) {
-                           result = 0;
-                        }
-                     }
-                  }
-               }
-            }
-
-            for( i = 0; i < nin && result; i++ ) {
-               if( this->ncoeff_i[ i ] != that->ncoeff_i[ i ] ||
-                   this->mxpow_f[ i ] != that->mxpow_f[ i ] ) {
-                  result = 0;
-               } 
-            }
-
-
-            if( this->coeff_i && that->coeff_i ) {
-               for( i = 0; i < nin && result; i++ ) {
-                  for( j = 0; j < this->ncoeff_i[ i ] && result; j++ ) {
-                     if( !EQUAL( this->coeff_i[ i ][ j ],
-                                 that->coeff_i[ i ][ j ] ) ) {
-                        result = 0;
-                     }
-                  }
-               }
-            }
-
-            if( this->power_i && that->power_i ) {
-               for( i = 0; i < nin && result; i++ ) {
-                  for( j = 0; j < this->ncoeff_i[ i ] && result; j++ ) {
-                     for( k = 0; k < nout && result; k++ ) {
-                        if( !EQUAL( this->power_i[ i ][ j ][ k ],
-                                    that->power_i[ i ][ j ][ k ] ) ) {
-                           result = 0;
-                        }
-                     }
-                  }
-               }
-            }
-
-/* If the Invert flags for the two PolyMaps differ, the attributes of the two 
-   PolyMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a PolyMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void FreeArrays( AstPolyMap *this, int forward, int *status ) {
-/*
-*  Name:
-*     FreeArrays
-
-*  Purpose:
-*     Free the dynamic arrays contained within a PolyMap
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void FreeArrays( AstPolyMap *this, int forward, int *status )
-
-*  Description:
-*     This function frees all the dynamic arrays allocated as part of a
-*     PolyMap.
-
-*  Parameters:
-*     this
-*        Pointer to the PolyMap.
-*     forward
-*        If non-zero, the arrays for the forward transformation are freed.
-*        Otherwise, the arrays for the inverse transformation are freed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   int nin;                     /* Number of inputs */
-   int nout;                    /* Number of outputs */
-   int i;                       /* Loop count */
-   int j;                       /* Loop count */
-
-/* Get the number of inputs and outputs of the uninverted Mapping. */
-   nin = ( (AstMapping *) this )->nin;
-   nout = ( (AstMapping *) this )->nout;
-
-/* Free the dynamic arrays for the forward transformation. */
-   if( forward ) {
-
-      if( this->coeff_f ) {
-         for( i = 0; i < nout; i++ ) {
-            this->coeff_f[ i ] = astFree( this->coeff_f[ i ] );
-         }
-         this->coeff_f = astFree( this->coeff_f );
-      }
-   
-      if( this->power_f ) {
-         for( i = 0; i < nout; i++ ) {
-            if( this->ncoeff_f && this->power_f[ i ] ) {
-               for( j = 0; j < this->ncoeff_f[ i ]; j++ ) {
-                  this->power_f[ i ][ j ] = astFree( this->power_f[ i ][ j ] );
-               }
-            }
-            this->power_f[ i ] = astFree( this->power_f[ i ] );
-         }
-         this->power_f = astFree( this->power_f );
-      }
-   
-      this->ncoeff_f = astFree( this->ncoeff_f );
-      this->mxpow_f = astFree( this->mxpow_f );
-
-/* Free the dynamic arrays for the inverse transformation. */
-   } else {
-
-      if( this->coeff_i ) {
-         for( i = 0; i < nin; i++ ) {
-            this->coeff_i[ i ] = astFree( this->coeff_i[ i ] );
-         }
-         this->coeff_i = astFree( this->coeff_i );
-      }
-   
-      if(this->power_i ) {
-         for( i = 0; i < nin; i++ ) {
-            if( this->ncoeff_i && this->power_i[ i ] ) {
-               for( j = 0; j < this->ncoeff_i[ i ]; j++ ) {
-                  this->power_i[ i ][ j ] = astFree( this->power_i[ i ][ j ] );
-               }
-            }
-            this->power_i[ i ] = astFree( this->power_i[ i ] );
-         }
-         this->power_i = astFree( this->power_i );
-      }
-   
-      this->ncoeff_i = astFree( this->ncoeff_i );
-      this->mxpow_i = astFree( this->mxpow_i );
-   }
-}
-
-void astInitPolyMapVtab_(  AstPolyMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPolyMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a PolyMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "polymap.h"
-*     void astInitPolyMapVtab( AstPolyMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     PolyMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the PolyMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPolyMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-/* (none) */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the destructor and copy constructor. */
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
-   astSetDump( vtab, Dump, "PolyMap", "Polynomial transformation" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a PolyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     PolyMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated PolyMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated PolyMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated PolyMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the PolyMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        PolyMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated PolyMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstPolyMap *pmap0;    /* Nominated PolyMap */
-   AstPolyMap *pmap1;    /* Neighbouring PolyMap */
-   int i;                /* Index of neighbour */
-   int iax_in;           /* Index of input coordinate */
-   int iax_out;          /* Index of output coordinate */
-   int ico;              /* Index of coefficient */
-   int inv0;             /* Supplied Invert flag for nominated PolyMap */
-   int inv1;             /* Supplied Invert flag for neighbouring PolyMap */
-   int nc;               /* Number of coefficients */
-   int nin;              /* Number of input coordinates for nominated PolyMap */
-   int nout;             /* Number of output coordinates for nominated PolyMap */
-   int ok;               /* Are PolyMaps equivalent? */
-   int result;           /* Result value to return */
-   int swap0;            /* Swap inputs and outputs for nominated PolyMap? */
-   int swap1;            /* Swap inputs and outputs for neighbouring PolyMap? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Save a pointer to the nominated PolyMap. */
-   pmap0 = (AstPolyMap *) ( *map_list )[ where ];
-
-/* The only simplification which can currently be performed is to merge a PolyMap 
-   with its own inverse. This can only be done in series. Obviously,
-   there are potentially other simplications which could be performed, but
-   time does not currently allow these to be coded. */
-   if( series ) {
-
-/* Set a flag indicating if "input" and "output" needs to be swapped for
-   the nominated PolyMap. */
-      inv0 = ( *invert_list )[ where ];
-      swap0 = ( inv0 != astGetInvert( pmap0 ) );
-
-/* Get the number of inputs and outputs to the nominated PolyMap. */
-      nin = !swap0 ? astGetNin( pmap0 ) : astGetNout( pmap0 );
-      nout = !swap0 ? astGetNout( pmap0 ) : astGetNin( pmap0 );
-
-/* Check each neighbour. */
-      for( i = where - 1; i <= where + 1; i += 2 ) {
-
-/* Continue with the next pass if the neighbour does not exist. */
-         if( i < 0 || i >= *nmap ) continue;
-          
-/* Continue with the next pass if this neighbour is not a PermMap. */
-         if( strcmp( "PolyMap", astGetClass( ( *map_list )[ i ] ) ) ) continue;
-
-/* Get a pointer to it. */
-         pmap1 = (AstPolyMap *) ( *map_list )[ i ];
-
-/* Check it is used in the opposite direction to the nominated PolyMap. */
-         if( ( *invert_list )[ i ] == ( *invert_list )[ where ] ) continue;
-
-/* Set a flag indicating if "input" and "output" needs to be swapped for
-   the neighbouring PolyMap. */
-         inv1 = ( *invert_list )[ i ];
-         swap1 = ( inv1 != astGetInvert( pmap1 ) );
-
-/* Check the number of inputs and outputs are equal to the nominated
-   PolyMap. */
-         if( astGetNin( pmap1 ) != (!swap1 ? nin : nout ) &&
-             astGetNout( pmap1 ) != (!swap1 ? nout : nin ) ) continue;
-
-/* Check the forward coefficients are equal. */
-         ok = 1;
-         for( iax_out = 0; iax_out < nout && ok; iax_out++ ) {
-            nc = pmap1->ncoeff_f[ iax_out ];
-            if( nc != pmap0->ncoeff_f[ iax_out ] ) continue;
-
-            for( ico = 0; ico < nc && ok; ico++ ) {
-
-               if( !EQUAL( pmap1->coeff_f[ iax_out ][ ico ],
-                           pmap0->coeff_f[ iax_out ][ ico ] ) ){
-                  ok = 0;
-
-               } else {
-                  for( iax_in = 0; iax_in < nin && ok; iax_in++ ) {
-                     ok = ( pmap1->power_f[ iax_out ][ ico ][ iax_in ] ==
-                            pmap0->power_f[ iax_out ][ ico ][ iax_in ] );
-                  }
-               }
-            }
-         }
-         if( !ok ) continue;
-
-/* Check the inverse coefficients are equal. */
-         ok = 1;
-         for( iax_in = 0; iax_in < nin && ok; iax_in++ ) {
-            nc = pmap1->ncoeff_i[ iax_in ];
-            if( nc != pmap0->ncoeff_i[ iax_in ] ) continue;
-
-            for( ico = 0; ico < nc && ok; ico++ ) {
-
-               if( !EQUAL( pmap1->coeff_i[ iax_in ][ ico ],
-                           pmap0->coeff_i[ iax_in ][ ico ] ) ){
-                  ok = 0;
-
-               } else {
-                  for( iax_out = 0; iax_out < nout && ok; iax_out++ ) {
-                     ok = ( pmap1->power_i[ iax_in ][ ico ][ iax_out ] ==
-                            pmap0->power_i[ iax_in ][ ico ][ iax_out ] );
-                  }
-               }
-            }
-         }
-         if( !ok ) continue;
-
-/* If we get this far, then the nominated PolyMap and the current
-   neighbour cancel each other out, so replace each by a UnitMap. */
-         (void) astAnnul( pmap0 );
-         (void) astAnnul( pmap1 );
-         if( i < where ) {
-            ( *map_list )[ where ] = (AstMapping *) astUnitMap( nout, "", status );
-            ( *map_list )[ i ] = (AstMapping *) astUnitMap( nout, "", status );
-            ( *invert_list )[ where ] = 0;
-            ( *invert_list )[ i ] = 0;
-            result = i;
-         } else {
-            ( *map_list )[ where ] = (AstMapping *) astUnitMap( nin, "", status );
-            ( *map_list )[ i ] = (AstMapping *) astUnitMap( nin, "", status );
-            ( *invert_list )[ where ] = 0;
-            ( *invert_list )[ i ] = 0;
-            result = where;
-         }
-
-/* Leave the loop. */
-         break;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a PolyMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polymap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     PolyMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a PolyMap and a set of points encapsulated in a
-*     PointSet and transforms the points.
-
-*  Parameters:
-*     this
-*        Pointer to the PolyMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of columns in the PolyMap being applied.
-*     -  The number of coordinate values per point in the output PointSet will
-*     equal the number of rows in the PolyMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstPolyMap *map;              /* Pointer to PolyMap to be applied */
-   double **coeff;               /* Pointer to coefficient value arrays */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double **work;                /* Pointer to exponentiated axis values */
-   double *outcof;               /* Pointer to next coefficient value */
-   double *pwork;                /* Pointer to exponentiated axis values */
-   double outval;                /* Output axis value */
-   double term;                  /* Term to be added to output value */
-   double x;                     /* Input axis value */
-   double xp;                    /* Exponentiated input axis value */
-   int ***power;                 /* Pointer to coefficient power arrays */
-   int **outpow;                 /* Pointer to next set of axis powers */
-   int *mxpow;                   /* Pointer to max used power for each input */
-   int *ncoeff;                  /* Pointer to no. of coefficients */
-   int in_coord;                 /* Index of output coordinate */
-   int ico;                      /* Coefficient index */
-   int ip;                       /* Axis power */
-   int nc;                       /* No. of coefficients in polynomial */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int ncoord_out;               /* Number of coordinates per output point */
-   int npoint;                   /* Number of points */
-   int out_coord;                /* Index of output coordinate */
-   int point;                    /* Loop counter for points */
-   int pow;                      /* Next axis power */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the PolyMap. */
-   map = (AstPolyMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   and output PointSets and obtain pointers for accessing the input and 
-   output coordinate values. */
-   ncoord_in = astGetNcoord( in );
-   ncoord_out = astGetNcoord( result );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Get a pointer to the arrays holding the required coefficient values
-   and powers, according to the direction of mapping required. */
-   if ( forward ) {
-      ncoeff = map->ncoeff_f;
-      coeff = map->coeff_f;
-      power = map->power_f;
-      mxpow = map->mxpow_f;
-   } else {
-      ncoeff = map->ncoeff_i;
-      coeff = map->coeff_i;
-      power = map->power_i;
-      mxpow = map->mxpow_i;
-   }
-
-/* Allocate memory to hold the required powers of the input axis values. */
-   work = astMalloc( sizeof( double * )*(size_t) ncoord_in );
-   for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-      work[ in_coord ] = astMalloc( sizeof( double )*(size_t) ( mxpow[ in_coord ] + 1 ) );
-   }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-/* Loop to apply the polynomial to each point in turn.*/
-      for ( point = 0; point < npoint; point++ ) {
-
-/* Find the required powers of the input axis values and store them in
-   the work array. */
-         for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-            pwork = work[ in_coord ];
-            pwork[ 0 ] = 1.0;
-            x = ptr_in[ in_coord ][ point ];
-            if( x == AST__BAD ) {
-               for( ip = 1; ip <= mxpow[ in_coord ]; ip++ ) pwork[ ip ] = AST__BAD;
-            } else {
-               for( ip = 1; ip <= mxpow[ in_coord ]; ip++ ) {
-                  pwork[ ip ] = pwork[ ip - 1 ]*x;
-               }
-            }
-         }
-
-/* Loop round each output. */
-         for( out_coord = 0; out_coord < ncoord_out; out_coord++ ) {
-
-/* Initialise the output value. */
-            outval = 0.0;
-
-/* Get pointers to the coefficients and powers for this output. */
-            outcof = coeff[ out_coord ];
-            outpow = power[ out_coord ];
-
-/* Loop round all polynomial coefficients.*/
-            nc = ncoeff[ out_coord ]; 
-            for ( ico = 0; ico < nc && outval != AST__BAD; 
-                  ico++, outcof++, outpow++ ) {
-
-/* Initialise the current term to be equal to the value of the coefficient. 
-   If it is bad, store a bad output value. */
-               term = *outcof;
-               if( term == AST__BAD ) {
-                  outval = AST__BAD;
-
-/* Otherwise, loop round all inputs */
-               } else {
-                  for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-
-/* Get the power of the current input axis value used by the current
-   coefficient. If it is zero, pass on. */
-                     pow = (*outpow)[ in_coord ];
-                     if( pow > 0 ) {
-
-/* Get the axis value raised to the appropriate power. */
-                        xp = work[ in_coord ][ pow ];
-
-/* If bad, set the output value bad and break. */
-                        if( xp == AST__BAD ) {
-                           outval = AST__BAD;
-                           break;
-
-/* Otherwise multiply the current term by the exponentiated axis value. */
-                        } else {
-                           term *= xp;                           
-                        }
-                     }
-                  }
-               }
-
-/* Increment the output value by the current term of the polynomial. */
-               outval += term;
-
-            }
-
-/* Store the output value. */
-            ptr_out[ out_coord ][ point ] = outval;        
-
-         }
-      }
-   }
-
-/* Free resources. */
-   for( in_coord = 0; in_coord < ncoord_in; in_coord++ ) {
-      work[ in_coord ] = astFree( work[ in_coord ] );
-   }
-   work = astFree( work );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for PolyMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for PolyMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the
-*     coefficients associated with the input PolyMap.
-*/
-
-
-/* Local Variables: */
-   AstPolyMap *in;               /* Pointer to input PolyMap */
-   AstPolyMap *out;              /* Pointer to output PolyMap */
-   int nin;                      /* No. of input coordinates */
-   int nout;                     /* No. of output coordinates */
-   int i;                        /* Loop count */
-   int j;                        /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output PolyMaps. */
-   in = (AstPolyMap *) objin;
-   out = (AstPolyMap *) objout;
-
-/* Nullify the pointers stored in the output object since these will
-   currently be pointing at the input data (since the output is a simple
-   byte-for-byte copy of the input). Otherwise, the input data could be
-   freed by accidient if the output object is deleted due to an error
-   occuring in this function. */
-   out->ncoeff_f = NULL;
-   out->power_f = NULL;
-   out->coeff_f = NULL;
-   out->mxpow_f = NULL;
-
-   out->ncoeff_i = NULL;
-   out->power_i = NULL;
-   out->coeff_i = NULL;
-   out->mxpow_i = NULL;
-
-/* Get the number of inputs and outputs of the uninverted Mapping. */
-   nin = ( (AstMapping *) in )->nin;
-   nout = ( (AstMapping *) in )->nout;
-
-/* Copy the number of coefficients associated with each output of the forward 
-   transformation. */
-   if( in->ncoeff_f ) {
-      out->ncoeff_f = (int *) astStore( NULL, (void *) in->ncoeff_f,
-                                        sizeof( int )*(size_t) nout ); 
-
-/* Copy the maximum power of each input axis value used by the forward 
-   transformation. */
-      out->mxpow_f = (int *) astStore( NULL, (void *) in->mxpow_f,
-                                       sizeof( int )*(size_t) nin ); 
-
-/* Copy the coefficient values used by the forward transformation. */
-      if( in->coeff_f ) {
-         out->coeff_f = astMalloc( sizeof( double * )*(size_t) nout );
-         if( astOK ) {
-            for( i = 0; i < nout; i++ ) {
-               out->coeff_f[ i ] = (double *) astStore( NULL, (void *) in->coeff_f[ i ],
-                                                     sizeof( double )*(size_t) in->ncoeff_f[ i ] ); 
-            }
-         }
-      }
-
-/* Copy the input axis powers associated with each coefficient of the forward 
-   transformation. */
-      if( in->power_f ) {
-         out->power_f = astMalloc( sizeof( int ** )*(size_t) nout );
-         if( astOK ) {
-            for( i = 0; i < nout; i++ ) {
-               out->power_f[ i ] = astMalloc( sizeof( int * )*(size_t) in->ncoeff_f[ i ] );
-               if( astOK ) {
-                  for( j = 0; j < in->ncoeff_f[ i ]; j++ ) {
-                     out->power_f[ i ][ j ] = (int *) astStore( NULL, (void *) in->power_f[ i ][ j ],
-                                                                sizeof( int )*(size_t) nin );
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Do the same for the inverse transformation. */
-   if( in->ncoeff_i ) {
-      out->ncoeff_i = (int *) astStore( NULL, (void *) in->ncoeff_i,
-                                        sizeof( int )*(size_t) nin ); 
-   
-      out->mxpow_i = (int *) astStore( NULL, (void *) in->mxpow_i,
-                                       sizeof( int )*(size_t) nout ); 
-   
-      if( in->coeff_i ) {
-         out->coeff_i = astMalloc( sizeof( double * )*(size_t) nin );
-         if( astOK ) {
-            for( i = 0; i < nin; i++ ) {
-               out->coeff_i[ i ] = (double *) astStore( NULL, (void *) in->coeff_i[ i ],
-                                                     sizeof( double )*(size_t) in->ncoeff_i[ i ] ); 
-            }
-         }
-      }
-   
-      if( in->power_i ) {
-         out->power_i = astMalloc( sizeof( int ** )*(size_t) nin );
-         if( astOK ) {
-            for( i = 0; i < nin; i++ ) {
-               out->power_i[ i ] = astMalloc( sizeof( int * )*(size_t) in->ncoeff_i[ i ] );
-               if( astOK ) {
-                  for( j = 0; j < in->ncoeff_i[ i ]; j++ ) {
-                     out->power_i[ i ][ j ] = (int *) astStore( NULL, (void *) in->power_i[ i ][ j ],
-                                                                sizeof( int )*(size_t) nout );
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* If an error has occurred, free the output arrays. */
-   if( !astOK ) {
-      FreeArrays( out, 1, status );
-      FreeArrays( out, 0, status );
-   }
-
-   return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for PolyMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for PolyMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPolyMap *this;            /* Pointer to PolyMap */
-
-/* Obtain a pointer to the PolyMap structure. */
-   this = (AstPolyMap *) obj;
-
-/* Free the arrays. */
-   FreeArrays( this, 1, status );
-   FreeArrays( this, 0, status );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for PolyMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the PolyMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the PolyMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstPolyMap *this;             /* Pointer to the PolyMap structure */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   char comm[ 100 ];             /* Buffer for comment string */
-   int i;                        /* Loop index */
-   int iv;                       /* Vectorised keyword index */
-   int j;                        /* Loop index */
-   int k;                        /* Loop index */
-   int nin;                      /* No. of input coords */
-   int nout;                     /* No. of output coords */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the PolyMap structure. */
-   this = (AstPolyMap *) this_object;
-
-/* Find the number of inputs and outputs of the uninverted Mapping. */
-   nin = ( (AstMapping *) this )->nin;
-   nout = ( (AstMapping *) this )->nout;
-
-/* Write out values representing the instance variables for the
-   PolyMap class.  */
-
-/* First do the forward transformation arrays. Check they are used. */
-   if( this->ncoeff_f ) {
-
-/* Store the maximum power of each input axis value used by the forward 
-   transformation. */
-      for( i = 0; i < nin; i++ ){
-         (void) sprintf( buff, "MPF%d", i + 1 );
-         (void) sprintf( comm, "Max. power of input %d in any forward polynomial", i + 1 );
-          astWriteInt( channel, buff, 1, 1, (this->mxpow_f)[ i ], comm );
-      }
-
-/* Store the number of coefficients associated with each output of the forward 
-   transformation. */
-      for( i = 0; i < nout; i++ ){
-         (void) sprintf( buff, "NCF%d", i + 1 );
-         (void) sprintf( comm, "No. of coeff.s for forward polynomial %d", i + 1 );
-         astWriteInt( channel, buff, 1, 1, (this->ncoeff_f)[ i ], comm );
-      }
-
-/* Store the coefficient values used by the forward transformation. */
-      iv = 1;
-      for( i = 0; i < nout; i++ ){
-         for( j = 0; j < this->ncoeff_f[ i ]; j++, iv++ ){
-            if( (this->coeff_f)[ i ][ j ] != AST__BAD ) {
-               (void) sprintf( buff, "CF%d", iv );
-               (void) sprintf( comm, "Coeff %d of forward polynomial %d", j + 1, i + 1 );
-               astWriteDouble( channel, buff, 1, 1, (this->coeff_f)[ i ][ j ], comm );
-            }
-         }
-      }
-
-/* Store the input axis powers associated with each coefficient of the forward 
-   transformation. */
-      iv = 1;
-      for( i = 0; i < nout; i++ ){
-         for( j = 0; j < this->ncoeff_f[ i ]; j++ ){
-            for( k = 0; k < nin; k++, iv++ ){
-               if( (this->power_f)[ i ][ j ][ k ] > 0 ) {
-                  (void) sprintf( buff, "PF%d", iv );
-                  (void) sprintf( comm, "Power of i/p %d for coeff %d of fwd poly %d", k + 1, j + 1, i + 1 );
-                  astWriteDouble( channel, buff, 1, 1, (this->power_f)[ i ][ j ][ k ], comm );
-               }
-            }
-         }
-      }
-   }
-
-/* Now do the inverse transformation arrays. Check they are used. */
-   if( this->ncoeff_i ) {
-
-/* Store the maximum power of each output axis value used by the inverse 
-   transformation. */
-      for( i = 0; i < nout; i++ ){
-         (void) sprintf( buff, "MPI%d", i + 1 );
-         (void) sprintf( comm, "Max. power of output %d in any inverse polynomial", i + 1 );
-          astWriteInt( channel, buff, 1, 1, (this->mxpow_i)[ i ], comm );
-      }
-
-/* Store the number of coefficients associated with each input of the inverse 
-   transformation. */
-      for( i = 0; i < nin; i++ ){
-         (void) sprintf( buff, "NCI%d", i + 1 );
-         (void) sprintf( comm, "No. of coeff.s for inverse polynomial %d", i + 1 );
-         astWriteInt( channel, buff, 1, 1, (this->ncoeff_i)[ i ], comm );
-      }
-
-/* Store the coefficient values used by the inverse transformation. */
-      iv = 1;
-      for( i = 0; i < nin; i++ ){
-         for( j = 0; j < this->ncoeff_i[ i ]; j++, iv++ ){
-            if( (this->coeff_i)[ i ][ j ] != AST__BAD ) {
-               (void) sprintf( buff, "CI%d", iv );
-               (void) sprintf( comm, "Coeff %d of inverse polynomial %d", j + 1, i + 1 );
-               astWriteDouble( channel, buff, 1, 1, (this->coeff_i)[ i ][ j ], comm );
-            }
-         }
-      }
-
-/* Store the output axis powers associated with each coefficient of the inverse 
-   transformation. */
-      iv = 1;
-      for( i = 0; i < nin; i++ ){
-         for( j = 0; j < this->ncoeff_i[ i ]; j++ ){
-            for( k = 0; k < nout; k++, iv++ ){
-               if( (this->power_i)[ i ][ j ][ k ] > 0 ) {
-                  (void) sprintf( buff, "PI%d", iv );
-                  (void) sprintf( comm, "Power of o/p %d for coeff %d of inv poly %d", k + 1, j + 1, i + 1 );
-                  astWriteDouble( channel, buff, 1, 1, (this->power_i)[ i ][ j ][ k ], comm );
-               }
-            }
-         }
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPolyMap and astCheckPolyMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(PolyMap,Mapping)
-astMAKE_CHECK(PolyMap)
-
-AstPolyMap *astPolyMap_( int nin, int nout, int ncoeff_f, const double coeff_f[],
-                         int ncoeff_i, const double coeff_i[], const char *options, int *status, ...){
-/*
-*++
-*  Name:
-c     astPolyMap
-f     AST_POLYMAP
-
-*  Purpose:
-*     Create a PolyMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "polymap.h"
-c     AstPolyMap *astPolyMap( int nin, int nout, int ncoeff_f, const double coeff_f[],
-c                             int ncoeff_i, const double coeff_i[], 
-c                             const char *options, ... )
-f     RESULT = AST_POLYMAP( NIN, NOUT, NCOEFF_F, COEFF_F, NCOEFF_I, COEFF_I, 
-f                           OPTIONS, STATUS ) 
-
-*  Class Membership:
-*     PolyMap constructor.
-
-*  Description:
-*     This function creates a new PolyMap and optionally initialises
-*     its attributes.
-*
-*     A PolyMap is a form of Mapping which performs a general polynomial
-*     transformation.  Each output coordinate is a polynomial function of
-*     all the input coordinates. The coefficients are specified separately 
-*     for each output coordinate. The forward and inverse transformations
-*     are defined independantly by separate sets of coefficients.
-
-*  Parameters:
-c     nin
-f     NIN = INTEGER (Given)
-*        The number of input coordinates.
-c     nout
-f     NOUT = INTEGER (Given)
-*        The number of output coordinates.
-c     ncoeff_f
-f     NCOEFF_F = INTEGER (Given)
-*        The number of non-zero coefficients necessary to define the
-*        forward transformation of the PolyMap. If zero is supplied, the
-*        forward transformation will be undefined.
-c     coeff_f
-f     COEFF_F( * ) = DOUBLE PRECISION (Given)
-*        An array containing 
-c        "ncoeff_f*( 2 + nin )" elements. Each group of "2 + nin" 
-f        "NCOEFF_F*( 2 + NIN )" elements. Each group of "2 + NIN" 
-*        adjacent elements describe a single coefficient of the forward
-*        transformation. Within each such group, the first element is the
-*        coefficient value; the next element is the integer index of the
-*        PolyMap output which uses the coefficient within its defining
-*        polynomial (the first output has index 1); the remaining elements
-*        of the group give the integer powers to use with each input
-*        coordinate value (powers must not be negative, and floating
-*        point values are rounded to the nearest integer).
-c        If "ncoeff_f" is zero, a NULL pointer may be supplied for "coeff_f".
-*
-*        For instance, if the PolyMap has 3 inputs and 2 outputs, each group 
-*        consisting of 5 elements, A groups such as "(1.2, 2.0, 1.0, 3.0, 0.0)"
-*        describes a coefficient with value 1.2 which is used within the 
-*        definition of output 2. The output value is incremented by the
-*        product of the coefficient value, the value of input coordinate
-*        1 raised to the power 1, and the value of input coordinate 2 raised 
-*        to the power 3. Input coordinate 3 is not used since its power is
-*        specified as zero. As another example, the group "(-1.0, 1.0,
-*        0.0, 0.0, 0.0 )" describes adds a constant value -1.0 onto
-*        output 1 (it is a constant value since the power for every input
-*        axis is given as zero).
-*
-c        Each final output coordinate value is the sum of the "ncoeff_f" terms
-c        described by the "ncoeff_f" groups within the supplied array.
-f        Each final output coordinate value is the sum of the "NCOEFF_F" terms
-f        described by the "NCOEFF_F" groups within the supplied array.
-c     ncoeff_i
-f     NCOEFF_I = INTEGER (Given)
-*        The number of non-zero coefficients necessary to define the
-*        inverse transformation of the PolyMap. If zero is supplied, the
-*        inverse transformation will be undefined.
-c     coeff_i
-f     COEFF_I( * ) = DOUBLE PRECISION (Given)
-*        An array containing 
-c        "ncoeff_i*( 2 + nout )" elements. Each group of "2 + nout" 
-f        "NCOEFF_I*( 2 + NOUT )" elements. Each group of "2 + NOUT" 
-*        adjacent elements describe a single coefficient of the inverse 
-c        transformation, using the same schame as "coeff_f",
-f        transformation, using the same schame as "COEFF_F",
-*        except that "inputs" and "outputs" are transposed.
-c        If "ncoeff_i" is zero, a NULL pointer may be supplied for "coeff_i".
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new PolyMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new PolyMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPolyMap()
-f     AST_POLYMAP = INTEGER
-*        A pointer to the new PolyMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS          /* Pointer to thread-specific global data */
-   AstPolyMap *new;            /* Pointer to new PolyMap */
-   va_list args;               /* Variable argument list */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the PolyMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPolyMap( NULL, sizeof( AstPolyMap ), !class_init, 
-                         &class_vtab, "PolyMap", nin, nout, 
-                         ncoeff_f, coeff_f, ncoeff_i, coeff_i );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PolyMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PolyMap. */
-   return new;
-}
-
-AstPolyMap *astPolyMapId_( int nin, int nout, int ncoeff_f, const double coeff_f[],
-                           int ncoeff_i, const double coeff_i[], const char *options, ... ){
-/*
-*  Name:
-*     astPolyMapId_
-
-*  Purpose:
-*     Create a PolyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "polymap.h"
-*     AstPolyMap *astPolyMap( int nin, int nout, int ncoeff_f, const double coeff_f[],
-*                             int ncoeff_i, const double coeff_i[], 
-*                             const char *options, ... )
-
-*  Class Membership:
-*     PolyMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astPolyMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astPolyMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astPolyMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astPolyMap_.
-
-*  Returned Value:
-*     The ID value associated with the new PolyMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPolyMap *new;              /* Pointer to new PolyMap */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the PolyMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitPolyMap( NULL, sizeof( AstPolyMap ), !class_init, 
-                         &class_vtab, "PolyMap", nin, nout, 
-                         ncoeff_f, coeff_f, ncoeff_i, coeff_i );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new PolyMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new PolyMap. */
-   return astMakeId( new );
-}
-
-AstPolyMap *astInitPolyMap_( void *mem, size_t size, int init, 
-                             AstPolyMapVtab *vtab, const char *name,
-                             int nin, int nout, int ncoeff_f, const double coeff_f[],
-                             int ncoeff_i, const double coeff_i[], int *status ){
-/*
-*+
-*  Name:
-*     astInitPolyMap
-
-*  Purpose:
-*     Initialise a PolyMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "polymap.h"
-*     AstPolyMap *astInitPolyMap( void *mem, size_t size, int init,
-*                                 AstPolyMapVtab *vtab, const char *name,
-*                                 int nin, int nout, int ncoeff_f, 
-*                                 const double coeff_f[], int ncoeff_i, 
-*                                 const double coeff_i[] )
-
-*  Class Membership:
-*     PolyMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new PolyMap object. It allocates memory (if necessary) to accommodate
-*     the PolyMap plus any additional data associated with the derived class.
-*     It then initialises a PolyMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a PolyMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the PolyMap is to be initialised.
-*        This must be of sufficient size to accommodate the PolyMap data
-*        (sizeof(PolyMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the PolyMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the PolyMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the PolyMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new PolyMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     nin
-*        The number of input coordinate values per point. This is the
-*        same as the number of columns in the matrix.
-*     nout
-*        The number of output coordinate values per point. This is the
-*        same as the number of rows in the matrix.
-*     ncoeff_f
-*        The number of non-zero coefficients necessary to define the
-*        forward transformation of the PolyMap. If zero is supplied, the
-*        forward transformation will be undefined.
-*     coeff_f
-*        An array containing "ncoeff_f*( 2 + nin )" elements. Each group
-*	 of "2 + nin" adjacent elements describe a single coefficient of
-*	 the forward transformation. Within each such group, the first
-*	 element is the coefficient value; the next element is the
-*	 integer index of the PolyMap output which uses the coefficient
-*	 within its defining polynomial (the first output has index 1);
-*	 the remaining elements of the group give the integer powers to
-*	 use with each input coordinate value (powers must not be
-*	 negative)
-*
-*        For instance, if the PolyMap has 3 inputs and 2 outputs, each group 
-*        consisting of 5 elements, A groups such as "(1.2, 2.0, 1.0, 3.0, 0.0)"
-*        describes a coefficient with value 1.2 which is used within the 
-*        definition of output 2. The output value is incremented by the
-*        product of the coefficient value, the value of input coordinate
-*        1 raised to the power 1, and the value of input coordinate 2 raised 
-*        to the power 3. Input coordinate 3 is not used since its power is
-*        specified as zero. As another example, the group "(-1.0, 1.0,
-*        0.0, 0.0, 0.0 )" describes adds a constant value -1.0 onto
-*        output 1 (it is a constant value since the power for every input
-*        axis is given as zero).
-*
-*        Each final output coordinate value is the sum of the "ncoeff_f" terms
-*        described by the "ncoeff_f" groups within the supplied array.
-*     ncoeff_i
-*        The number of non-zero coefficients necessary to define the
-*        inverse transformation of the PolyMap. If zero is supplied, the
-*        inverse transformation will be undefined.
-*     coeff_i
-*        An array containing 
-*        "ncoeff_i*( 2 + nout )" elements. Each group of "2 + nout" 
-*        adjacent elements describe a single coefficient of the inverse 
-*        transformation, using the same schame as "coeff_f", except that 
-*        "inputs" and "outputs" are transposed.
-
-*  Returned Value:
-*     A pointer to the new PolyMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPolyMap *new;              /* Pointer to new PolyMap */
-   const double *group;          /* Pointer to start of next coeff. description */
-   int *pows;                    /* Pointer to powers for current coeff. */
-   int i;                        /* Loop count */
-   int ico;                      /* Index of next coeff. for current input or output */
-   int iin;                      /* Input index extracted from coeff. description */
-   int iout;                     /* Output index extracted from coeff. description */
-   int j;                        /* Loop count */
-   int pow;                      /* Power extracted from coeff. description */
-   int gsize;                    /* Length of each coeff. description */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPolyMapVtab( vtab, name );
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the PolyMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstPolyMap *) astInitMapping( mem, size, 0,
-                                        (AstMappingVtab *) vtab, name,
-                                        nin, nout, (ncoeff_f > 0), (ncoeff_i > 0) );
-   if ( astOK ) {
-
-/* Initialise the PolyMap data. */
-/* ---------------------------- */
-
-/* First initialise the pointers in case of errors. */
-      new->ncoeff_f = NULL;
-      new->power_f = NULL;
-      new->coeff_f = NULL;
-      new->mxpow_f = NULL;
-
-      new->ncoeff_i = NULL;
-      new->power_i = NULL;
-      new->coeff_i = NULL;
-      new->mxpow_i = NULL;
-
-/* Now initialise the forward transformation, if defined. */
-      if( ncoeff_f > 0 ) {
-
-/* Create the arrays decribing the forward transformation. */
-         new->ncoeff_f = astMalloc( sizeof( int )*(size_t) nout );
-         new->mxpow_f = astMalloc( sizeof( int )*(size_t) nin );
-         new->power_f = astMalloc( sizeof( int ** )*(size_t) nout );
-         new->coeff_f = astMalloc( sizeof( double * )*(size_t) nout );
-         if( astOK ) {  
-
-/* Initialise the count of coefficients for each output coordinate to zero. */
-            for( i = 0; i < nout; i++ ) new->ncoeff_f[ i ] = 0;
-
-/* Initialise max power for each input coordinate to zero. */
-            for( j = 0; j < nin; j++ ) new->mxpow_f[ j ] = 0;
-
-/* Scan through the supplied forward coefficient array, counting the
-   number of coefficients which relate to each output. Also find the
-   highest power used for each input axis. Report errors if any unusable
-   values are found in the supplied array. */
-            group = coeff_f;
-            gsize = 2 + nin;
-            for( i = 0; i < ncoeff_f && astOK; i++, group += gsize ) {
-
-               iout = floor( group[ 1 ] + 0.5 );
-               if( iout < 1 || iout > nout ) {
-                  astError( AST__BADCI, "astInitPolyMap(%s): Forward "
-                            "coefficient %d referred to an illegal output "
-                            "coordinate %d.", status, name, i + 1, iout );
-                  astError( AST__BADCI, "This number should be in the "
-                            "range 1 to %d.", status, nout );
-                  break;
-               }
-
-               new->ncoeff_f[ iout - 1 ]++;
-
-               for( j = 0; j < nin; j++ ) {
-                  pow = floor( group[ 2 + j ] + 0.5 );
-                  if( pow < 0 ) {
-                     astError( AST__BADPW, "astInitPolyMap(%s): Forward "
-                               "coefficient %d has a negative power (%d) "
-                               "for input coordinate %d.", status, name, i + 1, pow, 
-                                j + 1 );
-                     astError( AST__BADPW, "All powers should be zero or "
-                               "positive." , status);
-                     break;
-                  }
-                  if( pow > new->mxpow_f[ j ] ) new->mxpow_f[ j ] = pow;      
-               }
-            }
-
-/* Allocate the arrays to store the input powers associated with each
-   coefficient, and the coefficient values. Reset the coefficient count
-   for each axis to zero afterwards so that we can use the array as an index
-   to the next vacant slot withint he following loop. */
-            for( i = 0; i < nout; i++ ) {
-               new->power_f[ i ] = astMalloc( sizeof( int * )*
-                                              (size_t) new->ncoeff_f[ i ] );
-               new->coeff_f[ i ] = astMalloc( sizeof( double )*
-                                              (size_t) new->ncoeff_f[ i ] );
-               new->ncoeff_f[ i ] = 0;
-            }
-
-            if( astOK ) {
-
-/* Extract the coefficient values and powers form the supplied array and
-   store them in the arrays created above. */
-               group = coeff_f;
-               for( i = 0; i < ncoeff_f && astOK; i++, group += gsize ) {
-                  iout = floor( group[ 1 ] + 0.5 ) - 1;
-                  ico = ( new->ncoeff_f[ iout ] )++;
-                  new->coeff_f[ iout ][ ico ] = group[ 0 ];
-
-                  pows = astMalloc( sizeof( int )*(size_t) nin );
-                  new->power_f[ iout ][ ico ] = pows;
-                  if( astOK ) {
-                     for( j = 0; j < nin; j++ ) {
-                        pows[ j ] = floor( group[ 2 + j ] + 0.5 );
-                     }                  
-                  }
-               }
-            }
-         }
-      }
-
-/* Now initialise the inverse transformation, if defined. */
-      if( ncoeff_i > 0 ) {
-
-/* Create the arrays decribing the inverse transformation. */
-         new->ncoeff_i = astMalloc( sizeof( int )*(size_t) nin );
-         new->mxpow_i = astMalloc( sizeof( int )*(size_t) nout );
-         new->power_i = astMalloc( sizeof( int ** )*(size_t) nin );
-         new->coeff_i = astMalloc( sizeof( double * )*(size_t) nin );
-         if( astOK ) {  
-
-/* Initialise the count of coefficients for each input coordinate to zero. */
-            for( i = 0; i < nin; i++ ) new->ncoeff_i[ i ] = 0;
-
-/* Initialise max power for each output coordinate to zero. */
-            for( j = 0; j < nout; j++ ) new->mxpow_i[ j ] = 0;
-
-/* Scan through the supplied inverse coefficient array, counting the
-   number of coefficients which relate to each input. Also find the
-   highest power used for each output axis. Report errors if any unusable
-   values are found in the supplied array. */
-            group = coeff_i;
-            gsize = 2 + nout;
-            for( i = 0; i < ncoeff_i && astOK; i++, group += gsize ) {
-
-               iin = floor( group[ 1 ] + 0.5 );
-               if( iin < 1 || iin > nin ) {
-                  astError( AST__BADCI, "astInitPolyMap(%s): Inverse "
-                            "coefficient %d referred to an illegal input "
-                            "coordinate %d.", status, name, i + 1, iin );
-                  astError( AST__BADCI, "This number should be in the "
-                            "range 1 to %d.", status, nin );
-                  break;
-               }
-
-               new->ncoeff_i[ iin - 1 ]++;
-
-               for( j = 0; j < nout; j++ ) {
-                  pow = floor( group[ 2 + j ] + 0.5 );
-                  if( pow < 0 ) {
-                     astError( AST__BADPW, "astInitPolyMap(%s): Inverse "
-                               "coefficient %d has a negative power (%d) "
-                               "for output coordinate %d.", status, name, i + 1, pow, 
-                                j + 1 );
-                     astError( AST__BADPW, "All powers should be zero or "
-                               "positive." , status);
-                     break;
-                  }
-                  if( pow > new->mxpow_i[ j ] ) new->mxpow_i[ j ] = pow;      
-               }
-            }
-
-/* Allocate the arrays to store the output powers associated with each
-   coefficient, and the coefficient values. Reset the coefficient count
-   for each axis to zero afterwards so that we can use the array as an index
-   to the next vacant slot within the following loop. */
-            for( i = 0; i < nin; i++ ) {
-               new->power_i[ i ] = astMalloc( sizeof( int * )*
-                                              (size_t) new->ncoeff_i[ i ] );
-               new->coeff_i[ i ] = astMalloc( sizeof( double )*
-                                              (size_t) new->ncoeff_i[ i ] );
-               new->ncoeff_i[ i ] = 0;
-            }
-
-            if( astOK ) {
-
-/* Extract the coefficient values and powers form the supplied array and
-   store them in the arrays created above. */
-               group = coeff_i;
-               for( i = 0; i < ncoeff_i && astOK; i++, group += gsize ) {
-                  iin = floor( group[ 1 ] + 0.5 ) - 1;
-                  ico = ( new->ncoeff_i[ iin ] )++;
-                  new->coeff_i[ iin ][ ico ] = group[ 0 ];
-
-                  pows = astMalloc( sizeof( int )*(size_t) nout );
-                  new->power_i[ iin ][ ico ] = pows;
-                  if( astOK ) {
-                     for( j = 0; j < nout; j++ ) {
-                        pows[ j ] = floor( group[ 2 + j ] + 0.5 );
-                     }                  
-                  }
-               }
-            }
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new PolyMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new PolyMap. */
-   return new;
-}
-
-AstPolyMap *astLoadPolyMap_( void *mem, size_t size,
-                             AstPolyMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPolyMap
-
-*  Purpose:
-*     Load a PolyMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "polymap.h"
-*     AstPolyMap *astLoadPolyMap( void *mem, size_t size,
-*                                 AstPolyMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     PolyMap loader.
-
-*  Description:
-*     This function is provided to load a new PolyMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     PolyMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a PolyMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the PolyMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        PolyMap data (sizeof(PolyMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the PolyMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the PolyMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPolyMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new PolyMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the PolyMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "PolyMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new PolyMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-/* Local Variables: */
-   AstPolyMap *new;              /* Pointer to the new PolyMap */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   int i;                        /* Loop index */
-   int iv;                       /* Vectorised keyword index */
-   int j;                        /* Loop index */
-   int k;                        /* Loop index */
-   int nin;                      /* No. of input coords */
-   int nout;                     /* No. of output coords */
-   int undef;                    /* Is the transformation undefined? */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this PolyMap. In this case the
-   PolyMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPolyMap );
-      vtab = &class_vtab;
-      name = "PolyMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPolyMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built PolyMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Get the number of inputs and outputs for the uninverted Mapping. */
-   nin = ( (AstMapping *) new )->nin;
-   nout = ( (AstMapping *) new )->nout;
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "PolyMap" );
-
-/* Allocate memory to hold the forward arrays. */
-      new->ncoeff_f = astMalloc( sizeof( int )*(size_t) nout );
-      new->mxpow_f = astMalloc( sizeof( int )*(size_t) nin );
-      new->power_f = astMalloc( sizeof( int ** )*(size_t) nout );
-      new->coeff_f = astMalloc( sizeof( double * )*(size_t) nout );
-      if( astOK ) {
-
-/* Assume the forward transformation is defined. */
-         undef = 0;
-
-/* Get the maximum power of each input axis value used by the forward 
-   transformation. Set a flag "undef" if no values relating to the 
-   forward transformation are found (this indicates that the forward
-   transformation is not defined). */
-         for( i = 0; i < nin && !undef; i++ ){
-            (void) sprintf( buff, "mpf%d", i + 1 );
-            (new->mxpow_f)[ i ] = astReadInt( channel, buff, INT_MAX );
-            if( (new->mxpow_f)[ i ] == INT_MAX ) undef = 1;
-         }
-
-/* Get the number of coefficients associated with each output of the forward 
-   transformation. */
-         for( i = 0; i < nout && !undef; i++ ){
-            (void) sprintf( buff, "ncf%d", i + 1 );
-            (new->ncoeff_f)[ i ] = astReadInt( channel, buff, INT_MAX );
-            if( (new->ncoeff_f)[ i ] == INT_MAX ) undef = 1;
-         }
-
-/* Get the coefficient values used by the forward transformation. This
-   uses new style vectorised key names if available. Otherwise it uses
-   old style indexed names (which were superceded by vectorised names
-   because they are shorter and so work better with FitsChans). */
-         iv = 0;
-         for( i = 0; i < nout && !undef; i++ ){
-
-            (new->coeff_f)[ i ] = astMalloc( sizeof( double )*
-                                           (size_t) new->ncoeff_f[ i ] );
-            if( astOK ) {
-               for( j = 0; j < new->ncoeff_f[ i ]; j++ ){
-                  (void) sprintf( buff, "cf%d", ++iv );
-                  (new->coeff_f)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
-                  if( (new->coeff_f)[ i ][ j ] == AST__BAD ) {
-                     (void) sprintf( buff, "cf%d_%d", i + 1, j + 1 );
-                     (new->coeff_f)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
-                  }
-               }
-            }
-         }
-
-/* Get the input axis powers associated with each coefficient of the forward 
-   transformation. */
-         iv = 0;
-         for( i = 0; i < nout && !undef; i++ ){
-            (new->power_f)[ i ] = astMalloc( sizeof( int * )*
-                                             (size_t) new->ncoeff_f[ i ] );
-            if( astOK ) {
-               for( j = 0; j < new->ncoeff_f[ i ]; j++ ){
-                  (new->power_f)[ i ][ j ] = astMalloc( sizeof( int )* (size_t) nin );
-                  if( astOK ) {
-                     for( k = 0; k < nin; k++ ){
-                        (void) sprintf( buff, "pf%d", ++iv );
-                        (new->power_f)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
-                        if( (new->power_f)[ i ][ j ][ k ] == 0 ) {
-                           (void) sprintf( buff, "pf%d_%d_%d", i + 1, j + 1, k + 1 );
-                           (new->power_f)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
-                        }
-                     }
-                  }
-               }
-            }
-         }
-
-/* Free the arrays if the forward transformation is undefined. */
-         if( undef ) {
-            new->ncoeff_f = astFree( new->ncoeff_f );
-            new->mxpow_f = astFree( new->mxpow_f );
-            new->power_f = astFree( new->power_f );
-            new->coeff_f = astFree( new->coeff_f );
-         }
-      }
-
-/* Allocate memory to hold the inverse arrays. */
-      new->ncoeff_i = astMalloc( sizeof( int )*(size_t) nin );
-      new->mxpow_i = astMalloc( sizeof( int )*(size_t) nout );
-      new->power_i = astMalloc( sizeof( int ** )*(size_t) nin );
-      new->coeff_i = astMalloc( sizeof( double * )*(size_t) nin );
-      if( astOK ) {
-
-/* Assume the inverse transformation is defined. */
-         undef = 0;
-
-/* Get the maximum power of each output axis value used by the inverse 
-   transformation. Set a flag "undef" if no values relating to the 
-   inverse transformation are found (this indicates that the inverse
-   transformation is not defined). */
-         for( i = 0; i < nout && !undef; i++ ){
-            (void) sprintf( buff, "mpi%d", i + 1 );
-            (new->mxpow_i)[ i ] = astReadInt( channel, buff, INT_MAX );
-            if( (new->mxpow_i)[ i ] == INT_MAX ) undef = 1;
-         }
-
-/* Get the number of coefficients associated with each input of the inverse 
-   transformation. */
-         for( i = 0; i < nin && !undef; i++ ){
-            (void) sprintf( buff, "nci%d", i + 1 );
-            (new->ncoeff_i)[ i ] = astReadInt( channel, buff, INT_MAX );
-            if( (new->ncoeff_i)[ i ] == INT_MAX ) undef = 1;
-         }
-
-/* Get the coefficient values used by the inverse transformation. */
-         iv = 0;
-         for( i = 0; i < nin && !undef; i++ ){
-
-            (new->coeff_i)[ i ] = astMalloc( sizeof( double )*
-                                           (size_t) new->ncoeff_i[ i ] );
-            if( astOK ) {
-               for( j = 0; j < new->ncoeff_i[ i ]; j++ ){
-                  (void) sprintf( buff, "ci%d", ++iv );
-                  (new->coeff_i)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
-                  if( (new->coeff_i)[ i ][ j ] == AST__BAD ) {
-                     (void) sprintf( buff, "ci%d_%d", i + 1, j + 1 );
-                     (new->coeff_i)[ i ][ j ] = astReadDouble( channel, buff, AST__BAD );
-                  }
-               }
-            }
-         }
-
-/* Get the output axis powers associated with each coefficient of the inverse 
-   transformation. */
-         iv = 0;
-         for( i = 0; i < nin && !undef; i++ ){
-            (new->power_i)[ i ] = astMalloc( sizeof( int * )*
-                                             (size_t) new->ncoeff_i[ i ] );
-            if( astOK ) {
-               for( j = 0; j < new->ncoeff_i[ i ]; j++ ){
-                  (new->power_i)[ i ][ j ] = astMalloc( sizeof( int )* (size_t) nout );
-                  if( astOK ) {
-                     for( k = 0; k < nout; k++ ){
-                        (void) sprintf( buff, "pi%d", ++iv );
-                        (new->power_i)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
-                        if( (new->power_i)[ i ][ j ][ k ] == 0 ) {
-                           (void) sprintf( buff, "pi%d_%d_%d", i + 1, j + 1, k + 1 );
-                           (new->power_i)[ i ][ j ][ k ] = astReadInt( channel, buff, 0 );
-                        }
-                     }
-                  }
-               }
-            }
-         }
-
-/* Free the arrays if the inverse transformation is undefined. */
-         if( undef ) {
-            new->ncoeff_i = astFree( new->ncoeff_i );
-            new->mxpow_i = astFree( new->mxpow_i );
-            new->power_i = astFree( new->power_i );
-            new->coeff_i = astFree( new->coeff_i );
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new PolyMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new PolyMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
diff --git a/ast-5.3-1/polymap.h b/ast-5.3-1/polymap.h
deleted file mode 100644
index 8373bf1..0000000
--- a/ast-5.3-1/polymap.h
+++ /dev/null
@@ -1,286 +0,0 @@
-#if !defined( POLYMAP_INCLUDED ) /* Include this file only once */
-#define POLYMAP_INCLUDED
-/*
-*+
-*  Name:
-*     polymap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the PolyMap class.
-
-*  Invocation:
-*     #include "polymap.h"
-
-*  Description:
-*     This include file defines the interface to the PolyMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     A PolyMap is a form of Mapping which performs a general polynomial
-*     transformation.  Each output coordinate is a polynomial function of
-*     all the input coordinates. The coefficients are specified separately 
-*     for each output coordinate. The forward and inverse transformations
-*     are defined independantly by separate sets of coefficients.
-
-*  Inheritance:
-*     The PolyMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astTransform
-*           Apply a PolyMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAPolyMap
-*           Test class membership.
-*        astPolyMap
-*           Create a PolyMap.
-*
-*     Protected:
-*        astCheckPolyMap
-*           Validate class membership.
-*        astInitPolyMap
-*           Initialise a PolyMap.
-*        astInitPolyMapVtab
-*           Initialise the virtual function table for the PolyMap class.
-*        astLoadPolyMap
-*           Load a PolyMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstPolyMap
-*           PolyMap object type.
-*
-*     Protected:
-*        AstPolyMapVtab
-*           PolyMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     28-SEP-2003 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* PolyMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstPolyMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int *ncoeff_f;             /* No. of coeffs for each forward polynomial */
-   int *mxpow_f;              /* Max power of each i/p axis for each forward polynomial */
-   int ***power_f;            /* Pointer to i/p powers for all forward coefficients */
-   double **coeff_f;          /* Pointer to values of all forward coefficients */
-   int *ncoeff_i;             /* No. of coeffs for each inverse polynomial */
-   int *mxpow_i;              /* Max power of each i/p axis for each inverse polynomial */
-   int ***power_i;            /* Pointer to i/p powers for all inverse coefficients */
-   double **coeff_i;          /* Pointer to values of all inverse coefficients */
-} AstPolyMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPolyMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstPolyMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstPolyMapGlobals {
-   AstPolyMapVtab Class_Vtab;
-   int Class_Init;
-} AstPolyMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPolyMapGlobals_( AstPolyMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(PolyMap)          /* Check class membership */
-astPROTO_ISA(PolyMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPolyMap *astPolyMap_( int, int, int, const double[], int, const double[], const char *, int *, ...);
-#else
-AstPolyMap *astPolyMapId_( int, int, int, const double[], int, const double[], const char *, ... )__attribute__((format(printf,7,8)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPolyMap *astInitPolyMap_( void *, size_t, int, AstPolyMapVtab *, const char *, int, int, int, const double[], int, const double[], int * );
-
-/* Vtab initialiser. */
-void astInitPolyMapVtab_( AstPolyMapVtab *, const char *, int * );
-
-/* Loader. */
-AstPolyMap *astLoadPolyMap_( void *, size_t, AstPolyMapVtab *,
-                                 const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPolyMap(this) astINVOKE_CHECK(PolyMap,this,0)
-#define astVerifyPolyMap(this) astINVOKE_CHECK(PolyMap,this,1)
-
-/* Test class membership. */
-#define astIsAPolyMap(this) astINVOKE_ISA(PolyMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPolyMap astINVOKE(F,astPolyMap_)
-#else
-#define astPolyMap astINVOKE(F,astPolyMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPolyMap(mem,size,init,vtab,name,nin,nout,ncoeff_f,coeff_f,ncoeff_i,coeff_i) \
-astINVOKE(O,astInitPolyMap_(mem,size,init,vtab,name,nin,nout,ncoeff_f,coeff_f,ncoeff_i,coeff_i,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPolyMapVtab(vtab,name) astINVOKE(V,astInitPolyMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPolyMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPolyMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPolyMap to validate PolyMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/prism.c b/ast-5.3-1/prism.c
deleted file mode 100644
index 0603412..0000000
--- a/ast-5.3-1/prism.c
+++ /dev/null
@@ -1,4273 +0,0 @@
-/*
-*class++
-*  Name:
-*     Prism
-
-*  Purpose:
-*     An extrusion of a region into higher dimensions.
-
-*  Constructor Function:
-c     astPrism
-f     AST_PRISM
-
-*  Description:
-*     A Prism is a Region which represents an extrusion of an existing Region 
-*     into one or more orthogonal dimensions (specified by another Region).
-*     If the Region to be extruded has N axes, and the Region defining the 
-*     extrusion has M axes, then the resulting Prism will have (M+N) axes. 
-*     A point is inside the Prism if the first N axis values correspond to 
-*     a point inside the Region being extruded, and the remaining M axis 
-*     values correspond to a point inside the Region defining the extrusion.
-*
-*     As an example, a cylinder can be represented by extruding an existing 
-*     Circle, using an Interval to define the extrusion. Ih this case, the
-*     Interval would have a single axis and would specify the upper and 
-*     lower limits of the cylinder along its length.
-
-*  Inheritance:
-*     The Prism class inherits from the Region class.
-
-*  Attributes:
-*     The Prism class does not define any new attributes beyond those
-*     which are applicable to all Regions.
-
-*  Functions:
-c     The Prism class does not define any new functions beyond those
-f     The Prism class does not define any new routines beyond those
-*     which are applicable to all Regions.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     17-DEC-2004 (DSB):
-*        Original version.
-*     11-MAY-2005 (DSB):
-*        Overlap modified to allow testing of overlap between prisms and
-*        intervals.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     9-OCT-2007 (DSB):
-*        Guard against all axes being extrusion axes in EquivPrism.
-*     20-JAN-2009 (DSB):
-*        Over-ride astRegBasePick.
-*     22-JAN-2009 (DSB):
-*        - Allow any class of Region to be used to define the extrusion axes.
-*        - Over-ride the astMapList method.
-*     19-MAR-2009 (DSB):
-*        Over-ride the astDecompose method.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Prism
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==(bb))?1:(((aa)==AST__BAD||(bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E9*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "region.h"              /* Regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "prism.h"               /* Interface definition for this class */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "cmpframe.h"            /* Compound Frames */
-#include "unitmap.h"             /* Unit Mappings */
-#include "interval.h"            /* Axis intervals */
-#include "pointlist.h"           /* Points within Frames */
-#include "permmap.h"             /* Axis permutations */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_maplist)( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *(* parent_getdefunc)( AstRegion *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_setmeshsize)( AstRegion *, int, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_clearmeshsize)( AstRegion *, int * );
-static double (*parent_getfillfactor)( AstRegion *, int * );
-static int (* parent_overlapx)( AstRegion *, AstRegion *, int * );
-static void (*parent_regsetattrib)( AstRegion *, const char *, char **, int * );
-static void (*parent_regclearattrib)( AstRegion *, const char *, char **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Prism)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Prism,Class_Init)
-#define class_vtab astGLOBAL(Prism,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstPrismVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstPrism *astPrismId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static double *RegCentre( AstRegion *this, double *, double **, int, int, int * );
-static double GetFillFactor( AstRegion *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetBounded( AstRegion *, int * );
-static int GetObjSize( AstObject *, int * );
-static int MapList( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static void ClearClosed( AstRegion *, int * );
-static void ClearMeshSize( AstRegion *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegions( AstPrism *, AstRegion **, AstRegion **, int *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void SetClosed( AstRegion *, int, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-AstRegion *astConvertToPrism_( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astConvertToPrism
-
-*  Purpose:
-*     Convert a supplied Region into a Prism if possible.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstRegion *astConvertToPrism( AstRegion *this, int *status )
-
-*  Description:
-*     This function attempts to split the supplied Region into two
-*     regions defined within separate coordinate system. If this is
-*     possible, and if either one of the two resulting Regions can be
-*     simplified, then the two simplified Regions are joined into a Prism
-*     equivalent to the supplied Region. The Prism is then simplified and
-*     returned.
-*
-*     If the supplied Region cannot be split into two components, or if
-*     neither of the two components can eb simplified, then a clone of the 
-*     supplied Region pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the equivalent simplified Prism, or a clone of the
-*     supplied Region pointer.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Current Frame in supplied Region */
-   AstFrame *pickfrm1;           /* Frame formed by picking current subset of axes */
-   AstFrame *pickfrm2;           /* Frame formed by picking all other axes */
-   AstMapping *junk;             /* Unused Mapping pointer */
-   AstMapping *map;              /* Base -> current Mapping */
-   AstPrism *prism;              /* Prism combining all axes */
-   AstPrism *newprism;           /* Prism combining all axes, in original Frame */
-   AstRegion *result;            /* Result pointer to return */
-   AstRegion *sp1;               /* Simplified region spanning selected axes */
-   AstRegion *sp2;               /* Simplified region spanning unselected axes */
-   AstUnitMap *um;               /* A UnitMap */
-   int *ax;                      /* Pointer to array of selecte axis indices */
-   int *perm;                    /* Axis permutation array */
-   int axis;                     /* Axis index */
-   int bitmask;                  /* Integer with set bits for selected axes */
-   int i;                        /* Loop index */
-   int mask;                     /* Integer with a set bit at current axis */
-   int nax;                      /* Number of selected axes */
-   int nin;                      /* No. of base Frame axes (Mapping inputs) */
-   int nout;                     /* No. of current Frame axes (Mapping outputs) */
-   int topmask;                  /* Integer that selects all axes */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the Mapping from base to current Frame. */
-   map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* Get the number of inputs and outputs for the Mapping. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Allocate memory to hold the indices of the current Frame axes in the 
-   current subset */
-   ax = astMalloc( sizeof( int )* nout );
-   if( ax ) {
-
-/* We need to scan through all possible subsets of the current Frame 
-   axes, looking for a subset that results in the Region being split. 
-   We use the binary pattern of bits in "bitmask" to indicate if the 
-   corresponding axes should be included in the subset of axes. 
-   Loop round all possible combinations, until a combination is found
-   that results in a Prism being formed. */
-      topmask = pow( 2, nout );
-      for( bitmask = 1; bitmask < topmask  && !result; bitmask++ ) {
-   
-/* Store the indices of the axes forming the current subset. */
-         nax = 0;
-         mask = 1;         
-         for( axis = 0; axis < nout; axis++  ) {
-            if( bitmask & mask ) ax[ nax++ ] = axis;
-            mask <<= 1;
-         }
-
-/* See if the current subset of current Frame axes can be split off from
-   the Region. If it can, the Frame pointer returned by astPickAxes will identify 
-   a Region. */
-         pickfrm1 = astPickAxes( this, nax, ax, &junk );
-         junk = astAnnul( junk );
-         if( astIsARegion( pickfrm1 ) ) {
-
-/* Check that the remaining (unselected) axes can also be picked into a
-   new Region. */
-            nax = 0;
-            mask = 1;         
-            for( axis = 0; axis < nout; axis++  ) {
-               if( ( bitmask & mask ) == 0 ) ax[ nax++ ] = axis;
-               mask <<= 1;
-            }
-
-            pickfrm2 = astPickAxes( this, nax, ax, &junk );
-            junk = astAnnul( junk );
-            if( astIsARegion( pickfrm2 ) ) {
-
-/* See if either of these picked Regions can be simplified. */
-               sp1 = astSimplify( pickfrm1 );
-               sp2 = astSimplify( pickfrm2 );
-               if( (AstFrame *) sp1 != pickfrm1 || 
-                   (AstFrame *) sp2 != pickfrm2 ) {
-
-/* If so form a Prism containing the simplified Regions. */
-                  prism = astPrism( sp1, sp2, " ", status );
-
-/* Permute the axes of the Prism so that they are in the same order as
-   in the Box. */
-                  perm = astMalloc( sizeof( int )*nout );
-                  if( perm ) {
-
-                     for( i = 0; i < nout; i++ ) perm[ i ] = -1;
-
-                     for( i = 0; i < nax; i++ ) {
-                        perm[ ax[ i ] ] = i + ( nout - nax );
-                     }
-
-                     nax = 0;
-                     for( i = 0; i < nout; i++ ) {
-                        if( perm[ i ] == -1 ) perm[ i ] = nax++;
-                     }
-
-                     astPermAxes( prism, perm );
-                     perm = astFree( perm );
-                  }
-
-/* Put the original current Frame back in (in place of the CmpFrame
-   containined in the Prism). */
-                  frm = astGetFrame( this->frameset, AST__CURRENT );
-                  um = astUnitMap( nout, " ", status );
-                  newprism = astMapRegion( prism, um, frm );
-                  um = astAnnul( um );
-                  frm = astAnnul( frm );
-
-/* Attempt to simplify the Prism. */
-                  result = astSimplify( newprism );               
-
-/* Free resources */
-                  prism = astAnnul( prism );          
-                  newprism = astAnnul( newprism );          
-               }
-
-               sp1 = astAnnul( sp1 );
-               sp2 = astAnnul( sp2 );
-            }
-            pickfrm2 = astAnnul( pickfrm2 );
-         }
-
-         pickfrm1 = astAnnul( pickfrm1 );
-      }
-
-      ax = astFree( ax );
-   }
-
-   map = astAnnul( map );
-
-/* If no Prism could be made, return a clone of the supplied Region
-   pointer. */
-   if( !result ) result = astClone( this );
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1, 
-                       AstMapping **map2, int *series, int *invert1, 
-                       int *invert2, int *status ) {
-/*
-*
-*  Name:
-*     Decompose
-
-*  Purpose:
-*     Decompose a Prism into two component Regions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "cmpregion.h"
-*     void Decompose( AstMapping *this, AstMapping **map1, 
-*                     AstMapping **map2, int *series,
-*                     int *invert1, int *invert2, int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the protected astDecompose
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns pointers to two Mappings which, when applied
-*     either in series or parallel, are equivalent to the supplied Mapping.
-*
-*     Since the Frame class inherits from the Mapping class, Frames can
-*     be considered as special types of Mappings and so this method can
-*     be used to decompose either CmpMaps, CmpFrames, CmpRegions or Prisms.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     map1
-*        Address of a location to receive a pointer to first component
-*        Mapping. 
-*     map2
-*        Address of a location to receive a pointer to second component
-*        Mapping. 
-*     series
-*        Address of a location to receive a value indicating if the
-*        component Mappings are applied in series or parallel. A non-zero
-*        value means that the supplied Mapping is equivalent to applying map1 
-*        followed by map2 in series. A zero value means that the supplied
-*        Mapping is equivalent to applying map1 to the lower numbered axes
-*        and map2 to the higher numbered axes, in parallel.
-*     invert1
-*        The value of the Invert attribute to be used with map1. 
-*     invert2
-*        The value of the Invert attribute to be used with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the component rames using the returned
-*     pointers will be reflected in the supplied CmpFrame.
-
-*-
-*/
-
-/* Local Variables: */
-   AstPrism *this;              /* Pointer to Prism structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the CmpMap structure. */
-   this = (AstPrism *) this_mapping;
-
-/* The components Frames of a Prism are considered to be parallel
-   Mappings. */
-   if( series ) *series = 0;
-
-/* The Frames are returned in their original order whether or not the
-   Prism has been inverted. */
-   if( map1 ) *map1 = astClone( this->region1 );
-   if( map2 ) *map2 = astClone( this->region2 );
-
-/* The invert flags dont mean anything for a Region, but we return them
-   anyway. If the Prism has been inverted, return inverted Invert flags. */
-   if( astGetInvert( this ) ) {
-      if( invert1 ) *invert1 = astGetInvert( this->region1 ) ? 0 : 1;
-      if( invert2 ) *invert2 = astGetInvert( this->region2 ) ? 0 : 1;
-
-/* If the Prism has not been inverted, return the current Invert flags. */
-   } else {
-      if( invert1 ) *invert1 = astGetInvert( this->region1 );
-      if( invert2 ) *invert2 = astGetInvert( this->region2 );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Objects are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     int Equal( AstObject *this_object, AstObject *that_object, int *status ) 
-
-*  Class Membership:
-*     Prism member function (over-rides the astEqual protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two Prisms are equivalent. 
-
-*  Parameters:
-*     this
-*        Pointer to the first Prism.
-*     that
-*        Pointer to the second Prism.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the Prisms are equivalent, zero otherwise.
-
-*  Notes:
-*     - The Prisms are equivalent if their component Regions are
-*     equivalent and if they have the same boolean operation, negation
-*     and closed flags.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPrism *that;              
-   AstPrism *this;              
-   int result;                   
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Region class. This checks
-   that the Objects are both of the same class, and have the same Negated
-   and Closed flags (amongst other things). */
-   if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two Prism structures. */
-      this = (AstPrism *) this_object;
-      that = (AstPrism *) that_object;
-
-/* Test their first component Regions for equality. */
-      if( astEqual( this->region1, that->region1 ) ) {
-
-/* Test their second component Regions for equality. */
-         if( astEqual( this->region2, that->region2 ) ) result = 1;
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Define a function to set an attribute value for a Prism.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "prism.h"
-*     MAKE_SET(attribute,lattribute,type)
-
-*  Class Membership:
-*     Defined by the Prism class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstRegion *this, <Type> value )
-*
-*     that sets the value of a specified Region attribute in the parent
-*     Region structure and also in the component Regions.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     lattribute
-*        Name of the attribute, all in lower case.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,lattribute,type) \
-static void Set##attribute( AstRegion *this_region, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPrism *this;         /* Pointer to the Prism structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Use the parent method to set the value in the parent Region structure. */ \
-   (*parent_set##lattribute)( this_region, value, status ); \
-\
-/* Also set the value in the two component Regions. */ \
-   this = (AstPrism *) this_region; \
-   astSet##attribute( this->region1, value ); \
-   astSet##attribute( this->region2, value ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed 
-   attributes. */
-MAKE_SET(MeshSize,meshsize,int)
-MAKE_SET(Closed,closed,int)
-
-/* Undefine the macro. */
-#undef MAKE_SET
-
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Define a function to clear an attribute value for a Prism.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "prism.h"
-*     MAKE_CLEAR(attribute,lattribute)
-
-*  Class Membership:
-*     Defined by the Prism class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstRegion *this )
-*
-*     that sets the value of a specified Region attribute in the parent
-*     Region structure and also in the component Regions.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     lattribute
-*        Name of the attribute, all in lower case.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute,lattribute) \
-static void Clear##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
-   AstPrism *this;         /* Pointer to the Prism structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Use the parent method to clear the value in the parent Region structure. */ \
-   (*parent_clear##lattribute)( this_region, status ); \
-\
-/* Also clear the value in the two component Regions. */ \
-   this = (AstPrism *) this_region; \
-   astClear##attribute( this->region1 ); \
-   astClear##attribute( this->region2 ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize and Closed 
-   attributes. */
-MAKE_CLEAR(MeshSize,meshsize)
-MAKE_CLEAR(Closed,closed)
-
-/* Undefine the macro. */
-#undef MAKE_CLEAR
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     Prism member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied Prism,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPrism *this;         /* Pointer to Prism structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the Prism structure. */
-   this = (AstPrism *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astGetObjSize( this->region1 );
-   result += astGetObjSize( this->region2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetBounded( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetBounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     int GetBounded( AstRegion *this, int *status ) 
-
-*  Class Membership:
-*     Prism method (over-rides the astGetBounded method inherited from
-*     the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the Region is bounded.
-*     The implementation provided by the base Region class is suitable
-*     for Region sub-classes representing the inside of a single closed 
-*     curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-*     Prism, PointList, etc ) may need to provide their own
-*     implementations.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstPrism *this;            /* Pointer to Prism structure */
-   AstRegion *reg1;           /* Pointer to first component Region */
-   AstRegion *reg2;           /* Pointer to second component Region */
-   int neg;                   /* Negated flag to use with the Prism */
-   int reg1b;                 /* Is the first component Region bounded?*/
-   int reg2b;                 /* Is the second component Region bounded?*/
-   int result;                /* Returned result */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;   
-
-/* Get the component Regions, and the Negated value for the Prism. The 
-   returned Regions represent a region within the base Frame of the FrameSet 
-   encapsulated by the parent Region structure. */
-   GetRegions( this, &reg1, &reg2, &neg, status );
-
-/* If the Prism has been inverted, temporarily invert the components. */
-   if( neg ) {
-      astNegate( reg1 );
-      astNegate( reg2 );
-   }
-
-/* See if either of the component Regions is bounded. */
-   reg1b = astGetBounded( reg1 );
-   reg2b = astGetBounded( reg2 );
-
-/* If the Prism has been inverted, re-invert the components to bring them
-   back to their original states. */
-   if( neg ) {
-      astNegate( reg1 );
-      astNegate( reg2 );
-   }
-
-/* The Prism is bounded only if both of the component Regions are bounded. */
-   result = ( reg1b && reg2b );
-   
-/* Free resources. */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-
-/* Return zero if an error occurred. */
-   if( !astOK ) result = 0;
-
-/* Return the required pointer. */
-   return result;
-}
-
-static double GetFillFactor( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetFillFactor
-
-*  Purpose:
-*     Obtain the value of the FillFactor attribute for a Prism.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     double GetFillFactor( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astGetFillFactor method inherited
-*     from the Region class).
-
-*  Description:
-*     This function returns the value of the FillFactor attribute for a
-*     Prism.  A suitable default value is returned if no value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The FillFactor value to use.
-
-*/
-
-/* Local Variables: */
-   AstPrism *this;
-   double f1;
-   double f2;
-   double result; 
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Obtain a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;
-
-/* See if a FillFactor value has been set. If so, use the parent
-   astGetFillFactor  method to obtain it. */
-   if ( astTestFillFactor( this ) ) {
-      result = (*parent_getfillfactor)( this_region, status );
-
-/* Otherwise, we will generate a default value equal to the product of
-   the FillFactor values of the two component Regions. */
-   } else {
-      f1 = astGetFillFactor( this->region1 );
-      f2 = astGetFillFactor( this->region2 );
-      if( f1 != AST__BAD && f2 != AST__BAD ) result = f1*f2;
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static void GetRegions( AstPrism *this, AstRegion **reg1, AstRegion **reg2,
-                        int *neg, int *status ) {
-/*
-*
-*  Name:
-*     GetRegions
-
-*  Purpose:
-*     Get the component Regions of a Prism.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void GetRegions( AstPrism *this, AstRegion **reg1, AstRegion **reg2,
-*                      int *neg, int *status )
-
-*  Class Membership:
-*     Prism member function 
-
-*  Description:
-*     This function returns pointers to the two Regions in a Prism, together 
-*     with the Negated flag for the Prism.
-*
-*     The current Frames in both the returned component Regions will be 
-*     equivalent to componets of the base Frame in the FrameSet encapsulated 
-*     by the parent Region structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism.
-*     reg1
-*        Address of a location to receive a pointer to first component
-*        Region. This is the region which is to be extruded. 
-*     reg2
-*        Address of a location to receive a pointer to second component
-*        Region. This will be an Interval defining the axes along which
-*        the first Region is to be extruded.
-*     neg
-*        Pointer to an int in which to return the value of the Negated 
-*        attribute of the Prism.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The returned pointers should be annuled using astAnnul when no
-*     longer needed.
-*     - The Frames represented by the returned Regions (that is, the
-*     current Frames in their encapsulated FrameSets) are equivalent to the 
-*     base Frame in the FrameSet encapsulated within the parent Region.
-*     - Any changes made to the component Regions using the returned
-*     pointers will be reflected in the supplied Prism.
-
-*-
-*/
-
-/* Initialise */
-   if( reg1 ) *reg1 = NULL;
-   if( reg2 ) *reg2 = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store the required values.*/
-   *reg1 = astClone( this->region1 );
-   *reg2 = astClone( this->region2 );
-   *neg = astGetNegated( (AstRegion *) this );
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetDefUnc
-
-*  Purpose:
-*     Obtain a pointer to the default uncertainty Region for a given Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstRegion *GetDefUnc( AstRegion *this ) 
-
-*  Class Membership:
-*     Prism method (over-rides the astGetDefUnc method inherited from
-*     the Region class).
-
-*     This function returns a pointer to a Region which represents the
-*     default uncertainty associated with a position on the boundary of the 
-*     given  Region. The returned Region refers to the base Frame within the 
-*     FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstPrism *this;            /* Pointer to Prism structure */
-   AstRegion *bunc1;          /* Uncertainty Region for 1st component */
-   AstRegion *bunc2;          /* Uncertainty Region for 2nd component */
-   AstRegion *result;         /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;   
-
-/* Construct a default uncertainty Region from the uncertainty Regions
-   in the two component Regions. The current Frames in the component
-   Regions are equivalent to the base Frame in the parent Region structure. 
-   So we may need to map the component uncertainty into the current Region of 
-   the parent if required later on. */
-   bunc1 = astGetUncFrm( this->region1, AST__CURRENT );
-   bunc2 = astGetUncFrm( this->region2, AST__CURRENT );
-
-/* Combine them into a Prism. */
-   result = (AstRegion *) astPrism( bunc1, bunc2, "", status );
-
-/* Free resources. */
-   bunc1 = astAnnul( bunc1 );
-   bunc2 = astAnnul( bunc2 );
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-void astInitPrismVtab_(  AstPrismVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPrismVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Prism.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     void astInitPrismVtab( AstPrismVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Prism vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Prism class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAPrism) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_maplist = mapping->MapList;
-   mapping->MapList = MapList;
-
-   parent_getdefunc = region->GetDefUnc;
-   region->GetDefUnc = GetDefUnc;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_equal = object->Equal;
-   object->Equal = Equal;
-
-   parent_clearclosed = region->ClearClosed;
-   region->ClearClosed = ClearClosed;
-
-   parent_clearmeshsize = region->ClearMeshSize;
-   region->ClearMeshSize = ClearMeshSize;
-
-   parent_setclosed = region->SetClosed;
-   region->SetClosed = SetClosed;
-
-   parent_setmeshsize = region->SetMeshSize;
-   region->SetMeshSize = SetMeshSize;
-
-   parent_getfillfactor = region->GetFillFactor;
-   region->GetFillFactor = GetFillFactor;
-
-   parent_overlapx = region->OverlapX;
-   region->OverlapX = OverlapX;
-
-   parent_regsetattrib = region->RegSetAttrib;
-   region->RegSetAttrib = RegSetAttrib;
-
-   parent_regclearattrib = region->RegClearAttrib;
-   region->RegClearAttrib = RegClearAttrib;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   mapping->Decompose = Decompose;
-   region->RegBaseBox = RegBaseBox;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegPins = RegPins;
-   region->GetBounded = GetBounded;
-   region->RegCentre = RegCentre;
-   region->Overlap = Overlap;
-   region->RegBasePick = RegBasePick;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "Prism", "Region extrusion into higher dimensions" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     CmpMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstPrism *this;       /* Pointer to Prism structure */
-   int result;           /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the Prism structure. */
-   this = (AstPrism *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->region1, mode, extra, fail );
-   if( !result ) result = astManageLock( this->region2, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MapList( AstMapping *this_mapping, int series, int invert,
-                    int *nmap, AstMapping ***map_list, int **invert_list, 
-                    int *status ) {
-/*
-*  Name:
-*     MapList
-
-*  Purpose:
-*     Decompose a Prism into a sequence of simpler Regions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapList( AstMapping *this, int series, int invert, int *nmap,
-*                  AstMapping ***map_list, int **invert_list )
-
-*  Class Membership:
-*     Prism member function (over-rides the protected astMapList
-*     method inherited from the Region class).
-
-*  Description:
-*     This function decomposes a Prism into a sequence of simpler
-*     Regions which may be applied in parallel to achieve the same 
-*     effect. The Prism is decomposed as far as possible, but it is
-*     not guaranteed that this will necessarily yield any more than
-*     one Region, which may actually be the original Prism supplied.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism to be decomposed (the Prism is not
-*        actually modified by this function).
-*     series
-*        Prisms always apply their component Regions in parallel, so this
-*        value should always be zero. This function will return without
-*        action if it is non-zero.
-*     invert
-*        Inverting a Region has no effect on the properties of the Region
-*        and so this parameter is ignored.
-*     nmap
-*        The address of an int which holds a count of the number of
-*        individual Regions in the decomposition. On entry, this
-*        should count the number of Regions already in the
-*        "*map_list" array (below). On exit, it is updated to include
-*        any new Regions appended by this function.
-*     map_list
-*        Address of a pointer to an array of Region pointers. On
-*        entry, this array pointer should either be NULL (if no
-*        Regions have yet been obtained) or should point at a
-*        dynamically allocated array containing Region pointers
-*        ("*nmap" in number) which have been obtained from a previous
-*        invocation of this function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Region pointers that result from the decomposition
-*        requested. These pointers will be appended to any previously
-*        present, and the array pointer will be updated as necessary
-*        to refer to the enlarged array (any space released by the
-*        original array will be freed automatically).
-*
-*        The new Region pointers returned will identify a sequence of
-*        Regions which, when applied (in parallel) in order, will be 
-*        equivalent to the original Prism. 
-*
-*        All the Region pointers returned by this function should be
-*        annulled by the caller, using astAnnul, when no longer
-*        required. The dynamic array holding these pointers should
-*        also be freed, using astFree.
-*     invert_list
-*        Address of a pointer to an array of int. On entry, this array
-*        pointer should either be NULL (if no Regions have yet been
-*        obtained) or should point at a dynamically allocated array
-*        containing Invert attribute values ("*nmap" in number) which
-*        have been obtained from a previous invocation of this
-*        function.
-*
-*        On exit, the dynamic array will be enlarged to contain any
-*        new Invert attribute values that result from the
-*        decomposition requested. These values will be appended to any
-*        previously present, and the array pointer will be updated as
-*        necessary to refer to the enlarged array (any space released
-*        by the original array will be freed automatically).
-*
-*        The new Invert values returned will always be zero since a
-*        Region is unaffected by its Invert setting.
-*
-*        The dynamic array holding these values should be freed by the
-*        caller, using astFree, when no longer required.
-
-*  Returned Value:
-*     Zero is always returned.
-
-*  Notes:
-*     - It is unspecified to what extent the original Prism and the
-*     individual (decomposed) Regions are
-*     inter-dependent. Consequently, the individual Regions cannot be
-*     modified without risking modification of the original Prism.
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then the *nmap value, the
-*     list of Region pointers and the list of Invert values will all
-*     be returned unchanged.
-*/
-
-/* Local Variables: */
-   AstPrism *this;              /* Pointer to Prism structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the Prism structure. */
-   this = (AstPrism *) this_mapping;
-
-/* When considered as a CmpMap, a Prism always combines its component
-   Mappings (Regions) in parallel. So check that a parallel decomposition
-   was requested. */
-   if ( ! series ) {
-
-/* Concatenate the Mapping lists obtained from each component Region. */
-      (void) astMapList( (AstMapping *) this->region1, 0, 0, nmap, map_list, 
-                         invert_list );
-      (void) astMapList( (AstMapping *) this->region2, 0, 0, nmap, map_list, 
-                         invert_list );
-
-/* If the Prism does not combine its components in the way required
-   by the decomposition (series or parallel), then we cannot decompose
-   it. In this case it must be appended to the Mapping list as a
-   single entity. We can use the parent class method to do this. */
-   } else {
-      (void) ( *parent_maplist )( this_mapping, series, invert, nmap,
-                                  map_list, invert_list, status );
-   }
-
-   return 0;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-*  Name:
-*     Overlap
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     int Overlap( AstRegion *this, AstRegion *that, int *status ) 
-
-*  Class Membership:
-*     Prism member function (over-rides the astOverlap method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function returns an integer value indicating if the two
-*     supplied Regions overlap. The two Regions are converted to a commnon
-*     coordinate system before performing the check. If this conversion is 
-*     not possible (for instance because the two Regions represent areas in
-*     different domains), then the check cannot be performed and a zero value 
-*     is returned to indicate this.
-
-*  Parameters:
-*     this
-*        Pointer to the first Region.
-*     that
-*        Pointer to the second Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     astOverlap()
-*        A value indicating if there is any overlap between the two Regions.
-*        Possible values are:
-*
-*        0 - The check could not be performed because the second Region
-*            could not be mapped into the coordinate system of the first 
-*            Region.
-*
-*        1 - There is no overlap between the two Regions.
-*
-*        2 - The first Region is completely inside the second Region.
-*
-*        3 - The second Region is completely inside the first Region.
-*
-*        4 - There is partial overlap between the two Regions.
-*
-*        5 - The Regions are identical.
-*
-*        6 - The second Region is the negation of the first Region.
-
-*  Notes:
-*     - The returned values 5 and 6 do not check the value of the Closed 
-*     attribute in the two Regions. 
-*     - A value of zero will be returned if this function is invoked with the 
-*     AST error status set, or if it should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;
-   AstFrame *efrm;
-   AstFrameSet *fs;
-   AstMapping *bmap;
-   AstMapping *emap;
-   AstMapping *map1;
-   AstMapping *map2;
-   AstMapping *map;
-   AstMapping *smap;
-   AstRegion *that_base2;
-   AstRegion *that_base;
-   AstRegion *that_ext2;
-   AstRegion *that_ext;
-   AstRegion *this_reg1;
-   AstRegion *this_reg2;
-   int *inax;
-   int *outax;
-   int i;
-   int nbase;
-   int next;
-   int rbase;
-   int result;     
-   int rext;            
-   int that_neg;
-   int this_neg;
-
-/* A table indicating how to combine together the overlap state of the 
-   extrusion Regions with the overlap state of the other (base) Region.
-   The first index represents the value returned by the astOverlap method
-   when used to determine the overlap of the base Regions in the two
-   supplied Prisms. The second index represents the value returned by the 
-   astOverlap method when used to determine the overlap of the extrusion 
-   Regions in the two supplied Prisms. The integer values stored in the 
-   array represent the astOverlap value describing the overlap of the two
-   Prisms. */
-   static int rtable[ 7 ][ 7 ] = { { 0, 0, 0, 0, 0, 0, 0 },
-                                   { 0, 1, 1, 1, 1, 1, 1 },
-                                   { 0, 1, 2, 4, 4, 2, 1 },
-                                   { 0, 1, 4, 3, 4, 3, 1 },
-                                   { 0, 1, 4, 4, 4, 4, 1 },
-                                   { 0, 1, 2, 3, 4, 5, 1 },
-                                   { 0, 1, 1, 1, 1, 1, 6 } };
-
-/* Initialise */
-   result = 0;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Get pointers to the base and extrusion Regions within "this", and also
-   the nagated flag. */
-   GetRegions( (AstPrism *) this, &this_reg1, &this_reg2, &this_neg, status );
-
-/* Get the number of axes in the base and extrusion Regions of "this". */
-   nbase = astGetNaxes( this_reg1 );
-   next = astGetNaxes( this_reg2 );
-
-/* Get a FrameSet which goes from the Frame represented by "this" to the
-   Frame represented by "that". Check that the conection is defined. */
-   fs = astConvert( this, that, "" );
-   if( fs ) {
-
-/* Get the forward Mapping from the above FrameSet. */
-      map2 = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Get a pointer to the Mapping from base to current Frame in "this". */
-      map1 = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* Combine these Mappings to get the Mapping from the base Frame of "this"
-   to the current Frame of "that". */
-      map = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-
-/* Simplify this Mapping. */
-      smap = astSimplify( map );
-
-/* See if the extrusion axes in "this" correspond to a unique set of axes
-   in the current Frame of "that". */
-      inax = astMalloc( sizeof(int)*(size_t)next );
-      for( i = 0; i < next; i++ ) inax[ i ] = nbase + i;
-      outax = astMapSplit( smap, next, inax, &emap );
-
-/* If they do, attempt to create a Region by picking the axes from "that" 
-   that correspond to the extrusion axes in "this". */
-      if( emap && astGetNout( emap ) == next ) {
-         that_ext = (AstRegion *) astPickAxes( that, next, outax, NULL );
-
-/* If the picked axes formed a Region, see if the base axes can also be
-   picked in the same way. */
-         if( astIsARegion( that_ext ) ) {
-            outax = astFree( outax );
-            inax = astGrow( inax, (size_t)nbase, sizeof( int ) );
-            for( i = 0; i < nbase; i++ ) inax[ i ] = i;
-            outax = astMapSplit( smap, nbase, inax, &bmap );
-            if( bmap && astGetNout( bmap ) == nbase ) {
-               that_base = (AstRegion *) astPickAxes( that, nbase, outax, NULL );
-               if( astIsARegion( that_base ) ) {
-
-/* Map the two Regions picked from "that" into the Frames of the two
-   sub-regions within "this". */
-                  astInvert( emap );
-                  efrm = astGetFrame( this_reg2->frameset, AST__CURRENT );
-                  that_ext2 = astMapRegion( that_ext, emap, efrm );
-
-                  astInvert( bmap );
-                  bfrm = astGetFrame( this_reg1->frameset, AST__CURRENT );
-                  that_base2 = astMapRegion( that_base, bmap, bfrm );
-
-/* We can test separately for overlap of the two extrusion Regions, and for 
-   overlap of the two base Regions, and then combine the returned flags to 
-   represent overlap of the whole Prism. */
-                  rbase = astOverlap( this_reg1, that_base2 );
-                  rext = astOverlap( this_reg2, that_ext2 );
-                  result = rtable[ rbase ][ rext ];
-
-/* The values in the rtable array assume that neither of the supplied
-   Prisms have been negated. Modify the value obtained from rtable to
-   take account of negation of either or both of the supplied Prisms. */
-                  that_neg = astGetNegated( that );
-                  if( this_neg ) {
-                     if( that_neg ) {
-                        if( result == 1 ) {
-                           result = 4;
-                        } else if( result == 2 ) {
-                           result = 3;
-                        } else if( result == 3 ) {
-                           result = 2;
-                        }
-                     } else {
-                        if( result == 1 ) {
-                           result = 3;
-                        } else if( result == 2 ) {
-                           result = 4;
-                        } else if( result == 3 ) {
-                           result = 1;
-                        } else if( result == 5 ) {
-                           result = 6;
-                        } else if( result == 6 ) {
-                           result = 5;
-                        }
-                     }
-                  } else if( that_neg ){
-                     if( result == 1 ) {
-                        result = 2;
-                     } else if( result == 2 ) {
-                        result = 1;
-                     } else if( result == 3 ) {
-                        result = 4;
-                     } else if( result == 5 ) {
-                        result = 6;
-                     } else if( result == 6 ) {
-                        result = 5;
-                     }
-                  }
-
-/* Free resources */
-                  efrm = astAnnul( efrm );
-                  that_ext2 = astAnnul( that_ext2 );
-                  bfrm = astAnnul( bfrm );
-                  that_base2 = astAnnul( that_base2 );
-               }
-               that_base = astAnnul( that_base );
-               bmap = astAnnul( bmap );
-            }
-         }
-         emap = astAnnul( emap );
-         that_ext = astAnnul( that_ext );
-      }
-      outax = astFree( outax );
-      inax = astFree( inax );
-      smap = astAnnul( smap );      
-      map = astAnnul( map );      
-      map1 = astAnnul( map1 );      
-      map2 = astAnnul( map2 );      
-      fs = astAnnul( fs );      
-   }
-   this_reg1 = astAnnul( this_reg1 );
-   this_reg2 = astAnnul( this_reg2 );
-
-/* If overlap could not be determined using the above implementation, try 
-   using the implementation inherited from the parent Region class. Use
-   OverlapX rather than Overlap since a) it is OverlapX that does the work,
-   and b) calling Overlap could end us in an infinite loop. */
-   if( !result ) result = (*parent_overlapx)( this, that, status );
-
-/* If not OK, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-*  Name:
-*     OverlapX
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     int OverlapX( AstRegion *that, AstRegion *this ) 
-
-*  Class Membership:
-*     Prism member function (over-rides the astOverlapX method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function performs the processing for the public astOverlap
-*     method and has exactly the same interface except that the order
-*     of the two arguments is swapped. This is a trick to allow
-*     the astOverlap method to be over-ridden by derived classes on
-*     the basis of the class of either of its two arguments.
-*
-*     See the astOverlap method for details of the interface.
-*/
-
-/* Local Variables; */
-   int result;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* We know that "that" is a Prism, so call the private Overlap method,
-   and then modify the returned value to take account of the fact that the
-   two Regions are swapped. */
-   result = Overlap( that, this, status );
-
-   if( result == 2 ){
-      result = 3;
-   } else if( result == 3 ){
-      result = 2;
-   }
-
-   return result;
-}
-
-
-static void RegBaseBox( AstRegion *this_region, double *lbnd, double *ubnd, 
-                        int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, 
-*                      int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPrism *this;              /* Pointer to Prism structure */
-   AstRegion *reg1;             /* Pointer to first component Region */
-   AstRegion *reg2;             /* Pointer to second component Region */
-   int nax;                     /* Number of axes in Frame */
-   int neg;                     /* Negated flag for Prism */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Prism structure */
-   this = (AstPrism *) this_region;
-
-/* Get pointers to the component Regions. */
-   GetRegions( this, &reg1, &reg2, &neg, status );
-
-/* The base Frame of the parent Region structure is equivalent to a
-   CmpFrame containing the current Frames of the component Regions. 
-   Get the no. of axes in the first component Frame. */
-   nax = astGetNaxes( reg1 );
-
-/* Get the bounding boxes of the component Regions in these Frame,
-   storing the values in the supplied arrays. */
-   astGetRegionBounds( reg1, lbnd, ubnd ); 
-   astGetRegionBounds( reg2, lbnd + nax, ubnd + nax ); 
-
-/* Free resources.*/
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this_region, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstPointSet *RegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. Annul the pointer using astAnnul when it 
-*     is no longer needed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-
-/* Local Variables: */
-   AstPointSet *grid1;            /* PointSet holding grid for region1 */
-   AstPointSet *grid2;            /* PointSet holding grid for region2 */
-   AstPointSet *mesh1;            /* PointSet holding mesh for region1 */
-   AstPointSet *mesh2;            /* PointSet holding mesh for region2 */
-   AstPointSet *result;           /* Returned pointer */
-   AstPrism *this;                /* The Prism structure */
-   AstRegion *reg1;               /* Pointer to first component Region */
-   AstRegion *reg2;               /* Pointer to second component Region */
-   double **pg1;                  /* Pointer to grid1 arrays */
-   double **pg2;                  /* Pointer to grid2 arrays */
-   double **pm1;                  /* Pointer to mesh1 arrays */
-   double **pm2;                  /* Pointer to mesh2 arrays */
-   double **ptr;                  /* Pointer to returned mesh arrays */
-   int gsz1;                      /* Preferred grid size for region1 */
-   int gsz2;                      /* Preferred grid size for region2 */
-   int hasMesh1;                  /* Does 1st component Region have a mesh? */
-   int hasMesh2;                  /* Does 2nd component Region have a mesh? */
-   int i;                         /* Index of next mesh position */
-   int ii;                        /* Index of next results position */
-   int j;                         /* Index of next grid position */
-   int jc;                        /* Axis index */
-   int msz1;                      /* Preferred mesh size for region1 */
-   int msz2;                      /* Preferred mesh size for region2 */
-   int msz;                       /* Original MeshSize */
-   int mszp;                      /* MeshSize value for Prism */
-   int nax1;                      /* Number of axes in region1 */
-   int nax2;                      /* Number of axes in region2 */
-   int nax;                       /* Number of axes in Prism */
-
-/* Initialise */
-   result= NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   a previously created mesh, return it. */
-   if( this_region->basemesh ) {
-      result = astClone( this_region->basemesh );
-
-/* Otherwise, create a new mesh. */
-   } else {
-
-/* Get pointers to the component regions. */
-      reg1 = this->region1;
-      reg2 = this->region2;
-
-/* A mesh can only be produced for a Region if it is bounded when either
-   negated or un-negated. See if meshes can be produced for the component
-   Regions. */
-      hasMesh1 = astGetBounded( reg1 );
-      if( !hasMesh1 ){
-         astNegate( reg1 );
-         hasMesh1 = astGetBounded( reg1 );
-         astNegate( reg1 );
-      }
-
-      hasMesh2 = astGetBounded( reg2 );
-      if( !hasMesh2 ){
-         astNegate( reg2 );
-         hasMesh2 = astGetBounded( reg2 );
-         astNegate( reg2 );
-      }
-
-/* If either Region does not have a mesh we cannot produce a mesh for the
-   Prism. */
-      if( !hasMesh1 || !hasMesh2 ) {
-         if( astOK ) astError( AST__INTER, "astRegBaseMesh(%s): No mesh "
-                   "can be produced for the %s bacause one of its component "
-                   "Regions is unbounded.", status, astGetClass( this ), astGetClass( this ) );
-
-/* Otherwise we can create a mesh for the Prism. */
-      } else {
-
-/* Determine the grid sizes and mesh sizes to use for the two components. 
-   This aims to produce a total number of points in the returned Prism
-   mesh roughly equal to the MeshSize attribute of the Prism. It also
-   aims to divide the mesh points equally between the end faces of the
-   prism, and the side walls. We remember that the grid used to represent
-   any 1-D region always has a size of 2, regardless of the setting of
-   MeshSize. */
-         mszp = astGetMeshSize( this );
-         msz1 = ( astGetNaxes( reg1 ) == 1 ) ? 2 : sqrt( 0.5*mszp );
-         gsz2 = 0.5*mszp/msz1;
-         msz2 = ( astGetNaxes( reg2 ) == 1 ) ? 2 : sqrt( 0.5*mszp );
-         gsz1 = 0.5*mszp/msz2;
-
-/* First, get a boundary mesh for the second component Region defining the 
-   prism extrusion. For instance, if the Region is 1-dimensional, this mesh 
-   will consist of the two values on the Region axis: the lower and upper 
-   bounds of the Region. */
-         msz = astTestMeshSize( reg2 ) ? astGetMeshSize( reg2 ) : -1;
-         astSetMeshSize( reg2, msz2 );
-         mesh2 = astRegMesh( reg2 );
-
-/* Also get a grid of points spread throughout the extent (i.e. not
-   merely on the boundary) of the second Region. */
-         astSetMeshSize( reg2, gsz2 );
-         grid2 = astRegGrid( reg2 );
-
-/* Re-instate the original MeshSize for the second Region. */
-         if( msz == -1 ) {
-            astClearMeshSize( reg2 );
-         } else {
-            astSetMeshSize( reg2, msz );
-         }
-
-/* Similarly, get a boundary mesh and a volume grid for the first Region. */
-         msz = astTestMeshSize( reg1 ) ? astGetMeshSize( reg1 ) : -1;
-         astSetMeshSize( reg1, msz1 );
-         mesh1 = astRegMesh( reg1 );
-
-         astSetMeshSize( reg1, gsz1 );
-         grid1 = astRegGrid( reg1 );
-
-         if( msz == -1 ) {
-            astClearMeshSize( reg1 );
-         } else {
-            astSetMeshSize( reg1, msz );
-         }
-
-/* Note the number of axes in the two component Regions. */
-         nax1 = astGetNcoord( mesh1 );
-         nax2 = astGetNcoord( mesh2 );
-
-/* The above mesh and grid sizes are only approximate. Find the values
-   actually used. */
-         msz1 = astGetNpoint( mesh1 );
-         gsz1 = astGetNpoint( grid1 );
-         msz2 = astGetNpoint( mesh2 );
-         gsz2 = astGetNpoint( grid2 );
-
-/* Create the returned PointSet. */
-         msz = gsz1*msz2 + msz1*gsz2;
-         nax= astGetNaxes( this );
-         result = astPointSet( msz, nax, "", status );
-
-/* Get pointers to the data in all 5 PointSets. */
-         ptr = astGetPoints( result );
-         pm1 = astGetPoints( mesh1 );
-         pg1 = astGetPoints( grid1 );
-         pm2 = astGetPoints( mesh2 );
-         pg2 = astGetPoints( grid2 );
-
-/* Check pointers can be de-referenced safely. */
-         if( astOK ) {         
-
-/* Initialise the index of the next point to be written to the results
-   array. */
-            ii = 0;
-
-/* First, replicate the volume grid covering the first region at every
-   point in the boundary mesh covering the second Region. */
-            for( i = 0; i < msz2; i++ ) {
-               for( j = 0; j < gsz1; j++, ii++ ) {
-                  for( jc = 0; jc < nax1; jc++ ) {
-                     ptr[ jc ][ ii ] = pg1[ jc ][ j ];
-                  }
-                  for( ; jc < nax; jc++ ) {
-                     ptr[ jc ][ ii ] = pm2[ jc - nax1 ][ i ];
-                  }
-               }
-            }
-
-/* Now, replicate the volume grid covering the second region at every
-   point in the boundary mesh covering the first Region. */
-            for( i = 0; i < msz1; i++ ) {
-               for( j = 0; j < gsz2; j++, ii++ ) {
-                  for( jc = 0; jc < nax1; jc++ ) {
-                     ptr[ jc ][ ii ] = pm1[ jc ][ i ];
-                  }
-                  for( ; jc < nax; jc++ ) {
-                     ptr[ jc ][ ii ] = pg2[ jc -nax1 ][ j ];
-                  }
-               }
-            }
-         }
-
-/* Free resources. */
-         mesh1 = astAnnul( mesh1 );
-         mesh2 = astAnnul( mesh2 );
-         grid1 = astAnnul( grid1 );
-         grid2 = astAnnul( grid2 );
-      }
-
-/* Save the returned pointer in the Region structure so that it does not
-   need to be created again next time this function is called. */
-      if( astOK && result ) this_region->basemesh = astClone( result );
-   }
-
-/* Annul the result if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, 
-                               const int *axes, int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm1;      /* Axes picked from the 1st encapsulated Region */
-   AstFrame *frm2;      /* Axes picked from the 2nd encapsulated Region */
-   AstPrism *this;      /* Pointer to Prism structure */
-   AstRegion *result;   /* Returned Region */
-   int *axes1;          /* Axes to pick from 1st input encapsulated Region */
-   int *axes2;          /* Axes to pick from 2nd input encapsulated Region */
-   int i;               /* Output axis index */
-   int j;               /* Input axis index */
-   int nax1;            /* No. of axes in 1st input encapsulated Region */
-   int nax2;            /* No. of axes in 2nd input encapsulated Region */
-   int naxes1;          /* No. of axes in 1st output encapsulated Region */
-   int naxes2;          /* No. of axes in 2nd output encapsulated Region */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Prism information. */
-   this = (AstPrism *) this_region;
-
-/* Get the number of axes in each of the two encapsulated Regions. */
-   nax1 = astGetNaxes( this->region1 );
-   nax2 = astGetNaxes( this->region2 );
-
-/* Allocate memory to hold the indices of the axes selected from each of 
-   the two encapsulated Regions. */
-   axes1 = astMalloc( sizeof( *axes1 )*nax1 );
-   axes2 = astMalloc( sizeof( *axes2 )*nax2 );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Initialise the counters that count the number of axes selected from 
-   each of the two encapsulated Regions. */
-      naxes1 = 0;
-      naxes2 = 0;
-
-/* For each of the axes to be selected from the prism... */
-      for( i = 0; i < naxes; i++ ) {
-         j = axes[ i ];
-
-/* ... if the current selected axis is part of the first encapsulated
-   Region, add its index into the array that holds the axes to be selected
-   from the first encapsulated region. Increment the number of axes
-   selected from the first encapsulated region. */
-         if( j < nax1 ) {
-            axes1[ naxes1++ ] = j;
-
-/* If the current selected axis is part of the second encapsulated Region, 
-   add its index into the array that holds the axes to be selected from 
-   the second encapsulated region. Note, the index is converted from a
-   Prism axis index to a sub-region axis index by subtracting "nax1". 
-   Also increment the number of axes selected from the second encapsulated 
-   region. */
-         } else {
-            axes2[ naxes2++ ] = j - nax1;
-         }
-      }         
-
-/* Pick any required axes from the first sub-region. If the result of the
-   selection is not a Region, we cannot pick the required axes, so annul
-   the object holding the selected axes. */
-      if( naxes1 ) {
-         frm1 = astPickAxes( this->region1, naxes1, axes1, NULL );
-         if( frm1 && !astIsARegion( frm1 ) ) frm1 = astAnnul( frm1 );
-      } else {
-         frm1 = NULL;
-      }
-
-/* Pick any required axes from the second sub-region. If the result of the
-   selection is not a Region, we cannot pick the required axes, so annul
-   the object holding the selected axes. */
-      if( naxes2 ) {
-         frm2 = astPickAxes( this->region2, naxes2, axes2, NULL );
-         if( frm2 && !astIsARegion( frm2 ) ) frm2 = astAnnul( frm2 );
-      } else {
-         frm2 = NULL;
-      }
-
-/* If we are selecting axes only from the first sub-region, and the above
-   selection was succesful, just return a clone of the Region holding the
-   axes selected from the first sub-region. */
-      if( naxes1 > 0 && naxes2 == 0 && frm1 ) {
-         result = astClone( frm1 );
-
-/* If we are selecting axes only from the second sub-region, and the above
-   selection was succesful, just return a clone of the Region holding the
-   axes selected from the second sub-region. */
-      } else if( naxes1 == 0 && naxes2 > 0 && frm2 ) {
-         result = astClone( frm2 );
-
-/* If we are selecting axes from both sub-regions, and both the above
-   selections were succesful, joing them together into a Prism. */
-      } else if( naxes1 > 0 && naxes2 > 0 && frm1 && frm2 ) {
-         result = (AstRegion *) astPrism( (AstRegion *) frm1, 
-                                          (AstRegion *) frm2, 
-                                          "", status );
-      }
-
-/* Free resources */
-      if( frm1 ) frm1 = astAnnul( frm1 );      
-      if( frm2 ) frm2 = astAnnul( frm2 );      
-   }
-
-   axes1 = astFree( axes1 );
-   axes2 = astFree( axes2 );
-
-/* Return a NULL pointer if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static double *RegCentre( AstRegion *this_region, double *cen, double **ptr, 
-                          int index, int ifrm, int *status ){
-/*
-*  Name:
-*     RegCentre
-
-*  Purpose:
-*     Re-centre a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     double *RegCentre( AstRegion *this, double *cen, double **ptr, 
-*                        int index, int ifrm, int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astRegCentre protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function shifts the centre of the supplied Region to a
-*     specified position, or returns the current centre of the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     cen
-*        Pointer to an array of axis values, giving the new centre.
-*        Supply a NULL value for this in order to use "ptr" and "index" to 
-*        specify the new centre.
-*     ptr
-*        Pointer to an array of points, one for each axis in the Region.
-*        Each pointer locates an array of axis values. This is the format
-*        returned by the PointSet method astGetPoints. Only used if "cen"
-*        is NULL.
-*     index
-*        The index of the point within the arrays identified by "ptr" at
-*        which is stored the coords for the new centre position. Only used 
-*        if "cen" is NULL.
-*     ifrm
-*        Should be AST__BASE or AST__CURRENT. Indicates whether the centre 
-*        position is supplied and returned in the base or current Frame of 
-*        the FrameSet encapsulated within "this".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If both "cen" and "ptr" are NULL then a pointer to a newly
-*     allocated dynamic array is returned which contains the centre
-*     coords of the Region. This array should be freed using astFree when
-*     no longer needed. If either of "ptr" or "cen" is not NULL, then a
-*     NULL pointer is returned.
-
-*  Notes:
-*    - Some Region sub-classes do not have a centre. Such classes will report 
-*    an AST__INTER error code if this method is called with either "ptr" or 
-*    "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-*    reported if this method is invoked on a Region of an unsuitable class,
-*    but NULL is always returned.
-*/
-
-/* Local Variables: */
-   AstPrism *this;     /* Pointer to Prism structure */
-   AstRegion *reg1;    /* Pointer to first component Region */
-   AstRegion *reg2;    /* Pointer to second component Region */
-   double *bc;         /* Base Frame centre position */
-   double *cen1;       /* Centre of first component Region */
-   double *cen2;       /* Centre of second component Region */
-   double *result;     /* Returned pointer */
-   double *tmp;        /* Temporary array pointer */
-   double *total;      /* Pointer to total base Frame centre array */
-   int i;              /* Coordinate index */
-   int nax1;           /* Number of axes in first component Region */
-   int nax2;           /* Number of axes in second component Region */
-   int ncb;            /* Number of base frame coordinate values per point */
-   int ncc;            /* Number of current frame coordinate values per point */
-   int neg;            /* Prism negated flag */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;
-
-/* Get the component Regions, and the Negated flag for the Prism. */
-   GetRegions( this, &reg1, &reg2, &neg, status );
-
-/* Get the number of current Frame axes in each component Region. The sum
-   of these will equal the number of base Frame axes in the parent Region
-   structure. */
-   nax1 = astGetNaxes( reg1 );
-   nax2 = astGetNaxes( reg2 );
-   ncb = nax1 + nax2;
-
-/* If we are getting (not setting) the current centre... */
-   if( !ptr && !cen ) {
-
-/* Get the centre from the two component Regions in their current Frames. */
-      cen1 = astRegCentre( reg1, NULL, NULL, 0, AST__CURRENT );
-      cen2 = astRegCentre( reg2, NULL, NULL, 0, AST__CURRENT );
-
-/* If both component regions are re-centerable, join the two centre
-   arrays together into a single array. */      
-      if( cen1 && cen2 ) {
-         total = astMalloc( sizeof(double)*(size_t)ncb );
-         if( total ) {
-            for( i = 0; i < nax1; i++ ) total[ i ] = cen1[ i ];
-            for( i = 0; i < nax2; i++ ) total[ i + nax1 ] = cen2[ i ];
-
-/* The current Frames of the component Regions correspond to the base
-   Frame of the parent Region structure. If the original centre is
-   required in the current Frame, transform it using the base->current
-   Mapping from the parent Region structure. */
-            if( ifrm == AST__CURRENT ) {
-               result = astRegTranPoint( this_region, total, 1, 1 );
-               total = astFree( total );
-            } else {
-               result = total;
-            }
-         }
-      }
-
-/* Free the individual centre arrays. */
-      cen1 = astFree( cen1 );
-      cen2 = astFree( cen2 );
-
-/* If we are setting a new centre... */
-   } else {
-
-/* If the new centre is supplied in the current Frame of the parent
-   Region structure, transform it into the base Frame (i.e. the Frames
-   represented by the component Regions). */
-      if( ifrm == AST__CURRENT ) {
-         if( cen ) {
-            bc = astRegTranPoint( this_region, cen, 1, 0 );
-         } else {
-            ncc = astGetNaxes( this_region );
-            tmp = astMalloc( sizeof( double)*(size_t)ncc );
-            if( astOK ) {
-               for( i = 0; i < ncc; i++ ) tmp[ i ] = ptr[ i ][ index ];
-            }
-            bc = astRegTranPoint( this_region, tmp, 1, 0 );
-            tmp = astFree( tmp );
-         }
- 
-      } else {
-         if( cen ) {
-            bc = cen;
-         } else {
-            bc = astMalloc( sizeof( double)*(size_t)ncb );
-            if( astOK ) {
-               for( i = 0; i < ncb; i++ ) bc[ i ] = ptr[ i ][ index ];
-            }
-         }
-      }
-
-/* Set the centre in the two component Regions in their current Frames. */
-      astRegCentre( reg1, bc, NULL, 0, AST__CURRENT );
-      astRegCentre( reg2, bc + nax1, NULL, 0, AST__CURRENT );
-
-/* Free resources. */
-     if( bc != cen ) bc = astFree( bc );       
-   }
-
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-
-/* Return the result. */
-   return result;
-}
-
-static int RegPins( AstRegion *this_region, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Prism.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Prism. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Prism "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Local variables: */
-   AstPointSet *ps1;            /* Points projected into 1st component Region */
-   AstPointSet *ps1b;           /* "ps1" in base Frame of 1st component Region */
-   AstPointSet *ps1b2;          /* "ps1b" transformed using 1st Region */
-   AstPointSet *ps2b2;          /* "ps2b" transformed using 2nd Region */
-   AstPointSet *ps2;            /* Points projected into 2nd component Region */
-   AstPointSet *ps2b;           /* "ps2" in base Frame of 2nd component Region */
-   AstPrism *this;              /* Pointer to the Prism structure. */
-   AstRegion *reg1;             /* Pointer to first component Region */
-   AstRegion *reg2;             /* Pointer to second component Region */
-   AstRegion *unc1;             /* Base Frame uncertainty in 1st component Region */
-   AstRegion *unc2;             /* Base Frame uncertainty in 2nd component Region */
-   double **ptr1b2;             /* Pointer to axis values in "ps1b2" */
-   double **ptr2b2;             /* Pointer to axis values in "ps2b2" */
-   int *mask1;                  /* Mask for first component boundary */
-   int *mask2;                  /* Mask for second component boundary */
-   int cl1;                     /* Original Closed flag for reg1 */
-   int cl2;                     /* Original Closed flag for reg2 */
-   int i;                       /* Point index */
-   int j;                       /* Axis index */
-   int nax1;                    /* Number of axes in first component Region */
-   int nax2;                    /* Number of axes in second component Region */
-   int np;                      /* Number of points in supplied PointSet */
-   int on;                      /* Is this point on the Prism boundary? */
-   int result;                  /* Returned flag */
-
-/* Initialise */
-   result = 0;
-   if( mask ) *mask = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;
-
-/* Get pointers to the two component Regions. */
-   reg1 = this->region1;
-   reg2 = this->region2;
-
-/* Temporarily ensure the components are closed. */
-   cl1 = astTestClosed( reg1 ) ? astGetClosed( reg1 ) : INT_MAX;
-   cl2 = astTestClosed( reg2 ) ? astGetClosed( reg2 ) : INT_MAX;
-   astSetClosed( reg1, cl1 );
-   astSetClosed( reg2, cl2 );
-
-/* A point in the coordinate system represented by the Prism is on the 
-   boundary of the Prism if:
-   1) it is on the boundary of one of the coomponent Regions AND
-   2) it is on or within the boundary of the other component Region.
-
-   First look for points on the boundary of the first component Region. 
-   Create a PointSet holding just the axes from the supplied PointSet
-   which relate to the first component Region. */
-   np = astGetNpoint( pset );
-   nax1 = astGetNaxes( reg1 );
-   ps1 = astPointSet( np, nax1, "", status );
-   astSetSubPoints( pset, 0, 0, ps1 );
-
-/* Get a mask which indicates if each supplied point is on or off the 
-   boundary of the first component Region. astRegPins expects its "pset"
-   argument to contain positions in the base Frame of the Region, so
-   we must first transform the supplied points into the base Frame of
-   "reg1". We must also get the uncertainty in the base Frame of the
-   component Region. */
-   ps1b = astRegTransform( reg1, ps1, 0, NULL, NULL );
-   unc1 = astGetUncFrm( reg1, AST__BASE );
-   astRegPins( reg1, ps1b, unc1, &mask1 );
-
-/* Also determine which of the points are on or in the boundary by using
-   "reg1" as a Mapping to transform the supplied points. */
-   ps1b2 = astTransform( reg1, ps1b, 1, NULL );
-
-/* Do the same for the second component Region */
-   nax2 = astGetNaxes( reg2 );
-   ps2 = astPointSet( np, nax2, "", status );
-   astSetSubPoints( pset, 0, nax1, ps2 );
-   ps2b = astRegTransform( reg2, ps2, 0, NULL, NULL );
-   unc2 = astGetUncFrm( reg2, AST__BASE );
-   astRegPins( reg2, ps2b, unc2, &mask2 );
-   ps2b2 = astTransform( reg2, ps2b, 1, NULL );
-
-/* Get pointers to the data in all the relevant PointSets. */
-   ptr1b2 = astGetPoints( ps1b2 );
-   ptr2b2 = astGetPoints( ps2b2 );
-
-/* Check pointers can be dereferenced safely. */
-   if( astOK ) {
-
-/* Assume all points are on the boundary of the Prism. */
-      result = 1;
-
-/* Check each point. */
-      for( i = 0; i < np; i++ ) {
-
-/* Assume this point is on the boundary of the Prism. */
-         on = 1;
-
-/* If this point is on the boundary of both component Regions, it is on
-   the boundary of the Prism. If it is on the boundary of the first
-   component Region but not on the boundary of the second, then it is
-   still on the boundary of the Prism if it is within the volume
-   reporesented by the second. */
-         if( mask1[ i ] ) {
-            if( !mask2[ i ] ) {
-               for( j = 0; j < nax2; j++ ) {
-                  if( ptr2b2[ j ][ i ] == AST__BAD ) {
-                     on = 0;
-                     break;
-                  }
-               }
-            }
-                  
-/* If this point is on the boundary of the second component Region but
-   not the first, it is on the boundary of the Prism if it is within the 
-   volume reporesented by the first. */
-         } else {
-            if( mask2[ i ] ) {
-               for( j = 0; j < nax1; j++ ) {
-                  if( ptr1b2[ j ][ i ] == AST__BAD ) {
-                     on = 0;
-                     break;
-                  }
-               }
-
-/* If this point is on the boundary of neither component Region, it is not
-   on the boundary of the Prism. */
-            } else {
-               on = 0;
-            }
-         }
-
-/* Use "mask1" to return the Prism's mask. Clear the returned flag if
-   this point is not on the boundary of the Prism. */
-         mask1[ i ] = on;
-         if( !on ) result = 0;
-      }
-   }
-
-/* Re-instate the original values of the Closed attribute for the
-   component Regions. */
-   if( cl1 == INT_MAX ) {
-      astClearClosed( reg1 );
-   } else {
-      astSetClosed( reg1, cl1 );
-   }
-   if( cl2 == INT_MAX ) {
-      astClearClosed( reg2 );
-   } else {
-      astSetClosed( reg2, cl2 );
-   }
-
-/* Return "mask1" as the Prism's mask if required. Otherwise free it. */
-   if( mask ) {
-      *mask = mask1;
-   } else {
-      mask1 = astFree( mask1 );
-   }
-
-/* Free other resources */
-   mask2 = astFree( mask2 );
-   ps1 = astAnnul( ps1 );
-   ps1b = astAnnul( ps1b );
-   ps1b2 = astAnnul( ps1b2 );
-   ps2 = astAnnul( ps2 );
-   unc1 = astAnnul( unc1 );
-   ps2b = astAnnul( ps2b );
-   ps2b2 = astAnnul( ps2b2 );
-   unc2 = astAnnul( unc2 );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) {
-      result = 0;
-      if( mask ) *mask = astAnnul( *mask );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void RegClearAttrib( AstRegion *this_region, const char *attrib, 
-                            char **base_attrib, int *status ) {
-/*
-*  Name:
-*     RegClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     void RegClearAttrib( AstRegion *this, const char *attrib, 
-*                          char **base_attrib, int *status ) 
-
-*  Class Membership:
-*     Prism member function (over-rides the astRegClearAttrib method 
-*     inherited from the Region class).
-
-*  Description:
-*     This function clears the value of a named attribute in both the base 
-*     and current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     attrib
-*        Pointer to a null terminated string holding the attribute name.
-*        NOTE, IT SHOULD BE ENTIRELY LOWER CASE. 
-*     base_attrib
-*        Address of a location at which to return a pointer to the null 
-*        terminated string holding the attribute name which was cleared in 
-*        the base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied attribute if the supplied attribute contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPrism *this; 
-   AstRegion *creg;
-   char *batt;
-   char buf1[ 100 ];
-   char buf2[ 255 ];
-   int axis;
-   int len;
-   int nax1;
-   int nc;
-   int rep;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;
-
-/* Use the RegClearAttrib method inherited from the parent class to clear the 
-   attribute in the current and base Frames in the FrameSet encapsulated by 
-   the parent Region structure. */
-   (*parent_regclearattrib)( this_region, attrib, &batt, status );
-
-/* We now propagate the setting down to the component Regions. The current 
-   Frames in the component Regions together form a CmpFrame which is 
-   equivalent to the base Frame in the parent FrameSet. Switch off error 
-   reporting whilst we apply the setting to the component Regions. */
-   rep = astReporting( 0 );
-
-/* If the setting which was applied to the base Frame of the parent FrameSet
-   is qualified by an axis index, modify the axis index to refer to component 
-   Region which defines the axis. First parse the base Frame attribute setting 
-   to locate any axis index. */
-   len = strlen( batt );
-   if( nc = 0, ( 2 == astSscanf( batt, "%[^(](%d) %n", buf1, &axis, 
-                                 &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
-      axis--;
-
-/* Get a pointer to the component Region containing the specified axis, and
-   create a new setting with the same attribute name but with the axis index
-   appropriate to the component Region which defines the axis. */
-      nax1 = astGetNaxes( this->region1 );
-      if( axis < nax1 ) {
-         creg = this->region1;
-      } else {
-         creg = this->region2;
-         axis -= nax1;
-      }
-      sprintf( buf2, "%s(%d)", buf1, axis + 1 );
-
-/* Apply the setting to the relevant component Region. */
-      astRegClearAttrib( creg, buf2, NULL );
-
-/* If the setting is not qualified by an axis index, apply it to both
-   component Regions. */
-   } else {
-      astRegClearAttrib( this->region1, batt, NULL );
-      astRegClearAttrib( this->region2, batt, NULL );
-   }
-
-/* Annul the error if the attribute was not recognised by the component
-   Regions. Then switch error reporting back on. */
-   if( astStatus == AST__BADAT ) astClearStatus;
-   astReporting( rep );
-
-/* If required, return the base Frame setting string. Otherwise free it. */
-   if( base_attrib ) {
-      *base_attrib = batt;
-   } else {
-      batt = astFree( batt );
-   }
-
-}
-
-static void RegSetAttrib( AstRegion *this_region, const char *setting, 
-                          char **base_setting, int *status ) {
-/*
-*  Name:
-*     RegSetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     void RegSetAttrib( AstRegion *this, const char *setting, 
-*                        char **base_setting, int *status )
-
-*  Class Membership:
-*     Prism method (over-rides the astRegSetAttrib method inherited from
-*     the Region class).
-
-*  Description:
-*     This function assigns an attribute value to both the base and
-*     current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     setting
-*        Pointer to a null terminated attribute setting string. NOTE, IT 
-*        SHOULD BE ENTIRELY LOWER CASE. The supplied string will be 
-*        interpreted using the public interpretation implemented by
-*        astSetAttrib. This can be different to the interpretation of the 
-*        protected accessor functions. For instance, the public
-*        interpretation of an unqualified floating point value for the 
-*        Epoch attribute is to interpet the value as a gregorian year,
-*        but the protected interpretation is to interpret the value as an 
-*        MJD.
-*     base_setting
-*        Address of a location at which to return a pointer to the null 
-*        terminated attribute setting string which was applied to the
-*        base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied setting if the supplied setting contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstPrism *this; 
-   AstRegion *creg;
-   char *bset;
-   char buf1[ 100 ];
-   char buf2[ 255 ];
-   int axis;
-   int len;
-   int nax1;
-   int nc;
-   int rep;
-   int value;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Prism structure. */
-   this = (AstPrism *) this_region;
-
-/* Use the RegSetAttrib method inherited from the parent class to apply the 
-   setting to the current and base Frames in the FrameSet encapsulated by the 
-   parent Region structure. */
-   (*parent_regsetattrib)( this_region, setting, &bset, status );
-
-/* We now propagate the setting down to the component Regions. The current 
-   Frames in the component Regions together form a CmpFrame which is 
-   equivalent to the base Frame in the parent FrameSet. Switch off error 
-   reporting whilst we apply the setting to the component Regions. */
-   rep = astReporting( 0 );
-
-/* If the setting which was applied to the base Frame of the parent FrameSet
-   is qualified by an axis index, modify the axis index to refer to component 
-   Region which defines the axis. First parse the base Frame attribute setting 
-   to locate any axis index. */
-   len = strlen( bset );
-   if( nc = 0, ( 2 == astSscanf( bset, "%[^(](%d)= %n%*s %n", buf1, &axis, 
-                                 &value, &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
-      axis--;
-
-/* Get a pointer to the component Region containing the specified axis, and
-   create a new setting with the same attribute name but with the axis index
-   appropriate to the component Region which defines the axis. */
-      nax1 = astGetNaxes( this->region1 );
-      if( axis < nax1 ) {
-         creg = this->region1;
-      } else {
-         creg = this->region2;
-         axis -= nax1;
-      }
-      sprintf( buf2, "%s(%d)=%s", buf1, axis + 1, bset + value );
-
-/* Apply the setting to the relevant component Region. */
-      astRegSetAttrib( creg, buf2, NULL );
-
-/* If the setting is not qualified by an axis index, apply it to both
-   component Regions. */
-   } else {
-      astRegSetAttrib( this->region1, bset, NULL );
-      astRegSetAttrib( this->region2, bset, NULL );
-   }
-
-/* Annul the error if the attribute was not recognised by the component
-   Regions. Then switch error reporting back on. */
-   if( astStatus == AST__BADAT ) astClearStatus;
-   astReporting( rep );
-
-/* If required, return the base Frame setting string. Otherwise free it. */
-   if( base_setting ) {
-      *base_setting = bset;
-   } else {
-      bset = astFree( bset );
-   }
-
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Prism method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;         /* Frame containing required axes */
-   AstRegion *creg;        /* Pointer to component Region structure */
-   int *axes;              /* Pointer to array of axis indices */
-   int i;                  /* Loop count */
-   int nax1;               /* No.of axes in 1st component Frame */
-   int nax2;               /* No.of axes in 2nd component Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* If either component Region has a dummy FrameSet use this method
-   recursively to give them a FrameSet containing the corresponding axes
-   from the supplied Frame. */
-   creg = ((AstPrism *) this_region )->region1;
-   if( creg ) {
-      nax1 = astGetNaxes( creg );
-      if( !astGetRegionFS( creg ) ) {
-         axes = astMalloc( sizeof( int )*(size_t) nax1 );
-         if( astOK ) for( i = 0; i < nax1; i++ ) axes[ i ] = i;
-         cfrm = astPickAxes( frm, nax1, axes, NULL );
-         astSetRegFS( creg, cfrm );
-         axes = astFree( axes );
-         cfrm = astAnnul( cfrm );
-      }
-
-   } else {
-      nax1 = 0;
-   }
-
-   creg = ((AstPrism *) this_region )->region2;
-   if( creg && !astGetRegionFS( creg ) ) {
-      nax2 = astGetNaxes( creg );
-      axes = astMalloc( sizeof( int )*(size_t) nax2 );
-      if( astOK ) for( i = 0; i < nax2; i++ ) axes[ i ] = nax1 + i;
-      cfrm = astPickAxes( frm, nax2, axes, NULL );
-      astSetRegFS( creg, cfrm );
-      axes = astFree( axes );
-      cfrm = astAnnul( cfrm );
-   }
-
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Prism method (over-rides the astSimplify method inherited from
-*     the Region class).
-
-*  Description:
-*     This function simplifies a Prism to eliminate redundant
-*     computational steps, or to merge separate steps which can be
-*     performed more efficiently in a single operation.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new pointer to the (possibly simplified) Region.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-
-*  Deficiencies:
-*     - Currently, this function does not attempt to map the component
-*     Regions into the current Frame of the parent Region structure.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Current Frame */
-   AstFrame *newfrm1;            /* Current Frame axes for reg1 */
-   AstFrame *newfrm2;            /* Current Frame axes for reg2 */
-   AstFrameSet *fs;              /* Parent FrameSet */
-   AstMapping *bcmap;            /* Base->current Mapping */
-   AstMapping *nmap1;            /* Reg1->current Mapping */
-   AstMapping *map1;             /* First component Region from a CmpMap */
-   AstMapping *map2;             /* Second component Region from a CmpMap */
-   int series;                   /* Apply component Mappings in series? */
-   int invert1;                  /* Use inverted first component Mapping? */
-   int invert2;                  /* Use inverted second component Mapping? */
-   AstMapping *nmap2;            /* Reg2->current Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstCmpMap *cmpmap;            /* Result pointer to return */
-   AstMapping *smap;             /* Simplified CmpMap */
-   AstRegion *new2;              /* New simplified Region */
-   AstRegion *new;               /* New Region */
-   AstRegion *newreg1;           /* Reg1 mapped into current Frame */
-   AstRegion *newreg2;           /* Reg2 mapped into current Frame */
-   AstRegion *reg1;              /* First component Region */
-   AstRegion *reg2;              /* Second component Region */
-   AstRegion *reg;               /* This Region */
-   AstRegion *snewreg1;          /* Simplified newreg1 */
-   AstRegion *snewreg2;          /* Simplified newreg2 */
-   AstRegion *unc;               /* Uncertainty Region from supplied Prism */
-   int *axin;                    /* Indices of Mapping inputs to use */
-   int *axout1;                  /* Indices of cfrm axes corresponding to reg1 */
-   int *axout2;                  /* Indices of cfrm axes corresponding to reg2 */
-   int *perm;                    /* Axis permutation array */
-   int i;                        /* Loop count */
-   int nax1;                     /* Number of axes in first component Region */
-   int nax2;                     /* Number of axes in second component Region */
-   int naxt;                     /* Total number of axes in current Frame */
-   int naxout1;                  /* Number of current axes for reg1 */
-   int naxout2;                  /* Number of current axes for reg2 */
-   int neg;                      /* Negated flag for supplied Prism */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Region structure */
-   reg = (AstRegion *) this_mapping;
-
-/* Get the component Regions, and the Negated flag for the Prism. */
-   GetRegions( (AstPrism *) this_mapping, &reg1, &reg2, &neg, status );
-
-/* The above Regions describe areas within the base Frame of the FrameSet 
-   encapsulated by the parent Region structure. Get the current Frame in
-   this FrameSet and the base->current Mapping. */
-   fs = reg->frameset;
-   cfrm = astGetFrame( fs, AST__CURRENT );
-   bcmap = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Combine the two Regions into a parallel CmpMap (this uses the fact
-   that a Region is a type of Mapping). Then simplify the CmpMap. This
-   will result in the astMapMerge methods defined by sub-classes of 
-   Regions being used to merge adjacent regions. */
-   cmpmap = astCmpMap( reg1, reg2, 0, "", status );
-   smap = astSimplify( cmpmap );
-   cmpmap = astAnnul( cmpmap );
-
-/* Initially, assume we cannot form a new Region from the simplified
-   CmpMap. */
-   new = NULL;
-
-/* If the result is a region, use it. */
-   if( astIsARegion( smap ) ) {
-      new = astClone( smap );
-
-/* If the result is a parallel CmpMap, get its two components and check
-   they are Regions. If so, and if they are not the same as the original
-   two component Regions, form a new Prism from them. */
-   } else if( astIsACmpMap( smap ) ) {
-      astDecompose( smap, &map1, &map2, &series, &invert1, &invert2  );
-      if( ! series && astIsARegion( map1 ) && astIsARegion( map2 ) ) {
-         if( (AstRegion *) map1 != reg1 || (AstRegion *) map2 != reg2 ) {
-            new = (AstRegion *) astPrism( (AstRegion *) map1, 
-                                          (AstRegion *) map2, "", status );
-         }
-      }
-
-/* Free resources */
-      map1 = astAnnul( map1 );
-      map2 = astAnnul( map2 );
-   }
-
-   smap = astAnnul( smap );
-
-/* If the above produced a simplified Region, map it into the current Frame 
-   of "this" and simplify it. */
-   if( new ) {
-      new2 = astMapRegion( new, bcmap, cfrm );
-      (void) astAnnul( new );
-      new = astSimplify( new2 );
-      new2 = astAnnul( new2 );
-
-/* If the above did not produced a result, try a different approach. */
-   } else {
-
-/* Get the number of axes in each component Region. */
-      nax1 = astGetNaxes( reg1 );
-      nax2 = astGetNaxes( reg2 );
-
-/* Use astMapSplit to see if the axes of the first component Region correspond
-   to a distinct set of axes within the current Frame. If this is the case, 
-   then a Mapping is returned by astMapSplit which  maps the axes of the first 
-   component Region into the corresponding current Frame axes. Also returned 
-   is a list of the axes within the current Frame which correspnd to the
-   axes of the first component Region. */
-      nmap1 = NULL;
-      axout1 = NULL;
-      axin = astMalloc( sizeof( int )*(size_t)nax1 );
-      if( astOK ) {
-         for( i = 0; i < nax1; i++ ) axin[ i ] = i;
-         axout1 = astMapSplit( bcmap, nax1, axin, &nmap1 );
-         axin = astFree( axin );
-      }
-   
-/* Do the same for the second component. */
-      nmap2 = NULL;
-      axout2 = NULL;
-      axin = astMalloc( sizeof( int )*(size_t)nax2 );
-      if( astOK ) {
-         for( i = 0; i < nax2; i++ ) axin[ i ] = i + nax1;
-         axout2 = astMapSplit( bcmap, nax2, axin, &nmap2 );
-         axin = astFree( axin );
-      }
-   
-/* Assume for the moment that the component Regions cannot be simplified.
-   In this case we will use a clone of the supplied Prism. */
-      new = astClone( this_mapping );
-
-/* Determine the number of outputs from these Mappings. */
-      if( nmap1 ){
-         naxout1 = astGetNout( nmap1 );
-      } else {
-         naxout1 = 0;
-      }
-      if( nmap2 ){
-         naxout2 = astGetNout( nmap2 );
-      } else {
-         naxout2 = 0;
-      }
-
-/* Determine the number of axes in the current Frame of the Prism. */
-      naxt = astGetNout( bcmap );
-
-/* If the second component does not contribute any axes to the total
-   Prism, we can ignore it. */
-      if( naxout1 == naxt && naxout2 == 0 ) {
-         newfrm1 = astPickAxes( cfrm, naxout1, axout1, NULL );
-         newreg1 = astMapRegion( reg1, nmap1, newfrm1 );
-         (void) astAnnul( new );
-         new = astSimplify( newreg1 );      
-         if( neg ) astNegate( new );
-         perm = astMalloc( sizeof( int )*(size_t) ( naxout1 ) );
-         if( astOK ) {
-            for( i = 0; i < naxout1; i++ ) perm[ i ] = axout1[ i ];
-            astPermAxes( new, perm );
-            perm = astFree( perm );
-         }
-         newfrm1 = astAnnul( newfrm1 );
-         newreg1 = astAnnul( newreg1 );
-
-/* If the first component does not contribute any axes to the total
-   Prism, we can ignore it. */
-      } else if( naxout1 == 0 && naxout2 == naxt ) {
-         newfrm2 = astPickAxes( cfrm, naxout2, axout2, NULL );
-         newreg2 = astMapRegion( reg2, nmap2, newfrm2 );
-         (void) astAnnul( new );
-         new = astSimplify( newreg2 );      
-         if( neg ) astNegate( new );
-         perm = astMalloc( sizeof( int )*(size_t) ( naxout2 ) );
-         if( astOK ) {
-            for( i = 0; i < naxout2; i++ ) perm[ i ] = axout2[ i ];
-            astPermAxes( new, perm );
-            perm = astFree( perm );
-         }
-         newfrm2 = astAnnul( newfrm2 );
-         newreg2 = astAnnul( newreg2 );
-   
-/* If both component Regions correspond to a distinct subspace within the
-   current Frame, then we can try to express each component Region within
-   the current Frame. */
-      } else if( nmap1 && nmap2 ) {
-   
-/* Create a Frame representing the subspace of the current Frame which
-   corresponds to the axes of the first component Region. */
-         newfrm1 = astPickAxes( cfrm, naxout1, axout1, NULL );
-   
-/* Remap the first component Region so that it represents an area in this
-   subspace. */
-         newreg1 = astMapRegion( reg1, nmap1, newfrm1 );
-   
-/* Attempt to simplify the remapped Region. */
-         snewreg1 = astSimplify( newreg1 );      
-   
-/* Do the same for the second component Region. */
-         naxout2 = astGetNout( nmap2 );
-         newfrm2 = astPickAxes( cfrm, naxout2, axout2, NULL );
-         newreg2 = astMapRegion( reg2, nmap2, newfrm2 );
-         snewreg2 = astSimplify( newreg2 );      
-   
-/* If either component Region was simplified, create a new Prism from the 
-   simplified Regions. */
-         if( snewreg1 != newreg1 || snewreg2 != newreg2 ) {
-            (void) astAnnul( new );
-            new = (AstRegion *) astPrism( snewreg1, snewreg2, "", status );
-   
-/* Ensure the new Prism has the same Negated attribute as the original. */
-            if( neg ) astNegate( new );
-   
-/* Ensure that the new Prism has the same axis order as the original
-   current Frame. */
-            perm = astMalloc( sizeof( int )*(size_t) ( naxout1 + naxout2 ) );
-            if( astOK ) {
-               for( i = 0; i < naxout1; i++ ) perm[ i ] = axout1[ i ];
-               for( ; i < naxout1 + naxout2; i++ ) perm[ i ] = axout2[ i - naxout1 ];
-               astPermAxes( new, perm );
-               perm = astFree( perm );
-            }
-         }
-   
-/* Free resources. */
-         newfrm1 = astAnnul( newfrm1 );
-         newfrm2 = astAnnul( newfrm2 );
-         newreg1 = astAnnul( newreg1 );
-         newreg2 = astAnnul( newreg2 );
-         snewreg1 = astAnnul( snewreg1 );
-         snewreg2 = astAnnul( snewreg2 );
-      }
-   
-/* Free resources. */
-      if( axout1 ) axout1 = astFree( axout1 );
-      if( axout2 ) axout2 = astFree( axout2 );
-      if( nmap1 ) nmap1 = astAnnul( nmap1 );
-      if( nmap2 ) nmap2 = astAnnul( nmap2 );
-   }
-
-/* If we have created a new Region, ensure any user-supplied uncertainty 
-   that has been stored explicitly with the supplied Prism is passed on
-   to the new Region. */
-   if( new ) {
-      if( astTestUnc( reg ) ) {
-         unc = astGetUnc( reg, 0 );
-         astSetUnc( new, unc );
-      }
-
-/* Now invoke the parent Simplify method inherited from the Region class. 
-   This will simplify the encapsulated FrameSet and uncertainty Region. */
-      result = (*parent_simplify)( (AstMapping *) new, status );
-      new = astAnnul( new );
-   }
-   
-/* Free resources. */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-   cfrm = astAnnul( cfrm );
-   bcmap = astAnnul( bcmap );
-
-/* If any simplification could be performed, copy Region attributes from 
-   the supplied Region to the returned Region, and return a pointer to it. */
-   if( result != this_mapping ) astRegOverlay( result, (AstRegion *) this_mapping, 0 );
-
-/* If an error occurred, annul the returned Mapping. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Prism to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Prism member function (over-rides the astTransform method inherited
-*     from the Region class).
-
-*  Description:
-*     This function takes a Prism and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Region.
-*     This implies applying each of the Prism's component Regions in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the Prism being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstCmpMap *map;               /* CmpMap containing component Regions */
-   AstPointSet *psb;             /* Pointer to base Frame PointSet */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstPrism *this;               /* Pointer to the Prism structure */
-   AstRegion *reg1;              /* Pointer to first component Region */
-   AstRegion *reg2;              /* Pointer to second component Region */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double **ptrb;                /* Pointer to base Frame axis values */
-   int coord;                    /* Zero-based index for coordinates */
-   int good;                     /* Is the point inside the Prism? */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int ncoord_tmp;               /* No. of coordinates per base Frame point */
-   int neg;                      /* Has Prism been negated? */
-   int npoint;                   /* No. of points */
-   int point;                    /* Loop counter for points */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a Pointer to the Prism structure */
-   this = (AstPrism *) this_mapping;
-
-/* Get the component Regions, and the Negated value for the Prism. */
-   GetRegions( this, &reg1, &reg2, &neg, status );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary, containing 
-   a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet in the parent Region structure to 
-   transform the supplied positions from the current Frame in the 
-   encapsulated FrameSet (the Frame represented by the Prism), to the 
-   base Frame (the Frame in which the component Regions are defined). Note,
-   the returned pointer may be a clone of the "in" pointer, and so we 
-   must be carefull not to modify the contents of the returned PointSet. */
-   pset_tmp = astRegTransform( this, in, 0, NULL, NULL );
-
-/* Form a parallel CmpMap from the two component Regions. */
-   map = astCmpMap( reg1, reg2, 0, "", status );
-
-/* Apply the Mapping to the PointSet containing positions in the base Frame 
-   of the parent Region structure (which is the same as the combination of
-   the current Frames of the component Regions). */
-   psb = astTransform( map, pset_tmp, 1, NULL );
-
-/* Annul the Mapping pointer. */
-   map = astAnnul( map );
-
-/* Determine the numbers of points and coordinates per point for these base
-   Frame PointSets and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-   npoint = astGetNpoint( pset_tmp );
-   ncoord_tmp = astGetNcoord( pset_tmp );
-   ptrb = astGetPoints( psb );      
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-      for ( point = 0; point < npoint; point++ ) {
-         good = 1;
-
-         for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-            if( ptrb[ coord ][ point ] == AST__BAD ){
-               good = 0;
-               break;
-            }
-         }      
-
-         if( good == neg ) {
-            for ( coord = 0; coord < ncoord_out; coord++ ) {
-               ptr_out[ coord ][ point ] = AST__BAD;
-            }
-         }      
-      }
-   }
-
-/* Free resources. */
-   reg1 = astAnnul( reg1 );
-   reg2 = astAnnul( reg2 );
-   psb = astAnnul( psb );
-   pset_tmp = astAnnul( pset_tmp );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Prism objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Prism objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Regions within the Prism.
-*/
-
-/* Local Variables: */
-   AstPrism *in;                /* Pointer to input Prism */
-   AstPrism *out;               /* Pointer to output Prism */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Prisms. */
-   in = (AstPrism *) objin;
-   out = (AstPrism *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Regions from the output Prism. */
-   out->region1 = NULL;
-   out->region2 = NULL;
-
-/* Make copies of these Regions and store pointers to them in the output
-   Prism structure. */
-   out->region1 = astCopy( in->region1 );
-   out->region2 = astCopy( in->region2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Prism objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Prism objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstPrism *this;              /* Pointer to Prism */
-
-/* Obtain a pointer to the Prism structure. */
-   this = (AstPrism *) obj;
-
-/* Annul the pointers to the component Regions. */
-   this->region1 = astAnnul( this->region1 );
-   this->region2 = astAnnul( this->region2 );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Prism objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Prism class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Prism whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstPrism *this;               /* Pointer to the Prism structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Prism structure. */
-   this = (AstPrism *) this_object;
-
-/* Write out values representing the instance variables for the Prism
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* First Region. */
-/* -------------- */
-   astWriteObject( channel, "RegionA", 1, 1, this->region1,
-                   "First component Region" );
-
-/* Second Region. */
-/* --------------- */
-   astWriteObject( channel, "RegionB", 1, 1, this->region2,
-                   "Second component Region" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAPrism and astCheckPrism functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Prism,Region)
-astMAKE_CHECK(Prism)
-
-AstPrism *astPrism_( void *region1_void, void *region2_void, 
-                     const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astPrism
-
-*  Purpose:
-*     Create a Prism.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstPrism *astPrism( AstRegion *region1, AstRegion *region2, 
-*                         const char *options, ..., int *status )
-
-*  Class Membership:
-*     Prism constructor.
-
-*  Description:
-*     This function creates a new Prism and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     region1
-*        Pointer to the Region to be extruded.
-*     region2
-*        Pointer to the Region defining the extent of the extrusion.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new Prism. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new Prism.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic Prism constructor which is
-*     available via the protected interface to the Prism class.  A
-*     public interface is provided by the astPrismId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "region1" and "region2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPrism *new;                  /* Pointer to new Prism */
-   AstRegion *region1;             /* Pointer to first Region structure */
-   AstRegion *region2;             /* Pointer to second Region structure */
-   va_list args;                   /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Region structures provided. */
-   region1 = astCheckRegion( region1_void );
-   region2 = astCheckRegion( region2_void );
-   if ( astOK ) {
-
-/* Initialise the Prism, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitPrism( NULL, sizeof( AstPrism ), !class_init, 
-                          &class_vtab, "Prism", region1, region2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new Prism's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new Prism. */
-   return new;
-}
-
-AstPrism *astPrismId_( void *region1_void, void *region2_void, 
-                       const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astPrism
-f     AST_PRISM
-
-*  Purpose:
-*     Create a Prism.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "prism.h"
-c     AstPrism *astPrism( AstRegion *region1, AstRegion *region2, 
-c                         const char *options, ... )
-f     RESULT = AST_PRISM( REGION1, REGION2, OPTIONS, STATUS )
-
-*  Class Membership:
-*     Prism constructor.
-
-*  Description:
-*     This function creates a new Prism and optionally initialises
-*     its attributes.
-*
-*     A Prism is a Region which represents an extrusion of an existing Region 
-*     into one or more orthogonal dimensions (specified by another Region).
-*     If the Region to be extruded has N axes, and the Region defining the 
-*     extrusion has M axes, then the resulting Prism will have (M+N) axes. 
-*     A point is inside the Prism if the first N axis values correspond to 
-*     a point inside the Region being extruded, and the remaining M axis 
-*     values correspond to a point inside the Region defining the extrusion.
-*
-*     As an example, a cylinder can be represented by extruding an existing 
-*     Circle, using an Interval to define the extrusion. Ih this case, the
-*     Interval would have a single axis and would specify the upper and 
-*     lower limits of the cylinder along its length.
-
-*  Parameters:
-c     region1
-f     REGION1 = INTEGER (Given)
-*        Pointer to the Region to be extruded.
-c     region2
-f     REGION2 = INTEGER (Given)
-*        Pointer to the Region defining the extent of the extrusion.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new Prism. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new Prism. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astPrism()
-f     AST_PRISM = INTEGER
-*        A pointer to the new Prism.
-
-*  Notes:
-*     - Deep copies are taken of the supplied Regions. This means that
-*     any subsequent changes made to the component Regions using the 
-*     supplied pointers will have no effect on the Prism.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astPrism constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astPrism_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "region1" and "region2" parameters
-*     are of type (void *) and are converted from an ID value to a
-*     pointer and validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astPrism_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS              /* Pointer to thread-specific global data */
-   AstPrism *new;                  /* Pointer to new Prism */
-   AstRegion *region1;             /* Pointer to first Region structure */
-   AstRegion *region2;             /* Pointer to second Region structure */
-   int *status;                    /* Pointer to inherited status value */
-   va_list args;                   /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain the Region pointers from the ID's supplied and validate the
-   pointers to ensure they identify valid Regions. */
-   region1 = astVerifyRegion( astMakePointer( region1_void ) );
-   region2 = astVerifyRegion( astMakePointer( region2_void ) );
-   if ( astOK ) {
-
-/* Initialise the Prism, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitPrism( NULL, sizeof( AstPrism ), !class_init, 
-                          &class_vtab, "Prism", region1, region2 );
-
-/* If successful, note that the virtual function table has been initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new Prism's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new Prism. */
-   return astMakeId( new );
-}
-
-AstPrism *astInitPrism_( void *mem, size_t size, int init, AstPrismVtab *vtab,
-                         const char *name, AstRegion *region1, 
-                         AstRegion *region2, int *status ) {
-/*
-*+
-*  Name:
-*     astInitPrism
-
-*  Purpose:
-*     Initialise a Prism.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstPrism *astInitPrism_( void *mem, size_t size, int init,
-*                              AstPrismVtab *vtab, const char *name,
-*                              AstRegion *region1, AstRegion *region2 )
-
-*  Class Membership:
-*     Prism initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Prism object. It allocates memory (if necessary) to
-*     accommodate the Prism plus any additional data associated with the
-*     derived class. It then initialises a Prism structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a Prism at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Prism is to be initialised.
-*        This must be of sufficient size to accommodate the Prism data
-*        (sizeof(Prism)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Prism (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        Prism structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the Prism's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Prism.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     region1
-*        Pointer to the first Region.
-*     region2
-*        Pointer to the second Region.
-
-*  Returned Value:
-*     A pointer to the new Prism.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstPrism *new;                /* Pointer to new Prism */
-   AstFrame *frm1;               /* Frame encapsulated by 1st Region */
-   AstFrame *frm2;               /* Frame encapsulated by 2nd Region */
-   AstFrame *frm;                /* CmpFrame formed from frm1 and frm2 */
-   AstMapping *map;              /* Mapping between two supplied Regions */
-   AstRegion *reg1;              /* Copy of first supplied Region */
-   AstRegion *reg2;              /* Copy of second supplied Region */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitPrismVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-   reg2 = NULL;
-
-/* Take a copy of the two supplied Regions. */
-   reg1 = astCopy( region1 );
-   reg2 = astCopy( region2 );
-
-/* Form a CmpFrame representing the combined Frame of these two Regions. */
-   frm1 = astRegFrame( reg1 );
-   frm2 = astRegFrame( reg2 );
-   frm = (AstFrame *) astCmpFrame( frm1, frm2, "", status );
-   
-/* Initialise a Region structure (the parent class) as the first component
-   within the Prism structure, allocating memory if necessary. A NULL
-   PointSet is suppled as the two component Regions will perform the function
-   of defining the Region shape. The base Frame of the FrameSet in the
-   parent Region structure will be the CmpFrame formed from the two component 
-   Regions. */
-   if ( astOK ) {
-      new = (AstPrism *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                        name, frm, NULL, NULL );
-
-/* Initialise the Prism data. */
-/* --------------------------- */
-/* Store pointers to the component Regions. */
-      new->region1 = reg1;
-      new->region2 = reg2;
-
-/* If the base->current Mapping in the FrameSet within a component Region 
-   is a UnitMap, then the FrameSet does not need to be included in the
-   Dump of the new Prism. Set the RegionFS attribute of the component
-   Region to zero to flag this. */
-      map = astGetMapping( reg1->frameset, AST__BASE, AST__CURRENT );
-      if( astIsAUnitMap( map ) ) astSetRegionFS( reg1, 0 );
-      map = astAnnul( map );
-
-      map = astGetMapping( reg2->frameset, AST__BASE, AST__CURRENT );
-      if( astIsAUnitMap( map ) ) astSetRegionFS( reg2, 0 );
-      map = astAnnul( map );
-
-/* If an error occurred, clean up by annulling the Region pointers and
-   deleting the new object. */
-      if ( !astOK ) {
-         new->region1 = astAnnul( new->region1 );
-         new->region2 = astAnnul( new->region2 );
-         new = astDelete( new );
-      }
-   }
-
-/* Free resources */
-   frm = astAnnul( frm );
-   frm1 = astAnnul( frm1 );
-   frm2 = astAnnul( frm2 );
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstPrism *astLoadPrism_( void *mem, size_t size, AstPrismVtab *vtab, 
-                         const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadPrism
-
-*  Purpose:
-*     Load a Prism.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "prism.h"
-*     AstPrism *astLoadPrism( void *mem, size_t size, AstPrismVtab *vtab, 
-*                             const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Prism loader.
-
-*  Description:
-*     This function is provided to load a new Prism using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Prism structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Prism at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Prism is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Prism data (sizeof(Prism)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Prism (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Prism structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstPrism) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Prism. If this is NULL, a pointer to
-*        the (static) virtual function table for the Prism class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Prism" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Prism.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS      /* Pointer to thread-specific global data */
-   AstFrame *cfrm;         /* Frame containing required axes */
-   AstFrame *f1;           /* Base Frame in parent Region */
-   AstPrism *new;          /* Pointer to the new Prism */
-   AstRegion *creg;        /* Pointer to component Region */
-   int *axes;              /* Pointer to array of axis indices */
-   int i;                  /* Loop count */
-   int nax1;               /* No.of axes in 1st component Frame */
-   int nax2;               /* No.of axes in 2nd component Frame */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Prism. In this case the
-   Prism belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstPrism );
-      vtab = &class_vtab;
-      name = "Prism";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitPrismVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Prism. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Prism" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* First Region. */
-/* -------------- */
-      new->region1 = astReadObject( channel, "regiona", NULL );
-
-/* Second Region. */
-/* --------------- */
-      new->region2 = astReadObject( channel, "regionb", NULL );
-
-/* Either component Region may currently contain a dummy FrameSet rather than 
-   the correct FrameSet (see the Dump function for this class). In this case, 
-   the correct FrameSet will have copies of selected axes from the base Frame 
-   of the new Prism as both its current and base Frames, and these are 
-   connected by a UnitMap (this is equivalent to a FrameSet containing a 
-   single Frame). However if the new Prism being loaded has itself got a dummy 
-   FrameSet, then we do not do this since we do not yet know what the correct 
-   FrameSet is. In this case we wait until the parent Region invokes the 
-   astSetRegFS method on the new Prism. */
-      if( !astRegDummyFS( new ) ) {
-         f1 = astGetFrame( ((AstRegion *) new)->frameset, AST__BASE );
-
-         creg = new->region1;
-         nax1 = astGetNaxes( creg );
-         if( astRegDummyFS( creg ) ) {
-            axes = astMalloc( sizeof( int )*(size_t) nax1 );
-            if( astOK ) for( i = 0; i < nax1; i++ ) axes[ i ] = i;
-            cfrm = astPickAxes( f1, nax1, axes, NULL );
-            astSetRegFS( creg, cfrm );
-            axes = astFree( axes );
-            cfrm = astAnnul( cfrm );
-         }
-
-         creg = new->region2;
-         if( astRegDummyFS( creg ) ) {
-            nax2 = astGetNaxes( creg );
-            axes = astMalloc( sizeof( int )*(size_t) nax2 );
-            if( astOK ) for( i = 0; i < nax2; i++ ) axes[ i ] = nax1 + i;
-            cfrm = astPickAxes( f1, nax2, axes, NULL );
-            astSetRegFS( creg, cfrm );
-            axes = astFree( axes );
-            cfrm = astAnnul( cfrm );
-         }
-
-         f1 = astAnnul( f1 );
-      }
-
-/* If an error occurred, clean up by deleting the new Prism. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Prism pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* None. */
-
-
-
diff --git a/ast-5.3-1/prism.h b/ast-5.3-1/prism.h
deleted file mode 100644
index bbdf41b..0000000
--- a/ast-5.3-1/prism.h
+++ /dev/null
@@ -1,238 +0,0 @@
-#if !defined( PRISM_INCLUDED ) /* Include this file only once */
-#define PRISM_INCLUDED
-/*
-*+
-*  Name:
-*     prism.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Prism class.
-
-*  Invocation:
-*     #include "prism.h"
-
-*  Description:
-*     This include file defines the interface to the Prism class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Prism class implement a Region which represents an extrusion of
-*     another Region into higher dimensions. For instance, a Prism can be
-*     used to represent a cylinder, which is an extrusion of a circle into a
-*     3rd dimension.
-
-*  Inheritance:
-*     The Prism class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     17-DEC-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* Prism structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-typedef struct AstPrism {
-
-/* Attributes inherited from the parent class. */
-   AstRegion region;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstRegion *region1;           /* First component Region */
-   AstRegion *region2;           /* Second component Region */
-
-} AstPrism;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstPrismVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstPrismVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstPrismGlobals {
-   AstPrismVtab Class_Vtab;
-   int Class_Init;
-} AstPrismGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitPrismGlobals_( AstPrismGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Prism)          /* Check class membership */
-astPROTO_ISA(Prism)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstPrism *astPrism_( void *, void *, const char *, int *, ...);
-#else
-AstPrism *astPrismId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstPrism *astInitPrism_( void *, size_t, int, AstPrismVtab *,
-                     const char *, AstRegion *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitPrismVtab_( AstPrismVtab *, const char *, int * );
-
-/* Loader. */
-AstPrism *astLoadPrism_( void *, size_t, AstPrismVtab *,
-                         const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-AstRegion *astConvertToPrism_( AstRegion *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckPrism(this) astINVOKE_CHECK(Prism,this,0)
-#define astVerifyPrism(this) astINVOKE_CHECK(Prism,this,1)
-
-/* Test class membership. */
-#define astIsAPrism(this) astINVOKE_ISA(Prism,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astPrism astINVOKE(F,astPrism_)
-#else
-#define astPrism astINVOKE(F,astPrismId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitPrism(mem,size,init,vtab,name,reg1,reg2) \
-astINVOKE(O,astInitPrism_(mem,size,init,vtab,name,reg1,reg2,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitPrismVtab(vtab,name) astINVOKE(V,astInitPrismVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadPrism(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadPrism_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckPrism to validate Prism pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astConvertToPrism(this) astConvertToPrism_(this,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/proj.c b/ast-5.3-1/proj.c
deleted file mode 100644
index 2d57e70..0000000
--- a/ast-5.3-1/proj.c
+++ /dev/null
@@ -1,4589 +0,0 @@
-/*============================================================================
-*
-*   WCSLIB - an implementation of the FITS WCS proposal.
-*   Copyright (C) 1995-2002, Mark Calabretta
-*
-*   This library is free software; you can redistribute it and/or modify it
-*   under the terms of the GNU Library General Public License as published
-*   by the Free Software Foundation; either version 2 of the License, or (at
-*   your option) any later version.
-*
-*   This library is distributed in the hope that it will be useful, but
-*   WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
-*   General Public License for more details.
-*
-*   You should have received a copy of the GNU Library General Public License
-*   along with this library; if not, write to the Free Software Foundation,
-*   Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-*   Correspondence concerning WCSLIB may be directed to:
-*      Internet email: mcalabre at atnf.csiro.au
-*      Postal address: Dr. Mark Calabretta,
-*                      Australia Telescope National Facility,
-*                      P.O. Box 76,
-*                      Epping, NSW, 2121,
-*                      AUSTRALIA
-*
-*
-*=============================================================================
-*
-*  This version of proj.c is based on the version in wcslib-2.9, but has
-*  been modified in the following ways by the Starlink project (e-mail: 
-*  ussc at star.rl.ac.uk):
-*     -  The copysign macro is now always defined within this file
-*        instead of only being defined if the COPYSIGN macro has previously 
-*        been defined.
-*     -  Sine values which are slightly larger than 1.0 are now treated 
-*        as 1.0 in function astCYPrev.
-*     -  The maximum number of projection parameters has been changed from 
-*        10 to 100.
-*     -  The maximum number of projection parameters is given by the 
-*        WCSLIB_MXPAR macro (defined in proj.h) instead of being hard-wired.
-*     -  The names of all functions and structures have been chanegd to avoid 
-*        clashes with wcslib. This involves adding "Ast" or "ast" at the
-*        front and changing the capitalisation.
-*     -  Include string.h (for strcpy and strcmp prototypes).
-*     -  Include stdlib.h (for abs prototype).
-*     -  Comment out declarations of npcode and pcodes variables (they
-*        are not needed by AST) in order to avoid clash with similar names
-*        in other modules imported as part of other software systems (e.g. 
-*        SkyCat).
-*     -  astZPNfwd: Loop from prj->n to zero, not from MAXPAR to zero.
-*     -  astZPNfwd: Only return "2" if prj->n is larger than 2.
-*     -  Lots of variables are initialised to null values in order to
-*        avoid "use of uninitialised variable" messages from compilers which 
-*        are not clever enough to work out that the uninitialised variable is 
-*        not in fact ever used. 
-*     -  Use dynamic rather than static memory for the parameter arrays in 
-*        the AstPrjPrm structure.Override astGetObjSize. This is to
-*        reduce the in-memory size of a WcsMap.
-*     -  Healpix projection added.
-
-*=============================================================================
-*
-*   C implementation of the spherical map projections recognized by the FITS
-*   "World Coordinate System" (WCS) convention.
-*
-*   Summary of routines
-*   -------------------
-*   Each projection is implemented via separate functions for the forward,
-*   *fwd(), and reverse, *rev(), transformation.
-*
-*   Initialization routines, *set(), compute intermediate values from the
-*   projection parameters but need not be called explicitly - see the
-*   explanation of prj.flag below.
-*
-*      astPRJset astPRJfwd astPRJrev   Driver routines (see below).
-*
-*      astAZPset astAZPfwd astAZPrev   AZP: zenithal/azimuthal perspective
-*      astSZPset astSZPfwd astSZPrev   SZP: slant zenithal perspective
-*      astTANset astTANfwd astTANrev   TAN: gnomonic
-*      astSTGset astSTGfwd astSTGrev   STG: stereographic
-*      astSINset astSINfwd astSINrev   SIN: orthographic/synthesis
-*      astARCset astARCfwd astARCrev   ARC: zenithal/azimuthal equidistant
-*      astZPNset astZPNfwd astZPNrev   ZPN: zenithal/azimuthal polynomial
-*      astZEAset astZEAfwd astZEArev   ZEA: zenithal/azimuthal equal area
-*      astAIRset astAIRfwd astAIRrev   AIR: Airy
-*      astCYPset astCYPfwd astCYPrev   CYP: cylindrical perspective
-*      astCEAset astCEAfwd astCEArev   CEA: cylindrical equal area
-*      astCARset astCARfwd astCARrev   CAR: Cartesian
-*      astMERset astMERfwd astMERrev   MER: Mercator
-*      astSFLset astSFLfwd astSFLrev   SFL: Sanson-Flamsteed
-*      astPARset astPARfwd astPARrev   PAR: parabolic
-*      astMOLset astMOLfwd astMOLrev   MOL: Mollweide
-*      astAITset astAITfwd astAITrev   AIT: Hammer-Aitoff
-*      astCOPset astCOPfwd astCOPrev   COP: conic perspective
-*      astCOEset astCOEfwd astCOErev   COE: conic equal area
-*      astCODset astCODfwd astCODrev   COD: conic equidistant
-*      astCOOset astCOOfwd astCOOrev   COO: conic orthomorphic
-*      astBONset astBONfwd astBONrev   BON: Bonne
-*      astPCOset astPCOfwd astPCOrev   PCO: polyconic
-*      astTSCset astTSCfwd astTSCrev   TSC: tangential spherical cube
-*      astCSCset astCSCfwd astCSCrev   CSC: COBE quadrilateralized spherical cube
-*      astQSCset astQSCfwd astQSCrev   QSC: quadrilateralized spherical cube
-*      astHPXset astHPXfwd astHPXrev   HPX: HEALPix projection
-*
-*
-*   Driver routines; astPRJset(), astPRJfwd() & astPRJrev()
-*   ----------------------------------------------
-*   A set of driver routines are available for use as a generic interface to
-*   the specific projection routines.  The interfaces to astPRJfwd() and astPRJrev()
-*   are the same as those of the forward and reverse transformation routines
-*   for the specific projections (see below).
-*
-*   The interface to astPRJset() differs slightly from that of the initialization
-*   routines for the specific projections and unlike them it must be invoked
-*   explicitly to use astPRJfwd() and astPRJrev().
-*
-*   Given:
-*      pcode[4] const char
-*                        WCS projection code.
-*
-*   Given and/or returned:
-*      prj      AstPrjPrm*  Projection parameters (see below).
-*
-*   Function return value:
-*               int      Error status
-*                           0: Success.
-*
-*
-*   Initialization routine; *set()
-*   ------------------------------
-*   Initializes members of a AstPrjPrm data structure which hold intermediate
-*   values.  Note that this routine need not be called directly; it will be
-*   invoked by astPRJfwd() and astPRJrev() if the "flag" structure member is
-*   anything other than a predefined magic value.
-*
-*   Given and/or returned:
-*      prj      AstPrjPrm*  Projection parameters (see below).
-*
-*   Function return value:
-*               int      Error status
-*                           0: Success.
-*                           1: Invalid projection parameters.
-*
-*   Forward transformation; *fwd()
-*   -----------------------------
-*   Compute (x,y) coordinates in the plane of projection from native spherical
-*   coordinates (phi,theta).
-*
-*   Given:
-*      phi,     const double
-*      theta             Longitude and latitude of the projected point in
-*                        native spherical coordinates, in degrees.
-*
-*   Given and returned:
-*      prj      AstPrjPrm*  Projection parameters (see below).
-*
-*   Returned:
-*      x,y      double*  Projected coordinates.
-*
-*   Function return value:
-*               int      Error status
-*                           0: Success.
-*                           1: Invalid projection parameters.
-*                           2: Invalid value of (phi,theta).
-*
-*   Reverse transformation; *rev()
-*   -----------------------------
-*   Compute native spherical coordinates (phi,theta) from (x,y) coordinates in
-*   the plane of projection.
-*
-*   Given:
-*      x,y      const double
-*                        Projected coordinates.
-*
-*   Given and returned:
-*      prj      AstPrjPrm*  Projection parameters (see below).
-*
-*   Returned:
-*      phi,     double*  Longitude and latitude of the projected point in
-*      theta             native spherical coordinates, in degrees.
-*
-*   Function return value:
-*               int      Error status
-*                           0: Success.
-*                           1: Invalid projection parameters.
-*                           2: Invalid value of (x,y).
-*                           1: Invalid projection parameters.
-*
-*   Projection parameters
-*   ---------------------
-*   The AstPrjPrm struct consists of the following:
-*
-*      int flag
-*         This flag must be set to zero whenever any of p[] or r0 are set
-*         or changed.  This signals the initialization routine to recompute
-*         intermediaries.  flag may also be set to -1 to disable strict bounds
-*         checking for the AZP, SZP, TAN, SIN, ZPN, and COP projections.
-*
-*      double r0
-*         r0; The radius of the generating sphere for the projection, a linear
-*         scaling parameter.  If this is zero, it will be reset to the default
-*         value of 180/pi (the value for FITS WCS).
-*
-*      double p[]
-*         Contains the projection parameters associated with the
-*         longitude axis.
-*
-*   The remaining members of the AstPrjPrm struct are maintained by the
-*   initialization routines and should not be modified.  This is done for the
-*   sake of efficiency and to allow an arbitrary number of contexts to be
-*   maintained simultaneously.
-*
-*      char code[4]
-*         Three-letter projection code.
-*
-*      double phi0, theta0
-*         Native longitude and latitude of the reference point, in degrees.
-*
-*      double w[10]
-*      int n
-*         Intermediate values derived from the projection parameters.
-*
-*      int (*astPRJfwd)()
-*      int (*astPRJrev)()
-*         Pointers to the forward and reverse projection routines.
-*
-*   Usage of the p[] array as it applies to each projection is described in
-*   the prologue to each trio of projection routines.
-*
-*   Argument checking
-*   -----------------
-*   Forward routines:
-*
-*      The values of phi and theta (the native longitude and latitude)
-*      normally lie in the range [-180,180] for phi, and [-90,90] for theta.
-*      However, all forward projections will accept any value of phi and will
-*      not normalize it.
-*
-*      The forward projection routines do not explicitly check that theta lies
-*      within the range [-90,90].  They do check for any value of theta which
-*      produces an invalid argument to the projection equations (e.g. leading
-*      to division by zero).  The forward routines for AZP, SZP, TAN, SIN,
-*      ZPN, and COP also return error 2 if (phi,theta) corresponds to the
-*      overlapped (far) side of the projection but also return the
-*      corresponding value of (x,y).  This strict bounds checking may be
-*      relaxed by setting prj->flag to -1 (rather than 0) when these
-*      projections are initialized.
-*
-*   Reverse routines:
-*
-*      Error checking on the projected coordinates (x,y) is limited to that
-*      required to ascertain whether a solution exists.  Where a solution does
-*      exist no check is made that the value of phi and theta obtained lie
-*      within the ranges [-180,180] for phi, and [-90,90] for theta.
-*
-*   Accuracy
-*   --------
-*   Closure to a precision of at least 1E-10 degree of longitude and latitude
-*   has been verified for typical projection parameters on the 1 degree grid
-*   of native longitude and latitude (to within 5 degrees of any latitude
-*   where the projection may diverge).
-*
-*   Author: Mark Calabretta, Australia Telescope National Facility
-*   $Id: proj.c,v 1.1.1.1 2009/11/02 16:01:16 joye Exp $
-*===========================================================================*/
-
-/* Set the name of the module we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. NB, this module is not a proper AST 
-   class, but it defines this macro sanyway in order to get the protected
-   symbols defined in memory.h */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "wcsmath.h"
-#include "wcstrig.h"
-#include "memory.h"
-#include "proj.h"
-
-/* Following variables are not needed in AST and are commented out to
-   avoid name clashes with other software systems (e.g. SkyCat) which
-   defines them.
-
-int  npcode = 26;
-char pcodes[26][4] =
-      {"AZP", "SZP", "TAN", "STG", "SIN", "ARC", "ZPN", "ZEA", "AIR", "CYP",
-       "CEA", "CAR", "MER", "COP", "COE", "COD", "COO", "SFL", "PAR", "MOL",
-       "AIT", "BON", "PCO", "TSC", "CSC", "QSC", "HPX"};
-*/
-
-const int WCS__AZP = 101;
-const int WCS__SZP = 102;
-const int WCS__TAN = 103;
-const int WCS__STG = 104;
-const int WCS__SIN = 105;
-const int WCS__ARC = 106;
-const int WCS__ZPN = 107;
-const int WCS__ZEA = 108;
-const int WCS__AIR = 109;
-const int WCS__CYP = 201;
-const int WCS__CEA = 202;
-const int WCS__CAR = 203;
-const int WCS__MER = 204;
-const int WCS__SFL = 301;
-const int WCS__PAR = 302;
-const int WCS__MOL = 303;
-const int WCS__AIT = 401;
-const int WCS__COP = 501;
-const int WCS__COE = 502;
-const int WCS__COD = 503;
-const int WCS__COO = 504;
-const int WCS__BON = 601;
-const int WCS__PCO = 602;
-const int WCS__TSC = 701;
-const int WCS__CSC = 702;
-const int WCS__QSC = 703;
-const int WCS__HPX = 801;
-
-/* Map error number to error message for each function. */
-const char *astPRJset_errmsg[] = {
-   0,
-   "Invalid projection parameters"};
-
-const char *astPRJfwd_errmsg[] = {
-   0,
-   "Invalid projection parameters",
-   "Invalid value of (phi,theta)"};
-
-const char *astPRJrev_errmsg[] = {
-   0,
-   "Invalid projection parameters",
-   "Invalid value of (x,y)"};
-
-
-#define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X))
-
-
-
-/*==========================================================================*/
-
-int astPRJset(pcode, prj)
-
-const char pcode[4];
-struct AstPrjPrm *prj;
-
-{
-   /* Set pointers to the forward and reverse projection routines. */
-   if (strcmp(pcode, "AZP") == 0) {
-      astAZPset(prj);
-   } else if (strcmp(pcode, "SZP") == 0) {
-      astSZPset(prj);
-   } else if (strcmp(pcode, "TAN") == 0) {
-      astTANset(prj);
-   } else if (strcmp(pcode, "STG") == 0) {
-      astSTGset(prj);
-   } else if (strcmp(pcode, "SIN") == 0) {
-      astSINset(prj);
-   } else if (strcmp(pcode, "ARC") == 0) {
-      astARCset(prj);
-   } else if (strcmp(pcode, "ZPN") == 0) {
-      astZPNset(prj);
-   } else if (strcmp(pcode, "ZEA") == 0) {
-      astZEAset(prj);
-   } else if (strcmp(pcode, "AIR") == 0) {
-      astAIRset(prj);
-   } else if (strcmp(pcode, "CYP") == 0) {
-      astCYPset(prj);
-   } else if (strcmp(pcode, "CEA") == 0) {
-      astCEAset(prj);
-   } else if (strcmp(pcode, "CAR") == 0) {
-      astCARset(prj);
-   } else if (strcmp(pcode, "MER") == 0) {
-      astMERset(prj);
-   } else if (strcmp(pcode, "SFL") == 0) {
-      astSFLset(prj);
-   } else if (strcmp(pcode, "PAR") == 0) {
-      astPARset(prj);
-   } else if (strcmp(pcode, "MOL") == 0) {
-      astMOLset(prj);
-   } else if (strcmp(pcode, "AIT") == 0) {
-      astAITset(prj);
-   } else if (strcmp(pcode, "COP") == 0) {
-      astCOPset(prj);
-   } else if (strcmp(pcode, "COE") == 0) {
-      astCOEset(prj);
-   } else if (strcmp(pcode, "COD") == 0) {
-      astCODset(prj);
-   } else if (strcmp(pcode, "COO") == 0) {
-      astCOOset(prj);
-   } else if (strcmp(pcode, "BON") == 0) {
-      astBONset(prj);
-   } else if (strcmp(pcode, "PCO") == 0) {
-      astPCOset(prj);
-   } else if (strcmp(pcode, "TSC") == 0) {
-      astTSCset(prj);
-   } else if (strcmp(pcode, "CSC") == 0) {
-      astCSCset(prj);
-   } else if (strcmp(pcode, "QSC") == 0) {
-      astQSCset(prj);
-   } else if (strcmp(pcode, "HPX") == 0) {
-      astHPXset(prj);
-   } else {
-      /* Unrecognized projection code. */
-      return 1;
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPRJfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   return prj->astPRJfwd(phi, theta, prj, x, y);
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPRJrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   return prj->astPRJrev(x, y, prj, phi, theta);
-}
-
-/*============================================================================
-*   AZP: zenithal/azimuthal perspective projection.
-*
-*   Given:
-*      prj->p[1]    Distance parameter, mu in units of r0.
-*      prj->p[2]    Tilt angle, gamma in degrees.
-*
-*   Given and/or returned:
-*      prj->flag    AZP, or -AZP if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "AZP"
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    r0*(mu+1)
-*      prj->w[1]    tan(gamma)
-*      prj->w[2]    sec(gamma)
-*      prj->w[3]    cos(gamma)
-*      prj->w[4]    sin(gamma)
-*      prj->w[5]    asin(-1/mu) for |mu| >= 1, -90 otherwise
-*      prj->w[6]    mu*cos(gamma)
-*      prj->w[7]    1 if |mu*cos(gamma)| < 1, 0 otherwise
-*      prj->astPRJfwd  Pointer to astAZPfwd().
-*      prj->astPRJrev  Pointer to astAZPrev().
-*===========================================================================*/
-
-int astAZPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "AZP");
-   prj->flag   = copysign(WCS__AZP, prj->flag);
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = prj->r0*(prj->p[1] + 1.0);
-   if (prj->w[0] == 0.0) {
-      return 1;
-   }
-
-   prj->w[3] = astCosd(prj->p[2]);
-   if (prj->w[3] == 0.0) {
-      return 1;
-   }
-
-   prj->w[2] = 1.0/prj->w[3];
-   prj->w[4] = astSind(prj->p[2]);
-   prj->w[1] = prj->w[4] / prj->w[3];
-
-   if (fabs(prj->p[1]) > 1.0) {
-      prj->w[5] = astASind(-1.0/prj->p[1]);
-   } else {
-      prj->w[5] = -90.0;
-   }
-
-   prj->w[6] = prj->p[1] * prj->w[3];
-   prj->w[7] = (fabs(prj->w[6]) < 1.0) ? 1.0 : 0.0;
-
-   prj->astPRJfwd = astAZPfwd;
-   prj->astPRJrev = astAZPrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAZPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, b, cphi, cthe, r, s, t;
-
-   if (abs(prj->flag) != WCS__AZP) {
-      if (astAZPset(prj)) return 1;
-   }
-
-   cphi = astCosd(phi);
-   cthe = astCosd(theta);
-
-   s = prj->w[1]*cphi;
-   t = (prj->p[1] + astSind(theta)) + cthe*s;
-   if (t == 0.0) {
-      return 2;
-   }
-
-   r  =  prj->w[0]*cthe/t;
-   *x =  r*astSind(phi);
-   *y = -r*cphi*prj->w[2];
-
-   /* Bounds checking. */
-   if (prj->flag > 0) {
-      /* Overlap. */
-      if (theta < prj->w[5]) {
-         return 2;
-      }
-
-      /* Divergence. */
-      if (prj->w[7] > 0.0) {
-         t = prj->p[1] / sqrt(1.0 + s*s);
-
-         if (fabs(t) <= 1.0) {
-            s = astATand(-s);
-            t = astASind(t);
-            a = s - t;
-            b = s + t + 180.0;
-
-            if (a > 90.0) a -= 360.0;
-            if (b > 90.0) b -= 360.0;
-
-            if (theta < ((a > b) ? a : b)) {
-               return 2;
-            }
-         }
-      }
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAZPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, b, r, s, t, ycosg;
-   const double tol = 1.0e-13;
-
-   if (abs(prj->flag) != WCS__AZP) {
-      if (astAZPset(prj)) return 1;
-   }
-
-   ycosg = y*prj->w[3];
-
-   r = sqrt(x*x + ycosg*ycosg);
-   if (r == 0.0) {
-      *phi   =  0.0;
-      *theta = 90.0;
-   } else {
-      *phi = astATan2d(x, -ycosg);
-
-      s = r / (prj->w[0] + y*prj->w[4]);
-      t = s*prj->p[1]/sqrt(s*s + 1.0);
-
-      s = astATan2d(1.0, s);
-
-      if (fabs(t) > 1.0) {
-         t = copysign(90.0,t);
-         if (fabs(t) > 1.0+tol) {
-            return 2;
-         }
-      } else {
-         t = astASind(t);
-      }
-
-      a = s - t;
-      b = s + t + 180.0;
-
-      if (a > 90.0) a -= 360.0;
-      if (b > 90.0) b -= 360.0;
-
-      *theta = (a > b) ? a : b;
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   SZP: slant zenithal perspective projection.
-*
-*   Given:
-*      prj->p[1]    Distance of the point of projection from the centre of the
-*                   generating sphere, mu in units of r0.
-*      prj->p[2]    Native longitude, phi_c, and ...
-*      prj->p[3]    Native latitude, theta_c, on the planewards side of the
-*                   intersection of the line through the point of projection
-*                   and the centre of the generating sphere, phi_c in degrees.
-*
-*   Given and/or returned:
-*      prj->flag    SZP, or -SZP if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "SZP"
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    1/r0
-*      prj->w[1]    xp = -mu*cos(theta_c)*sin(phi_c)
-*      prj->w[2]    yp =  mu*cos(theta_c)*cos(phi_c)
-*      prj->w[3]    zp =  mu*sin(theta_c) + 1
-*      prj->w[4]    r0*xp
-*      prj->w[5]    r0*yp
-*      prj->w[6]    r0*zp
-*      prj->w[7]    (zp - 1)^2
-*      prj->w[8]    asin(1-zp) if |1 - zp| < 1, -90 otherwise
-*      prj->astPRJfwd  Pointer to astSZPfwd().
-*      prj->astPRJrev  Pointer to astSZPrev().
-*===========================================================================*/
-
-int astSZPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "SZP");
-   prj->flag   = copysign(WCS__SZP, prj->flag);
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = 1.0/prj->r0;
-
-   prj->w[3] = prj->p[1] * astSind(prj->p[3]) + 1.0;
-   if (prj->w[3] == 0.0) {
-      return 1;
-   }
-
-   prj->w[1] = -prj->p[1] * astCosd(prj->p[3]) * astSind(prj->p[2]);
-   prj->w[2] =  prj->p[1] * astCosd(prj->p[3]) * astCosd(prj->p[2]);
-   prj->w[4] =  prj->r0 * prj->w[1];
-   prj->w[5] =  prj->r0 * prj->w[2];
-   prj->w[6] =  prj->r0 * prj->w[3];
-   prj->w[7] =  (prj->w[3] - 1.0) * prj->w[3] - 1.0;
-
-   if (fabs(prj->w[3] - 1.0) < 1.0) {
-      prj->w[8] = astASind(1.0 - prj->w[3]);
-   } else {
-      prj->w[8] = -90.0;
-   }
-
-   prj->astPRJfwd = astSZPfwd;
-   prj->astPRJrev = astSZPrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSZPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, b, cphi, cthe, s, sphi, t;
-
-   if (abs(prj->flag) != WCS__SZP) {
-      if (astSZPset(prj)) return 1;
-   }
-
-   cphi = astCosd(phi);
-   sphi = astSind(phi);
-   cthe = astCosd(theta);
-   s = 1.0 - astSind(theta);
-
-   t = prj->w[3] - s;
-   if (t == 0.0) {
-      return 2;
-   }
-
-   *x =  (prj->w[6]*cthe*sphi - prj->w[4]*s)/t;
-   *y = -(prj->w[6]*cthe*cphi + prj->w[5]*s)/t;
-
-   /* Bounds checking. */
-   if (prj->flag > 0) {
-      /* Divergence. */
-      if (theta < prj->w[8]) {
-         return 2;
-      }
-
-      /* Overlap. */
-      if (fabs(prj->p[1]) > 1.0) {
-         s = prj->w[1]*sphi - prj->w[2]*cphi;
-         t = 1.0/sqrt(prj->w[7] + s*s);
-
-         if (fabs(t) <= 1.0) {
-            s = astATan2d(s, prj->w[3] - 1.0);
-            t = astASind(t);
-            a = s - t;
-            b = s + t + 180.0;
-
-            if (a > 90.0) a -= 360.0;
-            if (b > 90.0) b -= 360.0;
-
-            if (theta < ((a > b) ? a : b)) {
-               return 2;
-            }
-         }
-      }
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSZPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, b, c, d, r2, sth1, sth2, sthe, sxy, t, x1, xp, y1, yp, z;
-   const double tol = 1.0e-13;
-
-   if (abs(prj->flag) != WCS__SZP) {
-      if (astSZPset(prj)) return 1;
-   }
-
-   xp = x*prj->w[0];
-   yp = y*prj->w[0];
-   r2 = xp*xp + yp*yp;
-
-   x1 = (xp - prj->w[1])/prj->w[3];
-   y1 = (yp - prj->w[2])/prj->w[3];
-   sxy = xp*x1 + yp*y1;
-
-   if (r2 < 1.0e-10) {
-      /* Use small angle formula. */
-      z = r2/2.0;
-      *theta = 90.0 - R2D*sqrt(r2/(1.0 + sxy));
-
-   } else {
-      t = x1*x1 + y1*y1;
-      a = t + 1.0;
-      b = sxy - t;
-      c = r2 - sxy - sxy + t - 1.0;
-      d = b*b - a*c;
-
-      /* Check for a solution. */
-      if (d < 0.0) {
-         return 2;
-      }
-      d = sqrt(d);
-
-      /* Choose solution closest to pole. */
-      sth1 = (-b + d)/a;
-      sth2 = (-b - d)/a;
-      sthe = (sth1 > sth2) ? sth1 : sth2;
-      if (sthe > 1.0) {
-         if (sthe-1.0 < tol) {
-            sthe = 1.0;
-         } else {
-            sthe = (sth1 < sth2) ? sth1 : sth2;
-         }
-      }
-
-      if (sthe < -1.0) {
-         if (sthe+1.0 > -tol) {
-            sthe = -1.0;
-         }
-      }
-
-      if (sthe > 1.0 || sthe < -1.0) {
-         return 2;
-      }
-
-      *theta = astASind(sthe);
-
-      z = 1.0 - sthe;
-   }
-
-   *phi = astATan2d(xp - x1*z, -(yp - y1*z));
-
-   return 0;
-}
-
-/*============================================================================
-*   TAN: gnomonic projection.
-*
-*   Given and/or returned:
-*      prj->flag    TAN, or -TAN if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "TAN"
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->astPRJfwd  Pointer to astTANfwd().
-*      prj->astPRJrev  Pointer to astTANrev().
-*===========================================================================*/
-
-int astTANset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "TAN");
-   prj->flag   = copysign(WCS__TAN, prj->flag);
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->astPRJfwd = astTANfwd;
-   prj->astPRJrev = astTANrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTANfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double r, s;
-
-   if (abs(prj->flag) != WCS__TAN) {
-      if(astTANset(prj)) return 1;
-   }
-
-   s = astSind(theta);
-   if (s == 0.0) {
-      return 2;
-   }
-
-   r =  prj->r0*astCosd(theta)/s;
-   *x =  r*astSind(phi);
-   *y = -r*astCosd(phi);
-
-   if (prj->flag > 0 && s < 0.0) {
-      return 2;
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTANrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double r;
-
-   if (abs(prj->flag) != WCS__TAN) {
-      if (astTANset(prj)) return 1;
-   }
-
-   r = sqrt(x*x + y*y);
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(x, -y);
-   }
-   *theta = astATan2d(prj->r0, r);
-
-   return 0;
-}
-
-/*============================================================================
-*   STG: stereographic projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "STG"
-*      prj->flag     STG
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    2*r0
-*      prj->w[1]    1/(2*r0)
-*      prj->astPRJfwd  Pointer to astSTGfwd().
-*      prj->astPRJrev  Pointer to astSTGrev().
-*===========================================================================*/
-
-int astSTGset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "STG");
-   prj->flag   =  WCS__STG;
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 360.0/PI;
-      prj->w[1] = PI/360.0;
-   } else {
-      prj->w[0] = 2.0*prj->r0;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astSTGfwd;
-   prj->astPRJrev = astSTGrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSTGfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double r, s;
-
-   if (prj->flag != WCS__STG) {
-      if (astSTGset(prj)) return 1;
-   }
-
-   s = 1.0 + astSind(theta);
-   if (s == 0.0) {
-      return 2;
-   }
-
-   r =  prj->w[0]*astCosd(theta)/s;
-   *x =  r*astSind(phi);
-   *y = -r*astCosd(phi);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSTGrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double r;
-
-   if (prj->flag != WCS__STG) {
-      if (astSTGset(prj)) return 1;
-   }
-
-   r = sqrt(x*x + y*y);
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(x, -y);
-   }
-   *theta = 90.0 - 2.0*astATand(r*prj->w[1]);
-
-   return 0;
-}
-
-/*============================================================================
-*   SIN: orthographic/synthesis projection.
-*
-*   Given:
-*      prj->p[1:2]  Obliqueness parameters, xi and eta.
-*
-*   Given and/or returned:
-*      prj->flag    SIN, or -SIN if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "SIN"
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    1/r0
-*      prj->w[1]    xi**2 + eta**2
-*      prj->w[2]    xi**2 + eta**2 + 1
-*      prj->w[3]    xi**2 + eta**2 - 1
-*      prj->astPRJfwd  Pointer to astSINfwd().
-*      prj->astPRJrev  Pointer to astSINrev().
-*===========================================================================*/
-
-int astSINset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "SIN");
-   prj->flag   = copysign(WCS__SIN, prj->flag);
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = 1.0/prj->r0;
-   prj->w[1] = prj->p[1]*prj->p[1] + prj->p[2]*prj->p[2];
-   prj->w[2] = prj->w[1] + 1.0;
-   prj->w[3] = prj->w[1] - 1.0;
-
-   prj->astPRJfwd = astSINfwd;
-   prj->astPRJrev = astSINrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSINfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double cphi, cthe, sphi, t, z;
-
-   if (abs(prj->flag) != WCS__SIN) {
-      if (astSINset(prj)) return 1;
-   }
-
-   t = (90.0 - fabs(theta))*D2R;
-   if (t < 1.0e-5) {
-      if (theta > 0.0) {
-         z = t*t/2.0;
-      } else {
-         z = 2.0 - t*t/2.0;
-      }
-      cthe = t;
-   } else {
-      z =  1.0 - astSind(theta);
-      cthe = astCosd(theta);
-   }
-
-   cphi = astCosd(phi);
-   sphi = astSind(phi);
-   *x =  prj->r0*(cthe*sphi + prj->p[1]*z);
-   *y = -prj->r0*(cthe*cphi - prj->p[2]*z);
-
-   /* Validate this solution. */
-   if (prj->flag > 0) {
-      if (prj->w[1] == 0.0) {
-         /* Orthographic projection. */
-         if (theta < 0.0) {
-            return 2;
-         }
-      } else {
-         /* "Synthesis" projection. */
-         t = -astATand(prj->p[1]*sphi - prj->p[2]*cphi);
-         if (theta < t) {
-            return 2;
-         }
-      }
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSINrev (x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   const double tol = 1.0e-13;
-   double a, b, c, d, r2, sth1, sth2, sthe, sxy, x0, x1, xp, y0, y1, yp, z;
-
-   if (abs(prj->flag) != WCS__SIN) {
-      if (astSINset(prj)) return 1;
-   }
-
-   /* Compute intermediaries. */
-   x0 = x*prj->w[0];
-   y0 = y*prj->w[0];
-   r2 = x0*x0 + y0*y0;
-
-   if (prj->w[1] == 0.0) {
-      /* Orthographic projection. */
-      if (r2 != 0.0) {
-         *phi = astATan2d(x0, -y0);
-      } else {
-         *phi = 0.0;
-      }
-
-      if (r2 < 0.5) {
-         *theta = astACosd(sqrt(r2));
-      } else if (r2 <= 1.0) {
-         *theta = astASind(sqrt(1.0 - r2));
-      } else {
-         return 2;
-      }
-
-   } else {
-      /* "Synthesis" projection. */
-      x1 = prj->p[1];
-      y1 = prj->p[2];
-      sxy = x0*x1 + y0*y1;
-
-      if (r2 < 1.0e-10) {
-         /* Use small angle formula. */
-         z = r2/2.0;
-         *theta = 90.0 - R2D*sqrt(r2/(1.0 + sxy));
-
-      } else {
-         a = prj->w[2];
-         b = sxy - prj->w[1];
-         c = r2 - sxy - sxy + prj->w[3];
-         d = b*b - a*c;
-
-         /* Check for a solution. */
-         if (d < 0.0) {
-            return 2;
-         }
-         d = sqrt(d);
-
-         /* Choose solution closest to pole. */
-         sth1 = (-b + d)/a;
-         sth2 = (-b - d)/a;
-         sthe = (sth1 > sth2) ? sth1 : sth2;
-         if (sthe > 1.0) {
-            if (sthe-1.0 < tol) {
-               sthe = 1.0;
-            } else {
-               sthe = (sth1 < sth2) ? sth1 : sth2;
-            }
-         }
-
-         if (sthe < -1.0) {
-            if (sthe+1.0 > -tol) {
-               sthe = -1.0;
-            }
-         }
-
-         if (sthe > 1.0 || sthe < -1.0) {
-            return 2;
-         }
-
-         *theta = astASind(sthe);
-         z = 1.0 - sthe;
-      }
-
-      xp = -y0 + prj->p[2]*z;
-      yp =  x0 - prj->p[1]*z;
-      if (xp == 0.0 && yp == 0.0) {
-         *phi = 0.0;
-      } else {
-         *phi = astATan2d(yp,xp);
-      }
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   ARC: zenithal/azimuthal equidistant projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "ARC"
-*      prj->flag     ARC
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->astPRJfwd  Pointer to astARCfwd().
-*      prj->astPRJrev  Pointer to astARCrev().
-*===========================================================================*/
-
-int astARCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "ARC");
-   prj->flag   =  WCS__ARC;
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astARCfwd;
-   prj->astPRJrev = astARCrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astARCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double r;
-
-   if (prj->flag != WCS__ARC) {
-      if (astARCset(prj)) return 1;
-   }
-
-   r =  prj->w[0]*(90.0 - theta);
-   *x =  r*astSind(phi);
-   *y = -r*astCosd(phi);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astARCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double r;
-
-   if (prj->flag != WCS__ARC) {
-      if (astARCset(prj)) return 1;
-   }
-
-   r = sqrt(x*x + y*y);
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(x, -y);
-   }
-   *theta = 90.0 - r*prj->w[1];
-
-   return 0;
-}
-
-/*============================================================================
-*   ZPN: zenithal/azimuthal polynomial projection.
-*
-*   Given:
-*      prj->p[0:WCSLIB_MXPAR-1]  Polynomial coefficients.
-*
-*   Given and/or returned:
-*      prj->flag    ZPN, or -ZPN if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "ZPN"
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->n       Degree of the polynomial, N.
-*      prj->w[0]    Co-latitude of the first point of inflection (N > 2).
-*      prj->w[1]    Radius of the first point of inflection (N > 2).
-*      prj->astPRJfwd  Pointer to astZPNfwd().
-*      prj->astPRJrev  Pointer to astZPNrev().
-*===========================================================================*/
-
-int astZPNset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   int   i, j, k, plen;
-   double d, d1, d2, r, zd, zd1, zd2;
-   const double tol = 1.0e-13;
-
-   strcpy(prj->code, "ZPN");
-   prj->flag   = copysign(WCS__ZPN, prj->flag);
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   /* Find the highest non-zero coefficient. */
-   plen = astSizeOf( prj->p )/sizeof( double );
-   for (k = plen-1; k >= 0 && prj->p[k] == 0.0; k--);
-   if (k < 0) return 1;
-
-   prj->n = k;
-
-   if (k >= 3) {
-      /* Find the point of inflection closest to the pole. */
-      zd1 = 0.0;
-      d1  = prj->p[1];
-      if (d1 <= 0.0) {
-         return 1;
-      }
-
-      /* Find the point where the derivative first goes negative. */
-      for (i = 0; i < 180; i++) {
-         zd2 = i*D2R;
-         d2  = 0.0;
-         for (j = k; j > 0; j--) {
-            d2 = d2*zd2 + j*prj->p[j];
-         }
-
-         if (d2 <= 0.0) break;
-         zd1 = zd2;
-         d1  = d2;
-      }
-
-      if (i == 180) {
-         /* No negative derivative -> no point of inflection. */
-         zd = PI;
-      } else {
-         /* Find where the derivative is zero. */
-         for (i = 1; i <= 10; i++) {
-            zd = zd1 - d1*(zd2-zd1)/(d2-d1);
-
-            d = 0.0;
-            for (j = k; j > 0; j--) {
-               d = d*zd + j*prj->p[j];
-            }
-
-            if (fabs(d) < tol) break;
-
-            if (d < 0.0) {
-               zd2 = zd;
-               d2  = d;
-            } else {
-               zd1 = zd;
-               d1  = d;
-            }
-         }
-      }
-
-      r = 0.0;
-      for (j = k; j >= 0; j--) {
-         r = r*zd + prj->p[j];
-      }
-      prj->w[0] = zd;
-      prj->w[1] = r;
-   }
-
-   prj->astPRJfwd = astZPNfwd;
-   prj->astPRJrev = astZPNrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZPNfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   int   j;
-   double r, s;
-
-   if (abs(prj->flag) != WCS__ZPN) {
-      if (astZPNset(prj)) return 1;
-   }
-
-   s = (90.0 - theta)*D2R;
-
-   r = 0.0;
-   for (j = prj->n; j >= 0; j--) {
-      r = r*s + prj->p[j];
-   }
-   r = prj->r0*r;
-
-   *x =  r*astSind(phi);
-   *y = -r*astCosd(phi);
-
-   if (prj->flag > 0 && s > prj->w[0] && prj->n > 2 ) {
-      return 2;
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZPNrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   int   i, j, k;
-   double a, b, c, d, lambda, r, r1, r2, rt, zd, zd1, zd2;
-   const double tol = 1.0e-13;
-
-   if (abs(prj->flag) != WCS__ZPN) {
-      if (astZPNset(prj)) return 1;
-   }
-
-   k = prj->n;
-
-   r = sqrt(x*x + y*y)/prj->r0;
-
-   if (k < 1) {
-      /* Constant - no solution. */
-      return 1;
-   } else if (k == 1) {
-      /* Linear. */
-      zd = (r - prj->p[0])/prj->p[1];
-   } else if (k == 2) {
-      /* Quadratic. */
-      a = prj->p[2];
-      b = prj->p[1];
-      c = prj->p[0] - r;
-
-      d = b*b - 4.0*a*c;
-      if (d < 0.0) {
-         return 2;
-      }
-      d = sqrt(d);
-
-      /* Choose solution closest to pole. */
-      zd1 = (-b + d)/(2.0*a);
-      zd2 = (-b - d)/(2.0*a);
-      zd  = (zd1<zd2) ? zd1 : zd2;
-      if (zd < -tol) zd = (zd1>zd2) ? zd1 : zd2;
-      if (zd < 0.0) {
-         if (zd < -tol) {
-            return 2;
-         }
-         zd = 0.0;
-      } else if (zd > PI) {
-         if (zd > PI+tol) {
-            return 2;
-         }
-         zd = PI;
-      }
-   } else {
-      /* Higher order - solve iteratively. */
-      zd1 = 0.0;
-      r1  = prj->p[0];
-      zd2 = prj->w[0];
-      r2  = prj->w[1];
-
-      if (r < r1) {
-         if (r < r1-tol) {
-            return 2;
-         }
-         zd = zd1;
-      } else if (r > r2) {
-         if (r > r2+tol) {
-            return 2;
-         }
-         zd = zd2;
-      } else {
-         /* Disect the interval. */
-         for (j = 0; j < 100; j++) {
-            lambda = (r2 - r)/(r2 - r1);
-            if (lambda < 0.1) {
-               lambda = 0.1;
-            } else if (lambda > 0.9) {
-               lambda = 0.9;
-            }
-
-            zd = zd2 - lambda*(zd2 - zd1);
-
-            rt = 0.0;
-            for (i = k; i >= 0; i--) {
-                rt = (rt * zd) + prj->p[i];
-            }
-
-            if (rt < r) {
-                if (r-rt < tol) break;
-                r1 = rt;
-                zd1 = zd;
-            } else {
-                if (rt-r < tol) break;
-                r2 = rt;
-                zd2 = zd;
-            }
-
-            if (fabs(zd2-zd1) < tol) break;
-         }
-      }
-   }
-
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(x, -y);
-   }
-   *theta = 90.0 - zd*R2D;
-
-   return 0;
-}
-
-/*============================================================================
-*   ZEA: zenithal/azimuthal equal area projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "ZEA"
-*      prj->flag     ZEA
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    2*r0
-*      prj->w[1]    1/(2*r0)
-*      prj->astPRJfwd  Pointer to astZEAfwd().
-*      prj->astPRJrev  Pointer to astZEArev().
-*===========================================================================*/
-
-int astZEAset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "ZEA");
-   prj->flag   =  WCS__ZEA;
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 360.0/PI;
-      prj->w[1] = PI/360.0;
-   } else {
-      prj->w[0] = 2.0*prj->r0;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astZEAfwd;
-   prj->astPRJrev = astZEArev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZEAfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double r;
-
-   if (prj->flag != WCS__ZEA) {
-      if (astZEAset(prj)) return 1;
-   }
-
-   r =  prj->w[0]*astSind((90.0 - theta)/2.0);
-   *x =  r*astSind(phi);
-   *y = -r*astCosd(phi);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astZEArev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double r, s;
-   const double tol = 1.0e-12;
-
-   if (prj->flag != WCS__ZEA) {
-      if (astZEAset(prj)) return 1;
-   }
-
-   r = sqrt(x*x + y*y);
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(x, -y);
-   }
-
-   s = r*prj->w[1];
-   if (fabs(s) > 1.0) {
-      if (fabs(r - prj->w[0]) < tol) {
-         *theta = -90.0;
-      } else {
-         return 2;
-      }
-   } else {
-      *theta = 90.0 - 2.0*astASind(s);
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   AIR: Airy's projection.
-*
-*   Given:
-*      prj->p[1]    Latitude theta_b within which the error is minimized, in
-*                   degrees.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "AIR"
-*      prj->flag     AIR
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->w[0]    2*r0
-*      prj->w[1]    ln(cos(xi_b))/tan(xi_b)**2, where xi_b = (90-theta_b)/2
-*      prj->w[2]    1/2 - prj->w[1]
-*      prj->w[3]    2*r0*prj->w[2]
-*      prj->w[4]    tol, cutoff for using small angle approximation, in
-*                   radians.
-*      prj->w[5]    prj->w[2]*tol
-*      prj->w[6]    (180/pi)/prj->w[2]
-*      prj->astPRJfwd  Pointer to astAIRfwd().
-*      prj->astPRJrev  Pointer to astAIRrev().
-*===========================================================================*/
-
-int astAIRset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   const double tol = 1.0e-4;
-   double cxi;
-
-   strcpy(prj->code, "AIR");
-   prj->flag   =  WCS__AIR;
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = 2.0*prj->r0;
-   if (prj->p[1] == 90.0) {
-      prj->w[1] = -0.5;
-      prj->w[2] =  1.0;
-   } else if (prj->p[1] > -90.0) {
-      cxi = astCosd((90.0 - prj->p[1])/2.0);
-      prj->w[1] = log(cxi)*(cxi*cxi)/(1.0-cxi*cxi);
-      prj->w[2] = 0.5 - prj->w[1];
-   } else {
-      return 1;
-   }
-
-   prj->w[3] = prj->w[0] * prj->w[2];
-   prj->w[4] = tol;
-   prj->w[5] = prj->w[2]*tol;
-   prj->w[6] = R2D/prj->w[2];
-
-   prj->astPRJfwd = astAIRfwd;
-   prj->astPRJrev = astAIRrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAIRfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double cxi, r, txi, xi;
-
-   if (prj->flag != WCS__AIR) {
-      if (astAIRset(prj)) return 1;
-   }
-
-   if (theta == 90.0) {
-      r = 0.0;
-   } else if (theta > -90.0) {
-      xi = D2R*(90.0 - theta)/2.0;
-      if (xi < prj->w[4]) {
-         r = xi*prj->w[3];
-      } else {
-         cxi = astCosd((90.0 - theta)/2.0);
-         txi = sqrt(1.0-cxi*cxi)/cxi;
-         r = -prj->w[0]*(log(cxi)/txi + prj->w[1]*txi);
-      }
-   } else {
-      return 2;
-   }
-
-   *x =  r*astSind(phi);
-   *y = -r*astCosd(phi);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAIRrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   int   j;
-   double cxi, lambda, r, r1, r2, rt, txi, x1, x2, xi;
-   const double tol = 1.0e-12;
-
-   if (prj->flag != WCS__AIR) {
-      if (astAIRset(prj)) return 1;
-   }
-
-   r = sqrt(x*x + y*y)/prj->w[0];
-
-   if (r == 0.0) {
-      xi = 0.0;
-   } else if (r < prj->w[5]) {
-      xi = r*prj->w[6];
-   } else {
-      /* Find a solution interval. */
-      x1 = 1.0;
-      r1 = 0.0;
-      for (j = 0; j < 30; j++) {
-         x2 = x1/2.0;
-         txi = sqrt(1.0-x2*x2)/x2;
-         r2 = -(log(x2)/txi + prj->w[1]*txi);
-
-         if (r2 >= r) break;
-         x1 = x2;
-         r1 = r2;
-      }
-      if (j == 30) return 2;
-
-      for (j = 0; j < 100; j++) {
-         /* Weighted division of the interval. */
-         lambda = (r2-r)/(r2-r1);
-         if (lambda < 0.1) {
-            lambda = 0.1;
-         } else if (lambda > 0.9) {
-            lambda = 0.9;
-         }
-         cxi = x2 - lambda*(x2-x1);
-
-         txi = sqrt(1.0-cxi*cxi)/cxi;
-         rt = -(log(cxi)/txi + prj->w[1]*txi);
-
-         if (rt < r) {
-             if (r-rt < tol) break;
-             r1 = rt;
-             x1 = cxi;
-         } else {
-             if (rt-r < tol) break;
-             r2 = rt;
-             x2 = cxi;
-         }
-      }
-      if (j == 100) return 2;
-
-      xi = astACosd(cxi);
-   }
-
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(x, -y);
-   }
-   *theta = 90.0 - 2.0*xi;
-
-   return 0;
-}
-
-/*============================================================================
-*   CYP: cylindrical perspective projection.
-*
-*   Given:
-*      prj->p[1]    Distance of point of projection from the centre of the
-*                   generating sphere, mu, in units of r0.
-*      prj->p[2]    Radius of the cylinder of projection, lambda, in units of
-*                   r0.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "CYP"
-*      prj->flag    CYP
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*lambda*(pi/180)
-*      prj->w[1]    (180/pi)/(r0*lambda)
-*      prj->w[2]    r0*(mu + lambda)
-*      prj->w[3]    1/(r0*(mu + lambda))
-*      prj->astPRJfwd  Pointer to astCYPfwd().
-*      prj->astPRJrev  Pointer to astCYPrev().
-*===========================================================================*/
-
-int astCYPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "CYP");
-   prj->flag   = WCS__CYP;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-
-      prj->w[0] = prj->p[2];
-      if (prj->w[0] == 0.0) {
-         return 1;
-      }
-
-      prj->w[1] = 1.0/prj->w[0];
-
-      prj->w[2] = R2D*(prj->p[1] + prj->p[2]);
-      if (prj->w[2] == 0.0) {
-         return 1;
-      }
-
-      prj->w[3] = 1.0/prj->w[2];
-   } else {
-      prj->w[0] = prj->r0*prj->p[2]*D2R;
-      if (prj->w[0] == 0.0) {
-         return 1;
-      }
-
-      prj->w[1] = 1.0/prj->w[0];
-
-      prj->w[2] = prj->r0*(prj->p[1] + prj->p[2]);
-      if (prj->w[2] == 0.0) {
-         return 1;
-      }
-
-      prj->w[3] = 1.0/prj->w[2];
-   }
-
-   prj->astPRJfwd = astCYPfwd;
-   prj->astPRJrev = astCYPrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCYPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double s;
-
-   if (prj->flag != WCS__CYP) {
-      if (astCYPset(prj)) return 1;
-   }
-
-   s = prj->p[1] + astCosd(theta);
-   if (s == 0.0) {
-         return 2;
-      }
-
-   *x = prj->w[0]*phi;
-   *y = prj->w[2]*astSind(theta)/s;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCYPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double eta;
-   double a;
-   const double tol = 1.0e-13;
-
-   if (prj->flag != WCS__CYP) {
-      if (astCYPset(prj)) return 1;
-   }
-
-   *phi   = x*prj->w[1];
-   eta    = y*prj->w[3];
-
-   a = eta*prj->p[1]/sqrt(eta*eta+1.0);
-   if( fabs( a ) < 1.0 ) {
-      *theta = astATan2d(eta,1.0) + astASind( a );
-
-   } else if( fabs( a ) < 1.0 + tol ) {
-      if( a > 0.0 ){
-         *theta = astATan2d(eta,1.0) + 90.0;
-      } else {
-         *theta = astATan2d(eta,1.0) - 90.0;
-      }
-
-   } else {
-      return 2;
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   CEA: cylindrical equal area projection.
-*
-*   Given:
-*      prj->p[1]    Square of the cosine of the latitude at which the
-*                   projection is conformal, lambda.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "CEA"
-*      prj->flag    CEA
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->w[2]    r0/lambda
-*      prj->w[3]    lambda/r0
-*      prj->astPRJfwd  Pointer to astCEAfwd().
-*      prj->astPRJrev  Pointer to astCEArev().
-*===========================================================================*/
-
-int astCEAset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "CEA");
-   prj->flag   = WCS__CEA;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-      if (prj->p[1] <= 0.0 || prj->p[1] > 1.0) {
-         return 1;
-      }
-      prj->w[2] = prj->r0/prj->p[1];
-      prj->w[3] = prj->p[1]/prj->r0;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = R2D/prj->r0;
-      if (prj->p[1] <= 0.0 || prj->p[1] > 1.0) {
-         return 1;
-      }
-      prj->w[2] = prj->r0/prj->p[1];
-      prj->w[3] = prj->p[1]/prj->r0;
-   }
-
-   prj->astPRJfwd = astCEAfwd;
-   prj->astPRJrev = astCEArev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCEAfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   if (prj->flag != WCS__CEA) {
-      if (astCEAset(prj)) return 1;
-   }
-
-   *x = prj->w[0]*phi;
-   *y = prj->w[2]*astSind(theta);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCEArev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double s;
-   const double tol = 1.0e-13;
-
-   if (prj->flag != WCS__CEA) {
-      if (astCEAset(prj)) return 1;
-   }
-
-   s = y*prj->w[3];
-   if (fabs(s) > 1.0) {
-      if (fabs(s) > 1.0+tol) {
-         return 2;
-      }
-      s = copysign(1.0,s);
-   }
-
-   *phi   = x*prj->w[1];
-   *theta = astASind(s);
-
-   return 0;
-}
-
-/*============================================================================
-*   CAR: Cartesian projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "CAR"
-*      prj->flag    CAR
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->astPRJfwd  Pointer to astCARfwd().
-*      prj->astPRJrev  Pointer to astCARrev().
-*===========================================================================*/
-
-int astCARset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "CAR");
-   prj->flag   = WCS__CAR;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astCARfwd;
-   prj->astPRJrev = astCARrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCARfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   if (prj->flag != WCS__CAR) {
-      if (astCARset(prj)) return 1;
-   }
-
-   *x = prj->w[0]*phi;
-   *y = prj->w[0]*theta;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCARrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   if (prj->flag != WCS__CAR) {
-      if (astCARset(prj)) return 1;
-   }
-
-   *phi   = prj->w[1]*x;
-   *theta = prj->w[1]*y;
-
-   return 0;
-}
-
-/*============================================================================
-*   MER: Mercator's projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "MER"
-*      prj->flag    MER
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->astPRJfwd  Pointer to astMERfwd().
-*      prj->astPRJrev  Pointer to astMERrev().
-*===========================================================================*/
-
-int astMERset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "MER");
-   prj->flag   = WCS__MER;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astMERfwd;
-   prj->astPRJrev = astMERrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMERfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   if (prj->flag != WCS__MER) {
-      if (astMERset(prj)) return 1;
-   }
-
-   if (theta <= -90.0 || theta >= 90.0) {
-      return 2;
-   }
-
-   *x = prj->w[0]*phi;
-   *y = prj->r0*log(astTand((90.0+theta)/2.0));
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMERrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   if (prj->flag != WCS__MER) {
-      if (astMERset(prj)) return 1;
-   }
-
-   *phi   = x*prj->w[1];
-   *theta = 2.0*astATand(exp(y/prj->r0)) - 90.0;
-
-   return 0;
-}
-
-/*============================================================================
-*   SFL: Sanson-Flamsteed ("global sinusoid") projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "SFL"
-*      prj->flag    SFL
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->astPRJfwd  Pointer to astSFLfwd().
-*      prj->astPRJrev  Pointer to astSFLrev().
-*===========================================================================*/
-
-int astSFLset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "SFL");
-   prj->flag   = WCS__SFL;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astSFLfwd;
-   prj->astPRJrev = astSFLrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSFLfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   if (prj->flag != WCS__SFL) {
-      if (astSFLset(prj)) return 1;
-   }
-
-   *x = prj->w[0]*phi*astCosd(theta);
-   *y = prj->w[0]*theta;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astSFLrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double w;
-
-   if (prj->flag != WCS__SFL) {
-      if (astSFLset(prj)) return 1;
-   }
-
-   w = cos(y/prj->r0);
-   if (w == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = x*prj->w[1]/cos(y/prj->r0);
-   }
-   *theta = y*prj->w[1];
-
-   return 0;
-}
-
-/*============================================================================
-*   PAR: parabolic projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "PAR"
-*      prj->flag    PAR
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->w[2]    pi*r0
-*      prj->w[3]    1/(pi*r0)
-*      prj->astPRJfwd  Pointer to astPARfwd().
-*      prj->astPRJrev  Pointer to astPARrev().
-*===========================================================================*/
-
-int astPARset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "PAR");
-   prj->flag   = WCS__PAR;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-      prj->w[2] = 180.0;
-      prj->w[3] = 1.0/prj->w[2];
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = 1.0/prj->w[0];
-      prj->w[2] = PI*prj->r0;
-      prj->w[3] = 1.0/prj->w[2];
-   }
-
-   prj->astPRJfwd = astPARfwd;
-   prj->astPRJrev = astPARrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPARfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double s;
-
-   if (prj->flag != WCS__PAR) {
-      if (astPARset(prj)) return 1;
-   }
-
-   s = astSind(theta/3.0);
-   *x = prj->w[0]*phi*(1.0 - 4.0*s*s);
-   *y = prj->w[2]*s;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPARrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double s, t;
-
-   if (prj->flag != WCS__PAR) {
-      if (astPARset(prj)) return 1;
-   }
-
-   s = y*prj->w[3];
-   if (s > 1.0 || s < -1.0) {
-      return 2;
-   }
-
-   t = 1.0 - 4.0*s*s;
-   if (t == 0.0) {
-      if (x == 0.0) {
-         *phi = 0.0;
-      } else {
-         return 2;
-      }
-   } else {
-      *phi = prj->w[1]*x/t;
-   }
-
-   *theta = 3.0*astASind(s);
-
-   return 0;
-}
-
-/*============================================================================
-*   MOL: Mollweide's projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "MOL"
-*      prj->flag    MOL
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    sqrt(2)*r0
-*      prj->w[1]    sqrt(2)*r0/90
-*      prj->w[2]    1/(sqrt(2)*r0)
-*      prj->w[3]    90/r0
-*      prj->astPRJfwd  Pointer to astMOLfwd().
-*      prj->astPRJrev  Pointer to astMOLrev().
-*===========================================================================*/
-
-int astMOLset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "MOL");
-   prj->flag   = WCS__MOL;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = SQRT2*prj->r0;
-   prj->w[1] = prj->w[0]/90.0;
-   prj->w[2] = 1.0/prj->w[0];
-   prj->w[3] = 90.0/prj->r0;
-   prj->w[4] = 2.0/PI;
-
-   prj->astPRJfwd = astMOLfwd;
-   prj->astPRJrev = astMOLrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMOLfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   int   j;
-   double gamma, resid, u, v, v0, v1;
-   const double tol = 1.0e-13;
-
-   if (prj->flag != WCS__MOL) {
-      if (astMOLset(prj)) return 1;
-   }
-
-   if (fabs(theta) == 90.0) {
-      *x = 0.0;
-      *y = copysign(prj->w[0],theta);
-   } else if (theta == 0.0) {
-      *x = prj->w[1]*phi;
-      *y = 0.0;
-   } else {
-      u  = PI*astSind(theta);
-      v0 = -PI;
-      v1 =  PI;
-      v  = u;
-      for (j = 0; j < 100; j++) {
-         resid = (v - u) + sin(v);
-         if (resid < 0.0) {
-            if (resid > -tol) break;
-            v0 = v;
-         } else {
-            if (resid < tol) break;
-            v1 = v;
-         }
-         v = (v0 + v1)/2.0;
-      }
-
-      gamma = v/2.0;
-      *x = prj->w[1]*phi*cos(gamma);
-      *y = prj->w[0]*sin(gamma);
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astMOLrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double s, y0, z;
-   const double tol = 1.0e-12;
-
-   if (prj->flag != WCS__MOL) {
-      if (astMOLset(prj)) return 1;
-   }
-
-   y0 = y/prj->r0;
-   s  = 2.0 - y0*y0;
-   if (s <= tol) {
-      if (s < -tol) {
-         return 2;
-      }
-      s = 0.0;
-
-      if (fabs(x) > tol) {
-         return 2;
-      }
-      *phi = 0.0;
-   } else {
-      s = sqrt(s);
-      *phi = prj->w[3]*x/s;
-   }
-
-   z = y*prj->w[2];
-   if (fabs(z) > 1.0) {
-      if (fabs(z) > 1.0+tol) {
-         return 2;
-      }
-      z = copysign(1.0,z) + y0*s/PI;
-   } else {
-      z = asin(z)*prj->w[4] + y0*s/PI;
-   }
-
-   if (fabs(z) > 1.0) {
-      if (fabs(z) > 1.0+tol) {
-         return 2;
-      }
-      z = copysign(1.0,z);
-   }
-
-   *theta = astASind(z);
-
-   return 0;
-}
-
-/*============================================================================
-*   AIT: Hammer-Aitoff projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "AIT"
-*      prj->flag    AIT
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    2*r0**2
-*      prj->w[1]    1/(2*r0)**2
-*      prj->w[2]    1/(4*r0)**2
-*      prj->w[3]    1/(2*r0)
-*      prj->astPRJfwd  Pointer to astAITfwd().
-*      prj->astPRJrev  Pointer to astAITrev().
-*===========================================================================*/
-
-int astAITset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "AIT");
-   prj->flag   = WCS__AIT;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = 2.0*prj->r0*prj->r0;
-   prj->w[1] = 1.0/(2.0*prj->w[0]);
-   prj->w[2] = prj->w[1]/4.0;
-   prj->w[3] = 1.0/(2.0*prj->r0);
-
-   prj->astPRJfwd = astAITfwd;
-   prj->astPRJrev = astAITrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAITfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double cthe, w;
-
-   if (prj->flag != WCS__AIT) {
-      if (astAITset(prj)) return 1;
-   }
-
-   cthe = astCosd(theta);
-   w = sqrt(prj->w[0]/(1.0 + cthe*astCosd(phi/2.0)));
-   *x = 2.0*w*cthe*astSind(phi/2.0);
-   *y = w*astSind(theta);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astAITrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double s, u, xp, yp, z;
-   const double tol = 1.0e-13;
-
-   if (prj->flag != WCS__AIT) {
-      if (astAITset(prj)) return 1;
-   }
-
-   u = 1.0 - x*x*prj->w[2] - y*y*prj->w[1];
-   if (u < 0.0) {
-      if (u < -tol) {
-         return 2;
-      }
-
-      u = 0.0;
-   }
-
-   z = sqrt(u);
-   s = z*y/prj->r0;
-   if (fabs(s) > 1.0) {
-      if (fabs(s) > 1.0+tol) {
-         return 2;
-      }
-      s = copysign(1.0,s);
-   }
-
-   xp = 2.0*z*z - 1.0;
-   yp = z*x*prj->w[3];
-   if (xp == 0.0 && yp == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = 2.0*astATan2d(yp, xp);
-   }
-   *theta = astASind(s);
-
-   return 0;
-}
-
-/*============================================================================
-*   COP: conic perspective projection.
-*
-*   Given:
-*      prj->p[1]    sigma = (theta2+theta1)/2
-*      prj->p[2]    delta = (theta2-theta1)/2, where theta1 and theta2 are the
-*                   latitudes of the standard parallels, in degrees.
-*
-*   Given and/or returned:
-*      prj->flag    COP, or -COP if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "COP"
-*      prj->phi0     0.0
-*      prj->theta0  sigma
-*      prj->w[0]    C  = sin(sigma)
-*      prj->w[1]    1/C
-*      prj->w[2]    Y0 = r0*cos(delta)*cot(sigma)
-*      prj->w[3]    r0*cos(delta)
-*      prj->w[4]    1/(r0*cos(delta)
-*      prj->w[5]    cot(sigma)
-*      prj->astPRJfwd  Pointer to astCOPfwd().
-*      prj->astPRJrev  Pointer to astCOPrev().
-*===========================================================================*/
-
-int astCOPset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "COP");
-   prj->flag   = copysign(WCS__COP, prj->flag);
-   prj->phi0   = 0.0;
-   prj->theta0 = prj->p[1];
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->w[0] = astSind(prj->p[1]);
-   if (prj->w[0] == 0.0) {
-      return 1;
-   }
-
-   prj->w[1] = 1.0/prj->w[0];
-
-   prj->w[3] = prj->r0*astCosd(prj->p[2]);
-   if (prj->w[3] == 0.0) {
-      return 1;
-   }
-
-   prj->w[4] = 1.0/prj->w[3];
-   prj->w[5] = 1.0/astTand(prj->p[1]);
-
-   prj->w[2] = prj->w[3]*prj->w[5];
-
-   prj->astPRJfwd = astCOPfwd;
-   prj->astPRJrev = astCOPrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOPfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, r, s, t;
-
-   if (abs(prj->flag) != WCS__COP) {
-      if (astCOPset(prj)) return 1;
-   }
-
-   t = theta - prj->p[1];
-   s = astCosd(t);
-   if (s == 0.0) {
-      return 2;
-   }
-
-   a = prj->w[0]*phi;
-   r = prj->w[2] - prj->w[3]*astSind(t)/s;
-
-   *x =             r*astSind(a);
-   *y = prj->w[2] - r*astCosd(a);
-
-   if (prj->flag > 0 && r*prj->w[0] < 0.0) {
-      return 2;
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOPrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, dy, r;
-
-   if (abs(prj->flag) != WCS__COP) {
-      if (astCOPset(prj)) return 1;
-   }
-
-   dy = prj->w[2] - y;
-   r  = sqrt(x*x + dy*dy);
-   if (prj->p[1] < 0.0) r = -r;
-
-   if (r == 0.0) {
-      a = 0.0;
-   } else {
-      a = astATan2d(x/r, dy/r);
-   }
-
-   *phi   = a*prj->w[1];
-   *theta = prj->p[1] + astATand(prj->w[5] - r*prj->w[4]);
-
-   return 0;
-}
-
-/*============================================================================
-*   COE: conic equal area projection.
-*
-*   Given:
-*      prj->p[1]    sigma = (theta2+theta1)/2
-*      prj->p[2]    delta = (theta2-theta1)/2, where theta1 and theta2 are the
-*                   latitudes of the standard parallels, in degrees.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "COE"
-*      prj->flag    COE
-*      prj->phi0    0.0
-*      prj->theta0  sigma
-*      prj->w[0]    C = (sin(theta1) + sin(theta2))/2
-*      prj->w[1]    1/C
-*      prj->w[2]    Y0 = chi*sqrt(psi - 2C*astSind(sigma))
-*      prj->w[3]    chi = r0/C
-*      prj->w[4]    psi = 1 + sin(theta1)*sin(theta2)
-*      prj->w[5]    2C
-*      prj->w[6]    (1 + sin(theta1)*sin(theta2))*(r0/C)**2
-*      prj->w[7]    C/(2*r0**2)
-*      prj->w[8]    chi*sqrt(psi + 2C)
-*      prj->astPRJfwd  Pointer to astCOEfwd().
-*      prj->astPRJrev  Pointer to astCOErev().
-*===========================================================================*/
-
-int astCOEset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   double theta1, theta2;
-
-   strcpy(prj->code, "COE");
-   prj->flag   = WCS__COE;
-   prj->phi0   = 0.0;
-   prj->theta0 = prj->p[1];
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   theta1 = prj->p[1] - prj->p[2];
-   theta2 = prj->p[1] + prj->p[2];
-
-   prj->w[0] = (astSind(theta1) + astSind(theta2))/2.0;
-   if (prj->w[0] == 0.0) {
-      return 1;
-   }
-
-   prj->w[1] = 1.0/prj->w[0];
-
-   prj->w[3] = prj->r0/prj->w[0];
-   prj->w[4] = 1.0 + astSind(theta1)*astSind(theta2);
-   prj->w[5] = 2.0*prj->w[0];
-   prj->w[6] = prj->w[3]*prj->w[3]*prj->w[4];
-   prj->w[7] = 1.0/(2.0*prj->r0*prj->w[3]);
-   prj->w[8] = prj->w[3]*sqrt(prj->w[4] + prj->w[5]);
-
-   prj->w[2] = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*astSind(prj->p[1]));
-
-   prj->astPRJfwd = astCOEfwd;
-   prj->astPRJrev = astCOErev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOEfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, r;
-
-   if (prj->flag != WCS__COE) {
-      if (astCOEset(prj)) return 1;
-   }
-
-   a = phi*prj->w[0];
-   if (theta == -90.0) {
-      r = prj->w[8];
-   } else {
-      r = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*astSind(theta));
-   }
-
-   *x =             r*astSind(a);
-   *y = prj->w[2] - r*astCosd(a);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOErev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, dy, r, w;
-   const double tol = 1.0e-12;
-
-   if (prj->flag != WCS__COE) {
-      if (astCOEset(prj)) return 1;
-   }
-
-   dy = prj->w[2] - y;
-   r  = sqrt(x*x + dy*dy);
-   if (prj->p[1] < 0.0) r = -r;
-
-   if (r == 0.0) {
-      a = 0.0;
-   } else {
-      a = astATan2d(x/r, dy/r);
-   }
-
-   *phi = a*prj->w[1];
-   if (fabs(r - prj->w[8]) < tol) {
-      *theta = -90.0;
-   } else {
-      w = (prj->w[6] - r*r)*prj->w[7];
-      if (fabs(w) > 1.0) {
-         if (fabs(w-1.0) < tol) {
-            *theta = 90.0;
-         } else if (fabs(w+1.0) < tol) {
-            *theta = -90.0;
-         } else {
-            return 2;
-         }
-      } else {
-         *theta = astASind(w);
-      }
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   COD: conic equidistant projection.
-*
-*   Given:
-*      prj->p[1]    sigma = (theta2+theta1)/2
-*      prj->p[2]    delta = (theta2-theta1)/2, where theta1 and theta2 are the
-*                   latitudes of the standard parallels, in degrees.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "COD"
-*      prj->flag    COD
-*      prj->phi0    0.0
-*      prj->theta0  sigma
-*      prj->w[0]    C = r0*sin(sigma)*sin(delta)/delta
-*      prj->w[1]    1/C
-*      prj->w[2]    Y0 = delta*cot(delta)*cot(sigma)
-*      prj->w[3]    Y0 + sigma
-*      prj->astPRJfwd  Pointer to astCODfwd().
-*      prj->astPRJrev  Pointer to astCODrev().
-*===========================================================================*/
-
-int astCODset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "COD");
-   prj->flag   = WCS__COD;
-   prj->phi0   = 0.0;
-   prj->theta0 = prj->p[1];
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   if (prj->p[2] == 0.0) {
-      prj->w[0] = prj->r0*astSind(prj->p[1])*D2R;
-   } else {
-      prj->w[0] = prj->r0*astSind(prj->p[1])*astSind(prj->p[2])/prj->p[2];
-   }
-
-   if (prj->w[0] == 0.0) {
-      return 1;
-   }
-
-   prj->w[1] = 1.0/prj->w[0];
-   prj->w[2] = prj->r0*astCosd(prj->p[2])*astCosd(prj->p[1])/prj->w[0];
-   prj->w[3] = prj->w[2] + prj->p[1];
-
-   prj->astPRJfwd = astCODfwd;
-   prj->astPRJrev = astCODrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCODfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, r;
-
-   if (prj->flag != WCS__COD) {
-      if (astCODset(prj)) return 1;
-   }
-
-   a = prj->w[0]*phi;
-   r = prj->w[3] - theta;
-
-   *x =             r*astSind(a);
-   *y = prj->w[2] - r*astCosd(a);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCODrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, dy, r;
-
-   if (prj->flag != WCS__COD) {
-      if (astCODset(prj)) return 1;
-   }
-
-   dy = prj->w[2] - y;
-   r  = sqrt(x*x + dy*dy);
-   if (prj->p[1] < 0.0) r = -r;
-
-   if (r == 0.0) {
-      a = 0.0;
-   } else {
-      a = astATan2d(x/r, dy/r);
-   }
-
-   *phi   = a*prj->w[1];
-   *theta = prj->w[3] - r;
-
-   return 0;
-}
-
-/*============================================================================
-*   COO: conic orthomorphic projection.
-*
-*   Given:
-*      prj->p[1]    sigma = (theta2+theta1)/2
-*      prj->p[2]    delta = (theta2-theta1)/2, where theta1 and theta2 are the
-*                   latitudes of the standard parallels, in degrees.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "COO"
-*      prj->flag    COO
-*      prj->phi0    0.0
-*      prj->theta0  sigma
-*      prj->w[0]    C = ln(cos(theta2)/cos(theta1))/ln(tan(tau2)/tan(tau1))
-*                       where tau1 = (90 - theta1)/2
-*                             tau2 = (90 - theta2)/2
-*      prj->w[1]    1/C
-*      prj->w[2]    Y0 = psi*tan((90-sigma)/2)**C
-*      prj->w[3]    psi = (r0*cos(theta1)/C)/tan(tau1)**C
-*      prj->w[4]    1/psi
-*      prj->astPRJfwd  Pointer to astCOOfwd().
-*      prj->astPRJrev  Pointer to astCOOrev().
-*===========================================================================*/
-
-int astCOOset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   double cos1, cos2, tan1, tan2, theta1, theta2;
-
-   strcpy(prj->code, "COO");
-   prj->flag   = WCS__COO;
-   prj->phi0   = 0.0;
-   prj->theta0 = prj->p[1];
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   theta1 = prj->p[1] - prj->p[2];
-   theta2 = prj->p[1] + prj->p[2];
-
-   tan1 = astTand((90.0 - theta1)/2.0);
-   cos1 = astCosd(theta1);
-
-   if (theta1 == theta2) {
-      prj->w[0] = astSind(theta1);
-   } else {
-      tan2 = astTand((90.0 - theta2)/2.0);
-      cos2 = astCosd(theta2);
-      prj->w[0] = log(cos2/cos1)/log(tan2/tan1);
-   }
-   if (prj->w[0] == 0.0) {
-      return 1;
-   }
-
-   prj->w[1] = 1.0/prj->w[0];
-
-   prj->w[3] = prj->r0*(cos1/prj->w[0])/pow(tan1,prj->w[0]);
-   if (prj->w[3] == 0.0) {
-      return 1;
-   }
-   prj->w[2] = prj->w[3]*pow(astTand((90.0 - prj->p[1])/2.0),prj->w[0]);
-   prj->w[4] = 1.0/prj->w[3];
-
-   prj->astPRJfwd = astCOOfwd;
-   prj->astPRJrev = astCOOrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOOfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, r;
-
-   if (prj->flag != WCS__COO) {
-      if (astCOOset(prj)) return 1;
-   }
-
-   a = prj->w[0]*phi;
-   if (theta == -90.0) {
-      if (prj->w[0] < 0.0) {
-         r = 0.0;
-      } else {
-         return 2;
-      }
-   } else {
-      r = prj->w[3]*pow(astTand((90.0 - theta)/2.0),prj->w[0]);
-   }
-
-   *x =             r*astSind(a);
-   *y = prj->w[2] - r*astCosd(a);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCOOrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, dy, r;
-
-   if (prj->flag != WCS__COO) {
-      if (astCOOset(prj)) return 1;
-   }
-
-   dy = prj->w[2] - y;
-   r  = sqrt(x*x + dy*dy);
-   if (prj->p[1] < 0.0) r = -r;
-
-   if (r == 0.0) {
-      a = 0.0;
-   } else {
-      a = astATan2d(x/r, dy/r);
-   }
-
-   *phi = a*prj->w[1];
-   if (r == 0.0) {
-      if (prj->w[0] < 0.0) {
-         *theta = -90.0;
-      } else {
-         return 2;
-      }
-   } else {
-      *theta = 90.0 - 2.0*astATand(pow(r*prj->w[4],prj->w[1]));
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   BON: Bonne's projection.
-*
-*   Given:
-*      prj->p[1]    Bonne conformal latitude, theta1, in degrees.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "BON"
-*      prj->flag    BON
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[1]    r0*pi/180
-*      prj->w[2]    Y0 = r0*(cot(theta1) + theta1*pi/180)
-*      prj->astPRJfwd  Pointer to astBONfwd().
-*      prj->astPRJrev  Pointer to astBONrev().
-*===========================================================================*/
-
-int astBONset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "BON");
-   prj->flag   = WCS__BON;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[1] = 1.0;
-      prj->w[2] = prj->r0*astCosd(prj->p[1])/astSind(prj->p[1]) + prj->p[1];
-   } else {
-      prj->w[1] = prj->r0*D2R;
-      prj->w[2] = prj->r0*(astCosd(prj->p[1])/astSind(prj->p[1]) + prj->p[1]*D2R);
-   }
-
-   prj->astPRJfwd = astBONfwd;
-   prj->astPRJrev = astBONrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astBONfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, r;
-
-   if (prj->p[1] == 0.0) {
-      /* Sanson-Flamsteed. */
-      return astSFLfwd(phi, theta, prj, x, y);
-   }
-
-   if (prj->flag != WCS__BON) {
-      if (astBONset(prj)) return 1;
-   }
-
-   r = prj->w[2] - theta*prj->w[1];
-   a = prj->r0*phi*astCosd(theta)/r;
-
-   *x =             r*astSind(a);
-   *y = prj->w[2] - r*astCosd(a);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astBONrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double a, cthe, dy, r;
-
-   if (prj->p[1] == 0.0) {
-      /* Sanson-Flamsteed. */
-      return astSFLrev(x, y, prj, phi, theta);
-   }
-
-   if (prj->flag != WCS__BON) {
-      if (astBONset(prj)) return 1;
-   }
-
-   dy = prj->w[2] - y;
-   r = sqrt(x*x + dy*dy);
-   if (prj->p[1] < 0.0) r = -r;
-
-   if (r == 0.0) {
-      a = 0.0;
-   } else {
-      a = astATan2d(x/r, dy/r);
-   }
-
-   *theta = (prj->w[2] - r)/prj->w[1];
-   cthe = astCosd(*theta);
-   if (cthe == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = a*(r/prj->r0)/cthe;
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   PCO: polyconic projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "PCO"
-*      prj->flag    PCO
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    1/r0
-*      prj->w[2]    2*r0
-*      prj->astPRJfwd  Pointer to astPCOfwd().
-*      prj->astPRJrev  Pointer to astPCOrev().
-*===========================================================================*/
-
-int astPCOset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "PCO");
-   prj->flag   = WCS__PCO;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-      prj->w[2] = 360.0/PI;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = 1.0/prj->w[0];
-      prj->w[2] = 2.0*prj->r0;
-   }
-
-   prj->astPRJfwd = astPCOfwd;
-   prj->astPRJrev = astPCOrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPCOfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double a, cthe, cotthe, sthe;
-
-   if (prj->flag != WCS__PCO) {
-      if (astPCOset(prj)) return 1;
-   }
-
-   cthe = astCosd(theta);
-   sthe = astSind(theta);
-   a = phi*sthe;
-
-   if (sthe == 0.0) {
-      *x = prj->w[0]*phi;
-      *y = 0.0;
-   } else {
-      cotthe = cthe/sthe;
-      *x = prj->r0*cotthe*astSind(a);
-      *y = prj->r0*(cotthe*(1.0 - astCosd(a)) + theta*D2R);
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astPCOrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   int   j;
-   double f, fneg, fpos, lambda, tanthe, theneg, thepos, w, xp, xx, ymthe, yp;
-   const double tol = 1.0e-12;
-
-   if (prj->flag != WCS__PCO) {
-      if (astPCOset(prj)) return 1;
-   }
-
-   w = fabs(y*prj->w[1]);
-   if (w < tol) {
-      *phi = x*prj->w[1];
-      *theta = 0.0;
-   } else if (fabs(w-90.0) < tol) {
-      *phi = 0.0;
-      *theta = copysign(90.0,y);
-   } else {
-      /* Iterative solution using weighted division of the interval. */
-      if (y > 0.0) {
-         thepos =  90.0;
-      } else {
-         thepos = -90.0;
-      }
-      theneg = 0.0;
-
-      xx = x*x;
-      ymthe = y - prj->w[0]*thepos;
-      fpos = xx + ymthe*ymthe;
-      fneg = -999.0;
-
-      for (j = 0; j < 64; j++) {
-         if (fneg < -100.0) {
-            /* Equal division of the interval. */
-            *theta = (thepos+theneg)/2.0;
-         } else {
-            /* Weighted division of the interval. */
-            lambda = fpos/(fpos-fneg);
-            if (lambda < 0.1) {
-               lambda = 0.1;
-            } else if (lambda > 0.9) {
-               lambda = 0.9;
-            }
-            *theta = thepos - lambda*(thepos-theneg);
-         }
-
-         /* Compute the residue. */
-         ymthe = y - prj->w[0]*(*theta);
-         tanthe = astTand(*theta);
-         f = xx + ymthe*(ymthe - prj->w[2]/tanthe);
-
-         /* Check for convergence. */
-         if (fabs(f) < tol) break;
-         if (fabs(thepos-theneg) < tol) break;
-
-         /* Redefine the interval. */
-         if (f > 0.0) {
-            thepos = *theta;
-            fpos = f;
-         } else {
-            theneg = *theta;
-            fneg = f;
-         }
-      }
-
-      xp = prj->r0 - ymthe*tanthe;
-      yp = x*tanthe;
-      if (xp == 0.0 && yp == 0.0) {
-         *phi = 0.0;
-      } else {
-         *phi = astATan2d(yp, xp)/astSind(*theta);
-      }
-   }
-
-   return 0;
-}
-
-/*============================================================================
-*   TSC: tangential spherical cube projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "TSC"
-*      prj->flag    TSC
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/4)
-*      prj->w[1]    (4/pi)/r0
-*      prj->astPRJfwd  Pointer to astTSCfwd().
-*      prj->astPRJrev  Pointer to astTSCrev().
-*===========================================================================*/
-
-int astTSCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "TSC");
-   prj->flag   = WCS__TSC;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 45.0;
-      prj->w[1] = 1.0/45.0;
-   } else {
-      prj->w[0] = prj->r0*PI/4.0;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astTSCfwd;
-   prj->astPRJrev = astTSCrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTSCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   int   face;
-   double cthe, l, m, n, rho, x0, xf, y0, yf;
-   const double tol = 1.0e-12;
-
-   x0 = 0.0;
-   xf = 0.0;
-   y0 = 0.0;
-   yf = 0.0;
-
-   if (prj->flag != WCS__TSC) {
-      if (astTSCset(prj)) return 1;
-   }
-
-   cthe = astCosd(theta);
-   l = cthe*astCosd(phi);
-   m = cthe*astSind(phi);
-   n = astSind(theta);
-
-   face = 0;
-   rho  = n;
-   if (l > rho) {
-      face = 1;
-      rho  = l;
-   }
-   if (m > rho) {
-      face = 2;
-      rho  = m;
-   }
-   if (-l > rho) {
-      face = 3;
-      rho  = -l;
-   }
-   if (-m > rho) {
-      face = 4;
-      rho  = -m;
-   }
-   if (-n > rho) {
-      face = 5;
-      rho  = -n;
-   }
-
-   if (face == 0) {
-      xf =  m/rho;
-      yf = -l/rho;
-      x0 =  0.0;
-      y0 =  2.0;
-   } else if (face == 1) {
-      xf =  m/rho;
-      yf =  n/rho;
-      x0 =  0.0;
-      y0 =  0.0;
-   } else if (face == 2) {
-      xf = -l/rho;
-      yf =  n/rho;
-      x0 =  2.0;
-      y0 =  0.0;
-   } else if (face == 3) {
-      xf = -m/rho;
-      yf =  n/rho;
-      x0 =  4.0;
-      y0 =  0.0;
-   } else if (face == 4) {
-      xf =  l/rho;
-      yf =  n/rho;
-      x0 =  6.0;
-      y0 =  0.0;
-   } else if (face == 5) {
-      xf =  m/rho;
-      yf =  l/rho;
-      x0 =  0.0;
-      y0 = -2.0;
-   }
-
-   if (fabs(xf) > 1.0) {
-      if (fabs(xf) > 1.0+tol) {
-         return 2;
-      }
-      xf = copysign(1.0,xf);
-   }
-   if (fabs(yf) > 1.0) {
-      if (fabs(yf) > 1.0+tol) {
-         return 2;
-      }
-      yf = copysign(1.0,yf);
-   }
-
-   *x = prj->w[0]*(xf + x0);
-   *y = prj->w[0]*(yf + y0);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTSCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double l, m, n, xf, yf;
-
-   if (prj->flag != WCS__TSC) {
-      if (astTSCset(prj)) return 1;
-   }
-
-   xf = x*prj->w[1];
-   yf = y*prj->w[1];
-
-   /* Check bounds. */
-   if (fabs(xf) <= 1.0) {
-      if (fabs(yf) > 3.0) return 2;
-   } else {
-      if (fabs(xf) > 7.0) return 2;
-      if (fabs(yf) > 1.0) return 2;
-   }
-
-   /* Map negative faces to the other side. */
-   if (xf < -1.0) xf += 8.0;
-
-   /* Determine the face. */
-   if (xf > 5.0) {
-      /* face = 4 */
-      xf = xf - 6.0;
-      m  = -1.0/sqrt(1.0 + xf*xf + yf*yf);
-      l  = -m*xf;
-      n  = -m*yf;
-   } else if (xf > 3.0) {
-      /* face = 3 */
-      xf = xf - 4.0;
-      l  = -1.0/sqrt(1.0 + xf*xf + yf*yf);
-      m  =  l*xf;
-      n  = -l*yf;
-   } else if (xf > 1.0) {
-      /* face = 2 */
-      xf = xf - 2.0;
-      m  =  1.0/sqrt(1.0 + xf*xf + yf*yf);
-      l  = -m*xf;
-      n  =  m*yf;
-   } else if (yf > 1.0) {
-      /* face = 0 */
-      yf = yf - 2.0;
-      n  = 1.0/sqrt(1.0 + xf*xf + yf*yf);
-      l  = -n*yf;
-      m  =  n*xf;
-   } else if (yf < -1.0) {
-      /* face = 5 */
-      yf = yf + 2.0;
-      n  = -1.0/sqrt(1.0 + xf*xf + yf*yf);
-      l  = -n*yf;
-      m  = -n*xf;
-   } else {
-      /* face = 1 */
-      l  =  1.0/sqrt(1.0 + xf*xf + yf*yf);
-      m  =  l*xf;
-      n  =  l*yf;
-   }
-
-   if (l == 0.0 && m == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(m, l);
-   }
-   *theta = astASind(n);
-
-   return 0;
-}
-
-/*============================================================================
-*   CSC: COBE quadrilateralized spherical cube projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "CSC"
-*      prj->flag    CSC
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/4)
-*      prj->w[1]    (4/pi)/r0
-*      prj->astPRJfwd  Pointer to astCSCfwd().
-*      prj->astPRJrev  Pointer to astCSCrev().
-*===========================================================================*/
-
-int astCSCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "CSC");
-   prj->flag   = WCS__CSC;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 45.0;
-      prj->w[1] = 1.0/45.0;
-   } else {
-      prj->w[0] = prj->r0*PI/4.0;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astCSCfwd;
-   prj->astPRJrev = astCSCrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCSCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   int   face;
-   float cthe, eta, l, m, n, rho, xi;
-   const float tol = 1.0e-7;
-
-   float a, a2, a2b2, a4, ab, b, b2, b4, ca2, cb2, x0, xf, y0, yf;
-   const float gstar  =  1.37484847732;
-   const float mm     =  0.004869491981;
-   const float gamma  = -0.13161671474;
-   const float omega1 = -0.159596235474;
-   const float d0  =  0.0759196200467;
-   const float d1  = -0.0217762490699;
-   const float c00 =  0.141189631152;
-   const float c10 =  0.0809701286525;
-   const float c01 = -0.281528535557;
-   const float c11 =  0.15384112876;
-   const float c20 = -0.178251207466;
-   const float c02 =  0.106959469314;
-
-   eta = 0.0;
-   xi = 0.0;
-   x0 = 0.0;
-   y0 = 0.0;
-
-   if (prj->flag != WCS__CSC) {
-      if (astCSCset(prj)) return 1;
-   }
-
-   cthe = astCosd(theta);
-   l = cthe*astCosd(phi);
-   m = cthe*astSind(phi);
-   n = astSind(theta);
-
-   face = 0;
-   rho  = n;
-   if (l > rho) {
-      face = 1;
-      rho  = l;
-   }
-   if (m > rho) {
-      face = 2;
-      rho  = m;
-   }
-   if (-l > rho) {
-      face = 3;
-      rho  = -l;
-   }
-   if (-m > rho) {
-      face = 4;
-      rho  = -m;
-   }
-   if (-n > rho) {
-      face = 5;
-      rho  = -n;
-   }
-
-   if (face == 0) {
-      xi  =  m;
-      eta = -l;
-      x0  =  0.0;
-      y0  =  2.0;
-   } else if (face == 1) {
-      xi  =  m;
-      eta =  n;
-      x0  =  0.0;
-      y0  =  0.0;
-   } else if (face == 2) {
-      xi  = -l;
-      eta =  n;
-      x0  =  2.0;
-      y0  =  0.0;
-   } else if (face == 3) {
-      xi  = -m;
-      eta =  n;
-      x0  =  4.0;
-      y0  =  0.0;
-   } else if (face == 4) {
-      xi  =  l;
-      eta =  n;
-      x0  =  6.0;
-      y0  =  0.0;
-   } else if (face == 5) {
-      xi  =  m;
-      eta =  l;
-      x0  =  0.0;
-      y0  = -2.0;
-   }
-
-   a =  xi/rho;
-   b = eta/rho;
-
-   a2 = a*a;
-   b2 = b*b;
-   ca2 = 1.0 - a2;
-   cb2 = 1.0 - b2;
-
-   /* Avoid floating underflows. */
-   ab   = fabs(a*b);
-   a4   = (a2 > 1.0e-16) ? a2*a2 : 0.0;
-   b4   = (b2 > 1.0e-16) ? b2*b2 : 0.0;
-   a2b2 = (ab > 1.0e-16) ? a2*b2 : 0.0;
-
-   xf = a*(a2 + ca2*(gstar + b2*(gamma*ca2 + mm*a2 +
-          cb2*(c00 + c10*a2 + c01*b2 + c11*a2b2 + c20*a4 + c02*b4)) +
-          a2*(omega1 - ca2*(d0 + d1*a2))));
-   yf = b*(b2 + cb2*(gstar + a2*(gamma*cb2 + mm*b2 +
-          ca2*(c00 + c10*b2 + c01*a2 + c11*a2b2 + c20*b4 + c02*a4)) +
-          b2*(omega1 - cb2*(d0 + d1*b2))));
-
-   if (fabs(xf) > 1.0) {
-      if (fabs(xf) > 1.0+tol) {
-         return 2;
-      }
-      xf = copysign(1.0,xf);
-   }
-   if (fabs(yf) > 1.0) {
-      if (fabs(yf) > 1.0+tol) {
-         return 2;
-      }
-      yf = copysign(1.0,yf);
-   }
-
-   *x = prj->w[0]*(x0 + xf);
-   *y = prj->w[0]*(y0 + yf);
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astCSCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   int   face;
-   float l, m, n;
-
-   float     a, b, xf, xx, yf, yy, z0, z1, z2, z3, z4, z5, z6;
-   const float p00 = -0.27292696;
-   const float p10 = -0.07629969;
-   const float p20 = -0.22797056;
-   const float p30 =  0.54852384;
-   const float p40 = -0.62930065;
-   const float p50 =  0.25795794;
-   const float p60 =  0.02584375;
-   const float p01 = -0.02819452;
-   const float p11 = -0.01471565;
-   const float p21 =  0.48051509;
-   const float p31 = -1.74114454;
-   const float p41 =  1.71547508;
-   const float p51 = -0.53022337;
-   const float p02 =  0.27058160;
-   const float p12 = -0.56800938;
-   const float p22 =  0.30803317;
-   const float p32 =  0.98938102;
-   const float p42 = -0.83180469;
-   const float p03 = -0.60441560;
-   const float p13 =  1.50880086;
-   const float p23 = -0.93678576;
-   const float p33 =  0.08693841;
-   const float p04 =  0.93412077;
-   const float p14 = -1.41601920;
-   const float p24 =  0.33887446;
-   const float p05 = -0.63915306;
-   const float p15 =  0.52032238;
-   const float p06 =  0.14381585;
-
-   l = 0.0;
-   m = 0.0;
-   n = 0.0;
-
-   if (prj->flag != WCS__CSC) {
-      if (astCSCset(prj)) return 1;
-   }
-
-   xf = x*prj->w[1];
-   yf = y*prj->w[1];
-
-   /* Check bounds. */
-   if (fabs(xf) <= 1.0) {
-      if (fabs(yf) > 3.0) return 2;
-   } else {
-      if (fabs(xf) > 7.0) return 2;
-      if (fabs(yf) > 1.0) return 2;
-   }
-
-   /* Map negative faces to the other side. */
-   if (xf < -1.0) xf += 8.0;
-
-   /* Determine the face. */
-   if (xf > 5.0) {
-      face = 4;
-      xf = xf - 6.0;
-   } else if (xf > 3.0) {
-      face = 3;
-      xf = xf - 4.0;
-   } else if (xf > 1.0) {
-      face = 2;
-      xf = xf - 2.0;
-   } else if (yf > 1.0) {
-      face = 0;
-      yf = yf - 2.0;
-   } else if (yf < -1.0) {
-      face = 5;
-      yf = yf + 2.0;
-   } else {
-      face = 1;
-   }
-
-   xx  =  xf*xf;
-   yy  =  yf*yf;
-
-   z0 = p00 + xx*(p10 + xx*(p20 + xx*(p30 + xx*(p40 + xx*(p50 + xx*(p60))))));
-   z1 = p01 + xx*(p11 + xx*(p21 + xx*(p31 + xx*(p41 + xx*(p51)))));
-   z2 = p02 + xx*(p12 + xx*(p22 + xx*(p32 + xx*(p42))));
-   z3 = p03 + xx*(p13 + xx*(p23 + xx*(p33)));
-   z4 = p04 + xx*(p14 + xx*(p24));
-   z5 = p05 + xx*(p15);
-   z6 = p06;
-
-   a = z0 + yy*(z1 + yy*(z2 + yy*(z3 + yy*(z4 + yy*(z5 + yy*z6)))));
-   a = xf + xf*(1.0 - xx)*a;
-
-   z0 = p00 + yy*(p10 + yy*(p20 + yy*(p30 + yy*(p40 + yy*(p50 + yy*(p60))))));
-   z1 = p01 + yy*(p11 + yy*(p21 + yy*(p31 + yy*(p41 + yy*(p51)))));
-   z2 = p02 + yy*(p12 + yy*(p22 + yy*(p32 + yy*(p42))));
-   z3 = p03 + yy*(p13 + yy*(p23 + yy*(p33)));
-   z4 = p04 + yy*(p14 + yy*(p24));
-   z5 = p05 + yy*(p15);
-   z6 = p06;
-
-   b = z0 + xx*(z1 + xx*(z2 + xx*(z3 + xx*(z4 + xx*(z5 + xx*z6)))));
-   b = yf + yf*(1.0 - yy)*b;
-
-   if (face == 0) {
-      n =  1.0/sqrt(a*a + b*b + 1.0);
-      l = -b*n;
-      m =  a*n;
-   } else if (face == 1) {
-      l =  1.0/sqrt(a*a + b*b + 1.0);
-      m =  a*l;
-      n =  b*l;
-   } else if (face == 2) {
-      m =  1.0/sqrt(a*a + b*b + 1.0);
-      l = -a*m;
-      n =  b*m;
-   } else if (face == 3) {
-      l = -1.0/sqrt(a*a + b*b + 1.0);
-      m =  a*l;
-      n = -b*l;
-   } else if (face == 4) {
-      m = -1.0/sqrt(a*a + b*b + 1.0);
-      l = -a*m;
-      n = -b*m;
-   } else if (face == 5) {
-      n = -1.0/sqrt(a*a + b*b + 1.0);
-      l = -b*n;
-      m = -a*n;
-   }
-
-   if (l == 0.0 && m == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(m, l);
-   }
-   *theta = astASind(n);
-
-   return 0;
-}
-
-/*============================================================================
-*   QSC: quadrilaterilized spherical cube projection.
-*
-*   Given and/or returned:
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "QSC"
-*      prj->flag    QSC
-*      prj->phi0    0.0
-*      prj->theta0  0.0
-*      prj->w[0]    r0*(pi/4)
-*      prj->w[1]    (4/pi)/r0
-*      prj->astPRJfwd  Pointer to astQSCfwd().
-*      prj->astPRJrev  Pointer to astQSCrev().
-*===========================================================================*/
-
-int astQSCset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "QSC");
-   prj->flag   = WCS__QSC;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 45.0;
-      prj->w[1] = 1.0/45.0;
-   } else {
-      prj->w[0] = prj->r0*PI/4.0;
-      prj->w[1] = 1.0/prj->w[0];
-   }
-
-   prj->astPRJfwd = astQSCfwd;
-   prj->astPRJrev = astQSCrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astQSCfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   int   face;
-   double cthe, eta, l, m, n, omega, p, rho, rhu, t, tau, x0, xf, xi, y0, yf;
-   const double tol = 1.0e-12;
-
-   eta = 0.0;
-   x0 = 0.0;
-   xf = 0.0;
-   xi = 0.0;
-   y0 = 0.0;
-   yf = 0.0;
-
-   if (prj->flag != WCS__QSC) {
-      if (astQSCset(prj)) return 1;
-   }
-
-   if (fabs(theta) == 90.0) {
-      *x = 0.0;
-      *y = copysign(2.0*prj->w[0],theta);
-      return 0;
-   }
-
-   cthe = astCosd(theta);
-   l = cthe*astCosd(phi);
-   m = cthe*astSind(phi);
-   n = astSind(theta);
-
-   face = 0;
-   rho  = n;
-   if (l > rho) {
-      face = 1;
-      rho  = l;
-   }
-   if (m > rho) {
-      face = 2;
-      rho  = m;
-   }
-   if (-l > rho) {
-      face = 3;
-      rho  = -l;
-   }
-   if (-m > rho) {
-      face = 4;
-      rho  = -m;
-   }
-   if (-n > rho) {
-      face = 5;
-      rho  = -n;
-   }
-
-   rhu = 1.0 - rho;
-
-   if (face == 0) {
-      xi  =  m;
-      eta = -l;
-      if (rhu < 1.0e-8) {
-         /* Small angle formula. */
-         t = (90.0 - theta)*D2R;
-         rhu = t*t/2.0;
-      }
-      x0  =  0.0;
-      y0  =  2.0;
-   } else if (face == 1) {
-      xi  =  m;
-      eta =  n;
-      if (rhu < 1.0e-8) {
-         /* Small angle formula. */
-         t = theta*D2R;
-         p = fmod(phi,360.0);
-         if (p < -180.0) p += 360.0;
-         if (p >  180.0) p -= 360.0;
-         p *= D2R;
-         rhu = (p*p + t*t)/2.0;
-      }
-      x0  =  0.0;
-      y0  =  0.0;
-   } else if (face == 2) {
-      xi  = -l;
-      eta =  n;
-      if (rhu < 1.0e-8) {
-         /* Small angle formula. */
-         t = theta*D2R;
-         p = fmod(phi,360.0);
-         if (p < -180.0) p += 360.0;
-         p = (90.0 - p)*D2R;
-         rhu = (p*p + t*t)/2.0;
-      }
-      x0  =  2.0;
-      y0  =  0.0;
-   } else if (face == 3) {
-      xi  = -m;
-      eta =  n;
-      if (rhu < 1.0e-8) {
-         /* Small angle formula. */
-         t = theta*D2R;
-         p = fmod(phi,360.0);
-         if (p < 0.0) p += 360.0;
-         p = (180.0 - p)*D2R;
-         rhu = (p*p + t*t)/2.0;
-      }
-      x0  =  4.0;
-      y0  =  0.0;
-   } else if (face == 4) {
-      xi  =  l;
-      eta =  n;
-      if (rhu < 1.0e-8) {
-         /* Small angle formula. */
-         t = theta*D2R;
-         p = fmod(phi,360.0);
-         if (p > 180.0) p -= 360.0;
-         p *= (90.0 + p)*D2R;
-         rhu = (p*p + t*t)/2.0;
-      }
-      x0  =  6;
-      y0  =  0.0;
-   } else if (face == 5) {
-      xi  =  m;
-      eta =  l;
-      if (rhu < 1.0e-8) {
-         /* Small angle formula. */
-         t = (90.0 + theta)*D2R;
-         rhu = t*t/2.0;
-      }
-      x0  =  0.0;
-      y0  = -2;
-   }
-
-   if (xi == 0.0 && eta == 0.0) {
-      xf  = 0.0;
-      yf  = 0.0;
-   } else if (-xi >= fabs(eta)) {
-      omega = eta/xi;
-      tau = 1.0 + omega*omega;
-      xf  = -sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
-      yf  = (xf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
-   } else if (xi >= fabs(eta)) {
-      omega = eta/xi;
-      tau = 1.0 + omega*omega;
-      xf  =  sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
-      yf  = (xf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
-   } else if (-eta > fabs(xi)) {
-      omega = xi/eta;
-      tau = 1.0 + omega*omega;
-      yf  = -sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
-      xf  = (yf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
-   } else if (eta > fabs(xi)) {
-      omega = xi/eta;
-      tau = 1.0 + omega*omega;
-      yf  =  sqrt(rhu/(1.0-1.0/sqrt(1.0+tau)));
-      xf  = (yf/15.0)*(astATand(omega) - astASind(omega/sqrt(tau+tau)));
-   }
-
-   if (fabs(xf) > 1.0) {
-      if (fabs(xf) > 1.0+tol) {
-         return 2;
-      }
-      xf = copysign(1.0,xf);
-   }
-   if (fabs(yf) > 1.0) {
-      if (fabs(yf) > 1.0+tol) {
-         return 2;
-      }
-      yf = copysign(1.0,yf);
-   }
-
-   *x = prj->w[0]*(xf + x0);
-   *y = prj->w[0]*(yf + y0);
-
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astQSCrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   int   direct, face;
-   double l, m, n, omega, rho, rhu, tau, xf, yf, w;
-   const double tol = 1.0e-12;
-
-   l = 0.0;
-   m = 0.0;
-   n = 0.0;
-
-   if (prj->flag != WCS__QSC) {
-      if (astQSCset(prj)) return 1;
-   }
-
-   xf = x*prj->w[1];
-   yf = y*prj->w[1];
-
-   /* Check bounds. */
-   if (fabs(xf) <= 1.0) {
-      if (fabs(yf) > 3.0) return 2;
-   } else {
-      if (fabs(xf) > 7.0) return 2;
-      if (fabs(yf) > 1.0) return 2;
-   }
-
-   /* Map negative faces to the other side. */
-   if (xf < -1.0) xf += 8.0;
-
-   /* Determine the face. */
-   if (xf > 5.0) {
-      face = 4;
-      xf = xf - 6.0;
-   } else if (xf > 3.0) {
-      face = 3;
-      xf = xf - 4.0;
-   } else if (xf > 1.0) {
-      face = 2;
-      xf = xf - 2.0;
-   } else if (yf > 1.0) {
-      face = 0;
-      yf = yf - 2.0;
-   } else if (yf < -1.0) {
-      face = 5;
-      yf = yf + 2.0;
-   } else {
-      face = 1;
-   }
-
-   direct = (fabs(xf) > fabs(yf));
-   if (direct) {
-      if (xf == 0.0) {
-         omega = 0.0;
-         tau = 1.0;
-         rho = 1.0;
-         rhu = 0.0;
-      } else {
-         w = 15.0*yf/xf;
-         omega = astSind(w)/(astCosd(w) - SQRT2INV);
-         tau = 1.0 + omega*omega;
-         rhu = xf*xf*(1.0 - 1.0/sqrt(1.0 + tau));
-         rho = 1.0 - rhu;
-      }
-   } else {
-      if (yf == 0.0) {
-         omega = 0.0;
-         tau = 1.0;
-         rho = 1.0;
-         rhu = 0.0;
-      } else {
-         w = 15.0*xf/yf;
-         omega = astSind(w)/(astCosd(w) - SQRT2INV);
-         tau = 1.0 + omega*omega;
-         rhu = yf*yf*(1.0 - 1.0/sqrt(1.0 + tau));
-         rho = 1.0 - rhu;
-      }
-   }
-
-   if (rho < -1.0) {
-      if (rho < -1.0-tol) {
-         return 2;
-      }
-
-      rho = -1.0;
-      rhu =  2.0;
-      w   =  0.0;
-   } else {
-      w = sqrt(rhu*(2.0-rhu)/tau);
-   }
-
-   if (face == 0) {
-      n = rho;
-      if (direct) {
-         m = w;
-         if (xf < 0.0) m = -m;
-         l = -m*omega;
-      } else {
-         l = w;
-         if (yf > 0.0) l = -l;
-         m = -l*omega;
-      }
-   } else if (face == 1) {
-      l = rho;
-      if (direct) {
-         m = w;
-         if (xf < 0.0) m = -m;
-         n = m*omega;
-      } else {
-         n = w;
-         if (yf < 0.0) n = -n;
-         m = n*omega;
-      }
-   } else if (face == 2) {
-      m = rho;
-      if (direct) {
-         l = w;
-         if (xf > 0.0) l = -l;
-         n = -l*omega;
-      } else {
-         n = w;
-         if (yf < 0.0) n = -n;
-         l = -n*omega;
-      }
-   } else if (face == 3) {
-      l = -rho;
-      if (direct) {
-         m = w;
-         if (xf > 0.0) m = -m;
-         n = -m*omega;
-      } else {
-         n = w;
-         if (yf < 0.0) n = -n;
-         m = -n*omega;
-      }
-   } else if (face == 4) {
-      m = -rho;
-      if (direct) {
-         l = w;
-         if (xf < 0.0) l = -l;
-         n = l*omega;
-      } else {
-         n = w;
-         if (yf < 0.0) n = -n;
-         l = n*omega;
-      }
-   } else if (face == 5) {
-      n = -rho;
-      if (direct) {
-         m = w;
-         if (xf < 0.0) m = -m;
-         l = m*omega;
-      } else {
-         l = w;
-         if (yf < 0.0) l = -l;
-         m = l*omega;
-      }
-   }
-
-   if (l == 0.0 && m == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(m, l);
-   }
-   *theta = astASind(n);
-
-   return 0;
-}
-
-/*============================================================================
-*   HPX: HEALPix projection.
-*
-*   Given:
-*      prj->p[1]   H - the number of facets in longitude.
-*      prj->p[2]   K - the number of facets in latitude
-*
-*   Given and/or returned:
-*      prj->r0      Reset to 180/pi if 0.
-*      prj->phi0    Reset to 0.0 
-*      prj->theta0  Reset to 0.0 
-*
-*   Returned:
-*      prj->flag     HPX
-*      prj->code    "HPX"
-*      prj->n       True if K is odd.
-*      prj->w[0]    r0*(pi/180)
-*      prj->w[1]    (180/pi)/r0
-*      prj->w[2]    (K-1)/K
-*      prj->w[3]    90*K/H
-*      prj->w[4]    (K+1)/2
-*      prj->w[5]    90*(K-1)/H
-*      prj->w[6]    180/H
-*      prj->w[7]    H/360
-*      prj->w[8]    (90*K/H)*r0*(pi/180)
-*      prj->w[9]     (180/H)*r0*(pi/180)
-*      prj->astPRJfwd  Pointer to astHPXfwd().
-*      prj->astPRJrev  Pointer to astHPXrev().
-
-
-*===========================================================================*/
-
-int astHPXset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   strcpy(prj->code, "HPX");
-   prj->flag   = WCS__HPX;
-   prj->phi0   = 0.0;
-   prj->theta0 = 0.0;
-
-   prj->n = ((int)prj->p[2])%2;
-
-   if (prj->r0 == 0.0) {
-      prj->r0 = R2D;
-      prj->w[0] = 1.0;
-      prj->w[1] = 1.0;
-   } else {
-      prj->w[0] = prj->r0*D2R;
-      prj->w[1] = R2D/prj->r0;
-   }
-
-   prj->w[2] = (prj->p[2] - 1.0) / prj->p[2];
-   prj->w[3] = 90.0 * prj->p[2] / prj->p[1];
-   prj->w[4] = (prj->p[2] + 1.0) / 2.0;
-   prj->w[5] = 90.0 * (prj->p[2] - 1.0) / prj->p[1];
-   prj->w[6] = 180.0 / prj->p[1];
-   prj->w[7] = prj->p[1] / 360.0;
-   prj->w[8] = prj->w[3] * prj->w[0];
-   prj->w[9] = prj->w[6] * prj->w[0];
-
-   prj->astPRJfwd = astHPXfwd;
-   prj->astPRJrev = astHPXrev;
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astHPXfwd(phi, theta, prj, x, y)
-
-const double phi, theta;
-struct AstPrjPrm *prj;
-double *x, *y;
-
-{
-   double abssin, sigma, sinthe, phic;
- 
-   if( prj->flag != WCS__HPX ) {
-      if( astHPXset( prj ) ) return 1;
-   }
-
-   sinthe = astSind( theta );
-   abssin = fabs( sinthe );
-
-/* Equatorial zone */
-   if( abssin <= prj->w[2] ) {
-      *x =  prj->w[0] * phi;
-      *y = prj->w[8] * sinthe;
-
-/* Polar zone */
-   } else {
-      if( prj->n || theta > 0.0 ) {
-         phic = -180.0 + (2.0*floor( (phi+180.0) * prj->w[7] ) + 1 ) * prj->w[6];
-
-      } else {
-         phic = -180.0 + (2.0*floor( (phi+180.0) * prj->w[7] + 1/2 ) ) * prj->w[6];
-      }
-
-      sigma = sqrt( prj->p[2]*( 1.0 - abssin ));
-
-      *x = prj->w[0] *( phic + ( phi - phic )*sigma );
-
-      *y = prj->w[9] * ( prj->w[4] - sigma );
-      if( theta < 0 ) *y = -*y;
-      
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astHPXrev(x, y, prj, phi, theta)
-
-const double x, y;
-struct AstPrjPrm *prj;
-double *phi, *theta;
-
-{
-   double absy, sigma, t, yr, xc;
-
-   if (prj->flag != WCS__HPX) {
-      if (astHPXset(prj)) return 1;
-   }
-
-   yr = prj->w[1]*y;
-   absy = fabs( yr );
-
-/* Equatorial zone */
-   if( absy <= prj->w[5] ) {
-      *phi = prj->w[1] * x;
-      t = yr/prj->w[3];
-      if( t < -1.0 || t > 1.0 ) {
-         return 2;
-      } else {
-         *theta = astASind( t );
-      }
-
-/* Polar zone */
-   } else if( absy <= 90 ){
-
-      if( prj->n || yr > 0.0 ) {
-         xc = -180.0 + ( 2.0*floor( ( x + 180.0 )*prj->w[7]  ) + 1.0 )*prj->w[6];
-      } else {
-         xc = -180.0 + 2.0*floor( ( x + 180.0 )*prj->w[7] + 1/2 )*prj->w[6];
-      }       
-
-      sigma = prj->w[4] - absy / prj->w[6];
-
-      if( sigma == 0.0 ) {
-         return 2;
-      } else {
-
-         t = ( x - xc )/sigma;
-         if( fabs( t ) <= prj->w[6] ) {
-            *phi = prj->w[1] *( xc + t );
-         } else {
-            return 2;
-         }
-      }
-
-      t = 1.0 - sigma*sigma/prj->p[2];
-      if( t < -1.0 || t > 1.0 ) {
-         return 2;
-      } else {
-         *theta = astASind( t );
-         if( y < 0 ) *theta = -*theta;
-      }
-
-   } else {
-      return 2;
-   }
-
-   return 0;
-}
diff --git a/ast-5.3-1/proj.h b/ast-5.3-1/proj.h
deleted file mode 100644
index 276e64d..0000000
--- a/ast-5.3-1/proj.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*=============================================================================
-*
-*   WCSLIB - an implementation of the FITS WCS proposal.
-*   Copyright (C) 1995-2002, Mark Calabretta
-*
-*   This library is free software; you can redistribute it and/or modify it
-*   under the terms of the GNU Library General Public License as published
-*   by the Free Software Foundation; either version 2 of the License, or (at
-*   your option) any later version.
-*
-*   This library is distributed in the hope that it will be useful, but
-*   WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
-*   General Public License for more details.
-*
-*   You should have received a copy of the GNU Library General Public License
-*   along with this library; if not, write to the Free Software Foundation,
-*   Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-*   Correspondence concerning WCSLIB may be directed to:
-*      Internet email: mcalabre at atnf.csiro.au
-*      Postal address: Dr. Mark Calabretta,
-*                      Australia Telescope National Facility,
-*                      P.O. Box 76,
-*                      Epping, NSW, 2121,
-*                      AUSTRALIA
-*
-*   Author: Mark Calabretta, Australia Telescope National Facility
-*   $Id: proj.h,v 1.1.1.1 2009/11/02 16:01:16 joye Exp $
-*=============================================================================
-*
-*  This version of proj.h is based on the version in wcslib-2.9, but has
-*  been modified in the following ways by the Starlink project (e-mail: 
-*  ussc at star.rl.ac.uk):
-*     -  Support for non-ANSI C prototypes removed
-*     -  Changed the name of the WCSLIB_PROJ macro to WCSLIB_PROJ_INCLUDED
-*     -  Changed names of all functions and structures to avoid name
-*        clashes with wcslib.
-*     -  Change the maximum number of projection parameters to 100.
-*     -  Added definition of macro WCSLIB_MXPAR, and use it to define
-*        size of projection parameter array within AstPrjPrm structure.
-*     -  Added component "p2" to the AstPrjPrm structure to hold projection
-*        parameters associated with the longitude axis (for use within
-*        the tpn.c file which holds an implementation of the old "TAN with
-*        correction terms" projection).
-*     -  Added prototypes for TPN projection functions (defined in file 
-*        tpn.c).
-*     -  Added prototypes for HPX projection functions.
-*===========================================================================*/
-
-#ifndef WCSLIB_PROJ_INCLUDED
-#define WCSLIB_PROJ_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WCSLIB_MXPAR 100
-
-extern int npcode;
-extern char pcodes[26][4];
-
-struct AstPrjPrm {
-   char   code[4];
-   int    flag;
-   double phi0, theta0;
-   double r0;
-   double *p;
-   double *p2;
-   double w[20];
-   int    n;
-   int (*astPRJfwd)(const double, const double,
-                 struct AstPrjPrm *,
-                 double *, double *);
-   int (*astPRJrev)(const double, const double,
-                 struct AstPrjPrm *,
-                 double *, double *);
-};
-
-   int astPRJset(const char [], struct AstPrjPrm *);
-   int astPRJfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astPRJrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astAZPset(struct AstPrjPrm *);
-   int astAZPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astAZPrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSZPset(struct AstPrjPrm *);
-   int astSZPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSZPrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astTANset(struct AstPrjPrm *);
-   int astTANfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astTANrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSTGset(struct AstPrjPrm *);
-   int astSTGfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSTGrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSINset(struct AstPrjPrm *);
-   int astSINfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSINrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astARCset(struct AstPrjPrm *);
-   int astARCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astARCrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astZPNset(struct AstPrjPrm *);
-   int astZPNfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astZPNrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astZEAset(struct AstPrjPrm *);
-   int astZEAfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astZEArev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astAIRset(struct AstPrjPrm *);
-   int astAIRfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astAIRrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCYPset(struct AstPrjPrm *);
-   int astCYPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCYPrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCEAset(struct AstPrjPrm *);
-   int astCEAfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCEArev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCARset(struct AstPrjPrm *);
-   int astCARfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCARrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astMERset(struct AstPrjPrm *);
-   int astMERfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astMERrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSFLset(struct AstPrjPrm *);
-   int astSFLfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astSFLrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astPARset(struct AstPrjPrm *);
-   int astPARfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astPARrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astMOLset(struct AstPrjPrm *);
-   int astMOLfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astMOLrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astAITset(struct AstPrjPrm *);
-   int astAITfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astAITrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCOPset(struct AstPrjPrm *);
-   int astCOPfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCOPrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCOEset(struct AstPrjPrm *);
-   int astCOEfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCOErev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCODset(struct AstPrjPrm *);
-   int astCODfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCODrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCOOset(struct AstPrjPrm *);
-   int astCOOfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCOOrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astBONset(struct AstPrjPrm *);
-   int astBONfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astBONrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astPCOset(struct AstPrjPrm *);
-   int astPCOfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astPCOrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astTSCset(struct AstPrjPrm *);
-   int astTSCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astTSCrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCSCset(struct AstPrjPrm *);
-   int astCSCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astCSCrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astQSCset(struct AstPrjPrm *);
-   int astQSCfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astQSCrev(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astHPXset(struct AstPrjPrm *);
-   int astHPXfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astHPXrev(const double, const double, struct AstPrjPrm *, double *, double *);
-
-   int astTPNset(struct AstPrjPrm *);
-   int astTPNfwd(const double, const double, struct AstPrjPrm *, double *, double *);
-   int astTPNrev(const double, const double, struct AstPrjPrm *, double *, double *);
-
-extern const char *astPRJset_errmsg[];
-extern const char *astPRJfwd_errmsg[];
-extern const char *astPRJrev_errmsg[];
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* WCSLIB_PROJ_INCLUDED */
diff --git a/ast-5.3-1/ratemap.c b/ast-5.3-1/ratemap.c
deleted file mode 100644
index 52de385..0000000
--- a/ast-5.3-1/ratemap.c
+++ /dev/null
@@ -1,2011 +0,0 @@
-/*
-*class++
-*  Name:
-*     RateMap
-
-*  Purpose:
-*     Mapping which represents differentiation.
-
-*  Constructor Function:
-c     astRateMap
-f     AST_RATEMAP
-
-*  Description:
-*     A RateMap is a Mapping which represents a single element of the
-*     Jacobian matrix of another Mapping. The Mapping for which the
-*     Jacobian is required is specified when the new RateMap is created, 
-*     and is referred to as the "encapsulated Mapping" below.
-*
-*     The number of inputs to a RateMap is the same as the number of inputs 
-*     to its encapsulated Mapping. The number of outputs from a RateMap
-*     is always one. This one output equals the rate of change of a
-*     specified output of the encapsulated Mapping with respect to a
-*     specified input of the encapsulated Mapping (the input and output 
-*     to use are specified when the RateMap is created).
-*
-*     A RateMap which has not been inverted does not define an inverse 
-*     transformation. If a RateMap has been inverted then it will define
-*     an inverse transformation but not a forward transformation.
-
-*  Inheritance:
-*     The RateMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The RateMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The RateMap class does not define any new functions beyond those
-f     The RateMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     10-FEB-2004 (DSB):
-*        Original version.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS RateMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "ratemap.h"             /* Interface definition for this class */
-#include "unitmap.h"             /* Unit Mappings */
-#include "frame.h"               /* Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(RateMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(RateMap,Class_Init)
-#define class_vtab astGLOBAL(RateMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstRateMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstRateMap *astRateMapId_( void *, int, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two RateMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     RateMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two RateMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a RateMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the RateMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstRateMap *that;        
-   AstRateMap *this;        
-   int nin;
-   int nout;
-   int result;
-   int that_inv;
-   int this_inv;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two RateMap structures. */
-   this = (AstRateMap *) this_object;
-   that = (AstRateMap *) that_object;
-
-/* Check the second object is a RateMap. We know the first is a
-   RateMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsARateMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two RateMaps differ, it may still be possible 
-   for them to be equivalent. First compare the RateMaps if their Invert 
-   flags are the same. In this case all the attributes of the two RateMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-/* Temporarily re-instate the original Invert flag values. */
-            this_inv = astGetInvert( this->map );
-            that_inv = astGetInvert( that->map );
-            astSetInvert( this->map, this->invert );
-            astSetInvert( that->map, that->invert );
-
-            if( astEqual( this->map, that->map ) &&
-                this->iin == that->iin &&
-                this->iout == that->iout ){
-               result = 1;
-            }
-
-/* Restore the original Invert flag values. */
-            astSetInvert( this->map, this_inv );
-            astSetInvert( that->map, that_inv );
-
-/* If the Invert flags for the two RateMaps differ, the attributes of the two 
-   RateMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a RateMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     RateMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied RateMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the RateMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstRateMap *this;         /* Pointer to RateMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the RateMap structure. */
-   this = (AstRateMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astGetObjSize( this->map );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-void astInitRateMapVtab_(  AstRateMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitRateMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a RateMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     void astInitRateMapVtab( AstRateMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     RateMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the RateMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsARateMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   mapping->RemoveRegions = RemoveRegions;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_mapsplit = mapping->MapSplit;
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "RateMap", "Differential Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     RateMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstRateMap *this;       /* Pointer to RateMap structure */
-   int result;             /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the RateMap structure. */
-   this = (AstRateMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->map, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a RateMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     RateMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated RateMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated RateMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated RateMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the RateMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        RateMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated RateMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *emap1;
-   AstMapping *emap2;
-   AstMapping *emap;
-   AstMapping *smap;
-   AstRateMap *map;  
-   AstRateMap *rmap1;  
-   AstRateMap *rmap2;  
-   int cancel;
-   int map_inv;      
-   int nax;           
-   int old_inv2;     
-   int old_inv;     
-   int old_winv;     
-   int result;       
-
-/* Initialise. */
-   result = -1;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Initialisation to avoid compiler warnings. */
-   nax = 0;
-
-/* Get a pointer to this RateMap. */
-   map = (AstRateMap *) this;
-
-/* Temporarily set its Invert flag to the requested value. */
-   map_inv = astGetInvert( map );
-   astSetInvert( map, ( *invert_list )[ where ] );
-
-/* Get the encapsulated Mapping, and temporarily set its Invert attribute 
-   back to the value it had when the RateMap was created, saving the current 
-   Invert value so that it can be re-instated later. */
-   emap = map->map;
-   old_inv = astGetInvert( emap );
-   astSetInvert( emap, map->invert );
-
-/* First try to simplify the RateMap by simplifying its encapsulated
-   Mapping. */
-   smap = astSimplify( emap );
-
-/* If any simplification took place, create a new RateMap with the
-   simplified mapping. */
-   if( smap != emap ) {
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) astRateMap( smap, map->iout, map->iin, "", status );
-      result = where;
-    
-/* The only other simplication which can be performed is to cancel a RateMap
-   with its own inverse in series. */
-   } else if( series ) {
-
-/* Indicate we have nothing to cancel with as yet. */
-      cancel = -1;
-
-/* First consider the lower neighbour. */
-      if( where > 0 && astIsARateMap( ( *map_list )[ where - 1 ] ) ) {
-
-/* Check the Invert flags are opposite */
-         if( ( *invert_list )[ where ] != ( *invert_list )[ where - 1 ] ) {
-            rmap1 = map;
-            rmap2 = (AstRateMap *) ( *map_list )[ where - 1 ];             
-
-/* Check the input and output indices are equal. */
-            if( rmap1->iin == rmap2->iin &&
-                rmap1->iout == rmap2->iout ) {
-
-/* Check the encapsulated Mappings are equal. */
-               emap1 = emap;
-               emap2 = rmap2->map;
-               old_winv = astGetInvert( rmap2 );
-               astSetInvert( rmap2, ( *invert_list )[ where - 1 ] );
-               old_inv2 = astGetInvert( emap2 );
-               astSetInvert( emap2,  rmap2->invert );
-   
-               if( astEqual( emap1, emap2 ) ) cancel = where - 1;
-
-               astSetInvert( emap2,  old_inv2 );
-               astSetInvert( rmap2, old_winv );
-
-               nax = astGetNout( rmap1 );
-            }
-         }
-      }
-
-/* Likewise consider the upper neighbour. */
-      if( cancel == -1 && where + 1 < *nmap && 
-          astIsARateMap( ( *map_list )[ where + 1 ] ) ) {
-
-         if( ( *invert_list )[ where ] != ( *invert_list )[ where + 1 ] ) {
-            rmap1 = map;
-            rmap2 = (AstRateMap *) ( *map_list )[ where + 1 ];
-            if( rmap1->iin == rmap2->iin &&
-                rmap1->iout == rmap2->iout ) {
-               emap1 = emap;
-               emap2 = rmap2->map;
-               old_winv = astGetInvert( rmap2 );
-               astSetInvert( rmap2, ( *invert_list )[ where + 1 ] );
-               old_inv2 = astGetInvert( emap2 );
-               astSetInvert( emap2,  rmap2->invert );
-   
-               if( astEqual( emap1, emap2 ) ) cancel = where + 1;
-   
-               astSetInvert( emap2,  old_inv2 );
-               astSetInvert( rmap2, old_winv );
-   
-               nax = astGetNin( rmap1 );
-            }
-         }
-      }
-
-/* If we can cancel with a neightbour, do so. */
-      if( cancel != -1 ) {
-         (void) astAnnul( ( *map_list )[ where ] );
-         (void) astAnnul( ( *map_list )[ cancel ] );
-         ( *map_list )[ where ] = (AstMapping *) astUnitMap( nax, "", status );
-         ( *invert_list )[ where ] = 0;
-         ( *map_list )[ cancel ] = (AstMapping *) astUnitMap( nax, "", status );
-         ( *invert_list )[ cancel ] = 0;
-          result = ( cancel < where ) ? cancel : where;
-      }
-   }
-
-/* Free resources. */
-   smap = astAnnul( smap );
-
-/* Reset the original Invert attribute for the encapsulated Mapping. */
-   astSetInvert( emap, old_inv );
-
-/* Reset the original Invert attribute for the specified RateMap */
-   astSetInvert( map, map_inv );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     RateMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     RateMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing RateMap. This is only possible if the specified inputs
-*     correspond to some subset of the RateMap outputs. That is, there
-*     must exist a subset of the RateMap outputs for which each output
-*     depends only on the selected RateMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied RateMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the RateMap to be split (the RateMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied RateMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied RateMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied RateMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstMapping *emap;          /* Pointer to Mapping encapsulated by RateMap */
-   AstMapping *remap;         /* Split Mapping encapsulated by RateMap */
-   AstRateMap *this;          /* Pointer to RateMap structure */
-   int *eres;                 /* Outputs used by split Mapping */
-   int *result;               /* Array holding returned output inedx */
-   int ax1;                   /* New index of output being differentiated */
-   int ax2;                   /* New index of output being varied */
-   int i;                     /* Loop count */
-   int nout;                  /* No. of outputs in the split Mapping */
-   int old_inv;               /* Original Invert flag for emap */ 
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
-   result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. Note we cannot
-   produce the Mapping if the RaterMap has been inverted. */
-   if( !result && !astGetInvert( this_map ) ) {
-
-/* Get a pointer to the RateMap structure. */
-      this = (AstRateMap *) this_map;
-
-/* Temporarily reset the Invert attribute of the encapsulated Mapping
-   back to the value it had when the RateMap was created. */
-      emap = this->map;
-      old_inv = astGetInvert( emap );
-      astSetInvert( emap, this->invert );
-
-/* Attempt to split the encapsulated Mapping */
-      eres = astMapSplit( emap, nin, in, &remap );
-
-/* We can only continue if this was succesful. */
-      if( eres ) {
-
-/* Check that the input which the RateMap varies is one of the selected
-   inputs. */
-         ax2 = -1;
-         for( i = 0; i < nin; i++ ) {
-            if( in[ i ] == this->iin ) {
-               ax2 = i;
-               break;
-            }
-         }
-
-/* Check that the output which the RateMap differentiates is one of the 
-   outputs of the "remap" Mapping. */
-         ax1 = -1;
-         nout = astGetNout( remap );
-         for( i = 0; i < nout; i++ ) {
-            if( eres[ i ] == this->iout ) {
-               ax1 = i;
-               break;
-            }
-         }
-
-/* If possible create the required Mapping and returned array. */
-         if( ax1 != -1 && ax2 != -1 ) {
-            *map = (AstMapping *) astRateMap( remap, ax1, ax2, "", status );
-            result = astMalloc( sizeof( int ) );
-            if( astOK ) *result= 0;
-         }
-
-/* Free resources */
-         eres = astFree( eres );
-         remap = astAnnul( remap );
-      }
-
-/* Re-instate the original Invert flag in the Mapping encapsulated by the
-   supplied RateMap. */
-      astSetInvert( emap, old_inv );
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     RateMap method (over-rides the astRemoveRegions method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a CmpMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel CmpMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the RateMap class invokes the
-*     astRemoveRegions method on the encapsulated Mapping, and returns a
-*     new RateMap containing the resulting Mapping.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *newmap;           /* New component Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstRateMap *new;              /* Pointer to new RateMap */
-   AstRateMap *this;             /* Pointer to RateMap structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the RateMap. */
-   this = (AstRateMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the component Mapping. */
-   newmap = astRemoveRegions( this->map );
-
-/* If the Mapping was not modified, just return a clone of the supplied
-   pointer. */
-   if( this->map == newmap ) {
-      result = astClone( this );
-
-/* Otherwise, we need to create a new RateMap to return. */
-   } else {
-
-/* If the new Mapping is a Frame (as will be the case if the original
-   Mapping was a Region), use a UnitMap instead. */
-      if( astIsAFrame( newmap ) ) {
-         (void) astAnnul( newmap );
-         newmap = (AstMapping *) astUnitMap( astGetNin( this ), " ", status );
-      }
-
-/* Take a deep copy of the supplied RateMap and then modify the Mapping
-   so that we retain any extra information in the supplied RateMap. */
-      new = astCopy( this );
-      (void) astAnnul( new->map );
-      new->map = astClone( newmap );
-      result = (AstMapping *) new;
-   }
-
-/* Free resources. */
-   newmap = astAnnul( newmap );
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a RateMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     RateMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a RateMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Mapping.
-*     This implies applying each of the RateMap's component Mappings in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the RateMap.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the RateMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstMapping *emap;             
-   AstPointSet *result;          
-   AstRateMap *map;              
-   double **ptr2;
-   double **ptr;
-   double *pout;
-   double *work;
-   int ic;
-   int iin;
-   int iout;
-   int ipoint;
-   int ncoord;
-   int npoint;
-   int old_inv;                  
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the RateMap. */
-   map = (AstRateMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
-   Mappings of the RateMap to generate the output coordinate values. */
-
-/* Determine whether to apply the forward or inverse Mapping, according to the
-   direction specified and whether the Mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* The RateMap class does not have an inverse transformation. */
-   if( !forward ) {
-      astError( AST__INTER, "astTransform(%s): The %s class does not have "
-                "an inverse transformation (AST internal programming error).", status,
-                astGetClass( this ), astGetClass( this ) );
-
-/* Otherwise use the astRate method on the encapsulated Maping to
-   determine the required rate of change at each supplied input point. */
-   } else {
-
-/* Temporarily reset the Invert attribute of the encapsulated Mapping
-   back to the value it had when the RateMap was created. */
-      emap = map->map;
-      old_inv = astGetInvert( emap );
-      astSetInvert( emap, map->invert );
-
-/* Note the indices of the input and output to use. */
-      iin = map->iin;
-      iout = map->iout;
-
-/* Get pointers to the axis values in the supplied PointSet. */
-      ptr = astGetPoints( in );
-      ncoord = astGetNcoord( in );
-      npoint = astGetNpoint( in );
-
-/* Work space to hold an input position. */
-      work = astMalloc( sizeof( double )*(size_t) ncoord );
-
-/* Get a pointer to the axis values in the results PointSet. */
-      ptr2 = astGetPoints( result );
-      pout = ptr2[ 0 ];
-      if( astOK ) {
-
-/* Loop round each point in the supplied PointSet. */
-         for( ipoint = 0; ipoint < npoint; ipoint++ ) {
-
-/* Copy this point into the work array. */
-            for( ic = 0; ic < ncoord; ic++ ) work[ ic ] = ptr[ ic ][ ipoint ];
-
-/* Find the rate of change of the specified output of the encapsulated
-   Mapping with respect to the specified input. */                  
-            *(pout++) = astRate( emap, work, iout, iin );
-         }
-      }
-
-/* Re-instate the original Invert flag. */
-      astSetInvert( emap, old_inv );
-
-/* Free resources */
-      work = astFree( work );
-
-   }
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for RateMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for RateMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Mappings within the RateMap.
-*/
-
-/* Local Variables: */
-   AstRateMap *in;                /* Pointer to input RateMap */
-   AstRateMap *out;               /* Pointer to output RateMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output RateMaps. */
-   in = (AstRateMap *) objin;
-   out = (AstRateMap *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Mappings from the output RateMap. */
-   out->map = NULL;
-
-/* Make copies of these Mappings and store pointers to them in the output
-   RateMap structure. */
-   out->map = astCopy( in->map );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for RateMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for RateMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstRateMap *this;              /* Pointer to RateMap */
-
-/* Obtain a pointer to the RateMap structure. */
-   this = (AstRateMap *) obj;
-
-/* Annul the pointers to the component Mappings. */
-   this->map = astAnnul( this->map );
-
-/* Clear the remaining RateMap variables. */
-   this->invert = 0;
-   this->iin = 0;
-   this->iout = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for RateMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the RateMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the RateMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstRateMap *this;              /* Pointer to the RateMap structure */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the RateMap structure. */
-   this = (AstRateMap *) this_object;
-
-/* Write out values representing the instance variables for the RateMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Input axis. */
-/* ------------ */
-   ival = this->iin;
-   set = ( ival != 0 );
-   astWriteInt( channel, "IIn", set, 0, ival, "Index of Mapping input" );
-
-/* Output axis. */
-/* ------------ */
-   ival = this->iout;
-   set = ( ival != 0 );
-   astWriteInt( channel, "IOut", set, 0, ival, "Index of Mapping output" );
-
-/* Invert flag. */
-/* ------------ */
-   ival = this->invert;
-   set = ( ival != 0 );
-   astWriteInt( channel, "Inv", set, 0, ival,
-                ival ? "Mapping used in inverse direction" :
-                       "Mapping used in forward direction" );
-
-/* Mapping. */ 
-/* -------- */
-   astWriteObject( channel, "Map", 1, 1, this->map, 
-                   "Mapping to be differentiated" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsARateMap and astCheckRateMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(RateMap,Mapping)
-astMAKE_CHECK(RateMap)
-
-AstRateMap *astRateMap_( void *map_void, int ax1, int ax2, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astRateMap
-
-*  Purpose:
-*     Create a RateMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     AstRateMap *astRateMap( AstMapping *map, int ax1, int ax2, const char *options, int *status, ... )
-
-*  Class Membership:
-*     RateMap constructor.
-
-*  Description:
-*     This function creates a new RateMap and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     map
-*        Pointer to the Mapping to differentiate.
-*     ax1
-*        zero-based index of the "map" output which is to be differentiated.
-*     ax2
-*        Zero-based index of the "map" input which is to be varied.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new RateMap. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new RateMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic RateMap constructor which is
-*     available via the protected interface to the RateMap class.  A
-*     public interface is provided by the astRateMapId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "map" parameter is of type (void *) and is converted and validated 
-*     within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRateMap *new;              /* Pointer to new RateMap */
-   AstMapping *map;              /* Pointer to Mapping structure */
-   va_list args;                 /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Mapping structures provided. */
-   map = astCheckMapping( map_void );
-   if ( astOK ) {
-
-/* Initialise the RateMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitRateMap( NULL, sizeof( AstRateMap ), !class_init, &class_vtab,
-                           "RateMap", map, ax1, ax2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new RateMap's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new RateMap. */
-   return new;
-}
-
-AstRateMap *astRateMapId_( void *map_void, int ax1, int ax2, 
-                           const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astRateMap
-f     AST_RATEMAP
-
-*  Purpose:
-*     Create a RateMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "ratemap.h"
-c     AstRateMap *astRateMap( AstMapping *map, int ax1, int ax2,
-c                             const char *options, ... )
-f     RESULT = AST_RATEMAP( MAP, AX1, AX2, OPTIONS, STATUS )
-
-*  Class Membership:
-*     RateMap constructor.
-
-*  Description:
-*     This function creates a new RateMap and optionally initialises
-*     its attributes.
-*
-*     A RateMap is a Mapping which represents a single element of the
-*     Jacobian matrix of another Mapping. The Mapping for which the
-*     Jacobian is required is specified when the new RateMap is created, 
-*     and is referred to as the "encapsulated Mapping" below.
-*
-*     The number of inputs to a RateMap is the same as the number of inputs 
-*     to its encapsulated Mapping. The number of outputs from a RateMap
-*     is always one. This one output equals the rate of change of a
-*     specified output of the encapsulated Mapping with respect to a
-*     specified input of the encapsulated Mapping (the input and output 
-*     to use are specified when the RateMap is created).
-*
-*     A RateMap which has not been inverted does not define an inverse 
-*     transformation. If a RateMap has been inverted then it will define
-*     an inverse transformation but not a forward transformation.
-
-*  Parameters:
-c     map
-f     MAP = INTEGER (Given)
-*        Pointer to the encapsulated Mapping.
-c     ax1
-f     AX1 = INTEGER (Given)
-*        Index of the output from the encapsulated Mapping for which the 
-*        rate of change is required. This corresponds to the delta
-*        quantity forming the numerator of the required element of the 
-*        Jacobian matrix. The first axis has index 1.
-c     ax2
-f     AX2 = INTEGER (Given)
-*        Index of the input to the encapsulated Mapping which is to be
-*        varied. This corresponds to the delta quantity forming the 
-*        denominator of the required element of the Jacobian matrix.
-*        The first axis has index 1.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new RateMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new RateMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astRateMap()
-f     AST_RATEMAP = INTEGER
-*        A pointer to the new RateMap.
-
-*  Notes:
-*     - The forward transformation of the encapsulated Mapping must be
-*     defined. 
-c     - Note that the component Mappings supplied are not copied by
-c     astRateMap (the new RateMap simply retains a reference to
-c     them). They may continue to be used for other purposes, but
-c     should not be deleted. If a RateMap containing a copy of its
-c     component Mappings is required, then a copy of the RateMap should
-c     be made using astCopy.
-f     - Note that the component Mappings supplied are not copied by
-f     AST_RATEMAP (the new RateMap simply retains a reference to
-f     them). They may continue to be used for other purposes, but
-f     should not be deleted. If a RateMap containing a copy of its
-f     component Mappings is required, then a copy of the RateMap should
-f     be made using AST_COPY.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astRateMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astRateMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "map" parameter is of type 
-*     (void *) and is converted from an ID value to a pointer and 
-*     validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astRateMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRateMap *new;              /* Pointer to new RateMap */
-   AstMapping *map;              /* Pointer to Mapping structure */
-   va_list args;                 /* Variable argument list */
-
-/* Pointer to inherited status value */
-   int *status;                  
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain the Mapping pointer from the ID supplied and validate the
-   pointer to ensure it identifies a valid Mapping. */
-   map = astVerifyMapping( astMakePointer( map_void ) );
-   if ( astOK ) {
-
-/* Initialise the RateMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitRateMap( NULL, sizeof( AstRateMap ), !class_init, &class_vtab,
-                           "RateMap", map, ax1 - 1, ax2 - 1 );
-
-/* If successful, note that the virtual function table has been initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new RateMap's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new RateMap. */
-   return astMakeId( new );
-}
-
-AstRateMap *astInitRateMap_( void *mem, size_t size, int init,
-                           AstRateMapVtab *vtab, const char *name,
-                           AstMapping *map, int ax1, int ax2, int *status ) {
-/*
-*+
-*  Name:
-*     astInitRateMap
-
-*  Purpose:
-*     Initialise a RateMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     AstRateMap *astInitRateMap( void *mem, size_t size, int init,
-*                                 AstRateMapVtab *vtab, const char *name,
-*                                 AstMapping *map, int ax1, int ax2 )
-
-*  Class Membership:
-*     RateMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new RateMap object. It allocates memory (if necessary) to
-*     accommodate the RateMap plus any additional data associated with the
-*     derived class. It then initialises a RateMap structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a RateMap at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the RateMap is to be initialised.
-*        This must be of sufficient size to accommodate the RateMap data
-*        (sizeof(RateMap)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the RateMap (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        RateMap structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the RateMap's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new RateMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     map
-*        Pointer to the Mapping.
-*     ax1
-*        Zero-based index of output axis.
-*     ax2
-*        Zero-based index of input axis.
-
-*  Returned Value:
-*     A pointer to the new RateMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstRateMap *new;              /* Pointer to new RateMap */
-   int nin;                      /* No. input coordinates for RateMap */
-   int nout;                     /* No. output coordinates for RateMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitRateMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Report an error if "map" has no forward transformation. */
-   if( !astGetTranForward( map ) && astOK ) {
-      astError( AST__INTRD, "astInitRateMap(%s): The supplied Mapping "
-              "is not able to transform coordinates in the forward direction.", status,
-              name );
-   }
-
-/* Check that the input and output axis indices are valid. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-   if( ( ax1 < 0 || ax1 >= nout ) && astOK ) {
-      astError( AST__INNCO, "astInitRateMap(%s): The output axis %d is out "
-                "of range - it should be in the range 1 to %d.", status, name, 
-                ax1 + 1, nout );
-   }
-   if( ( ax2 < 0 || ax2 >= nin ) && astOK ) {
-      astError( AST__INNCO, "astInitRateMap(%s): The input axis %d is out "
-                "of range - it should be in the range 1 to %d.", status, name, 
-                ax2 + 1, nin );
-   }
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the RateMap structure, allocating memory if necessary. Specify
-   the number of input and output coordinates and in which directions the
-   Mapping should be defined. */
-   if ( astOK ) {
-      new = (AstRateMap *) astInitMapping( mem, size, 0,
-                                          (AstMappingVtab *) vtab, name,
-                                          nin, 1, 1, 0 );
-
-      if ( astOK ) {
-
-/* Initialise the RateMap data. */
-/* --------------------------- */
-/* Store a pointer to the encapsulated Mapping. */
-         new->map = astClone( map );
-
-/* Save the initial values of the inversion flag for this Mapping. */
-         new->invert = astGetInvert( map );
-
-/* Save the input and output axis indices. */
-         new->iout = ax1;
-         new->iin = ax2;
-
-/* If an error occurred, clean up by annulling the Mapping pointers and
-   deleting the new object. */
-         if ( !astOK ) {
-            new->map = astAnnul( new->map );
-            new = astDelete( new );
-         }
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstRateMap *astLoadRateMap_( void *mem, size_t size,
-                             AstRateMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadRateMap
-
-*  Purpose:
-*     Load a RateMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "ratemap.h"
-*     AstRateMap *astLoadRateMap( void *mem, size_t size,
-*                                 AstRateMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     RateMap loader.
-
-*  Description:
-*     This function is provided to load a new RateMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     RateMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a RateMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the RateMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        RateMap data (sizeof(RateMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the RateMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the RateMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstRateMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new RateMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the RateMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "RateMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new RateMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRateMap *new;               /* Pointer to the new RateMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this RateMap. In this case the
-   RateMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstRateMap );
-      vtab = &class_vtab;
-      name = "RateMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitRateMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built RateMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "RateMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Invert flag. */
-/* ------------ */
-      new->invert = astReadInt( channel, "inv", 0 );
-      new->invert = ( new->invert != 0 );
-
-/* Input and output axes. */
-/* ---------------------- */
-      new->iin = astReadInt( channel, "iin", 0 );
-      new->iout = astReadInt( channel, "iout", 0 );
-
-/* Mapping. */
-/* -------- */
-      new->map = astReadObject( channel, "map", NULL );
-
-/* If an error occurred, clean up by deleting the new RateMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new RateMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/ratemap.h b/ast-5.3-1/ratemap.h
deleted file mode 100644
index 85ab615..0000000
--- a/ast-5.3-1/ratemap.h
+++ /dev/null
@@ -1,276 +0,0 @@
-#if !defined( RATEMAP_INCLUDED )  /* Include this file only once */
-#define RATEMAP_INCLUDED
-/*
-*+
-*  Name:
-*     ratemap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the RateMap class.
-
-*  Invocation:
-*     #include "ratemap.h"
-
-*  Description:
-*     This include file defines the interface to the RateMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc. needed to use this class.
-
-*  Inheritance:
-*     The RateMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Merge a RateMap within a sequence of Mappings.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsARateMap
-*           Test class membership.
-*        astRateMap
-*           Create a RateMap.
-*
-*     Protected:
-*        astCheckRateMap
-*           Validate class membership.
-*        astInitRateMap
-*           Initialise a RateMap.
-*        astInitRateMapVtab
-*           Initialise the virtual function table for the RateMap class.
-*        astLoadRateMap
-*           Load a RateMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstRateMap
-*           RateMap object type.
-*
-*     Protected:
-*        AstRateMapVtab
-*           RateMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     7-DEC-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* RateMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstRateMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstMapping *map;              /* Pointer to the Mapping */
-   int invert;                   /* Inversion flag for Mapping */
-   int iin;                      /* Index of Mapping input to vary */
-   int iout;                     /* Index of Mapping output to measure */
-} AstRateMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstRateMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstRateMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstRateMapGlobals {
-   AstRateMapVtab Class_Vtab;
-   int Class_Init;
-} AstRateMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitRateMapGlobals_( AstRateMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(RateMap)           /* Check class membership */
-astPROTO_ISA(RateMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstRateMap *astRateMap_( void *, int, int, const char *, int *, ...);
-#else
-AstRateMap *astRateMapId_( void *, int, int, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstRateMap *astInitRateMap_( void *, size_t, int, AstRateMapVtab *,
-                             const char *, AstMapping *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitRateMapVtab_( AstRateMapVtab *, const char *, int * );
-
-/* Loader. */
-AstRateMap *astLoadRateMap_( void *, size_t, AstRateMapVtab *,
-                             const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckRateMap(this) astINVOKE_CHECK(RateMap,this,0)
-#define astVerifyRateMap(this) astINVOKE_CHECK(RateMap,this,1)
-
-/* Test class membership. */
-#define astIsARateMap(this) astINVOKE_ISA(RateMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astRateMap astINVOKE(F,astRateMap_)
-#else
-#define astRateMap astINVOKE(F,astRateMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitRateMap(mem,size,init,vtab,name,map,iin,iout) \
-astINVOKE(O,astInitRateMap_(mem,size,init,vtab,name,astCheckMapping(map),iin,iout,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitRateMapVtab(vtab,name) astINVOKE(V,astInitRateMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadRateMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadRateMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckRateMap to validate RateMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/region.c b/ast-5.3-1/region.c
deleted file mode 100644
index dd7c223..0000000
--- a/ast-5.3-1/region.c
+++ /dev/null
@@ -1,12649 +0,0 @@
-/*
-*class++
-*  Name:
-*     Region
-
-*  Purpose:
-*     Represents a region within a coordinate system.
-
-*  Constructor Function:
-*     None.
-
-*  Description:
-*     This class provides the basic facilities for describing a region within 
-*     a specified coordinate system. However, the Region class does not
-*     have a constructor function of its own, as it is simply a container 
-*     class for a family of specialised sub-classes such as Circle, Box, etc, 
-*     which implement Regions with particular shapes.
-*
-*     All sub-classes of Region require a Frame to be supplied when the Region
-*     is created. This Frame describes the coordinate system in which the
-*     Region is defined, and is referred to as the "encapsulated Frame" below. 
-*     Constructors will also typically required one or more positions to be 
-*     supplied which define the location and extent of the region. These 
-*     positions must be supplied within the encapsulated Frame.
-*
-*     The Region class inherits from the Frame class, and so a Region can be 
-*     supplied where-ever a Frame is expected. In these cases, supplying a 
-*     Region is equivalent to supplying a reference to its encapsulated Frame. 
-*     Thus all the methods of the Frame class can be used on the Region class. 
-*     For instance, the 
-c     astFormat function
-f     AST_FORMAT routine
-*     may be used on a Region to format an axis value. 
-*
-*     In addition, since Frame inherits from Mapping, a Region is also a sort 
-*     of Mapping. Transforming positions by supplying a Region to one of the
-c     astTran<X> functions
-f     AST_TRAN<X> routines
-*     is the way to determine if a given position is inside or outside the 
-*     Region. When used as a Mapping, most classes of Frame are equivalent to 
-*     a UnitMap. However, the Region class modifies this behaviour so that a 
-*     Region acts like a UnitMap only for input positions which are within the 
-*     area represented by the Region. Input positions which are outside the 
-*     area produce bad output values (i.e. the output values are equal to 
-*     AST__BAD). This behaviour is the same for both the forward and the 
-*     inverse transformation. In this sense the "inverse transformation"
-*     is not a true inverse of the forward transformation, since applying
-*     the forward transformation to a point outside the Region, and then
-*     applying the inverse transformation results, in a set of AST__BAD axis
-*     values rather than the original axis values. If required, the 
-c     astRemoveRegions 
-f     AST_REMOVEREGIONS 
-*     function can be used to remove the "masking" effect of any Regions
-*     contained within a compound Mapping or FrameSet. It does this by 
-*     replacing each Region with a UnitMap or equivalent Frame (depending
-*     on the context in which the Region is used).
-*
-*     If the coordinate system represented by the Region is changed (by
-*     changing the values of one or more of the attribute which the Region
-*     inherits from its encapsulated Frame), the area represented by 
-*     the Region is mapped into the new coordinate system. For instance, let's 
-*     say a Circle (a subclass of Region) is created, a SkyFrame being
-*     supplied to the constructor so that the Circle describes a circular 
-*     area on the sky in FK4 equatorial coordinates. Since Region inherits 
-*     from Frame, the Circle will have a System attribute and this attribute 
-*     will be set to "FK4". If the System attribute of the Region is then 
-*     changed from FK4 to FK5, the circular area represented by the Region 
-*     will automatically be mapped from the FK4 system into the FK5 system.
-*     In general, changing the coordinate system in this way may result in the 
-*     region changing shape - for instance, a circle may change into an 
-*     ellipse if the transformation from the old to the new coordinate system 
-*     is linear but with different scales on each axis. Thus the specific 
-*     class of a Region cannot be used as a guarantee of the shape in any
-*     particular coordinate system. If the 
-c     astSimplify function
-f     AST_SIMPLIFY routine
-*     is used on a Region, it will endeavour to return a new Region of 
-*     a sub-class which accurately describes the shape in the current
-*     coordinate system of the Region (but this may not always be possible).
-*
-*     It is possible to negate an existing Region so that it represents all 
-*     areas of the encapsulated Frame except for the area specified when 
-*     the Region was created.
-
-*  Inheritance:
-*     The Region class inherits from the Frame class.
-
-*  Attributes:
-*     In addition to those attributes common to all Frames, every
-*     Region also has the following attributes:
-*
-*     - Adaptive: Should the area adapt to changes in the coordinate system?
-*     - Negated: Has the original region been negated?
-*     - Closed: Should the boundary be considered to be inside the region?
-*     - MeshSize: Number of points used to create a mesh covering the Region
-*     - FillFactor: Fraction of the Region which is of interest
-*     - Bounded: Is the Region bounded?
-*
-*     Every Region also inherits any further attributes that belong
-*     to the encapsulated Frame, regardless of that Frame's class. (For
-*     example, the Equinox attribute, defined by the SkyFrame class, is
-*     inherited by any Region which represents a SkyFrame.) 
-
-*  Functions:
-c     In addition to those functions applicable to all Frames, the
-c     following functions may also be applied to all Regions:
-f     In addition to those routines applicable to all Frames, the
-f     following routines may also be applied to all Regions:
-*
-c     - astGetRegionBounds: Get the bounds of a Region 
-f     - AST_GETREGIONBOUNDS: Get the bounds of a Region 
-c     - astGetRegionFrame: Get a copy of the Frame represent by a Region
-f     - AST_GETREGIONFRAME: Get a copy of the Frame represent by a Region
-c     - astGetRegionPoints: Get the positions that define a Region 
-f     - AST_GETREGIONPOINTS: Get the positions that define a Region 
-c     - astGetUnc: Obtain uncertainty information from a Region
-f     - AST_GETUNC: Obtain uncertainty information from a Region
-c     - astMapRegion: Transform a Region into a new coordinate system
-f     - AST_MAPREGION: Transform a Region into a new coordinate system
-c     - astNegate: Toggle the value of the Negated attribute
-f     - AST_NEGATE: Toggle the value of the Negated attribute
-c     - astOverlap: Determines the nature of the overlap between two Regions
-f     - AST_OVERLAP: Determines the nature of the overlap between two Regions
-c     - astMask<X>: Mask a region of a data grid
-f     - AST_MASK<X>: Mask a region of a data grid
-c     - astSetUnc: Associate a new uncertainty with a Region
-f     - AST_SETUNC: Associate a new uncertainty with a Region
-c     - astShowMesh: Display a mesh of points on the surface of a Region
-f     - AST_SHOWMESH: Display a mesh of points on the surface of a Region
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (STARLINK)
-
-*  History:
-*     3-DEC-2003 (DSB):
-*        Original version.
-*     12-MAY-2005 (DSB):
-*        Override astNormBox method.
-*     12-AUG-2005 (DSB):
-*        Override ObsLat and ObsLon accessor methods.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     2-MAR-2006 (DSB):
-*        Changed AST_LONG_DOUBLE to HAVE_LONG_DOUBLE.
-*     14-MAR-2006 (DSB):
-*        Added astGetRefFS.
-*     28-MAY-2007 (DSB):
-*        - Added protected function astBndMesh.
-*     14-JAN-2009 (DSB):
-*        Override the astIntersect method.
-*     20-JAN-2009 (DSB):
-*        Change astPickAxes so that it returns a Region rather than a
-*        Frame if possible. This included adding method astRegBasePick.
-*     9-FEB-2009 (DSB):
-*        Move PointList methods astGetEnclosure and astSetEnclosure to
-*        Region.
-*     18-FEB-2009 (DSB):
-*        Remove methods astGetEnclosure and astSetEnclosure.
-*     15-JUN-2009 (DSB):
-*        Modify MapRegion to use FrameSets properly.
-*     18-JUN-2009 (DSB):
-*        Override ObsAlt accessor methods.
-*     7-SEP-2009 (DSB):
-*        Fix astMask to avoid reading variance values from the data array.
-*     8-SEP-2009 (DSB):
-*        Fix bugs in astOverlap that could result in wrong results if
-*        either region is unbounded.
-*class--
-
-*  Implementation Notes:
-*     - All sub-classes must over-ride the following abstract methods declared 
-*     in this class: astRegBaseBox, astRegBaseMesh, astRegPins, astRegCentre. 
-*     They must also extend the astTransform method. In addition they should 
-*     usually extend astSimplify.
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Region
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Value for Ident attribute of of an encapsulated FrameSet which
-   indicates that it is a dummy FrameSet (see astRegDummy). */
-#define DUMMY_FS "ASTREGION-DUMMY"
-
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Define a function to clear an attribute value for a Region.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_CLEAR(attribute)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstFrame *this )
-*
-*     that clears the value of a specified attribute for the encapsulated
-*     FrameSet within a Region (this). This function is intended to over-ride 
-*     the astClear<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Obtain a pointer to the encapsulated FrameSet and invoke its \
-   astClear method. The protected astClear##attribute method is not used \
-   because we want the current Frame of the FrameSet tp be re-mapped if \
-   necessary. */ \
-   astClear( this->frameset, #attribute ); \
-}
-
-/*
-*  Name:
-*     MAKE_CLEAR_AXIS
-
-*  Purpose:
-*     Define a function to clear an attribute value for a Region axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_CLEAR_AXIS(attribute)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstFrame *this, int axis )
-*
-*     that clears the value of a specified attribute for an axis of
-*     the encapsulated FrameSet within a Region (this). This function is
-*     intended to over-ride the astClear<Attribute> method inherited
-*     from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR_AXIS(attribute) \
-static void Clear##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-   char buf[100];              /* Buffer for attribute name */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astClear" #attribute ); \
-\
-/* We use the public astSetx method rather than the protected \
-   astSet#attribute method so that the current Frame in the encapsulated \
-   FrameSet will be re-mapped if necessary. Construct the attribute name. */ \
-   sprintf( buf, "%s(%d)", #attribute, axis + 1 ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
-   astClear method. The protected astClear#attribute method is notused \
-   since we want the current Frame of the encapsulated FrameSet to be \
-   remapped if required. */ \
-   astClear( this->frameset, buf ); \
-}
-
-/*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Define a function to get an attribute value for a Region.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_GET(attribute,type)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static <type> Get<Attribute>( AstFrame *this )
-*
-*     that gets the value of a specified attribute for the encapsulated 
-*     FrameSet of a Region (this). This function is intended to over-ride 
-*     the astGet<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-   type result;                /* Value to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Obtain a pointer to the encapsulated FrameSet and invoke its \
-   astGet<Attribute> method.  */ \
-   result = astGet##attribute( this->frameset ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_GET_AXIS
-
-*  Purpose:
-*     Define a function to get an attribute value for a Region axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_GET_AXIS(attribute,type)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static <type> Get<Attribute>( AstFrame *this, int axis )
-*
-*     that gets the value of a specified attribute for an axis of the
-*     encapsulated FrameSet within a Region (this). This function is intended 
-*     to over-ride the astGet<Attribute> method inherited from the Frame
-*     class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_GET_AXIS(attribute,type) \
-static type Get##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-   type result;                /* Value to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (type) 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astGet" #attribute ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
-   astGet<Attribute> method.  */ \
-   result = astGet##attribute( this->frameset, axis ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = (type) 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_SET_SYSTEM
-
-*  Purpose:
-*     Define a function to set a System attribute value for a Region.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_SET_SYSTEM(attribute)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstFrame *this, AstSystemType value )
-*
-*     that sets the value of a specified attribute for the encapsulated 
-*     FrameSet of a Region (this). This function is intended to over-ride the
-*     astSet<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_SET_SYSTEM(attribute) \
-static void Set##attribute( AstFrame *this_frame, AstSystemType value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-   const char *text;           /* Pointer to system string */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Convert the supplied value to a string using the astSystemString
-   method of the current Frame in the encapsulated FrameSet. */ \
-   text = astSystemString( this->frameset, value ); \
-\
-/* Set the value by invoking the public astSetC method on the encapusulated \
-   FrameSet. This ensures that the current Frame of the encapsulated \
-   FrameSet is re-mapped if necessary. */ \
-   astSetC( this->frameset, #attribute, text ); \
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Define a function to set an attribute value for a Region.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_SET(attribute,type,x)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstFrame *this, <type> value )
-*
-*     that sets the value of a specified attribute for the encapsulated 
-*     FrameSet of a Region (this). This function is intended to over-ride the
-*     astSet<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*     x
-*        The single character code for the astSetx function for the given C 
-*        type.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,type,x) \
-static void Set##attribute( AstFrame *this_frame, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Set the value by invoking the public astSetx method on the encapusulated \
-   FrameSet. This ensures that the current Frame of the encapsulated \
-   FrameSet is re-mapped if necessary. */ \
-   astSet##x( this->frameset, #attribute, value ); \
-}
-
-/*
-*  Name:
-*     MAKE_SET_AXIS
-
-*  Purpose:
-*     Define a function to set an attribute value for a Region axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_SET_AXIS(attribute,type,x)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstFrame *this, int axis, <type> value )
-*
-*     that sets the value of a specified attribute for an axis of the
-*     encapsulated FrameSet within a Region (this). This function is intended 
-*     to over-ride the astSet<Attribute> method inherited from the Frame
-*     class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*     x
-*        The single character code for the astSetx function for the given C 
-*        type.
-*/
-
-/* Define the macro. */
-#define MAKE_SET_AXIS(attribute,type,x) \
-static void Set##attribute( AstFrame *this_frame, int axis, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to the Region structure */ \
-   char buf[100];              /* Buffer for attribute name */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astSet" #attribute ); \
-\
-/* We use the public astSetx method rather than the protected \
-   astSet#attribute method so that the current Frame in the encapsulated \
-   FrameSet will be re-mapped if necessary. Construct the attribute name. */ \
-   sprintf( buf, "%s(%d)", #attribute, axis + 1 ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
-   astSet<x> method.  */ \
-   astSet##x( this->frameset, buf, value ); \
-}
-
-/*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Define a function to test if an attribute value is set for a Region.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_TEST(attribute)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static int Test<Attribute>( AstFrame *this )
-*
-*     that returns a boolean result (0 or 1) to indicate if the value
-*     of a specified attribute for the encapsulated FrameSet within a
-*     Region (this) is set. This function is intended to over-ride the
-*     astTest<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstFrame *this_frame, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;            /* Pointer to Region structure */ \
-   int result;                 /* Result to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
-   astTest<Attribute> method.  */ \
-   result = astTest##attribute( this->frameset ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/*
-*  Name:
-*     MAKE_TEST_AXIS
-
-*  Purpose:
-*     Define a function to test if an attribute value is set for a Region
-*     axis.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "region.h"
-*     MAKE_TEST_AXIS(attribute)
-
-*  Class Membership:
-*     Defined by the Region class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static int Test<Attribute>( AstFrame *this, int axis )
-*
-*     that returns a boolean result (0 or 1) to indicate if the value
-*     of a specified attribute for an axis of the encapsulated FrameSet 
-*     within a Region (this) is set. This function is intended to over-ride
-*     the astTest<Attribute> method inherited from the Frame class.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST_AXIS(attribute) \
-static int Test##attribute( AstFrame *this_frame, int axis, int *status ) { \
-\
-/* Local Variables: */ \
-   AstRegion *this;              /* Pointer to the Region structure */ \
-   int result;                   /* Value to return */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Obtain a pointer to the Region structure. */ \
-   this = (AstRegion *) this_frame; \
-\
-/* Validate the axis index supplied. */ \
-   (void) astValidateAxis( this, axis, "astTest" #attribute ); \
-\
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke its \
-   astTest<Attribute> method.  */ \
-   result = astTest##attribute( this->frameset, axis ); \
-\
-/* If an error occurred, clear the result value. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Coordinate permutation Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "frame.h"               /* Parent Frame class */
-#include "frameset.h"            /* Interconnected coordinate systems */
-#include "region.h"              /* Interface definition for this class */
-#include "circle.h"              /* Circular regions */
-#include "box.h"                 /* Box regions */
-#include "cmpregion.h"           /* Compound regions */
-#include "ellipse.h"             /* Elliptical regions */
-#include "pointset.h"            /* Sets of points */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Region)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Region,Class_Init)
-#define class_vtab astGLOBAL(Region,Class_Vtab)
-#define getattrib_buff astGLOBAL(Region,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstRegionVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-static int MaskLD( AstRegion *, AstMapping *, int, int, const int[], const int ubnd[], long double [], long double, int * );
-#endif
-static int MaskB( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-static int MaskD( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-static int MaskF( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-static int MaskI( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-static int MaskL( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-static int MaskS( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-static int MaskUB( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-static int MaskUI( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-static int MaskUL( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-static int MaskUS( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-
-static AstAxis *GetAxis( AstFrame *, int, int * );
-static AstFrame *GetRegionFrame( AstRegion *, int * );
-static AstFrame *PickAxes( AstFrame *, int, const int[], AstMapping **, int * );
-static AstFrame *RegFrame( AstRegion *, int * );
-static AstFrameSet *Conv( AstFrameSet *, AstFrameSet *, int * );
-static AstFrameSet *Convert( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *ConvertX( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *FindFrame( AstFrame *, AstFrame *, const char *, int * );
-static AstFrameSet *GetRegFS( AstRegion *, int * );
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static AstMapping *RegMapping( AstRegion *, int * );
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstObject *Cast( AstObject *, AstObject *, int * );
-static AstPointSet *BTransform( AstRegion *, AstPointSet *, int, AstPointSet *, int * );
-static AstPointSet *BndBaseMesh( AstRegion *, double *, double *, int * );
-static AstPointSet *BndMesh( AstRegion *, double *, double *, int * );
-static AstPointSet *GetSubMesh( int *, AstPointSet *, int * );
-static AstPointSet *RegBaseGrid( AstRegion *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *RegGrid( AstRegion *, int * );
-static AstPointSet *RegMesh( AstRegion *, int * );
-static AstPointSet *RegTransform( AstRegion *, AstPointSet *, int, AstPointSet *, AstFrame **, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstRegion *MapRegion( AstRegion *, AstMapping *, AstFrame *, int * );
-static AstRegion *RegBasePick( AstRegion *, int, const int *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static const int *GetPerm( AstFrame *, int * );
-static double *RegCentre( AstRegion *, double *, double **, int, int, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double AxAngle( AstFrame *, const double[], const double[], int, int * );
-static double AxDistance( AstFrame *, int, double, double, int * );
-static double AxOffset( AstFrame *, int, double, double, int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetNaxes( AstFrame *, int * );
-static int GetObjSize( AstObject *, int * );
-static int GetUseDefs( AstObject *, int * );
-static int IsUnitFrame( AstFrame *, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static int RegDummyFS( AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int RegTrace( AstRegion *, int, double *, double **, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static int ValidateAxis( AstFrame *, int, const char *, int * );
-static void CheckPerm( AstFrame *, const int *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegionBounds( AstRegion *, double *, double *, int * );
-static void GetRegionBounds2( AstRegion *, double *, double *, int * );
-static void GetRegionPoints( AstRegion *, int, int, int *, double *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-static void MatchAxes( AstFrame *, AstFrame *, int *, int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Negate( AstRegion *, int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void PermAxes( AstFrame *, const int[], int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegBaseBox2( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegOverlay( AstRegion *, AstRegion *, int, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void ReportPoints( AstMapping *, int, AstPointSet *, AstPointSet *, int * );
-static void ResetCache( AstRegion *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetAxis( AstFrame *, int, AstAxis *, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-static void ShowMesh( AstRegion *, int, const char *, int * );
-static void ValidateAxisSelection( AstFrame *, int, const int *, const char *, int * );
-
-static int GetBounded( AstRegion *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-
-static AstRegion *GetUncFrm( AstRegion *, int, int * );
-static AstRegion *GetUnc( AstRegion *, int, int * );
-static int TestUnc( AstRegion *, int * );
-static void ClearUnc( AstRegion *, int * );
-static void SetUnc( AstRegion *, AstRegion *, int * );
-
-static const char *GetDomain( AstFrame *, int * );
-static int TestDomain( AstFrame *, int * );
-static void ClearDomain( AstFrame *, int * );
-static void SetDomain( AstFrame *, const char *, int * );
-
-static const char *GetFormat( AstFrame *, int, int * );
-static int TestFormat( AstFrame *, int, int * );
-static void ClearFormat( AstFrame *, int, int * );
-static void SetFormat( AstFrame *, int, const char *, int * );
-
-static const char *GetLabel( AstFrame *, int, int * );
-static int TestLabel( AstFrame *, int, int * );
-static void ClearLabel( AstFrame *, int, int * );
-static void SetLabel( AstFrame *, int, const char *, int * );
-
-static const char *GetSymbol( AstFrame *, int, int * );
-static int TestSymbol( AstFrame *, int, int * );
-static void ClearSymbol( AstFrame *, int, int * );
-static void SetSymbol( AstFrame *, int, const char *, int * );
-
-static const char *GetTitle( AstFrame *, int * );
-static void SetTitle( AstFrame *, const char *, int * );
-static void ClearTitle( AstFrame *, int * );
-static int TestTitle( AstFrame *, int * );
-
-static const char *GetUnit( AstFrame *, int, int * );
-static int TestUnit( AstFrame *, int, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-
-static int GetDigits( AstFrame *, int * );
-static int TestDigits( AstFrame *, int * );
-static void ClearDigits( AstFrame *, int * );
-static void SetDigits( AstFrame *, int, int * );
-
-static int GetDirection( AstFrame *, int, int * );
-static int TestDirection( AstFrame *, int, int * );
-static void ClearDirection( AstFrame *, int, int * );
-static void SetDirection( AstFrame *, int, int, int * );
-
-static int GetActiveUnit( AstFrame *, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void SetActiveUnit( AstFrame *, int, int * );
-
-static int GetMatchEnd( AstFrame *, int * );
-static int TestMatchEnd( AstFrame *, int * );
-static void ClearMatchEnd( AstFrame *, int * );
-static void SetMatchEnd( AstFrame *, int, int * );
-
-static int GetMaxAxes( AstFrame *, int * );
-static int TestMaxAxes( AstFrame *, int * );
-static void ClearMaxAxes( AstFrame *, int * );
-static void SetMaxAxes( AstFrame *, int, int * );
-
-static int GetMinAxes( AstFrame *, int * );
-static int TestMinAxes( AstFrame *, int * );
-static void ClearMinAxes( AstFrame *, int * );
-static void SetMinAxes( AstFrame *, int, int * );
-
-static int GetPermute( AstFrame *, int * );
-static int TestPermute( AstFrame *, int * );
-static void ClearPermute( AstFrame *, int * );
-static void SetPermute( AstFrame *, int, int * );
-
-static int GetPreserveAxes( AstFrame *, int * );
-static int TestPreserveAxes( AstFrame *, int * );
-static void ClearPreserveAxes( AstFrame *, int * );
-static void SetPreserveAxes( AstFrame *, int, int * );
-
-static double GetBottom( AstFrame *, int, int * );
-static int TestBottom( AstFrame *, int, int * );
-static void ClearBottom( AstFrame *, int, int * );
-static void SetBottom( AstFrame *, int, double, int * );
-
-static double GetTop( AstFrame *, int, int * );
-static int TestTop( AstFrame *, int, int * );
-static void ClearTop( AstFrame *, int, int * );
-static void SetTop( AstFrame *, int, double, int * );
-
-static double GetEpoch( AstFrame *, int * );
-static int TestEpoch( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void SetEpoch( AstFrame *, double, int * );
-
-static double GetObsAlt( AstFrame *, int * );
-static int TestObsAlt( AstFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-
-static double GetObsLat( AstFrame *, int * );
-static int TestObsLat( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void SetObsLat( AstFrame *, double, int * );
-
-static double GetObsLon( AstFrame *, int * );
-static int TestObsLon( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void SetObsLon( AstFrame *, double, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static int TestSystem( AstFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static int TestAlignSystem( AstFrame *, int * );
-static void ClearAlignSystem( AstFrame *, int * );
-static void SetAlignSystem( AstFrame *, AstSystemType, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static int GetNegated( AstRegion *, int * );
-static int TestNegated( AstRegion *, int * );
-static void ClearNegated( AstRegion *, int * );
-static void SetNegated( AstRegion *, int, int * );
-
-static int GetClosed( AstRegion *, int * );
-static int TestClosed( AstRegion *, int * );
-static void ClearClosed( AstRegion *, int * );
-static void SetClosed( AstRegion *, int, int * );
-
-static int GetMeshSize( AstRegion *, int * );
-static int TestMeshSize( AstRegion *, int * );
-static void ClearMeshSize( AstRegion *, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-
-static double GetFillFactor( AstRegion *, int * );
-static int TestFillFactor( AstRegion *, int * );
-static void ClearFillFactor( AstRegion *, int * );
-static void SetFillFactor( AstRegion *, double, int * );
-
-static int GetRegionFS( AstRegion *, int * );
-static int TestRegionFS( AstRegion *, int * );
-static void ClearRegionFS( AstRegion *, int * );
-static void SetRegionFS( AstRegion *, int, int * );
-
-static int GetAdaptive( AstRegion *, int * );
-static int TestAdaptive( AstRegion *, int * );
-static void ClearAdaptive( AstRegion *, int * );
-static void SetAdaptive( AstRegion *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-
-static const char *Abbrev( AstFrame *this_frame, int axis, const char *fmt,
-                           const char *str1, const char *str2, int *status ) {
-/*
-*  Name:
-*     Abbrev
-
-*  Purpose:
-*     Abbreviate a formatted Region axis value by skipping leading fields.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     const char *Abbrev( AstFrame *this, int axis, const char *fmt,
-*                         const char *str1, const char *str2, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astAbbrev
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function compares two Region axis values that have been
-*     formatted (using astFormat) and determines if they have any
-*     redundant leading fields (i.e. leading fields in common which
-*     can be suppressed when tabulating the values or plotting them on
-*     the axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the Region
-*     axis
-*        The number of the Region axis for which the values have
-*        been formatted (axis numbering starts at zero for the first
-*        axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specification used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - This function assumes that the format specification used was
-*     the same when both values were formatted and that they both
-*     apply to the same Region axis.
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return str2;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astAbbrev" );
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astAbbrev method to perform the processing. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astAbbrev( fr, axis, fmt, str1, str2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = str2;
-
-/* Return the result. */
-   return result;
-}
-
-static double Angle( AstFrame *this_frame, const double a[],
-                     const double b[], const double c[], int *status ) {
-/*
-*  Name:
-*     Angle
-
-*  Purpose:
-*     Calculate the angle subtended by two points at a third point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double Angle( AstFrame *this, const double a[], const double b[],
-*                   const double c[], int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astAngle
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the angle at point B between the line joining points 
-*     A and B, and the line joining points C and B. These lines will in fact be
-*     geodesic curves appropriate to the Frame in use. For instance, in
-*     SkyFrame, they will be great circles.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     a
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-*     b
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the second point.
-*     c
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the third point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     astAngle
-*        The angle in radians, from the line AB to the line CB. If the
-*        Frame is 2-dimensional, it will be in the range $\pm \pi$,
-*        and positive rotation is in the same sense as rotation from
-*        the positive direction of axis 2 to the positive direction of
-*        axis 1. If the Frame has more than 2 axes, a positive value will
-*        always be returned in the range zero to $\pi$.
-
-*  Notes:
-*     - A value of AST__BAD will also be returned if points A and B are
-*     co-incident, or if points B and C are co-incident.
-*     - A value of AST__BAD will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
-   Frame's astAngle method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astAngle( fr, a, b, c );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static double AxAngle( AstFrame *this_frame, const double a[], const double b[], int axis, int *status ) {
-/*
-*  Name:
-*     AxAngle
-
-*  Purpose:
-*     Returns the angle from an axis, to a line through two points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double AxAngle( AstFrame *this, const double a[], const double b[], int axis, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astAxAngle
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the angle, as seen from point A, between the positive
-*     direction of a specified axis, and the geodesic curve joining point
-*     A to point B.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     a
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the first point.
-*     b
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute) containing the coordinates of the second point.
-*     axis
-*        The number of the Frame axis from which the angle is to be
-*        measured (one-based)
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        The angle in radians, from the positive direction of the
-*        specified axis, to the line AB. If the Frame is 2-dimensional,
-*        it will be in the range $\pm \pi$, and positive rotation is in
-*        the same sense as rotation from the positive direction of axis 2
-*        to the positive direction of axis 1. If the Frame has more than 2
-*        axes, a positive value will always be returned in the range zero
-*        to $\pi$.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the require
-*     position angle is undefined.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxAngle" );
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astAxAngle method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astAxAngle( fr, a, b, axis );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static double AxDistance( AstFrame *this_frame, int axis, double v1, double v2, int *status ) {
-/*
-*  Name:
-*     AxDistance
-
-*  Purpose:
-*     Find the distance between two axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double AxDistance( AstFrame *this, int axis, double v1, double v2, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astAxDistance
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a signed value representing the axis increment
-*     from axis value v1 to axis value v2.
-*
-*     For a simple Frame, this is a trivial operation returning the
-*     difference between the two axis values. But for other derived classes
-*     of Frame (such as a SkyFrame) this is not the case.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The index of the axis to which the supplied values refer. The
-*        first axis has index 1.
-*     v1
-*        The first axis value.
-*     v2
-*        The second axis value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The distance between the two axis values.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input vaues has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxDistance" );
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astAxDistance method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astAxDistance( fr, axis, v1, v2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static double AxOffset( AstFrame *this_frame, int axis, double v1, double dist, int *status ) {
-/*
-*  Name:
-*     AxOffset
-
-*  Purpose:
-*     Add an increment onto a supplied axis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double AxOffset( AstFrame *this, int axis, double v1, double dist, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astAxOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns an axis value formed by adding a signed axis
-*     increment onto a supplied axis value.
-*
-*     For a simple Frame, this is a trivial operation returning the
-*     sum of the two supplied values. But for other derived classes
-*     of Frame (such as a SkyFrame) this is not the case.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The index of the axis to which the supplied values refer. The
-*        first axis has index 1.
-*     v1
-*        The original axis value.
-*     dist
-*        The axis increment to add to the original axis value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The incremented axis value.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input vaues has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis - 1, "astAxOffset" );
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astAxOffset method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astAxOffset( fr, axis, v1, dist );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *BndBaseMesh( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-*  Name:
-*     astBndBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing points spread around part of the boundary 
-*     of a Region, in the base Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astBndBaseMesh( AstRegion *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a PointSet containing a set of points on the
-*     boundary of the intersection between the supplied Region and the
-*     supplied (current Frame) box. The mesh points refer to the base
-*     Frame. If the boundary of the supplied Region does not intersect the 
-*     supplied box, then a PointSet containing a single bad point is 
-*     returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array holding the lower limits of the axis values 
-*        within the required box. Defined in the current Frame of the Region.
-*     ubnd
-*        Pointer to an array holding the upper limits of the axis values 
-*        within the required box. Defined in the current Frame of the Region.
-
-*  Returned Value:
-*     Pointer to the PointSet holding the base Frame mesh. The axis values 
-*     in this PointSet will have associated accuracies derived from the 
-*     uncertainties which were supplied when the Region was created.
-*     
-*     If the Region does not intersect the supplied box, the returned
-*     PointSet will contain a single point with a value of AST__BAD on
-*     every axis.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstBox *box;
-   AstCmpRegion *cmpreg;
-   AstPointSet *result;  
-   double **ptr;    
-   int ic;
-   int nc;
-
-/* Check the local error status. */
-   if ( !astOK ) return NULL;
-
-/* Form a Box describing the required box. */
-   box = astBox( this, 1, lbnd, ubnd, NULL, "", status );
-
-/* Check there is partial overlap between the Regions.*/
-   if( astOverlap( this, box ) > 3 ) {
-
-/* Form a CmpRegion representing the intersection between the supplied
-   Region and the above box. */
-      cmpreg = astCmpRegion( this, box, AST__AND, "", status );
-
-/* Get the boundary mesh. */
-      result = astRegBaseMesh( cmpreg );
-
-/* Free resources. */
-      cmpreg = astAnnul( cmpreg );
-
-/* If the boundary of the supplied Region does not intersect the box,
-   return a PointSet containing a single bad position. */
-   } else {
-      nc = astGetNin( this->frameset );
-      result = astPointSet( 1, nc, "", status );
-      ptr = astGetPoints( result );
-      if( ptr ) {
-         for( ic = 0; ic < nc; ic++ ) ptr[ ic ][ 0 ] = AST__BAD;
-      }
-   }
-      
-/* Free resources. */
-   box = astAnnul( box );
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-static AstPointSet *BndMesh( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-*  Name:
-*     astBndMesh
-
-*  Purpose:
-*     Return a PointSet containing points spread around part of the boundary 
-*     of a Region, in the current Frame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astBndMesh( AstRegion *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a PointSet containing a set of points on the
-*     boundary of the intersection between the supplied Region and the
-*     supplied box. The points refer to the current Frame of the 
-*     encapsulated FrameSet. If the boundary of the supplied Region does
-*     not intersect the supplied box, then a PointSet containing a single 
-*     bad point is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array holding the lower limits of the axis values 
-*        within the required box. Defined in the current Frame of the Region.
-*     ubnd
-*        Pointer to an array holding the upper limits of the axis values 
-*        within the required box. Defined in the current base Frame of the 
-*        Region.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the uncertainties which were
-*     supplied when the Region was created.
-*     
-*    If the Region does not intersect the supplied box, the returned
-*    PointSet will contain a single point with a value of AST__BAD on
-*    every axis.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstPointSet *ps1;  
-   AstPointSet *result;  
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get the current->base Mapping from the Region. */
-   map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-
-/* Use astBndBaseMesh to get a mesh of base Frame points within this base
-   Frame bounding box. */
-   ps1 = astBndBaseMesh( this, lbnd, ubnd );
-
-/* Transform it into the current Frame. */
-   if( ps1 ) result = astTransform( map, ps1, 0, NULL );
-      
-/* Free resources. */
-   map = astAnnul( map );
-   ps1 = astAnnul( ps1 );
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-static AstPointSet *BTransform( AstRegion *this, AstPointSet *in,
-                                int forward, AstPointSet *out, int *status ) {
-/*
-*+
-*  Name:
-*     astBTransform
-
-*  Purpose:
-*     Use a Region to transform a set of points in the base Frame.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "circle.h"
-*     AstPointSet *astBTransform( AstRegion *this, AstPointSet *in,
-                                  int forward, AstPointSet *out )
-
-*  Class Membership:
-*     Region member function 
-
-*  Description:
-*     This function takes a Region and a set of points within the base
-*     Frame of the Region, and transforms the points by setting axis values 
-*     to AST__BAD for all points which are outside the region. Points inside
-*     the region are copied unchanged from input to output.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  This is identical to the astTransform method for a Region except
-*     that the supplied and returned points refer to the base Frame of
-*     the Region, rather than the current Frame.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   int old;                      /* Origial value of "nomap" flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Save the current value of the "nomap" flag for this Region,and then
-   set it. Doing this tells the astRegMapping function (called by
-   astRegTransform) to assume a unit map connects base and current Frame. */
-   old = this->nomap;
-   this->nomap = 1;
-
-/* Invoke the usual astTransform method. The above setting of the "nomap"
-   flag will cause the astTransform method to treat the base Frame as the
-   current Frame. */
-   result = astTransform( this, in, forward, out );
-
-/* Reset the "nomap" flag. */
-   this->nomap = old;
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static AstObject *Cast( AstObject *this_object, AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Cast
-
-*  Purpose:
-*     Cast an Object into an instance of a sub-class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstObject *Cast( AstObject *this, AstObject *obj, int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the protected astCast
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a deep copy of an ancestral component of the
-*     supplied object. The required class of the ancestral component is
-*     specified by another object. Specifically, if "this" and "new" are 
-*     of the same class, a copy of "this" is returned. If "this" is an 
-*     instance of a subclass of "obj", then a copy of the component
-*     of "this" that matches the class of "obj" is returned. Otherwise, 
-*     a NULL pointer is returned without error.
-
-*  Parameters:
-*     this
-*        Pointer to the Object to be cast.
-*     obj
-*        Pointer to an Object that defines the class of the returned Object. 
-*        The returned Object will be of the same class as "obj". 
-
-*  Returned Value:
-*     A pointer to the new Object. NULL if "this" is not a sub-class of 
-*     "obj", or if an error occurs.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables; */
-   AstFrame *cfrm;
-   AstObject *new;
-   astDECLARE_GLOBALS       
-   int generation_gap;
-
-/* Initialise */
-   new = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* See how many steps up the class inheritance ladder it is from "obj" 
-   to this class (Region). A positive value is returned if Region is
-   a sub-class of "obj". A negative value is returned if "obj" is a
-   sub-class of Region. Zero is returned if "obj" is a Region. 
-   AST__COUSIN is returned if "obj" is not on the same line of descent 
-   as Region. */
-   generation_gap = astClassCompare( (AstObjectVtab *) &class_vtab, 
-                                     astVTAB( obj ) );
-
-/* If "obj" is a Region or a sub-class of Region, we can cast by 
-   truncating the vtab for "this" so that it matches the vtab of "obJ", 
-   and then taking a deep copy of "this". */
-   if( generation_gap <= 0 && generation_gap != AST__COUSIN ) {
-      new = astCastCopy( this_object, obj );
-
-/* If "obj" is not a Region or a sub-class of Region (e.g. a Frame or
-   some sub-class of Frame), we attempt to cast the current Frame of the
-   encapsulated FrameSet into the class indicated by "obj". */
-   } else {
-      cfrm = astGetFrame( ((AstRegion *) this_object)->frameset, AST__CURRENT );
-      new = astCast( cfrm, obj );
-      cfrm = astAnnul( cfrm );
-   }
-
-/* Return the new pointer. */
-   return new;
-}
-
-static void CheckPerm( AstFrame *this_frame, const int *perm, const char *method, int *status ) {
-/*
-*  Name:
-*     CheckPerm
-
-*  Purpose:
-*     Check that an array contains a valid permutation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void CheckPerm( AstFrame *this, const int *perm, const char *method, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astCheckPerm
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of a permutation array that
-*     will be used to permute the order of a Frame's axes. If the
-*     permutation specified by the array is not valid, an error is
-*     reported and the global error status is set. Otherwise, the
-*     function returns without further action.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     perm
-*        Pointer to an array of integers with the same number of
-*        elements as there are axes in the Frame. For each axis, the
-*        corresponding integer gives the (zero based) axis index to be
-*        used to identify the information for that axis (using the
-*        un-permuted axis numbering). To be valid, the integers in
-*        this array should therefore all lie in the range zero to
-*        (naxes-1) inclusive, where "naxes" is the number of Frame
-*        axes, and each value should occur exactly once.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate a permutation array. This method name is used
-*        solely for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Error messages issued by this function refer to the external
-*     (public) numbering system used for axes (which is one-based),
-*     whereas zero-based axis indices are used internally.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
-   Frame's astCheckPerm method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astCheckPerm( fr, perm, method );
-   fr = astAnnul( fr );
-
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Region, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstRegion *this;            /* Pointer to the Region structure */
-   int len;                    /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* We first handle attributes that apply to the Region as a whole
-   (rather than to the encapsulated FrameSet). */
-
-/* Negated */
-/* ------- */
-   if ( !strcmp( attrib, "negated" ) ) {
-      astClearNegated( this );
-
-/* Closed */
-/* ------ */
-   } else if ( !strcmp( attrib, "closed" ) ) {
-      astClearClosed( this );
-
-/* FillFactor */
-/* ---------- */
-   } else if ( !strcmp( attrib, "fillfactor" ) ) {
-      astClearFillFactor( this );
-
-/* MeshSize */
-/* -------- */
-   } else if ( !strcmp( attrib, "meshsize" ) ) {
-      astClearMeshSize( this );
-
-/* Adaptive */
-/* -------- */
-   } else if ( !strcmp( attrib, "adaptive" ) ) {
-      astClearAdaptive( this );
-
-
-/* We now check for atttributes of superclasses which apply to the Region
-   as a whole. We do not want to pass these on to the encapsulated FrameSet. */
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      astClearID( this );
-
-/* Ident. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ident" ) ) {
-      astClearIdent( this );
-
-/* Invert. */
-/* ------- */
-   } else if ( !strcmp( attrib, "invert" ) ) {
-      astClearInvert( this );
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      astClearReport( this );
-
-
-/* If the name was not recognised, test if it matches any of the
-   read-only attributes of this class (including those of all superclasses). 
-   If it does, then report an error. */
-   } else if ( !strcmp( attrib, "class" ) ||
-               !strcmp( attrib, "nin" ) ||
-               !strcmp( attrib, "nobject" ) ||
-               !strcmp( attrib, "nout" ) ||
-               !strcmp( attrib, "bounded" ) ||
-               !strcmp( attrib, "refcount" ) ||
-               !strcmp( attrib, "tranforward" ) ||
-               !strcmp( attrib, "traninverse" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
-   further interpretation. Do not pass on FrameSet attributes since we
-   pretend to the outside world that the encapsulated FrameSet is actually a
-   Frame. */
-   } else if ( strcmp( attrib, "base" ) &&
-               strcmp( attrib, "current" ) &&
-               strcmp( attrib, "nframe" ) ) {
-
-/* If the Region is to adapt to coordinate system chanmges, use the public 
-   astClear method so that the current Frame in the encapsulated FrameSet will 
-   be re-mapped if the attribute changes require it. */
-      if( astGetAdaptive( this ) ) {
-         astClear( this->frameset, attrib );
-      
-/* If the Region is not to adapt to coordinate system chanmges, use the 
-   astRegSetAttrib method which assigns the attribute setting to both
-   current and base Frames in the FrameSet without causing any remapping to
-   be performed. */
-      } else {
-         astRegClearAttrib( this, attrib, NULL );
-      }
-   }
-}
-
-static AstFrameSet *Conv( AstFrameSet *from, AstFrameSet *to, int *status ){
-/*
-*  Name:
-*     Conv
-
-*  Purpose:
-*     Find Mapping between Frames
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrameSet *Conv( AstFrameSet *from, AstFrameSet *to, int *status );
-
-*  Class Membership:
-*     Region member function 
-
-*  Description:
-*     This function provides a convenient interface for astConvert.
-*     It is like astConvert except it does not alter the base Frames of
-*     the supplied FrameSets and does not require a Domain list.
-
-*  Parameters:
-*     from
-*        Pointer to the source FrameSet.
-*     to
-*        Pointer to the source FrameSet.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        The conversion FrameSet (see astConvert).
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *result;        /* FrameSet to return */
-   int from_base;              /* Index of original base Frame in "from" */
-   int to_base;                /* Index of original base Frame in "to" */
-
-/* Check the global error status. */
-   if( !astOK ) return NULL;
-
-/* Note the indices of the base Frames in the FrameSets. */
-   to_base = astGetBase( to );
-   from_base = astGetBase( from );
-
-/* Invoke astConvert. */
-   result = astConvert( from, to, "" );
-
-/* Re-instate original base Frames. */
-   astSetBase( to, to_base );
-   astSetBase( from, from_base );
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-                             const char *domainlist, int *status ) {
-/*
-*  Name:
-*     Convert
-
-*  Purpose:
-*     Determine how to convert between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrameSet *Convert( AstFrame *from, AstFrame *to,
-*                           const char *domainlist, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the public astConvert
-*     method inherited fromm the Frame class).
-
-*  Description:
-*     This function compares two Regions and determines whether it
-*     is possible to convert between the coordinate systems which
-*     their current Frames represent. If conversion is possible, it
-*     returns a FrameSet which describes the conversion and which may
-*     be used (as a Mapping) to transform coordinate values in either
-*     direction.
-
-*  Parameters:
-*     from
-*        Pointer to a Region whose current Frame represents the
-*        "source" coordinate system.  Note that the Base attribute of
-*        the Region may be modified by this function.
-*     to
-*        Pointer to a Region whose current Frame represents the
-*        "destination" coordinate system.  Note that the Base
-*        attribute of the Region may be modified by this function.
-*     domainlist
-*        Pointer to a null-terminated character string containing a
-*        comma-separated list of Frame domains. This may be used to
-*        define a priority order for the different intermediate
-*        coordinate systems that might be used to perform the
-*        conversion.
-*
-*        The function will first try to obtain a conversion by making
-*        use only of intermediate Frames whose Domain attribute
-*        matches the first domain in this list. If this fails, the
-*        second domain in the list will be used, and so on, until
-*        conversion is achieved. A blank domain (e.g. two consecutive
-*        commas) indicates that all Frames should be considered,
-*        regardless of their Domain attributes. The list is
-*        case-insensitive and all white space is ignored.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*        If the requested coordinate conversion is possible, the
-*        function returns a pointer to a FrameSet which describes the
-*        conversion. Otherwise, a null Object pointer (AST__NULL) is
-*        returned without error.
-*
-*        If a FrameSet is returned, it will contain two Frames. Frame
-*        number 1 (its base Frame) will describe the source coordinate
-*        system, corresponding to the "from" parameter. Frame number 2
-*        (its current Frame) will describe the destination coordinate
-*        system, corresponding to the "to" parameter. The Mapping
-*        which inter-relates these Frames will perform the required
-*        conversion between the two coordinate systems.
-
-*  Notes:
-*     - The returned FrameSet will not contain any Regions. If one or
-*     more of the supplied Frames are in fact Regions, the corresponding 
-*     Frames in any returned FrameSet will described the encapsulated
-*     Frame, without any region information.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *result;       /* Returned FrameSet */
-
-/* Check the inherited status. */
-   if ( !astOK ) return NULL;
-
-/* If the "from" pointer is a Region, get a pointer to the current Frame of
-   the encapsulated FrameSet and use it instead of the supplied pointer. */
-   if( astIsARegion( from ) ) {
-      from = astGetFrame( ((AstRegion *) from)->frameset, AST__CURRENT );
-   } else {
-      from = astClone( from );
-   }
-
-/* If the "to" pointer is a Region, get a pointer to the current Frame of
-   the encapsulated FrameSet and use it instead of the supplied pointer. */
-   if( astIsARegion( to ) ) {
-      to = astGetFrame( ((AstRegion *) to)->frameset, AST__CURRENT );
-   } else {
-      to = astClone( to );
-   }
- 
-/* Now invoke astConvert on the above Frames. */
-   result = astConvert( from, to, domainlist );
-
-/* Annul the pointers used above. */
-   from = astAnnul( from );
-   to = astAnnul( to );
-
-/* Return the result */
-   return result;
-}
-
-static AstFrameSet *ConvertX( AstFrame *to, AstFrame *from,
-                              const char *domainlist, int *status ) {
-/*
-*  Name:
-*     ConvertX
-
-*  Purpose:
-*     Determine how to convert between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrameSet *astConvertX( AstFrame *to, AstFrame *from,
-*                               const char *domainlist )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astConvertX
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function performs the processing for the public astConvert
-*     method and has exactly the same interface except that the order
-*     of the first two arguments is swapped. This is a trick to allow
-*     the astConvert method to be over-ridden by derived classes on
-*     the basis of the class of either of its first two arguments.
-*
-*     See the astConvert method for details of the interface.
-*-
-*/
-
-/* Local Variables: */
-   AstFrameSet *result;       /* Returned FrameSet */
-
-/* Check the inherited status. */
-   if ( !astOK ) return NULL;
-
-/* If the "to" pointer is a Region, get a pointer to the current Frame of
-   the encapsulated FrameSet and use it instead of the supplied pointer. */
-   if( astIsARegion( to ) ) {
-      to = astGetFrame( ((AstRegion *) to)->frameset, AST__CURRENT );
-   } else {
-      to = astClone( to );
-   }
- 
-/* If the "from" pointer is a Region, get a pointer to the current Frame of
-   the encapsulated FrameSet and use it instead of the supplied pointer. */
-   if( astIsARegion( from ) ) {
-      from = astGetFrame( ((AstRegion *) from)->frameset, AST__CURRENT );
-   } else {
-      from = astClone( from );
-   }
-
-/* Now invoke astConvertX on the above Frames. */
-   result = astConvertX( to, from, domainlist );
-
-/* Annul the pointers used above. */
-   from = astAnnul( from );
-   to = astAnnul( to );
-
-/* Return the result */
-   return result;
-}
-
-static double Distance( AstFrame *this_frame, const double point1[], 
-                        const double point2[], int *status ) {
-/*
-*  Name:
-*     Distance
-
-*  Purpose:
-*     Calculate the distance between two points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double Distance( AstFrame *this, const double point1[], 
-*                      const double point2[], int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astDistance
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the distance between two points whose
-*     Region coordinates are given. The distance calculated is that
-*     along the geodesic curve that joins the two points.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     point1
-*        An array of double, with one element for each Region axis
-*        containing the coordinates of the first point.
-*     point2
-*        An array of double, with one element for each Region axis
-*        containing the coordinates of the second point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The distance between the two points.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input coordinates has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astDistance method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astDistance( fr, point1, point2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Objects are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int Equal( AstObject *this_object, AstObject *that_object, int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the astEqual protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two Regions are equivalent. 
-
-*  Parameters:
-*     this
-*        Pointer to the first Region.
-*     that
-*        Pointer to the second Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the Regions are equivalent, zero otherwise.
-
-*  Notes:
-*     - The Regions are equivalent if they are of the same class, have
-*     equal PointSets, have equal base Frames, have equal current Frames,
-*     and if the Mapping between base Frames is a UnitMap. In addition, the 
-*     Negated attribute must have the same value in both Regions, as must 
-*     the Closed attribute.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *bf1;
-   AstFrame *bf2;
-   AstFrame *cf1;
-   AstFrame *cf2;
-   AstMapping *m1;
-   AstMapping *m2;
-   AstRegion *that;              
-   AstRegion *this;              
-   const char *class1;
-   const char *class2;
-   int result;                   
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the two objects have the same class. */
-   class1 = astGetClass( this_object );
-   class2 = astGetClass( that_object );
-   if( astOK && !strcmp( class1, class2 ) ) {
-
-/* Obtain pointers to the two Region structures. */
-      this = (AstRegion *) this_object;
-      that = (AstRegion *) that_object;
-
-/* Test their PointSets for equality. */
-      if( astEqual( this->points, that->points ) ){
-
-/* Test their base Frames for equality. */
-         bf1 = astGetFrame( this->frameset, AST__BASE );
-         bf2 = astGetFrame( that->frameset, AST__BASE );
-         if( astEqual( bf1, bf2 ) ){
-
-/* Test their current Frames for equality. */
-            cf1 = astGetFrame( this->frameset, AST__CURRENT );
-            cf2 = astGetFrame( that->frameset, AST__CURRENT );
-            if( astEqual( cf1, cf2 ) ){
-
-/* Get the two Mappings and check that they are equal */
-               m1 = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-               m2 = astGetMapping( that->frameset, AST__BASE, AST__CURRENT );
-               if( astEqual( m1, m2 ) ) {
-
-/* Test the Negated and Closed flags are equal */
-                  if( astGetNegated( this ) == astGetNegated( that ) &&
-                       astGetClosed( this ) == astGetClosed( that ) ) {
-                     result = 1;         
-                  }
-               }
-
-/* Free resources. */
-               m1 = astAnnul( m1 );
-               m2 = astAnnul( m2 );
-            }
-
-            cf1 = astAnnul( cf1 );
-            cf2 = astAnnul( cf2 );
-         }
-
-         bf1 = astAnnul( bf1 );
-         bf2 = astAnnul( bf2 );
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void ClearUnc( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astClearUnc
-
-*  Purpose:
-*     Erase any uncertainty information in a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astClearUnc( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function erases all uncertainty information, whether default
-*     or not, from a Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*-
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Annul any user-supplied uncertainty. Also indicate that cached
-   information may now be out of date. */
-   if( this->unc ) {
-      this->unc = astAnnul( this->unc );
-      astResetCache( this );   
-   }
-
-/* Annul any default uncertainty. */
-   if( this->defunc ) this->defunc = astAnnul( this->defunc );
-
-}
-
-static AstFrameSet *FindFrame( AstFrame *target_frame, AstFrame *template,
-                               const char *domainlist, int *status ) {
-/*
-*  Name:
-*     FindFrame
-
-*  Purpose:
-*     Find a coordinate system with specified characteristics.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrameSet *FindFrame( AstFrame *target, AstFrame *template,
-*                             const char *domainlist, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astFindFrame method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function uses a "template" Frame to search a Region to
-*     identify a coordinate system which has a specified set of
-*     characteristics. If a suitable coordinate system can be found,
-*     the function returns a pointer to a FrameSet which describes the
-*     required coordinate system and how to convert coordinates to and
-*     from it.
-
-*  Parameters:
-*     target
-*        Pointer to the target Region.  
-*     template
-*        Pointer to the template Frame, which should be an instance of
-*        the type of Frame you wish to find.
-*     domainlist
-*        Pointer to a null-terminated character string containing a
-*        comma-separated list of Frame domains. This may be used to
-*        establish a priority order for the different types of
-*        coordinate system that might be found.
-*
-*        The function will first try to find a suitable coordinate
-*        system whose Domain attribute equals the first domain in this
-*        list. If this fails, the second domain in the list will be
-*        used, and so on, until a result is obtained. A blank domain
-*        (e.g. two consecutive commas) indicates that any coordinate
-*        system is acceptable (subject to the template) regardless of
-*        its domain.
-*
-*        This list is case-insensitive and all white space is ignored.
-*        If you do not wish to restrict the domain in this way, you
-*        should supply an empty string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If the search is successful, the function returns a pointer to a
-*     FrameSet which contains the Frame found and a description of how
-*     to convert to (and from) the coordinate system it
-*     represents. Otherwise, a null Object pointer (AST__NULL) is
-*     returned without error.
-*
-*     If a FrameSet is returned, it will contain two Frames. Frame
-*     number 1 (its base Frame) represents the target coordinate
-*     system and will be the same as the target. Frame number 2 (its 
-*     current Frame) will be a Frame representing the coordinate system 
-*     which the function found. The Mapping which inter-relates these two 
-*     Frames will describe how to convert between their respective coordinate 
-*     systems. Note, the Frames in this FrameSet will not be Regions -
-*     that is, they will be simple Frames or other derived classes.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrameSet *result;          /* Pointer to result FrameSet */
-   AstFrame *fr;                 /* Pointer to encapsulated Frame */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the astFindFrame method on the current Frame of the
-   encapsulated FrameSet within the target Region. */
-   fr = astGetFrame( ((AstRegion *) target_frame)->frameset, AST__CURRENT );
-   result = astFindFrame( fr, template, domainlist );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-*  Name:
-*     Format
-
-*  Purpose:
-*     Format a coordinate value for a Region axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     const char *Format( AstFrame *this, int axis, double value, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astFormat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to a string containing the
-*     formatted (character) version of a coordinate value for a
-*     Region axis. The formatting applied is that specified by a
-*     previous invocation of the astSetFormat method. A suitable
-*     default format is applied if necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     axis
-*        The number of the axis (zero-based) for which formatting is
-*        to be performed.
-*     value
-*        The coordinate value to be formatted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Region object, or at static memory. The contents of
-*     the string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or deletion
-*     of the Region. A copy of the string should therefore be made
-*     if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Obtain a pointer to the Region's current Frame and invoke the
-   astFormat method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astFormat( fr, axis, value );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     Gap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating Region axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astGap method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted values for a Region axis, the returned gap
-*     size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     axis
-*        The number of the axis (zero-based) for which a gap is to be found.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Gap value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astGap" );
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astGap method to obtain the required gap value. Annul the
-   Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astGap( fr, axis, gap, ntick );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result. */
-   if ( !astOK ) result = 0.0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied Region,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstRegion *this;         /* Pointer to Region structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->frameset );
-   result += astGetObjSize( this->points );
-   result += astGetObjSize( this->basemesh );
-   result += astGetObjSize( this->basegrid );
-   result += astGetObjSize( this->unc );
-   result += astGetObjSize( this->defunc );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Region, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Region, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Region. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstRegion *this;              /* Pointer to the Region structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Floating point attribute value */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* We first handle attributes that apply to the Region as a whole
-   (rather than to the encapsulated FrameSet). */
-
-/* Negated */
-/* ------- */
-   if ( !strcmp( attrib, "negated" ) ) {
-      ival = astGetNegated( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Closed */
-/* ------ */
-   } else if ( !strcmp( attrib, "closed" ) ) {
-      ival = astGetClosed( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Adaptive */
-/* -------- */
-   } else if ( !strcmp( attrib, "adaptive" ) ) {
-      ival = astGetAdaptive( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* FillFactor */
-/* ---------- */
-   } else if ( !strcmp( attrib, "fillfactor" ) ) {
-      dval = astGetFillFactor( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* MeshSize */
-/* -------- */
-   } else if ( !strcmp( attrib, "meshsize" ) ) {
-      ival = astGetMeshSize( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Bounded */
-/* ------- */
-   } else if ( !strcmp( attrib, "bounded" ) ) {
-      ival = astGetBounded( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Now get the values of attributes inherited from parent classes. We do
-   this to avoid the request being passed on to the encapsulated FrameSet
-   below. */
-
-/* Class. */
-/* ------ */
-   } else if ( !strcmp( attrib, "class" ) ) {
-      result = astGetClass( this );
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      result = astGetID( this );
-
-/* Ident. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ident" ) ) {
-      result = astGetIdent( this );
-
-/* Invert. */
-/* ------- */
-   } else if ( !strcmp( attrib, "invert" ) ) {
-      ival = astGetInvert( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Nin. */
-/* ---- */
-   } else if ( !strcmp( attrib, "nin" ) ) {
-      ival = astGetNin( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Nobject. */
-/* -------- */
-   } else if ( !strcmp( attrib, "nobject" ) ) {
-      ival = astGetNobject( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Nout. */
-/* ----- */
-   } else if ( !strcmp( attrib, "nout" ) ) {
-      ival = astGetNout( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* RefCount. */
-/* --------- */
-   } else if ( !strcmp( attrib, "refcount" ) ) {
-      ival = astGetRefCount( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      ival = astGetReport( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* TranForward. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "tranforward" ) ) {
-      ival = astGetTranForward( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* TranInverse. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "traninverse" ) ) {
-      ival = astGetTranInverse( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
-   further interpretation. Do not pass on FrameSet attributes since we
-   pretend to the outside world that the encapsulated FrameSet is actually a
-   Frame. */
-   } else if ( strcmp( attrib, "base" ) &&
-               strcmp( attrib, "current" ) &&
-               strcmp( attrib, "nframe" ) ) {
-      result = astGetAttrib( this->frameset, attrib );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetBounded( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetBounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     int astGetBounded( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a flag indicating if the Region is bounded.
-*     The implementation provided by the base Region class is suitable
-*     for Region sub-classes representing the inside of a single closed 
-*     curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-*     CmpRegion, PointList, etc ) may need to provide their own
-*     implementations.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Non-zero if the Region is bounded. Zero otherwise.
-
-*-
-*/
-
-/* For Regions which are defined by one or more closed curves such as Circles, 
-   Boxes, etc, the Region is bounded so long as it has not been negated. 
-   Classes for which this is not true should over-ride this implementation. */
-   return !astGetNegated( this );
-}
-
-static AstAxis *GetAxis( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetAxis
-
-*  Purpose:
-*     Obtain a pointer to a specified Axis from a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstAxis *GetAxis( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astGetAxis method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Axis object associated
-*     with one of the axes of the current Frame of a Region. This
-*     object describes the quantity which is represented along that
-*     axis.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     axis
-*        The number of the axis (zero-based) for which an Axis pointer
-*        is required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the requested Axis object.
-
-*  Notes:
-*     - The reference count of the requested Axis object will be
-*     incremented by one to reflect the additional pointer returned by
-*     this function.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstAxis *result;              /* Pointer to Axis */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astGetAxis" );
-
-/* Obtain a pointer to the Region's encapsulated FrameSet and invoke 
-   this FrameSet's astGetAxis method to obtain the required Axis
-   pointer. */
-   result = astGetAxis( this->frameset, axis );
-
-/* If an error occurred, annul the result. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *GetDefUnc( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetDefUnc
-
-*  Purpose:
-*     Obtain a pointer to the default uncertainty Region for a given Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstRegion *astGetDefUnc( AstRegion *this ) 
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a pointer to a Region which represents the
-*     default uncertainty associated with a position on the boundary of the 
-*     given  Region. The returned Region refers to the base Frame within the 
-*     FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;            /* Base Frame of supplied Region */
-   AstRegion *result;         /* Returned pointer */
-   double *lbnd;              /* Ptr. to array holding axis lower bounds */
-   double *ubnd;              /* Ptr. to array holding axis upper bounds */
-   double c;                  /* Central axis value */
-   double hw;                 /* Half width of uncertainty interval */
-   int i;                     /* Axis index */
-   int nax;                   /* Number of base Frame axes */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame in the supplied Region. */
-   bfrm = astGetFrame( this->frameset, AST__BASE );
-
-/* Get the number of base Frame axes. */
-   nax = astGetNaxes( bfrm );
-
-/* Get the base frame bounding box of the supplied Region. The astRegBaseBox 
-   assumes the supplied Region has not been inverted. But if the Region
-   contains other Regions (e.g. a Prism or CmpRegion, etc) then this
-   assumption needs to be propagated to the component Regions, which
-   astRegBaseBox does not do. For this reason we use astRegBaseBox2
-   instead. */
-   lbnd = astMalloc( sizeof( double)*(size_t) nax );
-   ubnd = astMalloc( sizeof( double)*(size_t) nax );
-   astRegBaseBox2( this, lbnd, ubnd );
-
-/* Create a Box covering 1.0E-6 of this bounding box, centred on the
-   centre of the box. */
-   if( astOK ) {
-      for( i = 0; i < nax; i++ ) {
-         if( ubnd[ i ] != DBL_MAX && lbnd[ i ] != -DBL_MAX ) {
-            hw = fabs( 0.5E-6*(  ubnd[ i ] - lbnd[ i ] ) );
-            c = 0.5*(  ubnd[ i ] + lbnd[ i ] );
-            if( hw == 0.0 ) hw = c*0.5E-6;
-            ubnd[ i ] = c + hw;
-            lbnd[ i ] = c - hw;
-         } else {
-            ubnd[ i ] = 0.0;
-            lbnd[ i ] = 0.0;
-         }
-      }
-      result = (AstRegion *) astBox( bfrm, 1, lbnd, ubnd, NULL, "", status );
-   }
-
-/* Free resources. */
-   lbnd = astFree( lbnd );
-   ubnd = astFree( ubnd );
-   bfrm = astAnnul( bfrm );
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-static AstFrameSet *GetRegFS( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetRegFS
-
-*  Purpose:
-*     Obtain a pointer to the FrameSet encapsulated within a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrameSet *astGetRegFS( AstRegion *this ) 
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function returns a pointer to the FrameSet encapsulated by the
-*     Region. This is a clone, not a deep copy, of the pointer stored
-*     in the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the FrameSet.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Return the required pointer. */
-   return astClone( this->frameset );
-}
-
-static AstPointSet *GetSubMesh( int *mask, AstPointSet *in, int *status ) {
-/*
-*  Name:
-*     GetSubMesh
-
-*  Purpose:
-*     Extract a selection of points from a PointSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *GetSubMesh( int *mask, AstPointSet *in, int *status )
-
-*  Class Membership:
-*     Region member function 
-
-*  Description:
-*     This function creates a new PointSet holding points selected from a
-*     supplied PointSet. An integer mask is supplied to indicate which
-*     points should be selected.
-
-*  Parameters:
-*     mask
-*        Pointer to a mask array, Its size should be equal to the number
-*        of points in the supplied PointSet. Each corresponding point will 
-*        be copied if the mask value is zero.
-*     in
-*        Pointer to the PointSet holding the input positions.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output PointSet. 
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   double **ptr_in;              /* Pointers to input axis values */
-   double **ptr_out;             /* Pointers to output axis values */
-   double *pin;                  /* Pointer to next input axis value */
-   double *pout;                 /* Pointer to next output axis value */
-   int *m;                       /* Pointer to next mask element */
-   int ic;                       /* Axis index */
-   int ip;                       /* Point index */
-   int nc;                       /* Number of axes in both PointSets */
-   int npin;                     /* Number of points in input PointSet */
-   int npout;                    /* Number of points in output PointSet */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the length of the mask. */
-   npin = astGetNpoint( in );
-
-/* Count the number of zeros in the mask. */
-   npout = 0;
-   m = mask;
-   for( ip = 0; ip < npin; ip++ ) {
-      if( *(m++) == 0 ) npout++;
-   }
-
-/* Create the output PointSet and get pointers to its data arrays. */
-   nc = astGetNcoord( in );
-   result = astPointSet( npout, nc, "", status );
-   ptr_in = astGetPoints( in );
-   ptr_out = astGetPoints( result );
-
-/* Check pointers can be dereferenced safely. */
-   if( astOK ) {
-
-/* Copy the required axis values from the input to the output. */
-      for( ic = 0; ic < nc; ic++ ) {
-         pin = ptr_in[ ic ];
-         pout = ptr_out[ ic ];
-         m = mask;
-         for( ip = 0; ip < npin; ip++, pin++, m++ ) {
-            if( *m == 0 ) *(pout++) = *pin;
-         }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static AstRegion *GetUnc( AstRegion *this, int def, int *status ){
-/*
-*++
-*  Name:
-c     astGetUnc
-f     AST_GETUNC
-
-*  Purpose:
-*     Obtain uncertainty information from a Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     AstRegion *astGetUnc( AstRegion *this, int def )
-f     RESULT = AST_GETUNC( THIS, DEF, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function returns a Region which represents the uncertainty
-*     associated with positions within the supplied Region. See
-c     astSetUnc
-f     AST_SETUNC
-*     for more information about Region uncertainties and their use.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     def
-f     DEF = LOGICAL (Given)
-*        Controls what is returned if no uncertainty information has been
-*        associated explicitly with the supplied Region. If
-c        a non-zero value
-f        .TRUE. 
-*        is supplied, then the default uncertainty Region used internally 
-*        within AST is returned (see "Applicability" below). If
-c        zero is supplied, then NULL
-f        .FALSE. is supplied, then AST__NULL
-*        will be returned (without error).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetUnc()
-f     AST_GETUNC = INTEGER
-*        A pointer to a Region describing the uncertainty in the supplied
-*        Region.
-
-*  Applicability:
-*     CmpRegion
-*        The default uncertainty for a CmpRegion is taken from one of the
-*        two component Regions. If the first component Region has a 
-*        non-default uncertainty, then it is used as the default uncertainty 
-*        for the parent CmpRegion. Otherwise, if the second component Region 
-*        has a non-default uncertainty, then it is used as the default 
-*        uncertainty for the parent CmpRegion. If neither of the
-*        component Regions has non-default uncertainty, then the default 
-*        uncertainty for the CmpRegion is 1.0E-6 of the bounding box of 
-*        the CmpRegion.
-*     Prism
-*        The default uncertainty for a Prism is formed by combining the 
-*        uncertainties from the two component Regions. If a component 
-*        Region does not have a non-default uncertainty, then its default
-*        uncertainty will be used to form the default uncertainty of the
-*        parent Prism.
-*     Region
-*        For other classes of Region, the default uncertainty is 1.0E-6
-*        of the bounding box of the Region. If the bounding box has zero 
-*        width on any axis, then the uncertainty will be 1.0E-6 of the
-*        axis value.
-
-*  Notes:
-*     - If uncertainty information is associated with a Region, and the 
-*     coordinate system described by the Region is subsequently changed
-*     (e.g. by changing the value of its System attribute, or using the 
-c     astMapRegion
-f     AST_MAPREGION
-*     function), then the uncertainty information returned by this function 
-*     will be modified so that it refers to the coordinate system currently 
-*     described by the supplied Region.
-f     - A null Object pointer (AST__NULL) will be returned if this
-f     function is invoked with STATUS set to an error value, or if it
-c     - A null Object pointer (NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-
-*--
-*/
-
-/* Local Variables: */
-   AstRegion *result;       /* Pointer to returned uncertainty Region */
-   AstRegion *unc;          /* Pointer to original uncertainty Region */
-
-/* Initialise */
-   result = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Check that we have an uncertainty Region to return (either assigned or
-   default). */
-   if( def || astTestUnc( this ) ) {
-
-/* Obtain the uncertainty Region and take a copy so that we can modify it
-   without affecting the supplied Region. */
-      unc = astGetUncFrm( this, AST__CURRENT );
-      result = astCopy( unc );
-      unc = astAnnul( unc );
-
-/* In its current context, the uncertainty region is known to refer to
-   the Frame of the supplied Region and so its RegionFS attribute will be
-   set to zero, indicating that the uncertainty FrameSet need not be
-   dumped. However, outside of AST this information cannot be implied, so
-   clear the RegionFS attribute so that the returned pointer will include
-   Frame information if it is dumped to a Channel. */
-      astClearRegionFS( result );
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static AstRegion *GetUncFrm( AstRegion *this, int ifrm, int *status ) {
-/*
-*+
-*  Name:
-*     astGetUncFrm
-
-*  Purpose:
-*     Obtain a pointer to the uncertainty Region for a given Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstRegion *astGetUncFrm( AstRegion *this, int ifrm ) 
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a pointer to a Region which represents the
-*     uncertainty associated with a position on the boundary of the given 
-*     Region. The returned Region can refer to the either the base or 
-*     the current Frame within the FrameSet encapsulated by the supplied 
-*     Region as specified by the "ifrm" parameter. If the returned Region is 
-*     re-centred at some point on the boundary of the supplied Region, then 
-*     the re-centred Region will represent the region in which the true 
-*     boundary position could be.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     ifrm
-*        The index of a Frame within the FrameSet encapsulated by "this".
-*        The returned Region will refer to the requested Frame. It should
-*        be either AST__CURRENT or AST__BASE.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A default uncertainty Region will be created if the supplied Region 
-*     does not have an uncertainty Region.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;             /* Current Frame from supplied Region */
-   AstMapping *map;           /* Supplied to uncertainty Mapping */
-   AstRegion *result;         /* Returned pointer */
-   AstRegion *unc;            /* Base frame uncertainty Region to use */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Region has an explicitly assigned base-frame uncertainty Region, 
-   use it. */
-   if( this->unc ) {
-      unc = this->unc;
-
-/* If not, use the default base-frame uncertainty Region, creating it if 
-   necessary. */
-   } else {
-      if( !this->defunc ) this->defunc = astGetDefUnc( this );
-      unc = this->defunc;
-   }
-
-/* If the uncertainty Region is the base Frame is required, just return a
-   clone of the uncertainty Region pointer. The Frame represented by an
-   uncertainty Region will always (barring bugs!) be the base Frame of
-   its parent Region. */
-   if( ifrm == AST__BASE ) {
-      result = astClone( unc );
-
-/* If the uncertainty Region is the current Frame is required... */
-   } else {
-
-/* Get a Mapping from the Frame represented by the uncertainty Region
-   (the Region base Frame) to the Region current Frame. */
-      map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* If this is a UnitMap, the uncertainty Region is already in the correct 
-   Frame, so just return the stored pointer. */
-      if( astIsAUnitMap( map ) ) {
-         result = astClone( unc );
-
-/* Otherwise, use this Mapping to map the uncertainty Region into the current
-   Frame. */
-      } else {
-         frm = astGetFrame( this->frameset, AST__CURRENT );
-         result = astMapRegion( unc, map, frm );
-
-/* Free resources. */
-         frm = astAnnul( frm );
-      }
-
-      map = astAnnul( map );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetUseDefs
-
-*  Purpose:
-*     Get the value of the UseDefs attribute for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int GetUseDefs( AstObject *this_object, int *status ) {
-
-*  Class Membership:
-*     Region member function (over-rides the protected astGetUseDefs
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the value of the UseDefs attribute for a
-*     Region. supplying a suitable default.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - The USeDefs value.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   int result;                   /* Value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* If the UseDefs value for the Region has been set explicitly, use the
-   Get method inherited from the parent Frame class to get its value. */
-   if( astTestUseDefs( this ) ) {
-      result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, supply a default value equal to the UseDefs value of the
-   encapsulated Frame. */   
-   } else {
-      fr = astGetFrame( this->frameset, AST__CURRENT );
-      result = astGetUseDefs( fr );
-      fr = astAnnul( fr );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int TestUnc( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astTestUnc
-
-*  Purpose:
-*     Does the Region contain non-default uncertainty information?
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     int astTestUnc( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a flag indicating if the uncertainty Region in 
-*     the supplied Region was supplied explicit (i.e. is not a default 
-*     uncertainty Region).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Non-zero if the uncertainty Region was supplied explicitly.
-*     Zero otherwise.
-
-*  Notes:
-*     - Classes of Region that encapsulate two or more other Regions
-*     inherit their default uncertainty from the encapsulated Regions.
-*     Non-default uncertainty in the component Regions does not imply
-*     that the parent Region has non-default uncertainty.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-   return ( this->unc != NULL );
-}
-
-static AstFrame *RegFrame( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astRegFrame
-
-*  Purpose:
-*     Obtain a pointer to the current Frame for a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrame *astRegFrame( AstRegion *this ) 
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function returns a pointer to the current Frame in the encapsulated 
-*     FrameSet. This is a clone, not a deep copy, of the pointer stored
-*     in the FrameSet. For a deep copy, use astGetRegionFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Frame.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Return the required pointer. */
-   return astGetFrame( this->frameset, AST__CURRENT );
-}
-
-static AstMapping *RegMapping( AstRegion *this, int *status ) {
-/*
-*+
-*  Name:
-*     astRegMapping
-
-*  Purpose:
-*     Obtain a pointer to the simplified base->current Mapping for a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstMapping *astRegMapping( AstRegion *this ) 
-
-*  Class Membership:
-*     Region member function 
-
-*  Description:
-*     This function returns a pointer to the Mapping from the base to the
-*     current Frame int he encapsulated FrameSet. The returned Mapping is
-*     simplified before being returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Mapping.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *map;           /* Unsimplified Mapping */
-   AstMapping *result;        /* Simplified Mapping */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the "nomap" flag is set in the Region structure, re return a
-   UnitMap. */
-   if( this->nomap ) { 
-      result = (AstMapping *) astUnitMap( astGetNin( this->frameset ), "", status );
-
-/* Otherwise use the Mapping from the Region's FrameSet. */
-   } else {
-
-/* Get the Mapping */
-      map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* Simplify it. */
-      result = astSimplify( map );
-
-/* Annul the pointer to the unsimplified Mapping */
-      map = astAnnul( map );
-   }
-
-/* Return the required pointer. */
-   return result;
-}
-
-static int GetNaxes( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetNaxes
-
-*  Purpose:
-*     Determine how many axes a Region has.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int GetNaxes( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astGetNaxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns the number of axes for a Region. This is equal
-*     to the number of axes in its current Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of Region axes (zero or more).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-
-/* Obtain the number of axes in this Frame. */
-   result = astGetNaxes( fr );
-
-/* Annul the current Frame pointer. */
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static const int *GetPerm( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetPerm
-
-*  Purpose:
-*     Access the axis permutation array for the current Frame of a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     const int *GetPerm( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astGetPerm protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the axis permutation array
-*     for the current Frame of a Region. This array constitutes a
-*     lookup-table that converts between an axis number supplied
-*     externally and the corresponding index in the Frame's internal
-*     axis arrays.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the current Frame's axis permutation array (a
-*     constant array of int).  Each element of this contains the
-*     (zero-based) internal axis index to be used in place of the
-*     external index which is used to address the permutation
-*     array. If the current Frame has zero axes, this pointer will be
-*     NULL.
-
-*  Notes:
-*     - The pointer returned by this function gives direct access to
-*     data internal to the Frame object. It remains valid only so long
-*     as the Frame exists. The permutation array contents may be
-*     modified by other functions which operate on the Frame and this
-*     may render the returned pointer invalid.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to Region structure */
-   const int *result;            /* Result pointer value */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and then obtain a
-   pointer to its axis permutation array. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astGetPerm( fr );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static AstFrame *GetRegionFrame( AstRegion *this, int *status ) {
-/*
-*++
-*  Name:
-c     astGetRegionFrame
-f     AST_GETREGIONFRAME
-
-*  Purpose:
-*     Obtain a pointer to the encapsulated Frame within a Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     AstFrame *astGetRegionFrame( AstRegion *this )
-f     RESULT = AST_GETREGIONFRAME( THIS, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function returns a pointer to the Frame represented by a
-*     Region.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetRegionFrame()
-f     AST_GETREGIONFRAME = INTEGER
-*        A pointer to a deep copy of the Frame represented by the Region.
-*        Using this pointer to modify the Frame will have no effect on
-*        the Region. To modify the Region, use the Region pointer directly.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstFrame *result;             /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the current Frame of the encapsulated FrameSet. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-
-/* Take a deep copy of it, and then annul the original pointer. */
-   result = astCopy( fr );
-   fr = astAnnul( fr );
-
-/* If not OK, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-void astInitRegionVtab_(  AstRegionVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitRegionVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astInitRegionVtab( AstRegionVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Region vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Region class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsARegion) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->ClearNegated = ClearNegated;
-   vtab->GetNegated = GetNegated;
-   vtab->SetNegated = SetNegated;
-   vtab->TestNegated = TestNegated;
-
-   vtab->ClearRegionFS = ClearRegionFS;
-   vtab->GetRegionFS = GetRegionFS;
-   vtab->SetRegionFS = SetRegionFS;
-   vtab->TestRegionFS = TestRegionFS;
-
-   vtab->ClearClosed = ClearClosed;
-   vtab->GetClosed = GetClosed;
-   vtab->SetClosed = SetClosed;
-   vtab->TestClosed = TestClosed;
-
-   vtab->ClearMeshSize = ClearMeshSize;
-   vtab->GetMeshSize = GetMeshSize;
-   vtab->SetMeshSize = SetMeshSize;
-   vtab->TestMeshSize = TestMeshSize;
-
-   vtab->ClearAdaptive = ClearAdaptive;
-   vtab->GetAdaptive = GetAdaptive;
-   vtab->SetAdaptive = SetAdaptive;
-   vtab->TestAdaptive = TestAdaptive;
-
-   vtab->ClearFillFactor = ClearFillFactor;
-   vtab->GetFillFactor = GetFillFactor;
-   vtab->SetFillFactor = SetFillFactor;
-   vtab->TestFillFactor = TestFillFactor;
-
-   vtab->ResetCache = ResetCache;
-   vtab->RegTrace = RegTrace;
-   vtab->GetBounded = GetBounded;
-   vtab->TestUnc = TestUnc;
-   vtab->ClearUnc = ClearUnc;
-   vtab->GetRegionFrame = GetRegionFrame;
-   vtab->MapRegion = MapRegion;
-   vtab->Overlap = Overlap;
-   vtab->OverlapX = OverlapX;
-   vtab->Negate = Negate;
-   vtab->BndMesh = BndMesh;
-   vtab->BndBaseMesh = BndBaseMesh;
-   vtab->RegBaseGrid = RegBaseGrid;
-   vtab->RegBaseMesh = RegBaseMesh;
-   vtab->RegBaseBox = RegBaseBox;
-   vtab->RegBaseBox2 = RegBaseBox2;
-   vtab->RegBasePick = RegBasePick;
-   vtab->RegCentre = RegCentre;
-   vtab->RegGrid = RegGrid;
-   vtab->RegMesh = RegMesh;
-   vtab->RegClearAttrib = RegClearAttrib;
-   vtab->RegSetAttrib = RegSetAttrib;
-   vtab->GetDefUnc = GetDefUnc;
-   vtab->GetUncFrm = GetUncFrm;
-   vtab->SetUnc = SetUnc;
-   vtab->GetUnc = GetUnc;
-   vtab->ShowMesh = ShowMesh;
-   vtab->GetRegionBounds = GetRegionBounds;
-   vtab->GetRegionBounds2 = GetRegionBounds2;
-   vtab->GetRegionPoints = GetRegionPoints;
-   vtab->RegOverlay = RegOverlay;
-   vtab->RegFrame = RegFrame;
-   vtab->RegDummyFS = RegDummyFS;
-   vtab->RegMapping = RegMapping;
-   vtab->RegPins = RegPins;
-   vtab->RegTransform = RegTransform;
-   vtab->BTransform = BTransform;
-   vtab->GetRegFS = GetRegFS;
-   vtab->SetRegFS = SetRegFS;
-   vtab->MaskB = MaskB;
-   vtab->MaskD = MaskD;
-   vtab->MaskF = MaskF;
-   vtab->MaskI = MaskI;
-   vtab->MaskL = MaskL;
-   vtab->MaskS = MaskS;
-   vtab->MaskUB = MaskUB;
-   vtab->MaskUI = MaskUI;
-   vtab->MaskUL = MaskUL;
-   vtab->MaskUS = MaskUS;
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-   vtab->MaskLD = MaskLD;
-#endif
-
-/* Save the inherited pointers to methods that will be extended, and store 
-   replacement pointers for methods which will be over-ridden by new member 
-   functions implemented here. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_getusedefs = object->GetUseDefs;
-   object->GetUseDefs = GetUseDefs;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   object->Cast = Cast;
-   object->Equal = Equal;
-   object->ClearAttrib = ClearAttrib;
-   object->GetAttrib = GetAttrib;
-   object->SetAttrib = SetAttrib;
-   object->TestAttrib = TestAttrib;
-
-   mapping->ReportPoints = ReportPoints;
-   mapping->RemoveRegions = RemoveRegions;
-   mapping->Simplify = Simplify;
-
-   frame->Abbrev = Abbrev;
-   frame->Angle = Angle;
-   frame->AxAngle = AxAngle;
-   frame->AxDistance = AxDistance;
-   frame->AxOffset = AxOffset;
-   frame->CheckPerm = CheckPerm;
-   frame->ClearDigits = ClearDigits;
-   frame->ClearDirection = ClearDirection;
-   frame->ClearDomain = ClearDomain;
-   frame->ClearFormat = ClearFormat;
-   frame->ClearLabel = ClearLabel;
-   frame->ClearMatchEnd = ClearMatchEnd;
-   frame->ClearMaxAxes = ClearMaxAxes;
-   frame->ClearMinAxes = ClearMinAxes;
-   frame->ClearPermute = ClearPermute;
-   frame->ClearPreserveAxes = ClearPreserveAxes;
-   frame->ClearSymbol = ClearSymbol;
-   frame->ClearTitle = ClearTitle;
-   frame->ClearUnit = ClearUnit;
-   frame->Convert = Convert;
-   frame->ConvertX = ConvertX;
-   frame->Distance = Distance;
-   frame->FindFrame = FindFrame;
-   frame->Format = Format;
-   frame->Gap = Gap;
-   frame->GetAxis = GetAxis;
-   frame->GetDigits = GetDigits;
-   frame->GetDirection = GetDirection;
-   frame->GetDomain = GetDomain;
-   frame->GetFormat = GetFormat;
-   frame->GetLabel = GetLabel;
-   frame->GetMatchEnd = GetMatchEnd;
-   frame->GetMaxAxes = GetMaxAxes;
-   frame->GetMinAxes = GetMinAxes;
-   frame->GetNaxes = GetNaxes;
-   frame->GetPerm = GetPerm;
-   frame->GetPermute = GetPermute;
-   frame->GetPreserveAxes = GetPreserveAxes;
-   frame->GetSymbol = GetSymbol;
-   frame->GetTitle = GetTitle;
-   frame->GetUnit = GetUnit;
-   frame->Intersect = Intersect;
-   frame->IsUnitFrame = IsUnitFrame;
-   frame->Match = Match;
-   frame->Norm = Norm;
-   frame->NormBox = NormBox;
-   frame->Offset = Offset;
-   frame->Offset2 = Offset2;
-   frame->Overlay = Overlay;
-   frame->PermAxes = PermAxes;
-   frame->PickAxes = PickAxes;
-   frame->Resolve = Resolve;
-   frame->ResolvePoints = ResolvePoints;
-   frame->SetAxis = SetAxis;
-   frame->SetDigits = SetDigits;
-   frame->SetDirection = SetDirection;
-   frame->SetDomain = SetDomain;
-   frame->SetFormat = SetFormat;
-   frame->SetLabel = SetLabel;
-   frame->SetMatchEnd = SetMatchEnd;
-   frame->SetMaxAxes = SetMaxAxes;
-   frame->SetMinAxes = SetMinAxes;
-   frame->SetPermute = SetPermute;
-   frame->SetPreserveAxes = SetPreserveAxes;
-   frame->SetSymbol = SetSymbol;
-   frame->SetTitle = SetTitle;
-   frame->SetUnit = SetUnit;
-   frame->SubFrame = SubFrame;
-   frame->SystemCode = SystemCode;
-   frame->SystemString = SystemString;
-   frame->TestDigits = TestDigits;
-   frame->TestDirection = TestDirection;
-   frame->TestDomain = TestDomain;
-   frame->TestFormat = TestFormat;
-   frame->TestLabel = TestLabel;
-   frame->TestMatchEnd = TestMatchEnd;
-   frame->TestMaxAxes = TestMaxAxes;
-   frame->TestMinAxes = TestMinAxes;
-   frame->TestPermute = TestPermute;
-   frame->TestPreserveAxes = TestPreserveAxes;
-   frame->TestSymbol = TestSymbol;
-   frame->TestTitle = TestTitle;
-   frame->TestUnit = TestUnit;
-   frame->Unformat = Unformat;
-   frame->ValidateAxis = ValidateAxis;
-   frame->ValidateAxisSelection = ValidateAxisSelection;
-   frame->ValidateSystem = ValidateSystem;
-   frame->LineDef = LineDef;
-   frame->LineContains = LineContains;
-   frame->LineCrossing = LineCrossing;
-   frame->LineOffset = LineOffset;
-   frame->MatchAxes = MatchAxes;
-   frame->MatchAxesX = MatchAxesX;
-
-   frame->GetActiveUnit = GetActiveUnit;
-   frame->SetActiveUnit = SetActiveUnit;
-   frame->TestActiveUnit = TestActiveUnit;
-
-   frame->GetTop = GetTop;
-   frame->SetTop = SetTop;
-   frame->TestTop = TestTop;
-   frame->ClearTop = ClearTop;
-
-   frame->GetBottom = GetBottom;
-   frame->SetBottom = SetBottom;
-   frame->TestBottom = TestBottom;
-   frame->ClearBottom = ClearBottom;
-
-   frame->GetEpoch = GetEpoch;
-   frame->SetEpoch = SetEpoch;
-   frame->TestEpoch = TestEpoch;
-   frame->ClearEpoch = ClearEpoch;
-
-   frame->ClearObsAlt = ClearObsAlt;
-   frame->TestObsAlt = TestObsAlt;
-   frame->GetObsAlt = GetObsAlt;
-   frame->SetObsAlt = SetObsAlt;
-
-   frame->ClearObsLat = ClearObsLat;
-   frame->TestObsLat = TestObsLat;
-   frame->GetObsLat = GetObsLat;
-   frame->SetObsLat = SetObsLat;
-
-   frame->ClearObsLon = ClearObsLon;
-   frame->TestObsLon = TestObsLon;
-   frame->GetObsLon = GetObsLon;
-   frame->SetObsLon = SetObsLon;
-
-   frame->GetSystem = GetSystem;
-   frame->SetSystem = SetSystem;
-   frame->TestSystem = TestSystem;
-   frame->ClearSystem = ClearSystem;
-
-   frame->GetAlignSystem = GetAlignSystem;
-   frame->SetAlignSystem = SetAlignSystem;
-   frame->TestAlignSystem = TestAlignSystem;
-   frame->ClearAlignSystem = ClearAlignSystem;
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "Region",
-               "An area within a coordinate system" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void Intersect( AstFrame *this_frame, const double a1[2],
-                       const double a2[2], const double b1[2],
-                       const double b2[2], double cross[2], 
-                       int *status ) {
-/*
-*  Name:
-*     Intersect
-
-*  Purpose:
-*     Find the point of intersection between two geodesic curves.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void Intersect( AstFrame *this_frame, const double a1[2],
-*                      const double a2[2], const double b1[2],
-*                      const double b2[2], double cross[2], 
-*                      int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the astIntersect method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the coordinate values at the point of
-*     intersection between two geodesic curves. Each curve is specified
-*     by two points on the curve. 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     a1
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a point on the first
-*        geodesic curve.
-*     a2
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a second point on the 
-*        first geodesic curve.
-*     b1
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a point on the second
-*        geodesic curve.
-*     b2
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a second point on 
-*        the second geodesic curve.
-*     cross
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the required intersection
-*        point will be returned. These will be AST__BAD if the curves do
-*        not intersect.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - For SkyFrames each curve will be a great circle, and in general
-*     each pair of curves will intersect at two diametrically opposite 
-*     points on the sky. The returned position is the one which is
-*     closest to point "a1".
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astIntersect method for this Frame. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astIntersect( fr, a1, a2, b1, b2, cross );
-   fr = astAnnul( fr );
-}
-
-static int IsUnitFrame( AstFrame *this, int *status ){
-/*
-*  Name:
-*     IsUnitFrame
-
-*  Purpose:
-*     Is this Frame equivalent to a UnitMap?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int IsUnitFrame( AstFrame *this, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astIsUnitFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied Frame is
-*     equivalent to a UnitMap when treated as a Mapping (note, the Frame
-*     class inherits from Mapping and therefore every Frame is also a Mapping).
-
-*  Parameters:
-*     this 
-*        Pointer to the Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the supplied Frame is equivalent to
-*     a UnitMap when treated as a Mapping.
-
-*-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return 0;
-
-/* The Region class is never equivalent to a UnitMap. */
-   return 0;
-}
-
-static int LineContains( AstFrame *this_frame, AstLineDef *l, int def, double *point, int *status ) {
-/*
-*  Name:
-*     LineContains
-
-*  Purpose:
-*     Determine if a line contains a point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astLineContains
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function determines if the supplied point is on the supplied
-*     line within the supplied Frame. The start point of the line is 
-*     considered to be within the line, but the end point is not. The tests 
-*     are that the point of closest approach of the line to the point should 
-*     be between the start and end, and that the distance from the point to 
-*     the point of closest aproach should be less than 1.0E-7 of the length 
-*     of the line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l
-*        Pointer to the structure defining the line. 
-*     def
-*        Should be set non-zero if the "point" array was created by a
-*        call to astLineCrossing (in which case it may contain extra
-*        information following the axis values),and zero otherwise.
-*     point
-*        Point to an array containing the axis values of the point to be 
-*        tested, possibly followed by extra cached information (see "def").
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the line contains the point. 
-
-*  Notes:
-*     - The pointer supplied for "l" should have been created using the 
-*     astLineDef method. These structures contained cached information about 
-*     the lines which improve the efficiency of this method when many 
-*     repeated calls are made. An error will be reported if the structure 
-*     does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result =0;
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
-   result = astLineContains( fr, l, def, point );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static int LineCrossing( AstFrame *this_frame, AstLineDef *l1, AstLineDef *l2, 
-                         double **cross, int *status ) {
-/*
-*  Name:
-*     LineCrossing
-
-*  Purpose:
-*     Determine if two lines cross.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2, 
-*                       double **cross, int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the protected astLineCrossing
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function determines if the two suplied line segments cross,
-*     and if so returns the axis values at the point where they cross.
-*     A flag is also returned indicating if the crossing point occurs
-*     within the length of both line segments, or outside one or both of
-*     the line segments.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l1
-*        Pointer to the structure defining the first line. 
-*     l2
-*        Pointer to the structure defining the second line. 
-*     cross
-*        Pointer to a location at which to put a pointer to a dynamically
-*        alocated array containing the axis values at the crossing. If
-*        NULL is supplied no such array is returned. Otherwise, the returned 
-*        array should be freed using astFree when no longer needed. If the 
-*        lines are parallel (i.e. do not cross) then AST__BAD is returned for 
-*        all axis values. Note usable axis values are returned even if the 
-*        lines cross outside the segment defined by the start and end points 
-*        of the lines. The order of axes in the returned array will take
-*        account of the current axis permutation array if appropriate. Note, 
-*        sub-classes such as SkyFrame may append extra values to the end
-*        of the basic frame axis values. A NULL pointer is returned if an
-*        error occurs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the lines cross at a point which is
-*     within the [start,end) segment of both lines. If the crossing point
-*     is outside this segment on either line, or if the lines are parallel,
-*     zero is returned. Note, the start point is considered to be inside
-*     the length of the segment, but the end point is outside.
-
-*  Notes:
-*     - The pointers supplied for "l1" and "l2" should have been created
-*     using the astLineDef method. These structures contained cached
-*     information about the lines which improve the efficiency of this method
-*     when many repeated calls are made. An error will be reported if
-*     either structure does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result =0;
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
-   result = astLineCrossing( fr, l1, l2, cross );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this_frame, const double start[2], 
-                            const double end[2], int *status ) {
-/*
-*  Name:
-*     LineDef
-
-*  Purpose:
-*     Creates a structure describing a line segment in a 2D Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstLineDef *LineDef( AstFrame *this, const double start[2], 
-*                             const double end[2], int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the protected astLineDef
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function creates a structure containing information describing a
-*     given line segment within the supplied 2D Frame. This may include
-*     information which allows other methods such as astLineCrossing to
-*     function more efficiently. Thus the returned structure acts as a
-*     cache to store intermediate values used by these other methods.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame. Must have 2 axes.
-*     start
-*        An array of 2 doubles marking the start of the line segment.
-*     end
-*        An array of 2 doubles marking the end of the line segment.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the memory structure containing the description of the
-*     line. This structure should be freed using astFree when no longer
-*     needed. A NULL pointer is returned (without error) if any of the
-*     supplied axis values are AST__BAD.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstLineDef *result;           /* Returned value */
-
-/* Initialise */
-   result = NULL;
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
-   result = astLineDef( fr, start, end );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return result;
-}
-
-static void LineOffset( AstFrame *this_frame, AstLineDef *line, double par, 
-                        double prp, double point[2], int *status ){
-/*
-*  Name:
-*     LineOffset
-
-*  Purpose:
-*     Find a position close to a line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void LineOffset( AstFrame *this, AstLineDef *line, double par, 
-*                      double prp, double point[2], int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astLineOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a position formed by moving a given distance along
-*     the supplied line, and then a given distance away from the supplied line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     line
-*        Pointer to the structure defining the line. 
-*     par
-*        The distance to move along the line from the start towards the end.
-*     prp
-*        The distance to move at right angles to the line. Positive
-*        values result in movement to the left of the line, as seen from
-*        the observer, when moving from start towards the end.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The pointer supplied for "line" should have been created using the 
-*     astLineDef method. This structure contains cached information about the 
-*     line which improves the efficiency of this method when many repeated 
-*     calls are made. An error will be reported if the structure does not 
-*     refer to the Frame specified by "this".
-*/
-
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-
-/* Obtain a pointer to the Region's current Frame and then invoke the
-   method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
-   astLineOffset( fr, line, par, prp, point );
-   fr = astAnnul( fr );
-}
-
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     Region member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstRegion *this;       /* Pointer to Region structure */
-   int result;            /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->frameset, mode, extra, fail );
-   if( !result ) result = astManageLock( this->points, mode, extra, fail );
-   if( !result ) result = astManageLock( this->unc, mode, extra, fail );
-   if( !result ) result = astManageLock( this->defunc, mode, extra, fail );
-   if( !result ) result = astManageLock( this->basemesh, mode, extra, fail );
-   if( !result ) result = astManageLock( this->basegrid, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static AstRegion *MapRegion( AstRegion *this, AstMapping *map0,
-                             AstFrame *frame0, int *status ) {
-/*
-*+
-*  Name:
-*     astMapRegion
-
-*  Purpose:
-*     Transform a Region into a new Frame using a given Mapping.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstRegion *astMapRegion( AstRegion *this, AstMapping *map,
-*                              AstFrame *frame ) 
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function returns a pointer to a new Region which corresponds to
-*     supplied Region in some other specified coordinate system. A
-*     Mapping is supplied which transforms positions between the old and new
-*     coordinate systems. The new Region may not be of the same class as
-*     the original region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     map
-*        Pointer to a Mapping which transforms positions from the
-*        coordinate system represented by the supplied Region to the 
-*        coordinate system specified by "frame". The supplied Mapping should 
-*        define both forward and inverse transformations, and these 
-*        transformations should form a genuine inverse pair. That is, 
-*        transforming a position using the forward transformation and then 
-*        using the inverse transformation should produce the original input 
-*        position. Some Mapping classes (such as PermMap, MathMap, SphMap) 
-*        can result in Mappings for which this is not true.
-*     frame
-*        Pointer to a Frame describing the coordinate system in which 
-*        the new Region is required.
-
-*  Returned Value:
-*     astMapRegion()
-*        A pointer to a new Region. This Region will represent the area
-*        within the coordinate system specified by "frame" which corresponds 
-*        to the supplied Region.
-
-*  Notes:
-*     - This is the protected implementation of this function - it does
-*     not simplify the returned Region. The public implementation is 
-*     astMapRegionID, which simplifies the returned Region.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *frame;  
-   AstFrameSet *fs;  
-   AstMapping *map;
-   AstPointSet *ps2;
-   AstPointSet *ps1;
-   AstPointSet *pst;
-   AstRegion *result;
-   double **ptr1;
-   double **ptr2;
-   int i;
-   int icurr;        
-   int j;
-   int nax1;
-   int nax2;
-   int np;
-   int ok;
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If a FrameSet was supplied for the Mapping, use the base->current
-   Mapping */
-   if( astIsAFrameSet( map0 ) ) {
-      map = astGetMapping( (AstFrameSet *) map0, AST__BASE, AST__CURRENT );
-   } else {
-      map = astClone( map0 );
-   }
-
-/* If a FrameSet was supplied for the Frame, use the current Frame. */
-   if( astIsAFrameSet( frame0 ) ) {
-      frame = astGetFrame( (AstFrameSet *) frame0, AST__CURRENT );
-   } else {
-      frame = astClone( frame0 );
-   }
-
-/* First check the Mapping is suitable. It must defined both a forward
-   and an inverse Mapping. */
-   if( !astGetTranInverse( map ) ) {
-      astError( AST__NODEF, "astMapRegion(%s): The supplied %s does not "
-                "define an inverse transformation.", status, astGetClass( this ),
-                astGetClass( map ) );
-   } else if( !astGetTranForward( map ) ) {
-      astError( AST__NODEF, "astMapRegion(%s): The supplied %s does not "
-                "define a forward transformation.", status, astGetClass( this ),
-                astGetClass( map ) );
-   }
-
-/* It must not introduce any bad axis values. We can only perform this
-   test reliably if the supplied Region has not bad axis values. */
-   ps1 = this->points;
-   if( ps1 ) {
-      nax1 = astGetNcoord( ps1 );
-      np = astGetNpoint( ps1 );
-      ptr1 = astGetPoints( ps1 );
-      if( ptr1 ) {
-         ok = 1;
-         for( i = 0; i < nax1 && ok; i++ ){
-            for( j = 0; j < np; j++ ) {
-               if( ptr1[ i ][ j ] == AST__BAD ){
-                  ok = 0;
-                  break;
-               }
-            }
-         }
-         if( ok ) {
-            pst = astRegTransform( this, ps1, 1, NULL, NULL );
-            ps2 = astTransform( map, pst, 1, NULL );
-            nax2 = astGetNcoord( ps2 );
-            ptr2 = astGetPoints( ps2 );
-            if( ptr2 ) {
-               for( i = 0; i < nax2 && ok; i++ ){
-                  for( j = 0; j < np; j++ ) {
-                     if( ptr2[ i ][ j ] == AST__BAD ){
-                        ok = 0;
-                        break;
-                     }
-                  }
-               }
-               if( !ok ) {
-                  astError( AST__NODEF, "astMapRegion(%s): The region which "
-                            "results from using the supplied %s to transform "
-                            "the supplied %s is undefined.", status, astGetClass( this ),
-                            astGetClass( map ), astGetClass( this ) );
-               }
-            }
-            ps2 = astAnnul( ps2 );
-            pst = astAnnul( pst );
-         }
-      }
-   }
-
-/* Take a deep copy of the supplied Region. */
-   result = astCopy( this );
-
-/* Get a pointer to the encapsulated FrameSet. */
-   if( astOK ) {
-      fs = result->frameset;
-
-/* Add in the new Frame and Mapping. First note the index of the original
-   current Frame. */
-      icurr = astGetCurrent( fs );
-      astAddFrame( fs, AST__CURRENT, map, frame );
-
-/* Remove the original current Frame. */
-      astRemoveFrame( fs, icurr );
-
-/* The base and current Frames of the resulting FrameSet are now (in
-   general) different and so the Region should include its FrameSet in any
-   Dump. */
-      astSetRegionFS( result, 1 );
-   }
-
-/* Since the Mapping has been changed, any cached information calculated
-   on the basis of the Mapping properties may no longer be up to date. */
-   astResetCache( this );   
-
-/* Free resources */
-   map = astAnnul( map );
-   frame = astAnnul( frame );
-
-/* If not OK, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-/*
-*++
-*  Name:
-c     astMask<X>
-f     AST_MASK<X>
-
-*  Purpose:
-*     Mask a region of a data grid.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     int astMask<X>( AstRegion *this, AstMapping *map, int inside, int ndim, 
-c                     const int lbnd[], const int ubnd[], <Xtype> in[], 
-c                     <Xtype> val )
-f     RESULT = AST_MASK<X>( THIS, MAP, INSIDE, NDIM, LBND, UBND, IN, VAL, 
-f                           STATUS )
-
-*  Class Membership:
-*     Mapping method.
-
-*  Description:
-*     This is a set of functions for masking out regions within gridded data 
-*     (e.g. an image). The functions modifies a given data grid by
-*     assigning a specified value to all samples which are inside (or outside 
-c     if "inside" is zero) 
-f     if INSIDE is .FALSE.) 
-*     the specified Region.
-*
-*     You should use a masking function which matches the numerical
-*     type of the data you are processing by replacing <X> in
-c     the generic function name astMask<X> by an appropriate 1- or
-f     the generic function name AST_MASK<X> by an appropriate 1- or
-*     2-character type code. For example, if you are masking data
-c     with type "float", you should use the function astMaskF (see
-f     with type REAL, you should use the function AST_MASKR (see
-*     the "Data Type Codes" section below for the codes appropriate to
-*     other numerical types).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to a Region. 
-c     map
-f     MAP = INTEGER (Given)
-*        Pointer to a Mapping. The forward transformation should map
-*        positions in the coordinate system of the supplied Region
-*        into pixel coordinates as defined by the 
-c        "lbnd" and "ubnd" parameters. A NULL pointer
-f        LBND and UBND arguments. A value of AST__NULL 
-*        can be supplied if the coordinate system of the supplied Region 
-*        corresponds to pixel coordinates. This is equivalent to
-*        supplying a UnitMap.
-*
-*        The number of inputs for this Mapping (as given by its Nin attribute) 
-*        should match the number of axes in the supplied Region (as given
-*        by the Naxes attribute of the Region).
-*        The number of outputs for the Mapping (as given by its Nout attribute) 
-*        should match the number of
-c        grid dimensions given by the value of "ndim"
-f        grid dimensions given by the value of NDIM 
-*        below. 
-c     inside
-f     INSIDE = INTEGER (Given)
-*        A boolean value which indicates which pixel are to be masked. If 
-c        a non-zero value 
-f        .TRUE.
-*        is supplied, then all grid pixels with centres inside the supplied 
-*        Region are assigned the value given by
-c        "val",
-f        VAL,
-*        and all other pixels are left unchanged. If 
-c        zero 
-f        .FALSE.
-*        is supplied, then all grid pixels with centres not inside the supplied 
-*        Region are assigned the value given by
-c        "val",
-f        VAL,
-*        and all other pixels are left unchanged. Note, the Negated
-*        attribute of the Region is used to determine which pixel are
-*        inside the Region and which are outside. So the inside of a Region 
-*        which has not been negated is the same as the outside of the 
-*        corresponding negated Region.
-*
-*        For types of Region such as PointList which have zero volume,
-*        pixel centres will rarely fall exactly within the Region. For
-*        this reason, the inclusion criterion is changed for zero-volume
-*        Regions so that pixels are included (or excluded) if any part of
-*        the Region passes through the pixel. For a PointList, this means
-*        that pixels are included (or excluded) if they contain at least
-*        one of the points listed in the PointList.
-c     ndim
-f     NDIM = INTEGER (Given)
-*        The number of dimensions in the input grid. This should be at
-*        least one.
-c     lbnd
-f     LBND( NDIM ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim" elements,
-f        An array
-*        containing the coordinates of the centre of the first pixel
-*        in the input grid along each dimension.
-c     ubnd
-f     UBND( NDIM ) = INTEGER (Given)
-c        Pointer to an array of integers, with "ndim" elements,
-f        An array
-*        containing the coordinates of the centre of the last pixel in
-*        the input grid along each dimension.
-*
-c        Note that "lbnd" and "ubnd" together define the shape
-f        Note that LBND and UBND together define the shape
-*        and size of the input grid, its extent along a particular
-c        (j'th) dimension being ubnd[j]-lbnd[j]+1 (assuming the
-c        index "j" to be zero-based). They also define
-f        (J'th) dimension being UBND(J)-LBND(J)+1. They also define
-*        the input grid's coordinate system, each pixel having unit
-*        extent along each dimension with integral coordinate values
-*        at its centre.
-c     in
-f     IN( * ) = <Xtype> (Given and Returned)
-c        Pointer to an array, with one element for each pixel in the
-f        An array, with one element for each pixel in the
-*        input grid, containing the data to be masked.  The
-*        numerical type of this array should match the 1- or
-*        2-character type code appended to the function name (e.g. if
-c        you are using astMaskF, the type of each array element
-c        should be "float").
-f        you are using AST_MASKR, the type of each array element
-f        should be REAL).
-*
-*        The storage order of data within this array should be such
-*        that the index of the first grid dimension varies most
-*        rapidly and that of the final dimension least rapidly
-c        (i.e. Fortran array indexing is used).
-f        (i.e. normal Fortran array storage order).
-*
-*        On exit, the samples specified by
-c        "inside" are set to the value of "val".
-f        INSIDE are set to the value of VAL. 
-*        All other samples are left unchanged.
-c     val
-f     VAL = <Xtype> (Given)
-*        This argument should have the same type as the elements of
-c        the "in" array. It specifies the value used to flag the
-f        the IN array. It specifies the value used to flag the
-*        masked data (see
-c        "inside").
-f        INSIDE).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMask<X>()
-f     AST_MASK<X> = INTEGER
-*        The number of pixels to which a value of 
-c        "badval" 
-f        BADVAL 
-*        has been assigned.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Data Type Codes:
-*     To select the appropriate masking function, you should
-c     replace <X> in the generic function name astMask<X> with a
-f     replace <X> in the generic function name AST_MASK<X> with a
-*     1- or 2-character data type code, so as to match the numerical
-*     type <Xtype> of the data you are processing, as follows:
-c     - D: double
-c     - F: float
-c     - L: long int
-c     - UL: unsigned long int
-c     - I: int
-c     - UI: unsigned int
-c     - S: short int
-c     - US: unsigned short int
-c     - B: byte (signed char)
-c     - UB: unsigned byte (unsigned char)
-f     - D: DOUBLE PRECISION
-f     - R: REAL
-f     - I: INTEGER
-f     - UI: INTEGER (treated as unsigned)
-f     - S: INTEGER*2 (short integer)
-f     - US: INTEGER*2 (short integer, treated as unsigned)
-f     - B: BYTE (treated as signed)
-f     - UB: BYTE (treated as unsigned)
-*
-c     For example, astMaskD would be used to process "double"
-c     data, while astMaskS would be used to process "short int"
-c     data, etc.
-f     For example, AST_MASKD would be used to process DOUBLE
-f     PRECISION data, while AST_MASKS would be used to process
-f     short integer data (stored in an INTEGER*2 array), etc.
-f
-f     For compatibility with other Starlink facilities, the codes W
-f     and UW are provided as synonyms for S and US respectively (but
-f     only in the Fortran interface to AST).
-
-*--
-*/
-/* Define a macro to implement the function for a specific data
-   type. */
-#define MAKE_MASK(X,Xtype) \
-static int Mask##X( AstRegion *this, AstMapping *map, int inside, int ndim, \
-                    const int lbnd[], const int ubnd[], \
-                    Xtype in[], Xtype val, int *status ) { \
-\
-/* Local Variables: */ \
-   AstFrame *grid_frame;         /* Pointer to Frame describing grid coords */ \
-   AstRegion *used_region;       /* Pointer to Region to be used by astResample */ \
-   Xtype *c;                     /* Pointer to next array element */ \
-   Xtype *d;                     /* Pointer to next array element */ \
-   Xtype *out;                   /* Pointer to the array used for resample output */ \
-   Xtype *tmp_out;               /* Pointer to temporary output array */ \
-   double *lbndgd;               /* Pointer to array holding lower grid bounds */ \
-   double *ubndgd;               /* Pointer to array holding upper grid bounds */ \
-   int *lbndg;                   /* Pointer to array holding lower grid bounds */ \
-   int *ubndg;                   /* Pointer to array holding upper grid bounds */ \
-   int idim;                     /* Loop counter for coordinate dimensions */ \
-   int ipix;                     /* Loop counter for pixel index */ \
-   int nax;                      /* Number of Region axes */ \
-   int nin;                      /* Number of Mapping input coordinates */ \
-   int nout;                     /* Number of Mapping output coordinates */ \
-   int npix;                     /* Number of pixels in supplied array */ \
-   int npixg;                    /* Number of pixels in bounding box */ \
-   int result;                   /* Result value to return */ \
-\
-/* Initialise. */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Obtain value for the Naxes attribute of the Region. */ \
-   nax = astGetNaxes( this ); \
-\
-/* If supplied, obtain values for the Nin and Nout attributes of the Mapping. */ \
-   if( map ) { \
-      nin = astGetNin( map ); \
-      nout = astGetNout( map ); \
-\
-/* If OK, check that the number of mapping inputs matches the \
-   number of axes in the Region. Report an error if necessary. */ \
-      if ( astOK && ( nax != nin ) ) { \
-         astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
-                   "inputs (%d).", status, astGetClass( this ), nin ); \
-         astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                   "to specify a position.", status, \
-                   astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
-      } \
-\
-/* If OK, check that the number of mapping outputs matches the \
-   number of grid dimensions. Report an error if necessary. */ \
-      if ( astOK && ( ndim != nout ) ) { \
-         astError( AST__NGDIN, "astMask"#X"(%s): Bad number of mapping " \
-                   "outputs (%d).", status, astGetClass( this ), nout ); \
-         astError( AST__NGDIN, "The pixel grid requires %d coordinate value%s " \
-                   "to specify a position.", status, \
-                   ndim, ( ndim == 1 ) ? "" : "s" ); \
-      } \
-\
-/* Create a new Region by mapping the supplied Region with the supplied \
-   Mapping. The resulting Region represents a region in grid coordinates. */ \
-      grid_frame = astFrame( ndim, "Domain=grid", status ); \
-      used_region = astMapRegion( this, map, grid_frame ); \
-      grid_frame = astAnnul( grid_frame ); \
-\
-/* If no Mapping was supplied check that the number of grid dimensions \
-   matches the number of axes in the Region.*/ \
-   } else if ( astOK && ( ( ndim != nax ) || ( ndim < 1 ) ) ) { \
-      used_region = NULL; \
-      astError( AST__NGDIN, "astMask"#X"(%s): Bad number of input grid " \
-                "dimensions (%d).", status, astGetClass( this ), ndim ); \
-      if ( ndim != nax ) { \
-         astError( AST__NGDIN, "The %s given requires %d coordinate value%s " \
-                   "to specify an input position.", status, \
-                   astGetClass( this ), nax, ( nax == 1 ) ? "" : "s" ); \
-      } \
-\
-/* If no Mapping was supplied and the parameters look OK, clone the \
-   supplied Region pointer for use later on. */ \
-   } else { \
-      used_region = astClone( this ); \
-   } \
-\
-/* Check that the lower and upper bounds of the input grid are \
-   consistent. Report an error if any pair is not. */ \
-   if ( astOK ) { \
-      for ( idim = 0; idim < ndim; idim++ ) { \
-         if ( lbnd[ idim ] > ubnd[ idim ] ) { \
-            astError( AST__GBDIN, "astMask"#X"(%s): Lower bound of " \
-                      "input grid (%d) exceeds corresponding upper bound " \
-                      "(%d).", status, astGetClass( this ), \
-                      lbnd[ idim ], ubnd[ idim ] ); \
-            astError( AST__GBDIN, "Error in input dimension %d.", status, \
-                      idim + 1 ); \
-            break; \
-         } \
-      } \
-   } \
-\
-/* Allocate memory, and then get the bounding box of this new Region in its \
-   current Frame (grid coordinates). This bounding box assumes the region \
-   has not been negated. */ \
-   lbndg = astMalloc( sizeof( int )*(size_t) ndim ); \
-   ubndg = astMalloc( sizeof( int )*(size_t) ndim ); \
-   lbndgd = astMalloc( sizeof( double )*(size_t) ndim ); \
-   ubndgd = astMalloc( sizeof( double )*(size_t) ndim ); \
-   if( astOK ) { \
-      astGetRegionBounds( used_region, lbndgd, ubndgd ); \
-\
-/* We convert the floating point bounds to integer pixel bounds, and at \
-   the same time expand the box by 2 pixels at each edge to ensure that \
-   rounding errors etc do not cause any of the Region to fall outside (or \
-   on) the box. Do not let the expanded box extend outside the supplied \
-   array bounds. Also note the total number of pixels in the supplied \
-   array, and in the bounding box. */ \
-      npix = 1; \
-      npixg = 1; \
-      for ( idim = 0; idim < ndim; idim++ ) { \
-         lbndg[ idim ] = MAX( lbnd[ idim ], (int)( lbndgd[ idim ] + 0.5 ) - 2 ); \
-         ubndg[ idim ] = MIN( ubnd[ idim ], (int)( ubndgd[ idim ] + 0.5 ) + 2 ); \
-         npix *= ( ubnd[ idim ] - lbnd[ idim ] + 1 ); \
-         npixg *= ( ubndg[ idim ] - lbndg[ idim ] + 1 ); \
-         if( npixg <= 0 ) break; \
-      } \
-\
-/* If the bounding box is null, return without action. */ \
-      if( npixg > 0 ) { \
-\
-/* All points outside this box are either all inside, or all outside, the \
-   Region. So we can speed up processing by setting all the points which are \
-   outside the box to the supplied data value (if required). This is \
-   faster than checking each point individually using the Transform method \
-   of the Region. We do this by supplying an alternative output array to \
-   the resampling function below, which has been pre-filled with "val" at \
-   every pixel. */ \
-         if( ( inside != 0 ) == ( astGetNegated( used_region ) != 0 ) ) { \
-\
-/* Allocate memory for the alternative output array, and fill it with \
-   "val". */ \
-            tmp_out = astMalloc( sizeof( Xtype )*(size_t) npix ); \
-            if( tmp_out ) { \
-               c = tmp_out; \
-               for( ipix = 0; ipix < npix; ipix++ ) *(c++) = val; \
-               result = npix - npixg; \
-            } \
-\
-/* Indicate that we will use this temporary array rather than the \
-   supplied array. */ \
-            out = tmp_out; \
-\
-/* If the outside of the grid box is outside the region of interest it \
-   will be unchanged in the resturned array. Therefore we can use the \
-   supplied array as the output array below. */ \
-         } else { \
-            tmp_out = NULL; \
-            out = in; \
-         } \
-\
-/* Temporarily invert the Region if required. The Region Transform methods \
-   leave interior points unchanged and assign AST__BAD to exterior points. \
-   This is the opposite of what we want (which is to leave exterior \
-   points unchanged and assign VAL to interior points), so we negate the \
-   region if the inside is to be assigned the value VAL.*/ \
-         if( inside ) astNegate( used_region ); \
-\
-/* Invoke astResample to mask just the region inside the bounding box found \
-   above (specified by lbndg and ubndg), since all the points outside this \
-   box will already contain their required value. */ \
-         result += astResample##X( used_region, ndim, lbnd, ubnd, in, NULL, AST__NEAREST, \
-                                   NULL, NULL, 0, 0.0, 100, val, ndim, \
-                                   lbnd, ubnd, lbndg, ubndg, out, NULL ); \
-\
-/* Revert to the original setting of the Negated attribute. */ \
-         if( inside ) astNegate( used_region ); \
-\
-/* If required, copy the output data from the temporary output array to \
-   the supplied array, and then free the temporary output array. */ \
-         if( tmp_out ) { \
-            c = tmp_out; \
-            d = in; \
-            for( ipix = 0; ipix < npix; ipix++ ) *(d++) = *(c++); \
-            tmp_out = astFree( tmp_out ); \
-         }\
-      }\
-   } \
-\
-/* Free resources */ \
-   ubndg = astFree( ubndg ); \
-   lbndg = astFree( lbndg ); \
-   ubndgd = astFree( ubndgd ); \
-   lbndgd = astFree( lbndgd ); \
-   used_region = astAnnul( used_region ); \
-\
-/* If an error occurred, clear the returned result. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-}
-
-/* Expand the above macro to generate a function for each required
-   data type. */
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_MASK(LD,long double)
-#endif
-MAKE_MASK(D,double)
-MAKE_MASK(L,long int)
-MAKE_MASK(UL,unsigned long int)
-MAKE_MASK(I,int)
-MAKE_MASK(UI,unsigned int)
-MAKE_MASK(S,short int)
-MAKE_MASK(US,unsigned short int)
-MAKE_MASK(B,signed char)
-MAKE_MASK(UB,unsigned char)
-MAKE_MASK(F,float)
-
-/* Undefine the macro. */
-#undef MAKE_MASK
-
-
-
-static int Match( AstFrame *this_frame, AstFrame *target,
-                  int **template_axes, int **target_axes,
-                  AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astMatch
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function matches the current Frame of a "template" Region
-*     to a "target" frame and determines whether it is possible to
-*     convert coordinates between them.  If it is, a Mapping that
-*     performs the transformation is returned along with a new Frame
-*     that describes the coordinate system that results when this
-*     Mapping is applied to the current Frame of the target
-*     Region. In addition, information is returned to allow the axes
-*     in this "result" Frame to be associated with the corresponding
-*     axes in the target and template Frames from which they are
-*     derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template Region, whose current Frame
-*        describes the coordinate system (or set of possible
-*        coordinate systems) into which we wish to convert our
-*        coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the index of the axis in the
-*        template Region's current Frame from which it is
-*        derived. If it is not derived from any template Region
-*        axis, a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the index of the target Frame axis
-*        from which it is derived. If it is not derived from any
-*        target Frame axis, a value of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the target
-*        Frame and the result Frame (see below) and the inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target Frame and the current
-*        Frame of the template Region. In particular, when the
-*        template allows the possibility of transformaing to any one
-*        of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to Region's current Frame */
-   int match;                    /* Result to be returned */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Invoke the parent astMatch method on the current Frame within the
-   encapsulated FrameSet within the Region. */
-   fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
-   match = astMatch( fr, target, template_axes, target_axes, map, result );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return match;
-}
-
-static void MatchAxes( AstFrame *frm1_frame, AstFrame *frm2, int *axes, 
-                       int *status ) {
-/*
-*  Name:
-*     MatchAxes
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void MatchAxes( AstFrame *frm1, AstFrame *frm2, int *axes )
-*                     int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astMatchAxes
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-*     frm1
-*        Pointer to the first Frame.
-*     frm2
-*        Pointer to the second Frame.
-*     axes
-*        Pointer to an 
-*        integer array in which to return the indices of the axes (within
-*        the second Frame) that correspond to each axis within the first
-*        Frame. Axis indices start at 1. A value of zero will be stored
-*        in the returned array for each axis in the first Frame that has 
-*        no corresponding axis in the second Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the first Frame.
-*     status
-*        Pointer to inherited status value.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping 
-*     can be found between them using astFindFrame or astConvert. Thus, 
-*     "corresponding axes" are not necessarily identical. For instance, 
-*     SkyFrame axes in two Frames will match even if they describe 
-*     different celestial coordinate systems
-*/
-
-/* Local Variables: */
-   AstFrame *frm1;               /* Pointer to Region's current Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the astMatchAxesX method on frm2, passing it the current Frame 
-   within the encapsulated FrameSet within the Region as "frm1". */
-   frm1 = astGetFrame( ((AstRegion *) frm1_frame)->frameset, AST__CURRENT );
-   astMatchAxesX( frm2, frm1, axes );
-   frm1 = astAnnul( frm1 );
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes, 
-                        int *status ) {
-/*
-*  Name:
-*     MatchAxesX
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-*                      int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astMatchAxesX
-*     method inherited from the Frame class).
-
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-*     frm2
-*        Pointer to the second Frame.
-*     frm1
-*        Pointer to the first Frame.
-*     axes
-*        Pointer to an integer array in which to return the indices of 
-*        the axes (within the first Frame) that correspond to each axis 
-*        within the second Frame. Axis indices start at 1. A value of zero 
-*        will be stored in the returned array for each axis in the second
-*        Frame that has no corresponding axis in the first Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the second Frame.
-*     status
-*        Pointer to inherited status value.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping 
-*     can be found between them using astFindFrame or astConvert. Thus, 
-*     "corresponding axes" are not necessarily identical. For instance, 
-*     SkyFrame axes in two Frames will match even if they describe 
-*     different celestial coordinate systems
-*/
-
-/* Local Variables: */
-   AstFrame *frm2;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the current Frame in the FrameSet. */
-   frm2 = astGetFrame( ((AstRegion *) frm2_frame)->frameset, AST__CURRENT );
-
-/* Invoke the astMatchAxesX on the current Frame. */
-   astMatchAxesX( frm2, frm1, axes );
-
-/* Free resources */
-   frm2 = astAnnul( frm2 );
-}
-
-static void Negate( AstRegion *this, int *status ) {
-/*
-*++
-*  Name:
-c     astNegate
-f     AST_NEGATE
-
-*  Purpose:
-*     Negate the area represented by a Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     void astNegate( AstRegion *this )
-f     CALL AST_NEGATE( THIS, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function negates the area represented by a Region. That is,
-*     points which were previously inside the region will then be
-*     outside, and points which were outside will be inside. This is
-*     acomplished by toggling the state of the Negated attribute for
-*     the supplied region.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Toggle the Negated attribute. */
-   astSetNegated( this, astGetNegated( this ) ? 0 : 1 );
-
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-*  Name:
-*     Norm
-
-*  Purpose:
-*     Normalise a set of Region coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void Norm( AstAxis *this, double value[], int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astNorm method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a set of coordinate values for the
-*     current Frame of a Region, which might potentially be
-*     unsuitable for display to a user (for instance, may lie outside
-*     the expected range of values) into a set of acceptable
-*     alternative values suitable for display.
-*
-*     Typically, for Frames whose axes represent cyclic values (such
-*     as angles or positions on the sky), this function wraps an
-*     arbitrary set of coordinates, so that they lie within the first
-*     cycle (say zero to 2*pi or -pi/2 to +pi/2). For Frames with
-*     ordinary linear axes, without constraints, this function will
-*     typically return the original coordinate values unchanged.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     value
-*        An array of double, with one element for each Region axis.
-*        This should contain the initial set of coordinate values,
-*        which will be modified in place.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to the current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astNorm method to obtain the new values. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astNorm( fr, value );
-   fr = astAnnul( fr );
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
-                     AstMapping *reg, int *status ) {
-/*
-*  Name:
-*     NormBox
-
-*  Purpose:
-*     Extend a box to include effect of any singularities in the Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-*                      AstMapping *reg, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astNormBox method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function modifies a supplied box to include the effect of any
-*     singularities in the co-ordinate system represented by the Frame.
-*     For a normal Cartesian coordinate system, the box will be returned
-*     unchanged. Other classes of Frame may do other things. For instance,
-*     a SkyFrame will check to see if the box contains either the north
-*     or south pole and extend the box appropriately.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     lbnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        lower axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     ubnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        upper axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     reg
-*        A Mapping which should be used to test if any singular points are
-*        inside or outside the box. The Mapping should leave an input
-*        position unchanged if the point is inside the box, and should
-*        set all bad if the point is outside the box.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to the current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astNormBox method to obtain the new values. Annul the Frame
-   pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astNormBox( fr, lbnd, ubnd, reg );
-   fr = astAnnul( fr );
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
-                    const double point2[], double offset, double point3[], int *status ) {
-/*
-*  Name:
-*     Offset
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void Offset( AstFrame *this,
-*                  const double point1[], const double point2[],
-*                  double offset, double point3[], int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the Region coordinate values of a point
-*     which is offset a specified distance along the geodesic curve
-*     between two other points.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     point1
-*        An array of double, with one element for each Region axis.
-*        This should contain the coordinates of the point marking the
-*        start of the geodesic curve.
-*     point2
-*        An array of double, with one element for each Region axis
-*        This should contain the coordinates of the point marking the
-*        end of the geodesic curve.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be towards the second
-*        point. If it is negative, it will be in the opposite
-*        direction. This offset need not imply a position lying
-*        between the two points given, as the curve will be
-*        extrapolated if necessary.
-*     point3
-*        An array of double, with one element for each Region axis
-*        in which the coordinates of the required point will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - "Bad" coordinate values will also be returned if the two
-*     points supplied are coincident (or otherwise fail to uniquely
-*     specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astOffset method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astOffset( fr, point1, point2, offset, point3 );
-   fr = astAnnul( fr );
-}
-
-static double Offset2( AstFrame *this_frame, const double point1[2], 
-                       double angle, double offset, double point2[2], int *status ){
-/*
-*  Name:
-*     Offset2
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve in a 2D Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double Offset2( AstFrame *this, const double point1[2], double angle,
-*                     double offset, double point2[2], int *status );
-
-*  Class Membership:
-*     Region member function (over-rides the protected astOffset2
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function finds the Frame coordinate values of a point which
-*     is offset a specified distance along the geodesic curve at a
-*     given angle from a specified starting point. It can only be
-*     used with 2-dimensional Frames.
-*
-*     For example, in a basic Frame, this offset will be along the
-*     straight line joining two points. For a more specialised Frame
-*     describing a sky coordinate system, however, it would be along
-*     the great circle passing through two sky positions.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This should contain the coordinates of the
-*        point marking the start of the geodesic curve.
-*     angle
-*        The angle (in radians) from the positive direction of the second
-*        axis, to the direction of the required position, as seen from
-*        the starting position. Positive rotation is in the sense of
-*        rotation from the positive direction of axis 2 to the positive
-*        direction of axis 1.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve. If this is positive, it will be in the direction of the
-*        given angle. If it is negative, it will be in the opposite
-*        direction.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the required point will be returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The direction of the geodesic curve at the end point. That is, the
-*     angle (in radians) between the positive direction of the second
-*     axis and the continuation of the geodesic curve at the requested
-*     end point. Positive rotation is in the sense of rotation from
-*     the positive direction of axis 2 to the positive direction of axis 1.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - An error will be reported if the Frame is not 2-dimensional.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double result;                /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astOffset2 method for this Frame. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astOffset2( fr, point1, angle, offset, point2 );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-*++
-*  Name:
-c     astOverlap
-f     AST_OVERLAP
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     int astOverlap( AstRegion *this, AstRegion *that ) 
-f     RESULT = AST_OVERLAP( THIS, THAT, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function returns an integer value indicating if the two
-*     supplied Regions overlap. The two Regions are converted to a commnon
-*     coordinate system before performing the check. If this conversion is 
-*     not possible (for instance because the two Regions represent areas in
-*     different domains), then the check cannot be performed and a zero value 
-*     is returned to indicate this.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the first Region.
-c     that
-f     THAT = INTEGER (Given)
-*        Pointer to the second Region.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astOverlap()
-f     AST_OVERLAP = INTEGER
-*        A value indicating if there is any overlap between the two Regions.
-*        Possible values are:
-*
-*        0 - The check could not be performed because the second Region
-*            could not be mapped into the coordinate system of the first
-*            Region.
-*
-*        1 - There is no overlap between the two Regions.
-*
-*        2 - The first Region is completely inside the second Region.
-*
-*        3 - The second Region is completely inside the first Region.
-*
-*        4 - There is partial overlap between the two Regions.
-*
-*        5 - The Regions are identical to within their uncertainties.
-*
-*        6 - The second Region is the exact negation of the first Region
-*            to within their uncertainties.
-
-*  Notes:
-*     - The returned values 5 and 6 do not check the value of the Closed 
-*     attribute in the two Regions. 
-*     - A value of zero will be returned if this function is invoked with the 
-*     AST error status set, or if it should fail for any reason.
-*--
-
-* Implementation Notes:
-*    This function is simply a wrap-up for the protected astOverlapX
-*    method which performs the required processing but swaps the order
-*    of the two arguments. This is a trick to allow the astOverlap method 
-*    to be over-ridden by derived classes on the basis of the class of either 
-*    of the two arguments.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Invoke the "astOverlapX" method with the two arguments swapped. */
-   return astOverlapX( that, this );
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astOverlapX
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int astOverlapX( AstRegion *that, AstRegion *this ) 
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function performs the processing for the public astOverlap
-*     method and has exactly the same interface except that the order
-*     of the two arguments is swapped. This is a trick to allow
-*     the astOverlap method to be over-ridden by derived classes on
-*     the basis of the class of either of its two arguments.
-*
-*     See the astOverlap method for details of the interface.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm_reg1;           /* Pointer to base Frame in "reg1" Frame */
-   AstFrame *frm_reg1;            /* Pointer to current Frame in "reg1" Frame */
-   AstFrameSet *fs0;              /* FrameSet connecting Region Frames */
-   AstFrameSet *fs;               /* FrameSet connecting Region Frames */
-   AstMapping *cmap;              /* Mapping connecting Region Frames */
-   AstMapping *map;               /* Mapping form "reg2" current to "reg1" base */
-   AstMapping *map_reg1;          /* Pointer to current->base Mapping in "reg1" */
-   AstPointSet *ps1;              /* Mesh covering second Region */
-   AstPointSet *ps3;              /* Mesh covering first Region */
-   AstPointSet *ps4;              /* Mesh covering first Region */
-   AstPointSet *ps2;              /* Mesh covering second Region */
-   AstPointSet *reg2_mesh;        /* Mesh covering second Region */
-   AstPointSet *reg1_mesh;        /* Mesh covering first Region */
-   AstPointSet *reg2_submesh;     /* Second Region mesh minus boundary points */
-   AstRegion *reg1;               /* Region to use as the first Region */
-   AstRegion *reg2;               /* Region to use as the second Region */
-   AstRegion *unc1;               /* "unc" mapped into Frame of first Region */
-   AstRegion *unc;                /* Uncertainty in second Region */
-   double **ptr1;                 /* Pointer to mesh axis values */
-   double **ptr;                  /* Pointer to pointset data */
-   double *p;                     /* Pointer to next axis value */
-   int *mask;                     /* Mask identifying common boundary points */
-   int allbad;                    /* Were all axis values bad? */
-   int allgood;                   /* Were all axis values good? */
-   int bnd1;                      /* Does reg1 have a finite boundary */
-   int bnd2;                      /* Does reg2 have a finite boundary */
-   int bnd_that;                  /* Does "that" have a finite boundary */
-   int bnd_this;                  /* Does "this" have a finite boundary */
-   int case1;                     /* First region inside second region? */
-   int first;                     /* First pass? */
-   int good;                      /* Any good axis values found? */
-   int i;                         /* Mesh axis index */
-   int iax;                       /* Axis index */
-   int inv0;                      /* Original FrameSet Invert flag */
-   int ip;                        /* Index of point */
-   int j;                         /* Mesh point index */
-   int nc;                        /* Number of axis values per point */
-   int np;                        /* Number of points in mesh */
-   int result;                    /* Value to return */
-   int reg1_neg;                  /* Was "reg1" negated to make it bounded? */
-   int reg2_neg;                  /* Was "reg2" negated to make it bounded? */
-   int that_neg;                  /* Was "that" negated to make it bounded? */
-   int this_neg;                  /* Was "this" negated to make it bounded? */
-   int touch;                     /* Do the Regions touch? */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Return 5 if the two Regions are equal using the astEqual method. */
-   if( astEqual( this, that ) ) {
-      return 5;
-
-/* Return 6 if the two Regions are equal using the Equal method after
-   temporarily negating the first. */
-   } else {
-      astNegate( this );
-      result = astEqual( this, that );
-      astNegate( this );
-      if( result ) return 6;
-   }
-
-/* Get a FrameSet which connects the Frame represented by the second Region 
-   to the Frame represented by the first Region. Check that the conection is 
-   defined. */
-   fs0 = astConvert( that, this, "" );
-   if( !fs0 ) return 0;
-   inv0 = astGetInvert( fs0 );
-
-/* The rest of this function tests for overlap by representing one of the 
-   Regions as a mesh of points along its boundary, and then checking to see
-   if any of the points in this mesh fall inside or outside the other Region. 
-   This can only be done if the Region has a boundary of finite length (e.g. 
-   Circles, Boxes, etc). Other Regions (e.g. some Intervals) do not have 
-   finite boundaries and consequently report an error if an attempt is made 
-   to represent them using a boundary mesh. We now therefore check to see if 
-   either of the two Regions has a finite boundary length. This will be the 
-   case if the region is bounded, or if it can be made bounded simply by 
-   negating it. If a Region is unbounded regardless of the setting of its 
-   Negated flag, then it does not have a finite boundary. We leave the
-   Negated attributes (temporaily) set to the values that cause the
-   Regions to be bounded. Set flags to indicate if the Regions have been
-   negated. */
-   bnd_this = astGetBounded( this );
-   if( !bnd_this ) {
-      astNegate( this );
-      bnd_this = astGetBounded( this );
-      if( ! bnd_this ) {
-         astNegate( this );
-         this_neg = 0;
-      } else {    
-         this_neg = 1;
-      }
-   } else {
-      this_neg = 0;
-   }
-
-   bnd_that = astGetBounded( that );
-   if( !bnd_that ) {
-      astNegate( that );
-      bnd_that = astGetBounded( that );
-      if( ! bnd_that ) {
-         astNegate( that );
-         that_neg = 0;
-      } else {    
-         that_neg = 1;
-      }
-   } else {
-      that_neg = 0;
-   }
-
-/* If neither Regions has a finite boundary, then we cannot currently
-   determine any overlap, so report an error. Given more time, it 
-   is probably possible to think of some way of determining overlap
-   between two unbounded Regions, but it will probably not be a common
-   requirement and so is currently put off to a rainy day. */
-   if( !bnd_this && !bnd_that && astOK ) {
-      astError( AST__INTER, "astOverlap(Region): Neither of the two "
-                "supplied Regions (classes %s and %s) has a finite "
-                "boundary.", status, astGetClass(this), astGetClass(that) );
-      astError( AST__INTER, "The current implementation of astOverlap "
-                "cannot determine the overlap between two Regions "
-                "unless at least one of them has a finite boundary." , status);
-   }
-
-/* If only one of the two Regions has a finite boundary, we must use its
-   mesh first. Choose the finite boundary Region as the "second" region.
-   Also store a flag indicating if the first Region has a finite boundary. */
-   if( bnd_that ) {
-      reg1 = this;
-      reg2 = that;
-      bnd1 = bnd_this;
-      bnd2 = bnd_that;
-      reg1_neg = this_neg;
-      reg2_neg = that_neg;
-   } else {
-      reg1 = that;
-      reg2 = this;
-      bnd1 = bnd_that;
-      bnd2 = bnd_this;
-      reg1_neg = that_neg;
-      reg2_neg = this_neg;
-   }
-
-/* We may need to try again with the above selections swapped. We only do
-   this once though. Set a flag to indicate that we are about to start the
-   first pass. */
-   first = 1;
-L1:
-
-/* Get a FrameSet which connects the Frame represented by the second Region 
-   to the Frame represented by the first Region. Check that the conection is 
-   defined. */
-   fs = astClone( fs0 );
-   astSetInvert( fs, (reg2 == that ) ? inv0 : 1 - inv0 );
-   if( fs ) {
-
-/* Get a pointer to the Frame represented by the first Region. */
-      frm_reg1 = astGetFrame( reg1->frameset, AST__CURRENT );
-
-/* Get a pointer to the Mapping from current to base Frame in the first 
-   Region. */ 
-      map_reg1 = astGetMapping( reg1->frameset, AST__CURRENT, AST__BASE );
-
-/* Get the Mapping from the current Frame of the second Region to the
-   current Frame of the first Region. */
-      cmap = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* Combine these Mappings to get the Mapping from current Frame of the
-   second region to the base Frame of the first Region. */
-      map = (AstMapping *) astCmpMap( cmap, map_reg1, 1, "", status );
-
-/* Get a mesh of points covering the second Region. These points are
-   within the current Frame of the second Region. */
-      reg2_mesh = astRegMesh( reg2 );
-
-/* Transform this mesh into the base Frame of the first Region. */
-      ps1 = astTransform( map, reg2_mesh, 1, NULL );
-
-/* Check there are some good points in the transformed pointset. */
-      good = 0;
-      np = astGetNpoint( ps1 );
-      nc = astGetNcoord( ps1 );
-      ptr1 = astGetPoints( ps1 );      
-      if( ptr1 ) {
-         for( i = 0; i < nc && !good; i++ ) {
-            for( j = 0; j < np; j++ ) {
-               if( ptr1[ i ][ j ] != AST__BAD ) {
-                  good = 1;
-                  break;
-               }
-            }
-         }
-      }
-
-/* If the transformed mesh contains no good points, swap the regions and
-   try again. */
-      if( !good ) {
-         fs = astAnnul( fs );
-         frm_reg1 = astAnnul( frm_reg1 );
-         map_reg1 = astAnnul( map_reg1 );
-         cmap = astAnnul( cmap );
-         map = astAnnul( map );
-         reg2_mesh = astAnnul( reg2_mesh );
-         ps1 = astAnnul( ps1 );
-
-         if( first ) {
-            first = 0;
-
-            if( !bnd_that ) {
-               reg1 = this;
-               reg2 = that;
-               bnd1 = bnd_this;
-               bnd2 = bnd_that;
-               reg1_neg = this_neg;
-               reg2_neg = that_neg;
-            } else {
-               reg1 = that;
-               reg2 = this;
-               bnd1 = bnd_that;
-               bnd2 = bnd_this;
-               reg1_neg = that_neg;
-               reg2_neg = this_neg;
-            }
-            goto L1;     
-
-         } else {
-            return 0;
-         }
-      }
-
-/* Also transform the Region describing the positional uncertainty within 
-   the second supplied Region into the base Frame of the first supplied 
-   Region. */
-      unc = astGetUncFrm( reg2, AST__CURRENT );
-      bfrm_reg1 = astGetFrame( reg1->frameset, AST__BASE );
-      unc1 = astMapRegion( unc, map, bfrm_reg1 );
-
-/* See if all points within this transformed mesh fall on the boundary of
-   the first Region, to within the joint uncertainty of the two Regions. If
-   so the two Regions have equivalent boundaries. We can only do this is
-   the first region is bounded. */
-      if( astRegPins( reg1, ps1, unc1, &mask ) && good ) {
-
-/* If the boundaries are equivalent, the Regions are either identical or 
-   are mutually exclusive. To distinguish between these cases, we
-   looked at the Bounded attributes. If the Bounded attribute is the same
-   for both Regions then they are identical, otherwise they are mutually
-   exclusive. */
-         result = ( ( !reg1_neg && bnd1 ) == ( !reg2_neg && bnd2 ) ) ? 5 : 6;
-
-/* If the boundaries of the two Regions are not equivalent. */
-      } else {
-
-/* Create a new PointSet containing those points from the mesh which are
-   not on the boundary of the first Region. These points are identified by 
-   the mask array created by the astRegPins method above. */
-         reg2_submesh = GetSubMesh( mask, reg2_mesh, status );
-
-/* Transform the points in the submesh of the second Region into the
-   current Frame of the first Region. */
-         (void ) astAnnul( ps1 );
-         ps1 = astTransform( cmap, reg2_submesh, 1, NULL );
-
-/* Transform this submesh using the first Region as a Mapping. Any points
-   outside the first region will be set bad in the output PointSet. */
-         ps2 = astTransform( (AstMapping *) reg1, ps1, 1, NULL );
-
-/* Get the number of axes and points in this PointSet. */
-         nc = astGetNcoord( ps2 );
-         np = astGetNpoint( ps2 );
-
-/* Note if there were any common points (i.e. points on the boundary of
-   both regions). */
-         touch = ( astGetNpoint( reg2_mesh ) != np );
-
-/* Get pointers to the axis data in this PointSet, and check they can be
-   used safely. */
-         ptr = astGetPoints( ps2 );
-         if( astOK ) {
-
-/* Loop round all points checking if the axis values are bad. We want a
-   flag saying if there are any good axis values and another flag saying if
-   there are any bad axis values. */
-            allbad = 1;
-            allgood = 1;
-            for( iax = 0; iax < nc; iax++ ) {
-               p = ptr[ iax ];
-               for( ip = 0; ip < np; ip++,p++ ) {
-                  if( *p == AST__BAD ) {
-                     allgood = 0;
-                     if( !allbad ) break;
-                  } else {
-                     allbad = 0;
-                     if( !allgood ) break;
-                  }
-               }
-            }
-
-/* If the entire mesh of the (potentially negated) second Region was either 
-   on the boundary of, or inside, the (potentially negated) first region, 
-   determine the result depending on whether the regions have been
-   negated and whether they are bounded. Check for impossible states (or
-   maybe just errors in my logic). */
-            if( allgood ) {
-
-/* Second region has a mesh so it must be bounded. */
-               if( !bnd2 && astOK ) {
-                     astError( AST__INTER, "astOverlap(%s): Inconsistent "
-                               "state 1 (internal AST programming error).", 
-                               status, astGetClass( this ) );
-
-/* If the first region has been made bounded by negating it... */
-               } else if( reg1_neg ) {
-                  if( bnd1 ) {
-
-/* If the second region has been made bounded by negating it, then the
-   unnegated first region is completely inside the unnegated second region. */
-                     if( reg2_neg ) {
-                        result = 2;
-
-/* If the second region was bounded without negating it, then there is
-   no overlap between the unnegated first region and the second region. */
-                     } else {
-                        result = 1;
-                     }
-
-/* If the first region has been negated then it should not be unbounded.
-   This is ensured by the nature of the code that sets the "this_neg" and
-   "that_neg" flags above. */
-                  } else if( astOK ) {
-                     astError( AST__INTER, "astOverlap(%s): Inconsistent "
-                               "state 2 (internal AST programming error).", 
-                               status, astGetClass( this ) );
-                  }
-
-/* If the first region was bounded without negating it, but the second
-   region was made bounded by negating it, there is partial overlap. */
-               } else if( reg2_neg ) {
-                  result = 4;
-
-/* If the first region was bounded without negating it, but the second
-   region was also bounded without negating it, the second region is
-   completely inside the first region. */
-               } else {
-                  result = 3;
-               }
-
-/* If part of the mesh of the second Region was inside the first region,
-   and part was outside, then there is partial ocverlap. */
-            } else if( !allbad ) {
-               result = 4;
-
-/* If no part of the mesh of the (possibly negated) second Region was inside 
-   the (possibly negated) first region ... */
-            } else {
-
-/* First deal with cases where the first region is unbounded. */
-               if( !bnd1 ) {
-                  if( reg1_neg && astOK ) {
-                     astError( AST__INTER, "astOverlap(%s): Inconsistent "
-                               "state 5 (internal AST programming error).", 
-                               status, astGetClass( this ) );
-                  } else if( reg2_neg ){
-                     result = 2;
-                  } else {
-                     result = 1;
-                  }
-
-/* The second region has a mesh so it must be bounded. */
-               } else if( !bnd2 && astOK ) {
-                     astError( AST__INTER, "astOverlap(%s): Inconsistent "
-                               "state 6 (internal AST programming error).", 
-                               status, astGetClass( this ) );
-
-/* So now we know both (possibly negated) regions are bounded. */
-               } else {
-
-/* We know that none of the reg2 mesh points are inside the bounded reg1.
-   But this still leaves two cases: 1) reg1 could be contained completely
-   within reg2, or 2) there is no overlap between reg2 and reg1. To
-   distinguish between these two cases we use reg2 to transform a point 
-   on the boundary of reg1. First get a mesh on the boundary of reg1. */
-                  reg1_mesh = astRegMesh( reg1 );
-
-/* Transform this mesh into the coordinate system of the second Region. */
-                  ps3 = astTransform( cmap, reg1_mesh, 0, NULL );
-
-/* Transform the points in this mesh using the second Region as a Mapping. 
-   Any points outside the second region will be set bad in the output 
-   PointSet. */
-                  ps4 = astTransform( (AstMapping *) reg2, ps3, 1, NULL );
-
-/* Get pointers to the axis data in this PointSet,and check they can be
-   used safely. */
-                  ptr = astGetPoints( ps4 );
-                  if( astOK ) {
-
-/* Test the firts point and set a flag indicating if we are in case 1 (if
-   not, we must be in case 2). */
-                     case1 = ( ptr[ 0 ][ 0 ] != AST__BAD );
-                  
-/* Apply logic similar to the other cases to determine the result. */
-                     if( reg1_neg ) {
-                        if( case1 == ( reg2_neg != 0 ) ) {
-                           result = 3;
-                        } else {
-                           result = 4;
-                        }
-                     } else {
-                        if( case1 == ( reg2_neg != 0 ) ) {
-                           result = 1;
-                        } else {
-                           result = 2;
-                        }
-                     }
-                  }
-
-/* Free resources. */
-                  reg1_mesh = astAnnul( reg1_mesh );
-                  ps3 = astAnnul( ps3 );
-                  ps4 = astAnnul( ps4 );
-               }
-	    }
-        }
-
-/* If there was no intersection or overlap, but the regions touch, then we 
-   consider there to be an intersection if either region is closed. */	 
-	if( touch && result == 1 ) {
-	   if( astGetClosed( this) || astGetClosed( that ) ) result = 4;
-	} 
-	 
-/* Free resources.*/
-         reg2_submesh = astAnnul( reg2_submesh );
-         ps2 = astAnnul( ps2 );
-      }
-
-/* Free resources.*/
-      fs = astAnnul( fs );
-      bfrm_reg1 = astAnnul( bfrm_reg1 );
-      frm_reg1 = astAnnul( frm_reg1 );
-      map_reg1 = astAnnul( map_reg1 );
-      cmap = astAnnul( cmap );
-      map = astAnnul( map );
-      ps1 = astAnnul( ps1 );
-      reg2_mesh = astAnnul( reg2_mesh );
-      unc = astAnnul( unc );
-      unc1 = astAnnul( unc1 );
-      if( mask) mask = astFree( mask );
-   }
-   fs0 = astAnnul( fs0 );
-
-/* The returned value should take account of whether "this" or "that" is
-   the first Region. If "this" was used as the first Region, then the
-   result value calculated above is already correct. If "that" was used as 
-   the first Region, then we need to change the result to swap "this" and
-   "that". */
-   if( reg1 == that ) {
-      if( result == 2 ) {
-         result = 3;
-      } else if( result == 3 ) {
-         result = 2;
-      }
-   }
-
-/* Re-instate the original Negated flags. */
-   if( this_neg ) astNegate( this );
-   if( that_neg ) astNegate( that );
-
-/* If not OK, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static void Overlay( AstFrame *template_frame, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template Region on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astOverlay
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes from the current Frame of a
-*     Region on to another Frame, so as to over-ride selected
-*     attributes of that second Frame. Normally only those attributes
-*     which have been specifically set in the template will be
-*     transferred. This implements a form of defaulting, in which a
-*     Frame acquires attributes from the template, but retains its
-*     original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-
-*  Parameters:
-*     template
-*        Pointer to the template Region, for whose current Frame
-*        values should have been explicitly set for any attribute
-*        which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of
-*        the "result" Frame (see below). For each axis in the result
-*        frame, the corresponding element of this array should contain
-*        the (zero-based) index of the axis in the current Frame of
-*        the template Region to which it corresponds. This array is
-*        used to establish from which template Frame axis any
-*        axis-dependent attributes should be obtained.
-*
-*        If any axis in the result Frame is not associated with a
-*        template Frame axis, the corresponding element of this array
-*        should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the current Frame in the Region and invoke its 
-   astOverlay method to overlay its attributes. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( ((AstRegion *) template_frame)->frameset, AST__CURRENT );
-   astOverlay( fr, template_axes, result );
-   fr = astAnnul( fr );
-}
-
-static void PermAxes( AstFrame *this_frame, const int perm[], int *status ) {
-/*
-*  Name:
-*     PermAxes
-
-*  Purpose:
-*     Permute the order of a Region's axes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void PermAxes( AstFrame *this, const int perm[], int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astPermAxes method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function permutes the order in which the axes in the
-*     current Frame of a Region occur.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     perm
-*        An array of int (with one element for each axis of the
-*        Region's current Frame) which lists the axes in their new
-*        order. Each element of this array should be a (zero-based)
-*        axis index identifying the axes according to their old
-*        (un-permuted) order.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Only genuine permutations of the axis order are permitted, so
-*     each axis must be referenced exactly once in the "perm" array.
-*     - If more than one axis permutation is applied to the same Frame
-*     in a Region, the effects are cumulative.
-*/
-
-/* Local Variables: */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Invoke the astPermAxes method on the encapsulated FrameSet. */
-   astPermAxes( this->frameset, perm );
-
-}
-
-static AstFrame *PickAxes( AstFrame *this_frame, int naxes, const int axes[],
-                           AstMapping **map, int *status ) {
-/*
-*  Name:
-*     PickAxes
-
-*  Purpose:
-*     Create a new Frame by picking axes from a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstFrame *PickAxes( AstFrame *this, int naxes, const int axes[],
-*                         AstMapping **map, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astPickAxes protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function creates a new Frame whose axes are copies of axes
-*     picked from the encapsulated Frame of an existing Region. Other
-*     Frame attributes are also copied from this existing Frame to the
-*     new Frame. Zero or more of the original axes may be picked in
-*     any order, but each can be used only once. Additional axes (with
-*     default characteristics) may be included in the new Frame if
-*     required.
-*
-*     Optionally, a Mapping that converts between the original Frame's
-*     axes and those of the new Frame may also be returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of axes required in the new Frame.
-*     axes
-*        Pointer to an array of int with naxes elements. This should
-*        contain (zero based) axis indices specifying the axes which
-*        are to be included in the new Frame, in the order
-*        required. Each axis index may occur only once.
-*
-*        If additional (default) axes are also to be included, the
-*        corresponding elements of this array should be set to -1.
-*     map
-*        Address of a location to receive a pointer to a new
-*        Mapping. This will be a PermMap (or a UnitMap as a special
-*        case) that describes the axis permutation that has taken
-*        place between the current Frame of the Region and the new
-*        Frame.  The forward transformation will convert from the
-*        original Region's axes to the new one's, and vice versa.
-*
-*        If this Mapping is not required, a NULL value may be supplied
-*        for this parameter.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new Frame.
-
-*  Notes:
-*     - The class of object returned may differ from that of the
-*     original current Frame, depending on which axes are
-*     selected. For example, if a single axis is picked from a
-*     SkyFrame (which always has two axes), the resulting Frame cannot
-*     be a valid SkyFrame, so will revert to the parent class (Frame)
-*     instead.
-*     - The new Frame contains a deep copy of all the data selected
-*     from the original current Frame. Modifying the new Frame will
-*     therefore not affect the Region or the Frames it contains.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;            /* Current Frame from input Region */
-   AstFrame *frame;           /* Pointer to Frame to be returned */
-   AstMapping *cbmap;         /* Base->current Mapping from input Region */
-   AstMapping *fsmap;         /* Mapping from selected current to base axes */
-   AstRegion *breg;           /* Region spanning selected base Frame axes */
-   AstRegion *creg;           /* Region spanning selected current Frame axes */
-   AstRegion *this;           /* Pointer to Region structure */
-   int *base_axes;            /* Holds selected base frame axis indices */
-   int def;                   /* Were any default axes requested? */
-   int i;                     /* Axis index */
-   int nbase;                 /* No. of selected base Frame axes */
- 
-/* Initialise the returned pointers. */
-   if ( map ) *map = NULL;
-   frame = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return frame;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Check that a valid set of axes is being selected . */
-   astValidateAxisSelection( this, naxes, axes, "astPickAxes" );
-
-/* Pick the required axes from the current Frame of the encapsulated
-   FrameSet. */
-   cfrm = astGetFrame( this->frameset, AST__CURRENT );
-   frame = astPickAxes( cfrm, naxes, axes, map );
-
-/* See if any default axes are to be included in the returned Frame. */
-   def = 0;
-   for( i = 0; i < naxes; i++ ) {
-      if( axes[ i ] < 0 ) def = 1;
-   }    
-
-/* Regions cannot yet include extra default axes in the returned Frame
-   so return a basic Frame if any default axes were requested. */
-   if( ! def ) {
-
-/* We now see if the requested set of current Frame axes correspond to a 
-   unique set of base Frame axes. If they do, we may be able to return a 
-   Region spanning the selected axes rather than just a Frame. The check 
-   is performed by attempting to split the current->base Mapping. */
-      cbmap = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-      base_axes = astMapSplit( cbmap, naxes, axes, &fsmap );
-
-/* Check the Mapping could be split. */
-      if( base_axes ) {
-
-/* Store the number of base Frame axes that correspond to the requested
-   set of current Frame axes. */
-         nbase = astGetNout( fsmap );
-
-/* Attempt to create a new Region that spans the corresponding set of
-   base Frame axes. */
-         breg = astRegBasePick( this, nbase, base_axes );
-         if( breg ) {
-
-/* Use the split Mapping to map the base Frame region into the requested
-   Frame. We invert the "fsmap" first so that it maps the selected base
-   Frame axes into the selected current Frame axes. */
-            astInvert( fsmap );
-            creg = astMapRegion( breg, fsmap, frame );
-
-/* Copy properties from the old Region to the new Region. */
-            astRegOverlay( creg, this, 0 );
- 
-/* Return this new Region in place of the simple Frame found above. */
-            (void) astAnnul( frame );
-            frame = (AstFrame *) creg;
-
-/* Free resources */
-            breg = astAnnul( breg );
-         }
-         fsmap = astAnnul( fsmap );
-         base_axes = astFree( base_axes );
-      }
-      cbmap = astAnnul( cbmap );
-   }
-   cfrm = astAnnul( cfrm );
-   
-/* If an error occurred, annul the Mapping pointer (if requested) and
-   the new Frame pointer. */
-   if ( !astOK ) {
-      if ( map ) *map = astAnnul( *map );
-      frame = astAnnul( frame );
-   }
-
-/* Return the pointer to the new Frame. */
-   return frame;
-}
-
-static void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-*  Name:
-*     astRegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astRegBaseBox( AstRegion *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-
-*-
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* This abstract implementation simply reports an error. All sub-classes of 
-   Region should over-ride this to return appropriate values. */
-   astError( AST__INTER, "astRegBaseBox(%s): The %s class does not implement "
-             "the astRegBaseBox method inherited from the Region class "
-             "(internal AST programming error).", status, astGetClass( this ), 
-             astGetClass( this ) );
-}
-
-static void RegBaseBox2( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-*  Name:
-*     astRegBaseBox2
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astRegBaseBox2( AstRegion *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function is similar to astRegBaseBox in that it returns the 
-*     upper and lower axis bounds of a Region in the base Frame of the 
-*     encapsulated FrameSet. But, in addition to assuming that the
-*     supplied Region has not been negated, it also assumes that any
-*     component Regions contained within the supplied Region have not been
-*     negated.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-
-*-
-*/
-
-/* This base class implementation simply calls astRegBaseBox. Sub-classes
-   which contain component Regions should override it. */
-   astRegBaseBox( this, lbnd, ubnd );
-
-}
-
-static AstPointSet *RegBaseGrid( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astRegBaseGrid
-
-*  Purpose:
-*     Return a PointSet containing points spread through the volume of a 
-*     Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astRegBaseGrid( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a PointSet containing a set of points spread
-*     through the volume of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Pointer to the PointSet. If the Region is unbounded, a NULL pointer
-*     will be returned.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstBox *box;
-   AstFrame *frmb;
-   AstPointSet *ps1;
-   AstPointSet *ps2;
-   AstPointSet *result;
-   double **ptr2;
-   double **ptr;
-   double *lbnd;
-   double *ubnd;
-   int good;
-   int ic;
-   int ip;
-   int ipr;
-   int naxb;
-   int npnt2;
-
-/* Initialise */
-   result= NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return NULL;
-
-/* If the Region structure contains a pointer to a PointSet holding 
-   positions spread over the volume of the Region in the base Frame, 
-   return it. */
-   if( this->basegrid ) {
-      result = astClone( this->basegrid );
-
-/* Otherwise, check the Region is bounded. */
-   } else if( astGetBounded( this ) ) {
-
-/* Get the base Frame bounding box. */
-      naxb = astGetNin( this->frameset );
-      lbnd = astMalloc( sizeof( double )*(size_t)naxb );      
-      ubnd = astMalloc( sizeof( double )*(size_t)naxb );      
-      astRegBaseBox( this, lbnd, ubnd );      
-
-/* Create a Box covering this bounding box. */
-      frmb = astGetFrame( this->frameset, AST__BASE );
-      box = astBox( frmb, 1, lbnd, ubnd, NULL, "", status );
-
-/* Copy the MeshSize attribute to the new Box since this will be used by
-   the invocation of astRegBaseGrid below. */
-      astSetMeshSize( box, astGetMeshSize( this ) );
-
-/* Invoke the Box astRegGrid method. Note, the Box class overrides this  
-   implementation of astRegBaseGrid and does not (must not) invoke this
-   implementation, in order to avoid an infinite loop. */
-      ps1 = astRegBaseGrid( box );
-
-/* Some of the base Frame points in the above bounding box will fall outside 
-   the supplied Region. Use the Region as a Mapping to determine which they
-   are. Since the points are base Frame points, use astBTransform rather
-   than astTransform. */
-      ps2 = astBTransform( this, ps1, 1, NULL );
-
-/* We now create a PointSet which is a copy of "ps2" but with all the bad
-   points (i.e. the points in the bounding box grid which are not inside 
-   the supplied Region) removed. Create a result PointSet which is the same 
-   size as "ps2", then copy just the good points from "ps2" to the result 
-   PointSet, keeping a record of the number of points copied. */
-      ptr2 = astGetPoints( ps2 );
-      npnt2 = astGetNpoint( ps2 );
-      result = astPointSet( npnt2, naxb, "", status );
-      ptr = astGetPoints( result );
-      if( astOK ) {
-
-/* Initialise the index of the next point to be stored in "result". */
-         ipr = 0;
-
-/* Loop round all points in "ps2" */
-         for( ip = 0; ip < npnt2; ip++ ) {
-
-/* Copy each axis value for this point from "ps2" to "result". If a bad
-   axis value is encountered, flag that the point is bad and break out of
-   the axis loop. */
-            good = 1;
-            for( ic = 0; ic < naxb; ic++ ) {
-               if( ptr2[ ic ][ ip ] == AST__BAD ) {
-                  good = 0;
-                  break;
-               } else {
-                  ptr[ ic ][ ipr ] = ptr2[ ic ][ ip ];
-               }
-            }
-
-/* If the current point has no bad axis values, increment the index of
-   the next point to be stored in "result". */
-            if( good ) ipr++;
-         }      
-
-/* Truncate the "result" PointSet to exclude any unused space at the end
-   of the axis values arrays. */
-         astSetNpoint( result, ipr );
-      }
-
-/* Free resources */
-      lbnd = astFree( lbnd );
-      ubnd = astFree( ubnd );
-      frmb = astAnnul( frmb );
-      box = astAnnul( box );
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-
-/* Cache the new grid for future use. */
-      if( astOK ) this->basegrid = astClone( result );
-
-   }
-
-/* Annul the result if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astRegBaseMesh
-
-*  Purpose:
-*     Return a PointSet containing points spread around the boundary of a 
-*     Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a PointSet containing a set of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the uncertainties which were
-*     supplied when the Region was created.
-*
-*    If the Region has no boundary (i.e. is equivalent to a NullRegion), the 
-*    returned PointSet will contain a single point with a value of AST__BAD 
-*    on every axis.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-
-/* Check the local error status. */
-   if ( !astOK ) return NULL;
-
-/* This abstract method must be over-ridden by each concrete sub-class.
-   Report an error if this null imlementation is called.*/
-   astError( AST__INTER, "astRegBaseMesh(%s): The %s class does not implement "
-             "the astRegBaseMesh method inherited from the Region class "
-             "(internal AST programming error).", status, astGetClass( this ), 
-             astGetClass( this ) );
-   return NULL;
-}
-
-static AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-                               int *status ){
-/*
-*+
-*  Name:
-*     astRegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstRegion *astRegBasePick( AstRegion *this, int naxes, const int *axes )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - This base implementation returns NULL unless all base Frame axes
-*    are selected (possibly in a permuted order).
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-/* Local Variables: */
-   AstFrame *fr;        /* Pointer to the Region's base Frame */
-   AstRegion *result;   /* The returned Region pointer */
-   int found;           /* Has the current axis index been found yet? */
-   int i;               /* Axis index */
-   int j;               /* Index into the "axes" array */
-   int nax;             /* No. of base Frame axes */
-   int ok;              /* Are we doing a genuine axis permutation? */
-   int unit;            /* Is the axis permutation a unit map? */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the base Frame int he encapsulated FrameSet. */
-   fr = astGetFrame( this->frameset, AST__BASE );
-
-/* See how many axes it has. We only proceed if we are selecting all axes
-   in the base Frame. */
-   nax = astGetNaxes( fr );
-   if( nax == naxes ) {
-
-/* We now check that the axes array is a genuine permutation of all axes.
-   This means that all axis indices must occur once, and only once, within
-   the "axes" array. Look for each axis index in turn. */
-      unit = 1;
-      ok = 1;
-      for( i = 0; i < nax && ok; i++ ) {
-
-/* Check each element of the axes array to see if it holds the axis index
-   currently being looked for. */
-         found = 0;
-         for( j = 0; j < nax; j++ ) {
-
-/* If so, if this axis index has already been found, break out of the
-   loop. */
-            if( axes[ j ] == i ) {
-               if( found ) {
-                  ok = 0;
-                  break;                     
-               }
-               found = 1;
-
-/* Note if we do not have a unit map (i.e. each axis is permuted onto itself). */
-               if( i != j ) unit = 0;
-            }
-         }
-
-/* If the axis index was not found, we do not have a genuine axis
-   permutation. */
-         if( !found ) ok = 0;
-      }
-
-/* If we have a genuine axis permutation, create a Region which is a copy
-   of the supplied region and set it to represent its base Frame. */
-      if( ok ) {
-         result = astCopy( this );
-         astSetRegFS( result, fr );
-
-/* If the axis selection is not equivalent to a unit mapping, we now
-   permute the axes. */
-         if( !unit ) astPermAxes( result, axes );
-      }
-   }
-
-/* Free resources. */
-   fr = astAnnul( fr );
-
-/* Returned the result. */
-   return result;
-}
-
-static double *RegCentre( AstRegion *this, double *cen, double **ptr, 
-                          int index, int ifrm, int *status ){
-/*
-*+
-*  Name:
-*     astRegCentre
-
-*  Purpose:
-*     Re-centre a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double *astRegCentre( AstRegion *this, double *cen, double **ptr, 
-*                           int index, int ifrm )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function shifts the centre of the supplied Region to a
-*     specified position, or returns the current centre of the Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     cen
-*        Pointer to an array of axis values, giving the new centre.
-*        Supply a NULL value for this in order to use "ptr" and "index" to 
-*        specify the new centre.
-*     ptr
-*        Pointer to an array of pointers, one for each axis in the Region.
-*        Each pointer locates an array of axis values. This is the format
-*        returned by the PointSet method astGetPoints. Only used if "cen"
-*        is NULL.
-*     index
-*        The index of the point within the arrays identified by "ptr" at
-*        which is stored the coords for the new centre position. Only used 
-*        if "cen" is NULL.
-*     ifrm
-*        Should be AST__BASE or AST__CURRENT. Indicates whether the centre 
-*        position is supplied and returned in the base or current Frame of 
-*        the FrameSet encapsulated within "this".
-
-*  Returned Value:
-*     If both "cen" and "ptr" are NULL then a pointer to a newly
-*     allocated dynamic array is returned which contains the centre
-*     coords of the Region. This array should be freed using astFree when
-*     no longer needed. If either of "ptr" or "cen" is not NULL, then a
-*     NULL pointer is returned.
-
-*  Notes:
-*    - Any bad (AST__BAD) centre axis values are ignored. That is, the
-*    centre value on such axes is left unchanged.
-*    - Some Region sub-classes do not have a centre. Such classes will report 
-*    an AST__INTER error code if this method is called with either "ptr" or 
-*    "cen" not NULL. If "ptr" and "cen" are both NULL, then no error is
-*    reported if this method is invoked on a Region of an unsuitable class,
-*    but NULL is always returned.
-
-*-
-*/
-
-/* Local Variables: */
-   double *result;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* This abstract method must be over-ridden by each concrete sub-class
-   which allows the centre to be shifted. Report an error if this null 
-   imlementation is called to set a new centre. If it is called to
-   enquire the current centre, then return a NULL pointer. */
-   if( ptr || cen ) astError( AST__INTER, "astRegCentre(%s): The %s "
-                       "class does not implement the astRegCentre method "
-                       "inherited from the Region class (internal AST "
-                       "programming error).", status, astGetClass( this ), 
-                       astGetClass( this ) );
-
-   return NULL;
-}
-
-static void RegClearAttrib( AstRegion *this, const char *aattrib, 
-                            char **base_attrib, int *status ) {
-/*
-*+
-*  Name:
-*     astRegClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astRegClearAttrib( AstRegion *this, const char *aattrib, 
-*                             char **base_attrib ) 
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function clears the value of a named attribute in both the base 
-*     and current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     aattrib
-*        Pointer to a null terminated string holding the attribute name.
-*     base_attrib
-*        Address of a location at which to return a pointer to the null 
-*        terminated string holding the attribute name which was cleared in 
-*        the base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied attribute if the supplied attribute contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstMapping *junkmap;
-   AstMapping *map;
-   AstRegion *unc;
-   char *attrib;
-   char *battrib;
-   char buf1[ 100 ];
-   int *outs;          
-   int axis;
-   int baxis;
-   int i;           
-   int len;
-   int nc;
-   int rep;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Produce a lower case version of the attribute name string */
-   nc = strlen( aattrib );
-   attrib = astMalloc( nc + 1 );
-   for( i = 0; i < nc; i++ ) attrib[ i ] = tolower( aattrib[ i ] );
-   attrib[ nc ] = 0;    
-
-/* Clear the attribute in the current Frame in the encapsulated FrameSet.
-   Use the protected astClearAttrib method which does not cause the Frame
-   to be remapped within the FrameSet. */
-   frm = astGetFrame( this->frameset, AST__CURRENT );
-   astClearAttrib( frm, attrib );
-   frm = astAnnul( frm );
-   
-/* Indicate that we should use the supplied attribute name  with the base Frame. */
-   battrib = NULL;
-
-/* If the attribute name contains an axis number, we need to create a new
-   attribute name which refers to the corresponding base Frame axis
-   (since the base<->current Mapping may permute the axes). First parse the 
-   supplied attribute name to locate any axis index. */
-   len = strlen( attrib );
-   if( nc = 0, ( 2 == astSscanf( attrib, "%[^(](%d) %n", buf1, &axis, 
-                                 &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
-      axis--;
-
-/* See if the specified current Frame axis is connected to one and only
-   one base Frame axis. If so, get the index of the base Frame axis. */
-      map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-      outs = astMapSplit( map, 1, &axis, &junkmap );
-      if( junkmap && astGetNout( junkmap ) == 1 ) {
-         baxis = outs[ 0 ]; 
-
-/* If the base Frame axis index is different to the current Frame axis
-   index, create a new attribute name string using the base Frame axis index. */
-         if( baxis != axis ) {
-            battrib = astMalloc( strlen( attrib ) + 10 );
-            if( battrib ) sprintf( battrib, "%s(%d)", buf1, baxis + 1 );
-         }
-
-/* If there is no one base Frame axis which corresponds to the supplied
-   current Frame axis, report an error. */
-      } else if( astOK ) {
-         astError( AST__INTER, "astRegClearAttrib(%s): Unable to clear "
-                   "attribute \"%s\" in the base Frame of the %s", status,
-                   astGetClass( this ), attrib, astGetClass( this ) );
-         astError( AST__INTER, "There is no base Frame axis corresponding "
-                   "to current Frame axis %d\n", status, axis + 1 );
-      }
-
-/* Free resources */
-      outs = astFree( outs );
-      if( junkmap ) junkmap = astAnnul( junkmap );
-      map = astAnnul( map );
-   }
-
-/* Clear the appropriate attribute name in the base Frame. This time ensure 
-   that any error caused by the attribute name is annulled. Also clear it in
-   any uncertainty Region (the current Frame of the uncertainty Region is 
-   assumed to be equivalent to the base Frame of the parent Region). */
-   frm = astGetFrame( this->frameset, AST__BASE );
-   if( frm ) {
-      rep = astReporting( 0 );
-      astClearAttrib( frm, battrib ? battrib : attrib );
-      if( astTestUnc( this ) ) {
-         unc = astGetUncFrm( this, AST__BASE );
-         astRegClearAttrib( unc, battrib ? battrib : attrib, NULL );
-         unc = astAnnul( unc );
-      }
-      if( astStatus == AST__BADAT ) astClearStatus;
-      astReporting( rep );
-   }
-   frm = astAnnul( frm );
-
-/* If required return the modified base Frame attribute name. Otherwise, 
-   free it. */
-   if( base_attrib ) {
-      if( battrib ) {
-         *base_attrib = battrib;
-      } else {
-         *base_attrib = astStore( NULL, attrib, strlen( attrib ) + 1 );
-      }
-   } else {
-      battrib = astFree( battrib );
-   }      
-
-/* Since the base Frame has been changed, any cached information calculated
-   on the basis of the base Frame properties may no longer be up to date. */
-   astResetCache( this );   
-
-/* Free resources. */
-   attrib = astFree( attrib );
-
-}
-
-static AstPointSet *RegGrid( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astRegGrid
-
-*  Purpose:
-*     Return a PointSet containing points spread through the volume of a 
-*     Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astRegGrid( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points spread
-*     throughout the volume of the Region. The points refer to the current 
-*     Frame of the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the uncertainties which were
-*     supplied when the Region was created. Annul the pointer using
-*     astAnnul when it is no longer needed.
-
-*  Notes:
-*    - It should not be assumed that the returned points are evenly
-*    spaced withint he volume.
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-
-/* Local Variables; */
-   AstMapping *map;          /* Base -> current Frame Mapping */
-   AstPointSet *result;      /* Pointer to returned PointSet */
-
-/* Initialise the returned pointer */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* If the Region structure does not contain a pointer to a PointSet holding 
-   positions evenly spread over the volume of the Region in the base
-   Frame, create one now. Note, we cannot cache the grid in the current
-   Frame in this way since the current Frame grid depends on the proprties
-   of the current Frame (e.g. System) which can be changed at any time. */
-   if( !this->basegrid ) this->basegrid = astRegBaseGrid( this );
-
-/* Get the simplified base->current Mapping */
-   map = astRegMapping( this );
-
-/* If the Mapping is a UnitMap, just return a clone of the PointSet
-   pointer stored in the Region structure. */
-   if( astIsAUnitMap( map ) ){
-      result = astClone( this->basegrid );
-
-/* Otherwise, create a new PointSet holding the above points transformed 
-   into the current Frame. */
-   } else {
-      result = astTransform( map, this->basegrid, 1, NULL );
-   }
-
-/* Free resources.*/
-   map = astAnnul( map );
-
-/* If an error has occurred, annul the returned PointSet. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *RegMesh( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astRegMesh
-
-*  Purpose:
-*     Return a PointSet containing points spread over the boundary of a 
-*     Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astRegMesh( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the current Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Pointer to the PointSet. The axis values in this PointSet will have 
-*     associated accuracies derived from the uncertainties which were
-*     supplied when the Region was created. Annul the pointer using
-*     astAnnul when it is no longer needed.
-
-*  Notes:
-*    - It should not be assumed that the returned points are evenly
-*    spaced on the boundary.
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*-
-*/
-
-/* Local Variables; */
-   AstMapping *map;          /* Base -> current Frame Mapping */
-   AstPointSet *bmesh;       /* Base Frame mesh */
-   AstPointSet *result;      /* Pointer to returned PointSet */
-
-/* Initialise the returned pointer */
-   result = NULL;
-
-/* Check the local error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to a PointSet holding positions evenly spread over the 
-   boundary of the Region in the base Frame. */
-   bmesh = astRegBaseMesh( this );
-
-/* Get the simplified base->current Mapping */
-   map = astRegMapping( this );
-
-/* If the Mapping is a UnitMap, just return a clone of the mesh PointSet
-   pointer. */
-   if( astIsAUnitMap( map ) ){
-      result = astClone( bmesh );
-
-/* Otherwise, create a new PointSet holding the above points transformed 
-   into the current Frame. */
-   } else {
-      result = astTransform( map, bmesh, 1, NULL );
-   }
-
-/* Free resources.*/
-   bmesh = astAnnul( bmesh );
-   map = astAnnul( map );
-
-/* If an error has occurred, annul the returned PointSet. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int RegDummyFS( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astRegDummyFS
-
-*  Purpose:
-*     Check if a Region has a dummy FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int astRegDummyFS( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a flag indicating if the supplied Region has
-*     a dummy FrameSet.
-*
-*     The astDump method for a Region may choose not to include the
-*     Region's FrameSet in the dump, depending on the value of the
-*     RegionFS attribute and the nature of the FrameSet. If the FrameSet
-*     is omitted from the Dump, then special action has to be taken when
-*     the dump is subsequently read in and used to re-create the Region. 
-*     On encounterting such a dump, the astLoadRegion function will create 
-*     a dummy FrameSet and associate it with the reconstructed  Region. 
-*     The new Region should not be used however until this dummy FrameSet 
-*     has been replaced by the correct FrameSet. Performing this replacement 
-*     is the responsibility of the parent class (i.e. the class which choose 
-*     to omit the FrameSet from the dump). These will usually be Region 
-*     classes which encapsulate other Regions, such as CmpRegion, Prism, 
-*     Stc, etc.
-*
-*     This function can be used by astLoad... methods in sub-classes to 
-*     determine if a newly loaded component Region has a dummy FrameSet. If 
-*     so the astLoad function should either use the astSetRegFS method to 
-*     store a new FrameSet in the component Region. If the parent Region 
-*     itself has a dummy FrameSet (i.e. is a component Region contained
-*     within a higher level Region) then it cannot do this and should
-*     ignore the presence of the dummy FrameSet (it then becomes the
-*     responsibility of hte parent Region to load appropriate FrameSets 
-*     into all its components).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     Non-zero if the Region has a dummy FrameSet.
-
-*-
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* The Ident attribute of the FrameSet will be set to DUMMY_FS if the
-   FrameSet is a dummy. */
-   return !strcmp( astGetIdent( this->frameset ), DUMMY_FS );
-}
-
-static int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc, 
-                    int **mask, int *status ){
-/*
-*+
-*  Name:
-*     astRegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int astRegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                     int **mask )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Region. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Region "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*-
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return 0;
-
-/* This abstract implementation simply reports an error. All sub-classes of 
-   Region should over-ride this to return appropriate values. */
-   astError( AST__INTER, "astRegPins(%s): The %s class does not implement "
-             "the astRegPins method inherited from the Region class "
-             "(internal AST programming error).", status, astGetClass( this ), 
-             astGetClass( this ) );
-   return 0;
-}
-
-static void GetRegionBounds( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*++
-*  Name:
-c     astGetRegionBounds
-f     AST_GETREGIONBOUNDS
-
-*  Purpose:
-*     Returns the bounding box of Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     void astGetRegionBounds( AstRegion *this, double *lbnd, double *ubnd )
-f     CALL AST_GETREGIONBOUNDS( THIS, LBND, UBND, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-c     This function 
-f     This routine
-*     returns the upper and lower limits of a box which just encompasses
-*     the supplied Region. The limits are returned as axis values within
-*     the Frame represented by the Region. The value of the Negated
-*     attribute is ignored (i.e. it is assumed that the Region has not
-*     been negated).
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     lbnd
-f     LBND() = DOUBLE PRECISION (Returned)
-c        Pointer to an 
-f        An 
-*        array in which to return the lower axis bounds covered by the Region.
-*        It should have at least as many elements as there are axes in the 
-*        Region. If an axis has no lower limit, the returned value will
-*        be the largest possible negative value.
-c     ubnd
-f     UBND() = DOUBLE PRECISION (Returned)
-c        Pointer to an 
-f        An 
-*        array in which to return the upper axis bounds covered by the Region.
-*        It should have at least as many elements as there are axes in the 
-*        Region. If an axis has no upper limit, the returned value will
-*        be the largest possible positive value.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*    - The value of the Negated attribute is ignored (i.e. it is assumed that 
-*    the Region has not been negated).
-*    - If an axis has no extent on an axis then the lower limit will be
-*    returned larger than the upper limit. Note, this is different to an
-*    axis which has a constant value (in which case both lower and upper 
-*    limit will be returned set to the constant value).
-
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frm;             /* Current Frame */
-   AstMapping *smap;          /* Simplified base -> current Mapping */
-   AstPointSet *bmesh;        /* PointSet holding base Frame mesh */
-   AstPointSet *cmesh;        /* PointSet holding current Frame mesh */
-   double **bptr;             /* Pointer to PointSet coord arrays */
-   double *p;                 /* Array of values for current axis */
-   double width;              /* Width of bounding box on i'th axis */
-   int i;                     /* Axis count */
-   int ip;                    /* Index of current corner */
-   int j;                     /* Timer for low/high swaps */
-   int jmax;                  /* Increment between low/high swaps */
-   int lo;                    /* Assign low bound to next corner? */
-   int nbase;                 /* Number of base Frame axes */
-   int ncur;                  /* Number of current Frame axes */
-   int npos;                  /* Number of box corners */
-   
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Get the simplified base to current Mapping. */
-   smap = astRegMapping( this );
-
-/* If the simplified Mapping is a UnitMap, just store the base box bounds
-   in the returned arrays */
-   if( astIsAUnitMap( smap ) ) {
-      astRegBaseBox( this, lbnd, ubnd );      
-
-/* Otherwise, we get a mesh of points over the boundary of the Region within 
-   the base Frame, transform them into the current Frame, and find their bounds. */
-   } else {
-
-/* If the Region is bounded, we can get a genuine mesh of points on the
-   boundary of the Region. */
-      if( astGetBounded( this ) ) {
-         bmesh = astRegBaseMesh( this );
-
-/* If the Region is not bounded, no mesh can be created so we use the
-   corners of the base frame bounding box instead. */
-      } else {
-
-/* Get the base Frame bounding box. */
-         astRegBaseBox( this, lbnd, ubnd );      
-
-/* Get the number of corners in the base Frame bounding box. */
-         nbase = astGetNin( smap );
-         npos = pow( 2, nbase );
-
-/* Create a PointSet to hold the positions at the corners in the base
-   frame box. */
-         bmesh = astPointSet( npos, nbase, " ", status );
-         bptr = astGetPoints( bmesh );
-         if( bptr ) {
-
-/* Store the coordinates of the box corners in the PointSet. */
-            jmax = 1;
-            for( i = 0; i < nbase; i++ ) {
-               p = bptr[ i ];
-   
-               lo = 1;
-               j = 0;
-               for( ip = 0; ip < npos; ip++,j++ ) {
-                  if( j == jmax ) {
-                     lo = 1 - lo;
-                     j = 0;
-                  }
-                  p[ ip ] = lo ? lbnd[ i ] : ubnd[ i ];
-               }
-   
-               jmax *= 2;
-            }
-         }
-      }
-
-/* Create a new PointSet holding the above points transformed into the 
-   current Frame. */
-      cmesh = astTransform( smap, bmesh, 1, NULL );
-
-/* Get the axis bounds of this PointSet. */
-      astBndPoints( cmesh, lbnd, ubnd );     
-
-/* There is a possibility that these bounds may span a singularity in the
-   coordinate system such as the RA=0 line in a SkyFrame. So for each
-   axis we ensure the width (i.e. "ubnd-lbnd" ) is correct. */
-      frm = astGetFrame( this->frameset, AST__CURRENT );
-      ncur = astGetNaxes( frm );
-
-      for( i = 0; i < ncur; i++ ) {
-         width = astAxDistance( frm, i + 1, lbnd[ i ], ubnd[ i ] );
-         ubnd[ i ] = lbnd[ i ] + width;
-      }
-
-/* Release resources. */
-      frm = astAnnul( frm );
-      bmesh = astAnnul( bmesh );
-      cmesh = astAnnul( cmesh );
-   } 
-   smap = astAnnul( smap );
-}
-
-static void GetRegionBounds2( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*+
-*  Name:
-*     astGetRegionBounds
-
-*  Purpose:
-*     Returns the bounding box of Region.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astGetRegionBounds2( AstRegion *this, double *lbnd, double *ubnd )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function is like astGetRegionBounds, in that it returns the upper 
-*     and lower limits of a box which just encompasses the supplied Region, 
-*     as axis values within the Frame represented by the Region. But, in 
-*     addition to assuming that the supplied Region has not been negated, it 
-*     also assumes that any component Regions contained within the supplied 
-*     Region have not been negated.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds 
-*        covered by the Region. It should have at least as many elements 
-*        as there are axes in the Region.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds 
-*        covered by the Region. It should have at least as many elements 
-*        as there are axes in the Region.
-
-*  Notes:
-*    - The value of the Negated attribute is ignored (i.e. it is assumed that 
-*    the Region has not been negated). The Nagated attributes of any
-*    component Regions are also ignored.
-
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *smap;          /* Simplified base -> current Mapping */
-   double *lbndb;             /* Pointer to lower bounds on base box */
-   double *ubndb;             /* Pointer to upper bounds on base box */
-   int i;                     /* Axis count */
-   int nbase;                 /* Number of base Frame axes */
-   int ncur;                  /* Number of current Frame axes */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Find the number of axes in the base and current Frames of the
-   encapsulated FrameSet. */
-   nbase = astGetNin( this->frameset );
-   ncur = astGetNout( this->frameset );
-
-/* Get the bounding box in the base Frame of the encapsulated FrameSet. */
-   lbndb = astMalloc( sizeof( double )*(size_t) nbase );   
-   ubndb = astMalloc( sizeof( double )*(size_t) nbase );   
-   astRegBaseBox2( this, lbndb, ubndb );      
-
-/* Get the simplified base to current Mapping. */
-   smap = astRegMapping( this );
-
-/* Check pointers can be used safely. */
-   if( smap ) {
-
-/* If the simplified Mapping is a UnitMap, just copy the base box bounds
-   to the returned arrays */
-      if( astIsAUnitMap( smap ) ) {
-         for( i = 0; i < ncur; i++ ) {
-            lbnd[ i ] = lbndb[ i ];
-            ubnd[ i ] = ubndb[ i ];
-         }
-
-/* Otherwise, use astMapBox to find the corresponding current Frame
-   limits. */ 
-      } else {
-         for( i = 0; i < ncur; i++ ) {
-            astMapBox( smap, lbndb, ubndb, 1, i, lbnd + i, ubnd + i, 
-                       NULL, NULL );
-         }            
-      }
-   }
-
-/* Release resources. */
-   smap = astAnnul( smap );
-   lbndb = astFree( lbndb );
-   ubndb = astFree( ubndb );
-}
-
-static void GetRegionPoints( AstRegion *this, int maxpoint, int maxcoord, 
-                             int *npoint, double *points, int *status ){
-/*
-*++
-*  Name:
-c     astGetRegionPoints
-f     AST_GETREGIONPOINTS
-
-*  Purpose:
-*     Returns the positions that define the given Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     void astGetRegionPoints( AstRegion *this, int maxpoint, int maxcoord, 
-c                              int *npoint, double *points )
-f     CALL AST_GETREGIONPOINTS( THIS, MAXPOINT, MAXCOORD, NPOINT, POINTS, 
-f                               STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-c     This function 
-f     This routine
-*     returns the axis values at the points that define the supplied
-*     Region. The particular meaning of these points will depend on the
-*     type of class supplied, as listed below under "Applicability:".
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     maxpoint
-f     MAXPOINT = INTEGER (Given)
-*        If zero, the number of points needed to define the Region is 
-*        returned in 
-c        "*npoint",
-f        NPOINT,
-*        but no axis values are returned and all other parameters are ignored.
-*        If not zero, the supplied value should be the length of the
-c        second dimension of the "points" 
-f        first dimension of the POINTS 
-*        array. An error is reported if the number of points needed to define 
-*        the Region exceeds this number. 
-c     maxcoord
-f     MAXCOORD = INTEGER (Given)
-*        The length of the
-c        first dimension of the "points" array.
-f        second dimension of the POINTS array.
-*        An error is reported if the number of axes in the supplied Region 
-*        exceeds this number.
-c     npoint
-f     NPOINT = INTEGER (Returned)
-c        A pointer to an integer in which to return the
-f        The
-*        number of points defining the Region.
-c     points
-f     POINTS( MAXPOINT, MAXCOORD ) = DOUBLE PRECISION (Returned)
-c        The address of the first element in a 2-dimensional array of 
-c        shape "[maxcoord][maxpoint]", in which to return
-c        the coordinate values at the positions that define the Region.
-c        These are stored such that the value of coordinate number 
-c        "coord" for point number "point" is found in element 
-c        "points[coord][point]".
-f        An array in which to return the coordinates values at the 
-f        positions that define the Region. These are stored such that the
-f        value of coordinate number COORD for point number POINT
-f        is found in element POINTS(POINT,COORD).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*     Box    
-*        The first returned position is the Box centre, and the second is
-*        a Box corner.
-*     Circle 
-*        The first returned position is the Circle centre, and the second is
-*        a point on the circumference.
-*     CmpRegion  
-*        Returns a value of zero for 
-c        "*npoint"
-f        NPOINT
-*        and leaves the supplied array contents unchanged. To find the
-*        points defining a CmpRegion, use this method on the component
-*        Regions, which can be accessed by invoking 
-c        astDecompose
-f        AST_DECOMPOSE
-*        on the CmpRegion.
-*     Ellipse    
-*        The first returned position is the Ellipse centre. The second is
-*        the end of one of the axes of the ellipse. The third is some
-*        other point on the circumference of the ellipse, distinct from
-*        the second point.
-*     Interval   
-*        The first point corresponds to the lower bounds position, and
-*        the second point corresponds to the upper bounds position. These
-*        are reversed to indicate an extcluded interval rather than an
-*        included interval. See the Interval constructor for more
-*        information.
-*     NullRegion 
-*        Returns a value of zero for 
-c        "*npoint"
-f        NPOINT
-*        and leaves the supplied array contents unchanged. 
-*     PointList  
-*        The positions returned are those that were supplied when the
-*        PointList was constructed.
-*     Polygon    
-*        The positions returned are the vertex positions that were supplied 
-*        when the Polygon was constructed.
-*     Prism  
-*        Returns a value of zero for 
-c        "*npoint"
-f        NPOINT
-*        and leaves the supplied array contents unchanged. To find the
-*        points defining a Prism, use this method on the component
-*        Regions, which can be accessed by invoking 
-c        astDecompose
-f        AST_DECOMPOSE
-*        on the CmpRegion.
-
-*  Notes: 
-*     - If the coordinate system represented by the Region has been
-*     changed since it was first created, the returned axis values refer 
-*     to the new (changed) coordinate system, rather than the original
-*     coordinate system. Note however that if the transformation from
-*     original to new coordinate system is non-linear, the shape within
-*     the new coordinate system may be distorted, and so may not match
-*     that implied by the name of the Region subclass (Circle, Box, etc).
-
-*--
-*/
-
-/* Local Variables: */
-   AstPointSet *pset;       /* PointSet holding PointList axis values */
-   double **ptr;            /* Pointer to axes values in the PointList */
-   double *p;               /* Pointer to next input axis value */
-   double *q;               /* Pointer to next output axis value */
-   int j;                   /* Axis index */
-   int nc;                  /* No. of axes to copy */
-
-/* Initialise */
-   *npoint = 0;
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Return the number of points used to define the Region, if any. */
-   *npoint = this->points ? astGetNpoint( this->points ) : 0;
-
-/* Do nothing more unless a non-zero array size was supplied. */
-   if( *npoint > 0 && maxpoint != 0 ) {
-
-/* Transform the base Frame axis values into the current Frame. */
-      pset = astTransform( this->frameset, this->points, 1, NULL );
-
-/* Get the dimensionality of this PointList, and get a pointer to the axis
-   values. */
-      nc = astGetNcoord( pset );
-      ptr = astGetPoints( pset );
-
-/* Check pointers can be used safely. */
-      if ( astOK ) {
-
-/* Check the supplied array has room for all the axis values. */
-         if( nc > maxcoord ) {
-            astError( AST__DIMIN, "astGetRegionPoints(%s): The supplied "
-                      "array can hold up to %d axes but the %s supplied "
-                      "has %d axes (programming error).", status, 
-                      astGetClass( this ), maxcoord, astGetClass( this ), nc );
-   
-         } else if( *npoint > maxpoint ) {
-            astError( AST__DIMIN, "astGetRegionPoints(%s): The supplied "
-                      "array can hold up to %d points but the %s supplied "
-                      "requires %d points to describe it (programming "
-                      "error).", status, astGetClass( this ), maxpoint, 
-                       astGetClass( this ), *npoint );
-
-/* If all is OK, copy the transformed axis values into the supplied array. */
-         } else {
-
-/* Loop round the axes to be copied. */
-            for( j = 0; j < nc; j++ ) {
-
-/* Get points to the first element of the input and output arrays. */
-               p = ptr[ j ];
-               q = points + j*maxpoint;
-
-/* Copying the axis values. */
-               (void) memcpy( q, p, sizeof( double )*( *npoint ) );
-            }
-         }
-      }
-
-/* Free resources. */
-      pset = astAnnul( pset );
-
-   }
-}
-
-static void RegOverlay( AstRegion *this, AstRegion *that, int unc, int *status ){
-/*
-*+
-*  Name:
-*     astRegOverlay
-
-*  Purpose:
-*     Copy properties from one Region to another.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astRegOverlay( AstRegion *this, AstRegion *that, int unc )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function copies selected properties from "that" to "this".
-*     It is intended to be called by sub-classes which need to create a
-*     similar copy of an existing Region. For instance, subclass
-*     implementations of the Simplify method will usually use this
-*     function to ensure that the simplified Region loooks like the original
-*     Region.
-
-*  Parameters:
-*     this
-*        Pointer to the new Region.
-*     that
-*        Pointer to the old Region.
-*     unc
-*        If non-zero, any uncertainty in "this" is cleared if "that" has
-*        no uncertainty. If zero, any uncertainty in "this" is left
-*        unchanged.
-*-
-*/
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Copy the required attribute values. */
-   this->negated = that->negated;
-   this->closed = that->closed;
-   this->regionfs = that->regionfs;
-   this->adaptive = that->adaptive;
-
-/* Clear things that depend on the number of axes. */
-   if( astGetNaxes( this ) == astGetNaxes( that ) ) {
-      if( astTestMeshSize( that ) ) astSetMeshSize( this, astGetMeshSize( that ) );
-      if( astTestFillFactor( that ) ) astSetFillFactor( this, astGetFillFactor( that ) );
-   } else {
-      astClearMeshSize( this );
-      astClearFillFactor( this );
-   }
-
-/* If required, clear uncertainty in "this" if "that" has no uncertainty. */
-   if( unc && !astTestUnc( that ) ) astClearUnc( this );
-
-}
-
-static void RegSetAttrib( AstRegion *this, const char *asetting, 
-                          char **base_setting, int *status ) {
-/*
-*+
-*  Name:
-*     astRegSetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astRegSetAttrib( AstRegion *this, const char *asetting, 
-*                           char **base_setting ) 
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function assigns an attribute value to both the base and
-*     current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     asetting
-*        Pointer to a null terminated attribute setting string. The supplied 
-*        string will be interpreted using the public interpretation 
-*        implemented by astSetAttrib. This can be different to the 
-*        interpretation of the protected accessor functions. For instance, 
-*        the public interpretation of an unqualified floating point value for 
-*        the Epoch attribute is to interpet the value as a gregorian year,
-*        but the protected interpretation is to interpret the value as an 
-*        MJD.
-*     base_setting
-*        Address of a location at which to return a pointer to the null 
-*        terminated attribute setting string which was applied to the
-*        base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied setting if the supplied setting contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstMapping *junkmap;
-   AstMapping *map;
-   AstRegion *unc;
-   char *setting;
-   char *bsetting;
-   char buf1[ 100 ];
-   int *outs;          
-   int axis;
-   int baxis;
-   int i;
-   int len;
-   int nc;
-   int rep;
-   int value;          
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Produce a lower case version of the setting string */
-   nc = strlen( asetting );
-   setting = astMalloc( nc + 1 );
-   for( i = 0; i < nc; i++ ) setting[ i ] = tolower( asetting[ i ] );
-   setting[ nc ] = 0;    
-
-/* Apply the setting to the current Frame in the encapsulated FrameSet.
-   Use the protected astSetAttrib method which does not cause the Frame
-   to be remapped within the FrameSet. */
-   frm = astGetFrame( this->frameset, AST__CURRENT );
-   astSetAttrib( frm, setting );
-   frm = astAnnul( frm );
-   
-/* Indicate that we should use the supplied setting with the base Frame. */
-   bsetting = NULL;
-
-/* If the attribute name contains an axis number, we need to create a new
-   attribute setting which refers to the corresponding base Frame axis
-   (since the base<->current Mapping may permute the axes). First parse the 
-   supplied attribute setting to locate any axis index. */
-   len = strlen( setting );
-   if( nc = 0, ( 2 == astSscanf( setting, "%[^(](%d)= %n%*s %n", buf1, &axis, 
-                                 &value, &nc ) ) && ( nc >= len ) ) {
-
-/* If found, convert the axis index from one-based to zero-based. */
-      axis--;
-
-/* See if the specified current Frame axis is connected to one and only
-   one base Frame axis. If so, get the index of the base Frame axis. */
-      map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-      outs = astMapSplit( map, 1, &axis, &junkmap );
-      if( junkmap && astGetNout( junkmap ) == 1 ) {
-         baxis = outs[ 0 ]; 
-
-/* If the base Frame axis index is different to the current Frame axis
-   index, create a new setting string using the base Frame axis index. */
-         if( baxis != axis ) {
-            bsetting = astMalloc( strlen( setting ) + 10 );
-            if( bsetting ) {
-               sprintf( bsetting, "%s(%d)=%s", buf1, baxis + 1, setting + value );
-            }
-         }
-
-/* If there is no one base Frame axis which corresponds to the supplied
-   current Frame axis, report an error. */
-      } else if( astOK ) {
-         astError( AST__INTER, "astRegSetAttrib(%s): Unable to apply "
-                   "attribute setting \"%s\" to the base Frame in the %s", status,
-                   astGetClass( this ), setting, astGetClass( this ) );
-         astError( AST__INTER, "There is no base Frame axis corresponding "
-                   "to current Frame axis %d\n", status, axis + 1 );
-      }
-
-/* Free resources */
-      outs = astFree( outs );
-      if( junkmap ) junkmap = astAnnul( junkmap );
-      map = astAnnul( map );
-   }
-
-/* Apply the appropriate attribute setting to the base Frame. This time
-   ensure that any error caused by the attribute setting is annulled. 
-   Also apply it to any uncertainty Region (the current Frame of the
-   uncertainty Region is assumed to be equivalent to the base Frame of the
-   parent Region). */
-   frm = astGetFrame( this->frameset, AST__BASE );
-   if( frm ) {
-      rep = astReporting( 0 );
-      astSetAttrib( frm, bsetting ? bsetting : setting );
-      if( astTestUnc( this ) ) {
-         unc = astGetUncFrm( this, AST__BASE );
-         astRegSetAttrib( unc, bsetting ? bsetting : setting, NULL );
-         unc = astAnnul( unc );
-      }
-      if( astStatus == AST__BADAT ) astClearStatus;
-      astReporting( rep );
-   }
-   frm = astAnnul( frm );
-
-/* If required return the modified base Frame setting. Otherwise, free it. */
-   if( base_setting ) {
-      if( bsetting ) {
-         *base_setting = bsetting;
-      } else {
-         *base_setting = astStore( NULL, setting, strlen( setting ) + 1 );
-      }
-   } else {
-      bsetting = astFree( bsetting );
-   }      
-
-/* Since the base Frame has been changed, any cached information calculated
-   on the basis of the base Frame properties may no longer be up to date. */
-   astResetCache( this );   
-
-/* Free resources. */
-   setting = astFree( setting );
-
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Region method (over-rides the astRemoveRegions method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a CmpMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel CmpMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the Region class just returns the
-*     equivalent Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* The Region class just returns a pointer to a deep copy of the Region's
-   equivalent Frame. */
-   return astGetRegionFrame( (AstRegion *)this_mapping );
-}
-
-static void ReportPoints( AstMapping *this_mapping, int forward,
-                          AstPointSet *in_points, AstPointSet *out_points, int *status ) {
-/*
-*  Name:
-*     ReportPoints
-
-*  Purpose:
-*     Report the effect of transforming a set of points using a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void ReportPoints( AstMapping *this, int forward,
-*                        AstPointSet *in_points, AstPointSet *out_points, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astReportPoints
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reports the coordinates of a set of points before
-*     and after being transformed by a Region, by writing them to
-*     standard output.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     forward
-*        A non-zero value indicates that the Region's forward
-*        coordinate transformation has been applied, while a zero
-*        value indicates the inverse transformation.
-*     in_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of a set of points before the Region was
-*        applied.
-*     out_points
-*        Pointer to a PointSet which is associated with the
-*        coordinates of the same set of points after the Region has
-*        been applied.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Obtain a pointer to the Region's current Frame and invoke its
-   astReportPoints method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astReportPoints( (AstMapping *) fr, forward, in_points, out_points );
-   fr = astAnnul( fr );
-
-}
-
-static void ResetCache( AstRegion *this, int *status ){
-/*
-*+
-*  Name:
-*     astResetCache
-
-*  Purpose:
-*     Clear cached information within the supplied Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astResetCache( AstRegion *this )
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function clears cached information from the supplied Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*-
-*/
-   if( this ) {
-      if( this->basemesh ) this->basemesh = astAnnul( this->basemesh );
-      if( this->basegrid ) this->basegrid = astAnnul( this->basegrid );
-   }
-}
-
-
-static void Resolve( AstFrame *this_frame, const double point1[],
-                     const double point2[], const double point3[],
-                     double point4[], double *d1, double *d2, int *status ){
-/*
-*  Name:
-*     Resolve
-
-*  Purpose:
-*     Resolve a vector into two orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void Resolve( AstFrame *this, const double point1[],
-*                   const double point2[], const double point3[],
-*                   double point4[], double *d1, double *d2, int *status );
-
-*  Class Membership:
-*     Region member function (over-rides the protected astResolve
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function resolves a vector into two perpendicular components.
-*     The vector from point 1 to point 2 is used as the basis vector.
-*     The vector from point 1 to point 3 is resolved into components
-*     parallel and perpendicular to this basis vector. The lengths of the
-*     two components are returned, together with the position of closest
-*     aproach of the basis vector to point 3.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vector to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     point3
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the vector to be
-*        resolved.
-*     point4
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the point of closest approach of the
-*        basis vector to point 3 will be returned.
-*     d1
-*        The address of a location at which to return the distance from
-*        point 1 to point 4 (that is, the length of the component parallel
-*        to the basis vector). Positive values are in the same sense as
-*        movement from point 1 to point 2.
-*     d2
-*        The address of a location at which to return the distance from
-*        point 4 to point 3 (that is, the length of the component
-*        perpendicular to the basis vector). The value is always positive.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Each vector used in this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the required
-*     output values are undefined.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
-   Frame's astResolve method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astResolve( fr, point1, point2, point3, point4, d1, d2 );
-   fr = astAnnul( fr );
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[],
-                                   const double point2[], AstPointSet *in,
-                                   AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     ResolvePoints
-
-*  Purpose:
-*     Resolve a set of vectors into orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *ResolvePoints( AstFrame *this, const double point1[], 
-*                                 const double point2[], AstPointSet *in,
-*                                 AstPointSet *out )
-
-*  Class Membership:
-*     Region member function (over-rides the astResolvePoints method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function takes a Frame and a set of vectors encapsulated
-*     in a PointSet, and resolves each one into two orthogonal components,
-*     returning these two components in another PointSet.
-*
-*     This is exactly the same as the public astResolve method, except
-*     that this method allows many vectors to be processed in a single call,
-*     thus reducing the computational cost of overheads of many
-*     individual calls to astResolve.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vectors to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     in
-*        Pointer to the PointSet holding the ends of the vectors to be
-*        resolved.
-*     out
-*        Pointer to a PointSet which will hold the length of the two
-*        resolved components. A NULL value may also be given, in which 
-*        case a new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet. The first axis will 
-*     hold the lengths of the vector components parallel to the basis vector. 
-*     These values will be signed (positive values are in the same sense as 
-*     movement from point 1 to point 2. The second axis will hold the lengths 
-*     of the vector components perpendicular to the basis vector. These
-*     values will always be positive.
-
-*  Notes:
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of axes in the supplied Frame.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and 2 coordinate values per point.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
-   Frame's astResolve method. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astResolvePoints( fr, point1, point2, in, out );
-   fr = astAnnul( fr );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     Region member function (extends the astSetAttrib method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function assigns an attribute value for a Region, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     setting
-*        Pointer to a null terminated string specifying the new
-*        attribute value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This protected method is intended to be invoked by the Object
-*     astSet method and makes additional attributes accessible to it.
-*/
-
-/* Local Variables: */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double dval;                  /* Floating point attribute value */
-   int ival;                     /* Integer attribute value */
-   int id;                       /* Offset of ID string */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* We first handle attributes that apply to the Region as a whole
-   (rather than to the encapsulated Frame). */
-
-/* Negated */
-/* ------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "negated= %d %n", &ival, &nc ) )
-          && ( nc >= len ) ) {
-      astSetNegated( this, ival );
-
-/* Closed */
-/*------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "closed= %d %n", &ival, &nc ) )
-          && ( nc >= len ) ) {
-      astSetClosed( this, ival );
-
-/* FillFactor */
-/* ---------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "fillfactor= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetFillFactor( this, dval );
-
-/* MeshSize */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "meshsize= %d %n", &ival, &nc ) )
-          && ( nc >= len ) ) {
-      astSetMeshSize( this, ival );
-
-/* Adaptive */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "adaptive= %d %n", &ival, &nc ) )
-          && ( nc >= len ) ) {
-      astSetAdaptive( this, ival );
-
-/* Now do attributes inherited from parent classes. We do these here to
-   avoid the settings being passed on to the encapsulated FrameSet below. */
-
-/* ID. */
-/* --- */
-   } else if ( nc = 0, ( 0 == astSscanf( setting, "id=%n%*[^\n]%n", &id, &nc ) )
-                       && ( nc >= len ) ) {
-      astSetID( this, setting + id );
-
-/* Ident. */
-/* ------ */
-   } else if ( nc = 0, ( 0 == astSscanf( setting, "ident=%n%*[^\n]%n", &id, &nc ) )
-                       && ( nc >= len ) ) {
-      astSetIdent( this, setting + id );
-
-/* Invert. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "invert= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetInvert( this, ival );
-
-/* Report. */
-/* ------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "report= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetReport( this, ival );
-
-/* Define macros to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-#define AXISMATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "(%*d)=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
-   if a read-only attribute has been specified. */
-   } else if ( MATCH( "class" ) ||
-               MATCH( "nin" ) ||
-               MATCH( "nobject" ) ||
-               MATCH( "bounded" ) ||
-               MATCH( "nout" ) ||
-               MATCH( "refcount" ) ||
-               MATCH( "tranforward" ) ||
-               MATCH( "traninverse" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
-   further interpretation. Do not pass on FrameSet attributes since we
-   pretend to the outside world that the encapsulated FrameSet is actually a
-   Frame. */
-   } else if ( !MATCH( "base" ) &&
-               !MATCH( "current" ) &&
-               !MATCH( "nframe" ) ) {
-
-/* If the Region is to adapt to coordinate system chanmges, use the public 
-   astSet method so that the current Frame in the encapsulated FrameSet will 
-   be re-mapped if the attribute changes require it. */
-      if( astGetAdaptive( this ) ) {
-         astSet( this->frameset, setting, status );
-
-/* If the Region is not to adapt to coordinate system chanmges, use the 
-   astRegSetAttrib method which assigns the attribute setting to both
-   current and base Frames in the FrameSet without causing any remapping to
-   be performed. */
-      } else {
-         astRegSetAttrib( this, setting, NULL );
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetAxis( AstFrame *this_frame, int axis, AstAxis *newaxis, int *status ) {
-/*
-*  Name:
-*     SetAxis
-
-*  Purpose:
-*     Set a new Axis for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void SetAxis( AstFrame *this, int axis, AstAxis *newaxis, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astSetAxis method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function allows a new Axis object to be associated with one
-*     of the axes of the current Frame in a Region, replacing the
-*     previous one. Each Axis object contains a description of the
-*     quantity represented along one of the Frame's axes, so this
-*     function allows this description to be exchanged for another
-*     one.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     axis
-*        The index (zero-based) of the axis whose associated Axis
-*        object is to be replaced.
-*     newaxis
-*        Pointer to the new Axis object.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index supplied. */
-   (void) astValidateAxis( this, axis, "astSetAxis" );
-
-/* Obtain a pointer to the Region's current Frame and invoke this
-   Frame's astSetAxis method to assign the new Axis object. Annul the
-   Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astSetAxis( fr, axis, newaxis );
-   fr = astAnnul( fr );
-}
-
-static void SetRegFS( AstRegion *this, AstFrame *frm, int *status ) {
-/*
-*+
-*  Name:
-*     astSetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astSetRegFS( AstRegion *this, AstFrame *frm )
-
-*  Class Membership:
-*     Region virtual function.
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *f1;         /* Copy of supplied Frame */
-   AstFrame *f2;         /* Copy of supplied Frame */
-   AstFrameSet *fs;      /* New FrameSet */
-   AstRegion *unc;       /* Uncertainty Region */
-   AstUnitMap *um;       /* UnitMap connecting base anc current Frames */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Take a copy of the supplied Frame. */
-   f1 = astCopy( frm );
-
-/* Create the new FrameSet. First take another copy of the supplied Frame 
-   so that modifications using the supplied pointer will not affect the new
-   FrameSet. We create two copies (rather than 1) because the base and
-   current Frames must be independant objects - otherwise attribute changes
-   done to one will also appear in the other. Then construct the FrameSet 
-   containing the two Frame copies connected by a UnitMap. */
-   f2 = astCopy( f1 );
-   fs = astFrameSet( f1, "", status );
-   um = astUnitMap( astGetNaxes( f1 ), "", status );
-   astAddFrame( fs, AST__BASE, um, f2 );
-   um = astAnnul( um );
-   f2 = astAnnul( f2 );
-
-/* Annul any existing FrameSet */
-   if( this->frameset ) (void) astAnnul( this->frameset );
-
-/* Use the new FrameSet */
-   this->frameset = fs;
-
-/* If any uncertainty Region has a zero value for its RegionFS attribute,
-   it will currently contain a dummy FrameSet rather than the correct
-   FrameSet. The correct FrameSet has copies of the base Frame of the new
-   Region as both its current and base Frames, and these are connected by
-   a UnitMap (this is equivalent to a FrameSet containing a single Frame). */
-   if( astTestUnc( this ) ) {
-      unc = astGetUncFrm( this, AST__BASE );
-      if( unc && !astGetRegionFS( unc ) ) astSetRegFS( unc, f1 );
-      unc = astAnnul( unc );
-   }
-
-/* Free remaining resourvces */
-   f1 = astAnnul( f1 );
-
-}
-
-static void SetUnc( AstRegion *this, AstRegion *unc, int *status ){
-/*
-*++
-*  Name:
-c     astSetUnc
-f     AST_SETUNC
-
-*  Purpose:
-*     Store uncertainty information in a Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     void astSetUnc( AstRegion *this, AstRegion *unc )
-f     CALL AST_SETUNC( THIS, UNC, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     Each Region (of any class) can have an "uncertainty" which specifies 
-*     the uncertainties associated with the boundary of the Region. This
-*     information is supplied in the form of a second Region. The uncertainty 
-*     in any point on the boundary of a Region is found by shifting the 
-*     associated "uncertainty" Region so that it is centred at the boundary 
-*     point being considered. The area covered by the shifted uncertainty 
-*     Region then represents the uncertainty in the boundary position. 
-*     The uncertainty is assumed to be the same for all points.
-*
-*     The uncertainty is usually specified when the Region is created, but
-*     this
-c     function
-f     routine
-*     allows it to be changed at any time. 
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region which is to be assigned a new uncertainty.
-c     unc
-f     UNC = INTEGER (Given)
-*        Pointer to the new uncertainty Region. This must be of a class for
-*        which all instances are centro-symetric (e.g. Box, Circle, Ellipse, 
-*        etc.) or be a Prism containing centro-symetric component Regions.
-*        A deep copy of the supplied Region will be taken, so subsequent 
-*        changes to the uncertainty Region using the supplied pointer will 
-*        have no effect on the Region 
-c        "this".
-f        THIS.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frm;           /* Current Frame from FrameSet */
-   AstFrameSet *fs2;        /* FrameSet from "unc" current Frame to "this" base Frame */
-   AstFrameSet *fs;         /* FrameSet in "this" supplied Region */
-   AstMapping *map2;        /* Base->current Mapping from FrameSet */
-   AstMapping *map;         /* Base->current Mapping from FrameSet */
-   AstMapping *smap;        /* Simplified base->current Mapping */
-   double *cen0;            /* Pointer to array holding original centre */
-   double **ptr_reg;        /* Pointer to axis values for Region's Pointset */
-   int changed;             /* Has the uncertainty been changed? */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Annul any existing uncertainty Region. */
-   if( this->unc ) {
-      this->unc = astIsAObject( this->unc ) ? 
-                                astAnnul( this->unc ) : NULL;
-      changed = 1;
-   } else {
-      changed = 0;
-   }
-
-/* Check an uncertainty Region was supplied, and is of a usable class
-   (i.e. a class which can be re-centred). */
-   cen0 = unc ? astRegCentre( unc, NULL, NULL, 0, 0 ) : NULL;
-   if( cen0 ) {
-      cen0 = astFree( cen0 );
-
-/* Map it into the same Frame as that represented by the base Frame in 
-   the supplied Region. */
-      fs = this->frameset;
-      astInvert( fs );
-      fs2 = Conv( unc->frameset, fs, status );
-      astInvert( fs );
-
-      if( fs2 ) {
-         map = astGetMapping( fs2, AST__BASE, AST__CURRENT );
-         frm = astGetFrame( fs2, AST__CURRENT );
-         this->unc = astMapRegion( unc, map, frm );
-         if( this->unc ) {
-
-/* Ensure the Region is bounded. We know that negating an unbounded
-   Region will make it bounded because we know that the Region consists of 
-   Circles, Boxes and/or Ellipses, all of which have this property. */
-            if( !astGetBounded( this->unc ) ) astNegate( this->unc );
-
-/* If the base Frame in the uncertainty Region is the same as the base
-   Frame in the Region being dumped, then we do no need to include the
-   FrameSet in the dump of the uncertainty Region. Since the current
-   Frame in the uncertainty Region always corresponds to the base Frame of
-   its parent Region, we only need to check if the base->current Mapping
-   in the uncertainty Region's FrameSet is a UnitMap or not (after 
-   simplification). If it is, set the RegionFS attribute of the uncertainty 
-   Region to zero (i.e. false). This will cause the FrameSet to be omitted 
-   from the Dump. */
-            map2 = astGetMapping( this->unc->frameset, AST__BASE, AST__CURRENT );
-            smap = astSimplify( map2 );
-            if( astIsAUnitMap( smap ) ) astSetRegionFS( this->unc, 0 );
-
-/* Re-centre the uncertainty Region at the first position in the PointSet
-   associated with the Region structure (if any). */
-            if( this->points ) {
-               ptr_reg = astGetPoints( this->points );
-               astRegCentre( this->unc, NULL, ptr_reg, 0, AST__CURRENT );
-            }
-
-/* Set a flag indicating that the uncertainty in the Region has changed. */
-            changed = 1;
-
-/* Free resources */
-            map2 = astAnnul( map2 );
-            smap = astAnnul( smap );
-         }
-         frm = astAnnul( frm );
-         fs2 = astAnnul( fs2 );
-         map = astAnnul( map );
-
-/* Report error if conversion between Frames is not possible. */
-      } else if( astOK ) {
-         astError( AST__BADIN, "astSetUnc(%s): Bad %d dimensional "
-                   "uncertainty Frame (%s %s) supplied.", status, astGetClass(this), 
-                   astGetNaxes(unc), astGetDomain(unc), astGetTitle(unc) );
-         astError( AST__NCPIN, "Cannot convert it to the Frame of the "
-                   "new %s.", status, astGetClass( this ) );
-      }      
-
-/* Report an error if it is not of a usable class. */
-   } else if( unc && astOK ){
-      astError( AST__BADIN, "astSetUnc(%s): Bad uncertainty shape "
-                "(%s) supplied.", status, astGetClass( this ), astGetClass(unc) );
-      astError( AST__NCPIN, "The uncertainty Region must be an instance of "
-                "a centro-symetric subclass of Region (e.g. Box, Circle, "
-                "Ellipse, etc)." , status);
-   }
-
-/* If the uncertainty in the Region has changed, indicate that any cached
-   information in the Region is now out of date. */
-   if( changed ) astResetCache( this );
-
-}
-
-static void ShowMesh( AstRegion *this, int format, const char *ttl, int *status ){
-/*
-*++
-*  Name:
-c     astShowMesh
-f     AST_SHOWMESH
-
-*  Purpose:
-*     Display a mesh of points covering the surface of a Region.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     void astShowMesh( AstRegion *this, int format, const char *ttl )
-f     CALL AST_SHOWMESH( THIS, FORMAT, TTL, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-c     This function 
-f     This routine
-*     writes a table to standard output containing the axis values at a
-*     mesh of points covering the surface of the supplied Region. Each row
-*     of output contains a tab-separated list of axis values, one for
-*     each axis in the Frame encapsulated by the Region. The number of
-*     points in the mesh is determined by the MeshSize attribute.
-*
-*     The table is preceeded by a given title string, and followed by a
-*     single line containing the word "ENDMESH".
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     format
-f     FORMAT = LOGICAL (Given)
-*        A boolean value indicating if the displayed axis values should
-*        be formatted according to the Format attribute associated with
-*        the Frame's axis. Otherwise, they are displayed as simple
-*        floating point values.
-c     ttl
-f     TTL = CHARACTER * ( * ) (Given)
-*        A title to display before displaying the first position.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*--
-*/
-
-/* Local Variables: */
-   AstPointSet *ps;           /* PointSet holding mesh */
-   char *buffer = NULL;       /* Buffer for line output text */
-   char buf[ 40 ];            /* Buffer for floating poitn value */
-   double **ptr;              /* Pointers to the mesh data */
-   int i;                     /* Axis index */
-   int j;                     /* Position index */
-   int nax;                   /* Number of axes */
-   int nc;                    /* Number of characters in buffer */
-   int np;                    /* Number of axis values per position */
-
-/* Check the inherited status. */
-   if( !astOK ) return;
-
-/* Get a PointSet holding the mesh */
-   ps = astRegMesh( this );
-   if( ps ) {
-
-/* Get the number of axis values per position, and the number of positions. */
-      nax = astGetNcoord( ps );
-      np = astGetNpoint( ps );
-
-/* Get a pointer to the mesh data, and check it can be used. */
-      ptr = astGetPoints( ps );
-      if( ptr ) {
-
-/* Display the title. */
-         if( ttl ) printf( "\n%s\n\n", ttl );
-
-/* Loop round all positions. */
-         for( j = 0; j < np; j++ ) {
-
-/* Reset the current buffer length to zero. */
-            nc = 0;
-
-/* Loop round all axes */
-            for( i = 0; i < nax; i++ ){
-
-/* If the axis value is bad, append "<bad> in the end of the output buffer. */
-               if( ptr[ i ][ j ] == AST__BAD ){
-                  buffer = astAppendString( buffer, &nc, "<bad>" );
-
-/* Otherwise, if required, append the formatted value to the end of the
-   buffer. */
-               } else if( format ){
-                  buffer = astAppendString( buffer, &nc, 
-                                         astFormat( this, i, ptr[ i ][ j ] ) );
-
-/* Otherwise, append the floating point value to the end of the buffer. */
-               } else {
-                  sprintf( buf, "%g", ptr[ i ][ j ] );
-                  buffer = astAppendString( buffer, &nc, buf );
-               }   
-/* Add a separating tab to the end of the buffer. */
-               buffer = astAppendString( buffer, &nc, "\t" );
-            }
-
-/* Display the line buffer. */
-            printf( "%s\n", buffer );
-         }
-      }
-
-/* Print out a marker for th eend of the list. */
-      printf( "ENDMESH\n\n" );
-
-/* Release resources. */
-      ps = astAnnul( ps );
-      buffer = astFree( buffer );
-   }
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify the Mapping represented by a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Region method (over-rides the astSimplify method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function simplifies the encapsulated FrameSet and any
-*     uncertainty Region in the supplied Region. This is different to 
-*     the Simplify method in the parent Frame class which always returns 
-*     a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the simplified Region. A cloned pointer to the
-*     supplied Region will be returned if no simplication could be
-*     performed.
-
-*  Notes:
-*     - This implementation just simplifies the encapsulated FrameSet
-*     and uncertainty Region. Sub-classes should usually provide their own 
-*     implementation which invokes this implemetation, and then continues to 
-*     check for further simplifications (such as fitting a new region to the 
-*     current Frame).
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *bfrm;               /* Pointer to "this" baseFrame */
-   AstFrameSet *fs;              /* Pointer to encapsulated FrameSet */
-   AstMapping *map;              /* Base->current Mapping for "this" */
-   AstMapping *result;           /* Result pointer to return */
-   AstPointSet *pset1;           /* Base Frame centre position */
-   AstPointSet *pset2;           /* Current Frame centre position */
-   AstRegion *new;               /* Pointer to simplified Region */
-   AstRegion *sunc;              /* Simplified uncertainty Region */
-   AstRegion *this;              /* Pointer to original Region structure */
-   AstRegion *unc;               /* Original uncertainty Region */
-   double **ptr1;                /* Pointer to axis values in "pset1" */
-   double *cen;                  /* Original centre of uncertainty Region */
-   double *lbnd;                 /* Lower bounds of "this" bounding box */
-   double *orig_cen;             /* Original centre for uncertainty Region */
-   double *s1_lbnd;              /* Lower bounds of "unc" when centred at lbnd */
-   double *s1_ubnd;              /* Upper bounds of "unc" when centred at lbnd */
-   double *s2_lbnd;              /* Lower bounds of "unc" when centred at ubnd */
-   double *s2_ubnd;              /* Upper bounds of "unc" when centred at ubnd */
-   double *ubnd;                 /* Upper bounds of "this" bounding box */
-   double delta;                 /* Half width of test box */
-   double w1;                    /* Width of "s1" bounding box */
-   double w2;                    /* Width of "s2" bounding box */
-   int ic;                       /* Axis index */
-   int naxb;                     /* No. of base Frame axes in "this" */
-   int nin;                      /* Number of base Frame axes in "this" */
-   int nout;                     /* Number of current Frame axes in "this" */
-   int ok;                       /* Can we use the simplified uncertainty? */
-   int simpler;                  /* Has some simplication taken place? */
-    
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_mapping;
-
-/* Take a deep copy of the supplied Region. This is so that the returned
-   pointer will have a diferent value to the supplied pointer if any
-   simplication takes place. */
-   new = astCopy( this );
-
-/* Simplify the encapsulated FrameSet, and note if any simplification took
-   place. */
-   fs = astSimplify( new->frameset );
-   simpler = ( fs != new->frameset );
-
-/* If so, annull the existing FrameSet and use the simpler FrameSet. */
-   if( simpler ) {
-      (void) astAnnul( new->frameset );
-      new->frameset = astClone( fs );
-   } 
-   fs = astAnnul( fs );
-
-/* If the Region has default uncertainty, we simplify the uncertainty
-   Region simply by deleting it. It will be regenerated when needed,
-   using the simplified Region. */
-   if( new->defunc ) new->defunc = astAnnul( new->defunc );
-
-/* If the Region's uncertainty was supplied explicitly, try simplifying
-   the unncertainty Region. */
-   if( astTestUnc( new ) ){
-
-/* Obtain the Region's uncertainty. */
-      unc = astGetUncFrm( new, AST__BASE );
-
-/* Get the base->current Mapping from "this". */
-      map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-
-/* If it has different numbers of inputs and outputs (e.g. a PermMap used
-   to take a slice through a Region), we need to ensure that the
-   uncertainty Region is centred on the slice. */
-      nin = astGetNin( map );
-      nout = astGetNout( map );
-      if( nin != nout ) {
-
-/* Get the current centre of the uncertainty Region in its current Frame
-   (the same as the base Frame of "this"). */
-         cen = astRegCentre( unc, NULL, NULL, 0, AST__CURRENT );
-
-/* Store it in a PointSet so it can be transformed. */
-         pset1 = astPointSet( 1, nin, "", status );
-         ptr1 = astGetPoints( pset1 );
-         if( astOK ) for( ic = 0; ic < nin; ic++ ) ptr1[ ic ][ 0 ] = cen[ ic ];
-    
-/* Transform into the curent Frame of "this", and then back into the base
-   Frame. */  
-         pset2 = astTransform( map, pset1, 1, NULL );
-         (void) astTransform( map, pset2, 0, pset1 );
-
-/* Re-centre the uncertainty Region at this position. */
-         astRegCentre( unc, NULL, ptr1, 0, AST__CURRENT );
-
-/* Free resources. */
-         cen = astFree( cen );
-         pset1 = astAnnul( pset1 );
-         pset2 = astAnnul( pset2 );
-      } 
-
-/* Free resources. */
-      map = astAnnul( map );
-
-/* Try simplifying the uncertainty. Only proceed if the uncertainty can
-   be simplified. */
-      sunc = astSimplify( unc );
-      if( sunc != unc ) {
-
-/* If the uncertainty can be simplified it means that the base->current
-   Mapping in the uncertainty Region is sufficiently linear to allow the
-   uncertainty shape to retain its form when transformed from the base to
-   the current Frane. But this has only been tested at the current centre 
-   position in the uncertainty Region. The uncertainty Region should
-   describe the whole of "this" Region, and so we need to check that the 
-   simplified uncertainty does not change as we move it around within "this"
-   Region. To do this, we re-centre the uncertainty region at opposite
-   corners of a large test box, and then we find the bounding box of the 
-   re-centred uncertainty Region. If this uncertainty bounding box changes 
-   from corner to corner of the test box, then we do not simplify the 
-   uncertainty Region. If "this" is bounded, we use the bounding box of
-   "this" as the test box. Otherwise we use a box 100 times the size of the 
-   uncertainty Region. */
-
-/* Note the original base Frame centre of the simplified uncertainty Region. */
-         orig_cen = astRegCentre( sunc, NULL, NULL, 0, AST__BASE );
-
-/* Allocate memory to hold the bounds of the test box. */
-         naxb = astGetNin( this->frameset );
-         lbnd = astMalloc( sizeof( double )*(size_t)naxb );      
-         ubnd = astMalloc( sizeof( double )*(size_t)naxb );      
-
-/* If possible, get the base Frame bounding box of "this" and use it as
-   the test box. */
-         if( astGetBounded( this ) ) {
-            astRegBaseBox( this, lbnd, ubnd );      
-
-/* Otherwise, store the bounds of a box which is 100 times the size of
-   the uncertainty region, centred on the current centre of the uncertainty
-   region (we know all uncertainty regions are bounded). */
-         } else {
-            astGetRegionBounds( sunc, lbnd, ubnd );      
-            for( ic = 0; ic < naxb; ic++ ) {
-               delta = 0.5*fabs( ubnd[ ic ] - lbnd[ ic ] );
-               lbnd[ ic ] = orig_cen[ ic ] - delta;
-               ubnd[ ic ] = orig_cen[ ic ] + delta;
-            }
-         }
-
-/* Re-centre it at the lower bounds of the test box. This is in the base Frame 
-   of "this" which is the same as the current Frame of "sunc". */
-         astRegCentre( sunc, lbnd, NULL, 0, AST__CURRENT );
-
-/* Get the bounding box of the re-centred uncertainty Region, within its
-   current Frame, which is the same as the base Frame of "this". */
-         s1_lbnd = astMalloc( sizeof( double )*(size_t)naxb );      
-         s1_ubnd = astMalloc( sizeof( double )*(size_t)naxb );      
-         astGetRegionBounds( sunc, s1_lbnd, s1_ubnd );      
-
-/* Now re-centre the uncertainty Region at the upper bounds of the test
-   box. */
-         astRegCentre( sunc, ubnd, NULL, 0, AST__CURRENT );
-
-/* Get the bounding box of the re-centred uncertainty Region. */
-         s2_lbnd = astMalloc( sizeof( double )*(size_t)naxb );      
-         s2_ubnd = astMalloc( sizeof( double )*(size_t)naxb );      
-         astGetRegionBounds( sunc, s2_lbnd, s2_ubnd );      
-
-/* Get a pointer to the base Frame of "this". */
-         bfrm = astGetFrame( this->frameset, AST__BASE );
-
-/* The "ok" flag is initialised to indicate that the simplified uncertainty
-   Region should not be used. */
-         ok = 0;
-
-/* Check pointers can be referenced safely */
-         if( astOK ) { 
-
-/* Now indicate that the simplified uncertainty Region should be used. */
-            ok = 1;
-
-/* Loop round all axes of the base Frame of "this". */
-            for( ic = 0; ic < naxb; ic++ ) {
-
-/* Get the width of the two bounding boxes on this axis. */
-               w1 = s1_ubnd[ ic ] - s1_lbnd[ ic ];
-               w2 = s2_ubnd[ ic ] - s2_lbnd[ ic ];
-
-/* If these differ by more than 0.1% then we determine that the simplified
-   uncertainty Region varies in size across the bounding box of "this", and
-   so we do not use the simplified uncertainty Region. The figure of 0.1%
-   is arbitrary. */
-               if( fabs( w1 - w2 ) > 0.005*( fabs( w1 ) + fabs( w2 ) ) ) {
-                  ok = 0;
-                  break;
-               }
-            }
-         }
-
-/* Reinstate the original base Frame centre of the simplified uncertainty Region. */
-         astRegCentre( sunc, orig_cen, NULL, 0, AST__BASE );
-
-/* Free resources. */
-         orig_cen = astFree( orig_cen );
-         lbnd = astFree( lbnd );
-         ubnd = astFree( ubnd );
-         s1_lbnd = astFree( s1_lbnd );
-         s1_ubnd = astFree( s1_ubnd );
-         s2_lbnd = astFree( s2_lbnd );
-         s2_ubnd = astFree( s2_ubnd );
-         bfrm = astAnnul( bfrm );
-
-/* If we can use the simplified uncertainty Region, indicate that we have
-   performed some simplification, and store the new uncertainty Region. */
-         if( ok ) {
-            simpler = 1;
-            astSetUnc( new, sunc );
-         }
-      }
-
-/* Free resources */
-      unc = astAnnul( unc );
-      sunc = astAnnul( sunc );
-   }
-
-/* If any simplification could be performed, return the new Region.
-   Otherwise, return a clone of the supplied pointer. */
-   if( simpler ){
-      result = (AstMapping *) new;
-   } else {
-      new = astAnnul( new );
-      result = astClone( this );
-   }
-
-/* If an error occurred, annul the returned pointer. */
-   if ( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static int SubFrame( AstFrame *this_frame, AstFrame *template,
-                     int result_naxes,
-                     const int *target_axes, const int *template_axes,
-                     AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a Region and convert to the new coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int SubFrame( AstFrame *target, AstFrame *template, int result_naxes,
-*                   const int *target_axes, const int *template_axes,
-*                   AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astSubFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the
-*     axes from the current Frame of a "target" Region and creates a
-*     new Frame with copies of the selected axes assembled in the
-*     requested order. It then optionally overlays the attributes of a
-*     "template" Frame on to the result. It returns both the resulting
-*     Frame and a Mapping that describes how to convert between the
-*     coordinate systems described by the current Frame of the target
-*     Region and the result Frame. If necessary, this Mapping takes
-*     account of any differences in the Frames' attributes due to the
-*     influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target Region, from whose current Frame the
-*        axes are to be selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for
-*        the result Frame are to be obtained. Optionally, this may be
-*        NULL, in which case no overlaying of template attributes will
-*        be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Region. This
-*        number may be greater than or less than the number of axes in
-*        the Region's current Frame (or equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving
-*        a list of the (zero-based) axis indices of the axes to be
-*        selected from the current Frame of the target Region. The
-*        order in which these are given determines the order in which
-*        the axes appear in the result Frame. If any of the values in
-*        this array is set to -1, the corresponding result axis will
-*        not be derived from the target Region, but will be assigned
-*        default attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This
-*        should contain a list of the template axes (given as
-*        zero-based axis indices) with which the axes of the result
-*        Frame are to be associated. This array determines which axes
-*        are used when overlaying axis-dependent attributes of the
-*        template on to the result. If any element of this array is
-*        set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not
-*        used and a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned
-*        Mapping.  The forward transformation of this Mapping will
-*        describe how to convert coordinates from the coordinate
-*        system described by the current Frame of the target Region
-*        to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is
-*     possible between the current Frame of the target Region and
-*     the result Frame. Otherwise zero is returned and *map and
-*     *result are returned as NULL (but this will not in itself result
-*     in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not
-*     always be possible otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to Region's current Frame */
-   int match;                    /* Result to be returned */
-
-/* Initialise. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Invoke the parent astSubFrame method on the Frame represented by the
-   region. */
-   fr = astGetFrame( ((AstRegion *) this_frame)->frameset, AST__CURRENT );
-   match = astSubFrame( fr, template, result_naxes, target_axes, template_axes,
-                        map, result );
-   fr = astAnnul( fr );
-
-/* Return the result. */
-   return match;
-}
-
-static AstSystemType SystemCode( AstFrame *this_frame, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astSystemCode
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external description of
-*     a coordinate system into a Frame coordinate system type code (System
-*     attribute value). It is the inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the coordinate system
-*     description was not recognised. This does not produce an error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-   AstFrame *fr;              /* Pointer to FrameSet's current Frame */
-   AstRegion *this;           /* Pointer to the Region structure */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astSystemCode method for this Frame. Annul the Frame pointer afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astSystemCode( fr, system );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this_frame, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astSystemString
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function converts a Frame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to FrameSet's current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astSystemString method for this Frame. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astSystemString( fr, system );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result pointer. */
-   return result;
-
-}
-
-static int RegTrace( AstRegion *this, int n, double *dist, double **ptr, int *status ){
-/*
-*+
-*  Name:
-*     astRegTrace
-
-*  Purpose:
-*     Return requested positions on the boundary of a 2D Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int astRegTrace( AstRegion *this, int n, double *dist, double **ptr );
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function returns positions on the boundary of the supplied
-*     Region, if possible. The required positions are indicated by a
-*     supplied list of scalar parameter values in the range zero to one.
-*     Zero corresponds to some arbitrary starting point on the boundary,
-*     and one corresponds to the end (which for a closed region will be 
-*     the same place as the start).
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     n
-*        The number of positions to return. If this is zero, the function
-*        returns without action (but the returned function value still
-*        indicates if the method is supported or not).
-*     dist
-*        Pointer to an array of "n" scalar parameter values in the range
-*        0 to 1.0.
-*     ptr 
-*        A pointer to an array of pointers. The number of elements in
-*        this array should equal tthe number of axes in the Frame spanned
-*        by the Region. Each element of the array should be a pointer to
-*        an array of "n" doubles, in which to return the "n" values for
-*        the corresponding axis. The contents of the arrays are unchanged
-*        if the supplied Region belongs to a class that does not
-*        implement this method.
-
-*  Returned Value:
-*     Non-zero if the astRegTrace method is implemented by the class
-*     of Region supplied, and zero if not.
-
-*-
-*/
-
-/* Concrete sub-classes of Region must over-ride this method. */
-   return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Region's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstRegion *this;              /* Pointer to the Region structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* We first handle attributes that apply to the Region as a whole
-   (rather than to the encapsulated FrameSet). */
-
-/* Negated. */
-/* -------- */
-   if ( !strcmp( attrib, "negated" ) ) {
-      result = astTestNegated( this );
-
-/* Closed. */
-/* ------- */
-   } else if ( !strcmp( attrib, "closed" ) ) {
-      result = astTestClosed( this );
-
-/* FillFactor */
-/* ---------- */
-   } else if ( !strcmp( attrib, "fillfactor" ) ) {
-      result = astTestFillFactor( this );
-
-/* MeshSize */
-/* -------- */
-   } else if ( !strcmp( attrib, "meshsize" ) ) {
-      result = astTestMeshSize( this );
-
-/* Adaptive */
-/* -------- */
-   } else if ( !strcmp( attrib, "adaptive" ) ) {
-      result = astTestAdaptive( this );
-
-/* Now do attributes inherited from parent classes. This is so that the
-   attribute test will not be passed on to the encpasulated FrameSet below. */
-
-/* ID. */
-/* --- */
-   } else if ( !strcmp( attrib, "id" ) ) {
-      result = astTestID( this );
-
-/* Ident. */
-/* ------ */
-   } else if ( !strcmp( attrib, "ident" ) ) {
-      result = astTestIdent( this );
-
-/* Invert. */
-/* ------- */
-   } else if ( !strcmp( attrib, "invert" ) ) {
-      result = astTestInvert( this );
-
-/* Report. */
-/* ------- */
-   } else if ( !strcmp( attrib, "report" ) ) {
-      result = astTestReport( this );
-
-/* If the name is not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then return
-   zero. */
-   } else if ( !strcmp( attrib, "class" ) ||
-               !strcmp( attrib, "nin" ) ||
-               !strcmp( attrib, "nobject" ) ||
-               !strcmp( attrib, "bounded" ) ||
-               !strcmp( attrib, "nout" ) ||
-               !strcmp( attrib, "refcount" ) ||
-               !strcmp( attrib, "tranforward" ) ||
-               !strcmp( attrib, "traninverse" ) ) {
-      result = 0;
-
-/* Pass unrecognised attributes on to the Region's encapsulated FrameSet for
-   further interpretation. Do not pass on FrameSet attributes since we
-   pretend to the outside world that the encapsulated FrameSet is actually a
-   Frame. */
-   } else if ( strcmp( attrib, "base" ) &&
-               strcmp( attrib, "current" ) &&
-               strcmp( attrib, "nframe" ) ) {
-      result = astTestAttrib( this->frameset, attrib );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-double *astRegTranPoint_( AstRegion *this, double *in, int np, int forward, int *status ){
-/*
-*+
-*  Name:
-*     astRegTranPoint
-
-*  Purpose:
-*     Transform points between the base and current Frames in a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     double *astRegTranPoint( AstRegion *this, double *in, int np, int forward )
-
-*  Class Membership:
-*     Region member function 
-
-*  Description:
-*     This function transforms one or more points between the base and
-*     current Frames of the FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        The Region pointer.
-*     in
-*        Pointer to a 1-d array holding the axis values to be transformed.
-*        If "forward" is non-zero, the number of axis values supplied for
-*        each position should equal the number of axes in the base Frame
-*        of the FrameSet encapsulated by "this". If "forward" is zero, the 
-*        number of axis values supplied for each position should equal the 
-*        number of axes in the current Frame of the FrameSet encapsulated by 
-*        "this". All the axis values for a position should be in adjacent
-*        elements of the array.
-*     np
-*        The number of points supplied in "in".
-*     forward
-*        If non-zero, the supplied points are assumed to refer to the base 
-*        Frame of the encapsulated FrameSet, and they are transformed to the 
-*        current Frame. If zero, the supplied points are assumed to refer to 
-*        the current Frame of the encapsulated FrameSet, and they are 
-*        transformed to the base Frame.
-
-*  Returned Value:
-*     Pointer to a new dynamically allocated array holding the
-*     transformed axis values. If "forward" is non-zero, the number of axis 
-*     values for each position will be equal the number of axes in the
-*     current Frame of the FrameSet encapsulated by "this". If "forward" is 
-*     zero, the number of axis values for each position will be equal to the 
-*     number of axes in the base Frame of the FrameSet encapsulated by "this". 
-*     All the axis values for a position will be in adjacent elements of the 
-*     array. The array should be freed using astFree when no longer needed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstPointSet *pset_in;
-   AstPointSet *pset_out;
-   double **ptr_in;
-   double **ptr_out;
-   double *p;
-   double *result; 
-   int ic;           
-   int ip;
-   int naxin;
-   int naxout;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the required Mapping. */
-   if( forward ) {
-      map = astGetMapping( this->frameset, AST__BASE, AST__CURRENT );
-   } else {
-      map = astGetMapping( this->frameset, AST__CURRENT, AST__BASE );
-   }
-
-/* Get the number of axis values per input and per output point. */
-   naxin = astGetNin( map );
-   naxout = astGetNout( map );
-
-/* Create a pointSet holding the supplied axis values. */
-   pset_in = astPointSet( np, naxin, "", status );
-
-/* Get pointers to the memory used to store axis values within this
-   PointSet. */
-   ptr_in = astGetPoints( pset_in );
-
-/* Allocate the output array. */
-   result = astMalloc( sizeof( double )*(size_t)( naxout*np ) );
-
-/* Check the pointers can be used. */
-   if( astOK ) {
-
-/* Store the supplied axis values in the PointSet memory. */
-      p = in;
-      for( ip = 0; ip < np; ip++ ) {
-         for( ic = 0; ic < naxin; ic++ ) ptr_in[ ic ][ ip ] = *(p++);
-      }
-
-/* Transform the PointSet. */
-      pset_out = astTransform( map, pset_in, 1, NULL );
-
-/* Get a pointer to the memory in the transformed PointSet. */
-      ptr_out = astGetPoints( pset_out );
-
-      if( pset_out && astStatus == AST__INTER ) {
-         p = in;
-         for( ip = 0; ip < np; ip++ ) {
-            for( ic = 0; ic < naxin; ic++ ) printf("%.*g\n", DBL_DIG, *(p++) );
-         }
-      }
-
-      if( astOK ) {
-
-/* Store the resulting axis values in the output array. */
-         p = result;
-         for( ip = 0; ip < np; ip++ ) {
-            for( ic = 0; ic < naxout; ic++ ) *(p++) = ptr_out[ ic ][ ip ];
-         }
-      }
-
-/* Free resources. */
-      pset_out = astAnnul( pset_out );
-   }
-   pset_in = astAnnul( pset_in );
-   map = astAnnul( map );
-
-/* Return NULL if anything went wrong. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result.*/
-   return result;
-}
-
-static AstPointSet *RegTransform( AstRegion *this, AstPointSet *in,
-                                  int forward, AstPointSet *out, AstFrame **frm, int *status ) {
-/*
-*+
-*  Name:
-*     astRegTransform
-
-*  Purpose:
-*     Transform a set of points using the encapsulated FrameSet.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstPointSet *astRegTransform( AstRegion *this, AstPointSet *in,
-*                                   int forward, AstPointSet *out,
-*                                   AstFrameSet **frm )
-
-*  Class Membership:
-*     Region virtual function 
-
-*  Description:
-*     This function takes a Region and a set of points encapsulated
-*     in a PointSet, and applies either the forward or inverse
-*     coordinate transformation represented by the encapsulated FrameSet.
-*     It also returned a pointer to either the current or base Frame in
-*     the FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     in
-*        Pointer to the PointSet holding the input coordinate data. If
-*        NULL then the "points" PointSet within the supplied Region
-*        ("this") is used.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        (from base to current) should be applied, while a zero value requests 
-*        the inverse transformation (from current to base).
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     frm
-*        Location at which to return a pointer to a Frame. If "forward"
-*        is non-zero, the current Frame in the encapsulated FrameSet will
-*        be returned. Otherwise, the base Frame is returned. The returned
-*        pointer should be annulled when no longer needed. May be NULL if
-*        no pointer is needed.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet. If "out" is NULL,
-*     the returned pointer will be a clone of "in" if the Mapping is a
-*     UnitMap. If "out" is not NULL, then the supplied "out" PointSet will 
-*     be used and returned.
-
-*  Notes:
-*     - An error will result if the Region supplied does not define
-*     the requested coordinate transformation (either forward or
-*     inverse).
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of input coordinates for the
-*     Region being applied (or number of output coordinates if the
-*     inverse transformation is requested).  This will be equal to the
-*     number of axes in the Region's base Frame (or the current
-*     Frame for the inverse transformation).
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and coordinate values per point to
-*     accommodate the result (e.g. the number of Region output
-*     coordinates, or number of input coordinates if the inverse
-*     transformation is requested). Any excess space will be ignored.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *smap;           /* Pointer to simplified Mapping */
-   AstPointSet *result;        /* Pointer value to return */
-
-/* Initialise */
-   if( frm ) *frm = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* If no input PointSet was provided, use the PointSet in the Region. */
-   if( !in ) {
-      if( this->points ) {
-         in = this->points;
-      } else {
-         astError( AST__INTER, "astRegTransform(%s): No PointSet supplied "
-                   "and the supplied %s has no PointSet (internal AST "
-                   "programming error)", status, astGetClass( this ),astGetClass( this ) );
-      }
-   }
-
-/* Get the simplified Mapping from base to current Frame. */
-   smap = astRegMapping( this );
-
-/* If it is a UnitMap, return a clone of the input PointSet unless an
-   explicit output PointSet has been supplied. */
-   if( astIsAUnitMap( smap ) && !out ) {
-      result = astClone( in );
-
-/* Otherwise use the Mapping to transform the supplied positions. */
-   } else {
-      result = astTransform( smap, in, forward, out );
-   }
-
-/* Return a pointer to the appropriate Frame. */
-   if( frm ) *frm = astGetFrame( this->frameset, forward ? AST__CURRENT : AST__BASE );
-
-/* Release resources. */
-   smap = astAnnul( smap );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     Unformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a Region axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int Unformat( AstFrame *this, int axis, const char *string,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the public astUnformat
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reads a formatted coordinate value for a Region
-*     axis (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     axis
-*        The number of the Region axis for which the coordinate
-*        value is to be read (axis numbering starts at zero for the
-*        first axis).
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   double coord;                 /* Coordinate value read */
-   int nc;                       /* Number of characters read */
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* Obtain a pointer to the Region's current Frame and invoke the
-   astUnformat method for this Frame. Annul the Frame pointer
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   nc = astUnformat( fr, axis, string, &coord );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the number of characters read. */
-   if ( !astOK ) {
-      nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
-   } else if ( nc ) {
-      *value = coord;
-   }
-   
-/* Return the number of characters read. */
-   return nc;
-}
-
-static int ValidateAxis( AstFrame *this_frame, int axis, const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateAxis
-
-*  Purpose:
-*     Validate and permute a Region's axis index.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int ValidateAxis( AstFrame *this, int axis, const char *method, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected
-*     astValidateAxis method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of an index (zero-based) which
-*     is to be used to address one of the coordinate axes of the
-*     current Frame in a Region. If the index is valid, it is
-*     permuted using the axis permutation array associated with the
-*     Region's current Frame and the (zero-based) permuted axis
-*     index is returned.  This gives the index the axis had when the
-*     Frame was first created. If the axis index supplied is not
-*     valid, an error is reported and the global error status is set.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     axis
-*        The axis index (zero-based) to be checked. To be valid, it
-*        must lie between zero and (naxes-1) inclusive, where "naxes"
-*        is the number of coordinate axes associated with the
-*        Region's current Frame.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The permuted axis index.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-   int naxes;                    /* Number of Region axes */
-   int result;                   /* Permuted axis index */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_frame;
-
-/* Determine the number of Region axes. */
-   naxes = astGetNaxes( this );
-   if ( astOK ) {
-
-/* If the Region has no axes, report an error (convert to 1-based
-   axis numbering for the benefit of the public interface). */
-      if ( naxes == 0 ) {
-         astError( AST__AXIIN, "%s(%s): Invalid attempt to use an axis index "
-                   "(%d) for a %s which has no axes.", status, method,
-                   astGetClass( this ), axis + 1, astGetClass( this ) );
-
-/* Otherwise, check the axis index for validity and report an error if
-   it is not valid (again, convert to 1-based axis numbering). */
-      } else if ( ( axis < 0 ) || ( axis >= naxes ) ) {
-         astError( AST__AXIIN, "%s(%s): Axis index (%d) invalid - it should "
-                   "be in the range 1 to %d.", status, method, astGetClass( this ),
-                   axis + 1, naxes );
-
-/* If the axis index was valid, obtain a pointer to the Region's
-   current Frame and invoke this Frame's astValidateAxis method to
-   obtain the permuted axis index. Annul the Frame pointer
-   afterwards. */
-      } else {
-         fr = astGetFrame( this->frameset, AST__CURRENT );
-         result = astValidateAxis( fr, axis, "astValidateAxis" );
-         fr = astAnnul( fr );
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static void ValidateAxisSelection( AstFrame *this_frame, int naxes, 
-                                   const int *axes, const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateAxisSelection
-
-*  Purpose:
-*     Check that a set of axes selected from a Frame is valid.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void ValidateAxisSelection( AstFrame *this, int naxes,
-*                                 const int *axes, const char *method, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astValidateAxisSelection
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of an array of (zero-based)
-*     axis indices that specify a set of axes to be selected from a
-*     Frame. To be valid, no axis should be selected more than
-*     once. In assessing this, any axis indices that do not refer to
-*     valid Frame axes (e.g. are set to -1) are ignored.
-*
-*     If the axis selection is valid, this function returns without further
-*     action. Otherwise, an error is reported and the global error status is
-*     set.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     naxes
-*        The number of axes to be selected (may be zero).
-*     axes
-*        Pointer to an array of int with naxes elements that contains the
-*        (zero based) axis indices to be checked.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis selection. This method name is used
-*        solely for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to current Frame */
-   AstRegion *this;              /* Pointer to the Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke this
-   Frame's astValidateAxisSelection method. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   astValidateAxisSelection( fr, naxes, axes, method );
-   fr = astAnnul( fr );
-
-}
-
-static int ValidateSystem( AstFrame *this_frame, AstSystemType system, const char *method, int *status ) {
-/*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system,
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     Region member function (over-rides the protected astValidateSystem
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked.
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST_BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Validated system value */
-   AstFrame *fr;              /* Pointer to FrameSet's current Frame */
-   AstRegion *this;           /* Pointer to the Region structure */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the FrameSet structure. */
-   this = (AstRegion *) this_frame;
-
-/* Obtain a pointer to the Region's encapsulated Frame and invoke the
-   astValidateSystem method for this Frame. Annul the Frame pointer 
-   afterwards. */
-   fr = astGetFrame( this->frameset, AST__CURRENT );
-   result = astValidateSystem( this, system, method );
-   fr = astAnnul( fr );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BADSYSTEM;
-
-/* Return the result. */
-   return result;
-}
-
-/* Region Attributes. */
-/* -------------------- */
-
-/*
-*att++
-*  Name:
-*     Adaptive
-
-*  Purpose:
-*     Should the area adapt to changes in the coordinate system?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     The coordinate system represented by a Region may be changed by
-*     assigning new values to attributes such as System, Unit, etc.
-*     For instance, a Region representing an area on the sky in ICRS 
-*     coordinates may have its System attribute changed so that it
-*     represents (say) Galactic coordinates instead of ICRS. This
-*     attribute controls what happens when the coordinate system
-*     represented by a Region is changed in this way.
-*
-*     If Adaptive is non-zero (the default), then area represented by the
-*     Region adapts to the new coordinate system. That is, the numerical 
-*     values which define the area represented by the Region are changed 
-*     by mapping them from the old coordinate system into the new coordinate 
-*     system. Thus the Region continues to represent the same physical
-*     area.
-*
-*     If Adaptive is zero, then area represented by the Region does not adapt
-*     to the new coordinate system. That is, the numerical values which
-*     define the area represented by the Region are left unchanged. Thus 
-*     the physical area represented by the Region will usually change.
-*
-*     As an example, consider a Region describe a range of wavelength from
-*     2000 Angstrom to 4000 Angstrom. If the Unit attribute for the Region 
-*     is changed from Angstrom to "nm" (nanometre), what happens depends
-*     on the setting of Adaptive. If Adaptive is non-zero, the Mapping
-*     from the old to the new coordinate system is found. In this case it
-*     is a simple scaling by a factor of 0.1 (since 1 Angstrom is 0.1 nm).
-*     This Mapping is then used to modify the numerical values within the
-*     Region, changing 2000 to 200 and 4000 to 400. Thus the modified
-*     region represents 200 nm to 400 nm, the same physical space as 
-*     the original 2000 Angstrom to 4000 Angstrom. However, if Adaptive 
-*     had been zero, then the numerical values would not have been changed,
-*     resulting in the final Region representing 2000 nm to 4000 nm.
-*
-*     Setting Adaptive to zero can be necessary if you want correct
-*     inaccurate attribute settings in an existing Region. For instance,
-*     when creating a Region you may not know what Epoch value to use, so
-*     you would leave Epoch unset resulting in some default value being used.
-*     If at some later point in the application, the correct Epoch value
-*     is determined, you could assign the correct value to the Epoch
-*     attribute. However, you would first need to set Adaptive temporarily 
-*     to zero, because otherwise the area represented by the Region would
-*     be Mapped from the spurious default Epoch to the new correct Epoch,
-*     which is not what is required.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*att--
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of 1. */
-astMAKE_CLEAR(Region,Adaptive,adaptive,-INT_MAX)
-astMAKE_GET(Region,Adaptive,int,1,( ( this->adaptive == -INT_MAX ) ?
-                                   1 : this->adaptive ))
-astMAKE_SET(Region,Adaptive,int,adaptive,( value != 0 ))
-astMAKE_TEST(Region,Adaptive,( this->adaptive != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Negated
-
-*  Purpose:
-*     Region negation flag.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls whether a Region represents the "inside" or
-*     the "outside" of the area which was supplied when the Region was
-*     created. If the attribute value is zero (the default), the Region
-*     represents the inside of the original area. However, if it is non-zero, 
-*     it represents the outside of the original area. The value of this
-*     attribute may be toggled using the 
-c     astNegate function.
-f     AST_NEGATE routine.
-
-*     Note, whether the boundary is considered to be inside the Region or
-*     not is controlled by the Closed attribute. Changing the value of
-*     the Negated attribute does not change the value of the Closed attribute.
-*     Thus, if Region is closed, then the boundary of the Region will be 
-*     inside the Region, whatever the setting of the Negated attribute.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*att--
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(Region,Negated,negated,(astResetCache(this),-INT_MAX))
-astMAKE_GET(Region,Negated,int,0,( ( this->negated == -INT_MAX ) ?
-                                   0 : this->negated ))
-astMAKE_SET(Region,Negated,int,negated,(astResetCache(this),( value != 0 )))
-astMAKE_TEST(Region,Negated,( this->negated != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Bounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean), read-only.
-
-*  Description:
-*     This is a read-only attribute indicating if the Region is bounded.
-*     A Region is bounded if it is contained entirely within some
-*     finite-size bounding box.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*att--
-*/
-
-/*
-*att+
-*  Name:
-*     RegionFS
-
-*  Purpose:
-*     Should Region FrameSet be dumped?
-
-*  Type:
-*     Protected attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute indicates whether the FrameSet encapsulated by the 
-*     Region should be included in the dump produced by the Dump function.
-*
-*     If set to a non-zero value (the default), the FrameSet in the Region 
-*     will always be included in the dump as usual. If set to zero, the 
-*     FrameSet will only be included in the dump if the Mapping from base
-*     to current Frame is not a UnitMap. If the base->current Mapping is
-*     a UnitMap, the FrameSet is omitted from the dump. If the dump is 
-*     subsequently used to re-create the Region, the new Region will have a 
-*     default FrameSet containing a single default Frame with the appropriate 
-*     number of axes. 
-*
-*     This facility is indended to reduce the size of textual dumps of
-*     Regions in situations where the Frame to which the Region refers can
-*     be implied by the context in which the Region is used. This is
-*     often the case when a Region is encapsulated within another Region.
-*     In such cases the current Frame of the encapsulated Region will
-*     usually be equivalent to the base Frame of the parent Region
-*     structure, and so can be re-instated (by calling the astSetRegFS
-*     method) even if the FrameSet is omitted from the dump of the
-*     encapsulated Region. Note if the base->current Mapping in the FrameSet 
-*     in the encapsulated Region is not a UnitMap, then we should always
-*     dump the FrameSet regardless of the setting of RegionFS. This is because 
-*     the parent Region structure will not know how to convert the PointSet 
-*     stored in the encapsulated Region into its own base Frame if the
-*     FrameSet is not available.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*att-
-*/
-
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of one. */
-astMAKE_CLEAR(Region,RegionFS,regionfs,-INT_MAX)
-astMAKE_TEST(Region,RegionFS,( this->regionfs != -INT_MAX ))
-astMAKE_SET(Region,RegionFS,int,regionfs,( value != 0 ))
-astMAKE_GET(Region,RegionFS,int,1,( ( this->regionfs == -INT_MAX ) ?
-                                   1 : this->regionfs )) 
-
-/*
-*att++
-*  Name:
-*     FillFactor
-
-*  Purpose:
-*     Fraction of the Region which is of interest.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute indicates the fraction of the Region which is of
-*     interest. AST does not use this attribute internally for any purpose.
-*     Typically, it could be used to indicate the fraction of the Region for
-*     which data is available.
-*
-*     The supplied value must be in the range 0.0 to 1.0, and the default
-*     value is 1.0 (except as noted below).
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*     CmpRegion
-*        The default FillFactor for a CmpRegion is the FillFactor of its
-*        first component Region.
-*     Prism
-*        The default FillFactor for a Prism is the product of the
-*        FillFactors of its two component Regions.
-*     Stc
-*        The default FillFactor for an Stc is the FillFactor of its
-*        encapsulated Region.
-*att--
-*/
-
-astMAKE_CLEAR(Region,FillFactor,fillfactor,AST__BAD)
-astMAKE_GET(Region,FillFactor,double,1.0,( ( this->fillfactor == AST__BAD ) ?
-                                        1.0 : this->fillfactor ))
-astMAKE_TEST(Region,FillFactor,( this->fillfactor != AST__BAD ))
-astMAKE_SET(Region,FillFactor,double,fillfactor,((value<0.0||value>1.0)?(
-       astError(AST__ATSER,"astSetFillFactor(%s): Invalid value (%g) supplied "
-                "for attribute FillFactor.", status,astGetClass(this),value),
-       astError(AST__ATSER,"FillFactor values should be in the range 0.0 to 1.0", status), 
-       this->fillfactor):value))
-
-/* 
-*att++
-*  Name:
-*     MeshSize
-
-*  Purpose:
-*     Number of points used to represent the boundary of a Region.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute controls how many points are used when creating a
-*     mesh of points covering the boundary of a Region. This mesh is used
-*     primarily when testing for overlap with a second Region: each point in 
-*     the mesh is checked to see if it is inside or outside the second Region.
-*     Thus, the reliability of the overlap check depends on the value assigned 
-*     to this attribute. If the value used is very low, it is possible for 
-*     overlaps to go unnoticed. High values produce more reliable results, but 
-*     can result in the overlap test being very slow. The default value is 200 
-*     for two dimensional Regions and 2000 for three or more dimensional 
-*     Regions (this attribute is not used for 1-dimensional regions since the 
-*     boundary of a simple 1-d Region can only ever have two points). A
-*     value of five is used if the supplied value is less than five.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*     CmpRegion
-*        The default MeshSize for a CmpRegion is the MeshSize of its
-*        first component Region.
-*     Stc
-*        The default MeshSize for an Stc is the MeshSize of its
-*        encapsulated Region.
-*att--
-*/
-/* If the value of MeshSize is set or cleared, annul the PointSet used to
-   cache a mesh of base Frame boundary points. This will force a new
-   PointSet to be created next time it is needed. See function RegMesh. */
-astMAKE_CLEAR(Region,MeshSize,meshsize,(astResetCache(this),-INT_MAX))
-astMAKE_SET(Region,MeshSize,int,meshsize,(astResetCache(this),( value > 5 ? value : 5 )))
-astMAKE_TEST(Region,MeshSize,( this->meshsize != -INT_MAX ))
-astMAKE_GET(Region,MeshSize,int,0,( ( this->meshsize == -INT_MAX)?((astGetNaxes(this)==1)?2:((astGetNaxes(this)==2)?200:2000)): this->meshsize ))
-
-/*
-*att++
-*  Name:
-*     Closed
-
-*  Purpose:
-*     Should the boundary be considered to be inside the region?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls whether points on the boundary of a Region 
-*     are considered to be inside or outside the region. If the attribute 
-*     value is non-zero (the default), points on the boundary are considered 
-*     to be inside the region (that is, the Region is "closed"). However, 
-*     if the attribute value is zero, points on the bounary are considered
-*     to be outside the region.
-
-*  Applicability:
-*     Region
-*        All Regions have this attribute.
-*     PointList
-*        The value of the Closed attribute is ignored by PointList regions.
-*        If the PointList region has not been negated, then it is always
-*        assumed to be closed. If the PointList region has been negated, then 
-*        it is always assumed to be open. This is required since points
-*        have zero volume and therefore consist entirely of boundary.
-*     CmpRegion
-*        The default Closed value for a CmpRegion is the Closed value of its
-*        first component Region.
-*     Stc
-*        The default Closed value for an Stc is the Closed value of its
-*        encapsulated Region.
-*att--
-*/
-/* This is a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of 1. */
-astMAKE_CLEAR(Region,Closed,closed,(astResetCache(this),-INT_MAX))
-astMAKE_GET(Region,Closed,int,1,( ( this->closed == -INT_MAX ) ?
-                                   1 : this->closed ))
-astMAKE_SET(Region,Closed,int,closed,(astResetCache(this),( value != 0 )))
-astMAKE_TEST(Region,Closed,( this->closed != -INT_MAX ))
-
-/* Access to attributes of the encapsulated Frame. */
-/* ----------------------------------------------- */
-/* Use the macros defined at the start of this file to implement
-   private member functions that give access to the attributes of the
-   encapsulated Frame of a Region and its axes. These functions over-ride
-   the attribute access methods inherited from the Frame class. */
-
-/* Clear, Get, Set and Test axis-independent Frame attributes. */
-MAKE_CLEAR(Digits)
-MAKE_CLEAR(Domain)
-MAKE_CLEAR(MatchEnd)
-MAKE_CLEAR(MaxAxes)
-MAKE_CLEAR(MinAxes)
-MAKE_CLEAR(Permute)
-MAKE_CLEAR(PreserveAxes)
-MAKE_CLEAR(Title)
-
-MAKE_GET(Digits,int)
-MAKE_GET(Domain,const char *)
-MAKE_GET(MatchEnd,int)
-MAKE_GET(MaxAxes,int)
-MAKE_GET(MinAxes,int)
-MAKE_GET(Permute,int)
-MAKE_GET(PreserveAxes,int)
-MAKE_GET(Title,const char *)
-MAKE_SET(Digits,int,I)
-MAKE_SET(Domain,const char *,C)
-MAKE_SET(MatchEnd,int,I)
-MAKE_SET(MaxAxes,int,I)
-MAKE_SET(MinAxes,int,I)
-MAKE_SET(Permute,int,I)
-MAKE_SET(PreserveAxes,int,I)
-MAKE_SET(Title,const char *,C)
-MAKE_TEST(Digits)
-MAKE_TEST(Domain)
-MAKE_TEST(MatchEnd)
-MAKE_TEST(MaxAxes)
-MAKE_TEST(MinAxes)
-MAKE_TEST(Permute)
-MAKE_TEST(PreserveAxes)
-MAKE_TEST(Title)
-
-MAKE_GET(ActiveUnit,int)
-MAKE_SET(ActiveUnit,int,I)
-MAKE_TEST(ActiveUnit)
-
-MAKE_GET(System,AstSystemType)
-MAKE_SET_SYSTEM(System)
-MAKE_TEST(System)
-MAKE_CLEAR(System)
-
-MAKE_GET(AlignSystem,AstSystemType)
-MAKE_SET_SYSTEM(AlignSystem)
-MAKE_TEST(AlignSystem)
-MAKE_CLEAR(AlignSystem)
-
-MAKE_GET(Epoch,double)
-MAKE_SET(Epoch,double,D)
-MAKE_TEST(Epoch)
-MAKE_CLEAR(Epoch)
-
-MAKE_GET(ObsLon,double)
-MAKE_SET(ObsLon,double,D)
-MAKE_TEST(ObsLon)
-MAKE_CLEAR(ObsLon)
-
-MAKE_GET(ObsLat,double)
-MAKE_SET(ObsLat,double,D)
-MAKE_TEST(ObsLat)
-MAKE_CLEAR(ObsLat)
-
-MAKE_GET(ObsAlt,double)
-MAKE_SET(ObsAlt,double,D)
-MAKE_TEST(ObsAlt)
-MAKE_CLEAR(ObsAlt)
-
-/* Clear, Get, Set and Test axis-dependent Frame attributes. */
-MAKE_CLEAR_AXIS(Direction)
-MAKE_CLEAR_AXIS(Format)
-MAKE_CLEAR_AXIS(Label)
-MAKE_CLEAR_AXIS(Symbol)
-MAKE_CLEAR_AXIS(Unit)
-MAKE_GET_AXIS(Direction,int)
-MAKE_GET_AXIS(Format,const char *)
-MAKE_GET_AXIS(Label,const char *)
-MAKE_GET_AXIS(Symbol,const char *)
-MAKE_GET_AXIS(Unit,const char *)
-MAKE_SET_AXIS(Direction,int,I)
-MAKE_SET_AXIS(Format,const char *,C)
-MAKE_SET_AXIS(Label,const char *,C)
-MAKE_SET_AXIS(Symbol,const char *,C)
-MAKE_SET_AXIS(Unit,const char *,C)
-MAKE_TEST_AXIS(Direction)
-MAKE_TEST_AXIS(Format)
-MAKE_TEST_AXIS(Label)
-MAKE_TEST_AXIS(Symbol)
-MAKE_TEST_AXIS(Unit)
-
-MAKE_GET_AXIS(Bottom,double)
-MAKE_SET_AXIS(Bottom,double,D)
-MAKE_TEST_AXIS(Bottom)
-MAKE_CLEAR_AXIS(Bottom)
-
-MAKE_GET_AXIS(Top,double)
-MAKE_SET_AXIS(Top,double,D)
-MAKE_TEST_AXIS(Top)
-MAKE_CLEAR_AXIS(Top)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Region objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Region objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstRegion *in;                /* Pointer to input Region */
-   AstRegion *out;               /* Pointer to output Region */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Regions. */
-   in = (AstRegion *) objin;
-   out = (AstRegion *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output Region. */
-   out->basemesh = NULL;
-   out->basegrid = NULL;
-   out->frameset = NULL;
-   out->points = NULL;
-   out->unc = NULL;
-   out->defunc = NULL;
-
-/* Now copy each of the above structures. */
-   out->frameset = astCopy( in->frameset );
-   if( in->points ) out->points = astCopy( in->points );
-   if( in->basemesh ) out->basemesh = astCopy( in->basemesh );
-   if( in->basegrid ) out->basegrid = astCopy( in->basegrid );
-   if( in->unc ) out->unc = astCopy( in->unc );
-   if( in->defunc ) out->defunc = astCopy( in->defunc );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Region objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Region objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstRegion *this;                 /* Pointer to Region */
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) obj;
-
-/* Annul all resources. */
-   this->frameset = astAnnul( this->frameset );
-   if( this->points ) this->points = astAnnul( this->points );
-   if( this->basemesh ) this->basemesh = astAnnul( this->basemesh );
-   if( this->basegrid ) this->basegrid = astAnnul( this->basegrid );
-   if( this->unc ) this->unc = astAnnul( this->unc );
-   if( this->defunc ) this->defunc = astAnnul( this->defunc );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Region objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Region class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Region whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-#define COM_LEN 50               /* Maximum length of a comment */
-
-/* Local Variables: */
-   AstFrame *fr;                 /* Pointer to the current Frame */
-   AstMapping *smap;             /* Base->current Mapping */
-   AstRegion *this;              /* Pointer to the Region structure */
-   AstRegion *unc;               /* Pointer to the uncertainty Region */
-   double dval;                  /* Floating point attribute value */
-   int ival;                     /* Integer attribute value */
-   int set;                      /* Attribute value set? */
-   int unit;                     /* Base->current is unitmap? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Region structure. */
-   this = (AstRegion *) this_object;
-
-/* Write out values representing the instance variables for the
-   Region class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Negated. */
-/* -------- */
-   set = TestNegated( this, status );
-   ival = set ? GetNegated( this, status ) : astGetNegated( this );
-   astWriteInt( channel, "Negate", (ival != 0), 0, ival,
-                ival ? "Region negated" : "Region not negated" );
-
-/* FillFactor */
-/* ---------- */
-   set = TestFillFactor( this, status );
-   dval = set ? GetFillFactor( this, status ) : astGetFillFactor( this );
-   astWriteDouble( channel, "Fill", set, 0, dval,"Region fill factor" );
-
-/* MeshSize. */
-/* --------- */
-   set = TestMeshSize( this, status );
-   ival = set ? GetMeshSize( this, status ) : astGetMeshSize( this );
-   astWriteInt( channel, "MeshSz", set, 0, ival,
-                "No. of points used to represent boundary" );
-
-/* Closed. */
-/* ------- */
-   set = TestClosed( this, status );
-   ival = set ? GetClosed( this, status ) : astGetClosed( this );
-   astWriteInt( channel, "Closed", set, 0, ival,
-                ival ? "Boundary is inside" : "Boundary is outside" );
-
-/* Adaptive */
-/* -------- */
-   set = TestAdaptive( this, status );
-   ival = set ? GetAdaptive( this, status ) : astGetAdaptive( this );
-   astWriteInt( channel, "Adapt", (ival != 0), 0, ival,
-                ival ? "Region adapts to coord sys changes" : "Region does not adapt to coord sys changes" );
-
-/* FrameSet */
-/* -------- */
-
-/* If the vertices are the same in both base and current Frames (i.e. 
-   if the Frames are connected by a UnitMap), then just dump the current 
-   Frame (unless the RegionFS attribute is zero, in which case the
-   current Frame can be determined from the higher level context of the
-   Region and so does not need to be dumped- e.g. if the Region is contained 
-   within another Region the parent Region will define the current Frame).
-   Otherwise, dump the whole FrameSet. */
-   ival = astGetRegionFS( this );
-   smap = astRegMapping( this );
-   if( ( unit = astIsAUnitMap( smap ) ) ){
-      set = 0;
-      if( ival ) {
-         fr = astGetFrame( this->frameset, AST__CURRENT );
-         astWriteObject( channel, "Frm", 1, 1, fr, "Coordinate system" );
-         fr = astAnnul( fr );
-      }
-   } else {
-      set = ( ival == 0 );
-      astWriteObject( channel, "FrmSet", 1, 1, this->frameset, 
-                      "Original & current coordinate systems" );
-   }
-
-/* Annul the Mapping pointers */
-   smap = astAnnul( smap );
-
-/* RegionFS */
-/* -------- */
-   astWriteInt( channel, "RegFS", set, 0, ival,
-                ival ? "Include Frame in dump" : "Do not include Frame in dump" );
-
-/* Points */
-/* ------ */
-   if( this->points ) {
-      astWriteObject( channel, "Points", 1, 1, this->points, 
-                      "Points defining the shape" );
-
-/* If the FrameSet was not included in the dump, then the loaded will use
-   the PointSet to determine the number of axes in the frame spanned by
-   the Region. If there is no PointSet, then we must explicitly include
-   an item giving the number of axes.*/
-   } else {
-      astWriteInt( channel, "RegAxes", 1, 1, astGetNaxes( this ),
-                   "Number of axes spanned by the Region" );
-   }
-
-/* Uncertainty */
-/* ----------- */
-/* Only dump the uncertinaty Region if required. */
-   if( astTestUnc( this ) ) {
-      unc = astGetUncFrm( this, AST__BASE );
-      astWriteObject( channel, "Unc", 1, 1, unc, 
-                      "Region defining positional uncertainties." );
-      unc = astAnnul( unc );
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsARegion and astCheckRegion functions using
-   the macros defined for this purpose in the "object.h" header
-   file. */
-astMAKE_ISA(Region,Frame)
-astMAKE_CHECK(Region)
-
-AstRegion *astInitRegion_( void *mem, size_t size, int init,
-                           AstRegionVtab *vtab, const char *name,
-                           AstFrame *frame, AstPointSet *pset,
-                           AstRegion *unc, int *status ){
-/*
-*+
-*  Name:
-*     astInitRegion
-
-*  Purpose:
-*     Initialise a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstRegion *astInitRegion( void *mem, size_t size, int init,
-*                               AstRegionVtab *vtab, const char *name,
-*                               AstFrame *frame, AstpointSet *pset,
-*                               AstRegion *unc )
-
-*  Class Membership:
-*     Region initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new Region object. It allocates memory (if
-*     necessary) to accommodate the Region plus any additional data
-*     associated with the derived class.  It then initialises a
-*     Region structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a Region at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Region is to be
-*        created. This must be of sufficient size to accommodate the
-*        Region data (sizeof(Region)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Region (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Region structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the Region's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Region.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     frame
-*        Pointer to the encapsulated Frame. A deep copy of this Frame is 
-*        taken. This means that subsequent changes to the supplied Frame
-*        will have no effect on the new Region.
-*     pset
-*        A PointSet holding the points which define the Region. These
-*        positions should refer to the given Frame. May be NULL.
-*     unc
-*        A pointer to a Region which specifies the uncertainty in the
-*        supplied positions (all points on the boundary of the new Region
-*        being initialised are assumed to have the same uncertainty). A NULL 
-*        pointer can be supplied, in which case default uncertainties equal to 
-*        1.0E-6 of the dimensions of the new Region's bounding box are used. 
-*        If an uncertainty Region is supplied, it must be of a class for
-*        which all instances are centro-symetric (e.g. Box, Circle, Ellipse, 
-*        etc.) or be a Prism containing centro-symetric component Regions.
-*        Its encapsulated Frame must be related to the Frame supplied for 
-*        parameter "frame" (i.e. astConvert should be able to find a Mapping 
-*        between them). Two positions in the "frame" Frame are considered to be
-*        co-incident if their uncertainty Regions overlap. The centre of the 
-*        supplied uncertainty Region is immaterial since it will be re-centred 
-*        on the point being tested before use. A deep copy is taken of the 
-*        supplied Region.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *f0;                  /* Frame to use */
-   AstRegion *new;                /* Pointer to new Region */
-   int nax;                       /* No. of axes in supplied Frame */
-   int ncoord;                    /* Coords per point */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if( init ) astInitRegionVtab( vtab, name );
-
-/* Note the number of axes in the supplied Frame. */
-   nax = astGetNaxes( frame );
-
-/* Check the pointset if supplied. */
-   if( pset ) {
-
-/* Note the number of axes per point in the supplied PointSet */
-      ncoord = astGetNcoord( pset );
-
-/* If OK, check that the number of coordinates per point matches the number
-   of axes in the Frame. Report an error if these numbers do not match. */
-      if ( astOK && ( ncoord != nax ) ) {
-         astError( AST__NCPIN, "astInitRegion(%s): Bad number of coordinate "
-                   "values per point (%d).", status, name, ncoord );
-         astError( AST__NCPIN, "The %s given requires %d coordinate value(s) "
-                   "for each point.", status, astGetClass( frame ), nax );
-      }
-   }
-
-/* Initialise a Frame structure (the parent class) as the first
-   component within the Region structure, allocating memory if
-   necessary. Give this Frame zero axes as the Frame information will be
-   specified by the encapsulated FrameSet. */
-   new = (AstRegion *) astInitFrame( mem, size, 0, (AstFrameVtab *) vtab, 
-                                     name, 0 );
-   if ( astOK ) {
-
-/* Initialise the Region data. */
-/* ----------------------------- */
-      new->frameset = NULL;
-      new->points = NULL;
-      new->unc = NULL;
-      new->meshsize = -INT_MAX;
-      new->adaptive = -INT_MAX;
-      new->basemesh = NULL;
-      new->basegrid = NULL;
-      new->negated = -INT_MAX;
-      new->closed = -INT_MAX;
-      new->regionfs = -INT_MAX;
-      new->fillfactor = AST__BAD;
-      new->defunc = NULL;
-      new->nomap = 0;
-
-/* If the supplied Frame is a Region, gets its encapsulated Frame. If a 
-   FrameSet was supplied, use its current Frame, otherwise use the
-   supplied Frame. */
-      if( astIsARegion( frame ) ) {
-         f0 = astGetFrame( ((AstRegion *) frame)->frameset, AST__CURRENT );
-
-      } else if( astIsAFrameSet( frame ) ) {
-         f0 = astGetFrame( (AstFrameSet *) frame, AST__CURRENT );
-
-      } else { 
-         f0 = astClone( frame );
-      }    
-
-/* Store a clone of the supplied PointSet pointer. */
-      new->points = pset ? astClone( pset ) : NULL;
-
-
-#ifdef DEBUG
-      if( pset ) {
-         double **ptr;
-         double lim;
-         int ii,jj, np;
-         ptr = astGetPoints( pset );
-         np = astGetNpoint( pset );
-         lim = sqrt( DBL_MAX );
-         for( ii = 0; astOK && ii < ncoord; ii++ ) {
-            for( jj = 0; jj < np; jj++ ) {
-               if( fabs( ptr[ ii ][ jj ] ) > lim ) {
-                  if( !strcmp( name, "Interval" ) ) {
-                     if( ptr[ ii ][ jj ] != AST__BAD &&
-                         ptr[ ii ][ jj ] != DBL_MAX &&
-                         ptr[ ii ][ jj ] != -DBL_MAX ) {
-                        astError( AST__INTER, "astInitRegion(%s): suspicious "
-                          "axis value (%g) supplied.", status, name, ptr[ ii ][ jj ] );
-                        break;
-                     }
-                  } else {
-                     astError( AST__INTER, "astInitRegion(%s): suspicious "
-                            "axis value (%g) supplied.", status, name, 
-                            ptr[ ii ][ jj ] );
-                     break;
-                  }
-               }
-            }
-         }
-      }
-#endif
-
-/* Form a FrameSet consisting of two copies of the supplied Frame connected 
-   together by a UnitMap, and store in the Region structure. We use the
-   private SetRegFS rather than the protected astSetRegFS because this
-   initialiser may be being called from a subclass which over-rides 
-   astSetRegFS. If this were the case, then the implementation of
-   astSetRegFS provided by the subclass may access information within the
-   subclass structure which has not yet been initialised. */
-      SetRegFS( new, f0, status );
-      f0 = astAnnul( f0 );
-
-/* Store any uncertainty Region. Use the private SetUnc rather than
-   astSetUnc to avoid subclass implementations using subclass data which
-   has not yet been initialised. */
-      SetUnc( new, unc, status );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstRegion *astLoadRegion_( void *mem, size_t size,
-                           AstRegionVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadRegion
-
-*  Purpose:
-*     Load a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstRegion *astLoadRegion( void *mem, size_t size,
-*                               AstRegionVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     Region loader.
-
-*  Description:
-*     This function is provided to load a new Region using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Region structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Region is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Region data (sizeof(Region)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Region (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Region structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstRegion) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Region. If this is NULL, a pointer
-*        to the (static) virtual function table for the Region class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Region" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstFrame *f1;                  /* Base Frame for encapsulated FrameSet */
-   AstRegion *new;                /* Pointer to the new Region */
-   int nax;                       /* No. of axes in Frame */
-   int naxpt;                     /* No. of axes in per point */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Region. In this case the
-   Region belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstRegion );
-      vtab = &class_vtab;
-      name = "Region";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitRegionVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Region. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Region" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Negated */
-/* ------- */
-      new->negated = astReadInt( channel, "negate", -INT_MAX );
-      if ( TestNegated( new, status ) ) SetNegated( new, new->negated, status );
-
-/* FillFactor */
-/* ---------- */
-      new->fillfactor = astReadDouble( channel, "fill", AST__BAD );
-      if ( TestFillFactor( new, status ) ) SetFillFactor( new, new->fillfactor, status );
-
-/* MeshSize */
-/* -------- */
-      new->meshsize = astReadInt( channel, "meshsz", -INT_MAX );
-      if ( TestMeshSize( new, status ) ) SetMeshSize( new, new->meshsize, status );
-
-/* Closed */
-/* ------ */
-      new->closed = astReadInt( channel, "closed", -INT_MAX );
-      if ( TestClosed( new, status ) ) SetClosed( new, new->closed, status );
-
-/* Adaptive */
-/* -------- */
-      new->adaptive = astReadInt( channel, "adapt", -INT_MAX );
-      if ( TestAdaptive( new, status ) ) SetAdaptive( new, new->adaptive, status );
-
-/* Points */
-/* ------ */
-      new->points = astReadObject( channel, "points", NULL );
-
-/* If some points were found, ensure that they are in a PointSet and get
-   the number of axis values per point. */
-      if( new->points ){
-         if( astIsAPointSet( new->points) ) {
-            naxpt = astGetNcoord( new->points );
-         } else {
-            naxpt = 0;
-            astError( AST__REGIN, "astLoadRegion(%s): Corrupt %s specifies points "
-                      "using a %s (should be a PointSet).", status, astGetClass( new ),
-                      astGetClass( new ), astGetClass( new->points ) );
-         }
-
-/* If no PointSet was loaded, attempt to determine the number of axes
-   spanned by the Region by reading the RegAxes value. */
-      } else {
-         naxpt = astReadInt( channel, "regaxes", 0 );
-      }
-
-/* Uncertainty */
-/* ----------- */
-      new->unc = astReadObject( channel, "unc", NULL );
-      new->defunc = NULL;
-
-/* FrameSet */
-/* -------- */
-/* First see if the dump contains a single Frame. If so, create a
-   FrameSet from it and a copy of itself, using a UnitMap to connect the
-   two. */
-      new->nomap = 0;
-      new->frameset = NULL;
-      f1 = astReadObject( channel, "frm", NULL );
-      if( f1 ) {
-         new->regionfs = 1;
-         nax = astGetNaxes( f1 );
-         astSetRegFS( new, f1 );
-         f1 = astAnnul( f1 );
-
-/* If no Frame was found in the dump, look for a FrameSet. */
-      } else {
-         new->frameset = astReadObject( channel, "frmset", NULL );
-         if( new->frameset ) {
-            nax = astGetNaxes( new->frameset );
-
-/* If a FrameSet was found, the value of the RegionFS attribute is still
-   unknown and so we must read it from an attribute as normal. */
-            new->regionfs = astReadInt( channel, "regfs", 1 );
-            if ( TestRegionFS( new, status ) ) SetRegionFS( new, new->regionfs, status );
-
-         } else {
-            nax = 0;
-         }
-      }   
-
-/* If neither a Frame nor a FrameSet was found, create a default FrameSet
-   and set the RegionFS attribute false, to indicate that the FrameSet
-   should not be used. */
-      if( !new->frameset ){
-         nax = naxpt ? naxpt : 1;
-         f1 = astFrame( nax, "", status );
-         new->frameset = astFrameSet( f1, "", status );
-         astSetIdent( new->frameset, DUMMY_FS );
-         f1 = astAnnul( f1 );
-         new->regionfs = 0;
-      }
-
-/* Report an error if the number of axis values per point in the pointset is 
-   incorrect. */
-      if ( astOK && new->points && ( naxpt != nax ) ) {
-         astError( AST__REGIN, "astLoadRegion(%s): Corrupt %s contains "
-                   " incorrect number of coordinate values per point (%d).", status, 
-                   astGetClass( new ), astGetClass( new ), naxpt );
-         astError( AST__REGIN, "The %s requires %d coordinate value(s) "
-                   "for each point.", status, astGetClass( new ), nax );
-      }
-   
-/* Initialise other fields which are used as caches for values derived
-   from the attributes set above. */
-      new->basemesh = NULL;
-      new->basegrid = NULL;
-
-/* If an error occurred, clean up by deleting the new Region. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Region pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astRegClearAttrib_( AstRegion *this, const char *attrib, char **base_attrib, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,RegClearAttrib))( this, attrib, base_attrib, status );
-}
-void astRegSetAttrib_( AstRegion *this, const char *setting, char **base_setting, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,RegSetAttrib))( this, setting, base_setting, status );
-}
-void astNegate_( AstRegion *this, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,Negate))( this, status );
-}
-AstFrame *astGetRegionFrame_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,GetRegionFrame))( this, status );
-}
-AstRegion *astMapRegion_( AstRegion *this, AstMapping *map, AstFrame *frame, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,MapRegion))( this, map, frame, status );
-}
-int astOverlap_( AstRegion *this, AstRegion *that, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Region,Overlap))( this, that, status );
-}
-int astOverlapX_( AstRegion *that, AstRegion *this, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(that,Region,OverlapX))( that, this, status );
-}
-AstFrame *astRegFrame_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegFrame))( this, status );
-}
-AstRegion *astRegBasePick_( AstRegion *this, int naxes, const int *axes, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegBasePick))( this, naxes, axes, status );
-}
-AstPointSet *astBTransform_( AstRegion *this, AstPointSet *in,
-                             int forward, AstPointSet *out, int *status ) {
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,BTransform))( this, in, forward, out, status );
-}
-AstPointSet *astRegTransform_( AstRegion *this, AstPointSet *in,
-                               int forward, AstPointSet *out,
-                               AstFrame **frm, int *status ) {
-   if( frm ) *frm = NULL;
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegTransform))( this, in, forward, out, frm, status );
-}
-int astRegPins_( AstRegion *this, AstPointSet *pset, AstRegion *unc, int **mask, int *status ){
-   if( mask ) *mask = NULL;
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Region,RegPins))( this, pset, unc, mask, status );
-}
-AstMapping *astRegMapping_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegMapping))( this, status );
-}
-int astRegDummyFS_( AstRegion *this, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Region,RegDummyFS))( this, status );
-}
-int astGetBounded_( AstRegion *this, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Region,GetBounded))( this, status );
-}
-int astTestUnc_( AstRegion *this, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Region,TestUnc))( this, status );
-}
-void astClearUnc_( AstRegion *this, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,ClearUnc))( this, status );
-}
-void astRegBaseBox_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,RegBaseBox))( this, lbnd, ubnd, status );
-}
-void astRegBaseBox2_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,RegBaseBox2))( this, lbnd, ubnd, status );
-}
-void astResetCache_( AstRegion *this, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,ResetCache))( this, status );
-}
-int astRegTrace_( AstRegion *this, int n, double *dist, double **ptr, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Region,RegTrace))( this, n, dist, ptr, status );
-}
-void astGetRegionBounds_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,GetRegionBounds))( this, lbnd, ubnd, status );
-}
-void astGetRegionPoints_( AstRegion *this, int maxpoint, int maxcoord, 
-                          int *npoint, double *points, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,GetRegionPoints))( this, maxpoint, maxcoord,
-                                               npoint, points, status );
-}
-void astShowMesh_( AstRegion *this, int format, const char *ttl, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,ShowMesh))( this, format,ttl, status );
-}
-void astGetRegionBounds2_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,GetRegionBounds2))( this, lbnd, ubnd, status );
-}
-void astRegOverlay_( AstRegion *this, AstRegion *that, int unc, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,RegOverlay))( this, that, unc, status );
-}
-AstPointSet *astRegGrid_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegGrid))( this, status );
-}
-AstPointSet *astRegMesh_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegMesh))( this, status );
-}
-double *astRegCentre_( AstRegion *this, double *cen, double **ptr, int index,
-                       int ifrm, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegCentre))( this, cen, ptr, index, ifrm, status );
-}
-AstRegion *astGetUncFrm_( AstRegion *this, int ifrm, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,GetUncFrm))( this, ifrm, status );
-}
-AstRegion *astGetDefUnc_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,GetDefUnc))( this, status );
-}
-AstRegion *astGetUnc_( AstRegion *this, int def, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,GetUnc))( this, def, status );
-}
-void astSetUnc_( AstRegion *this, AstRegion *unc, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,SetUnc))( this, unc, status );
-}
-AstFrameSet *astGetRegFS_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,GetRegFS))( this, status );
-}
-void astSetRegFS_( AstRegion *this, AstFrame *frm, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,Region,SetRegFS))( this, frm, status );
-}
-AstPointSet *astRegBaseMesh_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegBaseMesh))( this, status );
-}
-AstPointSet *astRegBaseGrid_( AstRegion *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,RegBaseGrid))( this, status );
-}
-AstPointSet *astBndBaseMesh_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,BndBaseMesh))( this, lbnd, ubnd, status );
-}
-AstPointSet *astBndMesh_( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Region,BndMesh))( this, lbnd, ubnd, status );
-}
-
-#define MAKE_MASK_(X,Xtype) \
-int astMask##X##_( AstRegion *this, AstMapping *map, int inside, int ndim, \
-                   const int lbnd[], const int ubnd[], Xtype in[], \
-                   Xtype val, int *status ) { \
-   if ( !astOK ) return 0; \
-   return (**astMEMBER(this,Region,Mask##X))( this, map, inside, ndim, lbnd, \
-                                              ubnd, in, val, status ); \
-}
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-MAKE_MASK_(LD,long double)
-#endif
-MAKE_MASK_(D,double)
-MAKE_MASK_(F,float)
-MAKE_MASK_(L,long int)
-MAKE_MASK_(UL,unsigned long int)
-MAKE_MASK_(I,int)
-MAKE_MASK_(UI,unsigned int)
-MAKE_MASK_(S,short int)
-MAKE_MASK_(US,unsigned short int)
-MAKE_MASK_(B,signed char)
-MAKE_MASK_(UB,unsigned char)
-#undef MAKE_MASK_
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-
-
-AstRegion *astMapRegionId_( AstRegion *this, AstMapping *map, AstFrame *frame, int *status ) {
-/*
-*++
-*  Name:
-c     astMapRegion
-f     AST_MAPREGION
-
-*  Purpose:
-*     Transform a Region into a new Frame using a given Mapping.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "region.h"
-c     AstRegion *astMapRegion( AstRegion *this, AstMapping *map,
-c                              AstFrame *frame ) 
-f     RESULT = AST_MAPREGION( THIS, MAP, FRAME, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function returns a pointer to a new Region which corresponds to
-*     supplied Region described by some other specified coordinate system. A
-*     Mapping is supplied which transforms positions between the old and new
-*     coordinate systems. The new Region may not be of the same class as
-*     the original region.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Region.
-c     map
-f     MAP = INTEGER (Given)
-*        Pointer to a Mapping which transforms positions from the
-*        coordinate system represented by the supplied Region to the 
-*        coordinate system specified by 
-c        "frame".
-f        FRAME.
-*        The supplied Mapping should define both forward and inverse 
-*        transformations, and these transformations should form a genuine
-*        inverse pair. That is, transforming a position using the forward
-*        transformation and then using the inverse transformation should
-*        produce the original input position. Some Mapping classes (such
-*        as PermMap, MathMap, SphMap) can result in Mappings for which this 
-*        is not true.
-c     frame
-f     FRAME = INTEGER (Given)
-*        Pointer to a Frame describing the coordinate system in which 
-*        the new Region is required.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astMapRegion()
-f     AST_MAPREGION = INTEGER
-*        A pointer to a new Region. This Region will represent the area
-*        within the coordinate system specified by
-c        "frame"
-f        FRAME
-*        which corresponds to the supplied Region.
-
-*  Notes:
-*     - The uncertainty associated with the supplied Region is modified 
-*     using the supplied Mapping.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - The only difference between this public interface and the protected 
-*     astMapRegion interface is that this implementation additionally
-*     simplifies the returned Region. The protected implementation does
-*     not do this since doing so can lead to infinite recursion because
-*     it is sometimes necessary for Simplify to call astMapRegion.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;                /* Pointer to new Region */
-   AstRegion *result;             /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the protected astMapRegion function. */
-   new = astMapRegion( this, map, frame );
-
-/* Simplify the resulting Region. */
-   result = astSimplify( new ); 
-
-/* Free resources. */
-   new = astAnnul( new );
-
-/* If not OK, annul the returned pointer. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/region.h b/ast-5.3-1/region.h
deleted file mode 100644
index c5cdb62..0000000
--- a/ast-5.3-1/region.h
+++ /dev/null
@@ -1,500 +0,0 @@
-#if !defined( REGION_INCLUDED ) /* Include this file only once */
-#define REGION_INCLUDED
-/*
-*+
-*  Name:
-*     region.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Region class.
-
-*  Invocation:
-*     #include "region.h"
-
-*  Description:
-*     This include file defines the interface to the Region class and
-*     provides the type definitions, function prototypes and macros, etc.
-*     needed to use this class.
-
-*  Inheritance:
-*     The Region class inherits from the Frame class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     5-DEC-2003 (DSB):
-*        Original version.
-*     2-MAR-2006 (DSB):
-*        Changed AST_LONG_DOUBLE to HAVE_LONG_DOUBLE.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "frame.h"               /* Parent Frame class */
-
-/* Macros. */
-/* ======= */
-
-/* Type Definitions. */
-/* ================= */
-/* Region structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-typedef struct AstRegion {
-
-/* Attributes inherited from the parent class. */
-   AstFrame parent;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstFrameSet *frameset;     /* FrameSet holding original and current Frames */
-   AstPointSet *points;       /* Points defining region location and extent */
-   struct AstRegion *unc;     /* Region specifying position uncertainties */
-   double fillfactor;         /* Fill factor (0.0->1.0) */
-   int regionfs;              /* Include FrameSet in dump? */
-   int negated;               /* Has the Region been negated? */
-   int closed;                /* Is the boundary part of the Region? */
-   int meshsize;              /* No. of points on boundary mesh */
-   struct AstRegion *defunc;  /* Default uncertainty Region */
-   AstPointSet *basemesh;     /* Base frame mesh covering the boundary */
-   AstPointSet *basegrid;     /* Base frame grid covering the boundary */
-   int adaptive;              /* Does the Region adapt to coord sys changes? */
-   int nomap;                 /* Ignore the Region's FrameSet? */
-} AstRegion;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstRegionVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* Overlap)( AstRegion *, AstRegion *, int * );
-   int (* OverlapX)( AstRegion *, AstRegion *, int * );
-   AstRegion *(* MapRegion)( AstRegion *, AstMapping *, AstFrame *, int * );
-   AstFrame *(* GetRegionFrame)( AstRegion *, int * );
-   AstFrame *(* RegFrame)( AstRegion *, int * );
-   AstFrameSet *(* GetRegFS)( AstRegion *, int * );
-   AstPointSet *(* RegTransform)( AstRegion *, AstPointSet *, int, AstPointSet *, AstFrame **, int * );
-   AstPointSet *(* BTransform)( AstRegion *, AstPointSet *, int, AstPointSet *, int * );
-   void (* Negate)( AstRegion *, int * );
-   void (* RegBaseBox)( AstRegion *, double *, double *, int * );
-   void (* RegBaseBox2)( AstRegion *, double *, double *, int * );
-   void (* RegSetAttrib)( AstRegion *, const char *, char **, int * );
-   void (* RegClearAttrib)( AstRegion *, const char *, char **, int * );
-   void (* GetRegionBounds)( AstRegion *, double *, double *, int * );
-   void (* ShowMesh)( AstRegion *, int, const char *, int * );
-   void (* GetRegionBounds2)( AstRegion *, double *, double *, int * );
-   void (* ClearUnc)( AstRegion *, int * );
-   void (* RegOverlay)( AstRegion *, AstRegion *, int, int * );
-   void (* GetRegionPoints)( AstRegion *, int, int, int *, double *, int * );
-   int (* GetBounded)( AstRegion *, int * );
-   int (* TestUnc)( AstRegion *, int * );
-   int (* RegDummyFS)( AstRegion *, int * );
-   int (* RegPins)( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-   AstMapping *(* RegMapping)( AstRegion *, int * );
-   AstPointSet *(* RegMesh)( AstRegion *, int * );
-   AstPointSet *(* RegGrid)( AstRegion *, int * );
-   AstPointSet *(* RegBaseMesh)( AstRegion *, int * );
-   AstPointSet *(* RegBaseGrid)( AstRegion *, int * );
-   AstPointSet *(* BndBaseMesh)( AstRegion *, double *, double *, int * );
-   AstPointSet *(* BndMesh)( AstRegion *, double *, double *, int * );
-   AstRegion *(* GetUncFrm)( AstRegion *, int, int * );
-   AstRegion *(* GetUnc)( AstRegion *, int, int * );
-   AstRegion *(* GetDefUnc)( AstRegion *, int * );
-   AstRegion *(* RegBasePick)( AstRegion *this, int, const int *, int * );
-   void (* ResetCache)( AstRegion *, int * );
-   int (* RegTrace)( AstRegion *, int, double *, double **, int * );
-   void (* SetUnc)( AstRegion *, AstRegion *, int * );
-   void (* SetRegFS)( AstRegion *, AstFrame *, int * );
-   double *(* RegCentre)( AstRegion *, double *, double **, int, int, int * );
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-   int (* MaskLD)( AstRegion *, AstMapping *, int, int, const int[], const int ubnd[], long double [], long double, int * );
-#endif
-   int (* MaskB)( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-   int (* MaskD)( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-   int (* MaskF)( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-   int (* MaskI)( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-   int (* MaskL)( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-   int (* MaskS)( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-   int (* MaskUB)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-   int (* MaskUI)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-   int (* MaskUL)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-   int (* MaskUS)( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-
-   int (* GetNegated)( AstRegion *, int * );
-   int (* TestNegated)( AstRegion *, int * );
-   void (* ClearNegated)( AstRegion *, int * );
-   void (* SetNegated)( AstRegion *, int, int * );
-
-   int (* GetRegionFS)( AstRegion *, int * );
-   int (* TestRegionFS)( AstRegion *, int * );
-   void (* ClearRegionFS)( AstRegion *, int * );
-   void (* SetRegionFS)( AstRegion *, int, int * );
-
-   int (* GetClosed)( AstRegion *, int * );
-   int (* TestClosed)( AstRegion *, int * );
-   void (* ClearClosed)( AstRegion *, int * );
-   void (* SetClosed)( AstRegion *, int, int * );
-
-   int (* GetMeshSize)( AstRegion *, int * );
-   int (* TestMeshSize)( AstRegion *, int * );
-   void (* ClearMeshSize)( AstRegion *, int * );
-   void (* SetMeshSize)( AstRegion *, int, int * );
-
-   double (* GetFillFactor)( AstRegion *, int * );
-   int (* TestFillFactor)( AstRegion *, int * );
-   void (* ClearFillFactor)( AstRegion *, int * );
-   void (* SetFillFactor)( AstRegion *, double, int * );
-
-   int (* GetAdaptive)( AstRegion *, int * );
-   int (* TestAdaptive)( AstRegion *, int * );
-   void (* ClearAdaptive)( AstRegion *, int * );
-   void (* SetAdaptive)( AstRegion *, int, int * );
-
-} AstRegionVtab;
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstRegionGlobals {
-   AstRegionVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstRegionGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Region)         /* Check class membership */
-astPROTO_ISA(Region)           /* Test class membership */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstRegion *astInitRegion_( void *, size_t, int, AstRegionVtab *, const char *, 
-                           AstFrame *, AstPointSet *, AstRegion *, int * );
-
-/* Vtab initialiser. */
-void astInitRegionVtab_( AstRegionVtab *, const char *, int * );
-
-/* Loader. */
-AstRegion *astLoadRegion_( void *, size_t, AstRegionVtab *,
-                           const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitRegionGlobals_( AstRegionGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-AstFrame *astGetRegionFrame_( AstRegion *, int * );
-int astOverlap_( AstRegion *, AstRegion *, int * );
-void astNegate_( AstRegion *, int * );
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-int astMaskLD_( AstRegion *, AstMapping *, int, int, const int[], const int[], long double [], long double, int * );
-#endif
-int astMaskB_( AstRegion *, AstMapping *, int, int, const int[], const int[], signed char[], signed char, int * );
-int astMaskD_( AstRegion *, AstMapping *, int, int, const int[], const int[], double[], double, int * );
-int astMaskF_( AstRegion *, AstMapping *, int, int, const int[], const int[], float[], float, int * );
-int astMaskI_( AstRegion *, AstMapping *, int, int, const int[], const int[], int[], int, int * );
-int astMaskL_( AstRegion *, AstMapping *, int, int, const int[], const int[], long int[], long int, int * );
-int astMaskS_( AstRegion *, AstMapping *, int, int, const int[], const int[], short int[], short int, int * );
-int astMaskUB_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned char[], unsigned char, int * );
-int astMaskUI_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned int[], unsigned int, int * );
-int astMaskUL_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned long int[], unsigned long int, int * );
-int astMaskUS_( AstRegion *, AstMapping *, int, int, const int[], const int[], unsigned short int[], unsigned short int, int * );
-void astSetUnc_( AstRegion *, AstRegion *, int * );
-AstRegion *astGetUnc_( AstRegion *, int, int * );
-void astGetRegionBounds_( AstRegion *, double *, double *, int * );
-void astShowMesh_( AstRegion *, int, const char *, int * );
-void astGetRegionPoints_( AstRegion *, int, int, int *, double *, int * );
-
-#if defined(astCLASS)            /* Protected */
-void astGetRegionBounds2_( AstRegion *, double *, double *, int * );
-AstRegion *astMapRegion_( AstRegion *, AstMapping *, AstFrame *, int * );
-AstFrame *astRegFrame_( AstRegion *, int * );
-AstPointSet *astRegTransform_( AstRegion *, AstPointSet *, int, AstPointSet *, AstFrame **, int * );
-AstPointSet *astBTransform_( AstRegion *, AstPointSet *, int, AstPointSet *, int * );
-void astRegBaseBox_( AstRegion *, double *, double *, int * );
-void astRegBaseBox2_( AstRegion *, double *, double *, int * );
-void astRegSetAttrib_( AstRegion *, const char *, char **, int * );
-void astRegClearAttrib_( AstRegion *, const char *, char **, int * );
-void astClearUnc_( AstRegion *, int * );
-void astRegOverlay_( AstRegion *, AstRegion *, int, int * );
-int astGetBounded_( AstRegion *, int * );
-int astTestUnc_( AstRegion *, int * );
-int astRegDummyFS_( AstRegion *, int * );
-int astRegPins_( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-AstMapping *astRegMapping_( AstRegion *, int * );
-AstPointSet *astRegMesh_( AstRegion *, int * );
-AstPointSet *astRegGrid_( AstRegion *, int * );
-AstPointSet *astRegBaseMesh_( AstRegion *, int * );
-AstPointSet *astRegBaseGrid_( AstRegion *, int * );
-AstPointSet *astBndBaseMesh_( AstRegion *, double *, double *, int * );
-AstPointSet *astBndMesh_( AstRegion *, double *, double *, int * );
-AstRegion *astGetUncFrm_( AstRegion *, int, int * );
-AstRegion *astGetDefUnc_( AstRegion *, int * );
-AstRegion *astRegBasePick_( AstRegion *this, int, const int *, int * );
-int astOverlapX_( AstRegion *, AstRegion *, int * );
-AstFrameSet *astGetRegFS_( AstRegion *, int * );
-void astSetRegFS_( AstRegion *, AstFrame *, int * );
-double *astRegCentre_( AstRegion *, double *, double **, int, int, int * );
-double *astRegTranPoint_( AstRegion *, double *, int, int, int * );
-void astResetCache_( AstRegion *, int * );
-int astRegTrace_( AstRegion *, int, double *, double **, int * );
-
-int astGetNegated_( AstRegion *, int * );
-int astTestNegated_( AstRegion *, int * );
-void astClearNegated_( AstRegion *, int * );
-void astSetNegated_( AstRegion *, int, int * );
-
-int astGetRegionFS_( AstRegion *, int * );
-int astTestRegionFS_( AstRegion *, int * );
-void astClearRegionFS_( AstRegion *, int * );
-void astSetRegionFS_( AstRegion *, int, int * );
-
-int astGetMeshSize_( AstRegion *, int * );
-int astTestMeshSize_( AstRegion *, int * );
-void astClearMeshSize_( AstRegion *, int * );
-void astSetMeshSize_( AstRegion *, int, int * );
-
-int astGetClosed_( AstRegion *, int * );
-int astTestClosed_( AstRegion *, int * );
-void astClearClosed_( AstRegion *, int * );
-void astSetClosed_( AstRegion *, int, int * );
-
-double astGetFillFactor_( AstRegion *, int * );
-int astTestFillFactor_( AstRegion *, int * );
-void astClearFillFactor_( AstRegion *, int * );
-void astSetFillFactor_( AstRegion *, double, int * );
-
-int astGetAdaptive_( AstRegion *, int * );
-int astTestAdaptive_( AstRegion *, int * );
-void astClearAdaptive_( AstRegion *, int * );
-void astSetAdaptive_( AstRegion *, int, int * );
-
-#else   /* Public only */
-AstRegion *astMapRegionId_( AstRegion *, AstMapping *, AstFrame *, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class to make
-   them easier to invoke (e.g. to avoid type mis-matches when passing pointers
-   to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them to
-   validate their own arguments. We must use a cast when passing object
-   pointers (so that they can accept objects from derived classes). */
-
-/* Check class membership. */
-#define astCheckRegion(this) astINVOKE_CHECK(Region,this,0)
-#define astVerifyRegion(this) astINVOKE_CHECK(Region,this,1)
-
-/* Test class membership. */
-#define astIsARegion(this) astINVOKE_ISA(Region,this)
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitRegion(mem,size,init,vtab,name,frame,pset,acc)\
-astINVOKE(O,astInitRegion_(mem,size,init,vtab,name,astCheckFrame(frame),pset,acc,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitRegionVtab(vtab,name) astINVOKE(V,astInitRegionVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadRegion(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadRegion_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckRegion to validate Region pointers before
-   use. This provides a contextual error report if a pointer to the wrong sort
-   of object is supplied. */
-#define astGetRegionFrame(this) \
-astINVOKE(O,astGetRegionFrame_(astCheckRegion(this),STATUS_PTR))
-#define astNegate(this) \
-astINVOKE(V,astNegate_(astCheckRegion(this),STATUS_PTR))
-#define astOverlap(this,that) \
-astINVOKE(V,astOverlap_(astCheckRegion(this),astCheckRegion(that),STATUS_PTR))
-
-#if HAVE_LONG_DOUBLE     /* Not normally implemented */
-#define astMaskLD(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskLD_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#endif
-
-#define astMaskB(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskB_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskD(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskD_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskF(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskF_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskI(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskI_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskL(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskL_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskS(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskS_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUB(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUB_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUI(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUI_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUL(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUL_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astMaskUS(this,map,inside,ndim,lbnd,ubnd,in,val) \
-astINVOKE(V,astMaskUS_(astCheckRegion(this),(map?astCheckMapping(map):NULL),inside,ndim,lbnd,ubnd,in,val,STATUS_PTR))
-#define astSetUnc(this,unc) astINVOKE(V,astSetUnc_(astCheckRegion(this),unc?astCheckRegion(unc):NULL,STATUS_PTR))
-#define astGetUnc(this,def) astINVOKE(O,astGetUnc_(astCheckRegion(this),def,STATUS_PTR))
-#define astGetRegionBounds(this,lbnd,ubnd) astINVOKE(V,astGetRegionBounds_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astShowMesh(this,format,ttl) astINVOKE(V,astShowMesh_(astCheckRegion(this),format,ttl,STATUS_PTR))
-#define astGetRegionPoints(this,maxpoint,maxcoord,npoint,points) \
-astINVOKE(V,astGetRegionPoints_(astCheckRegion(this),maxpoint,maxcoord,npoint,points,STATUS_PTR))
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-#if defined(astCLASS)            /* Protected */
-
-#define astGetRegionBounds2(this,lbnd,ubnd) astINVOKE(V,astGetRegionBounds2_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astClearUnc(this) astINVOKE(V,astClearUnc_(astCheckRegion(this),STATUS_PTR))
-#define astGetBounded(this) astINVOKE(V,astGetBounded_(astCheckRegion(this),STATUS_PTR))
-#define astGetUncFrm(this,ifrm) astINVOKE(O,astGetUncFrm_(astCheckRegion(this),ifrm,STATUS_PTR))
-#define astGetDefUnc(this) astINVOKE(O,astGetDefUnc_(astCheckRegion(this),STATUS_PTR))
-#define astMapRegion(this,map,frame) astINVOKE(O,astMapRegion_(astCheckRegion(this),astCheckMapping(map),astCheckFrame(frame),STATUS_PTR))
-#define astOverlapX(that,this) astINVOKE(V,astOverlapX_(astCheckRegion(that),astCheckRegion(this),STATUS_PTR))
-#define astRegBaseBox(this,lbnd,ubnd) astINVOKE(V,astRegBaseBox_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astRegBaseBox2(this,lbnd,ubnd) astINVOKE(V,astRegBaseBox2_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astRegSetAttrib(this,setting,bset) astINVOKE(V,astRegSetAttrib_(astCheckRegion(this),setting,bset,STATUS_PTR))
-#define astRegClearAttrib(this,setting,batt) astINVOKE(V,astRegClearAttrib_(astCheckRegion(this),setting,batt,STATUS_PTR))
-#define astRegBaseMesh(this) astINVOKE(O,astRegBaseMesh_(astCheckRegion(this),STATUS_PTR))
-#define astRegBasePick(this,naxes,axes) astINVOKE(O,astRegBasePick_(astCheckRegion(this),naxes,axes,STATUS_PTR))
-#define astRegBaseGrid(this) astINVOKE(O,astRegBaseGrid_(astCheckRegion(this),STATUS_PTR))
-#define astBndBaseMesh(this,lbnd,ubnd) astINVOKE(O,astBndBaseMesh_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astBndMesh(this,lbnd,ubnd) astINVOKE(O,astBndMesh_(astCheckRegion(this),lbnd,ubnd,STATUS_PTR))
-#define astRegCentre(this,cen,ptr,index,ifrm) astINVOKE(V,astRegCentre_(astCheckRegion(this),cen,ptr,index,ifrm,STATUS_PTR))
-#define astRegFrame(this) astINVOKE(O,astRegFrame_(astCheckRegion(this),STATUS_PTR))
-#define astRegGrid(this) astINVOKE(O,astRegGrid_(astCheckRegion(this),STATUS_PTR))
-#define astRegMesh(this) astINVOKE(O,astRegMesh_(astCheckRegion(this),STATUS_PTR))
-#define astRegOverlay(this,that,unc) astINVOKE(V,astRegOverlay_(astCheckRegion(this),astCheckRegion(that),unc,STATUS_PTR))
-#define astRegDummyFS(this) astINVOKE(V,astRegDummyFS_(astCheckRegion(this),STATUS_PTR))
-#define astRegMapping(this) astINVOKE(O,astRegMapping_(astCheckRegion(this),STATUS_PTR))
-#define astRegPins(this,pset,unc,mask) astINVOKE(V,astRegPins_(astCheckRegion(this),astCheckPointSet(pset),unc?astCheckRegion(unc):unc,mask,STATUS_PTR))
-#define astRegTranPoint(this,in,np,forward) astRegTranPoint_(this,in,np,forward,STATUS_PTR)
-#define astGetRegFS(this) astINVOKE(O,astGetRegFS_(astCheckRegion(this),STATUS_PTR))
-#define astSetRegFS(this,frm) astINVOKE(V,astSetRegFS_(astCheckRegion(this),astCheckFrame(frm),STATUS_PTR))
-#define astTestUnc(this) astINVOKE(V,astTestUnc_(astCheckRegion(this),STATUS_PTR))
-#define astResetCache(this) astINVOKE(V,astResetCache_(astCheckRegion(this),STATUS_PTR))
-#define astRegTrace(this,n,dist,ptr) astINVOKE(V,astRegTrace_(astCheckRegion(this),n,dist,ptr,STATUS_PTR))
-
-/* Since a NULL PointSet pointer is acceptable for "out", we must omit the 
-   argument checking in that case. (But unfortunately, "out" then gets 
-   evaluated twice - this is unlikely to matter, but is there a better way?) */
-
-#define astRegTransform(this,in,forward,out,frm) \
-astINVOKE(O,astRegTransform_(astCheckRegion(this),in?astCheckPointSet(in):NULL,forward,(out)?astCheckPointSet(out):NULL,frm,STATUS_PTR))
-
-#define astBTransform(this,in,forward,out) \
-astINVOKE(O,astBTransform_(astCheckRegion(this),in?astCheckPointSet(in):NULL,forward,(out)?astCheckPointSet(out):NULL,STATUS_PTR))
-
-#define astClearNegated(this) astINVOKE(V,astClearNegated_(astCheckRegion(this),STATUS_PTR))
-#define astGetNegated(this) astINVOKE(V,astGetNegated_(astCheckRegion(this),STATUS_PTR))
-#define astSetNegated(this,negated) astINVOKE(V,astSetNegated_(astCheckRegion(this),negated,STATUS_PTR))
-#define astTestNegated(this) astINVOKE(V,astTestNegated_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearAdaptive(this) astINVOKE(V,astClearAdaptive_(astCheckRegion(this),STATUS_PTR))
-#define astGetAdaptive(this) astINVOKE(V,astGetAdaptive_(astCheckRegion(this),STATUS_PTR))
-#define astSetAdaptive(this,adaptive) astINVOKE(V,astSetAdaptive_(astCheckRegion(this),adaptive,STATUS_PTR))
-#define astTestAdaptive(this) astINVOKE(V,astTestAdaptive_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearRegionFS(this) astINVOKE(V,astClearRegionFS_(astCheckRegion(this),STATUS_PTR))
-#define astGetRegionFS(this) astINVOKE(V,astGetRegionFS_(astCheckRegion(this),STATUS_PTR))
-#define astSetRegionFS(this,fs) astINVOKE(V,astSetRegionFS_(astCheckRegion(this),fs,STATUS_PTR))
-#define astTestRegionFS(this) astINVOKE(V,astTestRegionFS_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearMeshSize(this) astINVOKE(V,astClearMeshSize_(astCheckRegion(this),STATUS_PTR))
-#define astGetMeshSize(this) astINVOKE(V,astGetMeshSize_(astCheckRegion(this),STATUS_PTR))
-#define astSetMeshSize(this,meshsize) astINVOKE(V,astSetMeshSize_(astCheckRegion(this),meshsize,STATUS_PTR))
-#define astTestMeshSize(this) astINVOKE(V,astTestMeshSize_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearClosed(this) astINVOKE(V,astClearClosed_(astCheckRegion(this),STATUS_PTR))
-#define astGetClosed(this) astINVOKE(V,astGetClosed_(astCheckRegion(this),STATUS_PTR))
-#define astSetClosed(this,closed) astINVOKE(V,astSetClosed_(astCheckRegion(this),closed,STATUS_PTR))
-#define astTestClosed(this) astINVOKE(V,astTestClosed_(astCheckRegion(this),STATUS_PTR))
-
-#define astClearFillFactor(this) astINVOKE(V,astClearFillFactor_(astCheckRegion(this),STATUS_PTR))
-#define astGetFillFactor(this) astINVOKE(V,astGetFillFactor_(astCheckRegion(this),STATUS_PTR))
-#define astSetFillFactor(this,ff) astINVOKE(V,astSetFillFactor_(astCheckRegion(this),ff,STATUS_PTR))
-#define astTestFillFactor(this) astINVOKE(V,astTestFillFactor_(astCheckRegion(this),STATUS_PTR))
-
-#else  /* Public only */
-#define astMapRegion(this,map,frame) astINVOKE(O,astMapRegionId_(astCheckRegion(this),astCheckMapping(map),astCheckFrame(frame),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/selectormap.c b/ast-5.3-1/selectormap.c
deleted file mode 100644
index e2bb1f3..0000000
--- a/ast-5.3-1/selectormap.c
+++ /dev/null
@@ -1,1838 +0,0 @@
-/*
-*class++
-*  Name:
-*     SelectorMap
-
-*  Purpose:
-*     A Mapping that locates positions within one of a set of alternate 
-*     Regions.
-
-*  Constructor Function:
-c     astSelectorMap
-f     AST_SELECTORMAP
-
-*  Description:
-*     A SelectorMap is a Mapping that identifies which Region contains 
-*     a given input position.
-*     
-*     A SelectorMap encapsulates a number of Regions that all have the same 
-*     number of axes and represent the same coordinate Frame. The number of 
-*     inputs (Nin attribute) of the SelectorMap equals the number of axes 
-*     spanned by one of the encapsulated Region. All SelectorMaps have only 
-*     a single output. SelectorMaps do not define an inverse transformation.
-*
-*     For each input position, the forward transformation of a SelectorMap 
-*     searches through the encapsulated Regions (in the order supplied when 
-*     the SelectorMap was created) until a Region is found which contains
-*     the input position. The index associated with this Region is
-*     returned as the SelectorMap output value (the index value is the
-*     position of the Region within the list of Regions supplied when the 
-*     SelectorMap was created, starting at 1 for the first Region). If an
-*     input position is not contained within any Region, a value of zero is 
-*     returned by the forward transformation.
-*
-*     If a compound Mapping contains a SelectorMap in series with its own
-*     inverse, the combination of the two adjacent SelectorMaps will be 
-*     replaced by a UnitMap when the compound Mapping is simplified using
-c     astSimplify.
-f     AST_SIMPLIFY.
-*
-*     In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-
-*  Inheritance:
-*     The SelectorMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The SelectorMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The SelectorMap class does not define any new functions beyond those
-f     The SelectorMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     15-MAR-2006 (DSB):
-*        Original version.
-*     18-MAY-2006 (DSB):
-*        - Change logic for detecting interior points in function Transform.
-*        - Added BADVAL to contructor argument list.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SelectorMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "unitmap.h"             /* Unit Mappings */
-#include "channel.h"             /* I/O channels */
-#include "selectormap.h"         /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SelectorMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SelectorMap,Class_Init)
-#define class_vtab astGLOBAL(SelectorMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSelectorMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSelectorMap *astSelectorMapId_( int, void **, double, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two SelectorMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     SelectorMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two SelectorMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a SelectorMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the SelectorMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSelectorMap *that;        
-   AstSelectorMap *this;        
-   int i;
-   int nin;
-   int nreg;
-   int result;                
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two SelectorMap structures. */
-   this = (AstSelectorMap *) this_object;
-   that = (AstSelectorMap *) that_object;
-
-/* Check the second object is a SelectorMap. We know the first is a
-   SelectorMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsASelectorMap( that ) ) {
-
-/* Check they have the same number of inputs. */
-      nin = astGetNin( this );
-      if( astGetNin( that ) == nin ) {
-   
-/* Check they contain the same number of Regions, and have the same badval. */
-         nreg = this->nreg;
-         if( that->nreg == nreg ||
-             astEQUAL( that->badval, this->badval) ) {
-   
-/* Loop over the Regions, breaking as soon as two unequal Regions are
-   found. */
-            result = 1;
-            for( i = 0; i < nreg; i++ ) {
-               if( !astEqual( this->reg[ i ], that->reg[ i ] ) ) {
-                  result = 0;
-                  break;
-               }
-            }
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SelectorMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SelectorMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SelectorMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSelectorMap *this;
-   int i;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SelectorMap structure. */
-   this = (AstSelectorMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by this class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   for( i = 0; i < this->nreg; i++ ) {
-      result += astGetObjSize( this->reg[ i ] );
-   }    
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-void astInitSelectorMapVtab_(  AstSelectorMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSelectorMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SelectorMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     void astInitSelectorMapVtab( AstSelectorMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SelectorMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SelectorMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASelectorMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "SelectorMap", "Region identification Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     SelectorMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstSelectorMap *this;       /* Pointer to SelectorMap structure */
-   int i;                      /* Loop count */
-   int result;                 /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the SelectorMap structure. */
-   this = (AstSelectorMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   for( i = 0; i < this->nreg; i++ ) {
-      if( !result ) result = astManageLock( this->reg[ i ], mode, extra, fail );
-   }
-
-   return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a SelectorMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     SelectorMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated SelectorMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated SelectorMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated SelectorMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the SelectorMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        SelectorMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated SelectorMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;
-   AstRegion **sreg;
-   AstSelectorMap *map;
-   AstSelectorMap *slneb;
-   int equal;            
-   int i; 
-   int ilo;
-   int nreg;
-   int result;
-   int simp;
-
-/* Initialise.*/
-   result = -1;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to this SelectorMap, and note the number of Regions. */
-   map = (AstSelectorMap *) this;
-   nreg = map->nreg;
-
-/* Attempt to simplify the SelectorMap on its own. */
-/* ============================================= */
-
-/* Try to simplify each of the encapsulated Regions, noting if any 
-   simplification takes place. */
-   simp = 0;
-   sreg = astMalloc( sizeof( AstRegion * )*nreg );
-   if( astOK ) {
-      for( i = 0; i < nreg; i++ ) {
-         sreg[ i ] = astSimplify( map->reg[ i ] );
-         simp = simp || ( sreg[ i ] != map->reg[ i ] );
-      }
-
-/* If any simplification took place, construct a new SelectorMap from these 
-   simplified Mappings. */
-      if( simp ) { 
-         (void) astAnnul( ( *map_list )[ where ] );
-         ( *map_list )[ where ] = (AstMapping *) astSelectorMap( nreg, 
-                                                          (void **) sreg, 
-                                                          map->badval, "", status );
-         result = where;
-      }
-
-/* Release resources. */
-      if( sreg ) {
-         for( i = 0; i < nreg; i++ ) sreg[ i ] = astAnnul( sreg[ i ] );
-         sreg = astFree( sreg );
-      }
-   }
-
-/* If possible, merge the SelectorMap with a neighbouring SelectorMap. */
-/* =============================================================== */
-/* Only do this if no change was made above, and we are combining the
-   Mappings in series. */
-   if( result == -1 && series ) {
-
-/* Is the higher neighbour a SelectorMap? If so get a pointer to it, and
-   note the index of the lower of the two adjacent SelectorMaps. */
-      if( where < ( *nmap - 1 ) && 
-          astIsASelectorMap( ( *map_list )[ where + 1 ] ) ){
-         slneb = (AstSelectorMap *) ( *map_list )[ where + 1 ];
-         ilo = where;
-
-/* If not, is the lower neighbour a SelectorMap? If so get a pointer to it, and
-   note the index of the lower of the two adjacent SelectorMaps. */
-      } else if( where > 0 && 
-                 astIsASelectorMap( ( *map_list )[ where - 1 ] ) ){
-         slneb = (AstSelectorMap *) ( *map_list )[ where - 1 ];
-         ilo =  where - 1;
-
-      } else {
-         slneb = NULL;
-      }
-
-/* If a neighbouring SelectorMap was found, we can replace the pair by a
-   UnitMap if the two SelectorMaps are equal but have opposite values for
-   their Invert flags. Temporarily invert the neighbour, then compare 
-   the two SelectorMaps for equality, then re-invert the neighbour. */
-      if( slneb ) {
-         astInvert( slneb );
-         equal = astEqual( map, slneb );
-         astInvert( slneb );
-
-/* If the two SelectorMaps are equal but opposite, annul the first of the two 
-   Mappings, and replace it with a UnitMap. Also set the invert flag. */ 
-         if( equal ) {
-            new = (AstMapping *) astUnitMap( astGetNin( ( *map_list )[ ilo ] ), "", status );
-            (void) astAnnul( ( *map_list )[ ilo ] );
-            ( *map_list )[ ilo ] = new;
-            ( *invert_list )[ ilo ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-            (void) astAnnul( ( *map_list )[ ilo + 1 ] );
-            for ( i = ilo + 2; i < *nmap; i++ ) {
-               ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-               ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-            }
-
-/* Clear the vacated element at the end. */
-            ( *map_list )[ *nmap - 1 ] = NULL;
-            ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap )--;
-            result = where;
-         }
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a SelectorMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     SelectorMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a SelectorMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Mapping.
-*     This implies applying each of the SelectorMap's component Mappings in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the SelectorMap.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the SelectorMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *ps1;
-   AstPointSet *ps2;
-   AstPointSet *result;
-   AstPointSet *tps;
-   AstRegion *reg;
-   AstSelectorMap *map;  
-   double **ptr_out;
-   double **ptr1;
-   double **ptr2;
-   double **tptr;
-   double *p2;             
-   double *pout;
-   double badval;
-   int bad;
-   int closed;
-   int icoord;
-   int ipoint;
-   int ireg;
-   int ncoord;
-   int npoint;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SelectorMap. */
-   map = (AstSelectorMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
-   Mappings of the SelectorMap to generate the output coordinate values. */
-
-/* Check we are implementing the original forward transformation (the
-   inverse transformation is not defined). */
-   if( forward != astGetInvert( this ) ) {
-
-/* Get the number of input axes and the number of points. */
-      ncoord = astGetNcoord( in );
-      npoint = astGetNpoint( in );
-
-/* Create two temporary PointSets to hold copies of the input points. */
-      ps1 = astCopy( in );
-      ptr1 = astGetPoints( ps1 );
-      ps2 = astPointSet( npoint, ncoord, "", status );
-      ptr2 = astGetPoints( ps2 );
-
-/* Get a pointer to the output data */
-      ptr_out = astGetPoints( result );
-      if( astOK ) {
-
-/* Initialise the output array to hold -1 at any points that have
-   bad input axis values, and zero at all other points. */
-         pout = ptr_out[ 0 ];
-         for( ipoint = 0; ipoint < npoint; ipoint++ ) {
-            bad = 0;
-            for( icoord = 0; icoord < ncoord; icoord++ ) {
-               if( ptr1[ icoord ][ ipoint ] == AST__BAD ) {
-                  bad = 1;
-                  break;
-               }
-            }
-            *(pout++) = bad ? -1 : 0;
-         }
-
-/* Loop round all Regions. */
-         for( ireg = 1; ireg <= map->nreg; ireg++ ) {
-            reg = map->reg[ ireg - 1 ];
-
-/* Temporarily Negate the Region. */
-            astNegate( reg );
-            closed = astGetClosed( reg );
-            astSetClosed( reg, !closed );
- 
-/* Transform the remaining input positions. Good input positions which
-   are within the Region will be bad in the output. */
-            ps2 = astTransform( reg, ps1, 1, ps2 );
-
-/* Loop round all positions. */
-            p2 = ptr2[ 0 ];
-            pout = ptr_out[ 0 ];
-            for( ipoint = 0; ipoint < npoint; ipoint++, p2++, pout++ ) {
-
-/* Any position that has not already been assigned to a Region and is bad 
-   in the output PointSet must be contained within the current Region, so 
-   assign the (one-based) index of the current Region to the output element. */
-               if( *pout == 0 && *p2 == AST__BAD ) *pout = ireg;
-            }
-
-/* Negate the Region to get it back to its original state. */
-            astSetClosed( reg, closed );
-            astNegate( reg );
-
-/* Swap the input and output PointSets. */
-            tps = ps1;
-            ps1 = ps2;
-            ps2 = tps;
-            tptr = ptr1;
-            ptr1 = ptr2;
-            ptr2 = tptr;
-         }
-
-/* Replace -1 values in the output (that indicate that the input position
-   had at least one bad axis value) with the "badval".*/
-         badval = map->badval;
-         pout = ptr_out[ 0 ];
-         for( ipoint = 0; ipoint < npoint; ipoint++, pout++ ) {
-            if( *pout == -1 ) *pout = badval;
-         }
-      }
-
-/* Free resources. */
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-   }
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SelectorMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SelectorMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the 
-*     Regions within the SelectorMap.
-*/
-
-/* Local Variables: */
-   AstSelectorMap *in;                /* Pointer to input SelectorMap */
-   AstSelectorMap *out;               /* Pointer to output SelectorMap */
-   int i;                             /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SelectorMaps. */
-   in = (AstSelectorMap *) objin;
-   out = (AstSelectorMap *) objout;
-
-/* For safety, start by clearing any references to the input Regions. */
-   out->reg = NULL;
-   out->nreg = 0;
-
-/* Make copies of the Regions, and store pointers to them in the output
-   SelectorMap structure. */
-   out->reg = astMalloc( sizeof( AstRegion * )*( in->nreg ) );
-   if( astOK ) {
-      for( i = 0; i < in->nreg; i++ ) {
-         out->reg[ i ] = astCopy( in->reg[ i ] );
-      }
-      out->nreg = in->nreg;
-   }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SelectorMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SelectorMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstSelectorMap *this;              /* Pointer to SelectorMap */
-   int i;
-
-/* Obtain a pointer to the SelectorMap structure. */
-   this = (AstSelectorMap *) obj;
-
-/* Free dynamically allocated resources. */
-   for( i = 0; i < this->nreg; i++ ) {
-      this->reg[ i ] = astAnnul( this->reg[ i ] );
-   }   
-   this->reg = astFree( this->reg );
-
-/* Clear the remaining SelectorMap variables. */
-   this->nreg = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SelectorMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SelectorMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SelectorMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSelectorMap *this;
-   int i;
-   char buf[ 20 ];    
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SelectorMap structure. */
-   this = (AstSelectorMap *) this_object;
-
-/* Write out values representing the instance variables for the SelectorMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Loop to dump each Region. */
-/* ------------------------- */
-/* The coordinate Frame of the Regions is defined by the first Region.
-   The Frame information is omitted from the second and subsequent 
-   Regions by setting the protected RegionFS attribute to zero. */
-   for( i = 0; i < this->nreg; i++ ) {
-      sprintf( buf, "Reg%d", i + 1 );
-      if( i > 0 ) astSetRegionFS( this->reg[ i ], 0 );
-      astWriteObject( channel, buf, 1, 1, this->reg[ i ], 
-                      "Region of input space" );
-      if( i > 0 ) astClearRegionFS( this->reg[ i ] );
-   }
-
-/* BadVal. */
-/* ------- */
-   if( this->badval != AST__BAD ) {
-      astWriteDouble( channel, "BadVal", 1, 1, this->badval, 
-                      "Output value for bad input positions" );
-   }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASelectorMap and astCheckSelectorMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SelectorMap,Mapping)
-astMAKE_CHECK(SelectorMap)
-
-AstSelectorMap *astSelectorMap_( int nreg, void **regs_void, double badval,
-                                 const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astSelectorMap
-
-*  Purpose:
-*     Create a SelectorMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     AstSelectorMap *astSelectorMap( int nreg, AstRegion **regs,
-*                                     double badval, const char *options, ... )
-
-*  Class Membership:
-*     SelectorMap constructor.
-
-*  Description:
-*     This function creates a new SelectorMap and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     nreg
-*        The number of Regions supplied.
-*     regs
-*        An array of pointers to the Regions. Deep copies of these
-*        Regions are taken.
-*     badval
-*        The value to be returned by the forward transformation of the
-*        SelectorMap for any input positions that have a bad (AST__BAD) 
-*        value on any axis.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new SelectorMap. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new SelectorMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic SelectorMap constructor which is
-*     available via the protected interface to the SelectorMap class.  A
-*     public interface is provided by the astSelectorMapId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "map1" and "map2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSelectorMap *new;          /* Pointer to new SelectorMap */
-   AstRegion **regs;             /* Array of Region pointers */
-   int i;                        /* Region index */
-   va_list args;                 /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Report an error if no Regions have been supplied. */
-   if( nreg <= 0 ) astError( AST__BDPAR, "astSelectorMap(SelectorMap): "
-                            "Bad number of Regions (%d) specified.", status, nreg );
-
-/* Otherwise create an array to hold the Region pointers. */
-   regs = astMalloc( sizeof( AstRegion * )*nreg );
-
-/* Obtain and validate pointers to the Region structures provided. */
-   if( astOK ) {
-      for( i = 0; i < nreg; i++ ) {
-         regs[ i ] = astCheckRegion( regs_void[ i ] );
-      }
-   }
-
-   if ( astOK ) {
-
-/* Initialise the SelectorMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitSelectorMap( NULL, sizeof( AstSelectorMap ), !class_init, &class_vtab,
-                              "SelectorMap", nreg, regs, badval );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new SelectorMap's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free memory used to hold the Regions pointers. */
-   regs = astFree( regs );
-
-/* Return a pointer to the new SelectorMap. */
-   return new;
-}
-
-AstSelectorMap *astSelectorMapId_( int nreg, void **regs_void, double badval, 
-                                   const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astSelectorMap
-f     AST_SELECTORMAP
-
-*  Purpose:
-*     Create a SelectorMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "selectormap.h"
-c     AstSelectorMap *astSelectorMap( int nreg, AstRegion *regs[],
-c                                     double badval, const char *options, ... )
-f     RESULT = AST_SELECTORMAP( NREG, REGS, BADVAL, OPTIONS, STATUS )
-
-*  Class Membership:
-*     SelectorMap constructor.
-
-*  Description:
-*     This function creates a new SelectorMap and optionally initialises
-*     its attributes.
-*
-*     A SelectorMap is a Mapping that identifies which Region contains 
-*     a given input position.
-*     
-*     A SelectorMap encapsulates a number of Regions that all have the same 
-*     number of axes and represent the same coordinate Frame. The number of 
-*     inputs (Nin attribute) of the SelectorMap equals the number of axes 
-*     spanned by one of the encapsulated Region. All SelectorMaps have only 
-*     a single output. SelectorMaps do not define an inverse transformation.
-*
-*     For each input position, the forward transformation of a SelectorMap 
-*     searches through the encapsulated Regions (in the order supplied when 
-*     the SelectorMap was created) until a Region is found which contains
-*     the input position. The index associated with this Region is
-*     returned as the SelectorMap output value (the index value is the
-*     position of the Region within the list of Regions supplied when the 
-*     SelectorMap was created, starting at 1 for the first Region). If an
-*     input position is not contained within any Region, a value of zero is 
-*     returned by the forward transformation.
-*
-*     If a compound Mapping contains a SelectorMap in series with its own
-*     inverse, the combination of the two adjacent SelectorMaps will be 
-*     replaced by a UnitMap when the compound Mapping is simplified using
-c     astSimplify.
-f     AST_SIMPLIFY.
-*
-*     In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-
-*  Parameters:
-c     nreg
-f     NREG = INTEGER (Given)
-*        The number of supplied Regions.
-c     regs
-f     REGS( NREG ) = INTEGER (Given)
-*        An array of pointers to the Regions. All the supplied Regions must 
-*        relate to the same coordinate Frame. The number of axes in this
-*        coordinate Frame defines the number of inputs for the SelectorMap.
-c     badval
-f     BADVAL = DOUBLE PRECISION (Given)
-*        The value to be returned by the forward transformation of the
-*        SelectorMap for any input positions that have a bad (AST__BAD) 
-*        value on any axis.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SelectorMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SelectorMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSelectorMap()
-f     AST_SELECTORMAP = INTEGER
-*        A pointer to the new SelectorMap.
-
-*  Notes:
-*     - Deep copies are taken of the supplied Regions. This means that
-*     any subsequent changes made to the component Regions using the 
-*     supplied pointers will have no effect on the SelectorMap.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astSelectorMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astSelectorMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "map1" and "map2" parameters
-*     are of type (void *) and are converted from an ID value to a
-*     pointer and validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astSelectorMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSelectorMap *new;          /* Pointer to new SelectorMap */
-   AstRegion **regs;             /* Array of Region pointers */
-   int i;                        /* Region index */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Report an error if no Regions have been supplied. */
-   if( nreg <= 0 ) astError( AST__BDPAR, "astSelectorMap(SelectorMap): "
-                             "Bad number of Regions (%d) specified.", status, nreg );
-
-/* Create an array to hold the Region pointers. */
-   regs = astMalloc( sizeof( AstRegion * )*nreg );
-
-/* Obtain and validate pointers to the Region structures provided. */
-   if( astOK ) {
-      for( i = 0; i < nreg; i++ ) {
-         regs[ i ] = astVerifyRegion( astMakePointer(regs_void[ i ]) );
-      }
-   }
-
-   if ( astOK ) {
-
-/* Initialise the SelectorMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitSelectorMap( NULL, sizeof( AstSelectorMap ), !class_init, 
-                                &class_vtab, "SelectorMap", nreg, regs,
-                                badval );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new SelectorMap's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free memory used to hold the Regions pointers. */
-   regs = astFree( regs );
-
-/* Return an ID value for the new SelectorMap. */
-   return astMakeId( new );
-}
-
-AstSelectorMap *astInitSelectorMap_( void *mem, size_t size, int init,
-                                     AstSelectorMapVtab *vtab, const char *name,
-                                     int nreg, AstRegion **regs, double badval, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSelectorMap
-
-*  Purpose:
-*     Initialise a SelectorMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     AstSelectorMap *astInitSelectorMap( void *mem, size_t size, int init,
-*                                         AstSelectorMapVtab *vtab, const char *name,
-*                                         int nreg, AstRegion **regs, double badval ) 
-
-*  Class Membership:
-*     SelectorMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SelectorMap object. It allocates memory (if necessary) to
-*     accommodate the SelectorMap plus any additional data associated with the
-*     derived class. It then initialises a SelectorMap structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a SelectorMap at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SelectorMap is to be initialised.
-*        This must be of sufficient size to accommodate the SelectorMap data
-*        (sizeof(SelectorMap)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SelectorMap (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        SelectorMap structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the SelectorMap's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SelectorMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     nreg
-*        The number of Regions supplied.
-*     regs
-*        An array holdiong pointers to the Regions. Deep copies are taken
-*        of these Regions.
-*     badval
-*        The value to be returned by the forward transformation of the
-*        SelectorMap for any input positions that have a bad (AST__BAD) 
-*        value on any axis.
-
-*  Returned Value:
-*     A pointer to the new SelectorMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstFrame *f0;                 /* Frame from first Region */
-   AstFrame *f1;                 /* Frame from current Region */
-   AstSelectorMap *new;          /* Pointer to new SelectorMap */
-   int equal;                    /* Are Frames equal? */                      
-   int i;                        /* Loop count */
-   int nin;                      /* No. input coordinates for SelectorMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSelectorMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check that all Regions refer to the same Frame. */
-   f0 = astRegFrame( regs[ 0 ] );
-   for( i = 1; i < nreg; i++ ) {
-      f1 = astRegFrame( regs[ i ] );
-      equal = astEqual( f1, f0 );
-      f1 = astAnnul( f1 );
-
-      if( !equal ) {
-         if( astOK ) {
-            astError( AST__BADNI, "astInitSelectorMap(%s): Region "
-                      "number %d does not refer to the same coordinate "
-                      "Frame as the first Region.", status, name, i + 1 );
-         }
-      }
-   }
-
-   nin = astGetNin( regs[ 0 ] );
-   f0 = astAnnul( f0 );
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the SelectorMap structure, allocating memory if necessary. Specify
-   the number of input and output coordinates and in which directions the
-   Mapping should be defined. */
-   if ( astOK ) {
-      new = (AstSelectorMap *) astInitMapping( mem, size, 0, 
-                                             (AstMappingVtab *) vtab, name,
-                                             nin, 1, 1, 0 );
-      if ( astOK ) {
-
-/* Initialise the SelectorMap data. */
-/* -------------------------------- */
-
-/* Create an array for the Region pointers. */
-         new->reg = astMalloc( sizeof( AstRegion * )*nreg );
-
-/* Store pointers to deep copies of the Regions. */
-         if( astOK ) {
-            new->nreg = nreg;
-            for( i = 0; i < nreg; i++ ) {
-               new->reg[ i ] = astCopy( regs[ i ] );
-            }
-         } else {
-            new->nreg = 0;
-         }
-
-/* Store other items */
-         new->badval = badval;
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSelectorMap *astLoadSelectorMap_( void *mem, size_t size,
-                                     AstSelectorMapVtab *vtab, const char *name,
-                                     AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSelectorMap
-
-*  Purpose:
-*     Load a SelectorMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "selectormap.h"
-*     AstSelectorMap *astLoadSelectorMap( void *mem, size_t size,
-*                                         AstSelectorMapVtab *vtab, const char *name,
-*                                         AstChannel *channel )
-
-*  Class Membership:
-*     SelectorMap loader.
-
-*  Description:
-*     This function is provided to load a new SelectorMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SelectorMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a SelectorMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SelectorMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SelectorMap data (sizeof(SelectorMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SelectorMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SelectorMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSelectorMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SelectorMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the SelectorMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SelectorMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SelectorMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSelectorMap *new;               
-   AstFrameSet *fs;
-   AstRegion *reg;
-   int i;
-   char buf[ 20 ];
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SelectorMap. In this case the
-   SelectorMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSelectorMap );
-      vtab = &class_vtab;
-      name = "SelectorMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSelectorMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SelectorMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SelectorMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-
-/* Loop to load each Region. */
-/* ------------------------- */
-      new->reg = NULL;
-      i = 0;
-      fs = NULL;
-      while( astOK ) {
-         sprintf( buf, "reg%d", i + 1 );
-         reg = astReadObject( channel, buf, NULL );
-         if( reg ) {
-            new->reg = astGrow( new->reg, i + 1, sizeof( AstRegion *) );
-            if( astOK ) {
-               new->reg[ i ] = reg;
-
-/* All but the first Region may have a dummy FrameSet rather than the 
-   correct FrameSet. The correct FrameSet will be a copy of the FrameSet 
-   from the first Region. */
-               if( i == 0 ) {
-                  fs = astGetRegFS( reg );
-               } else if( astRegDummyFS( reg ) ){
-                  astSetRegFS( reg, fs );
-               }
-
-               i++;
-            }
-         } else {
-            break;
-         }
-      }
-
-      fs = astAnnul( fs );
-
-/* Number of Regions. */
-      new->nreg = i;
-
-
-/* BadVal. */
-/* ------- */
-      new->badval = astReadDouble( channel, "badval", AST__BAD );
-
-/* If an error occurred, clean up by deleting the new SelectorMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SelectorMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/selectormap.h b/ast-5.3-1/selectormap.h
deleted file mode 100644
index b7d3019..0000000
--- a/ast-5.3-1/selectormap.h
+++ /dev/null
@@ -1,277 +0,0 @@
-#if !defined( SELECTORMAP_INCLUDED )  /* Include this file only once */
-#define SELECTORMAP_INCLUDED
-/*
-*+
-*  Name:
-*     selectormap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SelectorMap class.
-
-*  Invocation:
-*     #include "selectormap.h"
-
-*  Description:
-*     This include file defines the interface to the SelectorMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc. needed to use this class.
-
-*  Inheritance:
-*     The SelectorMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Merge a SelectorMap within a sequence of Mappings.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsASelectorMap
-*           Test class membership.
-*        astSelectorMap
-*           Create a SelectorMap.
-*
-*     Protected:
-*        astCheckSelectorMap
-*           Validate class membership.
-*        astInitSelectorMap
-*           Initialise a SelectorMap.
-*        astInitSelectorMapVtab
-*           Initialise the virtual function table for the SelectorMap class.
-*        astLoadSelectorMap
-*           Load a SelectorMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSelectorMap
-*           SelectorMap object type.
-*
-*     Protected:
-*        AstSelectorMapVtab
-*           SelectorMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     13-MAR-2006 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "region.h"              /* Coordinate Regions (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SelectorMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstSelectorMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;       /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int nreg;                /* The number of Regions in the SelectorMap */
-   AstRegion **reg;         /* Array of Region pointers */
-   double badval;           /* Output value for positions with bad axis values */
-
-} AstSelectorMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSelectorMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstSelectorMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstSelectorMapGlobals {
-   AstSelectorMapVtab Class_Vtab;
-   int Class_Init;
-} AstSelectorMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitSelectorMapGlobals_( AstSelectorMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SelectorMap)           /* Check class membership */
-astPROTO_ISA(SelectorMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSelectorMap *astSelectorMap_( int, void **, double, const char *, int *, ...);
-#else
-AstSelectorMap *astSelectorMapId_( int, void **, double, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSelectorMap *astInitSelectorMap_( void *, size_t, int, AstSelectorMapVtab *,
-                                     const char *, int, AstRegion **, double, int * );
-
-/* Vtab initialiser. */
-void astInitSelectorMapVtab_( AstSelectorMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSelectorMap *astLoadSelectorMap_( void *, size_t, AstSelectorMapVtab *,
-                                     const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSelectorMap(this) astINVOKE_CHECK(SelectorMap,this,0)
-#define astVerifySelectorMap(this) astINVOKE_CHECK(SelectorMap,this,1)
-
-/* Test class membership. */
-#define astIsASelectorMap(this) astINVOKE_ISA(SelectorMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSelectorMap astINVOKE(F,astSelectorMap_)
-#else
-#define astSelectorMap astINVOKE(F,astSelectorMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSelectorMap(mem,size,init,vtab,name,nreg,regs,badval) \
-astINVOKE(O,astInitSelectorMap_(mem,size,init,vtab,name,nreg,regs,badval,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSelectorMapVtab(vtab,name) astINVOKE(V,astInitSelectorMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSelectorMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSelectorMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSelectorMap to validate SelectorMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/shiftmap.c b/ast-5.3-1/shiftmap.c
deleted file mode 100644
index 239e2bf..0000000
--- a/ast-5.3-1/shiftmap.c
+++ /dev/null
@@ -1,1628 +0,0 @@
-/*
-*class++
-*  Name:
-*     ShiftMap
-
-*  Purpose:
-*     Add a constant value to each coordinate.
-
-*  Constructor Function:
-c     astShiftMap
-f     AST_SHIFTMAP
-
-*  Description:
-*     A ShiftMap is a linear Mapping which shifts each axis by a
-*     specified constant value.
-
-*  Inheritance:
-*     The ShiftMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The ShiftMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The ShiftMap class does not define any new functions beyond those
-f     The ShiftMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     15-AUG-2003 (DSB):
-*        Original version.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS ShiftMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "matrixmap.h"           /* Linear mappings */
-#include "unitmap.h"             /* Unit mappings */
-#include "zoommap.h"             /* Zoom mappings */
-#include "permmap.h"             /* Axis permutations */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "winmap.h"              /* Window mappings */
-#include "shiftmap.h"            /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(ShiftMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(ShiftMap,Class_Init)
-#define class_vtab astGLOBAL(ShiftMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstShiftMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstShiftMap *astShiftMapId_( int, const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int GetObjSize( AstObject *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Function Macros */
-/* =============== */
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two ShiftMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     ShiftMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two ShiftMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a ShiftMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the ShiftMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstShiftMap *that;        
-   AstShiftMap *this;        
-   int i;           
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two ShiftMap structures. */
-   this = (AstShiftMap *) this_object;
-   that = (AstShiftMap *) that_object;
-
-/* Check the second object is a ShiftMap. We know the first is a
-   ShiftMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAShiftMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two ShiftMaps differ, it may still be possible 
-   for them to be equivalent. First compare the ShiftMaps if their Invert 
-   flags are the same. In this case all the attributes of the two ShiftMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-            result = 1;
-            for( i = 0; i < nin; i++ ) {
-               if( !astEQUAL( this->shift[ i ], that->shift[ i ] ) ) {
-                  result = 0;
-                  break;
-               }
-            }                 
-
-/* If the Invert flags for the two ShiftMaps differ, the attributes of the two 
-   ShiftMaps must be inversely related to each other. */
-         } else {
-
-            result = 1;
-            for( i = 0; i < nin; i++ ) {
-               if( !astEQUAL( this->shift[ i ], -(that->shift[ i ] ) ) ) {
-                  result = 0;
-                  break;
-               }
-            }                 
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a ShiftMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     ShiftMap member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is always one.
-
-*  Parameters:
-*     this
-*        Pointer to the ShiftMap.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 1;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     ShiftMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied ShiftMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the ShiftMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstShiftMap *this;         /* Pointer to ShiftMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the ShiftMap structure. */
-   this = (AstShiftMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astTSizeOf( this->shift );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-void astInitShiftMapVtab_(  AstShiftMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitShiftMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a ShiftMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     void astInitShiftMapVtab( AstShiftMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     ShiftMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the ShiftMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAShiftMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->Rate = Rate;
-   mapping->MapSplit = MapSplit;
-   mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetDump( vtab, Dump, "ShiftMap", "Shift each coordinate axis" );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a ShiftMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     ShiftMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated ShiftMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated ShiftMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated ShiftMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the ShiftMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        ShiftMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated ShiftMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *w1;        /* Pointer to replacement Mapping */
-   AstShiftMap *sm;      /* Pointer to this ShiftMap */
-   double *aa;           /* Pointer to shift terms for new WinMap */
-   double *bb;           /* Pointer to scale terms for new WinMap */
-   int i;                /* Axis count */
-   int nin;              /* Number of axes */
-   int result;           /* Returned value */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* A ShiftMap is equivalent to a WinMap with unit scaling. The policy on
-   simplifying a ShiftMap is to convert it to the equivalent WinMap and let
-   the WinMap class do the simplifying. Create the returned WinMap, initially 
-   with undefined corners. */
-   nin = astGetNin( this );
-   w1 = astWinMap( nin, NULL, NULL, NULL, NULL, "", status );
-
-/* If succesful, store the scale and shift terms in the WinMap. The scale
-   terms are unity. */
-   if( astOK ){
-      sm = (AstShiftMap *) this;
-
-      bb = w1->b;
-      aa = w1->a;
-      for( i = 0; i < nin; i++ ) {
-         *(bb++) = 1.0;
-         *(aa++) = ( *invert_list )[ where ] ? -(sm->shift)[ i ] : (sm->shift)[ i ];
-      }
-
-/* Replace the supplied ShiftMap with the new WinMap and reset the invert 
-   flag. */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) w1;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     ShiftMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     ShiftMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing ShiftMap. This is only possible if the specified inputs
-*     correspond to some subset of the ShiftMap outputs. That is, there
-*     must exist a subset of the ShiftMap outputs for which each output
-*     depends only on the selected ShiftMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied ShiftMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the ShiftMap to be split (the ShiftMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied ShiftMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied ShiftMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied ShiftMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstShiftMap *newsm;        /* Pointer to returned ShiftMap */
-   AstShiftMap *this;         /* Pointer to ShiftMap structure */
-   int *result;               /* Pointer to returned array */
-   int i;                     /* Loop count */
-   int iin;                   /* Mapping input index */
-   int mnin;                  /* No. of Mapping inputs */
-   int ok;                    /* Are input indices OK? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the ShiftMap structure. */
-   this = (AstShiftMap *) this_map;
-
-/* Allocate memory for the returned array and create a ShiftMap with the
-   required number of axes and initially unsorted shifts. */
-   result = astMalloc( sizeof( int )*(size_t) nin );
-   newsm = astShiftMap( nin, this->shift, "", status );
-   *map = (AstMapping *) newsm;
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Store the required shifts in the new ShiftMap. At the same time check
-   that each axis is valid. */
-      mnin = astGetNin( this );
-      ok = 1;
-      for( i = 0; i < nin; i++ ) {
-         iin = in[ i ];
-         if( iin >= 0 && iin < mnin ) {
-            (newsm->shift)[ i ] = (this->shift)[ iin ];
-            result[ i ] = iin;
-         } else {
-            ok = 0;
-            break;
-         }
-      }
-
-/* If the "in" array contained any invalid values, free the returned
-   resources. */
-      if( !ok ) { 
-         result = astFree( result );
-         *map = astAnnul( *map );
-
-/* If the indices are good, invert the returned ShiftMap if the supplied
-   ShiftMap is inverted. */
-      } else {
-         if( astGetInvert( this ) ) astInvert( *map );
-      }
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     ShiftMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-   return ( ax1 == ax2 ) ? 1.0 : 0.0;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a ShiftMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     ShiftMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a ShiftMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to map them into the 
-*     required window.
-
-*  Parameters:
-*     this
-*        Pointer to the ShiftMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the ShiftMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstShiftMap *map;             /* Pointer to ShiftMap to be applied */
-   const char *class;            /* Object class */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *axin;                 /* Pointer to next input axis value */
-   double *axout;                /* Pointer to next output axis value */
-   double a;                     /* Shift for current axis */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord;                   /* Number of coordinates per point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the ShiftMap. */
-   map = (AstShiftMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Report an error if the ShiftMap does not contain any shifts. */
-   if( !map->shift && astOK ){
-      class = astGetClass( this );
-      astError( AST__BADSM, "astTransform(%s): The supplied %s does not "
-                "contain any shift information.", status, class, class );
-   }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if( astOK ){
-
-/* Apply the mapping to each axis. */
-      for( coord = 0; coord < ncoord; coord++ ){
-
-/* Store pointers to the first input and output values on this axis. */
-         axin = ptr_in[ coord ];
-         axout = ptr_out[ coord ];
-
-/* Get the value to add to each axis value. */
-         a = (map->shift)[ coord ];
-
-/* If the shift is bad store bad output values. */
-         if( a == AST__BAD ){
-            for( point = 0; point < npoint; point++ ) *(axout++) = AST__BAD;
-
-/* Otherwise, shift this axis, taking account of whether the mapping is 
-   inverted or not. */
-         } else {
-            if( !forward ) a = -a;
-
-            for( point = 0; point < npoint; point++ ){
-               if( *axin != AST__BAD ){
-                  *(axout++) = (*axin) + a;
-               } else {
-                  *(axout++) = AST__BAD;
-               }
-               axin++;
-            }
-         }
-      }  
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for ShiftMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for ShiftMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the ShiftMap to be copied.
-*     objout
-*        Pointer to the ShiftMap being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstShiftMap *out;              /* Pointer to output ShiftMap */
-   AstShiftMap *in;               /* Pointer to input ShiftMap */
-   int ncoord;                  /* No. of axes for the mapping */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the input and output ShiftMaps. */
-   in= (AstShiftMap *) objin;
-   out = (AstShiftMap *) objout;
-
-/* Get the number of coordinates mapped by the ShiftMap. */
-   ncoord = astGetNin( in );
-
-/* Allocate memory holding copies of the shifts defining the mapping. */
-   out->shift = (double *) astStore( NULL, (void *) in->shift, 
-                                     sizeof(double)*(size_t)ncoord );
-
-/* If an error occurred, free any allocated memory. */
-   if ( !astOK ) {
-      out->shift = (double *) astFree( (void *) out->shift );
-   }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for ShiftMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for ShiftMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the ShiftMap to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This destructor does nothing and exists only to maintain a
-*     one-to-one correspondence between destructors and copy
-*     constructors.
-*/
-
-/* Local Variables: */
-   AstShiftMap *this;              /* Pointer to ShiftMap */
-
-/* Obtain a pointer to the ShiftMap structure. */
-   this = (AstShiftMap *) obj;
-
-/* Free the memory holding the shifts. */
-   this->shift = (double *) astFree( (void *) this->shift );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for ShiftMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the ShiftMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the ShiftMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 50           /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstShiftMap *this;              /* Pointer to the ShiftMap structure */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
-   int axis;                     /* Axis index */
-   int ncoord;                   /* No. of axes for mapping */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the ShiftMap structure. */
-   this = (AstShiftMap *) this_object;
-
-/* Get the number of coordinates to be mapped. */
-   ncoord = astGetNin( this );
-
-/* Write out values representing the instance variables for the
-   ShiftMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* The shifts. */
-   for( axis = 0; axis < ncoord; axis++ ){
-      (void) sprintf( buff, "Sft%d", axis + 1 );
-      (void) sprintf( comment, "Shift for axis %d", axis + 1 );
-      astWriteDouble( channel, buff, (this->shift)[ axis ] != 0.0, 0,
-                      (this->shift)[ axis ], comment );
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAShiftMap and astCheckShiftMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(ShiftMap,Mapping)
-astMAKE_CHECK(ShiftMap)
-
-AstShiftMap *astShiftMap_( int ncoord, const double shift[], const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astShiftMap
-f     AST_SHIFTMAP
-
-*  Purpose:
-*     Create a ShiftMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "shiftmap.h"
-c     AstShiftMap *astShiftMap( int ncoord, const double shift[],  
-c                               const char *options, ... )
-f     RESULT = AST_SHIFTMAP( NCOORD, SHIFT, OPTIONS, STATUS )
-
-*  Class Membership:
-*     ShiftMap constructor.
-
-*  Description:
-*     This function creates a new ShiftMap and optionally initialises its
-*     attributes.
-*
-*     A ShiftMap is a linear Mapping which shifts each axis by a
-*     specified constant value.
-
-*  Parameters:
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinate values for each point to be
-*        transformed (i.e. the number of dimensions of the space in
-*        which the points will reside). The same number is applicable
-*        to both input and output points.
-c     shift
-f     SHIFT( NCOORD ) = DOUBLE PRECISION (Given)
-*        An array containing the values to be added on to the input 
-*        coordinates in order to create the output coordinates. A separate
-*        value should be supplied for each coordinate.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new ShiftMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new ShiftMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astShiftMap()
-f     AST_SHIFTMAP = INTEGER
-*        A pointer to the new ShiftMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstShiftMap *new;              /* Pointer to new ShiftMap */
-   va_list args;                  /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the ShiftMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitShiftMap( NULL, sizeof( AstShiftMap ), !class_init, &class_vtab,
-                        "ShiftMap", ncoord, shift );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new ShiftMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new ShiftMap. */
-   return new;
-}
-
-AstShiftMap *astShiftMapId_( int ncoord, const double shift[], 
-                             const char *options, ... ) {
-/*
-*  Name:
-*     astShiftMapId_
-
-*  Purpose:
-*     Create a ShiftMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     AstShiftMap *astShiftMapId_( int ncoord, const double shift[], 
-*                                  const char *options, ... ) 
-
-*  Class Membership:
-*     ShiftMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astShiftMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astShiftMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astShiftMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astShiftMap_.
-
-*  Returned Value:
-*     The ID value associated with the new ShiftMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstShiftMap *new;            /* Pointer to new ShiftMap */
-   va_list args;                /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the ShiftMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitShiftMap( NULL, sizeof( AstShiftMap ), !class_init, &class_vtab,
-                          "ShiftMap", ncoord, shift );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new ShiftMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new ShiftMap. */
-   return astMakeId( new );
-}
-
-AstShiftMap *astInitShiftMap_( void *mem, size_t size, int init,
-                              AstShiftMapVtab *vtab, const char *name,
-                              int ncoord, const double *shift, int *status ) {
-/*
-*+
-*  Name:
-*     astInitShiftMap
-
-*  Purpose:
-*     Initialise a ShiftMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     AstShiftMap *astInitShiftMap( void *mem, size_t size, int init,
-*                                   AstShiftMapVtab *vtab, const char *name,
-*                                   int ncoord, const double *shift )
-
-*  Class Membership:
-*     ShiftMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new ShiftMap object. It allocates memory (if necessary) to accommodate
-*     the ShiftMap plus any additional data associated with the derived class.
-*     It then initialises a ShiftMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a ShiftMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the ShiftMap is to be initialised.
-*        This must be of sufficient size to accommodate the ShiftMap data
-*        (sizeof(ShiftMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the ShiftMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the ShiftMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the ShiftMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new ShiftMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     ncoord
-*        The number of coordinate values per point.
-*     shift
-*        Pointer to an array of shifts, one for each coordinate.
-
-*  Returned Value:
-*     A pointer to the new ShiftMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstShiftMap *new;            /* Pointer to new ShiftMap */
-   int axis;                    /* Axis index */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitShiftMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the ShiftMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstShiftMap *) astInitMapping( mem, size, 0,
-                                         (AstMappingVtab *) vtab, name,
-                                         ncoord, ncoord, 1, 1 );
- 
-   if ( astOK ) {
-
-/* Initialise the ShiftMap data. */
-/* ---------------------------- */
-/* Allocate memory to hold the shift for each axis. */
-      new->shift = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-
-/* Check the pointers can be used */
-      if( astOK ){
-
-/* Store the shift and scale for each axis. */
-         for( axis = 0; axis < ncoord; axis++ ){
-            (new->shift)[ axis ] = shift ? shift[ axis ] : AST__BAD;
-         }
-
-      }
-
-/* If an error occurred, clean up by deleting the new ShiftMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new ShiftMap. */
-   return new;
-}
-
-AstShiftMap *astLoadShiftMap_( void *mem, size_t size,
-                               AstShiftMapVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadShiftMap
-
-*  Purpose:
-*     Load a ShiftMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "shiftmap.h"
-*     AstShiftMap *astLoadShiftMap( void *mem, size_t size,
-*                                   AstShiftMapVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     ShiftMap loader.
-
-*  Description:
-*     This function is provided to load a new ShiftMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     ShiftMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a ShiftMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the ShiftMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        ShiftMap data (sizeof(ShiftMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the ShiftMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the ShiftMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstShiftMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new ShiftMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the ShiftMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "ShiftMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new ShiftMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants. */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstShiftMap *new;            /* Pointer to the new ShiftMap */
-   char buff[ KEY_LEN + 1 ];    /* Buffer for keyword string */
-   int axis;                    /* Axis index */
-   int ncoord;                  /* The number of coordinate axes */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this ShiftMap. In this case the
-   ShiftMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstShiftMap );
-      vtab = &class_vtab;
-      name = "ShiftMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitShiftMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built ShiftMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Get the number of axis for the mapping. */
-      ncoord = astGetNin( (AstMapping *) new );
-
-/* Allocate memory to hold the shifts. */
-      new->shift = (double *) astMalloc( sizeof(double)*(size_t)ncoord );   
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "ShiftMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* The shifts. */
-      for( axis = 0; axis < ncoord; axis++ ){
-         (void) sprintf( buff, "sft%d", axis + 1 );
-         (new->shift)[ axis ] = astReadDouble( channel, buff, 0.0 );
-      }
-   }
-
-/* If an error occurred, clean up by deleting the new ShiftMap. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new ShiftMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/shiftmap.h b/ast-5.3-1/shiftmap.h
deleted file mode 100644
index 49f43a5..0000000
--- a/ast-5.3-1/shiftmap.h
+++ /dev/null
@@ -1,290 +0,0 @@
-#if !defined( SHIFTMAP_INCLUDED ) /* Include this file only once */
-#define SHIFTMAP_INCLUDED
-/*
-*+
-*  Name:
-*     shiftmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the ShiftMap class.
-
-*  Invocation:
-*     #include "shiftmap.h"
-
-*  Description:
-*     This include file defines the interface to the ShiftMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The ShiftMap class implements Mappings which shift each coordinate
-*     by a fixed amount.
-
-*  Inheritance:
-*     The ShiftMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        ClearAttrib
-*           Clear an attribute value for a ShiftMap.
-*        GetAttrib
-*           Get an attribute value for a ShiftMap.
-*        SetAttrib
-*           Set an attribute value for a ShiftMap.
-*        TestAttrib
-*           Test if an attribute value has been set for a ShiftMap.
-*        astMapMerge
-*           Simplify a sequence of Mappings containing a ShiftMap.
-*        astTransform
-*           Apply a ShiftMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAShiftMap
-*           Test class membership.
-*        astShiftMap
-*           Create a ShiftMap.
-*
-*     Protected:
-*        astCheckShiftMap
-*           Validate class membership.
-*        astInitShiftMap
-*           Initialise a ShiftMap.
-*        astInitShiftMapVtab
-*           Initialise the virtual function table for the ShiftMap class.
-*        astLoadShiftMap
-*           Load a ShiftMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstShiftMap
-*           ShiftMap object type.
-*
-*     Protected:
-*        AstShiftMapVtab
-*           ShiftMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     14-AUG-2003 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* ShiftMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstShiftMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *shift;                /* Pointer to array of shifts */
-
-} AstShiftMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstShiftMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstShiftMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstShiftMapGlobals {
-   AstShiftMapVtab Class_Vtab;
-   int Class_Init;
-} AstShiftMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitShiftMapGlobals_( AstShiftMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(ShiftMap)          /* Check class membership */
-astPROTO_ISA(ShiftMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstShiftMap *astShiftMap_( int, const double [], const char *, int *, ...);
-#else
-AstShiftMap *astShiftMapId_( int, const double [], const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstShiftMap *astInitShiftMap_( void *, size_t, int, AstShiftMapVtab *,
-                               const char *, int, const double *, int * );
-
-/* Vtab initialiser. */
-void astInitShiftMapVtab_( AstShiftMapVtab *, const char *, int * );
-
-/* Loader. */
-AstShiftMap *astLoadShiftMap_( void *, size_t, AstShiftMapVtab *,
-                               const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckShiftMap(this) astINVOKE_CHECK(ShiftMap,this,0)
-#define astVerifyShiftMap(this) astINVOKE_CHECK(ShiftMap,this,1)
-
-/* Test class membership. */
-#define astIsAShiftMap(this) astINVOKE_ISA(ShiftMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astShiftMap astINVOKE(F,astShiftMap_)
-#else
-#define astShiftMap astINVOKE(F,astShiftMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define \
-astInitShiftMap(mem,size,init,vtab,name,ncoord,shift) \
-astINVOKE(O,astInitShiftMap_(mem,size,init,vtab,name,ncoord,shift,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitShiftMapVtab(vtab,name) astINVOKE(V,astInitShiftMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadShiftMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadShiftMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckShiftMap to validate ShiftMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/skyaxis.c b/ast-5.3-1/skyaxis.c
deleted file mode 100644
index b512d36..0000000
--- a/ast-5.3-1/skyaxis.c
+++ /dev/null
@@ -1,4861 +0,0 @@
-/*
-*class++
-*  Name:
-*     SkyAxis
-
-*  Purpose:
-*     Store celestial axis information.
-
-*  Constructor Function:
-*     None.
-
-*  Description:
-*     The SkyAxis class is used to store information associated with a
-*     particular axis of a SkyFrame. It is used internally by the AST
-*     library and has no constructor function. You should encounter it
-c     only within textual output (e.g. from astWrite).
-f     only within textual output (e.g. from AST_WRITE).
-
-*  Inheritance:
-*     The SkyAxis class inherits from the Axis class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: B.S. Berry (Starlink)
-
-*  History:
-*     1-MAR-1996 (RFWS):
-*        Original version.
-*     19-APR-1996 (RFWS):
-*        Tidied up, etc.
-*     8-MAY-1996 (RFWS):
-*        Remove leading minus sign from formatted HMS string if all
-*        fields are zero.
-*     9-MAY-1996 (RFWS):
-*        Fixed bug in rounding of fractional parts of HMS strings and
-*        improved algorithm to cope gracefully with requests for
-*        excessive numbers of decimal places.
-*     13-MAY-1996 (RFWS):
-*        Over-ride the astGetAxisDirection method so that a SkyAxis
-*        with the AsTime attribute set is displayed in reverse by
-*        default.
-*     17-MAY-1996 (RFWS):
-*        Change AxisNorm to return a bad coordinate value if a bad
-*        value is given.
-*     11-SEP-1996 (RFWS):
-*        Added AxisGap and DHmsGap (written by DSB).
-*     26-FEB-1998 (RFWS):
-*        Over-ride the astAxisUnformat method.
-*     6-MAR-1998 (RFWS):
-*        Add formatting options to omit degrees/hours field and change
-*        all affected functions.
-*     10-AUG-2000 (DSB):
-*        Fixed bug in DHmsFormat which could cause (for instance) a formatted 
-*        galactic longitude value of zero to be formated as "-0.-0".
-*     29-AUG-2001 (DSB):
-*        Added AxisDistance and AxisOffset.
-*     10-OCT-2002 (DSB):
-*        Over-ride the astGetAxisTop and astGetAxisBottom methods so that a 
-*        SkyAxis with the IsLatitude attribute set is legal between plus
-*        and minus 90 degrees.
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitSkyAxisVtab
-*        method.
-*        - Modify DHmsGap to avoid decimal gap "4" which produces things
-*        like "0.0 0.4 0.8 1.2 1.6 2.0" ("4" replaced by "5").
-*     24-JAN-2004 (DSB):
-*        o  Added AxisFields.
-*        o  Added 'g' format character which produces graphical separators. 
-*        o  Modified AxisAbbrev to use AxisFields so that delimiters which 
-*           include digits can be recognised.
-*     13-SEP-20904 (DSB):
-*        Modify AxisFields to correct usage of the "p" pointer in the
-*        case that the first and only field begins with a minus sign.
-*     15-SEP-2004 (DSB):
-*        Modified ParseDHmsFormat so that the number of decimal places
-*        is specified by Digits if the given format string include a ".*"
-*        precision (e.g. "dms.*").
-*     18-MAR-2005 (DSB):
-*        Invoke methods inherited from parent Axis class if the format
-*        string starts with a '%' character.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     30-JUN-2006 (DSB):
-*        Guard against a null "str1" value in AxisAbbrev.
-*     7-AUG-2007 (DSB):
-*        Added CentreZero attribute.
-*     1-FEB-2008 (DSB):
-*        Modified AxisUnformat to allow the final numerical field to include 
-*        an exponent.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to the header
-   files that define class interfaces that they should make "protected"
-   symbols available. */
-#define astCLASS SkyAxis
-
-/* Header files. */
-/* ============= */
-#include "ast_err.h"             /* Error code definitions */
-
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h"                 /* SLALIB interface */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "pointset.h"            /* Sets of points (for AST__BAD) */
-#include "axis.h"                /* Axis (parent) class interface */
-#include "skyaxis.h"             /* Interface definition for this class */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getaxislabel)( AstAxis *, int * );
-static const char *(* parent_getaxissymbol)( AstAxis *, int * );
-static const char *(* parent_getaxisunit)( AstAxis *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static int (*parent_getaxisdirection)( AstAxis *this, int * );
-static void (* parent_axisoverlay)( AstAxis *, AstAxis *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static double (*parent_getaxisbottom)( AstAxis *this, int * );
-static double (*parent_getaxistop)( AstAxis *this, int * );
-static const char *(* parent_axisformat)( AstAxis *, double, int * );
-static double (*parent_axisgap)( AstAxis *, double, int *, int * );
-static int (*parent_axisunformat)( AstAxis *, const char *, double *, int * );
-static int (*parent_axisfields)( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-
-/* Factors for converting between hours, degrees and radians. */
-static double hr2rad;
-static double deg2rad;
-static double pi;
-static double piby2;
-
-/* Strings used as field delimiters when producing graphical labels.
-   These strings include escape sequences which the Plot class interprets
-   to produce super-scripts, suub-scripts, etc.*/
-static char *gh_delim  = "%-%^50+%s70+h%+";    /* Hours separator */
-static char *gm_delim  = "%-%^50+%s70+m%+";    /* Min.s separator */
-static char *gs_delim  = "%-%^50+%s70+s%+";    /* Sec.s separator */
-static char *gd_delim  = "%-%^53+%s60+o%+";    /* Deg.s separator */
-static char *gam_delim = "%-%^20+%s85+'%+";    /* Arc-min.s separator */
-static char *gas_delim = "%-%^20+%s85+\"%+";   /* Arc-sec.s separator */
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->DHmsFormat_Buff[ 0 ] = 0; \
-   globals->DHmsUnit_Buff[ 0 ] = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetAxisFormat_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SkyAxis)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SkyAxis,Class_Init)
-#define class_vtab astGLOBAL(SkyAxis,Class_Vtab)
-#define dhmsformat_buff astGLOBAL(SkyAxis,DHmsFormat_Buff)
-#define dhmsunit_buff astGLOBAL(SkyAxis,DHmsUnit_Buff)
-#define getattrib_buff astGLOBAL(SkyAxis,GetAttrib_Buff)
-#define getaxisformat_buff astGLOBAL(SkyAxis,GetAxisFormat_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char dhmsformat_buff[ AST__SKYAXIS_DHMSFORMAT_BUFF_LEN + 1 ]; 
-static char dhmsunit_buff[ AST__SKYAXIS_DHMSUNIT_BUFF_LEN + 1 ]; 
-static char getattrib_buff[ AST__SKYAXIS_GETATTRIB_BUFF_LEN + 1 ];
-static char getaxisformat_buff[ AST__SKYAXIS_GETAXISFORMAT_BUFF_LEN + 1 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSkyAxisVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSkyAxis *astSkyAxisId_( const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static const char *AxisAbbrev( AstAxis *, const char *, const char *, const char *, int * );
-static const char *AxisFormat( AstAxis *, double, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetAxisFormat( AstAxis *, int * );
-static const char *GetAxisLabel( AstAxis *, int * );
-static const char *GetAxisSymbol( AstAxis *, int * );
-static const char *GetAxisUnit( AstAxis *, int * );
-static const char *DHmsFormat( const char *, int, double, int * );
-static const char *DHmsUnit( const char *, int, int, int * );
-static double AxisGap( AstAxis *, double, int *, int * );
-static double AxisDistance( AstAxis *, double, double, int * );
-static double AxisOffset( AstAxis *, double, double, int * );
-static double DHmsGap( const char *, int, double, int *, int * );
-static double GetAxisTop( AstAxis *, int * );
-static double GetAxisBottom( AstAxis *, int * );
-static int AxisIn( AstAxis *, double, double, double, int, int * );
-static int AxisFields( AstAxis *, const char *, const char *, int, char **, int *, double *, int * );
-static int AxisUnformat( AstAxis *, const char *, double *, int * );
-static int GetAxisAsTime( AstSkyAxis *, int * );
-static int GetAxisDirection( AstAxis *, int * );
-static int GetAxisIsLatitude( AstSkyAxis *, int * );
-static int GetAxisCentreZero( AstSkyAxis *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestAxisAsTime( AstSkyAxis *, int * );
-static int TestAxisFormat( AstAxis *, int * );
-static int TestAxisIsLatitude( AstSkyAxis *, int * );
-static int TestAxisCentreZero( AstSkyAxis *, int * );
-static void AxisNorm( AstAxis *, double *, int * );
-static void AxisOverlay( AstAxis *, AstAxis *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearAxisAsTime( AstSkyAxis *, int * );
-static void ClearAxisFormat( AstAxis *, int * );
-static void ClearAxisIsLatitude( AstSkyAxis *, int * );
-static void ClearAxisCentreZero( AstSkyAxis *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void ParseDHmsFormat( const char *, int, char *, int *, int *, int *, int *, int *, int *, int *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetAxisAsTime( AstSkyAxis *, int, int * );
-static void SetAxisFormat( AstAxis *, const char *, int * );
-static void SetAxisIsLatitude( AstSkyAxis *, int, int * );
-static void SetAxisCentreZero( AstSkyAxis *, int, int * );
-
-/* Member functions. */
-/* ================= */
-static const char *AxisAbbrev( AstAxis *this_axis, const char *fmt,
-                               const char *str1, const char *str2, int *status ) {
-/*
-*  Name:
-*     AxisAbbrev
-
-*  Purpose:
-*     Abbreviate a formatted SkyAxis value by skipping leading fields.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *AxisAbbrev( AstAxis *this, const char *fmt,
-*                             const char *str1, const char *str2 )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the protected astAxisAbbrev
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function compares two SkyAxis values that have been
-*     formatted with the supplied format specifier (using astAxisFormat) 
-*     and determines if they have any redundant leading fields (i.e. 
-*     leading fields in common which can be suppressed when tabulating 
-*     the values or plotting them on the axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specifier used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value. If this is null, the returned pointer
-*        points to the start of the final field in str2.
-*     str2
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   char *fld1[ 3 ];              /* Pointers to start of each field in str1 */
-   char *fld2[ 3 ];              /* Pointers to start of each field in str2 */
-   const char *result;           /* Result pointer to return */
-   int i;                        /* Loop counter for string fields */
-   int nf1;                      /* Number of fields found in str1 */
-   int nf2;                      /* Number of fields found in str2 */
-   int nc1[ 3 ];                 /* Length of each field in str1 */
-   int nc2[ 3 ];                 /* Length of each field in str2 */
-
-/* Initialise. */
-   result = str2;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Find the fields within the "str2" string. */
-   nf2 = astAxisFields( this_axis, fmt, str2, 3, fld2, nc2, NULL );
-
-/* If "str1" was not supplied, return a pointer to the final field in
-   "str2". */
-   if( !str1 ) {
-      result = fld2[ nf2 - 1 ];
-
-/* Otherwise, find the fields within the "str1" string. */
-   } else {
-      nf1 = astAxisFields( this_axis, fmt, str1, 3, fld1, nc1, NULL );
-
-/* Loop to inspect corresponding fields from each string. */
-      for ( i = 0; i < nf1 && i < nf2; i++ ) {
-
-/* If the fields are different, break out of the loop. */
-         if ( nc1[ i ] != nc2[ i ] || 
-              strncmp( fld1[ i ], fld2[ i ], nc1[ i ] ) ) {
-            break;
-
-/* Otherwise, move the returned poitner on to point to the start of the
-   next field in str2. If we are already at the last field in str2,
-   return a pointer to the terminating null. */
-         } else {
-            if ( i + 1 < nf2 ) {
-               result = fld2[ i + 1 ];
-            } else {
-               result = strchr( str2, '\0' );
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double AxisDistance( AstAxis *this_axis, double v1, double v2, int *status ) {
-/*
-*  Name:
-*     AxisDistance
-
-*  Purpose:
-*     Find the distance between two axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     AxisDistance( AstAxis *this, double v1, double v2 )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the protected astAxisDistance
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function returns a signed value representing the axis increment 
-*     from axis value v1 to axis value v2.
-*
-*     For a SkyAxis, the angular difference between the two supplied axis 
-*     values is normalized into the range +PI to -PI.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     v1
-*        The first axis value
-*     v2
-*        The second axis value
-
-*  Returned Value:
-*     The axis increment from v1 to v2.
-
-*  Notes:
-*     - A value of AST__BAD is returned if either axis value is AST__BAD.
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   double result;                /* Returned gap size */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned increment,
-   normalizing it into the range +PI to -PI. */
-   if( v1 != AST__BAD && v2 != AST__BAD ) result = palSlaDrange( v2 - v1 );
-
-/* Return the result. */
-   return result;
-}
-
-static int AxisFields( AstAxis *this_axis, const char *fmt, const char *str, 
-                       int maxfld, char **fields, int *nc, double *val, int *status ) {
-/*
-*  Name:
-*     AxisFields
-
-*  Purpose:
-*     Identify numerical fields within a formatted SkyAxis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int AxisFields( AstAxis *this_axis, const char *fmt, const char *str, 
-*                     int maxfld, char **fields, int *nc, double *val ) 
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the protected astAxisFields
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function identifies the numerical fields within a SkyAxis value
-*     that have been formatted using astAxisFormat. It assumes that the
-*     value was formatted using the supplied format string. It also
-*     returns the equivalent floating point value in radians.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format used when creating "str".
-*     str
-*        Pointer to a constant null-terminated string containing the
-*        formatted value.
-*     maxfld
-*        The maximum number of fields to identify within "str".
-*     fields
-*        A pointer to an array of at least "maxfld" character pointers. 
-*        Each element is returned holding a pointer to the start of the 
-*        corresponding field  in "str" (in the order in which they occur 
-*        within "str"), or NULL if no corresponding field can be found. 
-*     nc
-*        A pointer to an array of at least "maxfld" integers. Each
-*        element is returned holding the number of characters in the
-*        corresponding field, or zero if no corresponding field can be
-*        found.
-*     val
-*        Pointer to a location at which to store the radians value
-*        equivalent to the returned field values. If this is NULL, 
-*        it is ignored.
-
-*  Returned Value:
-*     The number of fields succesfully identified and returned.
-
-*  Notes:
-*     - Leading and trailing spaces are ignored.
-*     - If the formatted value is not consistent with the supplied format
-*     string, then a value of zero will be returned, "fields" will be
-*     returned holding NULLs, "nc" will be returned holding zeros, and
-*     "val" is returned holding VAL__BAD.
-*     - Fields are counted from the start of the formatted string. If the
-*     string contains more than "maxfld" fields, then trailing fields are
-*     ignored.
-*     - If this function is invoked with the global error status set, or 
-*     if it should fail for any reason, then a value of zero will be returned 
-*     as the function value, and "fields", "nc" and "val"  will be returned 
-*     holding their supplied values
-
-*/
-
-/* Local Variables: */
-   char sep;                     /* Field separator character */
-   char tbuf[2];                 /* Buffer for terminator string */
-   char *p;                      /* Pointer to next character */
-   char *t;                      /* Pointer to start of terminator string */
-   char *term;                   /* Pointer to terminator string */
-   double dval;                  /* Value read from string */
-   double value;                 /* Equivalent radians value */
-   int as_time;                  /* Format the value as a time? */
-   int dh;                       /* Hours field required? */
-   int ifld;                     /* Field index */
-   int lead_zero;                /* Add leading zeros? */
-   int min;                      /* Minutes field required? */
-   int ndp;                      /* Number of decimal places */
-   int ok;                       /* Value and format consistent? */
-   int plus;                     /* Add leading plus sign? */
-   int result;                   /* Result fields count to return */
-   int sec;                      /* Seconds field required? */
-   int sign;                     /* The sign of the radians value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If the format string starts with a "%" call the method inherited from
-   the parent Axis class. */
-   if( fmt[ 0 ] == '%' ) {
-      return (*parent_axisfields)( this_axis, fmt, str, maxfld, fields, nc, 
-                                   val, status );
-   }   
-
-/* Initialise. */
-   result = 0;
-   for( ifld = 0; ifld < maxfld; ifld++ ) {
-      fields[ ifld ] = NULL;
-      nc[ ifld ] = 0;
-   }
-   if( val ) *val = AST__BAD;
-
-/* Parse the format specifier. */
-   ParseDHmsFormat( fmt, astGetAxisDigits( this_axis ), &sep, &plus, &lead_zero,
-                    &as_time, &dh, &min, &sec, &ndp, status );
-
-/* Only proceed if the format was parsed succesfully, and the supplied arrays 
-   are not of zero size. */
-   if( astOK && maxfld > 0 ) {
-
-/* Indicate that we have not yet found any inconsistency between the 
-   formatted value and the forat string. */
-      ok = 1;
-
-/* Variable "p" points to the next character to be read from the
-   formatted string. Initialise it to point to the first non-space
-   character. */
-      p = (char *) str;
-      while( *p == ' ' ) p++;
-
-/* Note the start of the first field. */
-      fields[ 0 ] = p;
-
-/* If the first non-blank character is a + or - sign, skip it and note
-   the sign of the final value. */
-      sign = 1;
-      if( *p == '-' ) {
-         sign = -1;
-         p++;
-      } else if( *p == '+' ) {
-         p++;
-      }     
-
-/* Initialise the equivalent radian value. */
-      value = 0.0;
-
-/* If the format string specifies a degrees or hours field, it should be 
-   the first field. */
-      if( dh ) {
-
-/* If the format indicates that fields are separated by characters, or if
-   there is a minutes or seconds field, then the first field should end with 
-   the appropriate separator. In these cases locate the terminator,and
-   store the length of the first field. */
-         if( sep == 'l' || sep == 'g' || min || sec ) {
-
-            if( sep == 'l' ) {
-               term = as_time ? "h" : "d";
-      
-            } else if( sep == 'g' ) {
-               term = as_time ? gh_delim : gd_delim;
-   
-            } else {
-               tbuf[ 0 ] = sep;
-               tbuf[ 1 ] = '\0';
-               term = tbuf;
-            }
-
-            t = strstr( p, term );
-            if( t ) {
-               nc[ 0 ] = t - fields[ 0 ];
-            } else {
-               ok = 0;
-            }
-
-/* Move on to the first character following the terminator. */
-            p = t + strlen( term );
-
-/* In all other cases, the first field is the only field and is not
-   terminated. Note its length (ignoring trailing spaces). Move the
-   pointer on by the length of the field, remembering that any leading
-   minus sign has already been skipped. */
-         } else {
-            nc[ 0 ] = astChrLen( fields[ 0 ] );
-            p += nc[ result ];
-            if( sign == -1 ) p--;
-         }
-
-/* Read a numerical value from the first field. */
-         if( astSscanf( fields[ 0 ], "%lg", &dval ) ) {
-            value = fabs( dval );
-         } else {
-            ok = 0;
-         }
-
-/* Increment then number of returned fields if OK */
-         if( ok ) result++;
-
-      }
-
-/* If the format string specifies a minutes field, it should be the next
-   field. */
-      if( min && ok ) {
-
-/* Note the start of the next field. */
-         fields[ result ] = p;
-
-/* If the format indicates that fields are separated by characters, or if
-   there is a seconds field, then this field should end with the appropriate 
-   separator. In these cases locate the terminator,and store the length of 
-   this field. */
-         if( sep == 'l' || sep == 'g' || sec ) {
-            if( sep == 'l' ) {
-               term = "m";
-
-            } else if( sep == 'g' ) {
-               term = as_time ? gm_delim : gam_delim;
-
-            } else {
-               tbuf[ 0 ] = sep;
-               tbuf[ 1 ] = '\0';
-               term = tbuf;
-            }
-
-            t = strstr( p, term );
-            if( t ) {
-               nc[ result ] = t - fields[ result ];
-            } else {
-               ok = 0;
-            }
-
-/* Move on to the first character following the terminator. */
-            p = t + strlen( term );
-
-/* In all other cases, this field is not terminated. Note its length 
-   (ignoring trailing spaces). */
-         } else {
-            nc[ result ] = astChrLen( fields[ result ] );
-            p += nc[ result ];
-         }
-
-/* Read a numerical value from this field. */
-         if( astSscanf( fields[ result ], "%lg", &dval ) ) {
-            value += dval/60.0;
-         } else {
-            ok = 0;
-         }
-
-/* Increment then number of returned fields if OK */
-         if( ok ) result++;
-
-      }
-
-/* If the format string specifies a seconds field, it should be the next
-   field. */
-      if( sec && ok ) {
-
-/* Note the start of the next field. */
-         fields[ result ] = p;
-
-/* If the format indicates that fields are separated by characters, then this 
-   field should end with the appropriate separator. In this case locate the 
-   terminator,and store the length of this field. */
-         if( sep == 'l' || sep == 'g' ) {
-            if( sep == 'l' ) {
-               term = "s";
-            } else {
-               term = as_time ? gs_delim : gas_delim;
-            }
-
-            t = strstr( p, term );
-            if( t ) {
-               nc[ result ] = t - fields[ result ];
-            } else {
-               ok = 0;
-            }
-
-/* Move on to the first character following the terminator. */
-            p = t + strlen( term );
-
-/* In all other cases, this field is not terminated. Note its length 
-   (ignoring trailing spaces). */
-         } else {
-            nc[ result ] = astChrLen( fields[ result ] );
-            p += nc[ result ];
-         }
-
-/* Read a numerical value from this field. */
-         if( astSscanf( fields[ result ], "%lg", &dval ) ) {
-            value += dval/3600.0;
-         } else {
-            ok = 0;
-         }
-
-/* Increment then number of returned fields if OK */
-         if( ok ) result++;
-
-      }
-
-/* Check that nothing is left.*/
-      if( astChrLen( p ) > 0 ) ok = 0;
-
-/* If OK, convert the axis value to radians. */
-      if( ok ) {
-         if( val ) {
-            *val = sign*value*( as_time ? hr2rad : deg2rad );
-         }
-
-/* Otherwise, return zero. */
-      } else {
-         result = 0;
-         for( ifld = 0; ifld < maxfld; ifld++ ) {
-            fields[ ifld ] = NULL;
-            nc[ ifld ] = 0;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *AxisFormat( AstAxis *this_axis, double value, int *status ) {
-/*
-*  Name:
-*     AxisFormat
-
-*  Purpose:
-*     Format a coordinate value for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *AxisFormat( AstAxis *this, double value, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astAxisFormat method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function returns a pointer to a string containing the formatted
-*     (character) version of a coordinate value for a SkyAxis. The formatting
-*     applied is that specified by a previous invocation of the
-*     astSetAxisFormat method. A suitable default format is applied if
-*     necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     value
-*        The coordinate value to be formatted (in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted value.
-
-*  Notes:
-*     -  The returned string pointer may point at memory allocated within
-*     the SkyAxis object, or at static memory. The contents of the string may
-*     be over-written or the pointer may become invalid following a further
-*     invocation of the same function or deletion of the SkyAxis. A copy of the
-*     string should therefore be made if necessary.
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *fmt;              /* Pointer to format specifier */
-   const char *result;           /* Pointer to result string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Obtain a pointer to the format specifier to be used. Note we use a private
-   member function to obtain this (not a method) in case derived classes have
-   extended the syntax of this string. */
-   fmt = GetAxisFormat( this_axis, status );
-
-/* If the format string starts with a percent, use the AxisFormat method
-   inherited from the parent Axis class. Otherwise, format using the
-   syntax of this class. */
-   if ( astOK ) {
-      if( fmt[ 0 ] == '%' ) {
-         result = (*parent_axisformat)( this_axis, value, status );
-      } else { 
-         result = DHmsFormat( fmt, astGetAxisDigits( this ), value, status );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double AxisGap( AstAxis *this_axis, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     AxisGap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating SkyAxis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     double AxisGap( AstAxis *this, double gap, int *ntick, int *status ) 
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the protected astAxisGap
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function returns a gap size in radians which produces a
-*     nicely spaced series of formatted SkyAxis values, the returned
-*     gap size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - The returned gap size is influenced by the format string
-*     specified for the SkyAxis by a previous invocation of the
-*     astSetAxisFormat method. A suitable default format is used if
-*     necessary.
-*     - A value of zero is returned if the supplied gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *fmt;              /* Pointer to Format string */
-   double result;                /* Returned gap size */
-
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Obtain a pointer to the format string to be used. Note we use a
-   private member function to obtain this (not a method) in case
-   derived classes have extended the syntax of this string. */
-   fmt = GetAxisFormat( this_axis, status );
-
-/* Obtain the closest "nice" gap size. */
-   if ( astOK ) result = DHmsGap( fmt, astGetAxisDigits( this ), gap, ntick, status );
-
-/* If the format string starts with a percent, use the AxisGap method
-   inherited from the parent Axis class. Otherwise, use the method
-   provided by this class. */
-   if ( astOK ) {
-      if( fmt[ 0 ] == '%' ) {
-         result = (*parent_axisgap)( this_axis, gap, ntick, status );
-      } else { 
-         result = DHmsGap( fmt, astGetAxisDigits( this ), gap, ntick, status );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int AxisIn( AstAxis *this, double lo, double hi, double val, int closed, int *status ){
-/*
-*  Name:
-*     AxisIn
-
-*  Purpose:
-*     Test if an axis value lies within a given interval.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int AxisIn( AstAxis *this, double lo, double hi, double val, int closed, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astAxisIn method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function returns non-zero if a given axis values lies within a
-*     given axis interval.
-*
-*     The SkyAxis implementation of this method treats the supplied
-*     numerical values as non-cyclic (e.g. lo=10, hi = 350 implies that 
-*     val = 180 is inside and zero is outside: lo = 10, hi = 400 would imply 
-*     that all angles are inside: lo = -10, hi = 10 would imply that 180 is 
-*     outside and zero is inside). But when testing a supplied value, adding
-*     or subtracting multiples of 2.PI from the supplied value will make no 
-*     difference to whether the point is inside or outside).
-
-*  Parameters:
-*     this
-*        Pointer to the Axis.
-*     lo
-*        The lower axis limit of the interval.
-*     hi
-*        The upper axis limit of the interval.
-*     val
-*        The axis value to be tested.
-*     closed
-*        If non-zero, then the lo and hi axis values are themselves
-*        considered to be within the interval. Otherwise they are outside.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the test value is inside the interval. 
-
-*/
-
-/* For speed, omit the astOK check since no pointers are being used. */
-
-/* Deal with closed intervals. */
-   if( closed ) {
-
-/* If the supplied value is greater than the upper limit, subtract 2.PI until 
-   it is not. */
-      while( val > hi ) val -= 2*pi;
-
-/* If the value is now less than the lower limit, add 2.PI until it is not. */
-      while( val < lo ) val += 2*pi;
-
-/* The axis value is in the range if its numerical value is less than or
-   equal to the end value. */
-      return ( val <= hi );
-
-/* Now deal with open intervals. */
-   } else {
-
-/* If the supplied value is greater than or equal to the upper limit, subtract 
-   2.PI until it is not. */
-      while( val >= hi ) val -= 2*pi;
-
-/* If the value is now less than or equal to the lower limit, add 2.PI until 
-   it is not. */
-      while( val <= lo ) val += 2*pi;
-
-/* The axis value is in the range if its numerical value is less than the
-   end value. */
-      return ( val < hi );
-   }
-}
-
-static void AxisNorm( AstAxis *this_axis, double *value, int *status ) {
-/*
-*  Name:
-*     AxisNorm
-
-*  Purpose:
-*     Normalise a SkyAxis coordinate value.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void AxisNorm( AstAxis *this, double *value, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astAxisNorm method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function converts a SkyAxis coordinate value which might
-*     potentially be unsuitable for display to a user (for instance,
-*     may lie outside the expected range of values) into an acceptable
-*     alternative value suitable for display.
-*
-*     For a SkyAxis that is a longitude axis, values are wrapped into
-*     the range zero to 2*pi, while for a latitude axis, they are
-*     wrapped into the range -pi to +pi. The astAxisCentreZero method
-*     is used to determine which algorithm to apply.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     value
-*        Pointer to the coordinate value to be normalised, which will
-*        be modified in place.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   int centrezero;               /* SkyAxis range centred on zero? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* If the coordinate value is bad, then return it unchanged. Otherwise, 
-   determine if the SkyAxis range is centred on zero or PI. */
-   if ( *value != AST__BAD ) {
-      centrezero = astGetAxisCentreZero( this );
-
-/* Wrap the value into the appropriate range. */
-      if ( astOK ) *value = centrezero ? palSlaDrange( *value ) :
-                                         palSlaDranrm( *value );
-   }
-}
-
-static double AxisOffset( AstAxis *this_axis, double v1, double dist, int *status ) {
-/*
-*
-*  Name:
-*     AxisOffset
-
-*  Purpose:
-*     Add an increment onto a supplied axis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     AxisOffset( AstSkyAxis *this, double v1, double dist ) 
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the protected astAxisOffset
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function returns an axis value formed by adding a signed axis
-*     increment onto a supplied axis value.
-*
-*     For a SkyFrame, the result is normalized into the correct angular 
-*     range (+PI to -PI for latitude axes, and 0 to 2*PI for longitude axes).
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     v1
-*        The supplied axis value
-*     dist
-*        The axis increment
-
-*  Returned Value:
-*     The axis value which is the specified increment away from v1.
-
-*  Notes:
-*     - A value of AST__BAD is returned if either axis value is AST__BAD.
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   double result;                /* Returned gap size */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check both axis values are OK, and form the returned axis value. */
-   if( v1 != AST__BAD && dist != AST__BAD ) {
-      result = v1 + dist;
-      AxisNorm( this_axis, &result, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void AxisOverlay( AstAxis *template_axis, AstAxis *result, int *status ) {
-/*
-*  Name:
-*     AxisOverlay
-
-*  Purpose:
-*     Overlay the attributes of a template SkyAxis on to another Axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void AxisOverlay( AstAxis *template, AstAxis *result, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astAxisOverlay method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function overlays attributes of a SkyAxis (the "template") on to
-*     another Axis, so as to over-ride selected attributes of that second
-*     Axis. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which an Axis acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-
-*  Parameters:
-*     template
-*        Pointer to the template SkyAxis, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     result
-*        Pointer to the Axis which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-*/
-
-/* Local Variables: */
-   AstSkyAxis *template;         /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the template SkyAxis structure. */
-   template = (AstSkyAxis *) template_axis;
-
-/* Invoke the parent astAstOverlay method to overlay inherited attributes. */
-   (*parent_axisoverlay)( template_axis, result, status );
-
-/* Test if the "result" Axis is a SkyAxis (if not, it cannot acquire any
-   further attributes, so there is nothing more to do). */
-   if ( astIsASkyAxis( result ) && astOK ) {
-
-/* Overlay the Format attribute if it is set in the template. Note that we
-   use private member functions (not methods) to access the Format value, since
-   derived classes may extend the syntax of this string and we should not
-   overlay a string whose syntax cannot be interpreted by the result Axis. */
-      if ( TestAxisFormat( template_axis, status ) ) {
-         SetAxisFormat( result, GetAxisFormat( template_axis, status ), status );
-      }
-
-/* Overlay the AsTime attribute in the same way, but this time using methods
-   to access it. */
-      if ( astTestAxisAsTime( template ) ) {
-         astSetAxisAsTime( result, astGetAxisAsTime( template ) );
-      }
-
-/* Also overlay the IsLatitude attribute. */
-      if ( astTestAxisIsLatitude( template ) ) {
-         astSetAxisIsLatitude( result, astGetAxisIsLatitude( template ) );
-      }
-
-/* Also overlay the CentreZero attribute. */
-      if ( astTestAxisCentreZero( template ) ) {
-         astSetAxisCentreZero( result, astGetAxisCentreZero( template ) );
-      }
-   }
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astClearAttrib protected
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     SkyAxis, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* AsTime. */
-/* ------- */
-   if ( !strcmp( attrib, "astime" ) ) {
-      astClearAxisAsTime( this );
-
-/* IsLatitude. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "islatitude" ) ) {
-      astClearAxisIsLatitude( this );
-
-/* CentreZero. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "centrezero" ) ) {
-      astClearAxisCentreZero( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearAxisFormat( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     ClearAxisFormat
-
-*  Purpose:
-*     Clear the Format attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void ClearAxisFormat( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astClearAxisFormat method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function clears the Format attribute of a SkyAxis, as if no value
-*     had ever been set for it.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Free any memory allocated to hold the Format string and reset the string
-   pointer to NULL. */
-   this->skyformat = astFree( this->skyformat );
-}
-
-static const char *DHmsFormat( const char *fmt, int digs, double value, int *status ) {
-/*
-*  Name:
-*     DHmsFormat
-
-*  Purpose:
-*     Format a value representing degrees/hours, minutes and seconds.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *DHmsFormat( const char *fmt, int digs, double value, int *status )
-
-*  Class Membership:
-*     SkyAxis member function.
-
-*  Description:
-*     This function formats a value representing an angle in radians
-*     into a text string giving degrees/hours, minutes and seconds
-*     according to a format specifier supplied. See the "Format
-*     Specifier" section for details of the formats available.
-
-*  Parameters:
-*     fmt
-*        Pointer to a null terminated string containing the format
-*        specifier.
-*     digs 
-*        The default number of digits of precision to use. This is used
-*        if the given format specifier indicates the number of decimal
-*        places to use with the string ".*". In this case, the number of
-*        decimal places produced will be chosen so that the total number 
-*        of digits of precision is equal to "digs". 
-*     double
-*        The value to be formatted (in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null terminated character string containing the
-*     formatted value.
-
-*  Format Specifier:
-*     The format specifier supplied via the "fmt" parameter should
-*     contain zero or more of the following characters to specify the
-*     format required.  These characters may occur in any order, but
-*     the following is recommended for clarity:
-*
-*     '+'
-*        Indicates that a plus sign should be prefixed to positive
-*        values. By default, no plus sign is used.
-*     'z'
-*        Indicates that leading zeros should be prefixed to the value
-*        so that the first field is always of constant width, as would
-*        be required in a fixed-width table. (Leading zeros are always
-*        prefixed to any fields that follow.) By default, no leading
-*        zeros are added.
-*     'i'
-*        Use the standard ISO field separator (a colon) between
-*        fields. This is the default behaviour.
-*     'b'
-*        Use a blank to separate fields.
-*     'l'
-*        Use a letter ('d'/'h', 'm' or 's' as appropriate) to separate
-*        and identify fields.
-*     'g'
-*        As 'l', but escape sequences are included in the returned
-*        character string which cause the separators ('h', 'd', 'm', etc)
-*        to be drawn as small super-scripts when plotted by the astText
-*        or astGrid.
-*     'd'
-*        Express the value as an angle and include a degrees
-*        field. Expressing the value as an angle is also the default
-*        behaviour if neither 'h' nor 't' is given, and expressing it
-*        in degrees is the default if neither 'm' nor 's' is given.
-*     'h'
-*        Express the value as a time instead of an angle (where 24
-*        hours correspond to 360 degrees) and include an hours
-*        field. Expressing times in hours is the default if 't' is
-*        given without either 'm' or 's'.
-*     'm'
-*        Include a minutes field. By default this is not included.
-*     's'
-*        Include a seconds field. By default this is not
-*        included. This request is ignored if 'd' or 'h' is given,
-*        unless a minutes field is also included.
-*     't'
-*        Express the value as a time instead of an angle (where 24
-*        hours correspond to 360 degrees). This option is ignored if
-*        either 'd' or 'h' is given and is intended for use in cases
-*        where the value is to be expressed purely in minutes and/or
-*        seconds of time (no hours field). If 't' is given without
-*        'd', 'h', 'm' or 's' being present, then it is equivalent to
-*        'h'.
-*     '.'
-*        Indicates that decimal places are to be given for the final
-*        field in the formatted string (whichever field this is). The
-*        '.' should be followed immediately by a zero or positive integer
-*        which gives the number of decimal places required. The '.' may
-*        also be followed by asterisk (i.e. '.*') which causes the number 
-*        of decimal places to be chosen so that the total number of digits 
-*        is equal to the value of Digits.
-*
-*     Format specifiers are not case sensitive. If several characters
-*     make conflicting requests (e.g. if both 'i' and 'l' appear in a
-*     format specifier), then the character occurring last takes
-*     precedence, except that 'd' and 'h' always override 't'.
-
-*  Notes:
-*     - The result string may be stored in static memory. Its contents
-*     may be over-written or the returned pointer may become invalid
-*     following a further invocation of this function. A copy of the
-*     string should therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Acknowledgements:
-*     - This function is a close approximation to a Fortran 77 routine
-*     written by Clive Davenhall which implements the system of format
-*     specifiers for angles described in his document on the CAT
-*     catalogue access library (Starlink User Note 181). Some minor
-*     improvements have been made to ensure better behaviour when
-*     results are rounded to a specified number of decimal places.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   char sep;                     /* Field separator character */
-   const char *result;           /* Pointer to result string */
-   double absvalue;              /* Absolute value in radians */
-   double fract;                 /* Fractional part of final field */
-   double idh;                   /* Integer number of degrees/hours */
-   double ifract;                /* Fractional part expressed as an integer */
-   double imin;                  /* Integer number of minutes */
-   double isec;                  /* Integer number of seconds */
-   double shift;                 /* Factor for rounding fractional part */
-   double test;                  /* Test value to determine rounding */
-   int as_time;                  /* Format the value as a time? */
-   int dh;                       /* Degrees/hours field required? */
-   int lead_zero;                /* Add leading zeros? */
-   int min;                      /* Minutes field required? */
-   int ndp;                      /* Number of decimal places */
-   int plus;                     /* Add leading plus sign? */
-   int pos;                      /* Position to add next character */
-   int positive;                 /* Value is positive (or zero)? */
-   int sec;                      /* Seconds field required? */
- 
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   result = NULL;
-
-/* Check if a bad coordinate value has been given and return an
-   appropriate string. */
-   if ( value == AST__BAD ) {
-      result = "<bad>";
-
-/* Otherwise... */
-   } else {
-
-/* Parse the format specifier. */
-      ParseDHmsFormat( fmt, digs, &sep, &plus, &lead_zero, 
-                       &as_time, &dh, &min, &sec, &ndp, status );
-
-/* Break the value into fields. */
-/* ---------------------------- */
-/* Restrict the number of decimal places requested, if necessary, so
-   that under the worst case the buffer for the result string is not
-   likely to overflow. */
-      if ( astOK ) {
-         if ( ( ndp + 11 ) > AST__SKYAXIS_DHMSFORMAT_BUFF_LEN ) ndp = AST__SKYAXIS_DHMSFORMAT_BUFF_LEN - 11;
-
-/* Some operating systems have a "minus zero" value (for instance 
-   "-1.2*0" would give "-0"). This value is numerically equivalent to
-   zero, but is formated as "-0" instead of "0". The leading minus sign
-   confuses the following code, and so ensure now that all zero values
-   are the usual  "+0". */
-         if ( value == 0.0 ) value = 0.0;
-
-/* Determine if the value to be formatted is positive and obtain its
-   absolute value in radians. */
-         positive = ( value >= 0.0 );
-         absvalue = positive ? value : -value;
-
-/* Convert this to an absolute number of degrees or hours, as
-   required. */
-         fract = absvalue / ( as_time ? hr2rad : deg2rad );
-
-/* If a degrees/hours field is required, extract the whole number of
-   degrees/hours and the remaining fractional part of a
-   degree/hour. */
-         idh = 0.0;
-         if ( dh ) fract = modf( fract, &idh );
-
-/* If a minutes field is required, convert the value remaining to
-   minutes and extract the whole number of minutes and the remaining
-   fractional part of a minute. */
-         imin = 0.0;
-         if ( min ) fract = modf( fract * 60.0, &imin );
-
-/* If a seconds field is required, convert the value remaining to
-   seconds (allowing for the absence of a minutes field if necessary)
-   and extract the whole number of seconds and the remaining
-   fractional part of a second. */
-         isec = 0.0;
-         if ( sec ) {
-            if ( !min ) fract *= 60.0;
-            fract = modf( fract * 60.0, &isec );
-         }
-
-/* Round to the required number of decimal places. */
-/* ----------------------------------------------- */
-/* We must now round the fractional part (of whichever field) to the
-   required number of decimal places. Calculate the power of 10 that
-   brings the least significant digit into the units column. Scale the
-   fractional part by this factor and truncate to an integer (but
-   stored as a double to prevent possible integer overflow if the
-   number of decimal places is excessive). */
-         shift = pow( 10.0, (double) ndp );
-         ifract = floor( fract * shift );
-
-/* Next we must determine if truncation was adequate, or whether we
-   should round upwards instead. This process is more subtle than it
-   seems because if a value with a 5 as the final digit is converted
-   to radians and then back again, it may no longer end in 5 (because
-   it cannot be represented exactly in radians) and so may round
-   either up or down. If we want to recover the original (textual)
-   value, we must compare the value we are formatting not with a test
-   value whose last digit is 5, but with the closest number to this
-   that can be represented exactly in radians.
-
-   To do this, we add 0.5 to our truncated value, divide by the scale
-   factor (to get the truncated fractional part, but now with a
-   trailing digit 5 appended) and then combine this fractional part
-   with the value of all the other fields. Finally, we convert this
-   test value back into radians. */
-         test = ( 0.5 + ifract ) / shift;
-         if ( sec ) test = ( isec + test ) / 60.0;
-         if ( min ) {
-            test = ( imin + test ) / 60.0;
-         } else if ( sec ) {
-            test /= 60.0;
-         }
-         if ( dh ) test += idh;
-         test *= ( as_time ? hr2rad : deg2rad );
-
-/* We now compare the absolute value we are formatting with this test
-   value.  If it is not smaller than it, we should have rounded up
-   instead of truncating the final digit of the fractional part, so
-   increment the integer representation of the truncated fractional
-   part by 1.0 to compensate. */
-         if ( absvalue >= test ) ifract += 1.0;
-
-/* Divide by the scale factor to obtain the correctly rounded
-   fractional part.  Then check if this fractional part is 1.0. If so,
-   rounding has caused it to overflow into the units column of the
-   final field, so clear the fractional part. */
-         fract = ( ifract / shift );
-         if ( fract >= 1.0 ) {
-            ifract = 0.0;
-
-/* If a seconds field is present, propagate the overflow up through
-   each field in turn, but omitting fields which are not required. Be
-   careful about possible rounding errors when comparing integer
-   values stored as double. */
-            if ( sec ) {
-               isec += 1.0;
-               if ( ( floor( isec + 0.5 ) > 59.5 ) && min ) {
-                  isec = 0.0;
-                  imin += 1.0;
-                  if ( ( floor( imin + 0.5 ) > 59.5 ) && dh ) {
-                     imin = 0.0;
-                     idh += 1.0;
-                  }
-               }
-
-/* Omit the seconds field if it is not present. */
-            } else if ( min ) {
-               imin += 1.0;
-               if ( ( floor( imin + 0.5 ) > 59.5 ) && dh ) {
-                  imin = 0.0;
-                  idh += 1.0;
-               }
-
-/* If only the degree/hour field is present, simply increment it. */
-            } else {
-               idh += 1.0;
-            }
-         }
-
-/* Construct the result string. */
-/* ---------------------------- */
-/* We now have the value of each field and the information about how
-   they are to be formatted, so we can combine them into the required
-   string. */
-
-/* If each field is either not required or equal to zero, disregard
-   any sign. */
-         if ( !positive && ( !dh || floor( idh + 0.5 ) < 0.5 ) &&
-                           ( !min || floor( imin + 0.5 ) < 0.5 ) &&
-                           ( !sec || floor( isec + 0.5 ) < 0.5 ) &&
-                           ( floor( ifract + 0.5 ) < 0.5 ) ) {
-            positive = 1;
-         }
-
-/* Use "pos" to identify where the next character should be
-   added. Insert a leading '+' or '-' sign if required. */
-         pos = 0;
-         if ( !positive ) {
-            dhmsformat_buff[ pos++ ] = '-';
-         } else if ( plus ) {
-            dhmsformat_buff[ pos++ ] = '+';
-         }
-
-/* Use "sprintf" to format the degrees/hours field, if required. Set
-   the minimum field width according to whether padding with leading
-   zeros is required and whether the value represents hours (2 digits)
-   or degrees (3 digits). */
-         if ( dh ) {
-            pos += sprintf( dhmsformat_buff + pos, "%0*.0f",
-                            lead_zero ? ( as_time ? 2 : 3 ) : 1, idh );
-
-/* If letters are being used as field separators, and there are more
-   fields to follow, append "d" or "h" as necessary. */
-            if ( min || sec ) {
-               if ( sep == 'l' ) {
-                  dhmsformat_buff[ pos++ ] = ( as_time ? 'h' : 'd' );
-               } else if( sep == 'g' ) {
-                  pos += sprintf( dhmsformat_buff + pos, "%s", as_time ? gh_delim : gd_delim );
-               } 
-            }
-         }
-
-/* If a minutes field is required, first add an appropriate non-letter
-   field separator if needed. */
-         if ( min ) {
-            if ( ( sep != 'l' && sep != 'g' ) && dh ) dhmsformat_buff[ pos++ ] = sep;
-
-/* Then format the minutes field with a leading zero to make it two
-   digits if necessary. */
-            pos += sprintf( dhmsformat_buff + pos, "%0*.0f", ( dh || lead_zero ) ? 2 : 1,
-                            imin );
-
-/* If letters are being used as field separators, and there is another
-   field to follow, append the separator. */
-            if ( sec ) {
-               if ( sep == 'l' ) {
-                  dhmsformat_buff[ pos++ ] = 'm';
-               } else if( sep == 'g' ) {
-                  pos += sprintf( dhmsformat_buff + pos, "%s", as_time ? gm_delim : gam_delim );
-               }
-            }
-         }
-
-/* Similarly, if a seconds field is required, first add an appropriate
-   non-letter field separator if needed. */
-         if ( sec ) {
-            if ( ( sep != 'l' && sep != 'g' ) && ( dh || min ) ) dhmsformat_buff[ pos++ ] = sep;
-
-/* Then format the seconds field with a leading zero to make it two
-   digits if necessary. */
-            pos += sprintf( dhmsformat_buff + pos, "%0*.0f",
-                            ( dh || min || lead_zero ) ? 2 : 1, isec );
-         }
-
-/* If decimal places are needed, add a decimal point followed by the
-   integer representation of the correctly rounded fractional part,
-   padded with leading zeros if necessary. */
-         if ( ndp > 0 ) {
-            dhmsformat_buff[ pos++ ] = '.';
-            pos += sprintf( dhmsformat_buff + pos, "%0*.0f", ndp, ifract );
-         }
-
-/* If letters are being used as separators, append the appropriate one
-   to the final field. */
-         if ( sep == 'l' ) {
-            dhmsformat_buff[ pos++ ] = ( sec ? 's' : ( min ? 'm' :
-                                                  ( as_time ? 'h' : 'd' ) ) );
-         } else if ( sep == 'g' ) {
-            pos += sprintf( dhmsformat_buff + pos, "%s", 
-                as_time ? ( sec ? gs_delim : ( min ? gm_delim : gh_delim ) ) : 
-                          ( sec ? gas_delim : ( min ? gam_delim : gd_delim ) ) );
-         }
-
-/* Terminate the result string and return a pointer to it. */
-         dhmsformat_buff[ pos ] = '\0';
-         result = dhmsformat_buff;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double DHmsGap( const char *fmt, int digs, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     DHmsGap
-
-*  Purpose:
-*     Find a "nice" gap for formatted SkyAxis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     double DHmsGap( const char *fmt, int digs, double gap, int *ntick, int *status )
-
-*  Class Membership:
-*     SkyAxis member function.
-
-*  Description:
-*     This function returns a gap size in radians which produces a
-*     nicely spaced series of formatted SkyAxis values, the returned
-*     gap size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specifier which will be used to format the SkyAxis
-*        values.
-*     digs 
-*        The default number of digits of precision to use. This is used
-*        if the given format specifier indicates the number of decimal
-*        places to use with the string ".*". In this case, the number of
-*        decimal places produced will be chosen so that the total number 
-*        of digits of precision is equal to "digs". 
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is
-*     negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50              /* Length of character buffer */
-
-/* Local Variables: */
-   char buff[ BUFF_LEN + 1 ];    /* Buffer for formatted scaled "nice" value */
-   char sep;                     /* Field separator character */
-   const double *table;          /* Pointer to nice gap table */
-   const int *nticks;            /* Pointer to number of subdivisions table */
-   double field_value[ 3 ];      /* Formatted field values in radians */
-   double scale;                 /* Power of ten scaling factor */
-   double scaled_table_value;    /* Scaled "nice" value to test against */
-   int as_time;                  /* Format the value as a time? */
-   int decimal;                  /* Use nice decimal gap value? */
-   int dh;                       /* Degrees/hours field required? */
-   int field;                    /* ID of most significant formatted field */
-   int i;                        /* Look-up-table index */
-   int iter;                     /* Iteration count */
-   int lead_zero;                /* Add leading zeros? */
-   int min;                      /* Minutes field required? */
-   int ndp;                      /* Number of decimal places */
-   int plus;                     /* Add leading plus sign? */
-   int positive;                 /* Value is positive (or zero)? */
-   int sec;                      /* Seconds field required? */
-
-/* Local Data: */
-/* ----------- */
-/* Table of nice decimal gaps. */
-   const double dec_table[] = { 1.0, 2.0, 5.0, 5.0, 10.0, -1.0 };
-   const int dec_nticks[] =   { 5,   4,   5,   5,   5 };
-
-/* Table of nice degrees gaps. */
-   const double deg_table[] =
-      { 1.0, 2.0, 5.0, 10.0, 30.0, 45.0, 60.0, 90.0, 180.0, 360.0, -1.0 };
-   const int deg_nticks[] =
-      { 4,   4,   5,   5,    6,    3,    6,    3,    3,     4 };
-
-/* Table of nice hours gaps. */
-   const double hr_table[] = { 1.0, 2.0, 3.0, 6.0, 12.0, 24.0, -1.0 };
-   const int hr_nticks[] =   { 4,   4,   6,   6,   4,    4 };
-
-/* Table of nice minutes or seconds gaps. */
-   const double minsec_table[] = { 1.0, 2.0, 5.0, 10.0, 30.0, 60.0, -1.0 };
-   const int minsec_nticks[] =   { 4,   4,   5,   5,    6,    4 };
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Check that the supplied gap size is not zero. */
-   if ( gap != 0.0 ) {
-   
-/* Parse the format specifier. */
-      ParseDHmsFormat( fmt, digs, &sep, &plus, &lead_zero, &as_time, &dh, &min,
-                       &sec, &ndp, status );
-
-/* If OK, calculate the value of each formatted field in radians. */
-      if ( astOK ) {
-         field_value[ 0 ] = ( as_time ? hr2rad : deg2rad );
-         field_value[ 1 ] = field_value[ 0 ] / 60.0;
-         field_value[ 2 ] = field_value[ 0 ] / 3600.0;
-
-/* Determine if the suggested gap size is positive and obtain its
-   absolute value. */
-         positive = ( gap >= 0.0 );
-         if ( !positive ) gap = -gap;
-
-/* Perform two iterations to determine the optimum gap value. This is
-   because the method of choosing the gap value depends on the initial
-   value.  If a nice decimal gap is chosen on the first iteration,
-   this may round the suggested gap value downwards, making it
-   preferable to choose the gap value using a different method on the
-   second iteration. */
-         for ( iter = 0; iter < 2; iter++ ) {
-
-/* Decide which is the most significant field that the suggested gap
-   value will occupy when formatted. Also decide whether to use a
-   special "nice" gap value specific to that field, or simply to use a
-   generic nice decimal gap value. Perform all tests on the gap size
-   in radians, so as to avoid any rounding problems from conversion
-   into degrees/hours, minutes or seconds. */
-            decimal = 0;
-
-/* Suggested values exceeding one degree/hour. */
-/* ------------------------------------------- */
-            if ( gap > field_value[ 0 ] ) {
-
-/* If a degree/hour field is present, use a special gap value, unless
-   the suggested value exceeds the normal range of this field (in
-   which case use a decimal gap). */
-               if ( dh ) {
-                  field = 1;
-                  decimal = ( gap > ( field_value[ 0 ] *
-                                      ( as_time ? 24.0 : 360.0 ) ) );
-
-/* If the most significant field is not degrees/hours, then its normal
-   range will be exceeded, so use a decimal gap. */
-               } else if ( min ) {
-                  field = 2;
-                  decimal = 1;
-               } else {
-                  field = 3;
-                  decimal = 1;
-               }
-
-/* Suggested values exceeding one minute. */
-/* -------------------------------------- */
-            } else if ( gap > field_value[ 1 ] ) {
-
-/* If a minutes field is present, the suggested value will lie within
-   its normal range, so use a special gap value. */
-               if ( min ) {
-                  field = 2;
-
-/* Otherwise, if the most significant field is seconds, its normal
-   range will be exceeded, so use a decimal gap value. */
-               } else if ( sec ) {
-                  field = 3;
-                  decimal = 1;
-
-/* If only a degrees/hours field is present, then only digits after
-   the decimal point can be affected, so use a decimal gap value. */
-               } else {
-                  field = 1;
-                  decimal = 1;
-               }
-
-/* Suggested values exceeding one second. */
-/* -------------------------------------- */
-            } else if ( gap > field_value[ 2 ] ) {
-
-/* If a seconds field is present, the suggested value will lie within
-   its normal range, so use a special gap value. */
-               if ( sec ) {
-                  field = 3;
-
-/* If the least significant field is degrees/hours or minutes, then
-   only digits after the decimal point can be affected, so use a
-   decimal gap value. */
-               } else if ( min ) {
-                  field = 2;
-                  decimal = 1;
-               } else {
-                  field = 1;
-                  decimal = 1;
-               }
-
-/* Suggested values less than one second. */
-/* -------------------------------------- */
-            } else {
-
-/* Only digits after the decimal point can be affected, so decide
-   which is the least significant field present and use a decimal
-   gap. */
-               if ( sec ) {
-                  field = 3;
-               } else if ( min ) {
-                  field = 2;
-               } else {
-                  field = 1;
-               }
-               decimal = 1;
-            }
-
-/* If a decimal gap value is required, select the appropriate table of
-   gap values and numbers of subdivisions. */
-            if ( decimal ) {
-               table = dec_table;
-               nticks = dec_nticks;
-
-/* Find a power of ten divisor which scales the suggested value (when
-   formatted) into the range 1.0 to 10.0. */
-               scale = pow( 10.0,
-                            floor( log10( gap / field_value[ field - 1 ] ) ) );
-
-/* Look the scaled value up in the table, comparing values in radians
-   to avoid rounding problems due to conversion to/from
-   degrees/radians, etc. */
-               for ( i = 0; table[ i + 1 ] > 0.0; i++ ) {
-
-/* We must be careful about rounding errors here. If, for example, we
-   read in a value of 0.15 as the suggested gap value, the scaled
-   "nice" value we would be comparing it with would be 0.1 times the
-   values in the nice values table. The relevant value in this table
-   is 1.5 (i.e. 0.5 * ( 1.0 + 2.0 ) ), so we would compute 0.1 * 1.5
-   as the test value. However, this is probably not equal (to machine
-   precision) to the number that results when a formatted value of
-   0.15 is read, because 0.1 isn't exactly representable. Since it is
-   the formatted appearance of the numbers which matters, we want a
-   new scaled nice table containing the numbers that result from
-   reading the formatted values 0.1, 0.2, etc. To achieve this effect,
-   we format the scaled table value using the default floating point
-   precision (which rounds to a relatively small number of decimal
-   digits) and then read the value back again. */
-                  (void ) sprintf( buff, "%g", scale *
-                                   0.5 * ( table[ i ] + table[ i + 1 ] ) );
-                  (void) astSscanf( buff, "%lf", &scaled_table_value );
-
-/* Now test the suggested gap value against the scaled table value. */
-                  if ( gap < ( field_value[ field - 1 ] *
-                               scaled_table_value ) ) break;
-               }
-
-/* Return the nice gap value and the number of subdivisions. */
-               gap = scale * field_value[ field - 1 ] * table[ i ];
-               if ( ntick ) *ntick = nticks[ i ];
-
-/* If a special gap value appropriate to the field is required, then
-   select the table of gap values and numbers of subdivisions
-   according to which field we are considering and whether it contains
-   degrees or hours. */
-            } else {
-               if ( field == 1 ) {
-                  if ( as_time ) {
-                     table = hr_table;
-                     nticks = hr_nticks;
-                  } else {
-                     table = deg_table;
-                     nticks = deg_nticks;
-                  }
-               } else {
-                  table = minsec_table;
-                  nticks = minsec_nticks;
-               }
-
-/* Search the table for a suitable gap. We do not need to format and
-   unformat the test value here (as we did above) because the table
-   values are being used literally and not being scaled. */
-               for ( i = 0; table[ i + 1 ] > 0.0; i++ ) {
-                  if ( gap < ( field_value[ field - 1 ] *
-                               0.5 * ( table[ i ] + table[ i + 1 ] ) ) ) break;
-               }
-
-/* Return the nice gap value and the number of subdivisions. */
-               gap = field_value[ field - 1 ] * table[ i ];
-               if ( ntick ) *ntick = nticks[ i ];
-            }
-         }
-
-/* After iterations are complete, restore the original sign. */
-         if ( !positive ) gap = -gap;
-      }
-   }
-   
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) gap = 0.0;
-
-/* Return the result. */
-   return gap;
-
-/* Undefine macros local to this function */
-#undef BUFF_LEN
-}
-
-static const char *DHmsUnit( const char *fmt, int digs, int output, int *status ) {
-/*
-*  Name:
-*     DHmsUnit
-
-*  Purpose:
-*     Generate a unit string to describe a formatted angle or time.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *DHmsUnit( const char *fmt, int digs, int output, int *status )
-
-*  Class Membership:
-*     SkyAxis member function.
-
-*  Description:
-*     This function generates a string that may be used to describe
-*     either (a) the units of an angle or time that has been formatted
-*     for output using the DHmsFormat function, or (b) a suitable
-*     format to be used for an angle or time that is to be supplied as
-*     an input coordinate value.
-
-*  Parameters:
-*     fmt
-*        Pointer to a null terminated string containing the format
-*        specifier used to format coordinate values. For details of
-*        the syntax of this string, see the DHmsFormat function.
-*     digs 
-*        The default number of digits of precision to use. This is used
-*        if the given format specifier indicates the number of decimal
-*        places to use with the string ".*". In this case, the number of
-*        decimal places produced will be chosen so that the total number 
-*        of digits of precision is equal to "digs". 
-*     output
-*        If non-zero, the returned string will be in a form suitable
-*        for describing the units/format of output produced using
-*        DHmsFormat.
-*
-*        If zero, the returned string will be in a form suitable for
-*        describing a suggested input format, which will subsequently
-*        be read using AxisUnformat.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null terminated string containing the unit description.
-
-*  Notes:
-*     - The result string may be stored in static memory. Its contents
-*     may be over-written or the returned pointer may become invalid
-*     following a further invocation of this function. A copy of the
-*     string should therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   char dpchar;                  /* Character to indicate decimal places */
-   char sep;                     /* Field separator character */
-   const char *result;           /* Pointer to result string */
-   const int maxdp = 6;          /* Maximum number of decimal places to show */
-   int as_time;                  /* Value formatted as a time? */
-   int dh;                       /* Degrees/hours field required? */
-   int dp;                       /* Loop counter for decimal places */
-   int lead_zero;                /* Add leading zeros? */
-   int min;                      /* Minutes field required? */
-   int ndp;                      /* Number of decimal places */
-   int plus;                     /* Leading plus sign required? */
-   int pos;                      /* Position to add next character */
-   int sec;                      /* Seconds field required? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Parse the format specifier. */
-   ParseDHmsFormat( fmt, digs, &sep, &plus, &lead_zero, &as_time, &dh, &min, 
-                    &sec, &ndp, status );
-
-/* If the units string is required to describe formatted output and
-   the field separators are letters (e.g. giving "01h23m45s" or
-   "012d34m56s"), then the units will already be clear so return a
-   pointer to an empty units string. */
-   if ( astOK ) {
-      if ( output && ( sep == 'l' || sep == 'g' ) ) {
-         result = "";
-
-/* Otherwise, if the units string is required to describe formatted
-   output and there is only one field present, then select an
-   appropriate string. */
-      } else if ( output && dh && !min && !sec ) {
-         result = as_time ? "hours" : "degrees";
-
-      } else if ( output && !dh && min && !sec ) {
-         result = as_time ? "minutes of time" : "arcminutes";
-
-      } else if ( output && !dh && !min && sec ) {
-         result = as_time ? "seconds of time" : "arcseconds";
-
-/* If there is more than one field present, or we want to describe how
-   to supply formatted input, then we will generate a units string of
-   the general form "ddd:mm:ss.sss" or "hh:mm:ss.s" or
-   similar. Initialise the output character count and the character to
-   be used to represent decimal places. */
-      } else {
-         pos = 0;
-         dpchar = 'd';
-
-/* Decide which field separator to use (use a space if letters were
-   requested since it is easier to input). */
-         if ( sep == 'l' || sep == 'g' ) sep = ' ';
-
-/* Start with the "ddd" or "hh" field, if required, and update the
-   decimal places character appropriately. */
-         if ( dh ) {
-            pos += sprintf( dhmsunit_buff, "%s", as_time ? "hh" : "ddd" );
-            dpchar = as_time ? 'h' : 'd';
-         }
-
-/* If a minutes field is present, add a separator if necessary and
-   "mm" and update the decimal places character. */
-         if ( min ) {
-            if ( dh ) dhmsunit_buff[ pos++ ] = sep;
-            dhmsunit_buff[ pos++ ] = 'm';
-            dhmsunit_buff[ pos++ ] = 'm';
-            dpchar = 'm';
-         }
-
-/* Repeat this process for the seconds field, if present. */
-         if ( sec ) {
-            if ( dh || min ) dhmsunit_buff[ pos++ ] = sep;
-            dhmsunit_buff[ pos++ ] = 's';
-            dhmsunit_buff[ pos++ ] = 's';
-            dpchar = 's';
-         }
-
-/* If decimal places are present, add a decimal point and then loop to
-   add further instances of the decimal places character to represent
-   the digits that follow. */
-         if ( ndp > 0 ) {
-            dhmsunit_buff[ pos++ ] = '.';
-            for ( dp = 0; dp < ndp; dp++ ) {
-               if ( dp < maxdp ) {
-                  dhmsunit_buff[ pos++ ] = dpchar;
-
-/* After showing the maximum number of decimal places, simply add an
-   ellipsis and quit (otherwise the result gets boring to look at). */
-               } else {
-                  dhmsunit_buff[ pos - 1 ] = '.';
-                  dhmsunit_buff[ pos - 2 ] = '.';
-                  dhmsunit_buff[ pos - 3 ] = '.';
-                  break;
-               }
-	    }
-         }
-
-/* Terminate the result string and return a pointer to it. */
-         dhmsunit_buff[ pos ] = '\0';
-         result = dhmsunit_buff;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SkyAxis,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;         /* Pointer to SkyAxis structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astTSizeOf( this->skyformat );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the protected astGetAttrib
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a SkyAxis, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the SkyAxis, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the SkyAxis. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *result;           /* Pointer value to return */
-   int as_time;                  /* AsTime attribute value */
-   int centrezero;               /* CentreZero attribute value */
-   int is_latitude;              /* IsLatitude attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* AsTime. */
-/* ------- */
-   if ( !strcmp( attrib, "astime" ) ) {
-      as_time = astGetAxisAsTime( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", as_time );
-         result = getattrib_buff;
-      }
-
-/* IsLatitude. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "islatitude" ) ) {
-      is_latitude = astGetAxisIsLatitude( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", is_latitude );
-         result = getattrib_buff;
-      }
-
-/* CentreZero. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "centrezero" ) ) {
-      centrezero= astGetAxisCentreZero( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", centrezero );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetAxisBottom( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisBottom
-
-*  Purpose:
-*     Obtain the value of the Bottom attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     double GetAxisBottom( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisBottom method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function returns a value for the Bottom attribute of a SkyAxis.
-*     This attribute indicates the lowest legal value for the axis.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The atribute value. A suitable default value is supplied if necessary.
-
-*  Notes:
-*     -  A value of -DBL_MAX will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   double result;                /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return -DBL_MAX;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Check if a value has been set for the Bottom attribute. If so, obtain
-   this value. */
-   if ( astTestAxisBottom( this ) ) {
-      result = (*parent_getaxisbottom)( this_axis, status );
-
-/* Otherwise, supply a default of -pi/2 for latitude axes, and -DBL_MAX
-   for longitude axes. */
-   } else {
-      result = astGetAxisIsLatitude( this ) ? -piby2 : -DBL_MAX; 
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -DBL_MAX;
-
-/* Return the result. */
-   return result;
-}
-
-static double GetAxisTop( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisTop
-
-*  Purpose:
-*     Obtain the value of the Top attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     double GetAxisTop( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisTop method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function returns a value for the Top attribute of a SkyAxis.
-*     This attribute indicates the highest legal value for the axis.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The atribute value. A suitable default value is supplied if necessary.
-
-*  Notes:
-*     -  A value of DBL_MAX will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   double result;                /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return DBL_MAX;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Check if a value has been set for the Top attribute. If so, obtain
-   this value. */
-   if ( astTestAxisTop( this ) ) {
-      result = (*parent_getaxistop)( this_axis, status );
-
-/* Otherwise, supply a default of pi/2 for latitude axes, and DBL_MAX
-   for longitude axes. */
-   } else {
-      result = astGetAxisIsLatitude( this ) ? piby2 : DBL_MAX;
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = DBL_MAX;
-
-/* Return the result. */
-   return result;
-}
- 
-static int GetAxisDirection( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisDirection
-
-*  Purpose:
-*     Obtain the value of the Direction attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int GetAxisDirection( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisDirection method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function returns a value for the Direction attribute of a SkyAxis.
-*     This attribute indicates in which direction the SkyAxis's values should
-*     increase when represented on a graph (1 for the conventional direction,
-*     0 for reverse direction).
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero or one, according to the attribute setting. A suitable default
-*     value is supplied if necessary.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Check if a value has been set for the Direction attribute. If so, obtain
-   this value. */
-   if ( astTestAxisDirection( this ) ) {
-      result = (*parent_getaxisdirection)( this_axis, status );
-
-/* Otherwise, supply a default of 1 unless the SkyAxis values are being
-   formatted as times (instead of angles) by default. */
-   } else {
-      result = !astGetAxisAsTime( this );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAxisFormat( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisFormat
-
-*  Purpose:
-*     Obtain a pointer to the Format attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *GetAxisFormat( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisFormat method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function returns a pointer to the Format attribute associated with
-*     a SkyAxis and provides a suitable default if necessary. This string
-*     attribute contains the format specifier that will be interpreted by the
-*     astAxisFormat method when formatting a value for the SkyAxis. The default
-*     Format may depend on other attribute settings, in particular on the
-*     Digits and AsTime attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Format string (null terminated).
-
-*  Notes:
-*     -  The pointer returned may point at memory allocated within the SkyAxis
-*     object, or at static memory. The contents of the string may be
-*     over-written or the pointer may become invalid following a further
-*     invocation of the same function, deletion of the SkyAxis, or assignment
-*     of a new Format value. A copy of the string should therefore be made if
-*     necessary.
-*     -  This function will return a NULL pointer if it is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *result;           /* Pointer to result string */
-   int as_time;                  /* Format SkyAxis values as times? */
-   int digits;                   /* Number of digits of precision */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_axis);
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Obtain a pointer to the Format string stored in the SkyAxis structure. Note
-   we do not use a method to obtain this, because we want a string with a
-   syntax appropriate to this class, and derived classes may have extended the
-   syntax. */
-   result = this->skyformat;
-
-/* If no Format string has been set, we must generate a default one. Determine
-   how many digits of precision are to be used by default and whether the
-   SkyAxis values are to be formatted as times (instead of angles). */
-   if ( !result ) {
-      digits = astGetAxisDigits( this );
-      as_time = astGetAxisAsTime( this );
-      if ( astOK ) {
-
-/* If formatting values as times, use the number of digits to select an
-   appropriate Format string and obtain a pointer to it. */
-         if ( as_time ) {
-            if ( digits <= 2 ) {
-               result = "h";
-	    } else if ( digits == 3 ) {
-               result = "hm";
-	    } else if ( digits == 4 ) {
-               result = "hm";
-	    } else if ( digits == 5 ) {
-               result = "hms";
-	    } else if ( digits == 6 ) {
-               result = "hms";
-
-/* Construct the Format string in a buffer if necessary. */
-            } else {
-               (void) sprintf( getaxisformat_buff, "hms.%d", digits - 6 );
-               result = getaxisformat_buff;
-   	    }
-
-/* Similarly, select a Format for expressing an angle if necessary. */
-         } else {
-            if ( digits <= 3 ) {
-               result = "d";
-   	    } else if ( digits == 4 ) {
-               result = "dm";
-   	    } else if ( digits == 5 ) {
-               result = "dm";
-   	    } else if ( digits == 6 ) {
-               result = "dms";
-   	    } else if ( digits == 7 ) {
-               result = "dms";
-            } else {
-               (void) sprintf( getaxisformat_buff, "dms.%d", digits - 7 );
-               result = getaxisformat_buff;
-   	    }
-	 }
-      }
-   }
-
-/* Return the result. */
-   return result;   
-}
-
-static const char *GetAxisLabel( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisLabel
-
-*  Purpose:
-*     Obtain a pointer to the Label attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *GetAxisLabel( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisLabel method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function returns a pointer to the Label attribute associated with
-*     a SkyAxis and provides a suitable default if necessary. This string
-*     attribute specifies the label to be attached to the SkyAxis when it is
-*     represented in (e.g.) a graph. It is intended purely for interpretation
-*     by human readers and not by software.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Label string (null terminated).
-
-*  Notes:
-*     -  The pointer returned may point at memory allocated within the SkyAxis
-*     object, or at static memory. The contents of the string may be
-*     over-written or the pointer may become invalid following a further
-*     invocation of the same function, deletion of the SkyAxis, or assignment
-*     of a new Label value. A copy of the string should therefore be made if
-*     necessary.
-*     -  This function will return a NULL pointer if it is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *result;           /* Pointer value to be returned */
-   int as_time;                  /* SkyAxis values formatted as times? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Test if the Label attribute is set. If so, use the parent astGetAxisLabel
-   method to get a pointer to it. */
-   if ( astTestAxisLabel( this ) ) {
-      result = (*parent_getaxislabel)( this_axis, status );
-
-/* Otherwise, return a pointer to a suitable default string, using the result
-   of the astGetAxisAsTime method to determine whether a string describing
-   time or angle is more appropriate. */
-   } else {
-      as_time = astGetAxisAsTime( this );
-      if ( !astTestAxisIsLatitude( this ) ) {
-         result = as_time ? "Angle on sky expressed as time" :
-                            "Angle on sky";
-      } else if ( astGetAxisIsLatitude( this ) ) {
-         result = as_time ? "Sky latitude expressed as time" :
-                            "Sky latitude";
-      } else {
-         result = as_time ? "Sky longitude expressed as time" :
-                            "Sky longitude";
-      }
-   }
-
-/* If an error occurred, clear the result pointer. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAxisSymbol( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisSymbol
-
-*  Purpose:
-*     Obtain a pointer to the Symbol attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *GetAxisSymbol( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisSymbol method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function returns a pointer to the Symbol attribute associated with
-*     a SkyAxis and provides a suitable default if necessary. This string
-*     attribute specifies the symbol to be used to represent coordinate values
-*     for the SkyAxis in "short form", such as in algebraic expressions where a
-*     full description would be inappropriate.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Symbol string (null terminated).
-
-*  Notes:
-*     -  The pointer returned may point at memory allocated within the SkyAxis
-*     object, or at static memory. The contents of the string may be
-*     over-written or the pointer may become invalid following a further
-*     invocation of the same function, deletion of the SkyAxis, or assignment
-*     of a new Symbol value. A copy of the string should therefore be made if
-*     necessary.
-*     -  This function will return a NULL pointer if it is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Test if the Symbol attribute is set. If so, use the parent astGetAxisSymbol
-   method to get a pointer to it. */
-   if ( astTestAxisSymbol( this ) ) {
-      result = (*parent_getaxissymbol)( this_axis, status );
-
-/* If a value has been set for the IsLatitude attribute, use it to decide
-   whether to use "delta" (for latitude) or "alpha" (for longitude). */
-   } else if ( astTestAxisIsLatitude( this ) ) {
-      result = astGetAxisIsLatitude( this ) ? "delta" : "alpha";
-
-/* Otherwise, use the AsTime attribute to decide whether the SkyAxis is
-   likely to be a longitude or latitude axis (the former usually having values
-   formatted as times). */
-   } else {
-      result = astGetAxisAsTime( this ) ? "alpha" : "delta";
-   }
-
-/* If an error occurred, clear the result pointer. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAxisUnit( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     GetAxisUnit
-
-*  Purpose:
-*     Obtain a pointer to the Unit attribute for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     const char *GetAxisUnit( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astGetAxisUnit method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function returns a pointer to the Unit attribute associated with
-*     a SkyAxis and provides a suitable default if necessary. This string
-*     attribute describes the unit used to represent formatted coordinate
-*     values on the SkyAxis. 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Unit string (null terminated).
-
-*  Notes:
-*     -  The pointer returned may point at memory allocated within the SkyAxis
-*     object, or at static memory. The contents of the string may be
-*     over-written or the pointer may become invalid following a further
-*     invocation of the same function, deletion of the SkyAxis, or assignment
-*     of a new Unit value. A copy of the string should therefore be made if
-*     necessary.
-*     -  This function will return a NULL pointer if it is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *fmt;              /* Pointer to format specifier */
-   const char *result;           /* Pointer to result string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise */
-   result = NULL;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Test if the Unit attribute is set. If so, invoke the parent astGetAxisUnit
-   method to obtain a pointer to it. */
-   if ( astTestAxisUnit( this ) ) {
-      result = (*parent_getaxisunit)( this_axis, status );
-
-/* If we must provide a default, obtain a pointer to the format specifier used
-   to format SkyAxis values. Use a private member function (not a method) to
-   access this, in case derived classes have extended the syntax of this
-   string. */
-   } else {
-      fmt = GetAxisFormat( this_axis, status );
-
-/* If the format string starts with a percent, use "rad" as the default units 
-   string. Otherwise, use the format specifier to generate a matching
-   default Unit string and obtain a pointer to it. */
-      if ( astOK ) {
-         if( fmt[ 0 ] == '%' ) {
-            result = "rad";
-         } else { 
-            result = DHmsUnit( fmt, astGetAxisDigits( this_axis ), 1, status );
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitSkyAxisVtab_(  AstSkyAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSkyAxisVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SkyAxis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void astInitSkyAxisVtab( AstSkyAxisVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SkyAxis vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SkyAxis class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstAxisVtab *axis;            /* Pointer to Axis component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   int stat;                     /* SLALIB status */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitAxisVtab( (AstAxisVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASkyAxis) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstAxisVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearAxisAsTime = ClearAxisAsTime;
-   vtab->ClearAxisIsLatitude = ClearAxisIsLatitude;
-   vtab->ClearAxisCentreZero = ClearAxisCentreZero;
-   vtab->GetAxisAsTime = GetAxisAsTime;
-   vtab->GetAxisIsLatitude = GetAxisIsLatitude;
-   vtab->GetAxisCentreZero = GetAxisCentreZero;
-   vtab->SetAxisAsTime = SetAxisAsTime;
-   vtab->SetAxisIsLatitude = SetAxisIsLatitude;
-   vtab->SetAxisCentreZero = SetAxisCentreZero;
-   vtab->TestAxisAsTime = TestAxisAsTime;
-   vtab->TestAxisIsLatitude = TestAxisIsLatitude;
-   vtab->TestAxisCentreZero = TestAxisCentreZero;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   axis = (AstAxisVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_axisoverlay = axis->AxisOverlay;
-   axis->AxisOverlay = AxisOverlay;
-   parent_getaxisdirection = axis->GetAxisDirection;
-   axis->GetAxisDirection = GetAxisDirection;
-   parent_getaxislabel = axis->GetAxisLabel;
-   axis->GetAxisLabel = GetAxisLabel;
-   parent_getaxissymbol = axis->GetAxisSymbol;
-   axis->GetAxisSymbol = GetAxisSymbol;
-   parent_getaxisunit = axis->GetAxisUnit;
-   axis->GetAxisUnit = GetAxisUnit;
-
-   parent_getaxistop = axis->GetAxisTop;
-   axis->GetAxisTop = GetAxisTop;
-
-   parent_getaxisbottom = axis->GetAxisBottom;
-   axis->GetAxisBottom = GetAxisBottom;
-
-   parent_axisformat = axis->AxisFormat;
-   axis->AxisFormat = AxisFormat;
-
-   parent_axisunformat = axis->AxisUnformat;
-   axis->AxisUnformat = AxisUnformat;
-
-   parent_axisgap = axis->AxisGap;
-   axis->AxisGap = AxisGap;
-
-   parent_axisfields = axis->AxisFields;
-   axis->AxisFields = AxisFields;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   axis->AxisAbbrev = AxisAbbrev;
-   axis->AxisIn = AxisIn;
-   axis->AxisDistance = AxisDistance;
-   axis->AxisOffset = AxisOffset;
-   axis->AxisNorm = AxisNorm;
-   axis->ClearAxisFormat = ClearAxisFormat;
-   axis->GetAxisFormat = GetAxisFormat;
-   axis->SetAxisFormat = SetAxisFormat;
-   axis->TestAxisFormat = TestAxisFormat;
-
-/* Declare the destructor, copy constructor and dump function. */
-   astSetDelete( vtab, Delete );
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "SkyAxis", "Celestial coordinate axis" );
-
-/* Initialize constants for converting between hours, degrees and radians. */
-   LOCK_MUTEX2
-   palSlaDtf2r( 1, 0, 0.0, &hr2rad, &stat );
-   palSlaDaf2r( 1, 0, 0.0, &deg2rad, &stat );
-   palSlaDaf2r( 180, 0, 0.0, &pi, &stat );
-   piby2 = 0.5*pi;
-   UNLOCK_MUTEX2
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void ParseDHmsFormat( const char *fmt, int digs, char *sep, int *plus,
-                             int *lead_zero, int *as_time, int *dh, int *min,
-                             int *sec, int *ndp, int *status ) {
-/*
-*  Name:
-*     ParseDHmsFormat
-
-*  Purpose:
-*     Parse a format specifier for degrees/hours, minutes and seconds.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void ParseDHmsFormat( const char *fmt, int digs, char *sep, int *plus,
-*                           int *lead_zero, int *as_time, int *dh, int *min,
-*                           int *sec, int *ndp, int *status )
-
-*  Class Membership:
-*     SkyAxis member function.
-
-*  Description:
-*     This function parses a SkyAxis format specifier which describes
-*     how to convert an angle in radians into a text string with
-*     separate fields for degrees/hours, minutes and seconds.
-
-*  Parameters:
-*     fmt
-*        Pointer to a null terminated string containing the format
-*        specifier.  For details of the syntax of this string, see the
-*        DHmsFormat function.
-*     digs 
-*        The default number of digits of precision to use. This is used
-*        if the given format specifier indicates the number of decimal
-*        places to use with the string ".*". In this case, the returned
-*        value for "ndp" will be set to produce the number of digits of
-*        precision given by "digs". 
-*     sep
-*        Pointer to a location in which a single character will be
-*        returned to indicate which separator should be used to
-*        separate the fields.  The returned value will be one of ' '
-*        (use a blank as the separator), ':' (use a colon as the
-*        separator) or 'l' (use one of the letters "hdms" as
-*        appropriate)  or 'g' (use one of the letters "hdms" but
-*        include suitable escape sequences to allow the Plot class to draw
-*        the letter as a small super-script).
-*     plus
-*        Pointer to an int in which a boolean value will be returned
-*        to indicate if a plus sign should be prefixed to positive
-*        values.
-*     lead_zero
-*        Pointer to an int in which a boolean value will be returned
-*        to indicate if leading zeros should be prefixed to the value
-*        so that the first field is always of constant (maximum)
-*        width, as would be required in a fixed-width table. Leading
-*        zeros are always prefixed to any fields that follow.
-*     as_time
-*        Pointer to an int in which a boolean value will be returned
-*        to indicate whether the value is to be formatted as a time
-*        (e.g. in hours) rather than as an angle (in degrees).
-*     dh
-*        Pointer to an int in which a boolean value will be returned
-*        to indicate whether a degrees or hours field is required.
-*     min
-*        Pointer to an int in which a boolean value will be returned
-*        to indicate whether a minutes field is required.
-*     sec
-*        Pointer to an int in which a boolean value will be returned
-*        to indicate whether a seconds field is required.
-*     ndp
-*        Pointer to an int in which to return the number of digits
-*        required following the decimal point in the final field. A
-*        value of zero indicates that the decimal point should be
-*        omitted. See parameter "digs".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Acknowledgements:
-*     - This function is a close approximation to a Fortran 77 routine
-*     written by Clive Davenhall which implements the system of format
-*     specifiers for angles described in his document on the CAT
-*     catalogue access library (Starlink User Note 181). It supports
-*     the same format specifiers.
-*/
-
-/* Local Variables: */
-   int decpos;                   /* Offset of decimal point */
-   int i;                        /* Loop counter for format characters */
-   int ndpval;                   /* Number of decimal places required */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   *as_time = -1;
-   *lead_zero = 0;
-   *dh = 0;
-   *min = 0;
-   *ndp = 0;
-   *plus = 0;
-   *sec = 0;
-   *sep = ':';
-   decpos = -1;
-
-/* Loop to inspect and classify each character. */
-   for ( i = 0; fmt[ i ]; i++ ) {
-      switch ( fmt[ i ] ) {
-
-/* Note if a '+' sign is needed. */
-         case '+':
-            *plus = 1;
-            break;
-
-/* Note if leading zeros are needed. */
-         case 'Z': case 'z':
-            *lead_zero = 1;
-            break;
-
-/* Set the required separator. Note we only use graphical separators if
-   astEscapes indicates that escape sequences are currently being used. */
-         case 'I': case 'i':
-            *sep = ':';
-            break;
-         case 'B': case 'b':
-            *sep = ' ';
-            break;
-         case 'L': case 'l':
-            *sep = 'l';
-            break;
-         case 'G': case 'g':
-            *sep = astEscapes( -1 ) ? 'g' : 'l';
-            break;
-
-/* Note if the value is to be formatted as a time (but not if a
-   degrees or hours field has already been specified). */
-         case 'T': case 't':
-            if ( *as_time == -1 ) *as_time = 1;
-            break;
-
-/* Note if a degrees or hours field is required (and hence whether the
-   value is to be formatted as a time or an angle). */
-         case 'H': case 'h':
-            *dh = 1;
-            *as_time = 1;
-            break;
-         case 'D': case 'd':
-            *dh = 1;
-            *as_time = 0;
-            break;
-
-/* Note if a minutes field is required. */
-         case 'M': case 'm':
-            *min = 1;
-            break;
-
-/* Note if a seconds field is required. */
-         case 'S': case 's':
-            *sec = 1;
-            break;
-
-/* Note if decimal places are required. */
-	 case '.':
-            decpos = i;
-      }
-   }
-
-/* Format the value as an angle by default. */
-   if ( *as_time == -1 ) *as_time = 0;
-
-/* Use degrees (or hours) as the default field. */
-   if ( !*min && !*sec ) *dh = 1;
-
-/* Omit the seconds field if the degrees/hours field is present but
-   the minutes field is not. */
-   if ( *dh && !*min ) *sec = 0;
-
-/* Determine the default number of decimal places following the final field. 
-   This is the number which will be used if the format specifier does not 
-   indicate how many decimal places should be produced. It is shosen to
-   produce the requested total number of digits of precision. */
-
-/* If decimal places are required, attempt to read the integer value
-   following the decimal point which specifies how many. If successful, 
-   and a valid (positive or zero) result was obtained, note its value. If
-   an asterisk follows the decimal point, use a value determined by the
-   supplied "digs" value. */
-   if ( ( decpos >= 0 ) && ( decpos < ( i - 1 ) ) ) {
-
-      if ( astSscanf( fmt + decpos + 1, "%d", &ndpval ) == 1 ) {
-         if ( ndpval >= 0 ) *ndp = ndpval;
-
-      } else if ( fmt[ decpos + 1 ] == '*' ) {
-         *ndp = digs;
-         if( *as_time ) {
-            *ndp = ( digs > 2 ) ? digs : 2;
-            if( *dh ) *ndp -= 2;
-         } else {
-            *ndp = ( digs > 3 ) ? digs : 3;
-            if( *dh ) *ndp -= 3;
-         }
-         if( *min ) *ndp -= 2;
-         if( *sec ) *ndp -= 2;
-         if( *ndp < 0 ) *ndp = 0;
-      }
-   }
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astSetAttrib method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function assigns an attribute value for a SkyAxis, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     setting
-*        Pointer to a null terminated string specifying the new
-*        attribute value.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   int as_time;                  /* Format values as times? */
-   int centrezero;               /* SkyAxis range centred on zero? */
-   int is_latitude;              /* SkyAxis is a latitude axis? */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* AsTime. */
-/* ------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "astime= %d %n", &as_time, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisAsTime( this, as_time );
-
-/* IsLatitude. */
-/* ----------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "islatitude= %d %n", &is_latitude, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisIsLatitude( this, is_latitude );
-
-/* CentreZero. */
-/* ----------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "centrezero= %d %n", &centrezero, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAxisCentreZero( this, centrezero );
-
-/* Pass any unrecognised attribute setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetAxisFormat( AstAxis *this_axis, const char *format, int *status ) {
-/*
-*  Name:
-*     SetAxisFormat
-
-*  Purpose:
-*     Set a value for the Format attribute of a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     void SetAxisFormat( AstAxis *this, const char *format )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astSetAxisFormat method inherited
-*     from the Axis class).
-
-*  Description:
-*     This function sets a new value for the Format attribute of a SkyAxis.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     format
-*        Pointer to a null terminated string containing the new Format value.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  For details of the syntax of the Format string, see the DHmsFormat
-*     function.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* Store a pointer to a copy of the Format string in the SkyAxis structure. */
-   this->skyformat = astStore( this->skyformat, format,
-                               strlen( format ) + (size_t) 1 );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astTestAttrib protected
-*     method inherited from the Axis class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate
-*     whether a value has been set for one of a SkyAxis' attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* AsTime. */
-/* ------- */
-   if ( !strcmp( attrib, "astime" ) ) {
-      result = astTestAxisAsTime( this );
-
-/* IsLatitude. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "islatitude" ) ) {
-      result = astTestAxisIsLatitude( this );
-
-/* CentreZero. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "centrezero" ) ) {
-      result = astTestAxisCentreZero( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int TestAxisFormat( AstAxis *this_axis, int *status ) {
-/*
-*  Name:
-*     TestAxisFormat
-
-*  Purpose:
-*     Test if a value has been set for the Format attribute of a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int TestAxisFormat( AstAxis *this, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astTestAxisFormat method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function returns 0 or 1 to indicate whether a value has been set
-*     for the Format attribute of a SkyAxis.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if no Format value has been set, otherwise one.
-
-*  Notes:
-*     -  This function will return a value of zero if it is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_axis;
-
-/* The Format string has been set if the pointer to it is not NULL. */
-   result = ( this->skyformat != NULL );
-
-/* Return the result. */
-   return result;
-}
-
-static int AxisUnformat( AstAxis *this_axis, const char *string,
-                         double *value, int *status ) {
-/*
-*  Name:
-*     AxisUnformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     int AxisUnformat( AstAxis *axis, const char *string, double *value, int *status )
-
-*  Class Membership:
-*     SkyAxis member function (over-rides the astAxisUnformat method
-*     inherited from the Axis class).
-
-*  Description:
-*     This function reads a formatted coordinate value for a SkyAxis
-*     (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis.
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will be
-*        returned (in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*-
-*/
-
-/* Local Constants: */
-#define FMT_LEN 50               /* Length of format buffer */
-
-/* Local Variables: */
-   char fmtbuf[ FMT_LEN + 1 ];   /* Buffer for C format specification */
-   char fmtsep;                  /* Format field separator character */
-   char last_sep;                /* Previous separator character */
-   char sep;                     /* Separator character */
-   char sep_used;                /* Separator character being used */
-   char sign[ 2 ];               /* Sign character as string */
-   const char *field_start[ 3 ]; /* Pointer to start of each field */
-   const char *fmt;              /* Pointer to SkyAxis Format string */
-   const char *s;                /* Pointer to current reading position */
-   const char *string_start;     /* Pointer to first significant character */
-   double field[ 3 ];            /* Field values */
-   double testval;               /* Value to test for invalid fields */
-   int angle_or_time;            /* Value known to be angle or time? */
-   int as_time;                  /* Value is a time (else an angle)? */
-   int decimal;                  /* Decimal point in field? */
-   int dh;                       /* Hours field required? */
-   int digs;                     /* Default no. of digits of precision */
-   int exponent;                 /* Exponent at end of field? */
-   int field_id[ 3 ];            /* Field identification (0 = don't know) */
-   int final;                    /* Final field read? */
-   int good_sep;                 /* Separator character valid? */
-   int i;                        /* Loop counter for characters */
-   int ifield;                   /* Loop counter for fields */
-   int lead_zero;                /* Add leading zeros? */
-   int len;                      /* Significant length of string */
-   int m;                        /* Number of characters read by astSscanf */
-   int match;                    /* Character pattern matches? */
-   int min;                      /* Minutes field required? */
-   int n;                        /* Number of characters read by astSscanf */
-   int nc;                       /* Total no. characters read */
-   int nchar;                    /* Number of characters in erroneous value */
-   int ndp;                      /* Number of decimal places */
-   int next_id;                  /* Next field ID to use (0 = don't know) */
-   int nfield;                   /* Number of fields read */
-   int nread;                    /* No. characters read for current field */
-   int plus;                     /* Add leading plus sign? */
-   int positive;                 /* Value is positive? */
-   int sec;                      /* Seconds field required? */
-   int sep_angle_or_time;        /* Separator indicates angle or time? */
-   int sep_field_id;             /* Field ID from separator (0 = don't know) */
-   int sep_index;                /* Index of separator character in table */
-   int sep_len;                  /* Length of separator plus trailing space */
-   int suffix_sep;               /* Field has a suffix separator? */
-
-/* Local Data: */
-   const char *sep_list =        /* List of separator characters recognised */
-              " :hHdDmM'sS\"";
-
-   const int angle_or_time_list[] = /* Whether separator indicates angle or
-                                       time (1 or 2). Zero => don't know. */
-             { 0, 0, 2, 2, 1, 1, 0, 0, 1, 0, 0, 1 };
-
-   const int field_id_list[] =   /* Whether separator identifies previous field
-                                    (1, 2, or 3). Zero => doesn't identify. */
-             { 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3 };
-
-   const double fieldvalue[ 3 ] = /* Nominal field values (degrees/hours) */
-                { 1.0, 1.0 / 60.0, 1.0 / 3600.0 };
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Obtain the SkyAxis Format string. If its starts with a "%" sign, use
-   the parent AxisUnformat method inherited from the Axis class. Use 
-   a private method to obtain the Format string, in case the syntax has been 
-   over-ridden by a derived class. */
-   fmt = GetAxisFormat( this_axis, status );
-   if( fmt && fmt[0] == '%' ) {
-      nc = (*parent_axisunformat)( this_axis, string, value, status );
-   
-/* Otherwise, parse it to determine the default choice of input format. */
-   } else if( astOK ){
-      digs = astGetAxisDigits( this_axis );
-      ParseDHmsFormat( fmt, digs, &fmtsep, &plus, &lead_zero, &as_time, &dh,
-                       &min, &sec, &ndp, status );
-
-/* Initialise a pointer into the string and advance it to the first
-   non-white space character. Save a copy of this pointer. */
-      s = string;
-      while ( isspace( (int) *s ) ) s++;
-      string_start = s;
-
-/* Read sign information. */
-/* ---------------------- */
-/* Attempt to read an optional sign character ("+" or "-"), possibly
-   surrounded by white space. Set a flag to indicate if the returned
-   value should be positive or not. Increment the string pointer to
-   the next significant character. */
-   positive = 1;
-      n = 0;
-      if ( 1 == astSscanf( s, " %1[+-] %n", sign, &n ) ) {
-         positive = ( *sign == '+' );
-         s += n;
-      }
-
-/* Loop to read field information. */
-/* ------------------------------- */
-/* Initialise, then loop to read the values of up to three fields and
-   to identify the separators that accompany them. */
-      angle_or_time = 0;
-      last_sep = '\0';
-      next_id = 0;
-      nfield = 0;
-      sep_used = '\0';
-      suffix_sep = 0;
-      sep_len = 0;
-      for ( ifield = 0; ifield < 3; ifield++ ) {
-
-/* Set the default field value. */
-         field[ ifield ] = 0.0;
-
-/* If a prefix separator was identified for the second and subsequent
-   fields (when the previous field was being read), then step over the
-   prefix, including any following white space. */
-         if ( ifield && !suffix_sep ) s += sep_len;
-
-/* Note where in the input string the field's numerical value
-   starts. */
-         field_start[ ifield ] = s;
-
-/* Each field must consist of a string of digits, possibly surrounded
-   by white space, except that an optional decimal point may also be
-   present (in which case it indicates the final field). Since we want
-   to exclude signs, etc. from these fields, we must first identify a 
-   valid sequence of digits, before attempting to read them as a number. 
-   Start by assuming that we will find a decimal point but not an 
-   exponent. */
-         decimal = 1;
-         exponent = 0;
-
-/* Match a field and obtain its value. */
-/* ----------------------------------- */
-/* Look for a character sequence like "12.345", or similar, setting a
-   flag to identify a match. */
-         n = 0;
-         match = ( 0 == astSscanf( s, "%*[0123456789].%*[0123456789]%n", &n ) )
-                   && n;
-
-/* If that failed, then look for a sequence like "12.", or similar. */
-         if ( !match ) {
-            n = 0;
-            match = ( 0 == astSscanf( s, "%*[0123456789].%n", &n ) ) && n;
-         }
-
-/* If that also failed, then look for a sequence like ".12", or similar. */
-         if ( !match ) {
-            n = 0;
-            match = ( 0 == astSscanf( s, ".%*[0123456789]%n", &n ) ) && n;
-         }
-
-/* If that also failed, then look for a sequence containing digits only. */
-         if ( !match ) {
-            n = 0;
-            match = ( 0 == astSscanf( s, "%*[0123456789]%n", &n ) ) && n;
-
-/* Note we have not found a decimal point. */
-            decimal = 0;
-         }
-
-/* Now look for numbers that end with an exponent. First check that the
-   string starts with a sequence of digits with or without a decimal point. */
-         if( match ) {
-
-/* See if the numbers are followed by an exponent with an explicit sign
-   character. If so, increment the number of characters in the numerical
-   string prefix. */
-            m = 0;
-            if( ( 0 == astSscanf( s + n, "%*1[Ee]%*1[+-]%*[0123456789]%n", &m ) ) 
-                && m ) {
-               n += m;
-               exponent = 1;
-
-/* If the above check failed, see if the numbers are followed by an exponent 
-   without an explicit sign character. If so, increment the number of 
-   characters in the numerical string prefix. */
-            } else {
-               m = 0;
-               if( ( 0 == astSscanf( s + n, "%*1[Ee]%*[0123456789]%n", &m ) ) 
-                   && m ) {
-                  n += m;
-                  exponent = 1;
-               }
-            }
-         }
-
-/* If we identified a suitable sequence of characters above, we will
-   now read them as a number. To prevent any subsequent characters
-   being included as part of this number, the field width must be
-   restricted to the length of the sequence we found. Write a format
-   specification to read a double with this field width, followed by
-   optional white space, and to return the total number of characters
-   read. */
-         nread = 0;
-         if ( match ) {
-            (void) sprintf( fmtbuf, "%%%dlf %%n", n );
-
-/* Use this format specification to read the field value. If
-   successful, increment the string pointer to the next significant
-   character. */
-            if ( 1 == astSscanf( s, fmtbuf, field + ifield, &nread ) ) s += nread;
-         }
-
-/* Note the total number of characters read up to the end of the
-   numerical value in this field (including any following white
-   space). */
-         nc = s - string;
-      
-/* Identify the following separator. */
-/* --------------------------------- */
-/* We will now attempt to identify the field separator (if any) which
-   follows the field we have just read. By default, we behave as if
-   the separator is a space. Note we have actually found a space (at
-   least) if extra white space characters were read as part of the
-   field value above. */
-         sep = ' ';
-         good_sep = ( nread > n );
-
-/* Look for one of the recognised separator characters. If one is
-   found, save a copy of it and note we appear (so far) to have a
-   valid separator. */
-         sep_len = 0;
-         if ( *s && strchr( sep_list, *s ) ) {
-            sep = *s;
-            good_sep = 1;
-
-/* Set "sep_len" to the number of characters associated with the
-   separator. This includes any following white space. */
-            while ( isspace( (int) s[ ++sep_len ] ) );
-         }
-
-/* Identify the separator character by looking it up in the separator
-   list (this just uses a space if no valid separator has been
-   found). */
-         sep_index = strchr( sep_list, sep ) - sep_list;
-
-/* Determine if the separator can be used to identify the field which
-   preceded it and if it allows us to determine whether an angle or a
-   time is being read. Both of these properties are specified in data
-   tables (with zero indicating that the separator didn't supply any
-   information). */
-         sep_field_id = field_id_list[ sep_index ];
-         sep_angle_or_time = angle_or_time_list[ sep_index ];
-
-/* Validate the separator. */
-/* ----------------------- */
-/* Now perform further checks that the separator is valid
-   (i.e. conforms to the required syntax). If it appears to identify
-   the previous field (i.e. is a "suffix" separator like "m" or "s"),
-   then it is valid only if its field ID is no less than the ID value
-   that would be used next, based on previous fields (if any), and no
-   less than the current field number. This ensures that fields occur
-   in the correct order without duplication. */
-         if ( good_sep ) {
-            if ( sep_field_id ) {
-               good_sep = ( sep_field_id >= next_id ) &&
-                          ( sep_field_id > ifield );
-
-/* Otherwise (i.e. we appear to have a "prefix" separator like ":" or
-   " "), it is valid if it is the first one used, or if it matches the
-   previous one used. Keep a note of the first such separator used for
-   checking subsequent ones. */
-            } else {
-               good_sep = !sep_used || ( sep == sep_used );
-               if ( !sep_used ) sep_used = sep;
-            }
-         }
-
-/* If the separator seems OK and we don't yet know whether we are reading
-   an angle or a time, then use whatever information the separator
-   provides about this. */
-         if ( good_sep ) {
-            if ( !angle_or_time ) {
-               angle_or_time = sep_angle_or_time;
-
-/* If we already know whether we are reading an angle or a time and
-   the current separator also contains information about this, then
-   check that these sources of information are compatible. This
-   prevents inconsistent use of angle/time field separators. */
-            } else {
-               good_sep = !sep_angle_or_time ||
-                          ( sep_angle_or_time == angle_or_time );
-            }
-         }
-
-/* Update the count of characters read for this field and note if we
-   have identified a valid suffix separator. */
-         if ( good_sep ) nread += sep_len;
-         suffix_sep = good_sep && sep_field_id;
-
-/* Identify which field was read. */
-/* ------------------------------ */
-/* If we have a valid suffix separator, store the field ID. Also make
-   a note of the ID to use for the next field. */
-         if ( suffix_sep ) {
-            field_id[ ifield ] = sep_field_id;
-            next_id = sep_field_id + 1;
-
-/* Step over the separator (plus any following white space) and update
-   the total number of characters read (prefix separators are not
-   accounted for until we start to read the next field). */
-            s += sep_len;
-            nc = s - string;;
-
-/* If the separator does not identify the current field, then assign a
-   field ID based on the previous field (if any). Update the ID to use
-   for the next field, if known. */
-         } else {
-            field_id[ ifield ] = next_id;
-            if ( next_id ) next_id++;
-         }
-
-/* Count fields and exit when done. */
-/* -------------------------------- */
-/* If no characters have been read for the current field, then
-   disregard the field if: (a) it is the first one (i.e. there is
-   nothing to read), or (b) it follows a white space separator
-   (because trailing space does not delimit an extra field). In either
-   case, we have now read all the fields. Otherwise, increment the
-   count of fields read. */
-         final = 0;
-         if ( !nread && ( !ifield || isspace( (int) last_sep ) ) ) {
-            final = 1;
-         } else {
-            nfield++;
-         }
-
-/* We have also read all the fields if: (a) the last one contained a
-   decimal point, or (b) the last one ended with an exponent, or (c) 
-   the next character is not a valid field separator, or (d) we have 
-   read the seconds field so the next field ID would exceed 3. */
-         final = final || decimal || exponent || !good_sep || ( next_id > 3 );
-
-/* Quit reading if we have read the final field. Otherwise, save the
-   separator character and attempt to read the next field. */
-         if ( final ) break;
-         last_sep = sep;
-      }
-
-/* Complete the identification of fields. */
-/* -------------------------------------- */
-/* Although we have propagated field IDs from earlier ones to later
-   ones in the loop above, we have still not done the reverse. This
-   means there there may still be some leading fields which have not
-   been positively identified (i.e. still have a field ID of zero). In
-   fact, all the fields we have read might still be unidentified at
-   this point. */
-
-/* Calculate the field ID that would apply to the final field we have
-   read in the absence of any other information. This depends on the
-   number of leading fields that are expected to be missing. */
-      next_id = nfield + ( dh ? 0 : ( min ? 1 : 2 ) );
-      if ( next_id > 3 ) next_id = 3;
-
-/* Loop through the fields in reverse order, propagating any positive
-   identifications backwards towards the first field. If no fields
-   have been positively identified, then they are simply numbered
-   consecutively based on the value calculated above. */
-      for ( ifield = nfield - 1; ifield >= 0; ifield-- ) {
-         if ( field_id[ ifield ] ) {
-            next_id = field_id[ ifield ] - 1;
-         } else {
-            field_id[ ifield ] = next_id--;
-         }
-      }
-
-/* Handle inability to read any value. */
-/* ----------------------------------- */
-/* If no fields were read, then check to see if we are trying to read
-   the string "<bad>" (or similar) possibly surrounded by, or
-   containing, white space. If so, return the coordinate value
-   AST__BAD. */
-      if ( !nfield ) {
-         if ( n = 0,
-              ( 0 == astSscanf( string, " < %*1[Bb] %*1[Aa] %*1[Dd] > %n", &n )
-                && n ) ) {
-            *value = AST__BAD;
-            nc = n;
-
-/* If the string still cannot be read, then return a function value of
-   zero. */
-         } else {
-            nc = 0;
-         }
-
-/* Finally determine angle or time. */
-/* -------------------------------- */
-/* If one or more fields have been read, check if we know whether to
-   interpret the value as an angle or a time (if not, we continue to
-   use the default choice obtained from the SkyAxis Format string). */
-      } else {
-         if ( angle_or_time ) as_time = ( angle_or_time == 2 );
-
-/* Validate field values. */
-/* ---------------------- */
-/* If OK, check all fields except the first one for a valid value (we
-   allow the first field to be unconstrained, so that angles and times
-   outside the conventional ranges can be represented). We only need
-   to test for values over 60.0, since negative values can't be
-   read. */
-         if ( astOK ) {
-            for ( ifield = 1; ifield < nfield; ifield++ ) {
-               if ( field[ ifield ] >= 60.0 ) {
-
-/* If a suspect field is found, we must now re-read it. This is
-   because values like "59.9999..." are valid, even if they round up
-   to 60, whereas "60" isn't. To distinguish these cases, we read the
-   digits that occur before the decimal point (if any). Determine how
-   many such digits there are. */
-                  n = 0;
-                  if ( ( 0 == astSscanf( field_start[ ifield ],
-                                      "%*[0123456789]%n", &n ) ) && n ) {
-
-/* If there are none (this shouldn't happen), the field is
-   valid. Otherwise, construct a format specification to read these
-   digits as a floating point number. */
-                     (void) sprintf( fmtbuf, "%%%dlf", n );
-
-/* Read the digits and compare the result with 60.0. Report an error
-   and quit if necessary, limiting the string length in the error
-   message to include just the significant characters in the value
-   read. */
-                     if ( ( 1 == astSscanf( field_start[ ifield ], fmtbuf,
-                                         &testval ) )
-                          && ( testval >= 60.0 ) ) {
-                        nchar = nc - ( string_start - string );
-                        for ( i = len = 0; i < nchar; i++ ) {
-                           if ( !isspace( (int) string_start[ i ] ) ) {
-                              len = i + 1;
-                           }
-                        }
-                        astError( AST__UNFER, "Invalid %s%s value in sky "
-                                  "coordinate \"%.*s\".", status, as_time ? "" : "arc",
-                                  ( field_id[ ifield ] == 2 ) ? "minutes" :
-                                                                "seconds",
-                                  len, string_start );
-                        break;
-                     }
-                  }
-               }
-            }
-         }
-
-/* Calculate final result. */
-/* ----------------------- */
-/* If OK, calculate the result by summing the field values and converting
-   to radians. */
-         if ( astOK ) {
-            *value = 0.0;
-            for ( ifield = 0; ifield < nfield; ifield++ ) {
-               *value += field[ ifield ] *
-                         fieldvalue[ field_id[ ifield ] - 1 ] *
-                         ( as_time ? hr2rad : deg2rad );
-            }
-
-/* Change sign if necessary. */
-            if ( !positive ) *value = - *value;
-         }
-      }
-   }
-
-/* If an error occurred, set the number of characters read to zero. */
-   if ( !astOK ) nc = 0;
-
-/* Return the number of characters read. */
-   return nc;
-
-/* Undefine macros local to this function. */
-#undef FMT_LEN
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with the
-   SkyAxis class using the macros defined for this purpose in the "object.h"
-   file. For a description of each attribute, see the class interface (in the
-   associated .h file). */
-
-/* AsTime. */
-/* ------- */
-/* The value is constrained to be -INT_MAX, 0 or 1, with -INT_MAX for
-   "undefined". The default value is 0 unless the "IsLatitude"
-   attribute has been explicitly set to 0, in which case "AsTime"
-   defaults to 1. */
-astMAKE_CLEAR(SkyAxis,AxisAsTime,as_time,-INT_MAX)
-astMAKE_GET(SkyAxis,AxisAsTime,int,0,( ( this->as_time != -INT_MAX ) ?
-                                       this->as_time :
-                                       ( astTestAxisIsLatitude( this ) &&
-                                         !astGetAxisIsLatitude( this ) ) ))
-astMAKE_SET(SkyAxis,AxisAsTime,int,as_time,( value != 0 ))
-astMAKE_TEST(SkyAxis,AxisAsTime,( this->as_time != -INT_MAX ))
-
-/* IsLatitude. */
-/* ----------- */
-/* The value is constrained to be -INT_MAX, 0 or 1, with -INT_MAX for
-   "undefined". The default value is 0. */
-astMAKE_CLEAR(SkyAxis,AxisIsLatitude,is_latitude,-INT_MAX)
-astMAKE_GET(SkyAxis,AxisIsLatitude,int,0,( this->is_latitude != -INT_MAX ?
-                                           this->is_latitude : 0 ))
-astMAKE_SET(SkyAxis,AxisIsLatitude,int,is_latitude,( value != 0 ))
-astMAKE_TEST(SkyAxis,AxisIsLatitude,( this->is_latitude != -INT_MAX ))
-
-/* CentreZero. */
-/* ----------- */
-/* The value is constrained to be -INT_MAX, 0 or 1, with -INT_MAX for
-   "undefined". The default value is equal to the value of IsLatitude. */
-astMAKE_CLEAR(SkyAxis,AxisCentreZero,centrezero,-INT_MAX)
-astMAKE_GET(SkyAxis,AxisCentreZero,int,0,( this->centrezero != -INT_MAX ?
-                                           this->centrezero : astGetAxisIsLatitude( this ) ))
-astMAKE_SET(SkyAxis,AxisCentreZero,int,centrezero,( value != 0 ))
-astMAKE_TEST(SkyAxis,AxisCentreZero,( this->centrezero != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SkyAxis objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SkyAxis objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *in;                  /* Pointer to input SkyAxis */
-   AstSkyAxis *out;                 /* Pointer to output SkyAxis */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SkyAxis structures. */
-   in = (AstSkyAxis *) objin;
-   out = (AstSkyAxis *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output SkyAxis. */
-   out->skyformat = NULL;
-
-/* Make copies of the allocated strings. */
-   if ( in->skyformat ) out->skyformat = astStore( NULL, in->skyformat,
-                                       strlen( in->skyformat ) + (size_t) 1 );
-
-/* If an error occurred, clean up by freeing all memory allocated above. */
-   if ( !astOK ) {
-      out->skyformat = astFree( out->skyformat );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SkyAxis objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SkyAxis objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) obj;
-
-/* Free all allocated memory. */
-   this->skyformat = astFree( this->skyformat );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SkyAxis objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SkyAxis class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyAxis whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstAxis *this_axis;           /* Pointer to Axis structure */
-   AstSkyAxis *this;             /* Pointer to the SkyAxis structure */
-   const char *sval;             /* Pointer to string value */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyAxis structure. */
-   this = (AstSkyAxis *) this_object;
-
-/* Write out values representing the instance variables for the
-   SkyAxis class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Format. */
-/* ------- */
-/* We must write out the Format value stored locally as it over-rides
-   that provided by the Axis class. */
-   this_axis = (AstAxis *) this;
-   set = TestAxisFormat( this_axis, status );
-   sval = set ? GetAxisFormat( this_axis, status ) : astGetAxisFormat( this );
-   astWriteString( channel, "Format", set, 0, sval, "Format specifier" );
-
-/* IsLatitude. */
-/* ----------- */
-   set = TestAxisIsLatitude( this, status );
-   ival = set ? GetAxisIsLatitude( this, status ) : astGetAxisIsLatitude( this );
-   astWriteInt( channel, "IsLat", set, 0, ival,
-                ival ? "Latitude axis (not longitude)" :
-                       "Longitude axis (not latitude)" );
-
-/* CentreZero. */
-/* ----------- */
-   set = TestAxisCentreZero( this, status );
-   ival = set ? GetAxisCentreZero( this, status ) : astGetAxisCentreZero( this );
-   astWriteInt( channel, "CnZer", set, 0, ival,
-                ival ? "Display axis values in range -PI -> +PI" :
-                       "Display axis values in range 0 -> 2.PI" );
-
-/* AsTime. */
-/* ------- */
-   set = TestAxisAsTime( this, status );
-   ival = set ? GetAxisAsTime( this, status ) : astGetAxisAsTime( this );
-   astWriteInt( channel, "AsTime", set, 0, ival,
-                ival ? "Display values as times (not angles)" :
-                       "Display values as angles (not times)" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASkyAxis and astCheckSkyAxis functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SkyAxis,Axis)
-astMAKE_CHECK(SkyAxis)
-
-AstSkyAxis *astSkyAxis_( const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astSkyAxis
-
-*  Purpose:
-*     Create a SkyAxis.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     AstSkyAxis *astSkyAxis( const char *options, int *status, ... )
-
-*  Class Membership:
-*     SkyAxis constructor.
-
-*  Description:
-*     This function creates a new SkyAxis and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new SkyAxis. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new SkyAxis.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyAxis *new;              /* Pointer to new SkyAxis */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SkyAxis, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitSkyAxis( NULL, sizeof( AstSkyAxis ), !class_init, &class_vtab,
-                         "SkyAxis" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new SkyAxis'
-   attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SkyAxis. */
-   return new;
-}
-
-AstSkyAxis *astSkyAxisId_( const char *options, ... ) {
-/*
-*  Name:
-*     astSkyAxisId_
-
-*  Purpose:
-*     Create a SkyAxis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     AstSkyAxis *astSkyAxisId_( const char *options, ... )
-
-*  Class Membership:
-*     SkyAxis constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astSkyAxis constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astSkyAxis_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astSkyAxis_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astSkyAxis_.
-
-*  Returned Value:
-*     The ID value associated with the new SkyAxis.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyAxis *new;              /* Pointer to new SkyAxis */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SkyAxis, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitSkyAxis( NULL, sizeof( AstSkyAxis ), !class_init, &class_vtab,
-                         "SkyAxis" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new SkyAxis'
-   attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new SkyAxis. */
-   return astMakeId( new );
-}
-
-AstSkyAxis *astInitSkyAxis_( void *mem, size_t size, int init,
-                             AstSkyAxisVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSkyAxis
-
-*  Purpose:
-*     Initialise a SkyAxis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     AstSkyAxis *astInitSkyAxis( void *mem, size_t size, int init,
-*                                 AstSkyAxisVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SkyAxis initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SkyAxis object. It allocates memory (if necessary) to accommodate
-*     the SkyAxis plus any additional data associated with the derived class.
-*     It then initialises a SkyAxis structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a SkyAxis at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SkyAxis is to be created. This
-*        must be of sufficient size to accommodate the SkyAxis data
-*        (sizeof(SkyAxis)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SkyAxis (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the SkyAxis
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the SkyAxis's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SkyAxis.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new SkyAxis.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSkyAxis *new;              /* Pointer to the new SkyAxis */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSkyAxisVtab( vtab, name );
-
-/* Initialise an Axis structure (the parent class) as the first component
-   within the SkyAxis structure, allocating memory if necessary. */
-   new = (AstSkyAxis *) astInitAxis( mem, size, 0, (AstAxisVtab *) vtab,
-                                     name );
-
-   if ( astOK ) {
-
-/* Initialise the SkyAxis data. */
-/* ---------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->as_time = -INT_MAX;
-      new->is_latitude = -INT_MAX;
-      new->centrezero = -INT_MAX;
-      new->skyformat = NULL;
-
-/* If an error occurred, clean up by deleting the new SkyAxis. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SkyAxis. */
-   return new;
-}
-
-AstSkyAxis *astLoadSkyAxis_( void *mem, size_t size,
-                             AstSkyAxisVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSkyAxis
-
-*  Purpose:
-*     Load a SkyAxis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyaxis.h"
-*     AstSkyAxis *astLoadSkyAxis( void *mem, size_t size,
-*                                 AstSkyAxisVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     SkyAxis loader.
-
-*  Description:
-*     This function is provided to load a new SkyAxis using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SkyAxis structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a SkyAxis at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SkyAxis is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SkyAxis data (sizeof(SkyAxis)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SkyAxis (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SkyAxis structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSkyAxis) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SkyAxis. If this is NULL, a pointer
-*        to the (static) virtual function table for the SkyAxis class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SkyAxis" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SkyAxis.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyAxis *new;              /* Pointer to the new SkyAxis */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SkyAxis. In this case the
-   SkyAxis belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSkyAxis );
-      vtab = &class_vtab;
-      name = "SkyAxis";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSkyAxisVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SkyAxis. */
-   new = astLoadAxis( mem, size, (AstAxisVtab *) vtab, name, channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SkyAxis" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Format. */
-/* ------- */
-/* Note that string values do not require any additional processing. */
-      new->skyformat = astReadString( channel, "format", NULL );
-
-/* IsLatitude. */
-/* ----------- */
-      new->is_latitude = astReadInt( channel, "islat", -INT_MAX );
-      if ( TestAxisIsLatitude( new, status ) ) {
-         SetAxisIsLatitude( new, new->is_latitude, status );
-      }
-
-/* CentreZero. */
-/* ----------- */
-      new->centrezero = astReadInt( channel, "cnzer", -INT_MAX );
-      if ( TestAxisCentreZero( new, status ) ) {
-         SetAxisCentreZero( new, new->centrezero, status );
-      }
-
-/* AsTime. */
-/* ------- */
-      new->as_time = astReadInt( channel, "astime", -INT_MAX );
-      if ( TestAxisAsTime( new, status ) ) SetAxisAsTime( new, new->as_time, status );
-
-/* If an error occurred, clean up by deleting the new SkyAxis. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SkyAxis pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* (No more to define at present.) */
-
-
-
-
-
diff --git a/ast-5.3-1/skyaxis.h b/ast-5.3-1/skyaxis.h
deleted file mode 100644
index 4b11b28..0000000
--- a/ast-5.3-1/skyaxis.h
+++ /dev/null
@@ -1,419 +0,0 @@
-#if !defined( SKYAXIS_INCLUDED ) /* Include this file only once */
-#define SKYAXIS_INCLUDED
-/*
-*+
-*  Name:
-*     skyaxis.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SkyAxis class.
-
-*  Invocation:
-*     #include "skyaxis.h"
-
-*  Description:
-*     This include file defines the interface to the SkyAxis class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The SkyAxis class extends the Axis class to represent angles on
-*     the sky measured in radians. It provides alternative formatting
-*     facilities for representing these coordinate values either as
-*     angles (in degrees) or as time (in hours) using sexagesimal
-*     notation. It also provides alternative defaults for certain
-*     attributes and adds new attributes and methods of its own which
-*     are needed to manipulate angular coordinates on the sky.
-
-*  Inheritance:
-*     The SkyAxis class inherits from the Axis class.
-
-*  Attributes Over-Ridden:
-*     Format (string)
-*        The SkyAxis class defines a new syntax for this string.
-*     Label (string)
-*        The SkyAxis class defines new default values. These may
-*        depend on other attribute settings.
-*     Symbol (string)
-*        The SkyAxis class defines new default values. These may
-*        depend on other attribute settings.
-*     Unit (string)
-*        The SkyAxis class defines new default values. These may
-*        depend on other attribute settings.
-
-*  New Attributes Defined:
-*     AsTime (integer)
-*        A boolean value which indicates whether SkyAxis coordinate
-*        values should be formatted for display as times (instead of
-*        angles). It is used to determine the default format to use if
-*        no explicit value has been set for the Format attribute.
-*     CentreZero (integer)
-*        A boolean value which indicates whether a SkyAxis value should
-*        be normalised into the range [-PI,+PI] or [0,2.PI] when astNorm 
-*        is used.
-*     IsLatitude (integer)
-*        A boolean value which indicates whether a SkyAxis is a
-*        latitude axis (as opposed to a longitude axis). It is used to
-*        determine default axis labels and symbols. It also determines the
-*        default value for the "AsTime" attribute (since longitudes on
-*        the sky are usually expressed as times).
-
-*  Methods Over-Ridden:
-*     Public:
-*        astAxisFormat
-*           Format a coordinate value for a SkyAxis.
-*        astAxisNorm
-*           Normalise a SkyAxis coordinate value.
-*        astAxisUnformat
-*           Read a formatted coordinate value for a SkyAxis.
-
-*     Protected:
-*        astAxisAbbrev
-*           Abbreviate a formatted SkyAxis value by skipping leading fields.
-*        astAxisDistance
-*           Find the distance between two SkyAxis values.
-*        astAxisGap
-*           Find a "nice" gap for tabulating SkyAxis values.
-*        astClearAxisFormat
-*           Clear the Format attribute for a SkyAxis.
-*        astGetAxisDirection
-*           Obtain the value of the Direction attribute for a SkyAxis.
-*        astGetAxisFormat
-*           Obtain a pointer to the Format attribute for a SkyAxis.
-*        astGetAxisLabel
-*           Obtain a pointer to the Label attribute for a SkyAxis.
-*        astGetAxisSymbol
-*           Obtain a pointer to the Symbol attribute for a SkyAxis.
-*        astGetAxisUnit
-*           Obtain a pointer to the Unit attribute for a SkyAxis.
-*        astSetAxisFormat
-*           Set a value for the Format attribute of a SkyAxis.
-*        astTestAxisFormat
-*           Test if a value has been set for the Format attribute of a SkyAxis.
-*        astAxisOffset
-*           Add an increment onto a supplied SkyAxis value.
-*        astAxisOverlay
-*           Overlay the attributes of a template SkyAxis on to another Axis.
-*        astSetAttrib
-*           Set an attribute value for a SkyAxis.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-
-*     Protected:
-*        astClearAxisAsTime
-*           Clear the AsTime attribute for a SkyAxis.
-*        astClearAxisCentreZero
-*           Clear the CentreZero attribute for a SkyAxis.
-*        astClearAxisIsLatitude
-*           Clear the IsLatitude attribute for a SkyAxis.
-*        astGetAxisAsTime
-*           Obtain the value of the AsTime attribute for a SkyAxis.
-*        astGetAxisIsLatitude
-*           Obtain the value of the IsLatitude attribute for a SkyAxis.
-*        astGetAxisCentreZero
-*           Obtain the value of the CentreZero attribute for a SkyAxis.
-*        astSetAxisAsTime
-*           Set a value for the AsTime attribute of a SkyAxis.
-*        astSetAxisIsLatitude
-*           Set a value for the IsLatitude attribute of a SkyAxis.
-*        astSetAxisCentreZero
-*           Set a value for the CentreZero attribute of a SkyAxis.
-*        astTestAxisAsTime
-*           Test if a value has been set for the AsTime attribute of a SkyAxis.
-*        astTestAxisIsLatitude
-*           Test if a value has been set for the IsLatitude attribute of a
-*           SkyAxis.
-*        astTestAxisCentreZero
-*           Test if a value has been set for the CentreZero attribute of a
-*           SkyAxis.
-
-*  Other Class Functions:
-*     Public:
-*        astIsASkyAxis
-*           Test class membership.
-*        astSkyAxis
-*           Create an SkyAxis.
-
-*     Protected:
-*        astCheckSkyAxis
-*           Validate class membership.
-*        astInitSkyAxis
-*           Initialise an SkyAxis.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSkyAxis
-*           SkyAxis object type.
-
-*     Protected:
-*        AstSkyAxisVtab
-*           SkyAxis virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     29-MAR-1996 (RFWS):
-*        Original version.
-*     25-APR-1996 (RFWS):
-*        Made all attribute access functions protected.
-*     13-MAY-1996 (RFWS):
-*        Documented over-riding of the astGetAxisDirection method.
-*     26-FEB-1998 (RFWS):
-*        Over-ride the astAxisUnformat method.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitSkyAxisVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "axis.h"                /* Coordinate axes (parent class) */
-
-/* Macros */
-/* ====== */
-/* Define constants used to size global arrays in this module. */
-/* Define numerical constants for use in thie module. */
-#define AST__SKYAXIS_GETAXISFORMAT_BUFF_LEN 50
-#define AST__SKYAXIS_DHMSFORMAT_BUFF_LEN 70
-#define AST__SKYAXIS_DHMSUNIT_BUFF_LEN 17
-#define AST__SKYAXIS_GETATTRIB_BUFF_LEN 50
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-
-/* Type Definitions. */
-/* ================= */
-/* SkyAxis structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstSkyAxis {
-
-/* Attributes inherited from the parent class. */
-   AstAxis axis;                 /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   char *skyformat;              /* Pointer to sky format string */
-   int as_time;                  /* Format angles as time (hours)? */
-   int is_latitude;              /* SkyAxis is a latitude axis? */
-   int centrezero;               /* Normalised range is zero-centred? */
-} AstSkyAxis;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSkyAxisVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstAxisVtab axis_vtab;        /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* GetAxisAsTime)( AstSkyAxis *, int * );
-   int (* GetAxisIsLatitude)( AstSkyAxis *, int * );
-   int (* GetAxisCentreZero)( AstSkyAxis *, int * );
-   int (* TestAxisAsTime)( AstSkyAxis *, int * );
-   int (* TestAxisIsLatitude)( AstSkyAxis *, int * );
-   int (* TestAxisCentreZero)( AstSkyAxis *, int * );
-   void (* ClearAxisAsTime)( AstSkyAxis *, int * );
-   void (* ClearAxisIsLatitude)( AstSkyAxis *, int * );
-   void (* ClearAxisCentreZero)( AstSkyAxis *, int * );
-   void (* SetAxisAsTime)( AstSkyAxis *, int, int * );
-   void (* SetAxisIsLatitude)( AstSkyAxis *, int, int * );
-   void (* SetAxisCentreZero)( AstSkyAxis *, int, int * );
-} AstSkyAxisVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstSkyAxisGlobals {
-   AstSkyAxisVtab Class_Vtab;
-   int Class_Init;
-   char DHmsFormat_Buff[ AST__SKYAXIS_DHMSFORMAT_BUFF_LEN + 1 ];
-   char DHmsUnit_Buff[ AST__SKYAXIS_DHMSUNIT_BUFF_LEN + 1 ];
-   char GetAttrib_Buff[ AST__SKYAXIS_GETATTRIB_BUFF_LEN + 1 ];
-   char GetAxisFormat_Buff[ AST__SKYAXIS_GETAXISFORMAT_BUFF_LEN + 1 ];
-} AstSkyAxisGlobals;
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SkyAxis)          /* Check class membership */
-astPROTO_ISA(SkyAxis)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSkyAxis *astSkyAxis_( const char *, int *, ...);
-#else
-AstSkyAxis *astSkyAxisId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSkyAxis *astInitSkyAxis_( void *, size_t, int, AstSkyAxisVtab *,
-                             const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSkyAxisVtab_( AstSkyAxisVtab *, const char *, int * );
-
-/* Loader. */
-AstSkyAxis *astLoadSkyAxis_( void *, size_t, AstSkyAxisVtab *,
-                             const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitSkyAxisGlobals_( AstSkyAxisGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS)            /* Protected */
-int astGetAxisAsTime_( AstSkyAxis *, int * );
-int astGetAxisIsLatitude_( AstSkyAxis *, int * );
-int astGetAxisCentreZero_( AstSkyAxis *, int * );
-int astTestAxisAsTime_( AstSkyAxis *, int * );
-int astTestAxisIsLatitude_( AstSkyAxis *, int * );
-int astTestAxisCentreZero_( AstSkyAxis *, int * );
-void astClearAxisAsTime_( AstSkyAxis *, int * );
-void astClearAxisIsLatitude_( AstSkyAxis *, int * );
-void astClearAxisCentreZero_( AstSkyAxis *, int * );
-void astSetAxisAsTime_( AstSkyAxis *, int, int * );
-void astSetAxisIsLatitude_( AstSkyAxis *, int, int * );
-void astSetAxisCentreZero_( AstSkyAxis *, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSkyAxis(this) astINVOKE_CHECK(SkyAxis,this,0)
-#define astVerifySkyAxis(this) astINVOKE_CHECK(SkyAxis,this,1)
-
-/* Test class membership. */
-#define astIsASkyAxis(this) astINVOKE_ISA(SkyAxis,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSkyAxis astINVOKE(F,astSkyAxis_)
-#else
-#define astSkyAxis astINVOKE(F,astSkyAxisId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSkyAxis(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSkyAxis_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSkyAxisVtab(vtab,name) astINVOKE(V,astInitSkyAxisVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSkyAxis(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSkyAxis_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSkyAxis to validate SkyAxis pointers
-   before use. This provides a contextual error report if a pointer to
-   the wrong sort of object is supplied. */
-#if defined(astCLASS)            /* Protected */
-#define astClearAxisAsTime(this) \
-astINVOKE(V,astClearAxisAsTime_(astCheckSkyAxis(this),STATUS_PTR))
-#define astClearAxisIsLatitude(this) \
-astINVOKE(V,astClearAxisIsLatitude_(astCheckSkyAxis(this),STATUS_PTR))
-#define astGetAxisAsTime(this) \
-astINVOKE(V,astGetAxisAsTime_(astCheckSkyAxis(this),STATUS_PTR))
-#define astGetAxisIsLatitude(this) \
-astINVOKE(V,astGetAxisIsLatitude_(astCheckSkyAxis(this),STATUS_PTR))
-#define astSetAxisAsTime(this,value) \
-astINVOKE(V,astSetAxisAsTime_(astCheckSkyAxis(this),value,STATUS_PTR))
-#define astSetAxisIsLatitude(this,value) \
-astINVOKE(V,astSetAxisIsLatitude_(astCheckSkyAxis(this),value,STATUS_PTR))
-#define astTestAxisAsTime(this) \
-astINVOKE(V,astTestAxisAsTime_(astCheckSkyAxis(this),STATUS_PTR))
-#define astTestAxisIsLatitude(this) \
-astINVOKE(V,astTestAxisIsLatitude_(astCheckSkyAxis(this),STATUS_PTR))
-
-#define astClearAxisCentreZero(this) \
-astINVOKE(V,astClearAxisCentreZero_(astCheckSkyAxis(this),STATUS_PTR))
-#define astGetAxisCentreZero(this) \
-astINVOKE(V,astGetAxisCentreZero_(astCheckSkyAxis(this),STATUS_PTR))
-#define astSetAxisCentreZero(this,value) \
-astINVOKE(V,astSetAxisCentreZero_(astCheckSkyAxis(this),value,STATUS_PTR))
-#define astTestAxisCentreZero(this) \
-astINVOKE(V,astTestAxisCentreZero_(astCheckSkyAxis(this),STATUS_PTR))
-
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/skyframe.c b/ast-5.3-1/skyframe.c
deleted file mode 100644
index 0641b6d..0000000
--- a/ast-5.3-1/skyframe.c
+++ /dev/null
@@ -1,11701 +0,0 @@
-/*
-*class++
-*  Name:
-*     SkyFrame
-
-*  Purpose:
-*     Celestial coordinate system description.
-
-*  Constructor Function:
-c     astSkyFrame
-f     AST_SKYFRAME
-
-*  Description:
-*     A SkyFrame is a specialised form of Frame which describes
-*     celestial longitude/latitude coordinate systems. The particular
-*     celestial coordinate system to be represented is specified by
-*     setting the SkyFrame's System attribute (currently, the default
-*     is ICRS) qualified, as necessary, by a mean Equinox value and/or
-*     an Epoch.
-*
-*     For each of the supported celestial coordinate systems, a SkyFrame
-*     can apply an optional shift of origin to create a coordinate system 
-*     representing offsets within the celestial coordinate system from some 
-*     specified reference point. This offset coordinate system can also be 
-*     rotated to define new longitude and latitude axes. See attributes 
-*     SkyRef, SkyRefIs, SkyRefP and AlignOffset.
-*
-*     All the coordinate values used by a SkyFrame are in
-*     radians. These may be formatted in more conventional ways for
-c     display by using astFormat.
-f     display by using AST_FORMAT.
-
-*  Inheritance:
-*     The SkyFrame class inherits from the Frame class.
-
-*  Attributes:
-*     In addition to those attributes common to all Frames, every
-*     SkyFrame also has the following attributes:
-*
-*     - AlignOffset: Align SkyFrames using the offset coordinate system? 
-*     - AsTime(axis): Format celestial coordinates as times?
-*     - Equinox: Epoch of the mean equinox
-*     - LatAxis: Index of the latitude axis
-*     - LonAxis: Index of the longitude axis
-*     - NegLon: Display longitude values in the range [-pi,pi]?
-*     - Projection: Sky projection description.
-*     - SkyRef: Position defining location of the offset coordinate system
-*     - SkyRefIs: Selects the nature of the offset coordinate system
-*     - SkyRefP: Position defining orientation of the offset coordinate system
-
-*  Functions:
-c     The SkyFrame class does not define any new functions beyond those
-f     The SkyFrame class does not define any new routines beyond those
-*     which are applicable to all Frames.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     4-MAR-1996 (RFWS):
-*        Original version.
-*     17-MAY-1996 (RFWS):
-*        Tidied up, etc.
-*     31-JUL-1996 (RFWS):
-*        Added support for attributes and a public interface.
-*     11-SEP-1996 (RFWS):
-*        Added Gap (written by DSB).
-*     24-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     27-FEB-1997 (RFWS):
-*        Improved the public prologues.
-*     27-MAY-1997 (RFWS):
-*        Modified to use a new public interface to the SlaMap class
-*        and to use the astSimplify method to remove redundant
-*        conversions.
-*     16-JUN-1997 (RFWS):
-*        Fixed bug in axis associations returned by astMatch if axes
-*        were swapped.
-*     16-JUL-1997 (RFWS):
-*        Added Projection attribute.
-*     14-NOV-1997 (RFWS):
-*        Corrected the omission of axis permutations from astNorm.
-*     21-JAN-1998 (RFWS):
-*        Ensure that Title and Domain values appropriate to a SkyFrame
-*        are preserved if a Frame result is generated by SubFrame.
-*     26-FEB-1998 (RFWS):
-*        Over-ride the astUnformat method.
-*     3-APR-2001 (DSB):
-*        Added "Unknown" option for the System attribute. Added read-only
-*        attributes LatAxis and LonAxis.
-*     21-JUN-2001 (DSB):
-*        Added astAngle and astOffset2.
-*     4-SEP-2001 (DSB):
-*        Added NegLon attribute, and astResolve method.
-*     9-SEP-2001 (DSB):
-*        Added astBear method.
-*     21-SEP-2001 (DSB):
-*        Removed astBear method.
-*     10-OCT-2002 (DSB):
-*        Moved definitions of macros for SkyFrame system values from
-*        this file into skyframe.h.
-*     24-OCT-2002 (DSB):
-*        Modified MakeSkyMapping so that any two SkyFrames with system=unknown
-*        are assumed to be related by a UnitMap. previously, they were
-*        considered to be unrelated, resulting in no ability to convert from 
-*        one to the other. This could result for instance in astConvert
-*        being unable to find a maping from a SkyFrame to itself.
-*     15-NOV-2002 (DSB):
-*        Moved System and Epoch attributes to the Frame class.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitSkyFrameVtab
-*        method.
-*     11-JUN-2003 (DSB):
-*        Added ICRS option for System attribute, and made it the default
-*        in place of FK5.
-*     27-SEP-2003 (DSB):
-*        Added HELIOECLIPTIC option for System attribute.
-*     19-APR-2004 (DSB):
-*        Added SkyRef, SkyRefIs, SkyRefP and AlignOffset attributes.
-*     8-SEP-2004 (DSB):
-*        Added astResolvePoints method.
-*     2-DEC-2004 (DSB):
-*        Added System "J2000"
-*     27-JAN-2005 (DSB):
-*        Fix memory leaks in astLoadSkyFrame_ and Match.
-*     7-APR-2005 (DSB):
-*        Allow SkyRefIs to be set to "Ignored".
-*     12-MAY-2005 (DSB):
-*        Override astNormBox method.
-*     15-AUG-2005 (DSB):
-*        Added AZEL system.
-*     13-SEP-2005 (DSB):
-*        Override astClearSystem so that SkyRef/SkyRefPcan be converted
-*        from the original System to the default System.
-*     19-SEP-2005 (DSB):
-*        Changed default for SkyRefIs from ORIGIN to IGNORED.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     22-FEB-2006 (DSB):
-*        Store the Local Apparent Sidereal Time in the SkyFrame structure
-*        in order to avoid expensive re-computations.
-*     22-AUG-2006 (DSB):
-*        Ensure the cached Local Apparent Siderial Time is initialised
-*        when initialising or loading a SkyFrame.
-*     22-SEP-2006 (DSB):
-*        Report an error in SetSystem if it is not possible to convert
-*        from old to new systems.
-*     3-OCT-2006 (DSB):
-*        Added Equation of Equinoxes to the SkyFrame structure.
-*     6-OCT-2006 (DSB):
-*        - Guard against annulling null pointers in subFrame.
-*        - Add Dut1 attribute
-*        - Use linear approximation for LAST over short periods (less
-*          than 0.001 of a day)
-*        - Remove Equation of Equinoxes from the SkyFrame structure.
-*     10-OCT-2006 (DSB):
-*        Use "AlOff" instead of "AlignOffset" as the external channel name
-*        for the AlignOffset attribute. The longer form exceeded the
-*        limit that can be used by the Channel class.
-*     14-OCT-2006 (DSB):
-*        - Move Dut1 attribute to the Frame class.
-*        - Use the TimeFrame class to do the TDB->LAST conversions.
-*     17-JAN-2007 (DSB):
-*        - Use a UnitMap to align offset coordinate systems in two
-*        SkyFrames, regardless of other attribute values.
-*        - Only align in offset coordinates if both target and template
-*        have a non-zero value for AlignOffset.
-*     23-JAN-2007 (DSB):
-*        Modified so that a SkyFrame can be used as a template to find a
-*        SkyFrame contained within a CmpFrame. This involves changes in
-*        Match and the removal of the local versions of SetMaxAxes and
-*        SetMinAxes.
-*     4-JUL-2007 (DSB):
-*        Modified GetLast to use the correct solar to sidereal conversion
-*        factor. As a consequence the largest acceptable epoch gap before 
-*        the LAST needs to be recalculated has been increased.
-*     11-JUL-2007 (DSB):
-*        Override astSetEpoch and astClearEpoch by implementations which
-*        update the LAST value stored in the SkyFrame.
-*     7-AUG-2007 (DSB):
-*        - Set a value for the CentreZero attribute when extracting a
-*        SkyAxis from a SkyFrame in function SubFrame.
-*        - In SubFrame, clear extended attributes such as System after
-*        all axis attributes have been "fixated.
-*     30-AUG-2007 (DSB):
-*        Override astSetDut1 and astClearDut1 by implementations which
-*        update the LAST value stored in the SkyFrame.
-*     31-AUG-2007 (DSB):
-*        - Cache the magnitude of the diurnal aberration vector in the
-*        SkyFrame structure for use when correcting for diurnal aberration.
-*        - Modify the azel conversions to include correction for diurnal 
-*        aberration.
-*        - Override astClearObsLat and astSetObsLat by implementations which
-*        reset the magnitude of the diurnal aberration vector.
-*     3-SEP-2007 (DSB):
-*        In SubFrame, since AlignSystem is extended by the SkyFrame class
-*        it needs to be cleared before invoking the parent SubFrame
-*        method in cases where the result Frame is not a SkyFrame.
-*     2-OCT-2007 (DSB):
-*        In Overlay, clear AlignSystem as well as System before calling
-*        the parent overlay method.
-*     10-OCT-2007 (DSB):
-*        In MakeSkyMapping, correct the usage of variables "system" and 
-*        "align_sys" when aligning in AZEL.
-*     18-OCT-2007 (DSB):
-*        Compare target and template AlignSystem values in Match, rather
-*        than comparing target and result AlignSystem values in MakeSkyMapping
-*        (since result is basically a copy of target).
-*     27-NOV-2007 (DSB):
-*        - Modify SetSystem to ensure that SkyRef and SkyRefP position are
-*        always transformed as absolute values, rather than as offset
-*        values.
-*        - Modify SubMatch so that a value of zero is assumed for
-*        AlignOffset when restoring thre integrity of a FrameSet.
-*     15-DEC-2008 (DSB):
-*        Improve calculation of approximate Local Apparent Sidereal time
-*        by finding and using the ratio of solar to sidereal time
-*        independently for each approximation period.
-*     14-JAN-2009 (DSB):
-*        Override the astIntersect method.
-*     21-JAN-2009 (DSB):
-*        Fix mis-use of results buffers for GetFormat and GetAttrib.
-*     16-JUN-2009 (DSB):
-*        All sky coordinate systems currently supported by SkyFrame are
-*        left handed. So fix GetDirection method to return zero for all 
-*        longitude axes and 1 for all latitude axes.
-*     18-JUN-2009 (DSB):
-*        Incorporate the new ObsAlt attribute.
-*     23-SEP-2009 (DSB):
-*        Allow some rounding error when checking for changes in SetObsLon
-*        and SetDut1. This reduces the number of times the expensive
-*        calculation of LAST is performed.
-*     24-SEP-2009 (DSB);
-*        Create a static cache of LAST values stored in the class virtual 
-*        function table. These are used in preference to calculating a new 
-*        value from scratch.
-*     25-SEP-2009 (DSB);
-*        Do not calculate LAST until it is needed.
-*     12-OCT-2009 (DSB);
-*        - Handle 2.PI->0 discontinuity in cached LAST values.
-*     12-OCT-2009 (BED);
-*        - Fix bug in caching LAST value.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SkyFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__FK4
-#define LAST_SYSTEM AST__AZEL
-
-/* Speed of light (AU per day) (from SLA_AOPPA) */
-#define C 173.14463331
-
-/* Ratio between solar and sidereal time (from SLA_AOPPA) */
-#define SOLSID 1.00273790935
-
-/* Define values for the different values of the SkyRefIs attribute. */
-#define BAD_REF 0
-#define POLE_REF 1
-#define ORIGIN_REF 2
-#define IGNORED_REF 3
-#define POLE_STRING "Pole"
-#define ORIGIN_STRING "Origin"
-#define IGNORED_STRING "Ignored"
-
-/* Define other numerical constants for use in this module. */
-#define GETATTRIB_BUFF_LEN 200   
-#define GETFORMAT_BUFF_LEN 50    
-#define GETLABEL_BUFF_LEN 40
-#define GETSYMBOL_BUFF_LEN 20
-#define GETTITLE_BUFF_LEN 200
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     MAKE_CLEAR(attr,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the SkyFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstSkyFrame *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstSkyFrame *this, int axis )
-*
-*     which implement a method for clearing a single value in a specified 
-*     multi-valued attribute for an axis of a SkyFrame.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. Label in "astClearLabelAt").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstSkyFrame *this, int axis, int *status ) { \
-\
-   int axis_p; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate and permute the axis index. */ \
-   axis_p = astValidateAxis( this, axis, "astClear" #attr ); \
-\
-/* Assign the "clear" value. */ \
-   if( astOK ) { \
-      this->component[ axis_p ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstSkyFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,SkyFrame,Clear##attr))( this, axis, status ); \
-}   
-
-
-/*
-*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     MAKE_GET(attr,type,bad_value,assign,nval)
-
-*  Class Membership:
-*     Defined by the SkyFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstSkyFrame *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( AstSkyFrame *this, int axis )
-*
-*     which implement a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a SkyFrame.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstSkyFrame *this, int axis, int *status ) { \
-   int axis_p;                   /* Permuted axis index */ \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */\
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate and permute the axis index. */ \
-   axis_p = astValidateAxis( this, axis, "astGet" #attr ); \
-\
-/* Assign the result value. */ \
-   if( astOK ) { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attr##_( AstSkyFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,SkyFrame,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute 
-*     for a SkyFrame.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     MAKE_SET(attr,type,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the SkyFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstSkyFrame *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstSkyFrame *this, int axis, <Type> value )
-*
-*     which implement a method for setting a single value in a specified
-*     multi-valued attribute for a SkyFrame.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. Label in "astSetLabelAt").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      nval
-*         Specifies the number of values in the multi-valued attribute. The
-*         "axis" values supplied to the created function should be in the
-*         range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstSkyFrame *this, int axis, type value, int *status ) { \
-\
-   int axis_p; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate and permute the axis index. */ \
-   axis_p = astValidateAxis( this, axis, "astSet" #attr ); \
-\
-/* Store the new value in the structure component. */ \
-   if( astOK ) { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstSkyFrame *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,SkyFrame,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if a single value has been set in a 
-*     multi-valued attribute for a class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     MAKE_TEST(attr,assign,nval)
-
-*  Class Membership:
-*     Defined by the SkyFrame class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstSkyFrame *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstSkyFrame *this, int axis )
-*
-*     which implement a method for testing if a single value in a specified 
-*     multi-valued attribute has been set for a class.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. Label in "astTestLabelAt").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value. This can use the string "axis" to represent the zero-based
-*         index of the value within the attribute.
-*      nval
-*         Specifies the number of values in the multi-valued attribute. The
-*         "axis" values supplied to the created function should be in the
-*         range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstSkyFrame *this, int axis, int *status ) { \
-   int result;                   /* Value to return */ \
-   int axis_p;                   /* Permuted axis index */ \
-\
-/* Initialise */ \
-   result =0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate and permute the axis index. */ \
-   axis_p = astValidateAxis( this, axis, "astTest" #attr ); \
-\
-/* Assign the result value. */ \
-   if( astOK ) { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstSkyFrame *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,SkyFrame,Test##attr))( this, axis, status ); \
-}
-
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points (for AST__BAD) */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Coordinate permutations */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "slamap.h"              /* SLALIB sky coordinate Mappings */
-#include "timemap.h"             /* Time conversions */
-#include "skyaxis.h"             /* Sky axes */
-#include "frame.h"               /* Parent Frame class */
-#include "matrixmap.h"           /* Matrix multiplication */
-#include "sphmap.h"              /* Cartesian<->Spherical transformations */
-#include "skyframe.h"            /* Interface definition for this class */
-#include "pal.h"                 /* SLALIB library interface */
-#include "wcsmap.h"              /* Factors of PI */
-#include "timeframe.h"           /* Time system transformations */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Type Definitions. */
-/* ================= */
-
-/* Cached Line structure. */
-/* ---------------------- */
-/* This structure contains information describing a line segment within a
-   SkyFrame. It differs from the AstLineDef defined in frame.h because
-   positions are represented by 3D (x,y,z) cartesian coords rather than
-   2D (long,lat) coords. */
-
-typedef struct SkyLineDef {
-   AstFrame *frame;            /* Pointer to Frame in which the line is defined */
-   double length;              /* Line length */
-   int infinite;               /* Disregard the start and end of the line? */
-   double start[3];            /* Unit vector defining start of line */
-   double end[3];              /* Unit vector defining end of line */
-   double dir[3];              /* Unit vector defining line direction */
-   double q[3];                /* Unit vector perpendicular to line */
-   double start_2d[2];
-   double end_2d[2];
-} SkyLineDef;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
-   class. */
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_format)( AstFrame *, int, double, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getformat)( AstFrame *, int, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static double (* parent_gap)( AstFrame *, int, double, int *, int * );
-static double (* parent_getbottom)( AstFrame *, int, int * );
-static double (* parent_getepoch)( AstFrame *, int * );
-static double (* parent_gettop)( AstFrame *, int, int * );
-static int (* parent_getdirection)( AstFrame *, int, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static int (* parent_testformat)( AstFrame *, int, int * );
-static int (* parent_unformat)( AstFrame *, int, const char *, double *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_cleardut1)( AstFrame *, int * );
-static void (* parent_clearepoch)( AstFrame *, int * );
-static void (* parent_clearformat)( AstFrame *, int, int * );
-static void (* parent_clearobsalt)( AstFrame *, int * );
-static void (* parent_clearobslat)( AstFrame *, int * );
-static void (* parent_clearobslon)( AstFrame *, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setdut1)( AstFrame *, double, int * );
-static void (* parent_setepoch)( AstFrame *, double, int * );
-static void (* parent_setformat)( AstFrame *, int, const char *, int * );
-static void (* parent_setobsalt)( AstFrame *, double, int * );
-static void (* parent_setobslat)( AstFrame *, double, int * );
-static void (* parent_setobslon)( AstFrame *, double, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-
-/* Factors for converting between hours, degrees and radians. */
-static double hr2rad;
-static double deg2rad;
-static double pi;
-static double piby2;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetFormat_Buff[ 0 ] = 0; \
-   globals->GetLabel_Buff[ 0 ] = 0; \
-   globals->GetSymbol_Buff[ 0 ] = 0; \
-   globals->GetTitle_Buff[ 0 ] = 0; \
-   globals->GetTitle_Buff2[ 0 ] = 0; \
-   globals->TDBFrame = NULL; \
-   globals->LASTFrame = NULL; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SkyFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SkyFrame,Class_Init)
-#define class_vtab astGLOBAL(SkyFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(SkyFrame,GetAttrib_Buff)
-#define getformat_buff astGLOBAL(SkyFrame,GetFormat_Buff)
-#define getlabel_buff astGLOBAL(SkyFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(SkyFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(SkyFrame,GetTitle_Buff)
-#define gettitle_buff2 astGLOBAL(SkyFrame,GetTitle_Buff2)
-#define tdbframe astGLOBAL(SkyFrame,TDBFrame)
-#define lastframe astGLOBAL(SkyFrame,LASTFrame)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */ 
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-/* Buffer returned by GetFormat. */ 
-static char getformat_buff[ GETFORMAT_BUFF_LEN + 1 ];
-
-/* Default GetLabel string buffer */ 
-static char getlabel_buff[ GETLABEL_BUFF_LEN + 1 ]; 
-
-/* Default GetSymbol buffer */ 
-static char getsymbol_buff[ GETSYMBOL_BUFF_LEN + 1 ]; 
-
-/* Default Title string buffer */
-static char gettitle_buff[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ]; 
-static char gettitle_buff2[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ]; 
-
-/* TimeFrames for doing TDB<->LAST conversions. */
-static AstTimeFrame *tdbframe = NULL;
-static AstTimeFrame *lastframe = NULL;
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSkyFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstLineDef *LineDef( AstFrame *, const double[2], const double[2], int * );
-static AstMapping *OffsetMap( AstSkyFrame *, int * );
-static AstPointSet *ResolvePoints( AstFrame *, const double [], const double [], AstPointSet *, AstPointSet *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType GetSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetFormat( AstFrame *, int, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetProjection( AstSkyFrame *, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static double Angle( AstFrame *, const double[], const double[], const double[], int * );
-static double CalcLAST( AstSkyFrame *, double, double, double, double, double, int * );
-static double Distance( AstFrame *, const double[], const double[], int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-static double GetBottom( AstFrame *, int, int * );
-static double GetCachedLAST( AstSkyFrame *, double, double, double, double, double, int * );
-static double GetEpoch( AstFrame *, int * );
-static double GetEquinox( AstSkyFrame *, int * );
-static void SetCachedLAST( AstSkyFrame *, double, double, double, double, double, double, int * );
-static void SetLast( AstSkyFrame *, int * );
-static double GetTop( AstFrame *, int, int * );
-static double Offset2( AstFrame *, const double[2], double, double, double[2], int * );
-static double GetDiurab( AstSkyFrame *, int * );
-static double GetLAST( AstSkyFrame *, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int GetAsTime( AstSkyFrame *, int, int * );
-static int GetDirection( AstFrame *, int, int * );
-static int GetLatAxis( AstSkyFrame *, int * );
-static int GetLonAxis( AstSkyFrame *, int * );
-static int GetNegLon( AstSkyFrame *, int * );
-static int GetObjSize( AstObject *, int * );
-static int IsEquatorial( AstSystemType, int * );
-static int LineContains( AstFrame *, AstLineDef *, int, double *, int * );
-static int LineCrossing( AstFrame *, AstLineDef *, AstLineDef *, double **, int * );
-static int LineIncludes( SkyLineDef *, double[3], int * );
-static int MakeSkyMapping( AstSkyFrame *, AstSkyFrame *, AstSystemType, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static int TestAsTime( AstSkyFrame *, int, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestEquinox( AstSkyFrame *, int * );
-static int TestNegLon( AstSkyFrame *, int * );
-static int TestProjection( AstSkyFrame *, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static void ClearAsTime( AstSkyFrame *, int, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearDut1( AstFrame *, int * );
-static void ClearEpoch( AstFrame *, int * );
-static void ClearEquinox( AstSkyFrame *, int * );
-static void ClearNegLon( AstSkyFrame *, int * );
-static void ClearObsAlt( AstFrame *, int * );
-static void ClearObsLat( AstFrame *, int * );
-static void ClearObsLon( AstFrame *, int * );
-static void ClearProjection( AstSkyFrame *, int * );
-static void ClearSystem( AstFrame *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Intersect( AstFrame *, const double[2], const double[2], const double[2], const double[2], double[2], int * );
-static void LineOffset( AstFrame *, AstLineDef *, double, double, double[2], int * );
-static void MatchAxesX( AstFrame *, AstFrame *, int *, int * );
-static void Norm( AstFrame *, double[], int * );
-static void NormBox( AstFrame *, double[], double[], AstMapping *, int * );
-static void Offset( AstFrame *, const double[], const double[], double, double[], int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void Resolve( AstFrame *, const double [], const double [], const double [], double [], double *, double *, int * );
-static void SetAsTime( AstSkyFrame *, int, int, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetDut1( AstFrame *, double, int * );
-static void SetEpoch( AstFrame *, double, int * );
-static void SetEquinox( AstSkyFrame *, double, int * );
-static void SetNegLon( AstSkyFrame *, int, int * );
-static void SetObsAlt( AstFrame *, double, int * );
-static void SetObsLat( AstFrame *, double, int * );
-static void SetObsLon( AstFrame *, double, int * );
-static void SetProjection( AstSkyFrame *, const char *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void Shapp( double, double *, double *, double, double *, int * );
-static void Shcal( double, double, double, double *, double *, int * );
-static void VerifyMSMAttrs( AstSkyFrame *, AstSkyFrame *, int, const char *, const char *, int * );
-
-static double GetSkyRef( AstSkyFrame *, int, int * );
-static int TestSkyRef( AstSkyFrame *, int, int * );
-static void SetSkyRef( AstSkyFrame *, int, double, int * );
-static void ClearSkyRef( AstSkyFrame *, int, int * );
-
-static double GetSkyRefP( AstSkyFrame *, int, int * );
-static int TestSkyRefP( AstSkyFrame *, int, int * );
-static void SetSkyRefP( AstSkyFrame *, int, double, int * );
-static void ClearSkyRefP( AstSkyFrame *, int, int * );
-
-static int GetSkyRefIs( AstSkyFrame *, int * );
-static int TestSkyRefIs( AstSkyFrame *, int * );
-static void SetSkyRefIs( AstSkyFrame *, int, int * );
-static void ClearSkyRefIs( AstSkyFrame *, int * );
-
-static int GetAlignOffset( AstSkyFrame *, int * );
-static int TestAlignOffset( AstSkyFrame *, int * );
-static void SetAlignOffset( AstSkyFrame *, int, int * );
-static void ClearAlignOffset( AstSkyFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-static double Angle( AstFrame *this_frame, const double a[], 
-                     const double b[], const double c[], int *status ) {
-/*
-*  Name:
-*     Angle
-
-*  Purpose:
-*     Calculate the angle subtended by two points at a third point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double Angle( AstFrame *this_frame, const double a[], 
-*                   const double b[], const double c[], int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astAngle method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the angle at point B between the line
-*     joining points A and B, and the line joining points C 
-*     and B. These lines will in fact be geodesic curves (great circles).
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     a 
-*        An array of double, with one element for each SkyFrame axis,
-*        containing the coordinates of the first point.
-*     b 
-*        An array of double, with one element for each SkyFrame axis,
-*        containing the coordinates of the second point.
-*     c 
-*        An array of double, with one element for each SkyFrame axis,
-*        containing the coordinates of the third point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The angle in radians, from the line AB to the line CB, in
-*     the range $\pm \pi$ with positive rotation is in the same sense 
-*     as rotation from axis 2 to axis 1.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input coordinates has this value.
-*     - A "bad" value will also be returned if points A and B are
-*     co-incident, or if points B and C are co-incident.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   const int *perm;              /* Axis permutation array */
-   double aa[ 2 ];               /* Permuted a coordinates */
-   double anga;                  /* Angle from north to the line BA */
-   double angc;                  /* Angle from north to the line BC */
-   double bb[ 2 ];               /* Permuted b coordinates */
-   double cc[ 2 ];               /* Permuted c coordinates */
-   double result;                /* Value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Check that all supplied coordinates are OK. */
-      if ( ( a[ 0 ] != AST__BAD ) && ( a[ 1 ] != AST__BAD ) &&
-           ( b[ 0 ] != AST__BAD ) && ( b[ 1 ] != AST__BAD ) &&
-           ( c[ 0 ] != AST__BAD ) && ( c[ 1 ] != AST__BAD ) ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the
-   three points in the required (longitude,latitude) order. */
-         aa[ perm[ 0 ] ] = a[ 0 ];
-         aa[ perm[ 1 ] ] = a[ 1 ];
-         bb[ perm[ 0 ] ] = b[ 0 ];
-         bb[ perm[ 1 ] ] = b[ 1 ];
-         cc[ perm[ 0 ] ] = c[ 0 ];
-         cc[ perm[ 1 ] ] = c[ 1 ];
-
-/* Check that A and B are not co-incident. */
-         if( aa[ 0 ] != bb[ 0 ] || aa[ 1 ] != bb[ 1 ] ) {
-
-/* Check that C and B are not co-incident. */
-            if( cc[ 0 ] != bb[ 0 ] || cc[ 1 ] != bb[ 1 ] ) {
-
-/* Find the angle from north to the line BA. */
-               anga = palSlaDbear( bb[ 0 ], bb[ 1 ], aa[ 0 ], aa[ 1 ] );
-
-/* Find the angle from north to the line BC. */
-               angc = palSlaDbear( bb[ 0 ], bb[ 1 ], cc[ 0 ], cc[ 1 ] );
-
-/* Find the difference. */
-               result = angc - anga;
-
-/* This value is the angle from north, but we want the angle from axis 2.
-   If the axes have been swapped so that axis 2 is actually the longitude
-   axis, then we need to correct this result. */
-               if( perm[ 0 ] != 0 ) result = piby2 - result;
-
-/* Fold the result into the range +/- PI. */
-               result = palSlaDrange( result );
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double CalcLAST( AstSkyFrame *this, double epoch, double obslon,
-                        double obslat, double obsalt, double dut1, 
-                        int *status ) {
-/*
-*  Name:
-*     CalcLAST
-
-*  Purpose:
-*     Calculate the Local Appearent Sidereal Time for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double CalcLAST( AstSkyFrame *this, double epoch, double obslon,
-*                      double obslat, double obsalt, double dut1, 
-*                      int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function calculates and returns the Local Apparent Sidereal Time 
-*     at the given epoch, etc. 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     epoch
-*        The epoch (MJD).
-*     obslon
-*        Observatory geodetic longitude (radians)
-*     obslat
-*        Observatory geodetic latitude (radians)
-*     obsalt
-*        Observatory geodetic altitude (metres)
-*     dut1 
-*        The UT1-UTC correction, in seconds.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    The Local Apparent Sidereal Time, in radians.
-
-*  Notes:
-*     -  A value of AST__BAD will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS /* Declare the thread specific global data */
-   AstFrameSet *fs;   /* Mapping from TDB offset to LAST offset */
-   double epoch0;     /* Supplied epoch value */
-   double result;     /* Returned LAST value */
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* See if the required LAST value can be determined from the cached LAST
-   values in the SkyFrame virtual function table. */
-   result = GetCachedLAST( this, epoch, obslon, obslat, obsalt, dut1,
-                           status );
-
-/* If not, we do an exact calculation from scratch. */
-   if( result == AST__BAD ) {
-
-/* If not yet done, create two TimeFrames. Note, this is done here 
-   rather than in astInitSkyFrameVtab in order to avoid infinite vtab
-   initialisation loops (caused by the TimeFrame class containing a 
-   static SkyFrame). */
-      if( ! tdbframe ) {
-         astBeginPM;
-         tdbframe = astTimeFrame( "system=mjd,timescale=tdb", status );
-         lastframe = astTimeFrame( "system=mjd,timescale=last", status );
-         astEndPM;
-      }
-
-/* For better accuracy, use this integer part of the epoch as the origin of 
-   the two TimeFrames. */
-      astSetTimeOrigin( tdbframe, (int) epoch );
-      astSetTimeOrigin( lastframe, (int) epoch );
-
-/* Convert the absolute Epoch value to an offset from the above origin. */
-      epoch0 = epoch;
-      epoch -= (int) epoch;
-
-/* Store the observers position in the two TimeFrames. */
-      astSetObsLon( tdbframe, obslon );
-      astSetObsLon( lastframe, obslon );
-   
-      astSetObsLat( tdbframe, obslat );
-      astSetObsLat( lastframe, obslat );
-   
-      astSetObsAlt( tdbframe, obsalt );
-      astSetObsAlt( lastframe, obsalt );
-
-/* Store the DUT1 value. */
-      astSetDut1( tdbframe, dut1 );
-      astSetDut1( lastframe, dut1 );
-
-/* Get the conversion from tdb mjd offset to last mjd offset. */
-      fs = astConvert( tdbframe, lastframe, "" );
-
-/* Use it to transform the SkyFrame Epoch from TDB offset to LAST offset. */
-      astTran1( fs, 1, &epoch, 1, &epoch );
-      fs = astAnnul( fs );
-
-/* Convert the LAST offset from days to radians. */
-      result = ( epoch - (int) epoch )*2*AST__DPI;
-
-/* Cache the new LAST value in the SkyFrame virtual function table. */
-      SetCachedLAST( this, result, epoch0, obslon, obslat, obsalt, dut1,
-                     status );
-   }
-
-/* Return the required LAST value. */
-   return result;
-}
-
-static void ClearAsTime( AstSkyFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     ClearAsTime
-
-*  Purpose:
-*     Clear the value of the AsTime attribute for a SkyFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearAsTime( AstSkyFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function clears any value that has been set for the AsTime
-*     attribute for a specified axis of a SkyFrame. This attribute indicates
-*     whether axis values should be formatted as times (as opposed to angles)
-*     by default.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Index of the axis for which the value is to be cleared (zero based).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astClearAsTime" );
-
-/* Obtain a pointer to the Axis object. */
-   ax = astGetAxis( this, axis );
-
-/* If the Axis is a SkyAxis, clear the AsTime attribute (if it is not a
-   SkyAxis, it will not have this attribute anyway). */
-   if ( astIsASkyAxis( ax ) ) astClearAxisAsTime( ax );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     SkyFrame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   int axis;                     /* SkyFrame axis number */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* AsTime(axis). */
-/* ------------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( attrib, "astime(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      astClearAsTime( this, axis - 1 );
-
-/* Equinox. */
-/* -------- */
-   } else if ( !strcmp( attrib, "equinox" ) ) {
-      astClearEquinox( this );
-
-/* NegLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "neglon" ) ) {
-      astClearNegLon( this );
-
-/* Projection. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "projection" ) ) {
-      astClearProjection( this );
-
-/* SkyRef. */
-/* ------- */
-   } else if ( !strcmp( attrib, "skyref" ) ) {
-      astClearSkyRef( this, 0 );
-      astClearSkyRef( this, 1 );
-
-/* SkyRef(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( attrib, "skyref(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      astClearSkyRef( this, axis - 1 );
-
-/* SkyRefP. */
-/* -------- */
-   } else if ( !strcmp( attrib, "skyrefp" ) ) {
-      astClearSkyRefP( this, 0 );
-      astClearSkyRefP( this, 1 );
-
-/* SkyRefP(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( attrib, "skyrefp(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      astClearSkyRefP( this, axis - 1 );
-
-/* SkyRefIs. */
-/* --------- */
-   } else if ( !strcmp( attrib, "skyrefis" ) ) {
-      astClearSkyRefIs( this );
-
-/* AlignOffset. */
-/* ------------ */
-   } else if ( !strcmp( attrib, "alignoffset" ) ) {
-      astClearAlignOffset( this );
-
-/* If the name was not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then report an
-   error. */
-   } else if ( !strcmp( attrib, "lataxis" ) ||
-               !strcmp( attrib, "lonaxis" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearDut1( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     ClearDut1
-
-*  Purpose:
-*     Clear the value of the Dut1 attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearDut1( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearDut1 method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the Dut1 value and updates the LAST value
-*     stored in the SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original value */
-   orig = astGetDut1( this );
-
-/* Invoke the parent method to clear the Frame Dut1 */
-   (*parent_cleardut1)( this, status );
-
-/* If the DUT1 value has changed significantly, indicate that the LAST value 
-   will need to be re-calculated when it is next needed. */
-   if( fabs( orig - astGetDut1( this ) ) > 1.0E-6 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-   }
-}
-
-static void ClearEpoch( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearEpoch
-
-*  Purpose:
-*     Clear the value of the Epoch attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearEpoch( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearEpoch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the Epoch value and updates the LAST value
-*     stored in the SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   double orig;                  /* Original epoch */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Save ther original epoch */
-   orig = astGetEpoch( this_frame );
-
-/* Invoke the parent method to clear the Frame epoch. */
-   (*parent_clearepoch)( this_frame, status );
-
-/* If the Epoch value has changed significantly, indicate that the LAST value 
-   will need to be re-calculated when it is next needed. */
-   if( fabs( orig - astGetEpoch( this ) ) > 1.0E-8 ) {
-      this->last = AST__BAD;
-      this->eplast = AST__BAD;
-      this->klast = AST__BAD;
-   }
-}
-
-static void ClearObsAlt( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     ClearObsAlt
-
-*  Purpose:
-*     Clear the value of the ObsAlt attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearObsAlt( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearObsAlt method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the ObsAlt value.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original value */
-   orig = astGetObsAlt( this );
-
-/* Invoke the parent method to clear the Frame ObsAlt. */
-   (*parent_clearobsalt)( this, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value 
-   and magnitude of the diurnal aberration vector will need to be 
-   re-calculated when next needed. */
-   if( fabs( orig - astGetObsAlt( this ) ) > 0.001 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-      ( (AstSkyFrame *) this )->diurab = AST__BAD;
-   }
-}
-
-static void ClearObsLat( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     ClearObsLat
-
-*  Purpose:
-*     Clear the value of the ObsLat attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearObsLat( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearObsLat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the ObsLat value.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original value */
-   orig = astGetObsLat( this );
-
-/* Invoke the parent method to clear the Frame ObsLat. */
-   (*parent_clearobslat)( this, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value 
-   and magnitude of the diurnal aberration vector will need to be 
-   re-calculated when next needed. */
-   if( fabs( orig - astGetObsLat( this ) ) > 1.0E-8 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-      ( (AstSkyFrame *) this )->diurab = AST__BAD;
-   }
-}
-
-static void ClearObsLon( AstFrame *this, int *status ) {
-/*
-*  Name:
-*     ClearObsLon
-
-*  Purpose:
-*     Clear the value of the ObsLon attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearObsLon( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearObsLon method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the ObsLon value.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original value */
-   orig = astGetObsLon( this );
-
-/* Invoke the parent method to clear the Frame ObsLon. */
-   (*parent_clearobslon)( this, status );
-
-/* If the longitude has changed significantly, indicate that the LAST value 
-   will need to be re-calculated when it is next needed. */
-   if( fabs( orig - astGetObsLon( this ) ) > 1.0E-8 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-   }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearSystem
-
-*  Purpose:
-*     Clear the System attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void ClearSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astClearSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the System attribute for a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;              /* FrameSet to be used as the Mapping */
-   AstSkyFrame *sfrm;            /* Copy of original SkyFrame */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   double xin[ 2 ];              /* Axis 0 values */
-   double yin[ 2 ];              /* Axis 1 values */
-   double xout[ 2 ];             /* Axis 0 values */
-   double yout[ 2 ];             /* Axis 1 values */
-   int skyref_set;               /* Is either SkyRef attribute set? */
-   int skyrefp_set;              /* Is either SkyRefP attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* See if either the SkyRef or SkyRefP attribute is set. */
-   skyref_set = astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 );
-   skyrefp_set = astTestSkyRefP( this, 0 ) || astTestSkyRefP( this, 1 );
-
-/* If so, we will need to transform their values into the new coordinate 
-   system. Save a copy of the SkyFrame with its original System value. */
-   sfrm = ( skyref_set || skyrefp_set )?astCopy( this ):NULL;
-
-/* Use the parent method to clear the System value. */
-   (*parent_clearsystem)( this_frame, status );
-
-/* Now modify the SkyRef and SkyRefP attributes if necessary. */
-   if( sfrm ) {
-
-/* Save the SkyRef and SkyRefP values. */
-      xin[ 0 ] = astGetSkyRef( sfrm, 0 );
-      xin[ 1 ] = astGetSkyRefP( sfrm, 0 );
-      yin[ 0 ] = astGetSkyRef( sfrm, 1 );
-      yin[ 1 ] = astGetSkyRefP( sfrm, 1 );
-
-/* Clear the SkyRef values to avoid infinite recursion in the following
-   call to astConvert. */
-      if( skyref_set ) {
-         astClearSkyRef( sfrm, 0 );
-         astClearSkyRef( sfrm, 1 );
-         astClearSkyRef( this, 0 );
-         astClearSkyRef( this, 1 );
-      }
-
-/* Get the Mapping from the original System to the default System. Invoking 
-   astConvert will recursively invoke ClearSystem again. This is why we need
-   to be careful to ensure that SkyRef is cleared above - doing so ensure 
-   we do not end up with infinite recursion. */
-      fs = astConvert( sfrm, this, "" );
-
-/* Use the Mapping to find the SkyRef and SkyRefP positions in the default
-   coordinate system. */
-      astTran2( fs, 2, xin, yin, 1, xout, yout );
-
-/* Store the values as required. */
-      if( skyref_set ) {
-         astSetSkyRef( this, 0, xout[ 0 ] );
-         astSetSkyRef( this, 1, yout[ 0 ] );
-      }
-
-      if( skyrefp_set ) {
-         astSetSkyRefP( this, 0, xout[ 1 ] );
-         astSetSkyRefP( this, 1, yout[ 1 ] );
-      }
-
-/* Free resources. */
-      fs = astAnnul( fs );
-      sfrm = astAnnul( sfrm );
-   }
-}
-
-static double Distance( AstFrame *this_frame,
-                        const double point1[], const double point2[], int *status ) {
-/*
-*  Name:
-*     Distance
-
-*  Purpose:
-*     Calculate the distance between two points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double Distance( AstFrame *this,
-*                      const double point1[], const double point2[], int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astDistance method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the distance between two points whose
-*     SkyFrame coordinates are given. The distance calculated is that
-*     along the geodesic curve (i.e. great circle) that joins the two
-*     points.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     point1
-*        An array of double, with one element for each SkyFrame axis,
-*        containing the coordinates of the first point.
-*     point2
-*        An array of double, with one element for each SkyFrame axis,
-*        containing the coordinates of the second point.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The distance between the two points, in radians.
-
-*  Notes:
-*     - This function will return a "bad" result value (AST__BAD) if
-*     any of the input coordinates has this value.
-*     - A "bad" value will also be returned if this function is
-*     invoked with the AST error status set or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   const int *perm;              /* Axis permutation array */
-   double p1[ 2 ];               /* Permuted point1 coordinates */
-   double p2[ 2 ];               /* Permuted point2 coordinates */
-   double result;                /* Value to return */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Check that all supplied coordinates are OK. */
-      if ( ( point1[ 0 ] != AST__BAD ) && ( point1[ 1 ] != AST__BAD ) &&
-           ( point2[ 0 ] != AST__BAD ) && ( point2[ 1 ] != AST__BAD ) ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the
-   two points in the required (longitude,latitude) order. */
-         p1[ perm[ 0 ] ] = point1[ 0 ];
-         p1[ perm[ 1 ] ] = point1[ 1 ];
-         p2[ perm[ 0 ] ] = point2[ 0 ];
-         p2[ perm[ 1 ] ] = point2[ 1 ];
-
-/* Calculate the great circle distance between the points in radians. */
-         result = palSlaDsep( p1[ 0 ], p1[ 1 ], p2[ 0 ], p2[ 1 ] );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-*  Name:
-*     Format
-
-*  Purpose:
-*     Format a coordinate value for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *Format( AstFrame *this, int axis, double value, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astFormat method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to a string containing the formatted
-*     (character) version of a coordinate value for a SkyFrame axis. The
-*     formatting applied is that specified by a previous invocation of the
-*     astSetFormat method. A suitable default format is applied if necessary,
-*     and this may depend on which sky coordinate system the SkyFrame
-*     describes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        The number of the axis (zero-based) for which formatting is to be
-*        performed.
-*     value
-*        The coordinate value to be formatted, in radians.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const char *result;           /* Pointer value to return */
-   int format_set;               /* Format attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Determine if a Format value has been set for the axis and set a temporary
-   value if it has not. Use the GetFormat member function for this class
-   together with member functions inherited from the parent class (rather than
-   using the object's methods directly) because if any of these methods have
-   been over-ridden by a derived class the Format string syntax may no longer
-   be compatible with this class. */
-   format_set = (*parent_testformat)( this_frame, axis, status );
-   if ( !format_set ) {
-      (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
-   }
-
-/* Use the Format member function inherited from the parent class to format the
-   value and return a pointer to the resulting string. */
-   result = (*parent_format)( this_frame, axis, value, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
-   if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     Gap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating SkyFrame axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astGap method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted values for a SkyFrame axis, the returned gap
-*     size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        The number of the axis (zero-based) for which a gap is to be found.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   double result;                /* Gap value to return */
-   int format_set;               /* Format attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astGap" );
-
-/* Determine if a Format value has been set for the axis and set a
-   temporary value if it has not. Use the GetFormat member function
-   for this class together with member functions inherited from the
-   parent class (rather than using the object's methods directly)
-   because if any of these methods have been over-ridden by a derived
-   class the Format string syntax may no longer be compatible with
-   this class. */
-   format_set = (*parent_testformat)( this_frame, axis, status );
-   if ( !format_set ) {
-      (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
-   }
-
-/* Use the Gap member function inherited from the parent class to find
-   the gap size. */
-   result = (*parent_gap)( this_frame, axis, gap, ntick, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
-   if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0.0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SkyFrame,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;         /* Pointer to SkyFrame structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astTSizeOf( this->projection );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetActiveUnit
-
-*  Purpose:
-*     Obtain the value of the ActiveUnit flag for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int GetActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns the value of the ActiveUnit flag for a
-*    SkyFrame, which is always 0.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to use for the ActiveUnit flag (0).
-
-*/
-   return 0;
-}
-
-static int GetAsTime( AstSkyFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetAsTime
-
-*  Purpose:
-*     Obtain the value of the AsTime attribute for a SkyFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int GetAsTime( AstSkyFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns the boolean value of the AsTime attribute for a
-*     specified axis of a SkyFrame. This value indicates whether axis values
-*     should be formatted as times (as opposed to angles) by default.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Index of the axis for which information is required (zero based).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero or one, according to the setting of the AsTime attribute (if no
-*     value has previously been set, a suitable default is returned).
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   int axis_p;                   /* Permuted axis index */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   result = 0;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetAsTime" );
-
-/* Obtain a pointer to the required Axis object. */
-   ax = astGetAxis( this, axis );
-
-/* Determine if the AsTime attribute has been set for the axis (this can only
-   be the case if the object is a SkyAxis). If the attribute is set, obtain its
-   value. */
-   if ( astIsASkyAxis( ax ) && astTestAxisAsTime( ax ) ) {
-      result = astGetAxisAsTime( ax );
-
-/* Otherwise, check which (permuted) axis is involved. Only the first
-   (longitude) axis may be displayed as a time by default. */
-   } else if ( axis_p == 0 ) {
-
-/* Test for those coordinate systems which normally have their longitude axes
-   displayed as times (basically, those that involve the Earth's equator) and
-   set the returned value appropriately. */
-      result = IsEquatorial( astGetSystem( this ), status );
-   }
-
-/* Annul the Axis object pointer. */
-   ax = astAnnul( ax );
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a SkyFrame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - The returned string pointer may point at memory allocated
-*     within the SkyFrame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the SkyFrame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const char *cval;             /* Pointer to character attribute value */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Floating point attribute value */
-   double equinox;               /* Equinox attribute value (as MJD) */
-   int as_time;                  /* AsTime attribute value */
-   int axis;                     /* SkyFrame axis number */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-   int neglon;                   /* Display long. values as [-pi,pi]? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* AsTime(axis). */
-/* ------------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( attrib, "astime(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      as_time = astGetAsTime( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", as_time );
-         result = getattrib_buff;
-      }
-
-/* Equinox. */
-/* -------- */
-   } else if ( !strcmp( attrib, "equinox" ) ) {
-      equinox = astGetEquinox( this );
-      if ( astOK ) {
-
-/* Format the Equinox as decimal years. Use a Besselian epoch if it
-   will be less than 1984.0, otherwise use a Julian epoch. */
-         result = astFmtDecimalYr( ( equinox < palSlaEpj2d( 1984.0 ) ) ?
-                                   palSlaEpb( equinox ) : palSlaEpj( equinox ),
-                                   DBL_DIG );
-      }
-
-/* LatAxis */
-/* -------- */
-   } else if ( !strcmp( attrib, "lataxis" ) ) {
-      axis = astGetLatAxis( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", axis + 1 );
-         result = getattrib_buff;
-      }
-
-/* LonAxis */
-/* -------- */
-   } else if ( !strcmp( attrib, "lonaxis" ) ) {
-      axis = astGetLonAxis( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", axis + 1 );
-         result = getattrib_buff;
-      }
-
-/* NegLon */
-/* ------ */
-   } else if ( !strcmp( attrib, "neglon" ) ) {
-      neglon = astGetNegLon( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", neglon );
-         result = getattrib_buff;
-      }
-
-/* Projection. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "projection" ) ) {
-      result = astGetProjection( this );
-
-/* SkyRef. */
-/* ------- */
-   } else if ( !strcmp( attrib, "skyref" ) ) {
-      cval = astFormat( this, 0, astGetSkyRef( this, 0 ) );
-      if ( astOK ) {
-         nc = sprintf( getattrib_buff, "%s, ", cval );
-         cval = astFormat( this, 1, astGetSkyRef( this, 1 ) );
-         if ( astOK ) {
-            (void) sprintf( getattrib_buff + nc, "%s", cval );
-            result = getattrib_buff;
-         }
-      }
-
-/* SkyRef(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( attrib, "skyref(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      dval = astGetSkyRef( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* SkyRefP. */
-/* -------- */
-   } else if ( !strcmp( attrib, "skyrefp" ) ) {
-      cval = astFormat( this, 0, astGetSkyRefP( this, 0 ) );
-      if ( astOK ) {
-         nc = sprintf( getattrib_buff, "%s, ", cval );
-         cval = astFormat( this, 1, astGetSkyRefP( this, 1 ) );
-         if ( astOK ) {
-            (void) sprintf( getattrib_buff + nc, "%s", cval );
-            result = getattrib_buff;
-         }
-      }
-
-/* SkyRefP(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( attrib, "skyrefp(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      dval = astGetSkyRefP( this, axis - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* SkyRefIs. */
-/* --------- */
-   } else if ( !strcmp( attrib, "skyrefis" ) ) {
-      ival = astGetSkyRefIs( this );
-      if ( astOK ) {
-         if( ival == POLE_REF ){
-            result = POLE_STRING;
-         } else if( ival == IGNORED_REF ){
-            result = IGNORED_STRING;
-         } else {
-            result = ORIGIN_STRING;
-         }
-      }
-
-/* AlignOffset */
-/* ----------- */
-   } else if ( !strcmp( attrib, "alignoffset" ) ) {
-      ival = astGetAlignOffset( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetDirection( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetDirection
-
-*  Purpose:
-*     Obtain the value of the Direction attribute for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int GetDirection( AstFrame *this_frame, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetDirection method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns the value of the Direction attribute for a
-*     specified axis of a SkyFrame. A suitable default value is returned if no
-*     Direction value has previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero or one, depending on the Direction attribute value.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   int axis_p;                   /* Permuted axis index */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   result = 0;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetDirection" );
-
-/* Check if a value has been set for the axis Direction attribute. If so,
-   obtain its value. */
-   if ( astTestDirection( this, axis ) ) {
-      result = (*parent_getdirection)( this_frame, axis, status );
-
-/* Otherwise, we will generate a default Direction value. Currently all
-   systems supported by SkyFrame are left handed, so all longitude axes
-   are reversed and all latitude axes are not reversed. */
-   } else if( axis_p == 0 ) {
-      result = 0;
-   } else {
-      result = 1;
-   }      
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result. */
-   return result;
-}
-
-static double GetBottom( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetBottom
-
-*  Purpose:
-*     Obtain the value of the Bottom attribute for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetBottom( AstFrame *this_frame, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetBottom method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns the value of the Bottom attribute for a
-*     specified axis of a SkyFrame. A suitable default value is returned if no
-*     value has previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Bottom value to use.
-
-*  Notes:
-*     -  A value of -DBL_MAX will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   int axis_p;                   /* Permuted axis index */
-   double result;                /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return -DBL_MAX;
-
-/* Initialise. */
-   result = -DBL_MAX;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetBottom" );
-
-/* Check if a value has been set for the axis Bottom attribute. If so,
-   obtain its value. */
-   if ( astTestBottom( this, axis ) ) {
-      result = (*parent_getbottom)( this_frame, axis, status );
-
-/* Otherwise, we will return a default Bottom value appropriate to the
-   SkyFrame class. */
-   } else {
-
-/* If it is a latitude axis return -pi/2. */
-      if( axis_p == 1 ) {
-         result = -piby2;
-
-/* If it is a longitude value return -DBL_MAX (i.e. no lower limit). */
-      } else {
-         result = -DBL_MAX;
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -DBL_MAX;
-
-/* Return the result. */
-   return result;
-}
-
-static double GetCachedLAST( AstSkyFrame *this, double epoch, double obslon,
-                             double obslat, double obsalt, double dut1, 
-                             int *status ) {
-/*
-*  Name:
-*     GetCachedLAST
-
-*  Purpose:
-*     Attempt to get a LAST value from the cache in the SkyFrame vtab.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetCachedLAST( AstSkyFrame *this, double epoch, double obslon,
-*                           double obslat, double obsalt, double dut1, 
-*                           int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function searches the static cache of LAST values held in the
-*     SkyFrame virtual function table for a value that corresponds to the
-*     supplied parameter values. If one is found, it is returned.
-*     Otherwise AST__BAD is found.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     epoch
-*        The epoch (MJD).
-*     obslon
-*        Observatory geodetic longitude (radians)
-*     obslat
-*        Observatory geodetic latitude (radians)
-*     obsalt
-*        Observatory geodetic altitude (metres)
-*     dut1 
-*        The UT1-UTC correction, in seconds.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    The Local Apparent Sidereal Time, in radians.
-
-*  Notes:
-*     -  A value of AST__BAD will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS 
-   AstSkyFrameVtab *vtab;
-   AstSkyLastTable *table; 
-   double *ep;
-   double *lp;
-   double dep;            
-   double result;     
-   int ihi;
-   int ilo;
-   int itable;
-   int itest;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the SkyFrame virtual function table. */
-   vtab = (AstSkyFrameVtab *) ((AstObject *) this)->vtab;
-
-/* Loop round every LAST table held in the vtab. Each table refers to a
-   different observatory position and/or DUT1 value. */
-   for( itable = 0; itable < vtab->nlast_tables; itable++ ) {
-      table = (vtab->last_tables)[ itable ];
-
-/* See if the table refers to the given position and dut1 value, allowing
-   some small tolerance. */
-      if( fabs( table->obslat - obslat ) < 2.0E-7 && 
-          fabs( table->obslon - obslon ) < 2.0E-7 &&
-          fabs( table->obsalt - obsalt ) < 1.0 &&
-          fabs( table->dut1 - dut1 ) < 1.0E-5 ) {
-
-/* Get pointers to the array of epoch and corresponding LAST values in
-   the table. */
-         ep = table->epoch;
-         lp = table->last;
-
-/* The values in the epoch array are monotonic increasing. Do a binary chop 
-   within the table's epoch array to find the earliest entry that has a
-   value equal to or greater than the supplied epoch value. */
-         ilo = 0;
-         ihi = table->nentry - 1;
-         while( ihi > ilo ) {
-            itest = ( ilo + ihi )/2;
-            if( ep[ itest ] >= epoch ) {
-               ihi = itest;
-            } else {
-               ilo = itest + 1;
-            }
-         }
-
-/* Get the difference between the epoch at the entry selected above and
-   the requested epoch. */
-         dep = ep[ ilo ] - epoch;
-
-/* If the entry selected above is the first entry in the table, it can
-   only be used if it is within 0.1 second of the requested epoch. */
-         if( ilo == 0 ) {
-            if( fabs( dep ) < 0.1/86400.0 ) result = lp[ 0 ];
-
-/* If the list of epoch values contained no value that was greater than
-   the supplied epoch value, then we can use the last entry if
-   it is no more than 0.1 second away from the requested epoch. */
-         } else if( dep <= 0.0 ) {
-            if( fabs( dep ) < 0.1/86400.0 ) result = lp[ ilo ];
-
-/* Otherwise, see if the entry selected above is sufficiently close to
-   its lower neighbour (i.e. closer than 0.4 days) to allow a reasonably
-   accurate LAST value to be determined by interpolation. */
-         } else if( ep[ ilo ] - ep[ ilo - 1 ] < 0.4 ) {
-            ep += ilo - 1;
-            lp += ilo - 1;
-            result = *lp + ( epoch - *ep )*( lp[ 1 ] - *lp )/( ep[ 1 ] - *ep );
-
-/* If the neighbouring point is too far away for interpolation to be
-   reliable, then we can only use the point if it is within 0.1 seconds of
-   the requested epoch. */
-         } else if( fabs( dep ) < 0.1/86400.0 ) {
-            result = lp[ ilo ];
-         }
-
-/* If we have found the right table, we do not need to look at any other 
-   tables, so leave the table loop. */
-         break;
-      }
-   }
-
-/* Ensure the returned value is within the range 0 - 2.PI. */
-   if( result != AST__BAD ) {
-      while( result > 2*AST__DPI ) result -= 2*AST__DPI;
-      while( result < 0.0 ) result += 2*AST__DPI;
-   }
-
-/* Return the required LAST value. */
-   return result;
-}
-
-static double GetEpoch( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetEpoch
-
-*  Purpose:
-*     Obtain the value of the Epoch attribute for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetEpoch( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetEpoch method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns the value of the Epoch attribute for a
-*     SkyFrame. A suitable default value is returned if no value has 
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Epoch value to use.
-
-*  Notes:
-*     -  A value of AST__BAD will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   AstSystemType system;         /* System attribute */
-   double result;                /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Check if a value has been set for the Epoch attribute. If so, obtain its 
-   value. */
-   if ( astTestEpoch( this ) ) {
-      result = (*parent_getepoch)( this_frame, status );
-
-/* Otherwise, we will return a default Epoch value appropriate to the
-   SkyFrame class. */
-   } else {
-
-/* Provide a default value of B1950.0 or J2000.0 depending on the System
-   setting. */
-      system = astGetSystem( this );
-      if( system  == AST__FK4 || system == AST__FK4_NO_E ) {
-         result = palSlaEpb2d( 1950.0 );
-      } else {
-         result = palSlaEpj2d( 2000.0 );
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = AST__BAD;
-
-/* Return the result. */
-   return result;
-}
-
-static double GetTop( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetTop
-
-*  Purpose:
-*     Obtain the value of the Top attribute for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetTop( AstFrame *this_frame, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetTop method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns the value of the Top attribute for a
-*     specified axis of a SkyFrame. A suitable default value is returned if no
-*     value has previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Top value to use.
-
-*  Notes:
-*     -  A value of DBL_MAX will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   int axis_p;                   /* Permuted axis index */
-   double result;                /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return DBL_MAX;
-
-/* Initialise. */
-   result = DBL_MAX;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetTop" );
-
-/* Check if a value has been set for the axis Top attribute. If so,
-   obtain its value. */
-   if ( astTestTop( this, axis ) ) {
-      result = (*parent_gettop)( this_frame, axis, status );
-
-/* Otherwise, we will return a default Top value appropriate to the
-   SkyFrame class. */
-   } else {
-
-/* If this is a latitude axis return pi/2. */
-      if( axis_p == 1 ) {
-         result = piby2;
-
-/* If it is a longitude value return DBL_MAX (i.e. no upper limit). */
-      } else {
-         result = DBL_MAX;
-      }
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = DBL_MAX;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDomain
-
-*  Purpose:
-*     Obtain a pointer to the Domain attribute string for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetDomain( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetDomain protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns a pointer to the Domain attribute string
-*    for a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Domain value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the SkyFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestDomain( this ) ) {
-      result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
-   } else {
-      result = "SKY";
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetFormat( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetFormat
-
-*  Purpose:
-*     Access the Format string for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetFormat( AstFrame *this, int axis )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetFormat method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Format string for a specified axis
-*     of a SkyFrame. A pointer to a suitable default string is returned if no
-*     Format value has previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-
-*  Returned Value:
-*     Pointer to a null-terminated character string containing the requested
-*     information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const char *result;           /* Pointer value to return */
-   int as_time;                  /* Value of AsTime attribute */
-   int as_time_set;              /* AsTime attribute set? */
-   int axis_p;                   /* Permuted axis index */
-   int digits;                   /* Number of digits of precision */
-   int is_latitude;              /* Value of IsLatitude attribute */
-   int is_latitude_set;          /* IsLatitude attribute set? */
-   int parent;                   /* Use parent method? */
-   int skyaxis;                  /* Is the Axis a SkyAxis? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Initialise. */
-   result = NULL;
-   as_time_set = 0;
-   is_latitude = 0;
-   is_latitude_set = 0;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetFormat" );
-
-/* Obtain a pointer to the Axis structure. */
-   ax = astGetAxis( this, axis );
-
-/* Decide whether the parent astGetFormat method is able to provide the format
-   string we require. We must use the parent method if the Axis is not a
-   SkyAxis, because the syntax of the Format string would become unsuitable
-   for use with the Axis astFormat method if it was over-ridden here. We also
-   use the parent method to return a Format pointer if an explicit Format
-   string has already been set. */
-   skyaxis = astIsASkyAxis( ax );
-   parent = ( !skyaxis || (*parent_testformat)( this_frame, axis, status ) );
-
-/* If neither of the above conditions apply, we may still be able to use the
-   parent method if the Axis (actually a SkyAxis) is required to behave as a
-   normal RA or DEC axis, as this is the standard behaviour provided by the
-   SkyAxis class. Examine the SkyFrame's System attribute to determine if its
-   axes should behave in this way. */
-   if ( !parent ) parent = IsEquatorial( astGetSystem( this ), status );
-
-/* If using the parent method and dealing with a SkyAxis, determine the
-   settings of any attributes that may affect the Format string. */
-   if ( astOK ) {
-      if ( parent ) {
-         if ( skyaxis ) {
-            as_time_set = astTestAsTime( this, axis );
-            is_latitude_set = astTestAxisIsLatitude( ax );
-            is_latitude = astGetAxisIsLatitude( ax );
-
-/* If no AsTime value is set for the axis, set a temporary value as determined
-   by the astGetAsTime method, which supplies suitable defaults for the axes of
-   a SkyFrame. */
-            if ( !as_time_set ) {
-               astSetAsTime( this, axis, astGetAsTime( this, axis ) );
-	    }
-
-/* Temporarly over-ride the SkyAxis IsLatitude attribute, regardless of its
-   setting, as the second axis of a SkyFrame is always the latitude axis. */
-            astSetAxisIsLatitude( ax, axis_p == 1 );
-         }
-
-/* Invoke the parent method to obtain a pointer to the Format string. */
-         result = (*parent_getformat)( this_frame, axis, status );
-
-/* Now restore the attributes that were temporarily over-ridden above to their
-   previous states. */
-         if ( skyaxis ) {
-            if ( !as_time_set ) astClearAsTime( this, axis );
-            if ( !is_latitude_set ) {
-               astClearAxisIsLatitude( ax );
-            } else {
-               astSetAxisIsLatitude( ax, is_latitude );
-            }
-         }
-
-/* If the parent method is unsuitable, we must construct a new Format string
-   here. This affects only those coordinate systems whose axes do not behave
-   like standard RA/DEC axes (e.g. typically ecliptic, galactic and
-   supergalactic coordinates). For these, we format values as decimal degrees
-   (or decimal hours if the AsTime attribute is set). Obtain the AsTime
-   value. */
-      } else { 
-         as_time = astGetAsTime( this, axis );
-
-/* Determine how many digits of precision to use. This is obtained from the
-   SkyAxis Digits attribute (if set), otherwise from the Digits attribute of
-   the enclosing SkyFrame. */
-         if ( astTestAxisDigits( ax ) ) {
-            digits = astGetAxisDigits( ax );
-         } else {
-            digits = astGetDigits( this );
-         }
-
-/* If a time format is required, generate a Format string using decimal
-   hours. */
-         if ( astOK ) {
-            if ( as_time ) {
-               if ( digits <= 2 ) {
-                  result = "h";
-               } else {
-                  (void) sprintf( getformat_buff, "h.%d", digits - 2 );
-                  result = getformat_buff;
-               }
-
-/* Otherwise use decimal degrees. */
-            } else {
-               if ( digits <= 3 ) {
-                  result = "d";
-               } else {
-                  (void) sprintf( getformat_buff, "d.%d", digits - 3 );
-                  result = getformat_buff;
-               }
-	    }
-	 }
-      }
-   }
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetLabel
-
-*  Purpose:
-*     Access the Label string for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetLabel( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetLabel method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Label string for a specified axis
-*     of a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSystemType system;         /* Code identifying type of sky coordinates */
-   const char *result;           /* Pointer to label string */
-   int axis_p;                   /* Permuted axis index */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
-   invoke the parent astGetLabel method to obtain a pointer to it. */
-   if ( astTestLabel( this, axis ) ) {
-      result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the SkyFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
-      if ( astOK ) {
-
-/* Equatorial coordinate systems. */
-         if ( IsEquatorial( system, status ) ) {
-	    result = ( axis_p == 0 ) ? "Right ascension" :
-	                               "Declination";
-
-/* Ecliptic coordinates. */
-         } else if ( system == AST__ECLIPTIC ) {
-	    result = ( axis_p == 0 ) ? "Ecliptic longitude" :
-                                       "Ecliptic latitude";
-
-/* Helio-ecliptic coordinates. */
-         } else if ( system == AST__HELIOECLIPTIC ) {
-	    result = ( axis_p == 0 ) ? "Helio-ecliptic longitude" :
-                                       "Helio-ecliptic latitude";
-
-/* AzEl coordinates. */
-         } else if ( system == AST__AZEL ) {
-	    result = ( axis_p == 0 ) ? "Azimuth" :
-                                       "Elevation";
-
-/* Galactic coordinates. */
-         } else if ( system == AST__GALACTIC ) {
-	    result = ( axis_p == 0 ) ? "Galactic longitude" :
-                                       "Galactic latitude";
-
-/* Supergalactic coordinates. */
-         } else if ( system == AST__SUPERGALACTIC ) {
-	    result = ( axis_p == 0 ) ? "Supergalactic longitude" :
-                                       "Supergalactic latitude";
-
-/* Unknown spherical coordinates. */
-         } else if ( system == AST__UNKNOWN ) {
-	    result = ( axis_p == 0 ) ? "Longitude" :
-                                       "Latitude";
-
-/* Report an error if the coordinate system was not recognised. */
-         } else {
-	    astError( AST__SCSIN, "astGetLabel(%s): Corrupt %s contains "
-		      "invalid sky coordinate system identification code "
-		      "(%d).", status, astGetClass( this ), astGetClass( this ),
-		      (int) system );
-         }
-
-/* If the SkyRef attribute has a set value, append " offset" to the label. */
-         if( astGetSkyRefIs( this ) != IGNORED_REF && 
-             ( astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 ) ) ) {
-            sprintf( getlabel_buff, "%s offset", result );
-            result = getlabel_buff;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetDiurab( AstSkyFrame *this, int *status ) {
-/*
-*  Name:
-*     GetDiurab
-
-*  Purpose:
-*     Return the magnitude of the diurnal aberration vector.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetDiurab( AstSkyFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function 
-
-*  Description:
-*     This function returns the  magnitude of the diurnal aberration
-*     vector. 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The magnitude of the diurnal aberration vector.
-
-*/
-
-/* Local Variables: */
-   double uau;
-   double vau;
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BAD;
-
-/* If the magnitude of the diurnal aberration vector has not yet been
-   found, find it now, and cache it in the SkyFrame structure. The cached
-   value will be reset to AST__BAD if the ObsLat attribute value is 
-   changed. This code is transliterated from SLA_AOPPA. */
-   if( this->diurab == AST__BAD ) {
-      palSlaGeoc( astGetObsLat( this ), astGetObsAlt( this ), &uau, &vau );
-      this->diurab = 2*AST__DPI*uau*SOLSID/C;
-   } 
-
-/* Return the result, */
-   return this->diurab;
-}
-
-static double GetLAST( AstSkyFrame *this, int *status ) {
-/*
-*  Name:
-*     GetLAST
-
-*  Purpose:
-*     Return the Local Apparent Sidereal Time for the SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetLAST( AstSkyFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function 
-
-*  Description:
-*     This function returns the Local Apparent Sidereal Time (LAST)
-*     at the moment intime given by the Epoch attribute of the SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The LAST value.
-
-*/
-
-/* Local Variables: */
-   double dlast;                 /* Change in LAST */
-   double epoch;                 /* Epoch (TDB MJD) */
-   double last1;                 /* LAST at end of current interval */
-   double result;                /* Result value to return */
-   double delta_epoch;           /* Change in Epoch */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* The "last" component of the SkyFrame structure holds the accurate 
-   LAST at the moment in time given by the "eplast" (a TDB MJD) component 
-   of the SkyFrame structure. If the current value of the SkyFrame's
-   Epoch attribute is not much different to "eplast" (within 0.4 of a day), 
-   then the returned LAST value is the "last" value plus the difference 
-   between Epoch and "eplast", converted from solar to sidereal time, 
-   then converted to radians. This approximation seems to be good to less
-   than a tenth of an arcsecond. If this approximation cannot be used, 
-   invoke SetLast to recalculate the accurate LAST and update the "eplast" 
-   and "last" values. */
-   if( this->eplast != AST__BAD ) {
-      epoch = astGetEpoch( this );
-      delta_epoch = epoch - this->eplast;
-
-/* Return the current LAST value if the epoch has not changed. */
-      if( delta_epoch == 0.0 ) {
-         result = this->last;
-
-/* If the previous full calculation of LAST was less than 0.4 days ago,
-   use a linear approximation to LAST. */
-      } else if( fabs( delta_epoch ) < 0.4 ) {
-
-/* If we do not know the ratio of sidereal to solar time at the current
-   epoch, calculate it now. This involves a full calculation of LAST at
-   the end of the current linear approxcimation period. */
-         if( this->klast == AST__BAD ) {
-            last1 = CalcLAST( this, this->eplast + 0.4, astGetObsLon( this ),
-                              astGetObsLat( this ), astGetObsAlt( this ), 
-                              astGetDut1( this ), status );
-
-/* Ensure the change in LAST is positive so that we get a positive ratio. */
-            dlast = last1 - this->last;
-            if( dlast < 0.0 ) dlast += 2*AST__DPI;
-            this->klast = 2*AST__DPI*0.4/dlast;
-         }
-
-/* Now use the ratio of solar to sidereal time to calculate the linear 
-   approximation to LAST. */
-         result = this->last + 2*AST__DPI*delta_epoch/this->klast;
-
-/* If the last accurate calculation of LAST was more than 0.4 days ago,
-   do a full accurate calculation. */
-      } else {
-         SetLast( this, status );
-         result = this->last;
-      }
-
-/* If we have not yet done an accurate calculation of LAST, do one now. */
-   } else {
-      SetLast( this, status );
-      result = this->last;
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int GetLatAxis( AstSkyFrame *this, int *status ) {
-/*
-*  Name:
-*     GetLatAxis
-
-*  Purpose:
-*     Obtain the index of the latitude axis of a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int GetLatAxis( AstSkyFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns the zero-based index of the latitude axis of 
-*     a SkyFrame, taking into account any current axis permutation.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The zero based axis index (0 or 1) of the latitude axis.
-
-*  Notes:
-*     -  A value of one will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result to be returned */
-   const int *perm;              /* Axis permutation array */
-
-/* Check the global error status. */
-   if ( !astOK ) return 1;
-
-/* Initialise. */
-   result = 1;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Identify the latitude axis. */
-      if( perm[ 0 ] == 1 ) {
-         result = 0;
-      } else {
-         result = 1;
-      }
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static int GetLonAxis( AstSkyFrame *this, int *status ) {
-/*
-*  Name:
-*     GetLonAxis
-
-*  Purpose:
-*     Obtain the index of the longitude axis of a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int GetLonAxis( AstSkyFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns the zero-based index of the longitude axis of 
-*     a SkyFrame, taking into account any current axis permutation.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The zero based axis index (0 or 1) of the longitude axis.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result to be returned */
-   const int *perm;              /* Axis permutation array */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   result = 0;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Identify the longitude axis. */
-      if( perm[ 0 ] == 0 ) {
-         result = 0;
-      } else {
-         result = 1;
-      }
-
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static double GetSkyRefP( AstSkyFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetSkyRefP
-
-*  Purpose:
-*     Obtain the value of the SkyRefP attribute for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double GetSkyRefP( AstSkyFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns the value of the SkyRefP attribute for a
-*     SkyFrame axis, providing suitable defaults.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The SkyRefP value to be used.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   double result;                /* Returned value */
-   int axis_p;                   /* Permuted axis index */
-
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetSkyRefP" );
-
-/* Check if a value has been set for the required axis. If so, return it. */
-   if( this->skyrefp[ axis_p ] != AST__BAD ) {
-      result = this->skyrefp[ axis_p ];
-
-/* Otherwise, return the default value */
-   } else {
-
-/* The default longitude value is always zero. */
-      if( axis_p == 0 ) {
-         result= 0.0;
-
-/* The default latitude value depends on SkyRef. The usual default is the 
-   north pole. The exception to this is if the SkyRef attribute identifies 
-   either the north or the south pole, in which case the origin is used as 
-   the default. Allow some tolerance. */
-      } else if( fabs( cos( this->skyref[ 1 ] ) ) > 1.0E-10 ) {
-         result = pi/2;
-
-      } else {
-         result = 0.0;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetSymbol
-
-*  Purpose:
-*     Obtain a pointer to the Symbol string for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetSymbol method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Symbol string for a specified axis
-*     of a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSystemType system;         /* Code identifying type of sky coordinates */
-   const char *result;           /* Pointer to symbol string */
-   int axis_p;                   /* Permuted axis index */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate and permute the axis index. */
-   axis_p = astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
-   invoke the parent astGetSymbol method to obtain a pointer to it. */
-   if ( astTestSymbol( this, axis ) ) {
-      result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the SkyFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
-      if ( astOK ) {
-
-/* Equatorial coordinate systems. */
-         if ( IsEquatorial( system, status ) ) {
-	    result = ( axis_p == 0 ) ? "RA" : "Dec";
-
-/* Ecliptic coordinates. */
-         } else if ( system == AST__ECLIPTIC ) {
-	    result = ( axis_p == 0 ) ? "Lambda" : "Beta";
-
-/* Helio-ecliptic coordinates. */
-         } else if ( system == AST__HELIOECLIPTIC ) {
-	    result = ( axis_p == 0 ) ? "Lambda" : "Beta";
-
-/* AzEl coordinates. */
-         } else if ( system == AST__AZEL ) {
-	    result = ( axis_p == 0 ) ? "Az" : "El";
-
-/* Galactic coordinates. */
-         } else if ( system == AST__GALACTIC ) {
-	    result = ( axis_p == 0 ) ? "l" : "b";
-
-/* Supergalactic coordinates. */
-         } else if ( system == AST__SUPERGALACTIC ) {
-	    result = ( axis_p == 0 ) ? "SGL" : "SGB";
-
-/* Unknown spherical coordinates. */
-         } else if ( system == AST__UNKNOWN ) {
-	    result = ( axis_p == 0 ) ? "Lon" : "Lat";
-
-/* Report an error if the coordinate system was not recognised. */
-         } else {
-	    astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
-		      "invalid sky coordinate system identification code "
-		      "(%d).", status, astGetClass( this ), astGetClass( this ),
-		      (int) system );
-         }
-
-/* If the SkyRef attribute had a set value, prepend "D" (for "delta") to the 
-   Symbol. */
-         if( astGetSkyRefIs( this ) != IGNORED_REF && 
-             ( astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 ) ) ) {
-            sprintf( getsymbol_buff, "D%s", result );
-            result = getsymbol_buff;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetAlignSystem
-
-*  Purpose:
-*     Obtain the AlignSystem attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetAlignSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the AlignSystem attribute for a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The AlignSystem value.
-
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestAlignSystem( this ) ) {
-      result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__ICRS;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetSystem
-
-*  Purpose:
-*     Obtain the System attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the System attribute for a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestSystem( this ) ) {
-      result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__ICRS;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetTitle
-
-*  Purpose:
-*     Obtain a pointer to the Title string for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetTitle( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetTitle method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Title string for a SkyFrame.
-*     A pointer to a suitable default string is returned if no Title value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null-terminated character string containing the requested
-*     information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   AstSystemType system;         /* Code identifying type of sky coordinates */
-   const char *extra;            /* Pointer to extra information */
-   const char *p;                /* Character pointer */
-   const char *projection;       /* Pointer to sky projection description */
-   const char *result;           /* Pointer to result string */
-   const char *word;             /* Pointer to critical word */
-   double epoch;                 /* Value of Epoch attribute */
-   double equinox;               /* Value of Equinox attribute */
-   int lextra;                   /* Length of extra information */
-   int offset;                   /* Using offset coordinate system? */
-   int pos;                      /* Buffer position to enter text */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Initialise. */
-   result = NULL;
-   pos = 0;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
-   method to obtain a pointer to it. */
-   if ( astTestTitle( this ) ) {
-      result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
-   SkyFrame's attributes that determine what this string will be. */
-   } else {
-      epoch = astGetEpoch( this );
-      equinox = astGetEquinox( this );
-      projection = astGetProjection( this );
-      system = astGetSystem( this );
-
-/* See if an offset coordinate system is being used.*/
-      offset = ( astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 ) )
-               && ( astGetSkyRefIs( this ) != IGNORED_REF );
-      
-/* Use this to determine if the word "coordinates" or "offsets" should be
-   used.*/
-      word = offset ? "offsets" : "coordinates";
-
-/* Classify the coordinate system type and create an appropriate Title
-   string.  (Note that when invoking the astFmtDecimalYr function we must
-   use a separate sprintf on each occasion so as not to over-write its
-   internal buffer before the result string has been used.) */
-      if ( astOK ) {
-         result = gettitle_buff;
-         switch ( system ) {
-
-/* FK4 equatorial coordinates. */
-/* --------------------------- */
-/* Display the Equinox and Epoch values. */
-	 case AST__FK4:
-	    pos = sprintf( gettitle_buff, "FK4 equatorial %s", word );
-            if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
-   	       pos += sprintf( gettitle_buff + pos, "; mean equinox B%s", 
-		               astFmtDecimalYr( palSlaEpb( equinox ), 9 ) );
-            }
-            if( astTestEpoch( this ) || astGetUseDefs( this ) ) {
-               pos += sprintf( gettitle_buff + pos,
-                               "; epoch B%s", astFmtDecimalYr( palSlaEpb( epoch ), 9 ) );
-            }
-	    break;
-
-/* FK4 coordinates with no E-terms of aberration. */
-/* ---------------------------------------------- */
-/* Display the Equinox and Epoch values. */
-	 case AST__FK4_NO_E:
-	    pos = sprintf( gettitle_buff, "FK4 equatorial %s; no E-terms", word );
-            if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
-   	       pos += sprintf( gettitle_buff + pos, "; mean equinox B%s", 
-		               astFmtDecimalYr( palSlaEpb( equinox ), 9 ) );
-            }
-            if( astTestEpoch( this ) || astGetUseDefs( this ) ) {
-               pos += sprintf( gettitle_buff + pos,
-                               "; epoch B%s", astFmtDecimalYr( palSlaEpb( epoch ), 9 ) );
-            }
-	    break;
-
-/* FK5 equatorial coordinates. */
-/* --------------------------- */
-/* Display only the Equinox value. */
-	 case AST__FK5:
-	    pos = sprintf( gettitle_buff, "FK5 equatorial %s", word );
-            if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
-   	       pos += sprintf( gettitle_buff + pos, "; mean equinox J%s", 
-		               astFmtDecimalYr( palSlaEpj( equinox ), 9 ) );
-            }
-	    break;
-
-/* J2000 equatorial coordinates. */
-/* ----------------------------- */
-/* Based on the dynamically determined mean equator and equinox of J2000,
-   rather than on a model such as FK4 or FK5 */
-	 case AST__J2000:
-	    pos = sprintf( gettitle_buff, "J2000 equatorial %s", word );
-	    break;
-
-/* ICRS coordinates. */
-/* ----------------- */
-/* ICRS is only like RA/Dec by co-incidence, it is not really an
-   equatorial system by definition. */
-	 case AST__ICRS:
-	    pos = sprintf( gettitle_buff, "ICRS %s", word );
-	    break;
-
-/* AzEl coordinates. */
-/* ----------------- */
-	 case AST__AZEL:
-	    pos = sprintf( gettitle_buff, "Horizon (Azimuth/Elevation) %s", word );
-	    break;
-
-/* Geocentric apparent equatorial coordinates. */
-/* ------------------------------------------ */
-/* Display only the Epoch value. */
-	 case AST__GAPPT:
-	    pos = sprintf( gettitle_buff,
-                           "Geocentric apparent equatorial %s; "
-                           "; epoch J%s", word, astFmtDecimalYr( palSlaEpj( epoch ), 9 ) );
-	    break;
-
-/* Ecliptic coordinates. */
-/* --------------------- */
-/* Display only the Equinox value. */
-	 case AST__ECLIPTIC:
-	    pos = sprintf( gettitle_buff, "Ecliptic %s", word );
-            if( astTestEquinox( this ) || astGetUseDefs( this ) ) {
-   	       pos += sprintf( gettitle_buff + pos, "; mean equinox J%s", 
-		               astFmtDecimalYr( palSlaEpj( equinox ), 9 ) );
-            }
-	    break;
-
-/* Helio-ecliptic coordinates. */
-/* --------------------------- */
-/* Display only the Epoch value (equinox is fixed). */
-	 case AST__HELIOECLIPTIC:
-	    pos = sprintf( gettitle_buff, "Helio-ecliptic %s; mean equinox J2000", word );
-            if( astTestEpoch( this ) || astGetUseDefs( this ) ) {
-   	       pos += sprintf( gettitle_buff + pos, "; epoch J%s", 
-		               astFmtDecimalYr( palSlaEpj( epoch ), 9 ) );
-            }
-	    break;
-
-/* Galactic coordinates. */
-/* --------------------- */
-/* Do not display an Equinox or Epoch value. */
-	 case AST__GALACTIC:
-	    pos = sprintf( gettitle_buff, "IAU (1958) galactic %s", word );
-	    break;
-
-/* Supergalactic coordinates. */
-/* -------------------------- */
-/* Do not display an Equinox or Epoch value. */
-	 case AST__SUPERGALACTIC:
-	    pos = sprintf( gettitle_buff,
-                           "De Vaucouleurs supergalactic %s", word );
-	    break;
-
-/* Unknown coordinates. */
-/* -------------------------- */
-	 case AST__UNKNOWN:
-	    pos = sprintf( gettitle_buff,
-                           "Spherical %s", word );
-	    break;
-
-/* Report an error if the coordinate system was not recognised. */
-	 default:
-	    astError( AST__SCSIN, "astGetTitle(%s): Corrupt %s contains "
-		      "invalid sky coordinate system identification code "
-		      "(%d).", status, astGetClass( this ), astGetClass( this ),
-		     (int) system );
-	    break;
-         }
-
-/* If OK, we add either a description of the sky projection, or (if used)
-   a description of the origin or pole of the offset coordinate system.
-   We include only one of these two strings in order to keep the length
-   of the title down to a reasonable value.*/
-         if ( astOK ) {
-
-/* If the SkyRef attribute has set values, create a description of the offset
-   coordinate system. */
-            if( offset ){
-               word = ( astGetSkyRefIs( this ) == POLE_REF )?"pole":"origin";
-               lextra = sprintf( gettitle_buff2, "%s at %s ", word, 
-                           astFormat( this, 0, astGetSkyRef( this, 0 ) ) );
-               lextra += sprintf( gettitle_buff2 + lextra, "%s", 
-                           astFormat( this, 1, astGetSkyRef( this, 1 ) ) );
-               extra = gettitle_buff2;
-
-/* Otherwise, get the sky projection description. */
-            } else {            
-               extra = projection;
-
-/* Determine the length of the extra information, after removing trailing 
-   white space. */
-               for ( lextra = (int) strlen( extra ); lextra > 0; lextra-- ) {
-                  if ( !isspace( extra[ lextra - 1 ] ) ) break;
-               }
-            }
-
-/* If non-blank extra information is available, append it to the title string, 
-   checking that the end of the buffer is not over-run. */
-            if ( lextra ) {
-               p = "; ";
-               while ( ( pos < AST__SKYFRAME_GETTITLE_BUFF_LEN ) && *p ) gettitle_buff[ pos++ ] = *p++;
-               p = extra;
-               while ( ( pos < AST__SKYFRAME_GETTITLE_BUFF_LEN ) &&
-                       ( p < ( extra + lextra ) ) ) gettitle_buff[ pos++ ] = *p++;
-               if( extra == projection ) {
-                  p = " projection";
-                  while ( ( pos < AST__SKYFRAME_GETTITLE_BUFF_LEN ) && *p ) gettitle_buff[ pos++ ] = *p++;
-               }
-               gettitle_buff[ pos ] = '\0';
-            }
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned pointer value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetUnit
-
-*  Purpose:
-*     Obtain a pointer to the Unit string for a SkyFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *GetUnit( AstFrame *this_frame, int axis )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astGetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Unit string for a specified axis
-*     of a SkyFrame. If the Unit attribute has not been set for the axis, a
-*     pointer to a suitable default string is returned instead. This string may
-*     depend on the value of the Format attribute for the axis and, in turn, on
-*     the type of sky coordinate system that the SkyFrame describes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the Unit value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const char *result;           /* Pointer value to return */
-   int format_set;               /* Format attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astGetUnit" );
-
-/* The Unit value may depend on the value of the Format attribute, so
-   determine if a Format value has been set for the axis and set a
-   temporary value if it has not. Use the GetFormat member function
-   for this class together with member functions inherited from the
-   parent class (rather than using the object's methods directly)
-   because if any of these methods have been over-ridden by a derived
-   class the Format string syntax may no longer be compatible with
-   this class. */
-   format_set = (*parent_testformat)( this_frame, axis, status );
-   if ( !format_set ) {
-      (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
-   }
-
-/* Use the parent GetUnit method to return a pointer to the required Unit
-   string. */
-   result = (*parent_getunit)( this_frame, axis, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
-   if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-void astInitSkyFrameVtab_(  AstSkyFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSkyFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SkyFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void astInitSkyFrameVtab( AstSkyFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SkyFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SkyFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   int stat;                     /* SLALIB status */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASkyFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->ClearAsTime = ClearAsTime;
-   vtab->ClearEquinox = ClearEquinox;
-   vtab->ClearNegLon = ClearNegLon;
-   vtab->ClearProjection = ClearProjection;
-   vtab->GetAsTime = GetAsTime;
-   vtab->GetEquinox = GetEquinox;
-   vtab->GetNegLon = GetNegLon;
-   vtab->GetLatAxis = GetLatAxis;
-   vtab->GetLonAxis = GetLonAxis;
-   vtab->GetProjection = GetProjection;
-   vtab->SetAsTime = SetAsTime;
-   vtab->SetEquinox = SetEquinox;
-   vtab->SetNegLon = SetNegLon;
-   vtab->SetProjection = SetProjection;
-   vtab->TestAsTime = TestAsTime;
-   vtab->TestEquinox = TestEquinox;
-   vtab->TestNegLon = TestNegLon;
-   vtab->TestProjection = TestProjection;
-
-   vtab->TestSkyRef = TestSkyRef;
-   vtab->SetSkyRef = SetSkyRef;
-   vtab->GetSkyRef = GetSkyRef;
-   vtab->ClearSkyRef = ClearSkyRef;
-
-   vtab->TestSkyRefP = TestSkyRefP;
-   vtab->SetSkyRefP = SetSkyRefP;
-   vtab->GetSkyRefP = GetSkyRefP;
-   vtab->ClearSkyRefP = ClearSkyRefP;
-
-   vtab->TestSkyRefIs = TestSkyRefIs;
-   vtab->SetSkyRefIs = SetSkyRefIs;
-   vtab->GetSkyRefIs = GetSkyRefIs;
-   vtab->ClearSkyRefIs = ClearSkyRefIs;
-
-   vtab->TestAlignOffset = TestAlignOffset;
-   vtab->SetAlignOffset = SetAlignOffset;
-   vtab->GetAlignOffset = GetAlignOffset;
-   vtab->ClearAlignOffset = ClearAlignOffset;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_gettop = frame->GetTop;
-   frame->GetTop = GetTop;
-
-   parent_setobsalt = frame->SetObsAlt;
-   frame->SetObsAlt = SetObsAlt;
-
-   parent_setobslat = frame->SetObsLat;
-   frame->SetObsLat = SetObsLat;
-
-   parent_setobslon = frame->SetObsLon;
-   frame->SetObsLon = SetObsLon;
-
-   parent_clearobslon = frame->ClearObsLon;
-   frame->ClearObsLon = ClearObsLon;
-
-   parent_clearobsalt = frame->ClearObsAlt;
-   frame->ClearObsAlt = ClearObsAlt;
-
-   parent_clearobslat = frame->ClearObsLat;
-   frame->ClearObsLat = ClearObsLat;
-
-   parent_getbottom = frame->GetBottom;
-   frame->GetBottom = GetBottom;
-
-   parent_getepoch = frame->GetEpoch;
-   frame->GetEpoch = GetEpoch;
-
-   parent_format = frame->Format;
-   frame->Format = Format;
-   parent_gap = frame->Gap;
-   frame->Gap = Gap;
-   parent_getdirection = frame->GetDirection;
-   frame->GetDirection = GetDirection;
-   parent_getdomain = frame->GetDomain;
-   frame->GetDomain = GetDomain;
-   parent_getsystem = frame->GetSystem;
-   frame->GetSystem = GetSystem;
-   parent_setsystem = frame->SetSystem;
-   frame->SetSystem = SetSystem;
-   parent_clearsystem = frame->ClearSystem;
-   frame->ClearSystem = ClearSystem;
-   parent_getalignsystem = frame->GetAlignSystem;
-   frame->GetAlignSystem = GetAlignSystem;
-   parent_getformat = frame->GetFormat;
-   frame->GetFormat = GetFormat;
-   parent_getlabel = frame->GetLabel;
-   frame->GetLabel = GetLabel;
-   parent_getsymbol = frame->GetSymbol;
-   frame->GetSymbol = GetSymbol;
-   parent_gettitle = frame->GetTitle;
-   frame->GetTitle = GetTitle;
-   parent_getunit = frame->GetUnit;
-   frame->GetUnit = GetUnit;
-   parent_match = frame->Match;
-   frame->Match = Match;
-   parent_overlay = frame->Overlay;
-   frame->Overlay = Overlay;
-   parent_subframe = frame->SubFrame;
-   frame->SubFrame = SubFrame;
-   parent_unformat = frame->Unformat;
-   frame->Unformat = Unformat;
-
-   parent_setepoch = frame->SetEpoch;
-   frame->SetEpoch = SetEpoch;
-
-   parent_clearepoch = frame->ClearEpoch;
-   frame->ClearEpoch = ClearEpoch;
-
-   parent_setdut1 = frame->SetDut1;
-   frame->SetDut1 = SetDut1;
-
-   parent_cleardut1 = frame->ClearDut1;
-   frame->ClearDut1 = ClearDut1;
-
-/* Store replacement pointers for methods which will be over-ridden by new
-   member functions implemented here. */
-   frame->Angle = Angle;
-   frame->Distance = Distance;
-   frame->Intersect = Intersect;
-   frame->Norm = Norm;
-   frame->NormBox = NormBox;
-   frame->Resolve = Resolve;
-   frame->ResolvePoints = ResolvePoints;
-   frame->Offset = Offset;
-   frame->Offset2 = Offset2;
-   frame->ValidateSystem = ValidateSystem;
-   frame->SystemString = SystemString;
-   frame->SystemCode = SystemCode;
-   frame->LineDef = LineDef;
-   frame->LineContains = LineContains;
-   frame->LineCrossing = LineCrossing;
-   frame->LineOffset = LineOffset;
-   frame->GetActiveUnit = GetActiveUnit;
-   frame->TestActiveUnit = TestActiveUnit;
-   frame->MatchAxesX = MatchAxesX;
-
-/* Store pointers to inherited methods that will be invoked explicitly
-   by this class. */
-   parent_clearformat = frame->ClearFormat;
-   parent_setformat = frame->SetFormat;
-   parent_testformat = frame->TestFormat;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "SkyFrame",
-               "Description of celestial coordinate system" );
-
-/* Initialise information about the tables of cached Local Apparent
-   Sidereal Time values stored in the vtab. */
-   vtab->nlast_tables = 0;
-   vtab->last_tables = NULL;
-
-/* Initialize constants for converting between hours, degrees and
-   radians, etc.. */
-   LOCK_MUTEX2
-   palSlaDtf2r( 1, 0, 0.0, &hr2rad, &stat );
-   palSlaDaf2r( 1, 0, 0.0, &deg2rad, &stat );
-   palSlaDaf2r( 180, 0, 0.0, &pi, &stat );
-   piby2 = 0.5*pi;
-   UNLOCK_MUTEX2
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void Intersect( AstFrame *this_frame, const double a1[2],
-                       const double a2[2], const double b1[2],
-                       const double b2[2], double cross[2], 
-                       int *status ) {
-/*
-*  Name:
-*     Intersect
-
-*  Purpose:
-*     Find the point of intersection between two geodesic curves.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Intersect( AstFrame *this_frame, const double a1[2],
-*                      const double a2[2], const double b1[2],
-*                      const double b2[2], double cross[2], 
-*                      int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astIntersect method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the coordinate values at the point of
-*     intersection between two geodesic curves. Each curve is specified
-*     by two points on the curve. 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     a1
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a point on the first
-*        geodesic curve.
-*     a2
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a second point on the 
-*        first geodesic curve.
-*     b1
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a point on the second
-*        geodesic curve.
-*     b2
-*        An array of double, with one element for each Frame axis.
-*        This should contain the coordinates of a second point on 
-*        the second geodesic curve.
-*     cross
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the required intersection
-*        point will be returned. These will be AST__BAD if the curves do
-*        not intersect.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - For SkyFrames each curve will be a great circle, and in general
-*     each pair of curves will intersect at two diametrically opposite 
-*     points on the sky. The returned position is the one which is
-*     closest to point "a1".
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;          /* Pointer to the SkyFrame structure */
-   const int *perm;            /* Pointer to axis permutation array */
-   double aa1[ 2 ];            /* Permuted coordinates for a1 */
-   double aa2[ 2 ];            /* Permuted coordinates for a2 */
-   double bb1[ 2 ];            /* Permuted coordinates for b1 */
-   double bb2[ 2 ];            /* Permuted coordinates for b2 */
-   double cc[ 2 ];             /* Permuted coords at intersection */
-   double d1;                  /* Cos(distance from a1 to vp) */
-   double d2;                  /* Cos(distance from a1 to -vp) */
-   double na[ 3 ];             /* Normal to the a1/a2 great circle */
-   double nb[ 3 ];             /* Normal to the b1/b2 great circle */
-   double va1[ 3 ];            /* Vector pointing at a1 */
-   double va2[ 3 ];            /* Vector pointing at a2 */
-   double vb1[ 3 ];            /* Vector pointing at b1 */
-   double vb2[ 3 ];            /* Vector pointing at b2 */
-   double vmod;                /* Length of "vp" */
-   double vp[ 3 ];             /* Vector pointing at the intersection */
-   double vpn[ 3 ];            /* Normalised vp */
-   int iaxis;                  /* Axis index */
-
-/* Initialise. */
-   cross[ 0 ] = AST__BAD;
-   cross[ 1 ] = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Check that all supplied values are OK. */
-   if ( ( a1[ 0 ] != AST__BAD ) && ( a1[ 1 ] != AST__BAD ) &&
-        ( a2[ 0 ] != AST__BAD ) && ( a2[ 1 ] != AST__BAD ) &&
-        ( b1[ 0 ] != AST__BAD ) && ( b1[ 1 ] != AST__BAD ) &&
-        ( b2[ 0 ] != AST__BAD ) && ( b2[ 1 ] != AST__BAD ) ) {
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-      perm = astGetPerm( this );
-      if ( astOK ) {
-
-/* Apply the axis permutation array to obtain the coordinates of 
-   the points in the required (longitude,latitude) order. */
-         for( iaxis = 0; iaxis < 2; iaxis++ ) {
-            aa1[ perm[ iaxis ] ] = a1[ iaxis ];
-            aa2[ perm[ iaxis ] ] = a2[ iaxis ];
-            bb1[ perm[ iaxis ] ] = b1[ iaxis ];
-            bb2[ perm[ iaxis ] ] = b2[ iaxis ];
-         }
-
-/* Convert each (lon,lat) pair into a unit length 3-vector. */
-         palSlaDcs2c( aa1[ 0 ], aa1[ 1 ], va1 );
-         palSlaDcs2c( aa2[ 0 ], aa2[ 1 ], va2 );
-         palSlaDcs2c( bb1[ 0 ], bb1[ 1 ], vb1 );
-         palSlaDcs2c( bb2[ 0 ], bb2[ 1 ], vb2 );
-
-/* Find the normal vectors to the two great cicles. */
-         palSlaDvxv( va1, va2, na );
-         palSlaDvxv( vb1, vb2, nb );
-
-/* The cross product of the two normal vectors points to one of the
-   two diametrically opposite intersections. */
-         palSlaDvxv( na, nb, vp );
-
-/* Normalise the "vp" vector, also obtaining its original modulus. */
-         palSlaDvn( vp, vpn, &vmod );
-         if( vmod != 0.0 ) {
-
-/* We want the intersection which is closest to "a1". The dot product
-   gives the cos(distance) between two positions. So find the dot
-   product between "a1" and "vpn", and then between "a1" and the point
-   diametrically opposite "vpn". */
-            d1 = palSlaDvdv( vpn, va1 );
-            vpn[ 0 ] = -vpn[ 0 ];
-            vpn[ 1 ] = -vpn[ 1 ];
-            vpn[ 2 ] = -vpn[ 2 ];
-            d2 = palSlaDvdv( vpn, va1 );
-
-/* Revert to "vpn" if it is closer to "a1". */
-            if( d1 > d2 ) {
-               vpn[ 0 ] = -vpn[ 0 ];
-               vpn[ 1 ] = -vpn[ 1 ];
-               vpn[ 2 ] = -vpn[ 2 ];
-            }
-
-/* Convert the vector back into a (lon,lat) pair, and put the longitude
-   into the range 0 to 2.pi. */
-            palSlaDcc2s( vpn, cc, cc + 1 );
-            *cc = palSlaDranrm( *cc );
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
-   axis permutation array. */
-            cross[ 0 ] = cc[ perm[ 0 ] ];
-            cross[ 1 ] = cc[ perm[ 1 ] ];
-         }
-      }
-   }
-}
-
-static int IsEquatorial( AstSystemType system, int *status ) {
-/*
-*  Name:
-*     IsEquatorial
-
-*  Purpose:
-*     Test for an equatorial sky coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int IsEquatorial( AstSystemType system, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns a boolean value to indicate if a sky coordinate
-*     system is equatorial.
-
-*  Parameters:
-*     system
-*        Code to identify the sky coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the sky coordinate system is equatorial, otherwise zero.
-
-*  Notes:
-*     -  A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Determine if the sky coordinate system is an equatorial one. Note,
-   ICRS is not equatorial by definition, but is included here because it
-   is normally treated as an equatorial system in terms of the axis
-   labels, formats, etc. */
-   result = ( ( system == AST__FK4 ) ||
-              ( system == AST__FK4_NO_E ) ||
-              ( system == AST__ICRS ) ||
-              ( system == AST__FK5 ) ||
-              ( system == AST__J2000 ) ||
-              ( system == AST__GAPPT ) );
-
-/* Return the result. */
-   return result;
-}
-
-static int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status ) {
-/*
-*  Name:
-*     LineContains
-
-*  Purpose:
-*     Determine if a line contains a point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int LineContains( AstFrame *this, AstLineDef *l, int def, double *point, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astLineContains
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function determines if the supplied point is on the supplied
-*     line within the supplied Frame. The start point of the line is 
-*     considered to be within the line, but the end point is not. The tests 
-*     are that the point of closest approach of the line to the point should 
-*     be between the start and end, and that the distance from the point to 
-*     the point of closest aproach should be less than 1.0E-7 of the length 
-*     of the line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l
-*        Pointer to the structure defining the line. 
-*     def
-*        Should be set non-zero if the "point" array was created by a
-*        call to astLineCrossing (in which case it may contain extra
-*        information following the axis values),and zero otherwise.
-*     point
-*        Point to an array containing the axis values of the point to be 
-*        tested, possibly followed by extra cached information (see "def").
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the line contains the point. 
-
-*  Notes:
-*     - The pointer supplied for "l" should have been created using the 
-*     astLineDef method. These structures contained cached information about 
-*     the lines which improve the efficiency of this method when many 
-*     repeated calls are made. An error will be reported if the structure 
-*     does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   SkyLineDef *sl;               /* SkyLine information */
-   const int *perm;              /* Pointer to axis permutation array */
-   double *b;                    /* Pointer to Cartesian coords array */
-   double bb[3];                 /* Buffer for Cartesian coords */
-   double p1[2];                 /* Buffer for Spherical coords */
-   double t1, t2;
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result =0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check that the line refers to the supplied Frame. */
-   if( l->frame != this ) {
-      astError( AST__INTER, "astLineContains(%s): The supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* Check the axis values are good */
-   } else if( point[ 0 ] != AST__BAD && point[ 1 ] != AST__BAD ){
-
-/* Get a pointer to an array holding the corresponding Cartesian coords. */
-      if( def ) {
-         b = point + 2;
-
-      } else {
-         perm = astGetPerm( this );
-         if ( perm ) {
-            p1[ perm[ 0 ] ] = point[ 0 ];
-            p1[ perm[ 1 ] ] = point[ 1 ];
-            palSlaDcs2c( p1[ 0 ], p1[ 1 ], bb );
-            b = bb;
-         } else {
-            b = NULL;
-         }
-      }
-
-/* Recast the supplied AstLineDef into a SkyLineDef to get the different
-   structure (we know from the above check on the Frame that it is safe to
-   do this). */
-      sl = (SkyLineDef *) l;
-
-/* Check that the point of closest approach of the line to the point is
-   within the limits of the line. */
-      if( LineIncludes( sl, b, status ) ){
-
-/* Check that the point is 90 degrees away from the pole of the great
-   circle containing the line. */
-        t1 = palSlaDvdv( sl->q, b );
-        t2 = 1.0E-7*sl->length;
-        if( t2 < 1.0E-10 ) t2 = 1.0E-10;
-        if( fabs( t1 ) <= t2 ) result = 1;
-     }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2, 
-                         double **cross, int *status ) {
-/*
-*  Name:
-*     LineCrossing
-
-*  Purpose:
-*     Determine if two lines cross.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int LineCrossing( AstFrame *this, AstLineDef *l1, AstLineDef *l2, 
-*                       double **cross, int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astLineCrossing
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function determines if the two suplied line segments cross,
-*     and if so returns the axis values at the point where they cross.
-*     A flag is also returned indicating if the crossing point occurs
-*     within the length of both line segments, or outside one or both of
-*     the line segments.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     l1
-*        Pointer to the structure defining the first line. 
-*     l2
-*        Pointer to the structure defining the second line. 
-*     cross
-*        Pointer to a location at which to put a pointer to a dynamically
-*        alocated array containing the axis values at the crossing. If
-*        NULL is supplied no such array is returned. Otherwise, the returned 
-*        array should be freed using astFree when no longer needed. If the 
-*        lines are parallel (i.e. do not cross) then AST__BAD is returned for 
-*        all axis values. Note usable axis values are returned even if the 
-*        lines cross outside the segment defined by the start and end points 
-*        of the lines. The order of axes in the returned array will take
-*        account of the current axis permutation array if appropriate. Note, 
-*        sub-classes such as SkyFrame may append extra values to the end
-*        of the basic frame axis values. A NULL pointer is returned if an
-*        error occurs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the lines cross at a point which is
-*     within the [start,end) segment of both lines. If the crossing point
-*     is outside this segment on either line, or if the lines are parallel,
-*     zero is returned. Note, the start point is considered to be inside
-*     the length of the segment, but the end point is outside.
-
-*  Notes:
-*     - The pointers supplied for "l1" and "l2" should have been created
-*     using the astLineDef method. These structures contained cached
-*     information about the lines which improve the efficiency of this method
-*     when many repeated calls are made. An error will be reported if
-*     either structure does not refer to the Frame specified by "this".
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   SkyLineDef *sl1;              /* SkyLine information for line 1 */
-   SkyLineDef *sl2;              /* SkyLine information for line 2 */
-   const int *perm;              /* Pointer to axis permutation array */
-   double *crossing;             /* Pointer to returned array */
-   double *b;                    /* Pointer to Cartesian coords */
-   double len;                   /* Vector length */
-   double p[ 2 ];                /* Temporary (lon,lat) pair */
-   double temp[ 3 ];             /* Temporary vector */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result = 0;
-   if( cross ) *cross = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Allocate returned array (2 elements for the lon and lat values, plus 3
-   for the corresponding (x,y,z) coords). */
-   crossing = astMalloc( sizeof(double)*5 );
-
-/* Check that both lines refer to the supplied Frame. */
-   if( l1->frame != this ) {
-      astError( AST__INTER, "astLineCrossing(%s): First supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-   } else if( l2->frame != this ) {
-      astError( AST__INTER, "astLineCrossing(%s): Second supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* Recast the supplied AstLineDefs into a SkyLineDefs to get the different
-   structure (we know from the above check on the Frame that it is safe to
-   do this). */
-   } else if( crossing ){
-      sl1 = (SkyLineDef *) l1;
-      sl2 = (SkyLineDef *) l2;
-
-/* Point of intersection of the two great circles is perpendicular to the
-   pole vectors of both great circles. Put the Cartesian coords in elements
-   2 to 4 of the returned array. */
-      palSlaDvxv( sl1->q, sl2->q, temp );
-      b = crossing + 2;
-      palSlaDvn( temp, b, &len );
-
-/* See if this point is within the length of both arcs. If so return it. */
-      if( LineIncludes( sl2, b, status ) && LineIncludes( sl1, b, status ) ) {
-         result = 1;
-
-/* If not, see if the negated b vector is within the length of both arcs.
-   If so return it. Otherwise, we return zero. */
-      } else {
-         b[ 0 ] *= -1.0;
-         b[ 1 ] *= -1.0;
-         b[ 2 ] *= -1.0;
-         if( LineIncludes( sl2, b, status ) && LineIncludes( sl1, b, status ) ) result = 1;
-      }
-
-/* Store the spherical coords in elements 0 and 1 of the returned array. */
-      palSlaDcc2s( b, p, p + 1 );
-
-/* Permute the spherical axis value into the order used by the SkyFrame. */
-      perm = astGetPerm( this );
-      if( perm ){
-         crossing[ 0 ] = p[ perm[ 0 ] ];
-         crossing[ 1 ] = p[ perm[ 1 ] ];
-      }
-   }
-
-/* If an error occurred, return 0. */
-   if( !astOK ) {
-      result = 0;
-      crossing = astFree( crossing );
-   }
-
-/* Return the array */
-   if( cross ) {
-      *cross = crossing;
-   } else {
-      crossing = astFree( crossing );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstLineDef *LineDef( AstFrame *this, const double start[2], 
-                            const double end[2], int *status ) {
-/*
-*  Name:
-*     LineDef
-
-*  Purpose:
-*     Creates a structure describing a line segment in a 2D Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstLineDef *LineDef( AstFrame *this, const double start[2], 
-*                          const double end[2], int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astLineDef
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function creates a structure containing information describing a
-*     given line segment within the supplied 2D Frame. This may include
-*     information which allows other methods such as astLineCrossing to
-*     function more efficiently. Thus the returned structure acts as a
-*     cache to store intermediate values used by these other methods.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame. Must have 2 axes.
-*     start
-*        An array of 2 doubles marking the start of the line segment.
-*     end
-*        An array of 2 doubles marking the end of the line segment.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the memory structure containing the description of the
-*     line. This structure should be freed using astFree when no longer
-*     needed. A NULL pointer is returned (without error) if any of the
-*     supplied axis values are AST__BAD.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   SkyLineDef *result;           /* Returned value */
-   const int *perm;              /* Axis permutation array */
-   double len;                   /* Permuted point1 coordinates */
-   double p1[ 2 ];               /* Permuted point1 coordinates */
-   double p2[ 2 ];               /* Permuted point2 coordinates */
-   double temp[3];               /* Cartesian coords at offset position */
-   
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Check the axis values are good */
-   if( start[ 0 ] != AST__BAD && start[ 1 ] != AST__BAD && 
-       end[ 0 ] != AST__BAD && end[ 1 ] != AST__BAD ) {
-
-/* Allocate memory for the returned structure. */
-      result = astMalloc( sizeof( SkyLineDef ) );
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-      perm = astGetPerm( this );
-      if ( perm ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the two 
-   input points in the required (longitude,latitude) order. */
-         p1[ perm[ 0 ] ] = start[ 0 ];
-         p1[ perm[ 1 ] ] = start[ 1 ];
-         p2[ perm[ 0 ] ] = end[ 0 ];
-         p2[ perm[ 1 ] ] = end[ 1 ];
-
-/* Convert each point into a 3-vector of unit length and store in the
-   returned structure. */
-         palSlaDcs2c( p1[ 0 ], p1[ 1 ], result->start );
-         palSlaDcs2c( p2[ 0 ], p2[ 1 ], result->end );
-
-/* Calculate the great circle distance between the points in radians and
-   store in the result structure. */
-         result->length = acos( palSlaDvdv( result->start, result->end ) );
-
-/* Find a unit vector representing the pole of the system in which the
-   equator is given by the great circle. This is such that going the
-   short way from the start to the end, the pole is to the left of the 
-   line as seen by the observer (i.e. from the centre of the sphere). 
-   If the line has zero length, or 180 degrees length, the pole is
-   undefined, so we use an arbitrary value. */
-         if( result->length == 0.0 || result->length > pi - 5.0E-11 ) {
-            palSlaDcs2c( p1[ 0 ] + 0.01, p1[ 1 ] + 0.01, temp );
-            palSlaDvxv( temp, result->start, result->dir );
-         } else {
-            palSlaDvxv( result->end, result->start, result->dir );
-         }
-         palSlaDvn( result->dir, result->q, &len );
-
-/* Also store a point which is 90 degrees along the great circle from the
-   start. */
-         palSlaDvxv( result->start, result->q, result->dir );
-
-/* Store a pointer to the defining SkyFrame. */
-         result->frame = this;
-
-/* Indicate that the line is considered to be terminated at the start and
-   end points. */
-         result->infinite = 0; 
-
-
-   result->start_2d[ 0 ] = start[ 0 ];
-   result->start_2d[ 1 ] = start[ 1 ];
-   result->end_2d[ 0 ] = end[ 0 ];
-   result->end_2d[ 1 ] = end[ 1 ];
-
-   astNorm( this, result->start_2d );
-   astNorm( this, result->end_2d );
-
-      }
-   }
-
-/* Free the returned pointer if an error occurred. */
-   if( !astOK ) result = astFree( result );
-
-/* Return a pointer to the output structure. */
-   return (AstLineDef *) result;
-}
-
-static int LineIncludes( SkyLineDef *l, double point[3], int *status ) {
-/*
-*  Name:
-*     LineIncludes
-
-*  Purpose:
-*     Determine if a line includes a point which is known to be in the
-*     great circle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int LineIncludes( SkyLineDef *l, double point[3], int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astLineIncludes
-*     method inherited from the Frame class).
-
-*  Description:
-*     The supplied point is assumed to be a point on the great circle of 
-*     which the supplied line is a segment. This function returns true if 
-*     "point" is within the bounds of the segment (the end point of the
-*     line is assumed * not to be part of the segment).
-
-*  Parameters:
-*     l
-*        Pointer to the structure defining the line. 
-*     point
-*        An array holding the Cartesian coords of the point to be tested.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the line includes the point. 
-
-*  Notes:
-*     - Zero will be returned if this function is invoked with the global 
-*     error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   double t1, t2, t3;
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If the line is of infite length, it is assumed to include the supplied
-   point. */
-   if( l->infinite ) return 1;
-
-/* Otherwise, get the unsigned distance of the point from the start of the 
-   line in the range 0 - 180 degs. Check it is less than the line length. 
-   Then check that the point is not more than 90 degs away from the quarter 
-   point. */
-   t1 = palSlaDvdv( l->start, point );
-   t2 = acos( t1 );
-   t3 = palSlaDvdv( l->dir, point );   
-   return ( ((l->length > 0) ? t2 < l->length : t2 == 0.0 ) && t3 >= -1.0E-8 );
-}
-
-static void LineOffset( AstFrame *this, AstLineDef *line, double par, 
-                        double prp, double point[2], int *status ){
-/*
-*  Name:
-*     LineOffset
-
-*  Purpose:
-*     Find a position close to a line.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void LineOffset( AstFrame *this, AstLineDef *line, double par, 
-*                      double prp, double point[2], int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astLineOffset
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a position formed by moving a given distance along
-*     the supplied line, and then a given distance away from the supplied line.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     line
-*        Pointer to the structure defining the line. 
-*     par
-*        The distance to move along the line from the start towards the end.
-*     prp
-*        The distance to move at right angles to the line. Positive
-*        values result in movement to the left of the line, as seen from
-*        the observer, when moving from start towards the end.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The pointer supplied for "line" should have been created using the 
-*     astLineDef method. This structure contains cached information about the 
-*     line which improves the efficiency of this method when many repeated 
-*     calls are made. An error will be reported if the structure does not 
-*     refer to the Frame specified by "this".
-*-
-*/
-
-/* Local Variables; */
-    SkyLineDef *sl;
-    const int *perm;
-    double c;
-    double nx;
-    double ny;
-    double nz;
-    double p[2];
-    double s;
-    double v[3];
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Check that the line refers to the supplied Frame. */
-   if( line->frame != this ) {
-      astError( AST__INTER, "astLineOffset(%s): The supplied line does "
-                "not relate to the supplied %s (AST internal programming "
-                "error).", status, astGetClass( this ), astGetClass( this ) );
-
-/* This implementation uses spherical geometry. */
-   } else {
-
-/* Get a pointer to the SkyLineDef structure. */ 
-      sl = (SkyLineDef *) line;
-
-/* Move a distance par from start to end. */
-      c = cos( par );
-      s = sin( par );
-      nx = c * sl->start[ 0 ] + s * sl->dir[ 0 ];
-      ny = c * sl->start[ 1 ] + s * sl->dir[ 1 ];
-      nz = c * sl->start[ 2 ] + s * sl->dir[ 2 ];
-
-/* Move a distance prp from this point towards the pole point. */
-      if( prp != 0.0 ) {
-         c = cos( prp );
-         s = sin( prp );
-         v[ 0 ] = c * nx + s * sl->q[ 0 ];
-         v[ 1 ] = c * ny + s * sl->q[ 1 ];
-         v[ 2 ] = c * nz + s * sl->q[ 2 ];
-      } else {
-         v[ 0 ] = nx;
-         v[ 1 ] = ny;
-         v[ 2 ] = nz;
-      }
-
-/* Convert to lon/lat */
-      palSlaDcc2s( v, p, p + 1 );
-
-/* Permute the spherical axis value into the order used by the SkyFrame. */
-      perm = astGetPerm( this );
-      if( perm ){
-         point[ 0 ] = p[ perm[ 0 ] ];
-         point[ 1 ] = p[ perm[ 1 ] ];
-      }
-   }
-}
-
-static int MakeSkyMapping( AstSkyFrame *target, AstSkyFrame *result,
-                           AstSystemType align_sys, AstMapping **map, int *status ) {
-/*
-*  Name:
-*     MakeSkyMapping
-
-*  Purpose:
-*     Generate a Mapping between two SkyFrames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int MakeSkyMapping( AstSkyFrame *target, AstSkyFrame *result,
-*                         AstSystemType align_sys, AstMapping **map, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function takes two SkyFrames and generates a Mapping that
-*     converts between them, taking account of differences in their
-*     coordinate systems, equinox value, epoch, etc. (but not allowing
-*     for any axis permutations).
-
-*  Parameters:
-*     target
-*        Pointer to the first SkyFrame.
-*     result
-*        Pointer to the second SkyFrame.
-*     align_sys
-*        The system in which to align the two SkyFrames.
-*     map
-*        Pointer to a location which is to receive a pointer to the
-*        returned Mapping. The forward transformation of this Mapping
-*        will convert from "target" coordinates to "result"
-*        coordinates, and the inverse transformation will convert in
-*        the opposite direction (all coordinate values in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Mapping could be generated, or zero if the two
-*     SkyFrames are sufficiently un-related that no meaningful Mapping
-*     can be produced.
-
-*  Notes:
-*     A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Constants: */
-#define MAX_ARGS 4               /* Max arguments for an SlaMap conversion */
-
-/* Local Variables: */
-   AstMapping *omap;             /* Mapping from coorinates to offsets */
-   AstMapping *tmap2;            /* Temporary Mapping */
-   AstMapping *tmap;             /* Temporary Mapping */
-   AstSlaMap *slamap;            /* Pointer to SlaMap */
-   AstSystemType result_system;  /* Code to identify result coordinate system */
-   AstSystemType system;         /* Code to identify coordinate system */
-   AstSystemType target_system;  /* Code to identify target coordinate system */
-   double args[ MAX_ARGS ];      /* Conversion argument array */
-   double epoch;                 /* Epoch as Modified Julian Date */
-   double epoch_B;               /* Besselian epoch as decimal years */
-   double epoch_J;               /* Julian epoch as decimal years */
-   double equinox;               /* Equinox as Modified Julian Date */
-   double equinox_B;             /* Besselian equinox as decimal years */
-   double equinox_J;             /* Julian equinox as decimal years */
-   double diurab;                /* Magnitude of diurnal aberration vector */
-   double last;                  /* Local Apparent Sidereal Time */
-   double lat;                   /* Observers latitude */
-   double result_epoch;          /* Result frame Epoch */
-   double result_equinox;        /* Result frame Epoch */
-   double target_epoch;          /* Target frame Epoch */
-   double target_equinox;        /* Target frame Epoch */
-   int match;                    /* Mapping can be generated? */
-   int step1;                    /* Convert target to FK5 J2000? */
-   int step2;                    /* Convert FK5 J2000 to align sys? */
-   int step3;                    /* Convert align sys to FK5 J2000? */
-   int step4;                    /* Convert FK5 J2000 to result? */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
-   match = 1;
-   *map = NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   epoch_B = 0.0;
-   epoch_J = 0.0;
-   equinox_B = 0.0;
-   equinox_J = 0.0;
-   
-/* Get the two epoch values. */
-   result_epoch = astGetEpoch( result );
-   target_epoch = astGetEpoch( target );
-   
-/* Get the two equinox values. */
-   result_equinox = astGetEquinox( result );
-   target_equinox = astGetEquinox( target );
-   
-/* Get the two system values. */
-   result_system = astGetSystem( result );
-   target_system = astGetSystem( target );
-   
-/* If both systems are unknown, assume they are the same. Return a UnitMap.
-   We need to do this, otherwise a simple change of Title (for instance)
-   will result in a FrameSet whose current Frame has System=AST__UNKNOWN 
-   loosing its integrity. */
-   if( target_system == AST__UNKNOWN && result_system == AST__UNKNOWN ) {
-      *map = (AstMapping *) astUnitMap( 2, "", status );
-      return 1;
-   }
-   
-/* The total Mapping is divided into two parts in series; the first part
-   converts from the target SkyFrame to the alignment system, using the 
-   Epoch and Equinox of the target Frame, the second part converts from 
-   the alignment system to the result SkyFrame, using the Epoch and Equinox 
-   of the result Frame. Each of these parts has an arbitrary input and an 
-   output system, and therefore could be implemented using a collection
-   of NxN conversions. To reduce the complexity, each part is implement 
-   by converting from the input system to FK5 J2000, and then from FK5 
-   J2000 to the output system. This scheme required only N conversions 
-   rather than NxN. Thus overall the total Mapping is made up of 4 steps
-   in series. Some of these steps may be ommitted if they are effectively
-   a UnitMap. Determine which steps need to be included. Assume all need
-   to be done to begin with. */
-   step1 = 1;
-   step2 = 1;
-   step3 = 1;
-   step4 = 1;
-   
-/* If the target system is the same as the alignment system, neither of the 
-   first 2 steps need be done. */
-   if( target_system == align_sys ) {
-      step1 = 0;
-      step2 = 0;
-   }
-   
-/* If the result system is the same as the alignment system, neither of the 
-   last 2 steps need be done. */
-   if( result_system == align_sys ) {
-      step3 = 0;
-      step4 = 0;
-   }
-   
-/* If the two epochs are the same, or if the alignment system is FK5 J2000,
-   steps 2 and 3 are not needed. */
-   if( step2 && step3 ) {   
-      if( align_sys == AST__FK5 || result_epoch == target_epoch ) {
-      step2 = 0;
-      step3 = 0;
-      }
-   }
-   
-/* None are needed if the target and result SkyFrames have the same
-   System, Epoch and Equinox. */
-   if(  result_system == target_system &&
-        result_epoch == target_epoch &&
-        result_equinox == target_equinox ) {
-      step1 = 0;
-      step2 = 0;
-      step3 = 0;
-      step4 = 0;
-   }     
-   
-/* Create an initial (null) SlaMap. */
-   slamap = astSlaMap( 0, "", status );
-   
-/* Define local macros as shorthand for adding sky coordinate
-   conversions to this SlaMap.  Each macro simply stores details of
-   the additional arguments in the "args" array and then calls
-   astSlaAdd. The macros differ in the number of additional argument
-   values. */
-   #define TRANSFORM_0(cvt) \
-           astSlaAdd( slamap, cvt, NULL );
-   
-   #define TRANSFORM_1(cvt,arg0) \
-           args[ 0 ] = arg0; \
-           astSlaAdd( slamap, cvt, args );
-   
-   #define TRANSFORM_2(cvt,arg0,arg1) \
-           args[ 0 ] = arg0; \
-           args[ 1 ] = arg1; \
-           astSlaAdd( slamap, cvt, args );
-   
-   #define TRANSFORM_3(cvt,arg0,arg1,arg2) \
-           args[ 0 ] = arg0; \
-           args[ 1 ] = arg1; \
-           args[ 2 ] = arg2; \
-           astSlaAdd( slamap, cvt, args );
-   
-   #define TRANSFORM_4(cvt,arg0,arg1,arg2,arg3) \
-           args[ 0 ] = arg0; \
-           args[ 1 ] = arg1; \
-           args[ 2 ] = arg2; \
-           args[ 3 ] = arg3; \
-           astSlaAdd( slamap, cvt, args );
-   
-/* Convert _to_ FK5 J2000.0 coordinates. */
-/* ===================================== */
-/* The overall conversion is formulated in four phases. In this first
-   phase, we convert from the target coordinate system to intermediate sky
-   coordinates expressed using the FK5 system, mean equinox J2000.0. */
-   
-/* Obtain the sky coordinate system, equinox, epoch, etc, of the target
-   SkyFrame. */
-   system = target_system;
-   equinox = target_equinox;
-   epoch = target_epoch;
-   last = GetLAST( target, status );
-   diurab = GetDiurab( target, status );
-   lat = astGetObsLat( target );
-   if( astOK && step1 ) {
-   
-/* Convert the equinox and epoch values (stored as Modified Julian
-   Dates) into the equivalent Besselian and Julian epochs (as decimal
-   years). */
-      equinox_B = palSlaEpb( equinox );
-      equinox_J = palSlaEpj( equinox );
-      epoch_B = palSlaEpb( epoch );
-      epoch_J = palSlaEpj( epoch );
-   
-/* Formulate the conversion... */
-   
-/* From FK4. */
-/* --------- */
-/* If necessary, apply the old-style FK4 precession model to bring the
-   equinox to B1950.0, with rigorous handling of the E-terms of
-   aberration. Then convert directly to FK5 J2000.0 coordinates. */
-      if ( system == AST__FK4 ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_1( "SUBET", equinox_B )
-            TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
-            TRANSFORM_1( "ADDET", 1950.0 )
-         }
-         TRANSFORM_1( "FK45Z", epoch_B )
-   
-/* From FK4 with no E-terms. */
-/* ------------------------- */
-/* This is the same as above, except that we do not need to subtract
-      the E-terms initially as they are already absent. */
-      } else if ( system == AST__FK4_NO_E ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
-         }
-         TRANSFORM_1( "ADDET", 1950.0 )
-         TRANSFORM_1( "FK45Z", epoch_B )
-   
-/* From FK5. */
-/* --------- */
-/* We simply need to apply a precession correction for the change of
-   equinox.  Omit even this if the equinox is already J2000.0. */
-      } else if ( system == AST__FK5 ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
-         if ( equinox_J != 2000.0 ) {
-            TRANSFORM_2( "PREC", equinox_J, 2000.0 );
-         }
-   
-/* From J2000. */
-/* ----------- */
-/* Convert from J2000 to ICRS, then from ICRS to FK5. */
-      } else if ( system == AST__J2000 ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_0( "J2000H" )
-         TRANSFORM_1( "HFK5Z", epoch_J );
-   
-/* From geocentric apparent. */
-/* ------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__GAPPT ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_2( "AMP", epoch, 2000.0 )
-   
-/* From ecliptic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__ECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
-         TRANSFORM_1( "ECLEQ", equinox )
-   
-/* From helio-ecliptic coordinates. */
-/* -------------------------------- */
-      } else if ( system == AST__HELIOECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_1( "HEEQ", epoch )
-   
-/* From galactic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__GALACTIC ) {
-         TRANSFORM_0( "GALEQ" )
-   
-/* From ICRS. */
-/* ---------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__ICRS ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_1( "HFK5Z", epoch_J );
-   
-/* From supergalactic coordinates. */
-/* ------------------------------- */
-/* Convert to galactic coordinates and then to FK5 J2000.0
-      equatorial. */
-      } else if ( system == AST__SUPERGALACTIC ) {
-         TRANSFORM_0( "SUPGAL" )
-         TRANSFORM_0( "GALEQ" )
-   
-/* From AzEl. */
-/* ---------- */
-/* Rotate from horizon to equator (H2E), shift hour angle into RA (H2R),
-      go from geocentric apparent to FK5 J2000. */
-      } else if ( system == AST__AZEL ) {
-         VerifyMSMAttrs( target, result, 1, "ObsLon ObsLat Epoch", "astMatch", status );
-         TRANSFORM_2( "H2E", lat, diurab )
-         TRANSFORM_1( "H2R", last )
-         TRANSFORM_2( "AMP", epoch, 2000.0 )
-   
-/* From unknown coordinates. */
-/* ------------------------- */
-/* No conversion is possible. */
-      } else if ( system == AST__UNKNOWN ) {
-         match = 0;
-      }
-   }
-   
-/* Convert _from_ FK5 J2000.0 coordinates _to_ the alignment system. */
-/* ============================================================ */
-/* In this second phase, we convert to the system given by the align_sys
-   argument (if required), still using the properties of the target Frame. */
-   if ( astOK && match && step2 ) {
-   
-/* Align in FK4. */
-/* --------------- */
-/* Convert directly from FK5 J2000.0 to FK4 B1950.0 coordinates at the
-   appropriate epoch. Then, if necessary, apply the old-style FK4
-   precession model to bring the equinox to that required, with
-   rigorous handling of the E-terms of aberration. */
-      if ( align_sys == AST__FK4 ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
-         TRANSFORM_1( "FK54Z", epoch_B )
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_1( "SUBET", 1950.0 )
-            TRANSFORM_2( "PREBN", 1950.0, equinox_B )
-            TRANSFORM_1( "ADDET", equinox_B )
-         }
-   
-/* Align in FK4 with no E-terms. */
-/* ------------------------------- */
-/* This is the same as above, except that we do not need to add the
-   E-terms at the end. */
-      } else if ( align_sys == AST__FK4_NO_E ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox Epoch", "astMatch", status );
-         TRANSFORM_1( "FK54Z", epoch_B )
-         TRANSFORM_1( "SUBET", 1950.0 )
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_2( "PREBN", 1950.0, equinox_B )
-         }
-   
-/* Align in FK5. */
-/* ------------- */
-/* We simply need to apply a precession correction for the change of
-   equinox.  Omit even this if the required equinox is J2000.0. */
-      } else if ( align_sys == AST__FK5 ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
-         if ( equinox_J != 2000.0 ) {
-            TRANSFORM_2( "PREC", 2000.0, equinox_J )
-         }
-   
-/* Align in J2000. */
-/* --------------- */
-/* Mov from FK5 to ICRS, and from ICRS to J2000. */
-      } else if ( align_sys == AST__J2000 ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_1( "FK5HZ", epoch_J )
-         TRANSFORM_0( "HJ2000" )
-   
-/* Align in geocentric apparent. */
-/* ------------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__GAPPT ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_2( "MAP", 2000.0, epoch )
-   
-/* Align in ecliptic coordinates. */
-/* -------------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__ECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 1, "Equinox", "astMatch", status );
-         TRANSFORM_1( "EQECL", equinox )
-   
-/* Align in helio-ecliptic coordinates. */
-/* ------------------------------------ */
-      } else if ( align_sys == AST__HELIOECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_1( "EQHE", epoch )
-   
-/* Align in galactic coordinates. */
-/* -------------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__GALACTIC ) {
-         TRANSFORM_0( "EQGAL" )
-   
-/* Align in ICRS. */
-/* -------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__ICRS ) {
-         VerifyMSMAttrs( target, result, 1, "Epoch", "astMatch", status );
-         TRANSFORM_1( "FK5HZ", epoch_J )
-   
-/* Align in supergalactic coordinates. */
-/* ------------------------------------- */
-/* Convert to galactic coordinates and then to supergalactic. */
-      } else if ( align_sys == AST__SUPERGALACTIC ) {
-         TRANSFORM_0( "EQGAL" )
-         TRANSFORM_0( "GALSUP" )
-   
-/* Align in AzEl coordinates. */
-/* -------------------------- */
-/* Go from FK5 J2000 to geocentric apparent (MAP), shift RA into hour angle
-   (R2H), rotate from equator to horizon (E2H). */
-      } else if ( align_sys == AST__AZEL ) {
-         VerifyMSMAttrs( target, result, 1, "ObsLon ObsLat Epoch", "astMatch", status );
-         TRANSFORM_2( "MAP", 2000.0, epoch )
-         TRANSFORM_1( "R2H", last )
-         TRANSFORM_2( "E2H", lat, diurab )
-   
-/* Align in unknown coordinates. */
-/* ------------------------------- */
-/* No conversion is possible. */
-      } else if ( align_sys == AST__UNKNOWN ) {
-         match = 0;
-      }
-   }
-   
-/* Convert _from_ the alignment system _to_ FK5 J2000.0 coordinates */
-/* =========================================================== */
-/* In this third phase, we convert from the alignment system (if required)
-   to the intermediate FK5 J2000 system, using the properties of the
-   result SkyFrame. */
-   
-/* Obtain the sky coordinate system, equinox, epoch, etc, of the result
-   SkyFrame. */
-   system = result_system;
-   equinox = result_equinox;
-   epoch = result_epoch;
-   diurab = GetDiurab( result, status );
-   last = GetLAST( result, status );
-   lat = astGetObsLat( result );
-   
-/* Convert the equinox and epoch values (stored as Modified Julian
-   Dates) into the equivalent Besselian and Julian epochs (as decimal
-   years). */
-   if( astOK ) {
-      equinox_B = palSlaEpb( equinox );
-      equinox_J = palSlaEpj( equinox );
-      epoch_B = palSlaEpb( epoch );
-      epoch_J = palSlaEpj( epoch );
-   }
-   
-/* Check we need to do the conversion. */
-   if ( astOK && match && step3 ) {
-   
-/* Formulate the conversion... */
-   
-/* From FK4. */
-/* --------- */
-/* If necessary, apply the old-style FK4 precession model to bring the
-   equinox to B1950.0, with rigorous handling of the E-terms of
-   aberration. Then convert directly to FK5 J2000.0 coordinates. */
-      if ( align_sys == AST__FK4 ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_1( "SUBET", equinox_B )
-            TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
-            TRANSFORM_1( "ADDET", 1950.0 )
-         }
-         TRANSFORM_1( "FK45Z", epoch_B )
-   
-/* From FK4 with no E-terms. */
-/* ------------------------- */
-/* This is the same as above, except that we do not need to subtract
-   the E-terms initially as they are already absent. */
-      } else if ( align_sys == AST__FK4_NO_E ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_2( "PREBN", equinox_B, 1950.0 )
-         }
-         TRANSFORM_1( "ADDET", 1950.0 )
-         TRANSFORM_1( "FK45Z", epoch_B )
-   
-/* From FK5. */
-/* --------- */
-/* We simply need to apply a precession correction for the change of
-   equinox.  Omit even this if the equinox is already J2000.0. */
-      } else if ( align_sys == AST__FK5 ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
-         if ( equinox_J != 2000.0 ) {
-            TRANSFORM_2( "PREC", equinox_J, 2000.0 );
-         }
-   
-/* From geocentric apparent. */
-/* ------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__GAPPT ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_2( "AMP", epoch, 2000.0 )
-   
-/* From ecliptic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__ECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
-         TRANSFORM_1( "ECLEQ", equinox )
-   
-/* From helio-ecliptic coordinates. */
-/* -------------------------------- */
-      } else if ( align_sys == AST__HELIOECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_1( "HEEQ", epoch )
-   
-/* From galactic coordinates. */
-/* -------------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__GALACTIC ) {
-         TRANSFORM_0( "GALEQ" )
-   
-/* From ICRS. */
-/* ---------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( align_sys == AST__ICRS ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_1( "HFK5Z", epoch_J )
-   
-/* From J2000. */
-/* ----------- */
-/* From J2000 to ICRS, and from ICRS to FK5. */
-      } else if ( align_sys == AST__J2000 ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_0( "J2000H" )
-         TRANSFORM_1( "HFK5Z", epoch_J )
-   
-/* From supergalactic coordinates. */
-/* ------------------------------- */
-/* Convert to galactic coordinates and then to FK5 J2000.0
-      equatorial. */
-      } else if ( align_sys == AST__SUPERGALACTIC ) {
-         TRANSFORM_0( "SUPGAL" )
-         TRANSFORM_0( "GALEQ" )
-   
-/* From AzEl. */
-/* ---------- */
-/* Rotate from horizon to equator (H2E), shift hour angle into RA (H2R),
-      go from geocentric apparent to FK5 J2000. */
-      } else if ( align_sys == AST__AZEL ) {
-         VerifyMSMAttrs( target, result, 3, "ObsLon ObsLat Epoch", "astMatch", status );
-         TRANSFORM_2( "H2E", lat, diurab )
-         TRANSFORM_1( "H2R", last )
-         TRANSFORM_2( "AMP", epoch, 2000.0 )
-   
-/* From unknown coordinates. */
-/* ------------------------------- */
-/* No conversion is possible. */
-      } else if ( align_sys == AST__UNKNOWN ) {
-         match = 0;
-      }
-   }
-   
-/* Convert _from_ FK5 J2000.0 coordinates. */
-/* ======================================= */
-/* In this fourth and final phase, we convert to the result coordinate
-   system from the intermediate FK5 J2000 sky coordinates generated above. */
-   if ( astOK && match && step4 ) {
-   
-/* To FK4. */
-/* ------- */
-/* Convert directly from FK5 J2000.0 to FK4 B1950.0 coordinates at the
-   appropriate epoch. Then, if necessary, apply the old-style FK4
-   precession model to bring the equinox to that required, with
-   rigorous handling of the E-terms of aberration. */
-      if ( system == AST__FK4 ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
-         TRANSFORM_1( "FK54Z", epoch_B )
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_1( "SUBET", 1950.0 )
-            TRANSFORM_2( "PREBN", 1950.0, equinox_B )
-            TRANSFORM_1( "ADDET", equinox_B )
-         }
-   
-/* To FK4 with no E-terms. */
-/* ----------------------- */
-/* This is the same as above, except that we do not need to add the
-   E-terms at the end. */
-      } else if ( system == AST__FK4_NO_E ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox Epoch", "astMatch", status );
-         TRANSFORM_1( "FK54Z", epoch_B )
-         TRANSFORM_1( "SUBET", 1950.0 )
-         if ( equinox_B != 1950.0 ) {
-            TRANSFORM_2( "PREBN", 1950.0, equinox_B )
-         }
-   
-/* To FK5. */
-/* ------- */
-/* We simply need to apply a precession correction for the change of
-   equinox.  Omit even this if the required equinox is J2000.0. */
-      } else if ( system == AST__FK5 ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
-         if ( equinox_J != 2000.0 ) {
-            TRANSFORM_2( "PREC", 2000.0, equinox_J )
-         }
-   
-/* To geocentric apparent. */
-/* ----------------------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__GAPPT ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_2( "MAP", 2000.0, epoch )
-   
-/* To ecliptic coordinates. */
-/* ------------------------ */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__ECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 3, "Equinox", "astMatch", status );
-         TRANSFORM_1( "EQECL", equinox )
-   
-/* To helio-ecliptic coordinates. */
-/* ------------------------------ */
-      } else if ( system == AST__HELIOECLIPTIC ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_1( "EQHE", epoch )
-   
-/* To galactic coordinates. */
-/* ------------------------ */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__GALACTIC ) {
-         TRANSFORM_0( "EQGAL" )
-   
-/* To ICRS. */
-/* -------- */
-/* This conversion is supported directly by SLALIB. */
-      } else if ( system == AST__ICRS ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_1( "FK5HZ", epoch_J )
-   
-/* To J2000. */
-/* --------- */
-/* From FK5 to ICRS, then from ICRS to J2000. */
-      } else if ( system == AST__J2000 ) {
-         VerifyMSMAttrs( target, result, 3, "Epoch", "astMatch", status );
-         TRANSFORM_1( "FK5HZ", epoch_J )
-         TRANSFORM_0( "HJ2000" )
-   
-/* To supergalactic coordinates. */
-/* ----------------------------- */
-/* Convert to galactic coordinates and then to supergalactic. */
-      } else if ( system == AST__SUPERGALACTIC ) {
-         TRANSFORM_0( "EQGAL" )
-         TRANSFORM_0( "GALSUP" )
-   
-/* To AzEl */
-/* ------- */
-/* Go from FK5 J2000 to geocentric apparent (MAP), shift RA into hour angle
-   (R2H), rotate from equator to horizon (E2H). */
-      } else if ( system == AST__AZEL ) {
-         VerifyMSMAttrs( target, result, 3, "ObsLon ObsLat Epoch", "astMatch", status );
-         TRANSFORM_2( "MAP", 2000.0, epoch )
-         TRANSFORM_1( "R2H", last )
-         TRANSFORM_2( "E2H", lat, diurab )
-   
-/* To unknown coordinates. */
-/* ----------------------------- */
-/* No conversion is possible. */
-      } else if ( system == AST__UNKNOWN ) {
-         match = 0;
-      }
-   }
-   
-/* Now need to take account of the possibility that the input or output
-   SkyFrame may represent an offset system rather than a coordinate system. 
-   Form the Mapping from the target coordinate system to the associated
-   offset system. A UnitMap is returned if the target does not use an
-   offset system. */
-   omap = OffsetMap( target, status );
-   
-/* Invert it to get the Mapping from the actual used system (whther
-   offsets or coordinates) to the coordinate system. */
-   astInvert( omap );
-   
-/* Combine it with the slamap created earlier, so that its coordinate
-   outputs feed the inputs of the slamap. Annul redundant pointers 
-   afterwards. */
-   tmap = (AstMapping *) astCmpMap( omap, slamap, 1, "", status );
-   omap = astAnnul( omap );
-   slamap =astAnnul( slamap );
-   
-/* Now form the Mapping from the result coordinate system to the associated
-   offset system. A UnitMap is returned if the result does not use an
-   offset system. */
-   omap = OffsetMap( result, status );
-   
-/* Combine it with the above CmpMap, so that the CmpMap outputs feed the
-   new Mapping inputs. Annul redundant pointers afterwards. */
-   tmap2 = (AstMapping *) astCmpMap( tmap, omap, 1, "", status );
-   omap =astAnnul( omap );
-   tmap =astAnnul( tmap );
-   
-/* Simplify the Mapping produced above (this eliminates any redundant
-   conversions) and annul the original pointer. */
-   *map = astSimplify( tmap2 );
-   tmap2 = astAnnul( tmap2 );
-
-/* If an error occurred, annul the returned Mapping and clear the
-   returned values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      match = -1;
-   }
-
-/* Return the result. */
-   return match;
-
-/* Undefine macros local to this function. */
-#undef MAX_ARGS
-#undef TRANSFORM_0
-#undef TRANSFORM_1
-#undef TRANSFORM_2
-#undef TRANSFORM_3
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes, AstMapping **map,
-                  AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astMatch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function matches a "template" SkyFrame to a "target" Frame and
-*     determines whether it is possible to convert coordinates between them.
-*     If it is, a mapping that performs the transformation is returned along
-*     with a new Frame that describes the coordinate system that results when
-*     this mapping is applied to the "target" coordinate system. In addition,
-*     information is returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" and "template"
-*     Frames from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template SkyFrame. This describes the coordinate system
-*        (or set of possible coordinate systems) into which we wish to convert
-*        our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate system in
-*        which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the template SkyFrame axis from which
-*        it is derived. If it is not derived from any template SkyFrame axis,
-*        a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the target Frame axis from which it
-*        is derived. If it is not derived from any target Frame axis, a value
-*        of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will be
-*        returned if the requested coordinate conversion is possible. If
-*        returned, the forward transformation of this Mapping may be used to
-*        convert coordinates between the "target" Frame and the "result"
-*        Frame (see below) and the inverse transformation will convert in the
-*        opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be returned
-*        if the requested coordinate conversion is possible. If returned, this
-*        Frame describes the coordinate system that results from applying the
-*        returned Mapping (above) to the "target" coordinate system. In
-*        general, this Frame will combine attributes from (and will therefore
-*        be more specific than) both the target and the template Frames. In
-*        particular, when the template allows the possibility of transformaing
-*        to any one of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate conversion is
-*     possible. Otherwise zero is returned (this will not in itself result in
-*     an error condition).
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     This implementation addresses the matching of a SkyFrame class object to
-*     any other class of Frame. A SkyFrame will match any class of SkyFrame
-*     (i.e. possibly from a derived class) but will not match a less
-*     specialised class of Frame.
-*/
-
-/* Local Variables: */
-   AstFrame *frame0;          /* Pointer to Frame underlying axis 0 */
-   AstFrame *frame1;          /* Pointer to Frame underlying axis 1 */
-   AstSkyFrame *template;     /* Pointer to template SkyFrame structure */
-   int iaxis;                 /* Axis index */
-   int iaxis0;                /* Axis index underlying axis 0 */
-   int iaxis1;                /* Axis index underlying axis 1 */
-   int match;                 /* Coordinate conversion possible? */
-   int swap1;                 /* Template axes swapped? */
-   int swap2;                 /* Target axes swapped? */
-   int swap;                  /* Additional axis swap needed? */
-   int target_axis0;          /* Index of 1st SkyFrame axis in the target */
-   int target_axis1;          /* Index of 2nd SkyFrame axis in the target */
-   int target_naxes;          /* Number of target axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   swap = 0;
-   target_axis0 = -1;  
-   target_axis1 = -1;  
-
-/* Obtain a pointer to the template SkyFrame structure. */
-   template = (AstSkyFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
-   target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
-   Frame class object. This ensures that the number of axes (2) and
-   domain, etc. of the target Frame are suitable. Invoke the parent
-   "astMatch" method to verify this. */
-   match = (*parent_match)( template_frame, target,
-                            template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
-   needed, but keep the memory allocated for the axis association
-   arrays, which we will re-use. */
-   if ( astOK && match ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-   }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
-   all target axes. Stop when a SkyFrame axis is found. */
-   if ( match && astOK ) {
-
-      match = 0;
-      for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
-         astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
-         if( astIsASkyFrame( frame0 ) ) {
-            target_axis0 = iaxis;
-            match = 1;
-            break;
-         } else {
-            frame0 = astAnnul( frame0 );
-         }
-      }
-
-/* Check at least one SkyFrame axis was found it the target. */
-      if( match ) {
-
-/* If so, search the remaining target axes for another axis that is
-   derived from the same SkyFrame. */
-         match = 0;
-         for( iaxis++ ; iaxis < target_naxes; iaxis++ ) {
-            astPrimaryFrame( target, iaxis, &frame1, &iaxis1 );
-            if( frame1 == frame0 ) {
-               target_axis1 = iaxis;
-               frame1 = astAnnul( frame1 );
-               match = 1;
-               break;
-            } else {
-               frame1 = astAnnul( frame1 );
-            }
-         }
-
-/* Annul the remaining Frame pointer used in the above tests. */
-         frame0 = astAnnul( frame0 );
-      }
-
-/* If this test is passed, we can now test that the underlying axis indices
-   are 0 and 1, in either order. This then ensures that we have a
-   single SkyFrame (not a compound Frame) with both axes present. */
-      if ( match && astOK ) {
-         match = ( ( ( iaxis0 == 0 ) && ( iaxis1 == 1 ) ) ||
-                   ( ( iaxis1 == 0 ) && ( iaxis0 == 1 ) ) );
-      }
-
-   }
-
-/* If a possible match has been detected, we must now decide how the
-   order of the axes in the result Frame relates to the order of axes
-   in the target Frame. There are two factors involved. The first
-   depends on whether the axis permutation array for the template
-   SkyFrame (whose method we are executing) causes an axis
-   reversal. Determine this by permuting axis index zero. */
-   if ( astOK && match ) {
-      swap1 = ( astValidateAxis( template, 0, "astMatch" ) != 0 );
-
-/* The second factor depends on whether the axes of the underlying
-   primary SkyFrame are reversed when seen in the target Frame. */
-      swap2 = ( iaxis0 != 0 );
-
-/* Combine these to determine if an additional axis swap will be
-   needed. */
-      swap = ( swap1 != swap2 );
-
-/* Now check to see if this additional swap is permitted by the
-   template's Permute attribute. */
-      match = ( !swap || astGetPermute( template ) );
-   }
-
-/* If the Frames still match, we next set up the axis association
-   arrays. */
-   if ( astOK && match ) {
-
-/* If the target axis order is to be preserved, then the target axis
-   association involves no permutation but the template axis
-   association may involve an axis swap. */
-      if ( astGetPreserveAxes( template ) ) {
-         (*template_axes)[ 0 ] = swap;
-         (*template_axes)[ 1 ] = !swap;
-         (*target_axes)[ 0 ] = target_axis0;
-         (*target_axes)[ 1 ] = target_axis1;
-
-/* Otherwise, any swap applies to the target axis association
-   instead. */
-      } else {
-         (*template_axes)[ 0 ] = 0;
-         (*template_axes)[ 1 ] = 1;
-         (*target_axes)[ 0 ] = swap ? target_axis1 : target_axis0;
-         (*target_axes)[ 1 ] = swap ? target_axis0 : target_axis1;
-      }
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
-   result Frame) with copies of the target axes in the required
-   order. This process also overlays the template attributes on to the
-   target Frame and returns a Mapping between the target and result
-   Frames which effects the required coordinate conversion. */
-      match = astSubFrame( target, template, 2, *target_axes, *template_axes,
-                           map, result );
-   }
-
-/* If an error occurred, or conversion to the result Frame's
-   coordinate system was not possible, then free all memory, annul the
-   returned objects, and reset the returned value. */
-   if ( !astOK || !match ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void MatchAxesX( AstFrame *frm2_frame, AstFrame *frm1, int *axes, 
-                        int *status ) {
-/*
-*  Name:
-*     MatchAxesX
-
-*  Purpose:
-*     Find any corresponding axes in two Frames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void MatchAxesX( AstFrame *frm2, AstFrame *frm1, int *axes )
-*                      int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astMatchAxesX
-*     method inherited from the Frame class).
-
-*     This function looks for corresponding axes within two supplied 
-*     Frames. An array of integers is returned that contains an element
-*     for each axis in the second supplied Frame. An element in this array 
-*     will be set to zero if the associated axis within the second Frame
-*     has no corresponding axis within the first Frame. Otherwise, it
-*     will be set to the index (a non-zero positive integer) of the
-*     corresponding axis within the first supplied Frame.
-
-*  Parameters:
-*     frm2
-*        Pointer to the second Frame.
-*     frm1
-*        Pointer to the first Frame.
-*     axes
-*        Pointer to an integer array in which to return the indices of 
-*        the axes (within the first Frame) that correspond to each axis 
-*        within the second Frame. Axis indices start at 1. A value of zero 
-*        will be stored in the returned array for each axis in the second
-*        Frame that has no corresponding axis in the first Frame.
-*
-*        The number of elements in this array must be greater than or 
-*        equal to the number of axes in the second Frame.
-*     status
-*        Pointer to inherited status value.
-
-*  Notes:
-*     -  Corresponding axes are identified by the fact that a Mapping 
-*     can be found between them using astFindFrame or astConvert. Thus, 
-*     "corresponding axes" are not necessarily identical. For instance, 
-*     SkyFrame axes in two Frames will match even if they describe 
-*     different celestial coordinate systems
-*/
-
-/* Local Variables: */
-   AstFrame *resfrm;          
-   AstMapping *resmap;              
-   AstSkyFrame *frm2;
-   int *frm2_axes;
-   int *frm1_axes;
-   int max_axes;
-   int min_axes;
-   int preserve_axes;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the SkyFrame. */
-   frm2 = (AstSkyFrame *) frm2_frame;   
-
-/* Temporarily ensure that the PreserveAxes attribute is non-zero in
-   the first supplied Frame. This means thte result Frame returned by
-   astMatch below will have the axis count and order of the target Frame
-   (i.e. "pfrm"). */
-   if( astTestPreserveAxes( frm1 ) ) {
-      preserve_axes = astGetPreserveAxes( frm1 ) ? 1 : 0;
-   } else {
-      preserve_axes = -1;
-   }
-   astSetPreserveAxes( frm1, 1 );
-
-/* Temporarily ensure that the MaxAxes and MinAxes attributes in the
-   first supplied Frame are set so the Frame can be used as a template
-   in astMatch for matching any number of axes. */
-   if( astTestMaxAxes( frm1 ) ) {
-      max_axes = astGetMaxAxes( frm1 );
-   } else {
-      max_axes = -1;
-   }
-   astSetMaxAxes( frm1, 10000 );
-
-   if( astTestMinAxes( frm1 ) ) {
-      min_axes = astGetMinAxes( frm1 );
-   } else {
-      min_axes = -1;
-   }
-   astSetMinAxes( frm1, 1 );
-
-/* Attempt to find a sub-frame within the first supplied Frame that
-   corresponds to the supplied SkyFrame. */
-   if( astMatch( frm1, frm2, &frm1_axes, &frm2_axes, &resmap, &resfrm ) ) {
-
-/* If successfull, Store the one-based index within "frm1" of the 
-   corresponding axes. */
-      axes[ 0 ] = frm1_axes[ 0 ] + 1;
-      axes[ 1 ] = frm1_axes[ 1 ] + 1;
-
-/* Free resources */
-      frm1_axes = astFree( frm1_axes );
-      frm2_axes = astFree( frm2_axes );
-      resmap = astAnnul( resmap );
-      resfrm = astAnnul( resfrm );
-
-/* If no corresponding SkyFrame was found store zeros in the returned array. */
-   } else {
-      axes[ 0 ] = 0;
-      axes[ 1 ] = 0;
-   }
-
-/* Re-instate the original attribute values in the first supplied Frame. */
-   if( preserve_axes == -1 ) {
-      astClearPreserveAxes( frm1 );
-   } else {
-      astSetPreserveAxes( frm1, preserve_axes );
-   }
-
-   if( max_axes == -1 ) {
-      astClearMaxAxes( frm1 );
-   } else {
-      astSetMaxAxes( frm1, max_axes );
-   }
-
-   if( min_axes == -1 ) {
-      astClearMinAxes( frm1 );
-   } else {
-      astSetMinAxes( frm1, min_axes );
-   }
-}
-
-static void Norm( AstFrame *this_frame, double value[], int *status ) {
-/*
-*  Name:
-*     Norm
-
-*  Purpose:
-*     Normalise a set of SkyFrame coordinates.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Norm( AstAxis *this, double value[], int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astNorm method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function converts a set of SkyFrame coordinate values,
-*     which might potentially be unsuitable for display to a user (for
-*     instance, may lie outside the expected range of values) into a
-*     set of acceptable alternative values suitable for display.
-*
-*     This is done by wrapping coordinates so that the latitude lies
-*     in the range (-pi/2.0) <= latitude <= (pi/2.0). If the NegLon
-*     attribute is zero (the default), then the wrapped longitude value 
-*     lies in the range 0.0 <= longitude < (2.0*pi). Otherwise, it lies
-*     in the range -pi <= longitude < pi.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     value
-*        An array of double, with one element for each SkyFrame axis.
-*        This should contain the initial set of coordinate values,
-*        which will be modified in place.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const int *perm;              /* Axis permutation array */
-   double sky_lat;               /* Sky latitude value */
-   double sky_long;              /* Sky longitude value */
-   double v[ 2 ];                /* Permuted value coordinates */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Obtain the sky longitude and latitude values, allowing for any axis
-   permutation. */
-      v[ perm[ 0 ] ] = value[ 0 ];
-      v[ perm[ 1 ] ] = value[ 1 ];
-      sky_long = v[ 0 ];
-      sky_lat = v[ 1 ];
-
-/* Test if both values are OK (i.e. not "bad"). */
-      if ( ( sky_long != AST__BAD ) && ( sky_lat != AST__BAD ) ) {
-
-/* Fold the longitude value into the range 0 to 2*pi and the latitude into
-   the range -pi to +pi. */
-         sky_long = palSlaDranrm( sky_long );
-         sky_lat = palSlaDrange( sky_lat );
-
-/* If the latitude now exceeds pi/2, shift the longitude by pi in whichever
-   direction will keep it in the range 0 to 2*pi. */
-         if ( sky_lat > ( pi / 2.0 ) ) {
-            sky_long += ( sky_long < pi ) ? pi : -pi;
-
-/* Reflect the latitude value through the pole, so it lies in the range 0 to
-   pi/2. */
-            sky_lat = pi - sky_lat;
-
-/* If the latitude is less than -pi/2, shift the longitude in the same way
-   as above. */
-         } else if ( sky_lat < -( pi / 2.0 ) ) {
-            sky_long += ( sky_long < pi ) ? pi : -pi;
-
-/* But reflect the latitude through the other pole, so it lies in the range
-   -pi/2 to 0. */
-            sky_lat = -pi - sky_lat;
-         }
-
-/* If only the longitude value is valid, wrap it into the range 0 to 2*pi. */
-      } else if ( sky_long != AST__BAD ) {
-         sky_long = palSlaDranrm( sky_long );
-
-/* If only the latitude value is valid, wrap it into the range -pi to +pi. */
-      } else if ( sky_lat != AST__BAD ) {
-         sky_lat = palSlaDrange( sky_lat );
-
-/* Then refect through one of the poles (as above), if necessary, to move it
-   into the range -pi/2 to +pi/2. */
-         if ( sky_lat > ( pi / 2.0 ) ) {
-            sky_lat = pi - sky_lat;
-         } else if ( sky_lat < -( pi / 2.0 ) ) {
-            sky_lat = -pi - sky_lat;
-         }
-      }
-
-/* Convert 2*pi longitude into zero. Allow for a small error. */
-      if ( fabs( sky_long - ( 2.0 * pi ) ) <=
-          ( 2.0 * pi ) * ( DBL_EPSILON * (double) FLT_RADIX ) ) sky_long = 0.0;
-
-/* If the NegLon attribute is set, and the longitude value is good,
-   convert it into the range -pi to +pi. */
-      if( sky_long != AST__BAD && astGetNegLon( this ) ) {
-         sky_long = palSlaDrange( sky_long );
-      }
-
-/* Return the new values, allowing for any axis permutation. */
-      v[ 0 ] = sky_long;
-      v[ 1 ] = sky_lat;
-      value[ 0 ] = v[ perm[ 0 ] ];
-      value[ 1 ] = v[ perm[ 1 ] ];
-   }
-}
-
-static void NormBox( AstFrame *this_frame, double lbnd[], double ubnd[],
-                     AstMapping *reg, int *status ) {
-/*
-*  Name:
-*     NormBox
-
-*  Purpose:
-*     Extend a box to include effect of any singularities in the Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void astNormBox( AstFrame *this, double lbnd[], double ubnd[],
-*                      AstMapping *reg, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astNormBox method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function modifies a supplied box to include the effect of any
-*     singularities in the co-ordinate system represented by the Frame.
-*     For a normal Cartesian coordinate system, the box will be returned
-*     unchanged. Other classes of Frame may do other things. For instance,
-*     a SkyFrame will check to see if the box contains either the north
-*     or south pole and extend the box appropriately.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     lbnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        lower axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     ubnd
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). Initially, this should contain a set of
-*        upper axis bounds for the box. They will be modified on exit
-*        to include the effect of any singularities within the box.
-*     reg
-*        A Mapping which should be used to test if any singular points are
-*        inside or outside the box. The Mapping should leave an input
-*        position unchanged if the point is inside the box, and should
-*        set all bad if the point is outside the box.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const int *perm;              /* Axis permutation array */
-   double lb[ 2 ];               /* Permuted lower bounds */
-   double t;                     /* Temporary storage */
-   double t2;                    /* Temporary storage */
-   double ub[ 2 ];               /* Permuted upper bounds */
-   double x[2];                  /* 1st axis values at poles */
-   double xo[2];                 /* Tested 1st axis values at poles */
-   double y[2];                  /* 2nd axis values at poles */
-   double yo[2];                 /* Tested 2nd axis values at poles */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if( perm ) {
-
-/* Obtain the sky longitude and latitude limits, allowing for any axis
-   permutation. */
-      lb[ perm[ 0 ] ] = lbnd[ 0 ];
-      lb[ perm[ 1 ] ] = lbnd[ 1 ];
-      ub[ perm[ 0 ] ] = ubnd[ 0 ];
-      ub[ perm[ 1 ] ] = ubnd[ 1 ];
-
-/* Use the supplied Mapping to test if box includes either pole. */
-      if( perm[ 0 ] == 0 ) {
-         x[ 0 ] = 0.0;
-         y[ 0 ] = AST__DPIBY2;
-         x[ 1 ] = 0.0;
-         y[ 1 ] = -AST__DPIBY2;
-      } else {
-         x[ 0 ] = AST__DPIBY2;
-         y[ 0 ] = 0.0;
-         x[ 1 ] = -AST__DPIBY2;
-         y[ 1 ] = 0.0;
-      }
-      astTran2( reg, 2, x, y, 1, xo, yo );
-
-/* If the box includes the north pole... */
-      if( xo[ 0 ] != AST__BAD ) {
-
-/* Find the lowest latitude after normalisation. */
-         if( ub[ 1 ] != AST__BAD &&  lb[ 1 ] != AST__BAD ){
-            t = palSlaDrange( ub[ 1 ] );
-            t2 = palSlaDrange( lb[ 1 ] );
-            if( t2 < t ) t = t2;         
-         } else {
-            t = AST__BAD;
-         }
-
-/* Set the lower returned limit to this value and the upper returned limit
-   to +90 degs */
-         lb[ 1 ] = t;
-         ub[ 1 ] = AST__DPIBY2;
-
-/* Set the longitude range to 0 to 2PI */
-         lb[ 0 ] = 0;
-         ub[ 0 ] = 2*AST__DPI;
-
-      }         
-
-/* If the box includes the south pole... */
-      if( xo[ 1 ] != AST__BAD ) {
-
-/* Find the highest latitude after normalisation. */
-         if( ub[ 1 ] != AST__BAD &&  lb[ 1 ] != AST__BAD ){
-            t = palSlaDrange( ub[ 1 ] );
-            t2 = palSlaDrange( lb[ 1 ] );
-            if( t2 > t ) t = t2;         
-         } else {
-            t = AST__BAD;
-         }
-
-/* Set the upper returned limit to this value and the lower returned limit
-   to -90 degs */
-         lb[ 1 ] = -AST__DPIBY2;
-         ub[ 1 ] = t;
-
-/* Set the longitude range to 0 to 2PI */
-         lb[ 0 ] = 0;
-         ub[ 0 ] = 2*AST__DPI;
-      }         
-
-/* Return the modified limits. */
-      lbnd[ 0 ] = lb[ perm[ 0 ] ];
-      lbnd[ 1 ] = lb[ perm[ 1 ] ];
-      ubnd[ 0 ] = ub[ perm[ 0 ] ];
-      ubnd[ 1 ] = ub[ perm[ 1 ] ];
-   }
-}
-
-static void Offset( AstFrame *this_frame, const double point1[],
-                    const double point2[], double offset, double point3[], int *status ) {
-/*
-*  Name:
-*     Offset
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Offset( AstFrame *this,
-*                  const double point1[], const double point2[],
-*                  double offset, double point3[], int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astOffset method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the SkyFrame coordinate values of a point
-*     which is offset a specified distance along the geodesic curve
-*     (i.e. great circle) between two other points.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     point1
-*        An array of double, with one element for each SkyFrame axis.
-*        This should contain the coordinates of the point marking the
-*        start of the geodesic curve.
-*     point2
-*        An array of double, with one element for each SkyFrame axis.
-*        This should contain the coordinates of the point marking the
-*        end of the geodesic curve.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve, in radians. If this is positive, it will be towards
-*        the second point. If it is negative, it will be in the
-*        opposite direction. This offset need not imply a position
-*        lying between the two points given, as the curve will be
-*        extrapolated if necessary.
-*     point3
-*        An array of double, with one element for each SkyFrame axis
-*        in which the coordinates of the required point will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*     - "Bad" coordinate values will also be returned if the two
-*     points supplied are coincident (or otherwise fail to uniquely
-*     specify a geodesic curve) but the requested offset is non-zero.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const int *perm;              /* Pointer to axis permutation array */
-   double mrot[ 3 ][ 3 ];        /* Rotation matrix */
-   double p1[ 2 ];               /* Permuted coordinates for point1 */
-   double p2[ 2 ];               /* Permuted coordinates for point2 */
-   double p3[ 2 ];               /* Permuted coordinates for point3 */
-   double scale;                 /* Scale factor */
-   double v1[ 3 ];               /* 3-vector for p1 */
-   double v2[ 3 ];               /* 3-vector for p2 */
-   double v3[ 3 ];               /* 3-vector for p3 */
-   double vmod;                  /* Modulus of vector */
-   double vrot[ 3 ];             /* Vector along rotation axis */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Check that all supplied coordinates are OK. If not, generate "bad"
-   output coordinates. */
-      if ( ( point1[ 0 ] == AST__BAD ) || ( point1[ 1 ] == AST__BAD ) ||
-           ( point2[ 0 ] == AST__BAD ) || ( point2[ 1 ] == AST__BAD ) ) {
-         point3[ 0 ] = AST__BAD;
-         point3[ 1 ] = AST__BAD;
-
-/* Otherwise, apply the axis permutation array to obtain the
-   coordinates of the two input points in the required
-   (longitude,latitude) order. */
-      } else {
-         p1[ perm[ 0 ] ] = point1[ 0 ];
-         p1[ perm[ 1 ] ] = point1[ 1 ];
-         p2[ perm[ 0 ] ] = point2[ 0 ];
-         p2[ perm[ 1 ] ] = point2[ 1 ];
-
-/* Convert each point into a 3-vector of unit length. */
-         palSlaDcs2c( p1[ 0 ], p1[ 1 ], v1 );
-         palSlaDcs2c( p2[ 0 ], p2[ 1 ], v2 );
-
-/* Find the cross product between these two vectors (the vector order
-   is reversed here to compensate for the sense of rotation introduced
-   by palSlaDav2m and palSlaDmxv below). */
-         palSlaDvxv( v2, v1, v3 );
-
-/* Normalise the cross product vector, also obtaining its original
-   modulus. */
-         palSlaDvn( v3, vrot, &vmod );
-
-/* If the original modulus was zero, the input points are either
-   coincident or diametrically opposite, so do not uniquely define a
-   great circle. In either case, we can only generate output
-   coordinates if the offset required is an exact multiple of pi. If
-   it is, generate the 3-vector that results from rotating the first
-   input point through this angle. */
-         if ( vmod == 0.0 ) {
-            if ( sin( offset ) == 0.0 ) {
-               scale = cos( offset );
-               v3[ 0 ] = v1[ 0 ] * scale;
-               v3[ 1 ] = v1[ 1 ] * scale;
-               v3[ 2 ] = v1[ 2 ] * scale;
-
-/* Convert the 3-vector back into spherical cooordinates and then
-   constrain the longitude result to lie in the range 0 to 2*pi
-   (palSlaDcc2s doesn't do this itself). */
-               palSlaDcc2s( v3, &p3[ 0 ], &p3[ 1 ] );
-               p3[ 0 ] = palSlaDranrm( p3[ 0 ] );
-
-/* If the offset was not a multiple of pi, generate "bad" output
-   coordinates. */
-            } else {
-               p3[ 0 ] = AST__BAD;
-               p3[ 1 ] = AST__BAD;
-            }
-
-/* If the two input points define a great circle, scale the normalised
-   cross product vector to make its length equal to the required
-   offset (angle) between the first input point and the result. */
-         } else {
-            vrot[ 0 ] *= offset;
-            vrot[ 1 ] *= offset;
-            vrot[ 2 ] *= offset;
-
-/* Generate the rotation matrix that implements this rotation and use
-   it to rotate the first input point (3-vector) to give the required
-   result (3-vector). */
-            palSlaDav2m( vrot, mrot );
-            palSlaDmxv( mrot, v1, v3 );
-
-/* Convert the 3-vector back into spherical cooordinates and then
-   constrain the longitude result to lie in the range 0 to 2*pi. */
-            palSlaDcc2s( v3, &p3[ 0 ], &p3[ 1 ] );
-            p3[ 0 ] = palSlaDranrm( p3[ 0 ] );
-         }
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
-   axis permutation array. */
-         point3[ 0 ] = p3[ perm[ 0 ] ];
-         point3[ 1 ] = p3[ perm[ 1 ] ];
-      }
-   }
-}
-
-static AstMapping *OffsetMap( AstSkyFrame *this, int *status ){
-/*
-*  Name:
-*     OffsetMap
-
-*  Purpose:
-*     Returns a Mapping which goes from System coordinates to offsets.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstMapping *OffsetMap( AstSkyFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns a Mapping in which the forward transformation
-*     transforms a position in the coordinate system given by the System
-*     attribute, into the offset coordinate system specified by the SkyRef,
-*     SkyRefP and SkyRefIs attributes.
-*
-*     A UnitMap is returned if the SkyFrame does not define am offset
-*     coordinate system.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Mapping.
-
-*  Notes:
-*     - This function will return NULL if an error has already occurred,
-*     or if the function fails for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *map3;            /* Partial Mapping. */
-   AstMapping *result;         /* The returned Mapping. */
-   AstMatrixMap *map1;         /* Spherical rotation in 3D cartesian space */
-   AstSphMap *map2;            /* 3D Cartesian to 2D spherical Mapping */
-   double *vx;                 /* Pointer to x unit vector. */
-   double *vy;                 /* Pointer to y unit vector. */
-   double *vz;                 /* Pointer to z unit vector. */
-   double mat[ 9 ];            /* Spherical rotation matrix */
-   double vmod;                /* Length of vector (+ve) */
-   double vp[ 3 ];             /* Unit vector representin SkyRefP position. */
-   int lataxis;                /* Index of the latitude axis */
-   int lonaxis;                /* Index of the longitude axis */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Return a UnitMap if the offset coordinate system is not defined. */
-   if( astGetSkyRefIs( this ) == IGNORED_REF || 
-       ( !astTestSkyRef( this, 0 ) && !astTestSkyRef( this, 1 ) ) ) {
-      result = (AstMapping *) astUnitMap( 2, "", status );
-
-/* Otherwise... */
-   } else {
-
-/* Get the longitude and latitude at the reference point and at a point
-   on the primary meridian. */
-      lataxis = astGetLatAxis( this );
-      lonaxis = 1 - lataxis;
-
-/* Initialise pointers to the rows of the 3x3 matrix. Each row will be
-   used to store a unit vector. */
-      vx = mat;
-      vy = mat + 3;
-      vz = mat + 6;
-
-/* The following trig converts between (longitude,latitude) and (x,y,z)
-   on a unit sphere, in which (0,0) is at (1,0,0), (0,pi/2) is (0,0,1)
-   and (pi/2,0) is at (0,1,0). */
-
-/* First deal with cases where the SkyRef attribute holds the standard
-   coords at the origin of the offset coordinate system. */
-      if( astGetSkyRefIs( this ) == ORIGIN_REF ) {
-
-/* Convert each point into a 3-vector of unit length. The SkyRef position
-   defines the X axis in the offset coord system. */
-         palSlaDcs2c( astGetSkyRef( this, lonaxis ), astGetSkyRef( this, lataxis ), vx );
-         palSlaDcs2c( astGetSkyRefP( this, lonaxis ), astGetSkyRefP( this, lataxis ), vp );
-
-/* The Y axis is perpendicular to both the X axis and the skyrefp
-   position. That is, it is parallel to the cross product of the 2 above 
-   vectors.*/
-         palSlaDvxv( vp, vx, vy );
-
-/* Normalize the y vector. */
-         palSlaDvn( vy, vy, &vmod );
-
-/* Report an error if the modulus of the vector is zero.*/
-         if( vmod == 0.0 ) {
-            astError( AST__BADOC, "astConvert(%s): The position specified by the SkyRefP "
-                      "attribute is either coincident, with or opposite to, the "
-                      "position specified by the SkyRef attribute.", status, astGetClass( this ) );
-
-/* If OK, form the Z axis as the cross product of the x and y axes. */
-         } else {
-            palSlaDvxv( vx, vy, vz );
-
-         }
-
-/* Now deal with cases where the SkyRef attribute holds the standard
-   coords at the north pole of the offset coordinate system. */
-      } else {
-
-/* Convert each point into a 3-vector of unit length. The SkyRef position
-   defines the Z axis in the offset coord system. */
-         palSlaDcs2c( astGetSkyRef( this, lonaxis ), astGetSkyRef( this, lataxis ), vz );
-         palSlaDcs2c( astGetSkyRefP( this, lonaxis ), astGetSkyRefP( this, lataxis ), vp );
-
-/* The Y axis is perpendicular to both the Z axis and the skyrefp
-   position. That is, it is parallel to the cross product of the 2 above 
-   vectors.*/
-         palSlaDvxv( vz, vp, vy );
-
-/* Normalize the y vector. */
-         palSlaDvn( vy, vy, &vmod );
-
-/* Report an error if the modulus of the vector is zero.*/
-         if( vmod == 0.0 ) {
-            astError( AST__BADOC, "astConvert(%s): The position specified by the SkyRefP "
-                      "attribute is either coincident, with or opposite to, the "
-                      "position specified by the SkyRef attribute.", status, astGetClass( this ) );
-
-/* If OK, form the X axis as the cross product of the y and z axes. */
-         } else {
-            palSlaDvxv( vy, vz, vx );
-         }
-      }
-
-/* Create a MatrixMap which implements the above spherical rotation. Each
-   row in this matrix represents one of the unit axis vectors found above. */
-      map1 = astMatrixMap( 3, 3, 0, mat, "", status );
-
-/* Create a 3D cartesian to 2D spherical Mapping. */
-      map2 = astSphMap( "UnitRadius=1", status );
-
-/* Form a series CmpMap which converts from 2D (long,lat) in the base
-   System to 2D (long,lat) in the offset coordinate system. */
-      map3 = astCmpMap( map1, map2, 1, "", status );
-      astInvert( map2 );
-      result = (AstMapping *) astCmpMap( map2, map3, 1, "", status );
-
-/* Free resources. */
-      map1 = astAnnul( map1 );      
-      map2 = astAnnul( map2 );      
-      map3 = astAnnul( map3 );      
-   }
-
-/* Annul the returned Mapping if anything has gone wrong. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static double Offset2( AstFrame *this_frame, const double point1[2],
-                       double angle, double offset, double point2[2], int *status ) {
-/*
-*  Name:
-*     Offset2
-
-*  Purpose:
-*     Calculate an offset along a geodesic curve at a given bearing.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     double Offset2( AstFrame *this_frame, const double point1[2],
-*                     double angle, double offset, double point2[2], int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astOffset2 method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function finds the SkyFrame coordinate values of a point
-*     which is offset a specified distance along the geodesic curve
-*     (i.e. great circle) at a given angle from a given starting point.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     point1
-*        An array of double, with one element for each SkyFrame axis.
-*        This should contain the coordinates of the point marking the
-*        start of the geodesic curve.
-*     angle
-*        The angle (in radians) from the positive direction of the second
-*        axis, to the direction of the required position, as seen from
-*        the starting position. Positive rotation is in the sense of 
-*        rotation from the positive direction of axis 2 to the positive 
-*        direction of axis 1.
-*     offset
-*        The required offset from the first point along the geodesic
-*        curve, in radians. If this is positive, it will be towards
-*        the given angle. If it is negative, it will be in the
-*        opposite direction. 
-*     point2
-*        An array of double, with one element for each SkyFrame axis
-*        in which the coordinates of the required point will be
-*        returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The direction of the geodesic curve at the end point. That is, the 
-*     angle (in radians) between the positive direction of the second
-*     axis and the continuation of the geodesic curve at the requested
-*     end point. Positive rotation is in the sense of rotation from
-*     the positive direction of axis 2 to the positive direction of axis 
-*     1.
-
-*  Notes:
-*     - The geodesic curve used by this function is the path of
-*     shortest distance between two points, as defined by the
-*     astDistance function.
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;          /* Pointer to the SkyFrame structure */
-   const int *perm;            /* Pointer to axis permutation array */
-   double p1[ 2 ];             /* Permuted coordinates for point1 */
-   double p2[ 2 ];             /* Permuted coordinates for point2 */
-   double result;              /* The returned answer */
-   double cosoff;              /* Cosine of offset */
-   double cosa1;               /* Cosine of longitude at start */
-   double cosb1;               /* Cosine of latitude at start */
-   double pa;                  /* A position angle measured from north */
-   double q1[ 3 ];             /* Vector PI/2 away from R4 in meridian of R4 */
-   double q2[ 3 ];             /* Vector PI/2 away from R4 on equator */
-   double q3[ 3 ];             /* Vector PI/2 away from R4 on great circle */
-   double r0[ 3 ];             /* Reference position vector */
-   double r3[ 3 ];             /* Vector PI/2 away from R0 on great circle */
-   double sinoff;              /* Sine of offset */
-   double sina1;               /* Sine of longitude at start */
-   double sinb1;               /* Sine of latitude at start */
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-   if ( astOK ) {
-
-/* Check that all supplied values are OK. If not, generate "bad"
-   output coordinates. */
-      if ( ( point1[ 0 ] == AST__BAD ) || ( point1[ 1 ] == AST__BAD ) ||
-           ( angle == AST__BAD ) || ( offset == AST__BAD ) ) {
-         point2[ 0 ] = AST__BAD;
-         point2[ 1 ] = AST__BAD;
-
-/* Otherwise, apply the axis permutation array to obtain the
-   coordinates of the starting point in the required (longitude,latitude) 
-   order. */
-      } else {
-         p1[ perm[ 0 ] ] = point1[ 0 ];
-         p1[ perm[ 1 ] ] = point1[ 1 ];
-
-/* If the axes are permuted, convert the supplied angle into a position
-   angle. */
-         pa = ( perm[ 0 ] == 0 )? angle: piby2 - angle;
-
-/* Use Shcal to calculate the required vectors R0 (representing
-   the reference point) and R3 (representing the point which is 90
-   degrees away from the reference point, along the required great
-   circle). The XY plane defines zero latitude, Z is in the direction
-   of increasing latitude, X is towards zero longitude, and Y is
-   towards longitude 90 degrees. */
-         Shcal( p1[ 0 ], p1[ 1 ], pa, r0, r3, status );
-
-/* Use Shapp to use R0 and R3 to calculate the new position. */
-         Shapp( offset, r0, r3,  p1[ 0 ], p2, status );
-
-/* Normalize the result. */
-         astNorm( this, p2 );
-
-/* Create the vector Q1 representing the point in the meridian of the
-   required point which has latitude 90 degrees greater than the
-   required point. */
-         sina1 = sin( p2[ 0 ] );
-         cosa1 = cos( p2[ 0 ] );
-         sinb1 = sin( p2[ 1 ] );
-         cosb1 = cos( p2[ 1 ] );
-   
-         q1[ 0 ] = -sinb1*cosa1;
-         q1[ 1 ] = -sinb1*sina1;
-         q1[ 2 ] = cosb1;
-
-/* Create the vector Q2 representing the point on the equator (i.e. a
-   latitude of zero), which has a longitude 90 degrees to the west of
-   the required point. */
-         q2[ 0 ] = -sina1;
-         q2[ 1 ] =  cosa1;
-         q2[ 2 ] =  0.0;
-
-/* Create the vector Q3 representing the point which is 90 degrees away
-   from the required point, along the required great circle. */
-         cosoff = cos( offset );
-         sinoff = sin( offset );
-   
-         q3[ 0 ] = -sinoff*r0[ 0 ] + cosoff*r3[ 0 ];
-         q3[ 1 ] = -sinoff*r0[ 1 ] + cosoff*r3[ 1 ];
-         q3[ 2 ] = -sinoff*r0[ 2 ] + cosoff*r3[ 2 ];
-
-/* Calculate the position angle of the great circle at the required
-   point. */
-         pa = atan2( palSlaDvdv( q3, q2 ), palSlaDvdv( q3, q1 ) );
-
-/* Convert this from a pa into the required angle. */
-         result = ( perm[ 0 ] == 0 )? pa: piby2 - pa;
-
-/* Ensure that the end angle is in the range 0 to 2*pi. */
-         result = palSlaDranrm( result );
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
-   axis permutation array. */
-         point2[ 0 ] = p2[ perm[ 0 ] ];
-         point2[ 1 ] = p2[ perm[ 1 ] ];
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template SkyFrame on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astOverlay method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes of a SkyFrame (the "template") on to
-*     another Frame, so as to over-ride selected attributes of that second
-*     Frame. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which a Frame acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-*
-*     Note that if the result Frame is a SkyFrame and a change of sky
-*     coordinate system occurs as a result of overlaying its System
-*     attribute, then some of its original attribute values may no
-*     longer be appropriate (e.g. the Title, or attributes describing
-*     its axes). In this case, these will be cleared before overlaying
-*     any new values.
-
-*  Parameters:
-*     template
-*        Pointer to the template SkyFrame, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of the
-*        "result" Frame (see below). For each axis in the result frame, the
-*        corresponding element of this array should contain the (zero-based)
-*        index of the template axis to which it corresponds. This array is used
-*        to establish from which template axis any axis-dependent attributes
-*        should be obtained.
-*
-*        If any axis in the result Frame is not associated with a template
-*        axis, the corresponding element of this array should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  In general, if the result Frame is not from the same class as the
-*     template SkyFrame, or from a class derived from it, then attributes may
-*     exist in the template SkyFrame which do not exist in the result Frame. In
-*     this case, these attributes will not be transferred.
-*/
-
-
-/* Local Variables: */
-   AstSystemType new_alignsystem;/* Code identifying new alignment coords */
-   AstSystemType new_system;     /* Code identifying new sky cordinates */
-   AstSystemType old_system;     /* Code identifying old sky coordinates */
-   int axis;                     /* Loop counter for result SkyFrame axes */
-   int skyref_changed;           /* Has the SkyRef attribute changed? */
-   int reset_system;             /* Was the template System value cleared? */
-   int skyframe;                 /* Result Frame is a SkyFrame? */
-   int tax0;                     /* Template axis for result axis 0 */
-   int tax1;                     /* Template axis for result axis 1 */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Indicate that we do not need to reset the System attribute of the
-   template. */
-   reset_system = 0;
-   new_system = AST__UNKNOWN;
-
-/* If the result Frame is a SkyFrame, we must test to see if overlaying its
-   System attribute will change the type of sky coordinate system it
-   describes. Determine the value of this attribute for the result and template
-   SkyFrames. We also need to do this if either SkyRef attribute would
-   change. */
-   skyframe = astIsASkyFrame( result );   
-   if ( skyframe ) {
-      old_system = astGetSystem( result );
-      new_system = astGetSystem( template );
-      skyref_changed = ( astGetSkyRef( result, 0 ) != 
-                         astGetSkyRef( template, 0 ) ) ||
-                       ( astGetSkyRef( result, 1 ) != 
-                         astGetSkyRef( template, 1 ) );
-
-/* If the coordinate system will change, any value already set for the result
-   SkyFrame's Title will no longer be appropriate, so clear it. */
-      if ( new_system != old_system || skyref_changed ) {
-         astClearTitle( result );
-
-/* Test if the old and new sky coordinate systems are similar enough to make
-   use of the same axis attribute values (e.g. if they are both equatorial
-   systems, then they can both use the same axis labels, etc.,so long as
-   the SKyRefIs value has not changed). */
-         if ( IsEquatorial( new_system, status ) != IsEquatorial( old_system, status ) ||
-              skyref_changed ) {
-
-/* If necessary, clear inappropriate values for all those axis attributes
-   whose access functions are over-ridden by this class (these access functions
-   will then provide suitable defaults appropriate to the new coordinate system
-   instead). */
-            for ( axis = 0; axis < 2; axis++ ) {
-               astClearAsTime( result, axis );
-               astClearDirection( result, axis );
-               astClearFormat( result, axis );
-               astClearLabel( result, axis );
-               astClearSymbol( result, axis );
-               astClearUnit( result, axis );
-            }
-         }
-      }
-
-/* If the result Frame is not a SkyFrame, we must temporarily clear the
-   System and AlignSystem values since the values used by this class are only
-   appropriate to this class. */
-   } else {
-      if( astTestSystem( template ) ) {
-         new_system = astGetSystem( template );
-         astClearSystem( template );
-         new_alignsystem = astGetAlignSystem( template );
-         astClearAlignSystem( template );
-         reset_system = 1;
-      }
-   }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
-   from the parent class. */
-   (*parent_overlay)( template, template_axes, result, status );
-
-/* Reset the System and AlignSystem values if necessary */
-   if( reset_system ) {
-      astSetSystem( template, new_system );
-      astSetAlignSystem( template, new_alignsystem );
-   }
-
-/* Check if the result Frame is a SkyFrame or from a class derived from
-   SkyFrame. If not, we cannot transfer SkyFrame attributes to it as it is
-   insufficiently specialised. In this case simply omit these attributes. */
-   if ( skyframe && astOK ) {
-
-/* Define a macro that tests whether an attribute is set in the template and,
-   if so, transfers its value to the result. */
-#define OVERLAY(attr) \
-   if ( astTest##attr( template ) ) { \
-      astSet##attr( result, astGet##attr( template ) ); \
-   }
-
-/* Store template axis indices */
-   if( template_axes ) {
-      tax0 = template_axes[ 0 ];
-      tax1 = template_axes[ 1 ];
-   } else {
-      tax0 = 0;
-      tax1 = 1;
-   }
-
-/* Define a similar macro that does the same for SkyFrame specific axis 
-   attributes. */
-#define OVERLAY2(attr) \
-   if( astTest##attr( template, tax0 ) ) { \
-      astSet##attr( result, 0, astGet##attr( template, tax0 ) ); \
-   } \
-   if( astTest##attr( template, tax1 ) ) { \
-      astSet##attr( result, 1, astGet##attr( template, tax1 ) ); \
-   }         
-
-/* Use the macro to transfer each SkyFrame attribute in turn. */
-      OVERLAY(Equinox);
-      OVERLAY(Projection);
-      OVERLAY(NegLon);
-      OVERLAY(AlignOffset);
-      OVERLAY(SkyRefIs);
-      OVERLAY2(SkyRef);
-      OVERLAY2(SkyRefP);
-   }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-#undef OVERLAY2
-}
-
-static void Resolve( AstFrame *this_frame, const double point1[], 
-                     const double point2[], const double point3[],
-                     double point4[], double *d1, double *d2, int *status ){
-/*
-*  Name:
-*     Resolve
-
-*  Purpose:
-*     Resolve a vector into two orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Resolve( AstFrame *this, const double point1[], 
-*                   const double point2[], const double point3[],
-*                   double point4[], double *d1, double *d2, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astResolve method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function resolves a vector into two perpendicular components.
-*     The vector from point 1 to point 2 is used as the basis vector.
-*     The vector from point 1 to point 3 is resolved into components 
-*     parallel and perpendicular to this basis vector. The lengths of the 
-*     two components are returned, together with the position of closest 
-*     aproach of the basis vector to point 3. 
-*
-*     Each vector is a geodesic curve. For a SkyFrame, these are great
-*     circles on the celestial sphere.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vector to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     point3
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the vector to be
-*        resolved.
-*     point4
-*        An array of double, with one element for each Frame axis
-*        in which the coordinates of the point of closest approach of the
-*        basis vector to point 3 will be returned.
-*     d1
-*        The address of a location at which to return the distance from
-*        point 1 to point 4 (that is, the length of the component parallel 
-*        to the basis vector). Positive values are in the same sense as 
-*        movement from point 1 to point 2.
-*     d2
-*        The address of a location at which to return the distance from
-*        point 4 to point 3 (that is, the length of the component
-*        perpendicular to the basis vector). The returned value is always
-*        positive.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function will return "bad" coordinate values (AST__BAD)
-*     if any of the input coordinates has this value, or if the required
-*     output values are undefined.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   const int *perm;              /* Pointer to axis permutation array */
-   double n1[ 3 ];               /* Unit normal to grt crcl thru p1 and p2 */
-   double n2[ 3 ];               /* Unit normal to grt crcl thru p3 and p4 */
-   double p1[ 2 ];               /* Permuted coordinates for point1 */
-   double p2[ 2 ];               /* Permuted coordinates for point2 */
-   double p3[ 2 ];               /* Permuted coordinates for point3 */
-   double p4[ 2 ];               /* Permuted coordinates for point4 */
-   double v1[ 3 ];               /* 3-vector for p1 */
-   double v2[ 3 ];               /* 3-vector for p2 */
-   double v3[ 3 ];               /* 3-vector for p3 */
-   double v4[ 3 ];               /* 3-vector for p4 */
-   double v5[ 3 ];               /* 3-vector 90 degs away from p1 */
-   double vmod;                  /* Modulus of vector */
-   double vtemp[ 3 ];            /* Temporary vector workspace */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Store initial bad output values. */
-   point4[ 0 ] = AST__BAD;
-   point4[ 1 ] = AST__BAD;
-   *d1 = AST__BAD;
-   *d2 = AST__BAD;
-
-/* Check that all supplied values are OK. */
-   if ( ( point1[ 0 ] != AST__BAD ) && ( point1[ 1 ] != AST__BAD ) &&
-        ( point2[ 0 ] != AST__BAD ) && ( point2[ 1 ] != AST__BAD ) &&
-        ( point3[ 0 ] != AST__BAD ) && ( point3[ 1 ] != AST__BAD ) ) {
-
-/* If so, obtain a pointer to the SkyFrame's axis permutation array. */
-      perm = astGetPerm( this );
-      if ( astOK ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the 
-   three supplied point in the required (longitude,latitude) order. */
-         p1[ perm[ 0 ] ] = point1[ 0 ];
-         p1[ perm[ 1 ] ] = point1[ 1 ];
-         p2[ perm[ 0 ] ] = point2[ 0 ];
-         p2[ perm[ 1 ] ] = point2[ 1 ];
-         p3[ perm[ 0 ] ] = point3[ 0 ];
-         p3[ perm[ 1 ] ] = point3[ 1 ];
-
-/* Convert each point into a 3-vector of unit length. */
-         palSlaDcs2c( p1[ 0 ], p1[ 1 ], v1 );
-         palSlaDcs2c( p2[ 0 ], p2[ 1 ], v2 );
-         palSlaDcs2c( p3[ 0 ], p3[ 1 ], v3 );
-
-/* Find the cross product between the first two vectors, and normalize is. 
-   This is the unit normal to the great circle plane defining parallel 
-   distance. */
-         palSlaDvxv( v2, v1, vtemp );
-         palSlaDvn( vtemp, n1, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the first two 
-   vectors are identical or diametrically opposite). */
-         if( vmod > 0.0 ) {
-
-/* Now take the cross product of the normal vector and v1. This gives a
-   point, v5, on the great circle which is 90 degrees away from v1, in the
-   direction of v2. */
-            palSlaDvxv( v1, n1, v5 );
-
-/* Find the cross product of the outlying point (point 3), and the vector
-   n1 found above, and normalize it. This is the unit normal to the great 
-   circle plane defining perpendicular distance. */
-            palSlaDvxv( v3, n1, vtemp );
-            palSlaDvn( vtemp, n2, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the
-   outlying point is normal to the great circle defining the basis 
-   vector). */
-            if( vmod > 0.0 ) {
-
-/* The point of closest approach, point 4, is the point which is normal
-   to both normal vectors (i.e. the intersection of the two great circles).
-   This is the cross product of n1 and n2. No need to normalize this time 
-   since both n1 and n2 are unit vectors, and so v4 will already be a
-   unit vector. */
-               palSlaDvxv( n1, n2, v4 );
-
-/* The dot product of v4 and v1 is the cos of the parallel distance,
-   d1, whilst the dot product of v4 and v5 is the sin of the parallel
-   distance. Use these to get the parallel distance with the correct
-   sign, in the range -PI to +PI. */
-               *d1 = atan2( palSlaDvdv( v4, v5 ), palSlaDvdv( v4, v1 ) );
-
-/* The dot product of v4 and v3 is the cos of the perpendicular distance,
-   d2, whilst the dot product of n1 and v3 is the sin of the perpendicular
-   distance. Use these to get the perpendicular distance. */
-               *d2 = fabs( atan2( palSlaDvdv( v3, n1 ), palSlaDvdv( v3, v4 ) ) );
-
-/* Convert the 3-vector representing the intersection of the two planes 
-   back into spherical cooordinates and then constrain the longitude result 
-   to lie in the range 0 to 2*pi. */
-               palSlaDcc2s( v4, &p4[ 0 ], &p4[ 1 ] );
-               p4[ 0 ] = palSlaDranrm( p4[ 0 ] );
-
-/* Permute the result coordinates to undo the effect of the SkyFrame
-   axis permutation array. */
-               point4[ 0 ] = p4[ perm[ 0 ] ];
-               point4[ 1 ] = p4[ perm[ 1 ] ];
-            }
-         }
-      }
-   }
-
-   return;
-
-}
-
-static AstPointSet *ResolvePoints( AstFrame *this_frame, const double point1[], 
-                                   const double point2[], AstPointSet *in,
-                                   AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     ResolvePoints
-
-*  Purpose:
-*     Resolve a set of vectors into orthogonal components
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     AstPointSet *astResolvePoints( AstFrame *this, const double point1[], 
-*                                    const double point2[], AstPointSet *in,
-*                                    AstPointSet *out )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astResolvePoints method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function takes a Frame and a set of vectors encapsulated
-*     in a PointSet, and resolves each one into two orthogonal components,
-*     returning these two components in another PointSet.
-*
-*     This is exactly the same as the public astResolve method, except
-*     that this method allows many vectors to be processed in a single call,
-*     thus reducing the computational cost of overheads of many
-*     individual calls to astResolve.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     point1
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the start of the basis vector,
-*        and of the vectors to be resolved.
-*     point2
-*        An array of double, with one element for each Frame axis
-*        (Naxes attribute). This marks the end of the basis vector.
-*     in
-*        Pointer to the PointSet holding the ends of the vectors to be
-*        resolved.
-*     out
-*        Pointer to a PointSet which will hold the length of the two
-*        resolved components. A NULL value may also be given, in which 
-*        case a new PointSet will be created by this function.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet. The first axis will 
-*     hold the lengths of the vector components parallel to the basis vector. 
-*     These values will be signed (positive values are in the same sense as 
-*     movement from point 1 to point 2. The second axis will hold the lengths 
-*     of the vector components perpendicular to the basis vector. These
-*     values will be signed only if the Frame is 2-dimensional, in which
-*     case a positive value indicates that rotation from the basis vector 
-*     to the tested vector is in the same sense as rotation from the first 
-*     to the second axis of the Frame.
-
-*  Notes:
-*     - The number of coordinate values per point in the input
-*     PointSet must match the number of axes in the supplied Frame.
-*     - If an output PointSet is supplied, it must have space for
-*     sufficient number of points and 2 coordinate values per point.
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*     - We assume spherical geometry throughout this function. 
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   const int *perm;              /* Pointer to axis permutation array */
-   double **ptr_in;              /* Pointers to input axis values */
-   double **ptr_out;             /* Pointers to returned axis values */
-   double *d1;                   /* Pointer to next parallel component value */
-   double *d2;                   /* Pointer to next perpendicular component value */
-   double *point3x;              /* Pointer to next first axis value */
-   double *point3y;              /* Pointer to next second axis value */
-   double n1[ 3 ];               /* Unit normal to grt crcl thru p1 and p2 */
-   double n2[ 3 ];               /* Unit normal to grt crcl thru p3 and p4 */
-   double p1[ 2 ];               /* Permuted coordinates for point1 */
-   double p2[ 2 ];               /* Permuted coordinates for point2 */
-   double p3[ 2 ];               /* Permuted coordinates for point3 */
-   double sign;                  /* Sign for perpendicular distances */
-   double v1[ 3 ];               /* 3-vector for p1 */
-   double v2[ 3 ];               /* 3-vector for p2 */
-   double v3[ 3 ];               /* 3-vector for p3 */
-   double v4[ 3 ];               /* 3-vector for p4 */
-   double v5[ 3 ];               /* 3-vector 90 degs away from p1 */
-   double vmod;                  /* Modulus of vector */
-   double vtemp[ 3 ];            /* Temporary vector workspace */
-   int ipoint;                   /* Index of next point */
-   int ncoord_in;                /* Number of input PointSet coordinates */
-   int ncoord_out;               /* Number of coordinates in output PointSet */
-   int npoint;                   /* Number of points to transform */
-   int npoint_out;               /* Number of points in output PointSet */
-   int ok;                       /* OK to proceed? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Obtain the number of input vectors to resolve and the number of coordinate
-   values per vector. */
-   npoint = astGetNpoint( in );
-   ncoord_in = astGetNcoord( in );
-
-/* If OK, check that the number of input coordinates matches the number
-   required by the Frame. Report an error if these numbers do not match. */
-   if ( astOK && ( ncoord_in != 2 ) ) {
-      astError( AST__NCPIN, "astResolvePoints(%s): Bad number of coordinate "
-                "values (%d) in input %s.", status, astGetClass( this ), ncoord_in,
-                astGetClass( in ) );
-      astError( AST__NCPIN, "The %s given requires 2 coordinate values for "
-                "each input point.", status, astGetClass( this ) );
-   }
-
-/* If still OK, and a non-NULL pointer has been given for the output PointSet,
-   then obtain the number of points and number of coordinates per point for
-   this PointSet. */
-   if ( astOK && out ) {
-      npoint_out = astGetNpoint( out );
-      ncoord_out = astGetNcoord( out );
-
-/* Check that the dimensions of this PointSet are adequate to accommodate the
-   output coordinate values and report an error if they are not. */
-      if ( astOK ) {
-         if ( npoint_out < npoint ) {
-            astError( AST__NOPTS, "astResolvePoints(%s): Too few points (%d) in "
-                      "output %s.", status, astGetClass( this ), npoint_out,
-                      astGetClass( out ) );
-            astError( AST__NOPTS, "The %s needs space to hold %d transformed "
-                      "point(s).", status, astGetClass( this ), npoint );
-         } else if ( ncoord_out < 2 ) {
-            astError( AST__NOCTS, "astResolvePoints(%s): Too few coordinate "
-                      "values per point (%d) in output %s.", status,
-                      astGetClass( this ), ncoord_out, astGetClass( out ) );
-            astError( AST__NOCTS, "The %s supplied needs space to store 2 "
-                      "coordinate value(s) per transformed point.", status,
-                      astGetClass( this ) );
-         }
-      }
-   }
-
-/* If all the validation stages are passed successfully, and a NULL output
-   pointer was given, then create a new PointSet to encapsulate the output
-   coordinate data. */
-   if ( astOK ) {
-      if ( !out ) {
-         result = astPointSet( npoint, 2, "", status );
-
-/* Otherwise, use the PointSet supplied. */
-      } else {
-         result = out;
-      }
-   }
-
-/* Get pointers to the input and output axis values */
-   ptr_in = astGetPoints( in );
-   ptr_out = astGetPoints( result );
-
-/* Obtain a pointer to the SkyFrame's axis permutation array. */
-   perm = astGetPerm( this );
-
-/* If the axes have been swapped we need to swap the sign of the returned
-   perpendicular distances. */
-   sign = ( perm[ 0 ] == 0 ) ? -1.0 : 1.0;
-
-/* Check pointers can be used safely */
-   if( astOK ) {
-
-/* Apply the axis permutation array to obtain the coordinates of the 
-   two supplied points in the required (longitude,latitude) order. */
-      p1[ perm[ 0 ] ] = point1[ 0 ];
-      p1[ perm[ 1 ] ] = point1[ 1 ];
-      p2[ perm[ 0 ] ] = point2[ 0 ];
-      p2[ perm[ 1 ] ] = point2[ 1 ];
-
-/* Convert these points into 3-vectors of unit length. */
-      palSlaDcs2c( p1[ 0 ], p1[ 1 ], v1 );
-      palSlaDcs2c( p2[ 0 ], p2[ 1 ], v2 );
-
-/* Find the cross product between the vectors, and normalize it. This is the 
-   unit normal to the great circle plane defining parallel distance. */
-      palSlaDvxv( v2, v1, vtemp );
-      palSlaDvn( vtemp, n1, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the first two 
-   vectors are identical or diametrically opposite). */
-      ok = 0;
-      if( vmod > 0.0 ) {
-         ok = 1;
-
-/* Now take the cross product of the normal vector and v1. This gives a
-   point, v5, on the great circle which is 90 degrees away from v1, in the
-   direction of v2. */
-         palSlaDvxv( v1, n1, v5 );
-      }
-
-/* Store pointers to the first two axis arrays in the returned PointSet. */
-      d1 = ptr_out[ 0 ];
-      d2 = ptr_out[ 1 ];
-
-/* Store pointers to the axis values in the supplied PointSet. */
-      point3x = ptr_in[ 0 ];
-      point3y = ptr_in[ 1 ];
-
-/* Check supplied values can be used */
-      if( ok ) {
-
-/* Loop round each supplied vector. */
-         for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++,
-                                           point3x++, point3y++ ) {
-
-/* Store bad output values if either input axis value is bad. */
-            if( *point3x == AST__BAD || *point3y == AST__BAD ){
-               *d1 = AST__BAD;
-               *d2 = AST__BAD;
-
-/* If both are good... */
-            } else {
-
-/* Apply the axis permutation array to obtain the coordinates in the 
-   required (longitude,latitude) order. */
-               p3[ perm[ 0 ] ] = *point3x;
-               p3[ perm[ 1 ] ] = *point3y;
-
-/* Convert into a 3-vector of unit length. */
-               palSlaDcs2c( p3[ 0 ], p3[ 1 ], v3 );
-
-/* Find the cross product of the outlying point (point 3), and the vector
-   n1 found above, and normalize it. This is the unit normal to the great 
-   circle plane defining perpendicular distance. */
-               palSlaDvxv( v3, n1, vtemp );
-               palSlaDvn( vtemp, n2, &vmod );
-
-/* Return with bad values if the normal is undefined (i.e. if the
-   outlying point is normal to the great circle defining the basis 
-   vector). */
-               if( vmod <= 0.0 ) {
-                  *d1 = AST__BAD;
-                  *d2 = AST__BAD;
-               } else {
-
-/* The point of closest approach, point 4, is the point which is normal
-   to both normal vectors (i.e. the intersection of the two great circles).
-   This is the cross product of n1 and n2. No need to normalize this time 
-   since both n1 and n2 are unit vectors, and so v4 will already be a
-   unit vector. */
-                  palSlaDvxv( n1, n2, v4 );
-
-/* The dot product of v4 and v1 is the cos of the parallel distance,
-   d1, whilst the dot product of v4 and v5 is the sin of the parallel
-   distance. Use these to get the parallel distance with the correct
-   sign, in the range -PI to +PI. */
-                  *d1 = atan2( palSlaDvdv( v4, v5 ), palSlaDvdv( v4, v1 ) );
-
-/* The dot product of v4 and v3 is the cos of the perpendicular distance,
-   d2, whilst the dot product of n1 and v3 is the sin of the perpendicular
-   distance. Use these to get the perpendicular distance. */
-                  *d2 = sign*atan2( palSlaDvdv( v3, n1 ), palSlaDvdv( v3, v4 ) );
-               }
-            }
-         }
-
-/* If supplied values cannot be used, fill the returned PointSet with bad
-   values */
-      } else {
-         for( ipoint = 0; ipoint < npoint; ipoint++, d1++, d2++ ) {
-            *d1 = AST__BAD;
-            *d2 = AST__BAD;
-         }
-      }
-   }
-
-/* Annul the returned PointSet if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void SetAsTime( AstSkyFrame *this, int axis, int value, int *status ) {
-/*
-*  Name:
-*     SetAsTime
-
-*  Purpose:
-*     Set a value for the AsTime attribute for a SkyFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetAsTime( AstSkyFrame *this, int axis, int value, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function sets the boolean value of the AsTime attribute for a
-*     specified axis of a SkyFrame. This value indicates whether axis values
-*     should be formatted as times (as opposed to angles) by default.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Index of the axis for which a value is to be set (zero based).
-*     value
-*        The boolean value to be set.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   AstSkyAxis *new_ax;           /* Pointer to new SkyAxis object */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astSetAsTime" );
-
-/* Obtain a pointer to the Axis object. */
-   ax = astGetAxis( this, axis );
-
-/* Check if the Axis object is a SkyAxis. If not, we will replace it with
-   one. */
-   if ( !astIsASkyAxis( ax ) ) {
-
-/* Create a new SkyAxis and overlay the attributes of the original Axis. */
-      new_ax = astSkyAxis( "", status );
-      astAxisOverlay( ax, new_ax );
-
-/* Modify the SkyFrame to use the new Skyaxis and annul the original Axis
-   pointer. Retain a pointer to the new SkyAxis. */
-      astSetAxis( this, axis, new_ax );
-      ax = astAnnul( ax );
-      ax = (AstAxis *) new_ax;
-   }
-
-/* Set a value for the Axis AsTime attribute. */
-   astSetAxisAsTime( ax, value );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (extends the astSetAttrib method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a SkyFrame, the attribute
-*     and its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Attributes:
-*     As well as those attributes inherited from the parent class, this
-*     function also accepts values for the following additional attributes:
-*
-*        Equinox (double, read as a string)
-
-*  Notes:
-*     This protected method is intended to be invoked by the Object astSet
-*     method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   double dval;                  /* Floating point attribute value */
-   double dval1;                 /* Floating point attribute value */
-   double dval2;                 /* Floating point attribute value */
-   double mjd;                   /* Modified Julian Date */
-   int astime;                   /* Value of AsTime attribute */
-   int axis;                     /* Axis index */
-   int equinox;                  /* Offset of Equinox attribute value */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-   int neglon;                   /* Display -ve longitudes? */
-   int ok;                       /* Can string be used? */
-   int offset;                   /* Offset of start of attribute value */
-   int projection;               /* Offset of projection attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* AsTime(axis). */
-/* ------------- */
-   if ( nc = 0,
-        ( 2 == astSscanf( setting, "astime(%d)= %d %n", &axis, &astime, &nc ) )
-        && ( nc >= len ) ) {
-      astSetAsTime( this, axis - 1, astime );
-
-/* Equinox. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "equinox=%n%*[^\n]%n",
-                              &equinox, &nc ) ) && ( nc >= len ) ) {
-
-/* Convert the Equinox value to a Modified Julian Date before use. */
-      mjd = astReadDateTime( setting + equinox );
-      if ( astOK ) {
-         astSetEquinox( this, mjd );
-
-/* Report contextual information if the conversion failed. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid equinox value "
-                   "\"%s\" given for sky coordinate system.", status,
-                   astGetClass( this ), setting + equinox );
-      }
-
-/* NegLon. */
-/* ------- */
-   } else if ( nc = 0,
-             ( 1 == astSscanf( setting, "neglon= %d %n", &neglon, &nc ) )
-               && ( nc >= len ) ) {
-      astSetNegLon( this, neglon );
-
-/* Projection. */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "projection=%n%*[^\n]%n",
-                              &projection, &nc ) )
-               && ( nc >= len ) ) {
-      astSetProjection( this, setting + projection );
-
-/* SkyRef. */
-/* ------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "skyref=%n%*[^\n]%n",
-                                 &offset, &nc ) )
-               && ( nc >= len ) ) {
-      ok = 0;
-      nc = astUnformat( this, 0, setting + offset, &dval1 );
-      if( setting[ offset + nc ] == ',' ) {
-         nc++;
-         nc += astUnformat( this, 1, setting + offset + nc, &dval2 );
-         if( nc == strlen( setting + offset ) ) {   
-            astSetSkyRef( this, 0, dval1 );
-            astSetSkyRef( this, 1, dval2 );
-            ok = 1;
-         }
-      }
-
-      if( !ok && astOK ) {
-         astError( AST__BADOC, "astSetAttrib(%s): Invalid axis values string "
-                   "\"%.*s\" given for SkyRef attribute.", status, astGetClass( this ),
-                   (int) astChrLen( setting + offset ), setting + offset );
-      }
-
-/* SkyRef(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "skyref(%d)= %lg %n",
-                                 &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetSkyRef( this, axis - 1, dval );
-
-/* SkyRefIs. */
-/* --------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "skyrefis=%n%*[^\n]%n",
-                              &offset, &nc ) )
-               && ( nc >= len ) ) {
-
-      if( astChrMatch( setting + offset, POLE_STRING ) ) {
-         astSetSkyRefIs( this, POLE_REF );
-
-      } else if( astChrMatch( setting + offset, ORIGIN_STRING ) ) {
-         astSetSkyRefIs( this, ORIGIN_REF );
-
-      } else if( astChrMatch( setting + offset, IGNORED_STRING ) ) {
-         astSetSkyRefIs( this, IGNORED_REF );
-
-      } else if( astOK ) {
-         astError( AST__OPT, "astSet(%s): option '%s' is unknown in '%s'.", status,
-                   astGetClass( this ), setting+offset, setting );
-      }
-
-/* SkyRefP. */
-/* -------- */
-   } else if ( nc = 0,
-               ( 0 == astSscanf( setting, "skyrefp=%n%*[^\n]%n",
-                                 &offset, &nc ) )
-               && ( nc >= len ) ) {
-
-      ok = 0;
-      nc = astUnformat( this, 0, setting + offset, &dval1 );
-      if( setting[ offset + nc ] == ',' ) {
-         nc++;
-         nc += astUnformat( this, 1, setting + offset + nc, &dval2 );
-         if( nc == strlen( setting + offset ) ) {   
-            astSetSkyRefP( this, 0, dval1 );
-            astSetSkyRefP( this, 1, dval2 );
-            ok = 1;
-         }
-      }
-
-      if( !ok && astOK ) {
-         astError( AST__BADOC, "astSetAttrib(%s): Invalid axis values string "
-                   "\"%.*s\" given for SkyRefP attribute.", status, astGetClass( this ),
-                   (int) astChrLen( setting + offset ), setting + offset );
-      }
-
-
-/* SkyRefP(axis). */
-/* -------------- */
-   } else if ( nc = 0,
-               ( 2 == astSscanf( setting, "skyrefp(%d)= %lg %n",
-                                 &axis, &dval, &nc ) )
-               && ( nc >= len ) ) {
-      astSetSkyRefP( this, axis - 1, dval );
-
-/* AlignOffset. */
-/* ------------ */
-   } else if ( nc = 0,
-             ( 1 == astSscanf( setting, "alignoffset= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetAlignOffset( this, ival );
-
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
-   if a read-only attribute has been specified. */
-   } else if ( MATCH( "lataxis" ) ||
-               MATCH( "lonaxis" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Pass any unrecognised setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetCachedLAST( AstSkyFrame *this, double last, double epoch, 
-                           double obslon, double obslat, double obsalt, 
-                           double dut1, int *status ) {
-/*
-*  Name:
-*     SetCachedLAST
-
-*  Purpose:
-*     Store a LAST value in the cache in the SkyFrame vtab.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetCachedLAST( AstSkyFrame *this, double last, double epoch, 
-*                         double obslon, double obslat, double obsalt, 
-*                         double dut1, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function stores the supplied LAST value in a cache in the 
-*     SkyFrame virtual function table for later use by GetCachedLAST.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     last
-*        The Local Apparent Sidereal Time (radians).
-*     epoch
-*        The epoch (MJD).
-*     obslon
-*        Observatory geodetic longitude (radians)
-*     obslat
-*        Observatory geodetic latitude (radians)
-*     obsalt
-*        Observatory geodetic altitude (metres)
-*     dut1 
-*        The UT1-UTC correction, in seconds.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS 
-   AstSkyFrameVtab *vtab;
-   AstSkyLastTable *table; 
-   double *ep;
-   double *lp;
-   int i;
-   int itable;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise */
-   table = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the SkyFrame virtual function table. */
-   vtab = (AstSkyFrameVtab *) ((AstObject *) this)->vtab;
-
-/* Loop round every LAST table held in the vtab. Each table refers to a
-   different observatory position and/or DUT1 value. */
-   for( itable = 0; itable < vtab->nlast_tables; itable++ ) {
-      table = (vtab->last_tables)[ itable ];
-
-/* See if the table refers to the given position and dut1 value, allowing
-   some small tolerance. If it does, leave the loop. */
-      if( fabs( table->obslat - obslat ) < 2.0E-7 && 
-          fabs( table->obslon - obslon ) < 2.0E-7 &&
-          fabs( table->obsalt - obsalt ) < 1.0 &&
-          fabs( table->dut1 - dut1 ) < 1.0E-5 ) break;
-
-/* Ensure "table" ends up NULL if no suitable table is found. */
-      table = NULL;
-   }
-
-/* If no table was found, create one now, and add it into the vtab cache. */
-   if( !table ) {
-
-      astBeginPM;
-      table = astMalloc( sizeof( AstSkyLastTable ) );
-      itable = (vtab->nlast_tables)++;
-      vtab->last_tables = astGrow( vtab->last_tables, vtab->nlast_tables,
-                                   sizeof( AstSkyLastTable * ) );
-      astEndPM;
-
-      if( astOK ) {
-         (vtab->last_tables)[ itable ] = table;
-         table->obslat = obslat;
-         table->obslon = obslon;
-         table->obsalt = obsalt;
-         table->dut1 = dut1;
-         table->nentry = 1;
-
-         astBeginPM;
-         table->epoch = astMalloc( sizeof( double ) );
-         table->last = astMalloc( sizeof( double ) );
-         astEndPM;
-
-         if( astOK ) {
-            table->epoch[ 0 ] = epoch;
-            table->last[ 0 ] = last;
-         }
-      }
-
-
-/* If we have a table, add the new point into it. */
-   } else {
-
-/* Extend the epoch and last arrays. */
-      astBeginPM;
-      table->epoch = astGrow( table->epoch, ++(table->nentry), sizeof( double ) );
-      table->last = astGrow( table->last, table->nentry, sizeof( double ) );
-      astEndPM;
-
-/* Check memory allocation was successful. */
-      if( astOK ) {
-
-/* Get pointers to the last original elements in the arrays of epoch and 
-   corresponding LAST values in the table. */
-         ep = table->epoch + table->nentry - 2;
-         lp = table->last + table->nentry - 2;
-
-/* Starting from the end of the arrays, shuffle all entries up one
-   element until an element is found which is less than the supplied epoch
-   value. This maintains the epoch array in monotonic increasing order. */
-         for( i = table->nentry - 2; i >= 0; i--,ep--,lp-- ) {
-            if( *ep <= epoch ) break;
-            ep[ 1 ] = *ep;
-            lp[ 1 ] = *lp;
-         }
-
-/* Store the new epoch and LAST value. Add or subtract 2.PI as needed
-   from the new LAST value to ensure it is continuous with the previous
-   LAST value. This is needed for interpolation between the two values 
-   to be meaningful.  */
-         ep[ 1 ] = epoch;
-
-         if( last > lp[ 0 ] + AST__DPI ) {
-            lp[ 1 ] = last - 2*AST__DPI;
-
-         } else if( last < lp[ 0 ] - AST__DPI ) {
-            lp[ 1 ] = last + 2*AST__DPI;
-
-         } else {
-            lp[ 1 ] = last;
-         }
-      }
-   }
-}
-
-static void SetDut1( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetDut1
-
-*  Purpose:
-*     Set the value of the Dut1 attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetDut1( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSetDut1 method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the Dut1 value and updates the LAST value
-*     stored in the SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     val
-*        New Dut1 value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Note the original Dut1 value. */
-   orig = astGetDut1( this );
-
-/* Invoke the parent method to set the Frame Dut1 value. */
-   (*parent_setdut1)( this_frame, val, status );
-
-/* If the DUT1 value has changed significantly, indicate that the LAST value 
-   will need to be re-calculated when it is next needed. */
-   if( fabs( orig - val ) > 1.0E-6 ) {
-      this->last = AST__BAD;
-      this->eplast = AST__BAD;
-      this->klast = AST__BAD;
-   }
-}
-
-static void SetEpoch( AstFrame *this_frame, double val, int *status ) {
-/*
-*  Name:
-*     SetEpoch
-
-*  Purpose:
-*     Set the value of the Epoch attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetEpoch( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSetEpoch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function clears the Epoch value and updates the LAST value
-*     stored in the SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     val
-*        New Epoch value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   double orig;                  /* Original epoch value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Save the old epoch. */
-   orig = astGetEpoch( this );
-
-/* Invoke the parent method to set the Frame epoch. */
-   (*parent_setepoch)( this_frame, val, status );
-
-/* If the epoch has changed significantly, indicate that the LAST value 
-   corresponding to the Epoch will need to be re-calculated when it is 
-   next needed. */
-   if( fabs( orig - val ) > 1.0E-8 ) {
-      this->last = AST__BAD;
-      this->eplast = AST__BAD;
-      this->klast = AST__BAD;
-   }
-}
-
-static void SetLast( AstSkyFrame *this, int *status ) {
-/*
-*  Name:
-*     SetLast
-
-*  Purpose:
-*     Set the Local Appearent Sidereal Time for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetLast( AstSkyFrame *this, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function sets the Local Apparent Sidereal Time at the epoch
-*     and geographical longitude given by the current values of the Epoch 
-*     and ObsLon attributes associated with the supplied SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  A value of AST__BAD will be returned if this function is invoked 
-*     with the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   double epoch;      /* Epoch as a TDB MJD */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the SkyFrame Epoch as a TDB MJD. */
-   epoch = astGetEpoch( this );
-
-/* Calculate the LAST value (in rads) and store in the SkyFrame structure. */
-   this->last = CalcLAST( this, epoch, astGetObsLon( this ),
-                          astGetObsLat( this ), astGetObsAlt( this ), 
-                          astGetDut1( this ), status );
-
-/* Save the TDB MJD to which this LAST corresponds. */
-   this->eplast = epoch;
-
-/* The ratio between solar and sidereal time is a slowly varying function
-   of epoch. The GetLAST function returns a fast approximation to LAST
-   by using the ratio between solar and sidereal time. Indicate that
-   GetLAST should re-calculate the ratio by setting the ratio value bad. */
-   this->klast = AST__BAD;
-}
-
-static void SetObsAlt( AstFrame *this, double val, int *status ) {
-/*
-*  Name:
-*     SetObsAlt
-
-*  Purpose:
-*     Set the value of the ObsAlt attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetObsAlt( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSetObsAlt method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the ObsAlt value.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     val
-*        New ObsAlt value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original ObsAlt value. */
-   orig = astGetObsAlt( this );
-
-/* Invoke the parent method to set the Frame ObsAlt. */
-   (*parent_setobsalt)( this, val, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value 
-   and magnitude of the diurnal aberration vector will need to be 
-   re-calculated when next needed. */
-   if( fabs( orig - val ) > 0.001 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-      ( (AstSkyFrame *) this )->diurab = AST__BAD;
-   }
-}
-
-static void SetObsLat( AstFrame *this, double val, int *status ) {
-/*
-*  Name:
-*     SetObsLat
-
-*  Purpose:
-*     Set the value of the ObsLat attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetObsLat( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSetObsLat method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the ObsLat value.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     val
-*        New ObsLat value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original ObsLat value. */
-   orig = astGetObsLat( this );
-
-/* Invoke the parent method to set the Frame ObsLat. */
-   (*parent_setobslat)( this, val, status );
-
-/* If the altitude has changed significantly, indicate that the LAST value 
-   and magnitude of the diurnal aberration vector will need to be 
-   re-calculated when next needed. */
-   if( fabs( orig - val ) > 1.0E-8 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-      ( (AstSkyFrame *) this )->diurab = AST__BAD;
-   }
-}
-
-static void SetObsLon( AstFrame *this, double val, int *status ) {
-/*
-*  Name:
-*     SetObsLon
-
-*  Purpose:
-*     Set the value of the ObsLon attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetObsLon( AstFrame *this, double val, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSetObsLon method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function sets the ObsLon value.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     val
-*        New ObsLon value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double orig;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Note the original ObsLon value. */
-   orig = astGetObsLon( this );
-
-/* Invoke the parent method to set the Frame ObsLon. */
-   (*parent_setobslon)( this, val, status );
-
-/* If the longitude has changed significantly, indicate that the LAST value 
-   will need to be re-calculated when it is next needed. */
-   if( fabs( orig - val ) > 1.0E-8 ) {
-      ( (AstSkyFrame *) this )->last = AST__BAD;
-      ( (AstSkyFrame *) this )->eplast = AST__BAD;
-      ( (AstSkyFrame *) this )->klast = AST__BAD;
-   }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SetSystem
-
-*  Purpose:
-*     Set the System attribute for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void SetSystem( AstFrame *this_frame, AstSystemType system, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function assigns a new value to the System attribute for a SkyFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     system
-*        The new System value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;              /* FrameSet to be used as the Mapping */
-   AstSkyFrame *sfrm;            /* Copy of original SkyFrame */
-   AstSkyFrame *this;            /* Pointer to SkyFrame structure */
-   double xin[ 2 ];              /* Axis 0 values */
-   double xout[ 2 ];             /* Axis 0 values */
-   double yin[ 2 ];              /* Axis 1 values */
-   double yout[ 2 ];             /* Axis 1 values */
-   int aloff;                    /* The AlignOffset attribute value */
-   int aloff_set;                /* Is the AlignOffset attribute set? */
-   int skyref_set;               /* Is either SkyRef attribute set? */
-   int skyrefis;                 /* The SkyRefIs attribute value */
-   int skyrefis_set;             /* Is the SkyRefIs attribute set? */
-   int skyrefp_set;              /* Is either SkyRefP attribute set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* See if either the SkyRef or SkyRefP attribute is set. */
-   skyref_set = astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 );
-   skyrefp_set = astTestSkyRefP( this, 0 ) || astTestSkyRefP( this, 1 );
-
-/* If so, we will need to transform their values into the new coordinate 
-   system. Save a copy of the SkyFrame with its original System value. */
-   sfrm = ( skyref_set || skyrefp_set )?astCopy( this ):NULL;
-
-/* Use the parent method to set the new System value. */
-   (*parent_setsystem)( this_frame, system, status );
-
-/* Now modify the SkyRef and SkyRefP attributes if necessary. */
-   if( sfrm ) {
-
-/* Save the AlignOffset, SkyRefIs, SkyRef and SkyRefP values. */
-      aloff_set = astTestAlignOffset( sfrm );
-      aloff = astGetAlignOffset( sfrm );
-      skyrefis_set = astTestSkyRefIs( sfrm );
-      skyrefis = astGetSkyRefIs( sfrm );
-
-      xin[ 0 ] = astGetSkyRef( sfrm, 0 );
-      xin[ 1 ] = astGetSkyRefP( sfrm, 0 );
-      yin[ 0 ] = astGetSkyRef( sfrm, 1 );
-      yin[ 1 ] = astGetSkyRefP( sfrm, 1 );
-      
-/* Clear the SkyRef values to avoid infinite recursion in the following
-   call to astConvert. */
-      if( skyref_set ) {
-         astClearSkyRef( sfrm, 0 );
-         astClearSkyRef( sfrm, 1 );
-         astClearSkyRef( this, 0 );
-         astClearSkyRef( this, 1 );
-      }
-
-/* Also set AlignOffset and SkyRefIs so that the following call to
-   astConvert does not align in offset coords. */
-      astSetAlignOffset( sfrm, 0 );
-      astSetSkyRefIs( sfrm, IGNORED_REF );
-
-/* Get the Mapping from the original System to the new System. Invoking 
-   astConvert will recursively invoke SetSystem again. This is why we need
-   to be careful to ensure that SkyRef is cleared above - doing so ensure 
-   we do not end up with infinite recursion. */
-      fs = astConvert( sfrm, this, "" );
-      if( !fs ) {
-         if( astOK ) {         
-            astError( AST__INTER, "astSetSystem(SkyFrame): Cannot convert " 
-                      "SkyRef positions from %s to %s.", status, 
-                      astGetC( sfrm, "System" ), astGetC( this, "System" ) );
-         }
-
-/* Use the Mapping to find the SkyRef and SkyRefP positions in the new 
-   coordinate system. */
-      } else {
-         astTran2( fs, 2, xin, yin, 1, xout, yout );
-
-/* Store the values as required. */
-         if( skyref_set ) {
-            astSetSkyRef( this, 0, xout[ 0 ] );
-            astSetSkyRef( this, 1, yout[ 0 ] );
-         }
-   
-         if( skyrefp_set ) {
-            astSetSkyRefP( this, 0, xout[ 1 ] );
-            astSetSkyRefP( this, 1, yout[ 1 ] );
-         }
-
-/* Restore the original SkyRefIs and AlignOffset values. */
-         if( aloff_set ) {
-            astSetAlignOffset( this, aloff );
-         } else {
-            astClearAlignOffset( this );
-         }
-
-         if( skyrefis_set ) {
-            astSetSkyRefIs( this, skyrefis );
-         } else {
-            astClearSkyRefIs( this );
-         }
-
-/* Free resources. */
-         fs = astAnnul( fs );
-      }
-      sfrm = astAnnul( sfrm );
-   }
-}
-
-static void Shapp( double dist, double *r0, double *r3, double a0, 
-                   double *p4, int *status ){
-/*
-*  Name:
-*     Shapp
-
-*  Purpose:
-*     Use the vectors calculated by Shcal to find a sky position
-*     which is offset along a given position angle.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Shapp( double dist, double *r0, double *r3, double a0, 
-*                 double *p4, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function uses the vectors R0 and R3 calculated previously by
-*     Shcal to find the sky position which is offset away from the
-*     "reference" position (see function Offset2) by a given arc
-*     distance, along a given great circle.
-*
-*     No checks are made for AST__BAD values.
-
-*  Parameters:
-*     dist 
-*        The arc distance to move away from the reference position
-*        in the given direction, in radians.
-*     r0
-*        Pointer to an array holding the 3-vector representing the reference 
-*        position.
-*     r3
-*        Pointer to an array holding the 3-vector representing the 
-*        point which is 90 degrees away from the reference point, along 
-*        the required great circle.
-*     a0 
-*        The sky longitude of the reference position, in radians.
-*     p4 
-*        Pointer to an array of 2 doubles in which to put the sky longitude 
-*        and latitude of the required point, in radians.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double cosdst;            /* Cosine of DIST */
-   double r4[ 3 ];           /* Required position vector */
-   double sindst;            /* Sine of DIST */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store commonly used values. */
-   sindst = sin( dist );
-   cosdst = cos( dist );
-
-/* The vector R4 representing the required point is produced as a
-   linear sum of R0 and R3. */
-   r4[ 0 ] = cosdst*r0[ 0 ] + sindst*r3[ 0 ];
-   r4[ 1 ] = cosdst*r0[ 1 ] + sindst*r3[ 1 ];
-   r4[ 2 ] = cosdst*r0[ 2 ] + sindst*r3[ 2 ];
-
-/* Create the longitude of the required point. If this point is at 
-   a pole it is assigned the same longitude as the reference point. */
-   if( r4[ 0 ] != 0.0 || r4[ 1 ] != 0.0 ) {
-      p4[ 0 ] = atan2( r4[ 1 ], r4[ 0 ] );
-   } else {
-      p4[ 0 ] = a0;
-   }
-
-/* Create the latitude of the required point. */
-   if( r4[ 2 ] > 1.0 ) { 
-      r4[ 2 ] = 1.0;
-   } else if( r4[ 2 ] < -1.0 ) {
-      r4[ 2 ] = -1.0;
-   }
-   p4[ 1 ] = asin( r4[ 2 ] );
-
-}
-
-static void Shcal( double a0, double b0, double angle, double *r0, 
-                   double *r3, int *status ) {
-/*
-*  Name:
-*     Shcal
-
-*  Purpose:
-*     Calculate vectors required by Offset2.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     void Shcal( double a0, double b0, double angle, double *r0, 
-*                 double *r3, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function calculates the 3-vector R0, representing the given
-*     sky position (A0,B0), and the 3-vector R3, representing the sky
-*     position which is 90 degrees away from R0, along a great circle
-*     passing through R0 at a position angle given by ANGLE. Each
-*     3-vector holds Cartesian (X,Y,Z) values with origin at the centre
-*     of the celestial sphere. The XY plane is the "equator", the Z
-*     axis is in the direction of the "north pole", X is towards zero
-*     longitude (A=0), and Y is towards longitude 90 degrees.
-*
-*     No checks are made for AST__BAD input values.
-
-*  Parameters:
-*     a0 
-*        The sky longitude of the given position, in radians.
-*     b0 
-*        The sky latitude of the given position, in radians.
-*     angle 
-*        The position angle of a great circle passing through the given
-*        position.  That is, the angle from north to the required
-*        direction, in radians. Positive angles are in the sense of
-*        rotation from north to east.
-*     r0
-*        A pointer to an array to receive 3-vector R0. See above.
-*     r3
-*        A pointer to an array to receive 3-vector R3. See above.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double cosa0;         /* Cosine of A0 */
-   double cosb0;         /* Cosine of B0 */
-   double cospa;         /* Cosine of ANGLE */
-   double r1[ 3 ];       /* Vector PI/2 away from R0 in meridian of R0 */
-   double r2[ 3 ];       /* Vector PI/2 away from R0 on equator */
-   double sinpa;         /* Sine of ANGLE */
-   double sina0;         /* Sine of A0 */
-   double sinb0;         /* Sine of B0 */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store commonly used values. */
-   sina0 = sin( a0 );
-   cosa0 = cos( a0 );
-   sinb0 = sin( b0 );
-   cosb0 = cos( b0 );
-   sinpa = sin( angle );
-   cospa = cos( angle );
-
-/* Create the vector R0 representing the given point. The XY plane
-   defines zero latitude, Z is in the direction of increasing latitude,
-   X is towards zero longitude, and Y is towards longitude 90 degrees. */
-   r0[ 0 ] =  cosb0*cosa0;
-   r0[ 1 ] =  cosb0*sina0;
-   r0[ 2 ] =  sinb0;
-
-/* Create the vector R1 representing the point in the meridian of the
-   given point which has latitude 90 degrees greater than the
-   given point. */
-   r1[ 0 ] = -sinb0*cosa0;
-   r1[ 1 ] = -sinb0*sina0;
-   r1[ 2 ] =  cosb0;
-
-/* Create the vector R2 representing the point on the equator (i.e. a
-   latitude of zero), which has a longitude 90 degrees to the west of
-   the given point. */
-   r2[ 0 ] = -sina0;
-   r2[ 1 ] =  cosa0;
-   r2[ 2 ] =  0.0;
-
-/* Create the vector R3 representing the point which is 90 degrees away
-   from the given point, along the required great circle. */
-   r3[ 0 ] =  cospa*r1[ 0 ] + sinpa*r2[ 0 ];
-   r3[ 1 ] =  cospa*r1[ 1 ] + sinpa*r2[ 1 ];
-   r3[ 2 ] =  cospa*r1[ 2 ] + sinpa*r2[ 2 ];
-
-/* Return */
-   return;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a SkyFrame and convert to the new coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the protected astSubFrame method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the axes from
-*     a "target" SkyFrame and creates a new Frame with copies of the selected
-*     axes assembled in the requested order. It then optionally overlays the
-*     attributes of a "template" Frame on to the result. It returns both the
-*     resulting Frame and a Mapping that describes how to convert between the
-*     coordinate systems described by the target and result Frames. If
-*     necessary, this Mapping takes account of any differences in the Frames'
-*     attributes due to the influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target SkyFrame, from which axes are to be selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for the
-*        result Frame are to be obtained. Optionally, this may be NULL, in
-*        which case no overlaying of template attributes will be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This number may
-*        be greater than or less than the number of axes in this Frame (or
-*        equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving a list
-*        of the (zero-based) axis indices of the axes to be selected from the
-*        target SkyFrame. The order in which these are given determines the
-*        order in which the axes appear in the result Frame. If any of the
-*        values in this array is set to -1, the corresponding result axis will
-*        not be derived from the target Frame, but will be assigned default
-*        attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This should
-*        contain a list of the template axes (given as zero-based axis indices)
-*        with which the axes of the result Frame are to be associated. This
-*        array determines which axes are used when overlaying axis-dependent
-*        attributes of the template on to the result. If any element of this
-*        array is set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not used and
-*        a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned Mapping.
-*        The forward transformation of this Mapping will describe how to
-*        convert coordinates from the coordinate system described by the target
-*        SkyFrame to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is possible
-*     between the target and the result Frame. Otherwise zero is returned and
-*     *map and *result are returned as NULL (but this will not in itself
-*     result in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not always
-*     be possible otherwise.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     -  This implementation addresses the selection of axes from a SkyFrame
-*     object. This results in another object of the same class only if both
-*     axes of the SkyFrame are selected, once each. Otherwise, the result is a
-*     Frame class object which inherits the SkyFrame's axis information (if
-*     appropriate) but none of the other properties of a SkyFrame.
-*     -  In the event that a SkyFrame results, the returned Mapping will take
-*     proper account of the relationship between the target and result sky
-*     coordinate systems.
-*     -  In the event that a Frame class object results, the returned Mapping
-*     will only represent a selection/permutation of axes.
-
-*  Implementation Deficiencies:
-*     -  Any axis selection is currently permitted. Probably this should be
-*     restricted so that each axis can only be selected once. The
-*     astValidateAxisSelection method will do this but currently there are bugs
-*     in the CmpFrame class that cause axis selections which will not pass this
-*     test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
-   AstAxis *ax;                  /* Pointer to result Frame Axis object */
-   AstMapping *tmpmap;           /* Temporary Mapping pointer */
-   AstPermMap *permmap;          /* Pointer to PermMap */
-   AstSkyFrame *target;          /* Pointer to the SkyFrame structure */
-   AstSkyFrame *temp;            /* Pointer to copy of target SkyFrame */
-   AstSystemType align_sys;      /* System in which to align the SkyFrames */
-   int match;                    /* Coordinate conversion is possible? */
-   int perm[ 2 ];                /* Permutation array for axis swap */
-   int result_swap;              /* Swap result SkyFrame coordinates? */
-   int set_usedefs;              /* Set the returned UseDefs attribute zero?*/
-   int target_axis;              /* Target SkyFrame axis index */
-   int target_swap;              /* Swap target SkyFrame coordinates? */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the target SkyFrame structure. */
-   target = (AstSkyFrame *) target_frame;
-
-/* Result is a SkyFrame. */
-/* --------------------- */
-/* Check if the result Frame is to have two axes obtained by selecting
-   both of the target SkyFrame axes, in either order. If so, the
-   result will also be a SkyFrame. */
-   if ( ( result_naxes == 2 ) &&
-        ( ( ( target_axes[ 0 ] == 0 ) && ( target_axes[ 1 ] == 1 ) ) ||
-          ( ( target_axes[ 0 ] == 1 ) && ( target_axes[ 1 ] == 0 ) ) ) ) {
-
-/* If a template has not been supplied, or is the same object as the
-   target, we are simply extracting axes from the supplied SkyFrame. In 
-   this case we temporarily force the UseDefs attribute to 1 so that (for 
-   instance) the astPickAxes method can function correctly. E.g. if you 
-   have a SkyFrame with no set Epoch and UseDefs set zero,  and you try to 
-   swap the axes, the attempt would fail because MakeSkyMapping would be 
-   unable to determine the Mapping from original to swapped SkyFrame, 
-   because of the lack of an Epoch value. */
-      set_usedefs = 0;
-      if( !template || template == target_frame ) {
-         if( !astGetUseDefs( target ) ) {
-            astClearUseDefs( target );
-            set_usedefs = 1;
-         }
-      }
-
-/* Form the result from a copy of the target and then permute its axes
-   into the order required. */
-      *result = astCopy( target );
-      astPermAxes( *result, target_axes );
-
-/* If required, overlay the template attributes on to the result SkyFrame.
-   Also get the system in which to align the two SkyFrames. This is the 
-   value of the AlignSystem attribute from the template (if there is a
-   template). */
-      if ( template ) {
-         astOverlay( template, template_axes, *result );
-         align_sys = astGetAlignSystem( template );
-
-      } else {
-         align_sys = astGetAlignSystem( target );
-      }
-
-/* See whether alignment occurs in offset coordinates or absolute
-   coordinates. If the current call to this function is part of the 
-   process of restoring a FrameSet's integrity following changes to 
-   the FrameSet's current Frame, then we ignore the setting of the 
-   AlignOffset attributes and use 0. This ensures that when the System 
-   attribute (for instance) is changed via a FrameSet pointer, the 
-   Mappings within the FrameSet are modified to produce offsets in the  
-   new System. If we are not currently restoring a FrameSet's integrity,
-   then we align in offsets if the template is a SkyFrame and both template 
-   and target want alignment to occur in the offset coordinate system. In 
-   this case we use a UnitMap to connect them. */
-      if( ( astGetFrameFlags( target_frame ) & AST__INTFLAG ) == 0 ) { 
-         if( astGetAlignOffset( target ) && 
-             astGetSkyRefIs( target ) != IGNORED_REF && 
-             template && astIsASkyFrame( template ) ){
-            if( astGetAlignOffset( (AstSkyFrame *) template ) &&
-                astGetSkyRefIs( (AstSkyFrame *) template ) != IGNORED_REF ) {
-               match = 1;
-               *map = (AstMapping *) astUnitMap( 2, "", status );
-            }
-         }
-      }  
-
-/* Otherwise, generate a Mapping that takes account of changes in the sky 
-   coordinate system (equinox, epoch, etc.) between the target SkyFrame and 
-   the result SkyFrame. If this Mapping can be generated, set "match" to 
-   indicate that coordinate conversion is possible. */
-      if( ! *map ) {
-         match = ( MakeSkyMapping( target, (AstSkyFrame *) *result, 
-                                   align_sys, map, status ) != 0 );
-      }
-
-/* If required, re-instate the original zero value of UseDefs. */
-      if( set_usedefs ) {
-         astSetUseDefs( target, 0 );
-         astSetUseDefs( *result, 0 );
-      }
-
-/* If a Mapping has been obtained, it will expect coordinate values to be
-   supplied in (longitude,latitude) pairs. Test whether we need to swap the
-   order of the target SkyFrame coordinates to conform with this. */
-      if ( astOK && match ) {
-         target_swap = ( astValidateAxis( target, 0, "astSubFrame" ) != 0 );
-
-/* Coordinates will also be delivered in (longitude,latitude) pairs, so check
-   to see whether the result SkyFrame coordinate order should be swapped. */
-         result_swap = ( target_swap != ( target_axes[ 0 ] != 0 ) );
-
-/* If either set of coordinates needs swapping, create a PermMap that
-   will swap a pair of coordinates. */
-         permmap = NULL;
-         if ( target_swap || result_swap ) {
-            perm[ 0 ] = 1;
-            perm[ 1 ] = 0;
-            permmap = astPermMap( 2, perm, 2, perm, NULL, "", status );
-         }
-
-/* If necessary, prefix this PermMap to the main Mapping. */
-         if ( target_swap ) {
-            tmpmap = (AstMapping *) astCmpMap( permmap, *map, 1, "", status );
-            *map = astAnnul( *map );
-            *map = tmpmap;
-         }
-
-/* Also, if necessary, append it to the main Mapping. */
-         if ( result_swap ) {
-            tmpmap = (AstMapping *) astCmpMap( *map, permmap, 1, "", status );
-            *map = astAnnul( *map );
-            *map = tmpmap;
-         }
-
-/* Annul the pointer to the PermMap (if created). */
-         if ( permmap ) permmap = astAnnul( permmap );
-      }
-
-/* Result is not a SkyFrame. */
-/* ------------------------- */
-/* In this case, we select axes as if the target were from the Frame
-   class.  However, since the resulting data will then be separated
-   from their enclosing SkyFrame, default attribute values may differ
-   if the methods for obtaining them were over-ridden by the SkyFrame
-   class. To overcome this, we ensure that these values are explicitly
-   set for the result Frame (rather than relying on their
-   defaults). */
-   } else {
-
-/* Make a temporary copy of the target SkyFrame. We will explicitly
-   set the attribute values in this copy so as not to modify the
-   original. */
-      temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
-   explicitly to its default value. */
-#define SET(attribute) \
-   if ( !astTest##attribute( temp ) ) { \
-      astSet##attribute( temp, astGet##attribute( temp ) ); \
-   }
-
-/* Set attribute values which apply to the Frame as a whole and which
-   we want to retain, but whose defaults are over-ridden by the
-   SkyFrame class. */
-      SET(Domain)
-      SET(Title)
-
-/* Now loop to set explicit attribute values for each axis. */
-      for ( target_axis = 0; target_axis < 2; target_axis++ ) {
-
-/* Define a macro to test if an axis attribute is set. If not, set it
-   explicitly to its default value. */
-#define SET_AXIS(attribute) \
-   if ( !astTest##attribute( temp, target_axis ) ) { \
-      astSet##attribute( temp, target_axis, \
-                         astGet##attribute( temp, target_axis ) ); \
-   }
-
-/* Use this macro to set explicit values for all the axis attributes
-   for which the SkyFrame class over-rides the default value. */
-         SET_AXIS(AsTime)
-         SET_AXIS(Format)
-         SET_AXIS(Label)
-         SET_AXIS(Symbol)
-         SET_AXIS(Unit)
-
-/* Now handle axis attributes for which there are no SkyFrame access
-   methods.  For these we require a pointer to the temporary
-   SkyFrame's Axis object. */
-         ax = astGetAxis( temp, target_axis );
-
-/* Set an explicit value for the IsLatitude and CentreZero attributes. */
-         if( astValidateAxis( temp, target_axis, "astSubFrame" ) == 1 ) {
-            astSetAxisIsLatitude( ax, 1 );
-            astSetAxisCentreZero( ax, 1 );
-
-         } else {
-            astSetAxisIsLatitude( ax, 0 );
-            astSetAxisCentreZero( ax, astGetNegLon( temp ) );
-         }
-
-/* Annul the Axis object pointer. */
-         ax = astAnnul( ax );
-      }
-
-/* Clear attributes which have an extended range of values allowed by
-   this class. */
-      astClearSystem( temp );
-      astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
-   produce the result Frame by selecting the required set of axes and
-   overlaying the template Frame's attributes. */
-      match = (*parent_subframe)( (AstFrame *) temp, template,
-                                  result_naxes, target_axes, template_axes,
-                                  map, result, status );
-
-/* Delete the temporary copy of the target SkyFrame. */
-      temp = astDelete( temp );
-   }
-
-/* Ensure the returned Frame does not have active units. */
-   astSetActiveUnit( *result, 0 );
-
-/* If an error occurred or no match was found, annul the returned
-   objects and reset the returned result. */
-   if ( !astOK || !match ) {
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSystemCode method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external
-*     description of a sky coordinate system into a SkyFrame
-*     coordinate system type code (System attribute value). It is the
-*     inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the sky coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the sky coordinate
-*     system description was not recognised. This does not produce an
-*     error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
-   result. */
-   if ( astChrMatch( "FK4", system ) ) {
-      result = AST__FK4;
-
-   } else if ( astChrMatch( "FK4_NO_E", system ) ||
-               astChrMatch( "FK4-NO-E", system ) ) {
-      result = AST__FK4_NO_E;
-
-   } else if ( astChrMatch( "FK5", system ) ||
-               astChrMatch( "Equatorial", system ) ) {
-      result = AST__FK5;
-
-   } else if ( astChrMatch( "J2000", system ) ) {
-      result = AST__J2000;
-
-   } else if ( astChrMatch( "ICRS", system ) ) {
-      result = AST__ICRS;
-
-   } else if ( astChrMatch( "AZEL", system ) ) {
-      result = AST__AZEL;
-
-   } else if ( astChrMatch( "GAPPT", system ) ||
-               astChrMatch( "GEOCENTRIC", system ) ||
-               astChrMatch( "APPARENT", system ) ) {
-         result = AST__GAPPT;
-
-   } else if ( astChrMatch( "ECLIPTIC", system ) ) {
-      result = AST__ECLIPTIC;
-
-   } else if ( astChrMatch( "HELIOECLIPTIC", system ) ) {
-      result = AST__HELIOECLIPTIC;
-
-   } else if ( astChrMatch( "GALACTIC", system ) ) {
-      result = AST__GALACTIC;
-
-   } else if ( astChrMatch( "SUPERGALACTIC", system ) ) {
-      result = AST__SUPERGALACTIC;
-
-   } else if ( astChrMatch( "UNKNOWN", system ) ) {
-      result = AST__UNKNOWN;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astSystemString method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a SkyFrame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the sky coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. (Where possible, return the same string as would be
-   used in the FITS WCS representation of the coordinate system). */
-   switch ( system ) {
-   case AST__FK4:
-      result = "FK4";
-      break;
-
-   case AST__FK4_NO_E:
-      result = "FK4-NO-E";
-      break;
-
-   case AST__FK5:
-      result = "FK5";
-      break;
-
-   case AST__J2000:
-      result = "J2000";
-      break;
-
-   case AST__ICRS:
-      result = "ICRS";
-      break;
-
-   case AST__GAPPT:
-      result = "GAPPT";
-      break;
-
-   case AST__AZEL:
-      result = "AZEL";
-      break;
-
-   case AST__ECLIPTIC:
-      result = "ECLIPTIC";
-      break;
-
-   case AST__HELIOECLIPTIC:
-      result = "HELIOECLIPTIC";
-      break;
-
-   case AST__GALACTIC:
-      result = "GALACTIC";
-      break;
-
-   case AST__SUPERGALACTIC:
-      result = "SUPERGALACTIC";
-      break;
-
-   case AST__UNKNOWN:
-      result = "Unknown";
-      break;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     TestActiveUnit
-
-*  Purpose:
-*     Test the ActiveUnit flag for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int TestActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astTestActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function test the value of the ActiveUnit flag for a SkyFrame, 
-*    which is always "unset". 
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The result of the test (0).
-
-*/
-   return 0;
-}
-
-static int TestAsTime( AstSkyFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     TestAsTime
-
-*  Purpose:
-*     Determine if a value has been set for a SkyFrame's AsTime attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int TestAsTime( AstSkyFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SkyFrame member function.
-
-*  Description:
-*     This function returns a boolean value to indicate if a value has
-*     previously been set for the AsTime attribute for a specified axis of a
-*     SkyFrame. This attribute indicates whether axis values should be
-*     formatted as times (as opposed to angles) by default.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        Index of the axis for which information is required (zero based).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero or one, according to whether the AsTime attribute has been set.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables. */
-   AstAxis *ax;                  /* Pointer to Axis object */
-   int result;                   /* Result to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astTestAsTime" );
-
-/* Obtain a pointer to the Axis object. */
-   ax = astGetAxis( this, axis );
-
-/* Determine if the AsTime attribute has been set for it (it cannot have been
-   set unless the object is a SkyAxis). */
-   result = ( astIsASkyAxis( ax ) && astTestAxisAsTime( ax ) );
-
-/* Annul the Axis pointer. */
-   ax = astAnnul( ax );
-
-/* Return the result. */
-   return result;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a SkyFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a SkyFrame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   int axis;                     /* SkyFrame axis number */
-   int len;                      /* Length of attrib string */
-   int nc;                       /* No. characters read by astSscanf */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* AsTime(axis). */
-/* ------------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( attrib, "astime(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      result = astTestAsTime( this, axis - 1 );
-
-/* Equinox. */
-/* -------- */
-   } else if ( !strcmp( attrib, "equinox" ) ) {
-      result = astTestEquinox( this );
-
-/* NegLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "neglon" ) ) {
-      result = astTestNegLon( this );
-
-/* Projection. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "projection" ) ) {
-      result = astTestProjection( this );
-
-/* SkyRefIs. */
-/* --------- */
-   } else if ( !strcmp( attrib, "skyrefis" ) ) {
-      result = astTestSkyRefIs( this );
-
-/* SkyRef. */
-/* ------- */
-   } else if ( !strcmp( attrib, "skyref" ) ) {
-      result = astTestSkyRef( this, 0 ) || astTestSkyRef( this, 1 );
-
-/* SkyRef(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( attrib, "skyref(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      result = astTestSkyRef( this, axis - 1 );
-
-/* SkyRefP. */
-/* -------- */
-   } else if ( !strcmp( attrib, "skyrefp" ) ) {
-      result = astTestSkyRefP( this, 0 ) || astTestSkyRefP( this, 1 );
-
-/* SkyRefP(axis). */
-/* ------------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( attrib, "skyrefp(%d)%n", &axis, &nc ) )
-        && ( nc >= len ) ) {
-      result = astTestSkyRefP( this, axis - 1 );
-
-/* AlignOffset */
-/* ----------- */
-   } else if ( !strcmp( attrib, "alignoffset" ) ) {
-      result = astTestAlignOffset( this );
-
-/* If the name is not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then return
-   zero. */
-   } else if ( !strcmp( attrib, "lataxis" ) ||
-        !strcmp( attrib, "lonaxis" ) ) {
-      result = 0;
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     Unformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a SkyFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     int Unformat( AstFrame *this, int axis, const char *string,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the public astUnformat
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reads a formatted coordinate value for a SkyFrame
-*     axis (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame.
-*     axis
-*        The number of the SkyFrame axis for which the coordinate
-*        value is to be read (axis numbering starts at zero for the
-*        first axis).
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will
-*        be returned (in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   double coord;                 /* Coordinate value read */
-   int format_set;               /* Format attribute set? */
-   int nc;                       /* Number of characters read */
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* Determine if a Format value has been set for the axis and set a
-   temporary value if it has not. Use the GetFormat member function
-   for this class together with member functions inherited from the
-   parent class (rather than using the object's methods directly)
-   because if any of these methods have been over-ridden by a derived
-   class the Format string syntax may no longer be compatible with
-   this class. */
-   format_set = (*parent_testformat)( this_frame, axis, status );
-   if ( !format_set ) {
-      (*parent_setformat)( this_frame, axis, GetFormat( this_frame, axis, status ), status );
-   }
-
-/* Use the Unformat member function inherited from the parent class to
-   read the coordinate value. */
-   nc = (*parent_unformat)( this_frame, axis, string, &coord, status );
-
-/* If necessary, clear any temporary Format value that was set above. */
-   if ( !format_set ) (*parent_clearformat)( this_frame, axis, status );
-
-/* If an error occurred, clear the number of characters read. */
-   if ( !astOK ) {
-      nc = 0;
-
-/* Otherwise, if characters were read, return the coordinate value. */
-   } else if ( nc ) {
-      *value = coord;
-   }
-
-/* Return the number of characters read. */
-   return nc;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "frame.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system, 
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     SkyFrame member function (over-rides the astValidateSystem method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked. 
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;              /* Validated system value */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
-   if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
-         astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
-                   "or AlignSystem attribute of a %s.", status, method, 
-                   astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
-   } else {
-      result = system;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void VerifyMSMAttrs( AstSkyFrame *target, AstSkyFrame *result, 
-                            int which, const char *attrs, const char *method, int *status ) {
-/*
-*  Name:
-*     VerifyMSMAttrs
-
-*  Purpose:
-*     Verify that usable attribute values are available.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*      void VerifyMSMAttrs( AstSkyFrame *target, AstSkyFrame *result, 
-*                           int which, const char *attrs, const char *method, int *status )
-
-*  Class Membership:
-*     SkyFrame member function 
-
-*  Description:
-*     This function tests each attribute listed in "attrs". It returns
-*     without action if 1) an explicit value has been set for each attribute
-*     in the SkyFrame indicated by "which" or 2) the UseDefs attribute of the 
-*     "which" SkyFrame is non-zero.
-*
-*     If UseDefs is zero (indicating that default values should not be
-*     used for attributes), and any of the named attributes does not have
-*     an explicitly set value, then an error is reported.
-*
-*     The displayed error message assumes that tjis function was called
-*     as part of the process of producing a Mapping from "target" to "result".
-
-*  Parameters:
-*     target
-*        Pointer to the target SkyFrame. 
-*     result
-*        Pointer to the result SkyFrame. 
-*     which
-*        If 2, both the target and result SkyFrames are checked for the 
-*        supplied attributes. If less than 2, only the target SkyFrame is
-*        checked. If greater than 2, only the result SkyFrame is checked.
-*     attrs
-*        A string holding a space separated list of attribute names.
-*     method
-*        A string holding the name of the calling method for use in error
-*        messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   const char *a;
-   const char *p;
-   const char *desc;
-   int len;
-   int set1;
-   int set2;
-   int state;
-   int usedef1;
-   int usedef2;
-
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* Get the UseDefs attributes of the two SkyFrames. */
-   usedef1 = astGetUseDefs( target );
-   usedef2 = astGetUseDefs( result );
-
-/* If both SkyFrames have a non-zero value for its UseDefs attribute, then
-   all attributes are assumed to have usable values, since the defaults 
-   will be used if no explicit value has been set. So we only need to do
-   any checks if UseDefs is zero for either SkyFrame. */
-   if( !usedef1 || !usedef2 ) {   
-
-/* Stop compiler warnings about uninitialised variables */
-      a = NULL;
-      desc = NULL;
-      len = 0;
-      set1 = 0;
-      set2 = 0;
-
-/* Loop round the "attrs" string identifying the start and length of each
-   non-blank word in the string. */
-      state = 0;
-      p = attrs;
-      while( 1 ) {
-         if( state == 0 ) {
-            if( !isspace( *p ) ) {
-               a = p;
-               len = 1;
-               state = 1;
-            }
-         } else {
-            if( isspace( *p ) || !*p ) {
-   
-/* The end of a word has just been reached. Compare it to each known
-   attribute value. Get a flag indicating if the attribute has a set
-   value, and a string describing the attribute.*/
-               if( len > 0 ) {
-
-                  if( !strncmp( "Equinox", a, len ) ) {
-                     set1 = astTestEquinox( target );
-                     set2 = astTestEquinox( result );
-                     desc = "reference equinox";
-
-                  } else if( !strncmp( "Dut1", a, len ) ) {
-                     set1 = astTestDut1( target );
-                     set2 = astTestDut1( result );
-                     desc = "UT1-UTC correction";
-
-                  } else if( !strncmp( "Epoch", a, len ) ) {
-                     set1 = astTestEpoch( target );
-                     set2 = astTestEpoch( result );
-                     desc = "epoch of observation";
-
-                  } else if( !strncmp( "ObsLon", a, len ) ) {
-                     set1 = astTestObsLon( target );
-                     set2 = astTestObsLon( result );
-                     desc = "longitude of observer";
-
-                  } else if( !strncmp( "ObsLat", a, len ) ) {
-                     set1 = astTestObsLat( target );
-                     set2 = astTestObsLat( result );
-                     desc = "latitude of observer";
-
-                  } else if( !strncmp( "ObsAlt", a, len ) ) {
-                     set1 = astTestObsAlt( target );
-                     set2 = astTestObsAlt( result );
-                     desc = "altitude of observer";
-
-                  } else {
-                     astError( AST__INTER, "VerifyMSMAttrs(SkyFrame): "
-                               "Unknown attribute name \"%.*s\" supplied (AST "
-                               "internal programming error).", status, len, a );
-                  }
-
-/* If the attribute is not set in the target but should be, report an
-   error. */
-                  if( !usedef1 && !set1 && which < 3 ) {
-                     astClearTitle( target );
-                     astClearTitle( result );
-                     astError( AST__NOVAL, "%s(%s): Cannot convert "
-                               "celestial coordinates from %s to %s.", status, 
-                               method, astGetClass( target ), 
-                               astGetC( target, "Title" ), 
-                               astGetC( result, "Title" ) );
-                     astError( AST__NOVAL, "No value has been set for "
-                               "the \"%.*s\" attribute (%s) in the input %s.", status,
-                               len, a, desc, astGetClass( target ) );
-                     break;
-                  }
-
-/* If the attribute is not set in the result but should be, report an
-   error. */
-                  if( !usedef2 && !set2 && which > 1 ) {
-                     astClearTitle( target );
-                     astClearTitle( result );
-                     astError( AST__NOVAL, "%s(%s): Cannot convert "
-                               "celestial coordinates from %s to %s.", status, 
-                               method, astGetClass( result ), 
-                               astGetC( target, "Title" ), 
-                               astGetC( result, "Title" ) );
-                     astError( AST__NOVAL, "No value has been set for "
-                               "the \"%.*s\" attribute (%s) in the output %s.", status,
-                               len, a, desc, astGetClass( result ) );
-                     break;
-                  }
-
-/* Continue the word search algorithm. */
-               }
-               len = 0;
-               state = 0;
-            } else {
-               len++;
-            }
-         }
-         if( !*(p++) ) break;
-      }
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/*
-*att++
-*  Name:
-*     AlignOffset
-
-*  Purpose:
-*     Align SkyFrames using the offset coordinate system? 
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which controls how a SkyFrame
-*     behaves when it is used (by
-c     astFindFrame or astConvert) as a template to match another (target)
-f     AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-*     SkyFrame. It determines the coordinate system in which the two 
-*     SkyFrames are aligned if a match occurs.
-*
-*     If the template and target SkyFrames both have defined offset coordinate
-*     systems (i.e. the SkyRefIs attribute is set to either "Origin" or "
-*     Pole"), and they both have a non-zero value for AlignOffset, then 
-*     alignment occurs within the offset coordinate systems (that is, a 
-*     UnitMap will always be used to align the two SkyFrames). If either 
-*     the template or target SkyFrame has zero (the default value) for 
-*     AlignOffset, or if either SkyFrame has SkyRefIs set to "Ignored", then 
-*     alignment occurring within the coordinate system specified by the 
-*     AlignSystem attribute.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SkyFrame,AlignOffset,alignoffset,-INT_MAX)
-astMAKE_GET(SkyFrame,AlignOffset,int,0,( ( this->alignoffset != -INT_MAX ) ?
-                                           this->alignoffset : 0 ))
-astMAKE_SET(SkyFrame,AlignOffset,int,alignoffset,( value != 0 ))
-astMAKE_TEST(SkyFrame,AlignOffset,( this->alignoffset != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     AsTime(axis)
-
-*  Purpose:
-*     Format celestal coordinates as times?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute specifies the default style of formatting to be
-c     used (e.g. by astFormat) for the celestial coordinate values
-f     used (e.g. by AST_FORMAT) for the celestial coordinate values
-*     described by a SkyFrame. It takes a separate boolean value for
-*     each SkyFrame axis so that, for instance, the setting
-*     "AsTime(2)=0" specifies the default formatting style for
-*     celestial latitude values.
-*
-*     If the AsTime attribute for a SkyFrame axis is zero, then
-*     coordinates on that axis will be formatted as angles by default
-*     (using degrees, minutes and seconds), otherwise they will be
-*     formatted as times (using hours, minutes and seconds).
-*
-*     The default value of AsTime is chosen according to the sky
-*     coordinate system being represented, as determined by the
-*     SkyFrame's System attribute. This ensures, for example, that
-*     right ascension values will be formatted as times by default,
-*     following normal conventions.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*  Notes:
-*     - The AsTime attribute operates by changing the default value of
-*     the corresponding Format(axis) attribute. This, in turn, may
-*     also affect the value of the Unit(axis) attribute.
-*     - Only the default style of formatting is affected by the AsTime
-*     value. If an explicit Format(axis) value is set, it will
-*     over-ride any effect from the AsTime attribute.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     Equinox
-
-*  Purpose:
-*     Epoch of the mean equinox.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute is used to qualify those celestial coordinate
-*     systems described by a SkyFrame which are notionally based on
-*     the ecliptic (the plane of the Earth's orbit around the Sun)
-*     and/or the Earth's equator.
-*
-*     Both of these planes are in motion and their positions are
-*     difficult to specify precisely. In practice, therefore, a model
-*     ecliptic and/or equator are used instead. These, together with
-*     the point on the sky that defines the coordinate origin (the
-*     intersection of the two planes termed the "mean equinox") move
-*     with time according to some model which removes the more rapid
-*     fluctuations. The SkyFrame class supports both the FK4 and
-*     FK5 models.
-*
-*     The position of a fixed source expressed in any of these
-*     coordinate systems will appear to change with time due to
-*     movement of the coordinate system itself (rather than motion of
-*     the source).  Such coordinate systems must therefore be
-*     qualified by a moment in time (the "epoch of the mean equinox"
-*     or "equinox" for short) which allows the position of the model
-*     coordinate system on the sky to be determined. This is the role
-*     of the Equinox attribute.
-*
-*     The Equinox attribute is stored as a Modified Julian Date, but
-*     when setting or getting its value you may use the same formats
-*     as for the Epoch attribute (q.v.).
-*
-*     The default Equinox value is B1950.0 (Besselian) for the old
-*     FK4-based coordinate systems (see the System attribute) and
-*     J2000.0 (Julian) for all others.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*  Notes:
-*     - Care must be taken to distinguish the Equinox value, which
-*     relates to the definition of a time-dependent coordinate system
-*     (based on solar system reference planes which are in motion),
-*     from the superficially similar Epoch value. The latter is used
-*     to qualify coordinate systems where the positions of sources
-*     change with time (or appear to do so) for a variety of other
-*     reasons, such as aberration of light caused by the observer's
-*     motion, etc.
-*     - See the description of the System attribute for details of
-*     which qualifying attributes apply to each celestial coordinate
-*     system.
-*att--
-*/
-/* Clear the Equinox value by setting it to AST__BAD. */
-astMAKE_CLEAR(SkyFrame,Equinox,equinox,AST__BAD)
-
-/* Provide a default value of B1950.0 or J2000.0 depending on the System
-   setting. */
-astMAKE_GET(SkyFrame,Equinox,double,AST__BAD,(
-            ( this->equinox != AST__BAD ) ? this->equinox :
-               ( ( ( astGetSystem( this ) == AST__FK4 ) ||
-                   ( astGetSystem( this ) == AST__FK4_NO_E ) ) ?
-                    palSlaEpb2d( 1950.0 ) : palSlaEpj2d( 2000.0 ) ) ))
-
-/* Allow any Equinox value to be set, unless the System is Helio-ecliptic
-   (in which case clear the value so that J2000 is used). */
-astMAKE_SET(SkyFrame,Equinox,double,equinox,((astGetSystem(this)!=AST__HELIOECLIPTIC)?value:AST__BAD))
-
-/* An Equinox value is set if it is not equal to AST__BAD. */
-astMAKE_TEST(SkyFrame,Equinox,( this->equinox != AST__BAD ))
-
-
-/*
-*att++
-*  Name:
-*     LatAxis
-
-*  Purpose:
-*     Index of the latitude axis.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This read-only attribute gives the index (1 or 2) of the latitude 
-*     axis within the SkyFrame (taking into account any current axis 
-*     permutations).
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     LonAxis
-
-*  Purpose:
-*     Index of the longitude axis.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This read-only attribute gives the index (1 or 2) of the longitude 
-*     axis within the SkyFrame (taking into account any current axis 
-*     permutations).
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     NegLon
-
-*  Purpose:
-*     Display negative longitude values?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which controls how longitude values
-c     are normalized for display by astNorm.
-f     are normalized for display by AST_NORM.
-*
-*     If the NegLon attribute is zero, then normalized 
-*     longitude values will be in the range zero to 2.pi. If NegLon is
-*     non-zero, then normalized longitude values will be in the range -pi 
-*     to pi. 
-*
-*     The default value depends on the current value of the SkyRefIs
-*     attribute, If SkyRefIs has a value of "Origin", then the default for
-*     NegLon is one, otherwise the default is zero.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-*att--
-*/
-/* Clear the NegLon value by setting it to -INT_MAX. */
-astMAKE_CLEAR(SkyFrame,NegLon,neglon,-INT_MAX)
-
-/* Supply a default of 0 for absolute coords and 1 for offset coords if 
-   no NegLon value has been set. */
-astMAKE_GET(SkyFrame,NegLon,int,0,( ( this->neglon != -INT_MAX ) ?
-this->neglon : (( astGetSkyRefIs( this ) == ORIGIN_REF )? 1 : 0)))
-
-/* Set a NegLon value of 1 if any non-zero value is supplied. */
-astMAKE_SET(SkyFrame,NegLon,int,neglon,( value != 0 ))
-
-/* The NegLon value is set if it is not -INT_MAX. */
-astMAKE_TEST(SkyFrame,NegLon,( this->neglon != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     Projection
-
-*  Purpose:
-*     Sky projection description.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute provides a place to store a description of the
-*     type of sky projection used when a SkyFrame is attached to a
-*     2-dimensional object, such as an image or plotting surface. For
-*     example, typical values might be "orthographic", "Hammer-Aitoff"
-*     or "cylindrical equal area".
-*
-*     The Projection value is purely descriptive and does not affect
-*     the celestial coordinate system represented by the SkyFrame in
-*     any way. If it is set to a non-blank string, the description
-*     provided may be used when forming the default value for the
-*     SkyFrame's Title attribute (so that typically it will appear in
-*     graphical output, for instance). The default value is an empty
-*     string.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-*att--
-*/
-/* Clear the Projection value by freeing the allocated memory and
-   assigning a NULL pointer. */
-astMAKE_CLEAR(SkyFrame,Projection,projection,astFree( this->projection ))
-
-/* If the Projection value is not set, return a pointer to an empty
-   string. */
-astMAKE_GET(SkyFrame,Projection,const char *,NULL,( this->projection ?
-                                                    this->projection : "" ))
-
-/* Set a Projection value by freeing any previously allocated memory,
-   allocating new memory, storing the string and saving the pointer to
-   the copy. */
-astMAKE_SET(SkyFrame,Projection,const char *,projection,astStore(
-                     this->projection, value, strlen( value ) + (size_t) 1 ))
-
-/* The Projection value is set if the pointer to it is not NULL. */
-astMAKE_TEST(SkyFrame,Projection,( this->projection != NULL ))
-
-/*
-*att++
-*  Name:
-*     SkyRefIs
-
-*  Purpose:
-*     Selects the nature of the offset coordinate system.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls how the values supplied for the SkyRef and
-*     SkyRefP attributes are used. These three attributes together allow
-*     a SkyFrame to represent offsets relative to some specified origin
-*     or pole within the coordinate system specified by the System attribute, 
-*     rather than absolute axis values. SkyRefIs can take one of the 
-*     case-insensitive values "Origin", "Pole" or "Ignored". 
-*
-*     If SkyRefIs is set to "Origin", then the coordinate system
-*     represented by the SkyFrame is modified to put the origin of longitude
-*     and latitude at the position specified by the SkyRef attribute.
-*
-*     If SkyRefIs is set to "Pole", then the coordinate system represented 
-*     by the SkyFrame is modified to put the north pole at the position 
-*     specified by the SkyRef attribute. 
-*
-*     If SkyRefIs is set to "Ignored" (the default), then any value set for the 
-*     SkyRef attribute is ignored, and the SkyFrame represents the coordinate
-*     system specified by the System attribute directly without any rotation.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(SkyFrame,SkyRefIs,skyrefis,BAD_REF)
-astMAKE_SET(SkyFrame,SkyRefIs,int,skyrefis,value)
-astMAKE_TEST(SkyFrame,SkyRefIs,( this->skyrefis != BAD_REF ))
-astMAKE_GET(SkyFrame,SkyRefIs,int,IGNORED_REF,(this->skyrefis == BAD_REF ? IGNORED_REF : this->skyrefis))
-
-/*
-*att++
-*  Name:
-*     SkyRef(axis)
-
-*  Purpose:
-*     Position defining the offset coordinate system.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute allows a SkyFrame to represent offsets, rather than 
-*     absolute axis values, within the coordinate system specified by the 
-*     System attribute. If supplied, SkyRef should be set to hold the
-*     longitude and latitude of a point within the coordinate system 
-*     specified by the System attribute. The coordinate system represented
-*     by the SkyFrame will then be rotated in order to put the specified
-*     position at either the pole or the origin of the new coordinate system
-*     (as indicated by the SkyRefIs attribute). The orientation of the
-*     modified coordinate system is then controlled using the SkyRefP 
-*     attribute. 
-*
-*     If an integer axis index is included in the attribute name (e.g.
-*     "SkyRef(1)") then the attribute value should be supplied as a single 
-*     floating point axis value, in radians, when setting a value for the
-*     attribute, and will be returned in the same form when getting the value 
-*     of the attribute. In this case the integer axis index should be "1"
-*     or "2" (the values to use for longitude and latitue axes are
-*     given by the LonAxis and LatAxis attributes).
-*
-*     If no axis index is included in the attribute name (e.g. "SkyRef") then 
-*     the attribute value should be supplied as a character string
-*     containing two formatted axis values (an axis 1 value followed by a
-*     comma, followed by an axis 2 value). The same form
-*     will be used when getting the value of the attribute. 
-*
-*     The default values for SkyRef are zero longitude and zero latitude.
-
-*  Aligning SkyFrames with Offset Coordinate Systems:
-*     The offset coordinate system within a SkyFrame should normally be 
-*     considered as a superficial "re-badging" of the axes of the coordinate 
-*     system specified by the System attribute - it merely provides an 
-*     alternative numerical "label" for each position in the System coordinate 
-*     system. The SkyFrame retains full knowledge of the celestial coordinate 
-*     system on which the offset coordinate system is based (given by the 
-*     System attribute). For instance, the SkyFrame retains knowledge of the 
-*     way that one celestial coordinate system may "drift" with respect to 
-*     another over time. Normally, if you attempt to align two SkyFrames (e.g. 
-f     using the AST_CONVERT or AST_FINDFRAME routine),
-c     using the astConvert or astFindFrame routine),
-*     the effect of any offset coordinate system defined in either SkyFrame 
-*     will be removed, resulting in alignment being performed in the
-*     celestial coordinate system given by the AlignSystem attribute.
-*     However, by setting the AlignOffset attribute ot a non-zero value, it 
-*     is possible to change this behaviour so that the effect of the offset 
-*     coordinate system is not removed when aligning two SkyFrames.
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*  Notes:
-*     - If the System attribute of the SkyFrame is changed, any position
-*     given for SkyRef is transformed into the new System.
-*     - If a value has been assigned to SkyRef attribute, then 
-*     the default values for certain attributes are changed as follows:
-*     the default axis Labels for the SkyFrame are modified by appending 
-*     " offset" to the end, the default axis Symbols for the SkyFrame are 
-*     modified by prepending the character "D" to the start, and the
-*     default title is modified by replacing the projection information by the
-*     origin information.
-
-*att--
-*/
-MAKE_CLEAR(SkyRef,skyref,AST__BAD,2)
-MAKE_SET(SkyRef,double,skyref,value,2)
-MAKE_TEST(SkyRef,( this->skyref[axis_p] != AST__BAD ),2)
-MAKE_GET(SkyRef,double,0.0,((this->skyref[axis_p]!=AST__BAD)?this->skyref[axis_p]:0.0),2)
-
-/*
-*att++
-*  Name:
-*     SkyRefP(axis)
-
-*  Purpose:
-*     Position on primary meridian of offset coordinate system.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute is used to control the orientation of the offset
-*     coordinate system defined by attributes SkyRef and SkyRefIs. If used, 
-*     it should be set to hold the longitude and latitude of a point within 
-*     the coordinate system specified by the System attribute. The offset 
-*     coordinate system represented by the SkyFrame will then be rotated in 
-*     order to put the position supplied for SkyRefP on the zero longitude 
-*     meridian. This rotation is about an axis from the centre of the 
-*     celestial sphere to the point specified by the SkyRef attribute. 
-*     The default value for SkyRefP is usually the north pole (that is, a 
-*     latitude of +90 degrees in the coordinate system specified by the System 
-*     attribute). The exception to this is if the SkyRef attribute is
-*     itself set to either the north or south pole. In these cases the
-*     default for SkyRefP is the origin (that is, a (0,0) in the coordinate 
-*     system specified by the System attribute).
-*
-*     If an integer axis index is included in the attribute name (e.g.
-*     "SkyRefP(1)") then the attribute value should be supplied as a single 
-*     floating point axis value, in radians, when setting a value for the
-*     attribute, and will be returned in the same form when getting the value 
-*     of the attribute. In this case the integer axis index should be "1"
-*     or "2" (the values to use for longitude and latitue axes are
-*     given by the LonAxis and LatAxis attributes).
-*
-*     If no axis index is included in the attribute name (e.g. "SkyRefP") then 
-*     the attribute value should be supplied as a character string
-*     containing two formatted axis values (an axis 1 value followed by a
-*     comma, followed by an axis 2 value). The same form
-*     will be used when getting the value of the attribute. 
-
-*  Applicability:
-*     SkyFrame
-*        All SkyFrames have this attribute.
-
-*  Notes:
-*     - If the position given by the SkyRef attribute defines the origin
-*     of the offset coordinate system (that is, if the SkyRefIs attribute 
-*     is set to "origin"), then there will in general be two orientations 
-*     which will put the supplied SkyRefP position on the zero longitude
-*     meridian. The orientation which is actually used is the one which
-*     gives the SkyRefP position a positive latitude in the offset coordinate 
-*     system (the other possible orientation would give the SkyRefP position 
-*     a negative latitude).
-*     - An error will be reported if an attempt is made to use a 
-*     SkyRefP value which is co-incident with SkyRef or with the point
-*     diametrically opposite to SkyRef on the celestial sphere. The
-*     reporting of this error is deferred until the SkyRef and SkyRefP 
-*     attribute values are used within a calculation. 
-*     - If the System attribute of the SkyFrame is changed, any position
-*     given for SkyRefP is transformed into the new System.
-
-*att--
-*/
-MAKE_CLEAR(SkyRefP,skyrefp,AST__BAD,2)
-MAKE_SET(SkyRefP,double,skyrefp,value,2)
-MAKE_TEST(SkyRefP,( this->skyrefp[axis_p] != AST__BAD ),2)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SkyFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SkyFrame objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *in;              /* Pointer to input SkyFrame */
-   AstSkyFrame *out;             /* Pointer to output SkyFrame */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SkyFrames. */
-   in = (AstSkyFrame *) objin;
-   out = (AstSkyFrame *) objout;
-
-/* For safety, first clear any references to the input memory from
-   the output SkyFrame. */
-   out->projection = NULL;
-
-/* If necessary, allocate memory in the output SkyFrame and store a
-   copy of the input Projection string. */
-   if ( in->projection ) out->projection = astStore( NULL, in->projection,
-                                      strlen( in->projection ) + (size_t) 1 );
-
-/* If an error occurred, free any allocated memory. */
-   if ( !astOK ) {
-      out->projection = astFree( out->projection );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SkyFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SkyFrame objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to SkyFrame */
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) obj;
-
-/* Free the memory used for the Projection string if necessary. */
-   this->projection = astFree( this->projection );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SkyFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SkyFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SkyFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSkyFrame *this;            /* Pointer to the SkyFrame structure */
-   AstSystemType system;         /* System attribute value */
-   const char *sval;             /* Pointer to string value */
-   char buf[ 100 ];              /* Comment buffer */
-   double dval;                  /* Double value */
-   int bessyr;                   /* Use a Besselian year value ?*/
-   int helpful;                  /* Helpful to display un-set value? */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SkyFrame structure. */
-   this = (AstSkyFrame *) this_object;
-
-/* Write out values representing the instance variables for the
-   SkyFrame class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Projection. */
-/* ----------- */
-   set = TestProjection( this, status );
-   sval = set ? GetProjection( this, status ) : astGetProjection( this );
-   astWriteString( channel, "Proj", set, 0, sval,
-                   "Description of sky projection" );
-
-/* NegLon. */
-/* ------- */
-   set = TestNegLon( this, status );
-   ival = set ? GetNegLon( this, status ) : astGetNegLon( this );
-   astWriteInt( channel, "NegLon", set, 0, ival,
-                ival ? "Display negative longitude values" :
-                       "Display positive longitude values" );
-
-/* Equinox. */
-/* -------- */
-   set = TestEquinox( this, status );
-   dval = set ? GetEquinox( this, status ) : astGetEquinox( this );
-
-/* Decide whether the Equinox value is relevant to the current
-   coordinate system. */
-   system = astGetSystem( this );
-   helpful = ( ( system == AST__FK4 ) ||
-               ( system == AST__FK4_NO_E ) ||
-               ( system == AST__FK5 ) ||
-               ( system == AST__ECLIPTIC ) );
-
-/* Convert MJD to Besselian or Julian years, depending on the value. */
-   bessyr = ( dval < palSlaEpj2d( 1984.0 ) );
-   dval = bessyr ? palSlaEpb( dval ) : palSlaEpj( dval );
-   astWriteDouble( channel, "Eqnox", set, helpful, dval,
-                   bessyr ? "Besselian epoch of mean equinox" :
-                            "Julian epoch of mean equinox" );
-
-/* SkyRefIs. */
-/* --------- */
-   set = TestSkyRefIs( this, status );
-   ival = set ? GetSkyRefIs( this, status ) : astGetSkyRefIs( this );
-   if( ival == POLE_REF ) {
-      astWriteString( channel, "SRefIs", set, 0, POLE_STRING,
-                      "Rotated to put pole at ref. pos." );
-
-   } else if( ival == IGNORED_REF ) {
-      astWriteString( channel, "SRefIs", set, 0, IGNORED_STRING,
-                      "Not rotated (ref. pos. is ignored)" );
-
-   } else {
-      astWriteString( channel, "SRefIs", set, 0, ORIGIN_STRING,
-                      "Rotated to put origin at ref. pos." );
-   }
-
-/* SkyRef. */
-/* ------- */
-   set = TestSkyRef( this, 0, status );
-   dval = set ? GetSkyRef( this, 0, status ) : astGetSkyRef( this, 0 );
-   sprintf( buf, "Ref. pos. %s %s", astGetSymbol( this, 0 ), astFormat( this, 0, dval ) );
-   astWriteDouble( channel, "SRef1", set, 0, dval, buf );
-
-   set = TestSkyRef( this, 1, status );
-   dval = set ? GetSkyRef( this, 1, status ) : astGetSkyRef( this, 1 );
-   sprintf( buf, "Ref. pos. %s %s", astGetSymbol( this, 1 ), astFormat( this, 1, dval ) );
-   astWriteDouble( channel, "SRef2", set, 0, dval, buf );
-
-/* SkyRefP. */
-/* -------- */
-   set = TestSkyRefP( this, 0, status );
-   dval = set ? GetSkyRefP( this, 0, status ) : astGetSkyRefP( this, 0 );
-   sprintf( buf, "Ref. north %s %s", astGetSymbol( this, 0 ), astFormat( this, 0, dval ) );
-   astWriteDouble( channel, "SRefP1", set, 0, dval, buf );
-
-   set = TestSkyRefP( this, 1, status );
-   dval = set ? GetSkyRefP( this, 1, status ) : astGetSkyRefP( this, 1 );
-   sprintf( buf, "Ref. north %s %s", astGetSymbol( this, 1 ), astFormat( this, 1, dval ) );
-   astWriteDouble( channel, "SRefP2", set, 0, dval, buf );
-
-/* AlignOffset. */
-/* ------------ */
-   set = TestAlignOffset( this, status );
-   ival = set ? GetAlignOffset( this, status ) : astGetAlignOffset( this );
-   astWriteInt( channel, "AlOff", set, 0, ival,
-                ival ? "Align in offset coords" :
-                       "Align in system coords" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASkyFrame and astCheckSkyFrame functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SkyFrame,Frame)
-astMAKE_CHECK(SkyFrame)
-
-AstSkyFrame *astSkyFrame_( const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astSkyFrame
-
-*  Purpose:
-*     Create a SkyFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstSkyFrame *astSkyFrame( const char *options, int *status, ... )
-
-*  Class Membership:
-*     SkyFrame constructor.
-
-*  Description:
-*     This function creates a new SkyFrame and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new SkyFrame. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new SkyFrame.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic SkyFrame constructor which
-*     is available via the protected interface to the SkyFrame class.
-*     A public interface is provided by the astSkyFrameId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyFrame *new;             /* Pointer to new SkyFrame */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SkyFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSkyFrame( NULL, sizeof( AstSkyFrame ), !class_init, &class_vtab,
-                          "SkyFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SkyFrame's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SkyFrame. */
-   return new;
-}
-
-AstSkyFrame *astInitSkyFrame_( void *mem, size_t size, int init,
-                               AstSkyFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSkyFrame
-
-*  Purpose:
-*     Initialise a SkyFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstSkyFrame *astInitSkyFrame( void *mem, size_t size, int init,
-*                                   AstFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SkyFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SkyFrame object. It allocates memory (if necessary) to accommodate
-*     the SkyFrame plus any additional data associated with the derived class.
-*     It then initialises a SkyFrame structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a SkyFrame at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SkyFrame is to be created. This
-*        must be of sufficient size to accommodate the SkyFrame data
-*        (sizeof(SkyFrame)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SkyFrame (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the SkyFrame
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the SkyFrame's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SkyFrame.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new SkyFrame.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSkyAxis *ax;               /* Pointer to SkyAxis object */
-   AstSkyFrame *new;             /* Pointer to the new SkyFrame */
-   int axis;                     /* Loop counter for axes */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSkyFrameVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first component
-   within the SkyFrame structure, allocating memory if necessary. */
-   new = (AstSkyFrame *) astInitFrame( mem, size, 0,
-                                       (AstFrameVtab *) vtab, name, 2 );
-
-      if ( astOK ) {
-
-/* Initialise the SkyFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->equinox = AST__BAD;
-      new->projection = NULL;
-      new->neglon = -INT_MAX;
-      new->alignoffset = -INT_MAX;
-      new->skyrefis = BAD_REF;
-      new->skyref[ 0 ] = AST__BAD;
-      new->skyref[ 1 ] = AST__BAD;
-      new->skyrefp[ 0 ] = AST__BAD;
-      new->skyrefp[ 1 ] = AST__BAD;
-      new->last = AST__BAD;
-      new->eplast = AST__BAD;
-      new->klast = AST__BAD;
-      new->diurab = AST__BAD;
-
-/* Loop to replace the Axis object associated with each SkyFrame axis with
-   a SkyAxis object instead. */
-      for ( axis = 0; axis < 2; axis++ ) {
-
-/* Create the new SkyAxis, assign it to the required SkyFrame axis and then
-   annul the SkyAxis pointer. */
-         ax = astSkyAxis( "", status );
-         astSetAxis( new, axis, ax );
-         ax = astAnnul( ax );
-      }
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSkyFrame *astLoadSkyFrame_( void *mem, size_t size,
-                               AstSkyFrameVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSkyFrame
-
-*  Purpose:
-*     Load a SkyFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "skyframe.h"
-*     AstSkyFrame *astLoadSkyFrame( void *mem, size_t size,
-*                                    AstSkyFrameVtab *vtab, const char *name,
-*                                    AstChannel *channel )
-
-*  Class Membership:
-*     SkyFrame loader.
-
-*  Description:
-*     This function is provided to load a new SkyFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SkyFrame structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SkyFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SkyFrame data (sizeof(SkyFrame)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SkyFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SkyFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSkyFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SkyFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the SkyFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SkyFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SkyFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyFrame *new;             /* Pointer to the new SkyFrame */
-   char *sval;                   /* Pointer to string value */
-   double dval;                  /* Floating point attribute value */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SkyFrame. In this case the
-   SkyFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSkyFrame );
-      vtab = &class_vtab;
-      name = "SkyFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSkyFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SkyFrame. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SkyFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* The attributes defining the offset coordinate system must be loaded
-   before the System attrivbute, since SetSystem uses them. */
-
-/* AlignOffset */
-/* ----------- */
-      new->alignoffset = astReadInt( channel, "aloff", -INT_MAX );
-      if ( TestAlignOffset( new, status ) ) SetAlignOffset( new, new->alignoffset, status );
-
-/* SkyRefIs. */
-/* --------- */
-      sval = astReadString( channel, "srefis", " " );
-      if( sval ){
-         new->skyrefis = BAD_REF;
-         if( astChrMatch( sval, POLE_STRING ) ) {
-            new->skyrefis = POLE_REF;
-         } else if( astChrMatch( sval, ORIGIN_STRING ) ) {
-            new->skyrefis = ORIGIN_REF;
-         } else if( astChrMatch( sval, IGNORED_STRING ) ) {
-            new->skyrefis = IGNORED_REF;
-         } else if( !astChrMatch( sval, " " ) && astOK ){
-	    astError( AST__INTER, "astRead(SkyFrame): Corrupt SkyFrame contains "
-		      "invalid SkyRefIs attribute value (%s).", status, sval );
-         }
-         if( TestSkyRefIs( new, status ) ) SetSkyRefIs( new, new->skyrefis, status );
-         sval = astFree( sval );
-      }
-
-/* SkyRef. */
-/* ------- */
-      new->skyref[ 0 ] = astReadDouble( channel, "sref1", AST__BAD );
-      if ( TestSkyRef( new, 0, status ) ) SetSkyRef( new, 0, new->skyref[ 0 ], status );
-
-      new->skyref[ 1 ] = astReadDouble( channel, "sref2", AST__BAD );
-      if ( TestSkyRef( new, 1, status ) ) SetSkyRef( new, 1, new->skyref[ 1 ], status );
-
-/* SkyRefP. */
-/* -------- */
-      new->skyrefp[ 0 ] = astReadDouble( channel, "srefp1", AST__BAD );
-      if ( TestSkyRefP( new, 0, status ) ) SetSkyRefP( new, 0, new->skyrefp[ 0 ], status );
-
-      new->skyrefp[ 1 ] = astReadDouble( channel, "srefp2", AST__BAD );
-      if ( TestSkyRefP( new, 1, status ) ) SetSkyRefP( new, 1, new->skyrefp[ 1 ], status );
-
-
-/* System. */
-/* ------- */
-/* The System attribute is now part of the Frame class, but this code is
-   retained to allow this version of AST to read SkyFrames dumped by
-   previous versions.  */
-
-/* Check a value has not already been assigned to the Frames System
-   attribute.  */
-      if( !astTestSystem( new ) ){
-
-/* Read the external representation as a string. */
-         sval = astReadString( channel, "system", NULL );
- 
-/* If a value was read, use the SetAttrib method to validate and store the 
-   new value in the correct place, then free the string. */
-         if ( sval ) {
-            astSet( new, "System=%s", status, sval);
-            sval = astFree( sval );
-         }
-      }
-
-/* Epoch. */
-/* ------ */
-/* The Epoch attribute is now part of the Frame class, but this code is
-   retained to allow this version of AST to read SkyFrames dumped by
-   previous versions.  */
-
-/* Check a value has not already been assigned to the Frames Epoch
-   attribute.  */
-      if( !astTestEpoch( new ) ){
-
-/* Get the value. */
-         dval = astReadDouble( channel, "epoch", AST__BAD );
-
-/* If a value was read, use the SetAttrib method to validate and store the 
-   new value in the correct place. */
-         if( dval != AST__BAD ) {
-            if( dval < 1984.0 ) {
-               astSet( new, "Epoch=B%.*g", status, DBL_DIG, dval);
-            } else {
-               astSet( new, "Epoch=J%.*g", status, DBL_DIG, dval);
-            }
-         }
-      }
-
-/* Projection. */
-/* ----------- */
-      new->projection = astReadString( channel, "proj", NULL );
-
-/* Equinox. */
-/* -------- */
-/* Interpret this as Besselian or Julian depending on its value. */
-      new->equinox = astReadDouble( channel, "eqnox", AST__BAD );
-      if ( TestEquinox( new, status ) ) {
-         SetEquinox( new, ( new->equinox < 1984.0 ) ? palSlaEpb2d( new->equinox ) :
-                                                      palSlaEpj2d( new->equinox ), status );
-      }
-
-/* NegLon. */
-/* ------- */
-      new->neglon = astReadInt( channel, "neglon", -INT_MAX );
-      if ( TestNegLon( new, status ) ) SetNegLon( new, new->neglon, status );
-
-/* Other values */
-/* ------------ */
-      new->last = AST__BAD;
-      new->eplast = AST__BAD;
-      new->klast = AST__BAD;
-      new->diurab = AST__BAD;
-
-/* If an error occurred, clean up by deleting the new SkyFrame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SkyFrame pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astClearAsTime_( AstSkyFrame *this, int axis, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,SkyFrame,ClearAsTime))( this, axis, status );
-}
-int astGetAsTime_( AstSkyFrame *this, int axis, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,SkyFrame,GetAsTime))( this, axis, status );
-}
-void astSetAsTime_( AstSkyFrame *this, int axis, int value, int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,SkyFrame,SetAsTime))( this, axis, value, status );
-}
-int astTestAsTime_( AstSkyFrame *this, int axis, int *status ) {
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,SkyFrame,TestAsTime))( this, axis, status );
-}
-int astGetLatAxis_( AstSkyFrame *this, int *status ) { 
-   if ( !astOK ) return 1; 
-   return (**astMEMBER(this,SkyFrame,GetLatAxis))( this, status ); 
-}
-int astGetLonAxis_( AstSkyFrame *this, int *status ) { 
-   if ( !astOK ) return 0; 
-   return (**astMEMBER(this,SkyFrame,GetLonAxis))( this, status ); 
-}
-double astGetSkyRefP_( AstSkyFrame *this, int axis, int *status ) { 
-   if ( !astOK ) return 0.0; 
-   return (**astMEMBER(this,SkyFrame,GetSkyRefP))( this, axis, status ); 
-}
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSkyFrame *astSkyFrameId_( const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstSkyFrame *astSkyFrameId_( const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astSkyFrame
-f     AST_SKYFRAME
-
-*  Purpose:
-*     Create a SkyFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "skyframe.h"
-c     AstSkyFrame *astSkyFrame( const char *options, ... )
-f     RESULT = AST_SKYFRAME( OPTIONS, STATUS )
-
-*  Class Membership:
-*     SkyFrame constructor.
-
-*  Description:
-*     This function creates a new SkyFrame and optionally initialises
-*     its attributes.
-*
-*     A SkyFrame is a specialised form of Frame which describes
-*     celestial longitude/latitude coordinate systems. The particular
-*     celestial coordinate system to be represented is specified by
-*     setting the SkyFrame's System attribute (currently, the default
-*     is ICRS) qualified, as necessary, by a mean Equinox value and/or
-*     an Epoch.
-*
-*     For each of the supported celestial coordinate systems, a SkyFrame
-*     can apply an optional shift of origin to create a coordinate system 
-*     representing offsets within the celestial coordinate system from some 
-*     specified point. This offset coordinate system can also be rotated to 
-*     define new longitude and latitude axes. See attributes SkyRef, SkyRefIs 
-*     and SkyRefP
-*
-*     All the coordinate values used by a SkyFrame are in
-*     radians. These may be formatted in more conventional ways for
-c     display by using astFormat.
-f     display by using AST_FORMAT.
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SkyFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SkyFrame. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSkyFrame()
-f     AST_SKYFRAME = INTEGER
-*        A pointer to the new SkyFrame.
-
-*  Examples:
-c     frame = astSkyFrame( "" );
-c        Creates a SkyFrame to describe the default ICRS celestial
-c        coordinate system.
-c     frame = astSkyFrame( "System = FK5, Equinox = J2005, Digits = 10" );
-c        Creates a SkyFrame to describe the FK5 celestial
-c        coordinate system, with a mean Equinox of J2005.0.
-c        Because especially accurate coordinates will be used,
-c        additional precision (10 digits) has been requested. This will
-c        be used when coordinate values are formatted for display.
-c     frame = astSkyFrame( "System = FK4, Equinox = 1955-sep-2" );
-c        Creates a SkyFrame to describe the old FK4 celestial
-c        coordinate system.  A default Epoch value (B1950.0) is used,
-c        but the mean Equinox value is given explicitly as "1955-sep-2".
-c     frame = astSkyFrame( "System = GAPPT, Epoch = %s", date );
-c        Creates a SkyFrame to describe the Geocentric Apparent
-c        celestial coordinate system. The Epoch value, which specifies
-c        the date of observation, is obtained from a date/time string
-c        supplied via the string pointer "date".
-f     FRAME = AST_SKYFRAME( ' ', STATUS )
-f        Creates a SkyFrame to describe the default ICRS celestial
-f        coordinate system.
-f     FRAME = AST_SKYFRAME( 'System = FK5, Equinox = J2005, Digits = 10', STATUS )
-f        Creates a SkyFrame to describe the FK5 celestial
-f        coordinate system, with a mean Equinox of J2005.0.
-f        Because especially accurate coordinates will be used,
-f        additional precision (10 digits) has been requested. This will
-f        be used when coordinate values are formatted for display.
-f     FRAME = AST_SKYFRAME( 'System = FK4, Equinox = 1955-SEP-2', STATUS )
-f        Creates a SkyFrame to describe the old FK4 celestial
-f        coordinate system.  A default Epoch value (B1950.0) is used,
-f        but the mean Equinox value is given explicitly as "1955-SEP-2".
-f     FRAME = AST_SKYFRAME( 'System = GAPPT, Epoch = ' // DATE, STATUS )
-f        Creates a SkyFrame to describe the Geocentric Apparent
-f        celestial coordinate system. The Epoch value, which specifies
-f        the date of observation, is obtained from a date/time string
-f        contained in the character variable DATE.
-
-*  Notes:
-*     - Currently, the default celestial coordinate system is
-*     ICRS. However, this default may change in future as new
-*     astrometric standards evolve. The intention is to track the most
-*     modern appropriate standard. For this reason, you should use the
-*     default only if this is what you intend (and can tolerate any
-*     associated slight change in behaviour with future versions of
-*     this function). If you intend to use the ICRS system
-*     indefinitely, then you should specify it explicitly using an
-c     "options" value of "System=ICRS".
-f     OPTIONS value of "System=ICRS".
-*     - Whichever celestial coordinate system is represented, it will
-*     have two axes.  The first of these will be the longitude axis
-*     and the second will be the latitude axis. This order can be
-c     changed using astPermAxes if required.
-f     changed using AST_PERMAXES if required.
-*     - When conversion between two SkyFrames is requested (as when
-c     supplying SkyFrames to astConvert),
-f     supplying SkyFrames AST_CONVERT),
-*     account will be taken of the nature of the celestial coordinate
-*     systems they represent, together with any qualifying mean Equinox or
-*     Epoch values, etc. The AlignSystem attribute will also be taken into
-*     account. The results will therefore fully reflect the
-*     relationship between positions on the sky measured in the two
-*     systems.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astSkyFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astSkyFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astSkyFrame_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSkyFrame *new;             /* Pointer to new SkyFrame */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SkyFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSkyFrame( NULL, sizeof( AstSkyFrame ), !class_init, &class_vtab,
-                          "SkyFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SkyFrame's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new SkyFrame. */
-   return astMakeId( new );
-}
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/skyframe.h b/ast-5.3-1/skyframe.h
deleted file mode 100644
index c54474f..0000000
--- a/ast-5.3-1/skyframe.h
+++ /dev/null
@@ -1,476 +0,0 @@
-#if !defined( SKYFRAME_INCLUDED ) /* Include this file only once */
-#define SKYFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     skyframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SkyFrame class.
-
-*  Invocation:
-*     #include "skyframe.h"
-
-*  Description:
-*     This include file defines the interface to the SkyFrame class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-
-*  Inheritance:
-*     The SkyFrame class inherits from the Frame class.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSkyFrame
-*           SkyFrame object type.
-
-*     Protected:
-*        AstSkyFrameVtab
-*           SkyFrame virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     4-MAR-1996 (RFWS):
-*        Original version.
-*     24-MAY-1996 (RFWS):
-*        Tidied up, etc.
-*     24-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     16-JUL-1997 (RFWS):
-*        Added Projection attribute.
-*     26-FEB-1998 (RFWS):
-*        Over-ride the astUnformat method.
-*     3-APR-2001 (DSB):
-*        Added "Unknown" option for the System attribute. Added read-only
-*        attributes LatAxis and LonAxis.
-*     10-OCT-2002 (DSB):
-*        Moved definitions of macros for SkyFrame system values into
-*        this file from skyframe.c.
-*     15-NOV-2002 (DSB):
-*        Move the System attribute from this class to the parent (Frame)
-*        class.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitSkyFrameVtab method.
-*     19-APR-2004 (DSB):
-*        Added SkyRef, SkyRefIs, SkyRefP and AlignOffset attributes.
-*        Simplified prologue.
-*     2-DEC-2004 (DSB):
-*        Added System "J2000"
-*     22-FEB-2006 (DSB):
-*        Added Local Apparent Sidereal Time to the SkyFrame structure.
-*     3-OCT-2006 (DSB):
-*        Added Equation of Equinoxes to the SkyFrame structure.
-*     6-OCT-2006 (DSB):
-*        Removed Equation of Equinoxes from the SkyFrame structure.
-*        Added dut1 to the SkyFrame structure.
-*        Added Dut1 accessor methods.
-*     14-OCT-2006 (DSB):
-*        Moved dut1 to the Frame class.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Parent Frame class */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__FK4           1
-#define AST__FK4_NO_E      2
-#define AST__FK5           3
-#define AST__GAPPT         4
-#define AST__ECLIPTIC      5
-#define AST__GALACTIC      6
-#define AST__SUPERGALACTIC 7
-#define AST__ICRS          8
-#define AST__HELIOECLIPTIC 9
-#define AST__J2000         10
-#define AST__UNKNOWN       11
-#define AST__AZEL          12
-
-/* Define constants used to size global arrays in this module. */
-/* Define other numerical constants for use in this module. */
-#define AST__SKYFRAME_GETATTRIB_BUFF_LEN 200   
-#define AST__SKYFRAME_GETFORMAT_BUFF_LEN 50    
-#define AST__SKYFRAME_GETLABEL_BUFF_LEN 40
-#define AST__SKYFRAME_GETSYMBOL_BUFF_LEN 20
-#define AST__SKYFRAME_GETTITLE_BUFF_LEN 200
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Cached LAST look-up table. */
-/* -------------------------- */
-/* Holds a list of epoch values and the corresponding Local Apparent
-   Sidereal Time values. Also holds the observatory position and DUT1
-   value used when calculating the LAST values. */
-typedef struct AstSkyLastTable {
-   double obslat;         /* ObsLat at which LAST values were calculated */
-   double obslon;         /* ObsLon at which LAST values were calculated */
-   double obsalt;         /* ObsAlt at which LAST values were calculated */
-   double dut1;           /* Dut1 values at which LAST values were calculated */
-   int nentry;            /* Number of entries in the epoch and last arrays */
-   double *epoch;         /* Array of epoch values */
-   double *last;          /* Array of LAST values */
-} AstSkyLastTable;
-
-/* SkyFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstSkyFrame {
-
-/* Attributes inherited from the parent class. */
-   AstFrame frame;               /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   char *projection;             /* Description of sky projection */
-   double equinox;               /* Modified Julian Date of mean equinox */
-   int neglon;                   /* Display negative longitude values? */
-   int alignoffset;              /* Align SkyFrame in offset coords? */
-   int skyrefis;                 /* Nature of offset coord system */
-   double skyref[ 2 ];           /* Origin or pole of offset coord system */
-   double skyrefp[ 2 ];          /* Point on primary meridian of offset coord system */
-   double last;                  /* Local Apparent Sidereal Time */
-   double eplast;                /* Epoch used to calculate "last" */
-   double klast;                 /* Ratio of solar to sidereal time */
-   double diurab;                /* Magnitude of diurnal aberration vector */
-} AstSkyFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSkyFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   const char *(* GetProjection)( AstSkyFrame *, int * );
-   double (* GetEquinox)( AstSkyFrame *, int * );
-   int (* GetNegLon)( AstSkyFrame *, int * );
-   int (* GetAsTime)( AstSkyFrame *, int, int * );
-   int (* GetLatAxis)( AstSkyFrame *, int * );
-   int (* GetLonAxis)( AstSkyFrame *, int * );
-   int (* TestAsTime)( AstSkyFrame *, int, int * );
-   int (* TestEquinox)( AstSkyFrame *, int * );
-   int (* TestNegLon)( AstSkyFrame *, int * );
-   int (* TestProjection)( AstSkyFrame *, int * );
-   void (* ClearAsTime)( AstSkyFrame *, int, int * );
-   void (* ClearEquinox)( AstSkyFrame *, int * );
-   void (* ClearNegLon)( AstSkyFrame *, int * );
-   void (* ClearProjection)( AstSkyFrame *, int * );
-   void (* SetAsTime)( AstSkyFrame *, int, int, int * );
-   void (* SetEquinox)( AstSkyFrame *, double, int * );
-   void (* SetNegLon)( AstSkyFrame *, int, int * );
-   void (* SetProjection)( AstSkyFrame *, const char *, int * );
-
-   int (* GetSkyRefIs)( AstSkyFrame *, int * );
-   int (* TestSkyRefIs)( AstSkyFrame *, int * );
-   void (* ClearSkyRefIs)( AstSkyFrame *, int * );
-   void (* SetSkyRefIs)( AstSkyFrame *, int, int * );
-
-   double (* GetSkyRef)( AstSkyFrame *, int, int * );
-   int (* TestSkyRef)( AstSkyFrame *, int, int * );
-   void (* ClearSkyRef)( AstSkyFrame *, int, int * );
-   void (* SetSkyRef)( AstSkyFrame *, int, double, int * );
-
-   double (* GetSkyRefP)( AstSkyFrame *, int, int * );
-   int (* TestSkyRefP)( AstSkyFrame *, int, int * );
-   void (* ClearSkyRefP)( AstSkyFrame *, int, int * );
-   void (* SetSkyRefP)( AstSkyFrame *, int, double, int * );
-
-   int (* GetAlignOffset)( AstSkyFrame *, int * );
-   int (* TestAlignOffset)( AstSkyFrame *, int * );
-   void (* ClearAlignOffset)( AstSkyFrame *, int * );
-   void (* SetAlignOffset)( AstSkyFrame *, int, int * );
-
-/* Local Apparent Sidereal Time look-up tables. */
-   int nlast_tables;
-   AstSkyLastTable **last_tables;
-
-} AstSkyFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* The AstSkyFrameGlobals structure makes a forward reference to the
-   AstTimeFrame structure which is not defined here (since the
-   timeframe.h file includes skyframe.h). Hence make a preliminary 
-   definition available now. */
-struct AstTimeFrame;
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstSkyFrameGlobals {
-   AstSkyFrameVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__SKYFRAME_GETATTRIB_BUFF_LEN + 1 ];
-   char GetFormat_Buff[ AST__SKYFRAME_GETFORMAT_BUFF_LEN + 1 ];
-   char GetLabel_Buff[ AST__SKYFRAME_GETLABEL_BUFF_LEN + 1 ];
-   char GetSymbol_Buff[ AST__SKYFRAME_GETSYMBOL_BUFF_LEN + 1 ];
-   char GetTitle_Buff[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ];
-   char GetTitle_Buff2[ AST__SKYFRAME_GETTITLE_BUFF_LEN + 1 ];
-   struct AstTimeFrame *TDBFrame;
-   struct AstTimeFrame *LASTFrame;
-} AstSkyFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SkyFrame)         /* Check class membership */
-astPROTO_ISA(SkyFrame)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstSkyFrame *astSkyFrame_( const char *, int *, ...);
-#else
-AstSkyFrame *astSkyFrameId_( const char *, ... )__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSkyFrame *astInitSkyFrame_( void *, size_t, int, AstSkyFrameVtab *,
-                               const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSkyFrameVtab_( AstSkyFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstSkyFrame *astLoadSkyFrame_( void *, size_t, AstSkyFrameVtab *,
-                               const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitSkyFrameGlobals_( AstSkyFrameGlobals * );
-#endif
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS)            /* Protected */
-const char *astGetProjection_( AstSkyFrame *, int * );
-double astGetEquinox_( AstSkyFrame *, int * );
-int astGetNegLon_( AstSkyFrame *, int * );
-int astGetAsTime_( AstSkyFrame *, int, int * );
-int astGetLatAxis_( AstSkyFrame *, int * );
-int astGetLonAxis_( AstSkyFrame *, int * );
-int astTestAsTime_( AstSkyFrame *, int, int * );
-int astTestEquinox_( AstSkyFrame *, int * );
-int astTestNegLon_( AstSkyFrame *, int * );
-int astTestProjection_( AstSkyFrame *, int * );
-void astClearAsTime_( AstSkyFrame *, int, int * );
-void astClearEquinox_( AstSkyFrame *, int * );
-void astClearNegLon_( AstSkyFrame *, int * );
-void astClearProjection_( AstSkyFrame *, int * );
-void astSetAsTime_( AstSkyFrame *, int, int, int * );
-void astSetEquinox_( AstSkyFrame *, double, int * );
-void astSetNegLon_( AstSkyFrame *, int, int * );
-void astSetProjection_( AstSkyFrame *, const char *, int * );
-
-int astGetAlignOffset_( AstSkyFrame *, int * );
-int astTestAlignOffset_( AstSkyFrame *, int * );
-void astClearAlignOffset_( AstSkyFrame *, int * );
-void astSetAlignOffset_( AstSkyFrame *, int, int * );
-
-int astGetSkyRefIs_( AstSkyFrame *, int * );
-int astTestSkyRefIs_( AstSkyFrame *, int * );
-void astClearSkyRefIs_( AstSkyFrame *, int * );
-void astSetSkyRefIs_( AstSkyFrame *, int, int * );
-
-double astGetSkyRef_( AstSkyFrame *, int, int * );
-int astTestSkyRef_( AstSkyFrame *, int, int * );
-void astClearSkyRef_( AstSkyFrame *, int, int * );
-void astSetSkyRef_( AstSkyFrame *, int, double, int * );
-
-double astGetSkyRefP_( AstSkyFrame *, int, int * );
-int astTestSkyRefP_( AstSkyFrame *, int, int * );
-void astClearSkyRefP_( AstSkyFrame *, int, int * );
-void astSetSkyRefP_( AstSkyFrame *, int, double, int * );
-
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSkyFrame(this) astINVOKE_CHECK(SkyFrame,this,0)
-#define astVerifySkyFrame(this) astINVOKE_CHECK(SkyFrame,this,1)
-
-/* Test class membership. */
-#define astIsASkyFrame(this) astINVOKE_ISA(SkyFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astSkyFrame astINVOKE(F,astSkyFrame_)
-#else
-#define astSkyFrame astINVOKE(F,astSkyFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSkyFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSkyFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSkyFrameVtab(vtab,name) astINVOKE(V,astInitSkyFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSkyFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSkyFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckSkyFrame to validate SkyFrame pointers
-   before use. This provides a contextual error report if a pointer to
-   the wrong sort of object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astClearAsTime(this,axis) \
-astINVOKE(V,astClearAsTime_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astClearEquinox(this) \
-astINVOKE(V,astClearEquinox_(astCheckSkyFrame(this),STATUS_PTR))
-#define astClearNegLon(this) \
-astINVOKE(V,astClearNegLon_(astCheckSkyFrame(this),STATUS_PTR))
-#define astClearProjection(this) \
-astINVOKE(V,astClearProjection_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetAsTime(this,axis) \
-astINVOKE(V,astGetAsTime_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astGetEquinox(this) \
-astINVOKE(V,astGetEquinox_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetNegLon(this) \
-astINVOKE(V,astGetNegLon_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetLatAxis(this) \
-astINVOKE(V,astGetLatAxis_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetLonAxis(this) \
-astINVOKE(V,astGetLonAxis_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetProjection(this) \
-astINVOKE(V,astGetProjection_(astCheckSkyFrame(this),STATUS_PTR))
-#define astSetAsTime(this,axis,value) \
-astINVOKE(V,astSetAsTime_(astCheckSkyFrame(this),axis,value,STATUS_PTR))
-#define astSetEquinox(this,value) \
-astINVOKE(V,astSetEquinox_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astSetNegLon(this,value) \
-astINVOKE(V,astSetNegLon_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astSetProjection(this,value) \
-astINVOKE(V,astSetProjection_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astTestAsTime(this,axis) \
-astINVOKE(V,astTestAsTime_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astTestEquinox(this) \
-astINVOKE(V,astTestEquinox_(astCheckSkyFrame(this),STATUS_PTR))
-#define astTestNegLon(this) \
-astINVOKE(V,astTestNegLon_(astCheckSkyFrame(this),STATUS_PTR))
-#define astTestProjection(this) \
-astINVOKE(V,astTestProjection_(astCheckSkyFrame(this),STATUS_PTR))
-
-#define astClearAlignOffset(this) astINVOKE(V,astClearAlignOffset_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetAlignOffset(this) astINVOKE(V,astGetAlignOffset_(astCheckSkyFrame(this),STATUS_PTR))
-#define astSetAlignOffset(this,value) astINVOKE(V,astSetAlignOffset_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astTestAlignOffset(this) astINVOKE(V,astTestAlignOffset_(astCheckSkyFrame(this),STATUS_PTR))
-
-#define astClearSkyRefIs(this) astINVOKE(V,astClearSkyRefIs_(astCheckSkyFrame(this),STATUS_PTR))
-#define astGetSkyRefIs(this) astINVOKE(V,astGetSkyRefIs_(astCheckSkyFrame(this),STATUS_PTR))
-#define astSetSkyRefIs(this,value) astINVOKE(V,astSetSkyRefIs_(astCheckSkyFrame(this),value,STATUS_PTR))
-#define astTestSkyRefIs(this) astINVOKE(V,astTestSkyRefIs_(astCheckSkyFrame(this),STATUS_PTR))
-
-#define astClearSkyRef(this,axis) astINVOKE(V,astClearSkyRef_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astGetSkyRef(this,axis) astINVOKE(V,astGetSkyRef_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astSetSkyRef(this,axis,value) astINVOKE(V,astSetSkyRef_(astCheckSkyFrame(this),axis,value,STATUS_PTR))
-#define astTestSkyRef(this,axis) astINVOKE(V,astTestSkyRef_(astCheckSkyFrame(this),axis,STATUS_PTR))
-
-#define astClearSkyRefP(this,axis) astINVOKE(V,astClearSkyRefP_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astGetSkyRefP(this,axis) astINVOKE(V,astGetSkyRefP_(astCheckSkyFrame(this),axis,STATUS_PTR))
-#define astSetSkyRefP(this,axis,value) astINVOKE(V,astSetSkyRefP_(astCheckSkyFrame(this),axis,value,STATUS_PTR))
-#define astTestSkyRefP(this,axis) astINVOKE(V,astTestSkyRefP_(astCheckSkyFrame(this),axis,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/slamac.h b/ast-5.3-1/slamac.h
deleted file mode 100644
index 05aa654..0000000
--- a/ast-5.3-1/slamac.h
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef SLAMACHDEF
-#define SLAMACHDEF
-/*
-**  Author:
-**    Patrick Wallace  (ptw at tpsoft.demon.co.uk)
-**
-**  License:
-**    This program is free software; you can redistribute it and/or modify
-**    it under the terms of the GNU General Public License as published by
-**    the Free Software Foundation; either version 2 of the License, or
-**    (at your option) any later version.
-**
-**    This program is distributed in the hope that it will be useful,
-**    but WITHOUT ANY WARRANTY; without even the implied warranty of
-**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**    GNU General Public License for more details.
-**
-**    You should have received a copy of the GNU General Public License
-**    along with this program; if not, write to the Free Software 
-**    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  
-**    USA.
-**
-**  Last revision:   16 October 2000
-*/
-
-/* max(A,B) - larger (most +ve) of two numbers (generic) */
-#define gmax(A,B) ((A)>(B)?(A):(B))
-
-/* min(A,B) - smaller (least +ve) of two numbers (generic) */
-#define gmin(A,B) ((A)<(B)?(A):(B))
-
-/* dint(A) - truncate to nearest whole number towards zero (double) */
-#define dint(A) ((A)<0.0?ceil(A):floor(A))
-
-/* aint(A) - truncate to nearest whole number towards zero (float) */
-#define aint(A) ((A)<0.0f?(float)ceil((double)(A)):(float)floor((double)(A)))
-
-/* dnint(A) - round to nearest whole number (double) */
-#define dnint(A) ((A)<0.0?ceil((A)-0.5):floor((A)+0.5))
-
-/* anint(A) - round to nearest whole number (float) */
-#define anint(A) ((float)dnint((double)(A)))
-
-/* dsign(A,B) - magnitude of A with sign of B (double) */
-#define dsign(A,B) ((B)<0.0?-(A):(A))
-
-/* dmod(A,B) - A modulo B (double) */
-#define dmod(A,B) ((B)!=0.0?((A)*(B)>0.0?(A)-(B)*floor((A)/(B))\
-                                        :(A)+(B)*floor(-(A)/(B))):(A))
-
-/* logicals */
-#if !defined(FALSE) || ((FALSE)!=0)
-#define FALSE 0
-#endif
-#if !defined(TRUE) || ((TRUE)!=1)
-#define TRUE 1
-#endif
-
-/* pi */
-#define DPI 3.1415926535897932384626433832795028841971693993751
-
-/* 2pi */
-#define D2PI 6.2831853071795864769252867665590057683943387987502
-
-/* 1/(2pi) */
-#define D1B2PI 0.15915494309189533576888376337251436203445964574046
-
-/* 4pi */
-#define D4PI 12.566370614359172953850573533118011536788677597500
-
-/* 1/(4pi) */
-#define D1B4PI 0.079577471545947667884441881686257181017229822870228
-
-/* pi^2 */
-#define DPISQ 9.8696044010893586188344909998761511353136994072408
-
-/* sqrt(pi) */
-#define DSQRPI 1.7724538509055160272981674833411451827975494561224
-
-/* pi/2:  90 degrees in radians */
-#define DPIBY2 1.5707963267948966192313216916397514420985846996876
-
-/* pi/180:  degrees to radians */
-#define DD2R 0.017453292519943295769236907684886127134428718885417
-
-/* 180/pi:  radians to degrees */
-#define DR2D 57.295779513082320876798154814105170332405472466564
-
-/* pi/(180*3600):  arcseconds to radians */
-#define DAS2R 4.8481368110953599358991410235794797595635330237270e-6
-
-/* 180*3600/pi :  radians to arcseconds */
-#define DR2AS 2.0626480624709635515647335733077861319665970087963e5
-
-/* pi/12:  hours to radians */
-#define DH2R 0.26179938779914943653855361527329190701643078328126
-
-/* 12/pi:  radians to hours */
-#define DR2H 3.8197186342054880584532103209403446888270314977709
-
-/* pi/(12*3600):  seconds of time to radians */
-#define DS2R 7.2722052166430399038487115353692196393452995355905e-5
-
-/* 12*3600/pi:  radians to seconds of time */
-#define DR2S 1.3750987083139757010431557155385240879777313391975e4
-
-/* 15/(2pi):  hours to degrees x radians to turns */
-#define D15B2P 2.3873241463784300365332564505877154305168946861068
-
-#endif
diff --git a/ast-5.3-1/slamap.c b/ast-5.3-1/slamap.c
deleted file mode 100644
index 0090c45..0000000
--- a/ast-5.3-1/slamap.c
+++ /dev/null
@@ -1,4840 +0,0 @@
-/*
-*class++
-*  Name:
-*     SlaMap
-
-*  Purpose:
-*     Sequence of celestial coordinate conversions.
-
-*  Constructor Function:
-c     astSlaMap (also see astSlaAdd)
-f     AST_SLAMAP (also see AST_SLAADD)
-
-*  Description:
-*     An SlaMap is a specialised form of Mapping which can be used to
-*     represent a sequence of conversions between standard celestial
-*     (longitude, latitude) coordinate systems.
-*
-*     When an SlaMap is first created, it simply performs a unit
-c     (null) Mapping on a pair of coordinates. Using the astSlaAdd
-f     (null) Mapping on a pair of coordinates. Using the AST_SLAADD
-c     function, a series of coordinate conversion steps may then be
-f     routine, a series of coordinate conversion steps may then be
-*     added, selected from those provided by the SLALIB Positional
-*     Astronomy Library (Starlink User Note SUN/67). This allows
-*     multi-step conversions between a variety of celestial coordinate
-*     systems to be assembled out of the building blocks provided by
-*     SLALIB.
-*
-*     For details of the individual coordinate conversions available,
-c     see the description of the astSlaAdd function.
-f     see the description of the AST_SLAADD routine.
-
-*  Inheritance:
-*     The SlaMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The SlaMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     In addition to those functions applicable to all Mappings, the
-c     following function may also be applied to all SlaMaps:
-f     In addition to those routines applicable to all Mappings, the
-f     following routine may also be applied to all SlaMaps:
-*
-c     - astSlaAdd: Add a celestial coordinate conversion to an SlaMap
-f     - AST_SLAADD: Add a celestial coordinate conversion to an SlaMap
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     25-APR-1996 (RFWS):
-*        Original version.
-*     28-MAY-1996 (RFWS):
-*        Fixed bug in argument order to palSlaMappa for AST__SLA_AMP case.
-*     26-SEP-1996 (RFWS):
-*        Added external interface and I/O facilities.
-*     23-MAY-1997 (RFWS):
-*        Over-ride the astMapMerge method.
-*     28-MAY-1997 (RFWS):
-*        Use strings to specify conversions for the public interface
-*        and convert to macros (from an enumerated type) for the
-*        internal representation. Tidy the public prologues.
-*     8-JAN-2003 (DSB):
-*        - Changed private InitVtab method to protected astInitSlaMapVtab
-*        method.
-*        - Included STP conversion functions.
-*     11-JUN-2003 (DSB):
-*        - Added HFK5Z and FK5HZ conversion functions.
-*     28-SEP-2003 (DSB):
-*        - Added HEEQ and EQHE conversion functions.
-*     2-DEC-2004 (DSB):
-*        - Added J2000H and HJ2000 conversion functions.
-*     15-AUG-2005 (DSB):
-*        - Added H2E and E2H conversion functions.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     22-FEB-2006 (DSB):
-*        Cache results returned by palSlaMappa in order to increase speed.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*     31-AUG-2007 (DSB):
-*        - Modify H2E and E2H conversion functions so that they convert to
-*        and from apparent (HA,Dec) rather than topocentric (HA,Dec) (i.e. 
-*        include a correction for diurnal aberration). This requires an
-*        extra conversion argument holding the magnitude of the diurnal 
-*        aberration vector.
-*        - Correct bug in the simplification of adjacent AMP and MAP
-*        conversions.
-
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SlaMap
-
-/* Codes to identify SLALIB sky coordinate conversions. */
-#define AST__SLA_NULL    0       /* Null value */
-#define AST__SLA_ADDET   1       /* Add E-terms of aberration */
-#define AST__SLA_SUBET   2       /* Subtract E-terms of aberration */
-#define AST__SLA_PREBN   3       /* Bessel-Newcomb (FK4) precession */
-#define AST__SLA_PREC    4       /* Apply IAU 1975 (FK5) precession model */
-#define AST__SLA_FK45Z   5       /* FK4 to FK5, no proper motion or parallax */
-#define AST__SLA_FK54Z   6       /* FK5 to FK4, no proper motion or parallax */
-#define AST__SLA_AMP     7       /* Geocentric apparent to mean place */
-#define AST__SLA_MAP     8       /* Mean place to geocentric apparent */
-#define AST__SLA_ECLEQ   9       /* Ecliptic to J2000.0 equatorial */
-#define AST__SLA_EQECL  10       /* Equatorial J2000.0 to ecliptic */
-#define AST__SLA_GALEQ  11       /* Galactic to J2000.0 equatorial */
-#define AST__SLA_EQGAL  12       /* J2000.0 equatorial to galactic */
-#define AST__SLA_GALSUP 13       /* Galactic to supergalactic */
-#define AST__SLA_SUPGAL 14       /* Supergalactic to galactic */
-#define AST__HPCEQ      15       /* Helioprojective-Cartesian to J2000.0 equatorial */
-#define AST__EQHPC      16       /* J2000.0 equatorial to Helioprojective-Cartesian */
-#define AST__HPREQ      17       /* Helioprojective-Radial to J2000.0 equatorial */
-#define AST__EQHPR      18       /* J2000.0 equatorial to Helioprojective-Radial */
-#define AST__SLA_HFK5Z  19       /* ICRS to FK5 J2000.0, no pm or parallax */
-#define AST__SLA_FK5HZ  20       /* FK5 J2000.0 to ICRS, no pm or parallax */
-#define AST__HEEQ       21       /* Helio-ecliptic to equatorial */
-#define AST__EQHE       22       /* Equatorial to helio-ecliptic */
-#define AST__J2000H     23       /* Dynamical J2000 to ICRS */
-#define AST__HJ2000     24       /* ICRS to dynamical J2000 */
-#define AST__SLA_DH2E   25       /* Horizon to equatorial coordinates */
-#define AST__SLA_DE2H   26       /* Equatorial coordinates to horizon */
-#define AST__R2H        27       /* RA to hour angle */
-#define AST__H2R        28       /* Hour to RA angle */
-
-/* Maximum number of arguments required by an SLALIB conversion. */
-#define MAX_SLA_ARGS 4
-
-/* The alphabet (used for generating keywords for arguments). */
-#define ALPHABET "abcdefghijklmnopqrstuvwxyz"
-
-/* Angle conversion (PI is from the SLALIB slamac.h file) */
-#define PI 3.1415926535897932384626433832795028841971693993751
-#define PIBY2 (PI/2.0)
-#define D2R (PI/180.0)
-#define R2D (180.0/PI)
-#define AS2R (PI/648000.0)
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h"              /* SLALIB interface */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "unitmap.h"             /* Unit (null) Mappings */
-#include "slamap.h"              /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->Eq_Cache = AST__BAD; \
-   globals->Ep_Cache = AST__BAD; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SlaMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SlaMap,Class_Init)
-#define class_vtab astGLOBAL(SlaMap,Class_Vtab)
-#define eq_cache astGLOBAL(SlaMap,Eq_Cache)
-#define ep_cache astGLOBAL(SlaMap,Ep_Cache)
-#define amprms_cache astGLOBAL(SlaMap,Amprms_Cache)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* A cache used to store the most recent results from palSlaMappa in order
-   to avoid continuously recalculating the same values. */
-static double eq_cache = AST__BAD;
-static double ep_cache = AST__BAD;
-static double amprms_cache[ 21 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSlaMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSlaMap *astSlaMapId_( int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *CvtString( int, const char **, int *, const char *[ MAX_SLA_ARGS ], int * );
-static int CvtCode( const char *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void AddSlaCvt( AstSlaMap *, int, const double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Earth( double, double[3], int * );
-static void SlaAdd( AstSlaMap *, const char *, const double[], int * );
-static void SolarPole( double, double[3], int * );
-static void Hpcc( double, double[3], double[3][3], double[3], int * );
-static void Hprc( double, double[3], double[3][3], double[3], int * );
-static void Hgc( double, double[3][3], double[3], int * );
-static void Haec( double, double[3][3], double[3], int * );
-static void Haqc( double, double[3][3], double[3], int * );
-static void Gsec( double, double[3][3], double[3], int * );
-static void STPConv( double, int, int, int, double[3], double *[3], int, double[3], double *[3], int * );
-static void J2000H( int, int, double *, double *, int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two SlaMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     SlaMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two SlaMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a SlaMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the SlaMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSlaMap *that;        
-   AstSlaMap *this;        
-   const char *argdesc[ MAX_SLA_ARGS ]; 
-   const char *comment;      
-   int i, j;           
-   int nargs;                
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two SlaMap structures. */
-   this = (AstSlaMap *) this_object;
-   that = (AstSlaMap *) that_object;
-
-/* Check the second object is a SlaMap. We know the first is a
-   SlaMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsASlaMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two SlaMaps differ, it may still be possible 
-   for them to be equivalent. First compare the SlaMaps if their Invert 
-   flags are the same. In this case all the attributes of the two SlaMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-            if( this->ncvt == that->ncvt ) {
-               result = 1;
-               for( i = 0; i < this->ncvt && result; i++ ) {
-                  if( this->cvttype[ i ] != that->cvttype[ i ] ) {
-                     result = 0;
-                  } else {
-                     CvtString( this->cvttype[ i ], &comment, &nargs, 
-                                argdesc, status );
-                     for( j = 0; j < nargs; j++ ) {
-                        if( !astEQUAL( this->cvtargs[ i ][ j ],
-                                       that->cvtargs[ i ][ j ] ) ){
-                           result = 0;
-                           break;
-                        }
-                     }
-                  }
-               }
-            }
-
-/* If the Invert flags for the two SlaMaps differ, the attributes of the two 
-   SlaMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a SlaMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SlaMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SlaMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SlaMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSlaMap *this;         /* Pointer to SlaMap structure */
-   int result;              /* Result value to return */
-   int cvt;                 /* Loop counter for coordinate conversions */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SlaMap structure. */
-   this = (AstSlaMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
-      result += astTSizeOf( this->cvtargs[ cvt ] );
-      result += astTSizeOf( this->cvtextra[ cvt ] );
-   }
-
-   result += astTSizeOf( this->cvtargs );
-   result += astTSizeOf( this->cvtextra );
-   result += astTSizeOf( this->cvttype );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void AddSlaCvt( AstSlaMap *this, int cvttype, const double *args, int *status ) {
-/*
-*  Name:
-*     AddSlaCvt
-
-*  Purpose:
-*     Add a coordinate conversion step to an SlaMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void AddSlaCvt( AstSlaMap *this, int cvttype, const double *args )
-
-*  Class Membership:
-*     SlaMap member function.
-
-*  Description:
-*     This function allows one of the sky coordinate conversions
-*     supported by SLALIB to be appended to an SlaMap. When an SlaMap
-*     is first created (using astSlaMap), it simply performs a unit
-*     mapping. By using AddSlaCvt repeatedly, a series of sky
-*     coordinate conversions may then be specified which the SlaMap
-*     will subsequently perform in sequence. This allows a complex
-*     coordinate conversion to be assembled out of the basic building
-*     blocks provided by SLALIB. The SlaMap will also perform the
-*     inverse coordinate conversion (applying the individual
-*     conversion steps in reverse) if required.
-
-*  Parameters:
-*     this
-*        Pointer to the SlaMap.
-*     cvttype
-*        A code to identify which sky coordinate conversion is to be
-*        appended.  See the "SLALIB Coordinate Conversions" section
-*        for details of those available.
-*     args
-*        Pointer to an array of double containing the argument values
-*        required to fully specify the required coordinate
-*        conversion. The number of arguments depends on the conversion
-*        (see the "SLALIB Coordinate Conversions" section for
-*        details). This value is ignored and may be NULL if no
-*        arguments are required.
-
-*  Returned Value:
-*     void.
-
-*  SLALIB Coordinate Conversions:
-*     The following values may be supplied for the "cvttype" parameter
-*     in order to specify the sky coordinate conversion to be
-*     performed. In each case the value is named after the SLALIB
-*     routine that performs the conversion, and the relevant SLALIB
-*     documentation should be consulted for full details.
-*
-*     The argument(s) required to fully specify each conversion are
-*     indicated in parentheses after each value. Values for these
-*     should be given in the array pointed at by "args". The argument
-*     names given match the corresponding SLALIB function arguments
-*     (in the Fortran 77 documentation - SUN/67) and their values
-*     should be given using the same units, time scale, calendar,
-*     etc. as in SLALIB.
-*
-*        AST__SLA_ADDET( EQ )
-*           Add E-terms of aberration.
-*        AST__SLA_SUBET( EQ )
-*           Subtract E-terms of aberration.
-*        AST__SLA_PREBN( BEP0, BEP1 )
-*           Apply Bessel-Newcomb pre-IAU 1976 (FK4) precession model.
-*        AST__SLA_PREC( EP0, EP1 )
-*           Apply IAU 1975 (FK5) precession model.
-*        AST__SLA_FK45Z( BEPOCH )
-*           Convert FK4 to FK5 (no proper motion or parallax).
-*        AST__SLA_FK54Z( BEPOCH )
-*           Convert FK5 to FK4 (no proper motion or parallax).
-*        AST__SLA_AMP( DATE, EQ )
-*           Convert geocentric apparent to mean place.
-*        AST__SLA_MAP( EQ, DATE )
-*           Convert mean place to geocentric apparent.
-*        AST__SLA_ECLEQ( DATE )
-*           Convert ecliptic coordinates to J2000.0 equatorial.
-*        AST__SLA_EQECL( DATE )
-*           Convert equatorial J2000.0 to ecliptic coordinates.
-*        AST__SLA_GALEQ( )
-*           Convert galactic coordinates to J2000.0 equatorial.
-*        AST__SLA_EQGAL( )
-*           Convert J2000.0 equatorial to galactic coordinates.
-*        AST__SLA_HFK5Z( JEPOCH )
-*           Convert ICRS coordinates to J2000.0 equatorial (no proper
-*           motion or parallax).
-*        AST__SLA_FK5HZ( JEPOCH )
-*           Convert J2000.0 equatorial to ICRS coordinates (no proper
-*           motion or parallax).
-*        AST__SLA_GALSUP( )
-*           Convert galactic to supergalactic coordinates.
-*        AST__SLA_SUPGAL( )
-*           Convert supergalactic coordinates to galactic.
-*        AST__HPCEQ( DATE, OBSX, OBSY, OBSZ )
-*           Convert Helioprojective-Cartesian coordinates to J2000.0 
-*           equatorial. This is not a native SLALIB conversion, but is
-*           implemented by functions within this module. The DATE argument
-*           is the MJD defining the HPC coordinate system. The OBSX, OBSY
-*           and OBSZ arguments are the AST__HAEC coordinates of the observer.
-*        AST__EQHPC( DATE, OBSX, OBSY, OBSZ )
-*           Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-*        AST__HPREQ( DATE, OBSX, OBSY, OBSZ )
-*           Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-*        AST__EQHPR( DATE, OBSX, OBSY, OBSZ )
-*           Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-*        AST__HEEQ( DATE )
-*           Convert helio-ecliptic to ecliptic coordinates.
-*        AST__EQHE( DATE )
-*           Convert ecliptic to helio-ecliptic coordinates.
-*        AST__J2000H( )
-*           Convert dynamical J2000 to ICRS.
-*        AST__HJ2000( )
-*           Convert ICRS to dynamical J2000.
-*        AST__SLA_DH2E( LAT, DIURAB )
-*           Convert horizon to equatorial coordinates
-*        AST__SLA_DE2H( LAT, DIURAB )
-*           Convert equatorial to horizon coordinates
-*        AST__R2H( LAST )
-*           Convert RA to Hour Angle.
-*        AST__H2R( LAST )
-*           Convert Hour Angle to RA.
-
-*  Notes:
-*     - The specified conversion is appended only if the SlaMap's
-*     Invert attribute is zero. If it is non-zero, this function
-*     effectively prefixes the inverse of the conversion specified
-*     instead.
-*     - Sky coordinate values are in radians (as for SLALIB) and all
-*     conversions are performed using double arithmetic.
-*/
-
-/* Local Variables: */
-   const char *argdesc[ MAX_SLA_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   const char *cvt_string;       /* Pointer to conversion type string */
-   int nargs;                    /* Number of arguments */
-   int ncvt;                     /* Number of coordinate conversions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the coordinate conversion type and obtain the number of
-   required arguments. */
-   cvt_string = CvtString( cvttype, &comment, &nargs, argdesc, status );
-
-/* If the sky coordinate conversion type was not valid, then report an
-   error. */
-   if ( astOK && !cvt_string ) {
-      astError( AST__SLAIN, "AddSlaCvt(%s): Invalid SLALIB sky coordinate "
-                "conversion type (%d).", status, astGetClass( this ), 
-                (int) cvttype );
-   }
-
-/* Note the number of coordinate conversions already stored in the SlaMap. */
-   if ( astOK ) {
-      ncvt = this->ncvt;
-
-/* Extend the array of conversion types and the array of pointers to
-   their argument lists to accommodate the new one. */
-      this->cvttype = (int *) astGrow( this->cvttype, ncvt + 1,
-                                       sizeof( int ) );
-      this->cvtargs = (double **) astGrow( this->cvtargs, ncvt + 1,
-                                           sizeof( double * ) );
-      this->cvtextra = (double **) astGrow( this->cvtextra, ncvt + 1,
-                                           sizeof( double * ) );
-
-/* If OK, allocate memory and store a copy of the argument list,
-   putting a pointer to the copy into the SlaMap. */
-      if ( astOK ) {
-         this->cvtargs[ ncvt ] = astStore( NULL, args,
-                                           sizeof( double ) * (size_t) nargs );
-         this->cvtextra[ ncvt ] = NULL;
-      }
-
-/* Store the conversion type and increment the conversion count. */
-      if ( astOK ) {
-         this->cvttype[ ncvt ] = cvttype;
-         this->ncvt++;
-      }
-   }
-}
-
-static int CvtCode( const char *cvt_string, int *status ) {
-/*
-*  Name:
-*     CvtCode
-
-*  Purpose:
-*     Convert a conversion type from a string representation to a code value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     int CvtCode( const char *cvt_string, int *status )
-
-*  Class Membership:
-*     SlaMap member function.
-
-*  Description:
-*     This function accepts a string used to repersent one of the
-*     SLALIB sky coordinate conversions and converts it into a code
-*     value for internal use.
-
-*  Parameters:
-*     cvt_string
-*        Pointer to a constant null-terminated string representing a
-*        sky coordinate conversion. This is case sensitive and should
-*        contain no unnecessary white space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The equivalent conversion code. If the string was not
-*     recognised, the code AST__SLA_NULL is returned, without error.
-
-*  Notes:
-*     - A value of AST__SLA_NULL will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = AST__SLA_NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Test the string against each recognised value in turn and assign
-   the result. */
-   if ( astChrMatch( cvt_string, "ADDET" ) ) {
-      result = AST__SLA_ADDET;
-
-   } else if ( astChrMatch( cvt_string, "SUBET" ) ) {
-      result = AST__SLA_SUBET;
-
-   } else if ( astChrMatch( cvt_string, "PREBN" ) ) {
-      result = AST__SLA_PREBN;
-
-   } else if ( astChrMatch( cvt_string, "PREC" ) ) {
-      result = AST__SLA_PREC;
-
-   } else if ( astChrMatch( cvt_string, "FK45Z" ) ) {
-      result = AST__SLA_FK45Z;
-
-   } else if ( astChrMatch( cvt_string, "FK54Z" ) ) {
-      result = AST__SLA_FK54Z;
-
-   } else if ( astChrMatch( cvt_string, "AMP" ) ) {
-      result = AST__SLA_AMP;
-
-   } else if ( astChrMatch( cvt_string, "MAP" ) ) {
-      result = AST__SLA_MAP;
-
-   } else if ( astChrMatch( cvt_string, "ECLEQ" ) ) {
-      result = AST__SLA_ECLEQ;
-
-   } else if ( astChrMatch( cvt_string, "EQECL" ) ) {
-      result = AST__SLA_EQECL;
-
-   } else if ( astChrMatch( cvt_string, "GALEQ" ) ) {
-      result = AST__SLA_GALEQ;
-
-   } else if ( astChrMatch( cvt_string, "EQGAL" ) ) {
-      result = AST__SLA_EQGAL;
-
-   } else if ( astChrMatch( cvt_string, "FK5HZ" ) ) {
-      result = AST__SLA_FK5HZ;
-
-   } else if ( astChrMatch( cvt_string, "HFK5Z" ) ) {
-      result = AST__SLA_HFK5Z;
-
-   } else if ( astChrMatch( cvt_string, "GALSUP" ) ) {
-      result = AST__SLA_GALSUP;
-
-   } else if ( astChrMatch( cvt_string, "SUPGAL" ) ) {
-      result = AST__SLA_SUPGAL;
-
-   } else if ( astChrMatch( cvt_string, "HPCEQ" ) ) {
-      result = AST__HPCEQ;
-
-   } else if ( astChrMatch( cvt_string, "EQHPC" ) ) {
-      result = AST__EQHPC;
-
-   } else if ( astChrMatch( cvt_string, "HPREQ" ) ) {
-      result = AST__HPREQ;
-
-   } else if ( astChrMatch( cvt_string, "EQHPR" ) ) {
-      result = AST__EQHPR;
-
-   } else if ( astChrMatch( cvt_string, "HEEQ" ) ) {
-      result = AST__HEEQ;
-
-   } else if ( astChrMatch( cvt_string, "EQHE" ) ) {
-      result = AST__EQHE;
-
-   } else if ( astChrMatch( cvt_string, "J2000H" ) ) {
-      result = AST__J2000H;
-
-   } else if ( astChrMatch( cvt_string, "HJ2000" ) ) {
-      result = AST__HJ2000;
-
-   } else if ( astChrMatch( cvt_string, "H2E" ) ) {
-      result = AST__SLA_DH2E;
-
-   } else if ( astChrMatch( cvt_string, "E2H" ) ) {
-      result = AST__SLA_DE2H;
-
-   } else if ( astChrMatch( cvt_string, "R2H" ) ) {
-      result = AST__R2H;
-
-   } else if ( astChrMatch( cvt_string, "H2R" ) ) {
-      result = AST__H2R;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *CvtString( int cvt_code, const char **comment,
-                              int *nargs, const char *arg[ MAX_SLA_ARGS ], int *status ) {
-/*
-*  Name:
-*     CvtString
-
-*  Purpose:
-*     Convert a conversion type from a code value to a string representation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     const char *CvtString( int cvt_code, const char **comment,
-*                            int *nargs, const char *arg[ MAX_SLA_ARGS ], int *status )
-
-*  Class Membership:
-*     SlaMap member function.
-
-*  Description:
-*     This function accepts a code value used to represent one of the
-*     SLALIB sky coordinate conversions and converts it into an
-*     equivalent string representation. It also returns a descriptive
-*     comment and information about the arguments required in order to
-*     perform the conversion.
-
-*  Parameters:
-*     cvt_code
-*        The conversion code.
-*     comment
-*        Address of a location to return a pointer to a constant
-*        null-terminated string containing a description of the
-*        conversion.
-*     nargs
-*        Address of an int in which to return the number of arguments
-*        required in order to perform the conversion (may be zero).
-*     arg
-*        An array in which to return a pointer to a constant
-*        null-terminated string for each argument (above) containing a
-*        description of what each argument represents.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string representation of
-*     the conversion code value supplied. If the code supplied is not
-*     valid, a NULL pointer will be returned, without error.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Result pointer to return */
-
-/* Initialise the returned values. */
-   *comment = NULL;
-   *nargs = 0;
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-      
-/* Test for each valid code value in turn and assign the appropriate
-   return values. */
-   switch ( cvt_code ) {
-
-   case AST__SLA_ADDET:
-      result = "ADDET";
-      *comment = "Add E-terms of aberration";
-      *nargs = 1;
-      arg[ 0 ] = "Besselian epoch of mean equinox (FK4)";
-      break;
-
-   case AST__SLA_SUBET:
-      result = "SUBET";
-      *comment = "Subtract E-terms of aberration";
-      *nargs = 1;
-      arg[ 0 ] = "Besselian epoch of mean equinox (FK4)";
-      break;
-
-   case AST__SLA_PREBN:
-      result = "PREBN";
-      *comment = "Apply Bessel-Newcomb (FK4) precession";
-      *nargs = 2;
-      arg[ 0 ] = "From Besselian epoch";
-      arg[ 1 ] = "To Besselian epoch";
-      break;
-
-   case AST__SLA_PREC:
-      result = "PREC";
-      *comment = "Apply IAU 1975 (FK5) precession";
-      *nargs = 2;
-      arg[ 0 ] = "From Julian epoch";
-      arg[ 1 ] = "To Julian epoch";
-      break;
-
-   case AST__SLA_FK45Z:
-      result = "FK45Z";
-      *comment = "FK4 to FK5 J2000.0 (no PM or parallax)";
-      arg[ 0 ] = "Besselian epoch of FK4 coordinates";
-      *nargs = 1;
-      break;
-
-   case AST__SLA_FK54Z:
-      result = "FK54Z";
-      *comment = "FK5 J2000.0 to FK4 (no PM or parallax)";
-      *nargs = 1;
-      arg[ 0 ] = "Besselian epoch of FK4 system";
-      break;
-
-   case AST__SLA_AMP:
-      result = "AMP";
-      *comment = "Geocentric apparent to mean place (FK5)";
-      *nargs = 2;
-      arg[ 0 ] = "TDB of apparent place (as MJD)";
-      arg[ 1 ] = "Julian epoch of mean equinox (FK5)";
-      break;
-
-   case AST__SLA_MAP:
-      result = "MAP";
-      *comment = "Mean place (FK5) to geocentric apparent";
-      *nargs = 2;
-      arg[ 0 ] = "Julian epoch of mean equinox (FK5)";
-      arg[ 1 ] = "TDB of apparent place (as MJD)";
-      break;
-
-   case AST__SLA_ECLEQ:
-      result = "ECLEQ";
-      *comment = "Ecliptic (IAU 1980) to J2000.0 equatorial (FK5)";
-      *nargs = 1;
-      arg[ 0 ] = "TDB of mean ecliptic (as MJD)";
-      break;
-
-   case AST__SLA_EQECL:
-      result = "EQECL";
-      *comment = "Equatorial J2000.0 (FK5) to ecliptic (IAU 1980)";
-      *nargs = 1;
-      arg[ 0 ] = "TDB of mean ecliptic (as MJD)";
-      break;
-
-   case AST__SLA_GALEQ:
-      result = "GALEQ";
-      *comment = "Galactic (IAU 1958) to J2000.0 equatorial (FK5)";
-      *nargs = 0;
-      break;
-
-   case AST__SLA_EQGAL:
-      result = "EQGAL";
-      *comment = "J2000.0 equatorial (FK5) to galactic (IAU 1958)";
-      *nargs = 0;
-      break;
-
-   case AST__SLA_FK5HZ:
-      result = "FK5HZ";
-      *comment = "J2000.0 FK5 to ICRS (no PM or parallax)";
-      arg[ 0 ] = "Julian epoch of FK5 coordinates";
-      *nargs = 1;
-      break;
-
-   case AST__SLA_HFK5Z:
-      result = "HFK5Z";
-      *comment = "ICRS to J2000.0 FK5 (no PM or parallax)";
-      arg[ 0 ] = "Julian epoch of FK5 coordinates";
-      *nargs = 1;
-      break;
-
-   case AST__SLA_GALSUP:
-      result = "GALSUP";
-      *comment = "Galactic (IAU 1958) to supergalactic";
-      *nargs = 0;
-      break;
-
-   case AST__SLA_SUPGAL:
-      result = "SUPGAL";
-      *comment = "Supergalactic to galactic (IAU 1958)";
-      *nargs = 0;
-      break;
-
-   case AST__HPCEQ:
-      result = "HPCEQ";
-      *comment = "Helioprojective-Cartesian to J2000.0 equatorial (FK5)";
-      *nargs = 4;
-      arg[ 0 ] = "Modified Julian Date of observation";
-      arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
-      arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
-      arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
-      break;
-
-   case AST__EQHPC:
-      result = "EQHPC";
-      *comment = "J2000.0 equatorial (FK5) to Helioprojective-Cartesian";
-      *nargs = 4;
-      arg[ 0 ] = "Modified Julian Date of observation";
-      arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
-      arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
-      arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
-      break;
-
-   case AST__HPREQ:
-      result = "HPREQ";
-      *comment = "Helioprojective-Radial to J2000.0 equatorial (FK5)";
-      *nargs = 4;
-      arg[ 0 ] = "Modified Julian Date of observation";
-      arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
-      arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
-      arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
-      break;
-
-   case AST__EQHPR:
-      result = "EQHPR";
-      *comment = "J2000.0 equatorial (FK5) to Helioprojective-Radial";
-      *nargs = 4;
-      arg[ 0 ] = "Modified Julian Date of observation";
-      arg[ 1 ] = "Heliocentric-Aries-Ecliptic X value at observer";
-      arg[ 2 ] = "Heliocentric-Aries-Ecliptic Y value at observer";
-      arg[ 3 ] = "Heliocentric-Aries-Ecliptic Z value at observer";
-      break;
-
-   case AST__HEEQ:
-      result = "HEEQ";
-      *comment = "Helio-ecliptic to equatorial";
-      *nargs = 1;
-      arg[ 0 ] = "Modified Julian Date of observation";
-      break;
-
-   case AST__EQHE:
-      result = "EQHE";
-      *comment = "Equatorial to helio-ecliptic";
-      *nargs = 1;
-      arg[ 0 ] = "Modified Julian Date of observation";
-      break;
-
-   case AST__J2000H:
-      result = "J2000H";
-      *comment = "J2000 equatorial (dynamical) to ICRS";
-      *nargs = 0;
-      break;
-
-   case AST__HJ2000:
-      result = "HJ2000";
-      *comment = "ICRS to J2000 equatorial (dynamical)";
-      *nargs = 0;
-      break;
-
-   case AST__SLA_DH2E:
-      result = "H2E";
-      *comment = "Horizon to equatorial";
-      *nargs = 2;
-      arg[ 0 ] = "Geodetic latitude of observer";
-      arg[ 1 ] = "Magnitude of diurnal aberration vector";
-      break;
-
-   case AST__SLA_DE2H:
-      result = "E2H";
-      *comment = "Equatorial to horizon";
-      *nargs = 2;
-      arg[ 0 ] = "Geodetic latitude of observer";
-      arg[ 1 ] = "Magnitude of diurnal aberration vector";
-      break;
-
-   case AST__R2H:
-      result = "R2H";
-      *comment = "RA to Hour Angle";
-      *nargs = 1;
-      arg[ 0 ] = "Local apparent sidereal time (radians)";
-      break;
-
-   case AST__H2R:
-      result = "H2R";
-      *comment = "Hour Angle to RA";
-      *nargs = 1;
-      arg[ 0 ] = "Local apparent sidereal time (radians)";
-      break;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void Earth( double mjd, double earth[3], int *status ) {
-/*
-*+
-*  Name:
-*     Earth
-
-*  Purpose:
-*     Returns the AST__HAEC position of the earth at the specified time.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Earth( double mjd, double earth[3], int *status ) 
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns the AST__HAEC position of the earth at the 
-*     specified time. See astSTPConv for a description of the AST__HAEC 
-*     coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date.
-*     earth
-*        The AST__HAEC position of the earth at the given date.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   double dpb[3];     /* Earth position (barycentric) */
-   double dph[3];     /* Earth position (heliocentric) */
-   double dvb[3];     /* Earth velocity (barycentric) */
-   double dvh[3];     /* Earth velocity (heliocentric, AST__HAQC) */
-   double ecmat[3][3];/* Equatorial to ecliptic matrix */
-   int i;             /* Loop count */
-
-/* Initialize. */
-   for( i = 0; i < 3; i++ ) earth[ i ] = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the position of the earth at the given date in the AST__HAQC coord
-   system (dph). */
-   palSlaEvp( mjd, 2000.0, dvb, dpb, dvh, dph );
-
-/* Now rotate the earths position vector into AST__HAEC coords. */
-   palSlaEcmat( palSlaEpj2d( 2000.0 ), ecmat );
-   palSlaDmxv( ecmat, dph, earth );
-
-/* Convert from AU to metres. */
-   earth[0] *= AST__AU;
-   earth[1] *= AST__AU;
-   earth[2] *= AST__AU;
-
-}
-
-static void Hgc( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-*  Name:
-*     Hgc
-
-*  Purpose:
-*     Returns matrix and offset for converting AST__HGC positions to AST__HAEC.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Hgc( double mjd, double mat[3][3], double offset[3], int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns a 3x3 matrix which rotates direction vectors
-*     given in the AST__HGC system to the AST__HAEC system at the
-*     specified date. It also returns the position of the origin of the 
-*     AST__HGC system as an AST__HAEC position. See astSTPConv for a
-*     description of these coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date defining the coordinate systems.
-*     mat
-*        Matrix which rotates from AST__HGC to AST__HAEC.
-*     offset
-*        The origin of the AST__HGC system within the AST__HAEC system.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   double earth[3];   /* Earth position (heliocentric, AST__HAEC) */
-   double len;        /* Vector length */
-   double xhg[3];     /* Unix X vector of AST__HGC system in AST__HAEC */
-   double yhg[3];     /* Unix Y vector of AST__HGC system in AST__HAEC */
-   double ytemp[3];   /* Un-normalized Y vector */
-   double zhg[3];     /* Unix Z vector of AST__HGC system in AST__HAEC */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-
-/* Initialize. */
-   for( i = 0; i < 3; i++ ) {
-      for( j = 0; j < 3; j++ ) {
-         mat[i][j] = (i==j)?1.0:0.0;
-      }
-      offset[ i ] = 0.0;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a unit vector parallel to the solar north pole at the given date.
-   This vector is expressed in AST__HAEC coords. This is the Z axis of the 
-   AST__HGC system. */
-   SolarPole( mjd, zhg, status );
-
-/* Get the position of the earth at the given date in the AST__HAEC coord
-   system. */
-   Earth( mjd, earth, status );
-
-/* The HG Y axis is perpendicular to both the polar axis and the
-   sun-earth line. Obtain a Y vector by taking the cross product of the
-   two vectors, and then normalize it into a unit vector. */
-   palSlaDvxv( zhg, earth, ytemp );
-   palSlaDvn( ytemp, yhg, &len );
-
-/* The HG X axis is perpendicular to both Z and Y, */
-   palSlaDvxv( yhg, zhg, xhg );
-
-/* The HG X, Y and Z unit vectors form the columns of the required matrix. 
-   The origins of the two systems are co-incident, so return the zero offset
-   vector initialised earlier. */
-   for( i = 0; i < 3; i++ ) {
-      mat[ i ][ 0 ] = xhg[ i ];
-      mat[ i ][ 1 ] = yhg[ i ];
-      mat[ i ][ 2 ] = zhg[ i ];
-   } 
-
-}
-
-static void Gsec( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-*  Name:
-*     Gsec
-
-*  Purpose:
-*     Returns matrix and offset for converting AST__GSEC positions to AST__HAEC.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Gsec( double mjd, double mat[3][3], double offset[3], int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns a 3x3 matrix which rotates direction vectors
-*     given in the AST__GSEC system to the AST__HAEC system at the
-*     specified date. It also returns the position of the origin of the 
-*     AST__GSEC system as an AST__HAEC position. See astSTPConv for a
-*     description of these coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date defining the coordinate systems.
-*     mat
-*        Matrix which rotates from AST__GSEC to AST__HAEC.
-*     offset
-*        The origin of the AST__GSEC system within the AST__HAEC system.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   double earth[3];   /* Earth position (heliocentric, AST__HAEC) */
-   double pole[3];    /* Solar pole (AST__HAEC) */
-   double len;        /* Vector length */
-   double xgs[3];     /* Unix X vector of AST__GSEC system in AST__HAEC */
-   double ygs[3];     /* Unix Y vector of AST__GSEC system in AST__HAEC */
-   double ytemp[3];   /* Un-normalized Y vector */
-   double zgs[3];     /* Unix Z vector of AST__GSEC system in AST__HAEC */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-
-/* Initialize. */
-   for( i = 0; i < 3; i++ ) {
-      for( j = 0; j < 3; j++ ) {
-         mat[i][j] = (i==j)?1.0:0.0;
-      }
-      offset[ i ] = 0.0;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the position of the earth at the given date in the AST__HAEC coord
-   system. */
-   Earth( mjd, earth, status );
-
-/* We need to find unit vectors parallel to the GSEC (X,Y,Z) axes, expressed
-   in terms of the AST__HAEC (X,Y,Z) axes. The GSEC X axis starts at the
-   earth and passes through the centre of the sun. This is just the
-   normalized opposite of the earth's position vector. */
-   palSlaDvn( earth, xgs, &len );
-   xgs[0] *= -1.0;
-   xgs[1] *= -1.0;
-   xgs[2] *= -1.0;
-
-/* The GSEC Y axis is perpendicular to both the X axis and the ecliptic north
-   pole vector. So find the ecliptic north pole vector in AST__HAEC coords. */
-   pole[ 0 ] = 0.0;
-   pole[ 1 ] = 0.0;
-   pole[ 2 ] = 1.0;
-
-/* Find the GSEC Y axis by taking the vector product of the X axis and 
-   the ecliptic north pole vector, and then normalize it into a unit 
-   vector. */
-   palSlaDvxv( pole, xgs, ytemp );
-   palSlaDvn( ytemp, ygs, &len );
-
-/* The GSEC Z axis is perpendicular to both X and Y axis, and forms a
-   right-handed system. The resulting vector will be of unit length 
-   since the x and y vectors are both of unit length, and are
-   perpendicular to each other. It therefore does not need to be
-   normalized.*/
-   palSlaDvxv( xgs, ygs, zgs );
-
-/* The GSEC X, Y and Z unit vectors form the columns of the required matrix. */
-   for( i = 0; i < 3; i++ ) {
-      mat[ i ][ 0 ] = xgs[ i ];
-      mat[ i ][ 1 ] = ygs[ i ];
-      mat[ i ][ 2 ] = zgs[ i ];
-      offset[i] = earth[ i ];
-   } 
-
-}
-
-static void Haec( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-*  Name:
-*     Haec
-
-*  Purpose:
-*     Returns matrix and offset for converting AST__HAEC positions to AST__HAEC.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Haec( double mjd, double mat[3][3], double offset[3], int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns a 3x3 matrix which rotates direction vectors
-*     given in the AST__HAEC system to the AST__HAEC system at the
-*     specified date. It also returns the position of the origin of the 
-*     AST__HAEC system as an AST__HAEC position. See astSTPConv for a
-*     description of these coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date defining the coordinate systems.
-*     mat
-*        Matrix which rotates from AST__HAEC to AST__HAEC.
-*     offset
-*        The origin of the AST__HAEC system within the AST__HAEC system.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-
-/* Return an identity matrix and a zero offset vector. */
-   for( i = 0; i < 3; i++ ) {
-      for( j = 0; j < 3; j++ ) {
-         mat[i][j] = (i==j)?1.0:0.0;
-      }
-      offset[ i ] = 0.0;
-   }
-
-}
-
-static void Haqc( double mjd, double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-*  Name:
-*     Haqc
-
-*  Purpose:
-*     Returns matrix and offset for converting AST__HAQC positions to AST__HAEC.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Haqc( double mjd, double mat[3][3], double offset[3], int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns a 3x3 matrix which rotates direction vectors
-*     given in the AST__HAQC system to the AST__HAEC system at the
-*     specified date. It also returns the position of the origin of the 
-*     AST__HAQC system as an AST__HAEC position. See astSTPConv for a
-*     description of these coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date defining the coordinate systems.
-*     mat
-*        Matrix which rotates from AST__HAQC to AST__HAEC.
-*     offset
-*        The origin of the AST__HAQC system within the AST__HAEC system.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-
-/* Initialise an identity matrix and a zero offset vector. */
-   for( i = 0; i < 3; i++ ) {
-      for( j = 0; j < 3; j++ ) {
-         mat[i][j] = (i==j)?1.0:0.0;
-      }
-      offset[ i ] = 0.0;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Return the required matrix. */
-   palSlaEcmat( palSlaEpj2d( 2000.0 ), mat );
-   return;
-}
-
-static void Hpcc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-*  Name:
-*     Hpcc
-
-*  Purpose:
-*     Returns matrix and offset for converting AST__HPCC positions to 
-*     AST__HAEC.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Hpcc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns a 3x3 matrix which rotates direction vectors
-*     given in the AST__HPCC system to the AST__HAEC system at the
-*     specified date. It also returns the position of the origin of the 
-*     AST__HPCC system as an AST__HAEC position. See astSTPConv for a
-*     description of these coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date defining the coordinate systems.
-*     obs
-*        The observers position, in AST__HAEC, or NULL if the observer is
-*        at the centre of the earth.
-*     mat
-*        Matrix which rotates from AST__HPCC to AST__HAEC.
-*     offset
-*        The origin of the AST__HPCC system within the AST__HAEC system.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   double earth[3];   /* Earth position (heliocentric, AST__HAEC) */
-   double pole[3];    /* Solar pole vector (AST__HAEC) */
-   double len;        /* Vector length */
-   double xhpc[3];    /* Unix X vector of AST__HPCC system in AST__HAEC */
-   double yhpc[3];    /* Unix Y vector of AST__HPCC system in AST__HAEC */
-   double ytemp[3];   /* Un-normalized Y vector */
-   double zhpc[3];    /* Unix Z vector of AST__HPCC system in AST__HAEC */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-
-/* Initialize. */
-   for( i = 0; i < 3; i++ ) {
-      for( j = 0; j < 3; j++ ) {
-         mat[i][j] = (i==j)?1.0:0.0;
-      }
-      offset[i] = 0.0;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If no observers position was supplied, use the position of the earth
-   at the specified date in AST__HAEC coords. */
-   if( !obs ) {
-      Earth( mjd, earth, status );
-      obs = earth;
-   } 
-
-/* We need to find unit vectors parallel to the HPCC (X,Y,Z) axes, expressed
-   in terms of the AST__HAEC (X,Y,Z) axes. The HPCC X axis starts at the
-   observer and passes through the centre of the sun. This is just the
-   normalized opposite of the supplied observer's position vector. */
-   palSlaDvn( obs, xhpc, &len );
-   xhpc[0] *= -1.0;
-   xhpc[1] *= -1.0;
-   xhpc[2] *= -1.0;
-
-/* The HPC Y axis is perpendicular to both the X axis and the solar north
-   pole vector. So find the solar north pole vector in AST__HAEC coords. */
-   SolarPole( mjd, pole, status );
-
-/* Find the HPC Y axis by taking the vector product of the X axis and 
-   the solar north pole vector, and then normalize it into a unit vector.
-   Note, HPC (X,Y,Z) axes form a left-handed system! */
-   palSlaDvxv( xhpc, pole, ytemp );
-   palSlaDvn( ytemp, yhpc, &len );
-
-/* The HPC Z axis is perpendicular to both X and Y axis, and forms a
-   left-handed system. The resulting vector will be of unit length 
-   since the x and y vectors are both of unit length, and are
-   perpendicular to each other. It therefore does not need to be
-   normalized.*/
-   palSlaDvxv( yhpc, xhpc, zhpc );
-
-/* The HPC X, Y and Z unit vectors form the columns of the required matrix. */
-   for( i = 0; i < 3; i++ ) {
-      mat[ i ][ 0 ] = xhpc[ i ];
-      mat[ i ][ 1 ] = yhpc[ i ];
-      mat[ i ][ 2 ] = zhpc[ i ];
-      offset[i] = obs[ i ];
-   } 
-
-}
-
-static void Hprc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status ) {
-/*
-*+
-*  Name:
-*     Hprc
-
-*  Purpose:
-*     Returns matrix and offset for converting AST__HPRC positions to 
-*     AST__HAEC.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Hprc( double mjd, double obs[3], double mat[3][3], double offset[3], int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function returns a 3x3 matrix which rotates direction vectors
-*     given in the AST__HPRC system to the AST__HAEC system at the
-*     specified date. It also returns the position of the origin of the 
-*     AST__HPRC system as an AST__HAEC position. See astSTPConv for a
-*     description of these coordinate systems.
-
-*  Parameters:
-*     mjd
-*        Modified Julian date defining the coordinate systems.
-*     obs
-*        The observers position, in AST__HAEC, or NULL if the observer is
-*        at the centre of the earth.
-*     mat
-*        Matrix which rotates from AST__HPRC to AST__HAEC.
-*     offset
-*        The origin of the AST__HPRC system within the AST__HAEC system.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   double pole[3];    /* Solar pole (AST__HAEC) */
-   double earth[3];   /* Earth position (heliocentric, AST__HAEC) */
-   double len;        /* Vector length */
-   double xhpr[3];    /* Unix X vector of AST__HPRC system in AST__HAEC */
-   double yhpr[3];    /* Unix Y vector of AST__HPRC system in AST__HAEC */
-   double ytemp[3];   /* Un-normalized Y vector */
-   double zhpr[3];    /* Unix Z vector of AST__HPRC system in AST__HAEC */
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-
-/* Initialize. */
-   for( i = 0; i < 3; i++ ) {
-      for( j = 0; j < 3; j++ ) {
-         mat[i][j] = (i==j)?1.0:0.0;
-      }
-      offset[i] = 0.0;
-   }
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If no observers position was supplied, use the position of the earth
-   at the specified date in AST__HAEC coords. */
-   if( !obs ) {
-      Earth( mjd, earth, status );
-      obs = earth;
-   }
-
-/* We need to find unit vectors parallel to the HPRC (X,Y,Z) axes, expressed
-   in terms of the AST__HAEC (X,Y,Z) axes. The HPRC Z axis starts at the
-   observer and passes through the centre of the sun. This is just the
-   normalized opposite of the supplied observer's position vector. */
-   palSlaDvn( obs, zhpr, &len );
-   zhpr[0] *= -1.0;
-   zhpr[1] *= -1.0;
-   zhpr[2] *= -1.0;
-
-/* The HPR Y axis is perpendicular to both the Z axis and the solar north
-   pole vector. So find the solar north pole vector in AST__HAEC coords. */
-   SolarPole( mjd, pole, status );
-
-/* Find the HPR Y axis by taking the vector product of the Z axis and 
-   the solar north pole vector, and then normalize it into a unit vector.
-   Note, HPR (X,Y,Z) axes form a left-handed system! */
-   palSlaDvxv( pole, zhpr, ytemp );
-   palSlaDvn( ytemp, yhpr, &len );
-
-/* The HPRC X axis is perpendicular to both Y and Z axis, and forms a
-   left-handed system. The resulting vector will be of unit length 
-   since the y and z vectors are both of unit length, and are
-   perpendicular to each other. It therefore does not need to be
-   normalized.*/
-   palSlaDvxv( zhpr, yhpr, xhpr );
-
-/* The HPRC X, Y and Z unit vectors form the columns of the required matrix. */
-   for( i = 0; i < 3; i++ ) {
-      mat[ i ][ 0 ] = xhpr[ i ];
-      mat[ i ][ 1 ] = yhpr[ i ];
-      mat[ i ][ 2 ] = zhpr[ i ];
-      offset[ i ] = obs[ i ];
-   } 
-}
-
-static void J2000H( int forward, int npoint, double *alpha, double *delta, int *status ){
-/*
-*  Name:
-*     J2000H
-
-*  Purpose:
-*     Convert dynamical J2000 equatorial coords to ICRS.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void J2000H( int forward, int npoint, double *alpha, double *delta, int *status )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-*     This function converts the supplied dynamical J2000 equatorial coords 
-*     to ICRS (or vice-versa).
-
-*  Parameters:
-*     forward
-*        Do forward transformation?
-*     npoint
-*        Number of points to transform.
-*     alpha
-*        Pointer to longitude values.
-*     delta
-*        Pointer to latitude values.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   int i;                  /* Loop count */
-   double rmat[3][3];      /* J2000 -> ICRS rotation matrix */
-   double v1[3];           /* J2000 vector */
-   double v2[3];           /* ICRS vector */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get the J2000 to ICRS rotation matrix (supplied by P.T. Wallace) */
-   palSlaDeuler( "XYZ", -0.0068192*AS2R, 0.0166172*AS2R, 0.0146000*AS2R, 
-              rmat );
-
-/* Loop round all points. */
-   for( i = 0; i < npoint; i++ ) {
-
-/* Convert from (alpha,delta) to 3-vector */
-      palSlaDcs2c( alpha[ i ], delta[ i ], v1 );
-
-/* Rotate the 3-vector */
-      if( forward ) {
-         palSlaDmxv( rmat, v1, v2 );
-      } else {
-         palSlaDimxv( rmat, v1, v2 );
-      }      
-
-/* Convert from 3-vector to (alpha,delta) */
-      palSlaDcc2s( v2, alpha + i, delta + i );
-   }
-}
-
-void astSTPConv1_( double mjd, int in_sys, double in_obs[3], double in[3], 
-                   int out_sys, double out_obs[3], double out[3], int *status ){
-/*
-*+
-*  Name:
-*     astSTPConv1
-
-*  Purpose:
-*     Converts a 3D solar system position between specified STP coordinate 
-*     systems.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void astSTPConv1( double mjd, int in_sys, double in_obs[3], 
-*                       double in[3], int out_sys, double out_obs[3], 
-*                       double out[3] )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function converts a single 3D solar-system position from the 
-*     specified input coordinate system to the specified output coordinate 
-*     system. See astSTPConv for a list of supported coordinate systems.
-
-*  Parameters:
-*     mjd
-*        The Modified Julian Date to which the coordinate systems refer.
-*     in_sys
-*        The coordinate system in which the input positions are supplied.
-*     in_obs
-*        The position of the observer in AST__HAEC coordinates. This is only 
-*        needed if the input system is an observer-centric system. If this 
-*        is not the case, a NULL pointer can be supplied. A NULL pointer
-*        can also be supplied to indicate that he observer is at the centre of 
-*        the earth at the specified date.
-*     in
-*        A 3-element array holding the input position. 
-*     out_sys
-*        The coordinate system in which the input positions are supplied.
-*     out_obs
-*        The position of the observer in AST__HAEC coordinates. This is only 
-*        needed if the output system is an observer-centric system. If this 
-*        is not the case, a NULL pointer can be supplied. A NULL pointer
-*        can also be supplied to indicate that he observer is at the centre of 
-*        the earth at the specified date.
-*     out
-*        A 3-element array holding the output position. 
-
-*  Notes:
-*     - The "in" and "out" arrays may safely point to the same memory.
-*     - Output longitude values are always in the range 0 - 2.PI.
-
-*-
-*/
-
-/* Local Variables: */
-   double *ins[ 3 ];      /* The input position */
-   double *outs[ 3 ];     /* The output position */
-
-/* Store pointers to the supplied arrays suitable for passing to STPConv. */
-   ins[ 0 ] = in;
-   ins[ 1 ] = in + 1;
-   ins[ 2 ] = in + 2;
-   outs[ 0 ] = out;
-   outs[ 1 ] = out + 1;
-   outs[ 2 ] = out + 2;
-
-/* Convert the position. */
-   STPConv( mjd, 0, 1, in_sys, in_obs, ins, out_sys, out_obs, outs, status );
-
-}
-
-void astSTPConv_( double mjd, int n, int in_sys, double in_obs[3], 
-                  double *in[3], int out_sys, double out_obs[3], 
-                  double *out[3], int *status ){
-/*
-*+
-*  Name:
-*     astSTPConv
-
-*  Purpose:
-*     Converts a set of 3D solar system positions between specified STP 
-*     coordinate systems.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void astSTPConv( double mjd, int n, int in_sys, double in_obs[3], 
-*                      double *in[3], int out_sys, double out_obs[3], 
-*                      double *out[3] )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function converts a set of 3D solar-system positions from
-*     the specified input coordinate system to the specified output 
-*     coordinate system.
-
-*  Parameters:
-*     mjd
-*        The Modified Julian Date to which the coordinate systems refer.
-*     in_sys
-*        The coordinate system in which the input positions are supplied
-*        (see below).
-*     in_obs
-*        The position of the observer in AST__HAEC coordinates. This is only 
-*        needed if the input system is an observer-centric system. If this 
-*        is not the case, a NULL pointer can be supplied. A NULL pointer
-*        can also be supplied to indicate that he observer is at the centre of 
-*        the earth at the specified date.
-*     in
-*        A 3-element array holding the input positions. Each of the 3
-*        elements should point to an array of "n" axis values. For spherical
-*        input systems, in[3] can be supplied as NULL, in which case a
-*        constant value of 1 AU will be used.
-*     out_sys
-*        The coordinate system in which the input positions are supplied
-*        (see below).
-*     out_obs
-*        The position of the observer in AST__HAEC coordinates. This is only 
-*        needed if the output system is an observer-centric system. If this 
-*        is not the case, a NULL pointer can be supplied. A NULL pointer
-*        can also be supplied to indicate that he observer is at the centre of 
-*        the earth at the specified date.
-*     out
-*        A 3-element array holding the output positions. Each of the 3
-*        elements should point to an array of "n" axis values. If in[3] is 
-*        NULL, no values will be assigned to out[3].
-
-*  Notes:
-*     - The "in" and "out" arrays may safely point to the same memory.
-*     - Output longitude values are always in the range 0 - 2.PI.
-
-*  Supported Coordinate Systems:
-*     Coordinate systems are either spherical or Cartesian, and are right 
-*     handed (unless otherwise indicated). Spherical systems use axis 0 for 
-*     longitude, axis 1 for latitude, and axis 2 for radius. Cartesian systems 
-*     use 3 mutually perpendicular axes; X is axis 0 and points towards the 
-*     intersection of the equator and the zero longitude meridian of the 
-*     corresponding spherical system, Y is axis 1 and points towards longitude 
-*     of +90 degrees, Z is axis 2 and points twowards the north pole. All 
-*     angles are in radians and all distances are in metres. The following 
-*     systems are supported:
-*
-*     - AST__HAE: Heliocentric-aries-ecliptic spherical coordinates. Centred 
-*     at the centre of the sun. The north pole points towards the J2000 
-*     ecliptic north pole, and meridian of zero longitude includes the 
-*     J2000 equinox.
-*
-*     - AST__HAEC: Heliocentric-aries-ecliptic cartesian coordinates. Origin 
-*     at the centre of the sun. The Z axis points towards the J2000 ecliptic 
-*     north pole, and the X axis points towards the J2000 equinox.
-*
-*     - AST__HAQ: Heliocentric-aries-equatorial spherical coordinates. Centred
-*     at the centre of the sun. The north pole points towards the FK5 J2000 
-*     equatorial north pole, and meridian of zero longitude includes the 
-*     FK5 J2000 equinox.
-*
-*     - AST__HAQC: Heliocentric-aries-equatorial cartesian coordinates. Origin 
-*     at the centre of the sun. The Z axis points towards the FK5 J2000 
-*     equatorial north pole, and the X axis points towards the FK5 J2000 
-*     equinox.
-*
-*     - AST__HG: Heliographic spherical coordinates. Centred at the centre of 
-*     the sun. North pole points towards the solar north pole at the given 
-*     date. The meridian of zero longitude includes the sun-earth line at 
-*     the given date. 
-*
-*     - AST__HGC: Heliographic cartesian coordinates. Origin at the centre of 
-*     the sun. The Z axis points towards the solar north pole at the given 
-*     date. The X axis is in the plane spanned by the Z axis, and the 
-*     sun-earth line at the given date. 
-*
-*     - AST__HPC: Helioprojective-cartesian spherical coordinates. A
-*     left-handed system (that is, longitude increases westwards), centred 
-*     at the specified observer position. The intersection of the 
-*     zero-longitude meridian and the equator coincides with the centre of 
-*     the sun as seen from the observers position. The zero longitude 
-*     meridian includes the solar north pole at the specified date. 
-*
-*     - AST__HPCC: Helioprojective-cartesian cartesian coordinates. A
-*     left-handed system with origin at the specified observer position. The 
-*     X axis points towards the centre of the sun as seen from the observers 
-*     position. The X-Z plane includes the solar north pole at the specified 
-*     date. 
-*
-*     - AST__HPR: Helioprojective-radial spherical coordinates. A left-handed 
-*     system (that is, longitude increases westwards), centred at the 
-*     specified observer position. The north pole points towards the centre 
-*     of the sun as seen from the observers position. The zero longitude 
-*     meridian includes the solar north pole at the specified date.
-*
-*     - AST__HPRC: Helioprojective-radial cartesian coordinates. A left-handed 
-*     system with origin at the specified observer position. The Z axis points 
-*     towards the centre of the sun as seen from the observers position. The 
-*     X-Z plane includes the solar north pole at the specified date.
-*
-*     - AST__GSE: Geocentric-solar-ecliptic spherical coordinates. Centred at 
-*     the centre of the earth at the given date. The north pole points towards 
-*     the  J2000 ecliptic north pole, and the meridian of zero longitude
-*     includes the Sun.
-*
-*     - AST__GSEC: Geocentric-solar-ecliptic cartesian coordinates. Origin at 
-*     the centre of the earth at the given date. The X axis points towards the 
-*     centre of sun, and the X-Z plane contains the J2000 ecliptic north
-*     pole. Since the earth may not be exactly in the mean ecliptic of
-*     J2000, the Z axis will not in general correspond exactly to the
-*     ecliptic north pole.
-*-
-*/
-   STPConv( mjd, 0, n, in_sys, in_obs, in, out_sys, out_obs, out, status );
-}
-
-static void STPConv( double mjd, int ignore_origins, int n, int in_sys, 
-                     double in_obs[3], double *in[3], int out_sys, 
-                     double out_obs[3], double *out[3], int *status ){
-/*
-*  Name:
-*     STPConv
-
-*  Purpose:
-*     Convert a set of 3D solar system positions between specified STP 
-*     coordinate systems.
-
-*  Type:
-*     Private member function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void STPConv( double mjd, int ignore_origins, int n, int in_sys, 
-*                   double in_obs[3], double *in[3], int out_sys, 
-*                   double out_obs[3], double *out[3], int *status ){
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-*     This function converts a set of 3D solar-system positions from
-*     the specified input coordinate system to the specified output 
-*     coordinate system. See astSTPConv for a list of the available
-*     coordinate systems.
-
-*  Parameters:
-*     mjd
-*        The Modified Julian Date to which the coordinate systems refer.
-*     ignore_origins
-*        If non-zero, then the coordinate system definitions are modified so
-*        that all cartesian systems have the origin at the centre of the
-*        Sun. If zero, the correct origins are used for each individual
-*        system.
-*     n
-*        The number of positions to transform.
-*     in_sys
-*        The coordinate system in which the input positions are supplied
-*     in_obs
-*        The position of the observer in AST__HAEC coordinates. This is only 
-*        needed if the input system is an observer-centric system. If this 
-*        is not the case, a NULL pointer can be supplied. A NULL pointer
-*        can also be supplied to indicate that he observer is at the centre of 
-*        the earth at the specified date.
-*     in
-*        A 3-element array holding the input positions. Each of the 3
-*        elements should point to an array of "n" axis values. For spherical
-*        input systems, in[3] can be supplied as NULL, in which case a
-*        constant value of 1 AU will be used.
-*     out_sys
-*        The coordinate system in which the input positions are supplied
-*        (see "Supported Coordinate Systems" below).
-*     out_obs
-*        The position of the observer in AST__HAEC coordinates. This is only 
-*        needed if the output system is an observer-centric system. If this 
-*        is not the case, a NULL pointer can be supplied. A NULL pointer
-*        can also be supplied to indicate that he observer is at the centre of 
-*        the earth at the specified date.
-*     out
-*        A 3-element array holding the input positions. Each of the 3
-*        elements should point to an array of "n" axis values. For spherical
-*        output coordinates, out[2] may be NULL, in which case the output
-*        radius values are thrown away.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Output longitude values are always in the range 0 - 2.PI.
-*     - The "in" and "out" arrays may safely point to the same memory.
-*     - The contents of the output array is left unchanged if an error
-*     has already occurred.
-*/
-
-/* Local Variables: */
-   double *out2;      /* Pointer to output third axis values */
-   double *px;        /* Pointer to next X axis value */
-   double *py;        /* Pointer to next Y axis value */
-   double *pz;        /* Pointer to next Z axis value */
-   double lat;        /* Latitude value */
-   double lng;        /* Longitude value */
-   double mat1[3][3]; /* Input->HAEC rotation matrix */
-   double mat2[3][3]; /* Output->HAEC rotation matrix */
-   double mat3[3][3]; /* HAEC->output rotation matrix */
-   double mat4[3][3]; /* Input->output rotation matrix */
-   double off1[3];    /* Origin of input system in HAEC coords */
-   double off2[3];    /* Origin of output system in HAEC coords */
-   double off3[3];    /* HAEC vector from output origin to input origin */
-   double off4[3];    /* Position of input origin within output system */
-   double p[3];       /* Current position */
-   double q[3];       /* New position */
-   double radius;     /* Radius value */
-   int cur_sys;       /* Current system for output values */ 
-   int i;             /* Loop count */
-   int j;             /* Loop count */
-   int inCsys;        /* Input cartesian system */ 
-   int outCsys;       /* Output cartesian system */ 
-   size_t nbyte;      /* Amount of memory to copy */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If out[2] was supplied as null, allocate memory to hold third axis
-   values. Otherwise, use the supplied array. */
-   nbyte = n*sizeof( double );
-   if( !out[2] ) {
-      out2 = (double *) astMalloc( nbyte );
-   } else {
-      out2 = out[2];
-   }
-
-/* Copy the input data to the output data and note that the output values 
-   are currently in the same system as the input values. */
-   memcpy ( out[ 0 ], in[ 0 ], nbyte );
-   memcpy ( out[ 1 ], in[ 1 ], nbyte );
-   if( in[2] ) {
-      memcpy ( out2, in[ 2 ], nbyte );
-   } else {
-      for( i = 0; i < n; i++ ) out2[ i ] = AST__AU;
-   }   
-   cur_sys = in_sys;
-
-/* Skip the next bit if the output values are now in the required system. */
-   if( cur_sys != out_sys ) {
-
-/* If the current system is spherical note the corresponding cartesian
-   system. If the current system is cartesian, use it. */
-      if( cur_sys == AST__HG ){
-         inCsys = AST__HGC;
-      } else if( cur_sys == AST__HAQ ){
-         inCsys = AST__HAQC;
-      } else if( cur_sys == AST__HAE ){
-         inCsys = AST__HAEC;
-      } else if( cur_sys == AST__GSE ){
-         inCsys = AST__GSEC;
-      } else if( cur_sys == AST__HPC ){
-         inCsys = AST__HPCC;
-      } else if( cur_sys == AST__HPR ){
-         inCsys = AST__HPRC;
-      } else {
-         inCsys = cur_sys;
-      }
-
-/* Convert input spherical positions into the corresponding cartesian system, 
-   putting the results in the "out" arrays. Modify the input system 
-   accordingly. */
-      if( cur_sys != inCsys ) {
-         px = out[ 0 ];
-         py = out[ 1 ];
-         pz = out2;
-         for( i = 0; i < n; i++ ) {
-            p[ 0 ] = *px;
-            p[ 1 ] = *py;
-            p[ 2 ] = *pz;
-            if( p[ 0 ] != AST__BAD && 
-                p[ 1 ] != AST__BAD && 
-                p[ 2 ] != AST__BAD ) {
-                palSlaDcs2c( p[ 0 ], p[ 1 ], q );
-                *(px++) = q[ 0 ]*p[ 2 ];
-                *(py++) = q[ 1 ]*p[ 2 ];
-                *(pz++) = q[ 2 ]*p[ 2 ];
-            } else {
-               *(px++) = AST__BAD;
-               *(py++) = AST__BAD;
-               *(pz++) = AST__BAD;
-            }
-         }      
-
-         cur_sys = inCsys;
-
-      }
-   }
-
-/* Skip the next bit if the output values are now in the required system. */
-   if( cur_sys != out_sys ) {
-
-/* If the required output system is spherical, note the corresponding
-   cartesian system. If the required output system is cartesian, use it.*/
-      if( out_sys == AST__HG ){
-         outCsys = AST__HGC;
-      } else if( out_sys == AST__HAQ ){
-         outCsys = AST__HAQC;
-      } else if( out_sys == AST__HAE ){
-         outCsys = AST__HAEC;
-      } else if( out_sys == AST__GSE ){
-         outCsys = AST__GSEC;
-      } else if( out_sys == AST__HPC ){
-         outCsys = AST__HPCC;
-      } else if( out_sys == AST__HPR ){
-         outCsys = AST__HPRC;
-      } else {
-         outCsys = out_sys;
-      }
-
-/* Skip the next bit if the output values are already in the required
-   output cartesian system. */
-      if( cur_sys != outCsys ) {
-
-/* Obtain an offset vector and a rotation matrix which moves positions from 
-   the current (Cartesian) system to the AST__HAEC system. The offset vector
-   returned by these functions is the AST__HAEC coordinates of the origin of 
-   the current system. The matrix rotates direction vectors from the current 
-   system to the AST__HAEC system. */
-         if( cur_sys == AST__HGC ) {
-            Hgc( mjd, mat1, off1, status );
-   
-         } else if( cur_sys == AST__HAEC ) {
-            Haec( mjd, mat1, off1, status );
-   
-         } else if( cur_sys == AST__HAQC ) {
-            Haqc( mjd, mat1, off1, status );
-   
-         } else if( cur_sys == AST__GSEC ) {
-            Gsec( mjd, mat1, off1, status );
-   
-         } else if( cur_sys == AST__HPCC ) {
-            Hpcc( mjd, in_obs, mat1, off1, status );
-   
-         } else if( cur_sys == AST__HPRC ) {
-            Hprc( mjd, in_obs, mat1, off1, status );
-   
-         } else {
-            astError( AST__INTER, "astSTPConv(SlaMap): Unsupported input "
-                      "cartesian coordinate system type %d (internal AST "
-                      "programming error).", status, cur_sys );
-         }
- 
-/* Obtain an offset vector and a rotation matrix which moves positions from 
-   the required output Cartesian system to the AST__HAEC system. */
-         if( outCsys == AST__HGC ) {
-            Hgc( mjd, mat2, off2, status );
-   
-         } else if( outCsys == AST__HAEC ) {
-            Haec( mjd, mat2, off2, status );
-   
-         } else if( outCsys == AST__HAQC ) {
-            Haqc( mjd, mat2, off2, status );
-   
-         } else if( outCsys == AST__GSEC ) {
-            Gsec( mjd, mat2, off2, status );
-   
-         } else if( outCsys == AST__HPCC ) {
-            Hpcc( mjd, out_obs, mat2, off2, status );
-   
-         } else if( outCsys == AST__HPRC ) {
-            Hprc( mjd, out_obs, mat2, off2, status );
-   
-         } else {
-            astError( AST__INTER, "astSTPConv(SlaMap): Unsupported output "
-                      "cartesian coordinate system type %d (internal AST "
-                      "programming error).", status, outCsys );
-         }
- 
-/* Invert the second matrix to get the matrix which rotates AST__HAEC coords
-   to the output cartesian system. This an be done simply by transposing it 
-   since all the matrices are 3D rotations. */
-         for( i = 0; i < 3; i++ ) {
-            for( j = 0; j < 3; j++ ) mat3[ i ][ j ] = mat2[ j ][ i ];
-
-/* Find the offset in AST__HAEC coords from the origin of the output
-   cartesian system to the origin of the current system. */
-            off3[ i ] = off1[ i ] - off2[ i ];
-         }         
-
-/* Unless the origins are being ignored, use the above matrix to rotate the 
-   above AST__HAEC offset into the output cartesian system. If origins are 
-   being ignored, use an offset of zero. */
-         if( ignore_origins ) {         
-            off4[ 0 ] = 0.0;            
-            off4[ 1 ] = 0.0;            
-            off4[ 2 ] = 0.0;            
-         } else {
-            palSlaDmxv( mat3, off3, off4 );
-         }
-         
-/* Concatentate the two matrices to get the matrix which rotates from the
-   current system to the output cartesian system. */
-         palSlaDmxm( mat3, mat1, mat4 );
-
-/* Use the matrix and offset to convert current positions to output 
-   cartesian positions. */
-         px = out[ 0 ];
-         py = out[ 1 ];
-         pz = out2;
-
-         for( i = 0; i < n; i++ ) {
-            p[ 0 ] = *px;
-            p[ 1 ] = *py;
-            p[ 2 ] = *pz;
-
-            if( p[ 0 ] != AST__BAD && 
-                p[ 1 ] != AST__BAD && 
-                p[ 2 ] != AST__BAD ) {
-               palSlaDmxv( mat4, p, q );
-               *(px++) = q[ 0 ] + off4[ 0 ];
-               *(py++) = q[ 1 ] + off4[ 1 ];
-               *(pz++) = q[ 2 ] + off4[ 2 ];
-            } else {
-               *(px++) = AST__BAD;
-               *(py++) = AST__BAD;
-               *(pz++) = AST__BAD;
-            }
-         }      
-
-/* Indicate that the output values are now in the required output
-   cartesian system. */
-         cur_sys = outCsys;
-
-      }
-   }
-
-/* Skip the next bit if the output values are now in the required system. */
-   if( cur_sys != out_sys ) {
-
-/* The only reason why the output values may not be in the required output 
-   system is because the output system is spherical. Convert output Cartesian 
-   positions to output spherical positions. */
-      px = out[ 0 ];
-      py = out[ 1 ];
-      pz = out2;
-      for( i = 0; i < n; i++ ) {
-         p[ 0 ] = *px;
-         p[ 1 ] = *py;
-         p[ 2 ] = *pz;
-         if( p[ 0 ] != AST__BAD && 
-             p[ 1 ] != AST__BAD && 
-             p[ 2 ] != AST__BAD ) {
-             palSlaDvn( p, q, &radius );
-             palSlaDcc2s( q, &lng, &lat );
-             *(px++) = palSlaDranrm( lng );
-             *(py++) = lat;
-             *(pz++) = radius;
-         } else {
-            *(px++) = AST__BAD;
-            *(py++) = AST__BAD;
-            *(pz++) = AST__BAD;
-         }
-      }      
-   }
-
-/* If out[2] was supplied as null, free the memory used to hold third axis
-   values. */
-   if( !out[2] ) out2 = (double *) astFree( (void *) out2 );
-}
-
-void astInitSlaMapVtab_(  AstSlaMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSlaMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SlaMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void astInitSlaMapVtab( AstSlaMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SlaMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SlaMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASlaMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->SlaAdd = SlaAdd;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "SlaMap",
-               "Conversion between sky coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing an SlaMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     SlaMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated SlaMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated SlaMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated SlaMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the SlaMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        SlaMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated SlaMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   AstSlaMap *slamap;            /* Pointer to SlaMap */
-   const char *argdesc[ MAX_SLA_ARGS ]; /* Argument descriptions (junk) */
-   const char *class;            /* Pointer to Mapping class string */
-   const char *comment;          /* Pointer to comment string (junk) */
-   double (*cvtargs)[ MAX_SLA_ARGS ]; /* Pointer to argument arrays */
-   int *cvttype;                 /* Pointer to transformation type codes */
-   int *narg;                    /* Pointer to argument count array */
-   int done;                     /* Finished (no further simplification)? */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt1;                    /* Loop initial value */
-   int icvt2;                    /* Loop final value */
-   int icvt;                     /* Loop counter for transformation steps */
-   int ikeep;                    /* Index to store step being kept */
-   int imap1;                    /* Index of first SlaMap to merge */
-   int imap2;                    /* Index of last SlaMap to merge */
-   int imap;                     /* Loop counter for Mappings */
-   int inc;                      /* Increment for transformation step loop */
-   int invert;                   /* SlaMap applied in inverse direction? */
-   int istep;                    /* Loop counter for transformation steps */
-   int keep;                     /* Keep transformation step? */
-   int ngone;                    /* Number of Mappings eliminated */
-   int nstep0;                   /* Original number of transformation steps */
-   int nstep;                    /* Total number of transformation steps */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Simplification possible? */
-   int unit;                     /* Replacement Mapping is a UnitMap? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* SlaMaps can only be merged if they are in series (or if there is
-   only one Mapping present, in which case it makes no difference), so
-   do nothing if they are not. */
-   if ( series || ( *nmap == 1 ) ) {
-
-/* Initialise the number of transformation steps to be merged to equal
-   the number in the nominated SlaMap. */
-      nstep = ( (AstSlaMap *) ( *map_list )[ where ] )->ncvt;
-
-/* Search adjacent lower-numbered Mappings until one is found which is
-   not an SlaMap. Accumulate the number of transformation steps
-   involved in any SlaMaps found. */
-      imap1 = where;
-      while ( ( imap1 - 1 >= 0 ) && astOK ) {
-         class = astGetClass( ( *map_list )[ imap1 - 1 ] );
-         if ( !astOK || strcmp( class, "SlaMap" ) ) break;
-         nstep += ( (AstSlaMap *) ( *map_list )[ imap1 - 1 ] )->ncvt;
-         imap1--;
-      }
-
-/* Similarly search adjacent higher-numbered Mappings. */
-      imap2 = where;
-      while ( ( imap2 + 1 < *nmap ) && astOK ) {
-         class = astGetClass( ( *map_list )[ imap2 + 1 ] );
-         if ( !astOK || strcmp( class, "SlaMap" ) ) break;
-         nstep += ( (AstSlaMap *) ( *map_list )[ imap2 + 1 ] )->ncvt;
-         imap2++;
-      }
-
-/* Remember the initial number of transformation steps. */
-      nstep0 = nstep;
-
-/* Allocate memory for accumulating a list of all the transformation
-   steps involved in all the SlaMaps found. */
-      cvttype = astMalloc( sizeof( int ) * (size_t) nstep );
-      cvtargs = astMalloc( sizeof( double[ MAX_SLA_ARGS ] ) * (size_t) nstep );
-      narg = astMalloc( sizeof( int ) * (size_t) nstep );
-
-/* Loop to obtain the transformation data for each SlaMap being merged. */
-      nstep = 0;
-      for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-
-/* Obtain a pointer to the SlaMap and note if it is being applied in
-   its inverse direction. */
-         slamap = (AstSlaMap *) ( *map_list )[ imap ];
-         invert = ( *invert_list )[ imap ];
-
-/* Set up loop limits and an increment to scan the transformation
-   steps in each SlaMap in either the forward or reverse direction, as
-   dictated by the associated "invert" value. */
-         icvt1 = invert ? slamap->ncvt - 1 : 0;
-         icvt2 = invert ? -1 : slamap->ncvt;
-         inc = invert ? -1 : 1;
-
-/* Loop through each transformation step in the SlaMap. */
-         for ( icvt = icvt1; icvt != icvt2; icvt += inc ) {
-
-/* For simplicity, free any extra information stored with the conversion 
-   step (it will be recreated as and when necessary). */
-            slamap->cvtextra[ icvt ] = astFree( slamap->cvtextra[ icvt ] );
-
-/* Store the transformation type code and use "CvtString" to determine
-   the associated number of arguments. Then store these arguments. */
-            cvttype[ nstep ] = slamap->cvttype[ icvt ];
-            (void) CvtString( cvttype[ nstep ], &comment, narg + nstep,
-                              argdesc, status );
-            if ( !astOK ) break;
-            for ( iarg = 0; iarg < narg[ nstep ]; iarg++ ) {
-               cvtargs[ nstep ][ iarg ] = slamap->cvtargs[ icvt ][ iarg ];
-            }
-
-/* If the SlaMap is inverted, we must not only accumulate its
-   transformation steps in reverse, but also apply them in
-   reverse. For some steps this means swapping arguments, for some it
-   means changing the transformation type code to a complementary
-   value, and for others it means both.  Define macros to perform each
-   of these changes. */
-
-/* Macro to swap the values of two nominated arguments if the
-   transformation type code matches "code". */
-#define SWAP_ARGS( code, arg1, arg2 ) \
-            if ( cvttype[ nstep ] == code ) { \
-               double tmp = cvtargs[ nstep ][ arg1 ]; \
-               cvtargs[ nstep ][ arg1 ] = cvtargs[ nstep ][ arg2 ]; \
-               cvtargs[ nstep ][ arg2 ] = tmp; \
-            }
-
-/* Macro to exchange a transformation type code for its inverse (and
-   vice versa). */
-#define SWAP_CODES( code1, code2 ) \
-            if ( cvttype[ nstep ] == code1 ) { \
-               cvttype[ nstep ] = code2; \
-            } else if ( cvttype[ nstep ] == code2 ) { \
-               cvttype[ nstep ] = code1; \
-            }
-
-/* Use these macros to apply the changes where needed. */
-            if ( invert ) {
-
-/* E-terms of aberration. */
-/* ---------------------- */
-/* Exchange addition and subtraction of E-terms. */
-               SWAP_CODES( AST__SLA_ADDET, AST__SLA_SUBET )
-
-/* Bessel-Newcomb pre-IAU 1976 (FK4) precession model. */
-/* --------------------------------------------------- */
-/* Exchange the starting and ending Besselian epochs. */
-               SWAP_ARGS( AST__SLA_PREBN, 0, 1 )
-
-/* IAU 1975 (FK5) precession model. */
-/* -------------------------------- */
-/* Exchange the starting and ending epochs. */
-               SWAP_ARGS( AST__SLA_PREC, 0, 1 )
-
-/* FK4 to FK5 (no proper motion or parallax). */
-/* ------------------------------------------ */
-/* Exchange FK5 to FK4 conversion for its inverse, and vice versa. */
-               SWAP_CODES( AST__SLA_FK54Z, AST__SLA_FK45Z )
-
-/* Geocentric apparent to mean place. */
-/* ---------------------------------- */
-/* Exchange the transformation code for its inverse and also exchange
-   the order of the date and equinox arguments. */
-               SWAP_CODES( AST__SLA_AMP, AST__SLA_MAP )
-               SWAP_ARGS( AST__SLA_AMP, 0, 1 )
-               SWAP_ARGS( AST__SLA_MAP, 0, 1 )
-
-/* Ecliptic coordinates to FK5 J2000.0 equatorial. */
-/* ------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__SLA_ECLEQ, AST__SLA_EQECL )
-
-/* Horizon to equatorial. */
-/* ---------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__SLA_DH2E, AST__SLA_DE2H )
-
-/* Galactic coordinates to FK5 J2000.0 equatorial. */
-/* ------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__SLA_GALEQ, AST__SLA_EQGAL )
-
-/* ICRS coordinates to FK5 J2000.0 equatorial. */
-/* ------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__SLA_HFK5Z, AST__SLA_FK5HZ )
-
-/* Galactic to supergalactic coordinates. */
-/* -------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__SLA_GALSUP, AST__SLA_SUPGAL )
-
-/* FK5 J2000 equatorial coordinates to Helioprojective-Cartesian. */
-/* -------------------------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__EQHPC, AST__HPCEQ )
-
-/* FK5 J2000 equatorial coordinates to Helioprojective-Radial. */
-/* ----------------------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__EQHPR, AST__HPREQ )
-
-/* FK5 J2000 equatorial coordinates to Helio-ecliptic. */
-/* --------------------------------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__EQHE, AST__HEEQ )
-
-/* Dynamical J2000.0 to ICRS. */
-/* -------------------------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__J2000H, AST__HJ2000 )
-
-/* HA to RA */
-/* -------- */
-/* Exchange the transformation code for its inverse. */
-               SWAP_CODES( AST__H2R, AST__R2H )
-
-            }
-
-/* Undefine the local macros. */
-#undef SWAP_ARGS
-#undef SWAP_CODES
-
-/* Count the transformation steps. */
-            nstep++;
-         }
-      }
-
-/* Loop to simplify the sequence of transformation steps until no
-   further improvement is possible. */
-      done = 0;
-      while ( astOK && !done ) {
-
-/* Examine each remaining transformation step in turn.  */
-         ikeep = -1;
-         for ( istep = 0; istep < nstep; istep++ ) {
-
-/* Initially assume we will retain the current step. */
-            keep = 1;
-
-/* Eliminate redundant precession corrections. */
-/* ------------------------------------------- */
-/* First check if this is a redundant precession transformation
-   (i.e. the starting and ending epochs are the same). If so, then
-   note that it should not be kept. */
-            if ( ( ( cvttype[ istep ] == AST__SLA_PREBN ) ||
-                   ( cvttype[ istep ] == AST__SLA_PREC ) ) &&
-                 EQUAL( cvtargs[ istep ][ 0 ], cvtargs[ istep ][ 1 ] ) ) {
-               keep = 0;
-
-/* The remaining simplifications act to combine adjacent
-   transformation steps, so only apply them while there are at least 2
-   steps left. */
-            } else if ( istep < ( nstep - 1 ) ) {
-
-/* Define a macro to test if two adjacent transformation type codes
-   have specified values. */
-#define PAIR_CVT( code1, code2 ) \
-               ( ( cvttype[ istep ] == code1 ) && \
-                 ( cvttype[ istep + 1 ] == code2 ) )
-
-/* Combine adjacent precession corrections. */
-/* ---------------------------------------- */
-/* If two precession corrections are adjacent, and have an equinox
-   value in common, then they may be combined into a single correction
-   by eliminating the common equinox. */
-               if ( ( PAIR_CVT( AST__SLA_PREBN, AST__SLA_PREBN ) ||
-                      PAIR_CVT( AST__SLA_PREC, AST__SLA_PREC ) ) &&
-                    EQUAL( cvtargs[ istep ][ 1 ], cvtargs[ istep + 1 ][ 0 ] ) ) {
-
-/* Retain the second correction, changing its first argument, and
-   eliminate the first correction. */
-                  cvtargs[ istep + 1 ][ 0 ] = cvtargs[ istep ][ 0 ];
-                  istep++;
-
-/* Eliminate redundant E-term handling. */
-/* ------------------------------------ */
-/* Check if adjacent steps implement a matching pair of corrections
-   for the E-terms of aberration with the same argument value. If so,
-   they will cancel, so eliminate them both. */
-               } else if ( ( PAIR_CVT( AST__SLA_SUBET, AST__SLA_ADDET ) ||
-                             PAIR_CVT( AST__SLA_ADDET, AST__SLA_SUBET ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ], 
-                                  cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant FK4/FK5 conversions. */
-/* ---------------------------------------- */
-/* Similarly, check for a matching pair of FK4/FK5 conversions with
-   the same argument value and eliminate them both if possible. */
-               } else if ( ( PAIR_CVT( AST__SLA_FK45Z, AST__SLA_FK54Z ) ||
-                             PAIR_CVT( AST__SLA_FK54Z, AST__SLA_FK45Z ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ], 
-                                  cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant ICRS/FK5 conversions. */
-/* ----------------------------------------- */
-/* Similarly, check for a matching pair of ICRS/FK5 conversions with
-   the same argument value and eliminate them both if possible. */
-               } else if ( ( PAIR_CVT( AST__SLA_HFK5Z, AST__SLA_FK5HZ ) ||
-                             PAIR_CVT( AST__SLA_FK5HZ, AST__SLA_HFK5Z ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ], 
-                                  cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant geocentric apparent conversions. */
-/* ---------------------------------------------------- */
-/* As above, check for a matching pair of conversions with matching
-   argument values (note the argument order reverses for the two
-   directions) and eliminate them if possible. */
-               } else if ( ( PAIR_CVT( AST__SLA_AMP, AST__SLA_MAP ) ||
-                             PAIR_CVT( AST__SLA_MAP, AST__SLA_AMP ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                                  cvtargs[ istep + 1 ][ 0 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 1 ],
-                                  cvtargs[ istep + 1 ][ 1 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant ecliptic coordinate conversions. */
-/* ---------------------------------------------------- */
-/* This is handled in the same way as the FK4/FK5 case. */
-               } else if ( ( PAIR_CVT( AST__SLA_ECLEQ, AST__SLA_EQECL ) ||
-                             PAIR_CVT( AST__SLA_EQECL, AST__SLA_ECLEQ ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                                  cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant AzEl coordinate conversions. */
-/* ------------------------------------------------ */
-               } else if ( ( PAIR_CVT( AST__SLA_DH2E, AST__SLA_DE2H ) ||
-                             PAIR_CVT( AST__SLA_DE2H, AST__SLA_DH2E ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                                  cvtargs[ istep + 1 ][ 0 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 1 ],
-                                  cvtargs[ istep + 1 ][ 1 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant galactic coordinate conversions. */
-/* ---------------------------------------------------- */
-/* This is handled as above, except that there are no arguments to
-   check. */
-               } else if ( PAIR_CVT( AST__SLA_GALEQ, AST__SLA_EQGAL ) ||
-                           PAIR_CVT( AST__SLA_EQGAL, AST__SLA_GALEQ ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant supergalactic coordinate conversions. */
-/* --------------------------------------------------------- */
-/* This is handled as above. */
-               } else if ( PAIR_CVT( AST__SLA_GALSUP, AST__SLA_SUPGAL ) ||
-                           PAIR_CVT( AST__SLA_SUPGAL, AST__SLA_GALSUP ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant helioprojective-Cartesian coordinate conversions. */
-/* --------------------------------------------------------------------- */
-               } else if ( ( PAIR_CVT( AST__HPCEQ, AST__EQHPC ) ||
-                             PAIR_CVT( AST__EQHPC, AST__HPCEQ ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                             cvtargs[ istep + 1 ][ 0 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 1 ],
-                             cvtargs[ istep + 1 ][ 1 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 2 ],
-                             cvtargs[ istep + 1 ][ 2 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 3 ],
-                             cvtargs[ istep + 1 ][ 3 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant helioprojective-Radial coordinate conversions. */
-/* --------------------------------------------------------------------- */
-               } else if ( ( PAIR_CVT( AST__HPREQ, AST__EQHPR ) ||
-                             PAIR_CVT( AST__EQHPR, AST__HPREQ ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                             cvtargs[ istep + 1 ][ 0 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 1 ],
-                             cvtargs[ istep + 1 ][ 1 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 2 ],
-                             cvtargs[ istep + 1 ][ 2 ] ) &&
-                           EQUAL( cvtargs[ istep ][ 3 ],
-                             cvtargs[ istep + 1 ][ 3 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant helio-ecliptic coordinate conversions. */
-/* ---------------------------------------------------------- */
-               } else if ( ( PAIR_CVT( AST__EQHE, AST__HEEQ ) ||
-                             PAIR_CVT( AST__HEEQ, AST__EQHE ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                                  cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant dynamical J2000 coordinate conversions. */
-/* ----------------------------------------------------------- */
-               } else if ( PAIR_CVT( AST__J2000H, AST__HJ2000 ) ||
-                           PAIR_CVT( AST__HJ2000, AST__J2000H ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Eliminate redundant Hour Angle conversions. */
-/* ------------------------------------------- */
-               } else if ( ( PAIR_CVT( AST__R2H, AST__H2R ) ||
-                             PAIR_CVT( AST__H2R, AST__R2H ) ) &&
-                           EQUAL( cvtargs[ istep ][ 0 ],
-                                  cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-               }
-
-/* Undefine the local macro. */
-#undef PAIR_CVT
-            }
-
-/* If the current transformation (possibly modified above) is being
-   kept, then increment the index that identifies its new location in
-   the list of transformation steps. */
-            if ( keep ) {
-               ikeep++;
-
-/* If the new location is different to its current location, copy the
-   transformation data into the new location. */
-               if ( ikeep != istep ) {
-                  cvttype[ ikeep ] = cvttype[ istep ];
-                  for ( iarg = 0; iarg < narg[ istep ]; iarg++ ) {
-                     cvtargs[ ikeep ][ iarg ] = cvtargs[ istep ][ iarg ];
-                  }
-                  narg[ ikeep ] = narg[ istep ];
-               }
-            }
-         }
-
-/* Note if no simplification was achieved on this iteration (i.e. the
-   number of transformation steps was not reduced). This is the signal
-   to quit. */
-         done = ( ( ikeep + 1 ) >= nstep );
-
-/* Note how many transformation steps now remain. */
-         nstep = ikeep + 1;
-      }
-
-/* Determine how many Mappings can be eliminated by condensing all
-   those considered above into a single Mapping. */
-      if ( astOK ) {
-         ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap (a null
-   Mapping). This will only be the case if all the transformation
-   steps were eliminated above. */
-         unit = ( nstep == 0 );
-
-/* Determine if simplification is possible. This will be the case if
-   (a) Mappings were eliminated ("ngone" is non-zero), or (b) the
-   number of transformation steps was reduced, or (c) the SlaMap(s)
-   can be replaced by a UnitMap, or (d) if there was initially only
-   one SlaMap present, its invert flag was set (this flag will always
-   be cleared in the replacement Mapping). */
-         simpler = ngone || ( nstep < nstep0 ) || unit ||
-                   ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
-         if ( simpler ) {
-
-/* If the replacement Mapping is a UnitMap, then create it. */
-            if ( unit ) {
-               new = (AstMapping *)
-                        astUnitMap( astGetNin( ( *map_list )[ where ] ), "", status );
-
-/* Otherwise, create a replacement SlaMap and add each of the
-   remaining transformation steps to it. */
-            } else {
-               new = (AstMapping *) astSlaMap( 0, "", status );
-               for ( istep = 0; istep < nstep; istep++ ) {
-                  AddSlaCvt( (AstSlaMap *) new, cvttype[ istep ],
-                             cvtargs[ istep ], status );
-               }
-            }
-
-/* Annul the pointers to the Mappings being eliminated. */
-            if ( astOK ) {
-               for ( imap = imap1; imap <= imap2; imap++ ) {
-                  ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
-               }
-
-/* Insert the pointer and invert value for the new Mapping. */
-               ( *map_list )[ imap1 ] = new;
-               ( *invert_list )[ imap1 ] = 0;
-
-/* Move any subsequent Mapping information down to close the gap. */
-               for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
-                  ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
-               }
-
-/* Blank out any information remaining at the end of the arrays. */
-               for ( imap = ( *nmap - ngone ); imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap ] = NULL;
-                  ( *invert_list )[ imap ] = 0;
-               }
-
-/* Decrement the Mapping count and return the index of the first
-   Mapping which was eliminated. */
-               ( *nmap ) -= ngone;
-               result = imap1;
-
-/* If an error occurred, annul the new Mapping pointer. */
-            } else {
-               new = astAnnul( new );
-            }
-         }
-      }
-
-/* Free the memory used for the transformation steps. */
-      cvttype = astFree( cvttype );
-      cvtargs = astFree( cvtargs );
-      narg = astFree( narg );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static void SlaAdd( AstSlaMap *this, const char *cvt, const double args[], int *status ) {
-/*
-*++
-*  Name:
-c     astSlaAdd
-f     AST_SLAADD
-
-*  Purpose:
-*     Add a celestial coordinate conversion to an SlaMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "slamap.h"
-c     void astSlaAdd( AstSlaMap *this, const char *cvt, const double args[] )
-f     CALL AST_SLAADD( THIS, CVT, ARGS, STATUS )
-
-*  Class Membership:
-*     SlaMap method.
-
-*  Description:
-c     This function adds one of the standard celestial coordinate
-f     This routine adds one of the standard celestial coordinate
-*     system conversions provided by the SLALIB Positional Astronomy
-*     Library (Starlink User Note SUN/67) to an existing SlaMap.
-*
-c     When an SlaMap is first created (using astSlaMap), it simply
-f     When an SlaMap is first created (using AST_SLAMAP), it simply
-c     performs a unit (null) Mapping. By using astSlaAdd (repeatedly
-f     performs a unit (null) Mapping. By using AST_SLAADD (repeatedly
-*     if necessary), one or more coordinate conversion steps may then
-*     be added, which the SlaMap will perform in sequence. This allows
-*     multi-step conversions between a variety of celestial coordinate
-*     systems to be assembled out of the building blocks provided by
-*     SLALIB.
-*
-*     Normally, if an SlaMap's Invert attribute is zero (the default),
-*     then its forward transformation is performed by carrying out
-*     each of the individual coordinate conversions specified by
-c     astSlaAdd in the order given (i.e. with the most recently added
-f     AST_SLAADD in the order given (i.e. with the most recently added
-*     conversion applied last).
-*
-*     This order is reversed if the SlaMap's Invert attribute is
-*     non-zero (or if the inverse transformation is requested by any
-*     other means) and each individual coordinate conversion is also
-*     replaced by its own inverse. This process inverts the overall
-*     effect of the SlaMap. In this case, the first conversion to be
-*     applied would be the inverse of the one most recently added.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the SlaMap.
-c     cvt
-f     CVT = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string which identifies the
-f        A character string which identifies the
-*        celestial coordinate conversion to be added to the
-*        SlaMap. See the "SLALIB Conversions" section for details of
-*        those available.
-c     args
-f     ARGS( * ) = DOUBLE PRECISION (Given)
-*        An array containing argument values for the celestial
-*        coordinate conversion. The number of arguments required, and
-*        hence the number of array elements used, depends on the
-*        conversion specified (see the "SLALIB Conversions"
-*        section). This array is ignored
-c        and a NULL pointer may be supplied
-*        if no arguments are needed.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - All coordinate values processed by an SlaMap are in
-*     radians. The first coordinate is the celestial longitude and the
-*     second coordinate is the celestial latitude.
-*     - When assembling a multi-stage conversion, it can sometimes be
-*     difficult to determine the most economical conversion path. For
-*     example, converting to the standard FK5 coordinate system as an
-*     intermediate stage is often sensible in formulating the problem,
-*     but may introduce unnecessary extra conversion steps. A solution
-*     to this is to include all the steps which are (logically)
-c     necessary, but then to use astSimplify to simplify the resulting
-f     necessary, but then to use AST_SIMPLIFY to simplify the resulting
-*     SlaMap. The simplification process will eliminate any steps
-*     which turn out not to be needed.
-c     - This function does not check to ensure that the sequence of
-f     - This routine does not check to ensure that the sequence of
-*     coordinate conversions added to an SlaMap is physically
-*     meaningful.
-
-*  SLALIB Conversions:
-*     The following strings (which are case-insensitive) may be supplied
-c     via the "cvt" parameter to indicate which celestial coordinate
-f     via the CVT argument to indicate which celestial coordinate
-*     conversion is to be added to the SlaMap. Each string is derived
-*     from the name of the SLALIB routine that performs the
-*     conversion and the relevant documentation (SUN/67) should be
-*     consulted for details.  Where arguments are needed by
-*     the conversion, they are listed in parentheses. Values for
-c     these arguments should be given, via the "args" array, in the
-f     these arguments should be given, via the ARGS array, in the
-*     order indicated. The argument names match the corresponding
-*     SLALIB routine arguments and their values should be given using
-*     exactly the same units, time scale, calendar, etc. as described
-*     in SUN/67:
-*
-*     - "ADDET" (EQ): Add E-terms of aberration.
-*     - "SUBET" (EQ): Subtract E-terms of aberration.
-*     - "PREBN" (BEP0,BEP1): Apply Bessel-Newcomb pre-IAU 1976 (FK4)
-*     precession model.
-*     - "PREC" (EP0,EP1): Apply IAU 1975 (FK5) precession model.
-*     - "FK45Z" (BEPOCH): Convert FK4 to FK5 (no proper motion or parallax).
-*     - "FK54Z" (BEPOCH): Convert FK5 to FK4 (no proper motion or parallax).
-*     - "AMP" (DATE,EQ): Convert geocentric apparent to mean place.
-*     - "MAP" (EQ,DATE): Convert mean place to geocentric apparent.
-*     - "ECLEQ" (DATE): Convert ecliptic coordinates to FK5 J2000.0 equatorial.
-*     - "EQECL" (DATE): Convert equatorial FK5 J2000.0 to ecliptic coordinates.
-*     - "GALEQ": Convert galactic coordinates to FK5 J2000.0 equatorial.
-*     - "EQGAL": Convert FK5 J2000.0 equatorial to galactic coordinates.
-*     - "HFK5Z" (JEPOCH): Convert ICRS coordinates to FK5 J2000.0 equatorial.
-*     - "FK5HZ" (JEPOCH): Convert FK5 J2000.0 equatorial coordinates to ICRS.
-*     - "GALSUP": Convert galactic to supergalactic coordinates.
-*     - "SUPGAL": Convert supergalactic coordinates to galactic.
-*     - "J2000H": Convert dynamical J2000.0 to ICRS.
-*     - "HJ2000": Convert ICRS to dynamical J2000.0.
-*     - "R2H" (LAST): Convert RA to Hour Angle.
-*     - "H2R" (LAST): Convert Hour Angle to RA.
-*
-*     For example, to use the "ADDET" conversion, which takes a single
-*     argument EQ, you should consult the documentation for the SLALIB
-*     routine SLA_ADDET. This describes the conversion in detail and
-*     shows that EQ is the Besselian epoch of the mean equator and
-*     equinox.
-c     This value should then be supplied to astSlaAdd in args[0].
-f     This value should then be supplied to AST_SLAADD in ARGS(1).
-*
-*     In addition the following strings may be supplied for more complex
-*     conversions which do not correspond to any one single SLALIB routine
-*     (DIURAB is the magnitude of the diurnal aberration vector in units
-*     of "day/(2.PI)", DATE is the Modified Julian Date of the observation, 
-*     and (OBSX,OBSY,OBZ) are the Heliocentric-Aries-Ecliptic cartesian 
-*     coordinates, in metres, of the observer):
-*
-*     - "HPCEQ" (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Cartesian coordinates to J2000.0 equatorial.
-*     - "EQHPC" (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-*     - "HPREQ" (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-*     - "EQHPR" (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-*     - "HEEQ" (DATE): Convert helio-ecliptic coordinates to J2000.0 equatorial.
-*     - "EQHE" (DATE): Convert J2000.0 equatorial coordinates to helio-ecliptic.
-*     - "H2E" (LAT,DIRUAB): Convert horizon coordinates to equatorial.
-*     - "E2H" (LAT,DIURAB): Convert equatorial coordinates to horizon.
-*
-*     Note, the "H2E" and "E2H" conversions convert between topocentric
-*     horizon coordinates (azimuth,elevation), and apparent local equatorial
-*     coordinates (hour angle,declination). Thus, the effects of diurnal
-*     aberration are taken into account in the conversions but the effects 
-*     of atmospheric refraction are not.
-
-*--
-*/
-
-/* Local Variables: */
-   int cvttype;                  /* Conversion type code */
-
-/* Check the inherited status. */
-   if ( !astOK ) return;
-
-/* Validate the type string supplied and obtain the equivalent
-   conversion type code. */
-   cvttype = CvtCode( cvt, status );
-
-/* If the string was not recognised, then report an error. */
-   if ( astOK && ( cvttype == AST__SLA_NULL ) ) {
-      astError( AST__SLAIN,
-                "astSlaAdd(%s): Invalid SLALIB sky coordinate conversion "
-                "type \"%s\".", status, astGetClass( this ), cvt );
-   }
-
-/* Add the new conversion to the SlaMap. */
-   AddSlaCvt( this, cvttype, args, status );
-}
-
-static void SolarPole( double mjd, double pole[3], int *status ) {
-/*
-*  Name:
-*     SolarPole
-
-*  Purpose:
-*     Returns a unit vector along the solar north pole at the given date.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void SolarPole( double mjd, double pole[3], int *status )
-
-*  Class Membership:
-*     SlaMap member function.
-
-*  Description:
-*     This function returns a unit vector along the solar north pole at 
-*     the given date, in the AST__HAEC coordinate system.
-
-*  Parameters:
-*     mjd 
-*        The date at which the solar north pole vector is required.
-*     pole
-*        An array holding the (X,Y,Z) components of the vector, in the
-*        AST__HAEC system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  AST__BAD will be returned for all components of the vector if this 
-*     function is invoked with the global error status set, or if it should 
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   double omega;      
-   double sproj;
-   double inc;
-   double t1;
-
-/* Initialize. */
-   pole[0] = AST__BAD;
-   pole[1] = AST__BAD;
-   pole[2] = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* First, we find the ecliptic longitude of the ascending node of the solar 
-   equator on the ecliptic at the required date. This is based on the 
-   equation in the "Explanatory Supplement to the Astronomical Alamanac", 
-   section "Physical Ephemeris of the Sun":
-
-   Omega = 75.76 + 0.01397*T degrees
-
-   Note, the text at the start of the chapter says that "T" is measured in
-   centuries since J2000, but the equivalent expression in Table 15.4 is 
-   only consistent with the above equation if "T" is measured in days since
-   J2000. We assume T is in days. The text does not explicitly say so,
-   but we assume that this longitude value (Omega) is with respect to the
-   mean equinox of J2000.0. */
-   omega = 75.76 + 0.01397*( palSlaEpj(mjd) - 2000.0 );
-
-/* Convert this to the ecliptic longitude of the projection of the sun's 
-   north pole onto the ecliptic, in radians. */
-   sproj = ( omega - 90.0 )*D2R;
-
-/* Obtain a unit vector parallel to the sun's north pole, in terms of
-   the required ecliptic (X,Y,Z) axes, in which X points towards ecliptic 
-   longitude/latitude ( 0, 0 ), Y axis points towards ecliptic 
-   longitude/latitude ( 90, 0 ) degrees, and Z axis points towards the 
-   ecliptic north pole. The inclination of the solar axis to the ecliptic 
-   axis (7.25 degrees) is taken from the "Explanatory Supplement" section 
-   "The Physical Ephemeris of the Sun". */
-   inc = 7.25*D2R;
-   t1 = sin( inc );
-   pole[ 0 ]= t1*cos( sproj );
-   pole[ 1 ] = t1*sin( sproj );
-   pole[ 2 ] = cos( inc );
-
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply an SlaMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     SlaMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes an SlaMap and a set of points encapsulated
-*     in a PointSet and transforms the points so as to perform the
-*     sequence of SLALIB sky coordinate conversions specified by
-*     previous invocations of astSlaAdd.
-
-*  Parameters:
-*     this
-*        Pointer to the SlaMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the SlaMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstSlaMap *map;               /* Pointer to SlaMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *alpha;                /* Pointer to longitude array */
-   double *args;                 /* Pointer to argument list for conversion */
-   double *extra;                /* Pointer to intermediate values */
-   double *delta;                /* Pointer to latitude array */
-   double *p[3];                 /* Pointers to arrays to be transformed */
-   double *obs;                  /* Pointer to array holding observers position */
-   int cvt;                      /* Loop counter for conversions */
-   int ct;                       /* Conversion type */
-   int end;                      /* Termination index for conversion loop */
-   int inc;                      /* Increment for conversion loop */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-   int start;                    /* Starting index for conversion loop */
-   int sys;                      /* STP coordinate system code */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this);
-
-/* Obtain a pointer to the SlaMap. */
-   map = (AstSlaMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   coordinate conversions needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord_in = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
-   to the direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( this ) ) forward = !forward;
-
-/* Transform the coordinate values. */
-/* -------------------------------- */
-/* Use "alpha" and "delta" as synonyms for the arrays of longitude and latitude
-   coordinate values stored in the output PointSet. */
-   if ( astOK ) {
-      alpha = ptr_out[ 0 ];
-      delta = ptr_out[ 1 ];
-
-/* Initialise the output coordinate values by copying the input ones. */
-      (void) memcpy( alpha, ptr_in[ 0 ], sizeof( double ) * (size_t) npoint );
-      (void) memcpy( delta, ptr_in[ 1 ], sizeof( double ) * (size_t) npoint );
-
-/* We will loop to apply each SLALIB sky coordinate conversion in turn to the
-   (alpha,delta) arrays. However, if the inverse transformation was requested,
-   we must loop through these transformations in reverse order, so set up
-   appropriate limits and an increment to control this loop. */
-      start = forward ? 0 : map->ncvt - 1;
-      end = forward ? map->ncvt : -1;
-      inc = forward ? 1 : -1;
-
-/* Loop through the coordinate conversions in the required order and obtain a
-   pointer to the argument list for the current conversion. */
-      for ( cvt = start; cvt != end; cvt += inc ) {
-         args = map->cvtargs[ cvt ];
-         extra = map->cvtextra[ cvt ];
-
-/* Define a local macro as a shorthand to apply the code given as "function"
-   (the macro argument) to each element of the (alpha,delta) arrays in turn.
-   Before applying this conversion function, each element is first checked for
-   "bad" coordinates (indicated by the value AST__BAD) and appropriate "bad"
-   result values are assigned if necessary. */
-#define TRAN_ARRAY(function) \
-        for ( point = 0; point < npoint; point++ ) { \
-           if ( ( alpha[ point ] == AST__BAD ) || \
-                ( delta[ point ] == AST__BAD ) ) { \
-              alpha[ point ] = AST__BAD; \
-              delta[ point ] = AST__BAD; \
-	   } else { \
-              function \
-	   } \
-        }
-
-/* Classify the SLALIB sky coordinate conversion to be applied. */
-         ct = map->cvttype[ cvt ];
-         switch ( ct ) {
-
-/* Add E-terms of aberration. */
-/* -------------------------- */
-/* Add or subtract (for the inverse) the E-terms from each coordinate pair
-   in turn, returning the results to the same arrays. */
-            case AST__SLA_ADDET:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaAddet( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-	       } else {
-                  TRAN_ARRAY(palSlaSubet( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-               }
-               break;
-
-/* Subtract E-terms of aberration. */
-/* ------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-            case AST__SLA_SUBET:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaSubet( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-	       } else {
-                  TRAN_ARRAY(palSlaAddet( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-	       }
-               break;
-
-/* Apply Bessel-Newcomb pre-IAU 1976 (FK4) precession model. */
-/* --------------------------------------------------------- */
-/* Since we are transforming a sequence of points, first set up the required
-   precession matrix, swapping the argument order to get the inverse matrix
-   if required. */
-            case AST__SLA_PREBN:
-               {
-                  double epoch1 = forward ? args[ 0 ] : args[ 1 ];
-                  double epoch2 = forward ? args[ 1 ] : args[ 0 ];
-                  double precess_matrix[ 3 ][ 3 ];
-                  double vec1[ 3 ];
-                  double vec2[ 3 ];
-                  palSlaPrebn( epoch1, epoch2, precess_matrix );
-
-/* For each point in the (alpha,delta) arrays, convert to Cartesian
-   coordinates, apply the precession matrix, convert back to polar coordinates
-   and then constrain the longitude result to lie in the range 0 to 2*pi
-   (palSlaDcc2s doesn't do this itself). */
-                  TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ], vec1 );
-                             palSlaDmxv( precess_matrix, vec1, vec2 );
-                             palSlaDcc2s( vec2, alpha + point, delta + point );
-                             alpha[ point ] = palSlaDranrm( alpha[ point ] );)
-	       }
-               break;
-
-/* Apply IAU 1975 (FK5) precession model. */
-/* -------------------------------------- */
-/* This is handled in the same way as above, but using the appropriate FK5
-   precession matrix. */
-            case AST__SLA_PREC:
-               {
-                  double epoch1 = forward ? args[ 0 ] : args[ 1 ];
-                  double epoch2 = forward ? args[ 1 ] : args[ 0 ];
-                  double precess_matrix[ 3 ][ 3 ];
-                  double vec1[ 3 ];
-                  double vec2[ 3 ];
-                  palSlaPrec( epoch1, epoch2, precess_matrix );
-                  TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ], vec1 );
-                             palSlaDmxv( precess_matrix, vec1, vec2 );
-                             palSlaDcc2s( vec2, alpha + point, delta + point );
-                             alpha[ point ] = palSlaDranrm( alpha[ point ] );)
-	       }
-               break;
-
-/* Convert FK4 to FK5 (no proper motion or parallax). */
-/* -------------------------------------------------- */
-/* Apply the conversion to each point. */
-	    case AST__SLA_FK45Z:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaFk45z( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-
-/* The inverse transformation is also straightforward, except that we need a
-   couple of dummy variables as function arguments. */
-	       } else {
-                  double dr1950;
-                  double dd1950;
-                  TRAN_ARRAY(palSlaFk54z( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point,
-                                       &dr1950, &dd1950 );)
-	       }
-               break;
-
-/* Convert FK5 to FK4 (no proper motion or parallax). */
-/* -------------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_FK54Z:
-               if ( forward ) {
-                  double dr1950;
-                  double dd1950;
-                  TRAN_ARRAY(palSlaFk54z( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point,
-                                       &dr1950, &dd1950 );)
-	       } else {
-                  TRAN_ARRAY(palSlaFk45z( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-               }
-               break;
-
-/* Convert geocentric apparent to mean place. */
-/* ------------------------------------------ */
-/* Since we are transforming a sequence of points, first set up the required
-   parameter array. Than apply this to each point in turn. */
-	    case AST__SLA_AMP:
-               {
-
-                  if( !extra ) {
-
-                     if( args[ 1 ] != eq_cache ||
-                         args[ 0 ] != ep_cache ) {
-                        eq_cache = args[ 1 ];
-                        ep_cache = args[ 0 ];
-                        palSlaMappa( eq_cache, ep_cache, amprms_cache );
-                     }                        
-
-                     extra = astStore( NULL, amprms_cache,
-                                       sizeof( double )*21 );
-                     map->cvtextra[ cvt ] = extra;
-                  }
-
-                  if ( forward ) {
-                     TRAN_ARRAY(palSlaAmpqk( alpha[ point ], delta[ point ],
-                                          extra,
-                                          alpha + point, delta + point );)
-
-/* The inverse uses the same parameter array but converts from mean place
-   to geocentric apparent. */
-                  } else {
-                     TRAN_ARRAY(palSlaMapqkz( alpha[ point ], delta[ point ],
-                                           extra,
-                                           alpha + point, delta + point );)
-		  }
-               }
-               break;
-
-/* Convert mean place to geocentric apparent. */
-/* ------------------------------------------ */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_MAP:
-               {
-                  if( !extra ) {
-
-                     if( args[ 0 ] != eq_cache ||
-                         args[ 1 ] != ep_cache ) {
-                        eq_cache = args[ 0 ];
-                        ep_cache = args[ 1 ];
-                        palSlaMappa( eq_cache, ep_cache, amprms_cache );
-                     }                        
-
-                     extra = astStore( NULL, amprms_cache,
-                                       sizeof( double )*21 );
-                     map->cvtextra[ cvt ] = extra;
-                  }
-
-                  if ( forward ) {
-                     TRAN_ARRAY(palSlaMapqkz( alpha[ point ], delta[ point ],
-                                           extra, 
-                                           alpha + point, delta + point );)
-                  } else {
-                     TRAN_ARRAY(palSlaAmpqk( alpha[ point ], delta[ point ],
-                                          extra, 
-                                          alpha + point, delta + point );)
-		  }
-               }
-               break;
-
-/* Convert ecliptic coordinates to J2000.0 equatorial. */
-/* --------------------------------------------------- */
-/* Since we are transforming a sequence of points, first set up the required
-   conversion matrix (the conversion is a rotation). */
-	    case AST__SLA_ECLEQ:
-               {
-                  double convert_matrix[ 3 ][ 3 ];
-                  double precess_matrix[ 3 ][ 3 ];
-                  double rotate_matrix[ 3 ][ 3 ];
-                  double vec1[ 3 ];
-                  double vec2[ 3 ];
-
-/* Obtain the matrix that precesses equatorial coordinates from J2000.0 to the
-   required date. Also obtain the rotation matrix that converts from
-   equatorial to ecliptic coordinates.  */
-                  palSlaPrec( 2000.0, palSlaEpj( args[ 0 ] ), precess_matrix );
-                  palSlaEcmat( args[ 0 ], rotate_matrix );
-
-/* Multiply these matrices to give the overall matrix that converts from
-   equatorial J2000.0 coordinates to ecliptic coordinates for the required
-   date. */
-                  palSlaDmxm( rotate_matrix, precess_matrix, convert_matrix );
-
-/* Apply the conversion by transforming from polar to Cartesian coordinates,
-   multiplying by the inverse conversion matrix and converting back to polar
-   coordinates. Then constrain the longitude result to lie in the range
-   0 to 2*pi (palSlaDcc2s doesn't do this itself). */
-                  if ( forward ) {
-                     TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
-                                          vec1 );
-                                palSlaDimxv( convert_matrix, vec1, vec2 );
-                                palSlaDcc2s( vec2, alpha + point, delta + point );
-                                alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
-
-/* The inverse conversion is the same except that we multiply by the forward
-   conversion matrix (palSlaDmxv instead of palSlaDimxv). */
-                  } else {
-                     TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
-                                          vec1 );
-                                palSlaDmxv( convert_matrix, vec1, vec2 );
-                                palSlaDcc2s( vec2, alpha + point, delta + point );
-                                alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
-                  }
-	       }
-               break;
-
-/* Convert equatorial J2000.0 to ecliptic coordinates. */
-/* --------------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_EQECL:
-               {
-                  double convert_matrix[ 3 ][ 3 ];
-                  double precess_matrix[ 3 ][ 3 ];
-                  double rotate_matrix[ 3 ][ 3 ];
-                  double vec1[ 3 ];
-                  double vec2[ 3 ];
-
-/* Create the conversion matrix. */
-                  palSlaPrec( 2000.0, palSlaEpj( args[ 0 ] ), precess_matrix );
-                  palSlaEcmat( args[ 0 ], rotate_matrix );
-                  palSlaDmxm( rotate_matrix, precess_matrix, convert_matrix );
-
-/* Apply it. */
-                  if ( forward ) {
-                     TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
-                                          vec1 );
-                                palSlaDmxv( convert_matrix, vec1, vec2 );
-                                palSlaDcc2s( vec2, alpha + point, delta + point );
-                                alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
-                  } else {
-                     TRAN_ARRAY(palSlaDcs2c( alpha[ point ], delta[ point ],
-                                          vec1 );
-                                palSlaDimxv( convert_matrix, vec1, vec2 );
-                                palSlaDcc2s( vec2, alpha + point, delta + point );
-                                alpha[ point ] = palSlaDranrm ( alpha[ point ] );)
-                  }
-	       }
-               break;
-
-/* Convert ICRS to J2000.0 equatorial. */
-/* ----------------------------------- */
-/* Apply the conversion to each point. */
-	    case AST__SLA_HFK5Z:
-               if ( forward ) {
-                  double dr5;
-                  double dd5;
-                  TRAN_ARRAY(palSlaHfk5z( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point,
-                                       &dr5, &dd5 );)
-
-/* The inverse simply uses the inverse SLALIB function. */
-	       } else {
-                  TRAN_ARRAY(palSlaFk5hz( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-	       }
-               break;
-
-/* Convert J2000.0 to ICRS equatorial. */
-/* ----------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_FK5HZ:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaFk5hz( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
-	       } else {
-                  double dr5;
-                  double dd5;
-                  TRAN_ARRAY(palSlaHfk5z( alpha[ point ], delta[ point ],
-                                       args[ 0 ],
-                                       alpha + point, delta + point,
-                                       &dr5, &dd5 );)
-	       }
-               break;
-
-/* Convert horizon to equatorial. */
-/* ------------------------------ */
-/* Apply the conversion to each point. */
-	    case AST__SLA_DH2E:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaDh2e( alpha[ point ], delta[ point ],
-                                      args[ 0 ], args[ 1 ],
-                                      alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
-	       } else {
-                  TRAN_ARRAY(palSlaDe2h( alpha[ point ], delta[ point ],
-                                      args[ 0 ], args[ 1 ],
-                                      alpha + point, delta + point );)
-	       }
-               break;
-
-/* Convert equatorial to horizon. */
-/* ------------------------------ */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_DE2H:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaDe2h( alpha[ point ], delta[ point ],
-                                      args[ 0 ], args[ 1 ],
-                                      alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
-	       } else {
-                  TRAN_ARRAY(palSlaDh2e( alpha[ point ], delta[ point ],
-                                      args[ 0 ], args[ 1 ],
-                                      alpha + point, delta + point );)
-	       }
-               break;
-
-/* Convert galactic coordinates to J2000.0 equatorial. */
-/* --------------------------------------------------- */
-/* Apply the conversion to each point. */
-	    case AST__SLA_GALEQ:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaGaleq( alpha[ point ], delta[ point ],
-                                       alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
-	       } else {
-                  TRAN_ARRAY(palSlaEqgal( alpha[ point ], delta[ point ],
-                                       alpha + point, delta + point );)
-	       }
-               break;
-
-/* Convert J2000.0 equatorial to galactic coordinates. */
-/* --------------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_EQGAL:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaEqgal( alpha[ point ], delta[ point ],
-                                       alpha + point, delta + point );)
-	       } else {
-                  TRAN_ARRAY(palSlaGaleq( alpha[ point ], delta[ point ],
-                                       alpha + point, delta + point );)
-               }
-               break;
-
-/* Convert galactic to supergalactic coordinates. */
-/* ---------------------------------------------- */
-/* Apply the conversion to each point. */
-	    case AST__SLA_GALSUP:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaGalsup( alpha[ point ], delta[ point ],
-                                        alpha + point, delta + point );)
-
-/* The inverse simply uses the inverse SLALIB function. */
-               } else {
-                  TRAN_ARRAY(palSlaSupgal( alpha[ point ], delta[ point ],
-                                        alpha + point, delta + point );)
-               }
-               break;
-
-/* Convert supergalactic coordinates to galactic. */
-/* ---------------------------------------------- */
-/* This is the same as above, but with the forward and inverse cases
-   transposed. */
-	    case AST__SLA_SUPGAL:
-               if ( forward ) {
-                  TRAN_ARRAY(palSlaSupgal( alpha[ point ], delta[ point ],
-                                        alpha + point, delta + point );)
-               } else {
-                  TRAN_ARRAY(palSlaGalsup( alpha[ point ], delta[ point ],
-                                        alpha + point, delta + point );)
-               }
-               break;
-
-/* If the conversion type was not recognised, then report an error
-   (this should not happen unless validation in astSlaAdd has failed
-   to detect a bad value previously). */
-            default:
-               astError( AST__SLAIN, "astTransform(%s): Corrupt %s contains "
-                         "invalid SLALIB sky coordinate conversion code (%d).", status,
-                         astGetClass( this ), astGetClass( this ),
-                         (int) ct );
-               break;
-
-/* Convert any STP coordinates to J2000 equatorial. */
-/* ------------------------------------------------ */
-            case AST__HPCEQ:
-            case AST__HPREQ:
-            case AST__HEEQ:
-               {
-
-/* Get the code for the appropriate 3D STP coordinate system to use.
-   Also, get a point to the observer position, if needed. */
-                  if( ct == AST__HPCEQ ) {
-                    sys = AST__HPC;
-                    obs = args + 1;
-
-                  } else if( ct == AST__HPREQ ) {
-                    sys = AST__HPR;
-                    obs = args + 1;
-
-                  } else {
-                    sys = AST__GSE;
-                    obs = NULL;
-
-                  }
-
-/* Store the 3D positions to be transformed. The supplied arrays are used
-   for the longitude and latitude values. No radius values are supplied.
-   (a value of 1AU will be used in the transformation). */
-                  p[0] = alpha;
-                  p[1] = delta;
-                  p[2] = NULL;
-
-/* Convert the supplied positions to (or from) AST__HEQ, ignoring the 
-   distinction between the origin of the input and output systems (which
-   is appropriate since we are considering points at an infinite distance
-   from the observer). */
-                  if( forward ) {
-                     STPConv( args[ 0 ], 1, npoint, sys, obs, p,
-                              AST__HAQ, NULL, p, status );
-                  } else {
-                     STPConv( args[ 0 ], 1, npoint, AST__HAQ, NULL, p,
-                              sys, obs, p, status );
-                  }
-	       }
-               break;
-
-
-/* Convert J2000 equatorial to any STP coordinates. */
-/* ------------------------------------------------ */
-/* Same as above, but with forward and inverse cases transposed. */
-            case AST__EQHPC:
-            case AST__EQHPR:
-            case AST__EQHE:
-               {
-
-/* Get the code for the appropriate 3D STP coordinate system to use.
-   Also, get a point to the observer position, if needed. */
-                  if( ct == AST__EQHPC ) {
-                    sys = AST__HPC;
-                    obs = args + 1;
-
-                  } else if( ct == AST__EQHPR ) {
-                    sys = AST__HPR;
-                    obs = args + 1;
-
-                  } else {
-                    sys = AST__GSE;
-                    obs = NULL;
-
-                  }
-
-/* Store the 3D positions to be transformed. The supplied arrays are used
-   for the longitude and latitude values. No radius values are supplied.
-   (a value of 1AU will be used in the transformation). */
-                  p[0] = alpha;
-                  p[1] = delta;
-                  p[2] = NULL;
-
-/* Convert the supplied positions from (or to) AST__HEQ, ignoring the 
-   distinction between the origin of the input and output systems (which
-   is appropriate since we are considering points at an infinite distance
-   from the observer). */
-                  if( forward ) {
-                     STPConv( args[ 0 ], 1, npoint, AST__HAQ, NULL, p,
-                              sys, obs, p, status );
-                  } else {
-                     STPConv( args[ 0 ], 1, npoint, sys, obs, p,
-                              AST__HAQ, NULL, p, status );
-                  }
-	       }
-               break;
-
-/* Convert dynamical J2000.0 to ICRS. */
-/* ---------------------------------- */
-/* Apply the conversion to each point. */
-	    case AST__J2000H:
-               J2000H( forward, npoint, alpha, delta, status );
-               break;
-
-/* Convert ICRS to dynamical J2000.0  */
-/* ---------------------------------- */
-	    case AST__HJ2000:
-               J2000H( !(forward), npoint, alpha, delta, status );
-               break;
-
-/* Convert HA to RA, or RA to HA */
-/* ----------------------------- */
-/* The forward and inverse transformations are the same. */
-	    case AST__H2R:
-	    case AST__R2H:
-               TRAN_ARRAY( alpha[ point ] = args[ 0 ] - alpha[ point ]; )
-               break;
-
-         }
-      }
-   }
-
-/* If an error has occurred and a new PointSet may have been created, then
-   clean up by annulling it. In any case, ensure that a NULL result is
-   returned.*/
-   if ( !astOK ) {
-      if ( !out ) result = astAnnul( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-/* Undefine macros local to this function. */
-#undef TRAN_ARRAY
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SlaMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SlaMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstSlaMap *in;                /* Pointer to input SlaMap */
-   AstSlaMap *out;               /* Pointer to output SlaMap */
-   int cvt;                      /* Loop counter for coordinate conversions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SlaMap structures. */
-   in = (AstSlaMap *) objin;
-   out = (AstSlaMap *) objout;
-
-/* For safety, first clear any references to the input memory from the output
-   SlaMap. */
-   out->cvtargs = NULL;
-   out->cvtextra = NULL;
-   out->cvttype = NULL;
-
-/* Allocate memory for the output array of argument list pointers. */
-   out->cvtargs = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* Allocate memory for the output array of extra (intermediate) values. */
-   out->cvtextra = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* If necessary, allocate memory and make a copy of the input array of sky
-   coordinate conversion codes. */
-   if ( in->cvttype ) out->cvttype = astStore( NULL, in->cvttype,
-                                               sizeof( int )
-                                               * (size_t) in->ncvt );
-
-/* If OK, loop through each conversion in the input SlaMap and make a copy of
-   its argument list, storing the new pointer in the output argument list
-   array. */
-   if ( astOK ) {
-      for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
-         out->cvtargs[ cvt ] = astStore( NULL, in->cvtargs[ cvt ],
-                                         astSizeOf( in->cvtargs[ cvt ] ) );
-         out->cvtextra[ cvt ] = astStore( NULL, in->cvtextra[ cvt ],
-                                         astSizeOf( in->cvtextra[ cvt ] ) );
-      }
-
-/* If an error occurred while copying the argument lists, loop through the
-   conversions again and clean up by ensuring that the new memory allocated for
-   each argument list is freed. */
-      if ( !astOK ) {
-         for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
-            out->cvtargs[ cvt ] = astFree( out->cvtargs[ cvt ] );
-	 }
-      }
-   }
-
-/* If an error occurred, free all other memory allocated above. */
-   if ( !astOK ) {
-      out->cvtargs = astFree( out->cvtargs );
-      out->cvtextra = astFree( out->cvtextra );
-      out->cvttype = astFree( out->cvttype );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SlaMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SlaMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstSlaMap *this;              /* Pointer to SlaMap */
-   int cvt;                      /* Loop counter for coordinate conversions */
-
-/* Obtain a pointer to the SlaMap structure. */
-   this = (AstSlaMap *) obj;
-
-/* Loop to free the memory containing the argument list for each sky coordinate
-   conversion. */
-   for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
-      this->cvtargs[ cvt ] = astFree( this->cvtargs[ cvt ] );
-      this->cvtextra[ cvt ] = astFree( this->cvtextra[ cvt ] );
-   }
-
-/* Free the memory holding the array of conversion types and the array of
-   argument list pointers. */
-   this->cvtargs = astFree( this->cvtargs );
-   this->cvtextra = astFree( this->cvtextra );
-   this->cvttype = astFree( this->cvttype );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SlaMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SlaMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SlaMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstSlaMap *this;              /* Pointer to the SlaMap structure */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   const char *argdesc[ MAX_SLA_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   const char *sval;             /* Pointer to string value */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt;                     /* Loop counter for conversion steps */
-   int ival;                     /* Integer value */
-   int nargs;                    /* Number of conversion arguments */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SlaMap structure. */
-   this = (AstSlaMap *) this_object;
-
-/* Write out values representing the instance variables for the SlaMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Regard this as "set" if it is non-zero. */
-   ival = this->ncvt;
-   set = ( ival != 0 );
-   astWriteInt( channel, "Nsla", set, 0, ival, "Number of conversion steps" );
-
-/* Write out data for each conversion step... */
-   for ( icvt = 0; icvt < this->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Change each conversion type code into an equivalent string and
-   obtain associated descriptive information. If the conversion code
-   was not recognised, report an error and give up. */
-      if ( astOK ) {
-         sval = CvtString( this->cvttype[ icvt ], &comment, &nargs, argdesc, status );
-         if ( astOK && !sval ) {
-            astError( AST__SLAIN,
-                      "astWrite(%s): Corrupt %s contains invalid SLALIB "
-                      "sky coordinate conversion code (%d).", status,
-                      astGetClass( channel ), astGetClass( this ),
-                      (int) this->cvttype[ icvt ] );
-            break;
-         }
-
-/* Create an appropriate keyword and write out the conversion code
-   information. */
-         (void) sprintf( key, "Sla%d", icvt + 1 );
-         astWriteString( channel, key, 1, 1, sval, comment );
-
-/* Write out data for each conversion argument... */
-         for ( iarg = 0; iarg < nargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and write out the argument value,
-   accompanied by the descriptive comment obtained above. */
-            (void) sprintf( key, "Sla%d%c", icvt + 1, ALPHABET[ iarg ] );
-            astWriteDouble( channel, key, 1, 1, this->cvtargs[ icvt ][ iarg ],
-                            argdesc[ iarg ] );
-         }
-
-/* Quit looping if an error occurs. */
-         if ( !astOK ) break;
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASlaMap and astCheckSlaMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SlaMap,Mapping)
-astMAKE_CHECK(SlaMap)
-
-AstSlaMap *astSlaMap_( int flags, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astSlaMap
-f     AST_SLAMAP
-
-*  Purpose:
-*     Create an SlaMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "slamap.h"
-c     AstSlaMap *astSlaMap( int flags, const char *options, ... )
-f     RESULT = AST_SLAMAP( FLAGS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     SlaMap constructor.
-
-*  Description:
-*     This function creates a new SlaMap and optionally initialises
-*     its attributes.
-*
-*     An SlaMap is a specialised form of Mapping which can be used to
-*     represent a sequence of conversions between standard celestial
-*     (longitude, latitude) coordinate systems.
-*
-*     When an SlaMap is first created, it simply performs a unit
-c     (null) Mapping on a pair of coordinates. Using the astSlaAdd
-f     (null) Mapping on a pair of coordinates. Using the AST_SLAADD
-c     function, a series of coordinate conversion steps may then be
-f     routine, a series of coordinate conversion steps may then be
-*     added, selected from those provided by the SLALIB Positional
-*     Astronomy Library (Starlink User Note SUN/67). This allows
-*     multi-step conversions between a variety of celestial coordinate
-*     systems to be assembled out of the building blocks provided by
-*     SLALIB.
-*
-*     For details of the individual coordinate conversions available,
-c     see the description of the astSlaAdd function.
-f     see the description of the AST_SLAADD routine.
-
-*  Parameters:
-c     flags
-f     FLAGS = INTEGER (Given)
-c        This parameter is reserved for future use and should currently
-f        This argument is reserved for future use and should currently
-*        always be set to zero.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SlaMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SlaMap. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSlaMap()
-f     AST_SLAMAP = INTEGER
-*        A pointer to the new SlaMap.
-
-*  Notes:
-*     - The Nin and Nout attributes (number of input and output
-*     coordinates) for an SlaMap are both equal to 2. The first
-*     coordinate is the celestial longitude and the second coordinate
-*     is the celestial latitude. All coordinate values are in radians.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSlaMap *new;               /* Pointer to the new SlaMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SlaMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSlaMap( NULL, sizeof( AstSlaMap ), !class_init, &class_vtab,
-                        "SlaMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SlaMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SlaMap. */
-   return new;
-}
-
-AstSlaMap *astSlaMapId_( int flags, const char *options, ... ) {
-/*
-*  Name:
-*     astSlaMapId_
-
-*  Purpose:
-*     Create an SlaMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     AstSlaMap *astSlaMapId_( int flags, const char *options, ... )
-
-*  Class Membership:
-*     SlaMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astSlaMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astSlaMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astSlaMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astSlaMap_.
-
-*  Returned Value:
-*     The ID value associated with the new SlaMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSlaMap *new;               /* Pointer to the new SlaMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SlaMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSlaMap( NULL, sizeof( AstSlaMap ), !class_init, &class_vtab,
-                        "SlaMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SlaMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new SlaMap. */
-   return astMakeId( new );
-}
-
-AstSlaMap *astInitSlaMap_( void *mem, size_t size, int init,
-                           AstSlaMapVtab *vtab, const char *name,
-                           int flags, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSlaMap
-
-*  Purpose:
-*     Initialise an SlaMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     AstSlaMap *astInitSlaMap( void *mem, size_t size, int init,
-*                               AstSlaMapVtab *vtab, const char *name,
-*                               int flags )
-
-*  Class Membership:
-*     SlaMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SlaMap object. It allocates memory (if necessary) to accommodate
-*     the SlaMap plus any additional data associated with the derived class.
-*     It then initialises an SlaMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for an SlaMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SlaMap is to be initialised.
-*        This must be of sufficient size to accommodate the SlaMap data
-*        (sizeof(SlaMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SlaMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the SlaMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the SlaMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SlaMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astClass
-*        method).
-*     flags
-*        This parameter is reserved for future use. It is currently ignored.
-
-*  Returned Value:
-*     A pointer to the new SlaMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSlaMap *new;               /* Pointer to the new SlaMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSlaMapVtab( vtab, name );
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the SlaMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstSlaMap *) astInitMapping( mem, size, 0,
-                                       (AstMappingVtab *) vtab, name,
-                                       2, 2, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the SlaMap data. */
-/* --------------------------- */
-/* The initial state is with no SLALIB conversions set, in which condition the
-   SlaMap simply implements a unit mapping. */
-      new->ncvt = 0;
-      new->cvtargs = NULL;
-      new->cvtextra = NULL;
-      new->cvttype = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSlaMap *astLoadSlaMap_( void *mem, size_t size,
-                           AstSlaMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSlaMap
-
-*  Purpose:
-*     Load a SlaMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "slamap.h"
-*     AstSlaMap *astLoadSlaMap( void *mem, size_t size,
-*                               AstSlaMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     SlaMap loader.
-
-*  Description:
-*     This function is provided to load a new SlaMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SlaMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a SlaMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SlaMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SlaMap data (sizeof(SlaMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SlaMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SlaMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSlaMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SlaMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the SlaMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SlaMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SlaMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstSlaMap *new;               /* Pointer to the new SlaMap */
-   char *sval;                   /* Pointer to string value */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   const char *argdesc[ MAX_SLA_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt;                     /* Loop counter for conversion steps */
-   int nargs;                    /* Number of conversion arguments */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SlaMap. In this case the
-   SlaMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSlaMap );
-      vtab = &class_vtab;
-      name = "SlaMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSlaMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SlaMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SlaMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Read the number of conversion steps and allocate memory to hold
-   data for each step. */
-      new->ncvt = astReadInt( channel, "nsla", 0 );
-      if ( new->ncvt < 0 ) new->ncvt = 0;
-      new->cvttype = astMalloc( sizeof( int ) * (size_t) new->ncvt );
-      new->cvtargs = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-      new->cvtextra = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
-      if ( !astOK ) {
-         new->cvttype = astFree( new->cvttype );
-         new->cvtargs = astFree( new->cvtargs );
-         new->cvtextra = astFree( new->cvtextra );
-
-/* Otherwise, initialise the argument pointer array. */
-      } else {
-         for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-            new->cvtargs[ icvt ] = NULL;
-            new->cvtextra[ icvt ] = NULL;
-         }
-
-/* Read in data for each conversion step... */
-         for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Create an appropriate keyword and read the string representation of
-   the conversion type. */
-            (void) sprintf( key, "sla%d", icvt + 1 );
-            sval = astReadString( channel, key, NULL );
-
-/* If no value was read, report an error. */
-            if ( astOK ) {
-               if ( !sval ) {
-                  astError( AST__BADIN,
-                            "astRead(%s): An SLALIB sky coordinate conversion "
-                            "type is missing from the input SlaMap data.", status,
-                            astGetClass( channel ) );
-
-/* Otherwise, convert the string representation into the required
-   conversion type code. */
-               } else {
-                  new->cvttype[ icvt ] = CvtCode( sval, status );
-
-/* If the string was not recognised, report an error. */
-                  if ( new->cvttype[ icvt ] == AST__SLA_NULL ) {
-                     astError( AST__BADIN,
-                              "astRead(%s): Invalid SLALIB sky conversion "
-                              "type \"%s\" in SlaMap data.", status,
-                              astGetClass( channel ), sval );
-                  }
-               }
-
-/* Free the memory holding the string value. */
-               sval = astFree( sval );
-            }
-
-/* Obtain the number of arguments associated with the conversion and
-   allocate memory to hold them. */
-            (void) CvtString( new->cvttype[ icvt ], &comment, &nargs,
-                              argdesc, status );
-            new->cvtargs[ icvt ] = astMalloc( sizeof( double ) *
-                                              (size_t) nargs );
-
-/* Read in data for each argument... */
-            if ( astOK ) {
-               for ( iarg = 0; iarg < nargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and read each argument value. */
-                  (void) sprintf( key, "sla%d%c", icvt + 1, ALPHABET[ iarg ] );
-                  new->cvtargs[ icvt ][ iarg ] = astReadDouble( channel, key,
-                                                                AST__BAD );
-               }
-            }
-
-/* Quit looping if an error occurs. */
-            if ( !astOK ) break;
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new SlaMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SlaMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astSlaAdd_( AstSlaMap *this, const char *cvt, const double args[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,SlaMap,SlaAdd))( this, cvt, args, status );
-}
-
-
-
-
-
diff --git a/ast-5.3-1/slamap.h b/ast-5.3-1/slamap.h
deleted file mode 100644
index a14cb09..0000000
--- a/ast-5.3-1/slamap.h
+++ /dev/null
@@ -1,327 +0,0 @@
-#if !defined( SLAMAP_INCLUDED )  /* Include this file only once */
-#define SLAMAP_INCLUDED
-/*
-*+
-*  Name:
-*     slamap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SlaMap class.
-
-*  Invocation:
-*     #include "slamap.h"
-
-*  Description:
-*     This include file defines the interface to the SlaMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The SlaMap class encapsulates the conversions provided by the
-*     SLALIB library (SUN/67) for converting between different sky
-*     coordinate systems.  Since, typically, a sequence of these
-*     SLALIB conversions is required, an SlaMap can be used to
-*     accumulate a series of conversions which it then applies in
-*     sequence.
-
-*  Inheritance:
-*     The SlaMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astTransform
-*           Use an SlaMap to transform a set of points.
-
-*     Protected:
-*        astMapMerge
-*           Simplify a sequence of Mappings containing an SlaMap.
-
-*  New Methods Defined:
-*     Public:
-*        astSlaAdd
-*           Add a coordinate conversion step to an SlaMap.
-
-*     Private:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsASlaMap
-*           Test class membership.
-*        astSlaMap
-*           Create an SlaMap.
-
-*     Protected:
-*        astCheckSlaMap
-*           Validate class membership.
-*        astInitSlaMap
-*           Initialise an SlaMap.
-*        astLoadSlaMap
-*           Load an SlaMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSlaMap
-*           SlaMap object type.
-
-*     Protected:
-*        AstSlaMapVtab
-*           SlaMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-APR-1996 (RFWS):
-*        Original version.
-*     26-SEP-1996 (RFWS):
-*        Added external interface and I/O facilities.
-*     23-MAY-1997 (RFWS):
-*        Over-ride the astMapMerge method.
-*     15-OCT-2002 (DSB):
-*        Added astSTPConv, astSTPConv1, and STP coordinate system macros.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitSlaMapVtab method.
-*     22-FEB-2006 (DSB):
-*        Added cvtextra to the AstSlaMap structure.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-
-/* Macros */
-/* ====== */
-#if defined(astCLASS)            /* Protected */
-#define AST__NOSTP -1 /* An invalid value for an STP coordinate system */
-#define AST__HAE  0   /* Heliocentric-aries-ecliptic spherical coordinates */
-#define AST__HAEC 1   /* Heliocentric-aries-ecliptic cartesian coordinates */
-#define AST__HAQ  2   /* Heliocentric-aries-equatorial spherical coordinates */
-#define AST__HAQC 3   /* Heliocentric-aries-equatorial cartesian coordinates */
-#define AST__HG	  4   /* Heliographic spherical coordinates */
-#define AST__HGC  5   /* Heliographic cartesian coordinates */
-#define AST__HPC  6   /* Helioprojective-cartesian spherical coordinates */
-#define AST__HPCC 7   /* Helioprojective-cartesian cartesian coordinates */
-#define AST__HPR  8   /* Helioprojective-radial spherical coordinates */
-#define AST__HPRC 9   /* Helioprojective-radial cartesian coordinates */
-#define AST__GSE  10  /* Geocentric-solar-ecliptic spherical coordinates */
-#define AST__GSEC 11  /* Geocentric-solar-ecliptic cartesian coordinates */
-#endif
-
-/* One IAU astronomical unit, in metres. */
-#define AST__AU 1.49597870E11
-
-/* One solar radius (top of photosphere?), in metres (from "The Explanatory
-   Supplement to the Astronomical Almanac"). */
-#define AST__SOLRAD 6.96E8 
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* SlaMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstSlaMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int *cvttype;                 /* Pointer to array of conversion types */
-   double **cvtargs;             /* Pointer to argument list pointer array */
-   double **cvtextra;            /* Pointer to intermediate values pointer array */
-   int ncvt;                     /* Number of conversions to perform */
-} AstSlaMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSlaMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* SlaAdd)( AstSlaMap *, const char *, const double[], int * );
-} AstSlaMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstSlaMapGlobals {
-   AstSlaMapVtab Class_Vtab;
-   int Class_Init;
-   double Eq_Cache;
-   double Ep_Cache;
-   double Amprms_Cache[ 21 ];
-} AstSlaMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SlaMap)           /* Check class membership */
-astPROTO_ISA(SlaMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSlaMap *astSlaMap_( int, const char *, int *, ...);
-#else
-AstSlaMap *astSlaMapId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSlaMap *astInitSlaMap_( void *, size_t, int, AstSlaMapVtab *,
-                           const char *, int, int * );
-
-/* Vtab initialiser. */
-void astInitSlaMapVtab_( AstSlaMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSlaMap *astLoadSlaMap_( void *, size_t, AstSlaMapVtab *,
-                           const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitSlaMapGlobals_( AstSlaMapGlobals * );
-#endif
-
-/* Other functions. */
-void astSTPConv1_( double, int, double[3], double[3], int, double[3], double[3], int * );
-void astSTPConv_( double, int, int, double[3], double *[3], int, double[3], double *[3], int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astSlaAdd_( AstSlaMap *, const char *, const double[], int * );
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSlaMap(this) astINVOKE_CHECK(SlaMap,this,0)
-#define astVerifySlaMap(this) astINVOKE_CHECK(SlaMap,this,1)
-
-/* Test class membership. */
-#define astIsASlaMap(this) astINVOKE_ISA(SlaMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSlaMap astINVOKE(F,astSlaMap_)
-#else
-#define astSlaMap astINVOKE(F,astSlaMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSlaMap(mem,size,init,vtab,name,flags) \
-astINVOKE(O,astInitSlaMap_(mem,size,init,vtab,name,flags,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSlaMapVtab(vtab,name) astINVOKE(V,astInitSlaMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSlaMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSlaMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSlaMap to validate SlaMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#define astSlaAdd(this,cvt,args) \
-astINVOKE(V,astSlaAdd_(astCheckSlaMap(this),cvt,args,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astSTPConv astSTPConv_
-#define astSTPConv1 astSTPConv1_
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/specfluxframe.c b/ast-5.3-1/specfluxframe.c
deleted file mode 100644
index 3f27bc6..0000000
--- a/ast-5.3-1/specfluxframe.c
+++ /dev/null
@@ -1,2182 +0,0 @@
-/*
-*class++
-*  Name:
-*     SpecFluxFrame
-
-*  Purpose:
-*     Compound spectrum/flux Frame.
-
-*  Constructor Function:
-c     astSpecFluxFrame
-f     AST_SPECFLUXFRAME
-
-*  Description:
-*     A SpecFluxFrame combines a SpecFrame and a FluxFrame into a single 
-*     2-dimensional compound Frame. Such a Frame can for instance be used
-*     to describe a Plot of a spectrum in which the first axis represents
-*     spectral position and the second axis represents flux.
-
-*  Inheritance:
-*     The SpecFluxFrame class inherits from the CmpFrame class.
-
-*  Attributes:
-*     The SpecFluxFrame class does not define any new attributes beyond
-*     those which are applicable to all CmpFrames. However, the attributes 
-*     of the component Frames can be accessed as if they were attributes
-*     of the SpecFluxFrame. For instance, the SpecFluxFrame will recognise 
-*     the "StdOfRest" attribute and forward access requests to the component 
-*     SpecFrame. An axis index can optionally be appended to the end of any 
-*     attribute name, in which case the request to access the attribute will 
-*     be forwarded to the primary Frame defining the specified axis. 
-
-*  Functions:
-c     The SpecFluxFrame class does not define any new functions beyond those
-f     The SpecFluxFrame class does not define any new routines beyond those
-*     which are applicable to all CmpFrames.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     8-DEC-2004 (DSB):
-*        Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SpecFluxFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__COMP
-#define LAST_SYSTEM AST__COMP
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "permmap.h"             /* Coordinate permutation Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "axis.h"                /* Coordinate axes */
-#include "cmpframe.h"            /* Parent CmpFrame class */
-#include "tranmap.h"             /* Separated transformation Mappings */
-#include "mathmap.h"             /* Algebraic Mappings */
-#include "ratemap.h"             /* Differential Mappings */
-#include "specframe.h"           /* SpecFrame class */
-#include "fluxframe.h"           /* FluxFrame class */
-#include "specfluxframe.h"       /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetTitle_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SpecFluxFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SpecFluxFrame,Class_Init)
-#define class_vtab astGLOBAL(SpecFluxFrame,Class_Vtab)
-#define gettitle_buff astGLOBAL(SpecFluxFrame,GetTitle_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char gettitle_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSpecFluxFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSpecFluxFrame *astSpecFluxFrameId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstFluxFrame *GetFluxFrame( AstSpecFluxFrame *, int, int * );
-static AstMapping *MakeMap2( AstSpecFluxFrame *, int * );
-static AstMapping *MakeMap3( AstSpecFluxFrame *, AstSpecFluxFrame *, int * );
-static AstMapping *MakeMapF( AstFluxFrame *, AstSpecFrame *, AstFluxFrame *, AstSpecFrame *, int * );
-static AstMapping *MakeMapI( AstFluxFrame *, AstSpecFrame *, AstFluxFrame *, AstSpecFrame *, int * );
-static AstSpecFrame *GetSpecFrame( AstSpecFluxFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static int MakeSFMapping( AstSpecFluxFrame *, AstSpecFluxFrame *, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static AstFluxFrame *GetFluxFrame( AstSpecFluxFrame *this, int std, int *status ){
-/*
-*  Name:
-*     GetFluxFrame
-
-*  Purpose:
-*     Return a pointer to the FluxFrame in a FluxSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstFluxFrame *GetFluxFrame( AstSpecFluxFrame *this, int std, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     Returns a pointer to the FluxFrame in a SpecFluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFluxFrame.
-*     std
-*        If non zero, then the returned FluxFrame is a standardised copy of 
-*        the FluxFrame in the supplied SpecFluxFrame, in which the System has
-*        been set explicitly (rather than potentially being defaulted), and 
-*        the Units have been cleared to use default units appropriate to
-*        the flux System.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the FluxFrame. Should be freed using astAnnul when no
-*     longer needed.
-
-*  Notes:
-*     NULL is returned if this function is invoked with the global error 
-*     status set or if it should fail for any reason.
-*/
-
-/* Local Variables; */
-   AstFluxFrame *ff;
-   AstFluxFrame *ret;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* The FluxFrame is always the second Frame in the parent CmpFrame. */
-   ff = (AstFluxFrame *) ((AstCmpFrame *)this)->frame2;
-
-/* Produce a standardised copy of the FluxFrame if required, or clone the
-   above pointer otherwise. */
-   if( std ) {
-      ret = astCopy( ff );
-      astSetSystem( ret, astGetSystem( ff ) );
-      astClearUnit( ret, 0 );
-   } else {
-      ret = astClone( ff );
-   }
-
-/* Annul the returned pointer if anything went wrong. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result. */
-   return ret;
-}
-
-static AstSpecFrame *GetSpecFrame( AstSpecFluxFrame *this, int std, int *status ){
-/*
-*  Name:
-*     GetSpecFrame
-
-*  Purpose:
-*     Return a pointer to the SpecFrame in a FluxSpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstSpecFrame *GetSpecFrame( AstSpecFluxFrame *this, int std, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     Returns a pointer to the SpecFrame in a SpecFluxFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFluxFrame.
-*     std
-*        If non zero, then the returned SpecFrame is a standardised copy of 
-*        the SpecFrame in the supplied SpecFluxFrame, in which the System
-*        and Units have been set explicitly to the values appropriate to the 
-*        flux system in use in the FluxFrame in the supplied SpecFluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the FluxFrame. Should be freed using astAnnul when no
-*     longer needed.
-
-*  Notes:
-*     NULL is returned if this function is invoked with the global error 
-*     status set or if it should fail for any reason.
-*/
-
-/* Local Variables; */
-   AstFluxFrame *ff;
-   AstSpecFrame *ret;
-   AstSpecFrame *sf;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the SpecFrame (the first Frame in the parent CmpFrame). */
-   sf = (AstSpecFrame *) ((AstCmpFrame *)this)->frame1;
-
-/* If we want a standardised version of the SpecFrame... */
-   if( std ) {
-
-/* The FluxFrame is always the second Frame in the parent CmpFrame. */
-      ff = (AstFluxFrame *) ((AstCmpFrame *)this)->frame2;
-
-/* Produce a copy of the SpecFrame and set its System and Units
-   appropriate to the flux system (expressed in default units). */
-      ret = astCopy( sf );
-      astSetSystem( ret, astGetDensitySystem( ff ) );
-      astSetUnit( ret, 0, astGetDensityUnit( ff ) );
-
-/* If we are not standardising the SpecFrame, just return a clone of the
-   pointer in the parent CmpFrame. */
-   } else {
-      ret = astClone( sf );
-   }
-
-/* Annul the returned pointer if anything went wrong. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result. */
-   return ret;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetTitle
-
-*  Purpose:
-*     Obtain a pointer to the Title string for a SpecFluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     const char *GetTitle( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function (over-rides the astGetTitle method 
-*     inherited from the CmpFrame class).
-
-*  Description:
-*     This function returns a pointer to the Title string for a SpecFluxFrame.
-*     A pointer to a suitable default string is returned if no Title value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null-terminated character string containing the requested
-*     information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           
-   AstSpecFluxFrame *this;       
-   AstSpecFrame *sf;             
-   AstFluxFrame *ff;             
-   const char *result;           
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_frame);
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the SpecFluxFrame structure. */
-   this = (AstSpecFluxFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
-   method to obtain a pointer to it. */
-   if ( astTestTitle( this ) ) {
-      result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
-   SpecFrame's attributes that determine what this string will be. */
-   } else {
-      ff = GetFluxFrame( this, 0, status );
-      sf = GetSpecFrame( this, 0, status );
-
-      if( astOK ) {
-         sprintf( gettitle_buff, "%s versus %s", astGetLabel( ff, 0 ),
-                  astGetLabel( sf, 0 ) );
-         gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-         result = gettitle_buff;
-      }
-
-      ff = astAnnul( ff );
-      sf = astAnnul( sf );
-
-   }
-
-/* If an error occurred, clear the returned pointer value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-void astInitSpecFluxFrameVtab_(  AstSpecFluxFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSpecFluxFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SpecFluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     void astInitSpecFluxFrameVtab( AstSpecFluxFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SpecFluxFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SpecFluxFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitCmpFrameVtab( (AstCmpFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASpecFluxFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstCmpFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-   parent_match = frame->Match;
-   frame->Match = Match;
-
-   parent_subframe = frame->SubFrame;
-   frame->SubFrame = SubFrame;
-
-   parent_gettitle = frame->GetTitle;
-   frame->GetTitle = GetTitle;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetDump( vtab, Dump, "SpecFluxFrame",
-               "Compound spectral/flux coordinate system description" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static AstMapping *MakeMap2( AstSpecFluxFrame *this, int *status ){
-/*
-*  Name:
-*     MakeMap2
-
-*  Purpose:
-*     Generate the second Mapping required by MakeSFMapping
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstMapping *MakeMap2( AstSpecFluxFrame *this, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     The second Mapping used by MakeSFMapping contains three Mappings in 
-*     parallel which converts v1 (flux value) and x1 (spectral position) into  
-*     default units, and passes the third axis (a copy of flux value) 
-*     unchanged. 
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFluxFrame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the required Mapping, or NULL if the Mapping cannot be
-*     created. The Mapping will have 3 inputs and 3 outputs.
-
-*  Notes:
-*     NULL is returned if this function is invoked with the global error 
-*     status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *f1;
-   AstFrame *f2;
-   AstFrameSet *fs;
-   AstMapping *ax1_map;
-   AstMapping *ax2_map;
-   AstMapping *ax3_map;
-   AstMapping *ret;
-   AstMapping *tmap;
-
-/* Initialise. */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Input 0 is the supplied FluxFrame value and output 0 is the corresponding 
-   value in the default units for the FluxFrame system. Take a copy of the 
-   supplied FluxFrame, and fix its System value (which may be a default value 
-   based on the Units string), and then clear the Units so that it represents 
-   default units for the System. */
-   f1 = (AstFrame *) GetFluxFrame( this, 0, status );
-   f2 = (AstFrame *) GetFluxFrame( this, 1, status );
-
-/* Now, if conversion was possible, get the Mapping from the supplied 
-   FluxFrame to the default units FluxFrame. */
-   fs = astConvert( f1, f2, "" );
-   f1 = astAnnul( f1 );
-   f2 = astAnnul( f2 );
-
-   if( fs ) {
-      ax1_map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-      fs = astAnnul( fs );
-
-/* Input 1 is the supplied SpecFrame value and output 1 is the corresponding 
-   value in the spectral system used by the flux system (wavelength or
-   frequency). Take a copy of the supplied SpecFrame, and fix its System 
-   value to wavelength or frequency (depending on the System value of the
-   FluxFrame), and set up units of Hz or Angstrom (these are the spectral
-   position units used within the default flux units for a FluxFrame). */
-      f1 = (AstFrame *) GetSpecFrame( this, 0, status );
-      f2 = (AstFrame *) GetSpecFrame( this, 1, status );
-
-/* Now, if conversion was possible, get the Mapping from the supplied 
-   SpecFrame to the required SpecFrame. */
-      fs = astConvert( f1, f2, "" );
-      f1 = astAnnul( f1 );
-      f2 = astAnnul( f2 );
-
-      if( fs ) {
-         ax2_map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         fs = astAnnul( fs );
-
-/* Create a UnitMap for the 3rd axis. */
-         ax3_map = (AstMapping *) astUnitMap( 1, "", status );
-
-/* Create a parallel CmpMap containing the three Mappings. */
-         tmap = (AstMapping *) astCmpMap( ax1_map, ax2_map, 0, "", status );
-         ret = (AstMapping *) astCmpMap( tmap, ax3_map, 0, "", status );
-
-/* Free remaining resources. */
-         tmap = astAnnul( tmap );
-         ax2_map = astAnnul( ax2_map );
-         ax3_map = astAnnul( ax3_map );
-
-      }
-      ax1_map = astAnnul( ax1_map );
-   }
-
-/* If an error has occurred, return NULL. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
-   return ret;
-}
-
-static AstMapping *MakeMap3( AstSpecFluxFrame *target, AstSpecFluxFrame *result, int *status ){
-/*
-*  Name:
-*     MakeMap3
-
-*  Purpose:
-*     Generate the third Mapping required by MakeSFMapping
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstMapping *MakeMap3( AstSpecFluxFrame *target, AstSpecFluxFrame *result, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     The third Mapping used by MakeSFMapping converts input (v1,x1) in 
-*     default units to output (v2,x2) in default units. The third axis (x1) 
-*     in original units is converted to x2 in original units. 
-
-*  Parameters:
-*     target
-*        Pointer to the first SpecFluxFrame.
-*     result
-*        Pointer to the second SpecFluxFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the required Mapping, or NULL if the Mapping cannot be
-*     created. The Mapping will have 3 inputs and 3 outputs.
-
-*  Notes:
-*     NULL is returned if this function is invoked with the global error 
-*     status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstFluxFrame *ff2;
-   AstFluxFrame *ff1;
-   AstFrameSet *fs;
-   AstMapping *fmap;
-   AstMapping *imap;
-   AstMapping *mapa;
-   AstMapping *mapb;
-   AstMapping *ret;
-   AstSpecFrame *sf2;
-   AstSpecFrame *sf1;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* The first two inputs and outputs are related by a TranMap which
-   converts between standardised (v1,x1) and standardised (v2,x2). Get 
-   pointers to the standardised SpecFrames and FluxFrames in the two 
-   supplied SpecFluxFrames. */
-   ff1 = GetFluxFrame( target, 1, status );
-   sf1 = GetSpecFrame( target, 1, status );
-   ff2 = GetFluxFrame( result, 1, status );
-   sf2 = GetSpecFrame( result, 1, status );
-
-/* Create the Mapping which defines the forward transformation of the
-   required TranMap. The forward transformation of this Mapping goes from
-   (v1,x1) to (v2,x2). */
-   fmap = MakeMapF( ff1, sf1, ff2, sf2, status );
-
-/* Create the Mapping which defines the inverse transformation of the
-   required TranMap. The inverse transformation of this Mapping goes from
-   (v2,x2) to (v1,x1). */
-   imap = MakeMapI( ff1, sf1, ff2, sf2, status );
-
-/* Combine these into a TranMap */
-   if( fmap && imap ) {
-      mapa = (AstMapping *) astTranMap( fmap, imap, "", status );
-   } else {
-      mapa = NULL;
-   }
-
-/* Free resources. */
-   ff1 = astAnnul( ff1 );
-   sf1 = astAnnul( sf1 );
-   ff2 = astAnnul( ff2 );
-   sf2 = astAnnul( sf2 );
-   if( fmap ) fmap = astAnnul( fmap );
-   if( imap ) imap = astAnnul( imap );
-
-/* The third input and output are related by a Mapping which converts 
-   between supplied (x1) and supplied (x2). Get pointers to the original 
-   unmodified SpecFrames in the two supplied SpecFluxFrames. */
-   sf1 = GetSpecFrame( target, 0, status );
-   sf2 = GetSpecFrame( result, 0, status );
-
-/* Find the Mapping from the first to the second. */
-   fs = astConvert( sf1, sf2, "" );
-   if( fs ) {
-      mapb = astGetMapping( fs, AST__BASE, AST__CURRENT );
-      fs = astAnnul( fs );
-   } else {
-      mapb = NULL;
-   }
-
-/* Free resources. */
-   sf1 = astAnnul( sf1 );
-   sf2 = astAnnul( sf2 );
-
-/* Combine the two Mappings in parallel. */
-   if( mapa && mapb ) ret = (AstMapping *) astCmpMap( mapa, mapb, 0, "", status );
-   if( mapa ) mapa = astAnnul( mapa );
-   if( mapb ) mapb = astAnnul( mapb );
-
-/* If an error has occurred, return NULL. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
-   return ret;
-}
-
-static AstMapping *MakeMapF( AstFluxFrame *v1, AstSpecFrame *x1, 
-                             AstFluxFrame *v2, AstSpecFrame *x2, int *status ){
-/*
-*  Name:
-*     MakeMapF
-
-*  Purpose:
-*     Generate the forward part of the third Mapping required by MakeSFMapping
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstMapping *MakeMapF( AstFluxFrame *v1, AstSpecFrame *x1, 
-*                           AstFluxFrame *v2, AstSpecFrame *x2, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     Theis creates a 2-input 2-output Mapping which transforms 
-*     input (v1,x1) in default units to output (v2,x2) in default units. 
-
-*  Parameters:
-*     v1
-*        Pointer to the standardised input FluxFrame.
-*     x1
-*        Pointer to the standardised input SpecFrame.
-*     v2
-*        Pointer to the standardised output FluxFrame.
-*     x2
-*        Pointer to the standardised output SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the required Mapping, or NULL if the Mapping cannot be
-*     created. 
-
-*  Notes:
-*     NULL is returned if this function is invoked with the global error 
-*     status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *cmap1;
-   AstCmpMap *cmap2;
-   AstCmpMap *cmap3;
-   AstFrameSet *fs;
-   AstMapping *m;
-   AstMapping *ret;
-   AstMathMap *div;
-   AstPermMap *perm;
-   AstRateMap *rate;
-   AstUnitMap *unit;
-   const char *fwd[1];
-   const char *inv[2];
-   int inperm[ 2 ];
-   int outperm[ 3 ];
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* First create the required component Mappings.
-   --------------------------------------------- */
-
-/* A Mapping which maps input spectral position (x1) into output spectral
-   position (x2). */
-   fs = astConvert( x1, x2, "" );
-   if( fs ) {
-      m = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* A 1-input 1-output Mapping in which the input is spectral position (x1)
-   and the output is the rate of change of output spectral position (x2)
-   with respect to input spectral position (x1). */
-      rate = astRateMap( m, 0, 0, "", status );
-
-/* A MathMap which is used to divide the flux value (v1) by the absolute rate 
-   of change of x2 wrt x1 */
-      fwd[ 0 ] = "out=in0/abs(in1)";
-      inv[ 0 ] = "in0";
-      inv[ 1 ] = "in1";
-      div = astMathMap( 2, 1, 1, fwd, 2, inv, "", status );
-
-/* A 1D UnitMap used to copy v1. */
-      unit = astUnitMap( 1, "", status );
-
-/* A PermMap which is used to produce an extra output copy of x1. */
-      inperm[ 0 ] = 0;
-      inperm[ 1 ] = 2;
-      outperm[ 0 ] = 0;
-      outperm[ 1 ] = 1;
-      outperm[ 2 ] = 1;
-      perm = astPermMap( 2, inperm, 3, outperm, NULL, "", status );
-
-/* Now combine these component Mappings together. 
-   --------------------------------------------- */
-
-/* First put the UnitMap and the RateMap in parallel. This produces a 2-in 
-   2-out Mapping in which the inputs are (v1,x1) and the outputs are 
-   (v1,dx2/dx1). */
-      cmap1 = astCmpMap( unit, rate, 0, "", status );
-
-/* Now put this in series with the dividing MathMap. This results in a
-   2-in, 1-out Mapping in which the inputs are v1 and x1 and the single
-   output is v2. */
-      cmap2 = astCmpMap( cmap1, div, 1, "", status );
-
-/* Now put this in parallel with the x1->x2 Mapping. This results in a
-   3-in, 2-out Mapping in which the inputs are (v1,x1,x1) and the outputs
-   are (v2,x2). */
-      cmap3 = astCmpMap( cmap2, m, 0, "", status );
-
-/* Finally put this in series with the PermMap. This results in a 2-in, 
-   2-out Mapping in which the inputs are (v1,x1) and the outputs are 
-   (v2,x2). */
-      ret = (AstMapping *) astCmpMap( perm, cmap3, 1, "", status );
-
-/* Free resources. */
-      fs = astAnnul( fs );      
-      m = astAnnul( m );      
-      rate = astAnnul( rate );      
-      div= astAnnul( div );      
-      unit = astAnnul( unit );      
-      perm = astAnnul( perm );      
-      cmap1 = astAnnul( cmap1 );      
-      cmap2 = astAnnul( cmap2 );      
-      cmap3 = astAnnul( cmap3 );      
-   }
-
-/* If an error has occurred, return NULL. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
-   return ret;
-}
-
-static AstMapping *MakeMapI( AstFluxFrame *v1, AstSpecFrame *x1, 
-                             AstFluxFrame *v2, AstSpecFrame *x2, int *status ){
-/*
-*  Name:
-*     MakeMapI
-
-*  Purpose:
-*     Generate the inverse part of the third Mapping required by MakeSFMapping
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstMapping *MakeMapI( AstFluxFrame *v1, AstSpecFrame *x1, 
-*                           AstFluxFrame *v2, AstSpecFrame *x2 )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     This creates a 2-input 2-output Mapping in which the inverse
-*     transformation transforms "outputs" representing (v2,x2) into
-*     "inputs" representing (v1,x1).
-
-*  Parameters:
-*     v1
-*        Pointer to the standardised input FluxFrame.
-*     x1
-*        Pointer to the standardised input SpecFrame.
-*     v2
-*        Pointer to the standardised output FluxFrame.
-*     x2
-*        Pointer to the standardised output SpecFrame.
-
-*  Returned Value:
-*     A pointer to the required Mapping, or NULL if the Mapping cannot be
-*     created. 
-
-*  Notes:
-*     NULL is returned if this function is invoked with the global error 
-*     status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *cmap1;
-   AstCmpMap *cmap2;
-   AstCmpMap *cmap3;
-   AstCmpMap *cmap4;
-   AstCmpMap *cmap5;
-   AstFrameSet *fs;
-   AstMapping *m;
-   AstMapping *ret;
-   AstMathMap *mult;
-   AstPermMap *perm;
-   AstRateMap *rate;
-   AstUnitMap *unit;
-   const char *fwd[1];
-   const char *inv[2];
-   int inperm[ 2 ];
-   int outperm[ 3 ];
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* We create a CmpMap in which the forward transformation foes from
-   (v2,x2) to (v1,x1) and we finally invert this Mapping to get the 
-   required Mapping in which the *inverse* transformation goes from 
-   (v2,x2) to (v1,x1). 
-
-   First create the required component Mappings.
-   --------------------------------------------- */
-
-/* A Mapping which maps spectral position x1 into spectral position x2. */
-   fs = astConvert( x1, x2, "" );
-   if( fs ) {
-      m = astGetMapping( fs, AST__BASE, AST__CURRENT );
-
-/* A 1-input 1-output Mapping in which the input is spectral position x1
-   and the output is the rate of change of spectral position x2 with 
-   respect to spectral position x1. */
-      rate = astRateMap( m, 0, 0, "", status );
-
-/* Now invert "m" so that its forward transformation goes from x2 to x1. 
-   The RateMap created above retains a copy of the original Invert flag
-   for "m" and uses it in preference to the current value when transforming
-   points. */
-      astInvert( m );
-
-/* A MathMap which is used to multiple the flux value v2 by the 
-   absolute rate of change of x2 wrt x1 */
-      fwd[ 0 ] = "out=in0*abs(in1)";
-      inv[ 0 ] = "in0";
-      inv[ 1 ] = "in1";
-      mult = astMathMap( 2, 1, 1, fwd, 2, inv, "", status );
-
-/* A 1D UnitMap used to copy various values. */
-      unit = astUnitMap( 1, "", status );
-
-/* A PermMap which is used to produce an extra copy of x1. */
-      inperm[ 0 ] = 0;
-      inperm[ 1 ] = 2;
-      outperm[ 0 ] = 0;
-      outperm[ 1 ] = 1;
-      outperm[ 2 ] = 1;
-      perm = astPermMap( 2, inperm, 3, outperm, NULL, "", status );
-
-/* Now combine these component Mappings together. 
-   --------------------------------------------- */
-
-/* First put the UnitMap and the RateMap in parallel. This produces a 2-in 
-   2-out Mapping in which the inputs are (v2,x1) and the outputs are 
-   (v2,dx2/dx1). */
-      cmap1 = astCmpMap( unit, rate, 0, "", status );
-
-/* Now put this in series with the multiplying MathMap. This results in a
-   2-in, 1-out Mapping in which the inputs are (v2,x1) and the single
-   output is v1. */
-      cmap2 = astCmpMap( cmap1, mult, 1, "", status );
-
-/* Now put this in parallel with the UnitMap to get a 3-in, 2-out Mapping
-   in which the inputs are (v2,x1,x1) and the outputs are (v1,x1). */
-      cmap3 = astCmpMap( cmap2, unit, 0, "", status );
-
-/* Now put this in series with the PermMap to get a 2-in, 2-out Mapping
-   in which the inputs are (v2,x1) and the outputs are (v1,x1). */
-      cmap4 = astCmpMap( perm, cmap3, 1, "", status );
-
-/* Now put the UnitMap in parallel with the (x2->x1 Mapping to get a
-   2-in, 2-out Mapping in which the inputs are (v2,x2) and the outputs are
-   (v2,x1). */     
-      cmap5 = astCmpMap( unit, m, 0, "", status );
-
-/* Finally put this in series with "cmap4" to get a 2-in 2-out Mapping
-   from (v2,x2) to (v1,x1). */
-      ret = (AstMapping *) astCmpMap( cmap5, cmap4, 1, "", status );
-
-/* Invert this so that the inverse transformation goes from (v2,x2) to
-   (v1,x1). */
-      astInvert( ret );
-
-/* Free resources. */
-      fs = astAnnul( fs );      
-      m = astAnnul( m );      
-      rate = astAnnul( rate );      
-      mult = astAnnul( mult );      
-      unit = astAnnul( unit );      
-      perm = astAnnul( perm );      
-      cmap1 = astAnnul( cmap1 );      
-      cmap2 = astAnnul( cmap2 );      
-      cmap3 = astAnnul( cmap3 );      
-      cmap4 = astAnnul( cmap4 );      
-      cmap5 = astAnnul( cmap5 );      
-   }
-
-/* If an error has occurred, return NULL. */
-   if( !astOK ) ret = astAnnul( ret );
-
-/* Return the result */
-   return ret;
-}
-
-static int MakeSFMapping( AstSpecFluxFrame *target, AstSpecFluxFrame *result, 
-                          AstMapping **map, int *status ){
-/*
-*  Name:
-*     MakeSFMapping
-
-*  Purpose:
-*     Generate a Mapping between two SpecFluxFrames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     int MakeSFMapping( AstSpecFluxFrame *target, AstSpecFluxFrame *result,
-*                        AstMapping **map, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function.
-
-*  Description:
-*     This function takes two SpecFluxFrames and generates a Mapping that
-*     converts between them, taking account of differences in their 
-*     coordinate systems, systems, units, etc. (but not allowing for any 
-*     axis permutations).
-
-*  Parameters:
-*     target
-*        Pointer to the first SpecFluxFrame.
-*     result
-*        Pointer to the second SpecFluxFrame.
-*     map
-*        Pointer to a location which is to receive a pointer to the
-*        returned Mapping. The forward transformation of this Mapping
-*        will convert from "target" coordinates to "result"
-*        coordinates, and the inverse transformation will convert in
-*        the opposite direction (all coordinate values in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Mapping could be generated, or zero if the two
-*     SpecFluxFrames are sufficiently un-related that no meaningful Mapping
-*     can be produced.
-
-*  Notes:
-*     A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map1;
-   AstMapping *map2;
-   AstMapping *map3;
-   AstMapping *map4;
-   AstMapping *map5;
-   AstMapping *tmap1;
-   AstMapping *tmap2;
-   AstMapping *tmap3;
-   AstMapping *tmap4;
-   int inperm[2];
-   int match;                    
-   int outperm[3];     
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
-   match = 0;
-   *map = NULL;
-
-/* Initialise other things. */
-   map1 = NULL;
-   map2 = NULL;
-   map3 = NULL;
-   map4 = NULL;
-   map5 = NULL;
-   tmap1 = NULL;
-   tmap2 = NULL;
-   tmap3 = NULL;
-   tmap4 = NULL;
-
-/* At the top level, the required Mapping consists of five Mappings in
-   series. Inputs 0 and 1 of the total Mapping correspond to the SpecFrame
-   and FluxFrame in the target SpecFluxFrame. These are referred to as X1
-   and V1. Outputs 0 and 1 of the total Mapping correspond to the SpecFrame
-   and FluxFrame in the result SpecFluxFrame. These are referred to as X2
-   and V2. */
-
-/* Map1 is a PermMap which copies v1 to its first output and x1 to its
-   second and third outputs. The inverse transformation copies v1 from
-   its first output and x1 from its third output. */
-   inperm[ 0 ] = 2;
-   inperm[ 1 ] = 0;
-   outperm[ 0 ] = 1;
-   outperm[ 1 ] = 0;
-   outperm[ 2 ] = 0;
-   map1 = (AstMapping *) astPermMap( 2, inperm, 3, outperm, NULL, "", status );
-
-/* Map2 contains three Mappings in parallel which converts v1 and x1 into 
-   default units, and passes the third axis unchanged. */
-   map2 = MakeMap2( target, status );
-
-/* Map3 converts ( v1,x1) in default units to (v2,x2) in default units. 
-   The third axis (x1) in original units is convert to x2 in original
-   units. */
-   map3 = map2 ? MakeMap3( target, result, status ) : NULL;
-
-/* Map4 converts (v2,x2) in default units to (v2,x2) in original units
-   and passes the third axis unchanged. This is similar to Map2 but based
-   on the result ratherthan the target, and in the opposite direction. */
-   if( map3 ) {
-      map4 = MakeMap2( result, status );
-      if( map4 ) astInvert( map4 );
-   } else {
-      map4 = NULL;
-   }
-
-/* Map5 is a PermMap which is the inverse of Map1. */
-   map5 = map4 ? astCopy( map1 ) : NULL;
-   if( map5 ) astInvert( map5 );
-
-/* Combine all 6 Mappings in series. */
-   if( map5 ) {
-      tmap1 = (AstMapping *) astCmpMap( map1, map2, 1, "", status );   
-      tmap2 = (AstMapping *) astCmpMap( tmap1, map3, 1, "", status );   
-      tmap3 = (AstMapping *) astCmpMap( tmap2, map4, 1, "", status );   
-      tmap4 = (AstMapping *) astCmpMap( tmap3, map5, 1, "", status );   
-
-/* Return the simplified total Mapping. */
-      *map = astSimplify( tmap4 );
-      match = 1;
-   }
-
-/* Free resources. */
-   if( map1 ) map1 = astAnnul( map1 );   
-   if( map2 ) map2 = astAnnul( map2 );   
-   if( map3 ) map3 = astAnnul( map3 );   
-   if( map4 ) map4 = astAnnul( map4 );   
-   if( map5 ) map5 = astAnnul( map5 );   
-   if( tmap1 ) tmap1 = astAnnul( tmap1 );   
-   if( tmap2 ) tmap2 = astAnnul( tmap2 );   
-   if( tmap3 ) tmap3 = astAnnul( tmap3 );   
-   if( tmap4 ) tmap4 = astAnnul( tmap4 );   
-
-/* If an error occurred, annul the returned Mapping and clear the
-   returned values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes,
-                  AstMapping **map, AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function (over-rides the protected astMatch
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function matches a "template" SpecFluxFrame to a "target" Frame
-*     and determines whether it is possible to convert coordinates
-*     between them.  If it is, a Mapping that performs the
-*     transformation is returned along with a new Frame that describes
-*     the coordinate system that results when this Mapping is applied
-*     to the "target" coordinate system. In addition, information is
-*     returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" Frame and
-*     "template" SpecFluxFrame from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template SpecFluxFrame. This describes the
-*        coordinate system (or set of possible coordinate systems)
-*        into which we wish to convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate
-*        system in which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        template SpecFluxFrame axis from which it is derived. If it is not
-*        derived from any template axis, a value of -1 will be
-*        returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned
-*        if the requested coordinate conversion is possible. This
-*        pointer will point at a dynamically allocated array of
-*        integers with one element for each axis of the "result" Frame
-*        (see below). It must be freed by the caller (using astFree)
-*        when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element
-*        of this array will return the (zero-based) index of the
-*        target Frame axis from which it is derived. If it is not
-*        derived from any target axis, a value of -1 will be returned
-*        instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will
-*        be returned if the requested coordinate conversion is
-*        possible. If returned, the forward transformation of this
-*        Mapping may be used to convert coordinates between the
-*        "target" Frame and the "result" Frame (see below) and the
-*        inverse transformation will convert in the opposite
-*        direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be
-*        returned if the requested coordinate conversion is
-*        possible. If returned, this Frame describes the coordinate
-*        system that results from applying the returned Mapping
-*        (above) to the "target" coordinate system. In general, this
-*        Frame will combine attributes from (and will therefore be
-*        more specific than) both the target Frame and the template
-*        SpecFluxFrame. In particular, when the template allows the
-*        possibility of transformaing to any one of a set of
-*        alternative coordinate systems, the "result" Frame will
-*        indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate
-*     conversion is possible. Otherwise zero is returned (this will
-*     not in itself result in an error condition).
-
-*  Notes:
-*     - By default, the "result" Frame will have its number of axes
-*     and axis order determined by the "template" SpecFluxFrame. However,
-*     if the PreserveAxes attribute of the template SpecFluxFrame is
-*     non-zero, then the axis count and axis order of the "target"
-*     Frame will be used instead.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSpecFluxFrame *template;   /* Pointer to template SpecFluxFrame structure */
-   int match;                    /* Coordinate conversion possible? */
-   int swap1;                    /* Template axes swapped? */
-   int swap2;                    /* Target axes swapped? */
-   int swap;                     /* Additional axis swap needed? */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-   
-/* Obtain a pointer to the template SpecFluxFrame structure. */
-   template = (AstSpecFluxFrame *) template_frame;
-
-/* If the target is not a SpecFluxFrame, use the results returned by the 
-   parent Match method inherited from the CmpFrame class. */
-   if( !astIsASpecFluxFrame( target ) ) {
-      match = (*parent_match)( template_frame, target, template_axes, 
-                               target_axes, map, result, status );
-
-
-/* If the target is a SpecFluxFrame, see if we can convert between target
-   and template */
-   } else {
-
-/* We must now decide how the order of the axes in the result Frame relates to 
-   the order of axes in the target Frame. There are two factors involved. The 
-   first depends on whether the axis permutation array for the template
-   SpecFluxFrame (whose method we are executing) causes an axis
-   reversal. Determine this by permuting axis index zero. */
-      swap1 = ( astValidateAxis( template, 0, "astMatch" ) != 0 );
-
-/* The second factor depends on whether the axes of the target SpecFluxFrame 
-   causes an axis reversal. Determine this by permuting axis index zero. */
-      swap2 = ( astValidateAxis( target, 0, "astMatch" ) != 0 );
-
-/* Combine these to determine if an additional axis swap will be
-   needed. */
-      swap = ( swap1 != swap2 );
-
-/* Now check to see if this additional swap is permitted by the template's 
-   Permute attribute. */
-      match = ( !swap || astGetPermute( template ) );
-
-/* Allocate the target and template axes arrays. */
-      *template_axes = astMalloc( sizeof(int)*2 );      
-      *target_axes = astMalloc( sizeof(int)*2 );      
-
-/* If the Frames still match, we next set up the axis association
-   arrays. */
-      if ( astOK && match ) {
-
-/* If the target axis order is to be preserved, then the target axis
-   association involves no permutation but the template axis
-   association may involve an axis swap. */
-         if ( astGetPreserveAxes( template ) ) {
-            (*template_axes)[ 0 ] = swap;
-            (*template_axes)[ 1 ] = !swap;
-            (*target_axes)[ 0 ] = 0;
-            (*target_axes)[ 1 ] = 1;
-
-/* Otherwise, any swap applies to the target axis association
-   instead. */
-         } else {
-            (*template_axes)[ 0 ] = 0;
-            (*template_axes)[ 1 ] = 1;
-            (*target_axes)[ 0 ] = swap;
-            (*target_axes)[ 1 ] = !swap;
-         }
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
-   result Frame) with copies of the target axes in the required
-   order. This process also overlays the template attributes on to the
-   target Frame and returns a Mapping between the target and result
-   Frames which effects the required coordinate conversion. */
-         match = astSubFrame( target, template, 2, *target_axes, *template_axes,
-                              map, result );
-
-/* If an error occurred, or conversion to the result Frame's
-   coordinate system was not possible, then free all memory, annul the
-   returned objects, and reset the returned value. */
-         if ( !astOK || !match ) {
-            *template_axes = astFree( *template_axes );
-            *target_axes = astFree( *target_axes );
-            if( *map ) *map = astAnnul( *map );
-            if( *result ) *result = astAnnul( *result );
-            match = 0;
-         }
-      }
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a SpecFluxFrame and convert to the new coordinate system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     SpecFluxFrame member function (over-rides the protected astSubFrame
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the
-*     axes from a "target" SpecFluxFrame and creates a new Frame with
-*     copies of the selected axes assembled in the requested order. It
-*     then optionally overlays the attributes of a "template" Frame on
-*     to the result. It returns both the resulting Frame and a Mapping
-*     that describes how to convert between the coordinate systems
-*     described by the target and result Frames. If necessary, this
-*     Mapping takes account of any differences in the Frames'
-*     attributes due to the influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target SpecFluxFrame, from which axes are to be selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for
-*        the result Frame are to be obtained. Optionally, this may be
-*        NULL, in which case no overlaying of template attributes will
-*        be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This
-*        number may be greater than or less than the number of axes in
-*        this Frame (or equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving
-*        a list of the (zero-based) axis indices of the axes to be
-*        selected from the target SpecFluxFrame. The order in which these
-*        are given determines the order in which the axes appear in
-*        the result Frame. If any of the values in this array is set
-*        to -1, the corresponding result axis will not be derived from
-*        the target Frame, but will be assigned default attributes
-*        instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This
-*        should contain a list of the template axes (given as
-*        zero-based axis indices) with which the axes of the result
-*        Frame are to be associated. This array determines which axes
-*        are used when overlaying axis-dependent attributes of the
-*        template on to the result. If any element of this array is
-*        set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not
-*        used and a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned
-*        Mapping.  The forward transformation of this Mapping will
-*        describe how to convert coordinates from the coordinate
-*        system described by the target SpecFluxFrame to that described by
-*        the result Frame. The inverse transformation will convert in
-*        the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is
-*     possible between the target and the result Frame. Otherwise zero
-*     is returned and *map and *result are returned as NULL (but this
-*     will not in itself result in an error condition). In general,
-*     coordinate conversion should always be possible if no template
-*     Frame is supplied but may not always be possible otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-
-*  Implementation Deficiencies:
-*     - It is not clear that the method of handling "extra" axes is
-*     the best one, nor is the method of setting the "following" flag
-*     necessarily correct.  However, it is also not obvious that this
-*     feature will ever be needed, so improvements have been left
-*     until the requirement is clearer.
-*/
-
-/* Local Variables: */
-   AstMapping *tmpmap;           /* Temporary Mapping pointer */
-   AstPermMap *permmap;          /* Pointer to PermMap */
-   AstSpecFluxFrame *target;     /* Pointer to target SpecFluxFrame structure */
-   int match;                    /* Coordinate conversion is possible? */
-   int perm[ 2 ];                /* Permutation array for axis swap */
-   int result_swap;              /* Swap result SpecFluxFrame coordinates? */
-   int target_swap;              /* Swap target SpecFluxFrame coordinates? */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* If the template is not a SpecFluxFrame we use the parent SubFrame
-   method inherited form the CmpFrame class. */
-   if( !template || !astIsASpecFluxFrame( template ) || result_naxes != 2 ) {
-      match = (*parent_subframe)( target_frame, template, result_naxes, 
-                                  target_axes, template_axes, map, result, status );
-
-/* Otherwise... */
-   } else {
-
-/* Obtain a pointer to the target SpecFluxFrame structure. */
-      target = (AstSpecFluxFrame *) target_frame;
-
-/* Form the result from a copy of the target and then permute its axes
-   into the order required. */
-      *result = astCopy( target );
-      astPermAxes( *result, target_axes );
-
-/* Overlay the template attributes on to the result SpecFrame. */
-      astOverlay( template, template_axes, *result );
-
-/* Generate a Mapping that takes account of changes in the coordinate
-   system (system, units, etc.) between the target SpecFluxFrame and the 
-   result SpecFluxFrame. If this Mapping can be generated, set "match" to 
-   indicate that coordinate conversion is possible. */
-      match = MakeSFMapping( target, (AstSpecFluxFrame *) *result, map, status );
-
-/* If a Mapping has been obtained, it will expect coordinate values to be
-   supplied in (flux,spec) pairs. Test whether we need to swap the
-   order of the target SpecFluxFrame coordinates to conform with this. */
-      if ( astOK && match ) {
-         target_swap = ( astValidateAxis( target, 0, "astSubFrame" ) != 0 );
-
-/* Coordinates will also be delivered in (flux,spec) pairs, so check
-   to see whether the result SpecFluxFrame coordinate order should be 
-   swapped. */
-         result_swap = ( target_swap != ( target_axes[ 0 ] != 0 ) );
-
-/* If either set of coordinates needs swapping, create a PermMap that
-   will swap a pair of coordinates. */
-         permmap = NULL;
-         if ( target_swap || result_swap ) {
-            perm[ 0 ] = 1;
-            perm[ 1 ] = 0;
-            permmap = astPermMap( 2, perm, 2, perm, NULL, "", status );
-         }
-
-/* If necessary, prefix this PermMap to the main Mapping. */
-         if ( target_swap ) {
-            tmpmap = (AstMapping *) astCmpMap( permmap, *map, 1, "", status );
-            *map = astAnnul( *map );
-            *map = tmpmap;
-         }
-
-/* Also, if necessary, append it to the main Mapping. */
-         if ( result_swap ) {
-            tmpmap = (AstMapping *) astCmpMap( *map, permmap, 1, "", status );
-            *map = astAnnul( *map );
-            *map = tmpmap;
-         }
-
-/* Annul the pointer to the PermMap (if created). */
-         if ( permmap ) permmap = astAnnul( permmap );
-      }
-   }
-
-/* If an error occurred, clean up by annulling the result pointers and
-   returning appropriate null values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   the axes of a SpecFluxFrame using the private macros defined for this
-   purpose at the start of this file. */
-
-/* Copy constructor. */
-/* ----------------- */
-
-/* Destructor. */
-/* ----------- */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SpecFluxFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SpecFluxFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFluxFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSpecFluxFrame *this;            /* Pointer to the SpecFluxFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFluxFrame structure. */
-   this = (AstSpecFluxFrame *) this_object;
-
-/* Write out values representing the instance variables for the
-   SpecFluxFrame class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASpecFluxFrame and astCheckSpecFluxFrame functions using 
-   the macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SpecFluxFrame,CmpFrame)
-astMAKE_CHECK(SpecFluxFrame)
-
-AstSpecFluxFrame *astSpecFluxFrame_( void *frame1_void, void *frame2_void,
-                                     const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astSpecFluxFrame
-f     AST_SPECFLUXFRAME
-
-*  Purpose:
-*     Create a SpecFluxFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "specfluxframe.h"
-c     AstSpecFluxFrame *astSpecFluxFrame( AstSpecFrame *frame1, AstFluxFrame *frame2,
-c                                         const char *options, ... )
-f     RESULT = AST_SPECFLUXFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
-
-*  Class Membership:
-*     SpecFluxFrame constructor.
-
-*  Description:
-*     This function creates a new SpecFluxFrame and optionally initialises
-*     its attributes.
-*
-*     A SpecFluxFrame combines a SpecFrame and a FluxFrame into a single 
-*     2-dimensional compound Frame. Such a Frame can for instance be used
-*     to describe a Plot of a spectrum in which the first axis represents
-*     spectral position and the second axis represents flux.
-
-*  Parameters:
-c     frame1
-f     FRAME1 = INTEGER (Given)
-*        Pointer to the SpecFrame. This will form the first axis in the
-*        new SpecFluxFrame.
-c     frame2
-f     FRAME2 = INTEGER (Given)
-*        Pointer to the FluxFrame. This will form the second axis in the
-*        new SpecFluxFrame. The "SpecVal" attribute of this FluxFrame is
-*        not used by the SpecFluxFrame class and so may be set to AST__BAD
-*        when the FluxFrame is created.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SpecFluxFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SpecFluxFrame. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSpecFluxFrame()
-f     AST_SPECFLUXFRAME = INTEGER
-*        A pointer to the new SpecFluxFrame.
-
-*  Notes:
-*     - The supplied Frame pointers are stored directly, rather than
-*     being used to create deep copies of the supplied Frames. This means
-*     that any subsequent changes made to the Frames via the supplied
-*     pointers will result in equivalent changes being visible in the
-*     SpecFluxFrame.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-
-*  Implementation Notes:
-*     - This function implements the basic SpecFluxFrame constructor which
-*     is available via the protected interface to the SpecFluxFrame class.
-*     A public interface is provided by the astSpecFluxFrameId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "frame1" and "frame2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSpecFluxFrame *new;        /* Pointer to new SpecFluxFrame */
-   AstFluxFrame *frame2;         /* Pointer to FluxFrame structure */
-   AstSpecFrame *frame1;         /* Pointer to SpecFrame structure */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   new = NULL;
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Frame structures provided. */
-   frame1 = astCheckSpecFrame( frame1_void );
-   frame2 = astCheckFluxFrame( frame2_void );
-   if ( astOK ) {
-
-/* Initialise the SpecFluxFrame, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitSpecFluxFrame( NULL, sizeof( AstSpecFluxFrame ), !class_init,
-                                  &class_vtab, "SpecFluxFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   SpecFluxFrame's attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new SpecFluxFrame. */
-   return new;
-}
-
-AstSpecFluxFrame *astSpecFluxFrameId_( void *frame1_void, void *frame2_void,
-                                       const char *options, ... ) {
-/*
-*  Name:
-*     astSpecFluxFrameId_
-
-*  Purpose:
-*     Create a SpecFluxFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstSpecFluxFrame *astSpecFluxFrameId_( void *frame1_void, void *frame2_void,
-*                                            const char *options, ... )
-
-*  Class Membership:
-*     SpecFluxFrame constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astSpecFluxFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astSpecFluxFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur). For the same reason, the "frame1" and "frame2"
-*     parameters are of type (void *) and are converted and validated
-*     within the function itself.
-*
-*     The variable argument list also prevents this function from
-*     invoking astSpecFluxFrame_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-
-*  Parameters:
-*     As for astSpecFluxFrame_.
-
-*  Returned Value:
-*     The ID value associated with the new SpecFluxFrame.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSpecFluxFrame *new;        /* Pointer to new SpecFluxFrame */
-   AstSpecFrame *frame1;         /* Pointer to first Frame structure */
-   AstFluxFrame *frame2;         /* Pointer to second Frame structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   new = NULL;
-   if ( !astOK ) return new;
-
-/* Obtain the Frame pointers from the ID's supplied and validate the
-   pointers to ensure they identify valid Frames. */
-   frame1 = astVerifySpecFrame( astMakePointer( frame1_void ) );
-   frame2 = astVerifyFluxFrame( astMakePointer( frame2_void ) );
-   if ( astOK ) {
-
-/* Initialise the SpecFluxFrame, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitSpecFluxFrame( NULL, sizeof( AstSpecFluxFrame ), !class_init,
-                                  &class_vtab, "SpecFluxFrame", frame1, frame2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   SpecFluxFrame's attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new SpecFluxFrame. */
-   return astMakeId( new );
-}
-
-AstSpecFluxFrame *astInitSpecFluxFrame_( void *mem, size_t size, int init,
-                               AstSpecFluxFrameVtab *vtab, const char *name,
-                               AstSpecFrame *frame1, AstFluxFrame *frame2, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSpecFluxFrame
-
-*  Purpose:
-*     Initialise a SpecFluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstSpecFluxFrame *astInitSpecFluxFrame( void *mem, size_t size, int init,
-*                                 AstSpecFluxFrameVtab *vtab, const char *name,
-*                                 AstSpecFrame *frame1, AstFluxFrame *frame2 )
-
-*  Class Membership:
-*     SpecFluxFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new SpecFluxFrame object. It allocates memory (if
-*     necessary) to accommodate the SpecFluxFrame plus any additional data
-*     associated with the derived class.  It then initialises a
-*     SpecFluxFrame structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for a SpecFluxFrame at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SpecFluxFrame is to be
-*        created. This must be of sufficient size to accommodate the
-*        SpecFluxFrame data (sizeof(SpecFluxFrame)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SpecFluxFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SpecFluxFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the SpecFluxFrame's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SpecFluxFrame.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the Object astClass function).
-*     frame1
-*        Pointer to the SpecFrame
-*     frame2
-*        Pointer to the FluxFrame
-
-*  Returned Value:
-*     A pointer to the new SpecFluxFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSpecFluxFrame *new;        /* Pointer to new SpecFluxFrame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSpecFluxFrameVtab( vtab, name );
-
-/* Initialise a Frame structure (the parent class) as the first
-   component within the SpecFluxFrame structure, allocating memory if
-   necessary. Set the number of Frame axes to zero, since all axis
-   information is stored within the component Frames. */
-   new = astInitCmpFrame( mem, size, 0, (AstCmpFrameVtab *) vtab, name,
-                          frame1, frame2 );
-   if ( astOK ) {
-
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSpecFluxFrame *astLoadSpecFluxFrame_( void *mem, size_t size,
-                                 AstSpecFluxFrameVtab *vtab, const char *name,
-                                 AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSpecFluxFrame
-
-*  Purpose:
-*     Load a SpecFluxFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specfluxframe.h"
-*     AstSpecFluxFrame *astLoadSpecFluxFrame( void *mem, size_t size,
-*                                   AstSpecFluxFrameVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     SpecFluxFrame loader.
-
-*  Description:
-*     This function is provided to load a new SpecFluxFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SpecFluxFrame structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SpecFluxFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SpecFluxFrame data (sizeof(SpecFluxFrame)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SpecFluxFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SpecFluxFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSpecFluxFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SpecFluxFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the SpecFluxFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SpecFluxFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SpecFluxFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstSpecFluxFrame *new;        /* Pointer to the new SpecFluxFrame */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SpecFluxFrame. In this case the
-   SpecFluxFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSpecFluxFrame );
-      vtab = &class_vtab;
-      name = "SpecFluxFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSpecFluxFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SpecFluxFrame. */
-   new = astLoadCmpFrame( mem, size, (AstCmpFrameVtab *) vtab, name,
-                          channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SpecFluxFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-/*  (none)  */
-
-/* If an error occurred, clean up by deleting the new SpecFluxFrame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SpecFluxFrame pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/specfluxframe.h b/ast-5.3-1/specfluxframe.h
deleted file mode 100644
index 1ccb777..0000000
--- a/ast-5.3-1/specfluxframe.h
+++ /dev/null
@@ -1,215 +0,0 @@
-#if !defined( SPECFLUXFRAME_INCLUDED ) /* Include this file only once */
-#define SPECFLUXFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     specfluxframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SpecFluxFrame class.
-
-*  Invocation:
-*     #include "specfluxframe.h"
-
-*  Description:
-*     This include file defines the interface to the SpecFluxFrame class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-
-*  Inheritance:
-*     The SpecFluxFrame class inherits from the Frame class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     8-DEC-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "cmpframe.h"            /* Parent Frame class */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SpecFluxFrame structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstSpecFluxFrame {
-
-/* Attributes inherited from the parent class. */
-   AstCmpFrame cmpframe;         /* Parent class structure */
-
-} AstSpecFluxFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSpecFluxFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstCmpFrameVtab frame_vtab;   /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-
-} AstSpecFluxFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstSpecFluxFrameGlobals {
-   AstSpecFluxFrameVtab Class_Vtab;
-   int Class_Init;
-   char GetTitle_Buff[ 201 ];
-} AstSpecFluxFrameGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SpecFluxFrame)         /* Check class membership */
-astPROTO_ISA(SpecFluxFrame)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSpecFluxFrame *astSpecFluxFrame_( void *, void *, const char *, int *, ...);
-#else
-AstSpecFluxFrame *astSpecFluxFrameId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSpecFluxFrame *astInitSpecFluxFrame_( void *, size_t, int, AstSpecFluxFrameVtab *,
-                               const char *, AstSpecFrame *, AstFluxFrame *, int * );
-
-/* Vtab initialiser. */
-void astInitSpecFluxFrameVtab_( AstSpecFluxFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstSpecFluxFrame *astLoadSpecFluxFrame_( void *, size_t, AstSpecFluxFrameVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitSpecFluxFrameGlobals_( AstSpecFluxFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSpecFluxFrame(this) astINVOKE_CHECK(SpecFluxFrame,this,0)
-#define astVerifySpecFluxFrame(this) astINVOKE_CHECK(SpecFluxFrame,this,1)
-
-/* Test class membership. */
-#define astIsASpecFluxFrame(this) astINVOKE_ISA(SpecFluxFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSpecFluxFrame astINVOKE(F,astSpecFluxFrame_)
-#else
-#define astSpecFluxFrame astINVOKE(F,astSpecFluxFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSpecFluxFrame(mem,size,init,vtab,name,frame1,frame2) \
-astINVOKE(O,astInitSpecFluxFrame_(mem,size,init,vtab,name,astCheckSpecFrame(frame1),astCheckFluxFrame(frame2),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSpecFluxFrameVtab(vtab,name) astINVOKE(V,astInitSpecFluxFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSpecFluxFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSpecFluxFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSpecFluxFrame to validate SpecFluxFrame pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/specframe.c b/ast-5.3-1/specframe.c
deleted file mode 100644
index 36a104b..0000000
--- a/ast-5.3-1/specframe.c
+++ /dev/null
@@ -1,7436 +0,0 @@
-/*
-*class++
-*  Name:
-*     SpecFrame
-
-*  Purpose:
-*     Spectral coordinate system description.
-
-*  Constructor Function:
-c     astSpecFrame
-f     AST_SPECFRAME
-
-*  Description:
-*     A SpecFrame is a specialised form of one-dimensional Frame which 
-*     represents various coordinate systems used to describe positions within 
-*     an electro-magnetic spectrum. The particular coordinate system to be 
-*     used is specified by setting the SpecFrame's System attribute (the 
-*     default is wavelength) qualified, as necessary, by other attributes 
-*     such as the rest frequency, the standard of rest, the epoch of 
-*     observation, units, etc (see the description of the System attribute
-*     for details).
-*
-*     By setting a value for thr SpecOrigin attribute, a SpecFrame can be made 
-*     to represent offsets from a given spectral position, rather than absolute
-*     spectral values.
-
-*  Inheritance:
-*     The SpecFrame class inherits from the Frame class.
-
-*  Attributes:
-*     In addition to those attributes common to all Frames, every
-*     SpecFrame also has the following attributes:
-*
-*     - AlignSpecOffset: Align SpecFrames using the offset coordinate system? 
-*     - AlignStdOfRest: Standard of rest in which to align SpecFrames
-*     - RefDec: Declination of the source (FK5 J2000)
-*     - RefRA: Right ascension of the source (FK5 J2000)
-*     - RestFreq: Rest frequency
-*     - SourceSys: Source velocity spectral system
-*     - SourceVel: Source velocity
-*     - SourceVRF: Source velocity rest frame
-*     - SpecOrigin: The zero point for SpecFrame axis values
-*     - StdOfRest: Standard of rest 
-*
-*     Several of the Frame attributes inherited by the SpecFrame class 
-*     refer to a specific axis of the Frame (for instance Unit(axis), 
-*     Label(axis), etc). Since a SpecFrame is strictly one-dimensional,
-*     it allows these attributes to be specified without an axis index.
-*     So for instance, "Unit" is allowed in place of "Unit(1)".
-
-*  Functions:
-c     In addition to those functions applicable to all Frames, the
-c     following functions may also be applied to all SpecFrames:
-f     In addition to those routines applicable to all Frames, the
-f     following routines may also be applied to all SpecFrames:
-*
-c     - astSetRefPos: Set reference position in any celestial system
-f     - AST_SETREFPOS: Set reference position in any celestial system
-c     - astGetRefPos: Get reference position in any celestial system
-f     - AST_GETREFPOS: Get reference position in any celestial system
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     4-NOV-2002 (DSB):
-*        Original version.
-*     2-FEB-2005 (DSB):
-*        - Avoid using astStore to allocate more storage than is supplied
-*        in the "data" pointer. This can cause access violations since 
-*        astStore will then read beyond the end of the "data" area.
-*     22-MAR-2005 (DSB):
-*        - Re-structure MakeSpecMapping in order to avoid unnecessary
-*        access to SpecFrame attributes which may not be set, and to
-*        check that all required attributes have been set if UseDefs is 
-*        zero.
-*     23-MAR-2005 (DSB):
-*        - Added missing rest frames to SorEqual.
-*     12-AUG-2005 (DSB):
-*        - Remove GeoLon and GeoLat attributes. Use the new ObsLon and
-*        ObsLat attributes in the parent Frame class instead. Note, for
-*        backward compatibility the public attribute accessors and the 
-*        astLoadSpecFrame functions still recogonise GeoLon and GeoLat,
-*        but use the ObsLat/ObsLon attributes internally.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     6-OCT-2006 (DSB):
-*        Guard against annulling null pointers in subFrame.
-*     18-OCT-2006 (DSB):
-*        Added SpecOrigin and AlignSpecOffset attributes.
-*     23-OCT-2006 (DSB):
-*        Fix memory leak caused by addition of SpecOrigin and AlignSpecOffset 
-*        attributes.
-*     15-NOV-2006 (DSB):
-*        Only write out SpecOrigin if it is not bad.
-*     8-JAN-2006 (DSB):
-*        - SubFrame: Copy the SourceSystem and SourceStdOfRest attributes
-*        to the System and StdOfRest attributes of the "align_frm" 
-*        SpecFrame before calling MakeSpecMapping. Previously, the 
-*        values assigned to  SourceSystem and SourceStdOfRest were
-*        ignored, and alignment was always performed in the templates System 
-*        and StdOfRest.
-*        - MakeSpecMapping: Correct logic used to decide if steps 2 and 7
-*        can be cancelled.
-*        - OriginSystem: Clear the AlignSpecOffset attributes before
-*        finding the Mapping between the old and new Systems.
-*     16-JAN-2006 (DSB):
-*        Fix bug in Dump that caused SrcVRF not to be written out.
-*     31-JAN-2007 (DSB):
-*        Modified so that a SpecFrame can be used as a template to find a
-*        SpecFrame contained within a CmpFrame. This involves changes in
-*        Match and the removal of the local versions of SetMaxAxes and
-*        SetMinAxes.
-*     8-AUG-2007 (DSB):
-*        Changed Overlay to avoid the possibility of making permanent
-*        changes to the supplied template Frame.
-*     3-SEP-2007 (DSB):
-*        In SubFrame, since AlignSystem is extended by the SpecFrame class
-*        it needs to be cleared before invoking the parent SubFrame
-*        method in cases where the result Frame is not a SkyFrame.
-*     2-OCT-2007 (DSB):
-*        In Overlay, clear AlignSystem as well as System before calling
-*        the parent overlay method.
-*     4-SEP-2009 (DSB):
-*        In MakeSpecMapping, in order to produce alignment that is not
-*        affected by the epoch or reference position, make the alignment 
-*        frame adapt to the epoch and reference position of the target 
-*        and result Frames.
-*     14-SEP-2009 (DSB):
-*        In MakeSpecMapping, extend the 4-SEP-2009 fix to cover other
-*        attributes that define the available rest frames (e.g.
-*        SourceVRF, SourceVel, ObsLat, ObsLon, ObsAlt).
-*     16-SEP-2009 (DSB):
-*        In MakeSpecMapping, retain the original alignment frame attribute 
-*        values if we are restoring the integrity of a FrameSet.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SpecFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__FREQ
-#define LAST_SYSTEM AST__VREL
-
-/* Define the first and last acceptable StdOfRest values. */
-#define FIRST_SOR AST__TPSOR
-#define LAST_SOR AST__SCSOR
-
-/* The supported spectral coordinate systems fall into two groups;
-   "relative", and "absolute". The relative systems define each axis
-   value with respect to the rest frequency, whereas the absolute systems
-   have axis values which do not depend on the rest frequency. Define a 
-   macro which returns one if the specified system is absolute, and zero 
-   otherwise. */
-#define ABS_SYSTEM(sys) \
-      ( ( sys == AST__ENERGY || \
-          sys == AST__WAVENUM || \
-          sys == AST__WAVELEN || \
-          sys == AST__AIRWAVE || \
-          sys == AST__FREQ ) ? 1 : 0 )
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Define other numerical constants for use in this module. */
-#define GETATTRIB_BUFF_LEN 50
-#define GETLABEL_BUFF_LEN 200
-#define GETSYMBOL_BUFF_LEN 20
-#define GETTITLE_BUFF_LEN 200
-
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "unit.h"                /* Units management facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "specmap.h"             /* Spectral coordinate Mappings */
-#include "frame.h"               /* Parent Frame class */
-#include "skyframe.h"            /* Celestial coordinate frames */
-#include "specframe.h"           /* Interface definition for this class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "pal.h"                 /* SlaLib interface */
-#include "shiftmap.h"            /* Change of origin */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-#include <limits.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
-   class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_setunit)( AstFrame *, int, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_clearunit)( AstFrame *, int, int * );
-
-/* Define a variable to hold a SkyFrame which will be used for formatting
-   and unformatting sky positions, etc. */
-static AstSkyFrame *skyframe;      
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetLabel_Buff[ 0 ] = 0; \
-   globals->GetSymbol_Buff[ 0 ] = 0; \
-   globals->GetTitle_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SpecFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SpecFrame,Class_Init)
-#define class_vtab astGLOBAL(SpecFrame,Class_Vtab)
-#define getattrib_buff astGLOBAL(SpecFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(SpecFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(SpecFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(SpecFrame,GetTitle_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 51 ];
-
-/* Default GetLabel string buffer */
-static char getlabel_buff[ 201 ];
-
-/* Default GetSymbol buffer */
-static char getsymbol_buff[ 21 ];
-
-/* Default Title string buffer */
-static char gettitle_buff[ 201 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSpecFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstStdOfRestType StdOfRestCode( const char *, int * );
-static int GetObjSize( AstObject *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static const char *DefUnit( AstSystemType, const char *, const char *, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SpecMapUnit( AstSystemType, const char *, const char *, int * );
-static const char *StdOfRestString( AstStdOfRestType, int * );
-static const char *SystemLabel( AstSystemType, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static double ConvertSourceVel( AstSpecFrame *, AstStdOfRestType, AstSystemType, int * );
-static int EqualSor( AstSpecFrame *, AstSpecFrame *, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int MakeSpecMapping( AstSpecFrame *, AstSpecFrame *, AstSpecFrame *, int, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SorConvert( AstSpecFrame *, AstSpecFrame *, AstSpecMap *, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void ClearUnit( AstFrame *, int, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRefPos( AstSpecFrame *, AstSkyFrame *, double *, double *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetRefPos( AstSpecFrame *, AstSkyFrame *, double, double, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void VerifyAttrs( AstSpecFrame *, const char *, const char *, const char *, int * );
-static double ToUnits( AstSpecFrame *, const char *, double, const char *, int * );
-static void OriginStdOfRest( AstSpecFrame *, AstStdOfRestType, const char *, int * );
-static void OriginSystem( AstSpecFrame *, AstSystemType, const char *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void ClearSystem( AstFrame *, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static AstStdOfRestType GetAlignStdOfRest( AstSpecFrame *, int * );
-static int TestAlignStdOfRest( AstSpecFrame *, int * );
-static void ClearAlignStdOfRest( AstSpecFrame *, int * );
-static void SetAlignStdOfRest( AstSpecFrame *, AstStdOfRestType, int * );
-
-static AstStdOfRestType GetStdOfRest( AstSpecFrame *, int * );
-static int TestStdOfRest( AstSpecFrame *, int * );
-static void ClearStdOfRest( AstSpecFrame *, int * );
-static void SetStdOfRest( AstSpecFrame *, AstStdOfRestType, int * );
-
-static double GetRestFreq( AstSpecFrame *, int * );
-static int TestRestFreq( AstSpecFrame *, int * );
-static void ClearRestFreq( AstSpecFrame *, int * );
-static void SetRestFreq( AstSpecFrame *, double, int * );
-
-static double GetSourceVel( AstSpecFrame *, int * );
-static int TestSourceVel( AstSpecFrame *, int * );
-static void ClearSourceVel( AstSpecFrame *, int * );
-static void SetSourceVel( AstSpecFrame *, double, int * );
-
-static double GetRefRA( AstSpecFrame *, int * );
-static int TestRefRA( AstSpecFrame *, int * );
-static void ClearRefRA( AstSpecFrame *, int * );
-static void SetRefRA( AstSpecFrame *, double, int * );
-
-static double GetRefDec( AstSpecFrame *, int * );
-static int TestRefDec( AstSpecFrame *, int * );
-static void ClearRefDec( AstSpecFrame *, int * );
-static void SetRefDec( AstSpecFrame *, double, int * );
-
-static AstStdOfRestType GetSourceVRF( AstSpecFrame *, int * );
-static int TestSourceVRF( AstSpecFrame *, int * );
-static void ClearSourceVRF( AstSpecFrame *, int * );
-static void SetSourceVRF( AstSpecFrame *, AstStdOfRestType, int * );
-
-static AstSystemType GetSourceSys( AstSpecFrame *, int * );
-static int TestSourceSys( AstSpecFrame *, int * );
-static void ClearSourceSys( AstSpecFrame *, int * );
-static void SetSourceSys( AstSpecFrame *, AstSystemType, int * );
-
-static double GetSpecOrigin( AstSpecFrame *, int * );
-static int TestSpecOrigin( AstSpecFrame *, int * );
-static void ClearSpecOrigin( AstSpecFrame *, int * );
-static void SetSpecOrigin( AstSpecFrame *, double, int * );
-static double GetSpecOriginCur( AstSpecFrame *, int * );
-
-static int GetAlignSpecOffset( AstSpecFrame *, int * );
-static int TestAlignSpecOffset( AstSpecFrame *, int * );
-static void SetAlignSpecOffset( AstSpecFrame *, int, int * );
-static void ClearAlignSpecOffset( AstSpecFrame *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     SpecFrame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   char *new_attrib;             /* Pointer value to new attribute name */
-   int len;                      /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   SpecFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strcmp( attrib, "direction" ) || 
-        !strcmp( attrib, "bottom" ) ||
-        !strcmp( attrib, "top" ) ||
-        !strcmp( attrib, "format" ) ||
-        !strcmp( attrib, "label" ) ||
-        !strcmp( attrib, "symbol" ) ||
-        !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
-   "(1)" and then use the parent ClearAttrib method. */
-      new_attrib = astMalloc( len + 4 );
-      if( new_attrib ) {
-         memcpy( new_attrib, attrib, len );
-         memcpy( new_attrib + len, "(1)", 4 ); 
-         (*parent_clearattrib)( this_object, new_attrib, status );
-         new_attrib = astFree( new_attrib );
-      }
-
-/* AlignStdOfRest. */
-/* --------------- */
-   } else if ( !strcmp( attrib, "alignstdofrest" ) ) {
-      astClearAlignStdOfRest( this );
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which 
-   SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
-   } else if ( !strcmp( attrib, "geolat" ) ) {
-      astClearAttrib( this, "obslat" );
-
-/* GeoLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "geolon" ) ) {
-      astClearAttrib( this, "obslon" );
-
-/* RefDec. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "refdec" ) ) {
-      astClearRefDec( this );
-
-/* RefRA. */
-/* --------- */
-   } else if ( !strcmp( attrib, "refra" ) ) {
-      astClearRefRA( this );
-
-/* RestFreq. */
-/* --------- */
-   } else if ( !strcmp( attrib, "restfreq" ) ) {
-      astClearRestFreq( this );
-
-/* SourceVel. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "sourcevel" ) ) {
-      astClearSourceVel( this );
-
-/* SpecOrigin. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "specorigin" ) ) {
-      astClearSpecOrigin( this );
-
-/* AlignSpecOffset. */
-/* ---------------- */
-   } else if ( !strcmp( attrib, "alignspecoffset" ) ) {
-      astClearAlignSpecOffset( this );
-
-/* SourceVRF */
-/* --------- */
-   } else if ( !strcmp( attrib, "sourcevrf" ) ) {
-      astClearSourceVRF( this );
-
-/* SourceSys */
-/* --------- */
-   } else if ( !strcmp( attrib, "sourcesys" ) ) {
-      astClearSourceSys( this );
-
-/* StdOfRest. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "stdofrest" ) ) {
-      astClearStdOfRest( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearSystem
-
-*  Purpose:
-*     Clear the System attribute for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void ClearSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astClearSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the System attribute for a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to SpecFrame structure */
-   AstSystemType newsys;         /* System after clearing */
-   AstSystemType oldsys;         /* System before clearing */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* Save the original system */
-   oldsys = astGetSystem( this_frame );
-
-/* Use the parent ClearSystem method to clear the System value. */
-   (*parent_clearsystem)( this_frame, status );
-
-/* Get the default System. */
-   newsys = astGetSystem( this_frame );
-
-/* If the system has actually changed. */
-   if( newsys != oldsys ) {
-
-/* Changing the System value will in general require the Units to change
-   as well. If the used has previously specified the units to be used with
-   the new system, then re-instate them (they are stored in the "usedunits"
-   array in the SpecFrame structure). Otherwise, clear the units so that
-   the default units will eb used with the new System. */
-      if( (int) newsys < this->nuunits && this->usedunits &&
-          this->usedunits[ (int) newsys ] ) {
-         astSetUnit( this, 0, this->usedunits[ (int) newsys ] );
-      } else {
-         astClearUnit( this, 0 );
-      }
-
-/* Also, clear all attributes which have system-specific defaults. */
-      astClearLabel( this_frame, 0 );
-      astClearSymbol( this_frame, 0 );
-      astClearTitle( this_frame );
-
-/* Modify the SpecOrigin value to use the new System */
-      OriginSystem( this, oldsys, "astClearSystem", status );
-
-   }
-
-}
-
-static void ClearStdOfRest( AstSpecFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astClearStdOfRest
-
-*  Purpose:
-*     Clear the StdOfRest attribute for a SpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void astClearStdOfRest( AstSpecFrame *this )
-
-*  Class Membership:
-*     SpecFrame virtual function 
-
-*  Description:
-*     This function clears the StdOfRest attribute for a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Modify the SpecOrigin value stored in the SpecFrame structure to refer to the 
-   default rest frame (heliocentric). */
-   OriginStdOfRest( this, AST__HLSOR, "astClearStdOfRest", status );
-
-/* Store a bad value for the standard of rest in the SpecFrame structure. */
-   this->stdofrest = AST__BADSOR;
-}
-
-
-static void ClearUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     ClearUnit
-
-*  Purpose:
-*     Clear the value of the Unit string for a SpecFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void ClearUnit( AstFrame *this_frame, int axis )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astClearUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function clears the Unit string for a specified axis of a 
-*     SpecFrame. It also clears the UsedUnit item in the SpecFrame
-*     structure corresponding to the current System.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     axis
-*        The number of the axis (zero-based).
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   int system;                   /* The SpecFrame's System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astClearUnit" );
-
-/* Clear the UsedUnit item for the current System, if current set. */
-   system = (int) astGetSystem( this );
-   if( system < this->nuunits && this->usedunits ) {
-      this->usedunits[ system ] = astFree( this->usedunits[ system ] );
-   }
-
-/* Use the parent method to clear the Unit attribute of the axis. */
-   (*parent_clearunit)( this_frame, axis, status );
-}
-
-static double ConvertSourceVel( AstSpecFrame *this, AstStdOfRestType newsor, 
-                                AstSystemType newsys, int *status ) {
-/*
-*  Name:
-*     ConvertSourceVel
-
-*  Purpose:
-*     Convert the SourceVel value to a specified rest frame and spectral
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     double ConvertSourceVel( AstSpecFrame *this, AstStdOfRestType newsor, 
-*                              AstSystemType newsys, int *status ) 
-
-*  Class Membership:
-*     SpecFrame member function 
-
-*  Description:
-*     This function convert the SourceVel value to a specified rest frame
-*     and spectral system, and returns the new value.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     newsor
-*        The rest frame in which the source velocity is required.
-*     newsys
-*        The spectral system (AST__VREL or AST__REDSHIFT) in which the 
-*        source velocity is required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The converted source velocity (m/s), or redshift.
-
-*  Notes:
-*     - This function returns zero if an error occurs.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *from;     /* Pointer to a source SpecFrame */
-   AstSpecFrame *to;       /* Pointer to a destination SpecFrame */
-   AstSpecMap *specmap;    /* Pointer to a SpecMap */
-   AstStdOfRestType sor;   /* Standard of rest in which SourceVel is defined */
-   AstSystemType sys;      /* Spectral system in which SourceVel is defined */
-   double ret;             /* The returned value */
-   double rf;              /* Rest frequency (Hz) */
-   double temp;            /* Temporary storage */
-
-/* Initialise */
-   ret = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Get the value of the SourceVel attribute. This will be a velocity in m/s
-   (relativistic, radio or optical), or unitless redshift or beta factor, 
-   depending on the current value of SourceSys. */
-   ret = astGetSourceVel( this );
-
-/* Check it can be used (depends on whether a value has been set and
-   whether the UseDefs attribute is zero). */
-   VerifyAttrs( this, "convert source velocity to a new standard of rest", 
-                "SourceVel", "astMatch", status );
-
-/* Get the rest frame and spectral system to which value refers. */
-   sor = astGetSourceVRF( this );
-   sys = astGetSourceSys( this );
-
-/* If necessary, convert to the requested rest frame and spectral system. */
-   if( sor != newsor || sys != newsys ) {
-
-/* Verify that usable value is available for the RestFreq attribute. An 
-   error is reported if not. */
-      VerifyAttrs( this, "convert source velocity to a new standard of rest", 
-                   "RestFreq", "astMatch", status );
-
-/* Take two copies of the supplied SpecFrame and set their StdOfRest
-   attributes to the required values. */
-      from = astCopy( this );
-      astSetStdOfRest( from, sor );
-
-      to = astCopy( this );
-      astSetStdOfRest( to, newsor );
-
-/* Initialise a new SpecMap to describe the conversion. The new SpecMap
-   initially represents a UnitMap. */
-      specmap = astSpecMap( 1, 0, "", status );
-
-/* Add a conversion from the spectral system in which the SourceVEl value
-   is stored, to relativistic velocity. */
-      if( sys == AST__VRADIO ) {
-         astSpecAdd( specmap, "VRTOVL", NULL );
-
-      } else if( sys == AST__VOPTICAL ) {
-         astSpecAdd( specmap, "VOTOVL", NULL );
-
-      } else if( sys == AST__REDSHIFT ) {
-         astSpecAdd( specmap, "ZOTOVL", NULL );
-
-      } else if( sys == AST__BETA ) {
-         astSpecAdd( specmap, "BTTOVL", NULL );
-      } 
-
-/* Add a conversion from velocity to frequency since SorConvert converts
-   frequencies. */
-      rf = astGetRestFreq( this );
-      astSpecAdd( specmap, "VLTOFR", &rf );
-
-/* Now add a conversion from frequency in the SourveVRF standard of rest to 
-   frequency in the required rest frame. */
-      SorConvert( from, to, specmap, status );
-
-/* Add a conversion from frequency back to velocity. Note, the value of the 
-   rest frequency does not affect the overall conversion. */
-      astSpecAdd( specmap, "FRTOVL", &rf );
-
-/* Add a conversion from relativistic velocity to the required spectral
-   system, if needed. */
-      if( newsys == AST__VRADIO ) {
-         astSpecAdd( specmap, "VLTOVR", NULL );
-
-      } else if( newsys == AST__VOPTICAL ) {
-         astSpecAdd( specmap, "VLTOVO", NULL );
-
-      } else if( newsys == AST__REDSHIFT ) {
-         astSpecAdd( specmap, "VLTOZO", NULL );
-
-      } else if( newsys == AST__BETA ) {
-         astSpecAdd( specmap, "VLTOBT", NULL );
-      } 
-
-/* Use the SpecMap to convert the source velocity in the SourceVRF
-   standard of rest and SourceSys spectral system to the required rest 
-   frame and spectral system. */
-      temp = ret;
-      astTran1( specmap, 1, &temp, 1, &ret );
-
-/* Free resources */
-      specmap = astAnnul( specmap );
-      to = astAnnul( to );
-      from = astAnnul( from );
-   }
-
-/* Return zero if an error has occurred. */
-   if( !astOK ) ret = 0.0;
-
-/* Return the answer. */
-   return ret;
-
-}
-
-static const char *DefUnit( AstSystemType system, const char *method,
-                            const char *class, int *status ){
-/*
-*  Name:
-*     DefUnit
-
-*  Purpose:
-*     Return the default units for a spectral coordinate system type.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *DefUnit( AstSystemType system, const char *method,
-*                          const char *class, int *status )
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function returns a textual representation of the default 
-*     units associated with the specified spectral coordinate system.
-
-*  Parameters:
-*     system
-*        The spectral coordinate system.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     As tring describing the default units. This string follows the
-*     units syntax described in FITS WCS paper I "Representations of world
-*     coordinates in FITS" (Greisen & Calabretta).
-
-*  Notes:
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Value to return */
-
-/* Initialize */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
-   if( system == AST__FREQ ) {
-      result = "GHz";
-   } else if( system == AST__ENERGY ) {
-      result = "J";
-   } else if( system == AST__WAVENUM ) {
-      result = "1/m";
-   } else if( system == AST__WAVELEN ) {
-      result = "Angstrom";
-   } else if( system == AST__AIRWAVE ) {
-      result = "Angstrom";
-   } else if( system == AST__VRADIO ) {
-      result = "km/s";
-   } else if( system == AST__VOPTICAL ) {
-      result = "km/s";
-   } else if( system == AST__REDSHIFT ) {
-      result = "";
-   } else if( system == AST__BETA ) {
-      result = "";
-   } else if( system == AST__VREL ) {
-      result = "km/s";
-
-/* Report an error if the coordinate system was not recognised. */
-   } else {
-      astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
-                "identification code (%d).", status, method, class, class, 
-                (int) system );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int EqualSor( AstSpecFrame *this, AstSpecFrame *that, int *status ) {
-/*
-*  Name:
-*     EqualSor
-
-*  Purpose:
-*     Do two SpecFrames use the same standard of rest?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int EqualSor( AstSpecFrame *this, AstSpecFrame *that, int *status ) 
-
-*  Class Membership:
-*     SpecFrame member function 
-
-*  Description:
-*    This function returns non-zero if the two supplied SpecFrames use
-*    the same standard of rest.
-
-*  Parameters:
-*     this
-*        Pointer to the first SpecFrame.
-*     that
-*        Pointer to the second SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the two SpecFrames use the same standard of rest. Zero
-*     otherwise.
-
-*/
-
-/* Local Variables: */
-   AstStdOfRestType sor;             /* Standard of rest */
-   int result;                       /* Value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise. */
-   result = 1;
-
-/* Compare StdOfRest attributes. */
-   sor = astGetStdOfRest( this );
-   if( astGetStdOfRest( that ) != sor ) {
-      result = 0;
-
-/* If the standards of rest are equal we need to check the the attributes
-   which specify the precise rest frame. */
-   } else {
-
-/* The reference RA and Dec need to be equal */
-      if( !EQUAL( astGetRefRA( this ), astGetRefRA( that ) ) || 
-          !EQUAL( astGetRefDec( this ), astGetRefDec( that ) ) ) {
-         result = 0;
-
-/* For source rest frame, the source velocities, rest frames and systems must 
-   be equal */
-      } else if( sor == AST__SCSOR ){
-         if( !EQUAL( astGetSourceVel( this ), astGetSourceVel( that ) ) || 
-                     astGetSourceVRF( this ) != astGetSourceVRF( that ) ||
-                     astGetSourceSys( this ) != astGetSourceSys( that ) ) {
-            result = 0;
-         }
-
-/* For geocentric, barycentric and heliocentric rest frames, the epochs must 
-   be the same */
-      } else if( sor == AST__GESOR || sor == AST__BYSOR || sor == AST__HLSOR ){
-         if( !EQUAL( astGetEpoch( this ), astGetEpoch( that ) ) ) result = 0;
-
-/* For topocentric rest frame, the epoch and position of the observer must be 
-   the same */
-      } else if( sor == AST__TPSOR ){
-         if( !EQUAL( astGetEpoch( this ), astGetEpoch( that ) ) ||
-             !EQUAL( astGetObsAlt( this ), astGetObsAlt( that ) ) ||
-             !EQUAL( astGetObsLon( this ), astGetObsLon( that ) ) ||
-             !EQUAL( astGetObsLat( this ), astGetObsLat( that ) ) ) result = 0;
-      
-      } else if( sor != AST__LKSOR && sor != AST__LDSOR &&
-                 sor != AST__GLSOR && sor != AST__LGSOR && astOK ) {
-         astError( AST__INTER, "SorEqual(SpecFrame): Function SorEqual "
-                   "does not yet support rest frame %d (AST internal "
-                   "programming error)", status, sor );
-      }
-   }
-
-/* Return the result */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SpecFrame,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;         /* Pointer to SpecFrame structure */
-   int result;                /* Result value to return */
-   int i;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   if( this->usedunits ) {
-      for( i = 0; i < this->nuunits; i++ ) {
-         result += astTSizeOf( this->usedunits[ i ] );
-      }
-      result += astTSizeOf( this->usedunits );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetActiveUnit
-
-*  Purpose:
-*     Obtain the value of the ActiveUnit flag for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int GetActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns the value of the ActiveUnit flag for a
-*    SpecFrame, which is always 1.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to use for the ActiveUnit flag (1).
-
-*/
-   return 1;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a SpecFrame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - The returned string pointer may point at memory allocated
-*     within the SpecFrame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the SpecFrame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   AstStdOfRestType sor;         /* Standard of rest */
-   AstSystemType sys;            /* Spectral system */
-   char *new_attrib;             /* Pointer value to new attribute name */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Attribute value */
-   int ival;                     /* Attribute value */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_object;
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and 
-   unformatting sky positions, etc. */
-   LOCK_MUTEX2
-   if( !skyframe ) {
-      astBeginPM;
-      skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
-      astEndPM;
-   }
-   UNLOCK_MUTEX2
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   SpecFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strcmp( attrib, "direction" ) || 
-        !strcmp( attrib, "bottom" ) ||
-        !strcmp( attrib, "top" ) ||
-        !strcmp( attrib, "format" ) ||
-        !strcmp( attrib, "label" ) ||
-        !strcmp( attrib, "symbol" ) ||
-        !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
-   "(1)" and then use the parent GetAttrib method. */
-      new_attrib = astMalloc( len + 4 );
-      if( new_attrib ) {
-         memcpy( new_attrib, attrib, len );
-         memcpy( new_attrib + len, "(1)", 4 ); 
-         result = (*parent_getattrib)( this_object, new_attrib, status );
-         new_attrib = astFree( new_attrib );
-      }
-
-/* AlignStdOfRest. */
-/* --------------- */
-/* Obtain the AlignStdOfRest code and convert to a string. */
-   } else if ( !strcmp( attrib, "alignstdofrest" ) ) {
-      sor = astGetAlignStdOfRest( this );
-      if ( astOK ) {
-         result = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid AlignStdOfRest "
-                     "identification code (%d).", status, astGetClass( this ), 
-                     astGetClass( this ), (int) sor );
-         }
-      }
-
-/* AlignSpecOffset */
-/* --------------- */
-   } else if ( !strcmp( attrib, "alignspecoffset" ) ) {
-      ival = astGetAlignSpecOffset( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which 
-   SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
-   } else if ( !strcmp( attrib, "geolat" ) ) {
-      result = astGetAttrib( this, "obslat" );
-
-/* GeoLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "geolon" ) ) {
-      result = astGetAttrib( this, "obslon" );
-
-/* RefDec. */
-/* ------- */
-/* Convert to a string using the SkyFrame Format method. */
-   } else if ( !strcmp( attrib, "refdec" ) ) {
-      dval = astGetRefDec( this );
-      if ( astOK ) {
-         result = astFormat( skyframe, 1, dval );
-      }
-
-/* RefRA. */
-/* ------ */
-/* Convert to a string using the SkyFrame Format method. */
-   } else if ( !strcmp( attrib, "refra" ) ) {
-      dval = astGetRefRA( this );
-      if ( astOK ) {
-         result = astFormat( skyframe, 0, dval );
-      }
-
-/* RestFreq. */
-/* --------- */
-   } else if ( !strcmp( attrib, "restfreq" ) ) {
-      dval = astGetRestFreq( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval*1.0E-9 );
-         result = getattrib_buff;
-      }
-
-/* SourceVel */
-/* --------- */
-   } else if ( !strcmp( attrib, "sourcevel" ) ) {
-      dval = astGetSourceVel( this );
-      if ( astOK ) {
-
-/* Convert from m/s to km/s if the SourceVel value is a velocity. . */
-         if( astGetSourceSys( this ) == AST__VREL ||
-             astGetSourceSys( this ) == AST__VRADIO ||
-             astGetSourceSys( this ) == AST__VOPTICAL ) dval *= 1.0E-3;
-
-/* Format */
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-
-      }
-
-/* SpecOrigin. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "specorigin" ) ) {
-      dval = GetSpecOriginCur( this, status );
-      if( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-
-/* SourceVRF */
-/* ----------*/
-   } else if ( !strcmp( attrib, "sourcevrf" ) ) {
-      sor = astGetSourceVRF( this );
-      if ( astOK ) {
-         result = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid SourceVRF "
-                     "identification code (%d).", status, astGetClass( this ), 
-                     astGetClass( this ), (int) sor );
-         }
-      }
-
-/* SourceSys */
-/* ----------*/
-   } else if ( !strcmp( attrib, "sourcesys" ) ) {
-      sys = astGetSourceSys( this );
-      if ( astOK ) {
-         result = SystemString( (AstFrame *) this, sys, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid SourceSys "
-                     "identification code (%d).", status, astGetClass( this ), 
-                     astGetClass( this ), (int) sys );
-         }
-      }
-
-/* StdOfRest. */
-/* ---------- */
-/* Obtain the StdOfRest code and convert to a string. */
-   } else if ( !strcmp( attrib, "stdofrest" ) ) {
-      sor = astGetStdOfRest( this );
-      if ( astOK ) {
-         result = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid StdOfRest "
-                     "identification code (%d).", status, astGetClass( this ), 
-                     astGetClass( this ), (int) sor );
-         }
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDomain
-
-*  Purpose:
-*     Obtain a pointer to the Domain attribute string for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *GetDomain( AstFrame *this, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetDomain protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns a pointer to the Domain attribute string
-*    for a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Domain value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the SpecFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to SpecFrame structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestDomain( this ) ) {
-      result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
-   } else {
-      result = "SPECTRUM";
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetLabel
-
-*  Purpose:
-*     Access the Label string for a SpecFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *GetLabel( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetLabel method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Label string for a specified axis
-*     of a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstMapping *map;              /* Mapping between units */
-   AstSystemType system;         /* Code identifying type of spectral coordinates */
-   char *new_lab;                /* Modified label string */
-   const char *result;           /* Pointer to label string */
-   double orig;                  /* Spec origin */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
-   invoke the parent astGetLabel method to obtain a pointer to it. */
-   if ( astTestLabel( this, axis ) ) {
-      result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, identify the spectral coordinate system described by the 
-   SpecFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
-      if ( astOK ) {
-         result = strcpy( getlabel_buff, SystemLabel( system, status ) );
-         getlabel_buff[ 0 ] = toupper( getlabel_buff[ 0 ] );
-
-/* If a non-zero SpecOrigin has been specified, include the offset now. */
-         orig = GetSpecOriginCur( (AstSpecFrame *) this, status );
-         if( orig != 0.0 ) {
-            sprintf( getlabel_buff + strlen( getlabel_buff ), " offset from %s", 
-                     astFormat( this, 0, orig ) );
-         }
-
-/* Modify this default to take account of the current value of the Unit 
-   attribute, if set. */
-         if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the 
-   units indicated by the Unit attribute. This Mapping is used to modify
-   the existing default label appropriately. For instance, if the default
-   units is "Hz" and the actual units is "log(Hz)", then the default label
-   of "Frequency" is changed to "log( frequency )". */
-            map = astUnitMapper( DefUnit( system, "astGetLabel", 
-                                          astGetClass( this ), status ),
-                                 astGetUnit( this, axis ), result,
-                                 &new_lab );
-            if( new_lab ) {
-               result = strcpy( getlabel_buff, new_lab );
-               new_lab = astFree( new_lab );
-            }
-
-/* Annul the unused Mapping. */
-            if( map ) map = astAnnul( map );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void GetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double *lon, 
-                       double *lat, int *status ){
-/*
-*++
-*  Name:
-c     astGetRefPos
-f     AST_GETREFPOS
-
-*  Purpose:
-*     Return the reference position in a specified celestial coordinate system.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "specframe.h"
-c     void astGetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double *lon, 
-c                        double *lat )
-f     CALL AST_GETREFPOS( THIS, FRM, LON, LAT, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     returns the reference position (specified by attributes RefRA and
-*     RefDec) converted to the celestial coordinate system represented by
-*     a supplied SkyFrame. The celestial longitude and latitude values
-*     are returned in radians.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the SpecFrame.
-c     frm
-f     FRM = INTEGER (Given)
-*        Pointer to the SkyFrame which defines the required celestial
-*        coordinate system. 
-c        If NULL 
-f        If AST__NULL 
-*        is supplied, then the longitude and latitude values are returned 
-*        as FK5 J2000 RA and Dec values.
-c     lon
-f     LON = DOUBLE PRECISION (Returned)
-c        A pointer to a double in which to store the
-f        The 
-*        longitude of the reference point, in the coordinate system
-*        represented by the supplied SkyFrame (radians).
-c     lat
-f     LAT = DOUBLE PRECISION (Returned)
-c        A pointer to a double in which to store the
-f        The 
-*        latitude of the reference point, in the coordinate system
-*        represented by the supplied SkyFrame (radians).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - Values of AST__BAD will be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;            /* Conversion FrameSet */
-   AstFrame *fb;               /* Base Frame */
-   AstFrame *fc;               /* Current Frame */
-   double xin[ 1 ];            /* Axis 1 values */
-   double yin[ 1 ];            /* Axis 2 values */
-   double xout[ 1 ];           /* Axis 1 values */
-   double yout[ 1 ];           /* Axis 2 values */
-
-/* Initialise. */
-   if( lon ) *lon = AST__BAD;
-   if( lat ) *lat = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If no SkyFrame was supplied, just return the stored RefRA and RefDec 
-   values. */
-   if( !frm ) {
-      if( lon ) *lon = astGetRefRA( this );
-      if( lat ) *lat = astGetRefDec( this );
-
-/* Otherwise, convert the stored values to the requested system. */
-   } else {
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and 
-   unformatting sky positions, etc. */
-      LOCK_MUTEX2
-      if( !skyframe ) {
-         astBeginPM;
-         skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
-         astEndPM;
-      }
-      UNLOCK_MUTEX2
-
-/* Find the Mapping from the SkyFrame which describes the internal format
-   in which the RefRA and RefDec attribute values are stored, to the
-   supplied Frame. */
-      fs = astFindFrame( skyframe, frm, "" );
-
-/* If alignment was possible, use the Mapping to transform the internal
-   RefRA and RefDec values. Check for axis permutatuion. */
-      if( fs ) {
-         fb = astGetFrame( fs, AST__BASE );
-         if( astGetLonAxis( fb ) == 0 ) {
-            xin[ 0 ] = astGetRefRA( this );
-            yin[ 0 ] = astGetRefDec( this );
-         } else {
-            yin[ 0 ] = astGetRefRA( this );
-            xin[ 0 ] = astGetRefDec( this );
-         }
-         astTran2( fs, 1, xin, yin, 1, xout, yout );
-
-/* Store the returned values, checking to see if the axes of the supplied
-   SkyFrame have been permuted. */
-         fc = astGetFrame( fs, AST__CURRENT );
-         if( astGetLonAxis( fc ) == 0 ) {
-            if( lon ) *lon = xout[ 0 ];
-            if( lat ) *lat = yout[ 0 ];
-         } else {
-            if( lon ) *lon = yout[ 0 ];
-            if( lat ) *lat = xout[ 0 ];
-         }
-
-/* Annul object references. */
-         fc = astAnnul( fc );
-         fb = astAnnul( fb );
-         fs = astAnnul( fs );
-      }
-   }  
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetSymbol
-
-*  Purpose:
-*     Obtain a pointer to the Symbol string for a SpecFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetSymbol method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Symbol string for a specified axis
-*     of a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstMapping *map;              /* Mapping between units */
-   AstSystemType system;         /* Code identifying type of sky coordinates */
-   char *new_sym;                /* Modified symbol string */
-   const char *result;           /* Pointer to symbol string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
-   invoke the parent astGetSymbol method to obtain a pointer to it. */
-   if ( astTestSymbol( this, axis ) ) {
-      result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the SpecFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
-      if ( astOK ) {
-
-         if( system == AST__FREQ ) {
-	    result = "FREQ";
-         } else if( system == AST__ENERGY ) {
-	    result = "ENER";
-         } else if( system == AST__WAVENUM ) {
-	    result = "WAVN";
-         } else if( system == AST__WAVELEN ) {
-	    result = "WAVE";
-         } else if( system == AST__AIRWAVE ) {
-	    result = "AWAV";
-         } else if( system == AST__VRADIO ) {
-	    result = "VRAD";
-         } else if( system == AST__VOPTICAL ) {
-	    result = "VOPT";
-         } else if( system == AST__REDSHIFT ) {
-	    result = "ZOPT";
-         } else if( system == AST__BETA ) {
-	    result = "BETA";
-         } else if( system == AST__VREL ) {
-	    result = "VELO";
-
-/* Report an error if the coordinate system was not recognised. */
-         } else {
-	    astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
-		      "invalid System identification code (%d).", status, 
-                      astGetClass( this ), astGetClass( this ), (int) system );
-         }
-
-/* Modify this default to take account of the current value of the Unit 
-   attribute, if set. */
-         if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the 
-   units indicated by the Unit attribute. This Mapping is used to modify
-   the existing default symbol appropriately. For instance, if the default
-   units is "Hz" and the actual units is "log(Hz)", then the default symbol
-   of "nu" is changed to "log( nu )". */
-            map = astUnitMapper( DefUnit( system, "astGetSymbol", 
-                                          astGetClass( this ), status ),
-                                 astGetUnit( this, axis ), result,
-                                 &new_sym );
-            if( new_sym ) {
-               result = strcpy( getsymbol_buff, new_sym );
-               new_sym = astFree( new_sym );
-            }
-
-/* Annul the unused Mapping. */
-            if( map ) map = astAnnul( map );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetAlignSystem
-
-*  Purpose:
-*     Obtain the AlignSystem attribute for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "Specframe.h"
-*     AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetAlignSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the AlignSystem attribute for a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The AlignSystem value.
-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to SpecFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestAlignSystem( this ) ) {
-      result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__WAVELEN;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetSystem
-
-*  Purpose:
-*     Obtain the System attribute for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the System attribute for a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to SpecFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestSystem( this ) ) {
-      result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__WAVELEN;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetTitle
-
-*  Purpose:
-*     Obtain a pointer to the Title string for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *GetTitle( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetTitle method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Title string for a SpecFrame.
-*     A pointer to a suitable default string is returned if no Title value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null-terminated character string containing the requested
-*     information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSpecFrame *this;           /* Pointer to SpecFrame structure */
-   AstStdOfRestType sor;         /* Code identifying standard of rest */
-   AstSystemType system;         /* Code identifying type of coordinates */
-   const char *sor_string;       /* Pointer to SOR description */
-   const char *result;           /* Pointer to result string */
-   double rf;                    /* Rest frequency */
-   int nc;                       /* No. of characters added */
-   int pos;                      /* Buffer position to enter text */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
-   method to obtain a pointer to it. */
-   if ( astTestTitle( this ) ) {
-      result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
-   SpecFrame's attributes that determine what this string will be. */
-   } else {
-      system = astGetSystem( this );
-      sor = astGetStdOfRest( this );
-      sor_string = StdOfRestString( sor, status );
-      rf = astGetRestFreq( this );
-
-/* Classify the coordinate system type and create an appropriate Title
-   string.  (Note that when invoking the astFmtDecimalYr function we must
-   use a separate sprintf on each occasion so as not to over-write its
-   internal buffer before the result string has been used.) */
-      if ( astOK ) {
-         result = gettitle_buff;
-
-/* Begin with the system's default label. */
-         pos = sprintf( gettitle_buff, "%s", SystemLabel( system, status ) );
-         gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-
-/* Append the standard of rest in parentheses, if set. */
-         if( astTestStdOfRest( this ) ) {
-            nc = sprintf( gettitle_buff+pos, " (%s)", sor_string );
-            pos += nc;
-         }
-
-/* Append the rest frequency if relevant. */
-         if( !ABS_SYSTEM(system) && ( astTestRestFreq( this ) ||
-                                      astGetUseDefs( this ) ) ) {
-            pos += sprintf( gettitle_buff+pos, ", rest frequency = %g GHz", rf*1.0E-9 );
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned pointer value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double GetSpecOriginCur( AstSpecFrame *this, int *status ) {
-/*
-*  Name:
-*     GetSpecOriginCur
-
-*  Purpose:
-*     Obtain the SpecOrigin attribute for a SpecFrame in current units.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double GetSpecOriginCur( AstSpecFrame *this, int *status )
-
-*  Class Membership:
-*     SpecFrame virtual function 
-
-*  Description:
-*     This function returns the SpecOrigin attribute for a SpecFrame, in
-*     the current units of the SpecFrame. The protected astGetSpecOrigin
-*     method can be used to obtain the time origin in the default units of 
-*     the SpecFrame's System.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The SpecOrigin value, in the units, system and rest frame specified
-*     by the current values of the Unit, System and StdOfRest attributes
-*     within "this".
-
-*  Notes:
-*     - AST__BAD is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   const char *cur;
-   const char *def;
-   double result;         
-   double defval;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the value in the default units */
-   result = astGetSpecOrigin( this );
-
-/* If SpecOrigin is non-zero and non-BAD we convert it to the current units.*/
-   if( result != 0.0 && result != AST__BAD ) {
-
-/* Get the default units for the SpecFrame's System. */
-      def = DefUnit( astGetSystem( this ), "astGetSpecOrigin", "SpecFrame", status );
-
-/* Get the current units from the SpecFrame. */
-      cur = astGetUnit( this, 0 );
-
-/* If the units differ, get a Mapping from default to current units. */
-      if( cur && def ){
-         if( strcmp( cur, def ) ) {
-            map = astUnitMapper( def, cur, NULL, NULL );
-
-/* Report an error if the units are incompatible. */
-            if( !map ) {
-               astError( AST__BADUN, "%s(%s): The current units (%s) are not suitable "
-                         "for a SpecFrame.", status, "astGetSpecOrigin", astGetClass( this ), 
-                         cur );
-
-/* Otherwise, transform the stored origin value.*/
-            } else {
-               defval = result;
-               astTran1( map, 1, &defval, 1, &result );
-               map = astAnnul( map );
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetUnit
-
-*  Purpose:
-*     Obtain a pointer to the Unit string for a SpecFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *GetUnit( AstFrame *this_frame, int axis )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astGetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Unit string for a specified axis
-*     of a SpecFrame. If the Unit attribute has not been set for the axis, a
-*     pointer to a suitable default string is returned instead.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the Unit value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   AstSystemType system;         /* The SpecFrame's System value */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetUnit" );
-
-/* If a value has been set for the Unit attribute, use the parent 
-   GetUnit method to return a pointer to the required Unit string. */
-   if( astTestUnit( this, axis ) ){
-      result = (*parent_getunit)( this_frame, axis, status );
-
-/* Otherwise, identify the spectral coordinate system described by the 
-   SpecFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* Return a string describing the default units. */
-      result = DefUnit( system, "astGetUnit", astGetClass( this ), status );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-void astInitSpecFrameVtab_(  AstSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSpecFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void astInitSpecFrameVtab( AstSpecFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SpecFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SpecFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASpecFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->GetRefPos = GetRefPos;
-   vtab->SetRefPos = SetRefPos;
-
-   vtab->ClearAlignStdOfRest = ClearAlignStdOfRest;
-   vtab->TestAlignStdOfRest = TestAlignStdOfRest;
-   vtab->GetAlignStdOfRest = GetAlignStdOfRest;
-   vtab->SetAlignStdOfRest = SetAlignStdOfRest;
-
-   vtab->ClearSourceVRF = ClearSourceVRF;
-   vtab->TestSourceVRF = TestSourceVRF;
-   vtab->GetSourceVRF = GetSourceVRF;
-   vtab->SetSourceVRF = SetSourceVRF;
-
-   vtab->ClearSourceSys = ClearSourceSys;
-   vtab->TestSourceSys = TestSourceSys;
-   vtab->GetSourceSys = GetSourceSys;
-   vtab->SetSourceSys = SetSourceSys;
-
-   vtab->ClearRefDec = ClearRefDec;
-   vtab->TestRefDec = TestRefDec;
-   vtab->GetRefDec = GetRefDec;
-   vtab->SetRefDec = SetRefDec;
-
-   vtab->ClearRefRA = ClearRefRA;
-   vtab->TestRefRA = TestRefRA;
-   vtab->GetRefRA = GetRefRA;
-   vtab->SetRefRA = SetRefRA;
-
-   vtab->ClearRestFreq = ClearRestFreq;
-   vtab->TestRestFreq = TestRestFreq;
-   vtab->GetRestFreq = GetRestFreq;
-   vtab->SetRestFreq = SetRestFreq;
-
-   vtab->ClearStdOfRest = ClearStdOfRest;
-   vtab->TestStdOfRest = TestStdOfRest;
-   vtab->GetStdOfRest = GetStdOfRest;
-   vtab->SetStdOfRest = SetStdOfRest;
-
-   vtab->ClearSourceVel = ClearSourceVel;
-   vtab->TestSourceVel = TestSourceVel;
-   vtab->GetSourceVel = GetSourceVel;
-   vtab->SetSourceVel = SetSourceVel;
-
-   vtab->ClearSpecOrigin = ClearSpecOrigin;
-   vtab->TestSpecOrigin = TestSpecOrigin;
-   vtab->GetSpecOrigin = GetSpecOrigin;
-   vtab->SetSpecOrigin = SetSpecOrigin;
-
-   vtab->TestAlignSpecOffset = TestAlignSpecOffset;
-   vtab->SetAlignSpecOffset = SetAlignSpecOffset;
-   vtab->GetAlignSpecOffset = GetAlignSpecOffset;
-   vtab->ClearAlignSpecOffset = ClearAlignSpecOffset;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_getdomain = frame->GetDomain;
-   frame->GetDomain = GetDomain;
-
-   parent_getsystem = frame->GetSystem;
-   frame->GetSystem = GetSystem;
-   parent_setsystem = frame->SetSystem;
-   frame->SetSystem = SetSystem;
-   parent_clearsystem = frame->ClearSystem;
-   frame->ClearSystem = ClearSystem;
-
-   parent_getalignsystem = frame->GetAlignSystem;
-   frame->GetAlignSystem = GetAlignSystem;
-
-   parent_getlabel = frame->GetLabel;
-   frame->GetLabel = GetLabel;
-
-   parent_getsymbol = frame->GetSymbol;
-   frame->GetSymbol = GetSymbol;
-
-   parent_gettitle = frame->GetTitle;
-   frame->GetTitle = GetTitle;
-
-   parent_clearunit = frame->ClearUnit;
-   frame->ClearUnit = ClearUnit;
-
-   parent_getunit = frame->GetUnit;
-   frame->GetUnit = GetUnit;
-
-   parent_setunit = frame->SetUnit;
-   frame->SetUnit = SetUnit;
-
-   parent_match = frame->Match;
-   frame->Match = Match;
-
-   parent_overlay = frame->Overlay;
-   frame->Overlay = Overlay;
-
-   parent_subframe = frame->SubFrame;
-   frame->SubFrame = SubFrame;
-
-/* Store replacement pointers for methods which will be over-ridden by new
-   member functions implemented here. */
-   frame->GetActiveUnit = GetActiveUnit;
-   frame->TestActiveUnit = TestActiveUnit;
-   frame->ValidateSystem = ValidateSystem;
-   frame->SystemString = SystemString;
-   frame->SystemCode = SystemCode;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "SpecFrame",
-               "Description of spectral coordinate system" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MakeSpecMapping( AstSpecFrame *target, AstSpecFrame *result,
-                            AstSpecFrame *align_frm, int report, 
-                            AstMapping **map, int *status ) {
-/*
-*  Name:
-*     MakeSpecMapping
-
-*  Purpose:
-*     Generate a Mapping between two SpecFrames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int MakeSpecMapping( AstSpecFrame *target, AstSpecFrame *result,
-*                          AstSpecFrame *align_frm, int report, 
-*                          AstMapping **map, int *status ) {
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function takes two SpecFrames and generates a Mapping that
-*     converts between them, taking account of differences in their
-*     coordinate systems, rest frequency, standard of rest, etc. 
-*
-*     In order to cut down the number of transformations to be considered,
-*     the scheme works by first converting from the target frame to an
-*     "alignment" Frame, using the attributes of the target to define the
-*     transformation. A transformation is then found from the alignment
-*     frame to the required result Frame,  using the attributes of the
-*     result to define the transformation. The alignment Frame is
-*     described by the AlignSystem and AlignStdOfRest attributes of the 
-*     "align_frm" SpecFrame.
-*
-*     Thus, different forms of alignment can be obtained by suitable
-*     choice of the attributes of "align_frm". For instance, to compare the
-*     radio velocity dispersion of two lines at different rest frequencies,
-*     you would set "system=radio velocity" and (probably) "stdofrest=local 
-*     group" in "align_frm". On the other hand if you wanted to re-calibrate 
-*     an existing radio velocity Frame within a FrameSet to use a different 
-*     rest frequency, you would make the SpecFrame the current Frame and then 
-*     set the rest frequency attribute for the FrameSet. The "integrity 
-*     checking" system in the FrameSet class would then get the Mapping 
-*     between the original and the modified SpecFrames. In this case, the 
-*     "alignment system" needs to be "frequency" since you want the original 
-*     and modified SpecFrames to be aligned in frequency, not radio velocity.
-
-*  Parameters:
-*     target
-*        Pointer to the first SpecFrame.
-*     result
-*        Pointer to the second SpecFrame.
-*     align_frm
-*        A SpecFrame defining the system and standard of rest in which to 
-*        align the target and result SpecFrames. 
-*     report
-*        Should errors be reported if no match is possible? These reports
-*        will describe why no match was possible.
-*     map
-*        Pointer to a location which is to receive a pointer to the
-*        returned Mapping. The forward transformation of this Mapping
-*        will convert from "target" coordinates to "result"
-*        coordinates, and the inverse transformation will convert in
-*        the opposite direction (all coordinate values in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Mapping could be generated, or zero if the two
-*     SpecFrames are sufficiently un-related that no meaningful Mapping
-*     can be produced (albeit an "unmeaningful" Mapping will be returned
-*     in this case, which will need to be annulled).
-
-*  Notes:
-*     A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Constants: */
-#define MAX_ARGS 1               /* Max arguments for an SpecMap conversion */
-
-/* Local Variables: */
-   AstMapping *map1;             /* Intermediate Mapping */
-   AstMapping *map2;             /* Intermediate Mapping */
-   AstMapping *umap1;            /* First Units Mapping */
-   AstMapping *umap2;            /* Second Units Mapping */
-   AstSpecMap *specmap;          /* Pointer to SpecMap */
-   AstShiftMap *sm;              /* ShiftMap pointer */
-   AstSpecFrame *align_target;   /* Alignment Frame with target properties */
-   AstSpecFrame *align_result;   /* Alignment Frame with result properties */
-   AstSystemType serr;           /* Erroneous system */
-   AstSystemType align_system;   /* Code to identify alignment system */
-   AstSystemType target_system;  /* Code to identify target system */
-   AstSystemType result_system;  /* Code to identify result system */
-   const char *uerr;             /* Erroneous units */
-   const char *ures;             /* Results units */
-   const char *utarg;            /* Target units */
-   const char *vmess;            /* Text for use in error messages */
-   double args[ MAX_ARGS ];      /* Conversion argument array */
-   double target_rf;             /* Target rest frequency (Hz) */
-   double result_rf;             /* Result rest frequency (Hz) */
-   double target_origin;         /* Target origin */
-   double result_origin;         /* Result origin */
-   int match;                    /* Mapping can be generated? */
-   int step2;                    /* Perform the 2nd step in the Mapping? */
-   int step3;                    /* Perform the 3rd step in the Mapping? */
-   int step4;                    /* Perform the 4th step in the Mapping? */
-   int step5;                    /* Perform the 5th step in the Mapping? */
-   int step6;                    /* Perform the 6th step in the Mapping? */
-   int step7;                    /* Perform the 7th step in the Mapping? */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
-   match = 1;
-   *map = NULL;
-
-/* Create an initial (null) SpecMap. This is a 1D Mapping which converts
-   spectral axis values between different systems and standard of rest.
-   The axis units used by the SpecMap class match the default units used
-   by this class. Any discrepancy between units is taken into account at
-   the end of this function, once the total SpecMap has been created. */
-   specmap = astSpecMap( 1, 0, "", status );
-
-/* Define local macros as shorthand for adding spectral coordinate
-   conversions to this SpecMap.  Each macro simply stores details of
-   the additional arguments in the "args" array and then calls
-   astSpecAdd. The macros differ in the number of additional argument
-   values. */
-#define TRANSFORM_0(cvt) \
-        astSpecAdd( specmap, cvt, NULL );
-
-#define TRANSFORM_1(cvt,arg0) \
-        args[ 0 ] = arg0; \
-        astSpecAdd( specmap, cvt, args );
-
-/* Get all the necessary attributes from the result, target and alignment
-   Frames. */
-   target_rf = astGetRestFreq( target );
-   result_rf = astGetRestFreq( result );
-
-   target_system = astGetSystem( target );
-   result_system = astGetSystem( result );
-   align_system = astGetSystem( align_frm );
-
-/* Define text for error messages.*/
-   vmess = "convert between spectral systems";
-
-/* Verify that values for the standard of rest have been set if required
-   (i.e if the UseDefs attribute of either SpecFrame is false). */
-   VerifyAttrs( result, vmess, "StdOfRest", "astMatch", status );
-   VerifyAttrs( target, vmess, "StdOfRest", "astMatch", status );
-
-/* There are two different strategies for alignment. I'll use the Source
-   rest frame as an example, although the same argument applies to other
-   rest frames. In the first strategy, all "Source" rest frames are
-   considered equal. That is, if two SpecFrames respresent (for example)
-   frequencies in the source frame, then the SpecFrames are aligned using
-   a UnitMap even if the details of the two source rest frames differ.
-   This is usually what users want to see when (for instance) aligning 
-   plots of two spectra which both represent source frequencies but where
-   the source frames details differ. In the second strategy, "Source"
-   rest frames are aligned using a SpecMap that takes into account any
-   differences in the properties of the source rest frames. This is what
-   should happen when changes are made to the properties of a SpecFrame 
-   within a FrameSet. For instance, if the user changes the SourceVel
-   attribute of the current Frame (assumed here to be a SpecFrame) in a 
-   FrameSet, then the process of restoring the integrity of the FrameSet
-   (see frameset.c for details of integrity restoration) should cause the
-   base->current Mapping in the FrameSet to be modified to reflect the
-   new SourceVel value. 
-
-   So if the current call to this function is part of the process of 
-   restoring a FrameSet's integrity following changes to the FrameSet's 
-   current Frame, then we want to retain the properties of the supplied 
-   alignment Frame. So we use clones of the supplied alignment Frame. */
-   if( astGetFrameFlags( target ) & AST__INTFLAG ) {
-      align_target = astClone( align_frm );
-      align_result = astClone( align_frm );
-
-/* Buf if we are not restoring the integrity of a FrameSet, we want
-   to ignore any differences in the properties that define the available 
-   rest frames. So create copies of the alignment Frame in which the 
-   properies defining the available rest frames are the same as in the 
-   target and result Frames. */
-   } else {
-      align_target = astCopy( align_frm );
-      astSetEpoch( align_target, astGetEpoch( target ) );
-      astSetRefRA( align_target, astGetRefRA( target ) );
-      astSetRefDec( align_target, astGetRefDec( target ) );
-      astSetSourceVRF( align_target, astGetSourceVRF( target ) );
-      astSetSourceVel( align_target, astGetSourceVel( target ) );
-      astSetObsLat( align_target, astGetObsLat( target ) );
-      astSetObsLon( align_target, astGetObsLon( target ) );
-      astSetObsAlt( align_target, astGetObsAlt( target ) );
-
-      align_result = astCopy( align_frm );
-      astSetEpoch( align_result, astGetEpoch( result ) );
-      astSetRefRA( align_result, astGetRefRA( result ) );
-      astSetRefDec( align_result, astGetRefDec( result ) );
-      astSetSourceVRF( align_result, astGetSourceVRF( result ) );
-      astSetSourceVel( align_result, astGetSourceVel( result ) );
-      astSetObsLat( align_result, astGetObsLat( result ) );
-      astSetObsLon( align_result, astGetObsLon( result ) );
-      astSetObsAlt( align_result, astGetObsAlt( result ) );
-   }
-
-/* The supported spectral coordinate systems fall into two groups;
-   "relative", and "absolute". The relative systems define each axis
-   value with respect to the rest frequency, whereas the absolute systems
-   have axis values which do not depend on the rest frequency. In order
-   to convert an axis value from a system in one group to a system in the 
-   other group, the rest frequency must be known. However, the rest
-   frequency is not necessary in order to convert axis values between two 
-   systems belonging to the same group.  Determine if the alignment system 
-   is absolute or relative. If absolute, we ignore the system of the supplied 
-   "align_frm" and align in frequency, since aligning in any absolute system 
-   will automatically ensure that all the other absolute systems are aligned. 
-   Similarly, aligning in any relative system will automatically ensure that 
-   all the other relative systems are aligned. Doing this cuts down the 
-   complexity of the conversion process since we do not need to check every 
-   possible alignment system. */
-   align_system = ( ABS_SYSTEM( align_system ) ) ? AST__FREQ : AST__VREL;
-
-/* The total Mapping is made up of the following steps in series:
-
-  0) Convert from an offset value to an absolute value (if SpecOrigin set)
-  1) Convert target units to default units for the targets system
-  2) Convert from target system in target SOR to frequency in target SOR
-  3) Convert from freq in target SOR to freq in alignment SOR
-  4) Convert from freq in alignment SOR to alignment system in alignment SOR
-  5) Convert from alignment system in alignment SOR to freq in alignment SOR
-  6) Convert from freq in alignment SOR to freq in result SOR 
-  7) Convert from freq in result SOR to result system in result SOR
-  8) Convert default units for the result system to results unit
-  9) Convert from an absolute value to an offset value (if SpecOrigin set)  
-
-   Steps 1,2,3,4 are performed using the attributes of the target (rest
-   frequency, reference farem, etc), whilst steps 5,6,7,8 are performed 
-   using the attributes of the target (rest frequency, reference frame, 
-   etc). It is necessary to go from target system to alignment system 
-   via frequency because SOR conversion can only be performed in the
-   frequency domain.
-
-   Some of these steps may not be necessary. Initially assume all steps
-   are necessary (we leave steps 0, 1, 8 and 9 out of this process and
-   implement them once all other steps have been done). */
-   step2 = 1;
-   step3 = 1;
-   step4 = 1;
-   step5 = 1;
-   step6 = 1;
-   step7 = 1;
-
-/* Step 2 is not necessary if the target system is frequency. */
-   if( target_system == AST__FREQ ) step2 = 0;
-
-/* Step 3 is not necessary if the alignment SOR is the same as the target 
-   SOR. */
-   if( EqualSor( target, align_target, status ) ) step3 = 0;
-
-/* Step 6 is not necessary if the alignment SOR is the same as the result
-   SOR. */
-   if( EqualSor( result, align_result, status ) ) step6 = 0;
-
-/* Step 7 is not necessary if the result system is frequency. */
-   if( result_system == AST__FREQ ) step7 = 0;
-
-/* Steps 4 and 5 are not necessary if the alignment system is frequency,
-   or if the target and result rest frequencies are equal. */
-   if( align_system == AST__FREQ || result_rf == target_rf ) step4 = step5 = 0;
-
-/* Steps 3 and 6 are not necessary if steps 4 and 5 are not necessary, and
-   the target sor equals the result sor. */
-   if( !step4 && !step5 && EqualSor( target, result, status ) ) step3 = step6 = 0;
-
-/* Steps 2 and 7 are not necessary if steps 3, 4, 5 and 6 are not necessary, 
-   and the target sor equals the result sor, and the target and results 
-   systems are equal (if the systems are relative they must also have equal 
-   rest frequencies). */
-   if( !step3 && !step4 && !step5 && !step6 && EqualSor( target, result, status ) &&
-       target_system == result_system ) {
-      if( !ABS_SYSTEM( target_system ) && result_rf == target_rf ) step2 = step7 = 0;
-   }
-
-
-/* Now we know which steps are needed, let's do them (we delay unit
-   conversion to the end)... */
-
-/* Step 2: target system in target rest frame to frequency in target rest 
-   frame. */
-   if( step2 ) {
-      if( target_system != AST__FREQ ) {
-
-/* If the target system is absolute, we can convert directly to frequency. */
-         if ( target_system == AST__ENERGY ) {
-            TRANSFORM_0( "ENTOFR" )
-
-         } else if ( target_system == AST__WAVENUM ) {
-            TRANSFORM_0( "WNTOFR" )
-
-         } else if ( target_system == AST__WAVELEN ) {
-            TRANSFORM_0( "WVTOFR" )
-
-         } else if ( target_system == AST__AIRWAVE ) {
-            TRANSFORM_0( "AWTOFR" )
-
-/* If the target target_system is relative, we first need to convert to 
-   apparent radial velocity, and then to frequency using the rest frequency. */
-         } else {
-
-            if ( target_system == AST__VRADIO ) {
-               TRANSFORM_0( "VRTOVL" )
-   
-            } else if ( target_system == AST__VOPTICAL ) {
-               TRANSFORM_0( "VOTOVL" )
-   
-            } else if ( target_system == AST__REDSHIFT ) {
-               TRANSFORM_0( "ZOTOVL" )
-   
-            } else if ( target_system == AST__BETA ) {
-               TRANSFORM_0( "BTTOVL" )
-            }
-
-            VerifyAttrs( target, vmess, "RestFreq", "astMatch", status );
-            TRANSFORM_1( "VLTOFR", target_rf )
-         }
-      }
-   }
-
-/* Step 3: frequency in target rest frame to frequency in alignment rest
-   frame. */
-   if( step3 ) match = SorConvert( target, align_target, specmap, status );
-
-/* Step 4: frequency in alignment rest frame to alignment system in alignment 
-   rest frame. The alignment will be either relativistic velocity or
-   frequency. */
-   if( step4 ) {
-      if( align_system == AST__VREL ) {
-         VerifyAttrs( target, vmess, "RestFreq", "astMatch", status );
-         TRANSFORM_1( "FRTOVL", target_rf )
-      }
-   }
-
-/* Step 5: Alignment system in alignment rest frame to frequency in alignment 
-   rest frame (from now on use the attributes of the result SpecFrame to
-   define the conversion parameters). */
-   if( step5 ) {
-      if( align_system == AST__VREL ) {
-         VerifyAttrs( result, vmess, "RestFreq", "astMatch", status );
-         TRANSFORM_1( "VLTOFR", result_rf )
-      }
-   }
-
-/* Step 6: frequency in alignment rest frame to frequency in result rest 
-   frame. */
-   if( step6 ) match = SorConvert( align_result, result, specmap, status );
-
-/* Step 7: frequency in result rest frame to result system in result rest
-   frame. */
-   if( step7 ) {
-      if( result_system != AST__FREQ ) {
-
-/* If the results system is absolute, we can convert directly. */
-         if ( result_system == AST__ENERGY ) {
-            TRANSFORM_0( "FRTOEN" )
-
-         } else if ( result_system == AST__WAVENUM ) {
-            TRANSFORM_0( "FRTOWN" )
-
-         } else if ( result_system == AST__WAVELEN ) {
-            TRANSFORM_0( "FRTOWV" )
-
-         } else if ( result_system == AST__AIRWAVE ) {
-            TRANSFORM_0( "FRTOAW" )
-
-/* If the result system is relative, we first need to convert to apparent 
-   radial velocity from frequency using the rest frequency. Report an error 
-   if the rest frequency is undefined. */
-         } else {
-            VerifyAttrs( result, vmess, "RestFreq", "astMatch", status );
-            TRANSFORM_1( "FRTOVL", result_rf )
-
-/* Now convert from apparent radial velocity to the required result system. */
-            if ( result_system == AST__VRADIO ) {
-               TRANSFORM_0( "VLTOVR" )
-   
-            } else if ( result_system == AST__VOPTICAL ) {
-               TRANSFORM_0( "VLTOVO" )
-   
-            } else if ( result_system == AST__REDSHIFT ) {
-               TRANSFORM_0( "VLTOZO" )
-   
-            } else if ( result_system == AST__BETA ) {
-               TRANSFORM_0( "VLTOBT" )
-            }
-         }
-      }
-   }
-
-/* The SpecMap created above class assumes that the axis values supplied to 
-   its Transform method are in units which correspond to the default units 
-   for its class (the returned values also use these units). However,
-   the Unit attributes of the supplied Frames may have been set to some
-   non-default value, and so we need to add Mappings before and after the
-   SpecMap which convert to and from the default units. Find the Mapping
-   from the target Frame Units to the default Units for the target's system. */
-   utarg = astGetUnit( target, 0 );
-   umap1 = astUnitMapper( utarg, SpecMapUnit( target_system, "MakeSpecMap", 
-                                              "SpecFrame", status ), NULL, NULL );
-
-/* Find the Mapping from the default Units for the result's system to the
-   Units of the result Frame. */
-   ures = astGetUnit( result, 0 );
-   umap2 = astUnitMapper( SpecMapUnit( result_system, "MakeSpecMap", 
-                                       "SpecFrame", status ), ures, NULL, NULL );
-
-/* If both units Mappings were created OK, sandwich the SpecMap between
-   them. */
-   if( umap1 && umap2 ) {
-      map1 = (AstMapping *) astCmpMap( umap1, specmap, 1, "", status );
-      map2 = (AstMapping *) astCmpMap( map1, umap2, 1, "", status );
-      map1 = astAnnul( map1 );
-
-/* If the simplified SpecMap is a UnitMap, and the target and result
-   units are the same, we do not need to know the mapping between units.
-   Otherwise, report an error and indicate that we cannot convert between 
-   the Frames. */
-   } else {
-      map2 = astSimplify( specmap );
-      if( !astIsAUnitMap( map2 ) || strcmp( ures, utarg ) ) {
-         match = 0;
-         if( astOK && report ) {         
-            if( !umap1 ) {
-               uerr = utarg;
-               serr = astGetSystem( target );
-            } else {
-               uerr = ures;
-               serr = astGetSystem( result );
-            }
-            astError( AST__BADUN, "astMatch(SpecFrame): Inappropriate units (%s) "
-                      "specified for a %s axis.", status, uerr, SystemLabel( serr, status ) );
-         }
-      }
-   }
-
-/* Step 0: offset to absolute value in target system. Prepend the Maping created 
-   above with a ShiftMap that does the required shift of origin. */
-   target_origin = GetSpecOriginCur( target, status );
-   if( target_origin != 0.0 ) {
-      sm = astShiftMap( 1, &target_origin, "", status );
-      map1 = (AstMapping *) astCmpMap( sm, map2, 1, "", status );
-      sm = astAnnul( sm );
-   } else {
-      map1 = astClone( map2 );
-   }
-   map2 = astAnnul( map2 );
-
-/* Step 9: absolute value to offset in result system. If we are aligning in the 
-   offset system, use the transformed target origin as the new zero point. 
-   Otherwise use the origin from the result frame. First get the origin for the 
-   result system. */
-   if( astGetAlignSpecOffset( target ) && astGetAlignSpecOffset( result ) ) {
-      result_origin = 0.0;
-      astTran1( map1, 1, &result_origin, 1, &result_origin );
-   } else {
-      result_origin = GetSpecOriginCur( result, status );
-   }
-
-/* Now create the ShiftMap and apend it to the end of the Maping. */
-   if( result_origin != 0.0 ) {
-      result_origin = -result_origin;
-      sm = astShiftMap( 1, &result_origin, "", status );
-      map2 = (AstMapping *) astCmpMap( map1, sm, 1, "", status );
-      sm = astAnnul( sm );
-   } else {
-      map2 = astClone( map1 );
-   }
-   map1 = astAnnul( map1 );
-
-/* Return the simplified Mapping. */
-   *map = astSimplify( map2 );
-
-/* Annul remaining resources. */
-   map2 = astAnnul( map2 );
-   specmap = astAnnul( specmap );
-   if( umap1 ) umap1 = astAnnul( umap1 );
-   if( umap2 ) umap2 = astAnnul( umap2 );
-   align_result = astAnnul( align_result );
-   align_target = astAnnul( align_target );
-
-/* If an error occurred, annul the returned Mapping and clear the returned 
-   values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-
-/* Undefine macros local to this function. */
-#undef MAX_ARGS
-#undef TRANSFORM_0
-#undef TRANSFORM_1
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes, AstMapping **map,
-                  AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the protected astMatch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function matches a "template" SpecFrame to a "target" Frame and
-*     determines whether it is possible to convert coordinates between them.
-*     If it is, a mapping that performs the transformation is returned along
-*     with a new Frame that describes the coordinate system that results when
-*     this mapping is applied to the "target" coordinate system. In addition,
-*     information is returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" and "template"
-*     Frames from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template SpecFrame. This describes the coordinate 
-*        system (or set of possible coordinate systems) into which we wish to 
-*        convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate system in
-*        which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the template SpecFrame axis from 
-*        which it is derived. If it is not derived from any template 
-*        SpecFrame axis, a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the target Frame axis from which it
-*        is derived. If it is not derived from any target Frame axis, a value
-*        of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will be
-*        returned if the requested coordinate conversion is possible. If
-*        returned, the forward transformation of this Mapping may be used to
-*        convert coordinates between the "target" Frame and the "result"
-*        Frame (see below) and the inverse transformation will convert in the
-*        opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be returned
-*        if the requested coordinate conversion is possible. If returned, this
-*        Frame describes the coordinate system that results from applying the
-*        returned Mapping (above) to the "target" coordinate system. In
-*        general, this Frame will combine attributes from (and will therefore
-*        be more specific than) both the target and the template Frames. In
-*        particular, when the template allows the possibility of transformaing
-*        to any one of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate conversion is
-*     possible. Otherwise zero is returned (this will not in itself result in
-*     an error condition).
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     This implementation addresses the matching of a SpecFrame class 
-*     object to any other class of Frame. A SpecFrame will match any class 
-*     of SpecFrame (i.e. possibly from a derived class) but will not match 
-*     a less specialised class of Frame.
-*/
-
-/* Local Variables: */
-   AstFrame *frame0;             /* Pointer to Frame underlying axis 0 */
-   AstSpecFrame *template;       /* Pointer to template SpecFrame structure */
-   int iaxis0;                   /* Axis index underlying axis 0 */
-   int iaxis;                    /* Axis index */
-   int match;                    /* Coordinate conversion possible? */
-   int target_axis0;             /* Index of SpecFrame axis in the target */
-   int target_naxes;             /* Number of target axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the template SpecFrame structure. */
-   template = (AstSpecFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
-   target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
-   Frame class object. This ensures that the number of axes (1) and
-   domain, etc. of the target Frame are suitable. Invoke the parent
-   "astMatch" method to verify this. */
-   match = (*parent_match)( template_frame, target,
-                            template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
-   needed, but keep the memory allocated for the axis association
-   arrays, which we will re-use. */
-   if ( astOK && match ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-   }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
-   all target axes. Stop when a SpecFrame axis is found. */
-   if ( match && astOK ) {
-      match = 0;
-      for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
-         astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
-         if( astIsASpecFrame( frame0 ) ) {
-            frame0 = astAnnul( frame0 );
-            target_axis0 = iaxis;
-            match = 1;
-            break;
-         } else {
-            frame0 = astAnnul( frame0 );
-         }
-      }
-
-   }
-
-/* Check at least one SpecFrame axis was found it the target. Store the
-   axis associataions. */
-   if( match && astOK ) {
-      (*template_axes)[ 0 ] = 0;
-      (*target_axes)[ 0 ] = target_axis0;
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
-   result Frame) with copies of the target axes in the required
-   order. This process also overlays the template attributes on to the
-   target Frame and returns a Mapping between the target and result
-   Frames which effects the required coordinate conversion. */
-      match = astSubFrame( target, template, 1, *target_axes, *template_axes,
-                           map, result );
-
-   }
-
-/* If an error occurred, or conversion to the result Frame's
-   coordinate system was not possible, then free all memory, annul the
-   returned objects, and reset the returned value. */
-   if ( !astOK || !match ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-
-/* Return the result. */
-   return match;
-}
-
-static void OriginStdOfRest( AstSpecFrame *this, AstStdOfRestType newsor,
-                             const char *method, int *status ){
-/*
-*  Name:
-*     OriginStdOfRest
-
-*  Purpose:
-*     Convert the SpecOrigin in a SpecFrame to a new rest frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void OriginStdOfRest( AstSpecFrame *this, AstStdOfRestType newsor,
-*                           const char *method, int *status )
-
-*  Class Membership:
-*     SpecFrame member function 
-
-*  Description:
-*     This function converts the value of the SpecOrigin attribute stored
-*     within a supplied SpecFrame from the rest frame currently associated
-*     with the SpecFrame, to the new rest frame indicated by "newsor".
-
-*  Parameters:
-*     this
-*        Point to the SpecFrame. On entry, the SpecOrigin value is
-*        assumed to refer to the re st frame given by the astGetStdOfRest
-*        method. On exit, the SpecOrigin value refers to the rest frame 
-*        supplied in "newsor". The StdOfRest attribute of the SpecFrame
-*        should then be modified in order to keep things consistent.
-*     newsor
-*        The rest frame to which the SpecOrigin value stored within "this"
-*        should refer on exit. 
-*     method
-*        Pointer to a string holding the name of the method to be
-*        included in any error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
-   AstSpecFrame *sf;
-   AstFrameSet *fs;
-   double origin;
-   double neworigin;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do nothing if the SpecOrigin attribute has not been assigned a value. */
-   if( astTestSpecOrigin( this ) ) {
-
-/* Do nothing if the rest frame will not change. */
-      if( newsor != astGetStdOfRest( this ) ) {
-
-/* Save the original SpecOrigin value (in the current SpecFrame units) and then 
-   clear it. */
-         origin = GetSpecOriginCur( this, status );
-         astClearSpecOrigin( this );
-
-/* Take a copy of the SpecFrame and set the new StdOfRest. */
-         sf = astCopy( this );
-         astSetStdOfRest( sf, newsor );
-
-/* Create a Mapping to perform the rest frame change, then use it to convert 
-   the value to the new rest frame. */
-         fs = astConvert( this, sf, "" );
-         neworigin = AST__BAD;
-         if( fs ) {
-            astTran1( fs, 1, &origin, 1, &neworigin );
-            fs = astAnnul( fs );
-         }
-
-/* If succesful, convert from the current units to the default units, and store 
-   in "this". */
-         if( neworigin != AST__BAD ) {
-            astSetSpecOrigin( this, ToUnits( this, astGetUnit( this, 0 ), neworigin,
-                              method, status ) );
-
-         } else if( astOK ) {
-            astError( AST__ATSER, "%s(%s): Cannot convert the SpecOrigin "
-                      "value to a different rest frame.", status, method, 
-                      astGetClass( this ) );
-         }
-      }
-   }
-}
-
-static void OriginSystem( AstSpecFrame *this, AstSystemType oldsys, 
-                          const char *method, int *status ){
-/*
-*  Name:
-*     OriginSystem
-
-*  Purpose:
-*     Convert the SpecOrigin in a SpecFrame to a new System.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void OriginSystem( AstSpecFrame *this, AstSystemType oldsys, 
-*                        const char *method, int *status )
-
-*  Class Membership:
-*     SpecFrame member function 
-
-*  Description:
-*     This function converts the value of the SpecOrigin attribute stored
-*     within a supplied SpecFrame from its original System, etc, to the 
-*     System, etc, currently associated with the SpecFrame.
-
-*  Parameters:
-*     this
-*        Point to the SpecFrame. On entry, the SpecOrigin value is
-*        assumed to refer to the System given by "oldsys", etc. On exit, the
-*        SpecOrigin value refers to the System returned by the astGetSystem 
-*        method, etc.
-*     oldsys
-*        The System to which the SpecOrigin value stored within "this"
-*        refers on entry. 
-*     method
-*        A string containing the method name for error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *sf1;
-   AstSpecFrame *sf2;
-   AstFrameSet *fs;
-   double origin;
-   double neworigin;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do nothing if the SpecOrigin attribute has not been assigned a value. */
-   if( astTestSpecOrigin( this ) ) {
-
-/* Do nothing if the System will not change. */
-      if( oldsys != astGetSystem( this ) ) {
-
-/* Note the original SpecOrigin value, in the SpecFrame's default units. */
-         origin = astGetSpecOrigin( this );
-
-/* Take a copy of the original SpecFrame and ensure the Units, SpecOrigin and
-   AlignSpecOffset attributes are cleared. */
-         sf1 = astCopy( this );
-         astClearUnit( sf1, 0 );
-         astClearSpecOrigin( sf1 );
-         astClearAlignSpecOffset( sf1 );
-
-/* Take another copy of the SpecFrame and set the old system. */
-         sf2 = astCopy( sf1 );
-         astSetSystem( sf2, oldsys );
-
-/* Create a Mapping to perform the rest frame change, then use it to convert 
-   the value to the current system. */
-         fs = astConvert( sf2, sf1, "" );
-         neworigin = AST__BAD;
-         if( fs ) {
-            astTran1( fs, 1, &origin, 1, &neworigin );
-            fs = astAnnul( fs );
-         } 
-
-/* Free resources */
-         sf1 = astAnnul( sf1 );
-         sf2 = astAnnul( sf2 );
-
-/* If succesful, store it in "this". */
-         if( neworigin != AST__BAD ) {
-            astSetSpecOrigin( this, neworigin );
-
-         } else if( astOK ) {
-            astError( AST__ATSER, "%s(%s): Cannot convert the SpecOrigin "
-                      "value to a different spectral system.", status, method, 
-                      astGetClass( this ) );
-         }
-      }
-   }
-}
-
-
-static void Overlay( AstFrame *template, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template SpecFrame on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the protected astOverlay method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes of a SpecFrame (the "template") on to
-*     another Frame, so as to over-ride selected attributes of that second
-*     Frame. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which a Frame acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-*
-*     Note that if the result Frame is a SpecFrame and a change of spectral
-*     coordinate system occurs as a result of overlaying its System
-*     attribute, then some of its original attribute values may no
-*     longer be appropriate (e.g. the Title, or attributes describing
-*     its axes). In this case, these will be cleared before overlaying
-*     any new values.
-
-*  Parameters:
-*     template
-*        Pointer to the template SpecFrame, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of the
-*        "result" Frame (see below). For each axis in the result frame, the
-*        corresponding element of this array should contain the (zero-based)
-*        index of the template axis to which it corresponds. This array is used
-*        to establish from which template axis any axis-dependent attributes
-*        should be obtained.
-*
-*        If any axis in the result Frame is not associated with a template
-*        axis, the corresponding element of this array should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  In general, if the result Frame is not from the same class as the
-*     template SpecFrame, or from a class derived from it, then attributes may
-*     exist in the template SpecFrame which do not exist in the result Frame. 
-*     In this case, these attributes will not be transferred.
-*/
-
-/* Local Variables: */
-   AstFrame *templt;             /* Copy of supplied template Frame */
-   AstSystemType new_system;     /* Code identifying new cordinates */
-   AstSystemType old_system;     /* Code identifying old coordinates */
-   const char *method;           /* Pointer to method string */
-   const char *new_class;        /* Pointer to template class string */
-   const char *old_class;        /* Pointer to result class string */
-   int specframe;                /* Result Frame is a SpecFrame? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise strings used in error messages. */
-   new_class = astGetClass( template );   
-   old_class = astGetClass( result );   
-   method = "astOverlay";
-
-/* Get the old and new systems. */
-   old_system = astGetSystem( result );
-   new_system = astGetSystem( template );
-
-/* It may be necessary to make temporary changes to the template Frame
-   below. In order to ensure that we make no permanent changes to the
-   supplied frame, we will, if necessary, take a deep copy of the
-   supplied Frame, storing a pointer to the copy in "templt". If it is
-   not necessary to make any changes to the template, we still want
-   "templt" to hold a usable pointer, so we initialise it now to hold a
-   clone of the supplied pointer. This pointer will be replaced by a
-   pointer to a deep copy (if required) below. */
-   templt = astClone( template );
-
-/* If the result Frame is a SpecFrame, we must test to see if overlaying its
-   System attribute will change the type of coordinate system it describes. 
-   Determine the value of this attribute for the result and template 
-   SpecFrames. */
-   specframe = astIsASpecFrame( result );
-   if( specframe ) {
-
-/* If the coordinate system will change, any value already set for the result
-   SpecFrame's Title will no longer be appropriate, so clear it. */
-      if ( new_system != old_system ) {
-         astClearTitle( result );
-
-/* If the systems have the same default units, we can retain the current 
-   Unit value. */
-         if( strcmp( DefUnit( new_system, method, new_class, status ),
-                     DefUnit( old_system, method, old_class, status ) ) ) { 
-            astClearUnit( result, 0 );
-         }
-
-/* If necessary, clear inappropriate values for all those axis attributes
-   whose access functions are over-ridden by this class (these access functions
-   will then provide suitable defaults appropriate to the new coordinate system
-   instead). */
-         astClearLabel( result, 0 );
-         astClearSymbol( result, 0 );
-      }
-
-/* If the result Frame is not a SpecFrame, we must temporarily clear the
-   System and AlignSystem values since the values used by this class 
-   are only appropriate to this class. Use a deep copy to avoid the danger 
-   of making any permanent changes to the suppied Frame. */
-   } else {
-      if( astTestSystem( template ) ) {
-         templt = astAnnul( templt );
-         templt = astCopy( template );
-         astClearSystem( templt );
-         astClearAlignSystem( templt );
-      }
-   }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
-   from the parent class. */
-   (*parent_overlay)( templt, template_axes, result, status );
-
-/* Check if the result Frame is a SpecFrame or from a class derived from
-   SpecFrame. If not, we cannot transfer SpecFrame attributes to it as it is
-   insufficiently specialised. In this case simply omit these attributes. */
-   if ( specframe && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
-   if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
-   if ( astTest##attribute( template ) ) { \
-      astSet##attribute( result, astGet##attribute( template ) ); \
-   }
-
-/* Use the macro to transfer each SpecFrame attribute in turn. Note,
-   SourceVRF must be overlayed before SourceVel. Otherwise the stored value 
-   for SourceVel would be changed from the default SourceVRF to the specified
-   SourceVRF when SourceVRF was overlayed. */
-      OVERLAY(AlignStdOfRest)
-      OVERLAY(AlignSpecOffset);
-      OVERLAY(RefDec)
-      OVERLAY(RefRA)
-      OVERLAY(RestFreq)
-      OVERLAY(SourceSys)
-      OVERLAY(SourceVRF)
-      OVERLAY(SourceVel)
-      OVERLAY(StdOfRest)
-      OVERLAY(SpecOrigin)
-   }
-
-/* Free resources */
-   templt = astAnnul( templt );
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (extends the astSetAttrib method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a SpecFrame, the attribute
-*     and its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This protected method is intended to be invoked by the Object astSet
-*     method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
-   AstMapping *umap;             /* Mapping between units */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   AstStdOfRestType sor;         /* Standard of rest type code */
-   AstSystemType sys;            /* Spectral system type code */
-   char *a;                      /* Pointer to next character */
-   char *new_setting;            /* Pointer value to new attribute setting */
-   double dval;                  /* Double atribute value */
-   double dtemp;                 /* Temporary double atribute value */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of setting string */
-   int ulen;                     /* Used length of setting string */
-   int namelen;                  /* Length of attribute name in setting */
-   int nc;                       /* Number of characters read by astSscanf */
-   int off;                      /* Offset of attribute value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_object;
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and 
-   unformatting sky positions, etc. */
-   LOCK_MUTEX2
-   if( !skyframe ) {
-      astBeginPM;
-      skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
-      astEndPM;
-   }
-   UNLOCK_MUTEX2
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Obtain the used length of the setting string. */
-   ulen = astChrLen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   SpecFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strncmp( setting, "direction=", 10 ) || 
-        !strncmp( setting, "bottom=", 7 ) ||
-        !strncmp( setting, "top=", 4 ) ||
-        !strncmp( setting, "format=", 7 ) ||
-        !strncmp( setting, "label=", 6 ) ||
-        !strncmp( setting, "symbol=", 7 ) ||
-        !strncmp( setting, "unit=", 5 ) ) {
-
-/* Create a new setting string from the original by appending the string
-   "(1)" to the end of the attribute name and then use the parent SetAttrib 
-   method. */
-      new_setting = astMalloc( len + 4 );
-      if( new_setting ) {
-         memcpy( new_setting, setting, len + 1 );
-         a = strchr( new_setting, '=' );
-         namelen = a - new_setting;
-         memcpy( a, "(1)", 4 );
-         a += 3;
-         strcpy( a, setting + namelen );
-         (*parent_setattrib)( this_object, new_setting, status );
-         new_setting = astFree( new_setting );
-      }
-
-/* AlignStdOfRest. */
-/* --------------- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "alignstdofrest=%n%*s %n", &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert the string to a StdOfRest code before use. */
-      sor = StdOfRestCode( setting + off, status );
-      if ( sor != AST__BADSOR ) {
-         astSetAlignStdOfRest( this, sor );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid standard of rest "
-                   "description \"%s\".", status, astGetClass( this ), setting+off );
-      }
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which 
-   SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "geolat=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-      new_setting = astStore( NULL, setting, len + 1 );
-      new_setting[ 0 ] = 'o';
-      new_setting[ 1 ] = 'b';
-      new_setting[ 2 ] = 's';
-      astSetAttrib( this, new_setting );
-      new_setting = astFree( new_setting );
-
-/* GeoLon. */
-/* ------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "geolon=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-      new_setting = astStore( NULL, setting, len + 1 );
-      new_setting[ 0 ] = 'o';
-      new_setting[ 1 ] = 'b';
-      new_setting[ 2 ] = 's';
-      astSetAttrib( this, new_setting );
-      new_setting = astFree( new_setting );
-
-/* RefDec. */
-/* ------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "refdec=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-
-/* Convert the string to a radians value before use. */
-      ival = astUnformat( skyframe, 1, setting + off, &dval );
-      if ( ival == ulen - off  ) {
-         astSetRefDec( this, dval );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid reference "
-                   "declination \"%s\".", status, astGetClass( this ), setting + off );
-      }
-
-/* RefRA. */
-/* ------ */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "refra=%n%*s %n", &off, &nc ) )
-              && ( nc >= 6 ) ) {
-
-/* Convert the string to a radians value before use. */
-      ival = astUnformat( skyframe, 0, setting + off, &dval );
-      if ( ival == ulen - off  ) {
-         astSetRefRA( this, dval );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid reference right "
-                   "ascension \"%s\".", status, astGetClass( this ), setting + off );
-      }
-
-/* AlignSpecOffset. */
-/* ---------------- */
-   } else if ( nc = 0,
-             ( 1 == astSscanf( setting, "alignspecoffset= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetAlignSpecOffset( this, ival );
-
-/* RestFreq. */
-/* --------- */
-/* Without any units indication - assume GHz. Convert to Hz for storage. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "restfreq= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetRestFreq( this, dval*1.0E9 );
-
-/* With units indication. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "restfreq= %lg %n%*s %n", &dval, &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Is there a Mapping from the supplied units to Hz? If so, use the
-   Mapping to convert the supplied value to Hz. */
-      if( ( umap = astUnitMapper( setting + off, "Hz", NULL, NULL ) ) ) {
-         astTran1( umap, 1, &dval, 1, &dtemp );
-         umap = astAnnul( umap );
-
-/* Otherwise, if there is a Mapping from the supplied units to metre,
-   assume the supplied unit is a vacuum wavelength. */
-      } else if( ( umap = astUnitMapper( setting + off, "m", NULL, NULL ) ) ) {
-
-/* Convert the supplied wavelength to metres. */
-         astTran1( umap, 1, &dval, 1, &dtemp );
-         umap = astAnnul( umap );
-
-/* Convert the wavelength (m) to frequency (Hz). */ 
-         if( dtemp != AST__BAD && dtemp != 0.0 ) {
-            dtemp = AST__C/dtemp;
-         } else if( astOK ) {
-            astError( AST__ATTIN, "astSetAttrib(%s): Invalid rest wavelength "
-                   "\"%g %s\" supplied.", status, astGetClass( this ), dval, setting + off );
-         }
-
-/* Otherwise, if there is a Mapping from the supplied units to Joule,
-   assume the supplied unit is an energy. */
-      } else if( ( umap = astUnitMapper( setting + off, "J", NULL, NULL ) ) ) {
-
-/* Convert the supplied energy to Joules. */
-         astTran1( umap, 1, &dval, 1, &dtemp );
-         umap = astAnnul( umap );
-
-/* Convert the energy (J) to frequency (Hz). */ 
-         if( dtemp != AST__BAD ) {
-            dtemp *= 1.0/AST__H;
-         } else if( astOK ) {
-            astError( AST__ATTIN, "astSetAttrib(%s): Invalid rest energy "
-                   "\"%g %s\" supplied.", status, astGetClass( this ), dval, setting + off );
-         }
-
-/* Otherwise report an error. */
-      } else if( astOK ) {
-         astError( AST__ATTIN, "astSetAttrib(%s): Rest frequency given in an "
-                   "unsupported system of units \"%g %s\".", status, 
-                   astGetClass( this ), dval, setting + off );
-      }
-
-/* Set the rest frequency. */
-      astSetRestFreq( this, dtemp );
-
-/* SourceVel. */
-/* ---------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "sourcevel= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert from km/s to m/s if the SourceVel value is a velocity. */
-         if( astGetSourceSys( this ) == AST__VREL ||
-             astGetSourceSys( this ) == AST__VRADIO ||
-             astGetSourceSys( this ) == AST__VOPTICAL ) dval *= 1.0E3;
-
-/* Store the value */
-      astSetSourceVel( this, dval );
-
-/* SourceVRF */
-/* --------- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "sourcevrf=%n%*s %n", &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert the string to a StdOfRest code before use. */
-      sor = StdOfRestCode( setting + off, status );
-      if ( sor != AST__BADSOR ) {
-         astSetSourceVRF( this, sor );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid standard of rest "
-                   "description \"%s\".", status, astGetClass( this ), setting+off );
-      }
-
-/* SourceSys */
-/* --------- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "sourcesys=%n%*s %n", &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert the string to a System code before use. */
-      sys = SystemCode( (AstFrame *) this, setting + off, status );
-      astSetSourceSys( this, sys );
-
-/* StdOfRest. */
-/* ---------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "stdofrest=%n%*s %n", &off, &nc ) )
-              && ( nc >= len ) ) {
-
-/* Convert the string to a StdOfRest code before use. */
-      sor = StdOfRestCode( setting + off, status );
-      if ( sor != AST__BADSOR ) {
-         astSetStdOfRest( this, sor );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid standard of rest "
-                   "description \"%s\".", status, astGetClass( this ), setting + off );
-      }
-
-/* SpecOrigin */
-/* ---------- */
-
-/* Floating-point without any units indication - assume the current Unit 
-   value. Convert from current units to default units for current system. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "specorigin= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-
-      astSetSpecOrigin( this, ToUnits( this, astGetUnit( this, 0 ), dval,
-                                       "astSetSpecOrigin", status ) );
-
-/* Floating-point with units. Convert the supplied value to the default units 
-   for the SpecFrame's System. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "specorigin= %lg %n%*s %n", &dval, &off, &nc ) )
-        && ( nc >= len ) ) {
-      astSetSpecOrigin( this, ToUnits( this, setting + off, dval, "astSetSpecOrigin", status ) );
-
-/* Pass any unrecognised setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double lon, 
-                       double lat, int *status ){
-/*
-*++
-*  Name:
-c     astSetRefPos
-f     AST_SETREFPOS
-
-*  Purpose:
-*     Set the reference position in a specified celestial coordinate system.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "specframe.h"
-c     void astSetRefPos( AstSpecFrame *this, AstSkyFrame *frm, double lon, 
-c                        double lat )
-f     CALL AST_SETREFPOS( THIS, FRM, LON, LAT, STATUS )
-
-*  Class Membership:
-*     Frame method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     sets the reference position (see attributes RefRA and RefDec) using 
-*     axis values (in radians) supplied within the celestial coordinate 
-*     system represented by a supplied SkyFrame. 
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the SpecFrame.
-c     frm
-f     FRM = INTEGER (Given)
-*        Pointer to the SkyFrame which defines the celestial coordinate 
-*        system in which the longitude and latitude values are supplied.
-c        If NULL 
-f        If AST__NULL 
-*        is supplied, then the supplied longitude and latitude values are 
-*        assumed to be FK5 J2000 RA and Dec values.
-c     lon
-f     LON = DOUBLE PRECISION (Given)
-*        The longitude of the reference point, in the coordinate system
-*        represented by the supplied SkyFrame (radians).
-c     lat
-f     LAT = DOUBLE PRECISION (Given)
-*        The latitude of the reference point, in the coordinate system
-*        represented by the supplied SkyFrame (radians).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*--
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;            /* Conversion FrameSet */
-   AstFrame *fb;               /* Base Frame */
-   AstFrame *fc;               /* Current Frame */
-   double xin[ 1 ];            /* Axis 1 values */
-   double yin[ 1 ];            /* Axis 2 values */
-   double xout[ 1 ];           /* Axis 1 values */
-   double yout[ 1 ];           /* Axis 2 values */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If no SkyFrame was supplied, just store the supplied RefRA and RefDec 
-   values. */
-   if( !frm ) {
-      astSetRefRA( this, lon );
-      astSetRefDec( this, lat );
-
-/* Otherwise, convert the supplied values from the requested system. */
-   } else {
-
-/* Create an FK5 J2000 SkyFrame which will be used for formatting and 
-   unformatting sky positions, etc. */
-      LOCK_MUTEX2
-      if( !skyframe ) {
-         astBeginPM;
-         skyframe = astSkyFrame( "system=FK5,equinox=J2000", status );
-         astEndPM;
-      }
-      UNLOCK_MUTEX2
-
-/* Find the Mapping from the supplied SkyFrame, to the SkyFrame which 
-   describes the internal format in which the RefRA and RefDec attribute 
-   values are stored. */
-      fs = astFindFrame( frm, skyframe, "" );
-
-/* If alignment was possible, use the Mapping to transform the supplied
-   axis values, checking to see if the axes of the supplied SkyFrame have 
-   been permuted. */
-      if( fs ) {
-         
-/* Find the longitude axis in the Base Frame, and store the supplied 
-   longitude and latitude values. */
-         fb = astGetFrame( fs, AST__BASE );
-         if( astGetLonAxis( fb ) == 0 ) {
-            xin[ 0 ] = lon;
-            yin[ 0 ] = lat;
-         } else {
-            xin[ 0 ] = lat;
-            yin[ 0 ] = lon;
-         }
-         astTran2( fs, 1, xin, yin, 1, xout, yout );
-
-/* Store the corresponding RefRA and RefDec values. */
-         fc = astGetFrame( fs, AST__CURRENT );
-         if( astGetLonAxis( fc ) == 0 ) {
-            astSetRefRA( this, xout[ 0 ] );
-            astSetRefDec( this, yout[ 0 ] );
-         } else {
-            astSetRefRA( this, yout[ 0 ] );
-            astSetRefDec( this, xout[ 0 ] );
-         }
-
-/* Annul object references. */
-         fc = astAnnul( fc );
-         fb = astAnnul( fb );
-         fs = astAnnul( fs );
-      }
-   }  
-}
-
-static void SetStdOfRest( AstSpecFrame *this, AstStdOfRestType value, int *status ) {
-/*
-*+
-*  Name:
-*     astSetStdOfRest
-
-*  Purpose:
-*     Set the StdOfRest attribute for a SpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void astSetStdOfRest( AstSpecFrame *this, AstStdOfRestType value )
-
-*  Class Membership:
-*     SpecFrame virtual function 
-
-*  Description:
-*     This function set a new value for the StdOfRest attribute for a 
-*     SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     value
-*        The new value.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-
-/* Validate the StdOfRest value being set and report an error if necessary. */
-   if( value < FIRST_SOR || value > LAST_SOR ) {
-      astError( AST__ATTIN, "%s(%s): Bad value (%d) given for StdOfRest attribute.", status,
-                            "astSetStdOfRest", astGetClass( this ), (int) value );
-
-/* Otherwise set the new StdOfRest */
-   } else {
-
-/* Modify the SpecOrigin value stored in the SpecFrame structure to refer 
-   to the new rest frame. */
-      OriginStdOfRest( this, value, "astSetStdOfRest", status );
-
-/* Store the new value for the rest frame in the SpecFrame structure. */
-      this->stdofrest = value;
-
-   }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status ) {
-/*
-*  Name:
-*     SetSystem
-
-*  Purpose:
-*     Set the System attribute for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astSetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function sets the System attribute for a SpecFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     newsys
-*        The new System value to be stored.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to SpecFrame structure */
-   AstSystemType oldsys;         /* Original System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* Save the original System value */
-   oldsys = astGetSystem( this_frame );
-
-/* Use the parent SetSystem method to store the new System value. */
-   (*parent_setsystem)( this_frame, newsys, status );
-
-/* If the system has changed... */
-   if( oldsys != newsys ) {
-
-/* Changing the System value will in general require the Units to change
-   as well. If the user has previously specified the units to be used with
-   the new system, then re-instate them (they are stored in the "usedunits"
-   array in the SpecFrame structure). Otherwise, clear the units so that
-   the default units will eb used with the new System. */
-      if( (int) newsys < this->nuunits && this->usedunits &&
-          this->usedunits[ (int) newsys ] ) {
-         astSetUnit( this, 0, this->usedunits[ (int) newsys ] );
-      } else {
-         astClearUnit( this, 0 );
-      }
-
-/* Modify the stored SpecOrigin. */
-      OriginSystem( this, oldsys, "astSetSystem", status );
-
-/* Also, clear all attributes which have system-specific defaults. */
-      astClearLabel( this_frame, 0 );
-      astClearSymbol( this_frame, 0 );
-      astClearTitle( this_frame );
-   }
-}
-
-static void SetUnit( AstFrame *this_frame, int axis, const char *value, int *status ) {
-/*
-*  Name:
-*     SetUnit
-
-*  Purpose:
-*     Set a pointer to the Unit string for a SpecFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void SetUnit( AstFrame *this_frame, int axis, const char *value )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astSetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function stores a pointer to the Unit string for a specified axis
-*     of a SpecFrame. It also stores the string in the "usedunits" array
-*     in the SpecFrame structure, in the element associated with the
-*     current System.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-*     unit
-*        The new string to store.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   int i;                        /* Loop counter */
-   int system;                   /* The SpecFrame's System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astSetUnit" );
-
-/* Store the supplied value as the UsedUnit for the current System. First
-   ensure the array is big enough. Free any previous value stored for the
-   current system. */
-   system = (int) astGetSystem( this );
-   if( system >= this->nuunits ) {
-      this->usedunits = astGrow( this->usedunits, system + 1, 
-                                 sizeof(char *) );
-      if( astOK ) {
-         for( i = this->nuunits; i < system + 1; i++ ) this->usedunits[ i ] = NULL;
-         this->nuunits = system + 1;
-      }
-   }
-
-/* Now store a copy of the value, if it is different to the stored string. */
-   if( astOK && ( !this->usedunits[ system ] ||
-                  strcmp( this->usedunits[ system ], value ) ) ) {
-      this->usedunits[ system ] = astStore( this->usedunits[ system ],
-                                            value, strlen( value ) + 1 );
-   }
-
-/* Now use the parent SetUnit method to store the value in the Axis
-   structure */
-   (*parent_setunit)( this_frame, axis, value, status );
-
-}
-
-static int SorConvert( AstSpecFrame *this, AstSpecFrame *that,
-                       AstSpecMap *specmap, int *status ) {
-/*
-*  Name:
-*     SorConvert
-
-*  Purpose:
-*     Add a conversion to a SpecMap which transforms between two
-*     standards of rest.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int SorConvert( AstSpecFrame *this, AstSpecFrame *that,
-*                     AstSpecMap *specmap, int *status )
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function adds a conversion to a SpecMap which transforms
-*     frequencies from the standard of rest specified by "this" to
-*     the standard of rest specified by "that". Note the conversion is
-*     always between frequency in the two rest frames no matter what the 
-*     System attributes of the two SpecFrames may be (which are ignored).
-
-*  Parameters:
-*     this
-*        The SpecFrame which defines the input rest frame.
-*     that
-*        The SpecFrame which defines the output rest frame.
-*     specmap
-*        The SpecMap to which the conversion is to be added.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero is returned if the conversion could not be performed. One is 
-*     returned otherwise.
-
-*/
-
-/* Local Constants: */
-#define MAX_ARGS 7               /* Max arguments for an SpecMap conversion */
-
-/* Local Variables: */
-   AstStdOfRestType from;        /* Input standard of rest */
-   AstStdOfRestType to;          /* Output standard of rest */
-   const char *vmess;            /* Text for use in error messages */
-   double args[ MAX_ARGS ];      /* Conversion argument array */
-   double dec;                   /* DEC of source (radians, FK5 J2000) */
-   double epoch;                 /* Epoch of observation (MJD) */
-   double alt;                   /* Observers geodetic altitude (radians) */
-   double lat;                   /* Observers geodetic latitude (radians) */
-   double lon;                   /* Observers geodetic longitude (radians) */
-   double ra;                    /* RA of source (radians, FK5 J2000) */
-   int result;                   /* Returned value */
-
-/* Initialise */
-   result = 1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* No conversion is required if the rest frames are equal. */
-   if( !EqualSor( this, that, status ) ) {
-
-/* Define local macros as shorthand for adding spectral coordinate
-   conversions to the SpecMap.  Each macro simply stores details of
-   the additional arguments in the "args" array and then calls
-   astSpecAdd. The macros differ in the number of additional argument
-   values. */
-#define TRANSFORM_2(cvt,arg0,arg1) \
-        args[ 0 ] = arg0; \
-        args[ 1 ] = arg1; \
-        astSpecAdd( specmap, cvt, args );
-
-#define TRANSFORM_3(cvt,arg0,arg1,arg2) \
-        args[ 0 ] = arg0; \
-        args[ 1 ] = arg1; \
-        args[ 2 ] = arg2; \
-        astSpecAdd( specmap, cvt, args );
-
-#define TRANSFORM_6(cvt,arg0,arg1,arg2,arg3,arg4,arg5) \
-        args[ 0 ] = arg0; \
-        args[ 1 ] = arg1; \
-        args[ 2 ] = arg2; \
-        args[ 3 ] = arg3; \
-        args[ 4 ] = arg4; \
-        args[ 5 ] = arg5; \
-        astSpecAdd( specmap, cvt, args );
-
-/* A string for use in error messages. */
-      vmess = "convert between different standards of rest";
-
-/* Get the required values from "this". */
-      from = astGetStdOfRest( this );
-      ra = astGetRefRA( this );
-      dec = astGetRefDec( this );
-      lon = astGetObsLon( this );
-      lat = astGetObsLat( this );
-      alt = astGetObsAlt( this );
-      epoch = astGetEpoch( this );
-
-/* Verify that the reference RA and DEC can be used (they are needed by all 
-   the conversions used below). */
-      VerifyAttrs( this, vmess, "RefRA RefDec", "astMatch", status );
-
-/* Convert from the "this" rest frame to heliographic. */
-      if( from == AST__TPSOR ) {
-         VerifyAttrs( this, vmess, "ObsLon ObsLat ObsAlt Epoch", "astMatch", status );
-         TRANSFORM_6( "TPF2HL", lon, lat, alt, epoch, ra, dec )
-      
-      } else if( from == AST__GESOR ) {
-         VerifyAttrs( this, vmess, "Epoch", "astMatch", status );
-         TRANSFORM_3( "GEF2HL", epoch, ra, dec )
-
-      } else if( from == AST__BYSOR ) {
-         VerifyAttrs( this, vmess, "Epoch", "astMatch", status );
-         TRANSFORM_3( "BYF2HL", epoch, ra, dec )
-
-      } else if( from == AST__LKSOR ) {
-         TRANSFORM_2( "LKF2HL", ra, dec )
-
-      } else if( from == AST__LDSOR ) {
-         TRANSFORM_2( "LDF2HL", ra, dec )
-
-      } else if( from == AST__LGSOR ) {
-         TRANSFORM_2( "LGF2HL", ra, dec )
-
-      } else if( from == AST__GLSOR ) {
-         TRANSFORM_2( "GLF2HL", ra, dec )
-
-      } else if( from == AST__SCSOR ) {
-         TRANSFORM_3( "USF2HL", ConvertSourceVel( this, AST__HLSOR, AST__VREL, status ), 
-                      ra, dec )
-      }
-   
-/* Now go from heliocentric to the "to" frame. */  
-      to = astGetStdOfRest( that );
-      ra = astGetRefRA( that );
-      dec = astGetRefDec( that );
-      lon = astGetObsLon( that );
-      lat = astGetObsLat( that );
-      alt = astGetObsAlt( that );
-      epoch = astGetEpoch( that );
-      VerifyAttrs( that, vmess, "RefRA RefDec", "astMatch", status );
-
-      if( to == AST__TPSOR ) {
-         VerifyAttrs( that, vmess, "ObsLon ObsLat ObsAlt Epoch", "astMatch", status );
-         TRANSFORM_6( "HLF2TP", lon, lat, alt, epoch, ra, dec )
-   
-      } else if( to == AST__GESOR ) {
-         VerifyAttrs( that, vmess, "Epoch", "astMatch", status );
-         TRANSFORM_3( "HLF2GE", epoch, ra, dec )
-
-      } else if( to == AST__BYSOR ) {
-         VerifyAttrs( that, vmess, "Epoch", "astMatch", status );
-         TRANSFORM_3( "HLF2BY", epoch, ra, dec )
-
-      } else if( to == AST__LKSOR ) {
-         TRANSFORM_2( "HLF2LK", ra, dec )
-
-      } else if( to == AST__LDSOR ) {
-         TRANSFORM_2( "HLF2LD", ra, dec )
-
-      } else if( to == AST__LGSOR ) {
-         TRANSFORM_2( "HLF2LG", ra, dec )
-
-      } else if( to == AST__GLSOR ) {
-         TRANSFORM_2( "HLF2GL", ra, dec )
-
-      } else if( to == AST__SCSOR ) {
-         TRANSFORM_3( "HLF2US", ConvertSourceVel( that, AST__HLSOR, AST__VREL, status ), 
-                      ra, dec )
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-/* Undefine macros local to this function. */
-#undef MAX_ARGS
-#undef TRANSFORM_2
-#undef TRANSFORM_3
-#undef TRANSFORM_6
-}
-
-static const char *SpecMapUnit( AstSystemType system, const char *method,
-                                const char *class, int *status ){
-/*
-*  Name:
-*     SpecMapUnit
-
-*  Purpose:
-*     Return the default units for a spectral coordinate system type used
-*     by the SpecMap class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *SpecMapUnit( AstSystemType system, const char *method,
-*                              const char *class, int *status )
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function returns a textual representation of the 
-*     units used by the SpecMap class for the specified spectral 
-*     coordinate system. In general, the SpecMap class uses SI units
-*     (m/s, Hz, m, etc), but this class (SpecFrame) has default units 
-*     more appropriate to astronomers (km/s, GHz, Angstroms, etc).
-
-*  Parameters:
-*     system
-*        The spectral coordinate system.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A string describing the default units. This string follows the
-*     units syntax described in FITS WCS paper I "Representations of world
-*     coordinates in FITS" (Greisen & Calabretta).
-
-*  Notes:
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Value to return */
-
-/* Initialize */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
-   if( system == AST__FREQ ) {
-      result = "Hz";
-   } else if( system == AST__ENERGY ) {
-      result = "J";
-   } else if( system == AST__WAVENUM ) {
-      result = "1/m";
-   } else if( system == AST__WAVELEN ) {
-      result = "m";
-   } else if( system == AST__AIRWAVE ) {
-      result = "m";
-   } else if( system == AST__VRADIO ) {
-      result = "m/s";
-   } else if( system == AST__VOPTICAL ) {
-      result = "m/s";
-   } else if( system == AST__REDSHIFT ) {
-      result = "";
-   } else if( system == AST__BETA ) {
-      result = "";
-   } else if( system == AST__VREL ) {
-      result = "m/s";
-
-/* Report an error if the coordinate system was not recognised. */
-   } else {
-      astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
-                "identification code (%d).", status, method, class, class, 
-                (int) system );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstStdOfRestType StdOfRestCode( const char *sor, int *status ) {
-/*
-*  Name:
-*     StdOfRestCode
-
-*  Purpose:
-*     Convert a string into a standard of rest type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     AstStdOfRestType StdOfRestCode( const char *sor )
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function converts a string used for the external description of 
-*     a standard of rest into a SpecFrame standard of rest type code 
-*     (StdOfRest attribute value). It is the inverse of the 
-*     StdOfRestString function.
-
-*  Parameters:
-*     sor
-*        Pointer to a constant null-terminated string containing the
-*        external description of the standard of rest.
-
-*  Returned Value:
-*     The StdOfRest type code.
-
-*  Notes:
-*     - A value of AST__BADSOR is returned if the standard of rest 
-*     description was not recognised. This does not produce an error.
-*     - A value of AST__BADSOR is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstStdOfRestType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSOR;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "sor" string against each possibility and assign the
-   result. */
-   if ( astChrMatch( "TOPO", sor ) || astChrMatch( "TOPOCENT", sor ) || astChrMatch( "TOPOCENTRIC", sor ) ) {
-      result = AST__TPSOR;
-
-   } else if ( astChrMatch( "GEO", sor ) || astChrMatch( "GEOCENTR", sor ) || astChrMatch( "GEOCENTRIC", sor ) ) {
-      result = AST__GESOR;
-
-   } else if ( astChrMatch( "BARY", sor ) || astChrMatch( "BARYCENT", sor ) || astChrMatch( "BARYCENTRIC", sor ) ) {
-      result = AST__BYSOR;
-
-   } else if ( astChrMatch( "HELIO", sor ) || astChrMatch( "HELIOCEN", sor ) || astChrMatch( "HELIOCENTRIC", sor ) ) {
-      result = AST__HLSOR;
-
-   } else if ( astChrMatch( "LSRK", sor ) || astChrMatch( "LSR", sor ) ) {
-      result = AST__LKSOR;
-
-   } else if ( astChrMatch( "LSRD", sor ) ) {
-      result = AST__LDSOR;
-
-   } else if ( astChrMatch( "GAL", sor ) || astChrMatch( "GALACTOC", sor ) || astChrMatch( "GALACTIC", sor ) ) {
-      result = AST__GLSOR;
-
-   } else if ( astChrMatch( "LG", sor ) || astChrMatch( "LOCALGRP", sor ) || 
-               astChrMatch( "LOCAL_GROUP", sor ) || astChrMatch( "LOCAL-GROUP", sor ) ) { 
-      result = AST__LGSOR;
-
-   } else if ( astChrMatch( "SOURCE", sor ) || astChrMatch( "SRC", sor ) ) {
-      result = AST__SCSOR;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *StdOfRestString( AstStdOfRestType sor, int *status ) {
-/*
-*  Name:
-*     StdOfRestString
-
-*  Purpose:
-*     Convert a standard of rest type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *StdOfRestString( AstStdOfRestType sor, int *status )
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function converts a SpecFrame standard of rest type code
-*     (StdOfRest attribute value) into a string suitable for use as an
-*     external representation of the standard of rest type.
-
-*  Parameters:
-*     sor
-*        The standard of rest type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the standard of rest
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "sor" value against each possibility and convert to a
-   string pointer. (Where possible, return the same string as would be
-   used in the FITS WCS representation of the standard of rest). */
-   switch ( sor ) {
-
-   case AST__TPSOR:
-      result = "Topocentric";
-      break;
-
-   case AST__GESOR:
-      result = "Geocentric";
-      break;
-
-   case AST__BYSOR:
-      result = "Barycentric";
-      break;
-
-   case AST__HLSOR:
-      result = "Heliocentric";
-      break;
-
-   case AST__LDSOR:
-      result = "LSRD";
-      break;
-
-   case AST__LKSOR:
-      result = "LSRK";
-      break;
-
-   case AST__LGSOR:
-      result = "Local_group";
-      break;
-
-   case AST__GLSOR:
-      result = "Galactic";
-      break;
-
-   case AST__SCSOR:
-      result = "Source";
-      break;
-
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a SpecFrame and convert to the new coordinate 
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the protected astSubFrame 
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the axes
-*     from a "target" SpecFrame and creates a new Frame with copies of
-*     the selected axes assembled in the requested order. It then
-*     optionally overlays the attributes of a "template" Frame on to the
-*     result. It returns both the resulting Frame and a Mapping that
-*     describes how to convert between the coordinate systems described by
-*     the target and result Frames. If necessary, this Mapping takes
-*     account of any differences in the Frames' attributes due to the
-*     influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target SpecFrame, from which axes are to be 
-*        selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for the
-*        result Frame are to be obtained. Optionally, this may be NULL, in
-*        which case no overlaying of template attributes will be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This number may
-*        be greater than or less than the number of axes in this Frame (or
-*        equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving a list
-*        of the (zero-based) axis indices of the axes to be selected from the
-*        target SpecFrame. The order in which these are given determines
-*        the order in which the axes appear in the result Frame. If any of the
-*        values in this array is set to -1, the corresponding result axis will
-*        not be derived from the target Frame, but will be assigned default
-*        attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This should
-*        contain a list of the template axes (given as zero-based axis indices)
-*        with which the axes of the result Frame are to be associated. This
-*        array determines which axes are used when overlaying axis-dependent
-*        attributes of the template on to the result. If any element of this
-*        array is set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not used and
-*        a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned Mapping.
-*        The forward transformation of this Mapping will describe how to
-*        convert coordinates from the coordinate system described by the target
-*        SpecFrame to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is possible
-*     between the target and the result Frame. Otherwise zero is returned and
-*     *map and *result are returned as NULL (but this will not in itself
-*     result in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not always
-*     be possible otherwise.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     -  This implementation addresses the selection of axes from a 
-*     SpecFrame object. This results in another object of the same class 
-*     only if the single SpecFrame axis is selected exactly once. 
-*     Otherwise, the result is a Frame class object which inherits the 
-*     SpecFrame's axis information (if appropriate) but none of the other 
-*     properties of a SpecFrame.
-*     -  In the event that a SpecFrame results, the returned Mapping will 
-*     take proper account of the relationship between the target and result 
-*     coordinate systems.
-*     -  In the event that a Frame class object results, the returned Mapping
-*     will only represent a selection/permutation of axes.
-
-*  Implementation Deficiencies:
-*     -  Any axis selection is currently permitted. Probably this should be
-*     restricted so that each axis can only be selected once. The
-*     astValidateAxisSelection method will do this but currently there are bugs
-*     in the CmpFrame class that cause axis selections which will not pass this
-*     test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *target;      /* Pointer to the SpecFrame structure */
-   AstSpecFrame *temp;        /* Pointer to copy of target SpecFrame */
-   AstSpecFrame *align_frm;   /* Frame in which to align the SpecFrames */
-   int match;                 /* Coordinate conversion is possible? */
-   int report;                /* Report errors if SpecFrames cannot be aligned? */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the target SpecFrame structure. */
-   target = (AstSpecFrame *) target_frame;
-
-/* Result is a SpecFrame. */
-/* -------------------------- */
-/* Check if the result Frame is to have one axis obtained by selecting
-   the single target SpecFrame axis. If so, the result will also be 
-   a SpecFrame. */
-   if ( ( result_naxes == 1 ) && ( target_axes[ 0 ] == 0 ) ) {
-
-/* Form the result from a copy of the target. */
-      *result = astCopy( target );
-
-/* Initialise a flag to indicate that MakeSpecMapping should not report
-   errors if no Mapping can be created. */
-      report = 0;
-
-/* If required, overlay the template attributes on to the result SpecFrame.
-   Also get the system and standard of rest in which to align the two 
-   SpecFrames. These are the values from the template (if there is a 
-   template). */
-      if ( template ) {
-         astOverlay( template, template_axes, *result );
-         if( astIsASpecFrame( template ) ) {
-            align_frm = astCopy( template );
-
-/* Since we now know that both the template and target are SpecFrames, it 
-   should usually be possible to convert betwen them. If conversion is
-   *not* possible (fpr instance if no rest frequency is availalbe, etc)
-   then the user will probably be interested in knowing the reason why
-   conversion is not possible. Therefore, indicate that MakeSpecMapping 
-   should report errors if no Mapping can be created. */
-            report = 1;
-
-         } else {
-            align_frm = astCopy( target );
-         }
-
-/* If no template was supplied, align in the System and StdOfRest of the
-   target. */
-      } else {
-         VerifyAttrs( target, "convert between different spectral systems", 
-                   "StdOfRest", "astMatch", status );
-         align_frm = astCopy( target );
-      }
-
-/* The MakeSpecMapping function uses the System and StdOfRest attributes to
-   define the alignment frame. But the AlignSystem and AlignStdOfRest 
-   attributes should be used for this purpose. Therefore, copy the values 
-   of the AlignSystem and AlignStdOfRest attributes to the System and 
-   StdOfRest attribute. */
-      astSetSystem( align_frm, astGetAlignSystem( align_frm ) );
-      astSetStdOfRest( align_frm, astGetAlignStdOfRest( align_frm ) );
-
-/* Generate a Mapping that takes account of changes in the sky coordinate
-   system (equinox, epoch, etc.) between the target SpecFrame and the result
-   SpecFrame. If this Mapping can be generated, set "match" to indicate that
-   coordinate conversion is possible. If the template is a specframe,
-   report errors if a match is not possible. */
-      match = ( MakeSpecMapping( target, (AstSpecFrame *) *result, 
-                align_frm, report, map, status ) != 0 );
-
-/* Free resources. */
-      align_frm = astAnnul( align_frm );
-
-/* Result is not a SpecFrame. */
-/* ------------------------------ */
-/* In this case, we select axes as if the target were from the Frame
-   class.  However, since the resulting data will then be separated
-   from their enclosing SpecFrame, default attribute values may differ
-   if the methods for obtaining them were over-ridden by the SpecFrame
-   class. To overcome this, we ensure that these values are explicitly
-   set for the result Frame (rather than relying on their defaults). */
-   } else {
-
-/* Make a temporary copy of the target SpecFrame. We will explicitly
-   set the attribute values in this copy so as not to modify the original. */
-      temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
-   explicitly to its default value. */
-#define SET(attribute) \
-   if ( !astTest##attribute( temp ) ) { \
-      astSet##attribute( temp, astGet##attribute( temp ) ); \
-   }
-
-/* Set attribute values which apply to the Frame as a whole and which
-   we want to retain, but whose defaults are over-ridden by the
-   SpecFrame class. */
-      SET(Domain)
-      SET(Title)
-
-/* Define a macro to test if an attribute is set for axis zero (the only
-   axis of a SpecFrame). If not, set it explicitly to its default value. */
-#define SET_AXIS(attribute) \
-   if ( !astTest##attribute( temp, 0 ) ) { \
-      astSet##attribute( temp, 0, \
-                         astGet##attribute( temp, 0 ) ); \
-   }
-
-/* Use this macro to set explicit values for all the axis attributes
-   for which the SpecFrame class over-rides the default value. */
-      SET_AXIS(Label)
-      SET_AXIS(Symbol)
-      SET_AXIS(Unit)
-
-/* Clear attributes which have an extended range of values allowed by
-   this class. */
-      astClearSystem( temp );
-      astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
-   produce the result Frame by selecting the required set of axes and
-   overlaying the template Frame's attributes. */
-      match = (*parent_subframe)( (AstFrame *) temp, template,
-                                  result_naxes, target_axes, template_axes,
-                                  map, result, status );
-
-/* Delete the temporary copy of the target SpecFrame. */
-      temp = astDelete( temp );
-   }
-
-/* If an error occurred or no match was found, annul the returned
-   objects and reset the returned result. */
-   if ( !astOK || !match ) {
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astSystemCode method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external
-*     description of a coordinate system into a SpecFrame
-*     coordinate system type code (System attribute value). It is the
-*     inverse of the astSystemString function.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the sky coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the sky coordinate
-*     system description was not recognised. This does not produce an
-*     error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
-   result. */
-   if ( astChrMatch( "FREQ", system ) ) {
-      result = AST__FREQ;
-
-   } else if ( astChrMatch( "ENER", system ) || astChrMatch( "ENERGY", system ) ) {
-      result = AST__ENERGY;
-
-   } else if ( astChrMatch( "WAVN", system ) || astChrMatch( "WAVENUM", system ) ) {
-      result = AST__WAVENUM;
-
-   } else if ( astChrMatch( "WAVE", system ) || astChrMatch( "WAVELEN", system ) ) {
-      result = AST__WAVELEN;
-
-   } else if ( astChrMatch( "AWAV", system ) || astChrMatch( "AIRWAVE", system ) ) {
-      result = AST__AIRWAVE;
-
-   } else if ( astChrMatch( "VRAD", system ) || astChrMatch( "VRADIO", system ) ) {
-      result = AST__VRADIO;
-
-   } else if ( astChrMatch( "VOPT", system ) || astChrMatch( "VOPTICAL", system ) ) {
-      result = AST__VOPTICAL;
-
-   } else if ( astChrMatch( "ZOPT", system ) || astChrMatch( "REDSHIFT", system ) ) {
-      result = AST__REDSHIFT;
-
-   } else if ( astChrMatch( "BETA", system ) ) {
-      result = AST__BETA;
-
-   } else if ( astChrMatch( "VELO", system ) || astChrMatch( "VREL", system ) ) {
-      result = AST__VREL;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemLabel( AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemLabel
-
-*  Purpose:
-*     Return a label for a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *SystemLabel( AstSystemType system, int *status )
-
-*  Class Membership:
-*     SpecFrame member function.
-
-*  Description:
-*     This function converts a SpecFrame coordinate system type code
-*     (System attribute value) into a descriptive string for human readers.
-
-*  Parameters:
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the sky coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. */
-   switch ( system ) {
-
-   case AST__FREQ:
-      result = "frequency";
-      break;
-
-   case AST__ENERGY:
-      result = "energy";
-      break;
-
-   case AST__WAVENUM:
-      result = "wave-number";
-      break;
-
-   case AST__WAVELEN:
-      result = "wavelength";
-      break;
-
-   case AST__AIRWAVE:
-      result = "wavelength in air";
-      break;
-
-   case AST__VRADIO:
-      result = "radio velocity";
-      break;
-
-   case AST__VOPTICAL:
-      result = "optical velocity";
-      break;
-
-   case AST__REDSHIFT:
-      result = "redshift";
-      break;
-
-   case AST__BETA:
-      result = "beta factor";
-      break;
-
-   case AST__VREL:
-      result = "apparent radial velocity";
-      break;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astSystemString method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a SpecFrame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the sky coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. (Where possible, return the same string as would be
-   used in the FITS WCS representation of the coordinate system). */
-   switch ( system ) {
-
-   case AST__FREQ:
-      result = "FREQ";
-      break;
-
-   case AST__ENERGY:
-      result = "ENER";
-      break;
-
-   case AST__WAVENUM:
-      result = "WAVN";
-      break;
-
-   case AST__WAVELEN:
-      result = "WAVE";
-      break;
-
-   case AST__AIRWAVE:
-      result = "AWAV";
-      break;
-
-   case AST__VRADIO:
-      result = "VRAD";
-      break;
-
-   case AST__VOPTICAL:
-      result = "VOPT";
-      break;
-
-   case AST__REDSHIFT:
-      result = "ZOPT";
-      break;
-
-   case AST__BETA:
-      result = "BETA";
-      break;
-
-   case AST__VREL:
-      result = "VELO";
-      break;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     TestActiveUnit
-
-*  Purpose:
-*     Test the ActiveUnit flag for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int TestActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astTestActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function test the value of the ActiveUnit flag for a SpecFrame, 
-*    which is always "unset". 
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The result of the test (0).
-
-*/
-   return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a SpecFrame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   char *new_attrib;             /* Pointer value to new attribute name */
-   int len;                      /* Length of attrib string */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   SpecFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strcmp( attrib, "direction" ) || 
-        !strcmp( attrib, "bottom" ) ||
-        !strcmp( attrib, "top" ) ||
-        !strcmp( attrib, "format" ) ||
-        !strcmp( attrib, "label" ) ||
-        !strcmp( attrib, "symbol" ) ||
-        !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
-   "(1)" and then use the parent TestAttrib method. */
-      new_attrib = astMalloc( len + 4 );
-      if( new_attrib ) {
-         memcpy( new_attrib, attrib, len );
-         memcpy( new_attrib + len, "(1)", 4 ); 
-         result = (*parent_testattrib)( this_object, new_attrib, status );
-         new_attrib = astFree( new_attrib );
-      }
-
-/* AlignStdOfRest. */
-/* --------------- */
-   } else if ( !strcmp( attrib, "alignstdofrest" ) ) {
-      result = astTestAlignStdOfRest( this );
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in which 
-   SpecFrame had GeoLon/Lat attributes (now ObsLon/Lat are used instead). */
-   } else if ( !strcmp( attrib, "geolat" ) ) {
-      result = astTestAttrib( this, "obslat" );
-
-/* GeoLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "geolon" ) ) {
-      result = astTestAttrib( this, "obslon" );
-
-/* RefDec. */
-/* ------- */
-   } else if ( !strcmp( attrib, "refdec" ) ) {
-      result = astTestRefDec( this );
-
-/* RefRA. */
-/* ------ */
-   } else if ( !strcmp( attrib, "refra" ) ) {
-      result = astTestRefRA( this );
-
-/* RestFreq. */
-/* --------- */
-   } else if ( !strcmp( attrib, "restfreq" ) ) {
-      result = astTestRestFreq( this );
-
-/* SourceVel. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "sourcevel" ) ) {
-      result = astTestSourceVel( this );
-
-/* SourceVRF */
-/* --------- */
-   } else if ( !strcmp( attrib, "sourcevrf" ) ) {
-      result = astTestSourceVRF( this );
-
-/* SourceSys */
-/* --------- */
-   } else if ( !strcmp( attrib, "sourcesys" ) ) {
-      result = astTestSourceSys( this );
-
-/* StdOfRest. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "stdofrest" ) ) {
-      result = astTestStdOfRest( this );
-
-/* SpecOrigin. */
-/* --------- */
-   } else if ( !strcmp( attrib, "specorigin" ) ) {
-      result = astTestSpecOrigin( this );
-
-/* AlignSpecOffset */
-/* --------------- */
-   } else if ( !strcmp( attrib, "alignspecoffset" ) ) {
-      result = astTestAlignSpecOffset( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static double ToUnits( AstSpecFrame *this, const char *oldunit, double oldval,
-                       const char *method, int *status ){
-/*
-*
-*  Name:
-*     ToUnits
-
-*  Purpose:
-*     Convert a supplied spectral value to the default units of the supplied 
-*     SpecFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double ToUnits( AstSpecFrame *this, const char *oldunit, double oldval,
-*                     const char *method, int *status )
-
-*  Class Membership:
-*     SpecFrame member function 
-
-*  Description:
-*     This function converts the supplied value from the supplied units to 
-*     the default units associated with the supplied SpecFrame's System.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame.
-*     oldunit
-*        The units in which "oldval" is supplied.
-*     oldval
-*        The value to be converted.
-*     method
-*        Pointer to a string holding the name of the method to be
-*        included in any error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The converted value.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   const char *defunit;
-   double result;              
-   
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get default units associated with the System attribute of the supplied
-   SpecFrame, and find a Mapping from the old units to the default. */
-   defunit = DefUnit( astGetSystem( this ), method, "SpecFrame", status );
-   map = astUnitMapper( oldunit, defunit, NULL, NULL );
-   if( map ) {
-
-/* Use the Mapping to convert the supplied value. */
-      astTran1( map, 1, &oldval, 1, &result );
-
-/* Free resources. */
-      map = astAnnul( map );
-
-/* Report an error if no conversion is possible. */
-   } else if( astOK ){
-      astError( AST__BADUN, "%s(%s): Cannot convert the supplied attribute "
-                "value from units of %s to %s.", status, method, astGetClass( this ), 
-                 oldunit, defunit );
-   }
-
-/* Return the result */
-   return result;
-}
-
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system, 
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     SpecFrame member function (over-rides the astValidateSystem method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked. 
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;              /* Validated system value */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
-   if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
-         astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
-                   "or AlignSystem attribute of a %s.", status, method, 
-                   astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
-   } else {
-      result = system;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void VerifyAttrs( AstSpecFrame *this, const char *purp, 
-                         const char *attrs, const char *method, int *status ) {
-/*
-*  Name:
-*     VerifyAttrs
-
-*  Purpose:
-*     Verify that usable attribute values are available.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     void VerifyAttrs( AstSpecFrame *this, const char *purp, 
-*                       const char *attrs, const char *method, int *status  )
-
-*  Class Membership:
-*     SpecFrame member function 
-
-*  Description:
-*     This function tests each attribute listed in "attrs". It returns
-*     without action if 1) an explicit value has been set for each attribute
-*     or 2) the UseDefs attribute of the supplied SpecFrame is non-zero.
-*
-*     If UseDefs is zero (indicating that default values should not be
-*     used for attributes), and any of the named attributes does not have
-*     an explicitly set value, then an error is reported.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame. 
-*     purp
-*        Pointer to a text string containing a message which will be
-*        included in any error report. This shouldindicate the purpose
-*        for which the attribute value is required. 
-*     attrs
-*        A string holding a space separated list of attribute names.
-*     method
-*        A string holding the name of the calling method for use in error
-*        messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   const char *a;
-   const char *desc;
-   const char *p;
-   int len;
-   int set;
-   int state;
-
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* If the SpecFrame has a non-zero value for its UseDefs attribute, then
-   all attributes are assumed to have usable values, since the defaults 
-   will be used if no explicit value has been set. So we only need to do
-   any checks if UseDefs is zero. */
-   if( !astGetUseDefs( this ) ) {   
-
-/* Stop compiler warnings about uninitialised variables */
-      a = NULL;
-      desc = NULL;
-      len = 0;
-      set = 0;
-
-/* Loop round the "attrs" string identifying the start and length of each
-   non-blank word in the string. */
-      state = 0;
-      p = attrs;
-      while( 1 ) {
-         if( state == 0 ) {
-            if( !isspace( *p ) ) {
-               a = p;
-               len = 1;
-               state = 1;
-            }
-         } else {
-            if( isspace( *p ) || !*p ) {
-   
-/* The end of a word has just been reached. Compare it to each known
-   attribute value. Get a flag indicating if the attribute has a set
-   value, and a string describing the attribute.*/
-               if( len > 0 ) {
-
-                  if( !strncmp( "ObsLat", a, len ) ) {
-                     set = astTestObsLat( this );
-                     desc = "observer's latitude";
-
-                  } else if( !strncmp( "ObsLon", a, len ) ) {
-                     set = astTestObsLon( this );
-                     desc = "observer's longitude";
-
-                  } else if( !strncmp( "ObsAlt", a, len ) ) {
-                     set = astTestObsAlt( this );
-                     desc = "observer's altitude";
-
-                  } else if( !strncmp( "RefRA", a, len ) ) {
-                     set = astTestRefRA( this );
-                     desc = "source RA";
-
-                  } else if( !strncmp( "RefDec", a, len ) ) {
-                     set = astTestRefDec( this );
-                     desc = "source Dec";
-
-                  } else if( !strncmp( "RestFreq", a, len ) ) {
-                     set = astTestRestFreq( this );
-                     desc = "rest frequency";
-
-                  } else if( !strncmp( "SourceVel", a, len ) ) {
-                     set = astTestSourceVel( this );
-                     desc = "source velocity";
-
-                  } else if( !strncmp( "StdOfRest", a, len ) ) {
-                     set = astTestStdOfRest( this );
-                     desc = "spectral standard of rest";
-
-                  } else if( !strncmp( "Epoch", a, len ) ) {
-                     set = astTestEpoch( this );
-                     desc = "epoch of observation";
-
-                  } else {
-                     astError( AST__INTER, "VerifyAttrs(SpecFrame): "
-                               "Unknown attribute name \"%.*s\" supplied (AST "
-                               "internal programming error).", status, len, a );
-                  }
-
-/* If the attribute does not have a set value, report an error. */
-                  if( !set && astOK ) {
-                     astError( AST__NOVAL, "%s(%s): Cannot %s.", status, method,
-                               astGetClass( this ), purp );
-                     astError( AST__NOVAL, "No value has been set for "
-                               "the AST \"%.*s\" attribute (%s).", status, len, a,
-                               desc );
-                  }
-
-/* Continue the word search algorithm. */
-               }
-               len = 0;
-               state = 0;
-            } else {
-               len++;
-            }
-         }
-         if( !*(p++) ) break;
-      }
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/*
-*att++
-*  Name:
-*     AlignSpecOffset
-
-*  Purpose:
-*     Align SpecFrames using the offset coordinate system? 
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute is a boolean value which controls how a SpecFrame
-*     behaves when it is used (by
-c     astFindFrame or astConvert) as a template to match another (target)
-f     AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-*     SpecFrame. It determines whether alignment occurs between the offset 
-*     values defined by the current value of the SpecOffset attribute, or 
-*     between the corresponding absolute spectral values.
-*
-*     The default value of zero results in the two SpecFrames being aligned 
-*     so that a given absolute spectral value in one is mapped to the same 
-*     absolute value in the other. A non-zero value results in the SpecFrames 
-*     being aligned so that a given offset value in one is mapped to the same 
-*     offset value in the other.
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SpecFrame,AlignSpecOffset,alignspecoffset,-INT_MAX)
-astMAKE_GET(SpecFrame,AlignSpecOffset,int,0,( ( this->alignspecoffset != -INT_MAX ) ?
-                                   this->alignspecoffset : 0 ))
-astMAKE_SET(SpecFrame,AlignSpecOffset,int,alignspecoffset,( value != 0 ))
-astMAKE_TEST(SpecFrame,AlignSpecOffset,( this->alignspecoffset != -INT_MAX ))
-
-
-
-/*
-*att++
-*  Name:
-*     AlignStdOfRest
-
-*  Purpose:
-*     Standard of rest to use when aligning SpecFrames.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls how a SpecFrame behaves when it is used (by
-c     astFindFrame or astConvert) as a template to match another (target)
-f     AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-*     SpecFrame. It identifies the standard of rest in which alignment is 
-*     to occur. See the StdOfRest attribute for a desription of the values 
-*     which may be assigned to this attribute. The default AlignStdOfRest 
-*     value is "Helio" (heliographic).
-*
-c     When astFindFrame or astConvert is used on two SpecFrames (potentially 
-f     When AST_FindFrame or AST_CONVERT is used on two SpecFrames (potentially 
-*     describing different spectral coordinate systems), it returns a Mapping 
-*     which can be used to transform a position in one SpecFrame into the
-*     corresponding position in the other. The Mapping is made up of the
-*     following steps in the indicated order:
-*
-*     - Map values from the system used by the target (wavelength,
-*     apparent radial velocity, etc) to the system specified by the
-*     AlignSystem attribute, using the target's rest frequency if necessary.
-*
-*     - Map these values from the target's standard of rest to the standard of
-*     rest specified by the AlignStdOfRest attribute, using the Epoch, ObsLat, 
-*     ObsLon, ObsAlt, RefDec and RefRA attributes of the target to define the 
-*     two standards of rest.
-*
-*     - Map these values from the standard of rest specified by the 
-*     AlignStdOfRest attribute, to the template's standard of rest, using the 
-*     Epoch, ObsLat, ObsLon, ObsAlt, RefDec and RefRA attributes of the 
-*     template to define the two standards of rest.
-*
-*     - Map these values from the system specified by the AlignSystem 
-*     attribute, to the system used by the template, using the template's 
-*     rest frequency if necessary.
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The AlignStdOfRest value has a value of AST__BADSOR when not set yielding 
-   a default of AST__HLSOR. */
-astMAKE_TEST(SpecFrame,AlignStdOfRest,( this->alignstdofrest != AST__BADSOR ))
-astMAKE_CLEAR(SpecFrame,AlignStdOfRest,alignstdofrest,AST__BADSOR)
-astMAKE_GET(SpecFrame,AlignStdOfRest,AstStdOfRestType,AST__BADSOR,(
-            ( this->alignstdofrest == AST__BADSOR ) ? AST__HLSOR : this->alignstdofrest ) )
-
-/* Validate the AlignStdOfRest value being set and report an error if necessary. */
-astMAKE_SET(SpecFrame,AlignStdOfRest,AstStdOfRestType,alignstdofrest,(
-            ( ( value >= FIRST_SOR ) && ( value <= LAST_SOR ) ) ?
-                 value :
-                 ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
-                             "given for AlignStdOfRest attribute.", status,
-                             "astSetAlignStdOfRest", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
-                                            this->alignstdofrest ) ) )
-
-/*
-*att++
-*  Name:
-*     RefDec
-
-*  Purpose:
-*     The declination of the reference point
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the FK5 J2000.0 declination of a reference 
-*     point on the sky. See the description of attribute RefRA for details. 
-*     The default RefDec is "0:0:0".
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The reference declination (FK5 J2000, radians). Clear the RefDec value by 
-   setting it to AST__BAD, which results in a default value of zero. Any
-   value is acceptable. */
-astMAKE_CLEAR(SpecFrame,RefDec,refdec,AST__BAD)
-astMAKE_GET(SpecFrame,RefDec,double,0.0,((this->refdec!=AST__BAD)?this->refdec:0.0))
-astMAKE_SET(SpecFrame,RefDec,double,refdec,value)
-astMAKE_TEST(SpecFrame,RefDec,( this->refdec != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     RefRA
-
-*  Purpose:
-*     The right ascension of the reference point
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute, together with the RefDec attribute, specifies the FK5 
-*     J2000.0 coordinates of a reference point on the sky. For 1-dimensional 
-*     spectra, this should normally be the position of the source. For 
-*     spectral data with spatial coverage (spectral cubes, etc), this should 
-*     be close to centre of the spatial coverage. It is used to define the 
-*     correction for Doppler shift to be applied when using the 
-c     astFindFrame or astConvert 
-f     AST_FINDFRAME or AST_CONVERT 
-*     method to convert between different standards of rest. 
-*
-*     The SpecFrame class assumes this velocity correction is spatially
-*     invariant. If a single SpecFrame is used (for instance, as a
-*     component of a CmpFrame) to describe spectral values at different
-*     points on the sky, then it is assumes that the doppler shift at any
-*     spatial position is the same as at the reference position. The
-*     maximum velocity error introduced by this assumption is of the order
-*     of V*SIN(FOV), where FOV is the angular field of view, and V is the
-*     relative velocity of the two standards of rest. As an example, when
-*     correcting from the observers rest frame (i.e. the topocentric rest
-*     frame) to the kinematic local standard of rest the maximum value of V 
-*     is about 20 km/s, so for 5 arc-minute field of view the maximum velocity 
-*     error introduced by the correction will be about 0.03 km/s. As another 
-*     example, the maximum error when correcting from the observers rest frame 
-*     to the local group is about 5 km/s over a 1 degree field of view.
-*     
-*     The RefRA and RefDec attributes are stored internally in radians, but 
-*     are converted to and from a string for access. The format "hh:mm:ss.ss" 
-*     is used for RefRA, and "dd:mm:ss.s" is used for RefDec. The methods
-c     astSetRefPos and astGetRefPos may be used to access the values of
-f     AST_SETREFPOS and AST_GETREFPOS may be used to access the value of
-*     these attributes directly as unformatted values in radians.
-*
-*     The default for RefRA is "0:0:0".
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The reference right ascension (FK5 J2000, radians). Clear the RefRA value 
-   by setting it to AST__BAD, which gives a default value of 0.0. Any
-   value is acceptable. */
-astMAKE_CLEAR(SpecFrame,RefRA,refra,AST__BAD)
-astMAKE_GET(SpecFrame,RefRA,double,0.0,((this->refra!=AST__BAD)?this->refra:0.0))
-astMAKE_SET(SpecFrame,RefRA,double,refra,value)
-astMAKE_TEST(SpecFrame,RefRA,( this->refra != AST__BAD ))
-
-
-/*
-*att++
-*  Name:
-*     RestFreq
-
-*  Purpose:
-*     The rest frequency.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the frequency corresponding to zero
-*     velocity. It is used when converting between between velocity-based 
-*     coordinate systems and and other coordinate systems (such as frequency, 
-*     wavelength, energy, etc). The default value is 1.0E5 GHz.
-*
-*     When setting a new value for this attribute, the new value can be 
-*     supplied either directly as a frequency, or indirectly as a wavelength 
-*     or energy, in which case the supplied value is converted to a frequency 
-*     before being stored. The nature of the supplied value is indicated by 
-*     appending text to the end of the numerical value indicating the units in 
-*     which the value is supplied. If the units are not specified, then the 
-*     supplied value is assumed to be a frequency in units of GHz. If the 
-*     supplied unit is a unit of frequency, the supplied value is assumed to 
-*     be a frequency in the given units. If the supplied unit is a unit of 
-*     length, the supplied value is assumed to be a (vacuum) wavelength. If 
-*     the supplied unit is a unit of energy, the supplied value is assumed to 
-*     be an energy. For instance, the following strings all result in 
-*     a rest frequency of around 1.4E14 Hz being used: "1.4E5", "1.4E14 Hz",
-*     "1.4E14 s**-1", "1.4E5 GHz", "2.14E-6 m", "21400 Angstrom", "9.28E-20 J",
-*     "9.28E-13 erg", "0.58 eV", etc. 
-*
-*     When getting the value of this attribute, the returned value is
-*     always a frequency in units of GHz.
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The rest frequency (Hz). Clear the RestFreq value by setting it to AST__BAD,
-   which gives 1.0E14 as the default value. Any value is acceptable. */
-astMAKE_CLEAR(SpecFrame,RestFreq,restfreq,AST__BAD)
-astMAKE_GET(SpecFrame,RestFreq,double,1.0E14,((this->restfreq!=AST__BAD)?this->restfreq:1.0E14))
-astMAKE_SET(SpecFrame,RestFreq,double,restfreq,value)
-astMAKE_TEST(SpecFrame,RestFreq,( this->restfreq != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     SourceVel
-
-*  Purpose:
-*     The source velocity.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute (together with SourceSys, SourceVRF, RefRA and RefDec) 
-*     defines the "Source" standard of rest (see attribute StdOfRest). This is 
-*     a rest frame which is moving towards the position given by RefRA and 
-*     RefDec at a  velocity given by SourceVel. A positive value means
-*     the source is moving away from the observer. When a new value is
-*     assigned to this attribute, the supplied value is assumed to refer
-*     to the spectral system specified by the SourceSys attribute. For
-*     instance, the SourceVel value may be supplied as a radio velocity, a
-*     redshift, a beta factor, etc. Similarly, when the current value of
-*     the SourceVel attribute is obtained, the returned value will refer 
-*     to the spectral system specified by the SourceSys value. If the
-*     SourceSys value is changed, any value previously stored for the SourceVel
-*     attribute will be changed automatically from the old spectral system 
-*     to the new spectral system.
-*
-*     When setting a value for SourceVel, the value should be supplied in the 
-*     rest frame specified by the SourceVRF attribute. Likewise, when getting 
-*     the value of SourceVel, it will be returned in the rest frame specified 
-*     by the SourceVRF attribute.
-*
-*     The default SourceVel value is zero.
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*  Notes:
-*     - It is important to set an appropriate value for SourceVRF and
-*     SourceSys before setting a value for SourceVel. If a new value is later 
-*     set for SourceVRF or SourceSys, the value stored for SourceVel will 
-*     simultaneously be changed to the new standard of rest or spectral
-*     system.
-
-*att--
-*/
-/* The source velocity (velocities are stored internally in m/s). Clear it 
-   by setting it to AST__BAD, which returns a default value of zero. Any 
-   value is acceptable. */
-astMAKE_CLEAR(SpecFrame,SourceVel,sourcevel,AST__BAD)
-astMAKE_SET(SpecFrame,SourceVel,double,sourcevel,value)
-astMAKE_TEST(SpecFrame,SourceVel,( this->sourcevel != AST__BAD ))
-astMAKE_GET(SpecFrame,SourceVel,double,0.0,((this->sourcevel!=AST__BAD)?this->sourcevel:0.0))
-
-/*
-*att++
-*  Name:
-*     SourceVRF
-
-*  Purpose:
-*     Rest frame in which the source velocity is stored.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute identifies the rest frame in which the source
-*     velocity or redshift is stored (the source velocity or redshift is 
-*     accessed using attribute SourceVel). When setting a new value for the 
-*     SourceVel attribute, the source velocity or redshift should be supplied 
-*     in the rest frame indicated by this attribute. Likewise, when getting 
-*     the value of the SourceVel attribute, the velocity or redshift will be 
-*     returned in this rest frame.
-*
-*     If the value of SourceVRF is changed, the value stored for SourceVel 
-*     will be converted from the old to the new rest frame.
-*
-*     The values which can be supplied are the same as for the StdOfRest 
-*     attribute (except that SourceVRF cannot be set to "Source"). The 
-*     default value is "Helio".
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The SourceVRF value has a value of AST__BADSOR when not set yielding 
-   a default of AST__HLSOR. */
-astMAKE_TEST(SpecFrame,SourceVRF,( this->sourcevrf != AST__BADSOR ))
-astMAKE_GET(SpecFrame,SourceVRF,AstStdOfRestType,AST__BADSOR,(
-            ( this->sourcevrf == AST__BADSOR ) ? AST__HLSOR : this->sourcevrf ) )
-
-/* When clearing SourceVRF, convert the SourceVel value to heliocentric
-  (but only if set)*/
-astMAKE_CLEAR(SpecFrame,SourceVRF,sourcevrf,((astTestSourceVel( this )?
-astSetSourceVel( this, ConvertSourceVel( this, AST__HLSOR, astGetSourceSys( this ), status ) ),NULL:NULL),AST__BADSOR))
-
-/* Validate the SourceVRF value being set and report an error if necessary. 
-   If OK, convert the stored SourceVel value into the new rest frame (but
-only if set)*/
-astMAKE_SET(SpecFrame,SourceVRF,AstStdOfRestType,sourcevrf,(
-            ( ( value >= FIRST_SOR ) && ( value <= LAST_SOR ) && value != AST__SCSOR ) ?
-                 (astTestSourceVel( this )?
-                 astSetSourceVel( this, ConvertSourceVel( this, value, astGetSourceSys( this ), status )),NULL:NULL), value:
-                 ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
-                             "given for SourceVRF attribute.", status,
-                             "astSetSourceVRF", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
-                                            this->sourcevrf ) ) )
-
-/*
-*att++
-*  Name:
-*     SourceSys
-
-*  Purpose:
-*     Spectral system in which the source velocity is stored.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute identifies the spectral system in which the
-*     SourceVel attribute value (the source velocity) is supplied and 
-*     returned. It can be one of the following:
-*
-*        - "VRAD" or "VRADIO": Radio velocity (km/s)
-*        - "VOPT" or "VOPTICAL": Optical velocity (km/s)
-*        - "ZOPT" or "REDSHIFT": Redshift (dimensionless)
-*        - "BETA": Beta factor (dimensionless)
-*        - "VELO" or "VREL": Apparent radial ("relativistic") velocity (km/s)
-*
-*     When setting a new value for the SourceVel attribute, the source 
-*     velocity should be supplied in the spectral system indicated
-*     by this attribute. Likewise, when getting the value of the SourceVel
-*     attribute, the velocity will be returned in this spectral system.
-*
-*     If the value of SourceSys is changed, the value stored for SourceVel 
-*     will be converted from the old to the new spectral systems.
-*
-*     The default value is "VELO" (apparent radial velocity).
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The SourceSys value has a value of AST__BADSYS when not set yielding 
-   a default of AST__VREL. */
-astMAKE_TEST(SpecFrame,SourceSys,( this->sourcesys != AST__BADSYSTEM ))
-astMAKE_GET(SpecFrame,SourceSys,AstSystemType,AST__BADSYSTEM,(
-            ( this->sourcesys == AST__BADSYSTEM ) ? AST__VREL : this->sourcesys ) )
-
-/* When clearing SourceSys, convert the SourceVel value to relativistic
-   velocity (but only if set) */
-astMAKE_CLEAR(SpecFrame,SourceSys,sourcesys,((astTestSourceVel( this )?
-astSetSourceVel( this, ConvertSourceVel( this, astGetSourceVRF( this ), 
-                                         AST__VREL, status ) ),NULL:NULL),AST__BADSYSTEM))
-
-/* Validate the SourceSys value being set and report an error if necessary. 
-   If OK, convert the stored SourceVel value into the new rest frame (but
-   only if set)*/
-astMAKE_SET(SpecFrame,SourceSys,AstSystemType,sourcesys,(
-            ( ( value == AST__VREL ) || ( value == AST__BETA ) ||
-              ( value == AST__VRADIO ) || ( value == AST__REDSHIFT ) ||
-              ( value == AST__VOPTICAL ) ) ?
-              (astTestSourceVel( this )?
-               astSetSourceVel( this, ConvertSourceVel( this, astGetSourceVRF( this ), 
-                                                        value, status )),NULL:NULL), 
-                                                        value:
-                 ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
-                             "given for SourceSys attribute.", status,
-                             "astSetSourceSys", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
-                                            this->sourcesys ) ) )
-
-/*
-*att++
-*  Name:
-*     StdOfRest
-
-*  Purpose:
-*     Standard of rest.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute identifies the standard of rest to which the spectral
-*     axis values of a SpecFrame refer, and may take any of the values
-*     listed in the "Standards of Rest" section (below). 
-*
-*     The default StdOfRest value is "Helio".
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*  Standards of Rest:
-*     The SpecFrame class supports the following StdOfRest values (all are
-*     case-insensitive):
-*
-*     - "Topocentric", "Topocent" or "Topo": The observers rest-frame (assumed 
-*     to be on the surface of the earth). Spectra recorded in this standard of 
-*     rest suffer a Doppler shift which varies over the course of a day
-*     because of the rotation of the observer around the axis of the earth.
-*     This standard of rest must be qualified using the ObsLat, ObsLon,
-*     ObsAlt, Epoch, RefRA and RefDec attributes. 
-*
-*     - "Geocentric", "Geocentr" or "Geo": The rest-frame of the earth centre. 
-*     Spectra recorded in this standard of rest suffer a Doppler shift which 
-*     varies over the course of a year because of the rotation of the earth 
-*     around the Sun. This standard of rest must be qualified using the Epoch, 
-*     RefRA and RefDec attributes. 
-*
-*     - "Barycentric", "Barycent" or "Bary": The rest-frame of the solar-system
-*     barycentre. Spectra recorded in this standard of rest suffer a Doppler 
-*     shift which depends both on the velocity of the Sun through the Local 
-*     Standard of Rest, and on the movement of the planets through the solar 
-*     system. This standard of rest must be qualified using the Epoch, RefRA 
-*     and RefDec attributes. 
-*
-*     - "Heliocentric", "Heliocen" or "Helio": The rest-frame of the Sun. 
-*     Spectra recorded in this standard of rest suffer a Doppler shift which 
-*     depends on the velocity of the Sun through the Local Standard of Rest. 
-*     This standard of rest must be qualified using the RefRA and RefDec 
-*     attributes. 
-*
-*     - "LSRK", "LSR": The rest-frame of the kinematical Local Standard of 
-*     Rest. Spectra recorded in this standard of rest suffer a Doppler shift 
-*     which depends on the velocity of the kinematical Local Standard of Rest 
-*     through the galaxy. This standard of rest must be qualified using the 
-*     RefRA and RefDec attributes. 
-*
-*     - "LSRD": The rest-frame of the dynamical Local Standard of Rest. Spectra
-*     recorded in this standard of rest suffer a Doppler shift which depends 
-*     on the velocity of the dynamical Local Standard of Rest through the 
-*     galaxy.  This standard of rest must be qualified using the RefRA and 
-*     RefDec attributes. 
-*
-*     - "Galactic", "Galactoc" or "Gal": The rest-frame of the galactic centre.
-*     Spectra recorded in this standard of rest suffer a Doppler shift which 
-*     depends on the velocity of the galactic centre through the local group. 
-*     This standard of rest must be qualified using the RefRA and RefDec 
-*     attributes.
-*
-*     - "Local_group", "Localgrp" or "LG": The rest-frame of the local group. 
-*     This standard of rest must be qualified using the RefRA and RefDec 
-*     attributes.
-*
-*     - "Source", or "src": The rest-frame of the source. This standard of 
-*     rest must be qualified using the RefRA, RefDec and SourceVel attributes.
-*
-*     Where more than one alternative System value is shown above, the
-*     first of these will be returned when an enquiry is made.
-*att--
-*/
-/* The StdOfRest value has a value of AST__BADSOR when not set yielding 
-   a default of AST__HLSOR. */
-astMAKE_TEST(SpecFrame,StdOfRest,( this->stdofrest != AST__BADSOR ))
-astMAKE_GET(SpecFrame,StdOfRest,AstStdOfRestType,AST__BADSOR,(
-            ( this->stdofrest == AST__BADSOR ) ? AST__HLSOR : this->stdofrest ) )
-
-/*
-*att++
-*  Name:
-*     SpecOrigin
-
-*  Purpose:
-*     The zero point for SpecFrame axis values
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This specifies the origin from which all spectral values are measured.
-*     The default value (zero) results in the SpecFrame describing
-*     absolute spectral values in the system given by the System attribute
-*     (e.g. frequency, velocity, etc). If a SpecFrame is to be used to
-*     describe offset from some origin, the SpecOrigin attribute 
-*     should be set to hold the required origin value. The SpecOrigin value 
-*     stored inside the SpecFrame structure is modified whenever SpecFrame 
-*     attribute values are changed so that it refers to the original spectral 
-*     position.
-*
-*     When setting a new value for this attribute, the supplied value is assumed 
-*     to be in the system, units and standard of rest described by the SpecFrame.
-*     Likewise, when getting the value of this attribute, the value is returned
-*     in the system, units and standard of rest described by the SpecFrame. If 
-*     any of these attributes are changed, then any previously stored SpecOrigin 
-*     value will also be changed so that refers to the new system, units or 
-*     standard of rest.
-
-*  Applicability:
-*     SpecFrame
-*        All SpecFrames have this attribute.
-
-*att--
-*/
-/* The spec origin, stored internally in the default units associated
-   with the current System value. Clear the SpecOrigin value  by setting it 
-   to AST__BAD, which gives 0.0 as the default value. Any value is acceptable. */
-astMAKE_CLEAR(SpecFrame,SpecOrigin,specorigin,AST__BAD)
-astMAKE_GET(SpecFrame,SpecOrigin,double,0.0,((this->specorigin!=AST__BAD)?this->specorigin:0.0))
-astMAKE_SET(SpecFrame,SpecOrigin,double,specorigin,value)
-astMAKE_TEST(SpecFrame,SpecOrigin,( this->specorigin != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SpecFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SpecFrame objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *in;             /* Pointer to input SpecFrame */
-   AstSpecFrame *out;            /* Pointer to output SpecFrame */
-   char *usedunit;               /* Pointer to an element of usedunits array */
-   int i;                        /* Loop count */
-   int nused;                    /* Size of "usedunits" array */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SpecFrames. */
-   in = (AstSpecFrame *) objin;
-   out = (AstSpecFrame *) objout;
-
-/* Nullify the pointers stored in the output object since these will
-   currently be pointing at the input data (since the output is a simple
-   byte-for-byte copy of the input). Otherwise, the input data could be
-   freed by accidient if the output object is deleted due to an error
-   occuring in this function. */
-   out->usedunits = NULL;
-
-/* Store the last used units in the output SpecMap. */
-   if( in && in->usedunits ) {
-      nused = in->nuunits;
-      out->usedunits = astMalloc( nused*sizeof( char * ) );
-      if( out->usedunits ) {
-         for( i = 0; i < nused; i++ ) {
-            usedunit = in->usedunits[ i ];
-            if( usedunit ) {
-               out->usedunits[ i ] = astStore( NULL, usedunit, 
-                                               strlen( usedunit ) + 1 );
-            } else {
-               out->usedunits[ i ] = NULL;
-            }
-         }
-      }
-   }
-
-/* If an error has occurred, free the output resources. */
-   if( !astOK ) Delete( (AstObject *) out, status );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SpecFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SpecFrame objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-   
-/* Local Variables: */
-   AstSpecFrame *this;
-   int i;
-
-/* Release the memory referred to in the SpecFrame structure. */
-   this = (AstSpecFrame *) obj;
-   if( this && this->usedunits ) {
-      for( i = 0; i < this->nuunits; i++ ) {
-         this->usedunits[ i ] = astFree( this->usedunits[ i ] );
-      }
-      this->usedunits = astFree( this->usedunits );
-   }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SpecFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SpecFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSpecFrame *this;           /* Pointer to the SpecFrame structure */
-   AstStdOfRestType sor;         /* StdOfRest attribute value */
-   AstSystemType sys;            /* Spectral system value */
-   char buff[ 20 ];              /* Buffer for item name */
-   char comm[ 50 ];              /* Buffer for comment */
-   const char *sval;             /* Pointer to string value */
-   double dval;                  /* Double value */
-   int i;                        /* Loop count */
-   int ival;                     /* int value */
-   int j;                        /* Loop count */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecFrame structure. */
-   this = (AstSpecFrame *) this_object;
-
-/* Write out values representing the instance variables for the
-   SpecFrame class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* StdOfRest. */
-/* ---------- */
-   set = TestStdOfRest( this, status );
-   sor = set ? GetStdOfRest( this, status ) : astGetStdOfRest( this );
-
-/* If set, convert explicitly to a string for the external
-   representation. */
-   sval = "";
-   if ( set ) {
-      if ( astOK ) {
-         sval = StdOfRestString( sor, status );
-
-/* Report an error if the StdOfRest value was not recognised. */
-         if ( !sval ) {
-            astError( AST__SCSIN,
-                     "%s(%s): Corrupt %s contains invalid standard of rest "
-                     "identification code (%d).", status, "astWrite", 
-                     astGetClass( channel ), astGetClass( this ), (int) sor );
-         }
-      }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-   } else {
-      sval = astGetAttrib( this_object, "stdofrest" );
-   }
-
-/* Write out the value. */
-   astWriteString( channel, "SoR", set, 1, sval, "Standard of rest" );
-
-/* AlignStdOfRest. */
-/* --------------- */
-   set = TestAlignStdOfRest( this, status );
-   sor = set ? GetAlignStdOfRest( this, status ) : astGetAlignStdOfRest( this );
-
-/* If set, convert explicitly to a string for the external representation. */
-   if ( set ) {
-      if ( astOK ) {
-         sval = StdOfRestString( sor, status );
-
-/* Report an error if the StdOfRest value was not recognised. */
-         if ( !sval ) {
-            astError( AST__SCSIN,
-                     "%s(%s): Corrupt %s contains invalid alignment standard "
-                     "of rest identification code (%d).", status, "astWrite", 
-                     astGetClass( channel ), astGetClass( this ), (int) sor );
-         }
-      }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-   } else {
-      sval = astGetAttrib( this_object, "alignstdofrest" );
-   }
-
-/* Write out the value. */
-   astWriteString( channel, "AlSoR", set, 0, sval, "Alignment standard of rest" );
-
-/* RefRA. */
-/* ------ */
-   set = TestRefRA( this, status );
-   dval = set ? GetRefRA( this, status ) : astGetRefRA( this );
-   astWriteDouble( channel, "RefRA", set, 0, dval, "Reference RA (rads, FK5 J2000)" );
-
-/* RefDec. */
-/* ------- */
-   set = TestRefDec( this, status );
-   dval = set ? GetRefDec( this, status ) : astGetRefDec( this );
-   astWriteDouble( channel, "RefDec", set, 0, dval, "Reference Dec (rads, FK5 J2000)" );
-
-/* RestFreq. */
-/* --------- */
-   set = TestRestFreq( this, status );
-   dval = set ? GetRestFreq( this, status ) : astGetRestFreq( this );
-   astWriteDouble( channel, "RstFrq", set, 0, dval, "Rest frequency (Hz)" );
-
-/* SourceVel. */
-/* ---------- */
-   set = TestSourceVel( this, status );
-   dval = set ? GetSourceVel( this, status ) : astGetSourceVel( this );
-   astWriteDouble( channel, "SrcVel", set, 0, dval, "Source velocity (m/s)" );
-
-/* SourceVRF. */
-/* ---------- */
-   set = TestSourceVRF( this, status );
-   sor = set ? GetSourceVRF( this, status ) : astGetSourceVRF( this );
-
-/* If set, convert explicitly to a string for the external representation. */
-   if ( set ) {
-      if ( astOK ) {
-         sval = StdOfRestString( sor, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !sval ) {
-            astError( AST__SCSIN,
-                     "%s(%s): Corrupt %s contains invalid source velocity "
-                     "rest frame identification code (%d).", status, "astWrite", 
-                     astGetClass( channel ), astGetClass( this ), (int) sor );
-         }
-      }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-   } else {
-      sval = astGetAttrib( this_object, "sourcevrf" );
-   }
-
-/* Write out the value. */
-   astWriteString( channel, "SrcVRF", set, 0, sval, "Source velocity rest frame" );
-
-/* SourceSys. */
-/* ---------- */
-   set = TestSourceSys( this, status );
-   sys = set ? GetSourceSys( this, status ) : astGetSourceSys( this );
-
-/* If set, convert explicitly to a string for the external representation. */
-   if ( set ) {
-      if ( astOK ) {
-         sval = SystemString( (AstFrame *) this, sys, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !sval ) {
-            astError( AST__SCSIN,
-                     "%s(%s): Corrupt %s contains invalid source velocity "
-                     "spectral system identification code (%d).", status, "astWrite", 
-                     astGetClass( channel ), astGetClass( this ), (int) sys );
-         }
-      }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-   } else {
-      sval = astGetAttrib( this_object, "sourcesys" );
-   }
-
-/* Write out the value. */
-   astWriteString( channel, "SrcSys", set, 0, sval, "Source velocity spectral system" );
-
-/* AlignSpecOffset. */
-/* ---------------- */
-   set = TestAlignSpecOffset( this, status );
-   ival = set ? GetAlignSpecOffset( this, status ) : astGetAlignSpecOffset( this );
-   astWriteInt( channel, "AlSpOf", set, 0, ival,
-                ival ? "Align in offset coords" :
-                       "Align in system coords" );
-
-/* UsedUnits */
-/* --------- */
-   if( this->usedunits ) {
-      for( i = 0; i < this->nuunits; i++ ) {
-         if( this->usedunits[ i ] ) {
-            sprintf( buff, "U%s", astSystemString( this, (AstSystemType) i ));
-            for( j = 2; j < strlen( buff ); j++ ) buff[ j ] = tolower( buff[ j ] );
-            sprintf( comm, "Preferred units for %s", SystemLabel( (AstSystemType) i, status ) );
-            astWriteString( channel, buff, 1, 0, this->usedunits[ i ], comm );
-         }
-      }
-   }
-
-/* SpecOrigin. */
-/* ----------- */
-   set = TestSpecOrigin( this, status );
-   dval = set ? GetSpecOrigin( this, status ) : astGetSpecOrigin( this );
-   if( dval != AST__BAD ) {
-      astWriteDouble( channel, "SpOrg", set, 0, dval, "Spec offset" );
-   }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASpecFrame and astCheckSpecFrame functions using the 
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SpecFrame,Frame)
-astMAKE_CHECK(SpecFrame)
-
-AstSpecFrame *astSpecFrame_( const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astSpecFrame
-
-*  Purpose:
-*     Create a SpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     AstSpecFrame *astSpecFrame( const char *options, int *status, ... )
-
-*  Class Membership:
-*     SpecFrame constructor.
-
-*  Description:
-*     This function creates a new SpecFrame and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new SpecFrame. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new SpecFrame.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic SpecFrame constructor which
-*     is available via the protected interface to the SpecFrame class.
-*     A public interface is provided by the astSpecFrameId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *um;               /* Mapping from default to actual units */
-   AstSpecFrame *new;            /* Pointer to new SpecFrame */
-   AstSystemType s;              /* System */
-   const char *u;                /* Units string */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SpecFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSpecFrame( NULL, sizeof( AstSpecFrame ), !class_init, 
-                           &class_vtab, "SpecFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SpecFrame's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* Check the Units are appropriate for the System. */
-      u = astGetUnit( new, 0 );
-      s = astGetSystem( new );
-      um = astUnitMapper( DefUnit( s, "astSpecFrame", "SpecFrame", status ), 
-                          u, NULL, NULL );
-      if( um ) {
-         um = astAnnul( um );
-      } else {
-         astError( AST__BADUN, "astSpecFrame: Inappropriate units (%s) "
-                   "specified for a %s axis.", status, u, SystemLabel( s, status ) );
-      }      
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SpecFrame. */
-   return new;
-}
-
-AstSpecFrame *astInitSpecFrame_( void *mem, size_t size, int init,
-                                 AstSpecFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSpecFrame
-
-*  Purpose:
-*     Initialise a SpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     AstSpecFrame *astInitSpecFrame( void *mem, size_t size, int init,
-*                                     AstFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SpecFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new SpecFrame object. It allocates memory (if
-*     necessary) to accommodate the SpecFrame plus any additional data
-*     associated with the derived class. It then initialises a
-*     SpecFrame structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual function
-*     table for a SpecFrame at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SpecFrame is to be
-*	created. This must be of sufficient size to accommodate the
-*	SpecFrame data (sizeof(SpecFrame)) plus any data used by
-*	the derived class. If a value of NULL is given, this function
-*	will allocate the memory itself using the "size" parameter to
-*	determine its size.
-*     size
-*        The amount of memory used by the SpecFrame (plus derived
-*	class data). This will be used to allocate memory if a value of
-*	NULL is given for the "mem" parameter. This value is also stored
-*	in the SpecFrame structure, so a valid value must be supplied
-*	even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the SpecFrame's virtual function
-*	table is to be initialised. If this value is non-zero, the
-*	virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*	associated with the new SpecFrame.
-*     name
-*        Pointer to a constant null-terminated character string which
-*	contains the name of the class to which the new object belongs
-*	(it is this pointer value that will subsequently be returned by
-*	the astGetClass method).
-
-*  Returned Value:
-*     A pointer to the new SpecFrame.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *new;        /* Pointer to the new SpecFrame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSpecFrameVtab( vtab, name );
-
-/* Initialise a 1D Frame structure (the parent class) as the first component
-   within the SpecFrame structure, allocating memory if necessary. */
-   new = (AstSpecFrame *) astInitFrame( mem, size, 0,
-                                        (AstFrameVtab *) vtab, name, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the SpecFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->alignstdofrest = AST__BADSOR;    
-      new->refdec = AST__BAD;
-      new->refra = AST__BAD;
-      new->restfreq = AST__BAD;
-      new->sourcevel = AST__BAD;
-      new->sourcevrf = AST__BADSOR;    
-      new->sourcesys = AST__BADSYSTEM;    
-      new->stdofrest = AST__BADSOR;
-      new->nuunits = 0;
-      new->usedunits = NULL;
-      new->specorigin = AST__BAD;
-      new->alignspecoffset = -INT_MAX;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSpecFrame *astLoadSpecFrame_( void *mem, size_t size,
-                                 AstSpecFrameVtab *vtab, 
-                                 const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSpecFrame
-
-*  Purpose:
-*     Load a SpecFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specframe.h"
-*     AstSpecFrame *astLoadSpecFrame( void *mem, size_t size,
-*                                      AstSpecFrameVtab *vtab, 
-*                                      const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     SpecFrame loader.
-
-*  Description:
-*     This function is provided to load a new SpecFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SpecFrame structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SpecFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SpecFrame data (sizeof(SpecFrame)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SpecFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SpecFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSpecFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SpecFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the SpecFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SpecFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SpecFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSpecFrame *new;            /* Pointer to the new SpecFrame */
-   char buff[ 20 ];              /* Buffer for item name */
-   char *sval;                   /* Pointer to string value */
-   double obslat;                /* Value for ObsLat attribute */
-   double obslon;                /* Get a pointer to the thread specific global data structure. */
-
-/* Value for ObsLon attribute */
-   int i;                        /* Loop count */
-   int j;                        /* Loop count */
-   int nc;                       /* String length */
-   int sys;                      /* System value */
-
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SpecFrame. In this case the
-   SpecFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSpecFrame );
-      vtab = &class_vtab;
-      name = "SpecFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSpecFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SpecFrame. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-       astReadClassData( channel, "SpecFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* StdOfRest. */
-/* ---------- */
-/* Set the default and read the external representation as a string. */
-       new->stdofrest = AST__BADSOR;
-       sval = astReadString( channel, "sor", NULL );
-
-/* If a value was read, convert from a string to a StdOfRest code. */
-       if ( sval ) {
-          if ( astOK ) {
-             new->stdofrest = StdOfRestCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
-             if ( new->stdofrest == AST__BADSOR ) {
-                astError( AST__ATTIN,
-                          "astRead(%s): Invalid standard of rest description "
-                          "\"%s\".", status, astGetClass( channel ), sval );
-             }
-          }
-
-/* Free the string value. */
-          sval = astFree( sval );
-       }
-
-/* AlignStdOfRest. */
-/* --------------- */
-/* Set the default and read the external representation as a string. */
-       new->alignstdofrest = AST__BADSOR;
-       sval = astReadString( channel, "alsor", NULL );
-
-/* If a value was read, convert from a string to a StdOfRest code. */
-       if ( sval ) {
-          if ( astOK ) {
-             new->alignstdofrest = StdOfRestCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
-             if ( new->alignstdofrest == AST__BADSOR ) {
-                astError( AST__ATTIN,
-                          "astRead(%s): Invalid alignment standard of rest "
-                          "description \"%s\".", status, astGetClass( channel ), sval );
-             }
-          }
-
-/* Free the string value. */
-          sval = astFree( sval );
-       }
-
-/* GeoLat. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in
-   which SpecFrame had a GeoLat attribute (now ObsLat is used instead). */
-      if( !astTestObsLat( new ) ) {
-         obslat = astReadDouble( channel, "geolat", AST__BAD );
-         if ( obslat != AST__BAD ) astSetObsLat( new, obslat );
-      }
-
-/* GeoLon. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in
-   which SpecFrame had a GeoLon attribute (now ObsLon is used instead). */
-      if( !astTestObsLon( new ) ) {
-         obslon = astReadDouble( channel, "geolon", AST__BAD );
-         if ( obslon != AST__BAD ) astSetObsLon( new, obslon );
-      }
-
-/* RefRA. */
-/* ------ */
-      new->refra = astReadDouble( channel, "refra", AST__BAD );
-      if ( TestRefRA( new, status ) ) SetRefRA( new, new->refra, status );
-
-/* RefDec. */
-/* ------- */
-      new->refdec = astReadDouble( channel, "refdec", AST__BAD );
-      if ( TestRefDec( new, status ) ) SetRefDec( new, new->refdec, status );
-
-/* RestFreq. */
-/* --------- */
-      new->restfreq = astReadDouble( channel, "rstfrq", AST__BAD );
-      if ( TestRestFreq( new, status ) ) SetRestFreq( new, new->restfreq, status );
-
-/* AlignSpecOffset */
-/* --------------- */
-      new->alignspecoffset = astReadInt( channel, "alspof", -INT_MAX );
-      if ( TestAlignSpecOffset( new, status ) ) SetAlignSpecOffset( new, new->alignspecoffset, status );
-
-/* SourceVel. */
-/* ---------- */
-      new->sourcevel = astReadDouble( channel, "srcvel", AST__BAD );
-      if ( TestSourceVel( new, status ) ) SetSourceVel( new, new->sourcevel, status );
-
-/* SourceVRF */
-/* --------- */
-/* Set the default and read the external representation as a string. */
-       new->sourcevrf = AST__BADSOR;
-       sval = astReadString( channel, "srcvrf", NULL );
-
-/* If a value was read, convert from a string to a StdOfRest code. */
-       if ( sval ) {
-          if ( astOK ) {
-             new->sourcevrf = StdOfRestCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
-             if ( new->sourcevrf == AST__BADSOR ) {
-                astError( AST__ATTIN,
-                          "astRead(%s): Invalid source velocity rest frame "
-                          "description \"%s\".", status, astGetClass( channel ), sval );
-             }
-          }
-
-/* Free the string value. */
-          sval = astFree( sval );
-       }
-
-/* SourceSys */
-/* --------- */
-/* Set the default and read the external representation as a string. */
-       new->sourcesys = AST__BADSYSTEM;
-       sval = astReadString( channel, "srcsys", NULL );
-
-/* If a value was read, convert from a string to a System code. */
-       if ( sval ) {
-          if ( astOK ) {
-             new->sourcesys = SystemCode( (AstFrame *) new, sval, status );
-
-/* Report an error if the value wasn't recognised. */
-             if ( new->sourcesys == AST__BADSYSTEM ) {
-                astError( AST__ATTIN,
-                          "astRead(%s): Invalid source velocity spectral system "
-                          "description \"%s\".", status, astGetClass( channel ), sval );
-             }
-          }
-
-/* Free the string value. */
-          sval = astFree( sval );
-       }
-
-/* UsedUnits */
-/* --------- */
-      new->nuunits = 0;
-      new->usedunits = NULL;
-      for( sys = FIRST_SYSTEM; sys <= LAST_SYSTEM; sys++ ) {
-         nc = sprintf( buff, "u%s", astSystemString( new, (AstSystemType) sys ));
-         for( j = 0; j < nc; j++ ) buff[ j ] = tolower( buff[ j ] );
-         sval = astReadString( channel, buff, NULL );
-         if( sval ) {
-            if( (int) sys >= new->nuunits ) {
-               new->usedunits = astGrow( new->usedunits, sys + 1, 
-                                          sizeof(char *) );
-               if( astOK ) {
-                  for( i = new->nuunits; i < sys + 1; i++ ) new->usedunits[ i ] = NULL;
-                  new->nuunits = sys + 1;
-               }
-            } else {
-               new->usedunits[ sys ] = astFree( new->usedunits[ sys ] );
-            }
-            if( astOK ) {
-               new->usedunits[ sys ] = astStore( new->usedunits[ sys ],
-                                                 sval, strlen( sval ) + 1 );
-            }
-            sval = astFree( sval);
-         }
-      }
-
-/* SpecOrigin. */
-/* --------- */
-      new->specorigin = astReadDouble( channel, "sporg", AST__BAD );
-      if ( TestSpecOrigin( new, status ) ) SetSpecOrigin( new, new->specorigin, status );
-
-
-/* If an error occurred, clean up by deleting the new SpecFrame. */
-       if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SpecFrame pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astGetRefPos_( AstSpecFrame *this, AstSkyFrame *frm, double *lon, 
-                    double *lat, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,SpecFrame,GetRefPos))(this,frm,lon,lat, status );
-}
-void astSetRefPos_( AstSpecFrame *this, AstSkyFrame *frm, double lon, 
-                    double lat, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,SpecFrame,SetRefPos))(this,frm,lon,lat, status );
-}
-
-void astSetStdOfRest_( AstSpecFrame *this, AstStdOfRestType value, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,SpecFrame,SetStdOfRest))(this,value, status );
-}
-
-void astClearStdOfRest_( AstSpecFrame *this, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,SpecFrame,ClearStdOfRest))(this, status );
-}
-
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSpecFrame *astSpecFrameId_( const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstSpecFrame *astSpecFrameId_( const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astSpecFrame
-f     AST_SPECFRAME
-
-*  Purpose:
-*     Create a SpecFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "specframe.h"
-c     AstSpecFrame *astSpecFrame( const char *options, ... )
-f     RESULT = AST_SPECFRAME( OPTIONS, STATUS )
-
-*  Class Membership:
-*     SpecFrame constructor.
-
-*  Description:
-*     This function creates a new SpecFrame and optionally initialises
-*     its attributes.
-*
-*     A SpecFrame is a specialised form of one-dimensional Frame which 
-*     represents various coordinate systems used to describe positions within 
-*     an electro-magnetic spectrum. The particular coordinate system to be 
-*     used is specified by setting the SpecFrame's System attribute (the 
-*     default is wavelength) qualified, as necessary, by other attributes 
-*     such as the rest frequency, the standard of rest, the epoch of 
-*     observation, etc (see the description of the System attribute for 
-*     details).
-*
-*     By setting a value for thr SpecOrigin attribute, a SpecFrame can be made 
-*     to represent offsets from a given spectral position, rather than absolute
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SpecFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SpecFrame. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSpecFrame()
-f     AST_SPECFRAME = INTEGER
-*        A pointer to the new SpecFrame.
-
-*  Examples:
-c     frame = astSpecFrame( "" );
-f     FRAME = AST_SPECFRAME( ' ', STATUS )
-*        Creates a SpecFrame to describe the default wavelength spectral
-*        coordinate system. The RestFreq attribute (rest frequency) is 
-*        unspecified, so it will not be possible to align this SpecFrame 
-*        with another SpecFrame on the basis of a velocity-based system. The
-*        standard of rest is also unspecified. This means that alignment
-*        will be possible with other SpecFrames, but no correction will be
-*        made for Doppler shift caused by change of rest frame during the 
-*        alignment.
-c     frame = astSpecFrame( "System=VELO, RestFreq=1.0E15, StdOfRest=LSRK" );
-f     FRAME = AST_SPECFRAME( 'System=VELO, RestFreq=1.0E15, StdOfRest=LSRK', STATUS )
-*        Creates a SpecFrame describing a apparent radial velocity ("VELO") axis 
-*        with rest frequency 1.0E15 Hz (about 3000 Angstroms), measured
-*        in the kinematic Local Standard of Rest ("LSRK"). Since the
-*        source position has not been specified (using attributes RefRA and 
-*        RefDec), it will only be possible to align this SpecFrame with
-*        other SpecFrames which are also measured in the LSRK standard of
-*        rest.
-
-*  Notes:
-*     - When conversion between two SpecFrames is requested (as when
-c     supplying SpecFrames to astConvert),
-f     supplying SpecFrames AST_CONVERT),
-*     account will be taken of the nature of the spectral coordinate systems 
-*     they represent, together with any qualifying rest frequency, standard 
-*     of rest, epoch values, etc. The AlignSystem and AlignStdOfRest
-*     attributes will also be taken into account. The results will therefore 
-*     fully reflect the relationship between positions measured in the two
-*     systems. In addition, any difference in the Unit attributes of the two 
-*     systems will also be taken into account.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astSpecFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astSpecFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astSpecFrame_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *um;               /* Mapping from default to actual units */
-   AstSpecFrame *new;            /* Pointer to new SpecFrame */
-   AstSystemType s;              /* System */
-   const char *u;                /* Units string */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-   astGET_GLOBALS(NULL);         /* Get a pointer to the thread specific global data structure. */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SpecFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSpecFrame( NULL, sizeof( AstSpecFrame ), !class_init, 
-                           &class_vtab, "SpecFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SpecFrame's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* Check the Units are appropriate for the System. */
-      u = astGetUnit( new, 0 );
-      s = astGetSystem( new );
-      um = astUnitMapper( DefUnit( s, "astSpecFrame", "SpecFrame", status ), 
-                          u, NULL, NULL );
-      if( um ) {
-         um = astAnnul( um );
-      } else {
-         astError( AST__BADUN, "astSpecFrame: Inappropriate units (%s) "
-                   "specified for a %s axis.", status, u, SystemLabel( s, status ) );
-      }      
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new SpecFrame. */
-   return astMakeId( new );
-}
-
diff --git a/ast-5.3-1/specframe.h b/ast-5.3-1/specframe.h
deleted file mode 100644
index 5b0d7a6..0000000
--- a/ast-5.3-1/specframe.h
+++ /dev/null
@@ -1,425 +0,0 @@
-#if !defined( SPECFRAME_INCLUDED ) /* Include this file only once */
-#define SPECFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     specframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SpecFrame class.
-
-*  Invocation:
-*     #include "specframe.h"
-
-*  Description:
-*     This include file defines the interface to the SpecFrame class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     12-NOV-2002 (DSB):
-*        Original version.
-*     18-OCT-2006 (DSB):
-*        Added SpecOrigin.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Parent Frame class */
-#include "skyframe.h"            /* Celestial coordinate systems */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__FREQ          1
-#define AST__ENERGY        2
-#define AST__WAVENUM       3
-#define AST__WAVELEN       4
-#define AST__AIRWAVE       5
-#define AST__VRADIO        6
-#define AST__VOPTICAL      7
-#define AST__REDSHIFT      8
-#define AST__BETA          9
-#define AST__VREL          10
-
-/* Values used to represent different StdOfRest attribute values. */
-#define AST__BADSOR        0
-#define AST__TPSOR         1
-#define AST__GESOR         2
-#define AST__BYSOR         3
-#define AST__HLSOR         4
-#define AST__LDSOR         5
-#define AST__LKSOR         6
-#define AST__LGSOR         7
-#define AST__GLSOR         8
-#define AST__SCSOR         9
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Integer type used to store the spectral StdOfRest attribute. */
-typedef int AstStdOfRestType;
-
-/* SpecFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstSpecFrame {
-
-/* Attributes inherited from the parent class. */
-   AstFrame frame;               /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstStdOfRestType alignstdofrest;/* Code identifying alignment StdOfRest */
-   AstStdOfRestType stdofrest;   /* Standard of rest */
-   double refdec;                /* Dec (FK5 J2000) of source */
-   double refra;                 /* RA (FK5 J2000) of source */
-   double restfreq;              /* Rest frequency (Hz)*/
-   double sourcevel;             /* Source velocity (heliocentric, m/s) */
-   AstStdOfRestType sourcevrf;   /* Code identifying source vel. StdOfRest */
-   AstSystemType sourcesys;      /* Code identifying source vel. system */
-   int nuunits;                  /* Size of usedunits array */
-   char **usedunits;             /* Last used units for each system */
-   double specorigin;            /* Origin for sectral values */ 
-   int alignspecoffset;          /* Align SpecFrame in offset coords? */
-} AstSpecFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSpecFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* GetRefPos)( AstSpecFrame *, AstSkyFrame *, double *, double *, int * );
-   void (* SetRefPos)( AstSpecFrame *, AstSkyFrame *, double, double, int * );
-
-   AstStdOfRestType (* GetStdOfRest)( AstSpecFrame *, int * );
-   int (* TestStdOfRest)( AstSpecFrame *, int * );
-   void (* ClearStdOfRest)( AstSpecFrame *, int * );
-   void (* SetStdOfRest)( AstSpecFrame *, AstStdOfRestType, int * );
-
-   AstStdOfRestType (* GetAlignStdOfRest)( AstSpecFrame *, int * );
-   int (* TestAlignStdOfRest)( AstSpecFrame *, int * );
-   void (* ClearAlignStdOfRest)( AstSpecFrame *, int * );
-   void (* SetAlignStdOfRest)( AstSpecFrame *, AstStdOfRestType, int * );
-
-   AstStdOfRestType (* GetSourceVRF)( AstSpecFrame *, int * );
-   int (* TestSourceVRF)( AstSpecFrame *, int * );
-   void (* ClearSourceVRF)( AstSpecFrame *, int * );
-   void (* SetSourceVRF)( AstSpecFrame *, AstStdOfRestType, int * );
-
-   AstSystemType (* GetSourceSys)( AstSpecFrame *, int * );
-   int (* TestSourceSys)( AstSpecFrame *, int * );
-   void (* ClearSourceSys)( AstSpecFrame *, int * );
-   void (* SetSourceSys)( AstSpecFrame *, AstSystemType, int * );
-
-   double (* GetRestFreq)( AstSpecFrame *, int * );
-   int (* TestRestFreq)( AstSpecFrame *, int * );
-   void (* ClearRestFreq)( AstSpecFrame *, int * );
-   void (* SetRestFreq)( AstSpecFrame *, double, int * );
-
-   double (* GetRefRA)( AstSpecFrame *, int * );
-   int (* TestRefRA)( AstSpecFrame *, int * );
-   void (* ClearRefRA)( AstSpecFrame *, int * );
-   void (* SetRefRA)( AstSpecFrame *, double, int * );
-
-   double (* GetRefDec)( AstSpecFrame *, int * );
-   int (* TestRefDec)( AstSpecFrame *, int * );
-   void (* ClearRefDec)( AstSpecFrame *, int * );
-   void (* SetRefDec)( AstSpecFrame *, double, int * );
-
-   double (* GetSourceVel)( AstSpecFrame *, int * );
-   int (* TestSourceVel)( AstSpecFrame *, int * );
-   void (* ClearSourceVel)( AstSpecFrame *, int * );
-   void (* SetSourceVel)( AstSpecFrame *, double, int * );
-
-   double (* GetSpecOrigin)( AstSpecFrame *, int * );
-   int (* TestSpecOrigin)( AstSpecFrame *, int * );
-   void (* ClearSpecOrigin)( AstSpecFrame *, int * );
-   void (* SetSpecOrigin)( AstSpecFrame *, double, int * );
-
-   int (* GetAlignSpecOffset)( AstSpecFrame *, int * );
-   int (* TestAlignSpecOffset)( AstSpecFrame *, int * );
-   void (* ClearAlignSpecOffset)( AstSpecFrame *, int * );
-   void (* SetAlignSpecOffset)( AstSpecFrame *, int, int * );
-
-
-} AstSpecFrameVtab;
-
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstSpecFrameGlobals {
-   AstSpecFrameVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 51 ];
-   char GetLabel_Buff[ 201 ];
-   char GetSymbol_Buff[ 21 ];
-   char GetTitle_Buff[ 201 ];
-} AstSpecFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SpecFrame)         /* Check class membership */
-astPROTO_ISA(SpecFrame)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstSpecFrame *astSpecFrame_( const char *, int *, ...);
-#else
-AstSpecFrame *astSpecFrameId_( const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSpecFrame *astInitSpecFrame_( void *, size_t, int, 
-                                         AstSpecFrameVtab *,
-                                         const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSpecFrameVtab_( AstSpecFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstSpecFrame *astLoadSpecFrame_( void *, size_t, 
-                                         AstSpecFrameVtab *,
-                                         const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitSpecFrameGlobals_( AstSpecFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astGetRefPos_( AstSpecFrame *, AstSkyFrame *, double *, double *, int * );
-void astSetRefPos_( AstSpecFrame *, AstSkyFrame *, double, double, int * );
-
-#if defined(astCLASS)            /* Protected */
-
-AstStdOfRestType astGetStdOfRest_( AstSpecFrame *, int * );
-int astTestStdOfRest_( AstSpecFrame *, int * );
-void astClearStdOfRest_( AstSpecFrame *, int * );
-void astSetStdOfRest_( AstSpecFrame *, AstStdOfRestType, int * );
-
-AstStdOfRestType astGetAlignStdOfRest_( AstSpecFrame *, int * );
-int astTestAlignStdOfRest_( AstSpecFrame *, int * );
-void astClearAlignStdOfRest_( AstSpecFrame *, int * );
-void astSetAlignStdOfRest_( AstSpecFrame *, AstStdOfRestType, int * );
-
-AstStdOfRestType astGetSourceVRF_( AstSpecFrame *, int * );
-int astTestSourceVRF_( AstSpecFrame *, int * );
-void astClearSourceVRF_( AstSpecFrame *, int * );
-void astSetSourceVRF_( AstSpecFrame *, AstStdOfRestType, int * );
-
-AstSystemType astGetSourceSys_( AstSpecFrame *, int * );
-int astTestSourceSys_( AstSpecFrame *, int * );
-void astClearSourceSys_( AstSpecFrame *, int * );
-void astSetSourceSys_( AstSpecFrame *, AstSystemType, int * );
-
-double astGetRestFreq_( AstSpecFrame *, int * );
-int astTestRestFreq_( AstSpecFrame *, int * );
-void astClearRestFreq_( AstSpecFrame *, int * );
-void astSetRestFreq_( AstSpecFrame *, double, int * );
-
-double astGetRefRA_( AstSpecFrame *, int * );
-int astTestRefRA_( AstSpecFrame *, int * );
-void astClearRefRA_( AstSpecFrame *, int * );
-void astSetRefRA_( AstSpecFrame *, double, int * );
-
-double astGetRefDec_( AstSpecFrame *, int * );
-int astTestRefDec_( AstSpecFrame *, int * );
-void astClearRefDec_( AstSpecFrame *, int * );
-void astSetRefDec_( AstSpecFrame *, double, int * );
-
-double astGetSourceVel_( AstSpecFrame *, int * );
-int astTestSourceVel_( AstSpecFrame *, int * );
-void astClearSourceVel_( AstSpecFrame *, int * );
-void astSetSourceVel_( AstSpecFrame *, double, int * );
-
-double astGetSpecOrigin_( AstSpecFrame *, int * );
-int astTestSpecOrigin_( AstSpecFrame *, int * );
-void astClearSpecOrigin_( AstSpecFrame *, int * );
-void astSetSpecOrigin_( AstSpecFrame *, double, int * );
-
-int astGetAlignSpecOffset_( AstSpecFrame *, int * );
-int astTestAlignSpecOffset_( AstSpecFrame *, int * );
-void astClearAlignSpecOffset_( AstSpecFrame *, int * );
-void astSetAlignSpecOffset_( AstSpecFrame *, int, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSpecFrame(this) astINVOKE_CHECK(SpecFrame,this,0)
-#define astVerifySpecFrame(this) astINVOKE_CHECK(SpecFrame,this,1)
-
-/* Test class membership. */
-#define astIsASpecFrame(this) astINVOKE_ISA(SpecFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astSpecFrame astINVOKE(F,astSpecFrame_)
-#else
-#define astSpecFrame astINVOKE(F,astSpecFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSpecFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSpecFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSpecFrameVtab(vtab,name) astINVOKE(V,astInitSpecFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSpecFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSpecFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckSpecFrame to validate SpecFrame pointers
-   before use. This provides a contextual error report if a pointer to
-   the wrong sort of object is supplied. */
-
-#define astGetRefPos(this,frm,lon,lat) astINVOKE(V,astGetRefPos_(astCheckSpecFrame(this),(frm==NULL?NULL:astCheckSkyFrame(frm)),lon,lat,STATUS_PTR))
-#define astSetRefPos(this,frm,lon,lat) astINVOKE(V,astSetRefPos_(astCheckSpecFrame(this),(frm==NULL?NULL:astCheckSkyFrame(frm)),lon,lat,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGetStdOfRest(this) astINVOKE(V,astGetStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestStdOfRest(this) astINVOKE(V,astTestStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearStdOfRest(this) astINVOKE(V,astClearStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetStdOfRest(this,value) astINVOKE(V,astSetStdOfRest_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetAlignStdOfRest(this) astINVOKE(V,astGetAlignStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestAlignStdOfRest(this) astINVOKE(V,astTestAlignStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearAlignStdOfRest(this) astINVOKE(V,astClearAlignStdOfRest_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetAlignStdOfRest(this,value) astINVOKE(V,astSetAlignStdOfRest_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSourceVRF(this) astINVOKE(V,astGetSourceVRF_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSourceVRF(this) astINVOKE(V,astTestSourceVRF_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSourceVRF(this) astINVOKE(V,astClearSourceVRF_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSourceVRF(this,value) astINVOKE(V,astSetSourceVRF_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSourceSys(this) astINVOKE(V,astGetSourceSys_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSourceSys(this) astINVOKE(V,astTestSourceSys_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSourceSys(this) astINVOKE(V,astClearSourceSys_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSourceSys(this,value) astINVOKE(V,astSetSourceSys_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetRestFreq(this) astINVOKE(V,astGetRestFreq_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestRestFreq(this) astINVOKE(V,astTestRestFreq_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearRestFreq(this) astINVOKE(V,astClearRestFreq_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetRestFreq(this,value) astINVOKE(V,astSetRestFreq_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetRefRA(this) astINVOKE(V,astGetRefRA_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestRefRA(this) astINVOKE(V,astTestRefRA_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearRefRA(this) astINVOKE(V,astClearRefRA_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetRefRA(this,value) astINVOKE(V,astSetRefRA_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetRefDec(this) astINVOKE(V,astGetRefDec_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestRefDec(this) astINVOKE(V,astTestRefDec_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearRefDec(this) astINVOKE(V,astClearRefDec_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetRefDec(this,value) astINVOKE(V,astSetRefDec_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSourceVel(this) astINVOKE(V,astGetSourceVel_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSourceVel(this) astINVOKE(V,astTestSourceVel_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSourceVel(this) astINVOKE(V,astClearSourceVel_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSourceVel(this,value) astINVOKE(V,astSetSourceVel_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astGetSpecOrigin(this) astINVOKE(V,astGetSpecOrigin_(astCheckSpecFrame(this),STATUS_PTR))
-#define astTestSpecOrigin(this) astINVOKE(V,astTestSpecOrigin_(astCheckSpecFrame(this),STATUS_PTR))
-#define astClearSpecOrigin(this) astINVOKE(V,astClearSpecOrigin_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetSpecOrigin(this,value) astINVOKE(V,astSetSpecOrigin_(astCheckSpecFrame(this),value,STATUS_PTR))
-
-#define astClearAlignSpecOffset(this) astINVOKE(V,astClearAlignSpecOffset_(astCheckSpecFrame(this),STATUS_PTR))
-#define astGetAlignSpecOffset(this) astINVOKE(V,astGetAlignSpecOffset_(astCheckSpecFrame(this),STATUS_PTR))
-#define astSetAlignSpecOffset(this,value) astINVOKE(V,astSetAlignSpecOffset_(astCheckSpecFrame(this),value,STATUS_PTR))
-#define astTestAlignSpecOffset(this) astINVOKE(V,astTestAlignSpecOffset_(astCheckSpecFrame(this),STATUS_PTR))
-
-
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/specmap.c b/ast-5.3-1/specmap.c
deleted file mode 100644
index df889be..0000000
--- a/ast-5.3-1/specmap.c
+++ /dev/null
@@ -1,4678 +0,0 @@
-/*
-*class++
-*  Name:
-*     SpecMap
-
-*  Purpose:
-*     Sequence of spectral coordinate conversions.
-
-*  Constructor Function:
-c     astSpecMap (also see astSpecAdd)
-f     AST_SPECMAP (also see AST_SPECADD)
-
-*  Description:
-*     A SpecMap is a specialised form of Mapping which can be used to
-*     represent a sequence of conversions between standard spectral
-*     coordinate systems.
-*
-*     When an SpecMap is first created, it simply performs a unit
-c     (null) Mapping. Using the astSpecAdd
-f     (null) Mapping. Using the AST_SPECADD
-c     function, a series of coordinate conversion steps may then be
-f     routine, a series of coordinate conversion steps may then be
-*     added. This allows multi-step conversions between a variety of 
-*     spectral coordinate systems to be assembled out of a set of building 
-*     blocks.
-*
-*     Conversions are available to transform between standards of rest.
-*     Such conversions need to know the source position as an RA and DEC.
-*     This information can be supplied in the form of parameters for
-*     the relevant conversions, in which case the SpecMap is 1-dimensional, 
-*     simply transforming the spectral axis values. This means that the
-*     same source position will always be used by the SpecMap. However, this 
-*     may not be appropriate for an accurate description of a 3-D spectral
-*     cube, where changes of spatial position can produce significant
-*     changes in the Doppler shift introduced when transforming between
-*     standards of rest. For this situation, a 3-dimensional SpecMap can
-*     be created in which axes 2 and 3 correspond to the source RA and DEC
-*     The SpecMap simply copies values for axes 2 and 3 from input to
-*     output), but modifies axis 1 values (the spectral axis) appropriately.
-*
-*     For details of the individual coordinate conversions available,
-c     see the description of the astSpecAdd function.
-f     see the description of the AST_SPECADD routine.
-
-*  Inheritance:
-*     The SpecMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The SpecMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     In addition to those functions applicable to all Mappings, the
-c     following function may also be applied to all SpecMaps:
-f     In addition to those routines applicable to all Mappings, the
-f     following routine may also be applied to all SpecMaps:
-*
-c     - astSpecAdd: Add a spectral coordinate conversion to an SpecMap
-f     - AST_SPECADD: Add a spectral coordinate conversion to an SpecMap
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     6-NOV-2002 (DSB):
-*        Original version.
-*     14-JUL-2003 (DSB):
-*        Added checks for NAN values produced by transformation functions.
-*     17-SEP-2003 (DSB):
-*        - Improve FRTOAW accuracy by iterating.
-*        - Changed Refrac to use algorithm given in FITS-WCS paper 3
-*        version dated 21/9/03.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*     15-NOV-2006 (DSB):
-*        Guard against division by zero when converting freq to wave in
-*        SystemChange.
-*     18-JUN-2009 (DSB):
-*        Add OBSALT argument to TPF2HL and HLF2TP conversions.
-*        Change GEOLON/LAT to OBSLON/LAT for consistency with other
-*        classes.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SpecMap
-
-/* Codes to identify spectral coordinate conversions. */
-#define AST__SPEC_NULL   0       /* Null value */
-#define AST__FRTOVL      1       /* Frequency to relativistic velocity */
-#define AST__VLTOFR      2       /* Relativistic velocity to Frequency */
-#define AST__ENTOFR      3       /* Energy to frequency */
-#define AST__FRTOEN      4       /* Frequency to energy */
-#define AST__WNTOFR      5       /* Wave number to frequency */
-#define AST__FRTOWN      6       /* Frequency to wave number */
-#define AST__WVTOFR      7       /* Wavelength (vacuum) to frequency */
-#define AST__FRTOWV      8       /* Frequency to wavelength (vacuum) */
-#define AST__AWTOFR      9       /* Wavelength (air) to frequency */
-#define AST__FRTOAW     10       /* Frequency to wavelength (air) */
-#define AST__VRTOVL     11       /* Radio to relativistic velocity */
-#define AST__VLTOVR     12       /* Relativistic to radio velocity */
-#define AST__VOTOVL     13       /* Optical to relativistic velocity */
-#define AST__VLTOVO     14       /* Relativistic to optical velocity */
-#define AST__ZOTOVL     15       /* Redshift to relativistic velocity */
-#define AST__VLTOZO     16       /* Relativistic velocity to redshift */
-#define AST__BTTOVL     17       /* Beta factor to relativistic velocity */
-#define AST__VLTOBT     18       /* Relativistic velocity to beta factor */
-#define AST__USF2HL     19       /* User-defined to heliocentric frequency  */
-#define AST__HLF2US     20       /* Heliocentric to user-defined frequency */
-#define AST__TPF2HL     21       /* Topocentric to heliocentric frequency  */
-#define AST__HLF2TP     22       /* Heliocentric to topocentric frequency */
-#define AST__GEF2HL     23       /* Geocentric to heliocentric frequency */
-#define AST__HLF2GE     24       /* Heliocentric to geocentric frequency */
-#define AST__BYF2HL     25       /* Barycentric to heliocentric frequency */
-#define AST__HLF2BY     26       /* Heliocentric to barycentric frequency */
-#define AST__LKF2HL     27       /* LSRK to heliocentric frequency */
-#define AST__HLF2LK     28       /* Heliocentric to LSRK frequency */
-#define AST__LDF2HL     29       /* LSRD to heliocentric frequency */
-#define AST__HLF2LD     30       /* Heliocentric to LSRD frequency */
-#define AST__LGF2HL     31       /* Local group to heliocentric frequency */
-#define AST__HLF2LG     32       /* Heliocentric to local group frequency */
-#define AST__GLF2HL     33       /* Galactic to heliocentric frequency */
-#define AST__HLF2GL     34       /* Heliocentric to galactic frequency */
-
-/* Maximum number of arguments required by a conversion. */
-#define MAX_ARGS 7
-
-/* The alphabet (used for generating keywords for arguments). */
-#define ALPHABET "abcdefghijklmnopqrstuvwxyz"
-
-/* Angle conversion */
-#define PI 3.141592653589793238462643
-#define PIBY2 (PI/2.0)
-#define D2R (PI/180.0)
-#define R2D (180.0/PI)
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h"              /* SLALIB interface */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "unitmap.h"             /* Unit (null) Mappings */
-#include "specmap.h"             /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double (* parent_rate)( AstMapping *, double *, int, int, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SpecMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SpecMap,Class_Init)
-#define class_vtab astGLOBAL(SpecMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSpecMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* Structure to hold parameters and intermediate values describing a
-   reference frame */
-typedef struct FrameDef {
-   double obsalt;     /* Observers geodetic altitude (m) */
-   double obslat;     /* Observers geodetic latitude (rads) */
-   double obslon;     /* Observers geodetic longitude (rads, +ve east) */
-   double epoch;      /* Julian epoch of observation */
-   double refdec;     /* RA of reference point (FK5 J2000) */
-   double refra;      /* DEC of reference point (FK5 J2000) */
-   double veluser;    /* Heliocentric velocity of user-defined system (m/s) */
-   double last;       /* Local apparent sideral time */
-   double amprms[21]; /* Mean to apparent parameters */
-   double vuser[3];   /* Used-defined velocity as a FK5 J2000 vector */
-   double dvh[3];     /* Earth-sun velocity */
-   double dvb[3];     /* Barycentre-sun velocity */
-} FrameDef;
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSpecMap *astSpecMapId_( int, int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *CvtString( int, const char **, int *, int *, int *, int *, const char *[ MAX_ARGS ], int * );
-static double BaryVel( double, double, FrameDef *, int * );
-static double GalVel( double, double, FrameDef *, int * );
-static double GeoVel( double, double, FrameDef *, int * );
-static double LgVel( double, double, FrameDef *, int * );
-static double LsrdVel( double, double, FrameDef *, int * );
-static double LsrkVel( double, double, FrameDef *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static double Refrac( double, int * );
-static double Rverot( double, double, double, double, double, int * );
-static double TopoVel( double, double, FrameDef *, int * );
-static double UserVel( double, double, FrameDef *, int * );
-static int CvtCode( const char *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int FrameChange( int, int, double *, double *, double *, double *, int, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int SystemChange( int, int, double *, double *, int, int * );
-static void AddSpecCvt( AstSpecMap *, int, const double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SpecAdd( AstSpecMap *, const char *, const double[], int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two SpecMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     SpecMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two SpecMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a SpecMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the SpecMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecMap *that;        
-   AstSpecMap *this;        
-   const char *argdesc[ MAX_ARGS ]; 
-   const char *comment;      
-   int argdec;             
-   int argra;              
-   int i, j;           
-   int nargs;              
-   int nin;
-   int nout;
-   int result;
-   int szargs;             
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two SpecMap structures. */
-   this = (AstSpecMap *) this_object;
-   that = (AstSpecMap *) that_object;
-
-/* Check the second object is a SpecMap. We know the first is a
-   SpecMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsASpecMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two SpecMaps differ, it may still be possible 
-   for them to be equivalent. First compare the SpecMaps if their Invert 
-   flags are the same. In this case all the attributes of the two SpecMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-            if( this->ncvt == that->ncvt ) {
-               result = 1;
-               for( i = 0; i < this->ncvt && result; i++ ) {
-                  if( this->cvttype[ i ] != that->cvttype[ i ] ) {
-                     result = 0;
-                  } else {
-                     CvtString( this->cvttype[ i ], &comment, &argra, 
-                                &argdec, &nargs, &szargs, argdesc, status );
-                     for( j = 0; j < nargs; j++ ) {
-                        if( !astEQUAL( this->cvtargs[ i ][ j ],
-                                       that->cvtargs[ i ][ j ] ) ){
-                           result = 0;
-                           break;
-                        }
-                     }
-                  }
-               }
-            }
-
-/* If the Invert flags for the two SpecMaps differ, the attributes of the two 
-   SpecMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a SpecMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SpecMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SpecMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSpecMap *this;         /* Pointer to SpecMap structure */
-   int result;               /* Result value to return */
-   int cvt;                  /* Loop counter for coordinate conversions */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SpecMap structure. */
-   this = (AstSpecMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
-      result += astTSizeOf( this->cvtargs[ cvt ] );
-   }
-
-   result += astTSizeOf( this->cvtargs );
-   result += astTSizeOf( this->cvttype );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void AddSpecCvt( AstSpecMap *this, int cvttype, const double *args, int *status ) {
-/*
-*  Name:
-*     AddSpecCvt
-
-*  Purpose:
-*     Add a coordinate conversion step to an SpecMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     void AddSpecCvt( AstSpecMap *this, int cvttype, const double *args )
-
-*  Class Membership:
-*     SpecMap member function.
-
-*  Description:
-*     This function allows one of the supported spectral coordinate
-*     conversions to be appended to a SpecMap. When a SpecMap is first
-*     created (using astSpecMap), it simply performs a unit mapping. By
-*     using AddSpecCvt repeatedly, a series of coordinate conversions may
-*     then be specified which the SpecMap will subsequently perform in
-*     sequence. This allows a complex coordinate conversion to be
-*     assembled out of the basic building blocks. The SpecMap will also
-*     perform the inverse coordinate conversion (applying the individual
-*     conversion steps in reverse) if required.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecMap.
-*     cvttype
-*        A code to identify which spectral coordinate conversion is to be
-*        appended.  See the "Coordinate Conversions" section for details 
-*        of those available.
-*     args
-*        Pointer to an array of double containing the argument values
-*        required to fully specify the required coordinate
-*        conversion. The number of arguments depends on the conversion
-*        (see the "Coordinate Conversions" section for details). This 
-*        value is ignored and may be NULL if no arguments are required.
-
-*  Returned Value:
-*     void.
-
-*  Coordinate Conversions:
-*     The following values may be supplied for the "cvttype" parameter
-*     in order to specify the coordinate conversion to be performed.
-*     The argument(s) required to fully specify each conversion are
-*     indicated in parentheses after each value, and described at the end
-*     of the list. Values for these should be given in the array pointed 
-*     at by "args". 
-*
-*        AST__FRTOVL( RF )
-*           Convert frequency to relativistic velocity.
-*        AST__VLTOFR( RF )
-*           Convert relativistic velocity to Frequency.
-*        AST__ENTOFR      
-*           Convert energy to frequency.
-*        AST__FRTOEN      
-*           Convert frequency to energy.
-*        AST__WNTOFR      
-*           Convert wave number to frequency.
-*        AST__FRTOWN      
-*           Convert frequency to wave number.
-*        AST__WVTOFR      
-*           Convert wavelength (vacuum) to frequency.
-*        AST__FRTOWV      
-*           Convert frequency to wavelength (vacuum).
-*        AST__AWTOFR     
-*           Convert wavelength (air) to frequency.
-*        AST__FRTOAW     
-*           Convert frequency to wavelength (air).
-*        AST__VRTOVL     
-*           Convert radio to relativistic velocity.
-*        AST__VLTOVR     
-*           Convert relativistic to radio velocity.
-*        AST__VOTOVL     
-*           Convert optical to relativistic velocity.
-*        AST__VLTOVO     
-*           Convert relativistic to optical velocity.
-*        AST__ZOTOVL     
-*           Convert redshift to relativistic velocity.
-*        AST__VLTOZO     
-*           Convert relativistic velocity to redshift.
-*        AST__BTTOVL     
-*           Convert beta factor to relativistic velocity.
-*        AST__VLTOBT     
-*           Convert relativistic velocity to beta factor.
-*        AST_USF2HL( VOFF, RA, DEC )
-*           Convert frequency from a user-defined reference frame to 
-*           heliocentric.
-*        AST__HLF2US( VOFF, RA, DEC )
-*           Convert frequency from heliocentric reference frame to 
-*           user-defined.
-*        AST__TPF2HL( OBSLON, OBSLAT, OBSALT, EPOCH, RA, DEC )
-*           Convert from Topocentric to heliocentric frequency
-*        AST__HLF2TP( OBSLON, OBSLAT, OBSALT, EPOCH, RA, DEC )
-*           Convert from Heliocentric to topocentric frequency.
-*        AST__GEF2HL( EPOCH, RA, DEC )
-*           Convert from Geocentric to heliocentric frequency.
-*        AST__HLF2GE( EPOCH, RA, DEC )
-*           Convert from Heliocentric to geocentric frequency.
-*        AST__BYF2HL( EPOCH, RA, DEC )
-*           Convert from Barycentric to heliocentric frequency.
-*        AST__HLF2BY( EPOCH, RA, DEC )
-*           Convert from Heliocentric to barycentric frequency.
-*        AST__LKF2HL( RA, DEC )
-*           Convert from LSRK to heliocentric frequency.
-*        AST__HLF2LK( RA, DEC )
-*           Convert from Heliocentric to LSRK frequency.
-*        AST__LDF2HL( RA, DEC )
-*           Convert from LSRD to heliocentric frequency.
-*        AST__HLF2LD( RA, DEC )
-*           Convert from Heliocentric to LSRD frequency.
-*        AST__LGF2HL( RA, DEC )
-*           Convert from Local group to heliocentric frequency.
-*        AST__HLF2LG( RA, DEC )
-*           Convert from Heliocentric to local group frequency.
-*        AST__GLF2HL( RA, DEC )
-*           Convert from Galactic to heliocentric frequency.
-*        AST__HLF2GL( RA, DEC )
-*           Convert from Heliocentric to galactic frequency.
-*
-*     The units for the values processed by the above conversions are as
-*     follows: 
-*
-*     - all velocities: metres per second.
-*     - frequency: Hertz.
-*     - all wavelengths: metres.
-*     - energy: Joules.
-*     - wave number: cycles per metre.
-*
-*     The arguments used in the above conversions are as follows:
-*
-*     - RF: Rest frequency (Hz).
-*     - OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-*     - OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-*     - OBSLON: Longitude of observer (radians, positive eastwards).
-*     - EPOCH: Epoch of observation (UT1 expressed as a Modified Julian Date).
-*     - RA: Right Ascension of source (radians, FK5 J2000).
-*     - DEC: Declination of source (radians, FK5 J2000).
-*     - VOFF: Velocity of the user-defined reference frame, towards the
-*     position given by RA and DEC, measured in the heliocentric
-*     reference frame.
-*
-*     If the SpecMap is 3-dimensional, source positions are provided by the 
-*     values supplied to inputs 2 and 3 of the SpecMap (which are simply 
-*     copied to outputs 2 and 3). Note, usable values are still required
-*     for the RA and DEC arguments in order to define the "user-defined" 
-*     reference frame used by USF2HL and HLF2US. However, AST__BAD can be 
-*     supplied for RA and DEC if the user-defined reference frame is not 
-*     required.
-
-*  Notes:
-*     - The specified conversion is appended only if the SpecMap's
-*     Invert attribute is zero. If it is non-zero, this function
-*     effectively prefixes the inverse of the conversion specified
-*     instead.
-*/
-
-/* Local Variables: */
-   const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   const char *cvt_string;       /* Pointer to conversion type string */
-   int argdec;                   /* Index of DEC argument */
-   int argra;                    /* Index of RA argument */
-   int i;                        /* Argument index */
-   int nargs;                    /* Number of user-supplied arguments */
-   int ncvt;                     /* Number of coordinate conversions */
-   int szargs;                   /* Size of arguments array */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the coordinate conversion type and obtain the number of
-   required user-supplied arguments, and the size of the array in which
-   to put the user-supplied arguments (the array meay leave room after
-   the user-supplied arguments for various useful pre-calculated values). */
-   cvt_string = CvtString( cvttype, &comment, &argra, &argdec, &nargs, 
-                           &szargs, argdesc, status );
-
-/* If the coordinate conversion type was not valid, then report an
-   error. */
-   if ( astOK && !cvt_string ) {
-      astError( AST__SPCIN, "AddSpecCvt(%s): Invalid spectral coordinate "
-                "conversion type (%d).", status, astGetClass( this ),     
-                (int) cvttype );
-   }
-
-/* Note the number of coordinate conversions already stored in the SpecMap. */
-   if ( astOK ) {
-      ncvt = this->ncvt;
-
-/* Extend the array of conversion types and the array of pointers to
-   their argument lists to accommodate the new one. */
-      this->cvttype = (int *) astGrow( this->cvttype, ncvt + 1,
-                                       sizeof( int ) );
-      this->cvtargs = (double **) astGrow( this->cvtargs, ncvt + 1,
-                                           sizeof( double * ) );
-
-/* If OK, allocate memory and store a copy of the argument list,
-   putting a pointer to the copy into the SpecMap. */
-      if ( astOK ) {
-         this->cvtargs[ ncvt ] = astStore( NULL, args,
-                                           sizeof( double ) * (size_t) szargs );
-      }
-
-/* Store the conversion type and increment the conversion count. Also put
-   AST__BAD in any elements of the argument array which are beyond the
-   end of the user-supplied arguments. These will be used to hold
-   intermediate values calculated on the basis of the user-supplied
-   arguments. */
-      if ( astOK ) {
-         this->cvttype[ ncvt ] = cvttype;
-         this->ncvt++;
-         for( i = nargs; i < szargs; i++ ) this->cvtargs[ ncvt ][ i ] = AST__BAD;
-      }
-   }
-}
-
-static double BaryVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     BaryVel
-
-*  Purpose:
-*     Find the velocity of the earth-sun barycentre away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double BaryVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the earth-sun
-*     barycentre away from a specified source position, at a given epoch, in 
-*     the frame of rest of the centre of the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   double dpb[ 3 ];          /* Barycentric earth position vector */
-   double dph[ 3 ];          /* Heliocentric earth position vector */
-   double dvh[ 3 ];          /* Heliocentric earth velocity vector */
-   double v[ 3 ];            /* Source direction vector */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the Cartesian vector towards the source, in the Cartesian FK5
-   J2000 system. */
-   palSlaDcs2c( ra, dec, v );
-
-/* If not already done so, get the Earth/Sun velocity and position vectors in 
-   the same system. Speed is returned in units of AU/s. Store in the supplied 
-   frame definition structure. */
-   if( def->dvb[ 0 ] == AST__BAD ) {
-      palSlaEvp( def->epoch, 2000.0, def->dvb, dpb, dvh, dph );
-  
-/* Change the barycentric velocity of the earth into the heliocentric 
-   velocity of the barycentre. */
-      def->dvb[ 0 ] = dvh[ 0 ] - def->dvb[ 0 ];
-      def->dvb[ 1 ] = dvh[ 1 ] - def->dvb[ 1 ];
-      def->dvb[ 2 ] = dvh[ 2 ] - def->dvb[ 2 ];
-   }
-
-/* Return the component away from the source, of the velocity of the
-   barycentre relative to the sun (in m/s). */
-   return -palSlaDvdv( v, def->dvb )*149.597870E9;
-
-}
-
-static int CvtCode( const char *cvt_string, int *status ) {
-/*
-*  Name:
-*     CvtCode
-
-*  Purpose:
-*     Convert a conversion type from a string representation to a code value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     int CvtCode( const char *cvt_string, int *status )
-
-*  Class Membership:
-*     SpecMap member function.
-
-*  Description:
-*     This function accepts a string used to repersent one of the
-*     SpecMap coordinate conversions and converts it into a code
-*     value for internal use.
-
-*  Parameters:
-*     cvt_string
-*        Pointer to a constant null-terminated string representing a
-*        spectral coordinate conversion. This is case sensitive and should
-*        contain no unnecessary white space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The equivalent conversion code. If the string was not
-*     recognised, the code AST__SPEC_NULL is returned, without error.
-
-*  Notes:
-*     - A value of AST__SPEC_NULL will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = AST__SPEC_NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Test the string against each recognised value in turn and assign
-   the result. */
-   if ( astChrMatch( cvt_string, "FRTOVL" ) ) {
-      result = AST__FRTOVL;
-
-   } else if ( astChrMatch( cvt_string, "VLTOFR" ) ) {
-      result = AST__VLTOFR;
-
-   } else if ( astChrMatch( cvt_string, "VLTOFR" ) ) { 
-      result = AST__VLTOFR; 
-
-   } else if ( astChrMatch( cvt_string, "ENTOFR" ) ) { 
-      result = AST__ENTOFR; 
-
-   } else if ( astChrMatch( cvt_string, "FRTOEN" ) ) { 
-      result = AST__FRTOEN; 
-
-   } else if ( astChrMatch( cvt_string, "WNTOFR" ) ) { 
-      result = AST__WNTOFR; 
-
-   } else if ( astChrMatch( cvt_string, "FRTOWN" ) ) { 
-      result = AST__FRTOWN; 
-
-   } else if ( astChrMatch( cvt_string, "WVTOFR" ) ) { 
-      result = AST__WVTOFR; 
-
-   } else if ( astChrMatch( cvt_string, "FRTOWV" ) ) { 
-      result = AST__FRTOWV; 
-
-   } else if ( astChrMatch( cvt_string, "AWTOFR" ) ) { 
-      result = AST__AWTOFR; 
-
-   } else if ( astChrMatch( cvt_string, "FRTOAW" ) ) { 
-      result = AST__FRTOAW; 
-
-   } else if ( astChrMatch( cvt_string, "VRTOVL" ) ) { 
-      result = AST__VRTOVL; 
-
-   } else if ( astChrMatch( cvt_string, "VLTOVR" ) ) { 
-      result = AST__VLTOVR; 
-
-   } else if ( astChrMatch( cvt_string, "VOTOVL" ) ) { 
-      result = AST__VOTOVL; 
-
-   } else if ( astChrMatch( cvt_string, "VLTOVO" ) ) { 
-      result = AST__VLTOVO; 
-
-   } else if ( astChrMatch( cvt_string, "ZOTOVL" ) ) { 
-      result = AST__ZOTOVL; 
-
-   } else if ( astChrMatch( cvt_string, "VLTOZO" ) ) { 
-      result = AST__VLTOZO; 
-
-   } else if ( astChrMatch( cvt_string, "BTTOVL" ) ) { 
-      result = AST__BTTOVL; 
-
-   } else if ( astChrMatch( cvt_string, "VLTOBT" ) ) { 
-      result = AST__VLTOBT; 
-
-   } else if ( astChrMatch( cvt_string, "USF2HL" ) ) { 
-      result = AST__USF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2US" ) ) { 
-      result = AST__HLF2US; 
-
-   } else if ( astChrMatch( cvt_string, "TPF2HL" ) ) { 
-      result = AST__TPF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2TP" ) ) { 
-      result = AST__HLF2TP; 
-
-   } else if ( astChrMatch( cvt_string, "GEF2HL" ) ) { 
-      result = AST__GEF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2GE" ) ) { 
-      result = AST__HLF2GE; 
-
-   } else if ( astChrMatch( cvt_string, "BYF2HL" ) ) { 
-      result = AST__BYF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2BY" ) ) { 
-      result = AST__HLF2BY; 
-
-   } else if ( astChrMatch( cvt_string, "LKF2HL" ) ) { 
-      result = AST__LKF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2LK" ) ) { 
-      result = AST__HLF2LK; 
-
-   } else if ( astChrMatch( cvt_string, "LDF2HL" ) ) { 
-      result = AST__LDF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2LD" ) ) { 
-      result = AST__HLF2LD; 
-
-   } else if ( astChrMatch( cvt_string, "LGF2HL" ) ) { 
-      result = AST__LGF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2LG" ) ) { 
-      result = AST__HLF2LG; 
-
-   } else if ( astChrMatch( cvt_string, "GLF2HL" ) ) { 
-      result = AST__GLF2HL; 
-
-   } else if ( astChrMatch( cvt_string, "HLF2GL" ) ) { 
-      result = AST__HLF2GL; 
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *CvtString( int cvt_code, const char **comment,
-                              int *argra, int *argdec, int *nargs, int *szargs,
-                              const char *arg[ MAX_ARGS ], int *status ) {
-/*
-*  Name:
-*     CvtString
-
-*  Purpose:
-*     Convert a conversion type from a code value to a string representation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     const char *CvtString( int cvt_code, const char **comment,
-*                            int *argra, int *argdec, int *nargs, 
-*                            int *szargs, const char *arg[ MAX_ARGS ], int *status )
-
-*  Class Membership:
-*     SpecMap member function.
-
-*  Description:
-*     This function accepts a code value used to represent one of the
-*     SpecMap coordinate conversions and converts it into an
-*     equivalent string representation. It also returns a descriptive
-*     comment and information about the arguments required in order to
-*     perform the conversion.
-
-*  Parameters:
-*     cvt_code
-*        The conversion code.
-*     comment
-*        Address of a location to return a pointer to a constant
-*        null-terminated string containing a description of the
-*        conversion.
-*     argra
-*        Address of an int in which to return the index of the argument
-*        corresponding to the source RA. Returned equal to -1 if the
-*        conversion does not have a source RA argument.
-*     argdec
-*        Address of an int in which to return the index of the argument
-*        corresponding to the source DEC. Returned equal to -1 if the
-*        conversion does not have a source DEC argument.
-*     nargs
-*        Address of an int in which to return the number of arguments
-*        required from the user in order to perform the conversion (may 
-*        be zero).
-*     szargs
-*        Address of an int in which to return the number of arguments
-*        associated with the conversion. This may be bigger than "nargs"
-*        if the conversion can pre-calculate useful values on the basis
-*        of the user-supplied values. Such precalculated values are
-*        stored after the last user-supplied argument.
-*     arg
-*        An array in which to return a pointer to a constant
-*        null-terminated string for each argument (above) containing a
-*        description of what each argument represents. This includes both
-*        user-supplied arguments and pre-calculated values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string representation of
-*     the conversion code value supplied. If the code supplied is not
-*     valid, a NULL pointer will be returned, without error.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;          /* Result pointer to return */
-
-/* Initialise the returned values. */
-   *comment = NULL;
-   *nargs = 0;
-   *argra = -1;
-   *argdec = -1;
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-      
-/* Test for each valid code value in turn and assign the appropriate
-   return values. */
-   switch ( cvt_code ) {
-
-   case AST__FRTOVL:
-      *comment = "Convert frequency to rel. velocity";
-      result = "FRTOVL";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "Rest frequency (Hz)";
-      break;
-
-   case AST__VLTOFR:
-      *comment = "Convert rel. velocity to frequency";
-      result = "VLTOFR";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "Rest frequency (Hz)";
-      break;
-
-   case AST__ENTOFR:
-      *comment = "Convert energy to frequency";
-      result = "ENTOFR";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__FRTOEN:
-      *comment = "Convert frequency to energy";
-      result = "FRTOEN";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__WNTOFR:
-      *comment = "Convert wave number to frequency";
-      result = "WNTOFR";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__FRTOWN:
-      *comment = "Convert frequency to wave number";
-      result = "FRTOWN";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__WVTOFR:
-      *comment = "Convert wavelength (vacuum) to frequency";
-      result = "WVTOFR";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__FRTOWV:
-      *comment = "Convert frequency to wavelength (vacuum)";
-      result = "FRTOWV";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__AWTOFR:
-      *comment = "Convert wavelength (air) to frequency";
-      result = "AWTOFR";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__FRTOAW:
-      *comment = "Convert frequency to wavelength (air)";
-      result = "FRTOAW";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__VRTOVL:
-      *comment = "Convert radio to rel. velocity";
-      result = "VRTOVL";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__VLTOVR:
-      *comment = "Convert relativistic to radio velocity";
-      result = "VLTOVR";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__VOTOVL:
-      *comment = "Convert optical to rel. velocity";
-      result = "VOTOVL";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__VLTOVO:
-      *comment = "Convert relativistic to optical velocity";
-      result = "VLTOVO";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__ZOTOVL:
-      *comment = "Convert redshift to rel. velocity";
-      result = "ZOTOVL";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__VLTOZO:
-      *comment = "Convert rel. velocity to redshift";
-      result = "VLTOZO";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__BTTOVL:
-      *comment = "Convert beta factor to rel. velocity";
-      result = "BTTOVL";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__VLTOBT:
-      *comment = "Convert rel. velocity to beta factor";
-      result = "VLTOBT";
-      *nargs = 0;
-      *szargs = 0;
-      break;
-
-   case AST__USF2HL:
-      *comment = "Convert from user-defined to heliocentric frequency";
-      result = "USF2HL";
-      *argra = 1;
-      *argdec = 2;
-      *nargs = 3;
-      *szargs = 4;
-      arg[ 0 ] = "Velocity offset (m/s)";
-      arg[ 1 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 3 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2US:
-      *comment = "Convert from heliocentric to user-defined frequency";
-      result = "HLF2US";
-      *argra = 1;
-      *argdec = 2;
-      *nargs = 3;
-      *szargs = 4;
-      arg[ 0 ] = "Velocity offset (m/s)";
-      arg[ 1 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 3 ] = "Frequency correction factor";
-      break;
-
-   case AST__TPF2HL:
-      *comment = "Convert from Topocentric to heliocentric frequency";
-      result = "TPF2HL";
-      *argra = 4;
-      *argdec = 5;
-      *nargs = 6;
-      *szargs = 7;
-      arg[ 0 ] = "Longitude (positive eastwards, radians)";
-      arg[ 1 ] = "Latitude (geodetic, radians)";
-      arg[ 2 ] = "Altitude (geodetic, metres)";
-      arg[ 3 ] = "UT1 epoch of observaton (Modified Julian Date)";
-      arg[ 4 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 5 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 6 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2TP:
-      *comment = "Convert from Heliocentric to topocentric frequency";
-      result = "HLF2TP";
-      *argra = 4;
-      *argdec = 5;
-      *nargs = 6;
-      *szargs = 7;
-      arg[ 0 ] = "Longitude (positive eastwards, radians)";
-      arg[ 1 ] = "Latitude (geodetic, radians)";
-      arg[ 2 ] = "Altitude (geodetic, metres)";
-      arg[ 3 ] = "UT1 epoch of observaton (Modified Julian Date)";
-      arg[ 4 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 5 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 6 ] = "Frequency correction factor";
-      break;
-
-   case AST__GEF2HL:
-      *comment = "Convert from Geocentric to heliocentric frequency";
-      result = "GEF2HL";
-      *argra = 1;
-      *argdec = 2;
-      *nargs = 3;
-      *szargs = 4;
-      arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
-      arg[ 1 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 3 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2GE:
-      *comment = "Convert from Heliocentric to geocentric frequency";
-      result = "HLF2GE";
-      *argra = 1;
-      *argdec = 2;
-      *nargs = 3;
-      *szargs = 4;
-      arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
-      arg[ 1 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 3 ] = "Frequency correction factor";
-      break;
-
-   case AST__BYF2HL:
-      *comment = "Convert from Barycentric to heliocentric frequency";
-      result = "BYF2HL";
-      *argra = 1;
-      *argdec = 2;
-      *nargs = 3;
-      *szargs = 4;
-      arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
-      arg[ 1 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 3 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2BY:
-      *comment = "Convert from Heliocentric to barycentric frequency";
-      result = "HLF2BY";
-      *argra = 1;
-      *argdec = 2;
-      *nargs = 3;
-      *szargs = 4;
-      arg[ 0 ] = "UT1 epoch of observaton (Modified Julian Date)";
-      arg[ 1 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 2 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 3 ] = "Frequency correction factor";
-      break;
-
-   case AST__LKF2HL:
-      *comment = "Convert from LSRK to heliocentric frequency";
-      result = "LKF2HL";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2LK:
-      *comment = "Convert from Heliocentric to LSRK frequency";
-      result = "HLF2LK";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__LDF2HL:
-      *comment = "Convert from LSRD to heliocentric frequency";
-      result = "LDF2HL";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2LD:
-      *comment = "Convert from Heliocentric to LSRD frequency";
-      result = "HLF2LD";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__LGF2HL:
-      *comment = "Convert from Local group to heliocentric frequency";
-      result = "LGF2HL";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2LG:
-      *comment = "Convert from Heliocentric to local group frequency";
-      result = "HLF2LG";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__GLF2HL:
-      *comment = "Convert from Galactic to heliocentric frequency";
-      result = "GLF2HL";
-      *argra = 0;
-      *argdec = 1;
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   case AST__HLF2GL:
-      *comment = "Convert from Heliocentric to galactic frequency";
-      *argra = 0;
-      *argdec = 1;
-      result = "HLF2GL";
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "RA of source (FK5 J2000, radians)";
-      arg[ 1 ] = "DEC of source (FK5 J2000, radians)";
-      arg[ 2 ] = "Frequency correction factor";
-      break;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int FrameChange( int cvt_code, int np, double *ra, double *dec, double *freq,
-                        double *args, int forward, int *status ){ 
-/*
-*  Name:
-*     FrameChange
-
-*  Purpose:
-*     Apply a doppler shift caused by a change of reference frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     int FrameChange( int cvt_code, int np, double *ra, double *dec, 
-*                      double *freq, double *args, int forward, int *status )
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function modifies the supplied frequency values in order to
-*     apply a doppler shift caused by a change of the observers rest-frame.
-
-*  Parameters:
-*     cvt_code
-*        A code indicating the conversion to be applied. If the code does
-*        not correspond to a change of rest-frame, then the supplied
-*        frequencies are left unchanged and zero is returned as the
-*        function value.
-*     np
-*        The number of frequency values to transform.
-*     ra
-*        Pointer to an array of "np" RA (J2000 FK5) values at which the
-*        "np" frequencies are observed. These are unchanged on exit. If a 
-*        NULL pointer is supplied, then all frequencies are assumed to be 
-*        observed at the single RA value given by "refra"
-*     dec
-*        Pointer to an array of "np" Dec (J2000 FK5) values at which the
-*        "np" frequencies are observed. These are unchanged on exit. If a 
-*        NULL pointer is supplied, then all frequencies are assumed to be 
-*        observed at the single Dec value given by "refdec"
-*     freq
-*        Pointer to an array of "np" frequency values, measured in the
-*        input rest-frame. These are modified on return to hold the 
-*        corresponding values measured in the output rest-frame.
-*     args
-*        Pointer to an array holding the conversion arguments. The number
-*        of arguments expected depends on the particular conversion being
-*        used.
-*     forward
-*        Should the conversion be applied in the forward or inverse
-*        direction? Non-zero for forward, zero for inverse.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the supplied conversion code corresponds to a change of
-*     reference frame. Zoer otherwise  (in which case the upplied values
-*     will not have been changed).
-
-*  Notes:
-*     - The "args" array contains RA and DEC values which give the "source" 
-*     position (FK5 J2000). If a NULL value is supplied for the "ra" 
-*     parameter, then these args define the position of all the frequency
-*     values. In addition they also define the direction of motion of
-*     the "user-defined" rest-frame (see "veluser"). Thus they should still 
-*     be supplied even if "ra" is NULL.
-
-*/
-
-/* Local Variables: */
-   FrameDef def;      /* Structure holding frame parameters */
-   double (* cvtFunc)( double, double, FrameDef *, int * ); /* Pointer to conversion function */
-   double *fcorr;     /* Pointer to frequency correction factor */   
-   double *pdec;      /* Pointer to next Dec value */   
-   double *pf;        /* Pointer to next frequency value */   
-   double *pra;       /* Pointer to next RA value */   
-   double factor;     /* Frequency correction factor */
-   double s;          /* Velocity correction (m/s) */
-   int i;             /* Loop index */
-   int result;        /* Returned value */
-   int sign;          /* Sign for velocity correction */
-
-/* Check inherited status. */
-   if( !astOK ) return 0;
-
-/* Initialise */
-   cvtFunc = NULL;
-   fcorr = NULL;
-   sign = 0;
-
-/* Set the return value to indicate that the supplied conversion code 
-   represents a change of rest-frame. */
-   result = 1;
-
-/* Initialise a structure which stores parameters which define the
-   transformation. */
-   def.obsalt = AST__BAD;
-   def.obslat = AST__BAD;
-   def.obslon = AST__BAD;
-   def.epoch = AST__BAD;
-   def.refdec = AST__BAD;
-   def.refra = AST__BAD;
-   def.veluser = AST__BAD;
-   def.last = AST__BAD;
-   def.amprms[ 0 ] = AST__BAD;
-   def.vuser[ 0 ] = AST__BAD;
-   def.dvh[ 0 ] = AST__BAD;
-   def.dvb[ 0 ] = AST__BAD;
-
-/* Test for each rest-frame code value in turn and assign the appropriate
-   values. */
-   switch ( cvt_code ) {
-
-   case AST__USF2HL:
-      cvtFunc = UserVel;
-      def.veluser = args[ 0 ];
-      def.refra = args[ 1 ];
-      def.refdec = args[ 2 ];
-      fcorr = args + 3;
-      sign = -1;
-      break;
-
-   case AST__HLF2US:
-      cvtFunc = UserVel;
-      def.veluser = args[ 0 ];
-      def.refra = args[ 1 ];
-      def.refdec = args[ 2 ];
-      fcorr = args + 3;
-      sign = +1;
-      break;
-
-   case AST__TPF2HL:
-      cvtFunc = TopoVel;
-      def.obslon = args[ 0 ];
-      def.obslat = args[ 1 ];
-      def.obsalt = args[ 2 ];
-      def.epoch = args[ 3 ];
-      def.refra = args[ 4 ];
-      def.refdec = args[ 5 ];
-      fcorr = args + 6;
-      sign = -1;
-      break;
-
-   case AST__HLF2TP:
-      cvtFunc = TopoVel;
-      def.obslon = args[ 0 ];
-      def.obslat = args[ 1 ];
-      def.obsalt = args[ 2 ];
-      def.epoch = args[ 3 ];
-      def.refra = args[ 4 ];
-      def.refdec = args[ 5 ];
-      fcorr = args + 6;
-      sign = +1;
-      break;
-
-   case AST__GEF2HL:
-      cvtFunc = GeoVel;
-      def.epoch = args[ 0 ];
-      def.refra = args[ 1 ];
-      def.refdec = args[ 2 ];
-      fcorr = args + 3;
-      sign = -1;
-      break;
-
-   case AST__HLF2GE:
-      cvtFunc = GeoVel;
-      def.epoch = args[ 0 ];
-      def.refra = args[ 1 ];
-      def.refdec = args[ 2 ];
-      fcorr = args + 3;
-      sign = +1;
-      break;
-
-   case AST__BYF2HL:
-      cvtFunc = BaryVel;
-      def.epoch = args[ 0 ];
-      def.refra = args[ 1 ];
-      def.refdec = args[ 2 ];
-      fcorr = args + 3;
-      sign = -1;
-      break;
-
-   case AST__HLF2BY:
-      cvtFunc = BaryVel;
-      def.epoch = args[ 0 ];
-      def.refra = args[ 1 ];
-      def.refdec = args[ 2 ];
-      fcorr = args + 3;
-      sign = +1;
-      break;
-
-   case AST__LKF2HL:
-      cvtFunc = LsrkVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = -1;
-      break;
-
-   case AST__HLF2LK:
-      cvtFunc = LsrkVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = +1;
-      break;
-
-   case AST__LDF2HL:
-      cvtFunc = LsrdVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = -1;
-      break;
-
-   case AST__HLF2LD:
-      cvtFunc = LsrdVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = +1;
-      break;
-
-   case AST__LGF2HL:
-      cvtFunc = LgVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = -1;
-      break;
-
-   case AST__HLF2LG:
-      cvtFunc = LgVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = +1;
-      break;
-
-   case AST__GLF2HL:
-      cvtFunc = GalVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = -1;
-      break;
-
-   case AST__HLF2GL:
-      cvtFunc = GalVel;
-      def.refra = args[ 0 ];
-      def.refdec = args[ 1 ];
-      fcorr = args + 2;
-      sign = +1;
-      break;
-
-/* If the supplied code does not represent a change of rest-frame, clear
-   the returned flag. */
-   default:
-      result = 0;      
-   }
-
-/* Check we have a rest-frame code. */
-   if( result ) {
-
-/* First deal with cases where we have a single source position (given by
-   refra and refdec). */
-      if( !ra ) {
-
-/* If the frequency correction factor has not been found, find it now. */
-         if( *fcorr == AST__BAD ) {
-
-/* Get the velocity correction. This is the component of the velocity of the 
-   output system, away from the source, as measured in the input system. */
-            s = sign*cvtFunc( def.refra, def.refdec, &def, status );
-
-/* Find the factor by which to correct supplied frequencies. If the
-   velocity correction is positive, the output frequency wil be lower than
-   the input frequency. */
-            if( s < AST__C && s > -AST__C ) {
-               *fcorr = sqrt( ( AST__C - s )/( AST__C + s ) );    
-            }
-         }
-
-/* Correct each supplied frequency. */
-         if( *fcorr != AST__BAD && *fcorr != 0.0 ) {
-            factor = forward ? *fcorr : 1.0 / ( *fcorr );
-            pf = freq;
-            for( i = 0; i < np; i++, pf++ ) {
-               if( *pf != AST__BAD ) *pf *= factor;
-            }
-
-/* Set returned values bad if the velocity correction is un-physical. */
-         } else {
-            pf = freq;
-            for( i = 0; i < np; i++ ) *(pf++) = AST__BAD;
-         }
-
-/* Now deal with cases where each frequency value has its own source
-   position. */
-      } else {
-
-/* Invert the sign if we are doing a inverse transformation. */
-         if( !forward ) sign = -sign;
-
-/* Loop round each value. */
-         pf = freq;
-         pra = ra;
-         pdec = dec;
-         for( i = 0; i < np; i++ ) {
-
-/* If the ra or dec is bad, store a bad frequency. */
-            if( *pra == AST__BAD || *pdec == AST__BAD || *pf == AST__BAD ) {
-               *pf = AST__BAD;
-
-/* Otherwise, produce a corrected frequency. */
-            } else {
-
-/* Get the velocity correction. */
-               s = sign*cvtFunc( *pra, *pdec, &def, status );
-
-/* Correct this frequency, if possible. Otherwise set bad. */
-               if( s < AST__C && s > -AST__C ) {
-                  *pf *= sqrt( ( AST__C - s )/( AST__C + s ) );
-               } else {
-                  *pf = AST__BAD;
-               }
-            }
-
-/* Move on to the next position. */
-            pf++;
-            pra++;
-            pdec++;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GalVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     GalVel
-
-*  Purpose:
-*     Find the velocity of the galactic centre away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double GalVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the galactic
-*     centre away from a specified source position, in the frame of rest 
-*     of the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   double s1, s2;          
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the component away from the source, of the velocity of the sun
-   relative to the dynamic LSR (in km/s). */
-   s1 = (double) palSlaRvlsrd( (float) ra, (float) dec );
-
-/* Get the component away from the source, of the velocity of the
-   dynamic LSR relative to the galactic centre (in km/s). */
-   s2 = (double) palSlaRvgalc( (float) ra, (float) dec );
-
-/* Return the total velocity of the galactic centre away from the source,
-   relative to the sun, in m/s. */
-   return -1000.0*( s1 + s2 );
-}
-
-static double GeoVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     GeoVel
-
-*  Purpose:
-*     Find the velocity of the earth away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double GeoVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the earth away 
-*     from a specified source position, at a given epoch, in the frame of
-*     rest of the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   double dpb[ 3 ];          /* Barycentric earth position vector */
-   double dph[ 3 ];          /* Heliocentric earth position vector */
-   double dvb[ 3 ];          /* Barycentric earth velocity vector */
-   double v[ 3 ];            /* Source direction vector */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the Cartesian vector towards the source, in the Cartesian FK5
-   J2000 system. */
-   palSlaDcs2c( ra, dec, v );
-
-/* If not already done so, get the Earth/Sun velocity and position vectors in 
-   the same system. Speed is returned in units of AU/s. Store in the supplied 
-   frame definition structure. */
-   if( def->dvh[ 0 ] == AST__BAD ) palSlaEvp( def->epoch, 2000.0, dvb, dpb,
-                                           def->dvh, dph );
-  
-/* Return the component away from the source, of the velocity of the earths
-   centre relative to the sun (in m/s). */
-   return -palSlaDvdv( v, def->dvh )*149.597870E9;
-}
-
-void astInitSpecMapVtab_(  AstSpecMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSpecMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SpecMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     void astInitSpecMapVtab( AstSpecMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SpecMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SpecMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASpecMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->SpecAdd = SpecAdd;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_rate = mapping->Rate;
-   mapping->Rate = Rate;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "SpecMap",
-               "Conversion between spectral coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static double LgVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     LgVel
-
-*  Purpose:
-*     Find the velocity of the Local Group away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double LgVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the Local Group velocity away 
-*     from a specified source position, in the frame of rest of the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Return the component away from the source, of the velocity of the
-   local group relative to the sun (in m/s). */
-   return -1000.0*palSlaRvlg( (float) ra, (float) dec );
-}
-
-static double LsrdVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     LsrdVel
-
-*  Purpose:
-*     Find the velocity of the Dynamical LSR away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double LsrdVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the Dynamical 
-*     LSR away from a specified source position, in the frame of rest of 
-*     the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the component away from the source, of the velocity of the sun
-   relative to the dynamical LSR (in m/s). This can also be thought of as the 
-   velocity of the LSR towards the source relative to the sun. Return the
-   negated value (i.e. velocity of lsrd *away from* the source. */
-   return -1000.0*palSlaRvlsrd( (float) ra, (float) dec );
-}
-
-static double LsrkVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     LsrkVel
-
-*  Purpose:
-*     Find the velocity of the Kinematic LSR away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double LsrkVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the Kinematic
-*     LSR away from a specified source position, in the frame of rest of 
-*     the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the component away from the source, of the velocity of the sun
-   relative to the kinematic LSR (in m/s). This can also be thought of as the 
-   velocity of the LSR towards the source relative to the sun. Return the
-   negated value (i.e. velocity of lsrk *away from* the source. */
-   return -1000.0*palSlaRvlsrk( (float) ra, (float) dec );
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a SpecMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     SpecMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated SpecMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated SpecMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated SpecMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the SpecMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        SpecMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated SpecMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   AstSpecMap *specmap;            /* Pointer to SpecMap */
-   const char *argdesc[ MAX_ARGS ]; /* Argument descriptions (junk) */
-   const char *class;            /* Pointer to Mapping class string */
-   const char *comment;          /* Pointer to comment string (junk) */
-   double (*cvtargs)[ MAX_ARGS ]; /* Pointer to argument arrays */
-   double tmp;                   /* Temporary storage */
-   int *cvttype;                 /* Pointer to transformation type codes */
-   int *szarg;                   /* Pointer to argument count array */
-   int argdec;                   /* Index of DEC argument */
-   int argra;                    /* Index of RA argument */
-   int done;                     /* Finished (no further simplification)? */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt1;                    /* Loop initial value */
-   int icvt2;                    /* Loop final value */
-   int icvt;                     /* Loop counter for transformation steps */
-   int ikeep;                    /* Index to store step being kept */
-   int imap1;                    /* Index of first SpecMap to merge */
-   int imap2;                    /* Index of last SpecMap to merge */
-   int imap;                     /* Loop counter for Mappings */
-   int inc;                      /* Increment for transformation step loop */
-   int invert;                   /* SpecMap applied in inverse direction? */
-   int istep;                    /* Loop counter for transformation steps */
-   int keep;                     /* Keep transformation step? */
-   int narg;                     /* Number of user-supplied arguments */
-   int ngone;                    /* Number of Mappings eliminated */
-   int nin;                      /* Numbr of axes for SpecMaps being merged */
-   int nstep0;                   /* Original number of transformation steps */
-   int nstep;                    /* Total number of transformation steps */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Simplification possible? */
-   int unit;                     /* Replacement Mapping is a UnitMap? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* SpecMaps can only be merged if they are in series (or if there is
-   only one Mapping present, in which case it makes no difference), so
-   do nothing if they are not. */
-   if ( series || ( *nmap == 1 ) ) {
-
-/* Save the number of inputs for the SpecMap. */
-      nin = astGetNin( this );
-
-/* Initialise the number of transformation steps to be merged to equal
-   the number in the nominated SpecMap. */
-      nstep = ( (AstSpecMap *) ( *map_list )[ where ] )->ncvt;
-
-/* Search adjacent lower-numbered Mappings until one is found which is
-   not a SpecMap, or is a SpecMap with a different number of axes. Accumulate 
-   the number of transformation steps involved in any SpecMaps found. */
-      imap1 = where;
-      while ( ( imap1 - 1 >= 0 ) && astOK ) {
-         class = astGetClass( ( *map_list )[ imap1 - 1 ] );
-         if ( !astOK || strcmp( class, "SpecMap" ) || 
-              astGetNin( ( *map_list )[ imap1 - 1 ] ) != nin ) break;
-         nstep += ( (AstSpecMap *) ( *map_list )[ imap1 - 1 ] )->ncvt;
-         imap1--;
-      }
-
-/* Similarly search adjacent higher-numbered Mappings. */
-      imap2 = where;
-      while ( ( imap2 + 1 < *nmap ) && astOK ) {
-         class = astGetClass( ( *map_list )[ imap2 + 1 ] );
-         if ( !astOK || strcmp( class, "SpecMap" ) ||
-              astGetNin( ( *map_list )[ imap2 + 1 ] ) != nin ) break;
-         nstep += ( (AstSpecMap *) ( *map_list )[ imap2 + 1 ] )->ncvt;
-         imap2++;
-      }
-
-/* Remember the initial number of transformation steps. */
-      nstep0 = nstep;
-
-/* Allocate memory for accumulating a list of all the transformation
-   steps involved in all the SpecMaps found. */
-      cvttype = astMalloc( sizeof( int ) * (size_t) nstep );
-      cvtargs = astMalloc( sizeof( double[ MAX_ARGS ] ) * (size_t) nstep );
-      szarg = astMalloc( sizeof( int ) * (size_t) nstep );
-
-/* Loop to obtain the transformation data for each SpecMap being merged. */
-      nstep = 0;
-      for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-
-/* Obtain a pointer to the SpecMap and note if it is being applied in
-   its inverse direction. */
-         specmap = (AstSpecMap *) ( *map_list )[ imap ];
-         invert = ( *invert_list )[ imap ];
-
-/* Set up loop limits and an increment to scan the transformation
-   steps in each SpecMap in either the forward or reverse direction, as
-   dictated by the associated "invert" value. */
-         icvt1 = invert ? specmap->ncvt - 1 : 0;
-         icvt2 = invert ? -1 : specmap->ncvt;
-         inc = invert ? -1 : 1;
-
-/* Loop through each transformation step in the SpecMap. */
-         for ( icvt = icvt1; icvt != icvt2; icvt += inc ) {
-
-/* Store the transformation type code and use "CvtString" to determine
-   the associated number of arguments. Then store these arguments. */
-            cvttype[ nstep ] = specmap->cvttype[ icvt ];
-            (void) CvtString( cvttype[ nstep ], &comment, &argra, &argdec, 
-                              &narg, szarg + nstep, argdesc, status );
-            if ( !astOK ) break;
-            for ( iarg = 0; iarg < szarg[ nstep ]; iarg++ ) {
-               cvtargs[ nstep ][ iarg ] = specmap->cvtargs[ icvt ][ iarg ];
-            }
-
-/* If the SpecMap is inverted, we must not only accumulate its
-   transformation steps in reverse, but also apply them in
-   reverse. For some steps this means changing arguments, for some it
-   means changing the transformation type code to a complementary
-   value, and for others it means both.  Define macros to perform each
-   of the required changes. */
-
-/* Macro to exchange a transformation type code for its inverse (and
-   vice versa). */
-#define SWAP_CODES( code1, code2 ) \
-            if ( cvttype[ nstep ] == code1 ) { \
-               cvttype[ nstep ] = code2; \
-            } else if ( cvttype[ nstep ] == code2 ) { \
-               cvttype[ nstep ] = code1; \
-            }
-
-/* Macro to exchange a transformation type code for its inverse (and
-   vice versa), and reciprocate a specified argument. */
-#define SWAP_CODES2( code1, code2, jarg ) \
-            if ( cvttype[ nstep ] == code1 ) { \
-               cvttype[ nstep ] = code2; \
-               tmp = cvtargs[ nstep ][ jarg ]; \
-               if( tmp != AST__BAD && tmp != 0.0 ) { \
-                  cvtargs[ nstep ][ jarg ] = 1.0/tmp; \
-               } else { \
-                  cvtargs[ nstep ][ jarg ] = AST__BAD; \
-               } \
-            } else if ( cvttype[ nstep ] == code2 ) { \
-               cvttype[ nstep ] = code1; \
-               tmp = cvtargs[ nstep ][ jarg ]; \
-               if( tmp != AST__BAD && tmp != 0.0 ) { \
-                  cvtargs[ nstep ][ jarg ] = 1.0/tmp; \
-               } else { \
-                  cvtargs[ nstep ][ jarg ] = AST__BAD; \
-               } \
-            }
-
-/* Macro to exchange a transformation type code for its inverse (and
-   vice versa), and negate a specified argument. */
-#define SWAP_CODES3( code1, code2, jarg ) \
-            if ( cvttype[ nstep ] == code1 ) { \
-               cvttype[ nstep ] = code2; \
-               tmp = cvtargs[ nstep ][ jarg ]; \
-               if( tmp != AST__BAD ) { \
-                  cvtargs[ nstep ][ jarg ] = -tmp; \
-               } \
-            } else if ( cvttype[ nstep ] == code2 ) { \
-               cvttype[ nstep ] = code1; \
-               tmp = cvtargs[ nstep ][ jarg ]; \
-               if( tmp != AST__BAD ) { \
-                  cvtargs[ nstep ][ jarg ] = -tmp; \
-               } \
-            }
-
-/* Use these macros to apply the changes where needed. */
-            if ( invert ) {
-
-/* Exchange transformation codes for their inverses. */
-               SWAP_CODES( AST__FRTOVL, AST__VLTOFR )
-               SWAP_CODES( AST__ENTOFR, AST__FRTOEN ) 
-               SWAP_CODES( AST__WNTOFR, AST__FRTOWN ) 
-               SWAP_CODES( AST__WVTOFR, AST__FRTOWV ) 
-               SWAP_CODES( AST__AWTOFR, AST__FRTOAW ) 
-               SWAP_CODES( AST__VRTOVL, AST__VLTOVR ) 
-               SWAP_CODES( AST__VOTOVL, AST__VLTOVO ) 
-               SWAP_CODES( AST__ZOTOVL, AST__VLTOZO ) 
-               SWAP_CODES( AST__BTTOVL, AST__VLTOBT ) 
-
-/* Exchange transformation codes for their inverses, and reciprocate the
-   frequency correction factor. */
-               SWAP_CODES2( AST__TPF2HL, AST__HLF2TP, 6 ) 
-               SWAP_CODES2( AST__USF2HL, AST__HLF2US, 3 ) 
-               SWAP_CODES2( AST__GEF2HL, AST__HLF2GE, 3 ) 
-               SWAP_CODES2( AST__BYF2HL, AST__HLF2BY, 3 ) 
-               SWAP_CODES2( AST__LKF2HL, AST__HLF2LK, 2 ) 
-               SWAP_CODES2( AST__LDF2HL, AST__HLF2LD, 2 ) 
-               SWAP_CODES2( AST__LGF2HL, AST__HLF2LG, 2 ) 
-               SWAP_CODES2( AST__GLF2HL, AST__HLF2GL, 2 ) 
-
-            }
-
-/* Undefine the local macros. */
-#undef SWAP_CODES
-#undef SWAP_CODES2
-#undef SWAP_CODES3
-
-/* Count the transformation steps. */
-            nstep++;
-         }
-      }
-
-/* Loop to simplify the sequence of transformation steps until no
-   further improvement is possible. */
-      done = 0;
-      while ( astOK && !done ) {
-
-/* Examine each remaining transformation step in turn.  */
-         ikeep = -1;
-         for ( istep = 0; istep < nstep; istep++ ) {
-
-/* Initially assume we will retain the current step. */
-            keep = 1;
-
-/* The only simplifications for the conversions currently in this class act 
-   to combine adjacent transformation steps, so only apply them while there 
-   are at least 2 steps left. */
-            if ( istep < ( nstep - 1 ) ) {
-
-/* Define a macro to test if two adjacent transformation type codes
-   have specified values. */
-#define PAIR_CVT( code1, code2 ) \
-               ( ( cvttype[ istep ] == code1 ) && \
-                 ( cvttype[ istep + 1 ] == code2 ) )
-
-/* Define a macro to test if two adjacent transformation type codes
-   have specified values, either way round. */
-#define PAIR_CVT2( code1, code2 ) \
-               ( ( PAIR_CVT( code1, code2 ) ) || \
-                 ( PAIR_CVT( code2, code1 ) ) )
-
-/* If a correction is followed by its inverse, and the user-supplied argument 
-   values are unchanged (we do not need to test values stored in the
-   argument array which were not supplied by the user), we can eliminate them. 
-   First check for conversions which have no user-supplied arguments. */
-               if ( PAIR_CVT2( AST__ENTOFR, AST__FRTOEN ) ||
-                    PAIR_CVT2( AST__WNTOFR, AST__FRTOWN ) ||
-                    PAIR_CVT2( AST__WVTOFR, AST__FRTOWV ) ||     
-                    PAIR_CVT2( AST__AWTOFR, AST__FRTOAW ) ||
-                    PAIR_CVT2( AST__VRTOVL, AST__VLTOVR ) ||
-                    PAIR_CVT2( AST__VOTOVL, AST__VLTOVO ) ||
-                    PAIR_CVT2( AST__ZOTOVL, AST__VLTOZO ) ||
-                    PAIR_CVT2( AST__BTTOVL, AST__VLTOBT ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have a single user-supplied argument. */
-               } else if( PAIR_CVT2( AST__FRTOVL, AST__VLTOFR ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have two user-supplied arguments. */
-               } else if( ( PAIR_CVT2( AST__LKF2HL, AST__HLF2LK ) || 
-                            PAIR_CVT2( AST__LDF2HL, AST__HLF2LD ) || 
-                            PAIR_CVT2( AST__LGF2HL, AST__HLF2LG ) || 
-                            PAIR_CVT2( AST__GLF2HL, AST__HLF2GL ) ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 1 ], 
-                                 cvtargs[ istep + 1 ][ 1 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have three user-supplied arguments. */
-               } else if( ( PAIR_CVT2( AST__GEF2HL, AST__HLF2GE ) || 
-                            PAIR_CVT2( AST__BYF2HL, AST__HLF2BY ) ||
-                            PAIR_CVT2( AST__USF2HL, AST__HLF2US ) ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 1 ], 
-                                 cvtargs[ istep + 1 ][ 1 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 2 ], 
-                                 cvtargs[ istep + 1 ][ 2 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have six user-supplied arguments (currently
-   no conversions have four or five user-supplied arguments). */
-               } else if( ( PAIR_CVT2( AST__TPF2HL, AST__HLF2TP ) ) && 
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 1 ], 
-                                 cvtargs[ istep + 1 ][ 1 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 2 ], 
-                                 cvtargs[ istep + 1 ][ 2 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 3 ], 
-                                 cvtargs[ istep + 1 ][ 3 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 4 ], 
-                                 cvtargs[ istep + 1 ][ 4 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 5 ], 
-                                 cvtargs[ istep + 1 ][ 5 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-               }
-
-/* Undefine the local macros. */
-#undef PAIR_CVT
-#undef PAIR_CVT2
-            }
-
-/* If the current transformation (possibly modified above) is being
-   kept, then increment the index that identifies its new location in
-   the list of transformation steps. */
-            if ( keep ) {
-               ikeep++;
-
-/* If the new location is different to its current location, copy the
-   transformation data into the new location. */
-               if ( ikeep != istep ) {
-                  cvttype[ ikeep ] = cvttype[ istep ];
-                  for ( iarg = 0; iarg < szarg[ istep ]; iarg++ ) {
-                     cvtargs[ ikeep ][ iarg ] = cvtargs[ istep ][ iarg ];
-                  }
-                  szarg[ ikeep ] = szarg[ istep ];
-               }
-            }
-         }
-
-/* Note if no simplification was achieved on this iteration (i.e. the
-   number of transformation steps was not reduced). This is the signal
-   to quit. */
-         done = ( ( ikeep + 1 ) >= nstep );
-
-/* Note how many transformation steps now remain. */
-         nstep = ikeep + 1;
-      }
-
-/* Determine how many Mappings can be eliminated by condensing all
-   those considered above into a single Mapping. */
-      if ( astOK ) {
-         ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap (a null
-   Mapping). This will only be the case if all the transformation
-   steps were eliminated above. */
-         unit = ( nstep == 0 );
-
-/* Determine if simplification is possible. This will be the case if
-   (a) Mappings were eliminated ("ngone" is non-zero), or (b) the
-   number of transformation steps was reduced, or (c) the SpecMap(s)
-   can be replaced by a UnitMap, or (d) if there was initially only
-   one SpecMap present, its invert flag was set (this flag will always
-   be cleared in the replacement Mapping). */
-         simpler = ngone || ( nstep < nstep0 ) || unit ||
-                   ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
-         if ( simpler ) {
-
-/* If the replacement Mapping is a UnitMap, then create it. */
-            if ( unit ) {
-               new = (AstMapping *)
-                        astUnitMap( astGetNin( ( *map_list )[ where ] ), "", status );
-
-/* Otherwise, create a replacement SpecMap and add each of the
-   remaining transformation steps to it. */
-            } else {
-               new = (AstMapping *) astSpecMap( nin, 0, "", status );
-               for ( istep = 0; istep < nstep; istep++ ) {
-                  AddSpecCvt( (AstSpecMap *) new, cvttype[ istep ],
-                             cvtargs[ istep ], status );
-               }
-            }
-
-/* Annul the pointers to the Mappings being eliminated. */
-            if ( astOK ) {
-               for ( imap = imap1; imap <= imap2; imap++ ) {
-                  ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
-               }
-
-/* Insert the pointer and invert value for the new Mapping. */
-               ( *map_list )[ imap1 ] = new;
-               ( *invert_list )[ imap1 ] = 0;
-
-/* Move any subsequent Mapping information down to close the gap. */
-               for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
-                  ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
-               }
-
-/* Blank out any information remaining at the end of the arrays. */
-               for ( imap = ( *nmap - ngone ); imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap ] = NULL;
-                  ( *invert_list )[ imap ] = 0;
-               }
-
-/* Decrement the Mapping count and return the index of the first
-   Mapping which was eliminated. */
-               ( *nmap ) -= ngone;
-               result = imap1;
-
-/* If an error occurred, annul the new Mapping pointer. */
-            } else {
-               new = astAnnul( new );
-            }
-         }
-      }
-
-/* Free the memory used for the transformation steps. */
-      cvttype = astFree( cvttype );
-      cvtargs = astFree( cvtargs );
-      szarg = astFree( szarg );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     SpecMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*  Implementation Deficiencies:
-*     The initial version of this implementation only deals with
-*     frequency->wavelength conversions. This is because the slowness of
-*     the numerical differentiation implemented by the astRate method in 
-*     the parent Mapping class is cripples conversion between SpecFluxFrames.
-*     Such conversions only rely on rate of change of wavelength with
-*     respect to frequency. This implementation should be extended when
-*     needed.
-
-*/
-
-/* Local Variables: */
-   AstSpecMap *map;
-   double result;
-   int cvt;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the SpecMap structure. */
-   map = (AstSpecMap *) this;
-
-/* Return 1.0 if the SpecMap has no conversions. */
-   if( map->ncvt == 0 ) return 1.0;
-
-/* Store the type of the first conversion.*/
-   cvt = map->cvttype[ 0 ];
-
-/* If this is a 3D SpecMap or if it has more than one component, or if
-   that conversion is not between frequency and wavelength, use the
-   astRate method inherited form the parent Mapping class. */
-   if( astGetNin( map ) != 1 || map->ncvt != 1 || 
-       ( cvt != AST__WVTOFR && cvt != AST__FRTOWV ) ) {
-      result = (*parent_rate)( this, at, ax1, ax2, status );
-
-/* Otherwise, evaluate the known analytical expressions for the rate of
-   change of frequency with respect to wavelength or wavelength with
-   respect to frequency. */
-   } else {
-      result = ( *at != AST__BAD ) ? -AST__C/((*at)*(*at)) : AST__BAD;
-   } 
-
-/* Return the result. */
-   return result;
-}
-
-static double Refrac( double wavelen, int *status ){
-/*
-*  Name:
-*     Refrac
-
-*  Purpose:
-*     Returns the refractive index of dry air at a given wavelength.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double Refrac( double wavelen, int *status )
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function returns the refractive index of dry air at standard
-*     temperature and pressure, at a given wavelength. The formula is
-*     taken from the paper "Representation of Spectral Coordinates in FITS"
-*     (Greisen et al).
-
-*  Parameters:
-*     wavelen
-*        The wavelength, in metres. This should be the air wavelength,
-*        but supplying the vacuum wavelength will make no significant
-*        difference.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The refractive index. A value of 1.0 is returned if an error
-*     occurs, or has already occurred.
-
-*/
-
-/* Local Variables: */
-   double w2;                /* Wavenumber squared */
-
-/* Check the global error status. */
-   if ( !astOK || wavelen == 0.0 ) return 1.0;
-
-/* Find the squared wave number in units of "(per um)**2". */
-   w2 = 1.0E-12/( wavelen * wavelen );
-
-/* Apply the rest of the algorithm as described in the FITS WCS 
-   paper III. */
-   return 1.0 + 1.0E-6*( 287.6155 + 1.62887*w2 + 0.01360*w2*w2 );
-}
-
-static double Rverot( double phi, double h, double ra, double da, 
-                      double st, int *status ) {
-/*
-*  Name:
-*     Rverot
-
-*  Purpose:
-*     Find the velocity component in a given direction due to Earth rotation. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double Rverot( double phi, double h, double ra, double da, 
-*                    double st, int *status )
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function is like slaRverot, except that it takes account of the
-*     observers height (h), and does all calculations in double precision.
-
-*  Parameters:
-*     phi
-*        The geodetic latitude of the observer (radians, IAU 1976).
-*     h
-*        The geodetic height above the reference spheroid of the observer 
-*        (metres, IAU 1976).
-*     ra 
-*        The geocentric apparent RA (rads) of the source.
-*     da
-*        The geocentric apparent Dec (rads) of the source.
-*     st
-*        The local apparent sidereal time (radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the Earth rotation in direction [RA,DA] (km/s).
-*     The result is positive when the observer is receding from the
-*     given point on the sky. Zero is returned if an error has already 
-*     occurred.
-
-*/
-
-/* Local Variables: */
-   double pv[ 6 ];           /* Observer position and velocity */
-   double v[ 3 ];            /* Source direction vector */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the Cartesian coordinates of the unit vector pointing towards the
-   given sky position. */
-   palSlaDcs2c( ra, da, v );
-
-/* Get velocity and position of the observer. */
-   palSlaPvobs( phi, h, st, pv );
-
-/* Return the component of the observer's velocity away from the sky
-   position, and convert from AU/s to km/s. */
-   return -palSlaDvdv( v, pv + 3 )*149.597870E6;
-}
-
-static void SpecAdd( AstSpecMap *this, const char *cvt, const double args[], int *status ) {
-/*
-*++
-*  Name:
-c     astSpecAdd
-f     AST_SPECADD
-
-*  Purpose:
-*     Add a spectral coordinate conversion to a SpecMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "specmap.h"
-c     void astSpecAdd( AstSpecMap *this, const char *cvt, const double args[] )
-f     CALL AST_SPECADD( THIS, CVT, ARGS, STATUS )
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-c     This function adds one of the standard spectral coordinate
-f     This routine adds one of the standard spectral coordinate
-*     system conversions listed below to an existing SpecMap.
-*
-c     When a SpecMap is first created (using astSpecMap), it simply
-f     When a SpecMap is first created (using AST_SPECMAP), it simply
-c     performs a unit (null) Mapping. By using astSpecAdd (repeatedly
-f     performs a unit (null) Mapping. By using AST_SPECADD (repeatedly
-*     if necessary), one or more coordinate conversion steps may then
-*     be added, which the SpecMap will perform in sequence. This allows
-*     multi-step conversions between a variety of spectral coordinate
-*     systems to be assembled out of the building blocks provided by
-*     this class.
-*
-*     Normally, if a SpecMap's Invert attribute is zero (the default),
-*     then its forward transformation is performed by carrying out
-*     each of the individual coordinate conversions specified by
-c     astSpecAdd in the order given (i.e. with the most recently added
-f     AST_SPECADD in the order given (i.e. with the most recently added
-*     conversion applied last).
-*
-*     This order is reversed if the SpecMap's Invert attribute is
-*     non-zero (or if the inverse transformation is requested by any
-*     other means) and each individual coordinate conversion is also
-*     replaced by its own inverse. This process inverts the overall
-*     effect of the SpecMap. In this case, the first conversion to be
-*     applied would be the inverse of the one most recently added.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the SpecMap.
-c     cvt
-f     CVT = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string which identifies the
-f        A character string which identifies the
-*        spectral coordinate conversion to be added to the
-*        SpecMap. See the "Available Conversions" section for details of
-*        those available.
-c     args
-f     ARGS( * ) = DOUBLE PRECISION (Given)
-*        An array containing argument values for the spectral
-*        coordinate conversion. The number of arguments required, and
-*        hence the number of array elements used, depends on the
-*        conversion specified (see the "Available Conversions"
-*        section). This array is ignored
-c        and a NULL pointer may be supplied
-*        if no arguments are needed.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - When assembling a multi-stage conversion, it can sometimes be
-*     difficult to determine the most economical conversion path. For
-*     example, when converting between reference frames, converting first 
-*     to the heliographic reference frame as an intermediate stage is often 
-*     sensible in formulating the problem, but may introduce unnecessary
-*     extra conversion steps. A solution to this is to include all the steps 
-*     which are (logically) necessary, but then to use 
-c     astSimplify to simplify the resulting
-f     AST_SIMPLIFY to simplify the resulting
-*     SpecMap. The simplification process will eliminate any steps
-*     which turn out not to be needed.
-c     - This function does not check to ensure that the sequence of
-f     - This routine does not check to ensure that the sequence of
-*     coordinate conversions added to a SpecMap is physically
-*     meaningful.
-
-*  Available Conversions:
-*     The following strings (which are case-insensitive) may be supplied
-c     via the "cvt" parameter to indicate which spectral coordinate
-f     via the CVT argument to indicate which spectral coordinate
-*     conversion is to be added to the SpecMap. Where arguments are needed by
-*     the conversion, they are listed in parentheses. Values for
-c     these arguments should be given, via the "args" array, in the
-f     these arguments should be given, via the ARGS array, in the
-*     order indicated. Units and argument names are described at the end of 
-*     the list of conversions.
-
-*     - "FRTOVL" (RF): Convert frequency to relativistic velocity.
-*     - "VLTOFR" (RF): Convert relativistic velocity to Frequency.
-*     - "ENTOFR": Convert energy to frequency.
-*     - "FRTOEN": Convert frequency to energy.
-*     - "WNTOFR": Convert wave number to frequency.
-*     - "FRTOWN": Convert frequency to wave number.
-*     - "WVTOFR": Convert wavelength (vacuum) to frequency.
-*     - "FRTOWV": Convert frequency to wavelength (vacuum).
-*     - "AWTOFR": Convert wavelength (air) to frequency.
-*     - "FRTOAW": Convert frequency to wavelength (air).
-*     - "VRTOVL": Convert radio to relativistic velocity.
-*     - "VLTOVR": Convert relativistic to radio velocity.
-*     - "VOTOVL": Convert optical to relativistic velocity.
-*     - "VLTOVO": Convert relativistic to optical velocity.
-*     - "ZOTOVL": Convert redshift to relativistic velocity.
-*     - "VLTOZO": Convert relativistic velocity to redshift.
-*     - "BTTOVL": Convert beta factor to relativistic velocity.
-*     - "VLTOBT": Convert relativistic velocity to beta factor.
-*     - "USF2HL" (VOFF,RA,DEC): Convert frequency from a user-defined 
-*     reference frame to heliocentric.
-*     - "HLF2US" (VOFF,RA,DEC): Convert frequency from heliocentric 
-*     reference frame to user-defined.
-*     - "TPF2HL" (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from 
-*     topocentric reference frame to heliocentric.
-*     - "HLF2TP" (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from 
-*     heliocentric reference frame to topocentric.
-*     - "GEF2HL" (EPOCH,RA,DEC): Convert frequency from geocentric 
-*     reference frame to heliocentric.
-*     - "HLF2GE" (EPOCH,RA,DEC): Convert frequency from 
-*     heliocentric reference frame to geocentric.
-*     - "BYF2HL" (EPOCH,RA,DEC): Convert frequency from 
-*     barycentric reference frame to heliocentric.
-*     - "HLF2BY" (EPOCH,RA,DEC): Convert frequency from 
-*     heliocentric reference frame to barycentric.
-*     - "LKF2HL" (RA,DEC): Convert frequency from kinematic LSR 
-*     reference frame to heliocentric.
-*     - "HLF2LK" (RA,DEC): Convert frequency from heliocentric 
-*     reference frame to kinematic LSR.
-*     - "LDF2HL" (RA,DEC): Convert frequency from dynamical LSR
-*     reference frame to heliocentric.
-*     - "HLF2LD" (RA,DEC): Convert frequency from heliocentric 
-*     reference frame to dynamical LSR.
-*     - "LGF2HL" (RA,DEC): Convert frequency from local group 
-*     reference frame to heliocentric.
-*     - "HLF2LG" (RA,DEC): Convert frequency from heliocentric 
-*     reference frame to local group.
-*     - "GLF2HL" (RA,DEC): Convert frequency from galactic 
-*     reference frame to heliocentric.
-*     - "HLF2GL" (RA,DEC): Convert frequency from heliocentric 
-*     reference frame to galactic.
-
-*     The units for the values processed by the above conversions are as
-*     follows: 
-*
-*     - all velocities: metres per second (positive if the source receeds from 
-*       the observer). 
-*     - frequency: Hertz.
-*     - all wavelengths: metres.
-*     - energy: Joules.
-*     - wave number: cycles per metre.
-*
-*     The arguments used in the above conversions are as follows:
-*
-*     - RF: Rest frequency (Hz).
-*     - OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-*     - OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-*     - OBSLON: Longitude of observer (radians - positive eastwards).
-*     - EPOCH: Epoch of observation (UT1 expressed as a Modified Julian Date).
-*     - RA: Right Ascension of source (radians, FK5 J2000).
-*     - DEC: Declination of source (radians, FK5 J2000).
-*     - VOFF: Velocity of the user-defined reference frame, towards the
-*     position given by RA and DEC, measured in the heliocentric
-*     reference frame.
-*
-*     If the SpecMap is 3-dimensional, source positions are provided by the 
-*     values supplied to inputs 2 and 3 of the SpecMap (which are simply 
-*     copied to outputs 2 and 3). Note, usable values are still required
-*     for the RA and DEC arguments in order to define the "user-defined" 
-*     reference frame used by USF2HL and HLF2US. However, AST__BAD can be 
-*     supplied for RA and DEC if the user-defined reference frame is not 
-*     required.
-*
-*--
-*/
-
-/* Local Variables: */
-   int cvttype;                  /* Conversion type code */
-
-/* Check the inherited status. */
-   if ( !astOK ) return;
-
-/* Validate the type string supplied and obtain the equivalent
-   conversion type code. */
-   cvttype = CvtCode( cvt, status );
-
-/* If the string was not recognised, then report an error. */
-   if ( astOK && ( cvttype == AST__SPEC_NULL ) ) {
-      astError( AST__SPCIN,
-                "%s(%s): Invalid SpecMap spectral coordinate "
-                "conversion type \"%s\".", status, "astAddSpec", astGetClass( this ), cvt );
-   }
-
-/* Add the new conversion to the SpecMap. */
-   AddSpecCvt( this, cvttype, args, status );
-}
-
-static int SystemChange( int cvt_code, int np, double *values, double *args, 
-                         int forward, int *status ){ 
-/*
-*  Name:
-*     SystemChange
-
-*  Purpose:
-*     Change values between two spectral systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     int SystemChange( int cvt_code, int np, double *values, double *args, 
-*                       int forward, int *status )
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function modifies the supplied values in order to change the
-*     spectral co-ordinate system (frequency, wavelength, etc) to which 
-*     they refer.
-
-*  Parameters:
-*     cvt_code
-*        A code indicating the conversion to be applied. If the code does
-*        not correspond to a change of system, then the supplied values
-*        are left unchanged and zero is returned as the function value.
-*     np
-*        The number of frequency values to transform.
-*     values
-*        Pointer to an array of "np" spectral values. These are modified on 
-*        return to hold the corresponding values measured in the output
-*        system.
-*     args
-*        Pointer to an array holding the conversion arguments. The number
-*        of arguments expected depends on the particular conversion being
-*        used.
-*     forward
-*        Should the conversion be applied in the forward or inverse
-*        direction? Non-zero for forward, zero for inverse.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the supplied conversion code corresponds to a change of
-*     system. Zero otherwise  (in which case the upplied values will not 
-*     have been changed).
-
-*/
-
-/* Local Variables: */
-   double *pv;        /* Pointer to next value */   
-   double d;          /* Intermediate value */
-   double f2;         /* Squared frequency */   
-   double temp;       /* Intermediate value */
-   int i;             /* Loop index */
-   int iter;          /* Iteration count */
-   int result;        /* Returned value */
-
-/* Check inherited status. */
-   if( !astOK ) return 0;
-
-/* Set the return value to indicate that the supplied conversion code 
-   represents a change of system. */
-   result = 1;
-
-/* Test for each code value in turn and assign the appropriate values. */
-   switch ( cvt_code ) {
-
-/* Frequency to relativistic velocity. */
-   case AST__FRTOVL:
-      if( forward ) {
-         if( args[ 0 ] != AST__BAD ) {
-            temp = args[ 0 ] * args[ 0 ];
-            pv = values - 1;
-            for( i = 0; i < np; i++ ){
-               pv++;
-               if( *pv != AST__BAD ) {
-                  f2 = ( *pv ) * ( *pv );
-                  d = temp + f2;
-                  if( d > 0.0 ) {
-                     *pv = AST__C*( ( temp - f2 )/d );
-                     if( astISNAN( *pv ) ) *pv = AST__BAD;
-                  } else {
-                     *pv = AST__BAD;
-                  }
-               }
-            }
-         } else {
-            pv = values;
-            for( i = 0; i < np; i++ ) *( pv++ ) = AST__BAD;
-         }
-      } else {
-         SystemChange( AST__VLTOFR, np, values, args, 1, status );
-      }
-      break;
-
-/* Relativistic velocity to frequency. */
-   case AST__VLTOFR:
-      if( forward ) {
-         if( args[ 0 ] != AST__BAD ) {
-            temp = args[ 0 ];
-            pv = values - 1;
-            for( i = 0; i < np; i++ ){
-               pv++;
-               if( *pv != AST__BAD ) {
-                  d = AST__C + ( *pv );
-                  if( d != 0.0 ) {
-                     d = ( AST__C - ( *pv ) )/d;
-                     if( d >= 0.0 ) {
-                        *pv = temp*sqrt( d );
-                        if( astISNAN( *pv ) ) *pv = AST__BAD;
-                     } else {
-                        *pv = AST__BAD;
-                     }
-                  } else {
-                     *pv = AST__BAD;
-                  }
-               }
-            }
-         } else {
-            pv = values;
-            for( i = 0; i < np; i++ ) *( pv++ ) = AST__BAD;
-         }
-      } else {
-         SystemChange( AST__FRTOVL, np, values, args, 1, status );
-      }
-      break;
-
-/* Energy to frequency */
-   case AST__ENTOFR:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               *pv /= AST__H;
-            }
-         }
-      } else {
-         SystemChange( AST__FRTOEN, np, values, args, 1, status );
-      }
-      break;
-
-/* Frequency to energy */
-   case AST__FRTOEN:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               *pv *= AST__H;
-            }
-         }
-      } else {
-         SystemChange( AST__ENTOFR, np, values, args, 1, status );
-      }
-      break;
-
-/* Wave number to frequency */
-   case AST__WNTOFR:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               *pv *= AST__C;
-            }
-         }
-      } else {
-         SystemChange( AST__FRTOWN, np, values, args, 1, status );
-      }
-      break;
-
-/* Wave number to frequency */
-   case AST__FRTOWN:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               *pv /= AST__C;
-            }
-         }
-      } else {
-         SystemChange( AST__WNTOFR, np, values, args, 1, status );
-      }
-      break;
-
-/* Wavelength to frequency */
-   case AST__WVTOFR:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD && *pv != 0.0 ) {
-               *pv = AST__C/( *pv );
-               if( astISNAN( *pv ) ) *pv = AST__BAD;
-            } else {
-               *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__FRTOWV, np, values, args, 1, status );
-      }
-      break;
-
-/* Frequency to wavelength. */
-   case AST__FRTOWV:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD && *pv != 0.0 ) {
-               *pv = AST__C/( *pv );
-               if( astISNAN( *pv ) ) *pv = AST__BAD;
-            } else {
-               *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__WVTOFR, np, values, args, 1, status );
-      }
-      break;
-
-/* Wavelength in air to frequency. */
-   case AST__AWTOFR:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD && *pv != 0.0 ) {
-               *pv = AST__C/( ( *pv )*Refrac( *pv, status ) );
-               if( astISNAN( *pv ) ) *pv = AST__BAD;
-            } else {
-               *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__FRTOAW, np, values, args, 1, status );
-      }
-      break;
-
-/* Frequency to wavelength in air. */
-   case AST__FRTOAW:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD && *pv != 0.0 ) {
-
-/* Form the vacuum wavelength. */
-               temp = AST__C/( *pv );
-
-/* The refractive index function "Refrac" requires the wavelength in air
-   as its parameter. Initially assume that the wavelength in air is equal
-   to the vacuum wavelength to get he first estimate of the wavelength in
-   air. Then use this estimate to get a better refractive index in order to
-   form a better estimate of the air wavelength, etc. Iterate in this way a
-   few times. */
-               *pv = temp;
-               for( iter = 0; iter < 3; iter++ ) {
-                  *pv = temp/Refrac( *pv, status );
-                  if( astISNAN( *pv ) ) {
-                     *pv = AST__BAD;
-                     break;
-                  }
-               }
-
-            } else {
-               *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__AWTOFR, np, values, args, 1, status );
-      }
-      break;
-
-/* Radio velocity to relativistic velocity */
-   case AST__VRTOVL:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               temp = 1.0 - ( *pv )/AST__C;
-               temp *= temp;
-               *pv = AST__C*( 1.0 - temp )/( 1.0 + temp );
-               if( astISNAN( *pv ) ) *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__VLTOVR, np, values, args, 1, status );
-      }
-      break;
-
-/* Relativistic velocity to radio velocity. */
-   case AST__VLTOVR:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               temp = AST__C + ( *pv );
-               if( temp != 0.0 ) {
-                  temp = (AST__C - *pv )/temp;
-                  if( temp >= 0.0 ) {
-                     *pv = AST__C*( 1.0 - sqrt( temp ) );
-                     if( astISNAN( *pv ) ) *pv = AST__BAD;
-                  } else {
-                     *pv = AST__BAD;
-                  }
-               } else {
-                  *pv = AST__BAD;
-               }
-            }
-         }
-      } else {
-         SystemChange( AST__VRTOVL, np, values, args, 1, status );
-      }
-      break;
-
-/* Optical velocity to relativistic velocity */
-   case AST__VOTOVL:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               temp = 1.0 + ( *pv )/AST__C;
-               temp *= temp;
-               *pv = AST__C*( temp - 1.0 )/( temp + 1.0 );
-               if( astISNAN( *pv ) ) *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__VLTOVO, np, values, args, 1, status );
-      }
-      break;
-
-/* Relativistic velocity to optical velocity. */
-   case AST__VLTOVO:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               temp = AST__C - *pv;
-               if( temp != 0.0 ) {
-                  temp = (AST__C + *pv )/temp;
-                  if( temp >= 0.0 ) {
-                     *pv = AST__C*( sqrt( temp ) - 1.0 );
-                     if( astISNAN( *pv ) ) *pv = AST__BAD;
-                  } else {
-                     *pv = AST__BAD;
-                  }
-               } else {
-                  *pv = AST__BAD;
-               }
-            }
-         }
-      } else {
-         SystemChange( AST__VOTOVL, np, values, args, 1, status );
-      }
-      break;
-
-/* Redshift to relativistic velocity */
-   case AST__ZOTOVL:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               temp = 1.0 + ( *pv );
-               temp *= temp;
-               *pv = AST__C*( temp - 1.0 )/( temp + 1.0 );
-               if( astISNAN( *pv ) ) *pv = AST__BAD;
-            }
-         }
-      } else {
-         SystemChange( AST__VLTOZO, np, values, args, 1, status );
-      }
-      break;
-
-/* Relativistic velocity to redshift. */
-   case AST__VLTOZO:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               temp = AST__C - *pv;
-               if( temp != 0.0 ) {
-                  temp = (AST__C + *pv )/temp;
-                  if( temp >= 0.0 ) {
-                     *pv = sqrt( temp ) - 1.0;
-                     if( astISNAN( *pv ) ) *pv = AST__BAD;
-                  } else {
-                     *pv = AST__BAD;
-                  }
-               } else {
-                  *pv = AST__BAD;
-               }
-            }
-         }
-      } else {
-         SystemChange( AST__ZOTOVL, np, values, args, 1, status );
-      }
-      break;
-
-/* Beta factor to relativistic velocity */
-   case AST__BTTOVL:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               *pv *= AST__C;
-            }
-         }
-      } else {
-         SystemChange( AST__VLTOBT, np, values, args, 1, status );
-      }
-      break;
-
-/* Relativistic velocity to beta factor. */
-   case AST__VLTOBT:
-      if( forward ) {
-         pv = values - 1;
-         for( i = 0; i < np; i++ ) {
-            pv++;
-            if( *pv != AST__BAD ) {
-               *pv /= AST__C;
-            }
-         }
-      } else {
-         SystemChange( AST__BTTOVL, np, values, args, 1, status );
-      }
-      break;
-
-/* If the supplied code does not represent a change of system, clear
-   the returned flag. */
-   default:
-      result = 0;      
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double TopoVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     TopoVel
-
-*  Purpose:
-*     Find the velocity of the observer away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double TopoVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the observer away 
-*     from a specified source position, at a given epoch, in the frame of
-*     rest of the Sun.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*/
-
-/* Local Variables: */
-   double deca;              /* Apparent DEC */
-   double raa;               /* Apparent RA */
-   double vobs;              /* Velocity of observer relative to earth */
-   double vearth;            /* Velocity of earth realtive to sun */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* If not already done so, get the parameters defining the transformation
-   of mean ra and dec to apparent ra and dec, and store in the supplied frame 
-   definition structure. */
-   if( def->amprms[ 0 ] == AST__BAD ) palSlaMappa( 2000.0, def->epoch, 
-                                                def->amprms );
-
-/* Convert the source position from mean ra and dec to apparent ra and dec. */
-   palSlaMapqkz( ra, dec, def->amprms, &raa, &deca );
-
-/* If not already done so, get the local apparent siderial time (in radians)
-   and store in the supplied frame definition structure. */
-   if( def->last == AST__BAD ) def->last = palSlaGmst( def->epoch ) + 
-                                           palSlaEqeqx( def->epoch ) +
-                                           def->obslon;
-
-/* Get the component away from the source, of the velocity of the observer 
-   relative to the centre of the earth (in m/s). */
-   vobs = 1000.0*Rverot( def->obslat, def->obsalt, raa, deca, def->last,
-                         status );
-
-/* Get the component away from the source, of the velocity of the earth's 
-   centre relative to the Sun, in m/s. */
-   vearth = GeoVel( ra, dec, def, status );
-
-/* Return the total velocity of the observer away from the source in the
-   frame of the sun. */
-   return vobs + vearth;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a SpecMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     SpecMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a SpecMap and a set of points encapsulated
-*     in a PointSet and transforms the points so as to perform the
-*     sequence of spectral coordinate conversions specified by
-*     previous invocations of astSpecAdd.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the SpecMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstSpecMap *map;              /* Pointer to SpecMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *spec;                 /* Pointer to output spectral axis value array */
-   double *alpha;                /* Pointer to output RA axis value array */
-   double *beta;                 /* Pointer to output DEC axis value array */
-   int cvt;                      /* Loop counter for conversions */
-   int end;                      /* Termination index for conversion loop */
-   int inc;                      /* Increment for conversion loop */
-   int map3d;                    /* Is the SpecMap 3-dimensional? */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int npoint;                   /* Number of points */
-   int start;                    /* Starting index for conversion loop */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SpecMap. */
-   map = (AstSpecMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   coordinate conversions needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord_in = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
-   to the direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( this ) ) forward = !forward;
-
-/* Transform the coordinate values. */
-/* -------------------------------- */
-/* Use "spec" as a synonym for the array of spectral axis values stored in 
-   the output PointSet. */
-   if ( astOK ) {
-      spec = ptr_out[ 0 ];
-
-/* If this is a 3D SpecMap use "alpha" as a synonym for the array of RA axis 
-   values and "beta" as a synonym for the array of DEC axis values stored 
-   in the output PointSet. */
-      map3d = ( ncoord_in == 3 );
-      if( map3d ) {
-         alpha = ptr_out[ 1 ];
-         beta = ptr_out[ 2 ];
-      } else {
-         alpha = NULL;
-         beta = NULL;
-      }
-
-/* Initialise the output coordinate values by copying the input ones. */
-      (void) memcpy( spec, ptr_in[ 0 ], sizeof( double ) * (size_t) npoint );
-      if( map3d ) {
-         (void) memcpy( alpha, ptr_in[ 1 ], sizeof( double ) * (size_t) npoint );
-         (void) memcpy( beta, ptr_in[ 2 ], sizeof( double ) * (size_t) npoint );
-      }
-
-/* We will loop to apply each spectral coordinate conversion in turn to the
-   (spec) array. However, if the inverse transformation was requested,
-   we must loop through these transformations in reverse order, so set up
-   appropriate limits and an increment to control this loop. */
-      start = forward ? 0 : map->ncvt - 1;
-      end = forward ? map->ncvt : -1;
-      inc = forward ? 1 : -1;
-
-/* Loop through the coordinate conversions in the required order. */
-      for ( cvt = start; cvt != end; cvt += inc ) {
-
-/* Process conversions which correspond to changes of reference frames. */
-         if( !FrameChange( map->cvttype[ cvt ], npoint, alpha, beta, spec,
-                          map->cvtargs[ cvt ], forward, status ) ) {
-
-/* If this conversion was not a change of reference frame, it must be a
-   change of system. */
-            SystemChange( map->cvttype[ cvt ], npoint, spec,
-                          map->cvtargs[ cvt ], forward, status );
-         }
-      }
-   }
-
-/* If an error has occurred and a new PointSet may have been created, then
-   clean up by annulling it. In any case, ensure that a NULL result is
-   returned.*/
-   if ( !astOK ) {
-      if ( !out ) result = astAnnul( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-static double UserVel( double ra, double dec, FrameDef *def, int *status ) {
-/*
-*  Name:
-*     UserVel
-
-*  Purpose:
-*     Find the component of the velocity of the user-defined rest-frame 
-*     away from the source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     double UserVel( double ra, double dec, FrameDef *def, int *status ) 
-
-*  Class Membership:
-*     SpecMap method.
-
-*  Description:
-*     This function finds the component of the velocity of the user-defined 
-*     rest-frame away from a specified position. The magnitude and direction 
-*     of the rest-frames velocity are defined within the supplied "def" 
-*     structure. The user-defined rest-frame is typically used to represent 
-*     the velocity of the source within the heliocentric rest-frame.
-
-*  Parameters:
-*     ra 
-*        The RA (rads, FK5 J2000) of the source.
-*     dec
-*        The Dec (rads, FK5 J2000) of the source.
-*     def
-*        Pointer to a FrameDef structure which holds the parameters which
-*        define the frame, together with cached intermediate results.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     The component of the frame's velocity away from the position given by
-*     "ra" and "dec", in m/s, measured within the Heliographic frame of
-*     rest. Zero is returned if an error has already occurred.
-
-*  Notes:
-*     - The direction of the user velocity is given by def->refra and
-*     def->refdec (an FK5 J2000 position). The maginitude of the velocity
-*     is given by def->veluser, in m/s, positive when the source is moving
-*     away from the observer towards def->refra, def->refdec, and given
-*     with respect to the heliocentric rest-frame. 
-
-*/
-
-/* Local Variables: */
-   double vb[ 3 ];          /* Source position vector */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* If not already done so, express the user velocity in the form of a 
-   J2000.0 x,y,z vector. */
-   if( def->vuser[ 0 ] == AST__BAD ) {
-      def->vuser[ 0 ] = def->veluser*cos( def->refra )*cos( def->refdec );
-      def->vuser[ 1 ] = def->veluser*sin( def->refra )*cos( def->refdec );
-      def->vuser[ 2 ] = def->veluser*sin( def->refdec );
-   }
-
-/* Convert given J2000 RA,Dec to x,y,z. */
-   palSlaDcs2c( ra, dec, vb );
-
-/* Return the dot product with the user velocity. Invert it to get the
-   velocity towards the observer (the def->veluser value is supposed to be
-   positive if the source is moving away from the observer). */
-   return -palSlaDvdv( def->vuser, vb );
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SpecMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SpecMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstSpecMap *in;                /* Pointer to input SpecMap */
-   AstSpecMap *out;               /* Pointer to output SpecMap */
-   int cvt;                       /* Loop counter for coordinate conversions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SpecMap structures. */
-   in = (AstSpecMap *) objin;
-   out = (AstSpecMap *) objout;
-
-/* For safety, first clear any references to the input memory from the output
-   SpecMap. */
-   out->cvtargs = NULL;
-   out->cvttype = NULL;
-
-/* Allocate memory for the output array of argument list pointers. */
-   out->cvtargs = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* If necessary, allocate memory and make a copy of the input array of
-   coordinate conversion codes. */
-   if ( in->cvttype ) out->cvttype = astStore( NULL, in->cvttype,
-                                               sizeof( int )
-                                               * (size_t) in->ncvt );
-
-/* If OK, loop through each conversion in the input SpecMap and make a copy of
-   its argument list, storing the new pointer in the output argument list
-   array. */
-   if ( astOK ) {
-      for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
-         out->cvtargs[ cvt ] = astStore( NULL, in->cvtargs[ cvt ],
-                                         astSizeOf( in->cvtargs[ cvt ] ) );
-      }
-
-/* If an error occurred while copying the argument lists, loop through the
-   conversions again and clean up by ensuring that the new memory allocated for
-   each argument list is freed. */
-      if ( !astOK ) {
-         for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
-            out->cvtargs[ cvt ] = astFree( out->cvtargs[ cvt ] );
-	 }
-      }
-   }
-
-/* If an error occurred, free all other memory allocated above. */
-   if ( !astOK ) {
-      out->cvtargs = astFree( out->cvtargs );
-      out->cvttype = astFree( out->cvttype );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SpecMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SpecMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstSpecMap *this;              /* Pointer to SpecMap */
-   int cvt;                       /* Loop counter for coordinate conversions */
-
-/* Obtain a pointer to the SpecMap structure. */
-   this = (AstSpecMap *) obj;
-
-/* Loop to free the memory containing the argument list for each coordinate
-   conversion. */
-   for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
-      this->cvtargs[ cvt ] = astFree( this->cvtargs[ cvt ] );
-   }
-
-/* Free the memory holding the array of conversion types and the array of
-   argument list pointers. */
-   this->cvtargs = astFree( this->cvtargs );
-   this->cvttype = astFree( this->cvttype );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SpecMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SpecMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SpecMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstSpecMap *this;             /* Pointer to the SpecMap structure */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   const char *sval;             /* Pointer to string value */
-   int argdec;                   /* Index of DEC argument */
-   int argra;                    /* Index of RA argument */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt;                     /* Loop counter for conversion steps */
-   int ival;                     /* Integer value */
-   int nargs;                    /* Number of user-supplied arguments */
-   int szargs;                   /* Number of stored arguments */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SpecMap structure. */
-   this = (AstSpecMap *) this_object;
-
-/* Write out values representing the instance variables for the SpecMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Regard this as "set" if it is non-zero. */
-   ival = this->ncvt;
-   set = ( ival != 0 );
-   astWriteInt( channel, "Nspec", set, 0, ival, "Number of conversion steps" );
-
-/* Write out data for each conversion step... */
-   for ( icvt = 0; icvt < this->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Change each conversion type code into an equivalent string and
-   obtain associated descriptive information. If the conversion code
-   was not recognised, report an error and give up. */
-      if ( astOK ) {
-         sval = CvtString( this->cvttype[ icvt ], &comment, &argra, &argdec, 
-                           &nargs, &szargs, argdesc, status );
-         if ( astOK && !sval ) {
-            astError( AST__SPCIN,
-                      "astWrite(%s): Corrupt %s contains invalid SpecMap "
-                      "spectral coordinate conversion code (%d).", status,
-                      astGetClass( channel ), astGetClass( this ),
-                      (int) this->cvttype[ icvt ] );
-            break;
-         }
-
-/* Create an appropriate keyword and write out the conversion code
-   information. */
-         (void) sprintf( key, "Spec%d", icvt + 1 );
-         astWriteString( channel, key, 1, 1, sval, comment );
-
-/* Write out data for each conversion argument... */
-         for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and write out the argument value,
-   accompanied by the descriptive comment obtained above. */
-            if( this->cvtargs[ icvt ][ iarg ] != AST__BAD ) {
-               (void) sprintf( key, "Spec%d%c", icvt + 1, ALPHABET[ iarg ] );
-               astWriteDouble( channel, key, 1, 1, this->cvtargs[ icvt ][ iarg ],
-                               argdesc[ iarg ] );
-            }
-         }
-
-/* Quit looping if an error occurs. */
-         if ( !astOK ) break;
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASpecMap and astCheckSpecMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SpecMap,Mapping)
-astMAKE_CHECK(SpecMap)
-
-AstSpecMap *astSpecMap_( int nin, int flags, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astSpecMap
-f     AST_SPECMAP
-
-*  Purpose:
-*     Create a SpecMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "specmap.h"
-c     AstSpecMap *astSpecMap( int nin, int flags, const char *options, ... )
-f     RESULT = AST_SPECMAP( NIN, FLAGS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     SpecMap constructor.
-
-*  Description:
-*     This function creates a new SpecMap and optionally initialises
-*     its attributes.
-*
-*     An SpecMap is a specialised form of Mapping which can be used to
-*     represent a sequence of conversions between standard spectral
-*     coordinate systems. This includes conversions between frequency,
-*     wavelength, and various forms of velocity, as well as conversions
-*     between different standards of rest. 
-*
-*     When a SpecMap is first created, it simply performs a unit
-c     (null) Mapping. Using the astSpecAdd function,
-f     (null) Mapping. Using the AST_SPECADD routine,
-*     a series of coordinate conversion steps may then be added, selected 
-*     from the list of supported conversions. This allows multi-step 
-*     conversions between a variety of spectral coordinate systems to 
-*     be assembled out of the building blocks provided by this class.
-*
-*     For details of the individual coordinate conversions available,
-c     see the description of the astSpecAdd function.
-f     see the description of the AST_SPECADD routine.
-*
-*     Conversions are available to transform between standards of rest.
-*     Such conversions need to know the source position as an RA and DEC.
-*     This information can be supplied in the form of parameters for
-*     the relevant conversions, in which case the SpecMap is 1-dimensional, 
-*     simply transforming the spectral axis values. This means that the
-*     same source position will always be used by the SpecMap. However, this 
-*     may not be appropriate for an accurate description of a 3-D spectral
-*     cube, where changes of spatial position can produce significant
-*     changes in the Doppler shift introduced when transforming between
-*     standards of rest. For this situation, a 3-dimensional SpecMap can
-*     be created in which axes 2 and 3 correspond to the source RA and DEC
-*     The SpecMap simply copies values for axes 2 and 3 from input to
-*     output).
-
-*  Parameters:
-c     nin
-f     NIN = INTEGER (Given)
-*        The number of inputs to the Mapping (this will also equal the 
-*        number of outputs). This value must be either 1 or 3. In either
-*        case, the first input and output correspoindis the spectral axis.
-*        For a 3-axis SpecMap, the second and third axes give the RA and
-*        DEC (J2000 FK5) of the source. This positional information is
-*        used by conversions which transform between standards of rest,
-*        and replaces the "RA" and "DEC" arguments for the individual
-*        conversions listed in description of the "SpecAdd" 
-c        function.
-f        routine.
-c     flags
-f     FLAGS = INTEGER (Given)
-c        This parameter is reserved for future use and should currently
-f        This argument is reserved for future use and should currently
-*        always be set to zero.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SpecMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SpecMap. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSpecMap()
-f     AST_SPECMAP = INTEGER
-*        A pointer to the new SpecMap.
-
-*  Notes:
-*     - The nature and units of the coordinate values supplied for the
-*     first input (i.e. the spectral input) of a SpecMap must be appropriate 
-*     to the first conversion step applied by the SpecMap. For instance, if 
-*     the first conversion step is "FRTOVL" (frequency to relativistic 
-*     velocity), then the coordinate values for the first input should
-*     be frequency in units of Hz. Similarly, the nature and units of the 
-*     coordinate values returned by a SpecMap will be determined by the
-*     last conversion step applied by the SpecMap. For instance, if the 
-*     last conversion step is "VLTOVO" (relativistic velocity to optical
-*     velocity), then the coordinate values for the first output will be optical
-*     velocity in units of metres per second. See the description of the
-c     astSpecAdd function for the units expected and returned by each
-f     AST_SPECADD routine for the units expected and returned by each
-*     conversion.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSpecMap *new;              /* Pointer to the new SpecMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SpecMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSpecMap( NULL, sizeof( AstSpecMap ), !class_init, &class_vtab,
-                        "SpecMap", nin, flags );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SpecMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SpecMap. */
-   return new;
-}
-
-AstSpecMap *astSpecMapId_( int nin, int flags, const char *options, ... ) {
-/*
-*  Name:
-*     astSpecMapId_
-
-*  Purpose:
-*     Create a SpecMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     AstSpecMap *astSpecMapId_( int nin, int flags, const char *options, ... )
-
-*  Class Membership:
-*     SpecMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astSpecMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astSpecMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astSpecMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astSpecMap_.
-
-*  Returned Value:
-*     The ID value associated with the new SpecMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSpecMap *new;              /* Pointer to the new SpecMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SpecMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitSpecMap( NULL, sizeof( AstSpecMap ), !class_init, &class_vtab,
-                        "SpecMap", nin, flags );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SpecMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new SpecMap. */
-   return astMakeId( new );
-}
-
-AstSpecMap *astInitSpecMap_( void *mem, size_t size, int init,
-                             AstSpecMapVtab *vtab, const char *name,
-                             int nin, int flags, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSpecMap
-
-*  Purpose:
-*     Initialise a SpecMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     AstSpecMap *astInitSpecMap( void *mem, size_t size, int init,
-*                               AstSpecMapVtab *vtab, const char *name,
-*                               int nin, int flags )
-
-*  Class Membership:
-*     SpecMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SpecMap object. It allocates memory (if necessary) to accommodate
-*     the SpecMap plus any additional data associated with the derived class.
-*     It then initialises a SpecMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a SpecMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SpecMap is to be initialised.
-*        This must be of sufficient size to accommodate the SpecMap data
-*        (sizeof(SpecMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SpecMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the SpecMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the SpecMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SpecMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astClass
-*        method).
-*     nin
-*        The number of inputs and outputs for the SpecMap (either 1 or 3).
-*     flags
-*        This parameter is reserved for future use. It is currently ignored.
-
-*  Returned Value:
-*     A pointer to the new SpecMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSpecMap *new;               /* Pointer to the new SpecMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Check nin is OK (1 or 3). */
-   if( nin != 1 && nin != 3 ) {
-      astError( AST__BADNI, "astInitSpecMap(SpecMap): Supplied number of "
-                "SpecMap axes (%d) is illegal; it should be 1 or 2. ", status,
-                nin );
-   }
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSpecMapVtab( vtab, name );
-
-/* Initialise a 1D Mapping structure (the parent class) as the first component
-   within the SpecMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstSpecMap *) astInitMapping( mem, size, 0,
-                                       (AstMappingVtab *) vtab, name,
-                                       nin, nin, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the SpecMap data. */
-/* --------------------------- */
-/* The initial state is with no conversions set, in which condition the
-   SpecMap simply implements a unit mapping. */
-      new->ncvt = 0;
-      new->cvtargs = NULL;
-      new->cvttype = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSpecMap *astLoadSpecMap_( void *mem, size_t size,
-                           AstSpecMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSpecMap
-
-*  Purpose:
-*     Load a SpecMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "specmap.h"
-*     AstSpecMap *astLoadSpecMap( void *mem, size_t size,
-*                               AstSpecMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     SpecMap loader.
-
-*  Description:
-*     This function is provided to load a new SpecMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SpecMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a SpecMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SpecMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SpecMap data (sizeof(SpecMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SpecMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SpecMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSpecMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SpecMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the SpecMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SpecMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SpecMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstSpecMap *new;              /* Pointer to the new SpecMap */
-   char *sval;                   /* Pointer to string value */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   int argdec;                   /* Index of DEC argument */
-   int argra;                    /* Index of RA argument */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt;                     /* Loop counter for conversion steps */
-   int nargs;                    /* Number of user-supplied arguments */
-   int szargs;                   /* Number of stored arguments */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SpecMap. In this case the
-   SpecMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSpecMap );
-      vtab = &class_vtab;
-      name = "SpecMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSpecMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SpecMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SpecMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Read the number of conversion steps and allocate memory to hold
-   data for each step. */
-      new->ncvt = astReadInt( channel, "nspec", 0 );
-      if ( new->ncvt < 0 ) new->ncvt = 0;
-      new->cvttype = astMalloc( sizeof( int ) * (size_t) new->ncvt );
-      new->cvtargs = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
-      if ( !astOK ) {
-         new->cvttype = astFree( new->cvttype );
-         new->cvtargs = astFree( new->cvtargs );
-
-/* Otherwise, initialise the argument pointer array. */
-      } else {
-         for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-            new->cvtargs[ icvt ] = NULL;
-         }
-
-/* Read in data for each conversion step... */
-         for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Create an appropriate keyword and read the string representation of
-   the conversion type. */
-            (void) sprintf( key, "spec%d", icvt + 1 );
-            sval = astReadString( channel, key, NULL );
-
-/* If no value was read, report an error. */
-            if ( astOK ) {
-               if ( !sval ) {
-                  astError( AST__BADIN,
-                            "astRead(%s): A spectral coordinate conversion "
-                            "type is missing from the input SpecMap data.", status,
-                            astGetClass( channel ) );
-
-/* Otherwise, convert the string representation into the required
-   conversion type code. */
-               } else {
-                  new->cvttype[ icvt ] = CvtCode( sval, status );
-
-/* If the string was not recognised, report an error. */
-                  if ( new->cvttype[ icvt ] == AST__SPEC_NULL ) {
-                     astError( AST__BADIN,
-                              "astRead(%s): Invalid spectral conversion "
-                              "type \"%s\" in SpecMap data.", status,
-                              astGetClass( channel ), sval );
-                  }
-               }
-
-/* Free the memory holding the string value. */
-               sval = astFree( sval );
-            }
-
-/* Obtain the number of arguments associated with the conversion and
-   allocate memory to hold them. */
-            (void) CvtString( new->cvttype[ icvt ], &comment, &argra,
-                              &argdec, &nargs, &szargs, argdesc, status );
-            new->cvtargs[ icvt ] = astMalloc( sizeof( double ) *
-                                              (size_t) szargs );
-
-/* Read in data for each argument... */
-            if ( astOK ) {
-               for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and read each argument value. */
-                  (void) sprintf( key, "spec%d%c", icvt + 1, ALPHABET[ iarg ] );
-                  new->cvtargs[ icvt ][ iarg ] = astReadDouble( channel, key,
-                                                                AST__BAD );
-               }
-            }
-
-/* Quit looping if an error occurs. */
-            if ( !astOK ) break;
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new SpecMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SpecMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astSpecAdd_( AstSpecMap *this, const char *cvt, const double args[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,SpecMap,SpecAdd))( this, cvt, args, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/specmap.h b/ast-5.3-1/specmap.h
deleted file mode 100644
index 946f2b9..0000000
--- a/ast-5.3-1/specmap.h
+++ /dev/null
@@ -1,282 +0,0 @@
-#if !defined( SPECMAP_INCLUDED )  /* Include this file only once */
-#define SPECMAP_INCLUDED
-/*
-*+
-*  Name:
-*     specmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SpecMap class.
-
-*  Invocation:
-*     #include "specmap.h"
-
-*  Description:
-*     This include file defines the interface to the SpecMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The SpecMap class encapsulates various ecptral coordinate 
-*     conversions. Since, typically, a sequence of these conversions is 
-*     required, a SpecMap can be used to accumulate a series of conversions 
-*     which it then applies in sequence.
-
-*  Inheritance:
-*     The SpecMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astTransform
-*           Use an SpecMap to transform a set of points.
-
-*     Protected:
-*        astMapMerge
-*           Simplify a sequence of Mappings containing an SpecMap.
-
-*  New Methods Defined:
-*     Public:
-*        astSpecAdd
-*           Add a coordinate conversion step to an SpecMap.
-
-*     Private:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsASpecMap
-*           Test class membership.
-*        astSpecMap
-*           Create an SpecMap.
-
-*     Protected:
-*        astCheckSpecMap
-*           Validate class membership.
-*        astInitSpecMap
-*           Initialise an SpecMap.
-*        astLoadSpecMap
-*           Load an SpecMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSpecMap
-*           SpecMap object type.
-
-*     Protected:
-*        AstSpecMapVtab
-*           SpecMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     8-NOV-2002 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ------ */
-/* Physical constants taken from Chapter 15 of the "Explanatory Supplement
-   to the Astronomical Ephemeris". */
-#define AST__C 2.99792458E8      /* Speed of light (metres per second) */
-#define AST__H 6.6260755E-34     /* Plank constant (Joule.seconds) */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* SpecMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstSpecMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int *cvttype;                 /* Pointer to array of conversion types */
-   double **cvtargs;             /* Pointer to argument list pointer array */
-   int ncvt;                     /* Number of conversions to perform */
-} AstSpecMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSpecMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* SpecAdd)( AstSpecMap *, const char *, const double[], int * );
-} AstSpecMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstSpecMapGlobals {
-   AstSpecMapVtab Class_Vtab;
-   int Class_Init;
-} AstSpecMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitSpecMapGlobals_( AstSpecMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SpecMap)           /* Check class membership */
-astPROTO_ISA(SpecMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSpecMap *astSpecMap_( int, int, const char *, int *, ...);
-#else
-AstSpecMap *astSpecMapId_( int, int, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSpecMap *astInitSpecMap_( void *, size_t, int, AstSpecMapVtab *,
-                             const char *, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitSpecMapVtab_( AstSpecMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSpecMap *astLoadSpecMap_( void *, size_t, AstSpecMapVtab *,
-                           const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astSpecAdd_( AstSpecMap *, const char *, const double[], int * );
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSpecMap(this) astINVOKE_CHECK(SpecMap,this,0)
-#define astVerifySpecMap(this) astINVOKE_CHECK(SpecMap,this,1)
-
-/* Test class membership. */
-#define astIsASpecMap(this) astINVOKE_ISA(SpecMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSpecMap astINVOKE(F,astSpecMap_)
-#else
-#define astSpecMap astINVOKE(F,astSpecMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSpecMap(mem,size,init,vtab,name,nin,flags) \
-astINVOKE(O,astInitSpecMap_(mem,size,init,vtab,name,nin,flags,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSpecMapVtab(vtab,name) astINVOKE(V,astInitSpecMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSpecMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSpecMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSpecMap to validate SpecMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#define astSpecAdd(this,cvt,args) \
-astINVOKE(V,astSpecAdd_(astCheckSpecMap(this),cvt,args,STATUS_PTR))
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/sphmap.c b/ast-5.3-1/sphmap.c
deleted file mode 100644
index cc67f46..0000000
--- a/ast-5.3-1/sphmap.c
+++ /dev/null
@@ -1,1873 +0,0 @@
-/*
-*class++
-*  Name:
-*     SphMap
-
-*  Purpose:
-*     Map 3-d Cartesian to 2-d spherical coordinates
-
-*  Constructor Function:
-c     astSphMap
-f     AST_SPHMAP
-
-*  Description:
-*     A SphMap is a Mapping which transforms points from a
-*     3-dimensional Cartesian coordinate system into a 2-dimensional
-*     spherical coordinate system (longitude and latitude on a unit
-*     sphere centred at the origin). It works by regarding the input
-*     coordinates as position vectors and finding their intersection
-*     with the sphere surface. The inverse transformation always
-*     produces points which are a unit distance from the origin
-*     (i.e. unit vectors).
-
-*  Inheritance:
-*     The SphMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     SphMap also has the following attributes:
-*
-*     - UnitRadius: SphMap input vectors lie on a unit sphere?
-*     - PolarLong: The longitude value to assign to either pole
-
-*  Functions:
-c     The SphMap class does not define any new functions beyond those
-f     The SphMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     24-OCT-1996 (DSB):
-*        Original version.
-*     5-MAR-1997 (RFWS):
-*        Tidied public prologues.
-*     24-MAR-1998 (RFWS):
-*        Override the astMapMerge method.
-*     4-SEP-1998 (DSB):
-*        Added UnitRadius attribute.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitSphMapVtab
-*        method.
-*     11-JUN-2003 (DSB):
-*        Added PolarLong attribute.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SphMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "unitmap.h"             /* Unit (identity) Mappings */
-#include "sphmap.h"              /* Interface definition for this class */
-#include "pal.h"              /* SLA transformations */
-#include "wcsmap.h"              /* For the AST__DPIBY2 (etc) constants */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SphMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SphMap,Class_Init)
-#define class_vtab astGLOBAL(SphMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(SphMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSphMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSphMap *astSphMapId_( const char *, ...);
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetUnitRadius( AstSphMap *, int * );
-static int TestUnitRadius( AstSphMap *, int * );
-static void ClearUnitRadius( AstSphMap *, int * );
-static void SetUnitRadius( AstSphMap *, int, int * );
-
-static double GetPolarLong( AstSphMap *, int * );
-static int TestPolarLong( AstSphMap *, int * );
-static void ClearPolarLong( AstSphMap *, int * );
-static void SetPolarLong( AstSphMap *, double, int * );
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a SphMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status, int *status )
-
-*  Class Membership:
-*     SphMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     SphMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the SphMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSphMap *this;             /* Pointer to the SphMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SphMap structure. */
-   this = (AstSphMap *) this_object;
-
-/* UnitRadius */
-/* ---------- */
-   if ( !strcmp( attrib, "unitradius" ) ) {
-      astClearUnitRadius( this );
-
-/* PolarLong */
-/* --------- */
-   } else if ( !strcmp( attrib, "polarlong" ) ) {
-      astClearPolarLong( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two SphMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status, int *status ) 
-
-*  Class Membership:
-*     SphMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two SphMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a SphMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the SphMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSphMap *that;        
-   AstSphMap *this;        
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two SphMap structures. */
-   this = (AstSphMap *) this_object;
-   that = (AstSphMap *) that_object;
-
-/* Check the second object is a SphMap. We know the first is a
-   SphMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsASphMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two SphMaps differ, it may still be possible 
-   for them to be equivalent. First compare the SphMaps if their Invert 
-   flags are the same. In this case all the attributes of the two SphMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-            if( astEQUAL( this->polarlong, that->polarlong ) &&
-                this->unitradius == that->unitradius ){
-               result = 1;
-            }
-
-/* If the Invert flags for the two SphMaps differ, the attributes of the two 
-   SphMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a SphMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a SphMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status, int *status )
-
-*  Class Membership:
-*     SphMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a SphMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the SphMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the SphMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the SphMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstSphMap *this;              /* Pointer to the SphMap structure */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Double precision attribute value */
-   int ival;                     /* Int attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the SphMap structure. */
-   this = (AstSphMap *) this_object;
-
-/* UnitRadius. */
-/* ----------- */
-   if ( !strcmp( attrib, "unitradius" ) ) {
-      ival = astGetUnitRadius( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* PolarLong */
-/* --------- */
-   } else if ( !strcmp( attrib, "polarlong" ) ) {
-      dval = astGetPolarLong( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-   
-/* Return the result. */
-   return result;
-}
-
-void astInitSphMapVtab_(  AstSphMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSphMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SphMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     void astInitSphMapVtab( AstSphMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SphMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SphMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASphMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearUnitRadius = ClearUnitRadius;
-   vtab->SetUnitRadius = SetUnitRadius;
-   vtab->GetUnitRadius = GetUnitRadius;
-   vtab->TestUnitRadius = TestUnitRadius;
-
-   vtab->ClearPolarLong = ClearPolarLong;
-   vtab->SetPolarLong = SetPolarLong;
-   vtab->GetPolarLong = GetPolarLong;
-   vtab->TestPolarLong = TestPolarLong;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetDump( vtab, Dump, "SphMap", "Cartesian to Spherical mapping" );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a SphMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status, int *status )
-
-*  Class Membership:
-*     SphMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated SphMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated SphMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated SphMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the SphMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        SphMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated SphMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   const char *class;            /* Pointer to Mapping class string */
-   int imap1;                    /* Index of first SphMap */
-   int imap2;                    /* Index of second SphMap */
-   int imap;                     /* Loop counter for Mappings */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Mappings simplified? */
-
-/* Initialise the returned result. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   new = NULL;
-   simpler = 0;
-
-/* We will only handle the case of SphMaps in series and will consider
-   merging the nominated SphMap with the Mapping which follows
-   it. Check that there is such a Mapping. */
-   if ( series && ( ( where + 1 ) < *nmap ) ) {
-
-/* Obtain the indices of the two potential SphMaps to be merged. */
-      imap1 = where;
-      imap2 = where + 1;
-
-/* Obtain the Class string of the second Mapping and determine if it
-   is a SphMap. */
-      class = astGetClass( ( *map_list )[ imap2 ] );
-      if ( astOK && !strcmp( class, "SphMap" ) ) {
-
-/* Check if the first SphMap is applied in the inverse direction and
-   the second in the forward direction. This combination can be 
-   simplified if the PolarLongitude attributes are equal.. */
-         if( ( *invert_list )[ imap1 ] && !( *invert_list )[ imap2 ] ) {
-            simpler = ( astGetPolarLong( ( *map_list )[ imap1 ] ) == 
-                        astGetPolarLong( ( *map_list )[ imap2 ] ) );
-
-/* If the first SphMap is applied in the forward direction and the second in 
-   the inverse direction, the combination can only be simplified if the 
-   input vectors to the first SphMap all have unit length (as indicated by 
-   the UnitRadius attribute). */
-         } else if( !( *invert_list )[ imap1 ] && ( *invert_list )[ imap2 ] ) {
-            simpler = astGetUnitRadius( ( *map_list )[ imap1 ] );
-         }
-      }
-
-/* If the two SphMaps can be simplified, create a UnitMap to replace
-   them. */
-      if ( simpler ) {
-         new = (AstMapping *) astUnitMap( 2, "", status );
-
-/* Annul the pointers to the SphMaps. */
-         if ( astOK ) {
-            ( *map_list )[ imap1 ] = astAnnul( ( *map_list )[ imap1 ] );
-            ( *map_list )[ imap2 ] = astAnnul( ( *map_list )[ imap2 ] );
-
-/* Insert the pointer to the replacement Mapping and initialise its
-   invert flag. */
-            ( *map_list )[ imap1 ] = new;
-            ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
-   in the arrays. */
-            for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-               ( *map_list )[ imap - 1 ] = ( *map_list )[ imap ];
-               ( *invert_list )[ imap - 1 ] = ( *invert_list )[ imap ];
-            }
-
-/* Clear the vacated elements at the end. */
-            ( *map_list )[ *nmap - 1 ] = NULL;
-            ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap )--;
-            result = imap1;
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a SphMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     SphMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a SphMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SphMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstSphMap *this;              /* Pointer to the SphMap structure */
-   double dval;                  /* Double precision attribute value */
-   int len;                      /* Length of setting string */
-   int ival;                     /* Int attribute value */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SphMap structure. */
-   this = (AstSphMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* UnitRadius */
-/* ---------- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "unitradius= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetUnitRadius( this, ival );
-
-/* PolarLong */
-/* --------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "polarlong= %lf %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetPolarLong( this, dval );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a SphMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status, int *status )
-
-*  Class Membership:
-*     SphMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a SphMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the SphMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSphMap *this;             /* Pointer to the SphMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the SphMap structure. */
-   this = (AstSphMap *) this_object;
-
-/* UnitRadius */
-/* ---------- */
-   if ( !strcmp( attrib, "unitradius" ) ) {
-      result = astTestUnitRadius( this );
-
-/* PolarLong */
-/* --------- */
-   } else if ( !strcmp( attrib, "polarlong" ) ) {
-      result = astTestPolarLong( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a SphMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status, int *status )
-
-*  Class Membership:
-*     SphMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a SphMap and a set of points encapsulated in a
-*     PointSet and transforms the points from Cartesian coordinates to 
-*     spherical coordinates.
-
-*  Parameters:
-*     this
-*        Pointer to the SphMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the SphMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstSphMap *map;               /* Pointer to SphMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-   double *p0;                   /* Pointer to x axis value */
-   double *p1;                   /* Pointer to y axis value */
-   double *p2;                   /* Pointer to z axis value */
-   double *q0;                   /* Pointer to longitude value */
-   double *q1;                   /* Pointer to latitude value */
-   double mxerr;                 /* Largest value which is effectively zero */
-   double polarlong;             /* Longitude at either pole */
-   double v[3];                  /* Vector for a single point */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SphMap. */
-   map = (AstSphMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if( astOK ){
-
-/* First deal with forward mappings from Cartesian to Spherical. */
-      if( forward ){
-
-/* Get the longitude to return at either pole. */
-         polarlong = astGetPolarLong( this );
-
-/* Store pointers to the input Cartesian axes. */
-         p0 = ptr_in[ 0 ];
-         p1 = ptr_in[ 1 ];
-         p2 = ptr_in[ 2 ];
-
-/* Store pointers to the output Spherical axes. */
-         q0 = ptr_out[ 0 ];
-         q1 = ptr_out[ 1 ];
-
-/* Apply the mapping to every point. */
-         for( point = 0; point < npoint; point++ ){
-            if( *p0 != AST__BAD && *p1 != AST__BAD && *p2 != AST__BAD ){
-               v[0] = *p0;
-               v[1] = *p1;
-               v[2] = *p2;
-
-/* At either pole, return the longitude equal to PolarLong attribute. */
-               mxerr = fabs( 1000.0*v[ 2 ] )*DBL_EPSILON;
-               if( fabs( v[ 0 ] ) < mxerr && fabs( v[ 1 ] ) < mxerr ) {
-                  if( v[ 2 ] < 0.0 ) {
-                     *(q0++) = polarlong;
-                     *(q1++) = -AST__DPIBY2;
-                  } else if( v[ 2 ] > 0.0 ) {
-                     *(q0++) = polarlong;
-                     *(q1++) = AST__DPIBY2;
-                  } else {
-                     *(q0++) = AST__BAD;
-                     *(q1++) = AST__BAD;
-                  }
-
-/* Otherwise use a SLALIB function to do the conversion (SLALIB always
-   returns zero at either pole which is why we make the above check). */
-               } else {
-                  palSlaDcc2s( v, q0++, q1++ );
-               }
-
-            } else {
-               *(q0++) = AST__BAD;
-               *(q1++) = AST__BAD;
-            }
-            p0++;
-            p1++;
-            p2++;
-         }
-
-/* Now deal with inverse mappings from Spherical to Cartesian. */
-      } else {
-
-/* Store pointers to the input Spherical axes. */
-         q0 = ptr_in[ 0 ];
-         q1 = ptr_in[ 1 ];
-
-/* Store pointers to the output Cartesian axes. */
-         p0 = ptr_out[ 0 ];
-         p1 = ptr_out[ 1 ];
-         p2 = ptr_out[ 2 ];
-
-/* Apply the mapping to every point. */
-         for( point = 0; point < npoint; point++ ){
-            if( *q0 != AST__BAD && *q1 != AST__BAD ){
-               palSlaDcs2c( *q0, *q1, v );
-               *(p0++) = v[ 0 ];
-               *(p1++) = v[ 1 ];
-               *(p2++) = v[ 2 ];
-            } else {
-               *(p0++) = AST__BAD;
-               *(p1++) = AST__BAD;
-               *(p2++) = AST__BAD;
-
-            }
-            q0++;
-            q1++;
-         }
-
-      }
-
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* UnitRadius */
-/* ---------- */
-/*
-*att++
-*  Name:
-*     UnitRadius
-
-*  Purpose:
-*     SphMap input vectors lie on a unit sphere?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which indicates whether the
-*     3-dimensional vectors which are supplied as input to a SphMap
-*     are known to always have unit length, so that they lie on a unit
-*     sphere centred on the origin.
-*
-c     If this condition is true (indicated by setting UnitRadius
-c     non-zero), it implies that a CmpMap which is composed of a
-c     SphMap applied in the forward direction followed by a similar
-c     SphMap applied in the inverse direction may be simplified
-c     (e.g. by astSimplify) to become a UnitMap. This is because the
-c     input and output vectors will both have unit length and will
-c     therefore have the same coordinate values.
-f     If this condition is true (indicated by setting UnitRadius
-f     non-zero), it implies that a CmpMap which is composed of a
-f     SphMap applied in the forward direction followed by a similar
-f     SphMap applied in the inverse direction may be simplified
-f     (e.g. by AST_SIMPLIFY) to become a UnitMap. This is because the
-f     input and output vectors will both have unit length and will
-f     therefore have the same coordinate values.
-*
-*     If UnitRadius is zero (the default), then although the output
-*     vector produced by the CmpMap (above) will still have unit
-*     length, the input vector may not have. This will, in general,
-*     change the coordinate values, so it prevents the pair of SphMaps
-*     being simplified.
-
-*  Notes:
-*     - This attribute is intended mainly for use when SphMaps are
-*     involved in a sequence of Mappings which project (e.g.) a
-*     dataset on to the celestial sphere. By regarding the celestial
-*     sphere as a unit sphere (and setting UnitRadius to be non-zero)
-*     it becomes possible to cancel the SphMaps present, along with
-*     associated sky projections, when two datasets are aligned using
-*     celestial coordinates. This often considerably improves
-*     performance.
-*     - Such a situations often arises when interpreting FITS data and
-*     is handled automatically by the FitsChan class.
-*     - The value of the UnitRadius attribute is used only to control
-*     the simplification of Mappings and has no effect on the value of
-*     the coordinates transformed by a SphMap. The lengths of the
-*     input 3-dimensional Cartesian vectors supplied are always
-*     ignored, even if UnitRadius is non-zero.
-
-*  Applicability:
-*     SphMap
-*        All SphMaps have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SphMap,UnitRadius,unitradius,-1)
-astMAKE_GET(SphMap,UnitRadius,int,0,(this->unitradius == -1 ? 0 : this->unitradius))
-astMAKE_SET(SphMap,UnitRadius,int,unitradius,( value ? 1 : 0 ))
-astMAKE_TEST(SphMap,UnitRadius,( this->unitradius != -1 ))
-
-/* PolarLong */
-/* --------- */
-/*
-*att++
-*  Name:
-*     PolarLong
-
-*  Purpose:
-*     The longitude value to assign to either pole
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds the longitude value, in radians, to be
-*     returned when a Cartesian position corresponding to either the north
-*     or south pole is transformed into spherical coordinates. The
-*     default value is zero.
-
-*  Applicability:
-*     SphMap
-*        All SphMaps have this attribute.
-*att--
-*/
-astMAKE_CLEAR(SphMap,PolarLong,polarlong,AST__BAD)
-astMAKE_GET(SphMap,PolarLong,double,0.0,(this->polarlong == AST__BAD ? 0.0 : this->polarlong))
-astMAKE_SET(SphMap,PolarLong,double,polarlong,value)
-astMAKE_TEST(SphMap,PolarLong,( this->polarlong != AST__BAD ))
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SphMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status, int *status, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SphMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the SphMap to be copied.
-*     objout
-*        Pointer to the SphMap being constructed.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SphMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status, int *status )
-
-*  Description:
-*     This function implements the destructor for SphMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the SphMap to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This destructor does nothing and exists only to maintain a
-*     one-to-one correspondence between destructors and copy
-*     constructors.
-*/
-
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SphMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status, int *status, int *status, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SphMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SphMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSphMap *this;              /* Pointer to the SphMap structure */
-   double dval;                  /* Double precision attribute value */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SphMap structure. */
-   this = (AstSphMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   SphMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* UnitRadius. */
-/* ------- */
-   set = TestUnitRadius( this, status );
-   ival = set ? GetUnitRadius( this, status ) : astGetUnitRadius( this );
-   if( ival ) {
-      astWriteInt( channel, "UntRd", set, 0, ival, "All input vectors have unit length" );
-   } else {
-      astWriteInt( channel, "UntRd", set, 0, ival, "Input vectors do not all have unit length" );
-   }
-
-/* PolarLong. */
-/* ---------- */
-   set = TestPolarLong( this, status );
-   dval = set ? GetPolarLong( this, status ) : astGetPolarLong( this );
-   astWriteDouble( channel, "PlrLg", set, 1, dval, "Polar longitude (rad.s)" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASphMap and astCheckSphMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SphMap,Mapping)
-astMAKE_CHECK(SphMap)
-
-AstSphMap *astSphMap_( const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astSphMap
-f     AST_SPHMAP
-
-*  Purpose:
-*     Create a SphMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "sphmap.h"
-c     AstSphMap *astSphMap( const char *options, ... )
-f     RESULT = AST_SPHMAP( OPTIONS, STATUS )
-
-*  Class Membership:
-*     SphMap constructor.
-
-*  Description:
-*     This function creates a new SphMap and optionally initialises
-*     its attributes.
-*
-*     A SphMap is a Mapping which transforms points from a
-*     3-dimensional Cartesian coordinate system into a 2-dimensional
-*     spherical coordinate system (longitude and latitude on a unit
-*     sphere centred at the origin). It works by regarding the input
-*     coordinates as position vectors and finding their intersection
-*     with the sphere surface. The inverse transformation always
-*     produces points which are a unit distance from the origin
-*     (i.e. unit vectors).
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SphMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SphMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSphMap()
-f     AST_SPHMAP = INTEGER
-*        A pointer to the new SphMap.
-
-*  Notes:
-*     - The spherical coordinates are longitude (positive
-*     anti-clockwise looking from the positive latitude pole) and
-*     latitude. The Cartesian coordinates are right-handed, with the x
-*     axis (axis 1) at zero longitude and latitude, and the z axis
-*     (axis 3) at the positive latitude pole.
-*     - At either pole, the longitude is set to the value of the
-*     PolarLong attribute.
-*     - If the Cartesian coordinates are all zero, then the longitude
-*     and latitude are set to the value AST__BAD.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSphMap *new;              /* Pointer to new SphMap */
-   va_list args;                /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SphMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitSphMap( NULL, sizeof( AstSphMap ), !class_init, &class_vtab,
-                        "SphMap" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SphMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new SphMap. */
-   return new;
-}
-
-AstSphMap *astSphMapId_( const char *options, ...) {
-/*
-*  Name:
-*     astSphMapId_
-
-*  Purpose:
-*     Create a SphMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     AstSphMap *astSphMapId_( const char *options, ... ) 
-
-*  Class Membership:
-*     SphMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astSphMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astSphMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astSphMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astSphMap_.
-
-*  Returned Value:
-*     The ID value associated with the new SphMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSphMap *new;              /* Pointer to new SphMap */
-   va_list args;                /* Variable argument list */
-   int *status;                 /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the SphMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitSphMap( NULL, sizeof( AstSphMap ), !class_init, &class_vtab,
-                        "SphMap" );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new SphMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new SphMap. */
-   return astMakeId( new );
-}
-
-AstSphMap *astInitSphMap_( void *mem, size_t size, int init,
-                           AstSphMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSphMap
-
-*  Purpose:
-*     Initialise a SphMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     AstSphMap *astInitSphMap( void *mem, size_t size, int init,
-*                               AstSphMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SphMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SphMap object. It allocates memory (if necessary) to accommodate
-*     the SphMap plus any additional data associated with the derived class.
-*     It then initialises a SphMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a SphMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SphMap is to be initialised.
-*        This must be of sufficient size to accommodate the SphMap data
-*        (sizeof(SphMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SphMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the SphMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the SphMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SphMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-
-*  Returned Value:
-*     A pointer to the new SphMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSphMap *new;              /* Pointer to new SphMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSphMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the SphMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstSphMap *) astInitMapping( mem, size, 0,
-                                       (AstMappingVtab *) vtab, name,
-                                       3, 2, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the SphMap data. */
-/* --------------------------- */
-/* Are all input vectors of unit length? Store a value of -1 to indicate that 
-   no value has yet been set. This will cause a default value of 0 (no, i.e. 
-   input vectors are not all of unit length) to be used. */
-      new->unitradius = -1;
-      new->polarlong = AST__BAD;
-
-   }
-
-/* Return a pointer to the new SphMap. */
-   return new;
-}
-
-AstSphMap *astLoadSphMap_( void *mem, size_t size,
-                           AstSphMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSphMap
-
-*  Purpose:
-*     Load a SphMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "sphmap.h"
-*     AstSphMap *astLoadSphMap( void *mem, size_t size,
-*                               AstSphMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     SphMap loader.
-
-*  Description:
-*     This function is provided to load a new SphMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SphMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a SphMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SphMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SphMap data (sizeof(SphMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SphMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SphMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSphMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SphMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the SphMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SphMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SphMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSphMap *new;               /* Pointer to the new SphMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SphMap. In this case the
-   SphMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSphMap );
-      vtab = &class_vtab;
-      name = "SphMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSphMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SphMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SphMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* UnitRadius. */
-/* ----------- */
-      new->unitradius = astReadInt( channel, "untrd", -1 );
-      if ( TestUnitRadius( new, status ) ) SetUnitRadius( new, new->unitradius, status );
-
-/* PolarLong. */
-/* ---------- */
-      new->polarlong = astReadDouble( channel, "plrlg", AST__BAD );
-      if ( TestPolarLong( new, status ) ) SetPolarLong( new, new->polarlong, status );
-
-   }
-
-/* If an error occurred, clean up by deleting the new SphMap. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new SphMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/sphmap.h b/ast-5.3-1/sphmap.h
deleted file mode 100644
index 56bbd4f..0000000
--- a/ast-5.3-1/sphmap.h
+++ /dev/null
@@ -1,374 +0,0 @@
-#if !defined( SPHMAP_INCLUDED ) /* Include this file only once */
-#define SPHMAP_INCLUDED
-/*
-*+
-*  Name:
-*     sphmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SphMap class.
-
-*  Invocation:
-*     #include "sphmap.h"
-
-*  Description:
-*     This include file defines the interface to the SphMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The SphMap class implements Mappings which maps positions from 
-*     3-dimensional Cartesian coordinates into 2-dimensional spherical 
-*     coordinates (i.e. longitude and latitude on a unit sphere). The 
-*     inverse Mapping always produces vectors of unit length.
-*
-*     The spherical coordinates are longitude (positive anti-clockwise 
-*     looking from the positive latitude pole) and latitude. The
-*     Cartesian coordinates are right-handed, with the x-axis (axis 1) 
-*     at zero longitude and latitude, and the z-axis (axis 3) at the 
-*     positive latitude pole.
-*
-*     At either pole, the longitude is set to the value of the PolarLong
-*     attribute. If the Cartesian coordinates are all zero, then the 
-*     longitude and latitude values are set to AST__BAD.
-
-*  Inheritance:
-*     The SphMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     PolarLong (double)
-*        This attribute holds the longitude value, in radians, to be
-*        returned when a Cartesian position corresponding to either the north
-*        or south pole is transformed into spherical coordinates. The
-*        default value is zero.
-*     UnitRadius (integer)
-*        This is a boolean attribute which indicates whether the
-*        3-dimensional vectors which are supplied as input to a SphMap
-*        are known to always have unit length, so that they lie on a
-*        unit sphere centred on the origin.
-*
-*        If this condition is true (indicated by setting UnitRadius
-*        non-zero), it implies that a CmpMap which is composed of a
-*        SphMap applied in the forward direction followed by a similar
-*        SphMap applied in the inverse direction may be simplified
-*        (e.g. by astSimplify) to become a UnitMap. This is because
-*        the input and output vectors will both have unit length and
-*        will therefore have the same coordinate values.
-*
-*        If UnitRadius is zero (the default), then although the output
-*        vector produced by the CmpMap (above) will still have unit
-*        length, the input vector may not have. This will, in general,
-*        change the coordinate values, so it prevents the pair of
-*        SphMaps being simplified.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a SphMap.
-*        astGetAttrib
-*           Get an attribute value for a SphMap.
-*        astMapMerge
-*           Simplify a sequence of Mappings containing a SphMap.
-*        astSetAttrib
-*           Set an attribute value for a SphMap.
-*        astTestAttrib
-*           Test if an attribute value has been set for a SphMap.
-*        astTransform
-*           Apply a SphMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearUnitRadius
-*           Clear the UnitRadius attribute value for a SphMap.
-*        astGetUnitRadius
-*           Get the UnitRadius attribute value for a SphMap.
-*        astSetUnitRadius
-*           Set the UnitRadius attribute value for a SphMap.
-*        astTestUnitRadius
-*           Test if a UnitRadius attribute value has been set for a SphMap.
-*        astClearPolarLong
-*           Clear the PolarLong attribute value for a SphMap.
-*        astGetPolarLong
-*           Get the PolarLong attribute value for a SphMap.
-*        astSetPolarLong
-*           Set the PolarLong attribute value for a SphMap.
-*        astTestPolarLong
-*           Test if a PolarLong attribute value has been set for a SphMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIsASphMap
-*           Test class membership.
-*        astSphMap
-*           Create a SphMap.
-*
-*     Protected:
-*        astCheckSphMap
-*           Validate class membership.
-*        astInitSphMap
-*           Initialise a SphMap.
-*        astInitSphMapVtab
-*           Initialise the virtual function table for the SphMap class.
-*        astLoadSphMap
-*           Load a SphMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSphMap
-*           SphMap object type.
-*
-*     Protected:
-*        AstSphMapVtab
-*           SphMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     25-OCT-1996 (DSB):
-*        Original version.
-*     24-MAR-1998 (RFWS):
-*        Override the astMapMerge method.
-*     4-SEP-1998 (DSB):
-*        Added UnitRadius attribute.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitSphMapVtab method.
-*     11-JUN-2003 (DSB):
-*        Added PolarLong attribute.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SphMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstSphMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double polarlong;             /* Longitude to assign to either pole */
-   int unitradius;               /* Are input vectors always of unit length? */
-} AstSphMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSphMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* GetUnitRadius)( AstSphMap *, int * );
-   int (* TestUnitRadius)( AstSphMap *, int * );
-   void (* ClearUnitRadius)( AstSphMap *, int * );
-   void (* SetUnitRadius)( AstSphMap *, int, int * );
-
-   double (* GetPolarLong)( AstSphMap *, int * );
-   int (* TestPolarLong)( AstSphMap *, int * );
-   void (* ClearPolarLong)( AstSphMap *, int * );
-   void (* SetPolarLong)( AstSphMap *, double, int * );
-} AstSphMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstSphMapGlobals {
-   AstSphMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 51 ];
-} AstSphMapGlobals;
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SphMap)          /* Check class membership */
-astPROTO_ISA(SphMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSphMap *astSphMap_( const char *, int *, ...);
-#else
-AstSphMap *astSphMapId_( const char *, ...)__attribute__((format(printf,1,2)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSphMap *astInitSphMap_( void *, size_t, int, AstSphMapVtab *,
-                           const char *, int * );
-
-/* Vtab initialiser. */
-void astInitSphMapVtab_( AstSphMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSphMap *astLoadSphMap_( void *, size_t, AstSphMapVtab *,
-                           const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitSphMapGlobals_( AstSphMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-int astGetUnitRadius_( AstSphMap *, int * );
-int astTestUnitRadius_( AstSphMap *, int * );
-void astClearUnitRadius_( AstSphMap *, int * );
-void astSetUnitRadius_( AstSphMap *, int, int * );
-
-double astGetPolarLong_( AstSphMap *, int * );
-int astTestPolarLong_( AstSphMap *, int * );
-void astClearPolarLong_( AstSphMap *, int * );
-void astSetPolarLong_( AstSphMap *, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSphMap(this) astINVOKE_CHECK(SphMap,this,0)
-#define astVerifySphMap(this) astINVOKE_CHECK(SphMap,this,1)
-
-/* Test class membership. */
-#define astIsASphMap(this) astINVOKE_ISA(SphMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSphMap astINVOKE(F,astSphMap_)
-#else
-#define astSphMap astINVOKE(F,astSphMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define \
-astInitSphMap(mem,size,init,vtab,name) \
-astINVOKE(O,astInitSphMap_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSphMapVtab(vtab,name) astINVOKE(V,astInitSphMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSphMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSphMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSphMap to validate SphMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astClearUnitRadius(this)     astINVOKE(V,astClearUnitRadius_(astCheckSphMap(this),STATUS_PTR))
-#define astGetUnitRadius(this)       astINVOKE(V,astGetUnitRadius_(astCheckSphMap(this),STATUS_PTR))
-#define astSetUnitRadius(this,value) astINVOKE(V,astSetUnitRadius_(astCheckSphMap(this),value,STATUS_PTR))
-#define astTestUnitRadius(this)      astINVOKE(V,astTestUnitRadius_(astCheckSphMap(this),STATUS_PTR))
-
-#define astClearPolarLong(this)     astINVOKE(V,astClearPolarLong_(astCheckSphMap(this),STATUS_PTR))
-#define astGetPolarLong(this)       astINVOKE(V,astGetPolarLong_(astCheckSphMap(this),STATUS_PTR))
-#define astSetPolarLong(this,value) astINVOKE(V,astSetPolarLong_(astCheckSphMap(this),value,STATUS_PTR))
-#define astTestPolarLong(this)      astINVOKE(V,astTestPolarLong_(astCheckSphMap(this),STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stc.c b/ast-5.3-1/stc.c
deleted file mode 100644
index e27f803..0000000
--- a/ast-5.3-1/stc.c
+++ /dev/null
@@ -1,3703 +0,0 @@
-/*
-*class++
-*  Name:
-*     Stc
-
-*  Purpose:
-*     Represents an instance of the IVOA STC class.
-
-*  Constructor Function:
-c     astStc
-f     AST_STC
-
-*  Description:
-*     The Stc class is an implementation of the IVOA STC class which forms 
-*     part of the IVOA Space-Time Coordinate Metadata system. See:
-*
-*     http://hea-www.harvard.edu/~arots/nvometa/STC.html
-*
-*     The Stc class does not have a constructor function of its own, as it 
-*     is simply a container class for a family of specialised sub-classes
-*     including StcCatalogEntryLocation, StcResourceProfile, StcSearchLocation 
-*     and StcObsDataLocation.
-
-*  Inheritance:
-*     The Stc class inherits from the Region class.
-
-*  Attributes:
-*     In addition to those attributes common to all Regions, every
-*     Stc also has the following attributes:
-*
-*     - RegionClass: The class name of the encapsulated Region.
-
-*  Functions:
-c     In addition to those functions applicable to all Regions, the
-c     following functions may also be applied to all Stc's:
-f     In addition to those routines applicable to all Regions, the
-f     following routines may also be applied to all Stc's:
-*
-c     - astGetStcRegion: Get a pointer to the encapsulated Region
-f     - AST_GETSTCREGION: Get a pointer to the encapsulated Region
-c     - astGetStcCoord: Get information about an AstroCoords element
-f     - AST_GETSTCCOORD: Get information about an AstroCoords element
-c     - astGetStcNCoord: Returns the number of AstroCoords elements in an Stc
-f     - AST_GETSTCNCOORD: Returns the number of AstroCoords elements in an Stc
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-NOV-2004 (DSB):
-*        Original version.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     13-MAR-2009 (DSB):
-*        Over-ride astRegBasePick.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS Stc
-
-/* The number of components in an AstroCoords element which are described
-   using a Region within a KeyMap. */
-#define NREG 5
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "unitmap.h"             /* Unit Mappings */
-#include "region.h"              /* Regions (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "stc.h"                 /* Interface definition for this class */
-#include "keymap.h"              /* Lists of value/key pairs */
-#include "pointlist.h"           /* Individual points in a Frame */
-#include "ellipse.h"             /* Ellipses within a Frame */
-#include "interval.h"            /* Axis intervals within a Frame */
-#include "prism.h"               /* Extrusions into higher dimensions */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstMapping *(* parent_simplify)( AstMapping *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *(* parent_getdefunc)( AstRegion *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_equal)( AstObject *, AstObject *, int * );
-static int (* parent_getobjsize)( AstObject *, int * );
-static int (* parent_getusedefs)( AstObject *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setregfs)( AstRegion *, AstFrame *, int * );
-static void (*parent_regclearattrib)( AstRegion *, const char *, char **, int * );
-static void (*parent_regsetattrib)( AstRegion *, const char *, char **, int * );
-
-static void (* parent_clearnegated)( AstRegion *, int * );
-static void (* parent_clearclosed)( AstRegion *, int * );
-static void (* parent_clearfillfactor)( AstRegion *, int * );
-static void (* parent_clearmeshsize)( AstRegion *, int * );
-
-static void (* parent_setclosed)( AstRegion *, int, int * );
-static void (* parent_setfillfactor)( AstRegion *, double, int * );
-static void (* parent_setmeshsize)( AstRegion *, int, int * );
-static void (* parent_setnegated)( AstRegion *, int, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* The keys associated with each component of an AstroCoords element
-   within KeyMap */
-static const char *regkey[ NREG ] = { AST__STCERROR, 
-                                      AST__STCRES,
-                                      AST__STCSIZE,
-                                      AST__STCPIXSZ,
-                                      AST__STCVALUE };
-
-/* The comments associated with each component of an AstroCoords element
-   within KeyMap */
-static const char *regcom[ NREG ] = { "AstroCoords error region", 
-                                      "AstroCoords resolution region", 
-                                      "AstroCoords size region", 
-                                      "AstroCoords pixel size region", 
-                                      "AstroCoords value region" };
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(Stc)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(Stc,Class_Init)
-#define class_vtab astGLOBAL(Stc,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstStcVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstKeyMap *GetStcCoord( AstStc *, int, int * );
-static AstKeyMap *MakeAstroCoordsKeyMap( AstRegion *, AstKeyMap *, const char *, int * );
-static AstMapping *Simplify( AstMapping *, int * );
-static AstPointSet *RegBaseMesh( AstRegion *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstRegion *GetDefUnc( AstRegion *, int * );
-static AstRegion *GetStcRegion( AstStc *, int * );
-static AstRegion *RegBasePick( AstRegion *this, int, const int *, int * );
-static const char *GetRegionClass( AstStc *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetBounded( AstRegion *, int * );
-static int GetObjSize( AstObject *, int * );
-static int GetStcNCoord( AstStc *, int * );
-static int GetUseDefs( AstObject *, int * );
-static int Overlap( AstRegion *, AstRegion *, int * );
-static int OverlapX( AstRegion *, AstRegion *, int * );
-static int RegPins( AstRegion *, AstPointSet *, AstRegion *, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void GetRegion( AstStc *, AstRegion **, int *, int * );
-static void RegBaseBox( AstRegion *, double *, double *, int * );
-static void RegClearAttrib( AstRegion *, const char *, char **, int * );
-static void RegSetAttrib( AstRegion *, const char *, char **, int * );
-static void SetRegFS( AstRegion *, AstFrame *, int * );
-
-static void ClearAttrib( AstObject *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-
-static void ClearClosed( AstRegion *, int * );
-static int GetClosed( AstRegion *, int * );
-static void SetClosed( AstRegion *, int, int * );
-static int TestClosed( AstRegion *, int * );
-
-static void ClearMeshSize( AstRegion *, int * );
-static int GetMeshSize( AstRegion *, int * );
-static void SetMeshSize( AstRegion *, int, int * );
-static int TestMeshSize( AstRegion *, int * );
-
-static void ClearFillFactor( AstRegion *, int * );
-static double GetFillFactor( AstRegion *, int * );
-static void SetFillFactor( AstRegion *, double, int * );
-static int TestFillFactor( AstRegion *, int * );
-
-static void ClearNegated( AstRegion *, int * );
-static int GetNegated( AstRegion *, int * );
-static void SetNegated( AstRegion *, int, int * );
-static int TestNegated( AstRegion *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astClearAttrib protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     Stc, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   int len;                      /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* (none as yet) */
-/* ------------- */
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then report an error. */
-   if ( !strcmp( attrib, "regionclass" ) ) {
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two Objects are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int Equal( AstObject *this_object, AstObject *that_object, int *status ) 
-
-*  Class Membership:
-*     Stc member function (over-rides the astEqual protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two Stcs are equivalent. 
-
-*  Parameters:
-*     this
-*        Pointer to the first Stc.
-*     that
-*        Pointer to the second Stc.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the Stcs are equivalent, zero otherwise.
-
-*  Notes:
-*     - The Stcs are equivalent if their encapsulated Region are
-*     equivalent, and if they have the same boolean operation, negation
-*     and closed flags.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstStc *that;              
-   AstStc *this;              
-   int result;                   
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the Equal method inherited from the parent Region class. This checks
-   that the Objects are both of the same class, and have the same Negated
-   and Closed flags (amongst other things). */
-   if( (*parent_equal)( this_object, that_object, status ) ) {
-
-/* Obtain pointers to the two Stc structures. */
-      this = (AstStc *) this_object;
-      that = (AstStc *) that_object;
-
-/* Test their encapsulated Region for equality. */
-      result = astEqual( this->region, that->region );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-/*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Define a function to set an attribute value for a Stc.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "stc.h"
-*     MAKE_SET(attribute,lattribute,type)
-
-*  Class Membership:
-*     Defined by the Stc class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Set<Attribute>( AstRegion *this, <Type> value )
-*
-*     that sets the value of a specified Region attribute in the parent
-*     Region structure and also in the encapsulated Region.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     lattribute
-*        Name of the attribute, all in lower case.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attribute,lattribute,type) \
-static void Set##attribute( AstRegion *this_region, type value, int *status ) { \
-\
-/* Local Variables: */ \
-   AstStc *this;         /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Use the parent method to set the value in the parent Region structure. */ \
-   (*parent_set##lattribute)( this_region, value, status ); \
-\
-/* Also set the value in the encapsulated Region. */ \
-   this = (AstStc *) this_region; \
-   astSet##attribute( this->region, value ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
-   FillFactor attributes. */
-MAKE_SET(FillFactor,fillfactor,double)
-MAKE_SET(MeshSize,meshsize,int)
-MAKE_SET(Closed,closed,int)
-MAKE_SET(Negated,negated,int)
-
-/* Undefine the macro. */
-#undef MAKE_SET
-
-/*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Define a function to clear an attribute value for a Stc.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "stc.h"
-*     MAKE_CLEAR(attribute,lattribute)
-
-*  Class Membership:
-*     Defined by the Stc class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static void Clear<Attribute>( AstRegion *this )
-*
-*     that sets the value of a specified Region attribute in the parent
-*     Region structure and also in the encapsulated Region.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     lattribute
-*        Name of the attribute, all in lower case.
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attribute,lattribute) \
-static void Clear##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
-   AstStc *this;         /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Use the parent method to clear the value in the parent Region structure. */ \
-   (*parent_clear##lattribute)( this_region, status ); \
-\
-/* Also clear the value in the encapsulated Region. */ \
-   this = (AstStc *) this_region; \
-   astClear##attribute( this->region ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
-   FillFactor attributes. */
-MAKE_CLEAR(FillFactor,fillfactor)
-MAKE_CLEAR(MeshSize,meshsize)
-MAKE_CLEAR(Closed,closed)
-MAKE_CLEAR(Negated,negated)
-
-/* Undefine the macro. */
-#undef MAKE_CLEAR
-
-
-/*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Define a function to get an attribute value for a Stc.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "stc.h"
-*     MAKE_GET(attribute,type,bad)
-
-*  Class Membership:
-*     Defined by the Stc class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static <Type> Get<Attribute>( AstRegion *this )
-*
-*     that gets the value of a specified Region attribute from the encapsulated 
-*     Region.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*     bad
-*        Value to return in caseof error.
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attribute,type,bad) \
-static type Get##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
-   AstStc *this;         /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad); \
-\
-/* Get the value from the encapsulated Region. */ \
-   this = (AstStc *) this_region; \
-   return astGet##attribute( this->region ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
-   FillFactor attributes. */
-MAKE_GET(FillFactor,double,AST__BAD)
-MAKE_GET(MeshSize,int,100)
-MAKE_GET(Closed,int,1)
-MAKE_GET(Negated,int,0)
-
-/* Undefine the macro. */
-#undef MAKE_GET
-
-/*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Define a function to test an attribute value for a Stc.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "stc.h"
-*     MAKE_TEST(attribute)
-
-*  Class Membership:
-*     Defined by the Stc class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function
-*     of the form:
-*
-*        static int Test<Attribute>( AstRegion *this )
-*
-*     that test the value of a specified Region attribute from the encapsulated 
-*     Region.
-
-*  Parameters:
-*     attribute
-*        Name of the attribute, as it appears in the function name.
-*     type
-*        The C type of the attribute.
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attribute) \
-static int Test##attribute( AstRegion *this_region, int *status ) { \
-\
-/* Local Variables: */ \
-   AstStc *this;         /* Pointer to the Stc structure */ \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Test the value from the encapsulated Region. */ \
-   this = (AstStc *) this_region; \
-   return astTest##attribute( this->region ); \
-}
-
-/* Use the above macro to create accessors for the MeshSize, Closed and
-   FillFactor attributes. */
-MAKE_TEST(FillFactor)
-MAKE_TEST(MeshSize)
-MAKE_TEST(Closed)
-MAKE_TEST(Negated)
-
-/* Undefine the macro. */
-#undef MAKE_TEST
-
-
-
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     Stc member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied Stc,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstStc *this;         /* Pointer to Stc structure */
-   int result;           /* Result value to return */
-   int i;                /* AstroCoords index */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astGetObjSize( this->region );
-
-   if( this->coord ) {
-      for( i = 0; i < this->ncoord; i++ ) {
-         result += astGetObjSize( this->coord[ i ] );
-      }
-      result += astTSizeOf( this->coord );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the protected astGetAttrib
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a Stc, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Stc, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Stc. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   const char *result;           /* Pointer value to return */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* RegionClass. */
-/* ------------ */
-   if ( !strcmp( attrib, "regionclass" ) ) {
-      result = astGetClass( this->region );
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetBounded( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetBounded
-
-*  Purpose:
-*     Is the Region bounded?
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int GetBounded( AstRegion *this, int *status ) 
-
-*  Class Membership:
-*     Stc method (over-rides the astGetBounded method inherited from
-*     the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the Region is bounded.
-*     The implementation provided by the base Region class is suitable
-*     for Region sub-classes representing the inside of a single closed 
-*     curve (e.g. Circle, Ellipse, Box, etc). Other sub-classes (such as
-*     Stc, PointList, etc ) may need to provide their own implementations.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Region is bounded. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstStc *this;              /* Pointer to Stc structure */
-   AstRegion *reg;            /* Pointer to the encapsulated Region */
-   int neg;                   /* Negated flag to use */
-   int neg_old;               /* Original Negated flag */
-   int result;                /* Returned result */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Stc structure. */
-   this = (AstStc *) this_region;   
-
-/* Get the encapsulated Region, and the Negated value which should be used 
-   with it. The returned values take account of whether the supplied Stc has 
-   itself been Negated or not. The returned Region represent a region within 
-   the base Frame of the FrameSet encapsulated by the parent Region 
-   structure. */
-   GetRegion( this, &reg, &neg, status );
-
-/* Temporarily set the Negated attribute to the required value.*/
-   neg_old = astGetNegated( reg );
-   astSetNegated( reg, neg );
-
-/* See if the encapsulated Region is bounded. */
-   result = astGetBounded( reg );
-
-/* Re-instate the original value for the Negated attribute of the 
-   encapsulated Region. */
-   if( reg ) astSetNegated( reg, neg_old );
-   
-/* Free resources. */
-   reg = astAnnul( reg );
-
-/* Return zero if an error occurred. */
-   if( !astOK ) result = 0;
-
-/* Return the required pointer. */
-   return result;
-}
-
-static AstRegion *GetDefUnc( AstRegion *this_region, int *status ) {
-/*
-*  Name:
-*     GetDefUnc
-
-*  Purpose:
-*     Obtain a pointer to the default uncertainty Region for a given Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     AstRegion *GetDefUnc( AstRegion *this ) 
-
-*  Class Membership:
-*     Stc method (over-rides the astGetDefUnc method inherited from
-*     the Region class).
-
-*     This function returns a pointer to a Region which represents the
-*     default uncertainty associated with a position on the boundary of the 
-*     given  Region. The returned Region refers to the base Frame within the 
-*     FrameSet encapsulated by the supplied Region.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-
-*  Returned Value:
-*     A pointer to the Region. This should be annulled (using astAnnul)
-*     when no longer needed.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstStc *this;              /* Pointer to the Stc structure */
-   AstRegion *result;         /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the Stc structure. */
-   this = (AstStc *) this_region;   
-
-/* If the encapsulated region has non-default uncertainty, use it as
-   the default uncertainty for the Cmpregion. Note, the current Frame of
-   an uncertainty Region is assumed to be the same as the base Frame in the 
-   Stc. */
-   if( astTestUnc( this->region ) ) {
-      result = astGetUncFrm( this->region, AST__CURRENT );
-
-/* Otherwise, use the parent method to determine the default uncertainty. */ 
-   } else {
-      result = (* parent_getdefunc)( this_region, status );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the required pointer. */
-   return result;
-}
-
-static void GetRegion( AstStc *this, AstRegion **reg, int *neg, int *status ) {
-/*
-*
-*  Name:
-*     GetRegion
-
-*  Purpose:
-*     Get the encapsulated Region of a Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void GetRegion( AstStc *this, AstRegion **reg, int *neg, int *status ) 
-
-*  Class Membership:
-*     Stc member function 
-
-*  Description:
-*     This function returns a pointer to a Region which is equivalent to 
-*     the supplied Stc. If the Stc has been negated, then the returned
-*     "negated" flag will be set such that it represents the negated Stc.
-*
-*     The current Frames in returned encapsulated Region will be equivalent 
-*     to the base Frame in the FrameSet encapsulated by the parent Region 
-*     structure.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     reg
-*        Address of a location to receive a pointer to the encapsulated 
-*        Region. The current Frame in this region will be equivalent to
-*        the base Frame in the FrameSet 
-*     neg
-*        The value of the Negated attribute to be used with reg. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the encapsulated Region using the returned
-*     pointer will be reflected in the supplied Stc.
-
-*/
-
-/* Initialise */
-   if( reg ) *reg = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Return the component Region pointers. */
-   if( reg ) *reg = astClone( this->region );
-
-/* Initialise the other returned items. Note, the Stc initialiser stored a 
-   deep copy of the supplied encapsulated Region, and so we do not
-   need to worry about attributes of the Region having been changed 
-   after the creation of the Stc. This is different to the CmpMap
-   class which merely clones its supplied component pointers and so has
-   to save copies of the original Invert settings within the CmpMap
-   structure. */
-   if( neg ) *neg = astGetNegated( this->region );
-
-/* If the Stc has been inverted, we modify the boolean operator and
-   negation flags so that they reflect the inverted Stc. */
-   if( astGetNegated( this ) && neg ) *neg = *neg ? 0 : 1;
-}
-
-static const char *GetRegionClass( AstStc *this, int *status ){
-/*
-*+
-*  Name:
-*     astGetRegionClass
-
-*  Purpose:
-*     Get the value of a RegionClass attribute for a Stc.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     const char *astGetRegionClass( AstStc *this )
-
-*  Class Membership:
-*     Stc virtual function 
-
-*  Description:
-*     This function returns a pointer to the value of the RegionClass
-*     attribute for a Stc.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the Stc, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the Stc. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Check the global error status. */   
-   if ( !astOK ) return NULL;
-
-/* Obtain and return the class of the encapsulated Region. */
-   return astGetClass( ((AstStc *) this)->region );
-}
-
-
-static AstKeyMap *GetStcCoord( AstStc *this, int icoord, int *status ){
-/*
-*++
-*  Name:
-c     astGetStcCoord
-f     AST_GETSTCCOORD
-
-*  Purpose:
-*     Return information about an AstroCoords element stored in an Stc.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "specframe.h"
-c     AstKeyMap *astGetStcCoord( AstStc *this, int icoord )
-f     RESULT = AST_GETSTCCOORD( THIS, ICOORD, STATUS )
-
-*  Class Membership:
-*     Stc method.
-
-*  Description:
-*     When any sub-class of Stc is created, the constructor function
-*     allows one or more AstroCoords elements to be stored within the Stc.
-*     This function allows any one of these AstroCoords elements to be
-*     retrieved. The format of the returned information is the same as
-*     that used to pass the original information to the Stc constructor.
-*     That is, the information is returned in a KeyMap structure
-*     containing elements with one or more of the keys given by symbolic
-*     constants AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, 
-*     AST__STCSIZE and AST__STCPIXSZ. 
-*
-*     If the coordinate system represented by the Stc has been changed
-*     since it was created (for instance, by changing its System
-*     attribute), then the sizes and positions in the returned KeyMap 
-*     will reflect the change in coordinate system.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Stc.
-c     icoord
-f     ICOORD = INTEGER (Given)
-*        The index of the AstroCoords element required. The first has index 
-*        one. The number of AstroCoords elements in the Stc can be found using
-c        function astGetStcNcoord.
-f        function AST_GETSTCNCOORD.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetStcCoord()
-f     AST_GETSTCCOORD = INTEGER
-*        A pointer to a new KeyMap containing the required information.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstKeyMap *result;
-   AstMapping *map;
-   AstMapping *smap;
-   AstObject *obj;
-   AstRegion *reg;
-   AstRegion *rereg;
-   AstRegion *srereg;
-   int ikey;
-   int nc;
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the supplied index. */
-   nc = astGetStcNCoord( this );
-   if( icoord < 1 || icoord > nc ) {
-      astError( AST__STCIND, "astGetStcCoord(%s): Supplied AstroCoords "
-                "index (%d) is invalid.", status, astGetClass( this ), icoord );
-
-      if( icoord < 1 ) {
-         astError( AST__STCIND, "The index of the first AstroCoord "
-                   "element is one, not zero." , status);
-      } else if( nc == 0 ) {
-         astError( AST__STCIND, "There are no AstroCoords elements in "
-                   "the supplied %s.", status, astGetClass( this ) );
-      } else if( nc == 1 ) {
-         astError( AST__STCIND, "There is 1 AstroCoords element in "
-                   "the supplied %s.", status, astGetClass( this ) );
-      } else {
-         astError( AST__STCIND, "There are %d AstroCoords elements in "
-                   "the supplied %s.", status, nc, astGetClass( this ) );
-      }
-
-/* If the index is OK, initialise the returned KeyMap to be a copy of the 
-   KeyMap holding information about the required AstroCoords element.*/
-   } else {
-      result = astCopy( this->coord[ icoord - 1 ] );
-
-/* The Regions stored within this KeyMap describe regions within the base
-   Frame of the parent Region structure. If the Mapping from base to current 
-   Frame in the parent Region structure is not a UnitMap, we need to
-   change these to represent regions within the current Frame of the
-   parent Region structure. */
-      map = astGetMapping( ((AstRegion *)this)->frameset, 
-                           AST__BASE, AST__CURRENT );
-      smap = astSimplify( map );
-      frm = astGetFrame( ((AstRegion *)this)->frameset, AST__CURRENT );
-
-/* If the Frame represented by the Region has changed, erase the Names
-   element since they may no longer be correct. */
-      if( !astIsAUnitMap( smap ) ) astMapRemove( result, AST__STCNAME );
-
-/* Loop round keys for which a Region may be stored in the KeyMap. */
-      for( ikey = 0; ikey < NREG; ikey++ ) {
-
-/* If the KeyMap contains a Region for this key, get a pointer to it. */
-         if( astMapGet0A( result, regkey[ ikey ], &obj ) ){
-            reg = (AstRegion *) obj;
-
-/* Sets its RegionFS attribute so that the encapsulated FrameSet will be
-   included in any dump of the Region. This is needed since the returned
-   Region pointer will have no parent Region from which the FrameSet can
-   be determined. */
-            astSetRegionFS( reg, 1 );
-
-/* If necessary, remap the Region into the current Frame, and simplify. */
-            if( !astIsAUnitMap( smap ) ) {
-               rereg = astMapRegion( reg, smap, frm );
-               srereg = astSimplify( rereg );
-               rereg = astAnnul( rereg );
-            } else {
-               srereg = astClone( reg );
-            }
-
-/* Replace the Region in the KeyMap with the remapped Region. */
-            astMapPut0A( result, regkey[ ikey ], srereg, NULL );
-
-/* Free resources */
-            reg = astAnnul( reg );
-            srereg = astAnnul( srereg );
-         }
-      }
-
-      frm = astAnnul( frm );
-      map = astAnnul( map );
-      smap = astAnnul( smap );
-
-/* Annul the returned KeyMap if an error has occurred. */
-      if( !astOK ) result = astAnnul( result );
-   }
-
-/* Return the pointer */
-   return result;
-
-}
-
-static int GetStcNCoord( AstStc *this, int *status ){
-/*
-*++
-*  Name:
-c     astGetStcNCoord
-f     AST_GETSTCNCOORD
-
-*  Purpose:
-*     Return the number of AstroCoords elements stored in an Stc.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "stc.h"
-c     int astGetStcNCoord( AstStc *this )
-f     RESULT = AST_GETSTCNCOORD( THIS, STATUS )
-
-*  Class Membership:
-*     Stc method.
-
-*  Description:
-*     This function returns the number of AstroCoords elements stored in 
-*     an Stc.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Stc.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetStcNCoord()
-f     AST_GETSTCNCOORD = INTEGER
-*        The number of  AstroCoords elements stored in the Stc.
-
-*  Notes:
-*     - Zero will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Return the required value. */
-   return astOK ? this->ncoord : 0;
-
-}
-
-static AstRegion *GetStcRegion( AstStc *this, int *status ) {
-/*
-*++
-*  Name:
-c     astGetStcRegion
-f     AST_GETSTCREGION
-
-*  Purpose:
-*     Obtain a copy of the encapsulated Region within a Stc.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "stc.h"
-c     AstRegion *astGetStcRegion( AstStc *this )
-f     RESULT = AST_GETSTCREGION( THIS, STATUS )
-
-*  Class Membership:
-*     Region method.
-
-*  Description:
-*     This function returns a pointer to a deep copy of the Region
-*     supplied when the Stc was created.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the Stc.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astGetStcRegion()
-f     AST_GETSTCREGION = INTEGER
-*        A pointer to a deep copy of the Region encapsulated within the
-*        supplied Stc.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Return a pointer to a copy of the encapsulated Region. */
-   return astCopy( this->region );
-}
-
-static int GetUseDefs( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetUseDefs
-
-*  Purpose:
-*     Get the value of the UseDefs attribute for a Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int GetUseDefs( AstObject *this_object, int *status ) {
-
-*  Class Membership:
-*     Stc member function (over-rides the protected astGetUseDefs
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the value of the UseDefs attribute for a
-*     Stc, supplying a suitable default.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - The USeDefs value.
-*/
-
-/* Local Variables: */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   int result;                   /* Value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* If the UseDefs value for the Stc has been set explicitly, use the
-   Get method inherited from the parent Region class to get its value. */
-   if( astTestUseDefs( this ) ) {
-      result = (*parent_getusedefs)( this_object, status );
-
-/* Otherwise, supply a default value equal to the UseDefs value of the
-   encapsulated Region. */   
-   } else {
-      result = astGetUseDefs( this->region );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astInitStcVtab_(  AstStcVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a Stc.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void astInitStcVtab( AstStcVtab *vtab, const char *name )
-
-*  Class Membership:
-*     Stc vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the Stc class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstRegionVtab *region;        /* Pointer to Region component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitRegionVtab( (AstRegionVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAStc) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstRegionVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-   vtab->GetRegionClass = GetRegionClass;
-   vtab->GetStcRegion = GetStcRegion;
-   vtab->GetStcCoord = GetStcCoord;
-   vtab->GetStcNCoord = GetStcNCoord;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   region = (AstRegionVtab *) vtab;
-
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_simplify = mapping->Simplify;
-   mapping->Simplify = Simplify;
-
-   parent_setregfs = region->SetRegFS;
-   region->SetRegFS = SetRegFS;
-
-   parent_equal = object->Equal;
-   object->Equal = Equal;
-
-   parent_clearclosed = region->ClearClosed;
-   region->ClearClosed = ClearClosed;
-
-   parent_setclosed = region->SetClosed;
-   region->SetClosed = SetClosed;
-
-   region->TestClosed = TestClosed;
-   region->GetClosed = GetClosed;
-
-   parent_regsetattrib = region->RegSetAttrib;
-   region->RegSetAttrib = RegSetAttrib;
-
-   parent_regclearattrib = region->RegClearAttrib;
-   region->RegClearAttrib = RegClearAttrib;
-
-   parent_clearnegated = region->ClearNegated;
-   region->ClearNegated = ClearNegated;
-
-   parent_setnegated = region->SetNegated;
-   region->SetNegated = SetNegated;
-
-   region->TestNegated = TestNegated;
-   region->GetNegated = GetNegated;
-
-   parent_setmeshsize = region->SetMeshSize;
-   region->SetMeshSize = SetMeshSize;
-
-   parent_clearmeshsize = region->ClearMeshSize;
-   region->ClearMeshSize = ClearMeshSize;
-
-   region->TestMeshSize = TestMeshSize;
-   region->GetMeshSize = GetMeshSize;
-
-   parent_setfillfactor = region->SetFillFactor;
-   region->SetFillFactor = SetFillFactor;
-
-   parent_clearfillfactor = region->ClearFillFactor;
-   region->ClearFillFactor = ClearFillFactor;
-
-   region->TestFillFactor = TestFillFactor;
-   region->GetFillFactor = GetFillFactor;
-
-   parent_getusedefs = object->GetUseDefs;
-   object->GetUseDefs = GetUseDefs;
-
-   parent_getdefunc = region->GetDefUnc;
-   region->GetDefUnc = GetDefUnc;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   region->Overlap = Overlap;
-   region->OverlapX = OverlapX;
-   region->RegBaseBox = RegBaseBox;
-   region->RegBaseMesh = RegBaseMesh;
-   region->RegBasePick = RegBasePick;
-   region->RegPins = RegPins;
-   region->GetBounded = GetBounded;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "Stc", "An IVOA Space-Time-Coords object" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static AstKeyMap *MakeAstroCoordsKeyMap( AstRegion *reg, AstKeyMap *coord, 
-                                         const char *class, int *status ){
-/*
-*  Name:
-*     MakeAstroCoordsKeyMap
-
-*  Purpose:
-*     Create a new KeyMap holding Regions describing a supplied
-*     AstroCoords element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     AstKeyMap *MakeAstroCoordsKeyMap( AstRegion *reg, AstKeyMap *coord,
-*                                       const char *class, int *status )
-
-*  Class Membership:
-*     Stc member function 
-
-*  Description:
-*     This function returns a pointer to a new KeyMap containing elements
-*     which correspond to the components of an STC AstroCoords element.
-*     The element with key AST__STCNAME holds a vector of character
-*     strings containing the names associated with each of the axies.
-*     The other elements of the returned KeyMap such as AST__STCERROR, 
-*     AST__STCRES, etc, hold pointers to Regions describing the error
-*     box, resolution, etc, in the Frame of the supplied Region "reg".
-
-*  Parameters:
-*     reg
-*        Pointer to the Region in which the AstroCoords is defined.
-*     coordId
-*        An ID (not a pointer) to a KeyMap defining a single <AstroCoords> 
-*        element, having elements with keys given by constants AST__STCNAME, 
-*        AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE, 
-*        AST__STCPIXSZ. Any of these elements may be omitted, but no other 
-*        elements should be included. If supplied, the AST__STCNAME element 
-*        should be a vector of character string pointers holding the "Name" 
-*        item for each axis. Any other supplied elements should be scalar 
-*        elements, each  holding a pointer to a Region describing the 
-*        associated item of ancillary information (error, resolution, size, 
-*        pixel size or value). These Regions should refer to the coordinate 
-*        system represented by "region". 
-*     class
-*        Pointer to a string holding the STC class name.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to the new KeyMap.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Pointer to current Frame */
-   AstFrameSet *fs;              /* Pointer to conversion FrameSet */
-   AstKeyMap *result;            /* Pointer value to return */
-   AstMapping *map;              /* Pointer to conversion Mapping */
-   AstObject *obj;               /* Pointer to Object stored in supplied KeyMap */
-   AstRegion *areg;              /* Pointer to remapped Region */
-   AstRegion *sareg;             /* Pointer to simplified remapped Region */
-   const char *key;              /* Current key */
-   int j;                        /* Index of key within KeyMap */
-   int naxes;                    /* Number of axes in region */
-   int nkey;                     /* Number of keys in supplied KeyMap */
-   int nv;                       /* Number of values in KeyMap element */
-   int type;                     /* Data type of entry */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if( !astOK ) return result;
-
-/* Confirm it is a genuine KeyMap pointer. */
-   if( !astIsAKeyMap( coord ) && astOK ) {
-      astError( AST__STCKEY, "astInitStc(%s): Supplied pointer is for "
-                "a %s, not a KeyMap.", status, class, astGetClass( coord ) );
-   }
-
-/* Initialise the new KeyMap to be a copy of the supplied KeyMap. */
-   result = astCopy( coord );
-
-/* Check the supplied KeyMap is usable. */
-   naxes = astGetNaxes( reg );
-   nkey = astMapSize( result );
-   for( j = 0; j < nkey; j++ ) {
-      key = astMapKey( result, j );
-      if( key ) {
-         nv = astMapLength( result, key );
-         type = astMapType( result, key );
-
-/* Check no unknown keys are present in the KeyMap. */
-         if( strcmp( key, AST__STCNAME ) &&
-             strcmp( key, AST__STCVALUE ) &&
-             strcmp( key, AST__STCERROR ) &&
-             strcmp( key, AST__STCRES ) &&
-             strcmp( key, AST__STCSIZE ) &&
-             strcmp( key, AST__STCPIXSZ ) ) {
-            astError( AST__STCKEY, "astInitStc(%s): Unknown key "
-                      "\"%s\" supplied in an AstroCoords list.", status,
-                      class, key );
-            break;
-
-/* Check that the "Name" element is a vector of "naxes" strings. */
-         } else if( !strcmp( key, AST__STCNAME ) ) {
-            if( nv != naxes ) {
-               astError( AST__STCKEY, "astInitStc(%s): %d \"%s\" "
-                         "values supplied in an AstroCoords list, but "
-                         "the Stc has %d axes. ", status, class, nv, key,
-                         naxes );
-               break;
-   
-            } else if( type != AST__STRINGTYPE ) {
-               astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
-                         "values supplied in an AstroCoords list are "
-                         "not character strings. ", status, class, key );
-               break;
-            }
-
-/* Check that all other elements are scalar. */   
-         } else if( nv != 1 ) {
-            astError( AST__STCKEY, "astInitStc(%s): %d \"%s\" "
-                      "values supplied in an AstroCoords list, but "
-                      "only one is allowed. ", status, class, nv, key );
-            break;
-   
-/* Check that all other elements are AST Object pointers. */   
-         } else if( type != AST__OBJECTTYPE ) {
-            astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
-                      "value supplied in an AstroCoords list is "
-                      "not an AST Object pointer. ", status, class, key );
-            break;
-
-/* Check that the Object pointers are not NULL. */
-         } else {
-            astMapGet0A( result, key, &obj );
-            if( astOK ) {
-               if( !obj ) {
-                  astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
-                            "value supplied in an AstroCoords list is "
-                            "a NULL pointer. ", status, class, key );
-                  break;
-
-/* Check that the Object pointers are Region pointers. */
-               } else if( !astIsARegion( obj ) ){
-                  astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
-                            "value supplied in an AstroCoords list is "
-                            "a %s, not a Region. ", status, class, key,
-                            astGetClass(obj) );
-                  obj = astAnnul( obj );
-                  break;
-
-/* Check that the Region pointers can be converted to the coordinate
-   system represented by the supplied Region. */
-               } else {
-                  fs = astConvert( obj, reg, "" );
-                  if( !fs ) {
-                     obj = astAnnul( obj );
-                     astError( AST__STCKEY, "astInitStc(%s): The \"%s\" "
-                               "value supplied in an AstroCoords list "
-                               "cannot be converted to the coordinate "
-                               "system of its parent Stc object.", status, class, 
-                               key );
-                     break;
-
-/* If necessary, map the Region into the same frame as the supplied
-   Region, and replace the Region in the returned KeyMap with the
-   remapped Region. Also set the RegionFS attribute to indicate that the 
-   FrameSet in the Region does not need to be dumped if it contains a 
-   UnitMap. */
-                  } else {
-                     map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-                     if( !astIsAUnitMap( map ) ) {
-                        frm = astGetFrame( fs, AST__CURRENT );
-                        areg = astMapRegion( (AstRegion *) obj, map, frm );
-                        sareg = astSimplify( areg );
-                        astSetRegionFS( sareg, 0 );
-                        astMapPut0A( result, key, sareg, NULL );
-                        areg = astAnnul( areg );
-                        sareg = astAnnul( sareg );
-                        frm = astAnnul( frm );
-                     } else {
-                        astSetRegionFS( (AstRegion *) obj, 0 );
-                     }
-                     map = astAnnul( map );
-                     fs = astAnnul( fs );
-
-                  }
-                  obj = astAnnul( obj );
-               }
-            }
-         }
-      }
-   }
-
-/* Free the returned KeyMap if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     Stc member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstStc *this;       /* Pointer to STC structure */
-   int i;              /* Loop count */
-   int result;         /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the STC structure. */
-   this = (AstStc *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->region, mode, extra, fail );
-   for( i = 0; i < this->ncoord; i++ ) {
-      if( !result ) result = astManageLock( this->coord[ i ], mode,
-                                            extra, fail );
-   }
-
-   return result;
-
-}
-#endif
-
-static int Overlap( AstRegion *this, AstRegion *that, int *status ){
-/*
-*  Name:
-*     Overlap
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int Overlap( AstRegion *this, AstRegion *that, int *status ) 
-
-*  Class Membership:
-*     Stc member function (over-rides the astOverlap method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function returns an integer value indicating if the two
-*     supplied Regions overlap. The two Regions are converted to a commnon
-*     coordinate system before performing the check. If this conversion is 
-*     not possible (for instance because the two Regions represent areas in
-*     different domains), then the check cannot be performed and a zero value 
-*     is returned to indicate this.
-
-*  Parameters:
-*     this
-*        Pointer to the first Region.
-*     that
-*        Pointer to the second Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     astOverlap()
-*        A value indicating if there is any overlap between the two Regions.
-*        Possible values are:
-*
-*        0 - The check could not be performed because the second Region
-*            could not be mapped into the coordinate system of the first 
-*            Region.
-*
-*        1 - There is no overlap between the two Regions.
-*
-*        2 - The first Region is completely inside the second Region.
-*
-*        3 - The second Region is completely inside the first Region.
-*
-*        4 - There is partial overlap between the two Regions.
-*
-*        5 - The Regions are identical.
-*
-*        6 - The second Region is the negation of the first Region.
-
-*  Notes:
-*     - The returned values 5 and 6 do not check the value of the Closed 
-*     attribute in the two Regions. 
-*     - A value of zero will be returned if this function is invoked with the 
-*     AST error status set, or if it should fail for any reason.
-
-*/
-
-/* Check the inherited status. */
-   if ( !astOK ) return 0;
-
-/* Invoke the "astOverlap" method on the encapsulated Region. */
-   return astOverlap( ((AstStc *)this)->region, that );
-}
-
-static int OverlapX( AstRegion *that, AstRegion *this, int *status ){
-/*
-*  Name:
-*     OverlapX
-
-*  Purpose:
-*     Test if two regions overlap each other.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int OverlapX( AstRegion *that, AstRegion *this ) 
-
-*  Class Membership:
-*     Stc member function (over-rides the astOverlapX method inherited 
-*     from the Region class).
-
-*  Description:
-*     This function performs the processing for the public astOverlap
-*     method and has exactly the same interface except that the order
-*     of the two arguments is swapped. This is a trick to allow
-*     the astOverlap method to be over-ridden by derived classes on
-*     the basis of the class of either of its two arguments.
-*
-*     See the astOverlap method for details of the interface.
-
-*/
-
-/* Local Variables: */
-   int result;
-
-/* Check the inherited status. */
-   if ( !astOK ) return 0;
-
-/* Invoke the "astOverlapX" method on the encapsulated Region. */
-   result = astOverlap( ((AstStc *)that)->region, this );
-
-/* Swap the returned values 2 and 3 to take account of the swapping of
-   the regions.*/
-   if( result == 2 ) {
-      result = 3;
-   } else if( result == 3 ) {
-      result = 2;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status ){
-/*
-*  Name:
-*     RegBaseBox
-
-*  Purpose:
-*     Returns the bounding box of an un-negated Region in the base Frame of 
-*     the encapsulated FrameSet.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void RegBaseBox( AstRegion *this, double *lbnd, double *ubnd, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astRegBaseBox protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns the upper and lower axis bounds of a Region in 
-*     the base Frame of the encapsulated FrameSet, assuming the Region
-*     has not been negated. That is, the value of the Negated attribute
-*     is ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     lbnd
-*        Pointer to an array in which to return the lower axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     ubnd
-*        Pointer to an array in which to return the upper axis bounds
-*        covered by the Region in the base Frame of the encapsulated
-*        FrameSet. It should have at least as many elements as there are 
-*        axes in the base Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Invoke the method on the encapsulated Region. */
-   astRegBaseBox( ((AstStc *)this)->region, lbnd, ubnd );
-}
-
-static AstPointSet *RegBaseMesh( AstRegion *this, int *status ){
-/*
-*  Name:
-*     RegBaseMesh
-
-*  Purpose:
-*     Create a new PointSet containing a mesh of points on the boundary of a 
-*     Region in its base Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     AstPointSet *astRegBaseMesh( AstRegion *this, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astRegBaseMesh protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function creates a new PointSet containing a mesh of points on the
-*     boundary of the Region. The points refer to the base Frame of
-*     the encapsulated FrameSet.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the PointSet. Annul the pointer using astAnnul when it 
-*     is no longer needed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return NULL;
-
-/* Invoke the astRegMesh method on the encapsulated Region. This returns
-   a mesh in the current Frame of the encapsulated Region which is the same
-   as the base Frame of the Stc Region. */
-   return astRegMesh( ((AstStc *)this)->region );
-}
-
-static AstRegion *RegBasePick( AstRegion *this_region, int naxes, 
-                               const int *axes, int *status ){
-/*
-*  Name:
-*     RegBasePick
-
-*  Purpose:
-*     Return a Region formed by picking selected base Frame axes from the
-*     supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     AstRegion *RegBasePick( AstRegion *this, int naxes, const int *axes, 
-*                             int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astRegBasePick protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function attempts to return a Region that is spanned by selected 
-*     axes from the base Frame of the encapsulated FrameSet of the supplied 
-*     Region. This may or may not be possible, depending on the class of
-*     Region. If it is not possible a NULL pointer is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     naxes
-*        The number of base Frame axes to select.
-*     axes
-*        An array holding the zero-based indices of the base Frame axes
-*        that are to be selected.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the Region, or NULL if no region can be formed.
-
-*  Notes:
-*    - A NULL pointer is returned if an error has already occurred, or if
-*    this function should fail for any reason.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Invoke the astRegBaePick method on the encapsulated Region. */
-   return astRegBasePick( ((AstStc *)this_region)->region, naxes, axes );
-}
-
-static void RegClearAttrib( AstRegion *this_region, const char *attrib, 
-                            char **base_attrib, int *status ) {
-/*
-*  Name:
-*     RegClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a Region.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void RegClearAttrib( AstRegion *this, const char *attrib, 
-*                          char **base_attrib, int *status ) 
-
-*  Class Membership:
-*     Stc method (over-rides the astRegClearAttrib method inherited from
-*     the Region class).
-
-*  Description:
-*     This function clears the value of an attribute in both the base and
-*     current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     attrib
-*        Pointer to a null terminated string containing an attribute name. 
-*        NOTE, IT SHOULD BE ENTIRELY LOWER CASE. 
-*     base_attrib
-*        Address of a location at which to return a pointer to the null 
-*        terminated string holding the name of the attribute which was
-*        cleared in the base Frame of the encapsulated FrameSet. This may 
-*        differ from the supplied name if the supplied name contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstStc *this; 
-   char *batt;
-   int rep;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Stc  structure. */
-   this = (AstStc *) this_region;
-
-/* Use the RegClearAttrib method inherited from the parent class to clear 
-   the attribute in the current and base Frames in the FrameSet encapsulated 
-   by the parent Region structure. */
-   (*parent_regclearattrib)( this_region, attrib, &batt, status );
-
-/* Now clear the base Frame attribute in the encapsulated Region (the current 
-   Frame within the encapsulated Region is equivalent to the base Frame in the
-   parent Region structure). Annul any "attribute unknown" error that results 
-   from attempting to do this. */
-   if( astOK ) {
-      rep = astReporting( 0 );
-      astRegClearAttrib( this->region, batt, NULL );
-      if( astStatus == AST__BADAT ) astClearStatus;
-      astReporting( rep );
-   }
-
-/* If required, return the base Frame attribute name, otherwise free it. */
-   if( base_attrib ) {
-      *base_attrib = batt;
-   } else {
-      batt = astFree( batt );
-   }
-}
-
-static int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-                    int **mask, int *status ){
-/*
-*  Name:
-*     RegPins
-
-*  Purpose:
-*     Check if a set of points fall on the boundary of a given Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int RegPins( AstRegion *this, AstPointSet *pset, AstRegion *unc,
-*                  int **mask, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astRegPins protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a flag indicating if the supplied set of
-*     points all fall on the boundary of the given Stc. 
-*
-*     Some tolerance is allowed, as specified by the uncertainty Region
-*     stored in the supplied Stc "this", and the supplied uncertainty
-*     Region "unc" which describes the uncertainty of the supplied points.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     pset
-*        Pointer to the PointSet. The points are assumed to refer to the 
-*        base Frame of the FrameSet encapsulated by "this".
-*     unc
-*        Pointer to a Region representing the uncertainties in the points
-*        given by "pset". The Region is assumed to represent the base Frame 
-*        of the FrameSet encapsulated by "this". Zero uncertainity is assumed 
-*        if NULL is supplied.
-*     mask
-*        Pointer to location at which to return a pointer to a newly
-*        allocated dynamic array of ints. The number of elements in this
-*        array is equal to the value of the Npoint attribute of "pset".
-*        Each element in the returned array is set to 1 if the
-*        corresponding position in "pset" is on the boundary of the Region
-*        and is set to zero otherwise. A NULL value may be supplied
-*        in which case no array is created. If created, the array should
-*        be freed using astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the points all fall on the boundary of the given
-*     Region, to within the tolerance specified. Zero otherwise.
-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return 0;
-
-/* Invoke the method on the encapsulated Region. */
-   return astRegPins( ((AstStc *)this)->region, pset, unc, mask );
-}
-
-static void RegSetAttrib( AstRegion *this_region, const char *setting, 
-                          char **base_setting, int *status ) {
-/*
-*  Name:
-*     RegSetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void RegSetAttrib( AstRegion *this, const char *setting, 
-*                        char **base_setting, int *status )
-
-*  Class Membership:
-*     Stc method (over-rides the astRegSetAttrib method inherited from
-*     the Region class).
-
-*  Description:
-*     This function assigns an attribute value to both the base and
-*     current Frame in the FrameSet encapsulated within a Region, without
-*     remapping either Frame. 
-*
-*     No error is reported if the attribute is not recognised by the base 
-*     Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     setting
-*        Pointer to a null terminated attribute setting string. NOTE, IT 
-*        SHOULD BE ENTIRELY LOWER CASE. The supplied string will be 
-*        interpreted using the public interpretation implemented by
-*        astSetAttrib. This can be different to the interpretation of the 
-*        protected accessor functions. For instance, the public
-*        interpretation of an unqualified floating point value for the 
-*        Epoch attribute is to interpet the value as a gregorian year,
-*        but the protected interpretation is to interpret the value as an 
-*        MJD.
-*     base_setting
-*        Address of a location at which to return a pointer to the null 
-*        terminated attribute setting string which was applied to the
-*        base Frame of the encapsulated FrameSet. This may differ from
-*        the supplied setting if the supplied setting contains an axis 
-*        index and the current->base Mapping in the FrameSet produces an
-*        axis permutation. The returned pointer should be freed using
-*        astFree when no longer needed. A NULL pointer may be supplied in 
-*        which case no pointer is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *keymap;
-   AstObject *obj;
-   AstRegion *reg;   
-   AstStc *this; 
-   char *bset;
-   int i;            
-   int ikey;         
-   int rep;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the Stc structure. */
-   this = (AstStc *) this_region;
-
-/* Use the RegSetAttrib method inherited from the parent class to apply the 
-   setting to the current and base Frames in the FrameSet encapsulated by the 
-   parent Region structure. */
-   (*parent_regsetattrib)( this_region, setting, &bset, status );
-
-/* Now apply the base Frame setting to the encapsulated Region (the current 
-   Frame within the encapsulated Region is equivalent to the base Frame in the
-   parent Region structure). Annul any "attribute unknown" error that results 
-   from attempting to do this. Also do any AstroCoords in the Stc. */
-   if( astOK ) {
-      rep = astReporting( 0 );
-      astRegSetAttrib( this->region, bset, NULL );
-      if( astStatus == AST__BADAT ) astClearStatus;
-
-/* Loop round all AstroCoords elements. */
-      for( i = 0; i < this->ncoord; i++ ) {
-
-/* Get a pointer to the KeyMap holding a description of the current
-   AstroCoords element. */
-         keymap = this->coord[ i ];
-
-/* Loop round all the elements of this KeyMap which may hold a Region
-   pointer. */
-         for( ikey = 0; ikey < NREG; ikey++ ) {
-
-/* If the KeyMap contains a Region for this key, get a pointer to it. */
-            if( astMapGet0A( keymap, regkey[ ikey ], &obj ) ){
-               reg = (AstRegion *) obj;
-
-/* Modify it by applying the attribute setting. */
-               astRegSetAttrib( reg, bset, NULL );
-               if( astStatus == AST__BADAT ) astClearStatus;
-
-/* Annul the pointer. */
-               reg = astAnnul( reg );
-            }
-         }
-      }
-
-      astReporting( rep );
-   }
-
-/* If required, return the base Frame setting string, otherwise free it. */
-   if( base_setting ) {
-      *base_setting = bset;
-   } else {
-      bset = astFree( bset );
-   }
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astSetAttrib method inherited
-*     from the Region class).
-
-*  Description:
-*     This function assigns an attribute value for a Stc, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Vaiables: */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-  
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* (none as yet) */
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Define a macro to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-/* Use this macro to report an error if a read-only attribute has been
-   specified. */
-   if ( MATCH( "regionclass" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-}
-
-static void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status ) {
-/*
-*  Name:
-*     SetRegFS
-
-*  Purpose:
-*     Stores a new FrameSet in a Region
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     void SetRegFS( AstRegion *this_region, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     Stc method (over-rides the astSetRegFS method inherited from
-*     the Region class).
-
-*  Description:
-*     This function creates a new FrameSet and stores it in the supplied
-*     Region. The new FrameSet contains two copies of the supplied
-*     Frame, connected by a UnitMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Region.
-*     frm
-*        The Frame to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstRegion *creg;        /* Pointer to encapsulated Region structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the parent method to store the FrameSet in the parent Region
-   structure. */
-   (* parent_setregfs)( this_region, frm, status );
-
-/* If the encapsulated Region has a dummy FrameSet use this method
-   recursively to give it the same FrameSet. */
-   creg = ((AstStc *) this_region )->region;
-   if( creg && !astGetRegionFS( creg ) ) astSetRegFS( creg, frm );
-
-}
-
-static AstMapping *Simplify( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     Simplify
-
-*  Purpose:
-*     Simplify a Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "region.h"
-*     AstMapping *Simplify( AstMapping *this, int *status )
-
-*  Class Membership:
-*     Stc method (over-rides the astSimplify method inherited from
-*     the Region class).
-
-*  Description:
-*     This function simplifies a Stc to eliminate redundant
-*     computational steps, or to merge separate steps which can be
-*     performed more efficiently in a single operation.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A new pointer to the (possibly simplified) Region.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Current Frame */
-   AstKeyMap *keymap;            /* KeyMap holding stroCoords element */
-   AstMapping *map;              /* Base->current Mapping */
-   AstObject *obj;               /* Pointer to object retrieved from keymap */
-   AstRegion *newreg;            /* New encapsulated Region */
-   AstRegion *reg;               /* AstroCoords Region pointer */
-   AstRegion *treg;              /* Temporary Region pointer */
-   AstStc *stc;                  /* Returned Stc Structure. */
-   AstStc *temp;                 /* Temporary Stc pointer */
-   int i;                        /* Index of current AstroCoords element */
-   int ikey;                     /* Index of key to be tested */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Invoke the Simplify method of the parent Region class. This simplifies
-   the FrameSet and uncertainty Region in the parent Region structure. */
-   stc = (AstStc *) (AstRegion *) (* parent_simplify)( this_mapping, status );
-
-/* If the Stc is negated, we can perform a simplication by transferring
-   the negated state from the Stc itself to the encapsulated Region. */
-   if( astGetNegated( stc ) ) {
-
-/* Ensure that modifying "stc" will not modify the supplied Stc, by
-   creating a copy of the supplied Stc, if this has not already been done. */
-      if( stc == (AstStc *) this_mapping ) {
-         temp = (AstStc *) astCopy( stc );
-         (void) astAnnul( stc );
-         stc = temp;
-      }
-
-/* Modify "temp" by negating both the Stc structure and its encapsulated 
-   Region. */
-      astNegate( stc );
-      astNegate( stc->region );
-
-   }
-
-/* Get the base->current Mapping from the parent Region structure, and
-   the current Frame. */
-   map = astGetMapping( ((AstRegion *) stc)->frameset, AST__BASE, AST__CURRENT );
-   frm = astGetFrame( ((AstRegion *) stc)->frameset, AST__CURRENT );
-
-/* We may be able to perform some more simplication on the encapsulated 
-   Region itself. If the above mapping is not a unit map, remap the 
-   encapsulated Region into the current Frame of the parent Region structure 
-   and simplify it. This transfers complication from the Mapping in the
-   parent Region structure to the encapsulated Region. */
-   if( !astIsAUnitMap( map ) ) {
-      treg = astMapRegion( stc->region, map, frm );
-      newreg = astSimplify( treg );
-      treg = astAnnul( treg );
-
-/* If the base->current Mapping in the parent Region structure is a unit
-   map, simplification of the whole Stc is possible if the encapsulated
-   Region (without any remapping) can be simplied. */
-   } else {
-      newreg = astSimplify( stc->region );
-   }   
-
-/* If the encapsulated Region has been changed, store it in the returned
-   Stc. */
-   if( newreg != stc->region ) {
-
-/* Ensure that modifying "stc" will not modify the supplied Stc, by
-   creating a copy of the supplied Stc, if this has not already been done. */
-      if( stc == (AstStc *) this_mapping ) {
-         temp = (AstStc *) astCopy( stc );
-         (void) astAnnul( stc );
-         stc = temp;
-      }
-
-/* Store the new region in "stc", annulling the existing Region. */
-      if( stc ) {
-         (void) astAnnul( stc->region );
-         stc->region = astClone( newreg );
-      }
-
-/* The encapsulated Region now represents an area in the current Frame 
-   represented by the supplied Stc. Since the encapsulated Region is
-   defined as being in the base Frame of the FrameSet in the parent
-   Region structure, the parent FrameSet should just be a UnitMap. Modify
-   it appropriately (if it not already a UnitMap). */
-      if( !astIsAUnitMap( map ) ) astSetRegFS( stc, frm );
-   } 
-
-/* Free resources */
-   newreg = astAnnul( newreg );
-
-/* Now we do a similar process on any Regions held within an AstroCoords
-   elements. Loop round all AstroCoords elements. */
-   if( stc ) {
-      for( i = 0; i < stc->ncoord; i++ ) {
-   
-/* Get a pointewr to the KeyMap holding a description of the current
-   AstroCoords element. */
-         keymap = stc->coord[ i ];
-   
-/* Loop round all the elements of this KeyMap which may hold a Region
-   pointer. */
-         for( ikey = 0; ikey < NREG; ikey++ ) {
-   
-/* If the KeyMap contains a Region for this key, get a pointer to it. */
-            if( astMapGet0A( keymap, regkey[ ikey ], &obj ) ){
-               reg = (AstRegion *) obj;
-   
-/* We have two tasks now, firstly to ensure that this AstroCoords Region 
-   describes an area in the base Frame of the FrameSet in the parent
-   Region structure (which may have been changed by the earlier
-   simplications performed by this function), and secondly, to attempt to
-   simplify the Region.
-   
-   The Stc structure addressed by the "stc" pointer will have a current
-   Frame given by "frm". This will also be its base Frame, and the
-   base->current Mapping will consequently be a UnitMap. The Mapping from
-   the original base Frame to the new base Frame is given by "map". Unless 
-   this is a UnitMap, we need to remap the Region.*/
-               if( !astIsAUnitMap( map ) ) {
-                  treg = astMapRegion( reg, map, frm );
-               } else {
-                  treg = astClone( reg );
-               }
-   
-/* Now attempt to simplify the Region.*/
-               newreg = astSimplify( treg );
-   
-/* If the Region has been changed by either of these steps, we need to
-   store the modified Region back in the "stc" structure which is being
-   returned. But we need to be careful we do not modify the supplied Stc 
-   structure. */
-               if( newreg != reg ) {
-   
-                  if( stc == (AstStc *) this_mapping ) {
-                     temp = astCopy( stc );
-                     (void) astAnnul( stc );
-                     stc = temp;
-                     keymap = temp->coord[ i ];
-                  }
-   
-                  astMapPut0A( keymap, regkey[ ikey ], newreg, regcom[ ikey ] );
-                  
-               }
-   
-/* Free resources */
-               reg = astAnnul( reg );
-               treg = astAnnul( treg );
-               newreg = astAnnul( newreg );
-   
-            }
-         }
-      }
-   }
-
-/* Free resources */
-   map = astAnnul( map );
-   frm = astAnnul( frm );
-   
-/* If an error occurred, annul the returned Mapping. */
-   if ( !astOK ) stc = astAnnul( stc );
-
-/* Return the result. */
-   return (AstMapping *) stc;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a Stc.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astTestAttrib protected
-*     method inherited from the Region class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a Stc's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   int len;                      /* Length of attrib string */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Read-only attributes. */
-/* --------------------- */
-/* Test if the attribute name matches any of the read-only attributes
-   of this class. If it does, then return zero. */
-   if ( !strcmp( attrib, "regionclass" ) ) {
-      result = 0;
-
-/* Not recognised. */
-/* --------------- */
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this_mapping, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a Stc to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     Stc member function (over-rides the astTransform method inherited
-*     from the Region class).
-
-*  Description:
-*     This function takes a Stc and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Region.
-*     This implies applying each of the Stc's encapsulated Region in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the Stc being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *ps;              /* Pointer to PointSet */
-   AstPointSet *pset_tmp;        /* Pointer to PointSet holding base Frame positions*/
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstRegion *reg;               /* Pointer to encapsulated Region */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   double **ptr;                 /* Pointer to axis values */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int coord;                    /* Zero-based index for coordinates */
-   int good;                     /* Is the point inside the Stc? */
-   int ncoord_out;               /* No. of coordinates per output point */
-   int ncoord_tmp;               /* No. of coordinates per base Frame point */
-   int neg;                      /* Negated value for encapsulated Region */
-   int neg_old;                  /* Original Negated flag */
-   int npoint;                   /* No. of points */
-   int point;                    /* Loop counter for points */
-   int rep;                      /* Original error reporting status */
-   int status_value;                   /* AST status value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a Pointer to the Stc structure */
-   this = (AstStc *) this_mapping;
-
-/* Get the encapsulated Region, and the Negated value which should be used 
-   with it. The returned values take account of whether the supplied Stc has 
-   itself been Negated or not. The returned Region represent a region within 
-   the base Frame of the FrameSet encapsulated by the parent Region 
-   structure. */
-   GetRegion( this, &reg, &neg, status );
-
-/* Temporarily set the Negated attribute to the required value.*/
-   neg_old = astGetNegated( reg );
-   astSetNegated( reg, neg );
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Region class. This function validates
-   all arguments and generates an output PointSet if necessary, containing 
-   a copy of the input PointSet. */
-   result = (*parent_transform)( this_mapping, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* First use the encapsulated FrameSet in the parent Region structure to 
-   transform the supplied positions from the current Frame in the 
-   encapsulated FrameSet (the Frame represented by the Stc), to the 
-   base Frame (the Frame in which the encapsulated Region are defined). Note,
-   the returned pointer may be a clone of the "in" pointer, and so we 
-   must be carefull not to modify the contents of the returned PointSet. */
-   pset_tmp = astRegTransform( this, in, 0, NULL, NULL );
-
-/* Now transform this PointSet using the encapsulated Region. */
-   ps = astTransform( reg, pset_tmp, 0, NULL );
-
-/* Determine the numbers of points and coordinates per point for these base
-   Frame PointSets and obtain pointers for accessing the base Frame and output 
-   coordinate values. */
-   npoint = astGetNpoint( pset_tmp );
-   ncoord_tmp = astGetNcoord( pset_tmp );
-   ptr = astGetPoints( ps );      
-   ncoord_out = astGetNcoord( result );
-   ptr_out = astGetPoints( result );
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if ( astOK ) {
-
-      for ( point = 0; point < npoint; point++ ) {
-         good = 0;
-
-         for ( coord = 0; coord < ncoord_tmp; coord++ ) {
-            if( ptr[ coord ][ point ] != AST__BAD ) {
-               good = 1;
-               break;
-            }
-         }      
-
-         if( !good ) {
-            for ( coord = 0; coord < ncoord_out; coord++ ) {
-               ptr_out[ coord ][ point ] = AST__BAD;
-            }
-         }      
-      }
-   }
-
-/* Re-instate the original value for the Negated attribute of the 
-   encapsulated Region. Do this even if an error has occurred. */
-   status_value = astStatus;
-   astClearStatus;
-   rep = astReporting( 0 );
-   if( reg ) astSetNegated( reg, neg_old );
-   astReporting( rep );
-   astSetStatus( status_value );
-   
-/* Free resources. */
-   reg = astAnnul( reg );
-   ps = astAnnul( ps );
-   pset_tmp = astAnnul( pset_tmp );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-
-/* Stc Attributes: */
-/* =============== */
-
-/*
-*att++
-*  Name:
-*     RegionClass
-
-*  Purpose:
-*     The AST class name of the Region encapsulated within an Stc
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String, read-only.
-
-*  Description:
-*     This is a read-only attribute giving the AST class name of the
-*     Region encapsulated within an Stc (that is, the class of the Region 
-*     which was supplied when the Stc was created).
-
-*  Applicability:
-*     Stc
-*        All Stc objects this attribute.
-*att--
-*/
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for Stc objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for Stc objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Regions within the Stc.
-*/
-
-/* Local Variables: */
-   AstStc *in;                /* Pointer to input Stc */
-   AstStc *out;               /* Pointer to output Stc */
-   int i;                     /* AstroCoords index */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output Stcs. */
-   in = (AstStc *) objin;
-   out = (AstStc *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Regions, etc,  from the output Stc. */
-   out->region = NULL;
-   out->coord = NULL;
-   out->ncoord = 0;
-
-/* Make a copy of the Region and store a pointer to it in the output Stc 
-   structure. */
-   out->region = astCopy( in->region );
-
-/* Copy any memory holding AstroCoords values */
-   if( in->coord && in->ncoord ) {
-      out->ncoord = in->ncoord;
-      out->coord = astMalloc( sizeof(AstKeyMap *) * (size_t)in->ncoord );
-      if( out->coord ) {
-         for( i = 0; i < in->ncoord; i++ ) {
-            out->coord[ i ] = astCopy( in->coord[ i ] );
-         }
-      }
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for Stc objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for Stc objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstStc *this;              /* Pointer to Stc */
-   int i;                     /* AstroCoords index */
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) obj;
-
-/* Annul the pointer to the encapsulated Region. */
-   this->region = astAnnul( this->region );
-
-/* Free any memory holding AstroCoords values */
-   if( this->coord ) {
-      for( i = 0; i < this->ncoord; i++ ) {
-         this->coord[ i ] = astAnnul( this->coord[ i ] );
-      }
-      this->coord = astFree( this->coord );
-   }
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for Stc objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the Stc class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Stc whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 150          /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstStc *this;                 /* Pointer to the Stc structure */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   int ico;                      /* Loop counter for KeyMaps */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the Stc structure. */
-   this = (AstStc *) this_object;
-
-/* Write out values representing the instance variables for the Stc
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Encapsulated Region. */
-/* -------------------- */
-   astWriteObject( channel, "Region", 1, 1, this->region,
-                   "STC Region" );
-
-/* AstroCoords info */
-/* ---------------- */
-   astWriteInt( channel, "Ncoord", ( this->ncoord != 0 ), 0, this->ncoord,
-                "Number of AstroCoords elements" );
-
-   for ( ico = 1; ico <= this->ncoord; ico++ ) {
-      (void) sprintf( key, "Coord%d", ico );
-      (void) sprintf( comment, "AstroCoords number %d", ico );
-      astWriteObject( channel, key, 1, 1, this->coord[ ico - 1 ],
-                      comment );
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStc and astCheckStc functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(Stc,Region)
-astMAKE_CHECK(Stc)
-
-AstStc *astInitStc_( void *mem, size_t size, int init, AstStcVtab *vtab, 
-                     const char *name, AstRegion *region, int ncoords, 
-                     AstKeyMap **coords, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStc
-
-*  Purpose:
-*     Initialise a Stc.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stc.h"
-*      AstStc *astInitStc( void *mem, size_t size, int init, AstStcVtab *vtab, 
-*                          const char *name, AstRegion *region, int ncoords, 
-*                          AstKeyMap **coords )
-
-*  Class Membership:
-*     Stc initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new Stc object. It allocates memory (if necessary) to
-*     accommodate the Stc plus any additional data associated with the
-*     derived class. It then initialises a Stc structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a Stc at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the Stc is to be initialised.
-*        This must be of sufficient size to accommodate the Stc data
-*        (sizeof(Stc)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the Stc (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        Stc structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the Stc's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new Stc.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     region
-*        Pointer to the Region represented by the Stc.
-*     ncoords
-*        Number of KeyMap pointers supplied in "coords". Can be zero.
-*        Ignored if "coords" is NULL.
-*     coords
-*        Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-*        "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords> 
-*        element, and should have elements with keys given by constants 
-*        AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-*        AST__STCPIXSZ. Any of these elements may be omitted, but no other 
-*        elements should be included. If supplied, the AST__STCNAME element 
-*        should be a vector of character string pointers holding the "Name" 
-*        item for each axis. Any other supplied elements should be scalar 
-*        elements, each  holding a pointer to a Region describing the 
-*        associated item of ancillary information (error, resolution, size, 
-*        pixel size or value). These Regions should describe a volume within 
-*        the coordinate system represented by "region". 
-
-*  Returned Value:
-*     A pointer to the new Stc.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *frm;              /* Current Frame in supplied Stc */
-   AstMapping *map;              /* Base -> Current Mapping in supplied Stc */
-   AstRegion *reg;               /* Copy of supplied Region */
-   AstStc *new;                  /* Pointer to new Stc */
-   int i;                        /* AstroCoords index */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitStcVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* If the supplied Region is an Stc, create a new Region by mapping the 
-   encapsulated Region within the supplied Stc into the current Frame of the 
-   Stc. */
-   if( astIsAStc( region ) ) {
-      map = astGetMapping( region->frameset, AST__BASE, AST__CURRENT );
-      frm = astGetFrame( region->frameset, AST__CURRENT );
-      reg = astMapRegion( ((AstStc *) region)->region, map, frm );      
-      frm = astAnnul( frm );
-      map = astAnnul( map );
-
-/* Otherwise, just take a copy of the supplied Region. */
-   } else {
-      reg = astCopy( region );
-   }
-
-/* Initialise a Region structure (the parent class) as the first component
-   within the Stc structure, allocating memory if necessary. A NULL
-   PointSet is suppled as the encapsulated Region will perform the function
-   of defining the Region shape. The base Frame of the FrameSet in the
-   parent Region structure will be the same as the current Frames of the 
-   FrameSets in the two encapsulated Region. */
-   if ( astOK ) {
-      new = (AstStc *) astInitRegion( mem, size, 0, (AstRegionVtab *) vtab, 
-                                      name, reg, NULL, NULL );
-
-/* Initialise the Stc data. */
-/* --------------------------- */
-/* Store a pointer to the encapsulated Region. */
-      new->region = astClone( reg );
-
-/* No AstroCoords info as yet. */
-      new->ncoord = 0;
-      new->coord = NULL;
-
-/* Transfer attributes from the encapsulated region to the parent region. */
-     astRegOverlay( new, reg, 1 );
-     if( astTestIdent( reg ) ) astSetIdent( new, astGetIdent( reg ) );
-
-/* If the base->current Mapping in the FrameSet within the encapsulated Region 
-   is a UnitMap, then the FrameSet does not need to be included in the
-   Dump of the new Stc. Set the RegionFS attribute of the encapsulated
-   Region to zero to flag this. Note, we do this after the previous class
-   to astRegOverlay because we do not want this zero value for RegionFS to
-   be copied into the new Stc object. */
-      astSetRegionFS( reg, 0 );
-
-/* For each supplied AstroCoords, create a new KeyMap holding Regions 
-   representing the various elements of the AstroCoords, and store the
-   new KeyMap in the Stc structure. */
-      if( coords && ncoords > 0 ) {
-         new->ncoord = ncoords;
-         new->coord = astMalloc( sizeof( AstKeyMap *)*(size_t) ncoords );
-         if( new->coord ) {
-            for( i = 0; i < ncoords; i++ ) {      
-               new->coord[ i ] = MakeAstroCoordsKeyMap( reg, coords[ i ],
-                                                        name, status );
-            }
-         }
-      }
-
-/* If an error occurred, clean up deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Free resources */
-   reg = astAnnul( reg );
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstStc *astLoadStc_( void *mem, size_t size, AstStcVtab *vtab, 
-                     const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadStc
-
-*  Purpose:
-*     Load a Stc.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stc.h"
-*     AstStc *astLoadStc( void *mem, size_t size, AstStcVtab *vtab, 
-*                         const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     Stc loader.
-
-*  Description:
-*     This function is provided to load a new Stc using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     Stc structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a Stc at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the Stc is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        Stc data (sizeof(Stc)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the Stc (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the Stc structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstStc) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new Stc. If this is NULL, a pointer to
-*        the (static) virtual function table for the Stc class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "Stc" is used instead.
-
-*  Returned Value:
-*     A pointer to the new Stc.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstFrame *f1;                 /* Base Frame in parent Region */
-   AstObject *obj;               /* Pointer to Object retrieved from KeyMap */
-   AstRegion *creg;              /* Pointer to encapsulated Region */
-   AstStc *new;                  /* Pointer to the new Stc */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   int ico;                      /* Loop counter for AstroCoords */
-   int ikey;                     /* Index of KeyMap */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this Stc. In this case the
-   Stc belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstStc );
-      vtab = &class_vtab;
-      name = "Stc";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitStcVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built Stc. */
-   new = astLoadRegion( mem, size, (AstRegionVtab *) vtab, name,
-                        channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "Stc" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Encapsulated Region. */
-/* -------------------- */
-      new->region = astReadObject( channel, "region", NULL );
-
-/* Get a pointer to the base Frame in the FrameSet encapsulated by the
-   parent Region structure. */
-      f1 = astGetFrame( ((AstRegion *) new)->frameset, AST__BASE );
-
-/* If the encapsulated Region has a dummy FrameSet rather than the correct
-   FrameSet, the correct FrameSet will have copies of the base Frame of the 
-   new Stc as both its current and base Frames, connected by a UnitMap (this 
-   is equivalent to a FrameSet containing a single Frame). However if the new 
-   Stc being loaded has itself got a dummy FrameSet, then we do not do this 
-   since we do not yet know what the correct FrameSet is. In this case we 
-   wait until the parent Region invokes the astSetRegFS method on the new 
-   Stc. */
-      if( !astRegDummyFS( new ) ) {
-         creg = new->region;
-         if( astRegDummyFS( creg ) ) astSetRegFS( creg, f1 );
-      }
-
-/* AstroCoords info */
-/* ---------------- */
-/* The number of AstroCoords described in the new Stc. */
-      new->ncoord = astReadInt( channel, "ncoord", 0 );
-      if( new->ncoord < 0 ) new->ncoord = 0;
-
-/* Read back each KeyMap describing these AstroCoords. */
-      new->coord = astMalloc( sizeof( AstKeyMap *) * (size_t) new->ncoord );
-      for( ico = 1; ico <= new->ncoord; ico++ ) {
-         (void) sprintf( key, "coord%d", ico );
-         new->coord[ ico - 1 ] = astReadObject( channel, key, NULL );
-
-/* Ensure the Regions within the KeyMap do not have dummy FrameSets. */
-         if( new->coord[ ico - 1 ] && !astRegDummyFS( new ) ) {
-            for( ikey = 0; ikey < NREG; ikey++ ) {
-               if( astMapGet0A( new->coord[ ico - 1 ], regkey[ ikey ], &obj ) ){
-                  creg = (AstRegion *) obj;
-                  if( astRegDummyFS( creg ) ) {
-                     astSetRegFS( creg, f1 );
-                     astMapPut0A( new->coord[ ico - 1 ], regkey[ ikey ], creg, 
-                                  regcom[ ikey ] );
-                  }
-                  creg = astAnnul( creg );
-               }
-            }
-         }
-      }
-
-/* Free resources */
-      f1 = astAnnul( f1 );
-
-/* If an error occurred, clean up by deleting the new Stc. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new Stc pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-const char *astGetRegionClass_( AstStc *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Stc,GetRegionClass))( this, status );
-}
-
-AstRegion *astGetStcRegion_( AstStc *this, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Stc,GetStcRegion))( this, status );
-}
-
-AstKeyMap *astGetStcCoord_( AstStc *this, int icoord, int *status ){
-   if ( !astOK ) return NULL;
-   return (**astMEMBER(this,Stc,GetStcCoord))( this, icoord, status );
-}
-
-int astGetStcNCoord_( AstStc *this, int *status ){
-   if ( !astOK ) return 0;
-   return (**astMEMBER(this,Stc,GetStcNCoord))( this, status );
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/stc.h b/ast-5.3-1/stc.h
deleted file mode 100644
index 5ccc877..0000000
--- a/ast-5.3-1/stc.h
+++ /dev/null
@@ -1,240 +0,0 @@
-#if !defined( STC_INCLUDED ) /* Include this file only once */
-#define STC_INCLUDED
-/*
-*+
-*  Name:
-*     stc.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the Stc class.
-
-*  Invocation:
-*     #include "stc.h"
-
-*  Description:
-*     This include file defines the interface to the Stc class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The Stc class is an implementation of the IVOA STC class which forms 
-*     part of the IVOA Space-Time Coordinate Metadata system. See:
-*
-*     http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The Stc class inherits from the Region class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-NOV-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "region.h"              /* Coordinate regions (parent class) */
-#include "keymap.h"              /* Lists of value/key pairs */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ======= */
-
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__STCNAME  "Name"
-#define AST__STCVALUE "Value"
-#define AST__STCERROR "Error"
-#define AST__STCRES   "Resolution"
-#define AST__STCSIZE  "Size"
-#define AST__STCPIXSZ "PixSize"
-
-/* Type Definitions. */
-/* ================= */
-/* Stc structure. */
-/* ------------------ */
-
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstStc {
-
-/* Attributes inherited from the parent class. */
-   AstRegion parent_region;      /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstRegion *region;            /* Encapsulated Region */
-   AstKeyMap **coord;            /* STC AstroCoords info */
-   int ncoord;                   /* Number of AstroCoords in "coords" */
-} AstStc;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstStcVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstRegionVtab region_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   const char *(* GetRegionClass)( AstStc *, int * );
-   AstRegion *(* GetStcRegion)( AstStc *, int * );
-   AstKeyMap *(* GetStcCoord)( AstStc *, int, int * );
-   int (* GetStcNCoord)( AstStc *, int * );
-
-} AstStcVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstStcGlobals {
-   AstStcVtab Class_Vtab;
-   int Class_Init;
-} AstStcGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcGlobals_( AstStcGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(Stc)          /* Check class membership */
-astPROTO_ISA(Stc)            /* Test class membership */
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstStc *astInitStc_( void *, size_t, int, AstStcVtab *, const char *, 
-                     AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcVtab_( AstStcVtab *, const char *, int * );
-
-/* Loader. */
-AstStc *astLoadStc_( void *, size_t, AstStcVtab *,
-                     const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-AstRegion *astGetStcRegion_( AstStc *, int * );
-AstKeyMap *astGetStcCoord_( AstStc *, int, int * );
-int astGetStcNCoord_( AstStc *, int * );
-
-# if defined(astCLASS)           /* Protected */
-const char *astGetRegionClass_( AstStc *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckStc(this) astINVOKE_CHECK(Stc,this,0)
-#define astVerifyStc(this) astINVOKE_CHECK(Stc,this,1)
-
-/* Test class membership. */
-#define astIsAStc(this) astINVOKE_ISA(Stc,this)
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitStc(mem,size,init,vtab,name,reg,ncoords,coords) \
-astINVOKE(O,astInitStc_(mem,size,init,vtab,name,reg,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcVtab(vtab,name) astINVOKE(V,astInitStcVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStc(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStc_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStc to validate Stc pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#define astGetStcRegion(this) astINVOKE(O,astGetStcRegion_(astCheckStc(this),STATUS_PTR))
-#define astGetStcCoord(this,icoord) astINVOKE(O,astGetStcCoord_(astCheckStc(this),icoord,STATUS_PTR))
-#define astGetStcNCoord(this) astINVOKE(V,astGetStcNCoord_(astCheckStc(this),STATUS_PTR))
-#if defined(astCLASS)            /* Protected */
-#define astGetRegionClass(this) astINVOKE(V,astGetRegionClass_(astCheckStc(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stccatalogentrylocation.c b/ast-5.3-1/stccatalogentrylocation.c
deleted file mode 100644
index 6b25b3c..0000000
--- a/ast-5.3-1/stccatalogentrylocation.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
-*class++
-*  Name:
-*     StcCatalogEntryLocation
-
-*  Purpose:
-*     Correspond to the IVOA STCCatalogEntryLocation class.
-
-*  Constructor Function:
-c     astStcCatalogEntryLocation
-f     AST_STCCATALOGENTRYLOCATION
-
-*  Description:
-*     The StcCatalogEntryLocation class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcCatalogEntryLocation class inherits from the Stc class.
-
-*  Attributes:
-*     The StcCatalogEntryLocation class does not define any new attributes beyond
-*     those which are applicable to all Stcs.
-
-*  Functions:
-c     The StcCatalogEntryLocation class does not define any new functions beyond those
-f     The StcCatalogEntryLocation class does not define any new routines beyond those
-*     which are applicable to all Stcs.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-NOV-2004 (DSB):
-*        Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS StcCatalogEntryLocation
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "region.h"              /* Regions within coordinate systems */
-#include "stccatalogentrylocation.h"  /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcCatalogEntryLocation)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcCatalogEntryLocation,Class_Init)
-#define class_vtab astGLOBAL(StcCatalogEntryLocation,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstStcCatalogEntryLocationVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstStcCatalogEntryLocation *astStcCatalogEntryLocationId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void astInitStcCatalogEntryLocationVtab_(  AstStcCatalogEntryLocationVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcCatalogEntryLocationVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a StcCatalogEntryLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stccatalogentrylocation.h"
-*     void astInitStcCatalogEntryLocationVtab( AstStcCatalogEntryLocationVtab *vtab, const char *name )
-
-*  Class Membership:
-*     StcCatalogEntryLocation vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the StcCatalogEntryLocation class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstStcVtab *stc;        /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAStcCatalogEntryLocation) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   stc = (AstStcVtab *) vtab;
-
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDump( vtab, Dump, "StcCatalogEntryLocation", "Resource coverage" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for StcCatalogEntryLocation objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the StcCatalogEntryLocation class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the StcCatalogEntryLocation whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstStcCatalogEntryLocation *this;                 /* Pointer to the StcCatalogEntryLocation structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcCatalogEntryLocation structure. */
-   this = (AstStcCatalogEntryLocation *) this_object;
-
-/* Write out values representing the instance variables for the
-   StcCatalogEntryLocation class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcCatalogEntryLocation and astCheckStcCatalogEntryLocation functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcCatalogEntryLocation,Stc)
-astMAKE_CHECK(StcCatalogEntryLocation)
-
-
-AstStcCatalogEntryLocation *astStcCatalogEntryLocation_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astStcCatalogEntryLocation
-f     AST_STCCATALOGENTRYLOCATION
-
-*  Purpose:
-*     Create a StcCatalogEntryLocation.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "stccatalogentrylocation.h"
-c     AstStcCatalogEntryLocation *astStcCatalogEntryLocation( AstRegion *region,
-c                  int ncoords, AstKeyMap *coords[], const char *options, ... )
-f     RESULT = AST_STCCATALOGENTRYLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     StcCatalogEntryLocation constructor.
-
-*  Description:
-*     This function creates a new StcCatalogEntryLocation and optionally initialises its
-*     attributes.
-*
-*     The StcCatalogEntryLocation class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Parameters:
-c     region
-f     REGION = INTEGER (Given)
-*        Pointer to the encapsulated Region.
-c     ncoords
-f     NCOORDS = INTEGER (Given)
-c        The length of the "coords" array. Supply zero if "coords" is NULL.
-f        The length of the COORDS array. Supply zero if COORDS should be
-f        ignored.
-c     coords
-f     COORDS( NCOORDS ) = INTEGER (Given)
-c        Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f        An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-*        is zero, the supplied value is ignored). Each supplied KeyMap 
-*        describes the contents of a single STC <AstroCoords> element, and 
-*        should have elements with keys given by constants AST__STCNAME, 
-*        AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE, 
-*        AST__STCPIXSZ. Any of these elements may be omitted, but no other 
-*        elements should be included. If supplied, the AST__STCNAME element 
-*        should be a vector of character string pointers holding the "Name" 
-*        item for each axis in the coordinate system represented by
-c        "region".
-f        REGION.
-*        Any other supplied elements should be scalar elements, each  holding 
-*        a pointer to a Region describing the associated item of ancillary 
-*        information (error, resolution, size, pixel size or value). These 
-*        Regions should describe a volume within the coordinate system 
-c        represented by "region". 
-f        represented by REGION. 
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new StcCatalogEntryLocation. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new StcCatalogEntryLocation. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astStcCatalogEntryLocation()
-f     AST_STCCATALOGENTRYLOCATION = INTEGER
-*        A pointer to the new StcCatalogEntryLocation.
-
-*  Notes:
-*     - A deep copy is taken of the supplied Region. This means that
-*     any subsequent changes made to the encapsulated Region using the 
-*     supplied pointer will have no effect on the Stc.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRegion *region;            /* Pointer to Region structure */
-   AstStcCatalogEntryLocation *new;   /* Pointer to new StcCatalogEntryLocation */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
-   region = astCheckRegion( region_void );
-
-/* Initialise the StcCatalogEntryLocation, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcCatalogEntryLocation( NULL, sizeof( AstStcCatalogEntryLocation ), !class_init,
-                                    &class_vtab, "StcCatalogEntryLocation", region,
-                                    ncoords, coords );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcCatalogEntryLocation's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new StcCatalogEntryLocation. */
-   return new;
-}
-
-AstStcCatalogEntryLocation *astStcCatalogEntryLocationId_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, ... ) {
-/*
-*  Name:
-*     astStcCatalogEntryLocationId_
-
-*  Purpose:
-*     Create a StcCatalogEntryLocation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stccatalogentrylocation.h"
-*     AstStcCatalogEntryLocation *astStcCatalogEntryLocationId( AstRegion *region,
-*                  int ncoords, AstKeyMap *coords[], const char *options, ..., int *status )
-
-*  Class Membership:
-*     StcCatalogEntryLocation constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astStcCatalogEntryLocation constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astStcCatalogEntryLocation_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astStcCatalogEntryLocation_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astStcCatalogEntryLocation_.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ID value associated with the new StcCatalogEntryLocation.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstKeyMap **keymaps;            /* Pointer to array of KeyMap pointers */
-   AstRegion *region;              /* Pointer to Region structure */
-   AstStcCatalogEntryLocation *new;/* Pointer to new StcCatalogEntryLocation */
-   int icoord;                     /* Keymap index */
-   va_list args;                   /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Region. */
-   region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
-   pointers to ensure it identifies a valid KeyMap. */
-   keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
-   if( keymaps ) {
-      for( icoord = 0; icoord < ncoords; icoord++ ) {
-         keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
-      }
-   }
-
-/* Initialise the StcCatalogEntryLocation, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcCatalogEntryLocation( NULL, sizeof( AstStcCatalogEntryLocation ), !class_init,
-                                    &class_vtab, "StcCatalogEntryLocation", region,
-                                    ncoords, keymaps );
-
-/* Free resources. */
-   keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcCatalogEntryLocation's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new StcCatalogEntryLocation. */
-   return astMakeId( new );
-}
-
-AstStcCatalogEntryLocation *astInitStcCatalogEntryLocation_( void *mem, size_t size, 
-                                    int init, AstStcCatalogEntryLocationVtab *vtab, 
-                                    const char *name, AstRegion *region,
-                                    int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcCatalogEntryLocation
-
-*  Purpose:
-*     Initialise a StcCatalogEntryLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stccatalogentrylocation.h"
-*     AstStcCatalogEntryLocation *astInitStcCatalogEntryLocation_( void *mem, size_t size, 
-*                                    int init, AstStcCatalogEntryLocationVtab *vtab, 
-*                                    const char *name, AstRegion *region,
-*                                    int ncoords, AstKeyMap **coords )
-
-*  Class Membership:
-*     StcCatalogEntryLocation initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new StcCatalogEntryLocation object. It allocates memory (if necessary) to accommodate
-*     the StcCatalogEntryLocation plus any additional data associated with the derived class.
-*     It then initialises a StcCatalogEntryLocation structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a StcCatalogEntryLocation at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the StcCatalogEntryLocation is to be initialised.
-*        This must be of sufficient size to accommodate the StcCatalogEntryLocation data
-*        (sizeof(StcCatalogEntryLocation)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the StcCatalogEntryLocation (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the StcCatalogEntryLocation
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the StcCatalogEntryLocation's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new StcCatalogEntryLocation.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     region
-*        A pointer to the Region encapsulated by the StcCatalogEntryLocation.
-*     ncoords
-*        Number of KeyMap pointers supplied in "coords". Can be zero.
-*        Ignored if "coords" is NULL.
-*     coords
-*        Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-*        "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords> 
-*        element, and should have elements with keys given by constants 
-*        AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-*        AST__STCPIXSZ. These elements hold values for the corresponding 
-*        components of the STC AstroCoords element. Any of these elements may 
-*        be omitted, but no other elements should be included. All supplied 
-*        elements should be vector elements, with vector length less than or 
-*        equal to the number of axes in the supplied Region. The data type of 
-*        all elements should be "double", except for AST__STCNAME which should 
-*        be "character string". If no value is available for a given axis, then
-*        AST__BAD (or NULL for the AST__STCNAME element) should be stored in 
-*        the vector at the index corresponding to the axis (trailing axes
-*        can be omitted completely from the KeyMap).
-
-*  Returned Value:
-*     A pointer to the new StcCatalogEntryLocation.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstStcCatalogEntryLocation *new;       /* Pointer to new StcCatalogEntryLocation */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitStcCatalogEntryLocationVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
-   within the StcCatalogEntryLocation structure, allocating memory if necessary. */
-   new = (AstStcCatalogEntryLocation *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
-                                               name, region, ncoords, coords );
-
-/* If an error occurred, clean up by deleting the new StcCatalogEntryLocation. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcCatalogEntryLocation. */
-   return new;
-}
-
-AstStcCatalogEntryLocation *astLoadStcCatalogEntryLocation_( void *mem, size_t size, AstStcCatalogEntryLocationVtab *vtab, 
-                                                   const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadStcCatalogEntryLocation
-
-*  Purpose:
-*     Load a StcCatalogEntryLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stccatalogentrylocation.h"
-*     AstStcCatalogEntryLocation *astLoadStcCatalogEntryLocation( void *mem, size_t size, AstStcCatalogEntryLocationVtab *vtab, 
-*                                       const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     StcCatalogEntryLocation loader.
-
-*  Description:
-*     This function is provided to load a new StcCatalogEntryLocation using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     StcCatalogEntryLocation structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a StcCatalogEntryLocation at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the StcCatalogEntryLocation is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        StcCatalogEntryLocation data (sizeof(StcCatalogEntryLocation)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the StcCatalogEntryLocation (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the StcCatalogEntryLocation structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstStcCatalogEntryLocation) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new StcCatalogEntryLocation. If this is NULL, a pointer
-*        to the (static) virtual function table for the StcCatalogEntryLocation class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "StcCatalogEntryLocation" is used instead.
-
-*  Returned Value:
-*     A pointer to the new StcCatalogEntryLocation.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstStcCatalogEntryLocation *new;              /* Pointer to the new StcCatalogEntryLocation */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this StcCatalogEntryLocation. In this case the
-   StcCatalogEntryLocation belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstStcCatalogEntryLocation );
-      vtab = &class_vtab;
-      name = "StcCatalogEntryLocation";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitStcCatalogEntryLocationVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built StcCatalogEntryLocation. */
-   new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "StcCatalogEntryLocation" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new StcCatalogEntryLocation. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new StcCatalogEntryLocation pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
-
diff --git a/ast-5.3-1/stccatalogentrylocation.h b/ast-5.3-1/stccatalogentrylocation.h
deleted file mode 100644
index 6a439d9..0000000
--- a/ast-5.3-1/stccatalogentrylocation.h
+++ /dev/null
@@ -1,223 +0,0 @@
-#if !defined( STCCATALOGENTRYLOCATION_INCLUDED ) /* Include this file only once */
-#define STCCATALOGENTRYLOCATION_INCLUDED
-/*
-*+
-*  Name:
-*     stccatalogentrylocation.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the StcCatalogEntryLocation class.
-
-*  Invocation:
-*     #include "stccatalogentrylocation.h"
-
-*  Description:
-*     This include file defines the interface to the StcCatalogEntryLocation class 
-*     and provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The StcCatalogEntryLocation class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcCatalogEntryLocation class inherits from the Stc class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-NOV-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcCatalogEntryLocation structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstStcCatalogEntryLocation {
-
-/* Attributes inherited from the parent class. */
-   AstStc stc;             /* Parent class structure */
-
-} AstStcCatalogEntryLocation;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstStcCatalogEntryLocationVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstStcVtab stc_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstStcCatalogEntryLocationVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstStcCatalogEntryLocationGlobals {
-   AstStcCatalogEntryLocationVtab Class_Vtab;
-   int Class_Init;
-} AstStcCatalogEntryLocationGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcCatalogEntryLocationGlobals_( AstStcCatalogEntryLocationGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcCatalogEntryLocation)          /* Check class membership */
-astPROTO_ISA(StcCatalogEntryLocation)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstStcCatalogEntryLocation *astStcCatalogEntryLocation_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcCatalogEntryLocation *astStcCatalogEntryLocationId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstStcCatalogEntryLocation *astInitStcCatalogEntryLocation_( void *, size_t, int, AstStcCatalogEntryLocationVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcCatalogEntryLocationVtab_( AstStcCatalogEntryLocationVtab *, const char *, int * );
-
-/* Loader. */
-AstStcCatalogEntryLocation *astLoadStcCatalogEntryLocation_( void *, size_t, AstStcCatalogEntryLocationVtab *,
-                                   const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckStcCatalogEntryLocation(this) astINVOKE_CHECK(StcCatalogEntryLocation,this,0)
-#define astVerifyStcCatalogEntryLocation(this) astINVOKE_CHECK(StcCatalogEntryLocation,this,1)
-
-/* Test class membership. */
-#define astIsAStcCatalogEntryLocation(this) astINVOKE_ISA(StcCatalogEntryLocation,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astStcCatalogEntryLocation astINVOKE(F,astStcCatalogEntryLocation_)
-#else
-#define astStcCatalogEntryLocation astINVOKE(F,astStcCatalogEntryLocationId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitStcCatalogEntryLocation(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcCatalogEntryLocation_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcCatalogEntryLocationVtab(vtab,name) astINVOKE(V,astInitStcCatalogEntryLocationVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcCatalogEntryLocation(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcCatalogEntryLocation_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcCatalogEntryLocation to validate StcCatalogEntryLocation pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stcobsdatalocation.c b/ast-5.3-1/stcobsdatalocation.c
deleted file mode 100644
index f2fca2e..0000000
--- a/ast-5.3-1/stcobsdatalocation.c
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
-*class++
-*  Name:
-*     StcObsDataLocation
-
-*  Purpose:
-*     Correspond to the IVOA ObsDataLocation class.
-
-*  Constructor Function:
-c     astStcObsDataLocation
-f     AST_STCOBSDATALOCATION
-
-*  Description:
-*     The StcObsDataLocation class is a sub-class of Stc used to describe 
-*     the coordinate space occupied by a particular observational dataset.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-*
-*     An STC ObsDataLocation element specifies the extent of the
-*     observation within a specified coordinate system, and also specifies 
-*     the observatory location within a second coordinate system.
-*
-*     The AST StcObsDataLocation class inherits from Stc, and therefore 
-*     an StcObsDataLocation can be used directly as an Stc. When used 
-*     in this way, the StcObsDataLocation describes the location of the 
-*     observation (not the observatory).
-*
-*     Eventually, this class will have a method for returning an Stc
-*     describing the observatory location. However, AST currently does not 
-*     include any classes of Frame for describing terrestrial or solar 
-*     system positions. Therefore, the provision for returning observatory 
-*     location as an Stc is not yet available. However, for terrestrial
-*     observations, the position of the observatory can still be recorded 
-*     using the ObsLon and ObsLat attributes of the Frame encapsulated 
-*     within the Stc representing the observation location (this assumes
-*     the observatory is located at sea level).
-
-*  Inheritance:
-*     The StcObsDataLocation class inherits from the Stc class.
-
-*  Attributes:
-*     The StcObsDataLocation class does not define any new attributes beyond
-*     those which are applicable to all Stcs.
-
-*  Functions:
-c     The StcObsDataLocation class does not define any new functions beyond those
-f     The StcObsDataLocation class does not define any new routines beyond those
-*     which are applicable to all Stcs.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     25-APR-2005 (DSB):
-*        Original version.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS StcObsDataLocation
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "region.h"              /* Regions within coordinate systems */
-#include "pointlist.h"           /* Points within coordinate systems */
-#include "stcobsdatalocation.h"  /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-
- 
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcObsDataLocation)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcObsDataLocation,Class_Init)
-#define class_vtab astGLOBAL(StcObsDataLocation,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstStcObsDataLocationVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstStcObsDataLocation *astStcObsDataLocationId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void StcSetObs( AstStcObsDataLocation *, AstPointList *, int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcobsdatalocation.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     StcObsDataLocation member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied StcObsDataLocation,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the StcObsDataLocation.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstStcObsDataLocation *this;         /* Pointer to StcObsDataLocation structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the StcObsDataLocation structure. */
-   this = (AstStcObsDataLocation *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astGetObjSize( this->obs );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-
-void astInitStcObsDataLocationVtab_(  AstStcObsDataLocationVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcObsDataLocationVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a StcObsDataLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcobsdatalocation.h"
-*     void astInitStcObsDataLocationVtab( AstStcObsDataLocationVtab *vtab, const char *name )
-
-*  Class Membership:
-*     StcObsDataLocation vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the StcObsDataLocation class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstStcVtab *stc;        /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAStcObsDataLocation) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-   stc = (AstStcVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   vtab->StcSetObs = StcSetObs;
-
-/* Declare the copy constructor, destructor and class dump functions. */
-   astSetDump( vtab, Dump, "StcObsDataLocation", "Observation coverage" );
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static void StcSetObs( AstStcObsDataLocation *this, AstPointList *obs, int *status ) {
-/*
-*+
-*  Name:
-*     astStcSetObs
-
-*  Purpose:
-*     Set the observatory position within an StcObsDataLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "region.h"
-*     void astStcSetObs( AstStcObsDataLocation *this, AstPointList *obs )
-
-*  Class Membership:
-*     StcObsDataLocation virtual function 
-
-*  Description:
-*     This function stores a clone of the supplied PointList pointer
-*     within the supplied StcObsDataLocation, first annulling any
-*     pointer already stored in the StcObsDataLocation.
-
-*  Parameters:
-*     this
-*        Pointer to the StcObsDataLocation.
-*     obs
-*        Pointer to a PointList defining the observatory position. NULL
-*        may be supplied in which case any existing observatory position
-*        is removed.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Free any existing obseravtory position PointList. */
-   if( this->obs ) this->obs = astAnnul( this->obs );
-
-/* Store any supplied pointer. */
-   if( obs ) this->obs = astClone( obs );
-
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for StcObsDataLocation objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for StcObsDataLocation 
-*     objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Regions within the StcObsDataLocation.
-*/
-
-/* Local Variables: */
-   AstStcObsDataLocation *in;   /* Pointer to input StcObsDataLocation */
-   AstStcObsDataLocation *out;  /* Pointer to output StcObsDataLocation */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output StcObsDataLocations. */
-   in = (AstStcObsDataLocation *) objin;
-   out = (AstStcObsDataLocation *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Regions, etc,  from the output StcObsDataLocation. */
-   out->obs = NULL;
-
-/* Make a copy of the Observatory location */
-   if( in->obs ) out->obs = astCopy( in->obs );
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for StcObsDataLocation objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for StcObsDataLocation objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstStcObsDataLocation *this;   /* Pointer to StcObsDataLocation */
-
-/* Obtain a pointer to the StcObsDataLocation structure. */
-   this = (AstStcObsDataLocation *) obj;
-
-/* Annul the pointer to the observatory location Region. */
-   if( this->obs ) this->obs = astAnnul( this->obs );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for StcObsDataLocation objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the StcObsDataLocation class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the StcObsDataLocation whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstStcObsDataLocation *this;                 /* Pointer to the StcObsDataLocation structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcObsDataLocation structure. */
-   this = (AstStcObsDataLocation *) this_object;
-
-/* Write out values representing the instance variables for the
-   StcObsDataLocation class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Observatory position. */
-/* --------------------- */
-   astWriteObject( channel, "ObsLoc", 1, 1, this->obs, "Observatory position" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcObsDataLocation and astCheckStcObsDataLocation functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcObsDataLocation,Stc)
-astMAKE_CHECK(StcObsDataLocation)
-
-
-AstStcObsDataLocation *astStcObsDataLocation_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astStcObsDataLocation
-f     AST_STCOBSDATALOCATION
-
-*  Purpose:
-*     Create a StcObsDataLocation.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "stcobsdatalocation.h"
-c     AstStcObsDataLocation *astStcObsDataLocation( AstRegion *region,
-c                  int ncoords, AstKeyMap *coords[], const char *options, ... )
-f     RESULT = AST_STCOBSDATALOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     StcObsDataLocation constructor.
-
-*  Description:
-*     This function creates a new StcObsDataLocation and optionally initialises its
-*     attributes.
-*
-*     The StcObsDataLocation class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Parameters:
-c     region
-f     REGION = INTEGER (Given)
-*        Pointer to the encapsulated Region.
-c     ncoords
-f     NCOORDS = INTEGER (Given)
-c        The length of the "coords" array. Supply zero if "coords" is NULL.
-f        The length of the COORDS array. Supply zero if COORDS should be
-f        ignored.
-c     coords
-f     COORDS( NCOORDS ) = INTEGER (Given)
-c        Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f        An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-*        is zero, the supplied value is ignored). Each supplied KeyMap 
-*        describes the contents of a single STC <AstroCoords> element, and 
-*        should have elements with keys given by constants AST__STCNAME, 
-*        AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE, 
-*        AST__STCPIXSZ. Any of these elements may be omitted, but no other 
-*        elements should be included. If supplied, the AST__STCNAME element 
-*        should be a vector of character string pointers holding the "Name" 
-*        item for each axis in the coordinate system represented by
-c        "region".
-f        REGION.
-*        Any other supplied elements should be scalar elements, each  holding 
-*        a pointer to a Region describing the associated item of ancillary 
-*        information (error, resolution, size, pixel size or value). These 
-*        Regions should describe a volume within the coordinate system 
-c        represented by "region". 
-f        represented by REGION. 
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new StcObsDataLocation. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new StcObsDataLocation. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astStcObsDataLocation()
-f     AST_STCOBSDATALOCATION = INTEGER
-*        A pointer to the new StcObsDataLocation.
-
-*  Notes:
-*     - A deep copy is taken of the supplied Region. This means that
-*     any subsequent changes made to the encapsulated Region using the 
-*     supplied pointer will have no effect on the Stc.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRegion *region;            /* Pointer to Region structure */
-   AstStcObsDataLocation *new;   /* Pointer to new StcObsDataLocation */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
-   region = astCheckRegion( region_void );
-
-/* Initialise the StcObsDataLocation, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcObsDataLocation( NULL, sizeof( AstStcObsDataLocation ), !class_init,
-                                    &class_vtab, "StcObsDataLocation", region,
-                                    ncoords, coords );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcObsDataLocation's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new StcObsDataLocation. */
-   return new;
-}
-
-AstStcObsDataLocation *astStcObsDataLocationId_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, ... ) {
-/*
-*  Name:
-*     astStcObsDataLocationId_
-
-*  Purpose:
-*     Create a StcObsDataLocation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcobsdatalocation.h"
-*     AstStcObsDataLocation *astStcObsDataLocationId( AstRegion *region,
-*                  int ncoords, AstKeyMap *coords[], const char *options, ..., int *status )
-
-*  Class Membership:
-*     StcObsDataLocation constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astStcObsDataLocation constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astStcObsDataLocation_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astStcObsDataLocation_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astStcObsDataLocation_.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The ID value associated with the new StcObsDataLocation.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstKeyMap **keymaps;            /* Pointer to array of KeyMap pointers */
-   AstRegion *region;              /* Pointer to Region structure */
-   AstStcObsDataLocation *new;     /* Pointer to new StcObsDataLocation */
-   int icoord;                     /* Keymap index */
-   va_list args;                   /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Region. */
-   region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
-   pointers to ensure it identifies a valid KeyMap. */
-   keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
-   if( keymaps ) {
-      for( icoord = 0; icoord < ncoords; icoord++ ) {
-         keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
-      }
-   }
-
-/* Initialise the StcObsDataLocation, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcObsDataLocation( NULL, sizeof( AstStcObsDataLocation ), !class_init,
-                                    &class_vtab, "StcObsDataLocation", region,
-                                    ncoords, keymaps );
-
-/* Free resources. */
-   keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcObsDataLocation's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new StcObsDataLocation. */
-   return astMakeId( new );
-}
-
-AstStcObsDataLocation *astInitStcObsDataLocation_( void *mem, size_t size, 
-                                    int init, AstStcObsDataLocationVtab *vtab, 
-                                    const char *name, AstRegion *region,
-                                    int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcObsDataLocation
-
-*  Purpose:
-*     Initialise a StcObsDataLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcobsdatalocation.h"
-*     AstStcObsDataLocation *astInitStcObsDataLocation_( void *mem, size_t size, 
-*                                    int init, AstStcObsDataLocationVtab *vtab, 
-*                                    const char *name, AstRegion *region,
-*                                    int ncoords, AstKeyMap **coords )
-
-*  Class Membership:
-*     StcObsDataLocation initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new StcObsDataLocation object. It allocates memory (if necessary) to accommodate
-*     the StcObsDataLocation plus any additional data associated with the derived class.
-*     It then initialises a StcObsDataLocation structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a StcObsDataLocation at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the StcObsDataLocation is to be initialised.
-*        This must be of sufficient size to accommodate the StcObsDataLocation data
-*        (sizeof(StcObsDataLocation)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the StcObsDataLocation (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the StcObsDataLocation
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the StcObsDataLocation's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new StcObsDataLocation.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     region
-*        A pointer to the Region encapsulated by the StcObsDataLocation.
-*     ncoords
-*        Number of KeyMap pointers supplied in "coords". Can be zero.
-*        Ignored if "coords" is NULL.
-*     coords
-*        Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-*        "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords> 
-*        element, and should have elements with keys given by constants 
-*        AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-*        AST__STCPIXSZ. These elements hold values for the corresponding 
-*        components of the STC AstroCoords element. Any of these elements may 
-*        be omitted, but no other elements should be included. All supplied 
-*        elements should be vector elements, with vector length less than or 
-*        equal to the number of axes in the supplied Region. The data type of 
-*        all elements should be "double", except for AST__STCNAME which should 
-*        be "character string". If no value is available for a given axis, then
-*        AST__BAD (or NULL for the AST__STCNAME element) should be stored in 
-*        the vector at the index corresponding to the axis (trailing axes
-*        can be omitted completely from the KeyMap).
-
-*  Returned Value:
-*     A pointer to the new StcObsDataLocation.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstStcObsDataLocation *new;       /* Pointer to new StcObsDataLocation */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitStcObsDataLocationVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
-   within the StcObsDataLocation structure, allocating memory if necessary. */
-   new = (AstStcObsDataLocation *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
-                                               name, region, ncoords, coords );
-
-/* If succesful, initialise properties of the StcObsDataLocation. */
-   if( new ) {
-      new->obs = NULL;
-   }
-
-/* If an error occurred, clean up by deleting the new StcObsDataLocation. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcObsDataLocation. */
-   return new;
-}
-
-AstStcObsDataLocation *astLoadStcObsDataLocation_( void *mem, size_t size, AstStcObsDataLocationVtab *vtab, 
-                                                   const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadStcObsDataLocation
-
-*  Purpose:
-*     Load a StcObsDataLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcobsdatalocation.h"
-*     AstStcObsDataLocation *astLoadStcObsDataLocation( void *mem, size_t size, AstStcObsDataLocationVtab *vtab, 
-*                                       const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     StcObsDataLocation loader.
-
-*  Description:
-*     This function is provided to load a new StcObsDataLocation using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     StcObsDataLocation structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a StcObsDataLocation at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the StcObsDataLocation is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        StcObsDataLocation data (sizeof(StcObsDataLocation)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the StcObsDataLocation (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the StcObsDataLocation structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstStcObsDataLocation) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new StcObsDataLocation. If this is NULL, a pointer
-*        to the (static) virtual function table for the StcObsDataLocation class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "StcObsDataLocation" is used instead.
-
-*  Returned Value:
-*     A pointer to the new StcObsDataLocation.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstStcObsDataLocation *new;              /* Pointer to the new StcObsDataLocation */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this StcObsDataLocation. In this case the
-   StcObsDataLocation belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstStcObsDataLocation );
-      vtab = &class_vtab;
-      name = "StcObsDataLocation";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitStcObsDataLocationVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built StcObsDataLocation. */
-   new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "StcObsDataLocation" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Observatory position. */
-/* --------------------- */
-      new->obs = astReadObject( channel, "obsloc", NULL );
-
-/* If an error occurred, clean up by deleting the new StcObsDataLocation. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new StcObsDataLocation pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astStcSetObs_( AstStcObsDataLocation *this, AstPointList *obs, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,StcObsDataLocation,StcSetObs))( this, obs, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/stcobsdatalocation.h b/ast-5.3-1/stcobsdatalocation.h
deleted file mode 100644
index 3a6ef38..0000000
--- a/ast-5.3-1/stcobsdatalocation.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#if !defined( STCOBSDATALOCATION_INCLUDED ) /* Include this file only once */
-#define STCOBSDATALOCATION_INCLUDED
-/*
-*+
-*  Name:
-*     stcobsdatalocation.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the StcObsDataLocation class.
-
-*  Invocation:
-*     #include "stcobsdatalocation.h"
-
-*  Description:
-*     This include file defines the interface to the StcObsDataLocation class 
-*     and provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The StcObsDataLocation class is a sub-class of Stc used to describe 
-*     the an observation contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcObsDataLocation class inherits from the Stc class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     25-APR-2005 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-#include "pointlist.h"           /* Points within coordinate systems */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcObsDataLocation structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstStcObsDataLocation {
-
-/* Attributes inherited from the parent class. */
-   AstStc stc;             /* Parent class structure */
-
-/* Attributes specific to the StcObsDataLOcation class. */
-   AstPointList *obs;      /* Observatory position */
-
-} AstStcObsDataLocation;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstStcObsDataLocationVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstStcVtab stc_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* StcSetObs)( AstStcObsDataLocation *, AstPointList *, int * );
-
-} AstStcObsDataLocationVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstStcObsDataLocationGlobals {
-   AstStcObsDataLocationVtab Class_Vtab;
-   int Class_Init;
-} AstStcObsDataLocationGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcObsDataLocationGlobals_( AstStcObsDataLocationGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcObsDataLocation)          /* Check class membership */
-astPROTO_ISA(StcObsDataLocation)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstStcObsDataLocation *astStcObsDataLocation_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcObsDataLocation *astStcObsDataLocationId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstStcObsDataLocation *astInitStcObsDataLocation_( void *, size_t, int, AstStcObsDataLocationVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcObsDataLocationVtab_( AstStcObsDataLocationVtab *, const char *, int * );
-
-/* Loader. */
-AstStcObsDataLocation *astLoadStcObsDataLocation_( void *, size_t, AstStcObsDataLocationVtab *,
-                                   const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-
-#if defined(astCLASS)            /* Protected */
-void astStcSetObs_( AstStcObsDataLocation *, AstPointList *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckStcObsDataLocation(this) astINVOKE_CHECK(StcObsDataLocation,this,0)
-#define astVerifyStcObsDataLocation(this) astINVOKE_CHECK(StcObsDataLocation,this,1)
-
-/* Test class membership. */
-#define astIsAStcObsDataLocation(this) astINVOKE_ISA(StcObsDataLocation,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astStcObsDataLocation astINVOKE(F,astStcObsDataLocation_)
-#else
-#define astStcObsDataLocation astINVOKE(F,astStcObsDataLocationId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitStcObsDataLocation(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcObsDataLocation_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcObsDataLocationVtab(vtab,name) astINVOKE(V,astInitStcObsDataLocationVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcObsDataLocation(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcObsDataLocation_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcObsDataLocation to validate StcObsDataLocation pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astStcSetObs(this,obs) \
-astINVOKE(V,astStcSetObs_(astCheckStcObsDataLocation(this),obs?astCheckPointList(obs):NULL,STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stcresourceprofile.c b/ast-5.3-1/stcresourceprofile.c
deleted file mode 100644
index 935204e..0000000
--- a/ast-5.3-1/stcresourceprofile.c
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
-*class++
-*  Name:
-*     StcResourceProfile
-
-*  Purpose:
-*     Correspond to the IVOA STCResourceProfile class.
-
-*  Constructor Function:
-c     astStcResourceProfile
-f     AST_STCRESOURCEPROFILE
-
-*  Description:
-*     The StcResourceProfile class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcResourceProfile class inherits from the Stc class.
-
-*  Attributes:
-*     The StcResourceProfile class does not define any new attributes beyond
-*     those which are applicable to all Stcs.
-
-*  Functions:
-c     The StcResourceProfile class does not define any new functions beyond those
-f     The StcResourceProfile class does not define any new routines beyond those
-*     which are applicable to all Stcs.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-NOV-2004 (DSB):
-*        Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS StcResourceProfile
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "region.h"              /* Regions within coordinate systems */
-#include "stcresourceprofile.h"  /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcResourceProfile)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcResourceProfile,Class_Init)
-#define class_vtab astGLOBAL(StcResourceProfile,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstStcResourceProfileVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstStcResourceProfile *astStcResourceProfileId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void astInitStcResourceProfileVtab_(  AstStcResourceProfileVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcResourceProfileVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a StcResourceProfile.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcresourceprofile.h"
-*     void astInitStcResourceProfileVtab( AstStcResourceProfileVtab *vtab, const char *name )
-
-*  Class Membership:
-*     StcResourceProfile vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the StcResourceProfile class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstStcVtab *stc;        /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAStcResourceProfile) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   stc = (AstStcVtab *) vtab;
-
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDump( vtab, Dump, "StcResourceProfile", "Resource coverage" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for StcResourceProfile objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the StcResourceProfile class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the StcResourceProfile whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstStcResourceProfile *this;                 /* Pointer to the StcResourceProfile structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcResourceProfile structure. */
-   this = (AstStcResourceProfile *) this_object;
-
-/* Write out values representing the instance variables for the
-   StcResourceProfile class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcResourceProfile and astCheckStcResourceProfile functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcResourceProfile,Stc)
-astMAKE_CHECK(StcResourceProfile)
-
-
-AstStcResourceProfile *astStcResourceProfile_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astStcResourceProfile
-f     AST_STCRESOURCEPROFILE
-
-*  Purpose:
-*     Create a StcResourceProfile.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "stcresourceprofile.h"
-c     AstStcResourceProfile *astStcResourceProfile( AstRegion *region,
-c                  int ncoords, AstKeyMap *coords[], const char *options, ... )
-f     RESULT = AST_STCRESOURCEPROFILE( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     StcResourceProfile constructor.
-
-*  Description:
-*     This function creates a new StcResourceProfile and optionally initialises its
-*     attributes.
-*
-*     The StcResourceProfile class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Parameters:
-c     region
-f     REGION = INTEGER (Given)
-*        Pointer to the encapsulated Region.
-c     ncoords
-f     NCOORDS = INTEGER (Given)
-c        The length of the "coords" array. Supply zero if "coords" is NULL.
-f        The length of the COORDS array. Supply zero if COORDS should be
-f        ignored.
-c     coords
-f     COORDS( NCOORDS ) = INTEGER (Given)
-c        Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f        An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-*        is zero, the supplied value is ignored). Each supplied KeyMap 
-*        describes the contents of a single STC <AstroCoords> element, and 
-*        should have elements with keys given by constants AST__STCNAME, 
-*        AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE, 
-*        AST__STCPIXSZ. Any of these elements may be omitted, but no other 
-*        elements should be included. If supplied, the AST__STCNAME element 
-*        should be a vector of character string pointers holding the "Name" 
-*        item for each axis in the coordinate system represented by
-c        "region".
-f        REGION.
-*        Any other supplied elements should be scalar elements, each  holding 
-*        a pointer to a Region describing the associated item of ancillary 
-*        information (error, resolution, size, pixel size or value). These 
-*        Regions should describe a volume within the coordinate system 
-c        represented by "region". 
-f        represented by REGION. 
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new StcResourceProfile. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new StcResourceProfile. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astStcResourceProfile()
-f     AST_STCRESOURCEPROFILE = INTEGER
-*        A pointer to the new StcResourceProfile.
-
-*  Notes:
-*     - A deep copy is taken of the supplied Region. This means that
-*     any subsequent changes made to the encapsulated Region using the 
-*     supplied pointer will have no effect on the Stc.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRegion *region;            /* Pointer to Region structure */
-   AstStcResourceProfile *new;   /* Pointer to new StcResourceProfile */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
-   region = astCheckRegion( region_void );
-
-/* Initialise the StcResourceProfile, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcResourceProfile( NULL, sizeof( AstStcResourceProfile ), !class_init,
-                                    &class_vtab, "StcResourceProfile", region,
-                                    ncoords, coords );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcResourceProfile's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new StcResourceProfile. */
-   return new;
-}
-
-AstStcResourceProfile *astStcResourceProfileId_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, ... ) {
-/*
-*  Name:
-*     astStcResourceProfileId_
-
-*  Purpose:
-*     Create a StcResourceProfile.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcresourceprofile.h"
-*     AstStcResourceProfile *astStcResourceProfileId( AstRegion *region,
-*                  int ncoords, AstKeyMap *coords[], const char *options, ... )
-
-*  Class Membership:
-*     StcResourceProfile constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astStcResourceProfile constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astStcResourceProfile_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astStcResourceProfile_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astStcResourceProfile_.
-
-*  Returned Value:
-*     The ID value associated with the new StcResourceProfile.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstKeyMap **keymaps;            /* Pointer to array of KeyMap pointers */
-   AstRegion *region;              /* Pointer to Region structure */
-   AstStcResourceProfile *new;     /* Pointer to new StcResourceProfile */
-   int icoord;                     /* Keymap index */
-   va_list args;                   /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-   astGET_GLOBALS(NULL);         /* Get a pointer to the thread specific global data structure. */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Region. */
-   region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
-   pointers to ensure it identifies a valid KeyMap. */
-   keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
-   if( keymaps ) {
-      for( icoord = 0; icoord < ncoords; icoord++ ) {
-         keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
-      }
-   }
-
-/* Initialise the StcResourceProfile, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcResourceProfile( NULL, sizeof( AstStcResourceProfile ), !class_init,
-                                    &class_vtab, "StcResourceProfile", region,
-                                    ncoords, keymaps );
-
-/* Free resources. */
-   keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcResourceProfile's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new StcResourceProfile. */
-   return astMakeId( new );
-}
-
-AstStcResourceProfile *astInitStcResourceProfile_( void *mem, size_t size, 
-                                    int init, AstStcResourceProfileVtab *vtab, 
-                                    const char *name, AstRegion *region,
-                                    int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcResourceProfile
-
-*  Purpose:
-*     Initialise a StcResourceProfile.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcresourceprofile.h"
-*     AstStcResourceProfile *astInitStcResourceProfile_( void *mem, size_t size, 
-*                                    int init, AstStcResourceProfileVtab *vtab, 
-*                                    const char *name, AstRegion *region,
-*                                    int ncoords, AstKeyMap **coords )
-
-*  Class Membership:
-*     StcResourceProfile initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new StcResourceProfile object. It allocates memory (if necessary) to accommodate
-*     the StcResourceProfile plus any additional data associated with the derived class.
-*     It then initialises a StcResourceProfile structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a StcResourceProfile at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the StcResourceProfile is to be initialised.
-*        This must be of sufficient size to accommodate the StcResourceProfile data
-*        (sizeof(StcResourceProfile)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the StcResourceProfile (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the StcResourceProfile
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the StcResourceProfile's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new StcResourceProfile.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     region
-*        A pointer to the Region encapsulated by the StcResourceProfile.
-*     ncoords
-*        Number of KeyMap pointers supplied in "coords". Can be zero.
-*        Ignored if "coords" is NULL.
-*     coords
-*        Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-*        "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords> 
-*        element, and should have elements with keys given by constants 
-*        AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-*        AST__STCPIXSZ. These elements hold values for the corresponding 
-*        components of the STC AstroCoords element. Any of these elements may 
-*        be omitted, but no other elements should be included. All supplied 
-*        elements should be vector elements, with vector length less than or 
-*        equal to the number of axes in the supplied Region. The data type of 
-*        all elements should be "double", except for AST__STCNAME which should 
-*        be "character string". If no value is available for a given axis, then
-*        AST__BAD (or NULL for the AST__STCNAME element) should be stored in 
-*        the vector at the index corresponding to the axis (trailing axes
-*        can be omitted completely from the KeyMap).
-
-*  Returned Value:
-*     A pointer to the new StcResourceProfile.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstStcResourceProfile *new;       /* Pointer to new StcResourceProfile */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitStcResourceProfileVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
-   within the StcResourceProfile structure, allocating memory if necessary. */
-   new = (AstStcResourceProfile *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
-                                               name, region, ncoords, coords );
-
-/* If an error occurred, clean up by deleting the new StcResourceProfile. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcResourceProfile. */
-   return new;
-}
-
-AstStcResourceProfile *astLoadStcResourceProfile_( void *mem, size_t size, AstStcResourceProfileVtab *vtab, 
-                                                   const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadStcResourceProfile
-
-*  Purpose:
-*     Load a StcResourceProfile.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcresourceprofile.h"
-*     AstStcResourceProfile *astLoadStcResourceProfile( void *mem, size_t size, AstStcResourceProfileVtab *vtab, 
-*                                       const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     StcResourceProfile loader.
-
-*  Description:
-*     This function is provided to load a new StcResourceProfile using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     StcResourceProfile structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a StcResourceProfile at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the StcResourceProfile is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        StcResourceProfile data (sizeof(StcResourceProfile)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the StcResourceProfile (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the StcResourceProfile structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstStcResourceProfile) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new StcResourceProfile. If this is NULL, a pointer
-*        to the (static) virtual function table for the StcResourceProfile class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "StcResourceProfile" is used instead.
-
-*  Returned Value:
-*     A pointer to the new StcResourceProfile.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstStcResourceProfile *new;              /* Pointer to the new StcResourceProfile */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this StcResourceProfile. In this case the
-   StcResourceProfile belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstStcResourceProfile );
-      vtab = &class_vtab;
-      name = "StcResourceProfile";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitStcResourceProfileVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built StcResourceProfile. */
-   new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "StcResourceProfile" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new StcResourceProfile. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new StcResourceProfile pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
-
diff --git a/ast-5.3-1/stcresourceprofile.h b/ast-5.3-1/stcresourceprofile.h
deleted file mode 100644
index 15c501e..0000000
--- a/ast-5.3-1/stcresourceprofile.h
+++ /dev/null
@@ -1,223 +0,0 @@
-#if !defined( STCRESOURCEPROFILE_INCLUDED ) /* Include this file only once */
-#define STCRESOURCEPROFILE_INCLUDED
-/*
-*+
-*  Name:
-*     stcresourceprofile.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the StcResourceProfile class.
-
-*  Invocation:
-*     #include "stcresourceprofile.h"
-
-*  Description:
-*     This include file defines the interface to the StcResourceProfile class 
-*     and provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The StcResourceProfile class is a sub-class of Stc used to describe 
-*     the coverage of the datasets contained in some VO resource.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcResourceProfile class inherits from the Stc class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-NOV-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcResourceProfile structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstStcResourceProfile {
-
-/* Attributes inherited from the parent class. */
-   AstStc stc;             /* Parent class structure */
-
-} AstStcResourceProfile;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstStcResourceProfileVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstStcVtab stc_vtab;    /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstStcResourceProfileVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstStcResourceProfileGlobals {
-   AstStcResourceProfileVtab Class_Vtab;
-   int Class_Init;
-} AstStcResourceProfileGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcResourceProfileGlobals_( AstStcResourceProfileGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcResourceProfile)          /* Check class membership */
-astPROTO_ISA(StcResourceProfile)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstStcResourceProfile *astStcResourceProfile_( void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcResourceProfile *astStcResourceProfileId_( void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstStcResourceProfile *astInitStcResourceProfile_( void *, size_t, int, AstStcResourceProfileVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcResourceProfileVtab_( AstStcResourceProfileVtab *, const char *, int * );
-
-/* Loader. */
-AstStcResourceProfile *astLoadStcResourceProfile_( void *, size_t, AstStcResourceProfileVtab *,
-                                   const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckStcResourceProfile(this) astINVOKE_CHECK(StcResourceProfile,this,0)
-#define astVerifyStcResourceProfile(this) astINVOKE_CHECK(StcResourceProfile,this,1)
-
-/* Test class membership. */
-#define astIsAStcResourceProfile(this) astINVOKE_ISA(StcResourceProfile,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astStcResourceProfile astINVOKE(F,astStcResourceProfile_)
-#else
-#define astStcResourceProfile astINVOKE(F,astStcResourceProfileId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitStcResourceProfile(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcResourceProfile_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcResourceProfileVtab(vtab,name) astINVOKE(V,astInitStcResourceProfileVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcResourceProfile(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcResourceProfile_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcResourceProfile to validate StcResourceProfile pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/stcschan.c b/ast-5.3-1/stcschan.c
deleted file mode 100644
index 8d4e651..0000000
--- a/ast-5.3-1/stcschan.c
+++ /dev/null
@@ -1,8731 +0,0 @@
-/*
-*class++
-*  Name:
-*     StcsChan
-
-*  Purpose:
-*     I/O Channel using STC-S to represent Objects.
-
-*  Constructor Function:
-c     astStcsChan
-f     AST_STCSCHAN
-
-*  Description:
-*     A StcsChan is a specialised form of Channel which supports STC-S
-*     I/O operations. Writing an Object to an StcsChan (using
-c     astWrite) will, if the Object is suitable, generate an
-f     AST_WRITE) will, if the Object is suitable, generate an
-*     STC-S description of that Object, and reading from an StcsChan will 
-*     create a new Object from its STC-S description.
-*
-*     When an STC-S description is read using
-c     astRead,
-f     AST_READ,
-*     the returned AST Object may be 1) a PointList describing the STC
-*     AstroCoords (i.e. a single point of interest within the coordinate frame
-*     described by the STC-S description), or 2) a Region describing the STC
-*     AstrCoordsArea (i.e. an area or volume of interest within the coordinate 
-*     frame described by the STC-S description), or 3) a KeyMap
-*     containing the uninterpreted property values read form the STC-S
-*     description, or 4) a KeyMap containing any combination of the first
-*     3 options. The attributes StcsArea, StcsCoords and StcsProps
-*     control which of the above is returned by 
-c     astRead.
-f     AST_READ.
-*
-*     When an STC-S description is created from an AST Object using 
-c     astWrite,
-f     AST_WRITE,
-*     the AST Object must be either a Region or a KeyMap. If it is a
-*     Region, it is assumed to define the AstroCoordsArea or (if the
-*     Region is a single point) the AstroCoords to write to the STC-S
-*     description. If the Object is a KeyMap, it may contain an entry 
-*     with the key "AREA", holding a Region to be used to define the
-*     AstroCoordsArea. It may also contain an entry with the key "COORDS",
-*     holding a Region (a PointList) to be used to create the
-*     AstroCoords. It may also contain an entry with key "PROPS", holding
-*     a KeyMap that contains uninterpreted property values to be used as 
-*     defaults for any STC-S properties that are not determined by the
-*     other supplied Regions. In addition, a KeyMap supplied to
-c     astWrite
-f     AST_WRITE
-*     may itself hold the default STC-S properties (rather than defaults
-*     being held in a secondary KeyMap, stored as the "PROPS" entry in the 
-*     supplied KeyMap).
-*
-*     The 
-c     astRead and astWrite
-f     AST_READ and AST_WRITE
-*     functions work together so that any Object returned by 
-c     astRead can immediately be re-written using astWrite.
-f     AST_READ can immediately be re-written using AST_WRITE.
-*
-*     Normally, when you use an StcsChan, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-c     by reading and writing the resulting text. These functions
-f     and "sink" routines which connect it to an external data store
-f     by reading and writing the resulting text. These routines
-*     should perform any conversions needed between external character 
-c     encodings and the internal ASCII encoding. If no such functions 
-f     encodings and the internal ASCII encoding. If no such routines
-*     are supplied, a Channel will read from standard input and write 
-*     to standard output.
-
-*     Support for STC-S is currently based on the IVOA document "STC-S: 
-*     Space-Time Coordinate (STC) Metadata Linear String Implementation", 
-*     version 1.30 (dated 5th December 2007), available at
-*     http://www.ivoa.net/Documents/latest/STC-S.html. Note, this
-*     document is a recommednation only and does not constitute an accepted 
-*     IVOA standard. 
-*
-*     The full text of version 1.30 is supported by the StcsChan class, 
-*     with the following exceptions and provisos:
-*
-*     - When reading an STC-S phrase, case is ignored except when reading
-*     units strings.
-*     - There is no support for multiple intervals specified within a 
-*     TimeInterval, PositionInterval, SpectralInterval or RedshiftInterval.
-*     - If the ET timescale is specified, TT is used instead.
-*     - If the TEB timescale is specified, TDB is used instead.
-*     - The LOCAL timescale is not supported.
-*     - The AST TimeFrame and SkyFrame classes do not currently allow a 
-*     reference position to be specified. Consequently, any <refpos> 
-*     specified within the Time or Space sub-phrase of an STC-S document 
-*     is ignored.
-*     - The Convex identifier for the space sub-phrase is not supported.
-*     - The GEO_C and GEO_D space frames are not supported.
-*     - The UNITSPHERE and SPHER3 space flavours are not supported.
-*     - If any Error values are supplied in a space sub-phrase, then the
-*     number of values supplied should equal the number of spatial axes, 
-*     and the values are assumed to specify an error box (i.e. error
-*     circles, ellipses, etc, are not supported).
-*     - The spectral and redshift sub-phrases do not support the
-*     following <refpos> values: LOCAL_GROUP_CENTER, UNKNOWNRefPos,
-*     EMBARYCENTER, MOON, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS,
-*     NEPTUNE, PLUTO.
-*     - Error values are supported but error ranges are not.
-*     - Resolution, PixSize and Size values are ignored.
-*     - Space velocity sub-phrases are ignored.
-
-*  Inheritance:
-*     The StcsChan class inherits from the Channel class.
-
-*  Attributes:
-*     In addition to those attributes common to all Channels, every
-*     StcsChan also has the following attributes:
-*
-*     - StcsArea: Return the CoordinateArea component after reading an STC-S?
-*     - StcsCoords: Return the Coordinates component after reading an STC-S?
-*     - StcsIndent: Controls output of indentation and line feeds
-*     - StcsLength: Controls output buffer length
-*     - StcsProps: Return the STC-S properties after reading an STC-S?
-
-*  Functions:
-c     The StcsChan class does not define any new functions beyond those
-f     The StcsChan class does not define any new routines beyond those
-*     which are applicable to all Channels.
-
-*  Copyright:
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     18-DEC-2008 (DSB):
-*        Original version.
-*     22-MAY-2008 (DSB):
-*        Retain default Equinox values in SkyFrame when reading an STC-S.
-*     30-OCT-2009 (DSB):
-*        Make case insensitive (except for units strings).
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS StcsChan
-
-/* Values identifying particular forms of CoordArea */
-#define NULL_ID                1
-#define TIME_INTERVAL_ID       2
-#define START_TIME_ID          3
-#define STOP_TIME_ID           4
-#define POSITION_INTERVAL_ID   5
-#define ALLSKY_ID             6
-#define CIRCLE_ID              7
-#define ELLIPSE_ID             8
-#define BOX_ID                 9
-#define POLYGON_ID            10
-#define CONVEX_ID             11
-#define POSITION_ID           12
-#define TIME_ID               13
-#define SPECTRAL_INTERVAL_ID  14
-#define SPECTRAL_ID           15
-#define REDSHIFT_INTERVAL_ID  16
-#define REDSHIFT_ID           17
-#define VELOCITY_INTERVAL_ID  18
-#define UNION_ID  	      19
-#define INTERSECTION_ID       20
-#define DIFFERENCE_ID         21
-#define NOT_ID                22
-#define VELOCITY_ID           23
-
-/* The number of words used to form an extract from an STC-S description
-   for use in an error message. */
-#define NEWORD 10
- 
-/* Max length of string returned by GetAttrib */
-#define GETATTRIB_BUFF_LEN 50    
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "frame.h"               /* Generic cartesian coordinate systems */
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "channel.h"             /* Interface for parent class */
-#include "stcschan.h"            /* Interface definition for this class */
-#include "loader.h"              /* Interface to the global loader */
-#include "skyframe.h"            /* Celestial coordinate systems */
-#include "timeframe.h"           /* Time coordinate systems */
-#include "specframe.h"           /* Spectral coordinate systems */
-#include "wcsmap.h"              /* PI-related constants */
-#include "region.h"              /* Abstract regions */
-#include "interval.h"            /* Axis intervals */
-#include "unitmap.h"             /* Unit mappings */
-#include "nullregion.h"          /* Boundless regions */
-#include "cmpregion.h"           /* Compound regions */
-#include "box.h"                 /* Box regions */
-#include "prism.h"               /* Prism regions */
-#include "circle.h"              /* Circle regions */
-#include "ellipse.h"             /* Ellipse regions */
-#include "polygon.h"             /* Polygon regions */
-#include "pointlist.h"           /* Lists of points */
-#include "keymap.h"              /* KeyMap interface */
-
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Module Types. */
-/* ============= */
-typedef struct WordContext {
-   char *line;
-   char *wnext;
-   char *e;
-   char f;
-   int done;
-   char *words[ NEWORD ];
-   int next;
-   int close;
-   int open;
-} WordContext;
-
-/* Module Variables. */
-/* ================= */
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->Class_Init = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcsChan)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define getattrib_buff astGLOBAL(StcsChan,GetAttrib_Buff)
-#define class_init astGLOBAL(StcsChan,Class_Init)
-#define class_vtab astGLOBAL(StcsChan,Class_Vtab)
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstStcsChanVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ GETATTRIB_BUFF_LEN + 1 ];
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstStcsChan *astStcsChanForId_( const char *(*)( void ), 
-                                char *(*)( const char *(*)( void ), int * ), 
-                                void (*)( const char * ), 
-                                void (*)( void (*)( const char * ), const char *, int * ),
-                                const char *, ... );
-AstStcsChan *astStcsChanId_( const char *(* source)( void ),
-                             void (* sink)( const char * ),
-                             const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstKeyMap *ReadProps( AstStcsChan *, int * );
-static AstObject *Read( AstChannel *, int * );
-static AstPointList *SinglePointList( AstFrame *, double *, AstRegion *, int *);
-static AstRegion *MakeSpaceRegion( AstKeyMap *, AstFrame *, double, int * );
-static char *AddItem( AstStcsChan *, AstKeyMap *, const char *, const char *, char *, int *, int *, int, int * );
-static char *ContextFragment( WordContext *, char **, int * );
-static char *PutRegionProps( AstStcsChan *, AstKeyMap *, const char *, int, char *, int *, int *, int, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static const char *GetNextWord( AstStcsChan *, WordContext *, int * );
-static const char *ReadSpaceArgs( AstStcsChan *, const char *, int, int, WordContext *, AstKeyMap *, int * );
-static double *BoxCorners( AstFrame *, const double[2], const double[2], int * );
-static int GetRegionProps( AstStcsChan *, AstRegion *, AstKeyMap *, int, int, double, int, int * );
-static int SpaceId( const char *, int * );
-static int Write( AstChannel *, AstObject *, int * );
-static int WriteRegion( AstStcsChan *, AstRegion *, AstKeyMap *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FreeContext( WordContext *, int * );
-static void GetFmt( const char *, AstKeyMap *, int, int, char *, int * );
-static void MapPut0C( AstKeyMap *, const char *, const char *, const char *, int, int * );
-static void MapPut0D( AstKeyMap *, const char *, double, double, int, int * );
-static void SetUnc( AstRegion *, AstRegion *, AstFrame *, int, double, double *, int, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void WriteProps( AstStcsChan *, AstKeyMap *, int * );
-
-static int GetStcsArea( AstStcsChan *, int * );
-static int TestStcsArea( AstStcsChan *, int * );
-static void ClearStcsArea( AstStcsChan *, int * );
-static void SetStcsArea( AstStcsChan *, int, int * );
-
-static int GetStcsCoords( AstStcsChan *, int * );
-static int TestStcsCoords( AstStcsChan *, int * );
-static void ClearStcsCoords( AstStcsChan *, int * );
-static void SetStcsCoords( AstStcsChan *, int, int * );
-
-static int GetStcsProps( AstStcsChan *, int * );
-static int TestStcsProps( AstStcsChan *, int * );
-static void ClearStcsProps( AstStcsChan *, int * );
-static void SetStcsProps( AstStcsChan *, int, int * );
-
-static void ClearAttrib( AstObject *, const char *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-
-static int TestStcsLength( AstStcsChan *, int * );
-static void ClearStcsLength( AstStcsChan *, int * );
-static void SetStcsLength( AstStcsChan *, int, int * );
-static int GetStcsLength( AstStcsChan *, int * );
-
-static int TestStcsIndent( AstStcsChan *, int * );
-static void ClearStcsIndent( AstStcsChan *, int * );
-static void SetStcsIndent( AstStcsChan *, int, int * );
-static int GetStcsIndent( AstStcsChan *, int * );
-
-
-/* Member functions. */
-/* ================= */
-
-static char *AddItem( AstStcsChan *this, AstKeyMap *km, const char *key, 
-                      const char *prefix, char *line, int *nc, int *crem, 
-                      int linelen, int *status ){
-/*
-*  Name:
-*     AddItem
-
-*  Purpose:
-*     Add an STC-S property item to a buffer.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     char *AddItem( AstStcsChan *this, AstKeyMap *km, const char *key, 
-*                    const char *prefix, char *line, int *nc, int *crem, 
-*                    int linelen, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function creates a new Box with dimensions specified by the
-*     values in the "error" array, centred on a representative position
-*     within one of the supplied Regions, and then stores the Box as the
-*     uncertainty Region within both the supplied Regions. 
-
-*  Parameters:
-*     this
-*        The StcsChan.
-*     km
-*        Pointer to a KeyMap containing the STC-S properties.
-*     key
-*        The key name associated with the property to be checked.
-*     prefix
-*        if not NULL, this is a string that is to be written out before
-*        the property value. It should usually include a trailing space.
-*     line
-*        Pointer to the buffer to recieve the prefix and property value.
-*     nc
-*        Pointer to an int in which to store the number of characters in
-*        the buffer. Updated on exit.
-*     crem
-*        Pointer to an int in which to store the maximum number of 
-*        characters before a new line. Ignored if linelen is zero. Updated 
-*        on exit.
-*     linelen
-*        The maximum number of character per line, or zero if all text is
-*        to be included in a single line.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the buffer. This will usually be "line", but may be
-*     different to "line" if it was necessary to expand the memory to make 
-*     room for the new property. 
-
-*/
-
-/* Local Variables: */
-   char *result;          /* Returned pointer */
-   const char *word;      /* Property value */
-   int len;               /* Length of new text */
-
-/* Initialise */
-   result = line;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the KeyMap contains the required property... */
-   if( astMapGet0C( km, key, &word ) ) {
-
-/* If required, get the number of characters to be added to the buffer. */
-      if( linelen ) {
-         len = ( prefix ? strlen( prefix ) : 0 ) + strlen( word );
-
-/* If there is insufficient room left, write out the text through the 
-   Channel sink function, and start a new line with three spaces. Then
-   reset the number of character remaining in the line. */
-         if( len > *crem && len < linelen ) {
-            astPutNextText( this, result );
-            *nc = 0;
-            result = astAppendString( result, nc, "   " );
-            *crem = linelen - 3;
-         } 
-
-/* Reduce crem to account for the text that is about to be added to the
-   line. */
-         *crem -= len;
-      }
-
-/* Add any supplied prefix to the returned buffer. */
-      if( prefix ) result = astAppendString( result, nc, prefix );
-
-/* Add the property value to the returned buffer. */
-      result = astAppendString( result, nc, word );
-
-/* Add a traling space to the returned buffer. */
-      if( !linelen || len < *crem ) {
-         result = astAppendString( result, nc, " " );
-      }
-   }
-
-/* Return the buffer pointer. */
-   return result;
-}
-
-static double *BoxCorners( AstFrame *frm, const double centre[2],
-                           const double bsize[2], int *status ) {
-/*
-*  Name:
-*     BoxCorners
-
-*  Purpose:
-*     Determine the positions of the corners of an STC Box.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     double *BoxCorners( AstFrame *frm, const double centre[2],
-*                         const double bsize[2], int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated array
-*     holding the positions of the corners of the STC Box defined by the
-*     supplied "centre" and "bsize" arrays.
-
-*  Parameters:
-*     frm
-*        Pointer to the Frame in which the Box is defined. Must be 2-D.
-*     centre
-*        Two element array holding the Frame co-ordinates at the centre
-*        of the Box.
-*     bsize
-*        Two element array holding the full width and height of the Box.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array holding the axis values
-*     at the four corners, in a form suitable for passing to the
-*     astPolygon constructor function. NULL is returned if an error has 
-*     already occurred, of if this function fails for any reason.
-*/
-
-/* Local Variables: */
-   double *result;         /* Returned pointer. */
-   double bh1[ 2 ];        /* A first point on the bottom horizontal edge */
-   double bh2[ 2 ];        /* A second point on the bottom horizontal edge */
-   double blc[ 2 ];        /* Position of bottom left corner */
-   double brc[ 2 ];        /* Position of bottom right corner */
-   double lv1[ 2 ];        /* A first point on the left vertical edge */
-   double lv2[ 2 ];        /* A second point on the left vertical edge */
-   double pa;              /* Position angle of great circle/straight line */
-   double rv1[ 2 ];        /* A first point on the right vertical edge */
-   double rv2[ 2 ];        /* A second point on the right vertical edge */
-   double th1[ 2 ];        /* A first point on the top horizontal edge */
-   double th2[ 2 ];        /* A second point on the top horizontal edge */
-   double tlc[ 2 ];        /* Position of top left corner */
-   double trc[ 2 ];        /* Position of top right corner */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Check the Frame is 2-dimensional. */
-   if( astGetNaxes( frm ) != 2 ) {
-      astError( AST__BADIN, "astRead(StcsChan): Supplied space frame has "
-                "%d axes.", status, astGetNaxes( frm ) );
-      astError( AST__BADIN, "astRead(StcsChan): Can only use STC Box regions "
-                "with 2-dimensional space frames.", status );
-   }
-
-/* Offset away from the centre by half the Box width along a great circle
-   initially parallel to the positive first frame axis (i.e. position 
-   angle +pi/2). The end position goes in "rv1" and the position angle of
-   the great circle (or straight line) at that point is returned as the 
-   function value. NOTE, the use of the words "left" and "right" below is 
-   vague because it depends on whether we are using a SkyFrame (which has 
-   a reversed first axis) or a basic Frame. In general, the choice of "left"
-   and "right" below is appropriate for a basic Frame. */
-   pa = astOffset2( frm, centre, AST__DPIBY2, bsize[ 0 ]/2, rv1 );  
-
-/* Turn by 90 degrees and offset away by half the box height. This is done 
-   so that we have a second point (rv2) to define the great circle (or 
-   straight line) that forms the first vertical edge of the Box (i.e. the 
-   great circle or straight line through rv1 and rv2). Note, for spherical 
-   Frames (i.e. SkyFrames) "rv2" is not necessarily a corner of the box. */
-   (void) astOffset2( frm, rv1, pa + AST__DPIBY2, bsize[ 1 ]/2, rv2 );  
-
-/* In the same way, get two points on the second vertical Box edge. */
-   pa = astOffset2( frm, centre, -AST__DPIBY2, bsize[ 0 ]/2, lv1 );  
-   (void) astOffset2( frm, lv1, pa + AST__DPIBY2, bsize[ 1 ]/2, lv2 );  
-
-/* In the same way, get two points on the top horizontal Box edge. */
-   pa = astOffset2( frm, centre, 0.0, bsize[ 1 ]/2, th1 );  
-   (void) astOffset2( frm, th1, pa + AST__DPIBY2, bsize[ 0 ]/2, th2 );  
-
-/* In the same way, get two points on the bottom horizontal Box edge. */
-   pa = astOffset2( frm, centre, AST__DPI, bsize[ 1 ]/2, bh1 );  
-   (void) astOffset2( frm, bh1, pa + AST__DPIBY2, bsize[ 0 ]/2, bh2 );  
-
-/* The first corner of the Box is at the intersection of the first
-   vertical and top horizontal edges. */
-   astIntersect( frm, lv1, lv2, th1, th2, tlc );
-
-/* The top right corner of the Box is at the intersection of the right
-   vertical and top horizontal edges. */
-   astIntersect( frm, rv1, rv2, th1, th2, trc );
-
-/* The bottom left corner of the Box is at the intersection of the left
-   vertical and bottom horizontal edges. */
-   astIntersect( frm, lv1, lv2, bh1, bh2, blc );
-
-/* The bottom right corner of the Box is at the intersection of the right
-   vertical and bottom horizontal edges. */
-   astIntersect( frm, rv1, rv2, bh1, bh2, brc );
-
-/* Gather the corners together into an array suitable for use with
-   astPolygon. Make sure the vertices are traversed in an ant-clockwise
-   sense whether in a SkyFrame or a basic Frame. */
-   result = astMalloc( 8*sizeof( *result ) );
-   if( result ) {
-      if( astIsASkyFrame( frm ) ) {        
-         result[ 0 ] = tlc[ 0 ];
-         result[ 1 ] = trc[ 0 ];
-         result[ 2 ] = brc[ 0 ];
-         result[ 3 ] = blc[ 0 ];
-         result[ 4 ] = tlc[ 1 ];
-         result[ 5 ] = trc[ 1 ];
-         result[ 6 ] = brc[ 1 ];
-         result[ 7 ] = blc[ 1 ];
-      } else {
-         result[ 3 ] = tlc[ 0 ];
-         result[ 2 ] = trc[ 0 ];
-         result[ 1 ] = brc[ 0 ];
-         result[ 0 ] = blc[ 0 ];
-         result[ 7 ] = tlc[ 1 ];
-         result[ 6 ] = trc[ 1 ];
-         result[ 5 ] = brc[ 1 ];
-         result[ 4 ] = blc[ 1 ];
-      }
-
-   }
-
-/* Return the pointer. */
-   return result;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a StcsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     StcsChan member function (over-rides the astClearAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     StcsChan, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstStcsChan *this;              /* Pointer to the StcsChan structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-   if ( !strcmp( attrib, "stcsarea" ) ) {
-      astClearStcsArea( this );
-
-   } else if ( !strcmp( attrib, "stcscoords" ) ) {
-      astClearStcsCoords( this );
-
-   } else if ( !strcmp( attrib, "stcsprop" ) ) {
-      astClearStcsProps( this );
-
-   } else if ( !strcmp( attrib, "stcsindent" ) ) {
-      astClearStcsIndent( this );
-
-   } else if ( !strcmp( attrib, "stcslength" ) ) {
-      astClearStcsLength( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static char *ContextFragment( WordContext *con, char **buf, int *status ){
-/*
-*  Name:
-*     ContextFragment
-
-*  Purpose:
-*     Returns a string holding a fragment of the document being read.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     char *ContextFragment( WordContext *con, char **buf, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function returns a pointer to a string that holds a fragment
-*     of the STC-S document currently being read. The fragment ends at
-*     the last word read by function GetNextWord, and starts a certain
-*     number of words earlier in the document, as specified by the NEWORD 
-*     macro.
-
-*  Parameters:
-*     con
-*        Pointer to the context structure, managed by GetNextWord.
-*     buf
-*        Address of a pointer to a dynamically allocated buffer. This 
-*        pointer should be NULL on the first call to this function, and
-*        will be updated by this function. The pointer should be freed
-*        using astFree when no longer needed.
-*     status
-*        Address of the inherited status value.
-
-*  Returned Value:
-*     A pointer to the buffer.
-*/
-
-/* Local Variables: */
-   int i;                     /* Word count */
-   int j;                     /* Word index */
-   int nc;                    /* Text length */
-
-/* Initialise the number of characters written to the buffer. */
-   nc = 0;
-
-/* Get the index of the first word to add to the buffer. The "next"
-   component of the context structure holds the index at which the word 
-   returned by the next call to GetNextWord will be stored. So at the
-   moment, this is the index of the oldest word in the cyclic list. */
-   j = con->next;
-
-/* Loop round all non-NULL words in the cyclic list. */
-   for( i = 0; i < NEWORD; i++ ) {
-      if( con->words[ j ] ) {
-
-/* Append this word to the buffer, extending the buffer size as
-   necessary. */
-         *buf = astAppendString( *buf, &nc, con->words[ j ] );
-
-/* Append a trailingh space. */
-         *buf = astAppendString( *buf, &nc, " " );
-      }
-
-/* Increment the index of the next word to use in the cyclic list. Wrap
-   back to zerp when the end of the list is reached. */
-      if( ++j == NEWORD ) j = 0;
-   }
-
-/* Remove the final trailing space. */
-   if( nc ) (*buf)[ nc - 1 ] = 0;
-
-/* Return a pointer to the supplied buffer. */
-   return *buf;
-}
-
-static void FreeContext( WordContext *con, int *status ){
-/*
-*  Name:
-*     FreeContext
-
-*  Purpose:
-*     Free the resources used by a word-reading context structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     voidFreeContext( WordContext *con, int *status );
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function frees the resources used by the supplied WordContext
-*     structure. This structure is used by GetNextWord to keep track of
-*     which word to return next.
-*
-*     This function frees the dynamic memory pointers stored within the 
-*     WordContext structure, but does not free the memory holding the
-*     WordContext structure itself.
-
-*  Parameters:
-*     con
-*        Pointer to a structure holding the context. 
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int i;                         /* Word index */
-
-/* Check the supplied pointer. */
-   if ( !con ) return;
-
-/* Free the resources. */
-   con->line = astFree( con->line );
-
-   for( i = 0; i < NEWORD; i++ ) {
-      con->words[ i ] = astFree( con->words[ i ] );
-   }
-
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a StcsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     StcsChan member function (over-rides the protected astGetAttrib
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a StcsChan, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the StcsChan, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the StcsChan. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;           /* Declare the thread specific global data */
-   AstStcsChan *this;            /* Pointer to the StcsChan structure */
-   const char *result;           /* Pointer value to return */
-   int ival;                     /* Integer attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* StcsArea. */
-/* --------- */
-   if ( !strcmp( attrib, "stcsarea" ) ) {
-      ival = astGetStcsArea( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* StcsCoords. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "stcscoords" ) ) {
-      ival = astGetStcsCoords( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-
-/* StcsProps. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "stcsprops" ) ) {
-      ival = astGetStcsProps( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* StcsIndent */
-/* --------- */
-   } else if ( !strcmp( attrib, "stcsindent" ) ) {
-      ival = astGetStcsIndent( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* StcsLength */
-/* --------- */
-   } else if ( !strcmp( attrib, "stcslength" ) ) {
-      ival = astGetStcsLength( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void GetFmt( const char *key, AstKeyMap *props, int i, int defdigs, 
-                    char *fmt, int *status ){
-/*
-*  Name:
-*     GetFmt
-
-*  Purpose:
-*     Decide how many digits to use when formatting a numerical STC-S
-*     property value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void GetFmt( const char *key, AstKeyMap *props, int i, 
-*                  int defdigs, char *fmt, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function locates the named property in the supplied KeyMap. If
-*     it is found, a printf format specifier is generated that matches
-*     the value is determined and returned. Otherwise, a default format
-*     specified based on the supplied default number of digits is returned.
-
-*  Parameters:
-*     key
-*        The key name associated with the property.
-*     km
-*        Pointer to a KeyMap containing the STC-S properties.
-*     i
-*        For vector values, this is the index of the vector element to be
-*        checked. Should be zero for scalar values. If "i" is greater
-*        than the number of values in the vector, then the number of digits 
-*        in the first element is found and returned.
-*     defdigs
-*        The value to return if the KeyMap does not contain an entry with
-*        the supplied key.
-*     fmt
-*        Pointer to a string in which to return the format specifier.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   const char *dot;       /* Pointer to decimal point */
-   const char *p;         /* Pointer to next character */
-   const char *word;      /* Property value */
-   int after0;            /* Digits after the decimal point in first word */
-   int after;             /* Digits after the decimal point in current word */
-   int before0;           /* Digits before the decimal point in first word */
-   int before;            /* Digits before the decimal point in current word */
-   int exp0;              /* Was an exponent found in first word? */
-   int exp;               /* Was an exponent found in current word? */
-   int j;                 /* Index of current word */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise. */
-   exp = 1;
-   before = defdigs;
-   after = 0;
-   exp0 = 0;
-   before0 = 0;
-   after0 = 0;
-
-/* If the KeyMap contains the required property... */
-   if( astMapGet0C( props, key, &word ) ) {
-
-/* Skip over the words in the string. */
-      p = word;
-      for( j = 0; j <= i; j++ ) {
-
-/* Find the next space or terminating null at the end of the current word. 
-   Also count the number of digits before and after the decimal point and
-   see if the word includes an exponent. */
-         exp = 0;
-         before = 0;
-         after = 0;
-         dot = NULL;
-
-         while( *p != 0 && *p != ' ' ) {
-            if( ! exp ) {
-               if( isdigit( *p ) ) {
-                  if( dot ) {
-                     after++;
-                  } else {
-                     before++;
-                  }
-
-               } else if( *p == '.' ) {
-                  dot = p;
-                  
-               } else if( *p == 'e' || *p == 'E' ) {
-                  exp = 1;
-               }
-            }
-            p++;
-         }
-
-/* Note the values for the first word. */
-         if( j == 0 ) {
-            exp0 = exp;
-            before0 = before;
-            after0 = after;
-         }
-
-/* Find the following non-space marking the start of the next word, 
-   or the terminating null. */
-         while( *p != 0 && *p == ' ' ) p++;
-
-/* If we find the terminating null before we have found the i'th word,
-   break out of the loop using the first word instead of the i'th word. */
-         if( *p == 0 ) {
-            exp = exp0;
-            before = before0;
-            after = after0;
-            break;
-         }
-      }
-   }
-
-   if( exp ) {
-      sprintf( fmt, "%%.%dg", before + after );
-   } else {
-      sprintf( fmt, "%%.%df", after );
-   }
-}
-
-static const char *GetNextWord( AstStcsChan *this, WordContext *con, 
-                                int *status ){
-/*
-*  Name:
-*     GetNextWord
-
-*  Purpose:
-*     Get a pointer to the next input word read from an STC-S source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     const char *GetNextWord( AstStcsChan *this, WordContext *con, 
-*                              int *status ) 
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function returns a pointer to the next word of an STC-S
-*     description.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan, or NULL (to initialise "con"). 
-*     con
-*        Pointer to a structure holding context. The structure should be
-*        initialised by calling this function with a NULL "this" pointer
-*        before making further use of this function. When finished, it
-*        should be released using FreeContext.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new word. NULL is returned if an error has already
-*     occurred, of if "this" is NULL.
-*/
-
-/* Local Variables: */
-   const char *result;            /* Returned pointer. */
-   int i;                         /* Word index */
-   size_t len;                    /* Word length */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If no StcChan was supplied, initialise the supplied WordContext. */
-   if( !this ) {
-      con->e = NULL;
-      con->line = NULL;
-      con->done = 0;
-      con->next = 0;
-      con->wnext = NULL;
-      con->close = 0;
-      con->open = 0;
-      for( i = 0; i < NEWORD; i++ ) con->words[ i ] = NULL;
-
-/* Words that end with an opening parenthesis are treated as two words. If the 
-   previous word ended in an opening parenthesis, it will have been removed by 
-   the previous call to this function and the "con->open" flag set. In
-   this case, we just return a pointer to the second of the two words - a
-   single "(" character - and clear the "con->open" flag. */
-   } else if( con->open && ! con->done ) {
-      con->open = 0;
-      result = "(";
-
-/* Likewise deal with words that end with a closing parenthesis. */
-   } else if( con->close && ! con->done ) {
-      con->close = 0;
-      result = ")";
-
-/* Words that begin with an opening parenthesis are treated as two words. If 
-   the previous word was such an opening parenthesis, the rest of the word
-   will have been removed by the previous call to this function and the 
-   "con->wnext" pointer set to the start of the remaining word. In
-   this case, re-instate the original character that was replaced by a
-   terminating null when the previous word was returned, return the 
-   "con->wnext" pointer, and then clear the pointer. */
-   } else if( con->wnext && ! con->done ) {
-      *(con->wnext) = con->f;
-      result = con->wnext;
-      con->wnext = NULL;
-
-/* Otherwise... */   
-   } else {
-
-/* If the previous invocation of this function converted a space
-   character into a null character, change it back again. */
-      if( con->e ) *(con->e) = ' ';
-
-/* Get a pointer to the next non-white character in the current line of
-   input text. */
-      result = con->e;
-      if( result ) {
-         while( *result && isspace( *result ) ) result++;
-      }
-
-/* If we have exhausted the current line, get the next line by invoking
-   the source function. We loop until we read a line that is not entirely 
-   blank. */
-      while( ( !result || ! *result ) && astOK ) {
-
-/* First free the memory holding the previous line. */
-         if( con->line ) con->line = astFree( con->line );
-         con->e = NULL;
-
-/* Get the next line of text from the source function. */
-         con->line = astGetNextText( this );
-         result = con->line;
-
-/* Break when we reach the end of the input text. */
-         if( !result ) break;
-
-/* Get a pointer to the first non-white character in the new line. */
-         while( *result && isspace( *result ) ) result++;
-      }
-
-/* Find the end of the word. */
-      if( result && *result ) {
-         con->e = (char *) result + 1;
-         while( *(con->e) && !isspace( *(con->e) ) ) (con->e)++;
-
-/* If the word is already null-terminated, nullify the "e" pointer to
-   indicate this. Otherwise, change the white-space character into a
-   null. */
-         if( *(con->e) ) {
-            *(con->e) = 0;
-            len = con->e - result;
-         } else {
-            con->e = NULL;
-            len = strlen( result );
-         }
-
-/* Add the word into the cyclic list of words used to form a document
-   fragment to include in error and warning messages. */
-         con->words[ con->next ] = astStore( con->words[ con->next ],
-                                             result, len + 1 );
-         if( ++(con->next) == NEWORD ) con->next = 0;
-
-/* Deal with words that include an opening or closing parenthesis at
-   start or end. These words must have 2 or more characters. */
-         if( len > 1 ) {
-
-/* If the word ends with an opening parenthesis, replace the parenthesis
-   with a null character and set a flag indicating that the next word
-   returned should consist of just an opening parenthesis. */
-            if( result[ len - 1 ] == '(' ) {
-               ((char *) result)[ len - 1 ] = 0;
-               con->open = 1;
-
-/* If the word ends with a closing parenthesis, replace the parenthesis
-   with a null character and set a flag indicating that the next word
-   returned should consist of just a closing parenthesis. */
-            } else if( result[ len - 1 ] == ')' ) {
-               ((char *) result)[ len - 1 ] = 0;
-               con->close = 1;
-
-/* If the word starts with an opening parenthesis, replace the parenthesis
-   with a null character and set a flag indicating that the next word
-   returned should consist of just a closing parenthesis. */
-            } else if( result[ 0 ] == '(' ) {
-               con->wnext = ( (char *) result ) + 1;
-               con->f = *(con->wnext);
-               *(con->wnext) = 0;
-            }
-         }
-
-/* If we have run out of input words, but we have not yet finished
-   interpreting the previous word returned, return a null string, rather
-   than a null pointer in order to allow further interpretation of the
-   previous word. */
-      } else if( ! con->done ) {
-         result = "";
-      }
-   }
-
-/* Return the pointer to the next word. */
-   return result;
-}
-
-static int GetRegionProps( AstStcsChan *this, AstRegion *spreg, 
-                           AstKeyMap *spprops, int nspace, int defdigs,
-                           double scale, int issky, int *status ) {
-/*
-*  Name:
-*     GetRegionProps
-
-*  Purpose:
-*     Create STC-S properties to describe a given Region and store in a
-*     KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     int GetRegionProps( AstStcsChan *this, AstRegion *spreg, 
-*                         AstKeyMap *spprops, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function creates a set of STC-S properties to describe the
-*     supplied spatial (2D) Region, and stores them in the supplied KeyMap.
-
-*  Parameters:
-*     this
-*        The StcsChan being used.
-*     spreg
-*        The 2-D spatial Region to be described.
-*     spprops
-*        A KeyMap in which to store the created properties.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Returns the integer code for the spatial region, or NULL_ID if the 
-*     properties could not be created for any reason.
-
-*/
-
-
-/* Local Variables: */
-   AstKeyMap *new_props;   /* KeyMap holding component Region properties */
-   AstMapping *sreg;       /* Simplified Region */
-   AstRegion **reg_list;   /* Array of component Regioon pointers */
-   char *prop;             /* Formatted property string */
-   char buf[ 100 ];        /* Buffer for formatted values */
-   char fmt[ 10 ];         /* Buffer for format specifier */
-   double *p;              /* Pointer to next axis value */
-   double *points;         /* Pointer to array of Region axis values */
-   double a;               /* Circle or ellipse radius */
-   double angle;           /* Ellipse position angle */
-   double b;               /* Ellipse radius */
-   double centre[ 3 ];     /* Circle or ellipse centre */
-   double lbnd[ 3 ];       /* Region lower bounds */
-   double ubnd[ 3 ];       /* Region upper bounds */
-   int i;                  /* Loop index */
-   int j;                  /* Loop index */
-   int nc;                 /* Number of characters in "prop" string */
-   int np;                 /* Number of points defining the Region */
-   int nreg;               /* Number of component Regions */
-   int ok;                 /* Can the Region be written out? */
-   int oper;               /* Code for CmpRegion boolean operator */
-   int spaceid;            /* Identifier for STC-S spatial region type */
-
-/* Check inherited status */
-   if( !astOK ) return NULL_ID;
-
-/* Initialise */
-   spaceid = NULL_ID;
-   ok = 1;
-   prop = NULL;
-
-/* If the Region has been negated, temporarily negate the Region, and
-   write its properties into a new KeyMap by calling this function
-   recursively. Then store the new KeyMap in the supplied KeyMap. */
-   if( astGetNegated( spreg ) ) {
-      spaceid = NOT_ID;
-      astNegate( spreg );   
-      new_props = astKeyMap( " ", status );
-
-      if( GetRegionProps( this, spreg, new_props, nspace, defdigs,
-                          scale, issky, status ) == NULL_ID ) ok = 0;
-
-      astMapPut0C( spprops, "ID", "Not", NULL );
-      astMapPut0A( spprops, "REGION1", new_props, NULL );
-      astMapPut0I( spprops, "NREG", 1, NULL );
-      astNegate( spreg );   
-
-/* Store properties that are specific to AllSky sub-phrases (i.e. none)... */
-   } else if( astIsANullRegion( spreg ) && astGetNegated( spreg ) ) {
-      spaceid = ALLSKY_ID;
-      astMapPut0C( spprops, "ID", "AllSky", NULL );
-
-/* Store properties that are specific to Circle sub-phrases... */
-   } else if( astIsACircle( spreg ) ) {
-      spaceid = CIRCLE_ID;
-      astMapPut0C( spprops, "ID", "Circle", NULL );
-
-/* Get the geometric parameters of the Circle. */
-      astCirclePars( spreg, centre, &a, NULL );
-
-/* Create a string holding the formatted centre axis values, scaling
-   to the required units. Use the Frame's Digits attribute to specify 
-   how many digits to use when formatting the axis values. */
-      nc = 0;
-      for( i = 0; i < nspace; i++ ) {
-         if( centre[ i ] != AST__BAD ) {
-            GetFmt( "CENTRE", spprops, i, defdigs, fmt, status );
-            (void) sprintf( buf, fmt, scale*centre[ i ] );
-            prop = astAppendString( prop, &nc, buf );
-            prop = astAppendString( prop, &nc, " " );
-
-         } else {
-            ok = 0;
-            astAddWarning( this, 1, "The supplied Circle contains "
-                           "one or more bad centre axis values.", 
-                           "astWrite", status );
-            break;
-         }
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( spprops, "CENTRE", prop, NULL );
-
-/* Scale, format and store the radius. */
-      if( a != AST__BAD ) {
-         GetFmt( "RADIUS", spprops, 0, defdigs, fmt, status );
-         (void) sprintf( buf, fmt, scale*a );
-         astMapPut0C( spprops, "RADIUS", buf, NULL );
-      } else {
-         ok = 0;
-         astAddWarning( this, 1, "The supplied Circle has an "
-                        "undefined radius.", "astWrite", status );
-      }
-
-/* Store properties that are specific to PositionInterval sub-phrases... */
-   } else if( astIsAInterval( spreg ) || astIsABox( spreg ) ) {
-      spaceid = POSITION_INTERVAL_ID;
-      astMapPut0C( spprops, "ID", "PositionInterval", NULL );
-
-/* Get the bounds of the Region. */
-      astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Create a string holding the formatted low limits, scaling to the 
-   required units. Use the Frame's Digits attribute to specify how 
-   many digits to use when formatting the axis values. */
-      nc = 0;
-      for( i = 0; i < nspace; i++ ) {
-         if( lbnd[ i ] == AST__BAD || lbnd[ i ] == DBL_MAX || 
-             lbnd[ i ] == -DBL_MAX ) {
-            astAddWarning( this, 1, "Spatial axis %d has an undefined "
-                           "lower limit.", "astWrite", status, i + 1 );
-            ok = 0; 
-            break;
-         } else {
-            GetFmt( "LOLIMIT", spprops, i, defdigs, fmt, status );
-            (void) sprintf( buf, fmt, scale*lbnd[ i ] );
-            prop = astAppendString( prop, &nc, buf );
-            prop = astAppendString( prop, &nc, " " );
-         }
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( spprops, "LOLIMIT", prop, NULL );
-         
-/* Do the same for the upper limits. */
-      nc = 0;
-      for( i = 0; i < nspace; i++ ) {
-         if( ubnd[ i ] == AST__BAD || ubnd[ i ] == DBL_MAX || 
-             ubnd[ i ] == -DBL_MAX ) {
-            astAddWarning( this, 1, "Spatial axis %d has an undefined "
-                           "upper limit.", "astWrite", status, i + 1 );
-            ok = 0; 
-            break;
-         } else {
-            GetFmt( "HILIMIT", spprops, i, defdigs, fmt, status );
-            (void) sprintf( buf, fmt, scale*ubnd[ i ] );
-            prop = astAppendString( prop, &nc, buf );
-            prop = astAppendString( prop, &nc, " " );
-         }
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( spprops, "HILIMIT", prop, NULL );
-         
-/* Store properties that are specific to Ellipse sub-phrases... */
-   } else if( astIsAEllipse( spreg ) ) {
-      spaceid = ELLIPSE_ID;
-      astMapPut0C( spprops, "ID", "Ellipse", NULL );
-
-/* Get the geometric parameters of the Ellipse. */
-      astEllipsePars( spreg, centre, &a, &b, &angle, NULL, NULL );
-
-/* Create a string holding the formatted centre axis values, scaling
-   to the required units. Use the Frame's Digits attribute to specify 
-   how many digits to use when formatting the axis values. */
-      nc = 0;
-      for( i = 0; i < nspace; i++ ) {
-         if( centre[ i ] != AST__BAD ) {
-            GetFmt( "CENTRE", spprops, i, defdigs, fmt, status );
-            (void) sprintf( buf, fmt, scale*centre[ i ] );
-            prop = astAppendString( prop, &nc, buf );
-            prop = astAppendString( prop, &nc, " " );
-
-         } else {
-            ok = 0;
-            astAddWarning( this, 1, "The supplied Ellipse contains "
-                           "one or more bad centre axis values.", 
-                           "astWrite", status );
-            break;
-         }
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( spprops, "CENTRE", prop, NULL );
-
-/* Scale, format and store the two radii. */
-      if( a != AST__BAD && b != AST__BAD && angle != AST__BAD ) {
-         GetFmt( "RADIUS1", spprops, 0, defdigs, fmt, status );
-         (void) sprintf( buf, fmt, scale*a );
-         astMapPut0C( spprops, "RADIUS1", buf, NULL );
-
-         GetFmt( "RADIUS2", spprops, 0, defdigs, fmt, status );
-         (void) sprintf( buf, fmt, scale*b );
-         astMapPut0C( spprops, "RADIUS2", buf, NULL );
-
-/* Convert the angle to degrees in the direction required by STC-S, 
-   format and store. */
-         angle *= AST__DR2D;
-         if( !issky )  angle = 90 - angle;
-         while( angle < 0.0 ) angle += 360.0;
-         while( angle >= 360.0 ) angle -= 360.0;
-
-         GetFmt( "POSANGLE", spprops, 0, defdigs, fmt, status );
-         (void) sprintf( buf, fmt, angle );
-         astMapPut0C( spprops, "POSANGLE", buf, NULL );
-
-      } else {
-         astAddWarning( this, 1, "The gemeotric parameters of the "
-                        "supplied Ellipse are undefined.",
-                        "astWrite", status );
-         ok = 0;
-      }
-
-/* Store properties that are specific to Polygon sub-phrases... */
-   } else if( astIsAPolygon( spreg ) ) {
-      spaceid = POLYGON_ID;
-      astMapPut0C( spprops, "ID", "Polygon", NULL );
-
-/* Get an array holding the axis values at the polygon vertices. */
-      astGetRegionPoints( spreg, 0, 0, &np, NULL );
-      points = astMalloc( sizeof( double )*np*nspace );
-      astGetRegionPoints( spreg, np, nspace, &np, points );
-
-/* Create a string holding the formatted vertex axis values, scaling
-   to the required units. Use the Frame's Digits attribute to specify 
-   how many digits to use when formatting the axis values. */
-      GetFmt( "VERTICES", spprops, 0, defdigs, fmt, status );
-      nc = 0;
-      for( j = 0; j < np; j++ ) {
-         p = points + j;
-         for( i = 0; i < nspace; i++ ) {
-            if( *p != AST__BAD ) {
-               (void) sprintf( buf, fmt, scale*(*p) );
-               prop = astAppendString( prop, &nc, buf );
-               prop = astAppendString( prop, &nc, " " );
-               p += np;
-            } else {
-               astAddWarning( this, 1, "The supplied Polygon contains "
-                              "one or more bad axis values.", "astWrite", 
-                              status );
-               ok = 0;
-               break;
-            }
-         }
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( spprops, "VERTICES", prop, NULL );
-
-/* Free resources. */
-      points = astFree( points );
-
-/* Store properties that are specific to Position sub-phrases... */
-   } else if( astIsAPointList( spreg ) ) {
-      spaceid = POSITION_ID;
-      astMapPut0C( spprops, "ID", "Position", NULL );
-
-/* Check the PointList contains only a single point. */
-      astGetRegionPoints( spreg, 0, 0, &np, NULL );
-      if( np > 1 ) {
-         astAddWarning( this, 1, "The supplied PointList contains "
-                        "more than one position.", "astWrite", status );
-         ok = 0; 
-
-/* If so, get the axis values at the point. */
-      } else {
-         astGetRegionPoints( spreg, 1, nspace, &np, centre );
-
-/* Create a string holding the formatted axis values, scaling to the 
-   required units. Use the Frame's Digits attribute to specify how many 
-   digits to use when formatting the axis values. */
-         nc = 0;
-         for( i = 0; i < nspace; i++ ) {
-            if( centre[ i ] != AST__BAD ) {
-               GetFmt( "POSITION", spprops, i, defdigs, fmt, status );
-               (void) sprintf( buf, fmt, scale*centre[ i ] );
-               prop = astAppendString( prop, &nc, buf );
-               prop = astAppendString( prop, &nc, " " );
-               p += nspace;
-
-            } else {
-               astAddWarning( this, 1, "The supplied PointList contains "
-                              "one or more bad axis values.", "astWrite", 
-                              status );
-               ok = 0;
-               break;
-            }
-         }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-         prop[ nc - 1 ] = 0;
-         astMapPut0C( spprops, "POSITION", prop, NULL );
-      }
-
-/* Store properties that are specific to compound Position sub-phrases... */
-   } else {
-
-/* If the Region is not a CmpRegion (e.g. a Prism?) see if simplifying it
-   produces a CmpRegion. */
-      if( !astIsACmpRegion( spreg ) ) {
-         sreg = astSimplify( spreg );
-      } else {
-         sreg = astClone( spreg );
-      }
-
-/* If we now have a CmpRegion, write its properties into a new KeyMap by 
-   calling this function recursively. Then store the new KeyMap in the 
-   supplied KeyMap. */
-      if( astIsACmpRegion( sreg ) ) {
-
-/* Get the list of Regions that the CmpRegion combines together. This
-   also returns the boolean operator with which they are combined. */
-         nreg = 0;
-         reg_list = NULL;
-         oper = astCmpRegionList( (AstCmpRegion *) sreg, &nreg, &reg_list );
-
-/* Store compound region type in the supplied KeyMap. */
-         if( oper == AST__AND ) {
-            spaceid = INTERSECTION_ID;
-            astMapPut0C( spprops, "ID", "Intersection", NULL );
-         } else if( oper == AST__OR ) {
-            spaceid = UNION_ID;
-            astMapPut0C( spprops, "ID", "Union", NULL );
-         } else {
-            spaceid = DIFFERENCE_ID;
-            astMapPut0C( spprops, "ID", "Difference", NULL );
-         }
-
-/* Loop round each of the combined Regions. */
-         for( i = 0; i < nreg; i++ ) {
-
-/* Create a new KeyMap, and then call this function recursively to store
-   the properties of the i'th component Region in the new KeyMap. */
-            if( ok ) {
-               new_props = astKeyMap( " ", status );
-               if( GetRegionProps( this, reg_list[ i ], new_props, nspace, 
-                                   defdigs, scale, issky, status ) 
-                   == NULL_ID ) ok = 0;
-
-/* Store the new KeyMap in the supplied KeyMap. */
-               sprintf( buf, "REGION%d", i + 1 );
-               astMapPut0A( spprops, buf, new_props, NULL );
-
-/* Free resources. */
-               new_props = astAnnul( new_props );
-            }
-            reg_list[ i ] = astAnnul( reg_list[ i ] );
-         }
-         reg_list = astFree( reg_list );
-         astMapPut0I( spprops, "NREG", nreg, NULL );
-
-/* All other classes of Region are unsupported. */
-      } else {
-         astAddWarning( this, 1, "The supplied %s cannot be written "
-                        "out since STC-S does not support %s regions.",
-                        "astWrite", status, astGetClass( spreg ),
-                        astGetClass( spreg ) ); 
-         ok = 0;
-      }
-
-/* Free resources. */
-      sreg = astAnnul( sreg );
-   }
-
-   if( prop ) prop = astFree( prop );
-
-/* If an error has occurred, return NULL_ID. */
-   if( !ok || !astOK ) spaceid = NULL_ID;
-
-/* Return the identifier for the STC-S spatial region type. */
-   return spaceid;
-}
-
-void astInitStcsChanVtab_(  AstStcsChanVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcsChanVtab
-
-*  Purpose:
-*     Initialise a virtual function table for an StcsChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void astInitStcsChanVtab( AstStcsChanVtab *vtab, const char *name )
-
-*  Class Membership:
-*     StcsChan vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the StcsChan class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;           /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstChannelVtab *channel;      /* Pointer to Channel component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitChannelVtab( (AstChannelVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAStcsChan) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstChannelVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-
-   vtab->ClearStcsArea = ClearStcsArea;
-   vtab->GetStcsArea = GetStcsArea;
-   vtab->SetStcsArea = SetStcsArea;
-   vtab->TestStcsArea = TestStcsArea;
-
-   vtab->ClearStcsCoords = ClearStcsCoords;
-   vtab->GetStcsCoords = GetStcsCoords;
-   vtab->SetStcsCoords = SetStcsCoords;
-   vtab->TestStcsCoords = TestStcsCoords;
-
-   vtab->ClearStcsProps = ClearStcsProps;
-   vtab->GetStcsProps = GetStcsProps;
-   vtab->SetStcsProps = SetStcsProps;
-   vtab->TestStcsProps = TestStcsProps;
-
-   vtab->SetStcsIndent = SetStcsIndent;
-   vtab->ClearStcsIndent = ClearStcsIndent;
-   vtab->TestStcsIndent = TestStcsIndent;
-   vtab->GetStcsIndent = GetStcsIndent;
-
-   vtab->SetStcsLength = SetStcsLength;
-   vtab->ClearStcsLength = ClearStcsLength;
-   vtab->TestStcsLength = TestStcsLength;
-   vtab->GetStcsLength = GetStcsLength;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   channel = (AstChannelVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   channel->Write = Write;
-   channel->Read = Read;
-
-/* Declare the Dump function for this class. There is no destructor or
-   copy constructor. */
-   astSetDump( vtab, Dump, "StcsChan", "STC-S I/O Channel" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static AstRegion *MakeSpaceRegion( AstKeyMap *props, AstFrame *frm,
-                                   double scale, int *status ){
-/*
-*  Name:
-*     MakeSpaceRegion
-
-*  Purpose:
-*     Create a Region to describe the space coverage of the STC-S
-*     description being read.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstRegion *MakeSpaceRegion( AstKeyMap *props, AstFrame *frm,
-*                                 double scale, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function returns a pointer to a new Region that describes the 
-*     spatial coverage of an STC-S description.
-
-*  Parameters:
-*     props
-*        A KeyMap holding properties read from the STC-S space sub-phrase.
-*     frm
-*        The Frame in which the Region is to be defined.
-*     scale
-*        A factor that must be applied to the raw axis values read from the
-*        STC-S description in order to convert them into the units used by 
-*        the supplied Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Region pointer.
-
-*/
-
-
-/* Local Variables: */
-   AstKeyMap *reg_props;       /* KeyMap holding argument properties */
-   AstRegion *reg;             /* Current argument Region */
-   AstRegion *result;          /* Returned Region */
-   AstRegion *tmp;             /* Temporary Region pointer */
-   char key[ 20 ];             /* Key for argument region */
-   const char *id;             /* Sub-phrase identifier */
-   double *p;                  /* Pointer to next axis value */
-   double *temp;               /* Pointer to array of reordered polygon vertex axis values */
-   double *vertices;           /* Pointer to array of polygon vertex axis values */
-   double val1;                /* Scalar value read from KeyMap */
-   double val2;                /* Scalar value read from KeyMap */
-   double val3;                /* Scalar value read from KeyMap */
-   double vec1[ 10 ];          /* Vector read from KeyMap */
-   double vec2[ 10 ];          /* Vector read from KeyMap */
-   int iaxis;                  /* Axis index */
-   int ireg;                   /* Index of argument regions */
-   int ivert;                  /* Vertex index */
-   int naxes;                  /* Number of spatial axes */
-   int nreg;                   /* Number of argument regions */
-   int nval;                   /* Number of values read from KeyMap */
-   int nvert;                  /* Number of vertices */
-   int spaceid;                /* Integer identifier for spatial shape */
-   int oper;                   /* Boolean operator code for CmpRegion */
-
-/* Initialise */
-   result = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Temporarily ensure that an error is reported if an attempt is made to
-   access a non-existent KeyMap entry. */
-   astSetKeyError( props, 1 );
-
-/* Get the space sub-phrase identifier from the properties KeyMap, and
-   find the corresponding integer identifier. */
-
-   astMapGet0C( props, "ID", &id );
-   spaceid = SpaceId( id, status );
-
-/* Get the number of axes in the Frame. */
-   naxes = astGetNaxes( frm );
-
-/* Create a suitable Region to enclose the space positions. This
-   includes scaling the supplied axis values to the units used by 
-   the Frame. */
-   if( spaceid == POSITION_INTERVAL_ID ) {
-      astMapGet1D( props, "DLOLIMIT", naxes, &nval, vec1 );
-      astMapGet1D( props, "DHILIMIT", naxes, &nval, vec2 );
-
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vec1[ iaxis ] *= scale;
-         vec2[ iaxis ] *= scale;
-      }   
-
-      result = (AstRegion *) astBox( frm, 1, vec1, vec2, NULL, " ", status );
-
-   } else if( spaceid == ALLSKY_ID ) {
-      result = (AstRegion *) astNullRegion( frm, NULL, "Negated=1", status );
-   
-   } else if( spaceid == CIRCLE_ID ) {
-      astMapGet1D( props, "DCENTRE", naxes, &nval, vec1 );
-      astMapGet0D( props, "RADIUS", &val1 );
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) vec1[ iaxis ] *= scale;
-      val1 *= scale;
-      result = (AstRegion *) astCircle( frm, 1, vec1, &val1, NULL, " ", 
-                                        status );
-
-   } else if( spaceid == ELLIPSE_ID ) {
-      astMapGet1D( props, "DCENTRE", naxes, &nval, vec1 );
-      astMapGet0D( props, "RADIUS1", &val1 );
-      astMapGet0D( props, "RADIUS2", &val2 );
-      astMapGet0D( props, "POSANGLE", &val3 );
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) vec1[ iaxis ] *= scale;
-      vec2[ 0 ] = val1*scale;
-      vec2[ 1 ] = val2*scale;
-      if( !astIsASkyFrame( frm ) ) val3 = 90.0 - val3;
-      val3 *= AST__DD2R;
-      result = (AstRegion *) astEllipse( frm, 1, vec1, vec2, &val3, NULL, " ",
-                                         status );
-
-   } else if( spaceid == BOX_ID ) {
-      astMapGet1D( props, "DCENTRE", naxes, &nval, vec1 );
-      astMapGet1D( props, "DBSIZE", naxes, &nval, vec2 );
-
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vec1[ iaxis ] *= scale;
-         vec2[ iaxis ] *= scale;
-      }   
-
-      vertices = BoxCorners( frm, vec1, vec2, status );
-      result = (AstRegion *) astPolygon( frm, 4, 4, vertices, NULL, " ", 
-                                         status );
-      vertices = astFree( vertices );
-
-   } else if( spaceid == POLYGON_ID ) {
-      nval = astMapLength( props, "DVERTICES" );
-      temp = astMalloc( sizeof( double )*nval );
-      astMapGet1D( props, "DVERTICES", nval, &nval, temp );
-
-/* An STC-S polygon description holds the vertex axis values in the wrong 
-   order for the AstPolygon constructor. Therefore, transpose the temp 
-   array (scale them at the same time). */
-      vertices = astMalloc( sizeof( double )*nval );
-      if( astOK ) {
-         nvert = nval/naxes;
-         p = temp;               
-         for( ivert = 0; ivert < nvert; ivert++ ) {
-            for( iaxis = 0; iaxis < naxes; iaxis++,p++ ) {
-               vertices[ iaxis*nvert + ivert ] = *p*scale;
-            }
-         }
-
-         result = (AstRegion *) astPolygon( frm, nvert, nvert, vertices, NULL,
-                                            " ", status );
-      }
-
-      vertices = astFree( vertices );
-      temp = astFree( temp );
-
-   } else if( spaceid == POSITION_ID ) {
-      astMapGet1D( props, "DPOSITION", naxes, &nval, vec1 );
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) vec1[ iaxis ] *= scale;
-      result = (AstRegion *) SinglePointList( frm, vec1, NULL, status );
-
-   } else if( spaceid == CONVEX_ID ) {
-      astError( AST__INTER, "astRead(StcsChan): No support for Convex in "
-                "MakeSpaceRegion (internal AST programming error).", status );
-
-/* All remaining valid space id values are compound - their arguments are held
-   within separate KeyMaps nested inside the supplied KeyMap. */
-   } else if( spaceid != NULL_ID ) {
-
-/* The number of arguments is defined in the NREG entry. */
-      astMapGet0I( props, "NREG", &nreg );
-
-/* Get the CmpRegion operator code. */
-      if( spaceid == UNION_ID ) {
-         oper = AST__OR;
-      } else if( spaceid == INTERSECTION_ID ) {
-         oper = AST__AND; 
-      } else if( spaceid == DIFFERENCE_ID ) {
-         oper = AST__XOR; 
-      } else {
-         oper = 0;  /* To avoid compiler warnings */
-      }
-
-/* Loop over all argument Regions. */
-      for( ireg = 0; ireg < nreg; ireg++ ) {
-
-/* Get the KeyMap holding the STC-S properties of the current argument 
-   region. */
-         sprintf( key, "REGION%d", ireg + 1 );
-         astMapGet0A( props, key, &reg_props );
-
-/* Construct an AST Region from this list of STC-S properties. */
-         reg = MakeSpaceRegion( reg_props, frm, scale, status );
-
-/* If we are creating a "Not" element, just negate the argument region
-   and return it. */
-         if( spaceid == NOT_ID ) {
-            astNegate( reg );
-            result = astClone( reg );
-
-/* If we are creating a "Union", "Difference" or "Intersection" element, 
-   combine the first two arguments into a CmpRegion, and then add in each 
-   subsequent argument. */
-         } else {
-            if( ireg == 0 ) {
-               result = astClone( reg );
-            } else {
-               tmp = (AstRegion *) astCmpRegion( result, reg, oper, " ", 
-                                                 status );
-               (void) astAnnul( result );
-               result = tmp;            
-            }
-         }
-
-/* Free resources */
-         reg = astAnnul( reg );
-         reg_props = astAnnul( reg_props );         
-      }
-   }
-
-/* Ensure that no error is reported if an attempt is made to access a 
-   non-existent KeyMap entry. */
-   astSetKeyError( props, 0 );
-
-/* Return the Region. */
-   return result;
-}
-
-static void MapPut0C( AstKeyMap *km, const char *key, const char *value, 
-                      const char *def, int defs, int *status ){
-/*
-*  Name:
-*     MapPut0C
-
-*  Purpose:
-*     Store a text STC-S property in the supplied keymap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void MapPut0C( AstKeyMap *km, const char *key, const char *value, 
-*                    const char *def, int defs, int *status )
-
-*  Class Membership:
-*     StcsChan member function.
-
-*  Description:
-*     This function stors the supplied value in the given KeyMap,
-*     handling default values.
-
-*  Parameters:
-*     km 
-*        Pointer to the KeyMap in which to store the value.
-*     key
-*        Pointer to a string holding the property name associated with
-*        the value.
-*     value
-*        The property value. If this is NULL then the function
-*        returns without action.
-*     def
-*        The default property value. 
-*     defs
-*        If zero, then the value is not stored in the KeyMap if the value
-*        is equal to the default value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Check the inherited status */
-   if( !astOK ) return;
-
-/* If the value is NULL, ignore the entry. */
-   if( value ) {
-
-/* If the value is equal to the default value, and we are NOT storing
-   default values, ensure the KeyMap has no entry for the given key. */
-      if( astChrMatch( value, def ) && !defs ) {
-         astMapRemove( km, key );
-
-/* Otherwise, store the value. */
-      } else {
-         astMapPut0C( km, key, value, NULL );
-      }
-   }
-}
-
-static void MapPut0D( AstKeyMap *km, const char *key, double value, double def,
-                      int defs, int *status ){
-/*
-*  Name:
-*     MapPut0D
-
-*  Purpose:
-*     Store a floating point STC-S property in the supplied keymap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void MapPut0D( AstKeyMap *km, const char *key, double value, double def,
-*                    int defs, int *status )
-
-*  Class Membership:
-*     StcsChan member function.
-
-*  Description:
-*     This function stors the supplied value in the given KeyMap,
-*     handling default values.
-
-*  Parameters:
-*     km 
-*        Pointer to the KeyMap in which to store the value.
-*     key
-*        Pointer to a string holding the property name associated with
-*        the value.
-*     value
-*        The property value. If this is AST__BAD then the function
-*        returns without action.
-*     def
-*        The default property value. 
-*     defs
-*        If zero, then the value is not stored in the KeyMap if the value
-*        is equal to the default value.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Check the inherited status */
-   if( !astOK ) return;
-
-/* If the value is bad, ignore the entry. */
-   if( value != AST__BAD ) {
-
-/* If the value is equal to the default value, and we are NOT storing
-   default values, ensure the KeyMap has no entry for the given key. */
-      if( value == def && !defs ) {
-         astMapRemove( km, key );
-
-/* Otherwise, store the value. */
-      } else {
-         astMapPut0D( km, key, value, NULL );
-      }
-   }
-}
-
-static char *PutRegionProps( AstStcsChan *this, AstKeyMap *km, const char *id,
-                             int indent, char *line, int *nc, int *crem, 
-                             int linelen, int *status ){
-/*
-*  Name:
-*     PutRegionProps
-
-*  Purpose:
-*     Append STC-S space sub-phrase properties to the end of a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     char *PutRegionProps( AstStcsChan *this, AstKeyMap *km, const char *id,
-*                           int indent, char *line, int *nc, int *crem, 
-*                           int linelen, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function converts the STC-S properties for the space sub-phrase 
-*     supplied in a KeyMap into text, and appends them to the supplied
-*     line of text in the order required by STC-S.
-*
-*     It is assumed that the sub-phrase identifier has already been put
-*     into the string.
-
-*  Parameters:
-*     this
-*        The StcsChan.
-*     km
-*        Pointer to a KeyMap containing the STC-S properties. 
-*     id
-*        Pointer to the sub-phrase identifier.
-*     indent
-*        If greater than or equal to zero, then it gives the number of
-*        spaces indentation to place before the first word (also indicates 
-*        that a new-line should follow the last word of the argument). If 
-*        negative, never use indentation.
-*     line
-*        Pointer to the buffer to receive the property values.
-*     nc
-*        Pointer to an int in which to store the number of characaters in
-*        the buffer. Updated on exit.
-*     crem
-*        Pointer to an int in which to store the maximum number of 
-*        characters before a new line. Ignored if zero. Updated on exit.
-*     linelen
-*        The maximum number of character per line, or zero if all text is
-*        to be included in a single line.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the buffer. This will usually be "line", but may be
-*     different to "line" if it was necessary to expand the memory to make 
-*     room for new properties. 
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *reg_props;
-   char *result;          
-   char key[ 20 ];
-   int i;
-   int ireg;
-   int nreg;
-   int spaceid;           
-
-/* Initialise */
-   result = line;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Temporarily ensure that an error is reported if an attempt is made to
-   access a non-existent KeyMap entry. */
-   astSetKeyError( km, 1 );
-
-/* Get the integer code for the space sub-phrase identifier. */
-   spaceid = SpaceId( id, status );
-
-/* Do each type of space sub-phrase. */
-   if( spaceid == NULL_ID ) {
-      astError( AST__INTER, "astWrite(StcsChan): Illegal 'spaceid' value "
-                "in function PutRegionProps (internal AST programming "
-                "error).", status );
-
-   } else if( spaceid == POSITION_INTERVAL_ID ) {
-      result = AddItem( this, km, "LOLIMIT", NULL, result, nc, crem, linelen, status );
-      result = AddItem( this, km, "HILIMIT", NULL, result, nc, crem, linelen, status );
-
-   } else if( spaceid == ALLSKY_ID ) {
-
-   } else if( spaceid == CIRCLE_ID ) {
-      result = AddItem( this, km, "CENTRE", NULL, result, nc, crem, linelen, status );
-      result = AddItem( this, km, "RADIUS", NULL, result, nc, crem, linelen, status );
-
-   } else if( spaceid == ELLIPSE_ID ) {
-      result = AddItem( this, km, "CENTRE", NULL, result, nc, crem, linelen, status );
-      result = AddItem( this, km, "RADIUS1", NULL, result, nc, crem, linelen, status );
-      result = AddItem( this, km, "RADIUS2", NULL, result, nc, crem, linelen, status );
-      result = AddItem( this, km, "POSANGLE", NULL, result, nc, crem, linelen, status );
-
-   } else if( spaceid == BOX_ID ) {
-      result = AddItem( this, km, "CENTRE", NULL, result, nc, crem, linelen, status );
-      result = AddItem( this, km, "BSIZE", NULL, result, nc, crem, linelen, status );
-
-   } else if( spaceid == POLYGON_ID ) {
-      result = AddItem( this, km, "VERTICES", NULL, result, nc, crem, linelen, status );
-
-   } else if( spaceid == CONVEX_ID ) {
-      astError( AST__INTER, "astWrite(StcsChan): No Convex support yet "
-                "(internal AST programming error).", status );
-
-   } else if( spaceid == POSITION_ID ) {
-      result = AddItem( this, km, "POSITION", NULL, result, nc, crem, linelen, status );
-
-/* All remaining space id values are compound regions. */
-   } else {
-
-/* Append an opening parenthesis. */
-      result = astAppendString( result, nc, "( " );
-
-/* If required, write out the text through the Channel sink function, 
-   and start a new line. */
-      if( indent >= 0 ) {
-         astPutNextText( this, result );
-         *nc = 0;
-         *crem = linelen;
-      }
-
-/* Set the indentation for the next level down. */
-      if( indent == 0 ) {
-         indent = 6;
-      } else if( indent > 0 ){
-         indent += 3;
-      }
-
-/* Loop round all argument Regions. */
-      astMapGet0I( km, "NREG", &nreg );
-      for( ireg = 0; ireg < nreg; ireg++ ) {
-         sprintf( key, "REGION%d", ireg + 1 );
-         astMapGet0A( km, key, &reg_props );
-
-/* Put any required indentation at the start of the line. */
-         if( indent > 0 ) {
-            for( i = 0; i < indent; i++ ) {
-               result = astAppendString( result, nc, " " );
-            }
-            *crem -= indent;
-         }
-
-/* Append the identifier for the next argument to the string. */
-         result = AddItem( this, reg_props, "ID", NULL, result, nc, crem, 
-                           linelen, status );
-
-/* Append the arguments to the string. */
-         astMapGet0C( reg_props, "ID", &id );
-         result = PutRegionProps( this, reg_props, id, indent, result, nc,
-                                  crem, linelen, status );
- 
-/* Write the text out to the sink function, and start a new line. */
-         if( indent > 0 ) {
-            astPutNextText( this, result );
-            *nc = 0;
-            *crem = linelen;
-         }
-
-/* Free resources. */
-         reg_props = astAnnul( reg_props );
-      }
-
-/* Decrease any indentation, and then append a closing parenthesis. */
-      if( indent > 2 ) {
-         indent -= 3;
-         for( i = 0; i < indent; i++ ) {
-            result = astAppendString( result, nc, " " );
-         }
-      }
-      result = astAppendString( result, nc, ") " );
-
-/* If we are about to return fomr the top-level, start a new line. */
-      if( indent > 0 && indent < 6 ) {
-         astPutNextText( this, result );
-         *nc = 0;
-         for( i = 0; i < indent; i++ ) {
-            result = astAppendString( result, nc, " " );
-         }
-         *crem = linelen - indent;
-      }
-   }
-
-/* Ensure that no error is reported if an attempt is made to access a 
-   non-existent KeyMap entry. */
-   astSetKeyError( km, 0 );
-
-/* Return the buffer pointer. */
-   return result;
-}
-
-static AstObject *Read( AstChannel *this_channel, int *status ) {
-/*
-*  Name:
-*     Read
-
-*  Purpose:
-*     Read an Object from a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstObject *Read( AstChannel *this_channel, int *status ) 
-
-*  Class Membership:
-*     StcsChan member function (over-rides the astRead method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function reads an Object from an StcsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-*/
-
-/* Local Variables: */
-   AstFrame *spacefrm;       /* Pointer to SpaceFrame for space sub-phrase */
-   AstFrameSet *fs;          /* Temporary FrameSet */
-   AstKeyMap *full_props;    /* KeyMap holding all sub-phrase properties */
-   AstKeyMap *props;         /* KeyMap holding current sub-phrase properties */
-   AstObject *new;           /* Pointer to returned Object */
-   AstObject *obj;           /* Pointer to Object extracted from a KeyMap */
-   AstPrism *tr;             /* Temporary Region pointer */
-   AstRegion *full_co;       /* Region describing full coord position */
-   AstRegion *full_enc;      /* Region describing full enclosure */
-   AstRegion *red_co;        /* Region describing red-shift coord */
-   AstRegion *red_enc;       /* Region describing red-shift enclosure */
-   AstRegion *space_co;      /* Region describing space coord */
-   AstRegion *space_enc;     /* Region describing space enclosure */
-   char **words;             /* Array of pointers to individual words */
-   int nword;                /* Number of words returned */
-   AstRegion *spec_co;       /* Region describing spectral coord */
-   AstRegion *spec_enc;      /* Region describing spectral enclosure */
-   AstRegion *time_co;       /* Region describing time coord */
-   AstRegion *time_enc;      /* Region describing time enclosure */
-   AstSpecFrame *redfrm;     /* Pointer to SpecFrame for redshift sub-phrase */
-   AstSpecFrame *specfrm;    /* Pointer to SpecFrame for spectral sub-phrase */
-   AstStcsChan *this;        /* Pointer to the StcsChan structure */
-   AstStdOfRestType sor;     /* Standard of rest */
-   AstSystemType sys;        /* Frame System attribute value */
-   AstTimeFrame *tf1;        /* Temporary TimeFrame */
-   AstTimeFrame *timefrm;    /* Pointer to TimeFrame for time sub-phrase */
-   AstTimeScaleType ts;      /* TimeFrame TimeScale attribute value */
-   WordContext con;          /* Context for finding next source word */
-   char *fbuf;               /* Pointer to buffer holding document fragment */
-   char *frame;              /* Space frame name */
-   char *unit;               /* Pointer to unit string */
-   const char *new_ts;       /* Time scale string */
-   double epoch;             /* Value to use for the Epoch attribue */
-   double fill;              /* Filling factor */
-   double hilim;             /* Axis upper limit */
-   double lolim;             /* Axis lower limit */
-   double scale;             /* Units scaling factor */
-   int nval;                 /* No. of values read from KeyMap */
-   double vals[ 10 ];        /* Values read from KeyMap */
-   double start;             /* Start time */
-   double stop;              /* Stop time */
-   double time;              /* Time value */
-   double time_origin;       /* Value to use as TimeFrame TimeOrigin*/
-   double value;             /* Axis value */
-   int iaxis;                /* Axis index */
-   int is_skyframe;          /* Is the space frame a SkyFrame? */
-   int level;                /* Warning reporting level */
-   int naxes;                /* No. of space Frame axes */
-   int nwant;                /* Number of objects to return */
-   int use_co;               /* Do we have a full coordinate position? */
-   int use_enc;              /* Do we have a full enclosure? */
-   int want_co;              /* Is the Coordinates component wanted? */
-   int want_enc;             /* Is the enclosure region wanted? */
-   int want_props;           /* Are the STC-S properties wanted? */
-   const char *cval;         /* Pointer to property value */
-   const char *type;         /* Type of redshift axis */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_channel;
-
-/* Initialise. */
-   epoch = AST__BAD;
-   start = AST__BAD;
-   stop = AST__BAD;
-   time = AST__BAD;
-   time_co = NULL;
-   time_enc = NULL;
-   space_co = NULL;
-   space_enc = NULL;
-   spec_co = NULL;
-   spec_enc = NULL;
-   red_co = NULL;
-   red_enc = NULL;
-   use_co = 1;
-   use_enc = 0;
-
-/* Read the STC-S description from the external source, parse it, and
-   create a KeyMap containing the parsed property values. */
-   full_props = ReadProps( this, status );
-
-/* If the STC-S description contained a time sub-phrase, get the KeyMap
-   containing the proprties of the time sub-phrase, and then create AST
-   Regions describing the time coordinate value and its enclosing Region. */
-   if( astMapGet0A( full_props, "TIME_PROPS", &obj ) ) {
-      props = (AstKeyMap *) obj;   
-
-/* Create the default TimeFrame */
-      timefrm = astTimeFrame( " ", status );
-
-/* Get the TIMESCALE property from the KeyMap, and identify the corresponding 
-   AST TimeScale. */
-      ts = AST__BADTS;
-      new_ts = NULL;
-      level = 3;
-
-      if( astMapGet0C( props, "TIMESCALE", &cval ) ) {
-
-         if( astChrMatch( cval, "TT" ) ) {
-            ts = AST__TT;
-
-         } else if( astChrMatch( cval, "TDT" ) ) {
-            ts = AST__TT;
-            new_ts = "TT";
-
-         } else if( astChrMatch( cval, "ET" ) ) {
-            ts = AST__TT;
-            new_ts = "TT";
-
-         } else if( astChrMatch( cval, "TAI" ) ) {
-            ts = AST__TAI;
-
-         } else if( astChrMatch( cval, "IAT" ) ) {
-            ts = AST__TAI;
-            new_ts = "TAI";
-
-         } else if( astChrMatch( cval, "UTC" ) ) {
-            ts = AST__UTC;
-
-         } else if( astChrMatch( cval, "TEB" ) ) {
-            ts = AST__TDB;
-            new_ts = "TDB";
-            level = 1;
-
-         } else if( astChrMatch( cval, "TDB" ) ) {
-            ts = AST__TDB;
-
-         } else if( astChrMatch( cval, "TCG" ) ) {
-            ts = AST__TCG;
-
-         } else if( astChrMatch( cval, "TCB" ) ) {
-            ts = AST__TCB;
-
-         } else if( astChrMatch( cval, "LST" ) ) {
-            ts = AST__LMST;
-
-         } else if( astChrMatch( cval, "nil" ) ) {
-            astAddWarning( this, 2, "Time scale defaulting to 'TAI'.",
-                           "astRead", status );
-
-         } else if( astOK ){
-            astError( AST__BADIN, "astRead(StcsChan): Unknown time scale '%s'.", 
-                      status, cval );
-         }
-
-      } else {
-         astAddWarning( this, 2, "Time scale defaulting to 'TAI'.",
-                        "astRead", status );
-      }
-
-/* Issue a warning if a different time-scale was substituted for the supplied 
-   time-scale. */
-      if( new_ts ) {
-         astAddWarning( this, level, "AST does not support the '%s' time "
-                        "scale. The '%s' timescale is being used instead.", 
-                        "astRead", status, cval, new_ts );
-      }
-
-/* If we got a time scale, set the TimeScale attribute in the TimeFrame
-   to the same value. */
-      if( ts != AST__BADTS ) astSetTimeScale( timefrm, ts );
-
-/* The AST TimeFrame class has no reference position, so allow any reference 
-   position but issue a warning for anything other than "TOPOCENTER" and 
-   "UNKNOWNRefPos". */
-      if( !astMapGet0C( props, "REFPOS", &cval ) ) cval = "UNKNOWNRefPos";
-      if( !astChrMatch( cval, "TOPOCENTER" ) ) {
-         astAddWarning( this, 1, "AST only supports topocentric time frames, "
-                        "so 'TOPOCENTER' will be used in place of '%s'.", 
-                        "astRead", status, cval );
-      }
-
-/* Get the times describes by the time sub-phrase as MJD values. */
-      astMapGet0D( props, "MJDSTART", &start );
-      astMapGet0D( props, "MJDTIME", &time );
-      astMapGet0D( props, "MJDSTOP", &stop );
-
-/* Get the earliest time represented by the time sub-phrase. We use this
-   as the TimeOrigin for the TimeFrame, and also as the Epoch for all
-   frames. */
-      time_origin = start;
-      if( time_origin == AST__BAD ) time_origin = time;
-      if( time_origin == AST__BAD ) time_origin = stop;
-      epoch = time_origin;
-
-/* Store the TimeOrigin value in the TimeFrame, modifying the time values 
-   accordingly. */
-      if( time_origin != AST__BAD ) { 
-         astSetTimeOrigin( timefrm, time_origin );
-         if( start != AST__BAD ) start -= time_origin;
-         if( stop != AST__BAD ) stop -= time_origin;
-         if( time != AST__BAD ) time -= time_origin;
-      }               
-
-/* Convert the epoch to TDB. */
-      if( epoch != AST__BAD && ts != AST__TDB ) {
-         tf1 = astCopy( timefrm );
-         astSetTimeScale( tf1, AST__TDB );
-         fs = astConvert( timefrm, tf1, "" );
-         astTran1( fs, 1, &epoch, 1, &epoch );
-         fs = astAnnul( fs );
-         tf1 = astAnnul( tf1 );
-      }
-
-/* Store the epoch value in the TimeFrame. */
-      if( epoch != AST__BAD ) astSetEpoch( timefrm, epoch );
-
-/* Create a suitable Region to describe the enclosure for the time coords */
-      if( start != AST__BAD || stop != AST__BAD ) {
-         time_enc = (AstRegion *) astInterval( timefrm, &start, &stop, 
-                                               NULL, "", status );
-         use_enc = 1;
-      }
-
-/* Create a suitable Region to describe the time coords contained within
-   the above enclosure. */
-      if( time != AST__BAD ) {
-         time_co = (AstRegion *) SinglePointList( (AstFrame *) timefrm, 
-                                                   &time, NULL, status);
-      } else {
-         use_co = 0;
-      }
-
-/* If no enclosure Region was created for the time sub-phrase, use a
-   copy of any coordinate region. This is because each sub-phrase needs
-   to have an enclosure of some sort if they are to be combined in parallel 
-   into an enclose for the whole CmpFrame. */
-      if( ! time_enc && time_co ) time_enc = astCopy( time_co );
-
-/* Set the filling factor. */
-      if( time_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
-         astSetFillFactor( time_enc, fill );
-      }
-
-/* Get the units in which the time error values are given, and get the
-   scaling factor that converts them into days. */
-      if( astMapGet0C( props, "UNIT", &cval ) ) {
-         if( !strcmp( cval, "s" ) ) {  
-            scale = 1.0/86400.0;
-
-         } else if( !strcmp( cval, "d" ) ) {  
-            scale = 1.0;
-
-         } else if( !strcmp( cval, "a" ) ) {  
-            scale = 365.25;
-
-         } else if( !strcmp( cval, "yr" ) ) {  
-            scale = 365.25;
-
-         } else if( !strcmp( cval, "cy" ) ) {  
-            scale = 36525.0;
-
-         } else if( astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Unsupported "
-                      "units (%s) for the time axis within an "
-                      "STC-S description.", status, unit );
-         }
-
-      } else {
-         scale = 1.0/86400.0;
-      }
-
-/* Associate an uncertainty with the two Regions. */
-      if( astMapGet1D( props, "DERROR", 2, &nval, vals ) ) {
-         if( nval > 1 ) {
-            astAddWarning( this, 1, "An STC-S time sub-phrase contains an "
-                           "Error range. AST does not support error ranges "
-                           "so the mid value will be used as the error.",
-                           "astRead", status );
-            vals[ 0 ] = 0.5*( vals[ 0 ] + vals[ 1 ] );
-         }
-
-         SetUnc( time_enc, time_co, (AstFrame *) timefrm, 0, scale, vals, 1, 
-                 status );
-      }
-
-/* Free resources */
-      props = astAnnul( props );
-      timefrm = astAnnul( timefrm );
-   }
-
-/* If the STC-S description contained a space sub-phrase, get the KeyMap
-   containing the proprties of the space sub-phrase, and then create AST
-   Regions describing the spatial position and its enclosing Region. */
-   if( astMapGet0A( full_props, "SPACE_PROPS", &obj ) ) {
-      props = (AstKeyMap *) obj;   
-
-/* The class of Frame (SkyFrame or basic Frame) is determined by the
-   "FLAVOR". */
-      is_skyframe = 0;
-      if( astMapGet0C( props, "FLAVOUR", &cval ) ) {
-
-         if( astChrMatch( cval, "SPHER2" ) ) {
-            spacefrm = (AstFrame *) astSkyFrame( "", status );
-            is_skyframe = 1;
-   
-         } else if( astChrMatch( cval, "CART1" ) ) {
-            spacefrm = astFrame( 1, "", status );
-   
-         } else if( astChrMatch( cval, "CART2" ) ) {
-            spacefrm = astFrame( 2, "", status );
-   
-         } else if( astChrMatch( cval, "CART3" ) ) {
-            spacefrm = astFrame( 3, "", status );
-   
-         } else {
-            astError( AST__BADIN, "astRead(StcsChan): Unsupported "
-                      "space 'Flavor' (%s) found in STC-S description.", 
-                      status, cval );
-         }
-
-      } else {
-         spacefrm = (AstFrame *) astSkyFrame( "", status );
-         is_skyframe = 1;
-      }
-
-/* Consider each supported space frame. Report an error for frames
-   not supported by AST. */
-      if( astMapGet0C( props, "FRAME", &cval ) ) {
-         if( astChrMatch( cval, "ICRS" ) ) {
-            sys = AST__ICRS;
-
-         } else if( astChrMatch( cval, "FK5" ) ) {
-            sys = AST__FK5;
-
-         } else if( astChrMatch( cval, "FK4" ) ) {
-            sys = AST__FK4;
-
-         } else if( astChrMatch( cval, "J2000" ) ) {
-            sys = AST__FK5;
-
-         } else if( astChrMatch( cval, "B1950" ) ) {
-            sys = AST__FK4;
-
-         } else if( astChrMatch( cval, "ECLIPTIC" ) ) {
-            sys = AST__ECLIPTIC;
-
-         } else if( astChrMatch( cval, "GALACTIC" ) ) {
-            sys = AST__GALACTIC;
-
-         } else if( astChrMatch( cval, "GALACTIC_II" ) ) {
-            sys = AST__GALACTIC;
-
-         } else if( astChrMatch( cval, "SUPER_GALACTIC" ) ) {
-            sys = AST__SUPERGALACTIC;
-
-         } else if( astChrMatch( cval, "UNKNOWNFrame" ) ) {
-            sys = AST__UNKNOWN;
-
-         } else {
-            sys = AST__UNKNOWN;
-            astAddWarning( this, 1, "'UNKNOWNFrame' being used in place of "
-                           "unsupported frame '%s' in an STC-S description.", 
-                           "astRead", status, cval );
-         }
-
-      } else {
-         sys = AST__UNKNOWN;
-         astAddWarning( this, 1, "Space frame defaulting to 'UNKNOWNFrame' "
-                        "in an STC-S description.", "astRead", status );
-      }
-
-/* We can set the System (only needed for SkyFrames). */
-      if( is_skyframe ) {
-         astSetSystem( spacefrm, sys );
-
-/* If we have a basic Frame, set the Domain equal to the STC-S frame value. */
-      } else {
-         astSetDomain( spacefrm, frame );
-      }
-
-/* Set the epoch of the space frame. */
-      if( epoch != AST__BAD ) astSetEpoch( spacefrm, epoch );
-
-/* The AST Frame and SkyFrame class has no reference position, so for 
-   SkyFrames we consider "TOPOCENTER" and "UNKNOWN" acceptable and all 
-   other unsupported. For other Frames we allow any reference position. */
-      if( !astMapGet0C( props, "REFPOS", &cval ) ) cval = "UNKNOWNRefPos";
-      if( is_skyframe && !astChrMatch( cval, "TOPOCENTER" ) ) {
-         astAddWarning( this, 1, "AST only supports topocentric sky frames, "
-                        "so 'TOPOCENTER' will be used in place of '%s'.", 
-                        "astRead", status, cval );
-      }
-        
-/* Get the number of spatial axes. */
-      naxes = astGetNaxes( spacefrm );
-
-/* Get the units strings. */
-      if( !astMapGet0C( props, "UNIT", &cval ) ) {
-         if( is_skyframe ) {
-            cval = "deg";
-         } else {
-            cval = "m";
-         }
-      }
-
-/* In AST, SkyFrames always use radians, so set up a scaling factor to
-   convert supplied axis values into radians. */
-      if( is_skyframe ) {
-
-         if( !strcmp( cval, "deg" ) || !strcmp( cval, "deg deg" ) ) {
-            scale = AST__DD2R;
-   
-         } else if( !strcmp( cval, "arcmin" ) || !strcmp( cval, "arcmin arcmin" ) ) {
-            scale = AST__DD2R/60.0;
-   
-         } else if( !strcmp( cval, "arcsec" ) || !strcmp( cval, "arcsec arcsec" ) ) {
-            scale = AST__DD2R/3600.0;
-   
-         } else if( astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Unsupported "
-                      "units (%s) for a spherical co-ordinate system "
-                      "within an STC-S description: '%s'.", status, 
-                      cval, ContextFragment( &con, &fbuf, status ) );
-         }
-
-/* Basic Frames can use any of the allowed units, so use a scale factor of 
-   1.0. Also set the active unit flag in the space frame to enable intelligent 
-   units conversion by astConvert etc. */
-      } else {
-         scale = 1.0;
-         astSetActiveUnit( spacefrm, 1 );
-
-/* Basic Frames can have different units on different axes. So split the
-   units property up into separate words. */
-         words = astChrSplit( cval, &nword );
-
-/* Set values for the Unit attributes of the Frame. Replicate the last
-   supplied unit string for any extra axes. */
-         for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-            if( iaxis < nword ) {
-               astSetUnit( spacefrm, iaxis, words[ iaxis ] );
-            } else {
-               astSetUnit( spacefrm, iaxis, words[ nword - 1 ] );
-            }
-         }
-
-/* Free resources. */
-         for( iaxis = 0; iaxis < nword; iaxis++ ) {
-            words[ iaxis ] = astFree( words[ iaxis ] );
-         }
-         words = astFree( words );
-      }
-
-/* Create a suitable Region to enclose the space positions. This
-   includes scaling the supplied axis values to the units used by 
-   the Frame. */
-      space_enc = MakeSpaceRegion( props, spacefrm, scale, status );
-      if( space_enc ) use_enc = 1;
-
-/* Create a suitable Region to describe the space coords contained within
-   the above enclosure. If any sub-phrase has no coordinate value, then
-   we cannot produce a PointList describing the complete coordinate set. */
-      if( astMapGet1D( props, "DPOSITION", naxes, &nval, vals ) ) {
-         for( iaxis = 0; iaxis < nval; iaxis++ ) vals[ iaxis ] *= scale;
-         space_co = (AstRegion *) SinglePointList( spacefrm, vals, NULL, 
-                                                   status);
-      } else {
-         use_co = 0;
-      }
-
-/* If no enclosure Region was created for the space sub-phrase, use a
-   copy of any coordinate region. This is because each sub-phrase needs
-   to have an enclosure of some sort if they are to be combined in parallel 
-   into an enclose for the whole CmpFrame. */
-      if( ! space_enc && space_co ) space_enc = astCopy( space_co );
-
-/* Set the filling factor. */
-      if( space_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
-         astSetFillFactor( space_enc, fill );
-      }
-
-/* Associate an uncertainty with the two Regions. */
-      if( astMapGet1D( props, "DERROR", 2*naxes, &nval, vals ) ) {
-         if( nval > naxes ) {
-            astAddWarning( this, 1, "An STC-S space sub-phrase contains an "
-                           "Error range. AST does not support error ranges "
-                           "so the mid value will be used as the error.",
-                           "astRead", status );
-            for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-               vals[ iaxis ] = 0.5*( vals[ iaxis ] + vals[ iaxis + naxes ] );
-            }
-
-/* If insufficient error values have been supplied, replicate the last
-   one. */
-         } else {
-            for( iaxis = nval; iaxis < naxes; iaxis++ ) {
-               vals[ iaxis ] = vals[ nval - 1 ];
-            }
-         }
-
-/* Set the uncertainty in the two space regions. */
-         SetUnc( space_enc, space_co, (AstFrame *) spacefrm, is_skyframe, 
-                 scale, vals, naxes, status );
-      }
-
-/* Free resources */
-      props = astAnnul( props );
-      spacefrm = astAnnul( spacefrm );
-   }
-
-
-
-/* If the STC-S description contained a velocity sub-phrase, issue a
-   warning. */
-   if( astMapGet0A( full_props, "VELOCITY_PROPS", &obj ) ) {
-      astAddWarning( this, 1, "Ignoring a velocity sub-phrase found in "
-                           "an STC-S description.", "astRead", status );
-      obj = astAnnul( obj );
-   }
-
-
-/* If the STC-S description contained a spectral sub-phrase, get the KeyMap
-   containing the proprties of the spectral sub-phrase, and then create AST
-   Regions describing the spectral coordinate value and its enclosing Region. */
-   if( astMapGet0A( full_props, "SPECTRAL_PROPS", &obj ) ) {
-      props = (AstKeyMap *) obj;   
-
-/* Create the default SpecFrame */
-      specfrm = astSpecFrame( " ", status );
-
-/* Get the REFPOS property from the KeyMap, and identify the corresponding 
-   AST StdOfRest. */
-      sor = AST__BADSOR;
-      if( astMapGet0C( props, "REFPOS", &cval ) ) {
-
-         if( astChrMatch( cval, "GEOCENTER" ) ) {
-            sor = AST__GESOR;
-
-         } else if( astChrMatch( cval, "BARYCENTER" ) ) {
-            sor = AST__BYSOR;
-
-         } else if( astChrMatch( cval, "HELIOCENTER" ) ) {
-            sor = AST__HLSOR;
-
-         } else if( astChrMatch( cval, "TOPOCENTER" ) ) {
-            sor = AST__TPSOR;
-
-         } else if( astChrMatch( cval, "LSR" ) ||
-                    astChrMatch( cval, "LSRK" ) ) {
-            sor = AST__LKSOR;
-
-         } else if( astChrMatch( cval, "LSRD" ) ) {
-            sor = AST__LDSOR;
-
-         } else if( astChrMatch( cval, "GALACTIC_CENTER" ) ) {
-            sor = AST__GLSOR;
-
-         } else {
-            astAddWarning( this, 1, "Using 'HELIOCENTER' in place of "
-                           "unsupported spectral reference position '%s' "
-                           "found in an STC-S description.", "astRead", 
-                           status, cval );
-         }
-
-      } else {
-         astAddWarning( this, 2, "Spectral reference position defaulting to "
-                        "'HELIOCENTER' in an STC-S description.", "astRead", 
-                        status );
-      } 
-
-/* If we got a ref pos, set the StdOfRest attribute in the SpecFrame. */
-      if( sor != AST__BADSOR ) astSetStdOfRest( specfrm, sor );
-
-/* Get the units. */
-      if( !astMapGet0C( props, "UNIT", &cval ) ) cval = "Hz";
-      
-
-/* Set the spectral system implied by the unit string. */
-      if( !cval || !strcmp( cval, "Hz" ) || !strcmp( cval, "MHz" ) || 
-          !strcmp( cval, "GHz" ) ) {
-         astSetSystem( specfrm, AST__FREQ );
-
-      } else if( !strcmp( cval, "m" ) || !strcmp( cval, "mm" ) || 
-                 !strcmp( cval, "um" ) || !strcmp( cval, "nm" ) ||
-                 !strcmp( cval, "Angstrom" ) ) {
-         astSetSystem( specfrm, AST__WAVELEN );
-
-      } else if( !strcmp( cval, "eV" ) || !strcmp( cval, "keV" ) || 
-                 !strcmp( cval, "MeV" ) ) {
-         astSetSystem( specfrm, AST__ENERGY );
-
-      } else if( astOK ) {
-         astError( AST__BADIN, "astRead(StcsChan): Unsupported spectral "
-                   "units (%s) found within an STC-S description.",
-                   status, cval );
-      }
-
-/* Set the units. */
-      astSetUnit( specfrm, 0, cval );
-
-/* Set the epoch */
-      if( epoch != AST__BAD ) astSetEpoch( specfrm, epoch );
-
-/* Create a suitable Region to describe the enclosure for the spectral 
-   coords */
-      if( astMapGet0D( props, "LOLIMIT", &lolim ) ) {
-         astMapGet0D( props, "HILIMIT", &hilim );
-         spec_enc = (AstRegion *) astInterval( specfrm, &lolim, &hilim, 
-                                               NULL, "", status );
-         use_enc = 1;
-      }
-
-/* Create a suitable Region to describe the spectral coords contained within
-   the above enclosure. If any sub-phrase has no coordinate value, then
-   we cannot produce a PointList describing the complete coordinate set. */
-      if( astMapGet0D( props, "SPECTRAL", &value ) ) {
-         spec_co = (AstRegion *) SinglePointList( (AstFrame *) specfrm, 
-                                                   &value, NULL, status);
-      } else {
-         use_co = 0;
-      }
-
-/* If no enclosure Region was created for the spectral sub-phrase, use a
-   copy of any coordinate region. This is because each sub-phrase needs
-   to have an enclosure of some sort if they are to be combined in parallel 
-   into an enclose for the whole CmpFrame. */
-      if( ! spec_enc && spec_co ) spec_enc = astCopy( spec_co );
-
-/* Set the filling factor. */
-      if( spec_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
-         astSetFillFactor( spec_enc, fill );
-      }
-
-
-/* Associate an uncertainty with the two Regions. */
-      if( astMapGet1D( props, "DERROR", 2, &nval, vals ) ) {
-         if( nval > 1 ) {
-            astAddWarning( this, 1, "An STC-S spectral sub-phrase contains an "
-                           "Error range. AST does not support error ranges "
-                           "so the mid value will be used as the error.",
-                           "astRead", status );
-            vals[ 0 ] = 0.5*( vals[ 0 ] + vals[ 1 ] );
-         }
-
-         SetUnc( spec_enc, spec_co, (AstFrame *) specfrm, 0, 1.0, vals, 1, 
-                 status );
-      }
-
-/* Free resources */
-      props = astAnnul( props );
-      specfrm = astAnnul( specfrm );
-   }
-
-
-
-
-/* If the STC-S description contained a redshift sub-phrase, get the KeyMap
-   containing the properties of the redshift sub-phrase, and then create AST
-   Regions describing the redshift coordinate value and its enclosing Region. */
-   if( astMapGet0A( full_props, "REDSHIFT_PROPS", &obj ) ) {
-      props = (AstKeyMap *) obj;   
-
-/* Create the default SpecFrame */
-      redfrm = astSpecFrame( "Domain=REDSHIFT", status );
-
-/* Get the REFPOS property from the KeyMap, and identify the corresponding 
-   AST StdOfRest. */
-      sor = AST__BADSOR;
-      if( astMapGet0C( props, "REFPOS", &cval ) ) {
-
-         if( astChrMatch( cval, "GEOCENTER" ) ) {
-            sor = AST__GESOR;
-
-         } else if( astChrMatch( cval, "BARYCENTER" ) ) {
-            sor = AST__BYSOR;
-
-         } else if( astChrMatch( cval, "HELIOCENTER" ) ) {
-            sor = AST__HLSOR;
-
-         } else if( astChrMatch( cval, "TOPOCENTER" ) ) {
-            sor = AST__TPSOR;
-
-         } else if( astChrMatch( cval, "LSR" ) ||
-                    astChrMatch( cval, "LSRK" ) ) {
-            sor = AST__LKSOR;
-
-         } else if( astChrMatch( cval, "LSRD" ) ) {
-            sor = AST__LDSOR;
-
-         } else if( astChrMatch( cval, "GALACTIC_CENTER" ) ) {
-            sor = AST__GLSOR;
-
-         } else {
-            astAddWarning( this, 1, "Using 'HELIOCENTER' in place of "
-                           "unsupported redshift reference position '%s' "
-                           "found in an STC-S description.", "astRead", 
-                           status, cval );
-         }
-
-      } else {
-         astAddWarning( this, 2, "Redshift reference position defaulting to "
-                        "'HELIOCENTER' in an STC-S description.", "astRead", 
-                        status );
-      } 
-
-/* If we got a ref pos, set the StdOfRest attribute in the SpecFrame. */
-      if( sor != AST__BADSOR ) astSetStdOfRest( redfrm, sor );
-
-/* Get the redshift type. */
-      if( !astMapGet0C( props, "TYPE", &type ) ) type = "REDSHIFT";
-
-/* Now get the velocity definition, and set the equivalent SpecFrame
-   System value. AST only supports optical redshift, so report an error
-   or a warning for unsupported combinations. */
-      if( astMapGet0C( props, "DOPPLERDEF", &cval ) ){
-
-         if( astChrMatch( cval, "OPTICAL" ) ) {
-            if( astChrMatch( type, "VELOCITY" ) ){
-               astSetSystem( redfrm, AST__VOPTICAL );
-            } else {
-               astSetSystem( redfrm, AST__REDSHIFT );
-            }
-
-         } else if( astChrMatch( cval, "RADIO" ) ) {
-            if( astChrMatch( type, "VELOCITY" ) ){
-               astSetSystem( redfrm, AST__VRADIO );
-            } else {
-               astSetSystem( redfrm, AST__REDSHIFT );
-               astAddWarning( this, 1, "STC-S RADIO redshift not supported. "
-                              "Assuming OPTICAL redshift instead.", "astRead", 
-                              status );
-            }
-
-         } else if( astChrMatch( cval, "RELATIVISTIC" ) ) {
-            if( astChrMatch( type, "VELOCITY" ) ){
-               astSetSystem( redfrm, AST__VREL );
-            } else {
-               astSetSystem( redfrm, AST__REDSHIFT );
-               astAddWarning( this, 1, "STC-S RELATIVISTIC redshift not supported. "
-                              "Assuming OPTICAL redshift instead.", "astRead", 
-                              status );
-            }
-
-         } else {
-            if( astChrMatch( type, "VELOCITY" ) ){
-               astSetSystem( redfrm, AST__VOPTICAL );
-               astAddWarning( this, 1, "Doppler velocity definition defaulting"
-                              " to 'OPTICAL' in an STC-S description.", 
-                              "astRead", status );
-
-            } else {
-               astSetSystem( redfrm, AST__REDSHIFT );
-            }
-         }
-      }
-
-/* Set the units. */
-      if( astChrMatch( type, "VELOCITY" ) ){
-         if( astMapGet0C( props, "UNIT", &cval ) ) {
-            astSetUnit( redfrm, 0, cval );
-         } else {
-            astSetUnit( redfrm, 0, "km/s" );
-         }
-
-      } else if( astMapGet0C( props, "UNIT", &cval ) ) {
-         astAddWarning( this, 1, "Ignoring units (%s) specified for REDSHIFT "
-                        "in an STC-S description.", "astRead", status, cval );
-      }
-
-/* Set the epoch */
-      if( epoch != AST__BAD ) astSetEpoch( redfrm, epoch );
-
-/* Create a suitable Region to describe the enclosure for the redshift
-   coords */
-      if( astMapGet0D( props, "LOLIMIT", &lolim ) ) {
-         astMapGet0D( props, "HILIMIT", &hilim );
-         red_enc = (AstRegion *) astInterval( redfrm, &lolim, &hilim, 
-                                               NULL, "", status );
-         use_enc = 1;
-      }
-
-/* Create a suitable Region to describe the redshift coords contained within
-   the above enclosure. If any sub-phrase has no coordinate value, then
-   we cannot produce a PointList describing the complete coordinate set. */
-      if( astMapGet0D( props, "REDSHIFT", &value ) ) {
-         red_co = (AstRegion *) SinglePointList( (AstFrame *) redfrm, 
-                                                   &value, NULL, status);
-      } else {
-         use_co = 0;
-      }
-
-/* If no enclosure Region was created for the redshift sub-phrase, use a
-   copy of any coordinate region. This is because each sub-phrase needs
-   to have an enclosure of some sort if they are to be combined in parallel 
-   into an enclose for the whole CmpFrame. */
-      if( ! red_enc && red_co ) red_enc = astCopy( red_co );
-
-/* Set the filling factor. */
-      if( red_enc && astMapGet0D( props, "FILLFACTOR", &fill ) ) {
-         astSetFillFactor( red_enc, fill );
-      }
-
-/* Associate an uncertainty with the two Regions. */
-      if( astMapGet1D( props, "DERROR", 2, &nval, vals ) ) {
-         if( nval > 1 ) {
-            astAddWarning( this, 1, "An STC-S redshift sub-phrase contains an "
-                           "Error range. AST does not support error ranges "
-                           "so the mid value will be used as the error.",
-                           "astRead", status );
-            vals[ 0 ] = 0.5*( vals[ 0 ] + vals[ 1 ] );
-         }
-
-         SetUnc( red_enc, red_co, (AstFrame *) redfrm, 0, 1.0, vals, 1, 
-                 status );
-      }
-
-/* Free resources */
-      props = astAnnul( props );
-      redfrm = astAnnul( redfrm );
-   }
-
-/* If a particular position was specified by the STC_S document, create the
-   full position from the individual sub-phrase position */
-   if( use_co ) {
-      new = time_co ? astClone( time_co ) : NULL;
-
-      if( space_co ) {
-         if( new ) {
-            tr = astPrism( new, space_co, "", status );
-            (void) astAnnul( new );
-            new = (AstObject *) tr;
-         } else {
-            new = astClone( space_co );
-         }
-      }
-
-      if( spec_co ) {
-         if( new ) {
-            tr = astPrism( new, spec_co, "", status );
-            (void) astAnnul( new );
-            new = (AstObject *) tr;
-         } else {
-            new = astClone( spec_co );
-         }
-      }
-
-      if( red_co ) {
-         if( new ) {
-            tr = astPrism( new, red_co, "", status );
-            (void) astAnnul( new );
-            new = (AstObject *) tr;
-         } else {
-            new = astClone( red_co );
-         }
-      }
-
-      if( new ) {
-         full_co = astSimplify( new );
-         new = astAnnul( new );
-      } else {
-         full_co = NULL;
-      }
-
-   } else {
-      full_co = NULL;
-   }
-
-/* If an enclosing volume was specified by the STC_S document, create the
-   full enclosure Region from the individual sub-phrase enclosure Regions. */
-   if( use_enc ) {
-      new = time_enc ? astClone( time_enc ) : NULL;
-
-      if( space_enc ) {
-         if( new ) {
-            tr = astPrism( new, space_enc, "", status );
-            (void) astAnnul( new );
-            new = (AstObject *) tr;
-         } else {
-            new = astClone( space_enc );
-         }
-      }
-
-      if( spec_enc ) {
-         if( new ) {
-            tr = astPrism( new, spec_enc, "", status );
-            (void) astAnnul( new );
-            new = (AstObject *) tr;
-         } else {
-            new = astClone( spec_enc );
-         }
-      }
-
-      if( red_enc ) {
-         if( new ) {
-            tr = astPrism( new, red_enc, "", status );
-            (void) astAnnul( new );
-            new = (AstObject *) tr;
-         } else {
-            new = astClone( red_enc );
-         }
-      }
-      full_enc = astSimplify( new );
-      new = astAnnul( new );
-
-   } else {
-      full_enc = NULL;
-   }
-
-/* See which, and how many, items are to be returned. */
-   nwant = 0;
-   if( ( want_enc = astGetStcsArea( this ) ) ) nwant++;
-   if( ( want_co = astGetStcsCoords( this ) ) ) nwant++;
-   if( ( want_props = astGetStcsProps( this ) ) ) nwant++;
-
-/* If one, and only one, of the three items is to be returned, return it. */   
-   new = NULL;
-   if( nwant == 1 ) {
-      if( want_enc && full_enc ) {
-         new = astClone( full_enc );
-      } else if( want_co && full_co ) {
-         new = astClone( full_co );
-      } else if( want_props && full_props ){
-         new = astClone( full_props );
-      } 
-
-/* If more than one item is to be returned, put them into a KeyMap and
-   return the KeyMap. */         
-   } else if( nwant > 1 ) {
-      new = (AstObject *) astKeyMap( " ", status );
-      if( want_enc && full_enc ) astMapPut0A( new, "AREA", full_enc, NULL );
-      if( want_co && full_co ) astMapPut0A( new, "COORDS", full_co, NULL );
-      if( want_props && full_props ) astMapPut0A( new, "PROPS", full_props, NULL );
-
-/* Report an error if nothing is to be returned. */
-   } else if( astOK ){
-      astError( AST__ATTIN, "astRead(StcsChan): The StcsArea, StcsCoords "
-                "and StcsProps attributes indicate that nothing is to be "
-                "returned (possible programming error).", status );
-   }
-
-/* Free resources */
-   if( space_enc ) space_enc = astAnnul( space_enc );
-   if( spec_enc ) spec_enc = astAnnul( spec_enc );
-   if( time_enc ) time_enc = astAnnul( time_enc );
-   if( red_enc ) red_enc = astAnnul( red_enc );
-   if( space_co ) space_co = astAnnul( space_co );
-   if( spec_co ) spec_co = astAnnul( spec_co );
-   if( time_co ) time_co = astAnnul( time_co );
-   if( red_co ) red_co = astAnnul( red_co );
-   if( full_enc ) full_enc = astAnnul( full_enc );
-   if( full_co ) full_co = astAnnul( full_co );
-   if( full_props ) full_props = astAnnul( full_props );
-
-/* If an error occurred, clean up by deleting the new Object and
-   return a NULL pointer. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the pointer to the new Object. */
-   return new;
-}
-
-static AstKeyMap *ReadProps( AstStcsChan *this, int *status ) {
-/*
-*  Name:
-*     ReadProps
-
-*  Purpose:
-*     Read STC-S properties from the source and store in a KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstKeyMap *ReadProps( AstStcsChan *this, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function parses the list of space-separated words read from the 
-*     source function, identifies the purpose of each word within the STC-S 
-*     description, and stores the words in a returned KeyMap.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new KeyMap. This will contain up to five entries 
-*     with any or all of the following keys: TIME_PROPS, SPACE_PROPS,
-*     VELOCITY_PROPS, SPECTRAL_PROPS, REDSHIFT_PROPS. If an entry is absent, 
-*     it means the STC-S description did not contain the corresponding 
-*     sub-phrase. The value associated with each of these entries will be a 
-*     KeyMap. These will contain values for the sub-phrase proprties read 
-*     from the STC-S description. Properties that are not specified in 
-*     the STC-S description will not be present in the KeyMap. The values
-*     stored in the KeyMap are the words read form the STC-S description
-*     without any conversion or other processing.
-*/
-
-/* Local Constants: */
-#define MAXVAL 6
-
-/* Local Variables: */
-   AstKeyMap *props;         /* KeyMap holding current sub-phrase properties */
-   AstKeyMap *result;        /* Returned KeyMap holding all properties */
-   AstTimeFrame *timefrm;    /* Used for unformatting ISO date-times */
-   WordContext con;          /* Context for finding next source word */
-   char *fbuf;               /* Pointer to buffer holding document fragment */
-   char *prop;               /* String holding complete property value */
-   const char *subphrase;    /* Name of current sub phrase */
-   const char *t;            /* Temporary character string pointer */
-   const char *word;         /* Pointer to next source word */
-   double val[ MAXVAL ];     /* Array of numerical property values */
-   double start;             /* Start time (MJD) */
-   double stop;              /* Stop time (MJD) */
-   double time;              /* Time value (MJD) */
-   double value;             /* Axis value */
-   int iaxis;                /* Axis index */
-   int is_jd;                /* Is time value a JD rather than an MJD? */
-   int nunit;                /* Number of units strings supplied */
-   int nval;                 /* Number of numerical values read */
-   int naxes;                /* No. of space Frame axes */
-   int nc;                   /* Number of characters written to string */
-   int new_word;             /* Get a new word at the end of the pass? */
-   int redid;                /* Redshift sub-phrase component identifier */
-   int spaceid;              /* Space sub-phrase component identifier */
-   int specid;               /* Spectral sub-phrase component identifier */
-   int timeid;               /* Time sub-phrase component identifier */
-   int velid;                /* Velocity sub-phrase component identifier */
-
-/* The stage reached in the parsing of the STC-S description is indicated
-   by the "look_for" variable. This variable is allowed the following
-   values, indicating the item that is to be checked for next. */
-   enum look_for_type {
-      ERROR,
-      FILL_FACTOR,
-      FLAVOUR,
-      FRAME,
-      LIMITS,
-      PIX_SIZE,
-      POSITION,
-      POSITION_INTERVAL,
-      REDSHIFT_IDENTIFIER,
-      RED_SPEC_LABEL,
-      RED_SPEC_VALUE,
-      REFPOS,
-      RESOLUTION,
-      SIZE,
-      SPACE_IDENTIFIER,
-      SPECTRAL_IDENTIFIER,
-      START,
-      STOP,
-      TIME,
-      TIME_IDENTIFIER,
-      TIME_LABEL,
-      TIME_SCALE,
-      TYPE_DOPPLER,
-      UNIT,
-      VELOCITY_IDENTIFIER,
-      VELOCITY
-   } look_for;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Create the returned KeyMap. */
-   result = astKeyMap( " ", status );
-
-/* Initialise the word search context. */
-   (void) GetNextWord( NULL, &con, status );
-
-/* Get a pointer to the first word in the STC-S description. */
-   word = GetNextWord( this, &con, status );
-
-/* Indicate we are currently looking for the time sub-phrase (the first
-   item in an STC-S description). */
-   look_for = TIME_IDENTIFIER;
-
-/* Initialise everything else. */
-   fbuf = NULL;
-   naxes = 0;
-   prop = NULL;
-   props = NULL;
-   redid = NULL_ID;
-   spaceid = NULL_ID;
-   specid = NULL_ID;
-   subphrase = NULL;
-   t = NULL;
-   timeid = NULL_ID;
-   velid = NULL_ID;
-   timefrm = NULL;    
-
-/* Loop until all words in the STC-S description have been interpreted or 
-   an error has occurred. */
-   while( word && astOK ) {
-
-/* Initialise a flag to indicate that we have interpreted the current word 
-   sucesfully and so will need to get a new word before the next pass through 
-   this loop. If it turns out that we cannot interpret the current word
-   in this pass, then this flag will be set to zero at some point, thus 
-   preventing a new word from being acquired and causing another attempt to 
-   re-interpret the current word in a different context. */
-      new_word = 1;
-
-/* If we are currently looking for the time sub-phrase, see if the current
-   word is any of the known time sub-phrase identifiers. Is so, move on
-   to read the associated sub-phrase component. */
-      if( look_for == TIME_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Assume that we will be moving on to read the fill factor (most time
-   sub-phrases start with the fill factor ). */
-         look_for = FILL_FACTOR;
-
-/* Now check the word to see if it a known time sub-phrase identifier. */
-         if( astChrMatch( word, "TimeInterval" ) ) {
-            timeid = TIME_INTERVAL_ID;
-
-         } else if( astChrMatch( word, "StartTime" ) ) {
-            timeid = START_TIME_ID;
-
-         } else if( astChrMatch( word, "StopTime" ) ) {
-            timeid = STOP_TIME_ID;
-
-         } else if( astChrMatch( word, "Time" ) ) {
-            look_for = TIME_SCALE;  /* After "Time", we move on to find the 
-            timeid = TIME_ID;          time-scale, not the fill factor */
-
-/* If the word is not a known time sub-phrase identifier, indicate that we
-   should attempt to re-interpret the current word as a space sub-phrase 
-   identifier, rather than getting a new word. */
-         } else {
-            look_for = SPACE_IDENTIFIER;        
-            new_word = 0;
-         }
-
-/* If we have found a time sub-phrase identifier, create a KeyMap to hold
-   the properties of the time sub-phrase, and store the time sub-phrase 
-   identifier in the new KeyMap. */
-         if( timeid != NULL_ID ) {
-            subphrase = "time";
-            props = astKeyMap( " ", status );
-            astMapPut0A( result, "TIME_PROPS", props, NULL );
-            astMapPut0C( props, "ID", word, NULL );
-            naxes = 1;
-         }
-
-
-
-/* If we are currently looking for the space sub-phrase, see if the current
-   word is any of the known space sub-phrase identifiers. Is so, move on
-   to read the associated sub-phrase component. */
-      } else if( look_for == SPACE_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceeding time sub-phrase. */
-         timeid = NULL_ID;         
-
-/* Now check the word to see if it a known space sub-phrase identifier. */
-         spaceid = SpaceId( word, status );
-
-/* Decide what to look for next. */
-         if( spaceid == POSITION_ID ) {
-            look_for = FRAME;
-
-         } else if( spaceid != NULL_ID ) {
-            look_for = FILL_FACTOR;
-
-/* If the word is not a known space sub-phrase identifier, move on to 
-   re-interpret it as a Spectral sub-phrase identifier. */
-         } else {
-            look_for = SPECTRAL_IDENTIFIER;
-            new_word = 0;
-         }
-
-/* If we have found a space sub-phrase identifier, create a KeyMap to hold
-   the properties of the space sub-phrase, and store the space sub-phrase 
-   identifier in the new KeyMap. */
-         if( spaceid != NULL_ID ) {
-            subphrase = "space";
-            if( props ) props = astAnnul( props );
-            props = astKeyMap( " ", status );
-            astMapPut0A( result, "SPACE_PROPS", props, NULL );
-            astMapPut0C( props, "ID", word, NULL );
-         }
-
-
-
-/* If we are currently looking for the velocity sub-phrase, see if the current
-   word is any of the known velocity sub-phrase identifiers. Is so, move on
-   to read the associated sub-phrase component.  */
-      } else if( look_for == VELOCITY_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceededing space sub-phrase. */
-         spaceid = NULL_ID;         
-
-/* Now check the word to see if it a known velocity sub-phrase identifier. */
-         if( astChrMatch( word, "VelocityInterval" ) ) {
-            velid = VELOCITY_INTERVAL_ID;
-            look_for = FILL_FACTOR;
-
-         } else if( astChrMatch( word, "Velocity" ) ) {
-            velid = VELOCITY_ID;
-            look_for = VELOCITY;
-
-/* If the word is not a known velocity sub-phrase identifier, move on to 
-   re-interpret it as a Spectral sub-phrase identifier. */
-         } else {
-            look_for = SPECTRAL_IDENTIFIER;
-            new_word = 0;
-         }
-
-/* If we have found a velocity sub-phrase identifier, create a KeyMap to 
-   hold the properties of the velocity sub-phrase, and store the velocity 
-   sub-phrase identifier in the new KeyMap. */
-         if( velid != NULL_ID ) {
-            subphrase = "velocity";
-            if( props ) props = astAnnul( props );
-            props = astKeyMap( " ", status );
-            astMapPut0A( result, "VELOCITY_PROPS", props, NULL );
-            astMapPut0C( props, "ID", word, NULL );
-         }
-
-
-
-/* If we are currently looking for the spectral sub-phrase, see if the
-   word is any of the known spectral sub-phrase identifiers. Is so, move 
-   on to read the associated sub-phrase component. */
-      } else if( look_for == SPECTRAL_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceededing velocity sub-phrase. */
-         velid = NULL_ID;
-
-/* Now check the word to see if it a known spectral sub-phrase identifier. */
-         if( astChrMatch( word, "SpectralInterval" ) ) {
-            look_for = FILL_FACTOR;         /* Move on to find the fill factor */
-            specid = SPECTRAL_INTERVAL_ID;
-
-         } else if( astChrMatch( word, "Spectral" ) ) {
-            look_for = REFPOS;              /* Move on to find the refpos */
-            specid = SPECTRAL_ID;
-
-/* If the word is not a known spectral sub-phrase identifier, move on to 
-   look for the Redshift sub-phrase. */
-         } else {
-            look_for = REDSHIFT_IDENTIFIER;
-            new_word = 0;
-         }
-
-/* If we have found a spectral sub-phrase identifier, create a KeyMap to 
-   hold the properties of the spectral sub-phrase, and store the spectral 
-   sub-phrase identifier in the new KeyMap. */
-         if( specid != NULL_ID ) {
-            subphrase = "spectral";
-            if( props ) props = astAnnul( props );
-            props = astKeyMap( " ", status );
-            astMapPut0A( result, "SPECTRAL_PROPS", props, NULL );
-            astMapPut0C( props, "ID", word, NULL );
-            naxes = 1;
-         }
-
-
-
-/* If we are currently looking for the redshift sub-phrase, see if the
-   word is any of the known redshift sub-phrase identifiers. Is so, move 
-   on to read the associated sub-phrase component. */
-      } else if( look_for == REDSHIFT_IDENTIFIER ) {
-/* ------------------------------------------------------------------ */
-
-/* Indicate we have finished any preceeding spectral sub-phrase. */
-         specid = NULL_ID;         
-
-/* Now check the word to see if it a known spectral sub-phrase identifier. */
-         if( astChrMatch( word, "RedshiftInterval" ) ) {
-            look_for = FILL_FACTOR;       /* Move on to find the fill factor */
-            redid = REDSHIFT_INTERVAL_ID;
-
-         } else if( astChrMatch( word, "Redshift" ) ) {
-            look_for = REFPOS;            /* Move on to find the refpos */
-            redid = REDSHIFT_ID;
-
-/* If the word is not a known redshift sub-phrase identifier, report a
-   warning. */
-         } else if( word[ 0 ] && astOK ) {
-            astError( AST__BADIN, "astRead(%s): Unsupported or irrelevant "
-                      "word '%s' found in STC-S %s sub-phrase: '%s'.", status,
-                      astGetClass( this ), word, subphrase, 
-                      ContextFragment( &con, &fbuf, status ) );
-            new_word = 0;
-         }
-
-/* If we have found a redshift sub-phrase identifier, create a KeyMap to 
-   hold the properties of the redshift sub-phrase, and store the redshift 
-   sub-phrase identifier in the new KeyMap. */
-         if( redid != NULL_ID ) {
-            subphrase = "redshift";
-            if( props ) props = astAnnul( props );
-            props = astKeyMap( " ", status );
-            astMapPut0A( result, "REDSHIFT_PROPS", props, NULL );
-            astMapPut0C( props, "ID", word, NULL );
-            naxes = 1;
-         }
-
-/* Indicate we can now end when we run out of input words. */
-         con.done = 1;
-
-
-
-/* If we are currently looking for a fill factor... */
-      } else if( look_for == FILL_FACTOR ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "fillfactor" attempt to read the numerical filling 
-   factor from the next word. If this fails, or if the current word is
-   not "fillfactor", indicate that we will be re-interpreting the current 
-   word in a new context and so do not need a new word. */
-         if( astChrMatch( word, "fillfactor" ) ) {
-            word = GetNextWord( this, &con, status );
-            if( astChr2Double( word ) == AST__BAD ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
-                         "filling factor, but found '%s' in the %s "
-                         "sub-phrase of STC-S description: '%s'.", status, 
-                          word, subphrase, ContextFragment( &con, &fbuf, 
-                                                            status ) );
-               new_word = 0;
-            } 
-         } else {
-            new_word = 0;
-         }
-
-/* If we are reading a time sub-phrase, move on to read the timescale. */
-         if( timeid != NULL_ID ) {
-            look_for = TIME_SCALE;            
-
-/* If we are reading a space sub-phrase, move on to read the frame. */
-         } else if( spaceid != NULL_ID ) {
-            look_for = FRAME;            
-
-/* If we are reading a velocity sub-phrase, move on to read the limits. */
-         } else if( velid != NULL_ID ) {
-            look_for = LIMITS;
-
-/* Otherwise (i.e. for spectral and redshift sub-phrases) move on to read 
-   the refpos. */
-         } else {
-            look_for = REFPOS;            
-         }
-
-/* If the word was usable, record it as the fillfactor property. */
-         if( new_word ) astMapPut0C( props, "FILLFACTOR", word, NULL );
-
-
-
-/* If we are currently looking for a time scale... */
-      } else if( look_for == TIME_SCALE ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised STC-S timescale, store it in the
-   props KeyMap. Otherwise, indicate that the word can be re-used in the 
-   next context. */
-         if( astChrMatch( word, "TT" )  ||
-             astChrMatch( word, "TDT" ) ||
-             astChrMatch( word, "ET" )  ||
-             astChrMatch( word, "TAI" ) ||
-             astChrMatch( word, "IAT" ) ||
-             astChrMatch( word, "UTC" ) ||
-             astChrMatch( word, "TEB" ) ||
-             astChrMatch( word, "TDB" ) ||
-             astChrMatch( word, "TCG" ) ||
-             astChrMatch( word, "TCB" ) ||
-             astChrMatch( word, "LST" ) ||
-             astChrMatch( word, "nil" ) ) {
-
-            astMapPut0C( props, "TIMESCALE", word, NULL );
-
-         } else {
-            new_word = 0;
-         }
-
-/* Move on to look for a refpos */
-         look_for = REFPOS;
-
-
-
-/* If we are currently looking for a space frame... */
-      } else if( look_for == FRAME ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised STC-S spatial frame, store it in 
-   the props KeyMap. Otherwise, indicate that the word can be re-used. */ 
-         if( astChrMatch( word, "ICRS" ) ||
-             astChrMatch( word, "FK5" ) ||
-             astChrMatch( word, "FK4" ) ||
-             astChrMatch( word, "J2000" ) ||
-             astChrMatch( word, "B1950" ) ||
-             astChrMatch( word, "ECLIPTIC" ) ||
-             astChrMatch( word, "GALACTIC" ) ||
-             astChrMatch( word, "GALACTIC_II" ) ||
-             astChrMatch( word, "SUPER_GALACTIC" ) ||
-             astChrMatch( word, "GEO_C" ) ||
-             astChrMatch( word, "GEO_D" ) ||
-             astChrMatch( word, "UNKNOWNFrame" ) ) {
-
-            astMapPut0C( props, "FRAME", word, NULL );
-            
-         } else {
-            new_word = 0;
-         }
-
-/* Move on to look for a refpos */
-         look_for = REFPOS;
-
-
-
-/* If we are currently looking for a refpos... */
-      } else if( look_for == REFPOS ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised STC-S reference position, store it in 
-   the props KeyMap. Otherwise, indicate that the word can be re-used. The
-   first group of reference positions apply to all sub-phrases. */ 
-         if( astChrMatch( word, "GEOCENTER" ) ||
-             astChrMatch( word, "BARYCENTER" ) ||
-             astChrMatch( word, "HELIOCENTER" ) ||
-             astChrMatch( word, "TOPOCENTER" ) ||
-             astChrMatch( word, "GALACTIC_CENTER" ) ||
-             astChrMatch( word, "EMBARYCENTER" ) ||
-             astChrMatch( word, "MOON" ) ||
-             astChrMatch( word, "MERCURY" ) ||
-             astChrMatch( word, "VENUS" ) ||
-             astChrMatch( word, "MARS" ) ||
-             astChrMatch( word, "JUPITER" ) ||
-             astChrMatch( word, "SATURN" ) ||
-             astChrMatch( word, "URANUS" ) ||
-             astChrMatch( word, "NEPTUNE" ) ||
-             astChrMatch( word, "PLUTO" ) ||
-             astChrMatch( word, "UNKNOWNRefPos" ) ) {
-
-            astMapPut0C( props, "REFPOS", word, NULL );
-
-/* This group of reference positions apply only to spectral and redshift 
-   sub-phrases. */ 
-         } else if( astChrMatch( word, "LSR" ) ||
-                    astChrMatch( word, "LSRK" ) ||
-                    astChrMatch( word, "LSRD" ) ||
-                    astChrMatch( word, "LOCAL_GROUP_CENTER" ) ) {
-
-            if( specid != NULL_ID || redid != NULL_ID ) {
-               astMapPut0C( props, "REFPOS", word, NULL );
-
-            } else if( astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Illegal reference "
-                         "position '%s' found in the %s sub-phrase of "
-                         "STC-S description: '%s'.", status, word, 
-                         subphrase, ContextFragment( &con, &fbuf, status ) );
-               new_word = 0;
-            }
-
-         } else {
-            new_word = 0;
-         }
-
-/* Choose what to look for next on the basis of the type of sub-phrase
-   currently being interpreted. */
-         if( timeid == TIME_INTERVAL_ID ){
-            look_for = START;   /* Move on to find the start time */
-
-         } else if( timeid == START_TIME_ID ){
-            look_for = START;   /* Move on to find the start time */
-
-         } else if( timeid == STOP_TIME_ID ){
-            look_for = STOP;    /* Move on to find the stop time */
-
-         } else if( timeid == TIME_ID ){
-            look_for = TIME;    /* Move on to find the time */
-
-         } else if( spaceid != NULL_ID ){
-            look_for = FLAVOUR; /* Move on to find the spatial flavour */
-
-         } else if( specid == SPECTRAL_INTERVAL_ID ) {
-            look_for = LIMITS;  /* Move on to find the spectral limits */
-
-         } else if( specid == SPECTRAL_ID ) {
-            look_for = RED_SPEC_VALUE; /* Move on to find the spectral value */
-
-         } else if( redid == REDSHIFT_INTERVAL_ID ) {
-            look_for = TYPE_DOPPLER;   /* Move on to find the redshift type */
-
-         } else if( redid == REDSHIFT_ID ) {
-            look_for = TYPE_DOPPLER;   /* Move on to find the redshift type */
-
-         } else if( astOK ) {  /* Should never happen */
-             astError( AST__INTER, "astRead(StcsChan): Sanity check 1 fails in "
-                       "function ReadProps (AST internal programming error).", 
-                       status );
-            new_word = 0;
-         }
-
-
-
-
-
-/* If we are currently looking for a start time... */
-      } else if( look_for == START ) {
-/* ------------------------------------------------------------------ */
-
-/* Save the current word as the start of the START value. */
-         nc = 0;
-         prop = astAppendString( prop, &nc, word );
-
-/* If the current word is "JD" or "MJD", the following word should be 
-   numerical. */
-         is_jd = astChrMatch( word, "JD" );
-         if( is_jd || astChrMatch( word, "MJD" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-            if( value == AST__BAD && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected numerical "
-                         "value in Start time, but found '%s %s' in STC-S "
-                         "description: '%s'.", status, prop, word, 
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Append the second word to the first word. */
-            } else {
-               prop = astAppendString( prop, &nc, " " );
-               prop = astAppendString( prop, &nc, word );
-            }
-
-/* Convert JD to MJD if required. */
-            start = is_jd ? value - 2400000.5 : value;
-
-/* Otherwise, the current word should be an ISO date. Use a TimeFrame
-   to check the string. */
-         } else {
-            if( !timefrm ) timefrm = astTimeFrame( " ", status );
-            if( !astUnformat( timefrm, 0, word, &start ) && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected ISO date "
-                         "string Start time, but found '%s' in an STC-S "
-                         "description: '%s'.", status, word, 
-                         ContextFragment( &con, &fbuf, status ) );
-            }
-         }
-
-/* Record the START property. */
-         astMapPut0C( props, "START", prop, NULL );
-         astMapPut0D( props, "MJDSTART", start, NULL );
-
-/* Decide what to do next. */
-         if( timeid == TIME_INTERVAL_ID ){
-            look_for = STOP;        /* Move on to find the stop time */
-
-         } else if( timeid == START_TIME_ID ){
-            look_for = TIME_LABEL;  /* Move on to find the "coord" time */
-
-         } 
-
-
-
-/* If we are currently looking for a stop time... */
-      } else if( look_for == STOP ) {
-/* ------------------------------------------------------------------ */
-
-/* Save the current word as the start of the STOP value. */
-         nc = 0;
-         prop = astAppendString( prop, &nc, word );
-
-/* If the current word is "JD" or "MJD", the following word should be 
-   numerical. */
-         is_jd = astChrMatch( word, "JD" );
-         if( is_jd || astChrMatch( word, "MJD" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-            if( value == AST__BAD && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected numerical "
-                         "value in Stop time, but found '%s %s' in STC-S "
-                         "description: '%s'.", status, prop, word, 
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Append the second word to the first word. */
-            } else {
-               prop = astAppendString( prop, &nc, " " );
-               prop = astAppendString( prop, &nc, word );
-            }
-
-/* Convert JD to MJD if required. */
-            stop = is_jd ? value - 2400000.5 : value;
-
-/* Otherwise, the current word should be an ISO date. Use a TimeFrame
-   to check the string. */
-         } else {
-            if( !timefrm ) timefrm = astTimeFrame( " ", status );
-            if( !astUnformat( timefrm, 0, word, &stop ) && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected ISO date "
-                         "string Stop time, but found '%s' in an STC-S "
-                         "description: '%s'.", status, word, 
-                         ContextFragment( &con, &fbuf, status ) );
-            }
-         }
-
-/* Record the STOP property. */
-         astMapPut0C( props, "STOP", prop, NULL );
-         astMapPut0D( props, "MJDSTOP", stop, NULL );
-
-/* Move on to find the "coord" time. */
-         look_for = TIME_LABEL; 
-
-
-
-/* If we are currently looking for the label before a time coord value... */
-      } else if( look_for == TIME_LABEL ) {
-/* ------------------------------------------------------------------ */
-         if( astChrMatch( word, "Time" ) ) {
-            look_for = TIME;
-         } else {
-            new_word = 0;
-            look_for = UNIT;
-         }
-
-
-
-/* If we are currently looking for a time... */
-      } else if( look_for == TIME ) {
-/* ------------------------------------------------------------------ */
-
-/* Save the current word as the start of the TIME value. */
-         nc = 0;
-         prop = astAppendString( prop, &nc, word );
-
-/* If the current word is "JD" or "MJD", the following word should be 
-   numerical. */
-         is_jd = astChrMatch( word, "JD" );
-         if( is_jd || astChrMatch( word, "MJD" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-            if( value == AST__BAD && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected numerical "
-                         "value in Time value, but found '%s %s' in STC-S "
-                         "description: '%s'.", status, prop, word, 
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Append the second word to the first word. */
-            } else {
-               prop = astAppendString( prop, &nc, " " );
-               prop = astAppendString( prop, &nc, word );
-            }
-
-/* Convert JD to MJD if required. */
-            time = is_jd ? value - 2400000.5 : value;
-
-/* Otherwise, the current word should be an ISO date. Use a TimeFrame
-   to check the string. */
-         } else {
-            if( !timefrm ) timefrm = astTimeFrame( " ", status );
-            if( !astUnformat( timefrm, 0, word, &time ) && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected ISO date "
-                         "string Time value, but found '%s' in an STC-S "
-                         "description: '%s'.", status, word, 
-                         ContextFragment( &con, &fbuf, status ) );
-            }
-         }
-
-/* Record the TIME property. */
-         astMapPut0C( props, "TIME", prop, NULL );
-         astMapPut0D( props, "MJDTIME", time, NULL );
-
-/* Move on to look for the units. */
-         look_for = UNIT;
-
-
-
-/* If we are currently looking for a space "flavor"... */
-      } else if( look_for == FLAVOUR ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is a recognised flavour value, note how many axis
-   values are required to specify a position. Otherwise, indicate that 
-   the word can be re-used. */ 
-         if( astChrMatch( word, "SPHER2" ) ) {
-            naxes = 2;
-
-         } else if( astChrMatch( word, "UNITSPHER" ) ) {
-            naxes = 2;
-
-         } else if( astChrMatch( word, "CART1" ) ) {
-            naxes = 1;
-
-         } else if( astChrMatch( word, "CART2" ) ) {
-            naxes = 2;
-
-         } else if( astChrMatch( word, "CART3" ) ) {
-            naxes = 3;
-
-         } else if( astChrMatch( word, "SPHER3" ) ) {
-            naxes = 3;
-
-         } else {
-            naxes = 2;
-            new_word = 0;
-         }
-
-/* If the word was recognised as a flavour, store it in the porperties
-   KeyMap. */
-         if( new_word ) {
-            astMapPut0C( props, "FLAVOR", word, NULL );
-            astMapPut0C( props, "FLAVOUR", word, NULL );
-         }
-            
-/* The next set of words to be read from the source function will specify 
-   the arguments of the region enclosing the spatial positions. This may 
-   contain nested regions, so use a recursive function to read the 
-   arguments and store them in the properties KeyMap. */
-         if( new_word ) word = GetNextWord( this, &con, status );
-         word = ReadSpaceArgs( this, word, spaceid, naxes, &con, props, 
-                               status );
-         new_word = 0;
-
-/* Move on to the next look_for (following the region argument list read
-   by ReadSpaceArgs). */
-         if( spaceid == POSITION_ID ) {
-            look_for = UNIT;
-         } else {
-            look_for = POSITION;
-         }
-
-
-
-/* If we are currently looking for interval "lolimit"and "hilimit" ... */
-      } else if( look_for == LIMITS ) {
-/* ------------------------------------------------------------------ */
-         if( velid != NULL_ID ) {
-            t = "velocity";
-            look_for = VELOCITY;
-
-         } else if( specid != NULL_ID ) {
-            t = "spectral";
-            look_for = RED_SPEC_LABEL;
-
-         } else {
-            t = "redshift";
-            look_for = RED_SPEC_LABEL;
-         }
-
-/* The current word should be a numerical value (the low limit ). */
-         if( astChr2Double( word ) == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
-                      "value for a %s lolimit, but found '%s' in an STC-S "
-                      "description: '%s'.", status, t, word, 
-                      ContextFragment( &con, &fbuf, status ) );
-         } else {
-            astMapPut0C( props, "LOLIMIT", word, NULL );
-         }
-
-/* The next word should be a numerical value (the high limit ). */
-         word = GetNextWord( this, &con, status );
-         if( astChr2Double( word ) == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
-                      "value for a %s hilimit, but found '%s' in an STC-S "
-                      "description: '%s'.", status, t, word, 
-                      ContextFragment( &con, &fbuf, status ) );
-         } else {
-            astMapPut0C( props, "HILIMIT", word, NULL );
-         }
-
-
-
-/* If we are currently looking for the label before a spectral or redshift 
-   value... */
-      } else if( look_for == RED_SPEC_LABEL ) {
-/* ------------------------------------------------------------------ */
-         if( specid != NULL_ID && astChrMatch( word, "Spectral" ) ) {
-            look_for = RED_SPEC_VALUE;
-
-         } else if( redid != NULL_ID && astChrMatch( word, "Redshift" ) ) {
-            look_for = RED_SPEC_VALUE;
-
-         } else {
-            new_word = 0;
-            look_for = UNIT;
-         }
-
-
-
-/* If we are currently looking for an spectral or redshift value. */
-      } else if( look_for == RED_SPEC_VALUE ) {
-/* ------------------------------------------------------------------ */
-
-         t = ( specid != NULL_ID ) ? "spectral" : "redshift";
-         if( astChr2Double( word ) == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected a numerical "
-                      "%s value, but found '%s' in an STC-S "
-                      "description: '%s'.", status, t, word, 
-                      ContextFragment( &con, &fbuf, status ) );
-         } else {
-            astMapPut0C( props, ( specid != NULL_ID ) ? "SPECTRAL" : "REDSHIFT", 
-                         word, NULL );
-         }
-
-/* Decide what to do next. */
-         look_for = UNIT;
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Position ... */
-      } else if( look_for == POSITION ) {
-/* ------------------------------------------------------------------ */
-
-/* Check the current word is "Position". If so, get the next word. */
-         if( astChrMatch( word, "Position" ) ) {
-            word = GetNextWord( this, &con, status );
-
-/* Get a value for every space axis. */
-            nc = 0;
-            for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-               val[ iaxis ] = astChr2Double( word );
-               if( val[ iaxis ] == AST__BAD && astOK ) {
-                  astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                            "axis value for a space Position, but found "
-                            "'%s' in an STC-S description: '%s'.", status,
-                            word, ContextFragment( &con, &fbuf, status ) );
-               }
-               prop = astAppendString( prop, &nc, word );
-               prop = astAppendString( prop, &nc, " " );
-               word = GetNextWord( this, &con, status );
-            }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-            prop[ nc - 1 ] = 0;
-            astMapPut0C( props, "POSITION", prop, NULL );
-            astMapPut1D( props, "DPOSITION", naxes, val, NULL );
-         }
-
-/* Move on to read the "unit" item. */
-         new_word = 0;
-         look_for = UNIT;
-
-
-
-/* If we are currently looking for the redshift type and doppler
-   definition ... */
-      } else if( look_for == TYPE_DOPPLER ) {
-/* ------------------------------------------------------------------ */
-
-         if( astChrMatch( word, "VELOCITY" ) ||
-             astChrMatch( word, "REDSHIFT" ) ) {
-            astMapPut0C( props, "TYPE", word, NULL );
-            word = GetNextWord( this, &con, status );
-         }
-
-         if( astChrMatch( word, "OPTICAL" ) ||
-             astChrMatch( word, "RADIO" ) ||
-             astChrMatch( word, "RELATIVISTIC" ) ) {
-            astMapPut0C( props, "DOPPLERDEF", word, NULL );
-         } else {
-            new_word = 0;
-         }
-
-/* Decide what to do next. */
-         look_for = ( redid == REDSHIFT_INTERVAL_ID ) ? LIMITS : RED_SPEC_VALUE;
-
-
-
-/* If we are currently looking for a velocity label and value... */
-      } else if( look_for == VELOCITY ) {
-/* ------------------------------------------------------------------ */
-
-         if( astChrMatch( word, "Velocity" ) ) {
-            word = GetNextWord( this, &con, status );
-            if( astChr2Double( word ) == AST__BAD && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected a "
-                         "numerical Velocity value but found 'Velocity %s' "
-                         "in an STC-S description: '%s'.", status, word,
-                         ContextFragment( &con, &fbuf, status ) );
-            }
-
-         } else {
-            new_word = 0;
-         }
-
-         look_for = UNIT;
-
-
-
-/* If we are currently looking for a "unit" string... */
-      } else if( look_for == UNIT ) {
-/* ------------------------------------------------------------------ */
-
-/* See if the current word is "unit". If so, read the next word (which
-   will be the unit string itself). Otherwise, indicate the current word
-   can be re-used. */
-         if( astChrMatch( word, "unit" ) ) {
-            word = GetNextWord( this, &con, status );
-         } else {
-            new_word = 0;
-         }
-
-/* If we have a unit string... */
-         if( new_word ) {
-
-/* Check that the unit string is one of the allowed values (different
-   values are allowed for different sub-phrases). Space frames can have 
-   multiple units strings (one for each axis) so loop round until a string 
-   is found which is not a valid unit string. */
-            nc = 0;
-            nunit = 0;
-            while( ( timeid != NULL_ID && (  !strcmp( word, "s" ) ||  
-                                          !strcmp( word, "d" ) ||  
-                                          !strcmp( word, "a" ) ||  
-                                          !strcmp( word, "yr" ) ||  
-                                          !strcmp( word, "cy" ) ) ) ||
-
-                ( spaceid != NULL_ID && ( !strcmp( word, "deg" ) ||  
-                                          !strcmp( word, "arcmin" ) ||  
-                                          !strcmp( word, "arcsec" ) ||  
-                                          !strcmp( word, "m" ) ||  
-                                          !strcmp( word, "mm" ) ||  
-                                          !strcmp( word, "m" ) ||  
-                                          !strcmp( word, "km" ) ||  
-                                          !strcmp( word, "AU" ) ||  
-                                          !strcmp( word, "pc" ) ||  
-                                          !strcmp( word, "kpc" ) ||  
-                                          !strcmp( word, "Mpc" ) ) ) ||
-
-                ( velid != NULL_ID && (   !strcmp( word, "deg" ) ||  
-                                          !strcmp( word, "arcmin" ) ||  
-                                          !strcmp( word, "arcsec" ) ||  
-                                          !strcmp( word, "m" ) ||  
-                                          !strcmp( word, "mm" ) ||  
-                                          !strcmp( word, "km" ) ||  
-                                          !strcmp( word, "AU" ) ||  
-                                          !strcmp( word, "pc" ) ||  
-                                          !strcmp( word, "kpc" ) ||  
-                                          !strcmp( word, "Mpc" ) ) ) ||
-
-                (                         !strcmp( word, "Hz" ) ||  
-                                          !strcmp( word, "MHz" ) ||  
-                                          !strcmp( word, "GHz" ) ||  
-                                          !strcmp( word, "m" ) ||  
-                                          !strcmp( word, "mm" ) ||  
-                                          !strcmp( word, "um" ) ||  
-                                          !strcmp( word, "nm" ) ||  
-                                          !strcmp( word, "Angstrom" ) ||  
-                                          !strcmp( word, "eV" ) ||  
-                                          !strcmp( word, "keV" ) ||  
-                                          !strcmp( word, "MeV" ) ) ) {
-
-               prop = astAppendString( prop, &nc, word );
-               prop = astAppendString( prop, &nc, " " );
-               nunit++;
-               word = GetNextWord( this, &con, status );
-            }
-
-/* Report an error if an inappropriate number of valid unit strings was
-   found. */
-            if( nunit == 0 && astOK ) { 
-               astError( AST__BADIN, "astRead(StcsChan): Unsupported "
-                         "units (%s) for the %s sub-phrase within an "
-                         "STC-S description: '%s'.", status, word, subphrase,
-                         ContextFragment( &con, &fbuf, status ) );
-
-            } else if( nunit != 1 && nunit != naxes && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Incorrect number of "
-                         "units string (%d) supplied for the %s sub-phrase within an "
-                         "STC-S description: '%s'.", status, nunit, subphrase,
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space, and store the property value in the 
-   KeyMap. */
-            } else {
-               prop[ nc - 1 ] = 0;
-               astMapPut0C( props, "UNIT", prop, NULL );
-            }
-
-/* The current word is the first word that was not a valid unit string,
-   and so can be re-used. */
-            new_word = 0;
-         }
-
-/* Move on to find the errors. */
-         look_for = ERROR;
-
-
-
-/* If we are currently looking for an "Error" string... */
-      } else if( look_for == ERROR ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "Error" read all subsequent words until the first 
-   non-numerical value is encountered. */
-         if( astChrMatch( word, "Error" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-
-            nc = 0;
-            nval = 0; 
-            while( value != AST__BAD ) {
-               if( nval < MAXVAL ) {
-                  val[ nval++ ] = value;
-                  prop = astAppendString( prop, &nc, word );
-                  prop = astAppendString( prop, &nc, " " );
-                  word = GetNextWord( this, &con, status );
-                  value = astChr2Double( word );
-               } else {
-                  astError( AST__BADIN, "astRead(StcsChan): Too many (more "
-                            "than %d) numerical values found for the Error "
-                            "property of the %s sub-phrase within an STC-S "
-                            "description: '%s'.", status, MAXVAL, subphrase,
-                            ContextFragment( &con, &fbuf, status ) );
-                  break;
-               }
-            }
-
-/* Report an error if no numerical error values were found. */
-            if( nval == 0 && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected a "
-                         "numerical error value but found 'Error %s' "
-                         "for the %s sub-phrase within an "
-                         "STC-S description: '%s'.", status, word, subphrase,
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated 
-   string of formatted values in the properties KeyMap. Also store a
-   corresponding vector of floating point values in the KeyMap. */
-            } else {
-               prop[ nc - 1 ] = 0;
-               astMapPut0C( props, "ERROR", prop, NULL );
-               astMapPut1D( props, "DERROR", nval, val, NULL );
-            }
-         }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
-   one that turned out not to be a numerical value above). */
-         new_word = 0;
-
-/* Next look for Resolution */
-         look_for = RESOLUTION;
-
-
-
-/* If we are currently looking for a "Resolution" string... */
-      } else if( look_for == RESOLUTION ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "Resolution" read all subsequent words until the 
-   first non-numerical value is encountered. */
-         if( astChrMatch( word, "Resolution" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-
-            nc = 0;
-            nval = 0; 
-            while( value != AST__BAD ) {
-               if( nval < MAXVAL ) {
-                  val[ nval++ ] = value;
-                  prop = astAppendString( prop, &nc, word );
-                  prop = astAppendString( prop, &nc, " " );
-                  word = GetNextWord( this, &con, status );
-                  value = astChr2Double( word );
-               } else {
-                  astError( AST__BADIN, "astRead(StcsChan): Too many (more "
-                            "than %d) numerical values found for the Resolution "
-                            "property of the %s sub-phrase within an STC-S "
-                            "description: '%s'.", status, MAXVAL, subphrase,
-                            ContextFragment( &con, &fbuf, status ) );
-                  break;
-               }
-            }
-
-/* Report an error if no numerical values were found. */
-            if( nval == 0 && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected a "
-                         "numerical resolution value but found 'Resolution %s' "
-                         "for the %s sub-phrase within an STC-S description:"
-                         " '%s'.", status, word, subphrase,
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated 
-   string of formatted values in the properties KeyMap. Also store a
-   corresponding vector of floating point values in the KeyMap. */
-            } else {
-               prop[ nc - 1 ] = 0;
-               astMapPut0C( props, "RESOLUTION", prop, NULL );
-               astMapPut1D( props, "DRESOLUTION", nval, val, NULL );
-            }
-         }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
-   one that turned out not to be a numerical value above). */
-         new_word = 0;
-
-/* Next look for Size. */
-         look_for = SIZE;
-
-
-
-/* If we are currently looking for a spatial "Size" string... */
-      } else if( look_for == SIZE ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "Size" read all subsequent words until the 
-   first non-numerical value is encountered. */
-         if( astChrMatch( word, "Size" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-
-            nc = 0;
-            nval = 0; 
-            while( value != AST__BAD ) {
-               if( nval < MAXVAL ) {
-                  val[ nval++ ] = value;
-                  prop = astAppendString( prop, &nc, word );
-                  prop = astAppendString( prop, &nc, " " );
-                  word = GetNextWord( this, &con, status );
-                  value = astChr2Double( word );
-               } else {
-                  astError( AST__BADIN, "astRead(StcsChan): Too many (more "
-                            "than %d) numerical values found for the Size "
-                            "property of the %s sub-phrase within an STC-S "
-                            "description: '%s'.", status, MAXVAL, subphrase,
-                            ContextFragment( &con, &fbuf, status ) );
-                  break;
-               }
-            }
-
-/* Report an error if no numerical values were found. */
-            if( nval == 0 && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected a "
-                         "numerical size value but found 'Size %s' "
-                         "for the %s sub-phrase within an STC-S description:"
-                         " '%s'.", status, word, subphrase,
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated 
-   string of formatted values in the properties KeyMap. Also store a
-   corresponding vector of floating point values in the KeyMap. */
-            } else {
-               prop[ nc - 1 ] = 0;
-               astMapPut0C( props, "SIZE", prop, NULL );
-               astMapPut1D( props, "DSIZE", nval, val, NULL );
-            }
-         }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
-   one that turned out not to be a numerical value above). */
-         new_word = 0;
-
-/* Next look for PixSize. */
-         look_for = PIX_SIZE;
-
-
-
-/* If we are currently looking for a "PixSize" string... */
-      } else if( look_for == PIX_SIZE ) {
-/* ------------------------------------------------------------------ */
-
-/* If the current word is "PixSize" read all subsequent words until the 
-   first non-numerical value is encountered. */
-         if( astChrMatch( word, "PixSize" ) ) {
-            word = GetNextWord( this, &con, status );
-            value = astChr2Double( word );
-
-            nc = 0;
-            nval = 0; 
-            while( value != AST__BAD ) {
-               if( nval < MAXVAL ) {
-                  val[ nval++ ] = value;
-                  prop = astAppendString( prop, &nc, word );
-                  prop = astAppendString( prop, &nc, " " );
-                  word = GetNextWord( this, &con, status );
-                  value = astChr2Double( word );
-               } else {
-                  astError( AST__BADIN, "astRead(StcsChan): Too many (more "
-                            "than %d) numerical values found for the PixSize "
-                            "property of the %s sub-phrase within an STC-S "
-                            "description: '%s'.", status, MAXVAL, subphrase,
-                            ContextFragment( &con, &fbuf, status ) );
-                  break;
-               }
-            }
-
-/* Report an error if no numerical values were found. */
-            if( nval == 0 && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected a "
-                         "numerical pixel size but found 'PixSize %s' "
-                         "for the %s sub-phrase within an STC-S description:"
-                         " '%s'.", status, word, subphrase,
-                         ContextFragment( &con, &fbuf, status ) );
-
-/* Otherwise, remove the trailing space and store the concatenated 
-   string of formatted values in the properties KeyMap. Also store a
-   corresponding vector of floating point values in the KeyMap. */
-            } else {
-               prop[ nc - 1 ] = 0;
-               astMapPut0C( props, "PIXSIZE", prop, NULL );
-               astMapPut1D( props, "DPIXSIZE", nval, val, NULL );
-            }
-         }
-
-/* Indicate that we do not need to get a new word (we can re-use the last
-   one that turned out not to be a numerical value above). */
-         new_word = 0;
-
-/* Next look for the next sub-phrase. */
-         if( timeid != NULL_ID ) {
-            look_for = SPACE_IDENTIFIER;
-
-         } else if( spaceid != NULL_ID ) {
-            look_for = VELOCITY_IDENTIFIER;
-
-         } else if( velid != NULL_ID ) {
-            look_for = SPECTRAL_IDENTIFIER;
-
-         } else if( specid != NULL_ID ) {
-            look_for = REDSHIFT_IDENTIFIER;
-
-         } else {
-            break;
-         }
-
-
-
-
-/* Report an error for any unknown look_for. */
-/* ------------------------------------------------------------------ */
-      } else if( astOK ) { 
-         astError( AST__INTER, "astRead(StcsChan): Illegal look_for value "
-                   "(%d) encountered (internal AST programming error).",
-                   status, look_for );
-      }
-
-/* If required, get the next word in the STC-S description. */
-      if( new_word ) word = GetNextWord( this, &con, status );
-   }
-
-/* Free resources stored in the GetNextWord context structure. */
-   con.done = 1;
-   (void) GetNextWord( this, &con, status );
-   FreeContext( &con, status );
-
-/* Free other resources */
-   if( fbuf ) fbuf = astFree( fbuf );
-   if( prop ) prop = astFree( prop );
-   if( props ) props = astAnnul( props );
-   if( timefrm ) timefrm = astAnnul( timefrm );
-
-/* If an error occurred, clean up by deleting the new Object and
-   return a NULL pointer. */
-   if ( !astOK ) result = astDelete( result );
-
-/* Return the pointer to the properties KeyMap. */
-   return result;
-
-/* Undefine Local Constants: */
-#undef MAXVAL
-}
-
-static const char *ReadSpaceArgs( AstStcsChan *this, const char *word, 
-                                  int spaceid, int naxes, WordContext *con, 
-                                  AstKeyMap *props, int *status ){
-/*
-*  Name:
-*     ReadSpaceArgs
-
-*  Purpose:
-*     Read space region arguments from an STC-S description.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     const char *ReadSpaceArgs( AstStcsChan *this, const char *word, 
-*                                int spaceid, int naxes, WordContext *con, 
-*                                AstKeyMap *props, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function parses the list of space-separated words that form
-*     the argument list of a spatial region. These words are read from the 
-*     source function, and stored in the supplied KeyMap using keys that
-*     identify their purpose.
-*
-*     This function calls itself recursively to handle compound regions.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     word
-*        The first word of the argument list.
-*     spaceid
-*        An integer identifier for the type of spatial region for which
-*        arguments are being read.
-*     naxes
-*        Number of axes in the space frame.
-*     con
-*        Pointer to a structure holding context for use with the
-*        GetNextWord function. On exit, the next word returned by the
-*        GetNextWord function will be the first word following the 
-*        argument list.
-*     props
-*        Pointer to the KeyMap in which the argument values should be
-*        stored.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the next wpord to be interpreted.
-
-*/
-
-
-/* Local Variables: */
-   AstKeyMap *new_props;   /* KeyMap holding properties of an argument region */
-   char *fbuf;             /* Pointer to buffer holding document fragment */
-   char *prop;             /* String property value */
-   char key[ 20 ];         /* Key for argument region */
-   double *p;              /* Pointer to next polygon vertex axis value */
-   double *temp;           /* Array of polygon vertex axis values */
-   double val;             /* Single numerical value */
-   double vals[ 6 ];       /* List of numerical values */
-   int iaxis;              /* Axis index */
-   int nc;                 /* Used length of string */
-   int new_spaceid;        /* Type of next argument region */
-   int nreg;               /* Number of argument regions found */
-   int nvert;              /* Number of vertices in polygon */
-
-/* Check inherited status */
-   if( !astOK ) return word;
-
-/* Initialise. */
-   fbuf = NULL;
-   prop = NULL;
-   nc = 0;
-
-/* If we are looking for information needed to create a spatial
-   Interval... */
-   if( spaceid == POSITION_INTERVAL_ID ) {
-
-/* Get a lolimit value for every space axis. */
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                   "'lolimit' value for a PositionInterval, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "LOLIMIT", prop, NULL );
-      astMapPut1D( props, "DLOLIMIT", naxes, vals, NULL );
-         
-/* Get a hilimit value for every space axis. */
-      nc = 0;
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                   "'hilimit' value for a PositionInterval, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "HILIMIT", prop, NULL );
-      astMapPut1D( props, "DLOLIMIT", naxes, vals, NULL );
-         
-
-
-/* If we are currently looking for information needed to create a spatial
-   AllSky ... */
-   } else if( spaceid == ALLSKY_ID ) {
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Circle ... */
-   } else if( spaceid == CIRCLE_ID ) {
-
-/* Get a centre value for every space axis. */
-      nc = 0;
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                   "'centre' value for a Circle, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      if( astOK ) prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "CENTRE", prop, NULL );
-      astMapPut1D( props, "DCENTRE", naxes, vals, NULL );
-
-/* Get the radius value. */
-      val = astChr2Double( word );
-      if( val == AST__BAD && astOK ) {
-         astError( AST__BADIN, "astRead(StcsChan): Expected a radius "
-                   "value for a Circle, but found '%s' in an STC-S "
-                   "description: '%s'.", status, word, 
-                   ContextFragment( con, &fbuf, status ) );
-      }
-
-/* Store the property value in the KeyMap. */
-      astMapPut0C( props, "RADIUS", word, NULL );
-
-/* Get the next word. */
-      word = GetNextWord( this, con, status );
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Ellipse ... */
-   } else if( spaceid == ELLIPSE_ID ) {
-
-/* Get a centre value for every space axis. */
-      nc = 0;
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                   "centre value for an Ellipse, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "CENTRE", prop, NULL );
-      astMapPut1D( props, "DCENTRE", naxes, vals, NULL );
-
-/* Get the first radius value . */
-      val = astChr2Double( word );
-      if( val == AST__BAD && astOK ) {
-         astError( AST__BADIN, "astRead(StcsChan): Expected the first "
-                   "radius value for an Ellipse, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-      }
-
-/* Store the property value in the KeyMap. */
-      astMapPut0C( props, "RADIUS1", word, NULL );
-
-/* Get the second radius value . */
-      word = GetNextWord( this, con, status );
-      val = astChr2Double( word );
-      if( val == AST__BAD && astOK ) {
-         astError( AST__BADIN, "astRead(StcsChan): Expected the second "
-                   "radius value for an Ellipse, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-      }
-
-/* Store the property value in the KeyMap. */
-      astMapPut0C( props, "RADIUS2", word, NULL );
-
-/* Get the position angle value. */
-      word = GetNextWord( this, con, status );
-      val = astChr2Double( word );
-      if( val == AST__BAD && astOK ) {
-         astError( AST__BADIN, "astRead(StcsChan): Expected the position "
-                   "angle value for an Ellipse, but found "
-                   "'%s' in an STC-S description: '%s'.", status, word,
-                   ContextFragment( con, &fbuf, status ) );
-      }
-
-/* Store the property value in the KeyMap. */
-      astMapPut0C( props, "POSANGLE", word, NULL );
-
-/* Get the next word. */
-      word = GetNextWord( this, con, status );
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Box ... */
-   } else if( spaceid == BOX_ID ) {
-
-/* Get a centre value for every space axis. */
-      nc = 0;
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                      "centre value for a Box, but found "
-                      "'%s' in an STC-S description: '%s'.", status,
-                      word, ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "CENTRE", prop, NULL );
-      astMapPut1D( props, "DCENTRE", naxes, vals, NULL );
-
-/* Get bsize value for every space axis. */
-      nc = 0;
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                      "'bsize' value for a Box, but found "
-                      "'%s' in an STC-S description: '%s'.", status,
-                      word, ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "BSIZE", prop, NULL );
-      astMapPut1D( props, "DBSIZE", naxes, vals, NULL );
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Polygon ... */
-   } else if( spaceid == POLYGON_ID ) {
-
-/* Read the first vertex into a dynamically allocated array. */
-      temp = astMalloc( sizeof( *temp )*naxes );
-      if( temp ) {
-         nc = 0;
-         p = temp;
-         for( iaxis = 0; iaxis < naxes; iaxis++,p++ ) {
-            val = astChr2Double( word );
-            if( val == AST__BAD && astOK ) {
-               astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                      "vertex value for a Polygon, but found "
-                      "'%s' in an STC-S description: '%s'.", status,
-                      word, ContextFragment( con, &fbuf, status ) );
-            } else {
-               *p = val;
-            }
-            prop = astAppendString( prop, &nc, word );
-            prop = astAppendString( prop, &nc, " " );
-            word = GetNextWord( this, con, status );
-         }
-
-/* Loop round reading remaining vertices, expanding the array as needed. */
-         nvert = 1;
-         val = astChr2Double( word );
-         while( val != AST__BAD && astOK ) {
-
-            temp = astGrow( temp, naxes*( nvert + 1 ), sizeof( *temp ) );
-            if( astOK ) {
-               p = temp + naxes*nvert;
-
-               for( iaxis = 0; iaxis < naxes; iaxis++, p++ ) {
-                  if( val == AST__BAD && astOK ) {
-                     astError( AST__BADIN, "astRead(StcsChan): Expected "
-                               "another vertex value for a Polygon, but "
-                               "found '%s' in an STC-S description: '%s'.", 
-                               status, word, ContextFragment( con, &fbuf, 
-                                                              status ) );
-                  } else {
-                     *p = val;
-                  }
-                  prop = astAppendString( prop, &nc, word );
-                  prop = astAppendString( prop, &nc, " " );
-                  word = GetNextWord( this, con, status );
-                  val = astChr2Double( word );
-               }
-               nvert++;
-            }
-         }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-         prop[ nc - 1 ] = 0;
-         astMapPut0C( props, "VERTICES", prop, NULL );
-         astMapPut1D( props, "DVERTICES", naxes*nvert, temp, NULL );
-         temp = astFree( temp );
-      }
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Convex ... */
-   } else if( spaceid == CONVEX_ID ) {
-      astError( AST__BADIN, "astRead(StcsChan): A Convex was found "
-                "within an STC-S description ('Convex' regions "
-                "are not yet supported by AST): %s", status,
-                ContextFragment( con, &fbuf, status ) );
-
-
-
-/* If we are currently looking for information needed to create a spatial
-   Position ... */
-   } else if( spaceid == POSITION_ID ) {
-
-/* Get a value for every space axis. */
-      nc = 0;
-      for( iaxis = 0; iaxis < naxes; iaxis++ ) {
-         vals[ iaxis ] = astChr2Double( word );
-         if( vals[ iaxis ] == AST__BAD && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected another "
-                      "axis value for a space Position, but found "
-                      "'%s' in an STC-S description: '%s'.", status,
-                      word, ContextFragment( con, &fbuf, status ) );
-         }
-         prop = astAppendString( prop, &nc, word );
-         prop = astAppendString( prop, &nc, " " );
-         word = GetNextWord( this, con, status );
-      }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-      prop[ nc - 1 ] = 0;
-      astMapPut0C( props, "POSITION", prop, NULL );
-      astMapPut1D( props, "DPOSITION", naxes, vals, NULL );
-
-
-
-/* All remaining space id values require the argument list to be enclosed
-   in parentheses. Report an error if the current word does not start
-   with an opening parenthesis. */
-   } else if( *word != '(' && astOK ) {
-      astError( AST__BADIN, "astRead(StcsChan): Expected an opening "
-                "parenthesis but found '%s' in an STC-S description: '%s'.", 
-                status, word, ContextFragment( con, &fbuf, status ) );
-
-/* Skip over the opening parenthesis. If the first word consists of just the 
-   opening parenthesis, get the next word.  */      
-   } else {
-      if( *(++word) == 0 ) word = GetNextWord( this, con, status );
-
-/* Loop round all regions included in the compound region. */
-      nreg = 0;
-      while( astOK ) {
-
-/* If the next word starts with a closing parenthesis, we have reached
-   the end of the argument list. */
-         if( *word == ')' ) {
-
-/* Skip over the closing parenthesis. If the word consists of just the 
-   closing parenthesis, get the next word.  */      
-            if( *(++word) == 0 ) word = GetNextWord( this, con, status );
-
-/* Leave the loop. */
-            break;
-         }
-
-/* Identify the region type from the current word. */
-         new_spaceid = SpaceId( word, status );
-         if( new_spaceid == NULL_ID && astOK ) {
-            astError( AST__BADIN, "astRead(StcsChan): Expected a "
-                      "CoordinateArea or a closing parenthesis but found "
-                      "'%s' in an STC-S description: '%s'.", status, word, 
-                      ContextFragment( con, &fbuf, status ) );
-         }
-
-/* Create a new KeyMap to store the properties of the new region. Store
-   this new KeyMap in the supplied KeyMap using a key of the form
-   "REGION<n>". */
-         new_props = astKeyMap( " ", status );
-         astMapPut0C( new_props, "ID", word, NULL );
-         sprintf( key, "REGION%d", ++nreg );
-         astMapPut0A( props, key, new_props, NULL );
-
-/* Get the next word (i.e. the first word of the argument list for the 
-   region). */
-         word = GetNextWord( this, con, status );
-
-/* Call this function recursively to read the argument list. */
-         word = ReadSpaceArgs( this, word, new_spaceid, naxes, con, 
-                               new_props, status );
-
-/* Free resources. */
-         new_props = astAnnul( new_props );
-      }
-
-/* Store the number of regions in the supplied KeyMap. */
-      astMapPut0I( props, "NREG", nreg, NULL );
-
-/* Report an error if an in appropriate number of argument Regions were 
-   supplied. */
-      if( spaceid == UNION_ID ) {
-         if( nreg < 2 && astOK ){
-            astError( AST__BADIN, "astRead(StcsChan): Less than two "
-                      "CoordinateAreas found within a 'Union' element in an "
-                      "STC-S description: '%s'.", status, 
-                      ContextFragment( con, &fbuf, status ) );
-         } 
-
-      } else if( spaceid == INTERSECTION_ID ) {
-         if( nreg < 2 && astOK ){
-            astError( AST__BADIN, "astRead(StcsChan): Less than two "
-                      "CoordinateAreas found within an 'Intersection' element "
-                      "in an STC-S description: '%s'.", status, 
-                      ContextFragment( con, &fbuf, status ) );
-         } 
-
-      } else if( spaceid == DIFFERENCE_ID ) {
-         if( nreg != 2 && astOK ){
-            astError( AST__BADIN, "astRead(StcsChan): %d CoordinateArea(s) "
-                      "found within a 'Difference' element in an STC-S "
-                      "description: '%s'.", status, nreg, 
-                      ContextFragment( con, &fbuf, status ) );
-         } 
-
-
-      } else if( spaceid == NOT_ID ) {
-         if( nreg != 1 && astOK ){
-            astError( AST__BADIN, "astRead(StcsChan): %d CoordinateAreas "
-                      "found within a 'Not' element in an STC-S description: "
-                      "'%s'.", status, nreg, 
-                      ContextFragment( con, &fbuf, status ) );
-         } 
-
-/* Report an error for unknown spaceid values */
-      } else if( astOK ) {
-         astError( AST__INTER, "astRead(StcsChan): Illegal 'spaceid' value "
-                   "passed to function ReadSpaceArgs (internal AST "
-                   "programming error).", status );
-      }
-   }
-
-/* Free resources */
-   if( prop ) prop = astFree( prop );
-
-/* Return a pointer to the next word to be interpreted. */
-   return word;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a StcsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     StcsChan member function (over-rides the astSetAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function assigns an attribute value for a StcsChan, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstStcsChan *this;          /* Pointer to the StcsChan structure */
-   int ival;                   /* Integer attribute value */
-   int len;                    /* Length of setting string */
-   int nc;                     /* Number of characters read by "astSscanf" */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* StcsArea. */
-/* --------- */
-   if ( nc = 0,
-               ( 1 == astSscanf( setting, "stcsarea= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetStcsArea( this, ival );
-
-/* StcsCoords. */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "stcscoords= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetStcsCoords( this, ival );
-
-/* StcsProps. */
-/* ----------- */
-   } else if ( nc = 0,
-               ( 1 == astSscanf( setting, "stcsprops= %d %n", &ival, &nc ) )
-               && ( nc >= len ) ) {
-      astSetStcsProps( this, ival );
-
-/* StcsIndent */
-/* ----------*/
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "stcsindent= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetStcsIndent( this, ival );
-
-/* StcsLength */
-/* ----------*/
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "stcslength= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetStcsLength( this, ival );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetUnc( AstRegion *reg1, AstRegion *reg2, AstFrame *frm, 
-                    int is_skyframe, double scale, double *error, int nax, 
-                    int *status ){
-/*
-*  Name:
-*     SetUnc
-
-*  Purpose:
-*     Store an uncertainty Box with a supplied Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void SetUnc( AstRegion *reg1, AstRegion *reg2, AstFrame *frm, 
-*                  int is_skyframe, double scale, double *error, int nax, 
-*                  int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function creates a new Box with dimensions specified by the
-*     values in the "error" array, centred on a representative position
-*     within one of the supplied Regions, and then stores the Box as the
-*     uncertainty Region within both the supplied Regions. 
-
-*  Parameters:
-*     reg1
-*        Pointer to a Region to which the error values relate.
-*     reg2
-*        Pointer to another Region to which the error values relate.
-*     frm
-*        Pointer to the Frame encapsulated by both Regions.
-*     is_skyframe
-*        Should be non-zero if "frm" is a SkyFrame.
-*     scale
-*        A scale factor to apply to the error values before using them.
-*     error
-*        Pointer to an array of RMS error values, one for each axis in 
-*        "frm". These are modified on exit. For a SkyFrame, both values
-*        (including the longitude axis value) should be given as an 
-*        arc-distance. This function will convert the arc-distance to
-*        a longitude increment using a representative latitude for the 
-*        region.
-*     nax
-*        The numner of axes in "frm". 
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstBox *unc;           /* Uncertainty box */
-   double dist;           /* Diagonal length of Region bounding box */
-   double lbnd[ 6 ];      /* Lower bounds of Region bounding box */
-   double spos1[ 6 ];     /* A representative position in the Region */
-   double spos2[ 6 ];     /* A second position in the Region */
-   double ubnd[ 6 ];      /* Upper bounds of Region bounding box */
-   int i;                 /* Axis index */
-
-/* Check the global error status. Also check an error value was supplied,
-   and at least one of the Region pointers is not NULL. */
-   if ( !astOK || error[ 0 ] == AST__BAD || ( !reg1 && !reg2 ) ) return;
-
-/* We need a representative position within the region. First get the
-   coordinates at opposite corners of the region bounding box. */
-   astRegBaseBox( reg1 ? reg1 : reg2, lbnd, ubnd );
-
-/* Find the diagonal length of the bounding box. */
-   dist = astDistance( frm, lbnd, ubnd );
-
-/* Offset away from one corner towards the other by half the diagonal
-   length. The resulting position returned in spos1 is our representative
-   position for the region. */
-   astOffset( frm, lbnd, ubnd, dist/2, spos1 );
-
-/* Scale the error values */
-   for( i = 0; i < nax; i++ ) error[ i ] *= scale;
-
-/* If the region is defined within a SkyFrame, the supplied longitude 
-   error value will be an arc-distance value. But we need a longitude
-   increment to create an uncertainty Region, so do the conversion. */
-   if( is_skyframe ) {
-
-/* Offset away from the representative position found above along the 
-   first (i.e. longitude) axis by an arc-distance given by the Error 
-   value. */
-      (void) astOffset2( frm, spos1, AST__DPIBY2, error[ 0 ], spos2 );   
-
-/* Find the positive axis increment along the first axis. */
-      error[ 0 ] = astAxDistance( frm, 1, spos1[ 0 ], spos2[ 0 ] );
-      if( error[ 0 ] != AST__BAD ) error[ 0 ] = fabs( error[ 0 ] );
-   }
-
-/* The uncertainty Region will be a Box centred at the representative 
-   position found above. Modify the "error" array to hold the corner  
-   axis values. */
-   for( i = 0; i < nax; i++ ) error[ i ] += spos1[ i ];
-
-/* Create the box, and store it as the uncertainty Region in the supplied
-   Region. */
-   unc = astBox( frm, 0, spos1, error, NULL, " ", status );
-   if( reg1 ) astSetUnc( reg1, unc );
-   if( reg2 ) astSetUnc( reg2, unc );
-
-/* Free resources. */
-   unc = astAnnul( unc );
-}
-
-static AstPointList *SinglePointList( AstFrame *frm, double *pos, 
-                                      AstRegion *unc, int *status){
-/*
-*  Name:
-*     SinglePointList
-
-*  Purpose:
-*     Create a PointList holding a single point.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstPointList *SinglePointList( AstFrame *frm, double *pos, 
-*                                    AstRegion *unc, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function creates a new PointList holding a single supplied
-*     position.
-
-*  Parameters:
-*     frm
-*        Pointer to the Frame in which the PointList is defined. 
-*     pos 
-*        Array holding the position. The length of this array must equal
-*        the number of axes in "frm".
-*     unc
-*        Pointer to an uncertainty Region to associate with the new
-*        PointList, or NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new PointList. NULL is returned if an error has 
-*     already occurred, of if this function fails for any reason.
-*/
-
-/* Local Variables: */
-   AstPointList *result;   /* Returned pointer. */
-   AstPointSet *pset;      /* PointSet holding axis values */
-   double **ptr;           /* Pointer to PointSet data arrays */
-   int i;                  /* Axis index */
-   int nax;                /* Number of axes */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get he number of axes. */
-   nax = astGetNaxes( frm );
-
-/* Create a PointSet to hold the supplied point, and get a pointer to its
-   data arrays. */
-   pset = astPointSet( 1, nax, "", status );
-   ptr = astGetPoints( pset );
-   if( astOK ) {
-
-/* Copy the supplied axis values into the PointSet data arrays. */
-      for( i = 0; i < nax; i++ ) ptr[ i ][ 0 ] = pos[ i ];
-
-/* Create the PointList. */
-      result = astPointList( frm, pset, unc, "", status );
-   }
-
-/* Free resources */
-   pset = astAnnul( pset );
-
-/* Return the result. */
-   return result;
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-*  Name:
-*     SinkWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C StcsChan sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-*  Class Membership:
-*     StcsChan member function.
-
-*  Description:
-*     This function invokes the sink function whose pointer is
-*     supplied in order to write an output line to an external data
-*     store.
-
-*  Parameters:
-*     sink
-*        Pointer to a sink function, whose single parameter is a
-*        pointer to a const, null-terminated string containing the
-*        text to be written, and which returns void. This is the form
-*        of StcsChan sink function employed by the C language interface
-*        to the AST library.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the sink function. */
-   ( *sink )( line );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-*  Name:
-*     SourceWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C StcsChan source function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     char *SourceWrap( const char *(* source)( void ), int *status )
-
-*  Class Membership:
-*     StcsChan member function.
-
-*  Description:
-*     This function invokes the source function whose pointer is
-*     supplied in order to read the next input line from an external
-*     data store. It then returns a pointer to a dynamic string
-*     containing a copy of the text that was read.
-
-*  Parameters:
-*     source
-*        Pointer to a source function, with no parameters, that
-*        returns a pointer to a const, null-terminated string
-*        containing the text that it read. This is the form of StcsChan
-*        source function employed by the C language interface to the
-*        AST library.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated, null terminated string
-*     containing a copy of the text that was read. This string must be
-*     freed by the caller (using astFree) when no longer required.
-*
-*     A NULL pointer will be returned if there is no more input text
-*     to read.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   const char *line;             /* Pointer to input line */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
-   pointer to the resulting string. */
-   line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
-   resulting pointer. */
-   if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
-   return result;
-}
-
-static int SpaceId( const char *word, int *status ){
-/*
-*  Name:
-*     SpaceId
-
-*  Purpose:
-*     Return the integer identifier for a given textual space identifier.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     int SpaceId( const char *word, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function returns an integer identifier for the given space
-*     identifier.
-
-*  Parameters:
-*     word
-*        The word holding the textual space identifier.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The integer space identifier, or NULL_ID if the supplied word was
-*     not a known space identifier.
-
-*/
-
-
-/* Local Variables: */
-   int spaceid;            /* Returned identifier */
-
-/* Check inherited status */
-   if( !astOK ) return NULL_ID;
-
-   if( astChrMatch( word, "PositionInterval" ) ) {
-      spaceid = POSITION_INTERVAL_ID;
-
-   } else if( astChrMatch( word, "AllSky" ) ) {
-      spaceid = ALLSKY_ID;
-
-   } else if( astChrMatch( word, "Circle" ) ) {
-      spaceid = CIRCLE_ID;
-
-   } else if( astChrMatch( word, "Ellipse" ) ) {
-      spaceid = ELLIPSE_ID;
-
-   } else if( astChrMatch( word, "Box" ) ) {
-      spaceid = BOX_ID;
-
-   } else if( astChrMatch( word, "Polygon" ) ) {
-      spaceid = POLYGON_ID;
-
-   } else if( astChrMatch( word, "Convex" ) ) {
-      spaceid = CONVEX_ID;
-
-   } else if( astChrMatch( word, "Union" ) ) {
-      spaceid = UNION_ID;
-
-   } else if( astChrMatch( word, "Intersection" ) ) {
-      spaceid = INTERSECTION_ID;
-
-   } else if( astChrMatch( word, "Difference" ) ) {
-      spaceid = DIFFERENCE_ID;
-
-   } else if( astChrMatch( word, "Not" ) ) {
-      spaceid = NOT_ID;
-
-   } else if( astChrMatch( word, "Position" ) ) {
-      spaceid = POSITION_ID;
-
-   } else {
-      spaceid = NULL_ID;
-   }
-
-/* Return the integer space identifier. */
-   return spaceid;
-}
-
-static void StoreTimeProp( AstKeyMap *props, AstTimeFrame *frm, 
-                           const char *key, double value, int *status ){
-/*
-*  Name:
-*     StoreTimeProp
-
-*  Purpose:
-*     Store a time value as an STC-S property, using the existing format.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void StoreTimeProp( AstKeyMap *props, AstTimeFrame *frm, 
-*                         const char *key, double value, int *status )
-
-*  Class Membership:
-*     StcsChan member function.
-
-*  Description:
-*     This function formats the supplied time value and stores it in 
-*     the "props" KeyMap, using the supplied key name. If the KeyMap
-*     already contains an entry for the given key, the new value is
-*     written using the same format. Otherwise, the new value is written
-*     as an ISO date and time string.
-
-*  Parameters:
-*     props
-*        Pointer to the KeyMap in which to store the time value.
-*     frm
-*        Pointer to a TimeFrame that can be used to format the time value.
-*     key
-*        Pointer to a string holding the property name associated with
-*        the time value.
-*     value
-*        The time value, in the system described by "frm".
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstFrame *fmtfrm;    /* Frame defining Format/System for formatted value */
-   AstFrame *fs;        /* FrameSet connecting Frames */
-   const char *fmttxt;  /* Formatted text */
-   const char *oldval;  /* Pointer to old formatted time value */
-   const char *p;       /* Pointer to next character in formatted value */
-   double fmtval;       /* The time value in the formatting system */
-   int ndp;             /* Number of decimal places in formatted value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* We want a TimeFrame (fmtfrm) that describes how to format the time 
-   value. If the Format attribute of the supplied TimeFrame has been 
-   set, use it (and the current System). So just take a clone of the 
-   supplied frame pointer. */
-   if( astTestFormat( frm, 0 ) ) {
-      fmtfrm = astClone( frm );
-
-/* If the Format attribute has not been set, we create a copy of the
-   supplied TimeFrame, and set its System and Format attributes to 
-   produce the required format. */
-   } else {
-      fmtfrm = astCopy( frm );
-
-/* If the KeyMap contains an entry for the specified key, determine the 
-   format of the time string it contains. */
-      if( astMapGet0C( props, key, &oldval ) && oldval ) {
-
-/* See how many digits there are after the decimal place */
-         p = strchr( oldval, '.' );
-         ndp = 0;
-         if( p ) {
-            while( *(++p) ) {
-               if( isdigit( *p ) ) {
-                  ndp++;
-               } else {
-                  break;
-               }
-            }
-         }
-
-/* If the string starts with "JD", the time is formatted as a numerical
-   Julian date. */
-         if( !strncmp( oldval, "JD", 2 ) ) {
-            astSetSystem( fmtfrm, AST__JD );
-            if( ndp > 0 ) {
-               astSet( fmtfrm, "Format=JD %%.%df", status, ndp );
-            } else {
-               astSetFormat( fmtfrm, 0, "JD %d" );
-            }
-
-/* If the string starts with "MJD", the time is formatted as a numerical
-   Modified Julian date. */
-         } else if( !strncmp( oldval, "MJD", 3 ) ) {
-            astSetSystem( fmtfrm, AST__MJD );
-            if( ndp > 0 ) {
-               astSet( fmtfrm, "Format=MJD %%.%df", status, ndp );
-            } else {
-               astSetFormat( fmtfrm, 0, "MJD %d" );
-            }
-
-/* Otherwise, the current word should be an ISO date. See how many
-   decimal paces in the seconds field there are (if any). */
-         } else {
-            astSet( fmtfrm, "Format=iso.%dT", status, ndp );
-         }
-
-/* If the KeyMap does not contain an entry for the specified key, an
-   ISO date/time string with 1 decimal place in the seconds field 
-   is used. */
-      } else {
-         astSetFormat( fmtfrm, 0, "iso.1T" );
-      }
-   }
-
-/* Ensure the displayed value is an abolute value. */
-   astClearTimeOrigin( fmtfrm );
-
-/* Convert the supplied time value into the required system. */
-   fs = astConvert( frm, fmtfrm, "" );   
-   astTran1( fs, 1, &value, 1, &fmtval );
-
-/* Format the value. */
-   fmttxt = astFormat( fmtfrm, 0, fmtval );
-
-/* Store it in the KeyMap. */
-   astMapPut0C( props, key, fmttxt, NULL );
-
-/* Free resources. */
-   fs = astAnnul( fs );
-   fmtfrm = astAnnul( fmtfrm );
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a StcsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     StcsChan member function (over-rides the astTestAttrib protected
-*     method inherited from the Object class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a StcsChan's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstStcsChan *this;            /* Pointer to the StcsChan structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-   if ( !strcmp( attrib, "stcsarea" ) ) {
-      result = astTestStcsArea( this );
-
-   } else if ( !strcmp( attrib, "stcscoords" ) ) {
-      result = astTestStcsCoords( this );
-
-   } else if ( !strcmp( attrib, "stcsprops" ) ) {
-      result = astTestStcsProps( this );
-
-   } else if ( !strcmp( attrib, "stcsindent" ) ) {
-      result = astTestStcsIndent( this );
-
-   } else if ( !strcmp( attrib, "stcslength" ) ) {
-      result = astTestStcsLength( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int Write( AstChannel *this_channel, AstObject *object, int *status ) {
-/*
-*  Name:
-*     Write
-
-*  Purpose:
-*     Write an Object to a StcsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     int Write( AstChannel *this, AstObject *object, int *status )
-
-*  Class Membership:
-*     StcsChan member function (over-rides the astWrite method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function writes an Object to a StcsChan.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     object
-*        Pointer to the Object which is to be written.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of Objects written to the StcsChan by this invocation of 
-*     astWrite.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the AST error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;            /* AREA Frame */
-   AstFrameSet *fs;          /* FrameSet connecting AREA and COORDS */
-   AstKeyMap *props;         /* A KeyMap holding the STC-S properties list */
-   AstMapping *map;          /* Mapping connecting AREA and COORDS */
-   AstObject *obj;           /* A temporary Object pointer */
-   AstRegion *area;          /* The Region representing the STC CoordArea */
-   AstRegion *coords;        /* The Region representing the STC Coords */
-   AstRegion *new_coords;    /* COORDS Region mapped into frame of AREA */
-   AstStcsChan *this;        /* Pointer to the StcsChan structure */
-   astDECLARE_GLOBALS;       /* Declare the thread specific global data */
-   const char *class;        /* Pointer to string holding object class */
-   const char *errclass;     /* Type of the failed entry */
-   const char *errname;      /* Name of the failed entry */
-   const char *method;       /* Pointer to string holding calling method */
-   const char *wantclass;    /* The expected type */
-   int ret;                  /* Number of objects read */
-
-/* Initialise. */
-   ret = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_channel);
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_channel;
-
-/* Store the calling method, and object class. */
-   method = "astWrite";
-   class = astGetClass( this );
-
-/* Initialise */
-   area = NULL;
-   coords = NULL;
-   props = NULL;
-
-/* If the supplied Object is a Region, we will use it to define the AREA
-   properties. */
-   if( astIsARegion( object ) ) {
-      area = (AstRegion *) astClone( object );
-
-/* If the supplied Object is a KeyMap... */
-   } else if( astIsAKeyMap( object ) ) {
-      errname = NULL;
-      wantclass = NULL;
-      errclass = NULL;
-
-/* If the supplied KeyMap contains an entry with key "AREA", and if it is 
-   a Region, use it to define the AREA properties. */
-      if( astMapGet0A( (AstKeyMap *) object, "AREA", &obj ) ) {
-         if( astIsARegion( obj ) ) {         
-            area = (AstRegion *) obj;
-         } else {
-            wantclass = "Region";
-            errclass = astGetClass( obj );
-            errname = "AREA";
-            obj = astAnnul( obj );
-         }
-      }
-
-/* If the supplied KeyMap contains an entry with key "COORDS", and if it is 
-   a Region, use it to define the COORDS properties. */
-      if( astMapGet0A( (AstKeyMap *) object, "COORDS", &obj ) ) {
-         if( astIsARegion( obj ) ) {         
-            coords = (AstRegion *) obj;
-         } else {
-            wantclass = "Region";
-            errclass = astGetClass( obj );
-            errname = "COORDS";
-            obj = astAnnul( obj );
-         }
-      }
-
-/* If the supplied KeyMap contains an entry with key "PROPS", and if it is 
-   a KeyMap, use it to define values for the properties that cannot be
-   determined from the supplied Regions (Resolution, PixSize, etc). */
-      if( astMapGet0A( (AstKeyMap *) object, "PROPS", &obj ) ) {
-         if( astIsAKeyMap( obj ) ) {         
-            props = (AstKeyMap *) obj;
-         } else {
-            wantclass = "KeyMap";
-            errclass = astGetClass( obj );
-            errname = "PROPS";
-            obj = astAnnul( obj );
-         }
-      }
-
-/* If the supplied KeyMap contains an entry with any of the keys
-   "TIME_PROPS", "SPACE_PROPS", "SPECTRAL_PROPS" or "REDSHIFT_PROPS",
-   use the supplied KeyMap to define values for all properties. */
-      if( astMapGet0A( (AstKeyMap *) object, "TIME_PROPS", &obj ) ||
-          astMapGet0A( (AstKeyMap *) object, "SPACE_PROPS", &obj ) ||
-          astMapGet0A( (AstKeyMap *) object, "SPECTRAL_PROPS", &obj ) ||
-          astMapGet0A( (AstKeyMap *) object, "REDSHIFT_PROPS", &obj ) ) {
-         props = astClone( object );
-      }
-
-/* Report an error if the Object in the keymap has the wrong type. */
-      if( errname && astOK ) {
-         astAddWarning( this, 1, "The supplied KeyMap contains a %s "
-                        "called '%s'. But '%s' should be a %s "
-                        "(programming error).", method, status, 
-                        errclass, errname, errname, wantclass );
-      }
-
-/* Report an error if the keymap contains none of the above. */
-      if( !area && !coords && !props && astOK ) {
-         astAddWarning( this, 1, "The supplied KeyMap does not "
-                        "contains anything that can be written out "
-                        "through a %s.", method, status, class );
-      }
-
-/* If both COORDS and AREA were supplied, ensure they are in the same
-   Frame by mapping the COORDS Region into the Frame of the AREA Region. */
-      if( area && coords ) {
-         fs = astConvert( coords, area, " " );
-         if( fs ) {
-            map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-            frm = astGetFrame( fs, AST__CURRENT );
-
-            new_coords = astMapRegion( coords, map, frm );
-
-            map = astAnnul( map );
-            frm = astAnnul( frm );
-            coords = astAnnul( coords );
-            fs = astAnnul( fs );
-
-            coords = new_coords;
-
-         } else if( astOK ){
-            astAddWarning( this, 1, "Cannot convert between the co-ordinate "
-                           "frame of the COORDS Region and the co-ordinate "
-                           "frame of the AREA Region.", method, status );
-         }
-      }
-
-/* Report an error if the supplied object is neither a KeyMap nor a
-   Region. */
-   } else if( astOK ) {
-      astAddWarning( this, 1, "Failed to write out a %s through a %s. "
-                     "The %s class cannot be used to write out a %s.", 
-                     method, status, astGetClass( object ), class, class,
-                     astGetClass( object ) );
-   }
-
-   
-/* If we do not have a KeyMap in which to store the STC-S properties,
-   create one now. */
-   if( astOK ) {
-      if( ! props ) props = astKeyMap ( " ", status );
-
-/* Determine the set of STC-S properties that describe the COORDS Region,
-   and add them into the properties keymap, over-writing any values for the
-   same properties that are already in the props keymap. */
-      ret = coords ? WriteRegion( this, coords, props, status ) : 1;
-
-/* Determine the set of STC-S properties that describe the AREA Region,
-   and add them into the properties keymap, over-writing any values for the
-   same properties that are already in the props keymap. NB, we need to
-   do AREA after COORDS so that the sub-phrase identifier implied by the
-   AREA is used in preference to that implied by the COORDS. */
-      if( area && ret ) ret = WriteRegion( this, area, props, status );
-
-/* Convert the properties list into text and write it out through the
-   parent Channel's sink function. */
-      if( ret ) WriteProps( this, props, status );
-   }
-
-/* Free resources. */
-   if( area ) area = astAnnul( area );
-   if( coords ) coords = astAnnul( coords );
-   if( props ) props = astAnnul( props );
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) ret = 0;
-
-/* Return the answer. */
-   return ret;
-}
-
-static void WriteProps( AstStcsChan *this, AstKeyMap *props, int *status ){
-/*
-*  Name:
-*     WriteProps
-
-*  Purpose:
-*     Write out a set of STC-S properties to the sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     void WriteProps( AstStcsChan *this, AstKeyMap *props, int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function converts the STC-S properties supplied in a KeyMap
-*     into text, and writes the text out through the sink function associated
-*     with the parent Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan.
-*     props
-*        Pointer to the KeyMap holding the STC-S properties.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstKeyMap *spprops;     /* Sub-phrase properties */
-   AstObject *obj;         /* Generic Object pointer */
-   char *line;             /* Dynamically allocated buffer for output text */
-   const char *id;         /* Sub-phrase identifier */
-   const char *prefix;     /* Prefix for property value */
-   int nc;                 /* Number of characters in "line" */
-   int pretty;             /* Include new-lines and indentation in returned text? */
-   int crem;               /* Character remaining on current output line */
-   int linelen;            /* Line length */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise things. */
-   nc = 0;
-   line = NULL;
-
-/* See if indentation and new-lines are to be added to the output text to
-   make it look pretty. */
-   pretty = astGetStcsIndent( this );
-
-/* If so, get the line length to use, and initialise the number of
-   remaining characters in the current output line. */
-   if( pretty ) {
-      linelen = astGetStcsLength( this );
-   } else {
-      linelen = 0;
-   }
-   crem = linelen;
-
-/* Add each word in the time sub-phrase into the output buffer, in the
-   order defined by the STC-S standard. */
-   if( astMapGet0A( props, "TIME_PROPS", &obj ) ) {
-      spprops = (AstKeyMap *) obj;
-
-      line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
-      astMapGet0C( spprops, "ID", &id );
-      
-      line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "TIMESCALE", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "START", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "STOP", NULL, line, &nc, &crem, linelen, status );
-
-      prefix = !astChrMatch( id, "Time" ) ? "Time " : NULL;
-      line = AddItem( this, spprops, "TIME", prefix, line, &nc, &crem, linelen, status );
-
-      line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
-      spprops = astAnnul( spprops );
-
-/* Write out the time sub-phrase text through the Channel sink function. */
-      if( pretty && astChrLen( line ) ) {
-         astPutNextText( this, line );
-         nc = 0;
-         crem = linelen;
-      }
-   }
-
-/* Add each word in the space sub-phrase into the output buffer, in the
-   order defined by the STC-S standard. */
-   if( astMapGet0A( props, "SPACE_PROPS", &obj ) ) {
-      spprops = (AstKeyMap *) obj;
-
-      line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
-      astMapGet0C( spprops, "ID", &id );
-      
-      line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "FRAME", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "FLAVOUR", NULL, line, &nc, &crem, linelen, status );
-
-      line = PutRegionProps( this, spprops, id, (pretty ? 0 : -1), line, &nc, 
-                             &crem, linelen, status );
-
-      prefix = !astChrMatch( id, "Position" ) ? "Position " : NULL;
-      line = AddItem( this, spprops, "POSITION", prefix, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "SIZE", "Size ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
-      spprops = astAnnul( spprops );
-
-/* Write out the spatial sub-phrase text through the Channel sink function. */
-      if( pretty && astChrLen( line ) ) {
-         astPutNextText( this, line );
-         nc = 0;
-         crem = linelen;
-      }
-   }
-
-/* Add each word in the spectral sub-phrase into the output buffer, in the
-   order defined by the STC-S standard. */
-   if( astMapGet0A( props, "SPECTRAL_PROPS", &obj ) ) {
-      spprops = (AstKeyMap *) obj;
-
-      line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
-      astMapGet0C( spprops, "ID", &id );
-      
-      line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "LOLIMIT", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "HILIMIT", NULL, line, &nc, &crem, linelen, status );
-
-      prefix = !astChrMatch( id, "Spectral" ) ? "Spectral " : NULL;
-      line = AddItem( this, spprops, "SPECTRAL", prefix, line, &nc, &crem, linelen, status );
-
-      line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
-      spprops = astAnnul( spprops );
-
-/* Write out the spectral sub-phrase text through the Channel sink function. */
-      if( pretty && astChrLen( line ) ) {
-         astPutNextText( this, line );
-         nc = 0;
-         crem = linelen;
-      }
-   }
-
-/* Add each word in the redshift sub-phrase into the output buffer, in the
-   order defined by the STC-S standard. */
-   if( astMapGet0A( props, "REDSHIFT_PROPS", &obj ) ) {
-      spprops = (AstKeyMap *) obj;
-
-      line = AddItem( this, spprops, "ID", NULL, line, &nc, &crem, linelen, status );
-      astMapGet0C( spprops, "ID", &id );
-      
-      line = AddItem( this, spprops, "FILLFACTOR", "fillfactor ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "REFPOS", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "TYPE", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "DOPPLERDEF", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "LOLIMIT", NULL, line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "HILIMIT", NULL, line, &nc, &crem, linelen, status );
-
-      prefix = !astChrMatch( id, "Redshift" ) ? "Redshift " : NULL;
-      line = AddItem( this, spprops, "REDSHIFT", prefix, line, &nc, &crem, linelen, status );
-
-      line = AddItem( this, spprops, "UNIT", "unit ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "ERROR", "Error ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "RESOLUTION", "Resolution ", line, &nc, &crem, linelen, status );
-      line = AddItem( this, spprops, "PIXSIZE", "PixSize ", line, &nc, &crem, linelen, status );
-
-      spprops = astAnnul( spprops );
-
-/* Write out the redshift sub-phrase text through the Channel sink function. */
-      if( pretty && astChrLen( line ) ) {
-         astPutNextText( this, line );
-         nc = 0;
-         crem = linelen;
-      }
-   }
-
-/* Write out any remaining text through the Channel sink function. */
-   if( nc && astChrLen( line ) ) astPutNextText( this, line );
-
-/* Free resources. */
-   line = astFree( line );
-
-}
-
-static int WriteRegion( AstStcsChan *this, AstRegion *reg, AstKeyMap *props, 
-                        int *status ){
-/*
-*  Name:
-*     WriteRegion
-
-*  Purpose:
-*     Convert a Region into a set of STC-S properties and store them in a
-*     KeyMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     int WriteRegion( AstStcsChan *this, AstRegion *reg, AstKeyMap *props, 
-*                      int *status )
-
-*  Class Membership:
-*     StcsChan member function 
-
-*  Description:
-*     This function attempts to convert the supplied Region nto a set of
-*     STC-S properties, and stores them in the supplied KeyMap.
-
-*  Parameters:
-*     this
-*        Pointer to the StcsChan being used.
-*     reg
-*        Pointer to the region to be converted.
-*     props
-*        Pointer to the KeyMap in which to store the STC-S properties.
-*        On exit, each STC-S sub-phrase has an entry in this KeyMap, 
-*        and each of these entries has a value that is another KeyMap
-*        holding the properties for the sub-phrase.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the conversion was succesful, and
-*     zero is returned otherwise.
-*/
-
-/* Local Variables: */
-   AstFrame *efrm;         /* Pointer to encapsulated Frame */
-   AstFrame *pfrm;         /* Pointer to primary Frame cntaining an axis */
-   AstFrame *spfrm;        /* The sub-phrase Frame */
-   AstKeyMap *spprops;     /* Sub-phrase properties */
-   AstMapping *map;        /* Base->current Region Mapping */
-   AstMapping *sreg;       /* Simplified Region */
-   AstObject *obj;         /* Generic object pointer */
-   AstRegion *spreg;       /* The sub-phrase Region */
-   AstRegion *treg;        /* Temporary Region pointer */
-   AstRegion *unc;         /* Uncertainty region */
-   AstRegion *unca;        /* Adaptive uncertainty region */
-   AstStdOfRestType sor;   /* StdOfRest attribute value */
-   AstSystemType sys;      /* System attribute value */
-   char *prop;             /* Formatted property string */
-   char *unit1;            /* Pointer to string holding first axis unit */
-   char buf[ 100 ];        /* Buffer for formatted values */
-   char fmt[ 10 ];         /* Buffer for format specifier */
-   const char *class;      /* Class name */
-   const char *dom;        /* Domain name */
-   const char *dopdef;     /* DopplerDef value */
-   const char *flavour;    /* The STC-S flavour for the space frame */
-   const char *q;          /* Pointer to next character */
-   const char *tfrm;       /* STC-S string for Frame */
-   const char *tsor;       /* STC-S string for RefPos */
-   const char *tts;        /* Time scale label */
-   const char *type;       /* Redshift Type value */
-   const char *unit;       /* Unit string */
-   double *pcen;           /* Pointer to Circle or ellipse centre */
-   double equinox;         /* The required equinox value */
-   double error;           /* Axis error value */  
-   double fill;            /* Fill factor */
-   double lbnd[ 3 ];       /* Region lower bounds */
-   double lim;             /* Unlimited bounds value */
-   double p1[ 2 ];         /* End point of error line */
-   double scale;           /* Factor for scaling Region values into required units */
-   double ubnd[ 3 ];       /* Region upper bounds */
-   int allthesame;         /* Do all axes have the same units? */
-   int defdigs;            /* Default number of digits */
-   int defs;               /* Include default values in output STC-S? */
-   int i;                  /* Loop index */
-   int issky;              /* Do the space axes form a SkyFrame? */
-   int nax;                /* The number of axes */
-   int nc;                 /* Number of characters in "prop" string */
-   int nspace;             /* Number of space axes */
-   int ok;                 /* Can the Region be written out? */
-   int pax;                /* Index of axis in primary Frame */
-   int redax;              /* The index of the redshift axis */
-   int retain_units;       /* Retain the units/system in properties KeyMap? */
-   int spaceax[ 3 ];       /* Indicies of the space axes */
-   int spaceid;            /* Code for space sub-phrase identifier */
-   int specax;             /* The index of the spectral axis */
-   int timeax;             /* Index of time axis */
-   int ts;                 /* Time scale identifier */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise things to avoid comiler warnings. */
-   sys = AST__BADSYSTEM;
-
-/* Assume we can do the conversion. */
-   ok = 1;
-
-/* See if default values are to be included in the output. */
-   defs = ( astGetFull( this ) > 0 );
-
-/* STC-S requires that the spatial shape (circle, box. etc) refers to 
-   the coordinate system described by the STC-S. This is not quite like 
-   AST, in that the AST class type (Circle, Box, etc) defines the
-   shape of the region in the base Frame, rather than the current Frame.
-   So we can only write the Region out using STC-S if the shape in the
-   current Frame is the same as the shape in the base Frame. This is the
-   case if the simplified Mapping connecting base and current Frames is 
-   a UnitMap. Get the base->current Mapping from the Region. */
-   map = astRegMapping( reg );
-
-/* If it is not UnitMap, see if simplifying the whole Region results in
-   the base->current Mapping in the simplified Region being a UnitMap. */
-   if( !astIsAUnitMap( map ) ) {
-      map = astAnnul( map );
-      sreg = astSimplify( reg );
-      map = astRegMapping( sreg );
-
-/* If it is still not UnitMap, we cannot write out the region. */
-      if( !astIsAUnitMap( map ) ) {
-         astAddWarning( this, 1, "The supplied Region does not have a "
-                        "supported shape within its current coordinate "
-                        "system.", "astWrite", status );
-         ok = 0;
-      } 
-
-   } else {
-      sreg = astClone( reg );
-   }
-   map = astAnnul( map );
-
-/* Store a safe value that can be used to test unbounded axes. */
-   lim = sqrt( DBL_MAX );
-
-/* First job is to identify the Time, Space, Spectral and Redshift axes
-   in the supplied Region. 
-   ------------------------------------------------------------------- */
-
-/* Initialise things. */
-   timeax = -1;
-   nspace = 0;
-   issky = 0;
-   specax = -1;
-   redax = -1;
-   prop = NULL;
-
-/* Get a pointer to the Frame encapsulated by the Region. */
-   efrm = astRegFrame( sreg );
-
-/* Loop round all axes. */
-   nax = astGetNaxes( sreg );
-   for( i = 0; i < nax; i++ ) {
-
-/* Get the primary Frame that defines the current axis of the Region. */
-      astPrimaryFrame( efrm, i, &pfrm, &pax );
-
-/* Get its class and domain. */
-      class = astGetClass( pfrm );
-      dom = astGetDomain( pfrm );
-      if( astOK ) {
-
-/* The time axis is described by a TimeFrame with any domain. */
-         if( !strcmp( class, "TimeFrame" ) ) {
-            if( timeax == -1 ) {
-               timeax = i;
-            } else {
-               astAddWarning( this, 1, "More than one time axis found. "
-                              "Extra axis (axis %d) will be ignored.",
-                              "astWrite", status, i + 1 );
-            }
-
-/* The space axes are described by a SkyFrame or a basic Frame. If a
-   mixture of both types are found, report a warning and ignore the later
-   axes. */
-         } else if( !strcmp( class, "SkyFrame" ) ) {
-            if( issky || nspace == 0 ) {
-               if( nspace < 2 ) {
-                  spaceax[ nspace++ ] = i;
-                  issky = 1;
-               } else {
-                  astAddWarning( this, 1, "More than two sky frame axes "
-                                 "found. Extra axis (axis %d) will be ignored.",
-                                 "astWrite", status, i + 1 );
-               }
-
-            } else {
-               astAddWarning( this, 1, "Mixture of basic and sky frame "
-                              "axes found. Sky frame axis %d will be "
-                              "ignored.", "astWrite", status, i + 1 );
-            }
-
-         } else if( !strcmp( class, "Frame" ) ) {
-            if( !issky ) {
-               if( nspace < 3 ) {
-                  spaceax[ nspace++ ] = i;
-               } else {
-                  astAddWarning( this, 1, "More than three basic space frame axes "
-                                 "found. Extra axis (axis %d) will be ignored.",
-                                 "astWrite", status, i + 1 );
-               }
-
-            } else {
-               astAddWarning( this, 1, "Mixture of basic and sky frame "
-                              "axes found. Basic frame axis %d will be "
-                              "ignored.", "astWrite", status, i + 1 );
-            }
-
-/* The spectral axis is described by a SpecFrame with domain SPECTRUM. */
-         } else if( !strcmp( class, "SpecFrame" ) &&
-                    !strcmp( dom, "SPECTRUM" ) ) {
-            if( specax == -1 ) {
-               specax = i;
-            } else {
-               astAddWarning( this, 1, "More than one spectral axis found. "
-                              "Extra axis (axis %d) will be ignored.",
-                              "astWrite", status, i + 1 );
-            }
-
-/* The redshift axis is described by a SpecFrame with domain REDSHIFT. */
-         } else if( !strcmp( class, "SpecFrame" ) &&
-                    !strcmp( dom, "REDSHIFT" ) ) {
-            if( redax == -1 ) {
-               redax = i;
-            } else {
-               astAddWarning( this, 1, "More than one redshift axis found. "
-                              "Extra axis (axis %d) will be ignored.",
-                              "astWrite", status, i + 1 );
-            }
-
-/* Warn about unused axes. */
-         } else {
-            astAddWarning( this, 1, "Could not classify axis %d (class=%s "
-                           "domain=%s). It will be ignored.", "astWrite", status, 
-                           i + 1, class, dom );
-         }
-      }
-
-/* Free resources. */
-      pfrm = astAnnul( pfrm );
-   }
-   efrm = astAnnul( efrm );
-
-/* Set a flag indicating if there is anything to convert. */
-   ok = ok && ( timeax != -1 || nspace > 0 || specax != -1 || redax != -1 );
-
-
-/* Now we have identified the axes, we convert each available STC-S
-   sub-phrase, starting with the time sub-phrase. 
-   ---------------------------------------------------------------- */
-   if( timeax != -1 ) {
-
-/* Create a Region by picking the time axis from the supplied Region. */
-      spreg = astPickAxes( sreg, 1, &timeax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
-      if( !astIsARegion( spreg ) ) {
-         astAddWarning( this, 1, "Cannot determine the region covered by "
-                        "the time axis.", "astWrite", status );
-         ok = 0;
-
-/* Otherwise we add a description of the time sub-phrase to the
-   properties keymap. */
-      } else {
-
-/* Get a pointer to the Region's time phrase property KeyMap, creating
-   one if necessary. */
-         if( astMapGet0A( props, "TIME_PROPS", &obj ) ) {
-            spprops = (AstKeyMap *) obj;
-         } else {
-            spprops = astKeyMap( " ", status );
-            astMapPut0A( props, "TIME_PROPS", spprops, NULL );
-         }
-
-/* Get the Region's fill factor. */
-         fill = astGetFillFactor( spreg );
-
-/* Ensure the TimeFrame represents MJD. If not, take a deep copy (to
-   avoid changing the supplied Region), and set its system to MJD. */
-         if( astGetSystem( spreg ) != AST__MJD ) {
-            treg = astCopy( spreg );
-            (void) astAnnul( spreg );
-            spreg = treg;
-            astSetAdaptive( spreg, 1 );
-            astSetSystem( spreg, AST__MJD );
-         }
-
-/* Get the bounds of the Region (i.e. the time axis coverage). */
-         astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Get a pointer to the time Region's encapsulated Frame. */
-         spfrm = astRegFrame( spreg );
-
-/* Report a warning if the sub-phrase Frame is not a TimeFrame */
-         if( !astIsATimeFrame( spfrm ) ) {
-            ok = 0;
-            astAddWarning( this, 1, "The time sub-phrase in the supplied "
-                           "KeyMap is not described using an AST TimeFrame.",
-                           "astWrite", status );
-
-/* Store properties that are specific to Time moments... */
-         } else if( lbnd[ 0 ] == ubnd[ 0 ] ) {
-            astMapPut0C( spprops, "ID", "Time", NULL );
-            StoreTimeProp( spprops,  (AstTimeFrame *) spfrm, "TIME", lbnd[ 0 ], status );
-            fill = AST__BAD;
-
-/* Store properties that are specific to Time intervals... */
-         } else if( lbnd[ 0 ] > -lim && ubnd[ 0 ] < lim ) {
-            astMapPut0C( spprops, "ID", "TimeInterval", NULL );
-            StoreTimeProp( spprops,  (AstTimeFrame *) spfrm, "START", lbnd[ 0 ], status );
-            StoreTimeProp( spprops,  (AstTimeFrame *) spfrm, "STOP", ubnd[ 0 ], status );
-
-/* Store properties that are specific to Start times... */
-         } else if( lbnd[ 0 ] > -lim ) {
-            astMapPut0C( spprops, "ID", "StartTime", NULL );
-            StoreTimeProp( spprops,  (AstTimeFrame *) spfrm, "START", lbnd[ 0 ], status );
-
-/* Store properties that are specific to Stop times... */
-         } else {
-            astMapPut0C( spprops, "ID", "StopTime", NULL );
-            StoreTimeProp( spprops,  (AstTimeFrame *) spfrm, "STOP", ubnd[ 0 ], status );
-       
-         }
-
-/* Store properties that are common to all time sub-phrase types. First the
-   fill factor. */
-         MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-
-/* Now the time scale. */
-         ts = astGetTimeScale( spfrm );
-         if( ts == AST__TT ) {
-            tts = "TT";
-
-         } else if( ts == AST__TAI ) {
-            tts = "TAI";
-
-         } else if( ts == AST__UTC ) {
-            tts = "UTC";
-
-         } else if( ts == AST__TDB ) {
-            tts = "TDB";
-
-         } else if( ts == AST__TCG ) {
-            tts = "TCG";
-
-         } else if( ts == AST__TCB ) {
-            tts = "TCB";
-
-         } else if( ts == AST__LMST ) {
-            tts = "LST";
-
-         } else {
-            tts = "nil";
-            astAddWarning( this, 1, "Timescale '%s' is unsupported by "
-                           "STC-S.", "astWrite", status, 
-                           astGetC( spfrm, "TimeScale" ) );
-            ok = 0;
-         }
-
-         MapPut0C( spprops, "TIMESCALE", tts, "nil", defs, status );
-
-/* RefPos. The AST TimeFrame class has no reference position, we leave 
-   unchanged any refpos already in the keymap. If there is no refpos in the
-   keymap, we use "TOPOCENTER". */ 
-         if( !astMapHasKey( spprops, "REFPOS" ) ) {
-	    astMapPut0C( spprops, "REFPOS", "TOPOCENTER", NULL ); 
-         }
-
-/* That's it for the time sub-phrase, unless the supplied Region has an
-   explicit (non-default) uncertainty. */
-         unc = astGetUnc( spreg, 0 );
-         if( unc ) {
-
-/* See if the supplied properties KeyMap contains any item that refers to
-   the Unit included in the STC-S description, but which is not updated by
-   this function. If it does, we need to retain any units specified
-   within the KeyMap. */
-            retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
-                             astMapHasKey( spprops, "PIXSIZE" ) ||
-                             astMapHasKey( spprops, "SIZE" ) );
-
-            if( retain_units ) {
-               if( !astMapGet0C( spprops, "UNIT", &unit ) ) unit = "s";
-            } else {
-               unit = "s";
-            }
-
-/* Store the units string */
-            MapPut0C( spprops, "UNIT", unit, "s", defs, status );
-
-/* If necessary, map the uncertainty region into the requied units. Take
-   a deep copy to avoid changing the supplied Region. */
-            if( strcmp( unit, astGetUnit( unc, 0 ) ) ) {
-               unca = astCopy( unc );
-               astSetAdaptive( unca, 0 );
-               astSetUnit( unca, 0, unit );
-            } else {
-               unca = astClone( unc );
-            }            
-
-/* Get the bounds of the uncertainty. */
-            astGetRegionBounds( unca, lbnd, ubnd );
-
-/* The error is half the width of the bounding box. */
-            astMapPut0D( spprops, "ERROR", 0.5*( ubnd[ 0 ] - lbnd[ 0 ] ), NULL );
-
-/* Free resources. */
-            unca = astAnnul( unca );
-            unc = astAnnul( unc );
-         }
-
-/* Free resources. */
-         spfrm = astAnnul( spfrm );
-         spprops = astAnnul( spprops );
-      }
-
-/* Free resources. */
-      spreg = astAnnul( spreg );
-
-   }
-
-
-/* Now convert the space sub-phrase.
-   ---------------------------------------------------------------- */
-   if( nspace > 0 && ok ) {
-
-/* Create a Region by picking the space axes from the supplied Region. */
-      spreg = astPickAxes( sreg, nspace, spaceax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
-      if( ! astIsARegion( spreg ) ) {
-         astAddWarning( this, 1, "Cannot determine the region covered by "
-                        "the space axes.", "astWrite", status );
-         ok = 0;
-
-/* Otherwise we add a description of the space sub-phrase to the
-   properties keymap. */
-      } else {
-
-/* Get a pointer to the Region's space phrase property KeyMap, creating
-   one if necessary. */
-         if( astMapGet0A( props, "SPACE_PROPS", &obj ) ) {
-            spprops = (AstKeyMap *) obj;
-         } else {
-            spprops = astKeyMap( " ", status );
-            astMapPut0A( props, "SPACE_PROPS", spprops, NULL );
-         }
-
-/* If the space frame is a SkyFrame, ensure it refers to a coodinate
-   system that is supported by STC-S. Take a deep copy before changing
-   anything. */
-         if( issky ) {
-            sys = astGetSystem( spreg );
-            if( sys != AST__FK4 &&
-                sys != AST__FK5 &&
-                sys != AST__ICRS &&
-                sys != AST__ECLIPTIC &&
-                sys != AST__GALACTIC &&
-                sys != AST__SUPERGALACTIC &&
-                sys != AST__UNKNOWN ) {
-               treg = astCopy( spreg );
-               (void) astAnnul( spreg );
-               spreg = treg;
-               astSetAdaptive( spreg, 1 );
-               astSetSystem( spreg, AST__ICRS );
-            }
-         }               
-
-/* Get a pointer to the Region's encapsulated Frame. */
-         spfrm = astRegFrame( spreg );
-
-/* If the supplied Region is defined in a SkyFrame, choose the units to
-   use when storing radius, error, etc in the KeyMap. If the props KeyMap
-   already contains a unit specification, we use it. Otherwise we use the
-   default (degrees). AST uses radians internally, so find the scaling 
-   factor. */
-         if( issky ) {
-            if( astMapGet0C( spprops, "UNIT", &unit ) ) {
-               if( !strcmp( unit, "arcmin" ) ) {
-                  scale = AST__DR2D*60.0;
-               } else if( !strcmp( unit, "arcsec" ) ) {
-                  scale = AST__DR2D*3600.0;
-               } else {
-                  unit = "deg";
-                  scale = AST__DR2D;
-               }
-            } else {
-               unit = "deg";
-               scale = AST__DR2D;
-            }
-
-/* Store the units string */
-            MapPut0C( spprops, "UNIT", unit, "deg", defs, status );
-
-/* If the supplied Region is not defined in a SkyFrame, we will arrange
-   that the Region and the KeyMap use the same units, so set a scale 
-   factor of 1.0. */
-         } else {
-            scale = 1.0;
-
-/* See if the supplied properties KeyMap contains any item that refers to
-   the Unit included in the STC-S description, but which is not updated by
-   this function. If it does, we need to retain any units specified
-   within the KeyMap. */
-            retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
-                             astMapHasKey( spprops, "PIXSIZE" ) ||
-                             astMapHasKey( spprops, "SIZE" ) );
-
-/* If so, and if the properties KeyMap already contains a Unit 
-   specification, we convert the Region to the same units. Take a deep 
-   copy of the Region first to avoid modifying the supplied Region. */
-            if( retain_units ) {
-               if( !astMapGet0C( spprops, "UNIT", &unit ) ) unit = "deg";
-
-               treg = astCopy( spreg );
-               (void) astAnnul( spreg );
-               spreg = treg;
-
-               for( i = 0; i < nspace; i++ ) {
-                  astSetUnit( spreg, i, unit );
-
-/* Space frames can have different units on different axes. So look for
-   the start of the next word in the Unit propert. This will be the unit
-   for the next axis. If there are no more words in the Unit property,
-   re-use the last unit value. */
-                  q = unit;
-                  while( *q && !isspace( *q ) ) q++;
-                  while( *q && isspace( *q ) ) q++;
-                  if( *q ) unit = q;                  
-               }
-
-/* If we are not retaining the units specified in the properties KeyMap, we
-   retain the existing Region units instead, and store these units in the
-   properties KeyMap. We also check that these units are supported by
-   STC-S. */
-            } else {
-
-               nc = 0;
-               allthesame = 1;
-               unit1 = NULL;
-
-               for( i = 0; i < nspace; i++ ) {
-                  unit = astGetUnit( spreg, i );
-
-                  if( !unit1 ) {
-                     unit1 = astStore( NULL, unit, strlen( unit ) + 1 );
-                  } else {
-                     if( strcmp( unit, unit1 ) ) allthesame = 0;
-                  }
-
-                  if( strcmp( unit, "deg" ) &&
-                      strcmp( unit, "arcmin" ) &&
-                      strcmp( unit, "arcsec" ) &&
-                      strcmp( unit, "m" ) &&
-                      strcmp( unit, "mm" ) &&
-                      strcmp( unit, "km" ) &&
-                      strcmp( unit, "AU" ) &&
-                      strcmp( unit, "pc" ) &&
-                      strcmp( unit, "kpc" ) &&
-                      strcmp( unit, "Mpc" ) ) {
-                     astAddWarning( this, 1, "Cannot use spatial units '%s'.", 
-                                    "astWrite", status, unit );
-                     ok = 0; 
-                     break;
-                  }                  
-                  prop = astAppendString( prop, &nc, unit );
-                  prop = astAppendString( prop, &nc, " " );
-               }
-
-/* Remove the trailing space, and store the property value in the KeyMap. */
-               if( ! allthesame ) {
-                  prop[ nc - 1 ] = 0;
-                  astMapPut0C( spprops, "UNIT", prop, NULL );
-               } else {
-                  astMapPut0C( spprops, "UNIT", unit1, NULL );
-               }
-
-               unit1 = astFree( unit1 );
-
-            }
-         }
-
-/* Get the fill factor. */
-         fill = astGetFillFactor( spreg );
-
-/* Get the default number of digits. This is only used if the supplied
-   properties KeyMap does not have a value for the item being stored. If
-   it does, the number of digits is inherited form the value int he KeyMap. */
-         defdigs = astGetDigits( spfrm );
-
-/* Store properties that are specific to the particular type of Region. */
-         spaceid = GetRegionProps( this, spreg, spprops, nspace, defdigs,
-                                   scale, issky, status );
-         if( spaceid == NULL_ID ) ok = 0;
-
-/* If the above went OK, store values for the properties that are common
-   to all types of space sub-phrase. */
-         if( ok ) {
-
-/* First the fill factor. */
-            if( spaceid != POSITION_ID ) {
-               MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-            }
-
-/* Now the coordinate frame. */
-            tfrm = NULL;
-            sys = astGetSystem( spfrm );
-            if( issky ) {
-               if( sys == AST__FK4 ){
-                  tfrm = "B1950";
-                  equinox = 1950.0;
-
-               } else if( sys == AST__FK5 ){
-                  tfrm = "J2000";
-                  equinox = 2000.0;
-
-               } else if( sys == AST__ICRS ){
-                  tfrm = "ICRS";
-                  equinox = AST__BAD;
-
-               } else if( sys == AST__ECLIPTIC ){
-                  tfrm = "ECLIPTIC";
-                  equinox = 2000.0;
-
-               } else if( sys == AST__GALACTIC ){
-                  tfrm = "GALACTIC";
-                  equinox = AST__BAD;
-
-               } else if( sys == AST__SUPERGALACTIC ){
-                  tfrm = "SUPER_GALACTIC";
-                  equinox = AST__BAD;
-
-               } else if( sys == AST__UNKNOWN ){
-                  tfrm = NULL;
-                  equinox = AST__BAD;
-
-               } else {
-                  tfrm = NULL;
-                  astAddWarning( this, 1, "Sky system '%s' is "
-                                 "unsupported by STC-S.", "astWrite", 
-                                 status, astGetC( spfrm, "System" ) );
-                  ok = 0;
-               }
-
-               if( tfrm && equinox != AST__BAD ) {
-                  if( astGetD( spfrm, "Equinox" ) != equinox ) {
-                     astAddWarning( this, 1, "STC-S requires an equinox "
-                                    "of %g for the %s frame, but the "
-                                    "supplied %s equinox is %g.", "astWrite", 
-                                    status, equinox, tfrm, 
-                                    astGetClass( spfrm ), 
-                                    astGetD( spfrm, "Equinox" ) );
-                     ok = 0;
-                     tfrm = NULL;
-                  }
-               }
-            }
-
-/* If we do not yet have a Frame, use the Domain value if it is set (and
-   is a legal STC-S Frame). */
-            if( ! tfrm ) {
-               if( astTestDomain( spfrm ) ) {
-                  tfrm = astGetDomain( spfrm );
-                  if( strcmp( tfrm, "ICRS" ) &&
-                      strcmp( tfrm, "FK5" ) &&
-                      strcmp( tfrm, "FK4" ) &&
-                      strcmp( tfrm, "J2000" ) &&
-                      strcmp( tfrm, "B1950" ) &&
-                      strcmp( tfrm, "ECLIPTIC" ) &&
-                      strcmp( tfrm, "GALACTIC" ) &&
-                      strcmp( tfrm, "GALACTIC_II" ) &&
-                      strcmp( tfrm, "SUPER_GALACTIC" ) &&
-                      strcmp( tfrm, "GEO_C" ) &&
-                      strcmp( tfrm, "GEO_D" ) ){
-                     astAddWarning( this, 1, "'UNKNOWNFrame' being used in "
-                                    "place of unsupported frame '%s'.",
-                                     "astWrite", status, tfrm );
-                     tfrm = NULL;
-                  }
-               }
-            }
-
-/* Store the Frame name in the props keymap. */
-            if( !tfrm ) tfrm = "UNKNOWNFrame";
-            astMapPut0C( spprops, "FRAME", tfrm, NULL );
-
-/* RefPos. The AST SkyFrame and Frame classes have no reference position, so 
-   we leave unchanged any refpos already in the props keymap. If there is
-   no refpos in the keymap, we use "TOPOCENTER". */
-            if( !astMapHasKey( spprops, "REFPOS" ) ) {
-               astMapPut0C( spprops, "REFPOS", "TOPOCENTER", NULL );
-            }
-
-/* Flavour. */
-            if( issky ) {
-               flavour = "SPHER2";
-            } else if( nspace == 1 ){
-               flavour = "CART1";
-            } else if( nspace == 2 ){
-               flavour = "CART2";
-            } else {
-               flavour = "CART3";
-            }
-            MapPut0C( spprops, "FLAVOUR", flavour, "SPHER2", defs, status );
-
-/* That's it for the space sub-phrase, unless the supplied Region has an
-   explicit (non-default) uncertainty. */
-            unc = astGetUnc( spreg, 0 );
-            if( unc ) {
-
-/* Get the bounds of the uncertainty. */
-               astGetRegionBounds( unc, lbnd, ubnd );
-
-/* If its a sky frame, find the position of the centre of the uncertainty
-   region. */
-               pcen = issky ? astRegCentre( unc, NULL, NULL, 0, 
-                                            AST__CURRENT ) : NULL;
-
-/* Find the half-width of the bounding box for each space axis, and
-   concatenate their formatted values into a string. If any bound is
-   undefined, quit the axis loop with nc=0. We need to convert longitude
-   axis values from lingitude increments to arc-distance.  */
-               nc = 0;
-               defdigs = astGetDigits( unc );
-
-               for( i = 0; i < nspace; i++ ) {
-                  if( ubnd[ i ] != AST__BAD && lbnd[ i ] != AST__BAD ){
-
-                     if( ! issky ) {
-                        error = 0.5*( ubnd[ i ] - lbnd[ i ] );
-                     } else {
-                        if( i == 0 ) {
-                           p1[ 0 ] = ubnd[ 0 ];
-                           p1[ 1 ] = pcen[ 1 ];
-                        } else {
-                           p1[ 0 ] = pcen[ 0 ];
-                           p1[ 1 ] = ubnd[ 1 ];
-                        }
-                        error = astDistance( spfrm, pcen, p1 );
-                     }
-
-                     GetFmt( "ERROR", spprops, i, defdigs, fmt, status );
-                     (void) sprintf( buf, fmt, scale*error );
-                     prop = astAppendString( prop, &nc, buf );
-                     prop = astAppendString( prop, &nc, " " );
-
-                  } else {
-                     nc = 0;
-                     break;
-                  }
-               }
-
-/* If the bounds were all good, store the string holding the formatted
-   error values in the properties KeyMap. */
-               if( nc > 0 ) {
-                  prop[ nc - 1 ] = 0;
-                  astMapPut0C( spprops, "ERROR", prop, NULL );
-               }
-
-/* Free resources. */
-               pcen = astFree( pcen );
-               unc = astAnnul( unc );
-            }
-         }
-
-/* Free resources. */
-         spfrm = astAnnul( spfrm );
-         spprops = astAnnul( spprops );
-      }
-
-/* Free resources. */
-      spreg = astAnnul( spreg );
-
-   }
-
-
-
-/* Convert the spectral sub-phrase. 
-   ---------------------------------------------------------------- */
-   if( specax != -1 ) {
-
-/* Create a Region by picking the spectral axis from the supplied Region. */
-      spreg = astPickAxes( sreg, 1, &specax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
-      if( !astIsARegion( spreg ) ) {
-         astAddWarning( this, 1, "Cannot determine the region covered by "
-                        "the spectral axis.", "astWrite", status );
-         ok = 0;
-
-/* Otherwise we add a description of the spectral sub-phrase to the
-   properties keymap. */
-      } else {
-
-/* Get a pointer to the Region's spectral phrase property KeyMap, creating
-   one if necessary. */
-         if( astMapGet0A( props, "SPECTRAL_PROPS", &obj ) ) {
-            spprops = (AstKeyMap *) obj;
-         } else {
-            spprops = astKeyMap( " ", status );
-            astMapPut0A( props, "SPECTRAL_PROPS", spprops, NULL );
-         }
-
-/* See if the supplied properties KeyMap contains any item that refers to
-   the Unit included in the STC-S description, but which is not updated by
-   this function. If it does, we need to retain any units specified
-   within the KeyMap. */
-         retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
-                          astMapHasKey( spprops, "PIXSIZE" ) ||
-                          astMapHasKey( spprops, "SIZE" ) );
-
-/* If so, and if the properties KeyMap already contains a Unit specification, 
-   we convert the Region to the same units and system. Determine the
-   required system and units. */
-         if( retain_units ) {
-            if( !astMapGet0C( spprops, "UNIT", &unit ) ) unit = "Hz";
-
-            if( !strcmp( unit, "Hz" ) ||
-                !strcmp( unit, "MHz" ) ||
-                !strcmp( unit, "GHz" ) ) {
-               sys = AST__FREQ;
-
-            } else if( !strcmp( unit, "m" ) ||
-                       !strcmp( unit, "mm" ) ||
-                       !strcmp( unit, "um" ) ||
-                       !strcmp( unit, "nm" ) ||
-                       !strcmp( unit, "Angstrom" ) ) {
-               sys = AST__WAVELEN;
-
-            } else if( !strcmp( unit, "eV" ) ||
-                       !strcmp( unit, "keV" ) ||
-                       !strcmp( unit, "MeV" ) ) {
-               sys = AST__ENERGY;
-
-            } else {
-               astAddWarning( this, 1, "Illegal STC-S units '%s' found in "
-                              "supplied KeyMap", "astWrite", status, unit );
-               ok = 0;
-            }
-         
-/* If we do not need to retain the units implied by the supplied KeyMap,
-   use the Units and system in the supplied Region so long as they are  
-   supported by STC-S. If not, use a related supported system instead. */
-         } else {
-            sys = astGetSystem( spreg );
-            unit = astGetUnit( spreg, 0 );
-
-            if( sys == AST__ENERGY ) {
-               sys = AST__ENERGY;
-               if( strcmp( unit, "eV" ) &&
-                   strcmp( unit, "keV" ) &&
-                   strcmp( unit, "MeV" ) ) unit = "eV";
-
-            } else if( sys == AST__WAVELEN || sys == AST__AIRWAVE ||
-                       sys == AST__VOPTICAL || sys == AST__REDSHIFT ){
-               sys = AST__WAVELEN;
-               if( strcmp( unit, "m" ) &&
-                   strcmp( unit, "mm" ) &&
-                   strcmp( unit, "um" ) &&
-                   strcmp( unit, "nm" ) &&
-                   strcmp( unit, "Angstrom" ) ) unit = "m";
-
-            } else {
-               sys = AST__FREQ;
-               if( strcmp( unit, "Hz" ) &&
-                   strcmp( unit, "MHz" ) &&
-                   strcmp( unit, "GHz" ) ) unit = "Hz";
-
-            }
-         }
-
-/* Store the units string */
-         MapPut0C( spprops, "UNIT", unit, "Hz", defs, status );
-
-/* If either the System or Unit needs to be changed in the Region, take a
-   deep copy first in order to avoid changing the supplied Region. */
-         if( sys != astGetSystem( spreg ) ||
-             ( unit && strcmp( unit, astGetUnit( spreg, 0 ) ) ) ) {
-            treg = astCopy( spreg );
-            (void) astAnnul( spreg );
-            spreg = treg;
-            astSetAdaptive( spreg, 1 );
-            astSetSystem( spreg, sys );
-            astSetUnit( spreg, 0, unit );
-         }
-
-/* Get the Region's fill factor. */
-         fill = astGetFillFactor( spreg );
-
-/* Get the bounds of the Region (i.e. the spectral axis coverage). */
-         astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Get a pointer to the spectral Region's encapsulated Frame. */
-         spfrm = astRegFrame( spreg );
-
-/* Report a warning if the sub-phrase Frame is not a SpecFrame */
-         if( !astIsASpecFrame( spfrm ) ) {
-            ok = 0;
-            astAddWarning( this, 1, "The spectral sub-phrase in the supplied "
-                           "KeyMap is not described using an AST SpecFrame.",
-                           "astWrite", status );
-
-/* Store properties that are specific to spectral positions... */
-         } else if( lbnd[ 0 ] == ubnd[ 0 ] ) {
-            astMapPut0C( spprops, "ID", "Spectral", NULL );
-            astMapPut0D( spprops, "SPECTRAL", lbnd[ 0 ], NULL );
-            fill = AST__BAD;
-
-/* Store properties that are specific to Spectral intervals... */
-         } else if( lbnd[ 0 ] > -lim && ubnd[ 0 ] < lim ) {
-            astMapPut0C( spprops, "ID", "SpectralInterval", NULL );
-            astMapPut0D( spprops, "LOLIMIT", lbnd[ 0 ], NULL );
-            astMapPut0D( spprops, "HILIMIT", ubnd[ 0 ], NULL );
-
-         } else {
-            ok = 0;
-            astAddWarning( this, 1, "Cannot write out an unbounded "
-                           "spectral interval.", "astWrite", status );
-         }
-
-/* Store properties that are common to all spectral sub-phrase types. First the
-   fill factor. */
-         MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-
-/* Now the reference position. */
-         sor = astGetStdOfRest( spfrm );
-         if( sor == AST__GESOR ) {
-            tsor = "GEOCENTER";
-
-         } else if( sor == AST__BYSOR ) {
-            tsor = "BARYCENTER";
-
-         } else if( sor == AST__HLSOR ) {
-            tsor = "HELIOCENTER";
-
-         } else if( sor == AST__TPSOR ) {
-            tsor = "TOPOCENTER";
-
-         } else if( sor == AST__LKSOR ) {
-            tsor = "LSRK";
-
-         } else if( sor == AST__LDSOR ) {
-            tsor = "LSRD";
-
-         } else if( sor == AST__GLSOR ) {
-            tsor = "GALACTIC_CENTER";
-
-         } else {
-            tsor = NULL;
-         }
-
-         if( !tsor ) tsor = "UNKNOWNRefPos";
-         MapPut0C( spprops, "REFPOS", tsor, "UNKNOWNRefPos", defs,
-                   status );
-
-/* Now the unit string. */
-         MapPut0C( spprops, "UNIT", unit, "Hz", defs, status );
-
-/* That's it for the spectral sub-phrase, unless the supplied Region has an
-   explicit (non-default) uncertainty. */
-         unc = astGetUnc( spreg, 0 );
-         if( unc ) {
-
-/* Get the bounds of the uncertainty. */
-            astGetRegionBounds( unc, lbnd, ubnd );
-
-/* The error is half the width of the bounding box. */
-            astMapPut0D( spprops, "ERROR", 0.5*( ubnd[ 0 ] - lbnd[ 0 ] ), NULL );
-
-/* Free resources. */
-            unc = astAnnul( unc );
-         }
-
-/* Free resources. */
-         spfrm = astAnnul( spfrm );
-         spprops = astAnnul( spprops );
-      }
-
-/* Free resources. */
-      spreg = astAnnul( spreg );
-
-   }
-
-
-
-/* Convert the redshift sub-phrase. 
-   ---------------------------------------------------------------- */
-   if( redax != -1 ) {
-
-/* Create a Region by picking the redshift axis from the supplied Region. */
-      spreg = astPickAxes( sreg, 1, &redax, NULL );
-
-/* Check it is a Region. If not, we cannot convert anything. */
-      if( !astIsARegion( spreg ) ) {
-         astAddWarning( this, 1, "Cannot determine the region covered by "
-                        "the redshift axis.", "astWrite", status );
-         ok = 0;
-
-/* Otherwise we add a description of the redshift sub-phrase to the
-   properties keymap. */
-      } else {
-
-/* Get a pointer to the Region's redshift phrase property KeyMap, creating
-   one if necessary. */
-         if( astMapGet0A( props, "REDSHIFT_PROPS", &obj ) ) {
-            spprops = (AstKeyMap *) obj;
-         } else {
-            spprops = astKeyMap( " ", status );
-            astMapPut0A( props, "REDSHIFT_PROPS", spprops, NULL );
-         }
-
-/* See if the supplied properties KeyMap contains any item that refers to
-   the system included in the STC-S description, but which is not updated by
-   this function. If it does, we need to retain any system specified
-   within the KeyMap. */
-         retain_units = ( astMapHasKey( spprops, "RESOLUTION" ) ||
-                          astMapHasKey( spprops, "PIXSIZE" ) ||
-                          astMapHasKey( spprops, "SIZE" ) );
-
-/* If so, and if the properties KeyMap already contains a DopplerDef or
-   Type specification, we convert the Region to the same system. */
-         if( retain_units ){
-            if( !astMapGet0C( spprops, "DOPPLERDEF", &dopdef ) ) dopdef = "OPTICAL";
-            if( !astMapGet0C( spprops, "TYPE", &type ) ) type = "VELOCITY";
-
-            if( astChrMatch( type, "VELOCITY" ) ) {
-               if( astChrMatch( dopdef, "OPTICAL" ) ) {
-                  sys = AST__VOPTICAL;
-               } else if( astChrMatch( dopdef, "RADIO" ) ) {
-                  sys = AST__VRADIO;
-               } else if( astChrMatch( dopdef, "RELATIVISTIC" ) ) {
-                  sys = AST__VREL;
-               } else {
-                  astAddWarning( this, 1, "Illegal STC-S DopplerDef '%s' "
-                                 "found in supplied KeyMap", "astWrite", status, 
-                                 dopdef );
-                  ok = 0;
-               }
-
-            } else if( astChrMatch( type, "REDSHIFT" ) ) {
-               if( astChrMatch( dopdef, "OPTICAL" ) ) {
-                  sys = AST__REDSHIFT;
-               } else {
-                  astAddWarning( this, 1, "Unsupported combination of "
-                                 "DopplerDef='%s' and Type='%s' found in "
-                                 "supplied KeyMap", "astWrite", status, dopdef,
-                                 type );
-                  ok = 0;
-               }
-
-            } else {
-               astAddWarning( this, 1, "Illegal STC-S Redshift Type '%s' "
-                              "found in supplied KeyMap", "astWrite", status, 
-                              type );
-               ok = 0;
-            } 
-
-/* If the supplied KeyMap does not imply the required system, use the 
-   system in the supplied Region. */
-         } else {
-            sys = astGetSystem( spreg );
-         }
-
-/* Choose the requied units. */
-         unit = ( sys == AST__REDSHIFT ) ? "": "km/s";
-
-/* Store the units string */
-         MapPut0C( spprops, "UNIT", unit, unit, defs, status );
-
-/* If either the System or Unit needs to be changed in the Region, take a
-   deep copy first in order to avoid changing the supplied Region. */
-         if( sys != astGetSystem( spreg ) ||
-             ( unit && strcmp( unit, astGetUnit( spreg, 0 ) ) ) ) {
-            treg = astCopy( spreg );
-            (void) astAnnul( spreg );
-            spreg = treg;
-            astSetAdaptive( spreg, 1 );
-            astSetSystem( spreg, sys );
-            astSetUnit( spreg, 0, unit );
-         }
-
-/* Get the Region's fill factor. */
-         fill = astGetFillFactor( spreg );
-
-/* Get the bounds of the Region (i.e. the redshift axis coverage). */
-         astGetRegionBounds( spreg, lbnd, ubnd );
-
-/* Get a pointer to the spectral Region's encapsulated Frame. */
-         spfrm = astRegFrame( spreg );
-
-/* Report a warning if the sub-phrase Frame is not a SpecFrame */
-         if( !astIsASpecFrame( spfrm ) ) {
-            ok = 0;
-            astAddWarning( this, 1, "The redshift sub-phrase in the supplied "
-                           "KeyMap is not described using an AST SpecFrame.",
-                           "astWrite", status );
-
-/* Store properties that are specific to redshift positions... */
-         } else if( lbnd[ 0 ] == ubnd[ 0 ] ) {
-            astMapPut0C( spprops, "ID", "Redshift", NULL );
-            astMapPut0D( spprops, "REDSHIFT", lbnd[ 0 ], NULL );
-            fill = AST__BAD;
-
-/* Store properties that are specific to Redshift intervals... */
-         } else if( lbnd[ 0 ] > -lim && ubnd[ 0 ] < lim ) {
-            astMapPut0C( spprops, "ID", "RedshiftInterval", NULL );
-            astMapPut0D( spprops, "LOLIMIT", lbnd[ 0 ], NULL );
-            astMapPut0D( spprops, "HILIMIT", ubnd[ 0 ], NULL );
-
-         } else {
-            ok = 0;
-            astAddWarning( this, 1, "Cannot write out an unbounded "
-                           "redshift interval.", "astWrite", status );
-         }
-
-/* Store properties that are common to all redshift sub-phrase types. First the
-   fill factor. */
-         MapPut0D( spprops, "FILLFACTOR", fill, 1.0, defs, status );
-
-/* Now the reference position. */
-         sor = astGetStdOfRest( spfrm );
-
-         if( sor == AST__GESOR ) {
-            tsor = "GEOCENTER";
-
-         } else if( sor == AST__BYSOR ) {
-            tsor = "BARYCENTER";
-
-         } else if( sor == AST__HLSOR ) {
-            tsor = "HELIOCENTER";
-
-         } else if( sor == AST__TPSOR ) {
-            tsor = "TOPOCENTER";
-
-         } else if( sor == AST__LKSOR ) {
-            tsor = "LSRK";
-
-         } else if( sor == AST__LDSOR ) {
-            tsor = "LSRD";
-
-         } else if( sor == AST__GLSOR ) {
-            tsor = "GALACTIC_CENTER";
-
-         } else {
-            tsor = NULL;
-         }
-
-         if( !tsor ) tsor = "UNKNOWNRefPos";
-         MapPut0C( spprops, "REFPOS", tsor, "UNKNOWNRefPos", defs,
-                   status );
-
-/* Type and DopplerDef. */
-         if( sys == AST__VOPTICAL ) {
-            type = "VELOCITY";
-            dopdef = "OPTICAL";
-
-         } else if( sys == AST__VRADIO ) {
-            type = "VELOCITY";
-            dopdef = "RADIO";
-
-         } else if( sys == AST__VREL ) {
-            type = "VELOCITY";
-            dopdef = "RELATIVISTIC";
-
-         } else {
-            type = "REDSHIFT";
-            dopdef = "OPTICAL";
-         }
-         astMapPut0C( spprops, "DOPPLERDEF", dopdef, NULL );
-         MapPut0C( spprops, "TYPE", type, "REDSHIFT", defs, status );
-
-/* Now the unit string. */
-         MapPut0C( spprops, "UNIT", unit, unit, defs, status );
-
-/* That's it for the redshift sub-phrase, unless the supplied Region has an
-   explicit (non-default) uncertainty. */
-         unc = astGetUnc( spreg, 0 );
-         if( unc ) {
-
-/* Get the bounds of the uncertainty. */
-            astGetRegionBounds( unc, lbnd, ubnd );
-
-/* The error is half the width of the bounding box. */
-            astMapPut0D( spprops, "ERROR", 0.5*( ubnd[ 0 ] - lbnd[ 0 ] ), NULL );
-
-/* Free resources. */
-            unc = astAnnul( unc );
-         }
-
-/* Free resources. */
-         spfrm = astAnnul( spfrm );
-         spprops = astAnnul( spprops );
-      }
-
-/* Free resources. */
-      spreg = astAnnul( spreg );
-
-   }
-
-/* Free resources */
-   if( sreg ) sreg = astAnnul( sreg );
-   if( prop ) prop = astFree( prop );
-
-/* Return the result. */
-   return ok;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     StcsArea
-
-*  Purpose:
-*     Return the CoordinateArea component when reading an STC-S document?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which controls what is returned
-*     by the
-c     astRead
-f     AST_READ
-*     function when it is used to read from an StcsChan.
-*     If StcsArea is set non-zero (the default), then a Region
-*     representing the STC CoordinateArea will be returned by 
-c     astRead.
-f     AST_READ.
-*     If StcsArea is set to zero, then the STC CoordinateArea
-*     will not be returned.
-
-*  Notes:
-*     - Other attributes such as StcsCoords and StcsProps can be used to
-*     specify other Objects to be returned by 
-c     astRead.
-f     AST_READ.
-*     If more than one of these attributes is set non-zero, then the
-*     actual Object returned by 
-c     astRead
-f     AST_READ
-*     will be a KeyMap, containing the requested Objects. In this
-*     case, the Region representing the STC CoordinateArea will be
-*     stored in the returned KeyMap using the key "AREA". If StcsArea
-*     is the only attribute to be set non-zero, then the Object returned by
-c     astRead
-f     AST_READ
-*     will be the CoordinateArea Region itself.
-*     - The class of Region used to represent the CoordinateArea for each
-*     STC-S sub-phrase is determined by the first word in the
-*     sub-phrase (the "sub-phrase identifier"). The individual sub-phrase
-*     Regions are combined into a single Prism, which is then simplified
-c     using astSimplify
-f     using AST_SIMPLIFY
-*     to form the returned region.
-*     - Sub-phrases that represent a single value ( that is, have
-*     identifiers "Time", "Position", "Spectral" or "Redshift" ) are
-*     considered to be be part of the STC CoordinateArea component.
-*     - The TimeFrame used to represent a time STC-S sub-phrase will have
-*     its TimeOrigin attribute set to the sub-phrase start time. If no
-*     start time is specified by the sub-phrase, then the stop time will be
-*     used instead. If no stop time is specified by the sub-phrase, then 
-*     the single time value specified in the sub-phrase will be used
-*     instead. Subsequently clearing the TimeOrigin attribute (or setting
-*     its value to zero) will cause the TimeFrame to reprsent absolute times.
-*     - The Epoch attribute for the returned Region is set in the same
-*     way as the TimeOrigin attribute (see above).
-
-*  Applicability:
-*     StcsChan
-*        All StcsChans have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of 1. */
-astMAKE_CLEAR(StcsChan,StcsArea,stcsarea,-INT_MAX)
-astMAKE_GET(StcsChan,StcsArea,int,1,( this->stcsarea != -INT_MAX ? this->stcsarea : 1 ))
-astMAKE_SET(StcsChan,StcsArea,int,stcsarea,( value != 0 ))
-astMAKE_TEST(StcsChan,StcsArea,( this->stcsarea != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     StcsCoords
-
-*  Purpose:
-*     Return the Coordinates component when reading an STC-S document?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which controls what is returned
-*     by the
-c     astRead
-f     AST_READ
-*     function when it is used to read from an StcsChan.
-*     If StcsCoords is set non-zero, then a PointList
-*     representing the STC Coordinates will be returned by 
-c     astRead.
-f     AST_READ.
-*     If StcsCoords is set to zero (the default), then the STC 
-*     Coordinates will not be returned.
-
-*  Notes:
-*     - Other attributes such as StcsArea and StcsProps can be used to
-*     specify other Objects to be returned by 
-c     astRead.
-f     AST_READ.
-*     If more than one of these attributes is set non-zero, then the
-*     actual Object returned by 
-c     astRead
-f     AST_READ
-*     will be a KeyMap, containing the requested Objects. In this
-*     case, the PointList representing the STC Coordinates will be
-*     stored in the returned KeyMap using the key "COORDS". If StcsCoords
-*     is the only attribute to be set non-zero, then the Object returned by
-c     astRead
-f     AST_READ
-*     will be the Coordinates PointList itself.
-*     - The Coordinates component is specified by the additional axis
-*     values embedded within the body of each STC-S sub-phrase that
-*     represents an extended area. Sub-phrases that represent a single 
-*     value ( that is, have identifiers "Time", "Position", "Spectral" 
-*     or "Redshift" ) are not considered to be be part of the STC
-*     Coordinates component.
-*     - If the STC-S documents does not contain a Coordinates component,
-*     then a NULL object pointer
-f     (AST__NULL)
-*     will be returned by 
-c     astRead
-f     AST_READ
-*     if the Coordinates component is the only object being returned. If
-*     other objects are also being returned (see attributes StcsProps and 
-*     StcsArea), then the returned KeyMap will contain a "COORDS" key
-*     only if the Coordinates component is read succesfully.
-*     - The TimeFrame used to represent a time STC-S sub-phrase will have
-*     its TimeOrigin attribute set to the sub-phrase start time. If no
-*     start time is specified by the sub-phrase, then the stop time will be
-*     used instead. If no stop time is specified by the sub-phrase, then 
-*     the single time value specified in the sub-phrase will be used
-*     instead. Subsequently clearing the TimeOrigin attribute (or setting
-*     its value to zero) will cause the TimeFrame to reprsent absolute times.
-*     - The Epoch attribute for the returned Region is set in the same
-*     way as the TimeOrigin attribute (see above).
-
-*  Applicability:
-*     StcsChan
-*        All StcsChans have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(StcsChan,StcsCoords,stcscoords,-INT_MAX)
-astMAKE_GET(StcsChan,StcsCoords,int,0,( this->stcscoords != -INT_MAX ? this->stcscoords : 0 ))
-astMAKE_SET(StcsChan,StcsCoords,int,stcscoords,( value != 0 ))
-astMAKE_TEST(StcsChan,StcsCoords,( this->stcscoords != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     StcsProps
-
-*  Purpose:
-*     Return all properties when reading an STC-S document?
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This is a boolean attribute which controls what is returned
-*     by the
-c     astRead
-f     AST_READ
-*     function when it is used to read from an StcsChan.
-*     If StcsProps is set non-zero, then a KeyMap containing all the
-*     properties read from the STC-S document will be returned by 
-c     astRead.
-f     AST_READ.
-*     If StcsProps is set to zero (the default), then the properties
-*     will not be returned.
-
-*  Notes:
-*     - Other attributes such as StcsCoords and StcsArea can be used to
-*     specify other Objects to be returned by 
-c     astRead.
-f     AST_READ.
-*     If more than one of these attributes is set non-zero, then the
-*     actual Object returned by 
-c     astRead
-f     AST_READ
-*     will be a KeyMap containing the requested Objects. In this
-*     case, the properties KeyMap will be stored in the returned KeyMap 
-*     using the key "PROPS". If StcsProps is the only attribute to be 
-*     set non-zero, then the Object returned by 
-c     astRead
-f     AST_READ
-*     will be the properties KeyMap itself.
-*     - The KeyMap containing the properties will have entries for one or
-*     more of the following keys: "TIME_PROPS", "SPACE_PROPS", "SPECTRAL_PROPS" 
-*     and "REDSHIFT_PROPS". Each of these entries will be another KeyMap
-*     containing the properties of the corresponding STC-S sub-phrase.
-
-*  Applicability:
-*     StcsChan
-*        All StcsChans have this attribute.
-*att--
-*/
-
-/* This ia a boolean value (0 or 1) with a value of -INT_MAX when
-   undefined but yielding a default of zero. */
-astMAKE_CLEAR(StcsChan,StcsProps,stcsprops,-INT_MAX)
-astMAKE_GET(StcsChan,StcsProps,int,0,( this->stcsprops != -INT_MAX ? this->stcsprops : 0 ))
-astMAKE_SET(StcsChan,StcsProps,int,stcsprops,( value != 0 ))
-astMAKE_TEST(StcsChan,StcsProps,( this->stcsprops != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     StcsIndent
-
-*  Purpose:
-*     Controls indentation and line splitting of output text.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls how the STC-S text is written out to the
-*     sink function when writing an AST object to an StcsChan. If it is
-*     zero (the default) the entire STC-S description is written out by a
-*     single invocation of the sink function. The text supplied to the
-*     sink function will not contain any linefeed characters, and each
-*     pair of adjacent words will be separated by a single space. The
-*     text may thus be arbitrarily large and the StcsLength attribute is 
-*     ignored.
-*
-*     If StcsIndent is non-zero, then the text is written out via
-*     multiple calls to the sink function, each call corresponding to a
-*     single "line" of text (although no line feed characters will be
-*     inserted by AST). The complete STC-S description is broken into
-*     lines so that:
-*
-*     - the line length specified by attribute StcsLength is not exceeded
-*     - each sub-phrase (time, space, etc.) starts on a new line
-*     - each argument in a compound spatial region starts on a new line
-*
-*     If this causes a sub-phrase to extend to two or more lines, then the 
-*     second and subsequent lines will be indented by three spaces compared 
-*     to the first line. In addition, lines within a compound spatial region
-*     will have extra indentation to highlight the nesting produced by the 
-*     parentheses. Each new level of nesting will be indented by a further 
-*     three spaces.
-f
-f     Note, the default value of zero is unlikely to be appropriate when
-f     an StcsChan is used within Fortran code. In this case, StcsIndent
-f     should usually be set non-zero, and the StcsLength attribute set to 
-f     the size of the CHARACTER variable used to 
-f     receive the text returned by AST_GETLINE within the sink function.
-f     This avoids the possibility of long lines being truncated invisibly
-f     within AST_GETLINE.
-
-*  Applicability:
-*     StcsChan
-*        All StcsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(StcsChan,StcsIndent,stcsindent,-1)
-astMAKE_GET(StcsChan,StcsIndent,int,0,(this->stcsindent == -1 ? 0 : this->stcsindent))
-astMAKE_SET(StcsChan,StcsIndent,int,stcsindent,( value ? 1 : 0 ))
-astMAKE_TEST(StcsChan,StcsIndent,( this->stcsindent != -1 ))
-
-/*
-*att++
-*  Name:
-*     StcsLength
-
-*  Purpose:
-*     Controls output line length.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute specifies the maximum length to use when writing out 
-*     text through the sink function supplied when the StcsChan was created.
-*     It is ignored if the StcsIndent attribute is zero (in which case
-*     the text supplied to the sink function can be of any length). The
-*     default value is 70.
-*
-*     The number of characters in each string written out through the sink 
-*     function will not usually be greater than the value of this attribute 
-*     (but may be less). However, if any single word in the STC-S
-*     description exceeds the specified length, then the word will be
-*     written out as a single line.
-*
-f     Note, the default value of zero is unlikely to be appropriate when
-f     an StcsChan is used within Fortran code. In this case, StcsLength
-f     should usually be set to the size of the CHARACTER variable used to 
-f     receive the text returned by AST_GETLINE within the sink function.
-f     In addition, the StcsIndent attribute should be set non-zero. This 
-f     avoids the possibility of long lines being truncated invisibly
-f     within AST_GETLINE.
-
-*  Applicability:
-*     StcsChan
-*        All StcsChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(StcsChan,StcsLength,stcslength,-INT_MAX)
-astMAKE_GET(StcsChan,StcsLength,int,70,( ( this->stcslength != -INT_MAX ) ? this->stcslength : 70 ))
-astMAKE_SET(StcsChan,StcsLength,int,stcslength,(value<0?0:value))
-astMAKE_TEST(StcsChan,StcsLength,( this->stcslength != -INT_MAX ))
-
-/* Copy constructor. */
-/* ----------------- */
-
-/* Destructor. */
-/* ----------- */
-
-/* Dump function. */
-/* -------------- */
-
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for StcsChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the StcsChan class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the Object (an StcsChan) whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstStcsChan *this;            /* Pointer to the StcsChan structure */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcsChan structure. */
-   this = (AstStcsChan *) this_object;
-
-/* Write out values representing the instance variables for the
-   StcsChan class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* StcsArea. */
-/* --------- */
-   set = TestStcsArea( this, status );
-   ival = set ? GetStcsArea( this, status ) : astGetStcsArea( this );
-   astWriteInt( channel, "StcsArea", set, 0, ival,
-                ival ? "Read the STC CoordinatesArea component" :
-                       "Do not read the STC CoordinatesArea component" );
-
-/* StcsCoords. */
-/* ----------- */
-   set = TestStcsCoords( this, status );
-   ival = set ? GetStcsCoords( this, status ) : astGetStcsCoords( this );
-   astWriteInt( channel, "StcsCoords", set, 0, ival,
-                ival ? "Read the STC Coordinates component" :
-                       "Do not read the STC Coordinates component" );
-
-/* StcsProps. */
-/* ---------- */
-   set = TestStcsProps( this, status );
-   ival = set ? GetStcsProps( this, status ) : astGetStcsProps( this );
-   astWriteInt( channel, "StcsProps", set, 0, ival,
-                ival ? "Read the STC-S properties" :
-                       "Do not read the STC-S properties" );
-
-/* StcsIndent */
-/* ---------- */
-      set = TestStcsIndent( this, status );
-      ival = set ? GetStcsIndent( this, status ) : astGetStcsIndent( this );
-      astWriteInt( channel, "StcsInd", set, 0, ival, "STC-S indentation" );
-
-/* StcsLength */
-/* ---------- */
-      set = TestStcsLength( this, status );
-      ival = set ? GetStcsLength( this, status ) : astGetStcsLength( this );
-      astWriteInt( channel, "StcsLen", set, 0, ival, "STC-S buffer length" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcsChan and astCheckStcsChan functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcsChan,Channel)
-astMAKE_CHECK(StcsChan)
-
-AstStcsChan *astStcsChan_( const char *(* source)( void ),
-                           void (* sink)( const char * ),
-                           const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astStcsChan
-f     AST_STCSCHAN
-
-*  Purpose:
-*     Create an StcsChan.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "stcschan.h"
-c     AstStcsChan *astStcsChan( const char *(* source)( void ),
-c                               void (* sink)( const char * ),
-c                               const char *options, ... )
-f     RESULT = AST_STCSCHAN( SOURCE, SINK, OPTIONS, STATUS )
-
-*  Class Membership:
-*     StcsChan constructor.
-
-*  Description:
-*     This function creates a new StcsChan and optionally initialises
-*     its attributes.
-*
-*     A StcsChan is a specialised form of Channel which supports STC-S
-*     I/O operations. Writing an Object to an StcsChan (using
-c     astWrite) will, if the Object is suitable, generate an
-f     AST_WRITE) will, if the Object is suitable, generate an
-*     STC-S description of that Object, and reading from an StcsChan will 
-*     create a new Object from its STC-S description.
-*
-*     Normally, when you use an StcsChan, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-c     by reading and writing the resulting text. These functions
-f     and "sink" routines which connect it to an external data store
-f     by reading and writing the resulting text. These routines
-*     should perform any conversions needed between external character 
-c     encodings and the internal ASCII encoding. If no such functions 
-f     encodings and the internal ASCII encoding. If no such routines
-*     are supplied, a Channel will read from standard input and write 
-*     to standard output.
-
-*  Parameters:
-c     source
-f     SOURCE = SUBROUTINE (Given)
-c        Pointer to a source function that takes no arguments and
-c        returns a pointer to a null-terminated string.  This function
-c        will be used by the StcsChan to obtain lines of input text. On
-c        each invocation, it should return a pointer to the next input
-c        line read from some external data store, and a NULL pointer
-c        when there are no more lines to read.
-c
-c        If "source" is NULL, the Channel will read from standard
-c        input instead.
-f        A source routine, which is a subroutine which takes a single
-f        integer error status argument.  This routine will be used by
-f        the StcsChan to obtain lines of input text. On each
-f        invocation, it should read the next input line from some
-f        external data store, and then return the resulting text to
-f        the AST library by calling AST_PUTLINE. It should supply a
-f        negative line length when there are no more lines to read.
-f        If an error occurs, it should set its own error status
-f        argument to an error value before returning.
-f
-f        If the null routine AST_NULL is suppied as the SOURCE value,
-f        the Channel will read from standard input instead.
-c     sink
-f     SINK = SUBROUTINE (Given)
-c        Pointer to a sink function that takes a pointer to a
-c        null-terminated string as an argument and returns void.  This
-c        function will be used by the StcsChan to deliver lines of
-c        output text. On each invocation, it should deliver the
-c        contents of the string supplied to some external data store.
-c
-c        If "sink" is NULL, the StcsChan will write to standard output
-c        instead.
-f        A sink routine, which is a subroutine which takes a single
-f        integer error status argument.  This routine will be used by
-f        the StcsChan to deliver lines of output text. On each
-f        invocation, it should obtain the next output line from the
-f        AST library by calling AST_GETLINE, and then deliver the
-f        resulting text to some external data store.  If an error
-f        occurs, it should set its own error status argument to an
-f        error value before returning.
-f
-f        If the null routine AST_NULL is suppied as the SINK value,
-f        the Channel will write to standard output instead.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new StcsChan. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new StcsChan. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astStcsChan()
-f     AST_STCSCHAN = INTEGER
-*        A pointer to the new StcsChan.
-
-*  Notes:
-f     - The names of the routines supplied for the SOURCE and SINK
-f     arguments should appear in EXTERNAL statements in the Fortran
-f     routine which invokes AST_STCSCHAN. However, this is not generally
-f     necessary for the null routine AST_NULL (so long as the AST_PAR
-f     include file has been used).
-*     - If the external data source or sink uses a character encoding
-*     other than ASCII, the supplied source and sink functions should
-*     translate between the external character encoding and the internal 
-*     ASCII encoding used by AST.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-f     - Note that the null routine AST_NULL (one underscore) is
-f     different to AST__NULL (two underscores), which is the null Object
-f     pointer.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;           /* Pointer to thread-specific global data */
-   AstStcsChan *new;             /* Pointer to new StcsChan */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the StcsChan, allocating memory and initialising the
-   virtual function table as well if necessary. This interface is for
-   use by other C functions within AST, and uses the standard "wrapper"
-   functions included in this class. */
-   new = astInitStcsChan( NULL, sizeof( AstStcsChan ), !class_init, 
-                          &class_vtab, "StcsChan", source, SourceWrap,
-                          sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   StcsChan's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new StcsChan. */
-   return new;
-}
-
-AstStcsChan *astStcsChanId_( const char *(* source)( void ),
-                             void (* sink)( const char * ),
-                             const char *options, ... ) {
-/*
-*  Name:
-*     astStcsChanId_
-
-*  Purpose:
-*     Create an StcsChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstStcsChan *astStcsChanId_( const char *(* source)( void ),
-*                                  void (* sink)( const char * ),
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     StcsChan constructor.
-
-*  Description:
-*     This function implements the external (public) C interface to the
-*     astStcsChan constructor function. Another function (astStcsChanForId)
-*     should be called to create an StcsChan for use within other languages.
-*     Both functions return an ID value (instead of a true C pointer) to 
-*     external users, and must be provided because astStcsChan_ has a variable 
-*     argument list which cannot be encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astStcsChan_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astStcsChan_.
-
-*  Returned Value:
-*     The ID value associated with the new StcsChan.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;           /* Pointer to thread-specific global data */
-   AstStcsChan *new;             /* Pointer to new StcsChan */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the StcsChan, allocating memory and initialising the
-   virtual function table as well if necessary. This interface is for
-   use by external C functions and uses the standard "wrapper"
-   functions included in this class. */
-   new = astInitStcsChan( NULL, sizeof( AstStcsChan ), !class_init, 
-                          &class_vtab, "StcsChan", source, SourceWrap, 
-                          sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   StcsChan's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new StcsChan. */
-   return astMakeId( new );
-}
-
-AstStcsChan *astStcsChanForId_( const char *(* source)( void ),
-                                char *(* source_wrap)( const char *(*)( void ), int * ),
-                                void (* sink)( const char * ),
-                                void (* sink_wrap)( void (*)( const char * ),
-                                                    const char *, int * ),
-                                const char *options, ... ) {
-/*
-*+
-*  Name:
-*     astStcsChanFor
-
-*  Purpose:
-*     Initialise an StcsChan from a foreign language interface.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstStcsChan *astStcsChanFor( const char *(* source)( void ),
-*                                  char *(* source_wrap)( const char *(*)
-*                                                         ( void ), int * ),
-*                                  void (* sink)( const char * ),
-*                                  void (* sink_wrap)( void (*)( const char * ),
-*                                                      const char *, int * ),
-*                                  const char *options, ... )
-
-*  Class Membership:
-*     StcsChan constructor.
-
-*  Description:
-*     This function creates a new StcsChan from a foreign language
-*     interface and optionally initialises its attributes.
-*
-*     A StcsChan is a specialised form of Channel which supports STC-S
-*     I/O operations. Writing an Object to an StcsChan (using
-c     astWrite) will, if the Object is suitable, generate an
-f     AST_WRITE) will, if the Object is suitable, generate an
-*     STC-S description of that Object, and reading from an StcsChan will 
-*     create a new Object from its STC-S description.
-*
-*     Normally, when you use an StcsChan, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-c     by reading and writing the resulting text. These functions
-f     and "sink" routines which connect it to an external data store
-f     by reading and writing the resulting text. These routines
-*     should perform any conversions needed between external character 
-c     encodings and the internal ASCII encoding. If no such functions 
-f     encodings and the internal ASCII encoding. If no such routines
-*     are supplied, a Channel will read from standard input and write 
-*     to standard output.
-
-*  Parameters:
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        lines of input text. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the StcsChan will read from standard
-*        input instead.
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next line of input
-*        text. The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source_wrap" is NULL, the StcsChan will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        lines of output text. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the StcsChan will write to standard output
-*        instead.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the Channel will write to standard
-*        output instead.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new StcsChan. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     astStcsChanFor()
-*        A pointer to the new StcsChan.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*     - This function is only available through the public interface
-*     to the StcsChan class (not the protected interface) and is
-*     intended solely for use in implementing foreign language
-*     interfaces to this class.
-*-
-
-*  Implememtation Notes:
-*     - This function behaves exactly like astStcsChanId_, in that it
-*     returns ID values and not true C pointers, but it has two
-*     additional arguments. These are pointers to the "wrapper
-*     functions" which are needed to accommodate foreign language
-*     interfaces.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;           /* Pointer to thread-specific global data */
-   AstStcsChan *new;              /* Pointer to new StcsChan */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the StcsChan, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcsChan( NULL, sizeof( AstStcsChan ), !class_init, 
-                          &class_vtab, "StcsChan", source, source_wrap,
-                          sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   StcsChan's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new StcsChan. */
-   return astMakeId( new );
-}
-
-AstStcsChan *astInitStcsChan_( void *mem, size_t size, int init,
-                               AstStcsChanVtab *vtab, const char *name,
-                               const char *(* source)( void ),
-                               char *(* source_wrap)( const char *(*)( void ), int * ),
-                               void (* sink)( const char * ),
-                               void (* sink_wrap)( void (*)( const char * ),
-                                                   const char *, int * ), int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcsChan
-
-*  Purpose:
-*     Initialise an StcsChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstStcsChan *astInitStcsChan( void *mem, size_t size, int init,
-*                                   AstStcsChanVtab *vtab, const char *name,
-*                                   const char *(* source)( void ),
-*                                   char *(* source_wrap)( const char *(*)( void ), int * ),
-*                                   void (* sink)( const char * ),
-*                                   void (* sink_wrap)( void (*)( const char * ),
-*                                                     const char *, int * ) )
-
-*  Class Membership:
-*     StcsChan initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new StcsChan object. It allocates memory (if
-*     necessary) to accommodate the StcsChan plus any additional data
-*     associated with the derived class.  It then initialises a
-*     StcsChan structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for an StcsChan at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the StcsChan is to be
-*        initialised.  This must be of sufficient size to accommodate
-*        the StcsChan data (sizeof(StcsChan)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the StcsChan (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the StcsChan structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A boolean flag indicating if the StcsChan's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new StcsChan.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        lines of text. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the Channel will read from standard
-*        input instead.
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next line of input
-*        text. The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source_wrap" is NULL, the Channel will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        lines of text. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the contents of the StcsChan will not be
-*        written out before being deleted.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the Channel will write to standard
-*        output instead.
-
-*  Returned Value:
-*     A pointer to the new StcsChan.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstStcsChan *new;              /* Pointer to new StcsChan */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitStcsChanVtab( vtab, name );
-
-/* Initialise a Channel structure (the parent class) as the first
-   component within the StcsChan structure, allocating memory if
-   necessary. */
-   new = (AstStcsChan *) astInitChannel( mem, size, 0,
-                                         (AstChannelVtab *) vtab, name,
-                                         source, source_wrap, sink,
-                                         sink_wrap );
-
-   if ( astOK ) {
-
-/* Initialise the StcsChan data. */
-/* ---------------------------- */
-      new->stcsarea = -INT_MAX;
-      new->stcscoords = -INT_MAX;
-      new->stcsprops = -INT_MAX;
-      new->stcsindent = -1;
-      new->stcslength = -INT_MAX;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstStcsChan *astLoadStcsChan_( void *mem, size_t size,
-                               AstStcsChanVtab *vtab, const char *name,
-                               AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadStcsChan
-
-*  Purpose:
-*     Load an StcsChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcschan.h"
-*     AstStcsChan *astLoadStcsChan( void *mem, size_t size,
-*                                   AstStcsChanVtab *vtab, const char *name,
-*                                   AstChannel *channel )
-
-*  Class Membership:
-*     StcsChan loader.
-
-*  Description:
-*     This function is provided to load a new StcsChan using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     StcsChan structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for an StcsChan at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the StcsChan is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        StcsChan data (sizeof(StcsChan)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the StcsChan (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the StcsChan structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstStcsChan) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new StcsChan. If this is NULL, a pointer
-*        to the (static) virtual function table for the StcsChan class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "StcsChan" is used instead.
-
-*  Returned Value:
-*     A pointer to the new StcsChan.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS;          /* Pointer to thread-specific global data */
-   AstStcsChan *new;            /* Pointer to the new StcsChan */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this StcsChan. In this case the
-   StcsChan belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstStcsChan );
-      vtab = &class_vtab;
-      name = "StcsChan";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitStcsChanVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built StcsChan. */
-   new = astLoadChannel( mem, size, (AstChannelVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "StcsChan" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* StcsArea. */
-/* --------- */
-      new->stcsarea = astReadInt( channel, "stcsarea", -INT_MAX );
-      if ( TestStcsArea( new, status ) ) SetStcsArea( new, new->stcsarea, status );
-
-/* StcsCoords. */
-/* ----------- */
-      new->stcscoords = astReadInt( channel, "stcscoords", -INT_MAX );
-      if ( TestStcsCoords( new, status ) ) SetStcsCoords( new, new->stcscoords, status );
-
-/* StcsProps. */
-/* ---------- */
-      new->stcsprops = astReadInt( channel, "stcsprops", -INT_MAX );
-      if ( TestStcsProps( new, status ) ) SetStcsProps( new, new->stcsprops, status );
-
-/* StcsIndent */
-/* ---------- */
-      new->stcsindent = astReadInt( channel, "stcsind", -1 );
-
-/* StcsLength */
-/* ---------- */
-      new->stcslength = astReadInt( channel, "stcslen", -INT_MAX );
-
-   }
-
-/* If an error occurred, clean up by deleting the new StcsChan. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new StcsChan pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/stcschan.h b/ast-5.3-1/stcschan.h
deleted file mode 100644
index c1d4f8c..0000000
--- a/ast-5.3-1/stcschan.h
+++ /dev/null
@@ -1,324 +0,0 @@
-#if !defined( STCSCHAN_INCLUDED ) /* Include this file only once */
-#define STCSCHAN_INCLUDED
-/*
-*+
-*  Name:
-*     stcschan.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the StcsChan class.
-
-*  Invocation:
-*     #include "stcschan.h"
-
-*  Description:
-*     This include file defines the interface to the StcsChan class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The StcsChan class provides facilities for reading and writing AST 
-*     Objects in the form of STC-S text.
-
-*  Inheritance:
-*     The StcsChan class inherits from the Channel class.
-
-*  Copyright:
-*     Copyright (C) 2008 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (JAC, UCLan)
-
-*  History:
-*     18-DEC-2008 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"             /* I/O channels (parent class) */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* Define constants used to size global arrays in this module. */
-/* Define other numerical constants for use in this module. */
-#define AST__STCSCHAN_GETATTRIB_BUFF_LEN 200   
-
-/* Type Definitions. */
-/* ================= */
-
-/* StcsChan structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstStcsChan {
-
-/* Attributes inherited from the parent class. */
-   AstChannel channel;          /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int stcsarea;                /* Read the STC CoordinatesArea? */
-   int stcscoords;              /* Read the STC Coordinates? */
-   int stcsprops;               /* Read the STC-S properties? */
-   int stcsindent;              /* Indentat output? */
-   int stcslength;              /* Line length */
-} AstStcsChan;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstStcsChanVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstChannelVtab channel_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* GetStcsArea)( AstStcsChan *, int * );
-   int (* TestStcsArea)( AstStcsChan *, int * );
-   void (* ClearStcsArea)( AstStcsChan *, int * );
-   void (* SetStcsArea)( AstStcsChan *, int, int * );
-
-   int (* GetStcsCoords)( AstStcsChan *, int * );
-   int (* TestStcsCoords)( AstStcsChan *, int * );
-   void (* ClearStcsCoords)( AstStcsChan *, int * );
-   void (* SetStcsCoords)( AstStcsChan *, int, int * );
-
-   int (* GetStcsProps)( AstStcsChan *, int * );
-   int (* TestStcsProps)( AstStcsChan *, int * );
-   void (* ClearStcsProps)( AstStcsChan *, int * );
-   void (* SetStcsProps)( AstStcsChan *, int, int * );
-
-   int (* GetStcsIndent)( AstStcsChan *, int * );
-   int (* TestStcsIndent)( AstStcsChan *, int * );
-   void (* ClearStcsIndent)( AstStcsChan *, int * );
-   void (* SetStcsIndent)( AstStcsChan *, int, int * );
-
-   int (* GetStcsLength)( AstStcsChan *, int * );
-   int (* TestStcsLength)( AstStcsChan *, int * );
-   void (* ClearStcsLength)( AstStcsChan *, int * );
-   void (* SetStcsLength)( AstStcsChan *, int, int * );
-
-} AstStcsChanVtab;
-
-#if defined(THREAD_SAFE) 
-typedef struct AstStcsChanGlobals {
-   AstStcsChanVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ AST__STCSCHAN_GETATTRIB_BUFF_LEN + 1 ];
-} AstStcsChanGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcsChan)          /* Check class membership */
-astPROTO_ISA(StcsChan)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstStcsChan *astStcsChan_( const char *(*)( void ), void (*)( const char * ),
-                          const char *, int *, ...);
-#else
-AstStcsChan *astStcsChanId_( const char *(*)( void ), void (*)( const char * ),
-                            const char *, ... );
-AstStcsChan *astStcsChanForId_( const char *(*)( void ),
-                              char *(*)( const char *(*)( void ), int * ),
-                              void (*)( const char * ),
-                              void (*)( void (*)( const char * ),
-                                        const char *, int * ),
-                              const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstStcsChan *astInitStcsChan_( void *, size_t, int, AstStcsChanVtab *,
-                             const char *, const char *(*)( void ), 
-                             char *(*)( const char *(*)( void ), int * ), 
-                             void (*)( const char * ), 
-                             void (*)( void (*)( const char * ), 
-                             const char *, int * ), int * );
-
-/* Vtab initialiser. */
-void astInitStcsChanVtab_( AstStcsChanVtab *, const char *, int * );
-
-
-
-/* Loader. */
-AstStcsChan *astLoadStcsChan_( void *, size_t, AstStcsChanVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitStcsChanGlobals_( AstStcsChanGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-# if defined(astCLASS)           /* Protected */
-int astGetStcsArea_( AstStcsChan *, int * );
-int astTestStcsArea_( AstStcsChan *, int * );
-void astClearStcsArea_( AstStcsChan *, int * );
-void astSetStcsArea_( AstStcsChan *, int, int * );
-
-int astGetStcsCoords_( AstStcsChan *, int * );
-int astTestStcsCoords_( AstStcsChan *, int * );
-void astClearStcsCoords_( AstStcsChan *, int * );
-void astSetStcsCoords_( AstStcsChan *, int, int * );
-
-int astGetStcsProps_( AstStcsChan *, int * );
-int astTestStcsProps_( AstStcsChan *, int * );
-void astClearStcsProps_( AstStcsChan *, int * );
-void astSetStcsProps_( AstStcsChan *, int, int * );
-
-int astGetStcsIndent_( AstStcsChan *, int * );
-int astTestStcsIndent_( AstStcsChan *, int * );
-void astClearStcsIndent_( AstStcsChan *, int * );
-void astSetStcsIndent_( AstStcsChan *, int, int * );
-
-int astGetStcsLength_( AstStcsChan *, int * );
-int astTestStcsLength_( AstStcsChan *, int * );
-void astClearStcsLength_( AstStcsChan *, int * );
-void astSetStcsLength_( AstStcsChan *, int, int * );
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckStcsChan(this) astINVOKE_CHECK(StcsChan,this,0)
-#define astVerifyStcsChan(this) astINVOKE_CHECK(StcsChan,this,1)
-
-/* Test class membership. */
-#define astIsAStcsChan(this) astINVOKE_ISA(StcsChan,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astStcsChan astINVOKE(F,astStcsChan_)
-#else
-#define astStcsChan astINVOKE(F,astStcsChanId_)
-#define astStcsChanFor astINVOKE(F,astStcsChanForId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitStcsChan(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap) \
-astINVOKE(O,astInitStcsChan_(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcsChanVtab(vtab,name) astINVOKE(V,astInitStcsChanVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcsChan(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcsChan_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to member functions. */
-/* ------------------------------- */
-/* Here we make use of astCheckStcsChan to validate StcsChan pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-
-#if defined(astCLASS)            /* Protected */
-
-#define astClearStcsArea(this) \
-astINVOKE(V,astClearStcsArea_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsArea(this) \
-astINVOKE(V,astGetStcsArea_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsArea(this,value) \
-astINVOKE(V,astSetStcsArea_(astCheckStcsChan(this),value,STATUS_PTR))
-#define astTestStcsArea(this) \
-astINVOKE(V,astTestStcsArea_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsCoords(this) \
-astINVOKE(V,astClearStcsCoords_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsCoords(this) \
-astINVOKE(V,astGetStcsCoords_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsCoords(this,value) \
-astINVOKE(V,astSetStcsCoords_(astCheckStcsChan(this),value,STATUS_PTR))
-#define astTestStcsCoords(this) \
-astINVOKE(V,astTestStcsCoords_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsProps(this) \
-astINVOKE(V,astClearStcsProps_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsProps(this) \
-astINVOKE(V,astGetStcsProps_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsProps(this,value) \
-astINVOKE(V,astSetStcsProps_(astCheckStcsChan(this),value,STATUS_PTR))
-#define astTestStcsProps(this) \
-astINVOKE(V,astTestStcsProps_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsIndent(this) astINVOKE(V,astClearStcsIndent_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsIndent(this) astINVOKE(V,astGetStcsIndent_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsIndent(this,stcsindent) astINVOKE(V,astSetStcsIndent_(astCheckStcsChan(this),stcsindent,STATUS_PTR))
-#define astTestStcsIndent(this) astINVOKE(V,astTestStcsIndent_(astCheckStcsChan(this),STATUS_PTR))
-
-#define astClearStcsLength(this) astINVOKE(V,astClearStcsLength_(astCheckStcsChan(this),STATUS_PTR))
-#define astGetStcsLength(this) astINVOKE(V,astGetStcsLength_(astCheckStcsChan(this),STATUS_PTR))
-#define astSetStcsLength(this,stcslength) astINVOKE(V,astSetStcsLength_(astCheckStcsChan(this),stcslength,STATUS_PTR))
-#define astTestStcsLength(this) astINVOKE(V,astTestStcsLength_(astCheckStcsChan(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
diff --git a/ast-5.3-1/stcsearchlocation.c b/ast-5.3-1/stcsearchlocation.c
deleted file mode 100644
index 32e7073..0000000
--- a/ast-5.3-1/stcsearchlocation.c
+++ /dev/null
@@ -1,806 +0,0 @@
-/*
-*class++
-*  Name:
-*     StcSearchLocation
-
-*  Purpose:
-*     Correspond to the IVOA SearchLocation class.
-
-*  Constructor Function:
-c     astStcSearchLocation
-f     AST_STCSEARCHLOCATION
-
-*  Description:
-*     The StcSearchLocation class is a sub-class of Stc used to describe 
-*     the coverage of a query.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcSearchLocation class inherits from the Stc class.
-
-*  Attributes:
-*     The StcSearchLocation class does not define any new attributes beyond
-*     those which are applicable to all Stcs.
-
-*  Functions:
-c     The StcSearchLocation class does not define any new functions beyond those
-f     The StcSearchLocation class does not define any new routines beyond those
-*     which are applicable to all Stcs.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-NOV-2004 (DSB):
-*        Original version.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS StcSearchLocation
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "region.h"              /* Regions within coordinate systems */
-#include "stcsearchlocation.h"   /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(StcSearchLocation)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(StcSearchLocation,Class_Init)
-#define class_vtab astGLOBAL(StcSearchLocation,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstStcSearchLocationVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstStcSearchLocation *astStcSearchLocationId_( void *, int, AstKeyMap **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-
-void astInitStcSearchLocationVtab_( AstStcSearchLocationVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcSearchLocationVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a StcSearchLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcsearchlocation.h"
-*     void astInitStcSearchLocationVtab( AstStcSearchLocationVtab *vtab, const char *name )
-
-*  Class Membership:
-*     StcSearchLocation vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the StcSearchLocation class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;  /* Pointer to Mapping component of Vtab */
-   AstStcVtab *stc;          /* Pointer to Stc component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitStcVtab( (AstStcVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAStcSearchLocation) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstStcVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   mapping = (AstMappingVtab *) vtab;
-   stc = (AstStcVtab *) vtab;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-
-/* Declare the copy constructor, destructor and class dump
-   functions. */
-   astSetDump( vtab, Dump, "StcSearchLocation", "Query coverage" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-/* None */
-
-/* Destructor. */
-/* ----------- */
-/* None */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for StcSearchLocation objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the StcSearchLocation class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the StcSearchLocation whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstStcSearchLocation *this;                 /* Pointer to the StcSearchLocation structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the StcSearchLocation structure. */
-   this = (AstStcSearchLocation *) this_object;
-
-/* Write out values representing the instance variables for the
-   StcSearchLocation class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAStcSearchLocation and astCheckStcSearchLocation functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(StcSearchLocation,Stc)
-astMAKE_CHECK(StcSearchLocation)
-
-AstStcSearchLocation *astStcSearchLocation_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astStcSearchLocation
-f     AST_STCSEARCHLOCATION
-
-*  Purpose:
-*     Create a StcSearchLocation.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "stcsearchlocation.h"
-c     AstStcResourceProfile *astStcSearchLocation( AstRegion *region, 
-c                   int ncoords, AstKeyMap *coords[], const char *options, ... )
-f     RESULT = AST_STCSEARCHLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     StcSearchLocation constructor.
-
-*  Description:
-*     This function creates a new StcSearchLocation and optionally initialises its
-*     attributes.
-*
-*     The StcSearchLocation class is a sub-class of Stc used to describe 
-*     the coverage of a VO query.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Parameters:
-c     region
-f     REGION = INTEGER (Given)
-*        Pointer to the encapsulated Region.
-c     ncoords
-f     NCOORDS = INTEGER (Given)
-c        The length of the "coords" array. Supply zero if "coords" is NULL.
-f        The length of the COORDS array. Supply zero if COORDS should be
-f        ignored.
-c     coords
-f     COORDS( NCOORDS ) = INTEGER (Given)
-c        Pointer to an array holding "ncoords" AstKeyMap pointers (if "ncoords"
-f        An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-*        is zero, the supplied value is ignored). Each supplied KeyMap 
-*        describes the contents of a single STC <AstroCoords> element, and 
-*        should have elements with keys given by constants AST__STCNAME, 
-*        AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE, 
-*        AST__STCPIXSZ. Any of these elements may be omitted, but no other 
-*        elements should be included. If supplied, the AST__STCNAME element 
-*        should be a vector of character string pointers holding the "Name" 
-*        item for each axis in the coordinate system represented by
-c        "region".
-f        REGION.
-*        Any other supplied elements should be scalar elements, each  holding 
-*        a pointer to a Region describing the associated item of ancillary 
-*        information (error, resolution, size, pixel size or value). These 
-*        Regions should describe a volume within the coordinate system 
-c        represented by "region". 
-f        represented by REGION. 
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new StcSearchLocation. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new StcSearchLocation. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astStcSearchLocation()
-f     AST_STCSEARCHLOCATION = INTEGER
-*        A pointer to the new StcSearchLocation.
-
-*  Notes:
-*     - A deep copy is taken of the supplied Region. This means that
-*     any subsequent changes made to the encapsulated Region using the 
-*     supplied pointer will have no effect on the Stc.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstRegion *region;            /* Pointer to Region structure */
-   AstStcSearchLocation *new;    /* Pointer to new StcSearchLocation */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain and validate a pointer to the Region structure provided. */
-   region = astCheckRegion( region_void );
-
-/* Initialise the StcSearchLocation, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcSearchLocation( NULL, sizeof( AstStcSearchLocation ), !class_init,
-                                    &class_vtab, "StcSearchLocation", region,
-                                    ncoords, coords );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcSearchLocation's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new StcSearchLocation. */
-   return new;
-}
-
-AstStcSearchLocation *astStcSearchLocationId_( void *region_void, int ncoords, 
-                               AstKeyMap **coords, const char *options, ... ) {
-/*
-*  Name:
-*     astStcSearchLocationId_
-
-*  Purpose:
-*     Create a StcSearchLocation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "stcsearchlocation.h"
-*     AstStcSearchLocation *astStcSearchLocationId_( AstRegion *region,
-*                  int ncoords, AstKeyMap *coords[], const char *options, ... )
-
-*  Class Membership:
-*     StcSearchLocation constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astStcSearchLocation constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astStcSearchLocation_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astStcSearchLocation_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astStcSearchLocation_.
-
-*  Returned Value:
-*     The ID value associated with the new StcSearchLocation.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstKeyMap **keymaps;            /* Pointer to array of KeyMap pointers */
-   AstRegion *region;              /* Pointer to Region structure */
-   AstStcSearchLocation *new;      /* Pointer to new StcSearchLocation */
-   int icoord;                     /* Keymap index */
-   va_list args;                   /* Variable argument list */
-   int *status;                    /* Pointer to inherited status value */
-
-   /* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a Region pointer from the supplied ID and validate the
-   pointer to ensure it identifies a valid Region. */
-   region = astVerifyRegion( astMakePointer( region_void ) );
-
-/* Obtain pointer from the supplied KeyMap ID's and validate the
-   pointers to ensure it identifies a valid KeyMap. */
-   keymaps = astMalloc( sizeof( AstKeyMap * )*(size_t) ncoords );
-   if( keymaps ) {
-      for( icoord = 0; icoord < ncoords; icoord++ ) {
-         keymaps[ icoord ] = astVerifyKeyMap( astMakePointer( coords[ icoord ] ) );
-      }
-   }
-
-/* Initialise the StcSearchLocation, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitStcSearchLocation( NULL, sizeof( AstStcSearchLocation ), !class_init, 
-                                   &class_vtab, "StcSearchLocation", region,
-                                   ncoords, keymaps );
-
-/* Free resources. */
-   keymaps = astFree( keymaps );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new StcSearchLocation's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new StcSearchLocation. */
-   return astMakeId( new );
-}
-
-AstStcSearchLocation *astInitStcSearchLocation_( void *mem, size_t size, 
-                                    int init, AstStcSearchLocationVtab *vtab, 
-                                    const char *name, AstRegion *region,
-                                    int ncoords, AstKeyMap **coords, int *status ) {
-/*
-*+
-*  Name:
-*     astInitStcSearchLocation
-
-*  Purpose:
-*     Initialise a StcSearchLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcsearchlocation.h"
-*     AstStcSearchLocation *astInitStcSearchLocation_( void *mem, size_t size, 
-*                                    int init, AstStcSearchLocationVtab *vtab, 
-*                                    const char *name, AstRegion *region,
-*                                    int ncoords, AstKeyMap **coords ) 
-
-*  Class Membership:
-*     StcSearchLocation initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new StcSearchLocation object. It allocates memory (if necessary) to accommodate
-*     the StcSearchLocation plus any additional data associated with the derived class.
-*     It then initialises a StcSearchLocation structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a StcSearchLocation at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the StcSearchLocation is to be initialised.
-*        This must be of sufficient size to accommodate the StcSearchLocation data
-*        (sizeof(StcSearchLocation)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the StcSearchLocation (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the StcSearchLocation
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the StcSearchLocation's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new StcSearchLocation.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     region
-*        A pointer to the Region encapsulated by the StcSearchLocation.
-*     ncoords
-*        Number of KeyMap pointers supplied in "coords". Can be zero.
-*        Ignored if "coords" is NULL.
-*     coords
-*        Pointer to an array of "ncoords" KeyMap pointers, or NULL if
-*        "ncoords" is zero. Each KeyMap defines defines a single <AstroCoords> 
-*        element, and should have elements with keys given by constants 
-*        AST__STCNAME, AST__STCVALUE, AST__STCERROR, AST__STCRES, AST__STCSIZE,
-*        AST__STCPIXSZ. These elements hold values for the corresponding 
-*        components of the STC AstroCoords element. Any of these elements may 
-*        be omitted, but no other elements should be included. All supplied 
-*        elements should be vector elements, with vector length less than or 
-*        equal to the number of axes in the supplied Region. The data type of 
-*        all elements should be "double", except for AST__STCNAME which should 
-*        be "character string". If no value is available for a given axis, then
-*        AST__BAD (or NULL for the AST__STCNAME element) should be stored in 
-*        the vector at the index corresponding to the axis (trailing axes
-*        can be omitted completely from the KeyMap).
-
-*  Returned Value:
-*     A pointer to the new StcSearchLocation.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstStcSearchLocation *new;       /* Pointer to new StcSearchLocation */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitStcSearchLocationVtab( vtab, name );
-
-/* Initialise a Stc structure (the parent class) as the first component
-   within the StcSearchLocation structure, allocating memory if necessary. */
-   new = (AstStcSearchLocation *) astInitStc( mem, size, 0, (AstStcVtab *) vtab,
-                                              name, region, ncoords, coords );
-
-/* If an error occurred, clean up by deleting the new StcSearchLocation. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return a pointer to the new StcSearchLocation. */
-   return new;
-}
-
-AstStcSearchLocation *astLoadStcSearchLocation_( void *mem, size_t size, AstStcSearchLocationVtab *vtab, 
-                                                 const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadStcSearchLocation
-
-*  Purpose:
-*     Load a StcSearchLocation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "stcsearchlocation.h"
-*     AstStcSearchLocation *astLoadStcSearchLocation( void *mem, size_t size, AstStcSearchLocationVtab *vtab, 
-*                                       const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     StcSearchLocation loader.
-
-*  Description:
-*     This function is provided to load a new StcSearchLocation using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     StcSearchLocation structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a StcSearchLocation at the start of the memory
-*     passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the StcSearchLocation is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        StcSearchLocation data (sizeof(StcSearchLocation)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the StcSearchLocation (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the StcSearchLocation structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstStcSearchLocation) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new StcSearchLocation. If this is NULL, a pointer
-*        to the (static) virtual function table for the StcSearchLocation class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "StcSearchLocation" is used instead.
-
-*  Returned Value:
-*     A pointer to the new StcSearchLocation.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstStcSearchLocation *new;              /* Pointer to the new StcSearchLocation */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this StcSearchLocation. In this case the
-   StcSearchLocation belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstStcSearchLocation );
-      vtab = &class_vtab;
-      name = "StcSearchLocation";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitStcSearchLocationVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built StcSearchLocation. */
-   new = astLoadStc( mem, size, (AstStcVtab *) vtab, name, channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "StcSearchLocation" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new StcSearchLocation. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new StcSearchLocation pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
-
diff --git a/ast-5.3-1/stcsearchlocation.h b/ast-5.3-1/stcsearchlocation.h
deleted file mode 100644
index e3f37bf..0000000
--- a/ast-5.3-1/stcsearchlocation.h
+++ /dev/null
@@ -1,222 +0,0 @@
-#if !defined( STCSEARCHLOCATION_INCLUDED ) /* Include this file only once */
-#define STCSEARCHLOCATION_INCLUDED
-/*
-*+
-*  Name:
-*     stcsearchlocation.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the StcSearchLocation class.
-
-*  Invocation:
-*     #include "stcsearchlocation.h"
-
-*  Description:
-*     This include file defines the interface to the StcSearchLocation class 
-*     and provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The StcSearchLocation class is a sub-class of Stc used to describe 
-*     the coverage of a VO query.
-*
-*     See http://hea-www.harvard.edu/~arots/nvometa/STC.html
-
-*  Inheritance:
-*     The StcSearchLocation class inherits from the Stc class.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     26-NOV-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "stc.h"                 /* Coordinate stcs (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* StcSearchLocation structure. */
-/* ----------------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstStcSearchLocation {
-
-/* Attributes inherited from the parent class. */
-   AstStc stc;             /* Parent class structure */
-
-} AstStcSearchLocation;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstStcSearchLocationVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstStcVtab stc_vtab;          /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-} AstStcSearchLocationVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstStcSearchLocationGlobals {
-   AstStcSearchLocationVtab Class_Vtab;
-   int Class_Init;
-} AstStcSearchLocationGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitStcSearchLocationGlobals_( AstStcSearchLocationGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(StcSearchLocation)          /* Check class membership */
-astPROTO_ISA(StcSearchLocation)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstStcSearchLocation *astStcSearchLocation_(  void *, int, AstKeyMap **, const char *, int *, ...);
-#else
-AstStcSearchLocation *astStcSearchLocationId_(  void *, int, AstKeyMap **, const char *, ... )__attribute__((format(printf,4,5)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstStcSearchLocation *astInitStcSearchLocation_( void *, size_t, int, AstStcSearchLocationVtab *, const char *, AstRegion *, int, AstKeyMap **, int * );
-
-/* Vtab initialiser. */
-void astInitStcSearchLocationVtab_( AstStcSearchLocationVtab *, const char *, int * );
-
-/* Loader. */
-AstStcSearchLocation *astLoadStcSearchLocation_( void *, size_t, AstStcSearchLocationVtab *, const char *, AstChannel *, int * );
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckStcSearchLocation(this) astINVOKE_CHECK(StcSearchLocation,this,0)
-#define astVerifyStcSearchLocation(this) astINVOKE_CHECK(StcSearchLocation,this,1)
-
-/* Test class membership. */
-#define astIsAStcSearchLocation(this) astINVOKE_ISA(StcSearchLocation,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astStcSearchLocation astINVOKE(F,astStcSearchLocation_)
-#else
-#define astStcSearchLocation astINVOKE(F,astStcSearchLocationId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitStcSearchLocation(mem,size,init,vtab,name,region,ncoords,coords) \
-astINVOKE(O,astInitStcSearchLocation_(mem,size,init,vtab,name,region,ncoords,coords,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitStcSearchLocationVtab(vtab,name) astINVOKE(V,astInitStcSearchLocationVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadStcSearchLocation(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadStcSearchLocation_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckStcSearchLocation to validate StcSearchLocation pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/sun210.htx_tar b/ast-5.3-1/sun210.htx_tar
deleted file mode 100644
index 31fefe3..0000000
Binary files a/ast-5.3-1/sun210.htx_tar and /dev/null differ
diff --git a/ast-5.3-1/sun210.ps b/ast-5.3-1/sun210.ps
deleted file mode 100644
index 36263e3..0000000
--- a/ast-5.3-1/sun210.ps
+++ /dev/null
@@ -1,140320 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software
-%%Title: sun210.dvi
-%%CreationDate: Fri Oct 30 12:47:04 2009
-%%Pages: 570
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMR10 CMCSC10 CMBX10 CMR12 CMBX12 CMSL10 CMTT10 CMTI10
-%%+ CMR8 CMSY10 CMR6 CMR9 CMSY8 CMMI10 CMMI9 CMSY9 CMMI7 CMMI8 CMTT12
-%%+ CMTI9 CMTT9 CMMI12 CMBXTI10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -f sun210
-%DVIPSParameters: dpi=600
-%DVIPSSource:  TeX output 2009.10.30:1246
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro 0 0
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
- at MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMBXTI10
-%!PS-AdobeFont-1.1: CMBXTI10 1.0
-%%CreationDate: 1991 Aug 18 17:46:30
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBXTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBXTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 105 /i put
-readonly def
-/FontBBox{-29 -250 1274 754}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF
-E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207
-BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3
-3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2
-F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707
-C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E
-BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632
-2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1
-879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D
-141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF
-63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46
-4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B
-FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD
-395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003
-82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1
-763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019
-165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E
-57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED
-E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5
-178DAA7C97C35EAFA47778CE03E863303582D8A99017F26A160DE09CAF559887
-BB7542DAE9D93635D7935E338FFFB7604DEF34DCD58044CED8179C3D5D153580
-B5DFF72BA41025750BC5AAABFCC548DBC3B40AA114A259480F7B979FC60C0A38
-A2A17337F124FC64D6D3B0AE140CD95202F8E25D2A5E87041F837647C29FD3F2
-81F74B7E43F45DA22971625A4876A4A0558D7D3CBDF61767A626695AD266B569
-0F406D8A4873FDB8B9ABE5EA5D5DEDC76A94A2204A79B3BA51C2725ADDDD581A
-103D8F830BB5AAD1B5FF4A270A2D96EFFC09E7DA49F15005486CA3455EAF0AF6
-CD8B3E7AFE65C2572276CB9A466F455B36EFC39717C2BF639972D09B4AD24800
-54315F0B9D482DF70DDDFAE6BA7232743157D0821906ABD931EFD1663FDE6221
-51E9F02CD62A034ED67DEA76CB859C879788F9A1831A1AC4D5D7EC5A09144481
-16CA2CAA7C229DE470982BFF4B7D3A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI12
-%!PS-AdobeFont-1.1: CMMI12 1.100
-%%CreationDate: 1996 Jul 27 08:57:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 60 /less put
-dup 62 /greater put
-readonly def
-/FontBBox{-30 -250 1026 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
-3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
-EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
-4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
-2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
-323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
-2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
-D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
-5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
-0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
-A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
-2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
-00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
-CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
-99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
-C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
-5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
-55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
-A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
-3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
-F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
-F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
-EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
-67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
-923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
-A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
-FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
-1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
-D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 61 /equal put
-dup 62 /questiondown put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 124 /emdash put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB73439CB0DD021D44A7C11BF295E81733
-4DFBA460FF3D654F9FB337E99E6D66FBA87A817EB9CA1536C84833870E3626DA
-55D48DE850D3E6F6B29DA0E7C9D681283586F208DB8D58042E3A7CE55BE84822
-C98237911453E479EAB65AFEBA3F61A763B40E74535BE56C9D8D06DDF9441741
-5C9D9D917439368736619717FAB4F06E2C329AE0BA411F3FD522D9C33AD8369B
-D7DCC9DF993778482F35F965973DE876FA19E109AA198A00658AB3F0D8E3DDD1
-08A573F2D525202AFC57E05D141E6C0BB811E1FE280EEA002B7A45BB363AD06C
-318D320D2C81AA5DCC842CEF66E7DF7670588CB39C9F42EE7763A3A17372432A
-173BDEF7ECCEA297CCDD76A835C36DCE9DB8F8CB66CC71B4920CF5BF055A5260
-5B41A5373BA6E4F63C85671D979EA5EC30D22163E6D206168A3827F465279870
-CA80E6632872F721BBCC622EE4214BF723551C846765495FA9921E11FE1A950A
-53150C3F5D8595958A47E0B16064CC3AFD65DA294FFD111153F4F233BC5468AE
-69585C16CFBFCA32C4B96C161F47B56661DF84FCD8ADD3EC086CFB6BB5179BC3
-A5469A1CFBC8620BC711F42D0D3139BCE4E38698D9C574450DB43B5A19FA6D54
-0368BA9F7A8DBF96DCD0B8968CD194264E6DD10A958846C278B8C2BAFE7AAF8B
-44C84C955F1A89A13E62A054BC76CABBBF6296DE00A79CD7C8C61C70F127618E
-9975B59A880685E126F57AD80F8F4D376E1B476BDFDAC868FB6AFAD9D694B561
-001623C4D9F55366D053B52F2B09EC08B81901AE0986C5350312E626006038AD
-AC15FE313FCEE1A2E61F8992AC00CA7BB7F997707EA377D37EA6FF35BFBC2866
-A572B31491F9B80445685DBA5E62F166E80589F768FC95BBC79158C23B2F1BD1
-25816F1486A64F76D99A638AC0DC101FDF390811B3C118C2D972B2E7587F6F24
-7F1DB2DD922D237A7D18FF08FD665355CFBBEE799D3BFF11CD94CFFDBA3E725E
-DCF4CDE4307E3B199D91893A365D04F43A5305BDD2538E28A0788E061F3A621A
-B4A04E5063B47F0109C1693A284FA43E8F1EA9B68145FF51C005D3FA40713BA8
-1879BFC3CAA881B9D885A0C1AA8BBEA7EF469AEFA06ECD3C26AABD535E9FBDC5
-CF858BFCD827A42CC5CCC4F1353A38204E89F80CAB3A5536F848EDDE1590A2A0
-EA53A5B5EE4BA2E44C0C4D37FF0C41E493FEDA6F034B72EE3B707AFEB7C95948
-628FF2D0AB46CE262FD48BE38A9EE135DD3B964F2AF6FFF727171FB2CFE03BD8
-F283FB6832C3E3F7CBB8BCAB0832CF2A8E614BBB3247CBFF413C62B66BA53CF6
-7389EECA675BFB2D7009025507988F15A89EA5E8FF18D4EFF6B7F9ED4839B6A4
-4DB456F527A910A57679CAFB925C92C2FD4006211445542DB24AF25F0A8294A0
-F1BA550A79E1DF637DA2BE0CBF54E3BC900DE2705FA5D39117C6D60A211DA570
-1767730698E8B894239BD9C1479A7699323FF448A4F09CBCD2043D643F79E5E2
-CE906E4CB48B87061E31ADC961CA1572AC8421BF39F7B411A9BC24ED53983C6F
-280083C9FDB651061980B7EE9E0BE46BAC8438B7132A178EF85333C42EC96662
-9492603E81D660C04F6E987221B84C126C873E07F3B98AE2A812AC2568AA2E8A
-72C259E99BAB20F278A375F62BBE150E0C31E5503977EC2E48851DB6ACF56291
-7751546B0A823DA0B180607D7E017E26DED254A742FC52B76DA76B749922A186
-E5289E8C05C6A9FAFBBD7636A099EBADF6E5E1F82280DDE4673C718D89139309
-780288A213ECC662AB646F272F2EEFED28C8423DFE4E8A3221F759C38D165583
-EF1402CACD01853182A20C5920BDB3E4A15B06A9E047D14CEC33397CC21CC60C
-CF9CF4590E3E1BAF10124B24938C06687474F6C62A824D7935380221649956FF
-88A63BFEB557BD68DF393A2E217C7AC2E311A5BF6A50CBA00E93CB093D28BBDA
-28E09307384AFD3A366F7207C59FFF6B714557C15537208AABE524C14DCF26DB
-63246401AA21F177D818F42C5BB582410C524971A226064657A2041A3DA2ED06
-32F94AE2EA8809142B01A1EC9BC2F523E666C586B385171FA974D457E21BD6B4
-CE7D97BC179F9152C1A608CEB6684F76369BF1CF68A51D367A90A723FA3C21A3
-93CE8F3EF2282C21BD2937BCDDC2C3C630E2DD7680E6DE9F785B60305B8D25EA
-724D36E8804D23D32D26231ADA92D9CFB30385E568CFE7F16162292FBE411AF6
-011471D6E8CBAF3BE10C9C97E5BCE6AD1D3A8A5836DE65B9C9153197293312B5
-4A60DD8D3D61836E66CCFE1FD45D03903C9B0779E4B4E36A09CCAFE0CC77485C
-D781D40FFCCE6396A1A8DE341290BC7FFF4984F05B49408EDF52087DB2277E13
-7F2A58C22C8C461FC1F4FD9876C37BEC8907EEA94D5B7A3A834A893F4A0FA427
-25459081B39DE1706E43B176F4614809A59EAE6DB99A245E7686D9170DD138F2
-5FCEDB16C53F9A1EB7D3EF0F87134B5B2CDC63F94350AF66B99D6D88B971C421
-CF5DCC2E77F3D1F2E0A4C472F775265A02890E611EFD6E00B33AA12A5AE5FCEC
-AF2B64AC90598627EF76F3E6E06516550597A6AB2B24E1B98BDE81BB8BED7212
-ACEF81E9CB5647C71F086AACCFE9CBC7F758C1A79E2ECC12EC4BD316E15299C7
-B994DD26569C3F59D02CB30D226C4343ABAD9EA2D88285B7B22B0208BEC6586F
-39D785BBE1EE55EA3E57BCD6EECF7C6E283CBE992084945865845B4830C574A5
-C56BFD05346282787AC93C2B52CBE07B15265A351F5E714376A53092DF3237FB
-BB98D1282B1EF524254A2FDDCE13D04C5EAAC3049DBF2AC77C1C803CFB330BB2
-FB902D8F502C1070BCF3625DDC32AF43D17D52C3DD368FFFA3ACB6F957234F35
-5D4BA5EB12B7DEA9C58EBEF0038D215F44ECC89E55970B2C90A9EE1F6F257C8D
-3A8DC632B2698EC9FA8F1BBF5CBE214CF7CD86F0628ABEEDC0E408C651CA6DE2
-8185FBFA5A140F20ECFB7216682BCF6C07C3D6E6EEB72100BA39BD7A0817C182
-CF447D03695C3C72E4CC215C6F69DAC14C3910F52FD1541E62C07148FAAD0F7C
-3D58FE6B8618F1C7307AAC7AD74B5E4E909CB3AE810BB0BB71C36CCC489983CD
-78ED725278A3804F3A7B8EC44AC5E29B380FA0BC679BA5433266E0999FFC8901
-DD81CCF1685E8431D1E2B4C463F3E69E276095C4A8300462AFEE7DCA64679E2E
-E54E5FC5937D004BF511C6A533DF733A5D3BAF7E9538D2382D9860A327D2FA43
-A865B1C0CD1C9E8F723B19458499E96D03B0F4BD979092BE132524367F199A72
-75861A9F7DF99427744216FD374CF3B7A2A9F50E4FBB6258E862FCD77B01A478
-EFB2D1C16EDDB6863CE3E804E238FCA0E7D3C6A7DC8BA3D5CB9DAF2F4E034CAA
-57F7829F432A68A28C89E9222D50337A614FBF2C7D7DA653FD561051A6CC2708
-4629B28AECDC3D44965F8B0035C51A0CC63F41644273EB5D33B024D33BAD164E
-8E0B2F9DC03438BE25EF057AB389B1A2689070433B1070370BA03A0F857516AB
-2C2955FD975B63B145BF3352495CA46D414E839EE8F3DF1C6F46E791ED598976
-A9C8CC0261B26C1F756649B0C5C2C3F8CDB3C13B9F4B1BDE6B3151C5BD3768C3
-99E647FFD0E7BC689237ECC0E7CB1A381FE9BE837D7ABD9B75530A35976C6780
-8773D5BF37E6E304414FDA945AC486E90A8EF4CCB27F3745A10674DDEFC936CA
-5383CDA6CECF420686F058CE8640D139BC32AF6885836206CB9F3409BE19B1F4
-34CD81F9F3FAE5D28FF78B8A23E54CCE995AAFF266F31DE208494FE274B5E189
-ED9ADA98FA28AE0E651871D90F825BA9C8697B85AF093C4C54115AAEC0D35446
-BEC134390F4F4D8675E640C94083259C4C103311000AF4A8D574652BEEB4EC83
-4251D0C95B98E3C17EF12804E33B4337633772107208170DBC37930F10A81700
-E9F27211BE84FCA9DC36DD5238C63E9FB59CE0AC24D6707ACBB8E754DC9F818B
-ECAF847815654FE4F5581337E7B3E3D6E00D4CDC078FA7E57227E6CB2A8E89C3
-191A73B783A88A4D34119408C5A8BEE8999B9F7B857B851E86A4C8CFB14127D5
-DFD02F457F9833A4FEFACDEFFE91C71846CAE6C2EF883EFA77722FE9C2AC96A3
-2DBE0698686DDC6CB127E9584A0129E2014223A296400D76BD4E16460BEE7666
-8E444E7C2D9B21AA21B3295D514CCFF4535364463E02FE721F1FCE09EDEDE7C9
-23619E8C8095B28BB1FE06258949C218F8630DC63C1B1470B5155853AF795293
-4248945425C07CEEC368A0EE5F393D4A3C69F0B14F84C5AB07D8D2F4A276851A
-EE76665B86EF7A5395867BAFDFDF464D7DA211FB202351617F518CDEDCB892C1
-37B64C9854DCFCD46EE3576EF777EDF5F4DEBC8DE6D078253FB3ECC1BB1D5AFE
-AFB067EACD19A3E096CD7B51E6479E3437966712E3A22C2B0D4D9F52312D2858
-BF3480E204603E8E942A569595D3DA4F7B605169357D1414585A681A39D11317
-F92AD00CF91BC1E38D01A745582842534FB117D8AE34B3E15F6615E745646388
-7BCEF4B5A9E85BE4CA3A87BD1390642B5C570E5A2440B128B3FB1E2743F61B1B
-50C4E78797EC8DA645072AE5FA7CC5BA7B34A1B3CAA5CB21712E2F157A13F412
-46259A56A7E7AD0805FE4FF5B1BC654B84AB8C9C588AEC8158382CC5C1A9B064
-D4274BBE9CBF1342B9A49A8A27F95B5151D9BE95F172C5E69551D3A6D9C99FC9
-50156F51A65CCB399BE31F9286C010B76934C7B6C66C53C76D3503281B6524CF
-9C6799D94846040976D21D37FE5E39F1511D28AAC960DA2ED18F9294D04A6AD1
-0AF2357429E77E06B2DCAAD417A93CDA7A3843812B45CE9ED636F3654283A7B4
-C5ABB08C29FACD083762F05280C4B8031187DC9A5479971869782522D6C284EE
-736ED78C53AEF75BAC12E7F72575C62794EFA6BC733C1D97A32DD8122BBCA9BD
-DCBF441B9534653581ECDB8D67BD9D824053F47B17A79EF1C7797F121152DA27
-F7E0C30A4F196ACC607F3034FED002F1CFC9171F7BDB06D4275B1B486CBACF97
-02C2106D145618408B820703C071F566E3BE6EBD87B0957941C9D7F2198F9B93
-EA3F6B5E652E1387BD5539FF79257F2C3A344F12FC0C420176402173CFB488AE
-42D98125AA9F80FBE4AA98CEA26D82B2AF92A0B4E5666CC0DCBC8CEFE64FD108
-10327CBA0CB4AE083C37B2CD9E34F82ED32459B8CF8FBB7D5489524CE700B4FE
-134C24C10DDE4D8C6416318C842A1C44BB27B07D7873E215D22DE13187A4170F
-CF4948670BD1DCEA9A5A83287FF081C2C7C9CEA0B18E275EC93A461526737937
-340E22D7F6A5F2D56B61C94C9025AABB3161322E688A55233F9B76D0A40E0605
-B1950A1D62D23EBC8858DAFD6A782325FC295A42269EBCE8D8E97F71850AE3E6
-58E6A8DF3993DE5BDA1AA68779DAB9DE8153C4E40424148D26F25D34BD803AD2
-FEAE3AA680CD8876AFD47BCC93AF56C9E49E23C71B03EE16A2F9662B82463DA0
-03D96606CA421DC7FB654C1584C4104D39E501E74B1418DF2BEAE3396551F00D
-0237074A2432091C7F9248B6337C6E631D3B1E98E7F7662075DC1CC47E710411
-D954C6159A9E90BBFC52B32C9C6655BAE8DC31B67C64D40B0E33EE896DF2BE31
-867E3AFEB7FE775B6829BDBC30621A48DA40DB251052FAA84DE0A27225D9368A
-9B629B9223A39149199E5B9E3E9BD32B1F8FA828CFCF8F917CBB14A5572C6351
-B5F4E8014F6D4762E444A1DA034E2E3C982E34F0DDCAA35EA0C9B952AE7CFB5B
-D21F93DF8804C960CA3DBB9AD7DC3783CCC38DFFA549465DAB337957259A30A6
-F07573E7BACA54948074FA153CCB1E711FDA97942CD007C25D44932A1F79B3F5
-C146AE22C0DC78586DAD8B091B174174C6B18DA619EA00A4B1F5A958A5407F78
-4BE3C7D11049F8334DA6F4E378FD5A76F8DD93CA73CDC3FCE4CF26AA6203B1F8
-16DD13D9A0AB6AD1AEF8ECF0749A1305E595189D77D1CEA365F34D2231559811
-DF77E0E4EA22A38D256FD0A193C380A08A9525E5E22A26565F8337D5CE0F0221
-F8E2F171D64C2FD71B45F4706E0DE45F95D643377D25E3307A7DF6D5C1D3B2AE
-F86A826C0630E514475BFDD0F2795142EF8D3918F38BBDC90622EC11E3AB2352
-21745D705547E3561C03688734EDB6484C8B213E5B4C151383D0362B5B541D44
-1612284B78EAC5B9712A59B900A963D6073361CEB3DB7B79621062FF4ECA106A
-D9767D53B4E8CD708CC5943CD446D0B46DD536E32CD51A6D84572BB74C003F27
-A569A31370E0EF7F44245A4CCB9D638E439CB5E436F109753AD6BC0651F74F3F
-13CA7A354C3CE6D177D825168CA1366401521F8996500CA2EC2C25F85E5FEDAE
-326655199CC34E399F04656DB6B8E3ED16CEAEECAD789941C132215942193DC3
-2CB1D1348296FF695ED398A8AFA228DFFB30B8339121FAF551722AAC18688992
-B9236474022563D4D40590058965668BCE945393861394D95EDA0BC44D428DBF
-A0B50968ECCB12EB7A1DDCDF9CEFCC61022F916B29D4BD58F46409A85AF63EBC
-3E9BCDFFF15E59381F2CC4FC2453031FBF4AEC3DA8E16B53924312823EDBC736
-67561EEFC674E921DFBA38111AC03530B2C4A7CFBA52E4CD3EA13C5BE87648F9
-0BA7FB99DA5D20960CDBB263E97FB091AFF1E498E12E2E8EE4226D6FADBD03CF
-26B58A92C1F9E37940682B87C52F717EF28C4426B2A68DEF9D2EC48D21643579
-BD412A18D16440283498D4A37820FE67ED7988665A7E6E3A2E9400AB45A407D1
-60307FA1821B64A891EDB44A6AEDBF1DF56206FB00FA210C718F287886E5BBB1
-F3BE095058507243C2558E218C5E031946DC9FE6E082707F29F694ABEE61AB49
-766EE742A5CF1162B8C5DD03CC0F2B71195E49732851018A97077CAE46C5B4C9
-4BF929D9CACD7DAFEB4C5E9659C963018A871FDA4B99753D933181DE10947FFA
-67DD9FC25BA8CF5F96F961604B6E552509E0F26CD3C560DF582069500DFC4180
-38424A141E150FA190ED0DC7129965392E4DD3562C96EA86C9E637123A9FD49D
-F23928D98368A7A6F0BE21D103BE02673D0D861935CDD5830AF92CE7718CE4FA
-E8631D6B85C233C5213D2BF517A2D5DF97D559F3FCD854AB92AAB82B1AE7EF77
-97F850BD824F8A19505861522AD79F9B757C88CF830ADEFE31A61A38A8A369DA
-9F32DE3817664CD623D6A4C1170E9A3622359DAF7325392C0CD669BE5CEC980B
-20D9577DCB329DCCC105CD3108B7FF024D12B5DA83CDE622B9612D7AE4E55410
-72E2EE881E2F887C0C360E894776A064B03B199B8D9DF5920C92592593EB3B0F
-609A2FA0746AAD82F712BFEFA9A41B4F372008AC18D7CFCA0D9A20C209E5DDEF
-79EC20F278F9932504F48D5AF7C649EDEB2DD05EED4AFCFFFA4175CC3F263D1D
-F3DFCC348E168C936D60CFECD934FA8AC172301752531418AA6D6092DE018118
-4614BA276C954A0110856AAD8CF198162B7F5B6CE0E57AD7D59216F9C9F18C25
-DEF6882630983621E807F761F54D2B747D27EA8141CE8B211BA37A0917CBBEBD
-E806A6079B0416637A1F17E6595BD411919BA427EBC900BC4C26193D358E80CF
-97ADC20A69A46B87330BD1F4D7EE56FC49EC893933E56E93EB679EFA151FD756
-CDF399DBDEC3AE6BE323A0B8D0C412AE20579DEAD53228CB133647F90ED654BB
-A1727394F861B7CE346AB5BF9411CDBF9EEB6E402768F7EE12D7015BA6895512
-E66755D22E77F1AFC66BC7E86C995A7B55EC7CFA407E699C2988F0C331037B45
-0A2732477AB8C4DD316831C00D37DED6B0BAFFA8A669F6F9ED86B87B1360CE4A
-EBAE9DF3B6ED0772520F11EC5AB198EEE4AC6B790F166C6C049F5845C0B8E945
-F6BE243B1E5CE283F56F5370719BE00B87C023AD75EEAB1AECD7E59A0D2E4FC0
-E42F6FFEF078F723AF4719F37708DE4DD729FF97466D54D3347370A682FF5A7A
-E5FC06A291E834F41678823AB17E018B96820FF950F35CF42348B9BD05290A0F
-21836D51ACA7226E7FDBAD4E76B1606C7BF7A947F6BA4462A3B55E6BCC031231
-DD02957D12612DD62856B635D18E8D080D2EE3B3478027248A6E0E6F4D1E9EB3
-65534AE7316EFEBC48BCCA9992716FF401F0DA2FD9641F90A674F3C380FC8AD1
-DC6C49FAF7EDC335D12EE4D89AFE9D792203B322342046560001A248F1C6EB5A
-C77E7B0423E7A35BC5BA5A3D00BCDF097B51C5F01351BE8A5B83E92251A21C78
-9D2F9F59EBABC7642167CAE7250C117D238E1C59A11BAD2132FDD9EF02600038
-C51BA12ADB6236ACD1703FF2E7F4E6850B20ADF8791E4498740EDBB9ED6366F9
-C7F055A00EACBEF05E186C75646E17A210C98039CA7ECBD80B2120DFA03AB8B8
-340E91BDBAB68B68873C5D3F75F84B4868859B49962618EFB533D2B7B29A4D1F
-359567B4B421F17A4AB7046D18A8FD2B72C60CE7BC18B03F3313BBED01A92C84
-CA966F995BFB72423CA92BF9FE692513F2D4048A7BF291A7C760D595DD3C4FA4
-F46EB7A8F3DDF8666B4AEC3BDCB8185F4E653FCD22E757D1743AC21CD0523D5B
-40FB7B37A68869EE2241F22839BE0BBA8B474DD7B46C7B07BDE27DF25992E116
-CA4FD485BEE9A3B7DC963D6A5732DCF30CBB4489E3E9DB2B0980107D27908AEB
-5C3954723E8CC58B7213A7A766A791E39338EDB99394E96624861528B2B3DDE3
-BF5BEDEECCB8AFAEDAF8D03500F1CB09462DEDEBD0CD4B3142ED478820182E2E
-D7305E3C6862DB18647FA4C7B861BB91AAFD8FFA5949E9032CF01C55A83DF4D0
-9DDFF4D6511CD14D44452AD029F34572B4628DF7B548422252846978922B78EA
-D67189A3BE5CEF48A62FF71C4C5DBB638B1B192EA57331987426C4096D06A842
-EFD88456C891FB0C6CA22687F08EB410DAE2F3CA22C5D0D21ADDBAC989740543
-4A8522ADA15B8AF4076BB1B7D5DD283E33559BA5D0E03E5749DCCA325FEF531B
-DA11FC4361A4588F4724AE92953FAAB1F89288D7BBE037476C6B6DE6B78223C3
-71E83A197C17A865F85F1E50BD629ADC01949790BC3243CAF7EA5A9E8A003ECA
-8BF6B1354878B6634BE683DBF4509CCD046DA1A9EAA288D5CC463A56F4C8E7D4
-B447491F66DBBC161708F54F7D620FCC555BA64611FFF64931081509FCFA3DF9
-AFB436CB629F1386AA61CB1F1501E9B0C4C5591B090B1BC5A6620258DCC31C3D
-93E69DC3D42DA3270128361762DE5C1DBFCFBE57A51E38C896C79EE98FCF9B21
-35EA92B469B1B3BDE4D504120A309E7FE344187C0761CFC86B0861CAAE985ED0
-4ECF2D9676C7406408FFB73FD400DA21A91F3B5F804CD136463DC6A71630719F
-C4A45752308DBB5E2741124412A246BB643C74E24E0A6CF10F4240EBC27757A4
-3B2B9E5C4611402993A1AE9DB26D651ADA1C1A5FE181317DF233E93E0F11D0E0
-0F25FCD5EC720D58F535EFA362153C378ACED9818890841AF6358F26A1370799
-60ACBBA7127A5A5E9E6324C1B8087D92453447927403C42396C5322635777B5F
-99DF76EC0CC9D3B9B30850856AE324DC905C2393E902E770238C75029B179275
-44678838D28EEF84483EBEE73D4E0B0860A2B0B46F28AC9550C144C4DAA2D335
-38CD1B1700C9D487CEE07A66B977AD0F8350F16A3614E712C5218428688A38E9
-C9B8CCA80FCA358BFA969B847383FFF4A93EC09B2D5DD637853BE78390F61F8E
-5D6BC3285F9E9A26D4EBBAB1E35CEF697AA93F1696FFAEAD345DA573E22F40E6
-B8814756D8A9EACB618D80666E9F37C79EFF082C0B863C23FC885E80DFCCFE0A
-F6DB1446B294E1E3D2768733597973812B01825CC0390CB04A6FA323C6C98558
-64105C46AE092DE031A80B844473E9BB13E470E23B858ED2005829E5D062CB10
-DCE578C393CA6B83AC2FAA34F2747A5AC7026EACD67437A4C1C3352E97C1C0DB
-89FBE531ADC4C06096318F39BC89A75122322F78E8507CE72FBCA85A66BBBC78
-720B4F7076C8FEFDD60CC3B1E315CCCBA6406267ACCAFB4750D68DD67BEDC768
-27634794D041FAB8B3E164B2E36462695FC683810B70025A853D2C5404F8AB59
-CE87D1B6FCB042121A4136D2C8F556004008C2FEBAC898DC3751936EBBE00A42
-90A43E17F07CF588F7025A036D01017D2D346365DB9AB316309360418875EE6D
-8EEE0C70F8B40CF1F40B00F01064B4B23D2B5A3BC08E5803F97E5AA60FB36E36
-46BE3831440B435E0DE07DC286385302AFB71A7F1DB5EDED869CFE50A2E8288C
-C8638373BEDA9D946F94B523F3A1B628EF1F7F2750D2205C3F2E42A3DF2AA36B
-5FC794709EA1124A04AA3A20E5BCC3CFBD0FDF7282E68304765D5E58493B6AAC
-3DBA40C5C16EA10309A9D2C3F20736BB0AF211E8C2A9B15AF48AE282C8BBB3CE
-DA478B58919797640D213E6C220325598A5B5C5E61831E8CD65B4FB6BA4AA07F
-4CB4A93C4312FD5F2026A08BE05A81577004A884C541A009EC21EE88D0F05BFE
-49B5FF6D2C9A1C1870547438EDC4450035DDECC160AA4854501DAC53E9BF5EFB
-DC8EA1B5DAB5BE76C14C9C1467B19107F7FD499E8BC565D2861416BB3496A1C0
-B1A78AF5AC811F11BA15D2B91C7AB30198D460C7DB4ED865327875A88AC195F2
-25E85644D4D4EC961E6B7E680BB9B3CDA389F626AF440A43FFAC680C468105AE
-68BCD8ABB140E99A89F4561376DE5EFCA2C18843C08D1420EB5FA48564D93D48
-3C698DFF9472421F803F31C71B6DACC8C772C835673A81D7A004DCCE980E4579
-6FE471BA1215D2FEB05B53FB4A96C103EA57E37C476C4385BF15BC423DFE2EC8
-E37A17B9AFE7080E8524FB9E17975DDED9AA128AF0971204325492AF04C049C9
-0CE51DED85FF1ADD687B9237C8CBC63FC98E773F4AFF8C76DEC9CC8B2F78183F
-405D22259DF2A97E2079C96E71359CD259ABA948F7CAC02A25AF57124424B614
-3701E8CFCB969ADB8B152790625D4D930465942A7888450B28E3817515CB78EC
-001AF70FC89C9B0B4410F5AFBC0C2E31B392A504D9B837FC11C0AA83CF76D370
-E9FB066154560B0C9B3C88E8E2C2ED0D068B9C2D2A5718A877BE11743AF44B19
-49F7FBA2E06B04009FECF3BD076F61AC82FBE2D73B31EB522E6B84FA92DC4BAC
-8B381257FEF6AD2AAF67E353F85856143FA73D3C16992C92F78F8715494AE00F
-AE45CFE7BA644CD012EF333EB754BB92494F4CB0EF451ADE345544226ACED463
-911BF80A5323189B56DF70A187C3536AF368CDDB842CD99EF9A3057BD74AD5EC
-FFACE34EC4FB0ED013BC413472AEE6B50E2EF8EA98E8481F89F9B5295A3F9695
-D2EBC2591299F8C4BE2314741C3FACEB97A76B6805CDFDF2070D02F09C54BFA7
-BF07F679CF03824A52180D1E2EA60B85E454A8B914E61C8D8C0BB1199CE1A349
-435D1925D8E340D5807D4AE6B2B288B05D36E05B946399E709CF6050F23A70F4
-E94F7410EF5F197CC2405B0CF9C4BE046D87EE5BD3BF2D4B411AA5F1C6EEFE24
-726217B48FC1D21DCA2D02E7F262A51AAA6588D81762E628E34FEDFED71517F7
-6D3C5D727914FE7DBC0843284C7FEAF63DA1CC62A5AE696529B303D6B5259608
-C8A63303AC0493A743A5BB8AEF847D731B181EB8AB1FB6010064E184654EF3D3
-D317FA1DECCC79E0B0534C72E5BE4B73A18004CE4ABB6503CE791306F3DD2A25
-C29642DE8D72887C87399A1FE26C6CFF75A3C43E4EE90D7A8389A5D6FF10DFB2
-0338157062BB9543900665CADCA8192F82866BCF1AA172134D24181BB73C9851
-E50522826FAFFC86930797F4BA66CD6AFDB5445227868A01B4F9A9420A3BE043
-79B5F7D6F9B9D2218E00CD2CCB2FB7F6E44CE49AE8DB889A51C5DE1737E51412
-59352A2FFC350F6D43D40D96BAFDCDE3992CD75B121928FC96FCBACE5D7DD027
-14B09F7D191300C150BF7276A2B2757713ADADC7F0D14BD1CFB447C835DCD990
-0CB64EF703D68ACAD7D4AC5D9F3842C947B525597F933BEA2CC5746FAD83BD81
-10ACD1487806980B3FD59310524CAEC6252DE79183A76831E9F3C2954B6095B3
-579584EA69C8CC7D99F55EB641B5F86BA333CB7B94B9A13FA72DFFA4BE06BE86
-507FCDD92600D37965A14A1E175D90ECBB3B20EC8FF44883EA2264FCBBDBE95D
-3F5085FA68A4252A97F290FBC6695FEE43C6E452A3418F5BFB98AF5FFE3F4D35
-0E47C32B5ED4AE68D13DEB5FBB84F293902B2E96A3FBBE76AC1005A604C5F99F
-1FD73C282980E1BD0E9B8194A329C91D45D5E393DE4CAFEF431183C523D66D1C
-EF5CF4571EE3FC150470E7D41B2A79AE5FEF7C6171B219A5E1B400639A0FEA23
-6FE826B0D28AA7CCA1DC54DC37A427F44CAE4202DFB8D14C9A2CC76244307F44
-93202BB02631C647EDDE6F88164B3AC1B2A722E89BF70271386A7DD95EB18994
-07039945CBE7966B6EAC6953F3D7180C74751DD889F322DB13DE66EDED56AA50
-D711009732E89DAF84DD669B3BEBADAD3CA66CE12C503B8252F6E104E886369E
-F6F24BB1BD6B06F7D1DC70570496FEC30817AC65AFB371588D834B07E5B548AD
-AB22BBE4D4EBED8B179E18E7F1B70609CA2E243C411973A81188D36D378DAF64
-88F70FE302753EC1785181BB3A58AF510128F8C04E75592A7EAFF73038B3A310
-53DDF67A0DCCA664E192A9D4D656970D756076A2C17FB2D79677C6E2655601C2
-032845B719455BBE955717214B8B3B54CE7C0FAD08D1ECFF17308635C31C259D
-8FDD354F89D0BB722322FD683CF9B56FADD4681CD785D10131283F7AECF05347
-2DDA332596BBDD0ADE4B8C3084136036C8BCE902D914A6088AB767D2547DE951
-788AB61F984AEE1F907ED32D7C8E8F959A12587E1DB807EE58512D4792AE2239
-D1BEA21C55A752E5C918E1EA0362659676E99715EEEC6A6130279F5B7964413B
-79BC832AF158C32C10D2F9992F3176906BB59C9050C658C6F11025A6C976EDD5
-057533A619CE19BF64536F7E36676201D38B093F4B8381D60F0EF5049D3D9751
-E157DD2D563CD5C4F2B4A6F804566A63237013815A9E9C518708F026A39B98E0
-DB478CF8BC6D1FADF49481A2ABD4CE9A02AF16B08EB7A9803BB3A4C359348962
-2BE5538D81A7C68373165084A9E287D671F6C64FA91ECAB89292C0E410386BA7
-0D7754CE12D252A82E31F5D329AF4EB5A105A197C57557F42217DB6727476A95
-9EC0D6CBBF9C8A01DAC393B235330D1BAE4E79D99F83FDA591332AC50C6F9C78
-9F596485EAE5F4B490262E5454C9F4945B03B0CC32FEED334787C5D57431F29D
-FC9887E5690F1A4FABBB0A3025068CD0759762108F1FCECF4ADF18EE44158A69
-8F22B3F394E95553ABF58FCE5D183938B858908532897B276CA19F39ADBB04FA
-3F7252F4EF9E404935FA62AC005AE30DF45AD89D0F435ECE364DC351544D21F0
-1362D6CB78855480FCC141A897B1E90A843BCB838B9F07FFB82CB71B74200AD4
-4D42C51FE8037E39E90474E1062322BF86A39B2730E62A3E432F84F58CE0792A
-B6FD67D55A7310F59AEC98BCAADBCD3FA5B028E18CE2552048E94FB122B0415B
-026D62270AD03018A9B9F50D07433855D4786771DCA34ED7210C7AF85EC54829
-24BA5668AF04264843FEE592FCCFA96D113AC56A788B3BBD637F68D23EA0877F
-48E239820F549064C66282C46D530D1F08C312831657846B7641C4FFABA2DC66
-83C3BE45476B53A870A4B6A135F0E48285E44A5EE345524FAE0C877B1A8B96C0
-EEFB12C8D7322BD27CD4FC05F998C94A5286DBB74334FB0AAA3BC4CCE4B3CACB
-48B394E8FD2F67DA6D8F5D8ED00CA6325F1ED18C561748FCBDC3CD23B2325198
-CB1ED09DF41C62D1A4FF8015C595D6FB0AA3D221F37115B1429E22C5E3F108FB
-414E0BFBC58FE96051DF7ACA92E376D6DECFCAE0D1C21A2F534DACFDBA5CA19B
-81C03C6152CBC1430519D24F11DDB589DA8B33FDFEACFFE46B3412C1ACC255A4
-817387B2E9C16D601F1BFE50959C4D490C82BE51BFDBD5637C587AEBD18F203F
-EB72D995B246F3C7F81A27EADFC7871010BBCD52F09BC4141E80BED4E2DC2F0C
-2F106093813A9F65C1A17DAFC58C374D4635B4FC489FF7931FD28DEE7C1BE63F
-6DC22DA882944E2B60FBE5B45E70686E662DBD7FC6D89D0B039EFC7B7117963E
-EDF3A4494F6E9E6E1A9962E66651563E75F932D28D4333122C46F9E4D4FF0853
-C6C1A933FC825743EF318F151BCF5135214F3CF576E2A395CB0ADBAD4E9B95A8
-D93800676704705E9171210C2559D9A234EFF5892A32DC708FDCC92B500B9E7C
-7CFE31307113DCDEE3592AD39B07239B1672F5D749A282E121C498766C73E436
-7D1AD95EAA47DF8B9DA953FA16067B370A8B6ED9632CD25FBEBF5E270AFA120A
-78833DC4DD2FCDBA9B45B095EC54D3A2C0B5BEBFF21BC62869D7A72DFD601870
-FA5BEFB87E448B7A2459592638BD35CBDCD7E8A20766E19A95CA27FEE2AB9A9C
-8020F51D85314B9AA58105B459E1C8A6A54244472E6794A55C71BC1E511F61B7
-0F8169F64E2D9D529FD78274BBF5E293372DC6598DE227E9D3FEC45C982A48F5
-AE805E5F3CFB074BEE0FAF0207513B7A73DE599303B697CF6A82C07F35095A99
-A97ABFF1E810FCAEBB8AC38A4AFAA29DADAFCF4FB3DD9812F2B72FDC1077337C
-2A693EC9EAE4BBF118DB6C82D5AB21E476A7EC24A27D510E49CC195D5B6B55AB
-C97DB4352C67D1BF7B7C95E4AFB0DBEB65863880F006F9C90D694A1DE0ACFE1A
-AE5D3ABE41A314D82199DFCBA4ABF4CA42695F34D48A8E95D522AF81E0E308E1
-67C6C3B13F1AA892A87434929D97468BEED681D64256F0CAB29F448B270DE84B
-DEE1AAF310A1D7C4F2E50ECA1F708ADB7C107F94F2C96F031796C38F61C3CF7F
-D616C00955F1679ABF65A35131FB877514D0A7E1028A6DD96DB5F0EA7575B9B9
-6B896B704D987E1F4EDD3C574AD3C9227DE05BF41EBD6A53C3F464837B93D878
-9254F1B0BDD8DC1CCDFBE56388EAAE668EF46DD8BE9CEA62E8C3A96D2BB8C6D8
-07547FF2482C2C176DFA0D6A07973669E9288332C54E95E2716EBADDF876B52D
-8380A3D57506C5BAFE03533A43084CE05BA615C4DBF36426976707C93D5467C2
-E4859E0E74AF26C810B96310E7A3EA957A49A5C63066B1B7152237B6A535AFAE
-165BE5D0406B3325A6EBEB6A54259277421FC708B70B578086C17E6C8734A33F
-0B0D3A7D0539A8B097EB86CBD646EEBF5C8E949F9B94F2D91DB8306F1DC9C37E
-0F78898C971BF910142DB71DBCF6ACA46819A8B47AF64435ECDAB0516FB6237A
-901E2352E26C146A392438A51F4D1A92400EA1A67864C9B6F21089A3AD215396
-754EA0D93383D6C8768574582C170CA0BD42DA9665BC1C5F66DC514834E1D98E
-42C639F6374122D5C6FADF81BD66C47D98BF9571D9F90C5D1CAA57457F4EDA9E
-1668AB12A189F93D4A40AE0D7EE826DC4A5AD70BBCCEF20D6914225E1EF72A7B
-C9EAE771AA0FD25C0DB686443B8ED1A6D1D26692A74F79B0AFD8D2E48C95D11E
-5F4ABB52DD5C5050D4E73A078091D6D1EFA7F3E98DDB29FDC8FFC4BA01903818
-1CA076F594B31D8DD04CC538223FBFB5C75EF71B11E4EB53021DB199B6CB09DB
-EF34A7CD7103895566ABF54A39899681230244650981221353AB1933FD3940DC
-00FD5F06F9F408264C22B424516D35200DD7B13DB55AC4C48228F05287390EAF
-4DA76B416D9B7F9F994C6202237A63C0DC1A2ACD2EA2E8E47AB8C4A22999C26F
-B0D6620BCB75FFF416F674088CFEFAADFE0544940419A8DEFAC22D639DD014AD
-389DE04C7868A122372AAE67D61D006D873E6A1D0657A2CBBC128CC590A88269
-3842A04749525B55F358262A287F4E3A1DA9CD2AAC68A101C4857295B27CF5E2
-754CE0FC0A36CF1B6E1C26ED08F52B439C3A922E8FEB0715898E5E6A42BDB238
-0D440D598148AA99CF8EA1B04EBD9759F97A7CED07E5F591D0A6A17E24146433
-A38CBB9477025F863E0D8DFA52341CFE8C184753AE403BD2185FFE7F5BCD5B12
-5C42D8FC3EA8D53CEDF414E7614A20609501BECAEB9D942318E78502215FB6CF
-04B81CF5E88D193AAE300A1C90A2DAC666D23FA06A3BEC57350EB9185B9E54B4
-9AE67288C4D008F1F3ED4DABF4145B15BBB388DC472490622CB35C7F6C286BE2
-C0A77907DB98387D1B1B190247E390E16B2CFD5EA707A3264366E0322DCB80F5
-8F82D8E8C1B747F4E7FE928B231F4909FFD2E39CD86C5DCE3A7B1A7CB83A4390
-206B6B1945EF0F48705EDF0331BA68139ACC21274D4C6EB5D5D6FB8CE7B2E05E
-7F5A6C22A2126902E50D071A113D30681A52403F352787841F065E8CF0CC7C67
-D55E9B57155F6F2369C2D425DAB9D2B10DEB9DFB5BD5615CE8B969C0A018CF35
-5BAFC389E312DD856DBCC244332D6BD99D0334F9227466BBECF77618D20E290A
-3348A7B9C141BE89C5A2B278255EDE357C7E55FA1B426FA1B763D5E7079CC440
-41E7539461ACD3931460218DC5ADA1C06594CA45EF81A7D259442B17CE4A8413
-E7C7204CE3DC165A291F139BFC636D006B95448520068FBC4FCD2BC7517EC809
-5CA29F9C47B3E55C87F0EDC30F0616C58284B7D933B310725656BA12B719E636
-F1CC9211FE40277C20F33A8A6A2C05F0405657FA2A4FD6F0769E7F3A02C93A2E
-F431CBF3D7313BABF42DA20734FDBD499ED2C1423A74964874215E0207F1A66C
-03A49FFD47DFFA2A65FE9B47FAEC76D6E2A8055D91C60A84848CA3B4FA763605
-7C12DEAEBB30DFA972B652CEF7CCBF90AAF513BF45CD9F59A3CE7B6C3DA95609
-9C06FA9D04B04C1636CD9E336C94A0AE74251EA8BF458826E9104CBA8544C20A
-FD21087D4D871836C34C0505558503EF25AFFEBC3DA9B0A437B59ACF1B94B7F0
-4399F18A5A3F75A6BBF5AEF2530125B312332E2E5C0D4569A8EEF937BE7014A4
-33B69A36FEDEDA9717A21B5DA1F4D5A9203883C452EED8B7C0B58C15F1445D81
-336B52B5C78439834D4F845CB23B5A752A94BE09D31307CAE989C71C569991FB
-4DD3A5F7FD7E8263A469CA199518348E32528512F6C568FA6AB10ECAEA2AAE6D
-53BC3E3CAB4840A81596D398810B51A673CEC6804E0CE4B158EC57BC24D3F8AA
-E50A1F6979BE10360809324FCF391A92FE0CAB73E151A0CB7F6BB7647DA12A82
-F8441DC693ECE87E1A8E29056D0228F44C89AD998F301B049D082AC3DC66999B
-29325808726B24C2E74553EA4B54A1F161D993C395DB1DFA53DF174444CC763C
-1ADBB0EADDDC6641964824CD576A3D15B36DA9FF58C1C48B0AC937EBF7F37DC9
-111AED872931328A38BE0E2F3D469B71DACB389DB62EFED2EFE99D6C61F64528
-0ADBF69DD44AB796D1FBFA1BFB1E95D5E1D05EC6979814B4271C0273040F9F64
-E5AFEAF041441C5A7FE10376BDCDE5D2214231B73DD103D3018637CF85A7D48B
-886EE0C5CF4D61F795D32F826D246D0E34C66F1363FE24866ECCCB027307B6B8
-D63EE517BE51A3870F5DE415EFFB856A88CEFC86E14D9C105B88C09C994BA927
-ECC43E483B1673C9C37E20737FE1917A92C363960A309C04FB55B1988E78BA7E
-DC83A62F62A4540B3E3E96DF829A471C2B4F26E1439A7FE909451F0AC3E26B7C
-5424CDE840B6B796380951A13BDBB1C8FE1A8025B3F3DA226BCE60EFF46F7410
-5CC075DEA929CB3BC7B452B09702C1DA8C21298BD30042E9E0A6AF4AD002CD56
-7B0240A968974D29C02023EFADC5B26D64E44988BD3656E870897A35D6560076
-4231B1201AD4B5FD02569DB3E73150A86415397511C2837ED74411C14E04502E
-499C6508AF2535A48FCFF58519E8B99C00EB32BF52CE60A39AFEABF871742C13
-56EADADEFEC86BDAD846D8CD131070F746662C891128E5EFC2EBD1881B47EF73
-7D14F8A3A60EF297F01737BDC1092B0022343129D890C0B3FF9A539A76BD59DB
-DA705129201E73DA6C838F88138D1FAD19A2A2E24DC830D5A86630B83D7D9508
-72A46557C14CD1B5564F6B95B44F1E397A9B24E36825F7E8D6010D2C8F8F0A99
-7E7BDFD21A36C298EC79DE1D56BBBBCE238E14848C811AD97A31F87C1BB9F967
-BDD6C056D9122355199F6343A6E9E708A06C569A0341C01B5BE3E2369BD9CF93
-304169CEB92D8276CA792E3E6F65478BA8AE1BCBB5E095D26D7618EB063C1CA5
-EC04F94748CFF5D31AA80A1F62B26FEA29BE66C220F07F2DB9E61A851F76DFF1
-69932ACB58BB1C698C51482FF1D43C0E59AD36B6B859EB949C2883BC08C3B522
-DF698CB969EC2CE8C8FCE65809EF7D3CC936349E574AF42AFF0DB9A4C34CD528
-C2B2955B82ED521ADF4653FFD6FB3CC47F97D25269EF3F63DD3D2F35DC6FD4BC
-A7686C50EEB7BB3EC306A6217BF74AA0034707CD1A6EE7F8244B3CAFD70440A1
-DC3F121F80077D3DEB3F80E3BE25C78FC013F2529E9E4D1FFBE582023D7A4A34
-5787B010B29C1A1D104805756FD4258E042C8647340844F602937216C9909FD3
-38F65529C2AAB59E7ACAE2A30F19A07C545F450BDAE563BD9283C68E45D714A7
-33FE1D41D5D813A288151A0C29D20A4E6613DEEB985ED590820D41EF482D5EBE
-6A33FA6057612F091CFB5968F8CBD0671ADE5D83207AEBB2D6B080AD0AAA3C6E
-FDB99E679ABE42DD5278D4BB680EB4AF4552435AE6D236EE36FF04206BA398B8
-D61EC385ED3FFEE487127983D9CE7EFA204E2E2C7C5210DF963DF6C85A40DED4
-E8C0102FDA57DEAB653F7DF953E78B41DBF03D30B8534E0EADA9340BBE8E4F52
-78770C538481186087F8F0FC954BFDA8CEF492C871D45BE12D4FECF1B54AE8A4
-B70A87355824EE7268005161DC45703D31BB7E24B7A55F8490CED732
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR12
-%!PS-AdobeFont-1.1: CMR12 1.0
-%%CreationDate: 1991 Aug 20 16:38:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-34 -251 988 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
-59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
-51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
-DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
-AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
-45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
-821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
-96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
-9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
-26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
-140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
-1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
-1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
-377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926
-2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E
-0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A
-4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA
-F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16
-FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2
-4E82E498FC1B42722014C6B17DD12335E62AA3A7E2B9C7696EFB68B5B0BD46FF
-DE521645629F982F465D160C3CF5FE8E5E713DCA6BB454201ABB90F5DA64546A
-7E81240DD20BA52A5641BE7F49591FB4DED72A9F0C5F0E3FEEA3993113FA3573
-AAD8BEA19E295ECD63AC355E493FF904A334CF3C4B2F05D35D1E97B0CADB8FBD
-BDF8BBB565CBD97D3306FCFED92678953C8A14C1CD1D6DF84F34EBB794BF485F
-6D7B029BE279807B4460876AD864CE225AAFAAC07CA5CE89CF435AA949F1B05A
-C3F5BDED3E57529B5F16B278085AD4B08420E86B5A7321E45CF85F66532E5F99
-E9B6C4BA221A4AAE20D6633E0A28B59501410FEEE3E6E473050F688F6032C498
-1F51813EC2625E622EE53A53BA4711B3A46DE390DF26532C4D5FB8F32B125E6D
-07D51A74BE2B345FEACBE3E38C83F63177BEB8F1DD0D928143BBA25AF8CD818B
-8D2AA54444BBCA253D1E3B2944FDE0B5E5ED2053E2CCFDD0D7D3BA97E0879FBA
-6B54E65C3AC870FEBD41E4CAF6CFA5C4D3A58F04576DDB0437B3368BE5EF99C9
-9BF5F0D1A08848AB4642F36D7BF6CACF7694143E15724C1010CDBB5D1BF57F15
-FD5E0FF847B73CF2A6FB1912B353A7736F8CE995842C679E03CB90936239069B
-F801580D8DAEB7F0F7B225DD674A8A9B5BFCEE110A8C0A8CD70A984CC3BF7B6D
-4E21D7B472117EC1F616012248491A5737717390CB8F3D4FEEF179F2D25D4FA6
-8D7053153BA613E1456A800C81D3E7DAB80B2302C29641C8A9A548941070CE3B
-B6573D1253F30ADB7850A2E0980EB519B25EFC55F48D6BAC3E8DED03B7797A87
-E1C4ABC2DBA3703E7CE14B9604840CAAACEF680EA1624570F525BB474A61F699
-37BE7789F0E3E70A2D4537D647E3D592C3609DCB8F8D69B368D373B907038276
-E7C2CB12EC56AC100DB087949E12700BF553003A71FCCEB42D1FBE1C9F54D7D9
-46D54369BF4910824A8ED43C201C7811D6CE6D4B9F80B9BFCCD73FBCB5A371AD
-8CA1C8DEFB68FA5B17C2A1E03CF1E32CD7CACCA8C2477FF7CD07B2A7076458C4
-2185D246390EA42ECB68A3D1B59C0C4D15D7E0C9200A30F397CDAB806E894BE9
-2B550A330484BFFD4E4295231D915DC167B0E6AE459649F2735AC9CD0CCBD75B
-B86FDF8946C6F16D781F877943CE5D7344105C5D6E68D0AEB0D916ED6F0FFB31
-F43EA0D0564FBADD08EE9C27575983A27DE5814610D0A6BE3059D598B872C568
-290A3BBA7E237F20FCC984897882104EAC09DC808B4D067BFC64AF5B9B568ABC
-36E1EE7BD8B802D290C4F1D4A502575289876EA466593D4A19448A9E58068F19
-A827AE46284B7528BE3ED2884D060F95934BDFC43EE060B3E528F05C4517451F
-62B548C21B7111CBCC4B7A586266181767A91463367013FD9858AD9BC51453B2
-441A1D5A4D3F329F5888691EA7EEE0286DD73E7E46BE13E4A1C73051D7D7AD71
-B535DD987127D09899F1512DFB1FFCCD5D4594113A6ECD85A750DA95C221CA70
-6209FD1C073146BC83DFA878355EEF3C29B3B2F6B4584C0B3BE4755DA9EC17A8
-C7BB7AB521E9A301F98ADE64EBFECF08BC19E7B725DE8EDE74DD39EB76105F57
-4F20B42A8A3597E74C5E4E074D1F11817C2A4164FD7CC0C417D0D438621E6993
-F3C6D14EB7FA2A0E7B6EEA91C93F867001F5EB967E072AF47D0980A089ABBD74
-B9334B6E67F0059735AA6217D46215F3B5B65B82B96A09ABC9F87633BAF0CE4F
-1B84D71A52F435652FA08FD405EADED5CB16701CD0731C0AE3DD381F911B7FA6
-897E0ADE8E7861C0BE67D21C92E64F0328FA9D6D4DBC3BAFA6D5B6E6A0A791FC
-26C58DED193F26C0FECE84C1D80BFEDC4111B9B5082ED49EBF0144CA693DB986
-036B42793DD45679C79D475610B876A875DE3237ACB8F5C14AE72A7D5A55A23C
-EBC9C00CC8C98F364B19A259166FFF2369A718DD82C77DE66D0703F706D90B3A
-495D7133178FA6214AF35E63F43E59D7BB251B1F58DCE5174C7FC79AEF610634
-617378A34EF5A8CC75E1E0BC8D9270AF839BDCDFEFDB5FC45AB5E1C5C6E128AF
-B045E23A7D55CBBC911CBACB0947864C29E8E204773E346B3C8A04AD94E1C4E1
-7401269A13ECFFC442CB36E7A813460E74084F4C9F8C5BE067320383AB4E16C6
-CD7FF582C88C97206F8F2177A348F973E37AC87B3BE6F62A7B7633D3861D3203
-57153A1DBCEA06F674D789355FC0785E08F98E9809261EF3CF61E30F3895FCB5
-C296EBD677C1A8546AD76071C1109609EE8EC174E095F0961610DDD78987FEA4
-AD5538F1334AFE06D03D2BB8D82F072A331F115432A1F19023FC1A1FC422EA48
-FB16178DDD19FF1F884DE84674A63E5DF7D8B5CB63234C64BE336CD71604897F
-9D257762EBC5B79E72DED0F38F36506876323C5C79632E965914FC71B73BD0AE
-FEF2EAADA74422BA83405124DBA5D3842A783CB7D541B0057C48384895A42963
-6A9AED15A5BACC748DD935FB252F035A3422F8D0F68510D210C2C0D7ED08B70C
-865029D3FF6FBA9D0770D15838963A386FD6C571EBFBCE7D08B5E73E07920D92
-A09422A17150D02946FF812964F826C12B647DF3135169C81469947580DDEAD3
-066A5F45B6AD472CAE5BBF9F2EED2344C7CBFD7238F73CE719DD3DC5016EBF43
-CB3CF9DEC26DC8089B6302C5A12B1C6B4F3B9EB64B9321BFBE26B15B6A146368
-9B44A744B6C20F48F937BB2D4DAE7E9BC037317C711F2EB7F7C4E3C60BB95060
-B51FBB7F421A64E2B297F24AD7D1F440EF97A4870C831B89C24E183D9D2FA4B7
-9EE818DDD83BE56D10DB8CE787489B9D9A7E3DB93EF4C5B699B8452C9C786478
-E19AC905DE7A99F2500BD0C70EA37B69C4EF579CCB400FC8C16CD5B7E6E4575A
-4895F8001BF11F7D68BF6AB30D278506327972C3B71A08EB3411BD9EF523BE6E
-7ED5C27E8426B2BFFAA95CE557F811BC73B322588BACB5E0BC39FEA701A3F85B
-8D4B5BF47D92F2B3A51C4176399467C2A4C1B862575B8B35090749653D42F361
-CF86B681738106DD501B213B397815E12D84F4A4C6B5A201D426E7601E462BBB
-C0394DC5AD7F137E7EC1403EC2DD427EDAE9143EAD0708E58175FFD5426A900A
-D9A5449EA5145E7DEBED3025394C1C1841EC747B578A2F4DFA92377ADE853440
-71BF551447CEA1982A8B1BD2C845B0FE8187C36941F05AC969BFF7D1F9DEC09F
-CA41DA45F2B7185B3CC34E3601056D23B8C02009BBCCA8424E6FBE82D7450118
-274631744274EA222ED81B7C750A5330B3B46BA0523D20BB647DE888BC644FBA
-768524875C9E7AC767450D19BEB6E593C6AE88585476DDD86EF228595F16C2C2
-8143B46702F15334D97FED2B63BC0E2A2F8755D3971152DB4914C58C52F153F8
-ACE0432436DC37C250CC8710DF036BE081B140DD94FF03F7233E95F9C47515B3
-DB85CCB6CC59853D1E61785F7F7FC782BF0080C3EE64677D64FDA7E0B2A94627
-8E60AEB33E825D1EBDB4117CB450B7FB79146234970E76A4EEBE643F58796184
-BFAB1AB32425FE23DF9779BE52B9C3206433691D5E5197249AD2D2D85CB32CF0
-B1846FF0CA7E78A4A189A7DA09535059A0A87BCC8CDFE85D8133596811E3B2E3
-A126FE300A786EB6708CDEED20C9CD659CFE2CE5C53CDCD569EF94BC1814A520
-1AA4682107B4882DD6E7544B148A6504F82EF0D8FC4782B7C8D736B8DA6E8ADC
-9BA1DBDF6A995E43D4A916D8D14AA0ED29E3FB8284CBEDFCD23DDAADF6ED6667
-B36CBB550070F4DC61D5E248FFB9A0E6D0C1E6E1AAFBEEF059F71F5CFA254A5D
-0302CDA18AACB55809E6581E3509B4132409F649BE9B3107FB31C6DEB92503BD
-F66622A52C00E2C7E3AFFBFA791B1B66799DD09D487A67823BB857F53458B89E
-E56C3A8D3A12E01542362D5803B132EF2BE214CD1212373B85D36BDA3784C79D
-D7E2136408C9061F7FB68B0EF736DD57703308C5F8B1054B21DA6469FA6C71FC
-D652EEE90E4B5AC1D8281217665BA38201EB10F6BBD7C4636D91C87F682625D1
-D5D406A50B70798483D28B2F3C41D31A21B20558A5CE9166FFD6AC2E5C3F6007
-0B77CDCCE8A4E95AED80B3630783DA99059CFC9B9AEE796EE541869B7002CB33
-EB08343F8F20748D2BA77CAFE553BED67C83499FC2B0FF7627339F98ECCC7617
-9ABC2A8D98EF2A2D7F5D2009232CACF2861D6BDD9171DD07A65CC62AE1BE3789
-D32297BB75D31E8BFA7D429CE2A9A147CE886DBFE16AD85F78367B551B740B3A
-D5B804A3D865036DA4A82A1D61D530DBDEEE8F5C8FACC760F24F323B6BA6252C
-0393DC194FF5D19D908DE3B925F5BAB82018F44D83936A5B4DC2C779C5062967
-EBD484293DAF2E6A7E480E03DFF9B56C696CC0CA9E684090F1A77F637EEA1A3B
-D6195268FA8D5A5E51BF4CDA3F39D866123F6347C34AFBD9E46CB6E97DBED3B4
-D358DFA53F44B6F35DF44BD3EA017DD8B10245747BDDEC602D4EFD23AB7004B9
-A1677614D3B3B091E79631EAB5C7CDF20C1BD436696C6E4322B43A5C1522CE7C
-D29D2F8EFA8CC976A598C1CED923CDD4B78213A5DC65BB830D1301F6D12A4D6B
-8FB9D60BCCD2FD29499C0018080AA0490CB5DEBDBE86951AAF7EF3E31207B300
-6CE237FDF45EE4E1CF4CE0D3938A0C47EDBF83F07405A4CC0D32982FD4A3742F
-4A5EAC235B55C532C47F2114EBB0C92BB8FAFD185786A921E1EB4FFB4D4EE0B0
-894A7A55870F146399EC6FCC52A6C77E452D754933002A73EECB16C3018A61F1
-D7131F94696B8D7B23327F64B2E961E08E6CFEE12D30896D281022E06C61A926
-3643335F9E1BA700ECE7E09749462C4742F8B3C3045356015CB19DA4F7A25BFB
-BF1E64A20D27E5F2BC9BD91BFAFE58E91DE8F6FF405837786E62F6432E3B3F25
-5915B787A30E4026896F9CCC4E59DF67E45FA3DF5282D78C2A1BE713404420F2
-978FD54762D992D3D6269FBAF5083A19130F306B8185B771D090C1A984187D6C
-F04A2968524652391F444B507F81C10DD7565C39DEFF14CF7E033751296D3F58
-D6039EFF7CCB5B83190C5876873460C75844B80E5814F00F4A139B4DC22051D0
-D652BB9935B87AD32BA32F7CC90378C58A75D851B0CDF67D02F8DC3A98055380
-D9EFDE44D3FE2A8C27D938767E15AB09102424C244C1457DB57733BA19102F2A
-321E083EDEE209BBD0ADCE44A060A9D74A649668644491AE48A55765D75D4198
-EE34BEC385D4EBCA91B1426A4C863E3599ED5A26225423B55B7691E9158DE18F
-71F29911F33E0922242400AF628DA72BFAEDB9E67AE2EFFA6F513C1130C86B92
-3CBCE096747EA85ADF5E9E1A9275263EB0CB3122529496EF7FD8936FC98F7249
-2C054AE2F03C7FC65DF5FF36564E6973BC0CDE0FCCB981A3A2F88F3FFFBA6334
-9F8FE3385E56C4A4CD12C87068357931F3C25C8E78A7A0A1F8916CFE202329F3
-ECCC48E37DA8DE5D4C7346284A3DF4CB92055F63DA790519801237CF0FE83B9F
-5FDF0B488EE9D0D39875D80DE7AD5E9B3659F839D77EF1389006DDDC0D193AEE
-EC5C35C4D5F4B49963EA9405527415DBC1EDA8536D868C98B4A1D377B06D416B
-DAA92A7B83D78C7137B6316769B0922B59FA96EEE68D6B53228769209B553EFC
-D7D477B0032905B417626E5BEAF5B99466F4DA885C86292E22759E6D10008A63
-6FC01EF558BF5C168AEC491B91A44E2599D0E8CE124524514CE7D85C8EE16474
-F43E92F8318E0D20C1E4F3C94C0BA253B45CE1B75A4C8CEE0E324512248B7572
-09DD7F4E530308A2597744DF5DDE0F595EFA43EA3CEC70A70D5ECC36BB4FCBB0
-2A6D7A7C23710D0BA83E715598CFDD164C8A27018AAD2031E07871CC90122069
-40E10CCD1D252E430B8A198249ACA2FF4EFEC8577A2D1D1B3060E93B522EE044
-D526B3F079748FCBE3F59DE3CBAEF62B71A9EB3B9A02119618A19A0ADD184E95
-5D4F294C857786058B76876391C2B10C02A98D9D9EBF24B17CEAE7E073872D32
-34F75BD0E32E5A6B696D11B922628D812457A0FC5AA599106A6CE8E000438542
-DF76234EBAEBAD4728776CFC0DD4465ED151DEE16B3119CE79C50317B62CCDA0
-FE257A37A8049F268EBFC5E24DD058287244545C2920A9ECC639424387B4D930
-F656BCF3C2EE676DA272287F73A06DAAFDD70F6648780729A9A86CCC785E4623
-BC7FD4BE2CC1EC5585560F2B072F100588177FB47135DEC09B529916B82C3AC5
-D9DE366E5E00C1E821E98AE9A1507097A9152E341D792B86ACAAFC8107E48D17
-19F19EBEAB35AE907B8D5D6A0F0CDA90B96B2BB04AAE2228AB4F873F4BCA8C79
-A9959D73748EF3EEBEAD0FC8276193776C69224184A38327242C84D7AEFAD013
-CFAD7C6C1DE05FD2A0527305E708FFD54E72F733BA384C77A220CCF6035BFC56
-5F8D16D0B9F28DB461D3F48DCEF034D02B089747BC195267B303342BF01AE140
-A5F30EED3F56C7AC702B948AEED75C93424CF3B47DAD20D7E75B7EBA25B9EB31
-42B7D65C1B387D907218F08E6C388E5DB4B29155D30075D72BE3F401940FDA76
-4B1A05414239963EC20CFBA89F4CDCD7BE2F2A33265DB21BAB5CC988CFD11BE1
-4B6527D0B4049AE582C403601460CDD138DC449AF7E8EC16FB9D1C7E3BB1CE44
-68E86BEE15D75A30B3276B15B60A2C8069DD092798283FAF212F7CA2CFECE02D
-99D1D7A83CC640BF879A427CA0264389F7312E6915F53FBB50106012B562C9D3
-FC58B5B7C7C91966F81544849B5CD23B1438A85DC89354B16FC59F672E5045EB
-2CD3E32C96CE19ADE35AD59307E217C92FF23C297502747D4FC1A6A51ADA74A0
-5A34DB9D9C25D44060E7C0FC1004FBBB2E5010EE0DC2BD7048F8C8160DAD7AF7
-453BCDFFF452D3DE7E09C407C36CB3F15C3796FE51308335DC65E4E1AFBF30B9
-7681AC7915968811290A2F4E49F5D0991641109C6E0C2E4750DED4B4144B79A2
-C7356F5F3BC4C0F1DEAFCAB163F8C26353F7D5AD14A81D9EA012E63CF02F93FB
-FF0911C638811D9BD6FF4CB49A9EA8BE82CF09160B63FC65ED85929903D48164
-2A18291E4BEF2958E43914F1753D2C7B2B3C97FA7EDED715F05B0D1DA8B9EBF1
-43F953AF5A9B3E719265AE8239CC4FFEA9FAADBD6E2DECB7D39B133CFFF75E97
-EA34FFA8AC12909E6E23B564037767A7F7D743C81CFBAC9F31A9EEEE5E51E3D6
-48CE6B0BE1E9A0D46F29160C2127298492DCBCB618B2D297F263284F159FA5FA
-F686ABA1081D814035CD803A1E7D335C075B901ED1160EA9B64ED9C1F9C65F94
-AAA11EEA0C8AF61A2AF4511AB16FC7E1411F5BCF3C393462E84A7F564D36D74A
-3896756E4D76E526B679AE3DCBC49F9072F7493EAD1CB21710A4CD84EA9F18E7
-86C5D3AC909427BEF1243719CC102EFC0A46F40297F6851E2DC480282D95F3DF
-0200B15548DEF8D57601ECC98081C733BA1C507D738F451B68A024CC0AE6A785
-F95A0831E2D37B479D2E0F309D60B1D164A30A133AF0CF3AE0FF4EFF1E99D5E9
-7209E1BA09A27F4E102A62E272D01BC5C55A6D6189C084817A3995D4CD2474CA
-8688FC90D0E04F19E5D3744FAF09FAAB2D6A266E197B4890B86021B58D04801B
-36AC9F21ADD711CE23E61DB4E79F47047C7A424353E5DA5121DCCB29AA452F67
-34ED8FC8127ABB32E9E480F9056ED43D347D9BDD41DCCDFABD99C6445838D18A
-FFBFCF8EB1DD227C2BEBC6BCE097298427CFCCDEEF55B3E37F50FF810406F07F
-E77C0D0F48C849741E07E8420AEEF23C43DC9343AF86FD44118865F1967E0F67
-EACD32981EDCCD8F8152C532611B1788A42D353359846210FC5EA61071AF8125
-88548B8F9627114AA123C599801DC839B0058B6D0BD341BDDC51BEE8C2CB245F
-CB17D4C74E289FEAAA947547F47FA369743CBB627C0ACDC7C8195CF5AD024E69
-A9CBC4BC143E2FC31248FA0CB3F702C237EE5C85F53AD2BC39DCFBD72DE6212B
-84300ADDAF562852DB28B4D054C2F308C7FE25ABAB90802A4594601712720FCF
-5C4D492CD39A883F5B5832DEB1E83589DC20BC388E4CEA03FA22AE1C2C09625A
-DFEE57135F86DAE3DB8BFECAEB731224204EE2B3ACD71752B850016C2F1D9F4F
-57311E02F83E68EED20BBBFDBB6972993BF23B7D560E2DB0B3BD1DAE0061F618
-7854A4A4A96376CF30B9332C056F4F754B19A82C2959575E540DF7513F6BE3DA
-D369AF7EFB6C9D5F40C1363E1699E14C55E18E25093588F5142CE60E110657EE
-BF62C0868FF5766F5F398886236F35FFD89E909F6AD0ACC0093E5609856D0189
-3CBD6783B5D6704AA2B06D3BFB14E146DB60590C1FC78BCE82158738A18E72BE
-F671564930F481E3B9058687B1DF14B01D6CF736EDBAEFBAC5A427EBFA03794B
-C493735817FCF7F6C341468F20D8F865257293A8FEFAD10A52DB6A18EFDC09A1
-5B0EE26B3720C08C1ECFBD7BC01C74C552F2D261547CFA65A3BFC2E071C97750
-7FF2D95C27C59AE3301BE516714E69F07CC086C627F6732A7D8497249203636B
-55B52E751E0FE3DF6CCFF815497C38AFA00B3211EA7DAD9110089B0DECD377C2
-B7F8446415B0632F2466373CEF97F89C76C80C592AF551EAC73D7CCDB46903D0
-BB9DBC86F6C2E441491685470B7FE8553CD7A3AC5A0D28E1B2C486744634DEC4
-BDE5B86B232656DA19781547E9A896B11A68E6322E964CC8A7EC22E3AF91B7E0
-9AF2549E220B6FA0B9649668424098AA75EA0A90B790546527B3C6C3DDF52FC2
-2DCB99AE44F020FBC5BDFBDA754A1AA32AA0C0CCFA53765EA45FDAED7DFF2CAB
-EEA13414047C09BD70D488DFB6650DEE63EC53A153877B13093105FE629104DC
-70C556A4F8D9971E7FB67A083B6438348F0A679085039EAC4563E143903EFAB3
-3E9342E8FDFC56BF234FCE1DBA8268A35B57E6D30E26AAF53B6A35F2FB35B48F
-D1395226C222E50E6652684D7BFBB4D7CE6AAB5E4923C8425625522CDF6CDCCF
-423B3B835BEE8E32F827B833AA64AA0769815A03A4F926172BAE556198902818
-4B7395C7E653D999A7E0FBEFC5D0E5635FED826A5D24FB3A9147A54D9CCC6E39
-3562F5F1706699EBBAED3550703B55B0FE102747DA9653643DCF1ED5848DF60F
-CD5F8F261D598321DB4A148C6DA6EA00702B562480A704C2E71CFCE4A2A97D29
-E368D265227430FDCA5F48A4A8D5EE7A213ADDB8FD90872DCB7AD2DCF4EBBE0F
-10BC9AE754BF1098BBE293CA8C20FF7B45B27EFB2FA82A726A4B52E73ADFD0AE
-B6BBD6E3EFA78C96FFF5BC387D9F74FA07AD078C6D38A0EEFCB53A0AEF128343
-5CE0C3372A7EC25228F1CEB24044999EB563663B97330C74831B8EF25A39546A
-DBE84A779B1581DD7E4F3D58618D335CA7ABEEEE71F140038A776AEF523EF986
-545870B820B253813F5013374C87F0AAE821FA11AC5FF0C27CD929FC49E2B413
-1EF3BB49A65BDEA4F6364D691CAD976BA5852A2BAE7072D0A315C6E283C90C81
-6EC7819FEBD0B48FB179B1FCC16B2936C5E9128F26071AEDE920730B0DFE7B08
-28E6434F92514D58B4407B4E5CE59CD2C14451C75BFA4EAF835C40D61DA09671
-F26A9809A6457991B669BFA034F5C6328566E45E4572B80236C4C4F0C1D40004
-663D56B2646D879FC0A4F1198D1C7AAC9DFF8BC35156F276BC8C4259A8DA5A9F
-9B69628937C9AE9101DF676798E823836A211D23610F8B02875FF0C5EC47A732
-5F1B24A455BA51AA19DB7CB18C650D379F5139C3EA3A60237E30B4EC509370EF
-AD5DBE08ABF432E4C4A6A438781FC2040A66CBDDE4B3FF4B3AD3775648122CBB
-6B1029E88C01E2E2EBD9CB0EC696403C0653D2B3002D75BBD38C6D24A9F8A059
-1A21918FC18BDD74698D5DC0790C8399D73605773A053D0D31B844325A56BA94
-AC5BF1E4C62FF6D9B08DB420DED281AAE8AF466197BF842267B322E2028A51A6
-08742198C5711B6F3CB0E475BEFF27E8DC250F8F6CDFB5247E1341F6989DDA09
-0B0698167E3E6F01D936FCE68946B2EB60D1EBC57FC1881F3F3B68860F68B4B0
-124BBF878D5D64E5F20916A1BC7F215DAD6D92D67455C73B558E764CF68CA362
-6A12B3B7F1C4E2B3314742B0FB19585B17EBC756E897BA54354AA72CACCCD09C
-8BDDDA8BDA19E2B9E991DAE922379FBCBCF29272E3659AC77CC99993E7C009B1
-139A2CD4C3DDE2F14DF18DDD8BD9C845B476457F0A4534D680E1CF8F859D53D3
-578F86FE28129D1D9C3740283CDF39B09DDE1EDE265B63A22B6EECC20FFC7939
-388ECABF3C4335E4BE47478A24FCF1D13706EF6233285474A94D03113B5DD48F
-B169C1BF47B7DDA9367EADC60B61519C6E479CCED471E0ADC6834A07749EE2B4
-2AB0320F80C869BBD118D41EDD8496CCB5AC28BAACDB9771A3142ABF3EF29AF1
-CCF29C30B3D9AE45AA7FFCCBF68BDFF0D18773A8365E32D9CFF55EA560E3DF40
-985264AE89531A74BD8E127E8B353D07C2A5D8C7E7D5F443AE233F259BCEF3C9
-8C9F7626408C61EFECFCF64F0524345E516730A9628675C693A7189389AC3F14
-3556EF670A601423FA640248BF387571839E87195BD9CB1271B1276F21AB4A70
-EB142FB25DA6F8EECDAD5B40C75684C95F07A800F41B847CFE6454415B161C59
-6C57B1C79E2284DA41FCD116E6F37EEC95656E197331DBCB9677A365D52D3855
-2FE611105DD2C2D8D27357171684AA286DB4F11D1C4109F1D7AC31ADBE66A556
-D4CB1DD177F0F9D88ED5535A28BDB3BCFAA1A90EF36486536C92EC1638C8FF6F
-0DD1A4D63DF29EB590E9123DAB85DF9AE58E81F7B196165375101E96B25841C7
-B030424C9D0A23FE788E7637840F044DBB8137CC1A6AEF537CF8702E78DA239A
-1F00310E500902F16E6D53003510A34340D31D9CC4716913AF10281A4CBE475C
-0FA814C3EB63FF5FA1B1C33F32A84AB17B80AFDBCBBB6BF1C2F5E24B6A6EBBFC
-820D2BE9AE6B7DB3FAE77BD22A903A6A8A967F8451A4841F07BA55CDD1CD4260
-738C01BA72F553480F89C041ACBB6B90E21AAB64971CBDBFDAAC24DA5052AE1D
-D34B6426C12EEB1947BE9353682AA9DFBC9E69FF5312A8B3861FFA27413981F5
-7228E1969A6F9ACCE2E67CF009B55D47DD2E46570F1B6765342E9843AC6F9F38
-AAB1F8EE5438D007C82A95DB32B8FBFAA09EBF452825F9A83E1EA5FDCFCBC8E5
-02D3087D8A269B9BA9C404AF6F19C66ED45F0A8F0E59548E4902D44BA97676BC
-B5EDE4C5DE24AFBD65FC54DA8559F027D931172DBADD9B7D5A8994E0132D0240
-3495795BBA09011D3CDF143935C9BA2DA28671035F8CB8F0D5A7B6E86694760A
-5B173969663DEDC41A4119990CF1A73501DEEBA0D03FF50610F67721720C2783
-6542027531583AFFDD9173BB0C8FAD6F5895013CE8AB40693B3F86781B7B28CE
-360F65B4B593C016EEAE0E54CEC7C40CB8312F1F295866AF63D2CDE358C2EF11
-8F1A14E012FDE3772321C11D084F8C353AD52A4F7836F75EE68C505F01AEFD8E
-E9F1779DC94F1915F54B1ACDF926C4D74DCC68943A7352DF79AEC6D16C78C03A
-B4F5907272CAD0E54D33FC9C638270A91EA38366F1FDD2822CB6F43CD4EB50C5
-2BEE60F9656BB085FD69BD6000E68018C4D899934F4F8B01C3AEFC2E46A5ADA7
-16B43E4E91141A5D61F92EBE058A62A251947FF96C3B6F49663F7EA2D6E01AA8
-1EED3CD01B5078FCAC48545883CA8368D36EDB44F63C24E31FCFC0ABF9B0FA70
-6FC0FF1E5AFD08D9AC8ADACEEF713CBDC92B89C25254DB9E22EBAC2EF83277E3
-B33B8F5FC784627B804C355D283CDC4AD4F36AF97BDA3F752EFDA08F8A945359
-ECFA936E3CB38180688BEBB439BC52BB7944D37F5461E1FFC444B1A65390665F
-1932899E0BF71B246DB15C3695C7CBF33B7F61E26E906F2736ABD99C29BD45C3
-9B4F1350450D27ED6D008ECDE1C358470DCAA7834A7CCD4FE0EAB64AA8BA5C74
-7E2CA44972638BB3830A7A272D6832A0ED4DB0A6AB1E79FFAC9FF7814C8A747C
-D58428B17B6C6AA690E62B7B44EAFE7DA6E71ADB7D1747DF69DD33604EACED7C
-F273FEE83513E1CDA863289126D79C2B469BDCB2325F8036A1535683F95FAAD7
-AE08E20D0761ED39CD40555B47C8DF045AB774552FE787274E8BDC6688987FB8
-CBBF9D7645D6B2DE4F57B18C53ACF4589FE68B41B917CF69B38A8ECC7760CDE9
-88273727D3D81EC0D1F3F7000197E38F4A5F9A2018527918B2BFC79B4D802487
-97FAA052C99CC8C8A7CA9CD061F5877153FED5772A4305DBB9F2FD576B62AD34
-62E0CC672DC969A5F13D6C1021D6B4C94CA51F44AEA8F125CEF3F8536D7811E9
-643F90A5E33A122224FC4D0F446A080BFB166ADBFE16CB13ADD19FF67ED6A858
-EC976E8782D113C73892B363B219D059D6B68940341C95E8BACB644D0AD16A0E
-2D78A74D4D6B350BB87B30071498397EF3B75C4D5013F4D7C82991BB489E4C21
-F7FBB09ADD951B5010801BFE6E511D9B90DA6EB84DD0C2C6A29812131E599200
-2B36410D88D779DCFFF8093F61075E9D03600B79DBA0CF038910A60BEFC25A15
-0335783812198B168136C9C164F9868B6C121AC2AE1060AF9C03BC6B4037C93D
-CA04B66C02445185FA6E98DCE8AD003F32676B8A63D9388720B2E1C1A6FDCE2C
-BC37BBEC2B343111056B50DD162B64DB4F33B66976958DE0DCCB6956E0ACF112
-DBC21763E905086D75ABBF7208064DEB26F87C283F7E3B65BD8EAC941063C158
-0FB6A76DE2E9D20F1E085652D0BE0DC0536177A0DEC6574B931CBCCC41D0FAEF
-2105AD7684D6D555018795BE42EB0BC5631568701AF7FA8A65D960C42EBED824
-AFE6E2A96668FB441B5D47CCECE2888ABA305EB4CA634DD2E53A49BC9902F9F7
-5F2B7E2F5CCFA7CDFC2ECF8FEC41FC61953F441A2AD85FE42F81C2B7FE067DF5
-A15D63FFF2F0A0DE91C6365A71930DC7ECB6791B5754BF0F4058EA8C8A76CCAD
-7DB11FBEA158903D6E3657F64BA5302D11476711A591ADC421683546CD7B8812
-80421693B42620C2668EB1D8F0B08E8CE974D9465597AA109101F88B342DF0C4
-DFA6374583119B847C8D9BBA9DC59B5564E83128E9043640315EF967D9A7C783
-A3F94B7FE4FC6FF5358C814FE291379F585639BC1A0DB5024F54BF22B02EEF96
-43C37B01C38F262F7060788468E7A1E83466DDDEF78E6777664A452070540FA4
-13EE30E3CE3B5F8A7756BA67083C873C03389A4700755C07CF8A89DCEDA11777
-DEAE579ED01F70DE0F99D07BB9363CC259577AF3FA3D5A673D02B5DB43652999
-22B9AA35C4D377D638E7F040C1539F0A17D37A9D059AA31911612144CBAD8012
-EA27564D7BCF5E321710C327B6D3F161F556297B08A8073EC36C9972803B0225
-12642EFF0D9C216A78AED534E0B832C2A4FAE052F36B0273085B52E4666EDC58
-F644455423F102C2161DCE7A3159479354AAE66ABDE281445B23B54346679263
-355A76EE144C76C12646F9C21E1072E8991FFA2F89E61819CCB21BBE45E66CA1
-D707F7D54FAEE1767C4AC6991AD01974878653E839E6D08E8537A31C256B7FC8
-56EC4D34713CE3A3BEE667E2148D6E854032E1E2A6386F154526B7C7F3670384
-EA2606823DACD84724A94124CE6EAFDFED2FC22754263466D47366EF9B7AE444
-20DF7FF8CF0BFDF952F627148045DEA4FB178507B4CCDEA0F668EA39FCE1FDCD
-89D9302F9737FE7CAA7F93804AF631D8C197BF4B3E81C07CEE4787C4A2736DF8
-2410E10044DB3272CDC28050FF12F9CCAC93F5BABE90CB83A126346FD9E3A121
-5AACF9847332CE1F8D77F5174333A781186CDD5D7A1C587B1AF60BC015D2EABA
-7F67037F662C3487190799D40C5EEA961D5B1F2ABFD628F544DC3A971D0CB4B9
-E78FDCC22DF4670619D3FE1D38F1BEA163575EB00BEED368058584D5E31A3D09
-C60A1917069AA83C7F35A31DBE215F3984659704F92313BD40AD6318808E0897
-7F4A347B29B3F3943EA38FF66026455C52C949DC4674DF291157129062852C64
-98F2D4EAC6995E1CD2F563C1F715313BEF0B5577E4596FD0C02FE29C7F4CDE55
-FBC1B2F7A735BAE6C5CBAFC9D03DDF7DD526F1B4527EBFDB12A06B2D209E462B
-762B2E5CA4B1ADDF98DD874F23381FA376B7F116CE7F1F4C1CF2F42840662EFB
-95BC5035CD6ECD95B4BED82DA1DD0689B4C7F18CEBB2D7C33E50BB856372053A
-1D153C1580F98C2D5E813700DFA8EADB0DFFBC6E9CE035AC579851D282A0C4AD
-B1B1FA1F6F1C694C87E550D1CDEAE83DF259F219D3C06A5DFE646EAAF1D74A41
-700CFDB8313D01B5251B43449516FDBCA68AD69748A20AA028A2F525BA111B12
-88EBA8C67E5B23B606D3C524B2B3A059AA7FD77282FA28C6F6DCA7635F828D74
-20490167EC98BDCEC5D753DE7834696ABA87624038D61B2AAB32578F38DEC9E4
-2751800EE57493C00E6AC97B92287ECA89B03253B3233D815A2B35A21AB9722D
-BB16F31EA9D73286460FB97853355DC4A1589B7025F7829E35B6A294651D020D
-87CAB97991EA91C5A09F4FFA042BA5E1E6C9968CF47EA0BF50D2F984F539C85A
-090B9C6B95EA1AB2F1699A14AC2161BC0A2529E5694F5EB58D908A9B15B0C8E8
-3186490485CBD543E3D5A8041D71BD1C607E50FEC13B4EFC28E98D7E90C53AEB
-120003830BED4EB3505CB0E371EF849813872FAD161399F62B410424B0CE1065
-2033BE50281EAB588C5D3CDCEAF1958DC79D4BDD15CD5FDA46DB0E9EDF9F000B
-909F83B5DAE35F2BDF66165F563E29EBB5686EBD7B0733D83A41763113139973
-301FE4E447B4F33A059D300A471D80EF3FB002107CD56304E4317C450870BFE7
-9035F1BEE06A30B220F25C1040B1E9AFDF20158B1345FE11816004B4F1983ABA
-AE34176148CAC1EAA36F0DB2425EBACE5600B6CFD12FFCCAA364B9E21547FF82
-34DA67D532ECE504CEAC691611AD0E167D8E6C651482B7AD2DB150994BD83B66
-F5C8E4E2501BDEA0F70A06709DB3A2D0A87842A99926EB690E3C66B0754ACA43
-4F523D9F2E2A0089C5C00AA4C455A4F70596B7F2BAABAA5EE63812082E4E8292
-5CCBAD15D10178D48DD38D1C6C4089354EBADE70BA4EB757D85EE21700C3B6DD
-752154C482E5936849F70A2E4C58DAA56CC9B70A0119109936D20DD94B883FC7
-001D087B21DFFD8115CFB6A898DCE84EB9D026BD12382DFD8029D04461134953
-E85949F652F4E1E601FC16906BD4261F019F84E0B5B3B4C8231F1CD44048F280
-7EAC075DDAF1BE658DBB219C05755F6CA8F460428213C6545C6FD631995B229B
-3944E2E11161C664CFF4B484A25C765FAA60394B233BC1F2E8EE1B74D0AAC8F0
-7692151F544D736C904EF1C3BFEC8B2F262E383EC2DA934522CE23961251E498
-CB545CAA9C018B0EDEEED5C33302A0C91EFFA8D2A71851C1703C6C1954953C9A
-EA6930040290F4834729408A243B7AB60FBEBA673F3A03D03E774902B9DB8796
-4FB336D899630CB361DA0A8DC4D6F736CF4FB120DCD06E045B2BCC205FBC9A6F
-7D9C33EDD182953404F3139207546D57286E5BA298AEDD2D8872C5269E9C67BF
-F1832FB403D5359B81CF1D0B873F0863D7BE051DE2B8C3C51E7CDBB802CD7EF0
-1D09E28597A7AECADA737CBA26B2B61325DD56CEA91948B9C21A6CE72669B213
-B1DEC2704E4E97C89C5BC2965FA770E4F12658DD6BD00931233C0FBB38D7A60B
-FE878B2516F363AC230CF3B07839017EF07C665F9A3BCEA9971D9B9531F2ADBC
-355CD844E0A8326288E2AEB99907F839514E204E0AFF8FB25CAAF2EB2E212EA6
-374A96F7DAC15E1A81E93303C9A541BDFB2FD67F1B242FA96DA7DC13CB1DA128
-63B06589B1E6C1AA5271CE6A9A87D7B655C79E6CFC8EC3D6CA372813A9C8497E
-94B670209ED95B38CD3BE3DB5F0A3D8AF723C6ACB1D05AC082E3321541D7FAB2
-4283A65D37A9AE6D6395680BC727678143AA14194B9A2E3E69AEFC177D791902
-8CE650CFA9464D949EAA4CA45E5F81897BF8BDD8921686531684C6BDFC18D46C
-C971826937B67E47B706135BC59ADCF6B603EDE35F91FA71A46AAFD337190DF8
-7DC21E2C9FA91FF575AE5840016C3D4904A5BE24FD41707E22427763F5599F02
-99C447524D9515E6EE09120A28929C51A515685A190D06BC4A3DB809AFAD8A20
-0D5C2BD3E212733BF8A8B9A44464CF9C2AAC58FD013DA91322CA69F3F29A9156
-7C008C33423A16EA20EBD8887B12011690746FE0A92A9E0E0D2BF9E74DDE037D
-1270A065E20037128C026138E3DA53625464EB51494FAC1FE05DCC6663D2D6A5
-A5F25FB3ED580BC79B064DE2B96B47026B65FB63192D85754453867553FE884E
-61DF54C3D1C4E69A65ED8DF4763D029A40AA9A61DEE2D6E0A2A89609A37DC289
-E38C8CAC6A7903C33D76F5118011F8F3B12FA280A896F8131C989ED182256B6B
-CA737EC6240CA28D8F20A44D479BAF7FD914CC736D8837F859B3E23E602ED53A
-EE217E8B959648AB522CEFD1AF09D4C2EE6091CB929216CA398F3F179DF036A6
-2E8F4A1FF27FCF3951F40C7A7FE8D3E397F8C2F6CAB99FF537BDD72A74E58B65
-27109EBDE9AA46D941A3B746BFBBEEE437D04D463D1AE698AE0850EE674510E0
-ADE5BBE05A239E96975371DF52B1991806D88C0FE32AC146F378C861AE63E79E
-86BE778BC24F56C676F72054F70D7F23A029875777C1CD834202CCF0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT12
-%!PS-AdobeFont-1.1: CMTT12 1.0
-%%CreationDate: 1991 Aug 20 16:45:46
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-1 -234 524 695}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
-C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
-3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
-426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
-D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
-E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
-6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
-A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
-0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
-85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
-F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
-C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
-12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
-048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
-0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
-741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
-9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
-306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
-CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
-1353CC1FC512D59DFF847ACCD058E2058E262194FA3370E876BBB803BCC86609
-B8BBDE432EAC6C13261A28739A53C16EFA6271A92A2CD064F081395ED8E128E7
-9067F11414984D2F7BA9E153FAE76ECE849AE1D73D30499ED90D3735941DA9CA
-1AEEC1D3B8A1592D1D8EB167E150D8197C341105DFCF09414CD7F36EDC918BF8
-453512B168390413C5F9731885E06EE7B378C923AEEA80B5C62ECD7274F23284
-B290609EE41FF287DAF03E405DCF3D03FB75E5EC6F1982F71566F7A843C3AAEC
-153355FA4FEEF24E0E5E86E54491E4C5FE16869EC47F14147126748F9A1E6F4E
-E9313BB550258FA93E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT9
-%!PS-AdobeFont-1.1: CMTT9 1.0
-%%CreationDate: 1991 Aug 20 16:46:24
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-6 -233 542 698}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
-2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
-650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
-F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
-D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
-F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
-4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
-438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
-BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
-A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
-AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
-D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
-CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
-082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
-9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
-4BA1EBFAFDBEC531EA13DFBD6700E53818CE04D23886B8AE75DCC36BCD3189B1
-0D55FAE27D0D126E82AEF31D7B5DF27E58C30BB0867D6D7AC1DA9EFB8A2DF095
-B5B934A68EE122DA0A83B36C952431586B957990206194E89339048AA6EE4C53
-703763505ED57C494DD907D0EEA04F6B1D4C8F3BA778F4E7AA832AAB4D75F024
-61E91C6D25FD6823CB24FC863B44EAE226CBCD81DEE29413023C52E4C515FD30
-4E9CC58955D9F87CEFAFAD73F2027DC0BC9CA76F8C6A3F8704CA70B2392330C9
-DCCEA27BF45555C2D9BC3A0BB5F3D899BD27615BE02CF8EFC5E9CB9C92BBB681
-36AA6264983BE3C6F2545C48C416F14577DF9E6D63EC23246A67AE1A2EF21CA7
-F7FFABD5A306E2A2A78A8659D03CB34940DE84886EF41C8DDE72A41EF93C2801
-2E69B7CCCAF7AC2A85E68F823EDE2054CF9E1CDBF0B0FB41479706C30AE9854C
-89DB5F12A2A3523A255630D7ADB82BCAA224DDD4CCDA372A984265CE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTI9
-%!PS-AdobeFont-1.1: CMTI9 1.0
-%%CreationDate: 1991 Aug 18 21:08:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 97 /a put
-dup 101 /e put
-dup 105 /i put
-dup 118 /v put
-readonly def
-/FontBBox{-35 -250 1148 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
-4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
-DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
-F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
-8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
-03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
-211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
-E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
-D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
-6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
-0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
-1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
-298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
-C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
-433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6
-1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6
-1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16
-E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F
-9404F896CD850A7B3B3D71D485F5459E5A1D5C5BA2A6C6AAA7BC81847D4828E5
-60F546433B6D2E24A2D86D453E4AB77B152506F8F1667924DE76E180B2364426
-1F7032EE5011E95527B4F4FEDCF3402747E80F63C78935097C11F672F0B25AF9
-8EFA8D6630EF519CDE68BC41C28EBE6DFD11485D178EEEF59E10BD23F147A2A3
-4BF925E0799FD8A6409984959B2247A900288B6C01F714A37E646D9A26FD7304
-5F11C7F76E1E6245C363387A6CE7C4D864FFC29216AA33D0B209EFAAAC8A589F
-AFF549A9F9EB94F6A5B5C0F1F805C9ADA61BF970E62F565C84048FCF6B521D02
-C07B6EA4DEA977B78F1FBECC0456EE6B5C7282E9B2A6542C54078437241F2323
-6A8D684806535D67759684FB48E7F9C2CF887CC6C156A56D3381FE06E0798FA2
-BA2042448CC78EEEC8D9A310170C105BD1B14D14E40CD609AE90A3AA656A3733
-E492BA2E6B41D8F99AB678AE3004A5F25F7737798A3992C05E05A1EB0DB6E18B
-5CBC533933132DA50E70A3FA76A55F0F7AAC65E1BD7B938BE4BB0435E54EAB2B
-C339E381392F2586ECE2EAF21EC7739F98C774B94D7BDEA395DA286749024FB7
-80790BA6408114D47FEB5AD960B0DA2BA595DBAA3AE039B77026B696E1E79D36
-8E3CF024B830AEF788342C37AA60E4CC83602470332FEBE0DBD17538C0697BEF
-9AC5C518FBD909B24D8B6FAEF366D02A6C806536B51013F867BB1507EFFA0C49
-A4F1391793C918A09F579C720CAF7F40467CFDE27F71A3DBA09167271226E942
-7D9B5FBB3FAF471B2ADD37A4DA1F96A4BF415020FF93AB38EEE0FC319FF61D0E
-C558FAFBB42D326C701E8F85353C629C03AC71A9C18B14FBD353E3C85B2EE79C
-F6507A829F61272C1749DE0A502A0D81342D24F58A057CB0734785B758504779
-537C6D592F7AA483198E7D2E2841AF263E79E5E9AB20A45B99170A9F2EDF450F
-C1F2E83C22E02014E1A04470145E9D857295B0854A55AEC3D3C296D5BA5E66D6
-C07ECA217D95693D68042A9C17D51B98C144B4DB5B855BC12E3582615AE62A3D
-E2AD013682CFDD6D8DCDB2A9086BDFA58D0EA35B8F2B1CA04C61FC17996F6E89
-063F1A60DCDC03F391CE653610886ED15900F0EF5365AAF8F7929389838C6AA9
-02CF6DF8C4CB6DDA327883DAF58395CEB66453AD5C4E4B1FD14D1B6D9254B271
-0151343D14622E225B9C6F5B5A04A3FE39AC11D5EC0A0B7D32AFF978236BC9D6
-850027DA23A0A7F2C819AFC378171A0BA1F38187FEDC87485CAA529C10F5CA2F
-3F61A49997D481FC8CF011AECB4FA4A8DBFD4A3047245676BE0329090249BC28
-8D3CAF777B58
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124F41AD03466151F55D8DDD97A9E3D47CDF844D7B199E2E53FEED0890
-1B156E50130621D5F9BB1519F270FF5B3F56A55B51AB602AF4CCCB9CAB1DEF9A
-0A8039CCEFBD933FE2FD035B9F0C7E2C4E8FDD18D5A0EDB72A7A181A90C87B68
-BEEAEDB6B041D8B3825220522A5D732025A3C9A0ABF97B8E43D19770B89DFAE0
-6E0B9672C5343287C0CE34C0EEC861A0ADFB0CA6F981074DBDE03FF04497775D
-EFA85F1C5296FA028878BA0654325D9A49E63FE1213D15BC94931376628D3F4D
-13D498AFE975ABAAE6CE5238D6D1B7B3C512285FCB55DD32B0D2BD26F01005A3
-E250F857FBB82E6EA870746E82C150977F6D65834A676FB35B5A0C1B22669268
-15BE1BE02BDDF1755970184563F025842B60584A82EE68B28FEC42EC38ADE1FB
-A7D9846F9473F5B90A72A94CC37C34A6F8165188486270BDE4F77FB9C8D01E22
-44220F591515B4D1DDB2E580FF4A9DBC1551F2455E732433E4924E7832E961E1
-57EE9DE24438DBFFB02AC702B2AC1B5E21A9EB382B4215B3FFF438E133F1FAB4
-952E14834907E3891FD9ACC8BCB8D73182A0D9F833C52CCAA23D8F4CE0D53BFB
-3DF5DD2974F4202381DA84D7F4E60C0BB78D4A492F895A1009217B44D4818D19
-C8486FB1DBCE4EF9E22F86455AA1114974F33FBC805C349DF0543A23138BE750
-864E401F2F4B8A80273325E63456785824CBFFE96030ED13E5DF1BA39A14938C
-52C3C4F13A6601B29E69BB7A5433D5896F72C96FD7E8747F3335D60C20A6192C
-EED9FDF074D67FC602163DD30B24B0EAD4BE34F5B85ADC44DAF646A78FFB8B4A
-5411A3A7BA863127C03D731A3A993F6B3CCE260A43D07A51E436A5C34714E98C
-FB8759DF7A99F37929EE75134C309D057548D1E23D509C512FBF783DE0939C81
-11CBA018B1AF51CC8ECA958F8F8C08385FB259268E1833784BB2796EA77E321D
-31BEB0D65E5EACE1C79D40CEED3A73EEFB73E44D6C634124FA70C317948B87DB
-D8BF5FA6A300A967A8F440136700779E96AF75D6CDBD6E71A90D0B429A3BD20B
-9BCDC33BEAB7F7CE3D06EB1DFC56B8E817FFE644405D0E2EA5676EEC4CB4F962
-632CCD89545375F4E1EE85DA0B4AE1C54757708AC060B68F1980395351AFE413
-1E0A8C155E2D4609238DCED812CAAC20C7AEDF09B136C647DD677733F29F1E13
-C0E362D5E1D07E3F7EFB55490E67696C511CEA05C9C9E1040B0472E4B0A2A7C0
-4EBE71AF9F60FD39AA2034B7F7B0F75C06F59BC0CBF6E239C1AEF505A0A67E29
-A47F5B74ECC9E6E52D9E988EB41B9289364232AFEE31F71F85DD9691ED98B3BF
-AD066C4DE2572347712E09CFBF6A4BC13850B72134D3A03EF23D7658FA25E748
-6EF85C4F458CC8C8EC4D72B9829E1622CED93E125CF521F78D330B4C32066309
-FB9EE455364F4F22583D33FE288774FEFDEFEDAD58011AAFFC3F5F34140C1A53
-62C451127DB52FCA37A6EFBCC2402CF37C7816FD61ED4AD0F04EAA5C3BED6415
-2FC7BC9F5FF00AF26072912D8017A120B0CBD4CC38D34CBC1B01C96AD5584FA4
-9D021F0A12CA1FF0CEE32749AA57322DC4F900E7D1A64C0F14E8BAFC581AB654
-7F06764257AE3DEECB03897F756CD1AFF8CC2B8CF5DEDB84DE27FE65D647D203
-62684B6142B6D75A484E97DB661BECE0E09908573B3CCF706DD80082B87AA58E
-4BBB7F73F9BAB600C0D21F9473A4FB6A1DC61A701F183EB0821ABE76FC002BC2
-A8DF5A75200BE6426F50244E74401015AAACF80ACC9E61355CE6A37955350F3E
-EC1DD6E694E547672AC3F4C2E80AEC5971AF9922BF9EE9B0A0A8DF051236F70C
-73B5000528E555FF80F8824AA73F5523EF414793A1080485DF0905E131D8EEE9
-DA2791AB32AF692294246198ABFF9B7AE7BB57F073CB74F5B6B999F6E1A1592A
-F805CC0F87C988DFCFF7DF498FF6BB361A4A982BABACA25DEFBFA8371B54C183
-A0B9F374EFCD7C2E1BFD41830AF81AD91B15BF7CF57BF802AB1F774DC60B2779
-2449CB7FCAAE00485CECB1C61377EF970BBE0FCDBC93B9E600E42722C265EC9A
-54828FBE5F1EA9EBB42017DF66579AD5F64EC75AA9DFA190ECC9AD929241EBB8
-489EC89EC24757BBBC8FA446DD4B51D4C6ADB4857B0B2437348CCA65CB47CA94
-5C26C15E8939593B1530C37A97826373146DAC8D32875731AFF91FA6619BFC20
-043BF9E9314A6DBA5635F2C05E92FA7CE2C1BAA491A719677E3BA2713F756C36
-F9EBAE900749DB09BA993899823AC3102E9163B96A64416639EA9884759F83D3
-D22D0F64C947861873119C2FBBFF08090A877C5C47B27989EA08487ED73855C8
-90D2EA92B9011BA0E843499316F842CDA7D4ECEB0D1B81B37FA156C4E8F6EE39
-EDB83DCF81B06AA793EECDD2C8801F765BD560CCDD4F9EC2DCCE2FAF0CA2C3AA
-299E765058C6C4BB141B64AC4E158C55A749A9E3C8AB771B6FB44C22F3A9A83C
-48A7050514F1D2C15D42EC19954C5D68E91A22B7B62A4858E22FA22D599CC34C
-ACF7B65EFD2C1E64C090C382A18AA1D275A281D418644D1DCF95805FA1C955CD
-7C9151C1C0232EFA3690273D9AD60CA684FDDD6160894C35CB02A67241670CFE
-1B160FA1DE7BF0BF505202D0287AE5C238AB0F546F0D0B39D7EC8877C16C55AA
-484D949EE6D32888C7538F392FF5C538616853293B9548AC2183246FB243B858
-16B4187C05C2F643E6D5939D54680CE86E0896B8171555F73B60851772E8A50D
-C4FFC74058AFE1102CD69C49BC74BE5785CE0D894A1D7D5A983E6C2E024CFB13
-9D14C5742717170375C51F39416D104A4328DB5EC02D57C8E0AFB8E75B4CC935
-FE5456B73A46F4B006B72E4DCBA5A18F9B2FAE5E8AF54F713B57078E53349380
-8C4F3DA4632E01CA0ED79CE8FBA8106E5D0E8B9869D8DEE86314DF1C9D93C61D
-08F64A7B1B9808B214CF3B7AD23C07AEE94FBA86B95B64FDA62EFF64CE60D715
-715D6975D52594C876A11E6AAA93A50826A366D88C1013569F34732286C131B5
-BF03E4A1EFDF69F5650A6D6B49FE69B709CAB22AEE4FA1FE7DB4D6B0DBF24C1D
-89F3E0697A9B893550CD57FBB87CA933AD02BD2E7E7E232990755208670F6CEA
-8CC718F206C0C1FC6B83FEF75AEB04B08B60740517BA268366673662C9DFDBBE
-F69CBAB754C26E377BDE8F0BD2566264D2CE638E1F49F108D65D8BE857926D08
-4580719D64B5C19FA3F62E9A231EF6A78F5AC65E9486238018A179FA2DF2E472
-9348990402BEF7847F72C883F872269BA46DAD793A4CD4FECCB11198B5EC22BD
-68C81C4EF31D74D43709535E63536FEC23A58CE23924C49E335C65197A73B191
-D8378046BD327178AF86835C47C3D20C15F8521F07A37324FC83062E4258190B
-9B9E16C9736F346010755617B1338A44B3A95DC03D35A2389E5C502F9DF3F3A8
-4D15A67EC2C83D34C3196EA03C6CA5C727460F62FF071CD25A7CC9E1A2F8649B
-6E23FD3704938B7FA85662C39E751A481FF3F7AAF63FF57B7768B02BF2BDC52F
-A260AB5C9EC3D0F618A1FABCEC7678963EF168D3EA4B58D68F4D8489C9DC439B
-23D5504ED042B489DD905E67268AB37475FA87219758027D3C9AC133572B4917
-9E55D0420DF1B5C40442E6033BC3BB1D1B873EC81EBCC3F325B45793D5E167AD
-E6EBDF237EBC5C4602A4E19A76608BB2BEC6A6DFBD2CF3A78C221AB47B841295
-16B218A7DF4F2971D92F48A20AC60330065CEB69CB34702AF91AF9B0D50DE0DB
-91C36856ABBF6961D5740A0C585475C139BC23359255E6A08C5B565E88714BB7
-AC3DB3109C36753FE2D2E4801E859FF2B53E6CE9C523CB3A40EA019A4BDBC721
-C3ABDF17370DA8B61E3CC7E4B550F2D52F964A9AA3FEB4E117DED5B23DC70738
-227F013D89DC649B7FC167392A6763B05B4216B47B054606144ABA97FB2BA77C
-46EF77D5B7D4F5846CBBE247DEDE49C5177D851726E559B38A8362DE62E37A03
-F608F4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 2 /multiply put
-dup 3 /asteriskmath put
-dup 6 /plusminus put
-dup 15 /bullet put
-dup 24 /similar put
-dup 94 /logicaland put
-dup 106 /bar put
-dup 110 /backslash put
-dup 112 /radical put
-dup 120 /section put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57034F4D9A2152A6B38BAEF33DC201A05
-C8314401D1EF6AB12A61389ACC214E61AACCA6B38D58A0B9E1FB847902E51AFB
-CE62D86EE1D33F2FD53457E35DA66C98A14FE772D8C5FDAB8D1215A83F1A4F3C
-085A019B6D8F97B865603CBBB7E8FB7C04DAF888BCEC95A9AB6C3F03616075D4
-DD1978C92FE6D1ABC779157A2E034FDB9A988D9F4C72AD97F1552291BB31A013
-E8F577B52CF63A3190C5B6AB270E4C64222E8180D2F6CF23AC859D280C4D3DA4
-D63A700F84907F61AE44834946E07BB4D8665A72D14C29D2A1DB8C0C7B153C8F
-E2796460A695A3833A4703AB3BF5B456E51CC0902E64A263103F684343398DB6
-7297F4444B30D2C3BA5E8A551D0D1008C83E3DB18F37DCEA196293B34C04638D
-F7E368753D24814A01CB5B0AFB85C35A3509619CB99274A3DA0FD4AF33B54779
-D6ECB9AE98244B24CE6B8FFAF5CC6E187D10D3B6B0E93744DB6FC2C708D62C1E
-277BD48A6A9774DDC86845E59382BB66EBBBFB57B9AD203665C553F43CFD65D8
-F8AEA7217C3FCF0244C21E8BDD9A2ABBB46928871B22CF3F84A12B2B3DFC8E2B
-7180634ED8FBBA144C6272498DF43F8EBF2145988E282A14E4CB76CD0682DE51
-D0AE70167026B6AF59E845AE09F4A078911F58AC509F19302D2759B3881550F2
-1D734E855E688BB05FBC11D4DFD8F8DDD3FF6442CC5E910E0BFD8154201E581D
-9ADCDBAC445A8CCA1909791769A8A51B778B818CBF29A82E420B5C9132452116
-46DA2FE43D657B96338CA7E6C769D815E274497B0EE1361475429632141913D8
-3A190729ED04FF6DB9AB4867E3BF3883010EEA5959CC4DB6A46512C42CD80A98
-C78FEDA271CD20023DAA009C3F198F5FD25359C4ABAB41BE69859718F231580F
-34CAE1D763B2CB6099BD0E006E6E223D434CEE7BBD858CEDD7628CB07BD453B8
-02802B4665C4B03A07ADF391D5ABF4967AC98E74263AD3083DEEADF7EBEABF41
-8064804290B30E8659A550185A2DD33916F9934E63FBCA03F886DDAFA0DDDD61
-CB52E70ABCF9122D8F8DBD1C66EBCEA52FC8CA4CE6EA80083391A6F4E4382B47
-FAAC968BC8934AA98DB914F2E08D4D68153EACD41051156DC5DA54EFA274C75C
-B9EF47A1F6DB353B12E0A8BC1D613FE2BFF9FEC1E351985E86FBFF4208DB19BD
-97B35C7AEF2D7071BF0F5C439BBA99460C0F01BED66D343966176E3ACA1FC178
-D2A523D1FDF6B945EFA9ECC4BA230555E369F000B56723950723C23C01041C35
-6C03E83D5815733173299B8319483617A19D7239D180F6932722C0B75386BF62
-CB51EA37540FC47027AD5C6C859AEEAC2A857B839D3CFD3F17F1F4867C8AB147
-49ADDCE45ABF9453FA42FE1FC2669F453444F4664E14961FA444FD416C91B19F
-DEFDF175B4C773620DEF3285656BF418E19047E7C76D4AFCA4AF5D77D810861E
-3BC8B8B16AC120CE2138902518E20BA550523F0D25807C82583E1BEC256D496E
-125477D072BD3DAEB301A14D24FC0ACDBF35876176A06612AB3882729E9DEF01
-F97DA5D3A4FC8896E74A9491EC01EFE2B83D1D4CD1A67F975BAA5E7FA035DF54
-93382778BA58DF8158B2AF54CDABDF55B9D74297E59F96CCC17B1093B63FFD9C
-2C9DCF52390C2C0568E141478BCFA5565C252BA8AF54B1DB07245FD72138709D
-664271AEF32926C8DAA9A056257A784FD959CF51939F41A0287CE16B957A2A05
-4B228267AC11299DF8A824DD199E1C7E95C125AB194A0C813368D785F1388E73
-95FC71A6A78DA262DDFD0370D2AA9C02113CFADF4BED48F68AD34859C3F1AE93
-B026109F6A132909CF7077E48454E4E09FBE3F4541F54D4FF5A57A392856986C
-91E80E35B66589E2EACE7008BBFA6AF4ACBF2F4882D23F046B62714C6BEAEA2A
-E241069A6816CEC03BAE3D6C06A28AB7416044DE4CFC1B5B14885919D0A6072A
-B8BBB24665554BC9D334189E693968B64C8A2FFE965D38FE33E0BA2C3C45C8C3
-5CCA90F656E830F2B398E23015B7024E80AD2390242BDF4C9E89DA0C359D4CFC
-917042D78D164ECF2F1A83DEA09CBAFD96C371F9BBFD88F5047937C2516C71F2
-3738F84D56671E3270B2AC619938CCF5744BDB2CF0432A1048CE07C78477DD9E
-6D7F8C69E9F9A2B1C9636D4B3EE4F1C44B7F5EB1BCD62AAA0AFE99F8784D6FD7
-0EE86BC1DEA8270205CFD3D45D5D73807C8A60B61F0B14E7FE68207F10
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 15 /ffl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 61 /equal put
-dup 62 /questiondown put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 124 /emdash put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
-0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
-B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
-AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
-97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
-FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
-20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
-0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
-F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
-3E6BB526D2D21FBD6D78E21A936F2E123C0F6EF41AA2266CF51B513EBF49D4D9
-2C0C93820A37010A4C8990B3D2551EEBA36E8B8DC122B1432A6BA9A8A674CA2D
-5F3DE1AEC33589A13F6DBEAFAF69B753BC0DA94017AD3D1CE981FF38A306FE6B
-A6A35630A7D636C1FCDB936F6BF93040C2E147714DEA74B7E32E97D4A9A10944
-1F389DAD067D206763C22156CACF1B820A6F71A5AEEB76D95A7BC008F0470EFF
-D7D7BAE7545D44A16A51FBE1975162DB333B696716F8978E6E9589A86B824A07
-95F6BDDC7A0FB3D7EF795BFE39EA4885E6E3173C865CAAF8A0BCF4EC66FA0B06
-A3E04E071686DD0C578DEC9EDFD2ECF8457E0BBB5591AF24A8ED3316CF401C81
-EC70E8F0D3BF4A21529B5E42A049AF60AD5B7DCC6E9908902410779460D7BA86
-5C9C6AEED7A598A024222D4131D025ECA5B3321E2E99BB5B451D663E5E06000E
-FF852435FA696BC421FB7B71F4AC3F060A4244F4405709FAE714D6AA3919B086
-308294FACD400EB49591DDADD04F5B5EA452CFA1356624091215D04D9D086929
-626217F6F167FD5FE4811A15068E576E95B795A7D58C9F45283714284A4F707D
-03DB209B0E863AED1651B06C0C5C5724AE78785F5E53B44DB3512023D9C9F099
-4D01D2A9E965FEDD523240FF4F6ED5767302E55364365B74AAE4A47543F4EFA1
-ACEBCA28D7A70F2404FD9AF6FDFBF9279708EEFD35C4F05D8AB48F2C2EED59E9
-975FE2FC27B882ADE0D3602126EAA1A8567D6BBAC36945795936D156B21F0EBE
-B708B9822A394DB88A3FBABE04BA4D3157ADCC999ED02CDD4D4E57F282D4BCA2
-DE43FF19C7AB7D0A90BC193D8027233258E4F3DB5E8609A92942B5CF2AB05522
-D20EE59212B62B3FF3B60B1D278EC27B3C7B04D1730650FEAD382077FCAE9A89
-5D47D5DDFEF1A22A8E2B92C298ABB82F425AC7752EA3934942FA9A8D024B7E2D
-8328DF72FC99DEF01738890882836514F59489829FB6229A1410C45CAA89F704
-1AE31F8AFA55EB7151BFD6F26FD8DB0BC0356DDB161352C10C138B32278107FD
-5EC219A1C326C0A7733A8A25BDF8D0E2E7EAA26AD43451E013F2F6E53CC3A85C
-AB5CBB66B461289E965B5C4A91CCA1708141D3E0E674227CF6EFCB763871BFF4
-CED6FFBD468E5933E2F6E50D358367A274A10B539A55FAB259A706268BAEC7C2
-6D370D735FFDC9FB7EEE0F879C5AD1918E86DAACB863EB75D154E237004940FD
-777C2F5EE1D2A5A2BF663D135EAD37177406926CD6A707DD72DD3FFDF715BAD2
-1C54896D52CD09B9BE943CAA320B1C907A38C853EB5C1978BCF50B0C1D1FE5FB
-3CA1A507FC68012012BF2B32C3910E3D367BC8E3E7AA7F88A9D9EE87D8FB888D
-47ECF9AB2285BFE6BCE7174188380EA574CD7D94C7AF0FA9BC2BB71B71D8C969
-3151A55E08CA30D5EA41A5CC07C0FA424F64FACB2DF3175DD6763C5A2F431C51
-72E6F0F7EDE3AE90008B6B5F03445EAC9F5882BF044036C2DD237344E5951BE3
-406A36374EB73760BDB5B8BD8E40E34D583FF4941720B2D85BD866FF355ABCC6
-B79DCDCBC7C71C1D979914B878DEBE9F3F51EA090244B766964FE238F087D15C
-119AEC68F80C1D2A286E8FA222D6B8325B093D427DA39E53667604C549D35C3F
-DFEACCC08E8D95473B1A00F5DB8278A0A913EBC3DF5070BCBADAD036EB4805BB
-812525D190B20A652871C797235A7A4817071CADB863BDB8BF991F04D6B0BE85
-8F55098A6C2D40E1F5F9BD3C2277234238964802085B6EA70EE966407FD5A7E5
-CE9F45A7E6DCEB62B7EF8D2AD41B8C224FCB696CE2299B1400B5ECB3BDC15D40
-300AC4BE7C849B6620C8EE25CC25A6FE361D2B63CFACE30E63EED2A5D2F8477A
-D204C249F4B7A35357EB2300C4B1F02F31805F3ACE290FBB94EEF97B44D53B7F
-C203A2EFDCE2009888E5958181FA213F977D3860458B7664FDF8A8A8FCACE950
-D1DB562F52478E88D98CE5DE997E27EE90065B812100A5E33273E54B556B584F
-0625E4CB1B002C5F8CFB7091F22192C613F10E2F0863D67218B3F0E753BB2558
-60A7D0D8B0BAB0BE51F2C94E0A1117237B04C33A9098F71FB52852C0CAC93432
-EE19DD3729C897CC7D082E045DDFFF3CF40C8805970D7E6F14AA3279A30B0F9D
-1664EE599779E1D796FA6A7D64A24930262536951EB3EC0D7ADFAFB2803EAF74
-FDD286B223985E16D560D430C4A9BC9D1E37B39DB1591769665E3E32704F2323
-ADE2F2D938B9D2B4F2162001E9ECEABB845D5ABB15C00511E966A0F9986A8024
-D67ED8F1913AD1EC129433065F781091ABBD6A93A0C6E8DF007BA681AB70099F
-624C796739A3D96095775A375907B4595E19C6E3535342940B3273F4D6339DB2
-F619E06E0B52B69F90166CC1DE866AB70C4024D6FB066E754030266461C5A71B
-840C61F1F6F5473A4182924B883A48A62FF2856FE82E8CE025163ADB2616EB55
-1CBEC3CCAA6A8A75B91926A7E68C2A01FB71C27D7ABBF20FEB4B9D3499E060DD
-DFC5A72CD19E87A8C1671FD9DB53FB66407EB01774CB4B7EBC99E9459459BBC0
-FE69CC2D4255BD09E16BF5219E4E896668B809837E8FA4AE3D2DFC959625A6DF
-EE8087E8968499703FC58B250386F5C6CF9F2DED9B306871A3BDF6EB76DE1025
-CAD398D3C3A7470C6217A9B6DD82A68302F4DC5A72394FA8E875C64CDDF20EF2
-AB3C62453827302B77FA2B876B9011E93DB24109ECDFB08BCCC67F76C22462B9
-4AE3041019379D0EADE8654D2DB8823272B9CFB2202A3A67DC4BE5D54B974DE7
-7562A042152A7DC1E5A453511423B288CEE8EACFE41D10B29A96B5252C058E8F
-B0BD004387BE048350C6C20D8B159A9F6A167AF8B22E4AB57AAF303AF9FAC676
-E7BD6BD032FE0C284A8CE180CFE24E22570F2C1D724C593ECD4C8B0A035BD821
-EB8E262F5F8011279454348966910FB9889D6CB47EAC0844648CD5DE4A9F6AD1
-A6BCEC860DEB1DDCFBDCA01C855AF0E73307D95B4E4B0ECFAE68754FDD1A5A4B
-F5408024CEE2FC6D85B38379498665D4B54043DE9D7B3B704669E766CB30FE6B
-6A3EA29F49647428ABDEA2C263EEACDDD333364533EE4D4BAF93E2B1A7841419
-B2B25DC22D5D0C62E1560347869270AFE440172B2BB963586CB61E969132D881
-1E39A33D5DAC923DEE8E85CDB33E227691A543398A25A3383D4BBB5E7D5365BC
-6B66FFD54819D9A064EF59020001D387E7035245CD0A9DA4681257A05238510A
-F224E2ABE340B1917931E2C4F1224DC694FC869F57425DC219D36046C500CEF0
-E5789E3E99C1F4F644300A1220D2A79865984BA7E636F02AD6B78BE64522BC90
-9D440158455096F784047E10ED44983B5B9D87CEE25522EC371B689F3E021B88
-20EA0E623FE4C91921D4BE6E14A138E733685D7D29E32992633C7221D3601C49
-8CAB875C554E969123882371A917DDF87813E4AE5221B2BA267895BBCE390CD1
-C2F16AC6092DED9CFB567D599036679BE1A6D104ACB7B80F8BE93E126FABB474
-9EE686FDED800D5595D679A3401E218BF3B84CD220CA0511DB3F66D7B5473FEA
-84C3F144608774780D3188CBDA1B1EC60184166441D727666DCEC83F24B1FA28
-1CC2C5D6C8C1ABEF666C6AF22BCD09AD37E69B147EAAC4F4A4321B4AC7FF5FEE
-DF286DFDDE34C7A45B5E0A6415D71B42A23F1E5A4C387F348F28CEFE59BA5D20
-BDF31B70F8431927EFD9048C00D36F23DDCFD84511F7A29B1009D3EE128C71F2
-38FED266DDCE9F1118C2B3E183376ECC1FFB884F0D83FB4D4D8DF734FD90859A
-A9A8DD1C0B56E14CF5E1E6E52B0FD1163A072E3EF47F87514043E4AA5912FB98
-21AE97568A3B363C70B67B6A28108D9AB3EF7B8C04C0C6B68E36166605B56636
-5165421C3162C595EBD857D407195205E7BD43DCCFDDB06AA4EC48F0F4F89839
-56E6AF97D6F7CFA9E35D71D30E44E6F83E9586BC51B85DD383F0720485433B1D
-7EDBF1506023C35AFA6FF14326B5CA6B858910E8FE8E1F88894A4C40F7D4011A
-A40E6157C68A71BA8665D5C345D6F1CC9759FEFCEE7F2B0AD72155339A39715A
-D5FD556C02C721C8011A1D9F2C7B43BAE0EF48D0617EAE4ADD901535985E87FC
-AADB22A11B7BA545796EE2C03AD7F6386EF2CA01BD32C9C23B6445484DE87A63
-46FFB9C7DB9FFDC4B295C924BF3A7A461695735A6E53BBBE8F261FC493A35C92
-183BFA79C39F8B6599934B0B000BE40E42A642D1C9197EF378EA199950C793B9
-7D4D4D2D95D295706268069B8AC3E214B1884D973DA7E3DE77FDE870071B9178
-9F45A79844A7C26FD4749402BAE986E0C29BDBFC5E392F8BF09EE13F3E9D211F
-F35CF5914B16B70079CC5B0C718152CCE2C6552591B66D5E22B4329E08247386
-95E6A4F30DC7E54247F7E69D6A402FBBD7ADB85C3DD65A489F1D00B3B3A6AE4D
-439261CCCF85B85FC9F5276BFB288A8314E51E8664CB5914DA4D24928C45BC54
-B60B2A6EA7E5F7C05669B0B5538B4B356BEBB60124CF64476AD5C4102EE16AD8
-D06682DFB2C8ADBC6D8B7A1A82E9F366D711B2424A450217DDBEC64B8BCA7222
-9459359E165E42BB4B1745CE01DCD011156DF98678F8AB2E4822D0EF1A540149
-B984E97ECEB831F1495C97B4FF65E66DC15F591A70C5FF3F8C5F2BCD4231D2CD
-3A1D944849A9BD0710F5E13189F1E5F1E0BC94C99A0AFE09B8A9BDA6DED9863C
-E52947195BDA1E631C16F135558E4C446015F5410A2997E5AA0730C0B8A64487
-1B7497CB014D51C82F066EB7AB47AD360C26B5FA080C467A6DF7391E176946FC
-228CB794B431923FFA2EC214CF7F578DD1A7A8C9C40B38D20919DD7CB02CEE44
-17DE17133B2BBF5B855F70B4E850BE893226DFD5F0A04D7F7C2EEBC35C796697
-8DC79636E04C8297F177760727E55C44545E19204DACB37A7C3A8EC7DBE1F798
-163A743BBA7C6B87912817A728F8F593C82DF49CF3305290C8D74AF4AF4BEDC5
-25605822EA42FDAC7047BA1120D32107F189274A629D5BCF63D28851D94123A7
-CFDF7BD9DDC51F523CE0FD4B113EFDE8CB8B7822176F4ED431C47FEC3BF39B58
-DB015462B45EE063055DC1A34212526A1D2A04CCBA8DFAE9A440334316FDD47D
-25B6FF2CCBC69FB9F119F5214063A8E36ED59F3EC0F889EF2245A29823DFDF10
-82B2447FE12A9456F841B782BF6A2A31C257ACDA4FC57C85D807F0B0FA3D090F
-59D64BDB56C4760D9253A690437DDFF16619536E9CB512F0B7778F824617E263
-2B154BFF29D72FDD274E5833AB81AB89FCF9E02CE9E403454B6F381D26A50DA7
-176249746F258DDBDF90336B21D0AD0C7D5F79D6DF256621E9C2CBBF7585B266
-3D0CE331B8175E9C6240D850A11B0BA0732A331CBE581DF02074A28303F648FA
-A9E549130B79503A433CD128B961A0F65FB4424860DFEBA4610B21BE418843CF
-C3A3571E8BF031D04301350A63546DC8FC5AFC0B91B14074F8F13183ABC0F7D9
-18A5FA6C69FDF3DBD843E6E8770B7D4D426938901DBA64537D5FBB7A99B44E76
-59F201A6AE8848BF459F3E37D4F41B495DDEDDED20E44D58815F5235782919F4
-DEFF1760A19B7EAE5D0416C52272B5E6A68E61CCAEB4112C08D6AEDAF80C158F
-F7F3602BF867D41C98A102940D8BDDF9683D8869D31FF86CABBEABACC9DF3E30
-4CA445291C3FF6E15CFC67F9F1E840D549FB47025B11EA27211BFE0392F5DED2
-C8A58BCAA99DE800148B160C2F05DD8A47BD25440C14D015202457F810A1420B
-798FA57D04A6B72B0A3B93F48C2EED262721ED3BE1AF9CDA8379D57515A38304
-A5331F353DB1C47BE82A264C2575E572ED00A7E0A5571A6B429D165D16C9F8B9
-C6AC7258E8E3BA5AF74CFA54A5DFD4C807C4111F7D8C9930226DEA13317607D2
-3F99F12FC5E9B2C85A13CD7B8AFCDC6DD6323DD6B2FCB462E2BF6A1A3A35FB08
-B59FD161A2FC7D925AB07DA792811FB23BC31DB40950AFEF5340F5681201F34F
-40252B3635E34F297E523649AACD48E9A2102AFDD5EB6E53C00D0520DD6311D3
-6292B5D6170B96CB7B9119D6156AF9DB7C1999F7865E6CBD0FFCC09D50F1D55E
-93AC2B7BA182CD223A53A0D431DC3A7CF3D9BD4E8C9EFF126275CC801E1A7490
-E0AE144E68364A72ED3C87367F5A93BE4E5E05FC2F5A1E37AB4C0E005574BDE1
-2F35B66FCF1C74FBA65836C2E726417E7D5CCCD2CA833F79EB1D7F2FFF3A4E07
-D054139DA553B24A508670446137080308E4D66FAAFC05285B7F18A76323AC3C
-93B843B7E442A42ECA4F1195BB81004ECC00A86F1A66C1419455DF96B5C18A7D
-E7CC0485B447F3641C240DBD7B6E29890A4CC7DB3E220F8F2FD51334B8799569
-125BB626B1B79AE14F11EFF50B8DBC8AA9046DB569EDB971E664154EA58E1DF9
-5961A86680A454DA8605E4604A83DE22D70870259E42A9A657874F7A36EBB93F
-524C271CE8307994D3EB3E09F2E9F139E4EDA7993C6FAC9D3E0ABF00F4F7AC14
-0406D7683F6084AAD3E0AD0C108EBCA94BDE4814CD025E92AB4A5E4A0D9B2A58
-262713C25212FD84C0D81AD012887B901738332622E09B03AE5304AB4D742E89
-D36D4CF255F53CDF9819AC4CF86B1DAD57681FE8491723651CFB54D3A7B4DBA6
-08746FD44272FF02A8F21ECE5DD433E380DB8125F4417188021036F1638CB6FA
-6D0A084B3A8482C21D47401154BE666EAB29052D669A853D2783BFC473C0789E
-E88381D399A773DE0449DE49FA847E5827D16F9BA6F63660F515328ECC3B438C
-A8BB639F045BD8537184F7A6A1072C101B3FD270811F0496F4A734A69B791F70
-5AC0E1B891EBAEA1FEA231B0A63A2738E74A4649DEF82A717E3C5B054D6CE868
-6ACA07DF4D4306921EDD1E8DE6E378E2F5F669E4BDBE3C58D44712BF76D16BB4
-E4C294CA329839F37839233B7C26FA6D34C259E741D805FE24CA60F53B6D0E10
-6E8065C4FCDDE9FAC42125CF8BEB5CA2A2E9F7DF8DCE38C314EE6FC50E532073
-61986E6D8AEA90F325561BB1080408F541E7034CB507B39230741179720EA9E7
-77BDB6F3A6A2AC629CB5E33EA55462BD33468B242AA1EBE01DDE66CB7B098DFC
-74C64598F12FC3E029C382AD73361F8262CAAAA3309402959E51D150D79D90D2
-21523F67CE1D3257725969F86D73EC7504D824001320918EA45D136BD0C06EB9
-2CDE3D6C4A28B4F69BA1631D5723FC3C6CE7221D0E1A6DAE5395C95C05D67325
-5520BE4B09909EEBCF8049D3C2236A7D9C55EFADF775FEE65D974794CCD7EA60
-E5265EF9A9629FF0F9C414B4441A614B15018CCCC1EBCE5A7D47C14681D78FFB
-FE2A40EF5B090A793AB09F0188B0F8E196C46C68D0111671612E4FC423668E31
-D75231A7C570D6CA6A7AB859978AA1DD206290E4D7650664077151F78FEE3B65
-F28D761C0501A811DF4E86C0ACD7670773688417F167A83A63E3DB9A493871EE
-C44BE19C0501F1A79596BA2CA1CB3224B478F5C03D7484DDAE9DE05C7FE6F085
-3296A235A5DCC97FE907016797CB4B8B59AA50E94EFAEDF43F2B48EB67648BDE
-37BB7382A2EE1D43E0CFBE632779701BF4FD4A072DD4FA8ADFF523705495FD4E
-4599C0602B97FDDAF610AB4ECEBD03D491D915E5A519C253CABFBAAFC8314FAB
-3AB59C80F5770F21717CB2AAD2C4568F62C7D391FB7218CC755CE494380ACA8F
-A2BD1E7150200EB9AE20C0FD1DB8F519A1F2C30D3A8D97B4EC6D30C83A127F35
-C3086603D75FC69E3F0149409D9329FA98471F2E904B7BE1F8402917CCD549E2
-3747A46341D6EF09935E2B9B92F9B92593F5B1A6573BDAC71D89B2E78750B142
-0976D0081689FE99830AE09E9584D407BB748030E33327702A5E4576396460FC
-6FE1D88D1DA9BD79EAD9BF3F3DE9BE3DCB6DD729E7A2BF90DE614A184847B494
-565EBBDB3022FD2FBB08004DEC355F32381F573588FA7DAA1D25D125E5E77F6D
-43DB95D150A3C4A26E36EAEFCBC9FF5E767E29D968E51AE7B86BE1D68F73FB28
-F4342DE9C788E56062FD0B3584EAB404447DBCF1FFA6E4C17D0BAC86ACF2F119
-B01CB95355DB97268519E5111A0B6D8E36C421439C603474965F0B19215745E7
-5220C074F4C51D472663769401AA8EE0B54FF7085E8AF8E177617D059DDDA2B6
-B1F0B37E1AE18C005337D3358185B3B8F2B74A6811B71CEF37328C8D63089AC5
-AE93CFD82B6A28AA57E69CCF7174D1AACDCC11BC6CE1EFD49333DE0BDFE29173
-D802A15C24F230A1258F02E3F1C026C9153F0B575B8EE9B06F40D1FB5C5BB8A6
-0D71FCF1F05C26971F650A2D3BA524D70EA611A1FE613D8B883DCF4B3803B188
-5136FCD635CB8B1453B24CB24A0C8E46EAF00099DFF9E9AA1A8CC442FE914BB3
-9AD671B186CDA7DD7EF4266A5A648EF0E4DAD721300961CB2E7381F857B54DE6
-E11E4BBA99AA1D18850CF0672BF24468156526012339C25C6AAAD1295254DFA7
-47F61A700E814D057BEB65AA6D18B43CF2E0844A8387FB93B000897E7311D55D
-BE9293D7B31256B68545ECEFF76840BDBD4E35142A42026608160C6899FFD1D5
-88F7FC49F77DBF435C7738872C06CB97212183A39D5D67B3F524EA1C3242B459
-EE7B175DD9BD5972249307F27757E2A9980F90803B74ACF4F3B907930F0250FC
-7E3A528ADDE0C8F82E8BE2FA7C9CCFA00D4D30E688A131AC6D62F6EE3B5FA20D
-3DFB5F10A39F34728DAEC6B454D69B7B6D6A60D075580CC6C3D046CBE098FBA2
-695DEDA9B5D297EE34543668BF35EF3866CB9183B00C531C0630E2F2673F1806
-BB4C2358CE221325B074A192DBAE357511650A565433789AF3226004D91E3F25
-4A2C42014069AD0D58B1451EFA5994687C26CF975A5B67CA079BE18F6B05096B
-7D6160BCECDD8E74C237E53DE77D702079C3FF031AD9FE88A948832311BC74F6
-67DA1B65A8A107667B15655D2361F9985E5EC1014EC95CE15F8B24CAE2D2B5DE
-72086CA75EBEFB374C2B7A673DDC128BC179254E9F3CEF1F77199C134402C0EC
-670A510C83566D9C9104488FBF56DCE4BDE25357CFCC3FAE2700844DDD42A928
-E607BAC3AC56F4D607897965947CA3250115546E59770E2D9BFA5E163BCA143F
-7122EEADC5E8DFCC6E2D2DB9E5A640C0414F49A147A469FB011BEFCC2B4294EC
-2E8491C5321F16FBC3C88BFE2005C7A95EBA8EED6103637065C63195A52EB679
-8D106E6A3ACDD0620A54C9F9B1CE3CF76EDA503C1EC64E26D2D0431F7CC17746
-743028B1F0C0CC8AFF6F89885783F9A3F0C192A555494069D23FF0CD910EE91B
-8C99F3575FDBB4129E7DA441D50B939BC396BE10767DAFA062CDA8D8A0EAE275
-0D41609B4CDB4E2FC5035EDCB847B671C6DDD07EB14C9C4D1A9F70EE09A22138
-33D39677A5E8B0A85C11C3BCE0FF707495F7CAFB2E773016FFEF03104377A529
-1A25D74D7D8573AB714431EBFF4FFA84062466A5BDD3973CDEF7D675981D4FF7
-B914889B997A03CB64F9B80E4881989B6D86DBD1D6405D72CE13100A802D8ED5
-CD5BF3210257FF538161C70D35D002C7E84FAF36384FFD6C1B882B673C78B691
-C8D263E92135374A9DF336200F008878533610709EB1CB413D5BF646673D5141
-6D6E59852BFD395B3043D3B91F3765961DEE1C48AFD9FE246F6F4EB19763C303
-2594E02C7F2666A8F396B96960D21CD46B75E9DDFB9A74B00ABCBAC2173D76A5
-7BFD860709B82DD07CEBD95440C90AE4BD999F56E4CC6C07692F95F58F358A96
-8D4694A04FE16A8DACFF0743C1875F3CBC0B64A3B85E07401906D740C06864E2
-20A69ADE0BD9282EA3B8A7447BB5DC5A718EFB229BEDB5B1E46C41DDE1AD5AD1
-7595BC33A1942020F594399645F450D8DCCFF6E74AC99CD04922B762F7BF5877
-050CEE87A64054FFD5C066193B18DAD221FB3300EF1A2019052CB62930A6C8E8
-DA103F126CD881F6C3686A01C20A0A64DA580BB3C1846E12D9A040973B087DAB
-343DE8DE1A519F9B1464ABE131DAA2C544DA34FF6CDC33D628F62668E851BCD4
-B6802CCFB8575DDAD5B98BC77E109F39CC8E0CE132D15BC4B8BC5F235BDB983F
-07A62A1EACDD5F943272B37E0E3B90B951D543F6275A1F79BA3118FC5ECDC0E4
-93091BE4CF8F1A13F5326AF096DA671C0E8BD9931631BF95690677AE506A5339
-AFC10502C2FC1D349B0D7015EC8C5FF0BD7FBF583FC92210B4ECAB6CA9D1ED1E
-B1F8313F67D707757BAE04F14983B88D55B27D9416DE24D59AFBD96F082BD4E8
-6A238ECC361783E79D3CAA12E03B4E0575A870B2AD4C0C9AC678A4878A532C03
-ED66CA0919BA19AD6185193A57D29200F2D60C320358DF9C779561F673CE94FB
-30BF804E1FAB52FE6B3B36621A5871058AB432187072C204ED630DFF588AF5A0
-190D6CBFAD7FFEC300D69553FC8C16415B4DDF6D997A73E111B27B54B576D2E0
-019CDE06FEED4293828FBCF9850136E5A7A3707635CD91D1E741811A1F3C2586
-87FEC52BA590B748A75A38D78482FFEE4CC6D556920EB94A96A1DAF029384DA1
-8EA8322D2E3247D05548A8AE74FA5DD42130B9AFB0354604BFF2852A2B21997B
-7BA7536C5A0BB9A6CD31C36145E186036613405F6BD7A4DFEB5E282E9072A50E
-6CFFCEF4DAF27D45A954084197AA9E33E4A4D4564722A524237E9BA18C7D7861
-7548074048E78BEEEFDE573490766116FE9A4ABCEBE168FA7B46186ACBB78541
-805EBF2A905CC697BCEA3E8D5FCD1F6F24A8C1DD040319760F48E02937893D53
-3BC6695AB5AD2D83A0719397650FFE37548BDF56BB79E1B5C89E820D82FDFB38
-E672A5BD180659309C430B26D432EE2194D580D75C153F7DB436CD6B6FC51A44
-A807416355190534C41E09B808CB53DD280CDFD64D19568E163373DB9150DA95
-6D28DF5EC39658DACF66093059DDC8E23681FFEFA705B56CA1665C66C693A016
-791FD4CFBD4F2F2CCC6D47980D4D348A4A960CE8E74AF3EF831525272B7768A9
-5B1DA74C4396A804D95555A2AE1B684DEA08795363692440E1B8770A62CD0BAD
-72B7E3DBB539BC6B036A445745EB8B269F54F20712B5F234F07AF70FB84A9B31
-8B830564452381C3155B268A9EB2996CC84A8D0C9290CD03553E54B4B02151E2
-54382494B2CDB7BE8A5C4286B4245D0546BDF0D397647FA7C71A15018847CF7E
-23F75E69A88A5B7565F359EBE689C07C47B5A50FCF5216219F067E858E48253B
-A9DA834F94950B1A5B5412B2C829C2E689D2C936EAC9F87A112303BAC082F9B9
-BC825C103C4F01DB005FD6D5B516F062B6CE7387331992C254980BB3E3335E9E
-D214CC6C77933CF5836C8669E9D24CDD9E5E4FC24A4EA46974DC184B262C6D41
-899B7536B71FA3D6C0203AC4AF8475BBC6DB1974870A79467F2851C0A06299A9
-C945EF0872382F429413679CE19F3884A7DF01692544D127A8F50FB74DFFF4FB
-676BFBF1FE4DB88E27406C0639E77C7D7B6CADE321636B10F87CDFDBE940CD78
-CA9EF58CDC8CB8AB946969554963ACC11FE7A028C245D4A210ADC9800B287EAE
-385FEA05BAD452559BA5516B7BE4BF14C02165204DB2DB770732FC00E75D2714
-0A28292288732177AAACA0CA5420E9613183E9D70C256C038FA83BC1E5AB57F8
-B4A1A814FF72DCAAE2E18E310FA2ADDAD57B4CF22B3E14421C7309C88E2D956D
-CA8FEE193B88372B59AF0FDB5CC97AD29CDD80D0247FA29BB3C5BEC1C44242BA
-A3F2F73CF01CDE620351E954DE496945E9E54E007F62E285D894596D59854724
-5545E7251C59182EB3DF455DBC3EEC88560CD1A75CBF0C2B2DBFA09192B26914
-75CBDAA5D5D709980ACFA795DF8C3790BF88DE1F6FCE263CDB4127E89E30D616
-E52F0791D4BE886E10099BC3F0ADD41FD636E40C863AE8A6F9283D5B7C27E7B0
-01F71F66E829476CB7440213DF68BEE5EADBB5D9DAAB4F0AEA3F025B5587FEC8
-A24D6B8F95E69CAD2B7226476750B74F013F1F0F5801128FA0D070DF2AE52C9B
-F8868B466125DC520DBA3A17CAC6C19836956CD6777A06FF4432E0D3A0EEF390
-CDAEDB2D807C67A43D893FB7BD18418A5A15CC476748FDC1DE5C6F4A8607314D
-A82612539E3EC6E15FB19F627E57DA83FB8058AEEC09E7B90E770B99D294B3D8
-E78D3774E6CD9B4E52DFBFFBC89AB73009163B34CC7850C2C9313D3955B29867
-8B1AB6ECAC1E3558964AD66F2EE1B0C41B26EA770298111F4BC19A795D841FFE
-86036CA074BFB85F80D0C5A586D4FB1238A8C60F93BAE298A5EAC26D55D38DA9
-92095801070CD6B5B0EEF6224CD2850AE725E42B672F54FD3C7B72449AA8107A
-1E5C9FC970933D74D2D6FD3FC03E2B56A8745B34CD50B6CD1E3559443271DA9B
-8548D5988296C476D0265120F5FE04FF15D05D1BB0D05DFC0161ABEA805CE619
-1E1A19C96BA1CFE126AF73E6401AC45D646CE1FF6EC73DF0852D4AF39636CCE4
-119F53A808BDB986EAFC8C8FBA94E2B6A73B8C6C2C518BA1E9626DAABF1075BA
-23AF7AD65C141635824C93052DA3ACFE7A4F78EE03D9705DDE497EE90A43A0B0
-5F3D8FB276C5EA974683F1C834EF0D08E371ADD62B15E6691F3BAAA17A3E7FE6
-077DEAC2686CD88C8E277D823F2B3ED4CE621B846C0A40968B5341D59320A10C
-8EABECD761FEA64809BFCAE24F28347AF5281C542637E22EB13FC4B462880202
-3F4CBBB97DCD885E582653A87691C5E3B07C99A2BA90EA830CD0434877C1298C
-706CF38C137B150A3D3BDD91FF67FE1EFFBC68915DE5EAECA6261AA5057738BD
-A15497D2D3B4B61B15B771215A629FE6A6223E39E19380819E43284F3E1D087D
-7CC6AEBB21FC0D3D329DE0FA37D1B3A3A0322A0B4926B3CFD7DFAD0EE18F973A
-91E08EBC9070475804F55E84634C30B0455CC5503A61246FEB234A833AC0C0EA
-E7DCA5A5ACE5B0EAEADC492807BE15781401D4FC3BA47E69B112808907BDF1F8
-D7E7FEFCCA01460429C3779305446E0B489643394196F0B74EFEFEF6EBD6CCA2
-787A82F89951C145BD3E84D0091DE3F2FF4B30DACF2A9B256CF2D17D51051227
-D2EEC4B81E29885973E8685E8F6D9DEFB03E58E77ECEE91E833D99BDB1292158
-D37A2202F805E3856A47CD89B3851AFD0C0230DA10DFF1A3D05AED5A093C56CB
-ACF6162C56F39C0171F8EAB7AFBF3476A9C26B5C25C1C2C329B3918F8AC39A25
-F0F873266BE95A35E98773525A70B9DDAD168A930703DE3E6DBBD851178D5908
-CC9A68B2966D12424EB01E04F1DD4F9720D984A1E7890989D126B4AB9AB72FBB
-D3D1A90E6DD97941C9D673976C9E3D63EE82D870B922E0A5282406BB2E4AEA6E
-348A88E24ECFD3F028574A0061C637BD6CE6CE53D161B760C437332DCEB939D7
-E7B820E4A35A462F9A48389111920C293DE0F129202F22C437778EE114A9913B
-5CF32F9DD78DA38783A240B39BAA0DEE1203EA69EC659DB8F6E772A710CDC28A
-9AFF9897CD3300045048C7B963A43A6ABA107EF492915B791181ABA49ED58EFB
-EF110116976DD0B0AB3FED5E685A2226ECA937B80DBFCB5DE0D5DAF85B77ECD5
-FA1714275C4A8BAC5A5A96979E85C5DF4950EEE8443F3A0A80803B661422A8C3
-8A74D380CCC0D3DA1D0E9DC31060751C7AD6C1748B33C1950C66EA7FD079499F
-FB290FBC6E17968CF20355D47ABC9211699101970493B7F315F2196413530AF5
-4DD48577F5E6B1D12A1B2E9F5DC804635A831EA65303FA9C2D0E1E31A7C1728F
-C546F15D734944F31BDCBF2313D9DCD40BD0C4DB3F69F686ACDA82DFC326F2AF
-8A08C0DFE1685B32EEBEB6C27FE6CDED95550A213F028A682DB03BC0985B1CF0
-40D144F8050D4FDE19BD00686FCE960E2500FA604023B02C0E315FD71D984E52
-CD16CEC7BC46388AA525F2CA06CC11C5321F6C563DFE38C947D8EFAEAC856DB1
-DBA53CFD1136BA8E408CEBEBB20D7C10EA2CFC9CB8EDEF4E34F411BDF74A7871
-37A4CB9D184C10C1798277EC9BBF272204ACA44673C5931F7BCC62DD693F22F2
-2318A90E11A3C29485C3BC88A995C9AD63259B327B613C91D05F2809099FFF99
-D8D596187B7C7DE7DCB5564578565340F9E3F5B3BBCE299D5FA3C66A4D08F5A3
-15C7862F452B43D6DFA9C4DAEEB2BDEB450A5556742928DDDA517A2AFDF0ED51
-8AB160FD0F8164E7E04DF89725860BC50B7DE75CD5B403724169A121F35CEF1D
-6DA72B2F0D908A56ED0AC64A05F927B24037BEC994D471DB81D6AAC668FCB9A9
-A56653914062F7D3FC78BE6B75880B543F66D2762876569913FD12768FFF146D
-3D24BBBC876DF6A53C75D70000C6F8B019CD762D6D2BC64EE7046D2BD1DBD891
-6399F5E7BD1B5CA301F05EA0C21F6BE7FAB614E82A74FCAAEA3D88FAD9AC3978
-CF58980E544F1430AE39BB1F1A8FAD760AAC08E077FD493FFC345B1CD0CD7559
-7C8AB30819492CD58821A743436B4907099EE5310560CED64BACCD834A969591
-329BDFD8D0A45BFCAA2FA61BF44A0ACCF02A88F7C1518EFE9F928A9BC986FB4A
-DDCF42339888846C0A958558E4A4D4930862995E0C457C44FDBA5AF54232EA09
-CCB32EF02DB3F25063B18D66E383ECBBF85A85EF111588746499DA03C9970D19
-51DA7140B40D36B912F74C56DCD1C78F66D59AC960E3F49F1ECDB9EB91998ACA
-240755AD792C3550D76875B2809A4C2F3E48FB05756EA4F3F667EA789318E4D7
-FAFF08731E38FFF69BFAEFEB46565DBA154719778EB6DCC9009167895CFAED3F
-2DA4A34253674F6E0869C657E06E84FA7CAB672148AC0B3211E1C2CF887CC6F1
-0A0E15FC84DD8D86E568B801FA921CB2D001BA12C560CDA46C0F0BCC7F5DF546
-3D4F5D20E44E185DADDE662E35E49169108062654454A40174B7C253689F7ABD
-7633A7CD423EEEA1A17F62C2EF2A44D2308AA4891A52785A6D4954ACB3E3BA3B
-254BC9114D465D8C85EBC2D288733DF4CEFD70EF64EB2E9A18AED697475EAAC4
-4A98A284AFDCF302A086BE220D465791BD0A7C200082FDD8CA24049815DD7476
-850C6D9DD70137BF5E639068D54DF998631798E11ADD52B4AF3A57E4BEC7408F
-DEAD4E652AB782B1B565473AD9693FEFD84A96AA95700254CE575E3A2BE6E360
-92C1C8D4BECC4F35A09D324F2CB2AA9ABBEB698672A9C024D1076DEC7E37B835
-5DA1936F0E70220FFC51173E563736002C715C886533B445FE7105DE8DB38655
-AD1C8CEC4A80EB75BEFC9A94281EE92478DF3B139FE0411CC169CB0C7FFDEFA7
-16E6609FC71D81D41320D79B45A74A4F209356EBD8B9414816D588107CCD5EAE
-F3766056AF8460426DED6AF02CE100550B2EF2EB26C8BD0E200399B921118EB7
-621526D87926638BA9D807EAC971279C873F4858F1923DAB733F03331887D5F9
-7F0A36FD5400989A589FDC5930B2D15FDEEF68188BCD9417DC2B342DE2919CEC
-2FBAD986F778FA02A83165A31DA9A57E3AD10441E66CDFD0C8263092CB9E649A
-9CC820CC956B81087F7243327D95C2865E5DB05DCF0F94C201E4881823DA13C0
-72C31B97BD861E56EB013341DBD550F4E26FB46E68B2979F07067115577C1C13
-E31AC637BC1DC4BCF192A305F228D00EE0DFA8D51983174A99B2906F453FC77A
-F60BDAE2A0DBD9FA830A1D3EC14640270B91581C302F10863BFC0BB296145F98
-9FD475AC909C05EB7E1298B1EF1B5FEFCA6A10F7291A3407736B94DD38482BFC
-BC3B8AC56E70B3B254A0158C9A8E514EBCD5FD7C4CA088C44936F3548D56451B
-6A8E4347D346C5D9B1339ED7628FB3F89444438A6F80B031BB7626139FADADAC
-FBDCA83F8646F347D140667748A838EDC1A5A8FB2C7F08800F815F04183769F2
-C9A8614A640631A7C61A7DECFB6DE6AAE5162BC566444D0A7E7D1D942007E3EA
-1B158FC1685A7CA3088C34E2E9373452D6E219922A4209D84EF43BDF17C9F261
-5562E28E480C3E6976D2B8F6C346E135083D0C4783EA0AB2F06ACB9C831F90C1
-FBD4D5EC84CB1290E3BE9EA183EE572E68F6E2A914E2A4E5BA2229F29DF6F4C7
-88E776969191017973271452055536701EB8F401C2FB25949DB4473D8A523697
-0F88A5268FC4B1508B790DD61DEAD35A42CCEF8656C7DB92FD0E8BA8F79F7F10
-C8B38FD1CE9F485A094E119D090A4B9A970DA1FE5EFBD0BA6524F5874FA8888A
-FBF530AA22371983BEA0D77B054629AE3B1D1FF5D066CA27EED993B5D2FC4F57
-CF2864A413098141464B56DB6E51F24812B862A31E76CC92960451C36CC00B13
-9F5920D9B9F39CE7EDAD22CDE7A27D234EBF39D91FCFDB87555847CFAD4EE711
-B6DF66F45079F9670A6E5617A2668C234C3057CD3A939FBC128B2114B1FB7AA9
-B63D96F47B2E30221253DCA306EBF64999D666EADE0D3C69BAFFFF35DB41BFA9
-55B54E16C578B1FCF8B383D33D5AFEBC9E2806E12D07493DF78B9C7EFD5B892E
-C8DBBAB6F168A65A785A6A30C500E5A8843514C6A7C8280281DA64D38B960190
-ADFC738837D2BAEEEBAC87A61E459D248ABA66B53745F294DD38B7A505F455DD
-4E2025457233763BADD741A6AF5EC610004DADEE3041E09513598D070C481DAA
-D624237D14F43E861DA1EDF8B2034D610BEFD4C01963AD11FA454B3F4946A0F0
-42B65722FD8F047C1391DF886F27382024403AF6E0E8F5BC7F7E0FA0AD851EC5
-8B4D415F531B5413EA9F060C24EBDCA30444406532F775B0A983E0346CF76872
-5A8FA9A2060757B8791BD90835D9AA27706E1A7A2853ED76BC7CF1E1D7E46F81
-C1042A6C577E8F8ECC4CBB1200E8BA8D2DDA863C0FB287B9885094E17A00836B
-1B3B32CE070892CF4BF0D40D40AA39135AC8CC7CF784E7C306BB248083D8911A
-5A10A67712F1230975578CA03A218ABEC6C76992E339338985C51D624CDE420D
-71E86ED65B2F63D02CE09AA13379EB2B04E64C351EB35037782A4FFA2F5F0154
-CA727CE0A21B90DE53AEC9F87D8FE94470A09FA1313AB0982584449F23388363
-CE4A9DBF75D85A1D1F5EDAD209A8D718FCA14CC99BF55ADB9B165135A47BEE9C
-AAD89CE551B6B91BAF61C685AE30604D3BFD35202914D5B70181299EBD921719
-9E019BDCD82F23D4545481AA010C85B8907DFA2E16CD174A1A77E4B6A9DADFAA
-2EFD4EF91904BA0DC5056449C4BAC3F8CD7275DD7D0B972ED1C5FE49EA6CB007
-21392E91904455353C3665F3152548C4D56B3BB4FACE1AC042AA2099DCC382B3
-AAB4A69DF065017C33BFB2B01D96FCACE327528EEB16DABF2C07F4E938B97D2B
-343240B185316FF749E0F8578E4B89B0496DB399E914266521AE9AA633CB7C56
-FE9F4E1288C1A72CB47764F52D869C9AD9763F672DEB14C6BC8731586361A210
-5DA7CA7C7861EB18AD2ADF5BEF65E752834F806DECC29EEC1EE81A2AF2689146
-BBCEC2180C4C662C8AAAA42A84F483E5B999DD6DFFF5A9A7D501AFD0C993256E
-66988935EECADF7DEDB64377D71956A56861C2050AB7AA808F3206C19516C233
-2640FDF04F402D508AD7A6EA00944F0AAC0E3AD50538C817877E29EF5ACA02A7
-63017E53A286BC31DA51D37ED506940AFABB3BC603DD96D67A342D4517DCA0AB
-F56F65EBCA3B3F4AED09CE3B8A8106CCDD7855709D9BA233A333519F78BD73F3
-C4B98FF9F681D12239D0526A6592721CD7302217D3E0F88E8DDE741C7D887CB3
-F8683808CD4D7D594E4F5A18984CFC74CFF31684526CF7D73112EF8AB3BECF9D
-AE3DA2359EE026B9EA5A762AD3D836212AFCE09B5856AEC23ED8670902AF7C61
-EA98D24DBB2C2045C186C008E569CF06D805BD845AF3E4F870E62CD4E93FD9BA
-DEE4065B16130D777547EA07484BD2A0003B52506D55A71AC6FBB422E14FE0A6
-631E9C0C6F6D003236BD5880315BCBA0F5CD09A267CC5D804258A2034155CFDC
-22D22F952FFCD7C1DB06C532775B794EC0FF59F9314BFB6FA11DE4CB94925ED4
-43B772E01BDBA2B578C4A0D88309A9D6A03D60B5B891B40AEE8E02650A706992
-E81EF07F071E21E7B3BA93F8F65111AFD9D3ECBC2437E25A2037FFBE7C18E66C
-1D374AFB3C0E17937EEEB6E5AE26A52E8C4A11464BA2D688B5FC145996A1DF12
-92A391A4E46BB4BDE8C4564745B2689BF4C5F9E722C50A96B80A376F79C7B7DF
-41DEDBEA2EBD898292CD0622217BB62B038118945B564A1ED87FC14A8841E1C3
-72A335EE1CC6BC4EFE24A44F41E7B32C55A0E313E1BCFD69EBA90A9FF5B8C13D
-6C2C4047D40696E784614EB6CB1BB7FB3D67FE03754D3BE29CD591D01F02B0F8
-B9D811E639297A869FA3CDFDFD1B460148535E30B1B9164B2A2BEFD13036B9E5
-460C68837FD00309214ABBDA2F6B7EBE0069228F5A1CAAF41120237B91EFABD4
-E9C8EC82D76771D8D638FB3140B9FB3BD7040733ABC350C75A9C92ABC8345851
-C661846452D72FD47DCBC0C53E4BB50E6B792B3E462E7F3F43346E38CC2FB2AB
-E3C456D0CD0FFE59EBC284FEB82919F5372298DE9B51B9756F8160272715E91F
-7D7249E3B66449E53DC5285A682B755F51DE544E4932FE019A12BA2DE8E39531
-1B3C526C1502E194CC0671003BCB29C303D4DC033A28942466687C41792EBB29
-1EFFCB4990361E8CBB554DBD6FB14BBDD6DD98E97C10EE1A74D758AE802BD9E8
-9687B528DA0CFDC755FF9EA8F994C88C5E111D457B0DBC7654E4794FC399BB8E
-7B8A7DA51208C746CABF4E4388FCB637D24A6EF93B1707D77E3859085A9E3608
-A85C792884AD60D4416E2F644C11E2C922863AC370B076FD7C5483382A5C2D05
-72BB563BFB485FE41BB8479469A592AF7622082DACEF884768B33072EA301531
-3A54F2374DCC03FB2DFD198A47CEC2AF9C8DF9EE11BBC660B26821A5CDA3E6EE
-79F281F38B622B2E3D1779B7D87A86AC56D6E95D278489F383B53934F0F41BAB
-0225840E0B5691BB5A799654F5F0BC86C4ADA541DAAB343D1001B384470AAAC2
-1726FBE4FC5D7F16E0C73B24ABD88AEFA5F4D993740A44FAE3C2E97650414B91
-FA91E1B5FF940B12A07B51222705712D3031F6A3C52966D9BC1E9A91B8A5CCBE
-E26F06D964FFF18725A018BBFBC3FA205A55AD02A41B57DCD1A67F8AD3EC55F7
-019A2C8B13879858A57A3AB376816E5A84C125BA649F82A3298598E3CFEAE75E
-1F7F54D1DE8C415B62FA025C6C3291CFB87DA982D6E50549C12A9C1000A71761
-5975BFAE48535C4908E42C4608E25DD5C00CBFCB5C982A1A260E4CDBB9537F3A
-AC24871DCB91CF0EF748ED8E2BED39BD923618D03ECC0095A1711DAA720558F1
-2F44AAFC7AEC0242F9146AD375763E17A8ED2C72326608D8074799C67BBE062D
-DF82439F0167E3C1AA9207B642D72C3AF151260C5112EADFF1A43B37104520AD
-9199C6DC3BFEDC0641CC0F677757789FCCE08CCDACB9C7713070557551A53D81
-1BF6B50545CBFA1ACA5E1AACC651440EAC6C2F39CECB884D6506E0BF7BAA9768
-13AA548329431C5DF5E31CAB04CBA084DDDD98F21CBE87BFB0F7813F9E061416
-E666E264A94A76F514418F3B43458AD066263391C2C8D21DE06AEBC67EA91615
-304EA84AD69785408D83C5ABB9706B17D2EF42E00E4ACD07443F27B784FFCE81
-68D4F0F3DEE3EC94AA2FA303EC31FE357267B2098DFC1C6468641FBAAC436196
-8C409BE2EBB7B1C9FD3CD0E6438A6E94D245596FB9E4568CFA945AD3500F7D6E
-20B074B38CF5BCE69A503934C671C81803BBEA06D8F360D441084D6288F9C0AB
-8305293CB8F342F3C589AFE082D4CA2B605BB131A401429271B1C80672A1F37D
-196F4333D9086B8954C5B5F8A16AAF68C76AC5C0B9CE65CA1BA715F0B053BF02
-EEC79406E2C5143A9AD69CA6E358AC636CFF2DF700E15E83CA0C6EEB77C3E62C
-080706926BE171E07ABD4BC16E2EA0D9DFF580C90D478A6F9829860753D47B85
-6D08505132D659E524C7DD22C60EE3000D2479ABAAD132F0E4FC239350FC53C0
-9F4725EC06512093F7A2E6F15DBFBD4A29D773B9901D15DB0EE6EA73692F55A2
-10FCD66B25694E77285161FAB2282DFDECDB983D19448048C0D3C11F9BA88E46
-A938048A1C07572142D341D29E3EE6D9C84D89E33B9588DE28DD8EF02495DA6C
-50C6F709CB5BF02D98A603DF91DCB72CC97EDCC976C6037B8882E19303764ED7
-D4D9A3C890102638A8A81873858E29377F82D99DAC7067DFDEEA9A41EFD041A7
-9006681BD107D26534D5025CFBC3AE5EAD6ED7CD73202FD0C19795290CF76984
-CFE283FDB44E9C1D4792CBE073332E3EB3ABC36B443875BBC38CCC07E6927D34
-BB7FA1AC8BADDDE59B179D5B69C1C25F2032963E50CCD2712A0823ACF0FBD85D
-04E516E396A00A08EE1EF678AD8BBDCDC843A19A11DFB2A696520136839DDFDD
-E4E3CAF21914FB51E6D29FCCC0917C4DABB5F09FC722432CB6B5FF4A7915BE9A
-79DA41680211BAEA2424D4E3877C1AF7948DB6DC599A9B76F8AA97A08BDE3A51
-50F0DF9F0C93A26D04B6F8621EC6FC12CBBE55772CA9E8F4924778E35C7A90C4
-DD23EA49A1917E29A57312ACAB38432466281F6BE8F8AE166FA6FB296D28ABD5
-3472889B9BD60EC474876B3BC2050093FE68777362F21A2B996A4EBC86DDB90B
-FF01BD9D9572ED8C874CD9B5D847598E77E97578F2B194B22E7E7B58490AD6F5
-DE58903DC4F4CF2E030696794EBBFBF26FAA5E987BA89CF48A7885F70BFF2E3A
-764BC941BA2CDC13D11CB7CDA4D75BDAEFAFBA74776A091A8B5C0813F5B866ED
-1112648840F5649F28672CD3871F12DADC5A9EF64661A598F58D1AACA6B454A0
-A8124E5DB346A8CAF10FE9FDF27E8236BB8CEEEFDE41403653493A70AD0526B8
-E4B27D6F336A204773399DEA3AC3764F8018433F24B742B361412157C459656A
-3F02E6D2ABA47257C2FFCB2E995BE54EA462C6AF4BDCDACF20B99EF84E7B7893
-6A41219E3887862B3B1A665D8B569A64643B9D46E9206483BF750F233A28C328
-61A574D884DAE594FD821E3C5088C0D426571F37602B05A4DD325588CABC8E9D
-537348D510B36730FC02819EA9D16C095F79CCAC6557D612461E06C125436B04
-EAF3818692A5027F849944EAC60A0B876E4F887AD355E1F053D9B7F3A3721809
-1C9B890F9F76FECAF2D0213972F5E854760FF0EB984971A83E912401B7E8A74A
-1DB586E582846B79C0EA8B86F2264E8A855A345BCD69E68BF402DD75D7B09D06
-AD39E0C3AABDD237F65ADE2A3EAF85EAE56443CBE532C2D350DDE786E23D2523
-95FFD6DD5DC45F833F9FB9A9BBC689BC4E895AB203E74CEF2D79E6EA56A5575F
-ACC1778A021BEB2A5434E841049529D075B689D6C2E100C26D749DFB422E9A29
-39706B5E1CCB15FE881CA79EC7F4FBF8DC894852A01535F217EBA1E5B426E73B
-F216ABD01DFE485D01B75B1F184B94886CC6D3BAC121D354D2728BC04A572B40
-C871448E60D68F282F9CB843757AEA34FE295D77EBF4B6B2D06E6A0906C86827
-B784EB962364120E9E05A266B4802B4DFFA1F4A0D2B4CB1EEC19B40EA8DC7C1A
-EFC27FF75A9D85BC7D644AD32A840608842DB95938B5193BAAC5B11FD4DBA606
-18ACB6BCEEB65D81F5CE26CAAB9BF5099B206E3806E6E7DD2CE0DF830BB7EEDC
-2599C356AB180E21ED848F8B67A2C6C4CDA2DC3E1275F4ED395867EA1C8401F2
-100DC886CC4055213C45B885ABDD5AA73137BC640FC907F08162D3A74F94FE2F
-1EF83DE6BE326DC4857F702E4E34A173766DD04E4FDEA70612A25B0FA009F296
-AEFDAD0CBA0B954D466E784D82C7646B96A7D056E66D1A0A53A496D57C725E12
-355B5BCA2C362B021B4AE1D9033615F8E371022082A7222F2E3BAE0102440DC8
-BFE7ECEF23016F00D49F5D70B1D0F2D682C6D721DF3CE151E4DB12A6FBE7893F
-4835FC32C4FCA08243A3346E4DE790EF3E59863B600209A0C29E849D15516491
-0EF1B77DAD20380F716CE5A4ADBEE9E6876880C47E0F705F6106ADBC22CE7E2A
-2F2250245853563691AAADE6D6EB426B33172FCEF257EA17D6895818A915D4E9
-D37C9ABDC474582F343D14D89EBEDCCB411A8D78A97BA9961A1C12833048FEFA
-A34D7EEBEBFA510383ADEAD76F173852D457248C5570D96FEC7373161DE42FA6
-FE4285C9B5FDD1096B64009EFF8552DF1BF3530315D75AC47B91BA5D18C121A7
-B23FA326CF66CE881AED6CC39250EF04B8CBB6D9BE41C30C54804105D623F035
-963CB66BDBB934D96E8C88FF31B44DD5E1DEADCF558F297024D1083D76FCD4D1
-FEB4D6E37E6BBFE61BC57B6C53EDD5E3062F4ED3A3E2F7FDC3D5E7683405660F
-B185997053FBB39536386B41CA82429613125A6FB9D97C0921278801B7A1A024
-6EBF6CC952EA47AB3BFE21FF39A242B601A8EFFDE9BD013079E94F38EC522D95
-A028FA8EE869EC6F205CD56E803E8B71D3027C95EDE133D1824A67E33E4EE943
-FCE174267837732A1FCB4F4E047AA340CA16D656D58A3C8CF00E543B4A651D40
-D19953915CC1573F92CBB861E4D66D782DB20EC203BC2E6B21F4F92A7CBEBDD7
-8F43CB3E8B6EF199DFFF945B8A492F9E1C6FBCF4E98387AB610CAFFD700AE3CE
-AECE6F8646724B74170764C548BD365F7E94F8CEA7A237490A88979A63D554A5
-CE853BD5AD24173E05FE407FBAAE3C064B99964D8DFA6EDBFB1C7AD1DA79AB85
-FE3B5B3D71414BD5A1FD3CEC3B4124E47B8FC3BD78D28AF2DBBFBDBC5F3C7EBD
-F2CE62BDCFDEE3B25B688D76707E8DEBA532F9F8391C6974BF0D57B4B6025F58
-B32971047F3CFF9C15E7AFEC953DFDA82B57DED07FCD9A6040ABDF23C3ED23DF
-52D32CF9094FC0F739DF0D2EA11A09100FEDDB5D4C0B3924CE259C7179412839
-4484B01A870A08B07CC7C8B586F2097828122D1FB186ED16B267E1B050CB7E36
-6F0D0F2BE0CC1A124C626251F6A4C44824E768E2AAB65C1FC0A1E06679DE0526
-60A1DD8DC114F2BA3C8BF6FB77426BD7AC50C136970FCEF17A77CB14ED54EEED
-0597BA5FFF3929570DFACC87C27EC2A9DB720527093BFB90F7595918C4A72F3B
-3252E9129299080EF38D56A67FBA6B9F057A47140BF2FF882355D0E9CC029B62
-B18097ACAB41ACB815A0FFD7C48BDA41E5239DEA54B528A2261768D0C2A9B03D
-EDB6D92B68050A989D73C4BC029769E9A64BDE03BFCF13C714DD04320BC41AFF
-200D33D9FE1CB42623EF64D3780162C65889386C5EB5172D3E8A95B25CEA017C
-F711E12A66644E4B66F3A139544C54B4F9020E330D4FF3B92084C2CA7D147746
-DD71DB602A89467CA9E138856AC428B3635C910F96AE34F5A0B513F5EB0ACA2C
-D2F6F7686F45736C4C812A80BDE034923ED067D117238C1FCF92CA6715BF244B
-04D7692A05
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
-B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
-DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
-4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
-FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
-76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
-123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
-012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
-A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
-44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
-4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
-01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
-D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
-914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
-261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
-24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
-A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
-9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
-889787CDC2B7473D4BEE78E00E265ADB7C0CEA8499FFD6216BF93D037C46264E
-AC4CB4008BBFAA66772352E4EFEB86DB16C78779B78B6475094B9E88EF8696A4
-1F68154AA757BA4B2557DADA0652E1F8872DC24DB43F18EECEAF6BD4CB7283AC
-689599B06C56B323D3A159E8020FFAA681FFA5129E9F5F8636BB23939E0ED812
-E8F614F259F766DDC177A0A446B6C1DA735E428424C7A4D7E506656391F620DE
-75F0119BC4DE2AE1C435A6C95E3CB596E05E514DC9A63DB2B9B7C3270CBFE791
-5AEE48E27C863442D4FE5F04C98E04328DA2B0B36E6DA2A89ABF04268C434274
-8F7A738E6BC6A22D5A4B164885CF227E19B0911221545ED8F265FD01C52EAFDB
-DDBB1C44FCB24D04CA40C618808F55A57CD46DC13CDF0F656AD848C1DD44EE1A
-48B98E0EE1E18F3543EB349A9D397D06130E06FC6FB929270DD59646E4E7943F
-A071BCBECFB18D7825792B29CF15891F7B2C66E8663F206BBFF21EE4F4D93185
-B1D93162375AEF337AEE684A06D6B8774B60D3294B0757E3687FBF25370B19FC
-06427436C2A17F3DED1600B83DD5088119BE41C2E1B3D34EE3DC8FC3B5F44F7E
-30F5BB801976DBC5E227AF39C6CE8F36D3E60780EBDAAC01FD6D564D9529E767
-14446290E248E8AF181BB0A32EE9783E619F9D924B9093B879E667E1AECFED2A
-5A6CCFDA2918F1962B4CC2E432B1252179A67CD25C51129F2213801C4362F2D2
-95E940E08A7AE4CEDCF9CBFDF08B5952310A750A2E0876BD9933881E305439DA
-E90BD9FC5AC7B3B7FDBB209891C418DD34CE2C5A2BA8BE7D41758F797B810C7A
-E8D05491FA2533AFB5C853E32DE0A4B29DD8756436358554AAB440256760BA53
-09706EDFE9A0EB27CE296FA1389345BFD52EB891308518D0859928DB814CE2B1
-26E483A6AFDD9E4D5556FF630FB65254575DF8E72DA0AACE0F384C2953FCDD2A
-F029095274FEE0532611A0C5FF0FFC941B58B785E2B722D3E41E3F78741E0109
-F72F32A6E2AA8CCA6C9A0C3979A3CCCB59D63EBE1090CBAC1A40D6F3251235EB
-7356D2E5D7E2ACA608C651C7A4FEFBD2868F52B3DFAE49D39BFF63139D160A85
-C39081657327C22C3A931613C0DD5524D5EECF42FAF9254CB40ED96DF9F96554
-6B3CD165D762C9CDF3FF7CD10ECAF587D12EA668B893D40AEE0F9621398C792D
-40FD0F00D8A2E983019FFBD3B53B692736635BE31E4E16D28D2447F28A73F602
-B96C0744CF60E9BD111E2FF7BC6E683732D05AD405A758410B9EE62F39975E89
-D5833515981AF9D75A37F91FBA72B289ED766AD95E1C7682FC8891709BD3A921
-AFF13477A1FB29DC97E7F229FD2D4572EC85EF947A581EA3BBED9D6538E04EC3
-BC67B4D25AEC5EC8651538FC4E9875788FB08709DD4CBEF57B4C647A0181439C
-21F881B00ECB6452BD46C28F1642E48F3454FBFC87B7F494FC0713ACDD086D95
-A645A13D4AF3720CEB1FF7E28EEF4932F1DCB0F2E1BA5F151E7BE009FE61615D
-95C03441EA772ACFBE326FF905F472FAEA6273A7F037569029F4F6BED81E8EF4
-4A36F0352723435769BC03999083349B5799560280032DC84ED868F1295CA342
-9058E86432E55F40268615C9E2EAF8D698E87F98FE9197E9B1C6A9E4EEB772EC
-C0A7CFB8F790C917FA90D1AF0C4E1F9ABE9DB2380F7AED8E78C1FBE82E76E8B6
-D6237AD859C708BD33A6656B32076B2F1CD2EABFAC4C75A6DA5C69BFEB955040
-63FC2D9548F24EE128B8548565FF74D64C5C6431DD3A693FBCF1BA1CD9FBB95F
-28C97F598055D1D68FDAF79D3EEBFBA12531177C6E18041B478314D8A387891A
-1EEE740345096934257993037FE2CF6574FE9B7E6E5716E9F72F69BE58198311
-7DCEF3B8B1C409523F9B3BFB0D8922DA07EC5DAB9BD03221F553D51A32FBAF1C
-D35CB8AE05E3A93E91323D4EB655953001644487D6F505B449615593508A9766
-31835141CA10ECB75E747B930AC5C0A01D5B932A4C0FA7416E7A0E443B7E60BC
-6FDA8145EED76AF299492A07E6B521F2C54989978C363904A4C48D490A6A2676
-4FD816FFDEC0EDFD4E8F770A953ECF6A111DC0CA0DCCBA7180C8098AAD99BDF1
-D8B2E5140D2808ED4B0588E33158856F2259CC898AFBD5472F49937A73720CA6
-BBEB1E04EE34531C71D5BD41E69A718F0DED1990EF9C3241B29FE9137A950E71
-9B4B8EA3831163FDFBB27C0240F7A10E7BCCBDCD3D6B23ECBEA07620069C3497
-BEB7C63386890FEE54EE60B93B49860B9E67B299365EB5970D6539A105EF1300
-06B77B94688E0E5BA2E5965BC896600F80847B52C80D93344D348C905A4DE156
-1B5091616EE02B5C8F02507DABD7D773602E63E531A9E3EB8A5229262D9C03C1
-8D76CC23BFA16E6931BB95216090891790965A05317BC09D432F10A565838FCA
-AC1C0C5103CBF39ED79AB1EAF2B02C9CD197B49E9643EAD0C865B075C84BF6E2
-F71E10AFFB9F05E56CBEF06A61FB682C7CE803C57A49BD3654AB4326D06BDC53
-2C352F973DA2D82D257A793992DF20D7649EA76961E89CDEF7B07F5B060FD247
-10CCD26CD6B39F0C6EE988557AB7B14F4306F3869AA35AD7C8DC4562AA96F7FE
-217904CC6399ED6C69DF4A6A3B1DF2174B65275315F0F3DC8772AA416F6BC671
-83F649634B7EA172BE5B3D4F39D738BF23B89C8C0C49AE40ECE799024044F696
-80AB7E8B7BA18179B4051399F81B0FE5185C4BE06698AA4AF103853CEA607160
-6B9D6F7D90B9DA42E9644D20DAE6978BA4EDA80F2D146A41F28AE8B08F603B27
-82C9791DBAFED163DBD7F6CCB11A4CBF053FC850C0E932ADCE6AE96AABC6ED33
-29DFDFA6460BBC74D929090376C98ED514BCA0A8BDDDEFB9EF1D1CA91E555E03
-18430E70AE9AC15C7A403420C1274AA80370762EE20DC2FA0FF1B4D07D47780A
-851D8507CF22E1E4EB45AD4F0A52E259265809F5E52DA74E4C8B2A091A142D1E
-A98875CEE6B59219536FFC757FF99D0A6BE8F4A8155C0869156532E390EDFE3C
-A4ECB006E180C7652869EC62457785CEBF03B1A069F97CED823599C15DC60C5F
-9A31F856BD53428DE3BA000C584C95F69E624C78107E2D7540CE0DD1F5588057
-B51843FB65202233DFBEC04DA1E50088BC93C74E9A63E0C5B2BD655C46946F75
-3F173B2233D371C48510A5454554FD4DCE581E24C717910148FC8B09AFE86266
-5F36B88EE1968F1B80934F36AB16BB2B14446DE04393B9C421B088F235EA2672
-95B91992050520CD4B87530C03631C0E784FC40BE9E612F59E8532BE174D9EA3
-42078AA750E32C2C6B81492DCDFDF765AF01826DD0F87B37233F98C716C50709
-6EC70A29A7A50228A5C2A32EBE46FF8D829A186E2FB7EED0B7EC556BE99A4CC5
-A89BBBB64833CD4537CE067AA55FE88D9ACB18FCD9DBDD8C675FC60CD7B7B6E0
-58436002FA04F7D36CFD33EF7484F43EEFD9C129753E38F7EB81E87CB8DCF5B0
-292D90197007A8D86BA9183F6C65BEAA191D1F18D7FF60BA34136CD07405FE75
-C914878505C7C6674C8194ACEE7366914E288157DAE849067722EB9887ABBE38
-B972A6A9912928B6BFACA746A686C9D0C0DC396BCDAF8EED8A8BEFEBFEEF13D5
-94D2EB97F091E27F8105DEC2AB7CD83F753EE1DB8BD2C735A4F7B1EF0B9EE8FD
-3516277C41F83501F17E8F7146768F06129A47C8ED086CAED746F99039BFFC96
-732C4786BCBB294A04001C758FACB42A8BEAD3FB773EE7F9CAB43617B609D65F
-2977E2940349E9199401FF9679B17E2614C1AB13EF7A1088F251E3DC50945881
-2203556EA28F6D300C5F7914F61F94D5BEC53706B9712A1F56DA76F257ED0DE9
-FC1C4D3CAA09A530AB51F339E188D24E009B0D07571A3215A3E994C1AF64103E
-983A771E41987DF9FAADFFDAC86E94EEEDD2D7D27134A1A5EBB0DBEE6282
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 22 /mu put
-dup 25 /pi put
-dup 58 /period put
-dup 59 /comma put
-dup 60 /less put
-dup 61 /slash put
-dup 62 /greater put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 78 /N put
-dup 79 /O put
-dup 83 /S put
-dup 86 /V put
-dup 102 /f put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 109 /m put
-dup 115 /s put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676BD77D63B504843E6B9DB3EC18FCC62037E546FF3874549AABEDABC
-7C29E9200B309A37E5F90D7E629987616751F694BBDEBB9DDC5E1D1520FAD1AB
-6061A81FC25FCDE966D02085C3A53F84C246FBE8A58FA92886394F286FA58CED
-ED951A42DCE8BF447D61FE2F2FF6A4D1544543E3D6EBC020A26571EC0F04D6DC
-128C92BF1B54806E3F47D676D778940D71D25D5FBE66F42775D350FCB92E3E69
-C9AE83139BE00D5C85DE103E6E6AD38AEC32C8839AC3AFFB5EA29DB16661D893
-F489E5BEDA53FCE4252AD180FF42AC4F9091C8F454B3EB0AD8DD336A8296F4EF
-5D7F74D7A4A600AE4A43FECF40E57FA23B750214AA97C41202053493D48883E3
-670B0CD75CA74B4A36643C321AF87753D781FEB88B761CE87B1C8E36FAC7020F
-DA1A9ABDD370615B435BB5A3CC658F657DE25E83599A10ABAEBA0A9C6A7E8E99
-E20F2F16AEC10A06349705B3437EC0E9FA18ABA5763082DFB7C2EE4D13D56B24
-58ED6D93727F9A015F483B6E34DE2291E06AE67E4E700763FC9EFFB543D98DA4
-449F2314B1395F4479B977A0226455CD2210ECC972BA2D458AFA84A59127BBDB
-3882CD6E43210CC25E0B9DF80C0BC0811C2C1F232E79B33A44A955F8034814D8
-306E7204C4672D41BE3A3DA1099BAAFF3E1131580821E1A25C7E1D8D846CF37F
-0DEBB92482BB747B022E4CD9515FE413990A9E7A531E4FBD252D422A19C089CC
-543EA2C4E7AC6AF2B7CABE2E4A990850C0EF0BEF20E7A319C3E7ABFDA4F7DD69
-8183F34350A589BE48B20D2C93BDB7CBD3D174B6421A374BFE3C1D9529ABF99C
-DF892672C8D149F6A7D846989762812C669CF165B4BC219E782E3A717FF838AD
-19E15A7ABF0531B1C2AAE85E11C9261B8865766845CC6C2AAE190806FBA0A5D1
-0BDC9734DD842A4D2967E274BF8E46294331E4B9F3C1C5109DA6E84167EC9311
-CD1D7F035729214E9B0C8C2674B14E781F02646EE8858BE6897BC0EF37E95EF5
-641E71A2350007D85301FC811951821EDEE7AC62B228BA9EC6A71F2ABF9F7162
-4435A92685172C7F804B9492DBF6E541C4B582AA83902999F44AA7D12E4F0A2E
-E458BA2F4AD1E52901C4CAC25841C91510546CB2CCE5C7615AFA072981896657
-5EB6E6FC680DF3BAD9C3E115AEF48FAF1F9B8630F65ED6288714C81AD7E93045
-980C15BB7FF2D395EDF891179901CA7E35FE12CDA9E03F30CA527E8BF3BC2E3A
-9CDFA0ACD2BB2D6EAC1F271BC6C46724D59C9B95361077A23E5788BB47C98BDF
-2F6A0E803DE994C7D8ABCE1F0A90B5A041100B2E311903026E1186079ED84698
-C8370D1D53AE3CBBF6D419AE8138644349C3F9AE6ED7097766E0A01B3DCF3170
-44AD83B53C275ADFA86DB31474E6EDF918C01143286BC506D338A9E53DB6BBEB
-A2ECBF589A23968E493B3AED5475690AA6E76B093E24BBF2F7BF44C0B34D160F
-ABD237E27E9CCC922A9C332A460EAEDC3F536D10BC156323E2BB5C124BADAD07
-BE3C7BD414AEB7084BE22A4B61697C3475B1368970E63B4A2ACF2B8D13639EFD
-0FBB25F0E3E0698E45C04572CFDAE8247BD7AAB6CF0AA3DE2EE2900802B60ABE
-D384004E59CEC8F80EC8A27D4595A4FE311A1169F8191B7B47726D2868C5B409
-9FAA85C1749D0E51EF4832E3DAE72632E835396D6121BB78FB8A369EE9E49393
-DD2A76A5FA4EB8C193E0249B76995FD182439AF117A9F625CEDB749A71B6CE70
-BA428DCD1E8EBE20FD0B0608367B7C04E541C13A9171AE694EB655396AC0E39E
-1F8FFC45F178CE2E8EE5028B8BA6724927F8EEFCE517E42CD06BA66554E08083
-4A17DC0102781607668B2E8C3DB8A4F2279803C7BBCD60B8F589389C6B3B427C
-3CE8D655DDAC52CB0BEBAE00C776D5CD163B217E6FF27AEB2176919BA19FAEA5
-D49CA5AD218523C853375DE37DBB3608F05689600251369E7C02B9A626ED1D37
-87DBE2D65D38FA0AA6EDE4A7C66FF9BCD94B9FFFA414704D5C938675F1EBB1F6
-3F3E08B07E7C6D3B1A81BF920F02D8015D94B57DB694E61026D36BC3CB77B1A4
-77943FA55F1B832A9C72B07AF07B16262F696E2F5CD1FCB6D3866A2A6FCBAD34
-B3FBF40699E0352C66449BAF9D87DCA0F17F390A820285B4DA315F9436A8DD2F
-168A1A6757EB8B0C1628F1BAF805950DF41125D5074081B15410FDBDFA22E00E
-4825B1CC2D75E8ADC3ECDC89E23892EB0DE9D59231170BF3F9E45D175B203684
-F6FD58E0BAB317493FA9567EFF853085BE3EF14B66E95F582B01170CC4D6CFD0
-45090A6D96D98808FE3D388B4E1790C93BC88B8CB2A2CED40118CB2CA728DF3B
-85393866457EF436DD5548E35E0B5866E0403D8FF02E894A7A70A730CF245CB4
-AC7DB2B430C48DC56968BF2609A1CF08CC5CB2303D8B2D92A2BCC9278FBBCCBE
-54E6B76265C4E057566B658931AEC8B27C7E97C9FEE83012A644E5EA613F9AE7
-00CC8B7F4031F6FC83CBF8DFB27971032E56DF3B8E05D8B55C168A2099CDC4FF
-0A6906937376D1400E2A11B76B2E0C8127504EFF5D8812A2648695D72923E9D0
-BE231B8F6948F4FDD1D8C7D798073F44580C21EA66BCBB0D73AC156454D34907
-2D6C1830C2B97C0FBD8796545D7285C897442DD38E0E6EBED608DC787FAE717D
-23918786F642FA7534DAAD8D841D0DDDB048C4D9AA0007710D70F5376BE2C14A
-C7681A68E732B01C899614F3CBC2346566FB71F5F3D83B21C64CE02B4CC4AC9D
-C531E77C84F61722C493D7AAC08B4D0AF596C9381445CD34ED923483D687CA09
-001C76C4D2C5777F1EB1BFB6828F0BDE391C55ECB3393AE4E035EA9BA3E0015F
-5760BD49C1734F924160FEF926F171DF3F4413C2C2BCD47CA1134CF44B0EFBE1
-803A120820588DD5AFA577D126863843E49EF4BD6090651EBFAA29E4151F00F1
-DA63730AEBEFDEF5C574887F7DE4DA9EB571E9F1CDDCDC11890871064026D2D3
-F1B605A56C5ADCD8557993BD360E16D9C85EFE54438F232C023FCB84AED05215
-563D48BB23155C3EF1E6BDA95E46606ADA0162C19DEEF189645181F3BCB5A262
-EC91D182BCFAA6C11677A792A5B6C9DF910CA85FC6EB6EE08CC6D8632AC9EA70
-C67769456542E96635D83E65341AAE511D7025D9C9DF793E14540AB28E638E40
-BC4A8019EB7FF97B58211377C18E732B793819D55540A01D69344567C723B975
-9934F575977D1F288A8D645BCA5772615B56618C86D2ACAB57E8A32CD6BE9095
-7C0A9FE793028E9156E418B4619FF8D987580A79C37095F60F2E2F332CAD6D7D
-4AA75964FC7D060A0CB0E1E2D244233C176F3FA842B9B0D32B759B22C056CB6B
-940CEBE98E99A3F69D8BD0B8615AE0B27156456FC85F3C0B6E9BB4A72C469475
-A1AD2844B1F8FDECD621A9D7FD4E8E37D22DF2522B9BF389FC76B17CBD243C1D
-415ADD7D4A7A30FF556837574DB098CDA4DFAFC71625E03F20789A3C8A8B8882
-BB7AD3449D26A2D3CD08FDAEC6697EFB9C3381EE25494446DC7B0B5B9F129363
-CE0F3D0B817F9EDC2908A6D918F32330689F31785B701F0E5C98A0122FC581BD
-E71AA9D0940D4016A05C8662FDF1C65A4A22AD2AF4AFCBABAE5F8E0EE5F4640D
-1DC58133FE62D38D84C6F2DA83C10A32CAA0A2734B30227DE5E0E654E58CEA34
-F39A4E9433452559323B0D1EF7CBD9D524F48CC01554BE590EB283EB36E98DD6
-38004D516BD7C3C66AAEEB9D934834F618DA833D1E52CF2E8B1EB35C24BE9AE7
-58415CEE5FF8F25F897737D1EC5F9E20613FAEE5FF81780607F7B0B2E1424083
-6961EA7A8106AC710F2A021050DFE7022637B71895DD18AF1DC6ECB616D3CB82
-D1A1D297B68F5E55BA28EDEFB64620B95BE1221F192877DE691A19250A15FA5F
-07CC57D0F9CE9DB6042FF6F33BBB18E3318C3F0AE36E12EC57B0AB7FFA829AB9
-D1FFDC0FAA493A02A40624D40853920F349558A08FC832C83EAF8C04486F4908
-FE59359EAA8097118AFC9BEC2A8B4BB81C168172310A8F67A6AA9D297C45F3B0
-234544A739152D2B71B5E7E5A02625022D6B6F35014F07CE2F1879304D74891C
-CD3366967897749C3BC21D25CA5DDB6D25241980F453FE03B3CA2B26353F1341
-5B96207836015DE2403524E469A9FDB895F7EE37697E5075947027C3C55E914E
-4EF2B76EB8C0F7F4C43C2984E0E24CA103C64CCC93D2690E2DB4AE5078ADBC9A
-695F466082E09A2DC5B2E7F4B166490744C72DCA2617E7608C84328832BF7614
-DDDD369A04FF194BD3F1E44F68043EA5041C99D8559A908DD4243B5E7D3A2BE1
-DB5D560FEEA32E72E087FC688F04C84179EBE29353D65CC810FE2B2B47BF112E
-B2A63768FB38EDC4730398975FA1EAED7F51336F332A6D438C34B7CBF8346D8C
-FCC5392D1F7B1EB5B18632A9F92E6D92650559CF209C6266AEEFCAA1FC27265B
-9A32961A5AF55412F68318C1B082DD53AF70F77F8AD0AAF6ECD66BE4A60A59A2
-4FDBD7C0187A7E3568BA43D804FCE0B13D6CCBC26DE7D641085F47B53442124F
-76FCA95268291208FCA5E264C0D5E064D34831BD0184FD40D10F9ECF427AAB08
-F9DDD9249844C0921714687E5EE0A8B840E1D4F11783A70AC58CB32C0F55073B
-6C4025F515C08DEE9F066E73A805C1B31BD4B6C9CE63A23B34CF2391EDFD5B53
-3B524D7D5B9DEDFA2BFE15911AC09030E5E040A73F6EB4E28907E4924EE33E9D
-67B1282C226C1F3893E1B9A48F652E942B0073093B85524A1FAE3C0BD4357CEA
-48441B4FC4707DE9AC9F102EF340F949D4276CF8A2602310D90358D2FBDFA5A1
-E0AE476F3CEB84E6812231A2DA8B98283BD6E4D7BEB0A79ECC4666C3D25466A9
-6A0200083653C063AC8EA9E1DC92427BF04E19D107E002C4F03C1A4C6467C255
-CD8B8DF2E0A0D010BF7BE9D8A4F1BA862E5FFB7A4CB2CC2E065306341A02DE9A
-1F38478D47C38A07AEE89560670D44CC8C19DC25690145A4EE465B12604A8A96
-4CC01E2B5D8BE39B0AA5991B876A0619F6E3BB3F712293B5A7C785586DBB2204
-4C1A7763165AF3B057D61D10C391053ED6E0655C076C5E2B4F6F01A712C56AA0
-BF1E786DF7F8BE640C94EBA89DCB3B341C61C02DB5535EF2773BEB75D3D8753E
-D2F5893453AA90A829D4C3F3D66B0DC653F3587811E8B5F9E62E81D0C6DE4CA5
-38AA2BC800C838B7D0BDB0E679BBF5F6249F904485BF07B47BCA9B349ADDF151
-AD448E539A1EBBE6F9A7DC484F00EF663C1DD47B8EC13B53CF1604F594C0FDCF
-3739D23A0FEF264FE443D9D4EDDBA4BE0DC73A56B62AC633354F23CEEC0C7E76
-A4951DDDA23FD78563A6C3400E275BBC290C15C6B755679A86921E47CEBADB1A
-47C3DEC5644D0BA3CC6BFC1D204FFDF9D0573620DE5EE074833CE42D21A52147
-69B9262B85EF9D36FF0B37D3DDD67D79433BE3DC79CF95C6AAF3234837D86D9C
-B7CF7D18DB3899D57ED5736565B6E33496953C443000960655860625661E415A
-D09301BE581E6F2AF9EB34C045478CC3B703B8C6E31A60D8BF3698CF01C33641
-49517767897309D558F48E8284B5A954A3291155B752BFFBDF0F564152072378
-B4B7BDB965577C5BDD25C8CDB9CE4FD5A3B5D44A2765BDFEA71A1D506709CFBA
-A7066CFC5A1480E46D12CCCABE567214C83EE3E4F7FB010D594131E4ED9842C5
-06179CA41FD6637EB013AF1263EC14EDEC5EC9235501C54C2DC51F757CE1336F
-C5097BF6C5FF8AE522A9E4F94179F7426A846B37C50606454AF09C0ECB26A781
-EF074683986B10B9238CCC9B92973BF7105FCFAE3E5DE815F907395B0251D481
-D1BBAE5BFDD69470B77D078DEDFD90577FAA7CB18551E154B8489007C516C489
-B82D235086DC907121AE074202EE7EA12DC2F58ACFEDFDAFC024BD98DE725E10
-905BF7081EFFC29F697D495428AF568E303D813B1AAB432C1284DE7EFAE7C819
-62155860FB47412959690E95EDA37376891462D8FBC99533F032E654B88046C9
-31354A02F8E238A6470C451F2045132FB49FF35282BB1EF520D7BEEA0B37AA28
-146DE26218C80EB65CA25EF425A340DC5AE9066892EAA0969BB3986EE81EB7CC
-712814459F1A272C9F9F8801969D330135BA9FB83B167CEAB6EC1BC95F3546B3
-89AF2A2CFC8702866A9F78AD406C804401C327A0550F386F399BEF92C2B18DDF
-BAEDD788FEE1F4BC0BDF65743BD4EE56B0E91A7014C06CD1DEE074C0FC57BDC4
-41BE0F2CA1861F629F83BFDF53C5FCE7F6F13EB4E81A877ECEB34AEA48289ABF
-2DBC2C89624035B7335112D903D2AF5A0F9A78642C963B4A006165E44E4A8C65
-C94B90856ABF2658C6A6E7BE117A7380DC19B35DA4C4DC5FAFCA065CB10772FA
-97DC5D2BC9B02EB192855CF6346D2CBF56569B510A7CFC126BB3FD2B00D7ED86
-2C667F38E300894BD29E442A3E145F340A4E565422AEBA88CB10B571EC4F8D93
-CE7E56B0F12EFEECBDE78BAF8106894DCC9D00EA8A1E7243E7719278BAD83B4D
-D5B0A518BF385162CC3FC6DA8CFCEF4F3814A115EC0B9524FE587EF45EFE7916
-BAD6A1D40CFE8F0428DABD7DD4651B170CD8F9C6ADDE78A57B2835B39AA9412A
-0064F067D77D9E97BCCEE5A30FFDFC49591DE7DB034872A74F0D296AFDBCF69B
-0BDBCE3C8B502B665D8F786D265BD2A64AFA21364BD536920DD1644B0130D18E
-AB26CBE9D91C85BCA872FAF3DAA8749E9C5477E6BE78C6DE49F5E7E105385E1D
-7C2632D0F2DD0E9BE581947E27CBDA5716F38FB6AE65837E6AEE83959A5C63CB
-2D5B00E98189E14999F753C771AFECDCAA4A37882F9F724BE41EC797D13FF4E4
-A296888603851EA53FF59E5FC73EAC1D4E80B91AB149077527408B622EB5A55B
-042D6C7FF304158F56B85C02FC4697FB320AA0D721A7E0934557AADBBBB1A51E
-DA1297DB496716BFEF4D01DA8354BE929AF8644300B0202FEE0F7E609814E5EC
-ED8A68408949A9914AA90579B0DDA8CA648417983CCD59F9203A528091C0EDEC
-696FD08E4D84F336B1F64C480C29CB39B3F1A04A086618B23C04837A1EE3FB3D
-E9530E0FE6334867D9B5371CA88E41731A00590E510169B4FCD90767200B658D
-15C5FC3D43B8AA7DBC75E1B3D86F7B9885A66612AA4BF2FBE5913312B97D06AD
-2EB0E48F22D0C2C3E2EE6F8D1085F0DB844EFDD13C512EFC4F739C91199D78E0
-5CF3110CC73662A718FAEA5F8FAAE845D9F0FFD4EC5541217F1E2CCCC46A639B
-A28F3AAD94B4B6B613DC781ADCB970566D06888C24738248EFA261BC122E2B12
-A00282328D52
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY9
-%!PS-AdobeFont-1.1: CMSY9 1.0
-%%CreationDate: 1991 Aug 15 07:22:27
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 3 /asteriskmath put
-readonly def
-/FontBBox{-30 -958 1146 777}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
-65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
-D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
-77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
-15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
-491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
-1A06C514D91C4C937D4E642503392B1CD1BF5AF0BCA28EBD840AD76CC39AD7AA
-CF2C057D436A245217829DB786A3D592C0F5A073E44D137405B0D44F7D7356F1
-DFE3D933072E0CA836B5B72B1DDEB8FF86D5F9A2AFDEC789B2FBDAC307F2DBF7
-2B5BE20870A423F85DAC7075769E74EC93D759E9095E4C1FA2D5D8FCE0EB3586
-E193EE511DC1B950972544335EA5B46B3AF5B3FA5B7922DDAEFC5DB52B22CBCA
-7C8ACA790FBE3B57A89D10E84DA86BCA85AD169F0B7F8F93B228EF212069866B
-6D930B7FE660F87BB45A1DFF541F6B8926AFC7FA90E81B7628D4273B10474731
-4F5D42B1C5EEE258EF4C5255BAE05301CF5DA133FDD927D3065ADC77D0187C41
-7F0DC217781C1D37053C2D43C838597E76AB194348E78C59ED1AF4300B3885C2
-3408811AEC8C98E7E7E2E12CECEA0E666C993A48BE5CA6A23524B15433779571
-56CADB29D1963EB1AFE4EDDD12CC64264A6D12E624DC132B00CD3565784EC293
-83B0A827CD6D16BDDE351C14092435A687A98FC4599C6B712CD5809D8A8FB171
-BB2694D50BF5C52E068A58F907F702769A98ED6AA915DA9E56620FC819AF54A0
-30C2B7541C94336DC23F290F8A3C4B37E2C4513CACF349
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI9
-%!PS-AdobeFont-1.1: CMMI9 1.100
-%%CreationDate: 1996 Jul 23 07:53:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-29 -250 1075 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
-86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
-DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
-67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
-6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
-FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
-22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
-730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
-449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
-97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
-E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
-AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
-A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
-B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
-9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E
-759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3
-5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2
-BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680
-3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE
-2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA
-1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB
-431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588
-A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433
-30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7
-801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 14 /openbullet put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E93302530FA3F4BEF341997D4302A48384A
-CEFFC1559462EA5F60DC05245E8499D8E61397B2C094CEED1AF26EE15A837209
-ECE64FEF41ABE8DDA7BE1F351CF14E07BA8FD40CEFBFC3CE7B9D4912D6FE752D
-9CF163084E688DDCC4AA8920DB579C3683D160EFA6B40388374D5A3649B3C34C
-15DA4DE3AB03095AA746523B99CE6A49ECD5C69F7A4B8E9FCB76807B31D0FAB6
-D9247627402D29D82CA6688DCCAA9CF05CE9D363F1AD1BCDB7E888F07E35D4EA
-3C1B0A9C7C60CE8D1BD0E5B5E4200E6B549131874AE8FE573C1F57C1F020F041
-87F10CCEE6A4AD99BF08C3CD0AA51C97ECE3D78D121F56F0160334E923527791
-79A7DD4CAB8E8986E613DA9B9E1F235F7F2D1C458AD399FA743ABB240D367130
-DC3A912FEBEDA1644188E68ABD6B93EB50111B12D9D6BFC93AEF44588A310392
-171E75C2911C242B8E764603ADF21C9D12BDB1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR9
-%!PS-AdobeFont-1.1: CMR9 1.0
-%%CreationDate: 1991 Aug 20 16:39:59
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 58 /colon put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-39 -250 1036 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
-3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
-046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
-C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
-A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
-A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
-731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
-09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
-49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
-5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
-54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
-C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
-11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
-48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
-25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
-24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
-21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
-2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
-26168CF2ACAB48E4B0A6628DE7084F42076CB48636F1094890E895F5CEFF70E7
-E06BC0A2A7BB7E839A3C0B8AFF23D9C0447344336DD1228233C1E2E1854AEF44
-703C32AA0099886908E7BBACA5B0D474A382448944F763768B8E4C29803D3CCB
-4F7DD6768ABE27E0F33C82ACA2C1731960CEFCE1B972C88B145EEFBF0E498813
-97BF1F66935B22136A1A686A4A1A8FFAA4CA95EF05282D9F3939AFD86C020B34
-0AC1373F63A04136A900D331B9BDF5D5091851AC905AC374A31E597335EF0165
-FDE5F91FE810F1CCA3125DEF372385E4571087B0D89701F2FAF69B8E65770328
-1D7F7317E3CA8CF845D1821375D5F18844AD52E00B5C73A670E88E4C362D9040
-C805AC27C17237F7AF177F8945A5E613E60138177F5BA98FA2B6FF994A19AE5E
-384813F4452938BC214F07C01689F63DC45B1E493BD3CEED1488FA823D2ACCFD
-4931EC3B0882548257EEE2778CC0C3264E678D4B04A61C63BAA55822C680DDAE
-0268E96FC74F104DEDB5E83193890747845A68EA3C41ABBC7DB9246CF5DD41BA
-2F22C925631AAD3C1CA1698B5E1212A5941280BDF151CAE45E5A88B3F03D000A
-B47BE5C71F69D254B56A97B229383E8D80A1C1C4E3AA19DBF15DBD91894392A5
-853330042F1498EC981D4BBA1BDC694037E74C539510805F8E156A2E4462BEEC
-C155D3D4DB3D24A440118D97A4254155B6D8E91E2849DCF6C9F299211BB4B9DE
-2095D9407A08572A63B2DBE86EA10FC330B769AFF3E79B015B7A3DAA5885181E
-6E1AE0447BC3F6F1C276B647328D729F23C123DBE4A27CC9BEE18ADEA24E0CC5
-73D7C2A673371F9D5463B5D4FFCBAAADD31A06A062D99CCBD753F22E32F25EE3
-78DC2675A1873AE7165471209989BD073941963BF3977E2494C9075089BE3349
-1B7C82DF6A8C4899078CED9768BE519A07A8B823287EA7482C24793A5650CE73
-31CFC7814A531F11845AB00C1315DDCF2124056054837ED7E8C45A3785BD02CE
-2DECE00EEF161B22754BA3B8F99C91559A5ACC4ADF5905BC323981FD22B6ABA0
-B3B4E3F21434904DCE055AA904FD22A15246D2FA9B45AA630FE90D2835A18CF0
-B10F258BD956DDC388F3BB1DFD388B5968E5897A477786A66D446AC7B1CD440E
-9416678C23A4BEE2957C9542556E3D80E8272C45C5C6F930281BBF9FBF1DB0F2
-4A235CE7A601AE58D61005999C69A6AC3B794A65F29B31E8EFD2210B90966D07
-987B005A7C7D6FCDD5AADEC18BAEAD3B5592518E678D7A7C533CF13044999B9A
-4E173D82B2F4DA82C70EDD06339836B12437F388CFD92139D4562A57D4A4E42E
-7B2E248C75BAD5F8B4907FE6BB512C7AAD6D47CC3F148F6BA06143C62ADAFBB6
-EFB8B15D35695A84B4FB27003DD6C4353260E493B3B67A113390B6F0854589FD
-81663A3DAFADA59AB19D45CC99B7A6E89EB924D43123ADF4C1E5F1E597B330C9
-281021DE105822A99BDD725BAECD8894783AD7F8D114A229A4BF7876AFA39D50
-6FEE8FBC7DCCC98AAAAFAB4D5819690E0D981DA71B757815A57C3FB2270E44C3
-FFAF11EE65C42743C3089226C44A0A410682ADDD59D5308BA9135E110368D563
-DBB2C2870697649F6E469571D44C60EA410FBD0231F8730762B1DF45D530B52E
-CEBE0774DCC257ACAAE647A6E37646D638B973A7318AEF1FA7FB14622119D8DB
-C87CAE045C55F29D81AD136447343D079544637A7991378B2C527A8029A6C468
-F5E204BDDAB1CE7D7B37E724B3008EB0D4E89887145DB5E1F847D185B4E068EE
-36EAEE832EC5A93797EA31B3EB76B2E75E68C574AF4E0C8A6CE66B6C75C3E14B
-F1C8A2AE3C48DBB9E758A7138BEF8E7A6A59E4DAF3D75ADE2C6AE676163EEC26
-9D100D39715AF1CAD99DFA2529F285C9B509DB8E245D044052A6A4176267E82B
-32E7E7B1B19B5819E50037C878D1B3110AC3E1336584CD87FF3E1C155A361174
-69CEEF2B29B3349DC244A26B5C30838E4636FCD0041284EE1CA290B8B5E78424
-69C3A8954CBA48B87BC85BB81702C9451F184AAFCB4FD23499E8125FE2DA1FD1
-1EB046D0E2288E551019845E4CB7C09DAB0B2304D861A007642DE02642F257B6
-81DD7AF9FD59F8A51563EF65E00B84E1F8C6AD018B705E2C2DDF16409D7EC31F
-9FD1C3FDE26EE725B8E06BC27D12A5A4D63ED75760F1F89C8A310BAC0F60111B
-4458A579A70ABD463BCCCF9A8C26B04E1B91D92D2A37C37DCB3E2538DBAC4066
-BA4EBDBA97819E616470DBBECE88068F8E6BA5A5F7422AFDE7E8F21F8E4F6366
-902F2D7C13CB77D30C5F8468A4BD92BF9297C245B659E3229F9092494A0C6A2D
-81FB055483806140DACC2A00A1792E42543E69CF2C318A0D04FD194C7E27532D
-ABAF49E1DA1E113BECD8B90D6C1043286EFF325DDBAEBBC24F95E94382EE0C78
-84D26F56FA509D2DBC831D457BABA8E404F09571E1666CA4F09D200AAE319C34
-F1C433794F1833D4E2DA359F573978DDC12E9130CAC1BB9B5AECC675B1BA29E2
-4E840E43892FFC1DB7940DE9371C69BA87B8126D274B0A5BE760C719C2F42FB0
-8A73AC43448458C9A8A5ADBFEA8CF327C954DEDBFE6F75F2E893981876D1747C
-5F04A9A2B6CEF04324C0BA43F66A17F2D5562DE7C90C60D46A721EF8829EF559
-97C94DFB435BA0196ACF985E333BEA6884D70EEFE9E2B122730FEF3F613F318D
-26503D4E821266BDB1C6FB67CE8C5B427AE30CE0C130907FB007663BE50ACD7D
-E82EE7DB0DF6BB56C87B53B6305BD0E29B32FB620294423ECBE7D1B0F25222B7
-21CD214CA2E6A5AA857C48AF08E90134150FEEE42CDF7792F13B6270F895464A
-7AF9F79813426CAB2FAF3BADEBBA19ADF109E622CE81AF732775375EED9AAFF7
-BDC5AE41AB11FA7B8FD2551FCC7DA4BABA5E857BC53CC29D7D87ED307781D1FF
-DDF1D1F3053FF0BEEE91517FFE5602C946F61EB8BCEDFF04591695D585AC7F26
-F915DD6313566BE9EB4459F3E24570D62E21FB22F46C4E5DCD38FBA541D59C2F
-80B282275606D3170C4E66B37B270BBEE98E8EB3785193FA0FB537A8B164A62F
-D3E7097CF1686AB009B29BE690020D606BBDDA925EF8C34D6DC6B9E1BB65D1B1
-52A3504EA8CA7C517B69E5F28D229BAF77119E61496EC1DDF171E17282B6382F
-F275A7EE47B477C1254826992C7C3F38E2E70AE8BB2AD7A46663FEA33540FE53
-AAFE30AAEBFF0FC38E896D75984BAB9D33EACC3B62DD0E17A6B7DF4F99368CC8
-BE3A05E2A5E57D5CB2845BF8608010067147C851044D866BA3CF6E6C4112694B
-A6820C7768B98905B2AF6DB8EB9C7B3F8E8D6D4A63D98B12E53451F44D2603B3
-C4C9FBE4A59440868939A6EABFDEBFC3B38FF6B8909EBC0BA5B5658559740FC7
-99E3EA6159CD9AA85A060B59C015A7F18C13D0C50E8E35449191E817C6023D13
-D442C142ABDDBEB6190DBF37A408BE3B0F50B14562D5484C5194BC37D5742AA0
-08F6F16672BE598C2D22E165F560668EC511C6EFDC6E8B4293A9BD6061DEF2B0
-D2B901CFC4FE3E2A21350DC8266BD95A7806B274CC072AD8222BA03AD63B7C25
-C33CFC17A0A07AB69940832504D361601313C99B55312E15B8A611B8050F3387
-A56CD120189A6B0876F759CB008988230AF190B45B605C3BF8172EF5C22BDD6F
-0722734AE691BB0E07FF7C9E74BC1BDA920F526FD639A1B3620D561C09D6A966
-7D362B9EF552D4918ECBA3C06D478C7EA29C7B06179D995E18FC48F2748AEAB4
-CC1C18D5E3B392CA0BF5986D00969F628D6CC276E2E56986F9B1FDF7D0730F4C
-C18BDEDC0E8D96C90A15F4022D337982A1499FF2C8C9598C9B4EDD74EC90ACC6
-6CB859C628F42CAEC111C6507AF61DB6930D42DC9E93A1B14BE6DEBE688B0AE8
-7D2DE1CBC807A5EF70D712FFDE20B656A9269B82B246050A5282E2A48AE3E777
-9E3BD02953F2206E1DDCAB16AD0C69AA53278AD28144BBE349ABD1982F3B3644
-BC9402314C9DF8EC3D0C9FE123CC42CBFF32F1D1730474C2E255719724F8BD9F
-8D98AAFD64F24E259B66BA92AC28B6A33D818CF2E3C8320C6AEEEF6E78396DC4
-1FF2E734432C065B00E791BF1323497902C388DBA03A87BFF82AF6DD340287B1
-8B59099469FC5AAACE984C1FF4A9C5B9CE9A146175247F5D07099572732AFFDD
-0137B10851B0E7396957D9AD067ABB06719646DE7DDB9938313E1795826156CC
-8B9F1744FB6BA94BC6206B8329DDD465001065E7835140AF6F70456C69365AED
-E0D57F060BB386494C713D36CC616DB0FBFC0B4F89F476BC601ED31146ED8945
-CDD3B43A9421182FE29F67D563271E7DEC92B5B54BEC53E67A13FE3E27F830C0
-9C9CCE1AB8FDA7B9834D5AD9362842E46BC26F68C2BD5BDC26170F0EDBCBE062
-F5C8DEC1085EC724FF8159DCDD7D3CEF857D62C61F70BB4332D95C1C0EFD87B8
-42964FEDF310386EED3220922ADCF94A444B469398814A0390FF89A4DDF74FED
-B20486CAC60C6611ABC718D08A82BC9C2B69B1BD96F65B5038376628FACE8C62
-5287020B4D87974D5DC3376F9326BB0A42121D0D23856A61F727DD4F0C4B0830
-0D56AF371D5BDD1BB9074C343FCE2C4D6A8F14A5079B317F18A6593885CDF9B7
-ECB8F97DE6E5F1A3E2B1E0751DA00D7CCCB65D6BC44472A720559DE68B437367
-8F3AC9E83DF0307FF540D2AB10C773AE26E838FF4B0315B403FF65FC25CC1DFE
-D8B594B928FC5A8F441351BD524863521188A2D745FC8269AE090E398EB6D10F
-6C10BF5B7F6DB649C5B5F3873BA6FDCD25356EC7F7C04C8D046E3BE0D0B1B4DC
-3BBD20388B78FD1656AA1D99F7C737EA01D43294D9D76256F9DDC2FFD798CAC5
-03BAB9926A88E853D4BDAD24125EE6AC4EAF1F5D1C16579AF2647EF5C36A8AE4
-DE3087B0DF0C07D619E67A7019E11AB95612497980BDA8E0FB3EE9693AE98DA2
-D36B9AC48DC6F992A1317CA3D6A1E464F69BF2942F30D9A06C395F56A08BD456
-30DD3C36E2ABE5C7F7B8BB1CC025A382047049234BF02AC193B5AC6455DC31A8
-5E4CB3F6256D8BCF8544DEB5C9440FBC953123917B1D8FBC8C76BF4E5237B214
-F8BA8742DF7621F1709F6CD0C65F0448F994F61DFE94F050DEEA9E79A0E04C2F
-CF07FF0F415133ADB69D3941AADC37F00E135F60C4C0C002F7F09B51BD3A26E4
-84B0D041300ADF221811D9B0E6194C6E8704A9915D7DD630808A37ADA8BE8694
-B5B8BCEFF541FA556D9C3FA573590533A43F46A03E2F35DBD6BA7C454B3A6597
-C31BDF69D3D9E65D33EA5C7BB351B2E670A4249E88BC103C3EEE2EAC2A710B5D
-F12A8DF3E84AB65AF5810EFB26663ACC404B0CE0257EA225BA3D68B176C2178D
-4C1539256C341887207A76A2D86355E76A05B99365309A7413E5946157E50363
-3AB082CDACB4F07811B80CF93BFD5650A73531D4BC2212E3925DA54443A7BF1E
-B4CCB80D6DB4B143BF02F7C6D20B5F8376B5F14042B6271A9DD6780324823353
-A87BB5E2F8C0B676CB4CB8FFC4759B12DBDA3489345AB56FA0220E7F3317B4E7
-913BF111BEE578952B6606042DF8693684D26254A7E8769C54B91FB6770ED0A8
-116E6B9932227C0F9A0224C531F1DF4B9EB91E4C15F8B2EEEFB89282CCD27A4E
-F8AA1A29C7049B0069049B1532ABFB15819D144826CA55FBA3F2BF2A94E51E4D
-58F73C689FE73166F7D8D4EAF795AF77C3F52671D360105C4F9B7E17CA80A05D
-F4C07A772C1DE605C05F98E342055E6EA94E8B6ADB35AA04CAB65A7BD05AD09F
-42CD1467F779263D813BEA5563ED007C67426D5D23C4D57D139A8F332381F5C8
-21687B9291ABFA1550EF196C16BCF28A256947FEEFCA5549B5C1E17F45EBC75D
-89B8A5199B979A829B3D70ED12595C6A1C6F6238C605167240DC793018AD8AF7
-F5621BD7F7C59BB189E51EC85C88F5A81909F901C25CE71BCD90DC851A650B8A
-A174CF5680678782225B52E2D8850A2E517EA1B68BB34B51ACEE08E8BCEF2526
-644C05FCAFBF3EB5B2B10FAD704FAC196E6B5AC2FE50D2D16442ECF792A312B5
-43813A397234AD3CA16FDD9D5B057DDCB0B89E45686D5C8404360C8FC4BF299D
-F41D729E7EC5FA279EEBFBD3826ACDCD54057A3B8D5654BD6CAA79C982766633
-9C1EFEF52CC674988687C412D4B503406D8451D7B3754BC76276086C13D5F200
-6AA1DA5F664AF2B816488669EA6BFB8DCE11C70CA3C516D3AF20C5DB421E2AD2
-A609CFD9E351D3B23E56DF096449616C58D7DE3BC0E45A32E476B12F47B79134
-31A7EB61839FCC2EBBE75444410DEE389E3A3DD7F67127ABBD0CFB1737311A47
-D066E7D8660023A79DB6BAC4B5B02AF2FD7CE61FC0D95FBB554D5E739A59DD8C
-B51D4ADA0BF511589EFADFAF4497FC56BE52EDE8BA84D1C3D30724107AAABB09
-E638715E7FD8124C5B5EE8324AFBA306FC7E235FD61FA58252992742F4A8F21F
-7D4B6F0F63E801CC92BB8ADC161AC8DC69B64320667283FF0C9C684D736B1CB3
-A2A09348EE623A4D9E121D96FEB1FD968CCE04578F77C18DE1ECF2A2E46B117B
-C8EA2A9FFA396C2B6C5FD8590D4BA6673F9C2A7609EFD8C919185DB2E897B888
-D123FDDC86A2BB22926C90BC41F624B0F47D17EEA5BCC036309AC6C54778983D
-06CC0E25FB8EE7DF1FFB6E913A436DE6707261BB9433E69E2F0F48DF10668AEB
-B78A46DD99747C429AC003EA275F526163F3B10C0CC4B4796B2A5DC9D131754D
-0B6A60A4443CB6B60E2EFA792292A212A3DE22EC61074B174453612701D755FE
-D377718B9875C17C171A8378A11E9F6B6724BD84E30A8DD1D6E1E3781500176D
-B2BA9E98E550529BE1211DC0AF96C3F92685338F5BBED21F7F79EED6AA5718E1
-05742BD1EE3EC4275DF03C38B7DDD125F4944D97E8B9F0C45F50162D085E3897
-B51F2CE7156135C63D466412F7EDEDC7712732615E899C676BE53495C18D6A2A
-884F9C742E4126AA2C693CE89AF3A23B40764422C4B9E03F3C8A4756D23F301F
-DE5A25DC6DD460ABA181D05D7A50085B6A2F9B8EA5009FB98CA3E6E85E876575
-0AD4272AA0BA39BCDD1A1C07A0F7CB40FC0FB4D929AA0CA5C6814B3A145D34DD
-04CDEBE81FAB7C9A793CD68C6A360F5C6485CE9D98E3BC408537067F12AD4E12
-C7A9CCC289EC190972C47CACCC7C92FC3DB6CC5ABD26D41CCF34A168C6F90001
-935AD8CF48F93040C5C56D0C6137FBA4E11A26A0C785C8C86D75BED6646D7F39
-E5152ED51ACDB307CCA9090B777B4A22B87F5A8ABE7E61AEDF4444F36862EEC1
-E60A858EFFE60CD00773C895A43B73D661030C04DBA896332302613656068E55
-E5DD8CAA594F9E6DA689032DDB815D9CC3CCD58DEA8A495831D6009A5B310CAF
-1CFD51713CD953BA762B2129407473E61EAE3FBA19DB930D4F37F9B15D20DE9B
-AF028A0B9E26E6337772752E27236C1C6D4CDC21EB1307F964ED2C8A11ACD955
-6DE59F066CE89C2FDD9938F221FC87503A3B415A55F8732F95CCE3E5210892FE
-882476340B928470EF4C0A93149408B4332F78C8141F202470B5AE115CB85089
-7BD10E1BD39F518FDBFFE3C05197E6FCF7B2FE56AABD47375AF49AB45A5EB1CF
-2D2500141488E194FE1BF7F482C017D1214949749D34EBDE1251384C35836955
-28ACE519D8CF3BE4F34C1CAD02BFABB66ABD734CDB4060BBBA9EA42CA6AF51A4
-1B1860A836B0FC882A38EB6E8EBA7D5B8C062AF7DC1B751F2545D8F5AA4247BB
-539B68097B37F00C4202847648769F2BD50CB1A6EBFE6F8E3DEAD9C8DF15859B
-42802783724A42F62FEE70C268359D5C8E099510F5ED38A64F60915701781582
-95D0B92DFE9E0EEA56F1AC5909364007BD4BC0D67AFF175C65E90C0C20FD6509
-9AE114D29DD14D1D7A57DBCEDFD66C4A83D1AF665B661A3BF653FF7191DE30E8
-23353D7FE5D3D7ABE0CF521B0511C2C9B6A161483ECECDEE5DABE132A63CFFA5
-5278AA9B36B548076ED3F54FD4F6D9C43A91FA5DA8A19295E239B0EFB419BFF0
-55C1DD3E0C8F5CF8CD193AA1E275E2340C8972A35DFF378FD1E223F6A0745AEB
-096315401852937C9F1E032F99B1C0FDD85BD43A3DE81E2BFEA4F40F924CFCEC
-0BCE6E186FB500C4B6E7CCD22B773300C7A9C4E67CE08970153D94A85EAE47DF
-B22081995F86B8C5D23BAF2D9CA490783DCB37747EB59C7E8A18BF34C97E4596
-2B1F76612D3C664A04C0A5B565D05584CAF107EA82F48427597D701AA8E2E9E3
-F0D8490E1EAA751DB392ECA3F6206942BAF8B4869151E464DD94420EEADA9431
-0A975ADC02482F91C466642014F1F7B3A73CF16AB6D56C8FA467A375485400BD
-19E3E5A412431FEC5AC589DBA570162DA730366BCA440AB4A62AF8B9C66E5372
-AD5E54C228F6AF6309F73588CEDEE7108CAB008457A6482D66C32983E262B0EB
-9DF21A5708CF8C3A15638AC4EB9C0EF6F1FD13AD70E11CB0CA3B009981A245F8
-E54DA0D5B52B7F53FB6B6DD9695ACE96A339DFEF43568F9F4CB51563253E3A1C
-A1C5C6D90E1C24265AB7B12700AC173EDAF4AE5B4421C293AF6B00D780DB6FE8
-41F1B1793AC3B2BD88150F2609EC5A5C43728B6EA2A825943BE7A7D4C0B5DCB4
-DBFDF6B49E4EA9041D5A0BAC6F6856ABC8EE5F4CE6A4BA3E78F6210DB56C333B
-C61D9746B06108E4CA75BA834905E805D469EC14255ED554C27C4B026CC23A71
-F9A93B42531FE7E9A0C78DF24FC0D878FD11FCB3AAB8BB6406BA2A942203095F
-7A6F79F9B3B833AB96077E42EBB9BCF491546D821EFAFE0812EF7CA16B135B9D
-8E575F9C75F9A348770CA2E40C235191ED0C07BD769D1697EBB6BF36F39E24B3
-563408CB1EDDBF5B826B778680E28EA6A63B776A9EAFF955A2A217FC174CEDDE
-D8B30EF4C40E93D0DAE3A5A8BF224AF076BD61D0AAEAED47BD5294E3769CA0EF
-6F55109176F64B60BD319EBA14EFF514461C03C2AF861B68B5129667AABFA415
-85EAE9F50BBCDDCAB316DB29AB43B50BF76D33C1C17ED5D984430E13F0DBA8BA
-A78678846B33338DD4F02F99A04FB588160100161A143FE8F37B7372A1412B3C
-ED7EDFC8E9BA9DD2A61E400BCF6662DB1C4B5990B419D50240BA1905C3527BDB
-BF156E924D30B153F7ED128A025D028CCE857B6E0469153C5827DFAC5DF3D0D4
-96AD81BAB911D289B7FBA2EA131DD6677809FB8B4A34C638D6BFCAD4885F6B42
-DB5BD42BA7A29A274AD8BE91E0DA2FEC61B3EDB0A65EF57A87208D57C9E2547A
-00F6A219C988EDF77464A56543C331D399E193A6C0CB2BB50669837F917D9738
-B3E437FB635077EE67DA23A20A7024BCCA2503B7875C1A2EC8F6C8BDF428F5F3
-7115B8022A59DFF716ABFEE26405306E704A5B938DFEBE092F76C96684B8E118
-13E479815093A1E695A3277BFAC4157E1BE32CD0A55E54C53F988CFD93396690
-0EF5F6AD0F99A86100D54A3CD2E99544262234129BA71FD80D79C4C97CD82E2C
-2AC15852F212B68F3B6B82AB181551CD6824C360349D37A86D0F70F1B2572E1D
-A693F9D9A5A563043CBE38CA838974D76D068770D5B9BB5DCCCB153913DA4721
-D697708E8F81C41A9D075828CF12D59E00C7437A457DA236FDD4B98625D43009
-D489779825CEEFB7EC9A43C4E6C63E2644932225C70F4F1B422BE8E5EFDE412C
-D49D7A9E91202E5E2E6A3C6841CCF6D261F774EBC83B2A3E5E7BEF91E7738ACC
-688CB04DC2EF463674CF6BDC832FBCA92834FDB2ADFC29FE85CAF5FA38B4DB15
-F58F70F47459012A41BCCB3E4B05A6A61A62FF7455E58CD2CE7779D089031E06
-F382C8070783D2D7E7C72B3004326CE9E69A6383A2B9D4C90AC2762542C9C340
-B0852A1DF4510F3951E45D877453DA89A09E7420C337FC61B66092C2CAA09F24
-0DA57FCAE295FC7D0456D9D0B696DE192E4BA52423CDB3717AF58F1351FFD1C6
-AEFBBCA745BD6E661A455029CF6FB235692495A0E0494592621D603357E33A7F
-10D6696BA49885355A60C2D537774A6F0C3C8A98E55AC68A0167F6FB8C40AB69
-24E5607A6B1C24865947A1F9E9CC4FC6E3A96DCF652342FCD8537D7F8E0389CE
-2DD4AD950CE2776376B628D7AD36E9594E30B7D182051C2CA128A8D9E81C4A96
-24E9D786F9891DA52ACC290FA032107CB9FE66A02B2EFDFA6BC75F2D33E3E433
-A306D6501444F58F8684E6E7EFB36759FD8B4D6D4E49839F75A7C16EDABF9A95
-6FC34AE1D000C0360226010C95B7C21C3315FBA5A7687CE16BFF60BE63F48535
-C4C8C165523371AAE82848808786E5A9D1590A827D3AC4DA9C72164796942858
-5E152592EDF741AF3F41FB93E310CB88CA9A93C37E3D7FEE677BD10CC1118B43
-49C8E72E4F1E9B60348CB78C1AF5D38ABAD648F38380FED32B44E52C58AE8283
-0EE2614173E26794D75E0310E3299FBC79810EB191D39B3D2890254F43E353BC
-B093D380D8D4BCEED427E26528FCBB6821C739A825E27A116D64E1FBBA8892D4
-790E3BC92E10954F53AB4BC1296ED39647544C6B2B2685C10E16D16A19B1F129
-B0EC0802521F42558F96611C139D1739C8A83F761F561DD3540D31EBADF80863
-6E124DC7FFDF459AE0A5E0654FD7CAAFF80BDBEED8934ECC2AD3D8F729ECA1DC
-3FC10CB3CA7CB8A1E83AD7254AC019AA0AF184857DD498416AE8774016272504
-382403BFE128B7CCBE4895DE5B7F8AC211484DCD4B6EA61001CE481315971F21
-0D36810C3E662D063F1F966AE4D801A87AE77FC117823C097C4327FD25873AC8
-4449E34307578D79B8981CA2FF925DC6C2C26C53A4EC62F045D2DBC1CAFAFD52
-72333A42B3652F67478D67425F39AF28EE40396A777403F0F100B1D068E75756
-3D925DC8C96D2E50BFEACC4BB829C3FFC9D4DB5C141051D4CE5F3DC339F2D01A
-5EC81719FA78A4D90AA3D84B5153C79A5E5188B2CB3F4E25828249ABE39378CA
-CE01D3A062D90E348ED8900BBDA9437F14235D5F523880355B3F5C40605AB0F5
-76077B0E7EFDA132A26A61AEECFC5A6FE7839D1AFA869BD9A731434796458077
-C43FA9020098F09557967674BA76183EFF4D99B97830599E87B7D17D92F60EAF
-7C416971E54BFFE805EDBECCE66B3C8199BADD6381683E1E16360D2AC0932ABC
-8078CA47042550827F26C16AFE835E983F0BEEB095CECAD0CC97CC21E9AE628C
-4E80BD43A6CAC9DD8D99CE8C6FCFB18DA31A6A6E501B6ECE9DC77B56E7E68BC8
-D5F3A8293648AE384442414BE09822848B461E9168F08FCEB6850368C0DBCFE8
-0A87F41294996EDBD66677A763C372C06823CBB34617E7693872332F0E39EAC6
-41CF7E2BFDD0B3C73AC4F1D741A969547E88EA32B906C23AFCA30C719D089956
-48845322E1591FE75ECE794CCE07B818B624A472FD0538BDDAAD1A3938A5FC65
-4393146E0B43CFC59ECF4C82954312906016BE2E1D35208FFFD7400E9FFF64FC
-B2F42D181AA6A72CCB97570DECD3476B06FF4EDA9241B554015BBE99699CBB7C
-F37AAC1EFE738988462B03D9A622F0E2374D050AAD0EEDBFED41E7596AA9B8A1
-80C176F86E29B499D2152D3EFC38F542CCA9AD081273682D676586EC628BE845
-45BF518A29A8348AEE00F3E306FDBE937E90072E2FCBCCACB9408453ACF309E8
-E417A9D4698944B40019962D6E78B2A6E50FDE0C79C4B3FA4A567D51CF73AC67
-DB25BE0B1A812389E396B3E82C290932C623E94A2D4B599BAA371897D31701DF
-11E7E1D4604B99D9119D557D1CDDAC682A33282E72B3F39E4B645EF3656A7DA7
-8BA007D8918E96F8968D72F8F4AB3A4BB083EF8D8AEACA2CF9B111C553EC2213
-A900861497197D66707FD61D70A5DEB33BFA1CCE9AF9BC87951B27B29A31A31C
-5A3D42AFCAD32584917197D61387EE2FDA5EB671261A77C3E72A347F0C7DEB19
-5D206294ED3A7A5193698D10A0783ED43ABAE9C7E9DF2DCB88D061B536B69CE0
-EE5D0C9C519225827E7D41A17B0A9A8FE1CC435B6BBB34CF9117CDEECA996B29
-B915829F0EA5601835A94B8E9DB3FD42EE254A3E300160F1621D34F92A345C30
-0C9851E4E70AE389CBF5BB6123C04C5183FB7335894C56FDB05DF944C36E2969
-439FB1A9E60C0866CAE0B2EE78228A6525E00DF9AD594FC4D0411223AC2C8D26
-031B5F25D1174515D4082E76A4285FDEBB18D6F448F7ABB04F565C78253BBEF1
-E1784A516EB8E9107E0EDD98B0F1F1FD5839C0BCFF363F8208A33787E642DCEE
-DFA66E1B172EE906D0F26B880C0311D5E057392B7621B800BE153A71F8E261EE
-F4CCEEF239E4E4370DCF1AF9731423F97CF1E0C8F409EB259133516708786DCC
-9A8CE05303821ABB3A7ADBFBC9FC798C5DFEFAC6F0B35E087DE4293391472DD6
-64EA434BF8F47E32AD7393DCE0722AC314A49B2B49F803A1F5C891704B5605D3
-D72A4A07B47BABF6DB518A3101F66FCBA28549BE5E29B571F3459FD23ADB2326
-09FFA0BBF337BE64F2B03D4E5D7EDAB882D4B7BFAD4F89DA57AF056676041D8D
-30B4A60519EA2A23FD3F189A1A07F1C6A1B0FEB328461C9728AA97D5A91373C4
-52DE4ABE9947FDEBA7EE8CA20E19D297C959D97292D7001D5A424E4E2AF565E7
-829351FBD96F287092F5C352E69C1DFB49DCB84F397ABA539742E9D9270C313C
-1776961EC2D86332E5233447EF3017308CCB5A98B953A73597D502F1373F1A5C
-3106E0C76CCAD5B4C2E71AEA894E4C8FB81E68703000AEB58A560C30D8717D8F
-453C9972432DE54112CCDF06CD101C1632BC7B6A0139ABEB720844A650B3D1AB
-D061FBCCE31CBB6FAB9D612DA2914063B1B0A225DB8C4E3B3C7DF97275BB59B6
-F108B2544A5A727D638A67E8CA58C0EC67CA3102577FF5741C8E9FD91E66ADCF
-CA0BB3AE3033418FC1F9D27D95D908511AF8D9D6F7449C6297377A7E1A37BF4B
-1CC72748BEE6CB3136C515808AECD726B416476327FB1CDF146329C4352968F2
-A74F0F56A44C9C4C669898013413FF875E5CF5CFDC5561913550CBAD50D6F7F4
-28A1283236F36713E51234B87B290ECA15A385F1400DF09F4F737FAA7786DAC4
-62F2DB0A2CBC650419AF4C25A14B40D95ED4C84C7094C8161DBCDBE0A1E2613C
-10853054FEE8F9ED4031C085AE68BBD3CF002BED32C7475BBA0A5861846FD938
-47227951492372E7CFD09FFBB8E96064854DC09DFC9CDB68AC907A761980CE03
-E47BE5953F4115448B2822844CD8BB4F498ADC44FE6FA4E5EFBB7258A7A82A2D
-651E939D90B8D1AE1AAEBAA5C3F5B0620C7EA0A7D4D433FC5931FC1E457F102C
-371D06DF6668A53E6B37189A6199159FEAB70359DB493A99F9DBC6B3EA63B531
-6564C89C52A14B7B116E1DB82A7F4ECCC3B9C7CEA9D9CCBABF02FD29A80C8CF5
-5409C302B69CF0E608F26E3A55A83F9FE10A0E4EA47B160B678B1C1282BFA0CE
-56053FE37E368404CCDB530D438BCCE8B7BDC95550F95A6ED5879BAED8BC00E0
-BE1CF4FF8809552D9251CF7D102B82F99E00AB1C00FAC475862B8590B7DB11DC
-E8A62EDAD0806E661E16857E06E9D29F012175936349FCCD84486B7BFFB3F162
-66D83647D504084A6D5DE70A0F6F4C1D69D5C2603297404DFEB2C09E5D387062
-995A03231DF1925C6AF1D10407B0752D33477C729597A25E338B0284247472BC
-8DEDDF5EA206D064D63E69BF6609DFC190086DEF8E61F0D6B6038B0D90403D8D
-AD62AF688D4E0DE4A293245E05B6983EB34BA93DBCEFE7CD284B3FFF499D0647
-B33E252DBA8EF6B5143F48A6B39CB0E074941AF5A63FF1D7E892763AA00B6950
-1A3F7D41781B5352EF44DBEA30C5361B2A3F329CCFB40ED8C8166B451080059F
-90A32CC3DA08ECC03467C03C43E8F9DFC8C9036B49BF9A0F0E7B009253FF7F55
-20D268239037B017F3798ED38987AC66A522C115BD56883D69E8D5B227B6906D
-169146F569D2A016946E7E9480A48B2977E0AA7969E1A4808CDD261ADDA68182
-BCB9FB99456EA7A34456EEDEF359F08D9FB948985068C0AE32BA01024E313A35
-7C746857B73BC95A89D045EC32B3E8370942291058E9998FB3890B6786F4A4F8
-79A2A95FC4AA7A4347C5FD9D24BD22E6026A0A1EB7F3EC94B108F35CE6323301
-40541DFBAA75D763468CE3704E69257CB2BC6FC244C54D890CBDA51998F3A1E5
-2B4A9922C07D17A47112858537FD48D3C7D7381DC25C96639EF119B8B5A9C104
-F62BA7873E9376307A007F0D87BF41E1469E4FCCD1D1D51BCC255B1EC7B44EF9
-57653949967F182CF5555710BE94D19A15DEF2B2EA25EA110D40CD2FA83AA365
-59C0249C8C4EB272E423FA361D8FDF2871CFB74E72ED4A4DC7E18041C82F7424
-7B1C0CCB8F3E03978C3C61791CDD2CCA0EA47DAE9E4B8E6405C0A0AC69F0FEDD
-615A40E7DAC6E977E2DAE4DBDDC38670F6BB9661AE96BE8295A897A23A0B9D28
-FAA1F439BDF282ECFEE4F7C49837E7EDBF10B6F224995A2451EECA0A361C84A0
-F2D013D69E8B1E7F22CDBF2A9E1DE6977F6219B636429D378950B2686BDA1084
-CF4E03C3D863A341ED0A82D1DAD7882187284EAA2A7FAB4F528033C16F08526F
-C1B2E6EE8BDC621B8B572FAFEBEE0F187A2C45C0422E6D8FF94AC33B7CD02D42
-5BFE7C49A470838FC2B1BAAEC31F38E51E3D5A750ED30617627E360E60D110AA
-6F2B7B2B8277B32CE89A37658734645977D9EABCD9B5B8BD8B345ABBCA986AB5
-4F2EF966621DEEB355C468EA4F2F2B039C29C886C29C5BE57EB5E1FF508562F3
-F4EA5D103CF33DD1DB0D0B4AEC6941037CFA887C79E7A5EBC6A28D41C6EB713A
-F6D86D45A036ED5C048143BF8CCF07A6D03E9EB95270C197194A7EFD134D03DE
-E524AEE5B938A090B2E2DCDEE4BEBE2A0812D0589247F84FF0A4C54B6740AB61
-EB86DA068E082EDC4FD9B2BE4A31A380FEA3EAC38652EA08A4F3B0F4D4FF228D
-430CDBD34EF8A25C1367554096161D59C0157B1A9E7C292982DBBD62B4C2BA17
-7285D0F61DE7A571A78F42C35DB4341634E249ADE2CF1C7BF1A5BD7F9DD4CC32
-0F2AC9B9CB1942E6E5876B6FCD9A4316C1CA7407579DA79655509ABCAA842F48
-0239CD401A18E677D3C0B48ECDCE557FF66B0815FD01822C188D4F14C8EFC2A5
-C7DE1285AFA93E103A79202EFEA7C4F57D919FC4F9CF21A8F04B30828D6B74EF
-A9D38FD85BC83A40F88CCA010799BA642667E3BBE3B2D10F943331266CBA560C
-FD5B7ACC84719D9E9F326CCFFF5A5597227162E350AD222D03BD79439B11A1FC
-960EAE48DB97C6DF58A42328B05F3D5383AD4DAD2651867A3F83E88829664BB7
-5C92A1B7E4C17C943D90BB6D831D7EBE95B6182C04E8759CA0FDF136D53FE418
-1FA211E6EDE7ACA9151EF686B6064402998D84A138BC8A0BC89FFAF5FCD4B9DB
-5930EEC0A6E497AC265F65C2F8B3DE2768F085B98AEE1F53476CC643F3575827
-7FEC02825D6F064F381873329583355E6718F9E7DBB813AA536F899F5F5FD7C8
-CB56C6B8F23ED18D3E59A266FA92CF59C77847356BAE5AA01D6957B7F02AEFE4
-2D1495D454A1FE4AFD610849B21019EA4F86ED8B3593C8895A9FBB2438172A84
-68B1C646F68E855D67896A20AEBA26D5A6E7C39C3CA6B9350019D91C2D1EA8C8
-38DC94430373C8F23DA7D18578FB3DE8FC511D0D2BFC85123605E0B09EF199A2
-09341AAD1D06D407B71B2D36E2DCA5D22D427190C2331C8C9BB6EC1FA78AD5FE
-90363ACEF0990704FDE3DC7861271846BAC30B51CD2B1D8DB725B0C177804446
-0D2170417E64BE9F281C12F95C2F7E1CF4C137667454228A130ACE5325C2ADB5
-9A4D4D6E554896E5FC7FCFF16A0CC05DF8AB4C86200E95B4B3525EA2427190A8
-9D341EE108F3F33EDB08A0285317A4FF70BDEA9850F8542CC05E700F2351CBE0
-AE35ABCB1847B9F2C76698638F202FC1E8350021A096D8C50A1D71E40557C8E8
-6A0467C24A259669234A954EB7F3E1BB52D2F65C99117C7897FD131436463124
-DF9856AB3B47BEDE555795ED166B15AEFC6B23EAD7C975265E4B6EF2CD17F80E
-CF0A95FA4A88C365AB86BEC3418034770C8A1ADC9006F3DDB5429E0E64D00A87
-FE3654F1EA9C143C3C434F055BEBC0A7ADA16066EE449A33DC6EB2C4FE183468
-A89EB09AC395A17CEBD60E847C9F35BF0E9BBE7A702F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB65763C9AE4
-247C7C9B60444EFCA66AB8108DF1085D4F3D758CA672BC89FD250646AAFC9585
-F7F8583BEF48D4A97DCEAABEB778FDFC2AC2789D6F4E1F0D9237205E6210893F
-77BC26458D7CB35B844DE20BC63A4057AEDA379413FB28B0C7C9A6AAC97CEB9D
-5F712AB7B25A697092C13D2042A04EA2FB36836E425CB0C97A9F30C6758FD6F5
-2E4A4AFF054C14C7507A4D90B76F44A240D2709F26814A24C405E59D5109948F
-87A93BFABAFE124C8D58EDF774E060F599847C6DA5E7349BBD7791505BA1AA41
-C047310EA5BE5555F3908ABC457CF1E806AE9D9ED134577DA0DCAA9120B78425
-571445724A1D1BE4A49A88C16F64C3E73CE74A68CE9F413A0186BF50527E3378
-0BDC374D6775CD1A60D04A2936D6613D91023157B2277815D3EACBBD0F5EC49B
-E10FB601A820B3FBFDE967AE881960711947F2C00DF744E3E29D6783D3F10D95
-0140A5B62877AA3A89794368D3866910416393C21EB2C8D48B36A3175ED20B45
-D3389ECE0C0FD0B8219CC0FE131BCADF70835C1ECF5B3B45D25467E7035313D4
-C9D0DA39FEA7F03DD763174C09C7F59D83D484E2C8151DB2A52428C5EA3A0649
-0AE2EA79DE5DC679CF978D3CE71BA42811E1DE2CADA4FD5618AAB6CA11976402
-57E5F5448863B4B0123088E8B1C22853F731BA9797197646BD327D873769B322
-12479C1813D4DEB5E9C7CFE623DC65CC67B381FD18537BD381FE8B0EB0E65407
-D5C970329E61082E5BC69152FE91373CB3773CA987742586E6ED8C3016011724
-E3F5266ACC8161A3E60B779F99C62483289B8F5FAB2A65A2B3EF026F50521673
-94318A800C2BADBE0F256E2B0B1BB9DB90996B17E39E5732E0932EE71D94AFA8
-6B5B0E5DAE5C3DE55A167544D9F315D7DA1DC1DE8B00E14164B941F136801A81
-FDBA98CA9A96D881EE331F4B45FF396B54F7BDF32408863D62F39AABCB5B45DB
-5E1DFB417F9E79FA062244A32D847C0CE041A90A2375EA44ED95DFD6A7BE97A4
-69A896ACA2A8F3D1838AE43D8315F69DEA5DDFDB068CC94C5B0890474075E320
-A5EDFB9E13A5060BD2C45E855F51AEF305CA576A9785324F98652B3340F6858C
-0F936ACC0280DEBC3084E0C3BEA789D8E5CF803B7D72F2E96AD34D947DAFC787
-806C936F0F9D8C7C8C7AF64EBB2EBAD3A97DC56A775279BFE6FE5A17209A5DD7
-BA86A542B70E8AEEE4B53A6A7E389709156BD02E37648648A8C4E6366A255D4F
-B6D33EB9F9A7E96AEFA0E9D68268C3A5A1A8CEC390A244C6CB8F210C608F51B7
-769E52259B2EFBF44DE98ADA262AF6132C829EDE71A0883DC517E14DC0312DB3
-10899A3662CF88797DDE4BE8507121E7EE58D83F0761A5F9DFE463637560BE31
-EA5E7931C115F68D02EE832D60E974D5BB0F6025D28E24058E8E3CEE6B45156A
-70B4C4DB0C784FC5D4A95959C6C71C70233E3EBB696E813A2AE3CB830D6D07E7
-4F790752D9E8E6BD41C3EA514EFF1ACA2DD8D1111BE62A17120A17A6BF806CF0
-9E8FB18AFCBDBF67B15E4D45A3688E4A7108380FD6DE1491CDB932A7A8CBA1C1
-5D6770AEE80289FA6D6CF1460C151A78147DCFE4CF3A0A91BD7A14091CC7BA0B
-87F2E10493A80BC1E88A382088CA09806D7324018B3C832C984EAF9E801F08CB
-AB1EABE8C8A6E14AF293B5776C6F75CCDEA7F25431F902A1247CF5A101BAA8AF
-846E3366916058BAD88CD99BE5369D7CC3B143CDC0E48DA50BD130997962726E
-D50E227D7171951F42C60857453E6574084AFFC583423E902277E7F86BCC93F1
-C7A8CE812F89B20FD8FBED0005CFE83303F61369405336DF24CC15745443E9AD
-8B49D9F29798735EF6892E925C254400DA606C657DE585088692AE468276EEC8
-4544F24C068ADBAE403BB7D643AB02A289097A3E87E464D1E2DB0E7885AE8B96
-44C08FC42CE55281BC901F194CF9FC24755DB18845D8FFE03F70A9A2D70C7097
-46B7CA5F10AAE098D99DFEC165BA71A67381F49D1F09BEEC2C0348A290C1A1EF
-298DC0B5931CEE66FB6836A3C7A09CA9D8B37043478539426F6269EAC21F5ED5
-59AB35645218CDE8946FD4468608D539E0AFC73812F41C6AB6508CB796B50483
-C268C21A06BEA059D0EE331836A4E242E243439655BF0EEB18E45E6DF5BD75D3
-1B5E0112FF2080818146214D1A6F1CF66F2FAB4A4A975B99FE8282FB68D29032
-EA0AA51B2810F66E0B72A8CEC2BAA30E88AEA22B3A30EE6C66A1DF6D4273EF6A
-FA09EC1CA0BE4E156FBCD5029381E0368F42E466B2078639AE281C31F5B282C6
-6F621D7371113AB536EFC242766FAC1696D1902CC514E8444D8C977FEB555E82
-32C08EEEAF5A8820E4341EDCC6E98AB6F0EF6EA5F5CD18D1922FDD273C61ABA3
-1AE8EF4874E27B005CE5D1308EC915999E62E44638BCB9116A69A202392A8463
-CD263C86FDB8E0CF5E25CAFFD32F824F9475232A27862EF2723B84B35DBB0627
-37579F19E21253433D9BF96F4C8841331190F924CBAE983DFB9728B0B896879B
-DE3A0D087C1E16BC93D734757D327C31866CE6B15DD65EC169CC2B9C5FEEE538
-E5B8FFBFD3BE85FDFDFCA09EA4491C539D79D4F7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 125 /braceright put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
-38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
-D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
-EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
-A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
-F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
-4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
-6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
-A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
-E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
-1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
-452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
-8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
-5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
-DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
-BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
-741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
-E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
-E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
-D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
-C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
-FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B
-984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876D88C8C097384
-46D8D7E41CA1A8979F9B07EC3337E70CBBE3A377235B04C79BBBDB66CE1C1A41
-89DAB7CE91F2FC0CAF6DDAD09992D56F72299068192610EE3DE5DB7CF6366B4C
-D74F414484DCCDBA449BFAADA39D0F27574E604E31CB513B18E3821A33076151
-C2BCB6E957C77A0AECA48C587ABB5E8C7624D56B32F80BBCFDC874AAD6EA5119
-C9B06886F08CC7DE5400E0F52B07483FD4BAF26C1556CA27B259FF3DDF71131F
-DFC05D8B14C28F2073C460B5011B76D84F7917E919E50FEF563B5DEBC5CE6923
-ADB72392C98D03CD978D3FC207A52B91E267E7ED8BB4531E8BBAC113DA68765E
-E23FA502BC71CFB91E4FDCA39BDAEB7FEEC3588B1108CE4A1652B770375724A6
-508376586216289093485CDDBBE68956210B6FFF3953D097D66BA31D19CEF2A4
-35A33AE97547B81426E58F9FFECAB633C6433E86C32130665210F44F10F3A2F4
-EA31540D0BC08EA4DA2DDE3E8CAEBE52A3E8B037632B235D4ECE3CB797A5A939
-12C45C282783F675060040FFE2676A7ED903798EE3B86644EF30D3B461D4EC3A
-A1D2E95C02FF1531D93180F66A13E868C9E1FF1722FEF6C4F304921961D4A10A
-6AE943157B1B0E8871BEA71162E5246080618A96D5B23FFA8F420F2AC74BFB60
-BFA3BAC4AC3A320887D4090FA3EF7071D2E1DD5D70DB98A01B6D315271D10F2B
-3D9256D96FFE8D8BA0F4781B74490C63686397241640B08A08FBE7CC9B1FD0A8
-21CECF0F994CC97AB18411EC8745F5A6AF56010C22E73CFFCB45B82DB68E6552
-2E57A4C06B96C55031442EE1F53373C50E14657ED320D9ECD21ACB26D7535DEA
-D36F68D8479E0B28185EDC21207BFC130315E7341A85018CA22A251ED1BECD7B
-08A33D61A73E061B2B1B6B23FAFFE725F967F1713EB98446A9045AEAE23E725C
-ABF73E2B90F429D6EF62567ED4140AB5648EAACE7DDC8E61B456C36D377418D7
-4BBAD5754ADF5D3023EBF5E35886078B9553406EAD40A1328EF917A05730AF7B
-1D776901B4AEFC3444FD3FF04EFEC96FA9ABCBC841975993E6E829A1732D8E56
-CB51C433510AF8E81CD8693A9561AD2C3F9B9737C698FB07D42C089F720E36B2
-997B18E2BAD498424539316476532E3B730962F63C8BBCB9C6155FAEA379CB8B
-3A95089641FCAB3E3CCC1FE6A2BFA86A8E80668715BBCD87FD41463D2271C067
-0BC3563F0A9991AF367D47239E3B33D9E77E40A9D654BB19617957B378C4A54F
-1309F83F024F5358AA13263A463E6A2A09B87479EBA38D5DA14B98F7F92E81E6
-0632B36123FCC0B5EFC461640D4EE2AF6D3466E7946211354F4AF4523C84F329
-1EC06802E64F16A88592D50A9486DBB8BB60FD5BE6736262D92DAC0D707A5050
-3B10766162EC123B8C1EF25EC6A1E251A260F7A7BD767A6016BE6A48FF43EEE8
-30E190CCF23F253BFB4A400A7135BF9420036747B5F02A7E51314ED9FAB5D38E
-823C41FA2F593245192894F9AFDEF64E851D3F7046D7FA5A5D379AC6CCB6266B
-1C275A70454CCDF89E503F905A3394B5A29C58A29A9D32102DC6140631190E90
-D0B8BA5DD74BB221020A859C078991376AC1C800148818E1ADB0247BAC2B30C8
-A253DA8E5AF589D782E28C8B858FDFF43B8712FDEBA0D521F1F2AF52067D9EEC
-8646EDF30FF7EBDE300812E02982DD71D2B50131B83C9B85FE0B893BE9D76C57
-F8D66647DBBEE5BA35AE21569655E3360F949C0FD7EABEDA4517E4BEBDBF33C4
-E6C4D23E7A85607CD8A22EAAC998C8BDA22B9DA5487677A51D506887E0FC0753
-1920400D848ED4622C1A0362B81EB42D4BE8409C33402FF56B4D4DE84484D405
-3E9E1ED8819D19DEBF16EA2880F7E18457E118F790F743F77DD4D3FD485F4567
-CF519CB64B5EFA0F2FCC33935F34A1B1C0E13A6ECDDE0F46F8806EF6B4BFDA89
-4C96EE8EF41DC6D3639E05D28CDD68BE7FF9B4813C40E2DBD8128C76046745DD
-183723B7C99B280B6F35511F3DF5C68E3EC5C228E0F3D542FBB3E2990882940D
-360ADD51CD6C506E9B0F4B92FA81D66A48D2E0B88B400A61B3A3C63FB901A35B
-794B3FE5F24FA5C19A0ADAE1CFD39989DC526A8D7DF2DB68202B04625EABB9A0
-CEC29A7CD46F89611F20C7AC52EA934CDD51A9283A730FD55316B9F3329CF882
-5204A536E39515D87C8DED692F6F42D0AEED90858D6B353C91E5D77DB4B7BB90
-51DBDB22462DD823FEE6A921F2542E905BFC7DAAE91859F4A426D21D608EB90D
-4F24616124F04B2E02CC30F5B353C1FABEB9D9149845508D7A7A40A2B21C5FC0
-EBDD46DECDBD209C84115E4A70989B497F395856A9BC02051DC3AFFD1961E87C
-6682FD84581D32724B7F74B57A4050311D18E6F2A6829C06BCD200C8F2384FB3
-B5283BA05A4AF66BD5C8A0318518205B3AD5EEB9AB008453AC996486D9CB01FB
-AEDE528ED27726D5264F5C884705815C92A44827F9AEE999C985C55B1172C2AF
-4360499ACDECE51B658BC54C7CD1D710F762AC9B9F55E94801928B6969BC9EDD
-4EF5ECCCEF7ACAED450986E1DF0303B17C3305F9CFDCCF0F5126389D1F914B6B
-65A162D11F45FB3DAF1A392B0969651946F6857A8308311C74CD535B66AB61FE
-E43F9F6289AE48DD67A0267065D11A614E8AC9D1AA50FB6A2903A03802D67C41
-A85BF26F952DD1E778EEB30A7D37430E0AE050D2D53F88A42921297200DC6D5D
-FB5CF37D6C4D36308D7DCCF5F6114F174819CD274AB248A7D0B8A8509462D6F8
-D27060BDE871964E48D5452E267BFC78168B1E730121BFEB15D8C0FE09E4E9AB
-628AFAE2BAB5C1FA0932ED41B943F83EF9FA2D89189CDCE25EB970633E559417
-F5027B2DE02F1E8337CB7F3B20E31477A7488DF661937BF0EF4E27EEDCC5D8A7
-351F095688240347F51F1C5577DA963B5578964110D91459E4A29718926DDE29
-F674A75EFB64F1BF30364C4DE94E69769ADD61A60EB101C4F281066C52D81014
-295AC8472CCC6CE76A2E26E5E55B748744EEB0C86A2C510542257C437AB39624
-AD0B43511B5747DC5C5FF0B01CE677902E9D89BA25235189E734B2DE5C1EFCDC
-2D563CD581045F4222A4DD142E26FA5D265AC6E46156D78342A5725E6B46A1E6
-BCC036CF7E7954A24492D2062DE31854F680770609EA825DF45E2D385892BA73
-1C3E675D38397A61D1DD71FC82319F750AF899CCE1DF03E8DE8A20B2699BB5FA
-54773704F027F85AA19ABF09931BAEDD1B5E68199479AB257658F906D6239A38
-A4B53F752A0755397399DE09BFAF480E21BC00DE5A62DB344A2E2420894C822C
-F4E72B03A65EAC98D8454EB23FD63670C2EA9ADB79E2D39066856A955259CDD8
-DA071C5787C3A6DFA69AC2C23D8A0BE3CC4A5BB3051542BF1EAB0EDEF6762989
-1FF1620616A6A12E3BFBC39612230497222661467DFF903E1C92F1D5503E5B36
-D3E49853E7C387C488A55BB65A8F2211C5B5B15643240329570F42808ECF92E6
-681F49423AC9B53AC09FA055D5A2C09B9CD2F6DAB62C061D81CDF78FCCC74BFA
-7CBB7039AB1545A43C3A159987D17434027C382374F72B3DB70D6982CC6DED4C
-AF695A53A8CCB2C12F1EAF677128F4A384866514BCF60EF5C36FA75EDD1E72BD
-752916711B97DB5AE81CC701CB75C64684FDFE41903E5B3A63F5B782D98AFAF0
-1FB3BFB93C86561C37F92FF273A37FD0669E25541740E873406D684E51C118EC
-B1A01C9D2556319C958CF783CA5C3E7DAA8B81CE19A00E3C3E8D3C7563BE83F2
-A1FCEFE1F6503ABB76A64D0F41E932F1E83EB04895FD8B6B98F2EE8C9474D611
-378EE1ED84E98C0B9BFCAE75EEF6527D77672AB87A3AEF5EF13BBB2C4FBD4ED5
-416529721D339D2561A448BBFE416ABEA7771DEB40EB2C35FA3FD2A307797BC4
-BE8B5D308B76100944FCDD828A141D52AEB2F15ED41221409A24454E90924AFB
-30AA3786E8E88B45E84ED1FBD0CDC019AE0EA86782BA1D37995BFEF4BC9ECFF3
-9E0492AA6CE63ED90E8FBC4273D99D1A82B3326EF1AF658AE54775121A052327
-3F91F8912082BC63D1A910FBBAE56E5936A0FDF1842ECBA57CB7DA0699E40595
-7E4749BAED9D74668EB10312771E7FBE95C469F82B728C6A5D37DC0D55B6E8E5
-CD72563850B0905582FC68A9084021A57617840286C010E1D140499D163908E5
-CBA3D56B4BE7422E13568958FDFDB2C14C298F41C268BC451CBCF4DF5A2126BB
-9585886AACD1FE4041B368EA5BFAE27CF34B975E4F834401B3AC8FF679CEB229
-177F4CC8A5B887FA39BBEBDDA813CFD60168BE35DC0D81C968655D340D1E80D1
-EECD7865CCA8A5A190E3CA768EF9AFE7D98312534AAE8E6FA740CB6A7FDA6944
-955AB6A9F0391D4410A0ABAC6E37CBDDB354E96D775FBA0B2EBF766ABC37699C
-28B6AEE9095D392CEF085EB906D1E069E8C6C31EACFF214AB08AA3A68855882E
-29B67E5F7F0FCEFCCB36C01F0638ADDB71900C49A8BB1F552B2769715738A59C
-C54D46C889B56AB1DDD2A6D69225F760856B09E500C7F3980615666DF8D371F7
-96F3DDE5386E6F1B9FAD8957D2DACAC2399A13F3DBE63CFFFE2AA9693982BA88
-D1AE9AC108D85927812526CF8564D23C714E0E9F02F24018747339FE7F7DC960
-879B5048C61F99190759A672EE57FDE56F5B4A2BCA2E7F7A08B54A7822404A0A
-33DB91CCE89E5298C8A5553F8A3627ECF64EFD36CFD40AED772394FCBE360EA0
-47DD6BDBA85108A108683F123F196287C517E6ED3941F8F8314378AB8A42AC99
-774B050F4FDFD689387378B4B557C0A719BE8EACB8C00DF44F66784582B7DF1C
-751C0434B05AC64C468866DF6964DA63217994395C309A857DF3CCB1918CC422
-24AE05FD2CD4B062B93BE619E0BE1598AF2BE28485E65D78C0F3F225F9DDC477
-D3C5C74258D6B209F867B0D1710D5189F532968C72A0361F2158675F4DF7F835
-EC2968D3D2F1D495DE30106441F93FCCB5E406D141EE8E79EC384CC0185BE78B
-22F0F33682F7014C1AE2C81D7B61654893F73A89B9647581D73F9E72601C4155
-0440DACDAE4E181DA31312AEB888C1E1E4C2DC64AF36D390646FF43A91BF1DC1
-DB92648B31E7136E52F4712196279A5981C96D82181D10DF0C88B665F053FA30
-7392B699E424FC7FA5DD5820D973E70F964F2615D5148FE81BB6F5C8F326D170
-16249F7E4A9BB7710043721FA28E3C006CE6B10CB4C846F5203932808F53A2FE
-B42A53063353DBA5484F4D375E01D3755ADEF10E1B398E048E8774F23AFCA558
-335F945826289C8A723D66B0C6A0A0533FA77F5BFE94731616AADC92CA0658DD
-6BC00965E922501953D66CB2CD22197500A9EBCFE5609F4E2F66F5DE2998B44E
-4ECFA94CF29F820A34B4A417B23C61BB03679D1AC09B21811901F4A72160F10A
-ABC63D877EDB8FDC742589FDEA04F01F03347EAE11BD8D24DC77C143D4F7C358
-0F7E54214A9E716DE0B12256283DA08DDD82CA0E56B902667DB791E196789D0B
-0E8AA11A5CABEA43C4D17CEABC4802A318D19E1FF4E71C4BC733C25B7B79E37A
-C8C392A00A14F225B2C2CDC07475B2919C5442CA095406F7FAF674B3852A5BD3
-B8FFC4D41A62699244FB309333E9F924DD0B3F9FC5817E4E6749FD5665347F29
-887D06CD183684518A5BDBFB16AFB6BEF4A0138F76AC37E6C321D231D5CA38C4
-46A779206A04EF37F0AFA31E2CCE3F67263FBB3D97D2E012C25BAE412F6E7298
-E6886D2EEE8B16F61B37B120729E0470A020D63CF61EFD44B4BE7E0C853EFC25
-2E63D9A69172104D1B7A40F3DE08E174BC894F71373928398114E136F993BD07
-E4B06CCFA7CF22AF501C53839F34B6E4D28E7A2328A44F79864138CF7ADCE044
-A965EEEFCA0BC67CB8D6AFE2FF647E55B0B6E93805BBCA7532E10D27872EDD9C
-B09FA49E3119979EA371E8EA68A8847056CA6135A6F5113937AA3D1FF39A7313
-5B379E814459CC40ABBD6BFEA1D21E72608B1E756921553CAD3DF3FF5856A1AF
-21AF7AE9CCDEFC7A373DB1572F7810122BDC77843D5DFD29CB8E505A3C956BFA
-DB670EC7AC3F620BAA7BC6501709D7E8FBFDF4C427B07197B17EF5B7FB003206
-E768DBB730A613710A8A8A851E302C19EE1CAEC5893A7BC6C51CE68DED095DE2
-B7D01BCDD03ACA32A66C8F3682D2F34F8A6A3AAB335F2EBDE1211ECCEA162C81
-0DBB4540B5D5FEE19E6D81284CE604A9BD3C58DBF7CF5290FCF386D28D540848
-BF72A67B20786A850F3DA9D5EC6CAF367ACF7744BF6EE3DC1D09A3ECC1C837BD
-BC269DF5B67D84550BF0FC8DA0C3DED943EB85EFA6740B03E98D06D9774DB428
-E1599D97D5883500F4C79DBCAD43FA5F1B3A15E14ACCB49511FA8FC2C8D22362
-F610B2D1238FDB9DE44F9B1E24B356CBCCD098D096A52FED8C2415AD191877EA
-46BF23AA5C5E93FEB90B2A828410A0D9B44E7991B70516707D11F7CB368D9704
-6D4FFBEC5146E3ED916E6B55343F5A006FD19D204C1AAFDFC529FF9588C17291
-5A02A456BB18A2C1DB95E2DD55FF92F56B82B0ED52EC40B18C88CC65DB53A20B
-E90646A8799E6323E8827053075BDE18B844793838956FD2DD1B2015366B38CF
-4CF35EFDEE6CFAC1C82082767FE6CAB1AEA3393E197F7960AB2929D8A3B3EA1D
-F3F4C3D87287F2AA02B7B2E3D45E29B64ACA4AD16CB5F2955FC8E5B1ADBED7CE
-19980DFCE38E9F0EFD934AE81D4707FC6A200749E4D592ED8ED6B94386A6288E
-8F1F967706261F54A455EB62E607D489FB5C6C78E8F036E2F1AABBCBABE5BF2E
-1FB18804B46BC83B254FBD675B1110DCBD913D877BA10C6CC95A47A9B259FFF4
-5E3ED20F1D0D8CD6D1689BD0B6BA0F4CBA4FB1F41FE13D7D6296D24FD59EFBB0
-84658739E465622AD4518E896072486C77DFB20597E0E2713EAFB9DE3EA4ED21
-EEBBC01EF63900727E2466A6F1D8268CCC2D350A311F76CEFC805706110EC46E
-1CC2187DAEC7F3D5829A8DE0F9570334BFC64382B16277145EE04F4B34F4644A
-A2984472B4EF947CBF153E64975B6690101687719EB71B6238647F55AFCF36ED
-B40AE1271D094C72A0B100A36B4976FFF3E9E917EE3B429BDE5478F9DBD79EB2
-EC91AEE2A20194779FD6F06A30056CCDDFF6D6A04916E0FC538B9A05DFB718B4
-99821D9486FA27AF9ED83CB7822B4B5DA84ABAE6A1A629310C226FFD0EA4CAE7
-6EF08B3D3D64B996FE67EFC842500819C85E60C667A908D96B9597F3C9006276
-53CED9FE3CA0547AFCB391FF2D8E56630D2D4B6BD74C478819F6B50A07571DB7
-96B3B53F51AAEC1E986DB793610F712D8A0688F6CC14BE3EB1F0A480B23E1726
-EF3DCC55DB084FEA2411683807B65F821B41A456C689ED1F0ADD1AA426544F85
-405DF1E9FC9CD97F2074E22EC2EF1D7EFEA983302B7162E643FCF80B43EA9DAC
-8F8066DEF3C897B0942677E08F21C76CCF82FCFFAFB86A368DBA814D66DB4B71
-3C3CB4DB82CF834587316F3FE874151BB168C832A08FCDF7DE38CEA93E969443
-B7AE46CA113838124B1254CD72E1C1EE2F5D7C07F41A0EA943B432634CE66939
-12034E0014C4C2A424205F45E6229D9A18E625C73D99DE139CAD2EDBCDCD793C
-9605E2CDA2CEEDB9AB8E5C5BF80679816924DAF2F9FB91C2BF8949E410B1C40F
-8202CF709B3C5922982EE5E64C8E64E8A76425E678B5D75985F50B000CD6554B
-44B7C23A3EEEDACCE7025D956EF7C62A42B6F29075A1CCFD080D0037E60921E4
-7533E5CE9EC8606FA2D86B377535641B9810680F55E612E72FF2E29D0EF70352
-7A2F6081170F60ACE4EB9690786CBB6A0C4C8D47987490673BBF6AB375BCD426
-B1F2E2EEB6158A9F937188FC4C7DB43D7E1A9BE88B4571BAAFBBB1FA320A574F
-61D044313B4F408879CEBC68D037EE2A61144AF88D0363403127EB57E396100F
-D66B88C25763C102F78024B47CCBC58D3CD3012E2A4FE8B66DD6D5CA1EF6F110
-C0EFDAEEE437B663F456390595453B3229138B3E44438DBC19C573B3AB3C1A52
-B9DD7081BC886D4476BC8C48F3CABB4041021368DE78455EACB45F884E5738E9
-108F17402183F1292587EDEB58BCC389F0CBEB9FC519B8FE54E66661CEE25E19
-65210B8E1AA6E52906F964B035A0060F654FFF983B99622C558D0E9C87E7BCBF
-0ABC02516300797D53254D25ED3FB28EBB55EF360865E351E5AECDBCB934868B
-2A66BAD3E1996CBBA5E8299D788E3CF52F40094749D1235D7A33D8D5F088F8EE
-67FCDF48E11A11317534CFA7F8B07370C499585EA550DCECCF5F45CA1DE498BF
-1D73D5ED0B85053912C0C01E82C93D52AB0ABAD1D510C8A3C455219AD6679C68
-A5F90F28878173F0A758C0BCF7443DE9EE625C20DC705D50A9B14199CB1FE397
-E632DD86085B15D345431D1893E28125BA59BD0314CD04B3C431EEA8F0398C65
-1ADB99D92E29B892B7F3AE9A221A2CDBECCD6E04751B267B7CB93DBAD18578F3
-17E80F569AD02CBDF4EAE9CD3FE64E6ED68A349C0AD0A9DC78FF3AF41DBDCA4F
-0B0239FDADBC0751D63F691845CD22D6A589BF2B96C0FF910BC5AF4327293BB5
-0350D1C331FDEC33BA49285226815940CF85BE0D2F019F10F09916D4A337CBB3
-E46112C84DC3EAEA3C53E27CF5BAA603928D06B1C462010D85FB6CB759A0ECAB
-46B4D46DC0E91F7C1F08409A11EED50D497B14C30AB61BC8B148ED830D9B6B32
-235DDB9E85B3239D8ECF031A60C2B85E0FDD2FFE81E9683ECD1E484E5A74D463
-357C2329C22BE5267D6C3003342942CAD29FB842DFDF9571B0EFD786F9BDCC2A
-DF53E390CF0C37D5642400833FDF8772275705072564EC633CB8942F18C21446
-3678F63D2EC6E38CBEA040AA6D8BD4037E0130D42B2692B1795A7D2C3BE44C96
-FAAEB73F660FF96052D6FDC8E88B6B4A7E35612F7ECFC1D145B9D82E380A170C
-2B1BC305941013CE1B213431ABFE2926DCDF246918406B3C60A0819A1389D4FB
-477114F7458675F8BD768D4C965DEB05068D3E0C0439529E423FF7087CE68378
-EF6193CD0C0623B728A288D2418FA7669A1A7CEE0B9A312ABE3033A13DF93080
-0FF3659F3458D2517CDD6E353A87E55E436B58ED64478479C6D4ADFBDC023BE8
-F547BF123DC849142D789FF42CC021878B90E9D6D06619D366A27017B55388A2
-669FFB1C5A4F8932C7CD64957F002E23B8A23337EEE684D766F8430030D3C763
-6F319FE3C8FD64106B97E789D19AD7160EA2F737D22E845DFD11EFFBE6D997F4
-C14DEB5AB50A1E78156C9CE1829F23951F31B3DD2B0691680209A0C6188635B1
-4DE9CB8EFD55AAE48CA48FB6C376AE8855D565751C4DE82E140F5D92385DBB03
-45C2D760597C53E7AD9F0EB0D1B17CAFEB5E6104F225900D3A62CAB700EF53AA
-BEE0C19735E5D8B6A13CE0EC8414A13F400C5E0DCAED14247B72DF7863A1D8A4
-0AB5B475AAC573294112482E149F1AD9E2A3F2EC9FD9A123918BAC6569CB96C3
-5E304EB247EDED07586F3F7C0A203311B31A519D815A3FBA267CBFC4AA7ABF4F
-A630BB23A11836E1AE8AE839BCC2947C57977A32D1231B90A0E690254CFD68DA
-0C9BE906AC2DC52C14F27A4925AF8473050EB4A3DD757975A30F624006B99CEE
-D786410EACA5AB126C78B7E1BF3FF4370EE15C3C1FF93AADF571DD570D0AB771
-19E00DAD39C0331E4E7E6FFF0751537863AF3739E8D74465D9521B9B8451211A
-B9C4105EC0012CF87CF933D5C485867E979C78BB628134F94240A33BE21D374E
-7F470A0916AAEA727882ECF48D20E7D05541B4FB1447F7776CFFC30F05E37BF0
-D4531938B5461873F881CA325DCCD57C3FC3A5B957D0347830B14EFC36C6A97B
-2132006EA90842B4E1595EA4F3D5DEA1D2366629EEFB535F4A9B810E87570466
-4A0CF3607546B61562F8D8BCB8E2A02954E6AEE53756F2DD9CD872E656CCF855
-BB83B9457E0B80C866EBD7B7B299A8FF22C69DD4BE84784A1F5384A25A4CCDEC
-47CA332CD8E7B8B43E5DE78956353D12E37AF886F862559C618B49DD26A2B4D7
-0700D76476E8965086F877D8CBC63843BF9C577033A0365CB58D6E145C4DC7DF
-7ED391342EFAC97162281031CB7779082C8D3693DCB09DABD9CFAAD97CFA8F5E
-946FDD15ADCC51D6EB279BE86308E32CAA6BE12CAF04755D849D9D2C322647FE
-9D2B78392B907069AF72B794196C176DC6C6E456F99FA3A72376160EAE5FDA73
-FB392A8B2674A7E7055D9EF2ADF6E4C8A2AD65BB51BABEBB2402F4C4614F4E37
-1AB4F1A00FEFFEC1A70E98887EADC6E3B31FA92F43F10D2D31526C5049EF39DF
-033FE0549ABB449B02E345571FC49FC8A3177F20D518DA588CF68CBA7C6B9222
-2D1CDBB8D599B3BBAE75934159688BDAEFA796DC12541DCA4A57423D8EAEE2F8
-A37B6F1BCE977AEFA8E901B5827B6C10E92A2BDC59DF08B371B0CC107FC8C41B
-1F1E1FB12E5C750FD1C2E1FA5A1B3C1DF3F296C79BAC9A1B5C0E68E539AEFB94
-25860738132CEBE3EF3BC9A2A5FED3C7A450C5D601F849D6E746A1772D9BF886
-E169ACCA26E11A8A3A16295C8A8A8DDD163E815702DE1E1B60C959D1AC4DC634
-6EDFCE82D8F03E99FF54843D46EC8CB471F69E4E15ED1160BAA40C2CA4C5E8DE
-E9C2D9C20026A20D1B50E172CD660129F2C3B60BA984C2EB2DBCD776B3D082B9
-55991545090F10F28E78B3A528E6244215F45C9D0E4F36ABE3A1AC72F97497AF
-9F0FE246B389A8FAB2DAAA0CB7C9B828F0A90903ADE5EDCAFFB80C09722FB3DF
-AB268759C00BDDCA1143B8C0C7868E76EEC9E12F87B56BBC03A9A88B1281BFAC
-46B1DD38C512EC8A61F0321546560EC8B78262F983BD0E9A549779DEE8590FE3
-A143E1F39C10504CD872EA86CB0C413E80C8E14502882665591D0E977ACF4448
-B4A1C8B3223855412EB3F2318FAC5FBD42496DC8691B7171967C5CBD1DCCF2B1
-83AE4D386A0C43C0E1E8F22993C1E1C645EE8CF503035B868BDFF70E2F8EF129
-B52D5EE2029DC77E04EE90843839CE6E4FF4E7CEE84AC44D03EAF3BD94BB79AC
-2D02B961C6983AF44B446A0A66932860C200CFE84B45C180D70DE898CB3B1E7E
-7447109D337783DE82F36AA8C02DF9F104B11568CA69844BC2002859E5CC36F2
-3C2C4BA170F98F0FB505C458958A653ECF30969D2F99E39DF8AB3AB7DFCA6990
-D1D8D223FF9A60DB9E68DE4887D68A9DE05452B3396DF29ECFA30053ABD15B2D
-60BC3233774765AF2E0BB7638355D60D1582B9D61316775DDB4927CA365DEB57
-112118CCDFB49BED39D69943DF11C5E7A5AEBC4F5DEDC76CE47753A5941D2AEA
-8500BC1070BB2C256211468A97D4BA17D612D34343AA1AB7C7B5A9E1F15F787B
-2B30D5F7A87E82AF9B052B28F5738424D54BB9D997CFEB8A46BC24FDBB173B3E
-8EA443CD71DF13B6711287EC6485B9BDEF175C5CBE40D49A9DB300D281F418BD
-80756C07CFEE3F564B7630973C93F9517FA0DD567D72D8C1BD49EE95F143E416
-C80843E7A915DBE131D52F984B60A044A6FF90C02280ADF832D994E46ED3E4B9
-3FBB362FA70A9343F93769838BC7589CFE94E0FF90CD275721268A38E4E75C4D
-A21D72A9A18FBD72D0B1776E319C19F49C4A23FFCEB85E4BDF502C790389CF34
-8F471E04F581C205A231CDAE06AE5509379C6A487D276A1CD86B97ECED33470B
-4109F290848C76ECC6C39FAEE56AF058B4157033DE661FDBE9155FB973A64A42
-7857D2634240072B6D31B4FC4684F8BDA37244536C0C5FFB9F6050E919DB1813
-8834F38552B427ED88C3B44231713D85CEB2FF18094B07E5F7133A42CB495AE4
-AA76A641F95BE5AB96264B5AA16054C1967509202D25959C00D31A965C85A72A
-0135CBD8DA2FC786A78FA769287A18575C45DDBDB66292B1566D7670B9BC07A2
-B3A082F1DB10E958D2C48D36B318581A3BA082CFAA71D34FE0D82A1FFC21E217
-D21F01F76B9F53DC102FF7ACB4AF4EBA17E8EBAF4F8A80C1B6B19EDF118D5456
-C42BB8E0A06F7E93EA6FA2B5C9F96A379ACB3D6F6AD531B087EC18B0C26B88B1
-4A3B71F48DA3AEEC81EE95BAEE578DE349AF07E3D1635D82365231217BC57C84
-ABA6514AFD4688A2B8ACD00EB0C5EA96556A8C08601FEC3A0DA49C46A3ACF4D8
-9D0448894F57E3CCCBDF814E1B6F043E2169C42C1F06D1787BF5264567781387
-5B8DA433EB598419D68A93B9D2CB8FABC0E5412BAA4D61AA79BE778344944B3F
-33A9F72CE4D4E4352C67514EAFEC9084015A39D538C885C4BEBF6DD69DF3CA4A
-165584B4B719431AF0C6521478B31473D67F003D7245E279E841E36790224FBC
-1A0E9A7BE61FF8EEDF8E0594D414F95F268DB20F74DBA7B8E69B102DFC53ED9F
-15E5FCB63BCC7791F44967631FD662E8CB0ECDE45D8E73D777E66F425517B208
-35662DB1798020D7207BBC1778E8BC8DCA33B5594DB58D828728A8F8A4F7F721
-C01E9EAD7F6944D6F76137B828F9CC8C4B7068F2A275EFECE73950659A4F4079
-FF9D60443829FCF1A02A86E26B601BB3459ECD96086625CBF3839610897F9BB0
-A909C0CE853D66BF43A31D22A1317973D7D1CA1F2150FFE5046E5E598FBA704C
-8B42DFB4E154BED8A6B25A4613ED38045046AD6073342D0DE8A6CDAED7055C55
-09799C4A8AAF473E3B39867CD33DC784896E65185539D81111FF069DCACB6830
-D390D19BBA6A0923DA6C42C5AE6362E43999D1F51F16F870B88AF25DA49F6F7F
-B937BD2F6D68C48110FB415DFD11FF4E3DAA27B6F620D38D5A6861F44569FFD7
-3DEE8A02B83A52F7A7694F85127147F71735502962443802EE1278C747E2098D
-871E59D72321B19E488EBD8C3858B6F24C80C5EFA0CD7D60D83513EAB7480AFE
-7BB6439FC3F094C8A75F06D391A2F89CCAB97B709622A243D991CAF954274A2B
-485B3E096B4B29CDFF8F1B38B20C59C58B5E503B4B7C8F7ECE5E80268D441A70
-C04C699D93892EDFABFC9D3577BDA1F4311B965E73B2F0E7DC4F1EAF3E57DC2B
-DEA096F26C6514F08001B043294F1FF6EE52F7C22F2344E8A604CF1CEA564D0B
-455D22A3172656ED7D7ACEF29BC3B6CFA5CDBDF3D68222A7CD88DF73A92CE846
-E473980929E931D9985C2D59320553FC15DA410A0406955F2BE2DE347F28F0D2
-11CC0A234A1A9716CB9E5B38D49DF17E8D2CDB4A65EFDA11ED68A78F697D8787
-A7D287258E982FAB96665BF1DA5ED3DC0AC0DC76CED28E4325D35E2EEAD48870
-702A44899C59386A48ADE3FB78AC8CB20E170853512A987FAE5C97E3E04847E4
-A79F18090A5C76E54F0930735BD38AB5C85F823A02F484A86CA11E32DDD5C722
-A1BDA642C7873947EB32465EC7AA13D3B7483BD6118C7E8489CAF90D6D735202
-648A45E29816EF808BB1CD1CE3DD5C5050D4EAA62755559DF251D8527832D62A
-CBD80EAEBF685C2C04403EC508307FFC90C214E919A10D6AB1DEEBA57F7AE12C
-66B0B433AF7A0D00781821E106B06E3A4BD302C7D2E63C466316B29F3675D826
-8F31B5784194FC3E93B4B9EC73086D7705437252DAED5EECFE5D7E5004F5A3D9
-EFCE8EF2281EBDD763F50D05C57E1A3B7958A4053EDE78C5E5FF8A884502EA60
-F5D191071089C68B2AB5B478A70F61BB3F94A476E46A18C8A5163F5FDE94D514
-000022438B8AEBC536B2FD5F6BE36A292C2354636867D0F057E8060B66DEAEBC
-BE69EA1E18C882438DB9358F985DDC00BA2882B37A9F34993512BFDED60678EC
-43BF2B2C665610861708B37A8C6DA528744B4B96EDA773C9F55106CB19E513FB
-8FA8CC84A7A93F8DC77F8E5C303F7280058886E1CEF5B7AF061DF176F8063FBB
-9146E0B0A06FEF0ED5F5707ED36318B6770FA9CADB16C9A3FF8BC81618C1241A
-FB26DD47F36EB924E86D1F264664EAD6D8A105B2047574CB323D27F6C26E6B27
-D73C08FD70759844209B3FCEE915BEAB36B8CE14A7DEFEA03CC09FA0C65EE76F
-61C24CD89BCACB60CE10BB5A68888110A9224B0DE418FF8185A8150EA81D3AE6
-6E9666E2F919B03850B57EA4BB5D7009153EB44FF2CD80A847AD510A3B5148EF
-A20E78DA6281B8280BBED1A8222066D450BC60E746F6C668A498FB1D8ADAB761
-BEAC17CE0AA4803EF37472B749EA982D60919B8B9939B89F6B4D5C46334BEE37
-4C0256740B1D2D21E7EB2D57C584E7EE5856D8997D6EFD85F4A0C1BE1A9FB8C6
-1DB2BEE1990786B249B602D540FBB4324AA95FF8A1ADBB51456F18C6352B219A
-3E246E4547E021AFF1EB9686EF993B1C81846A73E877DCBF55E83E3680F4EF02
-33EF0FCF2E3717573296108835938CF61D740CCC3F59095D7DC62F9A3A6A9EF4
-1CEA89EBB4D77C3E152781E6D800F9FF396F7AF003BDDDE5A777A63C7087F8C8
-6B46C8AE31807048FC1B3FDCA85F15FCC65C4004031CBF43D97021361FA1BB9A
-9E3B4F9AB019B416EE368C697CFAD0C5C9F98CB8A84FABAA1F4EE75B4059A69E
-C028A59889FB706A122240E5A66E0CD73EF71DFBB1C1C1764EDC20FCA679CE9B
-53CC2B24E1F8EC118350AF6FC5A74D651DC3DC70284018D71FE15757BB9C4ACE
-814FEA293EB49FD9017D82C503EB6501286DDCC39FA79A1997A638B40C0AA028
-1D426E6308541C58427FE4F3967D48EF4B38446AE98179556B9196A417066CEA
-8DE2E49358B3161C17E578F56978FB46CED62C80969676AE0F363A5778BB0F1D
-FBA63EDB19607DCADE0988BBE3079F03279B31D14FB3C92DE1DDCBC39A902C6E
-64A7DC11F569FAFDB26D67A9DDD01C98555CC2D2DC0F32EF43803EF2AE620FA6
-BD01D5AF737934FFBE75EE2F6CED3F66080A1F07356913D2E3CA7906547AA8E6
-E92CC4509AFBC8CCA92305F4D43F92308C8687068EBBAC0A115E71863EA96C22
-65D1E0FAF4FAB2589991944B8852938543D2BCB8A09DA2727308171311D75ADD
-600BBDEF41365A8BE1015C10A4FBDC3EE05DC1D4E6ADDA50AB8C105E425BCCBB
-81D3A30FFFE0E95FEC8EC56DEDC117D7A3872D85006B9CE3E94516C985CD26A7
-CA7958A3F88A9445C098DBD16A17AC530465B888CADBCB31322CEE54E6E47F33
-A7200F57474260378A2923F7E8E1A00C7F728DDDA98225B4ADB1084C21B623DB
-2D2E1F0CB7824CD8DC869554A106ECF0288AAE00EC53670DB84AE24CDC6C819E
-3E9ECA92261CE1BB73D4DCBD47016F1F9BC1C890CD2F310412081492ADB56973
-68B3EFFD3DC07DDD773E98416C96EF574A17DDD774AA6EF821545A1F6DC4B409
-22C68608546EEA3EB76338A308AA60F7A47B953A23B97E502193E3624C5EA150
-EDAC00E9DBF6EF46BE0118BC31B0011C174A13BD7BB68A8F3732AA31DAE28B4F
-CE317A675E8B89A1FC3257CCFE987D4FDD53AB93F3788AACA2FC17C8FC70DDFD
-B0B412C24684D11CBE7E06B7BFCFA1FF44CFC792BA23A4B0BADAC5758036D3EA
-9BFA541065C78DFF818E32088AC17BAEC657F034950C1F5F27E079818EABC3B6
-E49467081F656B040BBF1E704C9D6BD08C9ADDBD50CB276D621E40580E7E26DB
-3448552DC7B3D0D278E9818348744BFFA3251474C17FA63F5DF63FA5D51C60E7
-5A088B061067D5164A6D8E2272B3974BA073B8F0ED6F83131AA7A5DC1A3CF19B
-D3F85E873940FBE4CB8887E65B558AE8E4275F1BE64B52EF085E17324891CF01
-2677978A947939643C4923B889D3076768702F4EA8C43EAEA20C1D166E661F0D
-25D1521F8E9DCD1F93208C4A2F960EB220316C37D8DCD2B34063B64760A10213
-CB367739252455D14C86971AF43387C91D6B6BE549C18CE8E78382D886B79AA8
-05ABE27E8F4CB4CDB98789A48409B9720206D42DE651F4A89656659054FA163D
-9E6C1A9B05796F8390D29FD4591303F959AAB588A0653A11CA61CD21204D6951
-CC4A9BD9EBCAC446A270C7ABA63D7B9CFA26DAD7FF98126CDB11C4B41D5D3F1D
-AD2BAD4F8CFCEBCE8F42C30A38DF70AA3A62BE587241EA7E63E74B83FC5E9053
-566A98566912EB1954CB34CFC25F69914678A04B55DC1A50558857CF75073071
-4DFD733F915D095FC8E50923C1F1CCC0200535A4A1833040924122432940AD64
-0861B3AB620BFFFB49BABFD829ED433E1AB6CEE85E35D251CAA1B6D21E6F0F2E
-BA540FD1F479DD7D5B5BFE047AD1C11417C5E9E3C1882358C3CA02D1F70501DF
-6D8D9BE94CC42DF206630A87612B9A39E42AF674288F008B175761A024E808B2
-7F0DE024624C50FD5C340F17FBA742721BF206CF203062687C447132DA7CBE57
-4A92C312CE71C42EE368589A37A2B3EDCFE3094286103F578144744EA232E0DC
-29C366D7D5B44D13D3BBF74DF14FE9F94C2BA1D9DB14DD6BCBEFE8079A25AEA3
-B7AF8EA791A7C38D9A638EBF8BA01C3BAB49EC816A8D318D501A8BE6231F927A
-A1FB9B2D78B9E087F7D8922069AEB819B555A0066C7480C1776781A29686F454
-812572A1FC1D66EB535590C9082DBE13C347A8A9A3E648AD3E5C6CCE9B9FAB52
-62DAA598EE9603C7C698D13F681752AB8C25A784ABCD03D04BBF73C78BA78063
-596ECC3AFD7199509D5821DAE8FF86F26EB0CEE57796CFFCBFF040194E3D40E8
-61CC6A842016F9D3472594B34B9871AB15110F8459D6353390104D44EC03FBE1
-9BA3DBF5AF46C41A8E39F684C929F7602FF97E232ADAEF0AD3C52D89062A036E
-3163830AB855F4932CA241DABDCF2ED823D7B20B4E2D22DB807DBE871A080824
-C70276ABD6C50F5EB779C0920509CB313EBF5166ED4001F60E053B64D2985B86
-2FB7E8712A50A84EDD5C6F3BECAF87A0F33F6EFA1DE499C9AACED5B08CC037C2
-92755591ED61BE6D88971C7338693BBC2B897471F6C4CFB0FEF30B05369EF0B2
-546744F42351A81A12DC076D0B1B96CEF32BF3F7AF2A4A0C12A8BC8AE5986336
-3D97E99FC81DEBD4DB6EE8E1C3E61CBC35CD3B0BCF39A4ADF0BD5E894445598E
-AD17D6BEFCC2D31A09728DF32F03A16E83D3984CAF90F72C7E4DC70A12A5A793
-1DCB7E530AEAC3D9AC78F575FB0431CE3B50F044C7AB1820D47CDE716D8DACCB
-B5247279442A7CC72351913A2FC4CA637CC0567F4F74E231A5208B0681A4D153
-092F6BC1FBBBA76F83CF85CC551307C979FB46A14D004B60FC48614798B3786D
-9709A5F29F6FB77083A277657C4A61EC2F550BACA09C4C31CDCB9117EC2C3E61
-09029C513EEDEAD4857E3F49E26B4A76821F31EB9893FF5D0201CD866E722275
-3863040F61657640AEC0ABC38525669B2437A53C38861E57A8DF9D0290351A24
-B3AED0F6FA1B96AE0AD03FC8A8E0D8DBD9A4D64DC8B5B66E0AA66D3E533AE7A6
-2B0897CFC73C235E9028C3CE903226682D5CD22B166DDFCBDF0EDED0D419481E
-63751BDB753DE33BF3DD1CB5CD4B6AEC579DFA8B2250B8F62AD439E0827CCA69
-B9D77FB7F30905AF7B2A7EDBA9BE85E9B456942411B1BFD61FF2A5F13DC0236B
-B13CF2A3E068E89665C8A2951F5B3C5B0FD283293E0D26601E526A7CDA9D32E3
-964DAE0B5E6AC2891738800BB565B83E242F5EC1F8C6BE1916FC11AD20FB12A7
-0FEC612E2294D216B214EE79905DCF4333F8D4DA4A9FB03395342F3FCDE1CCAA
-D1553AA753090A3D0538E39BA2F6A3857E5D3E1E3666194F0FACD84B5DE6B996
-45C798251E1728BA9D06F88A46486AA8382399AE28D2888E21F5F42E29F8BA28
-819EA1C6960C6BBAE68D380481F3229506853AFFDEBD810784E259001B0DF98A
-BE2B721DD7D3A2DF3FEBC9C9692725A7CD5970FB4F2AEFF1CD3447388EDC79BB
-6560B6516DC9B33E47441CB8387439C08B7B8440A3DBEA661C210496D0BCE231
-B818A90DCA258496B58E5B57AF5FE8D91220F0E521FB9F1B37E224BA69619991
-D17F81D21888CC23383380360220C386DEEBAE27F1269054E975456337EA88E3
-9C1997F1D317F2D7E19434E96F6BE61E90A9495D2F8D5796AB2A3133A3DED131
-00A84DF55FDB089AF3D273FF79969389BE50EF20E334DDEE2E4CB25A8BF9AAE5
-3A4C8449546224BE40B2B575EDA273A04CEE43EF7947DAA05F841B144F52CB3D
-AED514EA41B85CB8687F517927943469FA7D41E6A6E06263303F4E40BF6B2F41
-AD04452A282010771BA3C6434F20D556C56E2103C65F9CF26DB748BBF4C65B1C
-4A955855BAEC5CB145AAC29A3AFBEEB84895484F4E271EFFC729E0CC4C0343A4
-B615A988DA712BBA26BB7343E3FDB0688126B5B30AB914F478AE8191B4840E96
-7F95B1701871F442C1757AA0A5671AF423A43AF95FCC44BC6C14FDF96E41E9D9
-EF37DF4CE4E75BA397F601DFB67E1627FBABDF6FB031E1D6099C07EB3569FBB7
-7E3CE6B46FAB1B179C2D762557E36A2301D292BC34121152A0F6B87AC15046CC
-862C7488CDAEFCDA7D00A953726FAAA7316615A79235F818A799FCA089F86A9C
-2BD0417C629D8CA85B64B6EEC344B25A66235A9D081C8714CAE2671D53C353E3
-2014CD579C4BEFD7CE79C2C357CFA18154839060414C26A0B7AEF4A559B2FB2C
-A764EA17AFCE7CEC77B92F16E27BED75F22A06F949F291B6A8C942A503F99B64
-1E48FFB46E328F8E8E99792579B1AA87D50B74C7F783A3634240450F7B47F089
-9101149C31A20A0204DD3FE82ABF93D95A36D27AECD5AED88D2195401BE9DC98
-1A1D863AB00AF312B64C2F5687E677B0E01B899A2BFA18BDA9673E8AF15DB462
-D45F7D0F625A4EA5E6640557865D5BB98E11EDF79AC08FE7020D29B95C8DC410
-4B746C76F3E2422739743E5D6F1D01D4788BE203D34D5823F3F2551739A7FD2C
-A0232E8EBF90827D47F381DF815AD6E161D39E90E13C6DB7A1892AB62E598893
-4EE18EF1784CD42AD8AF383647BB9BE4BF22F48125B00B0EE576B5F33CFB0D63
-77B213A874F19E8D52D7C13306EA7EBBBA090F59B799C74B573AAA96816F8AF2
-EB0D4551E59C4B16A6C997E69A711C4FF54A8617051EC8D38D72FDEDCEAA7D43
-3C0C11E590E0A286BEDBFA3707B8D9B697F1D22032D97124B219269EE50CB1F5
-3F4AA8063C6FBF4EC193F758FAAEADF6E5FC1A35DE0E75B3278425B0814AFF33
-4E4BC6FCDC5B0EB1AC41AA0D5813B533B6961CBA4CAA2E9433226743138BD859
-4FCFF8505EF1F0C8572C8A8B2C718454728EF49F3BDB6E159080E96D7647E1C7
-612C75243F3C63FDCDC1FF9C31630424D61F78207445BED8E18BDFBE3D1083E0
-61781011FE156E50B7102F8C01EB7E57B8680FCD2BEF7256895B5A00E74CA5B1
-B5232102E565D1860C68FFAF5CE79F717D30EAF876E53CC30CCE2B20C7D238C0
-8E424382E58FB28A6EF36F52C7B6148FAA0ABBBE11A45475C9580086E79A0B4F
-7DB9EEA941308FA536A760F7A8A8CA60A8671F4B5BD0C8DD2AC84F83382B39DE
-9764A6091894B7D6D1009D16A963130FF0548EF0F03309ECC3B0BE017D65E75B
-52B53ECE1874BB3841B880AAE0723FDAB19E4344FD3866ADE0A3CCE1D03860E8
-E82326934057992F4C9F183DC10BA6A855CA0A5A6D889FD813902279A6429ED5
-085025ACFFC104D92854EF0A74E77F5F92EFD5DF2EA068C11C3E97BBFAFE07EE
-E1D48F33DDFD119A74AFE5FC1333E6ADA912FC01E78872FEECF6AA42C267905D
-300C216DA4AB68896AB6C4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BADD50DF87A0
-8B6D1BA96CC415579DE9A26786F37C6F37C57E20559A06FBDDAFB7A0421BE3AF
-ED947D999B9B6FCFD973D2A9CFFB2C38CD1F4E83DE081288F2654E747F7E7BE5
-32FF02074DF581DB456CDD381D834EF577A7DC94FFABD35019230545DF24B281
-3C57DEDE6580DFF703681287F31B62A0DF73E0E08FE3E8D4F3BC58079DF85A2F
-9D66DE46A9D3F8F289BD78DD2641DF574F334704A570AC88AD21D0EDA5E7660A
-5ADE393595DB983117680F836913355EAA0C6DBBCED2E7568D988462897B5EB7
-F32692135C9C6ED6E12978DDA350CB2BA64D433A908E31F61761C23FBF18DD4F
-987FA6D14562DDEC9623FE5480255072140CE23ADDC4B0E867FA871B5D1CD62A
-0E07EB4CD8067A363DB0FA8E9A81109A1028A076A716CCEA3D569950E2683B60
-D0E5EB6611DA3DD784FE69E0425E19731170E3FD55E533C4D2D9932B5CC8CE59
-D641D0116334D2360F7A8681ADBB014895484FBDFD0B903E8E15DCB4C5207445
-1AD1EAFF6D9EF7EFD9883B95A6F179D2B108CCA419643B31658A4755658130FE
-E210089026EBFE95DF621F381F7236E4A407F8298A30E5F704C28A1C5F64FBC3
-9991B88BD657CEAD53805B2F61F2264DC7159572C18E5537886145C22574845A
-9A616E5D4C2613192073481EA165A94547E0337ECCEE93ADE0281A913C9B4045
-C3165427682AE888369D9BE2A3333232979FFEE701652CCD553F4909D0A99FC9
-C8C851B968ADBB92C8550384651FC30FD010251D792EBDF4BCE1E241AFEC6B67
-EDC73EECA0BA12DD9A22937CACC49F0AFD3CD7E032C248F70D2D338CBC6E9B34
-205C184BD86663C972E37D05E01137415E2F27F6AA774530FC05BB3DF616356D
-4FD973B3B74C43EBD83CAB8E9F72D1B4278350321E4894587B458BA313029168
-AC14916C7FD5788B4E4A675081CE6046FEA28ABAEFD1ED7C577BB74F66F5D8B2
-2F355DECC234EAB0DF594B9C9F11A3415DC4734AD1E43CB4311C8DB693F2ED84
-C70A36215C4D146DD4DF54FAF65B8C7A2B93498B4A74BE58B40778E4A881DC38
-D180B995251CC4A6AC8C8979536212CF023C0EDA692DDCE760D3A12C108DD40B
-C86B0A2300B94E7AD95EDEEA99AE3A034F21E98FBFA2E31621DB4BEF674CBFD3
-1FD6102118844C29CC3CEDB9A9BB2EA82C5E43934A7BBE72980855283C3BC562
-11292ECCF4805B390FC29C3A5C526D4B365ABAECCD0B5D4C71CEB495B455D836
-548AFE038A03F581390C5AD5814F6E395DAADB1B3E93BE91AEC7BF5CF9220A6A
-91DFED453CB4013B89FBE39B32CEBFD4BF498FDB985407ABBBA84784FBA1EB9A
-41B2B9BEE5865DDC8658920D96B6C26BAD0A67EC5940E5C34A8069B1D31695B2
-C7095A0A5C74A733436960E3F1FFEF9DAB3CFB3842F2BAC3D6498652D3CCD618
-8336FDED8A3FBC5A0B01013E06B10208B94A5BACD939B91A9251F8EFCD0A8970
-A7D19A1CED133D1BD4A1FCC33C0F11E3490B80DDF8471C1BD826ADC77894C7D4
-E69C826EAB793FA6C1C942E9FBFC416213A66B19710A34239758CF055D6C4E31
-39DF5B49A21E433E299C6E03E290CB2BAD44EED9D20C0B39FF6B0AC8D1D8D1CC
-28196F69A3FE2FD78A65DE47387363CB633080D42048FA14A7656346EE34F2B7
-2472024F755C094803EF3AF917C4D7FC183DFCF1D72D73B3BE40BBDF63E621D5
-A07A6FF8C5C5D1946FB877AF00585D260CEC0051128927F0E68FF4743BC2C5C4
-7AE2F82CD28D717E155CD2B8E0880948EAE84A3CCE30B01E8445834FB3D3062E
-CD7E6E84C549D73F735141DCB74390924EF902F7E053BB7C65403B96B8AAA827
-EA8FFF133A6310BEF8EB5EC3F9FF7881EE687E31DCB5749B41933BBE086AADF0
-877FAA01AA390061EFD315FCC44BC099FB6EBAA35070B8A12BD44D474201D42F
-C0C0577AC0AE21FD682D9A50C71CBB8FD5DEFE37AA50B2D69EAB483FE64A7BE1
-920137441DB5EBCBE4D0A1CB7E06B31282DB73B910E33C628EC5267DCE7723FA
-456259380153BA68A817869C62F315C4BC750E47060A0B467455E72C872003E0
-F6E0C3B4023424950373514C099D10AB46348B0CFA3488269451B10CD072DD61
-1FABCA5E1A488917BA120F9207EF7F3E07B473497A77A0043925E52BA328C105
-6D8B680EB5C7648602BE3CAD4C37CD9617C17EA141AAD191CA7FCD23A6C473DE
-9F4B38D38E0909B3C5969F6B592E35ECC11618FE0B8A7DBC2D8A5585DCF4FD20
-47D07DBF38A9439CBD3D17FDE6AACE7C5D2F9F2881D6E3E92A4B51A42E4415AF
-E3784D7921DEEAF969C8BBDD1EB0499A88CEC7C4B098C32FB32C8B95E9C3FF6D
-97269D5D5A1098AC4AB4EAB8839C3AB34521A16203C42550373AEC6A18AFA4F7
-E15946EFB23467C26C09ECFC832B1084414F20D39123FA77522CCEAA63F11857
-D69CEEB988FE3B57C2A5781FC235F72248C628631D9C9BE8AE25E34FE8E3629D
-82EFEAF0BEAF6F237052E4B398AD1AA82CA20EBDC707C3DCBA9450AD2D8BF9BA
-220B4EC5CCA2E03F82555CA52232656942752E80C50A2A339AEAE834010819AD
-E40B332499E2E32DB9EDB7C65964CB10532FCFC0BDF028B0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /emdash put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-31BADF9D4A8B8AB7F9551D56B767E0CB134C7A7C3AF4EFAE9BA8007917CA79E0
-8E7B8E95E6955777B6A216B9315B38CEC1C94E82D973C2C03C5E08BF0C4E7EA7
-F04072D0AC8A5CD7046C378382B2A09ADF5573A15AED11C1329E4D332C89025A
-23470B8FEC12FAD9E3D99DEBBC9BC9C20D63A8DEA6D6DF84E4E248C86801F209
-8738DAC9E96292B57F5B55C69231BA247C8BF5C6328935743FBC401C3616C58B
-2B8FB16101F7A710AD5AB745F4F5B77A20EE32D435BCC888FCE3CD9E648D10B9
-8CB5F28384EE11A3CF8DFEAE4D09327B09B26C49F5563CB82A48729EA20AE878
-AB0BA32FA28829138EE25BEEC9C1F5074B29A79CE7CB6F64367CD8A5A931511C
-0179B300ACFB5521324E57A14B97B31F6D1E1FEEAE39CC1345CFC12890C51ADB
-EE1427F2B3BBD0E8937215F1F066998ED86ABDFCF3E614E3354A1A0C54EEC159
-58F976928CEE343C8E91975A59F149E11D53E74B3E38BE9BF42B2A2BEDA73113
-416CA306CA631BE9A259F150ADD9A8EEA7640A9EAA0780F9F1175A80FD531E4C
-EC8A3849C674FFE4380C30E69095E841824E787B740C42E415762BC05150143C
-A11F8270C4875DB0530189CE6E04010FEECFF00D18F008112E0565F19F592378
-ECE719D216001ACCC47FEC09123F566E9F58D7275BCCC05ED6E19707A59A841D
-7C1E6C17603F069B5432D80ACB5FBB9EB8B210E1E58A4CCD7AC302271C3C3C58
-E64C0CBB2E96AC52ADF7C55EFA5492DEDDC73140781C09E8B7B2746B3F178A41
-94B1765A66441406D1F8839423AD7154F853F8F918258D5B9649DE7FB974E2B9
-7831752E86FA4D9B64A7262A4EC9C78FE4C9E14E39EFD4AE26383F6501B2373C
-6368A1F9A2278192F6FC9DE11DB537A94F45DD4C21C7905AC5A3B303B733C091
-28D3576F4EFC863A1E91F6AF21AF44C84B31CFF7A5BB63FF594222D6546CC0D7
-9DFEEAE8B7ECE67C0540278463D488CA27D7EC1BF8908D18D82358B4AF11C60A
-734E394AAA20FCF94AF2B881F805D8BCCA3FBD0749EF20A2C86CB8536A076972
-9CB1C2889E182297B45904FDB6BDCF07C112A827401BE9FE57E49F2C6E647DFA
-7787FD65AEE4903E99DE269E88A998874835D0ADF014612088FE2E5ECE53EA3D
-331F119199C612FF3F72EDC9F09538F4883E52E3DCA31F70E502F7275D3B1ADC
-FE3DA2D65153C4D3305E465C32A651D550B612D3126821FB211285EE2A0B97AD
-11D0F21B20EBCBBD81DE360B8061BF2FC5B2D321C270DB853FDF60F166F794F4
-FB9321D9BB4C392BDB46A037466FD0C461DFDE7D2AA8CCF75E9A79FD19ED8A08
-1B1FFE071F218323135310C62D29299DBDEF5F5C554BBA73D9381A5E3D7DEE6C
-D25AC81527B935FBBC1B04B21A5ED4FC59DE8B6C10FAB4D39D86D33348052CDA
-25E114345A8A05413D39531484087CBF92934AA3AC20A5A19B933463D077AB8C
-85892D23D1BA6B05AB4F4FDD4B61CAED6822A4BE00E79DE49ABA6A22F43CF7E4
-E7E81CDEAE3CFC1F6B197E2777573AD8BA0F8D6F1E31C4478AA60A5FFEFE2FB0
-C27A92049140B1E592FF36244F9CFFBB56D89B4523D024C4CE3EE14A78FDB029
-73246C71C68F1B063619ACA51CB3771E7385E272B4D85A447D07F1294B392768
-CDC97F2E94C67B701E459B0A3F1B0E8131F1207D9FCD34DA7753DBD7CA765231
-DFFB32CA1967A3BCBBC0BB8CA9C7A2BC450955CB208F76857680B4B0F25F0937
-1F5C27902673B5CC9212DA464C2E97C939A30B46FDE0D2AF64AA54B9159C6055
-ADECA637EB7CBB4990F8699D49671EB6715D45B61A87E7B36B6707F71D227CF9
-41C44FE089227A340403071F8AA30E5A1FC2D009C82BEB84E08A8874BDE42B15
-7C11D5585F4AC1C44EDBE20D421982E64E945117CB82FBBA913FBCA3E31D87C3
-6A1C4757572B57CDC478C6C87122E9F6C90FDB5F5F5D802F246C6C6E0B4162F1
-AE0ABB7CB31003CFCC7BCC27065F8BD6BD3E86C2E59B68597186B65A45A8CB5D
-4AADFABDDE456D8F7B6CD064233BCCD2D74D150FD322E788AEC94998080FCAFE
-17FA2532B24F21F58220F860BE6203C7D2DF1961E4747BC669D7E1F7CB7D0714
-56EB2A50B61FA8448514697FA3CD47A6D1979B71C9FF6AA2BA1DF92D286CB4EB
-1E87CD3FCC8C5BEA5D32864CB3116D567146408541DB66D4C9EB53E7126E9C28
-812DEF847D1B0038F97B6FE6D90482FE16CAB59BD919A6437D55CC2790CB0176
-548849B93785C3DF03A79AD2DE11449AECD437EDF63B9C1B4D5900DD81206712
-69AA9B81B7E80A3AEB8449D997E24E95B50ED4D024F803C1C9FE74F32D9B21CF
-C7F0A4902DCCC4809DB0EFEBFFC7E8765611EFA919E88AF7C9EF9D4CBEE4D67C
-35A1FC24A4C07FDF97DCC4F4289F3FC20816713AC68F64B556478DC61E9716A6
-AFAC0BEE693FD4B9CBF6A249EC4B158B7D976030A3E298377981C8362258B373
-309BBC7A29B18BE67E3BCD2CDD0F8DF937DAEAA3B84DD79F902D1A19BB74F8FD
-74B1F7C923F3BC4F5DE58FA8A81C0F7B4AC12AF2E340DC1E032A034A6CDB1E14
-7F476C09F68BEBFB34303AFBCA5DDE73FBBF612ED04870F4E25AF3AC09D4B009
-BC00CFC6B5F3A2743A46BBC511A4112BD332154FAF563EB6F2FDA470554B16A4
-4A30E15E39A579D3026A6E26615B858B6B925FF867553C9EDA802FC11826AFEE
-3315ABBE67B35DA3DC7E1B10252D693D79F9F11E42DD7A6B07E1C5CEE13DA56A
-F37234D87D877C7C59E9E9E3881AD9B43479CC6C3C1BD8387F0FE80A84EB429C
-84463767A8E88D8DB3818C27E940A5E6E99626AE04A11AC018C044736EF99D1E
-478FE9022F9B4C3EC7C23CA196F2E007DE9FB5EBCA32E917C6B6C025FF0B2D87
-440A3E5E5DCC03E9367C2EACE3D8BC58235DCBD67F3C1F09ACCEBC437864B009
-BB7B7A97B0FF1ACF52DD7DF665CE08C615C27FA89FE02CFA057A4D37DCEA4A90
-9F899B7D50DEF62DF60287F5D4E9AD34D38F766A32D8AE413A5EC79A7A1E06E0
-A3DFBF6EE3B89CF49E2608D21D5A9B4AEA6DCBD54B8BE7B7D3677D434F75AD32
-9D9519E3A1868CE2DBECAFEFD435ADBC249CDFCFCF0022D8B9BDD683A26BBD7B
-CCE0C46CB371ED46C072840D9DC759A2E3E5256E2FE0C02E9935C1F0AEECDA8E
-09270BFBCB58AEE312B48545D693A8D67FED462FB1884A9B8A359227F6B98B83
-EEE7638C4C4C49E6B2FD4A345B68BCEAD175FB38C840F24C040DDD23B7CB6C4A
-FE7F1CE9078424610B72BEBF01AC38C59C5B96994299BCBE87CB8EBD252858A1
-A97253A4215E4F2393E05742984773DE6FB721AAFC61416E3488C44302C3CE7A
-5D716482D69DFB85EF789C69CD59EB061A0C82B1E7DC26FF4C9E40CC829329D6
-77125D2D505FC762C4C2BA41D13CB6D4F24CF77FCB6EBA610F2206749F59D00F
-4BC072A8A2256FD9B622E29029A142E4B3A8E73E2A7ADF2892B22E8479F0786C
-63557B164B99F4C86B3855C7A705170DC455486E5E12327605EDC60ADD5577E1
-B6CC53EA84161587753DA9663809F4FD12A5746FF9FE8EF5C7F09D0B4055779B
-6965F1194CF69F654A842808CB9AFAB1690CF47137119F0497AED5F4DB2CB02A
-B76B1AACF790F8847763C93058D476D65D84E52B0D95004009347DC2EFE550D5
-7D0DE92F27958F573B1DFA14412F6FBE4FACAD0560C7084770525F9F3F9D8EA6
-51806A0E49E1E19BC368F9031E41035DFAAC8484F3051AA031FFBB746FFE9681
-44E75F9F41990ABF86AE793BAE3B12E37896613EC8EF0335042F71A2D548805C
-49AA2CC0769B5D6634EE35F06AEE51988D0262EEB97C956A4F0FBAA1C157A2FF
-CD6A7D43107C125DBA1E68B86E391B70945C5F07737D9EA027824EFA2A963D2A
-FA1F641E45411E17D1602D73B5997776EE540BC02237A3BCAB3CAC4B63EB8045
-61BA2F07B3EED152C747E1F90E26F2663DB63A7B0C534F1D96D08237C3A983ED
-14B9C0907ED5D79E675B924E095D59F177D4493FFC3141CD1EBB592118769AD6
-4BB6AA687F275E452C435772286982C8A0EFDADAA79367087E94A86566D1D646
-040EFBCA57B792FB4C709E6679F1550674AF3577902A402D2236BDF1A124862D
-0E6DEA0459AD2A12FA66115C89A530F4495321DBBFA5D500CC75BDF82695ECF8
-75072C11CE4F31D74E042F601CA1CD2916FAF3510121FF590E3EC5300CF36879
-590F6F7C1B3552B1700FBAEE412A7CE39E42730C51168F6E4F6CA1D60446F3E9
-353507DEA03DF4CAD9C4F674AD2EC37BF7F077E7BC2D87DA434FAA25D0E5986C
-0F1FAA70DD0DF742A1A386757CA112509986EAAE5839F95369B1EA8D629E2363
-A584EA90182886644878CEC168634A47DE9C41D1CED9D3D0B2E34CC9615F6CD9
-E201B929BBBE9FEDFD8380B42D7315690D69D0A7D0724A8F4C680B0539A51E22
-3FB87D014F3AD8A1595E8F7287157E94996254ED88618999A9B795AD9731968A
-214919A9DBC5B1CF965903CF2A8DFB9D4CC00F2C0AC0F0E59320ECC1734726BA
-1A4950FFFE0EAD01F5066371FC815A2743822002AB3A625872F5E0FD0BA6007E
-42967C96D8C33F40243C7831309B1D73FCB29E26C11BFFC8AF961C3092D344D4
-36FAC6A5B9D7AD8231A6F0C22A01A715942F8BCB92D0F3FE746EECF376775643
-C23260B5F405C944E7B96331B416877B045BF1B2CC6EF7466BC0120BE79AD225
-333064E57FABBC2A96B4CB91364D8BB70E26D7B20BBE883C8633EB86B25B0342
-095465D254CC33E4D16F438DEC851469D826F3B60B603B1C1EF8925EB54D8F52
-25B709CFC5D0AD62397043C35532740789914EE690D548B16ACD312A240F52CF
-520ECE0F4E4F2A88B93EDAA0DDFAC140BD4B8D28AC4E3968668B922F9E1382C1
-13C8BF2E83DCF712B7AF8F96CAF36F0EDCA6FBF2C53E556852D03C9FCB655A85
-A4BEF3F02045E80AA5CDC5DCD88D191816416640742A0A69B3530A1753384C7A
-5E0BE7DBA7337C3EAF3045362AE7EDD06A4BA28BD4D0ABFE1DD8A96B41206F50
-C3657DC73AFBD7CEF7C280A0E84704EE66AED813136A1B2135A2BACE670DEB2F
-00B89E8362E51939D6FE6E1994736FFE3701A3EEC6DE22D83A54E47AFD8D4BE6
-50731CACDBEAD7B353C7C70A457EB11BD829C318652AAA6E78B448A176684242
-E99CDDEA87CFB7FDE7596F727DF20AD60FA7DA1FAD59D07376BB905506144ECB
-AAABA35B6CA476A4E84717589CE538A34A9CE12A1023B06607461422EBD29198
-D66C3550BABC5CDA548D1D17053ABB1CDE8BAD0E79A5E5446526EB48F943EEBA
-B4CABBB898451495828869636E507D1ED10BF8A078AA1ED0C6F9982F2A12A42E
-940F6F934F5370109DBBEB6DA2221D1CA22322079A0B4CF3D3025B8BCEFE9079
-9B239382EBDB60B029496BC2061CD37DFDE0D7A7C17EAFBB7B5F2C0CCC905003
-8AF3BBF861E2D206272C3BF1D67F81CD2F7766521FCE432498950F9420BCEE04
-944C1DC45679D11D3F54C90B41F2598074343CC0B689D6A257E514944B533532
-83C3AD092BB709993B1912FFF47D416C842E08E9A090469A1104CC802F8740C4
-EDED557C1C140A2929BD11257A385E38FB5D8A5ABB10F452352E64B06299E919
-A0333C30478E204BEE26959C5E72C39FBFF797A570F2A3A6791CC6909EDFAFC5
-CC5AB8F2CCE1BF24F46919B5E84FA1DF9D5EBC0FCE8C23D4FAD6A1549EEAB1F7
-C27E348B8055B997D6E807219E117950A223F7C94B21EBDB8A151192C5E75814
-D9B6A0EEECE02989613C94DF7ACC834F31B53B3BF83F62D15E314092AC96ED9F
-A4B4965FF754F9799FA955486089AEAAF6A65BE8B0A966C34AF7D3E2EA1FD2F8
-26FE9153D82FAC104C1CDBD8DB3DEBED96531426922885005B83D39D401480C2
-5A38158B992389ABFF9567DAC10D4ED00CADE3B8B69FAB0E8B873EF9F2D74FD9
-7D597E9E0FDDFAA60E39B29406D4084319CF68D6E886F781646B5AAA62A3B7AA
-3AB27D7CCC90DF224CD7A5E44740D166F355AAEEDF53B4CBA34E119C6098FCE2
-AF5BF9DA76D2B08F224E1A77007673C78E139304A8BCE38C21B4A9FBA7426833
-EBAAC46A7E3667A17A6684E9C362652B98A5EAF06D040AAEB41D9032E65F1BCC
-108668B04A31E217DFF00BC97E48433D5B3D56415C8DE148ABBCBB6093626DA9
-BE2ED34B7121977FF1191F31A079CC3FD58DD86C9E707AFC21111C6FB65273A4
-109634BC4886C25D71C317634A495FF1743557145F737362B8FEEFED4C4F231E
-BED255AA4022CB77358B1D88E89A9431DC3D28D09DDC916481C16AF44AEB94D3
-A41098A4E76852B63D975A2EF73D38D3714B924BE7BF104AFC213540FD8F0C8A
-CA0E475EA259D0A9B8CAFA377E15547A22626C4AC321BEA264DBC2B90B1F1C9B
-2ECCF142072DE53D41DDDF33B034BBE0EAE3674691E3DD2B1C47E5AA4C14E45C
-EB17EDBBD4573242EE8EE20E0901719F45074BF0FB5BD802FCFB890053D04AFC
-6BC1F29F45364240967EC7C0282200F467248C24E0E84C98FE8A48E3FD5EEDBD
-AFDB87366166CB35EBA1B3B40237EBEB30D3763A8222F5CDAE38303961EBB670
-013034ED410DFAC76D35710542EB127425B72C6AF57124FE44B7403B1B6D0084
-581F93DBEBE7D745E249DDBBD9C66EFA92405B0D6F6C3C4426B608A74D5FD824
-5E2191B88559FF3516ED861C937979916A10E31ACA28BDB1DBC9723086080FA3
-9F51EAC77A2FFCB1B1DDFBE7A9F60D476981EF91C6BE3B44EBC73B10D956E489
-08E3D33B212F5DDF704C663256DE33CDE9F5B496AB777CCFAEAE98618A7549BF
-B99A2008A4307C56CA7EDE662EF177D6134AA3510BC65D07ABBB84E183379A92
-001F96403C36C1BBF8E29DC6D3D0A3D5FB2323FFDB226CDBF6611B5A47E19D42
-757D9A913CCD4F4789E4628942E658D56AC59219152109238C2D5BA83DCF1383
-7C246912923A1B2BE94C59FF0F90C9861F8B76240BDD9DB9690C7178419C82D4
-57927A378385B91F053F3AC241C76BF9A8B82D2AB54D9DCA2335632AACB70BE5
-42C95F45C9608229028D1B30EC9E33AA3A0032B4E27DE9F6805D57F72166BB90
-199FF1935E705DAFED58E479414809E027C175AA68594BBB995E3D4DE2F0E5CB
-DA0DCF4E5DD734FB68CD75DDCF76886CAA5F0159BCD80D026327D973716C1B0E
-ADD57B4DE3DE89E9E5BAECBC73B994C4115DBD51BDD69CC96C26589B56325811
-F2C90FF7F4101FC6AFB7D2D057D6D304A264C1705259BFE151F7CC218D152902
-B9882ABB86FE476460455F2BC4BA77DDAFE36A6E206C4EA4409F29AD197DE5F9
-ABE0F02C8673DF769F386CA30886C6746921F60F98645E317AB07589504BC94A
-1E294F5CBC6D79FEE377DDE16FE24783E7CAF22240508BC19D1B3CFE0396C1D4
-AE60A20FBDA130F26E97FF2D12766950273FE1E0F62D80303C483A3DA022DD75
-DF8B8F035CE89D82A17C063481C0D2AC84FC1F85B48DFC2EEFCED63E0AE6EEEC
-99733208427D4C8FB4BBFD9C16E189F989B0B05A1963179035D0AD785AFF8D6E
-01EB8B95A399DF925CABE4B7C6F8C3B731A8C22D6173D9AA89A86E6989548936
-86D3C16DBFB5A4F91606A7FCB87416D0E739FEC697A2A953DDAFEE08462ABF79
-830613ED1055D4ED0266F1A5CC4242D65A53A5FBDEA2190CBE622C1E206B131B
-DB052E9F330DF6496A6DB5F51C0A98FDBE422743D2E2F4556752040F34ECB36E
-25F94AFBEF1DBDC4E1C29CDC8795203ACFCA8D9E68FE7E2D717CD0F496112C53
-80F07B027A3F4B5953DD2FEE63FCE79D42E5975AC8D22514FF21F53C22F103DC
-9D8C89965A563F10B2DB53EAC3E39C7020C5F72F1A8C507CD08F6E25BA0925E1
-B4412FE92E479BED95C4238CFB5853FD8F9BF2F2EB852E8643AEA49E43D3D2EA
-4AC882D27F0813C946CD47E53904B6788F2398E6C90FB4C4E501F640E7D145F2
-D0F3AB87E46EBFDC939B36ED55F2E83545022AFEEEF8B779C48CB583BBBC7C7E
-A5979EB281FA976D3CE56634EFC2D97FDB2C0A8BF2205C3DFA151392E66AC6F0
-13A47B884B492DBC48EFA6AFDAF32C4C2005763D407105B55DF6CF42A0D3E5C6
-71F0C0A530D50D5199D6F63760DB8366D58DBA5BB566C057C36847F7939ACDF8
-6098ED2A20937FCE73B4B788F12CAC91B55E842929D1F460D38AED1A9EBEE9BC
-EFAE47FBC4CA390BA9BD9CBC6F2BE03A10EA823D8FB337024CDA44621C295569
-449D208C13028AD40AA3E03B100EB8A59F2475B64415782FCA8250B588CE96A2
-0FD879ECF199344EF77C01A22776FC5C2C7AFE5F3E6AC2C3B5AF10912463F866
-0DF436A0F34ADA506692932581008F562424907146EAE3A8CF5106DA0CB29FE6
-34FCB7337741A22D954B7D10DA847C5D21E0310AB853E8F10DFA0164B547A1F8
-021B19A1F68634884B5810E0EB61144A45D1ACE4A7C4F9A9169A672A0F90D489
-19D02C00A5F6D2DE248C814C76F3C77F731D9F5D6C609E1FF64B81675D1D5214
-A7ACAF5803777F32386DDE1662DABAD9283869E9319B3CDACCE58C8E9D9B5B65
-194D92B0DD888AEC7082E23E844D7640A8AF08C6B3E795E2FEEA7136FD137E56
-ACF3A63A3F035C93BDE3FD1F53514BCAE12217117B046FCAB732DD5B71808003
-9519FCA7B9AD901BA54A41BA0295F82DD8E72753C57D4DBB5DDD7BDDF8868288
-70CA2E1E6E760E09DBD6DFF409CE9F87F61C6D234412A50EFDA6B98D92546309
-517F52A1C9C1E398A3DB99B12B5F590A218A76540E2F36CCE555E12B18CBA2A9
-34323F8BC7A1DBFC9DDE24CC31CBE97E7839B47C61459619B00A36BCA49A649A
-1E2EBE5BF6BBA4DD5DBD847278FCFA3B4F22D9E64B361DF3AFD99164FAAA74DD
-C424107F05F524C338056F180D36D410F10B8CDA4DBB37AB79B049A2478C9DB0
-CD0E8C22C02B8CECA74751F2CB725DC729F9171A371503C47DD13464DB19EF0F
-858D75A0904CD81389E43F334C3AC8703BC2889846A1EBBE44604220E9175A68
-0FD28E44AEF1B85C0D48C1921F9F6D4AB8CE9F8AA8958D5FBCEC3389835B0264
-07ACA8D8CEDDC054CB4BEFC1446A6191C6C2DC7DA04975B4DC7AF4BE4FDB8C3D
-7DA8FEC73C63C65397A62C84488745DC5A1C38EAA9AB7216021A279B0D9F5D92
-6B2EBAE5F6C0F63EED02774276B007644D52A1D0B302376A2417F233A400D4D8
-68EE54370C4803FB5341BF408ADD4D8E1932E49087883F5D4E9D009D9B13D4E9
-6C050A465C6E789870455D1FA50D35315CFEFBF31EC8128B3A2614B440EA2165
-7368D99EE33CC2BD4372AEA8109DE68187B6DA97EC0BD3F1E3FB031634CE0D35
-7C9A050954392A93D64927606C832F846DD9420D0D30942AA563FD17AEB9C6A8
-DC903BB60D7D2F0256B6E5C94EA62619E4BCC4E8673F0F14BF127407EFC309A5
-394DED4EF75CEBF13946DA9521E5102418E43C1E8EDE80F1A7B95139F1E81397
-3780A64A77CFFEBEB21A80B6522B4920C65F484119F44934A5121CED9AF3BE8B
-8F6BFFF1180A5B9E49A74412D1B52D8D6D4E5078228DEAA5115A2D9A1F942728
-736CC424EC12DADEF264913EEEE06A7006D23CB4838B0A66858EF0973320BCAF
-627B49CE02556343ACC375E6FE55722B12C8992C290B422409BCB56EB4B7921C
-848A66F9E4D99074E531081DDB99FA83F7FF91EEED3074713E2DE2020550007B
-B63D13C431DCC1796E6C7CB2B7D550B180DE9CF10683842094C99EB0C4987AD3
-38F4DD665D41A5AD9FA72DE8108B2B99065D3C3AFDCF866DE4B5D37564B9407C
-142009B5E495AF0E0FE17FE8EB7F2F67D519528A243ED76D9CB40CC9E69F18D4
-FAA2FB53F1279F48EF60357CA3CB7BEB91F93B06DFCF7C9C121A92C9332B80E0
-6003D277A20E1091C83C4553B8A21245A1D4CFDF653F12B95F8D3E71B1FF9457
-12893834FF808EC2F0ECD53A90C3BC6F7C6C6E5D790AC5B44E64D4C50CAEE526
-83DB5FDD8DC8FD3272DE8098A7BBDD2564B002198E92CDFEF2D0B2F46B44B29C
-BE936CD65E95601067C630921E2274422A7E99A4D12AD1BFF3F28FE2B448FFBF
-FF569FD4D1A5EF0A248EF49AF37FC6DD16A7117C3B3FFE653272BCE3641514EC
-77FA28A9A2FCB9E1D030BB214D97DE21077C9169E28952A9393DC5786AE63281
-AA1C312F9CAED174D8A6232ACE2C22B84F06EC3E5AE4153DBDF43F30488B71A4
-65A783E993B0A449030EAEB1E4088109BE42B57D26B03CB45FF1F11AB70AD1B4
-FCE6F6BE803C9C67369B675BE1198D8500FD66B3CBFB22F7E389E09F53F1F06A
-CFCBE93EC97643C2D39D44D9D115B64A87F2C44657D3A5468F2FB0C622368C27
-3605D02B67C3980904A09FBD3EBD381F21D01AF28AE2F02E5E912CF53C9CCEFC
-7DFB478B06671508EC99F2B3821E04C38AF905B433940C483BC3CCC20A571FB4
-EA0EB10FFD32FE4C5BDB144A9809C6D6E978EBCBD5C1689CD63AAD418FF2EB00
-C07026C402691479BFCEC1C3C9D0EFA023544707BBF0C4F2581EC349C329C8F2
-EC1C185775803127892305355EADC87555C3A5C7C39B88E8D634F6678E66AB4F
-7D6868B5CCAC69AB2F780691329EB50A3A5D0D2D84D2D4340F52CCA827A459A9
-9E52E27FC011C98F02CC13CF1B034603530DA1C61BE456828FDE8F6BD179E3DF
-31D20CF6C2E5C43243E89572B1A13A688984B159B85BABCAA891AFD141E2B4C6
-8A4AB955D06C519844A2AA16F60116668AFABCCEB8026ECA6C5B8401EFE42C28
-26FF175448155F403E56406888563C4CAA16E6BEC75BCC5B1EE5A4F5228A5191
-7A4C66DC74ABC6B947907D770B3302F587295E48916E048A233951FFFAEB38C4
-51D2751FE8D76F8F151E85CBD1411EF20719AD02ABB67763FA408B50A5F161E6
-6FF6E0C7D66D02C7D69B58450C9AD117667A64756125CFDCF8C5E87ACF1BCA88
-F285F1110AED5C105EB4692269716750E611D22CC87659150BDBD816C7945C86
-4CF176404B422F4A332D996C525C81BA60695D7683268516CA298247CDFB8443
-5F59A4742C9947CC3E86452EDA5454650FDE9BD847FF514FC6866D701F504F88
-1EAFAD9864B88B4A94185C738B8CCC7DADFF2DCA7B37E797C632A6E36687410C
-9454EB6AFC522016430BCC3D8109D379B70DDCF9DF5308B6EBFDA5E0FE2DBC0E
-6155E392CA5B7F1DF8B212800AB68A34AF59A84780FB4DA396D1B81AA4D7D1E6
-2A985DAE36862E0F46F7ECCF55D5B5FDF849A3445FB41D260A6C36897ABEDC6F
-81DFE56F96DFF7227EFF86462CDDA3E49A191D07BB154D552341EC1126402062
-0DB07461B3B2021911B417FC2A89EDEE5D3993269DAC7A6DBCEB51468706B12E
-A450153DCAFEC64B75A4ABC010A8109D5A8B6B2126042B908588665A3E08735C
-08D18A82AF444557C62F0CC17161507A46A0C18394F475EEB1CC97477D784546
-1E89D671A4E2457A39F8BECA13B1C3C40C7CC063E38A31A1349C92A7DBC8CD39
-6222232C5CAAE2EEC4818676F8747BA35CCEB287909BFF3468636265206D43C6
-FE79F77DE145BEB6EA506645716B1B2C0EB9989707A04AB4E2A9343D0CC9D3A5
-A295E5337B61E9B20861FD534865E2C21EBE959F323659088E0B969DEAB332AA
-5DE5A8752C9B94B388893F2B4E31DF3092F28E4DC3B8BF395B9683A5200E9F5E
-71C3076DDF1BFB6E43B5F6CB723BF555667DEA7B9A721DD41CF7B4AB95FC6476
-C8F8C3E295227651F7114B9582D10D886F83CC18102FA95137673F99E2E57D78
-9FE74CE4D3195E251E6347066FDE3CFEBC2D853997E467739E2B012DD1F8EFCF
-81F5567AAF667748448E815A08A3ABCE31322D1E87AB3F81C3B7BE8A5C4FE989
-1FB99A0E8DF0D3623F0AC0CC6FEEAB56021F4178849451EBD965EACCF1BFFA89
-B8AB1D92AC2ED3C8780D99A204CAEFBC4B730A9F510299E78790886DC7773E88
-9E7D8B1CEF34CE0A77AED44AAA3E3047064AAFC787041B45AD23554A9C300C46
-7177FC5976757D567D43337D9218AFA47FA00856CD05A14940A3C8B8178C2D06
-ACCC1995E035B98100C89B97220490DF8DABDB77591D5ABD2AF5D10D7474391B
-4B9CC1FFC1B4D9D5C2CF01842D734A727AB551CC08D5C7C90BC2BD8E9A38DCF8
-7495E860AB1F8F81B66C38891CD29C05848A220BA1E0595EC503AF941D1FF94C
-7FA2A0F1FAFBA1A4ADC36A2B3F145C1328A9D0772824357EA2BC8433E42EFFB6
-3990C948397C3D68A11390DA02E774BCFE140E1030C659141C8BB01399F2BD00
-1B96A1CC69F77DF652F68260CEC5B7452C6ED6CCEAF4B120C345650AEFE91700
-C5459550F514380FAD5F0BBA2508C5EB5496363271FE69D649D89A37E9BD04B1
-01432B15DA2AB82CD45D1F086A598E51823E227A745E701C10D7536FD61523E9
-BDED60BBA0EB265F94EB050C045BDD437548EC12B2F46CCC6F543F224644521B
-C7860AF607CF90C134233DF6AA783280B26E5D3BFEB682D3FEEBA0D2665A8337
-475E92C4D98A3B1A3B02F02B17F5DCB550C23947DA98661DBE02A44D03568C9C
-D6B7B96C8BE08FF89DD682B519534D177597CE791172EABC384292E5A1A55078
-DEEA6F352521DE269B40E67D127190B03A1825A882ECC28EBCDF85C78EE0ECCB
-5B9E63DA9FE68A90FF751677EFEC3821BF5184633AFF49178845495A91EB364E
-B1BC1BF93B7A062F018D76D276D4DA317FAA08D4B9A390C8ED7BFB34B2D515F0
-7416402669F4E7E6C4FC90DCB3D0F473648A9C8B172AE87B02C037AA31AE6152
-B73600B468D174CF249E407DB07D0D6220F6065B0CE421267FE06ED007A771C3
-0402B2F981FED37CD212FE893F689AB6373B7EED4DE64B2E867326AF8FBA8AE3
-692EFED1BF9DF46951D5F513F9942679CE7E9A17C620987B975ADE400C9808F4
-35726DE4FAAA1C676B0C83C52E7A027EF9AEC383BC1EDFE71F2D29FBC0B20EAE
-911B7E114124552A44EABCE4EB77A6FA41F1C2BCC8D8A39E5C337B6622A7B57B
-91596504B001F60804921E7C32D38D89124DB7109FC2C4FDC9A25D23ED6B3D78
-255C0E155CFABD8EAF060E8235DE285B9D6055E41C9AB269063B65B2445A6C8F
-73F992135378DFC36CD17589D1157AE2C76C6180FAFFDFEE25541B63F13F170E
-034902C00D6F155D77D7FA27E2C2BA9B579225D032B5BAD19242C976DD0DE208
-2E68FFDACE8DB27CC964A3280452E7EA9E2BCB592D6D2C8D3B3D79F1C8BC3978
-3715E110955004751B83E460D40E7729103AFFD778CABD829CC3048E25510A11
-2DB1879A99BCC146EADF5329079E8F13753CD057CFAE3376E35D5115B0F239DA
-3E024673C3240379D923AD6BB2219772E80CB027CE53C89373EF7ACFE38EF9DB
-61F8BB731AEA052D586DB8258DA7B9920FED3E4C834CD5EBA4261C4072A94184
-59246717250A9A74AAC7899122CB890A0F713B16E2D86BE0AFDD1D4DAEDEC5D2
-ADFB093E29E56DD2A80774BC0F3046E90751D4C59033E34A6E952F617BDAB8DA
-8DB611F32B0B15C9D7D407CAB63A14F04BFDB5EFB63EBAC3A8B69C4E22F7BC02
-9AA197F929A547C293F2ED65ED10B6270300FEDFB21000B1971B7CE06BEEFF27
-66BC049704FBB0254F2742D78EE8290E8A5DD5281EA1597C945D21A231DCCC7E
-4FD43005C57CD36AE310789AAE39BC3CC1A7AC9BC008C291911699DE6E1C2DA0
-B61EA2C6BCEC2F9B547C025837D6B2C90C22F2F992644F803C1DB5591DFE1C9F
-3E92EF348ACE485C11D9A9B082DA6CF912FB5AF73AEA2DAE1BAC6397F21F230C
-92A59DC9EFF4902804E6BE7FB18077227774EC29CDA427091617D12B718BCD64
-9FC339926A2D87C6FAA103CE20078883FC7FE0D3C8E5239DEA54A2D302D788D3
-7AF944D9B59B7BF52648A4C931DD9AA381406672B7DA8F7FAF429692FAD2CD95
-519CD8130239484D4EA1F011588A81946BD7CB413E9379E8657982C714C3F1C4
-E4702EF88446BA8ED439B45693A4DBA81E1D12F51275434C5BC8239D4ED8AB38
-9C1D7903EF56F62E101209C1146EA97F7A9BE7BA458F6E90EEF62B9EE7F4B50B
-742A8E80E29EE926188A8AC8CF1A9B0B1C4613A50F9E5AEEFB3ACE2E1DB154E3
-9412698E054AD73B611F110770DB58470ABD8C6A9E253820FE83098CBB2B9621
-CB6D9CC62F97013A68D7F7F51DAFAF6123580EE28939A913766661A31CC33D41
-D30695DBEC32BC0E9CF9C1CC5A61A6D91228BB1C344EE0945EFE6F1E28AF9D60
-3286FF60A724CD3F2F328594DF427BE835C33BE6A410DAB31A2BFDD3CA0737F3
-72B2022A449B28847F41985FB2CC3ED5DDB440927FB8E6C7B43A476429674279
-A044F4225D1388B2BDE8577546F059FA7F995F43956C072B022CBF9BF329C202
-1685F7C63A7E231CAAFB68981DDD796B0ADA0AA83A1F4984D2D1823141865D70
-0641CB24250EBF0B8E62D60409268DDAD6516C0A6B388C4D2E1167ECDE17482C
-19A8594829DDBA8226E1CC0183D82160CCCB52BC2224C1A6DDF4396A7BB3B3D3
-A68E50C5203151E90F853843CE73DF045A9ACA162F72988DBAFBCEE6E1B1B895
-8DE44B802A52EA92286C9C768EF7C6D8232E2868F996DD98CB2F3408015A5BB0
-8F3A22DDDF5D3485CF883DD0477E80191808E76CB4AAD9A4C3478913BF17C5CD
-34365B7E440A9A0BE07A6CE91A0040719CFAC12ACD31A0611CC567107F1DE5BC
-CFB02E943F6B972C57D6F9F7B306E6ACF0D59AEB788E3B57B1E705E49239EA23
-5A9F11AD1260B80284F988AB7AF8FB0A699F1381BEC667BA8E9EDDC807560FC2
-65E08501EC786C946D5B0D324532F7EA2FB33EC0BB2E2EF84020A6975564DA27
-B679B54219E224E9A65E09B5C289E58BF748FE1D32D4D751484C252CC6FDF193
-0CA498DE4A747EC17678E1D1D4DDB6DE365E712822BAB428FC4D5CB0DD34CD8C
-D9AD902B5858BC574B8774E278E0D45E205E6829E4738D8120C1ACB8383347B5
-7B55D27CF1F8872E06017A7E62C7EB2BD0643587AF29FC3324EEC192196CBF33
-6FE4DD8CD83240F94CC7AC45832BAC58462AA469D195D987D741105B5861AC3B
-EDE19D35680553A33A3944917DAE1A38011E5352E235551D227174C29C4487A0
-5F64DE647D3160ACF30A4D78660C2C00ECCDEDC2AF695C1C7D3FCAA68172481A
-CC6D8DAE26E5AAA3F2B52C04513C4FDA5BD658939E90795BADC3CE44CAAFBAB7
-972D9880BBD9B910F33EC4B8CB86A850635E972A9414E319BB9B327C86532275
-4F7717C999070ED9E6A24EFD2B6494CCCED711EE769C835FA077018C6CE83355
-D5628CB19CF27A09AB5DE60F4D099D1703981407B116C1A736588E71104A11D0
-9695548F1A157D0BB890080F76DD12BA4FB8B8B67383EC9A8764CBED60BBB333
-96276BA0555697223E80ED9F9688788F840900808680C1865FD281F3DCBAD383
-12E920AC49826DA6E0A733374EAD25767DC8A32423505E32B277C8B41CA6898B
-B350E225F43F842262851CCB0BA893BFD81FB440C1E67CF0AD751F1482DEEB74
-F5B4E24FC1E4E4B9C907067DCBF66D2608813092E155F1B9F469CF29013382DE
-BB61D28137A91937BDB6821068814B22473CFFB5F97123ADCD6F39545F59120A
-ED18FBC3222B8A6C4780DA0398AE308FE654FEC978B646912B35EDC8939B7DCD
-F7995199261746C1C4A5A1F4CD031F2C2F15F6887CC0914D185913E3021C995C
-CBB112F46C3E08CF328BB928BFA4543E8BCAF867036BE24B894433754CA06242
-5C52429B475EC45E8611CF03332ABA62DAE7D8EE31E8F9B0690C0E367BF7B013
-940B8AC8D40FCF6D2D2499464AB0D2C16BB6DC0F53C87C115E37178E46E7DB8D
-AE16C117AD668CB7A5F558BCD58628B56CACBF6598CA8B2B90950D8C4B3BF3ED
-4E9F003631BB68B0354C98BDE0811DE1718B0563F02A68C555BE4B3CE2E54BE4
-CA04D230E5F18A7E63EFA5B5D6B3FB1210B6BCD12E9BE069376BE5FED9E60684
-78B73FE4D212044ACE582FD96AB6F1D651815CDB1F6EB6194A82E8840EBF574D
-E7425C4638ED7A79D04F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 58 /colon put
-dup 67 /C put
-dup 70 /F put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
-21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
-06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
-55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
-B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
-0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
-1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
-7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
-7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
-356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
-19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
-C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
-244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
-AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
-5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
-D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
-993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
-2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
-E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
-309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
-F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7
-E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66
-AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9
-17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3
-05965AA02B8A67AEB04D915DADC1B84A531A1D672AAA06E9F720BA88419A3183
-63D1F9A3BEF8CB2E23CD1F9C003BD7849F093D3B4C83C153A5A790C1F9E37948
-5799C02F004C61A6FFDEAA1F9AE884DDD40DEB1539CFE3C3BE03C7C33CB54D56
-2C2A0F467049797B56D407AA43EE6B8C3F978A7D945A80BF711C12D6BFFA3DED
-35FA8B22E68BBE4FEC5EF5705D30044C578A6F8113AD90DF6EB8C75B8CC7F74F
-CA551C3D4943F2E82A9FEC069BF6CB92D44DA5D5715D4E11DF8F0F44C9504509
-2104847DECF36C46182AA495C81E880C4B3B31654105A8B1117596CCD7B57420
-43C7EC42014311F62536A94E3AC36FA69C5CD12B8D4D3C6BFBC90E67E3B7B7BF
-4A0F6FC16D71B953E6F212F884129C4403A390595DCB1720C2EDAE97DCE2E197
-4DB600960AA50ECB3155C663E1C0450B40754192A74994B5ECE9229C938FD355
-94055C25B53A286A29D908F8048C30EA913B4C833956917729B10CB170DD7DD4
-FB21B1BDE76493D268645A5B75AD0743662DC3DC91B78450836CA39B4DED7CA3
-04611039EE3AC83663E9D1982AA616AE30A1735E9330397539D586B771EA9C6F
-25B786ECA5D52EBAA1B10FF75C785074559225EC8C21365D23F5676689EA11D9
-69D83F6B565A25560412D699513FC9C4CF662366138FE20FB98EB39724C6EE39
-0F6282CACAA7A4B62691B57F199CEC25FB2B0057D6A975D759BA897D23308B86
-C9C38B8F290771DB2CCB3839CECA08618BBBCCB7E4337143CDF48E805A4BB92B
-E35A31DE1A46BA1A1EF934C4817B0C031048D81F84FA6AE74243AEB237B5254E
-D14BEBF55C098230A07AB074B9F12057F83C75729703A8F2285B87C81207805C
-7D22504E6213B0F96217A76B671CF6A6D9544CE16AEF671842A730671C47287E
-0C4A6417E38E14602519FE55365721403155FED97F800689583038D8217656AC
-C1D510FF421F14EEC6FFA5F3122D514579983D5ED82DE1713209D688B5485D68
-661D404BADFE9D1544F43F6E589B922153A46F8AC08F0BEA4006C30C0154D9BC
-B0335DD372A202D570AB13FB684D94C8223F3261C19856D5912C974B5347EF45
-2763EF9C28CDF85C251AC54A677F6761E56EFE8F73DB82E73E237DAAF2A42D91
-C793E3865348FB7EFCE077E222C67ECEE98E7E787A2F2FF9A8A051EDA27B237A
-E0F9CFB00B0D1F9D2B8838B6BADC474C3AB62988950C636ED7E97B322430524F
-96ED0A797D95B46D2E758C6EFC883B282941D8DDEDFE279A3AE60FB97EF810C7
-B46E6E2E3A54D6C20DACA354886C3F383D74F574FCF9B2C7B0FF6168E4DFD795
-5975B60618C30DC93F37D1E653F2C82445AEE2335446ADA0E7E44A42BFBF566E
-A2A2075D08279F8063F693C66B8774A0E5B4CE43DC3826C678B8E75F11214A73
-3FC08C1FF96E99618C61234396A7B4AAB6494D852367B9A7E4D42A339CD3B036
-F0F4DE3894B5911B09E33CDC1BE8FC40A948DBA04BF5C4F9B5329899F8A4F9AD
-9F81D734351E0371A50B3C44ED484402FE74B02B5FA0A2328E2DF74CED6EAC54
-1D23C79D0F4966868935017D843C0B56839D96731E9C7D9D48CD3943A4EF35FE
-4E0A72D046DF5278970339B14765D3586E21FDB9607E319DCC377F64CE8174D3
-262886432732BE2E484D1BA21C11CD3B3722F97341FD620415733EB48B528E2D
-E8D2104B20938F9AD9471139DC419D8512BDF735FE8B1181FEBF9C2427841224
-C95ACAC6F3C639E029F51AC088F08F30DCAE9F3B7AAEBEB02E317EAF43A9E6C3
-6BE19EA3A5FF2310AA615FBB331FFE5229E03BFB30FF8A8D3EC58697336FF8A3
-E8E87856CCD7315A2F6AD278971BE079293DF1ED84D640F36DF123E1637A913C
-D43E46FB70CE7814B968919D3B3AA330BA6B2EA7E0834AA177C241B823A50BEB
-CE28A78F40C12E54F33B907D98F2BBC75C8CA28345D53642DC018A0A879209ED
-94D425137E2C6D6C973240565419AF88B8FC6592FC0862F901A93F9E496D3E09
-E1079909AFDFDBA3ED95B97ECC6A927FC68CCBCA735C3A22C88E4CDE2A8DEAD5
-7098A5776D7B2A015C995BB749C3C9123BE116912ADAF326F7F6B224DD3D20D0
-36A8C76154A61A7E6FD5573E921D0599E80C673E76F46B119CCA9469F56DA90A
-F327C735A8EC5F1EC7E1345578DC7C3E937E9A25B171581B6CEBFB3224B2CE22
-4F6DB70F8B84282DE10AF9632E0C321B47BCFC52E18D4C22D439507C5A0934E5
-2332A12A45E0D522544C7AB646E3FF14619CC719FC55C115426818540DA4AF8F
-4E406E9D6F1EB870E3C63B81ED4E19B69DBAC73F5C8CA7CD4DBB0B59BCA006B8
-764E2D7CF42C150FB01F8ABF766E9F9F13C7270B77EF16009B28CD7D294AECED
-0985A7224B692D79EC89EA25ECDD7854C7D37EDE9B080B2B9019984ACD22B820
-B528DD3150DDE15D02B7AEAC12185B6B18870FC5D421DC4252DED8A81B2CBD51
-00E21F056EEF9D3BD5FAFA6CD9E0FBFB3611D95B4B1B5F9550394BC522931C83
-40CA6C5B2A65696986DE8AE84A7486CC294485F90A7EDAA1C81C0778A1E111D3
-F3178F78865097E9FDEADA149FA7ACF6108531D74367A9A5E250AD6D90C05B1E
-DF3E11CDE1D290CCFDBDD28E23223A97293B664ABAFB63E67EB200809A3075D4
-2C23D63D8C8BFFBC63677592D6B15C679895F855BDC6D503BFB8DF69C3880262
-E2CFA0FD0B461DC069499E6F41905C3CF34E7C0E68DB918658B626699AFB4A55
-EFEAEDF0B1A1C27147FE2CC5686F39923EEE894C1F7F989B3C83F50A61B544CA
-C323429FE5057DEEC6B86AEA47ED7E624E81E007440D94098B61954B827F3567
-60E946F3068812633176738D9CEFB335EAACCF8B5DC67AE9278C8893435C4EC1
-51C58C84AE1FE61317F03B303AB2657CA405AAD17BC67C065CCAFBA929A231E4
-9138B05FE8FD9B9C3A4BAEAA8F1AE9A0BD5298844E8BD3B5DF3362187CEB4D3D
-8330DFA4A4E7B78B6AD944B825872EA1512DA861E25EA39DFA15DCFDE9354BF0
-45A161EEDA2E43000003EF02DC1FD4CB8EADD2688A9267CE14A2758D05065AE2
-0C139EBB392A38B8CD245F6D54D5234489B7174A735596D482EC39E530694CED
-E0D06C6370BD9DADE7FBF8FF7F9C122894B845EFDC0731F6BDA9652B90C3DA7D
-56FC5B2E580DD8EE33A8F4F792BC5545E72589060AC930F228792B4387B2CFD4
-36839E4C936002D583DB5E49B7F7D5FE62945979D871446E3D66A7C749D47B49
-9ED54768330A47A4965497D5B7804AF6BF4C7D5151A4316B28FA680BAE785703
-C4928390F72AC49B3113F6A0C9A70DCE2605506C1322B243A975BD99B8F9121A
-A1691C2DBF4BB8F2FAC8C38E7F12C6EC97245CC529BD7D1E58798E41CF5B2957
-94C7905567DC37D6E9EECBB3053EE2E417861C68B6D569CB5C2B9682CE68D9FF
-17C2EE93E73A696BEAA3F31672C71F810D3E3BAA2BF622F0DFB2FC26A42A2CBB
-A77C9FB9A0A87E65ECC219C518B88B5744A503849E91B3E8F9DE0E19FAB22913
-A2DF65C53B221DC04BAC13EE2EE3DE3E1D2F7F03EFD2942EF772A3310C5052FD
-AC7B7715675F2FA7B66533F15BB4551DA3B747277AE890CC92D7B75F542A2ED5
-29E1A404C05DB8F84B62601A6618283743B62583C42F9E70FDBE26A03023A3B5
-221F5E718CEEF47545E1DA6DEB23E6D94545B7429473266CEB86262CEF02458E
-0FFBDEDDF3CF30D373AF1495978E529A92156932F0112315CF72991AD3DE9494
-A1B69206CCBBEFA3DE3FD6C83B3065597619A78D86D0843D2D8E5F41C3F1386E
-A106B31259D96D37A29333F6378CD08C62963817AD8DB4291357CE8B168F549A
-40819527B90836631679808DABD2184FB39F1BC0F795BD74F3198CD8DA048A76
-334EF308BC4436DB752A902248C0F667B99289C84082D866A28F5211FDD354FD
-F1420299C1015056337A0053F22541D7F8B7719A1FCAC909BF416FBC144B326C
-354AC6FA54B46F50ED1A017A4AD03CBAF4524B5D9FC2A93E68B24188CBBF5301
-DC3BA8BEAD9C5C8F0BAB7E44BE36CBAA9363F4D7AEE5587D065E992B65207DD3
-3A9565ED06965EB9FD804DA494103FBC53BBAFF7A5AC6BCA6E6854DFE3F0F3A4
-294B80F965545092FD28956EF0D74DB4F7C6E90D2041F2EF1813BBDF74140A79
-E772951711390A218675AF7500FD209A64B2D8A1773D29CE77293E9EAE4D2A95
-AE4AC8EDCAA78DC1AEA0A086AB320B01DE0AA76CD13183B71E8ADA5344DDC302
-860E47737DFB1C59396EFDC970A58E07A0ABA0221F46EC134A60858FE3EF0418
-CCD953D6FDD347B9BCE4500CC0B31B319CA6EE1116C26772059D2CF2F253F438
-F154D5D160779A1D01A2BFAAFB059CB9A8B5E9CBD6B74D7D129217EFDB84EB95
-2A16D582EEEE929E75A477E963E1C20C4E459DC03574859BA87D874C9BB6466F
-2C5947D90738FC45DEFA1DDCD43BF922025AA46B882F10674A7D6CA3F96C61B6
-63579A5CD8AC5EF5A28CB05D5F4C70E26EE7082A7C524E54422EDCA62F7D7CD1
-D0BAAC925A01443885DC8800187E38D5832E179790B7C57CD81DDB08F010478B
-5DAB0CEACC8ECF25F9DCF4BA7995C9D27BF91C0A6F44C7BEC22EA80F3468ABB1
-480C86E9BDED1355AB957DA76B8AAD114E2806EC599E0DEE68386EFA08E4E40E
-98EA4D38BC4DB8677783E12B37C67DD232087CA1C69293455382E04ECBCA25BA
-1763C2F0496BF765042CC437282EAF57C739B40F71BFF9C45A4F2B45B5B7F55B
-A4E9C93FEA3F381997313710D788ADCE4855292194F749EA3D7247C67338EEDB
-6056DC28AF2ED5FF35DB3CE777A7A3764D0ACD83AFB617196A679519C9D85236
-7F4F985BCEA64B76740372FB36246D8E53CEB7B7CC748F6580285BE0E0B85730
-EB275D2BDB65245D00879281170E3823240D86C70FE1C6BEB289D03FD6DBDD8C
-46C39D99163D4073AA38BDAFB2CB2862084C8629B7EA4027673282553CA25964
-A3135AE606E53CFE4833A40927BD824F48A61B285087312D7E2F888700AA54FB
-B5129A4B48814229AFE93EF21F015B4013BA53CA5D5AD1CD370EBF878C88F667
-68976E57795E8A04A3530555C3AF78DA4AD992DFAD788B97BD998836721D98AF
-DE896D80423C7320B10F181F202E484B6533B2C69788C9BC98F3E4F5E169F005
-0110D693E3A562834AD6931A520239B01503708422F7F5F99A42D1F12E8172C1
-3177EE3B1947DC6DEA876BF50A6E12306175890760D7403E206AB37AAA921872
-7EA906DD2B279F3D15D2D8CC042E76017B58E9D92BA1050B8CCB239908797140
-CFDF98EB87602BBCA74077E052A34A35E1789CC277D875B358A1A7DB03C5B555
-DA269D4FE7FF46852F67FA08F22614BA16E717729439B41348EBBE5618A390AF
-37C69B5A6854196B271DAB8279D8809BA723A38476D807C0544F8607779851CD
-733CA33D7DB1E925E7EEE0F9579285A25D49C02A5B2CFA46C6ECCA8848D931E0
-241E2577912B7D6BC97A5942460A154DB64E84A34EFE3182784D3F9520418E14
-1221AD8FC9676C9FA23E12E3EB2421229537B294C2DB7DB4F9F7F59528B633B3
-F205B8E44BCD65ABF8460751C008B15C1E29D92731C28C3BAD20A516EAFC8D14
-AC45F03474FFEB3AC30118B9BB65FC294E6B9EBD3639D1112118E21217B42C80
-341656CB34777D289B2535235300B7ADE22D58602F172393390F6D3E89E3582F
-49248453A556B53EA3DAF8D09E31C76D7AFBB424CEAEB4E48A154255FEB491B7
-B1B6C0F6EDE7D0B208BF560ACCF8A979FC8BBE4B9B733BAC4329A81DD7F1A424
-CE70DEA8FB57474B5CBEAA44C7750F423F7CFF87CB396E6BA4DC5A83EE90F4C2
-E6A92C2C688F6B512B0ACD38BD4E9BCCB2A5E44B7C3E5CE85F5228CDD70950C0
-7EB90E1544E28CEF8B6B0EA6D5F41AB63A67389BDAD2E4861116BE6573847059
-B298C4EFEDB1D54C79F497EA66E5A9FAD73BB7E8A9133C13696C88A06BF5D524
-7A004F7DC1A96C5915762D0A074AE8F4BC22CE1A28000744429C246529D2AF72
-07735361C8A0F93B3A9CEA09BFB08860A2830D0959FB29A763C7F4FA3B78332B
-2B54C6D80C49B39C6161EF8BB13C1CF3BA3AE125E7895673CA65A0DCB798E386
-731B0ADF123FD640888864E12CD249A07FF04AB3CB55F5E4872E4EEF6A476C6A
-622B25878A96E96C973CAC19DD8F8F4375C540FCDFC1DA04D68BD8E88A6E93BD
-E456ECF454F77F9872D1E543269827D2ED5BE8D4B6101B210889640337B467BD
-D891E89A0504DE2EC8C2F8A49F79C80CFD7726CB9CBD486D8A7A14D0DB19FBD9
-BE4670E41A51B658D11DCF6D5FEC46DC9881C1F20C093535A503750ABEBD9F40
-C384A08C8A1AC202FDAB1033A1940B3985CE12E12647E961B722AD69AF665B32
-5E8E475EF586D43779313E4BD39F27A3AFE157925B1E70F696091239529394C6
-8F750CA22DC40BEBD46E38525E5F4C29B9DBB2D1A9A6B2A4284FF5CF79E27A92
-8B8250A8C0D42D1E05447957573B427708689D1F4BCC1AF64D3AFD06A9FCA125
-60EA3CD490818D0D1CA41B05FC39E82EE0844FF56CC4D63311D16B9573ACE853
-FCC74A8D23EC47DE262E6AC887D39A47A475E420840B9F2E4A3FF9371733181A
-A334EE427DBD9DE17A2F8D5378D2AF7BC2FA929D0F26D50B80AA434F0E64FBF1
-FF717CAF4B7724B90C540C1A73AEADC3F7FDD93A70D721F30AD9D3A837CE90EF
-53840FB7E372BA60FC7B818203ACD0EF434A0E6BD547A2415D7C0DD3D25EFC62
-1947449D4B32337EC24E58C908BF964BE24473326756CBD5D7D18FB5182C618D
-CB049AFE9CAFFDB2EE905D800CDFCFD74AA00A4D8874949B4F6DCEE16E13858E
-DD85882C2F680CA9CA11F38F9DE96238DB2DD079A320336B7F5803834435D497
-BBC719D3FB98447805DB3F510F4DA24B1ED0F290C88CDB07D876501723734F48
-444FCA19BB8AE24BB9B87F33CAFC6F15937D90AA2E613020ACC4501CF6986B63
-6C16A1273B52E27E2078735E0FDD0F548072DC0564F7CEBB69949F4D05DAD1F4
-D7D2137248308CAFD413A1E6A00EF496B7AAB9C6594DB53ECA2FCF557594353E
-FD0701EA9E9B554810CDE9724166A37EFC9A1EC7C4F723C0DD7DA7DFA85443FB
-469B16EEF3E679889AFC21A16D80E8C6A9278D047853FF7F4121738038D65914
-B418EA2E2571FE7EC9CA59D70241DEF5E8B09915AFBBA748B9230C2D337D0BF6
-C41BAD94FA14E726981F3C7EE5BC19F655494900B71F6A4C1378462F4D074E79
-7BE6D7BDF4E9B081D7E78C4EFC7B1BC75DB6223F3C4108D2E77575B597E4B99B
-9AE6E6169EC1F914250B77EE211A2FCE44234A71C284D2F0F0152D783E8AFDF0
-D8B99EDE6B0B85A2DB35F497C757000D08693FB6850ACADB6E5E06A53588CB2D
-F2FF6F0602E31EDEE36DC55B99BC5C468A55E8E73F2C331654C26EF665A54DE5
-49C4BA3B414447416398C914EFBB78D0C116C2BF46D40685DD9D44B897FAB55C
-AD2482AC00FF814D455D24F9C04B0C74E382262A8B2216B9B2BBE32526D3B96F
-6A285CBDE4A4ED190ED793FF37A36C136C1113F0F7886098306552C925BEE936
-47D29E87D7C05115D50DCA457A3349F56BD6886B0F01C4B84CF262ACBD6897CF
-F8C47EDBC94C34AA4007065D036272A09E46DAA78ABE67A0902B822A643665CB
-60631C1DC479BB23757218C57222234A4C4139603A1B3B0A91153EA68C0E8169
-F05285973741F2CA77D65B89E4514ADB52AD1027A6ADE5A38F6609042D1F17CA
-ADF0E65B3882D79F55CA92BFF9F4CD07C8A520236FA3DE83519C3D73E7C45969
-5022B76A773217F092525042D0A58E1BCFC6A4276AB82746E4B4380235E84E4F
-32EABA1D2EF4839691D46EFEB83310EFE1F1F59F326BD21D18139F439AB7B064
-330ED2E3A87981F1FF97C300CF4991F382A43E483AE5D2BEAE4E934FAAD69A52
-08614B91E001A2CB2817497169F226FF3DF7E1B689C2FA2D88E4A627F5C8EC2C
-7F3F84C9A218D0155A2530298AD7D6785C6390223EC30E9B396EBB9A3BF36C4E
-FA9E2F00AFA13BC844BE7C916F6ED240E2A9991A9B8AF0C09226580AED0BEAF8
-77C6E00681030D1978A77430FAC3C1499741AAF17E95EF9C3381560003A743C4
-E533FB8BA7ADAE0059250337529278F1970E7618570AC01554B1A06FDBDDEB94
-60AC68A68AAACFA99982DC382C427616129B982A13E28C6F1D936EC99BFB973D
-EAA8F33A4759EBC22621D94CBDC81A55FDA622AB9F6C4EAE6B83248DA14F277F
-99F2B4949BCB7BC9B22EA39D273D3B53D8F1A4B67679F5C84758E01D837C9978
-EA108917BA41DDA9963119EEBFA0FEB191334A0491B8D742BFA25B77254AD6B5
-E97C1A6189D1F6A4DB27E47A6794E157AFDA6C6D275E159AA498FC690BAEA95F
-8666A912DCB5943A107DD8370415B50458A2B80013E7AF36BE71F76E4D40A5EE
-FEB8B3D82CF53831DC8DA4930C6BF0FB554905DCD7D68C572C640B99F6A020BA
-108E4B76B8EA6FF7515323DA82F83D97DBD5E4D79CC85425FB8BCAF65480CDF1
-B7195FE79E3290944F025C8D1BBA3568DF9A1C23F713C912B87CC4E82A4A9B85
-2BA58C55C14EB82FA8943E88081D7633E17560A7AF91501AC48E8B6537A6C192
-C9886E9D287121D28C1911735968D124D7CF314B98B0336477CBC2FE6E925DFF
-C1538DD1AA6CE9B8D55B6EADC9FD047CCD41CF56E17F6BBF6DEB2C11DBE5C6C5
-2227A154A9A1776B80F999EED0E5BD0DE46D1261FE47A2C95392830D0CCD2C1E
-3E1BD6C7813848A1C952272B75E6C75987B3FC5A9F908BD43406D93B269B767D
-91AD8D97736BE57234B3F228DD82C996979AD28C19774153D8BD7B3110E74789
-202EF3D4FE0F11057D63C1CC71CB8BE121E67684FAA0AB7E7C442C66DB9A7126
-3B7C1CFEF972CC0C8968C75748418CCF8DD51D92EDC4587FDF09D930483F2ECD
-F5A4ACD1204FEF6F833F344640C4C35771A875381F5D1BB152B4BD02C487D243
-7CACD9614FB18D9D8EA1A31EBD1BA368D6ECDBD8400303B543D12081D1E0EC0C
-B2258F3E608EC7440CB337BAF0ECA6F7018E9FD55CB9512CFA8703C9EE5ED7E1
-B1987182608110758C666DE3CCEA7212CA3E4FF4EC97A346B97F0E4E09E89E58
-17ABE269A8D3E88B05F02B12406EE9BB032BA01A666710E5A0C023BAB0C8779A
-4D75A5C9BF4093A97B663359F790C617006374D68CE6D9D21BE3C1219672EB72
-BB25A6EBBF61AFAA75C3DBE2915F9BEDEECFAF0A207B9A07EF84FC912E977EBA
-334362DA8C082D0083B0268BCF2B7C0B335A6F9F3D48BC5942BF0D6CBE130E14
-7DB1AE22179762267E7B5E2FFE0871C5D9FF74FCC8E05DBC704E1B68A41345B7
-7ADD7DB2CB47DDDAE7B0EC1630D9A2E2E5A56E6F0CEB38AF80260788370D00D0
-7295AEEE325E8D242679EF1937A7E2826312E25C8B276A16E680014B530AE5A9
-096059F4579BB4D1C4D6BA02BDC24BECB4710F616055E440ECB76C1FE3C4CCA9
-707720FA30D47654CB95A940408FC190FC55161E0B6BD39471FEF3060717F58E
-2AEA8DF7FC35C96253C88B52193CFCF2DCB29696585A3EEAED2BE160575B4042
-9845C48F9883305195271D52878E8F7DF2569FFAC7FB415B281DBA57931A1789
-95F324EAD43962F0F952AE70162733AF7D3E5E25F06C3F62D725143E0D523AF9
-8A56D464A6451A1681B02AEBECFFC15622D1ED62BB02A105675FA88D6D21347A
-11FB834CE630DAD592A11466C37DAE1B7E4EAEFE14E136EDD7EDD3E4D92E8024
-38C8D9ADEF9E1CD297F5F9B0B0842DD599271B811533E5DE8053DC46DFBB66F5
-C7C96341E54B0FC4C7022D8740AABF818023CBC00CE7324ED45D9CB0CB047472
-777DA67D96412D52154D96F66BFE7C84D8BACB6F9F74FC98E6ED07A65BAEFD52
-B2EB18B0BA1DDAAAD31A611B944E336583EDBDB7C32B93B34D29C81B28A29224
-C73F9190DA592525994601F76815AE1BFBB8ABDDDA53C603640FD728533D587C
-6A658847908AE9A333FB67715914FE94A4CF310FF7CB0FCDDF32FBEFFAE6FB8C
-38F48A31488107503B11B74729A04153E9B1DCF3D7210E24453F3F32A5F4BBD4
-4D04209EF7E78B7F40710D41C7463293850313027F9BADE5F6D923A4AEDBD51A
-B94EE3168CBC920245D47EB7924FA7182D1264DC03644E5C482446107C73F9CC
-226E54CDDB05AB1ECA3F74FE3C065A50D27BF3FAC51148E70A1D9613FC2E9026
-A49742A1AB33F441AAB1F965AB4723FA6BABC26EC76C80F8BFF453FE0D8B032C
-A6E8898B921C42272C39F0A4754AE0E528250907AFAB97EE834CCF646BF45D9E
-C2AFA77EA1D49A588A8B4C29D393F77ED6D8B4BBB8D8B335062CAFAAB6068265
-6C714B0B1D532072D519CD5E0E1D0E36C4B969F9C4CBF121709C2E66052C2594
-AAC0676B317AD254C54B23F62076D94B4B1D2D7D25073B9066CC9D2592C11999
-BE3B1F81AA3578C12AB62E40E19BA971BBAD041ABBCCB1CC52B2C329CA658D6D
-1C7A4AE5E9A53D5F5C0AA0CC355276249EE590CBE4E5BB498DE144523AFDC597
-5C8AB92E09AC64E135B5FF5592B9CDAAA2FF72AB239503E00F105C452F50FB83
-E3EB3C29BA2637DB8D32EFF22AFEF8344E1BF6E3734D9E15E07469EC8DB7EC43
-1F1C8340992BF0D459A00C864E24D4514A4DF5324182B15AA5ADB781AFC35F52
-ACC6E06313E6669996C091287663B1C937BCA7202FE42BF68D6943D6D33C4BFA
-A181DA5F41834BB816E6118F5AD7B0EFA04FBE31EB75ABBA47554264E576F12B
-B491BAB6F3057549E41440458909FD2570FF0643DFFBF5E742967C816D0A6D19
-833C24BB176B0A9F460DC0326A98C29B47EC79D2C8907207522C7C1E0164C07F
-132C023860F1C7A8CA96E6D9189E33298E704FBB9244B4A8D876C93BB2779A19
-1C72A9E4C15E83A24B2DB28ABBFB95888ECB3236E43FADAD62B7B087BF015875
-3DDCC4232251FBA6BAE04738AE1DB90B39989915944DB5A1F6C4ACC4EF9E7454
-E69C01B58E318128126A646DE0045029B14DA6E94A1B9CEE4FC10F97DFF01214
-F0FFF81FB15E3D9E1B52F2B05289BFF9B69912B5EF839F468781553A49EECD97
-2E13770AE4D085B91DE471BD2640E2403261AD755006CD902A32E283D957BE35
-DFEA27B83C1FA0C1A9F94B51E9D2D96EE504D31E11554525FB48DB3A02549200
-F536D99AA5464397B9EC5AB6857823F5BFA5DC4FDAF3904103C98E0CFF96E732
-32B1B48562F9A374EC18DA983FD4CAEE7F9406F81F002EF5FD3571CB97E390B8
-0CEB821CC2BAD3B16BF81E0B2C25CCB577AF5354F5F5971803711754F32A57A4
-628B7C35862589E2B6A2A9CC89411AF3FE85E7D51DE0E1F08935A341E05FD754
-8E06B874D39586686AB28ECD43FC1F0AAFCB969276D82D4F37A2447E198EA3FD
-1D7CCAF396302399D3B753ED6095E4C9A4F166D958BDEF0081EF1B3CB07C60FE
-761611BE4B997867A1E3E26DA37A42B69E6EB7A4437D6374F8B11104E1B23707
-B5F5FB66CC639ABB4F4715B29765BF5F161BA2D5D8FCA6622E9A26E2E498A5F4
-38158FB48F473ACE1CCE790C0FCC6F366D984DAEC0486F6715DD5F0BB5CCFB19
-8B80406DDA12C0DD65A1EF5E17427114E2ECEB391519908547E03EAA1F699F6C
-3C1CFD8439E20F9E3E0A1CFEAF2B084797887447B6B1C6C5A8372CA66EB6BB68
-AEA7908E1AE75F6BDFE2232857C0E08CA9AB5A2AED21847D5F97334CD8C6A83F
-61B9D31EBC98B29BE807DDDAEF34C894130A9185B59605DE58443699F692C081
-3552D9468E09032E01778661F00665EDF64955B8A49911BEDA0C031D299ED686
-4378C7438517F55F504A93EAFF9911E07987D3AC9E1AC8C2223414A6092ECD8D
-89929C1661154F2D6AC57844C946111880622515B8856B864AB52F64B2A6E0AF
-FDEA020D38443C4DAAC7F530F74277FCFB81B5C101A798B447D73EE22904EBDF
-7980A050BDE54CFBBC323AEA39315FC1376B0CAB8C5A77CA2A93B2A69242C737
-E04BEB1C50A0C3D4AEC9D407DCA484ADC97F32A4AFA66A4403A448A26121E4C3
-90EA7293D6A283F3866E836A1E09817B38536D5C6E2E9FD462CDFFF9A86FDD51
-9F70037610689C9577170EEFF9A4434FED83289E136E5EA6A2D87885601C7231
-DA11AD29DCA9E3839533837AB35AA3682F145AF9895FE7A31885CB3D6D3DDCD3
-2638C959E8547EC2A21E873443E993387E8F7EF27928F06F78C8BF0C4A3E39FD
-7163DD62AF5925852B7557CCBFFD318DE0059428A544ED98A7D9AD0EDB8986FF
-3A48169377F55556750445C36D8C2FDEBD4D871D9B6FEF4A75A4CD0020B2B3BA
-EF5969BD18424B90D2D37BE4343D1ABB3B6177FA6E53E98A9156C07CFA22FD2C
-DEDB12F8C8ED7838A1FE2681E45744471D9252627BBFA8BFC6EEE5B361331695
-3C2BADFFF325EE99F3DD6117282A1F3ED9F4339D47271347163EB784A571C53B
-B32509BE4D5E013011C7B32EBB65C476A1D2E86A809DD53F1C732C79A76CB95F
-03F7114B7184BEF393769EE0EB1E01321E4B9FA34B2A04201FC060EA81B0CBD3
-4EEBA9569D603B49EA889FC7E5BC14B03EF09DD3B8CE8EE59BB8BCB6AEB94D5F
-C65A93BE6516D027CB5DB46B35AC14A283665F7159223A1A4DB14516C0DECCC6
-1407D335537B580C04EAE2D6B49730E87E1536B773999448FBC8CF4ED7079A60
-7D6DA8964AEEB72E9C6BF565618C71DF73D85E54CE22B4B60E4E43A9B5985FC5
-51B15DE98ED1573DA8B73164F662A193F3DEBCE61D68F64A85EBD31D9C1B3B31
-F99D699FD2A138F94208D318295E8DCC4C717B0774135C388576E9960121F16E
-05467DCA248D7C54781EE84C80100AFC3D4288DC587EFA9D94615F035EAAE795
-95BD7053B2682B64871120817CAF1157004B1159D139F8F5C96379CF1753A6D1
-3D9D82D037A26F9493700DE64FB681EDE5E58890187124D2F3C57A9C4976D655
-FEA048C910932C7461B8D885ED9DCE7CB77BF0E57DA07C3BB12367DE24DA95B6
-25EDDE97176C2F6B75BD7A61773679C579CBF9313358EAD2BE69FBCAA7A294D9
-7B5629E626839AE4AEBC03381CF7E0C1E882BC7D27CB3C108FD076D1D502C7C7
-0C54BB693D39FCE7CE9E084912104127D577C5EF8F4AA2816AEB91D448B89159
-1FE260368156783DF360C0142E902CCB57370C4434EF83D3C4BEAB981FB50B8C
-6A89DC8BB57518AE4672229E7035A68F09D81D394864C7BF51A55D11B7A5E9B2
-6EC9B832BC1FE8C42033733422815DECB750BEF1AD45765E706E525122FF3EED
-7C92F6AA55ED063CA465E3243B4C3C1827406F0FC60D8D3A9EE8B8BF2F484114
-3DE7EC7CCB7E89EB00F5D52EDDB2E8DD13B2451C2E6EF58480B44A12A2898AE0
-2339D290CDCBBFFBB2B532C1C80C626CFA12375ED08606E81975633076689A69
-155E2DB375A3954DF5332A552754A4E103F2754A988E83946E15306F7ADF462E
-A4B82AC6DE81234A6DBFEA6A91CBADC7603D5CD631
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSL10
-%!PS-AdobeFont-1.1: CMSL10 1.0
-%%CreationDate: 1991 Aug 20 16:40:20
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSL10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -9.46 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSL10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 124 /emdash put
-readonly def
-/FontBBox{-62 -250 1123 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142
-08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C
-30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF
-C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A
-BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78
-5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D
-43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1
-374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23
-DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4
-B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83
-63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B
-89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A
-5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2
-C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5
-7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B
-EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850
-4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5
-7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40
-30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9
-2E080C10DE923C1A027CA718A83ACB879C37A1B7CBABAA34E7937C1CEC2CBF6F
-55FF0EC9D84EF9670F6B75F605D946C6642F4A54FE50609FD98028BDAC593852
-9980F55F4F16B3F60671472AB434358E6017B225DF2A5B12409320E0C35B9A38
-4A50E8ED725B6E3E92AAAE89FD3C8AB816B3DB2EF4718708DF5DDF5E371F3D63
-3A89D3CE54BD42854F3B204DBAE32DB7F96832C130AC7123FA18C3FFE146EF43
-0872D6B4F52EC27E21C5F4CC79C5090886058F43745C1B8AE1F19CC1A8E7066A
-E67A1E788EAB8DF286DB392D09A53A2DA05E2F09107D17624C8F335267F3EDAB
-632638B61AC51C1240FF13B07E160731EA4C70BF5480DE7E251561DAF06B6310
-D8011A705D5ABD4B28606D48F1A865E1A1CB3AF6BF59B12C48BA3C67A423E17B
-67D206A43CCCF17F0DC7AEB99C5282C227228445B66B8AAE255F94FC094CC8ED
-C6CBFB45E6E46767A1C0A1B877E9D69E737668DFA576999E17CB7E6E1E283995
-B92EB2A388DCAC2FC528474A5A0EB35BA90AA31326EA3FD40283F7192EA6F6BB
-356B8859169931FA48A0869B087BF79312DB8BDCD01F2E343CD6CE6A44752ABD
-BA7CDCDB638701B39B32D0AEE57C7D7223EBA1DB6BCDC6A07FDCA3C38BB429B6
-8F896712AD2574E6144792A529329B849FC2EF9CD9E422A9112C5CB05D1BD513
-DF307B79C7CCA39AE8902F94A4B643C15EAAB8853C01433FEDA20C165F127D46
-AAAA0A27FCC3BDA9681E103C2C8F539D13A817A39219340DE466A37ACE5D4643
-5B0C287A3E6E74F1C1A9BA9F64D0FC9CEA533F4B40C1FEDEE115F8B63552BB86
-585724A76957329E714DCFC9D9D6AFC5AFC2506F258CEE8B152654BE66BA7A5E
-8DCED21DF5A18A17056F5A4E1F00C9D4301C287C5CB8C07EBD49C261D85F6A00
-656FDB9B68F88A096952465893457C6650AA403AC5A2CE22F8AD80AF8712C461
-491754BD849328CD16266C6066E8B147017A334787DA8A02D5E7F70F508968FD
-4038BA55FF1B9B7A12353C1A67397A4F09420857E4869273C913681978911F06
-D06A2211D42026B879FC77C80D31C8DA9C020977B54F17C0FCCCDD46E3F144B7
-F24304B4B385FF15EB1F110A451CDFA3E9D41400AE753D816E0F500A89065C97
-F3C48C0F90F51A70D49A65B71B6E7640BA3B665288506E6EB6B25FB1AE0FE86D
-F15A534D6B0A23612E459ED8D892C6355C67F19F208590D75E4CA2531C7D54BF
-C4BD0D02A620B9345803700184E4BAE6B9AECFA5EB96EB00E3A3103E4F484852
-95A27E80CF42791FEDA2ED2CAAFD9F76BC2DA372555CE32B2FBDC0CC11CED6B5
-6AB508C3A20A613F88BCF7EEF1A3A7E33AAFBD197E29278E47365DB7B2B8A7D4
-4F6F630CE19A5949F1F92DED59EE20B3DECC899659933389D2B20CF40E1564C9
-0B53010BBC619AFA62D13869F31DCDAFAAF267C5262912F8A21AB7EF4E4B401B
-03BD37D730E5DD696536567E7D8BF7328147EB420D67D18B792D4691AFEF9961
-40D78AC041963D98E0F32EE060209019962A0DA3BC9469DECC10323A4CF6DCFE
-AD848FF62C482CB64F36B4A0EB963A41C804E9FC06D678DB1B59580C16E048D3
-344045A303766BB43BCD2097C985FF769C0E0C3879DA69B56CDCE591F27BC78E
-9E5F5D6DB443B46FF0711E85BDDBF21A920BEB5CD8F75CABEF91F738F6F2C913
-A8C49CA9D9AC71CD79C6A5250C0AA9B04DF78D8696D76D2FF99F0E611F92B213
-89FF8528EAE70B60F6B82F7A3FB6E67501A82BB9B81EDC10079A6C5C0FA02CCD
-667A6B415D328AFAFBBF1CEF5BAC0092B6580322336098ED9793B7C2DEB1B12F
-D552351140F6D79473A7C8B51AEFC5682A77BCB3E8678E6A0E77A8454C467254
-E17992583317D59702E6E26FA44BBAB82BB9CAA058C1238B216F3A986DAF2671
-E0C17FD8A986252E4331FB348AD3943F87E86A427B65C39350C7C517668C1EA2
-C1F42968770EB096611780EFFEF9A6860745171BDC91ACD1704446774E5835F2
-7AC02728DA6452F2E861DE0DA25121B08578C3E35E1919BE49D1747D3060953D
-05960730E1658AFBDF5C99B479F89250CF2D538F30492703BBF0C42FEB05D632
-2DB9E4331066EE7308A159B2EA26D7EB8F6E0508F13998BB2303EDCFBF3D2CA0
-EDCEEBA69D99024ED24FDACDDF40A8CFA996A3EECD1DA81FA2F59A8AA8738139
-8A38A5A5FEBDB5CFE4D2D0E6B2BBBFC7048C7AF2F687117BE7E2E33F669DD417
-2CD985DF7D107E733BD9E09AA3F02FD8C99E8AEA4DD70E4DCDB7B82BB3F11CD7
-3C7866D16AF28A3636199A712C0DDC782AD9645866443F5135D8F51C7EE9C2F6
-FD6B9E19A73262D87ACF76DCEB741564E625FDB342CD1F3FA743290D280A5FAA
-05321A4A8399A20046253FA44F875A27367BEEEF2446E2F15967BDDBFBD95450
-512767C8C5779FE85B0C7097CD5D96B69928DA71F3F76D3F4CFD87F827787250
-46E208572A2DAECFC675F69545A463016947F4811C924CBC4B0634E2C001DABA
-CCD4C5DADA558D5421FBDBF8C1C1962E2C0D452DC7A1285C47A4E5CB2DB8D965
-3A16D26BD7C00485C2F17E71369782CA97F1DE49EEC68ED369BB6B9DB1FBDA0A
-4381FE3380B3D68B76F74775CF67FE417546F70EC1D14B2BD1A526EF7FC3C564
-0B955593FF952D2BF090DFBD9290284A2D556D1CD03B5E0E06EF9C48B19ED270
-A01E5DA6CC1B54ADC019D0203D1D769CAE457B5576D9485D7A3BE3F8CA9B7D82
-D08C0D3EBDE7C7ECFF5B31F29848A3DA2009EF053EF7D13A39FA938143BB61D9
-976E9CB791301D076DCF4A5F6E6775B72E662F24EBFAD725B571DB8DBF10A281
-9AC2BDD417106F82850B4FB626C671E71A85491937CE26994B4AE3029B73AF4A
-CEB1E5C27DFBBDA4378786E94826AB2771EE06E56293C58A80136E07D2F6CF5F
-FE275792BCB97C0E4C2A2ED563C841F621BF46F21DEABF69DED06F1647A64ACA
-F31105F6473F239272DF6FF325D8EA93D85679710DF2B3F9D06DE851D7F6D991
-4FAA2C121E8529DBE00CAF32AFA5E39976FE1ED499E7E3AF28801144A0505631
-5301019D5D9C4281D143BE3DCB8F318B5E7613A27D84C66E10104CEA0E25009D
-C9A933476FF02EEE929135B5507878E0275EE14150B4ABB3034915F0D489BD71
-1B3412F39BAE4F3DD3B657EC5D5DDB1AC9F431D3295709653CFCCFE2A4442169
-63596742AD51AD2A21783C21D791DF0269845435F9C3EC91C7444842C0093BC7
-AFF99C782CF7CA23E953CB769780F252466F9BFF5D2B2453E1020E5B49882BAF
-8B68CC2E80E02E700B01815D122A5D271DABB62BFD3C106F6875145104C1C965
-F05DE045332318DB753D8E8276B3C0840D0A9AE3DE793BD9E109AA0D18981C2B
-514F0160799454B94CC2E0E169A6FD483EE46EE5F9CCFB4699411B5CCBDD78C1
-866A15C4B598271C5E2B5013DC6899022B09609C6E497AB1DC236FDF35875F78
-BC99EADC04BBCED190C3A74E59B93F6366256E9E7EA827AE2AF88CB0FACE7BBB
-88C13857598FDF7FAA299AD58F48048F45556233DE5281F4F41515846D766E75
-D85C52F12EC1794234C42F9F0C8DE08E7E80DF76F62BED9230BAAE750B3ED684
-6CC18938753F6D46827B6C375C4AC361A4916C9E4F05D047481F85FCDB6A4CDD
-89912B2948387E8668BE9338DA652452B328C2EBD7A35482671096BB2B6D038C
-C7FB1398759B8396D192C874319DABB76AC95180B7BA1134CCF7CC6901BC75B8
-D13DFB39DCD47A16AFDF933E80A3C18EA76C14579916A17E541F7134AEA52517
-177C622FBF40F7C75060AA4CC058C0BD0AC655D2E818E87AC8C0C0401BCCFC67
-055FD15D025BD403E0106B7D8DE2013E8D3DE96BB1F024E63D0022E59E751665
-6D149F842E7CF2B498AB9F053C60DD220584FF16B9C20C1C8B42FCF6C31E772C
-54C7C63A166F6689B852579723FD25D5AC7CC1CE1B20C34704C226F3459605BF
-83C20E2ADF663E4765EB3C8C05B0B879EC8BC6313FEEB0B2E868807C3C7DA43B
-8348622F780166CFA8B089BA110A43F77CA8C09A3D6FEA31E32052F55173C866
-78A25FE37B3C52DDA874CE9FCC6C94EC2176A8F6908A9D89133BEFD95E79810A
-578FC0A51DD6F2446080129216D1CD462D0C8B5FA8DC9EBB6A3F34246615E5BE
-50E484ACCE9B9E0957CEF1642FC3E14C80BC14BCABADB61EE3E6CD2BB79C4AFD
-675C414F98C0620C7A91E75E2295BD0AB286DECD52F676290D6B5BEA296517F7
-81F6EC5F682C7B6FDD416AC585F2A041906AE1F3A356E97CB9373E8108390708
-184026DD80D0711ACD30510CD81266940A74E9CB78665AC0E15403E499236DE8
-C963042D39AFFCB1C39D72D7CFF89A1A218AF997F1A3B04BF1A9424A7BE78C9D
-ACA267C62C6C3EF01CC9E7710739F8DDA90046E9A4C0411C748F2551AEBBC466
-C93BBC6B9D874153DE5D7BC25F2F0545A223D767CB239772F3AA96593CA5CE9F
-5664DBBE8560E777E2941C9FCD22F65E9E8E556F09B477CE454FD7D1662971EE
-CDE4C5899DD76B0285235AFEF6B1BCD8CB58DCD2E908F41EC8FC56DD66CF1D78
-3EABDAB5A518D272BF1360CDF6D484FB782384908062D29B350EC29847E7081F
-B77F61F8ABF351A7C4B5946F96FFCF73FF1C2FA58D89812CA2C12EB60D0BC9EF
-2B33C65DCCA72054DA8A839FD8E7E3EE98B4A8C5C9B5C3FC9B054A07E7421265
-C06272337BF86115D904851A12A393A46E1EC3B2F7FC9559AB55A25CBD8EA075
-4A97DD79EE3E83C4A586A28A705CF1E0D7470953B163DA693E053CE99F7FA480
-1CE3234047C8D21F9C82CBB504BED56BEFEF93BA2351D9406EC42881CA864CC8
-193B05F6FB0B0FAD790B2B6FD58F05B7269FC9D6534BB9EF6B75DD0E3B9378A7
-C4A97FB7CC1BCBACBBEFBD7FF7DBDF0D6FFF65D299B95790AB84BFCBD6306726
-053253440030C5A5147D1DF6351A6D5D8E18F42124437296DEC1D09532CBAD9D
-97E38C375FC2C71B986C1EF54DB4FB0E2BBE04AC563363D06457A84D567F3335
-A007E37DEDEF877BDD62A39CB156AB379A31B8ED5E3993680BF0AF077BC895FE
-254DE9953A69EE824E49E008B38ABCC20DE80BD6934CE0404FBB2CBE0ED28DB0
-EBBD6D28DC35C8C88CF2FF4491D2F5B0F83B26F85D3692853AD6BEA5785B5981
-6C7E5A4F301BAEC672A34A9DB0D80855FFC4D865CCE845C58D5950E424AF2AF3
-0850269ED7C0C52A6DE92C1935BDB6C02681972D98F99869A30EFF9DDA144FBE
-04C8FE264FB8942304163BAE396DE1BC2B137C35F742C21D465CFDE2B6AB9DA2
-C89935BA16E133C3A81757702A0C490519C413D230A5D33F0AC84CDFB8D7EF40
-120515EF383BE74AFE6A214E056DC98DC560600C9B0A57568AF650E0D2F80FC3
-137992C3C6ACFBABD14A81235CEE0A9BD743E1512D790D11F28FE3D07886AF22
-47BFBE157DC9AFEB5A09D40403643D04256EEA85C39AC1CE909365199CC85BED
-80D5D5ABDCB25506D7EB4B52CD412436896C1DEEC661E48BE16F388BDB4D2673
-D8A9C1242A1B058737CDA19648DFD72134BCF7F6E292381C331269F3947D3A59
-AD9A34B6368FE4CF2D973429FA6F527BB228BF2E37F31E58AF5FFD45A94F7CAC
-DB81642D723C01F3AD25A278D87B27D6A6F32FD56BDA371BAA9B5F864130FE6D
-DF8D73B516F6E20FFAC81ACB0150F5ECC080E0C46A5B5D501FB867D3F0499847
-6E59F2CE715189E81C5E1228DEFF7F5DC760F4D1DDACE3F7149DAF9CBE68ACF9
-C8DA12628C07F29B21D82C7C724CE95A50F95D3D3A86591876A6DA0E36310E0C
-AEA133442C07A4EA0397A69F83BBBB1A4B4E6B8F7BCAA71D8ED9A538A380AF5B
-E8335A514D114A7111D3288610B653468AD721417F01FFE0CA457F4A7E65A4CD
-9158C6E574002D163986F9C4DF3265C1555FBCAE3B40280B7F40E63560CAE3F4
-1737235740D9002F5B2E6F58B5920B99C777788219FAA488A2ED5F8CF4D3811D
-10A321C377C17227460E5091E3D01C185323F3B0839643CC4D9FB150A5EAC0D7
-45DE4919AEAABFEDE466357CF075839B6ED866E89631C7DED2E8292523D28988
-687163F4F69FDF1273237F4C2E5D595190609D39791A11856005E3B56CB30F60
-5C76EDA611F38033850306EFDBFD10111AB4453E529AAAD3D8048A1A60690176
-FD981EE99D52604DA1DDEFD29498FD859CC1AC117D42F62506B5040B8A27D8B3
-63C8257A0D5CBD3FFC332C9A77E9E7640515238FBC96A6A57CA3BDC1BB050D66
-3CE205F1913749357AA9F399DDDD96496CE317762A837E4D60A67F8700C74BD9
-8B38ADC85914B35B6CDBA018C26417ACF4BA101193F158A68947193849A2C3DA
-F5138DDE7937368DBB65FD8A3EC9590B13699A8264F6625CE6660F2B05E18345
-5EBF0D9115A4988036F19451558F7222C478D97E3F06C64B0AF3E6D2637DBFAA
-DA0AE10A3AE1BD15E14DC9FE955ABD16CBDFBE410BC9305A47EFB7551D351A68
-E1E85B5CFDC3E83AD0273E235930D2216CA1A0E2F83F357C70BDA79FB07DDA67
-5FA022F626710D053110EF8FC5A37B14523F7595F2D8B191647F797E3A32F02A
-38EEA80C6DB62EDB165E46A3CF1093E7A840665D3B86632456C4BD58F8F9332A
-5E1C52853F0AF418DD658F6975A8B4A1702FB64FA40AA051B57F2C42B51CF787
-9FE35AC98D25DE3482E5A2B2130C72366187D255EA710256370ED0F188EEA243
-A2B153A52ACFFB3762288DB525E9F1BB08A5EC5C6CB032F78F7CB5D266912B1E
-8967E58AE8FEA5C2798EA3DD31308ACA66A7BC017E888205ECEE59D6D1935419
-B3DFC4BCA4669E983D0A8C40EF8D705D9363678C76712678590DF98741EA2BF1
-01F15D7D47DA60A42FEF198FB18B8EFD1A31BC3ABB57C1D9B1A2D64D9D76D131
-6A0A150D2C0CF681C082A3FD08B2DBF51B64C2523132A1259762FB6F47A524FD
-75B87250DA15D1BE3AC05D3A79A20D19CFBFAD5D9BBD0D6E71E839DD432F48D3
-311AB858F4107EDB50726F9F8A189CA84F7F125CE2DFBB874CF444D2DD165B15
-2E3D6AB03CBB7D9CBE28CA101A6593E0921C052E6DC54D03DE4800128E644C25
-87B781D64B22503B5061D69636D37C237F1B62D568DD42BC69C2D77FD3F78B5E
-07E8284D5B0D4D15F1E8CF70305E8E46DA1CB42EBDADFC8D65E69BD4A46F4F0B
-D6EFB732DD1C6240C7BCE44C99B3BE7254A188F26478CDF12D6EE24F1C2D83F3
-92EAFEADBEEF7E86D30B5D50A978885638A0D1B834D513D554E84F388BBAEF0E
-F4ED0F75065D6F1F9058E581DA7096EFB1900384C0E04236368DC5FF2FAF84EA
-9355CA0AFE2E8DDC76A8B90CE195CB4CC48477471A07F297D0B5DD32AA437DC7
-31A37347F7355516310C073F51B8576EC2F9030F09F6F45075A392C5CB18B650
-509CBCCAD37CFE6AFE232A7A6D21881D667F51420353CF8A7BB09D4B00E23CD2
-AC61DD527F4BD79240650D6BF9EA53A86803E112DAFBFB0BCE3BE6FB117F2B47
-B1B3CF1D90D2BE58A35BB06FC628E5064DC76F01FCFF96FD6076FCEC26A0478A
-3CA8E1891C9BF8D9AC4449A65FF1C7F361BAC8ADA1E32B5AE6DBD18EF4AEF32C
-8F84381E21D7FB6C391BF6386432134EC79A716B2CD4324DAF57B985BFD7FB87
-57CFAC69CCEB4F98137AE626EE1E653C59F697323D62849C0926C2504D60AEBB
-97A5BD2A183EA77695A269A79BAC47697438A71F2E364CB61C0413645F16C57B
-A1593782C0BBEB60653ECA519B0BB5605D25E0040CA4A11C9C2FC2F5E82C0DB3
-EFE49D9203FEFEAEFAD79FB4FAC4595B92DECF7822C56DA3AEF822544EDF1B43
-BA5FC0DFD98490B8C6665BCC871175F24DE30FE67F847EB924B63F12B3DE39BF
-5A33FAAE2E785BC8BA5F8809626260B159EE3624BE39D64D3E1AAC8C762D50A2
-508324FADFE19C54CFDA9BA61BC327B5842BF4FE3D54E5F3ABEF21684B9ABB9D
-EC3E1C5E023F073406D8B4C7AFC103E196EDA2E5A142B80B06DFD09DE99842F2
-DC550FC37307BDB5DCC5E1E80866E49CC170F0A082F4357A94542A5F5FAEAD6A
-A795FDDA3017B981DEBB2F0267CE26BB78BB498385E94B39010B93B23958AE7B
-45386A3E35E9BEC3BE3D2C197A6B7B6BE23E602052B7C58AA264F0EF1D779F04
-5D2E19819BE201F16A8FA515828FEFAFA0CD72C2B4B47ACD10ED87B3D39EF7B9
-2DD0EDA1DDD44699AA11196E48822F11AA7CBCD57B9AAC4E0657B56BAA02B230
-4D1113B8BE0AA09057CB4097B45CE2F2F6709C282586289B30657BDD19C2754B
-23526268EF8B616FF68E39031E5E052630E1B5CA5E7EC5D363ABF0DC0324A3D0
-BB4E888019425A07611FC6ECC14E3D9F13685E241C3C26B295CE8132961E4BCE
-6B570992D73CB110300280AF27DFF5230EBFAB54A1F7A30914C479B720DFAE23
-1E060B4EE82BA4747404BF340AAF3DB62494327A2C342382C053163B4C8CEB73
-BEFB0A64B4BE72F0215037D6848D1F2B2165F569C8B7E2A471068BD9B39F6433
-7FD7F82FB80348AAED8860C5336714017BBD40C465E2CD116D509F5FB570EA1D
-5A28918BDDC6AC918643F79472945930542DA0F3FCE0ED0172E5D7AC01E7C2BE
-C88CEDE2FF908B90E2D0F17409D1BC4429BEAED8FEB64D192C5619536AFA72F4
-88B197C2EC5C3F4E86C4D7063E831800B098C771572344EDC9F6F031C5B535FB
-306C9834BA9D932DA6323C717C9676B13D203D71CA476B98C25B9D0FE5FB1D58
-38190C49E189E207CF980004999C7EB603495836707FF66118D306C4CF690BF8
-2253BBADBBCBC5CF2764D2015D1A8DBB3742238EDFC0015C9BDB5CDB996BD1D4
-6818EFFD831A363AA81C641F502294E56EE5717B297B6CA1A50ED60D8B1CFFB6
-29151463169D30AEB685AC120F6F703B10037398B20B4A19421F5D5E2F2196AD
-A9324CD03D0311278AC5316A25779960046BBF8AFA27A90897E9C93BE55E8E19
-EEE5A9B49983527A21161E1EF849AEDBEB4AA0D16100A82A0C17F747DEB26C63
-529BC7C019524B772959361267CAF66A753C57599A1484DC5DC5B7B8619F9CA8
-3EF20A88BFEAD2D55DF0B9114D8E3F77FBAA8B3E6A9216D1A5C03FE4A2E29571
-A187662A0E75A997128C51FE310CE2563647CE8F7E78D3366B725129063CF456
-4C46451A40D1D01402F1BD9E3ED8CEF26D74AF047A9B8F066E935BEFBD7B74B3
-4F896E5E3F86F6D1B76F0D3C4638751EEFBAE65F116007EC04C6D54F7C66534B
-63368C667BA9DA44E132E6E6750266F0563149E955823D3323FB1D88602C1DAF
-91ABF0CC1CE35D50C204387E622BB33A6F867E65BDB0C79346298AA472CD7894
-4F0F2C997D41CB47C8F485AC5D6D60CAE106A1F70EAC706A065660BE5EB56CFE
-2D0F55C144EDA227D692F99FC92CFCC619B48D774FA5815770720EC9BD945291
-6E992BC1A0DA54D9D37BA4AF917FC2AA55F9361148EF665C3BA2A8455B493423
-BC75A0831E138F085CFB6FE00D4AAA8CE338B8431749A3BF2F9D022E57E34D73
-AB02D498DD1465AFB511B7CE8FC1106FA5AD1254DDDE19F4919D2EC534C499DB
-A5BBE3174AEE7CDB1E0E312E7B3FD2495CAF5E674124515B1179D8E45601FEAE
-B144DB54CE59D6D12D5B5222F365323035373B7F8EEB42924383E6BE093187C8
-47E9F72BC50AA6C43B33E4BE133479AD6E5F9B0684200552AA37D4E5B9D7747A
-8D94B165F5A1DEF256FBA55097BD0F3FD1D7DAB79B2FBA873B1A0ED3BA3698BB
-81EF45AFA1BC17A88E31F8B58618393EB50CB66DCB053D400889B289390513C1
-E65684F9BA2ADF1ABB9186BF3A1F3E6269CEC1AEFED4523B102F440296A6669F
-0004898DD5ED4D136C84CFA893F051217E551D9BB109DC066495FC3D9E21E29C
-61622A8F661164D4572970785027DAC03A03D250EA5A0FE9F0C51F8B116F1984
-68A29ECE9960D050553E874FD559460CE7D3CFD2E8063BEA191F742A881CD532
-2907C967810EA6B4AC72708D62914E0061A51815D321BE8B2CC28A5F1220D46C
-D4CA5E82C7F7E265A204B650B38D17768565CFA0D90DA917B1FED14F8F6D46AD
-E7EDB249CA57EF69995EB897D855170DB24EB306DF5B4C1413605F791C44407A
-22D53D19404B0DAB66CF1071ED8EF6F57A35EEC83CBAADD9584ADD74801ACDC6
-9D7079A183739B7DAEAD055FE8CF8E9981529941002CA30A12C3ED013709A59C
-DFD3FBCA7244393CC27485B72A5D656B74AF298DB699E109D4FFE01D77779CB5
-1DBF65578E675480661D853200C3D666E7854C8EB197AF183C7E719394964212
-0F469E87697D0048F3842431BF10D19361C6F3C0D244335001CB401DA457C734
-5FC96047D1A45669D9FBE9BAF45820F3FE522BF150D53526900D8DF705DF1461
-2AF52B9F9C1CA9FAE4BB64CD641EC8889EDA72B5A50C878D43D3D2E8763C42B5
-D2F151D54B72279AEDC3AA8A5C094CE5AC9CCC6A9982FBA1A8095F8EBA2E6170
-AAF51DE96629DC4E891405F93472CD4AD45D854BA69A672C29BFEE6471D2C667
-0BEA37060BD4790EF53535F68AF9B5C51610C6C803FD9777EEE7F31433C640F0
-4592B5A05BD05AC815AC3F4E7098F7FEA00BD30542EBA0BDC61BE489E11D6F3E
-0A6C9296D0AE9BD7A4A11CDA7CCAB031D76E09B41BA530F761F34A6652B2E404
-49A9DFF71AD0E6A333CAC5D24C95A0F66D4FFFF006E56602D5E911875BCF96C1
-A19ECB6C7BFCB001CA81037386BA7857D60F9A28D2A9ADA240069754F0EA4CF5
-6068BE5772A74D9A0BEC5F1B0C44747476DDD6A68301F2A58A961910DB6D205D
-370F9ABC897FF767C18F1F7D78ADEE0807AC1C4B66AF7DE68BB568233D044A0A
-089E6C8A420129616FE5456B2143AC62725097A19628F3967CD677659FC655B6
-DD22ADC822A5B1FF2761832804158F6BFAD3AA6877DA79C29C3F438E616C1FCF
-C5027493EB503FB22846E6EC21041E47F5F37929A70D384181032D7F9A8EC6BF
-9C77A34E4D5FC83450B3784B77DC7F46507FAD4C59BA798CD9873AC22577B6A6
-9932394D57086C6A2DFFB221D1C65E1FFD8061C035A4B1B5B02CD0230927158C
-07BB76F5B953BF530BB5E9B29ADC1B5C3AAB365FD0D781FB1E3B4A5DBF837ECD
-93E21C5D8B67492C7B424079F9B62F12B9CD58497F38C90BDFA280940A503067
-08BE0093B29A33C68B18AF820BE01657795ED7A06C2580AC06F0493C59AE9177
-EA75CE1AF552894FB296AF2903B323BA15BF4762733563EF6ECE4F2A2A8636EA
-6AB535F95C2F98BB0C3C5509E23A1DC04E0AEF5B91BA3F2BAD1C6C1DC5BCBEC3
-A83674D19785AB8924E9867F0E489EB962BF5F8E3B6170B5690D4C6A1BE521E8
-B09A5BCE219FAEC1418CD14BEA725AA688D6FF28F0211BC4EBB14D1013BAC8B5
-A7F28FD4E0B33CD7E051F8CC27DAC79530A3478C79B43F7B3155F97C10FC84A9
-C4BE63BCC37C7E3CEB7C14717163E902CD957017C0B023E71D04A29E3C424CAF
-2A1EEEB4C7C79842F062E7E668F7AC6F3CCAB7D34FF0B8DFC135348B32F3D040
-0BDC235FF4C0B533116C4A311A4EBE4D93A2DEAA5EE14FF43DB3A1E343B3F04D
-D0D43938DFEBD69A44719AD6A9DF4A53F6B857E96810865950484EAC676C7E24
-34C8ADCD142084E2297C1C32A9388DE6B832926DBEC25957590B05730987C00A
-42E08E3FF9A3A465F2E219E75954582684C15F65A6DF071401E7E58C40CD3AE7
-DCBADE6D8FCA3301D68F0E81C1EBD1E69ED4F2F5DCBBF17656047E887E08BC2A
-1D896E062D59FA6CEEBC56B6723E49F839CDEA7899264A2D1BF7E48ECCEE1EED
-7C86D5BD5CB5D8CFDF3ECE4939A22D2A9032BA745AF2DF5C7F91FE4D866E6324
-518D8C7999C2FDA6779F144462029EFDBC0EA5E201C207C107D39BF611663E41
-5AEC0B37E3092EC37846DB737A84A05A6B88E6654E691939554CBB03563E96A0
-01B8371D4DEE25312E2B0EB90086FC494E179DBC70AC525395231F93B49B04BF
-B93C99D8D3049A9DCE647695761ADABDBC5240337114A90488C6C4B1E209DAA9
-55EB3BC0C965993AC8E2C8D0D0A7E97FA118917B448E0D1A608DA5629ADBBC45
-11519016D530903DDAA1DE7B4282759FB4E41899D94130C3E583695557070AD8
-B9510DEE22EADB8E1D0DC22B85453705F0B6F59B9C30CD2EA845CEB084EF92AF
-D028CD99A8B08FE2CC63AD9EA8779E32FF927A1301BA3E0F77A3D862FE399CB8
-2AFE428564823C894330521CC2FD8462313B06CE2610FB6F033B19B6D50EC0B0
-45B412D291A2C92FB5E0A1B9DFE1C257B18987A793005FA591A3A99A389C5637
-77BD5CA585E4DB46553ABD1A9E6C49648025BFA974221AF71989924191676321
-D8BC0C2FDA627B626E36A6C30ABA8590C560D58A9B278D4BC8FAB9D0680CE874
-BB5C07D5E617EFB06804791F0A5344600711BC9D16D5A75D59597A0EAC2D3007
-429F6D11D53D97187B01DB88944A261B256B74D5BCAFFA4DB3FB8C7B66ADC500
-D97B4A98ADB6A60B375FE6CD4DE92D151827BCFCA63D2271E6319FDCBC91B8A3
-D987FA7614F56AF51467B9D860BF5913AD6D6DD981C41D588066A20556DEBB00
-C37611BA36EA8BDE29C45ABE9CA964D9380AA1B156440A7A9F3D1219430222F1
-E5DED04055F3138849FFE0D2D23CF2A4C16B4373E69E5A9515D52EFE92121CF8
-FE49A53A387AFF37CB668BCADE61593AEE3CCD78A2E40AC7F7AD53FAF0B334EE
-2CE9474C43A8F745E8EB9139C65EBB14CAAE13903F62A33A65D5E29AD45C8A7E
-7589127E9CFA74CAE15C1988CB6D150F5976331FC153CC13610B804C66FDEAA2
-6318A3E31C5E92326CC475289F66B82EA76F1BB29C3152EF979B025DBF8BE049
-128D23C49A094B3C70DF0A6E9C3C5F98774A6DA798013469C92EC09A30751399
-D6544A4ABD87F4750AB1DDF787F46D98E3311B1640F7D7F10BCC77C462A3AFBB
-CAD3CB3954CF53D0A3690CCE3A07AE8653F0DEA5BA711C69D61B58A6F2877E3D
-4C7D4A1D8F797C497318A26E43AB8E4581DCDEF81AA5A470712B421042D59778
-EDFE7A3BC148B5040C8734227B33544D0DF33318351021C1100BA913B3C4A2D0
-799EE051C71F2DE24C59D5BDF818AD5905C0B61AF8008EFFA5CF52473A62F6D9
-86B787A2788837A0D7779D16DEC55F3B83D248B9389407C22B1F4A674B5A14C0
-BD2D691BD9525EC94C2931007C797BCC8E9C4E27345ED46DB4F9BC60C31B3345
-74F21A6D13B857CD9D4B59C8206D6250DDCCE60EA76E688B86DC8C9F2A72C866
-D8CDF56410550C2591E4697ABE86D74A51E0DE671849C5AF50E70636BDDBEC1E
-DDCD74409CB6190338912FFD8BA79880298E54DBA7B2CA3791AEE581901F71F5
-CA2A7E9514C8AC4E789C917D10C18787B2644C5EAC961A9CFC4071554664BBBB
-03F93F9FB8AE1BE31DB2DB66AEDDC36AA2A9417B255937FDD57ED74B5E4E90DD
-CB2EED5E680C87E7D354717B885A7052FF9AA413F79BABCB8BB6CE03939C3D77
-1A11BD9B5B11B28F4AC99A7ED0E9E2AF18589C443D8D7ABC72203ABA0A9A1E56
-5E522ADE675AA4EC12D3797E7E330E3B09C0B69FD3EF30349DEE4F5FCF789994
-11A76A12B413127BA6F03434009E01ABB3DD7AE3AD6C134354D438E169EEAEA3
-5CBE2DB693D6C20C62411B7DCAE4E26B3BAD191B8A9562FE2FB6DF4714DC311F
-E7428D8C9B0D09EAA42F49871513215F10C0B330C75CD71D65273D23D31B1C2C
-05FD731F173504C089AC663533A6C9FABCF602B231A24D5C08396F4EA21D1D8A
-E1213851CC95C91D7626389BB6EAAFDB55B1874F4B23AC40291B69C3BA3536BB
-734C64108A748246661743EB227F8B8BDCB43130C62E327B9A6EE3DEF4431568
-3E082203E4D04910527688E8D8E4C077346C447D827F8EE789023A87BD779495
-7B7F6D86B236BEBFFC90C3BAB159C980BB6630920CA0118043EE85E090EBEA58
-2C95405D8505CD00F6C42E29B543D2AA364E2302560AB9C8F1A888928B11BAFC
-C6841EC5C10B8A89876A92E07EF5C12DB5086F2BCFE425AC1AAD76F7664EC108
-A46C8AABC878C60E66A64335EE4D2CAAF9DE00665D26C3DAD514AFDB9ACDE18B
-77A39416BF26F7E60EFEB4AE20CA3B28FCB2C6052161F3514D7F1C0DD328B598
-62DC3F1F458789DAA88742023271F4C7D8ED4329206624F006B5B8017BA7E853
-8AB2C2E904B11CA6598D971A758CD79BBE09442A22603B8682CC5E2B58FEF657
-B271CCAA51DA95AC0E25E09640813F66F4B7CA1A51BC85E7C60607BE329B634A
-5EC93D93CAC6748B5BDFED18534624A16A04665F44527CB0F95B890196E610AE
-A09A630071E64A7B69F18CAAEC39B093537D2A422766EFE1843B111458483E79
-2B7D8867A42CABBAE2B58E3E6142D2359D038322C1E35E7464888ADD2D2CFE1B
-1C7477BBD81979AAFFFA85038646641D3C5F5B6342031E0F5995A64B83A4DD26
-78433393C9287492BF46FECE53E7AE61D113CDDE8FC4945FD1624C2AE6BBFF96
-5ECE8C0E15DD49894A26A11AD3A509C51E206ACA05A75FAC6D85C4F8F390CA44
-9085E037A3BC1BAC41CF8E02D6007BDB231C78E7853DF2C78B807E59AB6B8F44
-0048F8D44445A6208A41B6C3B2967893ADD900B156724E0AE2B41A26956A99AD
-7E19606708FED04F40460A10439565D7BA4D0B45B4BC6AE343B0ED8422066D6C
-BB7434D6C7AF7F830433F6A70B5044C798F211DC4AE846547C9B273C7ABE3FF0
-4651ABC02DD582603A1404894BAB9DE851F26F44A2F9C794AB433930ED76E008
-8C1255DF316C0C34C7D72709A6A05F0BE2401A305FF999866ED55E662B2ED511
-70897916716FE9EBC6D2F2EC21E7E2DC418742CFEC20C5BA43A72E61B416266B
-16E69B84E384931A7523B02EC41EDCC072F52D8F4E8C9DFF3EED5F287728BF2B
-9427FEBB9CAC80A4BB2EBDC351FD8B3CA28227D9CE812DA6A787EBD0E777AE81
-1A972CB469082AF0DB6FF728E875539CE2204F50C46914877E9F6134F0052635
-5CA45E21C580FBCD0E490F7EF4A968E4C6FD0328285C59A418094967C8DCC3E1
-E1EA2F3B89D05BFFFAB5F79E67EE8AD276076E21B3F5288D2198933B8D6104C0
-70A5B68C9276789BBEFFC6FD3C7A49FFC36F623093A4B017413CC2A0FE7A5EFD
-43B0CDD3FB76D430BDCD5E30636B9C960B95C283C7A68E703CC31AB9E75D7143
-5D0C3F0D80FDE3A90867F09A42BCF7CE30329196142F3800DA8D1A0EF8C1CD5E
-6B7920DB08E81CCED0E852960769A28FAB9D1FB1BE2FBF8F26F339C70025E1E2
-E0B6A9ED330ECE80A5591B27D3307A6CC51DCCCA59613D84FF0971F0AB0741C6
-8A0481459B57CE8D02B906C78E0C13E8F4F98996B55F00F2FBA6C499870037E0
-C46E571A1AAE29D1471F372B406CB2BE78A8C5F6DFD46338146C3A4BFC0F0B2F
-98E8821E0A15647F5D65A178F13D24A698DCEDA7994B17452C67988CBDB916C3
-B037EEE02A9E1B0E7FEC3343ED4CFC33A71CF42ED5CC9E0B85A039CF686171B0
-05F1F59AB4802DE0C70D21B5390FDE1378A4EF3441CA4F9A172AC20FC56B1D9C
-1188244115F0E78254F467E3DFDF3537B382A3B27012887C24E7F1E5ADB02E80
-51C25DBF73B67D0F7FD4EDC1A8BBC8FB7DB2D053AB8B03B30003CC944A146C92
-35795A0BBEF00CC4CEB3A6E51605E0624C7D4E3CE20D9236C33B6C25D96A9560
-4C22EFA98BE24F406C4378C7908AEFCA99D6DC390B1722C53F8D81E6F82C9201
-90694663A3EEE97BB2BC1EA61402B51CBD2DB98BA67DA3CD2C7702DEA81B08E1
-37E15954CF7207567F499507AD6F6441B314E9765663E7B97AB054E5E43FF2E8
-3E55A2BC69B3E329944FBB6A89712F01705355D381971423A8D92AA0F6148122
-79FF6656EAF11DA79AE2ED7CD20CF6C2E5D27CA1A303D26BBFC61B7EED09C267
-AF069F6222AEE8021C055D3925F416A1E87C0D5B5712D368F9197304A3BC0179
-302F7786BF0D917578AF8FF0D0BC8D2622CB00835EE45BFF1A5BABAD64F816E2
-2B019077AF25AF84B110EEBD9F67AA72EF46586F81AD2B0D3778A040D98FA801
-4749531D612DA3B2EB3F15637BB67CBBF510562CA91F5ADDEA8D224105F17041
-DF41FAEC591B36FD5D8E9B1E17B550A139E97101A15C053B8132DD223768DD65
-BCC3E81DBB4AC7562DA15A54597495A5CBB4EC11AC13D1F323305874D4973C34
-9ACE4DE9DF1C1CEC32F6E365930A25B4BD8050066DB87B455C7703D35D3ED5D6
-E4724D69901889BA61A6DC19D9F4F8C3EE4A08D3A5D6D0EC554151275C6C2C9E
-6A97505763BDA178E443A34C2F58C9D0DC25E14785454F0F1FF04C285A92799B
-755FD7A129BD019F68E921A5BDADB28C6ADEC0492F49FF143C836320F5BE027D
-57399677A4E1FCBDC530B03342B476ACA7756E432B05A9E0D19A56FD8CA10C6F
-E10DD88922D75A80DDFFE0047A18CBDE683B22EFBA43B9947FAD6F587BE6A39C
-CFB57B06BE4606B63F8BEE2FBD4BD609FF22843283A486293EB28BFA6AAC988F
-CD5E44A37550CAD6EE9CDE2B11DC2801D07E15D69B58254B43F9E0052C16202C
-FD06FC09DB828A5D662B9FF0A65CBACCA5891BF58E0165B962FE988E5416B01D
-F164CCDD712E451C98B13F4906F91C5D32D90A18A8690A983DE1A16C9A0D0ECE
-CFA7FFD4A70E49510AD7AC05F96905035257FC3A6523D9AFD759741B8F6831F3
-C6986EF4F7E345971DCDE1614E4A6BD6EBE7FB188AFA5F68C73BD8BAE5B080D1
-C8FCFEC5F37BFCE83C83FFE6A28A5A92B467484D5F0E62BA7C1F01F8BE99B963
-1D218C617192829A1CBE4595EEBDBE6C003DF6D2BEC6F7093418F57611FC145E
-F899F25C06203399147E68AD2555FE4AA55D10A74FA21BD1B49B0F8AF69687AB
-82E1B221017ED55B6066D8E5DB67EB34112BF819A9CD0B4889E5EC0CBC29E8DB
-CF1F2144477A21770EAC0A168A0721A5ACD02C8DD52AFFED2D1DC5261D1D31DB
-6A71B466A1E5F0A8B5E7139E6D5A3DAA07D3FDCB5A67FCAB59485237998219EA
-76CF0FCC3FAE0EBE7CEEFB87681B8F767957B3EC013A0FD3865301C00080C402
-16A1EE30488674F4B0C73E974861FDF1C36C01EB39B0EEACC1192BE4D0BC7277
-83D24F76655473BFE2BB37A16ECBB6CDD7049A40585F3A3E6D83E5F2D477D53F
-A61F1896CFB7F9C5F6D6AF66FAE1A930D5B7F1481BDC25B3E90CFEADACD3FA3E
-CC22D0B14D4B7A2D1B20C975847279B907A4D0379184AEF964A6956AC6675E9D
-540DB1E69980BA8E33BF379C3FA2943473E60E8204A50C037E30684460EA326B
-3D2789A8C5521FCE733EB527DABD96A52661401C91229B5EBD90EC2DF899B25C
-7A8FF9703C39B67DF148B753907C4C4BBF79FF317E6E22749CE3BE573992B1DB
-E0D45B61C080EA167DEEA544532421F7CA78AB1C6AE9EB16DA18A166619BF863
-90D4F9BCA5F533E484D4FED76B7A9E7FE259EBCF583936A02E3DE997BEFE1ED8
-1953B7A5F9295967B18AE5AE8C00F8AF334F376693094B30ADFA1389A74CA2BB
-87E621C6025E5C6BADE40F5AC6F6DBF055987E5C5C87660163C3692150A50A1F
-82971F7690B05041B4139753BB90AB544CBBE2BA33FDF9F7FA515464C6013C8F
-865AA1D8353A47799C63F558D4F21FFD59BF4723AA77365000A9F4BBED286E4B
-FDD01B60C88019E2
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMCSC10
-%!PS-AdobeFont-1.1: CMCSC10 1.0
-%%CreationDate: 1991 Aug 18 17:46:49
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMCSC10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMCSC10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 65 /A put
-dup 76 /L put
-dup 82 /R put
-dup 97 /a put
-dup 98 /b put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 104 /h put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{14 -250 1077 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
-900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
-87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
-076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
-9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
-FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
-B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
-CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
-40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
-C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
-7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
-FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
-81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
-5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
-CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
-0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
-E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
-22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
-1D1941E73310943FA782532ABCCC88593FD63E7E2CECF6665C04DB48D641ABD3
-AE1BB468638681E96394B9E7BED1D13E534B897DB90EA6EC706BAAE06BE2FEFF
-1DFA5258113E9B4CD2D36655973864574E0E8D6291E48A8C62203F679B7ED838
-6F7CBD523C2943ECA994CACE63DBE3C3FC80F475ABF6BD5EDEADE08D828E6B26
-6FE55D18EDED9A2A7B353AB7B1DA738F4F262AF743F8907DEB78362173D5EBEE
-5238175D5CA0BF9CE9B82399D771C12720F18B9B7CFF85D5D20332904A71D4B7
-A174C77F5B8D1E632967E3516A260178E07A1EE092EDD6F348B25AF1F69EC753
-802EE12BAA4E755785F548A7C2B2C1EE4ACCF84E5831BB0D1A1BC7B7E4508C0F
-0156F9BE0189BCDC40D7B2DE6CE5724B03352DDB93E97B862600D0FB9FA3C583
-38C84108D1934D8716E3ED3B064C8CD28FF3E24D6ACE036C592F4F2D010C4A68
-5B338B4380B4F24DF440965836B17F7B46592D24CD8668DE3CD9A027BA1A70FC
-750C51D36FD3B39911A01B48BE87DAE7BC1633C44247502286405A1F13B7717B
-7569ADDBACCEA4AE3E88D1CF3F78060DBD2B7695693902385DDF1B30A71098B6
-7B5CEC9A2FA61779BE27421DFA3B18DDA2E7F038CDB3605EA355E954932EB9ED
-4B7AECF7F33286C2E2B54698563BEC0D14DFBD313802D808B4C69761C1002C64
-8F6E75DBA7A7B0DFDB5B0CBCE27F108C1A8C0989ABA3A290EBA4782CBF8E270E
-A291213DD16D0151D6A493AD2CB1C0EDDAF839A78796B388AD27A8E7CADCB17C
-BF01E25B36A4D9600FD7F8355A7366CAB1E923D60DDE0CDA5813FEC7679E9DE9
-CEE9010A637BF09CA29D4C59E8E43BAF97ABB82E54326D7E2D6246A0B2CE2042
-7B81376AD1FA3552FAB451C905DDDEB8BAEF44EE76EE4D1A9BE715C3FD317028
-EAE42497E8419F83E3278849D441621DBF8A491F66A24AE49B9972C46B2F6C2B
-4463F73E15CEFD43E46B9517E9E1C886404FB41345556A2998516C00B700D053
-0DDCD51F0EC27CB43C84561624757505CF959521FBB7F47051FDF60E1E36247E
-0819273C424165F053C831293B50615EBF3FD01E784431DA1C4DCBFE8A04C5DC
-CCF0F23A51C77291A124A2DD1A167BCA8F3B8FD5B0FAB4546A417C6C63FD265E
-9E9BBEA99A37D3707C99AE85BD75A35EB8B3F97C1052D63337D5FCD7A2E3C133
-A137B80D4ECAF904A35E094996CB722EA00E197C660D915788EF61335C97A1D8
-C8442C42F6076C051F17BD4308154C99ED66D4BDE1D5D3ADA4507B415B4F58C6
-83C155A9DD0C95A97BE9B14BBBD6791E11E170AAB2C2E638EBD33EA7CFE35A5B
-06223215D2A6C806EAE888D600DA4112A09E691FF7AF08F8A00B4FC6E1B0F4EB
-D34E84A1409C474865229BBF39376D62289A2C35F3EF2FE2B4604D7ADAF0755F
-EBA9038FA2C3B6EB6C7F8B343EFF9AE0068EFBB24949CBB8BEC157451D14F86E
-91785EE29B3BE2B1479740090BB4A450CCB1143C5F9271992A90D05E64A31B64
-4745DCB13B4A3EE25939DCBE342F18E625419FA82B5A718780F8B8E86E26DAB3
-9A8F0065CFDE2405DDA7EFCF75D538848C296ED7CF5F03153420D27311003FD2
-F29236C4DCAD83E7C72BE250DF3443CF105C3083275C29673F686B9BCCB41F78
-8491ECC2F9AF90276705BF08F1C0AE18B57EF6C29427C77D11848F6ED88A5FE0
-025DF6383C2B49CDA9C7D20A649F3CA5493B1BE4FAA0BC6A9EABE0EB7AC19A35
-88E0AD4871314D5D202CB25584FFA236ADF1C2DA02566FC44B36926661312276
-8EA1E55BC08807F595E89DE0E3791D27EC975D11159DBD41EDF5D99CF092A991
-268001084E09138095AC768D063804BDE078AD9DFF074207139AC26D23B90AD0
-A571490214CDEC8F090B8A4497A1697DE589C5DF782B56C4083007D697A2B602
-13725A6D4105588509D27A6550F40A379E53B1CAD8050FBC2F77875266498046
-243ADCA1F4860B4EEAB4BAE088BC2AB990508F7F48326214D62975639F9FAE67
-72D82F304C10479AEED5594BFA5E3234C17EED3D7FA1BD2C0C3ABF5CBDC18BED
-6A4F1B3A210BB8281EA848BD5CEDEB93CB4BDCB917C85DE151C92A398E228446
-EB9516265C34437ED5745139AF4B422054D118D0C8BB168C4DDBF152A9BAA3B2
-E3A7B515E35323418B1267E25AB312CC57ADF2BC879B4961F4D331228A6319FB
-E39117D6BE6989C594C3516F7B485BA19C95FBC6C5D2D8123D88705981E02DDC
-8DE2D08FCA03A4DA14CDD45D52209A5F7EFE19043122FF2575C4A10BAEB015C2
-041D4DCFA024373DD96021210ABF2CE0447AE374AB39BBC2523767B5D4D32EB2
-DB0DD9B1EEFFE16B2819182F0335F984740A60BDFBFDAF8BD036640F360B8D0A
-723DF3A2395DC347051BA8260D3DE173F9DCFD0E9C69D88E3BDFB0CF73E2D0E1
-8BE0BCD8933EF4D2DF9F57F3EC894782C366F5F95CFFADD7844585F2F4E7FC0B
-29FBF43D5476A1D8710523A2DF19832A73E5B7D40CA8A476C3E41FD3B5A34366
-F3DC42231743D5AD92BED6AB872F0548B81F0F83A40F1CE45F1A1A7104C1B033
-731CC0B5A96252924415CED4A8FFAD8D5DB42F21F2AC183832551102603C1C8A
-6332ACC319838B9EE080768CB09DE60C6D4007399C6130577FC8925367B73DE5
-0E5D0DA7ABAF518C58FFE632640B039932010B0B621B9D04E7BEA1492034522F
-A80BCBDB6A0B7BC89968F02371164E29F3B62766128AEDABD73FC685F72A6717
-6C77026662A2CE8BF0E7B728107DD61C38C15E3CFB2A79CF957CF3A3AB312E87
-FB7EB8F1FF8605CD0B451BB28BDCD3B145177E5C799D1EA3DC8E24BCD4BCE3D1
-302199DC6EC1B0BEFB8E7AFC228BD5F5E7F05E2B93F33E903724E07212F3B96E
-3E31D8C164B464443C08CD41C51F30A6F310E76E550ACB045B6F530BC73B6C4E
-BDB8785CCC20D84393D447D68415BE0779C72156CECD2A4AB616FBE8B3840A58
-36CA343E3EFA85B98A0AA0FFEDD3921D1D0CDC3AF250B91778C0EB8CDBF2027D
-DD9FEB89105658120513D5BE01DBEE3D8CB662AC0F44BE0E5A1C6A4FC1CD9A07
-C0206B77F84CA48997EEC2002AF7D36A4DB872FDB1BA65BE82B39CC6ABFE9C10
-3163442E2E24C18C4C441915A94911FF5A150BEFD2F88D6CE3AAFDDAE115B64E
-F1DBD90A742149CC8DDE50E3DA10444215015A812DB478CFABD4064265CC61B3
-9B5C9A4DE0BF464DCBC38E736483C2DDE7654F3E2BB7015C3C78A68854DFA1B3
-6700839203AB93FB4A56F3441454B1DF79E79E398084FC7A63CBFAB6628D5504
-725A43221C9F6EEA584F93C12126188E0F74A78D95E390AC27FEE9ABF06B934B
-2542AFEA0B6E648FA461F4D65B5187E326C128155445AA7C065AB7AD2311E16E
-3A5D4614859CF78A6948145405D449A62279F83629085B71782A00969254BD1F
-BED9862FFEBC63103C1A8C4F64A1D1700C7909D81D5199B88ED79A907C503EF4
-E7E46AC957CB4330D39B823C793AE592F0DF06EE26E7FC5CF024E4E3EDE1AA4B
-93AE4C205D93D15DBE10083471AC5F58B3F4A18CA9D4093F4B21CB0D8DC48F1E
-0EE8F82C333E6B6CBA64E915EDD88CAFCD71945F93DBC713F0D6237132615F4A
-C50DA1A760D3D2579A3E3BF1BA9B0D24C0D96669DF652E4F09397509C5CDE8DB
-545806D74D722A2AE74031B3079CEBE922619E4BA181868B2F304DCA9DE05366
-C21BA5AD769FB898DEF6DE248004F4999EBCB8A6EE38FDEB09509BE08E8BDE17
-DD914E47D0418C7A4F66B69AEFF1DF30E85474AF9837908F40239335925AC35A
-88CE8914667AD0185919F0B57D18B2550942C9A89DA77E4EBB86383729239E60
-97809CCE0800D0EFFBCD0912ED69F514F7B3F2DF77F64E9B1012833B84519444
-85BAB11C62D9DD4E6B0306D27E40D90F630431F9F737B7F384F9BC084FB6EC35
-97556AACA6E7F5B9246102C2150212DEA5F6B2D82BBA992960DC158CDC9A5893
-1AE8BB3BCB7DD2C3E33B3F3764259ECDE6DD310BDCC309AA5997B95D0785538A
-94A6370DAD984AF104E6F40E23DB1D13CB10E1749D44C695A3F91D3F2902304C
-7D1615C7846F3580
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-TeXDict begin 39139632 55387786 1000 600 600 (sun210.dvi)
- at start /Fa 150[32 105[{}1 90.9091 /CMBXTI10 rf /Fb 193[91
-1[91 60[{}2 119.552 /CMMI12 rf /Fc 134[50 50 69 50 53
-37 38 39 50 53 48 53 80 27 50 29 27 53 48 29 44 53 42
-53 46 6[58 72 72 99 72 73 66 53 72 72 65 72 75 91 57
-75 49 36 75 75 60 63 73 69 68 72 3[74 1[27 27 1[48 1[48
-1[48 48 48 48 48 2[32 27 2[37 37 27[53 56 11[{}67 83.022
-/CMBX10 rf /Fd 133[52 62 62 85 62 65 46 46 46 62 65 59
-65 98 33 62 36 33 65 59 36 52 65 52 65 59 6[72 1[88 120
-88 88 85 65 86 1[80 91 88 107 73 91 1[42 88 92 76 80
-89 85 83 88 1[55 5[59 3[59 59 59 59 59 59 59 1[39 33
-2[46 46 33 24[98 65 65 68 11[{}67 119.552 /CMR12 rf /Fe
-160[62 95[{}1 119.552 /CMTT12 rf /Ff 160[39 95[{}1 74.7198
-/CMTT9 rf /Fg 137[35 12[24 3[35 3[39 50[24 46[{}5 74.7198
-/CMTI9 rf /Fh 160[51 95[{}1 99.6264 /CMTT12 rf /Fi 138[41
-25 33 32 3[43 1[21 2[24 2[34 33 1[31 30 37 17[54 2[48
-17[20 58[{}15 66.4176 /CMMI8 rf /Fj 145[42 3[23 11[55
-69[65 8[42 11[42 2[65{}7 83.022 /CMSY10 rf /Fk 131[83
-42 37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 25
-23 46 42 25 37 46 37 46 42 3[23 42 23 51 62 62 85 62
-62 60 46 61 65 57 65 62 76 52 65 43 30 62 65 54 57 63
-60 59 62 1[39 1[65 1[23 23 42 42 42 42 42 42 42 42 42
-42 42 23 28 23 65 1[32 32 23 65 69 42 1[42 23 18[69 46
-46 48 11[{}88 83.022 /CMR10 rf /Fl 138[39 25 31 31 3[41
-1[21 2[23 2[32 31 1[30 29 36 17[50 2[46 76[{}14 58.1154
-/CMMI7 rf /Fm 153[41 39[65 1[65 1[23 58[{}4 83.022 /CMMI10
-rf /Fn 252[38 2[60{}2 74.7198 /CMSY9 rf /Fo 197[21 58[{}1
-74.7198 /CMMI9 rf /Fp 133[42 45 52 4[43 5[80 1[47 1[31
-52 1[45 15[53 2[56 3[69 73 3[50 40 76 71 58 7[71 45 71
-25 25 32[52 2[55 22[{}25 90.9091 /CMMI10 rf /Fq 241[35
-13[55{}2 66.4176 /CMSY8 rf /Fr 133[34 41 41 55 41 43
-30 30 30 41 43 38 43 64 21 41 23 21 43 38 23 34 43 34
-43 38 4[38 1[47 1[58 79 1[58 55 43 57 1[52 60 58 70 48
-60 1[28 58 60 50 52 59 55 54 58 1[36 4[21 1[38 38 38
-38 1[38 38 38 38 38 21 26 21 60 1[30 30 21 4[38 21[43
-45 11[{}70 74.7198 /CMR9 rf /Fs 198[30 30 30 30 30 30
-30 30 30 30 48[{}10 49.8132 /CMR6 rf /Ft 130[44 1[44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 1[44 1[44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 1[44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 1[44 44 44 33[{}88
-83.022 /CMTT10 rf /Fu 135[40 7[76 96[45 8[71 2[45 71
-1[71{}7 90.9091 /CMSY10 rf /Fv 198[35 35 35 35 35 35
-35 35 35 35 48[{}10 66.4176 /CMR8 rf /Fw 131[112 1[50
-59 59 81 59 62 44 44 46 1[62 56 62 93 31 59 34 31 62
-56 34 51 62 50 62 54 4[58 3[85 116 85 86 78 62 84 84
-77 84 88 106 67 2[42 88 88 70 74 86 81 80 85 1[53 5[56
-56 56 56 56 56 56 56 56 56 56 31 37 31 2[44 44 5[58 21[62
-65 11[{}69 99.6264 /CMBX12 rf /Fx 134[44 42 60 42 49
-30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42
-42 46 6[56 2[91 1[68 65 51 66 2[70 68 82 3[35 2[59 2[65
-8[28 7[46 46 1[46 28 33 28 31[51 56 11[{}46 90.9091 /CMTI10
-rf /Fy 133[48 48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48
-48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 2[48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48
-48 34[{}83 90.9091 /CMTT10 rf /Fz 131[91 2[48 48 66 48
-51 35 36 36 1[51 45 51 76 25 48 28 25 51 45 28 40 51
-40 51 45 7[68 68 93 68 68 66 51 67 1[62 71 68 83 57 71
-47 33 68 71 59 62 69 66 64 68 7[45 45 45 45 45 45 45
-45 45 45 45 25 30 25 2[35 35 27[51 53 11[{}67 90.9091
-/CMSL10 rf /FA 133[60 71 71 97 71 75 52 53 55 71 75 67
-75 112 37 71 41 37 75 67 41 61 75 60 75 65 6[82 102 102
-139 102 103 94 75 100 101 92 101 105 128 81 105 1[50
-105 106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67
-67 67 67 37 45 3[52 52 27[75 78 11[{}68 119.552 /CMBX12
-rf /FB 169[122 32[81 1[81 4[45 46[{}4 143.462 /CMBX12
-rf /FC 134[123 3[129 90 92 95 2[116 129 194 65 2[65 1[116
-71 106 129 1[129 113 9[240 175 1[162 129 2[159 3[140
-3[182 183 146 2[168 1[175 23[90 90 65 39[{}30 206.559
-/CMBX12 rf /FD 134[51 51 1[51 54 38 38 38 1[54 49 54
-81 27 51 30 27 54 1[30 43 54 43 54 49 11[73 1[54 72 1[66
-1[73 89 8[75 70 69 73 10[49 3[49 49 49 1[27 33 6[76 25[54
-12[{}40 99.6264 /CMR12 rf /FE 131[105 2[55 55 76 55 58
-41 41 43 55 58 52 58 87 29 55 32 29 58 52 32 48 58 46
-58 51 4[55 2[79 79 108 79 80 73 58 78 1[71 79 82 99 63
-82 1[40 82 82 66 69 80 76 74 79 2[49 1[32 1[29 52 52
-52 52 52 52 52 52 52 52 52 29 35 1[81 1[41 41 5[55 21[58
-61 11[{}72 90.9091 /CMBX10 rf /FF 134[56 3[56 54 1[55
-1[51 58 56 1[47 3[56 1[49 51 57 1[53 56 14[73 5[62 10[74
-65[{}17 90.9091 /CMCSC10 rf /FG 131[91 45 40 48 48 66
-48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40
-51 40 51 45 25 3[45 1[56 68 68 93 68 68 66 51 67 71 62
-71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 43
-71 25 25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25
-71 45 35 35 25 71 76 2[45 25 17[76 76 51 51 53 11[{}90
-90.9091 /CMR10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 0 351 a FG(CCLR)m(C)29 b(/)i FF(R)m(utherf)n(ord)
-h(Appleton)h(Labora)-6 b(tor)g(y)1176 b FE(SUN/210.26)0
-464 y FD(P)m(article)34 b(Ph)m(ysics)h(&)d(Astronom)m(y)i(Researc)m(h)g
-(Council)0 577 y(Starlink)f(Pro)5 b(ject)0 690 y(Starlink)33
-b(User)h(Note)e(210.26)2455 927 y FG(R.F.)f(W)-8 b(arren-Smith)31
-b(&)f(D.S.)h(Berry)3039 1040 y(30th)g(Octob)s(er)g(2009)p
-0 1183 3780 12 v 1657 1504 a FC(AST)702 1754 y(A)78 b(Library)e(for)h
-(Handling)520 2003 y(W)-19 b(orld)77 b(Co)6 b(ordinate)78
-b(Systems)1192 2252 y(in)f(Astronom)-6 b(y)1726 2618
-y FB(V5.3)826 2931 y FC(Programmer's)76 b(Guide)999 3134
-y(\(F)-19 b(ortran)78 b(V)-19 b(ersion\))245 3396 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 245
-3396 a @beginspecial 20 @llx 100 @lly 530 @urx 631 @ury
-1275 @rwi @setspecial
-%%BeginDocument: sun210_figures/fronta_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 1307 3396 a
- currentpoint grestore moveto
- 1307 3396 a 1596 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 1596
-3396 a @beginspecial 30 @llx 189 @lly 477 @urx 603 @ury
-1117 @rwi @setspecial
-%%BeginDocument: sun210_figures/frontb_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2527 3396 a
- currentpoint grestore moveto
- 2527 3396 a 2703 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 2703
-3396 a @beginspecial 22 @llx 206 @lly 490 @urx 605 @ury
-1170 @rwi @setspecial
-%%BeginDocument: sun210_figures/frontc_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 3678 3396 a
- currentpoint grestore moveto
- 3678 3396 a 1633 4700 a FA(Abstract)0
-4962 y FG(The)40 b(AST)g(library)h(pro)m(vides)f(a)h(comprehensiv)m(e)h
-(range)f(of)g(facilities)i(for)d(attac)m(hing)j(w)m(orld)e(co)s
-(ordinate)0 5075 y(systems)c(to)h(astronomical)h(data,)h(for)d
-(retrieving)h(and)f(in)m(terpreting)h(that)g(information)f(in)g(a)h(v)
--5 b(ariet)m(y)38 b(of)0 5188 y(formats,)31 b(including)f(FITS-W)m(CS,)
-g(and)g(for)g(generating)i(graphical)f(output)f(based)g(on)g(it.)0
-5351 y(This)38 b(programmer's)g(man)m(ual)h(should)f(b)s(e)g(of)g(in)m
-(terest)i(to)g(an)m(y)m(one)f(writing)g(astronomical)h(applications)0
-5464 y(whic)m(h)g(need)h(to)h(manipulate)f(co)s(ordinate)g(system)g
-(data,)j(esp)s(ecially)e(celestial)i(or)d(sp)s(ectral)g(co)s(ordinate)0
-5576 y(systems.)g(AST)29 b(is)i(p)s(ortable)f(and)g(en)m(vironmen)m
-(t-indep)s(enden)m(t.)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 52 a FG(ii)3245 b Fz(SUN/210.26)0
-5670 y FG(Cop)m(yrigh)m(t)31 b(\(C\))g(2009)h(Science)f(&)f(T)-8
-b(ec)m(hnology)32 b(F)-8 b(acilities)34 b(Council)p eop
-end
-%%Page: 3 3
-TeXDict begin 3 2 bop 0 52 a Fz(CONTENTS)3186 b FG(iii)0
-351 y FA(Con)l(ten)l(ts)0 556 y FE(1)84 b(In)m(tro)s(duction)3015
-b(1)136 669 y FG(1.1)94 b(What)32 b(Problems)e(Do)s(es)h(AST)e(T)-8
-b(ac)m(kle?)54 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(1)136 782 y(1.2)94 b(Other)30 b(Design)i(Ob)5 b(jectiv)m(es)44
-b(.)i(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(2)136 895 y(1.3)94 b(What)32 b(Do)s(es)e(\\AST")h(Stand)f(F)-8
-b(or?)81 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(4)0 1100 y FE(2)84 b(Ov)m(erview)35 b(of)g(AST)f(Concepts)2343
-b(5)136 1213 y FG(2.1)94 b(Relationships)31 b(Bet)m(w)m(een)i(Co)s
-(ordinate)d(Systems)79 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136 1326
-y(2.2)94 b(Mappings)31 b(Av)-5 b(ailable)95 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136
-1439 y(2.3)94 b(Comp)s(ound)29 b(Mappings)c(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(6)136 1552
-y(2.4)94 b(Represen)m(ting)31 b(Co)s(ordinate)g(Systems)k(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(7)136 1665 y(2.5)94
-b(Net)m(w)m(orks)32 b(of)f(Co)s(ordinate)f(Systems)77
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(9)136 1778
-y(2.6)94 b(Input/Output)29 b(F)-8 b(acilities)85 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(11)136 1891 y(2.7)94 b(Pro)s(ducing)30 b(Graphical)h(Output)80
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(12)0
-2096 y FE(3)84 b(Ho)m(w)35 b(T)-9 b(o.)18 b(.)f(.)3059
-b(15)136 2209 y FG(3.1)94 b(.)16 b(.)f(.)h(Obtain)30
-b(and)g(Install)g(AST)91 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(15)136 2322 y(3.2)94 b(.)16 b(.)f(.)h(Structure)29
-b(an)h(AST)g(Program)92 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(15)136 2435 y(3.3)94 b(.)16 b(.)f(.)h(Build)30 b(an)g(AST)g(Program)
-38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(16)136 2548 y(3.4)94 b(.)16 b(.)f(.)h(Read)30 b(a)h(W)m(CS)f
-(Calibration)h(from)f(a)h(Dataset)55 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(16)136 2661 y(3.5)94 b(.)16 b(.)f(.)h(V)-8 b(alidate)32
-b(W)m(CS)f(Information)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(17)136 2774 y(3.6)94 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(AST)f(Data)92 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(17)136 2888 y(3.7)94 b(.)16 b(.)f(.)h(Con)m(v)m(ert)31
-b(Bet)m(w)m(een)h(Pixel)f(and)f(W)-8 b(orld)31 b(Co)s(ordinates)93
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(17)136 3001 y(3.8)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Celestial)i(Co)s(ordinate)f(System)69
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3114 y(3.9)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Sp)s(ectral)h(Co)s(ordinate)f(System)82
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3227 y(3.10)49 b(.)16 b(.)f(.)h(F)-8 b(ormat)31
-b(Co)s(ordinates)g(for)f(Displa)m(y)60 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3340 y(3.11)49 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(Co)s(ordinates)g(as)f(they)h(are)f(T)-8 b(ransformed)84
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3453 y(3.12)49 b(.)16 b(.)f(.)h(Read)30
-b(Co)s(ordinates)h(En)m(tered)f(b)m(y)g(a)h(User)69 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(20)136 3566 y(3.13)49 b(.)16
-b(.)f(.)h(Create)31 b(a)g(New)f(W)m(CS)h(Calibration)63
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(21)136 3679
-y(3.14)49 b(.)16 b(.)f(.)h(Mo)s(dify)30 b(a)h(W)m(CS)f(Calibration)36
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(23)136
-3792 y(3.15)49 b(.)16 b(.)f(.)h(W)-8 b(rite)31 b(a)g(Mo)s(di\014ed)f(W)
-m(CS)g(Calibration)h(to)h(a)e(Dataset)44 b(.)h(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(25)136 3905
-y(3.16)49 b(.)16 b(.)f(.)h(Displa)m(y)31 b(a)g(Graphical)g(Co)s
-(ordinate)g(Grid)56 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(27)136
-4018 y(3.17)49 b(.)16 b(.)f(.)h(Switc)m(h)30 b(to)h(Plot)g(a)g
-(Di\013eren)m(t)h(Celestial)g(Co)s(ordinate)f(Grid)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(29)136 4131 y(3.18)49 b(.)16 b(.)f(.)h(Giv)m(e)31 b(a)g(User)g(Con)m
-(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h(Plot)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(30)0 4336 y FE(4)84 b(An)35 b(AST)g(Ob)6 b(ject)34
-b(Primer)2457 b(33)136 4449 y FG(4.1)94 b(AST)30 b(Ob)5
-b(jects)76 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136 4562 y(4.2)94 b(Ob)5
-b(ject)31 b(Creation)g(and)f(P)m(oin)m(ters)57 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136
-4675 y(4.3)94 b(The)30 b(Ob)5 b(ject)31 b(Hierarc)m(h)m(y)79
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(34)136 4788 y(4.4)94 b(Displa)m(ying)32 b(Ob)5 b(jects)54
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(35)136 4901 y(4.5)94 b(Getting)32 b(A)m(ttribute)g(V)-8
-b(alues)25 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(36)136 5015 y(4.6)94 b(Setting)32 b(A)m(ttribute)f(V)-8
-b(alues)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(36)136 5128 y(4.7)94 b(T)-8 b(esting,)32 b(Clearing)f(and)f
-(Defaulting)h(A)m(ttributes)57 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(37)136
-5241 y(4.8)94 b(T)-8 b(ransforming)30 b(Co)s(ordinates)52
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(38)136 5354 y(4.9)94 b(Managing)32 b(Ob)5 b(ject)31
-b(P)m(oin)m(ters)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(40)136 5467 y(4.10)49 b(AST)30 b(P)m(oin)m(ter)i(Con)m
-(texts|Begin)g(and)e(End)80 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(40)136 5580 y(4.11)49 b(Exp)s(orting,)31 b(Imp)s(orting)e(and)h
-(Exempting)g(AST)g(P)m(oin)m(ters)87 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(41)136 5693
-y(4.12)49 b(Cop)m(ying)31 b(Ob)5 b(jects)73 b(.)46 b(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(41)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 0 52 a FG(iv)3190 b Fz(CONTENTS)136
-351 y FG(4.13)49 b(Error)30 b(Detection)43 b(.)i(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(42)0 556 y FE(5)84 b(In)m(ter-Relating)35 b(Co)s(ordinate)f(Systems)h
-(\(Mappings\))1377 b(45)136 669 y FG(5.1)94 b(The)30
-b(Mapping)h(Class)h(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)106 b(45)136 782 y(5.2)94 b(The)30
-b(Mapping)h(Mo)s(del)64 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(46)136 895 y(5.3)94 b(Input)29
-b(and)h(Output)f(Co)s(ordinate)i(Num)m(b)s(ers)76 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(46)136 1008 y(5.4)94 b(F)-8
-b(orw)m(ard)31 b(and)f(In)m(v)m(erse)h(T)-8 b(ransformations)24
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(46)136 1121 y(5.5)94
-b(In)m(v)m(erting)32 b(Mappings)g(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(47)136 1234
-y(5.6)94 b(Finding)31 b(the)f(Rate)i(of)e(Change)g(of)h(a)g(Mapping)f
-(Output)83 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(47)136 1347 y(5.7)94 b(Rep)s(orting)31
-b(Co)s(ordinate)f(T)-8 b(ransformations)38 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(47)136 1461 y(5.8)94 b(Handling)31 b(Missing)g(\(Bad\))g(Co)s
-(ordinate)g(V)-8 b(alues)84 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(48)136
-1574 y(5.9)94 b(Example|the)31 b(UnitMap)68 b(.)46 b(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(48)136 1687
-y(5.10)49 b(Example|the)31 b(P)m(ermMap)36 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(49)0 1891 y FE(6)84
-b(Comp)s(ound)36 b(Mappings)f(\(CmpMaps\))1968 b(53)136
-2004 y FG(6.1)94 b(Com)m(bining)31 b(Mappings)f(in)g(Series)90
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(53)136
-2118 y(6.2)94 b(Com)m(bining)31 b(Mappings)f(in)g(P)m(arallel)89
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(54)136
-2231 y(6.3)94 b(The)30 b(Comp)s(onen)m(t)g(Mappings)e(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(54)136 2344 y(6.4)94 b(Creating)31 b(More)h(Complex)e(Mappings)67
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(55)136 2457
-y(6.5)94 b(Example|T)-8 b(ransforming)30 b(Bet)m(w)m(een)j(Tw)m(o)d
-(Calibrated)h(Images)73 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(55)136 2570 y(6.6)94 b(Ov)m(er-Complex)31
-b(Comp)s(ound)d(Mappings)58 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(56)136 2683 y(6.7)94 b(Simplifying)30 b(Comp)s(ound)e(Mappings)41
-b(.)k(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(56)0 2888
-y FE(7)84 b(Represen)m(ting)36 b(Co)s(ordinate)e(Systems)i(\(F)-9
-b(rames\))1543 b(59)136 3001 y FG(7.1)94 b(The)30 b(F)-8
-b(rame)32 b(Mo)s(del)24 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(59)136 3114 y(7.2)94
-b(Creating)31 b(a)g(F)-8 b(rame)40 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(59)136
-3227 y(7.3)94 b(Using)31 b(a)g(F)-8 b(rame)31 b(as)g(a)f(Mapping)84
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(60)136
-3340 y(7.4)94 b(F)-8 b(rame)32 b(Axis)e(A)m(ttributes)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(60)136 3453 y(7.5)94 b(F)-8 b(rame)32 b(A)m(ttributes)49
-b(.)d(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(61)136 3566 y(7.6)94 b(F)-8 b(ormatting)33
-b(Axis)d(V)-8 b(alues)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)106 b(63)136 3679 y(7.7)94 b(Normalising)32
-b(F)-8 b(rame)31 b(Co)s(ordinates)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(64)136 3792 y(7.8)94 b(Reading)31 b(F)-8
-b(ormatted)32 b(Axis)f(V)-8 b(alues)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(64)136 3905 y(7.9)94 b(P)m(erm)m(uting)31
-b(F)-8 b(rame)32 b(Axes)g(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(68)136 4018 y(7.10)49 b(Selecting)32
-b(F)-8 b(rame)32 b(Axes)24 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(68)136 4131 y(7.11)49 b(Calculating)32
-b(Distances,)g(Angles)f(and)f(O\013sets)65 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(69)136 4244 y(7.12)49 b(The)30 b(Domain)h(A)m(ttribute)48
-b(.)e(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(71)136 4358 y(7.13)49 b(Con)m(v)m(en)m(tions)32 b(for)e(Domain)h
-(Names)42 b(.)k(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(73)136 4471 y(7.14)49 b(The)30 b(Unit)h(A)m(ttribute)39
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(74)345 4584 y(7.14.1)61 b(The)30 b(Syn)m(tax)h(for)f(Unit)h
-(Strings)i(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(75)345
-4697 y(7.14.2)61 b(Side-e\013ects)32 b(of)f(Changing)f(the)g(Unit)h
-(attribute)86 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)106 b(76)0 4901 y FE(8)84 b(Celestial)34
-b(Co)s(ordinate)h(Systems)g(\(SkyF)-9 b(rames\))1584
-b(79)136 5015 y FG(8.1)94 b(The)30 b(SkyF)-8 b(rame)31
-b(Mo)s(del)90 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(79)136 5128 y(8.2)94 b(Creating)31 b(a)g(SkyF)-8
-b(rame)35 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(79)136 5241 y(8.3)94 b(Sp)s(ecifying)30
-b(a)h(P)m(articular)h(Celestial)g(Co)s(ordinate)e(System)83
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(80)136 5354 y(8.4)94 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g
-(Celestial)i(Co)s(ordinate)f(Systems)k(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(80)136 5467 y(8.5)94
-b(Using)31 b(Default)h(SkyF)-8 b(rame)30 b(A)m(ttributes)g(.)46
-b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(81)136 5580 y(8.6)94
-b(F)-8 b(ormatting)33 b(Celestial)f(Co)s(ordinates)51
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(82)136
-5693 y(8.7)94 b(Reading)31 b(F)-8 b(ormatted)32 b(Celestial)g(Co)s
-(ordinates)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(84)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop 0 52 a Fz(CONTENTS)3214 b FG(v)136
-351 y(8.8)94 b(Represen)m(ting)31 b(O\013sets)g(from)f(a)h(Sp)s
-(eci\014ed)e(Sky)h(P)m(osition)65 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(87)0 559 y FE(9)84
-b(Sp)s(ectral)35 b(Co)s(ordinate)g(Systems)g(\(Sp)s(ecF)-9
-b(rames\))1553 b(89)136 673 y FG(9.1)94 b(The)30 b(Sp)s(ecF)-8
-b(rame)31 b(Mo)s(del)52 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(89)136 787 y(9.2)94 b(Creating)31
-b(a)g(Sp)s(ecF)-8 b(rame)67 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(89)136 900 y(9.3)94 b(Sp)s(ecifying)30
-b(a)h(P)m(articular)h(Sp)s(ectral)e(Co)s(ordinate)g(System)c(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(89)136 1014 y(9.4)94 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Sp)s
-(ectral)g(Co)s(ordinate)h(Systems)48 b(.)e(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(90)136 1128 y(9.5)94
-b(Using)31 b(Default)h(Sp)s(ecF)-8 b(rame)30 b(A)m(ttributes)63
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(91)136 1242 y(9.6)94
-b(Creating)31 b(Sp)s(ectral)g(Cub)s(es)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(92)136 1355 y(9.7)94
-b(Handling)31 b(Dual-Sideband)f(Sp)s(ectra)67 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(93)0 1563 y
-FE(10)32 b(Time)j(Systems)g(\(TimeF)-9 b(rames\))2215
-b(95)136 1677 y FG(10.1)49 b(The)30 b(TimeF)-8 b(rame)32
-b(Mo)s(del)d(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(95)136 1791 y(10.2)49 b(Creating)31 b(a)g(TimeF)-8
-b(rame)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(95)136 1904 y(10.3)49 b(Sp)s(ecifying)30 b(a)h(P)m(articular)h
-(Time)e(System)51 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(95)136 2018 y(10.4)49 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Time)
-g(Co)s(ordinate)h(Systems)26 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(96)0 2226 y FE(11)32
-b(Comp)s(ound)k(F)-9 b(rames)35 b(\(CmpF)-9 b(rames\))2009
-b(97)136 2340 y FG(11.1)49 b(Creating)31 b(a)g(CmpF)-8
-b(rame)59 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(97)136 2453 y(11.2)49 b(The)30 b(A)m(ttributes)h(of)g(a)g
-(CmpF)-8 b(rame)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(97)0 2661 y FE(12)32 b(An)j(In)m(tro)s(duction)h(to)e(Co)s(ordinate)h
-(System)g(Con)m(v)m(ersions)1170 b(99)136 2775 y FG(12.1)49
-b(Con)m(v)m(erting)32 b(b)s(et)m(w)m(een)f(Celestial)h(Co)s(ordinate)f
-(Systems)d(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)106 b(99)136 2889 y(12.2)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Sp)s(ectral)f(Co)s(ordinate)h(Systems)41
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(101)136 3003 y(12.3)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Time)f(Co)s(ordinate)h(Systems)89
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(103)136 3116 y(12.4)49 b(Handling)31 b(SkyF)-8
-b(rame)31 b(Axis)f(P)m(erm)m(utations)h(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(103)136 3230 y(12.5)49 b(Con)m(v)m(erting)32 b(Bet)m(w)m(een)g(F)-8
-b(rames)49 b(.)c(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(104)136 3344 y(12.6)49 b(The)30 b(Choice)h(of)g(Alignmen)m(t)g
-(System)56 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(104)0 3552 y FE(13)32 b(Co)s(ordinate)j(System)g(Net)m(w)m(orks)g
-(\(F)-9 b(rameSets\))1553 b(107)136 3665 y FG(13.1)49
-b(The)30 b(F)-8 b(rameSet)32 b(Mo)s(del)40 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(107)136
-3779 y(13.2)49 b(Creating)31 b(a)g(F)-8 b(rameSet)56
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)136 3893 y(13.3)49 b(Adding)30 b(New)h(F)-8 b(rames)31
-b(to)g(a)g(F)-8 b(rameSet)43 b(.)j(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)136 4007 y(13.4)49 b(The)30 b(Base)i(and)e(Curren)m(t)f(F)-8
-b(rames)27 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(109)136 4120 y(13.5)49 b(Referring)31 b(to)g(the)f(Base)i(and)e
-(Curren)m(t)f(F)-8 b(rames)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(110)136
-4234 y(13.6)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)d
-(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(111)136
-4348 y(13.7)49 b(Extracting)32 b(a)f(Mapping)f(from)g(a)h(F)-8
-b(rameSet)81 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(111)136 4462
-y(13.8)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(F)-8
-b(rame)60 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(112)136 4575 y(13.9)49 b(Extracting)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)42 b(.)k(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(113)136 4689 y(13.10)t(Remo)m(ving)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)70 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(113)0 4897 y FE(14)32 b(Higher)j(Lev)m(el)g(Op)s(erations)g(on)g(F)-9
-b(rameSets)1708 b(115)136 5011 y FG(14.1)49 b(Creating)31
-b(F)-8 b(rameSets)32 b(with)e(AST)p Fy(_)p FG(CONVER)-8
-b(T)83 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)60 b(115)136 5124 y(14.2)49 b(Con)m(v)m(erting)
-32 b(b)s(et)m(w)m(een)f(F)-8 b(rameSet)31 b(Co)s(ordinate)g(Systems)63
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(116)136 5238 y(14.3)49 b(Example|Registering)32
-b(Tw)m(o)f(Images)50 b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(118)136 5352 y(14.4)49 b(Re-De\014ning)31 b(a)g(F)-8
-b(rameSet)32 b(Co)s(ordinate)e(System)59 b(.)46 b(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(120)136 5466 y(14.5)49 b(Example|Binning)31 b(an)f(Image)87
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(121)136
-5579 y(14.6)49 b(Main)m(taining)33 b(the)d(In)m(tegrit)m(y)i(of)f(F)-8
-b(rameSets)32 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(122)136
-5693 y(14.7)49 b(Merging)32 b(F)-8 b(rameSets)42 b(.)k(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(124)p
-eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop 0 52 a FG(vi)3190 b Fz(CONTENTS)0
-351 y FE(15)32 b(Sa)m(ving)k(and)f(Restoring)g(Ob)6 b(jects)35
-b(\(Channels\))1585 b(127)136 465 y FG(15.1)49 b(The)30
-b(Channel)g(Mo)s(del)87 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)60 b(127)136 578 y(15.2)49 b(Creating)31
-b(a)g(Channel)f(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)60 b(127)136 692 y(15.3)49 b(W)-8 b(riting)32
-b(Ob)5 b(jects)30 b(to)i(a)e(Channel)47 b(.)f(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)60 b(128)136 805 y(15.4)49 b(Reading)31
-b(Ob)5 b(jects)31 b(from)f(a)g(Channel)64 b(.)45 b(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(128)136 918 y(15.5)49 b(Sa)m(ving)31
-b(and)f(Restoring)h(Multiple)g(Ob)5 b(jects)34 b(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)60 b(129)136 1032 y(15.6)49 b(V)-8
-b(alidating)33 b(Input)77 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(129)136 1145 y(15.7)49
-b(Storing)31 b(an)f(ID)h(String)f(with)g(an)g(Ob)5 b(ject)62
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(129)136 1259 y(15.8)49
-b(The)30 b(T)-8 b(extual)32 b(Output)d(F)-8 b(ormat)31
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(130)136 1372 y(15.9)49 b(Con)m(trolling)32 b(the)f(Amoun)m(t)f(of)h
-(Output)59 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(132)136
-1485 y(15.10)t(Con)m(trolling)32 b(Commen)m(ting)k(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(134)136 1599 y(15.11)t(Editing)31 b(T)-8 b(extual)31
-b(Output)69 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(134)136 1712 y(15.12)t(Mixing)32 b(Ob)5 b(jects)30
-b(with)g(other)h(T)-8 b(ext)33 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(135)136 1826 y(15.13)t(Reading)31 b(Ob)5 b(jects)31
-b(from)f(Files)71 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(135)136 1939 y(15.14)t(W)-8 b(riting)32 b(Ob)5 b(jects)30
-b(to)i(Files)54 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(137)136 2053 y(15.15)t(Reading)31 b(and)f(W)-8
-b(riting)32 b(Ob)5 b(jects)30 b(to)h(other)g(Places)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(137)0 2259 y FE(16)32 b(Storing)k(AST)e(Ob)6
-b(jects)35 b(in)g(FITS)f(Headers)h(\(FitsChans\))1146
-b(139)136 2372 y FG(16.1)49 b(The)30 b(Nativ)m(e)j(FITS)c(Enco)s(ding)
-74 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(139)136 2486 y(16.2)49 b(The)30 b(FitsChan)h(Mo)s(del)47
-b(.)e(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(139)136 2599 y(16.3)49 b(Creating)31 b(a)g(FitsChan)62
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(140)136 2713 y(16.4)49 b(Addressing)30 b(Cards)f(in)h(a)h(FitsChan)93
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(141)136
-2826 y(16.5)49 b(W)-8 b(riting)32 b(Nativ)m(e)g(Ob)5
-b(jects)31 b(to)g(a)g(FitsChan)71 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(142)136 2939 y(16.6)49 b(Extracting)32 b(Individual)d(Cards)h(from)g
-(a)g(FitsChan)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(142)136 3053 y(16.7)49
-b(The)30 b(Nativ)m(e)j(FitsChan)d(Output)f(F)-8 b(ormat)29
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(143)136 3166 y(16.8)49
-b(Adding)30 b(Individual)g(Cards)f(to)i(a)g(FitsChan)83
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(144)136 3280 y(16.9)49 b(Adding)30
-b(Concatenated)i(Cards)d(to)i(a)g(FitsChan)84 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)60 b(145)136 3393 y(16.10)t(Reading)31 b(Nativ)m(e)i(Ob)5
-b(jects)30 b(F)-8 b(rom)31 b(a)g(FitsChan)63 b(.)46 b(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(145)136 3507 y(16.11)t(Sa)m(ving)31 b(and)f(Restoring)h(Multiple)g
-(Ob)5 b(jects)31 b(in)f(a)h(FitsChan)89 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(145)136 3620 y(16.12)t(Mixing)32
-b(Nativ)m(e)g(Ob)5 b(jects)30 b(with)g(Other)g(FITS)g(Cards)62
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(146)136 3733 y(16.13)t(Finding)31 b(and)e(Changing)h
-(Cards)g(in)g(a)h(FitsChan)62 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(146)136
-3847 y(16.14)t(Source)31 b(and)e(Sink)h(Routines)h(for)f(FitsChans)58
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(147)0 4053 y FE(17)32 b(Using)k(F)-9
-b(oreign)36 b(FITS)e(Enco)s(dings)2079 b(149)136 4167
-y FG(17.1)49 b(The)30 b(F)-8 b(oreign)32 b(FITS)e(Enco)s(dings)73
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(149)136
-4280 y(17.2)49 b(Limitations)32 b(of)f(F)-8 b(oreign)31
-b(Enco)s(dings)51 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(150)136 4393 y(17.3)49 b(Iden)m(tifying)31 b(F)-8 b(oreign)32
-b(Enco)s(dings)d(on)i(Input)86 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(151)136 4507 y(17.4)49 b(Reading)31 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)67
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(153)136 4620 y(17.5)49 b(Remo)m(ving)32 b(W)m(CS)e(Information)h
-(from)e(FITS)h(Headers|the)h(Destructiv)m(e)h(Read)62
-b(.)46 b(.)g(.)f(.)h(.)60 b(154)136 4734 y(17.6)49 b(Propagating)32
-b(W)m(CS)e(Information)h(through)e(Data)j(Pro)s(cessing)f(Steps)90
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(155)136
-4847 y(17.7)49 b(W)-8 b(riting)32 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)50 b(.)c(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(156)0
-5053 y FE(18)32 b(Storing)k(AST)e(Ob)6 b(jects)35 b(as)g(XML)g
-(\(XmlChan\))1565 b(159)136 5167 y FG(18.1)49 b(Reading)31
-b(IV)m(O)m(A)g(Space-Time-Co)s(ordinates)h(XML)e(\(STC-X\))h
-(Descriptions)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)60 b(160)0
-5373 y FE(19)32 b(Reading)k(and)f(writing)f(STC-S)g(descriptions)i
-(\(StcsChans\))1047 b(163)0 5580 y(20)32 b(Creating)j(Y)-9
-b(our)35 b(Own)f(Priv)-6 b(ate)35 b(Mappings)h(\(In)m(traMaps\))1139
-b(165)136 5693 y FG(20.1)49 b(The)30 b(Need)h(for)f(Extensibilit)m(y)j
-(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(165)p eop end
-%%Page: 7 7
-TeXDict begin 7 6 bop 0 52 a Fz(CONTENTS)3163 b FG(vii)136
-351 y(20.2)49 b(The)30 b(In)m(traMap)h(Mo)s(del)39 b(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(165)136 466 y(20.3)49 b(Limitations)32 b(of)f(In)m(traMaps)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(165)136 580 y(20.4)49 b(W)-8 b(riting)32 b(a)f(T)-8
-b(ransformation)30 b(Routine)79 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(166)136 694 y(20.5)49 b(Registering)32 b(a)f(T)-8 b(ransformation)30
-b(Routine)78 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(167)136
-808 y(20.6)49 b(Creating)31 b(an)g(In)m(traMap)73 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(168)136 923 y(20.7)49 b(Restricted)32 b(Implemen)m(tations)f(of)g(T)
--8 b(ransformation)30 b(Routines)69 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(169)136 1037 y(20.8)49 b(V)-8
-b(ariable)32 b(Num)m(b)s(ers)d(of)i(Co)s(ordinates)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(170)136 1151
-y(20.9)49 b(Adapting)31 b(a)g(T)-8 b(ransformation)30
-b(Routine)h(to)g(Individual)e(In)m(traMaps)84 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(171)136
-1265 y(20.10)t(Simplifying)30 b(In)m(traMaps)58 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(171)136 1380 y(20.11)t(W)-8 b(riting)32 b(and)e(Reading)h(In)m
-(traMaps)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(173)136 1494 y(20.12)t(Managing)32 b(T)-8 b(ransformation)31
-b(Routines)f(in)g(Libraries)38 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(173)0 1705
-y FE(21)32 b(Pro)s(ducing)37 b(Graphical)e(Output)f(\(Plots\))1813
-b(175)136 1819 y FG(21.1)49 b(The)30 b(Plot)i(Mo)s(del)j(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(175)136 1933 y(21.2)49 b(Plotting)32 b(Sym)m(b)s(ols)51
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(175)136 2047 y(21.3)49 b(Plotting)32 b(Geo)s(desic)g(Curv)m
-(es)80 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(176)136 2162 y(21.4)49 b(Plotting)32 b(Curv)m(es)e(P)m(arallel)i(to)f
-(Axes)81 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(177)136 2276 y(21.5)49 b(Plotting)32 b(Generalized)g(Curv)m(es)38
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(177)136 2390 y(21.6)49 b(Clipping)d(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(177)136 2505 y(21.7)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(Mapping)24
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(178)136 2619 y(21.8)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(F)-8
-b(rame)56 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(178)136 2733 y(21.9)49 b(Regions)32 b(of)e(V)-8
-b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)67 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(179)136 2847 y(21.10)t(Plotting)32 b(Borders)75
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(179)136 2962 y(21.11)t(Plotting)32 b(T)-8
-b(ext)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(180)136 3076 y(21.12)t(Plotting)32
-b(a)f(Grid)54 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(180)136 3190 y(21.13)t(Con)m(trolling)32
-b(the)f(App)s(earance)f(of)g(Sub-strings)43 b(.)j(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(180)136 3304 y(21.14)t(Pro)s(ducing)30 b(Logarithmic)h(Axes)91
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(181)136
-3419 y(21.15)t(Cho)s(osing)30 b(a)h(Graphics)f(P)m(ac)m(k)-5
-b(age)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(182)0 3629 y FE(22)32 b(Compiling)k(and)e(Linking)i(Soft)m(w)m(are)e
-(that)g(Uses)i(AST)1290 b(183)136 3744 y FG(22.1)49 b(Accessing)32
-b(AST)e(Include)f(Files)h(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(183)136 3858 y(22.2)49 b(Linking)31 b(with)f(AST)f(F)-8
-b(acilities)62 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(183)136 3972 y(22.3)49 b(Building)31 b(AD)m(AM)h(Applications)f(that)
-g(Use)g(AST)e(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(184)0 4183 y FE(A)d(The)35
-b(AST)g(Class)f(Hierarc)m(h)m(y)2307 b(185)0 4393 y(B)62
-b(AST)35 b(Routine)g(Descriptions)2277 b(187)0 4604 y(C)60
-b(AST)35 b(A)m(ttribute)f(Descriptions)2207 b(381)0 4815
-y(D)56 b(AST)35 b(Class)g(Descriptions)2403 b(477)0 5025
-y(E)67 b(UNIX)35 b(Command)g(Descriptions)2101 b(519)0
-5236 y(F)70 b(FITS-W)m(CS)34 b(Co)m(v)m(erage)2523 b(523)136
-5350 y FG(F.1)80 b(P)m(ap)s(er)31 b(I)f(-)g(General)i(Linear)e(Co)s
-(ordinates)c(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(523)345
-5464 y(F.1.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(523)345 5579 y(F.1.2)92 b(Use)31
-b(and)f(Choice)h(of)f(CTYPE)p Fx(i)39 b FG(k)m(eyw)m(ords)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(523)345 5693 y(F.1.3)92 b(Choice)31
-b(of)g(Reference)g(P)m(oin)m(t)57 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(525)p eop end
-%%Page: 8 8
-TeXDict begin 8 7 bop 0 52 a FG(viii)3140 b Fz(CONTENTS)345
-351 y FG(F.1.4)92 b(Choice)31 b(of)g(Axis)f(Ordering)49
-b(.)d(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(525)345
-465 y(F.1.5)92 b(Alternate)32 b(Axis)f(Descriptions)50
-b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(525)136 579 y(F.2)80
-b(P)m(ap)s(er)31 b(I)s(I)e(-)i(Celestial)h(Co)s(ordinates)h(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(526)345 693
-y(F.2.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(526)345 807 y(F.2.2)92 b(Choice)31
-b(of)g(LONPOLE/LA)-8 b(TPOLE)36 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(526)345 922 y(F.2.3)92 b(User)31 b(De\014ned)f(Fiducial)h(P)m(oin)m
-(ts)82 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(528)345 1036
-y(F.2.4)92 b(Common)30 b(Non-Standard)g(F)-8 b(eatures)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(528)136 1150 y(F.3)80 b(P)m(ap)s(er)31
-b(I)s(I)s(I)d(-)j(Sp)s(ectral)f(Co)s(ordinates)82 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(529)345 1264
-y(F.3.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(529)345 1378 y(F.3.2)92 b(Common)30
-b(Non-Standard)g(F)-8 b(eatures)54 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(529)136 1492 y(F.4)80 b(P)m(ap)s(er)31 b(IV)f(-)h(Co)s(ordinate)f
-(Distortions)78 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(531)345 1606 y(F.4.1)92 b(The)30 b(\\-SIP")h(distortion)g(co)s(de)76
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(531)0 1815 y
-FE(G)54 b(Changes)35 b(and)g(New)f(F)-9 b(eatures)2239
-b(532)136 1929 y FG(G.1)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.1)
-47 b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(532)136 2043 y(G.2)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(533)136 2157 y(G.3)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(534)136 2272 y(G.4)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(535)136 2386 y(G.5)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(536)136 2500 y(G.6)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(537)136 2614 y(G.7)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(539)136 2728 y(G.8)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-2)
-42 b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(540)136
-2842 y(G.9)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-3)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(540)136
-2956 y(G.10)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-4)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(541)136
-3070 y(G.11)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-5)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(541)136
-3184 y(G.12)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-7)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(541)136
-3298 y(G.13)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-8)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(542)136
-3412 y(G.14)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-13)68
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(542)136
-3526 y(G.15)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V2.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(543)136 3640 y(G.16)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(545)136 3754 y(G.17)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(547)136 3868 y(G.18)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(548)136 3982 y(G.19)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(549)136 4096 y(G.20)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(550)136 4210 y(G.21)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(551)136 4324 y(G.22)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(552)136 4438 y(G.23)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(552)136 4553 y(G.24)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(552)136 4667 y(G.25)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(553)136 4781 y(G.26)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(553)136 4895 y(G.27)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(554)136 5009 y(G.28)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(555)136 5123 y(G.29)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(556)136 5237 y(G.30)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 5351 y(G.31)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 5465 y(G.32)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 5579 y(G.33)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(558)136 5693 y(G.34)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(559)p eop end
-%%Page: 9 9
-TeXDict begin 9 8 bop 0 52 a Fz(SUN/210.26)3224 b FG(ix)136
-351 y(G.35)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3-1)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(560)p
-eop end
-%%Page: 10 10
-TeXDict begin 10 9 bop 0 52 a FG(x)3247 b Fz(SUN/210.26)p
-eop end
-%%Page: 1 11
-TeXDict begin 1 10 bop 3734 52 a FG(1)p 945 709 1890
-12 v 1755 898 a FA(AST)1202 1047 y(A)45 b(Library)g(for)g(Handling)1097
-1196 y(W)-11 b(orld)45 b(Co)t(ordinate)h(Systems)1486
-1346 y(in)f(Astronom)l(y)1753 1592 y(V5.3)p 945 1783
-V 994 2176 a Fx(This)33 b(is)g(the)g(F)-7 b(ortr)i(an)35
-b(version)e(of)g(this)g(do)-5 b(cument.)1101 2289 y(F)e(or)34
-b(the)f(C)g(version,)g(ple)-5 b(ase)33 b(se)-5 b(e)33
-b(SUN/211.)0 2865 y FA(1)135 b(In)l(tro)t(duction)0 3112
-y FG(W)-8 b(elcome)30 b(to)d(the)h(AST)e(library)-8 b(.)40
-b(If)26 b(y)m(ou)i(are)f(writing)g(soft)m(w)m(are)i(for)e(astronom)m(y)
-h(and)e(need)h(to)h(use)f(celestial)0 3225 y(co)s(ordinates)k(\()p
-Fx(e.g.)g FG(RA)f(and)g(Dec\),)i(sp)s(ectral)f(co)s(ordinates)h(\()p
-Fx(e.g.)e FG(w)m(a)m(v)m(elength,)j(frequency)-8 b(,)31
-b Fx(etc.)p FG(\),)g(or)f(other)0 3338 y(co)s(ordinate)i(system)f
-(information,)g(then)g(this)g(library)f(should)g(b)s(e)h(of)g(in)m
-(terest.)43 b(It)31 b(pro)m(vides)g(solutions)h(for)0
-3450 y(most)i(of)f(the)h(problems)e(y)m(ou)i(will)g(meet)g(and)e(allo)m
-(ws)j(y)m(ou)f(to)g(write)f(robust)g(and)f(\015exible)i(soft)m(w)m
-(are.)51 b(It)33 b(is)0 3563 y(able)e(to)g(read)f(and)g(write)h(W)m(CS)
-f(information)h(in)f(a)h(v)-5 b(ariet)m(y)31 b(of)g(formats,)g
-(including)f(FITS-W)m(CS.)0 3848 y Fw(1.1)112 b(What)38
-b(Problems)g(Do)s(es)f(AST)h(T)-9 b(ac)m(kle?)0 4064
-y FG(Here)43 b(are)h(some)f(of)g(the)g(main)g(problems)f(y)m(ou)h(ma)m
-(y)h(face)g(when)e(handling)g(w)m(orld)h(co)s(ordinate)g(system)0
-4177 y(\(W)m(CS\))31 b(information)g(and)f(the)g(solutions)h(that)g
-(AST)f(pro)m(vides:)0 4416 y FE(1.)47 b(The)34 b(V)-9
-b(ariet)m(y)35 b(of)g(Co)s(ordinate)g(Systems)227 4529
-y FG(Astronomers)29 b(use)g(a)g(wide)g(range)g(of)g(di\013ering)g(co)s
-(ordinate)h(systems)f(to)h(describ)s(e)e(p)s(ositions)h(within)227
-4642 y(a)24 b(v)-5 b(ariet)m(y)25 b(of)e(ph)m(ysical)h(domains.)39
-b(F)-8 b(or)24 b(instance,)h(there)f(are)g(a)g(large)g(n)m(um)m(b)s(er)
-e(of)i(celestial)i(co)s(ordinate)227 4755 y(systems)35
-b(in)g(use)f(within)h(astronom)m(y)h(to)f(describ)s(e)f(p)s(ositions)h
-(on)g(the)g(sky)-8 b(.)55 b(Understanding)34 b(these,)227
-4868 y(and)24 b(kno)m(wing)h(ho)m(w)f(to)h(con)m(v)m(ert)h(co)s
-(ordinates)f(b)s(et)m(w)m(een)g(them,)h(can)f(require)f(considerable)h
-(exp)s(ertise.)227 4981 y(It)34 b(can)g(also)g(b)s(e)f(di\016cult)h(to)
-g(decide)g(whic)m(h)f(of)h(them)f(y)m(our)h(soft)m(w)m(are)h(should)e
-(supp)s(ort.)48 b(The)33 b(same)227 5094 y(applies)25
-b(to)h(co)s(ordinate)g(systems)f(describing)f(other)h(domains,)h(suc)m
-(h)f(as)g(p)s(osition)g(within)g(an)f(electro-)227 5207
-y(magnetic)32 b(sp)s(ectrum.)227 5354 y FE(Solution.)69
-b FG(AST)39 b(has)h(built-in)f(kno)m(wledge)i(of)f(man)m(y)f(co)s
-(ordinate)i(systems)f(and)f(allo)m(ws)i(y)m(ou)f(to)227
-5467 y(con)m(v)m(ert)30 b(freely)e(b)s(et)m(w)m(een)h(them)f(without)g
-(sp)s(ecialist)h(kno)m(wledge.)41 b(This)28 b(a)m(v)m(oids)h(the)f
-(need)g(to)h(em)m(b)s(ed)227 5580 y(details)43 b(of)e(sp)s(eci\014c)g
-(co)s(ordinate)h(systems)f(in)g(y)m(our)g(soft)m(w)m(are.)75
-b(Y)-8 b(ou)42 b(also)g(b)s(ene\014t)f(automatically)227
-5693 y(when)30 b(new)g(co)s(ordinate)h(systems)f(are)h(added)f(to)h
-(AST.)p eop end
-%%Page: 2 12
-TeXDict begin 2 11 bop 0 52 a FG(2)2856 b Fz(1)91 b(INTR)m(ODUCTION)0
-351 y FE(2.)47 b(Storing)35 b(and)g(Retrieving)g(W)m(CS)g(Information)
-227 464 y FG(Storing)44 b(co)s(ordinate)h(system)f(information)g(in)f
-(astronomical)j(datasets)f(and)e(retrieving)h(it)g(later)227
-577 y(can)35 b(presen)m(t)g(a)g(considerable)g(c)m(hallenge.)56
-b(T)m(ypically)-8 b(,)37 b(it)f(requires)e(kno)m(wledge)h(of)g(rather)g
-(complex)227 690 y(con)m(v)m(en)m(tions)f(\()p Fx(e.g.)d
-FG(FITS\))g(whic)m(h)h(are)g(lo)m(w-lev)m(el,)j(often)d(mis-in)m
-(terpreted)g(and)f(ma)m(y)h(b)s(e)f(sub)5 b(ject)32 b(to)227
-803 y(c)m(hange.)66 b(Exc)m(hanging)39 b(information)g(with)f(other)g
-(soft)m(w)m(are)i(systems)e(is)h(further)e(complicated)j(b)m(y)227
-916 y(the)31 b(n)m(um)m(b)s(er)e(of)h(di\013eren)m(t)h(con)m(v)m(en)m
-(tions)i(in)d(use.)227 1085 y FE(Solution.)48 b FG(AST)32
-b(com)m(bines)h(a)f(unifying)g(high-lev)m(el)i(description)f(of)g(W)m
-(CS)f(information)h(with)f(the)227 1198 y(abilit)m(y)k(to)f(sa)m(v)m(e)
-i(and)c(restore)j(this)e(using)g(a)h(v)-5 b(ariet)m(y)36
-b(of)f(formats.)53 b(Details)36 b(of)f(the)g(formats,)h(whic)m(h)227
-1310 y(include)29 b(FITS,)f(are)h(handled)e(in)m(ternally)j(b)m(y)e
-(AST.)g(This)g(frees)h(y)m(ou)g(from)f(the)h(need)f(to)h(understand)227
-1423 y(them)k(or)g(em)m(b)s(ed)g(the)g(details)h(in)f(y)m(our)g(soft)m
-(w)m(are.)50 b(Again,)35 b(y)m(ou)e(b)s(ene\014t)f(automatically)k
-(when)c(new)227 1536 y(formats)f(are)g(added)e(to)i(AST.)0
-1761 y FE(3.)47 b(Generating)35 b(Graphical)g(Output)227
-1874 y FG(Pro)s(ducing)40 b(graphical)h(displa)m(ys)g(in)m(v)m(olving)h
-(curvilinear)e(co)s(ordinate)i(systems,)h(suc)m(h)d(as)h(celestial)227
-1987 y(co)s(ordinate)i(grids,)j(can)c(b)s(e)g(complicated.)78
-b(P)m(articular)44 b(di\016culties)f(arise)f(when)g(handling)f(large)
-227 2100 y(areas)35 b(of)e(sky)-8 b(,)35 b(the)f(p)s(olar)f(regions)h
-(and)f(discon)m(tin)m(uous)h(\()p Fx(e.g.)f FG(segmen)m(ted\))i(sky)e
-(pro)5 b(jections.)51 b(Ev)m(en)227 2213 y(just)30 b(n)m(um)m(b)s
-(ering)f(and)h(lab)s(elling)h(curvilinear)g(axes)g(is)f(rarely)h
-(straigh)m(tforw)m(ard.)227 2382 y FE(Solution.)73 b
-FG(AST)40 b(pro)m(vides)h(plotting)h(facilities)h(esp)s(ecially)f
-(designed)f(for)g(use)g(with)f(curvilinear)227 2495 y(co)s(ordinate)35
-b(systems.)49 b(These)33 b(include)h(the)f(plotting)i(of)e(axes)h(and)f
-(complete)i(lab)s(elled)f(co)s(ordinate)227 2607 y(grids.)65
-b(A)39 b(large)h(n)m(um)m(b)s(er)d(of)i(options)g(are)g(pro)m(vided)f
-(for)h(tailoring)h(the)e(output)h(to)g(y)m(our)g(sp)s(eci\014c)227
-2720 y(needs.)0 2945 y FE(4.)47 b(Aligning)35 b(Data)g(from)g
-(Di\013eren)m(t)g(Sources)227 3058 y FG(One)h(of)g(the)h(main)f(uses)f
-(of)i(co)s(ordinate)g(systems)f(is)g(to)h(facilitate)i(the)d(in)m
-(ter-comparison)h(of)g(data)227 3171 y(from)29 b(di\013eren)m(t)g
-(sources.)40 b(A)29 b(t)m(ypical)h(use)f(migh)m(t)g(b)s(e)g(to)g(plot)g
-(\(sa)m(y\))i(radio)e(con)m(tours)g(o)m(v)m(er)h(an)f(optical)227
-3284 y(image.)61 b(In)37 b(practice,)j(ho)m(w)m(ev)m(er,)g(di\013eren)m
-(t)d(celestial)i(co)s(ordinate)f(systems)f(ma)m(y)g(ha)m(v)m(e)h(b)s
-(een)e(used,)227 3397 y(making)31 b(accurate)h(alignmen)m(t)g(far)e
-(from)g(simple.)227 3566 y FE(Solution)h FG(AST)f(pro)m(vides)h(a)g
-(one-step)g(metho)s(d)g(of)f(aligning)i(datasets,)g(searc)m(hing)g(for)
-e(all)i(p)s(ossible)227 3679 y(in)m(termediate)39 b(co)s(ordinate)g
-(systems.)62 b(This)37 b(mak)m(es)h(it)g(simple)g(to)g(directly)h(in)m
-(ter-relate)g(the)f(pixel)227 3792 y(co)s(ordinates)31
-b(of)g(di\013eren)m(t)g(datasets.)0 4016 y FE(5.)47 b(Handling)35
-b(Di\013eren)m(t)g(T)m(yp)s(es)g(of)g(Co)s(ordinate)f(System)227
-4129 y FG(Not)44 b(all)g(co)s(ordinate)g(systems)e(used)h(in)f
-(astronom)m(y)i(are)f(celestial)j(ones,)g(so)d(if)g(y)m(ou)g(are)g
-(writing)227 4242 y(general-purp)s(ose)35 b(soft)m(w)m(are)h(suc)m(h)f
-(as)g(\(sa)m(y\))h(a)g(displa)m(y)f(to)s(ol,)i(y)m(ou)f(ma)m(y)f(also)h
-(need)f(to)g(handle)g(axes)227 4355 y(represen)m(ting)43
-b(w)m(a)m(v)m(elength,)48 b(distance,)e(time)d(or)f(whatev)m(er)h(else)
-h(comes)f(along.)77 b(Ob)m(viously)-8 b(,)46 b(y)m(ou)227
-4468 y(w)m(ould)30 b(prefer)g(not)h(to)g(handle)f(eac)m(h)h(one)g(as)g
-(a)f(sp)s(ecial)h(case.)227 4637 y FE(Solution)h FG(AST)f(uses)g(the)g
-(same)h(\015exible)f(high-lev)m(el)j(mo)s(del)d(to)h(describ)s(e)e(all)
-j(t)m(yp)s(es)e(of)h(co)s(ordinate)227 4750 y(system.)48
-b(This)32 b(allo)m(ws)i(y)m(ou)f(to)g(write)g(soft)m(w)m(are)h(that)g
-(handles)e(di\013eren)m(t)h(kinds)f(of)g(co)s(ordinate)i(axis)227
-4863 y(without)d(in)m(tro)s(ducing)f(sp)s(ecial)h(cases.)0
-5218 y Fw(1.2)112 b(Other)38 b(Design)g(Ob)6 b(jectiv)m(es)0
-5467 y FG(As)43 b(w)m(ell)i(as)f(its)f(scien)m(ti\014c)i(ob)5
-b(jectiv)m(es,)49 b(the)44 b(AST)e(library's)i(design)f(includes)g(a)h
-(n)m(um)m(b)s(er)e(of)i(tec)m(hnical)0 5580 y(criteria)c(in)m(tended)e
-(to)h(mak)m(e)g(it)g(applicable)h(to)f(as)g(wide)f(a)h(range)f(of)h
-(pro)5 b(jects)39 b(as)f(p)s(ossible.)65 b(The)38 b(main)0
-5693 y(considerations)31 b(are)g(describ)s(ed)e(here:)p
-eop end
-%%Page: 3 13
-TeXDict begin 3 12 bop 0 52 a Fz(1.2)92 b(Other)30 b(Design)h(Ob)5
-b(jectiv)m(es)2551 b FG(3)111 351 y(1.)46 b FE(Minim)m(um)36
-b(Soft)m(w)m(are)e(Dep)s(endencies.)41 b FG(The)30 b(AST)f(library)h
-(dep)s(ends)f(on)h(no)g(other)g(other)h(soft-)227 464
-y(w)m(are)411 431 y Fv(1)451 464 y FG(.)111 680 y(2.)46
-b FE(En)m(vironmen)m(t)d(Indep)s(endence.)61 b FG(AST)37
-b(is)g(designed)g(so)g(that)h(it)g(can)f(op)s(erate)h(in)f(a)h(v)-5
-b(ariet)m(y)38 b(of)227 793 y(\\programming)31 b(en)m(vironmen)m(ts")g
-(and)f(is)g(not)h(tied)g(to)g(an)m(y)g(particular)g(one.)41
-b(T)-8 b(o)31 b(allo)m(w)g(this,)g(it)g(uses)227 906
-y(simple,)g(\015exible)f(in)m(terfaces)i(to)f(obtain)g(the)g(follo)m
-(wing)h(services:)336 1154 y Fu(\017)46 b FE(Data)37
-b(Storage.)45 b FG(Data)34 b(I/O)e(op)s(erations)h(are)f(based)g(on)g
-(text)h(and/or)f(FITS)g(headers.)45 b(This)427 1267 y(mak)m(es)24
-b(it)g(easy)g(to)g(in)m(terface)h(to)e(a)h(wide)f(v)-5
-b(ariet)m(y)25 b(of)e(astronomical)i(data)f(formats)f(in)g(a)g(mac)m
-(hine-)427 1380 y(indep)s(enden)m(t)29 b(w)m(a)m(y)-8
-b(.)336 1541 y Fu(\017)46 b FE(Graphics.)74 b FG(Graphical)42
-b(output)f(is)g(pro)s(duced)f Fx(via)h FG(a)h(simple)f(generic)h
-(graphics)g(in)m(terface,)427 1653 y(whic)m(h)48 b(ma)m(y)h(easily)h(b)
-s(e)d(re-implemen)m(ted)i(o)m(v)m(er)h(di\013eren)m(t)f(graphics)f
-(systems.)94 b(AST)48 b(pro-)427 1766 y(vides)32 b(a)g(default)g
-(implemen)m(tation)h(based)f(on)f(the)h(widely-used)g(PGPLOT)f
-(graphics)g(system)427 1879 y(\(SUN/15\).)336 2040 y
-Fu(\017)46 b FE(Error)39 b(Handling.)52 b FG(Error)33
-b(messages)i(are)f(written)h(to)f(standard)f(error)h(b)m(y)g(default,)h
-(but)f(go)427 2153 y(through)k(a)i(simple)e(generic)i(in)m(terface)h
-(similar)e(to)g(that)h(used)e(for)g(graphics)h(\(ab)s(o)m(v)m(e\).)68
-b(This)427 2265 y(p)s(ermits)33 b(error)h(message)h(deliv)m(ery)f
-Fx(via)g FG(other)g(routes)g(when)f(necessary)h(\()p
-Fx(e.g.)51 b FG(in)33 b(a)i(graphical)427 2378 y(in)m(terface\).)111
-2627 y(3.)46 b FE(Multiple)33 b(Language)f(Supp)s(ort.)40
-b FG(AST)28 b(has)g(b)s(een)g(designed)g(to)h(b)s(e)e(called)j(from)e
-(more)g(than)g(one)227 2739 y(language.)61 b(Both)37
-b(F)-8 b(ortran)37 b(and)f(C)g(in)m(terfaces)i(are)f(a)m(v)-5
-b(ailable)39 b(\(see)e(SUN/211)i(for)d(the)h(C)f(v)m(ersion\))227
-2852 y(and)30 b(use)g(from)g(C++)f(is)i(also)g(straigh)m(tforw)m(ard)g
-(if)g(the)f(C)g(in)m(terface)i(is)e(included)g(using:)427
-3087 y Ft(extern)41 b("C")i({)427 3187 y(#include)e("ast.h")427
-3286 y(})227 3535 y FG(A)d(JNI)g(in)m(terface)i(\(kno)m(wn)e(as)g
-(\\JNIAST")g(-)g(see)h(h)m(ttp://www.starlink.ac.uk/jniast/\))i(has)d
-(also)227 3648 y(b)s(een)30 b(dev)m(elop)s(ed)h(b)m(y)f(Starlink)g
-(whic)m(h)g(allo)m(ws)i(AST)e(to)h(b)s(e)e(used)h(from)g(Ja)m(v)-5
-b(a.)111 3864 y(4.)46 b FE(Ob)6 b(ject)44 b(Orien)m(ted)g(Design.)66
-b FG(AST)38 b(uses)g(\\ob)5 b(ject)40 b(orien)m(ted")g(tec)m(hniques)f
-(in)m(ternally)h(in)e(order)227 3977 y(to)h(pro)m(vide)f(a)g
-(\015exible)h(and)e(easily-extended)i(programming)f(mo)s(del.)63
-b(A)38 b(fairly)h(traditional)g(call-)227 4090 y(ing)f(in)m(terface)h
-(is)e(pro)m(vided,)i(ho)m(w)m(ev)m(er,)i(so)d(that)g(the)f(library's)h
-(facilities)h(are)f(easily)h(accessible)g(to)227 4202
-y(programmers)30 b(using)g(F)-8 b(ortran)31 b(and)f(C.)111
-4419 y(5.)46 b FE(P)m(ortabilit)m(y)-9 b(.)52 b FG(AST)33
-b(is)h(implemen)m(ted)h(en)m(tirely)g(in)e(ANSI)h(standard)f(C)h(and,)g
-(when)f(called)i Fx(via)f FG(its)227 4531 y(C)c(in)m(terface,)i(mak)m
-(es)g(no)e(explicit)i(use)e(of)g(an)m(y)h(mac)m(hine-dep)s(enden)m(t)f
-(facilities.)227 4696 y(The)42 b(F)-8 b(ortran)43 b(in)m(terface)g(is,)
-j(una)m(v)m(oidably)-8 b(,)46 b(mac)m(hine)d(dep)s(enden)m(t.)75
-b(Ho)m(w)m(ev)m(er,)48 b(the)42 b(p)s(oten)m(tial)i(for)227
-4809 y(problems)34 b(has)f(b)s(een)h(minimised)f(b)m(y)h(encapsulating)
-h(the)f(in)m(terface)i(la)m(y)m(er)g(in)d(a)i(compact)g(set)g(of)f(C)
-227 4922 y(macros)f(whic)m(h)g(facilitate)i(its)e(transfer)f(to)i
-(other)f(platforms.)47 b(No)33 b(F)-8 b(ortran)34 b(compiler)f(is)f
-(needed)h(to)227 5035 y(build)d(the)g(library)-8 b(.)227
-5199 y(Curren)m(tly)g(,)33 b(AST)f(is)h(supp)s(orted)d(b)m(y)j
-(Starlink)f(on)h(PC)f(Lin)m(ux,)g(Sun)f(Solaris)i(and)f(T)-8
-b(ru64)33 b(Unix)f(\(for-)227 5312 y(merly)f(DEC)f(UNIX\))h(platforms.)
-p 0 5425 1512 4 v 104 5479 a Fs(1)138 5510 y Fr(It)26
-b(no)n(w)g(comes)h(with)f(a)h(minimal)g(cut-do)n(wn)e(v)n(ersion)h(of)h
-(the)f(widely-a)n(v)l(ailable)h(SLALIB)e(p)r(ositional)j(astronom)n(y)e
-(library)0 5602 y(\(SUN/67\),)h(including)f(just)h(those)g(functions)g
-(needed)e(b)n(y)h(AST,)g(and)g(the)g(previous)h(dep)r(endency)e(on)h
-(SLALIB)g(is)h(no)g(longer)0 5693 y(presen)n(t)p eop
-end
-%%Page: 4 14
-TeXDict begin 4 13 bop 0 52 a FG(4)2856 b Fz(1)91 b(INTR)m(ODUCTION)0
-351 y Fw(1.3)112 b(What)38 b(Do)s(es)g(\\AST")f(Stand)h(F)-9
-b(or?)0 573 y FG(The)20 b(library)h(name)g(\\AST")g(stands)f(for)h
-(\\AST)-8 b(rometry)21 b(Library".)37 b(The)20 b(name)h(arose)h(when)d
-(it)j(w)m(as)f(though)m(t)0 686 y(that)36 b(kno)m(wledge)g(of)f
-(\\astrometry")h(\()p Fx(i.e.)f FG(celestial)j(co)s(ordinate)d
-(systems\))h(w)m(ould)e(form)h(the)g(bulk)f(of)h(the)0
-799 y(library)-8 b(.)40 b(In)27 b(fact,)i(it)f(turns)e(out)i(that)g
-(astrometry)h(forms)e(only)g(a)h(minor)f(comp)s(onen)m(t,)i(but)e(the)h
-(name)f(AST)0 911 y(has)j(stuc)m(k.)p eop end
-%%Page: 5 15
-TeXDict begin 5 14 bop 3734 52 a FG(5)0 351 y FA(2)135
-b(Ov)l(erview)46 b(of)f(AST)f(Concepts)0 605 y FG(This)37
-b(section)i(presen)m(ts)f(a)g(brief)f(o)m(v)m(erview)i(of)f(AST)f
-(concepts.)64 b(It)38 b(is)g(in)m(tended)f(as)h(a)g(basic)g(orien)m
-(tation)0 718 y(course)31 b(b)s(efore)f(y)m(ou)g(mo)m(v)m(e)i(on)e(to)h
-(the)g(more)g(tec)m(hnical)h(considerations)f(in)f(subsequen)m(t)g
-(sections.)0 1015 y Fw(2.1)112 b(Relationships)39 b(Bet)m(w)m(een)e(Co)
-s(ordinate)h(Systems)0 1237 y FG(The)33 b(relationships)h(b)s(et)m(w)m
-(een)g(co)s(ordinate)h(systems)f(are)g(represen)m(ted)f(in)h(AST)f(b)m
-(y)g(Ob)5 b(jects)34 b(called)h(Map-)0 1350 y(pings.)j(A)24
-b(Mapping)f(do)s(es)h(not)g(represen)m(t)f(a)i(co)s(ordinate)f(system)g
-(itself,)i(but)d(merely)h(the)g(pro)s(cess)f(b)m(y)h(whic)m(h)0
-1463 y(y)m(ou)31 b(mo)m(v)m(e)h(from)d(one)i(co)s(ordinate)g(system)g
-(to)g(another)g(related)g(one.)0 1627 y(A)43 b(con)m(v)m(enien)m(t)h
-(picture)f(of)f(a)h(Mapping)g(is)f(as)h(a)g(\\blac)m(k)h(b)s(o)m(x")f
-(\(Figure)g(1\))g(in)m(to)h(whic)m(h)e(y)m(ou)h(can)f(feed)0
-1740 y(sets)f(of)g(co)s(ordinates.)144 b(F)-8 b(or)42
-b(eac)m(h)g(set)f(y)m(ou)g(feed)g(in,)i(the)e(Mapping)g(returns)e(a)i
-(corresp)s(onding)f(set)h(of)744 2867 y @beginspecial
-118 @llx 85 @lly 511 @urx 258 @ury 2751 @rwi @setspecial
-%%BeginDocument: sun210_figures/mapping.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 379 3063 a(Figure)31 b(1:)41 b(A)30 b(Mapping)h(view)m(ed)
-g(as)f(a)h(\\blac)m(k)h(b)s(o)m(x")f(for)f(transforming)g(co)s
-(ordinates.)0 3376 y(transformed)d(co)s(ordinates.)41
-b(Since)28 b(eac)m(h)i(set)f(of)f(co)s(ordinates)h(represen)m(ts)f(a)h
-(p)s(oin)m(t)f(in)g(a)h(co)s(ordinate)g(space,)0 3489
-y(the)f(Mapping)f(acts)h(to)g(in)m(ter-relate)i(corresp)s(onding)d(p)s
-(ositions)g(in)g(the)h(t)m(w)m(o)g(spaces,)h(although)f(what)f(these)0
-3602 y(spaces)h(represen)m(t)g(is)f(unsp)s(eci\014ed.)38
-b(Notice)30 b(that)e(a)g(Mapping)g(need)f(not)h(ha)m(v)m(e)h(the)e
-(same)h(n)m(um)m(b)s(er)f(of)g(input)0 3715 y(and)h(output)h(co)s
-(ordinates.)41 b(That)29 b(is,)g(the)g(t)m(w)m(o)h(co)s(ordinate)g
-(spaces)f(whic)m(h)g(it)g(in)m(ter-relates)i(need)e(not)g(ha)m(v)m(e)0
-3828 y(the)i(same)f(n)m(um)m(b)s(er)f(of)i(dimensions.)0
-3991 y(In)38 b(man)m(y)h(cases,)k(the)c(transformation)g(can,)j(in)c
-(principle,)j(b)s(e)e(p)s(erformed)e(in)i(either)g(direction:)59
-b(either)0 4104 y(from)35 b(the)h Fx(input)g FG(co)s(ordinate)h(space)f
-(to)h(the)f Fx(output,)h FG(or)f Fx(vic)-5 b(e)37 b(versa.)57
-b FG(The)36 b(\014rst)f(of)h(these)g(is)g(termed)f(the)0
-4217 y Fx(forwar)-5 b(d)33 b FG(transformation)e(and)e(the)i(other)g
-(the)f Fx(inverse)g FG(transformation.)0 4381 y FE(F)-9
-b(urther)35 b(reading:)40 b FG(F)-8 b(or)32 b(a)e(more)h(complete)h
-(discussion)d(of)i(Mappings,)f(see)h Fu(x)p FG(5.)0 4677
-y Fw(2.2)112 b(Mappings)40 b(Av)-6 b(ailable)0 4900 y
-FG(The)35 b(basic)h(concept)h(of)f(a)g(Mapping)g(\()p
-Fu(x)p FG(2.1\))i(is)e(rather)f(generic)i(and)e(ob)m(viously)h(it)h(is)
-f(necessary)g(to)g(ha)m(v)m(e)0 5013 y(sp)s(eci\014c)31
-b(Mappings)g(that)g(implemen)m(t)h(sp)s(eci\014c)e(relationships)i(b)s
-(et)m(w)m(een)f(co)s(ordinate)h(systems.)42 b(AST)31
-b(pro-)0 5126 y(vides)26 b(a)h(range)g(of)f(these,)i(to)g(p)s(erform)d
-(transformations)h(suc)m(h)g(as)h(the)g(follo)m(wing)g(and,)g(where)f
-(appropriate,)0 5239 y(their)k(in)m(v)m(erses:)136 5504
-y Fu(\017)46 b FG(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)-5
-b(arious)30 b(celestial)j(co)s(ordinate)f(systems)e(\(the)h(SlaMap\).)
-136 5693 y Fu(\017)46 b FG(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)
--5 b(arious)30 b(sp)s(ectral)h(co)s(ordinate)g(systems)g(\(the)g(Sp)s
-(ecMap)f(and)f(GrismMap\).)p eop end
-%%Page: 6 16
-TeXDict begin 6 15 bop 0 52 a FG(6)2171 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)854 1039 y @beginspecial
-44 @llx 119 @lly 541 @urx 306 @ury 2485 @rwi @setspecial
-%%BeginDocument: sun210_figures/series.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1235 a FG(Figure)36 b(2:)52 b(A)35 b(CmpMap)g(\(comp)s
-(ound)f(Mapping\))i(comp)s(osed)g(of)f(t)m(w)m(o)i(comp)s(onen)m(t)f
-(Mappings)f(joined)h(in)0 1348 y(series.)j(The)25 b(output)g(co)s
-(ordinates)g(of)h(the)f(\014rst)f(Mapping)h(feed)g(in)m(to)i(the)e
-(input)f(co)s(ordinates)i(of)f(the)g(second)0 1461 y(one,)31
-b(so)g(that)g(the)f(whole)h(en)m(tit)m(y)h(b)s(eha)m(v)m(es)f(lik)m(e)g
-(a)g(single)g(Mapping.)136 1838 y Fu(\017)46 b FG(Con)m(v)m(ersions)31
-b(b)s(et)m(w)m(een)g(v)-5 b(arious)30 b(time)i(systems)e(\(the)h
-(TimeMap\).)136 2030 y Fu(\017)46 b FG(Con)m(v)m(ersion)31
-b(b)s(et)m(w)m(een)f(2-dimensional)h(spherical)f(celestial)i(co)s
-(ordinates)f(\(longitude)g(and)e(latitude\))227 2143
-y(and)h(a)h(3-dimensional)g(v)m(ectorial)i(p)s(ositions)d(\(the)h
-(SphMap\).)136 2336 y Fu(\017)46 b FG(V)-8 b(arious)26
-b(pro)5 b(jections)25 b(of)g(the)h(celestial)h(sphere)d(on)h(to)h
-(2-dimensional)f(co)s(ordinate)h(spaces|)p Fx(i.e.)f
-FG(map)227 2449 y(pro)5 b(jections)31 b(\(the)g(DssMap)g(and)f
-(WcsMap\).)136 2641 y Fu(\017)46 b FG(P)m(erm)m(utation,)32
-b(in)m(tro)s(duction)f(and)f(elimination)h(of)g(co)s(ordinates)g(\(the)
-g(P)m(ermMap\).)136 2833 y Fu(\017)46 b FG(V)-8 b(arious)21
-b(linear)g(co)s(ordinate)g(transformations)f(\(the)h(MatrixMap,)j
-(WinMap,)f(ShiftMap)d(and)g(Zo)s(omMap\).)136 3026 y
-Fu(\017)46 b FG(General)32 b(N-dimensional)f(p)s(olynomial)f
-(transformations)h(\(the)g(P)m(olyMap\).)136 3218 y Fu(\017)46
-b FG(Lo)s(okup)30 b(tables)h(\(the)g(LutMap\).)136 3411
-y Fu(\017)46 b FG(General-purp)s(ose)24 b(transformations)h(expressed)f
-(using)f(arithmetic)j(op)s(erations)f(and)e(functions)h(sim-)227
-3524 y(ilar)31 b(to)g(those)g(a)m(v)-5 b(ailable)33 b(in)d(F)-8
-b(ortran)31 b(\(the)g(MathMap\).)136 3716 y Fu(\017)46
-b FG(T)-8 b(ransformations)33 b(for)f(in)m(ternal)i(use)e(within)h(a)g
-(program,)g(based)g(on)f(priv)-5 b(ate)34 b(transformation)f(rou-)227
-3829 y(tines)e(whic)m(h)f(y)m(ou)h(write)f(y)m(ourself)h(in)f(F)-8
-b(ortran)31 b(\(the)g(In)m(traMap\).)0 4098 y FE(F)-9
-b(urther)34 b(reading:)41 b FG(F)-8 b(or)30 b(a)g(more)g(complete)h
-(description)f(of)g(eac)m(h)h(of)f(the)g(Mappings)g(men)m(tioned)g(ab)s
-(o)m(v)m(e,)0 4211 y(see)42 b(its)h(en)m(try)f(in)f(App)s(endix)g(D.)75
-b(In)41 b(addition,)46 b(see)c(the)g(discussion)f(of)h(the)h(P)m
-(ermMap)f(in)f Fu(x)p FG(5.10,)47 b(the)0 4324 y(UnitMap)28
-b(in)f Fu(x)p FG(5.9)i(and)e(the)g(In)m(traMap)h(in)f
-Fu(x)p FG(20.)41 b(The)27 b(Zo)s(omMap)g(is)h(used)e(as)i(an)f(example)
-h(throughout)f Fu(x)p FG(4.)0 4625 y Fw(2.3)112 b(Comp)s(ound)39
-b(Mappings)0 4850 y FG(The)27 b(Mappings)f(describ)s(ed)g(in)h
-Fu(x)p FG(2.2)i(pro)m(vide)e(a)g(set)h(of)f(basic)h(building)e(blo)s(c)
-m(ks)h(from)g(whic)m(h)g(more)g(complex)0 4963 y(Mappings)f(ma)m(y)h(b)
-s(e)e(constructed.)40 b(The)25 b(k)m(ey)i(to)g(doing)f(this)g(is)g(a)h
-(t)m(yp)s(e)f(of)g(Mapping)g(called)i(a)e(CmpMap,)g(or)0
-5076 y(comp)s(ound)k(Mapping.)42 b(A)31 b(CmpMap's)f(role)i(is,)f(in)g
-(principle,)g(v)m(ery)g(simple:)42 b(it)32 b(allo)m(ws)g(an)m(y)f
-(other)h(pair)e(of)0 5189 y(Mappings)c(to)h(b)s(e)e(joined)h(together)h
-(in)m(to)g(a)f(single)h(en)m(tit)m(y)h(whic)m(h)e(b)s(eha)m(v)m(es)g
-(as)g(if)g(it)h(w)m(ere)f(a)h(single)f(Mapping.)0 5302
-y(A)k(CmpMap)g(is)g(therefore)h(a)g(con)m(tainer)h(for)e(another)g
-(pair)h(of)f(Mappings.)0 5467 y(A)c(pair)h(of)f(Mappings)g(ma)m(y)h(b)s
-(e)f(com)m(bined)g(using)g(a)h(CmpMap)f(in)g(either)g(of)h(t)m(w)m(o)h
-(w)m(a)m(ys.)40 b(The)26 b(\014rst)f(of)i(these,)0 5580
-y Fx(in)g(series,)e FG(is)f(illustrated)g(in)g(Figure)g(2.)116
-b(Here,)26 b(the)e(transformations)g(implemen)m(ted)g(b)m(y)g(eac)m(h)h
-(comp)s(onen)m(t)0 5693 y(Mapping)i(are)g(p)s(erformed)e(one)h(after)i
-(the)e(other,)i(with)e(the)h(output)f(from)h(the)f(\014rst)g(Mapping)h
-(feeding)f(in)m(to)p eop end
-%%Page: 7 17
-TeXDict begin 7 16 bop 0 52 a Fz(2.4)92 b(Represen)m(ting)31
-b(Co)s(ordinate)f(Systems)2188 b FG(7)918 1916 y @beginspecial
-152 @llx 155 @lly 463 @urx 420 @ury 2332 @rwi @setspecial
-%%BeginDocument: sun210_figures/parallel.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2112 a(Figure)30 b(3:)41 b(A)30 b(CmpMap)g(comp)s(osed)f
-(of)h(t)m(w)m(o)i(Mappings)e(joined)f(in)h(parallel.)42
-b(Eac)m(h)30 b(comp)s(onen)m(t)h(Mapping)0 2225 y(acts)g(on)g(a)f
-(complemen)m(tary)i(subset)e(of)g(the)h(input)e(and)h(output)g(co)s
-(ordinates.)0 2604 y(the)g(second.)41 b(The)29 b(second)h(w)m(a)m(y)-8
-b(,)32 b Fx(in)g(p)-5 b(ar)g(al)5 b(lel,)33 b FG(is)d(sho)m(wn)f(in)h
-(Figure)g(3.)82 b(In)29 b(this)h(case,)h(eac)m(h)h(Mapping)d(acts)0
-2717 y(on)h(a)h(complemen)m(tary)h(subset)d(of)i(the)g(input)e(and)h
-(output)g(co)s(ordinates.)2572 2684 y Fv(2)0 2884 y FG(The)c(CmpMap)g
-(forms)g(the)h(k)m(ey)g(to)h(building)e(arbitrarily)h(complex)g
-(Mappings)g(b)s(ecause)f(it)i(is)e(itself)i(a)f(form)0
-2997 y(of)39 b(Mapping.)64 b(This)38 b(means)g(that)h(a)g(CmpMap)e(ma)m
-(y)i(con)m(tain)h(other)e(CmpMaps)g(as)g(comp)s(onen)m(ts)h(\()p
-Fx(e.g.)0 3110 y FG(Figure)d(4\).)58 b(This)34 b(nesting)i(of)g
-(CmpMaps)f(can)h(b)s(e)f(rep)s(eated)h(inde\014nitely)-8
-b(,)37 b(so)f(that)g(complex)h(Mappings)0 3223 y(ma)m(y)f(b)s(e)f
-(built)g(in)g(a)h(hierarc)m(hical)g(manner)f(out)g(of)h(simp)s(er)e
-(ones.)56 b(This)34 b(giv)m(es)j(AST)e(great)h(\015exibilit)m(y)h(in)0
-3336 y(the)31 b(co)s(ordinate)g(transformations)f(it)h(can)g(describ)s
-(e.)0 3503 y FE(F)-9 b(urther)28 b(reading:)38 b FG(F)-8
-b(or)26 b(a)f(more)g(complete)h(description)f(of)g(CmpMaps,)g(see)g
-Fu(x)p FG(6.)40 b(Also)25 b(see)g(the)g(CmpMap)0 3616
-y(en)m(try)31 b(in)f(App)s(endix)e(D.)0 3925 y Fw(2.4)112
-b(Represen)m(ting)38 b(Co)s(ordinate)g(Systems)0 4153
-y FG(While)45 b(Mappings)f(\()p Fu(x)p FG(2.1\))i(represen)m(t)e(the)h
-(relationships)f(b)s(et)m(w)m(een)h(co)s(ordinate)g(systems)f(in)g
-(AST,)f(the)0 4266 y(co)s(ordinate)32 b(systems)f(themselv)m(es)h(are)g
-(represen)m(ted)f(b)m(y)g(Ob)5 b(jects)31 b(called)h(F)-8
-b(rames)32 b(\(Figure)g(5\).)86 b(A)32 b(F)-8 b(rame)0
-4379 y(is)41 b(similar)g(in)f(concept)i(to)f(the)g(frame)g(y)m(ou)g
-(migh)m(t)g(dra)m(w)g(around)e(a)i(graph.)71 b(It)41
-b(con)m(tains)h(information)0 4492 y(ab)s(out)32 b(the)h(lab)s(els)g
-(whic)m(h)g(app)s(ear)f(on)h(the)g(axes,)h(the)f(axis)g(units,)g(a)g
-(title,)i(kno)m(wledge)f(of)f(ho)m(w)g(to)g(format)0
-4605 y(the)43 b(co)s(ordinate)i(v)-5 b(alues)43 b(on)g(eac)m(h)i(axis,)
-i Fx(etc.)79 b FG(An)43 b(AST)f(F)-8 b(rame)45 b(is)e(not,)k(ho)m(w)m
-(ev)m(er,)h(restricted)c(to)g(t)m(w)m(o)0 4718 y(dimensions)30
-b(and)f(ma)m(y)i(ha)m(v)m(e)h(an)m(y)f(n)m(um)m(b)s(er)e(of)h(axes.)0
-4885 y(A)37 b(basic)h(F)-8 b(rame)38 b(ma)m(y)g(b)s(e)f(used)f(to)i
-(represen)m(t)g(a)f(Cartesian)h(co)s(ordinate)g(system)g(b)m(y)f
-(setting)h(v)-5 b(alues)38 b(for)0 4998 y(its)d Fx(attributes)g
-FG(\(all)h(AST)e(Ob)5 b(jects)34 b(ha)m(v)m(e)i(v)-5
-b(alues)35 b(asso)s(ciated)h(with)e(them)h(called)g(attributes,)i(whic)
-m(h)d(ma)m(y)0 5111 y(b)s(e)e(set)h(and)e(enquired\).)46
-b(Usually)-8 b(,)34 b(this)f(w)m(ould)f(in)m(v)m(olv)m(e)i(setting)g
-(appropriate)e(axis)h(lab)s(els)f(and)g(units,)h(for)0
-5224 y(example.)47 b(Routines)32 b(are)h(pro)m(vided)f(for)f(use)h
-(with)g(F)-8 b(rames)33 b(to)g(p)s(erform)e(op)s(erations)h(suc)m(h)g
-(as)h(formatting)0 5337 y(co)s(ordinate)e(v)-5 b(alues)31
-b(as)g(text,)g(calculating)i(distances)e(b)s(et)m(w)m(een)g(p)s(oin)m
-(ts,)f(in)m(terc)m(hanging)i(axes,)f Fx(etc.)p 0 5425
-1512 4 v 104 5479 a Fs(2)138 5510 y Fr(A)k(pair)h(of)h(Mappings)f(can)g
-(b)r(e)g(com)n(bined)f(in)h(a)g(third)f(w)n(a)n(y)h(using)g(a)g(T)-6
-b(ranMap.)65 b(A)35 b(T)-6 b(ranMap)36 b(allo)n(ws)i(the)d(forw)n(ard)0
-5602 y(transformation)d(of)f(one)f(Mapping)h(to)f(b)r(e)g(com)n(bined)g
-(with)g(the)g(in)n(v)n(erse)g(transformation)i(of)f(another)f(to)g(pro)
-r(duce)g(a)g(single)0 5693 y(Mapping.)p eop end
-%%Page: 8 18
-TeXDict begin 8 17 bop 0 52 a FG(8)2171 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)557 2242 y @beginspecial
-38 @llx 119 @lly 571 @urx 462 @ury 3198 @rwi @setspecial
-%%BeginDocument: sun210_figures/complex.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2438 a FG(Figure)h(4:)41 b(CmpMaps)28
-b(\(comp)s(ound)h(Mappings\))h(ma)m(y)g(b)s(e)f(nested)g(in)g(order)g
-(to)i(construct)f(complex)g(Map-)0 2551 y(pings)g(out)g(of)h(simpler)f
-(building)g(blo)s(c)m(ks.)1012 4887 y @beginspecial 141
- at llx 322 @lly 422 @urx 581 @ury 2107 @rwi @setspecial
-%%BeginDocument: sun210_figures/frames.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 5083 a(Figure)49 b(5:)77 b(\(a\))50 b(A)f(basic)f(F)-8
-b(rame)50 b(is)e(used)g(to)h(represen)m(t)g(a)g(Cartesian)g(co)s
-(ordinate)g(system,)k(here)c(2-)0 5196 y(dimensional.)78
-b(\(b\))43 b(A)g(SkyF)-8 b(rame)44 b(represen)m(ts)e(a)i(\(spherical\))
-f(celestial)j(co)s(ordinate)e(system.)78 b(\(c\))44 b(The)0
-5309 y(axis)31 b(order)f(of)g(an)m(y)h(F)-8 b(rame)31
-b(ma)m(y)g(b)s(e)f(p)s(erm)m(uted)f(to)i(matc)m(h)h(the)e(co)s
-(ordinate)h(space)g(it)g(describ)s(es.)p eop end
-%%Page: 9 19
-TeXDict begin 9 18 bop 0 52 a Fz(2.5)92 b(Net)m(w)m(orks)32
-b(of)e(Co)s(ordinate)h(Systems)2229 b FG(9)1291 1620
-y @beginspecial 215 @llx 202 @lly 384 @urx 394 @ury 1436
- at rwi @setspecial
-%%BeginDocument: sun210_figures/cmpframe.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1816 a(Figure)39 b(6:)57 b(A)39 b(CmpF)-8
-b(rame)38 b(\(comp)s(ound)f(F)-8 b(rame\))40 b(formed)e(b)m(y)g(com)m
-(bining)h(t)m(w)m(o)h(simpler)e(F)-8 b(rames.)65 b(Note)0
-1929 y(ho)m(w)29 b(the)g(sp)s(ecial)g(relationship)g(whic)m(h)f(exists)
-h(b)s(et)m(w)m(een)h(the)f(RA)f(and)g(Dec)i(axes)f(is)g(preserv)m(ed)f
-(within)h(this)0 2042 y(data)35 b(structure.)53 b(As)34
-b(with)h(comp)s(ound)e(Mappings)h(\(Figure)h(4\),)i(CmpF)-8
-b(rames)34 b(ma)m(y)h(b)s(e)f(nested)h(in)f(order)0 2155
-y(to)d(build)e(more)i(complex)g(F)-8 b(rames.)0 2531
-y(There)35 b(are)g(sev)m(eral)i(more)e(sp)s(ecialised)h(forms)f(of)g(F)
--8 b(rame,)38 b(whic)m(h)d(pro)m(vide)g(the)h(additional)g
-(functionalit)m(y)0 2644 y(required)j(when)f(handling)h(co)s(ordinates)
-h(within)f(some)h(sp)s(eci\014c)f(ph)m(ysical)i(domain.)68
-b(This)38 b(ranges)i(from)0 2757 y(tasks)33 b(suc)m(h)g(as)g
-(formatting)h(axis)f(v)-5 b(alues,)34 b(to)g(complex)f(tasks)h(suc)m(h)
-e(as)h(determining)g(the)g(transformation)0 2870 y(b)s(et)m(w)m(een)43
-b(an)m(y)g(pair)f(of)h(related)h(co)s(ordinate)f(systems.)77
-b(F)-8 b(or)44 b(instance,)i(the)d(SkyF)-8 b(rame)43
-b(\(Figure)g(5b,c\),)0 2983 y(represen)m(ts)33 b(celestial)j(co)s
-(ordinate)e(systems,)h(the)e(Sp)s(ecF)-8 b(rame)34 b(represen)m(ts)f
-(sp)s(ectral)h(co)s(ordinate)g(systems,)0 3096 y(and)42
-b(the)i(TimeF)-8 b(rame)44 b(represen)m(ts)f(time)h(co)s(ordinate)f
-(systems.)79 b(All)44 b(these)f(pro)m(vide)h(a)f(wide)g(range)g(of)0
-3209 y(di\013eren)m(t)f(systems)f(for)g(describing)g(p)s(ositions)g
-(within)g(their)g(asso)s(ciated)i(ph)m(ysical)e(domain,)j(and)d(these)0
-3321 y(ma)m(y)31 b(b)s(e)f(selected)i(b)m(y)e(setting)h(appropriate)g
-(attributes.)0 3486 y(As)c(with)h(comp)s(ound)e(Mappings)h(\()p
-Fu(x)p FG(2.3\),)j(it)e(is)g(p)s(ossible)f(to)h(merge)g(t)m(w)m(o)h(F)
--8 b(rames)28 b(together)h(to)f(form)f(a)h(com-)0 3599
-y(p)s(ound)f(F)-8 b(rame,)30 b(or)f(CmpF)-8 b(rame,)30
-b(in)e(whic)m(h)h(b)s(oth)f(sets)i(of)f(axes)h(are)f(com)m(bined.)41
-b(One)28 b(could,)i(for)f(example,)0 3712 y(ha)m(v)m(e)j(celestial)i
-(co)s(ordinates)e(on)f(t)m(w)m(o)i(axes)f(and)e(an)h(unrelated)h(co)s
-(ordinate)g(\(w)m(a)m(v)m(elength,)i(p)s(erhaps\))c(on)h(a)0
-3825 y(third)c(\(Figure)h(6\).)41 b(Kno)m(wledge)28 b(of)g(the)g
-(relationships)g(b)s(et)m(w)m(een)g(the)g(axes)g(is)g(preserv)m(ed)f
-(in)m(ternally)i(b)m(y)e(the)0 3938 y(pro)s(cess)j(of)g(constructing)h
-(the)g(CmpF)-8 b(rame)30 b(whic)m(h)g(represen)m(ts)h(them.)0
-4102 y FE(F)-9 b(urther)31 b(reading:)39 b FG(F)-8 b(or)28
-b(a)g(more)f(complete)i(description)e(of)h(F)-8 b(rames)28
-b(see)g Fu(x)p FG(7,)h(for)e(SkyF)-8 b(rames)27 b(see)h
-Fu(x)p FG(8)g(and)0 4215 y(for)h(Sp)s(ecF)-8 b(rames)29
-b(see)h Fu(x)p FG(9.)41 b(Also)29 b(see)h(the)f(F)-8
-b(rame,)31 b(SkyF)-8 b(rame,)29 b(Sp)s(ecF)-8 b(rame,)30
-b(TimeF)-8 b(rame)30 b(and)f(CmpF)-8 b(rame)0 4328 y(en)m(tries)31
-b(in)f(App)s(endix)f(D.)0 4627 y Fw(2.5)112 b(Net)m(w)m(orks)37
-b(of)h(Co)s(ordinate)g(Systems)0 4851 y FG(Mappings)h(and)f(F)-8
-b(rames)40 b(ma)m(y)f(b)s(e)f(connected)i(together)h(to)e(form)g(net)m
-(w)m(orks)g(called)h(F)-8 b(rameSets,)43 b(whic)m(h)0
-4964 y(are)c(used)f(to)i(represen)m(t)f(sets)g(of)g(in)m(ter-related)i
-(co)s(ordinate)e(systems)g(\(Figure)h(7\).)133 b(A)39
-b(F)-8 b(rameSet)40 b(ma)m(y)0 5077 y(b)s(e)33 b(extended)h(b)m(y)f
-(adding)h(a)g(new)f(F)-8 b(rame)35 b(to)f(it,)i(together)f(with)e(an)h
-(asso)s(ciated)h(Mapping)f(whic)m(h)f(relates)0 5190
-y(the)h(new)e(co)s(ordinate)j(system)e(to)h(one)g(whic)m(h)f(is)g
-(already)h(presen)m(t.)50 b(This)33 b(pro)s(cess)f(ensures)h(that)h
-(there)f(is)0 5303 y(alw)m(a)m(ys)e(exactly)h(one)e(path,)f
-Fx(via)h FG(Mappings,)g(b)s(et)m(w)m(een)g(an)m(y)g(pair)g(of)f(F)-8
-b(rames.)42 b(A)29 b(function)h(is)f(pro)m(vided)h(for)0
-5416 y(iden)m(tifying)h(this)f(path)g(and)g(returning)g(the)g(complete)
-i(Mapping.)0 5580 y(One)42 b(of)h(the)f(F)-8 b(rames)44
-b(in)e(a)h(F)-8 b(rameSet)43 b(is)g(termed)f(its)h Fx(b)-5
-b(ase)43 b FG(F)-8 b(rame.)78 b(This)42 b(underlies)f(the)i(F)-8
-b(rameSet's)0 5693 y(purp)s(ose,)38 b(whic)m(h)g(is)f(to)i(calibrate)g
-(datasets)g(and)e(other)h(en)m(tities)i(b)m(y)d(attac)m(hing)j(co)s
-(ordinate)f(systems)f(to)p eop end
-%%Page: 10 20
-TeXDict begin 10 19 bop 0 52 a FG(10)2126 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)612 4135 y @beginspecial
-107 @llx 108 @lly 516 @urx 547 @ury 3067 @rwi @setspecial
-%%BeginDocument: sun210_figures/frameset.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4331 a FG(Figure)35 b(7:)50 b(A)34 b(F)-8
-b(rameSet)36 b(is)f(a)g(net)m(w)m(ork)g(of)g(F)-8 b(rames)35
-b(in)m(ter-connected)h(b)m(y)f(Mappings)f(suc)m(h)g(that)i(there)e(is)0
-4444 y(exactly)e(one)f(con)m(v)m(ersion)g(path,)g Fx(via)f
-FG(Mappings,)h(b)s(et)m(w)m(een)g(an)m(y)f(pair)h(of)f(F)-8
-b(rames.)p eop end
-%%Page: 11 21
-TeXDict begin 11 20 bop 0 52 a Fz(2.6)92 b(Input/Output)28
-b(F)-8 b(acilities)2547 b FG(11)0 351 y(them.)43 b(In)30
-b(this)h(con)m(text,)j(the)d(base)g(F)-8 b(rame)32 b(represen)m(ts)f
-(the)h(\\nativ)m(e")h(co)s(ordinate)f(system)f(\(for)h(example,)0
-464 y(the)43 b(pixel)h(co)s(ordinates)g(of)f(an)g(image\).)81
-b(Similarly)-8 b(,)48 b(one)43 b(F)-8 b(rame)44 b(is)f(termed)h(the)f
-Fx(curr)-5 b(ent)44 b FG(F)-8 b(rame)44 b(and)0 577 y(represen)m(ts)39
-b(the)g(\\curren)m(tly-selected")j(co)s(ordinates.)68
-b(It)39 b(migh)m(t,)k(t)m(ypically)-8 b(,)43 b(b)s(e)c(a)g(celestial)j
-(or)d(sp)s(ectral)0 690 y(co)s(ordinate)30 b(system)g(and)f(w)m(ould)g
-(b)s(e)g(used)g(during)f(in)m(teractions)j(with)f(a)f(user,)h(as)f
-(when)g(plotting)h(axes)h(on)0 803 y(a)h(graph)f(or)g(pro)s(ducing)g(a)
-h(table)g(of)g(results.)44 b(Other)31 b(F)-8 b(rames)32
-b(within)f(the)h(F)-8 b(rameSet)32 b(represen)m(t)g(a)g(library)0
-916 y(of)f(alternativ)m(e)h(co)s(ordinate)g(systems)e(whic)m(h)g(a)h
-(soft)m(w)m(are)h(user)d(can)i(select)h(b)m(y)e(making)h(them)f(curren)
-m(t.)0 1063 y FE(F)-9 b(urther)41 b(reading:)52 b FG(F)-8
-b(or)37 b(a)f(more)h(complete)g(description)f(of)g(F)-8
-b(rameSets,)39 b(see)e Fu(x)p FG(13)g(and)e Fu(x)p FG(14.)59
-b(Also)37 b(see)0 1176 y(the)31 b(F)-8 b(rameSet)31 b(en)m(try)g(in)f
-(App)s(endix)e(D.)0 1447 y Fw(2.6)112 b(Input/Output)38
-b(F)-9 b(acilities)0 1653 y FG(AST)44 b(allo)m(ws)h(y)m(ou)g(to)g(con)m
-(v)m(ert)h(an)m(y)f(kind)e(of)i(Ob)5 b(ject)44 b(in)m(to)h(a)g(stream)g
-(of)f(text)h(whic)m(h)g(con)m(tains)g(a)g(full)0 1766
-y(description)32 b(of)g(that)h(Ob)5 b(ject.)45 b(This)31
-b(text)i(ma)m(y)g(b)s(e)e(written)h(out)g(b)m(y)g(one)g(program)g(and)f
-(read)h(bac)m(k)h(in)f(b)m(y)0 1879 y(another,)f(th)m(us)f(allo)m(wing)
-i(the)e(original)i(Ob)5 b(ject)31 b(to)g(b)s(e)e(reconstructed.)0
-2027 y(The)35 b(\014lter)h(whic)m(h)g(con)m(v)m(erts)h(Ob)5
-b(jects)35 b(in)m(to)i(text)g(and)e(bac)m(k)i(again)f(is)g(itself)h(a)f
-(kind)f(of)h(Ob)5 b(ject,)37 b(called)g(a)0 2139 y(Channel.)i(A)26
-b(Channel)g(pro)m(vides)g(a)h(n)m(um)m(b)s(er)e(of)h(options)h(for)f
-(con)m(trolling)i(the)f(information)g(con)m(ten)m(t)h(of)e(the)0
-2252 y(text,)k(suc)m(h)e(as)h(the)f(addition)h(of)f(commen)m(ts)i(for)e
-(h)m(uman)f(in)m(terpretation.)42 b(It)28 b(is)h(also)g(p)s(ossible)f
-(to)h(in)m(tercept)0 2365 y(the)e(text)i(b)s(eing)e(pro)s(cessed)f(b)m
-(y)i(a)f(Channel)g(so)g(that)h(it)g(ma)m(y)g(b)s(e)e(redirected)i
-(to/from)g(an)m(y)g(c)m(hosen)g(external)0 2478 y(data)j(store,)g(suc)m
-(h)f(as)h(a)g(text)g(\014le,)g(an)f(astronomical)i(dataset,)g(or)f(a)f
-(net)m(w)m(ork)h(connection.)0 2626 y(The)42 b(text)i(format)f(used)e
-(b)m(y)i(the)g(basic)g(Channel)e(class)j(is)e(p)s(eculiar)h(to)g(the)g
-(AST)f(library)g(-)h(no)f(other)0 2739 y(soft)m(w)m(are)28
-b(will)f(understand)e(it.)40 b(Ho)m(w)m(ev)m(er,)30 b(more)d(sp)s
-(ecialised)h(forms)e(of)h(Channel)f(are)h(pro)m(vided)f(whic)m(h)h(use)
-0 2852 y(text)k(formats)g(more)f(widely)h(understo)s(o)s(d.)0
-2999 y(T)-8 b(o)37 b(further)f(facilitate)k(the)d(storage)h(of)g(co)s
-(ordinate)f(system)g(information)h(in)e(astronomical)j(datasets,)h(a)0
-3112 y(more)d(sp)s(ecialised)g(form)f(of)h(Channel)e(called)j(a)f
-(FitsChan)f(is)h(pro)m(vided.)59 b(Instead)36 b(of)h(using)f
-(free-format)0 3225 y(text,)46 b(a)c(FitsChan)g(con)m(v)m(erts)h(AST)e
-(Ob)5 b(jects)42 b(to)g(and)g(from)f(FITS)g(header)h(cards.)74
-b(It)42 b(also)h(allo)m(ws)g(the)0 3338 y(information)36
-b(to)g(b)s(e)f(enco)s(ded)h(in)f(the)h(FITS)f(cards)h(in)f(a)h(n)m(um)m
-(b)s(er)e(of)i(w)m(a)m(ys)h(\(called)g Fx(enc)-5 b(o)g(dings)p
-FG(\),)39 b(so)d(that)0 3451 y(W)m(CS)30 b(information)h(from)f(a)h(v)
--5 b(ariet)m(y)31 b(of)g(sources)f(can)h(b)s(e)f(handled.)0
-3598 y(Another)41 b(sub-class)g(of)g(Channel,)i(called)f(XmlChan,)h(is)
-f(a)f(sp)s(ecialised)h(form)e(of)h(Channel)f(that)i(stores)0
-3711 y(the)g(text)g(in)f(the)h(form)f(of)h(XML)g(markup.)73
-b(Curren)m(tly)-8 b(,)44 b(t)m(w)m(o)f(markup)d(formats)i(are)g(pro)m
-(vided)f(b)m(y)g(the)0 3824 y(XmlChan)35 b(class,)i(one)f(is)f(closely)
-i(related)f(to)g(the)g(text)g(format)g(pro)s(duced)e(b)m(y)h(the)g
-(basic)h(Channel)f(class)0 3937 y(\(curren)m(tly)-8 b(,)34
-b(no)f(sc)m(hema)g(or)f(DTD)h(is)g(a)m(v)-5 b(ailable)35
-b(describing)d(this)h(format\).)48 b(The)32 b(other)g(is)h(a)g(subset)f
-(of)h(an)0 4050 y(early)j(draft)e(of)h(the)h(IV)m(O)m(A)f
-(Space-Time-Co)s(ordinates)h(XML)g(\(STC-X\))f(sc)m(hema)g(\(V1.20\))j
-(describ)s(ed)c(at)0 4163 y(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/WD/STC/STC-200502)q(25)q(.h)m(tml)2605 4130 y Fv(3)2644
-4163 y FG(.)40 b(The)29 b(v)m(ersion)g(of)g(STC-X)f(that)0
-4276 y(has)k(b)s(een)f(adopted)h(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e
-(in)h(sev)m(eral)h(signi\014can)m(t)g(resp)s(ects)f(from)f(V1.20,)k
-(and)c(therefore)0 4389 y(this)f(XmlChan)g(format)h(is)f(of)h
-(historical)g(in)m(terest)h(only)-8 b(.)0 4536 y(Finally)g(,)37
-b(the)e(StcsChan)f(class)i(pro)m(vides)e(facilities)j(for)e(reading)f
-(and)h(writing)f(IV)m(O)m(A)i(STC-S)d(region)i(de-)0
-4649 y(scriptions.)48 b(STC-S)31 b(\(see)67 b(h)m(ttp://www.iv)m
-(oa.net/Do)s(cumen)m(ts/latest/STC-S.h)m(tml\))38 b(is)33
-b(a)g(linear)g(string)0 4762 y(syn)m(tax)e(that)g(allo)m(ws)h(simple)e
-(sp)s(eci\014cation)h(of)g(STC)e(metadata.)42 b(AST)30
-b(supp)s(orts)e(a)j(subset)f(of)g(the)h(STC-S)0 4875
-y(sp)s(eci\014cation,)f(allo)m(wing)h(an)e(STC-S)f(description)h(of)g
-(a)h(region)f(within)g(an)g(AST-supp)s(orted)e(astronomical)0
-4988 y(co)s(ordinate)k(system)g(to)g(b)s(e)f(con)m(v)m(erted)h(in)m(to)
-h(an)e(equiv)-5 b(alen)m(t)32 b(AST)e(Region)h(ob)5 b(ject,)31
-b(and)f(vice-v)m(ersa.)0 5135 y FE(F)-9 b(urther)35 b(reading:)40
-b FG(F)-8 b(or)31 b(a)g(more)g(complete)g(description)g(of)f(Channels)g
-(see)g Fu(x)p FG(15)i(and)e(for)g(FitsChans)g(see)0 5248
-y Fu(x)p FG(16)e(and)e Fu(x)p FG(17.)41 b(Also)27 b(see)h(the)f
-(Channel)f(and)g(FitsChan)h(en)m(tries)g(in)g(App)s(endix)e(D)i(and)f
-(the)h(Enco)s(ding)f(en)m(try)0 5361 y(in)k(App)s(endix)f(C.)p
-0 5425 1512 4 v 104 5479 a Fs(3)138 5510 y Fr(XML)19
-b(do)r(cumen)n(ts)g(whic)n(h)g(use)g(only)g(the)g(subset)g(of)g(the)g
-(STC)h(sc)n(hema)f(supp)r(orted)g(b)n(y)f(AST)g(can)i(b)r(e)e(read)i(b)
-n(y)e(the)g(XmlChan)0 5602 y(class)31 b(to)f(pro)r(duce)f(corresp)r
-(onding)i(AST)e(ob)t(jects)i(\(sub)r(classes)g(of)g(the)e(Stc)g
-(class\).)48 b(Ho)n(w)n(ev)n(er,)31 b(the)e(rev)n(erse)h(is)g(not)g(p)r
-(ossible.)0 5693 y(That)c(is,)h(AST)e(ob)t(jects)i(can)e(not)h(curren)n
-(tly)f(b)r(e)g(written)h(out)g(in)g(the)f(form)h(of)h(STC)f(do)r(cumen)
-n(ts.)p eop end
-%%Page: 12 22
-TeXDict begin 12 21 bop 0 52 a FG(12)2126 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)720 260 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 720 260 a @beginspecial
-97 @llx 220 @lly 409 @urx 571 @ury 2496 @rwi @setspecial
-%%BeginDocument: sun210_figures/gridplot_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2800 260 a
- currentpoint grestore moveto
- 2800 260 a 0 2494 a FG(Figure)41
-b(8:)62 b(A)41 b(lab)s(elled)h(co)s(ordinate)g(grid)e(for)h(an)g
-(all-sky)g(zenithal)h(equal)g(area)g(pro)5 b(jection)41
-b(in)g(ecliptic)0 2607 y(co)s(ordinates.)g(This)30 b(w)m(as)h(comp)s
-(osed)f(and)g(dra)m(wn)f Fx(via)i FG(a)f(Plot)i(using)e(a)g(single)h
-(subroutine)f(call.)0 2997 y Fw(2.7)112 b(Pro)s(ducing)38
-b(Graphical)h(Output)0 3240 y FG(Graphical)24 b(output)e(is)i(supp)s
-(orted)d(b)m(y)i(a)g(sp)s(ecialised)h(form)f(of)g(F)-8
-b(rameSet)24 b(called)g(a)g(Plot,)h(whose)e(base)h(F)-8
-b(rame)0 3353 y(corresp)s(onds)28 b(with)g(the)h(nativ)m(e)i(co)s
-(ordinates)e(of)g(the)h(underlying)d(graphics)i(system.)41
-b(Plotting)30 b(op)s(erations)0 3466 y(are)f(sp)s(eci\014ed)e(in)h
-Fx(physic)-5 b(al)33 b(c)-5 b(o)g(or)g(dinates)32 b FG(whic)m(h)c
-(corresp)s(ond)f(with)h(the)g(Plot's)i(curren)m(t)e(F)-8
-b(rame.)41 b(T)m(ypically)-8 b(,)0 3579 y(this)30 b(migh)m(t)h(b)s(e)f
-(a)h(celestial)i(co)s(ordinate)e(system.)0 3757 y(Op)s(erations,)43
-b(suc)m(h)d(as)h(dra)m(wing)g(lines,)i(are)e(automatically)j
-(transformed)c(from)g(ph)m(ysical)h(to)h(graphical)0
-3870 y(co)s(ordinates)30 b(b)s(efore)f(plotting,)h(using)f(an)g
-(adaptiv)m(e)i(algorithm)f(whic)m(h)f(ensures)f(smo)s(oth)h(curv)m(es)g
-(\(b)s(ecause)0 3983 y(the)44 b(transformation)f(is)h(usually)f
-(non-linear\).)80 b(\\Missing")45 b(co)s(ordinates)f(\()p
-Fx(e.g.)f FG(graphical)h(co)s(ordinates)0 4096 y(whic)m(h)31
-b(do)g(not)g(pro)5 b(ject)31 b(on)g(to)h(the)f(celestial)i(sphere\),)e
-(discon)m(tin)m(uities)i(and)d(generalised)i(clipping)f(are)h(all)0
-4209 y(consisten)m(tly)37 b(handled.)56 b(It)36 b(is)g(p)s(ossible,)h
-(for)e(example,)j(to)f(plot)f(in)g(equatorial)h(co)s(ordinates)g(and)e
-(clip)h(in)0 4321 y(galactic)30 b(co)s(ordinates.)41
-b(The)27 b(usual)g(plotting)h(op)s(erations)g(are)g(pro)m(vided)f
-(\(text,)i(mark)m(ers\),)g(but)d(a)i(geo)s(desic)0 4434
-y(curv)m(e)i(replaces)g(the)f(primitiv)m(e)h(straigh)m(t)g(line)g
-(elemen)m(t.)42 b(There)29 b(is)g(also)h(a)g(separate)g(function)f(for)
-g(dra)m(wing)0 4547 y(axis)i(lines,)g(since)f(these)h(are)g(normally)g
-(not)f(geo)s(desics.)0 4725 y(In)c(addition)h(to)h(dra)m(wing)e(co)s
-(ordinate)i(grids)e(o)m(v)m(er)i(an)f(area)g(of)g(the)g(sky)-8
-b(,)28 b(another)f(common)g(use)g(of)g(the)g(Plot)0 4838
-y(class)j(is)g(to)g(pro)s(duce)e(line)i(plots)g(suc)m(h)f(as)h(\015ux)f
-(against)h(w)m(a)m(v)m(elength,)j(displacemen)m(t)d(again)h(time,)f
-Fx(etc)p FG(.)41 b(F)-8 b(or)0 4951 y(these)33 b(situations)g(the)f
-(curren)m(t)g(F)-8 b(rame)34 b(of)e(the)g(Plot)i(w)m(ould)e(b)s(e)f(a)i
-(comp)s(ound)e(F)-8 b(rame)33 b(\(CmpF)-8 b(rame\))33
-b(con-)0 5064 y(taining)d(a)h(pair)e(of)h(1-dimensional)h(F)-8
-b(rames)30 b(-)g(the)g(\014rst)f(represen)m(ting)h(the)g(X)g(axis)g
-(quan)m(tit)m(y)i(\(w)m(a)m(v)m(elength,)0 5177 y(time,)g(etc\),)i(and)
-c(the)i(second)f(represen)m(ting)h(the)f(Y)h(axis)f(quan)m(tit)m(y)i
-(\(\015ux,)e(displacemen)m(t,)i(etc\).)45 b(The)31 b(Plot)0
-5289 y(class)g(includes)f(an)g(option)h(for)f(axes)h(to)g(b)s(e)f
-(plotted)h(logarithmically)-8 b(.)0 5467 y(P)m(erhaps)36
-b(the)h(most)f(useful)g(graphics)g(function)h(a)m(v)-5
-b(ailable)38 b(is)f(for)f(dra)m(wing)g(fully)g(annotated)i(co)s
-(ordinate)0 5580 y(grids)d(\()p Fx(e.g.)f FG(Figure)i(8\).)109
-b(This)35 b(uses)f(a)h(general)h(algorithm)g(whic)m(h)f(do)s(es)g(not)g
-(dep)s(end)e(on)i(kno)m(wledge)h(of)0 5693 y(the)d(co)s(ordinates)g(b)s
-(eing)g(represen)m(ted,)g(so)g(can)g(also)h(handle)e
-(programmer-de\014ned)g(co)s(ordinate)h(systems.)p eop
-end
-%%Page: 13 23
-TeXDict begin 13 22 bop 0 52 a Fz(2.7)92 b(Pro)s(ducing)29
-b(Graphical)j(Output)2329 b FG(13)0 351 y(Grids)39 b(for)h(all-sky)g
-(pro)5 b(jections,)43 b(including)c(p)s(olar)h(regions,)j(can)c(b)s(e)h
-(dra)m(wn)e(and)h(most)h(asp)s(ects)g(of)g(the)0 464
-y(output)30 b(\(colour,)i(line)e(st)m(yle,)i Fx(etc.)p
-FG(\))41 b(can)30 b(b)s(e)g(adjusted)g(b)m(y)g(setting)h(appropriate)g
-(Plot)g(attributes.)0 627 y FE(F)-9 b(urther)47 b(reading:)61
-b FG(F)-8 b(or)42 b(a)f(more)g(complete)h(description)f(of)g(Plots)g
-(and)g(ho)m(w)f(to)i(pro)s(duce)e(graphical)0 740 y(output,)30
-b(see)h Fu(x)p FG(21.)42 b(Also)31 b(see)g(the)g(Plot)g(en)m(try)g(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 14 24
-TeXDict begin 14 23 bop 0 52 a FG(14)2126 b Fz(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)p eop end
-%%Page: 15 25
-TeXDict begin 15 24 bop 3689 52 a FG(15)0 351 y FA(3)135
-b(Ho)l(w)45 b(T)-11 b(o.)23 b(.)g(.)0 613 y FG(F)-8 b(or)29
-b(those)g(of)f(y)m(ou)g(with)g(a)h(plane)f(to)h(catc)m(h,)h(this)f
-(section)g(pro)m(vides)f(some)h(instan)m(t)g(templates)g(and)f(recip)s
-(es)0 725 y(for)22 b(p)s(erforming)f(the)i(most)f(commonly-required)h
-(op)s(erations)f(using)g(AST,)g(but)f(without)h(going)i(in)m(to)f
-(detail.)0 838 y(The)35 b(examples)h(giv)m(en)g(\(sort)g(of)7
-b(\))36 b(follo)m(w)g(on)f(from)g(eac)m(h)i(other,)g(so)e(y)m(ou)h
-(should)e(b)s(e)h(able)g(to)h(construct)g(a)0 951 y(v)-5
-b(ariet)m(y)30 b(of)f(programs)f(b)m(y)g(piecing)i(them)e(together.)42
-b(Note)30 b(that)f(some)g(of)f(them)h(app)s(ear)f(longer)h(than)f(they)
-0 1064 y(actually)h(are,)f(b)s(ecause)f(w)m(e)h(ha)m(v)m(e)g(included)f
-(plen)m(t)m(y)g(of)h(commen)m(ts)g(and)e(a)i(few)f(options)g(that)h(y)m
-(ou)f(probably)0 1177 y(w)m(on't)k(need.)0 1346 y(If)g(an)m(y)g(of)g
-(this)g(material)h(has)f(y)m(ou)g(completely)i(ba\017ed,)e(then)g(y)m
-(ou)g(ma)m(y)h(w)m(an)m(t)g(to)f(read)g(the)g(in)m(tro)s(duction)0
-1459 y(to)36 b(AST)f(programming)g(concepts)i(in)e Fu(x)p
-FG(4)h(\014rst.)55 b(Otherwise,)37 b(references)f(to)g(more)g(detailed)
-g(reading)g(are)0 1571 y(giv)m(en)31 b(after)g(eac)m(h)h(example,)f
-(just)f(in)g(case)h(they)g(don't)f(quite)h(do)f(what)h(y)m(ou)f(w)m(an)
-m(t.)0 1884 y Fw(3.1)112 b(.)19 b(.)g(.)g(Obtain)38 b(and)g(Install)g
-(AST)0 2114 y FG(The)h(AST)g(library)g(is)h(a)m(v)-5
-b(ailable)42 b(b)s(oth)c(as)i(a)g(stand-alone)h(pac)m(k)-5
-b(age)41 b(and)e(also)i(as)f(part)f(of)h(the)g(Starlink)0
-2227 y(Soft)m(w)m(are)26 b(Collection)763 2194 y Fv(4)804
-2227 y FG(.)39 b(If)24 b(y)m(our)h(site)g(has)f(the)h(Starlink)g(Soft)m
-(w)m(are)g(Collection)i(installed)e(then)g(AST)e(should)0
-2340 y(already)31 b(b)s(e)f(a)m(v)-5 b(ailable.)0 2508
-y(If)30 b(not,)h(y)m(ou)f(can)h(do)m(wnload)g(the)f(AST)g(library)g(b)m
-(y)g(itself)h(from)f(h)m(ttp://www.starlink.ac.uk/ast/.)0
-2821 y Fw(3.2)112 b(.)19 b(.)g(.)g(Structure)37 b(an)h(AST)f(Program)0
-3051 y FG(An)30 b(AST)g(program)g(normally)g(has)g(the)h(follo)m(wing)h
-(structure:)0 3318 y Ft(*)87 b(Include)40 b(the)j(interface)d(to)i(the)
-h(AST)f(library.)262 3417 y(INCLUDE)e('AST_PAR')0 3616
-y(*)87 b(Declare)40 b(an)j(integer)e(status)g(variable.)262
-3716 y(INTEGER)f(STATUS)262 3816 y(<maybe)h(other)g(declarations>)0
-4015 y(*)87 b(Initialise)39 b(the)k(status)e(to)h(zero.)262
-4115 y(STATUS)f(=)i(0)262 4214 y(<maybe)e(some)h(Fortran)e(statements>)
-0 4413 y(*)87 b(Enclose)40 b(the)j(parts)e(which)h(use)g(AST)h(between)
-d(AST_BEGIN)g(and)i(AST_END)f(calls.)262 4513 y(CALL)g(AST_BEGIN\()f
-(STATUS)h(\))262 4613 y(<Fortran)f(statements)f(which)j(use)g(AST>)262
-4712 y(CALL)f(AST_END\()g(STATUS)g(\))262 4912 y(<maybe)g(more)h
-(Fortran)e(statements>)262 5011 y(END)0 5291 y FG(The)32
-b(use)g(of)h(AST)p Fy(_)p FG(BEGIN)f(and)g(AST)p Fy(_)p
-FG(END)g(is)h(optional,)h(but)e(has)g(the)h(e\013ect)h(of)f(tidying)g
-(up)e(after)i(y)m(ou)0 5404 y(ha)m(v)m(e)g(\014nished)e(using)g(AST,)g
-(so)i(is)f(normally)g(recommended.)45 b(F)-8 b(or)32
-b(more)g(details)h(of)f(this,)h(see)f Fu(x)p FG(4.10.)48
-b(F)-8 b(or)0 5517 y(details)31 b(of)g(ho)m(w)f(to)h(access)h(the)f
-(AST)p Fy(_)p FG(P)-8 b(AR)29 b(include)i(\014le,)f(see)h
-Fu(x)p FG(22.1.)p 0 5607 1512 4 v 104 5661 a Fs(4)138
-5693 y Fr(The)26 b(Starlink)g(Soft)n(w)n(are)g(Collection)i(can)e(b)r
-(e)f(do)n(wnloaded)i(from)f(h)n(ttp://www.starlink.ac.uk/Do)n(wnload/.)
-p eop end
-%%Page: 16 26
-TeXDict begin 16 25 bop 0 52 a FG(16)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y Fw(3.3)112 b(.)19 b(.)g(.)g(Build)38
-b(an)g(AST)f(Program)0 558 y FG(T)-8 b(o)31 b(build)e(a)i(simple)f(AST)
-g(program)g(that)h(do)s(esn't)f(use)g(graphics,)h(use:)227
-749 y Ft(f77)43 b(program.f)c(-L/star/lib)h(-I/star/include)d
-(`ast_link`)i(-o)k(program)0 954 y FG(On)33 b(Lin)m(ux)f(systems)i(y)m
-(ou)g(should)e(usually)h(use)g Fy(g77)47 b(-fno-second-underscore)28
-b FG(in)33 b(place)h(of)g Fy(f77)e FG(-)i(see)0 1067
-y(\\Soft)m(w)m(are)e(dev)m(elopmen)m(t)g(on)e(Lin)m(ux")g(in)g
-(SUN/212.)0 1215 y(T)-8 b(o)31 b(build)e(a)i(program)f(whic)m(h)g(uses)
-g(PGPLOT)g(for)g(graphics,)g(use:)227 1406 y Ft(f77)43
-b(program.f)c(-L/star/lib)h(`ast_link)f(-pgplot`)i(-o)h(program)0
-1611 y FG(again)31 b(using)f Fy(g77)47 b(-fno-second-underscore)25
-b FG(in)30 b(place)h(of)f Fy(f77)g FG(on)g(Lin)m(ux)g(systems.)0
-1759 y(F)-8 b(or)37 b(more)f(details)h(ab)s(out)f(accessing)h(AST)e
-(include)h(\014les,)i(see)e Fu(x)p FG(22.1.)60 b(F)-8
-b(or)36 b(more)h(details)g(ab)s(out)e(linking)0 1872
-y(programs,)30 b(see)h Fu(x)p FG(22.2)i(and)c(the)i(description)f(of)h
-(the)f(\\ast)p Fy(_)p FG(link")i(command)e(in)g(App)s(endix)f(E.)0
-2144 y Fw(3.4)112 b(.)19 b(.)g(.)g(Read)38 b(a)f(W)m(CS)h(Calibration)g
-(from)g(a)g(Dataset)0 2351 y FG(Precisely)27 b(ho)m(w)e(y)m(ou)h
-(extract)h(w)m(orld)f(co)s(ordinate)g(system)g(\(W)m(CS\))h
-(information)f(from)f(a)h(dataset)h(ob)m(viously)0 2464
-y(dep)s(ends)36 b(on)i(what)h(t)m(yp)s(e)f(of)g(dataset)i(it)e(is.)65
-b(Usually)-8 b(,)41 b(ho)m(w)m(ev)m(er,)h(y)m(ou)c(should)f(b)s(e)h
-(able)h(to)g(obtain)f(a)h(set)0 2577 y(of)33 b(FITS)f(header)h(cards)g
-(whic)m(h)f(con)m(tain)j(the)e(W)m(CS)g(information)g(\(and)f(probably)
-h(m)m(uc)m(h)g(more)g(b)s(esides\).)0 2690 y(Supp)s(ose)27
-b(that)i(CARDS)g(is)g(an)f(arra)m(y)i(of)f(c)m(haracter)h(strings)f
-(con)m(taining)h(a)f(complete)h(set)g(of)f(FITS)f(header)0
-2802 y(cards)i(and)g(NCARD)h(is)f(the)h(n)m(um)m(b)s(er)e(of)h(cards.)
-41 b(Then)29 b(pro)s(ceed)h(as)h(follo)m(ws:)262 2994
-y Ft(INTEGER)40 b(FITSCHAN,)g(ICARD,)h(NCARD,)g(WCSINFO)262
-3093 y(CHARACTER)e(*)44 b(\()f(80)f(\))i(CARDS\()d(NCARD)g(\))262
-3292 y(...)0 3492 y(*)87 b(Create)41 b(a)i(FitsChan)d(and)j(fill)f(it)g
-(with)g(FITS)g(header)f(cards.)262 3591 y(FITSCHAN)f(=)j
-(AST_FITSCHAN\()38 b(AST_NULL,)i(AST_NULL,)g(')j(',)g(STATUS)e(\))262
-3691 y(DO)h(1)h(ICARD)f(=)h(1,)g(NCARD)392 3791 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN,)h(CARDS\()h(ICARD)g(\),)i(.FALSE.,)d(STATUS)h(\))44
-3890 y(1)174 b(CONTINUE)0 4090 y(*)87 b(Rewind)41 b(the)h(FitsChan)e
-(and)j(read)f(WCS)g(information)d(from)j(it.)262 4189
-y(CALL)f(AST_CLEAR\()f(FITSCHAN,)g('Card',)g(STATUS)i(\))262
-4289 y(WCSINFO)e(=)j(AST_READ\()d(FITSCHAN,)g(STATUS)h(\))0
-4493 y FG(The)25 b(result)g(should)g(b)s(e)f(a)i(p)s(oin)m(ter,)h(W)m
-(CSINF)m(O,)f(to)g(a)g(F)-8 b(rameSet)26 b(whic)m(h)f(con)m(tains)i
-(the)f(W)m(CS)f(information.)0 4606 y(This)h(p)s(oin)m(ter)h(can)g(no)m
-(w)g(b)s(e)f(used)g(to)i(p)s(erform)d(man)m(y)i(useful)g(tasks,)h(some)
-f(of)g(whic)m(h)g(are)g(illustrated)h(in)e(the)0 4719
-y(follo)m(wing)32 b(recip)s(es.)0 4867 y(Some)j(datasets)i(whic)m(h)e
-(do)g(not)h(easily)h(yield)e(FITS)g(header)g(cards)g(ma)m(y)h(require)f
-(a)h(di\013eren)m(t)g(approac)m(h,)0 4980 y(p)s(ossibly)d(in)m(v)m
-(olving)i(use)f(of)f(a)i(Channel)d(or)i(XmlChan)f(\()p
-Fu(x)p FG(15\))j(rather)d(than)h(a)g(FitsChan.)51 b(In)33
-b(the)h(case)g(of)0 5093 y(the)h(Starlink)g(NDF)h(data)f(format,)i(for)
-d(example,)j(all)f(the)f(ab)s(o)m(v)m(e)h(ma)m(y)g(b)s(e)e(replaced)h
-(b)m(y)g(a)g(single)h(call)g(to)0 5206 y(the)e(routine)g(NDF)p
-Fy(_)p FG(GTW)m(CS|see)h(SUN/33.)52 b(The)33 b(whole)h(pro)s(cess)f
-(can)h(probably)f(b)s(e)g(encapsulated)i(in)0 5319 y(a)c(similar)f(w)m
-(a)m(y)i(for)e(most)h(other)f(data)h(systems,)g(whether)f(they)g(use)g
-(FITS)g(header)g(cards)g(or)h(not.)0 5467 y(F)-8 b(or)26
-b(more)g(details)h(ab)s(out)e(reading)h(W)m(CS)f(information)h(from)f
-(datasets,)j(see)e Fu(x)p FG(17.3)i(and)d Fu(x)p FG(17.4.)41
-b(F)-8 b(or)26 b(a)g(more)0 5580 y(general)37 b(description)f(of)g
-(FitsChans)f(and)h(their)f(use)h(with)g(FITS)f(header)g(cards,)j(see)e
-Fu(x)p FG(16)h(and)e Fu(x)p FG(17.)59 b(F)-8 b(or)0 5693
-y(more)31 b(details)g(ab)s(out)f(F)-8 b(rameSets,)32
-b(see)f Fu(x)p FG(13)g(and)f Fu(x)p FG(14.)p eop end
-%%Page: 17 27
-TeXDict begin 17 26 bop 0 52 a Fz(3.5)92 b(.)15 b(.)h(.)f(V)-8
-b(alidate)33 b(W)m(CS)d(Information)2295 b FG(17)0 351
-y Fw(3.5)112 b(.)19 b(.)g(.)g(V)-9 b(alidate)38 b(W)m(CS)f(Information)
-0 587 y FG(Once)d(y)m(ou)h(ha)m(v)m(e)h(read)e(W)m(CS)g(information)h
-(from)f(a)h(dataset,)i(as)d(in)g Fu(x)p FG(3.4,)j(y)m(ou)e(ma)m(y)g
-(wish)f(to)h(c)m(hec)m(k)h(that)0 700 y(y)m(ou)c(ha)m(v)m(e)h(b)s(een)e
-(successful.)45 b(The)31 b(follo)m(wing)j(will)e(detect)h(and)e
-(classify)i(the)f(things)f(that)i(migh)m(t)f(p)s(ossibly)0
-813 y(go)f(wrong:)262 1090 y Ft(IF)42 b(\()h(STATUS)f(.NE.)f(0)j(\))f
-(THEN)392 1190 y(<an)g(error)e(occurred)f(\(a)j(message)e(will)h(have)g
-(been)g(issued\)>)262 1289 y(ELSE)f(IF)i(\()g(WCSINFO)e(.EQ.)h
-(AST__NULL)e(\))j(THEN)392 1389 y(<there)e(was)i(no)f(WCS)h
-(information)c(present>)262 1489 y(ELSE)i(IF)i(\()g(AST_GETC\()d
-(WCSINFO,)h('Class',)f(STATUS)h(\))i(.NE.)f('FrameSet')d(\))44
-b(THEN)392 1588 y(<something)c(unexpected)f(was)k(read)e(\(i.e.)h(not)g
-(a)h(FrameSet\)>)262 1688 y(ELSE)392 1788 y(<WCS)f(information)d(was)k
-(read)f(OK>)262 1887 y(END)g(IF)0 2178 y FG(F)-8 b(or)34
-b(more)f(information)h(ab)s(out)f(detecting)h(errors)f(in)g(AST)f
-(routines,)i(see)g Fu(x)p FG(4.13.)51 b(F)-8 b(or)34
-b(details)g(of)g(ho)m(w)f(to)0 2291 y(v)-5 b(alidate)32
-b(input)d(data)i(read)g(b)m(y)f(AST,)g(see)h Fu(x)p FG(15.6)h(and)e
-Fu(x)p FG(17.4.)0 2616 y Fw(3.6)112 b(.)19 b(.)g(.)g(Displa)m(y)38
-b(AST)f(Data)0 2852 y FG(If)g(y)m(ou)h(ha)m(v)m(e)h(a)f(p)s(oin)m(ter)f
-(to)i(an)m(y)f(AST)e(Ob)5 b(ject,)40 b(y)m(ou)e(can)g(displa)m(y)g(the)
-g(data)g(stored)g(in)f(that)h(Ob)5 b(ject)38 b(in)0 2965
-y(textual)32 b(form)e(as)g(follo)m(ws:)262 3242 y Ft(CALL)41
-b(AST_SHOW\()f(WCSINFO,)h(STATUS)g(\))0 3533 y FG(Here,)28
-b(w)m(e)f(ha)m(v)m(e)h(used)e(a)h(p)s(oin)m(ter)f(to)i(the)e(F)-8
-b(rameSet)28 b(whic)m(h)f(w)m(e)g(read)f(earlier)i(\()p
-Fu(x)p FG(3.4\).)41 b(The)26 b(result)h(is)f(written)0
-3646 y(to)31 b(the)g(program's)f(standard)f(output)h(stream.)42
-b(This)29 b(can)i(b)s(e)f(v)m(ery)g(useful)g(during)f(debugging.)0
-3819 y(F)-8 b(or)40 b(more)g(details)g(ab)s(out)f(using)g(AST)p
-Fy(_)p FG(SHO)m(W,)g(see)h Fu(x)p FG(4.4.)69 b(F)-8 b(or)40
-b(information)f(ab)s(out)g(in)m(terpreting)h(the)0 3931
-y(output,)30 b(also)i(see)f Fu(x)p FG(15.8.)0 4257 y
-Fw(3.7)112 b(.)19 b(.)g(.)g(Con)m(v)m(ert)37 b(Bet)m(w)m(een)g(Pixel)g
-(and)i(W)-9 b(orld)37 b(Co)s(ordinates)0 4492 y FG(Y)-8
-b(ou)39 b(ma)m(y)h(use)f(a)g(p)s(oin)m(ter)g(to)h(a)f(F)-8
-b(rameSet,)43 b(suc)m(h)38 b(as)i(w)m(e)f(read)g(in)g
-Fu(x)p FG(3.4,)k(to)c(transform)g(a)g(set)g(of)h(p)s(oin)m(ts)0
-4605 y(b)s(et)m(w)m(een)h(the)f(pixel)h(co)s(ordinates)g(of)f(an)g
-(image)i(and)d(the)i(asso)s(ciated)h(w)m(orld)e(co)s(ordinates.)71
-b(If)39 b(y)m(ou)i(are)0 4718 y(w)m(orking)31 b(in)f(t)m(w)m(o)h
-(dimensions,)f(pro)s(ceed)g(as)h(follo)m(ws:)262 4996
-y Ft(INTEGER)40 b(N)262 5095 y(DOUBLE)h(PRECISION)e(XPIXEL\()i(N)i(\),)
-g(YPIXEL\()e(N)i(\))262 5195 y(DOUBLE)e(PRECISION)e(XWORLD\()i(N)i(\),)
-g(YWORLD\()e(N)i(\))262 5394 y(...)262 5593 y(CALL)e(AST_TRAN2\()f
-(WCSINFO,)g(N,)j(XPIXEL,)e(YPIXEL,)f(.TRUE.,)218 5693
-y(:)1220 b(XWORLD,)41 b(YWORLD,)f(STATUS)h(\))p eop end
-%%Page: 18 28
-TeXDict begin 18 27 bop 0 52 a FG(18)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FG(Here,)31 b(N)g(is)f(the)h(n)m(um)m(b)s(er)e
-(of)i(p)s(oin)m(ts)f(to)h(b)s(e)f(transformed,)g(XPIXEL)g(and)g(YPIXEL)
-g(hold)g(the)h(pixel)g(co)s(or-)0 464 y(dinates,)i(and)f(XW)m(ORLD)i
-(and)d(YW)m(ORLD)j(receiv)m(e)g(the)f(returned)e(w)m(orld)h(co)s
-(ordinates.)3169 431 y Fv(5)3256 464 y FG(T)-8 b(o)33
-b(transform)0 577 y(in)c(the)g(opp)s(osite)h(direction,)g(in)m(terc)m
-(hange)h(the)e(t)m(w)m(o)i(pairs)d(of)i(arra)m(ys)f(\(so)h(that)g(the)f
-(w)m(orld)g(co)s(ordinates)h(are)0 690 y(giv)m(en)h(as)g(input\))f(and)
-g(c)m(hange)h(the)g(\014fth)e(argumen)m(t)i(of)f(AST)p
-Fy(_)p FG(TRAN2)g(to)h(.F)-10 b(ALSE..)0 876 y(T)i(o)35
-b(transform)f(p)s(oin)m(ts)h(in)f(one)h(dimension,)g(use)f(AST)p
-Fy(_)p FG(TRAN1.)53 b(In)34 b(an)m(y)h(other)g(n)m(um)m(b)s(er)e(of)i
-(dimensions)0 989 y(\(or)j(if)g(the)g(n)m(um)m(b)s(er)f(of)h
-(dimensions)f(is)h(initially)i(unkno)m(wn\),)f(use)e(AST)p
-Fy(_)p FG(TRANN.)h(These)f(routines)h(are)0 1102 y(describ)s(ed)29
-b(in)h(App)s(endix)f(B.)0 1289 y(F)-8 b(or)30 b(more)f(information)h
-(ab)s(out)f(transforming)g(co)s(ordinates,)h(see)g Fu(x)p
-FG(4.8)h(and)d Fu(x)p FG(13.6.)43 b(F)-8 b(or)30 b(details)g(of)f(ho)m
-(w)h(to)0 1401 y(handle)g(missing)g(co)s(ordinates,)i(see)e
-Fu(x)p FG(5.8.)0 1774 y Fw(3.8)112 b(.)19 b(.)g(.)g(T)-9
-b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Celestial)g(Co)s(ordinate)g
-(System)0 2030 y FG(The)25 b(w)m(orld)g(co)s(ordinate)h(system)f(\(W)m
-(CS\))h(curren)m(tly)f(asso)s(ciated)i(with)e(an)g(image)h(ma)m(y)g
-(often)g(b)s(e)e(a)i(celestial)0 2143 y(co)s(ordinate)42
-b(system,)i(but)d(this)g(need)f(not)i(necessarily)g(b)s(e)e(the)i
-(case.)74 b(F)-8 b(or)42 b(instance,)i(instead)e(of)f(righ)m(t)0
-2256 y(ascension)31 b(and)f(declination,)j(an)d(image)i(migh)m(t)g(ha)m
-(v)m(e)g(a)f(W)m(CS)f(with)h(axes)g(represen)m(ting)g(w)m(a)m(v)m
-(elength)i(and)0 2369 y(slit)e(p)s(osition,)g(or)f(ma)m(yb)s(e)h(just)e
-(plain)i(old)f(pixels.)0 2555 y(If)43 b(y)m(ou)h(ha)m(v)m(e)h(obtained)
-e(a)h(W)m(CS)g(calibration)h(for)e(an)g(image,)49 b(as)43
-b(in)h Fu(x)p FG(3.4,)k(in)43 b(the)h(form)f(of)h(a)f(p)s(oin)m(ter)0
-2668 y(W)m(CSINF)m(O)25 b(to)g(a)g(F)-8 b(rameSet,)26
-b(then)e(y)m(ou)h(ma)m(y)g(determine)f(if)h(the)f(curren)m(t)g(co)s
-(ordinate)h(system)g(is)f(a)h(celestial)0 2781 y(one)31
-b(or)f(not,)h(as)g(follo)m(ws:)262 3101 y Ft(INTEGER)40
-b(FRAME)262 3201 y(LOGICAL)g(ISSKY)262 3400 y(...)0 3599
-y(*)87 b(Obtain)41 b(a)i(pointer)e(to)h(the)h(current)e(Frame)g(and)h
-(determine)e(if)j(it)g(is)g(a)0 3699 y(*)87 b(SkyFrame.)262
-3798 y(FRAME)41 b(=)i(AST_GETFRAME\()38 b(WCSINFO,)j(AST__CURRENT,)d
-(STATUS)j(\))262 3898 y(ISSKY)g(=)i(AST_ISASKYFRAME\()37
-b(FRAME,)k(STATUS)g(\))262 3998 y(CALL)g(AST_ANNUL\()f(FRAME,)h(STATUS)
-g(\))0 4331 y FG(This)c(will)h(set)g(ISSKY)e(to)i(.TR)m(UE.)g(if)g(the)
-f(W)m(CS)h(is)f(a)h(celestial)i(co)s(ordinate)f(system,)g(and)e(to)h
-(.F)-10 b(ALSE.)0 4444 y(otherwise.)0 4816 y Fw(3.9)112
-b(.)19 b(.)g(.)g(T)-9 b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Sp)s
-(ectral)g(Co)s(ordinate)g(System)0 5073 y FG(T)-8 b(esting)26
-b(for)f(a)g(sp)s(ectral)g(co)s(ordinate)h(system)f(is)g(basically)i
-(the)e(same)g(as)h(testing)g(for)f(a)g(celestial)j(co)s(ordinate)0
-5186 y(system)23 b(\(see)h(the)e(previous)h(section\).)39
-b(The)23 b(one)g(di\013erence)g(is)g(that)g(y)m(ou)g(use)f(the)h(AST)p
-Fy(_)p FG(ISASPECFRAME)0 5298 y(routine)30 b(in)g(place)i(of)e(the)h
-(AST)p Fy(_)p FG(ISASKYFRAME)e(routine.)p 0 5425 1512
-4 v 104 5479 a Fs(5)138 5510 y Fr(By)f(pixel)g(co)r(ordinates,)j(w)n(e)
-e(mean)f(a)h(co)r(ordinate)g(system)f(in)g(whic)n(h)h(the)e(\014rst)h
-(pixel)h(in)f(the)g(image)h(is)g(cen)n(tred)e(on)i(\(1,1\))0
-5602 y(and)c(eac)n(h)g(pixel)g(is)g(a)h(unit)e(square.)35
-b(Note)25 b(that)f(the)h(w)n(orld)h(co)r(ordinates)g(will)g(not)f
-(necessarily)i(b)r(e)e(celestial)h(co)r(ordinates,)h(but)0
-5693 y(if)f(they)f(are,)i(then)e(they)g(will)i(b)r(e)e(in)h(radians.)p
-eop end
-%%Page: 19 29
-TeXDict begin 19 28 bop 0 52 a Fz(3.10)93 b(.)15 b(.)g(.)h(F)-8
-b(ormat)31 b(Co)s(ordinates)g(for)f(Displa)m(y)2052 b
-FG(19)0 351 y Fw(3.10)112 b(.)19 b(.)g(.)g(F)-9 b(ormat)38
-b(Co)s(ordinates)g(for)f(Displa)m(y)0 572 y FG(Once)44
-b(y)m(ou)g(ha)m(v)m(e)h(con)m(v)m(erted)h(pixel)e(co)s(ordinates)g(in)m
-(to)h(w)m(orld)f(co)s(ordinates)h(\()p Fu(x)p FG(3.7\),)k(y)m(ou)c(ma)m
-(y)f(w)m(an)m(t)h(to)0 685 y(format)35 b(them)g(as)g(text)g(b)s(efore)g
-(displa)m(ying)g(them.)54 b(T)m(ypically)-8 b(,)37 b(this)e(w)m(ould)f
-(con)m(v)m(ert)j(from)d(\(sa)m(y\))i(radians)0 798 y(in)m(to)d
-(something)g(more)g(comprehensible.)47 b(Using)32 b(the)h(F)-8
-b(rameSet)34 b(p)s(oin)m(ter)e(W)m(CSINF)m(O)h(obtained)g(in)f
-Fu(x)p FG(3.4)0 911 y(and)e(a)h(pair)f(of)g(w)m(orld)g(co)s(ordinates)i
-(XW)e(and)g(YW)h(\()p Fx(e.g.)f FG(see)h Fu(x)p FG(3.7\),)i(y)m(ou)d
-(could)h(pro)s(ceed)f(as)g(follo)m(ws:)262 1156 y Ft(CHARACTER)39
-b(*)44 b(\()f(20)f(\))i(XTEXT,)d(YTEXT)262 1256 y(DOUBLE)g(PRECISION)e
-(XW,)k(YW)262 1455 y(...)262 1655 y(XTEXT)e(=)i(AST_FORMAT\()c
-(WCSINFO,)i(1,)h(XW,)h(STATUS)e(\))262 1754 y(YTEXT)g(=)i(AST_FORMAT\()
-c(WCSINFO,)i(2,)h(YW,)h(STATUS)e(\))262 1954 y(WRITE)g(\()i(*,)g(199)f
-(\))h(XTEXT,)f(YTEXT)44 2053 y(199)86 b(FORMAT\()40 b('Position)g(=)j
-(',)g(A,)g(',)g(',)f(A)h(\))0 2312 y FG(Here,)31 b(the)g(second)f
-(argumen)m(t)h(to)g(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)30
-b(is)h(the)f(axis)h(n)m(um)m(b)s(er.)0 2474 y(With)d(celestial)i(co)s
-(ordinates,)e(this)g(will)f(usually)g(result)g(in)g(sexagesimal)j
-(notation,)f(suc)m(h)e(as)g(\\12:34:56.7".)0 2587 y(Ho)m(w)m(ev)m(er,)e
-(the)c(same)h(metho)s(d)e(ma)m(y)i(b)s(e)e(applied)h(to)h(an)m(y)f(t)m
-(yp)s(e)g(of)g(co)s(ordinates)h(and)f(appropriate)g(formatting)0
-2700 y(will)31 b(b)s(e)e(emplo)m(y)m(ed.)0 2862 y(F)-8
-b(or)36 b(more)g(information)g(ab)s(out)f(formatting)h(co)s(ordinate)g
-(v)-5 b(alues)36 b(and)f(ho)m(w)g(to)i(con)m(trol)f(the)g(st)m(yle)h
-(of)e(for-)0 2975 y(matting)27 b(used,)f(see)h Fu(x)p
-FG(7.6)g(and)e Fu(x)p FG(8.6.)41 b(If)25 b(necessary)-8
-b(,)28 b(also)f(see)f Fu(x)p FG(7.7)i(for)d(details)i(of)f(ho)m(w)g(to)
-g(\\normalise")i(a)e(set)0 3088 y(of)31 b(co)s(ordinates)g(so)g(that)g
-(they)f(lie)i(within)e(the)g(standard)g(range)h(\()p
-Fx(e.g.)f FG(0)h(to)g(24)g(hours)f(for)g(righ)m(t)h(ascension)0
-3201 y(and)f Fu(\006)p FG(90)338 3168 y Fq(\016)408 3201
-y FG(for)g(declination\).)0 3493 y Fw(3.11)112 b(.)19
-b(.)g(.)g(Displa)m(y)38 b(Co)s(ordinates)h(as)f(they)f(are)h(T)-9
-b(ransformed)0 3713 y FG(In)41 b(addition)h(to)g(formatting)g(co)s
-(ordinates)g(as)g(part)g(of)f(a)h(program's)g(output,)i(y)m(ou)e(ma)m
-(y)g(also)g(w)m(an)m(t)h(to)0 3826 y(examine)35 b(co)s(ordinate)f(v)-5
-b(alues)34 b(while)g(debugging)g(y)m(our)g(program.)51
-b(T)-8 b(o)34 b(sa)m(v)m(e)i(time,)f(y)m(ou)f(can)g(\\ea)m(v)m(esdrop")
-0 3939 y(on)e(the)g(co)s(ordinate)h(v)-5 b(alues)33 b(b)s(eing)f(pro)s
-(cessed)f(ev)m(ery)i(time)g(they)f(are)h(transformed.)45
-b(F)-8 b(or)33 b(example,)g(when)0 4052 y(using)38 b(the)g(F)-8
-b(rameSet)40 b(p)s(oin)m(ter)e(W)m(CSINF)m(O)h(obtained)g(in)f
-Fu(x)p FG(3.4)i(to)f(transform)e(co)s(ordinates)i(\()p
-Fu(x)p FG(3.7\),)k(y)m(ou)0 4165 y(could)30 b(insp)s(ect)h(the)f(co)s
-(ordinate)h(v)-5 b(alues)31 b(as)g(follo)m(ws:)262 4411
-y Ft(CALL)41 b(AST_SET\()g(WCSINFO,)f('Report=1',)f(STATUS)i(\))262
-4511 y(CALL)g(AST_TRAN2\()f(WCSINFO,)g(N,)j(XPIXEL,)e(YPIXEL,)f
-(.TRUE.,)218 4610 y(:)1220 b(XWORLD,)41 b(YWORLD,)f(STATUS)h(\))0
-4869 y FG(By)32 b(setting)h(the)f(F)-8 b(rameSet's)33
-b(Rep)s(ort)e(attribute)h(to)h(1,)f(co)s(ordinate)h(transformations)f
-(are)g(automatically)0 4982 y(displa)m(y)m(ed)f(on)f(the)h(program's)f
-(standard)g(output)g(stream,)h(appropriately)f(formatted,)h(for)g
-(example:)227 5241 y Fy(\(42.1087,)46 b(20.2717\))f(-->)i(\(2:06:03.0,)
-e(34:22:39\))227 5354 y(\(43.0197,)h(21.1705\))f(-->)i(\(2:08:20.6,)e
-(35:31:24\))227 5467 y(\(43.9295,)h(22.0716\))f(-->)i(\(2:10:38.1,)e
-(36:40:09\))227 5580 y(\(44.8382,)h(22.9753\))f(-->)i(\(2:12:55.6,)e
-(37:48:55\))227 5693 y(\(45.7459,)h(23.8814\))f(-->)i(\(2:15:13.1,)e
-(38:57:40\))p eop end
-%%Page: 20 30
-TeXDict begin 20 29 bop 0 52 a FG(20)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Fy(\(46.6528,)46 b(24.7901\))f(-->)i
-(\(2:17:30.6,)e(40:06:25\))227 464 y(\(47.5589,)h(25.7013\))f(-->)i
-(\(2:19:48.1,)e(41:15:11\))227 577 y(\(48.4644,)h(26.6149\))f(-->)i
-(\(2:22:05.6,)e(42:23:56\))227 690 y(\(49.3695,)h(27.5311\))f(-->)i
-(\(2:24:23.1,)e(43:32:41\))227 803 y(\(50.2742,)h(28.4499\))f(-->)i
-(\(2:26:40.6,)e(44:41:27\))0 1074 y FG(F)-8 b(or)38 b(a)f(complete)h
-(description)f(of)g(the)g(Rep)s(ort)f(attribute,)k(see)d(its)g(en)m
-(try)g(in)g(App)s(endix)e(C.)59 b(F)-8 b(or)38 b(further)0
-1187 y(details)31 b(of)g(ho)m(w)f(to)h(set)g(and)f(enquire)g(attribute)
-h(v)-5 b(alues,)31 b(see)g Fu(x)p FG(4.6)h(and)e Fu(x)p
-FG(4.5.)0 1490 y Fw(3.12)112 b(.)19 b(.)g(.)g(Read)38
-b(Co)s(ordinates)g(En)m(tered)f(b)m(y)h(a)f(User)0 1716
-y FG(In)c(addition)g(to)h(writing)g(out)f(co)s(ordinate)h(v)-5
-b(alues)34 b(generated)g(b)m(y)g(y)m(our)f(program)g(\()p
-Fu(x)p FG(3.10\),)k(y)m(ou)d(ma)m(y)g(also)0 1829 y(need)c(to)h(accept)
-h(co)s(ordinates)f(en)m(tered)g(b)m(y)f(a)h(user,)f(or)g(p)s(erhaps)f
-(read)h(from)g(a)h(\014le.)41 b(In)29 b(this)i(case,)g(y)m(ou)g(will)0
-1942 y(probably)g(w)m(an)m(t)i(to)g(allo)m(w)g(\\free-format")h(input,)
-d(so)h(that)h(the)f(user)f(has)h(some)g(\015exibilit)m(y)h(in)f(the)g
-(format)0 2055 y(that)f(can)g(b)s(e)e(used.)40 b(Y)-8
-b(ou)31 b(will)g(probably)e(also)j(w)m(an)m(t)f(to)g(detect)h(an)m(y)f
-(t)m(yping)f(errors.)0 2220 y(Let's)f(assume)g(that)g(y)m(ou)g(w)m(an)m
-(t)h(to)f(read)g(a)g(n)m(um)m(b)s(er)e(of)i(lines)g(of)g(text,)h(eac)m
-(h)g(con)m(taining)h(the)d(w)m(orld)h(co)s(ordi-)0 2333
-y(nates)g(of)g(a)g(single)g(p)s(oin)m(t,)g(and)f(to)h(split)g(eac)m(h)g
-(line)g(in)m(to)h(individual)d(n)m(umerical)i(co)s(ordinate)h(v)-5
-b(alues.)40 b(Using)0 2446 y(the)31 b(F)-8 b(rameSet)31
-b(p)s(oin)m(ter)g(W)m(CSINF)m(O)f(obtained)h(earlier)g(\()p
-Fu(x)p FG(3.4\),)i(y)m(ou)e(could)f(pro)s(ceed)h(as)f(follo)m(ws:)262
-2704 y Ft(CHARACTER)39 b(TEXT)j(*)h(\()h(80)e(\))262
-2804 y(DOUBLE)f(PRECISION)e(COORD\()j(10)g(\))262 2903
-y(INTEGER)e(IAXIS,)h(N,)i(NAXES,)e(T)262 3103 y(...)0
-3302 y(*)87 b(Obtain)41 b(the)h(number)f(of)i(coordinate)d(axes)h(\(if)
-i(not)f(already)f(known\).)262 3402 y(NAXES)g(=)i(AST_GETI\()d
-(WCSINFO,)g('Naxes',)h(STATUS)g(\))0 3601 y(*)87 b(Loop)42
-b(to)g(read)g(each)g(line)g(of)h(input)f(text,)f(in)i(this)f(case)g
-(from)g(the)0 3700 y(*)87 b(standard)40 b(input)i(channel)e(\(your)i
-(programming)d(environment)g(will)j(probably)0 3800 y(*)87
-b(provide)40 b(a)k(better)d(way)h(of)h(reading)e(text)g(than)h(this\).)
-f(Set)i(the)f(index)g(T)h(to)0 3900 y(*)87 b(the)42 b(start)g(of)g
-(each)g(line)g(read.)44 3999 y(2)174 b(CONTINUE)262 4099
-y(READ\()41 b(*,)i('\(A\)',)e(END=99)g(\))i(TEXT)262
-4199 y(T)g(=)g(1)0 4398 y(*)87 b(Attempt)40 b(to)j(read)f(a)h
-(coordinate)d(for)i(each)g(axis.)262 4497 y(DO)g(3)h(IAXIS)f(=)h(1,)g
-(NAXES)392 4597 y(N)g(=)h(AST_UNFORMAT\()38 b(WCSINFO,)i(IAXIS,)h
-(TEXT\()h(T)h(:)g(\),)g(COORD\()e(IAXIS)g(\),)218 4697
-y(:)915 b(STATUS)41 b(\))0 4896 y(*)87 b(If)43 b(nothing)d(was)j(read)e
-(and)i(this)f(is)h(not)f(the)g(first)g(axis)g(and)g(the)g(end)h(of)0
-4996 y(*)87 b(the)42 b(text)g(has)g(not)h(been)f(reached,)e(try)i
-(stepping)f(over)g(a)j(separator)c(and)0 5095 y(*)87
-b(reading)40 b(again.)392 5195 y(IF)j(\()g(\()g(N)h(.EQ.)d(0)j(\))f
-(.AND.)e(\()j(IAXIS)d(.GT.)h(1)h(\))g(.AND.)218 5295
-y(:)348 b(\()43 b(T)h(.LT.)d(LEN\()h(STRING)g(\))h(\))g(\))g(THEN)523
-5394 y(T)g(=)g(T)h(+)f(1)523 5494 y(N)g(=)g(AST_UNFORMAT\()c(WCSINFO,)h
-(IAXIS,)h(TEXT\()g(T)j(:)f(\),)1308 5593 y(COORD\()e(IAXIS)g(\),)i
-(STATUS)e(\))392 5693 y(END)i(IF)p eop end
-%%Page: 21 31
-TeXDict begin 21 30 bop 0 52 a Fz(3.13)93 b(.)15 b(.)g(.)h(Create)31
-b(a)g(New)f(W)m(CS)h(Calibration)2055 b FG(21)0 451 y
-Ft(*)87 b(Quit)42 b(if)g(nothing)f(was)h(read,)g(otherwise)e(move)i(on)
-h(to)f(the)h(next)f(coordinate.)392 551 y(IF)h(\()g(N)g(.EQ.)f(0)h(\))h
-(GO)e(TO)h(4)392 650 y(T)g(=)h(T)f(+)g(N)44 750 y(3)174
-b(CONTINUE)44 849 y(4)g(CONTINUE)0 1049 y(*)87 b(Test)42
-b(for)g(the)g(possible)f(errors)g(that)h(may)g(occur...)0
-1248 y(*)87 b(Error)41 b(detected)g(by)h(AST)h(\(a)f(message)f(will)h
-(have)g(been)g(issued\).)262 1348 y(IF)g(\()h(STATUS)f(.NE.)f(0)j(\))f
-(THEN)392 1447 y(GO)g(TO)g(99)0 1646 y(*)87 b(Error)41
-b(in)i(input)f(data)f(at)i(character)d(TEXT\()i(T)h(+)g(N)g(:)g(T)g(+)h
-(N)f(\).)262 1746 y(ELSE)e(IF)i(\()g(\()h(T)f(.LT.)f(LEN\()g(STRING)f
-(\))i(\))g(.OR.)f(\()h(N)g(.EQ.)f(0)h(\))h(\))f(THEN)392
-1846 y(<handle)e(the)h(error,)f(or)i(report)e(your)h(own)h(message)d
-(here>)392 1945 y(GO)j(TO)g(99)262 2145 y(ELSE)392 2244
-y(<coordinates)c(were)j(read)g(OK>)262 2344 y(END)g(IF)0
-2543 y(*)87 b(Return)41 b(to)i(read)f(the)g(next)g(input)f(line.)262
-2643 y(GO)h(TO)h(2)44 2742 y(99)130 b(CONTINUE)0 3034
-y FG(This)24 b(algorithm)i(has)f(the)g(adv)-5 b(an)m(tage)27
-b(of)e(accepting)i(free-format)f(input)e(in)g(whatev)m(er)i(st)m(yle)g
-(is)f(appropriate)0 3147 y(for)i(the)h(w)m(orld)g(co)s(ordinates)g(in)f
-(use)h(\(under)e(the)i(con)m(trol)h(of)f(the)g(F)-8 b(rameSet)29
-b(whose)e(p)s(oin)m(ter)h(y)m(ou)g(pro)m(vide\).)0 3259
-y(F)-8 b(or)23 b(example,)i(w)m(a)m(v)m(elength)f(v)-5
-b(alues)23 b(migh)m(t)f(b)s(e)g(read)g(as)g(\015oating)h(p)s(oin)m(t)g
-(n)m(um)m(b)s(ers)d(\()p Fx(e.g.)i FG(\\1.047")j(or)d(\\4787"\),)0
-3372 y(whereas)33 b(celestial)j(p)s(ositions)e(could)f(b)s(e)g(giv)m
-(en)i(in)e(sexagesimal)i(format)f(\()p Fx(e.g.)f FG(\\12:34:56")38
-b(or)33 b(\\12)i(34.5"\))0 3485 y(and)d(w)m(ould)h(b)s(e)f(con)m(v)m
-(erted)i(in)m(to)g(radians.)48 b(Individual)32 b(co)s(ordinate)h(v)-5
-b(alues)34 b(ma)m(y)f(b)s(e)f(separated)i(b)m(y)e(white)0
-3598 y(space)f(and/or)f(an)m(y)h(non-am)m(biguous)f(separator)h(c)m
-(haracter,)h(suc)m(h)e(as)h(a)g(comma.)0 3771 y(F)-8
-b(or)34 b(more)g(information)f(on)g(reading)h(co)s(ordinate)g(v)-5
-b(alues)34 b(using)f(the)g(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)34 b(function,)g(see)0 3884 y Fu(x)p FG(7.8.)50 b(F)-8
-b(or)34 b(details)g(of)g(ho)m(w)f(sexagesimal)i(formats)e(are)h
-(handled,)f(and)f(the)i(forms)e(of)i(input)e(that)h(ma)m(y)h(b)s(e)0
-3996 y(used)c(for)g(for)g(celestial)j(co)s(ordinates,)e(see)g
-Fu(x)p FG(8.7.)0 4322 y Fw(3.13)112 b(.)19 b(.)g(.)g(Create)37
-b(a)h(New)f(W)m(CS)g(Calibration)0 4558 y FG(This)29
-b(section)h(describ)s(es)f(ho)m(w)g(to)h(add)f(a)h(W)m(CS)f
-(calibration)i(to)f(a)g(data)g(set)g(whic)m(h)f(y)m(ou)g(are)h
-(creating)h(from)0 4671 y(scratc)m(h,)h(rather)e(than)g(mo)s(difying)g
-(an)g(existing)h(data)g(set.)0 4843 y(In)d(most)g(common)h(cases,)h
-(the)e(simplest)g(w)m(a)m(y)i(to)f(create)g(a)g(new)f(W)m(CS)g
-(calibration)i(from)e(scratc)m(h)h(is)f(prob-)0 4956
-y(ably)i(to)h(create)h(a)e(set)h(of)f(strings)g(describing)g(the)g
-(required)g(calibration)h(in)f(terms)g(of)g(the)h(k)m(eyw)m(ords)f
-(used)0 5069 y(b)m(y)k(the)g(FITS)g(W)m(CS)g(standard,)g(and)g(then)g
-(con)m(v)m(ert)h(these)g(strings)f(in)m(to)h(an)f(AST)f(F)-8
-b(rameSet)36 b(describing)0 5182 y(the)d(calibration.)48
-b(This)32 b(F)-8 b(rameSet)33 b(can)g(then)f(b)s(e)g(used)g(for)g(man)m
-(y)h(other)f(purp)s(oses,)g(or)g(simply)g(stored)h(in)0
-5295 y(the)e(data)g(set.)0 5467 y(The)h(full)h(FITS-W)m(CS)g(standard)f
-(is)h(quite)g(in)m(v)m(olv)m(ed,)j(curren)m(tly)d(running)e(to)i(four)g
-(separate)h(pap)s(ers,)e(but)0 5580 y(the)42 b(basic)g(k)m(ernel)g(is)g
-(quite)g(simple,)j(in)m(v)m(olving)e(the)f(follo)m(wing)i(k)m(eyw)m
-(ords)e(\(all)h(of)f(whic)m(h)f(end)g(with)h(an)0 5693
-y(in)m(teger)32 b(axis)f(index,)f(indicated)h(b)s(elo)m(w)f(b)m(y)h
-Fp(<)25 b(i)g(>)p FG(\):)p eop end
-%%Page: 22 32
-TeXDict begin 22 31 bop 0 52 a FG(22)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FE(CRPIX<i>)227 464 y FG(hold)30
-b(the)h(pixel)g(co)s(ordinates)g(at)g(a)g(reference)f(p)s(oin)m(t)0
-652 y FE(CR)-12 b(V)g(AL<i>)227 765 y FG(hold)30 b(the)h(corresp)s
-(onding)e(W)m(CS)i(co)s(ordinates)g(at)g(the)f(reference)h(p)s(oin)m(t)
-0 953 y FE(CTYPE<i>)227 1065 y FG(name)i(the)f(quan)m(tit)m(y)h
-(represen)m(ted)f(b)m(y)h(the)f(W)m(CS)g(axes,)i(together)f(with)f(the)
-h(pro)5 b(jection)32 b(algorithm)227 1178 y(used)e(to)h(con)m(v)m(ert)h
-(the)e(scaled)i(and)d(rotated)j(pixel)f(co)s(ordinates)g(to)g(W)m(CS)f
-(co)s(ordinates.)0 1366 y FE(CD<i>)p Fy(_)p FE(<j>)227
-1479 y FG(a)i(set)g(of)f(k)m(eyw)m(ords)h(whic)m(h)e(sp)s(ecify)h(the)h
-(elemen)m(ts)g(of)g(a)f(matrix.)44 b(This)30 b(matrix)i(scales)g(pixel)
-g(o\013sets)227 1592 y(from)41 b(the)f(reference)i(p)s(oin)m(t)e(in)m
-(to)i(the)f(o\013sets)h(required)e(as)h(input)e(b)m(y)i(the)g(pro)5
-b(jection)41 b(algorithm)227 1705 y(sp)s(eci\014ed)e(b)m(y)g(the)h
-(CTYPE)e(k)m(eyw)m(ords.)68 b(This)39 b(matrix)g(sp)s(eci\014es)g(the)h
-(scale)g(and)f(rotation)i(of)e(the)227 1818 y(image.)63
-b(If)36 b(there)i(is)f(no)g(rotation)h(the)g(o\013-diagonal)h(elemen)m
-(ts)g(of)e(the)g(matrix)h(\()p Fx(e.g.)60 b FG(CD1)p
-Fy(_)p FG(2)38 b(and)227 1931 y(CD2)p Fy(_)p FG(1\))32
-b(can)e(b)s(e)g(omitted.)0 2193 y(As)37 b(an)h(example)g(consider)f
-(the)h(common)g(case)g(of)g(a)g(simple)f(2D)i(image)g(of)e(the)h(sky)f
-(in)g(whic)m(h)h(north)e(is)0 2306 y(parallel)f(to)f(the)g(second)g
-(pixel)g(axis)g(and)f(east)i(parallel)f(to)h(the)f(\(negativ)m(e\))i
-(\014rst)d(pixel)h(axis.)51 b(The)33 b(image)0 2419 y(scale)27
-b(is)f(1.2)h(arc-seconds)f(p)s(er)f(pixel)h(on)f(b)s(oth)g(axes,)j(and)
-d(the)h(image)h(is)f(presumed)e(to)i(ha)m(v)m(e)h(b)s(een)e(obtained)0
-2532 y(with)35 b(a)h(tangen)m(t)g(plane)f(pro)5 b(jection.)56
-b(F)-8 b(urthermore,)37 b(it)f(is)f(kno)m(wn)g(that)g(pixel)h(co)s
-(ordinates)g(\(100.5,98.4\))0 2645 y(corresp)s(ond)31
-b(to)j(an)e(RA)h(of)f(11:00:10)k(and)c(a)h(Dec.)48 b(of)33
-b(-23:26:02.)51 b(A)33 b(suitable)g(set)g(of)f(FITS-W)m(CS)h(header)0
-2758 y(cards)d(could)h(b)s(e:)227 3007 y Ft(CTYPE1)85
-b(=)43 b('RA---TAN')301 b(/)43 b(Axis)f(1)h(represents)d(RA)j(with)f(a)
-h(tan)f(projection)227 3107 y(CTYPE2)85 b(=)43 b('DEC--TAN')301
-b(/)43 b(Axis)f(2)h(represents)d(Dec)i(with)g(a)h(tan)g(projection)227
-3206 y(CRPIX1)85 b(=)43 b(100.5)521 b(/)43 b(Pixel)f(coordinates)d(of)k
-(reference)c(point)227 3306 y(CRPIX2)85 b(=)43 b(98.4)565
-b(/)43 b(Pixel)f(coordinates)d(of)k(reference)c(point)227
-3406 y(CRVAL1)85 b(=)43 b(165.04167)345 b(/)43 b(Degrees)e(equivalent)e
-(of)k("11:00:10")d(hours)227 3505 y(CRVAL2)85 b(=)43
-b(-23.433889)301 b(/)43 b(Decimal)e(equivalent)e(of)k("-23:26:02")c
-(degrees)227 3605 y(CD1_1)129 b(=)43 b(-0.0003333333)169
-b(/)43 b(Decimal)e(degrees)g(equivalent)e(of)k(-1.2)f(arc-seconds)227
-3704 y(CD2_2)129 b(=)43 b(0.0003333333)213 b(/)43 b(Decimal)e(degrees)g
-(equivalent)e(of)k(1.2)f(arc-seconds)0 3967 y FG(Notes:)136
-4204 y Fu(\017)k FG(a)37 b(FITS)f(header)g(card)h(b)s(egins)f(with)g
-(the)g(k)m(eyw)m(ord)h(name)g(starting)g(at)g(column)g(1,)h(has)f(an)f
-(equals)227 4317 y(sign)31 b(in)f(column)g(9,)h(and)f(the)g(k)m(eyw)m
-(ord)h(v)-5 b(alue)31 b(in)f(columns)g(11)h(to)g(80.)136
-4505 y Fu(\017)46 b FG(string)31 b(v)-5 b(alues)30 b(m)m(ust)h(b)s(e)e
-(enclosed)i(in)f(single)h(quotes.)136 4693 y Fu(\017)46
-b FG(celestial)33 b(longitude)e(and)f(latitude)h(m)m(ust)g(b)s(oth)e(b)
-s(e)h(sp)s(eci\014ed)g(in)g(decimal)h(degrees.)136 4881
-y Fu(\017)46 b FG(the)28 b(CD1)p Fy(_)p FG(1)g(v)-5 b(alue)29
-b(is)e(negativ)m(e)j(to)f(indicate)f(that)h(RA)e(increases)i(as)e(the)h
-(\014rst)f(pixel)h(axis)g(decreases.)136 5068 y Fu(\017)46
-b FG(the)31 b(\(RA,Dec\))h(co)s(ordinates)g(will)e(b)s(e)g(tak)m(en)h
-(as)g(ICRS)e(co)s(ordinates.)42 b(F)-8 b(or)31 b(FK5)g(y)m(ou)f(should)
-g(add:)427 5268 y Ft(RADESYS)41 b(=)i('FK5')427 5367
-y(EQUINOX)e(=)i(2005.6)227 5580 y FG(The)38 b(EQUINO)m(X)f(v)-5
-b(alue)39 b(defaults)e(to)i(J2000.0)h(if)d(omitted.)64
-b(FK4)38 b(can)g(also)h(b)s(e)e(used)g(in)h(place)g(of)227
-5693 y(FK5,)31 b(in)f(whic)m(h)g(case)i(EQUINO)m(X)e(defaults)h(to)g
-(B1950.0.)p eop end
-%%Page: 23 33
-TeXDict begin 23 32 bop 0 52 a Fz(3.14)93 b(.)15 b(.)g(.)h(Mo)s(dify)30
-b(a)h(W)m(CS)f(Calibration)2240 b FG(23)0 351 y(Once)21
-b(y)m(ou)g(ha)m(v)m(e)h(created)g(these)f(FITS-W)m(CS)g(header)f(card)h
-(strings,)i(y)m(ou)e(should)f(store)h(them)g(in)f(a)i(FitsChan)0
-464 y(and)33 b(then)g(read)g(the)h(corresp)s(onding)e(F)-8
-b(rameSet)34 b(from)f(the)h(FitsChan.)49 b(Ho)m(w)35
-b(to)f(do)f(this)g(is)h(describ)s(ed)e(in)0 577 y Fu(x)p
-FG(3.4.)0 736 y(Ha)m(ving)g(created)g(the)f(W)m(CS)f(calibration,)j(y)m
-(ou)e(ma)m(y)g(w)m(an)m(t)h(to)f(store)g(it)h(in)e(a)h(data)h(\014le.)
-41 b(Ho)m(w)32 b(to)f(do)g(this)f(is)0 849 y(describ)s(ed)f(in)h
-Fu(x)p FG(3.15\).)768 816 y Fv(6)0 1008 y FG(If)39 b(the)h(required)f
-(W)m(CS)h(calibration)h(cannot)g(b)s(e)e(describ)s(ed)g(as)h(a)g(set)g
-(of)g(FITS-W)m(CS)g(headers,)i(then)d(a)0 1121 y(di\013eren)m(t)f
-(approac)m(h)f(is)g(necessary)-8 b(.)61 b(In)37 b(this)g(case,)j(y)m
-(ou)d(should)f(\014rst)g(create)j(a)e(F)-8 b(rame)38
-b(describing)f(pixel)0 1234 y(co)s(ordinates,)42 b(and)c(store)h(this)g
-(F)-8 b(rame)39 b(in)g(a)g(new)f(F)-8 b(rameSet.)67 b(Y)-8
-b(ou)39 b(should)f(then)g(create)i(a)f(new)g(F)-8 b(rame)0
-1347 y(describing)33 b(the)h(w)m(orld)f(co)s(ordinate)h(system.)50
-b(This)33 b(F)-8 b(rame)34 b(ma)m(y)g(b)s(e)f(a)h(sp)s(eci\014c)f(sub)s
-(class)g(of)g(F)-8 b(rame)35 b(suc)m(h)0 1460 y(as)c(a)f(SkyF)-8
-b(rame)31 b(for)f(celestial)j(co)s(ordinates,)e(a)g(Sp)s(ecF)-8
-b(rame)31 b(for)f(sp)s(ectral)g(co)s(ordinates,)i(a)e(Timeframe)h(for)0
-1573 y(time)40 b(co)s(ordinates,)j(or)d(a)g(CmpF)-8 b(rame)39
-b(for)h(a)g(com)m(bination)h(of)f(di\013eren)m(t)g(co)s(ordinates.)69
-b(Y)-8 b(ou)40 b(also)h(need)0 1685 y(to)35 b(create)g(a)g(suitable)f
-(Mapping)g(whic)m(h)g(transforms)f(pixel)h(co)s(ordinates)h(in)m(to)g
-(w)m(orld)f(co)s(ordinates.)52 b(AST)0 1798 y(pro)m(vides)32
-b(man)m(y)f(di\013eren)m(t)i(t)m(yp)s(es)e(of)h(Mappings,)g(all)h(of)f
-(whic)m(h)f(can)h(b)s(e)f(com)m(bined)h(together)h(in)f(arbitrary)0
-1911 y(fashions)c(to)g(create)i(more)e(complicated)h(Mappings.)40
-b(The)27 b(W)m(CS)h(F)-8 b(rame)29 b(should)e(then)h(b)s(e)f(added)g
-(in)m(to)i(the)0 2024 y(F)-8 b(rameSet,)32 b(using)e(the)g(Mapping)h
-(to)g(connect)g(the)g(W)m(CS)f(F)-8 b(rame)31 b(with)f(the)h(pixel)g(F)
--8 b(rame.)0 2312 y Fw(3.14)112 b(.)19 b(.)g(.)g(Mo)s(dify)38
-b(a)g(W)m(CS)f(Calibration)0 2530 y FG(The)c(usual)g(reason)g(for)h
-(wishing)e(to)j(mo)s(dify)d(the)i(W)m(CS)f(calibration)i(asso)s(ciated)
-g(with)e(a)h(dataset)g(is)g(that)0 2643 y(the)24 b(data)g(ha)m(v)m(e)h
-(b)s(een)e(geometrically)k(transformed)22 b(in)i(some)g(w)m(a)m(y)h
-(\(here,)g(w)m(e)f(will)g(assume)g(a)g(2-dimensional)0
-2755 y(image)36 b(dataset\).)54 b(This)33 b(causes)i(the)f(image)i
-(features)e(\(stars,)i(galaxies,)i Fx(etc.)p FG(\))52
-b(to)35 b(mo)m(v)m(e)h(with)d(resp)s(ect)i(to)0 2868
-y(the)29 b(grid)g(of)g(pixels)g(whic)m(h)f(they)h(o)s(ccup)m(y)-8
-b(,)30 b(so)g(that)f(an)m(y)g(co)s(ordinate)h(systems)f(previously)f
-(asso)s(ciated)j(with)0 2981 y(the)g(image)g(b)s(ecome)g(in)m(v)-5
-b(alid.)0 3140 y(T)d(o)34 b(correct)g(for)f(this,)g(it)h(is)f
-(necessary)g(to)h(set)g(up)e(a)h(Mapping)g(whic)m(h)g(expresses)g(the)g
-(p)s(ositions)g(of)g(image)0 3253 y(features)e(in)f(the)g(new)g(data)h
-(grid)f(in)g(terms)h(of)f(their)h(p)s(ositions)f(in)g(the)g(old)h
-(grid.)40 b(In)30 b(b)s(oth)g(cases,)h(the)g(grid)0 3366
-y(co)s(ordinates)f(w)m(e)g(use)g(will)f(ha)m(v)m(e)i(the)f(\014rst)f
-(pixel)h(cen)m(tred)g(at)g(\(1,1\))h(with)f(eac)m(h)g(pixel)g(b)s(eing)
-f(a)h(unit)f(square.)0 3525 y(AST)j(allo)m(ws)h(y)m(ou)g(to)g(correct)g
-(for)f(an)m(y)h(t)m(yp)s(e)f(of)h(geometrical)i(transformation)e(in)f
-(this)g(w)m(a)m(y)-8 b(,)34 b(so)f(long)g(as)f(a)0 3638
-y(suitable)c(Mapping)g(to)g(describ)s(e)f(it)i(can)f(b)s(e)f
-(constructed.)40 b(F)-8 b(or)28 b(purp)s(oses)e(of)i(illustration,)h(w)
-m(e)g(will)f(assume)0 3751 y(here)33 b(that)g(the)g(new)f(image)i(co)s
-(ordinates)f(XNEW)g(and)f(YNEW)i(can)f(b)s(e)f(expressed)g(in)g(terms)h
-(of)f(the)h(old)0 3864 y(co)s(ordinates)e(X)m(OLD)g(and)f(YOLD)g(as)h
-(follo)m(ws:)262 4098 y Ft(DOUBLE)41 b(PRECISION)e(XNEW,)j(XOLD,)g
-(YNEW,)f(YOLD)262 4198 y(DOUBLE)g(PRECISION)e(M\()k(4)g(\),)g(Z\()g(2)g
-(\))262 4397 y(...)262 4596 y(XNEW)e(=)j(XOLD)e(*)h(M\()f(1)i(\))f(+)g
-(YOLD)f(*)h(M\()g(2)g(\))g(+)g(Z\()g(1)g(\))262 4696
-y(YNEW)e(=)j(XOLD)e(*)h(M\()f(3)i(\))f(+)g(YOLD)f(*)h(M\()g(4)g(\))g(+)
-g(Z\()g(2)g(\))0 4943 y FG(where)32 b(M)g(is)g(a)h(2)p
-Fu(\002)p FG(2)g(transformation)f(matrix)g(and)g(Z)g(represen)m(ts)g(a)
-g(shift)g(of)g(origin.)47 b(This)31 b(is)h(therefore)h(a)0
-5056 y(general)c(linear)e(co)s(ordinate)i(transformation)f(whic)m(h)f
-(can)h(represen)m(t)f(displacemen)m(t,)j(rotation,)f(magni\014ca-)0
-5169 y(tion)i(and)f(shear.)0 5328 y(In)c(AST,)h(it)g(can)g(b)s(e)f
-(represen)m(ted)h(b)m(y)g(concatenating)i(t)m(w)m(o)g(Mappings.)39
-b(The)26 b(\014rst)g(is)h(a)h(MatrixMap,)h(whic)m(h)0
-5441 y(implemen)m(ts)i(the)f(matrix)h(m)m(ultiplication.)42
-b(The)30 b(second)g(is)g(a)h(WinMap,)g(whic)m(h)f(linearly)h
-(transforms)e(one)p 0 5516 1512 4 v 104 5570 a Fs(6)138
-5602 y Fr(If)23 b(y)n(ou)g(are)h(writing)g(the)e(W)n(CS)h(calibration)i
-(to)e(a)h(FITS)f(\014le)g(y)n(ou)f(ob)n(viously)h(ha)n(v)n(e)g(the)g(c)
-n(hoice)g(of)h(storing)g(the)f(FITS-W)n(CS)0 5693 y(cards)j(directly)-6
-b(.)p eop end
-%%Page: 24 34
-TeXDict begin 24 33 bop 0 52 a FG(24)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FG(co)s(ordinate)31 b(windo)m(w)f(on)g(to)h
-(another,)f(but)g(will)g(b)s(e)g(used)f(here)h(simply)g(to)h(implemen)m
-(t)f(the)h(shift)f(of)g(origin)0 464 y(\(alternativ)m(ely)-8
-b(,)37 b(a)c(ShiftMap)f(could)g(ha)m(v)m(e)i(b)s(een)e(used)g(in)g
-(place)i(of)e(a)h(WinMap\).)48 b(These)33 b(Mappings)f(ma)m(y)0
-577 y(b)s(e)e(constructed)g(and)g(concatenated)j(as)d(follo)m(ws:)262
-768 y Ft(DOUBLE)41 b(PRECISION)e(INA\()j(2)i(\),)e(INB\()g(2)h(\),)g
-(OUTA\()f(2)h(\),)g(OUTB\()e(2)i(\))262 868 y(INTEGER)d(MATRIXMAP,)g
-(WINMAP)262 1067 y(...)0 1266 y(*)87 b(Set)42 b(up)h(the)f(corners)f
-(of)i(a)g(unit)f(square.)262 1366 y(DATA)f(INA)i(/)g(2)g(*)g(0.0D0)f(/)
-262 1465 y(DATA)f(INB)i(/)g(2)g(*)g(1.0D0)f(/)0 1665
-y(*)87 b(The)42 b(MatrixMap)e(may)i(be)h(constructed)c(directly)h(from)
-i(the)h(matrix)e(M.)262 1764 y(MATRIXMAP)e(=)44 b(AST_MATRIXMAP\()37
-b(2,)43 b(2,)g(0,)g(M,)f(')i(',)e(STATUS)f(\))0 1963
-y(*)87 b(For)42 b(the)g(WinMap,)f(we)i(take)f(the)g(coordinates)d(of)k
-(the)f(corners)f(of)i(a)g(unit)0 2063 y(*)87 b(square)41
-b(\(window\))f(and)i(then)g(shift)g(them)g(by)h(the)f(required)e
-(amounts.)262 2163 y(OUTA\()h(1)i(\))g(=)h(INA\()d(1)j(\))f(+)g(Z\()g
-(1)g(\))262 2262 y(OUTA\()e(2)i(\))g(=)h(INA\()d(2)j(\))f(+)g(Z\()g(2)g
-(\))262 2362 y(OUTB\()e(1)i(\))g(=)h(INB\()d(1)j(\))f(+)g(Z\()g(1)g(\))
-262 2462 y(OUTB\()e(2)i(\))g(=)h(INB\()d(2)j(\))f(+)g(Z\()g(2)g(\))0
-2661 y(*)87 b(The)42 b(WinMap)f(will)h(then)g(implement)e(this)i
-(shift.)262 2760 y(WINMAP)f(=)i(AST_WINMAP\()c(2,)k(INA,)f(INB,)f
-(OUTA,)h(OUTB,)f(')j(',)e(STATUS)g(\))0 2960 y(*)87 b(Join)42
-b(the)g(two)g(Mappings)f(together,)f(so)i(that)g(they)g(are)g(applied)f
-(one)i(after)0 3059 y(*)87 b(the)42 b(other.)262 3159
-y(NEWMAP)f(=)i(AST_CMPMAP\()c(MATRIXMAP,)g(WINMAP,)i(1,)i(')g(',)g
-(STATUS)e(\))0 3363 y FG(Y)-8 b(ou)33 b(migh)m(t,)i(of)e(course,)h
-(create)h(an)m(y)e(other)g(form)g(of)g(Mapping)g(dep)s(ending)e(on)i
-(the)g(t)m(yp)s(e)h(of)f(geometrical)0 3476 y(transformation)g(in)m(v)m
-(olv)m(ed.)51 b(F)-8 b(or)33 b(an)g(o)m(v)m(erview)i(of)e(the)g
-(Mappings)g(pro)m(vided)g(b)m(y)g(AST,)f(see)i Fu(x)p
-FG(2.2,)h(and)e(for)0 3589 y(a)g(description)g(of)f(the)h(capabilities)
-i(of)e(eac)m(h)g(class)h(of)f(Mapping,)g(see)g(its)g(en)m(try)g(in)f
-(App)s(endix)f(D.)48 b(F)-8 b(or)34 b(an)0 3702 y(o)m(v)m(erview)e(of)f
-(ho)m(w)f(individual)g(Mappings)g(ma)m(y)h(b)s(e)f(com)m(bined,)g(see)h
-Fu(x)p FG(2.3)h(\()p Fu(x)p FG(6)g(giv)m(es)f(more)g(details\).)0
-3850 y(Assuming)21 b(y)m(ou)h(ha)m(v)m(e)h(obtained)e(a)h(W)m(CS)g
-(calibration)h(for)e(y)m(our)h(original)h(image)f(in)g(the)f(form)g(of)
-h(a)g(p)s(oin)m(ter)g(to)0 3963 y(a)g(F)-8 b(rameSet,)25
-b(W)m(CSINF)m(O1)d(\()p Fu(x)p FG(3.4\),)k(the)21 b(Mapping)h(created)g
-(ab)s(o)m(v)m(e)h(ma)m(y)f(b)s(e)f(used)g(to)h(pro)s(duce)e(a)i
-(calibration)0 4076 y(for)30 b(the)h(new)f(image)h(as)g(follo)m(ws:)262
-4267 y Ft(INTEGER)40 b(WCSINFO1,)g(WCSINFO2)262 4466
-y(...)0 4665 y(*)87 b(If)43 b(necessary,)c(make)j(a)h(copy)f(of)h(the)f
-(WCS)g(calibration,)d(since)j(we)g(are)0 4765 y(*)87
-b(about)41 b(to)i(alter)f(it.)262 4865 y(WCSINFO2)e(=)j(AST_COPY\()d
-(WCSINFO1,)g(STATUS)h(\))0 5064 y(*)87 b(Re-map)41 b(the)h(base)g
-(Frame)g(so)g(that)g(it)h(refers)e(to)i(the)f(new)h(data)f(grid)0
-5163 y(*)87 b(instead)40 b(of)j(the)g(old)f(one.)262
-5263 y(CALL)f(AST_REMAPFRAME\()d(WCSINFO2,)i(AST__BASE,)f(NEWMAP,)i
-(STATUS)g(\))0 5467 y FG(This)24 b(will)h(pro)s(duce)f(a)h(p)s(oin)m
-(ter,)i(W)m(CSINF)m(O2,)g(to)f(a)f(new)f(F)-8 b(rameSet)26
-b(in)f(whic)m(h)g(all)h(the)f(co)s(ordinate)g(systems)0
-5580 y(asso)s(ciated)34 b(with)e(the)g(original)i(image)g(are)e(mo)s
-(di\014ed)g(so)g(that)h(they)g(are)g(correctly)g(registered)g(with)g(y)
-m(our)0 5693 y(new)d(image)h(instead.)p eop end
-%%Page: 25 35
-TeXDict begin 25 34 bop 0 52 a Fz(3.15)93 b(.)15 b(.)g(.)h(W)-8
-b(rite)32 b(a)e(Mo)s(di\014ed)g(W)m(CS)g(Calibration)h(to)h(a)e
-(Dataset)1399 b FG(25)0 351 y(F)-8 b(or)26 b(more)e(information)h(ab)s
-(out)g(re-mapping)f(the)h(F)-8 b(rames)26 b(within)e(a)h(F)-8
-b(rameSet,)28 b(see)d Fu(x)p FG(14.4.)41 b(Also)25 b(see)h
-Fu(x)p FG(14.5)0 464 y(for)35 b(a)g(similar)g(example)g(to)h(the)f(ab)s
-(o)m(v)m(e,)i(applicable)f(to)f(the)g(case)h(of)f(reducing)f(the)h
-(size)h(of)f(an)g(image)h(b)m(y)0 577 y(binning.)0 872
-y Fw(3.15)112 b(.)19 b(.)g(.)g(W)-9 b(rite)36 b(a)i(Mo)s(di\014ed)h(W)m
-(CS)e(Calibration)i(to)e(a)h(Dataset)0 1094 y FG(If)g(y)m(ou)h(ha)m(v)m
-(e)g(mo)s(di\014ed)f(the)g(W)m(CS)h(calibration)g(asso)s(ciated)h(with)
-e(a)h(dataset,)j(suc)m(h)c(as)h(in)f(the)h(example)0
-1207 y(ab)s(o)m(v)m(e)32 b(\()p Fu(x)p FG(3.14\),)h(then)d(y)m(ou)h
-(will)f(need)g(to)i(write)e(the)h(mo)s(di\014ed)e(v)m(ersion)i(out)f
-(along)i(with)e(an)m(y)h(new)e(data.)0 1371 y(In)c(the)h(same)g(w)m(a)m
-(y)h(as)f(when)f(reading)h(a)g(W)m(CS)g(calibration)h(\()p
-Fu(x)p FG(3.4\),)i(ho)m(w)d(y)m(ou)g(do)g(this)g(will)g(dep)s(end)e(on)
-i(y)m(our)0 1483 y(data)k(system,)g(but)f(w)m(e)h(will)g(assume)f(that)
-h(y)m(ou)g(wish)e(to)j(generate)f(a)g(set)g(of)g(FITS)f(header)g(cards)
-g(that)h(can)0 1596 y(b)s(e)35 b(stored)i(with)e(the)h(data.)59
-b(Y)-8 b(ou)36 b(should)f(usually)h(mak)m(e)h(preparations)f(for)g
-(doing)g(this)g(when)f(y)m(ou)h(\014rst)0 1709 y(read)f(the)g(W)m(CS)g
-(calibration)h(from)f(y)m(our)f(input)g(dataset)j(b)m(y)d(mo)s(difying)
-h(the)g(example)g(giv)m(en)h(in)f Fu(x)p FG(3.4)h(as)0
-1822 y(follo)m(ws:)262 2073 y Ft(INTEGER)k(FITSCHAN1,)g(WCSINFO1)262
-2172 y(CHARACTER)f(*)44 b(\()f(20)f(\))i(ENCODE)262 2372
-y(...)0 2571 y(*)87 b(Create)41 b(an)i(input)e(FitsChan)f(and)j(fill)f
-(it)g(with)g(FITS)g(header)f(cards.)h(Note,)0 2671 y(*)87
-b(if)43 b(you)f(have)g(all)g(the)g(header)g(cards)f(in)i(a)g(single)e
-(string,)g(use)h(AST_PUTCARDS)d(in)0 2770 y(*)87 b(place)41
-b(of)i(AST_PUTFITS.)262 2870 y(FITSCHAN1)c(=)44 b(AST_FITSCHAN\()38
-b(AST_NULL,)i(AST_NULL,)f(')44 b(',)e(STATUS)g(\))262
-2969 y(DO)g(1)h(ICARD)f(=)h(1,)g(NCARD)392 3069 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN1,)g(CARDS\()i(ICARD)h(\),)h(.FALSE.,)d(STATUS)h(\))44
-3169 y(1)174 b(CONTINUE)0 3368 y(*)87 b(Note)42 b(which)f(encoding)f
-(has)j(been)f(used)g(for)g(the)g(WCS)h(information.)262
-3468 y(ENCODE)e(=)i(AST_GETC\()d(FITSCHAN1,)f('Encoding',)g(STATUS)i
-(\);)0 3667 y(*)87 b(Rewind)41 b(the)h(input)g(FitsChan)e(and)i(read)g
-(the)h(WCS)f(information)d(from)j(it.)262 3766 y(CALL)f(AST_CLEAR\()f
-(FITSCHAN1,)f('Card',)i(STATUS)g(\))262 3866 y(WCSINFO1)f(=)j
-(AST_READ\()d(FITSCHAN1,)f(STATUS)i(\))0 4130 y FG(Note)33
-b(ho)m(w)e(w)m(e)h(ha)m(v)m(e)h(added)e(an)g(enquiry)g(to)h(determine)g
-(ho)m(w)f(the)h(W)m(CS)g(information)f(is)h(enco)s(ded)f(in)g(the)0
-4243 y(input)38 b(FITS)f(cards,)k(storing)e(the)f(resulting)h(string)f
-(in)g(the)h(ENCODE)f(v)-5 b(ariable.)66 b(This)38 b(m)m(ust)g(b)s(e)g
-(done)0 4356 y FE(b)s(efore)30 b FG(actually)i(reading)f(the)f(W)m(CS)h
-(calibration.)0 4519 y(Once)e(y)m(ou)h(ha)m(v)m(e)h(pro)s(duced)d(a)i
-(mo)s(di\014ed)e(W)m(CS)i(calibration)h(for)e(the)h(output)f(dataset)i
-(\()p Fx(e.g.)e Fu(x)p FG(3.14\),)j(in)d(the)0 4632 y(form)39
-b(of)h(a)h(F)-8 b(rameSet)41 b(iden)m(ti\014ed)f(b)m(y)f(the)i(p)s(oin)
-m(ter)e(W)m(CSINF)m(O2,)44 b(y)m(ou)c(can)g(pro)s(duce)f(a)h(new)g
-(FitsChan)0 4745 y(con)m(taining)32 b(the)e(output)g(FITS)g(header)g
-(cards)g(as)h(follo)m(ws:)262 4996 y Ft(INTEGER)40 b(FITSCHAN2,)g
-(JUNK,)h(WCSINFO2)262 5195 y(...)0 5394 y(*)87 b(Make)42
-b(a)h(copy)f(of)h(the)f(input)f(FitsChan,)f(AFTER)i(the)g(WCS)g
-(information)e(has)0 5494 y(*)87 b(been)42 b(read)g(from)g(it.)g(This)g
-(will)g(propagate)e(all)i(the)g(input)g(FITS)g(header)0
-5593 y(*)87 b(cards,)41 b(apart)g(from)h(those)g(describing)d(the)k
-(WCS)f(calibration.)262 5693 y(FITSCHAN2)d(=)44 b(AST_COPY\()39
-b(FITSCHAN1,)h(STATUS)h(\))p eop end
-%%Page: 26 36
-TeXDict begin 26 35 bop 0 52 a FG(26)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 451 y Ft(*)87 b(If)43 b(necessary,)c(make)j
-(modifications)c(to)43 b(the)f(cards)g(in)g(FITSCHAN2)0
-551 y(*)87 b(\(e.g.)41 b(you)i(might)e(need)h(to)h(change)e(NAXIS1,)g
-(NAXIS2,)f(etc.,)i(to)h(account)d(for)0 650 y(*)87 b(a)43
-b(change)e(in)i(image)e(size\).)g(You)i(probably)d(only)i(need)g(to)h
-(do)f(this)g(if)h(your)0 750 y(*)87 b(data)42 b(system)f(does)h(not)g
-(provide)f(these)g(facilities)f(itself.)262 849 y(<details)g(not)i
-(shown)g(-)h(see)f(below>)0 1049 y(*)87 b(Alternatively,)38
-b(if)k(your)g(data)g(system)f(handles)g(the)h(propagation)d(of)k(FITS)0
-1148 y(*)87 b(header)41 b(cards)g(to)i(the)f(output)g(dataset)e(for)j
-(you,)f(then)f(simply)h(create)f(an)0 1248 y(*)87 b(empty)41
-b(FitsChan)g(to)h(contain)f(the)h(output)f(WCS)i(information)c(alone.)0
-1348 y(*)218 b(FITSCHAN2)39 b(=)44 b(AST_FITSCHAN\()38
-b(AST_NULL,)i(AST_NULL,)f(')44 b(',)e(STATUS)g(\))0 1547
-y(*)87 b(Rewind)41 b(the)h(new)h(FitsChan)d(\(if)i(necessary\))e(and)i
-(attempt)f(to)h(write)g(the)0 1646 y(*)87 b(output)41
-b(WCS)h(information)d(to)k(it)g(using)e(the)i(same)f(encoding)e(method)
-h(as)i(the)0 1746 y(*)87 b(input)41 b(dataset.)262 1846
-y(CALL)g(AST_SET\()g(FITSCHAN2,)e('Card=1,)h(Encoding=')g(//)j(ENCODE,)
-d(STATUS)h(\))262 1945 y(IF)h(\()h(AST_WRITE\()d(FITSCHAN2,)f
-(WCSINFO2,)h(STATUS)h(\))i(.EQ.)f(0)i(\))f(THEN)0 2145
-y(*)87 b(If)43 b(this)e(didn't)h(work)f(\(the)h(WCS)h(FrameSet)d(has)i
-(become)f(too)i(complex\),)d(then)0 2244 y(*)87 b(use)42
-b(the)g(native)g(AST)g(encoding)e(instead.)392 2344 y(CALL)i
-(AST_SETC\()e(FITSCHAN2,)g('Encoding',)f('NATIVE',)g(STATUS)j(\);)392
-2443 y(JUNK)g(=)h(AST_WRITE\()d(FITSCHAN2,)f(WCSINFO2,)h(STATUS)h(\);)
-262 2543 y(END)h(IF)0 2799 y FG(F)-8 b(or)40 b(details)f(of)g(ho)m(w)g
-(to)g(mo)s(dify)f(the)h(con)m(ten)m(ts)i(of)e(the)g(output)f(FitsChan)h
-(in)f(other)h(w)m(a)m(ys,)j(suc)m(h)d(as)g(b)m(y)0 2912
-y(adding,)30 b(o)m(v)m(er-writing)i(or)f(deleting)g(header)f(cards,)h
-(see)g Fu(x)p FG(16.4,)h Fu(x)p FG(16.9,)h Fu(x)p FG(16.8)f(and)e
-Fu(x)p FG(16.13.)0 3073 y(Once)38 b(y)m(ou)h(ha)m(v)m(e)g(assem)m(bled)
-g(the)f(output)g(FITS)g(cards,)i(y)m(ou)f(ma)m(y)f(retriev)m(e)i(them)e
-(from)g(the)h(FitsChan)0 3186 y(that)31 b(con)m(tains)h(them)e(as)g
-(follo)m(ws:)262 3428 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(CARD)
-262 3627 y(...)262 3827 y(CALL)d(AST_CLEAR\()f(FITSCHAN2,)f('Card',)i
-(STATUS)g(\))44 3926 y(5)174 b(CONTINUE)262 4026 y(IF)42
-b(\()h(AST_FINDFITS\()c(FITSCHAN2,)g('\045f',)j(CARD,)f(.TRUE.,)g
-(STATUS)g(\))i(\))g(THEN)392 4126 y(WRITE)f(\()h(*,)g('\(A\)')e(\))i
-(CARD)392 4225 y(GO)g(TO)g(5)262 4325 y(END)f(IF)0 4580
-y FG(Here,)35 b(w)m(e)e(ha)m(v)m(e)h(simply)f(written)g(eac)m(h)h(card)
-f(to)h(the)g(standard)e(output)h(unit,)g(but)g(y)m(ou)g(w)m(ould)g(ob)m
-(viously)0 4693 y(replace)e(this)g(with)f(a)g(subroutine)g(call)h(to)g
-(store)g(the)g(cards)f(in)g(y)m(our)h(output)f(dataset.)0
-4854 y(F)-8 b(or)44 b(data)f(systems)g(that)g(do)g(not)g(use)g(FITS)f
-(header)g(cards,)k(a)e(di\013eren)m(t)f(approac)m(h)g(ma)m(y)g(b)s(e)g
-(needed,)0 4967 y(p)s(ossibly)33 b(in)m(v)m(olving)i(use)f(of)f(a)i
-(Channel)d(or)i(XmlChan)f(\()p Fu(x)p FG(15\))j(rather)d(than)h(a)g
-(FitsChan.)51 b(In)33 b(the)h(case)g(of)0 5080 y(the)29
-b(Starlink)g(NDF)h(data)f(format,)h(for)f(example,)h(all)g(of)f(the)g
-(ab)s(o)m(v)m(e)h(ma)m(y)g(b)s(e)e(replaced)i(b)m(y)f(a)g(single)g
-(call)i(to)0 5193 y(the)e(routine)f(NDF)p Fy(_)p FG(PTW)m(CS|see)h
-(SUN/33.)41 b(The)28 b(whole)h(pro)s(cess)f(can)h(probably)e(b)s(e)h
-(encapsulated)h(in)f(a)0 5306 y(similar)j(w)m(a)m(y)g(for)f(most)h
-(other)g(data)g(systems,)f(whether)g(they)h(use)f(FITS)f(header)h
-(cards)h(or)f(not.)0 5467 y(F)-8 b(or)46 b(an)f(o)m(v)m(erview)i(of)f
-(ho)m(w)f(to)h(propagate)h(W)m(CS)e(information)h(through)e(data)i(pro)
-s(cessing)g(steps,)j(see)0 5580 y Fu(x)p FG(17.6.)42
-b(F)-8 b(or)29 b(more)f(information)g(ab)s(out)g(writing)g(W)m(CS)g
-(information)g(to)h(FitsChans,)f(see)h Fu(x)p FG(16.5)h(and)d
-Fu(x)p FG(17.7.)0 5693 y(F)-8 b(or)40 b(information)g(ab)s(out)f(the)h
-(options)f(for)h(enco)s(ding)f(W)m(CS)g(information)h(in)f(FITS)g
-(header)g(cards,)j(see)p eop end
-%%Page: 27 37
-TeXDict begin 27 36 bop 0 52 a Fz(3.16)93 b(.)15 b(.)g(.)h(Displa)m(y)
-31 b(a)g(Graphical)g(Co)s(ordinate)g(Grid)1836 b FG(27)507
-3235 y @beginspecial 15 @llx 138 @lly 489 @urx 648 @ury
-3318 @rwi @setspecial
-%%BeginDocument: sun210_figures/overgrid_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 263 3431 a(Figure)31 b(9:)41 b(An)30 b(example)h(of)g(a)g
-(displa)m(y)m(ed)g(image)g(with)f(a)h(co)s(ordinate)g(grid)f(plotted)i
-(o)m(v)m(er)f(it.)0 3786 y Fu(x)p FG(16.1,)46 b Fu(x)p
-FG(17.1,)f(and)40 b(the)h(description)g(of)g(the)g(Enco)s(ding)f
-(attribute)i(in)f(App)s(endix)e(C.)71 b(F)-8 b(or)42
-b(a)f(complete)0 3899 y(understanding)24 b(of)i(FitsChans)g(and)f
-(their)h(use)g(with)g(FITS)f(header)h(cards,)g(y)m(ou)h(should)e(read)g
-Fu(x)p FG(16)j(and)d Fu(x)p FG(17.)0 4178 y Fw(3.16)112
-b(.)19 b(.)g(.)g(Displa)m(y)38 b(a)g(Graphical)h(Co)s(ordinate)f(Grid)0
-4390 y FG(A)i(common)g(requiremen)m(t)g(when)f(displa)m(ying)h(image)h
-(data)f(is)g(to)h(plot)f(an)g(asso)s(ciated)h(co)s(ordinate)g(grid)0
-4503 y(\()p Fx(e.g.)27 b FG(Figure)h(9\))h(o)m(v)m(er)f(the)g(displa)m
-(y)m(ed)g(image.)81 b(The)27 b(use)g(of)h(AST)e(in)i(suc)m(h)f
-(circumstances)h(is)g(indep)s(enden)m(t)0 4616 y(of)33
-b(the)g(underlying)e(graphics)i(system,)h(so)f(starting)g(up)f(the)h
-(graphics)f(system,)i(setting)g(up)e(a)h(co)s(ordinate)0
-4729 y(system,)j(displa)m(ying)f(the)g(image,)i(and)d(closing)h(do)m
-(wn)g(afterw)m(ards)f(can)h(all)g(b)s(e)f(done)h(using)f(the)g
-(graphics)0 4842 y(routines)c(y)m(ou)h(w)m(ould)f(normally)h(use.)0
-4995 y(Ho)m(w)m(ev)m(er,)44 b(displa)m(ying)39 b(an)h(image)g(at)g(a)g
-(precise)f(lo)s(cation)i(can)f(b)s(e)e(a)i(little)h(\014ddly)d(with)h
-(some)g(graphics)0 5108 y(systems,)29 b(and)f(ob)m(viously)h(the)g
-(grid)f(dra)m(wn)g(b)m(y)g(AST)g(will)h(not)g(b)s(e)f(accurately)i
-(registered)f(with)f(the)h(image)0 5221 y(unless)c(this)h(is)g(done)f
-(correctly)-8 b(.)41 b(In)25 b(the)h(follo)m(wing)i(template,)g(w)m(e)e
-(therefore)h(illustrate)g(b)s(oth)e(steps,)h(basing)0
-5334 y(the)39 b(image)g(displa)m(y)g(on)f(the)h(PGPLOT)f(graphics)g
-(pac)m(k)-5 b(age.)2176 5301 y Fv(7)2283 5334 y FG(Plotting)40
-b(a)e(co)s(ordinate)i(grid)e(with)g(AST)0 5447 y(then)30
-b(b)s(ecomes)h(a)f(relativ)m(ely)j(minor)d(part)g(of)h(what)f(is)g
-(almost)i(a)f(complete)h(graphics)e(program.)p 0 5516
-1512 4 v 104 5570 a Fs(7)138 5602 y Fr(An)37 b(in)n(terface)i(is)g(pro)
-n(vided)e(with)h(AST)g(that)g(allo)n(ws)i(it)e(to)g(use)g(PGPLOT)h
-(\(SUN/15\))f(for)g(its)h(graphics,)j(although)0 5693
-y(in)n(terfaces)27 b(to)f(other)g(graphics)g(systems)g(ma)n(y)f(also)i
-(b)r(e)f(written.)p eop end
-%%Page: 28 38
-TeXDict begin 28 37 bop 0 52 a FG(28)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FG(Once)32 b(again,)j(w)m(e)e(assume)f(that)h
-(a)g(p)s(oin)m(ter,)h(W)m(CSINF)m(O,)f(to)g(a)g(suitable)g(F)-8
-b(rameSet)34 b(asso)s(ciated)g(with)e(the)0 464 y(image)g(has)e
-(already)h(b)s(een)e(obtained)i(\()p Fu(x)p FG(3.4\).)262
-712 y Ft(DOUBLE)41 b(PRECISION)e(BBOX\()j(4)h(\))262
-811 y(INTEGER)d(NX,)j(NY,)f(PGBEG,)f(PLOT)262 911 y(REAL)g(DATA\()h
-(NX,)g(NY)h(\),)g(GBOX\()e(4)j(\),)e(HI,)h(LO,)f(SCALE,)f(TR\()h(6)i
-(\))262 1011 y(REAL)d(X1,)i(X2,)f(XLEFT,)f(XRIGHT,)g(Y1,)h(Y2,)h
-(YBOTTOM,)d(YTOP)262 1210 y(...)0 1409 y(*)87 b(Access)41
-b(the)h(image)g(data,)f(which)h(we)h(assume)e(will)h(be)g(stored)f(in)i
-(the)g(real)0 1509 y(*)87 b(2-dimensional)38 b(array)j(DATA)h(with)g
-(dimension)e(sizes)i(NX)g(and)h(NY.)f(Also)0 1608 y(*)87
-b(derive)41 b(limits)g(for)h(scaling)f(it,)h(which)g(we)h(assign)e(to)h
-(the)h(variables)d(HI)0 1708 y(*)87 b(and)42 b(LO.)262
-1808 y(<this)f(stage)h(depends)e(on)j(your)f(data)g(system,)f(so)h(is)h
-(not)f(shown>)0 2007 y(*)87 b(Open)42 b(PGPLOT)f(using)g(the)i(device)e
-(given)g(by)i(environment)c(variable)0 2106 y(*)87 b(PGPLOT_DEV)39
-b(and)k(check)e(for)h(success.)262 2206 y(IF)g(\()h(PGBEG\()f(0,)g(')h
-(',)g(1,)g(1)g(\))g(.EQ.)f(1)h(\))h(THEN)0 2405 y(*)87
-b(Clear)41 b(the)i(screen)e(and)h(ensure)f(equal)h(scales)f(on)i(both)e
-(axes.)392 2505 y(CALL)h(PGPAGE)392 2605 y(CALL)g(PGWNAD\()f(0.0,)h
-(1.0,)g(0.0,)g(1.0)g(\))0 2804 y(*)87 b(Obtain)41 b(the)h(extent)f(of)i
-(the)f(plotting)f(area)h(\(not)g(strictly)e(necessary)g(for)0
-2903 y(*)87 b(PGPLOT,)40 b(but)j(possibly)d(for)i(other)g(graphics)e
-(systems\).)g(From)i(this,)g(derive)0 3003 y(*)87 b(the)42
-b(display)f(scale)g(in)i(graphics)d(units)i(per)g(pixel)g(so)g(that)g
-(the)h(image)0 3103 y(*)87 b(will)42 b(fit)g(within)f(the)h(display)f
-(area.)392 3202 y(CALL)h(PGQWIN\()f(X1,)h(X2,)h(Y1,)f(Y2)h(\))392
-3302 y(SCALE)f(=)h(MIN\()f(\()h(X2)g(-)g(X1)g(\))g(/)g(NX,)f(\()i(Y2)e
-(-)i(Y1)e(\))h(/)h(NY)e(\))0 3501 y(*)87 b(Calculate)40
-b(the)i(extent)f(of)i(the)f(area)g(in)h(graphics)d(units)i(that)g(the)g
-(image)0 3601 y(*)87 b(will)42 b(occupy,)e(so)j(as)g(to)g(centre)e(it)i
-(within)e(the)h(display)f(area.)392 3700 y(XLEFT)129
-b(=)43 b(0.5)f(*)i(\()f(X1)g(+)g(X2)g(-)g(NX)f(*)i(SCALE)d(\))392
-3800 y(XRIGHT)85 b(=)43 b(0.5)f(*)i(\()f(X1)g(+)g(X2)g(+)g(NX)f(*)i
-(SCALE)d(\))392 3900 y(YBOTTOM)g(=)i(0.5)f(*)i(\()f(Y1)g(+)g(Y2)g(-)g
-(NY)f(*)i(SCALE)d(\))392 3999 y(YTOP)173 b(=)43 b(0.5)f(*)i(\()f(Y1)g
-(+)g(Y2)g(+)g(NY)f(*)i(SCALE)d(\))0 4199 y(*)87 b(Set)42
-b(up)h(a)g(PGPLOT)e(coordinate)f(transformation)d(matrix)k(and)i
-(display)e(the)0 4298 y(*)87 b(image)41 b(data)h(as)h(a)g(grey)f(scale)
-g(map)g(\(these)f(details)g(are)h(specific)e(to)0 4398
-y(*)87 b(PGPLOT\).)392 4497 y(TR\()43 b(1)g(\))g(=)g(XLEFT)f(-)h(0.5)f
-(*)h(SCALE)392 4597 y(TR\()g(2)g(\))g(=)g(SCALE)392 4697
-y(TR\()g(3)g(\))g(=)g(0.0)392 4796 y(TR\()g(4)g(\))g(=)g(YBOTTOM)e(-)i
-(0.5)f(*)i(SCALE)392 4896 y(TR\()f(5)g(\))g(=)g(0.0)392
-4996 y(TR\()g(6)g(\))g(=)g(SCALE)392 5095 y(CALL)f(PGGRAY\()f(DATA,)g
-(NX,)i(NY,)f(1,)h(NX,)f(1,)h(NY,)f(HI,)h(LO,)f(TR)h(\))0
-5295 y(*)87 b(BEGINNING)40 b(OF)i(AST)h(BIT)0 5394 y(*)87
-b(================)o(==)o(==)0 5494 y(*)g(Store)41 b(the)i(locations)c
-(of)k(the)g(bottom)e(left)h(and)g(top)g(right)g(corners)f(of)h(the)0
-5593 y(*)87 b(region)41 b(used)h(to)h(display)d(the)j(image,)e(in)h
-(graphics)f(coordinates.)392 5693 y(GBOX\()h(1)h(\))g(=)g(XLEFT)p
-eop end
-%%Page: 29 39
-TeXDict begin 29 38 bop 0 52 a Fz(3.17)93 b(.)15 b(.)g(.)h(Switc)m(h)30
-b(to)h(Plot)h(a)e(Di\013eren)m(t)i(Celestial)g(Co)s(ordinate)f(Grid)
-1232 b FG(29)392 351 y Ft(GBOX\()42 b(2)h(\))g(=)g(YBOTTOM)392
-451 y(GBOX\()f(3)h(\))g(=)g(XRIGHT)392 551 y(GBOX\()f(4)h(\))g(=)g
-(YTOP)0 750 y(*)87 b(Similarly,)39 b(store)j(the)g(locations)e(of)j
-(the)f(image's)f(bottom)g(left)h(and)g(top)0 849 y(*)87
-b(right)41 b(corners,)g(in)h(pixel)g(coordinates)d(--)k(with)f(the)g
-(first)f(pixel)h(centred)0 949 y(*)87 b(at)43 b(\(1,1\).)392
-1049 y(BBOX\()f(1)h(\))g(=)g(0.5D0)392 1148 y(BBOX\()f(2)h(\))g(=)g
-(0.5D0)392 1248 y(BBOX\()f(3)h(\))g(=)g(NX)g(+)g(0.5D0)392
-1348 y(BBOX\()f(4)h(\))g(=)g(NY)g(+)g(0.5D0)0 1547 y(*)87
-b(Create)41 b(a)i(Plot,)f(based)f(on)i(the)f(FrameSet)e(associated)g
-(with)i(the)0 1646 y(*)87 b(image.)41 b(This)h(attaches)e(the)i(Plot)g
-(to)h(the)f(graphics)f(surface)f(so)j(that)f(it)0 1746
-y(*)87 b(matches)40 b(the)j(displayed)d(image.)h(Specify)f(that)i(a)i
-(complete)c(set)i(of)h(grid)0 1846 y(*)87 b(lines)41
-b(should)g(be)i(drawn)f(\(rather)e(than)i(just)g(coordinate)e(axes\).)
-392 1945 y(PLOT)i(=)h(AST_PLOT\()d(WCSINFO,)h(GBOX,)g(BBOX,)h
-('Grid=1',)d(STATUS)j(\))0 2145 y(*)87 b(Optionally,)39
-b(we)k(can)f(now)g(set)h(other)e(Plot)h(attributes)d(to)k(control)e
-(the)0 2244 y(*)87 b(appearance)39 b(of)k(the)f(grid.)g(The)g(values)f
-(assigned)g(here)g(use)i(the)0 2344 y(*)87 b(colour/font)39
-b(indices)h(defined)h(by)i(the)f(underlying)e(graphics)g(system.)392
-2443 y(CALL)i(AST_SET\()e(PLOT,)i('Colour\(grid\)=2,)37
-b(Font\(textlab\)=3')o(,)h(STATUS)j(\))0 2643 y(*)87
-b(Use)42 b(the)g(Plot)g(to)h(draw)f(the)g(coordinate)e(grid.)392
-2742 y(CALL)i(AST_GRID\()e(PLOT,)i(STATUS)f(\))392 2942
-y(<maybe)g(some)h(more)g(AST)h(graphics)d(here>)0 3141
-y(*)87 b(Annul)41 b(the)i(Plot)f(when)f(finished)g(\(or)h(use)g(the)h
-(AST_BEGIN/AST_EN)o(D)0 3240 y(*)87 b(technique)40 b(shown)h
-(earlier\).)392 3340 y(CALL)h(AST_ANNUL\()e(PLOT,)h(STATUS)g(\))0
-3539 y(*)87 b(END)42 b(OF)h(AST)f(BIT)0 3639 y(*)87 b(==============)0
-3838 y(*)g(Close)41 b(down)h(the)h(graphics)d(system.)392
-3938 y(CALL)i(PGEND)262 4037 y(END)g(IF)0 4260 y FG(Note)27
-b(that)g(once)g(y)m(ou)f(ha)m(v)m(e)h(set)g(up)d(a)j(Plot)g(whic)m(h)e
-(is)h(aligned)h(with)f(a)g(displa)m(y)m(ed)h(image,)h(y)m(ou)e(ma)m(y)h
-(also)g(use)0 4373 y(it)36 b(to)g(generate)h(further)d(graphical)i
-(output)e(of)i(y)m(our)f(o)m(wn,)i(sp)s(eci\014ed)d(in)h(the)h(image's)
-g(w)m(orld)g(co)s(ordinate)0 4486 y(system)h(\(suc)m(h)f(as)h(mark)m
-(ers)g(to)g(represen)m(t)g(astronomical)h(ob)5 b(jects,)39
-b(annotation,)h Fx(etc.)p FG(\).)59 b(There)36 b(is)h(also)g(a)0
-4599 y(range)32 b(of)g(Plot)h(attributes)f(whic)m(h)g(giv)m(es)h(con)m
-(trol)g(o)m(v)m(er)g(most)f(asp)s(ects)g(of)g(the)g(output's)g(app)s
-(earance.)45 b(F)-8 b(or)0 4712 y(details)31 b(of)g(the)f(facilities)j
-(a)m(v)-5 b(ailable,)33 b(see)e Fu(x)p FG(21)h(and)d(the)i(description)
-f(of)h(the)f(Plot)i(class)f(in)f(App)s(endix)f(D.)0 4864
-y(F)-8 b(or)24 b(details)h(of)f(ho)m(w)g(to)g(build)f(a)h(graphics)g
-(program)f(whic)m(h)h(uses)f(PGPLOT,)g(see)h Fu(x)p FG(3.3)h(and)f(the)
-f(description)0 4977 y(of)31 b(the)f(ast)p Fy(_)p FG(link)h(command)f
-(in)g(App)s(endix)f(E.)0 5256 y Fw(3.17)112 b(.)19 b(.)g(.)g(Switc)m(h)
-37 b(to)g(Plot)g(a)h(Di\013eren)m(t)f(Celestial)h(Co)s(ordinate)h(Grid)
-0 5467 y FG(Once)32 b(y)m(ou)f(ha)m(v)m(e)i(set)f(up)f(a)h(Plot)g(to)h
-(dra)m(w)e(a)h(co)s(ordinate)g(grid)g(\()p Fu(x)p FG(3.16\),)i(it)e(is)
-g(a)g(simple)g(matter)g(to)g(c)m(hange)0 5580 y(things)39
-b(so)g(that)h(the)g(grid)e(represen)m(ts)i(a)f(di\013eren)m(t)h
-(celestial)h(co)s(ordinate)f(system.)68 b(F)-8 b(or)40
-b(example,)i(after)0 5693 y(creating)32 b(the)e(Plot)i(with)e(AST)p
-Fy(_)p FG(PLOT,)e(y)m(ou)j(could)f(use:)p eop end
-%%Page: 30 40
-TeXDict begin 30 39 bop 0 52 a FG(30)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)262 351 y Ft(CALL)41 b(AST_SET\()g(PLOT,)g
-('System=Galactic')o(,)c(STATUS)k(\))0 600 y FG(or:)262
-825 y Ft(CALL)g(AST_SET\()g(PLOT,)g('System=FK5,)e(Equinox=J2010',)e
-(STATUS)k(\))0 1062 y FG(and)i(an)m(y)i(axes)g(and/or)f(grid)f(dra)m
-(wn)h(subsequen)m(tly)f(w)m(ould)h(represen)m(t)g(the)g(new)g
-(celestial)j(co)s(ordinate)0 1175 y(system)37 b(y)m(ou)g(sp)s
-(eci\014ed.)60 b(Note,)40 b(ho)m(w)m(ev)m(er,)h(that)c(this)g(will)g
-(only)g(w)m(ork)h(if)e(the)i(original)g(grid)e(represen)m(ted)0
-1288 y(celestial)g(co)s(ordinates)e(of)g(some)g(kind)f(\(see)h
-Fu(x)p FG(3.8)h(for)f(ho)m(w)f(to)i(determine)e(if)h(this)f(is)h(the)g
-(case)3314 1255 y Fv(8)3354 1288 y FG(\).)51 b(If)33
-b(it)h(did)0 1401 y(not,)d(y)m(ou)g(will)f(get)i(an)e(error)g(message.)
-0 1564 y(F)-8 b(or)37 b(more)g(information)f(ab)s(out)h(the)f
-(celestial)j(co)s(ordinate)e(systems)g(a)m(v)-5 b(ailable,)40
-b(see)d(the)g(descriptions)f(of)0 1677 y(the)31 b(System,)f(Equino)m(x)
-g(and)g(Ep)s(o)s(c)m(h)g(attributes)h(in)f(App)s(endix)e(C.)0
-1970 y Fw(3.18)112 b(.)19 b(.)g(.)g(Giv)m(e)38 b(a)f(User)h(Con)m(trol)
-f(Ov)m(er)h(the)f(App)s(earance)i(of)e(a)h(Plot)0 2192
-y FG(The)21 b(idea)h(of)g(using)f(a)h(Plot's)g(attributes)g(to)h(con)m
-(trol)f(the)g(app)s(earance)g(of)g(the)f(graphical)i(output)e(it)h(pro)
-s(duces)0 2305 y(\()p Fu(x)p FG(3.16)36 b(and)c Fu(x)p
-FG(3.17\))k(can)e(easily)g(b)s(e)f(extended)g(to)h(allo)m(w)h(the)f
-(user)e(of)i(a)f(program)h(complete)g(con)m(trol)h(o)m(v)m(er)0
-2417 y(suc)m(h)30 b(matters.)0 2580 y(F)-8 b(or)39 b(instance,)i(if)d
-(the)g(\014le)g(\\plot.con\014g")i(con)m(tains)f(a)g(series)f(of)g
-(plotting)h(options)g(in)f(the)g(form)f(of)i(Plot)0 2693
-y(attribute)c(assignmen)m(ts)f(\(see)h(b)s(elo)m(w)f(for)g(an)g
-(example\),)i(then)e(w)m(e)g(could)g(create)h(a)g(Plot)g(and)e
-(implemen)m(t)0 2806 y(these)e(assignmen)m(ts)g(b)s(efore)f(pro)s
-(ducing)f(the)h(graphical)i(output)e(as)g(follo)m(ws:)262
-3055 y Ft(CHARACTER)39 b(LINE\()j(120)g(\))262 3155 y(INTEGER)e(BASE)
-262 3354 y(...)0 3553 y(*)87 b(Create)41 b(a)i(Plot)f(and)g(define)f
-(the)i(default)d(appearance)g(of)j(the)f(graphical)0
-3653 y(*)87 b(output)41 b(it)i(will)f(produce.)262 3753
-y(PLOT)f(=)j(AST_PLOT\()39 b(WCSINFO,)i(GBOX,)g(PBOX,)218
-3852 y(:)740 b('Grid=1,)41 b(Colour\(grid\)=2,)c(Font\(textlab\)=3',)
-218 3952 y(:)740 b(STATUS)42 b(\))0 4151 y(*)87 b(Obtain)41
-b(the)h(value)g(of)g(any)h(Plot)f(attributes)d(we)k(want)f(to)h
-(preserve.)262 4251 y(BASE)e(=)j(AST_GETI\()39 b(PLOT,)j('Base',)f
-(STATUS)g(\))0 4450 y(*)87 b(Open)42 b(the)g(plot)g(configuration)c
-(file,)k(if)g(it)h(exists.)262 4550 y(OPEN)e(\()j(1,)e(FILE)g(=)h
-('plot.config',)38 b(STATUS)j(=)j('OLD',)d(ERR)h(=)h(8)g(\))0
-4749 y(*)87 b(Read)42 b(each)g(line)g(of)g(text)g(and)h(use)f(it)h(to)f
-(set)h(new)f(Plot)g(attribute)0 4849 y(*)87 b(values.)40
-b(Close)i(the)g(file)g(when)g(done.)44 4948 y(6)174 b(CONTINUE)392
-5048 y(READ)42 b(\()h(1,)g('\(A\)',)e(END)i(=)g(7)g(\))g(LINE)392
-5147 y(CALL)f(AST_SET\()e(PLOT,)i(LINE,)g(STATUS)f(\))262
-5247 y(GO)h(TO)h(6)44 5347 y(7)174 b(CLOSE)41 b(\()i(1)g(\))44
-5446 y(8)174 b(CONTINUE)p 0 5607 1512 4 v 104 5661 a
-Fs(8)138 5693 y Fr(Note)26 b(that)f(the)h(metho)r(ds)f(applied)h(to)g
-(a)g(F)-6 b(rameSet)26 b(ma)n(y)f(b)r(e)g(used)h(equally)f(w)n(ell)i
-(with)f(a)g(Plot.)p eop end
-%%Page: 31 41
-TeXDict begin 31 40 bop 0 52 a Fz(3.18)93 b(.)15 b(.)g(.)h(Giv)m(e)31
-b(a)g(User)g(Con)m(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h
-(Plot)1260 b FG(31)0 351 y Ft(*)87 b(Restore)40 b(any)j(attribute)d
-(values)h(we)i(are)f(preserving.)262 451 y(CALL)f(AST_SETI\()f(PLOT,)i
-('Base',)f(BASE,)g(STATUS)g(\))0 650 y(*)87 b(Produce)40
-b(the)j(graphical)d(output)h(\(e.g.\).)262 750 y(CALL)g(AST_GRID\()f
-(PLOT,)i(STATUS)f(\))0 1012 y FG(Notice)g(that)f(w)m(e)f(tak)m(e)i
-(care)f(that)f(the)h(Plot's)g(Base)g(attribute)f(is)h(preserv)m(ed)e
-(so)i(that)f(the)g(user)g(cannot)0 1125 y(c)m(hange)31
-b(it.)41 b(This)29 b(is)h(b)s(ecause)g(graphical)h(output)e(will)i(not)
-f(b)s(e)f(pro)s(duced)g(successfully)g(if)h(the)g(base)h(F)-8
-b(rame)0 1238 y(do)s(es)30 b(not)h(describ)s(e)e(the)i(plotting)g
-(surface)g(to)g(whic)m(h)f(w)m(e)h(attac)m(hed)h(the)f(Plot)g(when)e(w)
-m(e)i(created)g(it.)0 1401 y(The)21 b(arrangemen)m(t)i(sho)m(wn)d(ab)s
-(o)m(v)m(e)j(allo)m(ws)g(the)f(con)m(ten)m(ts)h(of)f(the)g
-(\\plot.con\014g")h(\014le)f(to)g(con)m(trol)h(most)f(asp)s(ects)0
-1514 y(of)33 b(the)f(graphical)i(output)e(pro)s(duced)f(\(including)h
-(the)h(co)s(ordinate)g(system)g(used;)g(the)f(colour,)i(line)f(st)m
-(yle,)0 1626 y(thic)m(kness)22 b(and)f(fon)m(t)i(used)e(for)g(eac)m(h)i
-(comp)s(onen)m(t;)i(the)d(p)s(ositioning)g(of)g(axes)g(and)g(tic)m(k)h
-(marks;)h(the)e(precision,)0 1739 y(format)31 b(and)e(p)s(ositioning)i
-(of)g(lab)s(els;)f Fx(etc.)p FG(\))41 b Fx(via)30 b FG(assignmen)m(ts)h
-(of)g(the)g(form:)227 1988 y Ft(System=Galactic,)37 b(Equinox)k(=)i
-(2001)227 2088 y(Border)e(=)j(1,)e(Colour\()f(border)g(\))i(=)g(1)227
-2188 y(Colour\()e(grid)h(\))h(=)g(2)227 2287 y(DrawAxes)e(=)i(1)227
-2387 y(Colour\()e(axes)h(\))h(=)g(3)227 2487 y(Digits)e(=)j(8)227
-2586 y(Labelling)c(=)j(Interior)0 2849 y FG(F)-8 b(or)32
-b(a)g(more)f(sophisticated)h(in)m(terface,)i(y)m(ou)d(could)h(ob)m
-(viously)g(p)s(erform)d(pre-pro)s(cessing)i(on)g(this)g(input|)0
-2961 y(for)38 b(example,)j(to)d(translate)h(w)m(ords)f(lik)m(e)h
-(\\red",)i(\\green")e(and)e(\\blue")i(in)m(to)g(colour)f(indices,)i(to)
-f(p)s(ermit)0 3074 y(commen)m(ts)31 b(and)f(blank)g(lines,)h
-Fx(etc.)0 3237 y FG(F)-8 b(or)30 b(a)g(full)f(list)h(of)f(the)h
-(attributes)g(that)g(ma)m(y)g(b)s(e)e(used)h(to)h(con)m(trol)h(the)e
-(app)s(earance)h(of)f(graphical)i(output,)0 3350 y(see)24
-b(the)f(description)g(of)g(the)h(Plot)g(class)g(in)e(App)s(endix)g(D.)
-38 b(F)-8 b(or)24 b(a)g(complete)g(description)g(of)f(eac)m(h)h
-(individual)0 3463 y(attribute)31 b(\()p Fx(e.g.)f FG(those)h(ab)s(o)m
-(v)m(e\),)h(see)f(the)g(attribute's)g(en)m(try)g(in)f(App)s(endix)e(C.)
-p eop end
-%%Page: 32 42
-TeXDict begin 32 41 bop 0 52 a FG(32)3035 b Fz(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)p eop end
-%%Page: 33 43
-TeXDict begin 33 42 bop 3689 52 a FG(33)0 351 y FA(4)135
-b(An)44 b(AST)g(Ob)7 b(ject)45 b(Primer)0 604 y FG(The)38
-b(AST)h(library)f(deals)i(throughout)e(with)h(en)m(tities)i(called)f
-(Ob)5 b(jects)39 b(and)f(a)i(basic)f(understanding)e(of)0
-716 y(ho)m(w)j(to)i(handle)e(these)g(is)h(needed)f(b)s(efore)g(y)m(ou)h
-(can)f(use)h(the)f(library)g(e\013ectiv)m(ely)-8 b(.)74
-b(If)40 b(y)m(ou)h(are)g(already)0 829 y(familiar)34
-b(with)f(an)g(ob)5 b(ject-orien)m(ted)35 b(language,)g(suc)m(h)e(as)g
-(C++,)g(few)g(of)g(the)h(concepts)f(should)g(seem)g(new)0
-942 y(to)c(y)m(ou.)40 b(Be)29 b(a)m(w)m(are,)i(ho)m(w)m(ev)m(er,)f
-(that)f(AST)f(is)g(designed)g(to)h(b)s(e)f(used)f Fx(via)h
-FG(fairly)h(con)m(v)m(en)m(tional)i(F)-8 b(ortran)29
-b(and)0 1055 y(C)h(in)m(terfaces,)i(so)f(some)f(things)h(ha)m(v)m(e)g
-(to)g(b)s(e)f(done)g(a)h(little)h(di\013eren)m(tly)-8
-b(.)0 1217 y(If)24 b(y)m(ou)h(are)g(not)g(already)g(familiar)h(with)e
-(ob)5 b(ject-orien)m(ted)27 b(programming,)e(then)g(don't)f(w)m(orry|w)
-m(e)h(will)g(not)0 1330 y(emphasise)33 b(this)g(asp)s(ect)h(more)f
-(than)g(is)g(necessary)h(and)f(will)g(not)h(assume)f(an)m(y)g(bac)m
-(kground)g(kno)m(wledge.)0 1443 y(Instead,)f(this)f(section)i(concen)m
-(trates)g(on)f(presen)m(ting)g(all)g(the)g(fundamen)m(tal)f
-(information)h(y)m(ou)g(will)f(need,)0 1556 y(explaining)37
-b(ho)m(w)g(AST)f(Ob)5 b(jects)36 b(b)s(eha)m(v)m(e)i(and)e(ho)m(w)g(to)
-i(manipulate)f(them)f(from)g(con)m(v)m(en)m(tional)k(F)-8
-b(ortran)0 1669 y(programs.)0 1831 y(If)40 b(y)m(ou)h(lik)m(e)g(to)g
-(read)g(do)s(cumen)m(ts)f(from)g(co)m(v)m(er)i(to)f(co)m(v)m(er,)k
-(then)40 b(y)m(ou)g(can)h(consider)f(this)g(section)i(as)f(an)0
-1944 y(in)m(tro)s(duction)32 b(to)h(the)f(programming)g(tec)m(hniques)h
-(used)e(in)h(the)g(rest)g(of)h(the)f(do)s(cumen)m(t.)46
-b(Otherwise,)32 b(y)m(ou)0 2057 y(ma)m(y)f(prefer)f(to)h(skim)f
-(through)g(it)g(on)h(a)f(\014rst)g(reading)h(and)e(return)h(to)h(it)g
-(later)g(as)g(reference)f(material.)0 2350 y Fw(4.1)112
-b(AST)38 b(Ob)6 b(jects)0 2571 y FG(An)37 b(AST)h(Ob)5
-b(ject)37 b(is)h(an)g(en)m(tit)m(y)i(whic)m(h)d(is)h(used)f(to)i(store)
-f(information)g(and)f(Ob)5 b(jects)38 b(come)h(in)e(v)-5
-b(arious)0 2683 y(kinds,)34 b(called)h Fx(classes,)h
-FG(according)e(to)h(the)f(sort)g(of)g(information)g(they)h(hold.)50
-b(Throughout)33 b(this)h(section,)0 2796 y(w)m(e)i(will)g(mak)m(e)g
-(use)g(of)f(a)h(simple)g(Ob)5 b(ject)35 b(b)s(elonging)h(to)g(the)g
-(\\Zo)s(omMap")g(class)h(to)f(illustrate)h(man)m(y)e(of)0
-2909 y(the)c(basic)f(concepts.)0 3071 y(A)i(Zo)s(omMap)g(is)g(an)g(Ob)5
-b(ject)32 b(that)g(con)m(tains)i(a)e(recip)s(e)g(for)g(con)m(v)m
-(erting)h(co)s(ordinates)g(b)s(et)m(w)m(een)f(t)m(w)m(o)i(h)m(yp)s(o-)0
-3184 y(thetical)e(co)s(ordinate)g(systems.)40 b(It)31
-b(do)s(es)f(this)g(b)m(y)g(m)m(ultiplying)h(all)h(the)e(co)s(ordinate)h
-(v)-5 b(alues)31 b(b)m(y)f(a)h(constan)m(t)0 3297 y(called)40
-b(the)f Fx(Zo)-5 b(om)41 b(factor.)66 b FG(A)39 b(Zo)s(omMap)g(is)f(a)h
-(v)m(ery)g(simple)g(Ob)5 b(ject)39 b(whic)m(h)f(exists)h(mainly)g(for)f
-(use)h(in)0 3410 y(examples.)h(It)27 b(allo)m(ws)i(us)d(to)i
-(illustrate)g(the)f(w)m(a)m(ys)h(in)f(whic)m(h)g(Ob)5
-b(jects)27 b(are)g(manipulated)g(and)g(to)h(in)m(tro)s(duce)0
-3523 y(the)38 b(concept)h(of)e(a)i(Mapping|a)f(recip)s(e)f(for)h(con)m
-(v)m(erting)h(co)s(ordinates|whic)m(h)f(is)g(fundamen)m(tal)g(to)g(the)
-0 3636 y(w)m(a)m(y)31 b(the)g(AST)f(library)g(w)m(orks.)0
-3929 y Fw(4.2)112 b(Ob)6 b(ject)38 b(Creation)g(and)g(P)m(oin)m(ters)0
-4149 y FG(Let)31 b(us)f(\014rst)f(consider)h(ho)m(w)h(to)g(create)h(a)f
-(Zo)s(omMap.)40 b(This)30 b(is)g(done)h(v)m(ery)f(simply)g(as)h(follo)m
-(ws:)262 4397 y Ft(INCLUDE)40 b('AST_PAR')262 4496 y(INTEGER)g(STATUS,)
-h(ZOOMMAP)262 4695 y(STATUS)g(=)i(0)262 4895 y(...)262
-5094 y(ZOOMMAP)d(=)j(AST_ZOOMMAP\()c(2,)k(5.0D0,)e(')i(',)g(STATUS)e
-(\))0 5354 y FG(The)24 b(\014rst)h(step)g(is)g(to)g(include)g(the)g
-(\014le)g(AST)p Fy(_)p FG(P)-8 b(AR)25 b(whic)m(h)f(de\014nes)g(the)i
-(in)m(terface)g(to)g(the)f(AST)f(library)h(and,)0 5467
-y(amongst)37 b(other)g(things,)g(declares)h(AST)p Fy(_)p
-FG(ZOOMMAP)c(to)j(b)s(e)f(an)g(in)m(teger)i(function.)58
-b(W)-8 b(e)38 b(then)d(declare)0 5580 y(an)f(in)m(teger)i(v)-5
-b(ariable)35 b(ZOOMMAP)f(to)h(receiv)m(e)i(the)d(result)h(and)e(an)i
-(in)m(teger)h(ST)-8 b(A)g(TUS)33 b(v)-5 b(ariable)36
-b(to)f(hold)0 5693 y(the)h(error)f(status,)i(whic)m(h)f(w)m(e)g
-(initialise)h(to)g(zero.)57 b(Next,)38 b(w)m(e)e(in)m(v)m(ok)m(e)h(AST)
-p Fy(_)p FG(ZOOMMAP)e(to)h(create)h(the)p eop end
-%%Page: 34 44
-TeXDict begin 34 43 bop 0 52 a FG(34)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FG(Zo)s(omMap.)72 b(The)40
-b(pattern)g(is)h(the)g(same)g(for)f(all)i(other)f(classes)h(of)e(AST)g
-(Ob)5 b(ject|y)m(ou)41 b(simply)g(pre\014x)0 464 y(\\AST)p
-Fy(_)p FG(")30 b(to)h(the)g(class)g(name)g(to)g(obtain)f(the)h
-(function)f(that)h(creates)h(the)e(Ob)5 b(ject.)0 618
-y(These)23 b(functions)g(are)h(called)h Fx(c)-5 b(onstructor)28
-b(functions,)d FG(or)f(simply)f Fx(c)-5 b(onstructors)26
-b FG(\(y)m(ou)e(can)g(\014nd)e(an)h(individ-)0 731 y(ual)g(description)
-g(of)h(all)f(AST)g(functions)f(in)h(App)s(endix)f(B\))h(and)g(the)g
-(argumen)m(ts)g(passed)g(to)h(the)f(constructor)0 844
-y(are)35 b(used)g(to)h(initialise)g(the)g(new)e(Ob)5
-b(ject.)55 b(In)35 b(this)g(case,)i(w)m(e)f(sp)s(ecify)f(2)g(as)g(the)h
-(n)m(um)m(b)s(er)d(of)j(co)s(ordinates)0 957 y(\()p Fx(i.e.)26
-b FG(w)m(e)g(are)h(going)g(to)f(w)m(ork)g(in)g(a)g(2-dimensional)h
-(space\))g(and)e(5.0D0)j(as)f(the)f(Zo)s(om)f(factor)i(to)g(b)s(e)e
-(applied.)0 1070 y(Note)31 b(that)f(this)f(is)g(a)h(F)-8
-b(ortran)30 b(double)f(precision)h(v)-5 b(alue.)41 b(W)-8
-b(e)30 b(will)g(return)e(to)j(the)e(\014nal)g(t)m(w)m(o)i(argumen)m
-(ts,)f(a)0 1183 y(blank)g(string)g(and)g(the)h(error)f(status,)h
-(shortly)f(\()p Fu(x)p FG(4.6)i(and)e Fu(x)p FG(4.13\).)0
-1336 y(The)38 b(in)m(teger)h(v)-5 b(alue)39 b(returned)d(b)m(y)i(the)h
-(constructor)f(is)g(termed)g(an)g Fx(Obje)-5 b(ct)39
-b(p)-5 b(ointer)40 b FG(or,)g(in)e(this)g(case,)j(a)0
-1449 y Fx(Zo)-5 b(omMap)45 b(p)-5 b(ointer.)78 b FG(This)41
-b(p)s(oin)m(ter)h(is)h(not)f(an)g(Ob)5 b(ject)43 b(itself,)j(but)41
-b(is)i(a)f(v)-5 b(alue)43 b(used)e(to)i(refer)f(to)h(the)0
-1562 y(Ob)5 b(ject.)41 b(Y)-8 b(ou)30 b(should)f(b)s(e)g(careful)i(not)
-f(to)h(mo)s(dify)e(an)m(y)h(Ob)5 b(ject)30 b(p)s(oin)m(ter)g(y)m
-(ourself,)g(as)h(this)e(ma)m(y)i(render)e(it)0 1675 y(in)m(v)-5
-b(alid.)54 b(Instead,)36 b(y)m(ou)f(p)s(erform)e(all)j(subsequen)m(t)e
-(op)s(erations)h(on)f(the)h(Ob)5 b(ject)35 b(b)m(y)f(passing)h(this)f
-(p)s(oin)m(ter)0 1788 y(to)d(other)g(AST)e(routines.)0
-2068 y Fw(4.3)112 b(The)38 b(Ob)6 b(ject)38 b(Hierarc)m(h)m(y)0
-2281 y FG(No)m(w)d(that)g(w)m(e)g(ha)m(v)m(e)h(created)f(our)f(\014rst)
-f(Zo)s(omMap,)j(let)f(us)f(examine)h(ho)m(w)g(it)f(relates)i(to)f
-(other)g(kinds)e(of)0 2393 y(Ob)5 b(ject)31 b(b)s(efore)e(in)m(v)m
-(estigating)34 b(what)c(w)m(e)h(can)g(do)f(with)g(it.)0
-2547 y(W)-8 b(e)28 b(ha)m(v)m(e)f(so)g(far)f(indicated)h(that)h(a)e(Zo)
-s(omMap)h(is)f(a)h(kind)f(of)h(Ob)5 b(ject)26 b(and)g(ha)m(v)m(e)i
-(also)f(men)m(tioned)g(that)g(it)g(is)0 2660 y(a)g(kind)f(of)h(Mapping)
-g(as)g(w)m(ell.)41 b(These)26 b(statemen)m(ts)j(can)e(b)s(e)f(represen)
-m(ted)h(v)m(ery)g(simply)g(using)f(the)h(follo)m(wing)0
-2773 y(hierarc)m(h)m(y:)227 2986 y Ft(Object)358 3086
-y(Mapping)489 3186 y(ZoomMap)0 3412 y FG(whic)m(h)34
-b(is)g(a)h(w)m(a)m(y)g(of)g(stating)g(that)g(a)g(Zo)s(omMap)f(is)g(a)h
-(sp)s(ecial)g(class)g(of)f(Mapping,)h(while)g(a)f(Mapping,)i(in)0
-3525 y(turn,)g(is)g(a)g(sp)s(ecial)g(class)g(of)g(Ob)5
-b(ject.)56 b(This)35 b(is)h(exactly)h(lik)m(e)g(sa)m(ying)f(that)g(an)g
-(Oak)f(is)h(a)g(sp)s(ecial)g(form)f(of)0 3638 y(T)-8
-b(ree,)30 b(while)g(a)f(T)-8 b(ree,)31 b(in)e(turn,)g(is)g(a)h(sp)s
-(ecial)g(form)f(of)g(Plan)m(t.)41 b(This)29 b(ma)m(y)h(seem)g(almost)g
-(trivial,)h(but)e(b)s(efore)0 3751 y(y)m(ou)e(turn)f(to)h(read)g
-(something)g(less)g(dull,)g(b)s(e)f(assured)g(that)i(it)f(is)g(a)g(v)m
-(ery)g(imp)s(ortan)m(t)g(idea)g(to)h(k)m(eep)f(in)g(mind)0
-3864 y(in)j(what)g(follo)m(ws.)0 4018 y(If)i(w)m(e)i(lo)s(ok)f(at)g
-(some)h(of)f(the)g(other)g(Ob)5 b(jects)32 b(used)g(b)m(y)h(the)g(AST)f
-(library)-8 b(,)34 b(w)m(e)f(can)g(see)g(ho)m(w)g(these)g(are)h(all)0
-4131 y(related)d(in)f(a)h(similar)g(w)m(a)m(y)g(\(don't)g(w)m(orry)f
-(ab)s(out)g(what)g(they)h(do)f(at)h(this)g(stage\):)227
-4344 y Ft(Object)358 4444 y(Mapping)489 4543 y(Frame)620
-4643 y(FrameSet)750 4742 y(Plot)489 4842 y(UnitMap)489
-4942 y(ZoomMap)358 5041 y(Channel)489 5141 y(FitsChan)489
-5241 y(XmlChan)0 5467 y FG(Notice)c(that)e(there)g(are)h(sev)m(eral)g
-(di\013eren)m(t)f(t)m(yp)s(es)g(of)g(Mapping)g(a)m(v)-5
-b(ailable)27 b(\()p Fx(i.e.)e FG(there)g(are)g(classes)h(of)f(Ob)5
-b(ject)0 5580 y(inden)m(ted)26 b(b)s(eneath)g(the)g(\\Mapping")h
-(heading\))g(and,)f(in)g(addition,)i(other)e(t)m(yp)s(es)g(of)g(Ob)5
-b(ject)27 b(whic)m(h)f(are)g(not)0 5693 y(Mappings|Channels)j(for)h
-(instance)h(\(whic)m(h)g(are)g(at)g(the)f(same)h(hierarc)m(hical)h(lev)
-m(el)g(as)f(Mappings\).)p eop end
-%%Page: 35 45
-TeXDict begin 35 44 bop 0 52 a Fz(4.4)92 b(Displa)m(ying)32
-b(Ob)5 b(jects)2727 b FG(35)0 351 y(The)28 b(most)g(sp)s(ecialised)h
-(Ob)5 b(ject)28 b(w)m(e)h(ha)m(v)m(e)h(sho)m(wn)d(here)h(is)h(the)f
-(Plot)h(\(whic)m(h)f(w)m(e)h(will)g(not)f(discuss)f(in)h(detail)0
-464 y(un)m(til)h Fu(x)p FG(21\).)42 b(As)29 b(y)m(ou)g(can)g(see,)h(a)f
-(Plot)h(is)e(a)i(F)-8 b(rameSet.)16 b(.)g(.)44 b(and)28
-b(a)h(F)-8 b(rame.)17 b(.)e(.)44 b(and)28 b(a)h(Mapping.)16
-b(.)f(.)44 b(and,)29 b(lik)m(e)0 577 y(ev)m(erything)i(else,)h
-(ultimately)g(an)e(Ob)5 b(ject.)0 740 y(What)30 b(this)f(means)g(is)h
-(that)g(y)m(ou)f(can)h(use)f(a)g(Plot)i(not)e(only)h(for)f(its)g(o)m
-(wn)h(sp)s(ecialised)g(b)s(eha)m(viour,)f(but)g(also)0
-853 y(whenev)m(er)34 b(an)m(y)g(of)g(these)g(other)g(less-sp)s
-(ecialised)h(classes)g(of)f(Ob)5 b(ject)34 b(is)g(called)h(for.)51
-b(The)33 b(general)i(rule)e(is)0 965 y(that)f(an)f(Ob)5
-b(ject)31 b(of)h(a)f(particular)h(class)g(ma)m(y)g(substitute)f(for)g
-(an)m(y)h(of)f(the)g(classes)i(app)s(earing)e(ab)s(o)m(v)m(e)h(it)g(in)
-0 1078 y(this)d(hierarc)m(h)m(y)-8 b(.)42 b(The)29 b(Ob)5
-b(ject)30 b(is)f(then)h(said)f(to)i Fx(inherit)f FG(the)g(b)s(eha)m
-(viour)f(of)h(these)g(higher)f(classes.)41 b(W)-8 b(e)31
-b(can)0 1191 y(therefore)g(use)f(our)g(Zo)s(omMap)g(whenev)m(er)g(a)h
-(Zo)s(omMap,)g(a)f(Mapping)h(or)f(an)g(Ob)5 b(ject)31
-b(is)f(called)i(for.)0 1354 y(Sometimes,)41 b(this)d(can)h(lead)f(to)h
-(some)g(sp)s(ectacular)g(short-cuts)f(b)m(y)g(a)m(v)m(oiding)i(the)e
-(need)g(to)h(break)f(large)0 1467 y(Ob)5 b(jects)43 b(do)m(wn)f(in)g
-(order)h(to)g(access)h(their)f(comp)s(onen)m(ts.)78 b(With)43
-b(some)g(practice)h(and)e(a)h(little)i(lateral)0 1580
-y(thinking)30 b(y)m(ou)h(should)e(so)s(on)h(b)s(e)g(able)h(to)g(sp)s
-(ot)f(opp)s(ortunities)g(for)g(this.)0 1742 y(Y)-8 b(ou)34
-b(can)g(\014nd)d(the)j(full)f Fx(class)j(hier)-5 b(ar)g(chy)p
-FG(,)37 b(as)c(this)h(is)f(called,)j(for)d(the)g(AST)g(library)g(in)g
-(App)s(endix)f(A)h(and)0 1855 y(y)m(ou)d(ma)m(y)h(need)f(to)h(refer)f
-(to)h(it)f(o)s(ccasionally)j(un)m(til)d(y)m(ou)h(are)f(familiar)h(with)
-f(the)g(classes)h(y)m(ou)g(need)f(to)h(use.)0 2148 y
-Fw(4.4)112 b(Displa)m(ying)39 b(Ob)6 b(jects)0 2369 y
-FG(Let)32 b(us)f(no)m(w)h(return)e(to)j(the)f(Zo)s(omMap)f(that)i(w)m
-(e)f(created)h(earlier)f(\()p Fu(x)p FG(4.2\))i(and)d(examine)h(what)g
-(it's)g(made)0 2482 y(of.)46 b(There)32 b(is)g(a)g(routine)g(for)g
-(doing)g(this,)h(called)g(AST)p Fy(_)p FG(SHO)m(W,)f(whic)m(h)g(is)g
-(pro)m(vided)g(mainly)g(for)g(lo)s(oking)0 2595 y(at)f(Ob)5
-b(jects)30 b(while)h(y)m(ou)g(are)f(debugging)h(programs.)0
-2758 y(If)42 b(y)m(ou)h(consult)g(the)g(description)g(of)g(AST)p
-Fy(_)p FG(SHO)m(W)f(in)g(App)s(endix)f(B,)47 b(y)m(ou)c(will)g(\014nd)e
-(that)j(it)f(tak)m(es)h(a)0 2870 y(p)s(oin)m(ter)33 b(to)h(an)f(Ob)5
-b(ject)33 b(as)h(its)f(argumen)m(t)h(\(in)f(addition)h(to)g(the)f
-(usual)g(ST)-8 b(A)g(TUS)32 b(argumen)m(t\).)50 b(Although)0
-2983 y(w)m(e)27 b(ha)m(v)m(e)h(only)f(a)g(Zo)s(omMap)f(p)s(oin)m(ter)h
-(a)m(v)-5 b(ailable,)30 b(fortunately)d(this)f(is)h(not)g(a)g(problem.)
-39 b(If)26 b(y)m(ou)h(refer)f(to)h(the)0 3096 y(brief)h(class)i
-(hierarc)m(h)m(y)f(describ)s(ed)f(ab)s(o)m(v)m(e)i(\()p
-Fu(x)p FG(4.3\),)i(y)m(ou)d(will)g(see)g(that)h(a)f(Zo)s(omMap)g(is)f
-(an)h(Ob)5 b(ject,)30 b(alb)s(eit)f(a)0 3209 y(sp)s(ecialised)k(one,)h
-(so)f(it)g(inherits)f(the)h(prop)s(erties)f(of)h(all)g(Ob)5
-b(jects)33 b(and)f(can)h(b)s(e)f(substituted)g(wherev)m(er)h(an)0
-3322 y(Ob)5 b(ject)37 b(is)f(required.)58 b(W)-8 b(e)38
-b(can)f(therefore)g(pass)f(our)g(Zo)s(omMap)g(p)s(oin)m(ter)h(directly)
-g(to)g(AST)p Fy(_)p FG(SHO)m(W,)f(as)0 3435 y(follo)m(ws:)262
-3683 y Ft(CALL)41 b(AST_SHOW\()f(ZOOMMAP,)h(STATUS)g(\))0
-3945 y FG(The)j(output)h(from)f(this)h(will)g(app)s(ear)f(on)h(the)f
-(standard)g(output)h(stream)g(and)f(should)g(lo)s(ok)h(lik)m(e)h(the)0
-4058 y(follo)m(wing:)227 4306 y Ft(Begin)c(ZoomMap)358
-4406 y(Nin)g(=)i(2)227 4505 y(IsA)f(Mapping)358 4605
-y(Zoom)f(=)h(5)227 4704 y(End)g(ZoomMap)0 4966 y FG(Here,)e(the)e
-(\\Begin")i(and)d(\\End")g(lines)h(mark)f(the)h(b)s(eginning)e(and)h
-(end)g(of)h(the)g(Zo)s(omMap,)i(while)d(the)0 5079 y(v)-5
-b(alues)34 b(2)g(and)f(5)h(are)h(simply)e(the)h(v)-5
-b(alues)34 b(w)m(e)g(supplied)f(to)h(initialise)i(it)e(\()p
-Fu(x)p FG(4.2\).)53 b(These)33 b(ha)m(v)m(e)i(b)s(een)e(giv)m(en)0
-5192 y(simple)d(names)h(to)g(mak)m(e)g(them)f(easy)h(to)h(refer)e(to.)0
-5354 y(The)38 b(line)h(in)g(the)f(middle)h(whic)m(h)f(sa)m(ys)h(\\IsA)g
-(Mapping")g(is)g(a)g(dividing)g(line)g(b)s(et)m(w)m(een)g(the)g(t)m(w)m
-(o)h(v)-5 b(alues.)0 5467 y(It)36 b(indicates)h(that)g(the)f(\\Nin")h
-(v)-5 b(alue)36 b(is)g(a)g(prop)s(ert)m(y)g(shared)f(b)m(y)h(all)h
-(Mappings,)g(so)g(the)f(Zo)s(omMap)g(has)0 5580 y(inherited)k(this)g
-(from)g(its)h Fx(p)-5 b(ar)g(ent)44 b(class)d FG(\(Mapping\).)71
-b(The)40 b(\\Zo)s(om")h(v)-5 b(alue,)44 b(ho)m(w)m(ev)m(er,)g(is)d(sp)s
-(eci\014c)f(to)h(a)0 5693 y(Zo)s(omMap)30 b(and)g(isn't)h(shared)e(b)m
-(y)i(other)f(kinds)g(of)g(Mappings.)p eop end
-%%Page: 36 46
-TeXDict begin 36 45 bop 0 52 a FG(36)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y Fw(4.5)112 b(Getting)37
-b(A)m(ttribute)g(V)-9 b(alues)0 579 y FG(W)h(e)31 b(sa)m(w)f(ab)s(o)m
-(v)m(e)h(\()p Fu(x)p FG(4.4\))h(ho)m(w)e(to)h(displa)m(y)f(the)g(in)m
-(ternal)g(v)-5 b(alues)30 b(of)g(an)g(Ob)5 b(ject,)31
-b(but)e(what)g(ab)s(out)h(accessing)0 692 y(these)c(v)-5
-b(alues)26 b(from)e(a)i(program?)39 b(Not)26 b(all)g(in)m(ternal)g(Ob)5
-b(ject)26 b(v)-5 b(alues)26 b(are)f(accessible)i(in)e(this)h(w)m(a)m(y)
--8 b(,)28 b(but)c(man)m(y)0 805 y(are.)50 b(Those)33
-b(that)g(are,)i(are)f(called)g Fx(attributes)p FG(.)50
-b(A)33 b(description)h(of)f(all)h(the)f(attributes)h(used)f(b)m(y)g
-(the)g(AST)0 918 y(library)d(can)h(b)s(e)e(found)g(in)h(App)s(endix)f
-(C.)0 1086 y(A)m(ttributes)e(come)h(in)e(sev)m(eral)h(data)h(t)m(yp)s
-(es)e(\(c)m(haracter)i(string,)g(in)m(teger,)h(b)s(o)s(olean)d(and)g
-(\015oating)h(p)s(oin)m(t\))g(and)0 1198 y(there)32 b(is)g(a)g
-(standard)f(w)m(a)m(y)h(of)g(obtaining)h(their)f(v)-5
-b(alues.)45 b(As)31 b(an)h(example,)h(consider)f(obtaining)g(the)g(v)-5
-b(alue)0 1311 y(of)31 b(the)f(Nin)g(attribute)h(for)g(the)f(Zo)s(omMap)
-g(created)i(earlier.)42 b(This)29 b(could)i(b)s(e)e(done)h(as)h(follo)m
-(ws:)262 1574 y Ft(INTEGER)40 b(NIN)262 1773 y(...)262
-1973 y(NIN)i(=)h(AST_GETI\()d(ZOOMMAP,)g('Nin',)h(STATUS)g(\))0
-2249 y FG(Here,)g(the)e(in)m(teger)g(function)f(AST)p
-Fy(_)p FG(GETI)g(is)g(used)g(to)h(extract)g(the)g(attribute)g(v)-5
-b(alue)39 b(b)m(y)f(giving)h(it)g(the)0 2362 y(Zo)s(omMap)30
-b(p)s(oin)m(ter)h(and)e(the)i(attribute)g(name)f(\(attribute)h(names)g
-(are)f(not)h(case)g(sensitiv)m(e,)h(but)d(w)m(e)i(ha)m(v)m(e)0
-2475 y(used)26 b(consisten)m(t)h(capitalisation)i(in)d(this)h(do)s
-(cumen)m(t)f(in)g(order)g(to)h(iden)m(tify)f(them\).)40
-b(Remem)m(b)s(er)26 b(to)h(use)f(the)0 2588 y(AST)p Fy(_)p
-FG(P)-8 b(AR)30 b(include)g(\014le)g(to)h(sa)m(v)m(e)h(ha)m(ving)f(to)g
-(declare)h(AST)p Fy(_)p FG(GETI)d(as)h(in)m(teger)i(y)m(ourself.)0
-2755 y(If)h(w)m(e)h(had)g(w)m(an)m(ted)g(the)g(v)-5 b(alue)34
-b(of)g(the)g(Zo)s(om)f(attribute,)j(w)m(e)e(w)m(ould)f(probably)g(ha)m
-(v)m(e)i(used)e(AST)p Fy(_)p FG(GETD)0 2868 y(instead,)e(this)f(b)s
-(eing)g(a)h(double)f(precision)g(v)m(ersion)h(of)g(the)f(same)h
-(function,)f(for)h(example:)262 3131 y Ft(DOUBLE)41 b(PRECISION)e(ZOOM)
-262 3330 y(...)262 3529 y(ZOOM)i(=)j(AST_GETD\()39 b(ZOOMMAP,)i
-('Zoom',)f(STATUS)i(\))0 3805 y FG(Ho)m(w)m(ev)m(er,)33
-b(w)m(e)d(could)h(equally)g(w)m(ell)g(ha)m(v)m(e)h(read)e(the)h(Nin)f
-(v)-5 b(alue)31 b(as)f(double)g(precision,)h(or)f(the)h(Zo)s(om)f(v)-5
-b(alue)0 3918 y(as)31 b(an)f(in)m(teger,)i(or)e(whatev)m(er)h(w)m(e)g
-(w)m(an)m(ted.)0 4086 y(The)41 b(data)h(t)m(yp)s(e)g(y)m(ou)g(w)m(an)m
-(t)g(returned)f(is)h(sp)s(eci\014ed)e(simply)i(b)m(y)f(replacing)h(the)
-g(\014nal)f(c)m(haracter)j(of)d(the)0 4198 y(AST)p Fy(_)p
-FG(GETx)31 b(function)h(name)g(with)g(C)g(\(c)m(haracter\),)k(D)c
-(\(double)g(precision\),)i(I)e(\(in)m(teger\),)j(L)d(\(logical\))j(or)0
-4311 y(R)k(\(real\).)70 b(If)39 b(p)s(ossible,)j(the)e(v)-5
-b(alue)40 b(is)g(con)m(v)m(erted)h(to)f(the)g(t)m(yp)s(e)g(y)m(ou)g(w)m
-(an)m(t.)69 b(If)39 b(not,)k(an)c(error)g(message)0 4424
-y(will)34 b(result.)52 b(In)34 b(con)m(v)m(erting)i(from)d(in)m(teger)j
-(to)f(logical,)i(zero)e(is)f(regarded)g(as)h(.F)-10 b(ALSE.)34
-b(and)g(non-zero)g(as)0 4537 y(.TR)m(UE..)50 b(Note)35
-b(that)f(all)g(\015oating)g(p)s(oin)m(t)g(v)-5 b(alues)33
-b(are)h(stored)f(in)m(ternally)i(as)e(double)g(precision.)50
-b(Bo)s(olean)0 4650 y(v)-5 b(alues)31 b(are)f(stored)h(as)g(in)m
-(tegers,)g(but)f(only)h(tak)m(e)h(the)e(v)-5 b(alues)31
-b(1)g(and)e(0)i(\(for)g(true/false\).)0 4959 y Fw(4.6)112
-b(Setting)38 b(A)m(ttribute)e(V)-9 b(alues)0 5187 y FG(Some)37
-b(attribute)h(v)-5 b(alues)38 b(are)f(read-only)h(and)e(cannot)i(b)s(e)
-f(altered)h(after)f(an)g(Ob)5 b(ject)38 b(has)f(b)s(een)f(created.)0
-5300 y(The)23 b(Nin)h(attribute)h(of)f(a)h(Zo)s(omMap)f(\(describing)g
-(the)g(n)m(um)m(b)s(er)e(of)j(co)s(ordinates\))g(is)f(lik)m(e)h(this.)
-39 b(It)24 b(is)g(de\014ned)0 5413 y(when)29 b(the)i(Zo)s(omMap)f(is)h
-(created,)g(but)f(cannot)h(then)f(b)s(e)g(altered.)0
-5580 y(Other)g(attributes,)i(ho)m(w)m(ev)m(er,)g(can)f(b)s(e)f(mo)s
-(di\014ed)g(whenev)m(er)g(y)m(ou)h(w)m(an)m(t.)43 b(A)31
-b(Zo)s(omMap's)f(Zo)s(om)h(attribute)0 5693 y(is)f(lik)m(e)i(this.)41
-b(If)30 b(w)m(e)g(w)m(an)m(ted)i(to)f(c)m(hange)g(it,)g(this)g(could)f
-(b)s(e)g(done)g(simply)g(as)g(follo)m(ws:)p eop end
-%%Page: 37 47
-TeXDict begin 37 46 bop 0 52 a Fz(4.7)92 b(T)-8 b(esting,)32
-b(Clearing)e(and)g(Defaulting)i(A)m(ttributes)1740 b
-FG(37)262 351 y Ft(CALL)41 b(AST_SETD\()f(ZOOMMAP,)h('Zoom',)f(99.6D0,)
-h(STATUS)g(\))0 607 y FG(whic)m(h)31 b(sets)h(the)g(v)-5
-b(alue)32 b(to)g(99.6)h(\(double)e(precision\).)45 b(As)32
-b(when)e(getting)j(an)f(attribute)g(v)-5 b(alue)32 b(\()p
-Fu(x)p FG(4.5\),)i(y)m(ou)0 720 y(ha)m(v)m(e)e(a)f(c)m(hoice)h(of)f
-(whic)m(h)g(data)g(t)m(yp)s(e)g(y)m(ou)g(will)g(use)f(to)i(supply)d
-(the)i(new)f(v)-5 b(alue.)42 b(F)-8 b(or)32 b(instance,)f(y)m(ou)g
-(could)0 833 y(use)f(an)g(in)m(teger)i(v)-5 b(alue,)31
-b(as)g(in:)262 1075 y Ft(CALL)41 b(AST_SETI\()f(ZOOMMAP,)h('Zoom',)f
-(99,)j(STATUS)e(\))0 1331 y FG(and)31 b(the)h(necessary)h(data)f(con)m
-(v)m(ersion)i(w)m(ould)d(o)s(ccur.)45 b(Y)-8 b(ou)33
-b(sp)s(ecify)e(the)i(data)f(t)m(yp)s(e)g(y)m(ou)h(w)m(an)m(t)f(to)h
-(supply)0 1444 y(simply)41 b(b)m(y)h(replacing)g(the)g(\014nal)g(c)m
-(haracter)h(of)f(the)g(AST)p Fy(_)p FG(SETx)e(routine)h(name)h(with)g
-(C)f(\(c)m(haracter\),)0 1557 y(D)f(\(double)f(precision\),)j(I)d(\(in)
-m(teger\),)44 b(L)39 b(\(logical\))j(or)d(R)h(\(real\).)68
-b(Setting)40 b(a)g(b)s(o)s(olean)f(attribute)h(to)g(an)m(y)0
-1670 y(non-zero)31 b(in)m(teger)h(causes)e(it)h(to)h(tak)m(e)f(the)g(v)
--5 b(alue)31 b(1.)0 1831 y(An)h(alternativ)m(e)j(w)m(a)m(y)e(of)f
-(setting)i(attribute)f(v)-5 b(alues)32 b(for)g(Ob)5 b(jects)32
-b(is)h(to)g(use)f(the)g(AST)p Fy(_)p FG(SET)e(routine)j(\()p
-Fx(i.e.)0 1944 y FG(with)e(no)f(\014nal)h(c)m(haracter)h(sp)s(ecifying)
-f(a)g(data)h(t)m(yp)s(e\).)42 b(In)30 b(this)h(case,)h(y)m(ou)g(supply)
-d(the)i(attribute)h(v)-5 b(alues)31 b(in)0 2057 y(a)36
-b(c)m(haracter)h(string.)55 b(The)35 b(big)g(adv)-5 b(an)m(tage)37
-b(of)f(this)f(metho)s(d)g(is)g(that)h(y)m(ou)f(can)h(assign)f(v)-5
-b(alues)36 b(to)g(sev)m(eral)0 2170 y(attributes)31 b(at)h(once,)f
-(separating)h(them)e(with)h(commas.)42 b(This)30 b(also)h(reads)g(more)
-f(naturally)h(in)g(programs.)0 2283 y(F)-8 b(or)31 b(example:)262
-2525 y Ft(CALL)41 b(AST_SET\()g(ZOOMMAP,)f('Zoom=99.6,)f(Report=1',)g
-(STATUS)j(\))0 2781 y FG(w)m(ould)h(set)g(v)-5 b(alues)43
-b(for)g(b)s(oth)f(the)h(Zo)s(om)g(attribute)g(and)g(the)g(Rep)s(ort)f
-(attribute)i(\(ab)s(out)f(whic)m(h)f(more)0 2894 y(shortly|)p
-Fu(x)p FG(4.8\).)80 b(Y)-8 b(ou)43 b(don't)g(really)g(ha)m(v)m(e)h(to)g
-(w)m(orry)e(ab)s(out)g(data)i(t)m(yp)s(es)f(with)f(this)h(metho)s(d,)i
-(as)e(an)m(y)0 3007 y(c)m(haracter)29 b(represen)m(tation)f(will)f(do)g
-(\(although)g(y)m(ou)h(m)m(ust)f(use)f(0/1)i(instead)g(of)f(.TR)m
-(UE./.F)-10 b(ALSE.,)29 b(whic)m(h)0 3120 y(are)i(not)f(supp)s
-(orted\).)0 3281 y(Finally)-8 b(,)38 b(a)e(v)m(ery)g(con)m(v)m(enien)m
-(t)h(w)m(a)m(y)f(of)g(setting)g(attribute)g(v)-5 b(alues)36
-b(is)f(to)h(do)g(so)f(at)h(the)g(same)g(time)g(as)f(y)m(ou)0
-3394 y(create)42 b(an)f(Ob)5 b(ject.)72 b(Ev)m(ery)41
-b(Ob)5 b(ject)40 b(constructor)h(function)g(has)f(a)h(p)s(en)m
-(ultimate)h(c)m(haracter)g(argumen)m(t)0 3507 y(whic)m(h)25
-b(allo)m(ws)i(y)m(ou)f(to)g(do)f(this.)39 b(Although)26
-b(y)m(ou)g(can)f(simply)g(lea)m(v)m(e)j(this)e(blank,)g(it)g(is)f(an)h
-(ideal)g(opp)s(ortunit)m(y)0 3620 y(to)f(initialise)h(the)e(Ob)5
-b(ject)24 b(to)h(ha)m(v)m(e)g(just)f(the)g(attributes)h(y)m(ou)f(w)m
-(an)m(t.)40 b(F)-8 b(or)24 b(example,)j(w)m(e)d(migh)m(t)h(ha)m(v)m(e)g
-(created)0 3733 y(our)30 b(original)h(Zo)s(omMap)g(with:)262
-3975 y Ft(ZOOMMAP)40 b(=)j(AST_ZOOMMAP\()c(2,)k(5.0D0,)e('Report=1',)e
-(STATUS)i(\))0 4231 y FG(and)30 b(it)h(w)m(ould)f(then)g(start)h(life)g
-(with)f(its)h(Rep)s(ort)f(attribute)h(set)g(to)g(1.)0
-4522 y Fw(4.7)112 b(T)-9 b(esting,)38 b(Clearing)g(and)g(Defaulting)h
-(A)m(ttributes)0 4742 y FG(Y)-8 b(ou)29 b(can)f(use)h(the)f(AST)p
-Fy(_)p FG(GETx)f(family)i(of)g(routines)f(\()p Fu(x)p
-FG(4.5\))i(to)f(get)h(a)f(v)-5 b(alue)28 b(for)g(an)m(y)h(Ob)5
-b(ject)29 b(attribute)g(at)0 4854 y(an)m(y)i(time,)h(regardless)f(of)g
-(whether)f(a)h(v)-5 b(alue)31 b(has)g(previously)f(b)s(een)g(set)h(for)
-g(it.)42 b(If)30 b(no)h(v)-5 b(alue)31 b(has)g(b)s(een)f(set,)0
-4967 y(the)h(AST)e(library)h(will)h(generate)h(a)f(suitable)f(default)h
-(v)-5 b(alue.)0 5128 y(Often,)47 b(the)c(default)h(v)-5
-b(alue)44 b(of)f(an)h(attribute)g(will)g(not)f(simply)g(b)s(e)g
-(trivial)i(\(zero)f(or)g(blank\))f(but)g(ma)m(y)0 5241
-y(in)m(v)m(olv)m(e)h(considerable)e(pro)s(cessing)f(to)i(calculate.)76
-b(Wherev)m(er)43 b(p)s(ossible,)h(defaults)d(are)h(designed)g(to)g(b)s
-(e)0 5354 y(real-life,)c(sensible)d(v)-5 b(alues)36 b(that)f(con)m(v)m
-(ey)i(information)e(ab)s(out)g(the)h(state)g(of)f(the)h(Ob)5
-b(ject.)55 b(In)34 b(particular,)0 5467 y(they)24 b(ma)m(y)h(often)f(b)
-s(e)f(based)h(on)f(the)i(v)-5 b(alues)24 b(of)g(other)g(attributes,)i
-(so)e(their)g(v)-5 b(alues)24 b(ma)m(y)h(c)m(hange)g(in)e(resp)s(onse)0
-5580 y(to)31 b(c)m(hanges)h(in)e(these)h(other)g(attributes.)41
-b(The)30 b(Zo)s(omMap)h(class)g(that)g(w)m(e)g(ha)m(v)m(e)h(studied)d
-(so)i(far)f(is)h(a)g(little)0 5693 y(to)s(o)g(simple)f(to)i(sho)m(w)e
-(this)g(b)s(eha)m(viour,)g(but)g(w)m(e)h(will)g(meet)g(it)g(later)g
-(on.)p eop end
-%%Page: 38 48
-TeXDict begin 38 47 bop 0 52 a FG(38)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FG(An)i(attribute)i(that)f(returns)f(a)
-h(default)g(v)-5 b(alue)33 b(in)g(this)g(w)m(a)m(y)g(is)g(said)g(to)h
-(b)s(e)e Fx(un-set.)47 b FG(Con)m(v)m(ersely)-8 b(,)35
-b(once)f(an)0 464 y(explicit)d(v)-5 b(alue)30 b(has)g(b)s(een)e
-(assigned)i(to)h(an)e(attribute,)i(it)f(b)s(ecomes)g
-Fx(set)g FG(and)f(will)h(alw)m(a)m(ys)h(return)e(precisely)0
-577 y(that)i(v)-5 b(alue,)31 b(nev)m(er)g(a)g(default.)0
-738 y(The)41 b(distinction)i(b)s(et)m(w)m(een)f(set)h(and)e(un-set)h
-(attributes)g(is)g(imp)s(ortan)m(t)g(and)f(a\013ects)j(the)e(b)s(eha)m
-(viour)f(of)0 851 y(sev)m(eral)f(k)m(ey)g(routines)f(in)f(the)h(AST)f
-(library)-8 b(.)67 b(Y)-8 b(ou)39 b(can)g(test)h(if)f(an)g(attribute)g
-(is)g(set)h(using)e(the)h(logical)0 964 y(function)30
-b(AST)p Fy(_)p FG(TEST,)e(as)j(in:)262 1205 y Ft(IF)42
-b(\()h(AST_TEST\()d(ZOOMMAP,)h('Report',)e(STATUS)j(\))h(\))g(THEN)392
-1305 y(<the)f(Report)f(attribute)f(is)j(set>)262 1404
-y(END)f(IF)0 1659 y FG(\(as)26 b(usual,)g(remem)m(b)s(er)f(to)h
-(include)f(the)h(AST)p Fy(_)p FG(P)-8 b(AR)24 b(\014le)i(to)g(declare)g
-(the)g(function)f(as)g(LOGICAL,)g(or)g(mak)m(e)0 1772
-y(this)30 b(declaration)i(y)m(ourself)7 b(\).)0 1933
-y(Once)31 b(an)f(attribute)h(is)g(set,)g(y)m(ou)g(can)g(return)f(it)h
-(to)g(its)g(un-set)g(state)h(using)e(AST)p Fy(_)p FG(CLEAR.)f(The)h
-(e\013ect)i(is)0 2045 y(as)f(if)f(it)h(had)f(nev)m(er)g(b)s(een)g(set)h
-(in)f(the)g(\014rst)g(place.)42 b(F)-8 b(or)31 b(example:)262
-2287 y Ft(CALL)41 b(AST_CLEAR\()f(ZOOMMAP,)g('Report',)g(STATUS)h(\))0
-2541 y FG(w)m(ould)30 b(ensure)g(that)h(the)f(default)h(v)-5
-b(alue)31 b(of)f(the)h(Rep)s(ort)f(attribute)h(is)f(used)g(subsequen)m
-(tly)-8 b(.)0 2832 y Fw(4.8)112 b(T)-9 b(ransforming)39
-b(Co)s(ordinates)0 3051 y FG(W)-8 b(e)28 b(no)m(w)g(ha)m(v)m(e)g(the)f
-(necessary)h(apparatus)f(to)h(start)g(using)e(our)h(Zo)s(omMap)g(to)h
-(sho)m(w)f(what)g(it)h(is)f(really)h(for.)0 3164 y(Here,)h(w)m(e)e
-(will)g(also)h(encoun)m(ter)g(a)g(routine)f(that)g(is)g(a)h(little)h
-(more)e(fussy)f(ab)s(out)h(the)g(t)m(yp)s(e)g(of)g(p)s(oin)m(ter)h(it)f
-(will)0 3277 y(accept.)0 3438 y(The)33 b(purp)s(ose)g(of)h(a)g(Zo)s
-(omMap)g(is)g(to)h(m)m(ultiply)f(co)s(ordinates)h(b)m(y)f(a)g(constan)m
-(t)h(zo)s(om)g(factor.)52 b(T)-8 b(o)35 b(witness)0 3551
-y(this)30 b(in)g(action,)i(w)m(e)f(will)g(\014rst)e(set)i(the)g(Rep)s
-(ort)f(attribute)h(for)f(our)g(Zo)s(omMap)g(to)i(a)e(non-zero)h(v)-5
-b(alue:)262 3792 y Ft(CALL)41 b(AST_SET\()g(ZOOMMAP,)f('Report=1',)f
-(STATUS)i(\))0 4047 y FG(This)32 b(b)s(o)s(olean)h(\(in)m(teger\))i
-(attribute,)f(whic)m(h)e(is)h(presen)m(t)g(in)f(all)i(Mappings)f(\(and)
-f(a)h(Zo)s(omMap)g(is)g(a)g(Map-)0 4160 y(ping\),)28
-b(causes)f(the)g(automatic)h(displa)m(y)f(of)g(all)g(co)s(ordinate)h(v)
--5 b(alues)27 b(that)g(the)g(Mapping)g(con)m(v)m(erts.)41
-b(It)27 b(is)f(not)0 4273 y(a)32 b(go)s(o)s(d)f(idea)h(to)g(lea)m(v)m
-(e)h(this)f(feature)f(turned)g(on)g(in)g(a)h(\014nished)d(program,)j
-(but)e(it)i(can)g(sa)m(v)m(e)h(a)f(lot)g(of)f(w)m(ork)0
-4385 y(during)e(debugging.)0 4546 y(Our)d(next)h(step)g(is)g(to)h(set)g
-(up)e(some)h(co)s(ordinates)h(for)f(the)g(Zo)s(omMap)g(to)h(w)m(ork)f
-(on,)h(using)e(t)m(w)m(o)j(arra)m(ys)e(XIN)0 4659 y(and)h(YIN,)i(and)e
-(t)m(w)m(o)j(arra)m(ys)e(to)h(receiv)m(e)g(the)g(transformed)e(co)s
-(ordinates,)i(X)m(OUT)f(and)g(YOUT.)g(Note)h(that)0 4772
-y(these)h(arra)m(ys)g(are)f(double)g(precision,)h(as)g(are)f(all)i(co)s
-(ordinate)f(data)g(pro)s(cessed)f(b)m(y)g(the)h(AST)e(library:)262
-5013 y Ft(DOUBLE)41 b(PRECISION)e(XIN\()j(10)h(\),)g(YIN\()f(10)h(\),)f
-(XOUT\()g(10)h(\),)f(YOUT\()g(10)h(\))262 5113 y(DATA)e(XIN)i(/)g(0D0,)
-f(1D0,)g(2D0,)g(3D0,)g(4D0,)g(5D0,)g(6D0,)f(7D0,)h(8D0,)g(9D0)h(/)262
-5213 y(DATA)e(YIN)i(/)g(0D0,)f(2D0,)g(4D0,)g(6D0,)g(8D0,)g(10D0,)f
-(12D0,)h(14D0,)f(16D0,)h(18D0)g(/)0 5467 y FG(W)-8 b(e)29
-b(will)f(no)m(w)g(use)g(the)g(routine)g(AST)p Fy(_)p
-FG(TRAN2)f(to)h(transform)g(the)g(input)f(co)s(ordinates.)40
-b(This)27 b(is)h(the)g(most)0 5580 y(commonly-used)c(\(2-dimensional\))
-i(co)s(ordinate)e(transformation)h(routine.)38 b(If)24
-b(y)m(ou)g(lo)s(ok)g(at)h(its)f(description)0 5693 y(in)33
-b(App)s(endix)e(B,)k(y)m(ou)e(will)g(see)h(that)g(it)f(requires)g(a)g
-(p)s(oin)m(ter)h(to)f(a)h(Mapping,)g(so)f(w)m(e)h(cannot)f(supply)f
-(just)p eop end
-%%Page: 39 49
-TeXDict begin 39 48 bop 0 52 a Fz(4.8)92 b(T)-8 b(ransforming)30
-b(Co)s(ordinates)2442 b FG(39)0 351 y(an)m(y)37 b(old)f(Ob)5
-b(ject)37 b(p)s(oin)m(ter,)h(as)e(w)m(e)h(could)f(with)g(the)h
-(routines)f(discussed)f(previously)-8 b(.)59 b(If)36
-b(w)m(e)g(passed)g(it)h(a)0 464 y(p)s(oin)m(ter)30 b(to)h(an)g
-(inappropriate)f(Ob)5 b(ject,)31 b(an)f(error)g(message)h(w)m(ould)g
-(result.)0 624 y(F)-8 b(ortunately)g(,)39 b(a)c(Zo)s(omMap)g(is)g(a)h
-(Mapping)f(\(App)s(endix)f(A\),)j(so)e(w)m(e)h(can)f(use)g(it)g(with)g
-(AST)p Fy(_)p FG(TRAN2)g(to)0 737 y(transform)30 b(our)g(co)s
-(ordinates,)h(as)f(follo)m(ws:)262 973 y Ft(CALL)41 b(AST_TRAN2\()f
-(ZOOMMAP,)g(10,)j(XIN,)e(YIN,)h(.TRUE.,)f(XOUT,)h(YOUT,)f(STATUS)g(\))0
-1222 y FG(Here,)31 b(10)g(is)f(the)g(n)m(um)m(b)s(er)f(of)h(p)s(oin)m
-(ts)g(w)m(e)g(w)m(an)m(t)h(to)g(transform)e(and)h(the)g(\014fth)f
-(argumen)m(t)h(v)-5 b(alue)31 b(of)f(.TR)m(UE.)0 1335
-y(indicates)h(that)g(w)m(e)g(w)m(an)m(t)g(to)g(transform)f(in)g(the)h
-Fx(forwar)-5 b(d)33 b FG(direction)e(\(from)f(input)f(to)j(output\).)0
-1494 y(Because)d(our)d(Zo)s(omMap's)h(Rep)s(ort)g(attribute)h(is)f(set)
-h(to)g(1,)h(this)e(will)g(cause)h(the)f(e\013ects)i(of)e(the)g(Zo)s
-(omMap)0 1607 y(on)j(the)h(co)s(ordinates)g(to)g(b)s(e)f(displa)m(y)m
-(ed)h(on)f(the)h(standard)e(output)h(stream:)227 1843
-y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227 1943 y(\(1,)h(2\))f(-->)h
-(\(5,)f(10\))227 2042 y(\(2,)h(4\))f(-->)h(\(10,)f(20\))227
-2142 y(\(3,)h(6\))f(-->)h(\(15,)f(30\))227 2242 y(\(4,)h(8\))f(-->)h
-(\(20,)f(40\))227 2341 y(\(5,)h(10\))f(-->)g(\(25,)g(50\))227
-2441 y(\(6,)h(12\))f(-->)g(\(30,)g(60\))227 2540 y(\(7,)h(14\))f(-->)g
-(\(35,)g(70\))227 2640 y(\(8,)h(16\))f(-->)g(\(40,)g(80\))227
-2740 y(\(9,)h(18\))f(-->)g(\(45,)g(90\))0 2989 y FG(This)31
-b(sho)m(ws)g(the)g(co)s(ordinate)i(v)-5 b(alues)32 b(of)f(eac)m(h)i(p)s
-(oin)m(t)e(b)s(oth)g(b)s(efore)g(and)g(after)h(the)f(Zo)s(omMap)h(is)f
-(applied.)0 3102 y(Y)-8 b(ou)33 b(can)h(see)f(that)h(eac)m(h)g(co)s
-(ordinate)f(v)-5 b(alue)34 b(has)e(b)s(een)h(m)m(ultiplied)g(b)m(y)g
-(the)g(factor)h(5)f(determined)f(b)m(y)h(the)0 3215 y(Zo)s(om)h
-(attribute)i(v)-5 b(alue.)54 b(The)34 b(transformed)g(co)s(ordinates)h
-(are)g(no)m(w)g(stored)g(in)f(the)h(X)m(OUT)g(and)f(YOUT)0
-3328 y(arra)m(ys.)0 3487 y(If)d(w)m(e)h(w)m(an)m(ted)h(to)f(transform)f
-(in)g(the)h(opp)s(osite)g(direction,)h(w)m(e)f(need)f(simply)h(c)m
-(hange)g(the)g(\014fth)f(argumen)m(t)0 3600 y(of)j(AST)p
-Fy(_)p FG(TRAN2)f(from)h(.TR)m(UE.)g(to)h(.F)-10 b(ALSE..)51
-b(W)-8 b(e)35 b(can)f(also)h(feed)f(the)g(output)f(co)s(ordinates)i
-(from)e(the)0 3713 y(ab)s(o)m(v)m(e)f(bac)m(k)f(in)m(to)g(the)g
-(routine:)262 3949 y Ft(CALL)41 b(AST_TRAN2\()f(ZOOMMAP,)g(10,)j(XOUT,)
-e(YOUT,)h(.FALSE.,)e(XIN,)i(YIN,)g(STATUS)f(\))0 4198
-y FG(The)30 b(output)g(w)m(ould)g(then)g(lo)s(ok)h(lik)m(e:)227
-4434 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227 4534 y(\(5,)h(10\))f
-(-->)g(\(1,)h(2\))227 4633 y(\(10,)f(20\))h(-->)f(\(2,)g(4\))227
-4733 y(\(15,)g(30\))h(-->)f(\(3,)g(6\))227 4833 y(\(20,)g(40\))h(-->)f
-(\(4,)g(8\))227 4932 y(\(25,)g(50\))h(-->)f(\(5,)g(10\))227
-5032 y(\(30,)g(60\))h(-->)f(\(6,)g(12\))227 5132 y(\(35,)g(70\))h(-->)f
-(\(7,)g(14\))227 5231 y(\(40,)g(80\))h(-->)f(\(8,)g(16\))227
-5331 y(\(45,)g(90\))h(-->)f(\(9,)g(18\))0 5580 y FG(This)35
-b(is)h(termed)f(the)h Fx(inverse)g FG(transformation)g(\(w)m(e)h(ha)m
-(v)m(e)g(con)m(v)m(erted)g(from)e(output)g(to)i(input\))e(and)g(y)m(ou)
-0 5693 y(can)c(see)g(that)g(the)f(original)i(co)s(ordinates)f(ha)m(v)m
-(e)g(b)s(een)f(reco)m(v)m(ered)i(b)m(y)e(dividing)g(b)m(y)h(the)f(Zo)s
-(om)g(factor.)p eop end
-%%Page: 40 50
-TeXDict begin 40 49 bop 0 52 a FG(40)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y Fw(4.9)112 b(Managing)40
-b(Ob)6 b(ject)37 b(P)m(oin)m(ters)0 561 y FG(So)30 b(far,)f(w)m(e)i(ha)
-m(v)m(e)f(lo)s(ok)m(ed)h(at)g(creating)g(Ob)5 b(jects)29
-b(and)g(using)h(them)f(in)h(v)-5 b(arious)29 b(simple)h(w)m(a)m(ys)g
-(but)f(ha)m(v)m(e)i(not)0 674 y(y)m(et)h(considered)e(ho)m(w)g(to)h
-(get)h(rid)d(of)i(them)f(again.)0 824 y(Ev)m(ery)22 b(Ob)5
-b(ject)22 b(consumes)g(v)-5 b(arious)21 b(computer)h(resources)g
-(\(principally)g(memory\))g(and)g(should)e(b)s(e)i(disp)s(osed)0
-937 y(of)35 b(when)g(it)h(is)f(no)g(longer)h(required,)g(so)g(as)f(to)h
-(free)g(up)e(these)i(resources.)56 b(One)34 b(w)m(a)m(y)j(of)e(doing)h
-(this)f(\(not)0 1050 y(necessarily)26 b(the)f(b)s(est|)p
-Fu(x)p FG(4.10\))i(is)e(to)h Fx(annul)g FG(eac)m(h)g(Ob)5
-b(ject)25 b(p)s(oin)m(ter)g(once)h(y)m(ou)f(ha)m(v)m(e)i(\014nished)c
-(with)i(it,)i(using)0 1163 y(AST)p Fy(_)p FG(ANNUL.)j(F)-8
-b(or)31 b(example:)262 1364 y Ft(CALL)41 b(AST_ANNUL\()f(ZOOMMAP,)g
-(STATUS)h(\))0 1579 y FG(This)26 b(indicates)i(that)g(y)m(ou)f(ha)m(v)m
-(e)h(\014nished)e(with)h(the)g(p)s(oin)m(ter)g(and)f(sets)i(it)f(to)h
-(the)f(n)m(ull)g(v)-5 b(alue)28 b(AST)p Fy(__)p FG(NULL)0
-1692 y(\(as)k(de\014ned)f(in)g(the)h(AST)p Fy(_)p FG(P)-8
-b(AR)31 b(include)h(\014le\),)g(so)g(that)h(an)m(y)f(attempt)g(to)h
-(use)e(it)i(again)f(will)g(generate)i(an)0 1805 y(error)c(message.)0
-1956 y(In)36 b(general,)41 b(this)c(pro)s(cess)g(ma)m(y)g(not)h(delete)
-g(the)g(Ob)5 b(ject,)39 b(b)s(ecause)e(there)h(ma)m(y)f(still)i(b)s(e)d
-(other)i(p)s(oin)m(ters)0 2069 y(asso)s(ciated)26 b(with)f(it.)39
-b(Ho)m(w)m(ev)m(er,)28 b(eac)m(h)e(Ob)5 b(ject)25 b(main)m(tains)h(a)f
-(coun)m(t)h(of)f(the)g(n)m(um)m(b)s(er)e(of)i(p)s(oin)m(ters)g(asso)s
-(ciated)0 2182 y(with)30 b(it)h(and)f(will)g(b)s(e)g(deleted)h(if)f(y)m
-(ou)h(ann)m(ul)f(the)g(\014nal)g(p)s(oin)m(ter.)41 b(Using)30
-b(AST)p Fy(_)p FG(ANNUL)g(consisten)m(tly)i(will)0 2294
-y(therefore)k(ensure)e(that)i(all)g(Ob)5 b(jects)35 b(are)g(disp)s
-(osed)f(of)i(at)g(the)f(correct)h(time.)56 b(Y)-8 b(ou)36
-b(can)f(determine)g(ho)m(w)0 2407 y(man)m(y)30 b(p)s(oin)m(ters)h(are)f
-(asso)s(ciated)i(with)e(an)h(Ob)5 b(ject)30 b(b)m(y)g(examining)h(its)g
-(\(read-only\))h(RefCoun)m(t)e(attribute.)0 2683 y Fw(4.10)112
-b(AST)38 b(P)m(oin)m(ter)e(Con)m(texts|Begin)i(and)g(End)0
-2893 y FG(The)30 b(use)g(of)g(AST)p Fy(_)p FG(ANNUL)g(\()p
-Fu(x)p FG(4.9\))j(is)d(not)h(completely)h(fo)s(olpro)s(of,)e(ho)m(w)m
-(ev)m(er.)43 b(Consider)29 b(the)i(follo)m(wing:)262
-3094 y Ft(CALL)41 b(AST_SHOW\()f(AST_ZOOMMAP\()f(2,)k(5.ODO,)e(')i(',)g
-(STATUS)e(\),)i(STATUS)e(\))0 3308 y FG(This)29 b(creates)i(a)f(Zo)s
-(omMap)g(and)f(displa)m(ys)h(it)g(on)g(standard)f(output)g(\()p
-Fu(x)p FG(4.4\).)43 b(Using)30 b(function)g(in)m(v)m(o)s(cations)0
-3421 y(as)39 b(argumen)m(ts)h(to)f(other)h(routines)f(in)f(this)h(w)m
-(a)m(y)h(is)f(v)m(ery)h(con)m(v)m(enien)m(t)h(b)s(ecause)e(it)g(a)m(v)m
-(oids)i(the)e(need)g(for)0 3534 y(in)m(termediate)k(p)s(oin)m(ter)d(v)
--5 b(ariables.)73 b(Ho)m(w)m(ev)m(er,)46 b(the)41 b(p)s(oin)m(ter)g
-(generated)h(b)m(y)f(AST)p Fy(_)p FG(ZOOMMAP)f(is)h(still)0
-3647 y(activ)m(e,)f(and)35 b(since)h(w)m(e)h(ha)m(v)m(e)g(not)f(stored)
-g(its)g(v)-5 b(alue,)38 b(w)m(e)f(cannot)f(use)g(AST)p
-Fy(_)p FG(ANNUL)f(to)i(ann)m(ul)e(it.)58 b(The)0 3760
-y(Zo)s(omMap)30 b(will)h(therefore)g(sta)m(y)g(around)f(un)m(til)g(the)
-h(end)f(of)g(the)h(program.)0 3911 y(A)44 b(simple)g(w)m(a)m(y)i(to)f
-(a)m(v)m(oid)g(this)f(problem)g(is)g(to)h(enclose)h(all)f(use)f(of)g
-(AST)f(routines)i(b)s(et)m(w)m(een)f(calls)i(to)0 4024
-y(AST)p Fy(_)p FG(BEGIN)30 b(and)g(AST)p Fy(_)p FG(END,)g(for)g
-(example:)262 4225 y Ft(CALL)41 b(AST_BEGIN\()f(STATUS)h(\))262
-4325 y(CALL)g(AST_SHOW\()f(AST_ZOOMMAP\()f(2,)k(5.ODO,)e(')i(',)g
-(STATUS)e(\),)i(STATUS)e(\))262 4424 y(CALL)g(AST_END\()g(STATUS)g(\))0
-4639 y FG(When)22 b(the)f(AST)p Fy(_)p FG(END)h(call)h(executes,)i(ev)m
-(ery)d(Ob)5 b(ject)22 b(p)s(oin)m(ter)g(created)h(since)f(the)g
-(previous)f(AST)p Fy(_)p FG(BEGIN)0 4752 y(call)33 b(is)e
-(automatically)j(ann)m(ulled)d(and)g(an)m(y)g(Ob)5 b(jects)32
-b(left)g(without)f(p)s(oin)m(ters)g(are)h(deleted.)44
-b(This)30 b(pro)m(vides)0 4865 y(a)d(simple)f(solution)h(to)h(managing)
-f(Ob)5 b(jects)26 b(and)g(their)h(p)s(oin)m(ters,)g(and)f(allo)m(ws)i
-(y)m(ou)e(to)i(create)g(Ob)5 b(jects)26 b(v)m(ery)0 4978
-y(freely)39 b(without)g(needing)g(to)h(k)m(eep)g(detailed)g(trac)m(k)g
-(of)f(eac)m(h)i(one.)67 b(Because)40 b(this)f(is)g(so)g(con)m(v)m
-(enien)m(t,)44 b(w)m(e)0 5091 y(implicitly)32 b(assume)f(that)h(AST)p
-Fy(_)p FG(BEGIN)e(and)h(AST)p Fy(_)p FG(END)f(are)i(used)e(in)g(most)i
-(of)f(the)g(examples)h(giv)m(en)g(in)0 5203 y(this)j(do)s(cumen)m(t.)56
-b(P)m(oin)m(ter)37 b(managemen)m(t)g(is)f(not)g(generally)g(sho)m(wn)f
-(explicitly)i(unless)e(it)h(is)g(particularly)0 5316
-y(relev)-5 b(an)m(t)32 b(to)f(the)f(p)s(oin)m(t)h(b)s(eing)f
-(illustrated.)0 5467 y(If)35 b(necessary)-8 b(,)38 b(calls)f(to)g(AST)p
-Fy(_)p FG(BEGIN)e(and)g(AST)p Fy(_)p FG(END)g(ma)m(y)i(b)s(e)e(nested,)
-i(lik)m(e)g(IF.)16 b(.)f(.)g(ENDIF)37 b(blo)s(c)m(ks)f(in)0
-5580 y(F)-8 b(ortran,)28 b(to)f(de\014ne)f(a)h(series)g(of)g(AST)e(p)s
-(oin)m(ter)i(con)m(texts.)41 b(Eac)m(h)27 b(call)h(to)f(AST)p
-Fy(_)p FG(END)f(will)h(then)f(ann)m(ul)g(only)0 5693
-y(those)31 b(Ob)5 b(ject)30 b(p)s(oin)m(ters)h(created)g(since)g(the)f
-(matc)m(hing)i(call)f(to)h(AST)p Fy(_)p FG(BEGIN.)p eop
-end
-%%Page: 41 51
-TeXDict begin 41 50 bop 0 52 a Fz(4.11)93 b(Exp)s(orting,)30
-b(Imp)s(orting)f(and)h(Exempting)g(AST)g(P)m(oin)m(ters)1372
-b FG(41)0 351 y Fw(4.11)112 b(Exp)s(orting,)38 b(Imp)s(orting)f(and)i
-(Exempting)f(AST)f(P)m(oin)m(ters)0 570 y FG(The)k(AST)p
-Fy(_)p FG(EXPOR)-8 b(T)39 b(routine)j(allo)m(ws)g(y)m(ou)g(to)g(exp)s
-(ort)e(particular)i(p)s(oin)m(ters)f(from)g(one)g(AST)g(con)m(text)0
-682 y(\()p Fu(x)p FG(4.10\))33 b(to)e(the)g(next)f(outer)h(one,)g(as)f
-(follo)m(ws:)262 919 y Ft(CALL)41 b(AST_EXPORT\()e(ZOOMMAP,)i(STATUS)g
-(\))0 1169 y FG(This)c(w)m(ould)h(iden)m(tify)h(the)f(p)s(oin)m(ter)g
-(stored)h(in)e(ZOOMMAP)h(as)g(b)s(eing)g(required)g(after)g(the)g(end)g
-(of)g(the)0 1282 y(curren)m(t)33 b(AST)f(con)m(text.)50
-b(It)32 b(causes)i(an)m(y)f(p)s(oin)m(ters)f(nominated)h(in)g(this)g(w)
-m(a)m(y)g(to)h(surviv)m(e)f(the)g(next)g(call)h(to)0
-1394 y(AST)p Fy(_)p FG(END)28 b(\(but)g(only)h(one)g(suc)m(h)f(call\))j
-(unscathed,)d(so)h(that)g(they)g(are)g(a)m(v)-5 b(ailable)31
-b(to)e(the)g(next)g(outer)g(con-)0 1507 y(text.)38 b(This)20
-b(facilit)m(y)i(is)f(not)f(needed)g(often,)j(but)d(is)g(in)m(v)-5
-b(aluable)21 b(when)e(the)i(purp)s(ose)d(of)j(y)m(our)f(AST)p
-Fy(_)p FG(BEGIN.)15 b(.)h(.)f(AST)p Fy(_)p FG(END)0 1620
-y(blo)s(c)m(k)33 b(is)g(basically)h(to)g(generate)g(an)f(Ob)5
-b(ject)33 b(p)s(oin)m(ter.)48 b(Without)33 b(this,)h(there)f(is)g(no)g
-(w)m(a)m(y)g(of)g(getting)i(that)0 1733 y(p)s(oin)m(ter)30
-b(out.)0 1893 y(The)24 b(AST)p Fy(_)p FG(IMPOR)-8 b(T)24
-b(routine)g(can)h(b)s(e)f(used)g(in)g(a)h(similar)g(manner)f(to)i(imp)s
-(ort)e(a)h(p)s(oin)m(ter)f(in)m(to)i(the)f(curren)m(t)0
-2006 y(con)m(text,)32 b(so)f(that)g(it)g(is)f(deleted)i(when)d(the)h
-(curren)m(t)h(con)m(text)h(is)e(closed)h(using)f(AST)p
-Fy(_)p FG(END.)0 2165 y(Sometimes,)36 b(y)m(ou)e(ma)m(y)g(also)h(w)m
-(an)m(t)f(to)h(exempt)f(a)g(p)s(oin)m(ter)g(from)f(all)i(the)f
-(e\013ects)h(of)f(AST)f(con)m(texts.)53 b(Y)-8 b(ou)0
-2278 y(should)33 b(not)h(need)g(to)g(do)g(this)g(often,)h(but)e(it)h
-(will)h(pro)m(v)m(e)f(essen)m(tial)i(if)e(y)m(ou)g(ev)m(er)g(need)g(to)
-h(write)f(a)g(library)0 2391 y(of)j(routines)g(that)g(stores)h(AST)e(p)
-s(oin)m(ters)h(as)g(part)g(of)g(its)g(o)m(wn)g(in)m(ternal)h(data.)61
-b(Without)38 b(some)f(form)f(of)0 2504 y(exemption,)28
-b(the)f(caller)h(of)f(y)m(our)g(routines)f(could)h(cause)g(the)g(p)s
-(oin)m(ters)g(y)m(ou)g(ha)m(v)m(e)g(stored)g(to)h(b)s(e)e(ann)m(ulled|)
-0 2617 y(th)m(us)31 b(corrupting)h(y)m(our)f(in)m(ternal)i(data|simply)
-f(b)m(y)f(using)h(AST)p Fy(_)p FG(END.)f(T)-8 b(o)32
-b(a)m(v)m(oid)i(this,)e(y)m(ou)g(should)f(use)0 2730
-y(AST)p Fy(_)p FG(EXEMPT)e(on)h(eac)m(h)i(p)s(oin)m(ter)e(that)h(y)m
-(ou)g(store,)g(for)f(example:)262 2966 y Ft(CALL)41 b(AST_EXEMPT\()e
-(ZOOMMAP,)i(STATUS)g(\))0 3216 y FG(This)c(will)i(prev)m(en)m(t)g(the)f
-(p)s(oin)m(ter)g(b)s(eing)g(a\013ected)i(b)m(y)e(an)m(y)h(subsequen)m
-(t)e(use)h(of)g(AST)p Fy(_)p FG(END.)g(Of)g(course,)0
-3329 y(it)f(then)f(b)s(ecomes)h(y)m(our)f(resp)s(onsibilit)m(y)h(to)g
-(ann)m(ul)f(this)g(p)s(oin)m(ter)h(\(using)f(AST)p Fy(_)p
-FG(ANNUL\))h(when)e(it)i(is)g(no)0 3442 y(longer)31 b(required.)0
-3730 y Fw(4.12)112 b(Cop)m(ying)38 b(Ob)6 b(jects)0 3949
-y FG(The)22 b(AST)g(library)g(mak)m(es)i(extensiv)m(e)g(use)f(of)f(p)s
-(oin)m(ters,)j(not)e(only)g(for)f(accessing)i(Ob)5 b(jects)23
-b(directly)-8 b(,)26 b(but)c(also)0 4061 y(as)31 b(a)g(means)g(of)g
-(storing)h(Ob)5 b(jects)30 b(inside)h(other)g(Ob)5 b(jects)31
-b(\(a)h(n)m(um)m(b)s(er)d(of)i(classes)h(of)f(Ob)5 b(ject)31
-b(are)h(designed)0 4174 y(to)j(hold)e(collections)k(of)d(other)g(Ob)5
-b(jects\).)52 b(Rather)34 b(than)g(cop)m(y)h(an)f(Ob)5
-b(ject)34 b(in)g(its)g(en)m(tiret)m(y)-8 b(,)37 b(a)e(p)s(oin)m(ter)f
-(to)0 4287 y(the)d(in)m(terior)g(Ob)5 b(ject)30 b(is)h(simply)f(stored)
-g(in)g(the)h(enclosing)g(Ob)5 b(ject.)0 4447 y(This)30
-b(means)g(that)h(Ob)5 b(jects)30 b(ma)m(y)h(frequen)m(tly)f(not)h(b)s
-(e)f(completely)i(indep)s(enden)m(t)d(of)h(eac)m(h)i(other)e(b)s
-(ecause,)0 4560 y(for)d(instance,)i(they)e(b)s(oth)g(con)m(tain)i(p)s
-(oin)m(ters)e(to)h(the)f(same)h(sub-Ob)5 b(ject.)39 b(In)27
-b(this)g(situation,)i(c)m(hanging)f(one)0 4673 y(Ob)5
-b(ject)31 b(\(sa)m(y)g(assigning)g(an)f(attribute)h(v)-5
-b(alue\))31 b(ma)m(y)g(a\013ect)h(the)f(other)f(one)h
-Fx(via)g FG(the)f(common)h(Ob)5 b(ject.)0 4832 y(It)32
-b(is)f(di\016cult)g(to)i(describ)s(e)e(all)h(cases)g(where)f(this)h(ma)
-m(y)g(happ)s(en,)e(so)i(y)m(ou)f(should)g(alw)m(a)m(ys)i(b)s(e)e(alert)
-h(to)g(the)0 4945 y(p)s(ossibilit)m(y)-8 b(.)40 b(F)-8
-b(ortunately)g(,)27 b(there)e(is)f(a)h(simple)f(solution.)39
-b(If)24 b(y)m(ou)g(require)g(t)m(w)m(o)i(Ob)5 b(jects)24
-b(to)h(b)s(e)e(indep)s(enden)m(t,)0 5058 y(then)30 b(simply)g(use)g
-(AST)p Fy(_)p FG(COPY)f(to)i(mak)m(e)g(a)g(cop)m(y)g(of)g(one,)g
-Fx(e.g:)262 5295 y Ft(INTEGER)40 b(ZOOMMAP1,)g(ZOOMMAP2)262
-5494 y(...)262 5693 y(ZOOMMAP2)g(=)j(AST_COPY\()d(ZOOMMAP1,)g(STATUS)h
-(\))p eop end
-%%Page: 42 52
-TeXDict begin 42 51 bop 0 52 a FG(42)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FG(This)g(pro)s(cess)h(will)h(create)h
-(a)f(true)f(cop)m(y)h(of)f(an)m(y)h(Ob)5 b(ject)31 b(and)g(return)f(a)i
-(p)s(oin)m(ter)f(to)h(the)g(cop)m(y)-8 b(.)44 b(This)31
-b(cop)m(y)0 464 y(will)25 b(not)g(con)m(tain)h(an)m(y)f(p)s(oin)m(ters)
-f(to)h(an)m(y)g(comp)s(onen)m(t)g(of)g(the)g(original)h(Ob)5
-b(ject)24 b(\(ev)m(erything)i(is)f(duplicated\),)0 577
-y(so)g(y)m(ou)g(can)h(then)e(mo)s(dify)g(it)i(safely)-8
-b(,)27 b(without)e(fear)g(of)g(a\013ecting)i(either)e(the)h(original)g
-(or)f(an)m(y)g(other)g(Ob)5 b(ject.)0 915 y Fw(4.13)112
-b(Error)37 b(Detection)0 1156 y FG(If)c(an)h(error)f(o)s(ccurs)h(in)f
-(an)h(AST)f(routine)g(\(for)h(example,)i(if)d(y)m(ou)h(supply)f(an)g
-(in)m(v)-5 b(alid)35 b(argumen)m(t,)g(suc)m(h)e(as)0
-1269 y(a)f(p)s(oin)m(ter)f(to)i(the)e(wrong)g(class)i(of)e(Ob)5
-b(ject\),)33 b(an)e(error)g(message)i(will)f(b)s(e)f(written)g(to)h
-(the)g(standard)f(error)0 1382 y(stream)g(and)f(the)g(function)g(will)h
-(immediately)h(return.)0 1558 y(T)-8 b(o)36 b(indicate)g(that)g(an)f
-(error)g(has)g(o)s(ccurred,)h(eac)m(h)h(AST)d(routine)i(that)g(can)f(p)
-s(oten)m(tially)i(fail)f(has)f(a)h(\014nal)0 1671 y(in)m(teger)e
-Fx(err)-5 b(or)36 b(status)d FG(argumen)m(t)g(called)h(ST)-8
-b(A)g(TUS.)32 b(This)g(is)g(b)s(oth)g(an)g(input)g(and)f(an)i(output)f
-(argumen)m(t.)0 1784 y(Normally)-8 b(,)29 b(y)m(ou)d(should)f(declare)j
-(a)e(single)h(error)f(status)g(v)-5 b(ariable)27 b(and)f(pass)g(it)g
-(as)h(the)f(ST)-8 b(A)g(TUS)26 b(argumen)m(t)0 1896 y(to)39
-b(ev)m(ery)g(AST)f(routine)g(y)m(ou)h(in)m(v)m(ok)m(e.)66
-b(This)37 b(v)-5 b(ariable)39 b(m)m(ust)g(initially)g(b)s(e)f(cleared)h
-(\()p Fx(i.e)f FG(set)h(to)g(zero)3620 1863 y Fv(9)3699
-1896 y FG(to)0 2009 y(indicate)30 b(no)e(error\).)41
-b(If)28 b(an)h(error)f(o)s(ccurs,)h(the)g(ST)-8 b(A)g(TUS)28
-b(argumen)m(t)h(is)g(returned)f(set)h(to)h(a)f(di\013eren)m(t)g
-Fx(err)-5 b(or)0 2122 y(value)p FG(,)31 b(whic)m(h)f(allo)m(ws)h(y)m
-(ou)g(to)g(detect)h(the)f(error,)f(as)g(follo)m(ws:)262
-2411 y Ft(STATUS)41 b(=)i(0)262 2610 y(...)262 2810 y(ZOOMMAP)d(=)j
-(AST_ZOOMMAP\()c(2,)k(5.0D0,)e('Title=My)f(ZoomMap',)g(STATUS)h(\))262
-2909 y(IF)h(\()h(STATUS)f(.NE.)f(0)j(\))f(THEN)392 3009
-y(<an)g(error)e(has)h(occurred>)262 3109 y(END)g(IF)0
-3411 y FG(In)33 b(this)h(example,)h(an)f(error)f(w)m(ould)g(b)s(e)g
-(detected)i(b)s(ecause)f(w)m(e)g(ha)m(v)m(e)h(attempted)g(to)f(set)h(a)
-f(v)-5 b(alue)34 b(for)f(the)0 3524 y(Title)e(attribute)g(of)g(a)g(Zo)s
-(omMap)f(and)g(a)g(Zo)s(omMap)h(do)s(es)f(not)g(ha)m(v)m(e)i(suc)m(h)e
-(an)g(attribute.)0 3700 y(A)c(consequence)i(of)e(the)h(error)e(status)i
-(v)-5 b(ariable)27 b(ST)-8 b(A)g(TUS)26 b(b)s(eing)g(set)h(to)g(an)f
-(error)g(v)-5 b(alue)27 b(is)f(that)h(almost)h(all)0
-3813 y(AST)f(routines)h(will)g(subsequen)m(tly)g(cease)h(to)g(function)
-e(and)g(will)i(instead)f(simply)f(return)g(without)h(action.)0
-3925 y(This)k(means)h(that)h(y)m(ou)f(do)g(not)g(need)g(to)h(c)m(hec)m
-(k)g(for)f(errors)g(v)m(ery)g(frequen)m(tly)-8 b(.)49
-b(Instead,)34 b(y)m(ou)f(can)h(usually)0 4038 y(simply)25
-b(in)m(v)m(ok)m(e)j(a)e(succession)g(of)g(AST)g(routines.)39
-b(If)25 b(an)h(error)f(o)s(ccurs)h(in)f(an)m(y)h(of)g(them,)h(the)f
-(follo)m(wing)h(ones)0 4151 y(will)k(do)f(nothing)g(and)g(y)m(ou)h(can)
-f(c)m(hec)m(k)i(for)f(the)f(error)g(at)h(the)g(end,)f(for)g(example:)
-262 4440 y Ft(STATUS)41 b(=)i(0)262 4639 y(...)262 4839
-y(CALL)e(AST_ROUTINEA\()e(...)j(,)h(STATUS)e(\))262 4938
-y(CALL)g(AST_ROUTINEB\()e(...)j(,)h(STATUS)e(\))262 5038
-y(CALL)g(AST_ROUTINEC\()e(...)j(,)h(STATUS)e(\))262 5138
-y(IF)h(\()h(STATUS)f(.NE.)f(0)j(\))f(THEN)392 5237 y(<an)g(error)e(has)
-h(occurred>)262 5337 y(END)g(IF)p 0 5425 1512 4 v 104
-5479 a Fs(9)138 5510 y Fr(W)-6 b(e)26 b(will)i(assume)f(throughout)f
-(that)g(the)g(\\OK")g(v)l(alue)g(is)h(zero,)h(as)f(it)f(curren)n(tly)g
-(is.)37 b(Ho)n(w)n(ev)n(er,)26 b(a)h(di\013eren)n(t)f(v)l(alue)g
-(could,)0 5602 y(in)k(principle,)i(b)r(e)f(used)f(if)h(the)f(en)n
-(vironmen)n(t)f(in)h(whic)n(h)h(AST)f(is)h(running)e(requires)i(it.)48
-b(T)-6 b(o)31 b(allo)n(w)h(for)f(this)g(p)r(ossibilit)n(y)-6
-b(,)32 b(y)n(ou)0 5693 y(migh)n(t)26 b(prefer)g(to)g(use)f(a)h
-(parameter)h(constan)n(t)e(to)h(represen)n(t)g(the)f(v)l(alue)h(zero)g
-(when)f(testing)i(for)f(errors.)p eop end
-%%Page: 43 53
-TeXDict begin 43 52 bop 0 52 a Fz(4.13)93 b(Error)29
-b(Detection)2812 b FG(43)0 351 y(There)32 b(are,)h(ho)m(w)m(ev)m(er,)h
-(a)f(few)f(routines)g(whic)m(h)g(do)g(not)g(adhere)g(to)h(this)f
-(general)h(rule)f(and)g(whic)m(h)g(will)g(at-)0 464 y(tempt)21
-b(to)g(execute)g(if)f(their)h(ST)-8 b(A)g(TUS)20 b(argumen)m(t)g(is)h
-(initially)g(set.)38 b(These)20 b(routines,)j(suc)m(h)d(as)g(AST)p
-Fy(_)p FG(ANNUL,)0 577 y(are)31 b(concerned)f(with)g(cleaning)i(up)d
-(and)h(reco)m(v)m(ering)i(resources.)41 b(F)-8 b(or)31
-b(example,)g(in)g(the)f(follo)m(wing:)262 826 y Ft(STATUS)41
-b(=)i(0)262 1025 y(...)262 1225 y(ZOOMMAP)d(=)j(AST_ZOOMMAP\()c(2,)k
-(5.0D0,)e(')i(',)g(STATUS)e(\))262 1424 y(CALL)g(AST_ROUTINEX\()e(...)j
-(,)h(STATUS)e(\))262 1524 y(CALL)g(AST_ROUTINEY\()e(...)j(,)h(STATUS)e
-(\))262 1623 y(CALL)g(AST_ROUTINEZ\()e(...)j(,)h(STATUS)e(\))262
-1822 y(CALL)g(AST_ANNUL\()f(ZOOMMAP,)g(STATUS)h(\))262
-1922 y(IF)h(\()h(STATUS)f(.NE.)f(0)j(\))f(THEN)392 2022
-y(<an)g(error)e(has)h(occurred>)262 2121 y(END)g(IF)0
-2384 y FG(AST)p Fy(_)p FG(ANNUL)49 b(will)h(execute)h(normally)e(in)h
-(order)f(to)h(reco)m(v)m(er)h(the)f(resources)f(asso)s(ciated)i(with)e
-(the)0 2497 y(Zo)s(omMap)36 b(that)h(w)m(as)f(created)i(earlier,)g
-(regardless)f(of)f(whether)g(an)g(error)f(has)h(o)s(ccurred)g(in)f(an)m
-(y)i(of)f(the)0 2609 y(in)m(termediate)30 b(routines.)40
-b(Routines)28 b(whic)m(h)g(b)s(eha)m(v)m(e)h(in)f(this)g(w)m(a)m(y)i
-(are)e(noted)h(in)f(the)g(relev)-5 b(an)m(t)30 b(descriptions)0
-2722 y(in)g(App)s(endix)f(B.)0 2885 y(If)d(a)h(serious)f(error)g(o)s
-(ccurs,)h(y)m(ou)g(will)g(probably)f(w)m(an)m(t)h(to)g(ab)s(ort)f(y)m
-(our)h(program,)g(but)f(sometimes)h(y)m(ou)g(ma)m(y)0
-2998 y(w)m(an)m(t)39 b(to)f(reco)m(v)m(er)i(and)d(carry)g(on.)63
-b(This)37 b(is)h(simply)f(done)h(b)m(y)f(resetting)i(y)m(our)f(error)f
-(status)h(v)-5 b(ariable)39 b(to)0 3111 y(zero,)31 b(whereup)s(on)e
-(the)h(AST)g(routines)g(y)m(ou)h(pass)f(it)h(to)g(will)g(execute)g
-(normally)g(again.)p eop end
-%%Page: 44 54
-TeXDict begin 44 53 bop 0 52 a FG(44)2393 b Fz(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)p eop end
-%%Page: 45 55
-TeXDict begin 45 54 bop 3689 52 a FG(45)0 351 y FA(5)135
-b(In)l(ter-Relating)47 b(Co)t(ordinate)f(Systems)g(\(Mappings\))0
-615 y FG(In)37 b Fu(x)p FG(4)i(w)m(e)g(used)e(the)h(Zo)s(omMap)g(as)h
-(an)e(example)i(of)f(a)h(Mapping.)64 b(W)-8 b(e)39 b(sa)m(w)f(ho)m(w)g
-(it)h(could)f(b)s(e)f(used)h(to)0 728 y(transform)32
-b(co)s(ordinates)h(from)f(its)g(input)g(to)h(its)f(output)g(and)g(bac)m
-(k)h(again)g(\()p Fu(x)p FG(4.8\).)49 b(W)-8 b(e)34 b(also)f(sa)m(w)g
-(ho)m(w)f(its)0 841 y(b)s(eha)m(viour)37 b(could)g(b)s(e)f(con)m
-(trolled)j(b)m(y)e(setting)h(v)-5 b(arious)38 b(attributes,)h(suc)m(h)e
-(as)g(the)h(Zo)s(om)f(factor)h(and)e(the)0 954 y(Rep)s(ort)30
-b(attribute)h(that)g(made)g(it)f(displa)m(y)h(co)s(ordinate)g(v)-5
-b(alues)31 b(as)g(it)g(transformed)e(them.)0 1125 y(In)c(this)g
-(section,)j(w)m(e)e(will)f(lo)s(ok)h(at)g(Mappings)f(a)h(bit)g(more)f
-(thoroughly)h(and)e(explore)i(the)g(b)s(eha)m(viour)f(whic)m(h)0
-1238 y(is)37 b(common)h(to)g(all)g(the)f(Mappings)g(pro)m(vided)g(b)m
-(y)g(AST.)g(This)f(is)h(go)s(o)s(d)g(bac)m(kground)g(for)g(what)g
-(follo)m(ws,)0 1350 y(b)s(ecause)42 b(man)m(y)h(of)f(the)h(Ob)5
-b(jects)42 b(w)m(e)h(discuss)e(later)j(will)e(also)i(turn)d(out)i(to)g
-(b)s(e)e(Mappings)h(in)g(v)-5 b(arious)0 1463 y(disguises.)0
-1783 y Fw(5.1)112 b(The)38 b(Mapping)h(Class)0 2016 y
-FG(Before)28 b(w)m(e)g(start,)h(it)f(is)f(w)m(orth)h(taking)g(a)g(quic)
-m(k)g(lo)s(ok)g(at)g(the)g(Mapping)f(class)h(as)g(a)f(whole)h(and)f
-(some)h(of)f(the)0 2128 y(sub-classes)k(it)f(con)m(tains:)370
-2414 y Fy(Mapping)514 2527 y(CmpMap)514 2640 y(DssMap)514
-2753 y(GrismMap)514 2866 y(IntraMap)514 2979 y(LutMap)514
-3092 y(MathMap)514 3204 y(MatrixMap)514 3317 y(PermMap)514
-3430 y(PolyMap)514 3543 y(SlaMap)514 3656 y(SpecMap)514
-3769 y(TimeMap)514 3882 y(UnitMap)514 3995 y(WcsMap)514
-4108 y(ZoomMap)514 4334 y(Frame)657 4447 y(<various)45
-b(types)i(of)g(Frame>)0 4732 y FG(The)29 b(F)-8 b(rame)30
-b(sub-class)f(has)g(b)s(een)g(separated)h(out)f(here)g(b)s(ecause)h(it)
-g(is)f(co)m(v)m(ered)i(in)e(detail)h(in)f Fu(x)p FG(7.)41
-b(W)-8 b(e)31 b(start)0 4845 y(b)m(y)f(lo)s(oking)h(at)h(the)e(paren)m
-(t)h(class,)g(Mapping.)0 5016 y(AST)20 b(do)s(es)h(not)h(pro)m(vide)f
-(a)g(function)g(to)h(create)h(a)e(basic)h(Mapping)f(\()p
-Fx(i.e.)g FG(the)g(AST)p Fy(_)p FG(MAPPING)g(constructor)0
-5128 y(do)s(es)36 b(not)g(exist\).)60 b(This)35 b(is)h(b)s(ecause)h
-(the)f(Mapping)g(class)h(itself)g(is)f(\\virtual")i(and)d(basic)i
-(Mappings)f(are)0 5241 y(of)j(no)h(use)f(in)f(themselv)m(es.)69
-b(The)39 b(Mapping)g(class)h(serv)m(es)g(simply)f(to)h(con)m(tain)g
-(the)g(v)-5 b(arious)39 b(sp)s(ecialised)0 5354 y(Mappings)23
-b(that)i(exist.)39 b(Ho)m(w)m(ev)m(er,)27 b(it)e(pro)m(vides)e(more)h
-(than)g(just)f(a)h(con)m(v)m(enien)m(t)i(heading)d(for)h(them)f(b)s
-(ecause)0 5467 y(it)34 b(b)s(esto)m(ws)f(all)h(classes)h(of)e(Mapping)g
-(with)g(common)h(prop)s(erties)e(\()p Fx(e.g.)h FG(attributes\))h(and)f
-(b)s(eha)m(viour.)49 b(By)0 5580 y(examining)37 b(the)g(Mapping)g
-(class,)i(w)m(e)e(are)h(therefore)f(examining)g(the)g(things)g(that)g
-(all)h(other)f(Mappings)0 5693 y(ha)m(v)m(e)32 b(in)e(common.)p
-eop end
-%%Page: 46 56
-TeXDict begin 46 55 bop 0 52 a FG(46)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.2)112 b(The)38 b(Mapping)h(Mo)s(del)0 571
-y FG(The)32 b(concept)i(of)f(a)g(Mapping)g(w)m(as)g(illustrated)h(in)e
-(Figure)h(1.)49 b(It)33 b(is)g(a)g(blac)m(k)h(b)s(o)m(x)e(whic)m(h)h(y)
-m(ou)g(can)g(supply)0 684 y(with)d(a)h(set)g(of)g(co)s(ordinate)g(v)-5
-b(alues)31 b(in)g(return)e(for)h(a)h(set)h(of)e(transformed)g(co)s
-(ordinates.)42 b(The)30 b(t)m(w)m(o)i(sets)f(are)0 797
-y(termed)c Fx(input)g FG(and)f Fx(output)i FG(co)s(ordinates.)40
-b(Y)-8 b(ou)28 b(can)f(also)h(go)g(bac)m(k)f(the)g(other)g(w)m(a)m(y)h
-(and)f(transform)f(output)0 910 y(co)s(ordinates)31 b(bac)m(k)g(in)m
-(to)h(input)d(co)s(ordinates,)i(as)g(w)m(e)g(sa)m(w)g(in)f
-Fu(x)p FG(4.8.)0 1201 y Fw(5.3)112 b(Input)38 b(and)g(Output)g(Co)s
-(ordinate)g(Num)m(b)s(ers)0 1421 y FG(In)30 b(general,)h(the)g(n)m(um)m
-(b)s(er)e(of)h(co)s(ordinates)h(y)m(ou)g(feed)f(in)m(to)h(a)g(Mapping)f
-(to)h(represen)m(t)g(a)f(single)h(p)s(oin)m(t)g(need)0
-1534 y(not)38 b(b)s(e)f(the)h(same)g(as)g(the)g(n)m(um)m(b)s(er)f(that)
-h(comes)h(out.)63 b(Often)37 b(these)h(n)m(um)m(b)s(ers)f(will)h(b)s(e)
-f(the)h(same,)i(and)0 1647 y(often)32 b(they)h(will)f(b)s(oth)f(equal)i
-(2)f(\(b)s(ecause)g(2-dimensional)h(co)s(ordinate)g(systems)f(are)g
-(common\),)h(but)f(this)0 1760 y(needn't)e(necessarily)i(b)s(e)d(the)i
-(case.)0 1921 y(The)42 b(n)m(um)m(b)s(er)g(of)g(co)s(ordinates)i
-(required)e(to)h(sp)s(ecify)f(an)h(input)f(p)s(oin)m(t)g(is)h(represen)
-m(ted)g(b)m(y)f(the)h(in)m(teger)0 2034 y(attribute)26
-b(Nin)f(and)g(the)g(n)m(um)m(b)s(er)f(required)h(to)h(sp)s(ecify)f(an)g
-(output)g(p)s(oin)m(t)g(is)h(represen)m(ted)f(b)m(y)g(Nout.)40
-b(These)0 2147 y(are)j(read-only)f(attributes)h(common)f(to)h(all)g
-(Mappings.)76 b(Generally)-8 b(,)47 b(their)42 b(v)-5
-b(alues)43 b(are)f(\014xed)g(when)f(a)0 2260 y(Mapping)30
-b(is)h(created.)0 2421 y(In)20 b Fu(x)p FG(4.2,)25 b(w)m(e)d(sa)m(w)f
-(ho)m(w)g(the)g(Nin)g(attribute)h(for)f(a)g(Zo)s(omMap)h(w)m(as)f
-(initialised)h(b)m(y)f(the)h(call)g(to)g(the)f(constructor)0
-2534 y(function)35 b(AST)p Fy(_)p FG(ZOOMMAP)f(whic)m(h)h(created)h
-(it.)56 b(In)35 b(this)g(case,)j(the)d(Nout)h(attribute)g(w)m(as)f(not)
-h(needed)0 2647 y(and)31 b(it)h(implicitly)h(to)s(ok)f(the)g(same)g(v)
--5 b(alue)32 b(as)f(Nout,)i(but)e(w)m(e)h(could)f(ha)m(v)m(e)i
-(enquired)e(ab)s(out)g(its)h(v)-5 b(alue)32 b(had)0 2760
-y(w)m(e)f(w)m(an)m(ted,)g(as)g(follo)m(ws:)262 3004 y
-Ft(INCLUDE)40 b('AST_PAR')262 3103 y(INTEGER)g(NOUT,)i(STATUS,)e
-(ZOOMMAP)262 3303 y(STATUS)h(=)i(0)262 3502 y(...)262
-3701 y(NOUT)e(=)j(AST_GETI\()39 b(ZOOMMAP,)i('Nout',)f(STATUS)i(\))0
-3992 y Fw(5.4)112 b(F)-9 b(orw)m(ard)38 b(and)g(In)m(v)m(erse)g(T)-9
-b(ransformations)0 4212 y FG(W)h(e)37 b(stated)g(earlier)f(that)h(a)f
-(Mapping)g(ma)m(y)g(b)s(e)f(used)g(to)i(transform)e(co)s(ordinates)h
-(either)h(from)e(input)g(to)0 4325 y(output,)30 b(or)h
-Fx(vic)-5 b(e)32 b(versa.)41 b FG(These)30 b(are)h(termed)f(its)h
-Fx(forwar)-5 b(d)33 b FG(and)c Fx(inverse)i FG(transformations.)0
-4487 y(This)f(statemen)m(t)i(w)m(as)f(not)g(quite)f(accurate,)j(ho)m(w)
-m(ev)m(er,)f(b)s(ecause)e(in)h(general)g(Mappings)f(are)h(only)g
-FE(p)s(oten-)0 4600 y(tially)j FG(capable)h(of)f(w)m(orking)h(in)e(b)s
-(oth)h(directions.)52 b(In)34 b(practice,)i(co)s(ordinate)f
-(transformation)g(ma)m(y)f(only)0 4713 y(b)s(e)i(feasible)i(in)e(one)h
-(direction)h(or)f(the)g(other)g(b)s(ecause)g(some)g(functions)f(are)h
-(not)g(easily)h(in)m(v)m(erted)g(\(they)0 4825 y(ma)m(y)29
-b(b)s(e)g(m)m(ulti-v)-5 b(alued,)30 b(for)e(instance\).)42
-b(Allo)m(w)m(ance)31 b(m)m(ust)e(b)s(e)f(made)h(for)f(this,)i(so)f(eac)
-m(h)h(Mapping)f(has)f(t)m(w)m(o)0 4938 y(read-only)36
-b(b)s(o)s(olean)g(\(in)m(teger\))i(attributes,)g(T)-8
-b(ranF)g(orw)m(ard)36 b(and)g(T)-8 b(ranIn)m(v)m(erse,)37
-b(whic)m(h)f(indicate)h(whether)0 5051 y(eac)m(h)32 b(transformation)e
-(is)h(a)m(v)-5 b(ailable.)0 5213 y(A)29 b(transformation)h(is)f(a)m(v)
--5 b(ailable)31 b(if)e(the)g(corresp)s(onding)f(attribute)i(is)f
-(non-zero,)h(otherwise)g(it)g(is)f(not.)3604 5180 y Fv(10)3719
-5213 y FG(If)0 5326 y(y)m(ou)f(enquire)f(ab)s(out)h(the)f(v)-5
-b(alue)28 b(of)g(these)g(attributes,)h(a)f(v)-5 b(alue)28
-b(of)g(0)g(or)g(1)g(is)g(returned.)38 b(A)m(ttempting)29
-b(to)g(use)0 5438 y(a)i(Mapping)f(to)h(apply)f(a)h(transformation)g
-(whic)m(h)f(is)g(not)h(a)m(v)-5 b(ailable)33 b(will)d(result)h(in)f(an)
-g(error.)p 0 5516 1512 4 v 73 5570 a Fs(10)138 5602 y
-Fr(Most)23 b(of)g(the)e(Mappings)i(pro)n(vided)e(b)n(y)g(the)g(AST)h
-(library)g(w)n(ork)g(in)g(b)r(oth)g(directions,)i(although)e(the)f
-(LutMap)h(can)g(b)r(eha)n(v)n(e)0 5693 y(otherwise.)p
-eop end
-%%Page: 47 57
-TeXDict begin 47 56 bop 0 52 a Fz(5.5)92 b(In)m(v)m(erting)31
-b(Mappings)2706 b FG(47)0 351 y Fw(5.5)112 b(In)m(v)m(erting)38
-b(Mappings)0 580 y FG(An)28 b(imp)s(ortan)m(t)g(attribute,)i(common)f
-(to)g(all)g(Mappings,)g(is)f(the)g(In)m(v)m(ert)h(\015ag.)41
-b(This)27 b(is)h(a)h(b)s(o)s(olean)f(\(in)m(teger\))0
-693 y(attribute)37 b(that)h(can)f(b)s(e)f(assigned)h(a)g(new)f(v)-5
-b(alue)38 b(at)f(an)m(y)g(time.)61 b(If)36 b(it)h(is)g(non-zero,)i(it)f
-(has)e(the)h(e\013ect)h(of)0 806 y(in)m(terc)m(hanging)33
-b(the)e(Mapping's)g(input)f(and)g(output)h(co)s(ordinates)h(and)e(the)h
-(Mapping)g(is)h(then)e(said)h(to)h(b)s(e)0 918 y Fx(inverte)-5
-b(d.)41 b FG(By)31 b(default,)g(the)f(In)m(v)m(ert)h(attribute)g(is)g
-(zero.)0 1086 y(There)41 b(is)g(no)g(magic)h(in)f(this.)72
-b(There)41 b(is)g(no)g(fancy)g(arithmetic)h(in)m(v)m(olv)m(ed)h(in)e
-(in)m(v)m(erting)h(mathematical)0 1199 y(functions,)32
-b(for)f(instance.)45 b(The)31 b(In)m(v)m(ert)i(\015ag)e(is)h(simply)f
-(a)h(switc)m(h)g(that)h(in)m(terc)m(hanges)g(a)f(Mapping's)f(input)0
-1312 y(and)37 b(output)g(p)s(orts.)61 b(If)37 b(it)h(is)g(non-zero,)i
-(the)d(Mapping's)h(Nin)f(and)g(Nout)h(attributes)g(are)g(sw)m(app)s
-(ed,)g(its)0 1425 y(T)-8 b(ranF)g(orw)m(ard)28 b(and)g(T)-8
-b(ranIn)m(v)m(erse)28 b(attributes)h(are)g(sw)m(app)s(ed,)f(and)f(when)
-g(y)m(ou)i(ask)g(for)f(what)g(w)m(as)g(once)h(the)0 1538
-y(forw)m(ard)h(transformation)h(y)m(ou)g(get)h(the)f(in)m(v)m(erse)h
-(transformation)f(instead)g(\(and)f Fx(vic)-5 b(e)33
-b(versa)p FG(\).)43 b(When)30 b(y)m(ou)0 1650 y(return)f(the)i(In)m(v)m
-(ert)g(attribute)g(to)g(zero,)g(or)g(clear)g(it,)g(the)g(Mapping)f
-(returns)f(to)i(its)g(original)h(b)s(eha)m(viour.)0 1818
-y(Often,)e(the)f(actual)i(v)-5 b(alue)30 b(of)g(the)f(In)m(v)m(ert)h
-(attribute)h(is)e(unimp)s(ortan)m(t)g(and)g(y)m(ou)h(simply)f(wish)f
-(to)j(in)m(v)m(ert)f(its)0 1931 y(b)s(o)s(olean)i(sense,)i(so)e(that)h
-(what)g(w)m(as)f(the)h(Mapping's)f(input)g(b)s(ecomes)h(its)f(output)g
-(and)g Fx(vic)-5 b(e)34 b(versa.)47 b FG(This)0 2044
-y(is)30 b(most)h(easily)h(accomplished)f(using)f(AST)p
-Fy(_)p FG(INVER)-8 b(T,)29 b(as)i(follo)m(ws:)262 2307
-y Ft(INTEGER)40 b(MAPPING)262 2506 y(...)262 2706 y(CALL)h
-(AST_INVERT\()e(MAPPING,)i(STATUS)g(\))0 2982 y FG(If)36
-b(the)g(Mapping)g(y)m(ou)h(ha)m(v)m(e)g(happ)s(ens)e(to)i(b)s(e)e(the)i
-(wrong)e(w)m(a)m(y)j(around,)e(AST)p Fy(_)p FG(INVER)-8
-b(T)36 b(allo)m(ws)h(y)m(ou)g(to)0 3095 y(correct)32
-b(the)e(problem.)0 3404 y Fw(5.6)112 b(Finding)39 b(the)f(Rate)f(of)g
-(Change)i(of)f(a)f(Mapping)i(Output)0 3633 y FG(The)33
-b(AST)p Fy(_)p FG(RA)-8 b(TE)32 b(function)i(can)f(b)s(e)g(used)g(to)h
-(\014nd)e(the)i(rate)g(of)f(c)m(hange)i(of)f(an)m(y)f(Mapping)h(output)
-f(with)0 3746 y(resp)s(ect)27 b(to)h(an)m(y)f(Mapping)g(input,)g(at)g
-(a)h(giv)m(en)g(input)d(p)s(osition.)40 b(The)27 b(metho)s(d)f(used)g
-(pro)s(duces)g(go)s(o)s(d)g(accu-)0 3859 y(racy)31 b(\(t)m(ypically)j
-(a)d(relativ)m(e)i(error)e(of)g(10E-10)i(or)e(less\))g(but)g(ma)m(y)g
-(require)g(the)g(Mapping)g(to)h(b)s(e)e(ev)-5 b(aluated)0
-3972 y(100)32 b(or)e(more)h(times.)41 b(An)30 b(estimate)i(of)f(the)f
-(second)h(deriv)-5 b(ativ)m(e)31 b(is)g(also)g(pro)s(duced)e(b)m(y)h
-(this)g(function.)0 4281 y Fw(5.7)112 b(Rep)s(orting)38
-b(Co)s(ordinate)g(T)-9 b(ransformations)0 4509 y FG(W)h(e)24
-b(ha)m(v)m(e)g(already)g(seen)e(\()p Fu(x)p FG(4.8\))k(ho)m(w)c(the)h
-(b)s(o)s(olean)g(\(in)m(teger\))i(Rep)s(ort)e(attribute)g(of)g(a)h
-(Mapping)e(w)m(orks.)39 b(If)22 b(it)0 4622 y(is)g(non-zero,)j(the)d
-(op)s(eration)g(of)g(transforming)g(a)g(set)h(of)f(co)s(ordinates)h
-(will)f(result)g(in)g(a)g(rep)s(ort)g(b)s(eing)f(written)0
-4735 y(to)31 b(standard)f(output.)42 b(This)29 b(will)i(displa)m(y)g
-(the)g(co)s(ordinate)h(v)-5 b(alues)31 b(b)s(efore)f(and)g(after)h
-(transformation.)42 b(It)0 4848 y(can)35 b(sa)m(v)m(e)h(considerable)f
-(time)g(during)e(program)h(dev)m(elopmen)m(t)i(b)m(y)e(eliminating)i
-(the)e(need)h(to)g(add)e(lo)s(ops)0 4961 y(and)d(output)g(statemen)m
-(ts)i(to)f(y)m(our)f(program.)0 5128 y(In)h(a)g(\014nished)f(program,)i
-(ho)m(w)m(ev)m(er,)h(y)m(ou)f(should)e(b)s(e)h(careful)g(that)h(the)g
-(Rep)s(ort)f(attribute)h(is)f(not)h(set)g(to)g(a)0 5241
-y(non-zero)g(v)-5 b(alue)31 b(unless)g(y)m(ou)g(w)m(an)m(t)i(to)e(see)h
-(the)g(output)e(\(there)i(ma)m(y)g(often)g(b)s(e)e(rather)h(a)h(lot)g
-(of)f(this!\).)44 b(T)-8 b(o)0 5354 y(help)33 b(prev)m(en)m(t)i(un)m(w)
-m(an)m(ted)f(output)g(b)s(eing)f(pro)s(duced)f(b)m(y)i(acciden)m(t,)j
-(the)d(Rep)s(ort)f(attribute)i(is)f(un)m(usual)f(in)0
-5467 y(that)d(its)f(v)-5 b(alue)30 b(is)f(not)g(preserv)m(ed)g(when)f
-(a)i(Mapping)f(is)g(copied)g(using)g(AST)p Fy(_)p FG(COPY)f(\()p
-Fu(x)p FG(4.12\).)42 b(Instead,)30 b(it)0 5580 y(rev)m(erts)h(to)g(its)
-g(default)g(of)f(zero)h(\()p Fx(i.e.)f FG(un-set\))h(in)f(the)h(cop)m
-(y)-8 b(.)42 b(It)30 b(also)i(rev)m(erts)f(to)g(zero)g(when)e(a)i
-(Mapping)f(is)0 5693 y(written)g(out,)h Fx(e.g.)f FG(to)h(a)g(\014le)f
-(using)g(a)h(Channel)f(\()p Fu(x)p FG(15\).)p eop end
-%%Page: 48 58
-TeXDict begin 48 57 bop 0 52 a FG(48)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.8)112 b(Handling)39 b(Missing)g(\(Bad\))e(Co)s(ordinate)h(V)
--9 b(alues)0 589 y FG(Ev)m(en)27 b(when)e(co)s(ordinates)i(can,)h(in)e
-(principle,)h(b)s(e)f(transformed)g(in)g(either)h(direction)g(b)m(y)f
-(a)h(Mapping,)g(there)0 701 y(ma)m(y)39 b(still)g(b)s(e)f(instances)h
-(where)f(sp)s(eci\014c)g(co)s(ordinate)i(v)-5 b(alues)39
-b(cannot)g(b)s(e)f(handled.)64 b(F)-8 b(or)39 b(example,)i(the)0
-814 y(Mapping)33 b(ma)m(y)h(b)s(e)f(mathematically)j(in)m(tractable)f
-(\()p Fx(e.g.)e FG(singular\))h(in)f(certain)h(places,)h(or)e(it)h(ma)m
-(y)g(map)f(a)0 927 y(subset)f(of)g(one)h(space)g(on)f(to)h(another,)h
-(so)f(that)g(some)f(p)s(oin)m(ts)h(in)f(one)g(space)h(are)g(not)g
-(represen)m(ted)f(in)g(the)0 1040 y(other.)43 b(Sky)31
-b(pro)5 b(jections)32 b(often)f(sho)m(w)g(this)g(b)s(eha)m(viour,)g
-(since)h(it)g(is)f(quite)g(common)h(to)g(pro)5 b(ject)31
-b(only)h(half)0 1153 y(of)38 b(the)f(celestial)j(sphere)d(on)g(to)h(t)m
-(w)m(o)h(dimensions,)f(omitting)h(p)s(oin)m(ts)e(on)g(the)h(opp)s
-(osite)g(side)f(of)g(the)h(sky)-8 b(.)0 1266 y(There)30
-b(are)h(man)m(y)f(other)h(examples.)0 1439 y(T)-8 b(o)36
-b(indicate)h(when)e(co)s(ordinates)h(cannot)h(b)s(e)e(transformed,)i
-(for)e(whatev)m(er)i(reason,)g(AST)f(substitutes)f(a)0
-1552 y(sp)s(ecial)42 b(output)f(co)s(ordinate)i(v)-5
-b(alue)42 b(giv)m(en)g(b)m(y)g(the)f(parameter)h(constan)m(t)h(AST)p
-Fy(__)p FG(BAD)e(\(as)h(de\014ned)f(in)0 1665 y(the)e(AST)p
-Fy(_)p FG(P)-8 b(AR)38 b(include)h(\014le\).)66 b(Before)40
-b(making)f(use)g(of)g(co)s(ordinates)g(generated)h(b)m(y)f(an)m(y)g(of)
-g(the)g(AST)0 1778 y(transformation)31 b(routines,)f(therefore,)h(y)m
-(ou)g(ma)m(y)g(need)f(to)h(c)m(hec)m(k)h(for)e(the)h(presence)f(of)h
-(this)f(v)-5 b(alue.)0 1952 y(Because)39 b(co)s(ordinates)f(with)f(the)
-g(v)-5 b(alue)38 b(AST)p Fy(__)p FG(BAD)f(can)h(b)s(e)f(generated)h(in)
-f(this)h(w)m(a)m(y)-8 b(,)40 b(all)f(other)e(AST)0 2065
-y(routines)f(are)h(also)g(capable)g(of)f(recognising)h(this)f(v)-5
-b(alue)37 b(and)e(handling)h(it)h(appropriately)-8 b(.)58
-b(The)36 b(co)s(ordi-)0 2178 y(nate)d(transformation)g(routines)g(do)f
-(this)h(b)m(y)g(propagating)g(an)m(y)g(missing)g(input)f(co)s(ordinate)
-h(information)0 2290 y(through)26 b(to)i(their)f(output.)40
-b(This)26 b(means)h(that)h(if)f(y)m(ou)g(supply)f(co)s(ordinates)i
-(with)f(the)g(v)-5 b(alue)27 b(AST)p Fy(__)p FG(BAD,)0
-2403 y(the)d(returned)f(co)s(ordinates)i(are)f(also)h(lik)m(ely)h(to)f
-(con)m(tain)g(this)f(v)-5 b(alue.)39 b(Here,)26 b(for)e(example,)i(is)e
-(what)g(happ)s(ens)0 2516 y(if)30 b(y)m(ou)h(use)f(a)h(Zo)s(omMap)f
-(\(with)h(Zo)s(om)f(factor)h(5\))g(to)g(transform)f(suc)m(h)g(a)h(set)g
-(of)f(co)s(ordinates:)227 2798 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))
-227 2897 y(\(<bad>,)f(2\))i(-->)f(\(<bad>,)f(10\))227
-2997 y(\(2,)i(4\))f(-->)h(\(10,)f(20\))227 3097 y(\(3,)h(6\))f(-->)h
-(\(15,)f(30\))227 3196 y(\(4,)h(<bad>\))e(-->)h(\(20,)g(<bad>\))227
-3296 y(\(5,)h(10\))f(-->)g(\(25,)g(50\))227 3395 y(\(<bad>,)f(<bad>\))g
-(-->)h(\(<bad>,)f(<bad>\))227 3495 y(\(7,)i(14\))f(-->)g(\(35,)g(70\))
-227 3595 y(\(8,)h(16\))f(-->)g(\(40,)g(80\))227 3694
-y(\(9,)h(18\))f(-->)g(\(45,)g(90\))0 3989 y FG(The)37
-b(AST)p Fy(__)p FG(BAD)h(v)-5 b(alue)39 b(is)f(represen)m(ted)g(b)m(y)g
-(the)g(string)g(\\)p Fp(<)p FG(bad)p Fp(>)p FG(".)63
-b(This)37 b(is)h(a)h(case)g(of)f(\\garbage)i(in,)0 4102
-y(garbage)32 b(out")f(but)e(at)i(least)h(it's)f(consisten)m(t)h
-(garbage)f(that)g(y)m(ou)g(can)g(recognise!)0 4275 y(Note)22
-b(ho)m(w)f(the)g(presence)f(of)h(the)g(AST)p Fy(__)p
-FG(BAD)f(v)-5 b(alue)22 b(in)e(one)h(input)f(dimension)g(do)s(es)g(not)
-h(necessarily)h(result)0 4388 y(in)32 b(the)h(loss)f(of)h(information)g
-(for)f(all)h(output)f(dimensions.)46 b(Sometimes,)34
-b(suc)m(h)e(loss)h(will)f(b)s(e)g(una)m(v)m(oidable,)0
-4501 y(but)21 b(in)h(general)g(an)g(attempt)h(is)f(made)g(to)g(preserv)
-m(e)g(information)g(as)g(far)g(as)g(p)s(ossible.)37 b(The)22
-b(exact)h(b)s(eha)m(viour)0 4614 y(will)31 b(dep)s(end)d(on)j(the)f
-(Mapping)h(in)m(v)m(olv)m(ed.)0 4944 y Fw(5.9)112 b(Example|the)39
-b(UnitMap)0 5181 y FG(The)31 b(UnitMap)i(is)f(the)g(simplest)g(of)g
-(Mappings.)45 b(It)32 b(is)g(a)g(n)m(ull)g(Mapping.)46
-b(Its)31 b(purp)s(ose)g(is)h(simply)f(to)i(cop)m(y)0
-5294 y(co)s(ordinate)e(v)-5 b(alues,)31 b(unaltered,)g(from)f(its)g
-(input)g(to)h(its)g(output)f(and)f Fx(vic)-5 b(e)33 b(versa.)0
-5467 y FG(A)j(UnitMap)g(has)g(no)f(additional)i(attributes)g(b)s(ey)m
-(ond)e(those)h(of)g(a)g(basic)g(Mapping.)57 b(Its)36
-b(Nin)g(and)f(Nout)0 5580 y(attributes)e(are)g(alw)m(a)m(ys)h(equal)g
-(and)e(are)h(sp)s(eci\014ed)f(b)m(y)g(the)h(\014rst)f(argumen)m(t)h
-(supplied)e(to)j(its)f(constructor.)0 5693 y(F)-8 b(or)31
-b(example:)p eop end
-%%Page: 49 59
-TeXDict begin 49 58 bop 0 52 a Fz(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FG(49)262 351 y Ft(INTEGER)40 b(UNITMAP)262
-551 y(...)262 750 y(UNITMAP)g(=)j(AST_UNITMAP\()c(2,)k(')g(',)g(STATUS)
-e(\))0 1006 y FG(will)28 b(create)h(a)f(UnitMap)f(that)i(copies)f
-(2-dimensional)g(co)s(ordinates.)41 b(In)m(v)m(erting)28
-b(a)g(UnitMap)f(has)h(no)f(e\013ect)0 1119 y(b)s(ey)m(ond)j(c)m
-(hanging)h(the)g(v)-5 b(alue)30 b(of)h(its)g(In)m(v)m(ert)g(attribute.)
-0 1280 y(The)i(main)g(use)g(of)h(a)f(UnitMap)h(is)g(to)g(allo)m(w)h(a)e
-(Mapping)h(to)g(b)s(e)f(supplied)f(when)g(one)i(is)f(required)g(\(as)h
-(an)0 1393 y(argumen)m(t)d(to)g(a)g(routine,)f(for)g(example\))i(but)e
-(y)m(ou)g(wish)g(it)h(to)g(lea)m(v)m(e)i(co)s(ordinate)e(v)-5
-b(alues)31 b(unc)m(hanged.)0 1684 y Fw(5.10)112 b(Example|the)39
-b(P)m(ermMap)0 1904 y FG(The)28 b(P)m(ermMap)g(is)h(a)f(rather)g(more)h
-(complicated)h(Mapping)e(than)g(w)m(e)h(ha)m(v)m(e)g(met)g(previously)
--8 b(.)40 b(Its)28 b(purp)s(ose)0 2016 y(is)34 b(to)g(c)m(hange)h(the)f
-(order,)h(or)f(n)m(um)m(b)s(er,)f(of)h(co)s(ordinates.)52
-b(It)34 b(is)g(also)h(able)f(to)h(substitute)e(\014xed)h(v)-5
-b(alues)34 b(for)0 2129 y(co)s(ordinates.)0 2291 y(T)-8
-b(o)41 b(illustrate)g(its)g(action,)j(supp)s(ose)39 b(our)g(input)h(co)
-s(ordinates)h(are)f(denoted)h(b)m(y)f(\()p Fp(x)2992
-2305 y Fv(1)3031 2291 y Fp(;)15 b(x)3123 2305 y Fv(2)3163
-2291 y Fp(;)g(x)3255 2305 y Fv(3)3295 2291 y Fp(;)g(x)3387
-2305 y Fv(4)3427 2291 y FG(\))40 b(in)g(a)h(4-)0 2403
-y(dimensional)27 b(space)h(and)e(supp)s(ose)g(our)g(output)h(co)s
-(ordinates)h(are)f(to)h(b)s(e)e(\()p Fp(x)2645 2417 y
-Fv(4)2685 2403 y Fp(;)15 b(x)2777 2417 y Fv(1)2817 2403
-y Fp(;)g(x)2909 2417 y Fv(2)2948 2403 y Fp(;)g(x)3040
-2417 y Fv(3)3080 2403 y FG(\).)40 b(Our)26 b(P)m(ermMap,)0
-2516 y(therefore,)31 b(should)e(rotate)j(the)f(co)s(ordinate)g(v)-5
-b(alues)31 b(b)m(y)f(one)h(p)s(osition.)0 2678 y(T)-8
-b(o)23 b(create)g(suc)m(h)f(a)g(P)m(ermMap,)j(w)m(e)d(\014rst)f(set)i
-(up)e(t)m(w)m(o)i(in)m(teger)h(arra)m(ys.)38 b(One)22
-b(of)g(these,)i(OUTPERM,)e(con)m(trols)0 2790 y(the)f(selection)i(of)e
-(input)f(co)s(ordinates)i(for)e(use)h(in)g(the)g(output)f(and)h(the)g
-(other,)i(INPERM,)e(con)m(trols)i(selection)0 2903 y(of)31
-b(output)f(co)s(ordinates)h(for)f(use)g(in)g(the)g(input:)262
-3146 y Ft(INTEGER)40 b(OUTPERM\()g(4)k(\),)e(INPERM\()f(4)i(\))262
-3246 y(DATA)e(OUTPERM)g(/)i(4,)g(1,)g(2,)g(3)g(/)262
-3345 y(DATA)e(INPERM)h(/)h(2,)f(3,)h(4,)g(1)g(/)0 3601
-y FG(Note)32 b(that)e(the)h(n)m(um)m(b)s(ers)d(w)m(e)j(store)g(in)f
-(these)h(arra)m(ys)f(are)h(the)f(indices)g(of)h(the)f(co)s(ordinates)h
-(that)g(w)m(e)g(w)m(an)m(t)0 3714 y(to)36 b(select.)57
-b(W)-8 b(e)36 b(ha)m(v)m(e)h(c)m(hosen)e(these)h(so)f(that)h(the)g
-(forw)m(ard)e(and)h(in)m(v)m(erse)h(transformations)f(will)h(p)s
-(erform)0 3827 y(complemen)m(tary)c(p)s(erm)m(utations)e(on)g(the)h(co)
-s(ordinates.)0 3988 y(The)f(P)m(ermMap)h(is)f(then)g(created)h(b)m(y)g
-(passing)f(these)h(arra)m(ys)g(to)g(its)f(constructor,)h(as)g(follo)m
-(ws:)262 4231 y Ft(INTEGER)40 b(PERMMAP)262 4331 y(DOUBLE)h(PRECISION)e
-(DUMMY\()j(1)h(\))262 4530 y(...)262 4729 y(PERMMAP)d(=)j
-(AST_PERMMAP\()c(4,)k(INPERM,)d(4,)j(OUTPERM,)d(DUMMY,)i(')h(',)g
-(STATUS)e(\))0 4985 y FG(\(the)23 b(\014fth)f(argumen)m(t)h(is)f(not)h
-(b)s(eing)f(used,)i(so)f(a)g(dumm)m(y)e(arra)m(y)i(has)g(b)s(een)f
-(supplied\).)37 b(Note)24 b(that)f(w)m(e)g(sp)s(ecify)0
-5098 y(the)30 b(n)m(um)m(b)s(er)f(of)h(input)g(and)f(output)h(co)s
-(ordinates)h(separately)-8 b(,)32 b(but)d(set)i(b)s(oth)e(to)i(4)g(in)f
-(this)g(example.)41 b(The)0 5211 y(resulting)30 b(P)m(ermMap)h(w)m
-(ould)f(ha)m(v)m(e)i(the)f(follo)m(wing)g(e\013ect)h(when)e(used)f(to)i
-(transform)f(co)s(ordinates:)227 5467 y Fy(Forward:)370
-5580 y(\(1,)47 b(2,)h(3,)f(4\))g(-->)g(\(4,)g(1,)g(2,)g(3\))370
-5693 y(\(2,)g(4,)h(6,)f(8\))g(-->)g(\(8,)g(2,)g(4,)g(6\))p
-eop end
-%%Page: 50 60
-TeXDict begin 50 59 bop 0 52 a FG(50)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))370
-351 y Fy(\(3,)47 b(6,)h(9,)f(12\))g(-->)g(\(12,)f(3,)h(6,)h(9\))370
-464 y(\(4,)f(8,)h(12,)e(16\))h(-->)g(\(16,)g(4,)g(8,)g(12\))370
-577 y(\(5,)g(10,)g(15,)g(20\))g(-->)g(\(20,)g(5,)g(10,)g(15\))227
-803 y(Inverse:)370 916 y(\(4,)g(1,)h(2,)f(3\))g(-->)g(\(1,)g(2,)g(3,)g
-(4\))370 1029 y(\(8,)g(2,)h(4,)f(6\))g(-->)g(\(2,)g(4,)g(6,)g(8\))370
-1142 y(\(12,)g(3,)g(6,)g(9\))h(-->)f(\(3,)f(6,)i(9,)f(12\))370
-1255 y(\(16,)g(4,)g(8,)g(12\))g(-->)g(\(4,)g(8,)g(12,)g(16\))370
-1367 y(\(20,)g(5,)g(10,)g(15\))g(-->)g(\(5,)g(10,)g(15,)g(20\))0
-1598 y FG(If)27 b(the)g(n)m(um)m(b)s(er)e(of)j(input)e(and)g(output)h
-(co)s(ordinates)g(are)h(unequal)e(so,)j(also,)f(will)g(b)s(e)e(the)h
-(size)h(of)f(the)h(OUT-)0 1711 y(PERM)36 b(and)f(INPERM)g(arra)m(ys.)57
-b(This)35 b(means,)j(ho)m(w)m(ev)m(er,)g(that)e(w)m(e)h(cannot)f
-(\014ll)g(them)f(with)h(co)s(ordinate)0 1824 y(indices)27
-b(so)h(that)f(they)g(p)s(erform)f(complemen)m(tary)i(p)s(erm)m
-(utations,)g(b)s(ecause)f(one)h(transformation)f(will)h(lose)0
-1937 y(information)i(\(discard)g(a)g(co)s(ordinate\))g(that)h(the)f
-(other)f(cannot)i(reco)m(v)m(er.)42 b(T)-8 b(o)30 b(giv)m(e)h(an)f
-(example,)h(consider)0 2050 y(the)g(follo)m(wing:)262
-2268 y Ft(INTEGER)40 b(OUTPERM\()g(3)k(\),)e(INPERM\()f(4)i(\))262
-2367 y(DOUBLE)e(PRECISION)e(CONST\()j(1)h(\))262 2467
-y(DATA)e(OUTPERM)g(/)i(4,)g(3,)g(2)g(/)262 2567 y(DATA)e(INPERM)h(/)h
-(-1,)f(3,)h(2,)g(1)g(/)262 2666 y(DATA)e(CONST)h(/)h(99.004D0)d(/)0
-2897 y FG(In)h(this)h(case,)k(the)d(forw)m(ard)e(transformation)h(will)
-h(c)m(hange)g(\()p Fp(x)2274 2911 y Fv(1)2313 2897 y
-Fp(;)15 b(x)2405 2911 y Fv(2)2445 2897 y Fp(;)g(x)2537
-2911 y Fv(3)2577 2897 y Fp(;)g(x)2669 2911 y Fv(4)2709
-2897 y FG(\))42 b(in)m(to)h(\()p Fp(x)3069 2911 y Fv(4)3109
-2897 y Fp(;)15 b(x)3201 2911 y Fv(3)3241 2897 y Fp(;)g(x)3333
-2911 y Fv(2)3372 2897 y FG(\))43 b(and)e(will)0 3010
-y(discard)31 b Fp(x)367 3024 y Fv(1)406 3010 y FG(.)43
-b(The)30 b(in)m(v)m(erse)i(transformation)g(restores)f(the)h(original)g
-(co)s(ordinate)g(order,)f(but)f(has)h(no)g(v)-5 b(alue)0
-3123 y(to)31 b(assign)g(to)g(the)f(\014rst)g(co)s(ordinate.)42
-b(In)29 b(this)i(case,)g(the)g(n)m(um)m(b)s(er)e(en)m(tered)i(in)f(the)
-g(INPERM)h(arra)m(y)g(is)f Fu(\000)p FG(1.)0 3278 y(This)36
-b(negativ)m(e)i(v)-5 b(alue)37 b(indicates)h(that)f(the)g(co)s
-(ordinate)g(v)-5 b(alue)37 b(should)e(b)s(e)h(obtained)h(b)m(y)f
-(addressing)g(the)0 3391 y(CONST)j(arra)m(y)h(using)f(an)h(index)g(of)g
-(1)g(\(the)h(absolute)f(v)-5 b(alue\).)71 b(This)39 b(arra)m(y)-8
-b(,)43 b(ignored)d(in)g(the)g(previous)0 3504 y(example,)31
-b(ma)m(y)g(then)f(b)s(e)g(used)g(to)h(supply)e(a)h(v)-5
-b(alue)31 b(for)f(the)h(missing)f(co)s(ordinate.)0 3659
-y(The)g(constructor)h(function:)262 3876 y Ft(PERMMAP)40
-b(=)j(AST_PERMMAP\()c(4,)k(INPERM,)d(3,)j(OUTPERM,)d(CONST,)i(')h(',)g
-(STATUS)e(\))0 4107 y FG(will)31 b(then)f(create)i(a)e(P)m(ermMap)h
-(with)f(the)h(follo)m(wing)h(e\013ect)g(when)d(used)h(to)h(transform)e
-(co)s(ordinates:)227 4338 y Fy(Forward:)370 4451 y(\(1,)47
-b(2,)h(3,)f(4\))g(-->)g(\(4,)g(3,)g(2\))370 4564 y(\(2,)g(4,)h(6,)f
-(8\))g(-->)g(\(8,)g(6,)g(4\))370 4677 y(\(3,)g(6,)h(9,)f(12\))g(-->)g
-(\(12,)f(9,)h(6\))370 4790 y(\(4,)g(8,)h(12,)e(16\))h(-->)g(\(16,)g
-(12,)g(8\))370 4903 y(\(5,)g(10,)g(15,)g(20\))g(-->)g(\(20,)g(15,)g
-(10\))227 5128 y(Inverse:)370 5241 y(\(4,)g(3,)h(2\))f(-->)g(\(99.004,)
-e(2,)i(3,)h(4\))370 5354 y(\(8,)f(6,)h(4\))f(-->)g(\(99.004,)e(4,)i(6,)
-h(8\))370 5467 y(\(12,)f(9,)g(6\))g(-->)g(\(99.004,)f(6,)h(9,)g(12\))
-370 5580 y(\(16,)g(12,)g(8\))g(-->)g(\(99.004,)f(8,)h(12,)g(16\))370
-5693 y(\(20,)g(15,)g(10\))g(-->)g(\(99.004,)e(10,)i(15,)g(20\))p
-eop end
-%%Page: 51 61
-TeXDict begin 51 60 bop 0 52 a Fz(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FG(51)0 351 y(The)26 b(CONST)f(arra)m(y)i(ma)m(y)g
-(con)m(tain)g(more)g(than)f(one)g(v)-5 b(alue)27 b(if)g(necessary)f
-(and)g(ma)m(y)h(b)s(e)f(addressed)f(b)m(y)h(b)s(oth)0
-464 y(the)32 b(INPERM)h(and)e(OUTPERM)h(arra)m(ys)h(using)e(co)s
-(ordinate)i(indices)g Fu(\000)p FG(1,)g Fu(\000)p FG(2,)g
-Fu(\000)p FG(3,)f Fx(etc.)g FG(to)h(refer)f(to)h(the)0
-577 y(\014rst,)d(second,)h(third,)e Fx(etc.)h FG(elemen)m(ts.)0
-740 y(If)37 b(there)h(is)g(no)g(suitable)g(replacemen)m(t)h(v)-5
-b(alue)39 b(that)f(can)g(b)s(e)f(supplied)g Fx(via)h
-FG(the)g(CONST)e(arra)m(y)-8 b(,)41 b(a)d(v)-5 b(alue)0
-853 y(of)38 b(zero)i(ma)m(y)f(b)s(e)e(en)m(tered)i(in)m(to)g(the)g
-(OUTPERM)f(and/or)g(INPERM)g(arra)m(ys.)65 b(This)38
-b(causes)g(the)h(v)-5 b(alue)0 966 y(AST)p Fy(__)p FG(BAD)36
-b(to)h(b)s(e)e(used)h(for)g(the)g(a\013ected)i(co)s(ordinate)f(\(as)g
-(de\014ned)e(in)h(the)g(AST)p Fy(_)p FG(P)-8 b(AR)36
-b(include)g(\014le\),)0 1079 y(th)m(us)30 b(indicating)h(a)g(missing)f
-(co)s(ordinate)h(v)-5 b(alue)31 b(\()p Fu(x)p FG(5.8\).)0
-1241 y(The)k(principle)g(use)f(for)h(a)h(P)m(ermMap)g(lies)g(in)e(matc)
-m(hing)j(a)e(co)s(ordinate)h(system)g(to)g(a)f(data)h(arra)m(y)g(where)
-0 1354 y(there)25 b(is)f(a)h(c)m(hoice)h(of)f(storage)h(order)e(for)g
-(the)h(data.)39 b(P)m(ermMaps)25 b(are)g(also)g(useful)f(for)g
-(discarding)g(un)m(w)m(an)m(ted)0 1467 y(co)s(ordinates)34
-b(so)f(as)g(to)h(reduce)f(the)g(n)m(um)m(b)s(er)f(of)h(dimensions,)h
-(suc)m(h)f(as)g(when)f(selecting)j(a)e(\\slice")i(from)e(a)0
-1580 y(m)m(ulti-dimensional)e(arra)m(y)-8 b(.)p eop end
-%%Page: 52 62
-TeXDict begin 52 61 bop 0 52 a FG(52)1020 b Fz(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))p
-eop end
-%%Page: 53 63
-TeXDict begin 53 62 bop 3689 52 a FG(53)0 351 y FA(6)135
-b(Comp)t(ound)44 b(Mappings)h(\(CmpMaps\))0 601 y FG(W)-8
-b(e)45 b(no)m(w)g(turn)e(to)i(a)g(rather)f(sp)s(ecial)h(form)e(of)i
-(Mapping,)j(the)c(CmpMap.)82 b(The)43 b(Mappings)i(w)m(e)f(ha)m(v)m(e)0
-714 y(considered)h(so)g(far)f(ha)m(v)m(e)i(b)s(een)e(atomic,)50
-b(in)45 b(the)f(sense)h(that)g(they)g(p)s(erform)f(pre-de\014ned)f
-(elemen)m(tary)0 827 y(transformations.)k(A)32 b(CmpMap,)h(ho)m(w)m(ev)
-m(er,)h(is)e(a)h(comp)s(ound)e(Mapping.)47 b(In)31 b(essence,)j(it)f
-(is)g(a)f(framew)m(ork)0 940 y(for)h(con)m(taining)h(other)f(Mappings)g
-(and)f(its)i(purp)s(ose)d(is)i(to)g(allo)m(w)i(those)e(Mappings)g(to)g
-(w)m(ork)g(together)i(in)0 1053 y(v)-5 b(arious)34 b(com)m(binations)h
-(while)g(app)s(earing)e(as)i(a)f(single)h(Ob)5 b(ject.)52
-b(A)35 b(CmpMap's)e(b)s(eha)m(viour)h(is)g(therefore)0
-1166 y(not)d(pre-de\014ned,)e(but)g(is)i(determined)f(b)m(y)g(the)h
-(other)f(Mappings)h(it)f(con)m(tains.)0 1455 y Fw(6.1)112
-b(Com)m(bining)39 b(Mappings)g(in)f(Series)0 1674 y FG(Consider)f(a)h
-(simple)g(example)g(based)g(on)f(t)m(w)m(o)i(2-dimensional)g(co)s
-(ordinate)g(systems.)62 b(Supp)s(ose)36 b(that)j(to)0
-1786 y(con)m(v)m(ert)28 b(from)e(one)g(to)h(the)f(other)h(w)m(e)g(m)m
-(ust)f(sw)m(ap)g(the)g(co)s(ordinate)h(order)f(and)g(m)m(ultiply)g(b)s
-(oth)g(co)s(ordinates)0 1899 y(b)m(y)i(5,)i(so)e(that)i(the)e(co)s
-(ordinates)h(\()p Fp(x)1251 1913 y Fv(1)1291 1899 y Fp(;)15
-b(x)1383 1913 y Fv(2)1423 1899 y FG(\))29 b(transform)e(in)m(to)j(\(5)p
-Fp(x)2217 1913 y Fv(2)2257 1899 y Fp(;)15 b FG(5)p Fp(x)2394
-1913 y Fv(1)2434 1899 y FG(\).)41 b(This)27 b(can)i(b)s(e)f(done)g(in)g
-(t)m(w)m(o)i(stages:)111 2151 y(1.)46 b(Apply)30 b(a)h(P)m(ermMap)f(\()
-p Fu(x)p FG(5.10\))j(to)f(sw)m(ap)e(the)g(co)s(ordinate)i(order.)111
-2335 y(2.)46 b(Apply)30 b(a)h(Zo)s(omMap)f(\()p Fu(x)p
-FG(4.8\))j(to)e(m)m(ultiply)f(b)s(oth)g(co)s(ordinate)h(v)-5
-b(alues)31 b(b)m(y)f(the)h(constan)m(t)g(5.)0 2587 y(The)44
-b(P)m(ermMap)h(and)f(Zo)s(omMap)h(are)g(then)g(said)f(to)i(op)s(erate)f
-Fx(in)h(series,)i FG(b)s(ecause)d(they)g(are)g(applied)0
-2699 y(sequen)m(tially)32 b(\()p Fx(c.f.)f FG(Figure)g(2\).)43
-b(W)-8 b(e)32 b(can)f(create)h(a)g(CmpMap)d(that)j(applies)f(these)g
-(Mappings)g(in)f(series)h(as)0 2812 y(follo)m(ws:)262
-3050 y Ft(INCLUDE)40 b('AST_PAR')262 3150 y(INTEGER)g(CMPMAP,)h
-(PERMMAP,)f(STATUS,)h(ZOOMMAP)262 3250 y(INTEGER)f(INPERM\()h(2)i(\),)g
-(OUTPERM\()d(2)j(\),)g(CONST\()e(1)i(\))262 3349 y(DATA)e(INPERM)h(/)h
-(1,)f(2)i(/)262 3449 y(DATA)d(OUTPERM)g(/)i(1,)g(2)g(/)262
-3648 y(STATUS)e(=)i(0)262 3847 y(...)0 4047 y(*)87 b(Create)41
-b(the)h(individual)e(Mappings.)262 4146 y(PERMMAP)g(=)j(AST_PERMMAP\()c
-(2,)k(INPERM,)d(2,)j(OUTPERM,)d(CONST,)i(')h(',)g(STATUS)e(\))262
-4246 y(ZOOMMAP)f(=)j(AST_ZOOMMAP\()c(2,)k(5.0D0,)e(')i(',)g(STATUS)e
-(\))0 4445 y(*)87 b(Combine)40 b(them)i(in)h(series.)262
-4545 y(CMPMAP)e(=)i(AST_CMPMAP\()c(PERMMAP,)h(ZOOMMAP,)g(.TRUE.,)h(')i
-(',)g(STATUS)e(\))0 4744 y(*)87 b(Annul)41 b(the)i(individual)c
-(Mapping)i(pointers.)262 4844 y(CALL)g(AST_ANNUL\()f(PERMMAP,)g(STATUS)
-h(\))262 4943 y(CALL)g(AST_ANNUL\()f(ZOOMMAP,)g(STATUS)h(\))0
-5194 y FG(Here,)c(the)e(third)f(argumen)m(t)i(\(.TR)m(UE.\))g(of)g(the)
-f(constructor)g(function)g(AST)p Fy(_)p FG(CMPMAP)f(indicates)i(\\in)0
-5307 y(series".)0 5467 y(When)28 b(used)f(to)i(transform)e(co)s
-(ordinates)i(in)f(the)g(forw)m(ard)f(direction,)j(the)e(resulting)g
-(CmpMap)f(will)i(apply)0 5580 y(the)i(\014rst)f(comp)s(onen)m(t)i
-(Mapping)f(\(the)g(P)m(ermMap\))h(and)e(then)h(the)g(second)g(one)g
-(\(the)h(Zo)s(omMap\).)43 b(When)0 5693 y(transforming)29
-b(in)g(the)g(in)m(v)m(erse)h(direction,)h(it)e(will)h(apply)f(the)g
-(second)g(one)h(\(in)f(the)h(in)m(v)m(erse)g(direction\))g(and)p
-eop end
-%%Page: 54 64
-TeXDict begin 54 63 bop 0 52 a FG(54)1891 b Fz(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FG(then)40 b(the)g(\014rst)f(one)h
-(\(also)h(in)f(the)g(in)m(v)m(erse)h(direction\).)70
-b(In)40 b(general,)j(although)e(not)f(in)f(this)h(particular)0
-464 y(example,)c(the)e(order)f(in)h(whic)m(h)g(the)g(t)m(w)m(o)h(comp)s
-(onen)m(t)f(Mappings)g(are)g(supplied)f(is)h(signi\014can)m(t.)52
-b(Clearly)-8 b(,)0 577 y(also,)37 b(the)d(Nout)h(attribute)h(\(n)m(um)m
-(b)s(er)d(of)i(output)f(co)s(ordinates\))i(for)e(the)h(\014rst)e
-(Mapping)i(m)m(ust)f(equal)h(the)0 690 y(Nin)30 b(attribute)h(\(n)m(um)
-m(b)s(er)f(of)g(input)g(co)s(ordinates\))h(for)f(the)h(second)f(one.)0
-975 y Fw(6.2)112 b(Com)m(bining)39 b(Mappings)g(in)f(P)m(arallel)0
-1190 y FG(Connecting)21 b(t)m(w)m(o)i(Mappings)e(in)f(series)h(\()p
-Fu(x)p FG(6.1\))j(is)d(not)g(the)g(only)g(w)m(a)m(y)h(of)f(com)m
-(bining)h(them.)37 b(The)21 b(alternativ)m(e,)0 1303
-y Fx(in)27 b(p)-5 b(ar)g(al)5 b(lel,)27 b FG(in)m(v)m(olv)m(es)f
-(applying)e(the)g(t)m(w)m(o)h(Mappings)f(at)h(once)g(but)e(on)h
-(di\013eren)m(t)g(subsets)f(of)h(the)h(co)s(ordinate)0
-1416 y(v)-5 b(alues.)0 1573 y(Consider,)40 b(for)f(example,)j(a)d(set)h
-(of)f(3-dimensional)h(co)s(ordinates)f(and)g(supp)s(ose)e(w)m(e)i(wish)
-g(to)g(transform)0 1686 y(them)d(b)m(y)h(sw)m(apping)f(the)g(\014rst)g
-(t)m(w)m(o)i(co)s(ordinate)f(v)-5 b(alues)36 b(and)g(m)m(ultiplying)h
-(the)g(\014nal)f(one)g(b)m(y)h(5,)h(so)f(that)0 1799
-y(\()p Fp(x)87 1813 y Fv(1)127 1799 y Fp(;)15 b(x)219
-1813 y Fv(2)259 1799 y Fp(;)g(x)351 1813 y Fv(3)390 1799
-y FG(\))29 b(transforms)e(in)m(to)i(\()p Fp(x)1174 1813
-y Fv(2)1214 1799 y Fp(;)15 b(x)1306 1813 y Fv(1)1346
-1799 y Fp(;)g FG(5)p Fp(x)1483 1813 y Fv(3)1523 1799
-y FG(\).)40 b(Again,)30 b(w)m(e)e(can)h(p)s(erform)e(eac)m(h)i(of)f
-(these)h(steps)f(individually)0 1912 y(using)34 b(exactly)j(the)d(same)
-i(P)m(ermMap)f(and)f(Zo)s(omMap)g(as)h(used)f(earlier)i(\()p
-Fu(x)p FG(6.1\).)55 b(In)34 b(this)h(case,)i(ho)m(w)m(ev)m(er,)0
-2025 y(these)31 b(individual)f(Mappings)g(are)h(applied)f(in)g
-(parallel)h(\()p Fx(c.f.)f FG(Figure)h(3\).)0 2181 y(Creating)g(a)g
-(CmpMap)e(for)h(this)h(purp)s(ose)d(is)j(also)g(v)m(ery)g(simple:)262
-2407 y Ft(CMPMAP)41 b(=)i(AST_CMPMAP\()c(PERMMAP,)h(ZOOMMAP,)g
-(.FALSE.,)h(')i(',)g(STATUS)e(\))0 2646 y FG(The)27 b(only)g
-(di\013erence)h(is)g(that)g(the)f(third)g(argumen)m(t)g(of)h(AST)p
-Fy(_)p FG(CMPMAP)f(is)g(no)m(w)g(.F)-10 b(ALSE.,)29 b(meaning)e(\\in)0
-2759 y(parallel".)0 2916 y(As)h(b)s(efore,)g(the)g(order)f(in)g(whic)m
-(h)h(the)g(t)m(w)m(o)h(comp)s(onen)m(t)f(Mappings)f(are)h(supplied)f
-(is)g(signi\014can)m(t.)41 b(The)27 b(\014rst)0 3029
-y(one)j(acts)g(on)g(the)f(lo)m(w)m(er-n)m(um)m(b)s(ered)h(input)f(co)s
-(ordinate)h(v)-5 b(alues)30 b(\(ho)m(w)m(ev)m(er)h(man)m(y)e(it)h
-(needs\))g(and)f(pro)s(duces)0 3141 y(the)d(lo)m(w)m(er-n)m(um)m(b)s
-(ered)g(output)f(co)s(ordinates,)i(while)f(the)g(second)f(Mapping)h
-(acts)h(on)e(the)h(higher-n)m(um)m(b)s(ered)0 3254 y(input)f(co)s
-(ordinates)i(\(ho)m(w)m(ev)m(er)h(man)m(y)e(remain\))h(and)f(generates)
-h(the)g(remaining)f(higher-n)m(um)m(b)s(ered)f(output)0
-3367 y(co)s(ordinates.)48 b(When)32 b(the)h(CmpMap)e(transforms)h(co)s
-(ordinates)h(in)f(the)h(in)m(v)m(erse)g(direction,)h(b)s(oth)e(comp)s
-(o-)0 3480 y(nen)m(t)f(Mappings)f(are)g(applied)h(to)g(the)f(same)h(co)
-s(ordinates,)g(but)f(in)g(the)h(in)m(v)m(erse)g(direction.)0
-3637 y(Note)j(that)f(the)g(Nin)f(and)g(Nout)h(attributes)h(of)e(the)h
-(comp)s(onen)m(t)g(Mappings)f(\()p Fx(i.e.)h FG(the)g(n)m(um)m(b)s(ers)
-e(of)h(input)0 3750 y(and)e(output)g(co)s(ordinates\))h(will)g(sum)e
-(to)i(giv)m(e)h(the)f(Nin)f(and)g(Nout)h(attributes)g(of)f(the)h(o)m(v)
-m(erall)h(CmpMap.)0 4035 y Fw(6.3)112 b(The)38 b(Comp)s(onen)m(t)g
-(Mappings)0 4250 y FG(A)24 b(CmpMap)f(do)s(es)g(not)h(store)g(copies)h
-(of)f(its)g(comp)s(onen)m(t)g(Mappings,)h(but)e(simply)g(holds)g(p)s
-(oin)m(ters)h(to)g(them.)0 4363 y(In)h(th)g(example)h(ab)s(o)m(v)m(e)h
-(\()p Fu(x)p FG(6.1\),)i(w)m(e)c(w)m(ere)h(free)g(to)g(ann)m(ul)f(the)h
-(individual)e(Mapping)i(p)s(oin)m(ters)f(after)h(creating)0
-4476 y(the)g(CmpMap)e(b)s(ecause)i(the)f(p)s(oin)m(ters)h(held)f(in)m
-(ternally)h(b)m(y)f(the)h(CmpMap)f(increased)g(the)h(reference)g(coun)m
-(t)0 4589 y(\(RefCoun)m(t)46 b(attribute\))g(of)g(eac)m(h)h(comp)s
-(onen)m(t)e(Mapping)h(b)m(y)f(one.)87 b(The)45 b(individual)f(comp)s
-(onen)m(ts)i(are)0 4702 y(therefore)40 b(not)f(deleted)h(b)m(y)f(AST)p
-Fy(_)p FG(ANNUL,)g(but)g(retained)g(un)m(til)h(the)f(CmpMap)g(itself)h
-(is)f(deleted)h(and)0 4815 y(ann)m(uls)e(the)i(p)s(oin)m(ters)e(it)i
-(holds.)66 b(Consisten)m(t)39 b(use)g(of)g(AST)p Fy(_)p
-FG(ANNUL)g(\()p Fu(x)p FG(4.9\))i(and/or)e(p)s(oin)m(ter)g(con)m(texts)
-0 4928 y(\()p Fu(x)p FG(4.10\))33 b(will)e(therefore)g(ensure)e(that)i
-(all)g(Ob)5 b(jects)31 b(are)g(deleted)g(at)g(the)f(appropriate)h
-(time.)0 5085 y(Note)e(that)f(access)h(to)f(a)g(CmpMap's)e(comp)s(onen)
-m(t)i(Mappings)f(is)h(not)f(generally)i(a)m(v)-5 b(ailable)30
-b(unless)d(p)s(oin)m(ters)0 5197 y(to)22 b(them)f(are)h(retained)g
-(when)e(the)h(CmpMap)g(is)g(created.)39 b(If)21 b(suc)m(h)g(p)s(oin)m
-(ters)g(are)g(retained,)j(then)d(subsequen)m(t)0 5310
-y(mo)s(di\014cations)35 b(to)g(the)f(individual)g(comp)s(onen)m(ts)h
-(can)g(b)s(e)e(used)h(to)h(indirectly)g(mo)s(dify)f(the)g(b)s(eha)m
-(viour)g(of)0 5423 y(the)d(o)m(v)m(erall)h(CmpMap.)0
-5580 y(There)22 b(is)h(an)g(imp)s(ortan)m(t)g(exception)h(to)g(this,)g
-(ho)m(w)m(ev)m(er,)i(b)s(ecause)d(a)g(CmpMap)f(retains)h(a)h(cop)m(y)f
-(of)g(the)g(initial)0 5693 y(In)m(v)m(ert)33 b(\015ag)f(settings)h(of)g
-(eac)m(h)g(of)f(its)h(comp)s(onen)m(ts)f(and)g(uses)g(these)g(in)g
-(order)g(to)h(ignore)g(an)m(y)f(subsequen)m(t)p eop end
-%%Page: 55 65
-TeXDict begin 55 64 bop 0 52 a Fz(6.4)92 b(Creating)31
-b(More)g(Complex)f(Mappings)2105 b FG(55)0 351 y(external)33
-b(c)m(hanges.)47 b(This)31 b(means)h(that)h(y)m(ou)f(ma)m(y)h(in)m(v)m
-(ert)g(either)f(comp)s(onen)m(t)h(Mapping)f(b)s(efore)f(inserting)0
-464 y(it)d(in)m(to)g(a)f(CmpMap)f(and)h(need)g(not)g(w)m(orry)g(if)g(y)
-m(ou)g(un-in)m(v)m(ert)h(it)f(again)h(later.)41 b(The)27
-b(CmpMap's)f(b)s(eha)m(viour)0 577 y(will)31 b(not)f(b)s(e)g
-(a\013ected)i(b)m(y)e(the)h(later)g(action.)0 866 y Fw(6.4)112
-b(Creating)38 b(More)g(Complex)g(Mappings)0 1084 y FG(Because)33
-b(a)f(CmpMap)f(is)h(itself)h(a)f(Mapping,)g(an)m(y)h(existing)f(CmpMap)
-f(can)i(substitute)e(\()p Fu(x)p FG(4.3\))j(as)e(a)h(com-)0
-1197 y(p)s(onen)m(t)d(Mapping)f(when)g(constructing)i(a)f(new)g(CmpMap)
-f(using)g(AST)p Fy(_)p FG(CMPMAP)-8 b(.)30 b(This)f(has)h(the)g
-(e\013ect)0 1310 y(of)42 b(nesting)f(one)h(CmpMap)f(inside)g(another)g
-(and)g(op)s(ens)g(up)f(man)m(y)i(new)f(p)s(ossibilities.)74
-b(F)-8 b(or)43 b(example,)0 1423 y(com)m(bining)31 b(three)f(Mappings)h
-(in)f(series)g(can)h(b)s(e)f(accomplished)h(as)f(follo)m(ws:)262
-1659 y Ft(INTEGER)40 b(MAP1,)i(MAP2,)f(MAP3)262 1858
-y(...)262 2057 y(CMPMAP)g(=)i(AST_CMPMAP\()c(MAP1,)i(AST_CMPMAP\()e
-(MAP2,)j(MAP3,)f(.TRUE.,)g(')i(',)g(STATUS)e(\),)218
-2157 y(:)915 b(.TRUE.,)41 b(')i(',)f(STATUS)g(\))0 2406
-y FG(The)26 b(w)m(a)m(y)h(in)e(whic)m(h)h(the)g(individual)g(comp)s
-(onen)m(t)g(Mappings)g(are)h(group)s(ed)e(within)g(the)h(nested)g
-(CmpMaps)0 2519 y(is)k(not)h(usually)f(imp)s(ortan)m(t.)0
-2679 y(A)d(similar)h(tec)m(hnique)g(can)g(b)s(e)f(used)f(to)i(com)m
-(bine)g(m)m(ultiple)g(Mappings)g(in)f(parallel)h(and,)g(of)f(course,)i
-(mixed)0 2791 y(series)k(and)g(parallel)h(com)m(binations)g(are)g(also)
-g(p)s(ossible)f(\(Figure)g(4\).)50 b(There)33 b(is)g(no)g(built-in)g
-(limit)h(to)f(ho)m(w)0 2904 y(man)m(y)23 b(CmpMaps)f(ma)m(y)i(b)s(e)e
-(nested)h(in)g(this)g(w)m(a)m(y)-8 b(,)26 b(so)d(this)g(mec)m(hanism)h
-(pro)m(vides)f(an)g(inde\014nitely)g(extensible)0 3017
-y(metho)s(d)30 b(of)g(building)g(complex)h(Mappings)f(out)h(of)f(the)h
-(elemen)m(tal)h(building)e(blo)s(c)m(ks)h(pro)m(vided)f(b)m(y)g(AST.)0
-3177 y(In)i(practice,)i(y)m(ou)f(migh)m(t)h(not)e(need)h(to)g
-(construct)g(suc)m(h)f(complex)h(CmpMaps)f(y)m(ourself)h(v)m(ery)g
-(frequen)m(tly)-8 b(,)0 3290 y(but)27 b(they)h(will)g(often)g(b)s(e)e
-(returned)h(b)m(y)g(AST)g(routines.)40 b(Nested)28 b(CmpMaps)f
-(underlie)f(the)i(library's)g(en)m(tire)0 3403 y(abilit)m(y)k(to)f
-(represen)m(t)f(a)h(wide)f(range)h(of)g(di\013eren)m(t)f(co)s(ordinate)
-i(transformations.)0 3691 y Fw(6.5)112 b(Example|T)-9
-b(ransforming)40 b(Bet)m(w)m(een)d(Tw)m(o)g(Calibrated)i(Images)0
-3909 y FG(Consider,)27 b(as)f(a)h(practical)i(example)e(of)f(CmpMaps,)h
-(t)m(w)m(o)h(images)f(of)g(the)g(sky)-8 b(.)39 b(Supp)s(ose)25
-b(that)i(for)g(eac)m(h)g(im-)0 4022 y(age)h(w)m(e)g(ha)m(v)m(e)h(a)e
-(Mapping)g(whic)m(h)g(con)m(v)m(erts)i(from)e(pixel)g(co)s(ordinates)h
-(to)g(a)f(standard)g(celestial)j(co)s(ordinate)0 4135
-y(system,)38 b(sa)m(y)e(FK5)h(\(J2000.0\).)60 b(If)36
-b(w)m(e)g(wish)f(to)i(in)m(ter-compare)g(these)g(images,)h(w)m(e)f(can)
-f(do)g(so)g(b)m(y)g(using)0 4248 y(this)c(celestial)j(co)s(ordinate)f
-(system)f(to)g(align)g(them.)47 b(That)33 b(is,)g(w)m(e)g(\014rst)f
-(con)m(v)m(ert)i(from)e(pixel)h(co)s(ordinates)0 4361
-y(in)i(the)h(\014rst)f(image)h(in)m(to)h(FK5)f(co)s(ordinates)g(and)f
-(w)m(e)h(then)f(con)m(v)m(ert)i(from)e(FK5)h(co)s(ordinates)h(in)m(to)f
-(pixel)0 4474 y(co)s(ordinates)31 b(in)f(the)h(second)f(image.)0
-4633 y(If)23 b(MAP)-8 b(A)24 b(and)e(MAPB)i(are)f(p)s(oin)m(ters)g(to)h
-(our)f(t)m(w)m(o)h(original)g(Mappings,)h(w)m(e)e(could)g(form)g(a)h
-(CmpMap)e(whic)m(h)0 4746 y(transforms)32 b(directly)i(b)s(et)m(w)m
-(een)g(the)f(pixel)g(co)s(ordinates)h(of)g(the)f(\014rst)f(and)h
-(second)g(images)h(b)m(y)f(com)m(bining)0 4859 y(these)e(Mappings,)f
-(as)h(follo)m(ws:)262 5095 y Ft(INTEGER)40 b(ALIGNMAP,)g(MAPA,)i(MAPB)
-262 5295 y(...)262 5494 y(CALL)f(AST_INVERT\()e(MAPB,)j(STATUS)f(\))262
-5593 y(ALIGNMAP)f(=)j(AST_CMPMAP\()c(MAPA,)j(MAPB,)f(.TRUE.,)g(')i(',)g
-(STATUS)e(\))262 5693 y(CALL)g(AST_INVERT\()e(MAPB,)j(STATUS)f(\))p
-eop end
-%%Page: 56 66
-TeXDict begin 56 65 bop 0 52 a FG(56)1891 b Fz(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FG(Here,)g(w)m(e)g(ha)m(v)m(e)g(used)e
-(AST)p Fy(_)p FG(INVER)-8 b(T)28 b(\()p Fu(x)p FG(5.5\))k(to)e(in)m(v)m
-(ert)g(MAPB)f(b)s(efore)g(inserting)g(it)h(in)m(to)g(the)f(CmpMap)0
-464 y(b)s(ecause,)43 b(as)e(supplied,)h(it)e(con)m(v)m(erted)i(in)e
-(the)h(wrong)f(direction.)71 b(Afterw)m(ards,)43 b(w)m(e)e(in)m(v)m
-(ert)g(it)g(again)h(to)0 577 y(return)26 b(it)i(to)f(its)h(original)g
-(state.)41 b(The)27 b(CmpMap,)g(ho)m(w)m(ev)m(er,)i(will)f(ignore)f
-(this)g(subsequen)m(t)g(c)m(hange)h(\()p Fu(x)p FG(6.3\).)0
-751 y(The)d(forw)m(ard)f(transformation)i(of)f(the)g(resulting)g
-(CmpMap)g(will)g(no)m(w)g(transform)g(from)f(pixel)i(co)s(ordinates)0
-864 y(in)j(the)g(\014rst)g(image)h(to)g(pixel)g(co)s(ordinates)f(in)g
-(the)h(second)f(image,)i(while)e(its)h(in)m(v)m(erse)g(transformation)f
-(will)0 977 y(con)m(v)m(ert)j(in)e(the)h(opp)s(osite)f(direction.)0
-1307 y Fw(6.6)112 b(Ov)m(er-Complex)39 b(Comp)s(ound)g(Mappings)0
-1545 y FG(While)h(a)f(CmpMap)f(pro)m(vides)h(a)g(v)m(ery)g(\015exible)h
-(w)m(a)m(y)f(of)g(constructing)h(arbitrarily)f(complex)h(Mappings)0
-1658 y(\()p Fu(x)p FG(6.4\),)34 b(it)e(unfortunately)f(also)h(pro)m
-(vides)g(an)f(opp)s(ortunit)m(y)g(for)g(represen)m(ting)h(simple)f
-(Mappings)g(in)h(com-)0 1771 y(plex)d(w)m(a)m(ys.)41
-b(Sometimes,)30 b(unnecessary)e(complexit)m(y)j(can)e(b)s(e)f
-(di\016cult)h(to)g(a)m(v)m(oid)h(but)f(can)g(obscure)f(imp)s(or-)0
-1884 y(tan)m(t)j(simpli\014cations.)0 2058 y(Consider)46
-b(the)g(example)h(ab)s(o)m(v)m(e)h(\()p Fu(x)p FG(6.5\),)53
-b(in)46 b(whic)m(h)g(w)m(e)h(in)m(ter-related)h(t)m(w)m(o)g(images)f
-(of)g(the)f(sky)h Fx(via)f FG(a)0 2171 y(CmpMap.)38 b(If)26
-b(the)g(t)m(w)m(o)h(images)g(turned)e(out)h(to)h(b)s(e)e(simply)h
-(o\013set)h(from)e(eac)m(h)i(other)g(b)m(y)e(a)i(shift)e(along)i(eac)m
-(h)0 2284 y(pixel)g(axis,)h(then)e(this)h(approac)m(h)g(w)m(ould)f
-(align)h(them)g(correctly)-8 b(,)29 b(but)d(it)h(w)m(ould)g(b)s(e)f
-(ine\016cien)m(t.)40 b(This)26 b(is)h(b)s(e-)0 2397 y(cause)c(it)g(w)m
-(ould)f(in)m(tro)s(duce)g(unnecessary)g(and)g(exp)s(ensiv)m(e)g
-(transformations)h(to)g(and)f(from)g(an)g(in)m(termediate)0
-2510 y(celestial)33 b(co)s(ordinate)e(system,)g(whereas)f(a)h(simple)f
-(shift)g(of)h(pixel)f(origin)h(w)m(ould)f(su\016ce.)0
-2683 y(Recognising)41 b(that)f(a)f(simpler)g(and)g(more)h(e\016cien)m
-(t)h(solution)e(exists)h(ob)m(viously)g(requires)f(a)h(little)h(more)0
-2796 y(than)34 b(simply)g(joining)h(t)m(w)m(o)h(Mappings)f(end-to-end.)
-53 b(W)-8 b(e)36 b(m)m(ust)e(also)i(determine)f(whether)f(the)g
-(resulting)0 2909 y(CmpMap)c(is)h(more)g(complex)h(than)f(it)h(needs)e
-(to)i(b)s(e,)f Fx(i.e.)f FG(con)m(tains)i(redundan)m(t)e(information.)
-43 b(If)31 b(it)g(is,)h(w)m(e)0 3022 y(then)e(need)g(a)h(w)m(a)m(y)g
-(to)g(simplify)f(it.)0 3196 y(The)41 b(problem)g(is)g(not)h(alw)m(a)m
-(ys)h(just)e(one)g(of)h(e\016ciency)-8 b(,)46 b(ho)m(w)m(ev)m(er.)75
-b(Sometimes)42 b(w)m(e)g(ma)m(y)g(also)h(need)e(to)0
-3309 y(kno)m(w)c(something)g(ab)s(out)f(the)h(actual)h(form)f(a)g
-(Mapping)f(tak)m(es|)p Fx(i.e.)i FG(the)f(nature)f(of)h(the)g(op)s
-(erations)g(it)0 3422 y(p)s(erforms.)i(Unnecessary)29
-b(complexit)m(y)h(can)f(obscure)g(this,)g(but)f(suc)m(h)h(complexit)m
-(y)h(can)g(easily)g(accum)m(ulate)0 3535 y(during)f(normal)h(data)i
-(pro)s(cessing.)0 3709 y(F)-8 b(or)35 b(example,)i(a)e(Mapping)f(that)h
-(transforms)f(pixel)h(co)s(ordinates)g(in)m(to)h(p)s(ositions)e(on)h
-(the)g(sky)f(migh)m(t)h(b)s(e)0 3822 y(rep)s(eatedly)29
-b(mo)s(di\014ed)e(as)i(c)m(hanges)g(are)g(made)g(to)g(the)g(shap)s(e)e
-(and)h(size)i(of)e(the)h(image.)41 b(T)m(ypically)-8
-b(,)31 b(on)d(eac)m(h)0 3934 y(o)s(ccasion,)e(another)d(Mapping)g(will)
-h(b)s(e)e(concatenated)j(to)f(re\015ect)g(what)f(has)f(happ)s(ened)g
-(to)h(the)h(image.)39 b(This)0 4047 y(could)26 b(so)s(on)g(mak)m(e)h
-(it)f(di\016cult)g(to)g(discern)g(the)g(o)m(v)m(erall)i(nature)e(of)g
-(the)g(transformation)g(from)g(the)g(complex)0 4160 y(CmpMap)37
-b(that)h(accum)m(ulates.)65 b(If)37 b(only)h(shifts)f(of)h(origin)g(w)m
-(ere)h(in)m(v)m(olv)m(ed)g(on)f(eac)m(h)h(o)s(ccasion,)i(ho)m(w)m(ev)m
-(er,)0 4273 y(they)31 b(could)f(b)s(e)g(com)m(bined)g(in)m(to)i(a)e
-(single)h(shift)f(whic)m(h)h(could)f(b)s(e)g(represen)m(ted)g(m)m(uc)m
-(h)g(more)h(simply)-8 b(.)0 4447 y(Supp)s(ose)37 b(w)m(e)j(no)m(w)f(w)m
-(an)m(ted)h(to)g(represen)m(t)f(our)g(image's)h(celestial)i(co)s
-(ordinate)e(calibration)h(using)d(FITS)0 4560 y(con)m(v)m(en)m(tions)h
-(\()p Fu(x)p FG(17\).)64 b(This)36 b(requires)h(AST)g(to)h(determine)f
-(whether)g(the)g(Mapping)h(whic)m(h)f(relates)h(pixel)0
-4673 y(co)s(ordinate)33 b(to)g(sky)f(p)s(ositions)g(conforms)g(to)g
-(the)h(FITS)e(mo)s(del)h(\(for)g(example,)i(whether)d(it)i(is)f(equiv)
--5 b(alen)m(t)0 4786 y(to)31 b(applying)f(a)h(single)g(set)f(of)h
-(shifts)e(and)h(scale)i(factors)f(follo)m(w)m(ed)g(b)m(y)g(a)f(map)g
-(pro)5 b(jection\).)42 b(Clearly)-8 b(,)31 b(there)0
-4899 y(is)f(an)h(imp)s(ortan)m(t)f(use)g(here)h(for)f(some)g(means)h
-(of)f(simplifying)g(the)h(in)m(ternal)g(structure)f(of)h(a)f(CmpMap.)0
-5229 y Fw(6.7)112 b(Simplifying)40 b(Comp)s(ound)f(Mappings)0
-5467 y FG(The)47 b(abilit)m(y)i(to)f(simplify)f(comp)s(ound)f(Mappings)
-i(is)f(pro)m(vided)g(b)m(y)h(the)f(AST)p Fy(_)p FG(SIMPLIFY)g
-(function.)0 5580 y(This)40 b(function)g(encapsulates)i(a)f(n)m(um)m(b)
-s(er)e(of)i(heuristics)g(for)f(con)m(v)m(erting)i(Mappings,)i(or)c(com)
-m(binations)0 5693 y(of)e(Mappings)f(within)g(a)g(CmpMap,)i(in)m(to)f
-(simpler,)h(equiv)-5 b(alen)m(t)39 b(ones.)62 b(When)37
-b(applied)g(to)h(a)g(CmpMap,)p eop end
-%%Page: 57 67
-TeXDict begin 57 66 bop 0 52 a Fz(6.7)92 b(Simplifying)30
-b(Comp)s(ound)e(Mappings)2148 b FG(57)592 1403 y @beginspecial
-43 @llx 353 @lly 522 @urx 564 @ury 3113 @rwi @setspecial
-%%BeginDocument: sun210_figures/simpexamp.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1599 a(Figure)38 b(10:)56 b(An)37 b(o)m(v)m(er-complex)j
-(comp)s(ound)c(Mapping,)k(consisting)e(of)g(P)m(ermMaps,)i(Zo)s(omMaps)
-d(and)g(a)0 1712 y(UnitMap,)28 b(whic)m(h)e(can)g(b)s(e)g(simpli\014ed)
-f(to)i(b)s(ecome)f(a)h(single)g(UnitMap.)40 b(The)25
-b(enclosing)i(nested)f(CmpMaps)0 1825 y(ha)m(v)m(e)32
-b(b)s(een)d(omitted)j(for)e(clarit)m(y)-8 b(.)0 2194
-y(AST)p Fy(_)p FG(SIMPLIFY)25 b(tries)h(to)h(reduce)f(the)g(n)m(um)m(b)
-s(er)e(of)j(individual)e(Mappings)h(within)f(it)i(b)m(y)f(merging)g
-(neigh-)0 2307 y(b)s(ouring)21 b(comp)s(onen)m(t)i(Mappings)g
-(together.)39 b(It)23 b(will)g(do)g(this)f(with)h(b)s(oth)f(series)g
-(and)h(parallel)g(com)m(binations)0 2419 y(of)31 b(Mappings,)f(or)g(b)s
-(oth,)g(and)g(will)h(handle)f(CmpMaps)f(nested)h(to)h(an)m(y)g(depth)f
-(\()p Fu(x)p FG(6.4\).)0 2579 y(T)-8 b(o)30 b(illustrate)h(ho)m(w)e
-(AST)p Fy(_)p FG(SIMPLIFY)f(w)m(orks,)i(consider)f(the)h(com)m
-(bination)h(of)e(Mappings)g(sho)m(wn)g(in)g(Fig-)0 2692
-y(ure)h(10.)82 b(If)30 b(this)g(w)m(ere)h(con)m(tained)g(in)f(a)h
-(CmpMap,)f(it)h(could)f(b)s(e)g(simpli\014ed)g(as)g(follo)m(ws:)262
-2930 y Ft(INTEGER)40 b(SIMPLER)262 3129 y(...)262 3328
-y(SIMPLER)g(=)j(AST_SIMPLIFY\()c(CMPMAP,)h(STATUS)h(\);)0
-3579 y FG(In)34 b(this)g(case,)j(the)d(result)g(w)m(ould)g(b)s(e)g(a)h
-(simple)f(3-dimensional)h(UnitMap)g(\(the)g(iden)m(tit)m(y)h
-(Mapping\).)53 b(T)-8 b(o)0 3692 y(reac)m(h)44 b(this)f(conclusion,)48
-b(AST)p Fy(_)p FG(SIMPLIFY)42 b(will)h(ha)m(v)m(e)i(made)e(a)h(n)m(um)m
-(b)s(er)e(of)i(deductions,)i(roughly)d(as)0 3805 y(follo)m(ws:)111
-4056 y(1.)j(The)37 b(t)m(w)m(o)h(2-dimensional)g(Zo)s(omMaps)f(in)g
-(series)g(are)h(equiv)-5 b(alen)m(t)38 b(to)g(a)g(single)f(Zo)s(omMap)g
-(with)g(a)227 4169 y(com)m(bined)31 b(Zo)s(om)f(factor)h(of)g(unit)m(y)
--8 b(.)41 b(This,)30 b(in)g(turn,)f(is)i(equiv)-5 b(alen)m(t)32
-b(to)f(a)f(2-dimensional)i(UnitMap.)111 4354 y(2.)46
-b(This)32 b(UnitMap)h(in)f(parallel)i(with)e(the)g(other)h
-(1-dimensional)g(UnitMap)g(is)g(equiv)-5 b(alen)m(t)34
-b(to)f(a)g(single)227 4467 y(3-dimensional)d(UnitMap.)40
-b(This)28 b(UnitMap,)i(sandwic)m(hed)e(b)s(et)m(w)m(een)h(an)m(y)g
-(other)g(pair)g(of)f(Mappings,)227 4580 y(can)j(then)f(b)s(e)g
-(eliminated.)111 4765 y(3.)46 b(The)h(remaining)g(t)m(w)m(o)h(P)m
-(ermMaps)f(in)f(series)h(are)h(equiv)-5 b(alen)m(t)48
-b(to)f(a)h(single)f(3-dimensional)h(P)m(er-)227 4877
-y(mMap.)e(When)32 b(these)h(are)f(com)m(bined,)h(the)g(resulting)f(P)m
-(ermMap)g(is)g(found)f(to)i(b)s(e)f(equiv)-5 b(alen)m(t)33
-b(to)g(a)227 4990 y(3-dimensional)f(UnitMap.)0 5241 y(This)43
-b(example)i(is)f(a)h(little)h(con)m(triv)m(ed,)j(but)44
-b(illustrates)h(ho)m(w)f(AST)p Fy(_)p FG(SIMPLIFY)f(can)h(deal)h(with)f
-(ev)m(en)0 5354 y(quite)34 b(complicated)g(comp)s(ound)e(Mappings)h
-(through)g(a)g(series)h(of)f(incremen)m(tal)h(simpli\014cations.)50
-b(Where)0 5467 y(p)s(ossible,)32 b(this)g(will)g(result)g(in)g(either)g
-(a)h(simpler)e(comp)s(ound)g(Mapping)h(or,)g(if)g(feasible,)i(an)e
-(atomic)h(\(non-)0 5580 y(comp)s(ound\))d(Mapping,)h(as)g(here.)42
-b(If)30 b(no)h(simpli\014cation)h(is)f(p)s(ossible,)f(AST)p
-Fy(_)p FG(SIMPLIFY)g(will)h(just)g(return)0 5693 y(a)g(p)s(oin)m(ter)f
-(to)h(the)g(original)g(Mapping.)p eop end
-%%Page: 58 68
-TeXDict begin 58 67 bop 0 52 a FG(58)1891 b Fz(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FG(Although)41 b(AST)p
-Fy(_)p FG(SIMPLIFY)e(cannot)i(iden)m(tify)g(ev)m(ery)g
-(simpli\014cation)h(that)f(is)f(theoretically)k(p)s(ossible,)0
-464 y(su\016cien)m(t)31 b(rules)f(are)h(included)e(to)i(deal)g(with)f
-(the)h(most)g(common)f(and)g(imp)s(ortan)m(t)g(cases.)p
-eop end
-%%Page: 59 69
-TeXDict begin 59 68 bop 3689 52 a FG(59)0 351 y FA(7)135
-b(Represen)l(ting)46 b(Co)t(ordinate)g(Systems)g(\(F)-11
-b(rames\))0 600 y FG(An)32 b(AST)f(F)-8 b(rame)33 b(is)f(an)f(Ob)5
-b(ject)32 b(that)h(is)f(used)f(to)i(represen)m(t)f(a)g(co)s(ordinate)h
-(system.)45 b(Con)m(trast)33 b(this)f(with)0 713 y(a)c(Mapping)g(\()p
-Fu(x)p FG(5\),)j(whic)m(h)d(is)g(used)f(to)i(describ)s(e)e(ho)m(w)h(to)
-h(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(co)s(ordinate)g(systems.)40
-b(The)27 b(t)m(w)m(o)0 826 y(concepts)k(are)g(complemen)m(tary)h(and)d
-(w)m(e)i(will)g(see)g(ho)m(w)f(they)h(w)m(ork)f(together)i(in)e
-Fu(x)p FG(13.)0 985 y(In)d(this)h(section)g(w)m(e)g(will)g(discuss)f
-(only)h(basic)g(F)-8 b(rames,)29 b(whic)m(h)f(represen)m(t)g(Cartesian)
-g(co)s(ordinate)g(systems.)0 1098 y(More)34 b(sp)s(ecialised)f(t)m(yp)s
-(es)g(of)g(F)-8 b(rame)34 b(\()p Fx(e.g.)f FG(the)g(SkyF)-8
-b(rame,)34 b(whic)m(h)e(represen)m(ts)h(celestial)j(co)s(ordinate)e
-(sys-)0 1211 y(tems,)i(and)e(the)h(Sp)s(ecF)-8 b(rame,)36
-b(whic)m(h)f(represen)m(ts)f(sp)s(ectral)h(co)s(ordinate)g(systems\))g
-(are)g(co)m(v)m(ered)i(later)e(\()p Fu(x)p FG(8)0 1324
-y(and)24 b Fu(x)p FG(9\))h(and,)g(naturally)-8 b(,)27
-b(inherit)d(the)g(prop)s(erties)g(and)g(b)s(eha)m(viour)g(of)g(the)h
-(simple)f(F)-8 b(rames)25 b(discussed)e(here.)0 1612
-y Fw(7.1)112 b(The)38 b(F)-9 b(rame)38 b(Mo)s(del)0 1830
-y FG(The)30 b(b)s(est)f(w)m(a)m(y)i(to)g(think)f(ab)s(out)g(a)g(F)-8
-b(rame)32 b(is)e(lik)m(e)h(the)g(frame)f(that)g(y)m(ou)h(w)m(ould)f
-(plot)g(around)g(a)g(graph.)40 b(In)0 1942 y(t)m(w)m(o)34
-b(dimensions,)f(y)m(ou)g(w)m(ould)g(ha)m(v)m(e)h(an)e(\\)p
-Fp(x)p FG(")i(and)e(a)h(\\)p Fp(y)s FG(")g(axis,)h(a)g(title)g(on)e
-(the)h(graph)g(and)f(lab)s(els)h(on)f(the)0 2055 y(axes,)g(together)h
-(with)e(an)g(indication)h(of)g(the)f(ph)m(ysical)h(units)f(b)s(eing)g
-(plotted.)44 b(The)30 b(v)-5 b(alues)32 b(mark)m(ed)f(along)0
-2168 y(eac)m(h)37 b(axis)f(w)m(ould)g(b)s(e)f(formatted)h(in)f(a)h(h)m
-(uman-readable)g(w)m(a)m(y)-8 b(.)58 b(The)35 b(frame)h(around)f(a)h
-(graph)f(therefore)0 2281 y(de\014nes)e(a)h(co)s(ordinate)h(space)g
-(within)e(whic)m(h)h(y)m(ou)g(can)h(lo)s(cate)g(p)s(oin)m(ts,)g(dra)m
-(w)f(lines,)h(calculate)i(distances,)0 2394 y Fx(etc.)0
-2553 y FG(An)30 b(AST)h(F)-8 b(rame)31 b(w)m(orks)g(in)g(m)m(uc)m(h)f
-(the)h(same)h(w)m(a)m(y)-8 b(,)32 b(em)m(b)s(o)s(dying)e(all)i(of)f
-(these)g(concepts)h(and)e(a)h(few)g(more.)0 2666 y(It)f(also)h(allo)m
-(ws)g(an)m(y)f(n)m(um)m(b)s(er)f(of)h(axes,)h(whic)m(h)e(means)h(that)h
-(a)f(F)-8 b(rame)31 b(can)f(represen)m(t)g(co)s(ordinate)g(systems)0
-2779 y(with)g(an)m(y)h(n)m(um)m(b)s(er)e(of)h(dimensions.)40
-b(Y)-8 b(ou)31 b(sp)s(ecify)f(ho)m(w)h(man)m(y)f(when)g(y)m(ou)g
-(create)i(it.)0 2938 y(Remem)m(b)s(er)25 b(that)h(the)f(basic)h(F)-8
-b(rame)26 b(w)m(e)g(are)g(considering)f(here)g(is)h(completely)h
-(general.)40 b(It)25 b(kno)m(ws)g(nothing)0 3051 y(of)e(celestial)i(co)
-s(ordinates,)g(for)e(example,)i(and)d(all)h(its)g(axes)h(are)f(equiv)-5
-b(alen)m(t.)39 b(It)23 b(can)g(b)s(e)f(adapted)h(to)g(describ)s(e)0
-3164 y(an)m(y)30 b(general)g(purp)s(ose)e(Cartesian)h(co)s(ordinate)i
-(system)e(b)m(y)g(setting)i(its)e(attributes,)i(suc)m(h)e(as)g(its)h
-(Title)g(and)0 3277 y(axis)h(Lab)s(els,)f Fx(etc.)g FG(to)h
-(appropriate)g(v)-5 b(alues.)0 3565 y Fw(7.2)112 b(Creating)38
-b(a)g(F)-9 b(rame)0 3782 y FG(Creating)31 b(a)g(F)-8
-b(rame)31 b(is)f(straigh)m(tforw)m(ard)i(and)d(follo)m(ws)j(the)e
-(usual)g(pattern:)262 4017 y Ft(INCLUDE)40 b('AST_PAR')262
-4116 y(INTEGER)g(FRAME,)h(STATUS)262 4315 y(STATUS)g(=)i(0)262
-4515 y(...)262 4714 y(FRAME)e(=)i(AST_FRAME\()d(2,)i(')i(',)e(STATUS)f
-(\))0 4962 y FG(The)24 b(\014rst)g(argumen)m(t)h(of)g(the)g(AST)p
-Fy(_)p FG(FRAME)f(constructor)i(function)e(sp)s(eci\014es)g(the)h(n)m
-(um)m(b)s(er)f(of)g(axes)i(whic)m(h)0 5075 y(the)31 b(F)-8
-b(rame)31 b(should)e(ha)m(v)m(e.)0 5362 y Fw(7.3)112
-b(Using)38 b(a)g(F)-9 b(rame)39 b(as)f(a)f(Mapping)0
-5580 y FG(W)-8 b(e)38 b(should)d(brie\015y)h(p)s(oin)m(t)g(out)h(that)g
-(the)f(F)-8 b(rame)38 b(w)m(e)f(created)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FG(7.2\))g(is)f(also)g(a)g(Mapping)f(\()p Fu(x)p
-FG(5.1\))0 5693 y(and)30 b(therefore)h(inherits)f(the)g(prop)s(erties)g
-(and)g(b)s(eha)m(viour)g(common)g(to)h(other)g(Mappings.)p
-eop end
-%%Page: 60 70
-TeXDict begin 60 69 bop 0 52 a FG(60)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(One)k(w)m(a)m(y)h(to)g(see)g(this)f(is)g(to)h(set)g(the)f(F)-8
-b(rame's)34 b(Rep)s(ort)f(attribute)h(\(inherited)f(from)g(the)g
-(Mapping)g(class\))0 464 y(to)d(a)g(non-zero)g(v)-5 b(alue)30
-b(and)f(pass)g(the)g(F)-8 b(rame)31 b(p)s(oin)m(ter)e(to)h(a)g(co)s
-(ordinate)g(transformation)g(routine,)g(suc)m(h)f(as)0
-577 y(AST)p Fy(_)p FG(TRAN2.)262 836 y Ft(DOUBLE)41 b(PRECISION)e
-(XIN\()j(5)i(\),)e(YIN\()g(5)h(\),)g(XOUT\()f(5)h(\),)g(YOUT\()e(5)i
-(\))262 936 y(DATA)e(XIN)i(/)g(0D0,)f(1D0,)g(2D0,)g(3D0,)g(4D0,)g(5D0)g
-(/)262 1036 y(DATA)f(YIN)i(/)g(0D0,)f(2D0,)g(4D0,)g(6D0,)g(8D0,)g(10D0)
-g(/)262 1235 y(CALL)f(AST_SET\()g(FRAME,)g('Report=1',)e(STATUS)i(\))
-262 1335 y(CALL)g(AST_TRAN2\()f(FRAME,)h(5,)i(XIN,)f(YIN,)g(.TRUE.,)e
-(XOUT,)i(YOUT,)f(STATUS)g(\))0 1607 y FG(The)30 b(resulting)g(output)g
-(migh)m(t)h(then)g(lo)s(ok)f(lik)m(e)i(this:)227 1880
-y Fy(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227 1993 y(\(2,)g(4\))g(-->)g
-(\(2,)g(4\))227 2106 y(\(3,)g(6\))g(-->)g(\(3,)g(6\))227
-2218 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227 2331 y(\(5,)g(10\))g(-->)g
-(\(5,)g(10\))0 2604 y FG(This)39 b(is)h(not)g(v)m(ery)g(exciting)h(b)s
-(ecause)e(a)i(F)-8 b(rame)40 b(implemen)m(ts)g(an)g(iden)m(tit)m(y)h
-(transformation)f(just)f(lik)m(e)i(a)0 2717 y(UnitMap)c(\()p
-Fu(x)p FG(5.9\).)60 b(Ho)m(w)m(ev)m(er,)40 b(it)d(illustrates)g(that)g
-(a)f(F)-8 b(rame)37 b(can)g(b)s(e)e(used)h(as)g(a)h(Mapping)f(and)f
-(that)i(its)0 2830 y(Nin)30 b(and)g(Nout)h(attributes)g(are)g(b)s(oth)e
-(equal)i(to)g(the)g(n)m(um)m(b)s(er)e(of)h(F)-8 b(rame)32
-b(axes.)0 2996 y(When)d(w)m(e)i(consider)e(more)h(sp)s(ecialised)g(F)-8
-b(rames)31 b(\()p Fx(e.g.)e Fu(x)p FG(13\),)j(w)m(e)e(will)g(see)h
-(that)f(using)f(them)h(as)g(Mappings)0 3109 y(can)h(b)s(e)e(v)m(ery)i
-(useful)f(indeed.)0 3414 y Fw(7.4)112 b(F)-9 b(rame)39
-b(Axis)e(A)m(ttributes)0 3640 y FG(F)-8 b(rames)36 b(ha)m(v)m(e)h(a)e
-(n)m(um)m(b)s(er)f(of)i(attributes)g(whic)m(h)f(can)g(tak)m(e)i(m)m
-(ultiple)f(v)-5 b(alues,)37 b(one)f(for)f(eac)m(h)i(axis.)56
-b(These)0 3753 y(separate)42 b(v)-5 b(alues)42 b(are)g(iden)m(ti\014ed)
-g(b)m(y)f(app)s(ending)f(the)i(axis)g(n)m(um)m(b)s(er)e(in)h(paren)m
-(theses)h(to)g(the)g(attribute)0 3866 y(name.)76 b(F)-8
-b(or)43 b(example,)j(the)c(Lab)s(el\(1\))h(attribute)g(is)f(a)h(c)m
-(haracter)g(string)f(con)m(taining)i(the)e(lab)s(el)h(whic)m(h)0
-3979 y(app)s(ears)30 b(on)g(the)g(\014rst)g(axis.)0 4145
-y(Axis)k(attributes)h(are)g(accessed)g(in)f(the)g(same)h(w)m(a)m(y)g
-(as)f(all)h(other)g(attributes)f(\()p Fu(x)p FG(4.5,)k
-Fu(x)p FG(4.6)d(and)f Fu(x)p FG(4.7\).)54 b(F)-8 b(or)0
-4258 y(example,)31 b(the)g(Lab)s(el)f(on)g(the)h(second)f(axis)h(migh)m
-(t)g(b)s(e)f(obtained)h(as)f(follo)m(ws:)262 4517 y Ft(CHARACTER)39
-b(*)44 b(\()f(70)f(\))i(LABEL)262 4716 y(...)262 4916
-y(LABEL)d(=)i(AST_GETC\()d(FRAME,)h('Label\(2\)',)e(STATUS)i(\))0
-5188 y FG(Other)33 b(attribute)h(access)h(routines)f(\(AST)p
-Fy(_)p FG(SETx,)f(AST)p Fy(_)p FG(TEST)e(and)i(AST)p
-Fy(_)p FG(CLEAR\))g(ma)m(y)h(also)g(b)s(e)f(ap-)0 5301
-y(plied)d(to)h(axis)g(attributes)g(in)f(the)h(same)g(w)m(a)m(y)-8
-b(.)0 5467 y(If)27 b(the)h(axis)g(n)m(um)m(b)s(er)f(is)g(stored)h(in)f
-(a)h(program)g(v)-5 b(ariable,)29 b(then)e(its)i(v)-5
-b(alue)28 b(m)m(ust)f(b)s(e)g(formatted)i(to)f(generate)0
-5580 y(a)43 b(suitable)h(attribute)f(name)g(b)s(efore)g(using)f(this)h
-(to)h(access)g(the)f(attribute)h(itself.)79 b(F)-8 b(or)43
-b(example,)k(the)0 5693 y(follo)m(wing)32 b(will)f(prin)m(t)f(out)g
-(the)h(Lab)s(el)f(v)-5 b(alue)31 b(for)f(eac)m(h)i(axis)e(of)h(a)g(F)-8
-b(rame:)p eop end
-%%Page: 61 71
-TeXDict begin 61 70 bop 0 52 a Fz(7.5)92 b(F)-8 b(rame)31
-b(A)m(ttributes)2794 b FG(61)262 351 y Ft(CHARACTER)39
-b(*)44 b(\()f(10)f(\))i(AXIS)262 451 y(INTEGER)c(IAXIS)262
-650 y(...)262 849 y(DO)i(1)h(IAXIS)f(=)h(1,)g(AST_GETI\()d(FRAME,)h
-('Naxes',)f(STATUS)h(\))392 949 y(WRITE)h(\()h(AXIS,)e('\()i(I10)g(\)')
-f(\))i(IAXIS)392 1049 y(LABEL)e(=)h(AST_GETC\()d(FRAME,)h('Label\(')f
-(//)j(AXIS)f(//)h('\)',)f(STATUS)f(\))392 1148 y(WRITE)h(\()h(*,)g(199)
-f(\))h(IAXIS,)e(LABEL)44 1248 y(199)216 b(FORMAT)41 b(\()j('Label)d(',)
-h(I2,)h(':)g(',)f(A)h(\))44 1348 y(1)174 b(CONTINUE)0
-1642 y FG(Note)32 b(the)e(use)g(of)h(the)f(Naxes)i(attribute)f(to)g
-(determine)f(the)h(n)m(um)m(b)s(er)e(of)h(F)-8 b(rame)32
-b(axes.)0 1815 y(The)e(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)
-m(e)h(the)e(follo)m(wing:)227 2109 y Fy(Label)94 b(1:)48
-b(Axis)e(1)227 2222 y(Label)94 b(2:)48 b(Axis)e(2)0 2516
-y FG(In)25 b(this)h(case,)i(the)e(F)-8 b(rame's)26 b(default)g(axis)h
-(Lab)s(els)e(ha)m(v)m(e)i(b)s(een)e(rev)m(ealed)i(as)f(rather)g
-(un-exciting.)40 b(Normally)-8 b(,)0 2629 y(y)m(ou)22
-b(w)m(ould)f(set)g(m)m(uc)m(h)h(more)f(useful)g(v)-5
-b(alues,)23 b(t)m(ypically)g(when)e(y)m(ou)g(create)i(the)f(F)-8
-b(rame|p)s(erhaps)20 b(something)0 2742 y(lik)m(e:)262
-3023 y Ft(FRAME)41 b(=)i(AST_FRAME\()d(2,)i('Label\(1\)=Offset)37
-b(from)42 b(centre)f(of)i(field,')e(//)1220 3123 y('Unit\(1\))g(=mm,')g
-(//)1220 3222 y('Label\(2\)=Transmi)o(ssi)o(on)c(coefficient,')h(//)
-1220 3322 y('Unit\(2\))j(=\045',)h(STATUS)f(\))0 3616
-y FG(Here,)28 b(w)m(e)e(ha)m(v)m(e)h(also)g(set)f(the)g(\(c)m(haracter)
-i(string\))e(Unit)g(attribute)h(for)f(eac)m(h)h(axis)f(to)h(describ)s
-(e)e(the)h(ph)m(ysical)0 3729 y(units)31 b(represen)m(ted)g(on)h(that)g
-(axis.)44 b(All)32 b(the)g(attribute)g(assignmen)m(ts)g(ha)m(v)m(e)h(b)
-s(een)e(com)m(bined)g(in)m(to)i(a)f(single)0 3842 y(string,)f
-(separated)f(b)m(y)h(commas.)0 4171 y Fw(7.5)112 b(F)-9
-b(rame)39 b(A)m(ttributes)0 4408 y FG(W)-8 b(e)37 b(will)g(no)m(w)f
-(brie\015y)g(outline)g(the)h(v)-5 b(arious)36 b(attributes)h(asso)s
-(ciated)h(with)d(a)i(F)-8 b(rame)37 b(\(this)g(is,)h(of)e(course,)0
-4521 y(in)e(addition)g(to)h(those)g(inherited)f(from)f(the)i(Mapping)f
-(class\).)53 b(W)-8 b(e)35 b(will)g(not)f(delv)m(e)h(to)s(o)g(deeply)f
-(in)m(to)h(the)0 4634 y(details)22 b(of)g(eac)m(h)g(attribute,)i(for)d
-(whic)m(h)g(y)m(ou)h(should)e(consult)i(the)f(appropriate)h
-(description)f(in)g(App)s(endix)f(C.)0 4747 y(Instead,)30
-b(w)m(e)h(aim)g(simply)f(to)h(sk)m(etc)m(h)h(the)e(range)h(of)g
-(facilities)h(a)m(v)-5 b(ailable:)227 5041 y FE(Naxes)427
-5154 y FG(A)31 b(read-only)g(in)m(teger)g(giving)g(the)g(n)m(um)m(b)s
-(er)e(of)i(F)-8 b(rame)31 b(axes.)227 5310 y FE(Title)427
-5423 y FG(A)g(string)f(describing)g(the)h(co)s(ordinate)g(system)f
-(whic)m(h)h(the)f(F)-8 b(rame)31 b(represen)m(ts.)227
-5580 y FE(Lab)s(el\(axis\))427 5693 y FG(A)g(lab)s(el)f(string)h(for)f
-(eac)m(h)h(axis.)p eop end
-%%Page: 62 72
-TeXDict begin 62 71 bop 0 52 a FG(62)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y FE(Unit\(axis\))427 464 y FG(A)g(string)g(describing)g(the)g(ph)m
-(ysical)h(units)e(on)h(eac)m(h)h(axis.)41 b(Y)-8 b(ou)29
-b(can)g(c)m(ho)s(ose)h(whether)e(to)427 577 y(mak)m(e)33
-b(this)e(attribute)h(\\activ)m(e")j(or)c(\\passiv)m(e")i(\(using)e(AST)
-p Fy(_)p FG(SET)-8 b(A)m(CTIVEUNIT)30 b(\).)i(If)427
-690 y(activ)m(e,)j(its)c(v)-5 b(alue)32 b(will)g(b)s(e)f(tak)m(en)i(in)
-m(to)f(accoun)m(t)h(when)d(\014nding)g(the)i(Mapping)g(b)s(et)m(w)m
-(een)427 803 y(t)m(w)m(o)40 b(F)-8 b(rames)40 b(\()p
-Fx(e.g.)65 b FG(a)39 b(scaling)h(of)f(0.001)i(w)m(ould)d(b)s(e)g(used)g
-(to)i(connect)f(t)m(w)m(o)h(axis)f(with)427 916 y(units)30
-b(of)h(\\km")h(and)e(\\m"\).)42 b(If)31 b(passiv)m(e,)g(its)g(v)-5
-b(alue)32 b(is)e(ignored.)42 b(Its)31 b(use)f(is)h(describ)s(ed)e(in)
-427 1029 y(more)i(detail)g(in)f Fu(x)p FG(7.14.)227 1160
-y FE(Sym)m(b)s(ol\(axis\))427 1273 y FG(A)j(string)f(con)m(taining)i(a)
-f(\\short)f(form")h(sym)m(b)s(ol)f(\()p Fx(e.g.)g FG(lik)m(e)h(\\X")h
-(or)e(\\Y"\))i(used)d(to)i(rep-)427 1386 y(resen)m(t)e(the)g(quan)m
-(tit)m(y)g(plotted)h(on)e(eac)m(h)h(axis.)227 1517 y
-FE(Digits/Digits\(axis\))427 1630 y FG(The)g(preferred)f(n)m(um)m(b)s
-(er)h(of)g(digits)h(of)g(precision)f(to)i(b)s(e)d(used)h(when)g
-(formatting)h(v)-5 b(alues)427 1743 y(for)30 b(displa)m(y)h(on)f(eac)m
-(h)i(axis.)227 1875 y FE(F)-9 b(ormat\(axis\))427 1987
-y FG(A)45 b(string)g(con)m(taining)h(a)g Fx(format)h(sp)-5
-b(e)g(ci\014er)46 b FG(whic)m(h)f(determines)f(exactly)j(ho)m(w)e(v)-5
-b(alues)427 2100 y(should)40 b(b)s(e)h(formatted)g(for)g(displa)m(y)g
-(on)g(eac)m(h)h(axis)g(\()p Fu(x)p FG(7.6\).)75 b(If)40
-b(this)h(attribute)h(is)f(un-)427 2213 y(set,)f(the)d(formatting)i(is)e
-(based)g(on)g(the)g(Digits)i(v)-5 b(alue,)40 b(otherwise)d(the)h(F)-8
-b(ormat)38 b(string)427 2326 y(o)m(v)m(er-rides)32 b(the)e(Digits)i(v)
--5 b(alue.)227 2458 y FE(Direction\(axis\))427 2570 y
-FG(A)35 b(b)s(o)s(olean)g(\(in)m(teger\))i(v)-5 b(alue)36
-b(whic)m(h)e(indicates)i(in)f(whic)m(h)f(direction)i(eac)m(h)g(axis)f
-(should)427 2683 y(b)s(e)27 b(plotted.)40 b(If)27 b(it)h(is)f(non-zero)
-h(\(the)g(default\),)h(the)e(axis)h(should)e(b)s(e)h(plotted)h(in)f
-(the)h(con-)427 2796 y(v)m(en)m(tional)34 b(direction|)p
-Fx(i.e.)e FG(increasing)g(to)h(the)e(righ)m(t)i(for)e(the)h(abscissa)g
-(and)g(increasing)427 2909 y(up)m(w)m(ards)37 b(for)g(the)g(ordinate.)
-62 b(If)37 b(it)h(is)g(zero,)i(the)d(axis)h(should)e(b)s(e)h(plotted)h
-(in)f(rev)m(erse.)427 3022 y(This)d(attribute)h(is)f(pro)m(vided)h(as)f
-(a)h(hin)m(t)f(only)h(and)f(programs)g(are)h(free)f(to)h(ignore)g(it)g
-(if)427 3135 y(they)c(wish.)227 3266 y FE(Domain)427
-3379 y FG(A)37 b(c)m(haracter)i(string)d(whic)m(h)h(iden)m(ti\014es)g
-(the)g Fx(physic)-5 b(al)41 b(domain)d FG(to)g(whic)m(h)e(the)h(F)-8
-b(rame's)427 3492 y(co)s(ordinate)31 b(system)g(applies.)41
-b(The)30 b(primary)f(purp)s(ose)f(of)j(this)f(attribute)h(is)g(to)g
-(prev)m(en)m(t)427 3605 y(un)m(w)m(an)m(ted)24 b(con)m(v)m(ersions)h
-(from)e(o)s(ccurring)g(b)s(et)m(w)m(een)i(co)s(ordinate)f(systems)g
-(whic)m(h)f(are)h(not)427 3718 y(related.)42 b(Its)30
-b(use)g(is)h(describ)s(ed)e(in)h(more)h(detail)g(in)f
-Fu(x)p FG(7.12.)227 3849 y FE(System)427 3962 y FG(A)37
-b(c)m(haracter)h(string)f(whic)m(h)f(iden)m(ti\014es)h(the)g(sp)s
-(eci\014c)f(co)s(ordinate)h(system)g(used)f(to)h(de-)427
-4075 y(scrib)s(e)f(p)s(ositions)h(within)f(the)h(ph)m(ysical)g(domain)f
-(represen)m(ted)h(b)m(y)f(the)h(F)-8 b(rame.)60 b(F)-8
-b(or)38 b(a)427 4188 y(simple)21 b(F)-8 b(rame,)23 b(this)e(attribute)g
-(curren)m(tly)g(has)f(a)h(\014xed)f(v)-5 b(alue)21 b(of)f
-(\\Cartesian",)k(but)c(could)427 4301 y(in)30 b(principle)f(b)s(e)h
-(extended)g(to)g(include)g(options)g(suc)m(h)g(as)g(\\P)m(olar",)i
-(\\Cylindrical",)f Fx(etc)p FG(.)427 4414 y(More)26 b(sp)s(ecialised)f
-(F)-8 b(rames)25 b(suc)m(h)f(as)h(the)g(SkyF)-8 b(rame,)26
-b(TimeF)-8 b(rame)26 b(and)e(Sp)s(ecF)-8 b(rame,)26 b(re-)427
-4527 y(de\014ne)j(the)g(allo)m(w)m(ed)i(v)-5 b(alues)29
-b(to)h(b)s(e)e(appropriate)i(to)f(the)h(domain)f(whic)m(h)f(they)i
-(describ)s(e.)427 4640 y(F)-8 b(or)35 b(instance,)i(the)d(SkyF)-8
-b(rame)35 b(allo)m(ws)h(v)-5 b(alues)35 b(suc)m(h)f(as)h(\\FK4")g(and)f
-(\\Galactic",)40 b(and)427 4753 y(the)31 b(Sp)s(ecF)-8
-b(rame)30 b(allo)m(ws)i(v)-5 b(alues)31 b(suc)m(h)f(as)h(\\frequency")f
-(and)g(\\w)m(a)m(v)m(elength".)227 4884 y FE(Ep)s(o)s(c)m(h)427
-4997 y FG(This)d(v)-5 b(alue)28 b(is)g(used)e(to)j(qualify)e(a)h(co)s
-(ordinate)h(system)e(b)m(y)h(giving)g(the)g(momen)m(t)g(in)f(time)427
-5110 y(when)i(the)i(co)s(ordinates)g(are)f(correct.)42
-b(Usually)-8 b(,)31 b(this)g(will)f(b)s(e)g(the)g(date)h(of)f(observ)-5
-b(ation.)427 5223 y(The)37 b(Ep)s(o)s(c)m(h)f(v)-5 b(alue)37
-b(is)g(imp)s(ortan)m(t)g(in)g(cases)g(where)g(co)s(ordinates)g(systems)
-g(mo)m(v)m(e)h(with)427 5336 y(resp)s(ect)f(to)g(eac)m(h)g(other)g(o)m
-(v)m(er)g(time.)60 b(An)36 b(example)h(of)f(t)m(w)m(o)i(suc)m(h)e(co)s
-(ordinate)h(systems)427 5449 y(are)31 b(the)g(FK4)f(and)g(FK5)h
-(celestial)i(co)s(ordinate)e(systems.)227 5580 y FE(ObsLon)427
-5693 y FG(Sp)s(eci\014es)40 b(the)g(longitude)h(of)g(the)f(observ)m(er)
-h(\(assumed)f(to)h(b)s(e)f(on)g(the)g(surface)h(of)f(the)p
-eop end
-%%Page: 63 73
-TeXDict begin 63 72 bop 0 52 a Fz(7.6)92 b(F)-8 b(ormatting)32
-b(Axis)f(V)-8 b(alues)2541 b FG(63)427 351 y(earth\).)77
-b(The)41 b(basic)i(F)-8 b(rame)43 b(class)g(do)s(es)e(not)i(use)e(this)
-h(v)-5 b(alue,)46 b(but)41 b(sp)s(ecialised)i(sub-)427
-464 y(classes)32 b(ma)m(y)-8 b(.)45 b(F)-8 b(or)32 b(instance,)g(the)f
-(Sp)s(ecF)-8 b(rame)32 b(class)g(uses)e(it)i(to)g(calculate)i(the)d
-(relativ)m(e)427 577 y(v)m(elo)s(cit)m(y)26 b(of)e(the)f(observ)m(er)h
-(and)f(the)g(cen)m(tre)i(of)f(the)f(earth)h(for)f(use)g(in)g(con)m(v)m
-(erting)j(b)s(et)m(w)m(een)427 690 y(standards)k(of)g(rest.)227
-835 y FE(ObsLat)427 948 y FG(Sp)s(eci\014es)g(the)h(latitude)g(of)f
-(the)h(observ)m(er.)41 b(Use)31 b(in)f(conjunction)g(with)g(ObsLon.)0
-1205 y(There)i(are)h(also)g(some)g(further)f(F)-8 b(rame)33
-b(attributes,)h(not)f(describ)s(ed)e(ab)s(o)m(v)m(e,)k(whic)m(h)d(are)h
-(imp)s(ortan)m(t)f(when)0 1318 y(F)-8 b(rames)37 b(are)g(used)e(as)i
-(templates)h(to)f(searc)m(h)g(for)f(other)g(F)-8 b(rames.)60
-b(Their)35 b(use)h(go)s(es)h(b)s(ey)m(ond)f(the)g(presen)m(t)0
-1431 y(discussion.)0 1723 y Fw(7.6)112 b(F)-9 b(ormatting)38
-b(Axis)g(V)-9 b(alues)0 1943 y FG(The)23 b(co)s(ordinate)h(v)-5
-b(alues)24 b(asso)s(ciated)h(with)e(eac)m(h)i(axis)f(of)g(a)g(F)-8
-b(rame)24 b(are)g(stored)g(\()p Fx(e.g.)f FG(within)g(y)m(our)g
-(program\))0 2056 y(as)33 b(double)g(precision)g(v)-5
-b(alues.)50 b(The)32 b(F)-8 b(rame)34 b(class)g(therefore)g(pro)m
-(vides)f(a)h(function,)f(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T,)34 b(to)0 2169 y(con)m(v)m(ert)e(these)f(v)-5 b(alues)30
-b(in)m(to)i(formatted)f(strings)f(for)g(displa)m(y:)262
-2413 y Ft(CHARACTER)39 b(*)44 b(\()f(50)f(\))i(STRING)262
-2513 y(DOUBLE)d(PRECISION)e(VALUE)262 2712 y(...)262
-2911 y(STRING)i(=)i(AST_FORMAT\()c(FRAME,)i(IAXIS,)g(VALUE,)g(STATUS)g
-(\))0 3169 y FG(Here,)33 b(the)e(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)32 b(c)m(haracter)h(function)e(is)h(passed)f(a)h(F)-8
-b(rame)33 b(p)s(oin)m(ter,)f(the)g(n)m(um)m(b)s(er)e(of)i(an)f(axis)0
-3282 y(\(IAXIS\))21 b(and)f(a)h(double)f(precision)h(v)-5
-b(alue)21 b(to)h(format)f(\(V)-10 b(ALUE\).)22 b(It)e(returns)g(a)h(c)m
-(haracter)h(string)f(con)m(taining)0 3395 y(the)31 b(formatted)g(v)-5
-b(alue.)0 3556 y(By)45 b(default,)j(the)d(formatting)h(applied)e(will)h
-(b)s(e)f(determined)g(b)m(y)g(the)h(F)-8 b(rame's)46
-b(Digits)g(attribute)f(and)0 3669 y(will)30 b(normally)g(displa)m(y)g
-(results)f(with)h(sev)m(en)g(digits)g(of)g(precision)g(\(corresp)s
-(onding)f(appro)m(ximately)i(to)f(the)0 3782 y(F)-8 b(ortran)33
-b(REAL)f(data)h(t)m(yp)s(e)f(on)g(man)m(y)g(mac)m(hines\).)48
-b(Setting)32 b(a)h(di\013eren)m(t)g(Digits)g(v)-5 b(alue,)34
-b(ho)m(w)m(ev)m(er,)g(allo)m(ws)0 3895 y(y)m(ou)40 b(to)g(adjust)e(the)
-i(precision)f(as)g(necessary)h(to)g(suit)f(the)g(accuracy)i(of)e(the)h
-(co)s(ordinate)g(data)g(y)m(ou)f(are)0 4008 y(pro)s(cessing.)i(If)30
-b(\014ner)g(con)m(trol)i(is)f(needed,)f(it)i(is)e(also)i(p)s(ossible)e
-(to)h(set)h(a)f(Digits)h(v)-5 b(alue)31 b(for)f(eac)m(h)i(individual)0
-4121 y(axis)j(b)m(y)g(app)s(ending)e(an)h(axis)h(n)m(um)m(b)s(er)f(to)h
-(the)g(attribute)g(name)g(\()p Fx(e.g.)f FG(\\Digits\(2\)"\).)58
-b(If)34 b(this)g(is)h(done,)h(it)0 4234 y(o)m(v)m(er-rides)c(the)e
-(e\013ect)i(of)f(the)f(F)-8 b(rame's)32 b(main)e(Digits)i(v)-5
-b(alue)31 b(for)f(that)h(axis.)0 4395 y(Ev)m(en)40 b(\014ner)e(con)m
-(trol)j(is)f(p)s(ossible)f(b)m(y)h(setting)h(the)e(\(c)m(haracter)j
-(string\))e(F)-8 b(ormat)41 b(attribute)f(for)g(a)g(F)-8
-b(rame)0 4508 y(axis.)65 b(The)38 b(string)g(giv)m(en)h(should)f(con)m
-(tain)h(a)g Fx(format)i(sp)-5 b(e)g(ci\014er)40 b FG(whic)m(h)e
-(explicitly)i(determines)e(ho)m(w)g(the)0 4621 y(v)-5
-b(alues)36 b(on)g(that)h(axis)f(should)f(b)s(e)h(formatted.)58
-b(This)35 b(will)i(o)m(v)m(er-ride)g(the)f(e\013ects)i(of)e(an)m(y)g
-(Digits)i(v)-5 b(alue)3679 4588 y Fv(11)3754 4621 y FG(.)0
-4734 y(Unfortunately)36 b(for)f(F)-8 b(ortran)36 b(programmers,)g(this)
-f(m)m(ust)h(b)s(e)e(a)i(C)f(language)i(format)f(sp)s(eci\014er,)3411
-4701 y Fv(12)3522 4734 y FG(so)f(y)m(ou)0 4847 y(migh)m(t)c(\014nd)e
-(the)h(Digits)i(approac)m(h)f(preferable.)0 5008 y(The)d(simplest)g(t)m
-(yp)s(e)g(of)h(format)f(sp)s(eci\014er)g(tak)m(es)h(the)g(form)e
-(\\\045m.nG",)i(where)f(\\m")h(and)e(\\n")i(are)f(in)m(tegers)0
-5121 y(giving)d(the)g(minim)m(um)e(\014eld)h(width)g(in)g(c)m
-(haracters)i(and)e(the)g(n)m(um)m(b)s(er)f(of)i(signi\014can)m(t)g
-(digits)g(to)g(displa)m(y)g(\()p Fx(e.g.)0 5234 y FG(\\\04510.5G"\).)31
-b(The)d("n")g(v)-5 b(alue)28 b(ma)m(y)h(b)s(e)e(replaced)i(b)m(y)e(an)h
-(asterisk,)i(in)d(whic)m(h)h(case)h(the)f(v)-5 b(alue)29
-b(of)f(the)g(Digits)0 5347 y(attribute)42 b(is)e(used)g(to)i(determine)
-f(the)g(n)m(um)m(b)s(er)f(of)h(signi\014can)m(t)g(digits)h(to)f(displa)
-m(y)-8 b(.)73 b(Other)41 b(formatting)p 0 5425 1512 4
-v 73 5479 a Fs(11)138 5510 y Fr(The)25 b(exception)g(to)g(this)g(rule)g
-(is)h(that)e(if)i(the)e(F)-6 b(ormat)26 b(v)l(alue)e(includes)h(a)g
-(precision)h(of)g(\\)p Fo(:)p Fn(\003)p Fr(",)h(then)d(Digits)i(will)g
-(b)r(e)f(used)f(to)0 5602 y(determine)i(the)f(actual)h(precision)h
-(used.)73 5661 y Fs(12)138 5693 y Fr(This)g(is)f(a)g(consequence)f(of)i
-(implemen)n(ting)f(the)f(AST)g(library)h(in)g(C.)p eop
-end
-%%Page: 64 74
-TeXDict begin 64 73 bop 0 52 a FG(64)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(options)38 b(are)h(also)g(p)s(ossible)f(and)f(if)h(y)m(ou)h(need)f
-(to)g(use)g(them)g(y)m(ou)h(ma)m(y)f(wish)g(to)h(consult)f(a)g(b)s(o)s
-(ok)g(on)g(C)0 464 y(\(see)28 b(the)f(\\prin)m(tf)7 b(")27
-b(function\),)h(remem)m(b)s(ering)f(that)g(y)m(ou)g(w)m(an)m(t)h(to)g
-(format)f(a)g(double)g(precision)g(\(C)g(double\))0 577
-y(v)-5 b(alue.)0 736 y(It)40 b(is)g(recommended)f(that)h(y)m(ou)g(use)g
-(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)40 b(whenev)m(er)f(y)m(ou)h(displa)m
-(y)g(formatted)h(co)s(ordinate)0 849 y(v)-5 b(alues,)50
-b(ev)m(en)c(although)f(y)m(ou)h(could)f(format)h(them)f(y)m(ourself)h
-(using)f(a)h(WRITE)e(statemen)m(t.)88 b(This)44 b(is)0
-961 y(b)s(ecause)34 b(it)g(puts)f(the)h(F)-8 b(rame)35
-b(in)e(con)m(trol)i(of)f(formatting.)52 b(When)34 b(y)m(ou)g(start)g
-(to)h(handle)e(more)h(elab)s(orate)0 1074 y(F)-8 b(rames)40
-b(\(represen)m(ting,)j(sa)m(y)-8 b(,)44 b(celestial)e(co)s
-(ordinates\),)h(y)m(ou)d(will)g(need)f(di\013eren)m(t)h(formatting)h
-(metho)s(ds.)0 1187 y(This)30 b(approac)m(h)g(deliv)m(ers)h(them)g
-(without)f(an)m(y)h(c)m(hange)g(to)g(y)m(our)g(soft)m(w)m(are.)0
-1346 y(Y)-8 b(ou)35 b(should)e(also)j(consider)e(regularly)h(using)e
-(the)i(AST)p Fy(_)p FG(NORM)e(routine,)j(describ)s(ed)d(b)s(elo)m(w)i
-(\()p Fu(x)p FG(7.7\),)j(for)0 1459 y(an)m(y)31 b(v)-5
-b(alues)30 b(that)h(will)g(b)s(e)f(made)g(visible)h(to)g(the)g(user)e
-(of)i(y)m(our)f(soft)m(w)m(are.)0 1746 y Fw(7.7)112 b(Normalising)39
-b(F)-9 b(rame)38 b(Co)s(ordinates)0 1963 y FG(The)f(routine)g(AST)p
-Fy(_)p FG(NORM)f(is)h(pro)m(vided)g(to)g(cop)s(e)h(with)e(the)i(fact)g
-(that)f(some)h(co)s(ordinate)g(systems)f(do)0 2076 y(not)31
-b(extend)g(inde\014nitely)f(in)g(all)i(directions.)42
-b(Some)31 b(ma)m(y)g(ha)m(v)m(e)h(b)s(oundaries,)d(outside)i(whic)m(h)g
-(co)s(ordinates)0 2189 y(are)j(meaningless,)i(while)e(others)f(wrap)g
-(around)g(on)h(themselv)m(es,)i(so)e(that)g(after)h(a)f(certain)h
-(distance)f(y)m(ou)0 2302 y(return)25 b(to)j(the)e(b)s(eginning)g
-(again)h(\(co)s(ordinate)h(systems)e(based)g(on)h(circles)g(and)f
-(spheres,)h(for)f(instance\).)40 b(A)0 2415 y(basic)29
-b(F)-8 b(rame)30 b(has)e(no)h(suc)m(h)f(complications,)j(but)d(other)h
-(more)g(sp)s(ecialised)h(F)-8 b(rames)29 b(\(suc)m(h)g(as)g(SkyF)-8
-b(rames,)0 2528 y(represen)m(ting)31 b(the)f(celestial)j(sphere|)p
-Fu(x)p FG(8\))e(do.)0 2686 y(The)f(role)i(pla)m(y)m(ed)g(b)m(y)f(AST)p
-Fy(_)p FG(NORM)f(is)h(to)g Fx(normalise)i FG(an)m(y)e(arbitrary)g(set)g
-(of)g(co)s(ordinates)h(b)m(y)f(con)m(v)m(erting)0 2799
-y(them)41 b(in)m(to)i(a)f(set)g(whic)m(h)f(is)h(\\within)f(b)s(ounds",)
-i(in)m(terpreted)f(according)g(to)h(the)e(particular)h(F)-8
-b(rame)43 b(in)0 2912 y(question.)i(F)-8 b(or)32 b(example,)h(on)f(the)
-g(celestial)i(sphere,)d(a)h(righ)m(t)g(ascension)h(v)-5
-b(alue)32 b(of)g(24)g(hours)f(or)g(more)h(can)0 3025
-y(ha)m(v)m(e)e(a)g(suitable)f(m)m(ultiple)h(of)f(24)h(hours)e
-(subtracted)h(without)g(a\013ecting)i(its)f(meaning)f(and)f(AST)p
-Fy(_)p FG(NORM)0 3138 y(w)m(ould)k(p)s(erform)e(this)i(task.)46
-b(Similarly)-8 b(,)34 b(negativ)m(e)g(v)-5 b(alues)32
-b(of)g(righ)m(t)h(ascension)f(w)m(ould)g(ha)m(v)m(e)h(a)g(m)m(ultiple)f
-(of)0 3251 y(24)26 b(hours)f(added,)h(so)f(that)h(the)g(result)f(lies)i
-(in)e(the)g(range)h(zero)g(to)h(24)f(hours.)38 b(The)25
-b(co)s(ordinates)h(in)f(question)0 3364 y(are)31 b(mo)s(di\014ed)e(in)h
-(place)h(b)m(y)g(AST)p Fy(_)p FG(NORM,)e(as)i(follo)m(ws:)262
-3596 y Ft(DOUBLE)41 b(PRECISION)e(POINT\()j(2)h(\))262
-3795 y(...)262 3994 y(CALL)e(AST_NORM\()f(FRAME,)h(POINT,)h(STATUS)f
-(\))0 4240 y FG(If)31 b(the)h(co)s(ordinates)g(supplied)e(are)i
-(initially)h(OK,)e(as)g(they)h(w)m(ould)f(alw)m(a)m(ys)i(b)s(e)e(with)g
-(a)h(basic)g(F)-8 b(rame,)33 b(then)0 4353 y(they)e(are)f(returned)g
-(unc)m(hanged.)0 4511 y(Because)39 b(the)g(main)e(purp)s(ose)g(of)h
-(AST)p Fy(_)p FG(NORM)f(is)h(to)h(con)m(v)m(ert)g(co)s(ordinates)g(in)m
-(to)g(the)f(preferred)f(range)0 4624 y(for)j(h)m(uman)g(consumption,)j
-(its)e(use)g(is)g(almost)g(alw)m(a)m(ys)i(appropriate)d(immediately)i
-(b)s(efore)f(formatting)0 4737 y(co)s(ordinate)33 b(v)-5
-b(alues)32 b(for)g(displa)m(y)h(using)e(AST)p Fy(_)p
-FG(F)m(ORMA)-8 b(T)33 b(\()p Fu(x)p FG(7.6\).)48 b(Ev)m(en)32
-b(if)g(the)h(F)-8 b(rame)33 b(in)e(question)i(do)s(es)0
-4850 y(not)d(restrict)g(the)g(range)g(of)f(co)s(ordinates,)i(so)f(that)
-g(AST)p Fy(_)p FG(NORM)e(do)s(es)h(nothing,)h(using)f(it)h(will)g(allo)
-m(w)h(y)m(ou)0 4963 y(to)j(pro)s(cess)e(other)h(more)g(sp)s(ecialised)g
-(F)-8 b(rames,)35 b(where)d(normalisation)i(is)f(imp)s(ortan)m(t,)h
-(without)f(c)m(hanging)0 5076 y(y)m(our)d(soft)m(w)m(are.)0
-5363 y Fw(7.8)112 b(Reading)39 b(F)-9 b(ormatted)37 b(Axis)h(V)-9
-b(alues)0 5580 y FG(The)41 b(pro)s(cess)h(of)g(con)m(v)m(erting)i(a)e
-(formatted)g(co)s(ordinate)h(v)-5 b(alue)42 b(for)g(a)g(F)-8
-b(rame)43 b(axis,)j(suc)m(h)41 b(as)h(migh)m(t)h(b)s(e)0
-5693 y(pro)s(duced)35 b(b)m(y)i(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)37 b(\()p Fu(x)p FG(7.6\),)k(bac)m(k)d(in)m(to)g(a)f(n)m(umerical)h
-(\(double)f(precision\))g(v)-5 b(alue)38 b(ready)f(for)p
-eop end
-%%Page: 65 75
-TeXDict begin 65 74 bop 0 52 a Fz(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FG(65)0
-351 y(pro)s(cessing)25 b(is)g(p)s(erformed)f(b)m(y)h(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T.)25 b(Ho)m(w)m(ev)m(er,)k(although)c(this)g
-(pro)s(cess)g(is)g(essen)m(tially)i(the)0 464 y(in)m(v)m(erse)k(of)g
-(that)g(p)s(erformed)d(b)m(y)j(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T,)30 b(there)h(are)g(a)f(n)m(um)m(b)s(er)f(of)i(additional)g
-(di\016culties)g(that)0 577 y(m)m(ust)f(b)s(e)g(addressed)f(in)h
-(practice.)0 749 y(The)c(main)h(use)f(for)g(AST)p Fy(_)p
-FG(UNF)m(ORMA)-8 b(T)27 b(is)g(in)f(reading)h(formatted)g(co)s
-(ordinate)h(v)-5 b(alues)27 b(whic)m(h)f(ha)m(v)m(e)i(b)s(een)0
-861 y(en)m(tered)34 b(b)m(y)f(the)h(user)f(of)g(a)h(program,)g(or)g
-(read)f(from)g(a)h(\014le.)49 b(As)34 b(suc)m(h,)g(w)m(e)g(can)f
-(rarely)h(assume)f(that)h(the)0 974 y(v)-5 b(alues)23
-b(are)f(neatly)h(formatted)g(in)f(the)h(w)m(a)m(y)g(that)g(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)22 b(w)m(ould)g(pro)s(duce.)37
-b(Instead,)24 b(it)e(is)h(usually)0 1087 y(desirable)29
-b(to)h(allo)m(w)h(considerable)f(\015exibilit)m(y)g(in)f(the)h(form)f
-(of)g(input)f(that)i(can)g(b)s(e)f(accommo)s(dated,)i(so)e(as)0
-1200 y(to)i(p)s(ermit)e(\\free-format")i(data)g(input)e(b)m(y)g(the)h
-(user.)40 b(In)29 b(addition,)i(w)m(e)f(ma)m(y)h(need)e(to)i(extract)g
-(individual)0 1313 y(co)s(ordinate)g(v)-5 b(alues)31
-b(em)m(b)s(edded)e(in)h(other)h(textual)h(data.)0 1485
-y(Underlying)e(these)g(requiremen)m(ts)h(is)f(the)g(ro)s(ot)h
-(di\016cult)m(y)f(that)h(the)g(textual)g(format)g(used)e(to)i(represen)
-m(t)f(a)0 1598 y(co)s(ordinate)g(v)-5 b(alue)29 b(will)g(dep)s(end)f
-(on)g(the)i(class)f(of)g(F)-8 b(rame)30 b(w)m(e)g(are)f(considering.)40
-b(F)-8 b(or)30 b(example,)g(for)f(a)g(basic)0 1710 y(F)-8
-b(rame,)29 b(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)28 b(ma)m(y)g(ha)m(v)m
-(e)h(to)f(read)g(a)g(v)-5 b(alue)28 b(lik)m(e)g(\\1.25E-6",)k(whereas)
-27 b(a)h(more)g(sp)s(ecialised)0 1823 y(F)-8 b(rame)37
-b(represen)m(ting)f(celestial)j(co)s(ordinates)e(ma)m(y)f(ha)m(v)m(e)i
-(to)e(handle)g(a)g(v)-5 b(alue)37 b(lik)m(e)g(\\-07d)g(49m)g(13s".)59
-b(Of)0 1936 y(course,)31 b(the)f(format)h(migh)m(t)g(also)g(dep)s(end)e
-(on)h(whic)m(h)h(axis)f(is)h(b)s(eing)f(considered.)0
-2108 y(Ideally)-8 b(,)47 b(w)m(e)42 b(w)m(ould)g(lik)m(e)i(to)f(write)f
-(soft)m(w)m(are)i(that)f(can)f(handle)g(an)m(y)h(kind)e(of)i(F)-8
-b(rame.)77 b(Ho)m(w)m(ev)m(er,)48 b(this)0 2221 y(mak)m(es)39
-b(it)f(a)g(little)i(more)e(di\016cult)f(to)i(analyse)f(textual)h(input)
-e(data)i(to)f(extract)h(individual)f(co)s(ordinate)0
-2334 y(v)-5 b(alues,)29 b(since)g(w)m(e)g(cannot)g(mak)m(e)g
-(assumptions)e(ab)s(out)h(ho)m(w)h(the)f(v)-5 b(alues)29
-b(are)f(formatted.)41 b(It)29 b(w)m(ould)f(not)g(b)s(e)0
-2446 y(safe,)39 b(for)d(example,)j(simply)c(to)j(assume)e(that)h(the)f
-(v)-5 b(alues)37 b(b)s(eing)f(read)g(are)h(separated)g(b)m(y)f(white)h
-(space.)0 2559 y(This)h(is)i(not)f(just)g(b)s(ecause)g(they)h(migh)m(t)
-g(b)s(e)e(separated)i(b)m(y)f(some)h(other)f(c)m(haracter,)44
-b(but)38 b(also)i(b)s(ecause)0 2672 y(celestial)c(co)s(ordinate)e(v)-5
-b(alues)34 b(migh)m(t)g(themselv)m(es)h(con)m(tain)g(spaces.)51
-b(In)32 b(fact,)k(to)e(b)s(e)f(completely)i(safe,)g(w)m(e)0
-2785 y(cannot)i(mak)m(e)h(an)m(y)f(assumptions)g(ab)s(out)f(ho)m(w)h(a)
-g(formatted)h(co)s(ordinate)f(v)-5 b(alue)38 b(is)f(separated)g(from)f
-(the)0 2898 y(surrounding)28 b(text,)k(except)f(that)g(it)g(should)e(b)
-s(e)h(separated)h(in)f(some)h(w)m(a)m(y)g(whic)m(h)f(is)h(not)f(am)m
-(biguous.)0 3070 y(This)22 b(is)i(the)f(v)m(ery)g(basic)h(assumption)e
-(up)s(on)g(whic)m(h)h(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)23
-b(w)m(orks.)39 b(It)23 b(is)g(in)m(v)m(ok)m(ed)i(as)e(follo)m(ws:)262
-3345 y Ft(INTEGER)40 b(N)262 3544 y(...)262 3743 y(N)j(=)g
-(AST_UNFORMAT\()38 b(FRAME,)j(IAXIS,)g(STRING,)g(VALUE,)g(STATUS)g(\))0
-4032 y FG(It)36 b(is)h(supplied)e(with)h(a)h(F)-8 b(rame)37
-b(p)s(oin)m(ter)f(\(FRAME\),)i(the)f(n)m(um)m(b)s(er)e(of)h(an)g(axis)h
-(\(IAXIS\))f(and)g(a)h(c)m(harac-)0 4145 y(ter)e(string)g(to)g(b)s(e)f
-(read)h(\(STRING\).)g(If)f(it)i(succeeds)f(in)f(reading)h(a)g(v)-5
-b(alue,)37 b(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)35 b(returns)0
-4258 y(the)h(resulting)g(co)s(ordinate)h Fx(via)f FG(its)g(p)s(en)m
-(ultimate)g(argumen)m(t)h(\(V)-10 b(ALUE\).)36 b(The)g(returned)e
-(function)i(v)-5 b(alue)0 4371 y(indicates)31 b(ho)m(w)g(man)m(y)f(c)m
-(haracters)i(w)m(ere)f(read)f(from)g(the)h(string)f(in)g(order)g(to)h
-(obtain)g(this)f(result.)0 4542 y(The)g(string)g(is)h(read)f(as)h
-(follo)m(ws:)111 4831 y(1.)46 b(An)m(y)31 b(white)f(space)h(at)g(the)g
-(start)g(is)f(skipp)s(ed)f(o)m(v)m(er.)111 5036 y(2.)46
-b(F)-8 b(urther)22 b(c)m(haracters)i(are)e(considered,)i(one)f(at)f(a)h
-(time,)i(un)m(til)d(the)g(next)h(c)m(haracter)h(no)e(longer)g(matc)m
-(hes)227 5149 y(an)m(y)35 b(of)g(the)f(acceptable)j(forms)d(of)g(input)
-g(\(giv)m(en)h(the)g(c)m(haracters)h(that)f(precede)g(it\).)53
-b(The)34 b(longest)227 5262 y(sequence)d(of)g(c)m(haracters)g(whic)m(h)
-g(matc)m(hes)g(is)f(then)h(considered)f(\\read".)111
-5467 y(3.)46 b(If)29 b(a)g(suitable)h(sequence)f(of)g(c)m(haracters)i
-(w)m(as)e(read)g(successfully)-8 b(,)30 b(it)g(is)f(con)m(v)m(erted)h
-(in)m(to)g(a)g(co)s(ordinate)227 5580 y(v)-5 b(alue)29
-b(whic)m(h)e(is)h(returned.)38 b(An)m(y)28 b(white)g(space)g(follo)m
-(wing)i(this)d(sequence)i(is)e(then)h(skipp)s(ed)e(o)m(v)m(er)j(and)227
-5693 y(the)i(total)h(n)m(um)m(b)s(er)d(of)i(c)m(haracters)g(consumed)f
-(is)h(returned)e(as)h(the)h(function)f(v)-5 b(alue.)p
-eop end
-%%Page: 66 76
-TeXDict begin 66 75 bop 0 52 a FG(66)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))111 351
-y FG(4.)46 b(If)38 b(the)g(sequence)g(of)g(c)m(haracters)h(read)f(is)g
-(empt)m(y)-8 b(,)41 b(or)d(insu\016cien)m(t)g(to)h(de\014ne)e(a)h(co)s
-(ordinate)h(v)-5 b(alue,)227 464 y(then)38 b(the)g(string)f(do)s(es)h
-(not)g(con)m(tain)h(a)f(v)-5 b(alue)38 b(to)h(read.)63
-b(In)37 b(this)g(case,)k(the)d(read)g(is)g(ab)s(orted)f(and)227
-577 y(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)31 b(returns)e(a)i(function)f
-(v)-5 b(alue)31 b(of)f(zero)i(and)d(no)i(co)s(ordinate)g(v)-5
-b(alue.)41 b(Ho)m(w)m(ev)m(er,)33 b(it)227 690 y(returns)c(without)i
-(error.)0 923 y(Note)43 b(that)f(failing)h(to)f(read)g(a)g(co)s
-(ordinate)g(v)-5 b(alue)42 b(do)s(es)g(not)g(constitute)h(an)e(error,)k
-(at)d(least)h(so)f(far)f(as)0 1036 y(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)41 b(is)g(concerned.)73 b(Ho)m(w)m(ev)m(er,)45 b(an)c(error)g(can)g
-(o)s(ccur)g(if)g(the)g(sequence)g(of)g(c)m(haracters)0
-1148 y(read)36 b(app)s(ears)g(to)h(ha)m(v)m(e)g(the)f(correct)i(form)e
-(but)f(cannot)i(b)s(e)f(con)m(v)m(erted)h(in)m(to)g(a)g(v)-5
-b(alid)37 b(co)s(ordinate)g(v)-5 b(alue.)0 1261 y(T)m(ypically)d(,)31
-b(this)e(will)h(b)s(e)e(b)s(ecause)h(it)h(violates)h(some)e(constrain)m
-(t,)i(suc)m(h)e(as)g(a)h(limit)g(on)f(the)g(v)-5 b(alue)30
-b(of)f(one)g(of)0 1374 y(its)i(\014elds.)40 b(The)30
-b(resulting)g(error)g(message)i(will)f(giv)m(e)g(details.)0
-1530 y(F)-8 b(or)22 b(an)m(y)f(giv)m(en)h(F)-8 b(rame)22
-b(axis,)h(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)21 b(do)s(es)g(not)g
-(necessarily)h(alw)m(a)m(ys)g(use)f(the)g(same)g(algorithm)0
-1643 y(for)29 b(con)m(v)m(erting)j(the)e(sequence)g(of)f(c)m(haracters)
-i(it)g(reads)e(in)m(to)i(a)f(co)s(ordinate)g(v)-5 b(alue.)41
-b(This)29 b(is)g(b)s(ecause)h(some)0 1755 y(forms)44
-b(of)g(input)f(\(particularly)i(free-format)g(input\))f(can)g(b)s(e)g
-(am)m(biguous)g(and)g(migh)m(t)h(b)s(e)e(in)m(terpreted)0
-1868 y(in)d(sev)m(eral)i(w)m(a)m(ys)g(dep)s(ending)d(on)i(the)g(con)m
-(text.)73 b(F)-8 b(or)42 b(example,)i(the)d(celestial)i(longitude)f
-(\\12:34:56.7")0 1981 y(could)h(represen)m(t)g(an)g(angle)g(in)g
-(degrees)g(or)g(a)g(righ)m(t)h(ascension)f(in)g(hours.)77
-b(T)-8 b(o)43 b(decide)g(whic)m(h)g(to)h(use,)0 2094
-y(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)44 b(ma)m(y)g(examine)g(the)g(F)-8
-b(rame's)44 b(attributes)g(and,)i(in)e(particular,)j(the)c(appropriate)
-0 2207 y(F)-8 b(ormat\(axis\))30 b(string)d(whic)m(h)g(is)g(used)f(b)m
-(y)h(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)27 b(when)g(formatting)h(co)s
-(ordinate)g(v)-5 b(alues)27 b(\()p Fu(x)p FG(7.6\).)0
-2320 y(This)39 b(is)h(done)g(in)g(order)f(that)i(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)40 b(and)g(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)40 b(should)f(complemen)m(t)i(eac)m(h)0 2433 y(other|so)26
-b(that)g(formatting)g(a)f(v)-5 b(alue)26 b(and)f(then)g(un-formatting)g
-(it)h(will)f(yield)h(the)f(original)i(v)-5 b(alue,)27
-b(sub)5 b(ject)0 2546 y(to)31 b(an)m(y)g(rounding)e(error.)0
-2701 y(T)-8 b(o)31 b(giv)m(e)h(a)f(simple)f(\(but)g(crucially)i
-(incomplete!\))42 b(example,)32 b(consider)e(reading)h(a)g(v)-5
-b(alue)31 b(for)f(the)g(axis)h(of)g(a)0 2814 y(basic)g(F)-8
-b(rame,)31 b(as)g(follo)m(ws:)262 3033 y Ft(N)43 b(=)g(AST_UNFORMAT\()
-38 b(FRAME,)j(IAXIS,)g(')i(1.5E6)129 b(-99.0',)41 b(VALUE,)g(STATUS)g
-(\))0 3266 y FG(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)28
-b(will)g(skip)g(o)m(v)m(er)h(the)f(initial)h(space)f(in)g(the)g(string)
-g(supplied)e(and)h(then)h(examine)g(eac)m(h)0 3379 y(successiv)m(e)36
-b(c)m(haracter.)55 b(It)35 b(will)g(accept)h(the)f(sequence)g(\\1.5E6")
-i(as)e(input,)g(but)f(reject)i(the)e(space)i(whic)m(h)0
-3492 y(follo)m(ws)k(b)s(ecause)f(it)g(do)s(es)g(not)g(form)f(part)h(of)
-g(the)g(format)g(of)g(a)g(\015oating)h(p)s(oin)m(t)f(n)m(um)m(b)s(er.)
-65 b(It)39 b(will)g(then)0 3605 y(con)m(v)m(ert)i(the)e(c)m(haracters)i
-(\\1.5E6")g(in)m(to)f(a)g(co)s(ordinate)g(v)-5 b(alue)40
-b(and)e(skip)h(o)m(v)m(er)h(the)g(three)f(spaces)h(whic)m(h)0
-3718 y(follo)m(w)j(them.)75 b(The)41 b(returned)f(function)i(v)-5
-b(alue)42 b(will)g(therefore)g(b)s(e)f(9,)k(equal)d(to)h(the)e(total)j
-(n)m(um)m(b)s(er)c(of)0 3831 y(c)m(haracters)33 b(consumed.)45
-b(This)31 b(result)h(ma)m(y)h(b)s(e)e(used)g(to)i(address)e(the)h
-(string)g(during)f(a)h(subsequen)m(t)f(read,)0 3943 y(so)g(as)f(to)h
-(commence)h(reading)e(at)h(the)g(start)g(of)f(\\-99.0".)0
-4099 y(Most)43 b(imp)s(ortan)m(tly)-8 b(,)46 b(ho)m(w)m(ev)m(er,)h
-(note)c(that)g(if)f(the)g(user)g(of)g(a)h(program)f(mistak)m(enly)h(en)
-m(ters)g(the)f(string)0 4212 y(\\)32 b(1.5R6.)16 b(.)g(.)f(")43
-b(instead)32 b(of)f(\\)h(1.5E6.)17 b(.)e(.)g(",)32 b(a)g(co)s(ordinate)
-g(v)-5 b(alue)31 b(of)h(1.5)g(and)e(a)i(function)f(result)g(of)g(4)h
-(will)f(b)s(e)0 4325 y(returned,)26 b(b)s(ecause)g(the)h(\\R")f(w)m
-(ould)g(prematurely)g(terminate)h(the)g(attempt)g(to)g(read)f(the)g(v)
--5 b(alue.)40 b(Because)0 4438 y(this)30 b(sort)g(of)g(mistak)m(e)h(do)
-s(es)e(not)h(automatically)j(result)d(in)f(an)h(error)f(but)g(can)h
-(pro)s(duce)f(incorrect)h(results,)0 4550 y(it)c(is)g
-FE(vital)f FG(to)i(c)m(hec)m(k)g(the)f(returned)e(function)i(v)-5
-b(alue)26 b(to)h(ensure)d(that)j(the)f(exp)s(ected)g(n)m(um)m(b)s(er)e
-(of)i(c)m(haracters)0 4663 y(ha)m(v)m(e)i(b)s(een)f(read.)40
-b(F)-8 b(or)28 b(example,)g(if)g(the)f(string)g(is)h(exp)s(ected)f(to)h
-(con)m(tain)h(exactly)g(one)e(v)-5 b(alue,)29 b(and)d(nothing)0
-4776 y(else,)31 b(then)g(the)f(follo)m(wing)i(w)m(ould)e(su\016ce:)262
-4996 y Ft(N)43 b(=)g(AST_UNFORMAT\()38 b(FRAME,)j(IAXIS,)g(STRING,)g
-(VALUE,)g(STATUS)g(\))262 5095 y(IF)h(\()h(STATUS)f(.EQ.)f(0)j(\))f
-(THEN)392 5195 y(IF)g(\()g(N)g(.LT.)f(LEN\()g(STRING)f(\))j(\))f(THEN)
-523 5295 y(<error)e(in)i(input)e(data>)392 5394 y(ELSE)523
-5494 y(<value)g(read)h(correctly>)392 5593 y(END)h(IF)262
-5693 y(END)f(IF)p eop end
-%%Page: 67 77
-TeXDict begin 67 76 bop 0 52 a Fz(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FG(67)0
-351 y(If)27 b(AST)p Fy(_)p FG(UNF)m(ORMA)-8 b(T)28 b(do)s(es)g(not)f
-(detect)i(an)f(error)f(itself,)j(w)m(e)e(c)m(hec)m(k)h(that)f(it)g(has)
-g(read)f(to)i(the)e(end)g(of)h(the)0 464 y(string.)41
-b(If)30 b(this)g(rev)m(eals)i(an)e(error,)g(the)h(v)-5
-b(alue)31 b(of)f(N)h(indicates)g(where)f(it)h(o)s(ccurred.)0
-632 y(Another)22 b(common)g(requiremen)m(t)g(is)g(to)g(obtain)h(a)f(p)s
-(osition)g(b)m(y)g(reading)g(a)g(list)g(of)g(co)s(ordinates)h(from)e(a)
-h(string)0 745 y(whic)m(h)30 b(con)m(tains)i(one)f(v)-5
-b(alue)32 b(for)e(eac)m(h)i(axis)f(of)g(a)g(F)-8 b(rame.)43
-b(W)-8 b(e)32 b(assume)e(that)i(the)e(v)-5 b(alues)31
-b(are)h(separated)f(in)0 858 y(some)26 b(unam)m(biguous)f(manner,)i(p)s
-(erhaps)d(using)h(white)h(space)h(and/or)e(some)i(unsp)s(eci\014ed)d
-(single-c)m(haracter)0 971 y(separator.)49 b(The)33 b(c)m(hoice)i(of)e
-(separator)h(is)f(up)f(to)i(the)f(data)h(supplier,)f(who)f(m)m(ust)h(c)
-m(ho)s(ose)h(it)g(so)f(as)g(not)h(to)0 1084 y(con\015ict)c(with)g(the)g
-(format)g(of)g(the)f(co)s(ordinate)i(v)-5 b(alues,)30
-b(but)f(our)h(soft)m(w)m(are)h(do)s(es)e(not)h(need)f(to)i(kno)m(w)f
-(what)0 1197 y(it)h(is.)41 b(The)30 b(follo)m(wing)h(is)g(a)g(template)
-g(algorithm)h(for)e(reading)g(data)h(in)f(this)h(form:)262
-1461 y Ft(INTEGER)40 b(I)262 1561 y(DOUBLE)h(PRECISION)e(VALUES\()i(10)
-i(\))262 1760 y(...)0 1959 y(*)87 b(Initialise)39 b(the)k(string)e
-(index.)262 2059 y(I)i(=)g(1)0 2258 y(*)87 b(Obtain)41
-b(the)h(number)f(of)i(Frame)f(axes)g(and)g(loop)g(through)e(them.)262
-2358 y(DO)i(1)h(IAXIS)f(=)h(1,)g(AST_GETI\()d(FRAME,)h('Naxes',)f
-(STATUS)h(\))0 2557 y(*)87 b(Attempt)40 b(to)j(read)f(a)h(value)f(for)g
-(this)g(axis.)392 2657 y(N)h(=)h(AST_UNFORMAT\()38 b(FRAME,)j(IAXIS,)g
-(STRING\()g(I)i(:)g(\),)218 2756 y(:)915 b(VALUES\()41
-b(IAXIS)g(\),)i(STATUS)e(\))0 2956 y(*)87 b(If)43 b(nothing)d(was)j
-(read)e(and)i(this)f(is)h(not)f(the)g(first)g(axis)g(and)g(the)g(end)h
-(of)0 3055 y(*)87 b(the)42 b(string)f(has)i(not)f(been)g(reached,)e
-(try)i(stepping)f(over)h(a)h(separator)d(and)0 3155 y(*)87
-b(reading)40 b(again.)392 3255 y(IF)j(\()g(\()g(N)h(.EQ.)d(0)j(\))f
-(.AND.)e(\()j(IAXIS)d(.GT.)h(1)h(\))g(.AND.)218 3354
-y(:)348 b(\()43 b(I)h(.LT.)d(LEN\()h(STRING)g(\))h(\))g(\))g(THEN)523
-3454 y(I)g(=)g(I)h(+)f(1)523 3553 y(N)g(=)g(AST_UNFORMAT\()c(FRAME,)i
-(IAXIS,)g(STRING\()f(I)k(:)f(\),)218 3653 y(:)1046 b(VALUES\()40
-b(IAXIS)i(\),)h(STATUS)e(\))392 3753 y(END)i(IF)0 3952
-y(*)87 b(Quit)42 b(if)g(nothing)f(was)h(read,)g(otherwise)e(move)i(on)h
-(to)f(the)h(next)f(value.)392 4052 y(IF)h(\()g(N)g(.EQ.)f(0)h(\))h(GO)e
-(TO)h(2)392 4151 y(I)g(=)h(I)f(+)g(N)44 4251 y(1)174
-b(CONTINUE)44 4350 y(2)g(CONTINUE)0 4550 y(*)87 b(Check)41
-b(for)i(possible)d(errors.)262 4649 y(IF)i(\()h(STATUS)f(.EQ.)f(0)j(\))
-f(THEN)392 4749 y(IF)g(\()g(\()g(I)h(.LT.)d(LEN\()h(STRING)g(\))h(\))g
-(.OR.)f(\()h(N)g(.EQ.)f(0)h(\))g(\))h(THEN)523 4849 y(<error)d(in)i
-(input)e(data>)392 4948 y(ELSE)523 5048 y(<values)g(read)h(correctly>)
-392 5147 y(END)h(IF)262 5247 y(END)f(IF)0 5525 y FG(In)30
-b(this)g(case,)i(the)e(v)-5 b(alue)31 b(of)g(I)f(will)g(indicate)i(the)
-e(lo)s(cation)i(of)f(an)m(y)g(input)e(error.)0 5693 y(Note)i(that)f
-(this)g(algorithm)g(is)g(insensitiv)m(e)h(to)f(the)g(precise)g(format)g
-(of)f(the)h(data)g(and)f(will)h(therefore)g(w)m(ork)p
-eop end
-%%Page: 68 78
-TeXDict begin 68 77 bop 0 52 a FG(68)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(with)35 b(an)m(y)h(class)g(of)g(F)-8 b(rame)36 b(and)f(an)m(y)g
-(reasonably)h(unam)m(biguous)f(input)f(data.)57 b(F)-8
-b(or)36 b(example,)h(here)f(is)f(a)0 464 y(range)c(of)f(suitable)h
-(input)f(data)h(for)f(a)h(3-dimensional)g(basic)g(F)-8
-b(rame:)227 703 y Ft(1)43 b(2.5)g(3)227 803 y(3.1,3.2,3.3)227
-903 y(1.5,)f(2.6,)g(-9.9e2)227 1002 y(-1.1+0.4-1.8)402
-1102 y(.1/.2/.3)271 1201 y(44.0)g(;)h(55.1)f(-14)0 1491
-y Fw(7.9)112 b(P)m(erm)m(uting)38 b(F)-9 b(rame)38 b(Axes)0
-1710 y FG(Once)29 b(a)g(F)-8 b(rame)30 b(has)f(b)s(een)f(created,)i(it)
-g(is)f(not)g(p)s(ossible)f(to)i(c)m(hange)g(the)f(n)m(um)m(b)s(er)f(of)
-h(axes)g(it)h(con)m(tains,)g(but)0 1823 y(it)k(is)g(p)s(ossible)g(to)h
-(c)m(hange)g(the)f(order)f(in)h(whic)m(h)f(these)i(axes)f(o)s(ccur.)51
-b(T)-8 b(o)35 b(do)f(so,)h(an)f(in)m(teger)h Fx(p)-5
-b(ermutation)0 1936 y(arr)g(ay)32 b FG(is)f(\014lled)f(with)g(the)h(n)m
-(um)m(b)s(ers)e(of)h(the)h(axes)g(so)f(as)h(to)g(sp)s(ecify)f(the)h
-(new)e(order,)i Fx(e.g:)262 2175 y Ft(INTEGER)40 b(PERM\()i(2)h(\))262
-2275 y(DATA)e(PERM)h(/)i(2,)e(1)h(/)0 2527 y FG(In)21
-b(this)g(case,)j(the)d(axes)h(of)g(a)f(2-dimensional)h(F)-8
-b(rame)23 b(could)e(b)s(e)g(in)m(terc)m(hanged)h(b)m(y)f(passing)g
-(this)g(p)s(erm)m(utation)0 2640 y(arra)m(y)45 b(to)f(the)h(AST)p
-Fy(_)p FG(PERMAXES)e(function.)81 b(That)44 b(is,)k(an)c(\()p
-Fp(x)2380 2654 y Fv(1)2420 2640 y Fp(;)15 b(x)2512 2654
-y Fv(2)2552 2640 y FG(\))44 b(co)s(ordinate)h(system)f(w)m(ould)g(b)s
-(e)0 2753 y(c)m(hanged)31 b(in)m(to)g(an)g(\()p Fp(x)749
-2767 y Fv(2)788 2753 y Fp(;)15 b(x)880 2767 y Fv(1)920
-2753 y FG(\))31 b(co)s(ordinate)g(system)g(b)m(y:)262
-2992 y Ft(CALL)41 b(AST_PERMAXES\()e(FRAME,)i(PERM,)g(STATUS)g(\))0
-3244 y FG(If)36 b(the)h(axes)g(are)g(p)s(erm)m(uted)e(more)i(than)f
-(once,)j(the)e(e\013ects)h(are)f(cum)m(ulativ)m(e.)60
-b(Y)-8 b(ou)37 b(are,)i(of)e(course,)h(not)0 3357 y(restricted)31
-b(to)g(F)-8 b(rames)31 b(with)f(only)h(t)m(w)m(o)h(axes.)0
-3647 y Fw(7.10)112 b(Selecting)38 b(F)-9 b(rame)38 b(Axes)0
-3866 y FG(An)31 b(alternativ)m(e)j(to)f(c)m(hanging)g(the)e(n)m(um)m(b)
-s(er)g(of)h(F)-8 b(rame)32 b(axes,)h(whic)m(h)f(is)f(not)h(allo)m(w)m
-(ed,)i(is)e(to)h(create)g(a)f(new)0 3979 y(F)-8 b(rame)34
-b(b)m(y)f(selecting)i(axes)f(from)e(an)h(existing)h(one.)50
-b(The)32 b(metho)s(d)h(of)g(doing)g(this)g(is)g(v)m(ery)h(similar)f(to)
-h(the)0 4091 y(w)m(a)m(y)25 b(AST)p Fy(_)p FG(PERMAXES)f(is)g(used)g
-(\()p Fu(x)p FG(7.9\),)k(in)c(that)h(w)m(e)g(supply)e(an)i(in)m(teger)h
-(arra)m(y)f(\014lled)f(with)g(the)h(n)m(um)m(b)s(ers)0
-4204 y(of)36 b(the)f(axes)i(w)m(e)e(w)m(an)m(t,)j(in)e(their)f(new)g
-(order.)56 b(In)35 b(this)g(case,)j(ho)m(w)m(ev)m(er,)h(the)c(n)m(um)m
-(b)s(er)f(of)i(arra)m(y)g(elemen)m(ts)0 4317 y(need)30
-b(not)h(equal)g(the)f(n)m(um)m(b)s(er)f(of)i(F)-8 b(rame)31
-b(axes.)0 4478 y(F)-8 b(or)26 b(example,)i(w)m(e)e(could)g(select)h
-(axes)f(3)g(and)f(2)h(\(in)g(that)g(order\))f(from)g(a)h(3-dimensional)
-h(F)-8 b(rame)26 b(as)g(follo)m(ws:)262 4717 y Ft(INTEGER)40
-b(FRAME1,)h(FRAME2,)g(MAPPING,)f(PICK\()h(2)j(\))262
-4816 y(DATA)d(PICK)h(/)i(3,)e(2)h(/)262 5016 y(...)262
-5215 y(FRAME2)e(=)i(AST_PICKAXES\()38 b(FRAME1,)j(2,)h(PICK,)g
-(MAPPING,)e(STATUS)h(\))0 5467 y FG(This)20 b(w)m(ould)h(return)e(a)i
-(p)s(oin)m(ter)g(to)h(a)f(2-dimensional)h(F)-8 b(rame)21
-b(\(FRAME2\))i(whic)m(h)d(con)m(tains)i(the)f(information)0
-5580 y(asso)s(ciated)34 b(with)e(axes)h(3)f(and)g(2,)i(in)e(that)h
-(order,)f(from)g(the)g(original)i(F)-8 b(rame)33 b(\(FRAME1\).)48
-b(The)32 b(original)0 5693 y(F)-8 b(rame)35 b(is)g(not)f(altered)i(b)m
-(y)e(this)g(pro)s(cess.)53 b(Bew)m(are,)37 b(ho)m(w)m(ev)m(er,)g(that)e
-(the)f(axis)h(information)g(ma)m(y)g(still)g(b)s(e)p
-eop end
-%%Page: 69 79
-TeXDict begin 69 78 bop 0 52 a Fz(7.11)93 b(Calculating)31
-b(Distances,)h(Angles)f(and)f(O\013sets)1774 b FG(69)0
-351 y(shared)29 b(b)m(y)h(b)s(oth)f(F)-8 b(rames,)31
-b(so)f(if)g(y)m(ou)g(wish)f(to)i(alter)g(either)f(of)g(them)g(indep)s
-(enden)m(tly)f(y)m(ou)h(ma)m(y)h(\014rst)e(need)0 464
-y(to)i(use)f(AST)p Fy(_)p FG(COPY)f(\()p Fu(x)p FG(4.12\))k(to)e(mak)m
-(e)g(an)g(indep)s(enden)m(t)e(cop)m(y)-8 b(.)0 634 y(In)38
-b(addition)h(to)g(the)g(new)g(F)-8 b(rame)39 b(p)s(oin)m(ter,)i(AST)p
-Fy(_)p FG(PICKAXES)c(will)i(also)h(return)d(a)j(p)s(oin)m(ter)e(to)i(a)
-f(new)0 747 y(Mapping)c Fx(via)f FG(its)h(fourth)f(argumen)m(t.)54
-b(This)34 b(Mapping)g(will)h(in)m(ter-relate)i(the)e(t)m(w)m(o)h(F)-8
-b(rames.)55 b(By)34 b(this)h(w)m(e)0 860 y(mean)22 b(that)h(its)f(forw)
-m(ard)g(transformation)h(will)f(con)m(v)m(ert)i(co)s(ordinates)f
-(originally)g(in)f(the)g(co)s(ordinate)h(system)0 973
-y(represen)m(ted)36 b(b)m(y)h(FRAME1)g(in)m(to)h(that)f(represen)m(ted)
-f(b)m(y)g(FRAME2,)k(while)c(its)h(in)m(v)m(erse)g(transformation)0
-1086 y(will)26 b(con)m(v)m(ert)g(in)f(the)h(opp)s(osite)f(direction.)40
-b(In)24 b(this)h(particular)h(case,)h(the)f(Mapping)f(w)m(ould)g(b)s(e)
-g(a)g(P)m(ermMap)0 1199 y(\()p Fu(x)p FG(5.10\))33 b(and)d(w)m(ould)g
-(implemen)m(t)h(the)f(follo)m(wing)i(transformations:)227
-1483 y Fy(Forward:)370 1595 y(\(1,)47 b(2,)h(3\))f(-->)g(\(3,)g(2\))370
-1708 y(\(2,)g(4,)h(6\))f(-->)g(\(6,)g(4\))370 1821 y(\(3,)g(6,)h(9\))f
-(-->)g(\(9,)g(6\))370 1934 y(\(4,)g(8,)h(12\))e(-->)h(\(12,)g(8\))370
-2047 y(\(5,)g(10,)g(15\))g(-->)g(\(15,)g(10\))227 2273
-y(Inverse:)370 2386 y(\(3,)g(2\))h(-->)e(\(<bad>,)g(2,)h(3\))370
-2499 y(\(6,)g(4\))h(-->)e(\(<bad>,)g(4,)h(6\))370 2612
-y(\(9,)g(6\))h(-->)e(\(<bad>,)g(6,)h(9\))370 2725 y(\(12,)g(8\))g(-->)g
-(\(<bad>,)f(8,)h(12\))370 2838 y(\(15,)g(10\))g(-->)g(\(<bad>,)f(10,)h
-(15\))0 3121 y FG(This)35 b(is)h(our)g(\014rst)f(in)m(tro)s(duction)h
-(to)h(the)f(idea)h(of)f(in)m(ter-relating)i(pairs)e(of)g(F)-8
-b(rames)37 b Fx(via)f FG(a)h(Mapping,)g(but)0 3234 y(this)30
-b(will)h(assume)f(a)h(cen)m(tral)h(role)f(later)g(on.)0
-3404 y(Note)42 b(that)f(when)f(using)g(AST)p Fy(_)p FG(PICKAXES,)f(it)i
-(is)g(also)g(p)s(ossible)g(to)g(request)g(more)g(axes)g(than)f(there)0
-3517 y(w)m(ere)f(in)f(the)h(original)g(F)-8 b(rame.)66
-b(This)38 b(will)h(in)m(v)m(olv)m(e)h(selecting)h(axes)e(from)f(the)g
-(original)i(F)-8 b(rame)40 b(that)f(do)0 3630 y(not)i(exist.)71
-b(T)-8 b(o)40 b(do)h(this,)h(the)f(corresp)s(onding)e(axis)i(n)m(um)m
-(b)s(er)e(\(in)h(the)h(PICK)e(arra)m(y\))i(should)e(b)s(e)h(set)h(to)0
-3743 y(zero)30 b(and)e(the)i(e\013ect)g(is)g(to)f(in)m(tro)s(duce)g(an)
-g(additional)i(new)d(axis)i(whic)m(h)f(is)g(not)g(deriv)m(ed)g(from)g
-(the)g(original)0 3856 y(F)-8 b(rame.)41 b(This)28 b(axis)h(will)h(ha)m
-(v)m(e)g(default)f(v)-5 b(alues)29 b(for)g(all)g(its)h(attributes.)40
-b(Y)-8 b(ou)30 b(will)f(need)f(to)i(do)f(this)f(b)s(ecause)0
-3969 y(AST)p Fy(_)p FG(PICKAXES)g(do)s(es)i(not)h(allo)m(w)h(y)m(ou)e
-(to)i(select)f(an)m(y)g(of)g(the)f(original)i(axes)f(more)f(than)g
-(once.)3475 3936 y Fv(13)0 4286 y Fw(7.11)112 b(Calculating)39
-b(Distances,)f(Angles)g(and)g(O\013sets)0 4518 y FG(Some)e(complemen)m
-(tary)g(routines)g(are)g(pro)m(vided)f(for)g(use)h(with)f(F)-8
-b(rames)36 b(to)h(allo)m(w)g(y)m(ou)e(to)i(p)s(erform)d(geo-)0
-4631 y(metric)d(op)s(erations)g(without)f(needing)h(to)g(kno)m(w)f(the)
-h(nature)f(of)h(the)f(co)s(ordinate)i(system)e(represen)m(ted)h(b)m(y)0
-4744 y(the)g(F)-8 b(rame.)0 4914 y(Routines)29 b(can)h(b)s(e)f(used)f
-(to)i(\014nd)e(the)h(distance)h(b)s(et)m(w)m(een)g(t)m(w)m(o)g(p)s(oin)
-m(ts,)g(and)e(to)i(o\013set)h(a)e(sp)s(eci\014ed)g(distance)0
-5027 y(along)k(a)f(line)h(joining)f(t)m(w)m(o)h(p)s(oin)m(ts,)f
-Fx(etc.)45 b FG(In)31 b(essence,)j(these)e(de\014ne)f(the)h(metric)h
-(of)f(the)g(co)s(ordinate)h(space)0 5140 y(whic)m(h)d(the)h(F)-8
-b(rame)31 b(represen)m(ts.)41 b(In)29 b(the)i(case)g(of)g(a)g(basic)f
-(F)-8 b(rame,)32 b(this)e(is)h(a)f(Cartesian)h(metric.)0
-5310 y(The)36 b(\014rst)f(of)i(these)g(routines,)h(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE,)35 b(returns)g(a)i(double)f(precision)h
-(distance)g(v)-5 b(alue)36 b(when)0 5423 y(supplied)29
-b(with)h(the)h(F)-8 b(rame)31 b(co)s(ordinates)g(of)g(t)m(w)m(o)g(p)s
-(oin)m(ts.)41 b(F)-8 b(or)31 b(example:)p 0 5516 1512
-4 v 73 5570 a Fs(13)138 5602 y Fr(It)i(will)i(probably)e(not)h(b)r(e)f
-(ob)n(vious)h(wh)n(y)f(this)g(restriction)i(is)f(necessary)-6
-b(,)36 b(but)c(consider)j(creating)f(a)g(F)-6 b(rame)34
-b(with)f(one)0 5693 y(longitude)26 b(axis)g(and)g(t)n(w)n(o)g(latitude)
-f(axes.)35 b(Whic)n(h)25 b(latitude)h(axis)h(should)e(b)r(e)h(asso)r
-(ciated)h(with)f(the)g(longitude)g(axis?)p eop end
-%%Page: 70 80
-TeXDict begin 70 79 bop 0 52 a FG(70)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))262 351
-y Ft(DOUBLE)41 b(PRECISION)e(DIST,)j(POINT1\()f(2)i(\),)g(POINT2\()d(2)
-j(\))262 451 y(DATA)e(POINT1)h(/)h(0D0,)f(0D0)g(/)262
-551 y(DATA)f(POINT2)h(/)h(1D0,)f(1D0)g(/)262 750 y(...)262
-949 y(DIST)f(=)j(AST_DISTANCE\()38 b(FRAME,)j(POINT1,)g(POINT2,)f
-(STATUS)h(\))0 1202 y FG(This)29 b(calculates)i(the)f(distance)g(b)s
-(et)m(w)m(een)g(the)g(origin)g(\(0,0\))h(and)e(a)h(p)s(oin)m(t)f(at)h
-(p)s(osition)g(\(1,1\).)42 b(In)29 b(this)g(case,)0 1315
-y(the)j(result,)h(as)f(y)m(ou)g(w)m(ould)g(exp)s(ect,)h(is)1400
-1250 y Fu(p)1476 1315 y FG(2.)46 b(Ho)m(w)m(ev)m(er,)34
-b(this)e(is)g(only)g(true)g(for)g(the)g(Cartesian)h(co)s(ordinate)0
-1428 y(system)26 b(whic)m(h)f(a)i(basic)f(F)-8 b(rame)26
-b(represen)m(ts.)40 b(In)25 b(general,)i(AST)p Fy(_)p
-FG(DIST)-8 b(ANCE)25 b(will)h(calculate)i(the)e(geo)s(desic)0
-1541 y(distance)35 b(b)s(et)m(w)m(een)f(the)g(t)m(w)m(o)h(p)s(oin)m
-(ts,)g(so)f(that)h(with)e(a)h(more)g(sp)s(ecialised)h(F)-8
-b(rame)35 b(\(suc)m(h)e(as)i(a)f(SkyF)-8 b(rame,)0 1654
-y(represen)m(ting)31 b(the)f(celestial)j(sphere\))d(a)h(great-circle)i
-(distance)e(migh)m(t)g(b)s(e)f(returned.)0 1814 y(The)39
-b(AST)p Fy(_)p FG(OFFSET)g(routine)h(is)g(really)h(the)f(in)m(v)m(erse)
-g(of)h(AST)p Fy(_)p FG(DIST)-8 b(ANCE.)39 b(Giv)m(en)h(t)m(w)m(o)i(p)s
-(oin)m(ts)d(in)h(a)0 1927 y(F)-8 b(rame,)40 b(it)d(calculates)i(the)f
-(co)s(ordinates)f(of)g(a)h(third)e(p)s(oin)m(t)h(whic)m(h)f(is)h
-(o\013set)h(a)g(sp)s(eci\014ed)e(distance)i(a)m(w)m(a)m(y)0
-2040 y(from)30 b(the)g(\014rst)g(p)s(oin)m(t)g(along)i(the)e(geo)s
-(desic)i(joining)f(it)f(to)i(the)e(second)h(one.)41 b(F)-8
-b(or)31 b(example:)262 2279 y Ft(DOUBLE)41 b(PRECISION)e(POINT1\()i(2)i
-(\),)g(POINT2\()e(2)i(\),)g(POINT3\()d(2)k(\))262 2379
-y(DATA)d(POINT1)h(/)h(0D0,)f(0D0)g(/)262 2479 y(DATA)f(POINT2)h(/)h
-(1D0,)f(1D0)g(/)262 2678 y(...)262 2877 y(CALL)f(AST_OFFSET\()e(FRAME,)
-j(POINT1,)e(POINT2,)h(0.5D0,)g(POINT3,)g(STATUS)g(\))0
-3130 y FG(This)28 b(w)m(ould)h(\014ll)g(the)h(POINT3)f(arra)m(y)g(with)
-g(the)g(co)s(ordinates)h(of)g(a)f(p)s(oin)m(t)g(whic)m(h)g(is)h
-(o\013set)g(0.5)g(units)f(a)m(w)m(a)m(y)0 3243 y(from)35
-b(the)h(origin)g(\(0,0\))i(in)e(the)f(direction)i(of)f(the)g(p)s
-(osition)g(\(1,1\).)58 b(Again,)39 b(this)c(is)h(a)g(simple)g(result)g
-(in)f(a)0 3356 y(Cartesian)j(F)-8 b(rame,)40 b(as)e(v)-5
-b(arying)38 b(the)f(o\013set)i(will)f(trace)g(out)g(a)g(straigh)m(t)g
-(line.)63 b(On)36 b(the)i(celestial)i(sphere,)0 3469
-y(ho)m(w)m(ev)m(er)32 b(\()p Fx(e.g.)e FG(using)g(a)g(SkyF)-8
-b(rame\),)32 b(it)f(w)m(ould)f(trace)h(out)g(a)g(great)g(circle.)0
-3629 y(The)d(routines)h(AST)p Fy(_)p FG(AXDIST)-8 b(ANCE)27
-b(and)h(AST)p Fy(_)p FG(AX)m(OFFSET)g(are)h(similar)g(to)h(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE)27 b(and)0 3742 y(AST)p Fy(_)p
-FG(OFFSET,)g(except)i(that)g(the)g(curv)m(es)f(whic)m(h)g(they)h(use)e
-(as)i(\\straigh)m(t)h(lines")f(are)g(not)f(geo)s(desics,)i(but)0
-3855 y(curv)m(es)25 b(parallel)i(to)f(a)f(sp)s(eci\014ed)g(axis)1284
-3822 y Fv(14)1359 3855 y FG(.)39 b(One)25 b(reason)h(for)f(using)f
-(these)i(routines)f(is)h(to)g(deal)f(with)g(the)h(cyclic)0
-3968 y(am)m(biguit)m(y)32 b(of)e(longitude)h(and)f(latitude)h(axes.)0
-4128 y(The)42 b(AST)p Fy(_)p FG(OFFSET2)f(routine)h(is)h(similar)f(to)h
-(AST)p Fy(_)p FG(OFFSET,)e(but)h(instead)g(of)h(using)f(the)g(geo)s
-(desic)0 4241 y(whic)m(h)31 b(passes)g(through)g(t)m(w)m(o)h(p)s
-(ositions,)g(it)g(uses)e(the)i(geo)s(desic)g(whic)m(h)f(passes)g(at)h
-(a)g(giv)m(en)g(p)s(osition)f(angle)0 4354 y(through)f(the)g(starting)h
-(p)s(osition.)0 4515 y(P)m(osition)40 b(angles)g(are)g(alw)m(a)m(ys)g
-(measured)f(from)f(the)h(p)s(ositiv)m(e)h(direction)g(of)f(the)g
-(second)g(F)-8 b(rame)40 b(axis)g(to)0 4627 y(the)g(required)f(line,)k
-(with)d(p)s(ositiv)m(e)h(angles)g(b)s(eing)e(in)h(the)g(same)g(sense)g
-(as)h(rotation)g(from)e(the)h(p)s(ositiv)m(e)0 4740 y(direction)g(of)f
-(the)h(second)f(axis)h(to)g(the)f(p)s(ositiv)m(e)h(direction)g(of)g
-(the)f(\014rst)f(F)-8 b(rame)41 b(axis.)67 b(This)39
-b(de\014nition)0 4853 y(applies)27 b(to)h(all)g(classes)g(of)f(F)-8
-b(rame,)29 b(including)e(SkyF)-8 b(rame.)40 b(The)27
-b(default)g(ordering)g(of)g(axes)h(in)f(a)g(SkyF)-8 b(rame)0
-4966 y(mak)m(es)35 b(the)f(second)g(axis)g(equiv)-5 b(alen)m(t)36
-b(to)e(north,)h(and)e(so)h(the)h(de\014nition)e(of)h(p)s(osition)g
-(angle)h(giv)m(en)g(ab)s(o)m(v)m(e)0 5079 y(corresp)s(onds)30
-b(to)h(the)h(normal)f(astronomical)h(usage,)g(\\from)f(north,)g
-(through)f(east".)44 b(Ho)m(w)m(ev)m(er,)34 b(it)d(should)0
-5192 y(b)s(e)j(remem)m(b)s(ered)g(that)i(it)f(is)g(p)s(ossible)f(to)i
-(p)s(erm)m(ute)e(the)h(axes)h(of)f(a)g(SkyF)-8 b(rame)35
-b(\(or)g(indeed)g(an)m(y)g(F)-8 b(rame\),)0 5305 y(so)32
-b(that)h(north)e(b)s(ecomes)h(axis)g(1.)46 b(In)31 b(this)h(case,)h(an)
-f(AST)f(\\p)s(osition)h(angle")i(w)m(ould)d(b)s(e)h(the)g(angle)g
-(\\from)0 5418 y(east,)c(through)d(north".)39 b(Alw)m(a)m(ys)27
-b(tak)m(e)g(the)f(axis)g(ordering)f(in)m(to)i(accoun)m(t)g(when)e
-(deriving)g(an)h(astronomical)0 5531 y(p)s(osition)k(angle)i(from)e(an)
-g(AST)g(p)s(osition)g(angle.)p 0 5607 1512 4 v 73 5661
-a Fs(14)138 5693 y Fr(F)-6 b(or)26 b(instance,)g(a)g(line)h(of)f
-(constan)n(t)g(Declination)g(is)g(not)g(a)g(geo)r(desic)p
-eop end
-%%Page: 71 81
-TeXDict begin 71 80 bop 0 52 a Fz(7.12)93 b(The)29 b(Domain)j(A)m
-(ttribute)2534 b FG(71)0 351 y(Within)35 b(a)f(Cartesian)h(co)s
-(ordinate)h(system,)f(the)g(p)s(osition)f(angle)i(of)e(a)h(geo)s(desic)
-h(\()p Fx(i.e.)e FG(a)h(straigh)m(t)g(line\))g(is)0 464
-y(constan)m(t)40 b(along)g(its)g(en)m(tire)f(length,)j(but)c(this)h(is)
-g(not)g(necessarily)h(true)f(of)g(other)g(co)s(ordinate)h(systems.)0
-577 y(Within)e(a)f(spherical)h(co)s(ordinate)g(system,)i(for)d
-(instance,)j(the)d(p)s(osition)h(angle)g(of)g(a)f(geo)s(desic)i(will)f
-(v)-5 b(ary)0 690 y(along)40 b(its)e(length)h(\(except)h(for)e(the)h
-(sp)s(ecial)g(cases)g(of)g(a)g(meridian)f(and)g(the)g(equator\).)66
-b(In)38 b(addition)h(to)0 803 y(returning)28 b(the)h(required)f
-(o\013set)i(p)s(osition,)f(the)g(AST)p Fy(_)p FG(OFFSET2)f(routine)h
-(returns)f(the)h(p)s(osition)f(angle)i(of)0 916 y(the)f(geo)s(desic)i
-(at)f(the)f(o\013set)i(p)s(osition.)40 b(This)28 b(is)i(useful)e(if)h
-(y)m(ou)h(w)m(an)m(t)g(to)g(trace)g(out)g(a)f(path)g(whic)m(h)g(in)m(v)
-m(olv)m(es)0 1029 y(turning)34 b(through)f(sp)s(eci\014ed)h(angles.)54
-b(F)-8 b(or)35 b(instance,)h(tracing)g(out)e(a)h(rectangle)h(in)e(whic)
-m(h)h(eac)m(h)g(side)g(is)f(a)0 1142 y(geo)s(desic)c(in)m(v)m(olv)m(es)
-h(turning)d(through)g(90)i(degrees)g(at)f(the)h(corners.)40
-b(T)-8 b(o)29 b(do)g(this,)g(use)g(AST)p Fy(_)p FG(OFFSET2)f(to)0
-1255 y(calculate)36 b(the)f(p)s(osition)f(of)g(eac)m(h)h(corner,)h(and)
-d(then)h(add)f(\(or)i(subtract\))f(90)h(degrees)g(from)e(the)h(p)s
-(osition)0 1367 y(angle)d(returned)f(b)m(y)g(AST)p Fy(_)p
-FG(OFFSET2.)0 1527 y(The)36 b(AST)p Fy(_)p FG(ANGLE)g(routine)h
-(calculates)i(the)e(angle)h(subtended)d(b)m(y)h(t)m(w)m(o)i(p)s(oin)m
-(ts,)h(at)e(a)g(third)f(p)s(oin)m(t.)60 b(If)0 1640 y(used)32
-b(with)g(a)h(2-dimensional)h(F)-8 b(rame)33 b(the)g(returned)f(angle)h
-(is)g(signed)g(to)g(indicate)h(the)f(sense)f(of)h(rotation)0
-1753 y(\(clo)s(c)m(kwise)j(or)e(an)m(ti-clo)s(c)m(kwise\))j(in)d
-(taking)h(the)f(\\shortest)h(route")f(from)g(the)g(\014rst)f(p)s(oin)m
-(t)h(to)h(the)f(second.)0 1866 y(If)29 b(the)h(F)-8 b(rame)31
-b(has)e(more)h(than)f(2)h(axes,)h(the)f(result)f(is)h(un-signed)f(and)g
-(is)h(alw)m(a)m(ys)h(in)e(the)h(range)g(zero)h(to)f Fp(\031)s
-FG(.)0 2026 y(The)22 b(AST)p Fy(_)p FG(AXANGLE)h(routine)g(is)f
-(similar)h(to)h(AST)p Fy(_)p FG(AXANGLE,)f(but)f(the)h(\\reference)g
-(direction",)j(from)0 2138 y(whic)m(h)k(angles)h(are)g(measured,)f(is)h
-(a)f(sp)s(eci\014ed)g(axis.)0 2298 y(The)22 b(AST)p Fy(_)p
-FG(RESOL)-10 b(VE)21 b(routine)i(resolv)m(es)h(a)f(giv)m(en)h
-(displacemen)m(t)g(within)e(a)h(F)-8 b(rame)24 b(in)m(to)g(t)m(w)m(o)g
-(comp)s(onen)m(ts,)0 2411 y(parallel)31 b(and)f(p)s(erp)s(endicular)f
-(to)i(a)f(giv)m(en)i(reference)f(direction.)0 2571 y(The)k(displacemen)
-m(t)h(is)g(sp)s(eci\014ed)e(b)m(y)i(t)m(w)m(o)g(p)s(ositions)g(within)f
-(the)g(F)-8 b(rame;)39 b(the)d(starting)g(and)f(ending)g(p)s(o-)0
-2684 y(sitions.)61 b(The)36 b(reference)h(direction)h(is)f(de\014ned)f
-(b)m(y)g(the)h(geo)s(desic)i(curv)m(e)e(passing)f(through)h(the)g
-(starting)0 2796 y(p)s(osition)23 b(and)f(a)g(third)g(sp)s(eci\014ed)g
-(p)s(osition.)38 b(The)22 b(lengths)h(of)g(the)f(t)m(w)m(o)i(comp)s
-(onen)m(ts)f(are)g(returned,)g(together)0 2909 y(with)30
-b(the)h(p)s(osition)f(on)g(the)h(reference)g(geo)s(desic)g(whic)m(h)f
-(is)h(closest)h(to)f(the)f(third)g(supplied)f(p)s(oin)m(t.)0
-3198 y Fw(7.12)112 b(The)38 b(Domain)h(A)m(ttribute)0
-3416 y FG(The)26 b(Domain)i(attribute)f(is)g(one)g(of)g(the)g(most)g
-(imp)s(ortan)m(t)g(prop)s(erties)f(of)h(a)g(F)-8 b(rame,)28
-b(although)g(the)e(concept)0 3529 y(it)j(expresses)e(can)i(sometimes)g
-(seem)f(a)g(little)i(subtle.)40 b(W)-8 b(e)29 b(will)f(in)m(tro)s(duce)
-g(it)h(here,)f(but)g(its)g(true)g(v)-5 b(alue)28 b(will)0
-3642 y(probably)i(not)g(b)s(ecome)h(apparen)m(t)g(un)m(til)f(later)i
-(\()p Fu(x)p FG(14.2\).)0 3802 y(T)-8 b(o)32 b(understand)e(the)h(need)
-h(for)f(the)g(Domain)i(attribute,)g(consider)e(using)g(di\013eren)m(t)h
-(F)-8 b(rames)32 b(to)g(represen)m(t)0 3915 y(the)f(follo)m(wing)g
-(di\013eren)m(t)g(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(a)g
-(CCD)h(image:)111 4165 y(1.)46 b(A)31 b(co)s(ordinate)g(system)f(based)
-h(on)f(pixel)g(n)m(um)m(b)s(ers.)111 4350 y(2.)46 b(P)m(ositions)32
-b(on)e(the)h(CCD)f(c)m(hip,)g(measured)g(in)g Fp(\026)p
-FG(m.)111 4534 y(3.)46 b(P)m(ositions)32 b(in)e(the)h(fo)s(cal)g(plane)
-f(of)h(the)f(telescop)s(e,)i(measured)e(in)g(mm.)111
-4719 y(4.)46 b(A)31 b(celestial)i(co)s(ordinate)e(system,)g(measured)e
-(in)i(radians.)0 4969 y(If)h(w)m(e)g(had)g(t)m(w)m(o)i(suc)m(h)d(CCD)h
-(images,)i(w)m(e)f(migh)m(t)g(legitimately)i(w)m(an)m(t)e(to)g(align)g
-(them)f(pixel-for-pixel)i(\()p Fx(i.e.)0 5082 y FG(using)41
-b(the)i(co)s(ordinate)f(system)h(based)e(on)h(pixel)g(n)m(um)m(b)s
-(ers\))f(in)h(order)f(to,)46 b(sa)m(y)-8 b(,)46 b(divide)c(b)m(y)g(a)g
-(\015at-\014eld)0 5195 y(exp)s(osure.)d(W)-8 b(e)31 b(migh)m(t)f
-(similarly)f(consider)g(aligning)h(them)g(using)e(an)m(y)i(of)f(the)g
-(other)h(co)s(ordinate)f(systems)0 5308 y(so)f(as)f(to)i(ac)m(hiev)m(e)
-h(di\013eren)m(t)e(results.)39 b(F)-8 b(or)28 b(example,)h(w)m(e)f
-(migh)m(t)h(consider)e(merging)h(separate)g(images)h(from)0
-5420 y(a)i(CCD)f(mosaic)h(b)m(y)g(using)e(fo)s(cal)j(plane)e(p)s
-(ositions.)0 5580 y(It)g(w)m(ould)f(ob)m(viously)h(not)g(b)s(e)f
-(legitimate,)k(ho)m(w)m(ev)m(er,)e(to)g(directly)f(compare)g(p)s
-(ositions)g(in)f(one)h(image)h(mea-)0 5693 y(sured)e(in)g(pixels)h
-(with)g(p)s(ositions)f(in)h(the)g(other)g(measured)f(in)h(mm,)f(nor)h
-(to)g(equate)h(c)m(hip)f(p)s(ositions)g(in)f Fp(\026)p
-FG(m)p eop end
-%%Page: 72 82
-TeXDict begin 72 81 bop 0 52 a FG(72)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(with)39 b(sky)f(co)s(ordinates)i(in)e(radians.)66
-b(If)38 b(w)m(e)i(w)m(an)m(ted)f(to)h(in)m(ter-compare)g(these)f(co)s
-(ordinates,)j(w)m(e)e(w)m(ould)0 464 y(need)26 b(to)h(do)f(it)h
-(indirectly)-8 b(,)28 b(using)e(other)h(information)f(based)g(on)h(the)
-f(exp)s(erimen)m(tal)h(set-up.)39 b(F)-8 b(or)28 b(instance,)0
-577 y(w)m(e)k(migh)m(t)h(need)f(to)g(kno)m(w)g(the)h(size)f(of)g(the)h
-(pixels)f(expressed)f(in)h(mm)f(and)g(the)i(orien)m(tation)h(of)e(the)g
-(CCD)0 690 y(c)m(hip)e(in)h(the)f(fo)s(cal)h(plane.)0
-846 y(Note)24 b(that)g(it)f(is)g(not)h(simply)e(the)h(di\013erence)h
-(in)e(ph)m(ysical)i(units)e(whic)m(h)h(prev)m(en)m(ts)g(certain)h(co)s
-(ordinates)g(from)0 959 y(b)s(eing)36 b(directly)i(in)m(ter-compared)f
-(\(b)s(ecause)g(the)g(appropriate)g(unit)f(scaling)i(factors)f(could)g
-(b)s(e)f(included)0 1072 y(without)28 b(an)m(y)g(additional)h
-(information\).)41 b(Neither)28 b(is)h(it)f(the)g(fact)h(that)g
-(di\013eren)m(t)f(co)s(ordinate)h(systems)f(are)0 1185
-y(in)36 b(use)g(\(b)s(ecause)g(w)m(e)h(could)f(legitimately)j(in)m
-(ter-compare)f(t)m(w)m(o)f(di\013eren)m(t)g(celestial)h(co)s(ordinate)f
-(systems)0 1298 y(without)e(an)m(y)g(extra)g(information\).)55
-b(Instead,)36 b(it)f(is)g(the)g(di\013eren)m(t)g(nature)g(of)g(the)g
-(co)s(ordinate)h(spaces)f(to)0 1411 y(whic)m(h)30 b(these)h(co)s
-(ordinate)g(systems)g(ha)m(v)m(e)g(b)s(een)f(applied.)0
-1567 y(W)-8 b(e)45 b(normally)f(express)g(this)f(b)m(y)h(sa)m(ying)h
-(that)f(the)g(co)s(ordinate)h(systems)f(apply)g(to)g(di\013eren)m(t)h
-Fx(physic)-5 b(al)0 1680 y(domains)p FG(.)87 b(Although)45
-b(w)m(e)h(ma)m(y)f(establish)h Fx(ad)h(ho)-5 b(c)46 b
-FG(relationships)g(b)s(et)m(w)m(een)f(co)s(ordinates)h(in)f(di\013eren)
-m(t)0 1793 y(ph)m(ysical)34 b(domains,)g(they)g(are)g(not)f(in)m
-(trinsically)i(related)f(to)g(eac)m(h)h(other)f(and)f(w)m(e)g(need)h
-(to)g(supply)e(extra)0 1906 y(information)f(b)s(efore)f(w)m(e)g(can)h
-(con)m(v)m(ert)h(co)s(ordinates)f(b)s(et)m(w)m(een)g(them.)0
-2062 y(In)22 b(AST,)g(the)g(role)h(of)g(the)g(\(c)m(haracter)h
-(string\))f(Domain)g(attribute)g(is)g(to)g(assign)f(F)-8
-b(rames)24 b(to)f(their)f(resp)s(ectiv)m(e)0 2175 y(ph)m(ysical)31
-b(domains.)40 b(The)30 b(w)m(a)m(y)i(it)f(op)s(erates)f(is)h(as)f
-(follo)m(ws:)136 2411 y Fu(\017)46 b FG(Co)s(ordinate)27
-b(systems)g(whic)m(h)g(apply)f(to)i(the)f(same)g(ph)m(ysical)h(domain)e
-(\()p Fx(i.e.)h FG(whose)g(F)-8 b(rames)27 b(ha)m(v)m(e)h(the)227
-2524 y(same)j(Domain)g(v)-5 b(alue\))31 b(can)g(b)s(e)f(directly)h(in)m
-(ter-compared.)227 2671 y(If)e(the)h(domain)f(has)g(sev)m(eral)h(co)s
-(ordinate)h(systems)e(asso)s(ciated)i(with)e(it)g(\()p
-Fx(e.g.)g FG(the)h(celestial)i(sphere\),)227 2784 y(then)h(a)h(co)s
-(ordinate)g(con)m(v)m(ersion)g(ma)m(y)g(b)s(e)e(in)m(v)m(olv)m(ed.)51
-b(Otherwise,)34 b(co)s(ordinate)g(v)-5 b(alues)33 b(ma)m(y)h(simply)227
-2897 y(b)s(e)c(equated.)136 3078 y Fu(\017)46 b FG(Co)s(ordinate)40
-b(systems)f(whic)m(h)h(apply)f(to)h(di\013eren)m(t)g(ph)m(ysical)g
-(domains)f(\()p Fx(i.e.)h FG(whose)f(F)-8 b(rames)40
-b(ha)m(v)m(e)227 3191 y(di\013eren)m(t)31 b(Domain)g(v)-5
-b(alues\))31 b(cannot)g(b)s(e)f(directly)h(in)m(ter-compared.)227
-3338 y(If)39 b(an)m(y)g(relationship)g(do)s(es)g(exist)g(b)s(et)m(w)m
-(een)h(suc)m(h)e(co)s(ordinate)i(systems|and)e(it)i(need)f(not|then)227
-3451 y(additional)j(information)g(m)m(ust)f(b)s(e)g(supplied)f(in)h
-(order)f(to)i(establish)g(the)f(relationship)h(b)s(et)m(w)m(een)227
-3563 y(them)36 b(in)g(an)m(y)h(particular)f(case.)60
-b(W)-8 b(e)37 b(will)g(see)f(later)i(\()p Fu(x)p FG(13\))g(ho)m(w)e(to)
-h(establish)f(suc)m(h)g(relationships)227 3676 y(b)s(et)m(w)m(een)31
-b(F)-8 b(rames)31 b(in)f(di\013eren)m(t)h(domains.)0
-3913 y(With)g(the)g(basic)g(F)-8 b(rames)32 b(w)m(e)f(are)g
-(considering)g(here,)g(eac)m(h)h(ph)m(ysical)g(domain)e(only)h(has)g(a)
-g(single)g(\(Carte-)0 4025 y(sian\))k(co)s(ordinate)g(system)g(asso)s
-(ciated)h(with)e(it,)i(so)f(that)g(if)f(t)m(w)m(o)i(suc)m(h)e(F)-8
-b(rames)35 b(ha)m(v)m(e)h(the)f(same)g(Domain)0 4138
-y(v)-5 b(alue,)36 b(their)f(co)s(ordinate)h(systems)e(will)h(b)s(e)f
-(iden)m(tical)j(and)d(ma)m(y)h(simply)f(b)s(e)g(equated.)54
-b(With)35 b(more)g(sp)s(e-)0 4251 y(cialised)30 b(F)-8
-b(rames,)31 b(ho)m(w)m(ev)m(er,)f(more)g(than)e(one)i(co)s(ordinate)f
-(system)g(ma)m(y)h(apply)f(to)g(eac)m(h)h(domain.)41
-b(In)28 b(suc)m(h)0 4364 y(cases,)k(a)e(co)s(ordinate)i(con)m(v)m
-(ersion)f(ma)m(y)g(need)f(to)h(b)s(e)f(p)s(erformed.)0
-4520 y(When)37 b(a)g(basic)h(F)-8 b(rame)38 b(is)f(created,)j(its)e
-(Domain)f(attribute)h(defaults)f(to)h(a)g(blank)e(string.)61
-b(This)37 b(means)0 4633 y(that)h(all)h(suc)m(h)e(F)-8
-b(rames)38 b(b)s(elong)g(to)g(the)g(same)g(\(n)m(ull\))g(domain)g(b)m
-(y)f(default)h(and)f(therefore)h(describ)s(e)f(the)0
-4746 y(same)d(unsp)s(eci\014ed)f(ph)m(ysical)i(co)s(ordinate)f(space.)
-53 b(In)33 b(order)h(to)h(assign)f(a)h(F)-8 b(rame)35
-b(to)f(a)h(di\013eren)m(t)f(domain,)0 4859 y(y)m(ou)h(simply)g(need)f
-(to)i(set)f(its)g(Domain)h(v)-5 b(alue.)54 b(This)34
-b(is)h(normally)g(most)g(con)m(v)m(enien)m(tly)j(done)c(when)g(it)h(is)
-0 4972 y(created,)d(as)e(follo)m(ws:)262 5195 y Ft(FRAME1)41
-b(=)i(AST_FRAME\()c(2,)k('Domain=CCD_CHIP)o(,')37 b(//)1264
-5295 y('Unit\(1\)=micron,)o(')h(//)1264 5394 y('Unit\(2\)=micron')o(,)g
-(STATUS)j(\))262 5494 y(FRAME2)g(=)i(AST_FRAME\()c(2,)k
-('Domain=FOCAL_PL)o(ANE)o(,')37 b(//)1264 5593 y('Unit\(1\)=mm,')h(//)
-1264 5693 y('Unit\(2\)=mm',)g(STATUS)j(\))p eop end
-%%Page: 73 83
-TeXDict begin 73 82 bop 0 52 a Fz(7.13)93 b(Con)m(v)m(en)m(tions)31
-b(for)f(Domain)h(Names)2175 b FG(73)0 351 y(Here,)44
-b(w)m(e)d(ha)m(v)m(e)h(created)g(t)m(w)m(o)g(F)-8 b(rames)41
-b(in)f(di\013eren)m(t)i(ph)m(ysical)f(domains.)71 b(Although)41
-b(their)g(co)s(ordinate)0 464 y(v)-5 b(alues)30 b(all)h(ha)m(v)m(e)h
-(units)d(of)h(length,)h(they)g(cannot)f(b)s(e)g(directly)h(in)m
-(ter-compared)g(\(b)s(ecause)f(their)g(axes)h(ma)m(y)0
-577 y(b)s(e)f(rotated)h(with)f(resp)s(ect)h(to)g(eac)m(h)g(other,)g
-(for)f(instance\).)0 736 y(All)j(Domain)h(v)-5 b(alues)33
-b(are)h(automatically)h(con)m(v)m(erted)g(to)e(upp)s(er)e(case)j(and)e
-(white)h(space)h(is)e(remo)m(v)m(ed,)j(but)0 849 y(there)h(are)g(no)g
-(other)g(restrictions)g(on)g(the)g(names)g(y)m(ou)g(ma)m(y)g(use)f(to)i
-(lab)s(el)f(di\013eren)m(t)g(ph)m(ysical)g(domains.)0
-962 y(F)-8 b(rom)31 b(a)g(practical)h(p)s(oin)m(t)e(of)h(view,)f(ho)m
-(w)m(ev)m(er,)i(it)f(is)g(w)m(orth)f(follo)m(wing)i(a)f(few)f(con)m(v)m
-(en)m(tions)i(\()p Fu(x)p FG(7.13\).)0 1251 y Fw(7.13)112
-b(Con)m(v)m(en)m(tions)38 b(for)g(Domain)g(Names)0 1469
-y FG(When)31 b(c)m(ho)s(osing)g(a)h(v)-5 b(alue)31 b(for)g(the)g
-(Domain)h(attribute)f(of)g(a)g(F)-8 b(rame,)33 b(it)e(ob)m(viously)h
-(mak)m(es)f(sense)g(to)h(a)m(v)m(oid)0 1582 y(generic)d(names)g(whic)m
-(h)f(migh)m(t)h(clash)g(with)f(those)h(used)e(for)i(similar)f(\(but)g
-(subtly)g(di\013eren)m(t!\))41 b(purp)s(oses)27 b(b)m(y)0
-1695 y(other)i(programmers.)40 b(If)28 b(y)m(ou)h(are)h(dev)m(eloping)g
-(soft)m(w)m(are)g(for)e(an)h(instrumen)m(t,)g(for)g(example,)h(and)e(w)
-m(an)m(t)i(to)0 1808 y(iden)m(tify)25 b(an)f(instrumen)m(tal)h(co)s
-(ordinate)g(system,)h(then)e(it)h(is)g(sensible)f(to)h(add)f(a)h
-(distinguishing)f(pre\014x.)38 b(F)-8 b(or)0 1920 y(instance,)25
-b(y)m(ou)f(migh)m(t)f(use)g Fp(<)p FG(INST)p Fp(>)p Fy(_)p
-FG(F)m(OCAL)p Fy(_)p FG(PLANE,)e(where)i Fp(<)p FG(INST)p
-Fp(>)f FG(\()p Fx(e.g.)g FG(an)h(acron)m(ym\))h(iden)m(ti\014es)0
-2033 y(y)m(our)30 b(instrumen)m(t.)0 2193 y(F)-8 b(or)37
-b(some)g(purp)s(oses,)g(ho)m(w)m(ev)m(er,)j(a)d(standard)e(c)m(hoice)k
-(of)e(Domain)g(name)g(is)f(desirable)h(so)g(that)g(di\013eren)m(t)0
-2306 y(items)29 b(of)g(soft)m(w)m(are)h(can)e(comm)m(unicate.)42
-b(F)-8 b(or)29 b(this)g(purp)s(ose,)e(the)i(follo)m(wing)h(Domain)f
-(names)f(are)h(reserv)m(ed)0 2419 y(b)m(y)h(AST)g(and)g(the)g(use)g
-(recommended)g(b)s(elo)m(w)h(should)e(b)s(e)h(carefully)h(observ)m(ed:)
-227 2668 y FE(GRAPHICS)427 2781 y FG(Iden)m(ti\014es)25
-b(the)g(co)s(ordinate)g(space)g(used)f(b)m(y)g(an)h(underlying)e
-(computer)i(graphics)f(system)427 2893 y(to)f(sp)s(ecify)e(plotting)i
-(op)s(erations.)38 b(T)m(ypically)-8 b(,)25 b(when)c(p)s(erforming)f
-(graphical)j(op)s(erations,)427 3006 y(AST)29 b(is)h(used)g(to)g
-(de\014ne)g(additional)g(co)s(ordinate)h(systems)f(whic)m(h)g(are)g
-(related)h(to)g(these)427 3119 y(\\nativ)m(e")g(graphical)e(co)s
-(ordinates.)41 b(Plotting)30 b(ma)m(y)f(b)s(e)f(carried)g(out)h(in)f
-(an)m(y)h(of)f(these)h(co-)427 3232 y(ordinate)g(systems,)f(but)f(the)h
-(GRAPHICS)f(domain)h(iden)m(ti\014es)g(the)g(nativ)m(e)h(co)s
-(ordinates)427 3345 y(through)h(whic)m(h)g(AST)g(comm)m(unicates)i
-(with)e(the)g(underlying)g(graphics)g(system.)227 3488
-y FE(GRID)427 3601 y FG(Iden)m(ti\014es)35 b(the)f(instan)m(taneous)i
-Fx(data)i(grid)c FG(used)g(to)h(store)g(and)f(handle)g(data,)j
-(together)427 3714 y(with)f(an)f(asso)s(ciated)i(co)s(ordinate)g
-(system.)56 b(In)35 b(this)h(co)s(ordinate)g(system,)i(the)d(\014rst)g
-(el-)427 3827 y(emen)m(t)f(stored)f(in)g(an)g(arra)m(y)h(of)f(data)h
-(alw)m(a)m(ys)h(has)d(a)i(co)s(ordinate)g(v)-5 b(alue)34
-b(of)f(unit)m(y)g(at)h(its)427 3940 y(cen)m(tre)e(and)d(all)j(elemen)m
-(ts)f(ha)m(v)m(e)h(unit)e(exten)m(t.)42 b(This)30 b(applies)g(to)h(all)
-h(dimensions.)427 4067 y(If)h(data)g(are)g(copied)g(or)g(transformed)f
-(to)i(a)f(new)f(data)h(grid)g(\(b)m(y)g(whatev)m(er)g(means\),)h(or)427
-4180 y(a)29 b(subset)e(of)i(the)f(original)h(grid)f(is)h(extracted,)h
-(then)e(the)g(same)h(rules)e(apply)h(to)h(the)f(cop)m(y)427
-4293 y(or)f(subset.)40 b(Its)27 b(\014rst)f(elemen)m(t)j(therefore)e
-(has)g(GRID)h(co)s(ordinate)g(v)-5 b(alues)27 b(of)h(unit)m(y)f(at)h
-(its)427 4406 y(cen)m(tre.)62 b(Note)38 b(that)f(this)g(means)g(that)g
-(GRID)g(co)s(ordinates)h(remain)f(attac)m(hed)h(to)g(the)427
-4519 y(\014rst)c(elemen)m(t)i(of)f(the)f(data)h(grid)g(and)f(not)g(to)i
-(its)e(data)i(con)m(ten)m(t)g(\()p Fx(e.g.)e FG(the)h(features)f(in)427
-4632 y(an)d(image\).)227 4775 y FE(PIXEL)427 4888 y FG(Iden)m(ti\014es)
-42 b(an)f(arra)m(y)h(of)f(pixels)h(and)e(an)h(asso)s(ciated)i
-Fx(pixel-b)-5 b(ase)g(d)43 b FG(co)s(ordinate)f(system)427
-5001 y(whic)m(h)37 b(is)g(related)g(to)h(the)f(GRID)g(co)s(ordinate)h
-(system)f(\(ab)s(o)m(v)m(e\))h(simply)f(b)m(y)f(a)i(shift)e(of)427
-5114 y(origin)30 b(along)g(eac)m(h)g(axis.)41 b(This)29
-b(shift)g(ma)m(y)g(b)s(e)g(in)m(tegral,)i(fractional,)g(p)s(ositiv)m
-(e,)g(negativ)m(e)427 5226 y(or)g(zero.)41 b(The)30 b(data)h(elemen)m
-(ts)h(retain)f(their)f(unit)g(exten)m(t)i(along)f(eac)m(h)h(axis.)427
-5354 y(Because)g(the)f(amoun)m(t)f(of)h(shift)f(is)h(unsp)s(eci\014ed,)
-e(the)h(PIXEL)g(domain)g(is)h(distinct)g(from)427 5467
-y(the)g(GRID)h(domain.)42 b(The)30 b(relationship)h(b)s(et)m(w)m(een)h
-(them)f(con)m(tains)h(a)f(degree)g(of)h(uncer-)427 5580
-y(tain)m(t)m(y)-8 b(,)36 b(suc)m(h)c(as)g(t)m(ypically)i(arises)f(from)
-f(the)h(di\013eren)m(t)f(con)m(v)m(en)m(tions)j(used)c(b)m(y)i
-(di\013eren)m(t)427 5693 y(soft)m(w)m(are)j(systems.)51
-b(F)-8 b(or)35 b(instance,)h(in)e(some)g(soft)m(w)m(are)h(the)g
-(\014rst)e(pixel)h(is)g(regarded)g(as)p eop end
-%%Page: 74 84
-TeXDict begin 74 83 bop 0 52 a FG(74)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))427 351
-y FG(b)s(eing)21 b(cen)m(tred)h(at)h(\(1,1\),)i(while)d(in)f(other)g
-(soft)m(w)m(are)i(it)f(is)g(at)g(\(0.5,0.5\).)41 b(In)21
-b(addition,)j(some)427 464 y(soft)m(w)m(are)31 b(pac)m(k)-5
-b(ages)31 b(implemen)m(t)f(a)f(\\pixel)h(origin")h(whic)m(h)d(allo)m
-(ws)j(pixel)f(co)s(ordinates)f(to)427 577 y(start)i(at)g(an)g
-(arbitrary)f(v)-5 b(alue.)427 704 y(The)41 b(GRID)h(domain)g(\(whic)m
-(h)g(corresp)s(onds)e(with)h(the)h(pixel-n)m(um)m(b)s(ering)f(con)m(v)m
-(en)m(tion)427 817 y(used)20 b(b)m(y)h(FITS\))g(is)f(a)i(sp)s(ecial)f
-(case)h(of)f(the)g(PIXEL)f(domain)h(and)f(a)m(v)m(oids)j(this)d
-(uncertain)m(t)m(y)-8 b(.)427 930 y(In)35 b(general,)j(additional)f
-(information)f(is)g(required)e(in)i(order)f(to)h(con)m(v)m(ert)h(from)f
-(one)f(to)427 1043 y(the)c(other.)227 1185 y FE(SKY)427
-1298 y FG(Iden)m(ti\014es)26 b(the)g(domain)f(whic)m(h)h(con)m(tains)h
-(all)f(equiv)-5 b(alen)m(t)27 b(celestial)h(co)s(ordinate)f(systems.)
-427 1410 y(Because)33 b(these)e(are)g(represen)m(ted)g(in)g(AST)f(b)m
-(y)h(SkyF)-8 b(rames)31 b(\()p Fu(x)p FG(8\),)i(it)e(should)f(b)s(e)g
-(no)h(sur-)427 1523 y(prise)d(that)g(the)g(default)g(Domain)g(v)-5
-b(alue)29 b(for)e(a)h(SkyF)-8 b(rame)28 b(is)g(SKY.)g(Since)f(there)h
-(is)g(only)427 1636 y(one)j(sky)-8 b(,)31 b(y)m(ou)f(probably)g(w)m
-(on't)h(need)f(to)h(c)m(hange)h(this)e(v)m(ery)h(often.)227
-1778 y FE(SPECTR)m(UM)427 1891 y FG(Iden)m(ti\014es)22
-b(the)g(domain)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f(an)g
-(electro-magnetic)k(sp)s(ec-)427 2004 y(trum.)52 b(The)34
-b(AST)g(Sp)s(ecF)-8 b(rame)35 b(\()p Fu(x)p FG(9\))h(class)f(describ)s
-(es)e(p)s(ositions)i(within)f(this)g(domain,)427 2117
-y(allo)m(wing)42 b(a)f(wide)f(range)h(of)f(di\013eren)m(t)h(co)s
-(ordinate)g(systems)f(to)h(b)s(e)f(used)g(\(frequency)-8
-b(,)427 2229 y(w)m(a)m(v)m(elength,)33 b Fx(etc)p FG(\).)41
-b(The)30 b(default)g(Domain)i(v)-5 b(alue)31 b(for)f(a)g(Sp)s(ecF)-8
-b(rame)31 b(is)f(SPECTR)m(UM.)227 2371 y FE(TIME)427
-2484 y FG(Iden)m(ti\014es)g(the)g(domain)f(used)g(to)h(describ)s(e)g
-(momen)m(ts)g(in)f(time.)41 b(The)29 b(AST)g(TimeF)-8
-b(rame)427 2597 y(class)32 b(describ)s(es)f(p)s(ositions)g(within)g
-(this)g(domain,)g(allo)m(wing)i(a)f(wide)f(range)g(of)h(di\013eren)m(t)
-427 2710 y(co)s(ordinate)g(systems)e(and)g(timescales)i(to)g(b)s(e)d
-(used.)41 b(The)30 b(default)g(Domain)i(v)-5 b(alue)31
-b(for)f(a)427 2823 y(TimeF)-8 b(rame)32 b(is)e(TIME.)0
-3067 y(Although)h(w)m(e)h(ha)m(v)m(e)h(dra)m(wn)d(a)i(necessary)g
-(distinction)g(here)f(b)s(et)m(w)m(een)h(the)f(GRID)h(and)f(PIXEL)f
-(domains,)0 3180 y(w)m(e)35 b(will)g(con)m(tin)m(ue)g(to)h(refer)e(in)g
-(general)h(terms)g(to)g(image)g(\\pixels")h(and)e(\\pixel)h(co)s
-(ordinates")h(whenev)m(er)0 3293 y(this)30 b(distinction)g(is)g(not)g
-(imp)s(ortan)m(t.)40 b(This)29 b(should)g(not)h(b)s(e)f(tak)m(en)i(to)f
-(imply)g(that)g(the)g(GRID)g(con)m(v)m(en)m(tion)0 3405
-y(for)42 b(n)m(um)m(b)s(ering)f(pixels)h(is)g(excluded|in)f(fact,)46
-b(it)d(is)f(usually)f(to)i(b)s(e)e(preferred)g(\(at)i(the)f(lev)m(el)i
-(of)e(data)0 3518 y(handling)30 b(b)s(eing)g(discussed)f(in)h(this)g
-(do)s(cumen)m(t\))h(and)f(w)m(e)h(recommend)f(it.)0 3805
-y Fw(7.14)112 b(The)38 b(Unit)g(A)m(ttribute)0 4022 y
-FG(Eac)m(h)44 b(axis)g(of)f(a)h(F)-8 b(rame)44 b(has)f(a)h(Unit)f
-(attribute)h(whic)m(h)g(holds)e(the)i(ph)m(ysical)g(units)e(used)h(to)h
-(describ)s(e)0 4135 y(p)s(ositions)36 b(on)f(the)h(axis.)57
-b(The)36 b(index)f(of)h(the)g(axis)g(to)g(whic)m(h)g(the)g(attribute)g
-(refers)f(should)g(normally)h(b)s(e)0 4248 y(placed)j(in)f(paren)m
-(theses)h(follo)m(wing)h(the)f(attribute)h(name)e(\(\\Unit\(2\)")k(for)
-c(instance\).)67 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(the)0
-4361 y(F)-8 b(rame)31 b(has)f(only)h(a)g(single)g(axis,)g(then)f(the)g
-(axis)h(index)f(can)h(b)s(e)f(omitted.)0 4519 y(In)f(v)m(ersions)h(of)g
-(AST)f(prior)g(to)i(v)m(ersion)f(2.0,)h(the)f(Unit)g(attribute)g(w)m
-(as)g(nothing)g(more)g(than)f(a)i(descriptiv)m(e)0 4632
-y(string)g(in)m(tended)g(purely)g(for)g(h)m(uman)g(readers|no)g(part)g
-(of)g(the)h(AST)e(system)i(used)e(the)i(Unit)f(string)h(for)0
-4744 y(an)m(y)41 b(purp)s(ose)e(\(other)i(than)g(inclusion)f(in)h(axis)
-g(lab)s(els)g(pro)s(duced)e(b)m(y)i(the)f(Plot)i(class\).)73
-b(In)40 b(particular,)0 4857 y(no)g(accoun)m(t)h(w)m(as)f(tak)m(en)h
-(of)e(the)h(Unit)g(attribute)h(when)d(\014nding)h(the)g(Mapping)h(b)s
-(et)m(w)m(een)g(t)m(w)m(o)h(F)-8 b(rames.)0 4970 y(Th)m(us)30
-b(if)h(the)g(con)m(v)m(ersion)i(b)s(et)m(w)m(een)e(a)h(pair)f(of)g
-(1-dimensional)h(F)-8 b(rames)32 b(represen)m(ting)f(v)m(elo)s(cit)m(y)
-i(w)m(as)f(found)0 5083 y(\(using)f(AST)p Fy(_)p FG(CONVER)-8
-b(T)30 b(\))i(the)g(returned)e(Mapping)i(w)m(ould)f(alw)m(a)m(ys)i(b)s
-(e)e(a)g(UnitMap,)i(ev)m(en)f(if)g(the)f(Unit)0 5196
-y(attributes)f(of)g(the)g(t)m(w)m(o)h(F)-8 b(rames)30
-b(w)m(ere)g(\\km/h")g(and)f(\\m/s".)42 b(This)28 b(b)s(eha)m(viour)i
-(is)f(referred)g(to)h(b)s(elo)m(w)g(as)g(a)0 5309 y Fx(p)-5
-b(assive)38 b FG(Unit)31 b(attribute.)0 5467 y(As)38
-b(of)f(AST)g(v)m(ersion)h(2.0,)j(a)d(facilit)m(y)h(exists)g(whic)m(h)e
-(allo)m(ws)i(the)f(Unit)f(attribute)i(to)f(b)s(e)f Fx(active)7
-b FG(;)41 b(that)d(is,)0 5580 y(di\013erences)30 b(in)g(the)g(Unit)g
-(attribute)h(ma)m(y)f(b)s(e)f(tak)m(en)i(in)m(to)g(accoun)m(t)g(when)e
-(\014nding)g(the)h(Mapping)g(b)s(et)m(w)m(een)0 5693
-y(t)m(w)m(o)k(F)-8 b(rames.)48 b(In)32 b(order)g(to)i(minimise)e(the)h
-(risk)f(of)h(breaking)g(older)f(soft)m(w)m(are,)j(the)e
-Fx(default)42 b FG(b)s(eha)m(viour)32 b(of)p eop end
-%%Page: 75 85
-TeXDict begin 75 84 bop 0 52 a Fz(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FG(75)0 351 y(simple)28 b(F)-8 b(rames)29
-b(and)f(SkyF)-8 b(rames)28 b(is)h(unc)m(hanged)f(from)f(previous)h(v)m
-(ersions)h(\()p Fx(i.e.)39 b FG(they)29 b(ha)m(v)m(e)g(passiv)m(e)g
-(Unit)0 464 y(attributes\).)41 b(Ho)m(w)m(ev)m(er,)30
-b(the)e(new)f(routines)g(AST)p Fy(_)p FG(SET)-8 b(A)m(CTIVEUNIT)26
-b(and)g(AST)p Fy(_)p FG(GET)-8 b(A)m(CTIVEUNIT)0 577
-y(allo)m(w)27 b(this)f(default)f(b)s(eha)m(viour)g(to)i(b)s(e)e(c)m
-(hanged.)39 b(The)25 b(Sp)s(ecF)-8 b(rame)26 b(and)f(TimeF)-8
-b(rame)27 b(classes)f Fx(always)35 b FG(ha)m(v)m(e)0
-690 y(an)30 b(activ)m(e)j(Unit)d(attribute)i(\(attempts)f(to)g(c)m
-(hange)h(this)e(are)h(ignored\).)0 856 y(F)-8 b(or)24
-b(instance,)h(consider)e(the)h(ab)s(o)m(v)m(e)g(example)g(of)f(t)m(w)m
-(o)i(1-dimensional)f(F)-8 b(rames)24 b(describing)e(v)m(elo)s(cit)m(y)
--8 b(.)42 b(These)0 969 y(F)-8 b(rames)31 b(can)g(b)s(e)f(created)h(as)
-g(follo)m(ws:)262 1227 y Ft(INTEGER)40 b(FRAME1,)h(FRAME2)262
-1426 y(FRAME1)g(=)i(AST_FRAME\()c(1,)k('Domain=VELOCITY)o(,Un)o(it)o
-(=k)o(m/h)o(')37 b(\))262 1526 y(FRAME2)k(=)i(AST_FRAME\()c(1,)k
-('Domain=VELOCITY)o(,Un)o(it)o(=m)o(/s')37 b(\))0 1897
-y FG(By)g(default,)i(these)f(F)-8 b(rames)37 b(ha)m(v)m(e)i(passiv)m(e)
-e(Unit)g(attributes,)j(and)c(so)h(an)g(attempt)h(to)g(\014nd)d(a)j
-(Mapping)0 2010 y(b)s(et)m(w)m(een)c(them)f(w)m(ould)h(ignore)g(the)f
-(di\013erence)h(in)f(their)h(Unit)f(attributes)h(and)f(return)f(a)i
-(unit)f(Mapping.)0 2123 y(T)-8 b(o)29 b(a)m(v)m(oid)i(this,)e(w)m(e)h
-(indicate)g(that)f(w)m(e)g(w)m(an)m(t)h(these)g(F)-8
-b(rames)29 b(to)h(ha)m(v)m(e)g Fx(active)36 b FG(Unit)29
-b(attributes,)h(as)f(follo)m(ws:)262 2381 y Ft(CALL)41
-b(AST_SETACTIVEUNIT)o(\()d(FRAME1,)i(.TRUE.,)h(STATUS)g(\))262
-2480 y(CALL)g(AST_SETACTIVEUNIT)o(\()d(FRAME2,)i(.TRUE.,)h(STATUS)g(\))
-0 2752 y FG(If)30 b(w)m(e)h(then)f(\014nd)f(the)h(Mapping)h(b)s(et)m(w)
-m(een)g(them)f(as)g(follo)m(ws:)262 3010 y Ft(INTEGER)40
-b(CVT)262 3110 y(...)262 3209 y(CVT)i(=)h(AST_CONVERT\()c(FRAME1,)h
-(FRAME2,)h(')i(',)g(STATUS)e(\))0 3481 y FG(the)20 b(Mapping)h(con)m
-(tained)g(within)f(the)g(F)-8 b(rameSet)22 b(returned)d(b)m(y)h(AST)p
-Fy(_)p FG(CONVER)-8 b(T)19 b(will)i(b)s(e)e(a)i(one-dimensional)0
-3594 y(Zo)s(omMap)33 b(whic)m(h)g(simply)f(scales)j(its)e(input)f(\(a)i
-(v)m(elo)s(cit)m(y)i(in)d Fp(k)s(m=h)p FG(\))h(b)m(y)f(a)g(factor)h(of)
-g(0.278)h(to)e(create)i(its)0 3706 y(output)30 b(\(a)h(v)m(elo)s(cit)m
-(y)i(in)d Fp(m=s)p FG(\).)0 3872 y(In)43 b(fact)i(w)m(e)g(need)f(not)g
-(ha)m(v)m(e)h(set)g(the)f(Unit)g(attribute)h(activ)m(e)h(in)e(FRAME1)h
-(since)f(the)h(b)s(eha)m(viour)e(of)0 3985 y(AST)p Fy(_)p
-FG(CONVER)-8 b(T)29 b(is)h(determined)g(b)m(y)h(its)f(TO)g(F)-8
-b(rame)31 b(\(the)g(second)g(F)-8 b(rame)31 b(argumen)m(t\).)0
-4285 y FE(7.14.1)106 b(The)34 b(Syn)m(tax)h(for)g(Unit)g(Strings)0
-4511 y FG(Con)m(v)m(ersion)28 b(b)s(et)m(w)m(een)g(units)e(systems)h
-(relies)h(on)f(the)h(use)e(of)i(a)f(sp)s(eci\014c)g(syn)m(tax)h(for)f
-(the)g(Unit)h(attribute.)40 b(If)0 4624 y(the)32 b(v)-5
-b(alue)32 b(of)g(the)g(Unit)g(attribute)g(do)s(es)g(not)g(conform)g(to)
-g(this)g(syn)m(tax,)h(then)e(an)h(error)f(will)h(b)s(e)f(rep)s(orted)0
-4737 y(if)k(an)g(attempt)h(is)f(made)g(to)g(use)g(it)h(to)f(determine)g
-(an)g(in)m(ter-unit)h(Mapping)e(\(this)i(will)f(nev)m(er)g(happ)s(en)e
-(if)0 4850 y(the)e(Unit)f(attribute)h(is)g Fx(p)-5 b(assive)7
-b FG(\).)0 5016 y(The)20 b(adopted)h(syn)m(tax)g(is)f(that)i(describ)s
-(ed)d(in)h(FITS-W)m(CS)g(pap)s(er)g(I)g("Represen)m(tation)i(of)f(W)-8
-b(orld)21 b(Co)s(ordinate)0 5128 y(in)35 b(FITS")g(b)m(y)g(Greisen)h(&)
-f(Calabretta.)57 b(W)-8 b(e)37 b(distinguish)d(here)h(b)s(et)m(w)m(een)
-h(\\basic")h(units)e(and)f(\\deriv)m(ed")0 5241 y(units:)43
-b(deriv)m(ed)32 b(units)f(are)h(de\014ned)f(in)h(terms)f(of)h(other)g
-(units)g(\(either)g(deriv)m(ed)g(or)g(basic\),)h(whereas)f(basic)0
-5354 y(units)40 b(ha)m(v)m(e)h(no)f(suc)m(h)g(de\014nitions.)69
-b(Deriv)m(ed)41 b(units)f(ma)m(y)h(b)s(e)e(represen)m(ted)h(b)m(y)g
-(their)h(o)m(wn)f Fx(symb)-5 b(ol)51 b FG(\()p Fx(e.g.)0
-5467 y FG(\\Jy"|the)23 b(Jansky\))g(or)f(b)m(y)h(a)f
-Fx(mathematic)-5 b(al)29 b(expr)-5 b(ession)31 b FG(whic)m(h)22
-b(com)m(bines)h(other)g(sym)m(b)s(ols)f(and)g(constan)m(ts)0
-5580 y(to)37 b(form)f(a)h(de\014nition)g(of)f(the)h(unit)f(\()p
-Fx(e.g.)59 b FG(\\km/s"|kilometres)39 b(p)s(er)c(second\).)60
-b(Unit)37 b(sym)m(b)s(ols)f(ma)m(y)h(b)s(e)0 5693 y(pre\014xed)29
-b(b)m(y)h(a)h(string)g(represen)m(ting)f(a)h(standard)f(m)m(ultiple)h
-(or)f(sub-m)m(ultiple.)p eop end
-%%Page: 76 86
-TeXDict begin 76 85 bop 0 52 a FG(76)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FG(In)k(addition)h(to)h(the)f(unit)g(sym)m(b)s(ols)f(listed)i(in)f
-(FITS-W)m(CS)f(P)m(ap)s(er)h(I,)g(an)m(y)g(other)g(arbitrary)g(unit)g
-(sym)m(b)s(ol)0 464 y(ma)m(y)41 b(b)s(e)e(used,)j(with)d(the)i(pro)m
-(viso)f(that)h(it)f(will)g(not)h(b)s(e)e(p)s(ossible)g(to)i(con)m(v)m
-(ert)h(b)s(et)m(w)m(een)e(F)-8 b(rames)41 b(using)0 577
-y(suc)m(h)31 b(units.)41 b(The)31 b(exception)h(to)g(this)f(is)g(if)g
-(b)s(oth)f(F)-8 b(rames)31 b(refer)g(to)h(the)f(same)g(unkno)m(wn)f
-(unit)g(string.)43 b(F)-8 b(or)0 690 y(instance,)44 b(an)c(axis)h(with)
-f(unkno)m(wn)f(unit)h(sym)m(b)s(ol)h("\015op")f Fx(c)-5
-b(ould)51 b FG(b)s(e)40 b(con)m(v)m(erted)i(to)f(an)g(axis)g(with)f
-(unit)0 803 y("M\015op")31 b(\(Mega-\015op\).)0 966 y(Unit)37
-b(sym)m(b)s(ols)g(\(optionally)i(pre\014xed)d(with)g(a)i(m)m(ultiple)g
-(or)f(sub-m)m(ultiple\))g(can)g(b)s(e)g(com)m(bined)g(together)0
-1079 y(using)i(a)h(limited)h(range)f(of)g(mathematical)i(op)s(erators)e
-(and)f(functions,)j(to)e(pro)s(duce)f(new)g(units.)68
-b(Suc)m(h)0 1191 y(expressions)39 b(ma)m(y)i(also)f(con)m(tain)h(paren)
-m(theses)f(and)f(n)m(umerical)h(constan)m(ts)h(\(these)f(ma)m(y)h
-(optionally)g(use)0 1304 y(\\scien)m(ti\014c")33 b(notation)e
-(including)f(an)g(\\E")i(c)m(haracter)g(to)f(represen)m(t)f(the)h(p)s
-(o)m(w)m(er)f(of)h(10\).)0 1467 y(The)g(follo)m(wing)j(tables)e(list)h
-(the)f(sym)m(b)s(ols)f(for)h(the)g(basic)g(and)f(deriv)m(ed)h(units)f
-(whic)m(h)h(ma)m(y)g(b)s(e)g(included)f(in)0 1580 y(a)e(units)f
-(string,)i(the)f(standard)f(pre\014xes)g(for)g(m)m(ultiples)h(and)g
-(sub-m)m(ultiples,)g(and)f(the)h(strings)f(whic)m(h)h(ma)m(y)0
-1693 y(b)s(e)h(used)f(to)i(represen)m(t)g(mathematical)i(op)s(erators)d
-(and)g(functions.)p 977 1814 1827 4 v 975 1926 4 113
-v 1654 1893 a FD(Basic)j(units)p 2801 1926 V 977 1930
-1827 4 v 975 2043 4 113 v 1258 2009 a FG(Quan)m(tit)m(y)p
-1894 2043 V 1894 2043 V 332 w(Sym)m(b)s(ol)p 2289 2043
-V 99 w(F)-8 b(ull)31 b(Name)p 2801 2043 V 977 2046 1827
-4 v 975 2159 4 113 v 1026 2125 a(length)p 1894 2159 V
-672 w(m)p 2289 2159 V 319 w(metre)p 2801 2159 V 975 2272
-V 1026 2238 a(mass)p 1894 2272 V 726 w(g)p 2289 2272
-V 350 w(gram)p 2801 2272 V 975 2385 V 1026 2351 a(time)p
-1894 2385 V 743 w(s)p 2289 2385 V 359 w(second)p 2801
-2385 V 975 2498 V 1026 2464 a(plane)g(angle)p 1894 2498
-V 470 w(rad)p 2289 2498 V 263 w(radian)p 2801 2498 V
-975 2611 V 1026 2577 a(solid)g(angle)p 1894 2611 V 500
-w(sr)p 2289 2611 V 323 w(steradian)p 2801 2611 V 975
-2723 V 1026 2690 a(temp)s(erature)p 1894 2723 V 431 w(K)p
-2289 2723 V 324 w(Kelvin)p 2801 2723 V 975 2836 V 1026
-2802 a(electric)i(curren)m(t)p 1894 2836 V 319 w(A)p
-2289 2836 V 327 w(Amp)s(ere)p 2801 2836 V 975 2949 V
-1026 2915 a(amoun)m(t)e(of)g(substance)p 1894 2949 V
-99 w(mol)p 2289 2949 V 249 w(mole)p 2801 2949 V 975 3062
-V 1026 3028 a(luminous)f(in)m(tensit)m(y)p 1894 3062
-V 189 w(cd)p 2289 3062 V 304 w(candela)p 2801 3062 V
-977 3065 1827 4 v 0 3487 a FE(7.14.2)106 b(Side-e\013ects)35
-b(of)g(Changing)g(the)f(Unit)h(attribute)0 3709 y FG(If)c(an)g(Axis)h
-(has)f(an)g(activ)m(e)j(Unit)e(attribute,)g(c)m(hanging)h(its)f(v)-5
-b(alue)31 b(\(either)i(b)m(y)e(setting)i(a)e(new)g(v)-5
-b(alue)32 b(or)g(b)m(y)0 3822 y(clearing)h(it)g(so)f(that)g(the)g
-(default)g(v)-5 b(alue)33 b(is)e(re-instated\))j(ma)m(y)e(cause)h(the)f
-(Lab)s(el)f(and)h(Sym)m(b)s(ol)f(attributes)0 3934 y(to)45
-b(b)s(e)f(c)m(hanged)h(accordingly)-8 b(.)84 b(F)-8 b(or)45
-b(instance,)k(if)44 b(an)h(Axis)f(has)g(Unit,)49 b(Lab)s(el)44
-b(and)g(Sym)m(b)s(ol)f(of)i(\\Hz",)0 4047 y(\\F)-8 b(requency")31
-b(and)d(\\n)m(u",)i(then)f(c)m(hanging)h(its)g(Unit)f(attribute)h(to)g
-(\\log\(Hz\)")j(will)c(cause)h(AST)e(to)i(c)m(hange)0
-4160 y(its)i(Lab)s(el)g(and)f(Sym)m(b)s(ol)g(to)h(\\log\(F)-8
-b(requency\)")35 b(and)c(\\Log\(n)m(u\)".)47 b(These)31
-b(c)m(hanges)i(are)f(only)g(made)g(if)f(the)0 4273 y(Unit)h(attribute)h
-(is)g(activ)m(e,)i(and)c(a)i(Mapping)f(can)h(b)s(e)e(found)g(from)h
-(the)g(old)h(units)e(to)i(the)g(new)f(units.)45 b(On)0
-4386 y(the)39 b(other)g(hand,)h(c)m(hanging)g(the)f(Unit)g(from)f
-(\\Hz")i(to)g(\\MHz")h(w)m(ould)d(not)h(cause)h(an)m(y)f(c)m(hange)h
-(to)f(the)0 4499 y(Lab)s(el)30 b(or)h(Sym)m(b)s(ol)e(attributes.)p
-eop end
-%%Page: 77 87
-TeXDict begin 77 86 bop 0 52 a Fz(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FG(77)p 0 272 3999 4 v -2 384 4 113
-v 1712 351 a FD(Deriv)m(ed)34 b(units)p 3996 384 V 0
-388 3999 4 v -2 501 4 113 v 298 467 a FG(Quan)m(tit)m(y)p
-949 501 V 949 501 V 396 w(Sym)m(b)s(ol)p 1441 501 V 432
-w(F)-8 b(ull)31 b(Name)p 2522 501 V 875 w(De\014nition)p
-3996 501 V 0 504 3999 4 v -2 617 4 113 v 50 583 a(area)p
-949 617 V 785 w(barn)p 1441 617 V 309 w(barn)p 2522 617
-V 897 w(1.0E-28)i(m**2)p 3996 617 V -2 730 V 50 696 a(area)p
-949 730 V 785 w(pix)p 1441 730 V 368 w(pixel)p 2522 730
-V 3996 730 V -2 843 V 50 809 a(area)p 949 843 V 785 w(pixel)p
-1441 843 V 303 w(pixel)p 2522 843 V 3996 843 V -2 956
-V 50 922 a(electric)f(capacitance)p 949 956 V 181 w(F)p
-1441 956 V 433 w(F)-8 b(arad)p 2522 956 V 852 w(C/V)p
-3996 956 V -2 1069 V 50 1035 a(electric)32 b(c)m(harge)p
-949 1069 V 384 w(C)p 1441 1069 V 426 w(Coulom)m(b)p 2522
-1069 V 724 w(A)f(s)p 3996 1069 V -2 1181 V 50 1148 a(electric)h
-(conductance)p 949 1181 V 149 w(S)p 1441 1181 V 441 w(Siemens)p
-2522 1181 V 761 w(A/V)p 3996 1181 V -2 1294 V 50 1261
-a(electric)g(p)s(oten)m(tial)p 949 1294 V 286 w(V)p 1441
-1294 V 424 w(V)-8 b(olt)p 2522 1294 V 915 w(J/C)p 3996
-1294 V -2 1407 V 50 1373 a(electric)32 b(resistance)p
-949 1407 V 254 w(Ohm)p 1441 1407 V 294 w(Ohm)p 2522 1407
-V 882 w(V/A)p 3996 1407 V -2 1520 V 50 1486 a(energy)p
-949 1520 V 691 w(J)p 1441 1520 V 445 w(Joule)p 2522 1520
-V 872 w(N)f(m)p 3996 1520 V -2 1633 V 50 1599 a(energy)p
-949 1633 V 691 w(Ry)p 1441 1633 V 377 w(Rydb)s(erg)p
-2522 1633 V 739 w(13.605692)j(eV)p 3996 1633 V -2 1746
-V 50 1712 a(energy)p 949 1746 V 691 w(eV)p 1441 1746
-V 384 w(electron-V)-8 b(olt)p 2522 1746 V 573 w(1.60217733E-19)36
-b(J)p 3996 1746 V -2 1859 V 50 1825 a(energy)p 949 1859
-V 691 w(erg)p 1441 1859 V 371 w(erg)p 2522 1859 V 959
-w(1.0E-7)c(J)p 3996 1859 V -2 1972 V 50 1938 a(ev)m(en)m(ts)p
-949 1972 V 707 w(coun)m(t)p 1441 1972 V 273 w(coun)m(t)p
-2522 1972 V 3996 1972 V -2 2085 V 50 2051 a(ev)m(en)m(ts)p
-949 2085 V 707 w(ct)p 1441 2085 V 417 w(coun)m(t)p 2522
-2085 V 3996 2085 V -2 2198 V 50 2164 a(ev)m(en)m(ts)p
-949 2198 V 707 w(ph)p 1441 2198 V 390 w(photon)p 2522
-2198 V 3996 2198 V -2 2311 V 50 2277 a(ev)m(en)m(ts)p
-949 2311 V 707 w(photon)p 1441 2311 V 214 w(photon)p
-2522 2311 V 3996 2311 V -2 2423 V 50 2390 a(\015ux)d(densit)m(y)p
-949 2423 V 489 w(Jy)p 1441 2423 V 397 w(Jansky)p 2522
-2423 V 805 w(1.0E-26)k(W)d(/m**2)i(/Hz)p 3996 2423 V
--2 2536 V 50 2503 a(\015ux)d(densit)m(y)p 949 2536 V
-489 w(R)p 1441 2536 V 425 w(Ra)m(yleigh)p 2522 2536 V
-737 w(1.0E10/\(4*PI\))34 b(photon.m**-2)e(/s/sr)p 3996
-2536 V -2 2649 V 50 2615 a(\015ux)d(densit)m(y)p 949
-2649 V 489 w(mag)p 1441 2649 V 326 w(magnitude)p 2522
-2649 V 3996 2649 V -2 2762 V 50 2728 a(force)p 949 2762
-V 762 w(N)p 1441 2762 V 424 w(Newton)p 2522 2762 V 775
-w(kg)i(m/s**2)p 3996 2762 V -2 2875 V 50 2841 a(frequency)p
-949 2875 V 569 w(Hz)p 1441 2875 V 384 w(Hertz)p 2522
-2875 V 861 w(1/s)p 3996 2875 V -2 2988 V 50 2954 a(illuminance)p
-949 2988 V 497 w(lx)p 1441 2988 V 419 w(lux)p 2522 2988
-V 956 w(lm/m**2)p 3996 2988 V -2 3101 V 50 3067 a(inductance)p
-949 3101 V 522 w(H)p 1441 3101 V 424 w(Henry)p 2522 3101
-V 837 w(Wb/A)p 3996 3101 V -2 3214 V 50 3180 a(length)p
-949 3214 V 704 w(A)m(U)p 1441 3214 V 359 w(astronomical)h(unit)p
-2522 3214 V 382 w(1.49598E11)i(m)p 3996 3214 V -2 3327
-V 50 3293 a(length)p 949 3327 V 704 w(Angstrom)p 1441
-3327 V 100 w(Angstrom)p 2522 3327 V 688 w(1.0E-10)f(m)p
-3996 3327 V -2 3440 V 50 3406 a(length)p 949 3440 V 704
-w(lyr)p 1441 3440 V 383 w(ligh)m(t)e(y)m(ear)p 2522 3440
-V 705 w(9.460730E15)k(m)p 3996 3440 V -2 3553 V 50 3519
-a(length)p 949 3553 V 704 w(p)s(c)p 1441 3553 V 398 w(parsec)p
-2522 3553 V 832 w(3.0867E16)f(m)p 3996 3553 V -2 3665
-V 50 3632 a(length)p 949 3665 V 704 w(solRad)p 1441 3665
-V 223 w(solar)d(radius)p 2522 3665 V 618 w(6.9599E8)i(m)p
-3996 3665 V -2 3778 V 50 3745 a(luminosit)m(y)p 949 3778
-V 537 w(solLum)p 1441 3778 V 202 w(solar)e(luminosit)m(y)p
-2522 3778 V 448 w(3.8268E26)j(W)p 3996 3778 V -2 3891
-V 50 3857 a(luminous)29 b(\015ux)p 949 3891 V 412 w(lm)p
-1441 3891 V 391 w(lumen)p 2522 3891 V 837 w(cd)h(sr)p
-3996 3891 V -2 4004 V 50 3970 a(magnetic)i(\014eld)p
-949 4004 V 395 w(G)p 1441 4004 V 421 w(Gauss)p 2522 4004
-V 841 w(1.0E-4)g(T)p 3996 4004 V -2 4117 V 50 4083 a(magnetic)g(\015ux)
-p 949 4117 V 412 w(Wb)p 1441 4117 V 348 w(W)-8 b(eb)s(er)p
-2522 4117 V 825 w(V)31 b(s)p 3996 4117 V -2 4230 V 50
-4196 a(mass)p 949 4230 V 758 w(solMass)p 1441 4230 V
-186 w(solar)g(mass)p 2522 4230 V 669 w(1.9891E30)j(kg)p
-3996 4230 V -2 4343 V 50 4309 a(mass)p 949 4343 V 758
-w(u)p 1441 4343 V 441 w(uni\014ed)29 b(atomic)j(mass)e(unit)p
-2522 4343 V 99 w(1.6605387E-27)35 b(kg)p 3996 4343 V
--2 4456 V 50 4422 a(magnetic)d(\015ux)d(densit)m(y)p
-949 4456 V 100 w(T)p 1441 4456 V 426 w(T)-8 b(esla)p
-2522 4456 V 876 w(Wb/m**2)p 3996 4456 V -2 4569 V 50
-4535 a(plane)30 b(angle)p 949 4569 V 503 w(arcmin)p 1441
-4569 V 219 w(arc-min)m(ute)p 2522 4569 V 654 w(1/60)i(deg)p
-3996 4569 V -2 4682 V 50 4648 a(plane)e(angle)p 949 4682
-V 503 w(arcsec)p 1441 4682 V 255 w(arc-second)p 2522
-4682 V 666 w(1/3600)j(deg)p 3996 4682 V -2 4795 V 50
-4761 a(plane)d(angle)p 949 4795 V 503 w(mas)p 1441 4795
-V 335 w(milli-arcsecond)p 2522 4795 V 490 w(1/3600000)35
-b(deg)p 3996 4795 V -2 4908 V 50 4874 a(plane)30 b(angle)p
-949 4908 V 503 w(deg)p 1441 4908 V 356 w(degree)p 2522
-4908 V 828 w(pi/180)i(rad)p 3996 4908 V -2 5020 V 50
-4987 a(p)s(o)m(w)m(er)p 949 5020 V 716 w(W)p 1441 5020
-V 399 w(W)-8 b(att)p 2522 5020 V 880 w(J/s)p 3996 5020
-V -2 5133 V 50 5099 a(pressure,)29 b(stress)p 949 5133
-V 352 w(P)m(a)p 1441 5133 V 388 w(P)m(ascal)p 2522 5133
-V 830 w(N/m**2)p 3996 5133 V -2 5246 V 50 5212 a(time)p
-949 5246 V 775 w(a)p 1441 5246 V 447 w(y)m(ear)p 2522
-5246 V 914 w(31557600)34 b(s)p 3996 5246 V -2 5359 V
-50 5325 a(time)p 949 5359 V 775 w(d)p 1441 5359 V 441
-w(da)m(y)p 2522 5359 V 939 w(86400)f(s)p 3996 5359 V
--2 5472 V 50 5438 a(time)p 949 5472 V 775 w(h)p 1441
-5472 V 441 w(hour)p 2522 5472 V 897 w(3600)f(s)p 3996
-5472 V -2 5585 V 50 5551 a(time)p 949 5585 V 775 w(yr)p
-1441 5585 V 408 w(y)m(ear)p 2522 5585 V 914 w(31557600)i(s)p
-3996 5585 V -2 5698 V 50 5664 a(time)p 949 5698 V 775
-w(min)p 1441 5698 V 340 w(min)m(ute)p 2522 5698 V 805
-w(60)d(s)p 3996 5698 V -2 5811 V 949 5811 V 1001 5777
-a(D)p 1441 5811 V 423 w(Deb)m(y)m(e)p 2522 5811 V 838
-w(1.0E-29/3)j(C.m)p 3996 5811 V 0 5814 3999 4 v eop end
-%%Page: 78 88
-TeXDict begin 78 87 bop 0 52 a FG(78)1200 b Fz(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))p 617 871
-2546 4 v 615 984 4 113 v 1083 950 a FD(Pre\014xes)35
-b(for)d(m)m(ultiples)i(&)f(sub-m)m(ultiples)p 3161 984
-V 617 987 2546 4 v 615 1100 4 113 v 667 1066 a FG(Sub-m)m(ultiple)99
-b(Name)i(Pre\014x)p 1888 1100 V 1888 1100 V 99 w(Sub-m)m(ultiple)e
-(Name)h(Pre\014x)p 3161 1100 V 617 1103 2546 4 v 615
-1216 4 113 v 667 1183 a(10)757 1150 y Fq(\000)p Fv(1)1274
-1183 y FG(deci)174 b(d)p 1888 1216 V 285 w(10)517 b(deca)153
-b(da)p 3161 1216 V 615 1329 V 667 1295 a(10)757 1262
-y Fq(\000)p Fv(2)1274 1295 y FG(cen)m(ti)142 b(c)p 1888
-1329 V 296 w(10)2030 1262 y Fv(2)2547 1295 y FG(hecto)118
-b(h)p 3161 1329 V 615 1442 V 667 1408 a(10)757 1375 y
-Fq(\000)p Fv(3)1274 1408 y FG(milli)154 b(m)p 1888 1442
-V 260 w(10)2030 1375 y Fv(3)2547 1408 y FG(kilo)186 b(k)p
-3161 1442 V 615 1555 V 667 1521 a(10)757 1488 y Fq(\000)p
-Fv(6)1274 1521 y FG(micro)108 b(u)p 1888 1555 V 285 w(10)2030
-1488 y Fv(6)2547 1521 y FG(mega)123 b(M)p 3161 1555 V
-615 1668 V 667 1634 a(10)757 1601 y Fq(\000)p Fv(9)1274
-1634 y FG(nano)138 b(n)p 1888 1668 V 285 w(10)2030 1601
-y Fv(9)2547 1634 y FG(giga)169 b(G)p 3161 1668 V 615
-1781 V 667 1747 a(10)757 1714 y Fq(\000)p Fv(12)1274
-1747 y FG(pico)g(p)p 1888 1781 V 285 w(10)2030 1714 y
-Fv(12)2547 1747 y FG(tera)k(T)p 3161 1781 V 615 1894
-V 667 1860 a(10)757 1827 y Fq(\000)p Fv(15)1274 1860
-y FG(fem)m(to)109 b(f)p 1888 1894 V 308 w(10)2030 1827
-y Fv(15)2547 1860 y FG(p)s(eta)155 b(P)p 3161 1894 V
-615 2007 V 667 1973 a(10)757 1940 y Fq(\000)p Fv(18)1274
-1973 y FG(atto)170 b(a)p 1888 2007 V 291 w(10)2030 1940
-y Fv(18)2547 1973 y FG(exa)196 b(E)p 3161 2007 V 615
-2120 V 667 2086 a(10)757 2053 y Fq(\000)p Fv(21)1274
-2086 y FG(zepto)119 b(z)p 1888 2120 V 296 w(10)2030 2053
-y Fv(21)2547 2086 y FG(zetta)134 b(Z)p 3161 2120 V 615
-2233 V 667 2199 a(10)757 2166 y Fq(\000)p Fv(24)1274
-2199 y FG(y)m(o)s(cto)117 b(y)p 1888 2233 V 288 w(10)2030
-2166 y Fv(24)2547 2199 y FG(y)m(otta)124 b(Y)p 3161 2233
-V 617 2236 2546 4 v 590 3621 2601 4 v 588 3734 4 113
-v 1116 3700 a FD(Mathematical)33 b(op)s(erators)f(&)h(functions)p
-3188 3734 V 590 3737 2601 4 v 588 3850 4 113 v 746 3816
-a FG(String)p 1143 3850 V 1143 3850 V 1008 w(Meaning)p
-3188 3850 V 590 3853 2601 4 v 588 3966 4 113 v 639 3932
-a(sym1)e(sym2)p 1143 3966 V 115 w(m)m(ultiplication)h(\(a)f(space\))p
-3188 3966 V 588 4079 V 639 4045 a(sym1*sym2)p 1143 4079
-V 101 w(m)m(ultiplication)h(\(an)f(asterisk\))p 3188
-4079 V 588 4192 V 639 4158 a(sym1.sym2)p 1143 4192 V
-121 w(m)m(ultiplication)h(\(a)f(dot\))p 3188 4192 V 588
-4305 V 639 4271 a(sym1/sym2)p 1143 4305 V 101 w(division)p
-3188 4305 V 588 4418 V 639 4384 a(sym1**y)p 1143 4418
-V 213 w(exp)s(onen)m(tiation)g(\()p Fp(y)j FG(m)m(ust)c(b)s(e)g(a)g(n)m
-(umerical)h(constan)m(t\))p 3188 4418 V 588 4531 V 639
-4497 a(sym1)p Fy(^)p FG(y)p 1143 4531 V 255 w(exp)s(onen)m(tiation)g
-(\()p Fp(y)j FG(m)m(ust)c(b)s(e)g(a)g(n)m(umerical)h(constan)m(t\))p
-3188 4531 V 588 4644 V 639 4610 a(log\(sym1\))p 1143
-4644 V 166 w(common)f(logarithm)p 3188 4644 V 588 4756
-V 639 4723 a(ln\(sym1\))p 1143 4756 V 205 w(natural)g(logarithm)p
-3188 4756 V 588 4869 V 639 4836 a(exp\(sym1\))p 1143
-4869 V 142 w(exp)s(onen)m(tial)p 3188 4869 V 588 4982
-V 639 4948 a(sqrt\(sym1\))p 1143 4982 V 126 w(square)g(ro)s(ot)p
-3188 4982 V 590 4986 2601 4 v eop end
-%%Page: 79 89
-TeXDict begin 79 88 bop 3689 52 a FG(79)0 351 y FA(8)135
-b(Celestial)47 b(Co)t(ordinate)f(Systems)g(\(SkyF)-11
-b(rames\))0 628 y FG(A)45 b(F)-8 b(rame)47 b(whic)m(h)e(is)g(sp)s
-(ecialised)h(for)f(represen)m(ting)g(co)s(ordinate)h(systems)g(on)f
-(the)g(celestial)j(sphere)c(is)0 741 y(ob)m(viously)30
-b(of)g(great)g(imp)s(ortance)g(in)f(astronom)m(y)-8 b(.)42
-b(The)29 b(SkyF)-8 b(rame)30 b(is)f(suc)m(h)g(a)h(F)-8
-b(rame.)41 b(In)29 b(this)g(section)i(w)m(e)0 854 y(examine)e(the)f
-(additional)h(prop)s(erties)f(and)g(b)s(eha)m(viour)f(of)i(a)f(SkyF)-8
-b(rame)29 b(that)g(distinguish)e(it)i(from)e(a)i(basic)0
-967 y(F)-8 b(rame)31 b(\()p Fu(x)p FG(7\).)0 1315 y Fw(8.1)112
-b(The)38 b(SkyF)-9 b(rame)39 b(Mo)s(del)0 1561 y FG(A)28
-b(SkyF)-8 b(rame)27 b(is,)i(of)e(course,)i(a)f(F)-8 b(rame)28
-b(\()p Fu(x)p FG(7\))h(and)e(also)h(a)g(Mapping)f(\()p
-Fu(x)p FG(5\),)j(so)e(it)g(inherits)f(all)h(the)g(prop)s(erties)0
-1674 y(and)d(b)s(eha)m(viour)h(of)g(these)h(t)m(w)m(o)g(ancestral)g
-(classes.)41 b(When)25 b(used)h(as)g(a)g(Mapping,)h(a)g(SkyF)-8
-b(rame)26 b(implemen)m(ts)0 1787 y(a)41 b(unit)g(transformation,)j
-(exactly)f(lik)m(e)f(a)g(basic)f(F)-8 b(rame)42 b(\()p
-Fu(x)p FG(7.3\))h(or)e(a)h(UnitMap,)i(so)d(this)g(asp)s(ect)h(of)f(its)
-0 1900 y(b)s(eha)m(viour)30 b(is)g(not)h(of)g(great)g(imp)s(ortance.)0
-2079 y(When)k(used)g(as)h(a)g(F)-8 b(rame,)39 b(ho)m(w)m(ev)m(er,)f(a)f
-(SkyF)-8 b(rame)36 b(represen)m(ts)f(a)h(2-dimensional)h
-Fx(spheric)-5 b(al)38 b FG(co)s(ordinate)0 2192 y(system,)31
-b(in)g(whic)m(h)f(the)h(shortest)g(distance)g(b)s(et)m(w)m(een)h(t)m(w)
-m(o)g(p)s(oin)m(ts)e(is)h(a)g(great)h(circle.)43 b(A)31
-b(SkyF)-8 b(rame)31 b(there-)0 2304 y(fore)41 b(alw)m(a)m(ys)h(has)e
-(exactly)i(t)m(w)m(o)g(axes)g(whic)m(h)e(represen)m(t)g(the)h
-(longitude)g(and)f(latitude)i(of)f(a)g(co)s(ordinate)0
-2417 y(system)31 b(residing)f(on)g(the)h(celestial)i(sphere.)41
-b(Man)m(y)31 b(suc)m(h)f(co)s(ordinate)i(systems)e(can)h(b)s(e)f
-(represen)m(ted)h(b)m(y)f(a)0 2530 y(SkyF)-8 b(rame,)31
-b(as)g(w)m(e)f(will)h(see)g(shortly)-8 b(.)0 2709 y(A)32
-b(SkyF)-8 b(rame)32 b(can)f(represen)m(t)h(an)m(y)g(of)g(the)f
-(commonly)i(used)d(celestial)k(co)s(ordinate)f(systems.)44
-b(Optionally)-8 b(,)0 2822 y(the)29 b(origin)g(of)g(the)g
-(longitude/latitude)i(system)e(can)g(b)s(e)f(mo)m(v)m(ed)i(to)g(an)m(y)
-f(sp)s(eci\014ed)f(p)s(oin)m(t)h(in)f(the)h(standard)0
-2935 y(celestial)k(system,)e(allo)m(wing)h(a)f(SkyF)-8
-b(rame)30 b(to)h(represen)m(t)g(o\013sets)g(from)f(a)h(sp)s(eci\014ed)e
-(sky)i(p)s(osition.)0 3114 y(When)c(it)g(is)h(\014rst)e(created,)j(a)e
-(SkyF)-8 b(rame's)28 b(axes)g(are)f(alw)m(a)m(ys)i(in)e(the)g(order)f
-(\(longitude,)j(latitude\))f(but)f(this)0 3227 y(can)36
-b(b)s(e)e(c)m(hanged,)k(if)d(required,)h(b)m(y)f(using)g(the)g(AST)p
-Fy(_)p FG(PERMAXES)f(routine)i(\()p Fu(x)p FG(7.9\).)57
-b(The)35 b(order)g(of)g(the)0 3340 y(axes)e(can)g(b)s(e)f(determined)h
-(at)g(an)m(y)g(time)h(using)e(the)h(LatAxis)g(and)f(LonAxis)h
-(attributes.)48 b(A)33 b(SkyF)-8 b(rame's)0 3453 y(co)s(ordinate)40
-b(v)-5 b(alues)40 b(are)f(alw)m(a)m(ys)i(stored)e(as)h(angles)g(in)e
-(\(double)i(precision\))f(radians,)i(regardless)f(of)f(the)0
-3566 y(setting)31 b(of)g(the)g(Unit)f(attribute.)0 3914
-y Fw(8.2)112 b(Creating)38 b(a)g(SkyF)-9 b(rame)0 4160
-y FG(The)20 b(SkyF)-8 b(rame)21 b(constructor)g(function)f(is)h
-(particularly)g(simple)f(and)g(a)h(SkyF)-8 b(rame)21
-b(with)f(default)h(attributes)0 4273 y(is)30 b(created)i(as)e(follo)m
-(ws:)262 4571 y Ft(INCLUDE)40 b('AST_PAR')262 4671 y(INTEGER)g
-(SKYFRAME,)g(STATUS)262 4870 y(STATUS)h(=)i(0)262 5069
-y(...)262 5269 y(SKYFRAME)d(=)j(AST_SKYFRAME\()38 b(')43
-b(',)g(STATUS)e(\))0 5580 y FG(Suc)m(h)33 b(a)h(SkyF)-8
-b(rame)35 b(w)m(ould)e(represen)m(t)h(the)g(default)g(celestial)j(co)s
-(ordinate)d(system)g(whic)m(h,)h(at)f(presen)m(t,)h(is)0
-5693 y(the)c(ICRS)e(system)h(\(the)h(default)g(w)m(as)g("FK5\(J2000\)")
-i(in)e(v)m(ersions)f(of)h(AST)e(prior)h(to)h(3.0\).)p
-eop end
-%%Page: 80 90
-TeXDict begin 80 89 bop 0 52 a FG(80)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y Fw(8.3)112 b(Sp)s(ecifying)39 b(a)f(P)m(articular)f(Celestial)i(Co)s
-(ordinate)f(System)0 579 y FG(F)-8 b(or)41 b(man)m(y)g(purp)s(oses,)h
-(the)e(ICRS)g(co)s(ordinate)h(system)g(is)g(p)s(erfectly)f(adequate.)73
-b(In)40 b(order)g(to)h(supp)s(ort)0 692 y(con)m(v)m(ersion)27
-b(b)s(et)m(w)m(een)e(a)h(v)-5 b(ariet)m(y)27 b(of)e(celestial)j(co)s
-(ordinate)e(systems,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)e(can)f(create)i
-(SkyF)-8 b(rames)0 805 y(that)31 b(represen)m(t)f(an)m(y)h(of)g(these.)
-0 971 y(Selection)48 b(of)f(a)g(particular)h(co)s(ordinate)f(system)g
-(is)g(p)s(erformed)e(simply)i(b)m(y)f(setting)i(a)f(v)-5
-b(alue)48 b(for)e(the)0 1084 y(SkyF)-8 b(rame's)23 b(\(c)m(haracter)h
-(string\))e(System)g(attribute.)39 b(This)21 b(setting)j(is)e(most)h
-(con)m(v)m(enien)m(tly)h(done)e(when)f(the)0 1197 y(SkyF)-8
-b(rame)31 b(is)f(created.)42 b(F)-8 b(or)31 b(example,)h(a)e(SkyF)-8
-b(rame)31 b(represen)m(ting)g(the)f(old)h(FK4)g(\(B1950.0\))j(co)s
-(ordinate)0 1310 y(system)d(w)m(ould)f(b)s(e)f(created)j(b)m(y:)262
-1571 y Ft(SKYFRAME)40 b(=)j(AST_SKYFRAME\()38 b('System=FK4',)g(STATUS)
-j(\))0 1846 y FG(Note)48 b(that)g(sp)s(ecifying)f(\\System=FK4")h(also)
-g(c)m(hanges)g(the)f(asso)s(ciated)h(equino)m(x)g(\(from)f(J2000.0)i
-(to)0 1959 y(B1950.0\).)76 b(This)41 b(is)g(b)s(ecause)g(the)g(default)
-h(v)-5 b(alue)42 b(of)f(the)g(SkyF)-8 b(rame's)42 b(Equino)m(x)f
-(attribute)h(\()p Fu(x)p FG(8.4\))h(de-)0 2072 y(p)s(ends)29
-b(on)h(the)g(System)h(attribute)g(setting.)0 2238 y(Y)-8
-b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5 b(alue)30
-b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)f(needed.)
-40 b(The)29 b(v)-5 b(alues)0 2351 y(supp)s(orted)40 b(are)h(set)h(out)g
-(in)f(the)h(attribute's)g(description)f(in)g(App)s(endix)f(C)h(and)g
-(include)g(a)h(v)-5 b(ariet)m(y)42 b(of)0 2464 y(equatorial)32
-b(co)s(ordinate)f(systems,)g(together)h(with)e(ecliptic)i(and)e
-(galactic)j(co)s(ordinates.)0 2631 y(General)43 b(spherical)g(co)s
-(ordinates)g(are)g(supp)s(orted)e(b)m(y)h(sp)s(ecifying)g
-(\\System=unkno)m(wn".)76 b(Y)-8 b(ou)43 b(should)0 2744
-y(note,)32 b(though,)g(that)g(no)f(Mapping)g(can)h(b)s(e)f(created)h
-(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(\\unkno)m(wn")f(co)s
-(ordinates)h(and)0 2857 y(an)m(y)f(of)f(the)h(other)f(celestial)j(co)s
-(ordinate)f(systems)e(\(see)h Fu(x)p FG(12)h(\).)0 3164
-y Fw(8.4)112 b(A)m(ttributes)37 b(whic)m(h)g(Qualify)i(Celestial)g(Co)s
-(ordinate)f(Systems)0 3391 y FG(Man)m(y)30 b(celestial)h(co)s(ordinate)
-f(systems)f(ha)m(v)m(e)i(some)e(additional)h(free)f(parameters)h(whic)m
-(h)e(serv)m(e)i(to)g(iden)m(tify)0 3504 y(a)f(particular)f(co)s
-(ordinate)h(system)g(from)f(amongst)h(a)f(broader)g(class)h(of)f
-(related)i(co)s(ordinate)f(systems.)40 b(F)-8 b(or)0
-3617 y(example,)24 b(the)e(FK5)h(\(J2010.0\))h(system)e(is)g
-(distinguished)f(from)g(the)h(FK5)h(\(J2000.0\))h(system)e(b)m(y)g(a)g
-(di\013eren)m(t)0 3730 y(equino)m(x|and)34 b(the)g(co)s(ordinates)g(of)
-g(a)h(\014xed)e(astronomical)i(source)f(w)m(ould)g(ha)m(v)m(e)h
-(di\013eren)m(t)f(v)-5 b(alues)34 b(when)0 3843 y(expressed)c(in)g
-(these)h(t)m(w)m(o)g(systems.)0 4010 y(In)26 b(AST,)f(these)i(free)g
-(parameters)f(are)h(represen)m(ted)f(b)m(y)h(additional)g(SkyF)-8
-b(rame)27 b(attributes,)h(eac)m(h)f(of)g(whic)m(h)0 4123
-y(has)j(a)g(default)g(appropriate)g(to)g(\()p Fx(i.e.)g
-FG(de\014ned)e(b)m(y\))i(the)g(setting)h(of)f(the)g(main)g(System)g
-(attribute.)41 b(Eac)m(h)30 b(of)0 4235 y(these)c Fx(qualifying)i
-(attributes)e FG(ma)m(y)-8 b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d
-(assigned)h(an)f(explicit)i(v)-5 b(alue)26 b(so)f(as)h(to)g(select)h(a)
-f(particular)0 4348 y(co)s(ordinate)38 b(system.)62 b(Note,)41
-b(it)d(is)f(usually)g(b)s(est)g(to)h(assign)g(explicit)h(v)-5
-b(alues)37 b(whenev)m(er)h(p)s(ossible)f(rather)0 4461
-y(than)28 b(relying)i(on)e(defaults.)40 b(A)m(ttribute)30
-b(should)e(only)h(b)s(e)f(left)h(at)g(their)g(default)g(v)-5
-b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0 4574 y(what)e(v)-5
-b(alue)27 b(is)g(used.)39 b(In)26 b(certain)i(circumstances)g
-(\(particularly)-8 b(,)29 b(when)d(aligning)i(t)m(w)m(o)g(F)-8
-b(rames\),)29 b(a)e(default)0 4687 y(v)-5 b(alue)37 b(for)g(an)g
-(attribute)h(ma)m(y)f(b)s(e)g(replaced)g(b)m(y)g(the)g(v)-5
-b(alue)37 b(from)g(another)g(similar)g(F)-8 b(rame.)62
-b(Suc)m(h)36 b(v)-5 b(alue)0 4800 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-4913 y(relying)31 b(on)f(the)h(default.)0 5080 y(The)f(main)g(SkyF)-8
-b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f(attribute)
-h(are:)227 5354 y FE(Ep)s(o)s(c)m(h)427 5467 y FG(This)i(attribute)h
-(is)g(inherited)f(from)g(the)h(F)-8 b(rame)34 b(class.)51
-b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)427
-5580 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 5693
-y(ally)32 b(the)e(date)h(of)g(observ)-5 b(ation\).)p
-eop end
-%%Page: 81 91
-TeXDict begin 81 90 bop 0 52 a Fz(8.5)92 b(Using)31 b(Default)g(SkyF)-8
-b(rame)31 b(A)m(ttributes)2067 b FG(81)227 351 y FE(Equino)m(x)427
-464 y FG(This)39 b(v)-5 b(alue)40 b(is)f(used)f(to)i(qualify)g
-(celestial)i(co)s(ordinate)e(systems)f(that)h(are)g(notionally)427
-577 y(based)27 b(on)g(the)g(Earth's)g(equator)h(and/or)f(the)h
-(ecliptic)h(\(the)e(plane)g(of)h(the)f(Earth's)g(orbit)427
-690 y(around)36 b(the)g(Sun\).)58 b(The)36 b(p)s(osition)h(of)f(either)
-h(of)g(these)g(planes)f(is)h(di\016cult)f(to)i(sp)s(ecify)427
-803 y(precisely)-8 b(,)30 b(so)e(in)g(practice)i(a)e(mo)s(del)g
-Fx(me)-5 b(an)29 b FG(equator)g(and/or)f(ecliptic)i(are)e(used)g
-(instead.)427 916 y(These,)41 b(together)g(with)d(the)i(p)s(oin)m(t)f
-(on)f(the)h(sky)g(that)h(de\014nes)e(the)h(co)s(ordinate)h(origin)427
-1029 y(\(termed)i(the)g Fx(me)-5 b(an)45 b(e)-5 b(quinox)p
-FG(\))42 b(mo)m(v)m(e)h(with)f(time)g(according)h(to)g(some)f(mo)s(del)
-f(whic)m(h)427 1142 y(smo)s(othes)33 b(out)g(the)h(more)f(rapid)f
-(\015uctuations.)48 b(The)33 b(SkyF)-8 b(rame)33 b(class)h(supp)s(orts)
-d(b)s(oth)427 1255 y(the)g(old)f(FK4)h(mo)s(del)f(and)g(the)h(new)m(er)
-f(FK5)h(one.)427 1385 y(Co)s(ordinates)c(expressed)f(in)g(an)m(y)h(of)g
-(these)g(systems)f(v)-5 b(ary)27 b(with)f(time)h(due)f(to)h(mo)m(v)m
-(emen)m(t)427 1497 y(\(b)m(y)33 b(de\014nition\))g(of)g(the)g(co)s
-(ordinate)g(system)g(itself,)h(and)f(m)m(ust)f(therefore)h(b)s(e)f
-(quali\014ed)427 1610 y(b)m(y)i(a)h(momen)m(t)g(in)e(time)i(\(the)g
-Fx(ep)-5 b(o)g(ch)38 b(of)e(the)g(me)-5 b(an)37 b(e)-5
-b(quinox,)36 b FG(or)e(\\equino)m(x")h(for)f(short\))427
-1723 y(whic)m(h)c(sp)s(eci\014es)f(the)g(p)s(osition)h(of)g(the)f(mo)s
-(del)h(co)s(ordinate)g(system)g(on)f(the)h(sky)-8 b(.)40
-b(This)29 b(is)427 1836 y(the)i(role)g(of)f(the)h(Equino)m(x)f
-(attribute.)427 1966 y(Note)i(that)f(it)h(is)e(quite)h(v)-5
-b(alid)31 b(and)f(common)h(to)h(relate)g(the)f(p)s(osition)f(of)h(a)g
-(source)g(to)g(an)427 2079 y(equino)m(x)36 b(other)g(than)f(the)g(date)
-h(of)g(observ)-5 b(ation.)56 b(Usually)36 b(a)f(standard)g(equino)m(x)h
-(suc)m(h)427 2192 y(as)27 b(J2000.0)i(is)d(used,)h(meaning)g(that)g
-(the)g(co)s(ordinates)g(are)g(referred)f(to)h(axes)g(de\014ned)e(b)m(y)
-427 2305 y(where)32 b(the)h(mo)s(del)f(mean)h(equator)g(and)f(ecliptic)
-i(w)m(ould)e(lie)h(on)g(the)f(sky)h(at)g(the)g(Julian)427
-2418 y(ep)s(o)s(c)m(h)d(J2000.0.)0 2683 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-2796 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 2909 y(attribute)41 b(\(also)h(in)f(App)s(endix)e(C\).)
-71 b(F)-8 b(or)41 b(the)g(in)m(terested)h(reader,)h(an)e(excellen)m(t)i
-(o)m(v)m(erview)f(of)f(celestial)0 3022 y(co)s(ordinate)31
-b(systems)g(can)f(also)i(b)s(e)d(found)g(in)h(the)h(do)s(cumen)m
-(tation)g(for)f(the)h(SLALIB)f(library)g(\(SUN/67\).)0
-3185 y(The)c(v)-5 b(alue)28 b(of)f(these)g(qualifying)g(attributes)h
-(is)f(most)g(con)m(v)m(enien)m(tly)i(set)f(at)f(the)h(same)f(time)g(as)
-h(the)f(System)0 3298 y(v)-5 b(alue,)31 b Fx(e.g.)f FG(when)f(a)i(SkyF)
--8 b(rame)31 b(is)f(created.)42 b(F)-8 b(or)31 b(instance:)262
-3550 y Ft(SKYFRAME)40 b(=)j(AST_SKYFRAME\()38 b('System=Ecliptic,)f
-(Equinox=J2005.5')o(,)g(STATUS)k(\))0 3815 y FG(w)m(ould)22
-b(create)h(a)g(SkyF)-8 b(rame)22 b(represen)m(ting)g(an)g(ecliptic)i
-(co)s(ordinate)f(system)f(referred)f(to)i(the)f(mean)g(equino)m(x)0
-3928 y(and)30 b(ecliptic)i(of)e(Julian)g(ep)s(o)s(c)m(h)h(J2005.5.)0
-4092 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 4205 y(the)28 b(main)g(System)g(v)-5
-b(alue.)41 b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g
-(but)e(are)h(not)h(used)e(unless)h(the)g(System)g(v)-5
-b(alue)28 b(is)0 4318 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h
-(relev)-5 b(an)m(t.)0 4614 y Fw(8.5)112 b(Using)38 b(Default)h(SkyF)-9
-b(rame)38 b(A)m(ttributes)0 4837 y FG(The)43 b(default)i(v)-5
-b(alues)44 b(supplied)f(for)g(man)m(y)h(SkyF)-8 b(rame)45
-b(attributes)f(will)g(dep)s(end)f(on)h(the)g(v)-5 b(alue)44
-b(of)g(the)0 4950 y(SkyF)-8 b(rame's)29 b(System)f(attribute.)41
-b(In)28 b(practice,)i(this)f(means)f(that)h(there)g(is)g(usually)f
-(little)i(need)f(to)g(sp)s(ecify)0 5063 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-5176 y(illustrated)31 b(b)m(y)f(using)g(AST)p Fy(_)p
-FG(SHO)m(W)g(to)h(examine)g(a)g(SkyF)-8 b(rame,)31 b(as)f(follo)m(ws:)
-262 5428 y Ft(CALL)41 b(AST_SHOW\()f(AST_SKYFRAME\()f('System=FK4-NO-)o
-(E,)e(Epoch=1958',)i(STATUS)i(\),)i(STATUS)e(\))0 5693
-y FG(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)m(e)h
-(the)e(follo)m(wing:)p eop end
-%%Page: 82 92
-TeXDict begin 82 91 bop 0 52 a FG(82)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))275 351
-y Fy(Begin)46 b(SkyFrame)428 b(#)47 b(Description)e(of)i(celestial)e
-(coordinate)g(system)227 464 y(#)143 b(Title)47 b(=)g("FK4)g
-(equatorial)e(coordinates;)f(no)j(E-terms;)f(mean)g(equinox)g(B1950.0;)
-227 577 y(epoch)h(B1958.0")141 b(#)47 b(Title)f(of)i(coordinate)d
-(system)418 690 y(Naxes)i(=)g(2)143 b(#)47 b(Number)f(of)i(coordinate)d
-(axes)227 803 y(#)143 b(Domain)46 b(=)i("SKY")285 b(#)47
-b(Coordinate)e(system)h(domain)418 916 y(Epoch)h(=)g(1958)381
-b(#)47 b(Besselian)e(epoch)i(of)g(observation)227 1029
-y(#)143 b(Lbl1)47 b(=)g("Right)f(ascension")189 b(#)47
-b(Label)f(for)h(axis)g(1)227 1142 y(#)143 b(Lbl2)47 b(=)g
-("Declination")379 b(#)47 b(Label)f(for)h(axis)g(2)418
-1255 y(System)f(=)i("FK4-NO-E")427 b(#)47 b(Coordinate)e(system)h(type)
-227 1367 y(#)143 b(Uni1)47 b(=)g("hh:mm:ss.s")427 b(#)47
-b(Units)f(for)h(axis)g(1)227 1480 y(#)143 b(Uni2)47 b(=)g("ddd:mm:ss")
-93 b(#)47 b(Units)g(for)f(axis)h(2)227 1593 y(#)143 b(Dir1)47
-b(=)g(0)191 b(#)47 b(Plot)g(axis)g(1)g(in)g(reverse)f(direction)227
-1706 y(#)143 b(Bot2)47 b(=)g(-1.5707963267949)235 b(#)47
-b(Lowest)f(legal)g(axis)h(value)227 1819 y(#)143 b(Top2)47
-b(=)g(1.5707963267949)283 b(#)47 b(Highest)f(legal)g(axis)h(value)418
-1932 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561 2045
-y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)561
-2158 y(End)i(SkyAxis)418 2271 y(Ax2)g(=)334 b(#)47 b(Axis)g(number)f(2)
-561 2384 y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)
-561 2497 y(End)i(SkyAxis)275 2609 y(IsA)g(Frame)285 b(#)47
-b(Coordinate)e(system)h(description)227 2722 y(#)143
-b(Eqnox)47 b(=)g(1950)381 b(#)47 b(Besselian)e(epoch)i(of)g(mean)g
-(equinox)275 2835 y(End)g(SkyFrame)0 3083 y FG(Note)40
-b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h(\\)p
-Fy(#)p FG(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g(the)g
-(line\))h(for)0 3196 y(attributes)32 b(suc)m(h)g(as)g(the)g(Title,)h
-(axis)f(Lab)s(els)g(and)f(F)-8 b(ormat)33 b(sp)s(eci\014ers)e(are)h
-(all)h(set)f(to)g(v)-5 b(alues)32 b(appropriate)0 3309
-y(for)e(the)h(particular)f(equatorial)i(co)s(ordinate)g(system)e(that)h
-(the)g(SkyF)-8 b(rame)30 b(represen)m(ts.)0 3468 y(This)41
-b(means,)j(for)d(example,)k(that)d(if)f(w)m(e)h(w)m(ere)g(to)g(use)f
-(this)g(SkyF)-8 b(rame)42 b(to)g(format)f(a)h(righ)m(t)g(ascension)0
-3581 y(v)-5 b(alue)36 b(stored)f(in)g(radians)g(using)g(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)36 b(\()p Fu(x)p FG(7.6\),)j(it)d(w)m(ould)f
-(automatically)j(result)e(in)f(a)g(string)0 3694 y(in)f(sexagesimal)i
-(notation)f(\(suc)m(h)f(as)h(\\12:14:35.7"\))k(suitable)34
-b(for)g(displa)m(y)-8 b(.)53 b(If)33 b(w)m(e)i(c)m(hanged)f(the)h(v)-5
-b(alue)34 b(of)0 3807 y(the)29 b(SkyF)-8 b(rame's)30
-b(Digits)g(attribute)g(\(whic)m(h)f(is)g(inherited)g(from)f(the)h(F)-8
-b(rame)30 b(class\),)h(the)e(n)m(um)m(b)s(er)f(of)h(digits)0
-3920 y(app)s(earing)h(w)m(ould)g(also)h(c)m(hange)h(accordingly)-8
-b(.)0 4079 y(These)24 b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i
-(for)f(a)g(System)g(v)-5 b(alue)25 b(of)f(\\FK4-NO-E",)j(but)c(if)h(a)h
-(di\013eren)m(t)g(System)0 4192 y(v)-5 b(alue)31 b(w)m(ere)g(set,)g
-(the)g(defaults)g(w)m(ould)f(b)s(e)g(corresp)s(ondingly)g(di\013eren)m
-(t.)42 b(F)-8 b(or)31 b(example,)h(ecliptic)g(longitude)0
-4305 y(is)39 b(traditionally)h(expressed)f(in)f(degrees,)k(so)d
-(setting)h(\\System=ecliptic")h(w)m(ould)d(result)h(in)g(co)s(ordinate)
-0 4417 y(v)-5 b(alues)31 b(b)s(eing)f(formatted)h(as)f(degrees)h(b)m(y)
-f(default.)0 4577 y(Of)35 b(course,)j(if)e(y)m(ou)h(do)f(not)g(lik)m(e)
-h(an)m(y)g(of)f(these)h(defaults,)g(y)m(ou)g(ma)m(y)f(alw)m(a)m(ys)i(o)
-m(v)m(er-ride)f(them)f(b)m(y)g(setting)0 4689 y(explicit)c(attribute)f
-(v)-5 b(alues)31 b(y)m(ourself.)0 4977 y Fw(8.6)112 b(F)-9
-b(ormatting)38 b(Celestial)g(Co)s(ordinates)0 5195 y
-FG(SkyF)-8 b(rames)21 b(use)g(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)21 b(for)f(formatting)i(co)s(ordinate)g(v)-5 b(alues)21
-b(in)f(the)h(same)h(w)m(a)m(y)f(as)h(other)f(F)-8 b(rames)0
-5308 y(\()p Fu(x)p FG(7.6\).)61 b(Ho)m(w)m(ev)m(er,)40
-b(they)d(o\013er)g(a)f(di\013eren)m(t)h(set)g(of)g(formatting)g
-(options)g(more)f(appropriate)h(to)g(celestial)0 5421
-y(co)s(ordinates.)0 5580 y(The)e(Digits)i(attribute)g(of)e(a)i(SkyF)-8
-b(rame)36 b(b)s(eha)m(v)m(es)g(in)f(essen)m(tially)j(the)e(same)g(w)m
-(a)m(y)g(as)g(for)f(a)h(basic)h(F)-8 b(rame)0 5693 y(\()p
-Fu(x)p FG(7.6\),)28 b(so)d(the)g(precision)f(with)h(whic)m(h)f
-(celestial)j(co)s(ordinates)e(are)g(displa)m(y)m(ed)g(can)g(also)h(b)s
-(e)e(adjusted)f(in)i(this)p eop end
-%%Page: 83 93
-TeXDict begin 83 92 bop 0 52 a Fz(8.6)92 b(F)-8 b(ormatting)32
-b(Celestial)h(Co)s(ordinates)2158 b FG(83)0 351 y(w)m(a)m(y)-8
-b(.)50 b(Ho)m(w)m(ev)m(er,)35 b(the)e(range)h(of)f(format)g(sp)s
-(eci\014ers)f(that)h(can)g(b)s(e)g(giv)m(en)g(for)g(the)g(F)-8
-b(ormat\(axis\))35 b(attribute,)0 464 y(and)30 b(the)g(default)h
-(format)g(resulting)f(from)g(an)m(y)h(particular)f(Digits)i(v)-5
-b(alue,)31 b(is)g(di\013eren)m(t.)0 624 y(The)f(syn)m(tax)h(of)f(SkyF)
--8 b(rame)31 b(format)g(sp)s(eci\014ers)e(is)i(detailed)g(under)e(the)h
-(description)h(of)f(the)h(F)-8 b(ormat\(axis\))0 737
-y(attribute)31 b(in)f(App)s(endix)e(C.)40 b(Brie\015y)-8
-b(,)31 b(ho)m(w)m(ev)m(er,)h(it)e(allo)m(ws)i(celestial)g(co)s
-(ordinates)f(to)g(b)s(e)e(expressed)h(either)0 850 y(as)h(angles)g(or)f
-(times)h(and)f(to)h(include)f(one)h(or)f(more)h(of)f(the)h(\014elds:)
-336 1100 y Fu(\017)46 b FG(degrees)31 b(or)g(hours)336
-1243 y Fu(\017)46 b FG(arc-min)m(utes)31 b(or)g(min)m(utes)336
-1386 y Fu(\017)46 b FG(arc-seconds)31 b(or)g(seconds)0
-1637 y(with)h(a)h(sp)s(eci\014ed)e(n)m(um)m(b)s(er)h(of)g(decimal)h
-(places)h(for)e(the)g(\014nal)g(\014eld.)47 b(A)32 b(range)h(of)f
-(\014eld)g(separators)h(is)g(also)0 1750 y(a)m(v)-5 b(ailable,)33
-b(as)e(the)f(follo)m(wing)i(examples)f(sho)m(w:)p 811
-1916 2158 4 v 809 2029 4 113 v 861 1995 a FE(F)-9 b(ormat)35
-b(Sp)s(eci\014er)p 1667 2029 V 100 w(Example)g(F)-9 b(ormatted)34
-b(V)-9 b(alue)p 2967 2029 V 811 2033 2158 4 v 811 2049
-V 809 2162 4 113 v 861 2128 a Fy(d)p 1667 2162 V 809
-w(219)p 2967 2162 V 809 2275 V 861 2241 a(d.3)p 1667
-2275 V 713 w(219.123)p 2967 2275 V 809 2388 V 861 2354
-a(dm)p 1667 2388 V 761 w(219:05)p 2967 2388 V 809 2501
-V 861 2467 a(dm.2)p 1667 2501 V 665 w(219:05.44)p 2967
-2501 V 809 2614 V 861 2580 a(dms)p 1667 2614 V 713 w(219:05:42)p
-2967 2614 V 809 2727 V 861 2693 a(hms.1)p 1667 2727 V
-617 w(15:44:13.8)p 2967 2727 V 809 2839 V 861 2806 a(bdms.2)p
-1667 2839 V 569 w(219)47 b(05)g(42.81)p 2967 2839 V 809
-2952 V 861 2919 a(lhms.3)p 1667 2952 V 569 w(15h44m13.88s)p
-2967 2952 V 809 3065 V 861 3031 a(+zlhms)p 1667 3065
-V 569 w(+06h10m44s)p 2967 3065 V 809 3178 V 861 3144
-a(ms.1)p 1667 3178 V 665 w(13145:42.8)p 2967 3178 V 809
-3291 V 861 3257 a(lmst.3)p 1667 3291 V 569 w(876m22.854s)p
-2967 3291 V 809 3404 V 861 3370 a(s.2)p 1667 3404 V 713
-w(788742.81)p 2967 3404 V 811 3407 2158 4 v 0 3616 a
-FG(Note)32 b(the)e(follo)m(wing)i(k)m(ey)f(p)s(oin)m(ts:)136
-3867 y Fu(\017)46 b FG(The)f(required)f(\014elds)g(are)i(sp)s
-(eci\014ed)e(using)h(c)m(haracters)h(c)m(hosen)g(from)e(either)i
-(\\dms")f(or)f(\\hms")227 3979 y(according)36 b(to)f(whether)e(the)i(v)
--5 b(alue)35 b(is)f(to)h(b)s(e)f(formatted)h(as)f(an)g(angle)i(\(in)e
-(degrees\))h(or)g(a)f(time)h(\(in)227 4092 y(hours\).)136
-4277 y Fu(\017)46 b FG(If)38 b(no)g(degrees)g(or)g(hours)f(\014eld)h
-(is)g(required,)i(the)e(distinction)g(b)s(et)m(w)m(een)h(angle)g(and)f
-(time)g(ma)m(y)h(b)s(e)227 4390 y(made)31 b(b)m(y)f(including)g(\\t")h
-(to)h(request)e(time.)136 4575 y Fu(\017)46 b FG(The)35
-b(n)m(um)m(b)s(er)g(of)g(decimal)i(places)f(\(for)g(the)g(\014nal)f
-(\014eld\))g(is)h(indicated)g(using)f(\\)p Fy(.)p FG(")57
-b(follo)m(w)m(ed)37 b(b)m(y)f(an)227 4687 y(in)m(teger.)k(An)23
-b(asterisk)i(can)e(b)s(e)g(used)g(in)g(place)i(of)f(an)f(in)m(teger,)k
-(in)c(whic)m(h)g(case)i(the)f(n)m(um)m(b)s(er)e(of)h(decimal)227
-4800 y(places)34 b(is)g(c)m(hosen)f(so)h(that)g(the)f(total)i(n)m(um)m
-(b)s(er)d(of)h(digits)h(in)f(the)h(formatted)g(v)-5 b(alue)33
-b(is)h(equal)f(to)h(the)227 4913 y(v)-5 b(alue)31 b(of)g(the)f(Digits)i
-(attribute.)136 5098 y Fu(\017)46 b FG(\\b")31 b(causes)f(\014elds)g
-(to)g(b)s(e)g(separated)g(b)m(y)g(blanks,)g(while)g(\\l")h(causes)g
-(them)f(to)g(b)s(e)g(separated)g(b)m(y)g(the)227 5211
-y(appropriate)h(letters)g(\(the)g(default)g(b)s(eing)f(a)g(colon\).)136
-5395 y Fu(\017)46 b FG(\\z")32 b(causes)f(padding)e(with)h(leading)h
-(zeros.)136 5580 y Fu(\017)46 b FG(\\+")41 b(cause)g(a)g(plus)f(sign)g
-(to)i(b)s(e)d(pre\014xed)h(to)h(p)s(ositiv)m(e)h(v)-5
-b(alues)40 b(\(negativ)m(e)j(v)-5 b(alues)41 b(alw)m(a)m(ys)h(ha)m(v)m
-(e)g(a)227 5693 y(min)m(us)30 b(sign\).)p eop end
-%%Page: 84 94
-TeXDict begin 84 93 bop 0 52 a FG(84)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FG(The)42 b(formatting)i(p)s(erformed)d(b)m(y)h(a)h(SkyF)-8
-b(rame)43 b(is)f(also)i(in\015uenced)d(b)m(y)i(the)g(AsTime\(axis\))g
-(attribute,)0 464 y(whic)m(h)31 b(has)f(a)h(b)s(o)s(olean)g(\(in)m
-(teger\))i(v)-5 b(alue)32 b(for)e(eac)m(h)i(SkyF)-8 b(rame)32
-b(axis.)42 b(It)31 b(determines)g(whether)f(the)h(default)0
-577 y(format)d(sp)s(eci\014er)g(for)f(an)h(axis)g(will)h(presen)m(t)f
-(v)-5 b(alues)28 b(as)g(angles)h(\()p Fx(e.g.)f FG(in)f(degrees\))i(if)
-f(it)g(is)g(zero,)i(or)e(as)g(times)0 690 y(\()p Fx(e.g.)i
-FG(in)g(hours\))g(if)g(it)h(is)f(non-zero.)0 879 y(The)44
-b(default)h(AsTime)g(v)-5 b(alue)45 b(dep)s(ends)e(on)h(the)h
-(celestial)i(co)s(ordinate)f(system)f(whic)m(h)f(the)h(SkyF)-8
-b(rame)0 992 y(represen)m(ts)45 b(whic)m(h,)k(in)44 b(turn,)k(dep)s
-(ends)43 b(on)i(its)h(System)e(attribute)i(v)-5 b(alue.)85
-b(F)-8 b(or)46 b(example,)k(equatorial)0 1105 y(longitude)34
-b(v)-5 b(alues)34 b(\(righ)m(t)h(ascension\))f(are)g(normally)g
-(expressed)f(in)h(hours,)f(whereas)h(ecliptic)h(longitudes)0
-1218 y(are)c(normally)f(expressed)g(in)g(degrees,)h(so)g(their)f
-(default)h(AsTime)f(v)-5 b(alues)31 b(will)g(re\015ect)g(this)f
-(di\013erence.)0 1408 y(The)h(v)-5 b(alue)32 b(of)g(the)g(AsTime)f
-(attribute)i(ma)m(y)f(b)s(e)f(set)h(explicitly)h(to)g(o)m(v)m(er-ride)g
-(these)f(defaults)f(if)h(required,)0 1521 y(with)e(the)g(formatting)h
-(precision)g(b)s(eing)f(determined)g(b)m(y)g(the)g
-(Digits/Digits\(axis\))35 b(v)-5 b(alue.)41 b(Alternativ)m(ely)-8
-b(,)0 1633 y(the)37 b(F)-8 b(ormat\(axis\))40 b(attribute)e(ma)m(y)g(b)
-s(e)e(set)i(explicitly)h(to)f(sp)s(ecify)f(b)s(oth)f(the)i(format)f
-(and)g(precision)g(re-)0 1746 y(quired.)63 b(Setting)39
-b(an)f(explicit)i(F)-8 b(ormat)39 b(v)-5 b(alue)39 b(alw)m(a)m(ys)h(o)m
-(v)m(er-rides)f(the)g(e\013ects)g(of)f(b)s(oth)g(the)g(Digits)i(and)0
-1859 y(AsTime)d(attributes)g(\(unless)g(the)g(F)-8 b(ormat)38
-b(v)-5 b(alue)38 b(do)s(es)e(not)h(sp)s(ecify)g(the)g(required)f(n)m
-(um)m(b)s(er)f(of)i(decimal)0 1972 y(places,)31 b(in)f(whic)m(h)h(case)
-g(Digits)h(is)e(used)g(to)h(determine)g(the)f(default)h(n)m(um)m(b)s
-(er)e(of)h(decimal)i(places\))0 2355 y Fw(8.7)112 b(Reading)39
-b(F)-9 b(ormatted)37 b(Celestial)i(Co)s(ordinates)0 2616
-y FG(The)f(pro)s(cess)g(of)g(con)m(v)m(erting)j(formatted)d(celestial)j
-(co)s(ordinates,)h(suc)m(h)c(as)g(migh)m(t)i(b)s(e)d(pro)s(duced)g(b)m
-(y)h(the)0 2729 y(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)22
-b(function)f(\()p Fu(x)p FG(8.6\),)26 b(in)m(to)d(n)m(umerical)f
-(\(double)g(precision\))g(co)s(ordinate)h(v)-5 b(alues)22
-b(is)g(p)s(erformed)0 2842 y(b)m(y)44 b(using)g(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T)45 b(\()p Fu(x)p FG(7.8\))i(and)c(passing)h
-(it)h(a)g(p)s(oin)m(ter)g(to)g(a)f(SkyF)-8 b(rame.)84
-b(The)43 b(use)i(of)f(a)0 2955 y(SkyF)-8 b(rame)26 b(means)g(that)h
-(the)f(range)g(of)g(input)f(formats)h(accepted)h(is)f(appropriate)g(to)
-h(p)s(ositions)f(on)g(the)g(sky)0 3068 y(expressed)k(as)g(angles)i
-(and/or)e(times,)h(while)g(the)f(returned)f(v)-5 b(alue)31
-b(is)g(in)f(radians.)0 3257 y(The)g(follo)m(wing)i(describ)s(es)d(the)i
-(forms)f(of)g(celestial)j(co)s(ordinate)e(whic)m(h)f(are)h(supp)s
-(orted:)136 3600 y Fu(\017)46 b FG(Y)-8 b(ou)36 b(ma)m(y)g(supply)e(an)
-h(optional)h(sign,)h(follo)m(w)m(ed)g(b)m(y)e(b)s(et)m(w)m(een)h(one)f
-(and)g(three)g(\014elds)g(represen)m(ting)227 3712 y(either)c(degrees,)
-g(arc-min)m(utes,)h(arc-seconds)f(or)f(hours,)g(min)m(utes,)g(seconds)h
-(\()p Fx(e.g.)f FG(\\)p Fu(\000)p FG(12)h(42)g(03"\).)136
-3954 y Fu(\017)46 b FG(Eac)m(h)35 b(\014eld)e(should)g(consist)h(of)g
-(a)g(sequence)g(of)g(one)g(or)f(more)h(digits,)i(whic)m(h)d(ma)m(y)h
-(include)g(leading)227 4066 y(zeros.)46 b(A)m(t)33 b(most)g(one)f
-(\014eld)g(ma)m(y)g(con)m(tain)h(a)g(decimal)g(p)s(oin)m(t,)f(in)g
-(whic)m(h)g(case)h(it)f(is)g(tak)m(en)h(to)g(b)s(e)e(the)227
-4179 y(\014nal)37 b(\014eld)f(\()p Fx(e.g.)g FG(decimal)i(degrees)f
-(migh)m(t)g(b)s(e)f(giv)m(en)i(as)e(\\124.707",)43 b(while)36
-b(degrees)h(and)f(decimal)227 4292 y(arc-min)m(utes)31
-b(migh)m(t)h(b)s(e)d(giv)m(en)j(as)e(\\)p Fu(\000)p FG(13)i(33.8"\).)
-136 4533 y Fu(\017)46 b FG(The)23 b(\014rst)g(\014eld)g(giv)m(en)h(ma)m
-(y)g(tak)m(e)h(an)m(y)f(v)-5 b(alue,)25 b(allo)m(wing)g(angles)g(and)d
-(times)i(outside)g(the)g(con)m(v)m(en)m(tional)227 4646
-y(ranges)i(to)h(b)s(e)e(represen)m(ted.)39 b(Ho)m(w)m(ev)m(er,)29
-b(subsequen)m(t)c(\014elds)h(m)m(ust)f(ha)m(v)m(e)i(v)-5
-b(alues)26 b(of)g(less)h(than)e(60)i(\()p Fx(e.g.)227
-4759 y FG(\\720)32 b(45)g(31")f(is)g(v)-5 b(alid,)31
-b(whereas)f(\\11)h(45)h(61")f(is)g(not\).)136 5000 y
-Fu(\017)46 b FG(Fields)26 b(ma)m(y)g(b)s(e)e(separated)h(b)m(y)g(white)
-h(space)f(or)g(b)m(y)g(\\:")39 b(\(colon\),)28 b(but)d(the)g(c)m(hoice)
-i(of)e(separator)h(m)m(ust)227 5113 y(b)s(e)h(used)g(consisten)m(tly)h
-(throughout)f(the)h(v)-5 b(alue.)40 b(Additional)28 b(white)g(space)f
-(ma)m(y)h(b)s(e)f(presen)m(t)g(around)227 5226 y(\014elds)j(and)g
-(separators)h(\()p Fx(e.g.)f FG(\\)p Fu(\000)g FG(2:)h(04)g(:)g
-(7.1"\).)136 5467 y Fu(\017)46 b FG(The)39 b(follo)m(wing)h(\014eld)e
-(iden)m(ti\014cation)j(c)m(haracters)f(ma)m(y)f(b)s(e)f(used)g(as)h
-(separators)h(to)f(replace)h(those)227 5580 y(ab)s(o)m(v)m(e)32
-b(\(or)f(ma)m(y)g(b)s(e)f(app)s(ended)f(to)i(the)g(\014nal)f
-(\014eld\),)h(in)f(order)g(to)i(iden)m(tify)f(the)f(\014eld)h(to)g
-(whic)m(h)f(they)227 5693 y(are)h(app)s(ended:)p eop
-end
-%%Page: 85 95
-TeXDict begin 85 94 bop 0 52 a Fz(8.7)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Celestial)g(Co)s(ordinates)1834
-b FG(85)477 339 y(d)124 b({)101 b(degrees)477 452 y(h)124
-b({)101 b(hours)477 565 y(m)e({)i(min)m(utes)30 b(\(of)h(arc)g(or)f
-(time\))477 678 y(s)139 b({)101 b(seconds)30 b(\(of)h(arc)g(or)f
-(time\))477 791 y Fy(')127 b FG({)101 b(arc-min)m(utes)477
-904 y Fy(")127 b FG({)101 b(arc-seconds)227 1113 y(Either)42
-b(lo)m(w)m(er)h(or)f(upp)s(er)e(case)j(ma)m(y)g(b)s(e)e(used.)75
-b(Fields)42 b(m)m(ust)g(b)s(e)f(giv)m(en)i(in)f(order)g(of)g
-(decreasing)227 1226 y(signi\014cance)32 b(\()p Fx(e.g.)e
-FG(\\)p Fu(\000)p FG(11D)h(3)p Fy(')g FG(14.4)p Fy(")p
-FG(")h(or)e(\\22h14m11.2s"\).)136 1417 y Fu(\017)46 b
-FG(The)30 b(presence)h(of)f(certain)i(\014eld)e(iden)m(ti\014cation)i
-(c)m(haracters)g(indicates)f(whether)f(the)g(v)-5 b(alue)31
-b(is)g(to)g(b)s(e)227 1529 y(in)m(terpreted)d(as)g(an)f(angle)h(or)g(a)
-g(time)g(\(with)f(24)i(hours)d(corresp)s(onding)g(to)i(360)h
-(degrees\),)g(as)f(follo)m(ws:)477 1743 y(d)99 b({)h(angle)477
-1856 y Fy(')i FG({)e(angle)477 1969 y Fy(")i FG({)e(angle)477
-2082 y(h)f({)h(time)227 2296 y(Incompatible)36 b(angle/time)i(iden)m
-(ti\014cation)f(c)m(haracters)g(ma)m(y)f(not)g(b)s(e)e(mixed)i(\()p
-Fx(e.g.)f FG(\\10h14)p Fy(')p FG(3)p Fy(")p FG(")i(is)227
-2409 y(not)e(v)-5 b(alid\).)56 b(The)34 b(remaining)h(\014eld)g(iden)m
-(ti\014cation)h(c)m(haracters)h(and)d(separators)h(do)g(not)g(sp)s
-(ecify)g(a)227 2522 y(preference)c(for)f(an)g(angle)h(or)g(a)f(time)i
-(and)d(ma)m(y)i(b)s(e)f(used)g(with)g(either.)136 2713
-y Fu(\017)46 b FG(If)38 b(no)h(preference)g(for)f(an)h(angle)g(or)g(a)g
-(time)h(is)e(expressed)g(an)m(ywhere)h(within)f(the)h(v)-5
-b(alue,)42 b(then)c(it)227 2826 y(is)i(in)m(terpreted)g(as)h(an)e
-(angle)i(if)f(the)g(F)-8 b(ormat)42 b(attribute)e(string)g(asso)s
-(ciated)h(with)f(the)g(SkyF)-8 b(rame)227 2939 y(axis)38
-b(generates)g(an)f(angle)h(and)e(as)h(a)h(time)f(otherwise.)61
-b(This)36 b(ensures)g(that)i(v)-5 b(alues)37 b(pro)s(duced)f(b)m(y)227
-3052 y(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T)31 b(\()p Fu(x)p
-FG(8.6\))h(are)f(correctly)h(in)m(terpreted)e(b)m(y)h(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T.)136 3243 y Fu(\017)46 b
-FG(Fields)c(ma)m(y)h(b)s(e)e(omitted,)k(in)d(whic)m(h)f(case)i(they)e
-(default)h(to)h(zero.)75 b(The)41 b(remaining)h(\014elds)f(ma)m(y)227
-3356 y(b)s(e)g(iden)m(ti\014ed)h(b)m(y)g(using)f(appropriate)h(\014eld)
-f(iden)m(ti\014cation)j(c)m(haracters)f(\(see)g(ab)s(o)m(v)m(e\))g
-(and/or)f(b)m(y)227 3469 y(adding)36 b(extra)g(colon)h(separators)g
-(\(e.g.)59 b(\\)p Fu(\000)p FG(05m13s")37 b(is)f(equiv)-5
-b(alen)m(t)38 b(to)f(\\)p Fu(\000)p FG(:05:13"\).)60
-b(If)36 b(a)g(\014eld)f(is)227 3581 y(not)j(iden)m(ti\014ed)f
-(explicitly)-8 b(,)41 b(it)c(is)g(assumed)g(that)g(adjacen)m(t)i
-(\014elds)d(ha)m(v)m(e)j(b)s(een)d(giv)m(en,)k(after)e(taking)227
-3694 y(accoun)m(t)32 b(of)f(an)m(y)f(extra)h(separator)g(c)m
-(haracters.)43 b(F)-8 b(or)31 b(example:)477 3903 y(10d)242
-b({)100 b(degrees)477 4016 y(10d12)152 b({)100 b(degrees)31
-b(and)e(arc-min)m(utes)477 4129 y(11:14)p Fy(")130 b
-FG({)100 b(arc-min)m(utes)31 b(and)f(arc-seconds)477
-4242 y(9h13s)161 b({)100 b(hours)29 b(and)h(seconds)g(of)g(time)477
-4355 y(:45:33)153 b({)100 b(min)m(utes)30 b(and)g(seconds)g(\(of)h(arc)
-g(or)f(time\))477 4468 y(:55:)243 b({)100 b(min)m(utes)30
-b(\(of)h(arc)g(or)f(time\))477 4581 y(::13)243 b({)100
-b(seconds)30 b(\(of)h(arc)g(or)f(time\))477 4694 y Fu(\000)p
-FG(6::2.5)102 b({)e(degrees/hours)30 b(and)g(seconds)g(\(of)h(arc)g(or)
-f(time\))477 4806 y(07m14)127 b({)100 b(min)m(utes)30
-b(and)g(seconds)g(\(of)h(arc)g(or)f(time\))477 4919 y
-Fu(\000)p FG(8:14)p Fy(')104 b FG({)c(degrees)31 b(and)e(arc-min)m
-(utes)477 5032 y Fu(\000)p FG(h3:14)101 b({)f(min)m(utes)30
-b(and)g(seconds)g(of)h(time)477 5145 y(h:2.1)192 b({)100
-b(seconds)30 b(of)g(time)136 5354 y Fu(\017)46 b FG(If)32
-b(\014elds)g(are)h(omitted)g(in)f(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(the)
-g(remaining)f(ones)h(cannot)g(b)s(e)f(iden)m(ti\014ed)g(uniquely)227
-5467 y(\(e.g.)56 b(\\01:02"\),)39 b(then)c(the)g(\014rst)f(\014eld)h
-(\(either)h(giv)m(en)f(explicitly)i(or)e(implied)g(b)m(y)f(an)h(extra)h
-(leading)227 5580 y(colon)c(separator\))g(is)f(tak)m(en)h(to)g(b)s(e)e
-(the)h(most)g(signi\014can)m(t)h(\014eld)f(that)g(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)31 b(w)m(ould)g(pro-)227 5693
-y(duce)h(when)e(formatting)j(a)f(v)-5 b(alue)32 b(\(using)f(the)h(F)-8
-b(ormat)33 b(attribute)f(asso)s(ciated)h(with)e(the)h(SkyF)-8
-b(rame)p eop end
-%%Page: 86 96
-TeXDict begin 86 95 bop 0 52 a FG(86)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))227 351
-y FG(axis\).)41 b(By)29 b(default,)g(this)g(means)f(that)h(the)g
-(\014rst)f(\014eld)g(will)g(normally)h(b)s(e)f(in)m(terpreted)h(as)f
-(degrees)h(or)227 464 y(hours.)40 b(Ho)m(w)m(ev)m(er,)32
-b(if)e(this)g(do)s(es)g(not)g(result)g(in)f(consisten)m(t)j(\014eld)d
-(iden)m(ti\014cation,)j(then)e(the)g(last)h(\014eld)227
-577 y(\(either)k(giv)m(en)h(explicitly)g(or)e(implied)g(b)m(y)h(an)f
-(extra)h(trailing)g(colon)h(separator\))f(is)f(tak)m(en)i(to)f(to)g(b)s
-(e)227 690 y(the)c(least)g(signi\014can)m(t)h(\014eld)e(that)h(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)30 b(w)m(ould)g(pro)s(duce.)0
-976 y(This)c(\014nal)g(con)m(v)m(en)m(tion)i(is)f(in)m(tended)f(to)h
-(ensure)f(that)h(v)-5 b(alues)27 b(formatted)g(b)m(y)f(AST)p
-Fy(_)p FG(F)m(ORMA)-8 b(T)27 b(whic)m(h)f(con-)0 1089
-y(tain)21 b(less)h(than)e(three)h(\014elds)g(will)g(b)s(e)f(correctly)i
-(in)m(terpreted)g(if)e(read)h(bac)m(k)h(using)e(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T,)22 b(ev)m(en)0 1202 y(if)h(they)g(do)g
-(not)g(con)m(tain)h(\014eld)f(iden)m(ti\014cation)h(c)m(haracters.)40
-b(Ho)m(w)m(ev)m(er,)27 b(it)c(also)h(a\013ects)h(other)e(forms)f(of)h
-(input.)0 1315 y(F)-8 b(or)34 b(example,)h(if)f(the)f(F)-8
-b(ormat\(axis\))36 b(string)d(w)m(ere)h(set)g(to)g(\\mst.1")h(\(pro)s
-(ducing)e(t)m(w)m(o)h(\014elds)f(represen)m(ting)0 1428
-y(min)m(utes)25 b(and)f(seconds)h(of)g(time\),)i(then)d(formatted)i
-(input)e(w)m(ould)g(b)s(e)g(in)m(terpreted)h(b)m(y)g(AST)p
-Fy(_)p FG(UNF)m(ORMA)-8 b(T)0 1541 y(as)31 b(follo)m(ws:)277
-1801 y(12)g(13)123 b({)100 b(min)m(utes)31 b(and)f(seconds)277
-1914 y(12)244 b({)100 b(min)m(utes)277 2027 y(:13)219
-b({)100 b(seconds)277 2140 y Fu(\000)p FG(18:)148 b({)100
-b(min)m(utes)277 2253 y(12.8)174 b({)100 b(min)m(utes)277
-2366 y(1)31 b(2)g(3)137 b({)100 b(hours,)30 b(min)m(utes)g(and)g
-(seconds)277 2592 y(4)p Fy(')241 b FG({)100 b(arc-min)m(utes)277
-2705 y(60::)p Fy(")146 b FG({)100 b(degrees)277 2818
-y Fu(\000)p FG(23:)p Fy(")g FG({)g(arc-min)m(utes)277
-2930 y Fu(\000)p FG(33h)122 b({)100 b(hours)0 3214 y(\(in)36
-b(the)h(last)g(four)f(cases,)i(explicit)g(\014eld)e(iden)m
-(ti\014cation)i(has)e(b)s(een)f(giv)m(en)j(whic)m(h)e(o)m(v)m(errides)h
-(the)f(implicit)0 3327 y(iden)m(ti\014cation\).)0 3498
-y(Alternativ)m(ely)-8 b(,)32 b(if)d(the)g(F)-8 b(ormat\(axis\))32
-b(string)c(w)m(ere)i(set)f(to)h(\\s.3")g(\(pro)s(ducing)e(only)h(an)g
-(arc-seconds)g(\014eld\),)0 3611 y(then)h(formatted)h(input)e(w)m(ould)
-i(b)s(e)e(in)m(terpreted)i(b)m(y)f(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)31 b(as)g(follo)m(ws:)277 3889 y(12.8)152 b({)100
-b(arc-seconds)277 4002 y(12)31 b(13)101 b({)f(arc-min)m(utes)31
-b(and)f(arc-seconds)277 4115 y(:12)197 b({)100 b(arc-seconds)277
-4228 y(13:)197 b({)100 b(arc-min)m(utes)277 4340 y(1)31
-b(2)g(3)115 b({)100 b(degrees,)31 b(arc-min)m(utes)g(and)f(arc-seconds)
-0 4619 y(In)h(general,)i(if)f(y)m(ou)g(are)g(preparing)e(formatted)j
-(input)d(data)j(con)m(taining)g(celestial)h(co)s(ordinates)e(and)f
-(wish)0 4732 y(to)26 b(omit)g(certain)g(\014elds,)g(then)f(y)m(ou)h
-(are)g(advised)f(to)h(iden)m(tify)g(clearly)h(those)e(that)h(y)m(ou)g
-(do)f(pro)m(vide)h(b)m(y)f(using)0 4845 y(the)30 b(appropriate)g
-(\014eld)g(iden)m(ti\014cation)i(c)m(haracters)f(and/or)f(extra)h
-(colon)g(separators.)41 b(This)30 b(prev)m(en)m(ts)g(y)m(ou)0
-4958 y(dep)s(ending)38 b(on)i(the)g(implicit)h(\014eld)f(iden)m
-(ti\014cation)h(describ)s(ed)e(ab)s(o)m(v)m(e)i(whic)m(h,)i(in)c(turn,)
-j(dep)s(ends)c(on)i(an)0 5071 y(appropriate)30 b(F)-8
-b(ormat\(axis\))33 b(string)e(ha)m(ving)g(b)s(een)e(set.)0
-5241 y(When)j(writing)f(soft)m(w)m(are,)j(it)e(is)g(also)h(a)f(go)s(o)s
-(d)g(idea)g(to)g(set)h(the)f(F)-8 b(ormat\(axis\))34
-b(string)e(so)g(that)g(data)g(input)0 5354 y(will)37
-b(b)s(e)e(as)i(simple)f(as)h(p)s(ossible)e(for)h(the)h(user.)58
-b(Unless)36 b(some)h(sp)s(ecial)f(e\013ect)i(is)f(desired,)g(this)f
-(normally)0 5467 y(means)28 b(that)h(it)f(should)f(con)m(tain)i(\\d")g
-(or)f(\\h")g(to)h(ensure)e(that)i(the)f(\014rst)f(\014eld)h(en)m(tered)
-g(b)m(y)g(the)g(user)g(will)g(b)s(e)0 5580 y(in)m(terpreted)g(as)g
-(degrees)g(or)g(hours,)f(unless)g(otherwise)h(iden)m(ti\014ed.)40
-b(This)27 b(is)g(the)h(normal)g(b)s(eha)m(viour)f(unless)0
-5693 y(an)j(explicit)i(F)-8 b(ormat\(axis\))33 b(v)-5
-b(alue)31 b(has)f(b)s(een)g(set)g(to)i(o)m(v)m(erride)f(the)g(default.)
-p eop end
-%%Page: 87 97
-TeXDict begin 87 96 bop 0 52 a Fz(8.8)92 b(Represen)m(ting)31
-b(O\013sets)g(from)e(a)i(Sp)s(eci\014ed)f(Sky)f(P)m(osition)1466
-b FG(87)0 351 y Fw(8.8)112 b(Represen)m(ting)38 b(O\013sets)g(from)g(a)
-g(Sp)s(eci\014ed)h(Sky)f(P)m(osition)0 573 y FG(A)e(SkyF)-8
-b(rame)37 b(can)f(b)s(e)f(mo)s(di\014ed)g(so)i(that)f(its)h(longitude)f
-(and)g(latitude)h(axes)g(are)f(referred)f(to)i(an)f(origin)0
-686 y(at)c(an)m(y)g(sp)s(eci\014ed)e(sky)i(p)s(osition.)43
-b(Suc)m(h)31 b(a)h(co)s(ordinate)g(system)f(is)h(referred)e(to)i(as)g
-(an)f(\\o\013set")j(co)s(ordinate)0 799 y(sy)m(etem.)54
-b(First,)36 b(the)e(System)g(attribute)h(should)f(b)s(e)f(set)i(to)g
-(represen)m(t)g(the)f(celestial)j(co)s(ordinate)e(system)0
-911 y(in)40 b(whic)m(h)g(the)g(origin)h(is)f(to)h(b)s(e)f(sp)s
-(eci\014ed.)69 b(Then)40 b(the)g(SkyRef)g(attribute)h(should)e(b)s(e)h
-(set)g(to)h(hold)f(the)0 1024 y(co)s(ordinates)31 b(of)g(the)f(origin)h
-(within)f(the)g(selected)i(celestial)h(co)s(ordinate)e(system.)0
-1187 y(By)21 b(default,)i(\\north")f(in)e(the)h(new)g(o\013set)h(co)s
-(ordinate)f(system)g(is)g(parallel)h(to)g(north)e(in)h(the)g(original)h
-(celestial)0 1300 y(co)s(ordinate)38 b(system.)60 b(Ho)m(w)m(ev)m(er,)
-40 b(the)d(direction)h(of)f(north)f(in)g(the)h(o\013set)h(system)f(can)
-g(b)s(e)f(con)m(trolled)j(b)m(y)0 1413 y(assigning)k(a)g(v)-5
-b(alue)43 b(to)h(the)f(SkyRefP)f(attribute.)78 b(This)42
-b(attribute)h(should)f(b)s(e)g(assigned)h(the)g(celestial)0
-1526 y(co)s(ordinates)29 b(of)g(a)g(p)s(oin)m(t)g(whic)m(h)f(is)h(on)f
-(the)h(zero)h(longitude)f(meridian)f(and)g(whic)m(h)h(has)f(non-zero)h
-(latitude.)0 1689 y(By)36 b(default,)i(the)e(p)s(osition)f(giv)m(en)i
-(b)m(y)f(the)g(SkyRef)f(attribute)h(is)g(used)f(as)h(the)g(origin)g(of)
-g(the)g(new)f(longi-)0 1801 y(tude/latitude)26 b(system,)g(but)e(an)h
-(option)g(exists)g(to)h(use)e(it)h(as)g(the)g(north)f(p)s(ole)h(of)f
-(the)h(system)g(instead.)39 b(This)0 1914 y(option)25
-b(is)f(con)m(trolled)h(b)m(y)g(the)f(SkyRefIs)f(attribute.)40
-b(The)23 b(c)m(hoice)j(of)e(v)-5 b(alue)25 b(for)f(SkyRefIs)f(dep)s
-(ends)g(on)h(what)0 2027 y(sort)31 b(of)h(o\013set)g(co)s(ordinate)g
-(system)f(y)m(ou)h(w)m(an)m(t.)44 b(Setting)31 b(SkyRefIs)g(to)h
-(\\Origin")f(\(the)h(default\))g(pro)s(duces)0 2140 y(an)39
-b(o\013set)i(co)s(ordinate)g(system)e(whic)m(h)h(is)f(appro)m(ximately)
-i(Cartesian)f(close)h(to)f(the)g(sp)s(eci\014ed)f(p)s(osition.)0
-2253 y(Setting)33 b(SkyRefIs)f(to)h(\\P)m(ole")i(pro)s(duces)c(an)h
-(o\013set)h(co)s(ordinate)h(system)e(whic)m(h)g(is)h(appro)m(ximately)g
-(P)m(olar)0 2366 y(close)f(to)f(the)f(sp)s(eci\014ed)g(p)s(osition.)p
-eop end
-%%Page: 88 98
-TeXDict begin 88 97 bop 0 52 a FG(88)1229 b Fz(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))p eop
-end
-%%Page: 89 99
-TeXDict begin 89 98 bop 3689 52 a FG(89)0 351 y FA(9)135
-b(Sp)t(ectral)45 b(Co)t(ordinate)h(Systems)f(\(Sp)t(ecF)-11
-b(rames\))0 588 y FG(The)35 b(Sp)s(ecF)-8 b(rame)35 b(is)h(a)f(F)-8
-b(rame)37 b(whic)m(h)e(is)g(sp)s(ecialised)h(for)f(represen)m(ting)h
-(co)s(ordinate)g(systems)f(whic)m(h)g(de-)0 701 y(scrib)s(e)24
-b(a)i(p)s(osition)f(within)f(an)h(electro-magnetic)k(sp)s(ectrum.)37
-b(In)25 b(this)f(section)i(w)m(e)g(examine)f(the)h(additional)0
-814 y(prop)s(erties)k(and)g(b)s(eha)m(viour)g(of)g(a)h(Sp)s(ecF)-8
-b(rame)30 b(that)h(distinguish)f(it)h(from)f(a)h(basic)f(F)-8
-b(rame)32 b(\()p Fu(x)p FG(7\).)0 1084 y Fw(9.1)112 b(The)38
-b(Sp)s(ecF)-9 b(rame)39 b(Mo)s(del)0 1289 y FG(As)30
-b(for)g(a)g(SkyF)-8 b(rame,)31 b(a)g(Sp)s(ecF)-8 b(rame)30
-b(is)g(a)g(F)-8 b(rame)31 b(\()p Fu(x)p FG(7\))h(and)d(also)i(a)g
-(Mapping)f(\()p Fu(x)p FG(5\),)i(so)e(it)h(inherits)e(all)i(the)0
-1402 y(prop)s(erties)c(and)f(b)s(eha)m(viour)h(of)h(these)g(t)m(w)m(o)g
-(ancestral)h(classes.)41 b(When)27 b(used)f(as)i(a)f(Mapping,)h(a)g(Sp)
-s(ecF)-8 b(rame)0 1515 y(implemen)m(ts)26 b(a)f(unit)g(transformation,)
-h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8 b(rame)26 b(\()p
-Fu(x)p FG(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)s(ect)0
-1628 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g(imp)s
-(ortance.)0 1775 y(When)25 b(used)f(as)i(a)f(F)-8 b(rame,)28
-b(ho)m(w)m(ev)m(er,)g(a)d(Sp)s(ecF)-8 b(rame)26 b(represen)m(ts)f(a)g
-(wide)g(range)h(of)f(di\013eren)m(t)h(1-dimensional)0
-1888 y(co)s(ordinate)42 b(system)f(whic)m(h)g(can)g(b)s(e)g(used)f(to)i
-(describ)s(e)f(p)s(ositions)g(within)f(a)i(sp)s(ectrum.)72
-b(The)40 b(options)0 2001 y(a)m(v)-5 b(ailable)33 b(largely)f(mirror)e
-(those)h(describ)s(ed)e(in)i(the)f(FITS-W)m(CS)h(pap)s(er)e(I)s(I)s(I)g
-Fx(R)-5 b(epr)g(esentations)36 b(of)d(sp)-5 b(e)g(ctr)g(al)0
-2114 y(c)g(o)g(or)g(dinates)36 b(in)c(FITS)42 b FG(\(Greisen,)31
-b(V)-8 b(aldes,)32 b(Calabretta)g(&)e(Allen\).)0 2383
-y Fw(9.2)112 b(Creating)38 b(a)g(Sp)s(ecF)-9 b(rame)0
-2589 y FG(The)37 b(Sp)s(ecF)-8 b(rame)38 b(constructor)f(function)h(is)
-f(particularly)h(simple)f(and)g(a)h(Sp)s(ecF)-8 b(rame)38
-b(with)f(default)g(at-)0 2702 y(tributes)30 b(is)h(created)g(as)g
-(follo)m(ws:)262 2887 y Ft(INCLUDE)40 b('AST_PAR')262
-2987 y(INTEGER)g(SPECFRAME,)g(STATUS)262 3186 y(STATUS)h(=)i(0)262
-3385 y(...)262 3585 y(SPECFRAME)c(=)44 b(AST_SPECFRAME\()37
-b(')44 b(',)e(STATUS)f(\))0 3783 y FG(Suc)m(h)c(a)i(Sp)s(ecF)-8
-b(rame)38 b(w)m(ould)g(represen)m(t)g(the)h(default)f(co)s(ordinate)h
-(system)f(whic)m(h)g(is)g(helio)s(cen)m(tric)i(w)m(a)m(v)m(e-)0
-3896 y(length)28 b(in)g(metres)g(\(i.e.)41 b(w)m(a)m(v)m(elength)30
-b(corrected)f(to)f(tak)m(e)i(in)m(to)e(accoun)m(t)i(the)d(Doppler)h
-(shift)g(caused)g(b)m(y)f(the)0 4009 y(v)m(elo)s(cit)m(y)33
-b(of)d(the)h(observ)m(er)g(around)e(the)h(sun\).)0 4279
-y Fw(9.3)112 b(Sp)s(ecifying)39 b(a)f(P)m(articular)f(Sp)s(ectral)h(Co)
-s(ordinate)g(System)0 4485 y FG(Selection)48 b(of)f(a)g(particular)h
-(co)s(ordinate)f(system)g(is)g(p)s(erformed)e(simply)i(b)m(y)f(setting)
-i(a)f(v)-5 b(alue)48 b(for)e(the)0 4597 y(Sp)s(ecF)-8
-b(rame's)33 b(\(c)m(haracter)h(string\))f(System)f(attribute.)47
-b(This)32 b(setting)h(is)g(most)g(con)m(v)m(enien)m(tly)h(done)e(when)0
-4710 y(the)d(Sp)s(ecF)-8 b(rame)28 b(is)h(created.)41
-b(F)-8 b(or)29 b(example,)h(a)e(Sp)s(ecF)-8 b(rame)29
-b(represen)m(ting)g(Energy)f(w)m(ould)g(b)s(e)g(created)h(b)m(y:)262
-4896 y Ft(SPECFRAME)39 b(=)44 b(AST_SPECFRAME\()37 b('System=Energy',)g
-(STATUS)k(\))0 5095 y FG(Note)24 b(that)f(sp)s(ecifying)f
-(\\System=Energy")g(also)i(c)m(hanges)f(the)f(asso)s(ciated)i(Unit)f
-(\(from)f(metres)h(to)g(Joules\).)0 5207 y(This)40 b(is)h(b)s(ecause)g
-(the)g(default)g(v)-5 b(alue)42 b(of)f(the)g(Sp)s(ecF)-8
-b(rame's)42 b(Unit)f(attribute)h(dep)s(ends)d(on)h(the)i(System)0
-5320 y(attribute)31 b(setting.)0 5467 y(Y)-8 b(ou)30
-b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5 b(alue)30
-b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)f(needed.)
-40 b(The)29 b(v)-5 b(alues)0 5580 y(supp)s(orted)40 b(are)h(set)h(out)g
-(in)f(the)h(attribute's)g(description)f(in)g(App)s(endix)f(C)h(and)g
-(include)g(a)h(v)-5 b(ariet)m(y)42 b(of)0 5693 y(v)m(elo)s(cit)m(y)33
-b(systems,)d(together)i(with)e(frequency)-8 b(,)31 b(w)m(a)m(v)m
-(elength,)i(energy)-8 b(,)31 b(w)m(a)m(v)m(e-n)m(um)m(b)s(er,)h
-Fx(etc)p FG(.)p eop end
-%%Page: 90 100
-TeXDict begin 90 99 bop 0 52 a FG(90)1201 b Fz(9)91 b(SPECTRAL)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))0 351
-y Fw(9.4)112 b(A)m(ttributes)37 b(whic)m(h)g(Qualify)i(Sp)s(ectral)f
-(Co)s(ordinate)g(Systems)0 597 y FG(Man)m(y)30 b(sp)s(ectral)f(co)s
-(ordinate)i(systems)e(ha)m(v)m(e)h(some)g(additional)g(free)g
-(parameters)f(whic)m(h)g(serv)m(e)h(to)g(iden)m(tify)0
-710 y(a)f(particular)f(co)s(ordinate)h(system)g(from)f(amongst)h(a)f
-(broader)g(class)h(of)f(related)i(co)s(ordinate)f(systems.)40
-b(F)-8 b(or)0 823 y(example,)37 b(the)e(v)m(elo)s(cit)m(y)i(systems)e
-(are)g(all)g(parameterised)h(b)m(y)e(a)h(rest)g(frequency|the)g
-(frequency)f(whic)m(h)0 936 y(de\014nes)41 b(zero)i(v)m(elo)s(cit)m(y)
--8 b(,)48 b(and)42 b(all)h(co)s(ordinate)g(systems)f(are)g(quali\014ed)
-g(b)m(y)g(a)g(`standard)g(of)g(rest")h(whic)m(h)0 1049
-y(indicates)31 b(the)g(rest)f(frame)h(to)g(whic)m(h)f(the)g(v)-5
-b(alues)31 b(refer.)0 1228 y(In)23 b(AST,)g(these)g(free)h(parameters)g
-(are)f(represen)m(ted)h(b)m(y)f(additional)h(Sp)s(ecF)-8
-b(rame)24 b(attributes,)i(eac)m(h)e(of)g(whic)m(h)0 1341
-y(has)30 b(a)g(default)g(appropriate)g(to)g(\()p Fx(i.e.)g
-FG(de\014ned)e(b)m(y\))i(the)g(setting)h(of)f(the)g(main)g(System)g
-(attribute.)41 b(Eac)m(h)30 b(of)0 1454 y(these)c Fx(qualifying)i
-(attributes)e FG(ma)m(y)-8 b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d
-(assigned)h(an)f(explicit)i(v)-5 b(alue)26 b(so)f(as)h(to)g(select)h(a)
-f(particular)0 1566 y(co)s(ordinate)38 b(system.)62 b(Note,)41
-b(it)d(is)f(usually)g(b)s(est)g(to)h(assign)g(explicit)h(v)-5
-b(alues)37 b(whenev)m(er)h(p)s(ossible)f(rather)0 1679
-y(than)28 b(relying)i(on)e(defaults.)40 b(A)m(ttribute)30
-b(should)e(only)h(b)s(e)f(left)h(at)g(their)g(default)g(v)-5
-b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0 1792 y(what)e(v)-5
-b(alue)27 b(is)g(used.)39 b(In)26 b(certain)i(circumstances)g
-(\(particularly)-8 b(,)29 b(when)d(aligning)i(t)m(w)m(o)g(F)-8
-b(rames\),)29 b(a)e(default)0 1905 y(v)-5 b(alue)37 b(for)g(an)g
-(attribute)h(ma)m(y)f(b)s(e)g(replaced)g(b)m(y)g(the)g(v)-5
-b(alue)37 b(from)g(another)g(similar)g(F)-8 b(rame.)62
-b(Suc)m(h)36 b(v)-5 b(alue)0 2018 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-2131 y(relying)31 b(on)f(the)h(default.)0 2310 y(The)f(main)g(Sp)s(ecF)
--8 b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f
-(attribute)h(are:)227 2622 y FE(Ep)s(o)s(c)m(h)427 2735
-y FG(This)i(attribute)h(is)g(inherited)f(from)g(the)h(F)-8
-b(rame)34 b(class.)51 b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)
-427 2848 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 2961
-y(ally)f(the)f(date)h(of)f(observ)-5 b(ation\).)40 b(It)26
-b(is)f(needed)f(in)h(order)g(to)h(calculate)h(the)e(Doppler)h(shift)427
-3074 y(pro)s(duced)g(b)m(y)h(the)h(v)m(elo)s(cit)m(y)i(of)d(the)h
-(observ)m(er)f(relativ)m(e)j(to)e(the)g(cen)m(tre)g(of)g(the)f(earth,)i
-(and)427 3186 y(of)i(the)f(earth)h(relativ)m(e)h(to)g(the)e(sun.)227
-3349 y FE(StdOfRest)427 3462 y FG(This)25 b(sp)s(eci\014es)g(the)g
-(rest)h(frame)f(in)g(whic)m(h)g(the)h(co)s(ordinates)g(are)g(correct.)
-40 b(T)-8 b(ransforming)427 3575 y(b)s(et)m(w)m(een)29
-b(di\013eren)m(t)g(standards)f(of)g(rest)h(in)m(v)m(olv)m(es)h(taking)g
-(accoun)m(t)g(of)e(the)h(Doppler)g(shift)427 3688 y(in)m(tro)s(duced)h
-(b)m(y)g(the)h(relativ)m(e)h(motion)f(of)g(the)g(t)m(w)m(o)g(standards)
-f(of)g(rest.)227 3850 y FE(RestF)-9 b(req)427 3963 y
-FG(Sp)s(eci\014es)26 b(the)g(frequency)g(whic)m(h)f(corresp)s(ond)g(to)
-i(zero)g(v)m(elo)s(cit)m(y)-8 b(.)42 b(When)26 b(setting)h(a)g(v)-5
-b(alue)427 4076 y(for)42 b(this)g(attribute,)47 b(the)42
-b(v)-5 b(alue)43 b(ma)m(y)g(b)s(e)e(supplied)g(as)i(a)g(w)m(a)m(v)m
-(elength)h(\(including)e(an)427 4189 y(indication)34
-b(of)f(the)h(units)e(b)s(eing)h(used,)g(\\nm")g(\\Angstrom",)i
-Fx(etc.)p FG(\),)f(whic)m(h)f(will)h(b)s(e)e(au-)427
-4302 y(tomatically)i(b)s(e)29 b(con)m(v)m(erted)j(to)f(a)g(frequency)-8
-b(.)227 4465 y FE(RefRA)427 4577 y FG(Sp)s(eci\014es)42
-b(the)h(RA)g(\(FK5)g(J2000\))h(of)f(the)g(source.)78
-b(This)41 b(is)i(used)f(when)f(con)m(v)m(erting)427 4690
-y(b)s(et)m(w)m(een)28 b(standards)d(of)i(rest.)40 b(It)27
-b(sp)s(eci\014es)f(the)h(direction)h(along)f(whic)m(h)g(the)g(comp)s
-(onen)m(t)427 4803 y(of)k(the)f(relativ)m(e)j(v)m(elo)s(cit)m(y)g(of)d
-(the)h(t)m(w)m(o)h(standards)d(of)h(rest)h(is)f(tak)m(en.)227
-4966 y FE(RefDec)427 5079 y FG(Sp)s(eci\014es)24 b(the)h(Dec)g(\(FK5)g
-(J2000\))i(of)d(the)h(source.)39 b(Used)24 b(in)g(conjunction)h(with)f
-(REFRA.)227 5241 y FE(SourceV)-9 b(el)427 5354 y FG(This)32
-b(de\014nes)g(the)i(\\source")g(standard)e(of)h(rest.)48
-b(This)32 b(is)h(a)h(rest)f(frame)g(whic)m(h)f(is)h(mo)m(v-)427
-5467 y(ing)38 b(to)m(w)m(ards)g(the)g(p)s(osition)f(giv)m(en)i(b)m(y)e
-(RefRA)g(and)g(RefDec,)k(at)d(a)g(v)m(elo)s(cit)m(y)i(giv)m(en)e(b)m(y)
-427 5580 y(SourceV)-8 b(el.)52 b(The)33 b(v)m(elo)s(cit)m(y)j(is)e
-(stored)g(in)m(ternally)h(as)f(a)g(helio)s(cen)m(tric)h(v)m(elo)s(cit)m
-(y)-8 b(,)38 b(but)33 b(can)427 5693 y(b)s(e)d(giv)m(en)h(in)f(an)m(y)h
-(of)g(the)f(other)h(supp)s(orted)d(standards)i(of)g(rest.)p
-eop end
-%%Page: 91 101
-TeXDict begin 91 100 bop 0 52 a Fz(9.5)92 b(Using)31
-b(Default)g(Sp)s(ecF)-8 b(rame)31 b(A)m(ttributes)2029
-b FG(91)0 351 y(F)-8 b(or)32 b(further)d(details)j(of)f(these)h
-(attributes)f(y)m(ou)h(should)e(consult)h(their)g(descriptions)g(in)f
-(App)s(endix)g(C)g(and)0 464 y(for)g(details)i(of)e(the)h(System)f
-(settings)i(for)e(whic)m(h)g(they)h(are)g(relev)-5 b(an)m(t,)32
-b(see)f(the)g(description)f(of)h(the)g(System)0 577 y(attribute)g
-(\(also)h(in)e(App)s(endix)e(C\).)0 742 y(Note)38 b(that)f(it)h(do)s
-(es)e(no)h(harm)f(to)h(assign)g(v)-5 b(alues)37 b(to)h(qualifying)f
-(attributes)g(whic)m(h)g(are)g(not)g(relev)-5 b(an)m(t)38
-b(to)0 855 y(the)28 b(main)g(System)g(v)-5 b(alue.)41
-b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g(but)e(are)h
-(not)h(used)e(unless)h(the)g(System)g(v)-5 b(alue)28
-b(is)0 968 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h(relev)-5
-b(an)m(t.)0 1270 y Fw(9.5)112 b(Using)38 b(Default)h(Sp)s(ecF)-9
-b(rame)38 b(A)m(ttributes)0 1495 y FG(The)j(default)g(v)-5
-b(alues)42 b(supplied)e(for)h(man)m(y)g(Sp)s(ecF)-8 b(rame)42
-b(attributes)f(will)h(dep)s(end)e(on)h(the)g(v)-5 b(alue)42
-b(of)f(the)0 1608 y(Sp)s(ecF)-8 b(rame's)26 b(System)f(attribute.)40
-b(In)25 b(practice,)j(this)e(means)f(that)i(there)f(is)f(usually)h
-(little)h(need)e(to)i(sp)s(ecify)0 1721 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-1834 y(illustrated)31 b(b)m(y)f(using)g(AST)p Fy(_)p
-FG(SHO)m(W)g(to)h(examine)g(a)g(Sp)s(ecF)-8 b(rame,)31
-b(as)f(follo)m(ws:)262 2090 y Ft(CALL)41 b(AST_SHOW\()f
-(AST_SPECFRAME\()e('System=Vopt,)g(RestFreq=250)h(GHz',)i(STATUS)h(\),)
-218 2190 y(:)653 b(STATUS)41 b(\))0 2460 y FG(The)30
-b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)m(e)h(the)e(follo)m
-(wing:)275 2730 y Fy(Begin)46 b(SpecFrame)380 b(#)47
-b(Description)e(of)i(spectral)f(coordinate)f(system)227
-2843 y(#)143 b(Title)47 b(=)g("Optical)f(velocity,)f(rest)h(frequency)g
-(=)h(250)g(GHz")333 b(#)48 b(Title)227 2956 y(of)f(coordinate)e(system)
-418 3068 y(Naxes)i(=)g(1)143 b(#)47 b(Number)f(of)i(coordinate)d(axes)
-227 3181 y(#)143 b(Domain)46 b(=)i("SPECTRUM")427 b(#)47
-b(Coordinate)e(system)h(domain)227 3294 y(#)143 b(Epoch)47
-b(=)g(2000)381 b(#)47 b(Julian)f(epoch)h(of)g(observation)227
-3407 y(#)143 b(Lbl1)47 b(=)g("Optical)f(velocity")93
-b(#)47 b(Label)g(for)g(axis)f(1)418 3520 y(System)g(=)i("VOPT")237
-b(#)47 b(Coordinate)e(system)h(type)227 3633 y(#)143
-b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)h(1)418
-3746 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561 3859
-y(Begin)h(Axis)333 b(#)47 b(Coordinate)e(axis)561 3972
-y(End)i(Axis)275 4085 y(IsA)g(Frame)285 b(#)47 b(Coordinate)e(system)h
-(description)227 4198 y(#)143 b(SoR)47 b(=)h("Heliocentric")378
-b(#)47 b(Standard)f(of)h(rest)418 4311 y(RstFrq)f(=)i(250000000000)331
-b(#)47 b(Rest)g(frequency)e(\(Hz\))275 4423 y(End)i(SpecFrame)0
-4693 y FG(Note)40 b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h
-(\\)p Fy(#)p FG(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g
-(the)g(line\))h(for)0 4806 y(attributes)30 b(suc)m(h)g(as)g(the)g
-(Title,)h(axis)g(Lab)s(els)e(and)g(Unit)h(sp)s(eci\014ers)g(are)g(all)h
-(set)f(to)h(v)-5 b(alues)30 b(appropriate)g(for)0 4919
-y(the)h(particular)f(v)m(elo)s(cit)m(y)j(system)e(that)g(the)f(Sp)s
-(ecF)-8 b(rame)31 b(represen)m(ts.)0 5084 y(These)25
-b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i(for)e(a)i(System)f(v)-5
-b(alue)26 b(of)f(\\V)-8 b(opt",)28 b(but)d(if)g(a)g(di\013eren)m(t)h
-(System)f(v)-5 b(alue)0 5197 y(w)m(ere)32 b(set,)g(the)g(defaults)f(w)m
-(ould)g(b)s(e)g(corresp)s(ondingly)f(di\013eren)m(t.)44
-b(F)-8 b(or)32 b(example,)h(b)m(y)e(default)h(frequency)e(is)0
-5310 y(measured)j(in)g(units)h(of)f(GHz,)j(not)e Fp(k)s(m=s)p
-FG(,)h(so)f(setting)g(\\System=freq")g(w)m(ould)g(c)m(hange)h(the)e
-(appropriate)0 5423 y(line)e(ab)s(o)m(v)m(e)g(from:)227
-5693 y Fy(#)143 b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)
-h(1)p eop end
-%%Page: 92 102
-TeXDict begin 92 101 bop 0 52 a FG(92)1201 b Fz(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))0
-351 y FG(to)227 598 y Fy(#)143 b(Uni1)47 b(=)g("GHz")381
-b(#)47 b(Units)g(for)f(axis)h(1)0 844 y FG(Of)35 b(course,)j(if)e(y)m
-(ou)h(do)f(not)g(lik)m(e)h(an)m(y)g(of)f(these)h(defaults,)g(y)m(ou)g
-(ma)m(y)f(alw)m(a)m(ys)i(o)m(v)m(er-ride)f(them)f(b)m(y)g(setting)0
-957 y(explicit)41 b(attribute)f(v)-5 b(alues)40 b(y)m(ourself.)68
-b(F)-8 b(or)40 b(instance,)j(y)m(ou)c(ma)m(y)h(c)m(ho)s(ose)h(to)f(ha)m
-(v)m(e)h(y)m(our)e(frequency)g(axis)0 1070 y(expressed)30
-b(in)g(\\kHz")i(rather)e(than)g(\\GHz".)43 b(T)-8 b(o)30
-b(do)h(this)f(simply)g(set)h(the)f(attribute)h(v)-5 b(alue)31
-b(as)g(follo)m(ws:)262 1303 y Ft(CALL)41 b(AST_SETC\()f(SPECFRAME,)g
-('Unit',)g('kHz',)i(STATUS)f(\))0 1549 y FG(No)26 b(error)g(will)g(b)s
-(e)f(rep)s(orted)g(if)g(y)m(ou)h(acciden)m(tally)j(set)d(an)g
-(inappropriate)f(Unit)h(v)-5 b(alue)26 b(\(sa)m(y)h("J")f(-)g
-(Joules\)|)0 1662 y(after)e(all,)j(AST)c(cannot)i(tell)g(what)f(y)m(ou)
-g(are)g(ab)s(out)g(to)h(do,)g(and)f(y)m(ou)g Fx(may)33
-b FG(b)s(e)23 b(ab)s(out)h(to)g(c)m(hange)i(the)e(System)0
-1775 y(v)-5 b(alue)21 b(to)g(\\Energy".)38 b(Ho)m(w)m(ev)m(er,)25
-b(an)20 b(error)g Fx(wil)5 b(l)30 b FG(b)s(e)20 b(rep)s(orted)g(if)g(y)
-m(ou)h(attempt)g(to)g(\014nd)e(a)i(con)m(v)m(ersion)h(b)s(et)m(w)m(een)
-0 1888 y(t)m(w)m(o)39 b(Sp)s(ecF)-8 b(rames)38 b(\(for)g(instance)h
-(using)e(AST)p Fy(_)p FG(CONVER)-8 b(T)37 b(\))h(if)g(either)g(Sp)s
-(ecF)-8 b(rame)38 b(has)g(a)g(Unit)g(v)-5 b(alue)0 2001
-y(whic)m(h)30 b(is)h(inappropriate)f(for)g(its)h(System)f(v)-5
-b(alue.)0 2159 y(Sp)s(ecF)d(rame)33 b(attributes,)i(lik)m(e)f(all)g
-(other)g(attributes,)h(all)f(ha)m(v)m(e)g(default)f(v)-5
-b(alue.)50 b(Ho)m(w)m(ev)m(er,)36 b(b)s(e)c(a)m(w)m(are)j(that)0
-2272 y(for)d(some)h(attributes)h(these)f(default)g(v)-5
-b(alues)32 b(can)h(nev)m(er)g(b)s(e)f(more)h(than)f(\\a)i(legal)g(n)m
-(umerical)g(v)-5 b(alue")33 b(and)0 2385 y(ha)m(v)m(e)h(no)e
-(astronomical)i(signi\014cance.)47 b(F)-8 b(or)34 b(instance,)f(the)g
-(RefRA)f(and)g(RefDec)i(attributes)f(\(whic)m(h)f(giv)m(e)0
-2498 y(the)39 b(source)g(p)s(osition\))g(b)s(oth)f(ha)m(v)m(e)i(a)f
-(default)g(v)-5 b(alue)39 b(of)f(zero.)67 b(So)38 b(unless)g(y)m(our)h
-(source)g(happ)s(ens)e(to)i(b)s(e)0 2611 y(at)d(that)g(p)s(oin)m(t)f
-(\(highly)h(unlik)m(ely!\))57 b(y)m(ou)35 b(will)h(need)f(to)h(set)g
-(new)f(v)-5 b(alues.)56 b(Lik)m(ewise,)38 b(the)d(RestF)-8
-b(req)37 b(\(rest)0 2724 y(frequency\))k(attribute)h(has)f(an)g
-(arbitrary)g(default)g(v)-5 b(alue)41 b(of)h(1.0E5)g(GHz.)74
-b(Some)41 b(op)s(erations)h(are)f(not)0 2837 y(a\013ected)31
-b(b)m(y)e(inappropriate)f(v)-5 b(alues)30 b(for)f(these)g(attributes)h
-(\(for)f(instance,)i(con)m(v)m(erting)f(from)f(frequency)g(to)0
-2950 y(w)m(a)m(v)m(elength,)41 b(c)m(hanging)c(axis)g(units,)h
-Fx(etc)5 b FG(\),)39 b(but)c(some)i(are.)60 b(F)-8 b(or)37
-b(instance,)j(con)m(v)m(erting)e(from)e(frequency)0 3063
-y(to)29 b(v)m(elo)s(cit)m(y)h(requires)d(a)i(correct)g(rest)f
-(frequency)-8 b(,)28 b(mo)m(ving)h(b)s(et)m(w)m(een)g(di\013eren)m(t)f
-(standards)f(of)h(rest)g(requires)0 3175 y(a)40 b(correct)g(source)g(p)
-s(osition.)67 b(The)39 b(moral)h(is,)i(alw)m(a)m(ys)f(set)f(explicit)g
-(v)-5 b(alues)40 b(for)f(as)h(man)m(y)f(attributes)h(as)0
-3288 y(p)s(ossible.)0 3576 y Fw(9.6)112 b(Creating)38
-b(Sp)s(ectral)g(Cub)s(es)0 3793 y FG(Y)-8 b(ou)25 b(can)g(use)g(a)g(Sp)
-s(ecF)-8 b(rame)25 b(to)g(describ)s(e)f(the)h(sp)s(ectral)g(axis)g(in)f
-(a)h(data)h(cub)s(e)e(con)m(taining)i(t)m(w)m(o)g(spatial)g(axes)0
-3906 y(and)36 b(a)h(sp)s(ectral)g(axis.)59 b(T)-8 b(o)37
-b(do)g(this)f(y)m(ou)h(w)m(ould)f(create)i(an)f(appropriate)f(Sp)s(ecF)
--8 b(rame,)39 b(together)f(with)e(a)0 4019 y(2-dimensional)30
-b(F)-8 b(rame)31 b(\(often)f(a)g(SkyF)-8 b(rame\))30
-b(to)g(describ)s(e)f(the)h(spatial)g(axes.)41 b(Y)-8
-b(ou)30 b(w)m(ould)g(then)f(com)m(bine)0 4132 y(these)i(t)m(w)m(o)h(F)
--8 b(rames)31 b(together)h(in)m(to)f(a)g(single)g(CmpF)-8
-b(rame.)262 4365 y Ft(INTEGER)40 b(SKYFRAME)262 4464
-y(INTEGER)g(SPECFRAME)262 4564 y(INTEGER)g(CMPFRAME)262
-4664 y(...)262 4763 y(SKYFRAME)g(=)j(AST_SKYFRAME\()38
-b('Epoch=J2002',)g(STATUS)j(\))262 4863 y(SPECFRAME)e(=)44
-b(AST_SPECFRAME\()37 b('System=Freq,StdO)o(fR)o(est)o(=L)o(SRK)o(',)218
-4963 y(:)1176 b(STATUS)41 b(\))262 5062 y(CMPFRAME)f(=)j
-(AST_CMPFRAME\()38 b(SKYFRAME,)i(SPECFRAME,)f(')44 b(',)e(STATUS)g(\))0
-5308 y FG(In)30 b(the)g(resulting)h(CmpF)-8 b(rame,)30
-b(axis)h(1)f(will)h(b)s(e)f(RA,)g(axis)h(2)g(will)g(b)s(e)e(Dec)j(and)d
-(axis)i(3)g(will)g(b)s(e)e(F)-8 b(requency)g(.)0 5421
-y(If)30 b(this)g(is)h(not)f(the)h(order)f(y)m(ou)g(w)m(an)m(t,)i(y)m
-(ou)f(can)f(p)s(erm)m(ute)g(the)h(axes)g(using)f(AST)p
-Fy(_)p FG(PERMAXES.)0 5580 y(There)36 b(is)g(one)g(p)s(oten)m(tial)i
-(problem)e(with)f(this)h(approac)m(h)h(if)f(y)m(ou)h(are)f(in)m
-(terested)h(in)f(un)m(usually)g(high)f(ac-)0 5693 y(curacy)-8
-b(.)53 b(Con)m(v)m(ersion)34 b(b)s(et)m(w)m(een)h(di\013eren)m(t)f
-(standards)g(of)g(rest)g(in)m(v)m(olv)m(es)i(taking)f(accoun)m(t)h(of)e
-(the)g(Doppler)p eop end
-%%Page: 93 103
-TeXDict begin 93 102 bop 0 52 a Fz(9.7)92 b(Handling)30
-b(Dual-Sideband)g(Sp)s(ectra)2175 b FG(93)0 351 y(shift)37
-b(caused)g(b)m(y)f(the)i(relativ)m(e)h(motion)e(of)g(the)g(t)m(w)m(o)i
-(standards)d(of)h(rest.)60 b(A)m(t)38 b(some)g(p)s(oin)m(t)f(this)f(in)
-m(v)m(olv)m(es)0 464 y(\014nding)26 b(the)h(comp)s(onen)m(t)g(of)h(the)
-f(relativ)m(e)i(v)m(elo)s(cit)m(y)h(in)d(the)g(direction)h(of)f(in)m
-(terest.)41 b(F)-8 b(or)28 b(a)f(Sp)s(ecF)-8 b(rame,)29
-b(this)0 577 y(direction)g(is)f(alw)m(a)m(ys)i(giv)m(en)g(b)m(y)e(the)g
-(RefRA)h(and)f(RefDec)h(attributes,)h(ev)m(en)f(if)f(the)h(Sp)s(ecF)-8
-b(rame)28 b(is)h(em)m(b)s(ed-)0 690 y(ded)j(within)g(a)h(CmpF)-8
-b(rame)32 b(as)h(ab)s(o)m(v)m(e.)49 b(It)33 b(w)m(ould)f(b)s(e)g(more)h
-(appropriate)f(if)h(this)f(\\direction)i(of)f(in)m(terest")0
-803 y(w)m(as)c(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alues)29
-b(passed)g(in)m(to)g(the)g(CmpF)-8 b(rame)29 b(on)g(the)g(RA)g(and)f
-(DEC)h(axes,)h(allo)m(wing)g(eac)m(h)0 916 y(pixel)h(within)f(a)g(data)
-h(cub)s(e)f(to)h(ha)m(v)m(e)h(a)e(sligh)m(tly)i(di\013eren)m(t)f
-(correction)h(for)e(Doppler)g(shift.)0 1072 y(Unfortunately)-8
-b(,)37 b(the)d(Sp)s(ecF)-8 b(rame)35 b(class)h(cannot)f(do)f(this)h
-(\(since)g(it)g(is)g(purely)e(a)i(1-dimensional)h(F)-8
-b(rame\),)0 1185 y(and)26 b(so)h(some)g(small)g(degree)g(of)g(error)f
-(will)h(b)s(e)f(in)m(tro)s(duced)g(when)g(con)m(v)m(erting)i(b)s(et)m
-(w)m(een)g(standards)d(of)i(rest,)0 1298 y(the)32 b(size)h(of)f(the)g
-(error)f(v)-5 b(arying)32 b(from)f(pixel)h(to)h(pixel.)45
-b(It)32 b(is)g(hop)s(ed)f(that)h(at)h(some)f(p)s(oin)m(t)g(in)f(the)h
-(future)f(a)0 1411 y(sub-class)g(of)g(CmpF)-8 b(rame)30
-b(\(a)i(Sp)s(ecCub)s(eF)-8 b(rame\))30 b(will)h(b)s(e)f(added)g(to)i
-(AST)e(whic)m(h)g(allo)m(ws)i(for)f(this)f(spatial)0
-1524 y(v)-5 b(ariation)32 b(in)e(Doppler)g(shift.)0 1680
-y(The)40 b(maxim)m(um)g(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s(duced)f
-(b)m(y)i(this)f(problem)f(is)i(of)f(the)h(order)f(of)g
-Fp(V)47 b Fu(\003)27 b Fp(S)5 b(I)i(N)j FG(\()p Fp(F)j(O)s(V)21
-b FG(\),)0 1793 y(where)33 b Fp(F)13 b(O)s(V)53 b FG(is)33
-b(the)g(angular)h(\014eld)e(of)i(view,)g(and)e Fp(V)54
-b FG(is)33 b(the)g(relativ)m(e)i(v)m(elo)s(cit)m(y)h(of)d(the)h(t)m(w)m
-(o)g(standards)e(of)0 1906 y(rest.)56 b(As)35 b(an)g(example,)i(when)e
-(correcting)h(from)f(the)h(observ)m(ers)f(rest)h(frame)f(\(i.e.)56
-b(the)36 b(top)s(o)s(cen)m(tric)g(rest)0 2019 y(frame\))f(to)h(the)f
-(kinematic)h(lo)s(cal)h(standard)d(of)h(rest)g(the)g(maxim)m(um)g(v)-5
-b(alue)35 b(of)g Fp(V)55 b FG(is)35 b(ab)s(out)g(20)h
-Fp(k)s(m=s)p FG(,)g(so)0 2132 y(for)c(5)h(arc-min)m(ute)g(\014eld)f(of)
-h(view)f(the)h(maxim)m(um)f(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s
-(duced)g(b)m(y)g(the)h(correction)g(will)g(b)s(e)0 2245
-y(ab)s(out)c(0.03)j Fp(k)s(m=s)p FG(.)40 b(As)30 b(another)g(example,)h
-(the)f(maxim)m(um)f(error)g(when)g(correcting)i(from)e(the)h(observ)m
-(ers)0 2357 y(rest)h(frame)f(to)h(the)g(lo)s(cal)g(group)f(is)g(ab)s
-(out)g(5)h Fp(k)s(m=s)g FG(o)m(v)m(er)g(a)g(1)g(degree)g(\014eld)f(of)g
-(view.)0 2641 y Fw(9.7)112 b(Handling)39 b(Dual-Sideband)h(Sp)s(ectra)0
-2856 y FG(Dual)32 b(sideband)d(sup)s(er-hetero)s(dyne)h(receiv)m(ers)i
-(pro)s(duce)e(sp)s(ectra)h(in)f(whic)m(h)h(eac)m(h)h(c)m(hannel)g(con)m
-(tains)g(con-)0 2969 y(tributions)27 b(from)g(t)m(w)m(o)i(di\013eren)m
-(t)f(frequencies,)g(referred)f(to)h(as)f(the)h(\\upp)s(er)e(sideband)g
-(frequency")h(and)g(the)0 3082 y(\\lo)m(w)m(er)i(sideband)d
-(frequency".)40 b(In)26 b(the)i(rest)f(frame)h(of)f(the)h(observ)m(er)f
-(\(top)s(o)s(cen)m(tric\),)j(these)e(are)g(related)g(to)0
-3195 y(eac)m(h)k(other)e(as)h(follo)m(ws:)1544 3518 y
-Fm(f)1585 3530 y Fl(lsb)1694 3518 y Fk(=)23 b(2)p Fm(:f)1888
-3530 y Fl(LO)2007 3518 y Fj(\000)18 b Fm(f)2131 3530
-y Fl(usb)3446 3518 y Fk(\(1\))0 3754 y FG(where)34 b
-Fp(f)312 3768 y Fi(LO)454 3754 y FG(is)h(a)g(\014xed)e(frequency)i(kno)
-m(wn)f(as)h(the)f(\\lo)s(cal)j(oscillator)g(frequency".)53
-b(In)34 b(other)h(w)m(ords,)g(the)0 3867 y(lo)s(cal)30
-b(oscillator)g(frequency)e(is)g(alw)m(a)m(ys)i(mid-w)m(a)m(y)f(b)s(et)m
-(w)m(een)g(an)m(y)g(pair)f(of)g(corresp)s(onding)f(upp)s(er)g(and)g(lo)
-m(w)m(er)0 3980 y(sideband)37 b(frequencies)822 3947
-y Fv(15)897 3980 y FG(.)63 b(If)38 b(y)m(ou)g(w)m(an)m(t)h(to)f
-(describ)s(e)g(the)g(sp)s(ectral)g(axis)h(of)f(suc)m(h)f(a)i(sp)s
-(ectrum)e(using)g(a)0 4093 y(Sp)s(ecF)-8 b(rame)31 b(y)m(ou)h(m)m(ust)f
-(c)m(ho)s(ose)h(whether)f(y)m(ou)g(w)m(an)m(t)h(the)g(Sp)s(ecF)-8
-b(rame)31 b(to)h(describ)s(e)f Fp(f)3029 4108 y Fi(l)q(sb)3148
-4093 y FG(or)h Fp(f)3306 4108 y Fi(usb)3444 4093 y FG(-)f(a)h(basic)0
-4206 y(Sp)s(ecF)-8 b(rame)42 b(cannot)g(describ)s(e)f(b)s(oth)f
-(sidebands)g(sim)m(ultaneously)-8 b(.)76 b(Ho)m(w)m(ev)m(er,)46
-b(there)c(is)f(a)h(sub-class)f(of)0 4319 y(Sp)s(ecF)-8
-b(rame,)31 b(called)g(DSBSp)s(ecF)-8 b(rame,)32 b(whic)m(h)e(o)m(v)m
-(ercomes)i(this)f(di\016cult)m(y)-8 b(.)0 4475 y(A)33
-b(DSBSp)s(ecF)-8 b(rame)33 b(has)f(a)h(SideBand)f(attribute)h(whic)m(h)
-f(indicates)i(if)e(the)h(DSBSp)s(ecF)-8 b(rame)33 b(is)f(curren)m(tly)0
-4588 y(b)s(eing)k(used)f(to)i(describ)s(e)f(the)h(upp)s(er)d(or)i(lo)m
-(w)m(er)i(sideband)d(sp)s(ectral)i(axis.)59 b(The)35
-b(v)-5 b(alue)37 b(of)g(this)f(attribute)0 4701 y(can)k(b)s(e)f(c)m
-(hanged)h(at)h(an)m(y)f(time.)69 b(If)39 b(y)m(ou)h(use)g(the)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)38 b(function)h(to)i(\014nd)d(the)i(Mapping)0
-4814 y(b)s(et)m(w)m(een)f(t)m(w)m(o)g(DSBSp)s(ecF)-8
-b(rames,)40 b(the)f(setting)g(for)e(the)i(t)m(w)m(o)g(SideBand)e
-(attributes)i(will)f(b)s(e)f(tak)m(en)i(in)m(to)0 4927
-y(accoun)m(t.)j(Th)m(us,)29 b(if)h(y)m(ou)h(tak)m(e)g(a)g(cop)m(y)g(of)
-f(a)g(DSBSp)s(ecF)-8 b(rame,)31 b(toggle)h(its)f(SideBand)e(attribute,)
-i(and)f(then)0 5040 y(use)36 b(AST)p Fy(_)p FG(CONVER)-8
-b(T)34 b(to)j(\014nd)e(a)h(Mapping)g(from)g(the)g(original)h(to)g(the)f
-(mo)s(di\014ed)f(cop)m(y)-8 b(,)39 b(the)d(resulting)0
-5153 y(Mapping)f(will)g(b)s(e)f(of)h(the)g(form)g(of)g(equation)h(1)f
-(\(if)g(the)g(DSBSp)s(ecF)-8 b(rame)36 b(has)e(its)i(StdOfRest)e
-(attribute)0 5266 y(set)d(to)g(\\T)-8 b(op)s(o)s(cen)m(tric"\).)0
-5422 y(In)28 b(general,)j(when)d(\014nding)g(a)i(Mapping)f(b)s(et)m(w)m
-(een)h(t)m(w)m(o)g(arbitrary)f(DSBSp)s(ecF)-8 b(rames,)30
-b(the)g(total)h(Mapping)0 5535 y(is)f(made)h(of)f(of)h(three)f(parts)h
-(in)f(series:)p 0 5607 1512 4 v 73 5661 a Fs(15)138 5693
-y Fr(Note,)c(this)g(simple)g(relationship)h(only)f(applies)g(if)g(all)h
-(frequencies)f(are)g(top)r(o)r(cen)n(tric.)p eop end
-%%Page: 94 104
-TeXDict begin 94 103 bop 0 52 a FG(94)1201 b Fz(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))111
-351 y FG(1.)46 b(A)38 b(Mapping)f(whic)m(h)g(con)m(v)m(erts)h(the)g
-(\014rst)e(DSBSp)s(ecF)-8 b(rame)38 b(in)m(to)g(its)f(upp)s(er)f
-(sideband)g(represen)m(ta-)227 464 y(tion.)41 b(If)30
-b(the)g(DSBSp)s(ecF)-8 b(rame)30 b(already)h(represen)m(ts)f(its)g(upp)
-s(er)e(sideband,)h(this)h(Mapping)g(will)g(b)s(e)f(a)227
-577 y(UnitMap.)111 765 y(2.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m
-(erts)i(from)e(the)h(\014rst)f(to)i(the)f(second)f(DSBSp)s(ecF)-8
-b(rame,)27 b(treating)f(them)f(as)f(if)227 878 y(they)30
-b(w)m(ere)h(b)s(oth)e(basic)h(Sp)s(ecF)-8 b(rames.)41
-b(This)29 b(tak)m(es)i(accoun)m(t)h(of)e(an)m(y)g(di\013erence)g(in)g
-(units,)f(standard)227 991 y(of)i(rest,)g(system,)f Fx(etc)36
-b FG(b)s(et)m(w)m(een)31 b(the)f(t)m(w)m(o)i(DSBSp)s(ecF)-8
-b(rames.)111 1178 y(3.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m(erts)
-j(the)e(second)f(DSBSp)s(ecF)-8 b(rame)26 b(from)e(its)h(upp)s(er)e
-(sideband)h(represen)m(ta-)227 1291 y(tion)g(to)h(its)e(curren)m(t)h
-(sideband.)37 b(If)23 b(the)h(DSBSp)s(ecF)-8 b(rame)24
-b(curren)m(tly)f(represen)m(ts)h(its)g(upp)s(er)d(sideband,)227
-1404 y(this)31 b(Mapping)f(will)h(b)s(e)e(a)i(UnitMap.)0
-1666 y(If)h(an)h(attempt)h(is)f(made)f(to)i(\014nd)d(the)i(Mapping)g(b)
-s(et)m(w)m(een)g(a)g(DSBSp)s(ecF)-8 b(rame)34 b(and)e(a)h(basic)g(Sp)s
-(ecF)-8 b(rame,)0 1779 y(then)34 b(the)g(DSBSp)s(ecF)-8
-b(rame)34 b(will)g(b)s(e)g(treated)h(lik)m(e)g(a)f(basic)g(Sp)s(ecF)-8
-b(rame.)52 b(In)33 b(other)h(w)m(ords,)h(the)f(returned)0
-1892 y(Mapping)42 b(will)g(not)h(b)s(e)e(a\013ected)i(b)m(y)f(the)g
-(setting)i(of)e(the)g(SideBand)f(attribute)i(\(or)f(an)m(y)h(of)f(the)g
-(other)0 2005 y(attributes)31 b(sp)s(eci\014c)f(to)h(the)g(DSBSp)s(ecF)
--8 b(rame)31 b(class\).)0 2168 y(In)41 b(practice,)46
-b(the)c(lo)s(cal)h(oscillator)h(frequency)e(for)f(a)h(dual)g(sideband)e
-(instrumen)m(t)i(ma)m(y)g(not)g(b)s(e)f(easily)0 2281
-y(a)m(v)-5 b(ailable)31 b(to)f(an)f(observ)m(er.)40 b(Instead,)30
-b(it)f(is)g(common)g(practice)h(to)g(sp)s(ecify)f(the)g(sp)s(ectral)g
-(p)s(osition)g(of)g(some)0 2394 y(cen)m(tral)k(feature)g(in)f(the)g
-(observ)-5 b(ation)33 b(\(commonly)g(the)f(cen)m(tre)h(of)f(the)h
-(instrumen)m(t)e(passband\),)h(together)0 2507 y(with)23
-b(an)g(\\in)m(termediate)i(frequency".)39 b(T)-8 b(ogether,)26
-b(these)e(t)m(w)m(o)g(v)-5 b(alues)24 b(allo)m(w)g(the)g(lo)s(cal)g
-(oscillator)i(frequency)0 2619 y(to)21 b(b)s(e)f(determined.)37
-b(The)20 b(in)m(termediate)i(frequency)d(is)i(the)f(di\013erence)h(b)s
-(et)m(w)m(een)g(the)f(top)s(o)s(cen)m(tric)i(frequency)0
-2732 y(at)31 b(the)g(cen)m(tral)g(sp)s(ectral)g(p)s(osition)g(and)e
-(the)i(top)s(o)s(cen)m(tric)g(frequency)f(of)h(the)f(lo)s(cal)i
-(oscillator.)43 b(So:)1528 3081 y Fm(f)1569 3093 y Fl(LO)1693
-3081 y Fk(=)23 b Fm(f)1822 3093 y Fl(centr)r(al)2062
-3081 y Fk(+)18 b Fm(f)2186 3093 y Fl(if)3446 3081 y Fk(\(2\))0
-3343 y FG(The)29 b(DSBSp)s(ecF)-8 b(rame)30 b(class)h(uses)e(the)h
-(DSBCen)m(tre)g(attribute)g(to)g(sp)s(ecify)g(the)g(cen)m(tral)g(sp)s
-(ectral)g(p)s(osition)0 3456 y(\()p Fp(f)80 3471 y Fi(centr)r(al)309
-3456 y FG(\),)43 b(and)d(the)h(IF)g(attribute)g(to)g(sp)s(ecify)f(the)h
-(in)m(termediate)h(frequency)e(\()p Fp(f)2932 3471 y
-Fi(if)3001 3456 y FG(\).)72 b(The)40 b(DSBCen)m(tre)0
-3569 y(v)-5 b(alue)35 b(is)f(giv)m(en)h(and)f(returned)f(in)h(the)g(sp)
-s(ectral)h(system)f(describ)s(ed)f(b)m(y)i(the)f(DSBSp)s(ecF)-8
-b(rame)35 b(\(th)m(us)f(y)m(ou)0 3682 y(do)k(not)g(need)f(to)h
-(calculate)j(the)c(corresp)s(onding)g(top)s(o)s(cen)m(tric)i(frequency)
-e(y)m(ourself)h(-)g(this)g(will)g(b)s(e)f(done)0 3795
-y(automatically)28 b(b)m(y)e(the)g(DSBSp)s(ecF)-8 b(rame)26
-b(when)f(y)m(ou)h(assign)f(a)h(new)g(v)-5 b(alue)26 b(to)g(the)g
-(DSBCen)m(tre)g(attribute\).)0 3908 y(The)j(v)-5 b(alue)30
-b(assigned)f(to)i(the)e(IF)h(attribute)g(should)e(alw)m(a)m(ys)j(b)s(e)
-e(a)h(top)s(o)s(cen)m(tric)g(frequency)f(in)g(units)g(of)h(Hz,)0
-4021 y(ho)m(w)m(ev)m(er)38 b(a)f(negativ)m(e)h(v)-5 b(alue)37
-b(ma)m(y)g(b)s(e)f(giv)m(en)h(to)g(indicate)h(that)f(the)f(DSBCen)m
-(tre)h(v)-5 b(alue)37 b(is)g(in)f(the)g(upp)s(er)0 4134
-y(sideband)g(\(that)j(is,)h(if)d Fp(I)7 b(F)50 b(<)37
-b FG(0)h(then)f Fp(f)1447 4149 y Fi(centr)r(al)1713 4134
-y Fp(>)g(f)1866 4148 y Fi(LO)1973 4134 y FG(\).)63 b(A)37
-b(p)s(ositiv)m(e)i(v)-5 b(alue)38 b(for)f(IF)h(indicates)g(that)g(the)0
-4247 y(DSBCen)m(tre)31 b(v)-5 b(alue)31 b(is)f(in)g(the)h(lo)m(w)m(er)h
-(sideband)d(\(that)i(is,)g(if)f Fp(I)7 b(F)39 b(>)25
-b FG(0)30 b(then)g Fp(f)2685 4262 y Fi(centr)r(al)2939
-4247 y Fp(<)25 b(f)3080 4261 y Fi(LO)3187 4247 y FG(\).)p
-eop end
-%%Page: 95 105
-TeXDict begin 95 104 bop 3689 52 a FG(95)0 351 y FA(10)135
-b(Time)45 b(Systems)h(\(TimeF)-11 b(rames\))0 597 y FG(The)23
-b(TimeF)-8 b(rame)25 b(is)f(a)h(F)-8 b(rame)25 b(whic)m(h)e(is)h(sp)s
-(ecialised)h(for)f(represen)m(ting)g(momen)m(ts)g(in)g(time.)39
-b(In)23 b(this)h(section)0 710 y(w)m(e)31 b(examine)g(the)g(additional)
-h(prop)s(erties)e(and)f(b)s(eha)m(viour)i(of)f(a)h(TimeF)-8
-b(rame)32 b(that)f(distinguish)f(it)h(from)f(a)0 823
-y(basic)h(F)-8 b(rame)31 b(\()p Fu(x)p FG(7\).)0 1105
-y Fw(10.1)112 b(The)38 b(TimeF)-9 b(rame)39 b(Mo)s(del)0
-1319 y FG(As)29 b(for)f(a)i(SkyF)-8 b(rame,)29 b(a)h(TimeF)-8
-b(rame)29 b(is)g(a)h(F)-8 b(rame)29 b(\()p Fu(x)p FG(7\))i(and)d(also)i
-(a)f(Mapping)g(\()p Fu(x)p FG(5\),)i(so)e(it)g(inherits)g(all)g(the)0
-1432 y(prop)s(erties)c(and)g(b)s(eha)m(viour)g(of)h(these)g(t)m(w)m(o)h
-(ancestral)g(classes.)40 b(When)25 b(used)g(as)h(a)g(Mapping,)g(a)g
-(TimeF)-8 b(rame)0 1545 y(implemen)m(ts)26 b(a)f(unit)g
-(transformation,)h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8
-b(rame)26 b(\()p Fu(x)p FG(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)
-s(ect)0 1658 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g
-(imp)s(ortance.)0 1813 y(When)23 b(used)g(as)h(a)g(F)-8
-b(rame,)26 b(ho)m(w)m(ev)m(er,)g(a)e(TimeF)-8 b(rame)25
-b(represen)m(ts)e(a)h(wide)f(range)h(of)g(di\013eren)m(t)g
-(1-dimensional)0 1926 y(co)s(ordinate)30 b(system)f(whic)m(h)f(can)h(b)
-s(e)g(used)f(to)h(describ)s(e)g(momen)m(ts)g(in)f(time.)41
-b(Absolute)30 b(times)f(and)f(relativ)m(e)0 2039 y(\(i.e.)41
-b(elapsed\))28 b(times)g(are)g(supp)s(orted)e(\(attribute)i
-(TimeOrigin\),)g(as)g(are)g(a)g(range)g(of)f(di\013eren)m(t)h(time)g
-(scales)0 2152 y(\(attribute)39 b(TimeScale\).)65 b(An)37
-b(absolute)i(or)f(relativ)m(e)i(v)-5 b(alue)38 b(in)f(an)m(y)i(time)f
-(scale)h(can)g(b)s(e)e(represen)m(ted)h(in)0 2265 y(di\013eren)m(t)23
-b(forms)e(suc)m(h)h(as)g(Mo)s(di\014ed)g(Julian)g(Date,)k(Julian)21
-b(Ep)s(o)s(c)m(h,)j Fx(etc)j FG(\(attribute)c(System\).)38
-b(AST)22 b(extends)0 2378 y(the)30 b(de\014nition)f(of)g(these)h
-(systems)g(to)g(allo)m(w)h(them)e(to)h(b)s(e)f(used)g(with)g(an)m(y)g
-(unit)g(of)h(time)g(\(attribute)h(Unit\).)0 2491 y(The)i(TimeF)-8
-b(rame)35 b(class)g(also)g(allo)m(ws)g(times)g(to)g(formatted)f(as)g
-(either)h(a)f(simple)g(\015oating)h(p)s(oin)m(t)f(v)-5
-b(alue)34 b(or)0 2604 y(as)d(a)f(Gregorian)i(date)f(and)f(time)h(of)f
-(da)m(y)h(\(attribute)g(F)-8 b(ormat\).)0 2886 y Fw(10.2)112
-b(Creating)38 b(a)g(TimeF)-9 b(rame)0 3100 y FG(The)33
-b(TimeF)-8 b(rame)35 b(constructor)f(function)f(is)h(particularly)g
-(simple)g(and)f(a)h(TimeF)-8 b(rame)34 b(with)g(default)f(at-)0
-3213 y(tributes)d(is)h(created)g(as)g(follo)m(ws:)262
-3433 y Ft(INCLUDE)40 b('AST_PAR')262 3533 y(INTEGER)g(TIMEFRAME,)g
-(STATUS)262 3732 y(STATUS)h(=)i(0)262 3931 y(...)262
-4130 y(TIMEFRAME)c(=)44 b(AST_TIMEFRAME\()37 b(')44 b(',)e(STATUS)f(\))
-0 4364 y FG(Suc)m(h)25 b(a)g(TimeF)-8 b(rame)27 b(w)m(ould)e(represen)m
-(t)g(the)h(default)f(co)s(ordinate)h(system)g(whic)m(h)f(is)g(Mo)s
-(di\014ed)g(Julian)g(Date)0 4476 y(\(with)30 b(the)h(usual)f(units)g
-(of)g(da)m(ys\))h(in)f(the)h(In)m(ternational)g(A)m(tomic)i(Time)d(\(T)
--8 b(AI\))31 b(time)g(scale.)0 4759 y Fw(10.3)112 b(Sp)s(ecifying)39
-b(a)f(P)m(articular)f(Time)h(System)0 4973 y FG(By)28
-b(setting)g(the)g(System)f(attribute)h(appropriately)-8
-b(,)29 b(the)f(TimeF)-8 b(rame)28 b(can)g(represen)m(t)f(Julian)h
-(Date,)h(Mo)s(d-)0 5086 y(i\014ed)37 b(Julian)h(Date,)k(Julian)37
-b(Ep)s(o)s(c)m(h)g(or)h(Besselian)h(Ep)s(o)s(c)m(h)e(\(the)i(time)f
-(scale)h(is)f(sp)s(eci\014ed)f(b)m(y)h(a)g(separate)0
-5199 y(attribute)31 b(called)h(TimeScale\).)0 5354 y(Selection)d(of)f
-(a)h(particular)f(co)s(ordinate)h(system)f(is)f(p)s(erformed)g(simply)g
-(b)m(y)h(setting)h(a)f(v)-5 b(alue)28 b(for)g(the)g(Time-)0
-5467 y(F)-8 b(rame's)35 b(\(c)m(haracter)h(string\))f(System)f
-(attribute.)53 b(This)33 b(setting)j(is)e(most)g(con)m(v)m(enien)m(tly)
-j(done)d(when)f(the)0 5580 y(TimeF)-8 b(rame)31 b(is)f(created.)42
-b(F)-8 b(or)30 b(example,)h(a)g(TimeF)-8 b(rame)30 b(represen)m(ting)h
-(Julian)e(Ep)s(o)s(c)m(h)g(w)m(ould)h(b)s(e)f(created)0
-5693 y(b)m(y:)p eop end
-%%Page: 96 106
-TeXDict begin 96 105 bop 0 52 a FG(96)2068 b Fz(10)92
-b(TIME)30 b(SYSTEMS)f(\(TIMEFRAMES\))262 351 y Ft(TIMEFRAME)39
-b(=)44 b(AST_TIMEFRAME\()37 b('System=JEPOCH',)g(STATUS)k(\))0
-614 y FG(Note)35 b(that)f(sp)s(ecifying)g(\\System=JEPOCH")f(also)i(c)m
-(hanges)g(the)f(asso)s(ciated)h(default)f(Unit)g(\(from)f(da)m(ys)0
-727 y(to)g(y)m(ears\).)46 b(This)31 b(is)h(b)s(ecause)g(the)h(default)f
-(v)-5 b(alue)32 b(of)g(the)g(TimeF)-8 b(rame's)33 b(Unit)g(attribute)f
-(dep)s(ends)e(on)i(the)0 839 y(System)e(attribute)h(setting.)0
-1002 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5
-b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)
-f(needed.)40 b(The)29 b(v)-5 b(alues)0 1115 y(supp)s(orted)29
-b(are)h(set)h(out)g(in)f(the)g(attribute's)i(description)e(in)g(App)s
-(endix)f(C.)0 1408 y Fw(10.4)112 b(A)m(ttributes)37 b(whic)m(h)g
-(Qualify)i(Time)f(Co)s(ordinate)h(Systems)0 1630 y FG(Time)f(co)s
-(ordinate)i(systems)e(require)g(some)h(additional)g(free)f(parameters)h
-(to)g(iden)m(tify)g(a)g(particular)f(co-)0 1743 y(ordinate)c(system)g
-(from)f(amongst)i(a)f(broader)f(class)h(of)g(related)h(co)s(ordinate)f
-(systems.)51 b(F)-8 b(or)34 b(example,)i(all)0 1856 y(TimeF)-8
-b(rames)29 b(are)f(quali\014ed)g(b)m(y)g(the)g(time)h(scale)g(\(that)h
-(is,)e(the)h(ph)m(ysical)f(pro)s(cess)g(used)f(to)i(de\014ne)e(the)h
-(\015o)m(w)0 1968 y(of)j(time\),)g(and)f(some)h(require)f(the)g(p)s
-(osition)h(of)f(the)h(observ)m(er's)g(clo)s(c)m(k.)0
-2131 y(In)42 b(AST,)g(these)h(free)f(parameters)h(are)g(represen)m(ted)
-f(b)m(y)h(additional)g(TimeF)-8 b(rame)43 b(attributes,)k(eac)m(h)c(of)
-0 2244 y(whic)m(h)35 b(has)g(a)g(default)g(appropriate)h(to)f(\()p
-Fx(i.e.)g FG(de\014ned)f(b)m(y\))i(the)f(setting)h(of)f(the)h(main)f
-(System)f(attribute.)0 2357 y(Eac)m(h)e(of)g(these)g
-Fx(qualifying)h(attributes)g FG(ma)m(y)-8 b(,)33 b(ho)m(w)m(ev)m(er,)g
-(b)s(e)e(assigned)h(an)f(explicit)i(v)-5 b(alue)32 b(so)g(as)g(to)g
-(select)h(a)0 2470 y(particular)27 b(co)s(ordinate)h(system.)40
-b(Note,)29 b(it)f(is)f(usually)g(b)s(est)g(to)h(assign)f(explicit)h(v)
--5 b(alues)28 b(whenev)m(er)f(p)s(ossible)0 2583 y(rather)f(than)g
-(relying)h(on)f(defaults.)40 b(A)m(ttribute)27 b(should)f(only)g(b)s(e)
-g(left)h(at)g(their)f(default)h(v)-5 b(alue)27 b(if)f(y)m(ou)h(\\don't)
-0 2696 y(care")33 b(what)f(v)-5 b(alue)33 b(is)f(used.)45
-b(In)32 b(certain)h(circumstances)f(\(particularly)-8
-b(,)34 b(when)e(aligning)h(t)m(w)m(o)g(F)-8 b(rames\),)34
-b(a)0 2809 y(default)f(v)-5 b(alue)33 b(for)g(an)f(attribute)i(ma)m(y)f
-(b)s(e)g(replaced)g(b)m(y)f(the)h(v)-5 b(alue)34 b(from)e(another)h
-(similar)g(F)-8 b(rame.)49 b(Suc)m(h)0 2922 y(v)-5 b(alue)31
-b(replacemen)m(t)h(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h
-(an)f(explicit)i(v)-5 b(alue)31 b(to)g(the)f(attribute,)i(rather)e
-(than)0 3034 y(simply)g(relying)h(on)f(the)g(default.)0
-3197 y(The)g(main)g(TimeF)-8 b(rame)32 b(attributes)e(whic)m(h)h
-(qualify)f(the)h(System)f(attribute)h(are:)227 3460 y
-FE(TimeScale)427 3572 y FG(This)f(sp)s(eci\014es)g(the)g(time)i(scale.)
-227 3719 y FE(L)-9 b(TO\013set)427 3831 y FG(This)32
-b(sp)s(eci\014es)g(the)h(o\013set)g(from)f(Lo)s(cal)h(Time)g(to)g(UTC)f
-(in)g(hours)f(\(time)j(zones)f(east)g(of)427 3944 y(Green)m(wic)m(h)c
-(ha)m(v)m(e)f(p)s(ositiv)m(e)h(v)-5 b(alues\).)40 b(Note,)30
-b(AST)c(uses)h(the)h(v)-5 b(alue)27 b(as)h(supplied)e(without)427
-4057 y(making)31 b(an)m(y)g(correction)g(for)g(da)m(yligh)m(t)h(sa)m
-(ving.)227 4203 y FE(TimeOrigin)427 4316 y FG(This)h(sp)s(eci\014es)g
-(the)g(zero)h(p)s(oin)m(t)g(from)e(whic)m(h)h(time)h(v)-5
-b(alues)34 b(are)g(measured,)f(within)g(the)427 4429
-y(system)39 b(sp)s(eci\014ed)e(b)m(y)h(the)h(System)f(attribute.)65
-b(Th)m(us,)39 b(a)g(v)-5 b(alue)39 b(ofzero)g(\(the)g(default\))427
-4542 y(indicates)g(that)g(time)g(v)-5 b(alues)38 b(represen)m(t)h
-(absolute)g(times.)64 b(Non-zero)40 b(v)-5 b(alues)38
-b(ma)m(y)h(b)s(e)427 4655 y(used)26 b(to)g(indicate)i(that)e(the)h
-(TimeF)-8 b(rame)27 b(represen)m(ts)f(elapsed)g(time)h(since)g(the)f
-(sp)s(eci\014ed)427 4768 y(origin.)0 5030 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-5143 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 5256 y(attribute)g(\(also)h(in)e(App)s(endix)e(C\).)0
-5419 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 5532 y(the)c(main)f(System)g(or)g
-(TimeScale)i(v)-5 b(alue.)50 b(An)m(y)34 b(suc)m(h)f(v)-5
-b(alues)33 b(are)h(stored,)h(but)e(are)g(not)h(used)f(unless)f(the)0
-5645 y(System)e(and/or)g(TimeScale)i(v)-5 b(alue)31 b(is)f(later)h(set)
-g(so)g(that)g(they)g(b)s(ecome)f(relev)-5 b(an)m(t.)p
-eop end
-%%Page: 97 107
-TeXDict begin 97 106 bop 3689 52 a FG(97)0 351 y FA(11)135
-b(Comp)t(ound)44 b(F)-11 b(rames)45 b(\(CmpF)-11 b(rames\))0
-610 y FG(W)j(e)29 b(no)m(w)f(turn)f(to)i(a)f(rather)g(sp)s(ecial)g
-(form)g(of)g(Mapping,)h(the)f(CmpF)-8 b(rame.)39 b(The)28
-b(F)-8 b(rames)29 b(w)m(e)f(ha)m(v)m(e)h(consid-)0 723
-y(ered)k(so)h(far)f(ha)m(v)m(e)h(b)s(een)e(atomic,)k(in)d(the)h(sense)f
-(that)h(they)f(represen)m(t)g(pre-de\014ned)f(elemen)m(tary)j(ph)m
-(ysical)0 836 y(domains.)53 b(A)35 b(CmpF)-8 b(rame,)36
-b(ho)m(w)m(ev)m(er,)i(is)c(a)h(comp)s(ound)f(F)-8 b(rame.)54
-b(In)34 b(essence,)j(it)e(is)g(a)g(structure)f(for)h(con-)0
-949 y(taining)45 b(other)f(F)-8 b(rames)45 b(and)e(its)h(purp)s(ose)e
-(is)i(to)h(allo)m(w)h(those)e(F)-8 b(rames)45 b(to)f(w)m(ork)g
-(together)i(in)d(v)-5 b(arious)0 1062 y(com)m(binations)41
-b(while)f(app)s(earing)f(as)i(a)f(single)g(Ob)5 b(ject.)70
-b(A)40 b(CmpF)-8 b(rame's)39 b(b)s(eha)m(viour)h(is)g(therefore)g(not)0
-1175 y(pre-de\014ned,)29 b(but)h(is)g(determined)g(b)m(y)h(the)f(other)
-h(F)-8 b(rames)31 b(it)g(con)m(tains)g(\(its)g(\\comp)s(onen)m(t")h(F)
--8 b(rames\).)0 1342 y(As)44 b(with)f(comp)s(ound)f(Mappings,)48
-b(comp)s(ound)42 b(F)-8 b(rames)44 b(can)g(b)s(e)f(nested)h(within)f
-(eac)m(h)i(other,)j(forming)0 1455 y(arbitrarily)31 b(complex)g(F)-8
-b(rames.)0 1762 y Fw(11.1)112 b(Creating)38 b(a)g(CmpF)-9
-b(rame)0 1990 y FG(A)31 b(v)m(ery)h(common)g(use)f(for)g(a)g(CmpF)-8
-b(rame)32 b(within)e(astronom)m(y)i(is)g(to)g(represen)m(t)f(a)h(\\sp)s
-(ectral)g(cub)s(e".)43 b(This)0 2103 y(is)34 b(a)h(3-dimensional)h(F)-8
-b(rame)35 b(in)f(whic)m(h)g(one)h(of)f(the)h(axes)g(represen)m(ts)f(p)s
-(osition)h(within)f(a)h(sp)s(ectrum,)f(and)0 2216 y(the)40
-b(other)h(t)m(w)m(o)h(axes)e(represen)m(t)h(p)s(osition)f(on)g(the)h
-(sky)f(\(or)g(some)h(other)f(spatial)i(domain)e(suc)m(h)g(as)g(the)0
-2329 y(fo)s(cal)32 b(plane)g(of)g(a)f(telescop)s(e\).)46
-b(As)32 b(an)f(example,)i(w)m(e)f(create)h(suc)m(h)e(a)h(CmpF)-8
-b(rame)32 b(in)f(whic)m(h)g(axes)h(1)g(and)f(2)0 2442
-y(represen)m(t)e(Righ)m(t)h(Ascension)g(and)e(Declination)k(\(ICRS\),)d
-(and)f(axis)i(3)g(represen)m(ts)f(w)m(a)m(v)m(elength)i(\(these)f(are)0
-2555 y(the)h(default)f(co)s(ordinate)h(Systems)f(represen)m(ted)h(b)m
-(y)f(a)h(SkyF)-8 b(rame)30 b(and)g(a)h(Sp)s(ecF)-8 b(rame)31
-b(resp)s(ectiv)m(ely\):)262 2817 y Ft(INTEGER)40 b(SKYFRAME)262
-2916 y(INTEGER)g(SPECFRAME)262 3016 y(INTEGER)g(CMPFRAME)262
-3116 y(...)262 3215 y(SKYFRAME)g(=)j(AST_SKYFRAME\()38
-b(')43 b(',)g(STATUS)e(\))262 3315 y(SPECFRAME)e(=)44
-b(AST_SPECFRAME\()37 b(')44 b(',)e(STATUS)f(\))262 3414
-y(CMPFRAME)f(=)j(AST_CMPFRAME\()38 b(SKYFRAME,)i(SPECFRAME,)f(')44
-b(',)e(STATUS)g(\))0 3690 y FG(If)27 b(it)g(w)m(as)h(desired)e(to)i
-(mak)m(e)g(RA)f(and)g(Dec)h(corresp)s(ond)e(to)i(axes)f(1)h(and)e(3,)i
-(with)f(axis)h(2)f(b)s(eing)g(the)g(sp)s(ectral)0 3803
-y(axis,)k(then)f(the)h(axes)g(of)f(the)h(CmpF)-8 b(rame)30
-b(created)h(ab)s(o)m(v)m(e)h(w)m(ould)e(need)g(to)h(b)s(e)f(p)s(erm)m
-(uted)g(as)g(follo)m(ws:)262 4064 y Ft(INTEGER)40 b(PERM\(3\))262
-4164 y(...)262 4363 y(PERM\()h(1)i(\))g(=)h(1)262 4463
-y(PERM\()d(2)i(\))g(=)h(3)262 4563 y(PERM\()d(3)i(\))g(=)h(2)262
-4662 y(CALL)d(AST_PERMAXES\()e(CMPFRAME,)h(PERM,)h(STATUS)g(\))0
-4970 y Fw(11.2)112 b(The)38 b(A)m(ttributes)e(of)i(a)g(CmpF)-9
-b(rame)0 5198 y FG(A)45 b(CmpF)-8 b(rame)44 b Fx(is)h(a)52
-b FG(F)-8 b(rame)45 b(and)f(so)h(has)f(all)h(the)g(attributes)g(of)g(a)
-f(F)-8 b(rame.)84 b(The)44 b(default)h(v)-5 b(alue)45
-b(for)0 5311 y(the)e(Domain)g(attribute)g(for)g(a)g(CmpF)-8
-b(rame)42 b(is)g(formed)g(b)m(y)h(concatenating)i(the)e(Domains)g(of)f
-(the)h(t)m(w)m(o)0 5423 y(comp)s(onen)m(t)25 b(F)-8 b(rames,)27
-b(separated)f(b)m(y)f(a)g(min)m(us)f(sign)h(\(\\-"\).)2048
-5390 y Fv(16)2164 5423 y FG(The)f(\(\014xed\))h(v)-5
-b(alue)26 b(for)f(its)g(System)g(attribute)p 0 5516 1512
-4 v 73 5570 a Fs(16)138 5602 y Fr(If)32 b(b)r(oth)f(comp)r(onen)n(t)g
-(F)-6 b(rames)32 b(ha)n(v)n(e)e(blank)h(Domains,)j(then)c(the)h
-(default)h(Domain)g(for)g(the)f(CmpF)-6 b(rame)31 b(is)h(the)f(string)0
-5693 y(\\CMP".)p eop end
-%%Page: 98 108
-TeXDict begin 98 107 bop 0 52 a FG(98)1827 b Fz(11)92
-b(COMPOUND)30 b(FRAMES)h(\(CMPFRAMES\))0 351 y FG(is)f(\\Comp)s(ound".)
-645 318 y Fv(17)759 351 y FG(A)h(CmpF)-8 b(rame)30 b(has)g(no)g
-(further)f(attributes)i(o)m(v)m(er)g(and)f(ab)s(o)m(v)m(e)h(those)g
-(common)g(to)g(all)0 464 y(F)-8 b(rames.)74 b(Ho)m(w)m(ev)m(er,)46
-b(attributes)c(of)g(the)f(t)m(w)m(o)i(comp)s(onen)m(t)e(F)-8
-b(rames)42 b(can)g(b)s(e)e(accessed)j(as)e(if)h(they)f(w)m(ere)0
-577 y(attributes)31 b(of)f(the)h(CmpF)-8 b(rame,)31 b(as)f(describ)s
-(ed)f(b)s(elo)m(w.)0 740 y(F)-8 b(rame)28 b(attributes)g(whic)m(h)g
-(are)f(sp)s(eci\014c)h(to)g(individual)f(axes)h(\(suc)m(h)f(as)h(Lab)s
-(el\(2\),)h(F)-8 b(ormat\(1\),)31 b Fx(etc)5 b FG(\))28
-b(simply)0 853 y(mirror)40 b(the)h(corresp)s(onding)f(axes)h(of)h(the)f
-(relev)-5 b(an)m(t)42 b(comp)s(onen)m(t)f(F)-8 b(rame.)73
-b(That)41 b(is,)j(if)c(the)h(\\Lab)s(el\(2\)")0 966 y(attribute)h(of)g
-(a)f(CmpF)-8 b(rame)41 b(is)h(accessed,)j(the)d(CmpF)-8
-b(rame)41 b(will)h(forw)m(ard)f(the)g(access)i(request)e(to)h(the)0
-1079 y(comp)s(onen)m(t)c(F)-8 b(rame)39 b(whic)m(h)f(con)m(tains)h
-(axis)g(2.)64 b(Th)m(us,)40 b(default)e(v)-5 b(alues)38
-b(for)g(axis)h(attributes)f(will)h(b)s(e)e(the)0 1191
-y(same)31 b(as)f(those)h(pro)m(vided)f(b)m(y)h(the)f(comp)s(onen)m(t)h
-(F)-8 b(rames.)0 1354 y(An)44 b(axis)g(index)g(can)g(optionally)i(b)s
-(e)d(app)s(ended)f(to)j(the)g(name)f(of)g(F)-8 b(rames)45
-b(attributes)f(whic)m(h)g(do)g(not)0 1467 y(normally)36
-b(ha)m(v)m(e)h(suc)m(h)e(an)h(index)f(\(System,)i(Domain,)h(Ep)s(o)s(c)
-m(h,)f(Title,)h Fx(etc)5 b FG(\).)57 b(If)35 b(this)h(is)f(done,)i(the)
-f(access)0 1580 y(request)e(is)f(forw)m(arded)g(to)h(the)g(comp)s(onen)
-m(t)g(F)-8 b(rame)34 b(con)m(taining)h(the)f(indicated)g(axis.)51
-b(F)-8 b(or)34 b(instance,)i(if)d(a)0 1693 y(CmpF)-8
-b(rame)35 b(con)m(tains)i(a)f(Sp)s(ecF)-8 b(rame)36 b(and)f(a)h(SkyF)-8
-b(rame)36 b(in)f(that)h(order,)h(and)e(the)g(axes)i(ha)m(v)m(e)f(not)g
-(b)s(een)0 1806 y(p)s(erm)m(uted,)31 b(then)g(getting)i(the)f(v)-5
-b(alue)31 b(of)h(attribute)g(\\System")g(will)g(return)e(\\Comp)s
-(ound")g(as)i(men)m(tioned)0 1919 y(ab)s(o)m(v)m(e)38
-b(\(that)g(is,)i(the)d(System)g(v)-5 b(alue)37 b(of)h(the)f(CmpF)-8
-b(rame)37 b(as)g(a)h(whole\),)i(whereas)d(getting)h(the)g(v)-5
-b(alue)37 b(of)0 2032 y(attribute)29 b(\\System\(1\)")h(will)f(return)e
-(\\Sp)s(ectral"\(that)j(is,)f(the)f(System)g(v)-5 b(alue)29
-b(of)g(the)f(comp)s(onen)m(t)h(F)-8 b(rame)0 2145 y(con)m(taining)32
-b(axis)f(1)g(|)f(the)g(Sp)s(ecF)-8 b(rame\).)0 2307 y(This)31
-b(tec)m(hnique)i(is)f(not)g(limited)g(to)h(attributes)f(common)h(to)f
-(all)h(F)-8 b(rames.)46 b(F)-8 b(or)33 b(instance,)g(the)f(SkyF)-8
-b(rame)0 2420 y(class)31 b(de\014nes)f(an)h(attribute)g(called)h
-(Equino)m(x)e(whic)m(h)g(is)h(not)g(held)f(b)m(y)h(other)f(classes)i
-(of)f(F)-8 b(rames.)42 b(T)-8 b(o)31 b(set)g(a)0 2533
-y(v)-5 b(alue)29 b(for)g(the)f(Equino)m(x)h(attribute)g(of)g(the)g
-(SkyF)-8 b(rame)29 b(con)m(tained)h(within)e(the)h(ab)s(o)m(v)m(e)h
-(CmpF)-8 b(rame,)29 b(assign)0 2646 y(the)37 b(v)-5 b(alue)38
-b(to)g(the)f(\\Equino)m(x\(2\)")j(attribute)e(of)f(the)g(CmpF)-8
-b(rame.)62 b(Since)37 b(the)g(SkyF)-8 b(rame)38 b(de\014nes)e(b)s(oth)0
-2759 y(axes)e(2)h(and)e(3)h(of)g(the)g(CmpF)-8 b(rame,)35
-b(w)m(e)f(could)g(equiv)-5 b(alen)m(tly)35 b(ha)m(v)m(e)g(set)f(a)h(v)
--5 b(alue)34 b(for)f(\\Equino)m(x\(3\)")j(since)0 2872
-y(this)30 b(w)m(ould)g(also)i(result)e(in)g(the)h(attribute)g(access)g
-(b)s(eing)f(forw)m(arded)g(to)h(the)g(SkyF)-8 b(rame.)0
-3035 y(Finally)g(,)48 b(if)43 b(an)f(attribute)i(is)f(not)g
-(quali\014ed)g(b)m(y)g(a)g(axis)h(index,)h(attempts)f(will)g(b)s(e)e
-(made)h(to)h(access)g(it)0 3147 y(using)31 b(eac)m(h)h(of)f(the)h(CmpF)
--8 b(rame)31 b(axes)h(in)e(turn.)42 b(Using)32 b(the)f(ab)s(o)m(v)m(e)i
-(example)e(of)h(the)f(sp)s(ectral)h(cub)s(e,)e(if)i(an)0
-3260 y(attempt)25 b(w)m(as)g(made)f(to)h(get)h(the)e(v)-5
-b(alue)25 b(of)f(attribute)h(\\Equino)m(x")h(\(with)e(no)g(axis)h
-(index\),)g(eac)m(h)h(axis)f(in)f(turn)0 3373 y(w)m(ould)30
-b(b)s(e)f(used.)40 b(Since)30 b(axis)h(1)f(is)g(con)m(tained)h(within)f
-(a)g(Sp)s(ecF)-8 b(rame,)31 b(the)f(\014rst)f(attempt)j(w)m(ould)d
-(fail)i(since)0 3486 y(the)i(Sp)s(ecF)-8 b(rame)34 b(class)g(do)s(es)e
-(not)i(ha)m(v)m(e)g(an)f(Equino)m(x)g(attribute.)50 b(Ho)m(w)m(ev)m
-(er,)36 b(the)d(second)g(attempt)i(w)m(ould)0 3599 y(succeed)e(b)s
-(ecause)f(axis)h(2)g(is)g(con)m(tained)g(within)f(a)h(SkyF)-8
-b(rame)33 b(whic)m(h)f Fx(do)-5 b(es)41 b FG(ha)m(v)m(e)34
-b(an)e(Equino)m(x)g(attribute.)0 3712 y(Th)m(us)h(the)i(returned)e
-(attribute)i(v)-5 b(alue)35 b(w)m(ould)f(b)s(e)f(that)i(obtained)g
-(from)f(the)g(SkyF)-8 b(rame)35 b(con)m(taining)h(axis)0
-3825 y(2.)k(When)27 b(getting)i(or)f(testing)g(an)g(attribute)g(v)-5
-b(alue,)28 b(the)g(returned)e(v)-5 b(alue)28 b(is)f(determined)g(b)m(y)
-h(the)f Fx(\014rst)37 b FG(axis)0 3938 y(whic)m(h)32
-b(recognises)i(the)f(attribute.)48 b(When)33 b(setting)g(an)g
-(attribute)g(v)-5 b(alue,)34 b Fx(al)5 b(l)43 b FG(axes)33
-b(whic)m(h)f(recognises)i(the)0 4051 y(attribute)g(ha)m(v)m(e)g(the)g
-(attribute)g(v)-5 b(alue)33 b(set)h(to)g(the)g(giv)m(en)g(v)-5
-b(alue.)50 b(Lik)m(ewise,)35 b(when)d(clearing)j(an)e(attribute)0
-4164 y(v)-5 b(alue,)31 b(all)g(axes)g(whic)m(h)f(recognises)i(the)f
-(attribute)g(ha)m(v)m(e)g(the)g(attribute)g(v)-5 b(alue)31
-b(cleared.)p 0 5607 1512 4 v 73 5661 a Fs(17)138 5693
-y Fr(An)n(y)24 b(attempt)i(to)g(c)n(hange)g(the)f(System)g(v)l(alue)g
-(of)i(a)f(CmpF)-6 b(rame)26 b(is)g(ignored.)p eop end
-%%Page: 99 109
-TeXDict begin 99 108 bop 3689 52 a FG(99)0 351 y FA(12)135
-b(An)44 b(In)l(tro)t(duction)h(to)g(Co)t(ordinate)h(System)g(Con)l(v)l
-(ersions)0 604 y FG(In)20 b(this)i(section,)i(w)m(e)e(start)f(to)h(lo)s
-(ok)g(at)g(tec)m(hniques)g(for)f(con)m(v)m(erting)i(b)s(et)m(w)m(een)f
-(di\013eren)m(t)f(co)s(ordinate)h(systems.)0 717 y(A)m(t)37
-b(this)f(stage,)j(the)e(to)s(ols)g(w)m(e)f(ha)m(v)m(e)i(a)m(v)-5
-b(ailable)38 b(are)f(F)-8 b(rames)36 b(\()p Fu(x)p FG(7\),)k(SkyF)-8
-b(rames)36 b(\()p Fu(x)p FG(8\),)j(Sp)s(ecF)-8 b(rames)37
-b(\()p Fu(x)p FG(9\),)0 830 y(TimeF)-8 b(rames)22 b(\()p
-Fu(x)p FG(10\))h(and)d(v)-5 b(arious)21 b(Mappings)g(\()p
-Fu(x)p FG(5\).)39 b(These)21 b(are)g(su\016cien)m(t)h(to)g(allo)m(w)g
-(us)f(to)g(b)s(egin)g(examining)0 943 y(the)31 b(problem,)f(but)f(more)
-i(sophisticated)g(approac)m(hes)g(will)g(also)g(emerge)h(later)f(\()p
-Fu(x)p FG(14.2\).)0 1237 y Fw(12.1)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(Celestial)g(Co)s(ordinate)g(Systems)0
-1458 y FG(W)-8 b(e)39 b(b)s(egin)e(b)m(y)h(examining)g(ho)m(w)g(to)h
-(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(t)m(w)m(o)g(celestial)h(co)s
-(ordinate)f(systems)e(represen)m(ted)0 1571 y(b)m(y)32
-b(SkyF)-8 b(rames,)33 b(as)g(this)f(is)g(b)s(oth)g(an)g(illuminating)h
-(and)e(practical)j(example.)47 b(Consider)31 b(the)i(problem)e(of)0
-1684 y(con)m(v)m(erting)h(celestial)h(co)s(ordinates)e(b)s(et)m(w)m
-(een:)111 1947 y(1.)46 b(The)24 b(old)h(FK4)g(system,)h(with)e(no)h(E)f
-(terms,)i(a)f(Besselian)h(ep)s(o)s(c)m(h)e(of)h(1958.0)i(and)d(a)h
-(Besselian)h(equino)m(x)227 2060 y(of)31 b(1960.0.)111
-2248 y(2.)46 b(An)40 b(ecliptic)i(co)s(ordinate)g(system)e(based)g(on)g
-(the)h(mean)f(equino)m(x)h(and)f(ecliptic)i(of)f(Julian)f(ep)s(o)s(c)m
-(h)227 2360 y(2010.5.)0 2623 y(This)24 b(example)h(is)f(arbitrary)g
-(but)g(not)h(completely)h(unrealistic.)39 b(Unless)25
-b(y)m(ou)f(already)h(ha)m(v)m(e)h(exp)s(ertise)f(with)0
-2736 y(suc)m(h)30 b(con)m(v)m(ersions,)i(y)m(ou)f(are)f(unlik)m(ely)h
-(to)g(\014nd)e(it)i(straigh)m(tforw)m(ard.)0 2899 y(Using)43
-b(AST,)g(w)m(e)h(b)s(egin)e(b)m(y)h(creating)i(t)m(w)m(o)f(SkyF)-8
-b(rames)44 b(to)g(represen)m(t)f(these)h(co)s(ordinate)g(systems,)i(as)
-0 3012 y(follo)m(ws:)262 3261 y Ft(INCLUDE)40 b('AST_PAR')262
-3361 y(INTEGER)g(SKYFRAME1,)g(SKYFRAME2,)f(STATUS)262
-3560 y(STATUS)i(=)i(0)262 3759 y(...)262 3959 y(SKYFRAME1)c(=)44
-b(AST_SKYFRAME\()38 b('System=FK4-NO-E)o(,)f(Epoch=B1958,)i
-(Equinox=B1960',)e(STATUS)k(\))262 4058 y(SKYFRAME2)e(=)44
-b(AST_SKYFRAME\()38 b('System=Ecliptic)o(,)f(Equinox=J2010.5',)g
-(STATUS)k(\))0 4321 y FG(Note)30 b(ho)m(w)f(sp)s(ecifying)f(the)h(co)s
-(ordinate)h(systems)f(consists)g(simply)f(of)h(initialising)h(the)f
-(attributes)g(of)g(eac)m(h)0 4434 y(SkyF)-8 b(rame)27
-b(appropriately)-8 b(.)40 b(The)26 b(next)h(step)f(is)h(to)g(\014nd)e
-(a)i(w)m(a)m(y)g(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(these)g
-(SkyF)-8 b(rames.)0 4547 y(This)30 b(is)g(done)g(using)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T,)29 b(as)i(follo)m(ws:)262 4796
-y Ft(INTEGER)40 b(CVT)262 4996 y(...)262 5195 y(CVT)i(=)h
-(AST_CONVERT\()c(SKYFRAME1,)g(SKYFRAME2,)h(')j(',)f(STATUS)g(\))262
-5295 y(IF)g(\()h(CVT)g(.EQ.)f(AST__NULL)e(\))j(THEN)392
-5394 y(<conversion)c(is)k(not)f(possible>)262 5494 y(ELSE)392
-5593 y(<conversion)d(is)k(possible>)262 5693 y(END)f(IF)p
-eop end
-%%Page: 100 110
-TeXDict begin 100 109 bop 0 52 a FG(100)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FG(The)h(third)f(argumen)m(t)i(of)g(AST)
-p Fy(_)p FG(CONVER)-8 b(T)29 b(is)h(not)h(used)e(here)i(and)e(should)h
-(b)s(e)f(a)i(blank)f(string.)0 511 y(AST)p Fy(_)p FG(CONVER)-8
-b(T)34 b(will)h(return)f(a)h(n)m(ull)g(result,)h(AST)p
-Fy(__)p FG(NULL)e(\(as)i(de\014ned)d(in)i(the)g(AST)p
-Fy(_)p FG(P)-8 b(AR)35 b(include)0 624 y(\014le\),)41
-b(if)d(con)m(v)m(ersion)h(is)f(not)h(p)s(ossible.)63
-b(In)37 b(this)h(example,)j(con)m(v)m(ersion)f(is)e(p)s(ossible,)i(so)e
-(it)h(will)f(return)f(a)0 736 y(p)s(oin)m(ter)30 b(to)h(a)g(new)f(Ob)5
-b(ject)31 b(that)g(describ)s(es)e(the)i(con)m(v)m(ersion.)0
-896 y(The)f(Ob)5 b(ject)31 b(returned)f(is)h(called)h(a)f(F)-8
-b(rameSet.)43 b(W)-8 b(e)32 b(ha)m(v)m(e)h(not)e(discussed)f(F)-8
-b(rameSets)31 b(y)m(et)h(\()p Fu(x)p FG(13\),)i(but)c(for)0
-1009 y(the)25 b(presen)m(t)h(purp)s(oses)d(w)m(e)j(can)f(consider)h
-(them)f(simply)g(as)g(Ob)5 b(jects)25 b(that)h(can)g(b)s(eha)m(v)m(e)g
-(b)s(oth)e(as)i(Mappings)0 1122 y(and)k(as)g(F)-8 b(rames.)42
-b(It)30 b(is)g(the)g(F)-8 b(rameSet's)32 b(b)s(eha)m(viour)e(as)g(a)h
-(Mapping)f(in)g(whic)m(h)g(w)m(e)g(are)h(mainly)f(in)m(terested)0
-1235 y(here,)d(b)s(ecause)g(the)f(Mapping)h(it)g(implemen)m(ts)g(is)f
-(the)h(one)f(w)m(e)h(require|)p Fx(i.e.)f FG(it)h(con)m(v)m(erts)g(b)s
-(et)m(w)m(een)h(the)e(t)m(w)m(o)0 1347 y(celestial)33
-b(co)s(ordinate)e(systems)g(\()p Fu(x)p FG(14.1\).)0
-1507 y(F)-8 b(or)30 b(example,)g(if)f(ALPHA1)h(and)e(DEL)-8
-b(T)g(A1)31 b(are)e(t)m(w)m(o)i(arra)m(ys)e(con)m(taining)i(the)e
-(longitude)h(and)e(latitude,)j(in)0 1620 y(radians,)22
-b(of)f(N)f(p)s(oin)m(ts)g(on)g(the)h(sky)f(in)g(the)g(original)i(co)s
-(ordinate)f(system)f(\(corresp)s(onding)g(to)h(SKYFRAME1\),)0
-1733 y(then)35 b(they)g(could)h(b)s(e)e(con)m(v)m(erted)j(in)m(to)f
-(the)g(new)e(co)s(ordinate)j(system)e(\(represen)m(ted)h(b)m(y)f
-(SKYFRAME2\))0 1846 y(as)c(follo)m(ws:)262 2081 y Ft(INTEGER)40
-b(N)262 2181 y(DOUBLE)h(PRECISION)e(ALPHA1\()i(N)i(\),)g(DELTA1\()e(N)i
-(\))262 2280 y(DOUBLE)e(PRECISION)e(ALPHA2\()i(N)i(\),)g(DELTA2\()e(N)i
-(\))262 2480 y(...)262 2679 y(CALL)e(AST_TRAN2\()f(CVT,)i(N,)h(ALPHA1,)
-d(DELTA1,)h(.TRUE.,)g(ALPHA2,)f(DELTA2,)h(STATUS)g(\))0
-2928 y FG(The)30 b(new)g(co)s(ordinates)i(are)f(returned)e
-Fx(via)i FG(the)g(ALPHA2)g(and)f(DEL)-8 b(T)g(A2)32 b(arra)m(ys.)42
-b(T)-8 b(o)31 b(transform)f(co)s(ordi-)0 3041 y(nates)e(in)e(the)i(opp)
-s(osite)f(direction,)i(w)m(e)e(simply)g(in)m(v)m(ert)h(the)f(5th)g
-(\(logical\))k(argumen)m(t)c(to)h(AST)p Fy(_)p FG(TRAN2,)f(as)0
-3154 y(follo)m(ws:)262 3389 y Ft(CALL)41 b(AST_TRAN2\()f(CVT,)i(N,)h
-(ALPHA2,)d(DELTA2,)h(.FALSE.,)f(ALPHA1,)h(DELTA1,)g(STATUS)g(\))0
-3638 y FG(The)e(F)-8 b(rameSet)40 b(returned)f(b)m(y)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)38 b(also)i(con)m(tains)h(information)f(ab)s
-(out)f(the)g(SkyF)-8 b(rames)0 3751 y(used)24 b(in)h(the)g(con)m(v)m
-(ersion)h(\()p Fu(x)p FG(14.1\).)42 b(As)25 b(w)m(e)g(men)m(tioned)h
-(ab)s(o)m(v)m(e,)h(a)e(F)-8 b(rameSet)27 b(ma)m(y)e(b)s(e)f(used)h(as)g
-(a)g(F)-8 b(rame)26 b(and)0 3864 y(in)20 b(this)g(case)h(it)g(b)s(eha)m
-(v)m(es)g(lik)m(e)h(the)e(\\destination")i(F)-8 b(rame)21
-b(used)f(in)g(the)g(con)m(v)m(ersion)i(\()p Fx(i.e.)e
-FG(lik)m(e)h(SKYFRAME2\).)0 3977 y(W)-8 b(e)35 b(could)e(therefore)h
-(use)f(the)g(CVT)g(F)-8 b(rameSet)34 b(to)g(calculate)i(the)e(distance)
-g(b)s(et)m(w)m(een)g(t)m(w)m(o)g(p)s(oin)m(ts)f(\(with)0
-4090 y(co)s(ordinates)e(in)f(radians\))g(in)g(the)h(destination)g(co)s
-(ordinate)g(system,)g(using)f(AST)p Fy(_)p FG(DIST)-8
-b(ANCE:)262 4325 y Ft(DOUBLE)41 b(PRECISION)e(DISTANCE,)h(POINT1\()h(2)
-i(\),)g(POINT2\()e(2)i(\))262 4524 y(...)262 4724 y(DISTANCE)d(=)j
-(AST_DISTANCE\()38 b(CVT,)k(POINT1,)f(POINT2,)f(STATUS)i(\))0
-4973 y FG(and)30 b(the)g(result)h(w)m(ould)f(b)s(e)g(the)g(same)h(as)f
-(if)h(the)f(SKYFRAME2)h(SkyF)-8 b(rame)31 b(had)f(b)s(een)f(used.)0
-5132 y(Another)35 b(w)m(a)m(y)i(to)f(see)g(ho)m(w)f(the)h(F)-8
-b(rameSet)37 b(pro)s(duced)c(b)m(y)j(astCon)m(v)m(ert)h(retains)e
-(information)h(ab)s(out)f(the)0 5245 y(co)s(ordinate)29
-b(systems)g(in)m(v)m(olv)m(ed)h(is)f(to)g(set)g(its)g(Rep)s(ort)f
-(attribute)i(\(inherited)e(from)g(the)h(Mapping)g(class\))g(so)0
-5358 y(that)i(it)g(displa)m(ys)f(the)h(co)s(ordinates)g(b)s(efore)f
-(and)g(after)h(con)m(v)m(ersion)g(\()p Fu(x)p FG(4.8\):)262
-5593 y Ft(CALL)41 b(AST_SET\()g(CVT,)h('Report=1',)d(STATUS)i(\))262
-5693 y(CALL)g(AST_TRAN2\()f(CVT,)i(N,)h(ALPHA1,)d(DELTA1,)h(.TRUE.,)g
-(ALPHA2,)f(DELTA2,)h(STATUS)g(\))p eop end
-%%Page: 101 111
-TeXDict begin 101 110 bop 0 52 a Fz(12.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Sp)s(ectral)f(Co)s(ordinate)h(Systems)1421
-b FG(101)0 351 y(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g
-(lik)m(e)h(the)e(follo)m(wing:)227 622 y Fy(\(2:06:03.0,)45
-b(34:22:39\))g(-->)i(\(42.1087,)e(20.2717\))227 735 y(\(2:08:20.6,)g
-(35:31:24\))g(-->)i(\(43.0197,)e(21.1705\))227 847 y(\(2:10:38.1,)g
-(36:40:09\))g(-->)i(\(43.9295,)e(22.0716\))227 960 y(\(2:12:55.6,)g
-(37:48:55\))g(-->)i(\(44.8382,)e(22.9753\))227 1073 y(\(2:15:13.1,)g
-(38:57:40\))g(-->)i(\(45.7459,)e(23.8814\))227 1186 y(\(2:17:30.6,)g
-(40:06:25\))g(-->)i(\(46.6528,)e(24.7901\))227 1299 y(\(2:19:48.1,)g
-(41:15:11\))g(-->)i(\(47.5589,)e(25.7013\))227 1412 y(\(2:22:05.6,)g
-(42:23:56\))g(-->)i(\(48.4644,)e(26.6149\))227 1525 y(\(2:24:23.1,)g
-(43:32:41\))g(-->)i(\(49.3695,)e(27.5311\))227 1638 y(\(2:26:40.6,)g
-(44:41:27\))g(-->)i(\(50.2742,)e(28.4499\))0 1908 y FG(Here,)i(w)m(e)d
-(see)g(that)g(the)g(input)e(FK4)i(equatorial)h(co)s(ordinate)f(v)-5
-b(alues)44 b(\(giv)m(en)g(in)f(radians\))h(ha)m(v)m(e)g(b)s(een)0
-2021 y(formatted)24 b(automatically)i(in)e(sexagesimal)h(notation)g
-(using)e(the)h(con)m(v)m(en)m(tional)i(hours)c(for)i(righ)m(t)g
-(ascension)0 2134 y(and)35 b(degrees)i(for)f(declination.)58
-b(Con)m(v)m(ersely)-8 b(,)39 b(the)d(output)g(ecliptic)i(co)s
-(ordinates)e(are)h(sho)m(wn)e(in)g(decimal)0 2247 y(degrees,)25
-b(as)f(is)f(con)m(v)m(en)m(tional)j(for)d(ecliptic)i(co)s(ordinates.)39
-b(Both)24 b(are)f(displa)m(y)m(ed)h(using)f(the)g(default)g(precision)0
-2360 y(of)31 b(7)f(digits.)421 2327 y Fv(18)0 2525 y
-FG(In)k(fact,)j(the)f(CVT)e(F)-8 b(rameSet)36 b(has)f(access)h(to)g
-(all)f(the)h(information)f(in)f(the)h(original)i(SkyF)-8
-b(rames)35 b(whic)m(h)0 2638 y(w)m(ere)29 b(passed)e(to)i(AST)p
-Fy(_)p FG(CONVER)-8 b(T.)27 b(If)h(y)m(ou)g(had)g(set)h(a)f(new)g
-(Digits)h(attribute)g(v)-5 b(alue)29 b(for)f(either)g(of)h(these,)0
-2751 y(the)h(formatting)g(ab)s(o)m(v)m(e)h(w)m(ould)f(re\015ect)g(the)g
-(di\013eren)m(t)g(precision)g(y)m(ou)g(requested)g(b)m(y)f(displa)m
-(ying)h(a)g(greater)0 2864 y(or)g(smaller)h(n)m(um)m(b)s(er)e(of)i
-(digits.)0 3166 y Fw(12.2)112 b(Con)m(v)m(erting)38 b(b)s(et)m(w)m(een)
-g(Sp)s(ectral)f(Co)s(ordinate)i(Systems)0 3391 y FG(The)44
-b(principles)h(describ)s(ed)e(in)i(the)g(previous)f(section)i(for)f
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(celestial)j(co)s(ordinate)0
-3504 y(systems)21 b(also)h(apply)f(to)h(the)f(task)h(of)f(con)m(v)m
-(erting)i(b)s(et)m(w)m(een)f(sp)s(ectral)g(co)s(ordinate)g(systems.)37
-b(As)21 b(an)h(example,)0 3617 y(let's)28 b(lo)s(ok)f(at)h(ho)m(w)f(w)m
-(e)g(migh)m(t)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(frequency)e
-(measured)g(in)h Fp(GH)7 b(z)31 b FG(as)c(measured)g(in)f(the)h(rest)0
-3730 y(frame)22 b(of)g(the)g(telescop)s(e,)j(and)c(radio)h(v)m(elo)s
-(cit)m(y)i(measured)d(in)h Fp(k)s(m=s)g FG(measured)f(with)g(resp)s
-(ect)h(the)g(kinematic)0 3843 y(Lo)s(cal)31 b(Standard)e(of)i(Rest.)0
-4008 y(First)i(w)m(e)g(create)h(a)f(default)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(then)h(set)g(its)g(attributes)g(to)g(describ)s(e)g
-(the)f(required)g(radio)0 4121 y(v)m(elo)s(cit)m(y)d(system)e(\(this)g
-(is)g(sligh)m(tly)h(more)f(con)m(v)m(enien)m(t,)j(giv)m(en)e(the)f
-(relativ)m(ely)i(large)f(n)m(um)m(b)s(er)e(of)h(attributes,)0
-4234 y(than)g(sp)s(ecifying)f(the)i(attribute)f(v)-5
-b(alues)28 b(in)e(a)i(single)f(string)g(suc)m(h)g(as)g(w)m(ould)g(b)s
-(e)f(passed)g(to)i(the)f(Sp)s(ecF)-8 b(rame)0 4347 y(constructor\).)49
-b(W)-8 b(e)34 b(then)f(tak)m(e)h(a)f(cop)m(y)h(of)f(this)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(c)m(hange)i(the)f(attribute)h(v)-5
-b(alues)33 b(so)g(that)0 4460 y(the)d(cop)m(y)g(describ)s(es)f(the)h
-(original)h(frequency)e(system)h(\(mo)s(difying)f(a)i(cop)m(y)-8
-b(,)31 b(rather)e(than)h(creating)h(a)f(new)0 4573 y(Sp)s(ecF)-8
-b(rame)32 b(from)g(scratc)m(h,)h(a)m(v)m(oids)h(the)e(need)g(to)h(sp)s
-(ecify)e(the)h(ep)s(o)s(c)m(h,)h(reference)f(p)s(osition,)h
-Fx(etc)k FG(a)32 b(second)0 4686 y(time)f(since)g(they)f(are)h(all)g
-(inherited)f(b)m(y)h(the)f(cop)m(y\):)262 4943 y Ft(INCLUDE)40
-b('AST_PAR')262 5043 y(INTEGER)g(SPECFRAME1,)f(SPECFRAME2,)g(STATUS)262
-5242 y(STATUS)i(=)i(0)262 5441 y(...)p 0 5607 1512 4
-v 73 5661 a Fs(18)138 5693 y Fr(The)26 b(leading)h(digit)f(is)g(zero)g
-(and)g(is)g(therefore)g(not)g(seen)g(in)f(this)h(particular)h(example.)
-p eop end
-%%Page: 102 112
-TeXDict begin 102 111 bop 0 52 a FG(102)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)262 351 y Ft(SPECFRAME1)39 b(=)k
-(AST_SPECFRAME\()38 b(')43 b(',)g(STATUS)e(\))262 451
-y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('System=vradio',)e(STATUS)k(\))262
-551 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('Unit=km/s',)g(STATUS)i(\))262
-650 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('Epoch=1996-Oct-2)e
-(12:13:56.985',)218 750 y(:)653 b(STATUS)41 b(\))262
-849 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('ObsLon=W155:28:1)o(8')o(,)f
-(STATUS)j(\))262 949 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f
-('ObsLat=N19:49:34)o(',)e(STATUS)k(\))262 1049 y(CALL)g(AST_SETC\()f
-(SPECFRAME1,)f('RefRA=18:14:50.6)o(',)e(STATUS)k(\))262
-1148 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('RefDec=-4:40:49')o(,)e
-(STATUS)42 b(\))262 1248 y(CALL)f(AST_SETC\()f(SPECFRAME1,)f
-('RestFreq=230.538)e(GHz',)k(STATUS)h(\))262 1348 y(CALL)f(AST_SETC\()f
-(SPECFRAME1,)f('StdOfRest=LSRK',)e(STATUS)k(\))262 1547
-y(SPECFRAME2)e(=)k(AST_COPY\()d(SPECFRAME1,)f(STATUS)i(\))262
-1646 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('System=freq',)f(STATUS)j(\))
-262 1746 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('Unit=GHz',)g(STATUS)i(\))
-262 1846 y(CALL)g(AST_SETC\()f(SPECFRAME1,)f('StdOfRest=Topoce)o(nt)o
-(ric)o(',)e(STATUS)k(\))0 2199 y FG(Note,)j(the)c(fact)h(that)f(a)h(Sp)
-s(ecF)-8 b(rame)40 b(has)g(only)g(a)g(single)g(axis)h(means)f(that)g(w)
-m(e)h(w)m(ere)f(able)g(to)h(refer)f(to)0 2312 y(the)33
-b(Unit)g(attribute)h(without)f(an)f(axis)i(index.)47
-b(The)33 b(other)g(attributes)g(are:)46 b(the)33 b(time)h(of)f(of)g
-(observ)-5 b(ation)0 2425 y(\(Ep)s(o)s(c)m(h\),)43 b(the)d
-(geographical)i(p)s(osition)e(of)h(the)f(telescop)s(e)i(\(ObsLat)e(&)g
-(ObsLon\),)h(the)g(p)s(osition)f(of)g(the)0 2538 y(source)c(on)f(the)h
-(sky)f(\(RefRA)h(&)f(RefDec\),)k(the)c(rest)h(frequency)f(\(RestF)-8
-b(req\))37 b(and)e(the)h(standard)f(of)g(rest)0 2651
-y(\(StdOfRest\).)0 2811 y(The)24 b(next)h(step)g(is)f(to)i(\014nd)d(a)i
-(w)m(a)m(y)g(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)g(these)f(Sp)s
-(ecF)-8 b(rames.)39 b(W)-8 b(e)26 b(use)e(exactly)i(the)f(same)0
-2924 y(co)s(de)30 b(that)h(w)m(e)f(did)f(in)h(the)g(previous)f(section)
-j(where)d(w)m(e)h(w)m(ere)h(con)m(v)m(erting)h(b)s(et)m(w)m(een)e
-(celestial)j(co)s(ordinate)0 3037 y(systems:)262 3278
-y Ft(INTEGER)40 b(CVT)262 3477 y(...)262 3676 y(CVT)i(=)h
-(AST_CONVERT\()c(SPECFRAME1,)g(SPECFRAME2,)g(')k(',)g(STATUS)e(\))262
-3776 y(IF)h(\()h(CVT)g(.EQ.)f(AST__NULL)e(\))j(THEN)392
-3876 y(<conversion)c(is)k(not)f(possible>)262 3975 y(ELSE)392
-4075 y(<conversion)d(is)k(possible>)262 4174 y(END)f(IF)0
-4428 y FG(A)29 b(b)s(efore,)h(this)f(will)h(giv)m(e)h(us)d(a)i(F)-8
-b(rameSet)30 b(\(assuming)g(con)m(v)m(ersion)g(is)g(p)s(ossible,)f
-(whic)m(h)g(should)f(alw)m(a)m(ys)j(b)s(e)0 4541 y(the)36
-b(case)i(for)d(our)h(example\),)j(and)c(w)m(e)i(can)f(use)g(the)h(F)-8
-b(rameSet)37 b(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(the)h(t)m(w)m(o)
-g(sp)s(ectral)0 4654 y(co)s(ordinate)28 b(systems.)39
-b(W)-8 b(e)28 b(use)f(AST)p Fy(_)p FG(TRAN1)f(in)h(place)h(of)f(AST)p
-Fy(_)p FG(TRAN2)f(since)h(a)h(Sp)s(ecF)-8 b(rame)27 b(has)f(only)0
-4767 y(one)31 b(axis)g(\(unlik)m(e)g(a)f(SkyF)-8 b(rame)31
-b(whic)m(h)f(has)g(t)m(w)m(o\).)0 4928 y(F)-8 b(or)45
-b(example,)j(if)c(FR)m(Q)g(is)g(an)g(arra)m(y)h(con)m(taining)g(the)f
-(observ)m(ed)g(frequency)-8 b(,)48 b(in)c(GHz,)k(of)c(N)g(sp)s(ectral)0
-5041 y(c)m(hannels)35 b(\(describ)s(e)f(b)m(y)g(SPECFRAME1\),)i(then)e
-(they)h(could)f(b)s(e)g(con)m(v)m(erted)i(in)m(to)f(the)g(new)f(co)s
-(ordinate)0 5154 y(system)d(\(represen)m(ted)f(b)m(y)g(SPECFRAME2\))h
-(as)g(follo)m(ws:)262 5394 y Ft(INTEGER)40 b(N)262 5494
-y(DOUBLE)h(PRECISION)e(FRQ\()j(N)i(\))262 5593 y(DOUBLE)d(PRECISION)e
-(VEL\()j(N)i(\))p eop end
-%%Page: 103 113
-TeXDict begin 103 112 bop 0 52 a Fz(12.3)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Time)f(Co)s(ordinate)h(Systems)1540
-b FG(103)262 351 y Ft(...)262 551 y(CALL)41 b(AST_TRAN1\()f(CVT,)i(N,)h
-(FRQ,)f(.TRUE.,)e(VEL,)i(STATUS)f(\))0 797 y FG(The)30
-b(radio)g(v)m(elo)s(cit)m(y)j(v)-5 b(alues)31 b(are)g(returned)e(in)h
-(the)h(VEL)f(arra)m(y)-8 b(.)0 1084 y Fw(12.3)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(Time)g(Co)s(ordinate)g(Systems)0
-1301 y FG(All)d(the)f(principles)f(outlined)h(in)g(the)g(previous)f
-(section)i(ab)s(out)f(aligning)h(sp)s(ectral)f(co)s(cordinate)h
-(systems)0 1414 y(\(Sp)s(ecF)-8 b(rames\))26 b(can)g(b)s(e)f(applied)g
-(directly)i(to)f(the)g(problem)e(of)i(aligning)h(time)f(co)s(ordinate)g
-(systems)g(\(Time-)0 1527 y(F)-8 b(rames\).)0 1814 y
-Fw(12.4)112 b(Handling)39 b(SkyF)-9 b(rame)39 b(Axis)e(P)m(erm)m
-(utations)0 2032 y FG(W)-8 b(e)25 b(can)e(illustrate)i(an)e(imp)s
-(ortan)m(t)h(p)s(oin)m(t)f(if)g(w)m(e)h(sw)m(ap)g(the)f(axis)h(order)f
-(of)g(either)h(SkyF)-8 b(rame)24 b(in)f(the)h(example)0
-2144 y(ab)s(o)m(v)m(e)33 b(\()p Fu(x)p FG(12.1\))h(b)s(efore)e(iden)m
-(tifying)g(the)g(con)m(v)m(ersion.)46 b(Let's)33 b(assume)e(w)m(e)h
-(use)g(AST)p Fy(_)p FG(PERMAXES)e(\()p Fu(x)p FG(7.9\))0
-2257 y(to)h(do)f(this)h(to)g(the)f(second)h(SkyF)-8 b(rame,)31
-b(b)s(efore)f(applying)g(AST)p Fy(_)p FG(CONVER)-8 b(T,)29
-b(as)i(follo)m(ws:)262 2490 y Ft(INTEGER)40 b(PERM\()i(2)h(\))262
-2590 y(DATA)e(PERM)h(/)i(2,)e(1)h(/)262 2789 y(...)262
-2988 y(CALL)e(AST_PERMAXES\()e(SKYFRAME2,)g(PERM,)j(STATUS)f(\))262
-3088 y(CVT)h(=)h(AST_CONVERT\()c(SKYFRAME1,)g(SKYFRAME2,)h(')j(',)f
-(STATUS)g(\))0 3334 y FG(No)m(w,)31 b(the)g(destination)g(SkyF)-8
-b(rame)31 b(system)f(no)h(longer)g(represen)m(ts)f(the)g(co)s(ordinate)
-i(system:)227 3580 y(\(ecliptic)h(longitude,)e(ecliptic)h(latitude\))0
-3826 y(but)e(instead)g(represen)m(ts)h(the)f(transp)s(osed)f(system:)
-227 4072 y(\(ecliptic)k(latitude,)e(ecliptic)i(longitude\))0
-4318 y(As)21 b(a)g(consequence,)j(when)c(w)m(e)h(use)g(the)g(F)-8
-b(rameSet)22 b(returned)e(b)m(y)h(AST)p Fy(_)p FG(CONVER)-8
-b(T)19 b(to)j(apply)e(a)i(co)s(ordinate)0 4431 y(transformation,)31
-b(w)m(e)g(obtain)g(something)f(lik)m(e)i(the)f(follo)m(wing:)227
-4677 y Fy(\(2:06:03.0,)45 b(34:22:39\))g(-->)i(\(20.2717,)e(42.1087\))
-227 4790 y(\(2:08:20.6,)g(35:31:24\))g(-->)i(\(21.1705,)e(43.0197\))227
-4903 y(\(2:10:38.1,)g(36:40:09\))g(-->)i(\(22.0716,)e(43.9295\))227
-5016 y(\(2:12:55.6,)g(37:48:55\))g(-->)i(\(22.9753,)e(44.8382\))227
-5128 y(\(2:15:13.1,)g(38:57:40\))g(-->)i(\(23.8814,)e(45.7459\))227
-5241 y(\(2:17:30.6,)g(40:06:25\))g(-->)i(\(24.7901,)e(46.6528\))227
-5354 y(\(2:19:48.1,)g(41:15:11\))g(-->)i(\(25.7013,)e(47.5589\))227
-5467 y(\(2:22:05.6,)g(42:23:56\))g(-->)i(\(26.6149,)e(48.4644\))227
-5580 y(\(2:24:23.1,)g(43:32:41\))g(-->)i(\(27.5311,)e(49.3695\))227
-5693 y(\(2:26:40.6,)g(44:41:27\))g(-->)i(\(28.4499,)e(50.2742\))p
-eop end
-%%Page: 104 114
-TeXDict begin 104 113 bop 0 52 a FG(104)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FG(When)g(compared)h(to)g(the)f
-(original)i(\()p Fu(x)p FG(12.1\),)i(the)c(output)g(co)s(ordinate)h
-(order)f(has)h(b)s(een)e(sw)m(app)s(ed)g(to)j(com-)0
-464 y(p)s(ensate)f(for)g(the)h(di\013eren)m(t)g(destination)g(SkyF)-8
-b(rame)31 b(axis)g(order.)0 624 y(In)20 b(all,)j(there)e(are)f(four)g
-(p)s(ossible)g(axis)h(com)m(binations,)j(corresp)s(onding)19
-b(to)i(t)m(w)m(o)h(p)s(ossible)e(axis)g(orders)g(for)g(eac)m(h)0
-737 y(of)32 b(the)g(source)g(and)g(destination)h(SkyF)-8
-b(rames,)33 b(and)e(AST)p Fy(_)p FG(CONVER)-8 b(T)31
-b(will)h(con)m(v)m(ert)h(correctly)h(b)s(et)m(w)m(een)0
-850 y(an)m(y)g(of)g(these.)52 b(The)33 b(p)s(oin)m(t)h(to)g(note)h(is)e
-(that)i(a)f(SkyF)-8 b(rame)34 b(con)m(tains)h(kno)m(wledge)g(ab)s(out)f
-(ho)m(w)f(to)i(con)m(v)m(ert)0 963 y(to)g(and)e(from)g(other)h(SkyF)-8
-b(rames.)52 b(Since)34 b(its)g(t)m(w)m(o)h(axes)g(\(longitude)g(and)e
-(latitude\))i(are)f(distinguishable,)0 1076 y(the)d(con)m(v)m(ersion)g
-(is)g(able)g(to)g(tak)m(e)h(accoun)m(t)g(of)e(the)h(axis)f(order.)0
-1236 y(If)j(y)m(ou)h(need)f(to)h(iden)m(tify)g(the)g(axes)g(of)f(a)h
-(SkyF)-8 b(rame)34 b(explicitly)-8 b(,)36 b(taking)f(in)m(to)f(accoun)m
-(t)h(an)m(y)f(axis)f(p)s(erm)m(u-)0 1348 y(tations,)e(the)f(LatAxis)h
-(and)e(LonAxis)h(attributes)g(can)g(b)s(e)f(used.)40
-b(These)29 b(are)h(read-only)g(attributes)h(whic)m(h)0
-1461 y(giv)m(e)h(the)e(indices)h(of)f(the)h(latitude)g(and)f(longitude)
-h(axes)g(resp)s(ectiv)m(ely)-8 b(.)0 1750 y Fw(12.5)112
-b(Con)m(v)m(erting)38 b(Bet)m(w)m(een)f(F)-9 b(rames)0
-1969 y FG(Ha)m(ving)39 b(seen)f(ho)m(w)h(clev)m(er)g(SkyF)-8
-b(rames)38 b(are)h(\()p Fu(x)p FG(12.1)h(and)e Fu(x)p
-FG(12.4\),)k(w)m(e)d(will)f(next)g(examine)h(ho)m(w)f(dum)m(b)f(a)0
-2082 y(basic)28 b(F)-8 b(rame)29 b(can)f(b)s(e)f(in)h(comparison.)40
-b(F)-8 b(or)28 b(example,)i(if)d(w)m(e)i(create)g(t)m(w)m(o)g
-(2-dimensional)g(F)-8 b(rames)29 b(and)e(use)0 2195 y(AST)p
-Fy(_)p FG(CONVER)-8 b(T)29 b(to)i(deriv)m(e)g(a)g(con)m(v)m(ersion)g(b)
-s(et)m(w)m(een)g(them,)g(as)g(follo)m(ws:)262 2433 y
-Ft(INTEGER)40 b(FRAME1,)h(FRAME2)262 2632 y(...)262 2831
-y(FRAME1)g(=)i(AST_FRAME\()c(2,)k(')g(',)g(STATUS)e(\))262
-2931 y(FRAME2)g(=)i(AST_FRAME\()c(2,)k(')g(',)g(STATUS)e(\))262
-3030 y(CVT)h(=)h(AST_CONVERT\()c(FRAME1,)h(FRAME2,)h(')i(',)g(STATUS)e
-(\))0 3281 y FG(then)30 b(the)h(co)s(ordinate)g(transformation)g(whic)m
-(h)f(the)g(\\cvt")i(F)-8 b(rameSet)32 b(p)s(erforms)d(will)h(b)s(e)g
-(as)h(follo)m(ws:)227 3532 y Fy(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227
-3645 y(\(2,)g(4\))g(-->)g(\(2,)g(4\))227 3758 y(\(3,)g(6\))g(-->)g
-(\(3,)g(6\))227 3871 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227
-3984 y(\(5,)g(10\))g(-->)g(\(5,)g(10\))0 4235 y FG(This)31
-b(is)i(an)f(iden)m(tit)m(y)i(transformation,)f(exactly)h(the)e(same)h
-(as)g(a)f(UnitMap)h(\()p Fu(x)p FG(5.9\).)49 b(Ev)m(en)32
-b(if)g(w)m(e)h(p)s(erm)m(ute)0 4348 y(the)i(axis)h(order)e(of)h(our)g
-(F)-8 b(rames,)37 b(as)e(w)m(e)h(did)e(ab)s(o)m(v)m(e)i(\()p
-Fu(x)p FG(12.4\),)j(w)m(e)d(will)f(fare)g(no)g(b)s(etter.)55
-b(The)34 b(con)m(v)m(ersion)0 4461 y(b)s(et)m(w)m(een)d(our)f(t)m(w)m
-(o)i(basic)e(F)-8 b(rames)32 b(will)e(alw)m(a)m(ys)i(b)s(e)e(an)g(iden)
-m(tit)m(y)i(transformation.)0 4621 y(The)k(reason)h(for)f(this)h(is)f
-(that,)j(unlik)m(e)e(a)g(SkyF)-8 b(rame,)39 b(all)e(basic)g(F)-8
-b(rames)37 b(start)g(life)h(the)e(same)h(and)f(ha)m(v)m(e)0
-4734 y(axes)h(that)f(are)g(indistinguishable.)57 b(Therefore,)38
-b(p)s(erm)m(uting)d(their)h(axes)g(do)s(esn't)g(mak)m(e)h(them)f(lo)s
-(ok)g(an)m(y)0 4847 y(di\013eren)m(t|they)31 b(still)g(represen)m(t)g
-(the)f(same)h(co)s(ordinate)g(system.)0 5136 y Fw(12.6)112
-b(The)38 b(Choice)g(of)f(Alignmen)m(t)h(System)0 5354
-y FG(In)25 b(practice,)j(when)c(AST)h(is)g(ask)m(ed)h(to)g(\014nd)e(a)i
-(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames)26 b(describing)f(t)m(w)m(o)i(di\013eren)m(t)0
-5467 y(co)s(ordinate)40 b(systems)g(on)f(a)h(giv)m(en)g(ph)m(ysical)g
-(domain,)i(it)e(uses)f(an)g(in)m(termediate)i(\\alignmen)m(t")h
-(system.)0 5580 y(Th)m(us,)28 b(when)g(\014nding)g(a)h(con)m(v)m
-(ersion)h(from)e(system)h(A)g(to)h(system)f(B,)g(AST)f(\014rst)g
-(\014nds)f(the)i(Mapping)g(from)0 5693 y(system)g(A)f(to)i(some)e
-(alignmen)m(t)i(system,)g(system)e(C,)h(and)f(then)g(\014nds)f(the)h
-(Mapping)h(from)f(this)g(system)h(C)p eop end
-%%Page: 105 115
-TeXDict begin 105 114 bop 0 52 a Fz(12.6)93 b(The)29
-b(Choice)i(of)g(Alignmen)m(t)g(System)2072 b FG(105)0
-351 y(to)32 b(the)g(required)f(system)g(B.)i(It)e(\014nally)h
-(concatenates)i(these)e(t)m(w)m(o)g(Mappings)g(to)g(get)h(the)e
-(Mapping)h(from)0 464 y(system)f(A)f(to)h(system)g(B.)0
-627 y(One)23 b(adv)-5 b(an)m(tage)26 b(of)e(this)f(is)h(that)g(it)g
-(cuts)g(do)m(wn)f(the)h(n)m(um)m(b)s(er)e(of)i(con)m(v)m(ersion)h
-(algorithms)f(required.)38 b(If)23 b(there)0 740 y(are)31
-b Fp(N)41 b FG(di\013eren)m(t)32 b(Systems)e(whic)m(h)h(ma)m(y)h(b)s(e)
-e(used)g(to)i(describ)s(e)e(p)s(ositions)h(within)g(the)g(Domain,)h
-(then)f(this)0 853 y(approac)m(h)k(requires)e(ab)s(out)i(2)23
-b Fu(\003)g Fp(N)44 b FG(con)m(v)m(ersion)36 b(algorithms)f(to)g(b)s(e)
-f(written.)53 b(The)33 b(alternativ)m(e)k(approac)m(h)0
-966 y(of)29 b(going)i(directly)f(from)e(system)i(A)f(to)h(system)f(B)h
-(w)m(ould)f(require)g(ab)s(out)g Fp(N)e Fu(\003)19 b
-Fp(N)39 b FG(con)m(v)m(ersion)30 b(algorithms.)0 1128
-y(In)c(addition,)i(the)g(use)e(of)h(an)g(in)m(termediate)i(alignmen)m
-(t)f(system)f(highligh)m(ts)h(the)f(nature)g(of)g(the)g(con)m(v)m
-(ersion)0 1241 y(pro)s(cess.)57 b(What)37 b(do)f(w)m(e)h(mean)f(b)m(y)g
-(sa)m(ying)h(that)f(a)h(Mapping)f(\\con)m(v)m(erts)i(a)e(p)s(osition)g
-(in)g(one)h(co)s(ordinate)0 1354 y(system)e(in)m(to)h(the)f(corresp)s
-(onding)f(p)s(osition)h(in)g(another"?)54 b(In)35 b(practice,)i(it)f
-(means)e(that)i(the)f(input)f(and)0 1467 y(output)h(co)s(ordinates)i
-(corresp)s(ond)d(to)j(the)f(same)g(co)s(ordinates)g Fx(in)i(some)g
-(thir)-5 b(d)39 b(c)-5 b(o)g(or)g(dinate)40 b(system)p
-FG(.)58 b(The)0 1580 y(c)m(hoice)31 b(of)e(this)f(third)g(co)s
-(ordinate)i(system,)g(the)f(\\alignmen)m(t")i(system,)e(can)g
-(completely)i(alter)f(the)f(nature)0 1693 y(of)38 b(the)g(Mapping.)62
-b(The)37 b(F)-8 b(rame)39 b(class)f(has)g(an)f(attribute)i(called)f
-(AlignSystem)h(whic)m(h)e(can)h(b)s(e)f(used)g(to)0 1806
-y(sp)s(ecify)30 b(the)h(alignmen)m(t)g(system.)0 1969
-y(As)i(an)g(example,)i(consider)e(the)g(case)h(of)f(aligning)h(t)m(w)m
-(o)h(sp)s(ectra)e(calibrated)h(in)f(radio)g(v)m(elo)s(cit)m(y)-8
-b(,)37 b(but)32 b(eac)m(h)0 2081 y(with)26 b(a)g(di\013eren)m(t)g(rest)
-g(frequency)g(\(eac)m(h)h(sp)s(ectrum)e(will)h(b)s(e)g(describ)s(ed)e
-(b)m(y)i(a)g(Sp)s(ecF)-8 b(rame\).)40 b(Since)26 b(the)g(rest)0
-2194 y(frequencies)h(di\013er,)g(a)g(giv)m(en)h(v)m(elo)s(cit)m(y)h
-(will)e(corresp)s(ond)f(to)i(di\013eren)m(t)f(frequencies)g(in)f(the)h
-(t)m(w)m(o)h(sp)s(ectra.)40 b(So)0 2307 y(when)34 b(w)m(e)i(come)g(to)g
-(\\align")h(these)f(t)m(w)m(o)g(sp)s(ectra)g(\(that)g(is,)g(\014nd)e(a)
-i(Mapping)f(whic)m(h)g(con)m(v)m(erts)i(p)s(ositions)0
-2420 y(in)d(one)h(Sp)s(ecF)-8 b(rame)34 b(to)h(the)g(corresp)s(onding)e
-(p)s(ositions)i(in)f(the)g(other\),)j(w)m(e)d(ha)m(v)m(e)i(the)f(c)m
-(hoice)h(of)e(aligning)0 2533 y(the)d(frequencies)g(or)g(aligning)h
-(the)f(v)m(elo)s(cities.)44 b(Di\013eren)m(t)32 b(Mappings)f(will)g(b)s
-(e)f(required)g(to)i(describ)s(e)e(these)0 2646 y(t)m(w)m(o)i(forms)f
-(of)g(alignmen)m(t.)45 b(If)30 b(w)m(e)i(set)g(AlignSystem)f(to)h(\\F)
--8 b(req")33 b(then)e(the)g(returned)f(Mapping)h(will)h(align)0
-2759 y(the)e(frequencies)h(describ)s(ed)e(b)m(y)h(the)g(t)m(w)m(o)h(Sp)
-s(ecF)-8 b(rames.)41 b(On)30 b(the)g(other)g(hand,)g(if)g(w)m(e)g(set)h
-(AlignSystem)g(to)0 2872 y(\\V)-8 b(radio")32 b(then)e(the)h(returned)e
-(Mapping)h(will)h(align)g(the)g(v)m(elo)s(cities.)0 3035
-y(Some)e(c)m(hoices)i(of)e(alignmen)m(t)i(system)e(are)h(redundan)m(t.)
-39 b(F)-8 b(or)29 b(instance,)i(in)e(the)g(ab)s(o)m(v)m(e)h(example,)h
-(c)m(hanging)0 3147 y(the)i(alignmen)m(t)i(system)e(from)g(frequency)g
-(to)h(w)m(a)m(v)m(elength)h(has)e(no)g(e\013ect)i(on)e(the)g(returned)f
-(Mapping:)46 b(if)0 3260 y(t)m(w)m(o)27 b(sp)s(ectra)f(are)g(aligned)g
-(in)g(frequency)f(they)h(will)g(also)h(b)s(e)e(aligned)h(in)g(w)m(a)m
-(v)m(elength)i(\(assuming)d(the)h(sp)s(eed)0 3373 y(of)31
-b(ligh)m(t)g(do)s(esn't)f(c)m(hange\).)0 3536 y(The)d(default)g(v)-5
-b(alue)28 b(for)f(AlignSystem)h(dep)s(ends)e(on)h(the)g(class)h(of)g(F)
--8 b(rame.)40 b(F)-8 b(or)29 b(a)e(Sp)s(ecF)-8 b(rame,)29
-b(the)e(default)0 3649 y(is)41 b(w)m(a)m(v)m(elength)j(\(or)e(equiv)-5
-b(alen)m(tly)d(,)46 b(frequency\))c(since)f(this)g(is)h(the)f(system)h
-(in)f(whic)m(h)g(observ)-5 b(ations)42 b(are)0 3762 y(usually)34
-b(made.)53 b(The)34 b(Sp)s(ecF)-8 b(rame)34 b(class)h(also)h(has)e(an)g
-(attribute)h(called)h(AlignStdOfRest)e(whic)m(h)g(allo)m(ws)0
-3875 y(the)j(standard)g(of)g(rest)h(of)f(the)h(alignmen)m(t)g(system)g
-(to)g(b)s(e)e(sp)s(eci\014ed.)61 b(Similarly)-8 b(,)40
-b(the)d(TimeF)-8 b(rame)39 b(class)0 3988 y(has)31 b(an)h(attribute)h
-(called)g(AlignTimeScale)g(whic)m(h)e(allo)m(ws)i(the)f(time)h(scale)g
-(of)f(the)g(alignmen)m(t)h(system)f(to)0 4101 y(b)s(e)d(sp)s
-(eci\014ed.)40 b(Curren)m(tly)-8 b(,)30 b(the)g(SkyF)-8
-b(rame)31 b(uses)e(ICRS)g(as)h(the)g(default)g(for)g(AlignSystem,)h
-(since)f(this)g(is)g(a)0 4213 y(close)i(appro)m(ximation)f(to)g(an)f
-(inertial)i(frame)e(of)h(rest.)p eop end
-%%Page: 106 116
-TeXDict begin 106 115 bop 0 52 a FG(106)609 b Fz(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)p eop end
-%%Page: 107 117
-TeXDict begin 107 116 bop 3643 52 a FG(107)0 351 y FA(13)135
-b(Co)t(ordinate)46 b(System)f(Net)l(w)l(orks)i(\(F)-11
-b(rameSets\))0 591 y FG(W)j(e)32 b(sa)m(w)g(in)f Fu(x)p
-FG(12)h(ho)m(w)f(AST)p Fy(_)p FG(CONVER)-8 b(T)30 b(could)h(b)s(e)g
-(used)f(to)i(\014nd)e(a)h(Mapping)g(that)h(in)m(ter-relates)h(a)f(pair)
-0 704 y(of)38 b(co)s(ordinate)h(systems)e(represen)m(ted)h(b)m(y)g(F)-8
-b(rames.)63 b(There)37 b(is)h(a)g(limitation)i(to)e(this,)i(ho)m(w)m
-(ev)m(er,)h(in)d(that)0 817 y(it)c(can)f(only)g(b)s(e)g(applied)g(to)g
-(co)s(ordinate)h(systems)g(that)f(are)h(in)m(ter-related)h(b)m(y)e
-(suitable)g(con)m(v)m(en)m(tions.)51 b(In)0 930 y(the)38
-b(case)h(of)f(celestial)j(co)s(ordinates,)g(the)d(relev)-5
-b(an)m(t)39 b(con)m(v)m(en)m(tions)h(are)e(standards)f(set)i(out)f(b)m
-(y)g(the)g(In)m(ter-)0 1043 y(national)c(Astronomical)g(Union,)f(and)f
-(others,)h(that)g(de\014ne)f(what)g(these)h(co)s(ordinate)h(systems)e
-(mean.)47 b(In)0 1156 y(practice,)28 b(ho)m(w)m(ev)m(er,)h(the)c
-(relationships)h(b)s(et)m(w)m(een)h(man)m(y)f(other)g(co)s(ordinate)g
-(systems)g(are)g(also)h(of)f(practical)0 1269 y(imp)s(ortance.)0
-1418 y(Consider,)k(for)h(example,)h(the)f(fo)s(cal)h(plane)f(of)g(a)g
-(telescop)s(e)i(up)s(on)c(whic)m(h)i(an)f(image)j(of)e(the)g(sky)f(is)h
-(falling.)0 1531 y(W)-8 b(e)29 b(could)f(measure)g(p)s(ositions)g(in)f
-(this)h(fo)s(cal)h(plane)f(in)g(millimetres)h(or,)f(if)g(there)g(w)m
-(ere)h(a)f(detector)h(system)0 1644 y(suc)m(h)i(as)g(a)g(CCD)g(presen)m
-(t,)g(w)m(e)h(could)f(coun)m(t)g(pixels.)43 b(W)-8 b(e)32
-b(could)f(also)h(use)f(celestial)j(co)s(ordinates)d(of)g(man)m(y)0
-1757 y(di\013eren)m(t)h(kinds.)43 b(All)32 b(of)g(these)f(systems)h
-(are)g(equiv)-5 b(alen)m(t)33 b(in)e(their)g(e\013ectiv)m(eness)j(at)e
-(sp)s(ecifying)g(p)s(ositions)0 1870 y(in)e(the)h(fo)s(cal)g(plane,)f
-(but)g(some)h(are)g(more)f(con)m(v)m(enien)m(t)j(than)d(others)g(for)g
-(particular)h(purp)s(oses.)0 2020 y(Although)38 b(w)m(e)g(could,)h(in)f
-(principle,)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)f(all)h(of)f(these)g(fo)
-s(cal)g(plane)g(co)s(ordinate)g(systems,)0 2133 y(there)27
-b(is)h(no)f(pre-de\014ned)f(con)m(v)m(en)m(tion)j(for)e(doing)h(so.)40
-b(This)26 b(is)h(b)s(ecause)h(the)f(con)m(v)m(ersions)i(required)d(dep)
-s(end)0 2246 y(on)37 b(where)f(the)h(telescop)s(e)h(is)f(p)s(oin)m
-(ting)g(and)f(ho)m(w)h(the)g(CCD)f(is)h(moun)m(ted)f(in)h(the)g(fo)s
-(cal)g(plane.)60 b(Clearly)-8 b(,)0 2358 y(kno)m(wledge)31
-b(ab)s(out)e(this)g(cannot)h(b)s(e)f(built)h(in)m(to)g(the)g(AST)f
-(library)g(and)g(m)m(ust)g(b)s(e)g(supplied)f(in)h(some)h(other)0
-2471 y(w)m(a)m(y)-8 b(.)41 b(Note)27 b(that)g(this)g(is)f(exactly)i
-(the)e(same)h(problem)f(as)g(w)m(e)h(met)g(in)f Fu(x)p
-FG(7.12)i(when)d(discussing)h(the)h(Domain)0 2584 y(attribute|)p
-Fx(i.e.)36 b FG(co)s(ordinate)h(systems)f(that)g(apply)g(to)h
-(di\013eren)m(t)f(ph)m(ysical)h(domains)e(require)h(that)h(extra)0
-2697 y(information)31 b(b)s(e)e(supplied)h(b)s(efore)f(w)m(e)i(can)g
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(them.)0 2847 y(What)f(w)m(e)f
-(need,)g(therefore,)h(is)f(a)g(general)h(w)m(a)m(y)g(to)f(describ)s(e)g
-(ho)m(w)g(co)s(ordinate)g(systems)g(are)g(in)m(ter-related,)0
-2960 y(so)h(that)h(when)f(there)g(is)g(no)g(con)m(v)m(en)m(tion)j
-(already)e(in)e(place,)j(w)m(e)f(can)f(de\014ne)g(our)f(o)m(wn.)41
-b(W)-8 b(e)31 b(can)g(then)f(lo)s(ok)0 3073 y(forw)m(ard)37
-b(to)g(con)m(v)m(erting,)k(sa)m(y)-8 b(,)40 b(from)d(pixels)g(in)m(to)h
-(galactic)i(co)s(ordinates)e(and)e Fx(vic)-5 b(e)38 b(versa.)61
-b FG(In)37 b(AST,)f(the)0 3186 y(F)-8 b(rameSet)32 b(class)f(pro)m
-(vides)f(this)g(capabilit)m(y)-8 b(.)0 3460 y Fw(13.1)112
-b(The)38 b(F)-9 b(rameSet)38 b(Mo)s(del)0 3668 y FG(Consider)29
-b(a)h(co)s(ordinate)h(system)f(\(call)i(it)f(n)m(um)m(b)s(er)d(1\))j
-(whic)m(h)f(is)g(represen)m(ted)f(b)m(y)h(a)h(F)-8 b(rame)31
-b(of)f(some)g(kind.)0 3781 y(No)m(w)f(consider)g(a)g(Mapping)g(whic)m
-(h,)g(when)f(applied)g(to)i(the)f(co)s(ordinates)g(in)g(system)g(1)g
-(yields)g(co)s(ordinates)0 3894 y(in)h(another)h(system,)f(n)m(um)m(b)s
-(er)f(2.)42 b(The)29 b(Mapping)i(therefore)g(in)m(ter-relates)h(co)s
-(ordinate)f(systems)g(1)f(and)g(2.)0 4044 y(No)m(w)j(consider)f(a)h
-(second)f(Mapping)g(whic)m(h)g(in)m(ter-relates)j(system)d(1)h(and)e(a)
-i(further)e(co)s(ordinate)i(system,)0 4157 y(n)m(um)m(b)s(er)c(3.)41
-b(If)30 b(w)m(e)h(w)m(an)m(ted)g(to)g(con)m(v)m(ert)h(co)s(ordinates)f
-(b)s(et)m(w)m(een)g(systems)g(2)f(and)g(3,)h(w)m(e)g(could)f(do)h(so)f
-(b)m(y:)111 4368 y(1.)46 b(Applying)30 b(our)g(\014rst)g(Mapping)g(in)g
-(rev)m(erse,)h(so)g(as)g(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f
-(systems)f(2)h(and)f(1.)111 4542 y(2.)46 b(Applying)30
-b(the)h(second)f(Mapping,)h(as)f(giv)m(en,)i(to)f(con)m(v)m(ert)h(b)s
-(et)m(w)m(een)f(systems)f(1)h(and)f(3.)0 4753 y(W)-8
-b(e)24 b(are)f(not)g(limited)h(to)f(three)g(co)s(ordinate)h(systems,)h
-(of)e(course.)38 b(In)22 b(fact,)k(w)m(e)d(could)g(con)m(tin)m(ue)h(to)
-g(in)m(tro)s(duce)0 4866 y(an)m(y)32 b(n)m(um)m(b)s(er)e(of)i(further)e
-(co)s(ordinate)i(systems,)g(so)g(long)g(as)f(w)m(e)h(ha)m(v)m(e)h(a)f
-(suitable)g(Mapping)f(for)h(eac)m(h)g(one)0 4979 y(whic)m(h)f(relates)i
-(it)g(to)f(one)g(of)g(the)g(F)-8 b(rames)32 b(already)g(presen)m(t.)45
-b(Con)m(tin)m(uing)32 b(in)g(this)f(w)m(a)m(y)-8 b(,)34
-b(w)m(e)e(can)g(build)f(up)0 5092 y(a)i(net)m(w)m(ork)g(in)f(whic)m(h)g
-(F)-8 b(rames)33 b(are)g(in)m(ter-related)h(b)m(y)f(Mappings)f(in)g
-(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(there)g(is)f(alw)m(a)m(ys)i(a)0
-5204 y(w)m(a)m(y)d(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(an)m(y)g
-(pair)f(of)g(co)s(ordinate)i(systems.)0 5354 y(The)38
-b(F)-8 b(rameSet)41 b(\(Figure)e(7\))h(encapsulates)g(these)f(ideas.)67
-b(It)39 b(is)g(a)h(net)m(w)m(ork)f(comp)s(osed)g(of)g(F)-8
-b(rames)40 b(and)0 5467 y(asso)s(ciated)27 b(Mappings,)g(in)e(whic)m(h)
-h(there)g(is)f(alw)m(a)m(ys)j(exactly)f(one)f(path,)h
-Fx(via)f FG(Mappings,)g(b)s(et)m(w)m(een)h(an)m(y)f(pair)0
-5580 y(of)f(F)-8 b(rames.)40 b(Since)25 b(w)m(e)h(assem)m(ble)g(F)-8
-b(rameSets)26 b(ourselv)m(es,)h(they)e(can)g(b)s(e)g(used)f(to)i
-(represen)m(t)f(an)m(y)h(co)s(ordinate)0 5693 y(systems)k(w)m(e)h(c)m
-(ho)s(ose)h(and)d(to)i(set)g(up)f(the)g(particular)h(relationships)g(b)
-s(et)m(w)m(een)g(them)f(that)h(w)m(e)g(w)m(an)m(t.)p
-eop end
-%%Page: 108 118
-TeXDict begin 108 117 bop 0 52 a FG(108)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y Fw(13.2)112 b(Creating)38 b(a)g(F)-9 b(rameSet)0
-576 y FG(Before)37 b(w)m(e)f(can)h(create)g(a)f(F)-8
-b(rameSet,)39 b(w)m(e)e(m)m(ust)e(ha)m(v)m(e)j(a)e(F)-8
-b(rame)37 b(of)f(some)g(kind)f(to)i(put)e(in)m(to)i(it,)h(so)e(let's)0
-689 y(create)c(a)f(simple)f(one:)262 944 y Ft(INCLUDE)40
-b('AST_PAR')262 1044 y(INTEGER)g(FRAME1,)h(STATUS)262
-1243 y(STATUS)g(=)i(0)262 1442 y(...)262 1641 y(FRAME1)e(=)i
-(AST_FRAME\()c(2,)k('Domain=A',)c(STATUS)i(\))0 1910
-y FG(W)-8 b(e)25 b(ha)m(v)m(e)f(set)g(this)g(F)-8 b(rame's)24
-b(Domain)h(attribute)f(\()p Fu(x)p FG(7.12\))i(to)e(A)g(so)g(that)g(it)
-g(will)g(b)s(e)f(distinct)h(from)f(the)g(others)0 2023
-y(w)m(e)31 b(will)g(b)s(e)e(using.)41 b(W)-8 b(e)31 b(can)g(no)m(w)f
-(create)i(a)f(new)f(F)-8 b(rameSet)31 b(con)m(taining)h(just)e(this)g
-(F)-8 b(rame,)32 b(as)e(follo)m(ws:)262 2278 y Ft(INTEGER)40
-b(FRAMESET)262 2477 y(...)262 2677 y(FRAMESET)g(=)j(AST_FRAMESET\()38
-b(FRAME1,)j(')i(',)g(STATUS)e(\))0 2945 y FG(So)30 b(far,)h(ho)m(w)m
-(ev)m(er,)h(this)e(F)-8 b(rame)31 b(isn't)g(related)g(to)g(an)m(y)g
-(others.)0 3245 y Fw(13.3)112 b(Adding)38 b(New)f(F)-9
-b(rames)39 b(to)e(a)h(F)-9 b(rameSet)0 3470 y FG(W)h(e)40
-b(can)f(no)m(w)g(add)f(further)g(F)-8 b(rames)40 b(to)f(the)g(F)-8
-b(rameSet)41 b(created)e(ab)s(o)m(v)m(e)i(\()p Fu(x)p
-FG(13.2\).)69 b(T)-8 b(o)39 b(do)g(so,)i(w)m(e)f(m)m(ust)0
-3583 y(supply)33 b(a)j(new)e(F)-8 b(rame)36 b(and)e(an)h(asso)s(ciated)
-h(Mapping)f(that)g(relates)i(it)e(to)h(an)m(y)f(of)g(the)g(F)-8
-b(rames)36 b(that)f(are)0 3696 y(already)c(presen)m(t)g(\(there)g(is)g
-(only)f(one)h(presen)m(t)g(so)g(far\).)41 b(T)-8 b(o)31
-b(k)m(eep)h(the)f(example)g(simple,)g(w)m(e)g(will)g(just)f(use)0
-3809 y(a)h(Zo)s(omMap)f(that)h(m)m(ultiplies)g(co)s(ordinates)g(b)m(y)g
-(10.)41 b(The)30 b(required)g(Ob)5 b(jects)30 b(are)h(created)g(as)g
-(follo)m(ws:)262 4064 y Ft(INTEGER)40 b(FRAME2,)h(MAPPING12)262
-4263 y(...)262 4462 y(FRAME2)g(=)i(AST_FRAME\()c(2,)k('Domain=B',)c
-(STATUS)i(\))262 4562 y(MAPPING12)e(=)44 b(AST_ZOOMMAP\()38
-b(2,)43 b(10.0D0,)e(')i(',)g(STATUS)e(\))0 4830 y FG(T)-8
-b(o)31 b(add)f(the)g(new)g(F)-8 b(rame)31 b(in)m(to)h(our)e(F)-8
-b(rameSet,)31 b(w)m(e)g(use)f(the)h(AST)p Fy(_)p FG(ADDFRAME)g
-(routine:)262 5086 y Ft(CALL)41 b(AST_ADDFRAME\()e(FRAMESET,)h(1,)i
-(MAPPING12,)e(FRAME2,)g(STATUS)i(\))0 5354 y FG(Whenev)m(er)36
-b(a)g(F)-8 b(rame)37 b(is)e(added)g(to)i(a)f(F)-8 b(rameSet,)38
-b(it)e(is)g(assigned)g(an)f(in)m(teger)i(index.)56 b(This)35
-b(index)g(starts)0 5467 y(with)f(1)i(for)e(the)h(initial)h(F)-8
-b(rame)36 b(used)e(to)h(create)h(the)f(F)-8 b(rameSet)36
-b(\()p Fu(x)p FG(13.2\))i(and)c(incremen)m(ts)h(b)m(y)g(one)g(ev)m(ery)
-0 5580 y(time)f(a)f(new)f(F)-8 b(rame)34 b(is)f(added.)48
-b(This)32 b(index)h(is)g(the)g(primary)f(w)m(a)m(y)i(of)f(iden)m
-(tifying)h(the)f(F)-8 b(rames)34 b(within)e(a)0 5693
-y(F)-8 b(rameSet.)p eop end
-%%Page: 109 119
-TeXDict begin 109 118 bop 0 52 a Fz(13.4)93 b(The)29
-b(Base)j(and)e(Curren)m(t)f(F)-8 b(rames)2185 b FG(109)917
-1810 y @beginspecial 114 @llx 303 @lly 503 @urx 613 @ury
-2334 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsexample.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2006 a(Figure)24 b(11:)38 b(An)23 b(example)i(F)-8
-b(rameSet,)26 b(in)d(whic)m(h)g(F)-8 b(rames)25 b(2)f(and)f(3)h(are)f
-(related)i(to)f(F)-8 b(rame)25 b(1)f(b)m(y)f(m)m(ultiplying)0
-2119 y(its)29 b(co)s(ordinates)g(b)m(y)f(factors)h(of)f(10)h(and)f(5)g
-(resp)s(ectiv)m(ely)-8 b(.)42 b(The)28 b(F)-8 b(rameSet's)29
-b(Base)h(attribute)f(has)f(the)g(v)-5 b(alue)0 2232 y(1)31
-b(and)e(its)i(Curren)m(t)f(attribute)h(has)f(the)g(v)-5
-b(alue)31 b(3.)41 b(The)30 b(transformation)h(p)s(erformed)d(when)i
-(the)g(F)-8 b(rameSet)0 2345 y(is)30 b(used)g(as)h(a)f(Mapping)h(\()p
-Fx(i.e.)f FG(from)g(its)g(base)h(to)g(its)g(curren)m(t)f(F)-8
-b(rame\))32 b(is)e(sho)m(wn)g(in)g(b)s(old.)0 2699 y(When)35
-b(a)h(F)-8 b(rame)37 b(is)e(added,)i(w)m(e)f(also)g(ha)m(v)m(e)h(to)f
-(sp)s(ecify)f(whic)m(h)h(of)f(the)h(existing)h(ones)e(the)h(new)f(F)-8
-b(rame)36 b(is)0 2811 y(related)h(to.)57 b(Here,)38 b(w)m(e)e(c)m(hose)
-h(n)m(um)m(b)s(er)d(1,)k(the)d(only)h(one)g(presen)m(t)g(so)g(far,)h
-(and)e(the)h(new)f(one)h(w)m(e)g(added)0 2924 y(b)s(ecame)31
-b(n)m(um)m(b)s(er)e(2.)0 3074 y(Note)36 b(that)f(a)f(F)-8
-b(rameSet)36 b(do)s(es)e(not)h(mak)m(e)g(copies)g(of)g(the)f(F)-8
-b(rames)36 b(and)d(Mappings)h(that)h(y)m(ou)g(insert)f(in)m(to)0
-3187 y(it.)61 b(Instead,)39 b(it)e(holds)g(p)s(oin)m(ters)g(to)g(them.)
-61 b(This)36 b(means)h(that)h(if)f(y)m(ou)g(retain)h(the)f(original)h
-(p)s(oin)m(ters)f(to)0 3300 y(these)30 b(Ob)5 b(jects)30
-b(and)f(alter)h(them,)g(y)m(ou)g(will)g(indirectly)g(b)s(e)f(altering)i
-(the)f(F)-8 b(rameSet's)31 b(con)m(ten)m(ts.)42 b(Y)-8
-b(ou)30 b(can,)0 3413 y(of)f(course,)g(alw)m(a)m(ys)i(use)d(AST)p
-Fy(_)p FG(COPY)f(\()p Fu(x)p FG(4.12\))32 b(to)d(mak)m(e)h(a)f
-(separate)h(cop)m(y)f(of)g(an)m(y)g(Ob)5 b(ject)29 b(if)g(y)m(ou)g
-(need)g(to)0 3526 y(ensure)h(its)g(indep)s(endence.)0
-3676 y(W)-8 b(e)41 b(could)e(also)i(add)e(a)h(third)e(F)-8
-b(rame)41 b(in)m(to)f(our)f(F)-8 b(rameSet,)44 b(this)39
-b(time)h(de\014ning)f(a)h(co)s(ordinate)g(system)0 3789
-y(whic)m(h)30 b(is)h(reac)m(hed)g(b)m(y)f(m)m(ultiplying)h(the)f
-(original)i(co)s(ordinates)f(\(of)g(FRAME1\))h(b)m(y)e(5:)262
-3986 y Ft(CALL)41 b(AST_ADDFRAME\()e(FRAMESET,)h(1,)218
-4086 y(:)828 b(AST_ZOOMMAP\()38 b(2,)43 b(5.0D0,)e(')i(',)g(STATUS)e
-(\),)218 4185 y(:)828 b(AST_FRAME\()39 b(2,)k('Domain=C',)c(STATUS)i
-(\),)218 4285 y(:)828 b(STATUS)41 b(\))0 4496 y FG(Here,)49
-b(w)m(e)c(ha)m(v)m(e)g(a)m(v)m(oided)h(storing)f(unnecessary)f(p)s(oin)
-m(ter)g(v)-5 b(alues)45 b(b)m(y)f(using)g(function)g(in)m(v)m(o)s
-(cations)i(di-)0 4609 y(rectly)32 b(as)g(argumen)m(ts)f(for)g(AST)p
-Fy(_)p FG(ADDFRAME.)i(This)d(assumes)h(that)h(w)m(e)g(are)f(using)g
-(AST)p Fy(_)p FG(BEGIN)g(and)0 4722 y(AST)p Fy(_)p FG(END)f(\()p
-Fu(x)p FG(4.10\))j(to)e(ensure)f(that)h(Ob)5 b(jects)30
-b(are)h(correctly)g(deleted)h(when)d(no)h(longer)h(required.)0
-4871 y(Our)38 b(example)i(F)-8 b(rameSet)41 b(no)m(w)f(con)m(tains)g
-(three)g(F)-8 b(rames)40 b(and)f(t)m(w)m(o)i(Mappings)f(with)f(the)h
-(arrangemen)m(t)0 4984 y(sho)m(wn)30 b(in)g(Figure)h(11.)41
-b(The)30 b(total)i(n)m(um)m(b)s(er)d(of)i(F)-8 b(rames)31
-b(is)f(giv)m(en)i(b)m(y)e(its)h(read-only)g(Nframe)f(attribute.)0
-5259 y Fw(13.4)112 b(The)38 b(Base)g(and)g(Curren)m(t)f(F)-9
-b(rames)0 5467 y FG(A)m(t)31 b(all)h(times,)f(one)g(of)f(the)h(F)-8
-b(rames)31 b(in)f(a)h(F)-8 b(rameSet)32 b(is)e(designated)h(to)g(b)s(e)
-f(its)h Fx(b)-5 b(ase)31 b FG(F)-8 b(rame)31 b(and)f(one)h(to)g(b)s(e)0
-5580 y(its)g Fx(curr)-5 b(ent)30 b FG(F)-8 b(rame)32
-b(\(Figure)f(11\).)41 b(These)30 b(F)-8 b(rames)31 b(are)g(iden)m
-(ti\014ed)f(b)m(y)g(t)m(w)m(o)i(in)m(teger)f(F)-8 b(rameSet)32
-b(attributes,)0 5693 y(Base)f(and)f(Curren)m(t,)g(whic)m(h)g(hold)g
-(the)h(indices)f(of)h(the)f(nominated)h(F)-8 b(rames)31
-b(within)f(the)g(F)-8 b(rameSet.)p eop end
-%%Page: 110 120
-TeXDict begin 110 119 bop 0 52 a FG(110)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FG(The)35 b(existence)h(of)f(the)h(base)f(and)f(curren)m(t)h(F)-8
-b(rames)36 b(re\015ects)f(an)g(imp)s(ortan)m(t)h(application)g(of)f(F)
--8 b(rameSets,)0 464 y(whic)m(h)25 b(is)h(to)h(attac)m(h)g(co)s
-(ordinate)g(systems)f(to)g(en)m(tities)i(suc)m(h)d(as)h(data)g(arra)m
-(ys,)i(data)e(\014les,)h(plotting)g(surfaces)0 577 y(\(for)g
-(graphics\),)h Fx(etc.)39 b FG(In)26 b(this)h(con)m(text,)j(the)d(base)
-g(F)-8 b(rame)28 b(represen)m(ts)e(the)h(\\nativ)m(e")j(co)s(ordinate)d
-(system)g(of)0 690 y(the)i(attac)m(hed)j(en)m(tit)m(y|for)e(example,)h
-(the)e(pixel)h(co)s(ordinates)g(of)f(an)h(image)g(or)g(the)f(in)m
-(trinsic)h(co)s(ordinates)0 803 y(of)35 b(a)h(plotting)g(surface.)55
-b(The)34 b(other)i(F)-8 b(rames)36 b(within)e(the)i(F)-8
-b(rameSet)36 b(represen)m(t)f(alternativ)m(e)j(co)s(ordinate)0
-916 y(systems)g(whic)m(h)h(ma)m(y)g(also)g(b)s(e)f(used)f(to)j(refer)e
-(to)h(p)s(ositions)f(within)g(that)h(en)m(tit)m(y)-8
-b(.)67 b(The)38 b(curren)m(t)h(F)-8 b(rame)0 1029 y(represen)m(ts)32
-b(the)f(particular)h(co)s(ordinate)h(system)f(whic)m(h)f(is)h(curren)m
-(tly)f(selected)j(for)d(use.)44 b(F)-8 b(or)33 b(instance,)f(if)0
-1142 y(an)c(image)h(w)m(ere)g(b)s(eing)f(displa)m(y)m(ed,)h(y)m(ou)f(w)
-m(ould)g(aim)h(to)g(lab)s(el)f(it)h(with)f(co)s(ordinates)g(corresp)s
-(onding)f(to)i(the)0 1255 y(curren)m(t)h(F)-8 b(rame.)42
-b(In)30 b(order)g(to)h(see)h(a)e(di\013eren)m(t)h(co)s(ordinate)h
-(system,)f(a)g(soft)m(w)m(are)h(user)d(w)m(ould)i(arrange)g(for)0
-1367 y(a)g(di\013eren)m(t)g(F)-8 b(rame)31 b(to)g(b)s(e)f(made)g
-(curren)m(t.)0 1553 y(The)j(c)m(hoice)j(of)e(base)g(and)g(curren)m(t)f
-(F)-8 b(rames)35 b(ma)m(y)g(b)s(e)e(c)m(hanged)i(at)f(an)m(y)g(time,)i
-(simply)e(b)m(y)g(assigning)g(new)0 1666 y(v)-5 b(alues)36
-b(to)g(the)f(F)-8 b(rameSet's)37 b(Base)f(and)e(Curren)m(t)h
-(attributes.)56 b(F)-8 b(or)36 b(example,)h(to)f(mak)m(e)g(the)g(F)-8
-b(rame)36 b(with)0 1779 y(index)30 b(3)h(b)s(ecome)f(the)h(curren)m(t)f
-(F)-8 b(rame,)32 b(y)m(ou)e(could)h(use:)262 2096 y Ft(CALL)41
-b(AST_SETI\()f(FRAMESET,)g('Current',)g(3,)i(STATUS)f(\))0
-2426 y FG(Y)-8 b(ou)31 b(can)g(nominate)g(the)f(same)h(F)-8
-b(rame)31 b(to)g(b)s(e)f(b)s(oth)g(the)g(base)h(and)f(curren)m(t)g(F)-8
-b(rame)31 b(if)f(y)m(ou)h(wish.)0 2611 y(By)e(default)f(\()p
-Fx(i.e.)h FG(if)f(the)h(Base)g(or)g(Curren)m(t)e(attribute)j(is)e
-(un-set\),)i(the)e(\014rst)g(F)-8 b(rame)29 b(added)f(to)h(a)g(F)-8
-b(rameSet)0 2724 y(b)s(ecomes)32 b(its)f(base)h(F)-8
-b(rame)32 b(and)f(the)g(last)h(one)g(added)f(b)s(ecomes)g(its)h(curren)
-m(t)f(F)-8 b(rame.)2999 2691 y Fv(19)3118 2724 y FG(Whenev)m(er)32
-b(a)g(new)0 2837 y(F)-8 b(rame)26 b(is)f(added)f(to)i(a)g(F)-8
-b(rameSet,)27 b(the)f(Curren)m(t)e(attribute)h(is)h(mo)s(di\014ed)d(so)
-j(that)f(the)h(new)e(F)-8 b(rame)26 b(b)s(ecomes)0 2950
-y(the)31 b(curren)m(t)f(one.)41 b(This)29 b(b)s(eha)m(viour)h(is)h
-(re\015ected)g(in)f(the)g(state)i(of)e(the)h(example)g(F)-8
-b(rameSet)32 b(in)e(Figure)h(11.)0 3320 y Fw(13.5)112
-b(Referring)38 b(to)f(the)g(Base)h(and)g(Curren)m(t)f(F)-9
-b(rames)0 3574 y FG(It)33 b(is)f(often)h(necessary)g(to)h(refer)e(to)h
-(the)g(base)g(and)f(curren)m(t)g(F)-8 b(rames)33 b(\()p
-Fu(x)p FG(13.4\))j(within)c(a)h(F)-8 b(rameSet,)34 b(but)e(it)0
-3687 y(can)27 b(b)s(e)e(cum)m(b)s(ersome)h(ha)m(ving)h(to)g(obtain)g
-(their)f(indices)h(from)e(the)i(Base)g(and)f(Curren)m(t)f(attributes)i
-(on)f(eac)m(h)0 3800 y(o)s(ccasion.)47 b(T)-8 b(o)33
-b(mak)m(e)g(this)f(easier,)h(t)m(w)m(o)h(parameter)e(constan)m(ts,)i
-(AST)p Fy(__)p FG(BASE)d(and)g(AST)p Fy(__)p FG(CURRENT,)0
-3913 y(are)i(de\014ned)f(in)h(the)g(AST)p Fy(_)p FG(P)-8
-b(AR)32 b(include)h(\014le)g(and)g(ma)m(y)g(b)s(e)g(used)f(to)i
-(represen)m(t)f(the)g(indices)g(of)g(the)g(base)0 4026
-y(and)d(curren)m(t)g(F)-8 b(rames)31 b(resp)s(ectiv)m(ely)-8
-b(.)43 b(They)29 b(ma)m(y)i(b)s(e)f(used)g(whenev)m(er)g(a)h(F)-8
-b(rame)31 b(index)f(is)g(required.)0 4211 y(F)-8 b(or)34
-b(example,)h(when)d(adding)g(a)i(new)e(F)-8 b(rame)34
-b(to)g(a)g(F)-8 b(rameSet)34 b(\()p Fu(x)p FG(13.3\),)j(y)m(ou)c(could)
-g(use)g(the)g(follo)m(wing)i(to)0 4324 y(indicate)25
-b(that)g(the)g(new)e(F)-8 b(rame)26 b(is)e(related)h(to)g(the)g
-(existing)g(curren)m(t)f(F)-8 b(rame,)27 b(whatev)m(er)e(its)f(index)g
-(happ)s(ens)0 4437 y(to)31 b(b)s(e:)262 4754 y Ft(INTEGER)40
-b(FRAME,)h(MAPPING)262 4953 y(...)262 5153 y(CALL)g(AST_ADDFRAME\()e
-(FRAMESET,)h(AST__CURRENT,)e(MAPPING,)i(FRAME,)h(STATUS)g(\))0
-5483 y FG(Of)30 b(course,)h(the)f(F)-8 b(rame)31 b(y)m(ou)g(added)f(w)m
-(ould)g(then)g(b)s(ecome)h(the)f(new)g(curren)m(t)g(F)-8
-b(rame.)p 0 5607 1512 4 v 73 5661 a Fs(19)138 5693 y
-Fr(Although)25 b(this)h(is)g(rev)n(ersed)g(if)g(the)g(F)-6
-b(rameSet's)26 b(In)n(v)n(ert)e(attribute)i(is)g(non-zero.)p
-eop end
-%%Page: 111 121
-TeXDict begin 111 120 bop 0 52 a Fz(13.6)93 b(Using)30
-b(a)h(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)2115 b FG(111)0
-351 y Fw(13.6)112 b(Using)38 b(a)g(F)-9 b(rameSet)39
-b(as)f(a)f(Mapping)0 577 y FG(The)d(F)-8 b(rameSet)36
-b(class)g(inherits)e(prop)s(erties)g(and)g(b)s(eha)m(viour)h(from)f
-(the)h(F)-8 b(rame)36 b(class)f(\()p Fu(x)p FG(7\))h(and,)g(in)e(turn,)
-0 690 y(from)c(the)g(Mapping)h(class)g(\()p Fu(x)p FG(5\).)42
-b(Its)30 b(b)s(eha)m(viour)g(when)g(used)f(as)i(a)g(Mapping)f(is)g
-(particularly)h(imp)s(ortan)m(t.)0 856 y(Consider,)f(for)g(instance,)h
-(passing)g(a)f(F)-8 b(rameSet)32 b(p)s(oin)m(ter)e(to)i(a)e(co)s
-(ordinate)i(transformation)e(routine)h(suc)m(h)0 969
-y(as)g(AST)p Fy(_)p FG(TRAN2:)262 1227 y Ft(INTEGER)40
-b(N)262 1327 y(DOUBLE)h(PRECISION)e(XIN\()j(N)i(\),)e(YIN\()g(N)h(\))
-262 1426 y(DOUBLE)e(PRECISION)e(XOUT\()j(N)h(\),)g(YOUT\()e(N)j(\))262
-1626 y(...)262 1825 y(CALL)d(AST_TRAN2\()f(FRAMESET,)g(N,)j(XIN,)e
-(YIN,)h(.TRUE.,)f(XOUT,)h(YOUT,)f(STATUS)g(\))0 2097
-y FG(The)33 b(co)s(ordinate)i(transformation)f(applied)g(b)m(y)g(this)g
-(F)-8 b(rameSet)35 b(w)m(ould)e(b)s(e)h(the)g(one)g(whic)m(h)f(con)m(v)
-m(erts)j(b)s(e-)0 2209 y(t)m(w)m(een)22 b(its)f(base)f(and)g(curren)m
-(t)g(F)-8 b(rames.)39 b(Using)20 b(the)h(F)-8 b(rameSet)22
-b(in)e(Figure)h(11,)i(for)e(example,)i(the)e(co)s(ordinates)0
-2322 y(w)m(ould)34 b(b)s(e)g(m)m(ultiplied)h(b)m(y)f(a)h(factor)h(of)e
-(5.)54 b(If)34 b(w)m(e)h(instead)f(requested)h(the)f(F)-8
-b(rameSet's)36 b(in)m(v)m(erse)g(transfor-)0 2435 y(mation,)k(w)m(e)d
-(w)m(ould)g(b)s(e)f(transforming)h(from)f(its)i(curren)m(t)f(F)-8
-b(rame)38 b(to)f(its)h(base)f(F)-8 b(rame,)40 b(so)d(our)g(example)0
-2548 y(F)-8 b(rameSet)32 b(w)m(ould)e(then)g(m)m(ultiply)g(b)m(y)h(a)f
-(factor)i(of)e(0.2.)0 2714 y(Whenev)m(er)25 b(the)g(c)m(hoice)i(of)d
-(base)h(and)f(curren)m(t)h(F)-8 b(rames)25 b(c)m(hanges,)i(the)e
-(transformations)g(whic)m(h)f(a)h(F)-8 b(rameSet)0 2827
-y(p)s(erforms)38 b(when)g(used)g(as)h(a)h(Mapping)f(also)h(c)m(hange)g
-(to)g(re\015ect)g(this.)67 b(The)39 b(Nin)g(and)f(Nout)i(attributes)0
-2940 y(ma)m(y)e(also)g(c)m(hange)g(in)f(consequence,)i(b)s(ecause)e
-(they)h(are)f(determined)g(b)m(y)g(the)g(n)m(um)m(b)s(ers)f(of)h(axes)h
-(in)e(the)0 3053 y(F)-8 b(rameSet's)28 b(base)g(and)e(curren)m(t)h(F)-8
-b(rames)28 b(resp)s(ectiv)m(ely)-8 b(.)41 b(These)27
-b(n)m(um)m(b)s(ers)f(need)h(not)g(necessarily)h(b)s(e)f(equal,)0
-3166 y(of)k(course.)0 3331 y(Lik)m(e)e(an)m(y)f(Mapping,)h(a)g(F)-8
-b(rameSet)29 b(ma)m(y)f(also)h(b)s(e)f(in)m(v)m(erted)h(b)m(y)f(c)m
-(hanging)h(the)f(b)s(o)s(olean)g(sense)g(of)g(its)h(In)m(v)m(ert)0
-3444 y(attribute,)g Fx(e.g.)f FG(using)f(AST)p Fy(_)p
-FG(INVER)-8 b(T)27 b(\()p Fu(x)p FG(5.5\).)43 b(If)27
-b(this)h(is)g(happ)s(ens,)f(the)h(v)-5 b(alues)29 b(of)f(the)g(F)-8
-b(rameSet's)29 b(Base)0 3557 y(and)38 b(Curren)m(t)g(attributes)h(are)g
-(in)m(terc)m(hanged,)k(along)d(with)e(its)h(Nin)g(and)f(Nout)h
-(attributes,)j(so)d(that)g(its)0 3670 y(base)d(and)f(curren)m(t)h(F)-8
-b(rames)36 b(sw)m(ap)g(places.)58 b(When)35 b(used)g(as)h(a)h(Mapping,)
-g(the)f(F)-8 b(rameSet)37 b(will)f(therefore)0 3783 y(p)s(erform)29
-b(the)i(in)m(v)m(erse)g(transformation)f(to)i(that)f(whic)m(h)f(it)h(p)
-s(erformed)d(previously)-8 b(.)0 3949 y(T)g(o)31 b(summarise,)f(a)h(F)
--8 b(rameSet)31 b(ma)m(y)g(b)s(e)f(used)f(exactly)j(lik)m(e)g(an)m(y)f
-(other)f(Mapping)h(whic)m(h)f(in)m(ter-relates)i(the)0
-4062 y(co)s(ordinate)f(systems)g(describ)s(ed)e(b)m(y)h(its)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames.)0 4365 y Fw(13.7)112
-b(Extracting)37 b(a)h(Mapping)h(from)f(a)g(F)-9 b(rameSet)0
-4591 y FG(Although)29 b(it)g(is)f(v)m(ery)h(con)m(v)m(enien)m(t)i(to)e
-(use)g(a)f(F)-8 b(rameSet)30 b(when)e(a)h(Mapping)f(is)h(required)e(\()
-p Fu(x)p FG(13.6\),)32 b(a)d(F)-8 b(rame-)0 4704 y(Set)35
-b(necessarily)g(con)m(tains)h(additional)f(information)g(and)f
-(sometimes)h(this)g(migh)m(t)g(cause)g(ine\016ciency)g(or)0
-4817 y(confusion.)43 b(F)-8 b(or)32 b(example,)g(if)f(y)m(ou)h(w)m(an)m
-(ted)g(to)g(use)f(a)g(Mapping)h(con)m(tained)g(in)f(one)h(F)-8
-b(rameSet)32 b(and)f(insert)0 4930 y(it)g(in)m(to)g(another,)g(it)g(w)m
-(ould)f(probably)g(not)h(b)s(e)e(e\016cien)m(t)j(to)f(insert)g(the)f
-(whole)h(of)g(the)f(\014rst)g(F)-8 b(rameSet)31 b(in)m(to)0
-5043 y(the)g(second)f(one,)h(although)g(it)g(w)m(ould)f(w)m(ork.)0
-5209 y(In)k(suc)m(h)g(a)g(situation,)j(the)e(AST)p Fy(_)p
-FG(GETMAPPING)e(function)h(allo)m(ws)i(y)m(ou)f(to)g(extract)h(a)f
-(Mapping)f(from)0 5322 y(a)g(F)-8 b(rameSet.)53 b(Y)-8
-b(ou)34 b(do)g(this)g(b)m(y)g(sp)s(ecifying)g(the)g(t)m(w)m(o)h(F)-8
-b(rames)35 b(whic)m(h)e(the)h(Mapping)g(should)f(in)m(ter-relate)0
-5435 y(using)d(their)g(indices)h(within)f(the)g(F)-8
-b(rameSet.)42 b(F)-8 b(or)31 b(example:)262 5693 y Ft(MAP)42
-b(=)h(AST_GETMAPPING\()37 b(FRAMESET,)j(2,)j(3,)g(STATUS)e(\))p
-eop end
-%%Page: 112 122
-TeXDict begin 112 121 bop 0 52 a FG(112)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FG(w)m(ould)h(return)f(a)i(p)s(oin)m(ter)f(to)h(a)f(Mapping)g
-(that)h(con)m(v)m(erted)h(b)s(et)m(w)m(een)e(F)-8 b(rames)32
-b(2)g(and)e(3)i(in)f(the)g(F)-8 b(rameSet.)0 464 y(Its)33
-b(in)m(v)m(erse)h(transformation)f(w)m(ould)g(then)g(con)m(v)m(ert)h
-(in)f(the)g(opp)s(osite)h(direction,)g Fx(i.e.)f FG(b)s(et)m(w)m(een)g
-(F)-8 b(rames)34 b(3)0 577 y(and)27 b(2.)40 b(Note)29
-b(that)f(this)f(Mapping)g(migh)m(t)i(not)e(b)s(e)g(indep)s(enden)m(t)f
-(of)i(the)f(Mappings)h(con)m(tained)g(within)f(the)0
-690 y(F)-8 b(rameSet|)p Fx(i.e.)31 b FG(they)g(ma)m(y)g(share)g(sub-Ob)
-5 b(jects|so)30 b(AST)p Fy(_)p FG(COPY)f(should)h(b)s(e)g(used)g(to)h
-(mak)m(e)h(a)f(cop)m(y)g(if)0 803 y(y)m(ou)g(need)f(to)h(guaran)m(tee)h
-(indep)s(endence)d(\()p Fu(x)p FG(4.12\).)0 952 y(V)-8
-b(ery)36 b(often,)i(the)e(Mapping)f(returned)g(b)m(y)h(AST)p
-Fy(_)p FG(GETMAPPING)f(will)h(b)s(e)f(a)h(comp)s(ound)e(Mapping,)j(or)0
-1065 y(CmpMap)c(\()p Fu(x)p FG(6\).)52 b(This)33 b(re\015ects)h(the)g
-(fact)g(that)h(con)m(v)m(ersion)f(b)s(et)m(w)m(een)h(the)f(t)m(w)m(o)h
-(F)-8 b(rames)34 b(ma)m(y)g(need)g(to)g(b)s(e)0 1178
-y(done)h Fx(via)g FG(an)g(in)m(termediate)i(co)s(ordinate)f(system)f
-(so)h(that)f(sev)m(eral)i(stages)f(ma)m(y)g(b)s(e)f(in)m(v)m(olv)m(ed.)
-56 b(Y)-8 b(ou)36 b(can,)0 1291 y(ho)m(w)m(ev)m(er,)43
-b(easily)e(simplify)e(this)g(Mapping)g(\(where)g(this)h(is)f(p)s
-(ossible\))g(b)m(y)g(using)g(the)h(AST)p Fy(_)p FG(SIMPLIFY)0
-1404 y(function)33 b(\()p Fu(x)p FG(6.7\))j(and)d(this)h(is)f
-(recommended)g(if)h(y)m(ou)g(plan)f(to)h(use)g(it)g(for)f(transforming)
-g(a)h(large)h(amoun)m(t)0 1517 y(of)c(data.)0 1791 y
-Fw(13.8)112 b(Using)38 b(a)g(F)-9 b(rameSet)39 b(as)f(a)f(F)-9
-b(rame)0 1999 y FG(A)42 b(F)-8 b(rameSet)43 b(can)f(also)h(b)s(e)f
-(used)f(as)h(a)g(F)-8 b(rame,)46 b(in)c(whic)m(h)g(capacit)m(y)i(it)e
-(almost)h(alw)m(a)m(ys)h(b)s(eha)m(v)m(es)e(as)g(if)0
-2112 y(its)35 b(curren)m(t)g(F)-8 b(rame)36 b(had)e(b)s(een)g(used)g
-(instead.)54 b(F)-8 b(or)36 b(example,)h(if)e(y)m(ou)g(request)g(the)g
-(Title)h(attribute)f(of)g(a)0 2225 y(F)-8 b(rameSet)32
-b(using:)262 2421 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(TITLE)262
-2620 y(...)262 2819 y(TITLE)d(=)i(AST_GETC\()d(FRAMESET,)g('Title',)g
-(STATUS)h(\))0 3029 y FG(the)25 b(result)f(will)h(b)s(e)f(the)g(Title)i
-(of)e(the)h(curren)m(t)f(F)-8 b(rame,)27 b(or)d(a)h(suitable)g(default)
-g(if)f(the)h(curren)m(t)f(F)-8 b(rame's)26 b(Title)0
-3142 y(attribute)36 b(is)f(un-set.)56 b(The)35 b(same)h(also)g(applies)
-f(to)i(other)e(attribute)h(op)s(erations|)p Fx(i.e.)f
-FG(setting,)j(clearing)0 3255 y(and)d(testing)i(attributes.)57
-b(Most)37 b(attributes)f(shared)f(b)m(y)h(b)s(oth)f(F)-8
-b(rames)36 b(and)f(F)-8 b(rameSets)37 b(b)s(eha)m(v)m(e)f(in)g(this)0
-3368 y(w)m(a)m(y)-8 b(,)32 b(suc)m(h)e(as)h(Naxes,)g(Lab)s(el\(axis\),)
-h(F)-8 b(ormat\(axis\),)33 b Fx(etc.)40 b FG(There)30
-b(are,)h(ho)m(w)m(ev)m(er,)h(a)f(few)f(exceptions:)227
-3577 y FE(Class)427 3690 y FG(Has)h(the)g(v)-5 b(alue)30
-b(\\F)-8 b(rameSet".)227 3823 y FE(ID)427 3936 y FG(Iden)m(ti\014es)31
-b(the)f(particular)h(F)-8 b(rameSet)31 b(\(not)g(its)g(curren)m(t)f(F)
--8 b(rame\).)227 4069 y FE(Nin)427 4182 y FG(Equals)30
-b(the)h(n)m(um)m(b)s(er)e(of)i(axes)g(in)f(the)g(F)-8
-b(rameSet's)32 b(base)e(F)-8 b(rame.)227 4314 y FE(In)m(v)m(ert)427
-4427 y FG(Is)30 b(indep)s(enden)m(t)f(of)i(an)m(y)g(of)f(the)h(Ob)5
-b(jects)30 b(within)g(the)h(F)-8 b(rameSet.)227 4560
-y FE(Nob)6 b(ject)427 4673 y FG(Coun)m(ts)30 b(the)h(n)m(um)m(b)s(er)e
-(of)i(activ)m(e)h(F)-8 b(rameSets.)227 4806 y FE(RefCoun)m(t)427
-4919 y FG(Coun)m(ts)21 b(the)g(n)m(um)m(b)s(er)f(of)h(activ)m(e)i(p)s
-(oin)m(ters)e(to)g(the)g(F)-8 b(rameSet)22 b(\(not)g(to)g(its)f(curren)
-m(t)g(F)-8 b(rame\).)0 5128 y(Note)28 b(that)f(the)g(set)g(of)f
-(attributes)i(p)s(ossessed)d(b)m(y)i(a)g(F)-8 b(rameSet)27
-b(can)g(v)-5 b(ary)d(,)28 b(dep)s(ending)d(on)h(the)h(nature)f(of)h
-(its)0 5241 y(curren)m(t)33 b(F)-8 b(rame.)51 b(F)-8
-b(or)34 b(example,)h(if)f(the)f(curren)m(t)g(F)-8 b(rame)35
-b(is)e(a)h(SkyF)-8 b(rame)34 b(\()p Fu(x)p FG(8\),)i(then)d(the)h(F)-8
-b(rameSet)34 b(will)0 5354 y(acquire)h(an)g(Equino)m(x)f(attribute)i
-(from)e(it)h(whic)m(h)g(can)g(b)s(e)f(set,)i(enquired,)f
-Fx(etc.)53 b FG(Ho)m(w)m(ev)m(er,)38 b(if)d(the)g(curren)m(t)0
-5467 y(F)-8 b(rame)39 b(is)g(c)m(hanged)g(to)g(b)s(e)e(a)i(basic)g(F)-8
-b(rame,)41 b(whic)m(h)d(do)s(es)h(not)f(ha)m(v)m(e)i(an)e(Equino)m(x)g
-(attribute,)k(then)c(this)0 5580 y(attribute)30 b(will)f(b)s(e)f(absen)
-m(t)h(from)g(the)g(F)-8 b(rameSet)30 b(as)f(w)m(ell.)41
-b(An)m(y)29 b(attempt)h(to)g(reference)f(it)h(will)f(then)g(result)0
-5693 y(in)h(an)g(error.)p eop end
-%%Page: 113 123
-TeXDict begin 113 122 bop 0 52 a Fz(13.9)93 b(Extracting)31
-b(a)g(F)-8 b(rame)31 b(from)f(a)h(F)-8 b(rameSet)1917
-b FG(113)0 351 y Fw(13.9)112 b(Extracting)37 b(a)h(F)-9
-b(rame)38 b(from)g(a)g(F)-9 b(rameSet)0 573 y FG(Although)21
-b(a)h(F)-8 b(rameSet)22 b(ma)m(y)f(b)s(e)g(used)f(in)h(place)h(of)f
-(its)g(curren)m(t)g(F)-8 b(rame)22 b(in)f(most)g(situations,)j(it)d(is)
-g(sometimes)0 686 y(con)m(v)m(enien)m(t)31 b(to)e(ha)m(v)m(e)h(direct)f
-(access)h(to)g(a)f(sp)s(eci\014ed)f(F)-8 b(rame)30 b(within)e(it.)41
-b(This)28 b(ma)m(y)h(b)s(e)f(obtained)h(using)f(the)0
-799 y(AST)p Fy(_)p FG(GETFRAME)i(function,)g(as)h(follo)m(ws:)262
-1048 y Ft(FRAME)41 b(=)i(AST_GETFRAME\()38 b(FRAMESET,)i(AST__BASE,)g
-(STATUS)h(\))0 1310 y FG(This)29 b(w)m(ould)g(return)g(a)g(p)s(oin)m
-(ter)h(\(not)g(a)g(cop)m(y\))h(to)f(the)g(base)f(F)-8
-b(rame)31 b(within)e(the)h(F)-8 b(rameSet.)41 b(Note)31
-b(the)f(use)0 1423 y(of)c(AST)p Fy(__)p FG(BASE)f(\()p
-Fu(x)p FG(13.5\))k(as)d(shorthand)f(for)h(the)g(v)-5
-b(alue)26 b(of)h(the)f(F)-8 b(rameSet's)27 b(Base)g(attribute,)h(whic)m
-(h)e(giv)m(es)0 1536 y(the)31 b(base)f(F)-8 b(rame's)31
-b(index.)0 1829 y Fw(13.10)112 b(Remo)m(ving)38 b(a)g(F)-9
-b(rame)39 b(from)e(a)h(F)-9 b(rameSet)0 2050 y FG(Remo)m(ving)21
-b(a)g(F)-8 b(rame)21 b(from)f(a)h(F)-8 b(rameSet)21 b(is)f(straigh)m
-(tforw)m(ard)i(and)d(is)i(p)s(erformed)d(using)i(the)g(AST)p
-Fy(_)p FG(REMO)m(VEFRAME)0 2163 y(routine.)40 b(Y)-8
-b(ou)28 b(iden)m(tify)g(the)f(F)-8 b(rame)29 b(y)m(ou)e(wish)g(to)h
-(remo)m(v)m(e)h(in)e(the)h(usual)f(w)m(a)m(y)-8 b(,)30
-b(b)m(y)d(giving)h(its)g(index)f(within)0 2276 y(the)k(F)-8
-b(rameSet.)41 b(F)-8 b(or)32 b(example,)f(the)f(follo)m(wing)i(w)m
-(ould)e(remo)m(v)m(e)i(the)f(F)-8 b(rame)31 b(with)f(index)g(1:)262
-2525 y Ft(CALL)41 b(AST_REMOVEFRAME\()c(FRAMESET,)j(1,)j(STATUS)e(\);)0
-2788 y FG(The)35 b(only)g(restriction)h(is)g(that)g(y)m(ou)f(cannot)h
-(remo)m(v)m(e)h(the)f(last)g(remaining)f(F)-8 b(rame)36
-b(b)s(ecause)g(a)f(F)-8 b(rameSet)0 2901 y(m)m(ust)35
-b(alw)m(a)m(ys)h(con)m(tain)g(at)f(least)h(one)f(F)-8
-b(rame.)55 b(When)35 b(a)g(F)-8 b(rame)35 b(is)g(remo)m(v)m(ed,)i(the)e
-(F)-8 b(rames)36 b(whic)m(h)e(follo)m(w)0 3013 y(it)43
-b(are)f(re-n)m(um)m(b)s(ered)f(\()p Fx(i.e.)h FG(their)g(indices)g(are)
-h(reduced)e(b)m(y)h(one\))h(so)f(as)g(to)h(preserv)m(e)g(the)f
-(sequence)g(of)0 3126 y(consecutiv)m(e)32 b(F)-8 b(rame)32
-b(indices.)40 b(The)30 b(F)-8 b(rameSet's)32 b(Nframe)e(attribute)i(is)
-e(also)h(decremen)m(ted.)0 3289 y(If)38 b(appropriate,)k(AST)p
-Fy(_)p FG(REMO)m(VEFRAME)d(will)g(mo)s(dify)f(the)h(F)-8
-b(rameSet's)41 b(Base)f(and/or)e(Curren)m(t)g(at-)0 3402
-y(tributes)33 b(so)h(that)h(they)e(con)m(tin)m(ue)i(to)g(iden)m(tify)f
-(the)g(same)g(F)-8 b(rames)34 b(as)g(previously)-8 b(.)51
-b(If)33 b(either)h(the)g(base)f(or)0 3515 y(curren)m(t)g(F)-8
-b(rame)35 b(is)e(remo)m(v)m(ed,)i(ho)m(w)m(ev)m(er,)h(the)e(corresp)s
-(onding)e(attribute)i(will)g(b)s(ecome)g(un-set,)g(so)g(that)g(it)0
-3628 y(rev)m(erts)d(to)g(its)g(default)f(v)-5 b(alue)31
-b(\()p Fu(x)p FG(13.4\))i(and)d(therefore)h(iden)m(ti\014es)g(an)f
-(alternativ)m(e)j(F)-8 b(rame.)0 3791 y(Note)38 b(that)e(it)h(is)f
-(quite)h(p)s(ermissible)f(to)h(remo)m(v)m(e)g(an)m(y)g(F)-8
-b(rame)37 b(from)f(a)g(F)-8 b(rameSet,)40 b(ev)m(en)d(although)f(other)
-0 3903 y(F)-8 b(rames)33 b(ma)m(y)g(app)s(ear)f(to)i(dep)s(end)c(on)j
-(it.)47 b(F)-8 b(or)34 b(example,)g(in)e(Figure)h(11,)h(if)f(F)-8
-b(rame)33 b(1)g(w)m(ere)g(remo)m(v)m(ed,)h(the)0 4016
-y(correct)h(relationship)f(b)s(et)m(w)m(een)g(F)-8 b(rames)35
-b(2)f(and)f(3)h(w)m(ould)f(still)i(b)s(e)e(preserv)m(ed,)i(although)f
-(they)g(w)m(ould)f(b)s(e)0 4129 y(re-n)m(um)m(b)s(ered)c(as)i(F)-8
-b(rames)31 b(1)g(and)f(2.)p eop end
-%%Page: 114 124
-TeXDict begin 114 123 bop 0 52 a FG(114)1175 b Fz(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))p
-eop end
-%%Page: 115 125
-TeXDict begin 115 124 bop 3643 52 a FG(115)0 351 y FA(14)135
-b(Higher)46 b(Lev)l(el)g(Op)t(erations)f(on)g(F)-11 b(rameSets)0
-612 y Fw(14.1)112 b(Creating)38 b(F)-9 b(rameSets)39
-b(with)e(AST)p Fh(_)p Fw(CONVER)-9 b(T)0 837 y FG(Before)44
-b(considering)e(the)h(imp)s(ortan)m(t)g(sub)5 b(ject)42
-b(of)h(using)f(F)-8 b(rameSets)44 b(to)f(con)m(v)m(ert)h(b)s(et)m(w)m
-(een)g(co)s(ordinate)0 950 y(systems)35 b(\()p Fu(x)p
-FG(14.2\),)j(let)e(us)e(return)g(brie\015y)g(to)h(reconsider)g(the)g
-(output)f(generated)i(b)m(y)f(AST)p Fy(_)p FG(CONVER)-8
-b(T.)0 1063 y(W)g(e)25 b(used)e(this)g(function)h(earlier)g(\()p
-Fu(x)p FG(12\),)k(when)22 b(con)m(v)m(erting)k(b)s(et)m(w)m(een)e(the)g
-(co)s(ordinate)h(systems)e(represen)m(ted)0 1176 y(b)m(y)28
-b(v)-5 b(arious)28 b(kinds)e(of)i(F)-8 b(rame,)30 b(and)d(indicated)i
-(that)f(it)g(returns)f(a)h(F)-8 b(rameSet)29 b(to)g(represen)m(t)f(the)
-g(co)s(ordinate)0 1289 y(con)m(v)m(ersion)k(it)f(iden)m(ti\014es.)41
-b(W)-8 b(e)31 b(are)g(no)m(w)f(in)h(a)f(p)s(osition)h(to)g(examine)g
-(the)g(structure)e(of)i(this)f(F)-8 b(rameSet.)0 1455
-y(T)g(ak)m(e)36 b(our)d(earlier)i(example)g(\()p Fu(x)p
-FG(12.1\))i(of)d(con)m(v)m(erting)i(b)s(et)m(w)m(een)f(the)g(celestial)
-h(co)s(ordinate)f(systems)g(repre-)0 1568 y(sen)m(ted)c(b)m(y)f(t)m(w)m
-(o)i(SkyF)-8 b(rames:)262 1825 y Ft(INCLUDE)40 b('AST_PAR')262
-1925 y(INTEGER)g(SKYFRAME1,)g(SKYFRAME2,)f(STATUS)262
-2124 y(STATUS)i(=)i(0)262 2324 y(...)262 2523 y(SKYFRAME1)c(=)44
-b(AST_SKYFRAME\()38 b('System=FK4-NO-E)o(,)f(Epoch=B1958,)i
-(Equinox=B1960',)e(STATUS)k(\))262 2622 y(SKYFRAME2)e(=)44
-b(AST_SKYFRAME\()38 b('System=Ecliptic)o(,)f(Equinox=J2010.5',)g
-(STATUS)k(\))262 2822 y(CVT)h(=)h(AST_CONVERT\()c(SKYFRAME1,)g
-(SKYFRAME2,)h(')j(',)f(STATUS)g(\))0 3093 y FG(This)32
-b(will)h(pro)s(duce)e(a)i(p)s(oin)m(ter,)h(CVT,)e(to)i(the)e(F)-8
-b(rameSet)34 b(sho)m(wn)e(in)h(Figure)g(12.)95 b(As)33
-b(can)g(b)s(e)f(seen,)i(this)717 4226 y @beginspecial
-95 @llx 389 @lly 528 @urx 576 @ury 2814 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsconvert.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4422 a(Figure)45 b(12:)69 b(The)43 b(F)-8
-b(rameSet)46 b(pro)s(duced)c(when)h(AST)p Fy(_)p FG(CONVER)-8
-b(T)43 b(is)h(used)g(to)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(the)0
-4535 y(co)s(ordinate)d(systems)e(represen)m(ted)h(b)m(y)g(t)m(w)m(o)h
-(SkyF)-8 b(rames.)72 b(The)40 b(source)h(SkyF)-8 b(rame)41
-b(b)s(ecomes)g(the)g(base)0 4648 y(F)-8 b(rame,)45 b(while)d(the)g
-(destination)g(SkyF)-8 b(rame)42 b(b)s(ecomes)f(the)h(curren)m(t)f(F)-8
-b(rame.)75 b(The)41 b(Mapping)h(b)s(et)m(w)m(een)0 4761
-y(them)30 b(implemen)m(ts)h(the)g(required)e(con)m(v)m(ersion.)0
-5076 y(F)-8 b(rameSet)25 b(con)m(tains)f(just)f(t)m(w)m(o)i(F)-8
-b(rames.)39 b(The)23 b(source)g(F)-8 b(rame)24 b(supplied)e(to)j(AST)p
-Fy(_)p FG(CONVER)-8 b(T)21 b(b)s(ecomes)j(its)0 5189
-y(base)29 b(F)-8 b(rame,)30 b(while)f(the)g(destination)g(F)-8
-b(rame)30 b(b)s(ecomes)f(its)g(curren)m(t)f(F)-8 b(rame.)41
-b(\(The)29 b(F)-8 b(rameSet,)30 b(of)f(course,)0 5302
-y(simply)g(holds)f(p)s(oin)m(ters)h(to)h(these)g(F)-8
-b(rames,)30 b(rather)g(than)e(making)i(copies.\))41 b(The)29
-b(Mapping)g(whic)m(h)g(relates)0 5414 y(the)i(base)f(F)-8
-b(rame)31 b(to)g(the)g(curren)m(t)f(F)-8 b(rame)32 b(is)e(the)g(one)h
-(whic)m(h)f(implemen)m(ts)h(the)g(required)e(con)m(v)m(ersion.)0
-5580 y(As)f(w)m(e)h(noted)g(earlier)h(\()p Fu(x)p FG(12.1\),)h(the)e(F)
--8 b(rameSet)30 b(returned)d(b)m(y)i(AST)p Fy(_)p FG(CONVER)-8
-b(T)27 b(ma)m(y)i(b)s(e)f(used)f(b)s(oth)h(as)h(a)0 5693
-y(Mapping)g(and)g(as)h(a)g(F)-8 b(rame)30 b(to)g(p)s(erform)e(most)i
-(of)g(the)f(functions)g(y)m(ou)h(are)g(lik)m(ely)h(to)f(need.)40
-b(Ho)m(w)m(ev)m(er,)32 b(the)p eop end
-%%Page: 116 126
-TeXDict begin 116 125 bop 0 52 a FG(116)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y FG(Mapping)f(ma)m(y)i(b)s(e)d(extracted)j(for)e(use)h(on)f(its)h
-(o)m(wn)f(if)h(necessary)-8 b(,)31 b(using)e(AST)p Fy(_)p
-FG(GETMAPPING)g(\()p Fu(x)p FG(13.7\),)0 464 y(for)h(example:)262
-708 y Ft(INTEGER)40 b(MAPPING)262 907 y(...)262 1106
-y(MAPPING)g(=)j(AST_GETMAPPING\()38 b(CVT,)k(AST__BASE,)d
-(AST__CURRENT,)f(STATUS)j(\))0 1397 y Fw(14.2)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(F)-9 b(rameSet)38 b(Co)s(ordinate)g(Systems)0
-1618 y FG(W)-8 b(e)33 b(no)m(w)f(consider)f(the)h(pro)s(cess)f(of)h
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(the)g(co)s(ordinate)g(systems)g
-(represen)m(ted)g(b)m(y)f(t)m(w)m(o)0 1730 y(F)-8 b(rameSets.)69
-b(This)39 b(is)h(a)f(most)h(imp)s(ortan)m(t)g(op)s(eration,)j(as)c(a)h
-(subsequen)m(t)f(example)h(\()p Fu(x)p FG(14.3\))i(will)e(sho)m(w,)0
-1843 y(and)33 b(is)g(illustrated)h(in)f(Figure)g(13.)99
-b(Recalling)35 b(\()p Fu(x)p FG(13.8\))h(that)d(a)h(F)-8
-b(rameSet)34 b(will)g(b)s(eha)m(v)m(e)g(lik)m(e)g(its)g(curren)m(t)0
-1956 y(F)-8 b(rame)29 b(when)f(necessary)-8 b(,)29 b(con)m(v)m(ersion)h
-(b)s(et)m(w)m(een)f(t)m(w)m(o)h(F)-8 b(rameSets)29 b(is)f(p)s(erformed)
-f(using)h(AST)p Fy(_)p FG(CONVER)-8 b(T)0 2069 y(\()p
-Fu(x)p FG(12.1\),)33 b(but)d(supplying)f(p)s(oin)m(ters)i(to)g(F)-8
-b(rameSets)32 b(instead)e(of)h(F)-8 b(rames.)42 b(The)30
-b(e\013ect)i(of)f(this)f(is)h(to)g(con)m(v)m(ert)0 2182
-y(b)s(et)m(w)m(een)g(the)g(co)s(ordinate)g(systems)f(represen)m(ted)h
-(b)m(y)f(the)g(curren)m(t)g(F)-8 b(rames)32 b(of)e(eac)m(h)i(F)-8
-b(rameSet:)262 2426 y Ft(INTEGER)40 b(FRAMESETA,)g(FRAMESETB)262
-2625 y(...)262 2824 y(CVT)i(=)h(AST_CONVERT\()c(FRAMESETA,)g
-(FRAMESETB,)h('SKY',)h(STATUS)g(\))0 3081 y FG(When)28
-b(using)g(F)-8 b(rameSets,)31 b(w)m(e)e(are)f(presen)m(ted)h(with)f
-(considerably)h(more)f(con)m(v)m(ersion)i(options)f(than)f(when)0
-3194 y(using)36 b(F)-8 b(rames)36 b(alone.)59 b(This)35
-b(is)h(b)s(ecause)g(eac)m(h)h(curren)m(t)f(F)-8 b(rame)37
-b(is)f(related)h(to)g(all)g(the)f(other)g(F)-8 b(rames)37
-b(in)0 3307 y(its)d(resp)s(ectiv)m(e)g(F)-8 b(rameSet.)50
-b(Therefore,)34 b(if)f(w)m(e)g(can)h(establish)f(a)h(link)f(b)s(et)m(w)
-m(een)h(an)m(y)f(pair)g(of)g(F)-8 b(rames,)35 b(one)0
-3420 y(from)c(eac)m(h)i(F)-8 b(rameSet,)34 b(w)m(e)e(can)g(form)f(a)h
-(complete)h(con)m(v)m(ersion)g(path)f(b)s(et)m(w)m(een)g(the)g(t)m(w)m
-(o)h(curren)m(t)f(F)-8 b(rames)0 3533 y(\(Figure)31 b(13\).)0
-3694 y(This)39 b(expanded)f(range)i(of)g(options)g(is,)i(of)e(course,)i
-(precisely)e(the)g(in)m(ten)m(tion.)69 b(By)40 b(connecting)h(F)-8
-b(rames)0 3807 y(together)43 b(within)d(a)h(F)-8 b(rameSet,)46
-b(w)m(e)41 b(ha)m(v)m(e)h(extended)f(the)h(range)f(of)g(co)s(ordinate)h
-(systems)f(that)h(can)f(b)s(e)0 3920 y(reac)m(hed)g(from)e(an)m(y)i
-(one)f(of)g(them.)70 b(W)-8 b(e)42 b(are)e(therefore)h(no)f(longer)g
-(restricted)h(to)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)0
-4033 y(F)-8 b(rames)31 b(with)f(the)g(same)g(Domain)h(v)-5
-b(alue)30 b(\()p Fu(x)p FG(7.12\),)j(but)d(can)g(go)h
-Fx(via)f FG(a)g(range)h(of)f(in)m(termediate)i(co)s(ordinate)0
-4146 y(systems)d(in)f(order)h(to)g(mak)m(e)h(the)f(connection)h(w)m(e)f
-(require.)40 b(T)-8 b(ransformation)29 b(b)s(et)m(w)m(een)g(di\013eren)
-m(t)h(domains)0 4259 y(has)c(therefore)h(b)s(ecome)g(p)s(ossible)f(b)s
-(ecause,)i(in)e(assem)m(bling)h(the)g(F)-8 b(rameSets,)29
-b(w)m(e)e(pro)m(vided)f(the)h(additional)0 4372 y(information)k(needed)
-f(to)h(in)m(ter-relate)h(them.)0 4533 y(It)25 b(is)g(imp)s(ortan)m(t)h
-(to)f(appreciate,)j(ho)m(w)m(ev)m(er,)g(that)d(the)h(c)m(hoice)h(of)e
-(\\missing)g(link")h(is)f(crucial)h(in)f(determining)0
-4646 y(the)j(con)m(v)m(ersion)h(that)f(results.)39 b(Although)28
-b(eac)m(h)h(F)-8 b(rameSet)29 b(ma)m(y)f(b)s(e)f(p)s(erfectly)g
-(self-consisten)m(t)j(in)m(ternally)-8 b(,)0 4759 y(this)36
-b(do)s(es)g(not)h(mean)f(that)h(all)h(con)m(v)m(ersion)f(paths)f
-(through)g(the)h(com)m(bined)f(net)m(w)m(ork)h(of)g(Mappings)f(are)0
-4872 y(equiv)-5 b(alen)m(t.)53 b(Quite)35 b(the)f(con)m(trary)h(in)e
-(fact:)49 b(ev)m(erything)35 b(dep)s(ends)e(on)h(where)f(the)h(in)m
-(ter-connecting)j(link)0 4985 y(b)s(et)m(w)m(een)43 b(the)g(t)m(w)m(o)h
-(F)-8 b(rameSets)43 b(is)g(made.)77 b(In)42 b(practice,)47
-b(there)c(ma)m(y)g(b)s(e)f(a)g(large)i(n)m(um)m(b)s(er)d(of)i(p)s
-(ossible)0 5097 y(pairings)30 b(of)h(F)-8 b(rames)31
-b(and)e(hence)i(of)f(p)s(ossible)g(links.)41 b(Other)29
-b(factors)j(m)m(ust)e(therefore)g(b)s(e)g(used)g(to)h(restrict)0
-5210 y(the)g(c)m(hoice.)42 b(These)30 b(are:)111 5467
-y(1.)46 b(Not)g(ev)m(ery)g(p)s(ossible)e(pairing)h(of)h(F)-8
-b(rames)45 b(is)g(legitimate.)88 b(F)-8 b(or)45 b(example,)50
-b(y)m(ou)45 b(cannot)h(con)m(v)m(ert)227 5580 y(directly)30
-b(b)s(et)m(w)m(een)h(a)e(basic)h(F)-8 b(rame)31 b(and)e(a)g(SkyF)-8
-b(rame)30 b(whic)m(h)f(b)s(elong)h(to)g(di\013eren)m(t)g(classes,)h(so)
-f(suc)m(h)227 5693 y(pairings)g(will)h(b)s(e)f(ignored.)p
-eop end
-%%Page: 117 127
-TeXDict begin 117 126 bop 0 52 a Fz(14.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(F)-8 b(rameSet)32 b(Co)s(ordinate)e(Systems)1372
-b FG(117)565 4227 y @beginspecial 36 @llx 91 @lly 566
- at urx 744 @ury 3180 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsalign.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4422 a(Figure)38 b(13:)57 b(Con)m(v)m(ersion)38
-b(b)s(et)m(w)m(een)h(t)m(w)m(o)g(F)-8 b(rameSets)39 b(is)e(p)s
-(erformed)g(b)m(y)g(establishing)i(a)f(link)g(b)s(et)m(w)m(een)g(a)0
-4535 y(pair)e(of)g(F)-8 b(rames,)38 b(one)e(from)f(eac)m(h)i(F)-8
-b(rameSet.)59 b(If)35 b(con)m(v)m(ersion)i(b)s(et)m(w)m(een)g(these)f
-(t)m(w)m(o)h(F)-8 b(rames)37 b(is)f(p)s(ossible,)0 4648
-y(then)26 b(a)g(route)g(for)g(con)m(v)m(erting)i(b)s(et)m(w)m(een)e
-(the)h(curren)m(t)e(F)-8 b(rames)27 b(of)f(b)s(oth)g(F)-8
-b(rameSets)27 b(can)f(also)h(b)s(e)e(found.)38 b(In)0
-4761 y(practice,)33 b(there)f(ma)m(y)f(b)s(e)g(man)m(y)h(w)m(a)m(ys)g
-(of)f(pairing)g(F)-8 b(rames)32 b(to)g(\014nd)e(the)i(\\missing)f
-(link",)h(so)g(the)f(F)-8 b(rames')0 4874 y(Domain)31
-b(attribute)g(ma)m(y)g(b)s(e)f(used)g(to)h(narro)m(w)f(the)g(c)m
-(hoice.)p eop end
-%%Page: 118 128
-TeXDict begin 118 127 bop 0 52 a FG(118)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)111
-351 y FG(2.)46 b(In)24 b(a)h(similar)g(w)m(a)m(y)-8 b(,)27
-b(y)m(ou)e(cannot)g(con)m(v)m(ert)i(directly)e(b)s(et)m(w)m(een)g(F)-8
-b(rames)25 b(with)g(di\013eren)m(t)g(Domain)g(v)-5 b(alues)227
-464 y(\()p Fu(x)p FG(7.12\).)66 b(If)38 b(the)g(Domain)g(attribute)h
-(is)f(used)f(consisten)m(tly)j(\(t)m(ypically)g(only)e(one)g(F)-8
-b(rame)39 b(in)e(eac)m(h)227 577 y(F)-8 b(rameSet)32
-b(will)f(ha)m(v)m(e)g(a)g(particular)g(Domain)g(v)-5
-b(alue\),)31 b(then)f(this)h(further)e(restricts)i(the)f(c)m(hoice.)111
-758 y(3.)46 b(The)41 b(third)g(argumen)m(t)h(of)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)40 b(ma)m(y)i(then)f(b)s(e)g(used)g(to)h(sp)s
-(ecify)g(explicitly)h(whic)m(h)227 871 y(Domain)36 b(v)-5
-b(alue)36 b(the)f(paired)g(F)-8 b(rames)36 b(should)e(ha)m(v)m(e.)56
-b(Y)-8 b(ou)36 b(ma)m(y)g(also)g(supply)d(a)j(comma-separated)227
-984 y(list)31 b(of)g(preferences)f(here)g(\(see)i(b)s(elo)m(w\).)111
-1164 y(4.)46 b(If)24 b(the)h(ab)s(o)m(v)m(e)h(steps)e(fail)h(to)g
-(uniquely)f(iden)m(tify)h(the)f(link,)i(then)e(the)h(\014rst)f
-(suitable)h(pairing)f(of)h(F)-8 b(rames)227 1277 y(is)29
-b(used,)f(so)h(that)g(an)m(y)g(am)m(biguit)m(y)h(is)f(resolv)m(ed)h(b)m
-(y)e(the)h(order)f(in)g(whic)m(h)h(F)-8 b(rames)29 b(are)g(considered)g
-(for)227 1390 y(pairing)g(\(see)h(the)g(description)f(of)g(the)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)28 b(function)h(in)g(App)s(endix)e(B)i(for)g
-(details)h(of)227 1503 y(the)h(searc)m(h)g(order\).)928
-1470 y Fv(20)0 1738 y FG(In)26 b(the)i(example)f(ab)s(o)m(v)m(e)i(w)m
-(e)e(supplied)f(the)h(string)h(\\SKY")f(as)g(the)h(third)e(argumen)m(t)
-h(of)h(AST)p Fy(_)p FG(CONVER)-8 b(T.)0 1851 y(This)30
-b(constitutes)i(a)f(request)g(that)g(a)g(pair)g(of)g(F)-8
-b(rames)31 b(with)g(the)g(Domain)g(v)-5 b(alue)32 b(SKY)e(\()p
-Fx(i.e.)g FG(represen)m(ting)0 1964 y(celestial)36 b(co)s(ordinate)f
-(systems\))f(should)e(b)s(e)h(used)g(to)h(in)m(ter-relate)i(the)e(t)m
-(w)m(o)h(F)-8 b(rameSets.)51 b(Note)35 b(that)g(this)0
-2077 y(do)s(es)30 b(not)i(sp)s(ecify)e(whic)m(h)h(celestial)i(co)s
-(ordinate)f(system)e(to)i(use,)f(but)f(is)h(a)g(general)h(request)f
-(that)g(the)g(t)m(w)m(o)0 2190 y(F)-8 b(rameSets)31 b(b)s(e)f(in)m
-(ter-related)i(using)e(co)s(ordinates)h(on)g(the)f(celestial)j(sphere.)
-0 2345 y(Of)28 b(course,)i(it)f(ma)m(y)g(b)s(e)f(that)i(this)e(request)
-h(cannot)g(b)s(e)f(met)h(b)s(ecause)g(there)g(ma)m(y)g(not)g(b)s(e)f(a)
-i(celestial)h(co)s(or-)0 2458 y(dinate)d(system)g(in)g(b)s(oth)f(F)-8
-b(rameSets.)41 b(If)28 b(this)f(is)h(lik)m(ely)i(to)e(happ)s(en,)f(w)m
-(e)i(can)f(supply)e(a)j(list)f(of)g(preferences,)0 2571
-y(or)i(a)h Fx(domain)j(se)-5 b(ar)g(ch)35 b(p)-5 b(ath,)32
-b FG(as)e(the)h(third)f(argumen)m(t)g(to)h(AST)p Fy(_)p
-FG(CONVER)-8 b(T,)30 b(suc)m(h)g(as)g(the)h(follo)m(wing:)262
-2793 y Ft(CVT)42 b(=)h(AST_CONVERT\()c(FRAMESETA,)g(FRAMESETB,)h
-('SKY,PIXEL,GRID)o(,',)d(STATUS)k(\))0 3027 y FG(No)m(w,)g(if)e(the)f
-(t)m(w)m(o)i(F)-8 b(rameSets)39 b(cannot)g(b)s(e)f(in)m(ter-related)i
-(using)e(the)h(SKY)e(domain,)k(AST)p Fy(_)p FG(CONVER)-8
-b(T)0 3140 y(will)32 b(attempt)h(to)g(use)e(the)h(PIXEL)f(domain)h
-(instead.)45 b(If)32 b(this)f(also)i(fails,)g(it)f(will)g(try)g(the)g
-(GRID)g(domain.)0 3253 y(A)27 b(blank)g(\014eld)f(in)h(the)g(domain)g
-(searc)m(h)h(path)e(\(here)i(indicated)f(b)m(y)g(the)g(\014nal)g
-(comma\))h(allo)m(ws)g(an)m(y)g(Domain)0 3366 y(v)-5
-b(alue)31 b(to)g(b)s(e)f(used.)40 b(This)29 b(can)i(b)s(e)f(emplo)m(y)m
-(ed)h(as)g(a)f(last)i(resort)e(when)g(all)h(else)g(has)f(failed.)0
-3522 y(If)d(astCon)m(v)m(ert)j(succeeds)e(in)g(iden)m(tifying)g(a)h
-(con)m(v)m(ersion,)h(it)e(will)g(return)f(a)i(p)s(oin)m(ter)f(to)g(a)h
-(F)-8 b(rameSet)29 b(\()p Fu(x)p FG(14.1\))0 3635 y(in)36
-b(whic)m(h)g(the)g(source)g(and)g(destination)h(F)-8
-b(rames)36 b(are)h(in)m(ter-connected)h(b)m(y)e(the)g(required)f
-(Mapping.)58 b(In)0 3748 y(this)35 b(case,)i(of)e(course,)h(these)g(F)
--8 b(rames)35 b(will)g(b)s(e)f(the)h(curren)m(t)g(F)-8
-b(rames)36 b(of)f(the)g(t)m(w)m(o)h(F)-8 b(rameSets,)37
-b(but)d(in)h(all)0 3861 y(other)c(resp)s(ects)f(the)g(returned)g(F)-8
-b(rameSet)31 b(is)g(the)f(same)h(as)g(when)e(con)m(v)m(erting)j(b)s(et)
-m(w)m(een)f(F)-8 b(rames.)0 4017 y(V)g(ery)42 b(imp)s(ortan)m(tly)-8
-b(,)44 b(ho)m(w)m(ev)m(er,)i(AST)p Fy(_)p FG(CONVER)-8
-b(T)39 b(ma)m(y)j(mo)s(dify)e(the)i(F)-8 b(rameSets)42
-b(y)m(ou)f(are)h(con)m(v)m(erting)0 4130 y(b)s(et)m(w)m(een.)71
-b(It)40 b(do)s(es)g(this,)j(in)d(order)g(to)h(indicate)g(whic)m(h)f
-(pairing)h(of)f(F)-8 b(rames)41 b(w)m(as)g(used)e(to)i(in)m(ter-relate)
-0 4242 y(them,)32 b(b)m(y)f(c)m(hanging)h(the)g(Base)g(attribute)g(for)
-f(eac)m(h)i(F)-8 b(rameSet)32 b(so)g(that)g(the)f(F)-8
-b(rame)32 b(used)f(in)g(the)g(pairing)0 4355 y(b)s(ecomes)g(its)f(base)
-h(F)-8 b(rame)31 b(\()p Fu(x)p FG(13.4\).)0 4511 y(Finally)-8
-b(,)44 b(note)c(that)h(AST)p Fy(_)p FG(CONVER)-8 b(T)38
-b(ma)m(y)i(also)h(b)s(e)e(used)g(to)i(con)m(v)m(ert)g(b)s(et)m(w)m(een)
-g(a)f(F)-8 b(rameSet)41 b(and)e(a)0 4624 y(F)-8 b(rame,)30
-b(or)e Fx(vic)-5 b(e)30 b(versa.)41 b FG(If)27 b(a)i(p)s(oin)m(ter)f
-(to)h(a)g(F)-8 b(rame)29 b(is)f(supplied)f(for)h(either)h(the)g
-(\014rst)e(or)h(second)h(argumen)m(t,)0 4737 y(it)i(will)g(b)s(eha)m(v)
-m(e)g(lik)m(e)g(a)g(F)-8 b(rameSet)32 b(con)m(taining)g(only)e(a)h
-(single)g(F)-8 b(rame.)0 5020 y Fw(14.3)112 b(Example|Registering)39
-b(Tw)m(o)e(Images)0 5235 y FG(Consider)26 b(t)m(w)m(o)j(images)f(whic)m
-(h)f(ha)m(v)m(e)h(b)s(een)e(calibrated)j(b)m(y)e(attac)m(hing)i(F)-8
-b(rameSets)28 b(to)g(them,)g(suc)m(h)f(that)g(the)0 5348
-y(base)33 b(F)-8 b(rame)33 b(of)g(eac)m(h)h(F)-8 b(rameSet)34
-b(corresp)s(onds)d(to)i(the)g(ra)m(w)g(data)g(grid)f(co)s(ordinates)i
-(of)e(eac)m(h)i(image)g(\(the)p 0 5425 1512 4 v 73 5479
-a Fs(20)138 5510 y Fr(If)23 b(y)n(ou)f(\014nd)f(that)i(ho)n(w)g(this)f
-(am)n(biguit)n(y)h(is)g(resolv)n(ed)g(actually)g(mak)n(es)g(a)f
-(di\013erence)h(to)g(the)f(con)n(v)n(ersion)h(that)f(results,)i(then)0
-5602 y(y)n(ou)30 b(ha)n(v)n(e)g(probably)h(constructed)f(a)i(F)-6
-b(rameSet)30 b(whic)n(h)h(lac)n(ks)h(in)n(ternal)f(self-consistency)-6
-b(.)50 b(F)-6 b(or)31 b(example,)i(y)n(ou)d(migh)n(t)h(ha)n(v)n(e)0
-5693 y(t)n(w)n(o)26 b(F)-6 b(rames)26 b(represen)n(ting)g
-(indistinguishable)h(co)r(ordinate)g(systems)f(but)e(in)n(ter-related)i
-(b)n(y)f(a)h(non-n)n(ull)f(Mapping.)p eop end
-%%Page: 119 129
-TeXDict begin 119 128 bop 0 52 a Fz(14.3)93 b(Example|Registering)31
-b(Tw)m(o)g(Images)1996 b FG(119)0 351 y(GRID)36 b(domain)f(of)h
-Fu(x)p FG(7.13\).)58 b(Supp)s(ose,)35 b(also,)j(that)e(these)g(F)-8
-b(rameSets)36 b(con)m(tain)h(an)e(unkno)m(wn)f(n)m(um)m(b)s(er)g(of)0
-464 y(other)26 b(F)-8 b(rames,)28 b(represen)m(ting)e(alternativ)m(e)i
-(w)m(orld)d(co)s(ordinate)i(systems.)39 b(What)27 b(w)m(e)f(wish)f(to)h
-(do)g(is)g(register)0 577 y(these)34 b(t)m(w)m(o)h(images,)g(suc)m(h)e
-(that)h(w)m(e)g(can)g(transform)f(from)g(a)h(p)s(osition)f(in)g(the)h
-(data)g(grid)f(of)h(one)g(in)m(to)g(the)0 690 y(corresp)s(onding)e(p)s
-(osition)h(in)g(the)h(data)g(grid)f(of)g(the)g(other.)50
-b(This)32 b(is)i(a)f(v)m(ery)h(practical)h(example)e(b)s(ecause)0
-803 y(images)e(will)g(t)m(ypically)h(b)s(e)e(calibrated)i(using)e(F)-8
-b(rameSets)31 b(in)f(precisely)h(this)f(w)m(a)m(y)-8
-b(.)0 965 y(The)39 b(\014rst)g(step)h(will)g(probably)f(in)m(v)m(olv)m
-(e)k(making)d(a)g(cop)m(y)g(of)g(b)s(oth)g(F)-8 b(rameSets)40
-b(\(using)g(AST)p Fy(_)p FG(COPY|)0 1078 y Fu(x)p FG(4.12\),)33
-b(since)e(w)m(e)g(will)g(b)s(e)f(mo)s(difying)g(them.)41
-b(Let)31 b(\\frameseta")h(and)e(\\framesetb")h(b)s(e)f(p)s(oin)m(ters)h
-(to)g(these)0 1191 y(copies.)39 b(Since)22 b(w)m(e)h(w)m(an)m(t)g(to)g
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(the)h(base)f(F)-8
-b(rames)23 b(of)g(these)f(F)-8 b(rameSets)24 b(\()p Fx(i.e.)e
-FG(their)g(data)h(grid)0 1304 y(co)s(ordinates\),)36
-b(the)e(next)g(step)g(is)f(to)i(mak)m(e)g(these)f(F)-8
-b(rames)34 b(curren)m(t.)51 b(This)33 b(is)h(simply)f(done)h(b)m(y)f
-(in)m(v)m(erting)0 1417 y(b)s(oth)d(F)-8 b(rameSets,)32
-b(whic)m(h)f(in)m(terc)m(hanges)h(their)f(base)g(and)f(curren)m(t)h(F)
--8 b(rames.)43 b(astIn)m(v)m(ert)32 b(will)f(p)s(erform)f(this)0
-1530 y(task:)262 1777 y Ft(CALL)41 b(AST_INVERT\()e(FRAMESETA,)h
-(STATUS)h(\))262 1877 y(CALL)g(AST_INVERT\()e(FRAMESETB,)h(STATUS)h(\))
-0 2137 y FG(T)-8 b(o)30 b(iden)m(tify)f(the)h(required)e(con)m(v)m
-(ersion,)j(w)m(e)f(no)m(w)f(use)g(AST)p Fy(_)p FG(CONVER)-8
-b(T,)28 b(supplying)g(a)i(suitable)g(domain)0 2250 y(searc)m(h)h(path)f
-(with)g(whic)m(h)g(w)m(e)h(w)m(ould)f(lik)m(e)i(our)e(t)m(w)m(o)i
-(images)f(to)g(b)s(e)f(registered:)262 2497 y Ft(CVT)42
-b(=)h(AST_CONVERT\()c(FRAMESETA,)g(FRAMESETB,)h('SKY,PIXEL,GRID)o(',)d
-(STATUS)k(\))262 2597 y(IF)h(\()h(CVT)g(.EQ.)f(AST__NULL)e(\))j(THEN)
-392 2696 y(<no)g(conversion)c(was)j(possible>)262 2796
-y(ELSE)392 2896 y(<conversion)d(was)k(possible>)262 2995
-y(END)f(IF)0 3256 y FG(The)30 b(e\013ects)i(of)e(this)g(are:)111
-3516 y(1.)46 b(AST)p Fy(_)p FG(CONVER)-8 b(T)21 b(\014rst)g(attempts)h
-(to)h(register)f(the)g(t)m(w)m(o)h(images)g(on)e(the)h(celestial)j
-(sphere)c(\()p Fx(i.e.)g FG(using)227 3629 y(the)33 b(SKY)f(domain\).)
-47 b(T)-8 b(o)32 b(do)h(this,)g(it)g(searc)m(hes)g(for)f(a)h(celestial)
-i(co)s(ordinate)e(system,)g(although)g(not)227 3742 y(necessarily)f
-(the)g(same)g(one,)g(attac)m(hed)h(to)f(eac)m(h)g(image.)45
-b(If)31 b(it)h(\014nds)e(a)h(suitable)h(pair)f(of)h(co)s(ordinate)227
-3855 y(systems,)f(it)g(then)f(registers)h(the)g(images)g(b)m(y)f(matc)m
-(hing)i(corresp)s(onding)d(p)s(ositions)h(on)h(the)f(sky)-8
-b(.)111 4042 y(2.)46 b(If)28 b(this)h(fails,)g(AST)p
-Fy(_)p FG(CONVER)-8 b(T)27 b(next)i(tries)g(to)g(matc)m(h)g(p)s
-(ositions)g(in)f(the)g(PIXEL)g(domain)h(\()p Fu(x)p FG(7.12\).)227
-4155 y(If)40 b(it)g(succeeds,)j(the)d(t)m(w)m(o)i(images)f(will)f(then)
-f(b)s(e)h(registered)h(so)f(that)g(their)g(corresp)s(onding)f(pixel)227
-4268 y(p)s(ositions)44 b(corresp)s(ond.)80 b(If)44 b(the)g(PIXEL)f
-(domain)h(is)g(o\013set)h(from)f(the)g(data)g(grid)g(\(as)h(t)m
-(ypically)227 4381 y(happ)s(ens)35 b(in)h(data)h(reduction)f(systems)h
-(whic)m(h)f(implemen)m(t)h(a)f(\\pixel)i(origin"\),)h(then)d(this)g
-(will)h(b)s(e)227 4494 y(correctly)32 b(accoun)m(ted)g(for.)111
-4681 y(3.)46 b(If)26 b(this)h(also)h(fails,)g(the)f(GRID)g(domain)f(is)
-h(\014nally)f(used.)39 b(This)26 b(will)h(result)f(in)h(image)g
-(registration)i(b)m(y)227 4794 y(matc)m(hing)36 b(corresp)s(onding)d(p)
-s(oin)m(ts)i(in)f(the)h(data)g(grids)f(used)g(b)m(y)h(b)s(oth)f
-(images.)54 b(This)34 b(means)g(they)227 4907 y(will)d(b)s(e)f(aligned)
-h(so)f(that)h(the)g(\014rst)f(elemen)m(t)h(their)g(data)g(arra)m(ys)g
-(corresp)s(ond.)111 5094 y(4.)46 b(If)31 b(all)i(of)e(the)h(ab)s(o)m(v)
-m(e)g(fail,)h(AST)p Fy(_)p FG(CONVER)-8 b(T)30 b(will)i(return)e(the)i
-(v)-5 b(alue)32 b(AST)p Fy(__)p FG(NULL.)e(Otherwise)h(a)227
-5207 y(p)s(oin)m(ter)g(to)g(a)g(F)-8 b(rameSet)31 b(will)g(b)s(e)f
-(returned.)0 5467 y(The)36 b(resulting)g(CVT)g(F)-8 b(rameSet)38
-b(ma)m(y)f(then)f(b)s(e)g(used)f(directly)i(\()p Fu(x)p
-FG(12.1\))i(to)e(con)m(v)m(ert)h(b)s(et)m(w)m(een)g(p)s(ositions)0
-5580 y(in)d(the)h(data)g(grid)g(of)f(the)h(\014rst)f(image)i(and)e
-(corresp)s(onding)g(p)s(ositions)g(in)g(the)h(data)g(grid)g(of)g(the)f
-(second)0 5693 y(image.)p eop end
-%%Page: 120 130
-TeXDict begin 120 129 bop 0 52 a FG(120)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y FG(T)-8 b(o)30 b(determine)f(whic)m(h)h(domain)f(w)m(as)h(used)e
-(to)i(ac)m(hiev)m(e)i(registration,)f(w)m(e)f(can)g(use)f(the)h(fact)g
-(that)g(the)f(Base)0 464 y(attribute)37 b(of)g(eac)m(h)g(F)-8
-b(rameSet)38 b(is)e(set)h(b)m(y)g(AST)p Fy(_)p FG(CONVER)-8
-b(T)35 b(to)i(indicate)g(whic)m(h)g(in)m(termediate)h(F)-8
-b(rames)0 577 y(w)m(ere)28 b(used.)39 b(W)-8 b(e)29 b(can)f(therefore)h
-(simply)e(in)m(v)m(ert)i(either)f(F)-8 b(rameSet)29 b(\(to)g(mak)m(e)f
-(its)h(base)e(F)-8 b(rame)29 b(b)s(ecome)f(the)0 690
-y(curren)m(t)i(one\))h(and)f(then)g(enquire)g(the)h(Domain)g(v)-5
-b(alue:)262 932 y Ft(CHARACTER)39 b(*)44 b(\()f(20)f(\))i(DOMAIN)262
-1131 y(...)262 1430 y(CALL)d(AST_INVERT\()e(FRAMESETA,)h(STATUS)h(\))
-262 1530 y(DOMAIN)g(=)i(AST_GETC\()d(FRAMESETA,)f('Domain',)h(STATUS)h
-(\))0 1786 y FG(If)30 b(con)m(v)m(ersion)i(w)m(as)e(successful,)h(the)f
-(result)h(will)f(b)s(e)g(one)h(of)f(the)h(strings)f(\\SKY",)h(\\PIXEL")
-f(or)h(\\GRID".)0 2076 y Fw(14.4)112 b(Re-De\014ning)39
-b(a)f(F)-9 b(rameSet)38 b(Co)s(ordinate)g(System)0 2296
-y FG(As)44 b(discussed)f(earlier)h(\()p Fu(x)p FG(13.4\),)51
-b(an)43 b(imp)s(ortan)m(t)h(application)i(of)e(a)g(F)-8
-b(rameSet)45 b(is)f(to)g(allo)m(w)i(co)s(ordinate)0 2409
-y(system)40 b(information)g(to)g(b)s(e)f(attac)m(hed)i(to)g(en)m
-(tities)g(suc)m(h)e(as)h(images)h(in)e(order)g(to)i(calibrate)g(them.)
-68 b(In)0 2522 y(addition,)33 b(one)f(of)g(the)g(main)f(ob)5
-b(jectiv)m(es)34 b(of)e(AST)f(is)h(to)h(simplify)e(the)h(propagation)h
-(of)f(suc)m(h)f(information)0 2635 y(through)i(successiv)m(e)i(stages)g
-(of)f(data)h(pro)s(cessing,)f(so)g(that)h(it)f(remains)f(consisten)m(t)
-j(with)d(the)h(asso)s(ciated)0 2748 y(image)e(data.)0
-2909 y(In)k(suc)m(h)h(a)h(situation,)i(the)d(F)-8 b(rameSet's)38
-b(base)g(F)-8 b(rame)38 b(w)m(ould)e(corresp)s(ond)g(with)h(the)g
-(image's)i(data)f(grid)0 3022 y(co)s(ordinates)k(and)e(its)h(other)g(F)
--8 b(rames)42 b(\(if)f(an)m(y\))h(with)f(the)g(v)-5 b(arious)41
-b(alternativ)m(e)i(w)m(orld)e(co)s(ordinate)h(sys-)0
-3134 y(tems)37 b(asso)s(ciated)h(with)f(the)g(image.)61
-b(If)36 b(the)h(data)g(pro)s(cessing)g(b)s(eing)f(p)s(erformed)f(do)s
-(es)h(not)h(c)m(hange)h(the)0 3247 y(relationship)31
-b(b)s(et)m(w)m(een)h(the)f(image's)i(data)e(grid)g(co)s(ordinates)h
-(and)e(an)m(y)h(of)h(the)f(asso)s(ciated)h(w)m(orld)f(co)s(ordi-)0
-3360 y(nate)g(systems,)g(then)f(propagation)i(of)e(the)h(W)m(CS)g
-(information)g(is)f(straigh)m(tforw)m(ard)h(and)f(simply)g(in)m(v)m
-(olv)m(es)0 3473 y(cop)m(ying)h(the)g(F)-8 b(rameSet)31
-b(asso)s(ciated)h(with)e(the)h(image.)0 3634 y(If)e(an)m(y)i(of)f
-(these)g(relationships)g(c)m(hange,)h(ho)m(w)m(ev)m(er,)h(then)d
-(corresp)s(onding)g(c)m(hanges)i(m)m(ust)f(b)s(e)f(made)h(to)g(the)0
-3747 y(w)m(a)m(y)j(F)-8 b(rames)33 b(within)e(the)h(F)-8
-b(rameSet)33 b(are)f(in)m(ter-related.)48 b(By)32 b(far)f(the)h(most)h
-(common)f(case)h(o)s(ccurs)e(when)0 3860 y(the)i(image)g(undergo)s(es)f
-(some)h(geometrical)i(transformation)e(resulting)f(in)h(\\re-gridding")
-g(on)f(to)h(another)0 3973 y(data)e(grid,)f(but)g(the)h(same)f
-(principles)g(can)h(b)s(e)f(applied)g(to)h(an)m(y)g(re-de\014nition)f
-(of)h(a)f(co)s(ordinate)i(system.)0 4134 y(T)-8 b(o)34
-b(pursue)d(the)i(re-gridding)g(example,)i(w)m(e)e(w)m(ould)g(need)g(to)
-h(mo)s(dify)e(our)h(F)-8 b(rameSet)34 b(to)g(accoun)m(t)g(for)f(the)0
-4247 y(fact)27 b(that)f(the)g(image's)h(data)f(grid)g(co)s(ordinate)g
-(system)g(\(corresp)s(onding)f(to)h(the)g(F)-8 b(rameSet's)27
-b(base)f(F)-8 b(rame\))0 4360 y(has)30 b(c)m(hanged.)41
-b(Lo)s(oking)31 b(at)g(the)g(steps)f(needed)g(in)g(detail,)i(w)m(e)f
-(migh)m(t)g(pro)s(ceed)f(as)h(follo)m(ws:)111 4615 y(1.)46
-b(Create)34 b(a)f(Mapping)g(whic)m(h)g(represen)m(ts)g(the)g
-(relationship)g(b)s(et)m(w)m(een)h(the)f(original)h(data)g(grid)f(co)s
-(or-)227 4728 y(dinate)e(system)g(and)e(the)i(new)f(one.)111
-4914 y(2.)46 b(Obtain)37 b(a)h(F)-8 b(rame)38 b(to)h(represen)m(t)e
-(the)g(new)g(data)h(grid)g(co)s(ordinate)g(system)f(\(w)m(e)h(could)g
-(re-use)f(the)227 5027 y(original)32 b(base)e(F)-8 b(rame)32
-b(here,)e(using)g(AST)p Fy(_)p FG(GETFRAME)g(to)h(obtain)g(a)g(p)s(oin)
-m(ter)f(to)h(it\).)111 5213 y(3.)46 b(Add)e(the)g(new)g(F)-8
-b(rame)45 b(to)g(the)f(F)-8 b(rameSet,)49 b(related)c(to)g(the)g
-(original)g(base)f(F)-8 b(rame)45 b(b)m(y)g(the)f(new)227
-5326 y(Mapping.)39 b(This)24 b(F)-8 b(rame)26 b(no)m(w)e(represen)m(ts)
-h(the)g(new)f(data)h(grid)g(co)s(ordinate)g(system)g(and)f(is)h
-(correctly)227 5439 y(related)32 b(to)f(all)g(the)f(other)h(F)-8
-b(rames)31 b(presen)m(t.)1788 5406 y Fv(21)p 0 5516 1512
-4 v 73 5570 a Fs(21)138 5602 y Fr(This)d(is)g(b)r(ecause)f(an)n(y)g
-(transformation)i(to)e(or)h(from)g(this)f(new)g(F)-6
-b(rame)28 b(m)n(ust)f(go)h Fg(via)f Fr(the)f(base)i(F)-6
-b(rame)27 b(represen)n(ting)h(the)0 5693 y(original)f(data)f(grid)g(co)
-r(ordinate)h(system,)f(whic)n(h)g(w)n(e)g(assume)g(w)n(as)h(correctly)f
-(related)h(to)e(all)i(the)e(other)h(F)-6 b(rames)26 b(presen)n(t.)p
-eop end
-%%Page: 121 131
-TeXDict begin 121 130 bop 0 52 a Fz(14.5)93 b(Example|Binning)30
-b(an)g(Image)2245 b FG(121)111 351 y(4.)46 b(Remo)m(v)m(e)32
-b(the)f(original)h(base)e(F)-8 b(rame)31 b(\(represen)m(ting)g(the)g
-(old)f(data)i(grid)e(co)s(ordinate)h(system\).)111 542
-y(5.)46 b(Mak)m(e)32 b(the)f(new)f(F)-8 b(rame)31 b(the)g(base)f(F)-8
-b(rame)31 b(and)f(restore)h(the)g(original)g(curren)m(t)f(F)-8
-b(rame.)0 809 y(The)28 b(e\013ect)j(of)e(these)h(steps)f(is)g(to)g(c)m
-(hange)h(the)g(relationship)f(b)s(et)m(w)m(een)h(the)f(base)g(F)-8
-b(rame)30 b(and)e(all)i(the)f(other)0 922 y(F)-8 b(rames)33
-b(presen)m(t.)48 b(It)33 b(is)f(as)h(if)g(a)g(new)f(Mapping)h(has)f(b)s
-(een)g(in)m(terp)s(osed)g(b)s(et)m(w)m(een)i(the)f(F)-8
-b(rame)33 b(w)m(e)g(w)m(an)m(t)h(to)0 1035 y(alter)d(and)f(all)h(the)g
-(other)g(F)-8 b(rames)31 b(within)f(the)g(F)-8 b(rameSet)32
-b(\(Figure)f(14\).)780 2669 y @beginspecial 107 @llx
-245 @lly 551 @urx 547 @ury 2664 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsremap.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2865 a(Figure)d(14:)40 b(The)28 b(e\013ect)h(of)f(AST)p
-Fy(_)p FG(REMAPFRAME)f(is)h(to)g(in)m(terp)s(ose)g(a)g(Mapping)g(b)s
-(et)m(w)m(een)g(a)g(nominated)0 2978 y(F)-8 b(rame)40
-b(within)f(a)h(F)-8 b(rameSet)40 b(and)f(the)h(remaining)f(con)m(ten)m
-(ts)i(of)f(the)f(F)-8 b(rameSet.)69 b(This)39 b(e\013ectiv)m(ely)j
-(\\re-)0 3091 y(de\014nes")23 b(the)h(co)s(ordinate)h(system)f
-(represen)m(ted)g(b)m(y)g(the)g(a\013ected)h(F)-8 b(rame.)40
-b(It)24 b(ma)m(y)g(b)s(e)f(used)g(to)i(comp)s(ensate)0
-3204 y(\(sa)m(y\))32 b(for)e(geometrical)j(c)m(hanges)e(made)g(to)g(an)
-f(asso)s(ciated)i(image.)42 b(The)30 b(in)m(ter-relationships)i(b)s(et)
-m(w)m(een)f(all)0 3316 y(the)g(other)f(F)-8 b(rames)31
-b(within)f(the)h(F)-8 b(rameSet)31 b(remain)g(unc)m(hanged.)0
-3677 y(P)m(erforming)k(the)f(steps)h(ab)s(o)m(v)m(e)h(is)e(rather)h
-(length)m(y)-8 b(,)37 b(ho)m(w)m(ev)m(er,)g(so)e(the)f(AST)p
-Fy(_)p FG(REMAPFRAME)h(function)0 3790 y(is)c(pro)m(vided)f(to)i(p)s
-(erform)d(all)j(of)f(these)h(op)s(erations)f(in)f(one)i(go.)43
-b(A)31 b(practical)h(example)g(of)f(its)g(use)g(is)f(giv)m(en)0
-3902 y(b)s(elo)m(w)h(\()p Fu(x)p FG(14.5\).)0 4201 y
-Fw(14.5)112 b(Example|Binning)40 b(an)e(Image)0 4425
-y FG(As)20 b(an)g(example)h(of)g(using)f(AST)p Fy(_)p
-FG(REMAPFRAME,)g(consider)g(a)h(case)g(where)f(the)g(pixels)h(of)f(a)h
-(2-dimensional)0 4538 y(image)26 b(ha)m(v)m(e)g(b)s(een)d(binned)h(2)p
-Fu(\002)p FG(2,)i(so)f(as)g(to)g(reduce)f(the)h(image)h(size)f(b)m(y)g
-(a)g(factor)g(of)g(t)m(w)m(o)h(in)e(eac)m(h)i(dimension.)0
-4651 y(W)-8 b(e)38 b(m)m(ust)e(no)m(w)g(mo)s(dify)g(the)g(asso)s
-(ciated)i(F)-8 b(rameSet)38 b(to)f(re\015ect)g(this)f(c)m(hange)h(to)g
-(the)g(image.)60 b(Muc)m(h)36 b(the)0 4763 y(same)31
-b(pro)s(cess)f(w)m(ould)g(b)s(e)g(needed)g(for)g(an)m(y)g(other)h
-(geometrical)i(c)m(hange)f(the)e(image)i(migh)m(t)f(undergo.)0
-4928 y(W)-8 b(e)34 b(\014rst)f(set)g(up)f(a)i(Mapping)f(\(a)g(WinMap)h
-(in)f(this)g(case\))h(whic)m(h)f(relates)h(the)f(data)h(grid)f(co)s
-(ordinates)h(in)0 5041 y(the)d(original)g(image)h(to)f(those)g(in)f
-(the)g(new)g(one:)262 5295 y Ft(INTEGER)40 b(WINMAP)262
-5394 y(DOUBLE)h(PRECISION)e(INA\()j(2)i(\),)e(INB\()g(2)h(\),)g(OUTA\()
-f(2)h(\),)g(OUTB\()e(2)i(\))262 5494 y(DATA)e(INA)i(/)g(0.5D0,)e(0.5D0)
-h(/)262 5593 y(DATA)f(INB)i(/)g(2.5D0,)e(2.5D0)h(/)262
-5693 y(DATA)f(OUTA)h(/)i(0.5D0,)d(0.5D0)g(/)p eop end
-%%Page: 122 132
-TeXDict begin 122 131 bop 0 52 a FG(122)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)262
-351 y Ft(DATA)41 b(OUTB)h(/)i(1.5DO,)d(1.5DO)g(/)262
-551 y(...)262 750 y(WINMAP)g(=)i(AST_WINMAP\()c(2,)k(INA,)f(INB,)f
-(OUTA,)h(OUTB,)f(')j(',)e(STATUS)g(\))0 1052 y FG(Here,)j(w)m(e)d(ha)m
-(v)m(e)h(simply)f(set)g(up)f(arra)m(ys)h(con)m(taining)h(the)f(data)g
-(grid)g(co)s(ordinates)g(of)g(the)g(b)s(ottom)g(left)0
-1164 y(and)d(top)i(righ)m(t)f(corners)g(of)g(the)h(\014rst)e(elemen)m
-(t)j(in)d(the)i(output)e(image)j(\(OUT)-8 b(A)40 b(and)g(OUTB\))g(and)f
-(the)0 1277 y(corresp)s(onding)34 b(co)s(ordinates)h(in)f(the)h(input)e
-(image)j(\(INA)f(and)f(INB\).)i(AST)p Fy(_)p FG(WINMAP)e(then)g
-(creates)i(a)0 1390 y(WinMap)c(whic)m(h)g(p)s(erforms)f(the)h(required)
-f(transformation.)47 b(W)-8 b(e)33 b(do)f(not)g(need)g(to)h(kno)m(w)f
-(the)g(size)h(of)f(the)0 1503 y(image.)0 1679 y(W)-8
-b(e)38 b(can)f(then)f(pass)g(this)h(WinMap)g(to)g(AST)p
-Fy(_)p FG(REMAPFRAME.)g(This)e(mo)s(di\014es)h(the)h(relationship)g(b)s
-(e-)0 1792 y(t)m(w)m(een)26 b(our)f(F)-8 b(rameSet's)26
-b(base)f(F)-8 b(rame)26 b(and)f(the)g(other)g(F)-8 b(rames)26
-b(in)f(the)g(F)-8 b(rameSet,)27 b(so)f(that)f(the)g(base)h(F)-8
-b(rame)0 1905 y(represen)m(ts)30 b(the)h(data)g(grid)f(co)s(ordinate)h
-(system)g(of)f(the)h(new)f(image)h(rather)g(than)f(the)g(old)h(one:)262
-2193 y Ft(INTEGER)40 b(FRAMESET)262 2393 y(...)262 2592
-y(CALL)h(AST_REMAPFRAME\()d(FRAMESET,)i(AST__BASE,)f(WINMAP,)i(STATUS)g
-(\))0 2894 y FG(An)m(y)34 b(other)g(co)s(ordinate)g(systems)g(describ)s
-(ed)e(b)m(y)i(the)g(F)-8 b(rameSet,)36 b(no)d(matter)i(ho)m(w)f(man)m
-(y)f(of)h(these)g(there)0 3007 y(migh)m(t)d(b)s(e,)f(are)h(no)m(w)f
-(correctly)i(asso)s(ciated)g(with)e(the)g(new)g(image.)0
-3344 y Fw(14.6)112 b(Main)m(taining)40 b(the)d(In)m(tegrit)m(y)g(of)g
-(F)-9 b(rameSets)0 3585 y FG(When)35 b(constructing)i(a)e(F)-8
-b(rameSet,)39 b(y)m(ou)d(are)g(pro)m(vided)f(with)g(a)h(framew)m(ork)g
-(in)m(to)g(whic)m(h)g(y)m(ou)g(can)g(place)0 3698 y(an)m(y)f(com)m
-(bination)g(of)f(F)-8 b(rames)35 b(and)f(Mappings)g(that)h(y)m(ou)f
-(wish.)52 b(There)33 b(are)i(relativ)m(ely)h(few)e(constrain)m(ts)0
-3811 y(on)d(this)f(pro)s(cess)h(and)f(no)g(c)m(hec)m(ks)i(are)g(p)s
-(erformed)d(to)i(see)h(whether)e(the)h(F)-8 b(rameSet)31
-b(y)m(ou)g(construct)h(mak)m(es)0 3924 y(ph)m(ysical)24
-b(sense.)39 b(It)23 b(is)h(quite)g(p)s(ossible,)h(for)e(example,)j(to)f
-(construct)f(a)g(F)-8 b(rameSet)25 b(con)m(taining)g(t)m(w)m(o)g(iden)m
-(tical)0 4037 y(SkyF)-8 b(rames)32 b(whic)m(h)g(are)g(in)m(ter-related)
-h(b)m(y)f(a)g(non-unit)f(Mapping.)45 b(AST)31 b(will)h(not)g(ob)5
-b(ject)33 b(if)f(y)m(ou)g(do)f(this,)0 4149 y(but)f(it)h(mak)m(es)h(no)
-f(sense,)g(b)s(ecause)f(applying)h(a)g(non-unit)f(Mapping)h(to)g(an)m
-(y)g(set)h(of)e(celestial)k(co)s(ordinates)0 4262 y(cannot)d(yield)f(p)
-s(ositions)h(that)g(are)f(still)h(in)f(the)h(original)g(co)s(ordinate)g
-(system.)41 b(If)30 b(y)m(ou)h(use)f(suc)m(h)g(a)g(F)-8
-b(rame-)0 4375 y(Set)36 b(to)g(p)s(erform)e(co)s(ordinate)i(con)m(v)m
-(ersions,)j(y)m(ou)c(are)h(lik)m(ely)h(to)g(get)f(unpredictable)f
-(results)h(b)s(ecause)f(the)0 4488 y(information)c(in)f(the)g(F)-8
-b(rameSet)32 b(is)e(corrupt.)0 4664 y(It)35 b(is,)i(of)e(course,)i(y)m
-(our)e(resp)s(onsibilit)m(y)g(as)g(a)g(programmer)g(to)h(ensure)e(the)h
-(v)-5 b(alidit)m(y)37 b(of)e(an)m(y)g(information)0 4777
-y(whic)m(h)43 b(y)m(ou)g(insert)g(in)m(to)h(a)f(F)-8
-b(rameSet.)80 b(Normally)-8 b(,)47 b(this)c(is)g(straigh)m(tforw)m(ard)
-h(and)e(simply)h(consists)g(of)0 4890 y(form)m(ulating)28
-b(y)m(our)f(problem)g(correctly)i(\(a)f(diagram)g(can)f(often)h(help)f
-(to)h(clarify)g(ho)m(w)f(co)s(ordinate)h(systems)0 5003
-y(are)23 b(in)m(ter-related\))h(and)d(writing)h(the)h(appropriate)f
-(bug-free)g(co)s(de)g(to)h(construct)g(the)f(F)-8 b(rameSet.)39
-b(Ho)m(w)m(ev)m(er,)0 5116 y(once)31 b(y)m(ou)g(start)g(to)g(mo)s(dify)
-e(an)i(existing)g(F)-8 b(rameSet,)32 b(there)e(are)h(new)f(opp)s
-(ortunities)g(for)g(corrupting)g(it!)0 5292 y(Consider,)d(for)g
-(example,)h(a)g(F)-8 b(rameSet)28 b(whose)f(curren)m(t)f(F)-8
-b(rame)28 b(is)f(a)g(SkyF)-8 b(rame.)40 b(W)-8 b(e)29
-b(can)e(set)g(a)h(new)e(v)-5 b(alue)0 5404 y(for)30 b(this)g(SkyF)-8
-b(rame's)31 b(Equino)m(x)g(attribute)g(simply)f(b)m(y)g(using)g(AST)p
-Fy(_)p FG(SET)e(on)i(the)h(F)-8 b(rameSet,)32 b(as)e(follo)m(ws:)262
-5693 y Ft(CALL)41 b(AST_SET\()g(FRAMESET,)f('Equinox=J2010')o(,)e
-(STATUS)j(\))p eop end
-%%Page: 123 133
-TeXDict begin 123 132 bop 0 52 a Fz(14.6)93 b(Main)m(taining)32
-b(the)e(In)m(tegrit)m(y)i(of)f(F)-8 b(rameSets)1836 b
-FG(123)0 351 y(The)39 b(e\013ect)i(of)e(this)g(will)h(b)s(e)f(to)h(c)m
-(hange)g(the)g(celestial)h(co)s(ordinate)g(system)e(whic)m(h)g(the)g
-(curren)m(t)h(F)-8 b(rame)0 464 y(represen)m(ts.)65 b(Y)-8
-b(ou)39 b(can)g(see,)j(ho)m(w)m(ev)m(er,)g(that)d(this)g(has)f(the)h(p)
-s(oten)m(tial)h(to)f(mak)m(e)h(the)e(F)-8 b(rameSet)40
-b(corrupt)0 577 y(unless)28 b(corresp)s(onding)g(c)m(hanges)h(are)g
-(also)h(made)e(to)i(the)f(Mapping)f(whic)m(h)g(relates)i(this)f(SkyF)-8
-b(rame)29 b(to)g(the)0 690 y(other)k(F)-8 b(rames)33
-b(within)f(the)h(F)-8 b(rameSet.)49 b(In)32 b(fact,)i(it)f(is)g(a)g
-(general)h(rule)e(that)h(an)m(y)g(c)m(hange)h(to)f(a)g(F)-8
-b(rameSet)0 803 y(whic)m(h)27 b(a\013ects)i(its)e(curren)m(t)g(F)-8
-b(rame)28 b(can)g(p)s(oten)m(tially)h(require)d(corresp)s(onding)h(c)m
-(hanges)h(to)g(the)f(F)-8 b(rameSet's)0 916 y(Mappings)30
-b(in)g(order)g(to)h(main)m(tain)h(its)e(o)m(v)m(erall)j(in)m(tegrit)m
-(y)-8 b(.)0 1067 y(F)g(ortunately)g(,)29 b(once)d(y)m(ou)g(ha)m(v)m(e)g
-(stored)g(v)-5 b(alid)26 b(information)g(in)f(a)h(F)-8
-b(rameSet,)28 b(AST)c(will)i(lo)s(ok)g(after)g(these)g(de-)0
-1180 y(tails)e(for)f(y)m(ou)g(automatically)-8 b(,)29
-b(so)23 b(that)h(the)f(F)-8 b(rameSet's)24 b(in)m(tegrit)m(y)h(is)e
-(main)m(tained.)40 b(In)22 b(the)h(example)h(ab)s(o)m(v)m(e,)0
-1293 y(it)35 b(w)m(ould)g(do)g(this)g(b)m(y)f(appropriately)h
-(re-mapping)g(the)g(curren)m(t)g(F)-8 b(rame)35 b(\(as)h(if)f(AST)p
-Fy(_)p FG(REMAPFRAME)0 1406 y(had)28 b(b)s(een)g(used|)p
-Fu(x)p FG(14.4\))i(in)f(resp)s(onse)f(to)h(the)g(use)g(of)f(AST)p
-Fy(_)p FG(SET.)g(One)g(w)m(a)m(y)i(of)e(illustrating)i(this)f(pro)s
-(cess)0 1519 y(is)h(as)h(follo)m(ws:)262 1723 y Ft(INTEGER)40
-b(SKYFRAME)262 1922 y(...)262 2121 y(SKYFRAME)g(=)j(AST_SKYFRAME\()38
-b(')43 b(',)g(STATUS)e(\))262 2221 y(FRAMESET)f(=)j(AST_FRAMESET\()38
-b(SKYFRAME,)i(STATUS)h(\))262 2321 y(CALL)g(AST_ADDFRAME\()e(FRAMESET,)
-h(1,)i(AST_UNITMAP\()d(2,)k(')g(',)g(STATUS)e(\))218
-2420 y(:)828 b(SKYFRAME,)40 b(STATUS)h(\))0 2637 y FG(This)27
-b(constructs)g(a)h(trivial)h(F)-8 b(rameSet)29 b(whose)e(base)g(and)g
-(curren)m(t)h(F)-8 b(rames)28 b(are)g(b)s(oth)f(the)g(same)h(SkyF)-8
-b(rame)0 2750 y(connected)29 b(b)m(y)f(a)h(UnitMap.)41
-b(Y)-8 b(ou)29 b(can)f(think)g(of)h(this)f(as)h(a)f(\\pip)s(e")h
-(connecting)g(t)m(w)m(o)h(co)s(ordinate)f(systems.)0
-2863 y(A)m(t)c(presen)m(t,)g(these)g(t)m(w)m(o)g(systems)f(represen)m
-(t)g(iden)m(tical)i(ICRS)c(co)s(ordinates,)27 b(so)d(the)g(F)-8
-b(rameSet)25 b(implemen)m(ts)0 2976 y(a)g(unit)g(Mapping.)38
-b(W)-8 b(e)27 b(can)e(c)m(hange)h(the)f(co)s(ordinate)g(system)h(on)e
-(the)h(curren)m(t)g(end)f(of)h(this)g(pip)s(e)f(as)h(follo)m(ws:)262
-3180 y Ft(CALL)41 b(AST_SET\()g(FRAMESET,)f('System=Eclipti)o(c,)d
-(Equinox=J2010',)h(STATUS)j(\))0 3397 y FG(and)e(the)g(Mapping)g(whic)m
-(h)g(the)g(F)-8 b(rameSet)41 b(implemen)m(ts)e(w)m(ould)g(c)m(hange)i
-(accordingly)-8 b(.)68 b(T)-8 b(o)40 b(c)m(hange)g(the)0
-3510 y(co)s(ordinate)31 b(system)g(on)f(the)h(base)f(end)g(of)g(the)h
-(pip)s(e,)f(w)m(e)g(migh)m(t)i(use:)262 3714 y Ft(CALL)41
-b(AST_INVERT\()e(FRAMESET)i(\))262 3814 y(CALL)g(AST_SET\()g(FRAMESET,)
-f('System=Galacti)o(c',)d(STATUS)k(\))262 3914 y(CALL)g(AST_INVERT\()e
-(FRAMESET)i(\))0 4131 y FG(The)30 b(F)-8 b(rameSet)31
-b(w)m(ould)g(then)f(con)m(v)m(ert)i(b)s(et)m(w)m(een)f(galactic)i(and)d
-(ecliptic)i(co)s(ordinates.)0 4282 y(Note)45 b(that)g(AST)p
-Fy(_)p FG(SET)d(is)i(not)h(the)f(only)g(function)g(whic)m(h)g(has)g
-(this)g(e\013ect:)69 b(AST)p Fy(_)p FG(CLEAR)43 b(b)s(eha)m(v)m(es)0
-4395 y(similarly)-8 b(,)32 b(as)f(also)h(do)s(es)f(AST)p
-Fy(_)p FG(PERMAXES)f(\()p Fu(x)p FG(7.9\).)44 b(If)31
-b(y)m(ou)g(need)g(to)g(circum)m(v)m(en)m(t)i(this)d(mec)m(hanism)i(for)
-0 4508 y(an)m(y)d(reason,)h(this)f(can)g(b)s(e)f(done)h(b)m(y)g(going)h
-(b)s(ehind)d(the)i(scenes)h(and)e(obtaining)i(a)f(p)s(oin)m(ter)g
-(directly)h(to)f(the)0 4621 y(F)-8 b(rame)31 b(y)m(ou)g(wish)f(to)h(mo)
-s(dify)-8 b(.)40 b(Consider)30 b(the)g(follo)m(wing,)i(for)e(example:)
-262 4825 y Ft(SKYFRAME)40 b(=)j(AST_GETFRAME\()38 b(FRAMESET,)i
-(AST__CURRENT,)e(STATUS)j(\))262 4925 y(CALL)g(AST_SET\()g(SKYFRAME,)f
-('Equinox=J2010')o(,)e(STATUS)j(\))262 5024 y(CALL)g(AST_ANNUL\()f
-(SKYFRAME,)g(STATUS)h(\))0 5241 y FG(Here,)36 b(AST)p
-Fy(_)p FG(SET)d(is)h(applied)g(to)h(the)g(SkyF)-8 b(rame)35
-b(p)s(oin)m(ter)f(rather)h(than)f(the)g(F)-8 b(rameSet)36
-b(p)s(oin)m(ter,)g(so)e(the)0 5354 y(usual)28 b(c)m(hec)m(ks)i(on)e(F)
--8 b(rameSet)29 b(in)m(tegrit)m(y)i(do)d(not)g(o)s(ccur.)40
-b(The)28 b(SkyF)-8 b(rame's)29 b(Equino)m(x)f(attribute)h(will)g
-(there-)0 5467 y(fore)35 b(b)s(e)g(mo)s(di\014ed)f(without)h(an)m(y)g
-(corresp)s(onding)f(c)m(hange)i(to)g(the)f(F)-8 b(rameSet's)37
-b(Mappings.)54 b(In)34 b(this)h(case)0 5580 y(y)m(ou)29
-b(m)m(ust)g(tak)m(e)i(resp)s(onsibilit)m(y)e(y)m(ourself)g(for)g(main)m
-(taining)h(the)f(F)-8 b(rameSet's)31 b(in)m(tegrit)m(y)-8
-b(,)32 b(p)s(erhaps)27 b(through)0 5693 y(appropriate)j(use)g(of)h(AST)
-p Fy(_)p FG(REMAPFRAME.)p eop end
-%%Page: 124 134
-TeXDict begin 124 133 bop 0 52 a FG(124)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y Fw(14.7)112 b(Merging)38 b(F)-9 b(rameSets)0 568
-y FG(As)33 b(w)m(ell)h(as)f(adding)f(individual)h(F)-8
-b(rames)33 b(to)h(a)f(F)-8 b(rameSet)34 b(\()p Fu(x)p
-FG(13.3\),)j(it)c(is)g(also)h(p)s(ossible)e(to)i(add)e(complete)0
-681 y(sets)43 b(of)g(in)m(ter-related)h(F)-8 b(rames)44
-b(whic)m(h)e(are)h(con)m(tained)h(within)e(another)h(F)-8
-b(rameSet.)78 b(This,)45 b(of)e(course,)0 794 y(corresp)s(onds)29
-b(to)i(the)g(pro)s(cess)f(of)g(merging)h(t)m(w)m(o)h(F)-8
-b(rameSets)31 b(\(Figure)g(15\).)695 4132 y @beginspecial
-57 @llx 88 @lly 535 @urx 732 @ury 2868 @rwi @setspecial
-%%BeginDocument: sun210_figures/fsmerge.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4328 a(Figure)23 b(15:)38 b(Tw)m(o)22
-b(F)-8 b(rameSets)24 b(in)e(the)h(pro)s(cess)f(of)g(b)s(eing)g(merged)h
-(using)f(AST)p Fy(_)p FG(ADDFRAME.)h(F)-8 b(rameSet)24
-b(B)0 4441 y(is)39 b(b)s(eing)f(added)h(to)g(F)-8 b(rameSet)40
-b(A)f(b)m(y)g(supplying)f(a)h(new)g(Mapping)f(whic)m(h)h(in)m
-(ter-relates)i(a)e(nominated)0 4554 y(F)-8 b(rame)32
-b(in)e(A)h(\(here)g(n)m(um)m(b)s(er)f(1\))h(and)g(the)g(curren)m(t)f(F)
--8 b(rame)32 b(of)f(B.)g(In)f(the)h(merged)g(F)-8 b(rameSet,)33
-b(the)e(F)-8 b(rames)0 4667 y(con)m(tributed)25 b(b)m(y)h(B)f(will)h(b)
-s(e)e(re-n)m(um)m(b)s(ered)h(to)g(b)s(ecome)h(F)-8 b(rames)26
-b(4,)h(5)f(and)e(6.)40 b(The)24 b(base)i(F)-8 b(rame)26
-b(will)g(remain)0 4780 y(unc)m(hanged,)i(but)f(the)h(curren)m(t)g(F)-8
-b(rame)28 b(of)g(B)g(b)s(ecomes)g(the)g(new)f(curren)m(t)h(F)-8
-b(rame.)41 b(Note)29 b(that)f(F)-8 b(rameSet)29 b(B)0
-4893 y(itself)i(is)g(not)f(altered)i(b)m(y)e(this)g(pro)s(cess.)0
-5241 y(This)22 b(pro)s(cess)g(is)g(p)s(erformed)f(b)m(y)h(adding)h(one)
-f(F)-8 b(rameSet)24 b(to)f(another)g(using)f(AST)p Fy(_)p
-FG(ADDFRAME,)h(in)f(m)m(uc)m(h)0 5354 y(the)37 b(same)g(manner)e(as)i
-(when)e(adding)h(a)h(new)f(F)-8 b(rame)38 b(to)f(an)f(existing)i(F)-8
-b(rameSet)37 b(\()p Fu(x)p FG(13.3\).)62 b(It)36 b(is)h(simply)0
-5467 y(a)h(matter)g(of)f(pro)m(viding)h(a)f(F)-8 b(rameSet)39
-b(p)s(oin)m(ter,)g(instead)f(of)f(a)h(F)-8 b(rame)38
-b(p)s(oin)m(ter,)i(for)d(the)g(4th)h(argumen)m(t.)0 5580
-y(In)31 b(p)s(erforming)f(the)i(merger)g(y)m(ou)g(m)m(ust,)g(as)g
-(usual,)f(supply)f(a)i(Mapping,)g(but)f(in)h(this)f(case)i(the)f
-(Mapping)0 5693 y(should)40 b(relate)j(the)f(curren)m(t)f(F)-8
-b(rame)42 b(of)f(the)h(F)-8 b(rameSet)43 b(b)s(eing)d(added)h(to)h(one)
-g(of)f(the)h(F)-8 b(rames)42 b(already)p eop end
-%%Page: 125 135
-TeXDict begin 125 134 bop 0 52 a Fz(14.7)93 b(Merging)31
-b(F)-8 b(rameSets)2624 b FG(125)0 351 y(presen)m(t.)41
-b(F)-8 b(or)31 b(example,)g(y)m(ou)g(migh)m(t)g(p)s(erform)e(the)i
-(merger)f(sho)m(wn)g(in)g(Figure)h(15)g(as)g(follo)m(ws:)262
-600 y Ft(INTEGER)40 b(MAPPING)262 800 y(...)262 999 y(CALL)h
-(AST_ADDFRAME\()e(FRAMESETA,)g(1,)k(MAPPING,)d(FRAMESETB,)g(STATUS)h
-(\))0 1261 y FG(The)c(F)-8 b(rames)39 b(acquired)f(b)m(y)g(FRAMESET)-8
-b(A)38 b(from)f(the)h(F)-8 b(rameSet)39 b(b)s(eing)e(added)h
-(\(FRAMESETB\))g(are)0 1374 y(re-n)m(um)m(b)s(ered)23
-b(so)i(that)g(they)f(retain)h(their)g(original)g(order)f(and)g(follo)m
-(w)h(on)g(consecutiv)m(ely)h(after)f(the)g(F)-8 b(rames)0
-1487 y(that)31 b(w)m(ere)g(already)g(presen)m(t,)g(whose)f(indices)h
-(remain)g(unc)m(hanged.)40 b(The)30 b(base)h(F)-8 b(rame)32
-b(of)e(FRAMESET)-8 b(A)0 1600 y(remains)35 b(unc)m(hanged,)i(but)e(the)
-g(curren)m(t)h(F)-8 b(rame)36 b(of)g(FRAMESETB)f(b)s(ecomes)h(its)g
-(new)f(curren)m(t)g(F)-8 b(rame.)0 1713 y(All)27 b(the)h(in)m
-(ter-relationships)f(b)s(et)m(w)m(een)h(F)-8 b(rames)28
-b(in)e(b)s(oth)g(F)-8 b(rameSets)28 b(remain)f(in)f(place)i(and)f(are)g
-(preserv)m(ed)0 1826 y(in)j(the)h(merged)f(F)-8 b(rameSet.)0
-1988 y(Note)33 b(that)f(while)f(this)h(pro)s(cess)f(mo)s(di\014es)f
-(the)i(\014rst)f(F)-8 b(rameSet)32 b(\(FRAMESET)-8 b(A\),)33
-b(it)f(lea)m(v)m(es)i(the)d(original)0 2101 y(con)m(ten)m(ts)h(of)f
-(the)f(one)h(b)s(eing)f(added)f(\(FRAMESETB\))j(unc)m(hanged.)p
-eop end
-%%Page: 126 136
-TeXDict begin 126 135 bop 0 52 a FG(126)1350 b Fz(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)p
-eop end
-%%Page: 127 137
-TeXDict begin 127 136 bop 3643 52 a FG(127)0 351 y FA(15)135
-b(Sa)l(ving)45 b(and)g(Restoring)i(Ob)7 b(jects)45 b(\(Channels\))0
-612 y FG(F)-8 b(acilities)31 b(are)c(pro)m(vided)g(b)m(y)h(the)f(AST)g
-(library)g(for)g(p)s(erforming)f(input)h(and)f(output)h(\(I/O\))h(with)
-g(an)m(y)f(kind)0 725 y(of)35 b(Ob)5 b(ject.)53 b(This)34
-b(means)g(it)i(is)e(p)s(ossible)g(to)i(write)e(an)m(y)h(Ob)5
-b(ject)35 b(in)m(to)h(v)-5 b(arious)34 b(external)i(represen)m(tations)
-0 837 y(for)29 b(storage,)i(and)e(then)g(to)h(read)f(these)h(represen)m
-(tations)g(bac)m(k)g(in,)g(so)g(as)f(to)h(restore)g(the)g(original)g
-(Ob)5 b(ject.)0 950 y(T)m(ypically)-8 b(,)32 b(an)e(Ob)5
-b(ject)31 b(w)m(ould)f(b)s(e)g(written)g(b)m(y)h(one)f(program)g(and)g
-(read)g(bac)m(k)i(in)e(b)m(y)g(another.)0 1118 y(W)-8
-b(e)34 b(refer)e(to)h(\\external)g(represen)m(tations")h(in)e(the)h
-(plural)f(b)s(ecause)g(AST)g(is)g(designed)g(to)h(function)g(inde-)0
-1231 y(p)s(enden)m(tly)27 b(of)h(an)m(y)f(particular)h(data)g(storage)i
-(system.)39 b(This)27 b(means)h(that)g(Ob)5 b(jects)27
-b(ma)m(y)h(need)g(con)m(v)m(erting)0 1344 y(in)m(to)41
-b(a)g(n)m(um)m(b)s(er)e(of)i(di\013eren)m(t)f(external)i(represen)m
-(tations)f(in)f(order)g(to)h(b)s(e)f(compatible)h(with)f(\(sa)m(y\))i
-(the)0 1457 y(astronomical)32 b(data)f(storage)h(system)f(in)f(whic)m
-(h)g(they)g(will)h(reside.)0 1625 y(In)f(this)g(section,)i(w)m(e)f
-(discuss)e(the)i(basic)g(I/O)f(facilities)i(whic)m(h)f(supp)s(ort)d
-(external)j(represen)m(tations)h(based)0 1738 y(on)37
-b(a)g(textual)h(format)f(referred)f(to)i(as)f(the)g(AST)f(\\nativ)m(e)j
-(format".)61 b(These)36 b(are)h(implemen)m(ted)h(using)e(a)0
-1851 y(new)29 b(kind)f(of)h(Ob)5 b(ject|a)30 b(Channel.)39
-b(W)-8 b(e)31 b(will)e(examine)h(later)g(ho)m(w)f(to)h(use)f(other)g
-(represen)m(tations,)i(based)0 1964 y(on)g(an)f(XML)h(format)h(or)e(on)
-h(the)g(use)g(of)g(FITS)f(headers,)g(for)h(storing)g(Ob)5
-b(jects.)42 b(These)31 b(are)g(implemen)m(ted)0 2077
-y(using)f(more)g(sp)s(ecialised)h(forms)f(of)h(Channel)e(called)j
-(XmlChan)d(\()p Fu(x)p FG(18\))k(and)d(FitsChan)g(\()p
-Fu(x)p FG(16\).)0 2387 y Fw(15.1)112 b(The)38 b(Channel)h(Mo)s(del)0
-2616 y FG(The)30 b(b)s(est)f(w)m(a)m(y)j(to)e(start)h(thinking)f(ab)s
-(out)g(a)h(Channel)e(is)h(lik)m(e)i(a)e(F)-8 b(ortran)31
-b(I/O)f(unit)g(\(also)h(represen)m(ted)g(b)m(y)0 2729
-y(an)36 b(in)m(teger,)j(as)d(it)h(happ)s(ens\))d(and)i(to)g(think)g(of)
-g(the)g(pro)s(cess)g(of)g(creating)h(a)g(Channel)e(as)h(the)g(com)m
-(bined)0 2842 y(pro)s(cess)d(of)h(allo)s(cating)i(a)e(unit)g(n)m(um)m
-(b)s(er)e(and)h(attac)m(hing)j(it)e(to)h(a)f(\014le)g(b)m(y)g(op)s
-(ening)f(the)h(\014le)g(on)f(that)i(unit.)0 2955 y(Subsequen)m(tly)-8
-b(,)30 b(y)m(ou)h(can)g(read)f(and)g(write)g(Ob)5 b(jects)31
-b Fx(via)f FG(the)h(Channel.)0 3123 y(This)41 b(analogy)i(is)f(not)h
-(quite)f(p)s(erfect,)j(ho)m(w)m(ev)m(er,)h(b)s(ecause)c(a)g(Channel)f
-(has,)k(in)d(principle,)i(t)m(w)m(o)g(\\\014les")0 3236
-y(attac)m(hed)37 b(to)e(it.)54 b(One)34 b(is)h(used)f(when)g(reading,)i
-(and)e(the)h(other)g(when)e(writing.)54 b(These)35 b(are)g(termed)f
-(the)0 3349 y(Channel's)29 b Fx(sour)-5 b(c)g(e)32 b
-FG(and)d Fx(sink)h FG(resp)s(ectiv)m(ely)-8 b(.)43 b(In)29
-b(practice,)j(the)e(source)h(and)e(sink)h(ma)m(y)h(b)s(oth)e(b)s(e)g
-(the)i(same,)0 3462 y(in)f(whic)m(h)h(case)g(the)g(analogy)h(with)f
-(the)f(F)-8 b(ortran)32 b(I/O)e(unit)g(is)h(correct,)h(but)e(this)h
-(need)f(not)h(alw)m(a)m(ys)h(b)s(e)e(so.)0 3575 y(It)g(is)h(not)g
-(necessarily)g(so)f(with)g(the)h(basic)g(Channel,)f(as)g(w)m(e)h(will)g
-(no)m(w)f(see)h(\()p Fu(x)p FG(15.2\).)0 3885 y Fw(15.2)112
-b(Creating)38 b(a)g(Channel)0 4114 y FG(The)25 b(pro)s(cess)h(of)g
-(creating)i(a)e(Channel)f(is)h(straigh)m(tforw)m(ard.)40
-b(As)26 b(y)m(ou)h(migh)m(t)f(exp)s(ect,)i(it)e(uses)g(the)g(construc-)
-0 4227 y(tor)31 b(function)f(AST)p Fy(_)p FG(CHANNEL:)262
-4492 y Ft(INCLUDE)40 b('AST_PAR')262 4592 y(INTEGER)g(CHANNEL,)g
-(STATUS)262 4791 y(STATUS)h(=)i(0)262 4990 y(...)262
-5189 y(CHANNEL)d(=)j(AST_CHANNEL\()c(AST_NULL,)h(AST_NULL,)g(')j(',)g
-(STATUS)e(\))0 5467 y FG(The)j(\014rst)g(t)m(w)m(o)h(argumen)m(ts)g(to)
-g(AST)p Fy(_)p FG(CHANNEL)f(sp)s(ecify)g(the)h(external)g(source)f(and)
-g(sink)g(that)h(the)0 5580 y(Channel)30 b(is)h(to)g(use.)42
-b(There)30 b(argumen)m(ts)h(are)g(the)g(names)g(of)g(F)-8
-b(ortran)31 b(subroutines)e(and)i(w)m(e)g(will)g(examine)0
-5693 y(their)f(use)g(in)h(more)f(detail)i(later)f(\()p
-Fu(x)p FG(15.13)i(and)d Fu(x)p FG(15.14\).)p eop end
-%%Page: 128 138
-TeXDict begin 128 137 bop 0 52 a FG(128)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(In)36 b(this)h(v)m(ery)h(simple)e(example)i(w)m(e)g(ha)m(v)m
-(e)g(supplied)e(the)h(name)g(of)g(the)g(n)m(ull)g(routine)g(AST)p
-Fy(_)p FG(NULL)3560 318 y Fv(22)3671 351 y FG(for)0 464
-y(b)s(oth)43 b(the)h(source)g(and)f(sink)g(routines.)81
-b(This)43 b(requests)h(the)g(default)g(b)s(eha)m(viour,)j(whic)m(h)c
-(means)h(that)0 577 y(textual)28 b(input)e(will)i(b)s(e)e(read)h(from)g
-(the)g(program's)g(standard)f(input)g(stream)i(\(t)m(ypically)-8
-b(,)31 b(this)c(means)g(y)m(our)0 690 y(k)m(eyb)s(oard\))34
-b(while)f(textual)i(output)f(will)g(go)g(to)h(the)e(standard)g(output)g
-(stream)h(\(t)m(ypically)i(app)s(earing)e(on)0 803 y(y)m(our)g
-(screen\).)52 b(On)33 b(UNIX)i(systems,)g(of)f(course,)h(either)g(of)f
-(these)g(streams)h(can)f(easily)h(b)s(e)e(redirected)i(to)0
-916 y(\014les.)0 1225 y Fw(15.3)112 b(W)-9 b(riting)37
-b(Ob)6 b(jects)38 b(to)f(a)h(Channel)0 1453 y FG(The)d(pro)s(cess)g(of)
-g(sa)m(ving)i(Ob)5 b(jects)35 b(is)g(v)m(ery)h(straigh)m(tforw)m(ard.)
-57 b(Y)-8 b(ou)36 b(can)f(simply)g(write)h(an)m(y)f(Ob)5
-b(ject)36 b(to)g(a)0 1566 y(Channel)30 b(using)f(the)i(AST)p
-Fy(_)p FG(WRITE)e(function,)h(as)h(follo)m(ws:)262 1829
-y Ft(INTEGER)40 b(NOBJ,)i(OBJECT)262 2028 y(...)262 2227
-y(NOBJ)f(=)j(AST_WRITE\()39 b(CHANNEL,)h(OBJECT,)h(STATUS)g(\))0
-2503 y FG(The)33 b(e\013ect)i(of)f(this)f(will)h(b)s(e)e(to)j(pro)s
-(duce)d(a)i(textual)g(description)g(of)g(the)f(Ob)5 b(ject)34
-b(whic)m(h)f(will)h(app)s(ear,)g(b)m(y)0 2616 y(default,)c(on)e(y)m
-(our)h(program's)g(standard)f(output)g(stream.)41 b(An)m(y)29
-b(class)g(of)g(Ob)5 b(ject)29 b(ma)m(y)h(b)s(e)e(con)m(v)m(erted)i(in)m
-(to)0 2729 y(text)h(in)f(this)h(w)m(a)m(y)-8 b(.)0 2896
-y(AST)p Fy(_)p FG(WRITE)41 b(returns)g(a)h(coun)m(t)h(of)f(the)h(n)m
-(um)m(b)s(er)d(of)j(Ob)5 b(jects)42 b(written.)76 b(Usually)-8
-b(,)46 b(this)c(will)g(b)s(e)g(one,)0 3009 y(unless)c(the)h(Ob)5
-b(ject)39 b(supplied)e(cannot)j(b)s(e)e(represen)m(ted.)66
-b(With)39 b(a)g(basic)h(Channel)e(all)h(Ob)5 b(jects)39
-b(can)g(b)s(e)0 3122 y(represen)m(ted,)c(so)e(a)h(v)-5
-b(alue)35 b(of)e(one)h(will)g(alw)m(a)m(ys)h(b)s(e)e(returned)g(unless)
-g(there)h(has)f(b)s(een)g(an)g(error.)50 b(W)-8 b(e)35
-b(will)0 3235 y(see)c(later,)h(ho)m(w)m(ev)m(er,)h(that)e(more)g(sp)s
-(ecialised)g(forms)f(of)h(Channel)f(ma)m(y)h(imp)s(ose)f(restrictions)i
-(on)e(the)h(kind)0 3348 y(of)h(Ob)5 b(ject)32 b(y)m(ou)g(can)g(write)f
-(\()p Fu(x)p FG(17.2\).)48 b(In)31 b(suc)m(h)g(cases,)i(AST)p
-Fy(_)p FG(WRITE)d(ma)m(y)j(return)d(zero)j(to)f(indicate)h(that)0
-3461 y(the)e(Ob)5 b(ject)30 b(w)m(as)h(not)f(acceptable.)0
-3770 y Fw(15.4)112 b(Reading)39 b(Ob)6 b(jects)38 b(from)f(a)h(Channel)
-0 3998 y FG(Before)31 b(discussing)f(the)h(format)g(of)f(the)h(output)f
-(pro)s(duced)f(ab)s(o)m(v)m(e)j(\()p Fu(x)p FG(15.3\),)h(let)f(us)d
-(consider)i(ho)m(w)f(to)i(read)0 4111 y(it)40 b(bac)m(k,)i(so)d(as)h
-(to)g(reconstruct)f(the)g(original)i(Ob)5 b(ject.)67
-b(Naturally)-8 b(,)43 b(w)m(e)c(w)m(ould)g(\014rst)g(need)g(to)h(sa)m
-(v)m(e)g(the)0 4224 y(output)30 b(in)h(a)g(\014le.)41
-b(On)30 b(UNIX)h(systems,)g(w)m(e)g(can)g(do)g(that)g(simply)g(b)m(y)f
-(redirecting)h(standard)f(output)h(to)g(a)0 4337 y(\014le)f(using)g(a)h
-(shell)g(command)f(lik)m(e:)227 4599 y Ft(program1)41
-b(>file)0 4876 y FG(Within)30 b(a)g(subsequen)m(t)f(program,)h(w)m(e)g
-(can)g(read)g(this)f(Ob)5 b(ject)30 b(bac)m(k)h(in)e(b)m(y)h(using)f
-(the)h(AST)p Fy(_)p FG(READ)f(func-)0 4988 y(tion,)i(ha)m(ving)g
-(\014rst)f(created)h(a)g(suitable)g(Channel:)262 5251
-y Ft(OBJECT)41 b(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))p
-0 5334 1512 4 v 73 5387 a Fs(22)138 5419 y Fr(Note)20
-b(that)f(AST)p Ff(_)p Fr(NULL)g(\(one)h(underscore\))f(is)i(a)f
-(routine)f(name)h(and)g(is)g(distinct)g(from)g(AST)p
-Ff(__)p Fr(NULL)f(\(t)n(w)n(o)h(underscores\))0 5510
-y(whic)n(h)f(is)h(a)g(n)n(ull)f(Ob)t(ject)h(p)r(oin)n(ter.)32
-b(Since)19 b(w)n(e)h(are)g(passing)g(the)f(name)h(of)g(one)f(routine)h
-(to)f(another)h(routine,)h(AST)p Ff(_)p Fr(NULL)d(w)n(ould)0
-5602 y(normally)27 b(ha)n(v)n(e)e(to)i(app)r(ear)f(in)g(a)g(F)-6
-b(ortran)27 b(EXTERNAL)e(statemen)n(t.)36 b(In)25 b(this)h(example,)h
-(ho)n(w)n(ev)n(er,)g(a)f(suitable)h(statemen)n(t)f(is)0
-5693 y(already)g(presen)n(t)f(in)h(the)f(AST)p Ff(_)p
-Fr(P)-6 b(AR)25 b(include)g(\014le.)p eop end
-%%Page: 129 139
-TeXDict begin 129 138 bop 0 52 a Fz(15.5)93 b(Sa)m(ving)30
-b(and)g(Restoring)h(Multiple)g(Ob)5 b(jects)1838 b FG(129)0
-351 y(By)25 b(default,)i(this)e(function)g(will)h(read)f(from)f(the)i
-(standard)e(input)g(stream)i(\(the)g(default)f(source)h(for)e(a)i
-(basic)0 464 y(Channel\),)32 b(so)g(w)m(e)g(w)m(ould)g(need)g(to)g
-(ensure)f(that)i(our)e(second)h(program)g(reads)f(its)i(input)d(from)i
-(the)g(\014le)g(in)0 577 y(whic)m(h)25 b(the)h(Ob)5 b(ject)26
-b(description)f(is)h(stored.)39 b(On)24 b(UNIX)i(systems,)h(w)m(e)f
-(could)f(again)i(use)e(a)h(shell)g(redirection)0 690
-y(command)k(suc)m(h)g(as:)227 930 y Ft(program2)41 b(<file)0
-1219 y Fw(15.5)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)0 1438 y FG(I/O)27 b(op)s(erations)h(p)s(erformed)d(on)i(a)h
-(basic)g(Channel)e(are)i(sequen)m(tial.)41 b(This)26
-b(means)h(that)h(if)f(y)m(ou)h(write)f(more)0 1551 y(than)h(one)h(Ob)5
-b(ject)28 b(to)h(a)g(Channel,)f(eac)m(h)h(new)f(Ob)5
-b(ject's)29 b(textual)g(description)g(is)f(simply)g(app)s(ended)e(to)j
-(the)0 1664 y(previous)38 b(one.)64 b(Y)-8 b(ou)39 b(can)g(store)g(an)m
-(y)f(n)m(um)m(b)s(er)f(of)i(Ob)5 b(jects)38 b(in)g(this)g(w)m(a)m(y)-8
-b(,)42 b(sub)5 b(ject)38 b(only)g(to)h(the)g(storage)0
-1777 y(space)31 b(y)m(ou)g(ha)m(v)m(e)g(a)m(v)-5 b(ailable.)0
-1937 y(After)36 b(y)m(ou)g(read)f(an)g(Ob)5 b(ject)36
-b(bac)m(k)g(from)f(a)h(basic)g(Channel,)g(the)g(Channel)e(is)i(\\p)s
-(ositioned")g(at)g(the)g(end)0 2050 y(of)e(that)g(Ob)5
-b(ject's)34 b(textual)g(description.)51 b(If)33 b(y)m(ou)h(then)f(p)s
-(erform)f(another)i(read,)g(y)m(ou)g(will)g(read)g(the)f(next)0
-2163 y(Ob)5 b(ject's)38 b(textual)g(description)g(and)f(therefore)h
-(retriev)m(e)g(the)g(next)g(Ob)5 b(ject.)62 b(This)36
-b(pro)s(cess)h(ma)m(y)h(b)s(e)f(re-)0 2276 y(p)s(eated)32
-b(to)g(read)f(eac)m(h)i(Ob)5 b(ject)32 b(in)f(turn.)43
-b(When)31 b(there)h(are)g(no)g(more)f(Ob)5 b(jects)32
-b(to)g(b)s(e)f(read,)h(AST)p Fy(_)p FG(READ)0 2389 y(will)f(return)e
-(the)i(v)-5 b(alue)30 b(AST)p Fy(__)p FG(NULL)g(to)h(indicate)g(an)f
-Fx(end-of-\014le.)0 2679 y Fw(15.6)112 b(V)-9 b(alidating)39
-b(Input)0 2898 y FG(The)32 b(p)s(oin)m(ter)h(returned)e(b)m(y)h(AST)p
-Fy(_)p FG(READ)g(\()p Fu(x)p FG(15.4\))j(could)e(iden)m(tify)g(an)m(y)g
-(class)g(of)g(Ob)5 b(ject|this)32 b(is)h(deter-)0 3011
-y(mined)23 b(en)m(tirely)h(b)m(y)g(the)f(external)i(data)f(b)s(eing)f
-(read.)38 b(If)23 b(it)h(is)g(necessary)g(to)g(test)g(for)g(a)f
-(particular)h(class)g(\(sa)m(y)0 3124 y(a)i(F)-8 b(rame\),)27
-b(this)e(ma)m(y)h(b)s(e)f(done)g(as)g(follo)m(ws)h(using)f(the)g
-(appropriate)h(mem)m(b)s(er)e(of)h(the)h(AST)p Fy(_)p
-FG(ISA)p Fp(<)p FG(CLASS)p Fp(>)0 3237 y FG(family)31
-b(of)f(functions:)262 3476 y Ft(LOGICAL)40 b(OK)262 3675
-y(...)262 3875 y(OK)i(=)h(AST_ISAFRAME\()c(OBJECT,)h(STATUS)h(\))0
-4127 y FG(Note,)33 b(ho)m(w)m(ev)m(er,)f(that)g(this)f(will)g(accept)h
-(an)m(y)g(F)-8 b(rame,)32 b(so)f(w)m(ould)g(b)s(e)f(equally)i(happ)m(y)
-e(with)h(a)g(basic)h(F)-8 b(rame)0 4240 y(or)30 b(a)f(SkyF)-8
-b(rame.)41 b(An)30 b(alternativ)m(e)i(v)-5 b(alidation)30
-b(strategy)h(w)m(ould)f(b)s(e)f(to)h(obtain)g(the)g(v)-5
-b(alue)30 b(of)f(the)h(Ob)5 b(ject's)0 4353 y(Class)30
-b(attribute)h(and)f(then)g(test)i(this)e(c)m(haracter)i(string,)e(as)h
-(follo)m(ws:)262 4593 y Ft(OK)42 b(=)h(AST_GETC\()d(OBJECT,)h('Class',)
-f(STATUS)h(\))j(.EQ.)d('Frame')0 4845 y FG(This)30 b(w)m(ould)g(only)g
-(accept)i(a)f(basic)g(F)-8 b(rame)31 b(and)f(w)m(ould)g(reject)h(a)g
-(SkyF)-8 b(rame.)0 5135 y Fw(15.7)112 b(Storing)38 b(an)g(ID)f(String)g
-(with)h(an)g(Ob)6 b(ject)0 5354 y FG(Occasionally)-8
-b(,)33 b(y)m(ou)e(ma)m(y)g(w)m(an)m(t)h(to)f(store)g(a)g(n)m(um)m(b)s
-(er)f(of)g(Ob)5 b(jects)31 b(and)f(later)h(retriev)m(e)h(them)f(and)f
-(use)g(eac)m(h)0 5467 y(for)g(a)g(di\013eren)m(t)g(purp)s(ose.)39
-b(If)29 b(the)h(Ob)5 b(jects)30 b(are)g(of)g(the)g(same)h(class,)g(y)m
-(ou)f(cannot)g(use)g(the)g(Class)g(attribute)0 5580 y(to)39
-b(distinguish)e(them)g(when)g(y)m(ou)h(read)g(them)g(bac)m(k)h(\()p
-Fx(c.f.)e Fu(x)p FG(15.6\).)65 b(Although)38 b(relying)h(on)e(the)h
-(order)g(in)0 5693 y(whic)m(h)e(they)g(are)h(stored)g(is)f(a)h(p)s
-(ossible)e(solution,)k(this)d(b)s(ecomes)h(complicated)h(if)e(some)h
-(of)f(the)g(Ob)5 b(jects)p eop end
-%%Page: 130 140
-TeXDict begin 130 139 bop 0 52 a FG(130)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(are)e(optional)h(and)e(ma)m(y)i(not)f(alw)m(a)m(ys)h(b)s(e)e
-(presen)m(t.)40 b(It)27 b(also)h(mak)m(es)f(extending)g(y)m(our)g(data)
-h(format)f(in)f(future)0 464 y(more)31 b(di\016cult.)0
-626 y(T)-8 b(o)30 b(help)f(with)f(this,)i(ev)m(ery)g(AST)f(Ob)5
-b(ject)29 b(has)g(an)g(ID)g(attribute)h(and)f(an)g(Iden)m(t)g
-(attribute,)i(b)s(oth)d(of)i(whic)m(h)0 739 y(allo)m(ws)e(y)m(ou,)f(in)
-f(e\013ect,)j(to)e(attac)m(h)h(a)f(textual)g(iden)m(ti\014cation)h(lab)
-s(el)f(to)g(it.)40 b(Y)-8 b(ou)27 b(simply)e(set)i(the)g(ID)f(or)g
-(Iden)m(t)0 852 y(attribute)31 b(b)s(efore)f(writing)g(the)h(Ob)5
-b(ject:)262 1099 y Ft(CALL)41 b(AST_SET\()g(OBJECT,)f
-('ID=Calibration',)d(STATUS)k(\))262 1199 y(NOBJ)g(=)j(AST_WRITE\()39
-b(CHANNEL,)h(OBJECT,)h(STATUS)g(\))0 1460 y FG(Y)-8 b(ou)31
-b(can)g(then)f(test)h(its)g(v)-5 b(alue)30 b(after)h(y)m(ou)g(read)f
-(the)h(Ob)5 b(ject)30 b(bac)m(k:)262 1707 y Ft(OBJECT)41
-b(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))262 1806 y(IF)h(\()h
-(AST_GETC\()d(OBJECT,)h('ID',)h(STATUS)f(\))i(.EQ.)f('Calibration')c
-(\))43 b(THEN)392 1906 y(<the)f(Calibration)d(Object)i(has)i(been)f
-(read>)262 2006 y(ELSE)392 2105 y(<some)g(other)f(Object)g(has)i(been)f
-(read>)262 2205 y(END)g(IF)0 2465 y FG(The)30 b(only)h(di\013erence)g
-(b)s(et)m(w)m(een)h(the)f(ID)g(and)f(Iden)m(t)h(attributes)g(is)g(that)
-g(the)g(ID)g(attribute)h(is)f(unique)f(to)h(a)0 2578
-y(particular)22 b(Ob)5 b(ject)23 b(and)e(is)h(lost)h(if,)h(for)e
-(example,)j(y)m(ou)d(mak)m(e)h(a)g(cop)m(y)g(of)f(the)g(Ob)5
-b(ject.)39 b(The)21 b(Iden)m(t)h(attrubute,)0 2691 y(on)34
-b(the)g(other)g(hand,)g(is)g(transferred)f(to)i(the)f(new)f(Ob)5
-b(ject)34 b(when)f(a)h(cop)m(y)h(is)f(made.)51 b(Consequen)m(tly)-8
-b(,)36 b(it)e(is)0 2804 y(safest)d(to)g(set)g(the)g(v)-5
-b(alue)30 b(of)h(the)g(ID)f(attribute)h(immediately)h(b)s(efore)e(y)m
-(ou)h(p)s(erform)e(the)h(write.)0 3097 y Fw(15.8)112
-b(The)38 b(T)-9 b(extual)38 b(Output)f(F)-9 b(ormat)0
-3318 y FG(Let)30 b(us)f(no)m(w)g(examine)i(the)e(format)h(of)g(the)g
-(textual)h(output)e(pro)s(duced)f(b)m(y)h(writing)h(an)f(Ob)5
-b(ject)30 b(to)g(a)g(basic)0 3430 y(Channel)35 b(\()p
-Fu(x)p FG(15.3\).)60 b(T)-8 b(o)37 b(giv)m(e)g(a)g(concrete)g(example,)
-i(supp)s(ose)34 b(the)i(Ob)5 b(ject)36 b(in)g(question)g(is)g(a)h(SkyF)
--8 b(rame,)0 3543 y(written)30 b(out)h(as)g(follo)m(ws:)262
-3791 y Ft(INTEGER)40 b(SKYFRAME)262 3990 y(...)262 4189
-y(NOBJ)h(=)j(AST_WRITE\()39 b(CHANNEL,)h(SKYFRAME,)g(STATUS)h(\))0
-4450 y FG(The)30 b(output)g(should)f(then)h(lo)s(ok)h(lik)m(e)h(the)f
-(follo)m(wing:)271 4697 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-4796 y(#)131 b(Title)41 b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43
-b(E-terms,)d(Mean)i(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84
-b(#)43 b(Title)e(of)i(coordinate)d(system)402 4896 y(Naxes)h(=)i(2)87
-b(#)43 b(Number)e(of)i(coordinate)d(axes)227 4996 y(#)131
-b(Domain)41 b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-5095 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 5195 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)227
-5295 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82 b(#)43 b(Units)f(for)g
-(axis)g(1)227 5394 y(#)131 b(Uni2)42 b(=)h("ddd:mm:ss")82
-b(#)44 b(Units)d(for)h(axis)g(2)227 5494 y(#)131 b(Dir1)42
-b(=)h(0)86 b(#)44 b(Plot)e(axis)g(1)h(in)f(reverse)f(direction)f
-(\(hint\))402 5593 y(Ax1)i(=)87 b(#)43 b(Axis)f(number)f(1)532
-5693 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)p
-eop end
-%%Page: 131 141
-TeXDict begin 131 140 bop 0 52 a Fz(15.8)93 b(The)29
-b(T)-8 b(extual)32 b(Output)d(F)-8 b(ormat)2259 b FG(131)532
-351 y Ft(End)43 b(SkyAxis)402 451 y(Ax2)f(=)87 b(#)43
-b(Axis)f(number)f(2)532 551 y(Begin)h(SkyAxis)84 b(#)43
-b(Celestial)d(coordinate)g(axis)532 650 y(End)j(SkyAxis)271
-750 y(IsA)f(Frame)85 b(#)43 b(Coordinate)d(system)h(description)402
-849 y(System)g(=)i("FK4-NO-E")83 b(#)43 b(Celestial)d(coordinate)f
-(system)j(type)402 949 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d
-(epoch)h(of)i(observation)227 1049 y(#)131 b(Eqnox)41
-b(=)i(1950)86 b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)271
-1148 y(End)g(SkyFrame)0 1391 y FG(Y)-8 b(ou)36 b(will)f(notice)i(that)f
-(this)f(output)g(is)g(designed)g(b)s(oth)g(for)g(a)h(h)m(uman)e
-(reader,)j(in)e(that)g(it)h(is)g(formatted,)0 1504 y(and)d(also)h(to)g
-(b)s(e)f(read)g(bac)m(k)h(b)m(y)f(a)h(computer)f(in)g(order)g(to)h
-(reconstruct)g(the)f(SkyF)-8 b(rame.)50 b(In)33 b(fact,)i(this)e(is)0
-1617 y(precisely)i(the)f(w)m(a)m(y)h(that)g(AST)p Fy(_)p
-FG(SHO)m(W)e(w)m(orks)h(\()p Fu(x)p FG(4.4\),)k(this)c(routine)g(b)s
-(eing)g(roughly)g(equiv)-5 b(alen)m(t)35 b(to)g(the)0
-1729 y(follo)m(wing)d(use)e(of)g(a)h(Channel:)262 1959
-y Ft(CHANNEL)40 b(=)j(AST_CHANNEL\()c(AST_NULL,)h(AST_NULL,)g(')j(',)g
-(STATUS)e(\))262 2058 y(NOBJ)g(=)j(AST_WRITE\()39 b(CHANNEL,)h(OBJECT,)
-h(STATUS)g(\))262 2158 y(CALL)g(AST_ANNUL\()f(CHANNEL,)g(STATUS)h(\))0
-2400 y FG(Some)34 b(lines)f(of)h(the)g(output)f(start)h(with)f(a)h(\\)p
-Fy(#)p FG(")g(commen)m(t)h(c)m(haracter,)h(whic)m(h)d(turns)f(the)i
-(rest)g(of)f(the)h(line)0 2513 y(in)m(to)d(a)f(commen)m(t.)41
-b(These)29 b(lines)h(will)g(b)s(e)f(ignored)h(when)f(read)g(bac)m(k)h
-(in)g(b)m(y)f(AST)p Fy(_)p FG(READ.)h(They)f(t)m(ypically)0
-2626 y(con)m(tain)k(default)f(v)-5 b(alues,)33 b(or)f(v)-5
-b(alues)32 b(that)g(can)h(b)s(e)e(deriv)m(ed)h(in)f(some)h(w)m(a)m(y)h
-(from)f(the)g(other)g(data)g(presen)m(t,)0 2739 y(so)c(that)g(they)g
-(do)g(not)f(actually)j(need)d(to)i(b)s(e)e(stored)g(in)h(order)f(to)h
-(reconstruct)g(the)g(original)h(Ob)5 b(ject.)40 b(They)0
-2852 y(are)25 b(pro)m(vided)f(purely)f(for)h(h)m(uman)g(information.)39
-b(The)24 b(same)g(commen)m(t)i(c)m(haracter)g(is)e(also)h(used)f(to)h
-(app)s(end)0 2965 y(explanatory)31 b(commen)m(ts)h(to)f(most)f(output)g
-(lines.)0 3123 y(It)36 b(is)f(not)h(sensible)f(to)h(attempt)h(a)e
-(complete)i(description)f(of)f(this)g(output)g(format)h(b)s(ecause)g
-(ev)m(ery)g(class)0 3236 y(of)e(Ob)5 b(ject)34 b(is)g(p)s(oten)m
-(tially)i(di\013eren)m(t)f(and)e(eac)m(h)i(can)f(de\014ne)g(ho)m(w)g
-(its)g(o)m(wn)g(data)h(should)e(b)s(e)g(represen)m(ted.)0
-3348 y(Ho)m(w)m(ev)m(er,)27 b(there)d(are)g(some)g(basic)g(rules,)g
-(whic)m(h)g(mean)f(that)h(the)g(follo)m(wing)h(common)f(features)g
-(will)g(usually)0 3461 y(b)s(e)30 b(presen)m(t:)111 3704
-y(1.)46 b(Eac)m(h)37 b(Ob)5 b(ject)36 b(is)g(delimited)g(b)m(y)g(matc)m
-(hing)h(\\Begin")g(and)f(\\End")f(lines,)j(whic)m(h)d(also)i(iden)m
-(tify)f(the)227 3817 y(class)31 b(of)g(Ob)5 b(ject)30
-b(in)m(v)m(olv)m(ed.)111 3999 y(2.)46 b(Within)22 b(eac)m(h)i(Ob)5
-b(ject)22 b(description,)i(data)e(v)-5 b(alues)23 b(are)f(represen)m
-(ted)g(b)m(y)g(a)g(simple)g(\\k)m(eyw)m(ord)h(=)f(v)-5
-b(alue")227 4112 y(syn)m(tax,)31 b(with)g(one)f(v)-5
-b(alue)31 b(to)g(a)g(line.)111 4295 y(3.)46 b(Lines)30
-b(b)s(eginning)f(\\IsA")i(are)f(used)f(to)i(mark)f(the)g(divisions)g(b)
-s(et)m(w)m(een)g(data)h(b)s(elonging)f(to)h(di\013eren)m(t)227
-4408 y(lev)m(els)41 b(in)e(the)g(class)h(hierarc)m(h)m(y)g(\(App)s
-(endix)e(A\).)67 b(Th)m(us,)41 b(\\IsA)e(F)-8 b(rame")41
-b(marks)e(the)g(end)f(of)i(data)227 4521 y(asso)s(ciated)34
-b(with)f(the)g(F)-8 b(rame)33 b(class)h(and)e(the)h(start)g(of)g(data)g
-(asso)s(ciated)h(with)f(some)g(deriv)m(ed)g(class)227
-4634 y(\(a)d(SkyF)-8 b(rame)29 b(in)g(the)g(ab)s(o)m(v)m(e)h
-(example\).)41 b(\\IsA")30 b(lines)f(ma)m(y)g(b)s(e)f(omitted)i(if)f
-(asso)s(ciated)i(data)e(v)-5 b(alues)227 4747 y(are)31
-b(absen)m(t)g(and)f(no)g(confusion)g(arises.)111 4929
-y(4.)46 b(Ob)5 b(jects)27 b(ma)m(y)g(con)m(tain)h(other)e(Ob)5
-b(jects)27 b(as)g(data.)40 b(This)26 b(is)g(indicated)h(b)m(y)g(an)f
-(absen)m(t)h(v)-5 b(alue,)28 b(with)e(the)227 5042 y(description)31
-b(of)f(the)h(data)g(Ob)5 b(ject)30 b(follo)m(wing)i(on)e(subsequen)m(t)
-g(lines.)111 5225 y(5.)46 b(Inden)m(tation)31 b(is)g(used)e(to)i
-(clarify)g(the)g(o)m(v)m(erall)i(structure.)0 5467 y(Bey)m(ond)j(these)
-g(general)g(principles,)h(the)f(b)s(est)f(guide)g(to)h(what)g(a)f
-(particular)h(line)g(of)g(output)f(represen)m(ts)0 5580
-y(will)f(generally)h(b)s(e)e(the)h(commen)m(t)h(whic)m(h)f(accompanies)
-h(it)g(together)g(with)e(a)i(general)f(kno)m(wledge)h(of)f(the)0
-5693 y(class)d(of)g(Ob)5 b(ject)30 b(b)s(eing)g(describ)s(ed.)p
-eop end
-%%Page: 132 142
-TeXDict begin 132 141 bop 0 52 a FG(132)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y Fw(15.9)112 b(Con)m(trolling)38 b(the)f(Amoun)m(t)h(of)f(Output)0
-572 y FG(It)c(is)g(not)g(alw)m(a)m(ys)h(necessary)f(for)g(the)g(output)
-f(from)g(AST)p Fy(_)p FG(WRITE)g(\()p Fu(x)p FG(15.3\))j(to)e(b)s(e)g
-(h)m(uman-readable,)g(so)0 685 y(a)e(Channel)e(has)h(attributes)h(that)
-g(allo)m(w)h(the)f(amoun)m(t)g(of)f(detail)i(in)e(the)g(output)g(to)h
-(b)s(e)f(con)m(trolled.)0 848 y(The)41 b(\014rst)g(of)h(these)g(is)g
-(the)f(in)m(teger)i(attribute)g(F)-8 b(ull,)45 b(whic)m(h)d(con)m
-(trols)g(the)g(exten)m(t)h(to)g(whic)m(h)e(optional,)0
-961 y(commen)m(ted)g(out,)j(output)c(lines)h(are)g(pro)s(duced.)69
-b(By)41 b(default,)j(F)-8 b(ull)41 b(is)f(zero,)k(and)c(this)h(results)
-f(in)g(the)0 1074 y(standard)21 b(st)m(yle)i(of)e(output)g(\()p
-Fu(x)p FG(15.8\))k(where)c(default)g(v)-5 b(alues)22
-b(that)g(ma)m(y)h(b)s(e)d(helpful)h(to)h(h)m(umans)f(are)h(included.)0
-1186 y(T)-8 b(o)28 b(suppress)e(these)j(optional)g(lines,)f(F)-8
-b(ull)29 b(should)e(b)s(e)g(set)i(to)f Fu(\000)p FG(1.)40
-b(This)27 b(is)h(most)h(con)m(v)m(enien)m(tly)h(done)d(when)0
-1299 y(the)k(Channel)e(is)i(created,)g(so)g(that:)262
-1547 y Ft(CHANNEL)40 b(=)j(AST_CHANNEL\()c(AST_NULL,)h(AST_NULL,)g
-('Full=-1',)f(STATUS)i(\))262 1647 y(NOBJ)g(=)j(AST_WRITE\()39
-b(CHANNEL,)h(SKYFRAME,)g(STATUS)h(\))262 1746 y(CALL)g(AST_ANNUL\()f
-(CHANNEL,)g(STATUS)h(\))0 2007 y FG(w)m(ould)30 b(result)g(in)g(output)
-g(con)m(taining)i(only)f(the)f(essen)m(tial)j(information,)e(suc)m(h)f
-(as:)271 2255 y Ft(Begin)41 b(SkyFrame)84 b(#)43 b(Description)c(of)k
-(celestial)d(coordinate)g(system)402 2355 y(Naxes)h(=)i(2)87
-b(#)43 b(Number)e(of)i(coordinate)d(axes)402 2454 y(Ax1)i(=)87
-b(#)43 b(Axis)f(number)f(1)532 2554 y(Begin)h(SkyAxis)84
-b(#)43 b(Celestial)d(coordinate)g(axis)532 2654 y(End)j(SkyAxis)402
-2753 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)532 2853
-y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)532
-2953 y(End)j(SkyAxis)271 3052 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 3152 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-3251 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)271 3351 y(End)f(SkyFrame)0 3612 y FG(In)30
-b(con)m(trast,)j(setting)f(F)-8 b(ull)31 b(to)h(+1)f(will)g(result)f
-(in)h(additional)h(output)e(lines)h(whic)m(h)g(will)g(rev)m(eal)h(ev)m
-(ery)g(last)0 3725 y(detail)38 b(of)g(the)f(Ob)5 b(ject's)37
-b(construction.)62 b(Often)37 b(this)g(will)g(b)s(e)g(rather)g(more)g
-(than)g(y)m(ou)g(w)m(an)m(t,)j(esp)s(ecially)0 3838 y(for)30
-b(more)g(complex)g(Ob)5 b(jects,)30 b(but)g(it)g(can)g(sometimes)h
-(help)e(when)g(debugging)h(programs.)40 b(This)29 b(is)h(ho)m(w)g(a)0
-3951 y(SkyF)-8 b(rame)31 b(app)s(ears)e(at)i(this)g(lev)m(el)h(of)e
-(detail:)271 4199 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-4298 y(#)131 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)e(of)i(active)e
-(Object)g(pointers)227 4398 y(#)131 b(Nobj)42 b(=)h(1)86
-b(#)44 b(Count)d(of)i(active)e(Objects)g(in)h(same)g(class)271
-4497 y(IsA)g(Object)85 b(#)43 b(Astrometry)d(Object)227
-4597 y(#)131 b(Nin)42 b(=)h(2)87 b(#)43 b(Number)e(of)i(input)e
-(coordinates)227 4697 y(#)131 b(Nout)42 b(=)h(2)86 b(#)44
-b(Number)d(of)i(output)e(coordinates)227 4796 y(#)131
-b(Invert)41 b(=)i(0)87 b(#)43 b(Mapping)e(not)h(inverted)227
-4896 y(#)131 b(Fwd)42 b(=)h(1)87 b(#)43 b(Forward)e(transformation)d
-(defined)227 4996 y(#)131 b(Inv)42 b(=)h(1)87 b(#)43
-b(Inverse)e(transformation)d(defined)227 5095 y(#)131
-b(Report)41 b(=)i(0)87 b(#)43 b(Don't)e(report)g(coordinate)f
-(transformations)271 5195 y(IsA)i(Mapping)84 b(#)44 b(Mapping)c
-(between)h(coordinate)e(systems)227 5295 y(#)131 b(Title)41
-b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43 b(E-terms,)d(Mean)i
-(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84 b(#)43 b(Title)e(of)i
-(coordinate)d(system)402 5394 y(Naxes)h(=)i(2)87 b(#)43
-b(Number)e(of)i(coordinate)d(axes)227 5494 y(#)131 b(Domain)41
-b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-5593 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 5693 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)p eop
-end
-%%Page: 133 143
-TeXDict begin 133 142 bop 0 52 a Fz(15.9)93 b(Con)m(trolling)31
-b(the)g(Amoun)m(t)f(of)h(Output)2005 b FG(133)227 351
-y Ft(#)131 b(Sym1)42 b(=)h("RA")85 b(#)43 b(Symbol)f(for)g(axis)g(1)227
-451 y(#)131 b(Sym2)42 b(=)h("Dec")85 b(#)43 b(Symbol)e(for)h(axis)g(2)
-227 551 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82 b(#)43
-b(Units)f(for)g(axis)g(1)227 650 y(#)131 b(Uni2)42 b(=)h("ddd:mm:ss")82
-b(#)44 b(Units)d(for)h(axis)g(2)227 750 y(#)131 b(Dig1)42
-b(=)h(7)86 b(#)44 b(Individual)39 b(precision)h(for)i(axis)g(1)227
-849 y(#)131 b(Dig2)42 b(=)h(7)86 b(#)44 b(Individual)39
-b(precision)h(for)i(axis)g(2)227 949 y(#)131 b(Digits)41
-b(=)i(7)87 b(#)43 b(Default)e(formatting)e(precision)227
-1049 y(#)131 b(Fmt1)42 b(=)h("hms.1")84 b(#)43 b(Format)e(specifier)f
-(for)i(axis)g(1)227 1148 y(#)131 b(Fmt2)42 b(=)h("dms")85
-b(#)43 b(Format)e(specifier)f(for)i(axis)g(2)227 1248
-y(#)131 b(Dir1)42 b(=)h(0)86 b(#)44 b(Plot)e(axis)g(1)h(in)f(reverse)f
-(direction)f(\(hint\))227 1348 y(#)131 b(Dir2)42 b(=)h(1)86
-b(#)44 b(Plot)e(axis)g(2)h(in)f(conventional)d(direction)h(\(hint\))227
-1447 y(#)131 b(Presrv)41 b(=)i(0)87 b(#)43 b(Don't)e(preserve)g(target)
-g(axes)227 1547 y(#)131 b(Permut)41 b(=)i(1)87 b(#)43
-b(Axes)f(may)g(be)h(permuted)d(to)j(match)227 1646 y(#)131
-b(MinAx)41 b(=)i(2)87 b(#)43 b(Minimum)e(number)g(of)i(axes)f(to)g
-(match)227 1746 y(#)131 b(MaxAx)41 b(=)i(2)87 b(#)43
-b(Maximum)e(number)g(of)i(axes)f(to)g(match)227 1846
-y(#)131 b(MchEnd)41 b(=)i(0)87 b(#)43 b(Match)e(initial)g(target)g
-(axes)227 1945 y(#)131 b(Prm1)42 b(=)h(1)86 b(#)44 b(Axis)e(1)h(not)f
-(permuted)227 2045 y(#)131 b(Prm2)42 b(=)h(2)86 b(#)44
-b(Axis)e(2)h(not)f(permuted)402 2145 y(Ax1)g(=)87 b(#)43
-b(Axis)f(number)f(1)532 2244 y(Begin)h(SkyAxis)84 b(#)43
-b(Celestial)d(coordinate)g(axis)227 2344 y(#)392 b(RefCnt)41
-b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e(Object)g(pointers)227
-2443 y(#)392 b(Nobj)42 b(=)h(2)87 b(#)43 b(Count)f(of)g(active)g
-(Objects)e(in)j(same)f(class)532 2543 y(IsA)h(Object)84
-b(#)44 b(Astrometry)39 b(Object)227 2643 y(#)392 b(Label)42
-b(=)h("Angle)e(on)i(Sky")85 b(#)43 b(Axis)f(Label)227
-2742 y(#)392 b(Symbol)41 b(=)i("delta")85 b(#)43 b(Axis)f(symbol)227
-2842 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83 b(#)43 b(Axis)f(units)227
-2942 y(#)392 b(Digits)41 b(=)i(7)87 b(#)43 b(Default)e(formatting)e
-(precision)227 3041 y(#)392 b(Format)41 b(=)i("dms")86
-b(#)43 b(Format)e(specifier)227 3141 y(#)392 b(Dirn)42
-b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38 b(direction)532
-3240 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-3340 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-3440 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 3539 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-3639 y(End)h(SkyAxis)402 3739 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)
-532 3838 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)
-227 3938 y(#)392 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e
-(Object)g(pointers)227 4037 y(#)392 b(Nobj)42 b(=)h(2)87
-b(#)43 b(Count)f(of)g(active)g(Objects)e(in)j(same)f(class)532
-4137 y(IsA)h(Object)84 b(#)44 b(Astrometry)39 b(Object)227
-4237 y(#)392 b(Label)42 b(=)h("Angle)e(on)i(Sky")85 b(#)43
-b(Axis)f(Label)227 4336 y(#)392 b(Symbol)41 b(=)i("delta")85
-b(#)43 b(Axis)f(symbol)227 4436 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83
-b(#)43 b(Axis)f(units)227 4536 y(#)392 b(Digits)41 b(=)i(7)87
-b(#)43 b(Default)e(formatting)e(precision)227 4635 y(#)392
-b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-4735 y(#)392 b(Dirn)42 b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38
-b(direction)532 4834 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-4934 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-5034 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 5133 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-5233 y(End)h(SkyAxis)271 5333 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 5432 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-5532 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)227 5631 y(#)131 b(Eqnox)41 b(=)i(1950)86
-b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)p eop
-end
-%%Page: 134 144
-TeXDict begin 134 143 bop 0 52 a FG(134)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))271
-351 y Ft(End)42 b(SkyFrame)0 633 y Fw(15.10)112 b(Con)m(trolling)38
-b(Commen)m(ting)0 847 y FG(Another)g(w)m(a)m(y)g(of)g(con)m(trolling)i
-(output)e(from)f(a)h(Channel)f(is)h Fx(via)g FG(the)g(b)s(o)s(olean)f
-(\(in)m(teger\))j(Commen)m(t)e(at-)0 960 y(tribute,)32
-b(whic)m(h)e(con)m(trols)j(whether)e(commen)m(ts)h(are)f(app)s(ended)f
-(to)i(describ)s(e)e(the)i(purp)s(ose)d(of)i(eac)m(h)i(v)-5
-b(alue.)0 1073 y(Commen)m(t)33 b(has)g(the)h(v)-5 b(alue)33
-b(1)h(b)m(y)f(default)g(but,)h(if)f(set)h(to)g(zero,)h(will)e(suppress)
-e(these)j(commen)m(ts.)50 b(This)32 b(is)0 1186 y(normally)f
-(appropriate)f(only)g(if)h(y)m(ou)g(wish)e(to)i(minimise)g(the)f(amoun)
-m(t)h(of)f(output,)h(for)f(example:)262 1404 y Ft(CALL)41
-b(AST_SET\()g(CHANNEL,)f('Full=-1,)g(Comment=0',)f(STATUS)i(\))262
-1504 y(NOBJ)g(=)j(AST_WRITE\()39 b(CHANNEL,)h(SKYFRAME,)g(STATUS)h(\))0
-1735 y FG(migh)m(t)31 b(result)f(in)g(the)h(follo)m(wing)h(more)e
-(compact)i(output:)271 1954 y Ft(Begin)41 b(SkyFrame)402
-2054 y(Naxes)g(=)i(2)402 2153 y(Ax1)f(=)532 2253 y(Begin)g(SkyAxis)532
-2352 y(End)h(SkyAxis)402 2452 y(Ax2)f(=)532 2552 y(Begin)g(SkyAxis)532
-2651 y(End)h(SkyAxis)271 2751 y(IsA)f(Frame)402 2851
-y(System)f(=)i("FK4-NO-E")402 2950 y(Epoch)e(=)i(1958)271
-3050 y(End)f(SkyFrame)0 3332 y Fw(15.11)112 b(Editing)38
-b(T)-9 b(extual)37 b(Output)0 3546 y FG(The)42 b(safest)i(advice)f(ab)s
-(out)g(editing)h(the)f(textual)h(output)e(from)g(AST)p
-Fy(_)p FG(WRITE)g(\(or)h(AST)p Fy(_)p FG(SHO)m(W\))f(is)0
-3658 y(\\don't!"|unless)31 b(y)m(ou)g(kno)m(w)f(what)g(y)m(ou)h(are)g
-(doing.)0 3814 y(Ha)m(ving)36 b(giv)m(en)h(that)e(w)m(arning,)i(ho)m(w)
-m(ev)m(er,)h(it)e(is)f(sometimes)h(p)s(ossible)f(to)h(mak)m(e)g(c)m
-(hanges)g(to)g(the)g(text,)h(or)0 3926 y(ev)m(en)24 b(to)g(write)f(en)m
-(tire)h(Ob)5 b(ject)23 b(descriptions)g(from)g(scratc)m(h,)j(and)c(to)i
-(read)f(the)h(results)f(bac)m(k)g(in)g(to)h(construct)0
-4039 y(new)34 b(Ob)5 b(jects.)52 b(Normally)-8 b(,)37
-b(simple)e(c)m(hanges)g(to)g(n)m(umerical)g(v)-5 b(alues)35
-b(are)f(safest,)j(but)c(b)s(e)h(a)m(w)m(are)i(that)f(this)0
-4152 y(is)j(a)h(bac)m(k)g(do)s(or)e(metho)s(d)h(of)g(creating)i(Ob)5
-b(jects,)40 b(so)e(y)m(ou)h(are)f(on)h(y)m(our)f(o)m(wn!)64
-b(There)37 b(are)i(a)f(n)m(um)m(b)s(er)f(of)0 4265 y(p)s(oten)m(tial)32
-b(pitfalls.)41 b(In)30 b(particular:)136 4497 y Fu(\017)46
-b FG(AST)p Fy(_)p FG(READ)38 b(is)g(in)m(tended)g(for)g(retrieving)i
-(data)e(written)h(b)m(y)f(AST)p Fy(_)p FG(WRITE)f(and)h(not)g(for)g
-(read-)227 4610 y(ing)e(data)h(input)d(b)m(y)i(h)m(umans.)56
-b(As)35 b(suc)m(h,)i(the)f(data)h(v)-5 b(alidation)37
-b(pro)m(vided)e(is)h(v)m(ery)g(limited)g(and)f(is)227
-4723 y(certainly)e(not)f(fo)s(olpro)s(of.)44 b(This)31
-b(mak)m(es)h(it)g(quite)g(easy)g(to)h(construct)f(Ob)5
-b(jects)31 b(that)i(are)e(in)m(ternally)227 4836 y(inconsisten)m(t)37
-b(b)m(y)e(this)h(means.)56 b(In)34 b(con)m(trast,)39
-b(the)c(normal)h(programming)f(in)m(terface)i(incorp)s(orates)227
-4948 y(n)m(umerous)29 b(c)m(hec)m(ks)h(designed)f(to)h(mak)m(e)g(it)g
-(imp)s(ossible)f(to)h(construct)g(in)m(v)-5 b(alid)29
-b(Ob)5 b(jects.)41 b(Y)-8 b(ou)29 b(should)227 5061 y(not)f
-(necessarily)h(think)f(y)m(ou)g(ha)m(v)m(e)h(found)e(a)h(bug)f(if)h(y)m
-(our)g(c)m(hanges)h(to)g(an)e(Ob)5 b(ject's)29 b(textual)g(descrip-)227
-5174 y(tion)i(fail)g(to)g(pro)s(duce)f(the)g(results)g(y)m(ou)h(exp)s
-(ected!)136 5354 y Fu(\017)46 b FG(In)24 b(man)m(y)i(instances)f(the)g
-(names)g(asso)s(ciated)h(with)f(v)-5 b(alues)25 b(in)g(textual)h
-(output)f(will)g(corresp)s(ond)f(with)227 5467 y(Ob)5
-b(ject)31 b(attributes.)43 b(Sometimes,)32 b(ho)m(w)m(ev)m(er,)g(these)
-g(names)e(ma)m(y)i(di\013er)e(from)h(the)g(attribute)g(name.)227
-5580 y(This)f(is)h(mainly)f(b)s(ecause)h(of)g(length)f(restrictions)i
-(imp)s(osed)e(b)m(y)g(other)h(common)g(external)g(formats,)227
-5693 y(suc)m(h)f(as)h(FITS)f(headers.)40 b(Some)30 b(of)h(the)f(names)h
-(used)e(do)i(not)f(corresp)s(ond)f(with)h(attributes)h(at)g(all.)p
-eop end
-%%Page: 135 145
-TeXDict begin 135 144 bop 0 52 a Fz(15.12)93 b(Mixing)31
-b(Ob)5 b(jects)30 b(with)g(other)h(T)-8 b(ext)2075 b
-FG(135)136 351 y Fu(\017)46 b FG(It)39 b(is)g(safest)g(to)g(c)m(hange)h
-(single)f(n)m(umerical)g(or)g(string)f(v)-5 b(alues.)66
-b(Bew)m(are)40 b(of)f(c)m(hanging)g(the)g(size)g(or)227
-464 y(shap)s(e)34 b(of)h(Ob)5 b(jects)35 b(\()p Fx(e.g.)f
-FG(the)h(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(a)h(F)-8
-b(rame\).)55 b(Often,)36 b(these)f(v)-5 b(alues)35 b(m)m(ust)g(matc)m
-(h)227 577 y(others)30 b(stored)g(elsewhere)g(within)f(the)h(Ob)5
-b(ject)30 b(and)f(c)m(hanging)i(them)e(in)h(a)g(haphazard)f(fashion)g
-(will)227 690 y(not)i(pro)s(duce)e(useful)h(results.)136
-883 y Fu(\017)46 b FG(Be)33 b(w)m(ary)g(ab)s(out)f(un-commen)m(ting)h
-(default)f(v)-5 b(alues.)47 b(Sometimes)33 b(this)g(will)f(w)m(ork,)i
-(but)d(often)i(these)227 996 y(v)-5 b(alues)30 b(are)g(deriv)m(ed)g
-(from)f(other)h(Ob)5 b(jects)30 b(stored)f(more)h(deeply)g(in)f(the)h
-(structure)f(and)g(the)h(prop)s(er)227 1109 y(place)i(to)f(insert)f(a)h
-(new)f(v)-5 b(alue)30 b(is)h(not)f(where)g(the)h(default)f(itself)i
-(app)s(ears.)0 1411 y Fw(15.12)112 b(Mixing)39 b(Ob)6
-b(jects)38 b(with)f(other)g(T)-9 b(ext)0 1636 y FG(By)42
-b(default,)j(when)c(y)m(ou)h(use)f(AST)p Fy(_)p FG(READ)g(to)i(read)e
-(from)h(a)g(basic)g(Channel)f(\()p Fu(x)p FG(15.4\),)47
-b(it)42 b(is)g(assumed)0 1749 y(that)d(y)m(ou)f(are)g(reading)g(a)h
-(stream)f(of)g(text)h(con)m(taining)h(only)e(AST)f(Ob)5
-b(jects,)40 b(whic)m(h)e(follo)m(w)h(eac)m(h)g(other)0
-1862 y(end-to-end.)44 b(If)30 b(an)m(y)i(extraneous)g(input)e(data)i
-(are)f(encoun)m(tered)h(whic)m(h)f(do)g(not)h(app)s(ear)e(to)i(form)f
-(part)g(of)0 1975 y(the)f(textual)h(description)e(of)h(an)f(Ob)5
-b(ject,)31 b(then)e(an)g(error)g(will)h(result.)41 b(In)29
-b(particular,)h(the)g(\014rst)e(input)h(line)0 2088 y(m)m(ust)j(iden)m
-(tify)h(the)f(start)h(of)f(an)g(Ob)5 b(ject)33 b(description,)g(so)f(y)
-m(ou)h(cannot)g(start)f(reading)h(half)f(w)m(a)m(y)h(through)0
-2201 y(an)d(Ob)5 b(ject.)0 2366 y(Sometimes,)43 b(ho)m(w)m(ev)m(er,)g
-(y)m(ou)d(ma)m(y)g(w)m(an)m(t)h(to)f(store)g(AST)f(Ob)5
-b(ject)40 b(descriptions)f(in)m(termixed)h(with)f(other)0
-2479 y(textual)e(data.)57 b(Y)-8 b(ou)36 b(can)g(do)f(this)h(b)m(y)f
-(setting)i(the)e(Channel's)g(b)s(o)s(olean)h(\(in)m(teger\))i(Skip)c
-(attribute)j(to)f(1.)0 2592 y(This)g(will)i(cause)f(ev)m(ery)h(read)f
-(to)h(skip)f(o)m(v)m(er)h(extraneous)g(data)f(un)m(til)h(the)f(start)h
-(of)f(a)g(new)g(AST)f(Ob)5 b(ject)0 2705 y(description,)28
-b(if)e(an)m(y)-8 b(,)29 b(is)e(found.)38 b(So)27 b(long)g(as)g(y)m(our)
-g(other)g(data)g(do)g(not)g(mimic)g(the)g(app)s(earance)g(of)g(an)f
-(AST)0 2818 y(Ob)5 b(ject)31 b(description,)f(the)h(t)m(w)m(o)g(sets)g
-(of)g(data)g(can)f(co-exist.)0 2983 y(F)-8 b(or)41 b(example,)i(b)m(y)d
-(setting)h(Skip)e(to)i(1,)i(the)d(follo)m(wing)h(complete)h(F)-8
-b(ortran)40 b(program)g(will)h(read)e(all)i(the)0 3096
-y(AST)27 b(Ob)5 b(jects)27 b(whose)g(descriptions)h(app)s(ear)f(in)g
-(the)g(source)h(of)g(this)f(do)s(cumen)m(t,)h(ignoring)g(the)f(other)h
-(text.)0 3209 y(AST)p Fy(_)p FG(SHO)m(W)i(is)g(used)g(to)h(displa)m(y)f
-(those)h(found:)262 3466 y Ft(INCLUDE)40 b('AST_PAR')262
-3566 y(INTEGER)g(CHANNEL,)g(OBJECT,)h(STATUS)262 3765
-y(STATUS)g(=)i(0)262 3864 y(CHANNEL)d(=)j(AST_CHANNEL\()c(AST_NULL,)h
-(AST_NULL,)g('Skip=1',)g(STATUS)h(\))44 3964 y(1)174
-b(OBJECT)41 b(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))262
-4064 y(IF)h(\()h(OBJECT)f(.NE.)f(AST__NULL)f(\))k(THEN)392
-4163 y(CALL)e(AST_SHOW\()e(OBJECT,)h(STATUS)g(\))392
-4263 y(CALL)h(AST_ANNUL\()e(OBJECT,)g(STATUS)h(\))392
-4363 y(GO)i(TO)g(1)262 4462 y(END)f(IF)262 4562 y(CALL)f(AST_ANNUL\()f
-(CHANNEL,)g(STATUS)h(\))262 4661 y(END)0 4964 y Fw(15.13)112
-b(Reading)39 b(Ob)6 b(jects)38 b(from)g(Files)0 5189
-y FG(Th)m(us)d(far,)i(w)m(e)g(ha)m(v)m(e)g(only)f(considered)g(the)g
-(default)g(b)s(eha)m(viour)g(of)g(a)g(Channel)f(in)h(reading)g(and)f
-(writing)0 5302 y(Ob)5 b(jects)30 b(through)e(a)i(program's)g(standard)
-f(input)f(and)h(output)h(streams.)40 b(W)-8 b(e)31 b(will)f(no)m(w)g
-(consider)f(ho)m(w)h(to)0 5415 y(access)i(Ob)5 b(jects)30
-b(stored)h(in)f(\014les)g(more)g(directly)-8 b(.)0 5580
-y(Because)37 b(the)g(AST)e(library)g(is)i(designed)e(to)i(b)s(e)f(used)
-f(from)g(more)h(than)g(one)h(language,)i(it)d(has)g(to)h(b)s(e)e(a)0
-5693 y(little)g(careful)e(ab)s(out)f(reading)h(and)g(writing)f(to)i
-(\014les.)48 b(This)32 b(is)h(due)f(to)i(the)f(incompatibilities)i
-(that)e(often)p eop end
-%%Page: 136 146
-TeXDict begin 136 145 bop 0 52 a FG(136)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(exist)e(b)s(et)m(w)m(een)g(the)g(\014le)g(I/O)f(facilities)j
-(pro)m(vided)d(b)m(y)g(di\013eren)m(t)h(languages.)41
-b(F)-8 b(ortunately)g(,)30 b(this)c(ties)h(in)f(w)m(ell)0
-464 y(with)31 b(the)g(principle)f(that)i(AST)e(should)g(also)i(b)s(e)e
-(indep)s(enden)m(t)g(of)h(an)m(y)h(particular)f(data)h(storage)g
-(system,)0 577 y(whic)m(h)e(w)m(e)h(men)m(tion)g(again)g(in)f
-Fu(x)p FG(15.15.)0 766 y(What)25 b(this)f(means)g(in)g(practice)i(is)e
-(that)h(y)m(ou)g(m)m(ust)f(pro)m(vide)h(some)f(simple)h(F)-8
-b(ortran)25 b(routines)f(that)h(p)s(erform)0 878 y(the)31
-b(actual)i(transfer)d(of)h(data)h(to)g(and)e(from)h(\014les)g(and)f
-(similar)i(external)g(data)f(stores.)44 b(The)30 b(routines)h(y)m(ou)0
-991 y(pro)m(vide)26 b(are)g(supplied)e(as)i(the)g(source)g(and/or)g
-(sink)f(routine)h(argumen)m(ts)g(to)h(AST)p Fy(_)p FG(CHANNEL)d(when)h
-(y)m(ou)0 1104 y(create)32 b(a)f(Channel)e(\()p Fu(x)p
-FG(15.2\).)44 b(An)30 b(example)h(is)f(the)h(b)s(est)f(w)m(a)m(y)h(to)g
-(illustrate)h(this.)0 1293 y(Consider)g(the)i(follo)m(wing)g(simple)f
-(subroutine)f(called)j(SOUR)m(CE.)d(It)h(reads)g(a)h(single)g(line)f
-(of)g(text)h(from)f(a)0 1406 y(F)-8 b(ortran)28 b(I/O)g(unit)f(and)g
-(then)g(calls)i(AST)p Fy(_)p FG(PUTLINE)d(to)i(pass)f(it)h(to)h(the)f
-(AST)e(library)-8 b(,)29 b(together)g(with)e(its)0 1519
-y(length.)41 b(It)31 b(sets)f(this)h(length)f(to)i(b)s(e)d(negativ)m(e)
-k(if)d(there)h(is)f(no)g(more)h(input:)262 1845 y Ft(SUBROUTINE)39
-b(SOURCE\()i(STATUS)g(\))262 1944 y(INTEGER)f(STATUS)262
-2044 y(CHARACTER)f(*)44 b(\()f(200)f(\))h(BUFFER)262
-2243 y(READ\()e(1,)i('\(A\)',)e(END)h(=)h(99)g(\))g(BUFFER)262
-2343 y(CALL)e(AST_PUTLINE\()e(BUFFER,)i(LEN\()h(BUFFER)f(\),)i(STATUS)e
-(\))262 2443 y(RETURN)44 2642 y(99)130 b(CALL)41 b(AST_PUTLINE\()e
-(BUFFER,)i(-1,)h(STATUS)f(\))262 2742 y(END)0 3081 y
-FG(Our)29 b(main)h(program)h(migh)m(t)g(then)f(lo)s(ok)h(something)g
-(lik)m(e)g(this)f(\(omitting)j(error)c(c)m(hec)m(king)k(for)d(brevit)m
-(y\):)262 3407 y Ft(EXTERNAL)40 b(SOURCE)262 3607 y(...)0
-3806 y(*)87 b(Open)42 b(the)g(input)g(file.)262 3906
-y(OPEN\()f(UNIT)h(=)h(1,)g(FILE)f(=)h('infile.ast',)38
-b(STATUS)j(=)i('OLD')f(\))0 4105 y(*)87 b(Create)41 b(the)h(Channel)f
-(and)h(read)g(an)h(Object)e(from)h(it.)262 4204 y(CHANNEL)e(=)j
-(AST_CHANNEL\()c(SOURCE,)i(AST_NULL,)f(')j(',)f(STATUS)g(\))262
-4304 y(OBJECT)f(=)i(AST_READ\()d(CHANNEL,)g(STATUS)h(\))262
-4503 y(...)0 4703 y(*)87 b(Annul)41 b(the)i(Channel)d(and)j(close)e
-(the)i(file)e(when)h(done.)262 4802 y(CALL)f(AST_ANNUL\()f(CHANNEL,)g
-(STATUS)h(\))262 4902 y(CLOSE\()g(1)i(\))0 5241 y FG(Here,)33
-b(w)m(e)f(\014rst)f(op)s(en)h(the)g(required)f(input)g(\014le.)45
-b(W)-8 b(e)33 b(then)e(pass)h(the)g(name)g(of)g(our)f(SOUR)m(CE)g
-(routine)h(as)0 5354 y(the)g(\014rst)e(argumen)m(t)i(to)g(AST)p
-Fy(_)p FG(CHANNEL)f(when)f(creating)j(a)f(new)f(Channel)f(\(ensuring)h
-(that)h(SOUR)m(CE)0 5467 y(also)f(app)s(ears)f(in)g(an)h(EXTERNAL)f
-(statemen)m(t\).)43 b(When)30 b(w)m(e)h(read)f(an)g(Ob)5
-b(ject)31 b(from)f(this)g(Channel)g(using)0 5580 y(AST)p
-Fy(_)p FG(READ,)k(the)g(SOUR)m(CE)f(routine)h(will)g(b)s(e)f(called)i
-(to)g(obtain)f(the)g(textual)h(data)g(from)e(the)h(\014le,)h(the)0
-5693 y(end-of-\014le)c(b)s(eing)f(detected)h(when)f(it)h(yields)f(a)h
-(negativ)m(e)h(line)f(length.)p eop end
-%%Page: 137 147
-TeXDict begin 137 146 bop 0 52 a Fz(15.14)93 b(W)-8 b(riting)32
-b(Ob)5 b(jects)30 b(to)h(Files)2379 b FG(137)0 351 y
-Fw(15.14)112 b(W)-9 b(riting)37 b(Ob)6 b(jects)38 b(to)f(Files)0
-567 y FG(W)-8 b(e)34 b(can)f(also)h(write)e(a)i(SINK)d(routine,)j(that)
-f(obtains)g(a)g(line)g(of)g(output)f(text)i(from)e(the)h(AST)f(library)
-h(b)m(y)0 679 y(calling)g(AST)p Fy(_)p FG(GETLINE)d(and)i(then)f
-(writes)h(it)g(to)g(a)g(\014le.)45 b(W)-8 b(e)33 b(can)f(use)f(this)h
-(in)f(basically)j(the)d(same)h(w)m(a)m(y)0 792 y(as)f(the)f(SOUR)m(CE)g
-(routine)g(in)g(the)h(previous)f(section)h(\()p Fu(x)p
-FG(15.13\):)262 1017 y Ft(SUBROUTINE)39 b(SINK\()i(STATUS)h(\))262
-1116 y(INTEGER)e(L,)j(STATUS)262 1216 y(CHARACTER)c(*)44
-b(\()f(200)f(\))h(BUFFER)262 1415 y(CALL)e(AST_GETLINE\()e(BUFFER,)i
-(L,)i(STATUS)e(\))262 1515 y(IF)h(\()h(L)h(.GT.)e(0)h(\))g(WRITE\()e
-(2,)i('\(A\)')e(\))i(BUFFER\()e(:)i(L)g(\))262 1714 y(END)0
-1952 y FG(In)e(this)h(case,)k(our)41 b(main)g(program)h(w)m(ould)f
-(supply)g(the)h(name)f(of)h(this)g(SINK)f(routine)g(as)h(the)g(second)0
-2065 y(argumen)m(t)30 b(to)g(AST)p Fy(_)p FG(CHANNEL)f(\(ensuring)g
-(that)h(it)g(also)h(app)s(ears)e(in)g(an)h(EXTERNAL)f(statemen)m(t\),)j
-(as)0 2177 y(follo)m(ws:)262 2402 y Ft(EXTERNAL)40 b(SINK)262
-2601 y(...)0 2800 y(*)87 b(Open)42 b(the)g(output)f(file.)262
-2900 y(OPEN\()g(UNIT)h(=)h(2,)g(FILE)f(=)h('outfile.ast',)38
-b(STATUS)j(=)i('NEW')f(\))0 3099 y(*)87 b(Create)41 b(a)i(Channel)e
-(and)h(write)g(an)g(Object)f(to)i(it.)262 3199 y(CHANNEL)d(=)j
-(AST_CHANNEL\()c(SOURCE,)i(SINK,)g(')i(',)g(STATUS)e(\))262
-3298 y(NOBJ)g(=)j(AST_WRITE\()39 b(CHANNEL,)h(OBJECT,)h(STATUS)g(\))262
-3498 y(...)0 3697 y(*)87 b(Annul)41 b(the)i(Channel)d(and)j(close)e
-(the)i(file)e(when)h(done.)262 3797 y(CALL)f(AST_ANNUL\()f(CHANNEL,)g
-(STATUS)h(\))262 3896 y(CLOSE\()g(2)i(\))0 4134 y FG(Note)36
-b(that)f(w)m(e)g(can)g(sp)s(ecify)f(a)h(source)g(and/or)f(a)h(sink)f
-(routine)h(for)f(the)h(Channel,)g(and)f(that)h(these)g(ma)m(y)0
-4247 y(use)d(either)h(the)f(same)h(\014le,)g(or)f(di\013eren)m(t)g
-(\014les)h(according)g(to)g(whether)e(w)m(e)i(are)f(reading)h(or)f
-(writing.)46 b(AST)0 4360 y(has)31 b(no)h(kno)m(wledge)g(of)g(the)f
-(underlying)g(\014le)g(system,)h(nor)f(of)h(\014le)g(p)s(ositioning.)44
-b(It)31 b(just)g(reads)h(and)e(writes)0 4473 y(sequen)m(tially)-8
-b(.)42 b(If)27 b(y)m(ou)h(wish,)f(for)g(example,)i(to)f(rep)s(osition)g
-(a)g(\014le)f(at)h(the)g(b)s(eginning)f(in)g(b)s(et)m(w)m(een)h(reads)f
-(and)0 4585 y(writes,)37 b(then)e(this)g(can)g(b)s(e)g(done)g(directly)
-h(\(and)f(completely)i(indep)s(enden)m(tly)d(of)i(AST\))f(using)f
-(standard)0 4698 y(F)-8 b(ortran)31 b(statemen)m(ts.)0
-4855 y(If)f(an)h(error)g(o)s(ccurs)f(in)h(y)m(our)g(source)g(or)g(sink)
-g(routine,)g(y)m(ou)g(can)g(comm)m(unicate)i(this)e(to)h(the)f(AST)f
-(library)0 4968 y(b)m(y)g(setting)g(the)g(ST)-8 b(A)g(TUS)30
-b(argumen)m(t)g(to)g(an)m(y)g(error)g(v)-5 b(alue.)41
-b(This)29 b(will)h(immediately)h(terminate)g(the)f(read)0
-5081 y(or)g(write)h(op)s(eration.)0 5365 y Fw(15.15)112
-b(Reading)39 b(and)f(W)-9 b(riting)37 b(Ob)6 b(jects)38
-b(to)f(other)g(Places)0 5580 y FG(It)44 b(should)f(b)s(e)g(ob)m(vious)h
-(from)f(the)h(ab)s(o)m(v)m(e)h(\()p Fu(x)p FG(15.13)i(and)c
-Fu(x)p FG(15.14\))j(that)f(a)f(Channel's)f(source)h(and)f(sink)0
-5693 y(routines)31 b(pro)m(vide)g(a)h(\015exible)f(means)g(of)g(in)m
-(tercepting)i(textual)f(data)g(that)g(describ)s(es)e(AST)g(Ob)5
-b(jects)32 b(as)f(it)p eop end
-%%Page: 138 148
-TeXDict begin 138 147 bop 0 52 a FG(138)1228 b Fz(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FG(\015o)m(ws)h(in)f(and)g(out)h(of)g(y)m(our)g(program.)40
-b(In)29 b(fact,)i(y)m(ou)f(migh)m(t)h(lik)m(e)g(to)f(regard)g(a)g
-(Channel)f(simply)g(as)h(a)g(\014lter)0 464 y(for)g(con)m(v)m(erting)i
-(AST)d(Ob)5 b(jects)30 b(to)g(and)g(from)f(a)i(stream)f(of)g(text)h
-(whic)m(h)f(is)g(then)f(handled)h(b)m(y)f(y)m(our)h(source)0
-577 y(and)g(sink)g(routines,)g(where)g(the)h(real)g(I/O)f(o)s(ccurs.)0
-740 y(This)36 b(giv)m(es)i(y)m(ou)f(the)g(abilit)m(y)i(to)e(store)g
-(AST)g(Ob)5 b(jects)36 b(in)h(virtually)g(an)m(y)g(data)h(system,)h(so)
-e(long)g(as)g(y)m(ou)0 853 y(can)42 b(con)m(v)m(ert)h(a)f(stream)g(of)f
-(text)i(in)m(to)f(something)g(that)g(can)g(b)s(e)f(stored)g(\(it)i
-(need)e(no)g(longer)h(b)s(e)f(text\))0 966 y(and)32 b(retriev)m(e)i(it)
-f(again.)48 b(There)32 b(is)g(generally)i(no)e(need)g(to)h(retain)g
-(commen)m(ts.)48 b(Other)32 b(p)s(ossibilities,)i(suc)m(h)0
-1079 y(as)39 b(in)m(ter-pro)s(cess)h(and)e(net)m(w)m(ork)i(comm)m
-(unication,)j(could)c(also)h(b)s(e)f(implemen)m(ted)g
-Fx(via)g FG(source)g(and)g(sink)0 1191 y(functions)30
-b(in)g(basically)i(the)e(same)h(w)m(a)m(y)-8 b(.)p eop
-end
-%%Page: 139 149
-TeXDict begin 139 148 bop 3643 52 a FG(139)0 351 y FA(16)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(in)f(FITS)e(Headers)j
-(\(FitsChans\))0 597 y FG(A)39 b(FITS)f(header)h(is)g(a)h(sequence)f
-(of)g(80-c)m(haracter)j(strings,)f(formatted)f(according)g(to)g
-(particular)f(rules)0 710 y(de\014ned)32 b(b)m(y)g(the)h(Flexible)h
-(Image)g(T)-8 b(ransp)s(ort)31 b(System)i(\(FITS\).)g(FITS)2515
-677 y Fv(23)2622 710 y FG(is)f(a)h(widely-used)g(standard)f(for)0
-823 y(data)g(in)m(terc)m(hange)i(in)d(astronom)m(y)i(and)e(has)g(also)i
-(b)s(een)e(adopted)h(as)g(a)g(data)g(pro)s(cessing)g(format)g(in)f
-(some)0 936 y(astronomical)h(data)f(reduction)f(systems.)41
-b(The)29 b(individual)h(80-c)m(haracter)j(strings)d(in)g(a)h(FITS)e
-(header)h(are)0 1049 y(usually)g(called)i Fx(c)-5 b(ar)g(ds)32
-b FG(or)e Fx(he)-5 b(ader)35 b(c)-5 b(ar)g(ds)32 b FG(\(for)e(en)m
-(tirely)i(anac)m(hronistic)g(reasons\).)0 1205 y(A)23
-b(sequence)h(of)f(FITS)g(cards)g(app)s(ears)f(as)i(a)g(header)f(at)h
-(the)f(start)h(of)f(ev)m(ery)h(FITS)f(data)h(\014le,)h(and)d(sometimes)
-0 1318 y(also)38 b(at)h(other)f(p)s(oin)m(ts)f(within)g(it,)j(and)d(is)
-g(used)g(to)h(pro)m(vide)g(ancillary)h(information)f(whic)m(h)f
-(quali\014es)g(or)0 1431 y(describ)s(es)c(the)h(main)g(arra)m(y)g(of)g
-(data)h(stored)f(in)f(the)h(\014le.)51 b(As)34 b(suc)m(h,)h(FITS)e
-(headers)g(are)i(prime)e(territory)0 1544 y(for)d(storing)h
-(information)g(ab)s(out)f(the)g(co)s(ordinate)h(systems)g(asso)s
-(ciated)h(with)e(data)h(held)f(in)g(FITS)g(\014les.)0
-1700 y(In)25 b(this)h(section,)i(w)m(e)f(will)f(examine)h(ho)m(w)f(to)h
-(store)f(information)h(in)e(FITS)h(headers)f(directly)i(in)f(the)g
-(form)f(of)0 1813 y(AST)h(Ob)5 b(jects|a)26 b(pro)s(cess)g(whic)m(h)h
-(is)f(supp)s(orted)f(b)m(y)h(a)h(sp)s(ecialised)g(class)g(of)f(Channel)
-g(called)i(a)e(FitsChan.)0 1926 y(Our)43 b(discussion)h(here)g(will)h
-(turn)e(out)h(to)h(b)s(e)f(a)h(transitional)g(step)g(that)f(emphasises)
-g(the)h(similarities)0 2038 y(b)s(et)m(w)m(een)39 b(a)f(FitsChan)g(and)
-g(a)g(Channel)g(\()p Fu(x)p FG(15\).)66 b(A)m(t)39 b(the)f(same)h
-(time,)i(it)e(will)f(prepare)g(us)f(for)h(the)g(next)0
-2151 y(section)30 b(\()p Fu(x)p FG(17\),)h(where)d(w)m(e)h(will)g
-(examine)g(ho)m(w)g(to)g(use)g(a)g(FitsChan)f(to)h(tac)m(kle)i(some)e
-(of)g(the)g(more)f(di\016cult)0 2264 y(problems)i(that)h(FITS)e
-(headers)h(can)h(presen)m(t.)0 2548 y Fw(16.1)112 b(The)38
-b(Nativ)m(e)f(FITS)h(Enco)s(ding)0 2762 y FG(As)43 b(it)h(turns)e(out,)
-48 b(w)m(e)43 b(are)h(not)g(the)f(\014rst)g(to)h(ha)m(v)m(e)h(though)m
-(t)f(of)f(storing)h(W)m(CS)f(information)h(in)f(FITS)0
-2875 y(headers.)59 b(In)36 b(fact,)j(the)e(original)h(FITS)d(standard)h
-(\(1981)j(vin)m(tage\))g(de\014ned)c(a)i(set)g(of)g(header)f(k)m(eyw)m
-(ords)0 2988 y(for)31 b(this)f(purp)s(ose)f(whic)m(h)i(ha)m(v)m(e)h(b)s
-(een)e(widely)h(used,)f(although)i(they)f(ha)m(v)m(e)h(pro)m(v)m(ed)f
-(to)s(o)g(limited)h(for)e(man)m(y)0 3101 y(practical)i(purp)s(oses.)0
-3257 y(A)m(t)43 b(the)g(time)g(of)f(writing,)k(a)c(n)m(um)m(b)s(er)f
-(of)i(di\013eren)m(t)g(w)m(a)m(ys)g(of)f(using)g(FITS)g(headers)g(for)g
-(storing)g(W)m(CS)0 3370 y(information)30 b(are)g(in)f(use,)h(most)g
-(\(although)g(not)g(all\))h(based)e(on)h(the)f(original)i(standard.)40
-b(W)-8 b(e)30 b(will)g(refer)g(to)0 3483 y(these)j(alternativ)m(e)h(w)m
-(a)m(ys)f(of)f(storing)h(the)f(information)g(as)h(FITS)e
-Fx(enc)-5 b(o)g(dings)33 b FG(but)f(will)g(defer)g(a)g(discussion)0
-3596 y(of)f(their)f(adv)-5 b(an)m(tages)32 b(and)e(limitations)i(un)m
-(til)f(the)f(next)h(section)g(\()p Fu(x)p FG(17\).)0
-3752 y(Here,)d(w)m(e)f(will)f(examine)h(ho)m(w)g(to)g(store)f(AST)g(Ob)
-5 b(jects)26 b(directly)h(in)f(FITS)g(headers.)39 b(In)25
-b(e\013ect,)k(this)d(de\014nes)0 3865 y(a)38 b(new)g(enco)s(ding,)i
-(whic)m(h)d(w)m(e)i(will)f(term)g(the)g Fx(native)h(enc)-5
-b(o)g(ding.)64 b FG(This)38 b(is)f(a)i(sp)s(ecial)f(kind)f(of)h(enco)s
-(ding,)0 3978 y(b)s(ecause)d(not)f(only)h(do)s(es)f(it)h(allo)m(w)h(us)
-e(to)h(asso)s(ciate)i(con)m(v)m(en)m(tional)g(W)m(CS)e(calibration)h
-(information)f(with)0 4091 y(FITS)k(data,)k(but)c(it)i(also)f(allo)m
-(ws)i(an)m(y)e(other)g(information)g(that)g(can)h(b)s(e)e(expressed)g
-(in)g(terms)h(of)g(AST)0 4204 y(Ob)5 b(jects)38 b(to)h(b)s(e)f(stored)g
-(as)g(w)m(ell.)65 b(In)38 b(fact,)j(the)d(nativ)m(e)i(enco)s(ding)e
-(pro)m(vides)g(us)g(with)f(facilities)k(roughly)0 4316
-y(analogous)35 b(to)f(those)f(of)h(the)f(Channel)g(\()p
-Fu(x)p FG(15\)|)p Fx(i.e.)h FG(a)g(lossless)g(w)m(a)m(y)g(of)g
-(transferring)e(AST)h(Ob)5 b(jects)33 b(from)0 4429 y(program)d(to)h
-(program|but)f(based)g(on)g(FITS)g(headers)g(instead)g(of)h
-(free-format)g(text.)0 4713 y Fw(16.2)112 b(The)38 b(FitsChan)h(Mo)s
-(del)0 4927 y FG(I/O)h(b)s(et)m(w)m(een)h(AST)f(Ob)5
-b(jects)40 b(and)f(FITS)h(headers)g(is)g(supp)s(orted)e(b)m(y)j(a)f(sp)
-s(ecialised)h(form)f(of)g(Channel)0 5040 y(called)28
-b(a)f(FitsChan.)40 b(A)27 b(FitsChan)g(con)m(tains)h(a)f(bu\013er)f
-(whic)m(h)g(ma)m(y)i(hold)e(an)m(y)i(n)m(um)m(b)s(er,)e(including)h
-(zero,)h(of)0 5153 y(FITS)k(header)g(cards.)48 b(This)32
-b(bu\013er)g(forms)g(a)h(w)m(orkspace)g(in)g(whic)m(h)f(y)m(ou)h(can)g
-(assem)m(ble)h(FITS)e(cards)g(and)0 5266 y(manipulate)f(them)f(b)s
-(efore)g(writing)g(them)h(out)f(to)h(a)g(FITS)f(\014le.)0
-5422 y(By)37 b(default,)i(when)d(a)i(FitsChan)f(is)g(\014rst)f
-(created,)k(it)d(con)m(tains)i(no)d(cards)h(and)g(there)g(are)g(four)f
-(w)m(a)m(ys)i(of)0 5535 y(inserting)30 b(cards)h(in)m(to)g(it:)p
-0 5607 1512 4 v 73 5661 a Fs(23)138 5693 y Fr(h)n
-(ttp://\014ts.gsfc.nasa.go)n(v/)p eop end
-%%Page: 140 150
-TeXDict begin 140 149 bop 0 52 a FG(140)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FG(1.)46 b(Y)-8 b(ou)31 b(ma)m(y)g(add)f(cards)g(y)m(ourself,)h
-(one)g(at)g(a)f(time,)i(using)e(AST)p Fy(_)p FG(PUTFITS)e(\()p
-Fu(x)p FG(16.8\).)111 536 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)f(add)f
-(cards)h(y)m(ourself,)h(supplying)e(all)i(cards)e(concatenated)j(in)m
-(to)f(a)f(single)h(string,)g(using)227 649 y(AST)p Fy(_)p
-FG(PUTCARDS.)29 b(\()p Fu(x)p FG(16.9\).)111 834 y(3.)46
-b(Y)-8 b(ou)27 b(ma)m(y)g(write)g(an)f(AST)g(Ob)5 b(ject)26
-b(to)h(the)g(FitsChan)f(\(using)g(AST)p Fy(_)p FG(WRITE\),)g(whic)m(h)g
-(will)h(ha)m(v)m(e)g(the)227 947 y(e\013ect)32 b(of)f(creating)g(new)f
-(cards)g(within)g(the)h(FitsChan)f(whic)m(h)g(describ)s(e)g(the)h(Ob)5
-b(ject)30 b(\()p Fu(x)p FG(16.5\).)111 1132 y(4.)46 b(Y)-8
-b(ou)43 b(ma)m(y)g(sp)s(ecify)f(a)g(source)h(routine)f(whic)m(h)g
-(reads)g(data)h(from)e(some)i(external)g(store)g(of)f(FITS)227
-1245 y(cards,)27 b(just)f(lik)m(e)i(the)f(source)f(asso)s(ciated)i
-(with)e(a)h(basic)g(Channel)e(\()p Fu(x)p FG(15.13\).)43
-b(If)26 b(y)m(ou)h(supply)e(a)h(source)227 1358 y(routine,)k(it)g(will)
-g(b)s(e)f(called)h(when)f(the)g(FitsChan)g(is)h(created)g(in)f(order)g
-(to)i(\014ll)e(it)h(with)f(an)g(initial)i(set)227 1471
-y(of)g(cards)f(\()p Fu(x)p FG(16.14\).)0 1722 y(There)g(are)h(also)g
-(three)g(w)m(a)m(ys)g(of)f(remo)m(ving)h(cards)g(from)f(a)g(FitsChan:)
-111 1974 y(1.)46 b(Y)-8 b(ou)31 b(ma)m(y)g(delete)h(cards)e(y)m
-(ourself,)h(one)f(at)i(a)e(time,)i(using)d(AST)p Fy(_)p
-FG(DELFITS)g(\()p Fu(x)p FG(16.13\).)111 2159 y(2.)46
-b(Y)-8 b(ou)37 b(ma)m(y)h(read)e(an)h(AST)f(Ob)5 b(ject)36
-b(from)g(the)h(FitsChan)g(\(using)f(AST)p Fy(_)p FG(READ\),)h(whic)m(h)
-f(will)h(ha)m(v)m(e)227 2272 y(the)31 b(e\013ect)h(of)e(remo)m(ving)h
-(those)g(cards)f(from)g(the)h(FitsChan)f(whic)m(h)g(describ)s(e)g(the)h
-(Ob)5 b(ject)30 b(\()p Fu(x)p FG(16.10\).)111 2457 y(3.)46
-b(Y)-8 b(ou)35 b(ma)m(y)h(sp)s(ecify)e(a)h(sink)f(routine)h(whic)m(h)f
-(writes)h(data)g(to)h(some)f(external)g(store)h(of)f(FITS)e(cards,)227
-2570 y(just)g(lik)m(e)h(the)f(sink)g(asso)s(ciated)i(with)d(a)i(basic)f
-(Channel)g(\()p Fu(x)p FG(15.14\).)51 b(If)33 b(y)m(ou)h(supply)d(a)j
-(sink)e(routine,)227 2683 y(it)i(will)f(b)s(e)g(called)h(when)e(the)i
-(FitsChan)f(is)g(deleted)h(in)f(order)f(to)i(write)g(out)f(an)m(y)h
-(FITS)e(cards)h(that)227 2795 y(remain)e(in)f(it)h(\()p
-Fu(x)p FG(16.14\).)0 3047 y(Note,)42 b(in)c(particular,)j(that)e
-(reading)f(an)h(AST)e(Ob)5 b(ject)39 b(from)f(a)h(FitsChan)f(is)g
-Fx(destructive.)65 b FG(That)38 b(is,)j(it)0 3160 y(deletes)31
-b(the)g(FITS)f(cards)g(that)h(describ)s(e)f(the)g(Ob)5
-b(ject.)41 b(The)30 b(reason)g(for)h(this)f(is)g(explained)h(in)f
-Fu(x)p FG(17.5.)0 3320 y(In)25 b(addition)h(to)h(the)f(ab)s(o)m(v)m(e,)
-i(y)m(ou)f(ma)m(y)f(also)h(read)f(individual)f(cards)h(from)f(a)h
-(FitsChan)g(using)g(the)g(function)0 3433 y(AST)p Fy(_)p
-FG(FINDFITS)k(\(whic)m(h)h(is)g(not)g(destructiv)m(e\).)44
-b(This)30 b(is)h(the)g(main)g(means)f(of)i(writing)e(out)i(FITS)e
-(cards)0 3546 y(if)f(y)m(ou)f(ha)m(v)m(e)i(not)f(supplied)e(a)i(sink)f
-(routine.)40 b(AST)p Fy(_)p FG(FINDFITS)28 b(also)i(pro)m(vides)e(a)h
-(means)g(of)f(searc)m(hing)i(for)0 3659 y(particular)36
-b(FITS)e(cards)h(\(b)m(y)h(k)m(eyw)m(ord,)h(for)e(example\))h(and)f
-(there)g(are)h(other)g(facilities)h(for)e(o)m(v)m(erwriting)0
-3772 y(cards)30 b(when)g(required)f(\()p Fu(x)p FG(16.13\).)0
-4061 y Fw(16.3)112 b(Creating)38 b(a)g(FitsChan)0 4280
-y FG(The)30 b(FitsChan)g(constructor)h(function,)f(AST)p
-Fy(_)p FG(FITSCHAN,)f(is)i(straigh)m(tforw)m(ard)g(to)g(use:)262
-4518 y Ft(INCLUDE)40 b('AST_PAR')262 4618 y(INTEGER)g(FITSCHAN,)g
-(STATUS)262 4817 y(STATUS)h(=)i(0)262 5016 y(...)262
-5216 y(FITSCHAN)d(=)j(AST_FITSCHAN\()38 b(AST_NULL,)i(AST_NULL,)g
-('Encoding=NATIVE)o(',)d(STATUS)k(\))0 5467 y FG(Here,)27
-b(w)m(e)f(ha)m(v)m(e)h(omitted)f(an)m(y)g(source)g(or)g(sink)f
-(functions)g(b)m(y)g(supplying)f(the)i(AST)p Fy(_)p FG(NULL)e(routine)i
-(for)f(the)0 5580 y(\014rst)f(t)m(w)m(o)i(argumen)m(ts)f(\(remem)m(b)s
-(er)f(to)i(include)e(the)h(AST)p Fy(_)p FG(P)-8 b(AR)24
-b(include)g(\014le)h(whic)m(h)g(con)m(tains)g(the)g(required)0
-5693 y(EXTERNAL)42 b(statemen)m(t)i(for)f(this)f(routine\).)77
-b(W)-8 b(e)44 b(ha)m(v)m(e)g(also)f(initialised)h(the)f(FitsChan's)f
-(Enco)s(ding)p eop end
-%%Page: 141 151
-TeXDict begin 141 150 bop 0 52 a Fz(16.4)93 b(Addressing)29
-b(Cards)g(in)h(a)h(FitsChan)2109 b FG(141)0 351 y(attribute)31
-b(to)h(NA)-8 b(TIVE.)31 b(This)e(indicates)j(that)f(w)m(e)g(will)g(b)s
-(e)f(using)g(the)h(nativ)m(e)h(enco)s(ding)e(\()p Fu(x)p
-FG(16.1\))k(to)d(store)0 464 y(and)i(retriev)m(e)i(Ob)5
-b(jects.)50 b(If)34 b(this)f(w)m(as)h(left)g(unsp)s(eci\014ed,)f(the)h
-(default)g(w)m(ould)f(dep)s(end)f(on)i(the)f(FitsChan's)0
-577 y(con)m(ten)m(ts.)45 b(An)31 b(attempt)h(is)f(made)g(to)h(use)f
-(whatev)m(er)h(enco)s(ding)f(app)s(ears)g(to)h(ha)m(v)m(e)g(b)s(een)f
-(used)f(previously)-8 b(.)0 690 y(F)g(or)31 b(an)f(empt)m(y)h
-(FitsChan,)g(the)f(default)h(is)f(NA)-8 b(TIVE,)31 b(but)f(it)h(do)s
-(es)f(no)g(harm)g(to)h(b)s(e)e(sure.)0 1022 y Fw(16.4)112
-b(Addressing)39 b(Cards)f(in)f(a)h(FitsChan)0 1261 y
-FG(Because)e(a)f(FitsChan)g(con)m(tains)h(an)f(ordered)f(sequence)h(of)
-g(header)f(cards,)i(a)f(mec)m(hanism)g(is)g(needed)g(for)0
-1374 y(addressing)d(them.)46 b(This)31 b(allo)m(ws)j(y)m(ou)f(to)g(sp)s
-(ecify)f(where)f(new)h(cards)g(are)h(to)g(b)s(e)e(added,)i(for)f
-(example,)h(or)0 1487 y(whic)m(h)d(card)g(is)h(to)g(b)s(e)f(deleted.)0
-1661 y(This)e(role)h(is)g(\014lled)f(b)m(y)g(the)h(FitsChan's)g(in)m
-(teger)h(Card)d(attribute,)j(whic)m(h)f(giv)m(es)g(the)g(index)f(of)h
-(the)g Fx(curr)-5 b(ent)0 1774 y(c)g(ar)g(d)37 b FG(in)d(the)h
-(FitsChan.)54 b(Y)-8 b(ou)36 b(can)f(nominate)g(an)m(y)h(card)f(y)m(ou)
-g(lik)m(e)h(to)g(b)s(e)e(curren)m(t,)i(simply)e(b)m(y)h(setting)h(a)0
-1887 y(new)30 b(v)-5 b(alue)31 b(for)f(the)g(Card)g(attribute,)h(for)f
-(example:)262 2171 y Ft(INTEGER)40 b(ICARD)262 2370 y(...)262
-2569 y(CALL)h(AST_SETI\()f(FITSCHAN,)g('Card',)h(ICARD,)g(STATUS)g(\))0
-2867 y FG(where)24 b(ICARD)h(con)m(tains)h(the)f(index)g(of)g(the)g
-(card)g(on)g(whic)m(h)f(y)m(ou)i(wish)e(to)h(op)s(erate)h(next.)39
-b(Some)25 b(functions)0 2980 y(will)36 b(up)s(date)g(the)g(Card)f
-(attribute)i(as)f(a)h(means)f(of)g(adv)-5 b(ancing)37
-b(through)e(the)h(sequence)h(of)f(cards,)h(when)0 3092
-y(reading)30 b(them)h(for)f(example,)h(or)g(to)g(indicate)g(whic)m(h)f
-(card)h(matc)m(hes)g(a)g(searc)m(h)g(criterion.)0 3267
-y(The)d(default)h(v)-5 b(alue)30 b(for)e(Card)g(is)h(one,)h(whic)m(h)f
-(is)g(the)g(index)f(of)h(the)g(\014rst)f(card.)41 b(This)28
-b(means)g(that)i(y)m(ou)f(can)0 3380 y(\\rewind")h(a)h(FitsChan)f(to)h
-(access)h(its)f(\014rst)e(card)i(b)m(y)f(clearing)h(the)g(Card)f
-(attribute:)262 3664 y Ft(CALL)41 b(AST_CLEAR\()f(FITSCHAN,)g('Card',)g
-(STATUS)i(\))0 3961 y FG(The)d(total)j(n)m(um)m(b)s(er)c(of)i(cards)f
-(in)g(a)h(FitsChan)g(is)g(giv)m(en)g(b)m(y)g(the)g(in)m(teger)h(Ncard)e
-(attribute.)70 b(This)38 b(is)i(a)0 4074 y(read-only)28
-b(attribute)h(whose)f(v)-5 b(alue)28 b(is)g(automatically)j(up)s(dated)
-c(as)h(y)m(ou)g(add)f(or)h(remo)m(v)m(e)i(cards.)39 b(It)29
-b(means)0 4187 y(y)m(ou)i(can)f(address)g(all)h(the)g(cards)f(in)g
-(sequence)h(using)f(a)g(lo)s(op)h(suc)m(h)f(as)g(the)h(follo)m(wing:)
-262 4471 y Ft(DO)42 b(1)h(ICARD)f(=)h(1,)g(AST_GETI\()d(FITSCHAN,)g
-('Ncard',)g(STATUS)h(\))392 4570 y(CALL)h(AST_SETI\()e(FITSCHAN,)g
-('Card',)h(ICARD,)g(STATUS)g(\))392 4670 y(<access)g(the)h(current)f
-(card>)44 4770 y(1)174 b(CONTINUE)0 5067 y FG(Ho)m(w)m(ev)m(er,)31
-b(it)e(is)g(usually)g(p)s(ossible)f(to)h(write)g(sligh)m(tly)h(tidier)f
-(lo)s(ops)g(based)f(on)g(the)h(AST)p Fy(_)p FG(FINDFITS)f(func-)0
-5180 y(tion)j(describ)s(ed)e(later)j(\()p Fu(x)p FG(16.6)g(and)e
-Fu(x)p FG(16.13\).)0 5354 y(If)k(y)m(ou)h(set)g(the)g(Card)f(attribute)
-h(to)g(a)g(v)-5 b(alue)35 b(larger)h(than)e(Ncard,)i(the)f(FitsChan)f
-(is)h(regarded)f(as)h(b)s(eing)0 5467 y(p)s(ositioned)h(at)g(its)g
-Fx(end-of-\014le.)55 b FG(In)35 b(this)h(case)g(there)g(is)g(no)f
-(curren)m(t)g(card)h(and)f(an)g(attempt)i(to)f(obtain)g(a)0
-5580 y(v)-5 b(alue)26 b(for)g(the)g(Card)f(attribute)i(will)f(alw)m(a)m
-(ys)h(return)e(the)h(v)-5 b(alue)27 b(Ncard)f(+)f(1.)40
-b(When)25 b(a)i(FitsChan)e(is)h(empt)m(y)-8 b(,)0 5693
-y(it)31 b(is)f(alw)m(a)m(ys)i(at)f(the)g(end-of-\014le.)p
-eop end
-%%Page: 142 152
-TeXDict begin 142 151 bop 0 52 a FG(142)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y Fw(16.5)112 b(W)-9 b(riting)37 b(Nativ)m(e)g(Ob)6
-b(jects)38 b(to)f(a)h(FitsChan)0 572 y FG(Ha)m(ving)d(created)g(an)e
-(empt)m(y)i(FitsChan)e(\()p Fu(x)p FG(16.3\),)38 b(y)m(ou)c(can)g
-(write)g(an)m(y)g(AST)f(Ob)5 b(ject)34 b(to)g(it)h(in)e(the)h(nativ)m
-(e)0 684 y(enco)s(ding)40 b(using)g(the)h(AST)p Fy(_)p
-FG(WRITE)e(function.)71 b(Let)41 b(us)f(assume)g(w)m(e)h(are)g(writing)
-f(a)h(SkyF)-8 b(rame,)3580 651 y Fv(24)3698 684 y FG(as)0
-797 y(follo)m(ws:)262 1042 y Ft(INTEGER)40 b(NOBJ,)i(SKYFRAME)262
-1241 y(...)262 1440 y(NOBJ)f(=)j(AST_WRITE\()39 b(FITSCHAN,)h
-(SKYFRAME,)g(STATUS)h(\))0 1698 y FG(Since)h(w)m(e)f(ha)m(v)m(e)i
-(selected)g(the)f(nativ)m(e)h(enco)s(ding)e(\()p Fu(x)p
-FG(16.1\),)48 b(there)41 b(are)h(no)g(restrictions)g(on)f(the)h(class)g
-(of)0 1811 y(Ob)5 b(ject)40 b(w)m(e)g(ma)m(y)g(write,)j(so)d(AST)p
-Fy(_)p FG(WRITE)e(should)h(alw)m(a)m(ys)i(return)e(a)h(v)-5
-b(alue)40 b(of)g(one,)i(unless)d(an)h(error)0 1924 y(o)s(ccurs.)47
-b(Unlik)m(e)34 b(a)f(basic)g(Channel)f(\()p Fu(x)p FG(15.3\),)k(this)c
-(write)h(op)s(eration)g(will)g(not)g(pro)s(duce)f(an)m(y)h(output)f
-(from)0 2037 y(our)e(program.)40 b(The)30 b(FITS)g(headers)g(pro)s
-(duced)f(are)h(simply)g(stored)h(inside)f(the)g(FitsChan.)0
-2198 y(After)38 b(this)f(write)g(op)s(eration,)j(the)d(Ncard)h
-(attribute)g(will)f(b)s(e)g(up)s(dated)f(to)i(re\015ect)g(the)g(n)m(um)
-m(b)s(er)e(of)h(new)0 2311 y(cards)f(added)f(to)h(the)g(FitsChan)g(and)
-f(the)h(Card)f(attribute)i(will)f(p)s(oin)m(t)g(at)g(the)g(card)g
-(immediately)h(after)0 2424 y(the)g(last)g(one)g(written.)59
-b(Since)37 b(our)f(FitsChan)h(w)m(as)g(initially)h(empt)m(y)-8
-b(,)39 b(the)e(Card)e(attribute)j(will,)g(in)f(this)0
-2537 y(example,)31 b(p)s(oin)m(t)g(at)g(the)f(end-of-\014le)h(\()p
-Fu(x)p FG(16.4\).)0 2698 y(The)41 b(FITS)f(standard)h(imp)s(oses)f(a)i
-(limit)g(of)f(68)h(c)m(haracters)h(on)e(the)g(length)h(of)f(strings)g
-(whic)m(h)g(ma)m(y)h(b)s(e)0 2811 y(stored)33 b(in)g(a)g(single)g
-(header)g(card.)48 b(Sometimes,)35 b(a)e(description)g(of)g(an)g(AST)f
-(Ob)5 b(ject)33 b(in)m(v)m(olv)m(es)i(the)e(use)f(of)0
-2924 y(strings)c(whic)m(h)f(exceed)i(this)f(limit)g(\()p
-Fx(e.g.)g FG(a)g(F)-8 b(rame)28 b(title)i(can)e(b)s(e)f(of)h(arbitrary)
-f(length\).)41 b(If)27 b(this)h(o)s(ccurs,)g(the)0 3037
-y(long)j(string)g(will)f(b)s(e)g(split)h(o)m(v)m(er)h(t)m(w)m(o)g(or)e
-(more)h(header)f(cards.)41 b(Eac)m(h)31 b(\\con)m(tin)m(uation")i(card)
-e(will)g(ha)m(v)m(e)g(the)0 3150 y(k)m(eyw)m(ord)d Fy(CONTINUE)e
-FG(in)i(columns)f(1)h(to)h(8,)g(and)e(will)i(con)m(tain)g(a)f(space)h
-(in)e(column)h(9)g(\(instead)h(of)f(the)g(usual)0 3263
-y(equals)h(sign\).)40 b(An)29 b(amp)s(ersand)e(\(\\)p
-Fy(&)p FG("\))i(is)g(app)s(ended)e(to)i(the)g(end)f(of)g(eac)m(h)i(of)f
-(the)g(strings)f(\(except)i(the)f(last)0 3376 y(one\))i(to)g(indicate)h
-(that)f(the)f(string)g(is)h(con)m(tin)m(ued)g(on)f(the)h(next)f(card.)0
-3537 y(Note,)f(this)d(splitting)g(of)h(long)f(strings)g(o)m(v)m(er)i
-(sev)m(eral)f(cards)f(only)h(o)s(ccurs)e(when)h(writing)g(AST)f(Ob)5
-b(jects)26 b(to)h(a)0 3650 y(FitsChan)f(using)f(the)h(AST)p
-Fy(_)p FG(WRITE)f(routine)h(and)f(the)i Fx(native)f FG(enco)s(ding.)39
-b(If)26 b(a)g(long)g(string)g(is)g(stored)g(in)g(a)0
-3763 y(FitsChan)31 b(using)f(\(for)h(instance\))h(the)f(AST)p
-Fy(_)p FG(PUTFITS)d(or)j(AST)p Fy(_)p FG(PUTCARDS)e(routine,)i(it)h
-(will)f(simply)0 3876 y(b)s(e)f(truncated.)0 4168 y Fw(16.6)112
-b(Extracting)37 b(Individual)i(Cards)f(from)g(a)g(FitsChan)0
-4388 y FG(T)-8 b(o)37 b(examine)h(the)e(con)m(ten)m(ts)j(of)e(the)g
-(FitsChan)f(after)i(writing)e(the)h(SkyF)-8 b(rame)37
-b(ab)s(o)m(v)m(e)h(\()p Fu(x)p FG(16.5\),)j(w)m(e)d(m)m(ust)0
-4501 y(write)d(a)h(simple)e(lo)s(op)i(to)f(extract)i(eac)m(h)f(card)f
-(in)f(turn)g(and)h(prin)m(t)f(it)i(out.)54 b(W)-8 b(e)37
-b(m)m(ust)d(also)i(remem)m(b)s(er)f(to)0 4614 y(rewind)29
-b(the)i(FitsChan)f(\014rst,)g Fx(e.g.)g FG(using)f(AST)p
-Fy(_)p FG(CLEAR.)h(The)f(follo)m(wing)j(lo)s(op)f(w)m(ould)f(do:)262
-4858 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(CARD)262
-5057 y(...)262 5257 y(CALL)d(AST_CLEAR\()f(FITSCHAN,)g('Card',)g
-(STATUS)i(\))44 5456 y(2)174 b(CONTINUE)p 0 5516 1512
-4 v 73 5570 a Fs(24)138 5602 y Fr(More)27 b(probably)-6
-b(,)26 b(y)n(ou)g(w)n(ould)g(w)n(an)n(t)h(to)f(write)h(a)g(F)-6
-b(rameSet,)26 b(but)g(for)h(purp)r(oses)f(of)h(illustration)h(a)e(SkyF)
--6 b(rame)25 b(con)n(tains)i(a)0 5693 y(more)f(manageable)h(amoun)n(t)f
-(of)g(data.)p eop end
-%%Page: 143 153
-TeXDict begin 143 152 bop 0 52 a Fz(16.7)93 b(The)29
-b(Nativ)m(e)k(FitsChan)d(Output)f(F)-8 b(ormat)1904 b
-FG(143)262 351 y Ft(IF)42 b(\()h(AST_FINDFITS\()c(FITSCHAN,)h('\045f',)
-h(CARD,)h(.TRUE.,)e(STATUS)h(\))j(\))f(THEN)392 451 y(WRITE)f(\()h(*,)g
-('\(A\)')e(\))i(CARD)392 551 y(GO)g(TO)g(2)262 650 y(END)f(IF)0
-869 y FG(Here,)34 b(w)m(e)g(ha)m(v)m(e)g(used)e(the)i(AST)p
-Fy(_)p FG(FINDFITS)e(function)g(to)i(\014nd)e(a)h(FITS)f(card)h(b)m(y)g
-(k)m(eyw)m(ord.)49 b(It)33 b(is)g(giv)m(en)0 982 y(a)h(k)m(eyw)m(ord)g
-(template)g(of)g(\\\045f)7 b(",)35 b(whic)m(h)e(matc)m(hes)h(an)m(y)g
-(FITS)e(k)m(eyw)m(ord,)j(so)f(it)g(alw)m(a)m(ys)g(\014nds)e(the)i
-(curren)m(t)0 1095 y(card,)27 b(whic)m(h)f(it)g(returns.)38
-b(Its)26 b(fourth)f(argumen)m(t)i(is)f(set)h(to)f(.TR)m(UE.,)i(to)f
-(indicate)g(that)f(the)h(Card)e(attribute)0 1208 y(should)i(b)s(e)g
-(incremen)m(ted)h(afterw)m(ards)g(so)g(that)g(the)g(follo)m(wing)i
-(card)d(will)h(b)s(e)g(found)e(the)i(next)g(time)g(around)0
-1321 y(the)j(lo)s(op.)43 b(AST)p Fy(_)p FG(FINDFITS)30
-b(returns)g(.F)-10 b(ALSE.)31 b(when)f(it)i(reac)m(hes)g(the)f
-(end-of-\014le)g(and)g(this)g(terminates)0 1434 y(the)g(lo)s(op.)0
-1586 y(If)37 b(w)m(e)g(w)m(ere)h(storing)f(the)g(FITS)g(headers)f(in)h
-(an)g(output)g(FITS)f(\014le)h(instead)h(of)f(prin)m(ting)g(them)g
-(out,)i(w)m(e)0 1699 y(migh)m(t)27 b(use)e(a)h(lo)s(op)g(lik)m(e)h
-(this)f(but)f(replace)i(the)f(WRITE)f(statemen)m(t)j(with)d(a)i(call)g
-(to)f(a)g(suitable)h(data)f(access)0 1812 y(routine)35
-b(to)g(store)g(the)g(header)g(card.)53 b(This)34 b(w)m(ould)g(only)h(b)
-s(e)f(necessary)h(if)g(w)m(e)g(had)f(not)h(pro)m(vided)f(a)h(sink)0
-1925 y(routine)30 b(for)h(the)f(FitsChan)g(\()p Fu(x)p
-FG(16.14\).)0 2202 y Fw(16.7)112 b(The)38 b(Nativ)m(e)f(FitsChan)i
-(Output)f(F)-9 b(ormat)0 2413 y FG(If)39 b(w)m(e)g(prin)m(t)g(out)g
-(the)g(FITS)g(header)g(cards)f(describing)h(the)g(SkyF)-8
-b(rame)40 b(w)m(e)f(wrote)h(earlier)g(\()p Fu(x)p FG(16.5\),)k(w)m(e)0
-2526 y(should)29 b(obtain)i(something)g(lik)m(e)h(the)e(follo)m(wing:)
-227 2731 y Ft(COMMENT)41 b(AST)h(+++++++++++++++++)o(++)o(+++)o(++)o
-(+++)o(++)o(++)o(+++)o(++)o(+++)o(++)o(+++)o(++)o(++)o(+++)o(++)o(+++)o
-(++)o(++)o(+++)o(+)37 b(AST)227 2831 y(COMMENT)k(AST)522
-b(Beginning)40 b(of)i(AST)h(data)f(for)g(SkyFrame)e(object)564
-b(AST)227 2931 y(COMMENT)41 b(AST)h(.................)o(..)o(...)o(..)o
-(...)o(..)o(..)o(...)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(..)o(...)o(.)37 b(AST)227 3030 y(BEGAST_A=)j('SkyFrame')475
-b(/)44 b(Description)39 b(of)j(celestial)e(coordinate)g(system)227
-3130 y(NAXES_A)h(=)871 b(2)43 b(/)h(Number)d(of)h(coordinate)e(axes)227
-3230 y(AX1_A)129 b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(1)227
-3329 y(BEGAST_B=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 3429 y(ENDAST_A=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 3529 y(AX2_A)129
-b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(2)227
-3628 y(BEGAST_C=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 3728 y(ENDAST_B=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 3827 y(ISA_A)129
-b(=)43 b('Frame)128 b(')479 b(/)44 b(Coordinate)39 b(system)i
-(description)227 3927 y(SYSTEM_A=)f('FK4-NO-E')475 b(/)44
-b(Celestial)39 b(coordinate)h(system)h(type)227 4027
-y(EPOCH_A)g(=)653 b(1958.0)41 b(/)j(Besselian)39 b(epoch)j(of)h
-(observation)227 4126 y(ENDAST_C=)d('SkyFrame')475 b(/)44
-b(End)e(of)h(object)e(definition)227 4226 y(COMMENT)g(AST)h
-(.................)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(...)o(..)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(.)37
-b(AST)227 4326 y(COMMENT)k(AST)653 b(End)42 b(of)h(AST)f(data)g(for)g
-(SkyFrame)f(object)694 b(AST)227 4425 y(COMMENT)41 b(AST)h
-(-----------------)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(--)o(---)o
-(--)o(---)o(--)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(-)37
-b(AST)0 4644 y FG(As)i(y)m(ou)h(can)f(see,)j(this)d(resem)m(bles)h(the)
-f(information)g(that)h(w)m(ould)f(b)s(e)f(written)i(to)f(a)h(basic)f
-(Channel)g(to)0 4757 y(describ)s(e)26 b(the)h(same)g(SkyF)-8
-b(rame)27 b(\()p Fu(x)p FG(15.8\),)j(except)e(that)f(it)g(has)g(b)s
-(een)e(formatted)j(in)m(to)f(80-c)m(haracter)j(header)0
-4870 y(cards)g(according)h(to)h(FITS)d(con)m(v)m(en)m(tions.)0
-5022 y(There)h(are)h(also)g(a)g(n)m(um)m(b)s(er)e(of)h(other)h
-(di\013erences)g(w)m(orth)f(noting:)111 5241 y(1.)46
-b(There)33 b(is)h(no)f(unnecessary)g(information)g(ab)s(out)g(default)h
-(v)-5 b(alues)34 b(pro)m(vided)f(for)g(the)g(b)s(ene\014t)g(of)g(the)
-227 5354 y(h)m(uman)40 b(reader.)73 b(This)40 b(is)h(b)s(ecause)g(the)g
-(F)-8 b(ull)42 b(attribute)f(for)g(a)g(FitsChan)g(defaults)g(to)h
-Fu(\000)p FG(1,)i(th)m(us)227 5467 y(suppressing)32 b(this)h
-(information)g(\()p Fx(c.f.)g Fu(x)p FG(15.9\).)51 b(Y)-8
-b(ou)34 b(can)f(restore)h(the)f(information)h(if)f(y)m(ou)g(wish)g(b)m
-(y)227 5580 y(setting)i(F)-8 b(ull)35 b(to)g(0)f(or)g(+1,)h(in)f(whic)m
-(h)g(case)h(additional)g(COMMENT)e(cards)h(will)g(b)s(e)g(generated)h
-(to)227 5693 y(hold)30 b(it.)p eop end
-%%Page: 144 154
-TeXDict begin 144 153 bop 0 52 a FG(144)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FG(2.)46 b(The)24 b(information)g(is)g(not)g(inden)m(ted,)i(b)s
-(ecause)e(FITS)f(do)s(es)g(not)i(allo)m(w)g(this.)39
-b(Ho)m(w)m(ev)m(er,)27 b(if)d(y)m(ou)g(c)m(hange)227
-464 y(the)32 b(F)-8 b(ull)33 b(attribute)f(to)h(0)f(or)g(+1,)h(commen)m
-(ts)g(will)f(b)s(e)f(included)g(that)i(are)f(in)m(tended)g(to)g(help)g
-(break)227 577 y(up)f(the)i(sequence)f(of)h(headers)e(and)h(highligh)m
-(t)h(its)g(structure.)45 b(This)32 b(will)g(probably)g(only)g(b)s(e)f
-(of)i(use)227 690 y(if)d(y)m(ou)g(are)h(attempting)g(to)g(trac)m(k)g
-(do)m(wn)e(a)i(problem)e(b)m(y)h(examining)g(the)h(FITS)e(cards)g(pro)s
-(duced)g(in)227 803 y(detail.)111 979 y(3.)46 b(The)32
-b(FITS)g(k)m(eyw)m(ords)g(whic)m(h)h(app)s(ear)e(to)i(the)g(left)g(of)f
-(the)h(\\=")g(signs)f(ha)m(v)m(e)i(additional)f(c)m(haracters)227
-1092 y(\(\\)p Fy(_)p FG(A",)27 b(\\)p Fy(_)p FG(B",)f
-Fx(etc.)p FG(\))38 b(app)s(ended)24 b(to)h(them.)39 b(This)24
-b(is)h(done)g(in)g(order)f(to)i(mak)m(e)g(eac)m(h)g(k)m(eyw)m(ord)f
-(unique.)0 1306 y(This)41 b(last)i(p)s(oin)m(t)f(is)g(w)m(orth)g
-(further)e(commen)m(t)j(and)f(is)g(necessary)g(b)s(ecause)g(the)g(FITS)
-f(standard)g(only)0 1419 y(allo)m(ws)d(for)e(certain)h(k)m(eyw)m(ords)g
-(\(suc)m(h)g(as)f(COMMENT)h(and)e(HISTOR)-8 b(Y\))37
-b(to)g(app)s(ear)f(more)g(than)h(once.)0 1532 y(AST)p
-Fy(_)p FG(WRITE)31 b(therefore)j(app)s(ends)d(an)h(arbitrary)h
-(sequence)g(of)g(t)m(w)m(o)h(c)m(haracters)g(to)g(eac)m(h)g(new)e(k)m
-(eyw)m(ord)0 1645 y(it)f(generates)h(in)e(order)g(to)h(ensure)e(that)i
-(it)g(do)s(es)f(not)h(duplicate)g(an)m(y)f(already)h(presen)m(t)g(in)f
-(the)g(FitsChan.)0 1796 y(The)24 b(main)g(risk)g(from)f(not)i(follo)m
-(wing)h(this)e(con)m(v)m(en)m(tion)i(is)e(that)h(some)g(soft)m(w)m(are)
-h(migh)m(t)f(ignore)f(\(sa)m(y\))i(all)f(but)0 1909 y(the)k(last)h(o)s
-(ccurrence)f(of)g(a)g(k)m(eyw)m(ord)g(b)s(efore)g(passing)f(the)h(FITS)
-f(headers)h(on.)40 b(Suc)m(h)28 b(an)h(ev)m(en)m(t)h(is)f(unlik)m(ely)
--8 b(,)0 2022 y(but)31 b(w)m(ould)g(ob)m(viously)h(destro)m(y)f(the)h
-(information)f(presen)m(t,)h(so)g(AST)p Fy(_)p FG(WRITE)e(enforces)h
-(the)h(uniqueness)0 2135 y(of)i(the)g(k)m(eyw)m(ords)g(it)g(uses.)51
-b(The)33 b(extra)i(c)m(haracters)g(added)e(are)h(ignored)g(when)f(the)h
-(information)g(is)g(read)0 2247 y(bac)m(k.)0 2398 y(As)44
-b(with)g(a)g(basic)h(Channel,)h(y)m(ou)f(can)f(also)h(suppress)d(the)i
-(commen)m(ts)h(pro)s(duced)e(in)g(a)i(FitsChan)f(b)m(y)0
-2511 y(setting)35 b(the)e(b)s(o)s(olean)h(\(in)m(teger\))i(Commen)m(t)e
-(attribute)g(to)g(zero)h(\()p Fu(x)p FG(15.10\).)53 b(Ho)m(w)m(ev)m
-(er,)37 b(FITS)c(headers)g(are)0 2624 y(traditionally)f(generously)f
-(commen)m(ted,)g(so)g(this)f(is)h(not)f(recommended.)0
-2900 y Fw(16.8)112 b(Adding)38 b(Individual)i(Cards)e(to)f(a)g
-(FitsChan)0 3109 y FG(T)-8 b(o)31 b(insert)g(individual)f(cards)g(in)m
-(to)i(a)f(FitsChan,)g(prior)f(to)h(reading)g(them)f(bac)m(k)i(as)e(Ob)5
-b(jects)31 b(for)g(example,)0 3222 y(y)m(ou)j(should)f(use)h(the)g(AST)
-p Fy(_)p FG(PUTFITS)e(routine.)52 b(Y)-8 b(ou)34 b(can)g(insert)g(a)h
-(card)e(in)h(fron)m(t)g(of)g(the)g(curren)m(t)g(one)0
-3335 y(as)d(follo)m(ws:)262 3537 y Ft(CALL)41 b(AST_PUTFITS\()e
-(FITSCHAN,)h(CARD,)h(.FALSE.,)g(STATUS)g(\))0 3751 y
-FG(where)26 b(the)i(third)e(argumen)m(t)h(of)g(.F)-10
-b(ALSE.)27 b(indicates)h(that)g(the)f(curren)m(t)f(card)h(should)f(not)
-h(b)s(e)g(o)m(v)m(erwritten.)0 3864 y(Note)32 b(that)f(facilities)h
-(are)f(not)g(pro)m(vided)f(b)m(y)g(AST)g(for)g(formatting)h(the)f(card)
-h(con)m(ten)m(ts.)0 4015 y(After)41 b(inserting)g(a)h(card,)i(the)d
-(FitsChan's)g(Card)f(attribute)i(p)s(oin)m(ts)f(at)h(the)f(original)h
-(Card,)h(or)e(at)h(the)0 4128 y(end-of-\014le)k(if)f(the)h(FitsChan)g
-(w)m(as)g(originally)g(empt)m(y)-8 b(.)88 b(En)m(tering)45
-b(a)h(sequence)g(of)g(cards)f(is)h(therefore)0 4241 y(straigh)m(tforw)m
-(ard.)52 b(If)34 b(CARDS)f(is)h(an)g(arra)m(y)h(of)f(c)m(haracter)h
-(strings)f(con)m(taining)h(FITS)f(header)f(cards)h(and)0
-4354 y(NCARDS)41 b(is)f(the)h(n)m(um)m(b)s(er)f(of)h(cards,)i(then)e(a)
-g(lo)s(op)g(suc)m(h)f(as)h(the)g(follo)m(wing)h(will)g(insert)e(the)h
-(cards)g(in)0 4467 y(sequence)31 b(in)m(to)g(a)g(FitsChan:)262
-4668 y Ft(INTEGER)40 b(NCARD)262 4768 y(CHARACTER)f(*)44
-b(\()f(80)f(\))i(CARDS\()d(NCARD)g(\))262 4967 y(...)262
-5166 y(DO)h(3)h(ICARD)f(=)h(1,)g(NCARD)392 5266 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN,)h(CARDS\()h(ICARD)g(\),)i(.FALSE.,)d(STATUS)h(\))44
-5365 y(3)174 b(CONTINUE)0 5580 y FG(Note)34 b(that)e(AST)p
-Fy(_)p FG(PUTFITS)f(enforces)h(the)h(v)-5 b(alidit)m(y)33
-b(of)g(a)f(FitsChan)h(b)m(y)f(rejecting)h(an)m(y)g(cards)f(whic)m(h)g
-(do)0 5693 y(not)f(adhere)f(to)h(the)f(FITS)g(standard.)40
-b(If)30 b(an)m(y)h(suc)m(h)f(cards)g(are)h(detected,)g(an)g(error)f
-(will)g(result.)p eop end
-%%Page: 145 155
-TeXDict begin 145 154 bop 0 52 a Fz(16.9)93 b(Adding)29
-b(Concatenated)j(Cards)d(to)i(a)g(FitsChan)1676 b FG(145)0
-351 y Fw(16.9)112 b(Adding)38 b(Concatenated)h(Cards)f(to)f(a)h
-(FitsChan)0 566 y FG(If)46 b(y)m(ou)h(ha)m(v)m(e)h(all)f(y)m(our)g
-(cards)f(concatenated)j(together)f(in)m(to)g(a)f(single)g(long)g
-(string,)k(eac)m(h)d(o)s(ccup)m(ying)0 679 y(80)42 b(c)m(haracters)h
-(\(with)e(no)g(delimiters\),)k(y)m(ou)d(can)f(insert)g(them)g(in)m(to)h
-(a)g(FitsChan)f(in)g(a)h(single)f(call)i(us-)0 792 y(ing)i(AST)p
-Fy(_)p FG(PUTCARDS.)e(This)h(call)h(\014rst)f(empties)h(the)g(supplied)
-e(FitsChan)h(of)h(an)m(y)g(existing)g(cards,)0 905 y(then)h(inserts)f
-(the)i(new)e(cards,)50 b(and)45 b(\014nally)h(rewinds)f(the)h(FitsChan)
-g(so)g(that)h(a)f(subsequen)m(t)f(call)j(to)0 1017 y(AST)p
-Fy(_)p FG(READ)40 b(will)h(start)g(reading)g(from)f(the)h(\014rst)f
-(supplied)f(card.)71 b(The)40 b(AST)p Fy(_)p FG(PUTCARDS)f(routine)0
-1130 y(uses)32 b(AST)p Fy(_)p FG(PUTFITS)f(in)m(ternally)j(to)g(in)m
-(terpret)f(and)g(store)g(eac)m(h)h(individual)e(card,)i(and)e(so)i(the)
-f(ca)m(v)m(eats)0 1243 y(in)d Fu(x)p FG(16.8)i(should)e(b)s(e)g(read.)0
-1526 y Fw(16.10)112 b(Reading)39 b(Nativ)m(e)e(Ob)6 b(jects)38
-b(F)-9 b(rom)38 b(a)g(FitsChan)0 1741 y FG(Once)d(y)m(ou)g(ha)m(v)m(e)h
-(stored)f(a)g(FITS)g(header)f(description)h(of)g(an)g(Ob)5
-b(ject)35 b(in)g(a)g(FitsChan)g(using)f(the)h(nativ)m(e)0
-1854 y(enco)s(ding)27 b(\()p Fu(x)p FG(16.5\),)k(y)m(ou)d(can)g(read)f
-(it)h(bac)m(k)g(using)f(AST)p Fy(_)p FG(READ)g(in)g(m)m(uc)m(h)h(the)f
-(same)h(w)m(a)m(y)g(as)g(with)f(a)h(basic)0 1967 y(Channel)h(\()p
-Fu(x)p FG(15.4\).)44 b(Similar)30 b(commen)m(ts)h(ab)s(out)f(v)-5
-b(alidating)31 b(the)g(Ob)5 b(ject)30 b(y)m(ou)h(read)f(also)h(apply)f
-(\()p Fu(x)p FG(15.6\).)43 b(If)0 2080 y(y)m(ou)31 b(ha)m(v)m(e)g(just)
-f(written)h(to)g(the)f(FitsChan,)h(y)m(ou)f(m)m(ust)h(remem)m(b)s(er)e
-(to)j(rewind)d(it)i(\014rst:)262 2301 y Ft(INTEGER)40
-b(OBJECT)262 2500 y(...)262 2700 y(CALL)h(AST_CLEAR\()f(FITSCHAN,)g
-('Card',)g(STATUS)i(\))262 2799 y(OBJECT)f(=)i(AST_READ\()d(FITSCHAN,)g
-(STATUS)h(\))0 3034 y FG(An)30 b(imp)s(ortan)m(t)g(feature)g(of)h(a)f
-(FitsChan)g(is)g(that)h(read)f(op)s(erations)g(are)h(destructiv)m(e.)42
-b(This)29 b(means)h(that)g(if)0 3147 y(an)k(Ob)5 b(ject)35
-b(description)f(is)g(found,)g(it)h(will)g(b)s(e)e(consumed)h(b)m(y)g
-(AST)p Fy(_)p FG(READ)g(whic)m(h)g(will)g(remo)m(v)m(e)i(all)f(the)0
-3260 y(cards)d(in)m(v)m(olv)m(ed,)i(including)d(asso)s(ciated)j
-(COMMENT)d(cards,)i(from)e(the)h(FitsChan.)46 b(Th)m(us,)31
-b(if)h(y)m(ou)g(write)0 3373 y(an)f(Ob)5 b(ject)32 b(to)g(a)g
-(FitsChan,)g(rewind,)f(and)g(read)h(the)g(same)g(Ob)5
-b(ject)31 b(bac)m(k,)i(y)m(ou)f(should)f(end)f(up)h(with)g(the)0
-3486 y(original)41 b(FitsChan)e(con)m(ten)m(ts.)71 b(If)39
-b(y)m(ou)h(need)g(to)g(circum)m(v)m(en)m(t)h(this)f(b)s(eha)m(viour)f
-(for)h(an)m(y)g(reason,)i(it)e(is)g(a)0 3599 y(simple)32
-b(matter)g(to)g(mak)m(e)h(a)f(cop)m(y)g(of)g(a)g(FitsChan)g(using)f
-(AST)p Fy(_)p FG(COPY)f(\()p Fu(x)p FG(4.12\).)47 b(If)31
-b(y)m(ou)h(then)f(read)h(from)0 3712 y(the)f(cop)m(y)-8
-b(,)31 b(the)g(original)g(FitsChan)g(will)f(remain)h(un)m(touc)m(hed.)0
-3867 y(After)e(a)g(read)f(completes,)j(the)e(FitsChan's)f(Card)g
-(attribute)i(iden)m(ti\014es)f(the)g(card)f(immediately)i(follo)m(wing)
-0 3980 y(the)h(last)g(card)f(read,)h(or)f(the)h(end-of-\014le)f(of)h
-(there)f(are)h(no)f(more)h(cards.)0 4136 y(Since)43 b(the)f
-Fx(native)h FG(enco)s(ding)g(is)f(b)s(eing)g(used,)j(an)m(y)e(long)g
-(strings)g(in)m(v)m(olv)m(ed)h(in)e(the)h(ob)5 b(ject)43
-b(description)0 4249 y(will)c(ha)m(v)m(e)g(b)s(een)f(split)g(in)m(to)i
-(t)m(w)m(o)g(or)e(more)g(adjacen)m(t)i(con)m(tuation)g(cards)e(when)g
-(the)g(Ob)5 b(ject)39 b(w)m(as)f(stored)0 4362 y(in)h(the)g(header)g
-(using)g(routine)g(AST)p Fy(_)p FG(WRITE.)f(The)h(AST)p
-Fy(_)p FG(READ)f(routine)h(rev)m(erses)h(this)f(pro)s(cess)g(b)m(y)0
-4475 y(concatenating)33 b(an)m(y)e(suc)m(h)f(adjacen)m(t)h(con)m(tin)m
-(uation)h(cards)f(to)g(re-create)h(the)f(original)g(long)g(string.)0
-4758 y Fw(16.11)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)38 b(in)g(a)f(FitsChan)0 4973 y FG(When)32 b(using)f(the)h
-(nativ)m(e)h(FITS)e(enco)s(ding,)i(m)m(ultiple)f(Ob)5
-b(jects)32 b(ma)m(y)g(b)s(e)g(stored)f(and)h(all)g(I/O)g(op)s(erations)
-0 5086 y(are)40 b(sequen)m(tial.)68 b(This)39 b(means)g(that)h(y)m(ou)f
-(can)h(simply)f(write)g(a)h(sequence)f(of)h(Ob)5 b(jects)39
-b(to)h(a)f(FitsChan.)0 5198 y(After)32 b(eac)m(h)h(write)g(op)s
-(eration,)g(the)f(Card)f(attribute)i(will)f(b)s(e)f(up)s(dated)g(so)h
-(that)h(the)f(next)g(write)g(app)s(ends)0 5311 y(the)f(next)f(Ob)5
-b(ject)31 b(description)f(to)h(the)g(previous)f(one.)0
-5467 y(If)g(y)m(ou)g(then)g(rewind)f(the)h(FitsChan,)h(y)m(ou)f(can)h
-(read)f(the)g(Ob)5 b(jects)30 b(bac)m(k)h(in)f(the)h(original)g(order.)
-40 b(Reading)0 5580 y(them)21 b(bac)m(k)g(will,)i(of)e(course,)i(remo)m
-(v)m(e)f(their)f(descriptions)g(from)f(the)h(FitsChan)f(\()p
-Fu(x)p FG(16.10\))k(but)c(the)h(b)s(eha)m(viour)0 5693
-y(of)31 b(the)f(Card)g(attribute)h(is)f(suc)m(h)g(that)h(successiv)m(e)
-h(reads)e(will)h(simply)f(return)f(eac)m(h)i(Ob)5 b(ject)31
-b(in)f(sequence.)p eop end
-%%Page: 146 156
-TeXDict begin 146 155 bop 0 52 a FG(146)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y FG(The)d(only)h(thing)f(that)h(ma)m(y)g(require)f(care,)i(giv)m
-(en)g(that)f(a)g(FitsChan)f(can)h(alw)m(a)m(ys)h(b)s(e)e(addressed)f
-(randomly)0 464 y(b)m(y)38 b(setting)i(its)f(Card)e(attribute,)k(is)e
-(to)g(a)m(v)m(oid)h(writing)e(one)h(Ob)5 b(ject)38 b(on)h(top)f(of)h
-(another.)65 b(F)-8 b(or)39 b(ob)m(vious)0 577 y(reasons,)32
-b(the)g(Ob)5 b(ject)31 b(descriptions)h(in)f(a)h(FitsChan)f(m)m(ust)h
-(remain)f(separate)i(if)e(they)h(are)g(to)g(mak)m(e)g(sense)0
-690 y(when)d(read)i(bac)m(k.)0 976 y Fw(16.12)112 b(Mixing)39
-b(Nativ)m(e)e(Ob)6 b(jects)38 b(with)f(Other)h(FITS)g(Cards)0
-1192 y FG(Of)f(course,)j(an)m(y)d(real)i(FITS)d(header)i(will)f(con)m
-(tain)i(other)f(information)g(b)s(esides)f(AST)f(Ob)5
-b(jects,)40 b(if)d(only)0 1305 y(the)32 b(mandatory)g(FITS)g(cards)g
-(that)g(m)m(ust)g(accompan)m(y)i(all)f(FITS)e(data.)47
-b(When)32 b(FITS)f(headers)h(are)h(read)0 1417 y(in)g(from)f(a)h(real)h
-(dataset,)h(therefore,)f(an)m(y)f(nativ)m(e)i(AST)d(Ob)5
-b(ject)33 b(descriptions)g(will)g(b)s(e)f(in)m(ter-mixed)i(with)0
-1530 y(man)m(y)c(other)h(cards.)0 1688 y(Because)j(this)f(is)g(the)g
-(normal)g(state)h(of)f(a\013airs,)h(the)f(b)s(o)s(olean)g(\(in)m
-(teger\))i(Skip)d(attribute)i(for)e(a)i(FitsChan)0 1801
-y(defaults)j(to)h(one.)62 b(This)37 b(means)g(that)h(when)e(y)m(ou)i
-(read)f(an)g(Ob)5 b(ject)38 b(F)-8 b(rom)38 b(a)f(FitsChan,)j(an)m(y)d
-(irrelev)-5 b(an)m(t)0 1914 y(cards)28 b(will)h(simply)f(b)s(e)g(skipp)
-s(ed)f(o)m(v)m(er)i(un)m(til)g(the)g(start)g(of)f(the)h(next)f(Ob)5
-b(ject)29 b(description,)g(if)f(an)m(y)-8 b(,)30 b(is)f(found.)0
-2027 y(If)c(y)m(ou)i(start)f(reading)g(part)g(w)m(a)m(y)h(through)e(an)
-h(Ob)5 b(ject)26 b(description,)h(no)f(error)f(will)h(result.)40
-b(The)25 b(remainder)0 2140 y(of)31 b(the)f(description)h(will)f
-(simply)g(b)s(e)g(skipp)s(ed.)0 2297 y(Setting)38 b(Skip)e(to)h(zero)h
-(will)f(c)m(hange)h(this)f(b)s(eha)m(viour)g(to)g(resem)m(ble)h(that)f
-(of)g(a)h(basic)f(Channel)f(\()p Fu(x)p FG(15.12\),)0
-2410 y(where)30 b(extraneous)h(data)g(are)g(not)f(p)s(ermitted)g(b)m(y)
-g(default,)h(but)f(this)g(will)h(probably)e(rarely)i(b)s(e)f(useful.)0
-2695 y Fw(16.13)112 b(Finding)39 b(and)g(Changing)f(Cards)h(in)e(a)h
-(FitsChan)0 2912 y FG(Y)-8 b(ou)30 b(can)g(searc)m(h)g(for,)f(and)g
-(retriev)m(e,)i(particular)f(cards)f(in)g(a)h(FitsChan)g(b)m(y)f(k)m
-(eyw)m(ord,)h(using)f(the)h(function)0 3024 y(AST)p Fy(_)p
-FG(FINDFITS.)23 b(This)g(p)s(erforms)f(a)h(searc)m(h,)j(starting)e(at)h
-(the)e(curren)m(t)h(card,)h(un)m(til)f(it)g(\014nds)d(a)j(card)g(whose)
-0 3137 y(k)m(eyw)m(ord)31 b(matc)m(hes)g(the)g(template)h(y)m(ou)e
-(supply)-8 b(,)30 b(or)g(the)h(end-of-\014le)g(is)f(reac)m(hed.)0
-3295 y(If)45 b(a)h(suitable)h(card)e(is)h(found,)i(AST)p
-Fy(_)p FG(FINDFITS)d(returns)g(the)h(card's)f(con)m(ten)m(ts)j(and)d
-(then)g(sets)h(the)0 3408 y(FitsChan's)h(Card)f(attribute)i(either)f
-(to)g(iden)m(tify)h(the)f(card)g(found,)j(or)d(the)g(one)g(follo)m
-(wing)h(it.)91 b(The)0 3521 y(w)m(a)m(y)42 b(y)m(ou)f(w)m(an)m(t)h(the)
-g(Card)e(attribute)i(to)g(b)s(e)e(set)i(is)f(indicated)g(b)m(y)g(the)h
-(fourth)e(\(logical\))k(argumen)m(t)e(to)0 3634 y(AST)p
-Fy(_)p FG(FINDFITS.)32 b(A)h(v)-5 b(alue)34 b(of)f(.TR)m(UE.)g(is)g
-(returned)f(to)h(indicate)h(success.)49 b(If)32 b(a)i(suitable)f(card)g
-(cannot)0 3746 y(b)s(e)23 b(found,)h(AST)p Fy(_)p FG(FINDFITS)e
-(returns)g(a)i(v)-5 b(alue)24 b(of)g(.F)-10 b(ALSE.)23
-b(to)h(indicate)h(failure)e(and)g(sets)h(the)f(FitsChan's)0
-3859 y(Card)30 b(attribute)h(to)g(the)f(end-of-\014le.)0
-4017 y(Requesting)37 b(that)h(the)f(Card)f(attribute)h(b)s(e)f(set)i
-(to)f(indicate)h(the)f(card)g(that)g(AST)p Fy(_)p FG(FINDFITS)f
-(\014nds)f(is)0 4130 y(useful)30 b(if)g(y)m(ou)h(w)m(an)m(t)g(to)g
-(replace)g(that)g(card)g(with)f(a)g(new)g(one,)h(as)g(in)f(this)g
-(example:)262 4358 y Ft(CHARACTER)39 b(*)44 b(\()f(80)f(\))i(NEWCARD)
-262 4457 y(LOGICAL)c(JUNK)262 4657 y(...)262 4856 y(JUNK)h(=)j
-(AST_FINDFITS\()38 b(FITSCHAN,)i('AIRMASS',)f(CARD,)j(.FALSE.,)e
-(STATUS)h(\))262 4956 y(CALL)g(AST_PUTFITS\()e(FITSCHAN,)h(NEWCARD,)g
-(.TRUE.,)h(STATUS)g(\))0 5197 y FG(Here,)33 b(AST)p Fy(_)p
-FG(FINDFITS)e(is)h(used)g(to)g(searc)m(h)h(for)f(a)g(card)g(with)g(the)
-g(k)m(eyw)m(ord)g(AIRMASS.)g(If)f(the)i(card)e(is)0 5310
-y(found,)e(AST)p Fy(_)p FG(PUTFITS)f(then)h(o)m(v)m(erwrites)j(it)e
-(with)g(a)g(new)f(card.)41 b(Otherwise,)30 b(the)g(Card)f(attribute)h
-(ends)0 5423 y(up)f(p)s(oin)m(ting)h(at)g(the)g(end-of-\014le)h(and)e
-(the)h(new)f(card)h(is)g(simply)f(app)s(ended)f(to)j(the)f(end)f(of)h
-(the)g(FitsChan.)0 5580 y(A)e(similar)g(approac)m(h)g(can)g(b)s(e)e
-(used)h(to)i(delete)g(selected)g(cards)e(from)g(a)h(FitsChan)g(using)f
-(AST)p Fy(_)p FG(DELFITS,)0 5693 y(whic)m(h)j(deletes)i(the)e(curren)m
-(t)g(card:)p eop end
-%%Page: 147 157
-TeXDict begin 147 156 bop 0 52 a Fz(16.14)93 b(Source)30
-b(and)g(Sink)f(Routines)i(for)f(FitsChans)1747 b FG(147)262
-351 y Ft(IF)42 b(\()h(AST_FINDFITS\()c(FITSCHAN,)h('BSCALE',)f(CARD,)j
-(.FALSE.,)e(STATUS)h(\))i(\))h(THEN)392 451 y(CALL)e(AST_DELFITS\()d
-(FITSCHAN,)h(STATUS)h(\))262 551 y(END)h(IF)0 849 y FG(This)30
-b(deletes)h(the)g(\014rst)e(card,)i(if)f(an)m(y)-8 b(,)32
-b(with)e(the)g(BSCALE)g(k)m(eyw)m(ord.)0 1024 y(Requesting)k(that)g
-(AST)p Fy(_)p FG(FINDFITS)e(incremen)m(ts)i(the)g(Card)e(attribute)i
-(to)g(iden)m(tify)g(the)g(card)f(follo)m(wing)0 1137
-y(the)d(one)h(found)d(is)i(more)g(useful)g(when)f(writing)h(lo)s(ops.)
-40 b(F)-8 b(or)31 b(example,)g(the)f(follo)m(wing)i(lo)s(op)e(extracts)
-h(eac)m(h)0 1250 y(card)39 b(whose)f(k)m(eyw)m(ord)h(matc)m(hes)h(the)f
-(template)h(\\CD\0456d")f(\(that)h(is,)h(\\CD")f(follo)m(w)m(ed)g(b)m
-(y)f(six)f(decimal)0 1363 y(digits\):)44 1648 y Ft(4)174
-b(CONTINUE)262 1748 y(IF)42 b(\()h(AST_FINDFITS\()c(FITSCHAN,)h
-('CD\0456d',)g(CARD,)h(.TRUE.,)g(STATUS)g(\))i(\))g(THEN)392
-1848 y(<process)e(the)h(card's)f(contents>)392 1947 y(GO)i(TO)g(4)262
-2047 y(END)f(IF)0 2346 y FG(F)-8 b(or)26 b(further)e(details)i(of)g(k)m
-(eyw)m(ord)f(templates,)j(see)e(the)f(description)h(of)f(AST)p
-Fy(_)p FG(FINDFITS)f(in)h(App)s(endix)f(B.)0 2680 y Fw(16.14)112
-b(Source)38 b(and)g(Sink)h(Routines)e(for)h(FitsChans)0
-2919 y FG(The)26 b(use)h(of)g(source)g(and)f(sink)g(routines)h(with)g
-(a)g(FitsChan)f(is)h(optional.)41 b(This)26 b(is)h(b)s(ecause)g(y)m(ou)
-g(can)g(alw)m(a)m(ys)0 3032 y(arrange)i(to)g(explicitly)h(\014ll)e(a)g
-(FitsChan)h(with)f(FITS)f(cards)h(\()p Fu(x)p FG(16.8)j(and)c
-Fu(x)p FG(16.9\))k(and)d(y)m(ou)g(can)h(also)g(extract)0
-3145 y(an)m(y)i(cards)f(that)h(remain)f(and)g(write)g(them)h(out)f(y)m
-(ourself)h(\()p Fu(x)p FG(16.6\))i(b)s(efore)d(y)m(ou)h(delete)g(the)g
-(FitsChan.)0 3320 y(If)26 b(y)m(ou)h(c)m(ho)s(ose)h(to)f(use)f(these)h
-(routines,)g(ho)m(w)m(ev)m(er,)i(they)e(b)s(eha)m(v)m(e)g(in)f(a)h(v)m
-(ery)g(similar)g(manner)f(to)h(those)g(used)0 3433 y(b)m(y)32
-b(a)g(Channel)f(\()p Fu(x)p FG(15.13)j(and)e Fu(x)p FG(15.14\).)47
-b(Y)-8 b(ou)33 b(supply)d(these)i(routines,)g(as)g(argumen)m(ts)h(to)f
-(the)g(constructor)0 3546 y(function)25 b(AST)p Fy(_)p
-FG(FITSCHAN)f(when)g(y)m(ou)h(create)i(the)f(FitsChan)f(\()p
-Fu(x)p FG(16.3\).)41 b(The)25 b(source)h(routine)f(is)g(in)m(v)m(ok)m
-(ed)0 3659 y(implicitly)30 b(at)g(this)e(p)s(oin)m(t)h(to)h(\014ll)e
-(the)h(FitsChan)g(with)f(FITS)g(cards)h(and)f(the)h(FitsChan)g(is)g
-(then)f(rew)m(ound,)0 3771 y(so)36 b(that)g(the)f(\014rst)g(card)g(b)s
-(ecomes)h(curren)m(t.)55 b(The)35 b(sink)g(routine)g(is)h
-(automatically)i(in)m(v)m(ok)m(ed)f(later,)g(when)0 3884
-y(the)31 b(FitsChan)f(is)g(deleted,)i(in)e(order)g(to)h(write)f(out)h
-(an)m(y)g(cards)f(that)h(remain)f(in)g(it.)0 4059 y(The)23
-b(only)g(real)h(di\013erence)g(b)s(et)m(w)m(een)f(the)h(source)f(and)g
-(sink)g(routines)g(for)g(a)g(FitsChan)g(and)g(a)h(basic)f(Channel)0
-4172 y(is)i(that)h(FITS)f(cards)g(are)h(limited)g(in)f(length)g(to)h
-(80)h(c)m(haracters,)h(so)d(the)h(c)m(hoice)h(of)e(bu\013er)f(size)j
-(is)e(simpli\014ed.)0 4285 y(This)c(a\013ects)i(the)e(w)m(a)m(y)i(the)f
-(card)f(con)m(ten)m(ts)i(are)f(passed,)h(so)f(the)g(routines)f
-(themselv)m(es)i(are)f(sligh)m(tly)h(di\013eren)m(t.)0
-4398 y(The)37 b(follo)m(wing)i(is)e(therefore)h(the)g(FitsChan)f(equiv)
--5 b(alen)m(t)39 b(of)f(the)f(Channel)g(SOUR)m(CE)g(routine)g(giv)m(en)
-i(in)0 4511 y Fu(x)p FG(15.13:)262 4796 y Ft(INTEGER)h(FUNCTION)g
-(FITSSOURCE\()g(CARD,)h(STATUS)g(\))262 4896 y(CHARACTER)e(*)44
-b(\()f(80)f(\))i(CARD)262 4996 y(INTEGER)c(STATUS)262
-5195 y(READ\()h(1,)i('\(A\)',)e(END)h(=)h(99)g(\))g(CARD)262
-5295 y(FITSSOURCE)c(=)k(1)262 5394 y(RETURN)44 5593 y(99)130
-b(FITSSOURCE)39 b(=)k(0)262 5693 y(END)p eop end
-%%Page: 148 158
-TeXDict begin 148 157 bop 0 52 a FG(148)889 b Fz(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y FG(Here,)25 b(the)d(FITS)g(card)h(con)m(ten)m(ts)h(are)f
-(returned)e Fx(via)h FG(the)h(CARD)g(argumen)m(t)g(\(the)g(AST)p
-Fy(_)p FG(PUTLINE)d(routine)0 464 y(should)31 b(not)i(b)s(e)e(used\))h
-(and)g(the)g(function)g(returns)f(1)h(to)h(indicate)h(that)e(a)h(card)f
-(has)g(b)s(een)g(read.)46 b(A)32 b(v)-5 b(alue)0 577
-y(of)31 b(zero)g(is)f(returned)f(if)i(there)f(are)h(no)f(more)h(cards)f
-(to)h(read.)0 740 y(The)36 b(sink)h(routine)g(for)f(a)h(FitsChan)g(is)g
-(also)h(a)f(little)i(di\013eren)m(t)e(\()p Fx(c.f.)f
-FG(the)h(SINK)f(routine)h(in)g Fu(x)p FG(15.14\),)k(as)0
-853 y(follo)m(ws:)262 1102 y Ft(SUBROUTINE)e(FITSSINK\()h(CARD,)h
-(STATUS)g(\))262 1201 y(CHARACTER)e(*)44 b(\()f(80)f(\))i(CARD)262
-1301 y(INTEGER)c(STATUS)262 1500 y(WRITE\()h(2,)h('\(A\)')g(\))h(CARD)
-262 1700 y(END)0 1962 y FG(The)20 b(con)m(ten)m(ts)i(of)e(the)h(FITS)e
-(card)h(b)s(eing)g(written)h(are)f(passed)g Fx(via)g
-FG(the)h(CARD)f(argumen)m(t)h(\(the)g(AST)p Fy(_)p FG(GETLINE)0
-2075 y(routine)30 b(should)g(not)g(b)s(e)g(used\).)0
-2238 y(Of)36 b(course,)j(b)s(oth)d(of)h(these)h(examples)f(assume)g
-(that)g(y)m(ou)g(are)h(accessing)g(text)g(\014les.)60
-b(If)36 b(this)h(is)g(not)g(the)0 2350 y(case,)f(then)d(appropriate)h
-(c)m(hanges)g(to)g(the)g(I/O)g(statemen)m(ts)h(w)m(ould)e(b)s(e)g
-(needed.)50 b(The)33 b(details)i(ob)m(viously)0 2463
-y(dep)s(end)e(on)h(the)h(format)f(of)h(the)f(\014le)h(y)m(ou)g(are)f
-(handling,)h(whic)m(h)f(need)h(not)f(necessarily)h(b)s(e)f(a)h(true)f
-(FITS)0 2576 y(\014le.)p eop end
-%%Page: 149 159
-TeXDict begin 149 158 bop 3643 52 a FG(149)0 351 y FA(17)135
-b(Using)46 b(F)-11 b(oreign)45 b(FITS)e(Enco)t(dings)0
-609 y FG(W)-8 b(e)38 b(sa)m(w)f(in)f(the)h(previous)f(section)i(\()p
-Fu(x)p FG(16\))g(ho)m(w)f(to)g(store)h(and)e(retriev)m(e)i(an)m(y)f
-(kind)e(of)i(AST)f(Ob)5 b(ject)37 b(in)f(a)0 722 y(FITS)27
-b(header)h(b)m(y)f(using)g(a)i(FitsChan.)39 b(T)-8 b(o)28
-b(ac)m(hiev)m(e)j(this,)d(w)m(e)g(set)g(the)g(FitsChan's)g(Enco)s(ding)
-f(attribute)i(to)0 835 y(NA)-8 b(TIVE.)29 b(Ho)m(w)m(ev)m(er,)j(the)d
-(Ob)5 b(jects)29 b(w)m(e)g(wrote)g(could)g(then)g(only)g(b)s(e)f(read)h
-(bac)m(k)g(b)m(y)g(other)g(programs)g(that)0 948 y(use)h(AST.)0
-1114 y(In)g(practice,)i(w)m(e)f(will)f(also)i(encoun)m(ter)f(FITS)e
-(headers)h(con)m(taining)i(W)m(CS)f(information)f(written)h(b)m(y)f
-(other)0 1227 y(soft)m(w)m(are)37 b(systems.)58 b(W)-8
-b(e)37 b(will)f(probably)f(also)i(need)f(to)g(write)g(FITS)g(headers)f
-(in)h(a)g(format)g(that)h(can)f(b)s(e)0 1340 y(understo)s(o)s(d)25
-b(b)m(y)i(these)g(systems.)40 b(Indeed,)27 b(this)g(in)m(terc)m(hange)h
-(of)g(data)f(is)g(one)g(of)h(the)f(main)g(reasons)g(for)f(the)0
-1452 y(existence)32 b(of)e(FITS,)g(so)h(in)f(this)g(section)i(w)m(e)f
-(will)f(examine)h(ho)m(w)g(to)g(accommo)s(date)h(these)f(requiremen)m
-(ts.)0 1757 y Fw(17.1)112 b(The)38 b(F)-9 b(oreign)38
-b(FITS)g(Enco)s(dings)0 1983 y FG(As)30 b(men)m(tioned)g(previously)f
-(\()p Fu(x)p FG(16.1\),)k(there)d(are)g(a)g(n)m(um)m(b)s(er)e(of)i(con)
-m(v)m(en)m(tions)h(curren)m(tly)f(in)f(use)h(for)f(storing)0
-2096 y(W)m(CS)g(information)g(in)g(FITS)f(headers,)h(whic)m(h)f(w)m(e)i
-(call)g Fx(enc)-5 b(o)g(dings.)41 b FG(Here,)30 b(w)m(e)f(are)g
-(concerned)g(with)g(those)0 2209 y(enco)s(dings)h(de\014ned)f(b)m(y)i
-(soft)m(w)m(are)g(systems)g(other)f(than)h(AST,)e(whic)m(h)i(w)m(e)f
-(term)h Fx(for)-5 b(eign)33 b(enc)-5 b(o)g(dings.)0 2375
-y FG(Curren)m(tly)d(,)31 b(AST)f(supp)s(orts)e(six)j(foreign)g(enco)s
-(dings,)g(whic)m(h)f(ma)m(y)i(b)s(e)e(selected)i(b)m(y)e(setting)i(the)
-f(Enco)s(ding)0 2488 y(attribute)g(of)g(a)f(FitsChan)h(to)g(one)f(of)h
-(the)f(follo)m(wing)i(\(c)m(haracter)h(string\))d(v)-5
-b(alues:)227 2761 y FE(DSS)427 2873 y FG(This)34 b(enco)s(ding)g
-(stores)h(W)m(CS)f(information)h(using)e(the)i(con)m(v)m(en)m(tion)h
-(dev)m(elop)s(ed)f(at)g(the)427 2986 y(Space)42 b(T)-8
-b(elescop)s(e)43 b(Science)f(Institute)g(for)g(the)f(Digitised)j(Sky)d
-(Surv)m(ey)g(\(DSS\))g(astro-)427 3099 y(metric)h(plate)h
-(calibrations.)75 b(DSS)41 b(images)i(whic)m(h)e(use)g(this)h(con)m(v)m
-(en)m(tion)h(are)f(widely)427 3212 y(a)m(v)-5 b(ailable)38
-b(and)d(it)g(is)h(understo)s(o)s(d)d(b)m(y)i(a)h(n)m(um)m(b)s(er)e(of)h
-(imp)s(ortan)m(t)h(and)f(w)m(ell-established)427 3325
-y(astronom)m(y)c(applications.)427 3456 y(Ho)m(w)m(ev)m(er,)46
-b(the)41 b(calibration)h(mo)s(del)f(used)f(\(based)h(on)f(a)h(p)s
-(olynomial)g(\014t\))g(is)g(not)g(eas-)427 3569 y(ily)e(applicable)g
-(to)g(other)f(t)m(yp)s(es)g(of)h(data)g(and)e(creating)j(the)e(p)s
-(olynomial)g(co)s(e\016cien)m(ts)427 3682 y(needed)e(to)h(calibrate)h
-(y)m(our)f(o)m(wn)f(images)i(can)e(pro)m(v)m(e)i(di\016cult.)58
-b(F)-8 b(or)37 b(this)g(reason,)h(the)427 3795 y(DSS)33
-b(enco)s(ding)g(is)g(probably)f(b)s(est)h(view)m(ed)h(as)f(a)h
-(\\read-only")g(format.)50 b(It)33 b(is)g(p)s(ossible,)427
-3908 y(ho)m(w)m(ev)m(er,)h(to)e(read)g(in)f(W)m(CS)h(information)g
-(using)f(this)g(enco)s(ding)h(and)f(then)g(to)i(write)f(it)427
-4021 y(bac)m(k)f(out)g(again,)h(so)e(long)h(as)g(only)f(minor)g(c)m
-(hanges)i(ha)m(v)m(e)f(b)s(een)f(made.)227 4170 y FE(FITS-W)m(CS)427
-4283 y FG(This)35 b(enco)s(ding)g(is)h(v)m(ery)g(imp)s(ortan)m(t)g(b)s
-(ecause)f(it)h(is)g(based)f(on)g(a)h(new)f(FITS)g(standard)427
-4396 y(whic)m(h)27 b(should,)f(for)h(the)f(\014rst)g(time,)i(address)e
-(the)h(problem)f(of)h(celestial)i(co)s(ordinate)e(sys-)427
-4509 y(tems)c(in)f(a)h(prop)s(er)f(manner,)h(b)m(y)g(considerably)f
-(extending)h(the)g(original)h(FITS)e(standard.)427 4640
-y(The)48 b(con)m(v)m(en)m(tions)i(used)d(are)h(describ)s(ed)f(in)h(a)g
-(series)h(of)f(pap)s(ers)f(b)m(y)h(E.W.)16 b(Greisen,)427
-4753 y(M.)g(Calabretta,)48 b Fx(et.)77 b(al.)p FG(,)47
-b(often)d(referred)e(to)i(as)g(the)f(\\FITS-W)m(CS)g(pap)s(ers".)79
-b(They)427 4866 y(are)30 b(describ)s(ed)f(at)h(h)m
-(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p Fy(_)p FG(w)m(cs.h)m(tml.)46
-b(No)m(w)30 b(that)g(the)g(\014rst)f(t)m(w)m(o)427 4979
-y(pap)s(ers)j(in)g(this)g(series)h(ha)m(v)m(e)h(b)s(een)e(agreed,)i
-(this)f(enco)s(ding)f(should)g(b)s(e)g(understo)s(o)s(d)e(b)m(y)427
-5092 y(an)m(y)41 b(FITS-W)m(CS)f(complian)m(t)i(soft)m(w)m(are)g(and)e
-(it)h(is)g(lik)m(ely)h(to)f(b)s(e)f(adopted)h(widely)f(for)427
-5205 y(FITS)31 b(data)i(in)e(future.)44 b(F)-8 b(or)32
-b(details)h(of)f(the)g(co)m(v)m(erage)j(of)d(these)g(con)m(v)m(en)m
-(tions)i(pro)m(vided)427 5318 y(b)m(y)d(the)f(FitsChan)g(class,)i(see)f
-(App)s(endix)d(F.)227 5467 y FE(FITS-IRAF)427 5580 y
-FG(This)34 b(enco)s(ding)h(is)f(based)g(on)h(the)g(con)m(v)m(en)m
-(tions)h(describ)s(ed)e(in)g(the)h(do)s(cumen)m(t)f(\\W)-8
-b(orld)427 5693 y(Co)s(ordinate)23 b(Systems)g(Represen)m(tations)h
-(Within)f(the)h(FITS)e(F)-8 b(ormat")25 b(b)m(y)e(R.J.)g(Hanisc)m(h)p
-eop end
-%%Page: 150 160
-TeXDict begin 150 159 bop 0 52 a FG(150)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)427 351 y
-FG(and)25 b(D.G.)h(W)-8 b(ells,)27 b(1988.)1283 318 y
-Fv(25)1399 351 y FG(It)e(is)g(emplo)m(y)m(ed)h(b)m(y)f(the)g(IRAF)g
-(data)g(analysis)h(facilit)m(y)-8 b(,)29 b(so)c(its)427
-464 y(use)i(will)g(facilitate)j(data)d(exc)m(hange)h(with)f(IRAF.)g
-(This)f(enco)s(ding)h(is)g(in)f(e\013ect)i(a)f(sub-set)427
-577 y(of)k(the)f(curren)m(t)h(FITS-W)m(CS)f(enco)s(ding.)227
-731 y FE(FITS-PC)427 844 y FG(This)j(enco)s(ding)g(is)h(based)f(on)g(a)
-h(previous)f(v)m(ersion)g(of)h(the)g(prop)s(osed)e(new)h(FITS)f(W)m(CS)
-427 957 y(standard)26 b(whic)m(h)h(used)f Fy(PCjjjjiii)e
-FG(and)i Fy(CDELTj)f FG(k)m(eyw)m(ords)i(to)g(describ)s(e)g(axis)g
-(rotation)427 1070 y(and)f(scaling.)41 b(V)-8 b(ersions)26
-b(of)h(AST)f(prior)f(to)i(V1.5)h(used)e(this)g(sc)m(heme)h(for)f(the)h
-(FITS-W)m(CS)427 1183 y(enco)s(ding.)51 b(As)34 b(of)g(V1.5,)i(FITS-W)m
-(CS)e(uses)f Fy(CDi_j)f FG(k)m(eyw)m(ords)i(instead.)2997
-1150 y Fv(26)3123 1183 y FG(The)g(FITS-)427 1296 y(PC)j(enco)s(ding)g
-(is)g(included)f(in)g(AST)h(V1.5)h(only)f(to)h(allo)m(w)g(FITS-W)m(CS)e
-(data)i(created)427 1408 y(with)33 b(previous)f(v)m(ersions)h(to)h(b)s
-(e)e(read.)48 b(It)33 b(should)f(not,)i(in)e(general,)j(b)s(e)d(used)g
-(to)i(create)427 1521 y(new)c(data)h(sets.)227 1675 y
-FE(FITS-AIPS)427 1788 y FG(This)38 b(enco)s(ding)h(is)g(based)g(on)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)d(in)g(the)i(do)s(cumen)m(t)
-e(\\Non-)427 1901 y(linear)23 b(Co)s(ordinate)e(Systems)h(in)f(AIPS")h
-(b)m(y)g(Eric)g(W.)g(Greisen)g(\(revised)g(9th)h(Septem)m(b)s(er,)427
-2014 y(1994\).)667 1981 y Fv(27)790 2014 y FG(It)33 b(is)f(curren)m
-(tly)g(emplo)m(y)m(ed)h(b)m(y)f(the)h(AIPS)e(data)i(analysis)g(facilit)
-m(y)-8 b(,)35 b(so)e(its)f(use)427 2127 y(will)26 b(facilitate)i(data)e
-(exc)m(hange)h(with)e(AIPS.)f(This)h(enco)s(ding)g(uses)g
-Fy(CROTAi)e FG(and)i Fy(CDELTi)427 2240 y FG(k)m(eyw)m(ords)31
-b(to)g(describ)s(e)f(axis)h(rotation)g(and)f(scaling.)227
-2394 y FE(FITS-AIPS++)427 2507 y FG(Enco)s(des)c(co)s(ordinate)g
-(system)g(information)g(in)g(FITS)f(header)h(cards)f(using)h(the)g(con)
-m(v)m(en-)427 2620 y(tions)34 b(used)e(b)m(y)h(the)g(AIPS++)f(pro)5
-b(ject.)49 b(This)32 b(is)i(an)f(extension)g(of)g(FITS-AIPS)f(whic)m(h)
-427 2732 y(includes)e(some)h(of)g(the)f(features)h(of)f(FITS-PC)g(and)g
-(FITS-IRAF.)0 3018 y(F)-8 b(or)40 b(more)g(detail)g(ab)s(out)f(the)h
-(ab)s(o)m(v)m(e)g(enco)s(dings,)i(see)e(the)f(description)h(of)f(the)h
-(Enco)s(ding)f(attribute)h(in)0 3131 y(App)s(endix)29
-b(C.)0 3451 y Fw(17.2)112 b(Limitations)39 b(of)f(F)-9
-b(oreign)38 b(Enco)s(dings)0 3684 y FG(The)27 b(foreign)i(enco)s(dings)
-e(a)m(v)-5 b(ailable)30 b(for)e(storing)g(W)m(CS)g(information)g(in)g
-(FITS)f(headers)g(ha)m(v)m(e)j(a)e(n)m(um)m(b)s(er)e(of)0
-3796 y(limitations)k(when)d(compared)h(with)g(the)g(nativ)m(e)h(enco)s
-(ding)f(of)h(AST)e(Ob)5 b(jects)28 b(\()p Fu(x)p FG(16\).)42
-b(The)28 b(main)g(ones)g(are:)111 4082 y(1.)46 b(Only)36
-b(one)h(class)g(of)g(AST)f(Ob)5 b(ject,)38 b(the)f(F)-8
-b(rameSet,)40 b(ma)m(y)d(b)s(e)f(represen)m(ted)g(using)g(a)h(foreign)g
-(FITS)227 4195 y(enco)s(ding.)k(This)29 b(should)h(not)g(come)h(as)g(a)
-g(surprise,)e(b)s(ecause)h(the)h(purp)s(ose)d(of)j(storing)f(W)m(CS)h
-(infor-)227 4308 y(mation)38 b(in)e(FITS)g(headers)h(is)f(to)i(attac)m
-(h)h(co)s(ordinate)e(systems)g(to)g(an)g(asso)s(ciated)h(arra)m(y)g(of)
-f(data.)227 4421 y(Since)d(the)h(F)-8 b(rameSet)35 b(is)f(the)h(AST)e
-(Ob)5 b(ject)34 b(designed)g(for)g(the)h(same)f(purp)s(ose)f(\()p
-Fu(x)p FG(13.4\),)38 b(there)c(is)g(a)227 4534 y(natural)d(corresp)s
-(ondence.)227 4692 y(The)g(w)m(a)m(y)i(in)f(whic)m(h)f(a)h(F)-8
-b(rameSet)33 b(is)f(translated)g(to)h(and)e(from)g(the)h(foreign)g
-(enco)s(ding)g(also)g(follo)m(ws)227 4805 y(from)27 b(this)g(corresp)s
-(ondence.)40 b(The)27 b(F)-8 b(rameSet's)28 b(base)g(F)-8
-b(rame)28 b(iden)m(ti\014es)g(the)g(data)g(grid)f(co)s(ordinates)227
-4918 y(of)41 b(the)g(asso)s(ciated)h(FITS)d(data.)72
-b(These)41 b(are)f(the)h(same)g(as)g(FITS)f(pixel)h(co)s(ordinates,)j
-(in)c(whic)m(h)227 5031 y(the)32 b(\014rst)f(pixel)g(\(in)h(2)g
-(dimensions\))f(has)g(co)s(ordinates)h(\(1,1\))h(at)g(its)e(cen)m(tre.)
-45 b(Similarly)-8 b(,)33 b(the)f(curren)m(t)227 5144
-y(F)-8 b(rame)37 b(of)f(the)g(F)-8 b(rameSet)37 b(iden)m(ti\014es)f
-(the)g(FITS)f(w)m(orld)h(co)s(ordinate)h(system)f(asso)s(ciated)h(with)
-e(the)227 5256 y(data.)p 0 5334 1512 4 v 73 5387 a Fs(25)138
-5419 y Fr(Av)l(ailable)26 b(b)n(y)f(ftp)h(from)g(\014ts.cv.nrao.edu)g
-(/\014ts/do)r(cumen)n(ts/w)n(cs/w)n(cs88.ps.Z)73 5479
-y Fs(26)138 5510 y Fr(There)e(are)h(man)n(y)e(other)g(di\013erences)i
-(b)r(et)n(w)n(een)e(the)h(previous)f(and)h(the)f(curren)n(t)g(FITS-W)n
-(CS)g(enco)r(dings.)35 b(The)24 b(k)n(eyw)n(ords)0 5602
-y(to)i(describ)r(e)g(axis)g(rotation)h(and)e(scaling)i(is)f(used)g
-(purely)f(as)h(a)g(lab)r(el)h(to)f(iden)n(tify)f(the)g(sc)n(heme.)73
-5661 y Fs(27)138 5693 y Fr(Av)l(ailable)h(b)n(y)f(ftp)h(from)g
-(\014ts.cv.nrao.edu)g(/\014ts/do)r(cumen)n(ts/w)n(cs/aips27.ps.Z)p
-eop end
-%%Page: 151 161
-TeXDict begin 151 160 bop 0 52 a Fz(17.3)93 b(Iden)m(tifying)30
-b(F)-8 b(oreign)32 b(Enco)s(dings)e(on)g(Input)1820 b
-FG(151)111 351 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)h(store)f(a)g(represen)m
-(tation)h(of)f(only)f(a)h(single)h(F)-8 b(rameSet)37
-b(in)e(an)m(y)h(individual)f(set)h(of)g(FITS)227 464
-y(header)f(cards)g(\()p Fx(i.e.)g FG(in)g(a)h(single)f(FitsChan\))h(at)
-g(one)f(time.)56 b(If)35 b(y)m(ou)g(attempt)i(to)f(store)f(more)h(than)
-227 577 y(one,)42 b(y)m(ou)d(ma)m(y)g(o)m(v)m(er-write)h(the)f
-(previous)f(one)h(or)g(generate)h(an)f(in)m(v)-5 b(alid)39
-b(represen)m(tation)h(of)f(y)m(our)227 690 y(W)m(CS)31
-b(information.)227 843 y(This)f(is)g(mainly)h(a)f(consequence)h(of)g
-(the)g(use)f(of)g(\014xed)g(FITS)f(k)m(eyw)m(ords)i(b)m(y)f(foreign)h
-(enco)s(dings)f(and)227 956 y(the)h(fact)g(that)g(y)m(ou)g(cannot,)g
-(in)f(general,)i(ha)m(v)m(e)f(m)m(ultiple)g(FITS)f(cards)g(with)g(the)h
-(same)g(k)m(eyw)m(ord.)111 1148 y(3.)46 b(In)36 b(general,)j(it)e(will)
-g(not)g(b)s(e)f(p)s(ossible)g(to)h(store)g(ev)m(ery)g(p)s(ossible)f(F)
--8 b(rameSet)38 b(that)f(y)m(ou)g(migh)m(t)g(con-)227
-1261 y(struct.)67 b(Dep)s(ending)39 b(on)g(the)g(enco)s(ding,)i(only)f
-(certain)g(F)-8 b(rameSets)40 b(that)f(conform)g(to)h(particular)227
-1374 y(restrictions)i(can)e(b)s(e)g(represen)m(ted)h(and,)h(ev)m(en)g
-(then,)h(some)d(of)h(their)g(information)f(ma)m(y)h(b)s(e)f(lost.)227
-1487 y(See)h(the)g(description)f(of)h(the)g(Enco)s(ding)f(attribute)h
-(in)f(App)s(endix)f(C)h(for)g(more)h(details)g(of)g(these)227
-1600 y(limitations.)0 1869 y(It)26 b(should)g(b)s(e)f(understo)s(o)s(d)
-g(that)h(using)g(foreign)h(enco)s(dings)f(to)h(read)f(and)f(write)i
-(information)f(held)g(in)g(AST)0 1982 y(Ob)5 b(jects)24
-b(is)f(essen)m(tially)j(a)e(pro)s(cess)f(of)h(con)m(v)m(erting)h(the)f
-(data)g(format.)39 b(As)24 b(suc)m(h,)h(it)f(p)s(oten)m(tially)h
-(su\013ers)e(from)0 2095 y(the)k(same)h(problems)e(faced)h(b)m(y)g(all)
-h(suc)m(h)f(pro)s(cesses,)h Fx(i.e.)e FG(di\013erences)h(b)s(et)m(w)m
-(een)h(the)f(AST)g(data)g(mo)s(del)g(and)0 2208 y(that)j(of)g(the)g
-(foreign)g(enco)s(ding)f(ma)m(y)h(cause)g(some)g(information)g(to)g(b)s
-(e)f(lost.)42 b(Because)30 b(the)g(AST)f(mo)s(del)g(is)0
-2321 y(extremely)h(\015exible,)f(ho)m(w)m(ev)m(er,)i(an)m(y)d(data)i
-(loss)f(can)f(largely)i(b)s(e)e(eliminated)i(when)d(reading.)41
-b(Instead,)29 b(this)0 2434 y(e\013ect)37 b(manifests)e(itself)h(in)f
-(the)h(form)f(of)g(the)h(ab)s(o)m(v)m(e)g(enco)s(ding-dep)s(enden)m(t)f
-(restrictions)h(on)f(the)h(kind)e(of)0 2547 y(AST)c(Ob)5
-b(jects)30 b(whic)m(h)g(ma)m(y)h(b)s(e)f(written.)0 2712
-y(One)d(of)g(the)g(aims)h(of)f(the)g(AST)g(library)-8
-b(,)28 b(of)f(course,)h(is)f(to)h(insulate)g(y)m(ou)f(from)g(the)g
-(details)h(of)g(these)f(foreign)0 2825 y(enco)s(dings)35
-b(and)f(the)i(restrictions)f(they)h(imp)s(ose.)54 b(W)-8
-b(e)36 b(will)g(see)f(shortly)-8 b(,)37 b(therefore,)g(ho)m(w)e(AST)f
-(pro)m(vides)0 2938 y(a)d(mec)m(hanism)h(for)e(determining)h(whether)g
-(y)m(our)g(W)m(CS)g(information)g(satis\014es)g(the)h(necessary)f
-(conditions)0 3051 y(and)f(allo)m(ws)h(y)m(ou)g(to)g(mak)m(e)h(an)e
-(automatic)i(c)m(hoice)g(of)f(whic)m(h)f(enco)s(ding)g(to)h(use.)0
-3352 y Fw(17.3)112 b(Iden)m(tifying)39 b(F)-9 b(oreign)37
-b(Enco)s(dings)h(on)g(Input)0 3577 y FG(Let)28 b(us)f(no)m(w)h(examine)
-g(the)g(practicalities)i(of)e(extracting)h(W)m(CS)f(information)g(from)
-f(a)h(set)g(of)g(FITS)f(header)0 3690 y(cards)c(whic)m(h)g(ha)m(v)m(e)i
-(b)s(een)d(written)i(b)m(y)f(some)g(other)h(soft)m(w)m(are)h(system.)38
-b(W)-8 b(e)25 b(will)e(pretend)g(that)h(our)f(program)0
-3803 y(do)s(es)32 b(not)g(kno)m(w)h(whic)m(h)f(enco)s(ding)g(has)g(b)s
-(een)f(used)h(for)g(the)g(W)m(CS)h(information)f(and)g(m)m(ust)g(disco)
-m(v)m(er)i(this)0 3916 y(for)e(itself.)48 b(In)32 b(order)g(to)h(ha)m
-(v)m(e)h(a)f(concrete)h(example,)g(ho)m(w)m(ev)m(er,)g(w)m(e)f(will)g
-(use)f(the)h(follo)m(wing)h(set)f(of)f(cards.)0 4029
-y(These)k(use)g(the)h(FITS-AIPS)e(enco)s(ding)h(and)g(con)m(tain)h(a)g
-(t)m(ypical)h(mix)e(of)h(other)f(FITS)g(cards)g(whic)m(h)g(are)0
-4142 y(irrelev)-5 b(an)m(t)32 b(to)f(the)f(W)m(CS)h(information)f(in)g
-(whic)m(h)g(w)m(e)h(are)g(in)m(terested:)227 4398 y Ft(SIMPLE)85
-b(=)871 b(T)43 b(/)h(Written)c(by)j(IDL:)86 b(30-Jul-1997)39
-b(05:35:42.00)227 4497 y(BITPIX)85 b(=)784 b(-32)42 b(/)i(Bits)e(per)g
-(pixel.)227 4597 y(NAXIS)129 b(=)871 b(2)43 b(/)h(Number)d(of)h
-(dimensions)227 4697 y(NAXIS1)85 b(=)784 b(300)42 b(/)i(Length)d(of)h
-(x)i(axis.)227 4796 y(NAXIS2)85 b(=)784 b(300)42 b(/)i(Length)d(of)h(y)
-i(axis.)227 4896 y(CTYPE1)85 b(=)43 b('GLON-ZEA')475
-b(/)44 b(X-axis)d(type)227 4996 y(CTYPE2)85 b(=)43 b('GLAT-ZEA')475
-b(/)44 b(Y-axis)d(type)227 5095 y(CRVAL1)85 b(=)479 b(-149.56866)39
-b(/)44 b(Reference)39 b(pixel)j(value)227 5195 y(CRVAL2)85
-b(=)479 b(-19.758201)39 b(/)44 b(Reference)39 b(pixel)j(value)227
-5295 y(CRPIX1)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5394 y(CRPIX2)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5494 y(CDELT1)85 b(=)566 b(-1.20000)40 b(/)k(Degrees/pixel)
-227 5593 y(CDELT2)85 b(=)610 b(1.20000)40 b(/)k(Degrees/pixel)227
-5693 y(CROTA1)85 b(=)610 b(0.00000)40 b(/)k(Rotation)c(in)j(degrees.)p
-eop end
-%%Page: 152 162
-TeXDict begin 152 161 bop 0 52 a FG(152)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)227 351 y
-Ft(SURVEY)85 b(=)43 b('COBE)f(DIRBE')227 451 y(BUNITS)85
-b(=)43 b('MJy/sr)84 b(')479 b(/)227 551 y(ORIGIN)85 b(=)43
-b('CDAC)172 b(')479 b(/)44 b(Cosmology)39 b(Data)j(Analysis)f(Center)
-227 650 y(TELESCOP=)f('COBE)172 b(')479 b(/)44 b(COsmic)d(Background)e
-(Explorer)h(satellite)227 750 y(INSTRUME=)g('DIRBE)128
-b(')479 b(/)44 b(COBE)e(instrument)d([DIRBE,)i(DMR,)h(FIRAS])227
-849 y(PIXRESOL=)868 b(9)43 b(/)h(Quad)e(tree)f(pixel)h(resolution)d
-([6,)k(9])227 949 y(DATE)173 b(=)43 b('27/09/94')475
-b(/)44 b(FITS)e(file)f(creation)g(date)h(\(dd/mm/yy\))227
-1049 y(DATE-MAP=)e('16/09/94')475 b(/)44 b(Date)e(of)g(original)f(file)
-h(creation)e(\(dd/mm/yy\))227 1148 y(COMMENT)215 b(COBE)42
-b(specific)f(keywords)227 1248 y(DATE-BEG=)f('08/12/89')475
-b(/)44 b(date)e(of)g(initial)f(data)h(represented)d(\(dd/mm/yy\))227
-1348 y(DATE-END=)h('25/09/90')475 b(/)44 b(date)e(of)g(final)g(data)g
-(represented)126 b(\(dd/mm/yy\))0 1589 y FG(The)34 b(\014rst)g(step)g
-(is)h(to)g(create)h(a)f(FitsChan)f(and)g(insert)g(these)h(cards)f(in)m
-(to)i(it.)53 b(If)34 b(CARDS)g(is)h(an)f(arra)m(y)h(of)0
-1702 y(c)m(haracter)e(strings)f(holding)g(the)g(header)f(cards)h(and)f
-(NCARDS)h(is)g(the)g(n)m(um)m(b)s(er)e(of)i(cards,)g(this)g(could)g(b)s
-(e)0 1815 y(done)e(as)h(follo)m(ws:)262 2043 y Ft(INCLUDE)40
-b('AST_PAR')262 2143 y(INTEGER)g(FITSCHAN,)g(ICARD,)h(NCARD,)g(STATUS)
-262 2242 y(CHARACTER)e(*)44 b(\()f(80)f(\))i(CARDS\()d(NCARD)g(\))262
-2442 y(STATUS)g(=)i(0)262 2641 y(...)262 2840 y(FITSCHAN)d(=)j
-(AST_FITSCHAN\()38 b(AST_NULL,)i(AST_NULL,)g(')j(',)g(STATUS)e(\))262
-2940 y(DO)h(1)h(ICARD)f(=)h(1,)g(NCARD)392 3039 y(CALL)f(AST_PUTFITS\()
-d(FITSCHAN,)h(CARDS\()h(ICARD)g(\),)i(.FALSE.,)d(STATUS)h(\))44
-3139 y(1)174 b(CONTINUE)0 3381 y FG(Note)25 b(that)g(w)m(e)g(ha)m(v)m
-(e)g(not)g(initialised)g(the)f(Enco)s(ding)g(attribute)h(of)f(the)g
-(FitsChan)g(as)h(w)m(e)f(did)g(in)f Fu(x)p FG(16.3)j(when)0
-3493 y(w)m(e)37 b(w)m(an)m(ted)f(to)h(use)f(the)g(nativ)m(e)i(enco)s
-(ding.)57 b(This)36 b(is)g(b)s(ecause)g(w)m(e)h(are)f(pretending)g(not)
-g(to)h(kno)m(w)f(whic)m(h)0 3606 y(enco)s(ding)29 b(to)i(use)e(and)g(w)
-m(an)m(t)h(AST)f(to)h(determine)g(this)f(for)h(us.)39
-b(By)30 b(lea)m(ving)h(the)f(Enco)s(ding)f(attribute)h(un-)0
-3719 y(set,)k(its)g(default)f(v)-5 b(alue)33 b(will)g(adjust)f(to)i
-(whic)m(hev)m(er)g(enco)s(ding)e(AST)g(considers)h(to)h(b)s(e)e(most)h
-(appropriate,)0 3832 y(according)40 b(to)g(the)f(FITS)f(header)h(cards)
-f(presen)m(t.)67 b(F)-8 b(or)40 b(details)g(of)f(ho)m(w)g(this)g(c)m
-(hoice)h(is)f(made,)j(see)d(the)0 3945 y(description)30
-b(of)h(the)g(Enco)s(ding)e(attribute)i(in)f(App)s(endix)f(C.)0
-4103 y(This)38 b(approac)m(h)i(has)f(the)g(ob)m(vious)h(adv)-5
-b(an)m(tages)40 b(of)g(making)f(our)g(program)g(simpler)f(and)h(more)g
-(\015exible)0 4216 y(and)34 b(of)g(freeing)g(us)g(from)g(ha)m(ving)g
-(to)h(kno)m(w)g(ab)s(out)e(the)i(di\013eren)m(t)f(enco)s(dings)g(a)m(v)
--5 b(ailable.)55 b(As)34 b(a)h(b)s(on)m(us,)f(it)0 4328
-y(also)e(means)e(that)h(the)g(program)f(will)h(b)s(e)f(able)h(to)h
-(read)e(an)m(y)h(new)f(enco)s(dings)h(that)g(AST)f(ma)m(y)h(supp)s(ort)
-e(in)0 4441 y(future,)h(without)g(needing)g(to)i(b)s(e)d(c)m(hanged.)0
-4599 y(A)m(t)40 b(this)g(p)s(oin)m(t,)i(w)m(e)e(could)g(enquire)f(the)g
-(default)h(v)-5 b(alue)40 b(of)g(the)g(Enco)s(ding)e(attribute,)43
-b(whic)m(h)d(indicates)0 4712 y(whic)m(h)30 b(enco)s(ding)g(AST)g(in)m
-(tends)g(to)h(use,)g(as)f(follo)m(ws:)262 4940 y Ft(CHARACTER)39
-b(*)44 b(\()f(20)f(\))i(ENCODE)262 5139 y(...)262 5339
-y(ENCODE)d(=)i(AST_GETC\()d(FITSCHAN,)g('Encoding',)f(STATUS)i(\))0
-5580 y FG(The)32 b(result)g(of)h(this)f(enquiry)f(w)m(ould)h(b)s(e)g
-(the)h(string)f(\\FITS-AIPS".)g(Note)i(that)f(w)m(e)g(could)f(also)h
-(ha)m(v)m(e)h(set)0 5693 y(the)d(FitsChan's)f(Enco)s(ding)g(attribute)h
-(explicitly)-8 b(,)32 b(suc)m(h)e(as)h(when)e(creating)j(it:)p
-eop end
-%%Page: 153 163
-TeXDict begin 153 162 bop 0 52 a Fz(17.4)93 b(Reading)30
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)
-1164 b FG(153)262 351 y Ft(FITSCHAN)40 b(=)j(AST_FITSCHAN\()38
-b(AST_NULL,)i(AST_NULL,)g('Encoding=FITS-A)o(IP)o(S',)d(STATUS)k(\))0
-615 y FG(If)c(w)m(e)i(tried)f(to)g(read)g(information)g(using)g(this)f
-(enco)s(ding)h(\()p Fu(x)p FG(17.4\),)43 b(but)37 b(failed,)k(w)m(e)d
-(could)g(then)f(c)m(hange)0 728 y(the)30 b(enco)s(ding)f(and)g(try)g
-(again.)41 b(This)29 b(w)m(ould)g(allo)m(w)i(our)e(program)g(to)h(tak)m
-(e)h(con)m(trol)g(of)e(ho)m(w)h(the)f(optim)m(um)0 841
-y(c)m(hoice)k(of)e(enco)s(ding)h(is)f(arriv)m(ed)g(at.)44
-b(Ho)m(w)m(ev)m(er,)34 b(it)e(w)m(ould)f(also)h(in)m(v)m(olv)m(e)h
-(using)e(explicit)i(kno)m(wledge)f(of)f(the)0 954 y(enco)s(dings)f(a)m
-(v)-5 b(ailable)33 b(and)d(this)g(is)g(b)s(est)g(a)m(v)m(oided)i(if)e
-(p)s(ossible.)0 1249 y Fw(17.4)112 b(Reading)39 b(F)-9
-b(oreign)37 b(W)m(CS)h(Information)g(from)g(a)g(FITS)f(Header)0
-1471 y FG(Ha)m(ving)f(stored)f(a)h(set)f(of)h(FITS)e(header)h(cards)f
-(in)h(a)g(FitsChan)g(and)g(determined)f(ho)m(w)h(the)h(W)m(CS)f(infor-)
-0 1584 y(mation)k(is)f(enco)s(ded)f(\()p Fu(x)p FG(17.3\),)43
-b(the)38 b(next)g(step)h(is)f(to)g(read)g(an)g(AST)f(Ob)5
-b(ject)38 b(from)g(the)g(FitsChan)g(using)0 1697 y(AST)p
-Fy(_)p FG(READ.)i(W)-8 b(e)41 b(m)m(ust)f(also)i(remem)m(b)s(er)d(to)i
-(rewind)e(the)i(FitsChan)f(\014rst,)i(if)e(necessary)-8
-b(,)44 b(suc)m(h)c(as)h(b)m(y)0 1810 y(clearing)32 b(its)e(Card)g
-(attribute,)h(whic)m(h)f(defaults)h(to)g(1:)262 2060
-y Ft(INTEGER)40 b(WCSINFO)262 2260 y(...)262 2459 y(CALL)h(AST_CLEAR\()
-f(FITSCHAN,)g('Card',)g(STATUS)i(\))262 2559 y(WCSINFO)e(=)j
-(AST_READ\()d(FITSCHAN,)g(STATUS)h(\))0 2822 y FG(If)32
-b(the)g(p)s(oin)m(ter)g(returned)f(b)m(y)h(AST)p Fy(_)p
-FG(READ)f(is)h(not)g(equal)h(to)g(AST)p Fy(__)p FG(NULL,)e(then)g(an)h
-(Ob)5 b(ject)32 b(has)g(b)s(een)0 2935 y(read)40 b(successfully)-8
-b(.)71 b(Otherwise,)43 b(there)d(w)m(as)h(either)f(no)g(information)h
-(to)g(read)f(or)g(the)h(c)m(hoice)h(of)e(FITS)0 3048
-y(enco)s(ding)30 b(\()p Fu(x)p FG(17.3\))j(w)m(as)e(inappropriate.)0
-3212 y(A)m(t)37 b(this)f(p)s(oin)m(t)f(y)m(ou)i(migh)m(t)f(lik)m(e)h
-(to)g(indulge)f(in)f(a)i(little)g(data)g(v)-5 b(alidation)37
-b(along)g(the)f(lines)g(describ)s(ed)f(in)0 3324 y Fu(x)p
-FG(15.6,)e(for)d(example:)262 3575 y Ft(IF)42 b(\()h(AST_GETC\()d
-(WCSINFO,)h('Class',)f(STATUS)h(\))i(.EQ.)f('FrameSet')e(\))j(THEN)392
-3675 y(<the)f(Object)f(is)i(a)g(FrameSet,)d(so)j(use)f(it>)262
-3774 y(ELSE)392 3874 y(<something)e(unexpected)f(was)k(read>)262
-3974 y(END)f(IF)0 4237 y FG(If)26 b(a)h(foreign)f(enco)s(ding)h(has)f
-(de\014nitely)g(b)s(een)g(used,)h(then)f(the)g(Ob)5 b(ject)27
-b(will)g(automatically)i(b)s(e)d(a)g(F)-8 b(rameSet)0
-4350 y(\()p Fu(x)p FG(17.2\),)35 b(so)d(this)f(stage)j(can)d(b)s(e)h
-(omitted.)45 b(Ho)m(w)m(ev)m(er,)34 b(if)e(the)g(nativ)m(e)h(enco)s
-(ding)f(\()p Fu(x)p FG(16.1\))i(migh)m(t)e(ha)m(v)m(e)h(b)s(een)0
-4463 y(emplo)m(y)m(ed,)h(whic)m(h)d(is)h(a)g(p)s(ossibilit)m(y)h(if)f
-(y)m(ou)g(accept)h(the)f(FitsChan's)g(default)g(Enco)s(ding)g(v)-5
-b(alue,)33 b(then)e(an)m(y)0 4576 y(class)g(of)g(Ob)5
-b(ject)30 b(migh)m(t)h(ha)m(v)m(e)h(b)s(een)e(read)g(and)g(a)g(quic)m
-(k)h(c)m(hec)m(k)h(w)m(ould)e(b)s(e)g(w)m(orth)m(while.)0
-4739 y(If)23 b(y)m(ou)h(used)f(AST)p Fy(_)p FG(SHO)m(W)g(\()p
-Fu(x)p FG(4.4\))i(to)g(examine)f(the)g(F)-8 b(rameSet)24
-b(whic)m(h)g(results)f(from)g(reading)h(our)f(example)0
-4852 y(FITS)29 b(header)g(\()p Fu(x)p FG(17.3\),)k(y)m(ou)d(w)m(ould)g
-(\014nd)e(that)i(its)g(base)g(F)-8 b(rame)31 b(describ)s(es)e(the)h
-(image's)h(pixel)f(co)s(ordinate)0 4965 y(system)i(and)f(that)h(its)g
-(curren)m(t)g(F)-8 b(rame)32 b(is)g(a)g(SkyF)-8 b(rame)32
-b(represen)m(ting)g(galactic)i(co)s(ordinates.)46 b(These)31
-b(t)m(w)m(o)0 5078 y(F)-8 b(rames)34 b(are)f(in)m(ter-related)i(b)m(y)d
-(a)i(Mapping)f(\(actually)h(a)g(CmpMap\))e(whic)m(h)h(incorp)s(orates)g
-(the)g(e\013ects)h(of)0 5191 y(v)-5 b(arious)32 b(rotations,)h
-(scalings)f(and)f(a)h(\\zenithal)h(equal)f(area")h(sky)e(pro)5
-b(jection,)33 b(so)f(that)g(eac)m(h)h(pixel)f(of)f(the)0
-5304 y(FITS)f(image)h(is)g(mapp)s(ed)e(on)h(to)h(a)g(corresp)s(onding)e
-(sky)h(p)s(osition)h(in)f(galactic)j(co)s(ordinates.)0
-5467 y(Because)f(this)f(F)-8 b(rameSet)31 b(ma)m(y)h(b)s(e)e(used)g(b)s
-(oth)g(as)g(a)h(Mapping)g(\()p Fu(x)p FG(13.6\))i(and)d(as)h(a)g(F)-8
-b(rame)32 b(\()p Fu(x)p FG(13.8\),)i(it)d(ma)m(y)0 5580
-y(b)s(e)d(emplo)m(y)m(ed)j(directly)e(to)h(p)s(erform)e(man)m(y)h
-(useful)f(op)s(erations)i(without)f(an)m(y)g(need)g(to)h(decomp)s(ose)f
-(it)g(in)m(to)0 5693 y(its)i(comp)s(onen)m(t)f(parts.)41
-b(These)30 b(include:)p eop end
-%%Page: 154 164
-TeXDict begin 154 163 bop 0 52 a FG(154)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)136 351 y
-Fu(\017)46 b FG(T)-8 b(ransforming)32 b(data)h(grid)f(\(FITS)f(pixel\))
-i(co)s(ordinates)g(in)m(to)g(galactic)j(co)s(ordinates)c(and)g
-Fx(vic)-5 b(e)34 b(versa)227 464 y FG(\()p Fu(x)p FG(13.6\).)136
-650 y Fu(\017)46 b FG(F)-8 b(ormatting)35 b(co)s(ordinate)e(v)-5
-b(alues)33 b(\(either)h(pixel)f(or)f(galactic)k(co)s(ordinates\))e
-(ready)e(for)h(displa)m(y)g(to)g(a)227 763 y(user)d(\()p
-Fu(x)p FG(7.6)i(and)e Fu(x)p FG(7.7\).)136 949 y Fu(\017)46
-b FG(Enquiring)38 b(ab)s(out)g(axis)h(lab)s(els)f(\(or)h(other)f(axis)h
-(information|)p Fu(x)p FG(7.5\))i(whic)m(h)d(migh)m(t)h(b)s(e)f(used,)i
-(for)227 1062 y(example,)32 b(to)f(lab)s(el)f(columns)g(of)h(co)s
-(ordinates)g(in)f(a)h(table)g(\()p Fu(x)p FG(7.4\).)136
-1247 y Fu(\017)46 b FG(Aligning)31 b(the)e(image)i(with)e(another)h
-(image)h(from)e(whic)m(h)g(a)h(similar)f(F)-8 b(rameSet)31
-b(has)e(b)s(een)g(obtained)227 1360 y(\()p Fu(x)p FG(14.3\).)136
-1546 y Fu(\017)46 b FG(Creating)40 b(a)g(Plot)h(\()p
-Fu(x)p FG(21\),)j(whic)m(h)39 b(can)h(b)s(e)e(used)h(to)h(o)m(v)m(erla)
-m(y)i(a)e(v)-5 b(ariet)m(y)41 b(of)f(graphical)g(information)227
-1659 y(\(including)31 b(a)f(co)s(ordinate)i(grid|Figure)e(8\))h(on)g
-(the)f(displa)m(y)m(ed)h(image.)136 1845 y Fu(\017)46
-b FG(Generating)30 b(a)g(new)e(F)-8 b(rameSet)30 b(whic)m(h)e
-(re\015ects)i(an)m(y)f(geometrical)i(pro)s(cessing)e(y)m(ou)g(p)s
-(erform)f(on)g(the)227 1958 y(asso)s(ciated)41 b(image)g(data)f(\()p
-Fu(x)p FG(14.5\).)71 b(This)39 b(new)g(F)-8 b(rameSet)41
-b(could)f(then)f(b)s(e)g(written)h(out)f(as)h(FITS)227
-2071 y(headers)30 b(to)h(describ)s(e)f(the)h(mo)s(di\014ed)e(image)j
-(\()p Fu(x)p FG(17.7\).)0 2326 y(If)22 b(the)h(F)-8 b(rameSet)23
-b(con)m(tains)h(other)f(F)-8 b(rames)23 b(\(apart)g(from)f(the)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames\),)26 b(then)c(y)m(ou)h(w)m(ould)0
-2439 y(also)31 b(ha)m(v)m(e)h(access)g(to)f(information)f(ab)s(out)g
-(other)h(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(the)g(image.)
-0 2729 y Fw(17.5)112 b(Remo)m(ving)26 b(W)m(CS)g(Information)g(from)g
-(FITS)g(Headers|the)g(Destructiv)m(e)f(Read)0 2949 y
-FG(It)d(is)f(instructiv)m(e)i(at)f(this)g(p)s(oin)m(t)f(to)h(examine)h
-(the)e(con)m(ten)m(ts)j(of)e(a)f(FitsChan)h(after)g(w)m(e)g(ha)m(v)m(e)
-h(read)e(a)h(F)-8 b(rameSet)0 3062 y(from)30 b(it)h(\()p
-Fu(x)p FG(17.4\).)43 b(The)30 b(follo)m(wing)i(w)m(ould)e(rewind)f(our)
-h(FitsChan)g(and)g(displa)m(y)h(its)g(con)m(ten)m(ts:)262
-3303 y Ft(CHARACTER)39 b(CARD)j(*)h(\()h(80)e(\))262
-3503 y(...)262 3702 y(CALL)f(AST_CLEAR\()f(FITSCHAN,)g('Card',)g
-(STATUS)i(\))44 3801 y(2)174 b(CONTINUE)262 3901 y(IF)42
-b(\()h(AST_FINDFITS\()c(FITSCHAN,)h('\045f',)h(CARD,)h(.TRUE.,)e
-(STATUS)h(\))j(\))f(THEN)392 4001 y(WRITE)f(\()h(*,)g('\(A\)')e(\))i
-(CARD)392 4100 y(GO)g(TO)g(2)262 4200 y(END)f(IF)0 4455
-y FG(The)30 b(output,)g(if)g(w)m(e)h(started)g(with)f(the)h(example)g
-(FITS)e(header)i(in)f Fu(x)p FG(17.3,)i(migh)m(t)f(lo)s(ok)g(lik)m(e)h
-(this:)227 4697 y Ft(SIMPLE)85 b(=)871 b(T)43 b(/)87
-b(Written)41 b(by)i(IDL:)85 b(30-Jul-1997)39 b(05:35:42.00)227
-4796 y(BITPIX)85 b(=)784 b(-32)42 b(/)87 b(Bits)42 b(per)g(pixel.)227
-4896 y(NAXIS)129 b(=)871 b(2)43 b(/)87 b(Number)41 b(of)i(dimensions)
-227 4996 y(NAXIS1)85 b(=)784 b(300)42 b(/)87 b(Length)41
-b(of)i(x)g(axis.)227 5095 y(NAXIS2)85 b(=)784 b(300)42
-b(/)87 b(Length)41 b(of)i(y)g(axis.)227 5195 y(SURVEY)85
-b(=)43 b('COBE)f(DIRBE')227 5295 y(BUNITS)85 b(=)43 b('MJy/sr)84
-b(')227 5394 y(ORIGIN)h(=)43 b('CDAC)172 b(')479 b(/)87
-b(Cosmology)40 b(Data)i(Analysis)e(Center)227 5494 y(TELESCOP=)g('COBE)
-172 b(')479 b(/)87 b(COsmic)41 b(Background)f(Explorer)g(satellite)227
-5593 y(INSTRUME=)g('DIRBE)128 b(')479 b(/)87 b(COBE)42
-b(instrument)e([DIRBE,)g(DMR,)i(FIRAS])227 5693 y(PIXRESOL=)868
-b(9)43 b(/)87 b(Quad)42 b(tree)g(pixel)g(resolution)d([6,)j(9])p
-eop end
-%%Page: 155 165
-TeXDict begin 155 164 bop 0 52 a Fz(17.6)93 b(Propagating)31
-b(W)m(CS)g(Information)f(through)g(Data)i(Pro)s(cessing)e(Steps)904
-b FG(155)227 351 y Ft(DATE)173 b(=)43 b('27/09/94')475
-b(/)87 b(FITS)42 b(file)g(creation)e(date)i(\(dd/mm/yy\))227
-451 y(DATE-MAP=)e('16/09/94')475 b(/)87 b(Date)42 b(of)h(original)d
-(file)i(creation)e(\(dd/mm/yy\))227 551 y(COMMENT)215
-b(COBE)42 b(specific)f(keywords)227 650 y(DATE-BEG=)f('08/12/89')475
-b(/)87 b(date)42 b(of)h(initial)e(data)h(represented)d(\(dd/mm/yy\))227
-750 y(DATE-END=)h('25/09/90')475 b(/)87 b(date)42 b(of)h(final)e(data)h
-(represented)127 b(\(dd/mm/yy\))0 1018 y FG(Comparing)42
-b(this)f(with)h(the)g(original,)k(y)m(ou)d(can)f(see)g(that)h(all)g
-(the)f(FITS)f(cards)h(that)g(represen)m(t)g(W)m(CS)0
-1131 y(information)36 b(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed.)59
-b(They)35 b(ha)m(v)m(e)i(e\013ectiv)m(ely)i(b)s(een)d(\\suc)m(k)m(ed)h
-(out")f(of)g(the)h(FitsChan)f(b)m(y)0 1244 y(the)41 b(destructiv)m(e)h
-(read)f(that)h(AST)p Fy(_)p FG(READ)f(p)s(erforms)e(and)i(con)m(v)m
-(erted)h(in)m(to)g(an)f(equiv)-5 b(alen)m(t)43 b(F)-8
-b(rameSet.)0 1357 y(AST)35 b(remem)m(b)s(ers)h(where)f(they)i(w)m(ere)f
-(stored,)i(ho)m(w)m(ev)m(er,)i(so)c(that)h(if)f(w)m(e)g(later)i(write)e
-(W)m(CS)g(information)0 1470 y(bac)m(k)28 b(in)m(to)h(the)e(FitsChan)g
-(\()p Fu(x)p FG(17.7\))j(they)e(will,)h(as)e(far)g(as)h(p)s(ossible,)g
-(go)g(bac)m(k)g(in)m(to)h(their)e(original)i(lo)s(cations.)0
-1583 y(This)h(helps)f(to)j(preserv)m(e)e(the)h(o)m(v)m(erall)h(la)m(y)m
-(out)h(of)d(the)h(FITS)e(header.)0 1747 y(Y)-8 b(ou)32
-b(can)f(no)m(w)h(see)f(wh)m(y)g(AST)p Fy(_)p FG(READ)g(p)s(erforms)e
-(destructiv)m(e)k(reads.)43 b(It)31 b(is)g(a)h(mec)m(hanism)g(for)f
-(remo)m(ving)0 1860 y(W)m(CS)g(information)h(from)f(a)h(FITS)e(header)i
-(while)f(insulating)h(y)m(ou,)g(as)g(a)f(programmer,)h(from)f(the)g
-(details)0 1973 y(of)j(the)g(enco)s(ding)f(b)s(eing)h(used.)49
-b(It)34 b(means)g(y)m(ou)g(can)g(ensure)f(that)h(all)g(relev)-5
-b(an)m(t)35 b(header)f(cards)f(ha)m(v)m(e)i(b)s(een)0
-2086 y(remo)m(v)m(ed,)30 b(giving)f(y)m(ou)g(a)f(clean)h(slate,)h
-(without)f(ha)m(ving)f(to)h(kno)m(w)g(whic)m(h)f(FITS)f(k)m(eyw)m(ords)
-i(an)m(y)f(particular)0 2199 y(enco)s(ding)i(uses.)0
-2364 y(Clearing)c(this)g(W)m(CS)f(information)h(out)g(of)g(a)g(FITS)f
-(header)h(is)g(particularly)g(imp)s(ortan)m(t)g(when)e(considering)0
-2477 y(ho)m(w)35 b(to)h(write)f(new)f(W)m(CS)h(information)g(bac)m(k)h
-(after)g(pro)s(cessing)e(\()p Fu(x)p FG(17.7\).)57 b(If)35
-b(an)m(y)g(relev)-5 b(an)m(t)36 b(FITS)f(cards)0 2590
-y(are)25 b(left)h(o)m(v)m(er)h(from)d(the)h(input)f(dataset)j(and)d
-(\014nd)g(their)h(w)m(a)m(y)h(in)m(to)g(the)f(new)g(pro)s(cessed)f
-(header,)i(they)f(could)0 2702 y(in)m(terfere)38 b(with)f(the)h(new)f
-(information)h(b)s(eing)f(written.)2003 2669 y Fv(28)2140
-2702 y FG(The)g(destructiv)m(e)h(read)g(mec)m(hanism)f(ensures)0
-2815 y(that)31 b(this)f(do)s(esn't)g(happ)s(en.)0 3115
-y Fw(17.6)112 b(Propagating)38 b(W)m(CS)g(Information)g(through)g(Data)
-f(Pro)s(cessing)h(Steps)0 3340 y FG(One)43 b(of)h(the)g(purp)s(oses)e
-(of)i(AST)f(is)h(to)g(mak)m(e)h(it)f(feasible)h(to)f(propagate)h(W)m
-(CS)f(information)g(through)0 3453 y(successiv)m(e)d(stages)g(of)f
-(data)h(pro)s(cessing,)h(so)e(that)h(it)f(remains)g(consisten)m(t)h
-(with)f(the)g(asso)s(ciated)h(image)0 3565 y(data.)46
-b(As)32 b(far)g(as)g(p)s(ossible,)h(this)e(should)g(happ)s(en)g
-(regardless)h(of)g(the)g(FITS)g(enco)s(ding)g(used)f(to)i(store)f(the)0
-3678 y(original)g(W)m(CS)e(information.)0 3843 y(If)36
-b(the)h(data)h(pro)s(cessing)f(b)s(eing)f(p)s(erformed)g(do)s(es)g(not)
-h(c)m(hange)h(the)f(relationship)g(b)s(et)m(w)m(een)h(image)g(pixel)0
-3956 y(and)d(w)m(orld)g(co)s(ordinates)h(\(whatev)m(er)h(these)f(ma)m
-(y)g(b)s(e\),)g(then)g(propagation)g(of)g(the)f(W)m(CS)h(information)f
-(is)0 4069 y(straigh)m(tforw)m(ard.)42 b(Y)-8 b(ou)30
-b(can)h(simply)f(cop)m(y)h(the)g(FITS)e(header)h(from)g(input)g(to)h
-(output.)0 4234 y(If)k(this)h(relationship)g(c)m(hanges,)i(ho)m(w)m(ev)
-m(er,)g(then)e(the)f(W)m(CS)h(information)g(m)m(ust)f(b)s(e)g(pro)s
-(cessed)g(alongside)0 4346 y(the)d(image)h(data)f(and)f(a)h(new)f(FITS)
-g(header)g(generated)h(to)h(represen)m(t)e(it.)45 b(In)31
-b(this)g(case,)j(the)d(sequence)h(of)0 4459 y(op)s(erations)f(within)f
-(y)m(our)g(program)g(w)m(ould)g(probably)g(b)s(e)f(as)i(follo)m(ws:)111
-4728 y(1.)46 b(Read)c(the)f(image)i(data)e(and)g(asso)s(ciated)i(FITS)d
-(header)h(from)g(the)g(input)g(dataset,)k(putting)c(the)227
-4841 y(header)30 b(cards)h(in)m(to)g(a)g(FitsChan)f(\()p
-Fu(x)p FG(17.3\).)111 5032 y(2.)46 b(Read)c(an)f(AST)f(Ob)5
-b(ject,)45 b(a)c(F)-8 b(rameSet,)46 b(from)40 b(the)i(FitsChan)f(\(t)m
-(ypically)i(using)e(a)h(foreign)f(FITS)227 5145 y(enco)s(ding|)p
-Fu(x)p FG(17.4\).)111 5337 y(3.)46 b(Pro)s(cess)31 b(the)f(image)i
-(data)f(and)f(mo)s(dify)f(the)i(F)-8 b(rameSet)31 b(accordingly)h(\()p
-Fx(e.g.)e Fu(x)p FG(14.5\).)p 0 5425 1512 4 v 73 5479
-a Fs(28)138 5510 y Fr(This)d(can)g(happ)r(en)f(if)h(a)g(particular)g(k)
-n(eyw)n(ord)f(is)i(presen)n(t)e(in)g(the)g(input)g(header)h(but)e(is)j
-(not)e(used)g(in)h(the)f(output)f(header)0 5602 y(\(whether)30
-b(particular)g(k)n(eyw)n(ords)g(are)g(used)f(can)h(dep)r(end)f(on)h
-(the)f(W)n(CS)h(information)h(b)r(eing)f(stored\).)47
-b(In)29 b(suc)n(h)h(a)g(case,)i(the)0 5693 y(original)27
-b(v)l(alue)f(w)n(ould)g(not)f(b)r(e)h(o)n(v)n(er-written)f(b)n(y)g(a)h
-(new)g(output)f(v)l(alue,)g(so)i(w)n(ould)f(remain)g(erroneously)g
-(presen)n(t.)p eop end
-%%Page: 156 166
-TeXDict begin 156 165 bop 0 52 a FG(156)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)111 351 y
-FG(4.)46 b(W)-8 b(rite)32 b(the)f(F)-8 b(rameSet)31 b(bac)m(k)g(in)m
-(to)h(the)e(FitsChan)g(\()p Fu(x)p FG(17.7\).)111 560
-y(5.)46 b(P)m(erform)31 b(an)m(y)f(other)h(mo)s(di\014cation)g(of)f
-(FITS)g(header)g(cards)g(y)m(our)g(program)h(ma)m(y)g(require.)111
-769 y(6.)46 b(W)-8 b(rite)35 b(the)e(FitsChan)h(con)m(ten)m(ts)h(\()p
-Fx(i.e.)e FG(pro)s(cessed)f(header)i(cards\))f(and)g(image)h(data)g(to)
-g(the)g(output)227 882 y(dataset.)0 1176 y(In)28 b(stage)j(\(2\),)g
-(the)e(original)i(W)m(CS)e(information)g(will)h(b)s(e)e(remo)m(v)m(ed)j
-(from)d(the)i(FitsChan)f(b)m(y)g(a)g(destructiv)m(e)0
-1289 y(read.)62 b(Later,)40 b(in)e(stage)h(\(4\),)h(new)d(W)m(CS)h
-(information)g(is)f(written)h(to)g(replace)h(it.)63 b(This)37
-b(is)g(the)h(pro)s(cess)0 1402 y(whic)m(h)30 b(w)m(e)h(consider)f(next)
-h(\()p Fu(x)p FG(17.7\).)0 1731 y Fw(17.7)112 b(W)-9
-b(riting)37 b(F)-9 b(oreign)38 b(W)m(CS)f(Information)h(to)f(a)h(FITS)g
-(Header)0 1968 y FG(Before)g(w)m(e)f(can)g(write)f(pro)s(cessed)g(W)m
-(CS)h(information)g(held)f(in)h(a)g(F)-8 b(rameSet)37
-b(bac)m(k)h(in)m(to)f(a)g(FitsChan)g(in)0 2081 y(preparation)i(for)g
-(output,)h(w)m(e)g(m)m(ust)f(select)h(the)f(FITS)f(enco)s(ding)h(to)h
-(use.)66 b(Unfortunately)-8 b(,)42 b(w)m(e)d(cannot)0
-2194 y(simply)26 b(dep)s(end)g(on)h(the)g(default)g(v)-5
-b(alue)27 b(of)g(the)h(Enco)s(ding)e(attribute,)i(as)g(w)m(e)f(did)f
-(when)g(reading)h(the)g(input)0 2307 y(information)34
-b(\()p Fu(x)p FG(17.3\),)k(b)s(ecause)33 b(the)h(destructiv)m(e)h
-(action)g(of)f(reading)g(the)g(W)m(CS)g(data)h(\()p Fu(x)p
-FG(17.5\))h(will)e(ha)m(v)m(e)0 2419 y(altered)28 b(the)f(FitsChan's)g
-(con)m(ten)m(ts.)41 b(This,)27 b(in)g(turn,)f(will)i(ha)m(v)m(e)g(c)m
-(hanged)f(the)g(c)m(hoice)i(of)e(default)g(enco)s(ding,)0
-2532 y(probably)j(causing)g(it)h(to)g(rev)m(ert)g(to)h(NA)-8
-b(TIVE.)0 2706 y(W)g(e)31 b(will)g(return)e(to)h(the)h(question)f(of)g
-(the)g(optim)m(um)g(c)m(hoice)i(of)f(enco)s(ding)f(b)s(elo)m(w.)40
-b(F)-8 b(or)31 b(no)m(w,)g(let's)g(assume)0 2819 y(w)m(e)d(w)m(an)m(t)g
-(to)g(use)f(the)g(same)h(enco)s(ding)f(for)g(output)g(as)g(w)m(e)h
-(used)f(for)g(input.)38 b(Since)28 b(w)m(e)f(enquired)g(what)g(that)0
-2931 y(w)m(as)32 b(b)s(efore)f(w)m(e)h(read)g(the)f(input)g(W)m(CS)h
-(data)g(from)f(the)h(FitsChan)f(\()p Fu(x)p FG(17.3\),)k(w)m(e)d(can)g
-(no)m(w)g(set)g(that)g(v)-5 b(alue)0 3044 y(explicitly)d(.)49
-b(W)-8 b(e)34 b(can)f(also)h(set)f(the)f(FitsChan's)h(Card)f(attribute)
-h(bac)m(k)g(to)h(1)f(at)g(the)g(same)g(time)g(\(b)s(ecause)0
-3157 y(the)c(write)g(will)h(fail)g(if)f(the)g(FitsChan)g(is)g(not)g
-(rew)m(ound\).)40 b(AST)p Fy(_)p FG(WRITE)28 b(can)h(then)g(b)s(e)f
-(used)g(to)i(write)f(the)0 3270 y(output)h(W)m(CS)g(information)h(in)m
-(to)g(the)g(FitsChan:)262 3551 y Ft(INTEGER)40 b(NOBJ)262
-3750 y(...)262 4049 y(CALL)h(AST_SET\()g(FITSCHAN,)f('Card=1,)g
-(Encoding=')f(//)k(ENCODE,)e(STATUS)g(\))262 4149 y(NOBJ)g(=)j
-(AST_WRITE\()39 b(FITSCHAN,)h(WCSINFO,)g(STATUS)h(\))0
-4443 y FG(The)f(v)-5 b(alue)42 b(returned)d(b)m(y)i(AST)p
-Fy(_)p FG(WRITE)f(\(assigned)h(to)h(NOBJ\))f(indicates)g(ho)m(w)g(man)m
-(y)g(Ob)5 b(jects)41 b(w)m(ere)0 4556 y(written.)48 b(This)32
-b(will)h(either)g(b)s(e)f(1)h(or)g(zero.)49 b(A)32 b(v)-5
-b(alue)34 b(of)e(zero)i(is)f(used)f(to)h(indicate)h(that)f(the)g
-(information)0 4669 y(could)25 b(not)g(b)s(e)f(enco)s(ded)h(in)f(the)h
-(form)g(y)m(ou)g(requested.)39 b(If)24 b(this)h(happ)s(ens,)f(nothing)h
-(will)g(ha)m(v)m(e)h(b)s(een)e(written.)0 4842 y(If)31
-b(y)m(our)g(c)m(hoice)i(of)e(enco)s(ding)g(pro)m(v)m(es)h(inadequate,)g
-(the)f(probable)g(reason)g(is)h(that)f(the)h(c)m(hanges)g(y)m(ou)f(ha)m
-(v)m(e)0 4955 y(made)23 b(to)g(the)g(F)-8 b(rameSet)24
-b(ha)m(v)m(e)g(caused)f(it)h(to)f(depart)g(from)f(the)h(data)h(mo)s
-(del)e(whic)m(h)h(the)g(enco)s(ding)g(assumes.)0 5068
-y(AST)43 b(kno)m(ws)g(ab)s(out)h(the)g(data)g(mo)s(del)g(used)f(b)m(y)g
-(eac)m(h)i(enco)s(ding)f(and)f(will)h(attempt)h(to)f(simplify)f(the)0
-5181 y(F)-8 b(rameSet)31 b(y)m(ou)e(pro)m(vide)h(so)g(as)f(to)i(\014t)e
-(in)m(to)h(that)g(mo)s(del,)g(th)m(us)f(relieving)i(y)m(ou)f(of)f(the)h
-(need)f(to)h(understand)0 5294 y(the)38 b(details)h(and)f(limitations)i
-(of)e(eac)m(h)h(enco)s(ding)f(y)m(ourself.)65 b(When)37
-b(this)h(attempt)i(fails,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)0
-5407 y(m)m(ust)30 b(consider)h(what)f(alternativ)m(e)j(enco)s(ding)d
-(to)h(use.)0 5580 y(Ideally)-8 b(,)31 b(y)m(ou)e(w)m(ould)g(probably)g
-(w)m(an)m(t)h(to)g(try)f(a)g(sequence)h(of)f(alternativ)m(e)j(enco)s
-(dings,)d(using)g(an)g(approac)m(h)0 5693 y(suc)m(h)h(as)h(the)f(follo)
-m(wing:)p eop end
-%%Page: 157 167
-TeXDict begin 157 166 bop 0 52 a Fz(17.7)93 b(W)-8 b(riting)31
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)1289
-b FG(157)0 351 y Ft(*)87 b(1.)262 451 y(CALL)41 b(AST_SET\()g
-(FITSCHAN,)f('Card=1,)g(Encoding=FITS-WC)o(S')o(,)e(STATUS)j(\))262
-551 y(IF)h(\()h(AST_WRITE\()d(FITSCHAN,)g(WCSINFO,)g(STATUS)h(\))i
-(.EQ.)f(0)h(\))h(THEN)0 750 y(*)87 b(2.)392 849 y(CALL)42
-b(AST_SETC\()e(FITSCHAN,)g('Encoding',)f(ENCODE,)i(STATUS)g(\))392
-949 y(IF)i(\()g(AST_WRITE\()d(FITSCHAN,)g(WCSINFO,)g(STATUS)h(\))i
-(.EQ.)f(0)h(\))g(THEN)0 1148 y(*)87 b(3.)523 1248 y(CALL)42
-b(AST_SET\()e(FITSCHAN,)g('Encoding=NATIVE)o(',)d(STATUS)k(\))523
-1348 y(NOBJ)h(=)h(AST_WRITE\()d(FITSCHAN,)f(WCSINFO,)i(STATUS)g(\))392
-1447 y(END)i(IF)262 1547 y(END)f(IF)0 1809 y FG(That)30
-b(is:)111 2071 y(1.)46 b(Start)29 b(b)m(y)g(trying)g(the)f(FITS-W)m(CS)
-h(enco)s(ding,)g(on)g(the)g(grounds)e(that)i(FITS)f(should)g(pro)m
-(vide)h(a)g(uni-)227 2184 y(v)m(ersal)g(in)m(terc)m(hange)g(standard)e
-(in)g(whic)m(h)h(all)g(W)m(CS)g(information)f(should)g(b)s(e)g
-(expressed)g(if)h(p)s(ossible.)111 2372 y(2.)46 b(If)35
-b(that)h(fails,)h(then)d(try)h(the)h(original)g(enco)s(ding)f(used)f
-(for)h(the)g(input)f(W)m(CS)h(information,)i(on)e(the)227
-2485 y(grounds)g(that)h(y)m(ou)f(are)h(at)h(least)f(not)g(making)g(the)
-f(information)h(an)m(y)g(harder)f(for)g(others)g(to)i(read)227
-2598 y(than)30 b(it)h(originally)h(w)m(as.)111 2785 y(3.)46
-b(If)23 b(that)h(also)g(fails,)i(then)d(y)m(ou)g(are)h(probably)e
-(trying)i(to)g(store)g(fairly)f(complex)h(information)g(for)f(whic)m(h)
-227 2898 y(y)m(ou)36 b(need)g(the)g(nativ)m(e)h(enco)s(ding.)56
-b(Only)35 b(other)h(AST)f(programs)h(will)g(then)f(b)s(e)g(able)i(to)f
-(read)g(this)227 3011 y(information,)i(but)d(these)h(are)g(probably)f
-(the)h(only)f(programs)h(that)g(will)g(b)s(e)f(able)h(to)g(do)g(an)m
-(ything)227 3124 y(sensible)31 b(with)f(it)h(an)m(yw)m(a)m(y)-8
-b(.)0 3387 y(An)20 b(alternativ)m(e)k(approac)m(h)d(migh)m(t)h(b)s(e)e
-(to)h(enco)s(de)g(the)g(W)m(CS)g(information)g(in)g(sev)m(eral)h(w)m(a)
-m(ys,)i(since)d(this)g(giv)m(es)0 3499 y(the)29 b(maxim)m(um)h(c)m
-(hance)g(that)g(other)f(soft)m(w)m(are)i(will)f(b)s(e)e(able)i(to)g
-(read)f(it.)41 b(This)29 b(approac)m(h)g(is)h(only)f(p)s(ossible)0
-3612 y(if)j(there)g(is)f(no)h(signi\014can)m(t)g(con\015ict)h(b)s(et)m
-(w)m(een)f(the)g(FITS)f(k)m(eyw)m(ords)h(used)f(b)m(y)h(the)g
-(di\013eren)m(t)g(enco)s(dings)3680 3579 y Fv(29)3754
-3612 y FG(.)0 3725 y(Adopting)42 b(this)f(approac)m(h)h(w)m(ould)f
-(simply)h(require)f(m)m(ultiple)h(calls)h(to)f(AST)p
-Fy(_)p FG(WRITE,)f(rewinding)f(the)0 3838 y(FitsChan)30
-b(and)g(c)m(hanging)h(its)g(Enco)s(ding)f(v)-5 b(alue)31
-b(b)s(efore)f(eac)m(h)h(one.)0 4001 y(Unfortunately)-8
-b(,)26 b(ho)m(w)m(ev)m(er,)g(there)e(is)f(a)h(dra)m(wbac)m(k)g(to)g
-(duplicating)g(W)m(CS)f(information)h(in)f(the)h(FITS)f(header)0
-4114 y(in)38 b(this)h(w)m(a)m(y)-8 b(,)42 b(b)s(ecause)d(an)m(y)g
-(program)g(whic)m(h)f(mo)s(di\014es)g(one)h(v)m(ersion)g(of)g(this)g
-(information)g(and)f(simply)0 4227 y(copies)27 b(the)f(remainder)f(of)h
-(the)h(header)e(will)i(risk)e(pro)s(ducing)g(t)m(w)m(o)i(inconsisten)m
-(t)g(sets)g(of)f(information.)39 b(This)0 4340 y(could)34
-b(ob)m(viously)h(b)s(e)e(confusing)h(to)g(subsequen)m(t)f(soft)m(w)m
-(are.)53 b(Whether)35 b(y)m(ou)f(consider)g(this)g(a)g(w)m(orth)m
-(while)0 4453 y(risk)c(probably)g(dep)s(ends)e(on)i(the)h(use)f(to)h
-(whic)m(h)f(y)m(ou)h(exp)s(ect)g(y)m(our)f(data)h(to)g(b)s(e)f(put.)p
-0 5516 1512 4 v 73 5570 a Fs(29)138 5602 y Fr(In)g(practice,)j(this)e
-(means)g(y)n(ou)f(should)g(a)n(v)n(oid)h(mixing)g(FITS-IRAF,)e(FITS-W)n
-(CS,)h(FITS-AIPS,)g(FITS-AIPS++)f(and)0 5693 y(FITS-PC)d(enco)r(dings)g
-(since)g(they)f(share)h(man)n(y)g(k)n(eyw)n(ords.)p eop
-end
-%%Page: 158 168
-TeXDict begin 158 167 bop 0 52 a FG(158)1885 b Fz(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)p eop end
-%%Page: 159 169
-TeXDict begin 159 168 bop 3643 52 a FG(159)0 351 y FA(18)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(as)f(XML)f(\(XmlChan\))0
-603 y FG(XML)208 570 y Fv(30)347 603 y FG(is)32 b(fast)h(b)s(ecoming)f
-(the)g(standard)g(format)g(for)g(passing)g(structured)f(data)i(around)e
-(the)h(in)m(ternet,)0 716 y(and)20 b(m)m(uc)m(h)h(general)h(purp)s(ose)
-d(soft)m(w)m(are)j(has)e(b)s(een)g(written)h(for)g(tasks)g(suc)m(h)f
-(as)h(the)g(parsing,)i(editing,)g(displa)m(y)0 829 y(and)29
-b(transformation)g(of)h(XML)f(data.)41 b(The)29 b(XmlChan)g(class)h
-(\(a)g(sp)s(ecialised)f(form)g(of)h(Channel\))e(pro)m(vides)0
-941 y(facilities)k(for)f(storing)f(AST)g(ob)5 b(jects)31
-b(externally)g(in)f(the)h(form)f(of)g(XML)h(do)s(cumen)m(ts,)f(th)m(us)
-g(allo)m(wing)i(suc)m(h)0 1054 y(soft)m(w)m(are)g(to)f(b)s(e)f(used.)0
-1216 y(The)40 b(primary)f(XML)h(format)h(used)e(b)m(y)h(the)h(XmlChan)e
-(class)i(is)g(a)f(fairly)h(close)g(transliteration)h(of)e(the)0
-1329 y(AST)27 b(nativ)m(e)j(format)e(pro)s(duced)f(b)m(y)h(the)g(basic)
-g(Channel)g(class.)40 b(Curren)m(tly)-8 b(,)29 b(there)f(is)g(no)g(DTD)
-h(or)f(sc)m(hema)0 1442 y(de\014ning)c(the)i(structure)f(of)g(data)i
-(pro)s(duced)c(in)i(this)h(format)f(b)m(y)h(an)f(XmlChan.)38
-b(The)25 b(follo)m(wing)i(is)e(a)h(nativ)m(e)0 1554 y(AST)i(represen)m
-(tation)i(of)f(a)g(simple)g(1-D)g(F)-8 b(rame)30 b(\(including)f
-(commen)m(ts)g(and)g(with)f(the)h(F)-8 b(ull)29 b(attribute)h(set)0
-1667 y(to)h(zero)g(so)g(that)g(some)g(default)f(attribute)h(v)-5
-b(alues)31 b(are)g(included)e(as)i(extra)g(commen)m(ts\):)271
-1911 y Ft(Begin)41 b(Frame)173 b(#)43 b(Coordinate)c(system)i
-(description)227 2011 y(#)131 b(Title)41 b(=)i("1-d)f(coordinate)e
-(system")215 b(#)43 b(Title)e(of)i(coordinate)d(system)402
-2110 y(Naxes)h(=)i(1)131 b(#)43 b(Number)e(of)i(coordinate)c(axes)402
-2210 y(Domain)i(=)i("SCREEN")127 b(#)44 b(Coordinate)39
-b(system)i(domain)227 2310 y(#)131 b(Lbl1)42 b(=)h("Axis)e(1")217
-b(#)44 b(Label)d(for)h(axis)g(1)227 2409 y(#)131 b(Uni1)42
-b(=)h("cm")390 b(#)44 b(Units)d(for)h(axis)g(1)402 2509
-y(Ax1)g(=)305 b(#)43 b(Axis)f(number)f(1)532 2609 y(Begin)h(Axis)303
-b(#)44 b(Coordinate)39 b(axis)663 2708 y(Unit)j(=)h("cm")129
-b(#)44 b(Axis)d(units)532 2808 y(End)i(Axis)271 2907
-y(End)f(Frame)0 3164 y FG(The)30 b(corresp)s(onding)f(XmlChan)h(output)
-g(w)m(ould)g(lo)s(ok)h(lik)m(e:)271 3408 y Ft(<Frame)41
-b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o(c.u)o(k/)o(as)o(t/x)o
-(ml)o(/")576 3508 y(desc="Coordinate)c(system)k(description">)402
-3608 y(<_attribute)e(name="Title")f(quoted="true")g(value="1-d)i
-(coordinate)f(system")925 3707 y(desc="Title)g(of)j(coordinate)e
-(system")h(default="true"/)o(>)402 3807 y(<_attribute)e(name="Naxes")f
-(value="1")i(desc="Number)f(of)k(coordinate)c(axes"/>)402
-3906 y(<_attribute)g(name="Domain")f(quoted="true")g(value="SCREEN")925
-4006 y(desc="Coordinat)o(e)g(system)j(domain"/>)402 4106
-y(<_attribute)e(name="Lbl1")g(quoted="true")f(value="Axis)h(1")925
-4205 y(desc="Label)g(for)j(axis)g(1")h(default="true"/>)402
-4305 y(<_attribute)c(name="Uni1")g(quoted="true")f(value="cm")925
-4405 y(desc="Units)h(for)j(axis)g(1")h(default="true"/>)402
-4504 y(<Axis)e(label="Ax1")e(desc="Coordinate)e(axis">)532
-4604 y(<!--Axis)k(number)g(1-->)532 4703 y(<_attribute)e(name="Unit")g
-(quoted="true")g(value="cm")g(desc="Axis)h(units"/>)402
-4803 y(</Axis>)271 4903 y(</Frame>)0 5160 y FG(Notes:)111
-5417 y(1.)46 b(The)27 b(AST)g(class)h(name)g(is)f(used)g(as)h(the)g
-(name)f(for)g(an)h(XML)f(elemen)m(t)i(whic)m(h)f(con)m(tain)h(a)e
-(description)227 5530 y(of)k(an)f(AST)g(ob)5 b(ject.)p
-0 5607 1512 4 v 73 5661 a Fs(30)138 5693 y Fr(h)n
-(ttp://www.w3.org/XML/)p eop end
-%%Page: 160 170
-TeXDict begin 160 169 bop 0 52 a FG(160)1399 b Fz(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))111
-351 y FG(2.)46 b(AST)39 b(attributes)h(are)g(describ)s(ed)f(b)m(y)g
-(XML)h(elemen)m(ts)h(with)e(the)h(name)f(\\)p Fy(_)p
-FG(attribute".)70 b(Unfortu-)227 464 y(nately)-8 b(,)32
-b(the)f(w)m(ord)f(\\attribute")i(is)e(also)i(used)d(b)m(y)h(XML)h(to)g
-(refer)f(to)h(a)g(\\name=v)-5 b(alue")32 b(pair)e(within)227
-577 y(an)36 b(elemen)m(t)h(start)f(tag.)58 b(So)36 b(for)f(instance,)j
-(the)e(\\Title")h(attribute)g(of)e(the)h(AST)f(F)-8 b(rame)37
-b(ob)5 b(ject)36 b(is)227 690 y(describ)s(ed)g(within)h(an)f(XML)i
-(elemen)m(t)g(with)f(name)g(\\)p Fy(_)p FG(attribute")h(in)f(whic)m(h)f
-(the)i(XML)f(attribute)227 803 y(\\name")c(has)e(the)g(v)-5
-b(alue)32 b(\\Title",)i(and)c(the)i(XML)g(attribute)g(\\v)-5
-b(alue")33 b(has)e(the)g(v)-5 b(alue)32 b(\\1-d)g(co)s(ordi-)227
-916 y(nate)g(system".)45 b(The)31 b(moral)h(is)g(alw)m(a)m(ys)h(to)f(b)
-s(e)f(clear)h(clear)h(ab)s(out)e(the)h(con)m(text)h(\(AST)e(or)h(XML\))
-g(in)227 1029 y(whic)m(h)e(the)h(w)m(ord)f Fx(attribute)38
-b FG(is)30 b(b)s(eing)g(used!)111 1215 y(3.)46 b(The)e(XML)h(includes)f
-(commen)m(ts)i(b)s(oth)e(as)g(XML)h(attributes)g(with)g(the)f(name)h
-(\\desc",)k(and)44 b(as)227 1328 y(separate)32 b(commen)m(t)f(tags.)111
-1514 y(4.)46 b(Elemen)m(ts)33 b(whic)m(h)e(describ)s(e)g(default)g(v)-5
-b(alues)32 b(are)g(iden)m(ti\014ed)f(b)m(y)h(the)f(fact)i(that)f(they)f
-(ha)m(v)m(e)i(an)e(XML)227 1627 y(attribute)f(called)h(\\default")g
-(set)f(to)g(the)g(v)-5 b(alue)30 b(\\true".)41 b(These)29
-b(elemen)m(ts)i(are)f(ignored)f(when)g(b)s(eing)227 1740
-y(read)i(bac)m(k)g(in)m(to)g(an)f(XmlChan.)111 1926 y(5.)46
-b(The)20 b(outer-most)h(XML)g(elemen)m(t)h(of)e(an)g(AST)g(ob)5
-b(ject)21 b(will)f(set)h(the)g(default)f(namespace)h(to)g
-Fy(http://www.starlink.ac.uk)o(/ast)o(/xm)o(l/)227 2039
-y FG(whic)m(h)30 b(will)h(b)s(e)f(inherited)g(b)m(y)g(all)h(nested)g
-(elemen)m(ts.)0 2295 y(The)j(XmlChan)g(class)h(c)m(hanges)g(the)g
-(default)g(v)-5 b(alue)35 b(for)f(the)h(Commen)m(t)f(and)g(F)-8
-b(ull)35 b(attributes)g(\(inherited)0 2408 y(from)k(the)g(base)h
-(Channel)e(class\))j(to)f(zero)g(and)e(-1,)43 b(resulting)c(in)g(terse)
-h(output)f(b)m(y)g(default.)68 b(With)39 b(the)0 2521
-y(default)31 b(v)-5 b(alues)30 b(for)g(these)h(attributes,)g(the)g(ab)s
-(o)m(v)m(e)h(XML)e(is)h(reduced)e(to)i(the)g(follo)m(wing:)271
-2764 y Ft(<Frame)41 b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o
-(c.u)o(k/)o(as)o(t/x)o(ml)o(/">)402 2863 y(<_attribute)e(name="Naxes")f
-(value="1"/>)402 2963 y(<_attribute)h(name="Domain")f(quoted="true")g
-(value="SCREEN"/>)402 3063 y(<Axis)j(label="Ax1">)532
-3162 y(<_attribute)e(name="Unit")g(quoted="true")g(value="cm"/>)402
-3262 y(</Axis>)271 3361 y(</Frame>)0 3618 y FG(The)30
-b(XmlChan)f(class)i(uses)f(the)h(Skip)e(attributes)i(v)m(ery)g
-(similarly)g(to)g(the)f(Channel)g(class.)41 b(If)30 b(Skip)f(is)i(zero)
-0 3731 y(\(the)f(default\))g(then)f(an)h(error)f(will)h(b)s(e)f(rep)s
-(orted)g(if)g(the)h(text)h(supplied)d(b)m(y)h(the)h(source)g(function)f
-(do)s(es)g(not)0 3844 y(b)s(egin)k(with)h(an)f(AST)g(Ob)5
-b(ject.)51 b(If)33 b(Skip)g(is)g(non-zero,)j(then)d(initial)i(text)f
-(is)g(skipp)s(ed)e(o)m(v)m(er)j(without)f(error)0 3956
-y(un)m(til)k(the)g(start)g(of)g(an)f(AST)g(ob)5 b(ject)39
-b(is)f(found.)61 b(this)37 b(allo)m(ws)j(an)d(AST)g(ob)5
-b(ject)39 b(to)f(b)s(e)f(lo)s(cated)i(within)e(a)0 4069
-y(larger)31 b(XML)g(do)s(cumen)m(t.)0 4360 y Fw(18.1)112
-b(Reading)39 b(IV)m(O)m(A)d(Space-Time-Co)s(ordinates)41
-b(XML)c(\(STC-X\))g(Descriptions)0 4580 y FG(The)29 b(XmlChan)g(class)i
-(also)f(pro)m(vides)g(supp)s(ort)e(for)h(reading)h(\(but)f(not)h
-(writing\))g(XML)g(do)s(cumen)m(ts)g(whic)m(h)0 4693
-y(use)39 b(a)h(restricted)g(subset)e(of)i(an)f(early)h(draft)e
-(\(V1.20\))k(of)e(the)f(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g(XML)0
-4806 y(\(STC-X\))23 b(system.)38 b(The)23 b(v)m(ersion)g(of)h(STC-X)e
-(\014nally)h(adopted)g(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e(in)h(sev)
-m(eral)i(signi\014can)m(t)0 4919 y(resp)s(ects)d(from)f(V1.20,)26
-b(and)21 b(so)i(the)f(STC-X)f(supp)s(ort)f(curren)m(tly)i(pro)m(vided)g
-(b)m(y)g(AST)f(is)h(mainly)g(of)g(historical)0 5032 y(in)m(terest.)42
-b(Note,)31 b(AST)e(also)h(supp)s(orts)e(the)h(alternativ)m(e)j
-(\\STC-S")d(linear)h(string)g(description)f(of)h(the)g(STC)0
-5145 y(mo)s(del)g(\(see)i Fu(x)p FG(19\).)0 5306 y(STC-X)19
-b(V1.20)j(is)f(do)s(cumen)m(ted)f(at)41 b(h)m(ttp://www.iv)m(oa.net/Do)
-s(cumen)m(ts/WD/STC/STC-200502)q(25)q(.h)m(tml,)0 5419
-y(and)23 b(the)h(curren)m(t)f(v)m(ersion)h(is)f(do)s(cumen)m(ted)g(at)
-48 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m(ts/latest/STC-X.h)m(tml.)0
-5580 y(When)38 b(an)f(STC-X)g(do)s(cumen)m(t)h(is)g(read)f(using)g(an)h
-(XmlChan,)h(the)f(read)g(op)s(eration)g(pro)s(duces)f(an)g(AST)0
-5693 y(Ob)5 b(ject)25 b(of)g(the)g(Stc)g(class,)i(whic)m(h)e(is)g
-(itself)h(a)f(sub)s(class)f(of)h(Region.)40 b(Sp)s(eci\014cally)-8
-b(,)27 b(eac)m(h)f(suc)m(h)f(Ob)5 b(ject)25 b(will)g(b)s(e)p
-eop end
-%%Page: 161 171
-TeXDict begin 161 170 bop 0 52 a Fz(18.1)93 b(Reading)30
-b(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)h(XML)e(\(STC-X\))h
-(Descriptions)658 b FG(161)0 351 y(an)29 b(instance)h(of)g(StcSearc)m
-(hLo)s(cation,)i(StcResourcePro\014le,)e(StcCatalogEn)m(tryLo)s(cation)
-j(or)d(StcObsDat-)0 464 y(aLo)s(cation.)49 b(See)32 b(the)h
-(description)g(of)f(the)h(XmlChan)f(class)h(and)f(the)g(XmlF)-8
-b(ormat)34 b(attribute)g(for)e(further)0 577 y(details.)p
-eop end
-%%Page: 162 172
-TeXDict begin 162 171 bop 0 52 a FG(162)1399 b Fz(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))p
-eop end
-%%Page: 163 173
-TeXDict begin 163 172 bop 3643 52 a FG(163)0 351 y FA(19)135
-b(Reading)46 b(and)f(writing)g(STC-S)f(descriptions)i(\(StcsChans\))0
-604 y FG(The)22 b(StcsChan)f(class)i(pro)m(vides)g(facilities)h(for)e
-(reading)h(and)e(writing)i(IV)m(O)m(A)g(\\STC-S")e(descriptions.)38
-b(STC-)0 717 y(S)22 b(\(see)46 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/latest/)q(STC-S.h)m(tml\))28 b(is)23 b(a)g(linear)g(string)g(syn)m
-(tax)g(that)g(allo)m(ws)0 830 y(simple)42 b(sp)s(eci\014cation)g(of)g
-(the)g(STC)f(metadata)j(describing)d(a)h(region)h(in)e(an)h
-(astronomical)i(co)s(ordinate)0 943 y(system.)82 b(AST)43
-b(supp)s(orts)f(a)j(subset)e(of)h(the)g(STC-S)f(sp)s(eci\014cation,)48
-b(allo)m(wing)e(an)e(STC-S)e(description)0 1056 y(of)35
-b(a)h(region)g(within)f(an)g(AST-supp)s(orted)e(astronomical)k(co)s
-(ordinate)f(system)g(to)g(b)s(e)e(con)m(v)m(erted)j(in)m(to)g(an)0
-1169 y(equiv)-5 b(alen)m(t)29 b(AST)d(Region)i(ob)5 b(ject,)29
-b(and)d(vice-v)m(ersa.)42 b(F)-8 b(or)28 b(further)e(details,)j(see)f
-(the)f(full)g(description)g(of)g(the)0 1281 y(StcsChan)j(class)h(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 164 174
-TeXDict begin 164 173 bop 0 52 a FG(164)652 b Fz(19)92
-b(READING)31 b(AND)g(WRITING)g(STC-S)e(DESCRIPTIONS)f(\(STCSCHANS\))p
-eop end
-%%Page: 165 175
-TeXDict begin 165 174 bop 3643 52 a FG(165)0 351 y FA(20)135
-b(Creating)46 b(Y)-11 b(our)44 b(Own)h(Priv)-7 b(ate)46
-b(Mappings)e(\(In)l(traMaps\))0 614 y Fw(20.1)112 b(The)38
-b(Need)g(for)f(Extensibilit)m(y)0 843 y FG(Ho)m(w)m(ev)m(er)28
-b(man)m(y)d(Mapping)h(classes)h(are)f(pro)m(vided)f(b)m(y)g(AST,)h(so)s
-(oner)f(or)h(later)g(y)m(ou)g(will)g(w)m(an)m(t)h(to)f(transform)0
-956 y(co)s(ordinates)34 b(in)f(some)h(w)m(a)m(y)g(that)g(has)f(not)h(b)
-s(een)e(foreseen.)50 b(Y)-8 b(ou)34 b(migh)m(t)g(w)m(an)m(t)h(to)f
-(plot)f(a)h(graph)f(in)g(some)0 1069 y(no)m(v)m(el)g(curvilinear)e(co)s
-(ordinate)h(system)f(\(p)s(erhaps)f(y)m(ou)h(already)h(ha)m(v)m(e)g(a)g
-(W)m(CS)f(system)g(in)g(y)m(our)g(soft)m(w)m(are)0 1182
-y(and)g(just)g(w)m(an)m(t)i(to)f(use)f(AST)g(for)h(its)g(graphical)g
-(capabilities\).)47 b(Alternativ)m(ely)-8 b(,)35 b(y)m(ou)d(migh)m(t)g
-(need)f(to)i(cali-)0 1295 y(brate)24 b(a)h(complex)g(dataset)g(\(lik)m
-(e)h(an)e(ob)5 b(jectiv)m(e)26 b(prism)d(plate\))i(where)e(eac)m(h)j(p)
-s(osition)e(m)m(ust)g(b)s(e)f(con)m(v)m(erted)j(to)0
-1408 y(w)m(orld)f(co)s(ordinates)g(with)g(reference)g(to)h(calibration)
-g(data)g(under)d(the)i(con)m(trol)h(of)f(an)g(elab)s(orate)h
-(algorithm.)0 1575 y(In)35 b(suc)m(h)h(cases,)j(it)d(is)g(clear)h(that)
-g(the)f(basic)g(pre-formed)g(comp)s(onen)m(ts)g(pro)m(vided)f(b)m(y)h
-(AST)g(for)f(building)0 1688 y(Mappings)30 b(are)h(just)e(not)i
-(enough.)40 b(What)31 b(y)m(ou)g(need)f(is)g(access)i(to)e(a)h
-(programming)f(language.)42 b(Ho)m(w)m(ev)m(er,)0 1801
-y(if)33 b(y)m(ou)f(write)h(y)m(our)g(o)m(wn)f(soft)m(w)m(are)i(to)g
-(transform)e(co)s(ordinate)h(v)-5 b(alues,)34 b(then)e(it)h(m)m(ust)g
-(b)s(e)e(made)i(a)m(v)-5 b(ailable)0 1914 y(in)42 b(the)h(form)f(of)h
-(an)f(AST)g(class)h(\(from)f(whic)m(h)h(y)m(ou)g(can)f(create)i(Ob)5
-b(jects\))43 b(b)s(efore)f(it)h(can)g(b)s(e)f(used)g(in)0
-2027 y(conjunction)30 b(with)g(other)h(AST)f(facilities.)0
-2194 y(A)m(t)39 b(this)f(p)s(oin)m(t)g(y)m(ou)g(migh)m(t)h(consider)f
-(writing)g(y)m(our)g(o)m(wn)g(AST)f(class,)k(but)c(this)h(is)g(not)h
-(recommended.)0 2307 y(Not)29 b(only)g(w)m(ould)f(the)h(in)m(ternal)g
-(con)m(v)m(en)m(tions)h(used)e(b)m(y)g(AST)g(tak)m(e)i(some)f(time)g
-(to)g(master,)g(but)f(y)m(ou)h(migh)m(t)0 2420 y(also)j(\014nd)d(y)m
-(ourself)i(ha)m(ving)h(to)f(c)m(hange)h(y)m(our)f(soft)m(w)m(are)h
-(whenev)m(er)f(a)g(new)g(v)m(ersion)g(of)g(AST)f(w)m(as)h(released.)0
-2533 y(F)-8 b(ortunately)g(,)33 b(there)d(is)h(a)f(m)m(uc)m(h)h(easier)
-g(route)g(pro)m(vided)f(b)m(y)g(the)h(In)m(traMap)f(class.)0
-2843 y Fw(20.2)112 b(The)38 b(In)m(traMap)g(Mo)s(del)0
-3071 y FG(T)-8 b(o)35 b(allo)m(w)h(y)m(ou)f(to)g(write)g(y)m(our)f(o)m
-(wn)h(Mappings,)h(AST)d(pro)m(vides)i(a)g(sp)s(ecial)g(kind)f(of)g
-(Mapping)h(called)h(an)0 3184 y(In)m(traMap.)i(An)22
-b(In)m(traMap)h(is)f(a)h(sort)f(of)h(\\wrapp)s(er")e(for)h(a)h(co)s
-(ordinate)g(transformation)f(routine)g(written)h(in)0
-3297 y(F)-8 b(ortran.)41 b(Y)-8 b(ou)28 b(write)h(this)f(routine)g(y)m
-(ourself)h(and)e(then)h(register)h(it)g(with)f(AST.)g(This,)g(in)g
-(e\013ect,)i(creates)g(a)0 3410 y(new)23 b(class)h(from)f(whic)m(h)g(y)
-m(ou)h(can)g(create)h(Mappings)e(\()p Fx(i.e.)g FG(In)m(traMaps\))h
-(whic)m(h)f(will)h(transform)f(co)s(ordinates)0 3523
-y(in)30 b(whatev)m(er)h(w)m(a)m(y)h(y)m(our)e(transformation)h(routine)
-f(sp)s(eci\014es.)0 3691 y(Because)38 b(In)m(traMaps)e(are)h(Mappings,)
-h(they)e(ma)m(y)h(b)s(e)f(used)f(in)h(the)h(same)f(w)m(a)m(y)i(as)e(an)
-m(y)h(other)f(Mapping.)0 3803 y(F)-8 b(or)29 b(instance,)h(they)f(ma)m
-(y)g(b)s(e)f(com)m(bined)h(in)f(series)h(or)g(parallel)h(with)e(other)h
-(Mappings)f(using)g(a)h(CmpMap)0 3916 y(\()p Fu(x)p FG(6\),)36
-b(they)d(ma)m(y)h(b)s(e)e(in)m(v)m(erted)i(\()p Fu(x)p
-FG(5.5\),)i(y)m(ou)e(ma)m(y)f(enquire)g(ab)s(out)g(their)g(attributes)h
-(\()p Fu(x)p FG(4.5\),)i(they)d(ma)m(y)h(b)s(e)0 4029
-y(inserted)26 b(in)m(to)i(F)-8 b(rameSets)27 b(\()p Fu(x)p
-FG(13\),)j Fx(etc.)39 b FG(They)25 b(do,)j(ho)m(w)m(ev)m(er,)h(ha)m(v)m
-(e)e(some)g(imp)s(ortan)m(t)g(limitations)h(of)f(whic)m(h)0
-4142 y(y)m(ou)k(should)e(b)s(e)h(a)m(w)m(are)i(b)s(efore)e(w)m(e)g(go)i
-(on)e(to)h(consider)f(ho)m(w)h(to)g(create)h(them.)0
-4452 y Fw(20.3)112 b(Limitations)39 b(of)f(In)m(traMaps)0
-4680 y FG(By)c(no)m(w,)g(y)m(ou)g(migh)m(t)g(b)s(e)f(w)m(ondering)g(wh)
-m(y)g(an)m(y)h(other)g(kind)e(of)i(Mapping)f(is)h(required)f(at)h(all.)
-51 b(After)33 b(all,)0 4793 y(wh)m(y)27 b(not)h(simply)f(write)h(y)m
-(our)f(o)m(wn)h(co)s(ordinate)g(transformation)g(routines)g(in)f(F)-8
-b(ortran,)29 b(wrap)e(them)g(up)g(in)0 4906 y(In)m(traMaps)k(and)e(do)i
-(a)m(w)m(a)m(y)h(with)e(all)h(the)g(other)g(Mapping)f(classes)h(in)f
-(AST?)0 5074 y(The)k(reason)g(is)g(not)h(to)s(o)g(hard)e(to)i(\014nd.)
-50 b(An)m(y)34 b(transformation)h(routine)f(y)m(ou)g(write)h(is)f
-(created)h(solely)h(b)m(y)0 5187 y(y)m(ou,)31 b(so)g(it)g(is)f(a)h
-(priv)-5 b(ate)31 b(extension)g(whic)m(h)f(do)s(es)g(not)h(form)f(a)g
-(p)s(ermanen)m(t)g(part)g(of)h(AST.)f(If)g(y)m(ou)h(use)f(it)h(to)0
-5300 y(calibrate)d(some)g(data)f(and)f(then)h(pass)f(that)i(data)f(to)h
-(someone)f(else,)i(who)d(has)h(only)g(the)g(standard)f(v)m(ersion)0
-5413 y(of)31 b(AST,)e(then)i(they)f(will)h(not)f(b)s(e)g(able)h(to)g
-(in)m(terpret)g(it.)0 5580 y(Th)m(us,)38 b(while)g(an)f(In)m(traMap)h
-(is)f(\014ne)g(for)g(use)g(b)m(y)g(y)m(ou)h(and)f(y)m(our)g(collab)s
-(orators)i(\(who)e(w)m(e)h(assume)f(ha)m(v)m(e)0 5693
-y(access)k(to)g(the)f(same)g(transformation)g(routines\),)j(it)d(do)s
-(es)g(not)g(address)f(the)h(need)f(for)h(univ)m(ersal)g(data)p
-eop end
-%%Page: 166 176
-TeXDict begin 166 175 bop 0 52 a FG(166)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FG(exc)m(hange)g(lik)m(e)f(other)g
-(AST)f(Mappings)g(do.)40 b(This)27 b(is)h(where)g(the)h(\\In)m(tra")g
-(in)f(the)h(class)g(name)f(\\In)m(traMap")0 464 y(comes)j(from,)f
-(implying)h(priv)-5 b(ate)30 b(or)h(in)m(ternal)g(usage.)0
-626 y(F)-8 b(or)34 b(this)g(reason,)g(it)g(is)g(un)m(wise)f(to)h(store)
-g(In)m(traMaps)g(in)f(datasets,)i(unless)e(they)h(will)g(b)s(e)e(used)h
-(solely)i(for)0 739 y(comm)m(unication)25 b(b)s(et)m(w)m(een)f(collab)s
-(orating)i(items)e(of)f(soft)m(w)m(are)i(whic)m(h)f(share)f(con)m(v)m
-(en)m(tions)j(ab)s(out)d(their)h(use.)0 852 y(A)39 b(priv)-5
-b(ate)39 b(database)h(describing)e(co)s(ordinate)i(systems)e(on)h(a)g
-(graphics)g(device)h(migh)m(t)f(b)s(e)f(an)h(example)0
-965 y(where)i(In)m(traMaps)i(w)m(ould)e(b)s(e)g(suitable,)46
-b(b)s(ecause)c(the)g(data)g(w)m(ould)g(probably)f(nev)m(er)h(b)s(e)f
-(accessed)j(b)m(y)0 1078 y(an)m(y)m(one)i(else's)f(soft)m(w)m(are.)85
-b(Restricting)46 b(In)m(traMap)f(usage)g(to)g(within)f(a)h(single)g
-(program)f(\()p Fx(i.e.)83 b FG(nev)m(er)0 1191 y(writing)30
-b(it)h(out\))g(is,)g(of)f(course,)h(completely)h(safe.)0
-1353 y(If,)25 b(b)m(y)g(acciden)m(t,)i(an)d(In)m(traMap)h(should)e
-(happ)s(en)g(to)i(escap)s(e)g(as)g(part)f(of)g(a)h(dataset,)i(then)d
-(the)h(unsusp)s(ecting)0 1466 y(recipien)m(t)38 b(is)e(lik)m(ely)i(to)f
-(receiv)m(e)i(an)d(error)g(message)i(when)e(they)g(attempt)i(to)f(read)
-g(the)f(data.)60 b(Ho)m(w)m(ev)m(er,)0 1579 y(AST)27
-b(will)h(asso)s(ciate)i(details)f(of)f(the)g(In)m(traMap's)g
-(transformation)g(routine)g(and)f(its)i(author)e(\(if)h(pro)m(vided\))0
-1692 y(with)39 b(the)h(data,)j(so)d(that)g(the)g(recipien)m(t)h(can)e
-(mak)m(e)i(an)f(in)m(telligen)m(t)i(enquiry)d(to)h(obtain)g(the)g
-(necessary)0 1805 y(soft)m(w)m(are)32 b(if)e(this)g(pro)m(v)m(es)h
-(essen)m(tial.)0 2097 y Fw(20.4)112 b(W)-9 b(riting)37
-b(a)h(T)-9 b(ransformation)39 b(Routine)0 2318 y FG(The)30
-b(\014rst)f(stage)j(in)e(creating)i(an)e(In)m(traMap)h(is)f(to)i(write)
-e(the)h(co)s(ordinate)g(transformation)g(routine.)40
-b(This)0 2431 y(should)30 b(ha)m(v)m(e)h(a)g(calling)h(in)m(terface)h
-(lik)m(e)f(the)e(AST)p Fy(_)p FG(TRANN)g(function)g(pro)m(vided)h(b)m
-(y)f(AST)g(\()p Fx(q.v.)p FG(\).)41 b(Here)31 b(is)0
-2544 y(a)c(simple)f(example)i(of)e(a)h(suitable)g(transformation)g
-(routine)f(whic)m(h)h(transforms)e(co)s(ordinates)j(b)m(y)e(squaring)0
-2657 y(them:)262 2903 y Ft(SUBROUTINE)39 b(SQRTRAN\()h(THIS,)i(NPOINT,)
-e(NCOORD_IN,)g(INDIM,)h(IN,)h(FORWARD,)174 3003 y(:)915
-b(NCOORD_OUT,)39 b(OUTDIM,)i(OUT,)h(STATUS)f(\))262 3103
-y(INTEGER)f(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(NCOORD_OUT,)e
-(OUTDIM,)i(STATUS)262 3202 y(DOUBLE)g(PRECISION)e(IN\()k(INDIM,)e
-(NCOORD_IN)f(\),)j(OUT\()e(OUTDIM,)g(NCOORD_OUT)f(\))262
-3302 y(LOGICAL)g(FORWARD)262 3501 y(INCLUDE)g('AST_PAR')262
-3601 y(DOUBLE)h(PRECISION)e(X)262 3700 y(INTEGER)h(COORD,)h(POINT)0
-3900 y(*)87 b(Forward)40 b(transformation.)262 3999 y(IF)i(\()h
-(FORWARD)e(\))i(THEN)392 4099 y(DO)g(2)g(POINT)f(=)h(1,)g(NPOINT)523
-4199 y(DO)g(1)g(COORD)e(=)j(1,)e(NCOORD_IN)654 4298 y(X)h(=)g(IN\()f
-(POINT,)g(COORD)f(\))654 4398 y(IF)i(\()g(X)g(.EQ.)f(AST__BAD)e(\))j
-(THEN)785 4497 y(OUT\()e(POINT,)h(COORD)f(\))i(=)g(AST__BAD)654
-4597 y(ELSE)785 4697 y(OUT\()e(POINT,)h(COORD)f(\))i(=)g(X)h(*)f(X)654
-4796 y(ENDIF)44 4896 y(1)435 b(CONTINUE)44 4996 y(2)304
-b(CONTINUE)0 5195 y(*)87 b(Inverse)40 b(transformation.)262
-5295 y(ELSE)392 5394 y(DO)j(4)g(POINT)f(=)h(1,)g(NPOINT)523
-5494 y(DO)g(3)g(COORD)e(=)j(1,)e(NCOORD_IN)654 5593 y(X)h(=)g(IN\()f
-(POINT,)g(COORD)f(\))654 5693 y(IF)i(\()g(X)g(.LT.)f(0.0D0)f(.OR.)h(X)h
-(.EQ.)f(AST__BAD)f(\))i(THEN)p eop end
-%%Page: 167 177
-TeXDict begin 167 176 bop 0 52 a Fz(20.5)93 b(Registering)31
-b(a)g(T)-8 b(ransformation)30 b(Routine)1882 b FG(167)785
-351 y Ft(OUT\()41 b(POINT,)h(COORD)f(\))i(=)g(AST__BAD)654
-451 y(ELSE)785 551 y(OUT\()e(POINT,)h(COORD)f(\))i(=)g(SQRT\()f(X)h(\))
-654 650 y(ENDIF)44 750 y(3)435 b(CONTINUE)44 849 y(4)304
-b(CONTINUE)262 949 y(ENDIF)262 1049 y(END)0 1303 y FG(As)28
-b(y)m(ou)h(can)g(see,)h(the)e(routine)h(comes)g(in)f(t)m(w)m(o)i(halv)m
-(es)g(whic)m(h)e(implemen)m(t)h(the)g(forw)m(ard)f(and)f(in)m(v)m(erse)
-j(co)s(or-)0 1416 y(dinate)25 b(transformations.)39 b(The)24
-b(n)m(um)m(b)s(er)g(of)h(p)s(oin)m(ts)f(to)i(b)s(e)e(transformed)g
-(\(NPOINT\))h(and)f(the)h(n)m(um)m(b)s(ers)e(of)0 1529
-y(input)j(and)h(output)g(co)s(ordinates)g(p)s(er)g(p)s(oin)m(t)g
-(\(NCOORD)p Fy(_)p FG(IN)g(and)f(NCOORD)p Fy(_)p FG(OUT|in)g(this)h
-(case)h(b)s(oth)0 1642 y(are)34 b(assumed)e(equal\))j(are)f(passed)e
-(to)j(the)e(routine.)50 b(A)34 b(pair)f(of)g(lo)s(ops)h(then)f
-(accesses)i(all)f(the)g(co)s(ordinate)0 1755 y(v)-5 b(alues.)55
-b(Note)37 b(that)e(it)h(is)f(legitimate)j(to)e(omit)g(one)f(or)g(other)
-h(of)f(the)g(forw)m(ard/in)m(v)m(erse)h(transformations)0
-1868 y(and)31 b(simply)g(not)h(to)g(implemen)m(t)g(it,)h(if)e(it)h
-(will)g(not)g(b)s(e)f(required.)43 b(It)32 b(is)f(also)i(p)s
-(ermissible)d(to)j(require)e(that)0 1981 y(the)d(n)m(um)m(b)s(ers)e(of)
-i(input)f(and)g(output)g(co)s(ordinates)i(b)s(e)e(\014xed)g(\()p
-Fx(e.g.)g FG(at)i(2\),)g(or)f(to)g(write)g(the)g(routine)g(so)g(that)0
-2094 y(it)j(can)g(handle)f(arbitrary)g(dimensionalit)m(y)-8
-b(,)32 b(as)e(here.)0 2254 y(Before)h(using)e(an)g(incoming)h(co)s
-(ordinate,)h(the)f(routine)f(m)m(ust)h(\014rst)f(c)m(hec)m(k)i(that)f
-(it)g(is)g(not)g(set)g(to)g(the)g(v)-5 b(alue)0 2367
-y(AST)p Fy(__)p FG(BAD,)29 b(whic)m(h)f(indicates)i(missing)e(data)i
-(\()p Fu(x)p FG(5.8\).)42 b(If)28 b(it)i(is,)f(the)g(same)g(v)-5
-b(alue)29 b(is)g(also)h(assigned)f(to)g(an)m(y)0 2480
-y(a\013ected)j(output)e(co)s(ordinates.)41 b(The)30 b(v)-5
-b(alue)31 b(AST)p Fy(__)p FG(BAD)f(is)g(also)i(generated)f(if)f(an)m(y)
-h(co)s(ordinates)g(cannot)0 2593 y(b)s(e)k(transformed.)55
-b(In)35 b(this)h(example,)h(this)f(can)g(happ)s(en)d(with)j(the)f(in)m
-(v)m(erse)i(transformation)f(if)f(negativ)m(e)0 2706
-y(v)-5 b(alues)31 b(are)f(encoun)m(tered,)i(so)e(that)h(the)g(square)f
-(ro)s(ot)h(cannot)f(b)s(e)g(tak)m(en.)0 2867 y(There)35
-b(are)h(v)m(ery)f(few)g(restrictions)i(on)e(what)g(a)h(co)s(ordinate)g
-(transformation)g(routine)f(ma)m(y)h(do.)56 b(F)-8 b(or)36
-b(ex-)0 2980 y(ample,)31 b(it)g(ma)m(y)g(freely)f(p)s(erform)f(I/O)i
-(to)g(access)g(an)m(y)g(external)g(data)g(needed,)g(it)f(ma)m(y)h(in)m
-(v)m(ok)m(e)i(other)d(AST)0 3093 y(facilities)36 b(\(but)c(b)s(ew)m
-(are)i(of)f(un)m(w)m(an)m(ted)h(recursion\),)g Fx(etc.)49
-b FG(T)m(ypically)-8 b(,)36 b(y)m(ou)d(ma)m(y)h(also)h(w)m(an)m(t)f(to)
-g(pass)f(infor-)0 3206 y(mation)k(to)g(it)f Fx(via)h
-FG(global)g(v)-5 b(ariables)37 b(held)f(in)f(common)i(blo)s(c)m(ks.)58
-b(Remem)m(b)s(er,)38 b(ho)m(w)m(ev)m(er,)h(that)e(whatev)m(er)0
-3318 y(facilities)c(the)d(transformation)h(routine)f(requires)g(m)m
-(ust)g(b)s(e)g(a)m(v)-5 b(ailable)33 b(in)d(ev)m(ery)h(program)f(whic)m
-(h)g(uses)g(it.)0 3479 y(Generally)-8 b(,)36 b(it)d(is)g(not)h(a)f(go)s
-(o)s(d)g(idea)h(to)g(retain)f(con)m(text)i(information)f(within)e(a)i
-(transformation)f(routine.)0 3592 y(That)39 b(is,)i(it)f(should)e
-(transform)g(eac)m(h)j(set)e(of)g(co)s(ordinates)h(as)f(a)h(single)g(p)
-s(oin)m(t)f(and)f(retain)i(no)f(memory)0 3705 y(of)34
-b(the)g(p)s(oin)m(ts)g(it)h(has)f(transformed)f(b)s(efore.)51
-b(This)34 b(is)g(in)f(order)h(to)h(conform)f(with)f(the)i(AST)e(mo)s
-(del)h(of)g(a)0 3818 y(Mapping.)0 3979 y(If)i(an)h(error)f(o)s(ccurs)g
-(within)g(a)h(transformation)g(routine,)i(it)e(should)f(set)h(its)g(ST)
--8 b(A)g(TUS)36 b(argumen)m(t)h(to)h(an)0 4092 y(error)c(v)-5
-b(alue)35 b(b)s(efore)g(returning.)52 b(This)34 b(will)h(alert)h(AST)e
-(to)h(the)g(error,)h(causing)f(it)g(to)g(ab)s(ort)g(the)g(curren)m(t)0
-4205 y(op)s(eration.)62 b(The)37 b(error)g(v)-5 b(alue)37
-b(AST)p Fy(__)p FG(ITFER)f(is)h(a)m(v)-5 b(ailable)40
-b(for)d(this)g(purp)s(ose,)h(but)f(other)g(v)-5 b(alues)38
-b(ma)m(y)0 4317 y(also)c(b)s(e)f(used)g(\()p Fx(e.g.)g
-FG(if)h(y)m(ou)g(wish)e(to)j(distinguish)d(di\013eren)m(t)i(t)m(yp)s
-(es)g(of)g(error\).)50 b(The)33 b(AST)p Fy(__)p FG(ITFER)f(error)0
-4430 y(v)-5 b(alue)31 b(is)f(de\014ned)f(in)h(the)h(AST)p
-Fy(_)p FG(ERR)e(include)h(\014le.)0 4721 y Fw(20.5)112
-b(Registering)38 b(a)g(T)-9 b(ransformation)38 b(Routine)0
-4940 y FG(Ha)m(ving)28 b(written)f(y)m(our)f(co)s(ordinate)i
-(transformation)f(routine,)h(the)f(next)g(step)f(is)h(to)h(register)f
-(it)h(with)e(AST.)0 5053 y(Registration)32 b(is)f(p)s(erformed)d(using)
-i(AST)p Fy(_)p FG(INTRAREG,)g(as)g(follo)m(ws:)262 5295
-y Ft(EXTERNAL)40 b(SQRTRAN)262 5494 y(CHARACTER)f(*)44
-b(\()f(80)f(\))i(AUTHOR,)c(CONTACT,)h(PURPOSE)262 5693
-y(...)p eop end
-%%Page: 168 178
-TeXDict begin 168 177 bop 0 52 a FG(168)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))262 451 y Ft(PURPOSE)40 b(=)j('Square)e
-(each)h(coordinate)d(value')262 551 y(AUTHOR)84 b(=)43
-b('R.F.)f(Warren-Smith)d(&)k(D.S.)f(Berry')262 650 y(CONTACT)e(=)j
-('http://www.starl)o(ink)o(.r)o(l.)o(ac.)o(uk)o(/cg)o(i-)o(bi)o(n/h)o
-(tx)o(ser)o(ve)o(r/')37 b(//)697 750 y('sun210.htx/?xref)o(_Sq)o(rT)o
-(ra)o(n')262 949 y(CALL)k(AST_INTRAREG\()e('SqrTran',)g(2,)k(2,)g
-(SQRTRAN,)d(0,)218 1049 y(:)828 b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f
-(STATUS)h(\))0 1270 y FG(Note)32 b(that)f(the)f(transformation)h
-(routine)f(m)m(ust)h(also)g(app)s(ear)f(in)g(a)g(F)-8
-b(ortran)32 b(EXTERNAL)d(statemen)m(t.)0 1423 y(The)37
-b(\014rst)g(argumen)m(t)h(to)h(AST)p Fy(_)p FG(INTRAREG)e(is)g(a)h
-(name)g(b)m(y)g(whic)m(h)f(the)h(transformation)g(routine)g(will)0
-1535 y(b)s(e)d(kno)m(wn.)58 b(This)35 b(will)h(b)s(e)g(used)f(when)g(w)
-m(e)i(come)g(to)f(create)i(an)e(In)m(traMap)h(and)e(is)h(case)h
-(sensitiv)m(e.)59 b(W)-8 b(e)0 1648 y(recommend)36 b(that)h(y)m(ou)f
-(base)h(this)f(on)g(the)g(actual)i(routine)e(name)h(and)e(mak)m(e)i
-(this)g(su\016cien)m(tly)f(un)m(usual)0 1761 y(that)31
-b(it)g(is)f(unlik)m(ely)h(to)g(clash)g(with)f(an)m(y)h(other)g
-(routines)f(in)g(most)h(p)s(eople's)f(soft)m(w)m(are.)0
-1914 y(The)24 b(next)h(t)m(w)m(o)i(argumen)m(ts)e(sp)s(ecify)f(the)h(n)
-m(um)m(b)s(er)f(of)h(input)f(and)g(output)g(co)s(ordinates)i(whic)m(h)f
-(the)g(transfor-)0 2027 y(mation)h(routine)f(will)h(handle.)38
-b(These)25 b(corresp)s(ond)f(with)h(the)g(Nin)g(and)g(Nout)h
-(attributes)f(of)h(the)f(In)m(traMap)0 2140 y(w)m(e)k(will)h(create.)41
-b(Here,)30 b(w)m(e)g(ha)m(v)m(e)g(set)f(them)g(b)s(oth)f(to)i(2,)g
-(whic)m(h)e(means)h(that)h(w)m(e)f(will)g(only)g(b)s(e)g(able)g(to)h
-(cre-)0 2252 y(ate)i(In)m(traMaps)f(with)f(2)h(input)f(and)g(2)h
-(output)f(co)s(ordinates)h(\(despite)h(the)e(fact)i(that)f(the)g
-(transformation)0 2365 y(routine)26 b(can)g(actually)i(handle)d(other)h
-(dimensionalities\).)41 b(W)-8 b(e)27 b(will)g(see)f(later)h(\()p
-Fu(x)p FG(20.8\))i(ho)m(w)c(to)i(remo)m(v)m(e)h(this)0
-2478 y(restriction.)0 2631 y(The)i(fourth)f(argumen)m(t)h(should)f(con)
-m(tain)j(a)e(set)h(of)f(\015ags)g(whic)m(h)g(describ)s(e)f(the)h
-(transformation)h(routine)f(in)0 2744 y(a)f(little)h(more)f(detail.)41
-b(W)-8 b(e)30 b(will)f(return)e(to)j(this)e(shortly)h(\()p
-Fu(x)p FG(20.7)h(&)f Fu(x)p FG(20.10\).)42 b(F)-8 b(or)30
-b(no)m(w,)f(w)m(e)g(supply)e(a)i(v)-5 b(alue)0 2857 y(of)31
-b(zero.)0 3009 y(The)42 b(remaining)g(argumen)m(ts)h(are)f(c)m
-(haracter)i(strings)e(whic)m(h)g(do)s(cumen)m(t)g(the)h(transformation)
-f(routine,)0 3122 y(mainly)c(for)f(the)h(b)s(ene\014t)f(of)h(an)m(y)m
-(one)g(who)g(is)f(unfortunate)g(enough)h(to)g(encoun)m(ter)g(a)g
-(reference)g(to)h(it)f(in)0 3235 y(their)c(data)h(whic)m(h)e(they)h
-(cannot)h(in)m(terpret.)52 b(As)34 b(explained)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FG(20.3\),)j(y)m(ou)c(should)f(try)h(and)f(a)m(v)m(oid)0
-3348 y(this,)e(but)e(acciden)m(ts)j(will)f(happ)s(en,)e(so)h(y)m(ou)h
-(should)f(alw)m(a)m(ys)h(pro)m(vide)g(strings)f(con)m(taining)i(the)f
-(follo)m(wing:)111 3569 y(1.)46 b(A)31 b(short)f(description)g(of)h
-(what)f(the)h(transformation)f(routine)h(is)f(for.)111
-3747 y(2.)46 b(The)30 b(name)h(of)f(the)h(author.)111
-3924 y(3.)46 b(Con)m(tact)32 b(details,)g(suc)m(h)e(as)h(an)f(e-mail)i
-(or)e(WWW)h(address.)0 4145 y(The)h(idea)i(is)f(that)g(an)m(y)m(one)h
-(\014nding)e(an)h(In)m(traMap)g(in)g(their)g(data,)h(but)f(lac)m(king)h
-(the)f(necessary)h(transfor-)0 4258 y(mation)h(routine,)h(should)e(b)s
-(e)g(able)h(to)h(con)m(tact)h(the)e(author)f(and)g(mak)m(e)i(a)f
-(sensible)f(enquiry)g(in)h(order)f(to)0 4371 y(obtain)h(it.)55
-b(If)35 b(y)m(ou)g(exp)s(ect)g(man)m(y)g(enquiries,)h(y)m(ou)f(ma)m(y)h
-(lik)m(e)g(to)f(set)h(up)e(a)h(W)-8 b(orld)35 b(Wide)h(W)-8
-b(eb)35 b(page)h(and)0 4484 y(use)c(that)i(instead)f(\(in)g(the)g
-(example)g(ab)s(o)m(v)m(e,)i(w)m(e)e(use)f(the)h(WWW)h(address)e(of)h
-(the)g(relev)-5 b(an)m(t)34 b(part)f(of)g(this)0 4597
-y(do)s(cumen)m(t\).)0 4875 y Fw(20.6)112 b(Creating)38
-b(an)g(In)m(traMap)0 5086 y FG(Once)30 b(a)h(transformation)g(routine)f
-(b)s(een)g(registered,)h(creating)h(an)e(In)m(traMap)h(from)f(it)h(is)f
-(simple:)262 5295 y Ft(INTEGER)40 b(INTRAMAP)262 5494
-y(...)262 5693 y(INTRAMAP)g(=)j(AST_INTRAMAP\()38 b('SqrTran',)i(2,)i
-(2,)h(')g(',)g(STATUS)e(\);)p eop end
-%%Page: 169 179
-TeXDict begin 169 178 bop 0 52 a Fz(20.7)93 b(Restricted)31
-b(Implemen)m(tations)g(of)g(T)-8 b(ransformation)30 b(Routines)1166
-b FG(169)0 351 y(W)-8 b(e)35 b(simply)e(use)g(the)h(AST)p
-Fy(_)p FG(INTRAMAP)f(constructor)h(function)g(and)f(pass)g(it)h(the)g
-(name)g(of)g(the)f(trans-)0 464 y(formation)j(routine)f(to)h(use.)56
-b(This)34 b(name)i(is)f(the)h(same)g(\(case)g(sensitiv)m(e\))h(one)f
-(that)g(w)m(e)g(asso)s(ciated)h(with)0 577 y(the)31 b(routine)f(when)f
-(w)m(e)i(registered)g(it)g(using)f(AST)p Fy(_)p FG(INTRAREG)f(\()p
-Fu(x)p FG(20.5\).)0 742 y(Y)-8 b(ou)31 b(can,)g(of)g(course,)g
-(register)h(an)m(y)f(n)m(um)m(b)s(er)e(of)i(transformation)g(routines)g
-(and)f(select)i(whic)m(h)e(one)h(to)h(use)0 855 y(whenev)m(er)h(y)m(ou)
-g(create)h(an)e(In)m(traMap.)48 b(Y)-8 b(ou)34 b(can)f(also)g(create)h
-(an)m(y)f(n)m(um)m(b)s(er)f(of)h(indep)s(enden)m(t)e(In)m(traMaps)0
-968 y(using)d(eac)m(h)i(transformation)f(routine.)40
-b(In)28 b(this)h(sense,)g(eac)m(h)h(transformation)f(routine)f(y)m(ou)h
-(register)h(e\013ec-)0 1081 y(tiv)m(ely)35 b(creates)g(a)g(new)e
-(\\sub-class")h(of)g(In)m(traMap,)h(from)f(whic)m(h)f(y)m(ou)h(can)g
-(create)h(Ob)5 b(jects)34 b(just)f(lik)m(e)i(an)m(y)0
-1193 y(other)h(class.)57 b(Ho)m(w)m(ev)m(er,)39 b(an)c(error)g(will)h
-(o)s(ccur)f(if)h(y)m(ou)g(attempt)g(to)g(use)g(a)g(transformation)f
-(routine)h(that)0 1306 y(has)30 b(not)h(y)m(et)g(b)s(een)f(registered.)
-0 1471 y(The)37 b(second)h(and)g(third)f(argumen)m(ts)h(to)h(AST)p
-Fy(_)p FG(INTRAMAP)e(are)h(the)g(n)m(um)m(b)s(ers)f(of)h(input)f(and)g
-(output)0 1584 y(co)s(ordinates.)j(These)24 b(de\014ne)g(the)h(Nin)f
-(and)g(Nout)h(attributes)g(for)g(the)g(In)m(traMap)g(that)g(is)g
-(created)g(and)f(they)0 1697 y(m)m(ust)30 b(matc)m(h)i(the)e(corresp)s
-(onding)f(n)m(um)m(b)s(ers)g(giv)m(en)j(when)d(the)i(transformation)f
-(routine)h(w)m(as)f(registered.)0 1862 y(The)38 b(p)s(en)m(ultimate)h
-(argumen)m(t)g(is)f(the)h(usual)f(attribute)h(initialisation)h(string.)
-65 b(Y)-8 b(ou)39 b(ma)m(y)g(set)g(attribute)0 1975 y(v)-5
-b(alues)36 b(for)f(an)g(In)m(traMap)g(in)g(exactly)i(the)f(same)f(w)m
-(a)m(y)i(as)e(for)g(an)m(y)h(other)f(Mapping)g(\()p Fu(x)p
-FG(4.6,)k(and)c(also)h(see)0 2088 y Fu(x)p FG(20.9\).)0
-2388 y Fw(20.7)112 b(Restricted)37 b(Implemen)m(tations)i(of)f(T)-9
-b(ransformation)38 b(Routines)0 2612 y FG(Y)-8 b(ou)29
-b(ma)m(y)f(not)h(alw)m(a)m(ys)h(w)m(an)m(t)f(to)g(use)f(b)s(oth)f(the)h
-(forw)m(ard)g(and)g(in)m(v)m(erse)h(transformations)f(when)f(y)m(ou)i
-(create)0 2725 y(an)41 b(In)m(traMap,)k(so)c(it)h(is)f(p)s(ossible)g
-(to)h(omit)g(either)g(from)e(the)i(underlying)e(co)s(ordinate)i
-(transformation)0 2838 y(routine.)f(Consider)29 b(the)i(follo)m(wing,)h
-(for)e(example:)262 3093 y Ft(SUBROUTINE)39 b(POLY3TRAN\()g(THIS,)j
-(NPOINT,)f(NCOORD_IN,)e(INDIM,)i(IN,)i(FORWARD,)218 3193
-y(:)958 b(NCOORD_OUT,)39 b(OUTDIM,)i(OUT,)h(STATUS)f(\))262
-3292 y(INTEGER)f(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(NCOORD_OUT,)e
-(OUTDIM,)i(STATUS)262 3392 y(DOUBLE)g(PRECISION)e(IN\()k(INDIM,)e
-(NCOORD_IN)f(\),)j(OUT\()e(OUTDIM,)g(NCOORD_OUT)f(\))262
-3492 y(LOGICAL)g(FORWARD)262 3691 y(INCLUDE)g('AST_PAR')262
-3791 y(DOUBLE)h(PRECISION)e(X)262 3890 y(INTEGER)h(POINT)0
-4090 y(*)87 b(Forward)40 b(transformation.)262 4189 y(DO)i(1)h(POINT)f
-(=)h(1,)g(NPOINT)392 4289 y(X)g(=)h(IN\()e(POINT,)f(1)i(\))392
-4388 y(IF)g(\()g(X)g(.EQ.)f(AST__BAD)f(\))i(THEN)523
-4488 y(OUT\()f(POINT,)f(1)i(\))g(=)h(AST__BAD)392 4588
-y(ELSE)523 4687 y(OUT\()e(POINT,)f(1)i(\))g(=)218 4787
-y(:)261 b(6.18D0)41 b(+)i(X)g(*)h(\()f(0.12D0)e(+)i(X)g(*)g(\()h
-(-0.003D0)c(+)j(X)g(*)g(0.0000101D0)c(\))44 b(\))392
-4887 y(END)f(IF)44 4986 y(1)174 b(CONTINUE)262 5086 y(END)0
-5354 y FG(This)44 b(implemen)m(ts)h(a)h(1-dimensional)g(cubic)e(p)s
-(olynomial)i(transformation.)84 b(Since)45 b(this)g(is)g(somewhat)0
-5467 y(a)m(wkw)m(ard)e(to)g(in)m(v)m(ert,)k(ho)m(w)m(ev)m(er,)h(w)m(e)
-43 b(ha)m(v)m(e)h(only)f(implemen)m(ted)g(the)g(forw)m(ard)f
-(transformation.)78 b(When)0 5580 y(registering)44 b(the)e(routine,)k
-(this)c(is)h(indicated)g(via)g(the)f(FLA)m(GS)i(argumen)m(t)e(to)i(AST)
-p Fy(_)p FG(INTRAREG,)d(as)0 5693 y(follo)m(ws:)p eop
-end
-%%Page: 170 180
-TeXDict begin 170 179 bop 0 52 a FG(170)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))262 351 y Ft(EXTERNAL)40 b(POLY3TRAN)262
-551 y(...)262 750 y(CALL)h(AST_INTRAREG\()e('Poly3Tran',)f(1,)43
-b(1,)g(POLY3TRAN,)c(AST__NOINV,)218 849 y(:)828 b(PURPOSE,)40
-b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))0 1179 y FG(Here,)30
-b(the)f(\014fth)f(argumen)m(t)h(has)f(b)s(een)g(set)i(to)f(the)g
-(\015ag)g(v)-5 b(alue)30 b(AST)p Fy(__)p FG(NOINV)d(to)j(indicate)f
-(the)g(lac)m(k)i(of)e(an)0 1292 y(in)m(v)m(erse.)42 b(If)29
-b(the)h(forw)m(ard)g(transformation)g(w)m(ere)h(absen)m(t,)g(w)m(e)f(w)
-m(ould)g(use)g(AST)p Fy(__)p FG(NOF)m(OR)f(instead.)41
-b(Flag)0 1405 y(v)-5 b(alues)31 b(for)f(this)g(argumen)m(t)h(ma)m(y)g
-(b)s(e)f(com)m(bined)g(b)m(y)g(summing)g(them)g(if)h(necessary)-8
-b(.)0 1773 y Fw(20.8)112 b(V)-9 b(ariable)38 b(Num)m(b)s(ers)g(of)g(Co)
-s(ordinates)0 2028 y FG(In)g(our)f(earlier)i(examples,)i(w)m(e)e(ha)m
-(v)m(e)h(used)d(a)i(\014xed)e(n)m(um)m(b)s(er)g(of)i(input)e(and)h
-(output)f(co)s(ordinates)i(when)0 2141 y(registering)d(a)f(co)s
-(ordinate)h(transformation)f(routine.)55 b(It)35 b(is)g(not)g
-(necessary)g(to)h(imp)s(ose)e(this)h(restriction,)0 2254
-y(ho)m(w)m(ev)m(er,)c(if)f(the)g(transformation)g(routine)g(can)g(cop)s
-(e)g(with)f(a)h(v)-5 b(ariable)31 b(n)m(um)m(b)s(er)d(of)i(co)s
-(ordinates)g(\(as)h(with)0 2367 y(the)41 b(example)h(in)f
-Fu(x)p FG(20.4\).)75 b(W)-8 b(e)43 b(indicate)f(the)f(acceptabilit)m(y)
-k(of)c(a)g(v)-5 b(ariable)42 b(n)m(um)m(b)s(er)e(when)g(registering)0
-2480 y(the)31 b(transformation)f(routine)h(b)m(y)f(supplying)f(the)h(v)
--5 b(alue)31 b(AST)p Fy(__)p FG(ANY)f(for)g(the)h(n)m(um)m(b)s(er)e(of)
-h(input)g(and/or)0 2592 y(output)g(co)s(ordinates,)h(as)g(follo)m(ws:)
-262 2909 y Ft(CALL)41 b(AST_INTRAREG\()e('SqrTran',)g(AST__ANY,)h
-(AST__ANY,)g(SQRTRAN,)g(0,)218 3009 y(:)828 b(PURPOSE,)40
-b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))0 3338 y FG(The)h(result)g(is)g
-(that)h(an)f(In)m(traMap)h(ma)m(y)f(no)m(w)h(b)s(e)e(created)i(with)f
-(an)m(y)h(n)m(um)m(b)s(er)e(of)h(input)f(and)h(output)0
-3451 y(co)s(ordinates.)f(F)-8 b(or)32 b(example:)262
-3767 y Ft(INTEGER)40 b(INTRAMAP1,)g(INTRAMAP2)262 3967
-y(...)262 4166 y(INTRAMAP1)f(=)44 b(AST_INTRAMAP\()38
-b('SqrTran',)h(1,)k(1,)g(')g(',)g(STATUS)e(\))262 4266
-y(INTRAMAP2)e(=)44 b(AST_INTRAMAP\()38 b('SqrTran',)h(3,)k(3,)g
-('Invert=1',)c(STATUS)i(\))0 4595 y FG(It)33 b(is)f(p)s(ossible)g(to)h
-(\014x)f(either)h(the)g(n)m(um)m(b)s(er)e(of)i(input)e(or)i(output)f
-(co)s(ordinates)h(\(b)m(y)g(supplying)e(an)h(explicit)0
-4708 y(n)m(um)m(b)s(er)27 b(to)j(AST)p Fy(_)p FG(INTRAREG\),)e(but)f
-(more)i(subtle)f(restrictions)i(on)e(the)h(n)m(um)m(b)s(er)e(of)i(co)s
-(ordinates,)h(suc)m(h)0 4821 y(as)h(requiring)e(that)i(Nin)g(and)e
-(Nout)i(b)s(e)f(equal,)h(are)g(not)g(supp)s(orted.)38
-b(This)30 b(means)g(that:)262 5138 y Ft(INTRAMAP)40 b(=)j
-(AST_INTRAMAP\()38 b('SqrTran',)i(1,)i(2,)h(')g(',)g(STATUS)e(\))0
-5467 y FG(will)j(b)s(e)f(accepted)i(without)e(error,)k(although)d(the)g
-(transformation)g(routine)g(cannot)g(actually)h(handle)0
-5580 y(suc)m(h)32 b(a)g(com)m(bination)h(sensibly)-8
-b(.)46 b(If)31 b(this)h(is)g(imp)s(ortan)m(t,)h(it)f(w)m(ould)g(b)s(e)f
-(w)m(orth)h(adding)g(a)g(c)m(hec)m(k)i(within)d(the)0
-5693 y(transformation)g(routine)f(itself,)i(so)e(that)h(the)g(error)f
-(w)m(ould)g(b)s(e)g(detected)h(when)f(it)g(came)i(to)f(b)s(e)f(used.)p
-eop end
-%%Page: 171 181
-TeXDict begin 171 180 bop 0 52 a Fz(20.9)93 b(Adapting)30
-b(a)h(T)-8 b(ransformation)30 b(Routine)h(to)g(Individual)e(In)m
-(traMaps)969 b FG(171)0 351 y Fw(20.9)112 b(Adapting)38
-b(a)g(T)-9 b(ransformation)39 b(Routine)e(to)g(Individual)i(In)m
-(traMaps)0 579 y FG(In)j(the)i(examples)f(giv)m(en)i(so)e(far,)j(our)d
-(co)s(ordinate)h(transformation)f(routines)g(ha)m(v)m(e)i(not)e(made)g
-(use)g(of)0 692 y(the)34 b(THIS)f(p)s(oin)m(ter)h(passed)f(to)i(them)f
-(\(whic)m(h)g(iden)m(ti\014es)g(the)g(In)m(traMap)h(whose)e
-(transformation)i(w)m(e)f(are)0 805 y(implemen)m(ting\).)71
-b(In)40 b(practice,)k(this)c(will)h(often)f(b)s(e)g(the)g(case.)71
-b(Ho)m(w)m(ev)m(er,)45 b(the)40 b(presence)h(of)f(the)g(THIS)0
-918 y(p)s(oin)m(ter)d(allo)m(ws)i(the)f(transformation)g(routine)f(to)i
-(in)m(v)m(ok)m(e)g(an)m(y)f(other)f(AST)g(routine)h(on)f(the)h(In)m
-(traMap,)0 1031 y(and)i(this)g(p)s(ermits)g(enquiries)g(ab)s(out)g(its)
-h(attributes.)71 b(The)40 b(transformation)h(routine's)f(b)s(eha)m
-(viour)g(can)0 1144 y(therefore)35 b(b)s(e)f(mo)s(di\014ed)g(according)
-i(to)f(an)m(y)g(attribute)h(v)-5 b(alues)35 b(whic)m(h)f(are)i(set.)54
-b(This)34 b(turns)f(out)i(to)h(b)s(e)e(a)0 1256 y(useful)d(thing)h(to)g
-(do,)h(so)f(eac)m(h)g(In)m(traMap)h(has)e(a)h(sp)s(ecial)h(In)m
-(traFlag)g(attribute)g(reserv)m(ed)f(for)f(exactly)j(this)0
-1369 y(purp)s(ose.)0 1536 y(Consider,)23 b(for)e(instance,)j(the)e
-(case)h(where)e(the)h(transformation)g(routine)f(has)h(access)h(to)f
-(sev)m(eral)h(alternativ)m(e)0 1649 y(sets)37 b(of)f(in)m
-(ternally-stored)i(data)e(whic)m(h)g(it)h(ma)m(y)g(apply)f(to)h(p)s
-(erform)d(its)j(transformation.)58 b(Rather)37 b(than)0
-1762 y(implemen)m(t)28 b(man)m(y)f(di\013eren)m(t)g(v)m(ersions)h(of)f
-(the)g(transformation)g(routine,)h(y)m(ou)g(ma)m(y)f(switc)m(h)h(b)s
-(et)m(w)m(een)g(them)0 1875 y(b)m(y)k(setting)i(a)f(v)-5
-b(alue)33 b(for)f(the)g(In)m(traFlag)i(attribute)g(when)d(y)m(ou)i
-(create)h(an)e(instance)h(of)g(an)f(In)m(traMap,)i(for)0
-1988 y(example:)262 2250 y Ft(INTRAMAP1)39 b(=)44 b(AST_INTRAMAP\()38
-b('MyTran',)i(2,)i(2,)h('IntraFlag=A',)38 b(STATUS)j(\))262
-2349 y(INTRAMAP2)e(=)44 b(AST_INTRAMAP\()38 b('MyTran',)i(2,)i(2,)h
-('IntraFlag=B',)38 b(STATUS)j(\))0 2624 y FG(The)36 b(transformation)h
-(routine)g(ma)m(y)h(then)e(enquire)g(the)h(v)-5 b(alue)38
-b(of)f(the)g(In)m(traFlag)h(attribute)f(\()p Fx(e.g.)g
-FG(using)0 2737 y(AST)p Fy(_)p FG(GETC)e(and)h(passing)g(it)h(the)g
-(THIS)e(p)s(oin)m(ter\))i(and)f(use)g(whic)m(hev)m(er)h(dataset)h(is)e
-(required)g(for)g(that)0 2850 y(particular)31 b(In)m(traMap.)0
-3017 y(This)d(approac)m(h)h(is)f(particularly)h(useful)f(when)g(the)h
-(n)m(um)m(b)s(er)e(of)i(p)s(ossible)f(transformations)h(is)f(un)m(b)s
-(ounded)0 3130 y(or)j(not)g(kno)m(wn)g(in)g(adv)-5 b(ance,)32
-b(in)e(whic)m(h)h(case)h(the)g(In)m(traFlag)g(attribute)g(ma)m(y)g(b)s
-(e)e(used)g(to)i(hold)f(n)m(umerical)0 3243 y(v)-5 b(alues)33
-b(enco)s(ded)f(as)h(part)f(of)h(a)g(c)m(haracter)h(string)f
-(\(e\013ectiv)m(ely)j(using)c(them)g(as)h(data)g(for)g(the)f(In)m
-(traMap\).)0 3356 y(It)41 b(is)f(also)i(sup)s(erior)d(to)j(the)e(use)h
-(of)g(a)g(global)g(switc)m(h)h(for)e(comm)m(unication)i(\()p
-Fx(e.g.)e FG(setting)i(an)f(index)f(to)0 3469 y(select)29
-b(the)f(\\curren)m(t")g(data)g(b)s(efore)f(using)g(the)h(In)m
-(traMap\),)h(b)s(ecause)e(it)h(con)m(tin)m(ues)h(to)f(w)m(ork)g(when)e
-(sev)m(eral)0 3582 y(In)m(traMaps)35 b(are)g(em)m(b)s(edded)e(within)h
-(a)h(more)f(complex)h(comp)s(ound)e(Mapping,)j(when)d(y)m(ou)i(ma)m(y)g
-(ha)m(v)m(e)h(no)0 3695 y(con)m(trol)c(o)m(v)m(er)g(the)e(order)g(in)g
-(whic)m(h)g(they)h(are)f(used.)0 4002 y Fw(20.10)112
-b(Simplifying)40 b(In)m(traMaps)0 4230 y FG(A)28 b(notable)h(disadv)-5
-b(an)m(tage)29 b(of)f(In)m(traMaps)g(is)g(that)g(they)g(are)h(\\blac)m
-(k)g(b)s(o)m(xes")f(as)g(far)g(as)g(AST)f(is)h(concerned.)0
-4343 y(This)44 b(means)g(that)h(they)f(ha)m(v)m(e)i(limited)f(abilit)m
-(y)h(to)f(participate)h(in)e(the)g(simpli\014cation)h(of)g(comp)s(ound)
-0 4456 y(Mappings)d(p)s(erformed,)i Fx(e.g.)p FG(,)h(b)m(y)d(AST)p
-Fy(_)p FG(SIMPLIFY)f(\()p Fu(x)p FG(6.7\),)48 b(b)s(ecause)42
-b(AST)g(cannot)h(kno)m(w)f(ho)m(w)g(they)0 4569 y(in)m(teract)35
-b(with)e(other)h(Mappings.)50 b(In)33 b(realit)m(y)-8
-b(,)37 b(of)c(course,)i(they)f(will)g(often)g(implemen)m(t)g(suc)m(h)f
-(sp)s(ecialised)0 4682 y(co)s(ordinate)e(transformations)g(that)g(the)f
-(simpli\014cation)h(p)s(ossibilities)g(will)g(b)s(e)f(rather)g(limited)
-h(an)m(yw)m(a)m(y)-8 b(.)0 4849 y(One)25 b(imp)s(ortan)m(t)h
-(simpli\014cation,)h(ho)m(w)m(ev)m(er,)h(is)e(the)f(abilit)m(y)i(of)f
-(a)g(Mapping)f(to)h(cancel)h(with)e(its)h(o)m(wn)g(in)m(v)m(erse)0
-4961 y(to)k(yield)g(a)g(unit)f(Mapping)g(\(a)i(UnitMap\).)41
-b(This)29 b(is)g(imp)s(ortan)m(t)h(b)s(ecause)f(Mappings)h(are)g
-(frequen)m(tly)f(used)0 5074 y(to)c(relate)h(a)f(dataset)g(to)h(some)e
-(external)i(standard)d(\(a)i(celestial)i(co)s(ordinate)f(system,)g(for)
-e(example\).)40 b(When)0 5187 y(in)m(ter-relating)26
-b(t)m(w)m(o)f(similar)f(datasets)h(calibrated)g(using)f(the)g(same)g
-(standard,)h(part)e(of)h(the)g(Mapping)g(often)0 5300
-y(cancels,)29 b(b)s(ecause)d(it)h(is)f(applied)g(\014rst)g(in)g(one)g
-(direction)h(and)f(then)g(the)h(other,)g(e\013ectiv)m(ely)j
-(eliminating)d(the)0 5413 y(reference)h(to)g(the)f(standard.)39
-b(This)26 b(is)i(often)f(a)h(useful)e(simpli\014cation)i(and)f(can)h
-(lead)f(to)h(greater)h(e\016ciency)-8 b(.)0 5580 y(Man)m(y)23
-b(transformations)f(ha)m(v)m(e)i(this)e(prop)s(ert)m(y)g(of)g
-(cancelling)i(with)e(their)g(o)m(wn)h(in)m(v)m(erse,)i(but)c(not)i
-(necessarily)0 5693 y(all.)42 b(Consider)29 b(the)i(follo)m(wing)h
-(transformation)e(routine,)h(for)f(example:)p eop end
-%%Page: 172 182
-TeXDict begin 172 181 bop 0 52 a FG(172)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))262 351 y Ft(SUBROUTINE)39
-b(MAXTRAN\()h(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(IN,)h(FORWARD,)
-218 451 y(:)871 b(NCOORD_OUT,)39 b(OUTDIM,)i(OUT,)h(STATUS)f(\))262
-551 y(INTEGER)f(THIS,)i(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(NCOORD_OUT,)e
-(OUTDIM,)i(STATUS)262 650 y(DOUBLE)g(PRECISION)e(IN\()k(INDIM,)e
-(NCOORD_IN)f(\),)j(OUT\()e(OUTDIM,)g(NCOORD_OUT)f(\))262
-750 y(LOGICAL)g(FORWARD)262 949 y(INCLUDE)g('AST_PAR')262
-1049 y(DOUBLE)h(PRECISION)e(HI,)k(X)262 1148 y(INTEGER)d(COORD,)h
-(POINT)0 1348 y(*)87 b(Forward)40 b(transformation.)262
-1447 y(IF)i(\()h(FORWARD)e(\))i(THEN)392 1547 y(DO)g(2)g(POINT)f(=)h
-(1,)g(NPOINT)523 1646 y(HI)g(=)g(AST__BAD)523 1746 y(DO)g(1)g(COORD)e
-(=)j(1,)e(NCOORD_IN)654 1846 y(X)h(=)g(IN\()f(POINT,)g(COORD)f(\))654
-1945 y(IF)i(\()g(X)g(.NE.)f(AST__BAD)e(\))j(THEN)785
-2045 y(IF)f(\()h(X)h(.GT.)e(HI)g(.OR.)g(HI)h(.EQ.)f(AST__BAD)e(\))j(HI)
-g(=)g(X)654 2145 y(END)f(IF)44 2244 y(1)435 b(CONTINUE)44
-2344 y(2)304 b(CONTINUE)0 2543 y(*)87 b(Inverse)40 b(transformation.)
-262 2643 y(ELSE)392 2742 y(DO)j(4)g(COORD)f(=)h(1,)g(NCOORD_OUT)523
-2842 y(DO)g(3)g(POINT)e(=)j(1,)e(NPOINT)654 2942 y(OUT\()g(POINT,)f
-(COORD)g(\))j(=)f(IN\()f(POINT,)f(1)i(\))44 3041 y(3)435
-b(CONTINUE)44 3141 y(4)304 b(CONTINUE)262 3240 y(END)42
-b(IF)262 3340 y(END)0 3594 y FG(This)22 b(routine)i(tak)m(es)g(an)m(y)g
-(n)m(um)m(b)s(er)e(of)h(input)f(co)s(ordinates)i(and)f(returns)f(a)h
-(single)h(output)f(co)s(ordinate)h(whic)m(h)0 3707 y(is)j(the)g(maxim)m
-(um)g(v)-5 b(alue)27 b(of)g(the)g(input)f(co)s(ordinates.)41
-b(Its)27 b(in)m(v)m(erse)g(\(actually)i(a)f(\\pseudo-in)m(v)m(erse"\))g
-(sets)g(all)0 3820 y(the)j(input)e(co)s(ordinates)i(to)g(the)g(v)-5
-b(alue)31 b(of)f(the)h(output)f(co)s(ordinate.)2384 3787
-y Fv(31)0 3981 y FG(If)h(this)g(routine)g(is)g(applied)g(in)g(the)g
-(forw)m(ard)g(direction)h(and)e(then)h(in)g(the)h(in)m(v)m(erse)g
-(direction,)g(it)g(do)s(es)f FE(not)0 4094 y FG(in)38
-b(general)h(restore)f(the)h(original)g(co)s(ordinate)g(v)-5
-b(alues.)64 b(Ho)m(w)m(ev)m(er,)42 b(if)c(applied)g(in)g(the)g(in)m(v)m
-(erse)h(direction)0 4207 y(and)d(then)g(the)h(forw)m(ard)f(direction,)j
-(it)e(do)s(es.)59 b(Hence,)40 b(replacing)d(the)g(sequence)g(of)f(op)s
-(erations)h(with)g(an)0 4320 y(equiv)-5 b(alen)m(t)32
-b(UnitMap)f(is)f(p)s(ossible)g(in)g(the)h(latter)g(case,)h(but)e(not)g
-(in)g(the)h(former.)0 4480 y(T)-8 b(o)36 b(distinguish)e(these)i(p)s
-(ossibilities,)i(t)m(w)m(o)e(\015ag)g(v)-5 b(alues)36
-b(are)f(pro)m(vided)g(for)g(use)h(with)f(AST)p Fy(_)p
-FG(INTRAREG)0 4593 y(to)c(indicate)h(what)f(simpli\014cation)g(\(if)h
-(an)m(y\))f(is)g(p)s(ossible.)41 b(F)-8 b(or)32 b(example,)g(to)f
-(register)h(the)f(ab)s(o)m(v)m(e)h(transfor-)0 4706 y(mation)f
-(routine,)g(w)m(e)g(migh)m(t)g(use:)262 4947 y Ft(EXTERNAL)40
-b(MAXTRAN)262 5146 y(...)262 5346 y(CALL)h(AST_INTRAREG\()e('MaxTran',)
-g(AST__ANY,)h(1,)j(MAXTRAN,)d(AST__SIMPIF,)218 5445 y(:)828
-b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))p 0
-5516 1512 4 v 73 5570 a Fs(31)138 5602 y Fr(Remem)n(b)r(er)32
-b(that)g(IN)f(holds)h(the)g(original)i(\\output")e(co)r(ordinates)h
-(when)f(applying)g(the)g(in)n(v)n(erse)g(transformation)i(and)0
-5693 y(OUT)25 b(holds)h(the)g(original)h(\\input")f(co)r(ordinates.)p
-eop end
-%%Page: 173 183
-TeXDict begin 173 182 bop 0 52 a Fz(20.11)93 b(W)-8 b(riting)32
-b(and)d(Reading)i(In)m(traMaps)2068 b FG(173)0 351 y(Here,)30
-b(the)f(\015ag)g(v)-5 b(alue)30 b(AST)p Fy(__)p FG(SIMPIF)d(supplied)g
-(for)i(the)g(\014fth)f(argumen)m(t)h(indicates)h(that)g
-(simpli\014cation)0 464 y(is)44 b(p)s(ossible)g(if)h(the)f
-(transformation)h(is)g(applied)f(in)g(the)h(in)m(v)m(erse)g(direction)g
-(follo)m(w)m(ed)h(b)m(y)e(the)h(forw)m(ard)0 577 y(direction.)f(T)-8
-b(o)32 b(indicate)g(the)g(complemen)m(tary)g(case,)h(the)e(\015ag)h
-(AST)p Fy(__)p FG(SIMPFI)e(w)m(ould)h(b)s(e)f(used)h(instead.)0
-690 y(If)j(b)s(oth)g(simpli\014cations)i(are)f(p)s(ossible)f(\(as)h
-(with)g(the)g(SQR)-8 b(TRAN)34 b(function)g(in)h Fu(x)p
-FG(20.4\),)j(then)c(w)m(e)i(w)m(ould)0 803 y(use)30 b(the)h(sum)e(of)i
-(b)s(oth)e(v)-5 b(alues.)0 965 y(In)27 b(practice,)j(some)f(judgemen)m
-(t)f(is)g(usually)g(necessary)g(when)f(deciding)i(whether)e(to)i(allo)m
-(w)g(simpli\014cation.)0 1078 y(F)-8 b(or)42 b(example,)j(seen)c(in)g
-(one)g(ligh)m(t)i(our)e(SQR)-8 b(TRAN)40 b(routine)h(\()p
-Fu(x)p FG(20.4\))j(do)s(es)d(not)g(cancel)i(with)e(its)g(o)m(wn)0
-1191 y(in)m(v)m(erse,)i(b)s(ecause)c(squaring)g(a)g(co)s(ordinate)h(v)
--5 b(alue)40 b(and)f(then)g(taking)h(its)g(square)f(ro)s(ot)g(can)h(c)m
-(hange)g(the)0 1304 y(original)33 b(v)-5 b(alue,)34 b(if)e(this)g(w)m
-(as)g(negativ)m(e.)48 b(Therefore,)33 b(replacing)g(this)f(com)m
-(bination)h(with)f(a)g(UnitMap)h(will)0 1417 y(c)m(hange)27
-b(the)f(b)s(eha)m(viour)f(of)h(a)g(comp)s(ound)e(Mapping)i(and)f
-(should)f(not)i(b)s(e)f(allo)m(w)m(ed.)41 b(Seen)26 b(in)f(another)h
-(ligh)m(t,)0 1530 y(ho)m(w)m(ev)m(er,)33 b(where)e(the)h(co)s
-(ordinates)g(b)s(eing)f(pro)s(cessed)g(are)g(in)m(trinsically)i(all)f
-(p)s(ositiv)m(e,)h(it)f(is)g(a)f(p)s(ermissible)0 1643
-y(and)f(probably)f(useful)h(simpli\014cation.)0 1806
-y(If)21 b(suc)m(h)h(distinctions)g(are)h(ev)m(er)f(imp)s(ortan)m(t)g
-(in)g(practice,)j(it)e(is)f(simple)f(to)i(register)g(the)f(same)g
-(transformation)0 1918 y(routine)33 b(t)m(wice)i(with)e(di\013eren)m(t)
-g(\015ag)h(v)-5 b(alues)33 b(\(use)g(a)h(separate)g(name)f(for)g(eac)m
-(h\))i(and)d(then)h(use)g(whic)m(hev)m(er)0 2031 y(is)d(appropriate)h
-(when)e(creating)j(an)e(In)m(traMap.)0 2324 y Fw(20.11)112
-b(W)-9 b(riting)37 b(and)h(Reading)h(In)m(traMaps)0 2546
-y FG(It)i(is)h(most)f(imp)s(ortan)m(t)g(to)h(realise)h(that)f(when)e(y)
-m(ou)h(write)h(an)f(In)m(traMap)g(to)h(a)g(Channel)e(\()p
-Fu(x)p FG(15.3\),)47 b(the)0 2659 y(transformation)33
-b(routine)g(whic)m(h)g(it)h(uses)e(is)h(not)h(stored)f(with)g(it.)49
-b(T)-8 b(o)33 b(do)g(so)h(is)f(imp)s(ossible,)g(b)s(ecause)g(the)0
-2771 y(routine)e(has)f(b)s(een)g(compiled)i(and)e(loaded)h(in)m(to)h
-(memory)f(ready)f(for)h(execution)h(b)s(efore)e(AST)h(gets)g(to)h(see)0
-2884 y(it.)48 b(Ho)m(w)m(ev)m(er,)35 b(AST)d(do)s(es)g(store)h(the)g
-(name)f(asso)s(ciated)i(with)f(the)f(transformation)h(routine)g(and)e
-(v)-5 b(arious)0 2997 y(details)31 b(ab)s(out)f(the)h(In)m(traMap)g
-(itself.)0 3160 y(This)40 b(means)h(that)g(an)m(y)g(program)g
-(attempting)h(to)f(read)g(the)g(In)m(traMap)g(\()p Fu(x)p
-FG(15.4\))j(cannot)d(mak)m(e)h(use)e(of)0 3273 y(it)e(unless)e(it)i
-(also)h(has)e(indep)s(enden)m(t)f(access)i(to)g(the)g(original)g
-(transformation)g(routine.)62 b(If)36 b(it)i(do)s(es)f(not)0
-3386 y(ha)m(v)m(e)j(access)f(to)g(this)f(routine,)j(an)d(error)g(will)h
-(o)s(ccur)f(at)h(the)f(p)s(oin)m(t)h(where)e(the)i(In)m(traMap)g(is)f
-(read)g(and)0 3499 y(the)29 b(asso)s(ciated)h(error)f(message)g(will)h
-(direct)f(the)g(user)f(to)h(the)g(author)g(of)g(the)g(transformation)g
-(routine)g(for)0 3612 y(more)i(information.)0 3774 y(Ho)m(w)m(ev)m(er,)
-f(if)c(the)h(necessary)g(transformation)g(routine)g(is)g(a)m(v)-5
-b(ailable,)30 b(and)c(has)g(b)s(een)g(registered)i(b)s(efore)e(the)0
-3887 y(read)31 b(op)s(eration)h(tak)m(es)h(place,)g(then)e(AST)g(is)g
-(able)h(to)g(re-create)h(the)f(original)g(In)m(traMap)g(and)f(will)h
-(do)f(so.)0 4000 y(Registration)g(of)f(the)f(transformation)h(routine)f
-(m)m(ust,)h(of)g(course,)g(use)f(the)g(same)h(name)g(\(and,)f(in)g
-(fact,)i(b)s(e)0 4113 y(iden)m(tical)h(in)e(most)h(particulars\))g(as)f
-(w)m(as)h(used)f(in)g(the)g(original)i(program)e(whic)m(h)g(wrote)h
-(the)g(data.)0 4275 y(This)f(means)h(that)h(a)g(set)g(of)f(co-op)s
-(erating)i(programs)e(whic)m(h)f(all)j(ha)m(v)m(e)f(access)g(to)g(the)g
-(same)f(set)h(of)f(trans-)0 4388 y(formation)36 b(routines)f(and)g
-(register)h(them)g(in)f(iden)m(tical)i(fashion)e(\(see)i
-Fu(x)p FG(20.12)g(for)f(ho)m(w)f(this)g(can)h(b)s(est)f(b)s(e)0
-4501 y(ac)m(hiev)m(ed\))g(can)e(freely)g(exc)m(hange)i(data)e(that)h
-(con)m(tain)g(In)m(traMaps.)49 b(The)32 b(need)h(to)g(a)m(v)m(oid)i
-(exp)s(orting)e(suc)m(h)0 4614 y(data)e(to)g(unsusp)s(ecting)e(third)h
-(parties)g(\()p Fu(x)p FG(20.3\))j(m)m(ust,)e(ho)m(w)m(ev)m(er,)h(b)s
-(e)e(re-iterated.)0 4907 y Fw(20.12)112 b(Managing)40
-b(T)-9 b(ransformation)38 b(Routines)g(in)g(Libraries)0
-5128 y FG(If)j(y)m(ou)i(are)f(dev)m(eloping)h(a)f(large)h(suite)f(of)g
-(data)h(reduction)f(soft)m(w)m(are,)k(y)m(ou)d(ma)m(y)f(ha)m(v)m(e)h(a)
-f(need)g(to)h(use)0 5241 y(In)m(traMaps)27 b(at)f(v)-5
-b(arious)27 b(p)s(oin)m(ts)f(within)f(it.)40 b(V)-8 b(ery)27
-b(probably)f(this)g(will)g(o)s(ccur)g(in)g(unrelated)g(mo)s(dules)g
-(whic)m(h)0 5354 y(are)h(compiled)h(separately)g(and)f(then)g(stored)g
-(in)f(a)i(library)-8 b(.)40 b(Since)27 b(the)g(transformation)g
-(routines)g(required)0 5467 y(m)m(ust)34 b(b)s(e)g(registered)h(b)s
-(efore)f(they)g(can)h(b)s(e)e(used,)i(this)f(mak)m(es)h(it)g
-(di\016cult)f(to)h(decide)g(where)f(to)h(p)s(erform)0
-5580 y(this)g(registration,)i(esp)s(ecially)g(since)e(an)m(y)g
-(particular)g(data)h(reduction)e(program)h(ma)m(y)g(use)g(an)g
-(arbitrary)0 5693 y(subset)30 b(of)g(the)h(mo)s(dules)e(in)i(y)m(our)f
-(library)-8 b(.)p eop end
-%%Page: 174 184
-TeXDict begin 174 183 bop 0 52 a FG(174)772 b Fz(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FG(T)-8 b(o)32 b(assist)g(with)f
-(this)g(problem,)g(AST)f(allo)m(ws)j(y)m(ou)f(to)g(p)s(erform)d(the)j
-(same)g(registration)g(of)g(a)f(transforma-)0 464 y(tion)39
-b(routine)f(an)m(y)g(n)m(um)m(b)s(er)f(of)h(times,)j(so)d(long)h(as)f
-(it)g(is)g(p)s(erformed)f(using)g(an)h(iden)m(tical)i(in)m(v)m(o)s
-(cation)g(of)0 577 y(AST)p Fy(_)p FG(INTRAREG)35 b(on)i(eac)m(h)g(o)s
-(ccasion)h(\()p Fx(i.e.)e FG(all)h(of)g(its)g(argumen)m(ts)g(m)m(ust)f
-(b)s(e)g(iden)m(tical\).)61 b(This)36 b(means)0 690 y(y)m(ou)e(do)f
-(not)h(ha)m(v)m(e)g(to)h(k)m(eep)f(trac)m(k)g(of)g(whether)f(a)h
-(particular)g(routine)f(has)g(already)h(b)s(een)f(registered)h(but)0
-803 y(could,)c(in)e(fact,)j(register)f(it)f(on)g(eac)m(h)i(o)s(ccasion)
-f(immediately)g(b)s(efore)f(it)g(is)h(required)e(\(wherev)m(er)h(that)h
-(ma)m(y)0 916 y(b)s(e\).)62 b(In)36 b(order)h(that)h(all)h
-(registrations)g(are)e(iden)m(tical,)42 b(ho)m(w)m(ev)m(er,)f(it)d(is)f
-(recommended)g(that)h(y)m(ou)g(group)0 1029 y(them)30
-b(all)i(together)f(in)m(to)h(a)f(single)g(routine,)f(p)s(erhaps)f(as)h
-(follo)m(ws:)262 1278 y Ft(SUBROUTINE)39 b(MYTRANS\()h(STATUS)h(\))262
-1377 y(INTEGER)f(STATUS)262 1577 y(INCLUDE)g('AST_PAR')262
-1676 y(EXTERNAL)g(MAXTRAN,)g(POLY3TRAN,)g(SQRTRAN)262
-1876 y(...)262 2075 y(CALL)h(AST_INTRAREG\()e('MaxTran',)g(AST__ANY,)h
-(1,)j(MAXTRAN,)d(AST__SIMPIF,)218 2174 y(:)828 b(PURPOSE,)40
-b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))262 2374 y(...)262
-2573 y(CALL)g(AST_INTRAREG\()e('Poly3Tran',)f(1,)43 b(1,)g(POLY3TRAN,)c
-(AST__NOINV,)218 2673 y(:)828 b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f
-(STATUS)h(\))262 2872 y(...)262 3071 y(CALL)g(AST_INTRAREG\()e
-('SqrTran,)h(2,)i(2,)h(SQRTRAN,)d(0,)218 3171 y(:)828
-b(PURPOSE,)40 b(AUTHOR,)h(CONTACT,)f(STATUS)h(\))262
-3270 y(END)0 3533 y FG(Y)-8 b(ou)25 b(can)g(then)f(simply)g(in)m(v)m
-(ok)m(e)j(this)d(routine)g(wherev)m(er)h(necessary)-8
-b(.)40 b(It)24 b(is,)i(in)e(fact,)j(particularly)e(imp)s(ortan)m(t)0
-3646 y(to)i(register)g(all)g(relev)-5 b(an)m(t)27 b(transformation)f
-(routines)g(in)g(this)g(w)m(a)m(y)h(b)s(efore)e(y)m(ou)i(attempt)g(to)g
-(read)e(an)h(Ob)5 b(ject)0 3758 y(that)28 b(migh)m(t)g(b)s(e)f(\(or)h
-(con)m(tain\))h(an)e(In)m(traMap)h(\()p Fu(x)p FG(20.11\).)43
-b(This)26 b(is)i(b)s(ecause)f(y)m(ou)h(ma)m(y)g(not)f(kno)m(w)h(in)f
-(adv)-5 b(ance)0 3871 y(whic)m(h)34 b(of)g(these)g(transformation)h
-(routines)f(the)g(In)m(traMap)g(will)h(use,)g(so)f(they)g(m)m(ust)g
-(all)h(b)s(e)e(a)m(v)-5 b(ailable)37 b(in)0 3984 y(order)30
-b(to)h(a)m(v)m(oid)h(an)e(error.)p eop end
-%%Page: 175 185
-TeXDict begin 175 184 bop 3643 52 a FG(175)0 351 y FA(21)135
-b(Pro)t(ducing)44 b(Graphical)h(Output)g(\(Plots\))0
-606 y FG(Graphical)29 b(output)f(from)g(AST)f(is)i(p)s(erformed)d
-(though)i(an)g(Ob)5 b(ject)29 b(called)g(a)g(Plot,)h(whic)m(h)e(is)g(a)
-h(sp)s(ecialised)0 719 y(form)e(of)h(F)-8 b(rameSet.)41
-b(A)28 b(Plot)h(do)s(es)e(not)h(represen)m(t)g(the)g(graphical)g(con)m
-(ten)m(t)i(itself,)f(but)e(is)h(a)g(route)g(through)0
-832 y(whic)m(h)22 b(plotting)i(op)s(erations,)h(suc)m(h)d(as)h(dra)m
-(wing)f(lines)h(and)f(curv)m(es,)j(are)e(con)m(v)m(ey)m(ed)h(on)f(to)g
-(a)g(plotting)h(surface)0 945 y(to)31 b(app)s(ear)f(as)g(visible)h
-(graphics.)0 1242 y Fw(21.1)112 b(The)38 b(Plot)f(Mo)s(del)0
-1465 y FG(When)20 b(a)h(Plot)h(is)f(created,)j(it)d(is)g(initialised)g
-(b)m(y)g(pro)m(viding)g(a)g(F)-8 b(rameSet)21 b(whose)g(base)g(F)-8
-b(rame)21 b(\(as)h(sp)s(eci\014ed)e(b)m(y)0 1578 y(its)30
-b(Base)g(attribute\))g(is)g(mapp)s(ed)e(linearly)i(or)f
-(logarithmically)j(\(as)e(sp)s(eci\014ed)e(b)m(y)h(the)h(LogPlot)h
-(attribues\))0 1691 y(on)41 b(to)i(a)f Fx(plotting)i(ar)-5
-b(e)g(a.)75 b FG(This)41 b(is)g(a)h(rectangular)h(region)f(in)f(the)h
-(graphical)g(co)s(ordinate)h(space)f(of)f(the)0 1804
-y(underlying)35 b(graphics)i(system)g(and)e(b)s(ecomes)i(the)g(new)f
-(base)h(F)-8 b(rame)37 b(of)g(the)f(Plot.)60 b(In)36
-b(e\013ect,)k(the)d(Plot)0 1917 y(b)s(ecomes)32 b(attac)m(hed)h(to)g
-(the)f(plotting)h(surface,)f(in)f(rather)h(the)g(same)g(w)m(a)m(y)g
-(that)h(a)f(basic)g(F)-8 b(rameSet)33 b(migh)m(t)0 2030
-y(b)s(e)d(attac)m(hed)i(to)f(\(sa)m(y\))h(an)e(image.)0
-2194 y(The)23 b(curren)m(t)g(F)-8 b(rame)25 b(of)e(the)h(Plot)g
-(\(deriv)m(ed)g(from)f(the)h(curren)m(t)f(F)-8 b(rame)24
-b(of)g(the)g(F)-8 b(rameSet)24 b(supplied\))f(is)g(used)0
-2307 y(to)35 b(represen)m(t)f(a)h Fx(physic)-5 b(al)37
-b(c)-5 b(o)g(or)g(dinate)39 b(system.)53 b FG(This)33
-b(is)h(the)h(system)f(in)g(whic)m(h)f(plotting)j(op)s(erations)e(are)0
-2420 y(p)s(erformed)24 b(b)m(y)h(y)m(our)g(program.)39
-b(Ev)m(ery)25 b(plotting)h(op)s(eration)g(is)f(then)g(transformed)g
-(through)f(the)i(Mapping)0 2533 y(whic)m(h)e(in)m(ter-relates)i(the)e
-(Plot's)h(curren)m(t)f(and)g(base)g(F)-8 b(rames)25 b(in)f(order)f(to)i
-(app)s(ear)f(on)g(the)g(plotting)h(surface.)0 2697 y(An)39
-b(example)h(ma)m(y)g(help)f(here.)68 b(Supp)s(ose)37
-b(w)m(e)j(start)g(with)f(a)h(F)-8 b(rameSet)40 b(whose)f(base)h(F)-8
-b(rame)40 b(describ)s(es)0 2810 y(the)f(pixel)h(co)s(ordinates)f(of)h
-(an)e(image)j(and)d(whose)h(curren)m(t)g(F)-8 b(rame)40
-b(describ)s(es)e(a)i(celestial)h(\(equatorial\))0 2923
-y(co)s(ordinate)30 b(system.)40 b(Let)29 b(us)f(assume)h(that)g(these)h
-(t)m(w)m(o)g(F)-8 b(rames)29 b(are)h(in)m(ter-related)g(b)m(y)f(a)g
-(Mapping)g(within)0 3035 y(the)i(F)-8 b(rameSet)31 b(whic)m(h)f
-(represen)m(ts)h(a)f(particular)h(sky)f(pro)5 b(jection.)0
-3199 y(When)41 b(a)g(Plot)h(is)e(created)i(from)f(this)g(F)-8
-b(rameSet,)44 b(w)m(e)e(sp)s(ecify)e(ho)m(w)h(the)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)0 3312 y(F)-8 b(rame\))34 b(maps)e(on)h(to)g
-(the)g(plotting)h(surface.)48 b(This)32 b(simply)g(corresp)s(onds)g(to)
-h(telling)h(the)f(Plot)h(where)e(w)m(e)0 3425 y(ha)m(v)m(e)f
-(previously)e(plotted)h(the)f(image)i(data.)41 b(If)29
-b(w)m(e)g(no)m(w)h(use)f(the)g(Plot)h(to)g(plot)g(a)g(line)f(with)g
-(latitude)i(zero)0 3538 y(in)j(our)g(ph)m(ysical)h(co)s(ordinate)g
-(system,)g(as)g(giv)m(en)g(b)m(y)f(the)h(curren)m(t)f(F)-8
-b(rame,)36 b(this)e(line)h(w)m(ould)f(app)s(ear)g(as)g(a)0
-3651 y(curv)m(e)d(\(the)g(equator\))g(on)f(the)h(plotting)g(surface,)g
-(correctly)h(registered)f(with)f(the)g(image.)0 3815
-y(There)35 b(are)i(a)f(n)m(um)m(b)s(er)e(of)i(plotting)h(functions)e
-(pro)m(vided,)j(whic)m(h)d(all)i(w)m(ork)f(in)f(a)h(similar)h(w)m(a)m
-(y)-8 b(.)58 b(Plotting)0 3928 y(op)s(erations)31 b(are)g(transformed)f
-(through)g(the)h(Mapping)f(whic)m(h)h(the)g(Plot)g(represen)m(ts)g(b)s
-(efore)f(they)h(app)s(ear)0 4041 y(on)k(the)f(plotting)i(surface.)940
-4008 y Fv(32)1068 4041 y FG(It)f(is)g(p)s(ossible)f(to)h(dra)m(w)g(sym)
-m(b)s(ols,)g(lines,)h(axes,)h(en)m(tire)f(grids)e(and)g(more)h(in)0
-4154 y(this)30 b(w)m(a)m(y)-8 b(.)0 4451 y Fw(21.2)112
-b(Plotting)37 b(Sym)m(b)s(ols)0 4675 y FG(The)c(simplest)h(form)g(of)f
-(plotting)i(is)f(to)h(dra)m(w)e(sym)m(b)s(ols)g(\(termed)h
-Fx(markers)p FG(\))i(at)e(a)g(set)h(of)f(p)s(oin)m(ts.)50
-b(This)33 b(is)0 4788 y(p)s(erformed)k(b)m(y)i(AST)p
-Fy(_)p FG(MARK,)f(whic)m(h)h(is)g(supplied)e(with)i(a)g(set)h(of)f(ph)m
-(ysical)g(co)s(ordinates)h(at)f(whic)m(h)g(to)0 4900
-y(place)31 b(the)g(mark)m(ers:)262 5153 y Ft(INCLUDE)40
-b('AST_PAR')262 5253 y(INTEGER)g(NCOORD,)h(NMARK,)g(TYPE,)h(STATUS)262
-5353 y(DOUBLE)f(PRECISION)e(IN\()k(NMARK,)e(NCOORD)g(\))p
-0 5516 1512 4 v 73 5570 a Fs(32)138 5602 y Fr(Lik)n(e)28
-b(an)n(y)g(F)-6 b(rameSet,)29 b(a)g(Plot)g(can)f(b)r(e)h(used)f(as)g(a)
-h(Mapping.)43 b(In)28 b(this)g(case)h(it)g(is)f(the)g(in)n(v)n(erse)h
-(transformation)h(whic)n(h)e(is)0 5693 y(used)d(when)h(plotting)g(\()p
-Fg(i.e.)e Fr(that)i(whic)n(h)f(transforms)j(b)r(et)n(w)n(een)d(the)g
-(curren)n(t)g(and)h(base)g(F)-6 b(rames\).)p eop end
-%%Page: 176 186
-TeXDict begin 176 185 bop 0 52 a FG(176)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))262
-351 y Ft(STATUS)41 b(=)i(0)262 551 y(...)262 750 y(CALL)e(AST_MARK\()f
-(PLOT,)i(NMARK,)f(NCOORD,)g(NMARK,)g(IN,)h(TYPE,)g(STATUS)f(\))0
-972 y FG(Here,)35 b(NMARK)e(sp)s(eci\014es)g(ho)m(w)g(man)m(y)g(mark)m
-(ers)h(to)g(plot)f(and)g(NCOORD)g(sp)s(eci\014es)g(ho)m(w)g(man)m(y)g
-(co)s(ordi-)0 1085 y(nates)27 b(are)h(b)s(eing)e(supplied)g(for)h(eac)m
-(h)h(p)s(oin)m(t.)1549 1052 y Fv(33)1663 1085 y FG(The)f(arra)m(y)g(IN)
-g(supplies)f(the)h(co)s(ordinates)h(and)e(the)h(in)m(teger)0
-1198 y(TYPE)j(sp)s(eci\014es)g(whic)m(h)g(t)m(yp)s(e)h(of)f(mark)m(er)h
-(to)g(plot.)0 1477 y Fw(21.3)112 b(Plotting)37 b(Geo)s(desic)h(Curv)m
-(es)0 1688 y FG(There)25 b(is)g(no)g(Plot)h(routine)f(to)h(dra)m(w)f(a)
-g(straigh)m(t)i(line,)g(b)s(ecause)e(an)m(y)g(straigh)m(t)i(line)e(in)g
-(ph)m(ysical)h(co)s(ordinates)0 1801 y(can)38 b(p)s(oten)m(tially)h
-(turn)d(in)m(to)i(a)g(curv)m(e)f(in)h(graphical)g(co)s(ordinates.)62
-b(W)-8 b(e)38 b(therefore)g(start)g(b)m(y)f(considering)0
-1914 y(ho)m(w)24 b(to)h(dra)m(w)f(geo)s(desic)h(curv)m(es.)39
-b(These)24 b(are)g(curv)m(es)h(whic)m(h)f(trace)h(the)f(path)g(of)h
-(shortest)f(distance)h(b)s(et)m(w)m(een)0 2027 y(t)m(w)m(o)32
-b(p)s(oin)m(ts)e(in)g(ph)m(ysical)h(co)s(ordinates)g(and)f(are)h(the)f
-(basic)h(dra)m(wing)f(elemen)m(t)i(in)e(a)h(Plot.)0 2180
-y(In)h(man)m(y)h(instances,)h(the)f(geo)s(desic)h(will,)g(in)e(fact,)i
-(b)s(e)f(a)g(straigh)m(t)h(line,)f(but)g(this)f(dep)s(ends)f(on)i(the)f
-(Plot's)0 2292 y(curren)m(t)i(F)-8 b(rame.)55 b(If)34
-b(this)h(represen)m(ts)g(a)g(celestial)i(co)s(ordinate)e(system,)i(for)
-d(instance,)j(it)e(will)g(b)s(e)f(a)h(great)0 2405 y(circle)41
-b(\(corresp)s(onding)d(with)h(the)h(b)s(eha)m(viour)f(of)g(the)h(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE)38 b(function)h(whic)m(h)g(de\014nes)f(the)0
-2518 y(metric)43 b(of)g(the)g(ph)m(ysical)h(co)s(ordinate)f(space\).)79
-b(The)43 b(geo)s(desic)h(will,)i(of)d(course,)j(b)s(e)c(transformed)g
-(in)m(to)0 2631 y(graphics)35 b(co)s(ordinates)h(b)s(efore)f(b)s(eing)f
-(plotted.)56 b(A)35 b(geo)s(desic)h(curv)m(e)g(is)f(plotted)h(using)e
-(AST)p Fy(_)p FG(CUR)-10 b(VE)34 b(as)0 2744 y(follo)m(ws:)262
-2953 y Ft(DOUBLE)41 b(PRECISION)e(START\()j(NCOORD)f(\),)h(FINISH\()f
-(NCOORD)g(\))262 3152 y(...)262 3352 y(CALL)g(AST_CURVE\()f(PLOT,)h
-(START,)h(FINISH,)e(STATUS)h(\))0 3574 y FG(Here,)d(ST)-8
-b(AR)g(T)35 b(and)h(FINISH)f(are)h(arra)m(ys)g(con)m(taining)i(the)e
-(starting)g(and)f(\014nishing)g(co)s(ordinates)h(of)g(the)0
-3687 y(curv)m(e.)60 b(The)36 b(AST)p Fy(_)p FG(OFFSET)f(and)i(AST)p
-Fy(_)p FG(DIST)-8 b(ANCE)35 b(routines)i(can)g(often)g(b)s(e)f(useful)g
-(for)g(computing)0 3800 y(these)31 b(\()p Fu(x)p FG(7.11\).)0
-3953 y(If)j(y)m(ou)h(need)f(to)h(dra)m(w)f(a)g(series)h(of)g(curv)m(es)
-f(end-to-end)h(\(when)e(dra)m(wing)h(a)h(con)m(tour)g(line,)h(for)e
-(example\),)0 4066 y(then)j(a)h(more)g(e\016cien)m(t)h(alternativ)m(e)i
-(is)c(to)i(use)e(AST)p Fy(_)p FG(POL)-8 b(YCUR)e(VE.)37
-b(This)g(has)g(the)h(same)g(e\013ect)h(as)f(a)0 4179
-y(sequence)c(of)f(calls)h(to)g(AST)p Fy(_)p FG(CUR)-10
-b(VE,)33 b(but)f(allo)m(ws)j(y)m(ou)e(to)h(supply)e(a)i(whole)f(set)h
-(of)g(p)s(oin)m(ts)f(at)h(the)f(same)0 4291 y(time.)41
-b(AST)p Fy(_)p FG(POL)-8 b(YLINE)29 b(then)i(joins)f(them,)g(in)g
-(sequence,)h(using)f(geo)s(desic)i(curv)m(es:)262 4501
-y Ft(INTEGER)40 b(NPOINT)262 4600 y(DOUBLE)h(PRECISION)e(COORDS\()i
-(NPOINT,)g(NCOORD)g(\))262 4800 y(...)262 4999 y(CALL)g
-(AST_POLYCURVE\()d(PLOT,)k(NPOINT,)e(NCOORD,)h(NPOINT,)g(COORDS,)g
-(STATUS)g(\))0 5221 y FG(Here,)35 b(NPOINT)e(sp)s(eci\014es)g(ho)m(w)h
-(man)m(y)g(p)s(oin)m(ts)f(are)h(to)g(b)s(e)f(joined)h(and)e(NCOORD)i
-(sp)s(eci\014es)f(ho)m(w)g(man)m(y)0 5334 y(co)s(ordinates)f(are)g(b)s
-(eing)f(supplied)g(for)g(eac)m(h)i(p)s(oin)m(t.)44 b(The)31
-b(arra)m(y)h(COORDS)f(supplies)f(the)i(co)s(ordinates)g(of)0
-5447 y(the)f(p)s(oin)m(ts)f(in)g(the)g(Plot's)i(ph)m(ysical)f(co)s
-(ordinate)g(system.)p 0 5516 1512 4 v 73 5570 a Fs(33)138
-5602 y Fr(Remem)n(b)r(er,)c(the)f(ph)n(ysical)h(co)r(ordinate)g(space)g
-(need)f(not)h(necessarily)h(b)r(e)e(2-dimensional,)i(ev)n(en)e(if)h
-(the)f(plotting)h(surface)0 5693 y(is.)p eop end
-%%Page: 177 187
-TeXDict begin 177 186 bop 0 52 a Fz(21.4)93 b(Plotting)31
-b(Curv)m(es)f(P)m(arallel)i(to)g(Axes)2096 b FG(177)0
-351 y Fw(21.4)112 b(Plotting)37 b(Curv)m(es)h(P)m(arallel)g(to)f(Axes)0
-578 y FG(As)25 b(there)h(is)f(no)g(Plot)h(routine)g(to)g(dra)m(w)f(a)g
-(\\straigh)m(t)i(line",)h(dra)m(wing)d(axes)h(and)e(grid)h(lines)h(to)g
-(represen)m(t)f(co-)0 691 y(ordinate)i(systems)f(requires)g(a)g(sligh)m
-(tly)i(di\013eren)m(t)e(approac)m(h.)40 b(The)26 b(problem)f(is)h(that)
-h(for)f(some)h(co)s(ordinate)0 804 y(systems,)f(these)g(grid)e(lines)i
-(will)f(not)g(b)s(e)g(geo)s(desics,)i(so)e(AST)p Fy(_)p
-FG(CUR)-10 b(VE)24 b(and)g(AST)p Fy(_)p FG(POL)-8 b(YCUR)e(VE)24
-b(\()p Fu(x)p FG(21.3\))0 917 y(cannot)33 b(easily)g(b)s(e)f(used)f
-(\(y)m(ou)i(w)m(ould)f(ha)m(v)m(e)h(to)g(resort)f(to)h(appro)m
-(ximating)g(grid)f(lines)h(b)m(y)f(man)m(y)g(small)h(el-)0
-1030 y(emen)m(ts\).)52 b(Lines)34 b(of)g(constan)m(t)h(celestial)h
-(latitude)f(pro)m(vide)f(an)g(example)g(of)g(this,)h(with)e(the)h
-(exception)h(of)0 1143 y(the)c(equator)g(whic)m(h)f(is)g(a)h(geo)s
-(desic.)0 1309 y(The)f(AST)p Fy(_)p FG(GRIDLINE)f(routine)i(allo)m(ws)h
-(these)e(curv)m(es)h(to)g(b)s(e)f(dra)m(wn,)g(as)g(follo)m(ws:)262
-1569 y Ft(INTEGER)40 b(AXIS)262 1668 y(DOUBLE)h(PRECISION)e(LENGTH)262
-1867 y(...)262 2067 y(CALL)i(AST_GRIDLINE\()e(PLOT,)i(AXIS,)h(START,)f
-(LENGTH,)f(STATUS)i(\))0 2340 y FG(Here,)36 b(AXIS)d(sp)s(eci\014es)h
-(whic)m(h)g(ph)m(ysical)h(co)s(ordinate)g(axis)f(w)m(e)h(wish)e(to)i
-(dra)m(w)e(parallel)j(to.)52 b(The)34 b(ST)-8 b(AR)g(T)0
-2453 y(arra)m(y)32 b(con)m(tains)h(the)f(co)s(ordinates)h(of)f(the)g
-(start)g(of)g(the)g(curv)m(e)h(and)e(LENGTH)h(sp)s(eci\014es)f(the)h
-(distance)h(to)0 2566 y(dra)m(w)d(along)h(the)g(axis)g(in)f(ph)m
-(ysical)h(co)s(ordinate)g(space.)0 2871 y Fw(21.5)112
-b(Plotting)37 b(Generalized)i(Curv)m(es)0 3098 y FG(W)-8
-b(e)29 b(ha)m(v)m(e)h(seen)e(ho)m(w)h(geo)s(desic)g(curv)m(es)g(and)e
-(grid)h(lines)h(can)f(b)s(e)g(dra)m(wn.)39 b(The)28 b(Plot)h(class)g
-(includes)f(another)0 3210 y(metho)s(d,)k(AST)p Fy(_)p
-FG(GENCUR)-10 b(VE,)31 b(whic)m(h)h(allo)m(ws)h(curv)m(es)g(of)f
-Fx(any)g FG(form)g(to)h(b)s(e)e(dra)m(wn.)45 b(The)31
-b(caller)i(supplies)0 3323 y(a)h(Mapping)g(whic)m(h)f(maps)h(o\013set)g
-(along)h(the)f(curv)m(e)1830 3290 y Fv(34)1939 3323 y
-FG(in)m(to)h(the)f(corresp)s(onding)e(p)s(osition)i(in)g(the)g(curren)m
-(t)0 3436 y(F)-8 b(rame)27 b(of)g(the)g(Plot.)40 b(AST)p
-Fy(_)p FG(GENCUR)-10 b(VE,)26 b(then)g(tak)m(es)i(care)f(of)f(Mapping)h
-(these)g(p)s(ositions)f(in)m(to)h(graphics)0 3549 y(co)s(ordinates.)43
-b(The)30 b(c)m(hoice)j(of)e(exactly)i(whic)m(h)d(p)s(ositions)h(along)h
-(the)f(curv)m(e)g(are)h(to)f(b)s(e)f(used)h(to)g(de\014ne)f(the)0
-3662 y(curv)m(e)23 b(is)g(also)h(made)f(b)m(y)g(AST)p
-Fy(_)p FG(GENCUR)-10 b(VE,)22 b(using)h(an)g(adaptiv)m(e)h(algorithm)g
-(whic)m(h)f(concen)m(trates)i(p)s(oin)m(ts)0 3775 y(around)k(areas)i
-(where)f(the)h(curv)m(e)g(is)f(b)s(ending)f(sharply)g(or)i(is)f(discon)
-m(tin)m(uous)h(in)f(graphics)g(co)s(ordinates.)0 3941
-y(The)c(In)m(traMap)g(class)h(ma)m(y)f(b)s(e)g(of)g(particular)g(use)g
-(in)g(this)g(con)m(text)i(since)e(it)h(allo)m(ws)g(y)m(ou)f(to)h(co)s
-(de)f(y)m(our)g(o)m(wn)0 4054 y(Mappings)k(to)h(do)g(an)m(y)f
-(transformation)h(y)m(ou)g(c)m(ho)s(ose.)0 4359 y Fw(21.6)112
-b(Clipping)0 4586 y FG(Lik)m(e)24 b(man)m(y)g(graphics)f(systems,)i(a)e
-(Plot)i(allo)m(ws)f(y)m(ou)g(to)g Fx(clip)g FG(the)f(graphics)g(y)m(ou)
-h(pro)s(duce.)37 b(This)23 b(means)g(that)0 4699 y(plotting)36
-b(is)e(restricted)i(to)f(certain)h(regions)f(of)g(the)g(plotting)g
-(surface)g(so)g(that)g(an)m(ything)g(dra)m(wn)f(outside)0
-4812 y(these)40 b(regions)g(will)g(not)g(app)s(ear.)69
-b(All)40 b(Plots)h(automatically)h(clip)e(at)h(the)f(edges)g(of)g(the)g
-(plotting)h(area)0 4925 y(sp)s(eci\014ed)36 b(when)g(the)h(Plot)g(is)g
-(created.)61 b(This)36 b(means)h(that)g(graphics)g(are)g(ultimately)h
-(restricted)g(to)f(the)0 5038 y(rectangular)31 b(region)g(of)g
-(plotting)g(space)g(to)g(whic)m(h)f(y)m(ou)h(ha)m(v)m(e)h(attac)m(hed)g
-(the)e(Plot.)0 5204 y(In)g(addition)i(to)g(this,)f(y)m(ou)h(ma)m(y)g
-(also)g(sp)s(ecify)f(lo)m(w)m(er)h(and)f(upp)s(er)e(limits)j(on)f(eac)m
-(h)h(axis)g(at)f(whic)m(h)g(clipping)0 5317 y(should)23
-b(o)s(ccur.)38 b(This)23 b(p)s(ermits)g(y)m(ou)h(to)g(further)f
-(restrict)h(the)g(plotting)h(region.)39 b(Moreo)m(v)m(er,)27
-b(y)m(ou)d(ma)m(y)h(attac)m(h)0 5430 y(these)33 b(clipping)f(limits)h
-(to)g Fx(any)g FG(of)f(the)g(F)-8 b(rames)33 b(in)f(the)h(Plot.)47
-b(This)31 b(allo)m(ws)j(y)m(ou)e(to)h(place)h(restrictions)f(on)p
-0 5516 1512 4 v 73 5570 a Fs(34)138 5602 y Fr(normalized)27
-b(so)f(that)f(the)g(start)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(0.0)g(and)f(the)g(end)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(1.0)g(-)f(o\013set)h(need)0 5693 y(not)g(b)r(e)f(linearly)h(related)h
-(to)f(distance.)p eop end
-%%Page: 178 188
-TeXDict begin 178 187 bop 0 52 a FG(178)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y FG(where)e(plotting)h(will)g(tak)m(e)h(place)f(in)f(either)h(the)
-f(ph)m(ysical)h(co)s(ordinate)h(system,)f(the)f(graphical)i(co)s
-(ordinate)0 464 y(system,)i(or)f(in)g(an)m(y)h(other)g(co)s(ordinate)g
-(system)f(whic)m(h)g(is)h(describ)s(ed)e(b)m(y)h(a)h(F)-8
-b(rame)31 b(within)f(the)h(Plot.)0 625 y(F)-8 b(or)33
-b(example,)h(y)m(ou)f(could)g(plot)g(using)f(equatorial)i(co)s
-(ordinates)f(and)f(set)h(up)f(clipping)g(limits)h(in)f(galactic)0
-737 y(co)s(ordinates.)48 b(In)31 b(general,)j(y)m(ou)f(could)g(set)g
-(up)e(arbitrary)h(clipping)h(regions)f(b)m(y)h(adding)f(a)g(new)g(F)-8
-b(rame)34 b(to)0 850 y(a)k(Plot)h(\(in)f(whic)m(h)g(clipping)g(will)g
-(b)s(e)f(p)s(erformed\))g(and)g(in)m(ter-relating)j(this)e(to)h(the)f
-(other)g(F)-8 b(rames)38 b(in)g(a)0 963 y(suitable)31
-b(w)m(a)m(y)-8 b(.)0 1124 y(Clipping)30 b(limits)h(are)f(de\014ned)g
-(using)f(the)i(AST)p Fy(_)p FG(CLIP)e(routine,)h(as)h(follo)m(ws:)262
-1363 y Ft(INTEGER)40 b(IFRAME,)h(NAXES)262 1463 y(DOUBLE)g(PRECISION)e
-(LBND\()j(NAXES)g(\),)g(UBND\()g(NAXES)f(\))262 1662
-y(...)262 1861 y(CALL)g(AST_CLIP\()f(PLOT,)i(IFRAME,)f(LBND,)g(UBND,)h
-(STATUS)f(\))0 2114 y FG(Here,)35 b(the)f(IFRAME)g(v)-5
-b(alue)34 b(giv)m(es)h(the)f(index)g(of)f(the)h(F)-8
-b(rame)35 b(within)e(the)h(Plot)g(to)h(whic)m(h)e(clipping)h(is)g(to)0
-2227 y(b)s(e)28 b(applied,)g(while)h(LBND)f(and)g(UBND)h(giv)m(e)h(the)
-f(limits)f(on)h(eac)m(h)g(axis)g(of)f(the)g(selected)i(F)-8
-b(rame)29 b(\(NAXES)0 2340 y(is)h(the)h(n)m(um)m(b)s(er)e(of)i(axes)g
-(in)f(this)g(F)-8 b(rame\).)0 2501 y(Y)g(ou)31 b(can)g(remo)m(v)m(e)g
-(clipping)g(b)m(y)f(giving)h(a)g(v)-5 b(alue)31 b(of)f(AST)p
-Fy(__)p FG(NOFRAME)g(for)g(IFRAME.)0 2790 y Fw(21.7)112
-b(Using)38 b(a)g(Plot)f(as)h(a)g(Mapping)0 3009 y FG(All)e(Plots)g(are)
-g(also)h(Mappings)e(\(just)g(lik)m(e)i(the)f(F)-8 b(rameSets)36
-b(from)f(whic)m(h)h(they)f(are)h(deriv)m(ed\),)i(so)d(can)h(b)s(e)0
-3122 y(used)30 b(to)h(transform)e(co)s(ordinates.)0 3283
-y(Lik)m(e)g(F)-8 b(rameSets,)30 b(the)e(forw)m(ard)g(transformation)g
-(of)h(a)f(Plot)h(will)g(con)m(v)m(ert)g(co)s(ordinates)g(b)s(et)m(w)m
-(een)g(the)f(base)0 3396 y(and)33 b(curren)m(t)g(F)-8
-b(rames)34 b(\()p Fx(i.e.)f FG(b)s(et)m(w)m(een)h(graphical)h(and)d(ph)
-m(ysical)i(co)s(ordinates\).)51 b(This)33 b(w)m(ould)g(b)s(e)g(useful)f
-(if)0 3508 y(y)m(ou)26 b(w)m(ere)f(\(sa)m(y\))i(reading)f(a)f(cursor)g
-(p)s(osition)g(in)g(graphical)i(co)s(ordinates)f(and)e(needed)h(to)h
-(con)m(v)m(ert)h(this)e(in)m(to)0 3621 y(ph)m(ysical)31
-b(co)s(ordinates)g(for)f(displa)m(y)-8 b(.)0 3782 y(Con)m(v)m(ersely)g
-(,)36 b(a)e(Plot's)h(in)m(v)m(erse)f(transformation)g(con)m(v)m(erts)h
-(b)s(et)m(w)m(een)f(its)g(curren)m(t)g(and)f(base)g(F)-8
-b(rames)35 b(\()p Fx(i.e.)0 3895 y FG(from)h(ph)m(ysical)h(co)s
-(ordinates)g(to)g(graphical)h(co)s(ordinates\).)60 b(This)35
-b(transformation)i(is)g(applied)f(automat-)0 4008 y(ically)43
-b(whenev)m(er)f(plotting)g(op)s(erations)g(are)g(carried)g(out)g(b)m(y)
-f(AST)g(routines.)75 b(It)41 b(ma)m(y)i(also)f(b)s(e)f(useful)0
-4120 y(to)35 b(apply)f(it)h(directly)-8 b(,)37 b(ho)m(w)m(ev)m(er,)g
-(if)e(y)m(ou)f(wish)g(to)h(p)s(erform)e(additional)j(plotting)f(op)s
-(erations)g(\()p Fx(e.g.)f FG(those)0 4233 y(pro)m(vided)c(b)m(y)g(the)
-h(nativ)m(e)h(graphics)e(system\))h(at)g(p)s(ositions)f(sp)s(eci\014ed)
-g(in)g(ph)m(ysical)h(co)s(ordinates.)0 4394 y(There)e(is,)i(ho)m(w)m
-(ev)m(er.)42 b(one)30 b(imp)s(ortan)m(t)g(di\013erence)g(b)s(et)m(w)m
-(een)h(using)e(a)h(F)-8 b(rameSet)31 b(and)f(a)g(Plot)h(to)f(transform)
-0 4507 y(co)s(ordinates,)40 b(and)d(this)g(is)g(that)h(clipping)f(ma)m
-(y)h(b)s(e)f(applied)g(b)m(y)g(a)h(Plot)g(\(if)f(it)h(has)f(b)s(een)g
-(enabled)g(using)0 4620 y(AST)p Fy(_)p FG(CLIP|)p Fu(x)p
-FG(21.6\).)44 b(An)m(y)31 b(p)s(oin)m(t)g(whic)m(h)g(lies)h(within)f
-(the)h(clipp)s(ed)e(region)i(of)f(a)h(Plot)g(will,)g(when)e(trans-)0
-4733 y(formed,)39 b(yield)e(co)s(ordinates)i(with)e(the)g(v)-5
-b(alue)38 b(AST)p Fy(__)p FG(BAD.)f(If)g(y)m(ou)h(wish)e(to)j(a)m(v)m
-(oid)f(this)g(clipping,)h(y)m(ou)0 4845 y(should)30 b(extract)i(the)f
-(relev)-5 b(an)m(t)32 b(Mapping)f(from)f(the)i(Plot)f(\(using)g(AST)p
-Fy(_)p FG(GETMAPPING\))g(and)f(use)g(this,)0 4958 y(instead)h(of)f(the)
-h(Plot,)g(to)g(transform)f(the)h(co)s(ordinates.)0 5248
-y Fw(21.8)112 b(Using)38 b(a)g(Plot)f(as)h(a)g(F)-9 b(rame)0
-5467 y FG(Ev)m(ery)39 b(Plot)g(is)f(also)i(a)e(F)-8 b(rame,)42
-b(so)c(can)h(b)s(e)f(used)f(to)i(obtain)g(the)g(v)-5
-b(alues)38 b(of)h(F)-8 b(rame)39 b(attributes)g(suc)m(h)f(as)0
-5580 y(a)k(Title,)j(axis)d(Lab)s(els,)i(axis)e(Units,)j
-Fx(etc.,)e FG(whic)m(h)e(are)h(t)m(ypically)i(used)c(when)h(displa)m
-(ying)g(data)i(and/or)0 5693 y(co)s(ordinates.)k(These)32
-b(attributes)h(are,)h(as)e(for)h(an)m(y)f(F)-8 b(rameSet,)35
-b(deriv)m(ed)d(from)g(the)g(curren)m(t)g(F)-8 b(rame)34
-b(of)e(the)p eop end
-%%Page: 179 189
-TeXDict begin 179 188 bop 0 52 a Fz(21.9)93 b(Regions)31
-b(of)f(V)-8 b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)1871
-b FG(179)0 351 y(Plot)29 b(\()p Fu(x)p FG(13.8\).)43
-b(They)28 b(are)h(also)g(used)f(automatically)j(when)c(using)h(the)h
-(Plot)g(to)g(plot)g(co)s(ordinate)g(axes)g(and)0 464
-y(co)s(ordinate)i(grids)f(\()p Fx(e.g.)g FG(for)g(lab)s(elling)i(them|)
-p Fu(x)p FG(21.12\).)0 629 y(Because)47 b(the)f(curren)m(t)g(F)-8
-b(rame)47 b(of)e(a)i(Plot)f(represen)m(ts)g(ph)m(ysical)g(co)s
-(ordinates,)51 b(an)m(y)46 b(F)-8 b(rame)47 b(op)s(eration)0
-742 y(applied)42 b(to)h(the)g(Plot)g(will)f(e\013ectiv)m(ely)k(b)s(e)41
-b(w)m(orking)i(in)f(this)g(co)s(ordinate)h(system.)77
-b(F)-8 b(or)43 b(example,)j(the)0 855 y(AST)p Fy(_)p
-FG(DIST)-8 b(ANCE)37 b(and)h(AST)p Fy(_)p FG(OFFSET)e(routines)i(will)h
-(compute)f(distances)h(and)f(o\013sets)h(in)f(ph)m(ysical)0
-968 y(co)s(ordinate)d(space,)h(and)e(AST)p Fy(_)p FG(F)m(ORMA)-8
-b(T)34 b(will)h(format)g(ph)m(ysical)g(co)s(ordinates)g(in)f(an)g
-(appropriate)g(w)m(a)m(y)0 1081 y(for)c(displa)m(y)-8
-b(.)0 1381 y Fw(21.9)112 b(Regions)38 b(of)g(V)-9 b(alid)37
-b(Ph)m(ysical)h(Co)s(ordinates)0 1606 y FG(When)23 b(p)s(oin)m(ts)g(in)
-g(ph)m(ysical)h(co)s(ordinate)g(space)g(are)f(transformed)g(b)m(y)g(a)g
-(Plot)h(in)m(to)h(graphics)e(co)s(ordinates)h(for)0 1719
-y(plotting,)30 b(they)f(ma)m(y)f(not)h(alw)m(a)m(ys)h(yield)f(v)-5
-b(alid)28 b(co)s(ordinates,)i(irresp)s(ectiv)m(e)f(of)g(an)m(y)f
-(clipping)h(b)s(eing)f(applied)0 1831 y(\()p Fu(x)p FG(21.6\).)60
-b(T)-8 b(o)37 b(indicate)g(this,)g(the)f(resulting)g(co)s(ordinate)h(v)
--5 b(alues)36 b(will)h(b)s(e)e(set)h(to)h(the)f(v)-5
-b(alue)37 b(AST)p Fy(__)p FG(BAD)0 1944 y(\()p Fu(x)p
-FG(5.8\).)0 2109 y(There)g(are)h(a)g(n)m(um)m(b)s(er)f(of)h(reasons)f
-(wh)m(y)h(this)f(ma)m(y)i(o)s(ccur,)g(but)e(t)m(ypically)j(it)e(will)g
-(b)s(e)f(b)s(ecause)h(ph)m(ysical)0 2222 y(co)s(ordinates)22
-b(only)g(map)f(on)g(to)i(a)f(subset)f(of)g(the)h(graphics)g(co)s
-(ordinate)g(space.)38 b(This)21 b(situation)h(is)g(commonly)0
-2335 y(encoun)m(tered)j(with)f(all-sky)i(pro)5 b(jections)25
-b(where,)h(t)m(ypically)-8 b(,)28 b(the)d(celestial)i(sphere)d(app)s
-(ears,)h(when)e(plotted,)0 2448 y(as)37 b(a)h(distorted)f(shap)s(e)f
-(\()p Fx(e.g.)h FG(an)g(ellipse\))h(whic)m(h)f(do)s(es)g(not)g(en)m
-(tirely)h(\014ll)f(the)g(graphics)g(space.)62 b(In)36
-b(some)0 2561 y(cases,)c(there)e(ma)m(y)h(ev)m(en)g(b)s(e)f(m)m
-(ultiple)h(regions)g(of)f(v)-5 b(alid)31 b(and)f(in)m(v)-5
-b(alid)31 b(ph)m(ysical)g(co)s(ordinates.)0 2726 y(When)43
-b(plotting)h(is)e(p)s(erformed)g Fx(via)h FG(a)g(Plot,)k(graphical)d
-(output)e(will)h(only)g(app)s(ear)f(in)h(the)g(regions)g(of)0
-2839 y(v)-5 b(alid)28 b(ph)m(ysical)g(co)s(ordinates.)41
-b(Nothing)28 b(will)g(app)s(ear)f(where)g(in)m(v)-5 b(alid)28
-b(co)s(ordinates)h(o)s(ccur.)39 b(Suc)m(h)27 b(output)g(is)0
-2951 y(e\013ectiv)m(ely)36 b(clipp)s(ed.)48 b(If)33 b(y)m(ou)g(wish)f
-(to)i(plot)g(in)e(these)i(areas,)g(y)m(ou)g(m)m(ust)f(c)m(hange)h(co)s
-(ordinate)g(system)f(and)0 3064 y(use,)d(sa)m(y)-8 b(,)32
-b(graphical)f(co)s(ordinates)g(to)g(address)f(the)h(plotting)g(surface)
-f(directly)-8 b(.)0 3365 y Fw(21.10)112 b(Plotting)37
-b(Borders)0 3589 y FG(The)30 b(AST)p Fy(_)p FG(BORDER)g(routine)h(is)f
-(pro)m(vided)h(to)g(dra)m(w)f(a)h(\(line\))h(b)s(order)d(around)h(y)m
-(our)g(graphical)i(output.)0 3702 y(With)g(most)f(graphics)g(systems,)h
-(this)f(w)m(ould)g(simply)g(b)s(e)g(a)g(rectangular)h(b)s(o)m(x)f
-(around)g(the)g(plotting)h(area.)0 3815 y(With)c(a)h(Plot,)g(ho)m(w)m
-(ev)m(er,)i(this)d(b)s(oundary)d(follo)m(ws)30 b(the)e(edge)h(of)f(eac)
-m(h)h(region)g(con)m(taining)g(v)-5 b(alid,)29 b(unclipp)s(ed)0
-3928 y(ph)m(ysical)i(co)s(ordinates)g(\()p Fu(x)p FG(21.9\).)0
-4093 y(This)i(means,)i(for)e(example,)j(that)e(if)g(y)m(ou)g(w)m(ere)g
-(plotting)h(an)e(all-sky)i(pro)5 b(jection,)35 b(this)f(b)s(oundary)e
-(w)m(ould)0 4206 y(outline)41 b(the)f(p)s(erimeter)f(of)h(the)h
-(celestial)h(sphere)d(when)g(pro)5 b(jected)40 b(on)g(to)h(y)m(our)f
-(plotting)h(surface.)69 b(Of)0 4319 y(course,)49 b(if)c(there)g(is)g
-(no)f(clipping)h(and)f(all)i(ph)m(ysical)g(co)s(ordinates)f(are)g(v)-5
-b(alid,)49 b(then)c(y)m(ou)g(will)g(get)h(the)0 4432
-y(traditional)34 b(rectangular)g(b)s(o)m(x.)49 b(AST)p
-Fy(_)p FG(BORDER)32 b(requires)h(only)g(a)g(p)s(oin)m(ter)g(to)h(the)f
-(Plot)h(and)f(the)g(usual)0 4545 y(ST)-8 b(A)g(TUS)30
-b(argumen)m(t:)262 4800 y Ft(LOGICAL)40 b(HOLES)262 4999
-y(...)262 5198 y(HOLES)h(=)i(AST_BORDER\()c(PLOT,)j(STATUS)f(\))0
-5467 y FG(It)36 b(returns)e(a)i(logical)i(v)-5 b(alue)36
-b(to)g(indicate)h(if)e(an)m(y)h(in)m(v)-5 b(alid)36 b(or)g(clipp)s(ed)e
-(ph)m(ysical)j(co)s(ordinates)f(w)m(ere)g(found)0 5580
-y(within)24 b(the)h(plotting)g(area.)40 b(If)24 b(they)h(w)m(ere,)h(it)
-f(will)g(dra)m(w)f(around)f(the)i(v)-5 b(alid)25 b(unclipp)s(ed)e
-(regions)i(and)f(return)0 5693 y(.TR)m(UE..)41 b(Otherwise,)31
-b(it)f(will)h(dra)m(w)f(a)h(simple)f(rectangular)i(b)s(order)c(and)i
-(return)g(.F)-10 b(ALSE..)p eop end
-%%Page: 180 190
-TeXDict begin 180 189 bop 0 52 a FG(180)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y Fw(21.11)112 b(Plotting)37 b(T)-9 b(ext)0 569 y
-FG(Using)33 b(a)f(Plot)i(to)f(dra)m(w)f(text)i(in)m(v)m(olv)m(es)g
-(supplying)d(a)i(string)f(of)h(text)h(to)f(b)s(e)f(displa)m(y)m(ed)h
-(and)e(a)i(p)s(osition)g(in)0 681 y(ph)m(ysical)39 b(co)s(ordinates)g
-(where)f(the)g(text)h(is)g(to)g(app)s(ear.)63 b(The)38
-b(p)s(osition)h(is)f(transformed)f(in)m(to)j(graphical)0
-794 y(co)s(ordinates)45 b(to)h(determine)e(where)g(the)h(text)h(should)
-d(app)s(ear)h(on)h(the)g(plotting)g(surface.)84 b(Y)-8
-b(ou)45 b(m)m(ust)0 907 y(also)37 b(pro)m(vide)g(a)g(2-elemen)m(t)i(UP)
-d(v)m(ector)i(whic)m(h)e(giv)m(es)i(the)f(up)m(w)m(ard)e(direction)j
-(of)e(the)h(text)g(in)g(graphical)0 1020 y(co)s(ordinates.)k(This)30
-b(allo)m(ws)i(text)f(to)g(b)s(e)f(dra)m(wn)f(at)j(an)m(y)e(angle.)0
-1179 y(Plotting)i(is)e(p)s(erformed)f(b)m(y)h(AST)p Fy(_)p
-FG(TEXT,)f(for)h(example:)262 1411 y Ft(CHARACTER)39
-b(*)44 b(\()f(20)f(\))i(TEXT)262 1511 y(DOUBLE)d(PRECISION)e(POS\()j
-(NCOORD)g(\))262 1610 y(REAL)f(UP\()i(2)g(\))262 1710
-y(DATA)e(UP)i(/)g(0.0,)f(1.0)h(/)262 1909 y(...)262 2108
-y(CALL)e(AST_TEXT\()f(PLOT,)i(TEXT,)f(POS,)h(UP,)h('TL',)e(STATUS)g(\))
-0 2354 y FG(Here,)33 b(TEXT)f(con)m(tains)h(the)f(string)h(to)f(b)s(e)g
-(dra)m(wn,)g(POS)f(is)h(an)g(arra)m(y)h(of)f(ph)m(ysical)h(co)s
-(ordinates)g(and)e(UP)0 2467 y(sp)s(eci\014es)g(the)h(up)m(w)m(ard)f(v)
-m(ector.)46 b(In)31 b(this)h(case,)h(the)f(text)h(will)f(b)s(e)f(dra)m
-(wn)g(horizon)m(tally)-8 b(.)47 b(The)31 b(p)s(en)m(ultimate)0
-2580 y(argumen)m(t)42 b(sp)s(eci\014es)f(the)h(text)g(justi\014cation,)
-j(here)d(indicating)g(that)g(the)g(top)g(left)g(corner)f(of)h(the)f
-(text)0 2693 y(should)29 b(app)s(ear)h(at)h(the)g(p)s(osition)f(giv)m
-(en.)0 2851 y(F)-8 b(urther)38 b(con)m(trol)i(o)m(v)m(er)f(the)g(app)s
-(earance)f(of)g(the)h(text)g(is)f(p)s(ossible)g(b)m(y)g(setting)i(v)-5
-b(alues)38 b(for)g(v)-5 b(arious)39 b(Plot)0 2964 y(attributes,)k(for)c
-(example)i(Colour,)h(F)-8 b(on)m(t)41 b(and)e(Size.)69
-b(Sub-strings)38 b(within)h(the)h(displa)m(y)m(ed)g(text)h(can)f(b)s(e)
-0 3077 y(giv)m(en)24 b(di\013eren)m(t)f(app)s(earances,)i(or)e(turned)f
-(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)h(b)m(y)f(the)g
-(inclusion)g(of)g(escap)s(e)0 3190 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FG(21.13\))j(within)29 b(the)i(supplied)e(text)i(string.)0
-3477 y Fw(21.12)112 b(Plotting)37 b(a)h(Grid)0 3694 y
-FG(The)c(most)g(comprehensiv)m(e)h(plotting)g(routine)f(a)m(v)-5
-b(ailable)37 b(is)d(AST)p Fy(_)p FG(GRID,)g(whic)m(h)g(can)g(b)s(e)g
-(used)f(to)i(dra)m(w)0 3807 y(lab)s(elled)f(co)s(ordinate)g(axes)g
-(and,)f(optionally)-8 b(,)36 b(to)e(o)m(v)m(erla)m(y)i(co)s(ordinate)e
-(grids)f(on)g(the)g(plotting)i(area)f(\(Fig-)0 3920 y(ure)41
-b(8\).)73 b(The)41 b(routine)g(is)g(straigh)m(tforw)m(ard)h(to)g(use,)i
-(simply)c(requiring)h(a)g(p)s(oin)m(ter)g(to)h(the)g(Plot)g(and)e(a)0
-4033 y(ST)-8 b(A)g(TUS)30 b(argumen)m(t:)262 4266 y Ft(CALL)41
-b(AST_GRID\()f(PLOT,)i(STATUS)f(\))0 4511 y FG(It)31
-b(will)f(dra)m(w)g(b)s(oth)g(linear)h(and)f(curvilinear)h(axes)g(and)f
-(grids,)g(as)h(required)e(b)m(y)i(the)f(particular)h(Plot.)42
-b(The)0 4624 y(app)s(earance)f(of)f(the)h(output)f(can)g(b)s(e)g(mo)s
-(di\014ed)f(in)h(a)h(wide)f(v)-5 b(ariet)m(y)42 b(of)e(w)m(a)m(ys)i(b)m
-(y)e(setting)h(v)-5 b(arious)41 b(Plot)0 4737 y(attributes.)63
-b(The)37 b(Lab)s(el)g(attributes)h(of)g(the)f(curren)m(t)h(F)-8
-b(rame)38 b(are)g(displa)m(y)m(ed)g(as)g(the)f(axis)h(lab)s(els)g(in)f
-(the)0 4850 y(grid,)42 b(and)d(the)h(Title)h(attribute)f(as)g(the)g
-(plot)g(title.)71 b(Sub-strings)38 b(within)i(these)g(strings)f(can)h
-(b)s(e)f(giv)m(en)0 4963 y(di\013eren)m(t)j(app)s(earances,)j(or)d
-(turned)f(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)i(b)m(y)e(the)
-g(inclusion)g(of)g(escap)s(e)0 5076 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FG(21.13\))j(within)29 b(the)i(Lab)s(el)f(attributes.)0
-5363 y Fw(21.13)112 b(Con)m(trolling)38 b(the)f(App)s(earance)i(of)f
-(Sub-strings)0 5580 y FG(Normally)-8 b(,)33 b(eac)m(h)f(string)f(of)g
-(c)m(haracters)h(displa)m(y)m(ed)g(using)e(a)h(Plot)h(will)f(b)s(e)g
-(plotted)g(so)h(that)f(all)h(c)m(haracters)0 5693 y(in)40
-b(the)g(string)f(ha)m(v)m(e)i(the)f(same)h(fon)m(t)f(size,)j(colour,)g
-Fx(etc.,)f FG(sp)s(eci\014ed)d(b)m(y)h(the)g(appropriate)g(attributes)g
-(of)p eop end
-%%Page: 181 191
-TeXDict begin 181 190 bop 0 52 a Fz(21.14)93 b(Pro)s(ducing)29
-b(Logarithmic)j(Axes)2203 b FG(181)0 351 y(the)41 b(Plot.)75
-b(Ho)m(w)m(ev)m(er,)46 b(it)c(is)f(p)s(ossible)g(to)h(include)f
-Fx(esc)-5 b(ap)g(e)44 b(se)-5 b(quenc)g(es)48 b FG(within)41
-b(the)h(text)g(to)g(mo)s(dify)e(the)0 464 y(app)s(earance)29
-b(of)f(sub-strings.)39 b(Escap)s(e)28 b(sequences)h(can)g(b)s(e)f(used)
-f(to)i(c)m(hange,)h(colour,)g(fon)m(t,)g(size,)f(width,)g(to)0
-577 y(in)m(tro)s(duce)k(extra)h(horizon)m(tal)h(space)e(b)s(et)m(w)m
-(een)h(c)m(haracters,)h(and)e(to)h(c)m(hange)g(the)f(base)g(line)h(of)f
-(c)m(haracters)0 690 y(\(th)m(us)22 b(allo)m(wing)h(sup)s(er-scripts)d
-(and)h(sub-scripts)g(to)h(b)s(e)f(created\).)39 b(See)22
-b(the)g(en)m(try)g(for)f(the)h(Escap)s(e)g(attribute)0
-803 y(in)30 b(App)s(endix)f(C)h(for)g(details.)0 968
-y(As)j(an)f(example,)i(if)f(the)g(c)m(haracter)h(string)e(\\)p
-Fy(10\\\045^50)p FG(\045s70+0.5+")h(is)g(plotted,)h(it)f(will)g(b)s(e)f
-(displa)m(y)m(ed)h(as)0 1081 y(\\10)135 1048 y Fv(0)p
-Fi(:)p Fv(5)231 1081 y FG(")f(-)h(that)f(is,)h(with)f(a)g(sup)s
-(er-scripted)f(exp)s(onen)m(t.)46 b(The)32 b(exp)s(onen)m(t)g(text)h
-(will)g(b)s(e)e(70\045)i(of)f(the)g(size)h(of)0 1194
-y(normal)d(text)g(\(as)g(determined)f(b)m(y)h(the)g(Size)g
-(attribute\),)h(and)e(its)h(baseline)g(will)g(b)s(e)e(raised)i(b)m(y)f
-(50\045)i(of)e(the)0 1307 y(heigh)m(t)i(of)g(a)g(normal)f(c)m
-(haracter.)0 1472 y(Suc)m(h)c(escap)s(e)h(sequences)f(can)h(b)s(e)f
-(used)f(in)i(the)f(strings)g(assigned)h(to)g(textual)h(attributes)f(of)
-g(the)f(Plot)h(\(suc)m(h)0 1585 y(as)k(the)f(axis)h(Lab)s(els\),)g(and)
-f(ma)m(y)g(also)i(b)s(e)e(included)f(in)h(strings)g(plotted)i(using)d
-(AST)p Fy(_)p FG(TEXT.)0 1750 y(The)40 b(F)-8 b(ormat)42
-b(attribute)f(for)f(the)h(SkyAxis)f(class)h(includes)f(the)h(\\g")g
-(option)g(whic)m(h)f(will)h(cause)g(escap)s(e)0 1863
-y(sequences)30 b(to)g(b)s(e)f(included)g(when)g(formatting)h(celestial)
-i(p)s(ositions)e(so)g(that)g(sup)s(er-script)e(c)m(haracters)j(are)0
-1976 y(used)f(as)g(delimiters)h(for)f(the)h(v)-5 b(arious)30
-b(\014elds)g(\(a)h(sup)s(er-script)e(\\h")i(for)f(hours,)f(\\m")i(for)g
-(min)m(utes,)f Fx(etc)5 b FG(\).)0 2141 y(Note,)46 b(the)c(facilit)m(y)
-i(for)e(in)m(terpreting)g(escap)s(e)h(sequences)f(is)g(only)f(a)m(v)-5
-b(ailable)45 b(if)c(the)h(graphics)g(wrapp)s(er)0 2254
-y(functions)24 b(whic)m(h)f(pro)m(vide)h(the)g(in)m(terface)i(to)f(the)
-f(underlying)f(graphics)h(system)g(supp)s(ort)e(all)j(the)f(functions)0
-2367 y(included)k(in)h(the)h Fy(grf.h)d FG(\014le)i(as)h(of)f(AST)g
-(V3.2.)41 b(Older)29 b(grf)g(in)m(terfaces)h(ma)m(y)g(need)f(to)h(b)s
-(e)e(extended)h(b)m(y)g(the)0 2480 y(addition)i(of)f(new)g(functions)g
-(b)s(efore)g(escap)s(e)h(sequences)f(can)h(b)s(e)f(in)m(terpretted.)0
-2781 y Fw(21.14)112 b(Pro)s(ducing)38 b(Logarithmic)g(Axes)0
-3006 y FG(In)23 b(certain)j(situations)e(y)m(ou)h(ma)m(y)g(wish)e(for)h
-(one)h(or)f(b)s(oth)f(of)i(the)f(plotted)h(axes)g(to)g(b)s(e)e(displa)m
-(y)m(ed)i(logarithmi-)0 3119 y(cally)30 b(rather)e(than)g(linearly)-8
-b(.)42 b(F)-8 b(or)29 b(instance,)h(y)m(ou)e(ma)m(y)i(wish)d(to)j(do)e
-(this)g(when)g(using)g(a)h(Plot)g(to)g(represen)m(t)0
-3232 y(a)j(sp)s(ectrum)e(of,)j(sa)m(y)-8 b(,)33 b(\015ux)d(against)j
-(frequency)-8 b(.)44 b(In)31 b(this)g(case,)i(y)m(ou)f(can)g(cause)g
-(the)g(frequency)f(axis)h(to)g(b)s(e)0 3345 y(dra)m(wn)27
-b(logarithmically)j(simply)e(b)m(y)f(setting)i(the)f(b)s(o)s(olean)g
-(LogPlot)h(attribute)g(for)e(the)h(frequency)f(axis)i(to)0
-3458 y(a)i(non-zero)g(v)-5 b(alue.)41 b(This)29 b(causes)i(sev)m(eral)h
-(things)e(to)h(happ)s(en:)111 3727 y(1.)46 b(The)21 b(Mapping)f(b)s(et)
-m(w)m(een)i(the)e(base)h(F)-8 b(rame)22 b(of)f(the)g(Plot)g(\(whic)m(h)
-g(represen)m(ts)g(the)g(underlying)e(graphics)227 3840
-y(w)m(orld)26 b(co)s(ordinate)h(system\))g(and)f(the)g(base)g(F)-8
-b(rame)27 b(of)g(the)f(F)-8 b(rameSet)28 b(supplied)c(when)i(the)g
-(Plot)h(w)m(as)227 3953 y(created,)32 b(is)e(mo)s(di\014ed.)39
-b(By)30 b(default,)h(this)f(mapping)f(is)h(linear)g(on)g(b)s(oth)g
-(axes,)h(but)e(setting)i(LogPlot)227 4066 y(non-zero)37
-b(for)e(an)h(axis)g(causes)g(the)g(Mapping)g(to)h(b)s(e)e(mo)s
-(di\014ed)f(so)j(that)f(it)g(is)g(logarithmic)i(on)d(the)227
-4179 y(sp)s(eci\014ed)26 b(axis.)39 b(This)26 b(is)g(only)g(p)s
-(ossible)f(if)h(the)h(displa)m(y)m(ed)f(section)i(of)e(the)g(axis)g(do)
-s(es)g(not)g(include)g(the)227 4292 y(v)-5 b(alue)31
-b(zero)g(\(otherwise)g(the)g(attempt)g(to)g(set)g(a)f(new)g(v)-5
-b(alue)31 b(for)f(LogPlot)i(is)e(ignored,and)g(it)h(retains)227
-4405 y(its)g(default)g(v)-5 b(alue)30 b(of)h(zero\).)111
-4597 y(2.)46 b(The)38 b(ma)5 b(jor)38 b(tic)m(k)h(marks)f(dra)m(wn)f
-(as)h(part)g(of)g(the)h(annotated)f(co)s(ordinate)h(grid)f(are)h
-(spaced)f(loga-)227 4710 y(rithmically)d(rather)f(than)g(linearly)-8
-b(.)53 b(That)34 b(is,)i(ma)5 b(jor)34 b(axis)h(v)-5
-b(alues)34 b(are)h(c)m(hosen)f(so)h(that)g(there)f(is)g(a)227
-4823 y(constan)m(t)d(ratio)g(b)s(et)m(w)m(een)f(adjacen)m(t)g(tic)m(k)h
-(mark)e(v)-5 b(alues.)41 b(This)29 b(ratio)h(is)g(constrained)g(to)g(b)
-s(e)f(a)g(p)s(o)m(w)m(er)227 4936 y(of)g(ten.)40 b(The)28
-b(minor)g(tic)m(k)i(marks)e(are)g(dra)m(wn)g(at)h(linearly)g
-(distributed)e(p)s(oin)m(ts)i(b)s(et)m(w)m(een)g(the)f(adjoin-)227
-5049 y(ing)f(ma)5 b(jor)26 b(tic)m(k)i(v)-5 b(alues.)39
-b(Th)m(us)25 b(if)i(a)f(pair)g(of)h(adjacen)m(t)g(ma)5
-b(jor)26 b(tic)m(k)i(v)-5 b(alues)26 b(are)h(dra)m(wn)e(at)i(axis)g(v)
--5 b(alues)227 5162 y(10.0)39 b(and)d(100.0,)41 b(minor)36
-b(tic)m(ks)i(will)f(b)s(e)f(placed)i(at)f(20.0,)j(30.0,)h(40.0,)f
-(50.0,)g(60.0,)g(70.0,)h(80.0)d(and)227 5275 y(90.0)32
-b(\(note)g(only)e(8)h(minor)f(tic)m(k)h(marks)f(are)h(dra)m(wn\).)111
-5467 y(3.)46 b(If)25 b(p)s(ossible,)i(n)m(umerical)f(axis)g(lab)s(els)g
-(are)g(sho)m(wn)f(as)h(p)s(o)m(w)m(ers)f(of)h(ten.)39
-b(This)25 b(dep)s(ends)f(on)h(the)h(facilities)227 5580
-y(implemen)m(ted)38 b(b)m(y)f(the)g(graphics)g(wrapp)s(er)f(functions)g
-(\(see)i(the)g(next)f(section\).)63 b(Extra)37 b(functions)227
-5693 y(w)m(ere)32 b(in)m(tro)s(duced)g(to)g(this)g(set)g(of)g(wrapp)s
-(er)e(functions)h(at)h(AST)f(V3.2)i(whic)m(h)f(enable)g(sup)s
-(er-scripts)p eop end
-%%Page: 182 192
-TeXDict begin 182 191 bop 0 52 a FG(182)1463 b Fz(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))227
-351 y FG(and)42 b(sub-scripts)f(to)h(b)s(e)g(pro)s(duced.)74
-b(Some)42 b(older)g(wrapp)s(ers)e(ma)m(y)i(not)h(y)m(et)g(ha)m(v)m(e)g
-(implemen)m(ted)227 464 y(these)28 b(functiosn)f(and)f(this)h(will)h
-(result)f(in)f(axis)i(lab)s(els)f(b)s(eing)g(dra)m(wn)f(in)h(usual)g
-(scien)m(ti\014c)h(or)f(decimal)227 577 y(notation.)0
-839 y(Whilst)35 b(the)g(LogPlot)i(attribute)e(can)g(b)s(e)g(used)f(to)h
-(con)m(trol)i(all)e(three)g(of)g(the)g(ab)s(o)m(v)m(e)h(facilities,)j
-(it)c(is)g(p)s(os-)0 952 y(sible)h(to)h(con)m(trol)h(them)e
-(individually)g(as)g(w)m(ell.)59 b(The)35 b(LogTic)m(ks)j(and)d(LogLab)
-s(el)i(attributes)g(con)m(trol)g(the)0 1065 y(b)s(eha)m(viour)d(sp)s
-(eci\014ed)f(in)g(items)i(2)f(and)f(3)i(ab)s(o)m(v)m(e,)h(but)d(the)h
-(default)g(v)-5 b(alues)35 b(for)e(these)i(attributes)f(dep)s(end)0
-1178 y(on)f(the)h(setting)h(of)f(the)g(LogPlot)h(attribute.)51
-b(This)33 b(means)g(that)h(setting)h(LogPlot)g(non-zero)g(will)e
-(swicth)0 1291 y(all)39 b(three)g(facilites)i(on,)f(so)f(long)g(as)g
-(zero)g(v)-5 b(alues)39 b(ha)m(v)m(e)h(not)f(b)s(een)f(assigned)g
-(explicitly)i(to)g(LogTic)m(ks)f(or)0 1404 y(LogLab)s(el.)0
-1697 y Fw(21.15)112 b(Cho)s(osing)39 b(a)f(Graphics)g(P)m(ac)m(k)-6
-b(age)0 1919 y FG(The)34 b(Plot)i(class)g(itself)g(do)s(es)f(not)g
-(include)g(an)m(y)g(co)s(de)g(for)g(actually)h(dra)m(wing)f(on)g(a)g
-(graphics)g(device.)56 b(In-)0 2032 y(stead,)32 b(it)g(requires)f(a)g
-(set)h(of)f(functions)g(to)h(b)s(e)f(pro)m(vided)f(whic)m(h)h(it)h
-(uses)f(to)h(dra)m(w)e(the)i(required)e(graphics.)0 2144
-y(These)39 b(include)g(functions)f(to)i(dra)m(w)e(a)i(straigh)m(t)g
-(line,)i(dra)m(w)c(a)i(text)g(string,)h Fx(etc)p FG(.)67
-b(Y)-8 b(ou)39 b(ma)m(y)h(c)m(ho)s(ose)g(to)0 2257 y(pro)m(vide)h
-(functions)f(from)g(y)m(our)g(fa)m(v)m(orite)j(graphics)e(pac)m(k)-5
-b(age,)45 b(or)40 b(y)m(ou)h(can)g(ev)m(en)g(write)g(y)m(our)g(o)m(wn!)
-71 b(T)-8 b(o)0 2370 y(accomo)s(date)43 b(v)-5 b(ariations)42
-b(in)f(the)g(calling)h(in)m(terfaces)h(of)e(di\013eren)m(t)g(graphics)g
-(pac)m(k)-5 b(ages,)46 b(AST)40 b(de\014nes)g(a)0 2483
-y(standard)g(in)m(terface)i(for)f(these)g(routines.)72
-b(If)40 b(this)h(in)m(terface)h(di\013ers)f(from)f(the)h(in)m(terface)h
-(pro)m(vided)f(b)m(y)0 2596 y(y)m(our)27 b(graphics)g(pac)m(k)-5
-b(age)29 b(\(whic)m(h)f(in)e(general)j(it)e(will\),)i(then)e(y)m(ou)g
-(m)m(ust)g(write)h(a)f(set)h(of)f Fx(wr)-5 b(app)g(er)33
-b(functions)p FG(,)0 2709 y(whic)m(h)e(pro)m(vide)g(the)g(in)m(terface)
-h(exp)s(ected)f(b)m(y)g(AST)f(but)g(whic)m(h)h(then)g(call)h(functions)
-e(from)h(y)m(our)f(graphics)0 2822 y(pac)m(k)-5 b(age)36
-b(to)e(pro)m(vide)g(the)g(required)f(functionalit)m(y)-8
-b(.)52 b(AST)33 b(comes)i(with)e(wrapp)s(er)f(functions)h(suitable)i
-(for)0 2935 y(the)c(PGPLOT)e(graphics)h(pac)m(k)-5 b(age)33
-b(\(see)e(SUN/15\).)0 3098 y(There)f(are)h(t)m(w)m(o)g(w)m(a)m(ys)h(of)
-e(indicating)h(whic)m(h)f(wrapp)s(er)f(functions)h(are)h(to)g(b)s(e)f
-(used)f(b)m(y)h(the)h(Plot)g(class:)111 3335 y(1.)46
-b(A)33 b(\014le)g(con)m(taining)i(C)d(functions)h(with)f(pre-de\014ned)
-g(names)h(can)g(b)s(e)f(written)h(and)f(link)m(ed)i(with)e(the)227
-3448 y(application)42 b(using)e(options)h(of)g(the)g(ast)p
-Fy(_)p FG(link)f(command.)71 b(\(see)42 b Fu(x)p FG(3.3)g(and)e(App)s
-(endix)f(E\).)71 b(AST)227 3561 y(is)37 b(distributed)f(with)g(suc)m(h)
-h(a)g(\014le)f(\(called)j Fy(grf_pgplot.c)p FG(\))33
-b(whic)m(h)k(calls)h(PGPLOT)d(functions)i(to)227 3674
-y(implemen)m(t)30 b(the)f(required)g(functionalit)m(y)-8
-b(.)42 b(This)28 b(\014le)i(can)f(b)s(e)g(used)f(as)h(a)h(template)g
-(for)f(writing)h(y)m(our)227 3787 y(o)m(wn.)46 b(Curren)m(tly)-8
-b(,)33 b(it)g(is)f(not)g(p)s(ossible)g(to)h(write)g(suc)m(h)e(\\grf)i
-(mo)s(dules")f(in)g(F)-8 b(ortran.)46 b(If)32 b(y)m(ou)h(w)m(an)m(t)g
-(to)227 3900 y(use)e(wrapp)s(er)f(functions)g(written)i(in)f(F)-8
-b(ortran,)32 b(then)f(y)m(ou)h(m)m(ust)f(use)g(the)g(AST)p
-Fy(_)p FG(GRFSET)f(metho)s(d)227 4012 y(as)h(describ)s(ed)e(b)s(elo)m
-(w.)111 4200 y(2.)46 b(The)29 b(AST)p Fy(_)p FG(GRFSET)e(metho)s(d)i
-(of)g(the)g(Plot)h(class)g(can)f(b)s(e)g(used)f(to)i(\\register")h
-(wrapp)s(er)c(functions)227 4313 y(at)37 b(run-time.)58
-b(This)36 b(allo)m(ws)i(an)e(application)h(to)g(switc)m(h)g(b)s(et)m(w)
-m(een)g(graphics)f(systems)h(if)f(required.)227 4426
-y(Graphics)30 b(functions)f(registered)h(in)g(this)f(w)m(a)m(y)i(do)e
-(not)h(need)f(to)i(ha)m(v)m(e)g(the)f(pre-de\014ned)e(names)h(used)227
-4539 y(in)h(the)h(link-time)g(metho)s(d)f(describ)s(ed)f(ab)s(o)m(v)m
-(e.)0 4776 y(F)-8 b(or)38 b(details)h(of)e(the)h(in)m(terfaces)g(of)g
-(the)g(wrapp)s(er)d(routines,)k(see)f(the)g(reference)g(do)s(cumen)m
-(tation)g(for)f(the)0 4889 y(AST)p Fy(_)p FG(GRFSET)29
-b(metho)s(d.)p eop end
-%%Page: 183 193
-TeXDict begin 183 192 bop 3643 52 a FG(183)0 351 y FA(22)135
-b(Compiling)46 b(and)f(Linking)g(Soft)l(w)l(are)h(that)g(Uses)f(AST)0
-614 y FG(A)28 b(small)h(n)m(um)m(b)s(er)d(of)i(UNIX)h(commands)e(are)i
-(pro)m(vided)e(b)m(y)h(AST)f(to)i(assist)g(with)e(the)i(pro)s(cess)e
-(of)h(building)0 727 y(soft)m(w)m(are.)58 b(A)36 b(description)g(of)g
-(these)g(can)g(b)s(e)f(found)f(in)i(App)s(endix)e(E)h(and)h(their)f
-(use)h(is)g(discussed)e(here.)0 840 y(Note)c(that)g(in)f(order)f(to)i
-(access)h(these)e(commands,)g(the)h(appropriate)f(directory)g
-(\(normally)h(\\/star/bin"\))0 953 y(should)f(b)s(e)h(on)g(y)m(our)h(P)
--8 b(A)g(TH.)1019 920 y Fv(35)0 1268 y Fw(22.1)112 b(Accessing)38
-b(AST)f(Include)h(Files)0 1500 y FG(The)30 b(include)g(\014les)g(pro)m
-(vided)g(for)g(use)h(with)f(F)-8 b(ortran)31 b(are:)227
-1782 y FE(AST)p Fy(_)p FE(P)-9 b(AR)427 1895 y FG(Declares)26
-b(the)f(t)m(yp)s(es)f(of)h(all)g(AST)f(functions)g(and)g(de\014nes)f
-(parameter)i(constan)m(ts,)i(except)427 2008 y(those)k(that)g(iden)m
-(tify)g(error)f(v)-5 b(alues.)227 2161 y FE(AST)p Fy(_)p
-FE(ERR)427 2274 y FG(De\014nes)31 b(parameter)h(constan)m(ts)g(to)g
-(represen)m(t)f(the)g(v)-5 b(arious)31 b(error)g(v)-5
-b(alues)31 b(to)h(whic)m(h)f(the)427 2387 y(AST)f(error)g(status)h(ma)m
-(y)g(b)s(e)e(set)i(when)f(an)g(error)g(o)s(ccurs)g(\()p
-Fu(x)p FG(4.13\).)0 2669 y(References)h(to)g(AST)f(include)g(\014les)h
-(should)e(b)s(e)h(in)h(upp)s(er)d(case.)42 b(Most)32
-b(mo)s(dern)d(F)-8 b(ortran)31 b(compilers)g(allo)m(w)0
-2782 y(the)g(directory)f(to)i(b)s(e)d(sp)s(eci\014ed)h(as)h(a)f
-(command)g(line)h(option:)227 3051 y Ft(f77)43 b(prog.f)e
-(-I/star/include)c(-o)43 b(prog)0 3334 y FG(If)30 b(y)m(ou)h(are)f
-(using)g(suc)m(h)g(a)h(compiler)g(then)f(y)m(our)g(F)-8
-b(ortran)31 b(source)g(co)s(de)g(should,)e(for)h(instance,)i(include:)
-262 3603 y Ft(INCLUDE)40 b('AST_PAR')0 3886 y FG(\(that)g(is,)h(there)e
-(is)g(no)g(need)g(to)g(include)g(the)g(directory)g(within)g(the)g
-(INCLUDE)g(statemen)m(t\).)68 b(If)39 b(y)m(our)0 3999
-y(compiler)c(do)s(es)e(not)i(pro)m(vide)f(suc)m(h)g(an)g(option)h(then)
-e(y)m(our)h(source)h(co)s(de)f(m)m(ust)g(con)m(tain)i(an)e(absolute)g
-(\014le)0 4111 y(name)c(iden)m(tifying)h(the)g(directory)g(where)f(the)
-g(include)g(\014les)h(reside,)f(for)h(instance:)262 4381
-y Ft(INCLUDE)40 b('/star/include/AS)o(T_)o(PAR)o(')0
-4696 y Fw(22.2)112 b(Linking)39 b(with)e(AST)h(F)-9 b(acilities)0
-4928 y FG(F)h(ortran)34 b(programs)e(ma)m(y)i(b)s(e)e(link)m(ed)i(with)
-e(AST)g(b)m(y)h(including)g(execution)h(of)f(the)g(command)g(\\ast)p
-Fy(_)p FG(link")0 5041 y(on)24 b(the)h(compiler)g(command)g(line.)39
-b(Th)m(us,)25 b(to)g(compile)h(and)e(link)g(a)h(program)g(called)g
-(\\prog",)i(the)e(follo)m(wing)0 5154 y(migh)m(t)31 b(b)s(e)f(used:)227
-5423 y Ft(f77)43 b(prog.f)e(-L/star/lib)e(`ast_link`)g(-o)k(prog)p
-0 5516 1512 4 v 73 5570 a Fs(35)138 5602 y Fr(If)33 b(y)n(ou)g(ha)n(v)n
-(e)f(not)h(installed)h(AST)e(in)h(the)g(usual)g(lo)r(cation,)j(then)d
-(substitute)f(the)h(appropriate)g(directory)g(in)g(place)h(of)0
-5693 y(\\/star")27 b(wherev)n(er)f(it)g(o)r(ccurs.)p
-eop end
-%%Page: 184 194
-TeXDict begin 184 193 bop 0 52 a FG(184)929 b Fz(22)91
-b(COMPILING)30 b(AND)h(LINKING)g(SOFTW)-10 b(ARE)29 b(THA)-8
-b(T)31 b(USES)e(AST)0 351 y FG(On)k(Lin)m(ux)f(systems)i(y)m(ou)g
-(should)e(usually)h(use)g Fy(g77)47 b(-fno-second-underscore)28
-b FG(in)33 b(place)h(of)g Fy(f77)e FG(-)i(see)0 464 y(\\Soft)m(w)m(are)
-e(dev)m(elopmen)m(t)g(on)e(Lin)m(ux")g(in)g(SUN/212.)0
-627 y(Note)d(the)f(use)g(of)g(bac)m(kw)m(ard)g(quote)h(c)m(haracters,)i
-(whic)m(h)c(cause)i(the)f(\\ast)p Fy(_)p FG(link")h(command)f(to)g(b)s
-(e)g(executed)0 740 y(and)g(its)h(result)g(substituted)f(in)m(to)i(the)
-e(compiler)i(command.)39 b(An)26 b(alternativ)m(e)j(is)e(to)g(sa)m(v)m
-(e)i(the)e(output)f(from)0 853 y(\\ast)p Fy(_)p FG(link")32
-b(in)f(\(sa)m(y\))i(a)e(shell)h(v)-5 b(ariable)31 b(and)g(use)g(this)g
-(instead.)43 b(Y)-8 b(ou)32 b(ma)m(y)f(\014nd)f(this)h(a)h(little)h
-(faster)e(if)g(y)m(ou)0 966 y(are)g(building)e(soft)m(w)m(are)j(rep)s
-(eatedly)f(during)e(dev)m(elopmen)m(t.)0 1128 y(Programs)43
-b(whic)m(h)g(use)g(AST)f(can)i(also)g(b)s(e)e(link)m(ed)i(in)e(a)i(n)m
-(um)m(b)s(er)e(of)h(other)g(w)m(a)m(ys,)48 b(dep)s(ending)41
-b(on)i(the)0 1241 y(facilities)35 b(they)f(require.)48
-b(In)32 b(the)i(example)g(ab)s(o)m(v)m(e,)h(w)m(e)e(ha)m(v)m(e)i(used)d
-(the)h(default)g(metho)s(d)g(whic)m(h)g(assumes)0 1354
-y(that)39 b(the)g(program)f(will)h(not)g(b)s(e)f(generating)i
-(graphical)f(output,)i(so)e(that)g(no)f(graphics)h(libraries)g(need)0
-1467 y(b)s(e)d(link)m(ed.)59 b(If)35 b(y)m(ou)i(need)f(other)h
-(facilities,)j(then)c(v)-5 b(arious)36 b(switc)m(hes)h(can)g(b)s(e)f
-(applied)g(to)h(the)f(\\ast)p Fy(_)p FG(link")0 1580
-y(command)30 b(in)g(order)g(to)h(con)m(trol)h(the)f(linking)f(pro)s
-(cess.)0 1743 y(F)-8 b(or)29 b(example,)h(if)e(y)m(ou)h(w)m(ere)f(pro)s
-(ducing)f(graphical)i(output)f(using)g(the)g(PGPLOT)g(graphics)g(pac)m
-(k)-5 b(age,)31 b(y)m(ou)0 1856 y(could)e(link)g(with)g(the)g
-(AST/PGPLOT)f(in)m(terface)j(b)m(y)d(using)h(the)g(\\)p
-Fu(\000)p FG(pgplot")h(switc)m(h)g(with)e(\\ast)p Fy(_)p
-FG(link",)j(as)0 1969 y(follo)m(ws:)292 1936 y Fv(36)227
-2218 y Ft(f77)43 b(prog.f)e(-L/star/lib)e(`ast_link)h(-pgplot`)g(-o)j
-(prog)0 2480 y FG(again)31 b(using)f Fy(g77)47 b
-(-fno-second-underscore)25 b FG(in)30 b(place)h(of)f
-Fy(f77)g FG(on)g(Lin)m(ux)g(systems.)0 2643 y(See)h(the)f(\\ast)p
-Fy(_)p FG(link")i(command)e(description)g(in)g(App)s(endix)f(E)h(for)g
-(details)i(of)e(the)h(options)g(a)m(v)-5 b(ailable.)0
-2936 y Fw(22.3)112 b(Building)39 b(AD)m(AM)d(Applications)j(that)e(Use)
-h(AST)0 3157 y FG(Users)32 b(of)h(Starlink's)g(AD)m(AM)h(programming)e
-(en)m(vironmen)m(t)h(\(SG/4\))h(on)f(UNIX)g(should)e(use)h(the)h
-(\\alink")0 3270 y(command)j(\(SUN/144\))i(to)f(compile)g(and)e(link)h
-(applications)h(and)e(can)h(access)i(the)e(AST)f(library)h(b)m(y)f(in-)
-0 3383 y(cluding)30 b(execution)i(of)e(the)h(command)f(\\ast)p
-Fy(_)p FG(link)p Fy(_)p FG(adam")h(on)g(the)f(command)g(line,)h(as)g
-(follo)m(ws:)227 3632 y Ft(alink)42 b(adamprog.f)d(`ast_link_adam`)0
-3895 y FG(Note)32 b(the)e(use)g(of)h(bac)m(kw)m(ard)g(quote)g(c)m
-(haracters.)0 4057 y(By)e(default,)g(AST)f(error)g(messages)i(pro)s
-(duced)d(b)m(y)h(applications)i(built)f(in)f(this)h(w)m(a)m(y)g(will)g
-(b)s(e)f(deliv)m(ered)h Fx(via)0 4170 y FG(the)34 b(Starlink)g(EMS)f
-(Error)g(Message)i(Service)f(\(SSN/4\))h(so)f(that)g(error)g(handling)f
-(b)m(y)g(AST)g(is)h(consisten)m(t)0 4283 y(with)c(the)h
-Fx(inherite)-5 b(d)33 b(status)f FG(error)e(handling)g(normally)g(used)
-g(in)g(Starlink)g(soft)m(w)m(are.)0 4446 y(Switc)m(hes)43
-b(ma)m(y)h(b)s(e)e(giv)m(en)i(to)f(the)g(\\ast)p Fy(_)p
-FG(link)p Fy(_)p FG(adam")h(command)f(\(in)g(a)g(similar)g(w)m(a)m(y)h
-(to)f(\\ast)p Fy(_)p FG(link"|)0 4559 y Fu(x)p FG(22.2\))36
-b(in)d(order)h(to)g(link)g(with)f(additional)i(AST-related)f
-(facilities,)j(suc)m(h)c(as)h(a)g(graphics)g(in)m(terface.)52
-b(See)0 4672 y(the)31 b(\\ast)p Fy(_)p FG(link)p Fy(_)p
-FG(adam")g(command)f(description)h(in)f(App)s(endix)e(E)j(for)f
-(details)h(of)g(the)f(options)h(a)m(v)-5 b(ailable.)p
-0 5516 1512 4 v 73 5570 a Fs(36)138 5602 y Fr(Use)20
-b(the)f(\\)p Fn(\000)p Fr(pgp")g(option)h(instead)g(if)g(y)n(ou)f(wish)
-h(to)f(use)h(the)f(Starlink)g(v)n(ersion)g(of)i(PGPLOT)f(whic)n(h)f
-(uses)h(GKS)f(to)h(generate)0 5693 y(its)26 b(output.)p
-eop end
-%%Page: 185 195
-TeXDict begin 185 194 bop 3643 52 a FG(185)0 351 y FA(A)134
-b(The)45 b(AST)e(Class)j(Hierarc)l(h)l(y)0 619 y FG(The)29
-b(follo)m(wing)j(table)e(sho)m(ws)g(the)g(hierarc)m(h)m(y)g(of)g
-(classes)h(in)e(the)h(AST)f(library)-8 b(.)41 b(F)-8
-b(or)30 b(a)h(description)e(of)h(eac)m(h)0 732 y(class,)h(y)m(ou)g
-(should)e(consult)i(App)s(endix)e(D.)0 1011 y Ft(Object)564
-b(-)43 b(Base)f(class)g(for)g(all)g(AST)h(Objects)131
-1110 y(Axis)521 b(-)43 b(Store)f(axis)g(information)262
-1210 y(SkyAxis)258 b(-)43 b(Store)f(celestial)e(axis)i(information)131
-1309 y(Channel)389 b(-)43 b(Basic)f(\(textual\))e(I/O)i(channel)262
-1409 y(FitsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(FITS)g(header)f
-(cards)262 1509 y(XmlChan)258 b(-)43 b(I/O)g(Channel)d(using)i(XML)262
-1608 y(StcsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(IVOA)g(STC-S)f
-(descriptions)131 1708 y(KeyMap)433 b(-)43 b(Store)f(a)h(set)f(of)h
-(key/value)d(pairs)131 1808 y(Mapping)389 b(-)43 b(Inter-relate)c(two)j
-(coordinate)e(systems)262 1907 y(CmpMap)302 b(-)43 b(Compound)e
-(Mapping)262 2007 y(DssMap)302 b(-)43 b(Map)g(points)e(using)g
-(Digitised)f(Sky)i(Survey)g(plate)f(solution)262 2106
-y(Frame)346 b(-)43 b(Coordinate)d(system)h(description)392
-2206 y(CmpFrame)84 b(-)43 b(Compound)e(Frame)523 2306
-y(SpecFluxFrame)d(-)43 b(Observed)e(value)g(versus)g(spectral)g
-(position)392 2405 y(FluxFrame)f(-)j(Observed)e(value)g(at)i(a)g(given)
-f(fixed)f(spectral)f(position)392 2505 y(FrameSet)84
-b(-)43 b(Set)g(of)f(inter-related)d(coordinate)g(systems)523
-2605 y(Plot)129 b(-)43 b(Provide)e(facilities)e(for)k(graphical)d
-(output)392 2704 y(Region)172 b(-)43 b(Specify)e(areas)h(within)f(a)i
-(coordinate)c(system)523 2804 y(Box)173 b(-)43 b(A)g(box)g(region)e
-(with)h(sides)f(parallel)g(to)h(the)h(axes)f(of)g(a)i(Frame)523
-2903 y(Circle)d(-)i(A)g(circular)e(or)i(spherical)c(region)i(within)h
-(a)h(Frame)523 3003 y(CmpRegion)83 b(-)44 b(A)f(combination)c(of)k(two)
-f(regions)f(within)g(a)i(single)e(Frame)523 3103 y(Ellipse)171
-b(-)44 b(An)e(elliptical)e(region)h(within)g(a)i(2-dimensional)38
-b(Frame)523 3202 y(Interval)127 b(-)44 b(Intervals)c(on)i(one)h(or)f
-(more)g(axes)g(of)h(a)g(Frame.)523 3302 y(NullRegion)c(-)44
-b(A)f(boundless)d(region)h(within)g(a)i(Frame)523 3402
-y(PointList)83 b(-)44 b(A)f(collection)c(of)k(points)e(in)i(a)g(Frame)
-523 3501 y(Polygon)171 b(-)44 b(A)f(polygonal)d(region)h(within)g(a)i
-(2-dimensional)38 b(Frame)523 3601 y(Prism)85 b(-)43
-b(An)g(extrusion)d(of)j(a)g(Region)e(into)h(orthogonal)d(dimensions)523
-3700 y(Stc)173 b(-)43 b(Represents)d(an)j(generic)d(instance)g(of)j(an)
-g(IVOA)f(STC-X)f(description)654 3800 y(StcResourceProfi)o(le)c(-)43
-b(Represents)d(an)i(an)h(IVOA)f(STC-X)g(ResourceProfile)654
-3900 y(StcSearchLocatio)o(n)81 b(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(SearchLocation)654 3999 y(StcCatalogEntryL)o(oc)o(ati)o(on)37
-b(-)43 b(Represents)c(an)k(an)g(IVOA)f(STC-X)f(CatalogEntryLocat)o(ion)
-654 4099 y(StcObsDataLocati)o(on)c(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(ObsDataLocation)392 4199 y(SkyFrame)84 b(-)43
-b(Celestial)d(coordinate)g(system)h(description)392 4298
-y(SpecFrame)f(-)j(Spectral)e(coordinate)e(system)i(description)523
-4398 y(DSBSpecFrame)e(-)k(Dual)f(sideband)e(spectral)g(coordinate)g
-(system)h(description)392 4497 y(TimeFrame)f(-)j(Time)f(coordinate)e
-(system)h(description)262 4597 y(GrismMap)214 b(-)43
-b(Models)e(the)i(spectral)d(dispersion)f(produced)i(by)i(a)g(grism)262
-4697 y(IntraMap)214 b(-)43 b(Map)g(points)e(using)g(a)i(private)e
-(transformation)d(function)262 4796 y(LutMap)302 b(-)43
-b(Transform)d(1-dimensional)e(coordinates)h(using)j(a)h(lookup)e(table)
-262 4896 y(MathMap)258 b(-)43 b(Transform)d(coordinates)f(using)j
-(mathematical)c(expressions)262 4996 y(MatrixMap)170
-b(-)43 b(Map)g(positions)d(by)i(multiplying)d(them)j(by)h(a)g(matrix)
-262 5095 y(NormMap)258 b(-)43 b(Normalise)d(coordinates)f(using)j(a)h
-(supplied)d(Frame)262 5195 y(PcdMap)302 b(-)43 b(Apply)f(2-dimensional)
-c(pincushion/barre)o(l)g(distortion)262 5295 y(PermMap)258
-b(-)43 b(Coordinate)d(permutation)f(Mapping)262 5394
-y(PolyMap)258 b(-)43 b(General)e(N-dimensional)d(polynomial)i(Mapping)
-262 5494 y(RateMap)258 b(-)43 b(Calculates)d(an)j(element)d(of)j(a)g
-(Mapping's)d(Jacobian)g(matrix)262 5593 y(SelectorMap)82
-b(-)43 b(Locates)e(positions)f(within)h(a)i(set)f(of)h(Regions)262
-5693 y(ShiftMap)214 b(-)43 b(Shifts)e(each)h(axis)g(by)h(a)g(constant)d
-(amount)p eop end
-%%Page: 186 196
-TeXDict begin 186 195 bop 0 52 a FG(186)2158 b Fz(A)92
-b(THE)30 b(AST)f(CLASS)g(HIERAR)m(CHY)262 351 y Ft(SlaMap)302
-b(-)43 b(Sequence)e(of)h(celestial)e(coordinate)g(conversions)262
-451 y(SpecMap)258 b(-)43 b(Sequence)e(of)h(spectral)f(coordinate)e
-(conversions)262 551 y(SphMap)302 b(-)43 b(Map)g(3-d)f(Cartesian)e(to)j
-(2-d)f(spherical)e(coordinates)262 650 y(SwitchMap)170
-b(-)43 b(Encapuslates)c(a)k(set)f(of)h(alternate)d(Mappings)262
-750 y(TimeMap)258 b(-)43 b(Sequence)e(of)h(time)g(coordinate)e
-(conversions)262 849 y(TranMap)258 b(-)43 b(Combine)e(fwd.)h(and)g
-(inv.)g(transformations)c(from)k(two)g(Mappings)262 949
-y(UnitMap)258 b(-)43 b(Unit)f(\(null\))f(Mapping)262
-1049 y(WcsMap)302 b(-)43 b(Implement)d(a)j(FITS-WCS)e(sky)h(projection)
-262 1148 y(WinMap)302 b(-)43 b(Match)f(windows)f(by)h(scaling)f(and)h
-(shifting)f(each)h(axis)262 1248 y(ZoomMap)258 b(-)43
-b(Zoom)f(coordinates)d(about)j(the)g(origin)p eop end
-%%Page: 187 197
-TeXDict begin 187 196 bop 3643 52 a FG(187)0 351 y FA(B)134
-b(AST)44 b(Routine)i(Descriptions)p 0 583 3780 12 v 0
-714 a(AST)p Fe(_)p FA(SET)1023 715 y Fd(Set)38 b(attribute)f(v)-7
-b(alues)38 b(for)g(an)h(Ob)7 b(ject)3192 714 y FA(AST)p
-Fe(_)p FA(SET)0 888 y Fc(Description:)44 b Fk(This)22
-b(routine)g(assigns)e(a)h(set)h(of)g(attribute)g(v)-5
-b(alues)21 b(to)h(an)f(Ob)5 b(ject,)23 b(o)n(v)n(er-riding)c(an)n(y)i
-(previous)g(v)-5 b(alues.)227 988 y(The)33 b(attributes)h(and)f(their)g
-(new)g(v)-5 b(alues)33 b(are)f(sp)r(eci\014ed)h(via)g(a)g(c)n(haracter)
-e(string,)j(whic)n(h)f(should)g(con)n(tain)f(a)227 1088
-y(comma-separated)26 b(list)h(of)h(the)g(form:)227 1208
-y Ft(")p Fk(attribute)p Ft(_)p Fk(1)f(=)g(v)-5 b(alue)p
-Ft(_)p Fk(1,)27 b(attribute)p Ft(_)p Fk(2)f(=)i(v)-5
-b(alue)p Ft(_)p Fk(2,)26 b(...)37 b Ft(")227 1329 y Fk(where)22
-b Ft(")p Fk(attribute)p Ft(_)p Fk(n)p Ft(")g Fk(sp)r(eci\014es)g(an)h
-(attribute)f(name,)i(and)e(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f
-(of)h(eac)n(h)e Ft(")p Fk(=)p Ft(")h Fk(sign)g(should)227
-1429 y(b)r(e)36 b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h
-(the)h(v)-5 b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35
-b(v)-5 b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227
-1528 y(according)26 b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)0
-1670 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SET\()e(THIS,)h
-(SETTINGS,)f(STATUS)h(\))0 1812 y Fc(Argumen)m(ts:)259
-1941 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2041
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2166
-y Fc(SETTINGS)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()f
-Fj(\003)h Fc(\))g(\(Giv)m(en\))427 2266 y Fk(A)j(c)n(haracter)e(string)
-h(con)n(taining)g(a)h(comma-separated)d(list)j(of)g(attribute)g
-(settings)g(in)g(the)g(form)g(de-)427 2365 y(scrib)r(ed)28
-b(ab)r(o)n(v)n(e.)259 2490 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 2590 y Fk(The)c(global)e(status.)0
-2744 y Fc(Class)31 b(Applicabilit)m(y:)259 2873 y(Ob)5
-b(ject)427 2973 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3127 y Fc(Examples:)227 3257 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(MAP,)i('Report)f(=)h(1,)g(Zoom)g(=)g(25.0',)g
-(STATUS)f(\))427 3356 y Fk(Sets)28 b(the)g(Rep)r(ort)f(attribute)h(for)
-f(Ob)5 b(ject)28 b(MAP)f(to)h(the)g(v)-5 b(alue)27 b(1)g(and)h(the)g
-(Zo)r(om)f(attribute)g(to)h(25.0.)227 3485 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(FRAME,)h('Label\()g(1)i(\))f(=Offset)f(from)h
-(cluster)e(axis',)h(STATUS)h(\))427 3580 y Fk(Sets)28
-b(the)g(Lab)r(el\(1\))g(attribute)f(for)g(Ob)5 b(ject)28
-b(FRAME)g(to)f(a)g(suitable)h(string.)0 3735 y Fc(Notes:)340
-4010 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 4135 y Fj(\017)45 b Fk(White)33 b(space)e(ma)n(y)f(also)h
-(surround)g(attribute)g(v)-5 b(alues,)33 b(where)e(it)h(will)g
-(generally)e(b)r(e)i(ignored)e(\(except)427 4235 y(for)24
-b(string-v)-5 b(alued)23 b(attributes)i(where)e(it)i(is)f(signi\014can)
-n(t)g(and)g(forms)g(part)f(of)i(the)f(v)-5 b(alue)25
-b(to)f(b)r(e)g(assigned\).)340 4360 y Fj(\017)45 b Fk(It)32
-b(is)e(not)h(p)r(ossible)g(to)g(include)g(a)g(comma)f(in)h(the)g(v)-5
-b(alue)31 b(to)g(b)r(e)g(assigned)f(to)h(an)g(attribute)g(using)f(this)
-427 4459 y(routine.)37 b(If)28 b(suc)n(h)f(a)g(v)-5 b(alue)28
-b(is)f(needed,)h(then)g(AST)p Ft(_)p Fk(SETC)f(should)h(b)r(e)g(used)f
-(instead.)340 4585 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f
-(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5
-b(alue)27 b(for)g(a)h(read-only)e(attribute.)p 0 4769
-V 0 4899 a FA(AST)p Fe(_)p FA(ADDFRAME)1432 4900 y Fd(Add)39
-b(a)g(F)-10 b(rame)38 b(to)g(a)1359 5000 y(F)-10 b(rameSet)38
-b(to)g(de\014ne)h(a)1307 5100 y(new)g(co)s(ordinate)d(system)2638
-4899 y FA(AST)p Fe(_)p FA(ADDFRAME)0 5273 y Fc(Description:)44
-b Fk(This)27 b(routine)f(adds)g(a)g(new)h(F)-7 b(rame)26
-b(and)g(an)h(asso)r(ciated)e(Mapping)h(to)h(a)f(F)-7
-b(rameSet)26 b(so)g(as)g(to)g(de\014ne)227 5373 y(a)33
-b(new)g(co)r(ordinate)f(system,)i(deriv)n(ed)e(from)h(one)g(whic)n(h)g
-(already)e(exists)i(within)h(the)f(F)-7 b(rameSet.)53
-b(The)34 b(new)227 5473 y(F)-7 b(rame)27 b(then)h(b)r(ecomes)g(the)g(F)
--7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame.)227 5593
-y(This)26 b(routine)f(ma)n(y)f(also)g(b)r(e)i(used)f(to)h(merge)e(t)n
-(w)n(o)h(F)-7 b(rameSets,)25 b(or)g(to)g(app)r(end)g(extra)g(axes)f(to)
-h(ev)n(ery)g(F)-7 b(rame)24 b(in)227 5693 y(a)j(F)-7
-b(rameSet.)p eop end
-%%Page: 188 198
-TeXDict begin 188 197 bop 0 52 a FG(188)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_ADDFRAME\()c(THIS,)j(IFRAME,)g(MAP,)h(FRAME,)f
-(STATUS)g(\))0 499 y Fc(Argumen)m(ts:)259 634 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 734 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 865 y Fc(IFRAME)31 b(=)h(INTEGER)g
-(\(Giv)m(en\))427 965 y Fk(The)j(index)g(of)g(the)g(F)-7
-b(rame)34 b(within)i(the)f(F)-7 b(rameSet)34 b(whic)n(h)h(describ)r(es)
-f(the)h(co)r(ordinate)f(system)g(up)r(on)427 1064 y(whic)n(h)d(the)f
-(new)h(one)f(is)g(to)g(b)r(e)h(based.)45 b(This)30 b(v)-5
-b(alue)31 b(should)f(lie)g(in)h(the)g(range)e(from)h(1)g(to)g(the)h(n)n
-(um)n(b)r(er)427 1164 y(of)36 b(F)-7 b(rames)35 b(already)g(in)h(the)g
-(F)-7 b(rameSet)36 b(\(as)f(giv)n(en)g(b)n(y)h(its)g(Nframe)f
-(attribute\).)62 b(As)36 b(a)g(sp)r(ecial)f(case,)427
-1263 y(AST)p Ft(__)p Fk(ALLFRAMES)25 b(ma)n(y)g(b)r(e)g(supplied,)h(in)
-f(whic)n(h)g(case)g(the)g(axes)f(de\014ned)i(b)n(y)e(the)i(supplied)f
-(F)-7 b(rame)427 1363 y(are)27 b(app)r(ended)h(to)f(ev)n(ery)g(F)-7
-b(rame)27 b(in)g(the)h(F)-7 b(rameSet)28 b(\(see)f(the)h(Notes)g
-(section)f(for)g(details\).)259 1494 y Fc(MAP)32 b(=)g(INTEGER)f(\(Giv)
-m(en\))427 1594 y Fk(P)n(oin)n(ter)20 b(to)i(a)f(Mapping)h(whic)n(h)f
-(describ)r(es)h(ho)n(w)f(to)g(con)n(v)n(ert)g(co)r(ordinates)f(from)h
-(the)h(old)g(co)r(ordinate)f(sys-)427 1694 y(tem)28 b(\(describ)r(ed)e
-(b)n(y)h(the)g(F)-7 b(rame)26 b(with)i(index)f(IFRAME\))g(in)n(to)g(co)
-r(ordinates)e(in)i(the)g(new)g(system.)37 b(The)427 1793
-y(Mapping's)21 b(forw)n(ard)e(transformation)g(should)i(p)r(erform)g
-(this)g(con)n(v)n(ersion,)f(and)h(its)g(in)n(v)n(erse)f(transforma-)427
-1893 y(tion)28 b(should)g(con)n(v)n(ert)e(in)j(the)f(opp)r(osite)g
-(direction.)37 b(The)28 b(supplied)g(Mapping)g(is)g(ignored)f(if)h
-(parameter)427 1993 y(IFRAME)g(is)g(equal)f(to)g(AST)p
-Ft(__)p Fk(ALLFRAMES.)259 2124 y Fc(FRAME)k(=)h(INTEGER)g(\(Giv)m(en\))
-427 2223 y Fk(P)n(oin)n(ter)f(to)i(a)f(F)-7 b(rame)32
-b(that)h(describ)r(es)e(the)i(new)g(co)r(ordinate)e(system.)52
-b(An)n(y)32 b(class)g(of)g(F)-7 b(rame)32 b(ma)n(y)g(b)r(e)427
-2323 y(supplied)c(\(including)g(Regions)f(and)g(F)-7
-b(rameSets\).)427 2439 y(This)32 b(routine)f(ma)n(y)g(also)f(b)r(e)i
-(used)g(to)f(merge)g(t)n(w)n(o)g(F)-7 b(rameSets)31 b(b)n(y)g
-(supplying)g(a)g(p)r(oin)n(ter)h(to)f(a)g(second)427
-2538 y(F)-7 b(rameSet)28 b(for)f(this)h(argumen)n(t)e(\(see)i(the)g
-(Notes)f(section)g(for)g(details\).)259 2670 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2769 y Fk(The)c(global)e(status.)0 2929 y Fc(Notes:)340
-3210 y Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)31 b(of)g(AST)p
-Ft(__)p Fk(BASE)f(or)g(AST)p Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)
-n(en)f(for)h(the)g(IFRAME)h(argumen)n(t)e(to)427 3310
-y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)
--7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 3441 y Fj(\017)45
-b Fk(This)27 b(routine)g(sets)g(the)h(v)-5 b(alue)27
-b(of)g(the)g(Curren)n(t)g(attribute)g(for)g(the)g(F)-7
-b(rameSet)27 b(so)g(that)g(the)h(new)f(F)-7 b(rame)427
-3541 y(subsequen)n(tly)27 b(b)r(ecomes)h(the)g(curren)n(t)e(F)-7
-b(rame.)340 3672 y Fj(\017)45 b Fk(The)26 b(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinate)e(v)-5 b(alues)25 b(accepted)g(b)n(y)g(the)g
-(supplied)h(Mapping)f(\(its)g(Nin)h(attribute\))427 3772
-y(m)n(ust)e(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)g(axes)g(in)g(the)h
-(F)-7 b(rame)23 b(iden)n(ti\014ed)h(b)n(y)f(the)h(IFRAME)g(argumen)n
-(t.)34 b(Similarly)-7 b(,)427 3872 y(the)25 b(n)n(um)n(b)r(er)g(of)f
-(output)h(co)r(ordinate)f(v)-5 b(alues)24 b(generated)g(b)n(y)g(this)h
-(Mapping)f(\(its)h(Nout)g(attribute\))g(m)n(ust)427 3971
-y(matc)n(h)j(the)g(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)g(new)g(F)-7
-b(rame.)340 4103 y Fj(\017)45 b Fk(As)23 b(a)f(sp)r(ecial)g(case,)h(if)
-g(a)g(p)r(oin)n(ter)f(to)g(a)g(F)-7 b(rameSet)23 b(is)f(giv)n(en)g(for)
-g(the)h(FRAME)g(argumen)n(t,)g(this)g(is)f(treated)427
-4202 y(as)j(a)h(request)f(to)g(merge)g(a)g(pair)g(of)h(F)-7
-b(rameSets.)36 b(This)26 b(is)f(done)h(b)n(y)f(app)r(ending)h(all)f
-(the)h(new)g(F)-7 b(rames)25 b(\(in)427 4302 y(the)k(FRAME)g(F)-7
-b(rameSet\))29 b(to)g(the)g(original)e(F)-7 b(rameSet,)29
-b(while)g(preserving)e(their)h(order)g(and)g(retaining)427
-4401 y(all)j(the)g(in)n(ter-relationships)d(\(i.e.)47
-b(Mappings\))30 b(b)r(et)n(w)n(een)h(them.)46 b(The)31
-b(t)n(w)n(o)f(sets)g(of)h(F)-7 b(rames)30 b(are)f(in)n(ter-)427
-4501 y(related)35 b(within)h(the)g(merged)f(F)-7 b(rameSet)35
-b(b)n(y)g(using)g(the)h(Mapping)f(supplied.)61 b(This)36
-b(should)f(con)n(v)n(ert)427 4601 y(b)r(et)n(w)n(een)30
-b(the)f(F)-7 b(rame)29 b(iden)n(ti\014ed)h(b)n(y)f(the)h(IFRAME)f
-(argumen)n(t)f(\(in)i(the)g(original)e(F)-7 b(rameSet\))29
-b(and)g(the)427 4700 y(curren)n(t)j(F)-7 b(rame)32 b(of)g(the)h(FRAME)g
-(F)-7 b(rameSet.)51 b(This)33 b(latter)f(F)-7 b(rame)32
-b(b)r(ecomes)g(the)h(curren)n(t)e(F)-7 b(rame)32 b(in)427
-4800 y(the)c(merged)f(F)-7 b(rameSet.)340 4931 y Fj(\017)45
-b Fk(As)20 b(another)f(sp)r(ecial)g(case,)h(if)g(a)f(v)-5
-b(alue)20 b(of)f(AST)p Ft(__)p Fk(ALLFRAMES)h(is)f(supplied)h(for)f
-(parameter)f(IFRAME,)427 5031 y(then)33 b(the)g(supplied)g(Mapping)f
-(is)g(ignored,)h(and)f(the)h(axes)e(de\014ned)i(b)n(y)f(the)h(supplied)
-g(F)-7 b(rame)32 b(are)f(ap-)427 5130 y(p)r(ended)c(to)e(eac)n(h)g(F)-7
-b(rame)25 b(in)h(the)g(F)-7 b(rameSet.)36 b(In)26 b(detail,)g(eac)n(h)e
-(F)-7 b(rame)25 b(in)h(the)g(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n(y)
-427 5230 y(a)j(CmpF)-7 b(rame)29 b(con)n(taining)e(the)i(original)e(F)
--7 b(rame)28 b(and)g(the)h(F)-7 b(rame)28 b(sp)r(eci\014ed)h(b)n(y)f
-(parameter)f(FRAME.)427 5330 y(In)f(addition,)g(eac)n(h)f(Mapping)g(in)
-h(the)f(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n(y)g(a)g(CmpMap)h(con)n
-(taining)e(the)i(original)427 5429 y(Mapping)32 b(and)g(a)g(UnitMap)g
-(in)g(parallel.)50 b(The)32 b(Nin)g(and)g(Nout)g(attributes)g(of)g(the)
-h(UnitMap)g(are)e(set)427 5529 y(equal)g(to)g(the)h(n)n(um)n(b)r(er)f
-(of)g(axes)g(in)g(the)h(supplied)g(F)-7 b(rame.)47 b(Eac)n(h)30
-b(new)i(CmpMap)f(is)g(simpli\014ed)h(using)427 5629 y(AST)p
-Ft(_)p Fk(SIMPLIFY)c(b)r(efore)f(b)r(eing)h(stored)f(in)h(the)g(F)-7
-b(rameSet.)p eop end
-%%Page: 189 199
-TeXDict begin 189 198 bop 3643 52 a FG(189)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(ANGLE)1034 483 y Fd(Calculate)37
-b(the)h(angle)g(subtended)h(b)m(y)1203 598 y(t)m(w)m(o)e(p)s(oin)m(ts)h
-(at)g(a)h(third)f(p)s(oin)m(t)2967 482 y FA(AST)p Fe(_)p
-FA(ANGLE)0 786 y Fc(Description:)44 b Fk(This)28 b(routine)g(\014nds)g
-(the)g(angle)f(at)h(p)r(oin)n(t)g(B)g(b)r(et)n(w)n(een)g(the)h(line)f
-(joining)g(p)r(oin)n(ts)f(A)i(and)f(B,)f(and)h(the)227
-885 y(line)j(joining)g(p)r(oin)n(ts)f(C)h(and)g(B.)f(These)h(lines)f
-(will)h(in)g(fact)g(b)r(e)g(geo)r(desic)f(curv)n(es)f(appropriate)g(to)
-i(the)g(F)-7 b(rame)227 985 y(in)28 b(use.)37 b(F)-7
-b(or)27 b(instance,)g(in)h(SkyF)-7 b(rame,)27 b(they)h(will)g(b)r(e)g
-(great)e(circles.)0 1134 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_ANGLE\()c(THIS,)j(A,)h(B,)g(C,)f(STATUS)f(\))0
-1283 y Fc(Argumen)m(ts:)259 1419 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1519 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 1651 y Fc(A\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1751 y Fk(An)d(arra)n(y)c(with)k(one)f
-(elemen)n(t)g(for)f(eac)n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h
-(attribute\))h(con)n(taining)e(the)h(co)r(ordinates)427
-1850 y(of)h(the)g(\014rst)f(p)r(oin)n(t.)259 1983 y Fc(B\()32
-b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2083 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h(F)
--7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h(co)
-r(ordinates)427 2182 y(of)h(the)g(second)f(p)r(oin)n(t.)259
-2315 y Fc(C\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 2414 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f
-(eac)n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n
-(taining)e(the)h(co)r(ordinates)427 2514 y(of)h(the)g(third)g(p)r(oin)n
-(t.)259 2646 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2746 y Fk(The)c(global)e(status.)0 2908
-y Fc(Returned)32 b(V)-8 b(alue:)259 3044 y(AST)p Ft(_)p
-Fc(ANGLE)32 b(=)g(DOUBLE)h(PRECISION)427 3143 y Fk(The)c(angle)e(in)i
-(radians,)e(from)h(the)g(line)h(AB)f(to)g(the)h(line)f(CB.)g(If)h(the)g
-(F)-7 b(rame)27 b(is)i(2-dimensional,)e(it)h(will)427
-3243 y(b)r(e)33 b(in)f(the)h(range)e($)p Fj(n)p Fk(pm)h
-Fj(n)p Fk(pi$,)h(and)f(p)r(ositiv)n(e)g(rotation)f(is)h(in)g(the)h
-(same)f(sense)g(as)f(rotation)g(from)h(the)427 3343 y(p)r(ositiv)n(e)d
-(direction)g(of)g(axis)f(2)h(to)g(the)h(p)r(ositiv)n(e)e(direction)h
-(of)g(axis)g(1.)41 b(If)30 b(the)f(F)-7 b(rame)29 b(has)f(more)h(than)g
-(2)427 3442 y(axes,)e(a)g(p)r(ositiv)n(e)g(v)-5 b(alue)28
-b(will)g(alw)n(a)n(ys)d(b)r(e)j(returned)f(in)h(the)g(range)f(zero)f
-(to)i($)p Fj(n)p Fk(pi$.)0 3604 y Fc(Notes:)340 3886
-y Fj(\017)45 b Fk(A)27 b(v)-5 b(alue)26 b(of)h(AST)p
-Ft(__)p Fk(BAD)f(will)h(also)e(b)r(e)i(returned)f(if)h(p)r(oin)n(ts)f
-(A)h(and)f(B)g(are)g(co-inciden)n(t,)g(or)f(if)i(p)r(oin)n(ts)g(B)427
-3985 y(and)h(C)f(are)g(co-inciden)n(t.)340 4118 y Fj(\017)45
-b Fk(A)29 b(v)-5 b(alue)29 b(of)g(AST)p Ft(__)p Fk(BAD)g(will)g(also)f
-(b)r(e)h(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g
-(with)h(ST)-7 b(A)g(TUS)30 b(set)f(to)427 4218 y(an)f(error)d(v)-5
-b(alue,)28 b(or)e(if)j(it)f(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 4416 V 0 4547 a FA(AST)p Fe(_)p FA(ANNUL)1137 4548
-y Fd(Ann)m(ul)38 b(a)h(p)s(oin)m(ter)e(to)h(an)h(Ob)7
-b(ject)2952 4547 y FA(AST)p Fe(_)p FA(ANNUL)0 4736 y
-Fc(Description:)44 b Fk(This)33 b(routine)f(ann)n(uls)g(a)g(p)r(oin)n
-(ter)g(to)h(an)f(Ob)5 b(ject)33 b(so)f(that)g(it)h(is)g(no)f(longer)g
-(recognised)e(as)i(a)h(v)-5 b(alid)227 4836 y(p)r(oin)n(ter)37
-b(b)n(y)h(the)g(AST)g(library)-7 b(.)66 b(An)n(y)37 b(resources)f(asso)
-r(ciated)g(with)i(the)g(p)r(oin)n(ter)f(are)g(released)f(and)i(made)227
-4935 y(a)n(v)-5 b(ailable)27 b(for)g(re-use.)227 5060
-y(This)d(routine)f(also)g(decremen)n(ts)g(the)h(Ob)5
-b(ject's)23 b(RefCoun)n(t)h(attribute)f(b)n(y)h(one.)35
-b(If)24 b(this)g(attribute)g(reac)n(hes)e(zero)227 5159
-y(\(whic)n(h)28 b(happ)r(ens)g(when)g(the)f(last)h(p)r(oin)n(ter)f(to)g
-(the)h(Ob)5 b(ject)28 b(is)f(ann)n(ulled\),)h(then)g(the)g(Ob)5
-b(ject)28 b(is)f(deleted.)0 5308 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_ANNUL\()d(THIS,)j(STATUS)f(\))0 5457
-y Fc(Argumen)m(ts:)259 5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en)g(and)
-g(Returned\))427 5693 y Fk(The)c(Ob)5 b(ject)27 b(p)r(oin)n(ter)h(to)f
-(b)r(e)h(ann)n(ulled.)37 b(A)28 b(n)n(ull)f(p)r(oin)n(ter)h(v)-5
-b(alue)27 b(\(AST)p Ft(__)p Fk(NULL\))h(is)g(alw)n(a)n(ys)d(returned.)p
-eop end
-%%Page: 190 200
-TeXDict begin 190 199 bop 0 52 a FG(190)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 606 y Fc(Class)31 b(Applicabilit)m
-(y:)259 735 y(Ob)5 b(ject)427 835 y Fk(This)28 b(routine)f(applies)g
-(to)h(all)f(Ob)5 b(jects.)0 990 y Fc(Notes:)340 1265
-y Fj(\017)45 b Fk(This)28 b(routine)f(attempts)g(to)h(execute)f(ev)n
-(en)g(if)g(ST)-7 b(A)g(TUS)29 b(is)e(set)g(to)h(an)f(error)e(v)-5
-b(alue)27 b(on)g(en)n(try)-7 b(,)27 b(although)427 1365
-y(no)34 b(further)f(error)f(rep)r(ort)h(will)h(b)r(e)g(made)g(if)g(it)g
-(subsequen)n(tly)f(fails)h(under)f(these)h(circumstances.)54
-b(In)427 1465 y(particular,)27 b(it)i(will)f(fail)g(if)h(the)f(p)r(oin)
-n(ter)g(suppled)g(is)g(not)g(v)-5 b(alid,)28 b(but)h(this)f(will)g
-(only)g(b)r(e)g(rep)r(orted)g(if)g(the)427 1564 y(error)e(status)h(is)h
-(clear)e(on)i(en)n(try)-7 b(.)p 0 1750 3780 12 v 0 1880
-a FA(AST)p Fe(_)p FA(AXANGLE)1214 1881 y Fd(Returns)38
-b(the)h(angle)f(from)f(an)1211 1996 y(axis,)h(to)g(a)h(line)f(through)f
-(t)m(w)m(o)1733 2107 y(p)s(oin)m(ts)2764 1880 y FA(AST)p
-Fe(_)p FA(AXANGLE)0 2282 y Fc(Description:)44 b Fk(This)35
-b(routine)f(\014nds)h(the)g(angle,)h(as)e(seen)h(from)f(p)r(oin)n(t)h
-(A,)g(b)r(et)n(w)n(een)g(the)g(p)r(ositiv)n(e)f(direction)g(of)h(a)227
-2381 y(sp)r(eci\014ed)28 b(axis,)f(and)g(the)h(geo)r(desic)f(curv)n(e)g
-(joining)g(p)r(oin)n(t)h(A)g(to)f(p)r(oin)n(t)h(B.)0
-2524 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_AXANGLE\()c
-(THIS,)i(A,)i(B,)g(AXIS,)e(STATUS)g(\))0 2666 y Fc(Argumen)m(ts:)259
-2796 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2895
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 3021
-y Fc(A\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))
-427 3121 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h
-(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h
-(co)r(ordinates)427 3220 y(of)h(the)g(\014rst)f(p)r(oin)n(t.)259
-3346 y Fc(B\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 3446 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f
-(eac)n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n
-(taining)e(the)h(co)r(ordinates)427 3545 y(of)h(the)g(second)f(p)r(oin)
-n(t.)259 3671 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-3771 y Fk(The)24 b(n)n(um)n(b)r(er)g(of)f(the)h(F)-7
-b(rame)24 b(axis)f(from)g(whic)n(h)h(the)g(angle)f(is)g(to)h(b)r(e)g
-(measured)f(\(axis)g(n)n(um)n(b)r(ering)g(starts)427
-3870 y(at)28 b(1)f(for)g(the)h(\014rst)f(axis\).)259
-3996 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4096 y Fk(The)c(global)e(status.)0 4251
-y Fc(Returned)32 b(V)-8 b(alue:)259 4380 y(AST)p Ft(_)p
-Fc(AXANGLE)33 b(=)f(DOUBLE)g(PRECISION)427 4480 y Fk(The)d(angle)g(in)g
-(radians,)f(from)h(the)g(p)r(ositiv)n(e)g(direction)f(of)h(the)h(sp)r
-(eci\014ed)f(axis,)g(to)g(the)g(line)g(AB.)h(If)f(the)427
-4580 y(F)-7 b(rame)28 b(is)g(2-dimensional,)g(it)g(will)h(b)r(e)g(in)f
-(the)h(range)e([-PI/2,+PI/2],)e(and)j(p)r(ositiv)n(e)g(rotation)f(is)i
-(in)f(the)427 4679 y(same)j(sense)f(as)g(rotation)g(from)g(the)i(p)r
-(ositiv)n(e)e(direction)g(of)h(axis)f(2)h(to)f(the)i(p)r(ositiv)n(e)e
-(direction)h(of)f(axis)427 4779 y(1.)43 b(If)30 b(the)g(F)-7
-b(rame)30 b(has)f(more)g(than)h(2)f(axes,)g(a)h(p)r(ositiv)n(e)f(v)-5
-b(alue)30 b(will)g(alw)n(a)n(ys)d(b)r(e)k(returned)e(in)h(the)g(range)
-427 4878 y(zero)d(to)g(PI.)0 5033 y Fc(Notes:)340 5309
-y Fj(\017)45 b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g
-(this)g(routine)g(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts,)427 5409 y(as)f(de\014ned)h(b)n(y)
-f(the)h(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340
-5534 y Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 5634 y(has)27 b(this)h(v)-5 b(alue,)28
-b(or)e(if)j(the)f(require)e(p)r(osition)h(angle)g(is)h(unde\014ned.)p
-eop end
-%%Page: 191 201
-TeXDict begin 191 200 bop 3643 52 a FG(191)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(AXDIST)-11 b(ANCE)1442
-483 y Fd(Find)39 b(the)f(distance)1454 583 y(b)s(et)m(w)m(een)g(t)m(w)m
-(o)f(axis)1735 682 y(v)-7 b(alues)2543 482 y FA(AST)p
-Fe(_)p FA(AXDIST)c(ANCE)0 843 y Fc(Description:)44 b
-Fk(This)28 b(routine)e(returns)h(a)g(signed)f(v)-5 b(alue)27
-b(represen)n(ting)f(the)i(axis)e(incremen)n(t)h(from)g(axis)f(v)-5
-b(alue)27 b(v1)g(to)227 942 y(axis)g(v)-5 b(alue)28 b(v2.)227
-1066 y(F)-7 b(or)24 b(a)g(simple)h(F)-7 b(rame,)25 b(this)g(is)f(a)h
-(trivial)f(op)r(eration)f(returning)h(the)h(di\013erence)g(b)r(et)n(w)n
-(een)f(the)h(t)n(w)n(o)f(axis)g(v)-5 b(alues.)227 1165
-y(But)28 b(for)f(other)g(deriv)n(ed)g(classes)f(of)i(F)-7
-b(rame)27 b(\(suc)n(h)h(as)e(a)i(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 1312 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_AXDISTANCE\()37 b(THIS,)42 b(AXIS,)f(V1,)i
-(V2,)f(STATUS)f(\))0 1459 y Fc(Argumen)m(ts:)259 1593
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 1823 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m
-(en\))427 1922 y Fk(The)d(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h
-(the)g(supplied)g(v)-5 b(alues)27 b(refer.)36 b(The)28
-b(\014rst)f(axis)g(has)g(index)h(1.)259 2053 y Fc(V1)k(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 2152 y Fk(The)d(\014rst)f(axis)g(v)-5
-b(alue.)259 2283 y Fc(V2)32 b(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-2382 y Fk(The)d(second)f(axis)g(v)-5 b(alue.)259 2513
-y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2612 y Fk(The)c(global)e(status.)0 2772 y Fc(Returned)32
-b(V)-8 b(alue:)259 2906 y(AST)p Ft(_)p Fc(AXDIST)g(ANCE)33
-b(=)f(DOUBLE)g(PRECISION)427 3005 y Fk(The)c(distance)f(from)h(the)f
-(\014rst)h(to)f(the)h(second)f(axis)g(v)-5 b(alue.)0
-3165 y Fc(Notes:)340 3444 y Fj(\017)45 b Fk(This)33 b(function)g(will)f
-(return)g(a)g Ft(")p Fk(bad)p Ft(")f Fk(result)h(v)-5
-b(alue)33 b(\(AST)p Ft(__)p Fk(BAD\))g(if)f(an)n(y)g(of)g(the)h(input)g
-(v)-5 b(alues)32 b(has)427 3544 y(this)c(v)-5 b(alue.)340
-3674 y Fj(\017)45 b Fk(A)29 b Ft(")p Fk(bad)p Ft(")f
-Fk(v)-5 b(alue)28 b(will)h(also)e(b)r(e)i(returned)f(if)h(this)g
-(function)g(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)30
-b(set)e(to)g(an)h(error)427 3774 y(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 3968 V 0
-4099 a FA(AST)p Fe(_)p FA(AX)l(OFFSET)1248 4100 y Fd(Add)38
-b(an)h(incremen)m(t)e(on)m(to)g(a)1408 4200 y(supplied)h(axis)g(v)-7
-b(alue)2722 4099 y FA(AST)p Fe(_)p FA(AX)l(OFFSET)0 4383
-y Fc(Description:)44 b Fk(This)19 b(routine)f(returns)g(an)g(axis)g(v)
--5 b(alue)19 b(formed)f(b)n(y)g(adding)h(a)f(signed)g(axis)g(incremen)n
-(t)g(on)n(to)g(a)g(supplied)227 4483 y(axis)27 b(v)-5
-b(alue.)227 4606 y(F)e(or)29 b(a)h(simple)g(F)-7 b(rame,)29
-b(this)i(is)e(a)h(trivial)f(op)r(eration)f(returning)h(the)i(sum)e(of)h
-(the)g(t)n(w)n(o)f(supplied)h(v)-5 b(alues.)43 b(But)227
-4706 y(for)27 b(other)g(deriv)n(ed)g(classes)f(of)i(F)-7
-b(rame)27 b(\(suc)n(h)h(as)f(a)g(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 4853 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_AXOFFSET\()38 b(THIS,)k(AXIS,)f(V1,)i(DIST,)e
-(STATUS)g(\))0 5000 y Fc(Argumen)m(ts:)259 5134 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5233 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 5363 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m
-(en\))427 5463 y Fk(The)d(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h
-(the)g(supplied)g(v)-5 b(alues)27 b(refer.)36 b(The)28
-b(\014rst)f(axis)g(has)g(index)h(1.)259 5593 y Fc(V1)k(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 5693 y Fk(The)d(original)e(axis)h(v)-5
-b(alue.)p eop end
-%%Page: 192 202
-TeXDict begin 192 201 bop 0 52 a FG(192)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(DIST)i(=)f(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 451 y Fk(The)d(axis)f(incremen)n(t)g(to)h
-(add)f(to)g(the)h(original)e(axis)h(v)-5 b(alue.)259
-572 y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 672 y Fk(The)c(global)e(status.)0 822 y Fc(Returned)32
-b(V)-8 b(alue:)259 947 y(AST)p Ft(_)p Fc(AX)m(OFFSET)33
-b(=)f(DOUBLE)g(PRECISION)427 1047 y Fk(The)c(incremen)n(ted)f(axis)g(v)
--5 b(alue.)0 1198 y Fc(Notes:)340 1469 y Fj(\017)45 b
-Fk(This)33 b(function)g(will)f(return)g(a)g Ft(")p Fk(bad)p
-Ft(")f Fk(result)h(v)-5 b(alue)33 b(\(AST)p Ft(__)p Fk(BAD\))g(if)f(an)
-n(y)g(of)g(the)h(input)g(v)-5 b(alues)32 b(has)427 1568
-y(this)c(v)-5 b(alue.)340 1690 y Fj(\017)45 b Fk(A)29
-b Ft(")p Fk(bad)p Ft(")f Fk(v)-5 b(alue)28 b(will)h(also)e(b)r(e)i
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)30 b(set)e(to)g(an)h(error)427 1789 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1966 3780 12 v 0 2097 a FA(AST)p Fe(_)p FA(BEGIN)1229
-2096 y Fd(Begin)38 b(a)g(new)h(AST)f(con)m(text)3003
-2097 y FA(AST)p Fe(_)p FA(BEGIN)0 2262 y Fc(Description:)44
-b Fk(This)34 b(routine)g(b)r(egins)g(a)g(new)g(AST)g(con)n(text.)56
-b(An)n(y)34 b(Ob)5 b(ject)34 b(p)r(oin)n(ters)g(created)f(within)i
-(this)f(con-)227 2362 y(text)f(will)f(b)r(e)h(ann)n(ulled)f(when)g(it)h
-(is)f(later)g(ended)g(using)g(AST)p Ft(_)p Fk(END)h(\(just)g(as)e(if)i
-(AST)p Ft(_)p Fk(ANNUL)g(had)f(b)r(een)227 2462 y(in)n(v)n(ok)n(ed\),)
-39 b(unless)e(they)h(ha)n(v)n(e)e(\014rst)h(b)r(een)h(exp)r(orted)f
-(using)h(AST)p Ft(_)p Fk(EXPOR)-7 b(T)36 b(or)h(rendered)f(exempt)i
-(using)227 2561 y(AST)p Ft(_)p Fk(EXEMPT.)22 b(If)h(ann)n(ulling)g(a)f
-(p)r(oin)n(ter)h(causes)f(an)g(Ob)5 b(ject's)23 b(RefCoun)n(t)g
-(attribute)g(to)g(fall)g(to)g(zero)e(\(whic)n(h)227 2661
-y(happ)r(ens)28 b(when)g(the)g(last)f(p)r(oin)n(ter)g(to)h(it)g(is)f
-(ann)n(ulled\),)h(then)g(the)g(Ob)5 b(ject)27 b(will)h(b)r(e)g
-(deleted.)0 2799 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_BEGIN\()d(STATUS)i(\))0 2937 y Fc(Argumen)m(ts:)259
-3062 y(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3162 y Fk(The)c(global)e(status.)0 3312
-y Fc(Class)31 b(Applicabilit)m(y:)259 3437 y(Ob)5 b(ject)427
-3537 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3687 y Fc(Notes:)340 3958 y Fj(\017)45 b Fk(This)28
-b(routine)f(attempts)h(to)g(execute)f(ev)n(en)g(if)h(ST)-7
-b(A)g(TUS)29 b(is)e(set)h(to)f(an)h(error)d(v)-5 b(alue.)340
-4080 y Fj(\017)45 b Fk(Con)n(texts)27 b(delimited)i(b)n(y)e(AST)p
-Ft(_)p Fk(BEGIN)g(and)h(AST)p Ft(_)p Fk(END)g(ma)n(y)e(b)r(e)i(nested)g
-(to)g(an)n(y)e(depth.)p 0 4256 V 0 4387 a FA(AST)p Fe(_)p
-FA(BORDER)1177 4388 y Fd(Dra)m(w)38 b(a)g(b)s(order)g(around)g(v)-7
-b(alid)1468 4488 y(regions)37 b(of)h(a)h(Plot)2860 4387
-y FA(AST)p Fe(_)p FA(BORDER)0 4658 y Fc(Description:)44
-b Fk(This)32 b(function)h(dra)n(ws)e(a)h(\(line\))h(b)r(order)e(around)
-g(regions)g(of)h(the)g(plotting)h(area)d(of)i(a)g(Plot)g(whic)n(h)227
-4758 y(corresp)r(ond)d(to)h(v)-5 b(alid,)30 b(unclipp)r(ed)h(ph)n
-(ysical)f(co)r(ordinates.)42 b(F)-7 b(or)30 b(example,)g(when)g
-(plotting)g(using)g(an)g(all-sky)227 4858 y(map)g(pro)5
-b(jection,)29 b(this)h(function)g(could)f(b)r(e)h(used)g(to)f(dra)n(w)g
-(the)h(b)r(oundary)f(of)g(the)h(celestial)f(sphere)g(when)h(it)227
-4957 y(is)e(pro)5 b(jected)27 b(on)g(to)g(the)h(plotting)g(surface.)227
-5076 y(If)k(the)g(en)n(tire)f(plotting)g(area)f(con)n(tains)h(v)-5
-b(alid,)32 b(unclipp)r(ed)g(ph)n(ysical)f(co)r(ordinates,)g(then)h(the)
-g(b)r(oundary)e(will)227 5176 y(just)e(b)r(e)g(a)g(rectangular)d(b)r(o)
-n(x)i(around)g(the)h(edges)f(of)g(the)h(plotting)g(area.)227
-5295 y(If)19 b(the)g(Plot)f(is)h(a)f(Plot3D,)g(this)h(metho)r(d)g(is)f
-(applied)h(individually)g(to)f(eac)n(h)g(of)g(the)h(three)g(2D)f(Plots)
-g(encapsulated)227 5394 y(within)23 b(the)g(Plot3D)f(\(eac)n(h)f(of)i
-(these)f(Plots)f(corresp)r(onds)g(to)h(a)g(single)g(2D)g(plane)g(in)h
-(the)f(3D)h(graphics)d(system\).)227 5494 y(In)36 b(addition,)i(if)e
-(the)g(en)n(tire)f(plotting)h(v)n(olume)e(has)i(v)-5
-b(alid)35 b(co)r(ordinates)f(in)i(the)g(3D)g(curren)n(t)f(F)-7
-b(rame)35 b(of)g(the)227 5593 y(Plot3D,)g(then)i(additional)e(lines)g
-(are)g(dra)n(wn)g(along)f(the)i(edges)f(of)h(the)g(3D)f(plotting)h(v)n
-(olume)f(so)g(that)h(the)227 5693 y(en)n(tire)27 b(plotting)h(v)n
-(olume)f(is)h(enclosed)e(within)j(a)e(cub)r(oid)h(grid.)p
-eop end
-%%Page: 193 203
-TeXDict begin 193 202 bop 3643 52 a FG(193)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_BORDER\()c(THIS,)j(STATUS)f(\))0
-494 y Fc(Argumen)m(ts:)259 623 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 723 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-849 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 948 y Fk(The)c(global)e(status.)0 1103
-y Fc(Returned)32 b(V)-8 b(alue:)259 1233 y(AST)p Ft(_)p
-Fc(BORDER)31 b(=)h(LOGICAL)427 1332 y Fk(.F)-9 b(ALSE.)37
-b(is)g(returned)g(if)h(the)g(plotting)f(space)f(is)h(completely)g
-(\014lled)h(b)n(y)f(v)-5 b(alid,)39 b(unclipp)r(ed)f(ph)n(ysical)427
-1432 y(co)r(ordinates)23 b(\(so)h(that)g(only)g(a)g(rectangular)e(b)r
-(o)n(x)i(w)n(as)f(dra)n(wn)g(around)h(the)g(edge\).)36
-b(Otherwise,)24 b(.TR)n(UE.)427 1532 y(is)k(returned.)0
-1686 y Fc(Notes:)340 1962 y Fj(\017)45 b Fk(A)28 b(v)-5
-b(alue)28 b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g(returned)f(if)h
-(this)g(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7
-b(A)g(TUS)28 b(set)g(to)f(an)h(error)427 2062 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)340
-2187 y Fj(\017)45 b Fk(An)23 b(error)e(results)h(if)i(either)e(the)h
-(curren)n(t)f(F)-7 b(rame)22 b(or)g(the)h(base)f(F)-7
-b(rame)23 b(of)f(the)h(Plot)g(is)f(not)h(2-dimensional)427
-2287 y(or)k(\(for)g(a)h(Plot3D\))f(3-dimensional.)340
-2413 y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(base)f(and)h(curren)n(t)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 2513 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranF)g(orw)n(ard)25
-b(attribute)j(is)g(zero\).)p 0 2698 3780 12 v 0 2829
-a FA(AST)p Fe(_)p FA(BOUNDINGBO)l(X)1661 2828 y Fd(Return)39
-b(a)1651 2928 y(b)s(ounding)1708 3042 y(b)s(o)m(x)f(for)1629
-3142 y(previously)1732 3257 y(dra)m(wn)1678 3356 y(graphics)2385
-2829 y FA(AST)p Fe(_)p FA(BOUNDINGBO)l(X)0 3531 y Fc(Description:)44
-b Fk(This)30 b(routine)e(returns)h(the)h(b)r(ounds)f(of)g(a)g(b)r(o)n
-(x)g(whic)n(h)g(just)h(encompasess)d(the)j(graphics)e(pro)r(duced)227
-3631 y(b)n(y)21 b(the)g(previous)f(call)h(to)g(an)n(y)f(of)h(the)h
-(Plot)e(metho)r(ds)h(whic)n(h)g(pro)r(duce)g(graphical)f(output.)35
-b(If)21 b(no)g(suc)n(h)g(previous)227 3730 y(call)26
-b(has)f(y)n(et)g(b)r(een)i(made,)f(or)e(if)j(the)f(call)f(failed)h(for)
-f(an)n(y)g(reason,)g(then)h(the)g(b)r(ounding)g(b)r(o)n(x)g(returned)f
-(b)n(y)g(this)227 3830 y(routine)i(is)h(unde\014ned.)0
-3972 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_BOUNDINGBOX)o(\()
-c(THIS,)j(LBND,)h(UBND,)f(STATUS)g(\))0 4115 y Fc(Argumen)m(ts:)259
-4244 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4344
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 4470 y Fc(LBND\()k(2)g(\))
-g(=)g(REAL)g(\(Returned\))427 4569 y Fk(A)26 b(t)n(w)n(o)f(elemen)n(t)g
-(arra)n(y)e(in)j(whic)n(h)f(is)g(returned)g(the)h(lo)n(w)n(er)e(limits)
-i(of)f(the)h(b)r(ounding)f(b)r(o)n(x)g(on)g(eac)n(h)g(of)g(the)427
-4669 y(t)n(w)n(o)i(axes)g(of)g(the)h(graphics)e(co)r(ordinate)h(system)
-g(\(the)h(base)f(F)-7 b(rame)28 b(of)f(the)h(Plot\).)259
-4795 y Fc(UBND\()k(2)g(\))g(=)g(REAL)g(\(Returned\))427
-4895 y Fk(A)h(t)n(w)n(o)f(elemen)n(t)g(arra)n(y)e(in)j(whic)n(h)f(is)h
-(returned)f(the)h(upp)r(er)f(limits)h(of)g(the)f(b)r(ounding)h(b)r(o)n
-(x)f(on)g(eac)n(h)g(of)427 4994 y(the)c(t)n(w)n(o)f(axes)g(of)g(the)h
-(graphics)e(co)r(ordinate)h(system)g(\(the)h(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot\).)259 5120 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5220
-y Fk(The)c(global)e(status.)0 5375 y Fc(Notes:)340 5650
-y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-eop end
-%%Page: 194 204
-TeXDict begin 194 203 bop 0 52 a FG(194)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(BO)l(X)924 b Fd(Create)38
-b(a)g(Bo)m(x)926 b FA(AST)p Fe(_)p FA(BO)l(X)0 671 y
-Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(Bo)n
-(x)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-801 y(The)35 b(Bo)n(x)f(class)g(implemen)n(ts)i(a)e(Region)g(whic)n(h)h
-(represen)n(ts)f(a)g(b)r(o)n(x)h(with)g(sides)g(parallel)f(to)h(the)g
-(axes)f(of)h(a)227 901 y(F)-7 b(rame)36 b(\(i.e.)64 b(an)36
-b(area)f(whic)n(h)i(encloses)e(a)h(giv)n(en)g(range)f(of)h(v)-5
-b(alues)37 b(on)f(eac)n(h)f(axis\).)63 b(A)37 b(Bo)n(x)f(is)g(similar)g
-(to)227 1001 y(an)h(In)n(terv)-5 b(al,)40 b(the)d(only)g(real)g
-(di\013erence)g(b)r(eing)g(that)h(the)g(In)n(terv)-5
-b(al)36 b(class)h(allo)n(ws)f(some)h(axis)f(limits)i(to)f(b)r(e)227
-1100 y(unsp)r(eci\014ed.)g(Note,)26 b(a)e(Bo)n(x)h(will)g(only)g(lo)r
-(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7 b(rame)25
-b(geometry)f(is)h(appro)n(ximately)e(\015at.)36 b(F)-7
-b(or)227 1200 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f(to)h
-(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)f
-(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-1299 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-1461 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_BOX\()d
-(FRAME,)h(FORM,)h(POINT1,)f(POINT2,)f(UNC,)i(OPTIONS,)f(STATUS)g(\))0
-1623 y Fc(Argumen)m(ts:)259 1771 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 1871 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-1970 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 2070 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 2209 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m
-(en\))427 2309 y Fk(Indicates)g(ho)n(w)g(the)g(b)r(o)n(x)g(is)g
-(describ)r(ed)f(b)n(y)h(the)h(remaining)e(parameters.)48
-b(A)33 b(v)-5 b(alue)32 b(of)g(zero)f(indicates)427 2408
-y(that)d(the)g(b)r(o)n(x)f(is)h(sp)r(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)
-g(p)r(osition)h(and)f(a)h(corner)e(p)r(osition.)36 b(A)28
-b(v)-5 b(alue)28 b(of)g(one)f(indicates)427 2508 y(that)h(the)g(b)r(o)n
-(x)f(is)h(sp)r(eci\014ed)g(b)n(y)f(a)g(t)n(w)n(o)g(opp)r(osite)g
-(corner)f(p)r(ositions.)259 2647 y Fc(POINT1\()32 b Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 2746
-y Fk(An)23 b(arra)n(y)d(with)j(one)f(elemen)n(t)h(for)f(eac)n(h)g(F)-7
-b(rame)22 b(axis)f(\(Naxes)i(attribute\).)35 b(If)23
-b(F)n(ORM)f(is)h(zero,)f(this)h(arra)n(y)427 2846 y(should)31
-b(con)n(tain)f(the)h(co)r(ordinates)e(at)i(the)g(cen)n(tre)f(of)h(the)g
-(b)r(o)n(x.)45 b(If)32 b(F)n(ORM)e(is)h(one,)g(it)g(should)f(con)n
-(tain)427 2946 y(the)e(co)r(ordinates)f(at)g(the)i(corner)d(of)i(the)g
-(b)r(o)n(x)f(whic)n(h)h(is)g(diagonally)e(opp)r(osite)h(the)h(corner)f
-(sp)r(eci\014ed)h(b)n(y)427 3045 y(POINT2.)259 3184 y
-Fc(POINT2\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))
-427 3284 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h
-(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h
-(co)r(ordinates)427 3383 y(at)h(an)n(y)f(corner)f(of)h(the)h(b)r(o)n
-(x.)259 3522 y Fc(UNC)k(=)g(INTEGER)f(\(Giv)m(en\))427
-3622 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 3722 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g
-(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h
-(on)f(the)h(b)r(oundary)f(of)427 3821 y(the)g(Bo)n(x)e(is)h(found)h(b)n
-(y)f(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-3921 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4020 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-4120 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4239 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4339 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4439 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4538 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 4638 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-4737 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 4857 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-4956 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-5056 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 5156 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 5255 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 5394 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 5494 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h
-(optional)g(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g
-(to)427 5593 y(b)r(e)f(used)f(for)g(initialising)g(the)h(new)f(Bo)n(x.)
-41 b(The)30 b(syn)n(tax)e(used)h(is)h(iden)n(tical)f(to)g(that)g(for)g
-(the)h(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)p eop
-end
-%%Page: 195 205
-TeXDict begin 195 204 bop 3643 52 a FG(195)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 622 y Fc(Returned)32
-b(V)-8 b(alue:)259 767 y(AST)p Ft(_)p Fc(BO)m(X)32 b(=)g(INTEGER)427
-867 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Bo)n(x.)0
-1037 y Fc(Notes:)340 1329 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1428 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-1599 y Fc(Status)33 b(Handling)n(:)227 1745 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1845 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 1945 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2153 3780 12 v 0 2283 a FA(AST)p
-Fe(_)p FA(CHANNEL)1441 2284 y Fd(Create)37 b(a)i(Channel)2765
-2283 y FA(AST)p Fe(_)p FA(CHANNEL)0 2469 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Channel)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 2598
-y(A)22 b(Channel)g(implemen)n(ts)g(lo)n(w-lev)n(el)e(input/output)i
-(for)f(the)i(AST)f(library)-7 b(.)33 b(W)-7 b(riting)22
-b(an)f(Ob)5 b(ject)22 b(to)f(a)h(Channel)227 2698 y(\(using)34
-b(AST)p Ft(_)p Fk(WRITE\))h(will)f(generate)f(a)h(textual)g(represen)n
-(tation)e(of)i(that)h(Ob)5 b(ject,)35 b(and)f(reading)f(from)h(a)227
-2797 y(Channel)28 b(\(using)f(AST)p Ft(_)p Fk(READ\))h(will)g(create)f
-(a)g(new)h(Ob)5 b(ject)27 b(from)h(its)f(textual)h(represen)n(tation.)
-227 2926 y(Normally)-7 b(,)22 b(when)h(y)n(ou)e(use)g(a)h(Channel,)h(y)
-n(ou)e(should)h(pro)n(vide)e Ft(")p Fk(source)p Ft(")g
-Fk(and)i Ft(")p Fk(sink)p Ft(")f Fk(routines)g(whic)n(h)h(connect)227
-3026 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 3126 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-3284 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_CHANNEL\()c
-(SOURCE,)h(SINK,)i(OPTIONS,)e(STATUS)h(\))0 3442 y Fc(Argumen)m(ts:)259
-3587 y(SOUR)m(CE)32 b(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-3687 y Fk(A)g(source)e(routine,)j(whic)n(h)e(is)h(a)f(subroutine)g
-(whic)n(h)g(tak)n(es)g(a)g(single)g(in)n(teger)g(error)e(status)j
-(argumen)n(t.)427 3787 y(This)25 b(routine)g(will)g(b)r(e)g(used)g(b)n
-(y)f(the)i(Channel)e(to)h(obtain)g(lines)f(of)h(input)h(text.)36
-b(On)25 b(eac)n(h)f(in)n(v)n(o)r(cation,)g(it)427 3886
-y(should)j(read)f(the)i(next)f(input)h(line)g(from)e(some)h(external)f
-(data)h(store,)f(and)h(then)h(return)f(the)g(resulting)427
-3986 y(text)32 b(to)f(the)g(AST)h(library)e(b)n(y)h(calling)f(AST)p
-Ft(_)p Fk(PUTLINE.)h(It)g(should)g(supply)g(a)g(negativ)n(e)f(line)i
-(length)427 4086 y(when)g(there)g(are)f(no)g(more)g(lines)h(to)g(read.)
-48 b(If)33 b(an)e(error)f(o)r(ccurs,)i(it)g(should)g(set)g(its)g(o)n
-(wn)f(error)f(status)427 4185 y(argumen)n(t)d(to)g(an)h(error)d(v)-5
-b(alue)28 b(b)r(efore)f(returning.)427 4304 y(If)g(the)g(n)n(ull)f
-(routine)g(AST)p Ft(_)p Fk(NULL)h(is)f(suppied)h(as)e(the)i(SOUR)n(CE)f
-(v)-5 b(alue,)26 b(the)h(Channel)f(will)g(read)g(from)427
-4403 y(standard)h(input)h(instead.)259 4541 y Fc(SINK)k(=)g(SUBR)m
-(OUTINE)g(\(Giv)m(en\))427 4640 y Fk(A)24 b(sink)f(routine,)h(whic)n(h)
-f(is)g(a)g(subroutine)g(whic)n(h)g(tak)n(es)f(a)h(single)g(in)n(teger)f
-(error)f(status)i(argumen)n(t.)35 b(This)427 4740 y(routine)d(will)h(b)
-r(e)f(used)h(b)n(y)f(the)g(Channel)g(to)h(deliv)n(er)e(lines)h(of)g
-(output)h(text.)51 b(On)33 b(eac)n(h)e(in)n(v)n(o)r(cation,)h(it)427
-4840 y(should)k(obtain)g(the)g(next)g(output)h(line)f(from)g(the)g(AST)
-h(library)d(b)n(y)i(calling)f(AST)p Ft(_)p Fk(GETLINE,)h(and)427
-4939 y(then)31 b(deliv)n(er)f(the)h(resulting)f(text)g(to)h(some)f
-(external)f(data)h(store.)45 b(If)31 b(an)f(error)e(o)r(ccurs,)i(it)h
-(should)g(set)427 5039 y(its)d(o)n(wn)f(error)f(status)h(argumen)n(t)g
-(to)g(an)g(error)f(v)-5 b(alue)27 b(b)r(efore)h(returning.)427
-5157 y(If)41 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(suppied)g(as)g(the)h(SINK)f(v)-5 b(alue,)43
-b(the)e(Channel)f(will)h(write)f(to)427 5257 y(standard)27
-b(output)h(instead.)259 5394 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5494 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 5593 y(used)27 b(for)f(initialising)g(the)h(new)g(Channel.)37
-b(The)26 b(syn)n(tax)g(used)h(is)f(iden)n(tical)g(to)h(that)g(for)f
-(the)h(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)p eop
-end
-%%Page: 196 206
-TeXDict begin 196 205 bop 0 52 a FG(196)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 609 y Fc(Returned)32
-b(V)-8 b(alue:)259 741 y(AST)p Ft(_)p Fc(CHANNEL)32 b(=)g(INTEGER)427
-841 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Channel.)0
-999 y Fc(Notes:)340 1278 y Fj(\017)45 b Fk(The)35 b(names)f(of)g(the)h
-(routines)f(supplied)h(for)f(the)h(SOUR)n(CE)f(and)g(SINK)h(argumen)n
-(ts)e(should)i(app)r(ear)427 1377 y(in)25 b(EXTERNAL)g(statemen)n(ts)g
-(in)g(the)g(F)-7 b(ortran)24 b(routine)g(whic)n(h)h(in)n(v)n(ok)n(es)e
-(AST)p Ft(_)p Fk(CHANNEL.)j(Ho)n(w)n(ev)n(er,)427 1477
-y(this)36 b(is)f(not)g(generally)f(necessary)f(for)i(the)g(n)n(ull)h
-(routine)f(AST)p Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p
-Ft(_)p Fk(P)-7 b(AR)427 1576 y(include)28 b(\014le)g(has)f(b)r(een)h
-(used\).)340 1705 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1805 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)340
-1934 y Fj(\017)45 b Fk(Note)36 b(that)f(the)h(n)n(ull)f(routine)g(AST)p
-Ft(_)p Fk(NULL)h(\(one)f(underscore\))f(is)h(di\013eren)n(t)h(to)f(AST)
-p Ft(__)p Fk(NULL)g(\(t)n(w)n(o)427 2034 y(underscores\),)26
-b(whic)n(h)i(is)f(the)h(n)n(ull)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)p
-0 2225 3780 12 v 0 2356 a FA(AST)p Fe(_)p FA(CIR)l(CLE)1503
-2357 y Fd(Create)37 b(a)i(Circle)2938 2356 y FA(AST)p
-Fe(_)p FA(CIR)l(CLE)0 2524 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(Circle)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 2647 y(A)g(Circle)f(is)h(a)f
-(Region)g(whic)n(h)g(represen)n(ts)g(a)g(circle)g(or)f(sphere)h(within)
-i(the)f(supplied)g(F)-7 b(rame.)0 2793 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_CIRCLE\()c(FRAME,)i(FORM,)h(CENTRE,)e(POINT,)h
-(UNC,)h(OPTIONS,)f(STATUS)g(\))0 2938 y Fc(Argumen)m(ts:)259
-3071 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 3170
-y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28 b(in)h(whic)n(h)g
-(the)g(region)e(is)i(de\014ned.)41 b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n
-(en)g(of)h(the)g(supplied)427 3270 y(F)-7 b(rame.)71
-b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n(t)f(c)n(hanges)g(made)h
-(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g(supplied)427
-3369 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g(e\013ect)h(the)g
-(Region.)259 3498 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m(en\))427
-3598 y Fk(Indicates)c(ho)n(w)g(the)h(circle)f(is)g(describ)r(ed)h(b)n
-(y)f(the)h(remaining)e(parameters.)38 b(A)29 b(v)-5 b(alue)28
-b(of)g(zero)g(indicates)427 3698 y(that)h(the)f(circle)f(is)h(sp)r
-(eci\014ed)h(b)n(y)e(a)h(cen)n(tre)f(p)r(osition)h(and)g(a)g(p)r
-(osition)g(on)f(the)i(circumference.)37 b(A)29 b(v)-5
-b(alue)427 3797 y(of)28 b(one)f(indicates)g(that)h(the)g(circle)f(is)h
-(sp)r(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)g(p)r(osition)h(and)f(a)g
-(scalar)f(radius.)259 3926 y Fc(CENTRE\()31 b Fj(\003)h
-Fc(\))f(=)i(DOUBLE)f(PRECISION)f(\(Giv)m(en\))427 4026
-y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)n(h)h(F)-7
-b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e(the)h(co)r
-(ordinates)427 4125 y(at)h(the)g(cen)n(tre)f(of)g(the)h(circle)f(or)g
-(sphere.)259 4254 y Fc(POINT\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 4354 y Fk(If)k(F)n(ORM)f(is)g(zero,)h
-(then)g(this)f(arra)n(y)e(should)i(ha)n(v)n(e)f(one)h(elemen)n(t)g(for)
-g(eac)n(h)f(F)-7 b(rame)34 b(axis)f(\(Naxes)h(at-)427
-4454 y(tribute\),)e(and)e(should)g(b)r(e)h(supplied)f(holding)g(the)h
-(co)r(ordinates)e(at)h(a)g(p)r(oin)n(t)g(on)g(the)h(circumference)f(of)
-427 4553 y(the)k(circle)e(or)h(sphere.)53 b(If)33 b(F)n(ORM)g(is)g
-(one,)i(then)e(this)h(arra)n(y)d(should)i(ha)n(v)n(e)f(one)h(elemen)n
-(t)g(only)g(whic)n(h)427 4653 y(should)h(b)r(e)g(supplied)g(holding)f
-(the)h(scalar)e(radius)h(of)h(the)g(circle)f(or)g(sphere,)i(as)e(a)g
-(geo)r(desic)g(distance)427 4752 y(within)c(the)f(F)-7
-b(rame.)259 4881 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-4981 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 5081 y(the)f(b)r(oundary)f(of)g(the)h(Circle)f(b)r(eing)g
-(created.)41 b(The)30 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g
-(on)g(the)h(b)r(oundary)f(of)427 5180 y(the)g(Circle)e(is)h(found)g(b)n
-(y)f(shifting)i(the)f(supplied)g Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)i(so)f(that)h(it)g(is)g(cen)n(tred)f(at)h(the)427
-5280 y(b)r(oundary)i(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 5379 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-5479 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 5593 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-5693 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)p eop end
-%%Page: 197 207
-TeXDict begin 197 206 bop 3643 52 a FG(197)427 351 y
-Fk(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 451 y(uncertain)n(t)n(y)c(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)g(on)g(the)h(created)e
-(Circle.)45 b(Al-)427 551 y(ternativ)n(ely)-7 b(,)34
-b(a)f(n)n(ull)g(Ob)5 b(ject)33 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)i(supplied,)h(in)e(whic)n(h)g(case)f
-(a)h(default)427 650 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5
-b(alen)n(t)27 b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h
-(the)g(Circle)f(b)r(eing)h(created.)427 765 y(The)h(uncertain)n(t)n(y)f
-(Region)g(has)h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-865 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-964 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 1064 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 1164 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 1294 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 1393 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h
-(optional)g(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g
-(to)427 1493 y(b)r(e)26 b(used)f(for)f(initialising)h(the)g(new)g
-(Circle.)36 b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g
-(that)g(for)g(the)g(AST)p Ft(_)p Fk(SET)427 1593 y(routine.)259
-1723 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1822 y Fk(The)c(global)e(status.)0 1982
-y Fc(Returned)32 b(V)-8 b(alue:)259 2115 y(AST)p Ft(_)p
-Fc(CIR)m(CLE)32 b(=)g(INTEGER)427 2215 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(Circle.)0 2374 y Fc(Notes:)340 2654 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2754
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2948 3780 12 v 0 3078
-a FA(AST)p Fe(_)p FA(CIR)l(CLEP)-11 b(ARS)1586 3079 y
-Fd(Returns)39 b(the)1643 3179 y(geometric)1459 3294 y(parameters)d(of)i
-(an)1740 3408 y(Circle)2581 3078 y FA(AST)p Fe(_)p FA(CIR)l(CLEP)-11
-b(ARS)0 3568 y Fc(Description:)44 b Fk(This)28 b(routine)f(returns)g
-(the)h(geometric)e(parameters)g(describing)h(the)h(supplied)g(Circle.)0
-3715 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_CIRCLEPARS\()37
-b(THIS,)42 b(CENTRE,)e(RADIUS,)h(P1,)h(STATUS)f(\))0
-3862 y Fc(Argumen)m(ts:)259 3996 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4095 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-4226 y Fc(CENTRE\()j Fj(\003)h Fc(\))f(=)i(DOUBLE)f(PRECISION)f
-(\(Returned\))427 4325 y Fk(An)j(arra)n(y)c(in)k(whic)n(h)f(to)g
-(return)f(the)i(co)r(ordinates)d(of)i(the)g(Circle)g(cen)n(tre.)52
-b(The)34 b(length)f(of)g(this)g(arra)n(y)427 4425 y(should)28
-b(b)r(e)g(no)f(less)g(than)h(the)g(n)n(um)n(b)r(er)f(of)h(axes)e(in)i
-(the)g(asso)r(ciated)e(co)r(ordinate)h(system.)259 4555
-y Fc(RADIUS)33 b(=)f(DOUBLE)g(PRECISION)f(\(Returned\))427
-4655 y Fk(Returned)22 b(holding)f(the)h(radius)f(of)g(the)h(Circle,)g
-(as)f(an)g(geo)r(desic)g(distance)g(in)h(the)g(asso)r(ciated)e(co)r
-(ordinate)427 4754 y(system.)259 4884 y Fc(P1\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427
-4984 y Fk(An)23 b(arra)n(y)c(in)k(whic)n(h)f(to)g(return)f(the)i(co)r
-(ordinates)d(of)i(a)g(p)r(oin)n(t)g(on)g(the)g(circumference)g(of)g
-(the)g(Circle.)35 b(The)427 5084 y(length)c(of)g(this)f(arra)n(y)f
-(should)h(b)r(e)h(no)f(less)g(than)h(the)g(n)n(um)n(b)r(er)f(of)h(axes)
-f(in)h(the)g(asso)r(ciated)e(co)r(ordinate)427 5183 y(system.)259
-5314 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5413 y Fk(The)c(global)e(status.)0 5572
-y Fc(Notes:)p eop end
-%%Page: 198 208
-TeXDict begin 198 207 bop 0 52 a FG(198)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)24 b(the)g(co)r(ordinate)e(system)h(represen)n(ted)f(b)n(y)h
-(the)g(Circle)g(has)g(b)r(een)g(c)n(hanged)f(since)h(it)h(w)n(as)e
-(\014rst)h(created,)427 451 y(the)c(returned)f(parameters)f(refer)h(to)
-h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g(system,)i(rather)d(than)
-i(the)g(original)427 551 y(co)r(ordinate)27 b(system.)37
-b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g(transformation)f(from)
-g(original)f(to)i(new)g(co)r(ordinate)427 650 y(system)38
-b(is)h(non-linear,)h(the)f(shap)r(e)f(represen)n(ted)f(b)n(y)h(the)h
-(supplied)g(Circle)f(ob)5 b(ject)38 b(ma)n(y)g(not)g(b)r(e)h(an)427
-750 y(accurate)27 b(circle.)p 0 951 3780 12 v 0 1082
-a FA(AST)p Fe(_)p FA(CLEAR)968 1083 y Fd(Clear)37 b(attribute)f(v)-7
-b(alues)39 b(for)e(an)i(Ob)7 b(ject)2980 1082 y FA(AST)p
-Fe(_)p FA(CLEAR)0 1273 y Fc(Description:)44 b Fk(This)31
-b(routine)g(clears)e(the)i(v)-5 b(alues)31 b(of)f(a)h(sp)r(eci\014ed)g
-(set)g(of)f(attributes)h(for)f(an)h(Ob)5 b(ject.)46 b(Clearing)30
-b(an)227 1373 y(attribute)21 b(cancels)e(an)n(y)g(v)-5
-b(alue)20 b(that)h(has)e(previously)g(b)r(een)i(explicitly)f(set)g(for)
-g(it,)i(so)d(that)i(the)f(standard)f(default)227 1473
-y(attribute)35 b(v)-5 b(alue)34 b(will)h(subsequen)n(tly)f(b)r(e)g
-(used)h(instead.)57 b(This)34 b(also)g(causes)f(the)i(AST)p
-Ft(_)p Fk(TEST)f(function)h(to)227 1572 y(return)27 b(the)h(v)-5
-b(alue)28 b(.F)-9 b(ALSE.)27 b(for)g(the)h(attribute,)g(indicating)g
-(that)g(no)f(v)-5 b(alue)27 b(has)g(b)r(een)h(set.)0
-1724 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_CLEAR\()d(THIS,)j
-(ATTRIB,)e(STATUS)h(\))0 1875 y Fc(Argumen)m(ts:)259
-2013 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2113
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2247
-y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2347 y Fk(A)j(c)n(haracter)d(string)
-h(con)n(taining)h(a)f(comma-separated)f(list)j(of)f(the)h(names)e(of)h
-(the)h(attributes)f(to)g(b)r(e)427 2446 y(cleared.)259
-2580 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2680 y Fk(The)c(global)e(status.)0 2843
-y Fc(Class)31 b(Applicabilit)m(y:)259 2982 y(Ob)5 b(ject)427
-3081 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3245 y Fc(Notes:)340 3530 y Fj(\017)45 b Fk(A)n(ttribute)28
-b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h
-(surrounded)e(b)n(y)i(white)g(space.)340 3664 y Fj(\017)45
-b Fk(It)28 b(do)r(es)f(no)h(harm)f(to)g(clear)g(an)g(attribute)h(whose)
-f(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set.)340 3797
-y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(an)g(attempt)g
-(is)f(made)h(to)f(clear)g(the)h(v)-5 b(alue)27 b(of)h(a)f(read-only)f
-(attribute.)p 0 3999 V 0 4129 a FA(AST)p Fe(_)p FA(CLIP)965
-4130 y Fd(Set)39 b(up)g(or)f(remo)m(v)m(e)f(clipping)g(for)h(a)h(Plot)
-3128 4129 y FA(AST)p Fe(_)p FA(CLIP)0 4321 y Fc(Description:)44
-b Fk(This)28 b(routine)g(de\014nes)g(regions)e(of)i(a)g(Plot)f(whic)n
-(h)h(are)f(to)h(b)r(e)g(clipp)r(ed.)39 b(An)n(y)28 b(subsequen)n(t)f
-(graphical)227 4421 y(output)f(created)f(using)g(the)g(Plot)g(will)g
-(then)h(b)r(e)g(visible)f(only)g(within)h(the)g(unclipp)r(ed)g(regions)
-e(of)h(the)h(plotting)227 4520 y(area.)36 b(See)27 b(also)g(the)h(Clip)
-g(attribute.)0 4672 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_CLIP\()e(THIS,)h(IFRAME,)g(LBND,)g(UBND,)h(STATUS)f(\))0
-4823 y Fc(Argumen)m(ts:)259 4961 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5061 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-5195 y Fc(IFRAME)j(=)h(INTEGER)g(\(Giv)m(en\))427 5295
-y Fk(The)e(index)g(of)f(the)i(F)-7 b(rame)29 b(within)h(the)g(Plot)f
-(to)h(whic)n(h)g(the)g(clipping)f(limits)i(supplied)f(in)g(LBND)g(and)
-427 5394 y(UBND)i(\(b)r(elo)n(w\))g(refer.)47 b(Clipping)31
-b(ma)n(y)f(b)r(e)i(applied)f(to)g(an)n(y)g(of)g(the)g(co)r(ordinate)f
-(systems)h(asso)r(ciated)427 5494 y(with)24 b(a)g(Plot)f(\(as)g
-(de\014ned)h(b)n(y)f(the)h(F)-7 b(rames)23 b(it)h(con)n(tains\),)g(so)f
-(this)h(index)f(ma)n(y)g(tak)n(e)g(an)n(y)g(v)-5 b(alue)23
-b(from)h(1)f(to)427 5593 y(the)31 b(n)n(um)n(b)r(er)e(of)h(F)-7
-b(rames)30 b(in)g(the)g(Plot)g(\(Nframe)g(attribute\).)45
-b(In)30 b(addition,)g(the)h(v)-5 b(alues)29 b(AST)p Ft(__)p
-Fk(BASE)427 5693 y(and)f(AST)p Ft(__)p Fk(CURRENT)f(ma)n(y)g(b)r(e)h
-(used)g(to)f(sp)r(ecify)h(the)g(base)f(and)g(curren)n(t)g(F)-7
-b(rames)27 b(resp)r(ectiv)n(ely)-7 b(.)p eop end
-%%Page: 199 209
-TeXDict begin 199 208 bop 3643 52 a FG(199)427 351 y
-Fk(F)-7 b(or)32 b(example,)i(a)f(v)-5 b(alue)32 b(of)h(AST)p
-Ft(__)p Fk(CURRENT)g(causes)e(clipping)i(to)g(b)r(e)g(p)r(erformed)f
-(in)i(ph)n(ysical)d(co-)427 451 y(ordinates,)g(while)g(a)g(v)-5
-b(alue)31 b(of)g(AST)p Ft(__)p Fk(BASE)f(w)n(ould)h(clip)g(in)g
-(graphical)f(co)r(ordinates.)45 b(Clipping)31 b(ma)n(y)427
-551 y(also)24 b(b)r(e)h(remo)n(v)n(ed)e(completely)h(b)n(y)g(giving)g
-(a)g(v)-5 b(alue)25 b(of)f(AST)p Ft(__)p Fk(NOFRAME.)g(In)h(this)g
-(case)f(an)n(y)g(clipping)427 650 y(b)r(ounds)k(supplied)g(\(b)r(elo)n
-(w\))g(are)e(ignored.)259 780 y Fc(LBND\()32 b Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 880
-y Fk(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)g(for)f(eac)n(h)g(axis)
-g(of)h(the)g(clipping)g(F)-7 b(rame)41 b(\(iden)n(ti\014ed)i(b)n(y)e
-(the)i(index)427 979 y(IFRAME\).)c(This)g(should)f(con)n(tain)g(the)h
-(lo)n(w)n(er)e(b)r(ound,)k(on)d(eac)n(h)g(axis,)i(of)f(the)g(region)e
-(whic)n(h)h(is)h(to)427 1079 y(remain)27 b(visible)h(\(unclipp)r(ed\).)
-259 1209 y Fc(UBND\()k Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en\))427 1309 y Fk(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)
-g(for)f(eac)n(h)g(axis)g(of)h(the)g(clipping)g(F)-7 b(rame)41
-b(\(iden)n(ti\014ed)i(b)n(y)e(the)i(index)427 1408 y(IFRAME\).)38
-b(This)f(should)g(con)n(tain)f(the)i(upp)r(er)f(b)r(ound,)j(on)d(eac)n
-(h)f(axis,)j(of)e(the)h(region)e(whic)n(h)h(is)g(to)427
-1508 y(remain)27 b(visible)h(\(unclipp)r(ed\).)259 1638
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1738 y Fk(The)c(global)e(status.)0 1897 y Fc(Notes:)340
-2176 y Fj(\017)45 b Fk(Only)22 b(one)g(clipping)g(F)-7
-b(rame)21 b(ma)n(y)g(b)r(e)i(activ)n(e)e(at)h(a)g(time.)35
-b(This)22 b(routine)g(will)g(deactiv)-5 b(ate)22 b(an)n(y)f
-(previously-)427 2276 y(established)28 b(clipping)f(F)-7
-b(rame)27 b(b)r(efore)h(setting)f(up)h(new)g(clipping)f(limits.)340
-2406 y Fj(\017)45 b Fk(The)32 b(clipping)f(pro)r(duced)g(b)n(y)g(this)h
-(routine)f(is)g(in)h(addition)f(to)h(that)f(sp)r(eci\014ed)h(b)n(y)f
-(the)h(Clip)f(attribute)427 2506 y(whic)n(h)40 b(o)r(ccurs)f(at)g(the)h
-(edges)f(of)h(the)g(plotting)g(area)e(established)h(when)h(the)g(Plot)f
-(is)h(created)f(\(see)427 2605 y(AST)p Ft(_)p Fk(PLOT\).)27
-b(The)h(underlying)f(graphics)f(system)h(ma)n(y)g(also)g(imp)r(ose)g
-(further)h(clipping.)340 2735 y Fj(\017)45 b Fk(When)25
-b(testing)f(a)f(graphical)g(p)r(osition)h(for)f(clipping,)i(it)f(is)g
-(\014rst)g(transformed)f(in)n(to)h(the)g(clipping)g(F)-7
-b(rame.)427 2835 y(The)33 b(resulting)f(co)r(ordinate)g(on)g(eac)n(h)g
-(axis)g(is)h(then)g(c)n(hec)n(k)n(ed)f(against)f(the)j(clipping)e
-(limits)i(\(giv)n(en)e(b)n(y)427 2935 y(LBND)21 b(and)g(UBND\).)h(By)e
-(default,)j(a)d(p)r(osition)g(is)h(clipp)r(ed)g(if)g(an)n(y)f(co)r
-(ordinate)f(lies)i(outside)f(these)h(limits.)427 3034
-y(Ho)n(w)n(ev)n(er,)h(if)i(a)e(non-zero)g(v)-5 b(alue)22
-b(is)h(assigned)f(to)h(the)g(Plot's)f(ClipOp)h(attribute,)h(then)g(a)e
-(p)r(osition)h(is)g(only)427 3134 y(clipp)r(ed)29 b(if)f(the)g(co)r
-(ordinates)e(on)h(all)g(axes)g(lie)h(outside)f(their)h(clipping)f
-(limits.)340 3264 y Fj(\017)45 b Fk(If)28 b(the)f(lo)n(w)n(er)f
-(clipping)h(limit)h(exceeds)e(the)i(upp)r(er)f(limit)h(for)e(an)n(y)h
-(axis,)f(then)i(the)f(sense)g(of)g(clipping)g(for)427
-3364 y(that)k(axis)f(is)g(rev)n(ersed)f(\(so)h(that)h(co)r(ordinate)e
-(v)-5 b(alues)30 b(lying)h(b)r(et)n(w)n(een)f(the)h(limits)g(are)f
-(clipp)r(ed)h(instead)427 3463 y(of)k(those)g(lying)g(outside)g(the)g
-(limits\).)61 b(T)-7 b(o)34 b(pro)r(duce)h(a)g Ft(")p
-Fk(hole)p Ft(")f Fk(in)h(a)g(co)r(ordinate)f(space)g(\(that)i(is,)h(an)
-427 3563 y(in)n(ternal)24 b(region)g(where)g(nothing)h(is)f(plotted\),)
-i(y)n(ou)e(should)h(supply)g(all)f(the)h(b)r(ounds)g(in)g(rev)n(ersed)e
-(order,)427 3662 y(and)28 b(set)f(the)h(ClipOp)g(attribute)g(for)f(the)
-h(Plot)f(to)g(a)g(non-zero)f(v)-5 b(alue.)340 3792 y
-Fj(\017)45 b Fk(Either)25 b(clipping)h(limit)g(ma)n(y)f(b)r(e)h(set)f
-(to)h(the)g(v)-5 b(alue)25 b(AST)p Ft(__)p Fk(BAD,)h(whic)n(h)f(is)h
-(equiv)-5 b(alen)n(t)25 b(to)g(setting)h(it)g(to)427
-3892 y(in\014nit)n(y)i(\(or)f(min)n(us)h(in\014nit)n(y)g(for)f(a)g(lo)n
-(w)n(er)f(b)r(ound\))i(so)f(that)h(it)g(is)g(not)f(used.)340
-4022 y Fj(\017)45 b Fk(If)29 b(a)e(graphical)f(p)r(osition)i(results)f
-(in)h(an)n(y)f(bad)h(co)r(ordinate)f(v)-5 b(alues)27
-b(\(AST)p Ft(__)p Fk(BAD\))i(when)f(transformed)427 4122
-y(in)n(to)i(the)h(clipping)f(F)-7 b(rame,)31 b(then)g(it)g(is)f
-(treated)g(\(for)g(the)h(purp)r(oses)e(of)h(pro)r(ducing)g(graphical)f
-(output\))427 4221 y(as)e(if)h(it)g(w)n(ere)f(clipp)r(ed.)340
-4351 y Fj(\017)45 b Fk(When)23 b(a)f(Plot)g(is)g(used)g(as)g(a)f
-(Mapping)h(to)g(transform)g(p)r(oin)n(ts)g(\(e.g.)35
-b(using)22 b(AST)p Ft(_)p Fk(TRAN2\),)h(an)n(y)f(clipp)r(ed)427
-4451 y(output)28 b(p)r(oin)n(ts)g(are)f(assigned)f(co)r(ordinate)g(v)-5
-b(alues)28 b(of)f(AST)p Ft(__)p Fk(BAD.)340 4581 y Fj(\017)45
-b Fk(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-0 4775 3780 12 v 0 4905 a FA(AST)p Fe(_)p FA(CLONE)968
-4913 y Fd(Clone)38 b(\(duplicate\))e(an)i(Ob)7 b(ject)38
-b(p)s(oin)m(ter)2976 4905 y FA(AST)p Fe(_)p FA(CLONE)0
-5103 y Fc(Description:)44 b Fk(This)34 b(function)g(returns)f(a)g
-(duplicate)h(p)r(oin)n(ter)f(to)h(an)f(existing)g(Ob)5
-b(ject.)55 b(It)34 b(also)e(incremen)n(ts)h(the)227 5202
-y(Ob)5 b(ject's)28 b(RefCoun)n(t)f(attribute)h(to)g(k)n(eep)f(trac)n(k)
-f(of)i(ho)n(w)f(man)n(y)g(p)r(oin)n(ters)f(ha)n(v)n(e)h(b)r(een)h
-(issued.)227 5326 y(Note)40 b(that)g(this)g(function)g(is)f(NOT)h
-(equiv)-5 b(alen)n(t)39 b(to)g(an)g(assignmen)n(t)g(statemen)n(t,)k(as)
-38 b(in)i(general)e(the)i(t)n(w)n(o)227 5425 y(p)r(oin)n(ters)27
-b(will)h(not)g(ha)n(v)n(e)e(the)i(same)f(v)-5 b(alue.)0
-5572 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_CLONE\()c
-(THIS,)j(STATUS)f(\))0 5718 y Fc(Argumen)m(ts:)p eop
-end
-%%Page: 200 210
-TeXDict begin 200 209 bop 0 52 a FG(200)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(THIS)h(=)g(INTEGER)g
-(\(Giv)m(en\))427 451 y Fk(Original)26 b(p)r(oin)n(ter)i(to)f(the)h(Ob)
-5 b(ject.)259 588 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 687 y Fk(The)c(global)e(status.)0
-858 y Fc(Class)31 b(Applicabilit)m(y:)259 1002 y(Ob)5
-b(ject)427 1102 y Fk(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 1272 y Fc(Returned)32 b(V)-8 b(alue:)259 1416
-y(AST)p Ft(_)p Fc(CLONE)32 b(=)g(INTEGER)427 1516 y Fk(A)c(duplicate)g
-(p)r(oin)n(ter)f(to)h(the)g(same)f(Ob)5 b(ject.)0 1686
-y Fc(Notes:)340 1977 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2076 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2284 3780 12 v 0 2415 a FA(AST)p Fe(_)p FA(CMPFRAME)1369
-2414 y Fd(Create)37 b(a)h(CmpF)-10 b(rame)2629 2415 y
-FA(AST)p Fe(_)p FA(CMPFRAME)0 2611 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(CmpF)-7
-b(rame)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-2740 y(A)40 b(CmpF)-7 b(rame)38 b(is)h(a)f(comp)r(ound)h(F)-7
-b(rame)39 b(whic)n(h)g(allo)n(ws)e(t)n(w)n(o)h(comp)r(onen)n(t)h(F)-7
-b(rames)38 b(\(of)h(an)n(y)f(class\))g(to)h(b)r(e)227
-2840 y(merged)34 b(together)h(to)f(form)h(a)g(more)f(complex)g(F)-7
-b(rame.)59 b(The)35 b(axes)f(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)h
-(F)-7 b(rames)34 b(then)227 2939 y(app)r(ear)i(together)g(in)h(the)g
-(resulting)f(CmpF)-7 b(rame)36 b(\(those)h(of)f(the)h(\014rst)g(F)-7
-b(rame,)38 b(follo)n(w)n(ed)e(b)n(y)g(those)h(of)f(the)227
-3039 y(second)27 b(F)-7 b(rame\).)227 3167 y(Since)24
-b(a)f(CmpF)-7 b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24
-b(it)g(can)f(b)r(e)g(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f
-(further)g(CmpF)-7 b(rames.)227 3267 y(F)g(rames)27 b(of)h(arbitrary)d
-(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h
-(F)-7 b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 3396
-y(Also)39 b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)
--7 b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 3495 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 3595 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 3695
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 3794 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)0
-3952 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_CMPFRAME\()
-38 b(FRAME1,)j(FRAME2,)g(OPTIONS,)f(STATUS)h(\))0 4109
-y Fc(Argumen)m(ts:)259 4254 y(FRAME1)31 b(=)h(INTEGER)f(\(Giv)m(en\))
-427 4354 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(F)-7 b(rame.)259 4491 y Fc(FRAME2)31 b(=)h(INTEGER)f(\(Giv)m(en\))427
-4590 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g(F)-7
-b(rame.)259 4727 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4827 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-4926 y(b)r(e)38 b(used)g(for)f(initialising)h(the)g(new)g(CmpF)-7
-b(rame.)67 b(The)38 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)
-g(for)f(the)427 5026 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-5163 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5263 y Fk(The)c(global)e(status.)0 5433
-y Fc(Returned)32 b(V)-8 b(alue:)259 5577 y(AST)p Ft(_)p
-Fc(CMPFRAME)31 b(=)h(INTEGER)427 5677 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(CmpF)-7 b(rame.)p eop end
-%%Page: 201 211
-TeXDict begin 201 210 bop 3643 52 a FG(201)0 351 y Fc(Notes:)340
-631 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 731 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-890 y Fc(Status)33 b(Handling)n(:)227 1036 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1136 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 1235 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 1429 3780 12 v 0 1560 a FA(AST)p
-Fe(_)p FA(CMPMAP)441 b Fd(Create)38 b(a)g(CmpMap)444
-b FA(AST)p Fe(_)p FA(CMPMAP)0 1743 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(CmpMap)h(and)f
-(optionally)g(initialises)h(its)f(attributes.)227 1866
-y(A)k(CmpMap)g(is)g(a)f(comp)r(ound)h(Mapping)f(whic)n(h)h(allo)n(ws)e
-(t)n(w)n(o)h(comp)r(onen)n(t)h(Mappings)f(\(of)h(an)n(y)f(class\))g(to)
-g(b)r(e)227 1966 y(connected)h(together)e(to)h(form)g(a)g(more)g
-(complex)g(Mapping.)45 b(This)30 b(connection)g(ma)n(y)g(either)g(b)r
-(e)h Ft(")p Fk(in)f(series)p Ft(")227 2066 y Fk(\(where)21
-b(the)g(\014rst)g(Mapping)f(is)h(used)g(to)g(transform)f(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)i(and)e(the)i(second)e(mapping)
-227 2165 y(is)g(then)g(applied)f(to)g(the)h(result\),)h(or)e
-Ft(")p Fk(in)g(parallel)p Ft(")f Fk(\(where)h(one)g(Mapping)g
-(transforms)f(the)i(earlier)e(co)r(ordinates)227 2265
-y(for)27 b(eac)n(h)g(p)r(oin)n(t)h(and)f(the)h(second)f(Mapping)h(sim)n
-(ultaneously)e(transforms)g(the)i(later)f(co)r(ordinates\).)227
-2388 y(Since)f(a)f(CmpMap)g(is)h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r
-(e)h(used)f(as)g(a)g(comp)r(onen)n(t)g(in)h(forming)e(further)i
-(CmpMaps.)227 2488 y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n
-(y)g(b)r(e)h(built)h(from)e(simple)h(individual)f(Mappings)g(in)h(this)
-g(w)n(a)n(y)-7 b(.)0 2635 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_CMPMAP\()c(MAP1,)j(MAP2,)f(SERIES,)g(OPTIONS,)
-f(STATUS)h(\))0 2781 y Fc(Argumen)m(ts:)259 2915 y(MAP1)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 3015 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g(Mapping.)259
-3145 y Fc(MAP2)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3245
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g(Mapping.)
-259 3375 y Fc(SERIES)k(=)h(LOGICAL)h(\(Giv)m(en\))427
-3474 y Fk(If)25 b(a)f(.TR)n(UE.)h(v)-5 b(alue)24 b(is)h(giv)n(en)f(for)
-g(this)h(argumen)n(t,)f(the)h(t)n(w)n(o)f(comp)r(onen)n(t)g(Mappings)g
-(will)h(b)r(e)g(connected)427 3574 y(in)j(series.)36
-b(A)28 b(.F)-9 b(ALSE.)27 b(v)-5 b(alue)28 b(requests)f(that)h(they)f
-(are)g(connected)g(in)h(parallel.)259 3704 y Fc(OPTIONS)k(=)g(CHARA)m
-(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3804 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3903 y(used)j(for)g(initialising)f(the)h(new)g(CmpMap.)36
-b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)g(for)g
-(the)g(AST)p Ft(_)p Fk(SET)427 4003 y(routine.)259 4133
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4233 y Fk(The)c(global)e(status.)0 4392 y Fc(Returned)32
-b(V)-8 b(alue:)259 4526 y(AST)p Ft(_)p Fc(CMPMAP)32 b(=)g(INTEGER)427
-4626 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpMap.)0
-4785 y Fc(Notes:)340 5065 y Fj(\017)45 b Fk(If)37 b(the)g(comp)r(onen)n
-(t)g(Mappings)f(are)g(connected)g(in)h(series,)h(then)f(using)g(the)g
-(resulting)f(CmpMap)h(to)427 5164 y(transform)g(co)r(ordinates)g(will)i
-(cause)e(the)i(\014rst)f(Mapping)g(to)g(b)r(e)g(applied,)j(follo)n(w)n
-(ed)d(b)n(y)g(the)g(second)427 5264 y(Mapping.)e(If)26
-b(the)h(in)n(v)n(erse)d(CmpMap)i(transformation)e(is)i(requested,)f
-(the)i(t)n(w)n(o)e(comp)r(onen)n(t)g(Mappings)427 5364
-y(will)j(b)r(e)g(applied)g(in)g(b)r(oth)g(the)g(rev)n(erse)d(order)h
-(and)i(the)g(rev)n(erse)e(direction.)340 5494 y Fj(\017)45
-b Fk(When)27 b(connecting)f(t)n(w)n(o)g(comp)r(onen)n(t)g(Mappings)f
-(in)i(series,)e(the)i(n)n(um)n(b)r(er)f(of)h(output)f(co)r(ordinates)f
-(gen-)427 5593 y(erated)h(b)n(y)g(the)g(\014rst)g(Mapping)g(\(its)h
-(Nout)f(attribute\))h(m)n(ust)f(equal)f(the)i(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinates)427 5693 y(accepted)h(b)n(y)f(the)h(second)f
-(Mapping)g(\(its)h(Nin)g(attribute\).)p eop end
-%%Page: 202 212
-TeXDict begin 202 211 bop 0 52 a FG(202)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)19 b(the)g(comp)r(onen)n(t)g(Mappings)f(of)h(a)f(CmpMap)h(are)e
-(connected)i(in)g(parallel,)g(then)h(the)f(\014rst)f(Mapping)g(will)427
-451 y(b)r(e)28 b(used)f(to)g(transform)g(the)g(earlier)f(input)i(co)r
-(ordinates)e(for)h(eac)n(h)f(p)r(oin)n(t)i(\(and)f(to)g(pro)r(duce)g
-(the)h(earlier)427 551 y(output)34 b(co)r(ordinates\))e(and)g(the)i
-(second)e(Mapping)h(will)g(b)r(e)h(used)e(sim)n(ultaneously)h(to)f
-(transform)g(the)427 650 y(remaining)f(input)i(co)r(ordinates)e(\(to)h
-(pro)r(duce)g(the)h(remaining)e(output)h(co)r(ordinates)f(for)h(eac)n
-(h)f(p)r(oin)n(t\).)427 750 y(If)37 b(the)g(in)n(v)n(erse)e
-(transformation)f(is)j(requested,)g(eac)n(h)f(Mapping)g(will)h(still)f
-(b)r(e)h(applied)f(to)g(the)h(same)427 849 y(co)r(ordinates,)27
-b(but)h(in)g(the)g(rev)n(erse)d(direction.)340 971 y
-Fj(\017)45 b Fk(When)27 b(connecting)e(t)n(w)n(o)g(comp)r(onen)n(t)g
-(Mappings)g(in)h(parallel,)f(there)h(is)f(no)h(restriction)e(on)i(the)g
-(n)n(um)n(b)r(er)427 1070 y(of)i(input)g(and)g(output)g(co)r(ordinates)
-e(for)h(eac)n(h)g(Mapping.)340 1191 y Fj(\017)45 b Fk(Note)35
-b(that)h(the)f(comp)r(onen)n(t)g(Mappings)g(supplied)g(are)f(not)h
-(copied)g(b)n(y)g(AST)p Ft(_)p Fk(CMPMAP)g(\(the)h(new)427
-1291 y(CmpMap)41 b(simply)f(retains)g(a)g(reference)f(to)h(them\).)76
-b(They)41 b(ma)n(y)e(con)n(tin)n(ue)h(to)g(b)r(e)h(used)f(for)g(other)
-427 1391 y(purp)r(oses,)i(but)f(should)e(not)h(b)r(e)g(deleted.)74
-b(If)40 b(a)f(CmpMap)h(con)n(taining)f(a)g(cop)n(y)g(of)h(its)g(comp)r
-(onen)n(t)427 1490 y(Mappings)27 b(is)h(required,)e(then)j(a)e(cop)n(y)
-f(of)i(the)g(CmpMap)g(should)f(b)r(e)h(made)f(using)h(AST)p
-Ft(_)p Fk(COPY.)340 1611 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1711 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1887 3780 12 v 0 2017 a FA(AST)p Fe(_)p FA(CMPREGION)152
-b Fd(Create)38 b(a)g(CmpRegion)152 b FA(AST)p Fe(_)p
-FA(CMPREGION)0 2182 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(CmpRegion)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 2301 y(A)i(CmpRegion)f(is)h(a)f
-(Region)g(whic)n(h)g(allo)n(ws)g(t)n(w)n(o)f(comp)r(onen)n(t)i(Regions)
-e(\(of)i(an)n(y)f(class\))g(to)g(b)r(e)h(com)n(bined)g(to)227
-2401 y(form)g(a)f(more)f(complex)i(Region.)42 b(This)29
-b(com)n(bination)g(ma)n(y)g(b)r(e)h(p)r(erformed)f(a)g(b)r(o)r(olean)g
-(AND,)i(OR)e(or)g(X)n(OR)227 2500 y(\(exclusiv)n(e)j(OR\))h(op)r
-(erator.)49 b(If)33 b(the)g(AND)g(op)r(erator)e(is)h(used,)i(then)f(a)f
-(p)r(osition)g(is)h(inside)f(the)h(CmpRegion)227 2600
-y(only)28 b(if)g(it)g(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n(o)f
-(comp)r(onen)n(t)g(Regions.)37 b(If)28 b(the)g(OR)g(op)r(erator)e(is)h
-(used,)h(then)g(a)g(p)r(osition)227 2700 y(is)g(inside)h(the)g
-(CmpRegion)f(if)g(it)h(is)f(inside)h(either)f(\(or)g(b)r(oth\))h(of)f
-(its)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Regions.)38 b(If)29
-b(the)g(X)n(OR)227 2799 y(op)r(erator)24 b(is)i(used,)g(then)h(a)e(p)r
-(osition)h(is)g(inside)g(the)g(CmpRegion)f(if)i(it)f(is)g(inside)f(one)
-h(but)g(not)g(b)r(oth)h(of)e(its)h(t)n(w)n(o)227 2899
-y(comp)r(onen)n(t)j(Regions.)41 b(Other)28 b(op)r(erators)g(can)g(b)r
-(e)i(formed)f(b)n(y)g(negating)f(one)h(or)f(b)r(oth)i(comp)r(onen)n(t)f
-(Regions)227 2999 y(b)r(efore)f(using)f(them)h(to)f(construct)h(a)f
-(new)g(CmpRegion.)227 3117 y(The)i(t)n(w)n(o)e(comp)r(onen)n(t)h
-(Region)g(need)g(not)h(refer)e(to)h(the)h(same)f(co)r(ordinate)f(F)-7
-b(rame,)28 b(but)h(it)g(m)n(ust)f(b)r(e)h(p)r(ossible)227
-3217 y(for)22 b(the)h(AST)p Ft(_)p Fk(CONVER)-7 b(T)23
-b(function)g(to)f(determine)h(a)f(Mapping)g(b)r(et)n(w)n(een)h(them)g
-(\(an)g(error)d(will)j(b)r(e)g(rep)r(orted)227 3316 y(otherwise)33
-b(when)g(the)h(CmpRegion)f(is)g(created\).)54 b(F)-7
-b(or)33 b(instance,)i(a)e(CmpRegion)g(ma)n(y)f(com)n(bine)h(a)g(Region)
-227 3416 y(de\014ned)k(within)f(an)g(ICRS)g(SkyF)-7 b(rame)36
-b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g(Galactic)f(SkyF)-7
-b(rame.)62 b(This)36 b(is)227 3516 y(acceptable)24 b(b)r(ecause)h(the)g
-(SkyF)-7 b(rame)24 b(class)g(kno)n(ws)f(ho)n(w)h(to)h(con)n(v)n(ert)e
-(b)r(et)n(w)n(een)i(these)g(t)n(w)n(o)f(systems,)h(and)f(con-)227
-3615 y(sequen)n(tly)j(the)g(AST)p Ft(_)p Fk(CONVER)-7
-b(T)27 b(function)g(will)h(also)d(b)r(e)j(able)e(to)h(con)n(v)n(ert)f
-(b)r(et)n(w)n(een)h(them.)37 b(In)27 b(suc)n(h)g(cases,)227
-3715 y(the)33 b(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h
-(mapp)r(ed)f(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32
-b(of)h(the)g(\014rst)g(comp)r(onen)n(t)227 3815 y(Region,)g(and)g(the)f
-(F)-7 b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h
-(whole)g(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-3914 y(comp)r(onen)n(t)28 b(Region.)227 4033 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-4133 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 4270 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_CMPREGION\()38 b(REGION1,)i(REGION2,)g(OPER,)i(OPTIONS,)e
-(STATUS)h(\))0 4408 y Fc(Argumen)m(ts:)259 4533 y(REGION1)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 4632 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g(Region.)259
-4753 y Fc(REGION2)k(=)h(INTEGER)f(\(Giv)m(en\))427 4853
-y Fk(P)n(oin)n(ter)20 b(to)h(the)g(second)g(comp)r(onen)n(t)f(Region.)
-34 b(This)21 b(Region)g(will)g(b)r(e)h(transformed)d(in)n(to)i(the)h
-(co)r(ordinate)427 4953 y(F)-7 b(rame)27 b(of)h(the)g(\014rst)f(region)
-g(b)r(efore)g(use.)37 b(An)28 b(error)d(will)j(b)r(e)g(rep)r(orted)f
-(if)h(this)g(is)f(not)h(p)r(ossible.)259 5074 y Fc(OPER)j(=)h(INTEGER)g
-(\(Giv)m(en\))427 5173 y Fk(The)38 b(b)r(o)r(olean)f(op)r(erator)f
-(with)i(whic)n(h)g(to)f(com)n(bine)h(the)g(t)n(w)n(o)f(Regions.)66
-b(This)37 b(m)n(ust)h(b)r(e)g(one)g(of)f(the)427 5273
-y(sym)n(b)r(olic)27 b(constan)n(ts)g(AST)p Ft(__)p Fk(AND,)h(AST)p
-Ft(__)p Fk(OR)f(or)g(AST)p Ft(__)p Fk(X)n(OR.)259 5394
-y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5494 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 5593 y(b)r(e)37
-b(used)f(for)g(initialising)g(the)h(new)g(CmpRegion.)63
-b(The)36 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)h(that)f(for)g
-(the)427 5693 y(AST)p Ft(_)p Fk(SET)27 b(routine.)p eop
-end
-%%Page: 203 213
-TeXDict begin 203 212 bop 3643 52 a FG(203)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 612 y Fc(Returned)32
-b(V)-8 b(alue:)259 748 y(AST)p Ft(_)p Fc(CMPREGION)31
-b(=)h(INTEGER)427 848 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(CmpRegion.)0 1009 y Fc(Notes:)340 1291 y Fj(\017)45
-b Fk(If)35 b(one)f(of)g(the)h(supplied)g(Regions)e(has)h(an)g(asso)r
-(ciated)f(uncertain)n(t)n(y)-7 b(,)35 b(that)g(uncertain)n(t)n(y)e
-(will)i(also)e(b)r(e)427 1391 y(used)h(for)f(the)h(returned)f
-(CmpRegion.)55 b(If)34 b(b)r(oth)g(supplied)g(Regions)e(ha)n(v)n(e)h
-(asso)r(ciated)f(uncertain)n(ties,)427 1490 y(the)c(uncertain)n(t)n(y)f
-(asso)r(ciated)f(with)i(the)g(\014rst)g(Region)f(will)g(b)r(e)h(used)g
-(for)f(the)h(returned)f(CmpRegion.)340 1622 y Fj(\017)45
-b Fk(Deep)22 b(copies)f(are)f(tak)n(en)h(of)g(the)h(supplied)g
-(Regions.)33 b(This)22 b(means)f(that)g(an)n(y)g(subsequen)n(t)g(c)n
-(hanges)f(made)427 1722 y(to)26 b(the)g(comp)r(onen)n(t)g(Regions)f
-(using)g(the)i(supplied)f(p)r(oin)n(ters)f(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)g(on)g(the)g(CmpRegion.)340 1854 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 1954
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2152 3780 12 v 0 2283
-a FA(AST)p Fe(_)p FA(CONVER)-11 b(T)1224 2284 y Fd(Determine)38
-b(ho)m(w)g(to)g(con)m(v)m(ert)1285 2383 y(b)s(et)m(w)m(een)g(t)m(w)m(o)
-f(co)s(ordinate)1692 2483 y(systems)2772 2283 y FA(AST)p
-Fe(_)p FA(CONVER)-11 b(T)0 2671 y Fc(Description:)44
-b Fk(This)29 b(function)h(compares)d(t)n(w)n(o)h(F)-7
-b(rames)28 b(and)h(determines)f(whether)h(it)g(is)g(p)r(ossible)f(to)h
-(con)n(v)n(ert)f(b)r(e-)227 2770 y(t)n(w)n(een)c(the)h(co)r(ordinate)e
-(systems)g(whic)n(h)h(they)h(represen)n(t.)34 b(If)25
-b(con)n(v)n(ersion)d(is)i(p)r(ossible,)g(it)h(returns)e(a)h(F)-7
-b(rameSet)227 2870 y(whic)n(h)34 b(describ)r(es)f(the)h(con)n(v)n
-(ersion)d(and)j(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(\(as)f(a)g
-(Mapping\))h(to)f(transform)g(co)r(ordinate)227 2969
-y(v)-5 b(alues)27 b(in)h(either)g(direction.)227 3094
-y(The)38 b(same)g(function)g(ma)n(y)g(also)e(b)r(e)j(used)f(to)g
-(determine)g(ho)n(w)f(to)h(con)n(v)n(ert)f(b)r(et)n(w)n(een)g(t)n(w)n
-(o)h(F)-7 b(rameSets)37 b(\(or)227 3193 y(b)r(et)n(w)n(een)23
-b(a)g(F)-7 b(rame)22 b(and)h(a)f(F)-7 b(rameSet,)24 b(or)e(vice)g(v)n
-(ersa\).)34 b(This)23 b(mo)r(de)g(is)g(in)n(tended)g(for)f(use)h(when)g
-(\(for)g(example\))227 3293 y(t)n(w)n(o)f(images)g(ha)n(v)n(e)f(b)r
-(een)i(calibrated)f(b)n(y)h(attac)n(hing)e(a)i(F)-7 b(rameSet)22
-b(to)h(eac)n(h.)34 b(AST)p Ft(_)p Fk(CONVER)-7 b(T)22
-b(migh)n(t)h(then)g(b)r(e)227 3393 y(used)29 b(to)f(searc)n(h)f(for)h
-(a)g(celestial)g(co)r(ordinate)g(system)g(that)h(b)r(oth)g(images)e(ha)
-n(v)n(e)h(in)g(common,)h(and)f(the)h(result)227 3492
-y(could)k(then)g(b)r(e)h(used)f(to)f(con)n(v)n(ert)g(b)r(et)n(w)n(een)h
-(the)g(pixel)g(co)r(ordinates)e(of)i(b)r(oth)h(images)d({)i(ha)n(ving)f
-(e\013ectiv)n(ely)227 3592 y(used)c(their)f(celestial)h(co)r(ordinate)e
-(systems)h(to)h(align)e(them.)227 3716 y(When)33 b(using)f(F)-7
-b(rameSets,)33 b(there)f(ma)n(y)f(b)r(e)i(more)e(than)h(one)g(p)r
-(ossible)g(in)n(termediate)f(co)r(ordinate)g(system)h(in)227
-3816 y(whic)n(h)j(to)g(p)r(erform)f(the)h(con)n(v)n(ersion)e(\(for)h
-(instance,)j(t)n(w)n(o)d(F)-7 b(rameSets)34 b(migh)n(t)h(b)r(oth)g(ha)n
-(v)n(e)f(celestial)g(co)r(ordi-)227 3915 y(nates,)27
-b(detector)g(co)r(ordinates,)g(pixel)g(co)r(ordinates,)f(etc.\).)38
-b(A)27 b(comma-separated)e(list)j(of)g(co)r(ordinate)e(system)227
-4015 y(domains)e(ma)n(y)g(therefore)g(b)r(e)h(giv)n(en)f(whic)n(h)g
-(de\014nes)h(a)f(priorit)n(y)g(order)f(to)h(use)h(when)g(selecting)f
-(the)h(in)n(termedi-)227 4115 y(ate)c(co)r(ordinate)e(system.)34
-b(The)21 b(path)g(used)f(for)g(con)n(v)n(ersion)f(m)n(ust)h(go)g(via)g
-(an)g(in)n(termediate)g(co)r(ordinate)g(system)227 4214
-y(whose)k(Domain)h(attribute)f(matc)n(hes)g(one)h(of)f(the)h(domains)f
-(giv)n(en.)35 b(If)25 b(con)n(v)n(ersion)d(cannot)j(b)r(e)g(ac)n(hiev)n
-(ed)e(using)227 4314 y(the)28 b(\014rst)g(domain,)f(the)h(next)g(one)f
-(is)g(considered,)g(and)g(so)g(on,)h(un)n(til)g(success)e(is)i(ac)n
-(hiev)n(ed.)0 4463 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_CONVERT\()c(FROM,)i(TO,)i(DOMAINLIST,)c(STATUS)i(\))0
-4612 y Fc(Argumen)m(ts:)259 4747 y(FR)m(OM)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 4847 y Fk(P)n(oin)n(ter)27 b(to)h(a)g(F)-7
-b(rame)27 b(whic)n(h)h(represen)n(ts)f(the)i Ft(")p Fk(source)p
-Ft(")d Fk(co)r(ordinate)h(system.)38 b(This)28 b(is)g(the)h(co)r
-(ordinate)427 4947 y(system)f(in)f(whic)n(h)h(y)n(ou)f(already)f(ha)n
-(v)n(e)g(co)r(ordinates)h(a)n(v)-5 b(ailable.)427 5063
-y(If)26 b(a)g(F)-7 b(rameSet)25 b(is)h(giv)n(en,)f(its)h(curren)n(t)f
-(F)-7 b(rame)25 b(\(as)g(determined)h(b)n(y)f(its)h(Curren)n(t)f
-(attribute\))h(is)g(tak)n(en)f(to)427 5162 y(describ)r(e)32
-b(the)g(source)f(co)r(ordinate)g(system.)50 b(Note)32
-b(that)g(the)h(Base)e(attribute)h(of)g(this)h(F)-7 b(rameSet)31
-b(ma)n(y)427 5262 y(b)r(e)d(mo)r(di\014ed)f(b)n(y)g(this)g(function)g
-(to)g(indicate)g(whic)n(h)g(in)n(termediate)f(co)r(ordinate)g(system)h
-(w)n(as)f(used)h(\(see)427 5361 y(under)h Ft(")p Fk(F)-7
-b(rameSets)p Ft(")26 b Fk(in)i(the)g Ft(")p Fk(Applicabilit)n(y)p
-Ft(")f Fk(section)g(for)g(details\).)259 5494 y Fc(TO)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 5593 y Fk(P)n(oin)n(ter)d(to)i(a)f(F)
--7 b(rame)29 b(whic)n(h)h(represen)n(ts)e(the)i Ft(")p
-Fk(destination)p Ft(")f Fk(co)r(ordinate)g(system.)43
-b(This)29 b(is)h(the)g(co)r(or-)427 5693 y(dinate)e(system)f(in)n(to)h
-(whic)n(h)f(y)n(ou)g(wish)h(to)f(con)n(v)n(ert)f(y)n(our)h(co)r
-(ordinates.)p eop end
-%%Page: 204 214
-TeXDict begin 204 213 bop 0 52 a FG(204)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(If)i(a)f(F)-7
-b(rameSet)32 b(is)g(giv)n(en,)h(its)f(curren)n(t)f(F)-7
-b(rame)32 b(\(as)g(determined)g(b)n(y)g(its)h(Curren)n(t)e(attribute\))
-i(is)f(tak)n(en)427 451 y(to)25 b(describ)r(e)g(the)h(destination)f(co)
-r(ordinate)f(system.)35 b(Note)26 b(that)f(the)h(Base)e(attribute)h(of)
-g(this)h(F)-7 b(rameSet)427 551 y(ma)n(y)25 b(b)r(e)i(mo)r(di\014ed)f
-(b)n(y)g(this)g(function)g(to)g(indicate)g(whic)n(h)g(in)n(termediate)f
-(co)r(ordinate)g(system)h(w)n(as)f(used)427 650 y(\(see)j(under)f
-Ft(")p Fk(F)-7 b(rameSets)p Ft(")27 b Fk(in)g(the)h Ft(")p
-Fk(Applicabilit)n(y)p Ft(")f Fk(section)h(for)f(details\).)259
-786 y Fc(DOMAINLIST)33 b(=)f(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 886 y Fk(A)f(c)n(haracter)d
-(string)h(con)n(taining)g(a)h(comma-separated)e(list)i(of)g(F)-7
-b(rame)30 b(domains.)44 b(This)30 b(ma)n(y)f(b)r(e)i(used)427
-986 y(to)23 b(de\014ne)g(a)g(priorit)n(y)f(order)f(for)i(the)g
-(di\013eren)n(t)g(in)n(termediate)g(co)r(ordinate)f(systems)g(that)h
-(migh)n(t)g(b)r(e)h(used)427 1085 y(to)k(p)r(erform)f(the)h(con)n(v)n
-(ersion.)427 1203 y(The)39 b(function)g(will)f(\014rst)g(try)g(to)g
-(obtain)g(a)g(con)n(v)n(ersion)e(b)n(y)i(making)g(use)g(only)g(of)g(an)
-g(in)n(termediate)427 1303 y(co)r(ordinate)h(system)g(whose)g(Domain)h
-(attribute)g(matc)n(hes)f(the)h(\014rst)g(domain)f(in)h(this)g(list.)74
-b(If)40 b(this)427 1402 y(fails,)32 b(the)g(second)f(domain)g(in)g(the)
-h(list)g(will)f(b)r(e)h(used,)g(and)g(so)e(on,)i(un)n(til)g(con)n(v)n
-(ersion)d(is)i(ac)n(hiev)n(ed.)47 b(A)427 1502 y(blank)26
-b(domain)g(\(e.g.)36 b(t)n(w)n(o)25 b(consecutiv)n(e)g(commas\))g
-(indicates)h(that)g(all)g(co)r(ordinate)f(systems)g(should)h(b)r(e)427
-1602 y(considered,)h(regardless)e(of)j(their)f(domains.)427
-1719 y(This)37 b(list)h(is)f(case-insensitiv)n(e)f(and)h(all)g(white)g
-(space)g(is)g(ignored.)65 b(If)37 b(y)n(ou)g(do)g(not)g(wish)g(to)g
-(restrict)427 1819 y(the)d(domain)f(in)h(this)g(w)n(a)n(y)-7
-b(,)34 b(y)n(ou)e(should)i(supply)f(a)g(blank)g(string.)54
-b(This)34 b(is)f(normally)f(appropriate)g(if)427 1919
-y(either)d(of)g(the)h(source)e(or)g(destination)h(co)r(ordinate)f
-(systems)h(are)f(describ)r(ed)h(b)n(y)g(F)-7 b(rames)28
-b(\(rather)g(than)427 2018 y(F)-7 b(rameSets\),)35 b(since)e(there)g
-(is)g(then)h(usually)f(only)g(one)g(p)r(ossible)g(c)n(hoice)g(of)g(in)n
-(termediate)g(co)r(ordinate)427 2118 y(system.)259 2254
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2354 y Fk(The)c(global)e(status.)0 2522 y Fc(Class)31
-b(Applicabilit)m(y:)259 2665 y(DSBSp)s(ecF)-8 b(rame)427
-2765 y Fk(If)24 b(the)g(AlignSideBand)g(attribute)g(is)f(non-zero,)g
-(alignmen)n(t)g(o)r(ccurs)g(in)h(the)g(upp)r(er)f(sideband)h(expressed)
-427 2864 y(within)30 b(the)f(sp)r(ectral)f(system)g(and)h(standard)e
-(of)i(rest)f(giv)n(en)g(b)n(y)g(attributes)h(AlignSystem)f(and)h
-(Align-)427 2964 y(StdOfRest.)58 b(If)35 b(AlignSideBand)f(is)g(zero,)i
-(the)e(t)n(w)n(o)g(DSBSp)r(ecF)-7 b(rames)34 b(are)g(aligned)f(as)h(if)
-h(they)g(w)n(ere)427 3064 y(simple)28 b(Sp)r(ecF)-7 b(rames)27
-b(\(i.e.)37 b(the)28 b(SideBand)g(is)f(ignored\).)259
-3200 y Fc(F)-8 b(rame)427 3299 y Fk(This)26 b(function)f(applies)g(to)g
-(all)g(F)-7 b(rames.)36 b(Alignmen)n(t)25 b(o)r(ccurs)g(within)h(the)f
-(co)r(ordinate)f(system)h(giv)n(en)g(b)n(y)427 3399 y(attribute)j
-(AlignSystem.)259 3535 y Fc(F)-8 b(rameSet)427 3635 y
-Fk(If)30 b(either)g(of)g(the)g(FR)n(OM)f(or)g(TO)h(argumen)n(ts)e(is)i
-(a)f(p)r(oin)n(ter)g(to)h(a)f(F)-7 b(rameSet,)31 b(then)f(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)427 3734 y(will)34 b(attempt)g(to)f(con)n(v)n
-(ert)f(from)h(the)h(co)r(ordinate)e(system)h(describ)r(ed)g(b)n(y)g
-(the)h(curren)n(t)e(F)-7 b(rame)33 b(of)g(the)427 3834
-y(FR)n(OM)28 b(F)-7 b(rameSet)27 b(to)g(that)h(describ)r(ed)g(b)n(y)f
-(the)h(curren)n(t)f(F)-7 b(rame)27 b(of)g(the)h(TO)g(F)-7
-b(rameSet.)427 3952 y(T)g(o)34 b(ac)n(hiev)n(e)g(this,)i(it)f(will)g
-(consider)f(all)g(of)g(the)h(F)-7 b(rames)34 b(within)h(eac)n(h)f(F)-7
-b(rameSet)35 b(as)e(a)i(p)r(ossible)f(w)n(a)n(y)427 4051
-y(of)g(reac)n(hing)e(an)i(in)n(termediate)f(co)r(ordinate)g(system)g
-(that)h(can)g(b)r(e)g(used)g(for)f(the)h(con)n(v)n(ersion.)53
-b(There)427 4151 y(is)30 b(then)h(the)g(p)r(ossibilit)n(y)f(that)h
-(more)e(than)i(one)e(con)n(v)n(ersion)f(path)j(ma)n(y)f(exist)g(and,)h
-(unless)f(the)g(c)n(hoice)427 4251 y(is)g(su\016cien)n(tly)g
-(restricted)f(b)n(y)g(the)h(DOMAINLIST)h(string,)e(the)i(sequence)e(in)
-h(whic)n(h)f(the)i(F)-7 b(rames)29 b(are)427 4350 y(considered)19
-b(can)h(b)r(e)g(imp)r(ortan)n(t.)34 b(In)20 b(this)h(case,)f(the)h
-(searc)n(h)d(for)i(a)f(con)n(v)n(ersion)f(path)i(pro)r(ceeds)f(as)h
-(follo)n(ws:)510 4561 y Fj(\017)45 b Fk(Eac)n(h)27 b(\014eld)h(in)f
-(the)h(DOMAINLIST)h(string)e(is)g(considered)g(in)g(turn.)510
-4678 y Fj(\017)45 b Fk(The)26 b(F)-7 b(rames)24 b(within)i(eac)n(h)f(F)
--7 b(rameSet)25 b(are)f(considered)h(in)g(a)g(sp)r(eci\014c)h(order:)34
-b(\(1\))26 b(the)f(base)g(F)-7 b(rame)597 4778 y(is)28
-b(alw)n(a)n(ys)d(considered)i(\014rst,)g(\(2\))h(after)f(this)h(come)f
-(all)h(the)g(other)f(F)-7 b(rames)26 b(in)i(F)-7 b(rame-index)27
-b(order)597 4878 y(\(but)h(omitting)f(the)g(base)g(and)f(curren)n(t)g
-(F)-7 b(rames\),)27 b(\(3\))g(the)g(curren)n(t)f(F)-7
-b(rame)27 b(is)g(alw)n(a)n(ys)e(considered)597 4977 y(last.)35
-b(Ho)n(w)n(ev)n(er,)22 b(if)i(either)f(F)-7 b(rameSet's)23
-b(In)n(v)n(ert)f(attribute)h(is)h(set)f(to)g(a)f(non-zero)g(v)-5
-b(alue)23 b(\(so)g(that)g(the)597 5077 y(F)-7 b(rameSet)30
-b(is)h(in)n(v)n(erted\),)f(then)h(its)g(F)-7 b(rames)30
-b(are)f(considered)h(in)g(rev)n(erse)f(order.)44 b(\(Note)31
-b(that)f(this)597 5177 y(still)h(means)e(that)h(the)h(base)e(F)-7
-b(rame)29 b(is)h(considered)f(\014rst)h(and)g(the)g(curren)n(t)f(F)-7
-b(rame)30 b(last,)g(b)r(ecause)597 5276 y(the)e(In)n(v)n(ert)f(v)-5
-b(alue)27 b(will)h(also)f(cause)g(these)g(F)-7 b(rames)27
-b(to)h(sw)n(ap)e(places.\))510 5394 y Fj(\017)45 b Fk(All)34
-b(source)d(F)-7 b(rames)33 b(are)f(\014rst)g(considered)g(\(in)i(the)f
-(appropriate)e(order\))h(for)h(con)n(v)n(ersion)d(to)j(the)597
-5494 y(\014rst)26 b(destination)g(F)-7 b(rame.)36 b(If)27
-b(no)e(suitable)h(in)n(termediate)g(co)r(ordinate)f(system)h(emerges,)f
-(they)i(are)597 5593 y(then)d(considered)e(again)g(for)g(con)n(v)n
-(ersion)f(to)h(the)i(second)e(destination)h(F)-7 b(rame)22
-b(\(in)i(the)f(appropriate)597 5693 y(order\),)k(and)g(so)g(on.)p
-eop end
-%%Page: 205 215
-TeXDict begin 205 214 bop 3643 52 a FG(205)510 351 y
-Fj(\017)45 b Fk(Generally)-7 b(,)26 b(the)h(\014rst)f(suitable)g(in)n
-(termediate)h(co)r(ordinate)e(system)h(found)h(is)f(used.)36
-b(Ho)n(w)n(ev)n(er,)25 b(the)597 451 y(o)n(v)n(erall)32
-b(Mapping)i(b)r(et)n(w)n(een)h(the)f(source)g(and)g(destination)g(co)r
-(ordinate)f(systems)h(is)g(also)f(exam-)597 551 y(ined.)51
-b(Preference)31 b(is)h(giv)n(en)f(to)h(cases)f(where)h(b)r(oth)g(the)h
-(forw)n(ard)d(and)i(in)n(v)n(erse)f(transformations)597
-650 y(are)g(de\014ned)g(\(as)g(indicated)g(b)n(y)g(the)h(T)-7
-b(ranF)g(orw)n(ard)29 b(and)i(T)-7 b(ranIn)n(v)n(erse)29
-b(attributes\).)48 b(If)31 b(only)g(one)597 750 y(transformation)26
-b(is)i(de\014ned,)g(the)g(forw)n(ard)e(one)h(is)g(preferred.)510
-864 y Fj(\017)45 b Fk(If)39 b(the)g(domain)f(of)g(the)h(in)n
-(termediate)f(co)r(ordinate)f(system)h(matc)n(hes)g(the)h(curren)n(t)e
-(DOMAIN-)597 964 y(LIST)29 b(\014eld,)f(the)h(con)n(v)n(ersion)d(path)i
-(is)h(accepted.)38 b(Otherwise,)28 b(the)h(next)f(DOMAINLIST)h(\014eld)
-g(is)597 1064 y(considered)e(and)g(the)h(pro)r(cess)f(rep)r(eated.)427
-1193 y(If)33 b(con)n(v)n(ersion)c(is)j(p)r(ossible,)g(the)h(Base)d
-(attributes)i(of)g(the)g(t)n(w)n(o)f(F)-7 b(rameSets)31
-b(will)h(b)r(e)h(mo)r(di\014ed)f(on)f(exit)427 1293 y(to)h(iden)n(tify)
-g(the)g(F)-7 b(rames)31 b(used)g(to)h(access)e(the)i(in)n(termediate)f
-(co)r(ordinate)f(system)i(whic)n(h)f(w)n(as)g(\014nally)427
-1393 y(accepted.)427 1507 y(Note)26 b(that)f(it)h(is)f(p)r(ossible)g
-(to)h(force)e(a)h(particular)f(F)-7 b(rame)25 b(within)h(a)f(F)-7
-b(rameSet)25 b(to)h(b)r(e)g(used)f(as)g(the)g(basis)427
-1607 y(for)32 b(the)g(in)n(termediate)g(co)r(ordinate)f(system,)i(if)f
-(it)h(is)f(suitable,)h(b)n(y)f(\(a\))g(fo)r(cussing)g(atten)n(tion)g
-(on)f(it)i(b)n(y)427 1707 y(sp)r(ecifying)h(its)f(domain)g(in)h(the)g
-(DOMAINLIST)g(string,)g(or)f(\(b\))h(making)f(it)h(the)g(base)e(F)-7
-b(rame,)35 b(since)427 1806 y(this)28 b(is)g(alw)n(a)n(ys)d(considered)
-i(\014rst.)259 1936 y Fc(Sp)s(ecF)-8 b(rame)427 2036
-y Fk(Alignmen)n(t)28 b(o)r(ccurs)e(within)i(the)g(sp)r(ectral)f(system)
-g(and)g(standard)g(of)g(rest)g(giv)n(en)f(b)n(y)i(attributes)f(Align-)
-427 2135 y(System)h(and)f(AlignStdOfRest.)259 2265 y
-Fc(TimeF)-8 b(rame)427 2365 y Fk(Alignmen)n(t)24 b(o)r(ccurs)e(within)h
-(the)h(time)f(system)g(and)g(time)g(scale)g(giv)n(en)f(b)n(y)h
-(attributes)g(AlignSystem)g(and)427 2464 y(AlignTimeScale.)0
-2623 y Fc(Returned)32 b(V)-8 b(alue:)259 2756 y(AST)p
-Ft(_)p Fc(CONVER)g(T)32 b(=)g(INTEGER)427 2856 y Fk(If)21
-b(the)g(requested)e(co)r(ordinate)g(con)n(v)n(ersion)f(is)j(p)r
-(ossible,)g(the)g(function)g(returns)e(a)h(p)r(oin)n(ter)g(to)g(a)g(F)
--7 b(rameSet)427 2956 y(whic)n(h)28 b(describ)r(es)f(the)h(con)n(v)n
-(ersion.)36 b(Otherwise,)27 b(a)g(n)n(ull)h(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))h(is)g(returned)427
-3055 y(without)g(error.)427 3170 y(If)37 b(a)g(F)-7 b(rameSet)36
-b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)-7
-b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f(F)
--7 b(rame\))427 3269 y(will)34 b(describ)r(e)f(the)h(source)f(co)r
-(ordinate)f(system,)j(corresp)r(onding)d(to)h(the)h(FR)n(OM)f(argumen)n
-(t.)54 b(F)-7 b(rame)427 3369 y(n)n(um)n(b)r(er)27 b(2)g(\(its)g
-(curren)n(t)f(F)-7 b(rame\))27 b(will)g(describ)r(e)g(the)g
-(destination)g(co)r(ordinate)f(system,)h(corresp)r(onding)427
-3469 y(to)34 b(the)g(TO)f(argumen)n(t.)55 b(The)33 b(Mapping)h(whic)n
-(h)f(in)n(ter-relates)f(these)i(t)n(w)n(o)f(F)-7 b(rames)33
-b(will)h(p)r(erform)f(the)427 3568 y(required)27 b(con)n(v)n(ersion)e
-(b)r(et)n(w)n(een)j(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)g
-(systems.)427 3683 y(Note)c(that)g(a)g(F)-7 b(rameSet)23
-b(ma)n(y)f(b)r(e)h(used)g(b)r(oth)h(as)e(a)g(Mapping)h(and)g(as)f(a)g
-(F)-7 b(rame.)35 b(If)24 b(the)f(result)g(is)f(used)h(as)427
-3783 y(a)f(Mapping)h(\(e.g.)35 b(with)23 b(AST)p Ft(_)p
-Fk(TRAN2\),)h(then)f(it)f(pro)n(vides)g(a)g(means)g(of)g(con)n(v)n
-(erting)f(co)r(ordinates)g(from)427 3882 y(the)34 b(source)e(to)i(the)g
-(destination)f(co)r(ordinate)f(system)i(\(or)f(vice)g(v)n(ersa)f(if)i
-(its)f(in)n(v)n(erse)f(transformation)427 3982 y(is)g(selected\).)50
-b(If)33 b(it)f(is)g(used)g(as)f(a)h(F)-7 b(rame,)33 b(its)f(attributes)
-g(will)g(describ)r(e)g(the)g(destination)g(co)r(ordinate)427
-4082 y(system.)0 4240 y Fc(Examples:)227 4378 y Fy(CVT)47
-b(=)h(AST)p Ft(_)p Fy(CONVERT\()c(A,)j(B,)g(')h(',)f(STATUS)f(\))427
-4473 y Fk(A)n(ttempts)26 b(to)f(con)n(v)n(ert)e(b)r(et)n(w)n(een)i(the)
-g(co)r(ordinate)f(systems)g(represen)n(ted)g(b)n(y)g(A)i(and)e(B)h
-(\(assumed)f(to)h(b)r(e)427 4573 y(F)-7 b(rames\).)52
-b(If)33 b(successful,)h(a)e(F)-7 b(rameSet)32 b(is)h(returned)f(via)g
-(the)h(CVT)g(p)r(oin)n(ter)f(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)427
-4672 y(apply)28 b(the)g(con)n(v)n(ersion)d(to)i(sets)h(of)f(co)r
-(ordinates)f(\(e.g.)37 b(using)27 b(AST)p Ft(_)p Fk(TRAN2\).)227
-4795 y Fy(CVT)47 b(=)h(AST)p Ft(_)p Fy(CONVERT\()c(AST)p
-Ft(_)p Fy(SKYFRAME\()g(')j(',)h(STATUS)e(\),)h(AST)p
-Ft(_)p Fy(SKYFRAME\()227 4894 y('Equinox=2005',)d(STATUS)i(\),)h(')h
-(',)f(STATUS)f(\))427 4981 y Fk(Creates)23 b(a)g(F)-7
-b(rameSet)23 b(whic)n(h)g(describ)r(es)g(precession)f(in)i(the)g
-(default)g(FK5)f(celestial)g(co)r(ordinate)f(system)427
-5080 y(b)r(et)n(w)n(een)27 b(equino)n(xes)f(J2000)e(\(also)i(the)i
-(default\))f(and)g(J2005.)34 b(The)27 b(returned)f(CVT)i(p)r(oin)n(ter)
-e(ma)n(y)g(then)427 5180 y(b)r(e)31 b(passed)f(to)g(AST)p
-Ft(_)p Fk(TRAN2)h(to)g(apply)f(this)h(precession)e(correction)g(to)h
-(an)n(y)g(n)n(um)n(b)r(er)g(of)h(co)r(ordinate)427 5279
-y(v)-5 b(alues)27 b(giv)n(en)g(in)h(radians.)427 5394
-y(Note)h(that)h(the)f(returned)f(F)-7 b(rameSet)29 b(also)f(con)n
-(tains)g(information)g(ab)r(out)h(ho)n(w)g(to)f(format)h(co)r(ordinate)
-427 5494 y(v)-5 b(alues.)47 b(This)30 b(means)h(that)g(setting)g(its)g
-(Rep)r(ort)f(attribute)h(to)g(1)g(is)f(a)h(simple)g(w)n(a)n(y)e(to)i
-(obtain)g(prin)n(ted)427 5593 y(output)j(\(formatted)f(in)g
-(sexagesimal)e(notation\))i(to)g(sho)n(w)f(the)i(co)r(ordinate)e(v)-5
-b(alues)32 b(b)r(efore)h(and)g(after)427 5693 y(con)n(v)n(ersion.)p
-eop end
-%%Page: 206 216
-TeXDict begin 206 215 bop 0 52 a FG(206)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 355 y Fy(CVT)47
-b(=)h(AST)p Ft(_)p Fy(CONVERT\()c(A,)j(B,)g('SKY,DETECTOR,',)d(STATUS)i
-(\))427 451 y Fk(A)n(ttempts)34 b(to)f(con)n(v)n(ert)f(b)r(et)n(w)n
-(een)h(the)g(co)r(ordinate)f(systems)g(represen)n(ted)g(b)n(y)h(the)g
-(curren)n(t)f(F)-7 b(rames)33 b(of)427 551 y(A)h(and)f(B)g(\(no)n(w)g
-(assumed)g(to)g(b)r(e)g(F)-7 b(rameSets\),)35 b(via)e(the)g(in)n
-(termediate)g Ft(")p Fk(SKY)p Ft(")g Fk(co)r(ordinate)f(system.)427
-650 y(This,)c(b)n(y)g(default,)g(is)g(the)g(Domain)g(asso)r(ciated)e
-(with)i(a)g(celestial)f(co)r(ordinate)g(system)g(represen)n(ted)g(b)n
-(y)427 750 y(a)g(SkyF)-7 b(rame.)427 868 y(If)21 b(this)h(fails)e
-(\(for)h(example,)g(b)r(ecause)g(either)f(F)-7 b(rameSet)21
-b(lac)n(ks)e(celestial)i(co)r(ordinate)e(information\),)j(then)427
-967 y(the)27 b(user-de\014ned)g Ft(")p Fk(DETECTOR)p
-Ft(")e Fk(co)r(ordinate)g(system)i(is)f(used)h(instead.)37
-b(If)27 b(this)g(also)f(fails,)h(then)g(all)427 1067
-y(other)g(p)r(ossible)h(w)n(a)n(ys)e(of)h(ac)n(hieving)g(con)n(v)n
-(ersion)e(are)h(considered)h(b)r(efore)g(giving)g(up.)427
-1185 y(The)e(returned)g(p)r(oin)n(ter)g(CVT)g(indicates)g(whether)g
-(con)n(v)n(ersion)e(w)n(as)h(p)r(ossible)h(and)g(will)g(ha)n(v)n(e)f
-(the)i(v)-5 b(alue)427 1285 y(AST)p Ft(__)p Fk(NULL)33
-b(if)h(it)f(w)n(as)f(not.)53 b(If)33 b(con)n(v)n(ersion)e(w)n(as)h(p)r
-(ossible,)i(CVT)f(will)g(p)r(oin)n(t)g(at)g(a)g(new)g(F)-7
-b(rameSet)427 1384 y(describing)27 b(the)h(con)n(v)n(ersion.)427
-1502 y(The)g(Base)f(attributes)h(of)g(the)g(t)n(w)n(o)f(F)-7
-b(rameSets)28 b(will)g(b)r(e)g(set)g(b)n(y)f(AST)p Ft(_)p
-Fk(CONVER)-7 b(T)28 b(to)g(indicate)g(whic)n(h)427 1602
-y(of)j(their)f(F)-7 b(rames)30 b(w)n(as)g(used)h(for)f(the)h(in)n
-(termediate)f(co)r(ordinate)g(system.)45 b(This)31 b(means)f(that)h(y)n
-(ou)f(can)427 1701 y(subsequen)n(tly)22 b(determine)g(whic)n(h)h(co)r
-(ordinate)e(system)h(w)n(as)f(used)h(b)n(y)g(enquiring)g(the)g(Domain)g
-(attribute)427 1801 y(of)28 b(either)f(base)g(F)-7 b(rame.)0
-1970 y Fc(Notes:)340 2259 y Fj(\017)45 b Fk(The)40 b(Mapping)f
-(represen)n(ted)f(b)n(y)h(the)h(returned)f(F)-7 b(rameSet)40
-b(results)f(in)g(alignmen)n(t)g(taking)g(place)g(in)427
-2359 y(the)g(co)r(ordinate)e(system)g(sp)r(eci\014ed)i(b)n(y)e(the)i
-(AlignSystem)f(attribute)g(of)g(the)h(TO)e(F)-7 b(rame.)68
-b(See)38 b(the)427 2459 y(description)27 b(of)h(the)g(AlignSystem)g
-(attribute)f(for)g(further)h(details.)340 2595 y Fj(\017)45
-b Fk(When)d(aligning)e(\(sa)n(y\))g(t)n(w)n(o)h(images,)i(whic)n(h)e
-(ha)n(v)n(e)f(b)r(een)h(calibrated)f(b)n(y)h(attac)n(hing)f(F)-7
-b(rameSets)41 b(to)427 2694 y(them,)26 b(it)e(is)h(usually)e(necessary)
-g(to)h(con)n(v)n(ert)f(b)r(et)n(w)n(een)h(the)h(base)e(F)-7
-b(rames)24 b(\(represen)n(ting)f Ft(")p Fk(nativ)n(e)p
-Ft(")g Fk(pixel)427 2794 y(co)r(ordinates\))f(of)g(b)r(oth)i(F)-7
-b(rameSets.)34 b(This)23 b(ma)n(y)f(b)r(e)h(ac)n(hiev)n(ed)f(b)n(y)g
-(in)n(v)n(erting)g(the)h(F)-7 b(rameSets)22 b(\(e.g.)35
-b(using)427 2894 y(astIn)n(v)n(ert\))27 b(so)g(as)g(to)g(in)n(terc)n
-(hange)f(their)i(base)f(and)g(curren)n(t)g(F)-7 b(rames)27
-b(b)r(efore)g(using)g(astCon)n(v)n(ert.)340 3030 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 3130
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3336 3780 12 v 0 3466
-a FA(AST)p Fe(_)p FA(COPY)1482 3467 y Fd(Cop)m(y)37 b(an)i(Ob)7
-b(ject)3057 3466 y FA(AST)p Fe(_)p FA(COPY)0 3663 y Fc(Description:)44
-b Fk(This)38 b(function)h(creates)d(a)i(cop)n(y)f(of)h(an)f(Ob)5
-b(ject)38 b(and)g(returns)f(a)h(p)r(oin)n(ter)f(to)h(the)g(resulting)g
-(new)227 3763 y(Ob)5 b(ject.)62 b(It)36 b(mak)n(es)f(a)h
-Ft(")p Fk(deep)p Ft(")f Fk(cop)n(y)-7 b(,)38 b(whic)n(h)d(con)n(tains)h
-(no)f(references)g(to)h(an)n(y)f(other)g(Ob)5 b(ject)36
-b(\(i.e.)63 b(if)36 b(the)227 3862 y(original)29 b(Ob)5
-b(ject)31 b(con)n(tains)f(references)g(to)g(other)g(Ob)5
-b(jects,)32 b(then)f(the)g(actual)f(data)h(are)e(copied,)j(not)f
-(simply)227 3962 y(the)d(references\).)36 b(This)27 b(means)f(that)i
-(mo)r(di\014cations)e(ma)n(y)h(safely)f(b)r(e)i(made)f(to)f(the)i(cop)n
-(y)e(without)i(indirectly)227 4062 y(a\013ecting)g(an)n(y)e(other)h(Ob)
-5 b(ject.)0 4218 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_COPY\()d(THIS,)h(STATUS)h(\))0 4374 y Fc(Argumen)m(ts:)259
-4518 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4617
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g
-(copied.)259 4754 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 4853 y Fk(The)c(global)e(status.)0
-5022 y Fc(Class)31 b(Applicabilit)m(y:)259 5165 y(Ob)5
-b(ject)427 5265 y Fk(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 5434 y Fc(Returned)32 b(V)-8 b(alue:)259 5577
-y(AST)p Ft(_)p Fc(COPY)32 b(=)g(INTEGER)427 5677 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(new)f(Ob)5 b(ject.)p eop end
-%%Page: 207 217
-TeXDict begin 207 216 bop 3643 52 a FG(207)0 351 y Fc(Notes:)340
-640 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 740 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 946 3780 12 v 0 1076 a FA(AST)p Fe(_)p FA(CURRENTTIME)1609
-1077 y Fd(Return)39 b(the)1706 1177 y(curren)m(t)1582
-1277 y(system)f(time)2401 1076 y FA(AST)p Fe(_)p FA(CURRENTTIME)0
-1472 y Fc(Description:)44 b Fk(This)36 b(routine)f(returns)f(the)i
-(curren)n(t)e(system)h(time,)j(represen)n(ted)c(in)i(the)g(form)f(sp)r
-(eci\014ed)g(b)n(y)g(the)227 1571 y(supplied)f(TimeF)-7
-b(rame.)53 b(That)34 b(is,)g(the)g(returned)f(\015oating)f(p)r(oin)n(t)
-i(v)-5 b(alue)33 b(should)g(b)r(e)h(in)n(terpreted)e(using)h(the)227
-1671 y(attribute)d(v)-5 b(alues)28 b(of)h(the)h(TimeF)-7
-b(rame.)41 b(This)29 b(includes)g(System,)h(TimeOrigin,)e(L)-7
-b(TO\013set,)30 b(TimeScale,)f(and)227 1771 y(Unit.)0
-1927 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_CURRENTTIME\()37 b(THIS,)42 b(STATUS)f(\))0 2082
-y Fc(Argumen)m(ts:)259 2225 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-2325 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(TimeF)-7 b(rame.)259
-2461 y Fc(ST)f(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2561 y Fk(The)c(global)e(status.)0 2729
-y Fc(Returned)32 b(V)-8 b(alue:)259 2872 y(AST)p Ft(_)p
-Fc(CURRENTTIME)32 b(=)g(DOUBLE)0 3140 y(Notes:)340 3429
-y Fj(\017)45 b Fk(V)-7 b(alues)35 b(of)g(AST)p Ft(__)p
-Fk(BAD)g(will)h(b)r(e)f(returned)g(if)g(this)h(function)g(is)f(in)n(v)n
-(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)36 b(set)f(to)g(an)427
-3528 y(error)26 b(v)-5 b(alue,)27 b(or)g(if)h(it)g(should)g(fail)f(for)
-g(an)n(y)g(reason.)340 3665 y Fj(\017)45 b Fk(It)33 b(is)f(assumes)f
-(that)i(the)g(system)f(time)g(\(returned)h(b)n(y)f(the)g(C)h(time\(\))g
-(function\))g(follo)n(ws)e(the)i(POSIX)427 3764 y(standard,)24
-b(represen)n(ting)e(a)h(con)n(tin)n(uous)f(monotonic)h(increasing)f
-(coun)n(t)h(of)g(SI)h(seconds)f(since)g(the)h(ep)r(o)r(c)n(h)427
-3864 y(00:00:00)j(UTC)k(1)e(Jan)n(uary)f(1970)g(AD)j(\(equiv)-5
-b(alen)n(t)30 b(to)g(T)-7 b(AI)30 b(with)g(a)g(constan)n(t)f
-(o\013set\).)44 b(Resolution)30 b(is)427 3963 y(one)d(second.)340
-4099 y Fj(\017)45 b Fk(An)24 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(TimeF)-7 b(rame)23 b(has)g(a)g(TimeScale)h(v)-5
-b(alue)23 b(whic)n(h)h(cannot)f(b)r(e)h(con)n(v)n(erted)427
-4199 y(to)k(T)-7 b(AI)28 b(\(e.g.)36 b Ft(")p Fk(angular)p
-Ft(")26 b Fk(systems)h(suc)n(h)g(as)g(UT1,)g(GMST,)h(LMST)g(and)g
-(LAST\).)340 4335 y Fj(\017)45 b Fk(An)n(y)28 b(inaccuracy)e(in)i(the)g
-(system)f(clo)r(c)n(k)g(will)h(b)r(e)g(re\015ected)f(in)h(the)g(v)-5
-b(alue)27 b(returned)h(b)n(y)f(this)h(function.)p 0 4541
-V 0 4672 a FA(AST)p Fe(_)p FA(CUR)-15 b(VE)1318 4673
-y Fd(Dra)m(w)38 b(a)g(geo)s(desic)g(curv)m(e)2972 4672
-y FA(AST)p Fe(_)p FA(CUR)-15 b(VE)0 4868 y Fc(Description:)44
-b Fk(This)24 b(routine)g(dra)n(ws)f(a)h(geo)r(desic)f(curv)n(e)g(b)r
-(et)n(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts)g(in)g(the)h(ph)n(ysical)e(co)
-r(ordinate)g(system)227 4967 y(of)g(a)f(Plot.)34 b(The)23
-b(curv)n(e)e(dra)n(wn)g(is)h(the)h(path)g(of)f(shortest)g(distance)g
-(joining)g(the)h(t)n(w)n(o)e(p)r(oin)n(ts)h(\(as)g(de\014ned)h(b)n(y)f
-(the)227 5067 y(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)30 b(function)g(for)e
-(the)i(curren)n(t)e(F)-7 b(rame)29 b(of)g(the)g(Plot\).)41
-b(F)-7 b(or)29 b(example,)g(if)g(the)h(curren)n(t)e(F)-7
-b(rame)227 5167 y(is)24 b(a)g(basic)f(F)-7 b(rame,)25
-b(then)f(the)g(curv)n(e)g(joining)f(the)i(t)n(w)n(o)e(p)r(oin)n(ts)h
-(will)g(b)r(e)h(a)e(straigh)n(t)g(line)h(in)h(ph)n(ysical)e(co)r
-(ordinate)227 5266 y(space.)34 b(If)23 b(the)f(curren)n(t)f(F)-7
-b(rame)21 b(is)h(more)f(sp)r(ecialised)g(and)h(describ)r(es,)g(for)g
-(instance,)g(a)g(sky)f(co)r(ordinate)g(system,)227 5366
-y(then)32 b(the)f(geo)r(desic)g(curv)n(e)f(w)n(ould)g(b)r(e)i(a)f
-(great)e(circle)i(in)g(ph)n(ysical)g(co)r(ordinate)e(space)i(passing)f
-(through)g(the)227 5466 y(t)n(w)n(o)d(sky)g(p)r(ositions)g(giv)n(en.)
-227 5593 y(Note)g(that)g(the)g(geo)r(desic)f(curv)n(e)g(is)h
-(transformed)e(in)n(to)i(graphical)e(co)r(ordinate)h(space)g(for)g
-(plotting,)h(so)f(that)h(a)227 5693 y(straigh)n(t)20
-b(line)h(in)g(ph)n(ysical)e(co)r(ordinates)h(ma)n(y)g(result)g(in)h(a)f
-(curv)n(ed)g(line)h(b)r(eing)g(dra)n(wn)e(if)j(the)f(Mapping)f(in)n(v)n
-(olv)n(ed)p eop end
-%%Page: 208 218
-TeXDict begin 208 217 bop 0 52 a FG(208)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(is)e(non-linear.)40
-b(An)n(y)29 b(discon)n(tin)n(uities)g(in)g(the)h(Mapping)e(b)r(et)n(w)n
-(een)h(ph)n(ysical)g(and)f(graphical)g(co)r(ordinates)g(are)227
-451 y(catered)f(for,)g(as)g(is)h(an)n(y)e(clipping)i(established)f
-(using)h(AST)p Ft(_)p Fk(CLIP)-7 b(.)227 572 y(If)38
-b(y)n(ou)f(need)h(to)f(dra)n(w)g(man)n(y)g(geo)r(desic)g(curv)n(es)f
-(end-to-end,)k(then)e(the)g(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE)37
-b(routine)g(is)227 672 y(equiv)-5 b(alen)n(t)28 b(to)f(rep)r(eatedly)g
-(calling)g(AST)p Ft(_)p Fk(CUR)-9 b(VE,)28 b(but)g(will)g(usually)f(b)r
-(e)h(more)f(e\016cien)n(t.)227 793 y(If)h(y)n(ou)f(need)h(to)f(dra)n(w)
-g(curv)n(es)f(whic)n(h)i(are)e(not)i(geo)r(desics,)e(see)i(AST)p
-Ft(_)p Fk(GENCUR)-9 b(VE)27 b(or)g(AST)p Ft(_)p Fk(GRIDLINE.)0
-935 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_CURVE\()d(THIS,)j
-(START,)f(FINISH,)f(STATUS)i(\))0 1078 y Fc(Argumen)m(ts:)259
-1208 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1307
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1433 y Fc(ST)-8
-b(AR)g(T\()33 b Fj(\003)e Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Giv)m
-(en\))427 1533 y Fk(An)f(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d
-(co)r(ordinates)h(of)g(the)427 1632 y(\014rst)e(p)r(oin)n(t)f(on)h(the)
-g(geo)r(desic)e(curv)n(e.)259 1758 y Fc(FINISH\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-1858 y Fk(An)g(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f
-(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 1958 y(second)d(p)r(oin)n(t)h(on)f(the)h(geo)
-r(desic)f(curv)n(e.)259 2084 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2183
-y Fk(The)c(global)e(status.)0 2338 y Fc(Notes:)340 2614
-y Fj(\017)45 b Fk(No)32 b(curv)n(e)f(is)g(dra)n(wn)g(if)h(either)g(of)g
-(the)g(ST)-7 b(AR)g(T)32 b(or)f(FINISH)i(arra)n(ys)c(con)n(tains)i(an)n
-(y)g(co)r(ordinates)f(with)427 2714 y(the)e(v)-5 b(alue)28
-b(AST)p Ft(__)p Fk(BAD.)340 2840 y Fj(\017)45 b Fk(An)28
-b(error)e(results)h(if)h(the)g(base)f(F)-7 b(rame)27
-b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340 2966
-y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3065 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 3251 3780 12 v 0 3382
-a FA(AST)p Fe(_)p FA(DECOMPOSE)1554 3381 y Fd(Decomp)s(ose)38
-b(a)1435 3494 y(Mapping)g(in)m(to)f(t)m(w)m(o)1610 3594
-y(comp)s(onen)m(t)1641 3707 y(Mappings)2575 3382 y FA(AST)p
-Fe(_)p FA(DECOMPOSE)0 3882 y Fc(Description:)44 b Fk(This)36
-b(routine)g(returns)f(p)r(oin)n(ters)g(to)h(t)n(w)n(o)f(Mappings)g
-(whic)n(h,)j(when)e(applied)g(either)g(in)g(series)e(or)227
-3982 y(parallel,)27 b(are)f(equiv)-5 b(alen)n(t)28 b(to)f(the)h
-(supplied)g(Mapping.)227 4103 y(Since)h(the)g(F)-7 b(rame)28
-b(class)f(inherits)i(from)f(the)h(Mapping)f(class,)g(F)-7
-b(rames)27 b(can)h(b)r(e)h(considered)f(as)f(sp)r(ecial)i(t)n(yp)r(es)
-227 4203 y(of)f(Mappings)f(and)g(so)g(this)h(metho)r(d)g(can)f(b)r(e)h
-(used)g(to)f(decomp)r(ose)g(either)h(CmpMaps)f(or)g(CmpF)-7
-b(rames.)0 4345 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_DECOMPOSE\()37 b(THIS,)42 b(MAP1,)g(MAP2,)f(SERIES,)g(INVERT1,)f
-(INVERT2,)g(STATUS)h(\))0 4488 y Fc(Argumen)m(ts:)259
-4618 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4717
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259 4843
-y Fc(MAP1)k(=)g(INTEGER)f(\(Returned\))427 4943 y Fk(A)d(p)r(oin)n(ter)
-f(to)h(\014rst)f(comp)r(onen)n(t)h(Mapping.)259 5069
-y Fc(MAP2)k(=)g(INTEGER)f(\(Returned\))427 5169 y Fk(A)d(p)r(oin)n(ter)
-f(to)h(second)f(comp)r(onen)n(t)g(Mapping.)259 5295 y
-Fc(SERIES)k(=)h(LOGICAL)h(\(Returned\))427 5394 y Fk(Indicates)24
-b(if)h(the)f(comp)r(onen)n(t)g(Mappings)g(are)f(applied)h(in)h(series)e
-(or)g(parallel.)35 b(A)24 b(.TR)n(UE.)g(v)-5 b(alue)24
-b(means)427 5494 y(that)32 b(the)f(supplied)h(Mapping)f(is)g(equiv)-5
-b(alen)n(t)31 b(to)g(applying)f(MAP1)h(follo)n(w)n(ed)f(b)n(y)h(MAP2)f
-(in)i(series.)46 b(A)427 5593 y(zero)33 b(v)-5 b(alue)35
-b(means)e(that)i(the)f(supplied)h(Mapping)f(is)g(equiv)-5
-b(alen)n(t)34 b(to)g(applying)g(MAP1)f(to)i(the)f(lo)n(w)n(er)427
-5693 y(n)n(um)n(b)r(ered)28 b(axes)e(and)i(MAP2)f(to)g(the)h(higher)f
-(n)n(um)n(b)r(ered)g(axes,)g(in)h(parallel.)p eop end
-%%Page: 209 219
-TeXDict begin 209 218 bop 3643 52 a FG(209)259 351 y
-Fc(INVER)-8 b(T1)32 b(=)g(INTEGER)f(\(Returned\))427
-451 y Fk(The)d(v)-5 b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g
-(to)h(b)r(e)g(used)f(with)i(MAP1.)259 582 y Fc(INVER)-8
-b(T2)32 b(=)g(INTEGER)f(\(Returned\))427 681 y Fk(The)d(v)-5
-b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g(to)h(b)r(e)g(used)f
-(with)i(MAP2.)0 841 y Fc(Class)i(Applicabilit)m(y:)259
-975 y(CmpMap)427 1075 y Fk(If)39 b(the)g(supplied)g(Mapping)f(is)g(a)g
-(CmpMap,)j(then)e(MAP1)f(and)h(MAP2)e(will)i(b)r(e)g(returned)f
-(holding)427 1175 y(p)r(oin)n(ters)d(to)g(the)h(comp)r(onen)n(t)f
-(Mappings)g(used)g(to)g(create)g(the)h(CmpMap,)h(either)e(in)h(series)e
-(or)h(par-)427 1274 y(allel.)62 b(Note,)38 b(c)n(hanging)d(the)i(In)n
-(v)n(ert)e(attribute)h(of)g(either)g(of)g(the)g(comp)r(onen)n(t)g
-(Mappings)g(using)f(the)427 1374 y(returned)25 b(p)r(oin)n(ters)f(will)
-i(ha)n(v)n(e)d(no)i(e\013ect)h(on)f(the)g(supplied)g(CmpMap.)36
-b(This)25 b(is)g(b)r(ecause)g(the)h(CmpMap)427 1474 y(remem)n(b)r(ers)
-31 b(and)g(uses)h(the)g(original)e(settings)h(of)h(the)f(In)n(v)n(ert)g
-(attributes)h(\(that)g(is,)g(the)g(v)-5 b(alues)32 b(of)f(the)427
-1573 y(In)n(v)n(ert)23 b(attributes)h(when)g(the)g(CmpMap)g(w)n(as)f
-(\014rst)g(created\).)35 b(These)24 b(are)e(the)j(In)n(v)n(ert)d(v)-5
-b(alues)24 b(whic)n(h)g(are)427 1673 y(returned)j(in)h(INVER)-7
-b(T1)28 b(and)f(INVER)-7 b(T2.)259 1804 y Fc(T)f(ranMap)427
-1903 y Fk(If)22 b(the)g(supplied)g(Mapping)g(is)f(a)g(T)-7
-b(ranMap,)22 b(then)h(MAP1)e(and)g(MAP2)g(will)h(b)r(e)g(returned)f
-(holding)h(p)r(oin)n(t-)427 2003 y(ers)27 b(to)h(the)g(forw)n(ard)f
-(and)g(in)n(v)n(erse)g(Mappings)g(represen)n(ted)g(b)n(y)g(the)i(T)-7
-b(ranMap)27 b(\(zero)g(will)h(b)r(e)g(returned)427 2102
-y(for)d(SERIES\).)g(Note,)i(c)n(hanging)d(the)i(In)n(v)n(ert)e
-(attribute)i(of)f(either)h(of)f(the)h(comp)r(onen)n(t)f(Mappings)g
-(using)427 2202 y(the)h(returned)e(p)r(oin)n(ters)h(will)g(ha)n(v)n(e)f
-(no)h(e\013ect)g(on)g(the)g(supplied)h(T)-7 b(ranMap.)35
-b(This)25 b(is)g(b)r(ecause)f(the)i(T)-7 b(ran-)427 2302
-y(Map)29 b(remem)n(b)r(ers)e(and)h(uses)g(the)h(original)e(settings)h
-(of)h(the)f(In)n(v)n(ert)g(attributes)g(\(that)h(is,)g(the)g(v)-5
-b(alues)28 b(of)427 2401 y(the)c(In)n(v)n(ert)f(attributes)g(when)h
-(the)g(T)-7 b(ranMap)23 b(w)n(as)f(\014rst)i(created\).)35
-b(These)23 b(are)g(the)h(In)n(v)n(ert)e(v)-5 b(alues)24
-b(whic)n(h)427 2501 y(are)j(returned)g(in)h(INVER)-7
-b(T1)27 b(and)h(INVER)-7 b(T2.)259 2632 y Fc(Mapping)427
-2731 y Fk(F)g(or)29 b(an)n(y)f(class)g(of)h(Mapping)g(other)g(than)g(a)
-g(CmpMap,)g(MAP1)g(will)g(b)r(e)h(returned)f(holding)f(a)h(clone)g(of)
-427 2831 y(the)f(supplied)f(Mapping)g(p)r(oin)n(ter,)g(and)g(MAP2)f
-(will)i(b)r(e)f(returned)g(holding)g(AST)p Ft(__)p Fk(NULL.)g(INVER)-7
-b(T1)427 2931 y(will)30 b(b)r(e)g(returned)g(holding)f(the)h(curren)n
-(t)f(v)-5 b(alue)29 b(of)h(the)g(In)n(v)n(ert)f(attribute)h(for)f(the)h
-(supplied)g(Mapping,)427 3030 y(and)e(INVER)-7 b(T2)27
-b(will)h(b)r(e)g(returned)f(holding)g(zero.)259 3161
-y Fc(CmpF)-8 b(rame)427 3261 y Fk(If)35 b(the)f(supplied)g(Mapping)g
-(is)g(a)f(CmpF)-7 b(rame,)36 b(then)e(MAP1)g(and)f(MAP2)h(will)g(b)r(e)
-g(returned)g(holding)427 3360 y(p)r(oin)n(ters)f(to)g(the)h(comp)r
-(onen)n(t)f(F)-7 b(rames)32 b(used)i(to)f(create)f(the)i(CmpF)-7
-b(rame.)54 b(The)33 b(comp)r(onen)n(t)g(F)-7 b(rames)427
-3460 y(are)27 b(considered)f(to)i(b)r(e)g(in)g(applied)f(in)h
-(parallel.)259 3591 y Fc(F)-8 b(rame)427 3690 y Fk(F)h(or)31
-b(an)n(y)f(class)g(of)h(F)-7 b(rame)30 b(other)g(than)i(a)e(CmpF)-7
-b(rame,)32 b(MAP1)e(will)h(b)r(e)h(returned)e(holding)h(a)f(clone)h(of)
-427 3790 y(the)d(supplied)g(F)-7 b(rame)27 b(p)r(oin)n(ter,)h(and)f
-(MAP2)g(will)h(b)r(e)g(returned)f(holding)g(AST)p Ft(__)p
-Fk(NULL.)0 3950 y Fc(Notes:)340 4230 y Fj(\017)45 b Fk(The)32
-b(returned)f(In)n(v)n(ert)g(v)-5 b(alues)31 b(should)g(b)r(e)h(used)g
-(in)g(preference)f(to)g(the)h(curren)n(t)f(v)-5 b(alues)31
-b(of)h(the)g(In)n(v)n(ert)427 4330 y(attribute)g(in)h(map1)e(and)h
-(map2.)49 b(This)32 b(is)g(b)r(ecause)g(the)g(attributes)g(ma)n(y)f(ha)
-n(v)n(e)g(c)n(hanged)g(v)-5 b(alue)32 b(since)427 4429
-y(the)c(Mappings)f(w)n(ere)g(com)n(bined.)340 4560 y
-Fj(\017)45 b Fk(An)n(y)28 b(c)n(hanges)f(made)h(to)g(the)g(comp)r(onen)
-n(t)g(Mappings)f(using)h(the)g(returned)g(p)r(oin)n(ters)f(will)h(b)r
-(e)h(re\015ected)427 4660 y(in)f(the)g(supplied)g(Mapping.)p
-0 4855 3780 12 v 0 4985 a FA(AST)p Fe(_)p FA(DELETE)1453
-4986 y Fd(Delete)39 b(an)f(Ob)7 b(ject)2906 4985 y FA(AST)p
-Fe(_)p FA(DELETE)0 5171 y Fc(Description:)44 b Fk(This)28
-b(routine)f(deletes)g(an)g(Ob)5 b(ject,)27 b(freeing)g(all)g(resources)
-e(asso)r(ciated)h(with)i(it)g(and)f(rendering)f(an)n(y)227
-5271 y(remaining)h(p)r(oin)n(ters)g(to)g(the)h(Ob)5 b(ject)28
-b(in)n(v)-5 b(alid.)227 5394 y(Note)35 b(that)h(deletion)f(is)g
-(unconditional,)h(regardless)d(of)i(whether)f(other)h(p)r(oin)n(ters)f
-(to)h(the)g(Ob)5 b(ject)35 b(are)f(still)227 5494 y(in)f(use)e(\(p)r
-(ossibly)h(within)h(other)f(Ob)5 b(jects\).)50 b(A)32
-b(safer)f(approac)n(h)f(is)i(to)g(defer)g(deletion,)i(un)n(til)e(all)g
-(references)227 5593 y(to)h(an)f(Ob)5 b(ject)32 b(ha)n(v)n(e)g
-(expired,)h(b)n(y)f(using)g(AST)p Ft(_)p Fk(BEGIN/AST)p
-Ft(_)p Fk(END)g(\(together)g(with)h(AST)p Ft(_)p Fk(CLONE)f(and)227
-5693 y(AST)p Ft(_)p Fk(ANNUL)d(if)f(necessary\).)p eop
-end
-%%Page: 210 220
-TeXDict begin 210 219 bop 0 52 a FG(210)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_DELETE\()d(THIS,)i(STATUS)g(\))0
-498 y Fc(Argumen)m(ts:)259 632 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en)g
-(and)g(Returned\))427 731 y Fk(P)n(oin)n(ter)26 b(to)h(the)h(Ob)5
-b(ject)27 b(to)g(b)r(e)h(deleted.)37 b(A)28 b(n)n(ull)f(p)r(oin)n(ter)g
-(v)-5 b(alue)28 b(\(AST)p Ft(__)p Fk(NULL\))f(is)h(alw)n(a)n(ys)d
-(returned.)259 862 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 961 y Fk(The)c(global)e(status.)0
-1120 y Fc(Class)31 b(Applicabilit)m(y:)259 1254 y(Ob)5
-b(ject)427 1354 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 1513 y Fc(Notes:)340 1793 y Fj(\017)45 b Fk(This)28
-b(routine)f(attempts)g(to)h(execute)f(ev)n(en)g(if)g(ST)-7
-b(A)g(TUS)29 b(is)e(set)g(to)h(an)f(error)e(v)-5 b(alue)27
-b(on)g(en)n(try)-7 b(,)27 b(although)427 1893 y(no)h(further)f(error)f
-(rep)r(ort)h(will)g(b)r(e)h(made)g(if)g(it)g(subsequen)n(tly)f(fails)g
-(under)h(these)g(circumstances.)p 0 2086 3780 12 v 0
-2217 a FA(AST)p Fe(_)p FA(DELFITS)1072 2218 y Fd(Delete)39
-b(the)f(curren)m(t)g(FITS)h(card)f(in)1604 2318 y(a)h(FitsChan)2873
-2217 y FA(AST)p Fe(_)p FA(DELFITS)0 2478 y Fc(Description:)44
-b Fk(This)33 b(routine)e(deletes)i(the)f(curren)n(t)f(FITS)i(card)e
-(from)h(a)g(FitsChan.)51 b(The)32 b(curren)n(t)f(card)h(ma)n(y)f(b)r(e)
-227 2578 y(selected)e(using)f(the)h(Card)f(attribute)h(\(if)h(its)e
-(index)h(is)g(kno)n(wn\))f(or)g(b)n(y)g(using)h(AST)p
-Ft(_)p Fk(FINDFITS)g(\(if)h(only)e(the)227 2677 y(FITS)g(k)n(eyw)n(ord)
-e(is)h(kno)n(wn\).)227 2801 y(After)h(deletion,)g(the)g(follo)n(wing)f
-(card)f(b)r(ecomes)h(the)h(curren)n(t)f(card.)0 2947
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_DELFITS\()c(THIS,)k
-(STATUS)f(\))0 3094 y Fc(Argumen)m(ts:)259 3228 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 3327 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 3458 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3557
-y Fk(The)c(global)e(status.)0 3716 y Fc(Notes:)340 3996
-y Fj(\017)45 b Fk(This)23 b(function)f(returns)g(without)h(action)e(if)
-i(the)g(FitsChan)f(is)h(initially)f(p)r(ositioned)g(at)g(the)h
-Ft(")p Fk(end-of-\014le)p Ft(")427 4096 y Fk(\(i.e.)38
-b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan\).)340 4226 y Fj(\017)45
-b Fk(If)36 b(there)f(are)f(no)h(subsequen)n(t)f(cards)g(in)i(the)f
-(FitsChan,)i(then)f(the)f(Card)g(attribute)g(is)g(left)h(p)r(oin)n
-(ting)427 4326 y(at)e(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")e Fk(after)h(deletion)h(\(i.e.)55 b(is)33 b(set)h(to)f(one)g(more)
-g(than)g(the)h(n)n(um)n(b)r(er)g(of)f(cards)f(in)i(the)427
-4425 y(FitsChan\).)p 0 4619 V 0 4750 a FA(AST)p Fe(_)p
-FA(DIST)-11 b(ANCE)1320 4751 y Fd(Calculate)37 b(the)h(distance)1280
-4851 y(b)s(et)m(w)m(een)g(t)m(w)m(o)f(p)s(oin)m(ts)h(in)g(a)1730
-4964 y(F)-10 b(rame)2746 4750 y FA(AST)p Fe(_)p FA(DIST)f(ANCE)0
-5124 y Fc(Description:)44 b Fk(This)30 b(function)h(\014nds)f(the)g
-(distance)g(b)r(et)n(w)n(een)g(t)n(w)n(o)f(p)r(oin)n(ts)h(whose)f(F)-7
-b(rame)30 b(co)r(ordinates)e(are)h(giv)n(en.)227 5224
-y(The)f(distance)f(calculated)g(is)h(that)g(along)e(the)i(geo)r(desic)f
-(curv)n(e)f(that)i(joins)g(the)g(t)n(w)n(o)e(p)r(oin)n(ts.)227
-5347 y(F)-7 b(or)34 b(example,)h(in)f(a)f(basic)h(F)-7
-b(rame,)35 b(the)f(distance)f(calculated)h(will)g(b)r(e)g(the)g
-(Cartesian)f(distance)h(along)e(the)227 5447 y(straigh)n(t)k(line)h
-(joining)g(the)h(t)n(w)n(o)e(p)r(oin)n(ts.)65 b(F)-7
-b(or)37 b(a)f(more)g(sp)r(ecialised)h(F)-7 b(rame)36
-b(describing)h(a)f(sky)h(co)r(ordinate)227 5546 y(system,)25
-b(ho)n(w)n(ev)n(er,)f(it)h(w)n(ould)f(b)r(e)i(the)f(distance)f(along)g
-(the)h(great)f(circle)g(passing)g(through)g(t)n(w)n(o)g(sky)g(p)r
-(ositions.)0 5693 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_DISTANCE\()38 b(THIS,)k(POINT1,)e(POINT2,)h(STATUS)g(\))p
-eop end
-%%Page: 211 221
-TeXDict begin 211 220 bop 3643 52 a FG(211)0 351 y Fc(Argumen)m(ts:)259
-492 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 592 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 727
-y Fc(POINT1\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 827 y Fk(An)d(arra)n(y)c(with)k(one)f(elemen)n(t)g(for)f(eac)
-n(h)h(F)-7 b(rame)26 b(axis)g(\(Naxes)h(attribute\))h(con)n(taining)e
-(the)h(co)r(ordinates)427 926 y(of)h(the)g(\014rst)f(p)r(oin)n(t.)259
-1061 y Fc(POINT2\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 1161 y Fk(An)22 b(arra)n(y)d(with)j(one)f(elemen)n(t)
-h(for)f(eac)n(h)f(F)-7 b(rame)21 b(axis)g(con)n(taining)f(the)i(co)r
-(ordinates)e(of)i(the)g(second)e(p)r(oin)n(t.)259 1296
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1396 y Fk(The)c(global)e(status.)0 1562 y Fc(Returned)32
-b(V)-8 b(alue:)259 1703 y(AST)p Ft(_)p Fc(DIST)g(ANCE)33
-b(=)f(DOUBLE)g(PRECISION)427 1803 y Fk(The)c(distance)f(b)r(et)n(w)n
-(een)h(the)g(t)n(w)n(o)f(p)r(oin)n(ts.)0 1970 y Fc(Notes:)340
-2257 y Fj(\017)45 b Fk(This)30 b(function)g(will)f(return)g(a)g
-Ft(")p Fk(bad)p Ft(")g Fk(result)g(v)-5 b(alue)29 b(\(AST)p
-Ft(__)p Fk(BAD\))h(if)g(an)n(y)f(of)g(the)h(input)g(co)r(ordinates)427
-2356 y(has)d(this)h(v)-5 b(alue.)340 2491 y Fj(\017)45
-b Fk(A)29 b Ft(")p Fk(bad)p Ft(")f Fk(v)-5 b(alue)28
-b(will)h(also)e(b)r(e)i(returned)f(if)h(this)g(function)g(is)f(in)n(v)n
-(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)30 b(set)e(to)g(an)h(error)427
-2591 y(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 2795 3780 12 v 0 2926 a FA(AST)p Fe(_)p
-FA(DO)l(WNSIZE)1323 2927 y Fd(Reduce)39 b(the)g(n)m(um)m(b)s(er)f(of)
-1355 3026 y(v)m(ertices)g(in)g(a)h(P)m(olygon)2708 2926
-y FA(AST)p Fe(_)p FA(DO)l(WNSIZE)0 3220 y Fc(Description:)44
-b Fk(This)26 b(function)h(returns)e(a)g(p)r(oin)n(ter)h(to)g(a)f(new)h
-(P)n(olygon)e(that)i(con)n(tains)f(a)g(subset)h(of)g(the)h(v)n(ertices)
-d(in)227 3319 y(the)k(supplied)f(P)n(olygon.)35 b(The)27
-b(subset)g(is)g(c)n(hosen)f(so)g(that)i(the)f(returned)g(P)n(olygon)e
-(is)h(a)h(go)r(o)r(d)f(appro)n(ximation)227 3419 y(to)g(the)h(supplied)
-f(P)n(olygon,)e(within)j(the)f(limits)h(sp)r(eci\014ed)f(b)n(y)g(the)g
-(supplied)g(parameter)f(v)-5 b(alues.)36 b(That)26 b(is,)g(the)227
-3519 y(densit)n(y)g(of)g(p)r(oin)n(ts)f(in)h(the)g(returned)g(P)n
-(olygon)d(is)j(greater)e(at)i(p)r(oin)n(ts)f(where)g(the)i(curv)-5
-b(ature)25 b(of)g(the)h(b)r(oundary)227 3618 y(of)i(the)g(supplied)g(P)
-n(olygon)d(is)j(greater.)0 3772 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_DOWNSIZE\()38 b(THIS,)k(MAXERR,)e(MAXVERT,)h
-(STATUS)g(\))0 3926 y Fc(Argumen)m(ts:)259 4067 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 4167 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(P)n(olygon.)259 4302 y Fc(MAXERR)j(=)h(DOUBLE)g(PRECISION)
-f(\(Giv)m(en\))427 4402 y Fk(The)22 b(maxim)n(um)g(allo)n(w)n(ed)e
-(discrepancy)g(b)r(et)n(w)n(een)i(the)g(supplied)g(and)g(returned)f(P)n
-(olygons,)g(expressed)f(as)427 4501 y(a)k(geo)r(desic)f(distance)h
-(within)g(the)h(P)n(olygon's)c(co)r(ordinate)i(frame.)36
-b(If)24 b(this)g(is)g(zero)f(or)g(less,)i(the)f(returned)427
-4601 y(P)n(olygon)i(will)h(ha)n(v)n(e)g(the)h(n)n(um)n(b)r(er)f(of)h(v)
-n(ertices)e(sp)r(eci\014ed)i(b)n(y)f(MAXVER)-7 b(T.)259
-4736 y Fc(MAXVER)f(T)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-4836 y Fk(The)36 b(maxim)n(um)f(allo)n(w)n(ed)f(n)n(um)n(b)r(er)h(of)h
-(v)n(ertices)e(in)i(the)f(returned)g(P)n(olygon.)59 b(If)35
-b(this)h(is)f(less)g(than)h(3,)427 4935 y(the)c(n)n(um)n(b)r(er)e(of)h
-(v)n(ertices)f(in)h(the)g(returned)g(P)n(olygon)d(will)k(b)r(e)f(the)g
-(minim)n(um)h(needed)f(to)g(ac)n(hiev)n(e)e(the)427 5035
-y(maxim)n(um)f(discrepancy)e(sp)r(eci\014ed)i(b)n(y)f(MAXERR.)259
-5170 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5270 y Fk(The)c(global)e(status.)0 5436
-y Fc(Returned)32 b(V)-8 b(alue:)259 5577 y(AST)p Ft(_)p
-Fc(DO)m(WNSIZE)32 b(=)g(INTEGER)427 5677 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(new)f(P)n(olygon.)p eop end
-%%Page: 212 222
-TeXDict begin 212 221 bop 0 52 a FG(212)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-642 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 742 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 949 3780 12 v 0 1080 a FA(AST)p Fe(_)p FA(DSBSPECFRAME)210
-b Fd(Create)37 b(a)1752 1179 y(DSB-)1611 1279 y(Sp)s(ecF)-10
-b(rame)2320 1080 y FA(AST)p Fe(_)p FA(DSBSPECFRAME)0
-1476 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(DSBSp)r(ecF)-7 b(rame)28 b(and)g(optionally)e(initialises)i(its)f
-(attributes.)227 1605 y(A)37 b(DSBSp)r(ecF)-7 b(rame)37
-b(is)f(a)g(sp)r(ecialised)g(form)g(of)h(Sp)r(ecF)-7 b(rame)36
-b(whic)n(h)h(represen)n(ts)e(p)r(ositions)h(in)g(a)g(sp)r(ectrum)227
-1704 y(obtained)f(using)g(a)f(dual)h(sideband)g(instrumen)n(t.)60
-b(Suc)n(h)35 b(an)g(instrumen)n(t)g(pro)r(duces)f(a)h(sp)r(ectrum)g(in)
-h(whic)n(h)227 1804 y(eac)n(h)f(p)r(oin)n(t)h(con)n(tains)e(con)n
-(tributions)h(from)g(t)n(w)n(o)g(distinctly)h(di\013eren)n(t)f
-(frequencies,)i(one)f(from)f(the)h Ft(")p Fk(lo)n(w)n(er)227
-1903 y(side)41 b(band)p Ft(")f Fk(\(LSB\))h(and)f(one)g(from)h(the)g
-Ft(")p Fk(upp)r(er)f(side)g(band)p Ft(")g Fk(\(USB\).)i(Corresp)r
-(onding)d(LSB)h(and)g(USB)227 2003 y(frequencies)d(are)f(connected)h(b)
-n(y)g(the)g(fact)h(that)f(they)g(are)g(an)f(equal)h(distance)g(on)g
-(either)g(side)g(of)g(a)g(\014xed)227 2103 y(cen)n(tral)27
-b(frequency)g(kno)n(wn)g(as)g(the)h Ft(")p Fk(Lo)r(cal)e(Oscillator)p
-Ft(")g Fk(\(LO\))i(frequency)-7 b(.)227 2231 y(When)33
-b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g(a)f(sp)r(ectrum,)i(it)
-g(is)e(necessary)f(to)i(indicate)g(whether)g(the)g(quoted)227
-2331 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)g(or)f(the)i
-(corresp)r(onding)d(LSB)i(p)r(osition.)36 b(The)27 b(SideBand)g
-(attribute)g(pro)n(vides)227 2431 y(this)36 b(indication.)60
-b(Another)35 b(option)g(that)h(the)f(SideBand)g(attribute)h(pro)n
-(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r(ectral)227
-2530 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)f(o\013set)g
-(from)h(the)g(LO)f(frequency)-7 b(.)227 2659 y(In)32
-b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n(y)g
-(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)227
-2759 y Ft(")p Fk(cen)n(tral)p Ft(")37 b Fk(sp)r(ectral)h(p)r(osition.)
-69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h(that)f
-(of)h(some)f(in)n(teresting)f(sp)r(ectral)227 2858 y(feature.)f(The)23
-b(distance)h(from)f(this)h(cen)n(tral)f(p)r(osition)g(to)h(the)g(LO)f
-(frequency)g(is)g(kno)n(wn)g(as)g(the)h Ft(")p Fk(in)n(termediate)227
-2958 y(frequency)p Ft(")k Fk(\(IF\).)h(The)g(v)-5 b(alue)28
-b(supplied)h(for)f(IF)h(can)f(b)r(e)h(a)f(signed)g(v)-5
-b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f(the)227
-3057 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n(w)g(the)h
-(cen)n(tral)f(p)r(osition.)0 3215 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_DSBSPECFRAME)o(\()38 b(OPTIONS,)i(STATUS)h(\))
-0 3373 y Fc(Argumen)m(ts:)259 3518 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3617 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-3717 y(b)r(e)e(used)f(for)g(initialising)g(the)h(new)f(DSBSp)r(ecF)-7
-b(rame.)39 b(The)28 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g(to)g(that)
-g(for)g(the)427 3816 y(AST)p Ft(_)p Fk(SET)f(routine.)259
-3953 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4053 y Fk(The)c(global)e(status.)0 4223
-y Fc(Returned)32 b(V)-8 b(alue:)259 4368 y(AST)p Ft(_)p
-Fc(DSBSPECFRAME)32 b(=)g(INTEGER)427 4467 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(DSBSp)r(ecF)-7 b(rame.)0 4638 y Fc(Notes:)340
-4928 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5028 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 5236 V 0 5366 a FA(AST)p Fe(_)p FA(ELLIPSE)1482 5367
-y Fd(Create)37 b(a)i(Ellipse)2893 5366 y FA(AST)p Fe(_)p
-FA(ELLIPSE)0 5564 y Fc(Description:)44 b Fk(This)28 b(function)g
-(creates)f(a)g(new)g(Ellipse)g(and)h(optionally)f(initialises)g(its)h
-(attributes.)227 5693 y(A)g(Ellipse)f(is)h(a)f(Region)g(whic)n(h)g
-(represen)n(ts)g(a)g(elliptical)g(area)g(within)h(the)g(supplied)g
-(2-dimensional)e(F)-7 b(rame.)p eop end
-%%Page: 213 223
-TeXDict begin 213 222 bop 3643 52 a FG(213)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_ELLIPSE\()c(FRAME,)i(FORM,)g
-(CENTRE,)g(POINT1,)g(POINT2,)f(UNC,)i(OPTIONS,)f(STATUS)227
-451 y(\))0 600 y Fc(Argumen)m(ts:)259 735 y(FRAME)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 835 y Fk(A)e(p)r(oin)n(ter)f(to)g(the)
-g(F)-7 b(rame)29 b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42
-b(It)30 b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41
-b(A)29 b(deep)427 934 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)h
-(F)-7 b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h(c)
-n(hanges)f(made)h(to)g(the)427 1034 y(F)-7 b(rame)27
-b(using)h(the)g(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h
-(e\013ect)h(the)g(Region.)259 1166 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m
-(en\))427 1266 y Fk(Indicates)26 b(ho)n(w)g(the)g(ellipse)g(is)h
-(describ)r(ed)f(b)n(y)f(the)i(remaining)e(parameters.)35
-b(A)26 b(v)-5 b(alue)27 b(of)f(zero)f(indicates)427 1365
-y(that)32 b(the)g(ellipse)g(is)f(sp)r(eci\014ed)h(b)n(y)g(a)f(cen)n
-(tre)g(p)r(osition)h(and)f(t)n(w)n(o)g(p)r(ositions)g(on)h(the)g
-(circumference.)48 b(A)427 1465 y(v)-5 b(alue)25 b(of)g(one)g
-(indicates)g(that)g(the)h(ellipse)f(is)g(sp)r(eci\014ed)g(b)n(y)g(its)g
-(cen)n(tre)g(p)r(osition,)g(the)h(half-lengths)e(of)h(its)427
-1565 y(t)n(w)n(o)i(axes,)g(and)g(the)h(orien)n(tation)e(of)i(its)g
-(\014rst)f(axis.)259 1697 y Fc(CENTRE\()k(2)h(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1796 y Fk(An)d(arra)n(y)e(con)n(taining)g
-(the)i(co)r(ordinates)e(at)i(the)g(cen)n(tre)f(of)g(the)h(ellipse.)259
-1928 y Fc(POINT1\()k(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-2028 y Fk(If)25 b(F)n(ORM)g(is)f(zero,)h(this)g(arra)n(y)d(should)j
-(con)n(tain)f(the)h(co)r(ordinates)e(of)i(one)f(of)h(the)g(four)f(p)r
-(oin)n(ts)h(where)f(an)427 2128 y(axis)j(of)h(the)g(ellipse)g(crosses)d
-(the)j(circumference)f(of)h(the)g(ellipse.)37 b(If)28
-b(F)n(ORM)g(is)f(one,)h(it)g(should)f(con)n(tain)427
-2227 y(the)39 b(lengths)f(of)g(semi-ma)5 b(jor)36 b(and)i(semi-minor)g
-(axes)f(of)h(the)g(ellipse,)j(giv)n(en)c(as)h(geo)r(desic)f(distances)
-427 2327 y(within)29 b(the)f(F)-7 b(rame.)259 2459 y
-Fc(POINT2\()32 b(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-2558 y Fk(If)k(F)n(ORM)f(is)g(zero,)h(this)g(arra)n(y)d(should)i(con)n
-(taining)f(the)h(co)r(ordinates)f(at)h(some)g(other)g(p)r(oin)n(t)g(on)
-g(the)427 2658 y(circumference)25 b(of)h(the)g(ellipse,)g(distinct)h
-(from)e(POINT1.)35 b(If)26 b(F)n(ORM)g(is)f(one,)h(the)g(\014rst)g
-(elemen)n(t)g(of)f(this)427 2758 y(arra)n(y)30 b(should)h(hold)h(the)g
-(angle)f(b)r(et)n(w)n(een)h(the)g(second)g(axis)f(of)h(the)g(F)-7
-b(rame)31 b(and)h(the)g(\014rst)g(ellipse)f(axis)427
-2857 y(\(i.e.)52 b(the)33 b(ellipse)f(axis)f(whic)n(h)i(is)f(sp)r
-(eci\014ed)h(\014rst)f(in)g(the)h(POINT1)e(arra)n(y\),)h(and)g(the)h
-(second)e(elemen)n(t)427 2957 y(will)g(b)r(e)g(ignored.)45
-b(The)31 b(angle)f(should)g(b)r(e)h(giv)n(en)f(in)h(radians,)f
-(measured)g(p)r(ositiv)n(e)g(in)h(the)g(same)f(sense)427
-3057 y(as)g(rotation)g(from)g(the)h(p)r(ositiv)n(e)f(direction)g(of)h
-(the)g(second)f(F)-7 b(rame)30 b(axis)g(to)g(the)h(p)r(ositiv)n(e)f
-(direction)h(of)427 3156 y(the)d(\014rst)g(F)-7 b(rame)27
-b(axis.)259 3288 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3388 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 3487 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g
-(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h
-(on)f(the)h(b)r(oundary)f(of)427 3587 y(the)g(Bo)n(x)e(is)h(found)h(b)n
-(y)f(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-3687 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 3786 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-3886 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4002 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4101 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4201 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4301 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 4400 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-4500 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 4616 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-4715 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-4815 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 4915 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 5014 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 5146 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 5246 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h
-(optional)g(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g
-(to)427 5346 y(b)r(e)24 b(used)f(for)g(initialising)f(the)i(new)f
-(Ellipse.)35 b(The)23 b(syn)n(tax)f(used)i(is)f(iden)n(tical)f(to)h
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 5445 y(routine.)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 214 224
-TeXDict begin 214 223 bop 0 52 a FG(214)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 484 y(AST)p Ft(_)p Fc(ELLIPSE)33 b(=)f(INTEGER)427
-584 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Ellipse.)0
-742 y Fc(Notes:)340 1021 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1121 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1313 3780 12 v 0 1444 a FA(AST)p Fe(_)p FA(ELLIPSEP)-11
-b(ARS)1586 1445 y Fd(Returns)39 b(the)1643 1545 y(geometric)1459
-1659 y(parameters)d(of)i(an)1720 1774 y(Ellipse)2536
-1444 y FA(AST)p Fe(_)p FA(ELLIPSEP)-11 b(ARS)0 1956 y
-Fc(Description:)44 b Fk(This)28 b(routine)f(returns)g(the)h(geometric)e
-(parameters)g(describing)h(the)h(supplied)g(ellipse.)0
-2102 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_ELLIPSEPARS)o(\()
-c(THIS,)j(CENTRE,)g(A,)i(B,)f(ANGLE,)f(P1,)i(P2,)f(STATUS)f(\))0
-2248 y Fc(Argumen)m(ts:)259 2381 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2480 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2610 y Fc(CENTRE\()j(2)h(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-2709 y Fk(The)d(co)r(ordinates)e(of)i(the)g(Ellipse)f(cen)n(tre)g(are)f
-(returned)i(in)f(this)h(arra)n(ys.)259 2839 y Fc(A)k(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 2938 y Fk(Returned)c(holding)f(the)h
-(half-length)g(of)f(the)h(\014rst)g(axis)e(of)i(the)g(ellipse.)259
-3068 y Fc(B)k(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-3167 y Fk(Returned)d(holding)f(the)h(half-length)g(of)f(the)h(second)f
-(axis)g(of)g(the)h(ellipse.)259 3297 y Fc(ANGLE)k(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 3396 y Fk(If)39 b(the)g(co)r(ordinate)e
-(system)h(in)h(whic)n(h)f(the)h(Ellipse)f(is)g(de\014ned)h(has)f(axes)g
-(\(X,Y\),)h(then)g(ANGLE)g(is)427 3496 y(returned)32
-b(holding)g(the)g(angle)f(from)h(the)h(p)r(ositiv)n(e)e(direction)h(of)
-g(the)h(Y)f(axis)f(to)h(the)h(\014rst)f(axis)f(of)h(the)427
-3596 y(ellipse,)22 b(in)f(radians.)33 b(P)n(ositiv)n(e)19
-b(rotation)g(is)h(in)h(the)g(same)e(sense)h(as)g(rotation)f(from)h(the)
-h(p)r(ositiv)n(e)f(direction)427 3695 y(of)28 b(Y)g(to)f(the)h(p)r
-(ositiv)n(e)f(direction)h(of)f(X.)259 3825 y Fc(P1\()32
-b(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-3924 y Fk(An)j(arra)n(y)c(in)j(whic)n(h)g(to)g(return)f(the)h(co)r
-(ordinates)f(at)g(one)h(of)g(the)g(t)n(w)n(o)f(ends)h(of)g(the)g
-(\014rst)f(axis)g(of)h(the)427 4024 y(ellipse.)259 4153
-y Fc(P2\()f(2)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-4253 y Fk(An)d(arra)n(y)e(in)i(whic)n(h)g(to)f(return)h(the)g(co)r
-(ordinates)e(at)i(one)f(of)h(the)g(t)n(w)n(o)f(ends)h(of)f(the)h
-(second)g(axis)f(of)g(the)427 4353 y(ellipse.)259 4482
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4582 y Fk(The)c(global)e(status.)0 4740 y Fc(Notes:)340
-5019 y Fj(\017)45 b Fk(If)22 b(the)g(co)r(ordinate)e(system)h(represen)
-n(ted)f(b)n(y)h(the)h(Ellipse)e(has)h(b)r(een)h(c)n(hanged)e(since)h
-(it)h(w)n(as)e(\014rst)h(created,)427 5119 y(the)e(returned)f
-(parameters)f(refer)h(to)h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g
-(system,)i(rather)d(than)i(the)g(original)427 5218 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-5318 y(system)36 b(is)h(non-linear,)g(the)g(shap)r(e)f(represen)n(ted)f
-(b)n(y)h(the)h(supplied)g(Ellipse)f(ob)5 b(ject)36 b(ma)n(y)g(not)g(b)r
-(e)h(an)427 5418 y(accurate)27 b(ellipse.)340 5547 y
-Fj(\017)45 b Fk(V)-7 b(alues)20 b(of)h(AST)p Ft(__)p
-Fk(BAD)f(are)f(returned)h(for)g(the)h(parameters)e(without)h(error)f
-(if)i(the)f(ellipse)h(is)f(degenerate)427 5647 y(or)27
-b(unde\014ned.)p eop end
-%%Page: 215 225
-TeXDict begin 215 224 bop 3643 52 a FG(215)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(END)1357 483 y Fd(End)39
-b(an)g(AST)f(con)m(text)3152 482 y FA(AST)p Fe(_)p FA(END)0
-654 y Fc(Description:)44 b Fk(This)h(routine)f(ends)h(an)g(AST)g(con)n
-(text)f(whic)n(h)h(w)n(as)f(b)r(egun)g(with)i(a)e(matc)n(hing)g(in)n(v)
-n(o)r(cation)g(of)227 754 y(AST)p Ft(_)p Fk(BEGIN.)18
-b(An)n(y)h(Ob)5 b(ject)18 b(p)r(oin)n(ters)g(created)f(within)i(this)g
-(con)n(text)f(will)h(b)r(e)f(ann)n(ulled)h(\(just)g(as)e(if)i(AST)p
-Ft(_)p Fk(ANNUL)227 853 y(had)24 b(b)r(een)h(in)n(v)n(ok)n(ed\))e(and)h
-(will)g(cease)f(to)h(b)r(e)h(v)-5 b(alid)24 b(afterw)n(ards,)f(unless)h
-(they)h(ha)n(v)n(e)e(previously)f(b)r(een)j(exp)r(orted)227
-953 y(using)k(AST)p Ft(_)p Fk(EXPOR)-7 b(T)28 b(or)f(rendered)h(exempt)
-i(using)e(AST)p Ft(_)p Fk(EXEMPT.)g(If)h(ann)n(ulling)f(a)h(p)r(oin)n
-(ter)f(causes)g(an)227 1053 y(Ob)5 b(ject's)24 b(RefCoun)n(t)h
-(attribute)f(to)h(fall)f(to)g(zero)g(\(whic)n(h)g(happ)r(ens)h(when)f
-(the)h(last)f(p)r(oin)n(ter)g(to)g(it)h(is)f(ann)n(ulled\),)227
-1152 y(then)k(the)g(Ob)5 b(ject)28 b(will)g(b)r(e)g(deleted.)0
-1300 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_END\()e(STATUS)h
-(\))0 1447 y Fc(Argumen)m(ts:)259 1581 y(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1681
-y Fk(The)c(global)e(status.)0 1840 y Fc(Class)31 b(Applicabilit)m(y:)
-259 1975 y(Ob)5 b(ject)427 2074 y Fk(This)28 b(routine)f(applies)g(to)h
-(all)f(Ob)5 b(jects.)0 2234 y Fc(Notes:)340 2514 y Fj(\017)45
-b Fk(This)28 b(routine)f(attempts)h(to)g(execute)f(ev)n(en)g(if)h(ST)-7
-b(A)g(TUS)29 b(is)e(set)h(to)f(an)h(error)d(v)-5 b(alue.)340
-2645 y Fj(\017)45 b Fk(Con)n(texts)27 b(delimited)i(b)n(y)e(AST)p
-Ft(_)p Fk(BEGIN)g(and)h(AST)p Ft(_)p Fk(END)g(ma)n(y)e(b)r(e)i(nested)g
-(to)g(an)n(y)e(depth.)p 0 2840 V 0 2970 a FA(AST)p Fe(_)p
-FA(ESCAPES)1218 2971 y Fd(Con)m(trol)36 b(whether)i(graphical)1128
-3086 y(escap)s(e)h(sequences)g(are)f(included)1652 3197
-y(in)g(strings)2832 2970 y FA(AST)p Fe(_)p FA(ESCAPES)0
-3381 y Fc(Description:)44 b Fk(The)39 b(Plot)g(class)f(de\014nes)g(a)h
-(set)g(of)g(escap)r(e)f(sequences)g(whic)n(h)h(can)f(b)r(e)i(included)f
-(within)h(a)e(text)227 3481 y(string)29 b(in)g(order)f(to)h(con)n(trol)
-f(the)h(app)r(earance)f(of)h(sub-strings)f(within)h(the)h(text.)42
-b(See)29 b(the)g(Escap)r(e)f(attribute)227 3581 y(for)j(a)g
-(description)f(of)h(these)g(escap)r(e)g(sequences.)46
-b(It)32 b(is)f(usually)f(inappropriate)g(for)g(AST)i(to)f(return)g
-(strings)227 3680 y(con)n(taining)i(suc)n(h)h(escap)r(e)f(sequences)h
-(when)g(called)g(b)n(y)f(application)h(co)r(de.)56 b(F)-7
-b(or)33 b(instance,)j(an)d(application)227 3780 y(whic)n(h)22
-b(displa)n(ys)e(the)i(v)-5 b(alue)22 b(of)f(the)h(Title)g(attribute)g
-(of)f(a)g(F)-7 b(rame)21 b(usually)g(do)r(es)g(not)h(w)n(an)n(t)f(the)h
-(displa)n(y)n(ed)e(string)227 3879 y(to)25 b(include)g(p)r(oten)n
-(tially)g(long)f(escap)r(e)g(sequences)g(whic)n(h)h(a)g(h)n(uman)f
-(read)g(w)n(ould)h(ha)n(v)n(e)e(di\016culy)i(in)n(terpreting.)227
-3979 y(Therefore)37 b(the)h(default)g(b)r(eha)n(viour)f(is)h(for)f(AST)
-h(to)g(strip)g(out)g(suc)n(h)f(escap)r(e)g(sequences)g(when)h(called)g
-(b)n(y)227 4079 y(application)27 b(co)r(de.)37 b(This)27
-b(default)i(b)r(eha)n(viour)d(can)h(b)r(e)h(c)n(hanged)f(using)g(this)h
-(function.)0 4226 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_ESCAPES\()c(NEWVAL,)h(STATUS)h(\))0 4373 y
-Fc(Argumen)m(ts:)259 4507 y(NEWV)-11 b(AL)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4607 y Fk(A)d(\015ag)f(whic)n(h)h(indicates)f(if)h(escap)r
-(es)f(sequences)g(should)g(b)r(e)h(included)g(in)g(returned)f(strings.)
-39 b(If)29 b(zero)f(is)427 4707 y(supplied,)c(escap)r(e)e(sequences)f
-(will)h(b)r(e)h(stripp)r(ed)f(out)h(of)f(all)g(strings)f(returned)h(b)n
-(y)g(an)n(y)f(AST)i(function.)35 b(If)427 4806 y(a)20
-b(p)r(ositiv)n(e)g(v)-5 b(alue)20 b(is)g(supplied,)j(then)d(an)n(y)g
-(escap)r(e)g(sequences)f(will)i(b)r(e)g(retained)e(in)i(the)g(v)-5
-b(alue)20 b(returned)g(to)427 4906 y(the)k(caller.)34
-b(If)24 b(a)e(negativ)n(e)g(v)-5 b(alue)23 b(is)g(supplied,)i(the)e
-(curren)n(t)f(v)-5 b(alue)23 b(of)g(the)h(\015ag)e(will)i(b)r(e)f(left)
-h(unc)n(hanged.)0 5066 y Fc(Class)31 b(Applicabilit)m(y:)259
-5200 y(Ob)5 b(ject)427 5299 y Fk(This)28 b(routine)f(applies)g(to)h
-(all)f(Ob)5 b(jects.)0 5459 y Fc(Returned)32 b(V)-8 b(alue:)259
-5593 y(AST)p Ft(_)p Fc(ESCAPES)32 b(=)g(INTEGER)427 5693
-y Fk(The)c(v)-5 b(alue)27 b(of)h(the)g(\015ag)f(on)g(en)n(try)g(to)h
-(this)f(function.)p eop end
-%%Page: 216 226
-TeXDict begin 216 225 bop 0 52 a FG(216)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-623 y Fj(\017)45 b Fk(This)30 b(function)g(also)f(con)n(trols)f
-(whether)h(the)h(AST)p Ft(_)p Fk(STRIPESCAPES)e(function)i(remo)n(v)n
-(es)e(escap)r(e)h(se-)427 723 y(quences)e(from)h(the)g(supplied)g
-(string,)f(or)f(returns)h(the)h(supplied)g(string)f(without)h(c)n
-(hange.)340 845 y Fj(\017)45 b Fk(This)28 b(function)g(attempts)g(to)f
-(execute)h(ev)n(en)f(if)h(an)f(error)f(has)h(already)f(o)r(ccurred.)p
-0 1024 3780 12 v 0 1154 a FA(AST)p Fe(_)p FA(EXEMPT)1074
-1155 y Fd(Exempt)38 b(an)h(Ob)7 b(ject)38 b(p)s(oin)m(ter)f(from)1322
-1270 y(AST)i(con)m(text)e(handling)2857 1154 y FA(AST)p
-Fe(_)p FA(EXEMPT)0 1438 y Fc(Description:)44 b Fk(This)29
-b(routine)g(exempts)g(an)g(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(from)h(AST)
-g(con)n(text)g(handling,)g(as)f(implemen)n(ted)i(b)n(y)227
-1538 y(AST)p Ft(_)p Fk(BEGIN)h(and)g(AST)p Ft(_)p Fk(END.)g(This)h
-(means)e(that)i(the)f(p)r(oin)n(ter)g(will)g(not)g(b)r(e)h(a\013ected)f
-(when)g(AST)p Ft(_)p Fk(END)227 1637 y(is)36 b(called)f(and)g(will)h
-(remain)f(activ)n(e)f(un)n(til)i(the)g(end)g(of)f(the)h(program,)g(or)e
-(un)n(til)i(explicitly)g(ann)n(ulled)f(using)227 1737
-y(AST)p Ft(_)p Fk(ANNUL.)227 1856 y(If)24 b(p)r(ossible,)g(y)n(ou)f
-(should)h(a)n(v)n(oid)e(using)h(this)h(routine)f(when)h(writing)f
-(applications.)35 b(It)24 b(is)f(pro)n(vided)g(mainly)g(for)227
-1956 y(dev)n(elop)r(ers)30 b(of)i(other)e(libraries,)h(who)g(ma)n(y)g
-(wish)g(to)g(retain)g(references)f(to)h(AST)h(Ob)5 b(jects)31
-b(in)g(in)n(ternal)g(data)227 2055 y(structures,)c(and)h(who)f
-(therefore)g(need)g(to)h(a)n(v)n(oid)e(the)i(e\013ects)g(of)f(AST)p
-Ft(_)p Fk(BEGIN)h(and)f(AST)p Ft(_)p Fk(END.)0 2194 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_EXEMPT\()d(THIS,)i
-(STATUS)g(\))0 2333 y Fc(Argumen)m(ts:)259 2459 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2559 y Fk(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(to)g(b)r(e)h(exempted)g(from)g(con)n(text)f
-(handling.)259 2682 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 2781 y Fk(The)c(global)e(status.)0
-2933 y Fc(Class)31 b(Applicabilit)m(y:)259 3059 y(Ob)5
-b(ject)427 3158 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)p 0 3337 V 0 3467 a FA(AST)p Fe(_)p FA(EXPOR)-11
-b(T)1081 3468 y Fd(Exp)s(ort)37 b(an)i(Ob)7 b(ject)38
-b(p)s(oin)m(ter)f(to)h(an)1548 3568 y(outer)g(con)m(text)2883
-3467 y FA(AST)p Fe(_)p FA(EXPOR)-11 b(T)0 3713 y Fc(Description:)44
-b Fk(This)34 b(routine)g(exp)r(orts)f(an)g(Ob)5 b(ject)34
-b(p)r(oin)n(ter)g(from)f(the)h(curren)n(t)f(AST)i(con)n(text)e(in)n(to)
-h(the)g(con)n(text)227 3812 y(that)f(encloses)e(the)i(curren)n(t)f
-(one.)51 b(This)33 b(means)f(that)g(the)h(p)r(oin)n(ter)f(will)h(no)f
-(longer)f(b)r(e)i(ann)n(ulled)g(when)f(the)227 3912 y(curren)n(t)27
-b(con)n(text)g(is)h(ended)g(\(with)g(AST)p Ft(_)p Fk(END\),)g(but)g
-(only)f(when)h(the)g(next)g(outer)f(con)n(text)g(\(if)i(an)n(y\))e
-(ends.)0 4051 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_EXPORT\()d(THIS,)i(STATUS)g(\))0 4190 y Fc(Argumen)m(ts:)259
-4316 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4416
-y Fk(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h(exp)r(orted.)259
-4538 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4638 y Fk(The)c(global)e(status.)0 4789
-y Fc(Class)31 b(Applicabilit)m(y:)259 4915 y(Ob)5 b(ject)427
-5015 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 5166 y Fc(Notes:)340 5438 y Fj(\017)45 b Fk(It)23
-b(is)g(only)g(sensible)f(to)h(apply)g(this)g(routine)f(to)h(p)r(oin)n
-(ters)f(that)h(ha)n(v)n(e)f(b)r(een)h(created)f(within)i(\(or)e(exp)r
-(orted)427 5538 y(to\))k(the)h(curren)n(t)e(con)n(text)g(and)h(ha)n(v)n
-(e)f(not)h(b)r(een)g(rendered)g(exempt)g(using)g(AST)p
-Ft(_)p Fk(EXEMPT.)e(Applying)427 5637 y(it)k(to)g(an)f(unsuitable)h(Ob)
-5 b(ject)27 b(p)r(oin)n(ter)g(has)g(no)h(e\013ect.)p
-eop end
-%%Page: 217 227
-TeXDict begin 217 226 bop 3643 52 a FG(217)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(FINDFITS)1321 483 y Fd(Find)39
-b(a)f(FITS)i(card)e(in)g(a)1341 583 y(FitsChan)f(b)m(y)i(k)m(eyw)m(ord)
-2802 482 y FA(AST)p Fe(_)p FA(FINDFITS)0 765 y Fc(Description:)44
-b Fk(This)33 b(function)f(searc)n(hes)f(for)g(a)h(card)g(in)g(a)g
-(FitsChan)g(b)n(y)g(k)n(eyw)n(ord.)49 b(The)32 b(searc)n(h)f(commences)
-h(at)227 865 y(the)k(curren)n(t)e(card)g(\(iden)n(ti\014ed)i(b)n(y)f
-(the)g(Card)f(attribute\))i(and)f(ends)g(when)g(a)f(card)h(is)g(found)g
-(whose)f(FITS)227 964 y(k)n(eyw)n(ord)25 b(matc)n(hes)h(the)g(template)
-h(supplied,)g(or)f(when)g(the)h(last)f(card)g(in)g(the)h(FitsChan)f
-(has)g(b)r(een)h(searc)n(hed.)227 1087 y(If)33 b(the)f(searc)n(h)e(is)i
-(successful)g(\(i.e.)50 b(a)32 b(card)f(is)h(found)g(whic)n(h)g(matc)n
-(hes)g(the)g(template\),)i(the)e(con)n(ten)n(ts)f(of)h(the)227
-1187 y(card)j(are)f(returned)h(and)g(the)g(Card)g(attribute)g(is)g
-(adjusted)h(to)f(iden)n(tify)h(the)f(card)g(found)g(or,)i(if)f
-(required,)227 1286 y(the)e(one)f(follo)n(wing)g(it.)54
-b(If)34 b(the)g(searc)n(h)e(is)h(not)h(successful,)g(the)g(function)g
-(returns)f(.F)-9 b(ALSE.)33 b(and)h(the)f(Card)227 1386
-y(attribute)28 b(is)g(set)f(to)h(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)0 1532 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_FINDFITS\()38 b(THIS,)k(NAME,)f(CARD,)h(INC,)g(STATUS)f(\))0
-1678 y Fc(Argumen)m(ts:)259 1811 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1911 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2041 y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2140 y Fk(A)e(c)n(haracter)d(string)
-h(con)n(taining)g(a)h(template)h(for)e(the)i(k)n(eyw)n(ord)d(to)i(b)r
-(e)g(found.)42 b(In)30 b(the)f(simplest)g(case,)427 2240
-y(this)34 b(should)g(simply)g(b)r(e)g(the)h(k)n(eyw)n(ord)d(name)h
-(\(the)i(searc)n(h)d(is)i(case)f(insensitiv)n(e)h(and)f(trailing)h
-(spaces)427 2339 y(are)e(ignored\).)53 b(Ho)n(w)n(ev)n(er,)33
-b(this)g(template)h(ma)n(y)e(also)g(con)n(tain)h Ft(")p
-Fk(\014eld)g(sp)r(eci\014ers)p Ft(")f Fk(whic)n(h)h(are)f(capable)427
-2439 y(of)27 b(matc)n(hing)g(a)g(range)e(of)i(c)n(haracters)e(\(see)i
-(the)h Ft(")p Fk(Keyw)n(ord)c(T)-7 b(emplates)p Ft(")27
-b Fk(section)g(for)f(details\).)37 b(In)27 b(this)427
-2539 y(case,)33 b(the)f(\014rst)g(card)f(with)i(a)f(k)n(eyw)n(ord)e
-(whic)n(h)i(matc)n(hes)f(the)i(template)f(will)h(b)r(e)f(found.)51
-b(T)-7 b(o)32 b(\014nd)g(the)427 2638 y(next)c(FITS)g(card)f
-(regardless)e(of)i(its)h(k)n(eyw)n(ord,)e(y)n(ou)h(should)g(use)h(the)g
-(template)g Ft(")p Fk(\045f)p Ft(")p Fk(.)259 2768 y
-Fc(CARD)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g(80)f(\))h(\(Returned\))
-427 2868 y Fk(A)e(c)n(haracter)e(v)-5 b(ariable)29 b(with)h(at)g(least)
-f(80)g(c)n(haracters)e(in)j(whic)n(h)g(the)g(FITS)g(card)f(whic)n(h)h
-(is)f(found)h(will)427 2967 y(b)r(e)e(returned.)37 b(If)28
-b(the)g(searc)n(h)e(is)h(not)h(successful,)f(a)g(card)g(will)h(not)g(b)
-r(e)g(returned.)259 3097 y Fc(INC)k(=)g(LOGICAL)h(\(Giv)m(en\))427
-3196 y Fk(If)c(this)f(v)-5 b(alue)28 b(is)g(.F)-9 b(ALSE.)28
-b(\(and)g(the)g(searc)n(h)e(is)i(successful\),)g(the)h(FitsChan's)f
-(Card)f(attribute)h(will)g(b)r(e)427 3296 y(set)e(to)g(the)g(index)g
-(of)g(the)g(card)f(that)i(w)n(as)e(found.)36 b(If)27
-b(it)f(is)g(.TR)n(UE.,)g(ho)n(w)n(ev)n(er,)e(the)i(Card)f(attribute)h
-(will)427 3396 y(b)r(e)i(incremen)n(ted)g(to)f(iden)n(tify)h(the)g
-(card)f(whic)n(h)g(follo)n(ws)g(the)h(one)f(found.)259
-3525 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3625 y Fk(The)c(global)e(status.)0 3783
-y Fc(Returned)32 b(V)-8 b(alue:)259 3917 y(AST)p Ft(_)p
-Fc(FINDFITS)33 b(=)f(LOGICAL)427 4016 y Fk(.TR)n(UE.)c(if)g(the)g
-(searc)n(h)e(w)n(as)g(successful,)i(otherwise)e(.F)-9
-b(ALSE..)0 4175 y Fc(Examples:)227 4312 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h('\045f',)h(CARD,)h
-(.TRUE.,)f(STATUS)g(\))427 4408 y Fk(Returns)26 b(the)g(curren)n(t)g
-(card)f(in)h(a)f(FitsChan)h(and)g(adv)-5 b(ances)25 b(the)i(Card)e
-(attribute)h(to)g(iden)n(tify)g(the)g(card)427 4507 y(that)i(follo)n
-(ws)f(\(the)h Ft(")p Fk(\045f)p Ft(")f Fk(template)h(matc)n(hes)f(an)n
-(y)g(k)n(eyw)n(ord\).)227 4641 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h('BITPIX',)g(CARD,)i(.TRUE.,)f
-(STATUS)g(\))427 4736 y Fk(Searc)n(hes)34 b(a)h(FitsChan)g(for)f(a)h
-(FITS)g(card)g(with)g(the)h Ft(")p Fk(BITPIX)p Ft(")e
-Fk(k)n(eyw)n(ord)f(and)i(returns)f(that)h(card.)427 4836
-y(The)28 b(Card)f(attribute)g(is)h(then)g(incremen)n(ted)f(to)h(iden)n
-(tify)g(the)g(card)f(that)h(follo)n(ws)e(it.)227 4970
-y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h
-('COMMENT',)g(CARD,)h(.FALSE.,)g(STATUS)g(\))427 5065
-y Fk(Sets)36 b(the)f(Card)g(attribute)g(of)g(a)g(FitsChan)h(to)f(iden)n
-(tify)h(the)f(next)h(COMMENT)f(card)f(\(if)i(an)n(y\))f(and)427
-5165 y(returns)27 b(that)h(card.)227 5299 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFITS\()c(FITSCHAN,)h('CRVAL\0451d',)g(CARD,)h
-(.TRUE.,)g(STATUS)g(\))427 5394 y Fk(Searc)n(hes)28 b(a)h(FitsChan)g
-(for)g(the)h(next)g(card)e(with)i(a)f(k)n(eyw)n(ord)e(of)i(the)h(form)f
-Ft(")p Fk(CR)-9 b(V)g(ALi)p Ft(")29 b Fk(\(for)g(example,)427
-5494 y(an)n(y)k(of)h(the)f(k)n(eyw)n(ords)f Ft(")p Fk(CR)-9
-b(V)g(AL1)p Ft(")p Fk(,)34 b Ft(")p Fk(CR)-9 b(V)g(AL2)p
-Ft(")32 b Fk(or)h Ft(")p Fk(CR)-9 b(V)g(AL3)p Ft(")32
-b Fk(w)n(ould)h(b)r(e)h(matc)n(hed\).)55 b(The)33 b(card)427
-5593 y(found)22 b(\(if)g(an)n(y\))e(is)h(returned,)i(and)e(the)g(Card)f
-(attribute)i(is)f(then)g(incremen)n(ted)g(to)g(iden)n(tify)h(the)g
-(follo)n(wing)427 5693 y(card)27 b(\(ready)g(to)g(searc)n(h)f(for)h
-(another)g(k)n(eyw)n(ord)f(with)i(the)g(same)f(form,)g(p)r(erhaps\).)p
-eop end
-%%Page: 218 228
-TeXDict begin 218 227 bop 0 52 a FG(218)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-681 y Fj(\017)45 b Fk(The)23 b(searc)n(h)f(alw)n(a)n(ys)f(starts)i
-(with)g(the)h(curren)n(t)e(card,)h(as)g(iden)n(ti\014ed)g(b)n(y)g(the)h
-(Card)e(attribute.)35 b(T)-7 b(o)23 b(ensure)427 781
-y(y)n(ou)i(searc)n(h)g(the)h(en)n(tire)g(con)n(ten)n(ts)f(of)h(a)f
-(FitsChan,)i(y)n(ou)e(should)h(\014rst)f(clear)g(the)h(Card)g
-(attribute)g(\(using)427 880 y(AST)p Ft(_)p Fk(CLEAR\).)i(This)g
-(e\013ectiv)n(ely)f Ft(")p Fk(rewinds)p Ft(")f Fk(the)i(FitsChan.)340
-1037 y Fj(\017)45 b Fk(If)24 b(a)g(searc)n(h)e(is)i(unsuccessful,)g
-(the)g(Card)f(attribute)h(is)g(set)f(to)h(the)g Ft(")p
-Fk(end-of-\014le)p Ft(")f Fk(\(i.e.)36 b(to)23 b(one)h(more)e(than)427
-1136 y(the)28 b(n)n(um)n(b)r(er)g(of)f(cards)g(in)g(the)h(FitsChan\).)
-38 b(No)27 b(error)f(o)r(ccurs.)340 1293 y Fj(\017)45
-b Fk(A)26 b(v)-5 b(alue)25 b(of)g(.F)-9 b(ALSE.)25 b(will)h(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)g(in)n(v)n(ok)n(ed)f(with)i(the)g
-(AST)f(error)f(status)h(set,)427 1392 y(or)i(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 1601 y Fc(Keyw)m(ord)33 b(T)-8
-b(emplates)n(:)227 1747 y Fk(The)32 b(templates)f(used)h(to)f(matc)n(h)
-g(FITS)h(k)n(eyw)n(ords)d(are)i(normally)f(comp)r(osed)h(of)h(literal)e
-(c)n(haracters,)h(whic)n(h)227 1847 y(m)n(ust)f(matc)n(h)g(the)h(k)n
-(eyw)n(ord)d(exactly)h(\(apart)h(from)f(case\).)44 b(Ho)n(w)n(ev)n(er,)
-29 b(a)h(template)g(ma)n(y)f(also)g(con)n(tain)h Ft(")p
-Fk(\014eld)227 1947 y(sp)r(eci\014ers)p Ft(")25 b Fk(whic)n(h)h(can)g
-(matc)n(h)f(a)h(range)f(of)h(p)r(ossible)f(c)n(haracters.)34
-b(This)26 b(allo)n(ws)f(y)n(ou)g(to)h(searc)n(h)e(for)i(k)n(eyw)n(ords)
-227 2046 y(that)36 b(con)n(tain)f(\(for)g(example\))g(n)n(um)n(b)r
-(ers,)i(where)e(the)h(digits)f(comprising)f(the)i(n)n(um)n(b)r(er)f
-(are)f(not)i(kno)n(wn)e(in)227 2146 y(adv)-5 b(ance.)227
-2294 y(A)30 b(\014eld)g(sp)r(eci\014er)g(starts)f(with)h(a)f
-Ft(")p Fk(\045)p Ft(")h Fk(c)n(haracter.)41 b(This)30
-b(is)f(follo)n(w)n(ed)g(b)n(y)h(an)f(optional)g(single)h(digit)f(\(0)h
-(to)g(9\))227 2394 y(sp)r(ecifying)c(a)f(\014eld)i(width.)37
-b(Finally)-7 b(,)26 b(there)f(is)h(a)f(single)h(c)n(haracter)e(whic)n
-(h)h(sp)r(eci\014es)h(the)g(t)n(yp)r(e)g(of)g(c)n(haracter)e(to)227
-2493 y(b)r(e)k(matc)n(hed,)g(as)f(follo)n(ws:)340 2825
-y Fj(\017)45 b Ft(")p Fk(c)p Ft(")p Fk(:)36 b(matc)n(hes)27
-b(all)h(upp)r(er)f(case)g(letters,)340 2981 y Fj(\017)45
-b Ft(")p Fk(d)p Ft(")p Fk(:)37 b(matc)n(hes)27 b(all)g(decimal)g
-(digits,)340 3138 y Fj(\017)45 b Ft(")p Fk(f)p Ft(")p
-Fk(:)39 b(matc)n(hes)29 b(all)f(c)n(haracters)f(whic)n(h)i(are)f(p)r
-(ermitted)h(within)h(a)e(FITS)h(k)n(eyw)n(ord)e(\(upp)r(er)j(case)e
-(letters,)427 3237 y(digits,)g(underscores)e(and)h(h)n(yphens\).)227
-3446 y(If)e(the)g(\014eld)f(width)h(is)g(omitted,)g(the)g(\014eld)f(sp)
-r(eci\014er)g(matc)n(hes)g(one)g(or)g(more)f(c)n(haracters.)34
-b(If)24 b(the)h(\014eld)g(width)g(is)227 3546 y(zero,)k(it)g(matc)n
-(hes)g(zero)f(or)g(more)g(c)n(haracters.)39 b(Otherwise,)28
-b(it)i(matc)n(hes)e(exactly)h(the)g(n)n(um)n(b)r(er)g(of)g(c)n
-(haracters)227 3646 y(sp)r(eci\014ed.)37 b(In)28 b(addition)g(to)f
-(this:)340 3977 y Fj(\017)45 b Fk(The)c(template)g Ft(")p
-Fk(\045f)p Ft(")f Fk(will)h(matc)n(h)g(a)f(blank)g(FITS)h(k)n(eyw)n
-(ord)e(consisting)h(of)h(8)f(spaces)g(\(as)g(w)n(ell)g(as)427
-4077 y(matc)n(hing)27 b(all)h(other)f(k)n(eyw)n(ords\).)340
-4233 y Fj(\017)45 b Fk(A)28 b(template)g(consisting)f(of)g(8)h(spaces)e
-(will)i(matc)n(h)f(a)h(blank)f(k)n(eyw)n(ord)f(\(only\).)227
-4442 y(F)-7 b(or)27 b(example:)340 4774 y Fj(\017)45
-b Fk(The)28 b(template)g Ft(")p Fk(BitPix)p Ft(")e Fk(will)i(matc)n(h)f
-(the)h(k)n(eyw)n(ord)e Ft(")p Fk(BITPIX)p Ft(")g Fk(only)-7
-b(.)340 4930 y Fj(\017)45 b Fk(The)27 b(template)g Ft(")p
-Fk(crpix\0451d)p Ft(")f Fk(will)h(matc)n(h)f(k)n(eyw)n(ords)f
-(consisting)h(of)h Ft(")p Fk(CRPIX)p Ft(")f Fk(follo)n(w)n(ed)g(b)n(y)g
-(one)h(deci-)427 5030 y(mal)h(digit.)340 5186 y Fj(\017)45
-b Fk(The)26 b(template)f Ft(")p Fk(P\045c)p Ft(")f Fk(will)i(matc)n(h)e
-(an)n(y)h(k)n(eyw)n(ord)e(starting)i(with)g Ft(")p Fk(P)p
-Ft(")f Fk(and)h(follo)n(w)n(ed)f(b)n(y)h(one)g(or)f(more)427
-5286 y(letters.)340 5442 y Fj(\017)45 b Fk(The)28 b(template)g
-Ft(")p Fk(E\0450f)p Ft(")e Fk(will)i(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)
-f(b)r(eginning)i(with)g Ft(")p Fk(E)p Ft(")p Fk(.)340
-5599 y Fj(\017)45 b Fk(The)28 b(template)g Ft(")p Fk(\045f)p
-Ft(")f Fk(will)h(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)f(at)h(all)h
-(\(including)g(a)f(blank)g(one\).)p eop end
-%%Page: 219 229
-TeXDict begin 219 228 bop 3643 52 a FG(219)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(FINDFRAME)1434 483 y
-Fd(Find)39 b(a)f(co)s(ordinate)1346 583 y(system)g(with)g(sp)s
-(eci\014ed)1527 697 y(c)m(haracteristics)2603 482 y FA(AST)p
-Fe(_)p FA(FINDFRAME)0 874 y Fc(Description:)44 b Fk(This)24
-b(function)h(uses)e(a)h Ft(")p Fk(template)p Ft(")g Fk(F)-7
-b(rame)23 b(to)h(searc)n(h)e(another)h(F)-7 b(rame)24
-b(\(or)f(F)-7 b(rameSet\))24 b(to)g(iden)n(tify)227 973
-y(a)33 b(co)r(ordinate)f(system)i(whic)n(h)f(has)g(a)g(sp)r(eci\014ed)g
-(set)h(of)f(c)n(haracteristics.)52 b(If)33 b(a)g(suitable)h(co)r
-(ordinate)e(system)227 1073 y(can)23 b(b)r(e)h(found,)h(the)f(function)
-g(returns)e(a)i(p)r(oin)n(ter)f(to)g(a)g(F)-7 b(rameSet)23
-b(whic)n(h)h(describ)r(es)e(the)i(required)f(co)r(ordinate)227
-1173 y(system)28 b(and)f(ho)n(w)g(to)g(con)n(v)n(ert)g(co)r(ordinates)f
-(to)h(and)h(from)f(it.)227 1300 y(This)41 b(function)f(is)h(pro)n
-(vided)e(to)h(help)h(answ)n(er)d(general)h(questions)h(ab)r(out)g(co)r
-(ordinate)f(systems,)k(suc)n(h)d(as)227 1400 y(t)n(ypically)f(arise)f
-(when)h(co)r(ordinate)f(information)h(is)g(imp)r(orted)g(in)n(to)g(a)f
-(program)f(as)i(part)g(of)g(an)f(initially)227 1500 y(unkno)n(wn)27
-b(dataset.)37 b(F)-7 b(or)27 b(example:)340 1642 y Fj(\017)45
-b Fk(Is)28 b(there)f(a)g(w)n(a)n(v)n(elength)f(scale?)340
-1778 y Fj(\017)45 b Fk(Is)28 b(there)f(a)g(2-dimensional)g(co)r
-(ordinate)f(system?)340 1914 y Fj(\017)45 b Fk(Is)28
-b(there)f(a)g(celestial)g(co)r(ordinate)g(system?)340
-2050 y Fj(\017)45 b Fk(Can)28 b(I)f(plot)h(the)g(data)f(in)h(ecliptic)g
-(co)r(ordinates?)227 2219 y(Y)-7 b(ou)30 b(can)g(also)f(use)g(this)i
-(function)f(as)f(a)h(means)f(of)h(reconciling)f(a)g(user's)g
-(preference)h(for)f(a)h(particular)e(co)r(or-)227 2318
-y(dinate)k(system)f(\(for)h(example,)g(what)f(t)n(yp)r(e)h(of)g(axes)e
-(to)i(dra)n(w\))e(with)i(what)g(is)f(actually)g(p)r(ossible)g(giv)n(en)
-g(the)227 2418 y(co)r(ordinate)c(information)g(a)n(v)-5
-b(ailable.)227 2546 y(T)e(o)40 b(p)r(erform)f(a)h(searc)n(h,)h(y)n(ou)f
-(supply)g(a)f Ft(")p Fk(target)p Ft(")f Fk(F)-7 b(rame)40
-b(\(or)f(F)-7 b(rameSet\))40 b(whic)n(h)g(represen)n(ts)e(the)j(set)f
-(of)227 2645 y(co)r(ordinate)30 b(systems)g(to)g(b)r(e)i(searc)n(hed.)
-44 b(If)31 b(a)f(basic)g(F)-7 b(rame)31 b(is)f(giv)n(en)g(as)g(the)h
-(target,)g(this)g(set)f(of)h(co)r(ordinate)227 2745 y(systems)h
-(consists)g(of)h(the)g(one)f(describ)r(ed)h(b)n(y)f(this)h(F)-7
-b(rame,)33 b(plus)g(all)f(other)g Ft(")p Fk(virtual)p
-Ft(")g Fk(co)r(ordinate)f(systems)227 2845 y(whic)n(h)c(can)g(p)r(oten)
-n(tially)f(b)r(e)i(reac)n(hed)d(from)i(it)g(b)n(y)g(applying)f
-(built-in)i(con)n(v)n(ersions)c(\(for)j(example,)f(an)n(y)g(of)h(the)
-227 2944 y(celestial)19 b(co)r(ordinate)g(con)n(v)n(ersions)e(kno)n(wn)
-i(to)h(the)g(AST)g(library)e(w)n(ould)i(constitute)g(a)f
-Ft(")p Fk(built-in)p Ft(")h Fk(con)n(v)n(ersion\).)227
-3044 y(If)32 b(a)f(F)-7 b(rameSet)31 b(is)g(giv)n(en)g(as)f(the)i
-(target,)f(the)h(set)f(of)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h
-(searc)n(hed)d(consists)i(of)g(the)227 3144 y(union)d(of)f(those)h
-(represen)n(ted)e(b)n(y)h(all)h(the)g(individual)f(F)-7
-b(rames)27 b(within)i(it.)227 3271 y(T)-7 b(o)26 b(select)g(from)f
-(this)i(large)d(set)i(of)g(p)r(ossible)g(co)r(ordinate)f(systems,)h(y)n
-(ou)f(supply)h(a)g Ft(")p Fk(template)p Ft(")f Fk(F)-7
-b(rame)26 b(whic)n(h)227 3371 y(is)k(an)g(instance)g(of)h(the)f(t)n(yp)
-r(e)h(of)f(F)-7 b(rame)30 b(y)n(ou)f(are)g(lo)r(oking)h(for.)44
-b(E\013ectiv)n(ely)-7 b(,)31 b(y)n(ou)e(then)i(ask)e(the)i(function)g
-(to)227 3470 y Ft(")p Fk(\014nd)d(a)f(co)r(ordinate)g(system)g(that)h
-(lo)r(oks)e(lik)n(e)i(this)p Ft(")p Fk(.)227 3598 y(Y)-7
-b(ou)24 b(can)e(mak)n(e)h(y)n(our)f(request)h(more)f(or)g(less)h(sp)r
-(eci\014c)h(b)n(y)f(setting)g(attribute)g(v)-5 b(alues)23
-b(for)g(the)g(template)h(F)-7 b(rame.)227 3698 y(If)28
-b(a)f(particular)e(attribute)j(is)f(set)g(in)g(the)h(template,)g(then)f
-(the)h(function)f(will)h(only)f(\014nd)g(co)r(ordinate)f(systems)227
-3797 y(whic)n(h)35 b(ha)n(v)n(e)f(exactly)g(the)i(same)e(v)-5
-b(alue)35 b(for)g(that)g(attribute.)59 b(If)36 b(y)n(ou)e(lea)n(v)n(e)g
-(a)g(template)h(attribute)h(un-set,)227 3897 y(ho)n(w)n(ev)n(er,)30
-b(then)h(the)g(function)g(has)f(discretion)g(ab)r(out)h(the)g(v)-5
-b(alue)30 b(the)i(attribute)e(should)h(ha)n(v)n(e)e(in)i(an)n(y)f(co)r
-(or-)227 3997 y(dinate)h(system)e(it)i(\014nds.)45 b(The)30
-b(attribute)g(will)h(then)f(tak)n(e)g(its)g(v)-5 b(alue)30
-b(from)g(one)g(of)g(the)g(actual)g(\(rather)f(than)227
-4096 y(virtual\))d(co)r(ordinate)f(systems)h(in)h(the)f(target.)36
-b(If)26 b(the)h(target)e(is)h(a)g(F)-7 b(rameSet,)27
-b(its)f(Curren)n(t)f(attribute)i(will)f(b)r(e)227 4196
-y(mo)r(di\014ed)i(to)g(indicate)f(whic)n(h)h(of)f(its)h(F)-7
-b(rames)27 b(w)n(as)g(used)g(for)g(this)h(purp)r(ose.)227
-4324 y(The)34 b(result)g(of)f(this)h(pro)r(cess)f(is)h(a)f(co)r
-(ordinate)g(system)g(represen)n(ted)g(b)n(y)g(a)h(h)n(ybrid)f(F)-7
-b(rame)33 b(whic)n(h)h(acquires)227 4423 y(some)28 b(attributes)h(from)
-f(the)h(template)g(\(but)h(only)e(if)h(they)g(w)n(ere)e(set\))i(and)g
-(the)g(remainder)e(from)h(the)h(target.)227 4523 y(This)34
-b(represen)n(ts)f(the)h Ft(")p Fk(b)r(est)g(compromise)p
-Ft(")f Fk(b)r(et)n(w)n(een)h(what)g(y)n(ou)f(ask)n(ed)g(for)g(and)h
-(what)g(w)n(as)f(a)n(v)-5 b(ailable.)55 b(A)227 4623
-y(Mapping)31 b(is)g(then)g(generated)f(whic)n(h)h(con)n(v)n(erts)e
-(from)i(the)g(target)g(co)r(ordinate)e(system)i(to)g(this)g(h)n(ybrid)g
-(one,)227 4722 y(and)d(the)g(returned)f(F)-7 b(rameSet)27
-b(encapsulates)g(all)g(of)h(this)g(information.)0 4878
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_FINDFRAME\()38
-b(TARGET,)j(TEMPLATE,)e(DOMAINLIST,)g(STATUS)j(\))0 5034
-y Fc(Argumen)m(ts:)259 5177 y(T)-8 b(AR)m(GET)33 b(=)f(INTEGER)f(\(Giv)
-m(en\))427 5276 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(target)e(F)-7
-b(rame)27 b(\(or)g(F)-7 b(rameSet\).)427 5394 y(Note)37
-b(that)g(if)g(a)g(F)-7 b(rameSet)36 b(is)h(supplied)g(\(and)g(a)f
-(suitable)h(co)r(ordinate)e(system)i(is)f(found\),)k(then)d(its)427
-5494 y(Curren)n(t)h(attribute)h(will)f(b)r(e)h(mo)r(di\014ed)g(to)f
-(indicate)h(whic)n(h)f(F)-7 b(rame)38 b(w)n(as)g(used)g(to)g(obtain)g
-(attribute)427 5593 y(v)-5 b(alues)31 b(whic)n(h)g(w)n(ere)g(not)g(sp)r
-(eci\014ed)h(b)n(y)e(the)i(template.)48 b(This)32 b(F)-7
-b(rame)30 b(will,)j(in)e(some)g(sense,)h(represen)n(t)427
-5693 y(the)c Ft(")p Fk(closest)p Ft(")e Fk(non-virtual)h(co)r(ordinate)
-f(system)i(to)f(the)h(one)f(y)n(ou)g(requested.)p eop
-end
-%%Page: 220 230
-TeXDict begin 220 229 bop 0 52 a FG(220)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(TEMPLA)-8
-b(TE)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 451 y Fk(P)n(oin)n(ter)e(to)h
-(the)h(template)g(F)-7 b(rame,)31 b(whic)n(h)f(should)g(b)r(e)h(an)f
-(instance)h(of)f(the)h(t)n(yp)r(e)g(of)f(F)-7 b(rame)30
-b(y)n(ou)g(wish)427 551 y(to)e(\014nd.)38 b(If)28 b(y)n(ou)f(w)n(an)n
-(ted)h(to)f(\014nd)i(a)e(F)-7 b(rame)27 b(describing)g(a)h(celestial)f
-(co)r(ordinate)g(system,)h(for)f(example,)427 650 y(then)h(y)n(ou)f
-(migh)n(t)h(use)f(a)g(SkyF)-7 b(rame)27 b(here.)37 b(See)27
-b(the)h Ft(")p Fk(Examples)p Ft(")e Fk(section)h(for)g(more)g(ideas.)
-259 783 y Fc(DOMAINLIST)33 b(=)f(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 883 y Fk(A)f(c)n(haracter)d
-(string)h(con)n(taining)g(a)h(comma-separated)e(list)i(of)g(F)-7
-b(rame)30 b(domains.)44 b(This)30 b(ma)n(y)f(b)r(e)i(used)427
-983 y(to)26 b(establish)f(a)g(priorit)n(y)f(order)g(for)h(the)h
-(di\013eren)n(t)f(t)n(yp)r(es)g(of)h(co)r(ordinate)e(system)h(that)h
-(migh)n(t)f(b)r(e)h(found.)427 1099 y(The)d(function)g(will)g(\014rst)f
-(try)g(to)h(\014nd)g(a)f(suitable)h(co)r(ordinate)e(system)h(whose)g
-(Domain)h(attribute)f(equals)427 1199 y(the)31 b(\014rst)g(domain)f(in)
-h(this)g(list.)47 b(If)31 b(this)g(fails,)h(the)f(second)f(domain)h(in)
-g(the)g(list)g(will)g(b)r(e)g(used,)h(and)e(so)427 1298
-y(on,)e(un)n(til)h(a)e(result)h(is)g(obtained.)38 b(A)28
-b(blank)g(domain)g(\(e.g.)38 b(t)n(w)n(o)27 b(consecutiv)n(e)g
-(commas\))g(indicates)h(that)427 1398 y(an)n(y)f(co)r(ordinate)g
-(system)g(is)g(acceptable)g(\(sub)5 b(ject)28 b(to)g(the)g(template\))g
-(regardless)d(of)j(its)f(domain.)427 1514 y(This)i(list)h(is)f
-(case-insensitiv)n(e)f(and)h(all)g(white)g(space)g(is)g(ignored.)40
-b(If)30 b(y)n(ou)e(do)h(not)g(wish)h(to)f(restrict)f(the)427
-1614 y(domain)f(in)h(this)g(w)n(a)n(y)-7 b(,)27 b(y)n(ou)g(should)g
-(supply)h(a)f(blank)g(string.)259 1747 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1847
-y Fk(The)c(global)e(status.)0 2009 y Fc(Class)31 b(Applicabilit)m(y:)
-259 2146 y(F)-8 b(rame)427 2246 y Fk(This)28 b(function)g(applies)f(to)
-h(all)f(F)-7 b(rames.)259 2379 y Fc(F)f(rameSet)427 2479
-y Fk(If)24 b(the)f(target)g(is)g(a)g(F)-7 b(rameSet,)23
-b(the)h(p)r(ossibilit)n(y)f(exists)g(that)g(sev)n(eral)f(of)h(the)g(F)
--7 b(rames)23 b(within)g(it)h(migh)n(t)f(b)r(e)427 2578
-y(matc)n(hed)32 b(b)n(y)f(the)h(template.)49 b(Unless)32
-b(the)g(c)n(hoice)f(is)g(su\016cien)n(tly)h(restricted)f(b)n(y)g(the)h
-(DOMAINLIST)427 2678 y(string,)c(the)h(sequence)e(in)i(whic)n(h)f(F)-7
-b(rames)27 b(are)h(searc)n(hed)e(can)i(then)h(b)r(ecome)f(imp)r(ortan)n
-(t.)38 b(In)29 b(this)f(case,)427 2777 y(the)g(searc)n(h)e(pro)r(ceeds)
-h(as)g(follo)n(ws:)510 2885 y Fj(\017)45 b Fk(Eac)n(h)27
-b(\014eld)h(in)f(the)h(DOMAINLIST)h(string)e(is)g(considered)g(in)g
-(turn.)510 3001 y Fj(\017)45 b Fk(An)29 b(attempt)g(is)g(made)f(to)h
-(matc)n(h)f(the)h(template)g(to)f(eac)n(h)g(of)g(the)h(target's)e(F)-7
-b(rames)28 b(in)h(the)g(order:)597 3101 y(\(1\))35 b(the)g(curren)n(t)f
-(F)-7 b(rame,)36 b(\(2\))f(the)h(base)e(F)-7 b(rame,)36
-b(\(3\))f(eac)n(h)f(remaining)g(F)-7 b(rame)34 b(in)h(the)g(order)f(of)
-597 3201 y(b)r(eing)28 b(added)f(to)h(the)g(target)f(F)-7
-b(rameSet.)510 3317 y Fj(\017)45 b Fk(Generally)-7 b(,)41
-b(the)d(\014rst)g(matc)n(h)h(found)f(is)g(used.)70 b(Ho)n(w)n(ev)n(er,)
-39 b(the)f(Mapping)g(b)r(et)n(w)n(een)h(the)g(target)597
-3417 y(co)r(ordinate)23 b(system)h(and)g(the)g(resulting)g(F)-7
-b(rame)23 b(is)h(also)f(examined.)35 b(Preference)23
-b(is)h(giv)n(en)f(to)h(cases)597 3516 y(where)37 b(b)r(oth)g(the)h
-(forw)n(ard)d(and)i(in)n(v)n(erse)f(transformations)f(are)h(de\014ned)h
-(\(as)g(indicated)g(b)n(y)g(the)597 3616 y(T)-7 b(ranF)g(orw)n(ard)36
-b(and)h(T)-7 b(ranIn)n(v)n(erse)36 b(attributes\).)68
-b(If)38 b(only)g(one)f(transformation)g(is)g(de\014ned,)k(the)597
-3716 y(forw)n(ard)26 b(one)h(is)h(preferred.)510 3832
-y Fj(\017)45 b Fk(If)25 b(a)g(matc)n(h)f(is)h(found)g(and)f(the)h
-(domain)f(of)h(the)g(resulting)f(F)-7 b(rame)24 b(also)g(matc)n(hes)g
-(the)h(curren)n(t)f(DO-)597 3932 y(MAINLIST)31 b(\014eld,)g(it)f(is)g
-(accepted.)43 b(Otherwise,)30 b(the)g(next)g(DOMAINLIST)h(\014eld)f(is)
-g(considered)597 4031 y(and)e(the)g(pro)r(cess)e(rep)r(eated.)427
-4164 y(If)g(a)f(suitable)g(co)r(ordinate)f(system)i(is)f(found,)h(the)g
-(Curren)n(t)e(attribute)i(of)f(the)h(target)e(F)-7 b(rameSet)26
-b(will)f(b)r(e)427 4264 y(mo)r(di\014ed)e(on)g(exit)g(to)f(iden)n(tify)
-h(the)g(F)-7 b(rame)23 b(whose)f(matc)n(h)g(with)h(the)g(target)f(w)n
-(as)g(ev)n(en)n(tually)g(accepted.)0 4427 y Fc(Returned)32
-b(V)-8 b(alue:)259 4564 y(AST)p Ft(_)p Fc(FINDFRAME)32
-b(=)g(INTEGER)427 4663 y Fk(If)g(the)g(searc)n(h)e(is)i(successful,)g
-(the)g(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(F)-7
-b(rameSet)31 b(whic)n(h)h(con)n(tains)e(the)427 4763
-y(F)-7 b(rame)37 b(found)g(and)g(a)f(description)h(of)g(ho)n(w)f(to)h
-(con)n(v)n(ert)e(to)i(\(and)g(from\))g(the)h(co)r(ordinate)d(system)i
-(it)427 4862 y(represen)n(ts.)f(Otherwise,)26 b(a)i(n)n(ull)f(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))h(is)g(returned)f
-(without)h(error.)427 4979 y(If)37 b(a)g(F)-7 b(rameSet)36
-b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)-7
-b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f(F)
--7 b(rame\))427 5078 y(represen)n(ts)36 b(the)i(target)f(co)r(ordinate)
-f(system)h(and)h(will)f(b)r(e)h(the)g(same)f(as)g(the)g(\(base)h(F)-7
-b(rame)37 b(of)g(the\))427 5178 y(target.)64 b(F)-7 b(rame)36
-b(n)n(um)n(b)r(er)h(2)f(\(its)h(curren)n(t)f(F)-7 b(rame\))37
-b(will)g(b)r(e)g(a)f(F)-7 b(rame)36 b(represen)n(ting)g(the)h(co)r
-(ordinate)427 5278 y(system)e(whic)n(h)g(the)g(function)h(found.)59
-b(The)35 b(Mapping)g(whic)n(h)g(in)n(ter-relates)e(these)i(t)n(w)n(o)f
-(F)-7 b(rames)34 b(will)427 5377 y(describ)r(e)28 b(ho)n(w)e(to)i(con)n
-(v)n(ert)e(b)r(et)n(w)n(een)i(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)
-f(systems.)427 5494 y(Note)i(that)h(a)f(F)-7 b(rameSet)28
-b(ma)n(y)f(b)r(e)i(used)f(b)r(oth)g(as)g(a)g(Mapping)f(and)h(as)g(a)g
-(F)-7 b(rame.)38 b(If)28 b(the)h(result)f(is)g(used)427
-5593 y(as)g(a)g(Mapping)g(\(e.g.)40 b(with)29 b(astT)-7
-b(ran2\),)27 b(then)i(it)g(pro)n(vides)e(a)h(means)g(of)g(con)n(v)n
-(erting)f(co)r(ordinates)g(from)427 5693 y(the)h(target)e(co)r
-(ordinate)g(system)h(in)n(to)g(the)h(new)f(co)r(ordinate)f(system)i
-(that)f(w)n(as)f(found)i(\(and)f(vice)g(v)n(ersa)p eop
-end
-%%Page: 221 231
-TeXDict begin 221 230 bop 3643 52 a FG(221)427 351 y
-Fk(if)30 b(its)f(in)n(v)n(erse)e(transformation)g(is)i(selected\).)41
-b(If)29 b(it)h(is)f(used)f(as)h(a)f(F)-7 b(rame,)29 b(its)g(attributes)
-g(will)g(describ)r(e)427 451 y(the)f(new)g(co)r(ordinate)e(system.)0
-614 y Fc(Examples:)227 723 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p Fy(FRAME\()g(3,)i(')h
-(',)f(STATUS)f(\),)h(')h(',)227 822 y(STATUS)e(\))427
-901 y Fk(Searc)n(hes)31 b(for)h(a)f(3-dimensional)g(co)r(ordinate)g
-(system)h(in)h(the)g(target)e(F)-7 b(rame)32 b(\(or)f(F)-7
-b(rameSet\).)51 b(No)32 b(at-)427 1000 y(tributes)21
-b(ha)n(v)n(e)f(b)r(een)h(set)g(in)g(the)h(template)f(F)-7
-b(rame)20 b(\(created)g(b)n(y)h(AST)p Ft(_)p Fk(FRAME\),)g(so)g(no)f
-(restriction)g(has)427 1100 y(b)r(een)27 b(placed)g(on)f(the)i
-(required)e(co)r(ordinate)f(system,)i(other)f(than)h(that)g(it)g
-(should)g(ha)n(v)n(e)e(3)i(dimensions.)427 1200 y(The)h(\014rst)f
-(suitable)h(F)-7 b(rame)27 b(found)h(will)g(b)r(e)g(returned)f(as)g
-(part)g(of)g(the)h(RESUL)-7 b(T)28 b(F)-7 b(rameSet.)227
-1321 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(SKYFRAME\()f(')k(',)f(STATUS)f(\),)h(')h(',)227
-1420 y(STATUS)e(\))427 1499 y Fk(Searc)n(hes)39 b(for)g(a)h(celestial)f
-(co)r(ordinate)g(system)g(in)i(the)f(target)f(F)-7 b(rame)39
-b(\(or)h(F)-7 b(rameSet\).)73 b(The)40 b(t)n(yp)r(e)427
-1598 y(of)29 b(celestial)f(co)r(ordinate)g(system)h(is)f(unsp)r
-(eci\014ed,)i(so)e(AST)p Ft(_)p Fk(FINDFRAME)i(will)f(return)f(the)h
-(\014rst)g(one)427 1698 y(found)20 b(as)g(part)f(of)h(the)g(RESUL)-7
-b(T)20 b(F)-7 b(rameSet.)34 b(If)20 b(the)g(target)f(is)h(a)f(F)-7
-b(rameSet,)21 b(then)f(its)g(Curren)n(t)f(attribute)427
-1797 y(will)28 b(b)r(e)g(up)r(dated)g(to)g(iden)n(tify)g(the)g(F)-7
-b(rame)27 b(that)h(w)n(as)e(used.)427 1914 y(If)40 b(no)f(celestial)g
-(co)r(ordinate)f(system)h(can)g(b)r(e)g(found,)k(a)c(v)-5
-b(alue)39 b(of)g(AST)p Ft(__)p Fk(NULL)g(will)g(b)r(e)h(returned)427
-2013 y(without)28 b(error.)227 2119 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p Fy(SKYFRAME\()f
-('MaxAxes=100',)g(STATUS)i(\),)227 2218 y(')i(',)f(STATUS)f(\))427
-2297 y Fk(This)39 b(is)f(lik)n(e)g(the)h(last)g(example,)i(except)d
-(that)h(in)g(the)g(ev)n(en)n(t)f(of)g(the)h(target)f(b)r(eing)h(a)f
-(CmpF)-7 b(rame,)427 2396 y(the)31 b(comp)r(onen)n(t)f(F)-7
-b(rames)29 b(encapsulated)g(b)n(y)h(the)g(CmpF)-7 b(rame)30
-b(will)h(b)r(e)f(searc)n(hed)f(for)g(a)h(SkyF)-7 b(rame.)43
-b(If)427 2496 y(found,)29 b(the)g(returned)f(Mapping)g(will)g(included)
-h(a)f(P)n(ermMap)f(whic)n(h)h(selects)g(the)g(required)g(axes)f(from)
-427 2596 y(the)h(target)f(CmpF)-7 b(rame.)427 2712 y(This)31
-b(is)g(acomplished)f(b)n(y)g(setting)h(the)g(MaxAxes)f(attribute)h(of)f
-(the)h(template)g(SkyF)-7 b(rame)30 b(to)h(a)f(large)427
-2812 y(n)n(um)n(b)r(er)h(\(larger)e(than)i(or)f(equal)g(to)h(the)g(n)n
-(um)n(b)r(er)g(of)g(axes)e(in)i(the)h(target)e(CmpF)-7
-b(rame\).)46 b(This)31 b(allo)n(ws)427 2911 y(the)d(SkyF)-7
-b(rame)27 b(to)h(b)r(e)g(used)f(as)g(a)g(matc)n(h)h(for)f(F)-7
-b(rames)26 b(con)n(taining)h(from)g(2)h(to)f(100)f(axes.)227
-3033 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(SKYFRAME\()f('System=FK5',)h(STATUS)h(\),)227
-3132 y(')i(',)f(STATUS)f(\))427 3215 y Fk(Searc)n(hes)25
-b(for)g(an)h(equatorial)e(\(FK5\))i(co)r(ordinate)f(system)g(in)i(the)f
-(target.)35 b(The)26 b(Equino)n(x)f(v)-5 b(alue)26 b(for)f(the)427
-3315 y(co)r(ordinate)k(system)h(has)g(not)h(b)r(een)f(sp)r(eci\014ed,)i
-(so)d(will)i(b)r(e)f(obtained)g(from)g(the)h(target.)44
-b(If)31 b(the)g(target)427 3415 y(is)26 b(a)f(F)-7 b(rameSet,)25
-b(its)h(Curren)n(t)f(attribute)g(will)h(b)r(e)g(up)r(dated)g(to)f
-(indicate)h(whic)n(h)f(SkyF)-7 b(rame)25 b(w)n(as)f(used)i(to)427
-3514 y(obtain)i(this)f(v)-5 b(alue.)227 3619 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p
-Fy(FRAME\()g(2,)i(')h(',)f(STATUS)f(\),)227 3719 y('SKY,PIXEL,',)e
-(STATUS)j(\))427 3798 y Fk(Searc)n(hes)29 b(for)g(a)h(2-dimensional)e
-(co)r(ordinate)h(system)h(in)g(the)h(target.)43 b(Initially)-7
-b(,)30 b(a)g(searc)n(h)e(is)i(made)g(for)427 3897 y(a)j(suitable)h(co)r
-(ordinate)e(system)h(whose)g(Domain)g(attribute)g(has)g(the)h(v)-5
-b(alue)33 b Ft(")p Fk(SKY)p Ft(")p Fk(.)54 b(If)33 b(this)h(searc)n(h)
-427 3997 y(fails,)g(a)f(searc)n(h)e(is)i(then)g(made)g(for)g(one)f
-(with)h(the)h(domain)e Ft(")p Fk(PIXEL)p Ft(")p Fk(.)51
-b(If)34 b(this)f(also)f(fails,)i(then)f(an)n(y)427 4097
-y(2-dimensional)27 b(co)r(ordinate)f(system)h(is)h(returned)f(as)g
-(part)g(of)h(the)g(RESUL)-7 b(T)27 b(F)-7 b(rameSet.)427
-4213 y(Only)26 b(if)h(no)g(2-dimensional)e(co)r(ordinate)g(systems)h
-(can)g(b)r(e)h(reac)n(hed)e(b)n(y)h(applying)g(built-in)h(con)n(v)n
-(ersions)427 4313 y(to)h(an)n(y)f(of)g(the)h(F)-7 b(rames)27
-b(in)h(the)g(target)e(will)i(a)f(v)-5 b(alue)28 b(of)f(AST)p
-Ft(__)p Fk(NULL)h(b)r(e)g(returned.)227 4434 y Fy(RESULT)46
-b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p
-Fy(FRAME\()g(1,)i('Domain=WAVELENGTH',)227 4534 y(STATUS)f(\),)i(')f
-(',)g(STATUS)f(\))427 4612 y Fk(Searc)n(hes)18 b(for)h(an)n(y)g
-(1-dimensional)f(co)r(ordinate)h(system)g(in)h(the)g(target)f(whic)n(h)
-g(has)g(the)h(domain)f Ft(")p Fk(W)-9 b(A)g(VE-)427 4712
-y(LENGTH)p Ft(")p Fk(.)227 4817 y Fy(RESULT)46 b(=)i(AST)p
-Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p Ft(_)p Fy(FRAME\()g(1,)i(')h
-(',)f(STATUS)f(\),)227 4916 y('WAVELENGTH',)e(STATUS)j(\))427
-4995 y Fk(This)29 b(example)f(has)g(exactly)h(the)g(same)f(e\013ect)h
-(as)f(that)h(ab)r(o)n(v)n(e.)39 b(It)29 b(illustrates)f(the)h(equiv)-5
-b(alence)29 b(of)f(the)427 5095 y(template's)g(Domain)f(attribute)h
-(and)g(the)g(\014elds)f(in)h(the)g(DOMAINLIST)g(string.)227
-5216 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(FRAME\()g(1,)i('MaxAxes=3',)e(STATUS)h(\),)h(')227
-5316 y(',)g(STATUS)g(\))427 5394 y Fk(This)31 b(is)f(a)g(more)g(adv)-5
-b(anced)30 b(example)g(whic)n(h)h(will)f(searc)n(h)f(for)h(an)n(y)g(co)
-r(ordinate)g(system)g(in)h(the)g(target)427 5494 y(ha)n(ving)h(1,)i(2)e
-(or)g(3)g(dimensions.)53 b(The)32 b(F)-7 b(rame)33 b(returned)f(\(as)g
-(part)h(of)g(the)g(RESUL)-7 b(T)33 b(F)-7 b(rameSet\))32
-b(will)427 5593 y(alw)n(a)n(ys)e(b)r(e)j(1-dimensional,)f(but)g(will)h
-(b)r(e)f(related)g(to)f(the)i(co)r(ordinate)e(system)h(that)g(w)n(as)f
-(found)h(b)n(y)g(a)427 5693 y(suitable)c(Mapping)f(\(e.g.)37
-b(a)27 b(P)n(ermMap\))f(whic)n(h)i(simply)g(extracts)e(the)i(\014rst)g
-(axis.)p eop end
-%%Page: 222 232
-TeXDict begin 222 231 bop 0 52 a FG(222)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(If)e(w)n(e)e(had)h(w)
-n(an)n(ted)f(a)h(F)-7 b(rame)27 b(represen)n(ting)f(the)j(actual)e
-(\(1,)h(2)f(or)g(3-dimensional\))g(co)r(ordinate)g(system)427
-451 y(found,)h(w)n(e)f(could)h(set)f(the)h(Preserv)n(eAxes)d(attribute)
-j(to)g(a)f(non-zero)f(v)-5 b(alue)27 b(in)h(the)g(template.)227
-560 y Fy(RESULT)46 b(=)i(AST)p Ft(_)p Fy(FINDFRAME\()c(TARGET,)h(AST)p
-Ft(_)p Fy(SKYFRAME\()f('Permute=0',)h(STATUS)h(\),)h(')227
-659 y(',)g(STATUS)g(\))427 738 y Fk(Searc)n(hes)39 b(for)h(an)n(y)g
-(celestial)g(co)r(ordinate)f(system)h(in)h(the)g(target,)h(but)f(only)f
-(\014nds)h(one)f(if)h(its)g(axes)427 838 y(are)35 b(in)i(the)f(con)n(v)
-n(en)n(tional)e(\(longitude,latitude\))j(order)e(and)g(ha)n(v)n(e)g
-(not)h(b)r(een)h(p)r(erm)n(uted)f(\(e.g.)62 b(with)427
-937 y(AST)p Ft(_)p Fk(PERMAXES\).)0 1087 y Fc(Notes:)340
-1358 y Fj(\017)45 b Fk(The)28 b(Mapping)f(represen)n(ted)g(b)n(y)g(the)
-h(returned)f(F)-7 b(rameSet)27 b(results)g(in)h(alignmen)n(t)f(taking)g
-(place)g(in)h(the)427 1458 y(co)r(ordinate)22 b(system)i(sp)r
-(eci\014ed)f(b)n(y)g(the)h(AlignSystem)f(attribute)h(of)f(the)h(TEMPLA)
--7 b(TE)22 b(F)-7 b(rame.)35 b(See)23 b(the)427 1557
-y(description)k(of)h(the)g(AlignSystem)g(attribute)f(for)g(further)h
-(details.)340 1678 y Fj(\017)45 b Fk(Bew)n(are)35 b(of)i(setting)g(the)
-g(Domain)g(attribute)g(of)g(the)g(template)g(and)g(then)g(using)g(a)f
-(DOMAINLIST)427 1778 y(string)h(whic)n(h)g(do)r(es)g(not)g(include)g
-(the)h(template's)f(domain)g(\(or)f(a)h(blank)g(\014eld\).)66
-b(If)38 b(y)n(ou)e(do)h(so,)i(no)427 1878 y(co)r(ordinate)27
-b(system)g(will)h(b)r(e)g(found.)340 1999 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2098
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2248 y Fc(More)32 b(on)f(Using)h(T)-8
-b(emplates)n(:)227 2394 y Fk(A)29 b(F)-7 b(rame)27 b(\(describing)g(a)h
-(co)r(ordinate)f(system\))h(will)g(b)r(e)g(found)h(b)n(y)e(this)i
-(function)f(if)h(\(a\))f(it)g(is)g Ft(")p Fk(matc)n(hed)p
-Ft(")f Fk(b)n(y)227 2494 y(the)h(template)g(y)n(ou)f(supply)-7
-b(,)28 b(and)f(\(b\))i(the)f(v)-5 b(alue)27 b(of)h(its)f(Domain)h
-(attribute)g(app)r(ears)e(in)i(the)g(DOMAINLIST)227 2594
-y(string)33 b(\(except)h(that)f(a)g(blank)g(\014eld)h(in)f(this)h
-(string)e(p)r(ermits)i(an)n(y)f(domain\).)53 b(A)34 b(successful)f
-(matc)n(h)g(b)n(y)g(the)227 2693 y(template)28 b(dep)r(ends)g(on)g(a)f
-(n)n(um)n(b)r(er)g(of)h(criteria,)e(as)h(outlined)h(b)r(elo)n(w:)340
-2818 y Fj(\017)45 b Fk(In)26 b(general,)f(a)h(template)g(will)g(only)g
-(matc)n(h)g(another)f(F)-7 b(rame)25 b(whic)n(h)h(b)r(elongs)f(to)h
-(the)h(same)e(class)g(as)g(the)427 2918 y(template,)35
-b(or)d(to)h(a)f(deriv)n(ed)g(\(more)g(sp)r(ecialised\))h(class.)52
-b(F)-7 b(or)32 b(example,)i(a)e(SkyF)-7 b(rame)32 b(template)h(will)427
-3017 y(matc)n(h)h(an)n(y)f(other)g(SkyF)-7 b(rame,)34
-b(but)h(will)f(not)g(matc)n(h)f(a)g(basic)h(F)-7 b(rame.)54
-b(Con)n(v)n(ersely)-7 b(,)34 b(a)f(basic)g(F)-7 b(rame)427
-3117 y(template)28 b(will)g(matc)n(h)f(an)n(y)g(class)g(of)g(F)-7
-b(rame.)340 3238 y Fj(\017)45 b Fk(The)26 b(exception)e(to)h(this)h(is)
-f(that)h(a)e(F)-7 b(rame)25 b(of)g(an)n(y)g(class)f(can)h(b)r(e)g(used)
-g(to)g(matc)n(h)g(a)g(CmpF)-7 b(rame,)26 b(if)f(that)427
-3337 y(CmpF)-7 b(rame)27 b(con)n(tains)e(a)h(F)-7 b(rame)26
-b(of)h(the)g(same)f(class)f(as)h(the)h(template.)37 b(Note)27
-b(ho)n(w)n(ev)n(er,)d(the)j(MaxAxes)427 3437 y(and)j(MinAxes)h
-(attributes)f(of)h(the)f(template)h(m)n(ust)g(b)r(e)f(set)h(to)f
-(suitable)g(v)-5 b(alues)30 b(to)h(allo)n(w)e(it)i(to)f(matc)n(h)427
-3537 y(the)e(CmpF)-7 b(rame.)36 b(That)27 b(is,)g(the)g(MinAxes)g
-(attribute)g(m)n(ust)g(b)r(e)h(less)e(than)h(or)f(equal)h(to)g(the)g(n)
-n(um)n(b)r(er)g(of)427 3636 y(axes)g(in)i(the)f(target,)g(and)f(the)i
-(MaxAxes)e(attribute)i(m)n(ust)f(b)r(e)g(greater)e(than)j(or)e(equal)g
-(to)h(the)h(n)n(um)n(b)r(er)427 3736 y(of)f(axes)e(in)i(the)g(target.)
-340 3857 y Fj(\017)45 b Fk(If)40 b(using)g(a)f(CmpF)-7
-b(rame)40 b(as)f(a)g(template)h(frame,)i(the)f(MinAxes)e(and)h(MaxAxes)
-f(for)g(the)h(template)427 3957 y(are)33 b(determined)g(b)n(y)h(the)f
-(MinAxes)h(and)f(MaxAxes)g(v)-5 b(alues)33 b(of)g(the)h(comp)r(onen)n
-(t)f(F)-7 b(rames)33 b(within)h(the)427 4056 y(template.)48
-b(So)30 b(if)i(y)n(ou)e(w)n(an)n(t)g(a)h(template)g(CmpF)-7
-b(rame)31 b(to)g(b)r(e)g(able)g(to)g(matc)n(h)g(F)-7
-b(rames)30 b(with)h(di\013eren)n(t)427 4156 y(n)n(um)n(b)r(ers)19
-b(of)g(axes,)h(then)f(y)n(ou)g(m)n(ust)g(set)g(the)g(MaxAxes)g(and/or)e
-(MinAxes)i(attributes)g(in)g(the)h(comp)r(onen)n(t)427
-4255 y(template)28 b(F)-7 b(rames,)27 b(b)r(efore)g(com)n(bining)g
-(them)i(together)d(in)n(to)i(the)g(template)f(CmpF)-7
-b(rame.)340 4376 y Fj(\017)45 b Fk(If)32 b(a)e(template)i(has)e(a)h(v)
--5 b(alue)30 b(set)h(for)g(an)n(y)f(of)h(its)g(main)g(attributes,)h
-(then)f(it)h(will)f(only)g(matc)n(h)f(F)-7 b(rames)427
-4476 y(whic)n(h)23 b(ha)n(v)n(e)e(an)h(iden)n(tical)g(v)-5
-b(alue)22 b(for)g(that)h(attribute)g(\(or)e(whic)n(h)i(can)f(b)r(e)h
-(transformed,)f(using)g(a)g(built-in)427 4576 y(con)n(v)n(ersion,)30
-b(so)g(that)h(they)g(ha)n(v)n(e)f(the)h(required)f(v)-5
-b(alue)31 b(for)f(that)h(attribute\).)48 b(If)31 b(an)n(y)f(attribute)h
-(in)g(the)427 4675 y(template)d(is)f(un-set,)g(ho)n(w)n(ev)n(er,)e
-(then)i(F)-7 b(rames)27 b(are)f(matc)n(hed)g(regardless)f(of)i(the)g(v)
--5 b(alue)27 b(they)g(ma)n(y)g(ha)n(v)n(e)427 4775 y(for)37
-b(that)h(attribute.)66 b(Y)-7 b(ou)37 b(ma)n(y)g(therefore)f(mak)n(e)g
-(a)h(template)h(more)e(or)h(less)g(sp)r(eci\014c)g(b)n(y)g(c)n(ho)r
-(osing)427 4875 y(the)h(attributes)f(for)g(whic)n(h)g(y)n(ou)g(set)g(v)
--5 b(alues.)65 b(This)38 b(requiremen)n(t)e(do)r(es)h(not)g(apply)g(to)
-g('descriptiv)n(e')427 4974 y(attributes)28 b(suc)n(h)f(as)g(titles,)h
-(lab)r(els,)g(sym)n(b)r(ols,)e(etc.)340 5095 y Fj(\017)45
-b Fk(An)22 b(imp)r(ortan)n(t)g(application)f(of)g(this)h(principle)g
-(in)n(v)n(olv)n(es)e(the)i(Domain)g(attribute.)35 b(Setting)22
-b(the)g(Domain)427 5195 y(attribute)j(of)g(the)h(template)f(has)f(the)i
-(e\013ect)f(of)g(restricting)f(the)i(searc)n(h)d(to)i(a)f(particular)g
-(t)n(yp)r(e)h(of)g(F)-7 b(rame)427 5295 y(\(with)24 b(the)g(domain)e(y)
-n(ou)g(sp)r(ecify\).)36 b(Con)n(v)n(ersely)-7 b(,)22
-b(if)i(the)f(Domain)g(attribute)g(is)g(not)g(set)g(in)h(the)f
-(template,)427 5394 y(then)32 b(the)g(domain)f(of)g(the)h(F)-7
-b(rame)30 b(found)i(is)f(not)g(relev)-5 b(an)n(t,)32
-b(so)f(all)g(F)-7 b(rames)30 b(are)g(searc)n(hed.)47
-b(Note)31 b(that)427 5494 y(the)i(DOMAINLIST)g(string)f(pro)n(vides)f
-(an)i(alternativ)n(e)e(w)n(a)n(y)g(of)i(restricting)e(the)i(searc)n(h)e
-(in)i(the)g(same)427 5593 y(manner,)g(but)g(is)f(a)g(more)f(con)n(v)n
-(enien)n(t)g(in)n(terface)h(if)g(y)n(ou)g(wish)g(to)g(searc)n(h)f
-(automatically)g(for)h(another)427 5693 y(domain)27 b(if)i(the)f
-(\014rst)f(searc)n(h)f(fails.)p eop end
-%%Page: 223 233
-TeXDict begin 223 232 bop 3643 52 a FG(223)340 351 y
-Fj(\017)45 b Fk(Normally)-7 b(,)29 b(a)g(template)h(will)f(only)g(matc)
-n(h)g(a)g(F)-7 b(rame)29 b(whic)n(h)g(has)g(the)g(same)g(n)n(um)n(b)r
-(er)g(of)g(axes)f(as)h(itself.)427 451 y(Ho)n(w)n(ev)n(er,)i(for)g
-(some)g(classes)f(of)h(template,)i(this)f(default)f(b)r(eha)n(viour)g
-(ma)n(y)f(b)r(e)i(c)n(hanged)f(b)n(y)g(means)g(of)427
-551 y(the)f(MinAxes,)g(MaxAxes)e(and)h(Matc)n(hEnd)g(attributes.)42
-b(In)29 b(addition,)h(the)f(b)r(eha)n(viour)f(of)h(a)g(template)427
-650 y(ma)n(y)38 b(b)r(e)h(in\015uenced)g(b)n(y)f(its)h(P)n(erm)n(ute)e
-(and)i(Preserv)n(eAxes)d(attributes,)41 b(whic)n(h)e(con)n(trol)e
-(whether)h(it)427 750 y(matc)n(hes)30 b(F)-7 b(rames)30
-b(whose)g(axes)f(ha)n(v)n(e)h(b)r(een)g(p)r(erm)n(uted,)i(and)e
-(whether)h(this)g(p)r(erm)n(utation)f(is)g(retained)427
-849 y(in)k(the)f(F)-7 b(rame)33 b(whic)n(h)g(is)h(returned)e(\(as)h
-(opp)r(osed)g(to)g(returning)g(the)g(axes)g(in)g(the)h(order)e(sp)r
-(eci\014ed)h(in)427 949 y(the)e(template,)h(whic)n(h)f(is)f(the)h
-(default)g(b)r(eha)n(viour\).)45 b(Y)-7 b(ou)31 b(should)g(consult)f
-(the)h(descriptions)f(of)h(these)427 1049 y(attributes)d(for)f(details)
-g(of)h(this)g(more)e(adv)-5 b(anced)28 b(use)f(of)h(templates.)p
-0 1242 3780 12 v 0 1373 a FA(AST)p Fe(_)p FA(FITSCHAN)1416
-1374 y Fd(Create)37 b(a)h(FitsChan)2736 1373 y FA(AST)p
-Fe(_)p FA(FITSCHAN)0 1544 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(FitsChan)h(and)f(optionally)g
-(initialises)h(its)f(attributes.)227 1667 y(A)33 b(FitsChan)e(is)h(a)g
-(sp)r(ecialised)f(form)h(of)g(Channel)f(whic)n(h)h(supp)r(orts)g(I/O)f
-(op)r(erations)f(in)n(v)n(olving)h(the)h(use)g(of)227
-1766 y(FITS)g(\(Flexible)h(Image)e(T)-7 b(ransp)r(ort)30
-b(System\))i(header)f(cards.)49 b(W)-7 b(riting)32 b(an)f(Ob)5
-b(ject)32 b(to)f(a)h(FitsChan)g(\(using)227 1866 y(AST)p
-Ft(_)p Fk(WRITE\))h(will,)i(if)e(the)g(Ob)5 b(ject)33
-b(is)f(suitable,)i(generate)e(a)g(description)g(of)h(that)g(Ob)5
-b(ject)33 b(comp)r(osed)f(of)227 1966 y(FITS)g(header)e(cards,)g(and)h
-(reading)f(from)g(a)h(FitsChan)g(will)g(create)f(a)h(new)g(Ob)5
-b(ject)30 b(from)h(its)g(FITS)g(header)227 2065 y(card)c(description.)
-227 2188 y(While)36 b(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f(represen)n
-(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f(or)h(more)
-g(80-c)n(haracter)227 2288 y Ft(")p Fk(header)29 b(cards)p
-Ft(")f Fk(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-2388 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fk(END)p Ft(")e Fk(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 2487
-y(accessed)38 b(in)h(an)n(y)f(order)f(b)n(y)i(using)f(the)h(FitsChan's)
-g(in)n(teger)f(Card)g(attribute,)k(whic)n(h)c(iden)n(ti\014es)h(a)g
-Ft(")p Fk(cur-)227 2587 y(ren)n(t)p Ft(")44 b Fk(card,)k(to)c(whic)n(h)
-h(subsequen)n(t)f(op)r(erations)f(apply)-7 b(.)87 b(Searc)n(hes)43
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(er-)227
-2687 y(formed)23 b(\(using)h(AST)p Ft(_)p Fk(FINDFITS\),)h(new)e(cards)
-f(ma)n(y)h(b)r(e)h(inserted)f(\(AST)p Ft(_)p Fk(PUTFITS,)h(AST)p
-Ft(_)p Fk(PUTCARDS,)227 2786 y(AST)p Ft(_)p Fk(SETFITS)p
-Fm(<)p Fk(X)p Fm(>)p Fk(\))18 b(and)g(existing)g(ones)g(ma)n(y)g(b)r(e)
-h(deleted)f(\(AST)p Ft(_)p Fk(DELFITS\))h(or)f(c)n(hanged)f(\(AST)p
-Ft(_)p Fk(SETFITS)p Fm(<)p Fk(X)p Fm(>)p Fk(\).)227 2909
-y(When)37 b(y)n(ou)f(create)g(a)g(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g
-(the)h(option)f(of)h(sp)r(ecifying)g Ft(")p Fk(source)p
-Ft(")d Fk(and)j Ft(")p Fk(sink)p Ft(")e Fk(functions)227
-3009 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f(data)h(stores)f(b)n
-(y)h(reading)f(and)h(writing)g(FITS)g(header)g(cards.)35
-b(If)26 b(y)n(ou)g(pro)n(vide)227 3108 y(a)h(source)f(function,)j(it)e
-(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h(header)f(cards)f
-(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-3208 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 3308 y(en)n(ter)23 b(data)g(in)n(to)g(it)g(\(e.g.)36
-b(using)23 b(AST)p Ft(_)p Fk(PUTCARDS,)h(AST)p Ft(_)p
-Fk(PUTFITS)f(or)f(AST)p Ft(_)p Fk(WRITE\).)i(If)f(y)n(ou)g(pro)n(vide)
-227 3407 y(a)h(sink)f(function,)j(it)e(is)g(used)g(to)f(deliv)n(er)g
-(an)n(y)g(remaining)g(con)n(ten)n(ts)h(of)f(a)h(FitsChan)g(to)g(an)f
-(external)g(data)h(store)227 3507 y(when)30 b(the)g(FitsChan)g(is)f
-(deleted.)43 b(If)30 b(y)n(ou)f(do)g(not)h(pro)n(vide)e(a)h(sink)h
-(function,)h(an)n(y)d(header)h(cards)g(remaining)227
-3607 y(when)f(the)g(FitsChan)g(is)g(deleted)g(will)g(b)r(e)g(lost,)f
-(so)g(y)n(ou)g(should)h(arrange)d(to)i(extract)g(them)i(\014rst)e(if)h
-(necessary)227 3706 y(\(e.g.)37 b(using)27 b(AST)p Ft(_)p
-Fk(FINDFITS)i(or)e(AST)p Ft(_)p Fk(READ\).)227 3829 y(Co)r(ordinate)i
-(system)g(information)g(ma)n(y)g(b)r(e)h(describ)r(ed)g(using)f(FITS)h
-(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)n(t)227
-3929 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p Fk(enco)r(dings)p
-Ft(")p Fk(.)39 b(When)29 b(an)g(AST)g(Ob)5 b(ject)29
-b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)227
-4029 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r(ding)f
-(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5 b(ject)22
-b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227 4128
-y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 4228 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-4327 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 4427 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 4527 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 4650 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 4749 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 4849 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-4949 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 5048 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)227 5171 y(The)k(detailed)h(b)r
-(eha)n(viour)e(of)h(AST)p Ft(_)p Fk(READ)g(and)g(AST)p
-Ft(_)p Fk(WRITE,)g(when)h(used)f(with)g(a)g(FitsChan,)h(dep)r(ends)227
-5271 y(on)g(the)g(enco)r(ding)f(in)h(use.)50 b(In)32
-b(general,)f(ho)n(w)n(ev)n(er,)g(all)h(use)f(of)h(AST)p
-Ft(_)p Fk(READ)g(is)g(destructiv)n(e,)g(so)f(that)h(FITS)227
-5371 y(header)21 b(cards)g(are)g(consumed)g(in)h(the)g(pro)r(cess)f(of)
-h(reading)e(an)i(Ob)5 b(ject,)22 b(and)g(are)f(remo)n(v)n(ed)f(from)h
-(the)i(FitsChan)227 5470 y(\(this)28 b(deletion)g(can)f(b)r(e)h(prev)n
-(en)n(ted)f(for)g(sp)r(eci\014c)h(cards)e(b)n(y)i(calling)f(the)h(AST)p
-Ft(_)p Fk(RET)-7 b(AINFITS)28 b(routine\).)227 5593 y(If)38
-b(the)f(enco)r(ding)f(in)h(use)g(allo)n(ws)f(only)g(a)h(single)f(Ob)5
-b(ject)37 b(description)f(to)h(b)r(e)g(stored)f(in)h(a)g(FitsChan)g
-(\(e.g.)227 5693 y(the)31 b(DSS,)g(FITS-W)n(CS)g(and)f(FITS-IRAF)h
-(enco)r(dings\),)g(then)g(write)g(op)r(erations)e(using)h(AST)p
-Ft(_)p Fk(WRITE)g(will)p eop end
-%%Page: 224 234
-TeXDict begin 224 233 bop 0 52 a FG(224)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(o)n(v)n(er-write)36
-b(an)n(y)i(existing)h(Ob)5 b(ject)38 b(description)g(using)g(that)h
-(enco)r(ding.)70 b(Otherwise)37 b(\(e.g.)70 b(the)39
-b(NA)-7 b(TIVE)227 451 y(enco)r(ding\),)26 b(m)n(ultiple)g(Ob)5
-b(ject)25 b(descriptions)f(are)h(written)g(sequen)n(tially)g(and)g(ma)n
-(y)f(later)h(b)r(e)h(read)e(bac)n(k)h(in)g(the)227 551
-y(same)i(sequence.)0 721 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_FITSCHAN\()38 b(SOURCE,)j(SINK,)g(OPTIONS,)g
-(STATUS)g(\))0 892 y Fc(Argumen)m(ts:)259 1050 y(SOUR)m(CE)32
-b(=)g(FUNCTION)g(\(Giv)m(en\))427 1150 y Fk(A)d(source)e(routine,)h
-(whic)n(h)g(is)g(a)g(function)h(taking)f(t)n(w)n(o)f(argumen)n(ts:)37
-b(a)28 b(c)n(haracter)e(argumen)n(t)h(of)i(length)427
-1249 y(80)d(to)g(con)n(tain)f(a)h(FITS)g(card,)g(and)g(an)g(in)n(teger)
-f(error)f(status)i(argumen)n(t.)36 b(It)26 b(should)g(return)g(an)g(in)
-n(teger)427 1349 y(v)-5 b(alue.)50 b(This)32 b(function)g(will)h(b)r(e)
-f(used)g(b)n(y)f(the)i(FitsChan)f(to)f(obtain)h(input)h(FITS)f(header)f
-(cards.)49 b(On)427 1448 y(eac)n(h)36 b(in)n(v)n(o)r(cation,)h(it)f
-(should)g(read)g(the)g(next)h(input)g(card)e(from)h(some)g(external)f
-(source)g(\(suc)n(h)h(as)g(a)427 1548 y(FITS)30 b(\014le\),)h(and)f
-(return)f(the)i(con)n(ten)n(ts)e(of)h(the)g(card)f(via)g(its)h(c)n
-(haracter)e(argumen)n(t.)42 b(It)30 b(should)g(return)427
-1648 y(a)i(function)i(result)e(of)h(one)f(unless)g(there)h(are)e(no)i
-(more)e(cards)h(to)g(b)r(e)h(read,)h(in)e(whic)n(h)h(case)f(it)h
-(should)427 1747 y(return)24 b(zero.)34 b(If)25 b(an)e(error)f(o)r
-(ccurs,)i(it)g(should)g(set)g(its)g(error)d(status)j(argumen)n(t)f(to)h
-(an)f(error)f(v)-5 b(alue)24 b(b)r(efore)427 1847 y(returning.)427
-1968 y(If)30 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(supplied)h(as)f(the)h(SOUR)n(CE)f(v)-5
-b(alue,)29 b(the)h(FitsChan)g(will)f(remain)427 2068
-y(empt)n(y)19 b(un)n(til)g(cards)e(are)h(explicitly)g(stored)g(in)h(it)
-g(\(e.g.)33 b(using)19 b(AST)p Ft(_)p Fk(PUTCARDS)g(or)e(AST)p
-Ft(_)p Fk(PUTFITS\).)259 2212 y Fc(SINK)32 b(=)g(SUBR)m(OUTINE)g(\(Giv)
-m(en\))427 2311 y Fk(A)g(sink)g(routine,)h(whic)n(h)e(is)h(a)g
-(subroutine)f(whic)n(h)h(tak)n(es)f(t)n(w)n(o)g(argumen)n(ts:)44
-b(a)31 b(c)n(haracter)f(argumen)n(t)h(of)427 2411 y(length)26
-b(80)g(to)f(con)n(tain)h(a)f(FITS)i(card,)e(and)h(an)g(in)n(teger)f
-(error)f(status)i(argumen)n(t.)35 b(This)26 b(routine)g(will)g(b)r(e)
-427 2511 y(used)h(b)n(y)g(the)g(FitsChan)g(to)f(deliv)n(er)g(an)n(y)g
-(FITS)h(header)f(cards)g(it)h(con)n(tains)f(when)h(it)g(is)g(\014nally)
-f(deleted.)427 2610 y(On)33 b(eac)n(h)g(in)n(v)n(o)r(cation,)g(it)g
-(should)g(deliv)n(er)g(the)g(con)n(ten)n(ts)f(of)i(the)f(c)n(haracter)e
-(string)i(passed)f(to)h(it)h(as)e(a)427 2710 y(FITS)i(header)f(card)g
-(to)g(some)g(external)g(data)g(store)f(\(suc)n(h)i(as)f(a)g(FITS)h
-(\014le\).)55 b(If)34 b(an)f(error)f(o)r(ccurs,)i(it)427
-2809 y(should)28 b(set)f(its)h(error)e(status)h(argumen)n(t)g(to)g(an)g
-(error)f(v)-5 b(alue)27 b(b)r(efore)h(returning.)427
-2931 y(If)j(the)f(n)n(ull)h(routine)f(AST)p Ft(_)p Fk(NULL)g(is)g
-(supplied)h(as)e(the)i(SINK)f(v)-5 b(alue,)31 b(the)f(con)n(ten)n(ts)g
-(of)g(the)h(FitsChan)427 3031 y(will)d(not)g(b)r(e)g(written)f(out)h
-(when)g(it)g(is)f(deleted.)259 3174 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)
-g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3274 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3373 y(used)j(for)g(initialising)g(the)g(new)g(FitsChan.)36
-b(The)24 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)g(that)g(for)g
-(the)g(AST)p Ft(_)p Fk(SET)427 3473 y(routine.)259 3617
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 3716 y Fk(The)c(global)e(status.)0 3899 y Fc(Returned)32
-b(V)-8 b(alue:)259 4057 y(AST)p Ft(_)p Fc(FITSCHAN)32
-b(=)h(INTEGER)427 4157 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g
-(FitsChan.)0 4340 y Fc(Notes:)340 4644 y Fj(\017)45 b
-Fk(The)27 b(names)g(of)g(the)h(routines)e(supplied)i(for)e(the)i(SOUR)n
-(CE)e(and)h(SINK)g(argumen)n(ts)f(should)h(app)r(ear)f(in)427
-4744 y(EXTERNAL)33 b(statemen)n(ts)g(in)h(the)f(F)-7
-b(ortran)32 b(routine)h(whic)n(h)g(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(FITSCHAN.)k(Ho)n(w)n(ev)n(er,)427 4843 y(this)h(is)f(not)g
-(generally)f(necessary)f(for)i(the)g(n)n(ull)h(routine)f(AST)p
-Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)427 4943 y(include)28 b(\014le)g(has)f(b)r(een)h(used\).)
-340 5086 y Fj(\017)45 b Fk(No)26 b(FITS)f Ft(")p Fk(END)p
-Ft(")g Fk(card)g(will)h(b)r(e)g(written)f(via)g(the)h(sink)f(routine.)
-36 b(Y)-7 b(ou)26 b(should)f(add)g(this)h(card)f(y)n(ourself)427
-5186 y(after)j(the)g(FitsChan)f(has)g(b)r(een)h(deleted.)340
-5329 y Fj(\017)45 b Fk(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5429 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)340 5573 y Fj(\017)45 b Fk(Note)36
-b(that)f(the)h(n)n(ull)f(routine)g(AST)p Ft(_)p Fk(NULL)h(\(one)f
-(underscore\))f(is)h(di\013eren)n(t)h(to)f(AST)p Ft(__)p
-Fk(NULL)g(\(t)n(w)n(o)427 5672 y(underscores\),)26 b(whic)n(h)i(is)f
-(the)h(n)n(ull)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)p eop
-end
-%%Page: 225 235
-TeXDict begin 225 234 bop 3643 52 a FG(225)-2 351 y Fc(Status)33
-b(Handling)n(:)227 497 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-697 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 902 3780
-12 v 0 1033 a FA(AST)p Fe(_)p FA(FLUXFRAME)167 b Fd(Create)38
-b(a)g(FluxF)-10 b(rame)170 b FA(AST)p Fe(_)p FA(FLUXFRAME)0
-1215 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(FluxF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 1343 y(A)c(FluxF)-7 b(rame)22 b(is)h(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)e(F)-7 b(rame)23
-b(whic)n(h)g(represen)n(ts)e(v)-5 b(arious)22 b(systems)h(used)227
-1442 y(to)36 b(represen)n(t)f(the)h(signal)f(lev)n(el)g(in)i(an)e
-(observ)-5 b(ation.)61 b(The)36 b(particular)e(co)r(ordinate)h(system)h
-(to)g(b)r(e)g(used)g(is)227 1542 y(sp)r(eci\014ed)31
-b(b)n(y)f(setting)h(the)g(FluxF)-7 b(rame's)30 b(System)h(attribute)g
-(quali\014ed,)g(as)f(necessary)-7 b(,)29 b(b)n(y)i(other)f(attributes)
-227 1642 y(suc)n(h)e(as)e(the)i(units,)h(etc)e(\(see)h(the)g
-(description)f(of)g(the)h(System)g(attribute)g(for)f(details\).)227
-1769 y(All)i(\015ux)f(v)-5 b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h
-(measured)e(at)h(the)h(same)e(frequency)h(or)f(w)n(a)n(v)n(elength)f
-(\(as)i(giv)n(en)f(b)n(y)h(the)227 1869 y(Sp)r(ecV)-7
-b(al)28 b(attribute\).)38 b(Th)n(us)27 b(this)h(class)e(is)i(more)f
-(appropriate)f(for)h(use)g(with)h(images)f(rather)f(than)i(sp)r(ectra.)
-0 2024 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_FLUXFRAME\()38 b(SPECVAL,)i(SPECFRM,)g(OPTIONS,)h(STATUS)g(\))0
-2179 y Fc(Argumen)m(ts:)259 2322 y(SPECV)-11 b(AL)33
-b(=)f(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 2421 y Fk(The)37
-b(sp)r(ectral)e(v)-5 b(alue)36 b(to)g(whic)n(h)g(the)h(\015ux)f(v)-5
-b(alues)36 b(refer,)i(giv)n(en)d(in)i(the)f(sp)r(ectral)g(co)r
-(ordinate)f(system)427 2521 y(sp)r(eci\014ed)22 b(b)n(y)e(SPECFRM.)h
-(The)g(v)-5 b(alue)21 b(supplied)h(for)e(the)i(SPECV)-9
-b(AL)20 b(parameter)g(b)r(ecomes)h(the)g(default)427
-2621 y(v)-5 b(alue)39 b(for)f(the)h(Sp)r(ecV)-7 b(al)39
-b(attribute.)71 b(A)39 b(v)-5 b(alue)38 b(of)h(AST)p
-Ft(__)p Fk(BAD)g(ma)n(y)f(b)r(e)h(supplied)g(if)g(the)g(sp)r(ectral)427
-2720 y(p)r(osition)34 b(is)f(unkno)n(wn,)h(but)h(this)e(ma)n(y)g
-(result)g(in)h(it)g(not)f(b)r(eing)h(p)r(ossible)f(for)g(the)h(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)427 2820 y(function)28 b(to)g(determine)g(a)f
-(Mapping)g(b)r(et)n(w)n(een)h(the)g(new)f(FluxF)-7 b(rame)27
-b(and)h(some)f(other)g(FluxF)-7 b(rame.)259 2956 y Fc(SPECFRM)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 3055 y Fk(A)27 b(p)r(oin)n(ter)f(to)h
-(a)f(Sp)r(ecF)-7 b(rame)26 b(describing)g(the)h(sp)r(ectral)f(co)r
-(ordinate)g(system)g(in)h(whic)n(h)f(the)h(SPECV)-9 b(AL)427
-3155 y(parameter)32 b(is)g(giv)n(en.)52 b(A)34 b(deep)f(cop)n(y)f(of)h
-(this)g(ob)5 b(ject)33 b(is)f(tak)n(en,)i(so)e(an)n(y)g(subsequen)n(t)h
-(c)n(hanges)e(to)i(the)427 3255 y(Sp)r(ecF)-7 b(rame)20
-b(using)f(the)i(supplied)f(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)g(on)g(the)g(new)g(FluxF)-7 b(rame.)34 b(AST)p
-Ft(__)p Fk(NULL)427 3354 y(can)27 b(b)r(e)h(supplied)g(if)h(AST)p
-Ft(__)p Fk(BAD)e(is)h(supplied)g(for)f(SPECV)-9 b(AL.)259
-3490 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3590 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3689 y(b)r(e)39
-b(used)f(for)g(initialising)g(the)g(new)h(FluxF)-7 b(rame.)68
-b(The)38 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)g(that)h(for)e
-(the)427 3789 y(AST)p Ft(_)p Fk(SET)27 b(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)f(a)g(blank)g(v)-5
-b(alue)28 b(ma)n(y)e(b)r(e)i(supplied.)259 3925 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4024 y Fk(The)c(global)e(status.)0 4192 y Fc(Returned)32
-b(V)-8 b(alue:)259 4335 y(AST)p Ft(_)p Fc(FLUXFRAME)33
-b(=)f(INTEGER)427 4434 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(FluxF)
--7 b(rame.)0 4602 y Fc(Notes:)340 4891 y Fj(\017)45 b
-Fk(When)g(con)n(v)n(ersion)c(b)r(et)n(w)n(een)j(t)n(w)n(o)f(FluxF)-7
-b(rames)44 b(is)g(requested)f(\(as)g(when)h(supplying)g(FluxF)-7
-b(rames)427 4990 y(AST)p Ft(_)p Fk(CONVER)g(T\),)32 b(accoun)n(t)g
-(will)g(b)r(e)g(tak)n(en)g(of)g(the)g(nature)g(of)f(the)i(\015ux)f(co)r
-(ordinate)f(systems)g(they)427 5090 y(represen)n(t,)23
-b(together)f(with)i(an)n(y)e(qualifying)h(attribute)g(v)-5
-b(alues,)24 b(including)g(the)f(AlignSystem)g(attribute.)427
-5189 y(The)j(results)e(will)i(therefore)e(fully)i(re\015ect)f(the)g
-(relationship)g(b)r(et)n(w)n(een)g(p)r(ositions)g(measured)f(in)i(the)f
-(t)n(w)n(o)427 5289 y(systems.)55 b(In)33 b(addition,)i(an)n(y)e
-(di\013erence)h(in)g(the)g(Unit)g(attributes)f(of)h(the)g(t)n(w)n(o)f
-(systems)g(will)h(also)e(b)r(e)427 5389 y(tak)n(en)27
-b(in)n(to)h(accoun)n(t.)340 5524 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5624
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 226 236
-TeXDict begin 226 235 bop 0 52 a FG(226)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(F)l(ORMA)-11 b(T)1078 483
-y Fd(F)h(ormat)37 b(a)i(co)s(ordinate)d(v)-7 b(alue)38
-b(for)g(a)1611 583 y(F)-10 b(rame)38 b(axis)2855 482
-y FA(AST)p Fe(_)p FA(F)l(ORMA)-11 b(T)0 760 y Fc(Description:)44
-b Fk(This)26 b(function)h(returns)e(a)h(c)n(haracter)e(string)h(con)n
-(taining)g(the)h(formatted)g(\(c)n(haracter\))f(v)n(ersion)f(of)i(a)227
-860 y(co)r(ordinate)e(v)-5 b(alue)24 b(for)g(a)h(F)-7
-b(rame)24 b(axis.)35 b(The)24 b(formatting)g(applied)h(is)g(determined)
-f(b)n(y)h(the)g(F)-7 b(rame's)24 b(attributes)227 959
-y(and,)h(in)f(particular,)f(b)n(y)g(an)n(y)g(F)-7 b(ormat)23
-b(attribute)h(string)f(that)h(has)f(b)r(een)i(set)e(for)h(the)g(axis.)
-34 b(A)25 b(suitable)e(default)227 1059 y(format)k(\(based)h(on)f(the)h
-(Digits)g(attribute)g(v)-5 b(alue\))27 b(will)h(b)r(e)g(applied)g(if)g
-(necessary)-7 b(.)0 1216 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_FORMAT\()c(THIS,)j(AXIS,)f(VALUE,)g(STATUS)g
-(\))0 1373 y Fc(Argumen)m(ts:)259 1517 y(THIS)32 b(=)g(INTEGER)g(\(giv)
-m(en\))427 1616 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 1753 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1852 y Fk(The)23 b(n)n(um)n(b)r(er)g(of)f(the)h(F)-7
-b(rame)22 b(axis)g(for)h(whic)n(h)f(formatting)g(is)h(to)g(b)r(e)g(p)r
-(erformed)f(\(axis)g(n)n(um)n(b)r(ering)g(starts)427
-1952 y(at)28 b(1)f(for)g(the)h(\014rst)f(axis\).)259
-2088 y Fc(V)-11 b(ALUE)33 b(=)f(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2188 y Fk(The)d(co)r(ordinate)e(v)-5 b(alue)28 b(to)f(b)r(e)h
-(formatted.)259 2325 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 2424 y Fk(The)c(global)e(status.)0
-2594 y Fc(Returned)32 b(V)-8 b(alue:)259 2737 y(AST)p
-Ft(_)p Fc(F)m(ORMA)g(T)32 b(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h(AST)p Ft(__)p Fc(SZCHR)f(\))427 2837 y Fk(The)d(formatted)f(v)
--5 b(alue.)0 3006 y Fc(Notes:)340 3296 y Fj(\017)45 b
-Fk(A)36 b(formatted)f(v)-5 b(alue)35 b(ma)n(y)f(b)r(e)i(con)n(v)n
-(erted)e(bac)n(k)g(in)n(to)h(a)g(n)n(umerical)f(\(double)h(precision\))
-g(v)-5 b(alue)35 b(using)427 3396 y(AST)p Ft(_)p Fk(UNF)n(ORMA)-7
-b(T.)340 3532 y Fj(\017)45 b Fk(A)25 b(blank)f(string)f(will)i(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)g(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)25 b(set)f(to)g(an)g(error)f(v)-5 b(alue,)427
-3632 y(or)27 b(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 3839 V 0 3969 a FA(AST)p Fe(_)p FA(FRAME)656 b Fd(Create)37
-b(a)i(F)-10 b(rame)658 b FA(AST)p Fe(_)p FA(FRAME)0 4153
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(F)-7
-b(rame)27 b(and)h(optionally)f(initialises)g(its)h(attributes.)227
-4282 y(A)c(F)-7 b(rame)24 b(is)f(used)h(to)g(represen)n(t)e(a)i(co)r
-(ordinate)e(system.)35 b(It)25 b(do)r(es)e(this)h(in)g(rather)f(the)h
-(same)f(w)n(a)n(y)g(that)h(a)f(frame)227 4381 y(around)29
-b(a)g(graph)f(describ)r(es)h(the)h(co)r(ordinate)e(space)h(in)h(whic)n
-(h)f(data)g(are)g(plotted.)43 b(Consequen)n(tly)-7 b(,)29
-b(a)g(F)-7 b(rame)227 4481 y(has)34 b(a)f(Title)i(\(string\))f
-(attribute,)i(whic)n(h)e(describ)r(es)f(the)h(co)r(ordinate)f(space,)i
-(and)f(con)n(tains)f(axes)g(whic)n(h)h(in)227 4581 y(turn)26
-b(hold)g(information)f(suc)n(h)h(as)f(Lab)r(el)g(and)h(Units)h(strings)
-d(whic)n(h)i(are)f(used)h(for)f(lab)r(elling)h(\(e.g.\))36
-b(graphical)227 4680 y(output.)i(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e
-(the)j(n)n(um)n(b)r(er)g(of)f(axes)g(is)g(not)h(restricted)f(to)g(t)n
-(w)n(o.)227 4808 y(F)-7 b(unctions)24 b(are)f(a)n(v)-5
-b(ailable)23 b(for)g(con)n(v)n(erting)f(F)-7 b(rame)24
-b(co)r(ordinate)e(v)-5 b(alues)24 b(in)n(to)g(a)f(form)h(suitable)f
-(for)h(displa)n(y)-7 b(,)24 b(and)227 4908 y(also)j(for)g(calculating)g
-(distances)g(and)g(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f
-(within)h(the)g(F)-7 b(rame.)227 5036 y(F)g(rames)27
-b(ma)n(y)g(also)f(con)n(tain)h(kno)n(wledge)g(of)g(ho)n(w)g(to)h
-(transform)e(to)i(and)f(from)g(related)g(co)r(ordinate)g(systems.)0
-5193 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_FRAME\()c
-(NAXES,)j(OPTIONS,)e(STATUS)h(\))0 5350 y Fc(Argumen)m(ts:)259
-5494 y(NAXES)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 5593
-y Fk(The)c(n)n(um)n(b)r(er)f(of)h(F)-7 b(rame)26 b(axes)g(\(i.e.)37
-b(the)27 b(n)n(um)n(b)r(er)f(of)h(dimensions)f(of)g(the)h(co)r
-(ordinate)f(space)g(whic)n(h)g(the)427 5693 y(F)-7 b(rame)27
-b(describ)r(es\).)p eop end
-%%Page: 227 237
-TeXDict begin 227 236 bop 3643 52 a FG(227)259 351 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)g(c)n(haracter)e(string)h
-(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 551 y(b)r(e)25 b(used)f(for)f
-(initialising)h(the)g(new)h(F)-7 b(rame.)35 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 650 y(routine.)37 b(If)28 b(no)f(initialisation)g(is)
-h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)
-259 788 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 888 y Fk(The)c(global)e(status.)0 1060
-y Fc(Returned)32 b(V)-8 b(alue:)259 1206 y(AST)p Ft(_)p
-Fc(FRAME)31 b(=)h(INTEGER)427 1306 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g
-(new)g(F)-7 b(rame.)0 1478 y Fc(Examples:)227 1625 y
-Fy(FRAME)47 b(=)g(AST)p Ft(_)p Fy(FRAME\()e(2,)i('Title=Energy)d
-(Spectrum',)h(STATUS)h(\);)427 1724 y Fk(Creates)31 b(a)g(new)h
-(2-dimensional)e(F)-7 b(rame)31 b(and)h(initialises)f(its)h(Title)g
-(attribute)g(to)g(the)g(string)f Ft(")p Fk(Energy)427
-1824 y(Sp)r(ectrum)p Ft(")p Fk(.)227 1962 y Fy(FRAME)47
-b(=)g(AST)p Ft(_)p Fy(FRAME\()e(2,)i('Label\(1\)=Energy,)c
-(Label\(2\)=Response',)g(STATUS)j(\);)427 2061 y Fk(Creates)26
-b(a)g(new)h(2-dimensional)e(F)-7 b(rame)26 b(and)g(initialises)h(its)f
-(axis)g(Lab)r(el)h(attributes)f(to)h(suitable)f(string)427
-2161 y(v)-5 b(alues.)0 2333 y Fc(Notes:)340 2625 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2725
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2934 3780 12 v 0 3065
-a FA(AST)p Fe(_)p FA(FRAMESET)318 b Fd(Create)37 b(a)i(F)-10
-b(rameSet)319 b FA(AST)p Fe(_)p FA(FRAMESET)0 3252 y
-Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(F)-7
-b(rameSet)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-3381 y(A)23 b(F)-7 b(rameSet)23 b(consists)e(of)i(a)f(set)h(of)f(one)h
-(or)e(more)h(F)-7 b(rames)22 b(\(whic)n(h)h(describ)r(e)f(co)r
-(ordinate)f(systems\),)j(connected)227 3481 y(together)j(b)n(y)g
-(Mappings)f(\(whic)n(h)i(describ)r(e)e(ho)n(w)h(the)h(co)r(ordinate)e
-(systems)g(are)h(in)n(ter-related\).)35 b(A)28 b(F)-7
-b(rameSet)227 3581 y(mak)n(es)28 b(it)i(p)r(ossible)e(to)h(obtain)g(a)f
-(Mapping)h(b)r(et)n(w)n(een)g(an)n(y)f(pair)g(of)h(these)g(F)-7
-b(rames)28 b(\(i.e.)41 b(to)29 b(con)n(v)n(ert)f(b)r(et)n(w)n(een)227
-3680 y(an)n(y)e(of)g(the)g(co)r(ordinate)f(systems)h(whic)n(h)g(it)g
-(describ)r(es\).)36 b(The)26 b(individual)h(F)-7 b(rames)25
-b(are)g(iden)n(ti\014ed)h(within)h(the)227 3780 y(F)-7
-b(rameSet)34 b(b)n(y)g(an)f(in)n(teger)g(index,)j(with)e(F)-7
-b(rames)34 b(b)r(eing)g(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)h
-(one)f(as)g(they)i(are)227 3880 y(added)28 b(to)f(the)h(F)-7
-b(rameSet.)227 4009 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fk(base)p Ft(")e Fk(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fk(curren)n(t)p Ft(")e Fk(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-4109 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 4208 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 4308 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 4408 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 4537
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fk(nativ)n(e)p Ft(")e Fk(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 4637
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fk(apparen)n(t)p Ft(")227 4736 y Fk(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 4836 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 4966 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 5065 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 5165 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 5295 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-5394 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fk(nativ)n(e)p Ft(")227 5494 y Fk(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fk(apparen)n(t)p Ft(")f Fk(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 5593 y(in)n(v)n(erted)e(\(see)
-g(AST)p Ft(_)p Fk(INVER)-7 b(T\),)34 b(whic)n(h)f(has)g(the)h(e\013ect)
-g(of)f(in)n(terc)n(hanging)e(its)j(base)f(and)g(curren)n(t)f(F)-7
-b(rames)227 5693 y(and)28 b(hence)f(of)h(rev)n(ersing)d(the)j(Mapping)g
-(b)r(et)n(w)n(een)f(them.)p eop end
-%%Page: 228 238
-TeXDict begin 228 237 bop 0 52 a FG(228)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(Regions)i(ma)n(y)f(b)
-r(e)i(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33 b(\(since)g(a)g(Region)g
-(is)g(a)g(t)n(yp)r(e)h(of)f(F)-7 b(rame\),)35 b(either)e(explicitly)g
-(or)227 451 y(as)e(comp)r(onen)n(ts)g(within)h(CmpF)-7
-b(rames.)48 b(In)31 b(this)h(case)e(the)i(Mapping)f(b)r(et)n(w)n(een)g
-(a)g(pair)g(of)g(F)-7 b(rames)31 b(within)h(a)227 551
-y(F)-7 b(rameSet)35 b(will)g(include)g(the)h(e\013ects)f(of)g(the)g
-(clipping)g(pro)r(duced)g(b)n(y)f(an)n(y)h(Regions)f(included)h(in)g
-(the)g(path)227 650 y(b)r(et)n(w)n(een)28 b(the)g(F)-7
-b(rames.)0 799 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_FRAMESET\()38 b(FRAME,)j(OPTIONS,)g(STATUS)g(\))0
-947 y Fc(Argumen)m(ts:)259 1083 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 1183 y Fk(P)n(oin)n(ter)27 b(to)h(the)g(\014rst)g(F)-7
-b(rame)28 b(to)g(b)r(e)g(inserted)g(in)n(to)g(the)g(F)-7
-b(rameSet.)39 b(This)28 b(initially)g(b)r(ecomes)g(b)r(oth)g(the)427
-1282 y(base)j(and)h(the)g(curren)n(t)f(F)-7 b(rame.)48
-b(\(F)-7 b(urther)32 b(F)-7 b(rames)31 b(ma)n(y)f(b)r(e)j(added)e
-(using)g(the)h(AST)p Ft(_)p Fk(ADDFRAME)427 1382 y(routine.\))259
-1514 y Fc(OPTIONS)g(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1614 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 1713 y(used)j(for)f
-(initialising)g(the)h(new)g(F)-7 b(rameSet.)35 b(The)24
-b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)h(that)g(for)f(the)h(AST)p
-Ft(_)p Fk(SET)427 1813 y(routine.)37 b(If)28 b(no)f(initialisation)g
-(is)h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h
-(supplied.)259 1945 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 2045 y Fk(The)c(global)e(status.)0
-2206 y Fc(Returned)32 b(V)-8 b(alue:)259 2341 y(AST)p
-Ft(_)p Fc(FRAMESET)427 2441 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)
-g(F)-7 b(rameSet.)0 2602 y Fc(Notes:)340 2884 y Fj(\017)45
-b Fk(If)20 b(a)f(p)r(oin)n(ter)g(to)h(an)f(existing)g(F)-7
-b(rameSet)19 b(is)g(giv)n(en)g(for)g(the)h(FRAME)f(argumen)n(t,)i(then)
-e(the)h(new)g(F)-7 b(rameSet)427 2984 y(will)28 b(\(as)f(a)g(sp)r
-(ecial)g(case\))g(b)r(e)h(initialised)f(to)g(con)n(tain)g(the)h(same)f
-(F)-7 b(rames)26 b(and)h(Mappings,)g(and)h(to)f(ha)n(v)n(e)427
-3083 y(the)h(same)f(attribute)g(v)-5 b(alues,)27 b(as)g(the)g(one)g
-(supplied.)37 b(This)27 b(pro)r(cess)f(is)i(similar)e(to)h(making)g(a)f
-(cop)n(y)h(of)g(a)427 3183 y(F)-7 b(rameSet)26 b(\(see)f(AST)p
-Ft(_)p Fk(COPY\),)g(except)h(that)g(the)g(F)-7 b(rames)24
-b(and)i(Mappings)f(con)n(tained)f(in)i(the)g(original)427
-3282 y(are)h(not)g(themselv)n(es)h(copied,)f(but)h(are)f(shared)f(b)n
-(y)i(b)r(oth)g(F)-7 b(rameSets.)340 3414 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 3514
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3712 3780 12 v 0 3843
-a FA(AST)p Fe(_)p FA(GENCUR)-15 b(VE)294 b Fd(Dra)m(w)38
-b(a)h(generalized)1753 3943 y(curv)m(e)2673 3843 y FA(AST)p
-Fe(_)p FA(GENCUR)-15 b(VE)0 4107 y Fc(Description:)44
-b Fk(This)31 b(routine)g(dra)n(ws)f(a)g(general)g(user-de\014ned)g
-(curv)n(e)h(de\014ned)g(b)n(y)g(the)g(supplied)h(Mapping.)47
-b(Note)227 4207 y(that)25 b(the)g(curv)n(e)f(is)g(transformed)g(in)n
-(to)g(graphical)f(co)r(ordinate)h(space)g(for)g(plotting,)h(so)f(that)h
-(a)f(straigh)n(t)f(line)i(in)227 4306 y(ph)n(ysical)f(co)r(ordinates)f
-(ma)n(y)g(result)h(in)h(a)f(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e
-(if)i(the)g(Mapping)f(in)n(v)n(olv)n(ed)f(is)h(non-linear.)227
-4406 y(An)n(y)j(discon)n(tin)n(uities)f(in)h(the)f(Mapping)h(b)r(et)n
-(w)n(een)f(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(are)g
-(catered)h(for,)g(as)227 4506 y(is)i(an)n(y)f(clipping)g(established)g
-(using)h(AST)p Ft(_)p Fk(CLIP)-7 b(.)227 4630 y(If)35
-b(y)n(ou)f(need)h(to)f(dra)n(w)g(simple)h(straigh)n(t)e(lines)i(\(geo)r
-(desics\),)g(AST)p Ft(_)p Fk(CUR)-9 b(VE)35 b(or)f(AST)p
-Ft(_)p Fk(POL)-7 b(YCUR)e(VE)33 b(will)227 4729 y(usually)27
-b(b)r(e)h(easier)f(to)g(use)h(and)f(faster.)0 4878 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_GENCURVE\()c(THIS,)j
-(MAP)i(\))0 5027 y Fc(Argumen)m(ts:)259 5162 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5262 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 5394 y Fc(MAP)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(P)n(oin)n(ter)21 b(to)h(a)g(Mapping.)35 b(This)22
-b(Mapping)g(should)g(ha)n(v)n(e)f(1)h(input)i(co)r(ordinate)d(represen)
-n(ting)g(o\013set)h(along)427 5593 y(the)31 b(required)d(curv)n(e,)i
-(normalized)f(so)g(that)h(the)g(start)g(of)f(the)i(curv)n(e)e(is)g(at)h
-(o\013set)g(0.0,)g(and)f(the)i(end)f(of)427 5693 y(the)j(curv)n(e)f(is)
-g(at)h(o\013set)g(1.0.)51 b(Note,)34 b(this)f(o\013set)f(do)r(es)h(not)
-f(need)h(to)g(b)r(e)g(linearly)e(related)h(to)h(distance)p
-eop end
-%%Page: 229 239
-TeXDict begin 229 238 bop 3643 52 a FG(229)427 351 y
-Fk(along)29 b(the)h(curv)n(e.)42 b(The)30 b(n)n(um)n(b)r(er)f(of)h
-(output)g(co)r(ordinates)f(should)g(equal)g(the)h(n)n(um)n(b)r(er)g(of)
-f(axes)g(in)h(the)427 451 y(curren)n(t)e(F)-7 b(rame)28
-b(of)h(the)g(Plot.)39 b(The)29 b(Mapping)f(should)g(map)h(a)f(sp)r
-(eci\014ed)h(o\013set)f(along)g(the)h(curv)n(e,)f(in)n(to)427
-551 y(the)h(corresp)r(onding)e(co)r(ordinates)g(in)i(the)h(curren)n(t)d
-(F)-7 b(rame)29 b(of)f(the)h(Plot.)40 b(The)29 b(in)n(v)n(erse)e
-(transformation)427 650 y(need)h(not)g(b)r(e)g(de\014ned.)259
-785 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 885 y Fk(The)c(global)e(status.)0 1051
-y Fc(Notes:)340 1337 y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h
-(the)g(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h
-(2-dimensional.)340 1472 y Fj(\017)45 b Fk(An)30 b(error)d(also)g
-(results)i(if)g(the)g(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)
-n(t)f(and)h(base)f(F)-7 b(rames)28 b(of)h(the)g(Plot)427
-1572 y(is)f(not)f(de\014ned)h(\(i.e.)38 b(the)28 b(Plot's)e(T)-7
-b(ranIn)n(v)n(erse)26 b(attribute)h(is)h(zero\).)p 0
-1775 3780 12 v 0 1906 a FA(AST)p Fe(_)p FA(GET)p Fb(<)p
-FA(X)p Fb(>)1145 1907 y Fd(Get)38 b(an)h(attribute)d(v)-7
-b(alue)38 b(for)g(an)1716 2007 y(Ob)7 b(ject)2877 1906
-y FA(AST)p Fe(_)p FA(GET)p Fb(<)p FA(X)p Fb(>)0 2200
-y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(family)g(of)h(functions)f
-(whic)n(h)h(return)f(a)f(sp)r(eci\014ed)i(attribute)g(v)-5
-b(alue)28 b(for)g(an)g(Ob)5 b(ject)28 b(using)227 2299
-y(one)c(of)h(sev)n(eral)e(di\013eren)n(t)h(data)g(t)n(yp)r(es.)36
-b(The)25 b(t)n(yp)r(e)f(is)h(selected)f(b)n(y)g(replacing)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)f(function)i(name)e(b)n(y)227
-2399 y(C,)j(D,)g(I,)g(L)f(or)g(R,)h(to)f(obtain)g(a)h(result)f(in)h
-(Character,)e(Double)h(precision,)g(In)n(teger,)g(Logical)f(or)h(Real)g
-(format,)227 2499 y(resp)r(ectiv)n(ely)-7 b(.)227 2625
-y(If)30 b(p)r(ossible,)f(the)h(attribute)g(v)-5 b(alue)29
-b(is)g(con)n(v)n(erted)f(to)h(the)g(t)n(yp)r(e)h(y)n(ou)e(request.)42
-b(If)29 b(con)n(v)n(ersion)e(is)j(not)f(p)r(ossible,)227
-2725 y(an)f(error)d(will)j(result.)0 2879 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GET)p Fm(<)p Ft(X)p Fm(>)p Ft(\()c(THIS,)j
-(ATTRIB,)e(STATUS)h(\))0 3032 y Fc(Argumen)m(ts:)259
-3173 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3272
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 3407
-y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3507 y Fk(A)c(c)n(haracter)e(string)
-h(con)n(taining)f(the)i(name)g(of)f(the)h(attribute)g(whose)f(v)-5
-b(alue)27 b(is)h(required.)259 3642 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3741
-y Fk(The)c(global)e(status.)0 3908 y Fc(Class)31 b(Applicabilit)m(y:)
-259 4048 y(Ob)5 b(ject)427 4148 y Fk(These)28 b(functions)f(apply)h(to)
-f(all)h(Ob)5 b(jects.)0 4314 y Fc(Returned)32 b(V)-8
-b(alue:)259 4454 y(AST)p Ft(_)p Fc(GET)p Fm(<)p Fc(X)p
-Fm(>)32 b Fc(=)g Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)427
-4554 y Fk(The)c(attribute)g(v)-5 b(alue,)27 b(in)h(the)g(data)f(t)n(yp)
-r(e)h(corresp)r(onding)e(to)h Fm(<)p Fk(X)p Fm(>)p Fk(.)0
-4720 y Fc(Examples:)227 4833 y Fy(WRITE\()46 b Fj(\003)p
-Fy(,)h('\('')g(RefCount)e(=)j('',)f(A10)g(\)')g(\))g(AST)p
-Ft(_)p Fy(GETC\()f(Z,)h('RefCount',)d(STATUS)227 4932
-y(\))427 5006 y Fk(Prin)n(ts)27 b(the)h(RefCoun)n(t)g(attribute)f(v)-5
-b(alue)28 b(for)f(Ob)5 b(ject)27 b(Z)h(as)f(a)g(c)n(haracter)e(string.)
-227 5145 y Fy(NAXES)47 b(=)g(AST)p Ft(_)p Fy(GETI\()e(FRAME,)h
-('Naxes',)g(STATUS)g(\))427 5240 y Fk(Obtains)27 b(the)h(v)-5
-b(alue)28 b(of)f(the)h(Naxes)f(attribute)h(for)f(Ob)5
-b(ject)28 b(FRAME)f(as)g(an)h(in)n(teger.)0 5406 y Fc(Notes:)340
-5693 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)p eop end
-%%Page: 230 240
-TeXDict begin 230 239 bop 0 52 a FG(230)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(An)29 b(appropriate)d Ft(")p Fk(n)n(ull)p Ft(")h
-Fk(v)-5 b(alue)28 b(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(ST)-7 b(A)g(TUS)29 b(set)f(to)427
-451 y(an)i(error)d(v)-5 b(alue,)31 b(or)e(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)42 b(This)30 b(n)n(ull)g(v)-5
-b(alue)29 b(is)h(zero)e(for)i(n)n(umeric)f(v)-5 b(alues,)427
-551 y(.F)c(ALSE.)28 b(for)f(logical)f(v)-5 b(alues,)27
-b(and)h(blank)f(for)g(c)n(haracter)f(v)-5 b(alues.)340
-685 y Fj(\017)45 b Fk(Numerical)26 b(attribute)g(v)-5
-b(alues)26 b(of)g(zero)g(translate)f(to)h(logical)f(v)-5
-b(alue)26 b(.F)-9 b(ALSE.)26 b(and)g(all)g(other)f(n)n(umerical)427
-785 y(v)-5 b(alues)27 b(translate)g(to)h(.TR)n(UE..)p
-0 988 3780 12 v 0 1119 a FA(AST)p Fe(_)p FA(GET)-11 b(A)l(CTIVEUNIT)
-1640 1136 y Fd(Determines)1687 1236 y(ho)m(w)37 b(the)1774
-1336 y(Unit)1662 1435 y(attribute)1719 1535 y(will)g(b)s(e)1776
-1635 y(used)2291 1119 y FA(AST)p Fe(_)p FA(GET)-11 b(A)l(CTIVEUNIT)0
-1804 y Fc(Description:)44 b Fk(This)24 b(routine)f(returns)g(the)h
-(curren)n(t)f(v)-5 b(alue)24 b(of)f(the)h(Activ)n(eUnit)h(\015ag)d(for)
-i(a)f(F)-7 b(rame.)35 b(See)23 b(the)h(descrip-)227 1904
-y(tion)k(of)f(the)h(AST)p Ft(_)p Fk(SET)-7 b(A)n(CTIVEUNIT)28
-b(routine)f(for)g(a)g(description)g(of)h(the)g(Activ)n(eUnit)g(\015ag.)
-0 2057 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_GETACTIVEUNI)o(T\()37 b(THIS,)42 b(STATUS)f(\))0
-2211 y Fc(Argumen)m(ts:)259 2351 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2451 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 2586 y Fc(ST)f(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)
-g(Returned\))427 2685 y Fk(The)c(global)e(status.)0 2851
-y Fc(Returned)32 b(V)-8 b(alue:)259 2991 y(AST)p Ft(_)p
-Fc(GET)g(A)m(CTIVEUNIT)34 b(=)e(LOGICAL)427 3091 y Fk(The)c(curren)n(t)
-f(v)-5 b(alue)27 b(of)h(the)g(Activ)n(eUnit)g(\015ag.)0
-3257 y Fc(Notes:)340 3543 y Fj(\017)45 b Fk(A)28 b(v)-5
-b(alue)28 b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g(returned)f(if)h
-(this)g(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7
-b(A)g(TUS)28 b(set)g(to)f(an)h(error)427 3643 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 3846 V 0 3977 a FA(AST)p Fe(_)p FA(GETFITS)p Fb(<)p
-FA(X)p Fb(>)1558 3978 y Fd(Get)38 b(a)h(named)1389 4078
-y(k)m(eyw)m(ord)e(v)-7 b(alue)38 b(from)1604 4192 y(a)h(FitsChan)2574
-3977 y FA(AST)p Fe(_)p FA(GETFITS)p Fb(<)p FA(X)p Fb(>)0
-4362 y Fc(Description:)44 b Fk(This)21 b(is)f(a)g(family)g(of)g
-(functions)h(whic)n(h)f(gets)g(a)g(v)-5 b(alue)20 b(for)g(a)g(named)g
-(k)n(eyw)n(ord)f(from)h(a)g(FitsChan)g(using)227 4461
-y(one)33 b(of)f(sev)n(eral)f(di\013eren)n(t)i(data)f(t)n(yp)r(es.)53
-b(The)32 b(data)h(t)n(yp)r(e)f(of)h(the)g(returned)g(v)-5
-b(alue)32 b(is)h(selected)f(b)n(y)h(replacing)227 4561
-y Fm(<)p Fk(X)p Fm(>)c Fk(in)h(the)g(function)g(name)f(b)n(y)h(one)f
-(of)g(the)h(follo)n(wing)f(strings)f(represen)n(ting)g(the)i
-(recognised)e(FITS)i(data)227 4661 y(t)n(yp)r(es:)227
-4787 y(The)f(data)e(t)n(yp)r(e)i(of)f(the)h(returned)f(v)-5
-b(alue)28 b(is)g(selected)g(b)n(y)g(replacing)g Fm(<)p
-Fk(X)p Fm(>)f Fk(in)i(the)g(function)g(name)f(b)n(y)g(one)g(of)227
-4887 y(the)g(follo)n(wing)f(strings)f(represen)n(ting)h(the)h
-(recognised)d(FITS)j(data)g(t)n(yp)r(es:)340 5154 y Fj(\017)45
-b Fk(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 5289 y Fj(\017)45 b Fk(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 5423 y Fj(\017)45 b Fk(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 5558 y Fj(\017)45 b Fk(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 5693 y Fj(\017)45
-b Fk(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)p eop end
-%%Page: 231 241
-TeXDict begin 231 240 bop 3643 52 a FG(231)340 351 y
-Fj(\017)45 b Fk(S)28 b(-)f(String)h(v)-5 b(alues.)340
-486 y Fj(\017)45 b Fk(CN)32 b(-)g(A)g Ft(")p Fk(CONTINUE)p
-Ft(")e Fk(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n(e)g(string)g
-(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-586 y(an)d(equals)e(sign.)227 752 y(The)i(data)f(t)n(yp)r(e)h(of)f(the)
-h Ft(")p Fk(v)-5 b(alue)p Ft(")27 b Fk(argumen)n(t)g(dep)r(ends)h(on)f
-Fm(<)p Fk(X)p Fm(>)g Fk(as)g(follo)n(ws:)340 1020 y Fj(\017)45
-b Fk(CF)32 b(-)e(DOUBLE)h(PRECISION\(2\))f(\(a)h(2)g(elemen)n(t)g(arra)
-n(y)e(to)i(hold)g(the)h(real)e(and)h(imaginary)e(parts)i(of)427
-1120 y(the)d(complex)f(v)-5 b(alue\).)340 1255 y Fj(\017)45
-b Fk(CI)32 b(-)g(INTEGER\(2\))g(\(a)f(2)h(elemen)n(t)g(arra)n(y)e(to)h
-(hold)h(the)g(real)f(and)h(imaginary)f(parts)g(of)h(the)g(complex)427
-1355 y(v)-5 b(alue\).)340 1490 y Fj(\017)45 b Fk(F)28
-b(-)f(DOUBLE)h(PRECISION.)340 1625 y Fj(\017)45 b Fk(I)28
-b(-)f(INTEGER)340 1760 y Fj(\017)45 b Fk(L)28 b(-)f(LOGICAL)340
-1895 y Fj(\017)45 b Fk(S)28 b(-)f(CHARA)n(CTER)340 2030
-y Fj(\017)45 b Fk(CN)28 b(-)g(CHARA)n(CTER)0 2197 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETFITS)p Fm(<)p
-Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(NAME,)f(VALUE,)h(STATUS)f(\))0
-2351 y Fc(Argumen)m(ts:)259 2492 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2591 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2726 y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2826 y Fk(A)25 b(c)n(haracter)d
-(string)i(con)n(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35
-b(This)25 b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427
-2926 y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g
-(is)g(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n
-(haracters)f(are)427 3025 y(read)h(from)g(this)h(string.)259
-3160 y Fc(V)-11 b(ALUE)33 b(=)f Fm(<)p Fc(X)p Fm(>)p
-Fc(t)m(yp)s(e)g(\(Giv)m(en\))427 3260 y Fk(A)c(bu\013er)g(to)f(receiv)n
-(e)g(the)h(k)n(eyw)n(ord)d(v)-5 b(alue.)37 b(The)28 b(data)f(t)n(yp)r
-(e)h(dep)r(ends)g(on)f Fm(<)p Fk(X)p Fm(>)g Fk(as)g(describ)r(ed)h(ab)r
-(o)n(v)n(e.)259 3395 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 3495 y Fk(The)c(global)e(status.)0
-3661 y Fc(Returned)32 b(V)-8 b(alue:)259 3802 y(AST)p
-Ft(_)p Fc(GETFITS)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)h(LOGICAL)427
-3902 y Fk(.F)-9 b(ALSE.)35 b(is)g(returned)f(if)h(the)h(k)n(eyw)n(ord)d
-(w)n(as)g(not)i(found)g(in)g(the)h(FitsChan)f(\(no)f(error)f(is)i(rep)r
-(orted\).)427 4002 y(Otherwise,)27 b(a)g(v)-5 b(alue)28
-b(of)f(.TR)n(UE.)h(is)f(returned.)0 4168 y Fc(Notes:)340
-4455 y Fj(\017)45 b Fk(The)27 b(card)e(follo)n(wing)h(the)h(curren)n(t)
-e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37 b(If)27
-b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-4555 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 4654 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 4754 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 4889 y Fj(\017)45
-b Fk(If)28 b(the)f(requested)f(card)g(is)h(found,)h(it)f(b)r(ecomes)g
-(the)g(curren)n(t)f(card,)g(otherwise)h(the)g(curren)n(t)f(card)g(is)h
-(left)427 4989 y(p)r(oin)n(ting)h(at)f(the)h Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)340 5124 y Fj(\017)45 b Fk(If)34 b(the)f(stored)f(k)n(eyw)n
-(ord)f(v)-5 b(alue)33 b(is)f(not)h(of)g(the)g(requested)f(t)n(yp)r(e,)j
-(it)e(is)g(con)n(v)n(erted)e(in)n(to)i(the)g(requested)427
-5224 y(t)n(yp)r(e.)340 5359 y Fj(\017)45 b Fk(If)33 b(the)f(k)n(eyw)n
-(ord)f(is)h(found)g(in)g(the)h(FitsChan,)g(but)g(has)f(no)f(asso)r
-(ciated)g(v)-5 b(alue,)33 b(an)f(error)e(is)i(rep)r(orted.)427
-5458 y(If)i(necessary)-7 b(,)34 b(the)g(AST)p Ft(_)p
-Fk(TESTFITS)f(function)h(can)f(b)r(e)h(used)f(to)h(determine)f(if)h
-(the)g(k)n(eyw)n(ord)e(has)h(a)427 5558 y(de\014ned)28
-b(v)-5 b(alue)28 b(in)g(the)g(FitsChan)f(prior)g(to)g(calling)g(this)h
-(function.)340 5693 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g
-(rep)r(orted)f(if)h(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h
-(conform)e(to)i(FITS)g(requiremen)n(ts.)p eop end
-%%Page: 232 242
-TeXDict begin 232 241 bop 0 52 a FG(232)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(.F)-9 b(ALSE.)26 b(is)g(returned)g(as)f(the)i(function)f(v)-5
-b(alue)26 b(if)h(an)f(error)e(has)h(already)g(o)r(ccurred,)g(or)g(if)i
-(this)f(function)427 451 y(should)i(fail)f(for)g(an)n(y)g(reason.)340
-594 y Fj(\017)45 b Fk(The)28 b(FITS)g(standard)f(sa)n(ys)f(that)i
-(string)f(k)n(eyw)n(ord)e(v)-5 b(alues)28 b(should)f(b)r(e)h(padded)g
-(with)g(trailing)e(spaces)h(if)427 694 y(they)21 b(are)e(shorter)h
-(than)g(8)g(c)n(haracters.)33 b(F)-7 b(or)19 b(this)i(reason,)g
-(trailing)e(spaces)h(are)f(remo)n(v)n(ed)g(from)h(the)h(string)427
-793 y(returned)27 b(b)n(y)g(AST)p Ft(_)p Fk(GETFITSS)g(if)g(the)h
-(original)d(string)i(\(including)g(an)n(y)f(trailing)h(spaces\))f(con)n
-(tains)g(8)427 893 y(or)h(few)n(er)g(c)n(haracters.)35
-b(T)-7 b(railing)26 b(spaces)h(are)f(not)i(remo)n(v)n(ed)e(from)h
-(longer)f(strings.)p 0 1113 3780 12 v 0 1243 a FA(AST)p
-Fe(_)p FA(GETFRAME)1340 1244 y Fd(Obtain)38 b(a)g(p)s(oin)m(ter)g(to)g
-(a)1377 1359 y(sp)s(eci\014ed)h(F)-10 b(rame)38 b(in)g(a)1648
-1472 y(F)-10 b(rameSet)2658 1243 y FA(AST)p Fe(_)p FA(GETFRAME)0
-1658 y Fc(Description:)44 b Fk(This)28 b(function)g(returns)f(a)g(p)r
-(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)h(F)-7 b(rame)27
-b(in)h(a)f(F)-7 b(rameSet.)0 1828 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GETFRAME\()38 b(THIS,)k(IFRAME,)e(STATUS)i(\))
-0 1998 y Fc(Argumen)m(ts:)259 2155 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2254 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rameSet.)259 2397 y Fc(IFRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427
-2497 y Fk(The)j(index)g(of)f(the)h(required)f(F)-7 b(rame)34
-b(within)h(the)g(F)-7 b(rameSet.)58 b(This)35 b(v)-5
-b(alue)34 b(should)g(lie)h(in)g(the)g(range)427 2597
-y(from)28 b(1)f(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)g(giv)n(en)g(b)n(y)g
-(its)h(Nframe)g(attribute\).)259 2740 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2839
-y Fk(The)c(global)e(status.)0 3022 y Fc(Returned)32 b(V)-8
-b(alue:)259 3178 y(AST)p Ft(_)p Fc(GETFRAME)32 b(=)g(INTEGER)427
-3278 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(requested)f(F)-7
-b(rame.)0 3460 y Fc(Notes:)340 3763 y Fj(\017)45 b Fk(A)32
-b(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fk(BASE)f(or)g(AST)p
-Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)n(en)f(for)h(the)g(IFRAME)h
-(argumen)n(t)e(to)427 3863 y(sp)r(ecify)e(the)g(base)f(F)-7
-b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n
-(ely)-7 b(.)340 4006 y Fj(\017)45 b Fk(This)28 b(function)g(incremen)n
-(ts)f(the)h(RefCoun)n(t)g(attribute)g(of)f(the)h(selected)g(F)-7
-b(rame)27 b(b)n(y)g(one.)340 4149 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4249
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4468 V 0 4599 a FA(AST)p
-Fe(_)p FA(GETGRF)l(CONTEXT)1738 4617 y Fd(Return)1808
-4716 y(the)1738 4816 y(KeyMap)1782 4930 y(that)1812 5030
-y(de-)1738 5130 y(scrib)s(es)1860 5229 y(a)1742 5329
-y(Plot's)1738 5429 y(graph-)1824 5539 y(ics)1782 5639
-y(con-)1787 5739 y(text)2194 4599 y FA(AST)p Fe(_)p FA(GETGRF)l
-(CONTEXT)p eop end
-%%Page: 233 243
-TeXDict begin 233 242 bop 3643 52 a FG(233)0 351 y Fc(Description:)44
-b Fk(This)25 b(routine)g(returns)f(a)h(reference)f(to)g(a)h(KeyMap)f
-(that)h(will)g(b)r(e)h(passed)e(to)h(an)n(y)f(dra)n(wing)f(routines)227
-451 y(registered)k(using)g(AST)p Ft(_)p Fk(GRFSET.)i(This)e(KeyMap)h
-(can)f(b)r(e)i(used)e(b)n(y)h(an)g(application)f(to)h(pass)f
-(information)227 551 y(to)35 b(the)h(dra)n(wing)e(routines)g(ab)r(out)i
-(the)f(con)n(text)g(in)h(whic)n(h)f(they)g(are)f(b)r(eing)i(called.)59
-b(The)35 b(con)n(ten)n(ts)g(of)g(the)227 650 y(KeyMap)27
-b(are)g(nev)n(er)f(accessed)h(b)n(yt)g(the)h(Plot)f(class)g(itself.)0
-798 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_GETGRFCONTEX)o(T\()37 b(THIS,)42 b(STATUS)f(\))0
-946 y Fc(Argumen)m(ts:)259 1081 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 1180 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-1312 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1411 y Fk(The)c(global)e(status.)0 1572
-y Fc(Returned)32 b(V)-8 b(alue:)259 1706 y(AST)p Ft(_)p
-Fc(GETGRF)m(CONTEXT)33 b(=)f(INTEGER)427 1806 y Fk(A)f(p)r(oin)n(ter)f
-(to)h(the)g(graphics)e(con)n(text)h(KeyMap.)45 b(The)31
-b(returned)f(p)r(oin)n(ter)h(should)f(b)r(e)h(ann)n(ulled)f(when)427
-1906 y(it)e(is)g(no)f(longer)f(needed.)p 0 2102 3780
-12 v 0 2233 a FA(AST)p Fe(_)p FA(GETLINE)1103 2234 y
-Fd(Obtain)38 b(text)f(to)i(b)s(e)g(written)e(b)m(y)h(a)1355
-2348 y(Channel)f(sink)i(routine)2836 2233 y FA(AST)p
-Fe(_)p FA(GETLINE)0 2511 y Fc(Description:)44 b Fk(This)33
-b(routine)f(should)g(only)g(b)r(e)h(used)f(when)g(implemen)n(ting)h(a)f
-(routine)g(whic)n(h)g(will)h(b)r(e)g(passed)e(as)227
-2610 y(the)c(SINK)f(argumen)n(t)g(to)g(AST)p Ft(_)p Fk(CHANNEL.)h(It)f
-(should)g(b)r(e)h(used)f(to)g(obtain)g(\(from)h(the)f(AST)h(library\))e
-(eac)n(h)227 2710 y(line)30 b(of)f(text)h(whic)n(h)f(is)g(to)g(b)r(e)h
-(written)f(to)h(the)f(external)g(data)f(sink.)42 b(One)29
-b(suc)n(h)g(line)h(should)f(b)r(e)g(obtained)g(in)227
-2810 y(this)f(w)n(a)n(y)f(for)g(eac)n(h)f(in)n(v)n(o)r(cation)h(of)g
-(the)h(sink)g(routine.)0 2957 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GETLINE\()c(LINE,)k(L,)h(STATUS)e(\))0
-3105 y Fc(Argumen)m(ts:)259 3240 y(LINE)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Returned\))427
-3340 y Fk(The)f(line)g(of)g(text)g(to)g(b)r(e)g(written.)47
-b(Dep)r(ending)32 b(on)e(the)i(length)f(of)f(c)n(haracter)f(v)-5
-b(ariable)30 b(supplied,)i(the)427 3439 y(returned)c(text)g(ma)n(y)f(b)
-r(e)h(truncated)g(if)g(necessary)-7 b(.)36 b(Note,)28
-b(ho)n(w)n(ev)n(er,)e(that)i(it)g(will)g(not)g(b)r(e)g(padded)g(with)
-427 3539 y(blanks)f(in)h(order)e(to)i(\014ll)g(this)g(v)-5
-b(ariable.)259 3670 y Fc(L)32 b(=)g(INTEGER)g(\(Returned\))427
-3770 y Fk(The)j(n)n(um)n(b)r(er)g(of)g(c)n(haracters)d(returned,)37
-b(whic)n(h)e(ma)n(y)f(b)r(e)h(zero.)58 b(Note)35 b(that)g(c)n
-(haracters)e(b)r(ey)n(ond)h(the)427 3870 y(L'th)28 b(c)n(haracter)e(in)
-i(the)g(LINE)f(v)-5 b(ariable)27 b(are)f(not)i(mo)r(di\014ed)g(and)f
-(ma)n(y)g(therefore)g(con)n(tain)g(junk.)259 4001 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4100 y Fk(The)c(global)e(status.)0 4261 y Fc(Notes:)340
-4542 y Fj(\017)45 b Fk(This)28 b(routine)f(is)h(only)f(a)n(v)-5
-b(ailable)26 b(in)i(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h(the)g
-(AST)g(library)-7 b(.)p 0 4738 V 0 4869 a FA(AST)p Fe(_)p
-FA(GETMAPPING)1662 4870 y Fd(Obtain)38 b(a)1537 4969
-y(Mapping)g(that)1454 5084 y(con)m(v)m(erts)f(b)s(et)m(w)m(een)1479
-5183 y(t)m(w)m(o)g(F)-10 b(rames)39 b(in)f(a)1648 5283
-y(F)-10 b(rameSet)2487 4869 y FA(AST)p Fe(_)p FA(GETMAPPING)0
-5445 y Fc(Description:)44 b Fk(This)31 b(function)h(returns)e(a)h(p)r
-(oin)n(ter)f(to)h(a)g(Mapping)g(that)g(will)g(con)n(v)n(ert)f(co)r
-(ordinates)f(b)r(et)n(w)n(een)i(the)227 5545 y(co)r(ordinate)c(systems)
-g(represen)n(ted)f(b)n(y)i(t)n(w)n(o)e(F)-7 b(rames)27
-b(in)h(a)f(F)-7 b(rameSet.)0 5693 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GETMAPPING\()37 b(THIS,)42 b(IFRAME1,)e
-(IFRAME2,)g(STATUS)i(\))p eop end
-%%Page: 234 244
-TeXDict begin 234 243 bop 0 52 a FG(234)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Argumen)m(ts:)259
-481 y(THIS)h(=)g(INTEGER)g(\(Giv)m(en\))427 580 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 706 y Fc(IFRAME1)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 806 y Fk(The)g(index)g(of)g(the)h
-(\014rst)e(F)-7 b(rame)31 b(in)g(the)g(F)-7 b(rameSet.)47
-b(This)31 b(F)-7 b(rame)30 b(describ)r(es)h(the)g(co)r(ordinate)f
-(system)427 906 y(for)d(the)h Ft(")p Fk(input)p Ft(")g
-Fk(end)g(of)f(the)h(Mapping.)259 1031 y Fc(IFRAME2)j(=)h(INTEGER)f
-(\(Giv)m(en\))427 1131 y Fk(The)25 b(index)f(of)h(the)f(second)g(F)-7
-b(rame)24 b(in)h(the)f(F)-7 b(rameSet.)36 b(This)24 b(F)-7
-b(rame)24 b(describ)r(es)g(the)h(co)r(ordinate)e(system)427
-1231 y(for)k(the)h Ft(")p Fk(output)p Ft(")g Fk(end)f(of)h(the)g
-(Mapping.)259 1357 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 1456 y Fk(The)c(global)e(status.)0
-1611 y Fc(Returned)32 b(V)-8 b(alue:)259 1741 y(AST)p
-Ft(_)p Fc(GETMAPPING)33 b(=)f(INTEGER)427 1840 y Fk(P)n(oin)n(ter)e(to)
-h(a)f(Mapping)h(whose)g(forw)n(ard)e(transformation)g(con)n(v)n(erts)h
-(co)r(ordinates)f(from)i(the)h(\014rst)e(co-)427 1940
-y(ordinate)25 b(system)h(to)f(the)h(second)f(one,)h(and)g(whose)f(in)n
-(v)n(erse)f(transformation)g(con)n(v)n(erts)g(co)r(ordinates)g(in)427
-2040 y(the)k(opp)r(osite)f(direction.)0 2194 y Fc(Notes:)340
-2470 y Fj(\017)45 b Fk(The)23 b(returned)g(Mapping)f(will)h(include)h
-(the)f(clipping)g(e\013ect)g(of)g(an)n(y)f(Regions)g(whic)n(h)h(o)r
-(ccur)g(on)f(the)h(path)427 2570 y(b)r(et)n(w)n(een)28
-b(the)g(t)n(w)n(o)f(supplied)h(F)-7 b(rames)26 b(\(this)j(includes)e
-(the)h(t)n(w)n(o)f(supplied)h(F)-7 b(rames)27 b(themselv)n(es\).)340
-2696 y Fj(\017)45 b Fk(The)32 b(v)-5 b(alues)31 b(giv)n(en)g(for)g(the)
-g(IFRAME1)h(and)f(IFRAME2)g(argumen)n(ts)f(should)i(lie)f(in)h(the)g
-(range)e(from)427 2795 y(1)i(to)f(the)h(n)n(um)n(b)r(er)g(of)g(F)-7
-b(rames)31 b(in)h(the)g(F)-7 b(rameSet)32 b(\(as)f(giv)n(en)g(b)n(y)g
-(its)h(Nframe)g(attribute\).)50 b(A)32 b(v)-5 b(alue)32
-b(of)427 2895 y(AST)p Ft(__)p Fk(BASE)25 b(or)g(AST)p
-Ft(__)p Fk(CURRENT)g(ma)n(y)g(also)g(b)r(e)h(giv)n(en)e(to)i(iden)n
-(tify)g(the)g(F)-7 b(rameSet's)25 b(base)g(F)-7 b(rame)427
-2994 y(or)31 b(curren)n(t)g(F)-7 b(rame)31 b(resp)r(ectiv)n(ely)-7
-b(.)49 b(It)32 b(is)g(p)r(ermissible)f(for)g(b)r(oth)i(these)e(argumen)
-n(ts)g(to)g(ha)n(v)n(e)g(the)h(same)427 3094 y(v)-5 b(alue,)28
-b(in)g(whic)n(h)f(case)g(a)g(unit)h(Mapping)g(\(UnitMap\))g(is)g
-(returned.)340 3220 y Fj(\017)45 b Fk(It)36 b(should)f(alw)n(a)n(ys)e
-(b)r(e)j(p)r(ossible)e(to)h(generate)f(the)i(Mapping)f(requested,)h
-(but)g(this)f(do)r(es)g(necessarily)427 3320 y(guaran)n(tee)d(that)j
-(it)f(will)g(b)r(e)g(able)g(to)g(p)r(erform)f(the)i(required)e(co)r
-(ordinate)f(con)n(v)n(ersion.)54 b(If)34 b(necessary)-7
-b(,)427 3419 y(the)26 b(T)-7 b(ranF)g(orw)n(ard)22 b(and)j(T)-7
-b(ranIn)n(v)n(erse)23 b(attributes)h(of)h(the)h(returned)e(Mapping)h
-(should)g(b)r(e)g(insp)r(ected)h(to)427 3519 y(determine)i(if)g(the)g
-(required)f(transformation)f(is)h(a)n(v)-5 b(ailable.)340
-3645 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3744 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 3930 3780 12 v 0 4060 a FA(AST)p Fe(_)p FA(GETREFPOS)1364
-4061 y Fd(Return)38 b(the)h(reference)1333 4161 y(p)s(osition)e(in)i(a)
-f(sp)s(eci\014ed)1400 4276 y(celestial)f(co)s(ordinate)1715
-4375 y(system)2620 4060 y FA(AST)p Fe(_)p FA(GETREFPOS)0
-4555 y Fc(Description:)44 b Fk(This)34 b(routine)e(returns)h(the)g
-(reference)g(p)r(osition)g(\(sp)r(eci\014ed)h(b)n(y)e(attributes)i
-(RefRA)g(and)f(RefDec\))227 4654 y(con)n(v)n(erted)h(to)g(the)i
-(celestial)e(co)r(ordinate)g(system)g(represen)n(ted)g(b)n(y)h(a)f
-(supplied)h(SkyF)-7 b(rame.)58 b(The)35 b(celestial)227
-4754 y(longitude)28 b(and)f(latitude)h(v)-5 b(alues)27
-b(are)g(returned)g(in)h(radians.)0 4897 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GETREFPOS\()37 b(THIS,)42 b(FRM,)g(LON,)g(LAT,)g
-(STATUS)f(\))0 5039 y Fc(Argumen)m(ts:)259 5169 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5268 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Sp)r(ecF)-7 b(rame.)259 5394 y Fc(FRM)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 5494 y Fk(P)n(oin)n(ter)17
-b(to)h(the)h(SkyF)-7 b(rame)18 b(whic)n(h)g(de\014nes)g(the)h(required)
-e(celestial)h(co)r(ordinate)g(system.)33 b(If)19 b(AST)p
-Ft(__)p Fk(NULL)427 5593 y(is)31 b(supplied,)h(then)g(the)f(longitude)g
-(and)g(latitude)g(v)-5 b(alues)31 b(are)f(returned)h(as)f(FK5)g(J2000)f
-(RA)i(and)g(Dec)427 5693 y(v)-5 b(alues.)p eop end
-%%Page: 235 245
-TeXDict begin 235 244 bop 3643 52 a FG(235)259 351 y
-Fc(LON)32 b(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-451 y Fk(The)i(longitude)g(of)f(the)h(reference)f(p)r(oin)n(t,)i(in)f
-(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)g(the)h
-(supplied)427 551 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-678 y Fc(LA)-8 b(T)33 b(=)f(DOUBLE)g(PRECISION)g(\(Returned\))427
-778 y Fk(The)37 b(latitude)h(of)e(the)i(reference)e(p)r(oin)n(t,)j(in)e
-(the)g(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i(the)g
-(supplied)427 878 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-1005 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1105 y Fk(The)c(global)e(status.)0 1262
-y Fc(Notes:)340 1539 y Fj(\017)45 b Fk(V)-7 b(alues)35
-b(of)g(AST)p Ft(__)p Fk(BAD)g(will)h(b)r(e)f(returned)g(if)g(this)h
-(function)g(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)36
-b(set)f(to)g(an)427 1639 y(error)26 b(v)-5 b(alue,)27
-b(or)g(if)h(it)g(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 1828 3780 12 v 0 1959 a FA(AST)p Fe(_)p FA(GETREGIONBOUNDS)1902
-1976 y Fd(Returns)1902 2076 y(the)1902 2176 y(b)s(ound-)1902
-2275 y(ing)1902 2390 y(b)s(o)m(x)1902 2489 y(of)1902
-2589 y(Re-)1902 2689 y(gion)2052 1959 y FA(AST)p Fe(_)p
-FA(GETREGIONBOUNDS)0 2867 y Fc(Description:)44 b Fk(This)39
-b(routine)f(returns)g(the)h(upp)r(er)f(and)h(lo)n(w)n(er)e(limits)i(of)
-f(a)g(b)r(o)n(x)h(whic)n(h)f(just)h(encompasses)e(the)227
-2967 y(supplied)j(Region.)72 b(The)40 b(limits)f(are)g(returned)g(as)g
-(axis)g(v)-5 b(alues)39 b(within)h(the)g(F)-7 b(rame)39
-b(represen)n(ted)f(b)n(y)h(the)227 3067 y(Region.)g(The)29
-b(v)-5 b(alue)29 b(of)f(the)h(Negated)f(attribute)h(is)g(ignored)e
-(\(i.e.)40 b(it)29 b(is)g(assumed)f(that)h(the)g(Region)f(has)g(not)227
-3166 y(b)r(een)g(negated\).)0 3311 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GETREGIONBO)o(UND)o(S\()37 b(THIS,)42
-b(LBND,)f(UBND,)h(STATUS)f(\))0 3455 y Fc(Argumen)m(ts:)259
-3586 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3686
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259 3814 y
-Fc(LBND\(\))k(=)h(DOUBLE)f(PRECISION)f(\(Returned\))427
-3913 y Fk(An)e(arra)n(y)c(in)j(whic)n(h)g(to)g(return)g(the)g(lo)n(w)n
-(er)e(axis)i(b)r(ounds)g(co)n(v)n(ered)e(b)n(y)h(the)i(Region.)37
-b(It)28 b(should)g(ha)n(v)n(e)f(at)427 4013 y(least)33
-b(as)g(man)n(y)g(elemen)n(ts)h(as)f(there)g(are)g(axes)f(in)i(the)g
-(Region.)54 b(If)34 b(an)f(axis)g(has)g(no)g(lo)n(w)n(er)f(limit,)k
-(the)427 4113 y(returned)27 b(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g
-(largest)e(p)r(ossible)h(negativ)n(e)g(v)-5 b(alue.)259
-4240 y Fc(UBND\(\))32 b(=)h(DOUBLE)f(PRECISION)f(\(Returned\))427
-4340 y Fk(An)i(arra)n(y)d(in)j(whic)n(h)f(to)h(return)f(the)h(upp)r(er)
-f(axis)g(b)r(ounds)g(co)n(v)n(ered)f(b)n(y)h(the)h(Region.)51
-b(It)33 b(should)f(ha)n(v)n(e)427 4440 y(at)c(least)f(as)g(man)n(y)g
-(elemen)n(ts)g(as)g(there)g(are)g(axes)f(in)i(the)g(Region.)36
-b(If)28 b(an)f(axis)g(has)g(no)g(upp)r(er)h(limit,)g(the)427
-4539 y(returned)f(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g(largest)e(p)r
-(ossible)h(p)r(ositiv)n(e)g(v)-5 b(alue.)259 4667 y Fc(ST)d(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 4767
-y Fk(The)c(global)e(status.)0 4923 y Fc(Notes:)340 5201
-y Fj(\017)45 b Fk(The)24 b(v)-5 b(alue)23 b(of)h(the)g(Negated)f
-(attribute)h(is)g(ignored)e(\(i.e.)36 b(it)24 b(is)g(assumed)f(that)h
-(the)g(Region)e(has)i(not)f(b)r(een)427 5300 y(negated\).)340
-5428 y Fj(\017)45 b Fk(If)25 b(an)e(axis)h(has)f(no)h(exten)n(t)g(on)g
-(an)f(axis)h(then)g(the)g(lo)n(w)n(er)f(limit)i(will)f(b)r(e)g
-(returned)g(larger)e(than)i(the)g(upp)r(er)427 5528 y(limit.)39
-b(Note,)28 b(this)g(is)g(di\013eren)n(t)g(to)g(an)g(axis)f(whic)n(h)h
-(has)g(a)f(constan)n(t)g(v)-5 b(alue)28 b(\(in)h(whic)n(h)f(case)f(b)r
-(oth)h(lo)n(w)n(er)427 5628 y(and)g(upp)r(er)f(limit)i(will)f(b)r(e)g
-(returned)f(set)g(to)h(the)g(constan)n(t)f(v)-5 b(alue\).)p
-eop end
-%%Page: 236 246
-TeXDict begin 236 245 bop 0 52 a FG(236)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(GETREGIONFRAME)1824 500
-y Fd(Obtain)1860 599 y(a)1824 699 y(p)s(oin)m(ter)1838
-798 y(to)1824 898 y(the)1824 998 y(en-)1824 1097 y(cap-)1824
-1197 y(su-)1824 1297 y(lated)1824 1396 y(F)-10 b(rame)1824
-1496 y(within)1860 1595 y(a)1824 1695 y(Re-)1824 1795
-y(gion)2108 482 y FA(AST)p Fe(_)p FA(GETREGIONFRAME)0
-1976 y Fc(Description:)44 b Fk(This)28 b(function)g(returns)f(a)g(p)r
-(oin)n(ter)g(to)h(the)g(F)-7 b(rame)27 b(represen)n(ted)f(b)n(y)i(a)f
-(Region.)0 2121 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_GETREGIONFRA)o(ME\()37 b(THIS,)k(STATUS)g(\))0
-2267 y Fc(Argumen)m(ts:)259 2399 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2499 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2627 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2727 y Fk(The)c(global)e(status.)0 2885
-y Fc(Returned)32 b(V)-8 b(alue:)259 3017 y(AST)p Ft(_)p
-Fc(GETREGIONFRAME)31 b(=)h(INTEGER)427 3117 y Fk(A)37
-b(p)r(oin)n(ter)f(to)h(a)f(deep)g(cop)n(y)g(of)g(the)h(F)-7
-b(rame)36 b(represen)n(ted)g(b)n(y)g(the)h(Region.)63
-b(Using)36 b(this)h(p)r(oin)n(ter)f(to)427 3217 y(mo)r(dify)31
-b(the)f(F)-7 b(rame)29 b(will)h(ha)n(v)n(e)f(no)h(e\013ect)g(on)g(the)g
-(Region.)43 b(T)-7 b(o)30 b(mo)r(dify)g(the)g(Region,)g(use)g(the)g
-(Region)427 3316 y(p)r(oin)n(ter)d(directly)-7 b(.)0
-3474 y Fc(Notes:)340 3753 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3852 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 4044 V 0 4174 a FA(AST)p Fe(_)p FA(GETREGIONPOINTS)1838
-4192 y Fd(Returns)1838 4292 y(the)1838 4391 y(p)s(o-)1838
-4502 y(si-)1838 4602 y(tions)1838 4701 y(that)1838 4801
-y(de-)1838 4901 y(\014ne)1838 5000 y(the)1838 5100 y(giv)m(en)1838
-5213 y(Re-)1838 5313 y(gion)2094 4174 y FA(AST)p Fe(_)p
-FA(GETREGIONPOINTS)0 5494 y Fc(Description:)44 b Fk(This)32
-b(routine)g(returns)f(the)h(axis)f(v)-5 b(alues)31 b(at)h(the)g(p)r
-(oin)n(ts)g(that)g(de\014ne)g(the)g(supplied)h(Region.)49
-b(The)227 5593 y(particular)25 b(meaning)h(of)h(these)g(p)r(oin)n(ts)f
-(will)h(dep)r(end)g(on)f(the)h(t)n(yp)r(e)g(of)f(class)g(supplied,)h
-(as)f(listed)h(b)r(elo)n(w)f(under)227 5693 y Ft(")p
-Fk(Applicabilit)n(y:)p Ft(")p Fk(.)p eop end
-%%Page: 237 247
-TeXDict begin 237 246 bop 3643 52 a FG(237)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_GETREGIONPO)o(INT)o(S\()37
-b(THIS,)42 b(MAXPOINT,)d(MAXCOORD,)h(NPOINT,)h(POINTS,)g(STATUS)227
-451 y(\))0 614 y Fc(Argumen)m(ts:)259 764 y(THIS)32 b(=)g(INTEGER)g
-(\(Giv)m(en\))427 863 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-1003 y Fc(MAXPOINT)k(=)g(INTEGER)g(\(Giv)m(en\))427 1103
-y Fk(If)i(zero,)h(the)f(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(needed)h
-(to)g(de\014ne)g(the)g(Region)f(is)g(returned)g(in)h(NPOINT,)g(but)g
-(no)427 1202 y(axis)26 b(v)-5 b(alues)26 b(are)f(returned)h(and)h(all)f
-(other)g(parameters)e(are)i(ignored.)35 b(If)27 b(not)f(zero,)g(the)h
-(supplied)g(v)-5 b(alue)427 1302 y(should)28 b(b)r(e)g(the)g(length)g
-(of)f(the)h(\014rst)g(dimension)f(of)h(the)g(POINTS)f(arra)n(y)-7
-b(.)35 b(An)28 b(error)e(is)h(rep)r(orted)g(if)h(the)427
-1401 y(n)n(um)n(b)r(er)g(of)f(p)r(oin)n(ts)h(needed)f(to)h(de\014ne)g
-(the)g(Region)f(exceeds)g(this)g(n)n(um)n(b)r(er.)259
-1541 y Fc(MAX)m(COORD)k(=)i(INTEGER)e(\(Giv)m(en\))427
-1641 y Fk(The)25 b(length)f(of)h(the)f(second)g(dimension)g(of)h(the)g
-(POINTS)e(arra)n(y)-7 b(.)34 b(An)25 b(error)d(is)j(rep)r(orted)e(if)i
-(the)g(n)n(um)n(b)r(er)427 1740 y(of)j(axes)e(in)i(the)g(supplied)g
-(Region)f(exceeds)g(this)h(n)n(um)n(b)r(er.)259 1880
-y Fc(NPOINT)k(=)g(INTEGER)f(\(Returned\))427 1979 y Fk(The)d(n)n(um)n
-(b)r(er)f(of)h(p)r(oin)n(ts)f(de\014ning)h(the)g(Region.)259
-2119 y Fc(POINTS\()k(MAXPOINT,)g(MAX)m(COORD)f(\))h(=)h(DOUBLE)f
-(PRECISION)f(\(Returned\))427 2219 y Fk(An)h(arra)n(y)c(in)j(whic)n(h)g
-(to)f(return)h(the)g(co)r(ordinates)e(v)-5 b(alues)31
-b(at)f(the)i(p)r(ositions)e(that)h(de\014ne)g(the)g(Region.)427
-2318 y(These)23 b(are)f(stored)g(suc)n(h)g(that)h(the)g(v)-5
-b(alue)23 b(of)g(co)r(ordinate)e(n)n(um)n(b)r(er)i(COORD)f(for)h(p)r
-(oin)n(t)g(n)n(um)n(b)r(er)f(POINT)427 2418 y(is)28 b(found)g(in)g
-(elemen)n(t)f(POINTS\(POINT,COORD\).)259 2557 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2657 y Fk(The)c(global)e(status.)0 2832 y Fc(Class)31
-b(Applicabilit)m(y:)259 2982 y(Region)427 3082 y Fk(All)d(Regions)f(ha)
-n(v)n(e)f(this)i(attribute.)259 3222 y Fc(Bo)m(x)427
-3321 y Fk(The)g(\014rst)f(returned)g(p)r(osition)h(is)f(the)h(Bo)n(x)f
-(cen)n(tre,)g(and)g(the)h(second)f(is)h(a)f(Bo)n(x)f(corner.)259
-3461 y Fc(Circle)427 3560 y Fk(The)c(\014rst)f(returned)g(p)r(osition)g
-(is)g(the)h(Circle)e(cen)n(tre,)i(and)g(the)f(second)g(is)g(a)g(p)r
-(oin)n(t)g(on)g(the)h(circumference.)259 3700 y Fc(CmpRegion)427
-3800 y Fk(Returns)30 b(a)g(v)-5 b(alue)29 b(of)h(zero)f(for)h(NPOINT)f
-(and)h(lea)n(v)n(es)e(the)j(supplied)f(arra)n(y)e(con)n(ten)n(ts)h(unc)
-n(hanged.)43 b(T)-7 b(o)427 3899 y(\014nd)25 b(the)f(p)r(oin)n(ts)g
-(de\014ning)f(a)h(CmpRegion,)g(use)g(this)g(metho)r(d)g(on)g(the)g
-(comp)r(onen)n(t)g(Regions,)f(whic)n(h)h(can)427 3999
-y(b)r(e)k(accessed)f(b)n(y)g(in)n(v)n(oking)f(AST)p Ft(_)p
-Fk(DECOMPOSE)g(on)h(the)h(CmpRegion.)259 4138 y Fc(Ellipse)427
-4238 y Fk(The)h(\014rst)g(returned)f(p)r(osition)h(is)g(the)g(Ellipse)g
-(cen)n(tre.)40 b(The)29 b(second)f(is)h(the)g(end)g(of)g(one)g(of)f
-(the)i(axes)e(of)427 4338 y(the)k(ellipse.)48 b(The)31
-b(third)g(is)g(some)g(other)g(p)r(oin)n(t)g(on)g(the)h(circumference)e
-(of)h(the)h(ellipse,)g(distinct)g(from)427 4437 y(the)c(second)f(p)r
-(oin)n(t.)259 4577 y Fc(In)m(terv)-5 b(al)427 4677 y
-Fk(The)30 b(\014rst)g(p)r(oin)n(t)g(corresp)r(onds)e(to)i(the)g(lo)n(w)
-n(er)f(b)r(ounds)h(p)r(osition,)g(and)g(the)g(second)f(p)r(oin)n(t)i
-(corresp)r(onds)427 4776 y(to)k(the)f(upp)r(er)h(b)r(ounds)f(p)r
-(osition.)57 b(These)34 b(are)g(rev)n(ersed)e(to)j(indicate)f(an)g
-(extcluded)h(in)n(terv)-5 b(al)34 b(rather)427 4876 y(than)28
-b(an)f(included)h(in)n(terv)-5 b(al.)37 b(See)27 b(the)h(In)n(terv)-5
-b(al)27 b(constructor)f(for)h(more)g(information.)259
-5015 y Fc(NullRegion)427 5115 y Fk(Returns)h(a)f(v)-5
-b(alue)27 b(of)h(zero)e(for)i(NPOINT)f(and)g(lea)n(v)n(es)f(the)i
-(supplied)g(arra)n(y)d(con)n(ten)n(ts)i(unc)n(hanged.)259
-5255 y Fc(P)m(oin)m(tList)427 5354 y Fk(The)h(p)r(ositions)f(returned)g
-(are)g(those)g(that)h(w)n(ere)f(supplied)h(when)f(the)h(P)n(oin)n
-(tList)f(w)n(as)f(constructed.)259 5494 y Fc(P)m(olygon)427
-5593 y Fk(The)36 b(p)r(ositions)f(returned)g(are)f(the)i(v)n(ertex)f(p)
-r(ositions)g(that)g(w)n(ere)g(supplied)h(when)f(the)h(P)n(olygon)e(w)n
-(as)427 5693 y(constructed.)p eop end
-%%Page: 238 248
-TeXDict begin 238 247 bop 0 52 a FG(238)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(Prism)427
-451 y Fk(Returns)f(a)g(v)-5 b(alue)29 b(of)h(zero)f(for)h(NPOINT)f(and)
-h(lea)n(v)n(es)e(the)j(supplied)f(arra)n(y)e(con)n(ten)n(ts)h(unc)n
-(hanged.)43 b(T)-7 b(o)427 551 y(\014nd)31 b(the)g(p)r(oin)n(ts)g
-(de\014ning)g(a)f(Prism,)g(use)h(this)g(metho)r(d)g(on)f(the)h(comp)r
-(onen)n(t)g(Regions,)f(whic)n(h)h(can)f(b)r(e)427 650
-y(accessed)d(b)n(y)g(in)n(v)n(oking)f(AST)p Ft(_)p Fk(DECOMPOSE)g(on)h
-(the)h(CmpRegion.)0 818 y Fc(Notes:)340 1107 y Fj(\017)45
-b Fk(If)21 b(the)h(co)r(ordinate)d(system)i(represen)n(ted)e(b)n(y)h
-(the)i(Region)e(has)g(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f
-(\014rst)g(created,)427 1206 y(the)h(returned)f(axis)f(v)-5
-b(alues)20 b(refer)g(to)g(the)g(new)h(\(c)n(hanged\))e(co)r(ordinate)g
-(system,)j(rather)d(than)i(the)f(original)427 1306 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-1405 y(system)j(is)f(non-linear,)g(the)h(shap)r(e)f(within)i(the)f(new)
-f(co)r(ordinate)g(system)g(ma)n(y)g(b)r(e)h(distorted,)g(and)f(so)427
-1505 y(ma)n(y)d(not)h(matc)n(h)f(that)h(implied)g(b)n(y)g(the)f(name)h
-(of)f(the)h(Region)f(sub)r(class)g(\(Circle,)h(Bo)n(x,)e(etc\).)p
-0 1710 3780 12 v 0 1841 a FA(AST)p Fe(_)p FA(GETSTCCOORD)321
-b Fd(Return)1592 1940 y(information)1661 2040 y(ab)s(out)37
-b(an)1567 2140 y(AstroCo)s(ords)1693 2239 y(elemen)m(t)1584
-2339 y(stored)h(in)g(an)1808 2438 y(Stc)2393 1841 y FA(AST)p
-Fe(_)p FA(GETSTCCOORD)0 2610 y Fc(Description:)44 b Fk(When)29
-b(an)n(y)d(sub-class)h(of)g(Stc)h(is)g(created,)f(the)h(constructor)e
-(function)i(allo)n(ws)f(one)g(or)g(more)g(Astro-)227
-2710 y(Co)r(ords)j(elemen)n(ts)g(to)h(b)r(e)g(stored)e(within)j(the)f
-(Stc.)46 b(This)31 b(function)g(allo)n(ws)e(an)n(y)h(one)g(of)h(these)g
-(AstroCo)r(ords)227 2809 y(elemen)n(ts)37 b(to)h(b)r(e)f(retriev)n(ed.)
-65 b(The)37 b(format)g(of)g(the)h(returned)f(information)g(is)g(the)h
-(same)e(as)h(that)g(used)h(to)227 2909 y(pass)e(the)h(original)e
-(information)h(to)g(the)h(Stc)g(constructor.)62 b(That)36
-b(is,)j(the)e(information)f(is)g(returned)g(in)h(a)227
-3009 y(KeyMap)29 b(structure)g(con)n(taining)g(elemen)n(ts)g(with)i
-(one)e(or)g(more)g(of)g(the)h(k)n(eys)f(giv)n(en)g(b)n(y)g(sym)n(b)r
-(olic)h(constan)n(ts)227 3108 y(AST)p Ft(__)p Fk(STCNAME,)40
-b(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)40 b(AST)p Ft(__)p
-Fk(STCERR)n(OR,)e(AST)p Ft(__)p Fk(STCRES,)i(AST)p Ft(__)p
-Fk(STCSIZE)227 3208 y(and)28 b(AST)p Ft(__)p Fk(STCPIXSZ.)227
-3335 y(If)23 b(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)g
-(the)h(Stc)g(has)f(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f
-(created)f(\(for)i(instance,)227 3435 y(b)n(y)h(c)n(hanging)f(its)i
-(System)g(attribute\),)g(then)g(the)g(sizes)f(and)g(p)r(ositions)g(in)h
-(the)g(returned)f(KeyMap)f(will)i(re\015ect)227 3535
-y(the)j(c)n(hange)f(in)h(co)r(ordinate)e(system.)0 3690
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETSTCCOORD\()37
-b(THIS,)42 b(ICOORD,)e(STATUS)h(\))0 3845 y Fc(Argumen)m(ts:)259
-3988 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4088
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259 4223 y Fc(ICOORD)j(=)h
-(INTEGER)g(\(Giv)m(en\))427 4323 y Fk(The)j(index)g(of)g(the)g(AstroCo)
-r(ords)e(elemen)n(t)j(required.)57 b(The)35 b(\014rst)g(has)f(index)i
-(one.)58 b(The)35 b(n)n(um)n(b)r(er)g(of)427 4423 y(AstroCo)r(ords)26
-b(elemen)n(ts)h(in)h(the)g(Stc)g(can)f(b)r(e)h(found)g(using)g
-(function)g(AST)p Ft(_)p Fk(GETSTCNCOORD.)259 4558 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4658 y Fk(The)c(global)e(status.)0 4826 y Fc(Returned)32
-b(V)-8 b(alue:)259 4968 y(AST)p Ft(_)p Fc(GETSTCCOORD)32
-b(=)g(INTEGER)427 5068 y Fk(A)c(p)r(oin)n(ter)f(to)h(a)f(new)h(KeyMap)e
-(con)n(taining)h(the)h(required)f(information.)0 5236
-y Fc(Notes:)340 5524 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5624 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 239 249
-TeXDict begin 239 248 bop 3643 52 a FG(239)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(GETSTCNCOORD)216 b Fd(Return)1808
-581 y(the)1696 681 y(n)m(um)m(b)s(er)1662 780 y(of)38
-b(Astro-)1709 880 y(Co)s(ords)1670 980 y(elemen)m(ts)1665
-1079 y(stored)g(in)1727 1179 y(an)h(Stc)2288 482 y FA(AST)p
-Fe(_)p FA(GETSTCNCOORD)0 1313 y Fc(Description:)44 b
-Fk(This)28 b(function)g(returns)f(the)h(n)n(um)n(b)r(er)f(of)h(AstroCo)
-r(ords)e(elemen)n(ts)h(stored)g(in)h(an)f(Stc.)0 1447
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETSTCNCOORD)o
-(\()38 b(THIS,)j(STATUS)g(\))0 1581 y Fc(Argumen)m(ts:)259
-1702 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1801
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259 1918 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2018 y Fk(The)c(global)e(status.)0 2164 y Fc(Returned)32
-b(V)-8 b(alue:)259 2285 y(AST)p Ft(_)p Fc(GETSTCNCOORD)32
-b(=)g(INTEGER)427 2385 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(AstroCo)r
-(ords)e(elemen)n(ts)h(stored)g(in)h(the)g(Stc.)0 2531
-y Fc(Notes:)340 2798 y Fj(\017)45 b Fk(Zero)29 b(will)i(b)r(e)f
-(returned)g(if)h(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)31 b(set)f(to)g(an)g(error)e(v)-5 b(alue,)31
-b(or)f(if)g(it)427 2897 y(should)e(fail)f(for)g(an)n(y)g(reason.)p
-0 3065 V 0 3196 a FA(AST)p Fe(_)p FA(GETSTCREGION)1662
-3197 y Fd(Obtain)38 b(a)1605 3297 y(cop)m(y)g(of)h(the)1668
-3396 y(encapsu-)1763 3511 y(lated)1713 3610 y(Region)1678
-3725 y(within)f(a)1808 3825 y(Stc)2345 3196 y FA(AST)p
-Fe(_)p FA(GETSTCREGION)0 3959 y Fc(Description:)44 b
-Fk(This)30 b(function)g(returns)f(a)h(p)r(oin)n(ter)f(to)h(a)f(deep)h
-(cop)n(y)f(of)g(the)h(Region)f(supplied)h(when)g(the)h(Stc)f(w)n(as)227
-4059 y(created.)0 4192 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GETSTCREGION)o(\()38 b(THIS,)j(STATUS)g(\))0
-4326 y Fc(Argumen)m(ts:)259 4447 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4547 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259
-4664 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4763 y Fk(The)c(global)e(status.)0 4910
-y Fc(Returned)32 b(V)-8 b(alue:)259 5030 y(AST)p Ft(_)p
-Fc(GETSTCREGION)32 b(=)g(INTEGER)427 5130 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(a)f(deep)h(cop)n(y)f(of)g(the)h(Region)f(encapsulated)g(within)h(the)g
-(supplied)g(Stc.)0 5276 y Fc(Notes:)340 5543 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5643
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 240 250
-TeXDict begin 240 249 bop 0 52 a FG(240)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(GETUNC)1083 483 y Fd(Obtain)38
-b(uncertain)m(t)m(y)e(information)1526 598 y(from)i(a)g(Region)2855
-482 y FA(AST)p Fe(_)p FA(GETUNC)0 795 y Fc(Description:)44
-b Fk(This)24 b(function)h(returns)e(a)h(Region)f(whic)n(h)h(represen)n
-(ts)e(the)j(uncertain)n(t)n(y)e(asso)r(ciated)g(with)h(p)r(ositions)227
-894 y(within)30 b(the)f(supplied)g(Region.)39 b(See)29
-b(AST)p Ft(_)p Fk(SETUNC)g(for)f(more)g(information)g(ab)r(out)g
-(Region)g(uncertain)n(ties)227 994 y(and)g(their)f(use.)0
-1152 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_GETUNC\()c
-(THIS,)j(DEF,)g(STATUS)f(\))0 1310 y Fc(Argumen)m(ts:)259
-1455 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1554
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259 1691 y
-Fc(DEF)k(=)g(LOGICAL)h(\(Giv)m(en\))427 1791 y Fk(Con)n(trols)19
-b(what)h(is)g(returned)g(if)h(no)e(uncertain)n(t)n(y)h(information)f
-(has)h(b)r(een)g(asso)r(ciated)f(explicitly)i(with)f(the)427
-1891 y(supplied)30 b(Region.)40 b(If)29 b(.TR)n(UE.)g(is)g(supplied,)h
-(then)f(the)h(default)f(uncertain)n(t)n(y)f(Region)g(used)h(in)n
-(ternally)427 1990 y(within)20 b(AST)f(is)g(returned)f(\(see)h
-Ft(")p Fk(Applicabilit)n(y)p Ft(")f Fk(b)r(elo)n(w\).)34
-b(If)19 b(.F)-9 b(ALSE.)19 b(is)f(supplied,)j(then)f(AST)p
-Ft(__)p Fk(NULL)427 2090 y(will)28 b(b)r(e)g(returned)f(\(without)i
-(error\).)259 2227 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 2327 y Fk(The)c(global)e(status.)0
-2497 y Fc(Class)31 b(Applicabilit)m(y:)259 2642 y(CmpRegion)427
-2741 y Fk(The)f(default)g(uncertain)n(t)n(y)f(for)g(a)h(CmpRegion)f(is)
-g(tak)n(en)h(from)f(one)g(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)g
-(Regions.)427 2841 y(If)35 b(the)f(\014rst)g(comp)r(onen)n(t)f(Region)h
-(has)f(a)g(non-default)h(uncertain)n(t)n(y)-7 b(,)35
-b(then)f(it)h(is)f(used)g(as)f(the)h(default)427 2941
-y(uncertain)n(t)n(y)g(for)g(the)h(paren)n(t)f(CmpRegion.)58
-b(Otherwise,)35 b(if)g(the)h(second)e(comp)r(onen)n(t)g(Region)g(has)g
-(a)427 3040 y(non-default)25 b(uncertain)n(t)n(y)-7 b(,)25
-b(then)g(it)h(is)e(used)h(as)f(the)i(default)f(uncertain)n(t)n(y)f(for)
-h(the)g(paren)n(t)f(CmpRegion.)427 3140 y(If)g(neither)f(of)g(the)g
-(comp)r(onen)n(t)g(Regions)f(has)g(non-default)h(uncertain)n(t)n(y)-7
-b(,)23 b(then)h(the)f(default)g(uncertain)n(t)n(y)427
-3240 y(for)k(the)h(CmpRegion)f(is)h(1.0E-6)d(of)j(the)g(b)r(ounding)g
-(b)r(o)n(x)f(of)g(the)h(CmpRegion.)259 3377 y Fc(Prism)427
-3476 y Fk(The)j(default)g(uncertain)n(t)n(y)f(for)g(a)h(Prism)e(is)i
-(formed)f(b)n(y)h(com)n(bining)f(the)h(uncertain)n(ties)f(from)g(the)h
-(t)n(w)n(o)427 3576 y(comp)r(onen)n(t)24 b(Regions.)35
-b(If)25 b(a)f(comp)r(onen)n(t)g(Region)g(do)r(es)g(not)g(ha)n(v)n(e)f
-(a)h(non-default)g(uncertain)n(t)n(y)-7 b(,)25 b(then)f(its)427
-3676 y(default)k(uncertain)n(t)n(y)f(will)h(b)r(e)g(used)f(to)h(form)f
-(the)h(default)g(uncertain)n(t)n(y)f(of)g(the)h(paren)n(t)f(Prism.)259
-3813 y Fc(Region)427 3912 y Fk(F)-7 b(or)37 b(other)g(classes)f(of)h
-(Region,)i(the)f(default)f(uncertain)n(t)n(y)g(is)g(1.0E-6)e(of)i(the)h
-(b)r(ounding)f(b)r(o)n(x)g(of)g(the)427 4012 y(Region.)f(If)28
-b(the)f(b)r(ounding)h(b)r(o)n(x)e(has)h(zero)f(width)i(on)f(an)n(y)f
-(axis,)g(then)i(the)g(uncertain)n(t)n(y)e(will)h(b)r(e)h(1.0E-6)427
-4111 y(of)g(the)g(axis)f(v)-5 b(alue.)0 4282 y Fc(Returned)32
-b(V)-8 b(alue:)259 4427 y(AST)p Ft(_)p Fc(GETUNC)32 b(=)h(INTEGER)427
-4526 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(a)f(Region)g(describing)g(the)h
-(uncertain)n(t)n(y)e(in)i(the)g(supplied)g(Region.)0
-4697 y Fc(Notes:)340 4988 y Fj(\017)45 b Fk(If)29 b(uncertain)n(t)n(y)f
-(information)g(is)h(asso)r(ciated)e(with)i(a)f(Region,)g(and)h(the)g
-(co)r(ordinate)e(system)i(describ)r(ed)427 5087 y(b)n(y)c(the)g(Region)
-f(is)g(subsequen)n(tly)g(c)n(hanged)g(\(e.g.)36 b(b)n(y)24
-b(c)n(hanging)f(the)i(v)-5 b(alue)25 b(of)f(its)h(System)g(attribute,)g
-(or)427 5187 y(using)30 b(the)h(AST)p Ft(_)p Fk(MAPREGION)f
-(function\),)i(then)f(the)f(uncertain)n(t)n(y)g(information)f(returned)
-h(b)n(y)g(this)427 5287 y(function)25 b(will)f(b)r(e)h(mo)r(di\014ed)f
-(so)g(that)g(it)g(refers)f(to)h(the)h(co)r(ordinate)e(system)h(curren)n
-(tly)f(describ)r(ed)g(b)n(y)h(the)427 5386 y(supplied)k(Region.)340
-5523 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5623 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 241 251
-TeXDict begin 241 250 bop 3643 52 a FG(241)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(GRFPOP)1259 483 y Fd(Restore)38
-b(previously)f(sa)m(v)m(ed)1162 598 y(graphics)g(functions)h(used)h(b)m
-(y)g(a)1782 712 y(Plot)2873 482 y FA(AST)p Fe(_)p FA(GRFPOP)0
-863 y Fc(Description:)44 b Fk(The)29 b(AST)p Ft(_)p Fk(GRFPUSH)h(and)f
-(AST)p Ft(_)p Fk(GRFPOP)f(functions)h(are)f(in)n(tended)h(for)f
-(situations)h(where)f(it)227 963 y(is)i(necessary)f(to)h(mak)n(e)g
-(temp)r(orary)f(c)n(hanges)g(to)h(the)g(graphics)f(functions)i(used)f
-(b)n(y)g(the)h(Plot.)44 b(The)30 b(curren)n(t)227 1062
-y(functions)21 b(should)g(\014rst)g(b)r(e)g(sa)n(v)n(ed)e(b)n(y)i
-(calling)f(AST)p Ft(_)p Fk(GRFPUSH.)i(New)f(functions)g(should)f(then)i
-(b)r(e)f(registered)227 1162 y(using)34 b(AST)p Ft(_)p
-Fk(GRFSET.)g(The)g(required)e(graphics)h(should)g(then)i(b)r(e)f(pro)r
-(duced.)55 b(Finally)-7 b(,)36 b(AST)p Ft(_)p Fk(GRFPOP)227
-1261 y(should)28 b(b)r(e)g(called)f(to)g(restore)f(the)i(original)e
-(graphics)h(functions.)0 1404 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GRFPOP\()d(THIS)j(STATUS)f(\))0 1546
-y Fc(Argumen)m(ts:)259 1675 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-1774 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1900
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1999 y Fk(The)c(global)e(status.)0 2154 y Fc(Notes:)340
-2429 y Fj(\017)45 b Fk(This)26 b(routine)g(returns)f(without)i(action)e
-(if)h(there)g(are)f(no)h(snapshots)f(to)h(restore.)35
-b(No)25 b(error)f(is)i(rep)r(orted)427 2529 y(in)i(this)g(case.)p
-0 2713 V 0 2844 a FA(AST)p Fe(_)p FA(GRFPUSH)1239 2845
-y Fd(Sa)m(v)m(e)38 b(the)h(curren)m(t)e(graphics)1266
-2959 y(functions)g(used)j(b)m(y)e(a)h(Plot)2782 2844
-y FA(AST)p Fe(_)p FA(GRFPUSH)0 3133 y Fc(Description:)44
-b Fk(This)22 b(routine)g(tak)n(es)f(a)g(snapshot)h(of)g(the)g(graphics)
-e(functions)j(whic)n(h)f(are)f(curren)n(tly)g(registered)f(with)227
-3233 y(the)k(supplied)g(Plot,)g(and)f(sa)n(v)n(es)e(the)j(snapshot)f
-(on)g(a)g(\014rst-in-last-out)f(stac)n(k)g(within)i(the)g(Plot.)35
-b(The)23 b(snapshot)227 3333 y(can)k(b)r(e)h(restored)f(later)g(using)g
-(function)h(AST)p Ft(_)p Fk(GRFPOP)-7 b(.)227 3454 y(The)29
-b(AST)p Ft(_)p Fk(GRFPUSH)g(and)f(AST)p Ft(_)p Fk(GRFPOP)f(functions)i
-(are)f(in)n(tended)g(for)g(situations)g(where)g(it)h(is)f(neces-)227
-3553 y(sary)c(to)h(mak)n(e)f(temp)r(orary)f(c)n(hanges)h(to)g(the)i
-(graphics)d(functions)i(used)g(b)n(y)g(the)g(Plot.)35
-b(The)25 b(curren)n(t)f(functions)227 3653 y(should)32
-b(\014rst)f(b)r(e)h(sa)n(v)n(ed)e(b)n(y)i(calling)f(AST)p
-Ft(_)p Fk(GRFPUSH.)h(New)g(functions)g(should)f(then)i(b)r(e)f
-(registered)e(using)227 3752 y(AST)p Ft(_)p Fk(GRFSET.)g(The)h
-(required)e(graphics)f(should)i(then)h(b)r(e)f(pro)r(duced.)44
-b(Finally)-7 b(,)31 b(AST)p Ft(_)p Fk(GRFPOP)e(should)227
-3852 y(b)r(e)f(called)g(to)f(restore)f(the)i(original)e(graphics)g
-(functions.)0 3994 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_GRFPUSH\()c(THIS)k(STATUS)f(\))0 4136 y Fc(Argumen)m(ts:)259
-4265 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4365
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 4490 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4590 y Fk(The)c(global)e(status.)p 0 4775 V 0 4905 a
-FA(AST)p Fe(_)p FA(GRFSET)1110 4906 y Fd(Register)37
-b(a)i(graphics)e(routine)g(for)1550 5021 y(use)j(b)m(y)e(a)h(Plot)2901
-4905 y FA(AST)p Fe(_)p FA(GRFSET)0 5195 y Fc(Description:)44
-b Fk(This)30 b(routine)f(can)g(b)r(e)h(used)g(to)f(select)h(the)g
-(underlying)f(graphics)f(routines)h(to)g(b)r(e)h(used)f(when)h(the)227
-5295 y(supplied)f(Plot)e(pro)r(duces)g(graphical)g(output.)38
-b(If)28 b(this)h(routine)e(is)h(not)g(called)f(prior)g(to)h(pro)r
-(ducing)f(graphical)227 5394 y(output,)j(then)f(the)g(underlying)f
-(graphics)f(routines)h(selected)g(at)h(link-time)f(\(using)h(the)g(ast)
-p Ft(_)p Fk(link)f(command\))227 5494 y(will)i(b)r(e)f(used.)42
-b(T)-7 b(o)29 b(use)g(alternativ)n(e)f(graphics)g(routines,)h(call)g
-(this)h(routine)f(b)r(efore)g(the)g(graphical)f(output)i(is)227
-5593 y(created,)g(sp)r(ecifying)g(the)h(graphics)d(routines)i(to)f(b)r
-(e)i(used.)44 b(This)30 b(will)g(register)f(the)h(routine)g(for)f
-(future)i(use,)227 5693 y(but)d(the)g(routine)g(will)f(not)h(actually)f
-(b)r(e)h(used)g(un)n(til)g(the)g(Grf)f(attribute)h(is)g(giv)n(en)e(a)i
-(non-zero)d(v)-5 b(alue.)p eop end
-%%Page: 242 252
-TeXDict begin 242 251 bop 0 52 a FG(242)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_GRFSET\()d(THIS,)i(NAME,)h(FUN,)g(STATUS)f(\))0
-511 y Fc(Argumen)m(ts:)259 658 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 758 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-896 y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 996 y Fk(A)h(name)f(indicating)h
-(the)g(graphics)e(routine)h(to)g(b)r(e)h(replaced.)51
-b(V)-7 b(arious)31 b(graphics)g(routines)h(are)g(used)427
-1095 y(b)n(y)27 b(the)g(Plot)f(class,)h(and)f(an)n(y)g(com)n(bination)h
-(of)f(them)i(ma)n(y)e(b)r(e)h(supplied)h(b)n(y)e(calling)g(this)i
-(routine)e(once)427 1195 y(for)j(eac)n(h)f(routine)g(to)h(b)r(e)g
-(replaced.)40 b(If)29 b(an)n(y)f(of)h(the)g(graphics)f(routines)g(are)g
-(not)g(replaced)g(in)i(this)f(w)n(a)n(y)-7 b(,)427 1295
-y(the)29 b(corresp)r(onding)d(routines)i(in)h(the)g(graphics)d(in)n
-(terface)i(selected)g(at)h(link-time)f(\(using)h(the)f(ast)p
-Ft(_)p Fk(link)427 1394 y(command\))g(are)e(used.)37
-b(The)28 b(allo)n(w)n(ed)e(function)i(names)f(are:)510
-1626 y Fj(\017)45 b Fk(A)n(ttr)28 b(-)f(Enquire)g(or)g(set)g(a)h
-(graphics)e(attribute)h(v)-5 b(alue)510 1745 y Fj(\017)45
-b Fk(Cap)28 b(-)f(Inquire)g(a)g(capabilit)n(y)510 1864
-y Fj(\017)45 b Fk(Flush)28 b(-)g(Flush)f(all)h(p)r(ending)g(graphics)e
-(to)h(the)h(output)g(device)510 1982 y Fj(\017)45 b Fk(Line)28
-b(-)f(Dra)n(w)g(a)g(p)r(olyline)h(\(i.e.)37 b(a)27 b(set)h(of)f
-(connected)h(lines\))510 2101 y Fj(\017)45 b Fk(Mark)27
-b(-)g(Dra)n(w)g(a)g(set)h(of)f(mark)n(ers)510 2220 y
-Fj(\017)45 b Fk(Qc)n(h)27 b(-)h(Return)f(the)h(c)n(haracter)e(heigh)n
-(t)h(in)h(w)n(orld)f(co)r(ordinates)510 2339 y Fj(\017)45
-b Fk(Scales)27 b(-)h(Get)g(the)g(axis)e(scales)510 2458
-y Fj(\017)45 b Fk(T)-7 b(ext)28 b(-)f(Dra)n(w)g(a)g(c)n(haracter)f
-(string)510 2577 y Fj(\017)45 b Fk(TxExt)27 b(-)h(Get)g(the)g(exten)n
-(t)f(of)h(a)f(c)n(haracter)f(string)427 2715 y(The)k(string)g(is)g
-(case)f(insensitiv)n(e.)44 b(F)-7 b(or)30 b(details)f(of)h(the)h(in)n
-(terface)e(required)g(for)h(eac)n(h,)g(see)g(the)g(sections)427
-2815 y(b)r(elo)n(w.)259 2953 y Fc(FUN)i(=)g(INTEGER)g(FUNCTION)g(\(Giv)
-m(en\))427 3052 y Fk(The)39 b(name)g(of)g(the)h(routine)f(to)g(b)r(e)g
-(used)g(to)g(pro)n(vide)f(the)i(functionalit)n(y)f(indicated)g(b)n(y)g
-(parameter)427 3152 y(NAME)e(\(the)g(name)f(should)g(also)g(app)r(ear)f
-(in)i(a)f(F)-7 b(ortran)35 b(EXTERNAL)h(statemen)n(t)h(in)f(the)h
-(routine)427 3252 y(whic)n(h)28 b(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(GRFSET\).)427 3371 y(Once)41 b(a)g(routine)g(has)g(b)r(een)h
-(pro)n(vided,)i(the)d Ft(")p Fk(n)n(ull)p Ft(")g Fk(routine)g(AST)p
-Ft(_)p Fk(NULL)h(can)f(b)r(e)h(supplied)f(in)h(a)427
-3470 y(subsequen)n(t)25 b(call)g(to)g(astGrfSet)g(to)g(reset)g(the)g
-(routine)g(to)g(the)h(corresp)r(onding)d(routine)i(in)g(the)h(graphics)
-427 3570 y(in)n(terface)h(selected)h(at)f(link-time.)37
-b(AST)p Ft(_)p Fk(NULL)28 b(is)g(de\014ned)g(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)27 b(include)h(\014le.)259 3708 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3808 y Fk(The)c(global)e(status.)-2 3980 y Fc(F)-8 b(unction)32
-b(In)m(terfaces)n(:)227 4126 y Fk(All)i(the)f(functions)g(listed)g(b)r
-(elo)n(w)g(\(except)g(for)g Ft(")p Fk(Cap)p Ft(")p Fk(\))f(should)g
-(return)h(an)f(in)n(teger)g(v)-5 b(alue)33 b(of)g(0)g(if)g(an)g(error)
-227 4226 y(o)r(ccurs,)43 b(and)d(1)f(otherwise.)74 b(All)40
-b(x)g(and)g(y)g(v)-5 b(alues)40 b(refer)f(to)h Ft(")p
-Fk(graphics)e(cordinates)p Ft(")h Fk(as)g(de\014ned)h(b)n(y)g(the)227
-4325 y(GRAPHBO)n(X)28 b(parameter)e(of)h(the)h(AST)p
-Ft(_)p Fk(PLOT)f(call)g(whic)n(h)h(created)e(the)i(Plot.)227
-4455 y(The)g(\014rst)g(argumen)n(t)e(\(GRF)n(CON\))j(for)e(eac)n(h)g
-(function)h(is)g(an)f(AST)h(KeyMap)f(p)r(oin)n(ter)h(that)g(can)f(b)r
-(e)h(used)g(b)n(y)227 4555 y(the)c(called)f(function)h(to)f(establish)g
-(the)h(con)n(text)e(in)i(whic)n(h)f(it)h(is)f(b)r(eing)h(called.)35
-b(The)23 b(con)n(ten)n(ts)g(of)g(the)h(KeyMap)227 4655
-y(are)35 b(determined)i(b)n(y)f(the)g(calling)f(application,)j(whic)n
-(h)e(should)g(obtain)g(a)g(p)r(oin)n(ter)f(to)h(the)h(KeyMap)e(using)
-227 4754 y(the)28 b(AST)p Ft(_)p Fk(GETGRF)n(CONTEXT)f(routine,)g(and)g
-(then)h(store)e(an)n(y)h(necessary)e(information)i(in)h(the)g(KeyMap)
-227 4854 y(using)33 b(the)g(metho)r(ds)f(of)h(the)g(KeyMap)f(class.)51
-b(Note,)34 b(the)f(functions)g(listed)g(b)r(elo)n(w)f(should)g(nev)n
-(er)g(ann)n(ul)g(or)227 4953 y(delete)c(the)g(supplied)g(KeyMap)f(p)r
-(oin)n(ter.)-2 5113 y Fc(A)m(ttr)n(:)227 5260 y Fk(The)38
-b Ft(")p Fk(A)n(ttr)p Ft(")e Fk(function)i(returns)e(the)i(curren)n(t)e
-(v)-5 b(alue)37 b(of)h(a)e(sp)r(eci\014ed)i(graphics)e(attribute,)j
-(and)e(optionally)227 5359 y(establishes)23 b(a)h(new)g(v)-5
-b(alue.)35 b(The)24 b(supplied)h(v)-5 b(alue)23 b(is)h(con)n(v)n(erted)
-f(to)g(an)h(in)n(teger)f(v)-5 b(alue)24 b(if)g(necessary)e(b)r(efore)i
-(use.)227 5459 y(It)k(requires)e(the)i(follo)n(wing)f(in)n(terface:)227
-5589 y(INTEGER)g(FUNCTION)i(A)-7 b(TTR\()28 b(GRF)n(CON,)g(A)-7
-b(TT,)28 b(V)-9 b(AL,)28 b(OLD)n(V)-9 b(AL,)27 b(PRIM)g(\))p
-eop end
-%%Page: 243 253
-TeXDict begin 243 252 bop 3643 52 a FG(243)340 351 y
-Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g
-(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g(calling)
-427 451 y(application.)340 581 y Fj(\017)45 b Fk(A)-7
-b(TT)36 b(=)f(INTEGER)g(\(Giv)n(en\))h(-)f(An)h(in)n(teger)e(iden)n
-(tifying)i(the)f(required)g(attribute.)60 b(The)36 b(follo)n(wing)427
-680 y(sym)n(b)r(olic)24 b(v)-5 b(alues)24 b(are)f(de\014ned)h(in)h(GRF)
-p Ft(_)p Fk(P)-7 b(AR:)24 b(GRF)p Ft(__)p Fk(STYLE)f(\(Line)i(st)n
-(yle\),)g(GRF)p Ft(__)p Fk(WIDTH)f(\(Line)427 780 y(width\),)e(GRF)p
-Ft(__)p Fk(SIZE)c(\(Character)g(and)h(mark)n(er)e(size)i(scale)f
-(factor\),)i(GRF)p Ft(__)p Fk(F)n(ONT)f(\(Character)e(fon)n(t\),)427
-880 y(GRF)p Ft(__)p Fk(COLOUR)27 b(\(Colour)g(index\).)340
-1010 y Fj(\017)45 b Fk(V)-9 b(AL)28 b(=)f(DOUBLE)h(PRECISION)e(\(Giv)n
-(en\))i(-)g(no)f(v)-5 b(alue)27 b(is)h(stored.)340 1140
-y Fj(\017)45 b Fk(OLD)n(V)-9 b(AL)28 b(=)f(DOUBLE)g(PRECISION)g
-(\(Returned\))h(-)f(Returned)h(holding)f(the)h(attribute)g(v)-5
-b(alue.)340 1269 y Fj(\017)45 b Fk(PRIM)30 b(=)g(INTEGER)g(\(Giv)n
-(en\))h(-)f(The)g(sort)g(of)g(graphics)f(primitiv)n(e)h(to)g(b)r(e)h
-(dra)n(wn)e(with)i(the)g(new)f(at-)427 1369 y(tribute.)k(Iden)n
-(ti\014ed)19 b(b)n(y)f(the)h(follo)n(wing)e(v)-5 b(alues)18
-b(de\014ned)h(in)g(GRF)p Ft(_)p Fk(P)-7 b(AR:)18 b(GRF)p
-Ft(__)p Fk(LINE,)g(GRF)p Ft(__)p Fk(MARK,)427 1469 y(GRF)p
-Ft(__)p Fk(TEXT.)-2 1628 y Fc(Cap)n(:)227 1774 y Fk(The)26
-b Ft(")p Fk(Cap)p Ft(")e Fk(function)i(is)g(called)f(to)g(determine)h
-(if)g(the)g(grf)f(mo)r(dule)g(has)g(a)g(giv)n(en)g(capabilit)n(y)-7
-b(,)25 b(as)g(indicated)h(b)n(y)227 1873 y(the)i Ft(")p
-Fk(cap)p Ft(")f Fk(argumen)n(t:)227 1997 y(INTEGER)g(FUNCTION)i(CAP\()e
-(GRF)n(CON,)h(CAP)-7 b(,)27 b(V)-9 b(ALUE)28 b(\))340
-2253 y Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g
-(A)g(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g
-(calling)427 2353 y(application.)340 2483 y Fj(\017)45
-b Fk(CAP)36 b(=)g(INTEGER)f(\(Giv)n(en\))i(The)f(capabilit)n(y)f(b)r
-(eing)i(inquired)e(ab)r(out.)63 b(This)36 b(will)g(b)r(e)h(one)e(of)h
-(the)427 2582 y(follo)n(wing)27 b(constan)n(ts)f(de\014ned)i(in)g(GRF)p
-Ft(_)p Fk(P)-7 b(AR:)227 2741 y(GRF)p Ft(__)p Fk(SCALES:)33
-b(This)g(function)h(should)f(return)g(a)f(non-zero)g(v)-5
-b(alue)33 b(if)h(the)f Ft(")p Fk(Scales)p Ft(")f Fk(function)h(is)h
-(imple-)227 2841 y(men)n(ted,)28 b(and)g(zero)e(otherwise.)36
-b(The)28 b(supplied)g(V)-9 b(ALUE)27 b(argumen)n(t)g(should)g(b)r(e)h
-(ignored.)227 2964 y(GRF)p Ft(__)p Fk(MJUST:)c(This)g(function)g
-(should)g(return)f(a)h(non-zero)e(v)-5 b(alue)23 b(if)i(the)f
-Ft(")p Fk(T)-7 b(ext)p Ft(")23 b Fk(and)h Ft(")p Fk(TxExt)p
-Ft(")e Fk(functions)227 3064 y(recognise)35 b Ft(")p
-Fk(M)p Ft(")i Fk(as)f(a)g(c)n(haracter)f(in)i(the)h(justi\014cation)f
-(string.)64 b(If)37 b(the)h(\014rst)e(c)n(haracter)f(of)i(a)f
-(justi\014cation)227 3163 y(string)d(is)h Ft(")p Fk(M)p
-Ft(")p Fk(,)g(then)g(the)g(text)g(should)f(b)r(e)h(justi\014ed)g(with)g
-(the)g(giv)n(en)f(reference)g(p)r(oin)n(t)g(at)h(the)g(b)r(ottom)g(of)
-227 3263 y(the)f(b)r(ounding)f(b)r(o)n(x.)51 b(This)33
-b(is)f(di\013eren)n(t)g(to)h Ft(")p Fk(B)p Ft(")e Fk(justi\014cation,)j
-(whic)n(h)e(requests)g(that)g(the)h(reference)e(p)r(oin)n(t)227
-3363 y(b)r(e)k(put)g(on)f(the)h(baseline)e(of)i(the)f(text,)j(since)d
-(some)g(c)n(haracters)e(hang)h(do)n(wn)h(b)r(elo)n(w)g(the)h(baseline.)
-56 b(If)35 b(the)227 3462 y Ft(")p Fk(T)-7 b(ext)p Ft(")25
-b Fk(or)g Ft(")p Fk(TxExt)p Ft(")g Fk(function)h(cannot)g(di\013eren)n
-(tiate)g(b)r(et)n(w)n(een)f Ft(")p Fk(M)p Ft(")h Fk(and)f
-Ft(")p Fk(B)p Ft(")p Fk(,)h(then)g(this)g(function)h(should)227
-3562 y(return)e(zero,)g(in)g(whic)n(h)h(case)e Ft(")p
-Fk(M)p Ft(")h Fk(justi\014cation)g(will)g(nev)n(er)g(b)r(e)g(requested)
-g(b)n(y)g(Plot.)36 b(The)25 b(supplied)h(V)-9 b(ALUE)227
-3661 y(argumen)n(t)27 b(should)g(b)r(e)h(ignored.)227
-3784 y(GRF)p Ft(__)p Fk(ESC:)22 b(This)g(function)h(should)e(return)h
-(a)g(non-zero)e(v)-5 b(alue)22 b(if)h(the)f Ft(")p Fk(T)-7
-b(ext)p Ft(")22 b Fk(and)g Ft(")p Fk(TxExt)p Ft(")f Fk(functions)h(can)
-227 3884 y(recognise)f(and)h(in)n(terpret)f(graphics)g(escap)r(e)g
-(sequences)h(within)h(the)f(supplied)g(string)g(\(see)g(attribute)g
-(Escap)r(e\).)227 3984 y(Zero)g(should)i(b)r(e)f(returned)g(if)h(escap)
-r(e)f(sequences)g(cannot)g(b)r(e)h(in)n(terpreted)e(\(in)i(whic)n(h)g
-(case)e(the)i(Plot)f(class)f(will)227 4083 y(in)n(terpret)29
-b(them)h(itself)g(if)g(needed\).)43 b(The)30 b(supplied)g(V)-9
-b(ALUE)29 b(argumen)n(t)g(should)g(b)r(e)h(ignored)e(only)h(if)h(escap)
-r(e)227 4183 y(sequences)h(cannot)h(b)r(e)g(in)n(terpreted)f(b)n(y)h
-Ft(")p Fk(T)-7 b(ext)p Ft(")31 b Fk(and)g Ft(")p Fk(TxExt)p
-Ft(")p Fk(.)48 b(Otherwise,)32 b(V)-9 b(ALUE)32 b(indicates)g(whether)
-227 4283 y Ft(")p Fk(T)-7 b(ext)p Ft(")26 b Fk(and)g
-Ft(")p Fk(TxExt)p Ft(")f Fk(should)h(in)n(terpret)g(escap)r(e)g
-(sequences)f(in)i(subsequen)n(t)f(calls.)36 b(If)27 b(V)-9
-b(ALUE)26 b(is)g(non-zero)227 4382 y(then)k(escap)r(e)f(sequences)g
-(should)g(b)r(e)h(in)n(terpreted)f(b)n(y)h Ft(")p Fk(T)-7
-b(ext)p Ft(")28 b Fk(and)i Ft(")p Fk(TxExt)p Ft(")p Fk(.)41
-b(Otherwise,)29 b(they)h(should)f(b)r(e)227 4482 y(dra)n(wn)e(as)g
-(literal)g(text.)340 4738 y Fj(\017)45 b Fk(V)-9 b(ALUE)34
-b(=)f(INTEGER)f(\(Giv)n(en\))i(The)f(use)h(of)f(this)g(parameter)f(dep)
-r(ends)i(on)f(the)h(v)-5 b(alue)33 b(of)g(CAP)g(as)427
-4838 y(describ)r(ed)28 b(ab)r(o)n(v)n(e.)340 4968 y Fj(\017)45
-b Fk(Returned)28 b(F)-7 b(unction)29 b(V)-7 b(alue:)37
-b(The)28 b(v)-5 b(alue)28 b(returned)f(b)n(y)h(the)g(function)g(dep)r
-(ends)g(on)g(the)g(v)-5 b(alue)28 b(of)g(CAP)427 5068
-y(as)f(describ)r(ed)h(ab)r(o)n(v)n(e.)35 b(Zero)26 b(should)i(b)r(e)g
-(returned)f(if)h(the)g(supplied)g(capabilit)n(y)f(is)g(not)h
-(recognised.)-2 5227 y Fc(Flush)n(:)227 5373 y Fk(The)19
-b Ft(")p Fk(Flush)p Ft(")g Fk(function)g(ensures)f(that)i(the)f(displa)
-n(y)f(device)h(is)g(up-to-date,)h(b)n(y)f(\015ushing)g(an)n(y)f(p)r
-(ending)h(graphics)227 5472 y(to)28 b(the)g(output)g(device.)37
-b(It)27 b(requires)g(the)h(follo)n(wing)e(in)n(terface:)227
-5595 y(INTEGER)h(FUNCTION)i(FLUSH\()f(GRF)n(CON)g(\))p
-eop end
-%%Page: 244 254
-TeXDict begin 244 253 bop 0 52 a FG(244)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n
-(taining)g(information)h(passed)f(from)h(the)g(calling)427
-451 y(application.)-2 615 y Fc(Line)n(:)227 761 y Fk(The)j
-Ft(")p Fk(Line)p Ft(")e Fk(function)i(displa)n(ys)e(lines)i(joining)f
-(the)h(giv)n(en)e(p)r(ositions)h(and)g(requires)f(the)i(follo)n(wing)e
-(in)n(terface:)227 887 y(INTEGER)h(FUNCTION)i(LINE\()e(GRF)n(CON,)h(N,)
-g(X,)g(Y)g(\))340 1152 y Fj(\017)45 b Fk(GRF)n(CON)25
-b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n(taining)g
-(information)h(passed)f(from)h(the)g(calling)427 1252
-y(application.)340 1386 y Fj(\017)45 b Fk(N)28 b(=)f(INTEGER)h(\(Giv)n
-(en\))g(-)f(The)h(n)n(um)n(b)r(er)f(of)g(p)r(ositions)h(to)f(b)r(e)h
-(joined)g(together.)340 1520 y Fj(\017)45 b Fk(X\()29
-b(N)e(\))h(=)g(REAL)f(\(Giv)n(en\))h(-)f(An)h(arra)n(y)e(holding)h(the)
-h Ft(")p Fk(n)p Ft(")f Fk(x)g(v)-5 b(alues.)340 1654
-y Fj(\017)45 b Fk(Y\()29 b(N)e(\))h(=)g(REAL)f(\(Giv)n(en\))h(-)f(An)h
-(arra)n(y)e(holding)h(the)h Ft(")p Fk(n)p Ft(")f Fk(y)g(v)-5
-b(alues.)-2 1819 y Fc(Mark)n(:)227 1965 y Fk(The)28 b
-Ft(")p Fk(Mark)p Ft(")e Fk(function)i(displa)n(ys)e(mark)n(ers)g(at)h
-(the)h(giv)n(en)f(p)r(ositions.)37 b(It)28 b(requires)e(the)i(follo)n
-(wing)e(in)n(terface:)227 2091 y(INTEGER)h(FUNCTION)i(MARK\()f(GRF)n
-(CON,)f(N,)h(X,)g(Y,)g(TYPE)f(\))340 2355 y Fj(\017)45
-b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n
-(taining)g(information)h(passed)f(from)h(the)g(calling)427
-2455 y(application.)340 2589 y Fj(\017)45 b Fk(N)28 b(=)f(INTEGER)h
-(\(Giv)n(en\))g(-)f(The)h(n)n(um)n(b)r(er)f(of)g(p)r(ositions)h(to)f(b)
-r(e)h(mark)n(ed.)340 2723 y Fj(\017)45 b Fk(X\()29 b(N)e(\))h(=)g(REAL)
-f(\(Giv)n(en\))h(-)f(An)h(arra)n(y)e(holding)h(the)h
-Ft(")p Fk(n)p Ft(")f Fk(x)g(v)-5 b(alues.)340 2857 y
-Fj(\017)45 b Fk(Y\()29 b(N)e(\))h(=)g(REAL)f(\(Giv)n(en\))h(-)f(An)h
-(arra)n(y)e(holding)h(the)h Ft(")p Fk(n)p Ft(")f Fk(y)g(v)-5
-b(alues.)340 2992 y Fj(\017)45 b Fk(TYPE)28 b(=)h(INTEGER)g(\(Giv)n
-(en\))g(-)f(An)i(in)n(teger)e(whic)n(h)h(can)f(b)r(e)i(used)e(to)h
-(indicate)g(the)g(t)n(yp)r(e)h(of)e(mark)n(er)427 3091
-y(sym)n(b)r(ol)f(required.)-2 3256 y Fc(Qc)m(h)n(:)227
-3402 y Fk(The)e Ft(")p Fk(Qc)n(h)p Ft(")e Fk(function)j(returns)e(the)h
-(heigh)n(ts)f(of)h(c)n(haracters)d(dra)n(wn)i(v)n(ertically)f(and)i
-(horizon)n(tally)e(in)i(graphics)227 3501 y(co)r(ordinates.)36
-b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n(terface:)227
-3627 y(INTEGER)h(FUNCTION)i(QCH\()e(GRF)n(CON,)h(CHV,)g(CHH)g(\))340
-3892 y Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g
-(A)g(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g
-(calling)427 3992 y(application.)340 4126 y Fj(\017)45
-b Fk(CHV)27 b(=)e(REAL)h(\(Returned\))g(The)g(heigh)n(t)g(of)f(c)n
-(haracters)f(dra)n(wn)h(with)h(a)f(v)n(ertical)g(baseline.)36
-b(This)25 b(will)427 4225 y(b)r(e)j(an)g(incremen)n(t)f(in)h(the)g(X)g
-(axis.)340 4360 y Fj(\017)45 b Fk(CHH)31 b(=)f(REAL)g(\(Returned\))h
-(The)f(heigh)n(t)g(of)g(c)n(haracters)e(dra)n(wn)h(with)h(a)g(horizon)n
-(tal)f(baseline.)44 b(This)427 4459 y(will)28 b(b)r(e)g(an)f(incremen)n
-(t)h(in)g(the)g(Y)g(axis.)-2 4624 y Fc(Scales)n(:)227
-4770 y Fk(The)h Ft(")p Fk(Scales)p Ft(")e Fk(function)i(returns)f(t)n
-(w)n(o)f(v)-5 b(alues)28 b(\(one)h(for)f(eac)n(h)f(axis\))h(whic)n(h)h
-(scale)e(incremen)n(ts)h(on)h(the)g(corre-)227 4869 y(sp)r(onding)h
-(axis)f(in)n(to)g(a)h Ft(")p Fk(normal)p Ft(")d Fk(co)r(ordinate)i
-(system)g(in)h(whic)n(h:)42 b(1\))29 b(the)h(axes)f(ha)n(v)n(e)g(equal)
-g(scale)g(in)h(terms)227 4969 y(of)k(\(for)f(instance\))g(millimetres)g
-(p)r(er)h(unit)g(distance,)g(2\))g(X)f(v)-5 b(alues)33
-b(increase)f(from)h(left)h(to)g(righ)n(t,)g(and)f(3\))g(Y)227
-5069 y(v)-5 b(alues)27 b(increase)g(from)g(b)r(ottom)h(to)f(top.)37
-b(It)28 b(requires)f(the)g(follo)n(wing)g(in)n(terface:)227
-5194 y(INTEGER)g(FUNCTION)i(SCALES\()e(GRF)n(CON,)h(ALPHA,)g(BET)-7
-b(A)27 b(\))340 5459 y Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g
-(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n(taining)g(information)h(passed)f
-(from)h(the)g(calling)427 5559 y(application.)340 5693
-y Fj(\017)45 b Fk(ALPHA)28 b(=)f(REAL)h(\(Returned\))g(The)g(scale)f
-(for)g(the)h(X)g(axis)e(\(i.e.)38 b(Xnorm)27 b(=)g(alpha)p
-Fj(\003)p Fk(Xw)n(orld\).)p eop end
-%%Page: 245 255
-TeXDict begin 245 254 bop 3643 52 a FG(245)340 351 y
-Fj(\017)45 b Fk(BET)-7 b(A)28 b(=)f(REAL)g(\(Returned\))i(The)e(scale)g
-(for)g(the)h(Y)g(axis)f(\(i.e.)37 b(Ynorm)27 b(=)h(b)r(eta)p
-Fj(\003)p Fk(Yw)n(orld\).)-2 523 y Fc(T)-8 b(ext)n(:)227
-669 y Fk(The)31 b Ft(")p Fk(T)-7 b(ext)p Ft(")30 b Fk(function)h
-(displa)n(ys)e(a)h(c)n(haracter)f(string)h(at)g(a)g(giv)n(en)g(p)r
-(osition)g(using)h(a)f(sp)r(eci\014ed)g(justi\014cation)227
-769 y(and)e(up-v)n(ector.)35 b(It)28 b(requires)e(the)i(follo)n(wing)f
-(in)n(terface:)227 899 y(INTEGER)g(FUNCTION)i(TEXT\()e(GRF)n(CON,)h
-(TEXT,)f(X,)h(Y,)g(JUST,)g(UPX,)g(UPY)g(\))340 1175 y
-Fj(\017)45 b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g
-(KeyMap)f(con)n(taining)g(information)h(passed)f(from)h(the)g(calling)
-427 1274 y(application.)340 1412 y Fj(\017)45 b Fk(TEXT)28
-b(=)f(CHARA)n(CTER)h Fj(\003)f Fk(\()h Fj(\003)f Fk(\))h(\(Giv)n(en\))g
-(-)f(The)h(string)f(to)g(b)r(e)h(displa)n(y)n(ed.)340
-1550 y Fj(\017)45 b Fk(X)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h
-(reference)f(x)g(co)r(ordinate.)340 1688 y Fj(\017)45
-b Fk(Y)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h(reference)f(y)g(co)r
-(ordinate.)340 1826 y Fj(\017)45 b Fk(JUST)23 b(=)g(CHARA)n(CTER)g
-Fj(\003)f Fk(\()h Fj(\003)g Fk(\))g(\(Giv)n(en)g(\))g(-)f(A)i(string)e
-(whic)n(h)g(sp)r(eci\014es)h(the)g(lo)r(cation)g(within)g(the)g(text)
-427 1925 y(string)31 b(whic)n(h)h(is)f(to)g(b)r(e)h(placed)f(at)h(the)g
-(reference)e(p)r(osition)i(giv)n(en)e(b)n(y)i(x)f(and)g(y)-7
-b(.)49 b(The)31 b(\014rst)h(c)n(haracter)427 2025 y(ma)n(y)24
-b(b)r(e)g('T')h(for)f Ft(")p Fk(top)p Ft(")p Fk(,)g('C')g(for)g
-Ft(")p Fk(cen)n(tre)p Ft(")p Fk(,)f(or)h('B')g(for)g
-Ft(")p Fk(b)r(ottom)p Ft(")p Fk(,)g(and)g(sp)r(eci\014es)h(the)f(v)n
-(ertical)f(lo)r(cation)427 2125 y(of)28 b(the)f(reference)g(p)r
-(osition.)36 b(Note,)28 b Ft(")p Fk(b)r(ottom)p Ft(")e
-Fk(corresp)r(onds)g(to)h(the)h(base-line)e(of)h(normal)g(text.)37
-b(Some)427 2224 y(c)n(haracters)24 b(\(eg)i Ft(")p Fk(y)p
-Ft(")p Fk(,)f Ft(")p Fk(g)p Ft(")p Fk(,)g Ft(")p Fk(p)p
-Ft(")p Fk(,)h(etc\))g(descend)g(b)r(elo)n(w)g(the)g(base-line.)36
-b(The)26 b(second)f(c)n(haracter)f(ma)n(y)h(b)r(e)427
-2324 y('L')k(for)e Ft(")p Fk(left)p Ft(")p Fk(,)h('C')h(for)e
-Ft(")p Fk(cen)n(tre)p Ft(")p Fk(,)g(or)h('R')g(for)g
-Ft(")p Fk(righ)n(t)p Ft(")p Fk(,)e(and)i(sp)r(eci\014es)h(the)f
-(horizon)n(tal)f(lo)r(cation)g(of)h(the)427 2424 y(reference)k(p)r
-(osition.)54 b(If)33 b(the)h(string)e(has)h(less)f(than)i(2)e(c)n
-(haracters)f(then)j('C')f(is)g(used)g(for)g(the)g(missing)427
-2523 y(c)n(haracters.)340 2661 y Fj(\017)45 b Fk(UPX)34
-b(=)g(REAL)g(\(Giv)n(en\))h(-)e(The)i(x)f(comp)r(onen)n(t)f(of)h(the)h
-(up-v)n(ector)e(for)g(the)i(text.)56 b(If)35 b(necessary)d(the)427
-2761 y(supplied)26 b(v)-5 b(alue)25 b(should)g(b)r(e)h(negated)e(to)h
-(ensure)g(that)h(p)r(ositiv)n(e)e(v)-5 b(alues)25 b(alw)n(a)n(ys)f
-(refer)g(to)h(displacemen)n(ts)427 2860 y(from)j(left)g(to)f(righ)n(t)g
-(on)g(the)h(screen.)340 2998 y Fj(\017)45 b Fk(UPX)34
-b(=)g(REAL)g(\(Giv)n(en\))h(-)e(The)i(y)f(comp)r(onen)n(t)f(of)h(the)h
-(up-v)n(ector)e(for)g(the)i(text.)56 b(If)35 b(necessary)d(the)427
-3098 y(supplied)26 b(v)-5 b(alue)25 b(should)g(b)r(e)h(negated)e(to)h
-(ensure)g(that)h(p)r(ositiv)n(e)e(v)-5 b(alues)25 b(alw)n(a)n(ys)f
-(refer)g(to)h(displacemen)n(ts)427 3197 y(from)j(b)r(ottom)f(to)h(top)f
-(on)h(the)g(screen.)-2 3369 y Fc(TxExt)n(:)227 3516 y
-Fk(The)35 b Ft(")p Fk(TxExt)p Ft(")e Fk(function)i(returns)f(the)h
-(corners)e(of)i(a)f(b)r(o)n(x)g(whic)n(h)h(w)n(ould)f(enclose)g(the)h
-(supplied)g(c)n(haracter)227 3615 y(string)25 b(if)i(it)f(w)n(ere)f
-(displa)n(y)n(ed)g(using)g(the)h(T)-7 b(ext)26 b(function)g(describ)r
-(ed)g(ab)r(o)n(v)n(e.)35 b(The)26 b(returned)f(b)r(o)n(x)g(includes)h
-(an)n(y)227 3715 y(leading)h(or)g(trailing)g(spaces.)36
-b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n(terface:)227
-3844 y(INTEGER)h(FUNCTION)i(TXEXT\()e(GRF)n(CON,)h(TEXT,)g(X,)g(Y,)g
-(JUST,)f(UPX,)h(UPY,)g(XB,)g(YB)f(\))340 4120 y Fj(\017)45
-b Fk(GRF)n(CON)25 b(=)g(INTEGER)g(\(Giv)n(en\))g(-)g(A)g(KeyMap)f(con)n
-(taining)g(information)h(passed)f(from)h(the)g(calling)427
-4220 y(application.)340 4358 y Fj(\017)45 b Fk(TEXT)28
-b(=)f(CHARA)n(CTER)h Fj(\003)f Fk(\()h Fj(\003)f Fk(\))h(\(Giv)n(en\))g
-(-)f(The)h(string)f(to)g(b)r(e)h(displa)n(y)n(ed.)340
-4496 y Fj(\017)45 b Fk(X)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h
-(reference)f(x)g(co)r(ordinate.)340 4634 y Fj(\017)45
-b Fk(Y)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h(reference)f(y)g(co)r
-(ordinate.)340 4772 y Fj(\017)45 b Fk(JUST)23 b(=)g(CHARA)n(CTER)g
-Fj(\003)f Fk(\()h Fj(\003)g Fk(\))g(\(Giv)n(en)g(\))g(-)f(A)i(string)e
-(whic)n(h)g(sp)r(eci\014es)h(the)g(lo)r(cation)g(within)g(the)g(text)
-427 4871 y(string)k(whic)n(h)h(is)f(to)h(b)r(e)g(placed)f(at)g(the)h
-(reference)f(p)r(osition)h(giv)n(en)e(b)n(y)i(x)f(and)h(y)-7
-b(.)36 b(See)28 b Ft(")p Fk(T)-7 b(ext)p Ft(")27 b Fk(ab)r(o)n(v)n(e.)
-340 5009 y Fj(\017)45 b Fk(UPX)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h
-(x)f(comp)r(onen)n(t)g(of)h(the)g(up-v)n(ector)e(for)h(the)h(text.)38
-b(See)27 b Ft(")p Fk(T)-7 b(ext)p Ft(")27 b Fk(ab)r(o)n(v)n(e.)340
-5147 y Fj(\017)45 b Fk(UPX)28 b(=)f(REAL)h(\(Giv)n(en\))g(-)f(The)h(y)f
-(comp)r(onen)n(t)g(of)h(the)g(up-v)n(ector)e(for)h(the)h(text.)38
-b(See)27 b Ft(")p Fk(T)-7 b(ext)p Ft(")27 b Fk(ab)r(o)n(v)n(e.)340
-5285 y Fj(\017)45 b Fk(XB\()39 b(4)f(\))h(=)g(REAL)f(\(Returned\))h(-)g
-(Returned)f(holding)g(the)h(x)g(co)r(ordinate)e(of)i(eac)n(h)f(corner)f
-(of)h(the)427 5384 y(b)r(ounding)28 b(b)r(o)n(x.)340
-5522 y Fj(\017)45 b Fk(YB\()39 b(4)f(\))h(=)g(REAL)f(\(Returned\))h(-)g
-(Returned)f(holding)g(the)h(y)g(co)r(ordinate)e(of)i(eac)n(h)f(corner)f
-(of)h(the)427 5622 y(b)r(ounding)28 b(b)r(o)n(x.)p eop
-end
-%%Page: 246 256
-TeXDict begin 246 255 bop 0 52 a FG(246)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(GRID)913 483 y Fd(Dra)m(w)38
-b(a)g(set)h(of)f(lab)s(elled)g(co)s(ordinate)e(axes)3089
-482 y FA(AST)p Fe(_)p FA(GRID)0 651 y Fc(Description:)44
-b Fk(This)20 b(routine)g(dra)n(ws)e(a)i(complete)g(annotated)f(set)h
-(of)g(co)r(ordinate)f(axes)g(for)g(a)h(Plot)f(with)i(\(optionally\))227
-751 y(a)31 b(co)r(ordinate)f(grid)g(sup)r(erimp)r(osed.)47
-b(Details)31 b(of)g(the)g(axes)f(and)h(grid)f(can)h(b)r(e)g(con)n
-(trolled)f(b)n(y)h(setting)g(v)-5 b(alues)227 851 y(for)27
-b(the)h(v)-5 b(arious)27 b(attributes)g(de\014ned)h(b)n(y)f(the)h(Plot)
-f(class)g(\(q.v.\).)0 994 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GRID\()e(THIS,)h(STATUS)g(\))0 1137
-y Fc(Argumen)m(ts:)259 1268 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-1368 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1494
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1594 y Fk(The)c(global)e(status.)0 1750 y Fc(Notes:)340
-2026 y Fj(\017)45 b Fk(If)28 b(the)h(supplied)f(Plot)f(is)h(a)f
-(Plot3D,)g(the)i(axes)d(will)i(b)r(e)h(annotated)e(using)g(three)h
-(2-dimensional)e(Plots,)427 2126 y(one)i(for)f(eac)n(h)g(2D)g(plane)h
-(in)g(the)g(3D)f(curren)n(t)g(co)r(ordinate)g(system.)37
-b(The)27 b(plots)h(will)g(b)r(e)g Ft(")p Fk(pasted)p
-Ft(")e Fk(on)n(to)427 2226 y(3)h(faces)g(of)g(the)h(cub)r(oid)f
-(graphics)f(v)n(olume)h(sp)r(eci\014ed)g(when)h(the)g(Plot3D)e(w)n(as)g
-(constructed.)37 b(The)27 b(faces)427 2325 y(to)h(b)r(e)g(used)f(can)h
-(b)r(e)g(con)n(trolled)e(b)n(y)h(the)h Ft(")p Fk(Ro)r(otCorner)p
-Ft(")d Fk(attribute.)340 2452 y Fj(\017)45 b Fk(An)23
-b(error)e(results)h(if)i(either)e(the)h(curren)n(t)f(F)-7
-b(rame)22 b(or)g(the)h(base)f(F)-7 b(rame)23 b(of)f(the)h(Plot)g(is)f
-(not)h(2-dimensional)427 2552 y(or)k(\(for)g(a)h(Plot3D\))f
-(3-dimensional.)340 2679 y Fj(\017)45 b Fk(An)24 b(error)e(also)h
-(results)g(if)h(the)g(transformation)e(b)r(et)n(w)n(een)h(the)h(base)f
-(and)h(curren)n(t)e(F)-7 b(rames)23 b(of)h(the)g(Plot)f(is)427
-2778 y(not)k(de\014ned)g(in)g(either)g(direction)g(\(i.e.)37
-b(the)27 b(Plot's)f(T)-7 b(ranF)g(orw)n(ard)24 b(or)i(T)-7
-b(ranIn)n(v)n(erse)25 b(attribute)i(is)f(zero\).)p 0
-2966 V 0 3096 a FA(AST)p Fe(_)p FA(GRIDLINE)1237 3104
-y Fd(Dra)m(w)37 b(a)i(grid)f(line)g(\(or)f(axis\))1643
-3225 y(for)h(a)h(Plot)2765 3096 y FA(AST)p Fe(_)p FA(GRIDLINE)0
-3379 y Fc(Description:)44 b Fk(This)33 b(routine)e(dra)n(ws)g(a)h(curv)
-n(e)f(in)i(the)g(ph)n(ysical)e(co)r(ordinate)g(system)h(of)g(a)g(Plot)g
-(b)n(y)g(v)-5 b(arying)31 b(only)227 3478 y(one)g(of)h(the)g(co)r
-(ordinates)e(along)g(the)i(length)f(of)h(the)g(curv)n(e.)47
-b(It)32 b(is)f(in)n(tended)h(for)f(dra)n(wing)f(co)r(ordinate)g(axes,)
-227 3578 y(co)r(ordinate)38 b(grids,)j(and)d(tic)n(k)h(marks)e(on)i
-(axes)f(\(but)h(note)g(that)g(these)g(are)f(also)f(a)n(v)-5
-b(ailable)38 b(via)g(the)h(more)227 3678 y(comprehensiv)n(e)26
-b(AST)p Ft(_)p Fk(GRID)j(routine\).)227 3799 y(The)35
-b(curv)n(e)e(is)i(transformed)e(in)n(to)h(graphical)f(co)r(ordinate)h
-(space)f(for)h(plotting,)j(so)c(that)i(a)f(straigh)n(t)g(line)g(in)227
-3899 y(ph)n(ysical)24 b(co)r(ordinates)f(ma)n(y)g(result)h(in)h(a)f
-(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e(if)i(the)g(Mapping)f(in)n(v)n
-(olv)n(ed)f(is)h(non-linear.)227 3998 y(An)n(y)j(discon)n(tin)n(uities)
-f(in)h(the)f(Mapping)h(b)r(et)n(w)n(een)f(ph)n(ysical)g(and)g
-(graphical)f(co)r(ordinates)g(are)g(catered)h(for,)g(as)227
-4098 y(is)i(an)n(y)f(clipping)g(established)g(using)h(AST)p
-Ft(_)p Fk(CLIP)-7 b(.)0 4242 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_GRIDLINE\()c(THIS,)j(AXIS,)h(START,)f(LENGTH,)g
-(STATUS)g(\))0 4385 y Fc(Argumen)m(ts:)259 4515 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 4615 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 4742 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))
-427 4842 y Fk(The)g(index)g(of)f(the)h(Plot)f(axis)g(whose)g(ph)n
-(ysical)g(co)r(ordinate)f(v)-5 b(alue)31 b(is)f(to)h(b)r(e)g(v)-5
-b(aried)30 b(along)f(the)j(length)427 4941 y(of)26 b(the)h(curv)n(e)e
-(\(all)h(other)f(co)r(ordinates)g(will)h(remain)f(\014xed\).)37
-b(This)26 b(v)-5 b(alue)26 b(should)g(lie)g(in)g(the)g(range)f(from)427
-5041 y(1)i(to)h(the)g(n)n(um)n(b)r(er)f(of)h(Plot)f(axes)f(\(Naxes)i
-(attribute\).)259 5168 y Fc(ST)-8 b(AR)g(T\()33 b Fj(\003)e
-Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 5267
-y Fk(An)f(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)
-g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 5367 y(start)d(of)h(the)g(curv)n(e.)259
-5494 y Fc(LENGTH)k(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427
-5593 y Fk(The)24 b(length)h(of)f(curv)n(e)f(to)h(b)r(e)h(dra)n(wn,)e
-(giv)n(en)h(as)f(an)h(incremen)n(t)g(along)f(the)h(selected)g(ph)n
-(ysical)g(axis.)35 b(This)427 5693 y(ma)n(y)27 b(b)r(e)h(p)r(ositiv)n
-(e)f(or)g(negativ)n(e.)p eop end
-%%Page: 247 257
-TeXDict begin 247 256 bop 3643 52 a FG(247)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 617 y Fc(Notes:)340
-904 y Fj(\017)45 b Fk(No)27 b(curv)n(e)f(is)h(dra)n(wn)f(if)h(the)h(ST)
--7 b(AR)g(T)27 b(arra)n(y)e(con)n(tains)h(an)n(y)g(co)r(ordinates)g
-(with)h(the)h(v)-5 b(alue)26 b(AST)p Ft(__)p Fk(BAD,)427
-1003 y(nor)h(if)h(LENGTH)g(has)f(this)h(v)-5 b(alue.)340
-1138 y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340
-1273 y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 1373 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 1576 3780 12 v 0 1707
-a FA(AST)p Fe(_)p FA(GRISMMAP)1380 1706 y Fd(Create)37
-b(a)i(GrismMap)2669 1707 y FA(AST)p Fe(_)p FA(GRISMMAP)0
-1899 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(GrismMap)g(and)h(optionally)f(initialises)g(its)h(attributes.)227
-2026 y(A)j(GrismMap)g(is)f(a)h(sp)r(ecialised)f(form)h(of)f(Mapping)h
-(whic)n(h)g(transforms)e(1-dimensional)h(co)r(ordinates)f(using)227
-2126 y(the)39 b(sp)r(ectral)f(disp)r(ersion)g(equation)f(describ)r(ed)i
-(in)f(FITS-W)n(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p Fk(Represen)n(tation)
-e(of)h(sp)r(ectral)227 2225 y(co)r(ordinates)26 b(in)i(FITS)p
-Ft(")p Fk(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r(ersion)f(pro)r
-(duced)g(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227
-2352 y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d
-(transformation)g(of)i(a)g(GrismMap)f(transforms)g(input)h
-Ft(")p Fk(grism)f(param-)227 2451 y(eter)p Ft(")k Fk(v)-5
-b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)n(elength)d(v)-5
-b(alues.)36 b(The)25 b Ft(")p Fk(grism)f(parameter)p
-Ft(")f Fk(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2551 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fk(the)h(o\013set)227 2651 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 2750 y(lo)r(cal)f(length)p Ft(")p
-Fk(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 2850 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 2950 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 3103 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_GRISMMAP\()38 b(OPTIONS,)j(STATUS)g(\))0
-3257 y Fc(Argumen)m(ts:)259 3397 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3497 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-3597 y(b)r(e)39 b(used)g(for)f(initialising)h(the)g(new)g(GrismMap.)69
-b(The)39 b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)h(that)g(for)f
-(the)427 3696 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-3831 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3931 y Fk(The)c(global)e(status.)0 4097
-y Fc(Returned)32 b(V)-8 b(alue:)259 4237 y(AST)p Ft(_)p
-Fc(GRISMMAP)32 b(=)g(INTEGER)427 4337 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(GrismMap.)0 4503 y Fc(Notes:)340 4790 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4889 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 5093 V 0
-5223 a FA(AST)p Fe(_)p FA(IMPOR)-11 b(T)1062 5224 y Fd(Imp)s(ort)38
-b(an)g(Ob)7 b(ject)38 b(p)s(oin)m(ter)g(to)g(the)1498
-5324 y(curren)m(t)f(con)m(text)2895 5223 y FA(AST)p Fe(_)p
-FA(IMPOR)-11 b(T)0 5494 y Fc(Description:)44 b Fk(This)23
-b(routine)e(imp)r(orts)h(an)g(Ob)5 b(ject)22 b(p)r(oin)n(ter)g(that)h
-(w)n(as)e(created)g(in)i(a)f(higher)f(or)h(lo)n(w)n(er)e(lev)n(el)i
-(con)n(text,)227 5593 y(in)n(to)36 b(the)h(curren)n(t)f(AST)h(con)n
-(text.)63 b(This)36 b(means)g(that)h(the)g(p)r(oin)n(ter)f(will)h(b)r
-(e)g(ann)n(ulled)f(when)h(the)f(curren)n(t)227 5693 y(con)n(text)27
-b(is)h(ended)g(\(with)g(AST)p Ft(_)p Fk(END\).)p eop
-end
-%%Page: 248 258
-TeXDict begin 248 257 bop 0 52 a FG(248)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_IMPORT\()d(THIS,)i(STATUS)g(\))0
-496 y Fc(Argumen)m(ts:)259 627 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))
-427 727 y Fk(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h(imp)r
-(orted.)259 855 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 954 y Fk(The)c(global)e(status.)0
-1111 y Fc(Class)31 b(Applicabilit)m(y:)259 1243 y(Ob)5
-b(ject)427 1342 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)p 0 1531 3780 12 v 0 1662 a FA(AST)p Fe(_)p
-FA(INTERSECT)1450 1663 y Fd(Find)39 b(the)g(p)s(oin)m(t)e(of)1369
-1778 y(in)m(tersection)f(b)s(et)m(w)m(een)1390 1877 y(t)m(w)m(o)h(geo)s
-(desic)h(curv)m(es)2657 1662 y FA(AST)p Fe(_)p FA(INTERSECT)0
-2056 y Fc(Description:)44 b Fk(This)26 b(routine)g(\014nds)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)25 b(at)h(the)g(p)r(oin)n(t)g(of)g(in)n
-(tersection)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(geo)r(desic)227
-2156 y(curv)n(es.)35 b(Eac)n(h)25 b(curv)n(e)g(is)g(sp)r(eci\014ed)h(b)
-n(y)g(t)n(w)n(o)f(p)r(oin)n(ts)g(on)h(the)g(curv)n(e.)35
-b(It)26 b(can)g(only)f(b)r(e)h(used)g(with)g(2-dimensional)227
-2255 y(F)-7 b(rames.)227 2378 y(F)g(or)24 b(example,)h(in)g(a)f(basic)g
-(F)-7 b(rame,)25 b(it)g(will)g(\014nd)g(the)g(p)r(oin)n(t)g(of)g(in)n
-(tersection)e(b)r(et)n(w)n(een)i(t)n(w)n(o)f(straigh)n(t)f(lines.)36
-b(But)227 2477 y(for)27 b(a)h(SkyF)-7 b(rame)26 b(it)i(will)g(\014nd)g
-(an)g(in)n(tersection)e(of)i(t)n(w)n(o)f(great)f(circles.)0
-2622 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_INTERSECT\()37
-b(THIS,)42 b(A1,)g(A2,)h(B1,)f(B2,)g(CROSS,)f(STATUS)h(\))0
-2766 y Fc(Argumen)m(ts:)259 2897 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2997 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 3125 y Fc(A1\()32 b(2)g(\))f(=)i(DOUBLE)f(PRECISION)f
-(\(Giv)m(en\))427 3225 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g
-(for)g(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48
-b(This)32 b(should)f(con)n(tain)f(the)427 3324 y(co)r(ordinates)c(of)i
-(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h(\014rst)g(geo)r(desic)e(curv)
-n(e.)259 3452 y Fc(A2\()32 b(2)g(\))f(=)i(DOUBLE)f(PRECISION)f(\(Giv)m
-(en\))427 3552 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g
-(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48
-b(This)32 b(should)f(con)n(tain)f(the)427 3651 y(co)r(ordinates)g(of)h
-(a)f(second)g(p)r(oin)n(t)h(on)g(the)g(\014rst)g(geo)r(desic)f(curv)n
-(e.)46 b(It)31 b(should)g(not)f(b)r(e)i(co-inciden)n(t)e(with)427
-3751 y(the)e(\014rst)g(p)r(oin)n(t.)259 3879 y Fc(B1\()k(2)f(\))h(=)g
-(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 3978 y Fk(An)h(arra)n(y)d(with)j
-(one)f(elemen)n(t)g(for)g(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g
-(attribute\).)48 b(This)32 b(should)f(con)n(tain)f(the)427
-4078 y(co)r(ordinates)c(of)i(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h
-(second)f(geo)r(desic)g(curv)n(e.)259 4206 y Fc(B2\()32
-b(2)f(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-4305 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g(eac)n(h)g(F)
--7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48 b(This)32
-b(should)f(con)n(tain)f(the)427 4405 y(co)r(ordinates)24
-b(of)g(a)h(second)f(p)r(oin)n(t)h(on)f(the)h(second)g(geo)r(desic)e
-(curv)n(e.)35 b(It)25 b(should)g(not)g(b)r(e)g(co-inciden)n(t)f(with)
-427 4505 y(the)k(\014rst)g(p)r(oin)n(t.)259 4633 y Fc(CR)m(OSS\()k(2)f
-(\))h(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427 4732
-y Fk(An)39 b(arra)n(y)d(with)j(one)e(elemen)n(t)i(for)e(eac)n(h)h(F)-7
-b(rame)37 b(axis)h(in)g(whic)n(h)g(the)h(co)r(ordinates)e(of)h(the)h
-(required)427 4832 y(in)n(tersection)27 b(will)h(b)r(e)g(returned.)259
-4960 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5059 y Fk(The)c(global)e(status.)0 5216
-y Fc(Notes:)340 5494 y Fj(\017)45 b Fk(F)-7 b(or)19 b(SkyF)-7
-b(rames)19 b(eac)n(h)g(curv)n(e)f(will)i(b)r(e)g(a)g(great)e(circle,)j
-(and)e(in)h(general)e(eac)n(h)h(pair)g(of)h(curv)n(es)e(will)i(in)n
-(tersect)427 5593 y(at)33 b(t)n(w)n(o)f(diametrically)f(opp)r(osite)i
-(p)r(oin)n(ts)f(on)h(the)g(sky)-7 b(.)51 b(The)33 b(returned)f(p)r
-(osition)g(is)h(the)g(one)f(whic)n(h)h(is)427 5693 y(closest)27
-b(to)h(p)r(oin)n(t)f(A1.)p eop end
-%%Page: 249 259
-TeXDict begin 249 258 bop 3643 52 a FG(249)340 351 y
-Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 451 y(has)j(this)h(v)-5 b(alue,)23 b(or)f(if)h(the)g(t)n
-(w)n(o)f(p)r(oin)n(ts)g(de\014ning)g(either)h(geo)r(desic)e(are)h
-(co-inciden)n(t,)h(or)e(if)i(the)g(t)n(w)n(o)f(curv)n(es)427
-551 y(do)28 b(not)f(in)n(tersect.)340 679 y Fj(\017)45
-b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g(this)g(routine)g
-(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n(w)n(een)h(t)n(w)
-n(o)g(p)r(oin)n(ts,)427 779 y(as)f(de\014ned)h(b)n(y)f(the)h(AST)p
-Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340 908 y Fj(\017)45
-b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(F)-7
-b(rame)27 b(is)g(not)h(2-dimensional.)p 0 1099 3780 12
-v 0 1230 a FA(AST)p Fe(_)p FA(INTER)-15 b(V)g(AL)1456
-1231 y Fd(Create)37 b(a)h(In)m(terv)-7 b(al)2757 1230
-y FA(AST)p Fe(_)p FA(INTER)-15 b(V)g(AL)0 1398 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(In)n(terv)-5
-b(al)27 b(and)h(optionally)e(initialises)i(its)g(attributes.)227
-1521 y(A)e(In)n(terv)-5 b(al)25 b(is)g(a)g(Region)f(whic)n(h)i
-(represen)n(ts)e(upp)r(er)h(and/or)f(lo)n(w)n(er)g(limits)h(on)h(one)e
-(or)h(more)f(axes)h(of)g(a)g(F)-7 b(rame.)227 1620 y(F)g(or)37
-b(a)g(p)r(oin)n(t)g(to)g(b)r(e)h(within)g(the)g(region)e(represen)n
-(ted)g(b)n(y)h(the)h(In)n(terv)-5 b(al,)39 b(the)e(p)r(oin)n(t)h(m)n
-(ust)f(satisfy)g(all)g(the)227 1720 y(restrictions)29
-b(placed)h(on)g(all)g(the)h(axes.)44 b(The)30 b(p)r(oin)n(t)h(is)f
-(outside)g(the)h(region)e(if)h(it)h(fails)f(to)g(satisfy)g(an)n(y)g
-(one)g(of)227 1820 y(the)f(restrictions.)39 b(Eac)n(h)27
-b(axis)h(ma)n(y)f(ha)n(v)n(e)h(either)g(an)g(upp)r(er)h(limit,)h(a)e
-(lo)n(w)n(er)f(limit,)i(b)r(oth)g(or)f(neither.)39 b(If)29
-b(b)r(oth)227 1919 y(limits)c(are)e(supplied)h(but)g(are)f(in)i(rev)n
-(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)e(limit)j(is)f(greater)
-e(than)i(the)g(upp)r(er)h(limit\),)227 2019 y(then)j(the)g(in)n(terv)-5
-b(al)27 b(is)h(an)f(excluded)h(in)n(terv)-5 b(al,)27
-b(rather)f(than)i(an)f(included)i(in)n(terv)-5 b(al.)227
-2141 y(A)n(t)28 b(least)f(one)h(axis)e(limit)j(m)n(ust)e(b)r(e)h
-(supplied.)227 2264 y(Note,)33 b(The)e(In)n(terv)-5 b(al)31
-b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g(nature)g
-(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-2364 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 2463 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-2609 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_INTERVAL\()
-38 b(FRAME,)j(LBND,)h(UBND,)f(UNC,)h(OPTIONS,)f(STATUS)g(\))0
-2754 y Fc(Argumen)m(ts:)259 2886 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 2986 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3086 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3185 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3314 y Fc(LBND\()k Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3414
-y Fk(An)c(arra)n(y)e(with)i(one)f(elemen)n(t)h(for)f(eac)n(h)f(F)-7
-b(rame)27 b(axis)e(\(Naxes)i(attribute\))g(con)n(taining)e(the)i(lo)n
-(w)n(er)e(limits)427 3513 y(on)j(eac)n(h)e(axis.)36 b(Set)28
-b(a)g(v)-5 b(alue)27 b(to)h(AST)p Ft(__)p Fk(BAD)f(to)h(indicate)f
-(that)h(the)g(axis)f(has)g(no)g(lo)n(w)n(er)f(limit.)259
-3642 y Fc(UBND\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)
-m(en\))427 3742 y Fk(An)26 b(arra)n(y)d(with)i(one)g(elemen)n(t)g(for)g
-(eac)n(h)f(F)-7 b(rame)25 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)i(upp)r(er)f(limits)427 3841 y(on)j(eac)n(h)e(axis.)36
-b(Set)28 b(a)g(v)-5 b(alue)27 b(to)h(AST)p Ft(__)p Fk(BAD)f(to)h
-(indicate)f(that)h(the)g(axis)f(has)g(no)g(upp)r(er)h(limit.)259
-3970 y Fc(UNC)k(=)g(INTEGER)f(\(Giv)m(en\))427 4070 y
-Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f(whic)n
-(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g(with)427
-4169 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g(created.)54
-b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h(on)f(the)h
-(b)r(oundary)f(of)427 4269 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f
-(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-4369 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4468 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-4568 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4682 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4782 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4881 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4981 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 5081 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-5180 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 5295 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-5394 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-5494 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 5593 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 5693 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)p eop end
-%%Page: 250 260
-TeXDict begin 250 259 bop 0 52 a FG(250)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(OPTIONS)h(=)g(CHARA)m
-(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-451 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)f
-(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r(e)
-427 551 y(used)28 b(for)g(initialising)f(the)i(new)f(In)n(terv)-5
-b(al.)37 b(The)28 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g
-(for)g(the)g(AST)p Ft(_)p Fk(SET)427 650 y(routine.)259
-790 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 889 y Fk(The)c(global)e(status.)0 1065
-y Fc(Returned)32 b(V)-8 b(alue:)259 1214 y(AST)p Ft(_)p
-Fc(INTER)d(V)g(AL)33 b(=)f(INTEGER)427 1314 y Fk(A)c(p)r(oin)n(ter)f
-(to)h(the)g(new)g(In)n(terv)-5 b(al.)0 1489 y Fc(Notes:)340
-1785 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1885 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-2060 y Fc(Status)33 b(Handling)n(:)227 2206 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 2306 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2405 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2618 3780 12 v 0 2749 a FA(AST)p
-Fe(_)p FA(INTRAMAP)272 b Fd(Create)37 b(an)h(In)m(traMap)273
-b FA(AST)p Fe(_)p FA(INTRAMAP)0 2951 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(In)n(traMap)g(and)g
-(optionally)g(initialises)g(its)h(attributes.)227 3082
-y(An)k(In)n(traMap)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(encapsulates)f(a)h(priv)-5 b(ately-de\014ned)31
-b(co)r(ordinate)227 3182 y(transformation)18 b(routine)h(\(e.g.)34
-b(written)19 b(in)h(F)-7 b(ortran\))18 b(so)h(that)g(it)h(ma)n(y)e(b)r
-(e)i(used)f(lik)n(e)g(an)n(y)g(other)f(AST)i(Mapping.)227
-3281 y(This)28 b(allo)n(ws)e(y)n(ou)h(to)g(create)g(Mappings)g(that)h
-(p)r(erform)f(an)n(y)g(conceiv)-5 b(able)27 b(co)r(ordinate)f
-(transformation.)227 3412 y(Ho)n(w)n(ev)n(er,)k(an)h(In)n(traMap)g(is)g
-(in)n(tended)g(for)g(use)g(within)h(a)f(single)f(program)g(or)g(a)h
-(priv)-5 b(ate)31 b(suite)g(of)g(soft)n(w)n(are,)227
-3512 y(where)24 b(all)g(programs)d(ha)n(v)n(e)i(access)g(to)h(the)g
-(same)g(co)r(ordinate)f(transformation)f(functions)j(\(i.e.)36
-b(can)23 b(b)r(e)i(link)n(ed)227 3612 y(against)40 b(them\).)76
-b(In)n(traMaps)39 b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g
-(datasets)g(whic)n(h)g(ma)n(y)g(b)r(e)h(exp)r(orted)227
-3711 y(for)34 b(pro)r(cessing)f(b)n(y)h(other)g(soft)n(w)n(are,)g
-(since)g(that)h(soft)n(w)n(are)e(will)h(not)h(ha)n(v)n(e)e(the)i
-(necessary)d(transformation)227 3811 y(functions)c(a)n(v)-5
-b(ailable,)27 b(resulting)g(in)g(an)h(error.)227 3942
-y(Y)-7 b(ou)37 b(m)n(ust)g(register)e(an)n(y)h(co)r(ordinate)f
-(transformation)g(functions)i(to)f(b)r(e)h(used)g(using)f(AST)p
-Ft(_)p Fk(INTRAREG)227 4042 y(b)r(efore)28 b(creating)e(an)h(In)n
-(traMap.)0 4205 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_INTRAMAP\()38 b(NAME,)k(NIN,)g(NOUT,)f(OPTIONS,)f(STATUS)i
-(\))0 4367 y Fc(Argumen)m(ts:)259 4517 y(NAME)31 b(=)h(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4617 y Fk(A)h(c)n(haracter)c(string)j(con)n(taining)e(the)j(name)e(of)h
-(the)h(transformation)d(routine)h(to)h(use)g(\(whic)n(h)g(should)427
-4717 y(previously)g(ha)n(v)n(e)g(b)r(een)i(registered)e(using)h(AST)p
-Ft(_)p Fk(INTRAREG\).)h(This)f(name)g(is)g(case)g(sensitiv)n(e.)53
-b(All)427 4816 y(white)28 b(space)f(will)h(b)r(e)g(remo)n(v)n(ed)e(b)r
-(efore)h(use.)259 4956 y Fc(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-5055 y Fk(The)e(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates.)40
-b(This)29 b(m)n(ust)h(b)r(e)f(compatible)g(with)h(the)f(n)n(um)n(b)r
-(er)g(of)g(input)h(co)r(or-)427 5155 y(dinates)25 b(accepted)g(b)n(y)g
-(the)g(transformation)e(routine)i(\(as)g(sp)r(eci\014ed)g(when)g(this)g
-(routine)g(w)n(as)f(registered)427 5255 y(using)k(AST)p
-Ft(_)p Fk(INTRAREG\).)259 5394 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))
-427 5494 y Fk(The)22 b(n)n(um)n(b)r(er)g(of)f(output)i(co)r(ordinates.)
-33 b(This)22 b(m)n(ust)g(b)r(e)g(compatible)g(with)g(the)g(n)n(um)n(b)r
-(er)g(of)g(output)g(co)r(or-)427 5593 y(dinates)h(pro)r(duced)g(b)n(y)g
-(the)h(transformation)e(routine)g(\(as)h(sp)r(eci\014ed)h(when)f(this)h
-(routine)f(w)n(as)f(registered)427 5693 y(using)28 b(AST)p
-Ft(_)p Fk(INTRAREG\).)p eop end
-%%Page: 251 261
-TeXDict begin 251 260 bop 3643 52 a FG(251)259 351 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 551 y(used)j(for)f
-(initialising)g(the)h(new)g(In)n(traMap.)34 b(The)24
-b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)h(for)f(the)h(AST)p
-Ft(_)p Fk(SET)427 650 y(routine.)259 794 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 893
-y Fk(The)c(global)e(status.)0 1077 y Fc(Returned)32 b(V)-8
-b(alue:)259 1235 y(AST)p Ft(_)p Fc(INTRAMAP)32 b(=)g(INTEGER)427
-1334 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(In)n(traMap.)0
-1518 y Fc(Notes:)340 1822 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1921 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2142 3780 12 v 0 2273 a FA(AST)p Fe(_)p FA(INTRAREG)1233
-2274 y Fd(Register)38 b(a)g(transformation)1355 2389
-y(routine)f(for)h(use)h(b)m(y)f(an)1648 2502 y(In)m(traMap)2703
-2273 y FA(AST)p Fe(_)p FA(INTRAREG)0 2712 y Fc(Description:)44
-b Fk(This)35 b(function)g(registers)e(a)h(priv)-5 b(ately-de\014ned)34
-b(co)r(ordinate)f(transformation)g(routine)h(written)g(in)227
-2812 y(F)-7 b(ortran)18 b(so)h(that)h(it)g(ma)n(y)e(b)r(e)i(used)f(to)h
-(create)e(an)h(In)n(traMap.)33 b(An)20 b(In)n(traMap)e(is)i(a)f(sp)r
-(ecialised)g(form)g(of)g(Mapping)227 2911 y(whic)n(h)27
-b(encapsulates)f(the)i(F)-7 b(ortran)26 b(routine)g(so)h(that)g(it)h
-(ma)n(y)e(b)r(e)h(used)g(lik)n(e)g(an)n(y)f(other)h(AST)g(Mapping.)37
-b(This)227 3011 y(allo)n(ws)26 b(y)n(ou)h(to)h(create)e(Mappings)h
-(that)h(p)r(erform)f(an)n(y)g(conceiv)-5 b(able)27 b(co)r(ordinate)g
-(transformation.)227 3146 y(Registration)35 b(of)h(relev)-5
-b(an)n(t)36 b(transformation)e(routines)i(is)g(required)f(b)r(efore)h
-(using)g(the)g(AST)p Ft(_)p Fk(INTRAMAP)227 3246 y(constructor)28
-b(function)i(to)g(create)e(an)i(In)n(traMap)e(or)h(reading)f(an)h
-(external)g(represen)n(tation)f(of)h(an)h(In)n(traMap)227
-3346 y(from)e(a)f(Channel.)0 3517 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_INTRAREG\()c(NAME,)j(NIN,)h(NOUT,)g(TRAN,)f(FLAGS,)g
-(PURPOSE,)g(AUTHOR,)f(CONTACT,)227 3616 y(STATUS)h(\))0
-3787 y Fc(Argumen)m(ts:)259 3945 y(NAME)31 b(=)h(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4045 y Fk(A)23 b(c)n(haracter)e(string)g(con)n(taining)h(a)g(unique)h
-(name)f(to)g(b)r(e)h(asso)r(ciated)e(with)i(the)g(transformation)e
-(routine)427 4144 y(in)32 b(order)e(to)i(iden)n(tify)g(it.)49
-b(This)31 b(name)h(is)f(case)g(sensitiv)n(e.)48 b(All)32
-b(white)g(space)e(will)i(b)r(e)g(remo)n(v)n(ed)e(b)r(efore)427
-4244 y(use.)259 4388 y Fc(NIN)i(=)g(INTEGER)f(\(Giv)m(en\))427
-4487 y Fk(The)c(n)n(um)n(b)r(er)f(of)g(input)h(co)r(ordinates)d
-(accepted)i(b)n(y)g(the)h(transformation)d(routine)i(\(i.e.)37
-b(the)27 b(n)n(um)n(b)r(er)f(of)427 4587 y(dimensions)33
-b(of)f(the)h(space)f(in)h(whic)n(h)f(the)h(input)h(p)r(oin)n(ts)e
-(reside\).)51 b(A)33 b(v)-5 b(alue)33 b(of)f(AST)p Ft(__)p
-Fk(ANY)h(ma)n(y)f(b)r(e)427 4686 y(giv)n(en)27 b(if)h(the)g(routine)f
-(is)h(able)f(to)h(accommo)r(date)e(a)h(v)-5 b(ariable)27
-b(n)n(um)n(b)r(er)g(of)h(input)g(co)r(ordinates.)259
-4830 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))427 4930
-y Fk(The)c(n)n(um)n(b)r(er)g(of)g(output)h(co)r(ordinates)d(pro)r
-(duced)i(b)n(y)g(the)g(transformation)e(routine)i(\(i.e.)38
-b(the)29 b(n)n(um)n(b)r(er)427 5029 y(of)i(dimensions)f(of)h(the)g
-(space)f(in)h(whic)n(h)f(the)h(output)h(p)r(oin)n(ts)e(reside\).)46
-b(A)31 b(v)-5 b(alue)31 b(of)f(AST)p Ft(__)p Fk(ANY)h(ma)n(y)427
-5129 y(b)r(e)d(giv)n(en)f(if)h(the)g(routine)f(is)h(able)f(to)h(pro)r
-(duce)f(a)g(v)-5 b(ariable)26 b(n)n(um)n(b)r(er)i(of)f(output)i(co)r
-(ordinates.)259 5273 y Fc(TRAN)j(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-5372 y Fk(The)20 b(transformation)d(routine)i(to)g(b)r(e)h(registered.)
-33 b(This)19 b(routine)g(should)g(p)r(erform)g(whatev)n(er)f(co)r
-(ordinate)427 5472 y(transformations)26 b(are)h(required)f(and)i
-(should)f(ha)n(v)n(e)f(an)i(in)n(terface)f(lik)n(e)g(AST)p
-Ft(_)p Fk(TRANN)h(\(q.v.\).)427 5593 y(This)33 b(transformation)f
-(routine)h(m)n(ust)g(also)f(app)r(ear)g(in)i(an)f(EXTERNAL)g(statemen)n
-(t)g(in)g(the)h(routine)427 5693 y(whic)n(h)28 b(calls)f(AST)p
-Ft(_)p Fk(INTRAREG.)p eop end
-%%Page: 252 262
-TeXDict begin 252 261 bop 0 52 a FG(252)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FLA)m(GS)i(=)f
-(INTEGER)f(\(Giv)m(en\))427 451 y Fk(This)j(v)-5 b(alue)33
-b(ma)n(y)g(b)r(e)h(used)g(to)f(supply)h(a)f(set)g(of)h(\015ags)e(whic)n
-(h)i(describ)r(e)f(the)h(transformation)e(routine)427
-551 y(and)g(whic)n(h)h(ma)n(y)e(a\013ect)i(the)g(b)r(eha)n(viour)e(of)h
-(an)n(y)g(In)n(traMap)f(whic)n(h)h(uses)g(it.)52 b(Often,)34
-b(a)e(v)-5 b(alue)32 b(of)h(zero)427 650 y(will)k(b)r(e)f(giv)n(en)f
-(here,)j(but)f(y)n(ou)e(ma)n(y)h(also)f(supply)h(the)g(sum)h(of)f(a)f
-(set)h(of)g(\015ags)g(as)f(describ)r(ed)h(in)g(the)427
-750 y Ft(")p Fk(T)-7 b(ransformation)26 b(Flags)p Ft(")g
-Fk(section)h(\(b)r(elo)n(w\).)259 883 y Fc(PURPOSE)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 983 y Fk(A)e(c)n(haracter)c(string)j(con)n(taining)f(a)g(short)g
-(\(one)h(line\))h(textual)f(commen)n(t)g(to)f(describ)r(e)h(the)g(purp)
-r(ose)g(of)427 1083 y(the)f(transformation)e(routine.)259
-1216 y Fc(A)m(UTHOR)32 b(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h Fj(\003)g Fc(\))g(\(Giv)m(en\))427 1316 y Fk(A)c(c)n(haracter)e
-(string)h(con)n(taining)f(the)i(name)g(of)f(the)h(author)f(of)g(the)h
-(transformation)e(routine.)259 1449 y Fc(CONT)-8 b(A)m(CT)33
-b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 1549 y Fk(A)37 b(c)n(haracter)d(string)i(con)n(taining)f(con)n
-(tact)h(details)g(for)f(the)i(author)e(of)i(the)f(transformation)f
-(routine)427 1649 y(\(e.g.)43 b(an)30 b(e-mail)f(or)g(WWW)i(address\).)
-42 b(If)30 b(an)n(y)f(In)n(traMap)g(whic)n(h)h(uses)f(this)h
-(transformation)e(routine)427 1748 y(is)g(exp)r(orted)f(as)g(part)g(of)
-g(a)g(dataset)g(to)h(an)f(external)g(user)g(who)g(do)r(es)g(not)h(ha)n
-(v)n(e)e(access)h(to)g(the)h(routine,)427 1848 y(then)g(these)g(con)n
-(tact)f(details)g(should)h(allo)n(w)e(them)i(to)g(obtain)f(the)h
-(necessary)e(co)r(de.)259 1981 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2081
-y Fk(The)c(global)e(status.)0 2244 y Fc(Notes:)340 2528
-y Fj(\017)45 b Fk(Bew)n(are)27 b(that)i(an)f(external)f(represen)n
-(tation)g(of)h(an)g(In)n(traMap)f(\(created)h(b)n(y)g(writing)g(it)g
-(to)h(a)e(Channel\))427 2628 y(will)37 b(not)g(include)g(the)h(co)r
-(ordinate)d(transformation)h(routine)g(whic)n(h)h(it)g(uses,)i(so)d
-(will)h(only)g(refer)f(to)427 2727 y(the)f(routine)e(b)n(y)h(its)g
-(name)f(\(as)h(assigned)e(using)i(AST)p Ft(_)p Fk(INTRAREG\).)g
-(Consequen)n(tly)-7 b(,)35 b(the)f(external)427 2827
-y(represen)n(tation)i(cannot)g(b)r(e)i(utilised)f(b)n(y)g(another)f
-(program)f(unless)i(that)h(program)d(has)h(also)g(regis-)427
-2927 y(tered)31 b(the)g(same)f(transformation)f(routine)h(with)h(the)g
-(same)g(name)f(using)g(an)h(iden)n(tical)f(in)n(v)n(o)r(cation)g(of)427
-3026 y(AST)p Ft(_)p Fk(INTRAREG.)g(If)f(no)g(suc)n(h)g(registration)e
-(has)i(b)r(een)g(p)r(erformed,)g(then)h(attempting)f(to)g(read)f(the)
-427 3126 y(external)f(represen)n(tation)f(will)i(result)f(in)h(an)f
-(error.)340 3259 y Fj(\017)45 b Fk(Y)-7 b(ou)37 b(ma)n(y)f(use)g(AST)p
-Ft(_)p Fk(INTRAREG)h(to)g(register)e(a)h(transformation)f(routine)h
-(with)h(the)g(same)f(name)427 3359 y(more)23 b(than)h(once,)g(but)g
-(only)f(if)h(the)g(argumen)n(ts)e(supplied)i(are)f(iden)n(tical)g(on)g
-(eac)n(h)g(o)r(ccasion)f(\(i.e)i(there)g(is)427 3459
-y(no)f(w)n(a)n(y)e(of)i(c)n(hanging)e(things)i(once)f(a)g(routine)g
-(has)h(b)r(een)g(successfully)f(registered)f(under)i(a)f(giv)n(en)g
-(name,)427 3558 y(and)32 b(attempting)h(to)e(do)h(so)g(will)g(result)g
-(in)g(an)g(error\).)48 b(This)32 b(feature)g(simply)g(allo)n(ws)f
-(registration)f(to)427 3658 y(b)r(e)25 b(p)r(erformed)e(indep)r(enden)n
-(tly)-7 b(,)26 b(but)f(consisten)n(tly)-7 b(,)24 b(at)g(sev)n(eral)e
-(places)i(within)h(y)n(our)d(program,)h(without)427 3758
-y(ha)n(ving)k(to)g(c)n(hec)n(k)g(whether)g(it)h(has)g(already)e(b)r
-(een)i(done.)340 3891 y Fj(\017)45 b Fk(If)24 b(an)f(error)f(o)r(ccurs)
-g(in)i(the)f(transformation)f(routine,)i(this)g(ma)n(y)e(b)r(e)i
-(indicated)g(b)n(y)f(setting)g(its)h(ST)-7 b(A)g(TUS)427
-3991 y(argumen)n(t)33 b(to)h(an)f(error)f(v)-5 b(alue)34
-b(b)r(efore)f(it)h(returns.)55 b(This)34 b(will)g(immediately)g
-(terminate)f(the)h(curren)n(t)427 4090 y(AST)27 b(op)r(eration.)35
-b(The)26 b(error)e(v)-5 b(alue)26 b(AST)p Ft(__)p Fk(ITFER)g(is)f(a)n
-(v)-5 b(ailable)25 b(for)h(this)g(purp)r(ose,)g(but)h(other)e(v)-5
-b(alues)427 4190 y(ma)n(y)25 b(also)f(b)r(e)h(used)h(\(e.g.)35
-b(if)26 b(y)n(ou)f(wish)g(to)g(distinguish)g(di\013eren)n(t)g(t)n(yp)r
-(es)g(of)h(error\).)34 b(The)25 b(AST)p Ft(__)p Fk(ITFER)427
-4290 y(error)h(v)-5 b(alue)27 b(is)h(de\014ned)g(in)g(the)g(AST)p
-Ft(_)p Fk(ERR)f(include)h(\014le.)-2 4453 y Fc(T)-8 b(ransformation)33
-b(Flags)n(:)227 4599 y Fk(The)39 b(follo)n(wing)e(\015ags)h(are)f
-(de\014ned)i(in)g(the)g(AST)p Ft(_)p Fk(P)-7 b(AR)38
-b(include)h(\014le)g(and)f(allo)n(w)f(y)n(ou)h(to)g(pro)n(vide)g
-(further)227 4699 y(information)25 b(ab)r(out)h(the)h(nature)e(of)h
-(the)g(transformation)e(routine.)36 b(Ha)n(ving)25 b(selected)h(the)g
-(set)g(of)g(\015ags)f(whic)n(h)227 4798 y(apply)-7 b(,)28
-b(y)n(ou)f(should)g(supply)h(the)g(sum)f(of)h(their)f(v)-5
-b(alues)28 b(as)f(the)h(FLA)n(GS)g(argumen)n(t)e(to)i(AST)p
-Ft(_)p Fk(INTRAREG.)340 5061 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(NOFWD:)c(If)g(this)f(\015ag)f(is)h(set,)k(it)c(indicates)g
-(that)h(the)f(transformation)f(routine)h(do)r(es)g(not)427
-5161 y(implemen)n(t)24 b(a)f(forw)n(ard)e(co)r(ordinate)h
-(transformation.)33 b(In)24 b(this)f(case,)g(an)n(y)f(In)n(traMap)g
-(whic)n(h)h(uses)g(it)g(will)427 5261 y(ha)n(v)n(e)k(a)h(T)-7
-b(ranF)g(orw)n(ard)26 b(attribute)i(v)-5 b(alue)28 b(of)h(zero)e(and)h
-(the)g(transformation)f(routine)h(itself)g(will)h(not)f(b)r(e)427
-5360 y(called)c(with)g(its)h(F)n(OR)-9 b(W)g(ARD)24 b(argumen)n(t)f
-(set)h(to)g(.TR)n(UE..)35 b(By)24 b(default,)h(it)f(is)g(assumed)g
-(that)g(a)f(forw)n(ard)427 5460 y(transformation)j(is)i(pro)n(vided.)
-340 5593 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(NOINV:)25
-b(If)g(this)g(\015ag)f(is)h(set,)h(it)f(indicates)f(that)i(the)f
-(transformation)e(routine)h(do)r(es)h(not)g(imple-)427
-5693 y(men)n(t)e(an)g(in)n(v)n(erse)e(co)r(ordinate)g(transformation.)
-34 b(In)23 b(this)g(case,)f(an)n(y)g(In)n(traMap)g(whic)n(h)h(uses)f
-(it)h(will)g(ha)n(v)n(e)p eop end
-%%Page: 253 263
-TeXDict begin 253 262 bop 3643 52 a FG(253)427 351 y
-Fk(a)28 b(T)-7 b(ranIn)n(v)n(erse)26 b(attribute)j(v)-5
-b(alue)28 b(of)g(zero)f(and)h(the)h(transformation)e(routine)h(itself)g
-(will)h(not)f(b)r(e)h(called)427 451 y(with)37 b(its)g(F)n(OR)-9
-b(W)g(ARD)37 b(argumen)n(t)e(set)h(to)h(.F)-9 b(ALSE..)63
-b(By)36 b(default,)j(it)e(is)f(assumed)g(that)h(an)f(in)n(v)n(erse)427
-551 y(transformation)26 b(is)i(pro)n(vided.)340 689 y
-Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SIMPFI:)27 b(Y)-7 b(ou)28
-b(ma)n(y)f(set)h(this)g(\015ag)f(if)h(applying)f(the)h(transformation)e
-(routine's)h(forw)n(ard)f(co)r(or-)427 788 y(dinate)h(transformation,)f
-(follo)n(w)n(ed)g(immediately)i(b)n(y)e(the)i(matc)n(hing)f(in)n(v)n
-(erse)e(transformation,)h(should)427 888 y(alw)n(a)n(ys)37
-b(restore)f(the)j(original)e(set)h(of)g(co)r(ordinates.)68
-b(It)38 b(indicates)g(that)h(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)427
-988 y(sequence)32 b(of)f(op)r(erations)g(b)n(y)g(an)h(iden)n(tit)n(y)g
-(Mapping)f(\(a)h(UnitMap\))h(if)f(it)g(is)g(encoun)n(tered)f(while)h
-(sim-)427 1087 y(plifying)i(a)f(comp)r(ound)g(Mapping)g(\(e.g.)54
-b(using)34 b(AST)p Ft(_)p Fk(SIMPLIFY\).)f(It)h(is)f(not)h(necessary)d
-(that)j(b)r(oth)427 1187 y(transformations)26 b(ha)n(v)n(e)g(actually)h
-(b)r(een)h(implemen)n(ted.)340 1325 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(SIMPIF:)24 b(Y)-7 b(ou)25 b(ma)n(y)e(set)i(this)f(\015ag)g
-(if)h(applying)f(the)g(transformation)f(routine's)h(in)n(v)n(erse)f(co)
-r(ordi-)427 1425 y(nate)32 b(transformation,)e(follo)n(w)n(ed)g
-(immediately)i(b)n(y)f(the)h(matc)n(hing)f(forw)n(ard)e
-(transformation,)i(should)427 1524 y(alw)n(a)n(ys)37
-b(restore)f(the)j(original)e(set)h(of)g(co)r(ordinates.)68
-b(It)38 b(indicates)g(that)h(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)427
-1624 y(sequence)32 b(of)f(op)r(erations)g(b)n(y)g(an)h(iden)n(tit)n(y)g
-(Mapping)f(\(a)h(UnitMap\))h(if)f(it)g(is)g(encoun)n(tered)f(while)h
-(sim-)427 1724 y(plifying)i(a)f(comp)r(ound)g(Mapping)g(\(e.g.)54
-b(using)34 b(AST)p Ft(_)p Fk(SIMPLIFY\).)f(It)h(is)f(not)h(necessary)d
-(that)j(b)r(oth)427 1823 y(transformations)26 b(ha)n(v)n(e)g(actually)h
-(b)r(een)h(implemen)n(ted.)p 0 2033 3780 12 v 0 2164
-a FA(AST)p Fe(_)p FA(INVER)-11 b(T)1443 2163 y Fd(In)m(v)m(ert)37
-b(a)i(Mapping)2920 2164 y FA(AST)p Fe(_)p FA(INVER)-11
-b(T)0 2363 y Fc(Description:)44 b Fk(This)30 b(routine)g(in)n(v)n(erts)
-f(a)g(Mapping)h(b)n(y)g(rev)n(ersing)e(the)i(b)r(o)r(olean)f(sense)h
-(of)g(its)g(In)n(v)n(ert)f(attribute.)44 b(If)227 2463
-y(this)34 b(attribute)g(is)f(zero)g(\(the)h(default\),)i(the)e(Mapping)
-f(will)h(transform)e(co)r(ordinates)g(in)i(the)g(w)n(a)n(y)e(sp)r
-(eci\014ed)227 2562 y(when)f(it)h(w)n(as)e(created.)46
-b(If)31 b(it)g(is)g(non-zero,)f(the)h(input)h(and)f(output)g(co)r
-(ordinates)f(will)h(b)r(e)g(in)n(ter-c)n(hanged)e(so)227
-2662 y(that)24 b(the)f(direction)g(of)g(the)g(Mapping)g(is)g(rev)n
-(ersed.)34 b(This)23 b(will)g(cause)g(it)g(to)g(displa)n(y)g(the)g(in)n
-(v)n(erse)f(of)h(its)g(original)227 2762 y(b)r(eha)n(viour.)0
-2922 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_INVERT\()d(THIS,)
-i(STATUS)g(\))0 3082 y Fc(Argumen)m(ts:)259 3229 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 3329 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Mapping.)259 3467 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3566
-y Fk(The)c(global)e(status.)p 0 3776 V 0 3907 a FA(AST)p
-Fe(_)p FA(ISA)p Fb(<)p FA(CLASS)p Fb(>)1336 3908 y Fd(T)-10
-b(est)39 b(mem)m(b)s(ership)e(of)i(a)1416 4023 y(class)f(b)m(y)h(an)g
-(Ob)7 b(ject)2611 3907 y FA(AST)p Fe(_)p FA(ISA)p Fb(<)p
-FA(CLASS)p Fb(>)0 4222 y Fc(Description:)44 b Fk(This)26
-b(is)f(a)g(family)g(of)g(functions)h(whic)n(h)f(test)g(whether)h(an)f
-(Ob)5 b(ject)25 b(is)g(a)g(mem)n(b)r(er)g(of)g(the)h(class)e(called)227
-4322 y Fm(<)p Fk(CLASS)p Fm(>)p Fk(,)k(or)e(of)i(an)n(y)f(class)f
-(deriv)n(ed)h(from)g(it.)0 4482 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_ISA)p Fm(<)p Ft(CLASS)p Fm(>)p
-Ft(\()37 b(THIS,)42 b(STATUS)f(\))0 4642 y Fc(Argumen)m(ts:)259
-4789 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4889
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 5027
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 5127 y Fk(The)c(global)e(status.)0 5299 y Fc(Class)31
-b(Applicabilit)m(y:)259 5446 y(Ob)5 b(ject)427 5546 y
-Fk(These)28 b(functions)f(apply)h(to)f(all)h(Ob)5 b(jects.)0
-5718 y Fc(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 254 264
-TeXDict begin 254 263 bop 0 52 a FG(254)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(AST)p
-Ft(_)p Fc(ISA)p Fm(<)p Fc(CLASS)p Fm(>)h Fc(=)g(LOGICAL)427
-451 y Fk(.TR)n(UE.)f(if)h(the)f(Ob)5 b(ject)31 b(b)r(elongs)f(to)h(the)
-h(class)e(called)g Fm(<)p Fk(CLASS)p Fm(>)h Fk(\(or)f(to)h(a)g(class)f
-(deriv)n(ed)g(from)h(it\),)427 551 y(otherwise)c(.F)-9
-b(ALSE..)0 724 y Fc(Examples:)227 876 y Fy(MEMBER)46
-b(=)i(AST)p Ft(_)p Fy(ISAFRAME\()c(OBJ,)i(STATUS)h(\);)427
-971 y Fk(T)-7 b(ests)33 b(whether)g(Ob)5 b(ject)33 b(OBJ)f(is)h(a)f
-(mem)n(b)r(er)h(of)g(the)g(F)-7 b(rame)33 b(class,)g(or)f(of)h(an)n(y)f
-(class)g(deriv)n(ed)g(from)h(a)427 1071 y(F)-7 b(rame.)0
-1244 y Fc(Notes:)340 1538 y Fj(\017)45 b Fk(Ev)n(ery)31
-b(AST)h(class)f(pro)n(vides)g(a)h(function)g(\(AST)p
-Ft(_)p Fk(ISA)p Fm(<)p Fk(CLASS)p Fm(>)p Fk(\))h(of)f(this)g(form,)h
-(where)f Fm(<)p Fk(CLASS)p Fm(>)427 1638 y Fk(should)c(b)r(e)g
-(replaced)e(b)n(y)i(the)g(class)e(name.)340 1776 y Fj(\017)45
-b Fk(This)25 b(function)h(attempts)f(to)g(execute)f(ev)n(en)h(if)g(ST)
--7 b(A)g(TUS)26 b(is)f(set)g(to)f(an)h(error)e(v)-5 b(alue)25
-b(on)f(en)n(try)-7 b(,)25 b(although)427 1876 y(no)j(further)f(error)f
-(rep)r(ort)h(will)g(b)r(e)h(made)g(if)g(it)g(subsequen)n(tly)f(fails)g
-(under)h(these)g(circumstances.)340 2015 y Fj(\017)45
-b Fk(A)27 b(v)-5 b(alue)27 b(of)f(.F)-9 b(ALSE.)27 b(will)g(b)r(e)g
-(returned)f(if)i(this)f(function)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)35 b(In)27 b(particular,)427 2114 y(it)h(will)g(fail)g(if)g
-(the)g(p)r(oin)n(ter)f(supplied)h(do)r(es)f(not)h(iden)n(tify)g(an)f
-(Ob)5 b(ject)28 b(of)f(an)n(y)g(sort.)p 0 2325 3780 12
-v 0 2456 a FA(AST)p Fe(_)p FA(KEYMAP)1435 2455 y Fd(Create)37
-b(a)h(KeyMap)2832 2456 y FA(AST)p Fe(_)p FA(KEYMAP)0
-2656 y Fc(Description:)44 b Fk(This)19 b(function)g(creates)f(a)g(new)h
-(empt)n(y)g(KeyMap)e(and)i(optionally)f(initialises)g(its)h
-(attributes.)34 b(En)n(tries)227 2755 y(can)h(then)h(b)r(e)g(added)f
-(to)h(the)f(KeyMap)g(using)g(the)h(AST)p Ft(_)p Fk(MAPPUT0)p
-Fm(<)p Fk(X)p Fm(>)e Fk(and)h(AST)p Ft(_)p Fk(MAPPUT1)p
-Fm(<)p Fk(X)p Fm(>)227 2855 y Fk(functions.)227 2985
-y(The)30 b(KeyMap)f(class)g(is)h(used)g(to)g(store)f(a)g(set)h(of)g(v)
--5 b(alues)29 b(with)i(asso)r(ciated)d(k)n(eys)h(whic)n(h)h(iden)n
-(tify)h(the)f(v)-5 b(alues.)227 3085 y(The)32 b(k)n(eys)e(are)g
-(strings)g(\(case-sensitiv)n(e,)h(trailing)f(spaces)g(are)g(ignored\),)
-i(and)f(the)g(data)g(t)n(yp)r(e)g(of)g(the)h(v)-5 b(alues)227
-3184 y(can)27 b(b)r(e)h(in)n(teger,)f(\015oating)f(p)r(oin)n(t,)i(c)n
-(haracter)d(string)i(or)g(AST)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)36
-b(Eac)n(h)26 b(v)-5 b(alue)27 b(can)g(b)r(e)h(a)f(scalar)227
-3284 y(or)j(a)g(one-dimensional)g(v)n(ector.)44 b(A)31
-b(KeyMap)f(is)h(conceptually)f(similar)f(to)i(a)f(Mapping)g(in)h(that)g
-(a)g(KeyMap)227 3384 y(transforms)e(an)h(input)h(in)n(to)f(an)g(output)
-h(-)f(the)g(input)h(is)g(the)f(k)n(ey)-7 b(,)31 b(and)f(the)g(output)h
-(is)f(the)h(v)-5 b(alue)30 b(asso)r(ciated)227 3483 y(with)22
-b(the)h(k)n(ey)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)21 b(this)h(is)f(only)h(a)
-f(conceptual)g(similarit)n(y)-7 b(,)22 b(and)g(it)g(should)g(b)r(e)g
-(noted)f(that)h(the)h(KeyMap)227 3583 y(class)28 b(inherits)h(from)g
-(the)g(Ob)5 b(ject)29 b(class)f(rather)g(than)h(the)h(Mapping)e(class.)
-40 b(The)29 b(metho)r(ds)h(of)f(the)g(Mapping)227 3682
-y(class)e(cannot)g(b)r(e)h(used)g(with)g(a)f(KeyMap.)0
-3843 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_KEYMAP\()c
-(OPTIONS,)h(STATUS)h(\))0 4004 y Fc(Argumen)m(ts:)259
-4152 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4252 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 4351 y(used)26
-b(for)g(initialising)f(the)i(new)f(KeyMap.)35 b(The)26
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 4451 y(routine.)259 4590 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4689 y Fk(The)c(global)e(status.)0 4862 y Fc(Returned)32
-b(V)-8 b(alue:)259 5010 y(AST)p Ft(_)p Fc(MAP)32 b(=)g(INTEGER)427
-5110 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(KeyMap.)0
-5283 y Fc(Notes:)340 5577 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5677 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 255 265
-TeXDict begin 255 264 bop 3643 52 a FG(255)-2 351 y Fc(Status)33
-b(Handling)n(:)227 497 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-697 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 897 3780
-12 v 0 1028 a FA(AST)p Fe(_)p FA(LINEARAPPR)l(O)l(X)1662
-1029 y Fd(Obtain)38 b(a)1747 1128 y(linear)1600 1228
-y(appro)m(xima-)1669 1339 y(tion)f(to)h(a)1594 1438 y(Mapping,)f(if)
-1594 1549 y(appropriate)2341 1028 y FA(AST)p Fe(_)p FA(LINEARAPPR)l(O)l
-(X)0 1739 y Fc(Description:)44 b Fk(This)38 b(function)g(tests)g(the)f
-(forw)n(ard)f(co)r(ordinate)h(transformation)e(implemen)n(ted)k(b)n(y)e
-(a)g(Mapping)227 1839 y(o)n(v)n(er)28 b(a)i(giv)n(en)f(range)f(of)i
-(input)g(co)r(ordinates.)42 b(If)30 b(the)h(transformation)d(is)h
-(found)h(to)g(b)r(e)g(linear)f(to)h(a)f(sp)r(eci\014ed)227
-1938 y(lev)n(el)g(of)h(accuracy)-7 b(,)29 b(then)h(an)f(arra)n(y)e(of)j
-(\014t)g(co)r(e\016cien)n(ts)f(is)h(returned.)42 b(These)30
-b(ma)n(y)f(b)r(e)h(used)f(to)h(implemen)n(t)g(a)227 2038
-y(linear)23 b(appro)n(ximation)e(to)i(the)h(Mapping's)e(forw)n(ard)g
-(transformation)f(within)j(the)g(sp)r(eci\014ed)f(range)f(of)h(output)
-227 2137 y(co)r(ordinates.)36 b(If)28 b(the)g(transformation)e(is)h
-(not)h(su\016cien)n(tly)f(linear,)g(no)h(co)r(e\016cien)n(ts)f(are)f
-(returned.)0 2288 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_LINEARAPPROX)o(\()38 b(THIS,)j(LBND,)h(UBND,)f(TOL,)h(FIT,)g
-(STATUS)f(\))0 2438 y Fc(Argumen)m(ts:)259 2576 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2675 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Mapping.)259 2809 y Fc(LBND\()k Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 2908
-y Fk(An)26 b(arra)n(y)d(con)n(taining)h(the)i(lo)n(w)n(er)d(b)r(ounds)j
-(of)f(a)g(b)r(o)n(x)f(de\014ned)i(within)g(the)g(input)g(co)r(ordinate)
-e(system)h(of)427 3008 y(the)j(Mapping.)36 b(The)27 b(n)n(um)n(b)r(er)g
-(of)g(elemen)n(ts)g(in)g(this)g(arra)n(y)e(should)i(equal)f(the)i(v)-5
-b(alue)27 b(of)g(the)g(Mapping's)427 3107 y(Nin)h(attribute.)37
-b(This)28 b(b)r(o)n(x)f(should)h(sp)r(ecify)f(the)h(region)f(o)n(v)n
-(er)e(whic)n(h)j(linearit)n(y)f(is)g(required.)259 3241
-y Fc(UBND\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m
-(en\))427 3340 y Fk(An)g(arra)n(y)d(con)n(taining)h(the)h(upp)r(er)h(b)
-r(ounds)f(of)g(the)h(b)r(o)n(x)e(sp)r(ecifying)i(the)f(region)f(o)n(v)n
-(er)f(whic)n(h)i(linearit)n(y)427 3440 y(is)e(required.)259
-3573 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f(\(Giv)m(en\))427
-3673 y Fk(The)25 b(maxim)n(um)f(p)r(ermitted)i(deviation)e(from)g
-(linearit)n(y)-7 b(,)24 b(expressed)g(as)g(a)g(p)r(ositiv)n(e)g
-(Cartesian)f(displace-)427 3773 y(men)n(t)30 b(in)f(the)h(output)g(co)r
-(ordinate)e(space)h(of)g(the)h(Mapping.)42 b(If)29 b(a)g(linear)g
-(\014t)h(to)f(the)h(forw)n(ard)d(transfor-)427 3872 y(mation)j(of)f
-(the)h(Mapping)g(deviates)f(from)g(the)h(true)g(transformation)e(b)n(y)
-h(more)g(than)h(this)g(amoun)n(t)f(at)427 3972 y(an)n(y)e(p)r(oin)n(t)h
-(whic)n(h)f(is)h(tested,)g(then)g(no)f(\014t)h(co)r(e\016cien)n(ts)g
-(will)f(b)r(e)h(returned.)259 4105 y Fc(FIT\()33 b Fj(\003)e
-Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427 4205
-y Fk(An)39 b(arra)n(y)d(in)i(whic)n(h)g(to)g(return)f(the)i
-(co-e\016cien)n(ts)e(of)h(the)g(linear)g(appro)n(ximation)e(to)i(the)g
-(sp)r(eci\014ed)427 4304 y(transformation.)33 b(This)19
-b(arra)n(y)e(should)i(ha)n(v)n(e)f(at)h(least)g Ft(")p
-Fk(\()g(Nin)h(+)f(1)g(\))g Fj(\003)g Fk(Nout)p Ft(")p
-Fk(,)i(elemen)n(ts.)34 b(The)19 b(\014rst)g(Nout)427
-4404 y(elemen)n(ts)32 b(hold)g(the)g(constan)n(t)f(o\013sets)g(for)h
-(the)g(transformation)e(outputs.)50 b(The)32 b(remaining)f(elemen)n(ts)
-427 4504 y(hold)f(the)h(gradien)n(ts.)43 b(So)30 b(if)h(the)g(Mapping)f
-(has)f(2)h(inputs)h(and)f(3)g(outputs)g(the)h(linear)e(appro)n
-(ximation)427 4603 y(to)f(the)g(forw)n(ard)e(transformation)g(is:)427
-4720 y(X)p Ft(_)p Fk(out)i(=)f(\014t\(1\))h(+)f(\014t\(4\))p
-Fj(\003)p Fk(X)p Ft(_)p Fk(in)h(+)f(\014t\(5\))p Fj(\003)p
-Fk(Y)p Ft(_)p Fk(in)427 4836 y(Y)p Ft(_)p Fk(out)h(=)f(\014t\(2\))h(+)f
-(\014t\(6\))p Fj(\003)p Fk(X)p Ft(_)p Fk(in)h(+)f(\014t\(7\))p
-Fj(\003)p Fk(Y)p Ft(_)p Fk(in)427 4953 y(Z)p Ft(_)p Fk(out)g(=)g
-(\014t\(3\))i(+)e(\014t\(8\))p Fj(\003)p Fk(X)p Ft(_)p
-Fk(in)h(+)f(\014t\(9\))p Fj(\003)p Fk(Y)p Ft(_)p Fk(in)259
-5086 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5186 y Fk(The)c(global)e(status.)0 5348
-y Fc(Returned)32 b(V)-8 b(alue:)259 5486 y(AST)p Ft(_)p
-Fc(LINEARAPPR)m(O)m(X)33 b(=)f(LOGICAL)427 5585 y Fk(If)26
-b(the)g(forw)n(ard)e(transformation)g(is)h(su\016cien)n(tly)h(linear,)f
-(.TR)n(UE)g(is)h(returned.)36 b(Otherwise)24 b(.F)-9
-b(ALSE.)26 b(is)427 5685 y(returned)h(and)h(the)g(\014t)g(co-e\016cien)
-n(ts)e(are)h(set)h(to)f(AST)p Ft(__)p Fk(BAD.)p eop end
-%%Page: 256 266
-TeXDict begin 256 265 bop 0 52 a FG(256)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Notes:)340
-629 y Fj(\017)45 b Fk(This)31 b(function)g(\014ts)g(the)g(Mapping's)g
-(forw)n(ard)e(transformation.)44 b(T)-7 b(o)31 b(\014t)g(the)g(in)n(v)n
-(erse)e(transformation,)427 728 y(the)f(Mapping)f(should)h(b)r(e)g(in)n
-(v)n(erted)f(using)g(AST)p Ft(_)p Fk(INVER)-7 b(T)28
-b(b)r(efore)f(in)n(v)n(oking)f(this)i(function.)340 856
-y Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)32 b(of)f(.F)-9
-b(ALSE.)32 b(will)g(b)r(e)g(returned)f(if)h(this)g(function)g(is)g(in)n
-(v)n(ok)n(ed)e(with)i(the)g(global)e(error)g(status)427
-956 y(set,)e(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1145 3780 12 v 0 1275 a FA(AST)p Fe(_)p FA(LUTMAP)512
-b Fd(Create)37 b(a)i(LutMap)514 b FA(AST)p Fe(_)p FA(LUTMAP)0
-1454 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(LutMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-1576 y(A)i(LutMap)g(is)g(a)f(sp)r(ecialised)h(form)f(of)h(Mapping)f
-(whic)n(h)h(transforms)f(1-dimensional)f(co)r(ordinates)g(b)n(y)i
-(using)227 1675 y(linear)d(in)n(terp)r(olation)g(in)h(a)g(lo)r(okup)f
-(table.)37 b(Eac)n(h)25 b(input)j(co)r(ordinate)e(v)-5
-b(alue)26 b(is)h(\014rst)g(scaled)f(to)g(giv)n(e)g(the)i(index)227
-1775 y(of)e(an)g(en)n(try)f(in)i(the)f(table)g(b)n(y)g(subtracting)f(a)
-h(starting)f(v)-5 b(alue)26 b(\(the)h(input)f(co)r(ordinate)f(corresp)r
-(onding)f(to)i(the)227 1875 y(\014rst)31 b(table)g(en)n(try\))f(and)h
-(dividing)g(b)n(y)f(an)h(incremen)n(t)f(\(the)i(di\013erence)f(in)g
-(input)g(co)r(ordinate)f(v)-5 b(alue)31 b(b)r(et)n(w)n(een)227
-1974 y(adjacen)n(t)c(table)h(en)n(tries\).)227 2096 y(The)j(resulting)g
-(index)g(will)g(usually)g(con)n(tain)f(a)h(fractional)f(part,)i(so)e
-(the)i(output)f(co)r(ordinate)f(v)-5 b(alue)31 b(is)g(then)227
-2196 y(generated)f(b)n(y)g(in)n(terp)r(olating)f(linearly)h(b)r(et)n(w)
-n(een)g(the)h(appropriate)d(en)n(tries)i(in)h(the)f(table.)46
-b(If)31 b(the)f(index)h(lies)227 2296 y(outside)h(the)h(range)e(of)h
-(the)h(table,)g(linear)e(extrap)r(olation)g(is)h(used)h(based)e(on)h
-(the)h(t)n(w)n(o)e(nearest)h(en)n(tries)f(\(i.e.)227
-2395 y(the)d(t)n(w)n(o)f(en)n(tries)g(at)g(the)h(start)f(or)g(end)h(of)
-g(the)g(table,)f(as)g(appropriate\).)227 2517 y(If)e(the)g(lo)r(okup)e
-(table)i(en)n(tries)e(increase)g(or)h(decrease)f(monotonically)-7
-b(,)23 b(then)i(the)g(in)n(v)n(erse)e(transformation)f(ma)n(y)227
-2617 y(also)27 b(b)r(e)h(p)r(erformed.)0 2761 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_LUTMAP\()c(NLUT,)j(LUT,)g(START,)
-f(INC,)h(OPTIONS,)e(STATUS)h(\))0 2905 y Fc(Argumen)m(ts:)259
-3037 y(NLUT)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 3136
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g(lo)r(okup)f
-(table.)37 b(This)27 b(v)-5 b(alue)28 b(m)n(ust)f(b)r(e)h(at)g(least)f
-(2.)259 3264 y Fc(LUT\()33 b(NLUT)g(\))f(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 3364 y Fk(An)d(arra)n(y)e(con)n(taining)g(the)i(lo)r
-(okup)f(table)h(en)n(tries.)259 3492 y Fc(ST)-8 b(AR)g(T)33
-b(=)f(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3591 y Fk(The)d(input)g(co)
-r(ordinate)f(v)-5 b(alue)27 b(whic)n(h)h(corresp)r(onds)d(to)j(the)g
-(\014rst)f(lo)r(okup)g(table)h(en)n(try)-7 b(.)259 3719
-y Fc(INC)32 b(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-3819 y Fk(The)24 b(lo)r(okup)g(table)f(spacing)g(\(the)i(incremen)n(t)f
-(in)g(input)g(co)r(ordinate)f(v)-5 b(alue)24 b(b)r(et)n(w)n(een)g
-(successiv)n(e)e(lo)r(okup)427 3918 y(table)28 b(en)n(tries\).)36
-b(This)28 b(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(p)r(ositiv)n(e)f(or)g
-(negativ)n(e,)g(but)h(m)n(ust)g(not)f(b)r(e)h(zero.)259
-4046 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4146 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 4245 y(used)27
-b(for)g(initialising)g(the)g(new)g(LutMap.)37 b(The)27
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 4345 y(routine.)259 4473 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4572 y Fk(The)c(global)e(status.)0 4729 y Fc(Returned)32
-b(V)-8 b(alue:)259 4860 y(AST)p Ft(_)p Fc(LUTMAP)34 b(=)e(INTEGER)427
-4960 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(LutMap.)0
-5117 y Fc(Notes:)340 5394 y Fj(\017)45 b Fk(If)38 b(the)f(en)n(tries)f
-(in)h(the)h(lo)r(okup)e(table)h(either)g(increase)e(or)h(decrease)g
-(monotonically)-7 b(,)38 b(then)f(the)h(new)427 5494
-y(LutMap's)25 b(T)-7 b(ranIn)n(v)n(erse)23 b(attribute)j(will)f(ha)n(v)
-n(e)f(a)h(v)-5 b(alue)25 b(of)g(one,)g(indicating)g(that)h(the)g(in)n
-(v)n(erse)d(transfor-)427 5593 y(mation)j(can)g(b)r(e)h(p)r(erformed.)
-36 b(Otherwise,)25 b(it)i(will)g(ha)n(v)n(e)e(a)g(v)-5
-b(alue)27 b(of)f(zero,)f(so)h(that)g(an)n(y)g(attempt)h(to)f(use)427
-5693 y(the)i(in)n(v)n(erse)e(transformation)g(will)i(result)f(in)h(an)g
-(error.)p eop end
-%%Page: 257 267
-TeXDict begin 257 266 bop 3643 52 a FG(257)340 351 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-451 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)-2 615 y Fc(Status)33
-b(Handling)n(:)227 761 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 861 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-960 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 1162 3780
-12 v 0 1292 a FA(AST)p Fe(_)p FA(MAPBO)l(X)1213 1293
-y Fd(Find)39 b(a)f(b)s(ounding)g(b)s(o)m(x)h(for)e(a)1664
-1407 y(Mapping)2833 1292 y FA(AST)p Fe(_)p FA(MAPBO)l(X)0
-1598 y Fc(Description:)44 b Fk(This)26 b(routine)g(allo)n(ws)e(y)n(ou)h
-(to)h(\014nd)g(the)g Ft(")p Fk(b)r(ounding)g(b)r(o)n(x)p
-Ft(")f Fk(whic)n(h)g(just)i(encloses)e(another)g(b)r(o)n(x)g(after)227
-1697 y(it)38 b(has)e(b)r(een)i(transformed)e(b)n(y)h(a)g(Mapping)f
-(\(using)h(either)g(its)h(forw)n(ard)d(or)h(in)n(v)n(erse)g
-(transformation\).)64 b(A)227 1797 y(t)n(ypical)27 b(use)h(migh)n(t)f
-(b)r(e)h(to)g(calculate)f(the)h(size)f(of)h(an)f(image)g(after)g(b)r
-(eing)h(transformed)e(b)n(y)h(a)h(Mapping.)227 1923 y(The)h(routine)g
-(w)n(orks)f(on)h(one)f(dimension)h(at)g(a)g(time.)42
-b(When)30 b(supplied)f(with)h(the)g(lo)n(w)n(er)d(and)i(upp)r(er)g(b)r
-(ounds)227 2022 y(of)39 b(a)f(rectangular)e(region)h(\(b)r(o)n(x\))i
-(of)f(input)i(co)r(ordinate)d(space,)k(it)d(\014nds)h(the)g(lo)n(w)n
-(est)e(and)i(highest)f(v)-5 b(alues)227 2122 y(tak)n(en)28
-b(b)n(y)g(a)g(nominated)g(output)g(co)r(ordinate)f(within)i(that)g
-(region.)37 b(It)29 b(also)e(returns)g(the)i(input)g(co)r(ordinates)227
-2221 y(where)c(these)g(b)r(ounding)g(v)-5 b(alues)24
-b(are)g(attained.)36 b(It)25 b(should)g(b)r(e)g(used)g(rep)r(eatedly)g
-(to)f(obtain)h(the)g(exten)n(t)g(of)g(the)227 2321 y(b)r(ounding)j(b)r
-(o)n(x)f(in)h(more)f(than)g(one)h(dimension.)0 2473 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPBOX\()d(THIS,)i
-(LBND_IN,)g(UBND_IN,)f(FORWARD,)g(COORD_OUT,)g(LBND_OUT,)f(UBND_OUT,)
-227 2572 y(XL,)k(XU,)f(STATUS)f(\))0 2724 y Fc(Argumen)m(ts:)259
-2863 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2962
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259 3096
-y Fc(LBND)p Ft(_)p Fc(IN\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 3196 y Fk(An)24 b(arra)n(y)e(with)i(one)f(elemen)n(t)
-h(for)g(eac)n(h)e(Mapping)i(input)g(co)r(ordinate.)35
-b(This)24 b(should)f(con)n(tain)g(the)h(lo)n(w)n(er)427
-3295 y(b)r(ound)k(of)g(the)g(input)g(b)r(o)n(x)f(in)h(eac)n(h)f(input)h
-(dimension.)259 3429 y Fc(UBND)p Ft(_)p Fc(IN\()k Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 3529
-y Fk(An)23 b(arra)n(y)d(with)i(one)g(elemen)n(t)h(for)e(eac)n(h)h
-(Mapping)f(input)i(co)r(ordinate.)34 b(This)22 b(should)g(con)n(tain)g
-(the)g(upp)r(er)427 3629 y(b)r(ound)28 b(of)g(the)g(input)g(b)r(o)n(x)f
-(in)h(eac)n(h)f(input)h(dimension.)427 3745 y(Note)22
-b(that)g(it)g(is)f(p)r(ermissible)g(for)g(the)h(upp)r(er)g(b)r(ound)g
-(to)f(b)r(e)h(less)f(than)h(the)g(corresp)r(onding)d(lo)n(w)n(er)h(b)r
-(ound,)427 3845 y(as)27 b(the)h(v)-5 b(alues)27 b(will)h(simply)g(b)r
-(e)g(sw)n(app)r(ed)f(b)r(efore)g(use.)259 3979 y Fc(F)m(OR)-11
-b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427 4079 y
-Fk(If)25 b(this)f(v)-5 b(alue)25 b(is)f(.TR)n(UE.,)g(then)h(the)g
-(Mapping's)e(forw)n(ard)g(transformation)f(will)j(b)r(e)f(used)h(to)f
-(transform)427 4178 y(the)k(input)h(b)r(o)n(x.)36 b(Otherwise,)27
-b(its)h(in)n(v)n(erse)e(transformation)g(will)i(b)r(e)g(used.)427
-4295 y(\(If)35 b(the)g(in)n(v)n(erse)e(transformation)g(is)h(selected,)
-i(then)f(references)f(to)g Ft(")p Fk(input)p Ft(")g Fk(and)h
-Ft(")p Fk(output)p Ft(")f Fk(co)r(ordi-)427 4395 y(nates)d(in)g(this)g
-(description)g(should)g(b)r(e)g(transp)r(osed.)46 b(F)-7
-b(or)31 b(example,)g(the)g(size)g(of)g(the)g(LBND)p Ft(_)p
-Fk(IN)h(and)427 4494 y(UBND)p Ft(_)p Fk(IN)24 b(arra)n(ys)d(should)j
-(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates,)f(as)
-f(giv)n(en)h(b)n(y)g(the)h(Mapping's)427 4594 y(Nout)31
-b(attribute.)44 b(Similarly)-7 b(,)30 b(the)g(COORD)p
-Ft(_)p Fk(OUT)f(argumen)n(t,)h(b)r(elo)n(w,)g(should)g(nominate)g(one)f
-(of)h(the)427 4693 y(Mapping's)d(input)i(co)r(ordinates.\))259
-4827 y Fc(COORD)p Ft(_)p Fc(OUT)i(=)h(INTEGER)g(\(Giv)m(en\))427
-4927 y Fk(The)26 b(index)f(of)h(the)f(output)h(co)r(ordinate)f(for)g
-(whic)n(h)g(the)h(lo)n(w)n(er)e(and)h(upp)r(er)g(b)r(ounds)h(are)e
-(required.)36 b(This)427 5027 y(v)-5 b(alue)27 b(should)f(b)r(e)i(at)e
-(least)h(one,)f(and)h(no)f(larger)f(than)i(the)g(n)n(um)n(b)r(er)g(of)f
-(Mapping)h(output)g(co)r(ordinates.)259 5161 y Fc(LBND)p
-Ft(_)p Fc(OUT)32 b(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427
-5260 y Fk(The)k(lo)n(w)n(est)e(v)-5 b(alue)35 b(tak)n(en)f(b)n(y)g(the)
-h(nominated)f(output)h(co)r(ordinate)f(within)h(the)g(sp)r(eci\014ed)f
-(region)g(of)427 5360 y(input)29 b(co)r(ordinate)d(space.)259
-5494 y Fc(UBND)p Ft(_)p Fc(OUT)32 b(=)g(DOUBLE)h(PRECISION)e
-(\(Returned\))427 5593 y Fk(The)h(highest)g(v)-5 b(alue)31
-b(tak)n(en)g(b)n(y)h(the)g(nominated)f(output)h(co)r(ordinate)f(within)
-h(the)g(sp)r(eci\014ed)g(region)f(of)427 5693 y(input)e(co)r(ordinate)d
-(space.)p eop end
-%%Page: 258 268
-TeXDict begin 258 267 bop 0 52 a FG(258)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(XL\()i
-Fj(\003)e Fc(\))h(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427
-451 y Fk(An)j(arra)n(y)c(with)k(one)e(elemen)n(t)h(for)f(eac)n(h)h
-(Mapping)f(input)i(co)r(ordinate.)54 b(This)34 b(will)g(return)g(the)g
-(co)r(or-)427 551 y(dinates)e(of)g(an)g(input)h(p)r(oin)n(t)g
-(\(although)e(not)i(necessarily)d(a)i(unique)g(one\))g(for)g(whic)n(h)g
-(the)h(nominated)427 650 y(output)28 b(co)r(ordinate)f(attains)g(the)h
-(lo)n(w)n(er)e(b)r(ound)i(v)-5 b(alue)27 b(returned)h(in)g(LBND)p
-Ft(_)p Fk(OUT.)259 794 y Fc(XU\()33 b Fj(\003)e Fc(\))h(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 894 y Fk(An)j(arra)n(y)c(with)k(one)e
-(elemen)n(t)h(for)f(eac)n(h)h(Mapping)f(input)i(co)r(ordinate.)54
-b(This)34 b(will)g(return)g(the)g(co)r(or-)427 993 y(dinates)e(of)g(an)
-g(input)h(p)r(oin)n(t)g(\(although)e(not)i(necessarily)d(a)i(unique)g
-(one\))g(for)g(whic)n(h)g(the)h(nominated)427 1093 y(output)28
-b(co)r(ordinate)f(attains)g(the)h(upp)r(er)g(b)r(ound)g(v)-5
-b(alue)27 b(returned)g(in)h(UBND)p Ft(_)p Fk(OUT.)259
-1237 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1336 y Fk(The)c(global)e(status.)0 1520
-y Fc(Notes:)340 1825 y Fj(\017)45 b Fk(An)n(y)20 b(input)g(p)r(oin)n
-(ts)g(whic)n(h)f(are)g(transformed)f(b)n(y)h(the)h(Mapping)f(to)h(giv)n
-(e)e(output)j(co)r(ordinates)d(con)n(taining)427 1924
-y(the)j(v)-5 b(alue)20 b(AST)p Ft(__)p Fk(BAD)g(are)f(regarded)g(as)g
-(in)n(v)-5 b(alid)20 b(and)g(are)f(ignored.)34 b(They)20
-b(will)g(mak)n(e)f(no)h(con)n(tribution)427 2024 y(to)h(determining)g
-(the)g(output)h(b)r(ounds,)g(ev)n(en)f(although)f(the)h(nominated)g
-(output)h(co)r(ordinate)d(migh)n(t)i(still)427 2124 y(ha)n(v)n(e)27
-b(a)g(v)-5 b(alid)28 b(v)-5 b(alue)27 b(at)g(suc)n(h)h(p)r(oin)n(ts.)
-340 2268 y Fj(\017)45 b Fk(An)36 b(error)d(will)i(o)r(ccur)g(if)g(the)h
-(required)e(output)h(b)r(ounds)g(cannot)g(b)r(e)h(found.)59
-b(T)n(ypically)-7 b(,)36 b(this)g(migh)n(t)427 2367 y(happ)r(en)27
-b(if)h(all)e(the)h(input)h(p)r(oin)n(ts)f(whic)n(h)f(the)i(routine)e
-(considers)g(turn)g(out)h(to)g(b)r(e)g(in)n(v)-5 b(alid)27
-b(\(see)g(ab)r(o)n(v)n(e\).)427 2467 y(The)36 b(n)n(um)n(b)r(er)g(of)g
-(p)r(oin)n(ts)g(considered)f(b)r(efore)g(generating)g(suc)n(h)h(an)f
-(error)f(is)i(quite)g(large,)h(so)e(this)i(is)427 2566
-y(unlik)n(ely)30 b(to)g(o)r(ccur)f(b)n(y)g(acciden)n(t)h(unless)f(v)-5
-b(alid)30 b(p)r(oin)n(ts)g(are)f(restricted)g(to)h(a)f(v)n(ery)g(small)
-h(subset)f(of)h(the)427 2666 y(input)f(co)r(ordinate)d(space.)340
-2810 y Fj(\017)45 b Fk(The)37 b(v)-5 b(alues)37 b(returned)f(via)g
-(LBND)p Ft(_)p Fk(OUT,)h(UBND)p Ft(_)p Fk(OUT,)g(XL)g(and)g(XU)h(will)f
-(b)r(e)g(set)g(to)f(the)i(v)-5 b(alue)427 2909 y(AST)p
-Ft(__)p Fk(BAD)31 b(if)h(this)f(routine)g(should)g(fail)g(for)f(an)n(y)
-h(reason.)45 b(Their)31 b(initial)g(v)-5 b(alues)31 b(on)g(en)n(try)f
-(will)i(not)427 3009 y(b)r(e)c(altered)f(if)h(the)g(routine)g(is)f(in)n
-(v)n(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)29 b(set)e(to)h(an)f(error)f(v)-5
-b(alue.)p 0 3230 3780 12 v 0 3361 a FA(AST)p Fe(_)p FA(MAPGET0)p
-Fb(<)p FA(X)p Fb(>)1580 3362 y Fd(Get)39 b(a)f(scalar)1571
-3462 y(v)-7 b(alue)39 b(from)e(a)1672 3561 y(KeyMap)2489
-3361 y FA(AST)p Fe(_)p FA(MAPGET0)p Fb(<)p FA(X)p Fb(>)0
-3772 y Fc(Description:)44 b Fk(This)25 b(is)g(a)f(set)h(of)g(functions)
-g(for)f(retrieving)g(a)g(scalar)f(v)-5 b(alue)25 b(from)g(a)f(KeyMap.)
-35 b(Y)-7 b(ou)25 b(should)g(replace)227 3872 y Fm(<)p
-Fk(X)p Fm(>)f Fk(in)g(the)g(generic)f(function)h(name)g(AST)p
-Ft(_)p Fk(MAPGET0)p Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)g(appropriate)e
-(1-c)n(haracter)f(t)n(yp)r(e)j(co)r(de)227 3971 y(\(see)j(the)g
-Ft(")p Fk(Data)e(T)n(yp)r(e)i(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)f(appropriate)f(to)h(eac)n(h)g(supp)r(orted)g
-(data)g(t)n(yp)r(e\).)227 4071 y(The)33 b(stored)f(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)g(to)g(the)i(data)e(t)n(yp)r(e)h
-(indiced)g(b)n(y)g Fm(<)p Fk(X)p Fm(>)f Fk(b)r(efore)g(b)r(eing)h
-(returned)g(\(an)g(error)227 4171 y(is)c(rep)r(orted)g(if)h(it)f(is)h
-(not)f(p)r(ossible)g(to)g(con)n(v)n(ert)f(the)h(stored)g(v)-5
-b(alue)29 b(to)g(the)h(requested)e(data)h(t)n(yp)r(e\).)42
-b(Note,)30 b(the)227 4270 y(v)n(ersion)20 b(of)h(this)g(function)g
-(whic)n(h)g(returns)g(c)n(haracter)d(strings,)k(AST)p
-Ft(_)p Fk(MAPGET0C,)e(has)g(an)h(extra)f(parameter)227
-4370 y(in)28 b(whic)n(h)g(is)f(returned)g(the)h(n)n(um)n(b)r(er)g(of)f
-(c)n(haracters)e(written)j(in)n(to)g(the)g(supplied)g(CHARA)n(CTER)f(v)
--5 b(ariable.)0 4541 y Fc(In)m(v)m(o)s(cation:)123 b
-Ft(RESULT)41 b(=)i(AST_MAPGET0)p Fm(<)p Ft(X)p Fm(>)p
-Ft(\()37 b(THIS,)42 b(KEY,)g(VALUE,)f(STATUS)g(\))227
-4677 y(RESULT)g(=)j(AST_MAPGET0C\()38 b(THIS,)j(KEY,)h(VALUE,)f(L,)i
-(STATUS)e(\))0 4848 y Fc(Argumen)m(ts:)259 5007 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5106 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5250 y Fc(KEY)k(=)g(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5350 y Fk(The)c(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)259 5494 y Fc(V)-11 b(ALUE)33
-b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Returned\))427
-5593 y Fk(The)i(requested)e(v)-5 b(alue.)54 b(If)34 b(the)g(requested)f
-(k)n(ey)f(is)i(not)f(found,)i(then)f(the)g(con)n(ten)n(ts)e(of)i(the)f
-(bu\013er)h(on)427 5693 y(en)n(try)27 b(to)h(this)g(function)g(will)g
-(b)r(e)g(unc)n(hanged)e(on)i(exit.)p eop end
-%%Page: 259 269
-TeXDict begin 259 268 bop 3643 52 a FG(259)259 351 y
-Fc(L)32 b(=)g(INTEGER)g(\(Returned\))427 451 y Fk(This)37
-b(parameter)f(is)h(only)g(presen)n(t)f(in)i(the)f(in)n(terface)g(for)f
-(the)i(AST)p Ft(_)p Fk(MAPGET0C)e(function.)66 b(It)38
-b(is)427 551 y(returned)27 b(holding)h(the)g(n)n(um)n(b)r(er)f(of)h(c)n
-(haracters)d(written)j(in)n(to)f(the)h(CHARA)n(CTER)g(v)-5
-b(ariable)26 b(supplied)427 650 y(for)h(parameter)f(V)-9
-b(ALUE.)259 782 y Fc(ST)h(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 882 y Fk(The)c(global)e(status.)0 1043
-y Fc(Returned)32 b(V)-8 b(alue:)259 1179 y(AST)p Ft(_)p
-Fc(MAPGET0)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)g(LOGICAL)427
-1278 y Fk(A)h(\015ag)e(whic)n(h)h(is)g(set)g(to)g(.TR)n(UE.)f(if)i(the)
-f(requested)g(k)n(ey)f(name)h(w)n(as)f(found,)i(and)f(is)g(set)g(to)g
-(.F)-9 b(ALSE.)427 1378 y(otherwise.)0 1539 y Fc(Notes:)340
-1821 y Fj(\017)45 b Fk(No)21 b(error)f(is)h(rep)r(orted)f(if)i(the)g
-(requested)f(k)n(ey)f(cannot)h(b)r(e)h(found)f(in)h(the)g(giv)n(en)e
-(KeyMap,)i(but)g(a)f(.F)-9 b(ALSE.)427 1921 y(v)k(alue)25
-b(will)g(b)r(e)g(returned)f(as)h(the)g(function)g(v)-5
-b(alue.)36 b(The)25 b(supplied)g(bu\013er)g(will)g(b)r(e)g(returned)f
-(unc)n(hanged.)340 2053 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g(case)g
-(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e(signi\014can)n
-(t.)340 2185 y Fj(\017)45 b Fk(If)28 b(the)g(stored)f(v)-5
-b(alue)28 b(is)f(a)g(v)n(ector)f(v)-5 b(alue,)28 b(then)g(the)g
-(\014rst)f(v)-5 b(alue)28 b(in)g(the)g(v)n(ector)e(will)i(b)r(e)g
-(returned.)340 2317 y Fj(\017)45 b Fk(If)30 b(the)f(returned)g(v)-5
-b(alue)29 b(is)g(an)g(AST)g(Ob)5 b(ject)29 b(p)r(oin)n(ter,)g(the)h(Ob)
-5 b(ject's)29 b(reference)f(coun)n(t)h(is)g(incremen)n(ted)427
-2416 y(b)n(y)f(this)h(call.)39 b(An)n(y)29 b(subsequen)n(t)f(c)n
-(hanges)f(made)h(to)g(the)h(Ob)5 b(ject)29 b(using)f(the)g(returned)g
-(p)r(oin)n(ter)h(will)f(b)r(e)427 2516 y(re\015ected)35
-b(in)g(an)n(y)f(an)n(y)g(other)g(activ)n(e)g(p)r(oin)n(ters)g(for)g
-(the)h(Ob)5 b(ject.)58 b(The)35 b(returned)f(p)r(oin)n(ter)h(should)f
-(b)r(e)427 2616 y(ann)n(ulled)28 b(using)f(AST)p Ft(_)p
-Fk(ANNUL)h(when)g(it)g(is)g(no)f(longer)f(needed.)-2
-2777 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 2923
-y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d
-(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPGET0)p Fm(<)p Fk(X)p
-Fm(>)227 3023 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-3122 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 3258
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 3390
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 3522 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 3654 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 3786 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 3947 y(F)-7 b(or)41
-b(example,)k(AST)p Ft(_)p Fk(MAPGET0D)c(w)n(ould)g(b)r(e)h(used)f(to)h
-(get)f(a)g(DOUBLE)g(PRECISION)f(v)-5 b(alue,)45 b(while)227
-4047 y(AST)p Ft(_)p Fk(MAPGET0I)27 b(w)n(ould)g(b)r(e)h(used)g(to)f
-(get)g(an)h(INTEGER,)f(etc.)p 0 4245 3780 12 v 0 4376
-a FA(AST)p Fe(_)p FA(MAPGET1)p Fb(<)p FA(X)p Fb(>)1571
-4375 y Fd(Get)38 b(a)h(v)m(ector)1571 4475 y(v)-7 b(alue)39
-b(from)e(a)1672 4574 y(KeyMap)2489 4376 y FA(AST)p Fe(_)p
-FA(MAPGET1)p Fb(<)p FA(X)p Fb(>)0 4762 y Fc(Description:)44
-b Fk(This)24 b(is)g(a)g(set)g(of)g(functions)g(for)f(retrieving)g(a)g
-(v)n(ector)g(v)-5 b(alue)24 b(from)g(a)f(KeyMap.)35 b(Y)-7
-b(ou)24 b(should)g(replace)227 4861 y Fm(<)p Fk(X)p Fm(>)g
-Fk(in)g(the)g(generic)f(function)h(name)g(AST)p Ft(_)p
-Fk(MAPGET1)p Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)g(appropriate)e(1-c)n
-(haracter)f(t)n(yp)r(e)j(co)r(de)227 4961 y(\(see)j(the)g
-Ft(")p Fk(Data)e(T)n(yp)r(e)i(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)f(appropriate)f(to)h(eac)n(h)g(supp)r(orted)g
-(data)g(t)n(yp)r(e\).)227 5061 y(The)i(stored)f(v)-5
-b(alue)27 b(is)h(con)n(v)n(erted)e(to)h(the)h(data)f(t)n(yp)r(e)h
-(indiced)g(b)n(y)f Fm(<)p Fk(X)p Fm(>)g Fk(b)r(efore)h(b)r(eing)f
-(returned)h(\(an)f(error)f(is)227 5160 y(rep)r(orted)h(if)h(it)g(is)g
-(not)f(p)r(ossible)h(to)f(con)n(v)n(ert)f(the)i(stored)f(v)-5
-b(alue)27 b(to)h(the)g(requested)f(data)g(t)n(yp)r(e\).)0
-5309 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPGET1)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)g(MXVAL,)f(NVAL,)g
-(VALUE,)h(STATUS)f(\))0 5458 y Fc(Argumen)m(ts:)259 5593
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)p eop end
-%%Page: 260 270
-TeXDict begin 260 269 bop 0 52 a FG(260)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(KEY)h(=)g(CHARA)m
-(CTER)f Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-451 y Fk(The)c(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)259 576 y Fc(MXV)-11 b(AL)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 676 y Fk(The)d(n)n(um)n(b)r(er)f(of)h
-(elemen)n(ts)f(in)h(the)g(V)-9 b(ALUE)28 b(arra)n(y)-7
-b(.)259 801 y Fc(NV)c(AL)33 b(=)f(INTEGER)f(\(Returned\))427
-900 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(stored)g(in)h(the)g
-(An)n(y)f(un)n(used)h(elemen)n(ts)f(of)h(the)g(arra)n(y)d(are)i(left)h
-(unc)n(hanged.)259 1025 y Fc(V)-11 b(ALUE\()33 b(MXV)-11
-b(AL)33 b(\))f(=)g Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Returned\))
-427 1125 y Fk(The)g(requested)f(v)-5 b(alues.)48 b(If)32
-b(the)g(requested)f(k)n(ey)g(is)g(not)h(found,)h(then)f(the)g(con)n
-(ten)n(ts)f(of)g(the)h(bu\013er)g(on)427 1224 y(en)n(try)27
-b(to)h(this)g(function)g(will)g(b)r(e)g(unc)n(hanged)e(on)i(exit.)259
-1349 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1449 y Fk(The)c(global)e(status.)0 1603
-y Fc(Returned)32 b(V)-8 b(alue:)259 1732 y(AST)p Ft(_)p
-Fc(MAPGET1)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)g(LOGICAL)427
-1831 y Fk(A)h(\015ag)e(whic)n(h)h(is)g(set)g(to)g(.TR)n(UE.)f(if)i(the)
-f(requested)g(k)n(ey)f(name)h(w)n(as)f(found,)i(and)f(is)g(set)g(to)g
-(.F)-9 b(ALSE.)427 1931 y(otherwise.)0 2085 y Fc(Notes:)340
-2360 y Fj(\017)45 b Fk(No)21 b(error)f(is)h(rep)r(orted)f(if)i(the)g
-(requested)f(k)n(ey)f(cannot)h(b)r(e)h(found)f(in)h(the)g(giv)n(en)e
-(KeyMap,)i(but)g(a)f(.F)-9 b(ALSE.)427 2459 y(v)k(alue)26
-b(will)h(b)r(e)g(returned)f(as)f(the)i(function)g(v)-5
-b(alue.)36 b(The)27 b(supplied)f(arra)n(y)e(will)j(b)r(e)f(returned)g
-(unc)n(hanged.)340 2584 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g(case)g
-(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e(signi\014can)n
-(t.)340 2710 y Fj(\017)45 b Fk(If)26 b(the)f(stored)g(v)-5
-b(alue)25 b(is)g(a)g(scalar)e(v)-5 b(alue,)26 b(then)f(the)h(v)-5
-b(alue)25 b(will)h(b)r(e)f(returned)g(in)g(the)h(\014rst)f(elemen)n(t)g
-(of)g(the)427 2809 y(supplied)j(arra)n(y)-7 b(,)26 b(and)h(NV)-9
-b(AL)28 b(will)g(b)r(e)g(returned)f(set)h(to)f(1.)-2
-2963 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 3109
-y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d
-(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPGET1)p Fm(<)p Fk(X)p
-Fm(>)227 3209 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-3309 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 3437
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 3562
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 3687 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 3812 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 3937 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 4091 y(F)-7 b(or)18
-b(example,)i(AST)p Ft(_)p Fk(MAPGET1D)e(w)n(ould)g(b)r(e)g(used)h(to)f
-(get)g(DOUBLE)g(PRECISION)f(v)-5 b(alues,)20 b(while)f(AST)p
-Ft(_)p Fk(MAPGET1I)227 4191 y(w)n(ould)27 b(b)r(e)h(used)g(to)f(get)h
-(INTEGER)f(v)-5 b(alues,)27 b(etc.)p 0 4375 3780 12 v
-0 4505 a FA(AST)p Fe(_)p FA(MAPGETELEM)p Fb(<)p FA(X)p
-Fb(>)183 b Fd(Get)1860 4605 y(a)1798 4704 y(sin-)1818
-4804 y(gle)1802 4918 y(ele-)1761 5018 y(men)m(t)1794
-5118 y(of)38 b(a)1789 5217 y(v)m(ec-)1815 5317 y(tor)1760
-5417 y(v)-7 b(alue)1771 5516 y(from)1860 5616 y(a)1760
-5715 y(KeyMap)2171 4505 y FA(AST)p Fe(_)p FA(MAPGETELEM)p
-Fb(<)p FA(X)p Fb(>)p eop end
-%%Page: 261 271
-TeXDict begin 261 270 bop 3643 52 a FG(261)0 351 y Fc(Description:)44
-b Fk(This)26 b(is)g(a)f(set)h(of)f(functions)h(for)f(retrieving)g(a)g
-(single)g(elemen)n(t)h(of)g(a)f(v)n(ector)f(v)-5 b(alue)26
-b(from)f(a)g(KeyMap.)227 451 y(Y)-7 b(ou)31 b(should)f(replace)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)g(the)h(generic)f(function)h(name)f(AST)p
-Ft(_)p Fk(MAPGETELEM)p Fm(<)p Fk(X)p Fm(>)f Fk(b)n(y)h(an)g(appro-)227
-551 y(priate)23 b(1-c)n(haracter)e(t)n(yp)r(e)j(co)r(de)g(\(see)f(the)i
-Ft(")p Fk(Data)e(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fk(section)h(b)r(elo)n
-(w)f(for)g(the)h(co)r(de)g(appropriate)e(to)227 650 y(eac)n(h)k(supp)r
-(orted)g(data)f(t)n(yp)r(e\).)37 b(The)26 b(stored)g(v)-5
-b(alue)26 b(is)g(con)n(v)n(erted)e(to)i(the)h(data)f(t)n(yp)r(e)g
-(indiced)g(b)n(y)g Fm(<)p Fk(X)p Fm(>)g Fk(b)r(efore)227
-750 y(b)r(eing)e(returned)f(\(an)h(error)e(is)h(rep)r(orted)g(if)h(it)g
-(is)g(not)f(p)r(ossible)h(to)f(con)n(v)n(ert)f(the)i(stored)f(v)-5
-b(alue)24 b(to)f(the)h(requested)227 849 y(data)j(t)n(yp)r(e\).)0
-1032 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPGETELEM)
-p Fm(<)p Ft(X)o Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)g(ELEM,)f(VALUE,)g
-(STATUS)g(\))0 1215 y Fc(Argumen)m(ts:)259 1385 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 1485 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 1634 y Fc(KEY)k(=)g(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-1734 y Fk(The)c(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)259 1884 y Fc(ELEM)k(=)i(INTEGER)e(\(Giv)m
-(en\))427 1983 y Fk(The)i(index)f(of)g(the)h(required)e(v)n(ector)g
-(elemen)n(t,)i(starting)f(at)g(one.)50 b(An)33 b(error)d(will)i(b)r(e)h
-(rep)r(orted)f(if)g(the)427 2083 y(v)-5 b(alue)28 b(is)f(outside)h(the)
-g(range)e(of)h(the)h(v)n(ector.)259 2233 y Fc(V)-11 b(ALUE)33
-b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Returned\))427
-2332 y Fk(The)i(requested)e(v)-5 b(alue.)54 b(If)34 b(the)g(requested)f
-(k)n(ey)f(is)i(not)f(found,)i(then)f(the)g(con)n(ten)n(ts)e(of)i(the)f
-(bu\013er)h(on)427 2432 y(en)n(try)27 b(to)h(this)g(function)g(will)g
-(b)r(e)g(unc)n(hanged)e(on)i(exit.)259 2581 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2681 y Fk(The)c(global)e(status.)0 2876 y Fc(Returned)32
-b(V)-8 b(alue:)259 3046 y(AST)p Ft(_)p Fc(MAPGETELEM)p
-Fm(<)p Fc(X)p Fm(>)31 b Fc(=)h(LOGICAL)427 3146 y Fk(A)h(\015ag)e(whic)
-n(h)h(is)g(set)g(to)g(.TR)n(UE.)f(if)i(the)f(requested)g(k)n(ey)f(name)
-h(w)n(as)f(found,)i(and)f(is)g(set)g(to)g(.F)-9 b(ALSE.)427
-3246 y(otherwise.)0 3441 y Fc(Notes:)340 3757 y Fj(\017)45
-b Fk(No)21 b(error)f(is)h(rep)r(orted)f(if)i(the)g(requested)f(k)n(ey)f
-(cannot)h(b)r(e)h(found)f(in)h(the)g(giv)n(en)e(KeyMap,)i(but)g(a)f(.F)
--9 b(ALSE.)427 3857 y(v)k(alue)28 b(will)g(b)r(e)g(returned)f(as)g(the)
-h(function)g(v)-5 b(alue.)340 4006 y Fj(\017)45 b Fk(Key)27
-b(names)g(are)g(case)g(sensitiv)n(e,)g(and)g(white)h(space)f(is)h
-(considered)e(signi\014can)n(t.)-2 4202 y Fc(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 4348 y Fk(T)-7 b(o)18
-b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d(should)i(replace)e
-Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e(routine)h(name)h(AST)p
-Ft(_)p Fk(MAPGETELEM)p Fm(<)p Fk(X)p Fm(>)227 4447 y
-Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h(so)e
-(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i Fm(<)p
-Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-4547 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 4717
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 4866
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 5016 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 5166 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 5315 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 5511 y(F)-7 b(or)25
-b(example,)h(AST)p Ft(_)p Fk(MAPGETELEMD)e(w)n(ould)h(b)r(e)h(used)f
-(to)g(get)g(a)g(DOUBLE)g(PRECISION)g(v)-5 b(alue,)25
-b(while)227 5610 y(AST)p Ft(_)p Fk(MAPGETELEMI)h(w)n(ould)h(b)r(e)h
-(used)g(to)g(get)f(an)g(INTEGER)g(v)-5 b(alue,)28 b(etc.)p
-eop end
-%%Page: 262 272
-TeXDict begin 262 271 bop 0 52 a FG(262)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(MAPHASKEY)1446 483 y Fd(Chec)m(k)38
-b(if)g(an)h(en)m(try)1469 598 y(with)e(a)i(giv)m(en)f(k)m(ey)1393
-711 y(exists)g(in)h(a)g(KeyMap)2551 482 y FA(AST)p Fe(_)p
-FA(MAPHASKEY)0 891 y Fc(Description:)44 b Fk(This)33
-b(function)h(returns)f(a)f(\015ag)h(indicating)f(if)i(the)g(KeyMap)e
-(con)n(tains)g(an)h(en)n(try)f(with)i(the)f(giv)n(en)227
-990 y(k)n(ey)-7 b(.)0 1135 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MAPHASKEY\()38 b(THIS,)j(KEY,)h(STATUS)f(\))0
-1280 y Fc(Argumen)m(ts:)259 1412 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1511 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-1640 y Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1739 y Fk(The)c(c)n(haracter)d
-(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n(try)-7
-b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)259
-1868 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1967 y Fk(The)c(global)e(status.)0 2125
-y Fc(Returned)32 b(V)-8 b(alue:)259 2257 y(AST)p Ft(_)p
-Fc(MAPHASKEY)32 b(=)g(LOGICAL)427 2356 y Fk(.TR)n(UE.)c(if)g(the)g(k)n
-(ey)f(w)n(as)f(found,)i(and)g(.F)-9 b(ALSE.)27 b(otherwise.)0
-2514 y Fc(Notes:)340 2792 y Fj(\017)45 b Fk(A)39 b(function)g(v)-5
-b(alue)38 b(of)g(.F)-9 b(ALSE.)39 b(will)f(b)r(e)h(returned)f(if)h(an)f
-(error)e(has)i(already)f(o)r(ccurred,)j(or)d(if)i(this)427
-2891 y(function)28 b(should)g(fail)f(for)h(an)n(y)e(reason.)p
-0 3081 V 0 3212 a FA(AST)p Fe(_)p FA(MAPKEY)1158 3213
-y Fd(Get)38 b(the)h(k)m(ey)f(at)g(a)h(giv)m(en)e(index)1389
-3328 y(within)g(the)i(KeyMap)2832 3212 y FA(AST)p Fe(_)p
-FA(MAPKEY)0 3507 y Fc(Description:)44 b Fk(This)31 b(function)g
-(returns)e(a)h(string)g(holding)g(the)h(k)n(ey)f(for)g(the)g(en)n(try)g
-(with)h(the)g(giv)n(en)e(index)i(within)227 3607 y(the)d(KeyMap.)227
-3729 y(This)k(function)f(is)h(in)n(tended)f(primarily)g(as)f(a)h(means)
-g(of)g(iterating)g(round)g(all)g(the)h(elemen)n(ts)f(in)h(a)e(KeyMap.)
-227 3829 y(F)-7 b(or)23 b(this)g(purp)r(ose,)h(the)g(n)n(um)n(b)r(er)f
-(of)g(en)n(tries)g(in)g(the)h(KeyMap)e(should)h(\014rst)g(b)r(e)h
-(found)f(using)g(AST)p Ft(_)p Fk(MAPSIZE)227 3928 y(and)29
-b(this)f(function)i(should)e(then)h(b)r(e)g(called)f(in)h(a)f(lo)r(op,)
-g(with)h(the)g(index)g(v)-5 b(alue)28 b(going)f(from)i(one)f(to)g(the)h
-(size)227 4028 y(of)k(the)f(KeyMap.)51 b(The)32 b(index)g(asso)r
-(ciated)f(with)i(a)f(giv)n(en)g(en)n(try)g(is)g(not,)h(in)g(general,)f
-(related)g(to)g(the)h(order)227 4128 y(in)g(whic)n(h)f(the)h(en)n
-(tries)f(are)f(added)i(to)f(the)h(KeyMap,)g(and)f(ma)n(y)g(c)n(hange)f
-(if)i(other)f(en)n(tries)f(are)h(added)g(to)g(or)227
-4227 y(remo)n(v)n(ed)26 b(from)i(the)g(KeyMap.)0 4372
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPKEY\()c
-(THIS,)j(INDEX,)f(STATUS)g(\))0 4517 y Fc(Argumen)m(ts:)259
-4649 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4749
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259 4877 y
-Fc(INDEX)k(=)g(INTEGER)f(\(Giv)m(en\))427 4977 y Fk(The)c(index)g(in)n
-(to)g(the)g(KeyMap.)36 b(The)27 b(\014rst)g(en)n(try)f(has)g(index)h
-(one,)g(and)g(the)g(last)f(has)h(index)g(SIZE,)f(the)427
-5076 y(v)-5 b(alue)28 b(returned)f(b)n(y)g(the)h(AST)p
-Ft(_)p Fk(MAPSIZE)f(function.)259 5205 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5304
-y Fk(The)c(global)e(status.)0 5462 y Fc(Returned)32 b(V)-8
-b(alue:)259 5593 y(AST)p Ft(_)p Fc(MAPKEY)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h(AST)p Ft(__)p Fc(SZCHR)f(\))427 5693
-y Fk(The)d(k)n(ey)f(v)-5 b(alue.)p eop end
-%%Page: 263 273
-TeXDict begin 263 272 bop 3643 52 a FG(263)0 351 y Fc(Notes:)340
-630 y Fj(\017)45 b Fk(A)25 b(blank)f(string)f(will)i(b)r(e)f(returned)g
-(if)h(this)g(function)f(is)g(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)25 b(set)f(to)g(an)g(error)f(v)-5 b(alue,)427
-730 y(or)27 b(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 922 3780 12 v 0 1053 a FA(AST)p Fe(_)p FA(MAPLENC)1415
-1054 y Fd(Get)38 b(the)h(n)m(um)m(b)s(er)f(of)1259 1153
-y(c)m(haracters)e(in)j(a)f(c)m(haracter)1402 1253 y(en)m(try)g(in)g(a)h
-(KeyMap)2756 1053 y FA(AST)p Fe(_)p FA(MAPLENC)0 1435
-y Fc(Description:)44 b Fk(This)26 b(function)g(returns)f(the)h(minim)n
-(um)g(length)f(whic)n(h)h(a)f(c)n(haracter)e(v)-5 b(ariable)25
-b(whic)n(h)g(m)n(ust)h(ha)n(v)n(e)e(in)227 1534 y(order)i(to)i(b)r(e)g
-(able)f(to)g(store)g(a)g(sp)r(eci\014ed)g(en)n(try)g(in)h(the)g
-(supplied)g(KeyMap.)36 b(If)27 b(the)h(named)g(en)n(try)f(is)g(a)g(v)n
-(ector)227 1634 y(en)n(try)-7 b(,)27 b(then)i(the)f(returned)f(v)-5
-b(alue)27 b(is)h(the)g(length)f(of)h(the)g(longest)f(elemen)n(t)g(of)h
-(the)g(v)n(ector)e(v)-5 b(alue.)0 1780 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MAPLENC\()c(THIS,)i(KEY,)h(STATUS)f(\))0
-1926 y Fc(Argumen)m(ts:)259 2058 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2158 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-2287 y Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2387 y Fk(The)c(c)n(haracter)d
-(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n(try)-7
-b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)259
-2516 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2616 y Fk(The)c(global)e(status.)0 2774
-y Fc(Returned)32 b(V)-8 b(alue:)259 2907 y(AST)p Ft(_)p
-Fc(MAPLENC)32 b(=)g(INTEGER)427 3007 y Fk(The)j(length)g(\(i.e.)59
-b(n)n(um)n(b)r(er)35 b(of)g(c)n(haracters\))e(of)h(the)i(longest)e
-(formatted)g(v)-5 b(alue)35 b(asso)r(ciated)f(with)h(the)427
-3106 y(named)28 b(en)n(try)-7 b(.)0 3265 y Fc(Notes:)340
-3544 y Fj(\017)45 b Fk(A)21 b(function)g(v)-5 b(alue)21
-b(of)f(zero)f(will)i(b)r(e)g(returned)f(without)h(error)e(if)i(the)g
-(named)f(en)n(try)g(cannot)g(b)r(e)h(formatted)427 3643
-y(as)27 b(a)g(c)n(haracter)f(string.)340 3773 y Fj(\017)45
-b Fk(A)29 b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h(b)r(e)h
-(returned)e(if)i(an)f(error)e(has)i(already)e(o)r(ccurred,)i(or)f(if)i
-(this)f(function)427 3872 y(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 4064 V 0 4195 a FA(AST)p Fe(_)p FA(MAPLENGTH)1519 4196
-y Fd(Get)38 b(the)h(v)m(ector)1430 4296 y(length)e(of)i(an)f(en)m(try)
-1555 4409 y(in)g(a)h(KeyMap)2549 4195 y FA(AST)p Fe(_)p
-FA(MAPLENGTH)0 4595 y Fc(Description:)44 b Fk(This)23
-b(function)f(returns)g(the)g(v)n(ector)f(length)h(of)h(a)e(named)h(en)n
-(try)g(in)g(a)g(KeyMap,)h(\(that)f(is,)i(ho)n(w)d(man)n(y)227
-4695 y(v)-5 b(alues)27 b(are)g(asso)r(ciated)f(with)i(the)g(en)n
-(try\).)0 4841 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_MAPLENGTH\()38 b(THIS,)j(KEY,)h(STATUS)f(\))0
-4987 y Fc(Argumen)m(ts:)259 5119 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5219 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-5348 y Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5448 y Fk(The)c(c)n(haracter)d
-(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n(try)-7
-b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 264 274
-TeXDict begin 264 273 bop 0 52 a FG(264)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 484 y(AST)p Ft(_)p Fc(MAPLENGTH)32 b(=)g(INTEGER)427
-584 y Fk(The)f(length)h(of)f(the)g(en)n(try)-7 b(.)47
-b(One)31 b(for)f(a)h(scalar,)g(greater)e(than)i(one)g(for)f(a)h(v)n
-(ector.)46 b(A)32 b(v)-5 b(alue)31 b(of)g(zero)f(is)427
-683 y(returned)d(if)i(the)f(KeyMap)e(do)r(es)h(not)h(con)n(tain)f(the)h
-(named)f(en)n(try)-7 b(.)0 842 y Fc(Notes:)340 1121 y
-Fj(\017)45 b Fk(A)29 b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h
-(b)r(e)h(returned)e(if)i(an)f(error)e(has)i(already)e(o)r(ccurred,)i
-(or)f(if)i(this)f(function)427 1220 y(should)g(fail)f(for)g(an)n(y)g
-(reason.)p 0 1412 3780 12 v 0 1543 a FA(AST)p Fe(_)p
-FA(MAPPUT0)p Fb(<)p FA(X)p Fb(>)1566 1544 y Fd(Add)39
-b(a)f(scalar)1638 1644 y(v)-7 b(alue)38 b(to)g(a)1672
-1743 y(KeyMap)2487 1543 y FA(AST)p Fe(_)p FA(MAPPUT0)p
-Fb(<)p FA(X)p Fb(>)0 1925 y Fc(Description:)44 b Fk(This)30
-b(is)g(a)g(set)g(of)g(routine)g(for)f(adding)h(scalar)f(v)-5
-b(alues)29 b(to)h(a)g(KeyMap.)43 b(Y)-7 b(ou)31 b(should)e(use)h(a)g
-(routine)227 2024 y(whic)n(h)j(matc)n(hes)g(the)g(data)g(t)n(yp)r(e)g
-(of)g(the)h(data)e(y)n(ou)h(wish)g(to)g(add)f(to)h(the)h(KeyMap)e(b)n
-(y)h(replacing)f Fm(<)p Fk(X)p Fm(>)g Fk(in)227 2124
-y(the)d(generic)d(routine)i(name)g(AST)p Ft(_)p Fk(MAPPUT0)p
-Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)f(appropriate)g(1-c)n(haracter)e(t)n
-(yp)r(e)j(co)r(de)f(\(see)h(the)227 2224 y Ft(")p Fk(Data)f(T)n(yp)r(e)
-h(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n(w)g(for)g(the)h(co)r(de)f
-(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r(e\).)0
-2370 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPPUT0)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)f(VALUE,)h(COMMENT,)e
-(STATUS)h(\))0 2515 y Fc(Argumen)m(ts:)259 2648 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2748 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap)e(in)i(whic)n(h)g(to)f(store)g(the)h(supplied)g(v)
--5 b(alue.)259 2877 y Fc(KEY)32 b(=)g(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2977 y Fk(A)27 b(c)n(haracter)e(string)h(to)h(b)r(e)g(stored)f(with)i
-(the)f(v)-5 b(alue,)27 b(whic)n(h)g(can)f(later)g(b)r(e)i(used)e(to)h
-(iden)n(tify)g(the)h(v)-5 b(alue.)427 3076 y(T)e(railing)27
-b(spaces)f(are)h(ignored.)259 3206 y Fc(V)-11 b(ALUE)33
-b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Giv)m(en\))427
-3305 y Fk(The)d(v)-5 b(alue)28 b(to)g(b)r(e)h(stored.)38
-b(The)28 b(data)g(t)n(yp)r(e)h(of)f(this)h(v)-5 b(alue)28
-b(should)g(matc)n(h)g(the)h(1-c)n(haracter)c(t)n(yp)r(e)k(co)r(de)427
-3405 y(app)r(ended)23 b(to)g(the)g(routine)f(name)g(\(e.g.)35
-b(if)24 b(y)n(ou)d(are)h(using)g(AST)p Ft(_)p Fk(MAPPUT0A,)g(the)h(t)n
-(yp)r(e)g(of)g(this)g(v)-5 b(alue)427 3505 y(should)28
-b(b)r(e)g Ft(")p Fk(in)n(teger)e(p)r(oin)n(ter)h(for)g(an)g(AstOb)5
-b(ject)p Ft(")p Fk(\).)259 3634 y Fc(COMMENT)31 b(=)h(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3733 y Fk(A)c(commen)n(t)g(string)f(to)g(b)r(e)h(stored)f(with)h(the)g
-(v)-5 b(alue.)259 3863 y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 3962 y Fk(The)c(global)e(status.)0
-4121 y Fc(Notes:)340 4400 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g
-(case)g(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e
-(signi\014can)n(t.)340 4529 y Fj(\017)45 b Fk(If)27 b(the)f(supplied)h
-(k)n(ey)e(is)h(already)f(in)h(use)g(in)h(the)f(KeyMap,)g(the)g(new)h(v)
--5 b(alue)26 b(will)g(replace)f(the)i(old)f(v)-5 b(alue.)340
-4658 y Fj(\017)45 b Fk(If)36 b(the)g(stored)e(v)-5 b(alue)35
-b(is)g(an)g(AST)h(Ob)5 b(ject)35 b(p)r(oin)n(ter,)i(the)e(Ob)5
-b(ject's)35 b(reference)g(coun)n(t)g(is)g(incremen)n(ted)427
-4758 y(b)n(y)h(this)f(call.)61 b(An)n(y)35 b(subsequen)n(t)h(c)n
-(hanges)e(made)h(to)h(the)g(Ob)5 b(ject)35 b(using)g(the)h(returned)f
-(p)r(oin)n(ter)g(will)427 4857 y(b)r(e)i(re\015ected)g(in)g(an)n(y)e
-(an)n(y)h(other)g(activ)n(e)g(p)r(oin)n(ters)g(for)g(the)h(Ob)5
-b(ject,)39 b(including)e(an)n(y)f(obtained)g(later)427
-4957 y(using)29 b(AST)p Ft(_)p Fk(MAPGET0A.)f(The)h(reference)f(coun)n
-(t)h(for)f(the)h(Ob)5 b(ject)29 b(will)g(b)r(e)h(decremen)n(ted)e(when)
-h(the)427 5057 y(KeyMap)e(is)g(destro)n(y)n(ed,)g(or)f(the)i(en)n(try)f
-(is)h(remo)n(v)n(ed)e(or)g(o)n(v)n(er-written)g(with)i(a)f(di\013eren)n
-(t)h(p)r(oin)n(ter.)-2 5215 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)
-227 5361 y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n
-(ou)d(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPPUT0)p Fm(<)p Fk(X)p
-Fm(>)227 5461 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-5560 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5693
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)p eop end
-%%Page: 265 275
-TeXDict begin 265 274 bop 3643 52 a FG(265)340 351 y
-Fj(\017)45 b Fk(R:)28 b(REAL)340 469 y Fj(\017)45 b Fk(I:)28
-b(INTEGER)340 586 y Fj(\017)45 b Fk(C:)28 b(CHARA)n(CTER)340
-704 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f(iden)n(tify)i(an)e
-(AstOb)5 b(ject)227 851 y(F)-7 b(or)36 b(example,)j(AST)p
-Ft(_)p Fk(MAPPUT0D)d(w)n(ould)g(b)r(e)h(used)f(to)g(store)g(a)g(DOUBLE)
-g(PRECISION)g(v)-5 b(alue,)38 b(while)227 950 y(AST)p
-Ft(_)p Fk(MAPPUT0I)27 b(w)n(ould)g(b)r(e)h(used)g(to)f(store)g(an)g
-(INTEGER,)g(etc.)p 0 1119 3780 12 v 0 1250 a FA(AST)p
-Fe(_)p FA(MAPPUT1)p Fb(<)p FA(X)p Fb(>)1556 1251 y Fd(Add)39
-b(a)g(v)m(ector)1638 1350 y(v)-7 b(alue)38 b(to)g(a)1672
-1450 y(KeyMap)2487 1250 y FA(AST)p Fe(_)p FA(MAPPUT1)p
-Fb(<)p FA(X)p Fb(>)0 1608 y Fc(Description:)44 b Fk(This)30
-b(is)f(a)g(set)g(of)h(routine)f(for)g(adding)f(v)n(ector)h(v)-5
-b(alues)29 b(to)g(a)g(KeyMap.)41 b(Y)-7 b(ou)30 b(should)f(use)g(a)g
-(routine)227 1708 y(whic)n(h)k(matc)n(hes)g(the)g(data)g(t)n(yp)r(e)g
-(of)g(the)h(data)e(y)n(ou)h(wish)g(to)g(add)f(to)h(the)h(KeyMap)e(b)n
-(y)h(replacing)f Fm(<)p Fk(X)p Fm(>)g Fk(in)227 1807
-y(the)d(generic)d(routine)i(name)g(AST)p Ft(_)p Fk(MAPPUT1)p
-Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)f(appropriate)g(1-c)n(haracter)e(t)n
-(yp)r(e)j(co)r(de)f(\(see)h(the)227 1907 y Ft(")p Fk(Data)f(T)n(yp)r(e)
-h(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n(w)g(for)g(the)h(co)r(de)f
-(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r(e\).)0
-2041 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPPUT1)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(KEY,)f(SIZE,)h(VALUE,)f
-(COMMENT,)f(STATUS)h(\))0 2175 y Fc(Argumen)m(ts:)259
-2297 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2396
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap)e(in)i(whic)n(h)g(to)f(store)
-g(the)h(supplied)g(v)-5 b(alues.)259 2514 y Fc(KEY)32
-b(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 2613 y Fk(A)24 b(c)n(haracter)c(string)j(to)g(b)r(e)g(stored)f
-(with)h(the)h(v)-5 b(alues,)23 b(whic)n(h)g(can)g(later)f(b)r(e)h(used)
-g(to)g(iden)n(tify)h(the)f(v)-5 b(alues.)427 2713 y(T)e(railing)27
-b(spaces)f(are)h(ignored.)259 2831 y Fc(SIZE)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2930 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)h
-(the)g(supplied)g(arra)n(y)d(of)j(v)-5 b(alues.)259 3048
-y Fc(V)-11 b(ALUE\()33 b Fj(\003)f Fc(\))g(=)g Fm(<)p
-Fc(X)p Fm(>)p Fc(t)m(yp)s(e)f(\(Giv)m(en\))427 3147 y
-Fk(The)g(arra)n(y)c(of)k(v)-5 b(alues)29 b(to)h(b)r(e)h(stored.)44
-b(The)30 b(data)g(t)n(yp)r(e)g(of)g(this)h(v)-5 b(alue)30
-b(should)g(matc)n(h)g(the)g(1-c)n(haracter)427 3247 y(t)n(yp)r(e)f(co)r
-(de)g(app)r(ended)g(to)g(the)h(routine)e(name)h(\(e.g.)41
-b(if)29 b(y)n(ou)f(are)g(using)h(AST)p Ft(_)p Fk(MAPPUT1A,)f(the)h(t)n
-(yp)r(e)427 3347 y(of)f(this)g(v)-5 b(alue)27 b(should)h(b)r(e)g
-Ft(")p Fk(in)n(teger)e(p)r(oin)n(ter)h(for)g(an)g(AstOb)5
-b(ject\))p Ft(")p Fk(.)259 3464 y Fc(COMMENT)31 b(=)h(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3564 y Fk(A)c(commen)n(t)g(string)f(to)g(b)r(e)h(stored)f(with)h(the)g
-(v)-5 b(alues.)259 3682 y Fc(ST)d(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 3781 y Fk(The)c(global)e(status.)0
-3928 y Fc(Notes:)340 4195 y Fj(\017)45 b Fk(If)23 b(the)g(supplied)g(k)
-n(ey)f(is)g(already)f(in)i(use)f(in)h(the)g(KeyMap,)f(the)h(new)g(v)-5
-b(alues)22 b(will)g(replace)g(the)h(old)f(v)-5 b(alues.)340
-4313 y Fj(\017)45 b Fk(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g
-(and)g(white)h(space)f(is)h(considered)e(signi\014can)n(t.)-2
-4459 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 4605
-y Fk(T)-7 b(o)18 b(select)h(the)f(appropriate)f(routine,)j(y)n(ou)d
-(should)i(replace)e Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(generic)e
-(routine)h(name)h(AST)p Ft(_)p Fk(MAPPUT1)p Fm(<)p Fk(X)p
-Fm(>)227 4705 y Fk(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i
-(co)r(de,)h(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(X)p Fm(>)p Fk(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-4805 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 4926
-y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340 5043
-y Fj(\017)45 b Fk(R:)28 b(REAL)340 5161 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 5278 y Fj(\017)45 b Fk(C:)28
-b(CHARA)n(CTER)340 5396 y Fj(\017)45 b Fk(A:)28 b(INTEGER)f(used)h(to)f
-(iden)n(tify)i(an)e(AstOb)5 b(ject)227 5543 y(F)-7 b(or)40
-b(example,)j(AST)p Ft(_)p Fk(MAPPUT1D)d(w)n(ould)g(b)r(e)h(used)g(to)f
-(store)g(DOUBLE)g(PRECISION)f(v)-5 b(alues,)43 b(while)227
-5642 y(AST)p Ft(_)p Fk(MAPPUT1I)27 b(w)n(ould)g(b)r(e)h(used)g(to)f
-(store)g(INTEGER,)g(etc.)p eop end
-%%Page: 266 276
-TeXDict begin 266 275 bop 0 52 a FG(266)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(MAPREGION)1381 483 y Fd(T)-10
-b(ransform)37 b(a)h(Region)1442 596 y(in)m(to)f(a)i(new)f(F)-10
-b(rame)1555 696 y(using)38 b(a)g(giv)m(en)1664 809 y(Mapping)2577
-482 y FA(AST)p Fe(_)p FA(MAPREGION)0 1000 y Fc(Description:)44
-b Fk(This)34 b(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(new)h
-(Region)f(whic)n(h)g(corresp)r(onds)f(to)h(supplied)h(Region)227
-1099 y(describ)r(ed)i(b)n(y)g(some)g(other)f(sp)r(eci\014ed)i(co)r
-(ordinate)e(system.)62 b(A)37 b(Mapping)e(is)h(supplied)h(whic)n(h)f
-(transforms)227 1199 y(p)r(ositions)30 b(b)r(et)n(w)n(een)g(the)g(old)g
-(and)g(new)g(co)r(ordinate)e(systems.)44 b(The)30 b(new)g(Region)f(ma)n
-(y)h(not)g(b)r(e)g(of)g(the)g(same)227 1298 y(class)d(as)g(the)h
-(original)e(region.)0 1449 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MAPREGION\()38 b(THIS,)j(MAP,)h(FRAME,)f
-(STATUS)g(\))0 1601 y Fc(Argumen)m(ts:)259 1739 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 1838 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)259 1972 y Fc(MAP)k(=)g(INTEGER)f(\(Giv)m(en\))427
-2072 y Fk(P)n(oin)n(ter)25 b(to)i(a)f(Mapping)g(whic)n(h)h(transforms)e
-(p)r(ositions)h(from)h(the)g(co)r(ordinate)e(system)h(represen)n(ted)g
-(b)n(y)427 2171 y(the)32 b(supplied)g(Region)e(to)i(the)f(co)r
-(ordinate)f(system)i(sp)r(eci\014ed)f(b)n(y)g(FRAME.)h(The)f(supplied)h
-(Mapping)427 2271 y(should)k(de\014ne)f(b)r(oth)h(forw)n(ard)e(and)i
-(in)n(v)n(erse)e(transformations,)h(and)h(these)f(transformations)f
-(should)427 2370 y(form)20 b(a)g(gen)n(uine)g(in)n(v)n(erse)f(pair.)33
-b(That)21 b(is,)g(transforming)e(a)h(p)r(osition)g(using)g(the)h(forw)n
-(ard)d(transformation)427 2470 y(and)29 b(then)g(using)f(the)h(in)n(v)n
-(erse)e(transformation)g(should)h(pro)r(duce)h(the)g(original)e(input)i
-(p)r(osition.)40 b(Some)427 2570 y(Mapping)31 b(classes)e(\(suc)n(h)i
-(as)f(P)n(ermMap,)g(MathMap,)i(SphMap\))f(can)g(result)f(in)h(Mappings)
-f(for)h(whic)n(h)427 2669 y(this)d(is)g(not)f(true.)259
-2803 y Fc(FRAME)k(=)h(INTEGER)g(\(Giv)m(en\))427 2903
-y Fk(P)n(oin)n(ter)26 b(to)i(a)f(F)-7 b(rame)27 b(describing)g(the)h
-(co)r(ordinate)e(system)h(in)h(whic)n(h)g(the)g(new)f(Region)g(is)h
-(required.)259 3036 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 3136 y Fk(The)c(global)e(status.)0
-3299 y Fc(Returned)32 b(V)-8 b(alue:)259 3437 y(AST)p
-Ft(_)p Fc(MAPREGION)31 b(=)h(INTEGER)427 3537 y Fk(A)26
-b(p)r(oin)n(ter)e(to)h(a)f(new)h(Region.)36 b(This)24
-b(Region)h(will)g(represen)n(t)e(the)j(area)d(within)j(the)f(co)r
-(ordinate)f(system)427 3637 y(sp)r(eci\014ed)k(b)n(y)f(FRAME)h(whic)n
-(h)g(corresp)r(onds)e(to)h(the)h(supplied)g(Region.)0
-3800 y Fc(Notes:)340 4084 y Fj(\017)45 b Fk(The)24 b(uncertain)n(t)n(y)
-f(asso)r(ciated)f(with)i(the)h(supplied)f(Region)f(is)g(mo)r(di\014ed)h
-(using)g(the)g(supplied)g(Mapping.)340 4218 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4318
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4519 V 0 4649 a FA(AST)p
-Fe(_)p FA(MAPREMO)l(VE)1419 4650 y Fd(Remo)m(v)m(ed)38
-b(a)g(named)1569 4750 y(en)m(try)g(from)g(a)1672 4863
-y(KeyMap)2524 4649 y FA(AST)p Fe(_)p FA(MAPREMO)l(VE)0
-5054 y Fc(Description:)44 b Fk(This)35 b(routine)g(remo)n(v)n(es)e(a)i
-(named)g(en)n(try)g(from)f(a)h(KeyMap.)59 b(It)35 b(returns)f(without)i
-(action)f(if)g(the)227 5153 y(KeyMap)27 b(do)r(es)g(not)h(con)n(tain)f
-(the)h(sp)r(eci\014ed)g(k)n(ey)-7 b(.)0 5304 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_MAPREMOVE\()37 b(THIS,)42 b(KEY,)g(STATUS)f(\))0
-5455 y Fc(Argumen)m(ts:)259 5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5693 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)p
-eop end
-%%Page: 267 277
-TeXDict begin 267 276 bop 3643 52 a FG(267)259 351 y
-Fc(KEY)32 b(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 451 y Fk(The)c(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)259 588
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 688 y Fk(The)c(global)e(status.)p 0 895 3780 12 v
-0 1026 a FA(AST)p Fe(_)p FA(MAPSIZE)1110 1027 y Fd(Get)39
-b(the)f(n)m(um)m(b)s(er)g(of)h(en)m(tries)e(in)i(a)1672
-1127 y(KeyMap)2832 1026 y FA(AST)p Fe(_)p FA(MAPSIZE)0
-1324 y Fc(Description:)44 b Fk(This)28 b(function)g(returns)f(the)h(n)n
-(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(a)f(KeyMap.)0 1482
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPSIZE\()c
-(THIS,)i(STATUS)g(\))0 1640 y Fc(Argumen)m(ts:)259 1785
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1885 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 2022 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2121
-y Fk(The)c(global)e(status.)0 2292 y Fc(Returned)32 b(V)-8
-b(alue:)259 2437 y(AST)p Ft(_)p Fc(MAPSIZE)33 b(=)f(INTEGER)427
-2536 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g(KeyMap.)
-0 2707 y Fc(Notes:)340 2998 y Fj(\017)45 b Fk(A)29 b(function)g(v)-5
-b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)i(an)f(error)e
-(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f(function)427
-3097 y(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 3305
-V 0 3436 a FA(AST)p Fe(_)p FA(MAPSPLIT)1272 3437 y Fd(Split)38
-b(a)g(Mapping)g(up)h(in)m(to)1402 3551 y(parallel)d(comp)s(onen)m(t)
-1641 3665 y(Mappings)2736 3436 y FA(AST)p Fe(_)p FA(MAPSPLIT)0
-3862 y Fc(Description:)44 b Fk(This)36 b(routine)f(creates)f(a)h(new)h
-(Mapping)f(whic)n(h)g(connects)g(sp)r(eci\014ed)h(inputs)g(within)g(a)f
-(supplied)227 3962 y(Mapping)41 b(to)g(the)g(corresp)r(onding)f
-(outputs)h(of)g(the)h(supplied)f(Mapping.)77 b(This)41
-b(is)g(only)g(p)r(ossible)g(if)g(the)227 4061 y(sp)r(eci\014ed)c
-(inputs)h(corresp)r(ond)d(to)i(some)g(subset)g(of)f(the)i(Mapping)e
-(outputs.)66 b(That)37 b(is,)i(there)e(m)n(ust)g(exist)227
-4161 y(a)f(subset)f(of)h(the)g(Mapping)g(outputs)g(for)f(whic)n(h)h
-(eac)n(h)f(output)h(dep)r(ends)g(only)g(on)f(the)h(selected)g(Mapping)
-227 4261 y(inputs,)29 b(and)f(not)g(on)f(an)n(y)h(of)g(the)g(inputs)g
-(whic)n(h)g(ha)n(v)n(e)f(not)h(b)r(een)g(selected.)38
-b(Also,)28 b(an)n(y)f(output)i(whic)n(h)f(is)g(not)227
-4360 y(in)j(this)g(subset)f(m)n(ust)h(not)g(dep)r(end)g(on)f(an)n(y)g
-(of)g(the)h(selected)g(inputs.)46 b(If)31 b(these)g(conditions)f(are)f
-(not)i(met)g(b)n(y)227 4460 y(the)d(supplied)g(Mapping,)f(then)i(an)e
-(AST)p Ft(__)p Fk(NULL)g(Mapping)h(p)r(oin)n(ter)f(is)g(returned.)0
-4618 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MAPSPLIT\()c
-(THIS,)j(NIN,)h(IN,)h(OUT,)f(MAP,)g(STATUS)f(\))0 4776
-y Fc(Argumen)m(ts:)259 4921 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5020 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h(split.)
-259 5157 y Fc(NIN)k(=)g(INTEGER)f(\(Giv)m(en\))427 5257
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(inputs)g(to)f(pic)n(k)h(from)f(THIS.)
-259 5394 y Fc(IN\()32 b(NIN)f(\))h(=)g(INTEGER)g(\(Giv)m(en\))427
-5494 y Fk(An)39 b(arra)n(y)c(holding)j(the)g(indices)g(within)h(the)f
-(supplied)h(Mapping)e(of)h(the)h(inputs)f(whic)n(h)g(are)f(to)h(b)r(e)
-427 5593 y(pic)n(k)n(ed)31 b(from)h(the)g(Mapping.)49
-b(If)32 b Ft(")p Fk(Nin)p Ft(")f Fk(is)h(the)g(n)n(um)n(b)r(er)g(of)f
-(inputs)i(of)e(the)i(supplied)f(Mapping,)g(then)427 5693
-y(eac)n(h)27 b(elemen)n(t)h(should)f(ha)n(v)n(e)g(a)g(v)-5
-b(alue)27 b(in)h(the)g(range)e(1)h(to)h(Nin.)p eop end
-%%Page: 268 278
-TeXDict begin 268 277 bop 0 52 a FG(268)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(OUT\()i
-Fj(\003)e Fc(\))h(=)g(INTEGER)f(\(Returned\))427 451
-y Fk(An)j(arra)n(y)d(in)i(whic)n(h)g(to)g(return)g(the)g(indices)h(of)f
-(the)g(outputs)h(of)f(the)g(supplied)h(Mapping)f(whic)n(h)g(are)427
-551 y(fed)f(b)n(y)g(the)f(pic)n(k)n(ed)g(inputs.)50 b(A)31
-b(v)-5 b(alue)32 b(of)f(one)g(is)h(used)f(to)h(refer)f(to)g(the)h
-(\014rst)f(Mapping)g(output.)50 b(The)427 650 y(supplied)30
-b(arra)n(y)d(should)i(ha)n(v)n(e)f(a)h(length)h(at)f(least)g(equal)g
-(to)g(the)h(n)n(um)n(b)r(er)f(of)g(outputs)h(in)g(the)f(supplied)427
-750 y(Mapping.)36 b(The)27 b(n)n(um)n(b)r(er)e(of)i(v)-5
-b(alues)25 b(stored)h(in)g(the)h(arra)n(y)c(on)j(exit)h(will)f(equal)g
-(the)g(n)n(um)n(b)r(er)g(of)g(outputs)427 849 y(in)j(the)g(returned)f
-(Mapping.)39 b(The)28 b(i'th)h(elemen)n(t)f(in)h(the)g(returned)f(arra)
-n(y)e(holds)i(the)h(index)f(within)h(the)427 949 y(supplied)f(Mapping)f
-(whic)n(h)h(corresp)r(onds)e(to)h(the)h(i'th)g(output)g(of)g(the)g
-(returned)f(Mapping.)259 1079 y Fc(MAP)32 b(=)g(INTEGER)f(\(Returned\))
-427 1178 y Fk(The)d(returned)f(Mapping.)36 b(This)28
-b(Mapping)f(will)h(ha)n(v)n(e)e(NIN)i(inputs)h(\(the)f(n)n(um)n(b)r(er)
-f(of)h(outputs)f(ma)n(y)g(b)r(e)427 1278 y(di\013eren)n(t)f(to)f
-(NIN\).)h(AST)p Ft(__)p Fk(NULL)f(is)h(returned)f(if)g(the)h(supplied)g
-(Mapping)f(has)g(no)g(subset)g(of)g(outputs)427 1378
-y(whic)n(h)j(dep)r(end)g(only)f(on)h(the)g(selected)f(inputs.)0
-1536 y Fc(Notes:)340 1816 y Fj(\017)45 b Fk(If)31 b(this)g(routine)f
-(is)h(in)n(v)n(ok)n(ed)e(with)i(the)g(global)e(error)g(status)h(set,)i
-(or)d(if)i(it)g(should)g(fail)f(for)g(an)n(y)g(reason,)427
-1915 y(then)e(AST)p Ft(__)p Fk(NULL)g(will)g(b)r(e)g(returned)f(for)g
-(MAP)-7 b(.)p 0 2109 3780 12 v 0 2239 a FA(AST)p Fe(_)p
-FA(MAPTYPE)1281 2240 y Fd(Get)39 b(the)f(data)g(t)m(yp)s(e)g(of)h(an)
-1402 2353 y(en)m(try)f(in)g(a)h(KeyMap)2752 2239 y FA(AST)p
-Fe(_)p FA(MAPTYPE)0 2536 y Fc(Description:)44 b Fk(This)34
-b(function)g(returns)f(a)g(v)-5 b(alue)33 b(indicating)h(the)g(data)f
-(t)n(yp)r(e)g(of)h(a)f(named)h(en)n(try)f(in)g(a)g(KeyMap.)227
-2636 y(This)28 b(is)f(the)h(data)f(t)n(yp)r(e)h(whic)n(h)g(w)n(as)e
-(used)i(when)g(the)g(en)n(try)f(w)n(as)f(added)i(to)f(the)h(KeyMap.)0
-2782 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_MAPTYPE\()c
-(THIS,)i(KEY,)h(STATUS)f(\))0 2928 y Fc(Argumen)m(ts:)259
-3062 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3161
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259 3291 y
-Fc(KEY)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 3391 y Fk(The)c(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)259 3520 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 3620
-y Fk(The)c(global)e(status.)0 3779 y Fc(Returned)32 b(V)-8
-b(alue:)259 3912 y(AST)p Ft(_)p Fc(MAPTYPE)33 b(=)f(INTEGER)427
-4012 y Fk(One)c(of)f(AST)p Ft(__)p Fk(INTTYPE)g(\(for)g(in)n(teger\),)h
-(AST)p Ft(__)p Fk(DOUBLETYPE)e(\(for)h(double)h(precision)e(\015oating)
-427 4111 y(p)r(oin)n(t\),)i(AST)p Ft(__)p Fk(FLO)n(A)-7
-b(TTYPE)25 b(\(for)i(single)f(precision)g(\015oating)g(p)r(oin)n(t\),)i
-(AST)p Ft(__)p Fk(STRINGTYPE)e(\(for)427 4211 y(c)n(haracter)i
-(string\))h(or)f(AST)p Ft(__)p Fk(OBJECTTYPE)f(\(for)i(AST)h(Ob)5
-b(ject)29 b(p)r(oin)n(ter\).)42 b(AST)p Ft(__)p Fk(BADTYPE)29
-b(is)427 4311 y(returned)e(if)i(the)f(supplied)f(k)n(ey)g(is)h(not)f
-(found)h(in)g(the)g(KeyMap.)0 4470 y Fc(Notes:)340 4749
-y Fj(\017)45 b Fk(A)26 b(function)g(v)-5 b(alue)26 b(of)f(AST)p
-Ft(__)p Fk(BADTYPE)g(will)h(b)r(e)g(returned)f(if)h(an)f(error)f(has)h
-(already)f(o)r(ccurred,)g(or)h(if)427 4849 y(this)j(function)g(should)g
-(fail)f(for)g(an)n(y)g(reason.)p 0 5042 V 0 5172 a FA(AST)p
-Fe(_)p FA(MARK)1058 5173 y Fd(Dra)m(w)38 b(a)h(set)f(of)h(mark)m(ers)e
-(for)g(a)i(Plot)3013 5172 y FA(AST)p Fe(_)p FA(MARK)0
-5347 y Fc(Description:)44 b Fk(This)33 b(routine)g(dra)n(ws)e(a)i(set)f
-(of)h(mark)n(ers)e(\(sym)n(b)r(ols\))i(at)g(p)r(ositions)f(sp)r
-(eci\014ed)h(in)g(the)g(ph)n(ysical)f(co-)227 5447 y(ordinate)c(system)
-h(of)g(a)f(Plot.)40 b(The)29 b(p)r(ositions)f(are)g(transformed)g(in)n
-(to)g(graphical)f(co)r(ordinates)h(to)h(determine)227
-5547 y(where)e(the)h(mark)n(ers)e(should)h(app)r(ear)g(within)h(the)g
-(plotting)g(area.)0 5693 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_MARK\()e(THIS,)h(NMARK,)g(NCOORD,)g(INDIM,)g(IN,)h
-(TYPE,)g(STATUS)f(\))p eop end
-%%Page: 269 279
-TeXDict begin 269 278 bop 3643 52 a FG(269)0 351 y Fc(Argumen)m(ts:)259
-486 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 586 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 718 y Fc(NMARK)j(=)h
-(INTEGER)f(\(Giv)m(en\))427 817 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(mark)
-n(ers)d(to)j(dra)n(w.)36 b(This)27 b(ma)n(y)g(b)r(e)h(zero,)f(in)g
-(whic)n(h)h(case)f(nothing)g(will)h(b)r(e)g(dra)n(wn.)259
-949 y Fc(NCOORD)j(=)h(INTEGER)f(\(Giv)m(en\))427 1048
-y Fk(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r(ordinates)e(b)r(eing)i
-(supplied)g(for)f(eac)n(h)g(mark)f(\(i.e.)65 b(the)37
-b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427 1148 y(curren)n(t)27
-b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n(en)f(b)n(y)i(its)f
-(Naxes)g(attribute\).)259 1280 y Fc(INDIM)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 1379 y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g
-(along)f(the)i(\014rst)f(dimension)g(of)g(the)h(IN)f(arra)n(y)e(\(whic)
-n(h)i(con)n(tains)g(the)g(mark)n(er)427 1479 y(co)r(ordinates\).)37
-b(This)28 b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)28 b(can)f(b)r(e)i(correctly)d(lo)r(cated)i
-(if)427 1579 y(they)g(do)f(not)h(en)n(tirely)f(\014ll)h(this)g(arra)n
-(y)-7 b(.)34 b(The)28 b(v)-5 b(alue)28 b(giv)n(en)e(should)i(not)f(b)r
-(e)h(less)f(than)h(NMARK.)259 1710 y Fc(IN\()k(INDIM,)f(NCOORD)g(\))h
-(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 1810 y Fk(A)c(2-dimensional)
-f(arra)n(y)e(giving)i(the)h(ph)n(ysical)f(co)r(ordinates)f(of)i(the)g
-(p)r(oin)n(ts)g(where)f(mark)n(ers)f(are)h(to)g(b)r(e)427
-1909 y(dra)n(wn.)38 b(These)28 b(should)g(b)r(e)h(stored)e(suc)n(h)h
-(that)g(the)h(v)-5 b(alue)28 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-(COORD)g(for)g(input)427 2009 y(mark)f(n)n(um)n(b)r(er)g(MARK)h(is)g
-(found)f(in)h(elemen)n(t)g(IN\(MARK,COORD\).)259 2141
-y Fc(TYPE)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 2240 y
-Fk(A)26 b(v)-5 b(alue)25 b(sp)r(ecifying)h(the)g(t)n(yp)r(e)f(\(e.g.)36
-b(shap)r(e\))26 b(of)f(mark)n(er)f(to)h(b)r(e)h(dra)n(wn.)35
-b(The)26 b(set)f(of)h(v)-5 b(alues)25 b(whic)n(h)g(ma)n(y)427
-2340 y(b)r(e)j(used)g(\(and)g(the)g(shap)r(es)f(that)h(will)f(result\))
-h(is)f(determined)h(b)n(y)g(the)g(underlying)f(graphics)f(system.)259
-2471 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2571 y Fk(The)c(global)e(status.)0 2732
-y Fc(Notes:)340 3013 y Fj(\017)45 b Fk(Mark)n(ers)21
-b(are)g(not)i(dra)n(wn)f(at)g(p)r(ositions)g(whic)n(h)h(ha)n(v)n(e)e
-(an)n(y)h(co)r(ordinate)f(equal)i(to)f(the)h(v)-5 b(alue)23
-b(AST)p Ft(__)p Fk(BAD)427 3113 y(\(or)38 b(where)g(the)g
-(transformation)f(in)n(to)h(graphical)e(co)r(ordinates)h(yields)h(co)r
-(ordinates)f(con)n(taining)g(the)427 3212 y(v)-5 b(alue)28
-b(AST)p Ft(__)p Fk(BAD\).)340 3344 y Fj(\017)45 b Fk(If)28
-b(an)n(y)f(mark)n(er)f(p)r(osition)h(is)h(clipp)r(ed)g(\(see)g(AST)p
-Ft(_)p Fk(CLIP\),)f(then)h(the)g(en)n(tire)f(mark)n(er)f(is)h(not)h
-(dra)n(wn.)340 3475 y Fj(\017)45 b Fk(An)28 b(error)e(results)h(if)h
-(the)g(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h
-(2-dimensional.)340 3607 y Fj(\017)45 b Fk(An)30 b(error)d(also)g
-(results)i(if)g(the)g(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)
-n(t)f(and)h(base)f(F)-7 b(rames)28 b(of)h(the)g(Plot)427
-3707 y(is)f(not)f(de\014ned)h(\(i.e.)38 b(the)28 b(Plot's)e(T)-7
-b(ranIn)n(v)n(erse)26 b(attribute)h(is)h(zero\).)p 0
-3903 3780 12 v 0 4034 a FA(AST)p Fe(_)p FA(MASK)p Fb(<)p
-FA(X)p Fb(>)1280 4035 y Fd(Mask)39 b(a)f(region)f(of)i(a)f(data)1789
-4150 y(grid)2755 4034 y FA(AST)p Fe(_)p FA(MASK)p Fb(<)p
-FA(X)p Fb(>)0 4341 y Fc(Description:)44 b Fk(This)34
-b(is)f(a)g(set)g(of)g(functions)h(for)e(masking)h(out)g(regions)f
-(within)i(gridded)e(data)h(\(e.g.)54 b(an)33 b(image\).)227
-4440 y(The)g(functions)h(mo)r(di\014es)f(a)f(giv)n(en)h(data)f(grid)h
-(b)n(y)f(assigning)g(a)g(sp)r(eci\014ed)i(v)-5 b(alue)33
-b(to)f(all)h(samples)g(whic)n(h)g(are)227 4540 y(inside)28
-b(\(or)f(outside)g(if)h(INSIDE)g(is)g(.F)-9 b(ALSE.\))28
-b(the)g(sp)r(eci\014ed)g(Region.)227 4664 y(Y)-7 b(ou)21
-b(should)g(use)f(a)h(masking)f(function)h(whic)n(h)g(matc)n(hes)f(the)h
-(n)n(umerical)f(t)n(yp)r(e)h(of)g(the)g(data)f(y)n(ou)g(are)g(pro)r
-(cessing)227 4763 y(b)n(y)40 b(replacing)e Fm(<)p Fk(X)p
-Fm(>)h Fk(in)h(the)g(generic)f(function)h(name)f(AST)p
-Ft(_)p Fk(MASK)p Fm(<)p Fk(X)p Fm(>)g Fk(b)n(y)h(an)f(appropriate)f(1-)
-h(or)f(2-)227 4863 y(c)n(haracter)29 b(t)n(yp)r(e)i(co)r(de.)46
-b(F)-7 b(or)30 b(example,)i(if)f(y)n(ou)f(are)g(masking)g(data)g(with)h
-(t)n(yp)r(e)g(REAL,)g(y)n(ou)f(should)h(use)f(the)227
-4963 y(function)35 b(AST)p Ft(_)p Fk(MASKR)f(\(see)g(the)h
-Ft(")p Fk(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fk(section)h(b)r(elo)n
-(w)g(for)f(the)i(co)r(des)e(appropriate)g(to)227 5062
-y(other)27 b(n)n(umerical)g(t)n(yp)r(es\).)0 5210 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_MASK)p Fm(<)p Ft(X)p
-Fm(>)p Ft(\()c(THIS,)i(MAP,)h(INSIDE,)f(NDIM,)g(LBND,)h(UBND,)f(IN,)i
-(VAL,)f(STATUS)227 5310 y(\))0 5458 y Fc(Argumen)m(ts:)259
-5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5693
-y Fk(P)n(oin)n(ter)26 b(to)i(a)f(Region.)p eop end
-%%Page: 270 280
-TeXDict begin 270 279 bop 0 52 a FG(270)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(MAP)h(=)g(INTEGER)f
-(\(Giv)m(en\))427 451 y Fk(P)n(oin)n(ter)f(to)h(a)g(Mapping.)47
-b(The)31 b(forw)n(ard)f(transformation)f(should)i(map)g(p)r(ositions)g
-(in)g(the)h(co)r(ordinate)427 551 y(system)j(of)g(the)h(supplied)f
-(Region)f(in)n(to)h(pixel)g(co)r(ordinates)f(as)h(de\014ned)g(b)n(y)g
-(the)g(LBND)h(and)f(UBND)427 650 y(argumen)n(ts.)g(A)26
-b(v)-5 b(alue)25 b(of)h(AST)p Ft(__)p Fk(NULL)f(can)g(b)r(e)h(supplied)
-g(if)g(the)g(co)r(ordinate)e(system)h(of)g(the)h(supplied)427
-750 y(Region)h(corresp)r(onds)f(to)h(pixel)h(co)r(ordinates.)35
-b(This)28 b(is)f(equiv)-5 b(alen)n(t)28 b(to)f(supplying)h(a)f
-(UnitMap.)427 871 y(The)37 b(n)n(um)n(b)r(er)g(of)g(inputs)g(for)f
-(this)i(Mapping)e(\(as)h(giv)n(en)f(b)n(y)g(its)h(Nin)h(attribute\))f
-(should)g(matc)n(h)f(the)427 970 y(n)n(um)n(b)r(er)28
-b(of)f(axes)g(in)g(the)h(supplied)g(Region)f(\(as)g(giv)n(en)g(b)n(y)g
-(the)h(Naxes)f(attribute)h(of)f(the)h(Region\).)37 b(The)427
-1070 y(n)n(um)n(b)r(er)23 b(of)f(outputs)h(for)f(the)h(Mapping)f(\(as)g
-(giv)n(en)g(b)n(y)h(its)f(Nout)h(attribute\))g(should)g(matc)n(h)f(the)
-h(n)n(um)n(b)r(er)427 1170 y(of)28 b(grid)f(dimensions)g(giv)n(en)g(b)n
-(y)g(the)h(v)-5 b(alue)28 b(of)f(NDIM)i(b)r(elo)n(w.)259
-1312 y Fc(INSIDE)j(=)g(INTEGER)f(\(Giv)m(en\))427 1411
-y Fk(A)24 b(b)r(o)r(olean)e(v)-5 b(alue)23 b(whic)n(h)g(indicates)g
-(whic)n(h)f(pixel)h(are)f(to)h(b)r(e)h(mask)n(ed.)34
-b(If)24 b(.TR)n(UE.)e(is)h(supplied,)h(then)g(all)427
-1511 y(grid)i(pixels)h(with)g(cen)n(tres)f(inside)h(the)g(supplied)g
-(Region)f(are)f(assigned)h(the)h(v)-5 b(alue)26 b(giv)n(en)g(b)n(y)h(V)
--9 b(AL,)27 b(and)427 1611 y(all)k(other)f(pixels)g(are)g(left)i(unc)n
-(hanged.)45 b(If)31 b(.F)-9 b(ALSE.)31 b(is)g(supplied,)h(then)f(all)g
-(grid)f(pixels)g(with)h(cen)n(tres)427 1710 y(not)d(inside)h(the)f
-(supplied)g(Region)g(are)f(assigned)g(the)h(v)-5 b(alue)28
-b(giv)n(en)f(b)n(y)h(V)-9 b(AL,)29 b(and)e(all)h(other)g(pixels)g(are)
-427 1810 y(left)i(unc)n(hanged.)42 b(Note,)30 b(the)g(Negated)f
-(attribute)h(of)g(the)f(Region)g(is)h(used)f(to)h(determine)f(whic)n(h)
-h(pixel)427 1910 y(are)g(inside)h(the)h(Region)e(and)h(whic)n(h)g(are)e
-(outside.)47 b(So)31 b(the)g(inside)g(of)g(a)g(Region)f(whic)n(h)h(has)
-f(not)h(b)r(een)427 2009 y(negated)c(is)h(the)g(same)f(as)g(the)h
-(outside)f(of)h(the)g(corresp)r(onding)d(negated)i(Region.)427
-2130 y(F)-7 b(or)31 b(t)n(yp)r(es)g(of)h(Region)e(suc)n(h)h(as)g(P)n
-(oin)n(tList)g(whic)n(h)g(ha)n(v)n(e)f(zero)g(v)n(olume,)i(pixel)g(cen)
-n(tres)e(will)i(rarely)e(fall)427 2230 y(exactly)25 b(within)h(the)g
-(Region.)36 b(F)-7 b(or)25 b(this)h(reason,)e(the)i(inclusion)f
-(criterion)g(is)g(c)n(hanged)g(for)g(zero-v)n(olume)427
-2329 y(Regions)32 b(so)h(that)g(pixels)g(are)f(included)h(\(or)f
-(excluded\))i(if)f(an)n(y)f(part)h(of)g(the)g(Region)g(passes)e
-(through)427 2429 y(the)f(pixel.)43 b(F)-7 b(or)29 b(a)g(P)n(oin)n
-(tList,)g(this)h(means)g(that)f(pixels)h(are)e(included)i(\(or)f
-(excluded\))h(if)h(they)e(con)n(tain)427 2529 y(at)f(least)f(one)g(of)h
-(the)g(p)r(oin)n(ts)f(listed)h(in)g(the)g(P)n(oin)n(tList.)259
-2671 y Fc(NDIM)k(=)g(INTEGER)f(\(Giv)m(en\))427 2770
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g
-(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f(one.)259
-2913 y Fc(LBND\()32 b(NDIM)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-3012 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)h
-(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g
-(grid)f(along)427 3112 y(eac)n(h)27 b(dimension.)259
-3254 y Fc(UBND\()32 b(NDIM)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-3354 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)f(input)h(grid)f
-(along)427 3453 y(eac)n(h)27 b(dimension.)427 3574 y(Note)i(that)g
-(LBND)g(and)f(UBND)h(together)f(de\014ne)h(the)f(shap)r(e)h(and)f(size)
-g(of)h(the)g(input)g(grid,)f(its)h(exten)n(t)427 3674
-y(along)24 b(a)h(particular)f(\(J'th\))j(dimension)e(b)r(eing)g
-(UBND\(J\)-LBND\(J\)+1.)37 b(They)25 b(also)f(de\014ne)i(the)g(input)
-427 3774 y(grid's)33 b(co)r(ordinate)f(system,)i(eac)n(h)f(pixel)g(ha)n
-(ving)g(unit)h(exten)n(t)f(along)f(eac)n(h)h(dimension)g(with)h(in)n
-(tegral)427 3873 y(co)r(ordinate)27 b(v)-5 b(alues)27
-b(at)g(its)h(cen)n(tre.)259 4015 y Fc(IN\()k Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en)g(and)g
-(Returned\))427 4115 y Fk(An)24 b(arra)n(y)-7 b(,)21
-b(with)j(one)f(elemen)n(t)g(for)f(eac)n(h)g(pixel)i(in)f(the)g(input)h
-(grid,)f(con)n(taining)f(the)i(data)e(to)h(b)r(e)g(mask)n(ed.)427
-4215 y(The)30 b(n)n(umerical)e(t)n(yp)r(e)h(of)h(this)f(arra)n(y)e
-(should)i(matc)n(h)g(the)h(1-)e(or)g(2-c)n(haracter)f(t)n(yp)r(e)i(co)r
-(de)g(app)r(ended)h(to)427 4314 y(the)24 b(function)g(name)f(\(e.g.)35
-b(if)23 b(y)n(ou)g(are)f(using)h(AST)p Ft(_)p Fk(MASKR,)g(the)h(t)n(yp)
-r(e)f(of)g(eac)n(h)g(arra)n(y)e(elemen)n(t)i(should)427
-4414 y(b)r(e)28 b(REAL\).)427 4535 y(The)33 b(storage)f(order)f(of)j
-(data)e(within)i(this)g(arra)n(y)c(should)j(b)r(e)h(suc)n(h)f(that)g
-(the)h(index)f(of)g(the)g(\014rst)g(grid)427 4634 y(dimension)39
-b(v)-5 b(aries)39 b(most)g(rapidly)g(and)g(that)g(of)h(the)f(\014nal)g
-(dimension)h(least)f(rapidly)f(\(i.e.)73 b(normal)427
-4734 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)427
-4855 y(On)h(exit,)h(the)g(samples)e(sp)r(eci\014ed)i(b)n(y)f(INSIDE)g
-(are)g(set)g(to)g(the)h(v)-5 b(alue)27 b(of)g(V)-9 b(AL.)28
-b(All)f(other)g(samples)g(are)427 4955 y(left)i(unc)n(hanged.)259
-5097 y Fc(V)-11 b(AL)33 b(=)f Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)g Fc(\(Giv)m(en\))427 5196 y Fk(This)h(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-5296 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(the)h(mask)n(ed)e(data)h
-(\(see)h(INSIDE\).)259 5438 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 5538 y Fk(The)c(global)e(status.)0
-5718 y Fc(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 271 281
-TeXDict begin 271 280 bop 3643 52 a FG(271)259 351 y
-Fc(AST)p Ft(_)p Fc(MASK)p Fm(<)p Fc(X)p Fm(>)31 b Fc(=)h(INTEGER)427
-451 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(pixels)f(to)h(whic)n(h)f(a)g(v)-5
-b(alue)28 b(of)f(BAD)n(V)-9 b(AL)28 b(has)g(b)r(een)g(assigned.)0
-613 y Fc(Notes:)340 895 y Fj(\017)45 b Fk(A)27 b(v)-5
-b(alue)25 b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g(function)
-h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)f(status)h(set,)h
-(or)427 995 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)-2
-1157 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 1303
-y Fk(T)-7 b(o)26 b(select)g(the)g(appropriate)e(masking)h(function,)i
-(y)n(ou)e(should)h(replace)f Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)g
-(generic)f(function)i(name)227 1403 y(AST)p Ft(_)p Fk(MASK)p
-Fm(<)p Fk(X)p Fm(>)37 b Fk(with)i(a)e(1-)g(or)g(2-c)n(haracter)d(data)k
-(t)n(yp)r(e)f(co)r(de,)k(so)c(as)g(to)g(matc)n(h)h(the)g(n)n(umerical)e
-(t)n(yp)r(e)227 1502 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)27
-b Fk(of)h(the)g(data)f(y)n(ou)g(are)g(pro)r(cessing,)f(as)h(follo)n
-(ws:)340 1639 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-1772 y Fj(\017)45 b Fk(R:)28 b(REAL)340 1905 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 2038 y Fj(\017)45 b Fk(UI:)28
-b(INTEGER)f(\(treated)h(as)f(unsigned\))340 2170 y Fj(\017)45
-b Fk(S:)28 b(INTEGER)p Fj(\003)p Fk(2)e(\(short)h(in)n(teger\))340
-2303 y Fj(\017)45 b Fk(US:)28 b(INTEGER)p Fj(\003)p Fk(2)f(\(short)g
-(in)n(teger,)f(treated)i(as)f(unsigned\))340 2436 y Fj(\017)45
-b Fk(B:)28 b(BYTE)f(\(treated)h(as)e(signed\))340 2569
-y Fj(\017)45 b Fk(UB:)28 b(BYTE)f(\(treated)h(as)f(unsigned\))227
-2731 y(F)-7 b(or)18 b(example,)i(AST)p Ft(_)p Fk(MASKD)f(w)n(ould)f(b)r
-(e)g(used)h(to)f(pro)r(cess)f(DOUBLE)h(PRECISION)g(data,)h(while)g(AST)
-p Ft(_)p Fk(MASKS)227 2831 y(w)n(ould)27 b(b)r(e)h(used)g(to)f(pro)r
-(cess)g(short)g(in)n(teger)f(data)i(\(stored)f(in)g(an)h(INTEGER)p
-Fj(\003)p Fk(2)e(arra)n(y\),)f(etc.)227 2955 y(F)-7 b(or)32
-b(compatibilit)n(y)h(with)g(other)f(Starlink)g(facilities,)i(the)f(co)r
-(des)g(W)g(and)f(UW)h(are)f(pro)n(vided)g(as)g(synon)n(yms)227
-3055 y(for)27 b(S)h(and)g(US)g(resp)r(ectiv)n(ely)e(\(but)j(only)e(in)h
-(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h(AST\).)p
-0 3254 3780 12 v 0 3385 a FA(AST)p Fe(_)p FA(MA)-11 b(TCHAXES)1660
-3386 y Fd(Find)39 b(an)m(y)1405 3501 y(corresp)s(onding)d(axes)1528
-3614 y(in)i(t)m(w)m(o)f(F)-10 b(rames)2568 3385 y FA(AST)p
-Fe(_)p FA(MA)f(TCHAXES)0 3780 y Fc(Description:)44 b
-Fk(This)c(function)h(lo)r(oks)e(for)g(corresp)r(onding)f(axes)h(within)
-i(t)n(w)n(o)e(supplied)h(F)-7 b(rames.)74 b(An)40 b(arra)n(y)e(of)227
-3879 y(in)n(tegers)f(is)i(returned)f(that)g(con)n(tains)g(an)g(elemen)n
-(t)g(for)g(eac)n(h)f(axis)h(in)g(the)h(second)f(supplied)h(F)-7
-b(rame.)68 b(An)227 3979 y(elemen)n(t)36 b(in)h(this)f(arra)n(y)d(will)
-j(b)r(e)h(set)f(to)g(zero)e(if)j(the)f(asso)r(ciated)f(axis)g(within)h
-(the)h(second)e(F)-7 b(rame)36 b(has)f(no)227 4078 y(corresp)r(onding)j
-(axis)h(within)i(the)f(\014rst)g(F)-7 b(rame.)73 b(Otherwise,)43
-b(it)d(will)g(b)r(e)g(set)g(to)g(the)g(index)g(\(a)g(non-zero)227
-4178 y(p)r(ositiv)n(e)27 b(in)n(teger\))g(of)h(the)g(corresp)r(onding)e
-(axis)g(within)j(the)f(\014rst)f(supplied)h(F)-7 b(rame.)0
-4328 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_MATCHAXES\()37
-b(FRM1,)42 b(FRM2,)g(AXES,)f(STATUS)g(\))0 4477 y Fc(Argumen)m(ts:)259
-4614 y(FRM1)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 4713
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(F)-7 b(rame.)259
-4846 y Fc(FRM2)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 4946
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(F)-7 b(rame.)259
-5079 y Fc(AXES)32 b(=)g(INTEGER\()g Fj(\003)f Fc(\))h(\(Returned\))427
-5178 y Fk(An)38 b(in)n(teger)e(arra)n(y)f(in)j(whic)n(h)f(to)g(return)g
-(the)g(indices)g(of)h(the)f(axes)g(\(within)h(the)f(\014rst)g(F)-7
-b(rame\))37 b(that)427 5278 y(corresp)r(ond)23 b(to)h(eac)n(h)g(axis)f
-(within)i(the)g(second)e(F)-7 b(rame.)36 b(Axis)24 b(indices)g(start)g
-(at)g(1.)35 b(A)25 b(v)-5 b(alue)24 b(of)g(zero)f(will)427
-5377 y(b)r(e)28 b(stored)f(in)h(the)g(returned)f(arra)n(y)e(for)j(eac)n
-(h)e(axis)h(in)h(the)g(second)f(F)-7 b(rame)27 b(that)h(has)f(no)h
-(corresp)r(onding)427 5477 y(axis)f(in)h(the)g(\014rst)f(F)-7
-b(rame.)427 5593 y(The)26 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(in)f
-(this)h(arra)n(y)d(m)n(ust)j(b)r(e)g(greater)d(than)j(or)e(equal)h(to)g
-(the)h(n)n(um)n(b)r(er)f(of)h(axes)e(in)427 5693 y(the)k(second)f(F)-7
-b(rame.)p eop end
-%%Page: 272 282
-TeXDict begin 272 281 bop 0 52 a FG(272)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 609 y Fc(Class)31 b(Applicabilit)m
-(y:)259 742 y(F)-8 b(rame)427 841 y Fk(This)28 b(function)g(applies)f
-(to)h(all)f(F)-7 b(rames.)0 999 y Fc(Notes:)340 1278
-y Fj(\017)45 b Fk(Corresp)r(onding)17 b(axes)i(are)f(iden)n(ti\014ed)h
-(b)n(y)g(the)h(fact)f(that)g(a)g(Mapping)g(can)f(b)r(e)i(found)f(b)r
-(et)n(w)n(een)g(them)h(using)427 1378 y(AST)p Ft(_)p
-Fk(FINDFRAME)41 b(or)e(AST)p Ft(_)p Fk(CONVER)-7 b(T.)39
-b(Th)n(us,)j Ft(")p Fk(corresp)r(onding)c(axes)p Ft(")g
-Fk(are)h(not)g(necessarily)427 1477 y(iden)n(tical.)34
-b(F)-7 b(or)19 b(instance,)i(SkyF)-7 b(rame)19 b(axes)g(in)h(t)n(w)n(o)
-f(F)-7 b(rames)19 b(will)h(matc)n(h)f(ev)n(en)g(if)h(they)g(describ)r
-(e)f(di\013eren)n(t)427 1577 y(celestial)27 b(co)r(ordinate)g(systems)p
-0 1768 3780 12 v 0 1899 a FA(AST)p Fe(_)p FA(MA)-11 b(THMAP)1399
-1900 y Fd(Create)37 b(a)i(MathMap)2711 1899 y FA(AST)p
-Fe(_)p FA(MA)-11 b(THMAP)0 2081 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(MathMap)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 2204
-y(A)20 b(MathMap)f(is)g(a)g(Mapping)g(whic)n(h)g(allo)n(ws)f(y)n(ou)h
-(to)g(sp)r(ecify)h(a)f(set)g(of)g(forw)n(ard)f(and/or)f(in)n(v)n(erse)h
-(transformation)227 2303 y(functions)40 b(using)f(arithmetic)g(op)r
-(erations)f(and)h(mathematical)g(functions)h(similar)e(to)h(those)g(a)n
-(v)-5 b(ailable)38 b(in)227 2403 y(F)-7 b(ortran.)60
-b(The)35 b(MathMap)h(in)n(terprets)e(these)i(functions)g(at)f
-(run-time,)j(whenev)n(er)c(its)i(forw)n(ard)d(or)i(in)n(v)n(erse)227
-2503 y(transformation)26 b(is)g(required.)36 b(Because)26
-b(the)h(functions)g(are)f(not)h(compiled)g(in)g(the)h(normal)d(sense)i
-(\(unlik)n(e)g(an)227 2602 y(In)n(traMap\),)32 b(they)g(ma)n(y)f(b)r(e)
-h(used)g(to)f(describ)r(e)g(co)r(ordinate)g(transformations)f(in)i(a)f
-(transp)r(ortable)f(manner.)227 2702 y(A)25 b(MathMap)g(therefore)f
-(pro)n(vides)f(a)i(\015exible)f(w)n(a)n(y)g(of)h(de\014ning)g(new)f(t)n
-(yp)r(es)h(of)g(Mapping)f(whose)g(descriptions)227 2802
-y(ma)n(y)j(b)r(e)h(stored)f(as)g(part)g(of)h(a)f(dataset)g(and)g(in)n
-(terpreted)g(b)n(y)h(other)f(programs.)0 2947 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_MATHMAP\()c(NIN,)j(NOUT,)f(NFWD,)
-h(FWD,)g(NINV,)f(INV,)h(OPTIONS,)e(STATUS)h(\))0 3093
-y Fc(Argumen)m(ts:)259 3225 y(NIN)32 b(=)g(INTEGER)427
-3325 y Fk(Num)n(b)r(er)c(of)f(input)i(v)-5 b(ariables)26
-b(for)h(the)h(MathMap.)36 b(This)28 b(determines)f(the)h(v)-5
-b(alue)27 b(of)h(its)f(Nin)h(attribute.)259 3454 y Fc(NOUT)k(=)g
-(INTEGER)427 3554 y Fk(Num)n(b)r(er)20 b(of)g(output)h(v)-5
-b(ariables)18 b(for)h(the)i(MathMap.)34 b(This)20 b(determines)f(the)i
-(v)-5 b(alue)19 b(of)h(its)g(Nout)g(attribute.)259 3683
-y Fc(NFWD)32 b(=)g(INTEGER)427 3782 y Fk(The)26 b(n)n(um)n(b)r(er)f(of)
-h(forw)n(ard)e(transformation)g(functions)i(b)r(eing)g(supplied.)37
-b(This)25 b(m)n(ust)h(b)r(e)g(at)g(least)f(equal)427
-3882 y(to)35 b(NOUT,)g(but)h(ma)n(y)e(b)r(e)i(increased)e(to)g(accommo)
-r(date)g(an)n(y)h(additional)f(expressions)f(whic)n(h)i(de\014ne)427
-3981 y(in)n(termediate)23 b(v)-5 b(ariables)21 b(for)i(the)g(forw)n
-(ard)e(transformation)g(\(see)i(the)g Ft(")p Fk(Calculating)f(In)n
-(termediate)g(V)-7 b(al-)427 4081 y(ues)p Ft(")27 b Fk(section)h(b)r
-(elo)n(w\).)259 4210 y Fc(FWD)k(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h Fj(\003)f Fc(\)\()h(NFWD)g(\))427 4310 y Fk(An)c(arra)n(y)d
-(whic)n(h)i(con)n(tains)g(the)g(expressions)f(de\014ning)h(the)h(forw)n
-(ard)e(transformation.)35 b(The)27 b(syn)n(tax)g(of)427
-4409 y(these)h(expressions)e(is)h(describ)r(ed)h(b)r(elo)n(w.)259
-4538 y Fc(NINV)k(=)g(INTEGER)427 4638 y Fk(The)c(n)n(um)n(b)r(er)g(of)g
-(in)n(v)n(erse)f(transformation)f(functions)i(b)r(eing)h(supplied.)38
-b(This)28 b(m)n(ust)g(b)r(e)h(at)f(least)f(equal)427
-4738 y(to)e(NIN,)g(but)g(ma)n(y)f(b)r(e)h(increased)e(to)h(accommo)r
-(date)g(an)n(y)f(additional)h(expressions)f(whic)n(h)i(de\014ne)f(in)n
-(ter-)427 4837 y(mediate)30 b(v)-5 b(ariables)28 b(for)h(the)h(in)n(v)n
-(erse)e(transformation)g(\(see)h(the)h Ft(")p Fk(Calculating)e(In)n
-(termediate)h(V)-7 b(alues)p Ft(")427 4937 y Fk(section)27
-b(b)r(elo)n(w\).)259 5066 y Fc(INV)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\)\()h(NINV)g(\))427 5166
-y Fk(An)e(arra)n(y)d(whic)n(h)j(con)n(tains)e(the)i(expressions)e
-(de\014ning)i(the)g(in)n(v)n(erse)e(transformation.)40
-b(The)30 b(syn)n(tax)f(of)427 5265 y(these)f(expressions)e(is)h
-(describ)r(ed)h(b)r(elo)n(w.)259 5394 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5494 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 5593 y(used)i(for)f(initialising)g(the)h(new)f(MathMap.)35
-b(The)23 b(syn)n(tax)e(used)i(is)f(iden)n(tical)g(to)h(that)f(for)g
-(the)h(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)37 b(If)28
-b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)p eop end
-%%Page: 273 283
-TeXDict begin 273 282 bop 3643 52 a FG(273)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 619 y Fc(Returned)32
-b(V)-8 b(alue:)259 762 y(AST)p Ft(_)p Fc(MA)g(THMAP)32
-b(=)g(INTEGER)427 861 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(MathMap.)0 1030 y Fc(Notes:)340 1319 y Fj(\017)45 b
-Fk(The)e(sequence)f(of)h(n)n(um)n(b)r(ers)f(pro)r(duced)g(b)n(y)h(the)g
-(random)f(n)n(um)n(b)r(er)g(functions)h(a)n(v)-5 b(ailable)42
-b(within)h(a)427 1418 y(MathMap)c(is)h(normally)e(unpredictable)h(and)g
-(di\013eren)n(t)h(for)f(eac)n(h)f(MathMap.)72 b(Ho)n(w)n(ev)n(er,)41
-b(this)f(b)r(e-)427 1518 y(ha)n(viour)26 b(ma)n(y)h(b)r(e)h(con)n
-(trolled)f(b)n(y)g(means)g(of)h(the)g(MathMap's)f(Seed)g(attribute.)340
-1654 y Fj(\017)45 b Fk(Normally)-7 b(,)40 b(comp)r(ound)e(Mappings)g
-(\(CmpMaps\))g(whic)n(h)g(in)n(v)n(olv)n(e)f(MathMaps)h(will)g(not)g(b)
-r(e)g(sub)5 b(ject)427 1753 y(to)43 b(simpli\014cation)g(\(e.g.)82
-b(using)43 b(AST)p Ft(_)p Fk(SIMPLIFY\))g(b)r(ecause)f(AST)i(cannot)e
-(kno)n(w)g(ho)n(w)g(di\013eren)n(t)427 1853 y(MathMaps)37
-b(will)h(in)n(teract.)65 b(Ho)n(w)n(ev)n(er,)38 b(in)f(the)h(sp)r
-(ecial)f(case)f(where)h(a)g(MathMap)g(o)r(ccurs)f(in)i(series)427
-1953 y(with)d(its)g(o)n(wn)f(in)n(v)n(erse,)h(then)g(simpli\014cation)g
-(ma)n(y)e(b)r(e)i(p)r(ossible.)58 b(Whether)35 b(simpli\014cation)f(do)
-r(es,)i(in)427 2052 y(fact,)f(o)r(ccur)d(under)h(these)g(circumstances)
-f(is)g(con)n(trolled)g(b)n(y)h(the)g(MathMap's)f(SimpFI)i(and)f(SimpIF)
-427 2152 y(attributes.)340 2288 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2388
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2556 y Fc(De\014ning)32
-b(T)-8 b(ransformation)32 b(F)-8 b(unctions)n(:)227 2702
-y Fk(A)24 b(MathMap's)g(transformation)e(functions)i(are)e(supplied)j
-(as)e(a)g(set)h(of)f(expressions)f(in)i(an)g(arra)n(y)d(of)j(c)n
-(haracter)227 2802 y(strings.)34 b(Normally)19 b(y)n(ou)g(w)n(ould)g
-(supply)h(the)g(same)g(n)n(um)n(b)r(er)f(of)h(expressions)e(for)i(the)g
-(forw)n(ard)e(transformation,)227 2901 y(via)30 b(the)h(FWD)g(argumen)n
-(t,)f(as)g(there)g(are)g(output)h(v)-5 b(ariables)29
-b(\(giv)n(en)h(b)n(y)g(the)g(MathMap's)g(Nout)h(attribute\).)227
-3001 y(F)-7 b(or)27 b(instance,)h(if)g(Nout)g(is)f(2)g(y)n(ou)g(migh)n
-(t)h(use:)340 3144 y Fj(\017)45 b Fk('R)28 b(=)f(SQR)-7
-b(T\()28 b(X)g Fj(\003)f Fk(X)h(+)f(Y)h Fj(\003)g Fk(Y)g(\)')340
-3280 y Fj(\017)45 b Fk('THET)-7 b(A)28 b(=)f(A)-7 b(T)g(AN2\()29
-b(Y,)f(X)g(\)')227 3448 y(whic)n(h)21 b(de\014nes)f(a)g(transformation)
-f(from)h(Cartesian)f(to)i(p)r(olar)e(co)r(ordinates.)33
-b(Here,)22 b(the)f(v)-5 b(ariables)19 b(that)i(app)r(ear)227
-3547 y(on)30 b(the)h(left)g(of)f(eac)n(h)g(expression)f(\(R)h(and)h
-(THET)-7 b(A\))30 b(pro)n(vide)g(names)f(for)h(the)h(output)g(v)-5
-b(ariables)29 b(and)h(those)227 3647 y(that)e(app)r(ear)f(on)g(the)h
-(righ)n(t)f(\(X)h(and)g(Y\))g(are)e(references)h(to)g(input)i(v)-5
-b(ariables.)227 3775 y(T)e(o)28 b(complemen)n(t)g(this,)h(y)n(ou)f(m)n
-(ust)g(also)f(supply)h(expressions)f(for)h(the)g(in)n(v)n(erse)f
-(transformation)g(via)g(the)i(INV)227 3874 y(argumen)n(t.)62
-b(In)36 b(this)h(case,)g(the)g(n)n(um)n(b)r(er)f(of)g(expressions)f
-(giv)n(en)g(w)n(ould)h(normally)f(matc)n(h)h(the)h(n)n(um)n(b)r(er)f
-(of)227 3974 y(MathMap)28 b(input)g(co)r(ordinates)e(\(giv)n(en)h(b)n
-(y)h(the)g(Nin)g(attribute\).)37 b(If)28 b(Nin)g(is)g(2,)f(y)n(ou)g
-(migh)n(t)g(use:)340 4117 y Fj(\017)45 b Fk('X)28 b(=)g(R)f
-Fj(\003)g Fk(COS\()h(THET)-7 b(A)28 b(\)')340 4253 y
-Fj(\017)45 b Fk('Y)28 b(=)g(R)f Fj(\003)g Fk(SIN\()i(THET)-7
-b(A)28 b(\)')227 4421 y(whic)n(h)f(expresses)e(the)i(transformation)e
-(from)i(p)r(olar)f(to)g(Cartesian)g(co)r(ordinates.)35
-b(Note)26 b(that)h(here)g(the)g(input)227 4521 y(v)-5
-b(ariables)33 b(\(X)i(and)f(Y\))g(are)g(named)g(on)f(the)i(left)g(of)f
-(eac)n(h)f(expression,)h(and)g(the)h(output)f(v)-5 b(ariables)33
-b(\(R)i(and)227 4620 y(THET)-7 b(A\))28 b(are)f(referenced)g(on)g(the)h
-(righ)n(t.)227 4748 y(Normally)-7 b(,)25 b(y)n(ou)e(cannot)i(refer)f
-(to)g(a)g(v)-5 b(ariable)24 b(on)g(the)h(righ)n(t)f(of)h(an)f
-(expression)f(unless)h(it)i(is)e(named)h(on)f(the)h(left)227
-4848 y(of)j(an)g(expression)f(in)i(the)f(complemen)n(tary)f(set)h(of)h
-(functions.)39 b(Therefore)27 b(b)r(oth)h(sets)g(of)g(functions)h
-(\(forw)n(ard)227 4947 y(and)d(in)n(v)n(erse\))e(m)n(ust)i(b)r(e)g
-(form)n(ulated)f(using)g(the)i(same)e(consisten)n(t)g(set)g(of)h(v)-5
-b(ariable)25 b(names.)35 b(This)26 b(means)f(that)227
-5047 y(if)35 b(y)n(ou)f(wish)h(to)f(lea)n(v)n(e)g(one)g(of)g(the)h
-(transformations)e(unde\014ned,)k(y)n(ou)d(m)n(ust)h(supply)g(dumm)n(y)
-f(expressions)227 5146 y(whic)n(h)28 b(simply)f(name)h(eac)n(h)f(of)g
-(the)h(output)g(\(or)f(input\))i(v)-5 b(ariables.)36
-b(F)-7 b(or)27 b(example,)g(y)n(ou)g(migh)n(t)g(use:)340
-5289 y Fj(\017)45 b Fk('X')340 5425 y Fj(\017)g Fk('Y')227
-5593 y(for)22 b(the)h(in)n(v)n(erse)d(transformation)h(ab)r(o)n(v)n(e,)
-h(whic)n(h)g(serv)n(es)f(to)h(name)g(the)g(input)h(v)-5
-b(ariables)21 b(but)i(without)g(de\014ning)227 5693 y(an)28
-b(in)n(v)n(erse)e(transformation.)p eop end
-%%Page: 274 284
-TeXDict begin 274 283 bop 0 52 a FG(274)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)-2 351 y Fc(Calculating)h(In)m
-(termediate)g(V)-8 b(alues)n(:)227 497 y Fk(It)23 b(is)g(sometimes)g
-(useful)g(to)g(calculate)f(in)n(termediate)g(v)-5 b(alues)23
-b(and)g(then)g(to)g(use)f(these)h(in)g(the)h(\014nal)e(expressions)227
-597 y(for)28 b(the)g(output)h(\(or)e(input\))i(v)-5 b(ariables.)37
-b(This)27 b(ma)n(y)h(b)r(e)g(done)g(b)n(y)f(supplying)h(additional)g
-(expressions)e(for)h(the)227 697 y(forw)n(ard)e(\(or)i(in)n(v)n(erse\))
-e(transformation)h(functions.)36 b(F)-7 b(or)27 b(instance,)g(the)g
-(follo)n(wing)f(arra)n(y)e(of)j(\014v)n(e)f(expressions)227
-796 y(describ)r(es)h(2-dimensional)g(pin-cushion)g(distortion:)340
-938 y Fj(\017)45 b Fk('R)28 b(=)f(SQR)-7 b(T\()28 b(XIN)g
-Fj(\003)g Fk(XIN)g(+)f(YIN)h Fj(\003)f Fk(YIN)i(\)')340
-1073 y Fj(\017)45 b Fk('R)n(OUT)28 b(=)f(R)h Fj(\003)f
-Fk(\()h(1)f(+)g(0.1)g Fj(\003)g Fk(R)h Fj(\003)f Fk(R)h(\)')340
-1208 y Fj(\017)45 b Fk('THET)-7 b(A)28 b(=)f(A)-7 b(T)g(AN2\()29
-b(YIN,)f(XIN)g(\)',)340 1343 y Fj(\017)45 b Fk('X)n(OUT)28
-b(=)f(R)n(OUT)g Fj(\003)g Fk(COS\()h(THET)-7 b(A)28 b(\)')340
-1479 y Fj(\017)45 b Fk('YOUT)28 b(=)f(R)n(OUT)h Fj(\003)f
-Fk(SIN\()h(THET)-7 b(A)28 b(\)')227 1645 y(Here,)h(w)n(e)g(\014rst)g
-(calculate)f(three)h(in)n(termediate)g(results)f(\(R,)i(R)n(OUT)e(and)h
-(THET)-7 b(A\))29 b(and)g(then)h(use)f(these)g(to)227
-1745 y(calculate)22 b(the)h(\014nal)g(results)f(\(X)n(OUT)g(and)h
-(YOUT\).)g(The)f(MathMap)h(kno)n(ws)e(that)i(only)f(the)h(\014nal)f(t)n
-(w)n(o)g(results)227 1845 y(constitute)k(v)-5 b(alues)25
-b(for)g(the)h(output)g(v)-5 b(ariables)25 b(b)r(ecause)g(its)g(Nout)h
-(attribute)g(is)f(set)h(to)f(2.)36 b(Y)-7 b(ou)26 b(ma)n(y)e(de\014ne)i
-(as)227 1944 y(man)n(y)k(in)n(termediate)g(v)-5 b(ariables)29
-b(in)h(this)h(w)n(a)n(y)e(as)h(y)n(ou)f(c)n(ho)r(ose.)44
-b(Ha)n(ving)29 b(de\014ned)i(a)f(v)-5 b(ariable,)30 b(y)n(ou)g(ma)n(y)f
-(then)227 2044 y(refer)e(to)h(it)g(on)f(the)h(righ)n(t)f(of)g(an)n(y)g
-(subsequen)n(t)g(expressions.)227 2171 y(Note)36 b(that)g(when)g
-(de\014ning)g(the)g(in)n(v)n(erse)e(transformation)g(y)n(ou)h(ma)n(y)g
-(only)g(refer)g(to)h(the)g(output)g(v)-5 b(ariables)227
-2271 y(X)n(OUT)29 b(and)g(YOUT.)g(The)f(in)n(termediate)h(v)-5
-b(ariables)27 b(R,)i(R)n(OUT)g(and)f(THET)-7 b(A)29 b(\(ab)r(o)n(v)n
-(e\))f(are)g(priv)-5 b(ate)29 b(to)f(the)227 2370 y(forw)n(ard)36
-b(transformation)f(and)i(ma)n(y)g(not)g(b)r(e)h(referenced)e(b)n(y)h
-(the)h(in)n(v)n(erse)e(transformation.)64 b(The)37 b(in)n(v)n(erse)227
-2470 y(transformation)26 b(ma)n(y)-7 b(,)27 b(ho)n(w)n(ev)n(er,)f
-(de\014ne)i(its)f(o)n(wn)g(priv)-5 b(ate)28 b(in)n(termediate)f(v)-5
-b(ariables.)-2 2624 y Fc(Expression)31 b(Syn)m(tax)n(:)227
-2770 y Fk(The)39 b(expressions)d(giv)n(en)i(for)g(the)h(forw)n(ard)d
-(and)j(in)n(v)n(erse)e(transformations)f(closely)i(follo)n(w)f(the)i
-(syn)n(tax)f(of)227 2870 y(F)-7 b(ortran)20 b(\(with)h(some)g
-(extensions)f(for)g(compatibilit)n(y)g(with)i(the)f(C)g(language\).)33
-b(They)21 b(ma)n(y)f(con)n(tain)g(references)227 2970
-y(to)h(v)-5 b(ariables)19 b(and)h(literal)g(constan)n(ts,)h(together)e
-(with)i(arithmetic,)h(logical,)f(relational)e(and)h(bit)n(wise)h(op)r
-(erators,)227 3069 y(and)28 b(function)h(in)n(v)n(o)r(cations.)38
-b(A)28 b(set)h(of)f(sym)n(b)r(olic)g(constan)n(ts)f(is)h(also)f(a)n(v)
--5 b(ailable.)38 b(Eac)n(h)27 b(of)h(these)h(is)f(describ)r(ed)227
-3169 y(in)34 b(detail)f(b)r(elo)n(w.)55 b(P)n(aren)n(theses)31
-b(ma)n(y)i(b)r(e)g(used)h(to)f(o)n(v)n(er-ride)e(the)j(normal)e(order)h
-(of)g(ev)-5 b(aluation.)54 b(There)33 b(is)227 3268 y(no)h(built-in)g
-(limit)h(to)f(the)g(length)g(of)g(expressions)e(and)i(they)g(are)f
-(insensitiv)n(e)g(to)h(case)f(or)g(the)i(presence)e(of)227
-3368 y(additional)27 b(white)h(space.)-2 3522 y Fc(V)-8
-b(ariables)n(:)227 3668 y Fk(V)h(ariable)26 b(names)h(m)n(ust)f(b)r
-(egin)h(with)h(an)e(alphab)r(etic)h(c)n(haracter)e(and)h(ma)n(y)g(con)n
-(tain)h(only)f(alphab)r(etic)h(c)n(harac-)227 3768 y(ters,)j(digits,)g
-(and)f(the)h(underscore)e(c)n(haracter)f Ft("_")p Fk(.)42
-b(There)29 b(is)g(no)g(built-in)h(limit)g(to)g(the)g(length)f(of)h(v)-5
-b(ariable)227 3868 y(names.)-2 4022 y Fc(Literal)32 b(Constan)m(ts)n(:)
-227 4168 y Fk(Literal)f(constan)n(ts,)g(suc)n(h)g(as)g
-Ft(")p Fk(0)p Ft(")p Fk(,)g Ft(")p Fk(1)p Ft(")p Fk(,)g
-Ft(")p Fk(0.007)p Ft(")e Fk(or)h Ft(")p Fk(2.505E-16)p
-Ft(")d Fk(ma)n(y)k(app)r(ear)f(in)i(expressions,)e(with)i(the)227
-4268 y(decimal)26 b(p)r(oin)n(t)g(and)g(exp)r(onen)n(t)f(b)r(eing)h
-(optional)f(\(a)h Ft(")p Fk(D)p Ft(")f Fk(ma)n(y)h(also)e(b)r(e)j(used)
-e(as)h(an)f(exp)r(onen)n(t)h(c)n(haracter\).)34 b(A)227
-4367 y(unary)27 b(min)n(us)h Ft(")p Fk(-)p Ft(")e Fk(ma)n(y)h(b)r(e)h
-(used)g(as)f(a)g(pre\014x.)-2 4522 y Fc(Arithmetic)32
-b(Precision)n(:)227 4668 y Fk(All)c(arithmetic)g(is)f(\015oating)g(p)r
-(oin)n(t,)h(p)r(erformed)f(in)h(double)f(precision.)-2
-4822 y Fc(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-4968 y Fk(Unless)i(indicated)g(otherwise,)h(if)f(an)n(y)f(argumen)n(t)g
-(of)h(a)g(function)g(or)g(op)r(erator)e(has)h(the)i(v)-5
-b(alue)32 b(AST)p Ft(__)p Fk(BAD)227 5068 y(\(indicating)38
-b(missing)f(data\),)j(then)e(the)g(result)f(of)g(that)h(function)g(or)e
-(op)r(eration)h(is)g(also)g(AST)p Ft(__)p Fk(BAD,)g(so)227
-5168 y(that)k(suc)n(h)e(v)-5 b(alues)40 b(are)f(propagated)f
-(automatically)h(through)g(all)h(op)r(erations)f(p)r(erformed)g(b)n(y)h
-(MathMap)227 5267 y(transformations.)35 b(The)26 b(sp)r(ecial)h(v)-5
-b(alue)26 b(AST)p Ft(__)p Fk(BAD)g(can)h(b)r(e)f(represen)n(ted)g(in)g
-(expressions)f(b)n(y)h(the)h(sym)n(b)r(olic)227 5367
-y(constan)n(t)g Ft(")p Fm(<)p Fk(bad)p Fm(>)p Ft(")p
-Fk(.)227 5494 y(A)33 b Fm(<)p Fk(bad)p Fm(>)f Fk(result)g(\(i.e.)52
-b(equal)32 b(to)h(AST)p Ft(__)p Fk(BAD\))g(is)f(also)g(pro)r(duced)g
-(in)h(resp)r(onse)f(to)g(an)n(y)g(n)n(umerical)g(error)227
-5593 y(\(suc)n(h)f(as)f(division)h(b)n(y)g(zero)e(or)h(n)n(umerical)g
-(o)n(v)n(er\015o)n(w\),)g(or)g(if)h(an)g(in)n(v)-5 b(alid)31
-b(argumen)n(t)f(v)-5 b(alue)31 b(is)f(pro)n(vided)g(to)h(a)227
-5693 y(function)d(or)f(op)r(erator.)p eop end
-%%Page: 275 285
-TeXDict begin 275 284 bop 3643 52 a FG(275)-2 351 y Fc(Arithmetic)32
-b(Op)s(erators)n(:)227 497 y Fk(The)c(follo)n(wing)e(arithmetic)i(op)r
-(erators)e(are)g(a)n(v)-5 b(ailable:)340 642 y Fj(\017)45
-b Fk(X1)28 b(+)f(X2:)37 b(Sum)28 b(of)f(X1)h(and)f(X2.)340
-779 y Fj(\017)45 b Fk(X1)28 b(-)f(X2:)37 b(Di\013erence)28
-b(of)f(X1)h(and)f(X2.)340 916 y Fj(\017)45 b Fk(X1)28
-b Fj(\003)f Fk(X2:)37 b(Pro)r(duct)27 b(of)g(X1)h(and)f(X2.)340
-1053 y Fj(\017)45 b Fk(X1)28 b(/)f(X2:)37 b(Ratio)27
-b(of)g(X1)h(and)f(X2.)340 1190 y Fj(\017)45 b Fk(X1)28
-b Fj(\003\003)e Fk(X2:)37 b(X1)28 b(raised)e(to)i(the)g(p)r(o)n(w)n(er)
-e(of)i(X2.)340 1327 y Fj(\017)45 b Fk(+)28 b(X:)g(Unary)e(plus,)i(has)f
-(no)h(e\013ect)g(on)f(its)h(argumen)n(t.)340 1464 y Fj(\017)45
-b Fk(-)28 b(X:)g(Unary)f(min)n(us,)g(negates)g(its)h(argumen)n(t.)-2
-1634 y Fc(Logical)k(Op)s(erators)n(:)227 1780 y Fk(Logical)23
-b(v)-5 b(alues)25 b(are)f(represen)n(ted)f(using)h(zero)g(to)h
-(indicate)f(.F)-9 b(ALSE.)25 b(and)f(non-zero)f(to)i(indicate)g(.TR)n
-(UE..)35 b(In)227 1879 y(addition,)30 b(the)f(v)-5 b(alue)29
-b(AST)p Ft(__)p Fk(BAD)h(is)f(tak)n(en)f(to)h(mean)g
-Ft(")p Fk(unkno)n(wn)p Ft(")p Fk(.)41 b(The)29 b(v)-5
-b(alues)29 b(returned)f(b)n(y)h(logical)f(op-)227 1979
-y(erators)c(ma)n(y)h(therefore)f(b)r(e)i(0,)f(1)g(or)g(AST)p
-Ft(__)p Fk(BAD.)h(Where)f(appropriate,)f Ft(")p Fk(tri-state)p
-Ft(")g Fk(logic)h(is)g(implemen)n(ted.)227 2079 y(F)-7
-b(or)35 b(example,)h(A.OR.B)f(ma)n(y)f(ev)-5 b(aluate)35
-b(to)g(1)f(if)i(A)f(is)g(non-zero,)g(ev)n(en)g(if)g(B)g(has)f(the)i(v)
--5 b(alue)34 b(AST)p Ft(__)p Fk(BAD.)227 2178 y(This)27
-b(is)f(b)r(ecause)g(the)g(result)g(of)h(the)f(op)r(eration)g(w)n(ould)f
-(not)i(b)r(e)f(a\013ected)h(b)n(y)f(the)h(v)-5 b(alue)26
-b(of)g(B,)g(so)g(long)f(as)h(A)h(is)227 2278 y(non-zero.)227
-2406 y(The)h(follo)n(wing)e(logical)h(op)r(erators)e(are)i(a)n(v)-5
-b(ailable:)340 2551 y Fj(\017)45 b Fk(X1)33 b(.AND.)h(X2:)47
-b(Logical)31 b(AND)j(b)r(et)n(w)n(een)f(X1)f(and)h(X2,)h(returning)e(1)
-g(if)h(b)r(oth)h(X1)e(and)h(X2)f(are)g(non-)427 2651
-y(zero,)26 b(and)h(0)g(otherwise.)35 b(This)27 b(op)r(erator)f
-(implemen)n(ts)h(tri-state)f(logic.)36 b(\(The)27 b(synon)n(ym)f
-Ft(")p Fk(&&)p Ft(")g Fk(is)h(also)427 2750 y(pro)n(vided)g(for)g
-(compatibilit)n(y)g(with)h(C.\))340 2887 y Fj(\017)45
-b Fk(X1)22 b(.OR.)g(X2:)34 b(Logical)21 b(OR)h(b)r(et)n(w)n(een)g(X1)g
-(and)g(X2,)h(returning)e(1)h(if)h(either)f(X1)g(or)f(X2)h(are)f
-(non-zero,)h(and)427 2987 y(0)j(otherwise.)35 b(This)24
-b(op)r(erator)f(implemen)n(ts)j(tri-state)e(logic.)35
-b(\(The)25 b(synon)n(ym)f Ft(")p Fj(jj)p Ft(")g Fk(is)h(also)e(pro)n
-(vided)h(for)427 3087 y(compatibilit)n(y)k(with)g(C.\))340
-3223 y Fj(\017)45 b Fk(X1)26 b(.NEQV.)h(X2:)36 b(Logical)25
-b(exclusiv)n(e)g(OR)h(\(X)n(OR\))h(b)r(et)n(w)n(een)f(X1)g(and)g(X2,)h
-(returning)f(1)f(if)i(exactly)f(one)427 3323 y(of)35
-b(X1)f(and)g(X2)g(is)g(non-zero,)g(and)h(0)e(otherwise.)56
-b(T)-7 b(ri-state)34 b(logic)f(is)h(not)h(used)f(with)h(this)f(op)r
-(erator.)427 3423 y(\(The)28 b(synon)n(ym)e Ft(")p Fk(.X)n(OR.)p
-Ft(")g Fk(is)h(also)f(pro)n(vided,)g(although)g(this)i(is)f(not)g
-(standard)f(F)-7 b(ortran.)35 b(In)28 b(addition,)427
-3522 y(the)g(C-lik)n(e)f(synon)n(ym)g Ft(")p Fj(^^)p
-Ft(")g Fk(ma)n(y)g(b)r(e)h(used,)g(although)f(this)h(is)f(also)g(not)g
-(standard.\))340 3659 y Fj(\017)45 b Fk(X1)35 b(.EQV.)g(X2:)52
-b(T)-7 b(ests)35 b(whether)h(the)f(logical)f(states)h(of)g(X1)g(and)g
-(X2)h(\(i.e.)60 b(.TR)n(UE./.F)-9 b(ALSE.\))35 b(are)427
-3759 y(equal.)h(It)26 b(is)f(the)g(negativ)n(e)g(of)g(the)h(exclusiv)n
-(e)e(OR)h(\(X)n(OR\))h(function.)36 b(T)-7 b(ri-state)25
-b(logic)f(is)h(not)h(used)f(with)427 3858 y(this)j(op)r(erator.)340
-3995 y Fj(\017)45 b Fk(.NOT.)37 b(X:)g(Logical)e(unary)g(NOT)h(op)r
-(eration,)i(returning)e(1)g(if)h(X)g(is)f(zero,)h(and)g(0)f(otherwise.)
-62 b(\(The)427 4095 y(synon)n(ym)27 b Ft(")p Fk(!)p Ft(")g
-Fk(is)g(also)g(pro)n(vided)f(for)h(compatibilit)n(y)h(with)g(C.\))-2
-4265 y Fc(Relational)j(Op)s(erators)n(:)227 4411 y Fk(Relational)25
-b(op)r(erators)e(return)i(the)h(logical)e(result)h(\(0)g(or)g(1\))g(of)
-g(comparing)f(the)i(v)-5 b(alues)25 b(of)g(t)n(w)n(o)g(\015oating)f(p)r
-(oin)n(t)227 4511 y(v)-5 b(alues)30 b(for)g(equalit)n(y)g(or)f
-(inequalit)n(y)-7 b(.)45 b(The)31 b(v)-5 b(alue)30 b(AST)p
-Ft(__)p Fk(BAD)h(ma)n(y)e(also)h(b)r(e)h(returned)e(if)i(either)g
-(argumen)n(t)227 4610 y(is)d Fm(<)p Fk(bad)p Fm(>)p Fk(.)227
-4739 y(The)g(follo)n(wing)e(relational)h(op)r(erators)e(are)i(a)n(v)-5
-b(ailable:)340 4884 y Fj(\017)45 b Fk(X1)26 b(.EQ.)f(X2:)35
-b(T)-7 b(ests)26 b(whether)f(X1)g(equals)g(X2.)36 b(\(The)26
-b(synon)n(ym)f Ft(")p Fk(==)p Ft(")f Fk(is)h(also)g(pro)n(vided)f(for)h
-(compat-)427 4983 y(ibilit)n(y)j(with)g(C.\))340 5120
-y Fj(\017)45 b Fk(X1)33 b(.NE.)f(X2:)47 b(T)-7 b(ests)32
-b(whether)h(X1)f(is)g(unequal)h(to)f(X2.)52 b(\(The)33
-b(synon)n(ym)e Ft(")p Fk(!=)p Ft(")h Fk(is)g(also)g(pro)n(vided)f(for)
-427 5220 y(compatibilit)n(y)d(with)g(C.\))340 5357 y
-Fj(\017)45 b Fk(X1)30 b(.GT.)h(X2:)41 b(T)-7 b(ests)30
-b(whether)g(X1)g(is)g(greater)f(than)h(X2.)44 b(\(The)31
-b(synon)n(ym)e Ft(")p Fm(>)p Ft(")g Fk(is)h(also)f(pro)n(vided)g(for)
-427 5456 y(compatibilit)n(y)f(with)g(C.\))340 5593 y
-Fj(\017)45 b Fk(X1)29 b(.GE.)h(X2:)40 b(T)-7 b(ests)29
-b(whether)g(X1)g(is)g(greater)f(than)h(or)f(equal)h(to)g(X2.)42
-b(\(The)30 b(synon)n(ym)e Ft(")p Fm(>)p Fk(=)p Ft(")g
-Fk(is)h(also)427 5693 y(pro)n(vided)e(for)g(compatibilit)n(y)g(with)h
-(C.\))p eop end
-%%Page: 276 286
-TeXDict begin 276 285 bop 0 52 a FG(276)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(X1)38 b(.L)-7 b(T.)38 b(X2:)58 b(T)-7 b(ests)37
-b(whether)h(X1)g(is)g(less)f(than)i(X2.)67 b(\(The)39
-b(synon)n(ym)e Ft(")p Fm(<)p Ft(")g Fk(is)g(also)g(pro)n(vided)g(for)
-427 451 y(compatibilit)n(y)28 b(with)g(C.\))340 584 y
-Fj(\017)45 b Fk(X1)36 b(.LE.)g(X2:)55 b(T)-7 b(ests)36
-b(whether)g(X1)g(is)h(less)e(than)i(or)e(equal)h(to)h(X2.)63
-b(\(The)36 b(synon)n(ym)g Ft(")p Fm(<)p Fk(=)p Ft(")e
-Fk(is)j(also)427 684 y(pro)n(vided)27 b(for)g(compatibilit)n(y)g(with)h
-(C.\))227 847 y(Note)33 b(that)f(relational)f(op)r(erators)f(cannot)i
-(usefully)g(b)r(e)h(used)f(to)g(compare)f(v)-5 b(alues)32
-b(with)h(the)g Fm(<)p Fk(bad)p Fm(>)e Fk(v)-5 b(alue)227
-947 y(\(represen)n(ting)23 b(missing)h(data\),)h(b)r(ecause)f(the)g
-(result)g(is)g(alw)n(a)n(ys)f Fm(<)p Fk(bad)p Fm(>)p
-Fk(.)35 b(The)24 b(ISBAD\(\))h(function)g(should)f(b)r(e)227
-1047 y(used)k(instead.)227 1172 y(Note,)f(also,)e(that)i(b)r(ecause)f
-(logical)f(op)r(erators)f(can)i(op)r(erate)g(on)g(\015oating)f(p)r(oin)
-n(t)i(v)-5 b(alues,)26 b(care)f(m)n(ust)h(b)r(e)h(tak)n(en)227
-1272 y(to)39 b(use)g(paren)n(theses)e(in)j(some)e(cases)g(where)g(they)
-h(w)n(ould)g(not)f(normally)g(b)r(e)i(required)d(in)j(F)-7
-b(ortran.)69 b(F)-7 b(or)227 1371 y(example,)28 b(the)f(expresssion:)
-340 1509 y Fj(\017)45 b Fk(.NOT.)28 b(A)g(.EQ.)f(B)227
-1673 y(m)n(ust)h(b)r(e)g(written:)340 1810 y Fj(\017)45
-b Fk(.NOT.)28 b(\()g(A)g(.EQ.)f(B)g(\))227 1974 y(to)h(prev)n(en)n(t)e
-(the)i(.NOT.)g(op)r(erator)e(from)h(asso)r(ciating)f(with)i(the)g(v)-5
-b(ariable)27 b(A.)-2 2125 y Fc(Bit)m(wise)k(Op)s(erators)n(:)227
-2271 y Fk(Bit)n(wise)i(op)r(erators)e(are)i(often)g(useful)h(when)f(op)
-r(erating)f(on)h(ra)n(w)f(data)h(\(e.g.)54 b(from)33
-b(instrumen)n(ts\),)i(so)d(they)227 2370 y(are)j(pro)n(vided)g(for)g
-(use)h(in)g(MathMap)g(expressions.)59 b(In)36 b(this)h(case,)g(ho)n(w)n
-(ev)n(er,)e(the)i(v)-5 b(alues)35 b(on)h(whic)n(h)f(they)227
-2470 y(op)r(erate)e(are)f(\015oating)h(p)r(oin)n(t)h(v)-5
-b(alues)33 b(rather)g(than)g(the)h(more)f(usual)g(pure)g(in)n(tegers.)
-54 b(In)33 b(order)g(to)g(pro)r(duce)227 2570 y(results)23
-b(whic)n(h)f(matc)n(h)h(the)g(pure)g(in)n(teger)e(case,)i(the)h(op)r
-(erands)d(are)h(regarded)f(as)h(\014xed)h(p)r(oin)n(t)g(binary)f(n)n
-(um)n(b)r(ers)227 2669 y(\(i.e.)37 b(with)26 b(the)g(binary)f(equiv)-5
-b(alen)n(t)25 b(of)g(a)h(decimal)f(p)r(oin)n(t\))h(with)g(negativ)n(e)e
-(n)n(um)n(b)r(ers)h(represen)n(ted)g(using)g(t)n(w)n(os-)227
-2769 y(complemen)n(t)39 b(notation.)71 b(F)-7 b(or)38
-b(in)n(teger)g(v)-5 b(alues,)42 b(the)d(resulting)g(bit)g(pattern)g
-(corresp)r(onds)e(to)i(that)g(of)g(the)227 2869 y(equiv)-5
-b(alen)n(t)39 b(signed)f(in)n(teger)f(\(digits)i(to)g(the)g(righ)n(t)f
-(of)g(the)h(p)r(oin)n(t)g(b)r(eing)g(zero\).)69 b(Op)r(erations)37
-b(on)h(the)h(bits)227 2968 y(represen)n(ting)26 b(the)i(fractional)f
-(part)g(are)g(also)f(p)r(ossible,)h(ho)n(w)n(ev)n(er.)227
-3093 y(The)h(follo)n(wing)e(bit)n(wise)i(op)r(erators)e(are)g(a)n(v)-5
-b(ailable:)340 3231 y Fj(\017)45 b Fk(X1)32 b Fm(>>)f
-Fk(X2:)46 b(Righ)n(t)n(w)n(ard)30 b(bit)j(shift.)50 b(The)32
-b(in)n(teger)f(v)-5 b(alue)32 b(of)g(X2)g(is)g(tak)n(en)f(\(rounding)g
-(to)n(w)n(ards)f(zero\))427 3331 y(and)25 b(the)f(bits)h(represen)n
-(ting)e(X1)h(are)f(then)i(shifted)g(this)g(n)n(um)n(b)r(er)f(of)h
-(places)e(to)i(the)f(righ)n(t)g(\(or)g(to)g(the)h(left)427
-3431 y(if)30 b(the)g(n)n(um)n(b)r(er)f(of)g(places)g(is)g(negativ)n
-(e\).)42 b(This)29 b(is)h(equiv)-5 b(alen)n(t)29 b(to)g(dividing)g(X1)h
-(b)n(y)f(the)h(corresp)r(onding)427 3530 y(p)r(o)n(w)n(er)d(of)g(2.)340
-3664 y Fj(\017)45 b Fk(X1)24 b Fm(<<)g Fk(X2:)35 b(Left)n(w)n(ard)23
-b(bit)h(shift.)37 b(The)24 b(in)n(teger)f(v)-5 b(alue)24
-b(of)g(X2)g(is)g(tak)n(en)g(\(rounding)f(to)n(w)n(ards)g(zero\),)h(and)
-427 3763 y(the)30 b(bits)f(represen)n(ting)f(X1)h(are)f(then)i(shifted)
-f(this)h(n)n(um)n(b)r(er)f(of)g(places)f(to)h(the)h(left)g(\(or)e(to)h
-(the)h(righ)n(t)e(if)427 3863 y(the)f(n)n(um)n(b)r(er)f(of)h(places)e
-(is)i(negativ)n(e\).)35 b(This)27 b(is)f(equiv)-5 b(alen)n(t)26
-b(to)h(m)n(ultiplying)f(X1)h(b)n(y)f(the)h(corresp)r(onding)427
-3963 y(p)r(o)n(w)n(er)g(of)g(2.)340 4096 y Fj(\017)45
-b Fk(X1)25 b(&)g(X2:)36 b(Bit)n(wise)24 b(AND)j(b)r(et)n(w)n(een)e(the)
-g(bits)h(of)f(X1)g(and)g(those)g(of)g(X2)g(\(equiv)-5
-b(alen)n(t)25 b(to)g(a)g(logical)f(AND)427 4196 y(applied)k(at)f(eac)n
-(h)g(bit)h(p)r(osition)g(in)g(turn\).)340 4329 y Fj(\017)45
-b Fk(X1)34 b Fj(j)g Fk(X2:)50 b(Bit)n(wise)34 b(OR)g(b)r(et)n(w)n(een)g
-(the)g(bits)h(of)f(X1)g(and)g(those)f(of)h(X2)g(\(equiv)-5
-b(alen)n(t)34 b(to)g(a)g(logical)f(OR)427 4429 y(applied)28
-b(at)f(eac)n(h)g(bit)h(p)r(osition)g(in)g(turn\).)340
-4563 y Fj(\017)45 b Fk(X1)30 b Fj(^)h Fk(X2:)43 b(Bit)n(wise)29
-b(exclusiv)n(e)h(OR)g(\(X)n(OR\))h(b)r(et)n(w)n(een)f(the)h(bits)f(of)h
-(X1)f(and)g(those)g(of)g(X2)h(\(equiv)-5 b(alen)n(t)427
-4662 y(to)28 b(a)f(logical)f(X)n(OR)i(applied)f(at)h(eac)n(h)e(bit)j(p)
-r(osition)e(in)h(turn\).)227 4826 y(Note)39 b(that)g(no)f(bit)i(in)n(v)
-n(ersion)d(op)r(erator)f(is)j(pro)n(vided.)69 b(This)39
-b(is)f(b)r(ecause)h(in)n(v)n(erting)e(the)i(bits)g(of)g(a)f(t)n(w)n
-(os-)227 4925 y(complemen)n(t)32 b(\014xed)f(p)r(oin)n(t)h(binary)f(n)n
-(um)n(b)r(er)g(is)g(equiv)-5 b(alen)n(t)32 b(to)f(simply)h(negating)e
-(it.)49 b(This)32 b(di\013ers)f(from)g(the)227 5025 y(pure)i(in)n
-(teger)g(case)f(b)r(ecause)h(bits)h(to)f(the)h(righ)n(t)f(of)g(the)h
-(binary)f(p)r(oin)n(t)g(are)g(also)f(in)n(v)n(erted.)53
-b(T)-7 b(o)33 b(in)n(v)n(ert)g(only)227 5125 y(those)27
-b(bits)g(to)g(the)h(left)f(of)g(the)h(binary)e(p)r(oin)n(t,)i(use)e(a)h
-(bit)n(wise)g(exclusiv)n(e)f(OR)h(with)h(the)f(v)-5 b(alue)27
-b(-1)f(\(i.e.)37 b(X)p Fj(^)p Fk(-1\).)-2 5275 y Fc(F)-8
-b(unctions)n(:)227 5422 y Fk(The)28 b(follo)n(wing)e(functions)i(are)f
-(a)n(v)-5 b(ailable:)340 5559 y Fj(\017)45 b Fk(ABS\(X\):)29
-b(Absolute)f(v)-5 b(alue)27 b(of)h(X)g(\(sign)f(remo)n(v)-5
-b(al\),)27 b(same)g(as)g(F)-9 b(ABS\(X\).)340 5693 y
-Fj(\017)45 b Fk(A)n(COS\(X\):)28 b(In)n(v)n(erse)f(cosine)f(of)i(X,)g
-(in)g(radians.)p eop end
-%%Page: 277 287
-TeXDict begin 277 286 bop 3643 52 a FG(277)340 351 y
-Fj(\017)45 b Fk(A)n(COSD\(X\):)29 b(In)n(v)n(erse)d(cosine)h(of)g(X,)h
-(in)g(degrees.)340 482 y Fj(\017)45 b Fk(A)n(COSH\(X\):)29
-b(In)n(v)n(erse)d(h)n(yp)r(erb)r(olic)h(cosine)g(of)g(X.)340
-613 y Fj(\017)45 b Fk(A)n(COTH\(X\):)29 b(In)n(v)n(erse)d(h)n(yp)r(erb)
-r(olic)h(cotangen)n(t)f(of)i(X.)340 744 y Fj(\017)45
-b Fk(A)n(CSCH\(X\):)29 b(In)n(v)n(erse)d(h)n(yp)r(erb)r(olic)h(cosecan)
-n(t)g(of)g(X.)340 875 y Fj(\017)45 b Fk(AINT\(X\):)29
-b(In)n(teger)e(part)g(of)h(X)g(\(round)f(to)n(w)n(ards)f(zero\),)g
-(same)h(as)g(INT\(X\).)340 1007 y Fj(\017)45 b Fk(ASECH\(X\):)29
-b(In)n(v)n(erse)d(h)n(yp)r(erb)r(olic)h(secan)n(t)g(of)h(X.)340
-1138 y Fj(\017)45 b Fk(ASIN\(X\):)29 b(In)n(v)n(erse)e(sine)g(of)h(X,)g
-(in)f(radians.)340 1269 y Fj(\017)45 b Fk(ASIND\(X\):)30
-b(In)n(v)n(erse)c(sine)h(of)h(X,)g(in)g(degrees.)340
-1400 y Fj(\017)45 b Fk(ASINH\(X\):)30 b(In)n(v)n(erse)c(h)n(yp)r(erb)r
-(olic)h(sine)g(of)h(X.)340 1531 y Fj(\017)45 b Fk(A)-7
-b(T)g(AN\(X\):)30 b(In)n(v)n(erse)c(tangen)n(t)h(of)g(X,)h(in)g
-(radians.)340 1662 y Fj(\017)45 b Fk(A)-7 b(T)g(AND\(X\):)30
-b(In)n(v)n(erse)c(tangen)n(t)h(of)h(X,)g(in)g(degrees.)340
-1793 y Fj(\017)45 b Fk(A)-7 b(T)g(ANH\(X\):)30 b(In)n(v)n(erse)c(h)n
-(yp)r(erb)r(olic)h(tangen)n(t)g(of)h(X.)340 1924 y Fj(\017)45
-b Fk(A)-7 b(T)g(AN2\(X1,)29 b(X2\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)g(X1/X2,)g(in)h(radians.)340 2055 y
-Fj(\017)45 b Fk(A)-7 b(T)g(AN2D\(X1,)29 b(X2\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)h(X1/X2,)e(in)i(degrees.)340 2186 y
-Fj(\017)45 b Fk(CEIL\(X\):)28 b(Smallest)g(in)n(teger)e(v)-5
-b(alue)28 b(not)f(less)h(then)g(X)g(\(round)f(to)n(w)n(ards)f(plus)h
-(in\014nit)n(y\).)340 2317 y Fj(\017)45 b Fk(COS\(X\):)29
-b(Cosine)d(of)i(X)g(in)g(radians.)340 2448 y Fj(\017)45
-b Fk(COSD\(X\):)29 b(Cosine)e(of)g(X)h(in)g(degrees.)340
-2579 y Fj(\017)45 b Fk(COSH\(X\):)29 b(Hyp)r(erb)r(olic)e(cosine)g(of)h
-(X.)340 2710 y Fj(\017)45 b Fk(COTH\(X\):)29 b(Hyp)r(erb)r(olic)e
-(cotangen)n(t)g(of)g(X.)340 2841 y Fj(\017)45 b Fk(CSCH\(X\):)29
-b(Hyp)r(erb)r(olic)f(cosecan)n(t)e(of)i(X.)340 2972 y
-Fj(\017)45 b Fk(DIM\(X1,)29 b(X2\):)37 b(Returns)27 b(X1-X2)g(if)h(X1)g
-(is)f(greater)f(than)i(X2,)f(otherwise)g(0.)340 3103
-y Fj(\017)45 b Fk(EXP\(X\):)28 b(Exp)r(onen)n(tial)f(function)h(of)g
-(X.)340 3234 y Fj(\017)45 b Fk(F)-9 b(ABS\(X\):)29 b(Absolute)f(v)-5
-b(alue)27 b(of)h(X)g(\(sign)f(remo)n(v)-5 b(al\),)27
-b(same)g(as)g(ABS\(X\).)340 3365 y Fj(\017)45 b Fk(FLOOR\(X\):)28
-b(Largest)e(in)n(teger)h(not)g(greater)f(than)i(X)g(\(round)f(to)n(w)n
-(ards)f(min)n(us)i(in\014nit)n(y\).)340 3497 y Fj(\017)45
-b Fk(FMOD\(X1,)28 b(X2\):)37 b(Remainder)27 b(when)h(X1)g(is)f(divided)
-h(b)n(y)f(X2,)h(same)f(as)g(MOD\(X1,)h(X2\).)340 3628
-y Fj(\017)45 b Fk(GA)n(USS\(X1,)27 b(X2\):)37 b(Random)25
-b(sample)h(from)g(a)f(Gaussian)g(distribution)h(with)h(mean)f(X1)g(and)
-g(standard)427 3727 y(deviation)h(X2.)340 3858 y Fj(\017)45
-b Fk(INT\(X\):)29 b(In)n(teger)e(part)g(of)g(X)h(\(round)g(to)n(w)n
-(ards)d(zero\),)i(same)g(as)g(AINT\(X\).)340 3989 y Fj(\017)45
-b Fk(ISBAD\(X\):)29 b(Returns)f(1)f(if)h(X)g(has)f(the)h
-Fm(<)p Fk(bad)p Fm(>)f Fk(v)-5 b(alue)27 b(\(AST)p Ft(__)p
-Fk(BAD\),)i(otherwise)d(0.)340 4120 y Fj(\017)45 b Fk(LOG\(X\):)28
-b(Natural)f(logarithm)g(of)g(X.)340 4251 y Fj(\017)45
-b Fk(LOG10\(X\):)27 b(Logarithm)g(of)g(X)h(to)g(base)f(10.)340
-4382 y Fj(\017)45 b Fk(MAX\(X1,)29 b(X2,)e(...\):)38
-b(Maxim)n(um)27 b(of)h(t)n(w)n(o)e(or)h(more)g(v)-5 b(alues.)340
-4514 y Fj(\017)45 b Fk(MIN\(X1,)28 b(X2,)g(...\):)37
-b(Minim)n(um)29 b(of)e(t)n(w)n(o)g(or)g(more)f(v)-5 b(alues.)340
-4645 y Fj(\017)45 b Fk(MOD\(X1,)28 b(X2\):)37 b(Remainder)27
-b(when)h(X1)g(is)f(divided)h(b)n(y)f(X2,)h(same)f(as)g(FMOD\(X1,)h
-(X2\).)340 4776 y Fj(\017)45 b Fk(NINT\(X\):)29 b(Nearest)e(in)n(teger)
-g(to)g(X)h(\(round)g(to)f(nearest\).)340 4907 y Fj(\017)45
-b Fk(POISSON\(X\):)28 b(Random)f(in)n(teger-v)-5 b(alued)26
-b(sample)i(from)f(a)g(P)n(oisson)f(distribution)h(with)i(mean)e(X.)340
-5038 y Fj(\017)45 b Fk(PO)n(W\(X1,)27 b(X2\):)37 b(X1)28
-b(raised)e(to)i(the)g(p)r(o)n(w)n(er)e(of)i(X2.)340 5169
-y Fj(\017)45 b Fk(QIF\(x1,)27 b(x2,)g(x3\):)37 b(Returns)27
-b(X2)h(if)g(X1)g(is)f(true,)h(and)f(X3)g(otherwise.)340
-5300 y Fj(\017)45 b Fk(RAND\(X1,)24 b(X2\):)34 b(Random)21
-b(sample)g(from)g(a)g(uniform)g(distribution)h(in)g(the)f(range)f(X1)i
-(to)f(X2)g(inclusiv)n(e.)340 5431 y Fj(\017)45 b Fk(SECH\(X\):)29
-b(Hyp)r(erb)r(olic)e(secan)n(t)g(of)h(X.)340 5562 y Fj(\017)45
-b Fk(SIGN\(X1,)29 b(X2\):)37 b(Absolute)27 b(v)-5 b(alue)28
-b(of)f(X1)h(with)g(the)g(sign)f(of)h(X2)f(\(transfer)g(of)g(sign\).)340
-5693 y Fj(\017)45 b Fk(SIN\(X\):)29 b(Sine)f(of)g(X)g(in)f(radians.)p
-eop end
-%%Page: 278 288
-TeXDict begin 278 287 bop 0 52 a FG(278)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(SINC\(X\):)29 b(Sinc)f(function)g(of)g(X)g([=)f(SIN\(X\)/X].)340
-482 y Fj(\017)45 b Fk(SIND\(X\):)30 b(Sine)e(of)f(X)h(in)g(degrees.)340
-613 y Fj(\017)45 b Fk(SINH\(X\):)29 b(Hyp)r(erb)r(olic)f(sine)g(of)f
-(X.)340 743 y Fj(\017)45 b Fk(SQR\(X\):)29 b(Square)d(of)i(X)g(\(=)f(X)
-p Fj(\003)p Fk(X\).)340 874 y Fj(\017)45 b Fk(SQR)-7
-b(T\(X\):)29 b(Square)d(ro)r(ot)h(of)h(X.)340 1004 y
-Fj(\017)45 b Fk(T)-7 b(AN\(X\):)29 b(T)-7 b(angen)n(t)27
-b(of)h(X)g(in)g(radians.)340 1135 y Fj(\017)45 b Fk(T)-7
-b(AND\(X\):)30 b(T)-7 b(angen)n(t)27 b(of)g(X)h(in)g(degrees.)340
-1266 y Fj(\017)45 b Fk(T)-7 b(ANH\(X\):)30 b(Hyp)r(erb)r(olic)d(tangen)
-n(t)g(of)h(X.)-2 1425 y Fc(Sym)m(b)s(olic)j(Constan)m(ts)n(:)227
-1572 y Fk(The)c(follo)n(wing)e(sym)n(b)r(olic)h(constan)n(ts)g(are)g(a)
-n(v)-5 b(ailable)25 b(\(the)i(enclosing)f Ft(")p Fm(<>)p
-Ft(")f Fk(brac)n(k)n(ets)f(m)n(ust)j(b)r(e)g(included\):)340
-1706 y Fj(\017)45 b Fm(<)p Fk(bad)p Fm(>)p Fk(:)51 b(The)35
-b Ft(")p Fk(bad)p Ft(")e Fk(v)-5 b(alue)35 b(\(AST)p
-Ft(__)p Fk(BAD\))h(used)f(to)f(\015ag)g(missing)h(data.)58
-b(Note)35 b(that)g(y)n(ou)f(cannot)427 1805 y(usefully)23
-b(compare)e(v)-5 b(alues)21 b(with)i(this)f(constan)n(t)g(b)r(ecause)g
-(the)g(result)g(is)g(alw)n(a)n(ys)e Fm(<)p Fk(bad)p Fm(>)p
-Fk(.)34 b(The)22 b(ISBAD\(\))427 1905 y(function)28 b(should)g(b)r(e)g
-(used)f(instead.)340 2036 y Fj(\017)45 b Fm(<)p Fk(dig)p
-Fm(>)p Fk(:)36 b(Num)n(b)r(er)27 b(of)f(decimal)h(digits)g(of)f
-(precision)g(a)n(v)-5 b(ailable)26 b(in)h(a)f(\015oating)g(p)r(oin)n(t)
-h(\(double)g(precision\))427 2135 y(v)-5 b(alue.)340
-2266 y Fj(\017)45 b Fm(<)p Fk(e)p Fm(>)p Fk(:)36 b(Base)27
-b(of)g(natural)g(logarithms.)340 2397 y Fj(\017)45 b
-Fm(<)p Fk(epsilon)p Fm(>)p Fk(:)35 b(Smallest)24 b(p)r(ositiv)n(e)h(n)n
-(um)n(b)r(er)f(suc)n(h)h(that)g(1.0+)p Fm(<)p Fk(epsilon)p
-Fm(>)d Fk(is)j(distinguishable)g(from)f(unit)n(y)-7 b(.)340
-2527 y Fj(\017)45 b Fm(<)p Fk(man)n(t)p Ft(_)p Fk(dig)p
-Fm(>)p Fk(:)37 b(The)29 b(n)n(um)n(b)r(er)f(of)g(base)g
-Fm(<)p Fk(radix)p Fm(>)f Fk(digits)h(stored)g(in)g(the)h(man)n(tissa)e
-(of)i(a)f(\015oating)f(p)r(oin)n(t)427 2627 y(\(double)h(precision\))f
-(v)-5 b(alue.)340 2758 y Fj(\017)45 b Fm(<)p Fk(max)p
-Fm(>)p Fk(:)36 b(Maxim)n(um)27 b(represen)n(table)f(\015oating)h(p)r
-(oin)n(t)h(\(double)g(precision\))f(v)-5 b(alue.)340
-2888 y Fj(\017)45 b Fm(<)p Fk(max)p Ft(_)p Fk(10)p Ft(_)p
-Fk(exp)p Fm(>)p Fk(:)37 b(Maxim)n(um)28 b(in)n(teger)h(suc)n(h)f(that)h
-(10)g(raised)f(to)g(that)i(p)r(o)n(w)n(er)d(can)i(b)r(e)g(represen)n
-(ted)f(as)427 2988 y(a)f(\015oating)g(p)r(oin)n(t)h(\(double)g
-(precision\))f(v)-5 b(alue.)340 3118 y Fj(\017)45 b Fm(<)p
-Fk(max)p Ft(_)p Fk(exp)p Fm(>)p Fk(:)56 b(Maxim)n(um)38
-b(in)n(teger)f(suc)n(h)g(that)h Fm(<)p Fk(radix)p Fm(>)f
-Fk(raised)f(to)i(that)h(p)r(o)n(w)n(er)d(min)n(us)i(1)g(can)f(b)r(e)427
-3218 y(represen)n(ted)27 b(as)g(a)g(\015oating)g(p)r(oin)n(t)g
-(\(double)h(precision\))f(v)-5 b(alue.)340 3349 y Fj(\017)45
-b Fm(<)p Fk(min)p Fm(>)p Fk(:)h(Smallest)32 b(p)r(ositiv)n(e)f(n)n(um)n
-(b)r(er)h(whic)n(h)g(can)g(b)r(e)g(represen)n(ted)f(as)h(a)f
-(normalised)g(\015oating)g(p)r(oin)n(t)427 3448 y(\(double)d
-(precision\))f(v)-5 b(alue.)340 3579 y Fj(\017)45 b Fm(<)p
-Fk(min)p Ft(_)p Fk(10)p Ft(_)p Fk(exp)p Fm(>)p Fk(:)39
-b(Minim)n(um)30 b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h(10)f
-(raised)f(to)i(that)f(p)r(o)n(w)n(er)g(can)g(b)r(e)h(repre-)427
-3679 y(sen)n(ted)e(as)f(a)g(normalised)f(\015oating)h(p)r(oin)n(t)h
-(\(double)g(precision\))f(v)-5 b(alue.)340 3809 y Fj(\017)45
-b Fm(<)p Fk(min)p Ft(_)p Fk(exp)p Fm(>)p Fk(:)35 b(Minim)n(um)25
-b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h Fm(<)p
-Fk(radix)p Fm(>)e Fk(raised)h(to)g(that)h(p)r(o)n(w)n(er)e(min)n(us)i
-(1)f(can)427 3909 y(b)r(e)k(represen)n(ted)f(as)g(a)g(normalised)f
-(\015oating)h(p)r(oin)n(t)h(\(double)g(precision\))e(v)-5
-b(alue.)340 4040 y Fj(\017)45 b Fm(<)p Fk(pi)p Fm(>)p
-Fk(:)37 b(Ratio)27 b(of)g(the)h(circumference)f(of)h(a)f(circle)g(to)g
-(its)h(diameter.)340 4170 y Fj(\017)45 b Fm(<)p Fk(radix)p
-Fm(>)p Fk(:)38 b(The)29 b(radix)f(\(n)n(um)n(b)r(er)h(base\))g(used)g
-(to)f(represen)n(t)g(the)h(man)n(tissa)f(of)h(\015oating)f(p)r(oin)n(t)
-h(\(double)427 4270 y(precision\))e(v)-5 b(alues.)340
-4400 y Fj(\017)45 b Fm(<)p Fk(rounds)p Fm(>)p Fk(:)35
-b(The)26 b(mo)r(de)g(used)g(for)f(rounding)g(\015oating)g(p)r(oin)n(t)h
-(results)g(after)f(addition.)37 b(P)n(ossible)24 b(v)-5
-b(alues)427 4500 y(include:)49 b(-1)32 b(\(indeterminate\),)k(0)d(\(to)
-n(w)n(ard)f(zero\),)h(1)g(\(to)h(nearest\),)g(2)f(\(to)n(w)n(ard)f
-(plus)h(in\014nit)n(y\))h(and)f(3)427 4600 y(\(to)n(w)n(ard)27
-b(min)n(us)g(in\014nit)n(y\).)38 b(Other)27 b(v)-5 b(alues)27
-b(indicate)h(mac)n(hine-dep)r(enden)n(t)f(b)r(eha)n(viour.)-2
-4759 y Fc(Ev)-5 b(aluation)32 b(Precedence)g(and)h(Asso)s(ciativit)m(y)
-n(:)227 4906 y Fk(Items)28 b(app)r(earing)e(in)i(expressions)e(are)h
-(ev)-5 b(aluated)27 b(in)h(the)g(follo)n(wing)e(order)h(\(highest)g
-(precedence)g(\014rst\):)340 5040 y Fj(\017)45 b Fk(Constan)n(ts)27
-b(and)g(v)-5 b(ariables)340 5170 y Fj(\017)45 b Fk(F)-7
-b(unction)28 b(argumen)n(ts)f(and)g(paren)n(thesised)f(expressions)340
-5301 y Fj(\017)45 b Fk(F)-7 b(unction)28 b(in)n(v)n(o)r(cations)340
-5432 y Fj(\017)45 b Fk(Unary)27 b(+)g(-)h(!)37 b(.not.)340
-5562 y Fj(\017)45 b(\003\003)340 5693 y(\017)g(\003)27
-b Fk(/)p eop end
-%%Page: 279 289
-TeXDict begin 279 288 bop 3643 52 a FG(279)340 351 y
-Fj(\017)45 b Fk(+)28 b(-)340 482 y Fj(\017)45 b Fm(<<)27
-b(>>)340 613 y Fj(\017)45 b Fm(<)28 b Fk(.lt.)37 b Fm(<)p
-Fk(=)27 b(.le.)37 b Fm(>)27 b Fk(.gt.)37 b Fm(>)p Fk(=)27
-b(.ge.)340 744 y Fj(\017)45 b Fk(==)27 b(.eq.)37 b(!=)27
-b(.ne.)340 875 y Fj(\017)45 b Fk(&)340 1006 y Fj(\017)g(^)340
-1137 y(\017)g(j)340 1267 y(\017)g Fk(&&)27 b(.and.)340
-1398 y Fj(\017)45 b(^^)340 1529 y(\017)g(jj)28 b Fk(.or)340
-1660 y Fj(\017)45 b Fk(.eqv.)37 b(.neqv.)g(.xor.)227
-1820 y(All)j(op)r(erators)e(asso)r(ciate)g(from)i(left-to-righ)n(t,)h
-(except)f(for)f(unary)g(+,)j(unary)d(-,)k(!,)f(.not.)73
-b(and)40 b Fj(\003\003)f Fk(whic)n(h)227 1920 y(asso)r(ciate)26
-b(from)i(righ)n(t-to-left.)p 0 2115 3780 12 v 0 2246
-a FA(AST)p Fe(_)p FA(MA)-11 b(TRIXMAP)1672 2245 y Fd(Create)37
-b(a)1599 2345 y(MatrixMap)2564 2246 y FA(AST)p Fe(_)p
-FA(MA)-11 b(TRIXMAP)0 2530 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(MatrixMap)g(and)h(optionally)e
-(initialises)i(its)f(attributes.)227 2653 y(A)32 b(MatrixMap)e(is)h(a)f
-(form)h(of)g(Mapping)g(whic)n(h)g(p)r(erforms)f(a)g(general)g(linear)g
-(transformation.)46 b(Eac)n(h)30 b(set)h(of)227 2753
-y(input)j(co)r(ordinates,)g(regarded)d(as)i(a)g(column-v)n(ector,)g
-(are)f(pre-m)n(ultiplied)h(b)n(y)g(a)g(matrix)g(\(whose)g(elemen)n(ts)
-227 2853 y(are)c(sp)r(eci\014ed)h(when)g(the)g(MatrixMap)f(is)g
-(created\))g(to)h(giv)n(e)e(a)i(new)f(column-v)n(ector)f(con)n(taining)
-h(the)h(output)227 2952 y(co)r(ordinates.)36 b(If)28
-b(appropriate,)e(the)i(in)n(v)n(erse)e(transformation)g(ma)n(y)h(also)f
-(b)r(e)i(p)r(erformed.)0 3100 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_MATRIXMAP\()38 b(NIN,)k(NOUT,)f(FORM,)h
-(MATRIX,)e(OPTIONS,)h(STATUS)g(\))0 3247 y Fc(Argumen)m(ts:)259
-3382 y(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3481 y
-Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates,)e(whic)n(h)i
-(determines)f(the)h(n)n(um)n(b)r(er)g(of)f(columns)h(in)f(the)h
-(matrix.)259 3612 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))427
-3712 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates,)e(whic)
-n(h)i(determines)f(the)h(n)n(um)n(b)r(er)f(of)h(ro)n(ws)e(in)i(the)g
-(matrix.)259 3843 y Fc(F)m(ORM)j(=)h(INTEGER)g(\(Giv)m(en\))427
-3942 y Fk(An)c(in)n(teger)f(whic)n(h)h(indicates)f(the)h(form)f(in)h
-(whic)n(h)g(the)g(matrix)f(elemen)n(ts)g(will)h(b)r(e)g(supplied.)427
-4057 y(A)j(v)-5 b(alue)30 b(of)g(zero)f(indicates)h(that)g(a)g(full)h
-(NOUT)f(x)g(NIN)h(matrix)e(of)h(v)-5 b(alues)30 b(will)h(b)r(e)f
-(supplied)h(via)e(the)427 4157 y(MA)-7 b(TRIX)36 b(argumen)n(t)d(\(b)r
-(elo)n(w\).)59 b(In)35 b(this)g(case,)g(the)g(elemen)n(ts)g(should)f(b)
-r(e)h(giv)n(en)f(in)h(ro)n(w)f(order)f(\(the)427 4257
-y(elemen)n(ts)28 b(of)f(the)h(\014rst)g(ro)n(w,)e(follo)n(w)n(ed)h(b)n
-(y)g(the)h(elemen)n(ts)f(of)h(the)g(second)f(ro)n(w,)f(etc.\).)427
-4372 y(A)34 b(v)-5 b(alue)34 b(of)g(1)f(indicates)g(that)h(only)f(the)i
-(diagonal)d(elemen)n(ts)h(of)h(the)g(matrix)f(will)h(b)r(e)g(supplied,)
-i(and)427 4472 y(that)25 b(all)g(others)e(should)i(b)r(e)g(zero.)35
-b(In)25 b(this)f(case,)h(the)g(elemen)n(ts)f(of)h(MA)-7
-b(TRIX)26 b(should)e(con)n(tain)g(only)g(the)427 4571
-y(diagonal)i(elemen)n(ts,)i(stored)f(consecutiv)n(ely)-7
-b(.)427 4686 y(A)32 b(v)-5 b(alue)32 b(of)f(2)h(indicates)f(that)h(a)f
-Ft(")p Fk(unit)p Ft(")h Fk(matrix)f(is)g(required,)h(whose)f(diagonal)f
-(elemen)n(ts)h(are)g(set)h(to)427 4786 y(unit)n(y)c(\(with)g(all)g
-(other)f(elemen)n(ts)g(zero\).)36 b(In)28 b(this)g(case,)f(the)h(MA)-7
-b(TRIX)28 b(argumen)n(t)f(is)g(not)h(used.)259 4917 y
-Fc(MA)-8 b(TRIX\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en\))427 5017 y Fk(The)d(arra)n(y)d(of)j(matrix)f(elemen)n(ts)
-g(to)h(b)r(e)g(used,)f(stored)g(according)f(to)h(the)h(v)-5
-b(alue)28 b(of)f(F)n(ORM.)259 5147 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-5247 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-5347 y(b)r(e)38 b(used)f(for)g(initialising)f(the)i(new)f(MatrixMap.)65
-b(The)37 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)h(for)e
-(the)427 5446 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 280 290
-TeXDict begin 280 289 bop 0 52 a FG(280)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 489 y(AST)p Ft(_)p Fc(MA)g(TRIXMAP)33 b(=)f(INTEGER)427
-588 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(MatrixMap.)0
-752 y Fc(Notes:)340 1035 y Fj(\017)45 b Fk(In)32 b(general,)e(a)h
-(MatrixMap's)f(forw)n(ard)g(transformation)f(will)j(alw)n(a)n(ys)d(b)r
-(e)j(a)n(v)-5 b(ailable)30 b(\(as)h(indicated)g(b)n(y)427
-1135 y(its)h(T)-7 b(ranF)g(orw)n(ard)29 b(attribute\),)k(but)f(its)f
-(in)n(v)n(erse)f(transformation)g(\(T)-7 b(ranIn)n(v)n(erse)29
-b(attribute\))j(will)g(only)427 1234 y(b)r(e)c(a)n(v)-5
-b(ailable)27 b(if)h(the)g(asso)r(ciated)e(matrix)h(is)g(square)g(and)g
-(non-singular.)340 1368 y Fj(\017)45 b Fk(As)32 b(an)f(exception)f(to)i
-(this,)g(the)g(in)n(v)n(erse)d(transformation)h(is)h(alw)n(a)n(ys)e(a)n
-(v)-5 b(ailable)30 b(if)i(a)f(unit)h(or)e(diagonal)427
-1467 y(matrix)19 b(is)g(sp)r(eci\014ed.)35 b(In)19 b(this)h(case,)g(if)
-g(the)g(matrix)f(is)g(not)h(square,)f(one)g(or)g(more)f(of)i(the)g
-(input)g(co)r(ordinate)427 1567 y(v)-5 b(alues)28 b(ma)n(y)f(not)h(b)r
-(e)g(reco)n(v)n(erable)d(from)i(a)g(set)h(of)g(output)g(co)r
-(ordinates.)36 b(An)n(y)28 b(co)r(ordinates)e(a\013ected)i(in)427
-1667 y(this)g(w)n(a)n(y)f(will)g(simply)h(b)r(e)g(set)g(to)f(the)h(v)-5
-b(alue)28 b(zero.)340 1800 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1900 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-2063 y Fc(Status)33 b(Handling)n(:)227 2209 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 2309 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2408 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2609 3780 12 v 0 2739 a FA(AST)p
-Fe(_)p FA(NEGA)-11 b(TE)1093 2740 y Fd(Negate)37 b(the)i(area)e
-(represen)m(ted)h(b)m(y)1665 2853 y(a)g(Region)2877 2739
-y FA(AST)p Fe(_)p FA(NEGA)-11 b(TE)0 3043 y Fc(Description:)44
-b Fk(This)d(function)f(negates)g(the)g(area)f(represen)n(ted)g(b)n(y)h
-(a)g(Region.)74 b(That)40 b(is,)j(p)r(oin)n(ts)d(whic)n(h)h(w)n(ere)227
-3143 y(previously)22 b(inside)h(the)h(region)e(will)h(then)h(b)r(e)f
-(outside,)h(and)f(p)r(oin)n(ts)g(whic)n(h)g(w)n(ere)f(outside)h(will)h
-(b)r(e)f(inside.)36 b(This)227 3243 y(is)28 b(acomplished)f(b)n(y)g
-(toggling)f(the)i(state)g(of)f(the)h(Negated)f(attribute)h(for)f(the)h
-(supplied)g(region.)0 3393 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_NEGATE\()d(THIS,)i(STATUS)g(\))0 3544
-y Fc(Argumen)m(ts:)259 3681 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-3781 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259 3915
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4014 y Fk(The)c(global)e(status.)p 0 4215 V 0 4345
-a FA(AST)p Fe(_)p FA(NORM)937 4346 y Fd(Normalise)36
-b(a)j(set)f(of)h(F)-10 b(rame)38 b(co)s(ordinates)3014
-4345 y FA(AST)p Fe(_)p FA(NORM)0 4523 y Fc(Description:)44
-b Fk(This)32 b(routine)f(normalises)f(a)h(set)h(of)f(F)-7
-b(rame)31 b(co)r(ordinate)f(v)-5 b(alues)32 b(whic)n(h)f(migh)n(t)h(b)r
-(e)f(unsuitable)h(for)227 4623 y(displa)n(y)23 b(\(e.g.)35
-b(ma)n(y)22 b(lie)h(outside)g(the)h(exp)r(ected)f(range\))f(in)n(to)h
-(a)g(set)g(of)g(acceptable)f(v)-5 b(alues)23 b(suitable)g(for)f(displa)
-n(y)-7 b(.)0 4773 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_NORM\()e(THIS,)h(VALUE,)g(STATUS)g(\))0 4924 y
-Fc(Argumen)m(ts:)259 5061 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5161 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259
-5295 y Fc(V)c(ALUE\()33 b Fj(\003)f Fc(\))g(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en)h(and)h(Returned\))427 5394 y Fk(An)21 b(arra)n(y)c(with)k
-(one)f(elemen)n(t)g(for)f(eac)n(h)g(F)-7 b(rame)20 b(axis)f(\(Naxes)h
-(attribute\).)35 b(Initially)-7 b(,)21 b(this)g(should)e(con)n(tain)427
-5494 y(a)34 b(set)g(of)g(co)r(ordinate)f(v)-5 b(alues)33
-b(represen)n(ting)g(a)h(p)r(oin)n(t)g(in)g(the)g(space)g(whic)n(h)g
-(the)g(F)-7 b(rame)34 b(describ)r(es.)55 b(If)427 5593
-y(these)33 b(v)-5 b(alues)32 b(lie)h(outside)g(the)g(exp)r(ected)g
-(range)e(for)i(the)g(F)-7 b(rame,)33 b(they)g(will)g(b)r(e)g(replaced)f
-(with)h(more)427 5693 y(acceptable)27 b(\(normalised\))g(v)-5
-b(alues.)37 b(Otherwise,)26 b(they)i(will)g(b)r(e)g(returned)f(unc)n
-(hanged.)p eop end
-%%Page: 281 291
-TeXDict begin 281 290 bop 3643 52 a FG(281)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 611 y Fc(Notes:)340
-892 y Fj(\017)45 b Fk(F)-7 b(or)34 b(some)f(classes)g(of)h(F)-7
-b(rame,)36 b(whose)d(co)r(ordinate)g(v)-5 b(alues)34
-b(are)f(not)h(constrained,)h(this)g(function)f(will)427
-992 y(nev)n(er)d(mo)r(dify)h(the)g(v)-5 b(alues)31 b(supplied.)49
-b(Ho)n(w)n(ev)n(er,)31 b(for)g(F)-7 b(rames)30 b(whose)h(axes)g
-(represen)n(t)f(cyclic)h(quan)n(ti-)427 1092 y(ties)i(\(suc)n(h)f(as)f
-(angles)h(or)f(p)r(ositions)h(on)g(the)g(sky\),)h(co)r(ordinates)e
-(will)i(t)n(ypically)e(b)r(e)i(wrapp)r(ed)f(in)n(to)g(an)427
-1191 y(appropriate)26 b(standard)h(range,)f(suc)n(h)h(as)g(zero)g(to)g
-(2)p Fj(\003)p Fk(pi.)340 1323 y Fj(\017)45 b Fk(The)31
-b(NormMap)e(class)h(is)g(a)g(Mapping)f(whic)n(h)i(can)f(b)r(e)g(used)h
-(to)f(normalise)f(a)h(set)g(of)g(p)r(oin)n(ts)g(using)g(the)427
-1422 y(AST)p Ft(_)p Fk(NORM)e(routine)f(of)h(a)f(sp)r(eci\014ed)h(F)-7
-b(rame.)340 1554 y Fj(\017)45 b Fk(It)d(is)g(in)n(tended)g(to)f(b)r(e)h
-(p)r(ossible)f(to)h(put)g(an)n(y)f(set)g(of)h(co)r(ordinates)e(in)n(to)
-h(a)g(form)g(suitable)h(for)f(dis-)427 1653 y(pla)n(y)c(b)n(y)h(using)f
-(this)h(function)g(to)g(normalise)e(them,)41 b(follo)n(w)n(ed)36
-b(b)n(y)i(appropriate)e(formatting)h(\(using)427 1753
-y(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T\).)p 0 1949 3780 12
-v 0 2080 a FA(AST)p Fe(_)p FA(NORMMAP)1392 2079 y Fd(Create)37
-b(a)i(NormMap)2693 2080 y FA(AST)p Fe(_)p FA(NORMMAP)0
-2265 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(NormMap)g(and)h(optionally)e(initialises)i(its)g(attributes.)227
-2389 y(A)k(NormMap)e(is)i(a)e(Mapping)h(whic)n(h)g(normalises)f(co)r
-(ordinate)g(v)-5 b(alues)31 b(using)g(the)h(AST)p Ft(_)p
-Fk(NORM)f(routine)g(of)227 2489 y(the)38 b(supplied)g(F)-7
-b(rame.)65 b(The)37 b(n)n(um)n(b)r(er)h(of)f(inputs)h(and)f(outputs)g
-(of)h(a)f(NormMap)f(are)g(b)r(oth)i(equal)f(to)g(the)227
-2588 y(n)n(um)n(b)r(er)28 b(of)f(axes)g(in)h(the)g(supplied)g(F)-7
-b(rame.)227 2712 y(The)26 b(forw)n(ard)f(and)h(in)n(v)n(erse)e
-(transformation)h(of)h(a)f(NormMap)h(are)f(b)r(oth)h(de\014ned)g(but)h
-(are)e(iden)n(tical)h(\(that)h(is,)227 2812 y(they)h(do)g(not)f(form)h
-(a)f(real)g(in)n(v)n(erse)f(pair)h(in)h(that)g(the)g(in)n(v)n(erse)e
-(transformation)g(do)r(es)i(not)f(undo)h(the)g(normal-)227
-2911 y(isation,)h(instead)f(it)i(reapplies)d(it\).)42
-b(Ho)n(w)n(ev)n(er,)27 b(the)i(AST)p Ft(_)p Fk(SIMPLIFY)g(function)g
-(will)g(replace)f(neigh)n(b)r(ouring)227 3011 y(pairs)f(of)g(forw)n
-(ard)f(and)i(in)n(v)n(erse)e(NormMaps)h(b)n(y)g(a)g(single)g(UnitMap.)0
-3159 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_NORMMAP\()c
-(FRAME,)i(OPTIONS,)f(STATUS)h(\))0 3307 y Fc(Argumen)m(ts:)259
-3442 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 3542
-y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(F)-7 b(rame)27 b(whic)n(h)g(is)h
-(to)f(b)r(e)h(used)g(to)f(normalise)g(the)h(supplied)g(axis)e(v)-5
-b(alues.)259 3673 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3773 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3872 y(used)h(for)f(initialising)h(the)g(new)g(NormMap.)34
-b(The)22 b(syn)n(tax)f(used)h(is)f(iden)n(tical)h(to)f(that)i(for)e
-(the)h(AST)p Ft(_)p Fk(SET)427 3972 y(routine.)259 4103
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4203 y Fk(The)c(global)e(status.)0 4363 y Fc(Returned)32
-b(V)-8 b(alue:)259 4498 y(AST)p Ft(_)p Fc(NORMMAP)31
-b(=)h(INTEGER)427 4598 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(NormMap.)0 4758 y Fc(Notes:)340 5039 y Fj(\017)45 b
-Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5139
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 5299 y Fc(Status)33
-b(Handling)n(:)227 5445 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5545 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 5645 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 282 292
-TeXDict begin 282 291 bop 0 52 a FG(282)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(NULLREGION)419 b Fd(Create)37
-b(a)1604 581 y(NullRegion)2527 482 y FA(AST)p Fe(_)p
-FA(NULLREGION)0 754 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(NullRegion)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 874 y(A)k(NullRegion)f(is)f(a)h
-(Region)g(with)g(no)g(b)r(ounds.)47 b(If)32 b(the)f(Negated)g
-(attribute)g(of)g(a)g(NullRegion)g(is)g(false,)g(the)227
-974 y(NullRegion)k(represen)n(ts)f(a)g(Region)g(con)n(taining)g(no)h(p)
-r(oin)n(ts.)59 b(If)35 b(the)h(Negated)e(attribute)h(of)g(a)g
-(NullRegion)227 1073 y(is)f(true,)h(the)f(NullRegion)f(represen)n(ts)f
-(an)h(in\014nite)i(Region)d(con)n(taining)h(all)g(p)r(oin)n(ts)h
-(within)g(the)g(co)r(ordinate)227 1173 y(system.)0 1314
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_NULLREGION\()37
-b(FRAME,)42 b(UNC,)f(OPTIONS,)g(STATUS)g(\))0 1455 y
-Fc(Argumen)m(ts:)259 1584 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427
-1683 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-1783 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 1882 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 2007 y Fc(UNC)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 2107 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)
-g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r
-(ciated)g(with)427 2206 y(p)r(ositions)37 b(in)h(the)g(supplied)g(F)-7
-b(rame.)65 b(The)38 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g
-(in)h(the)g(F)-7 b(rame)37 b(is)g(found)h(b)n(y)427 2306
-y(shifting)25 b(the)f(supplied)g Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")f Fk(Region)g(so)g(that)h(it)h(is)f(cen)n(tred)f(at)h(the)g(p)r
-(oin)n(t)g(b)r(eing)h(considered.)427 2406 y(The)34 b(area)e(co)n(v)n
-(ered)g(b)n(y)i(the)g(shifted)g(uncertain)n(t)n(y)f(Region)g(then)i
-(represen)n(ts)d(the)i(uncertain)n(t)n(y)f(in)h(the)427
-2505 y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g
-(b)r(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)427 2617
-y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r
-(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n
-(tro-)427 2717 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 2817
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 2916 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r
-(oin)n(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f
-(Bo)n(x.)57 b(Al-)427 3016 y(ternativ)n(ely)-7 b(,)34
-b(a)f(n)n(ull)g(Ob)5 b(ject)33 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)i(supplied,)h(in)e(whic)n(h)g(case)f
-(a)h(default)427 3115 y(uncertain)n(t)n(y)27 b(of)h(zero)e(is)i(used.)
-259 3240 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f
-Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3340 y Fk(A)g(c)n(haracter)e
-(string)h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3439 y(b)r(e)38
-b(used)g(for)f(initialising)g(the)h(new)g(NullRegion.)67
-b(The)38 b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)h(for)f
-(the)427 3539 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-3664 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3763 y Fk(The)c(global)e(status.)0 3917
-y Fc(Returned)32 b(V)-8 b(alue:)259 4045 y(AST)p Ft(_)p
-Fc(NULLREGION)32 b(=)g(INTEGER)427 4145 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(NullRegion.)0 4298 y Fc(Notes:)340 4573
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4672 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 4855 V 0
-4986 a FA(AST)p Fe(_)p FA(OFFSET)1208 4987 y Fd(Calculate)36
-b(an)j(o\013set)g(along)e(a)1524 5101 y(geo)s(desic)h(curv)m(e)2922
-4986 y FA(AST)p Fe(_)p FA(OFFSET)0 5274 y Fc(Description:)44
-b Fk(This)20 b(routine)f(\014nds)h(the)f(F)-7 b(rame)19
-b(co)r(ordinate)g(v)-5 b(alues)19 b(of)g(a)g(p)r(oin)n(t)h(whic)n(h)f
-(is)h(o\013set)f(a)g(sp)r(eci\014ed)h(distance)227 5373
-y(along)27 b(the)h(geo)r(desic)e(curv)n(e)h(b)r(et)n(w)n(een)g(t)n(w)n
-(o)g(other)g(p)r(oin)n(ts.)227 5494 y(F)-7 b(or)28 b(example,)h(in)f(a)
-h(basic)f(F)-7 b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e
-(the)i(straigh)n(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40
-b(F)-7 b(or)28 b(a)227 5593 y(more)h(sp)r(ecialised)h(F)-7
-b(rame)29 b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n
-(ev)n(er,)d(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227
-5693 y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)p
-eop end
-%%Page: 283 293
-TeXDict begin 283 292 bop 3643 52 a FG(283)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_OFFSET\()d(THIS,)i(POINT1,)g(POINT2,)g
-(OFFSET,)f(POINT3,)h(STATUS)g(\))0 513 y Fc(Argumen)m(ts:)259
-661 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 761 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 900
-y Fc(POINT1\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 999 y Fk(An)h(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g(eac)
-n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g(attribute\).)48
-b(This)32 b(should)f(con)n(tain)f(the)427 1099 y(co)r(ordinates)c(of)i
-(the)g(p)r(oin)n(t)g(marking)e(the)i(start)f(of)h(the)g(geo)r(desic)e
-(curv)n(e.)259 1238 y Fc(POINT2\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h
-(PRECISION)e(\(Giv)m(en\))427 1337 y Fk(An)g(arra)n(y)c(with)k(one)f
-(elemen)n(t)g(for)f(eac)n(h)g(F)-7 b(rame)30 b(axis.)43
-b(This)30 b(should)g(con)n(tain)f(the)i(co)r(ordinates)d(of)i(the)427
-1437 y(p)r(oin)n(t)e(marking)e(the)i(end)g(of)g(the)g(geo)r(desic)e
-(curv)n(e.)259 1576 y Fc(OFFSET)32 b(=)g(DOUBLE)g(PRECISION)427
-1676 y Fk(The)27 b(required)e(o\013set)i(from)f(the)h(\014rst)f(p)r
-(oin)n(t)g(along)g(the)g(geo)r(desic)g(curv)n(e.)35 b(If)27
-b(this)g(is)f(p)r(ositiv)n(e,)h(it)g(will)f(b)r(e)427
-1775 y(to)n(w)n(ards)20 b(the)i(second)f(p)r(oin)n(t.)35
-b(If)22 b(it)g(is)f(negativ)n(e,)h(it)g(will)f(b)r(e)h(in)g(the)g(opp)r
-(osite)f(direction.)35 b(This)21 b(o\013set)g(need)427
-1875 y(not)28 b(imply)g(a)f(p)r(osition)h(lying)f(b)r(et)n(w)n(een)h
-(the)g(t)n(w)n(o)f(p)r(oin)n(ts)h(giv)n(en,)f(as)g(the)h(curv)n(e)e
-(will)i(b)r(e)g(extrap)r(olated)f(if)427 1974 y(necessary)-7
-b(.)259 2113 y Fc(POINT3\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h
-(PRECISION)e(\(Returned\))427 2213 y Fk(An)25 b(arra)n(y)c(with)k(one)e
-(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)24 b(axis)f(in)h(whic)n(h)g
-(the)g(co)r(ordinates)f(of)h(the)g(required)f(p)r(oin)n(t)427
-2313 y(will)28 b(b)r(e)g(returned.)259 2451 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2551 y Fk(The)c(global)e(status.)0 2725 y Fc(Notes:)340
-3020 y Fj(\017)45 b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g
-(this)g(routine)g(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts,)427 3119 y(as)f(de\014ned)h(b)n(y)
-f(the)h(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340
-3258 y Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 3358 y(has)27 b(this)h(v)-5 b(alue.)340
-3497 y Fj(\017)45 b Ft(")p Fk(Bad)p Ft(")32 b Fk(co)r(ordinate)f(v)-5
-b(alues)32 b(will)h(also)e(b)r(e)i(returned)f(if)h(the)g(t)n(w)n(o)f(p)
-r(oin)n(ts)g(supplied)h(are)f(coinciden)n(t)g(\(or)427
-3596 y(otherwise)27 b(fail)h(to)f(uniquely)h(sp)r(ecify)g(a)f(geo)r
-(desic)g(curv)n(e\))f(but)j(the)f(requested)f(o\013set)g(is)h
-(non-zero.)p 0 3808 3780 12 v 0 3938 a FA(AST)p Fe(_)p
-FA(OFFSET2)1208 3939 y Fd(Calculate)36 b(an)j(o\013set)g(along)e(a)1133
-4054 y(geo)s(desic)i(curv)m(e)f(in)g(a)h(2D)g(F)-10 b(rame)2854
-3938 y FA(AST)p Fe(_)p FA(OFFSET2)0 4255 y Fc(Description:)44
-b Fk(This)20 b(routine)f(\014nds)h(the)f(F)-7 b(rame)19
-b(co)r(ordinate)g(v)-5 b(alues)19 b(of)g(a)g(p)r(oin)n(t)h(whic)n(h)f
-(is)h(o\013set)f(a)g(sp)r(eci\014ed)h(distance)227 4354
-y(along)26 b(the)h(geo)r(desic)f(curv)n(e)g(at)h(a)g(giv)n(en)f(angle)g
-(from)h(a)f(sp)r(eci\014ed)h(starting)g(p)r(oin)n(t.)36
-b(It)28 b(can)e(only)h(b)r(e)g(used)g(with)227 4454 y(2-dimensional)g
-(F)-7 b(rames.)227 4585 y(F)g(or)28 b(example,)h(in)f(a)h(basic)f(F)-7
-b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e(the)i(straigh)n
-(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40 b(F)-7
-b(or)28 b(a)227 4684 y(more)h(sp)r(ecialised)h(F)-7 b(rame)29
-b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n(ev)n(er,)d
-(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227 4784
-y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)0
-4945 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_OFFSET2\()c
-(THIS,)i(POINT1,)g(ANGLE,)g(OFFSET,)g(POINT2,)f(STATUS)h(\))0
-5107 y Fc(Argumen)m(ts:)259 5255 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 5355 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 5494 y Fc(POINT1\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h
-(PRECISION)e(\(Giv)m(en\))427 5593 y Fk(An)h(arra)n(y)d(with)j(one)f
-(elemen)n(t)g(for)g(eac)n(h)g(F)-7 b(rame)30 b(axis)h(\(Naxes)g
-(attribute\).)48 b(This)32 b(should)f(con)n(tain)f(the)427
-5693 y(co)r(ordinates)c(of)i(the)g(p)r(oin)n(t)g(marking)e(the)i(start)
-f(of)h(the)g(geo)r(desic)e(curv)n(e.)p eop end
-%%Page: 284 294
-TeXDict begin 284 293 bop 0 52 a FG(284)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(ANGLE)h(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 451 y Fk(The)d(angle)f(\(in)i(radians\))e
-(from)g(the)i(p)r(ositiv)n(e)e(direction)h(of)g(the)g(second)f(axis,)h
-(to)g(the)g(direction)f(of)h(the)427 551 y(required)38
-b(p)r(osition,)i(as)e(seen)g(from)g(the)g(starting)g(p)r(osition.)68
-b(P)n(ositiv)n(e)37 b(rotation)g(is)h(in)g(the)h(sense)f(of)427
-650 y(rotation)27 b(from)g(the)h(p)r(ositiv)n(e)f(direction)g(of)h
-(axis)f(2)g(to)g(the)h(p)r(ositiv)n(e)g(direction)f(of)g(axis)g(1.)259
-786 y Fc(OFFSET)32 b(=)g(DOUBLE)g(PRECISION)427 885 y
-Fk(The)27 b(required)e(o\013set)i(from)f(the)h(\014rst)f(p)r(oin)n(t)g
-(along)g(the)g(geo)r(desic)g(curv)n(e.)35 b(If)27 b(this)g(is)f(p)r
-(ositiv)n(e,)h(it)g(will)f(b)r(e)427 985 y(in)i(the)g(direction)f(of)h
-(the)g(giv)n(en)f(angle.)36 b(If)28 b(it)g(is)f(negativ)n(e,)g(it)h
-(will)g(b)r(e)g(in)f(the)h(opp)r(osite)g(direction.)259
-1120 y Fc(POINT2\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Returned\))427 1220 y Fk(An)25 b(arra)n(y)c(with)k(one)e(elemen)n(t)
-i(for)e(eac)n(h)g(F)-7 b(rame)24 b(axis)f(in)h(whic)n(h)g(the)g(co)r
-(ordinates)f(of)h(the)g(required)f(p)r(oin)n(t)427 1320
-y(will)28 b(b)r(e)g(returned.)259 1455 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1555
-y Fk(The)c(global)e(status.)0 1722 y Fc(Returned)32 b(V)-8
-b(alue:)259 1864 y(AST)p Ft(_)p Fc(OFFSET2)32 b(=)g(DOUBLE)g(PRECISION)
-427 1964 y Fk(The)27 b(direction)f(of)g(the)h(geo)r(desic)e(curv)n(e)g
-(at)h(the)h(end)g(p)r(oin)n(t.)36 b(That)27 b(is,)f(the)h(angle)e(\(in)
-i(radians\))f(b)r(et)n(w)n(een)427 2063 y(the)35 b(p)r(ositiv)n(e)e
-(direction)h(of)g(the)g(second)f(axis)h(and)g(the)g(con)n(tin)n(uation)
-f(of)h(the)g(geo)r(desic)f(curv)n(e)g(at)h(the)427 2163
-y(requested)29 b(end)h(p)r(oin)n(t.)42 b(P)n(ositiv)n(e)28
-b(rotation)g(is)h(in)h(the)g(sense)f(of)g(rotation)f(from)h(the)h(p)r
-(ositiv)n(e)f(direction)427 2262 y(of)f(axis)f(2)g(to)g(the)h(p)r
-(ositiv)n(e)f(direction)h(of)f(axis)g(1.)0 2430 y Fc(Notes:)340
-2718 y Fj(\017)45 b Fk(The)28 b(geo)r(desic)f(curv)n(e)g(used)h(b)n(y)g
-(this)g(routine)g(is)g(the)g(path)g(of)g(shortest)g(distance)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)g(p)r(oin)n(ts,)427 2817 y(as)f(de\014ned)h(b)n(y)
-f(the)h(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)29 b(function.)340
-2953 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(F)-7 b(rame)27 b(is)g(not)h(2-dimensional.)340
-3088 y Fj(\017)45 b Fk(This)19 b(function)g(will)g(return)f
-Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 3188 y(has)27 b(this)h(v)-5 b(alue.)p
-0 3393 3780 12 v 0 3523 a FA(AST)p Fe(_)p FA(OUTLINE)p
-Fb(<)p FA(X)p Fb(>)313 b Fd(Create)37 b(a)h(new)1486
-3623 y(P)m(olygon)e(outling)1391 3737 y(v)-7 b(alues)39
-b(in)f(a)h(2D)g(data)1789 3837 y(grid)2542 3523 y FA(AST)p
-Fe(_)p FA(OUTLINE)p Fb(<)p FA(X)p Fb(>)0 4031 y Fc(Description:)44
-b Fk(This)27 b(is)g(a)g(set)g(of)g(functions)g(that)g(create)g(a)f(P)n
-(olygon)f(enclosing)h(a)h(single)f(con)n(tiguous)g(set)h(of)g(pixels)
-227 4131 y(that)h(ha)n(v)n(e)f(a)g(sp)r(eci\014ed)h(v)-5
-b(alue)27 b(within)h(a)g(gridded)f(2-dimensional)f(data)h(arra)n(y)e
-(\(e.g.)37 b(an)27 b(image\).)227 4258 y(A)40 b(basic)f(2-dimensional)e
-(F)-7 b(rame)39 b(is)g(used)h(to)f(represen)n(t)f(the)h(pixel)h(co)r
-(ordinate)e(system)h(in)g(the)h(returned)227 4357 y(P)n(olygon.)33
-b(The)21 b(Domain)g(attribute)h(is)f(set)g(to)h Ft(")p
-Fk(PIXEL)p Ft(")p Fk(,)f(the)g(Title)h(attribute)f(is)h(set)f(to)g
-Ft(")p Fk(Pixel)f(co)r(ordinates)p Ft(")p Fk(,)227 4457
-y(and)i(the)h(Unit)f(attribute)h(for)e(eac)n(h)g(axis)h(is)g(set)g(to)g
-Ft(")p Fk(pixel)p Ft(")p Fk(.)34 b(All)22 b(other)g(attributes)g(are)f
-(left)i(unset.)35 b(The)22 b(nature)227 4557 y(of)28
-b(the)g(pixel)f(co)r(ordinate)g(system)g(is)h(determined)f(b)n(y)h
-(parameter)e(ST)-7 b(ARPIX.)227 4684 y(The)33 b(MAXERR)f(and)h(MAXVER)
--7 b(T)33 b(parameters)d(can)i(b)r(e)h(used)f(to)h(con)n(trol)e(ho)n(w)
-g(accurately)g(the)i(returned)227 4783 y(P)n(olygon)28
-b(represen)n(ts)g(the)i(required)f(region)f(in)i(the)g(data)f(arra)n(y)
--7 b(.)41 b(The)30 b(n)n(um)n(b)r(er)f(of)h(v)n(ertices)e(in)i(the)g
-(returned)227 4883 y(P)n(olygon)c(will)h(b)r(e)i(the)e(minim)n(um)i
-(needed)f(to)f(ac)n(hiev)n(e)f(the)i(required)f(accuracy)-7
-b(.)227 5010 y(Y)g(ou)34 b(should)g(use)g(a)f(function)i(whic)n(h)f
-(matc)n(hes)f(the)h(n)n(umerical)f(t)n(yp)r(e)i(of)f(the)g(data)f(y)n
-(ou)g(are)g(pro)r(cessing)g(b)n(y)227 5110 y(replacing)e
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)g(generic)e(function)i(name)g(AST)p
-Ft(_)p Fk(OUTLINE)p Fm(<)p Fk(X)p Fm(>)e Fk(are)h(pro)r(cesing)f(data)h
-(with)h(t)n(yp)r(e)227 5210 y(REAL,)c(y)n(ou)f(should)g(use)g(the)i
-(function)f(AST)p Ft(_)p Fk(OUTLINER)f(\(see)g(the)h
-Ft(")p Fk(Data)f(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fk(section)g(b)r(elo)n
-(w)227 5309 y(for)g(the)h(co)r(des)f(appropriate)f(to)i(other)f(n)n
-(umerical)g(t)n(yp)r(es\).)0 5464 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_OUTLINE)p Fm(<)p Ft(X)p Fm(>)p
-Ft(\()37 b(VALUE,)k(OPER,)h(ARRAY,)f(LBND,)h(UBND,)f(MAXERR,)g
-(MAXVERT,)227 5564 y(INSIDE,)g(STARPIX,)f(STATUS)h(\))0
-5718 y Fc(Argumen)m(ts:)p eop end
-%%Page: 285 295
-TeXDict begin 285 294 bop 3643 52 a FG(285)259 351 y
-Fc(V)-11 b(ALUE)33 b(=)f Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 451 y Fk(A)c(data)f(v)-5 b(alue)28
-b(that)g(sp)r(eci\014es)f(the)h(pixels)g(to)f(b)r(e)h(outlined.)259
-584 y Fc(OPER)j(=)h(INTEGER)g(\(Giv)m(en\))427 684 y
-Fk(Indicates)26 b(ho)n(w)g(the)h(V)-9 b(ALUE)27 b(parameter)e(is)h
-(used)g(to)h(select)f(the)h(outlined)g(pixels.)36 b(It)27
-b(can)f(ha)n(v)n(e)f(an)n(y)h(of)427 783 y(the)i(follo)n(wing)f(v)-5
-b(alues:)510 891 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(L)-7
-b(T:)27 b(outline)h(pixels)g(with)g(v)-5 b(alue)27 b(less)g(than)h(V)-9
-b(ALUE.)510 1007 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(LE:)27
-b(outline)h(pixels)f(with)h(v)-5 b(alue)28 b(less)f(than)g(or)g(equal)g
-(to)h(V)-9 b(ALUE.)510 1124 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(EQ:)27 b(outline)g(pixels)h(with)g(v)-5 b(alue)27
-b(equal)g(to)h(V)-9 b(ALUE.)510 1240 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(NE:)27 b(outline)h(pixels)f(with)i(v)-5 b(alue)27
-b(not)h(equal)f(to)g(V)-9 b(ALUE.)510 1357 y Fj(\017)45
-b Fk(AST)p Ft(__)p Fk(GE:)27 b(outline)h(pixels)f(with)h(v)-5
-b(alue)28 b(greater)e(than)h(or)g(equal)g(to)h(V)-9 b(ALUE.)510
-1473 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(GT:)28 b(outline)f(pixels)h
-(with)g(v)-5 b(alue)27 b(greater)f(than)i(V)-9 b(ALUE.)259
-1606 y Fc(ARRA)h(Y\()32 b Fj(\003)f Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427 1706 y Fk(A)27
-b(2-dimensional)d(arra)n(y)g(con)n(taining)h(the)i(data)e(to)h(b)r(e)h
-(pro)r(cessed.)35 b(The)26 b(n)n(umerical)f(t)n(yp)r(e)i(of)f(this)g
-(arra)n(y)427 1805 y(should)g(matc)n(h)h(the)f(1-)g(or)g(2-c)n
-(haracter)d(t)n(yp)r(e)k(co)r(de)f(app)r(ended)h(to)f(the)h(function)g
-(name)f(\(e.g.)36 b(if)27 b(y)n(ou)f(are)427 1905 y(using)i(AST)p
-Ft(_)p Fk(OUTLINER,)f(the)h(t)n(yp)r(e)g(of)f(eac)n(h)g(arra)n(y)e
-(elemen)n(t)j(should)f(b)r(e)h(REAL\).)427 2022 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-2121 y(dimension)h(v)-5 b(aries)33 b(most)g(rapidly)g(and)h(that)g(of)g
-(the)g(second)f(dimension)h(least)f(rapidly)g(\(i.e.)56
-b(normal)427 2221 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 2354 y Fc(LBND\()32 b(2)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-2454 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)h
-(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g
-(grid)f(along)427 2553 y(eac)n(h)27 b(dimension.)259
-2686 y Fc(UBND\()32 b(2\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-2786 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)f(input)h(grid)f
-(along)427 2886 y(eac)n(h)27 b(dimension.)427 3002 y(Note)i(that)g
-(LBND)g(and)f(UBND)h(together)f(de\014ne)h(the)f(shap)r(e)h(and)f(size)
-g(of)h(the)g(input)g(grid,)f(its)h(exten)n(t)427 3102
-y(along)24 b(a)h(particular)f(\(J'th\))j(dimension)e(b)r(eing)g
-(UBND\(J\)-LBND\(J\)+1.)37 b(They)25 b(also)f(de\014ne)i(the)g(input)
-427 3201 y(grid's)33 b(co)r(ordinate)f(system,)i(eac)n(h)f(pixel)g(ha)n
-(ving)g(unit)h(exten)n(t)f(along)f(eac)n(h)h(dimension)g(with)h(in)n
-(tegral)427 3301 y(co)r(ordinate)27 b(v)-5 b(alues)27
-b(at)g(its)h(cen)n(tre)f(or)g(upp)r(er)h(corner,)e(as)h(selected)g(b)n
-(y)h(parameter)e(ST)-7 b(ARPIX.)259 3434 y Fc(MAXERR)31
-b(=)h(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3534 y Fk(T)-7
-b(ogether)28 b(with)h(MAXVER)-7 b(T,)30 b(this)f(determines)g(ho)n(w)f
-(accurately)g(the)h(returned)f(P)n(olygon)f(represen)n(ts)427
-3633 y(the)32 b(required)e(region)h(of)g(the)h(data)f(arra)n(y)-7
-b(.)46 b(It)31 b(giv)n(es)f(the)i(target)f(discrepancy)f(b)r(et)n(w)n
-(een)h(the)h(returned)427 3733 y(P)n(olygon)23 b(and)h(the)h(accurate)e
-(outline)h(in)h(the)g(data)f(arra)n(y)-7 b(,)23 b(expressed)g(as)h(a)g
-(n)n(um)n(b)r(er)g(of)g(pixels.)36 b(Insignif-)427 3833
-y(ican)n(t)24 b(v)n(ertices)g(are)f(remo)n(v)n(ed)g(from)h(the)h
-(accurate)f(outline,)h(one)f(b)n(y)g(one,)h(un)n(til)g(the)g(n)n(um)n
-(b)r(er)f(of)h(v)n(ertices)427 3932 y(remaining)c(in)i(the)f(returned)g
-(P)n(olygon)d(equals)j(MAXVER)-7 b(T,)22 b(or)f(the)i(largest)d
-(discrepancy)h(b)r(et)n(w)n(een)h(the)427 4032 y(accurate)i(outline)i
-(and)f(the)h(returned)f(P)n(olygon)e(is)j(greater)d(than)j(MAXERR.)g
-(If)g(MAXERR)g(is)f(zero)f(or)427 4131 y(less,)k(its)h(v)-5
-b(alue)28 b(is)g(ignored)f(and)h(the)h(returned)f(P)n(olygon)e(will)i
-(ha)n(v)n(e)f(the)i(n)n(um)n(b)r(er)f(of)g(v)n(ertices)f(sp)r
-(eci\014ed)427 4231 y(b)n(y)h(MAXVER)-7 b(T.)259 4364
-y Fc(MAXVER)f(T)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 4464
-y Fk(T)-7 b(ogether)33 b(with)i(MAXERR,)g(this)g(determines)f(ho)n(w)f
-(accurately)g(the)i(returned)f(P)n(olygon)e(represen)n(ts)427
-4564 y(the)24 b(required)f(region)f(of)h(the)h(data)f(arra)n(y)-7
-b(.)33 b(It)24 b(giv)n(es)e(the)i(maxim)n(um)f(allo)n(w)n(ed)g(n)n(um)n
-(b)r(er)g(of)g(v)n(ertices)f(in)i(the)427 4663 y(returned)30
-b(P)n(olygon.)42 b(Insigni\014can)n(t)30 b(v)n(ertices)f(are)g(remo)n
-(v)n(ed)g(from)h(the)g(accurate)f(outline,)i(one)f(b)n(y)g(one,)427
-4763 y(un)n(til)k(the)g(n)n(um)n(b)r(er)g(of)f(v)n(ertices)g(remaining)
-g(in)h(the)g(returned)f(P)n(olygon)e(equals)i(MAXVER)-7
-b(T,)34 b(or)f(the)427 4862 y(largest)f(discrepancy)g(b)r(et)n(w)n(een)
-i(the)f(accurate)f(outline)i(and)f(the)h(returned)f(P)n(olygon)e(is)i
-(greater)e(than)427 4962 y(MAXERR.)i(If)g(MAXVER)-7 b(T)33
-b(is)f(less)f(than)i(3,)g(its)f(v)-5 b(alue)32 b(is)g(ignored)f(and)h
-(the)h(n)n(um)n(b)r(er)f(of)g(v)n(ertices)f(in)427 5062
-y(the)i(returned)f(P)n(olygon)f(will)i(b)r(e)g(the)g(minim)n(um)g
-(needed)g(to)f(ensure)g(that)h(the)g(discrepancy)f(b)r(et)n(w)n(een)427
-5161 y(the)c(accurate)f(outline)g(and)h(the)g(returned)f(P)n(olygon)e
-(is)j(less)f(than)h(MAXERR.)259 5295 y Fc(INSIDE\()k(2)g(\))g(=)g
-(INTEGER)f(\(Giv)m(en\))427 5394 y Fk(An)40 b(arra)n(y)c(con)n(taining)
-i(the)h(indices)g(of)f(a)h(pixel)g(kno)n(wn)f(to)g(b)r(e)i(inside)e
-(the)i(required)d(region.)70 b(This)427 5494 y(is)33
-b(needed)g(b)r(ecause)f(the)i(supplied)f(data)f(arra)n(y)f(ma)n(y)h
-(con)n(tain)g(sev)n(eral)f(disjoin)n(t)i(areas)e(of)i(pixels)f(that)427
-5593 y(satisfy)25 b(the)g(criterion)f(sp)r(eci\014ed)h(b)n(y)f(V)-9
-b(ALUE)25 b(and)g(OPER.)f(In)h(suc)n(h)f(cases,)g(the)i(area)d(describ)
-r(ed)i(b)n(y)f(the)427 5693 y(returned)h(P)n(olygon)d(will)j(b)r(e)h
-(the)f(one)g(that)g(con)n(tains)f(the)h(pixel)g(sp)r(eci\014ed)g(b)n(y)
-f(INSIDE.)i(If)f(the)g(sp)r(eci\014ed)p eop end
-%%Page: 286 296
-TeXDict begin 286 295 bop 0 52 a FG(286)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(pixel)24
-b(is)f(outside)h(the)g(b)r(ounds)g(giv)n(en)e(b)n(y)i(LBND)g(and)f
-(UBND,)i(or)e(has)g(a)g(v)-5 b(alue)23 b(that)h(do)r(es)g(not)f(meet)h
-(the)427 451 y(criterion)k(sp)r(eci\014ed)h(b)n(y)g(V)-9
-b(ALUE)29 b(and)g(OPER,)e(then)j(this)f(function)g(will)g(searc)n(h)f
-(for)g(a)h(suitable)g(pixel.)427 551 y(The)h(searc)n(h)d(starts)i(at)g
-(the)h(cen)n(tral)e(pixel)i(and)f(pro)r(ceeds)f(in)i(a)f(spiral)f
-(manner)h(un)n(til)h(a)f(pixel)g(is)g(found)427 650 y(that)f(meets)g
-(the)g(sp)r(eci\014ed)g(crierion.)259 769 y Fc(ST)-8
-b(ARPIX)33 b(=)f(LOGICAL)h(\(Giv)m(en\))427 869 y Fk(A)19
-b(\015ag)f(indicating)g(the)h(nature)e(of)i(the)g(pixel)f(co)r
-(ordinate)f(system)h(used)h(to)f(describ)r(e)g(the)h(v)n(ertex)e(p)r
-(ositions)427 968 y(in)33 b(the)g(returned)e(P)n(olygon.)49
-b(If)33 b(.TR)n(UE.,)g(the)g(standard)e(Starlink)h(de\014nition)h(of)f
-(pixel)h(co)r(ordinate)e(is)427 1068 y(used)23 b(in)f(whic)n(h)h(a)f
-(pixel)g(with)h(in)n(teger)f(index)g(I)h(spans)f(a)g(range)f(of)h
-(pixel)h(co)r(ordinate)e(from)h(\(I-1\))g(to)h(I)f(\(i.e.)427
-1167 y(pixel)30 b(corners)f(ha)n(v)n(e)g(in)n(tegral)f(pixel)i(co)r
-(ordinates\).)44 b(If)30 b(.F)-9 b(ALSE.,)31 b(the)f(de\014nition)h(of)
-f(pixel)g(co)r(ordinate)427 1267 y(used)f(b)n(y)g(other)g(AST)g
-(functions)h(suc)n(h)e(as)h(AST)p Ft(_)p Fk(RESAMPLE,)f(AST)p
-Ft(_)p Fk(MASK,)h(etc.,)h(is)f(used.)41 b(In)29 b(this)427
-1367 y(de\014nition,)23 b(a)e(pixel)g(with)h(in)n(teger)f(index)g(I)g
-(spans)g(a)g(range)f(of)h(pixel)g(co)r(ordinate)g(from)f(\(I-0.5\))h
-(to)g(\(I+0.5\))427 1466 y(\(i.e.)38 b(pixel)27 b(cen)n(tres)g(ha)n(v)n
-(e)f(in)n(tegral)h(pixel)g(co)r(ordinates\).)259 1585
-y Fc(BO)m(XSIZE)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1685
-y Fk(The)38 b(full)g(width)g(in)g(pixels)f(of)h(a)f(smo)r(othing)g(b)r
-(o)n(x)g(to)g(b)r(e)h(applied)g(to)f(the)h(p)r(olygon)e(v)n(ertices)h
-(b)r(efore)427 1784 y(do)n(wnsizing)29 b(the)i(p)r(olygon)e(to)i(a)f
-(smaller)f(n)n(um)n(b)r(er)h(of)g(v)n(ertices.)44 b(If)31
-b(an)f(ev)n(en)g(n)n(um)n(b)r(er)g(is)g(supplied,)h(the)427
-1884 y(next)d(larger)e(o)r(dd)i(n)n(um)n(b)r(er)f(is)g(used.)37
-b(V)-7 b(alues)28 b(of)f(one)g(or)g(zero)g(result)g(in)h(no)f(smo)r
-(othing.)259 2003 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 2103 y Fk(The)c(global)e(status.)0
-2250 y Fc(Returned)32 b(V)-8 b(alue:)259 2373 y(AST)p
-Ft(_)p Fc(OUTLINE)p Fm(<)p Fc(X)p Fm(>)32 b Fc(=)g(INTEGER)427
-2472 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(pixels)f(to)h(whic)n(h)f(a)g(v)
--5 b(alue)28 b(of)f(BAD)n(V)-9 b(AL)28 b(has)g(b)r(een)g(assigned.)0
-2620 y Fc(Notes:)340 2889 y Fj(\017)45 b Fk(This)27 b(function)h(pro)r
-(ceeds)e(b)n(y)h(\014rst)g(\014nding)g(a)g(v)n(ery)f(accurate)g(p)r
-(olygon,)g(and)h(then)h(remo)n(ving)d(insigni\014-)427
-2988 y(can)n(t)i(v)n(ertices)g(from)g(this)h(\014ne)g(p)r(olygon)f
-(using)g(AST)p Ft(_)p Fk(DO)n(WNSIZE.)340 3107 y Fj(\017)45
-b Fk(The)27 b(returned)g(P)n(olygon)d(is)j(the)h(outer)e(b)r(oundary)g
-(of)h(the)g(con)n(tiguous)f(set)h(of)f(pixels)h(that)g(includes)g(ths)
-427 3207 y(sp)r(eci\014ed)k Ft(")p Fk(inside)p Ft(")f
-Fk(p)r(oin)n(t,)i(and)f(satisfy)f(the)h(sp)r(eci\014ed)g(v)-5
-b(alue)31 b(requiremen)n(t.)46 b(This)30 b(set)h(of)g(pixels)f(ma)n(y)
-427 3307 y(p)r(oten)n(tially)22 b(include)h Ft(")p Fk(holes)p
-Ft(")d Fk(where)i(the)g(pixel)g(v)-5 b(alues)22 b(fail)g(to)g(meet)h
-(the)f(sp)r(eci\014ed)g(v)-5 b(alue)22 b(requiremen)n(t.)427
-3406 y(Suc)n(h)28 b(holes)f(will)h(b)r(e)g(ignored)e(b)n(y)h(this)h
-(function.)340 3525 y Fj(\017)45 b Fk(A)27 b(v)-5 b(alue)25
-b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g(function)h(is)f(in)
-n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)f(status)h(set,)h(or)427
-3625 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)-2
-3773 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 3919
-y Fk(T)-7 b(o)26 b(select)g(the)g(appropriate)e(masking)h(function,)i
-(y)n(ou)e(should)h(replace)f Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)g
-(generic)f(function)i(name)227 4018 y(AST)p Ft(_)p Fk(OUTLINE)p
-Fm(<)p Fk(X)p Fm(>)h Fk(with)h(a)f(1-)g(or)g(2-c)n(haracter)d(data)j(t)
-n(yp)r(e)h(co)r(de,)g(so)f(as)g(to)g(matc)n(h)h(the)g(n)n(umerical)e(t)
-n(yp)r(e)227 4118 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)g Fk(of)h(the)g(data)f
-(y)n(ou)g(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)340
-4240 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-4359 y Fj(\017)45 b Fk(R:)28 b(REAL)340 4478 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 4597 y Fj(\017)45 b Fk(UI:)28
-b(INTEGER)f(\(treated)h(as)f(unsigned\))340 4716 y Fj(\017)45
-b Fk(S:)28 b(INTEGER)p Fj(\003)p Fk(2)e(\(short)h(in)n(teger\))340
-4834 y Fj(\017)45 b Fk(US:)28 b(INTEGER)p Fj(\003)p Fk(2)f(\(short)g
-(in)n(teger,)f(treated)i(as)f(unsigned\))340 4953 y Fj(\017)45
-b Fk(B:)28 b(BYTE)f(\(treated)h(as)e(signed\))340 5072
-y Fj(\017)45 b Fk(UB:)28 b(BYTE)f(\(treated)h(as)f(unsigned\))227
-5220 y(F)-7 b(or)40 b(example,)j(AST)p Ft(_)p Fk(OUTLINED)e(w)n(ould)f
-(b)r(e)h(used)f(to)g(pro)r(cess)g(DOUBLE)g(PRECISION)f(data,)k(while)
-227 5320 y(AST)p Ft(_)p Fk(OUTLINES)29 b(w)n(ould)h(b)r(e)f(used)h(to)f
-(pro)r(cess)g(short)g(in)n(teger)f(data)h(\(stored)g(in)h(an)f(INTEGER)
-p Fj(\003)p Fk(2)g(arra)n(y\),)227 5419 y(etc.)227 5537
-y(F)-7 b(or)32 b(compatibilit)n(y)h(with)g(other)f(Starlink)g
-(facilities,)i(the)f(co)r(des)g(W)g(and)f(UW)h(are)f(pro)n(vided)g(as)g
-(synon)n(yms)227 5636 y(for)27 b(S)h(and)g(US)g(resp)r(ectiv)n(ely)e
-(\(but)j(only)e(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h
-(AST\).)p eop end
-%%Page: 287 297
-TeXDict begin 287 296 bop 3643 52 a FG(287)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(O)l(VERLAP)1214 483 y
-Fd(T)-10 b(est)39 b(if)f(t)m(w)m(o)f(regions)h(o)m(v)m(erlap)1625
-598 y(eac)m(h)g(other)2787 482 y FA(AST)p Fe(_)p FA(O)l(VERLAP)0
-754 y Fc(Description:)44 b Fk(This)39 b(function)h(returns)e(an)g(in)n
-(teger)g(v)-5 b(alue)39 b(indicating)g(if)g(the)g(t)n(w)n(o)g(supplied)
-g(Regions)f(o)n(v)n(erlap.)227 854 y(The)30 b(t)n(w)n(o)g(Regions)f
-(are)g(con)n(v)n(erted)f(to)i(a)g(commnon)f(co)r(ordinate)g(system)h(b)
-r(efore)f(p)r(erforming)h(the)g(c)n(hec)n(k.)43 b(If)227
-954 y(this)33 b(con)n(v)n(ersion)e(is)i(not)g(p)r(ossible)f(\(for)h
-(instance)g(b)r(ecause)f(the)h(t)n(w)n(o)g(Regions)e(represen)n(t)h
-(areas)f(in)i(di\013eren)n(t)227 1053 y(domains\),)28
-b(then)g(the)g(c)n(hec)n(k)e(cannot)h(b)r(e)h(p)r(erformed)g(and)f(a)g
-(zero)g(v)-5 b(alue)27 b(is)h(returned)f(to)g(indicate)h(this.)0
-1198 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_OVERLAP\()c
-(THIS,)i(THAT,)h(STATUS)f(\))0 1343 y Fc(Argumen)m(ts:)259
-1475 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1575
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(Region.)259
-1703 y Fc(THA)-8 b(T)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1803 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(Region.)259
-1931 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2031 y Fk(The)c(global)e(status.)0 2188
-y Fc(Returned)32 b(V)-8 b(alue:)259 2320 y(AST)p Ft(_)p
-Fc(O)m(VERLAP)33 b(=)f(INTEGER)427 2420 y Fk(A)c(v)-5
-b(alue)28 b(indicating)f(if)h(there)g(is)f(an)n(y)g(o)n(v)n(erlap)e(b)r
-(et)n(w)n(een)j(the)g(t)n(w)n(o)f(Regions.)36 b(P)n(ossible)26
-b(v)-5 b(alues)27 b(are:)427 2534 y(0)i(-)f(The)h(c)n(hec)n(k)f(could)h
-(not)g(b)r(e)g(p)r(erformed)f(b)r(ecause)g(the)i(second)e(Region)g
-(could)h(not)f(b)r(e)i(mapp)r(ed)f(in)n(to)427 2634 y(the)f(co)r
-(ordinate)f(system)g(of)h(the)g(\014rst)f(Region.)427
-2748 y(1)g(-)h(There)f(is)g(no)h(o)n(v)n(erlap)d(b)r(et)n(w)n(een)j
-(the)g(t)n(w)n(o)f(Regions.)427 2862 y(2)g(-)h(The)f(\014rst)h(Region)f
-(is)g(completely)h(inside)f(the)h(second)f(Region.)427
-2976 y(3)g(-)h(The)f(second)g(Region)g(is)h(completely)f(inside)h(the)g
-(\014rst)f(Region.)427 3090 y(4)g(-)h(There)f(is)g(partial)g(o)n(v)n
-(erlap)f(b)r(et)n(w)n(een)h(the)h(t)n(w)n(o)f(Regions.)427
-3204 y(5)g(-)h(The)f(Regions)g(are)g(iden)n(tical)g(to)h(within)g
-(their)f(uncertain)n(ties.)427 3318 y(6)e(-)g(The)g(second)g(Region)f
-(is)h(the)h(exact)e(negation)g(of)h(the)h(\014rst)f(Region)f(to)h
-(within)h(their)f(uncertain)n(ties.)0 3475 y Fc(Notes:)340
-3753 y Fj(\017)45 b Fk(The)22 b(returned)f(v)-5 b(alues)22
-b(5)f(and)h(6)f(do)g(not)h(c)n(hec)n(k)f(the)h(v)-5 b(alue)22
-b(of)f(the)h(Closed)g(attribute)f(in)h(the)h(t)n(w)n(o)d(Regions.)340
-3882 y Fj(\017)45 b Fk(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r
-(e)g(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j
-(the)f(AST)g(error)d(status)j(set,)f(or)427 3981 y(if)g(it)g(should)g
-(fail)f(for)h(an)n(y)e(reason.)p 0 4172 V 0 4303 a FA(AST)p
-Fe(_)p FA(PCDMAP)1439 4304 y Fd(Create)37 b(a)h(PcdMap)2835
-4303 y FA(AST)p Fe(_)p FA(PCDMAP)0 4484 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(PcdMap)g(and)h
-(optionally)e(initialises)i(its)g(attributes.)227 4606
-y(A)35 b(PcdMap)f(is)g(a)h(non-linear)e(Mapping)h(whic)n(h)g
-(transforms)f(2-dimensional)h(p)r(ositions)g(to)g(correct)f(for)h(the)
-227 4706 y(radial)h(distortion)h(in)n(tro)r(duced)g(b)n(y)g(some)f
-(cameras)g(and)h(telescop)r(es.)62 b(This)36 b(can)g(tak)n(e)f(the)i
-(form)f(either)g(of)227 4805 y(pincushion)28 b(or)f(barrel)f
-(distortion,)h(and)g(is)h(c)n(haracterized)d(b)n(y)j(a)f(single)g
-(distortion)g(co)r(e\016cien)n(t.)227 4928 y(A)g(PcdMap)f(is)g(sp)r
-(eci\014ed)h(b)n(y)f(giving)g(this)h(distortion)f(co)r(e\016cien)n(t)g
-(and)g(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227
-5027 y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h
-(of)i(a)f(PcdMap)g(applies)g(the)h(distortion:)227 5149
-y(RD)g(=)g(R)g Fj(\003)f Fk(\()h(1)f(+)g(C)h Fj(\003)f
-Fk(R)h Fj(\003)f Fk(R)h(\))227 5272 y(where)h(R)h(is)g(the)g
-(undistorted)f(radial)g(distance)g(from)h(the)g(distortion)f(cen)n(tre)
-g(\(sp)r(eci\014ed)h(b)n(y)f(attribute)h(Pcd-)227 5371
-y(Cen\),)k(RD)e(is)g(the)g(radial)e(distance)i(from)f(the)i(same)e(cen)
-n(tre)g(in)h(the)g(presence)f(of)h(distortion,)g(and)g(C)g(is)f(the)227
-5471 y(distortion)c(co)r(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g
-(attribute)h(Disco\).)227 5593 y(The)33 b(in)n(v)n(erse)f
-(transformation)f(of)i(a)f(PcdMap)h(remo)n(v)n(es)d(the)k(distortion)e
-(pro)r(duced)h(b)n(y)f(the)h(forw)n(ard)f(trans-)227
-5693 y(formation.)42 b(The)29 b(expression)f(used)i(to)f(deriv)n(e)g(R)
-g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n(erse)g(of)h(the)h
-(expression)p eop end
-%%Page: 288 298
-TeXDict begin 288 297 bop 0 52 a FG(288)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(ab)r(o)n(v)n(e,)e
-(obtained)g(from)g(t)n(w)n(o)g(iterations)f(of)h(the)h(Newton-Raphson)f
-(metho)r(d.)42 b(The)30 b(mismatc)n(h)f(b)r(et)n(w)n(een)g(the)227
-451 y(forw)n(ard)d(and)h(in)n(v)n(erse)f(expressions)f(is)i(negligible)
-g(for)f(astrometric)g(applications)g(\(to)i(reac)n(h)e(1)h(milliarcsec)
-f(at)227 551 y(the)g(edge)g(of)g(the)g(Anglo-Australian)e(T)-7
-b(elescop)r(e)25 b(triplet)h(or)f(a)h(Sc)n(hmidt)g(\014eld)g(w)n(ould)f
-(require)g(\014eld)h(diameters)227 650 y(of)i(2.4)f(and)g(42)g(degrees)
-f(resp)r(ectiv)n(ely\).)227 773 y(If)39 b(a)f(PcdMap)f(is)h(in)n(v)n
-(erted)f(\(e.g.)69 b(using)37 b(AST)p Ft(_)p Fk(INVER)-7
-b(T\))39 b(then)g(the)f(roles)f(of)h(the)h(forw)n(ard)d(and)i(in)n(v)n
-(erse)227 873 y(transformations)19 b(are)g(rev)n(ersed;)i(the)g(forw)n
-(ard)d(transformation)h(will)i(remo)n(v)n(e)d(the)j(distortion,)g(and)f
-(the)h(in)n(v)n(erse)227 973 y(transformation)26 b(will)i(apply)f(it.)0
-1119 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_PCDMAP\()c
-(DISCO,)i(PCDCEN,)g(OPTIONS,)f(STATUS)h(\))0 1266 y Fc(Argumen)m(ts:)
-259 1400 y(DISCO)32 b(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427
-1499 y Fk(The)23 b(distortion)f(co)r(e\016cien)n(t.)35
-b(Negativ)n(e)21 b(v)-5 b(alues)23 b(giv)n(e)e(barrel)h(distortion,)h
-(p)r(ositiv)n(e)f(v)-5 b(alues)22 b(giv)n(e)g(pincush-)427
-1599 y(ion)28 b(distortion,)f(and)g(zero)g(giv)n(es)f(no)h(distortion.)
-259 1729 y Fc(PCDCEN\()32 b(2)f(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 1829 y Fk(An)d(arra)n(y)e(con)n(taining)g(the)i(co)r
-(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)h(distortion.)259
-1959 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2058 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 2158 y(used)27
-b(for)e(initialising)i(the)f(new)h(PcdMap.)36 b(The)26
-b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)h(that)f(for)g(the)h(AST)p
-Ft(_)p Fk(SET)427 2257 y(routine.)259 2388 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2487 y Fk(The)c(global)e(status.)0 2646 y Fc(Returned)32
-b(V)-8 b(alue:)259 2780 y(AST)p Ft(_)p Fc(PCDMAP)33 b(=)f(INTEGER)427
-2880 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(PcdMap.)0
-3039 y Fc(Notes:)340 3318 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3418 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-3577 y Fc(Status)33 b(Handling)n(:)227 3723 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 3823 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 3923 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 4116 3780 12 v 0 4247 a FA(AST)p
-Fe(_)p FA(PERMAXES)1302 4248 y Fd(P)m(erm)m(ute)37 b(the)h(axis)g
-(order)1613 4348 y(in)g(a)h(F)-10 b(rame)2674 4247 y
-FA(AST)p Fe(_)p FA(PERMAXES)0 4508 y Fc(Description:)44
-b Fk(This)28 b(routine)f(p)r(erm)n(utes)h(the)g(order)e(in)i(whic)n(h)f
-(a)g(F)-7 b(rame's)27 b(axes)g(o)r(ccur.)0 4654 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_PERMAXES\()c(THIS,)j(PERM,)h(STATUS)f
-(\))0 4801 y Fc(Argumen)m(ts:)259 4935 y(THIS)32 b(=)g(INTEGER)g(\(Giv)
-m(en\))427 5034 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 5164 y Fc(PERM\()31 b Fj(\003)h Fc(\))g(=)g(INTEGER)f
-(\(Giv)m(en\))427 5264 y Fk(An)k(arra)n(y)e(with)i(one)f(elemen)n(t)h
-(for)f(eac)n(h)f(axis)h(of)h(the)g(F)-7 b(rame)34 b(\(Naxes)g
-(attribute\).)58 b(This)35 b(should)f(list)427 5364 y(the)28
-b(axes)e(in)h(their)g(new)h(order,)e(using)g(the)i(original)d(axis)i(n)
-n(um)n(b)r(ering)f(\(whic)n(h)i(starts)e(at)h(1)g(for)f(the)i(\014rst)
-427 5463 y(axis\).)259 5593 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 5693 y Fk(The)c(global)e(status.)p
-eop end
-%%Page: 289 299
-TeXDict begin 289 298 bop 3643 52 a FG(289)0 351 y Fc(Notes:)340
-632 y Fj(\017)45 b Fk(Only)29 b(gen)n(uine)g(p)r(erm)n(utations)f(of)i
-(the)f(axis)g(order)e(are)i(p)r(ermitted,)h(so)f(eac)n(h)f(axis)g(m)n
-(ust)i(b)r(e)f(referenced)427 732 y(exactly)e(once)g(in)h(the)g(PERM)f
-(arra)n(y)-7 b(.)340 863 y Fj(\017)45 b Fk(If)28 b(successiv)n(e)f
-(axis)f(p)r(erm)n(utations)h(are)g(applied)h(to)f(a)g(F)-7
-b(rame,)27 b(then)h(the)g(e\013ects)g(are)f(cum)n(ulativ)n(e.)p
-0 1059 3780 12 v 0 1190 a FA(AST)p Fe(_)p FA(PERMMAP)1401
-1189 y Fd(Create)37 b(a)i(P)m(ermMap)2719 1190 y FA(AST)p
-Fe(_)p FA(PERMMAP)0 1375 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(P)n(ermMap)g(and)g(optionally)g
-(initialises)g(its)h(attributes.)227 1499 y(A)g(P)n(ermMap)d(is)i(a)g
-(Mapping)f(whic)n(h)h(p)r(erm)n(utes)g(the)g(order)f(of)h(co)r
-(ordinates,)e(and)i(p)r(ossibly)g(also)f(c)n(hanges)f(the)227
-1598 y(n)n(um)n(b)r(er)j(of)f(co)r(ordinates,)f(b)r(et)n(w)n(een)i(its)
-g(input)g(and)g(output.)227 1722 y(In)37 b(addition)f(to)g(p)r(erm)n
-(uting)h(the)f(co)r(ordinate)g(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)
-f(assign)g(constan)n(t)h(v)-5 b(alues)36 b(to)227 1822
-y(co)r(ordinates.)53 b(This)33 b(is)g(useful)h(when)g(the)f(n)n(um)n(b)
-r(er)g(of)h(co)r(ordinates)d(is)j(b)r(eing)f(increased)f(as)h(it)h
-(allo)n(ws)e(\014xed)227 1921 y(v)-5 b(alues)27 b(to)h(b)r(e)g
-(assigned)e(to)i(an)n(y)f(new)g(ones.)0 2069 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_PERMMAP\()c(NIN,)j(INPERM,)e(NOUT,)i
-(OUTPERM,)e(CONSTANT,)g(OPTIONS,)g(STATUS)227 2169 y(\))0
-2316 y Fc(Argumen)m(ts:)259 2451 y(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))
-427 2551 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-2682 y Fc(INPERM)j(=)h(INTEGER\()g(NIN)f(\))h(\(Giv)m(en\))427
-2782 y Fk(An)d(arra)n(y)d(whic)n(h,)i(for)g(eac)n(h)f(input)i(co)r
-(ordinate,)e(should)h(con)n(tain)g(the)h(n)n(um)n(b)r(er)e(of)i(the)f
-(output)h(co)r(ordi-)427 2881 y(nate)g(whose)g(v)-5 b(alue)29
-b(is)g(to)g(b)r(e)h(used)f(\(note)h(that)f(this)h(arra)n(y)d(therefore)
-h(de\014nes)h(the)h(in)n(v)n(erse)e(co)r(ordinate)427
-2981 y(transformation\).)36 b(Co)r(ordinates)26 b(are)h(n)n(um)n(b)r
-(ered)g(starting)g(from)g(1.)427 3096 y(F)-7 b(or)28
-b(details)g(of)g(additional)g(sp)r(ecial)g(v)-5 b(alues)28
-b(that)h(ma)n(y)f(b)r(e)g(used)h(in)f(this)h(arra)n(y)-7
-b(,)26 b(see)i(the)h(description)f(of)427 3196 y(the)g(CONST)-7
-b(ANT)28 b(argumen)n(t.)259 3327 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m
-(en\))427 3427 y Fk(The)c(n)n(um)n(b)r(er)f(of)h(output)g(co)r
-(ordinates.)259 3558 y Fc(OUTPERM)k(=)g(INTEGER\()f(NOUT)h(\))g(\(Giv)m
-(en\))427 3658 y Fk(An)19 b(arra)n(y)e(whic)n(h,)j(for)f(eac)n(h)f
-(output)h(co)r(ordinate,)g(should)g(con)n(tain)f(the)h(n)n(um)n(b)r(er)
-f(of)h(the)g(input)h(co)r(ordinate)427 3757 y(whose)40
-b(v)-5 b(alue)40 b(is)h(to)f(b)r(e)h(used)f(\(note)h(that)g(this)f
-(arra)n(y)e(therefore)i(de\014nes)g(the)h(forw)n(ard)e(co)r(ordinate)
-427 3857 y(transformation\).)d(Co)r(ordinates)26 b(are)h(n)n(um)n(b)r
-(ered)g(starting)g(from)g(1.)427 3972 y(F)-7 b(or)28
-b(details)g(of)g(additional)g(sp)r(ecial)g(v)-5 b(alues)28
-b(that)h(ma)n(y)f(b)r(e)g(used)h(in)f(this)h(arra)n(y)-7
-b(,)26 b(see)i(the)h(description)f(of)427 4072 y(the)g(CONST)-7
-b(ANT)28 b(argumen)n(t.)259 4203 y Fc(CONST)-8 b(ANT)32
-b(=)g(DOUBLE)h(PRECISION\()e Fj(\003)g Fc(\))h(\(Giv)m(en\))427
-4303 y Fk(An)22 b(arra)n(y)d(con)n(taining)h(v)-5 b(alues)21
-b(whic)n(h)g(ma)n(y)g(b)r(e)g(assigned)f(to)i(input)g(and/or)d(output)j
-(co)r(ordinates)e(instead)427 4402 y(of)h(deriving)f(them)h(from)g
-(other)f(co)r(ordinate)f(v)-5 b(alues.)35 b(If)21 b(either)f(of)h(the)g
-(INPERM)g(or)e(OUTPERM)h(arra)n(ys)427 4502 y(con)n(tains)i(a)g
-(negativ)n(e)g(v)-5 b(alue,)23 b(it)g(is)g(used)f(to)h(address)e(this)i
-(CONST)-7 b(ANT)24 b(arra)n(y)c(\(suc)n(h)i(that)h(-1)f(addresses)427
-4602 y(the)j(\014rst)g(elemen)n(t,)g(-2)f(addresses)f(the)i(second)f
-(elemen)n(t,)h(etc.\))37 b(and)24 b(the)h(v)-5 b(alue)25
-b(obtained)f(is)h(used)f(as)g(the)427 4701 y(corresp)r(onding)i(co)r
-(ordinate)g(v)-5 b(alue.)427 4817 y(Care)29 b(should)h(b)r(e)h(tak)n
-(en)f(to)g(ensure)f(that)i(lo)r(cations)e(lying)h(outside)g(the)h
-(exten)n(t)f(of)g(this)h(arra)n(y)c(are)j(not)427 4916
-y(acciden)n(tally)25 b(addressed.)35 b(The)26 b(arra)n(y)d(is)j(not)f
-(used)h(if)g(the)g(INPERM)g(and)f(OUTPERM)g(arra)n(ys)e(do)j(not)427
-5016 y(con)n(tain)h(negativ)n(e)g(v)-5 b(alues.)259 5147
-y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5247 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 5346 y(used)i(for)f
-(initialising)g(the)i(new)e(P)n(ermMap.)34 b(The)23 b(syn)n(tax)f(used)
-g(is)h(iden)n(tical)f(to)h(that)g(for)f(the)h(AST)p Ft(_)p
-Fk(SET)427 5446 y(routine.)259 5577 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5677
-y Fk(The)c(global)e(status.)p eop end
-%%Page: 290 300
-TeXDict begin 290 299 bop 0 52 a FG(290)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 475 y(AST)p Ft(_)p Fc(PERMMAP)31 b(=)i(INTEGER)427
-575 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(ermMap.)0
-724 y Fc(Notes:)340 994 y Fj(\017)45 b Fk(If)37 b(either)f(of)g(the)g
-(INPERM)g(or)f(OUTPERM)g(arra)n(ys)f(con)n(tains)h(a)h(zero)f(v)-5
-b(alue)36 b(\(or)f(a)h(p)r(ositiv)n(e)g(v)-5 b(alue)427
-1094 y(whic)n(h)39 b(do)r(es)g(not)g(iden)n(tify)h(a)f(v)-5
-b(alid)39 b(output/input)h(co)r(ordinate,)h(as)e(appropriate\),)h(then)
-g(the)g(v)-5 b(alue)427 1194 y(AST)p Ft(__)p Fk(BAD)28
-b(is)f(assigned)g(as)g(the)h(new)f(co)r(ordinate)g(v)-5
-b(alue.)340 1314 y Fj(\017)45 b Fk(This)29 b(function)g(do)r(es)g(not)g
-(attempt)g(to)g(ensure)f(that)h(the)g(forw)n(ard)e(and)i(in)n(v)n(erse)
-e(transformations)g(p)r(er-)427 1414 y(formed)37 b(b)n(y)g(the)h(P)n
-(ermMap)e(are)g(self-consisten)n(t)h(in)h(an)n(y)e(w)n(a)n(y)-7
-b(.)65 b(Y)-7 b(ou)37 b(are)g(therefore)f(free)h(to)h(supply)427
-1513 y(co)r(ordinate)27 b(p)r(erm)n(utation)g(arra)n(ys)e(that)j(ac)n
-(hiev)n(e)e(whatev)n(er)h(e\013ect)h(is)f(desired.)340
-1634 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1733 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1908 3780 12 v 0 2039 a FA(AST)p Fe(_)p FA(PICKAXES)1291
-2040 y Fd(Create)37 b(a)h(new)h(F)-10 b(rame)38 b(b)m(y)1359
-2154 y(pic)m(king)g(axes)g(from)g(an)1585 2265 y(existing)g(one)2738
-2039 y FA(AST)p Fe(_)p FA(PICKAXES)0 2429 y Fc(Description:)44
-b Fk(This)31 b(function)h(creates)e(a)g(new)i(F)-7 b(rame)30
-b(whose)g(axes)g(are)h(copied)f(from)h(an)g(existing)f(F)-7
-b(rame)31 b(along)227 2529 y(with)d(other)f(F)-7 b(rame)26
-b(attributes,)i(suc)n(h)e(as)h(its)g(Title.)37 b(An)n(y)28
-b(n)n(um)n(b)r(er)f(\(zero)f(or)g(more\))h(of)g(the)h(original)d(F)-7
-b(rame's)227 2628 y(axes)24 b(ma)n(y)f(b)r(e)i(copied,)g(in)g(an)n(y)e
-(order,)h(and)g(additional)g(axes)f(with)i(default)g(attributes)f(ma)n
-(y)g(also)f(b)r(e)i(included)227 2728 y(in)j(the)g(new)g(F)-7
-b(rame.)227 2846 y(A)33 b(Mapping)e(that)i(con)n(v)n(erts)d(b)r(et)n(w)
-n(een)i(the)g(co)r(ordinate)f(systems)h(describ)r(ed)g(b)n(y)f(the)i(t)
-n(w)n(o)e(F)-7 b(rames)31 b(will)i(also)227 2946 y(b)r(e)28
-b(returned.)0 3083 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_PICKAXES\()38 b(THIS,)k(NAXES,)f(AXES,)g(MAP,)h(STATUS)f(\))0
-3220 y Fc(Argumen)m(ts:)259 3344 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3443 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(original)e(F)-7
-b(rame.)259 3564 y Fc(NAXES)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3664 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(axes)e(required)h(in)h(the)g
-(new)g(F)-7 b(rame.)259 3784 y Fc(AXES\()32 b(NAXES)g(\))g(=)g(INTEGER)
-f(\(Giv)m(en\))427 3884 y Fk(An)h(arra)n(y)d(whic)n(h)j(lists)f(the)h
-(axes)f(to)g(b)r(e)h(copied.)48 b(These)31 b(should)h(b)r(e)f(giv)n(en)
-g(in)h(the)g(order)e(required)g(in)427 3983 y(the)35
-b(new)f(F)-7 b(rame,)36 b(using)e(the)g(axis)g(n)n(um)n(b)r(ering)g(in)
-g(the)h(original)e(F)-7 b(rame)33 b(\(whic)n(h)i(starts)e(at)i(1)e(for)
-h(the)427 4083 y(\014rst)26 b(axis\).)36 b(Axes)26 b(ma)n(y)f(b)r(e)h
-(selected)g(in)h(an)n(y)e(order,)g(but)h(eac)n(h)g(ma)n(y)f(only)g(b)r
-(e)i(used)f(once.)36 b(If)26 b(additional)427 4182 y(\(default\))i
-(axes)d(are)h(also)f(to)h(b)r(e)h(included,)h(the)e(corresp)r(onding)f
-(elemen)n(ts)h(of)h(this)f(arra)n(y)f(should)h(b)r(e)h(set)427
-4282 y(to)h(zero.)259 4402 y Fc(MAP)k(=)g(INTEGER)f(\(Returned\))427
-4502 y Fk(A)c(p)r(oin)n(ter)f(to)h(a)f(new)g(Mapping.)37
-b(This)26 b(will)h(b)r(e)g(a)f(P)n(ermMap)f(\(or)h(a)g(UnitMap)h(as)f
-(a)g(sp)r(ecial)g(case\))g(that)427 4602 y(describ)r(es)32
-b(the)h(axis)f(p)r(erm)n(utation)h(that)g(has)f(tak)n(en)g(place)g(b)r
-(et)n(w)n(een)h(the)g(original)e(and)i(new)f(F)-7 b(rames.)427
-4701 y(The)26 b(Mapping's)f(forw)n(ard)g(transformation)f(will)i(con)n
-(v)n(ert)e(co)r(ordinates)h(from)g(the)h(original)f(F)-7
-b(rame)25 b(in)n(to)427 4801 y(the)j(new)g(one,)f(and)h(vice)f(v)n
-(ersa.)259 4921 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 5021 y Fk(The)c(global)e(status.)0
-5171 y Fc(Class)31 b(Applicabilit)m(y:)259 5295 y(F)-8
-b(rame)427 5394 y Fk(This)27 b(function)h(applies)e(to)h(all)g(F)-7
-b(rames.)36 b(The)27 b(class)f(of)h(F)-7 b(rame)26 b(returned)h(ma)n(y)
-f(di\013er)h(from)g(that)g(of)g(the)427 5494 y(original)g(F)-7
-b(rame,)27 b(dep)r(ending)h(on)g(whic)n(h)g(axes)f(are)g(selected.)37
-b(F)-7 b(or)28 b(example,)f(if)h(a)g(single)f(axis)g(is)h(pic)n(k)n(ed)
-427 5593 y(from)i(a)g(SkyF)-7 b(rame)29 b(\(whic)n(h)h(m)n(ust)h(alw)n
-(a)n(ys)d(ha)n(v)n(e)h(t)n(w)n(o)g(axes\))h(then)g(the)h(resulting)e(F)
--7 b(rame)30 b(cannot)f(b)r(e)i(a)427 5693 y(v)-5 b(alid)28
-b(SkyF)-7 b(rame,)27 b(so)g(will)h(rev)n(ert)e(to)h(the)h(paren)n(t)f
-(class)g(\(F)-7 b(rame\))27 b(instead.)p eop end
-%%Page: 291 301
-TeXDict begin 291 300 bop 3643 52 a FG(291)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(Using)19 b(this)g(function)g(on)g(a)f(F)
--7 b(rameSet)19 b(is)f(iden)n(tical)h(to)f(using)h(it)g(on)f(the)i
-(curren)n(t)d(F)-7 b(rame)19 b(in)g(the)g(F)-7 b(rameSet.)427
-551 y(The)28 b(returned)f(F)-7 b(rame)27 b(will)h(not)g(b)r(e)g(a)f(F)
--7 b(rameSet.)259 675 y Fc(Region)427 775 y Fk(If)27
-b(this)f(function)h(is)f(used)g(on)g(a)f(Region,)h(an)g(attempt)g(is)g
-(made)g(to)g(retain)g(the)g(b)r(ounds)g(information)g(on)427
-874 y(the)g(selected)e(axes.)36 b(If)25 b(succesful,)g(the)h(returned)e
-(F)-7 b(rame)25 b(will)g(b)r(e)g(a)g(Region)f(of)h(some)f(class.)35
-b(Otherwise,)427 974 y(the)j(returned)g(F)-7 b(rame)37
-b(is)g(obtained)h(b)n(y)f(calling)g(this)h(function)h(on)e(the)h(F)-7
-b(rame)37 b(represen)n(ted)g(b)n(y)g(the)427 1074 y(supplied)c(Region)f
-(\(the)h(returned)g(F)-7 b(rame)32 b(will)h(then)g(not)f(b)r(e)h(a)g
-(Region\).)51 b(In)33 b(order)e(to)i(b)r(e)g(succesful,)427
-1173 y(the)d(selected)f(axes)g(in)g(the)h(Region)f(m)n(ust)g(b)r(e)h
-(indep)r(enden)n(t)g(of)f(the)h(others.)41 b(F)-7 b(or)29
-b(instance,)h(a)f(Bo)n(x)f(can)427 1273 y(b)r(e)i(split)g(in)g(this)g
-(w)n(a)n(y)e(but)i(a)f(Circle)g(cannot.)42 b(Another)30
-b(requiremen)n(t)e(for)h(success)g(is)g(that)h(no)f(default)427
-1372 y(axes)e(are)g(added)g(\(that)h(is,)g(the)g(AXES)g(arra)n(y)d(m)n
-(ust)i(not)h(con)n(tain)f(an)n(y)g(zero)f(v)-5 b(alues.)0
-1526 y Fc(Returned)32 b(V)-8 b(alue:)259 1654 y(AST)p
-Ft(_)p Fc(PICKAXES)33 b(=)f(INTEGER)427 1754 y Fk(A)c(p)r(oin)n(ter)f
-(to)h(the)g(new)g(F)-7 b(rame.)0 1907 y Fc(Notes:)340
-2181 y Fj(\017)45 b Fk(The)22 b(new)f(F)-7 b(rame)21
-b(will)h(con)n(tain)f(a)g Ft(")p Fk(deep)p Ft(")g Fk(cop)n(y)f(\(c.f.)
-36 b(AST)p Ft(_)p Fk(COPY\))21 b(of)h(all)f(the)h(data)f(selected)g
-(from)g(the)427 2281 y(original)26 b(F)-7 b(rame.)37
-b(Mo)r(difying)27 b(an)n(y)g(asp)r(ect)g(of)h(the)g(new)g(F)-7
-b(rame)27 b(will)g(therefore)g(not)h(a\013ect)f(the)h(original)427
-2381 y(one.)340 2505 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2605 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2787 3780 12 v 0 2918 a FA(AST)p Fe(_)p FA(PLOT)1544
-2919 y Fd(Create)37 b(a)i(Plot)3081 2918 y FA(AST)p Fe(_)p
-FA(PLOT)0 3078 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f
-(a)g(new)g(Plot)g(and)h(optionally)f(initialises)g(its)h(attributes.)
-227 3198 y(A)20 b(Plot)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g(F)-7
-b(rameSet,)20 b(in)g(whic)n(h)f(the)h(base)e(F)-7 b(rame)19
-b(describ)r(es)f(a)h Ft(")p Fk(graphical)p Ft(")e Fk(co)r(ordinate)227
-3298 y(system)27 b(and)g(is)h(asso)r(ciated)d(with)j(a)f(rectangular)e
-(plotting)j(area)d(in)j(the)g(underlying)e(graphics)g(system.)37
-b(This)227 3398 y(plotting)28 b(area)e(is)i(where)f(graphical)f(output)
-i(app)r(ears.)35 b(It)28 b(is)g(de\014ned)g(when)g(the)g(Plot)f(is)g
-(created.)227 3518 y(The)36 b(curren)n(t)e(F)-7 b(rame)35
-b(of)h(a)f(Plot)g(describ)r(es)g(a)g Ft(")p Fk(ph)n(ysical)p
-Ft(")f Fk(co)r(ordinate)g(system,)j(whic)n(h)f(is)f(the)h(co)r
-(ordinate)227 3618 y(system)41 b(in)h(whic)n(h)f(plotting)h(op)r
-(erations)e(are)g(sp)r(eci\014ed.)79 b(The)41 b(results)g(of)g(eac)n(h)
-g(plotting)g(op)r(eration)g(are)227 3717 y(automatically)26
-b(transformed)f(in)n(to)i(graphical)e(co)r(ordinates)g(so)h(as)g(to)h
-(app)r(ear)e(in)i(the)g(plotting)g(area)e(\(sub)5 b(ject)227
-3817 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n(y)f(b)r(e)h(in)f
-(e\013ect\).)227 3937 y(Because)39 b(the)h(Mapping)g(b)r(et)n(w)n(een)f
-(ph)n(ysical)g(and)h(graphical)e(co)r(ordinates)h(ma)n(y)g(often)h(b)r
-(e)g(non-linear,)h(or)227 4037 y(ev)n(en)f(discon)n(tin)n(uous,)i(most)
-e(plotting)g(do)r(es)g(not)g(result)f(in)i(simple)f(straigh)n(t)f
-(lines.)74 b(The)40 b(basic)g(plotting)227 4136 y(elemen)n(t)g(is)f
-(therefore)f(not)h(a)g(straigh)n(t)f(line,)k(but)e(a)f(geo)r(desic)f
-(curv)n(e)g(\(see)h(AST)p Ft(_)p Fk(CUR)-9 b(VE\).)40
-b(A)f(Plot)g(also)227 4236 y(pro)n(vides)d(facilities)i(for)f(dra)n
-(wing)f(mark)n(ers)g(or)h(sym)n(b)r(ols)g(\(AST)p Ft(_)p
-Fk(MARK\),)h(text)g(\(AST)p Ft(_)p Fk(TEXT\))g(and)f(grid)227
-4336 y(lines)25 b(\(AST)p Ft(_)p Fk(GRIDLINE\).)h(It)f(is)g(also)e(p)r
-(ossible)i(to)g(dra)n(w)e(curvilinear)h(axes)g(with)h(optional)f(co)r
-(ordinate)g(grids)227 4435 y(\(AST)p Ft(_)p Fk(GRID\).)30
-b(A)e(range)f(of)h(Plot)g(attributes)g(is)g(a)n(v)-5
-b(ailable)27 b(to)h(allo)n(w)f(precise)g(con)n(trol)g(o)n(v)n(er)g(the)
-h(app)r(earance)227 4535 y(of)g(graphical)e(output)i(pro)r(duced)f(b)n
-(y)h(these)f(routines.)227 4655 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h
-(di\013eren)n(t)f(ph)n(ysical)g(co)r(ordinate)g(systems)g(in)h(whic)n
-(h)f(to)h(plot)g(\(including)g(the)g(nativ)n(e)f(graphical)227
-4755 y(co)r(ordinate)33 b(system)h(itself)6 b(\))35 b(b)n(y)f
-(selecting)g(di\013eren)n(t)g(F)-7 b(rames)33 b(as)h(the)g(curren)n(t)f
-(F)-7 b(rame)34 b(of)g(a)g(Plot,)h(using)e(its)227 4855
-y(Curren)n(t)21 b(attribute.)35 b(Y)-7 b(ou)22 b(ma)n(y)e(also)h(set)g
-(up)h(clipping)g(\(see)f(AST)p Ft(_)p Fk(CLIP\))g(to)h(limit)g(the)g
-(exten)n(t)f(of)h(an)n(y)f(plotting)227 4954 y(y)n(ou)26
-b(p)r(erform,)h(and)f(this)h(ma)n(y)f(b)r(e)h(done)f(in)h(an)n(y)f(of)h
-(the)g(co)r(ordinate)e(systems)i(asso)r(ciated)e(with)i(the)g(Plot,)g
-(not)227 5054 y(necessarily)f(the)i(one)f(y)n(ou)g(are)g(plotting)g
-(in.)227 5174 y(Lik)n(e)k(an)n(y)f(F)-7 b(rameSet,)32
-b(a)f(Plot)g(ma)n(y)f(also)g(b)r(e)i(used)f(as)g(a)f(F)-7
-b(rame.)47 b(In)32 b(this)f(case,)h(it)f(b)r(eha)n(v)n(es)f(lik)n(e)h
-(its)g(curren)n(t)227 5274 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)
-f(the)h(ph)n(ysical)f(co)r(ordinate)f(system.)227 5394
-y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f(Plot)g(describ)r(es)f(the)i
-(in)n(ter-relation)e(b)r(et)n(w)n(een)h(graphical)e(co)r(ordinates)h
-(\(its)227 5494 y(base)k(F)-7 b(rame\))38 b(and)f(ph)n(ysical)g(co)r
-(ordinates)g(\(its)h(curren)n(t)f(F)-7 b(rame\).)67 b(It)38
-b(di\013ers)f(from)h(a)f(normal)g(F)-7 b(rameSet,)227
-5593 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i(to)f
-(transform)f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f(areas)f
-(of)h(the)g(Plot)g(will)g(result)227 5693 y(in)e(bad)g(co)r(ordinate)e
-(v)-5 b(alues)27 b(\(AST)p Ft(__)p Fk(BAD\).)p eop end
-%%Page: 292 302
-TeXDict begin 292 301 bop 0 52 a FG(292)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_PLOT\()d(FRAME,)h(GRAPHBOX,)f(BASEBOX,)g
-(OPTIONS,)g(STATUS)i(\))0 491 y Fc(Argumen)m(ts:)259
-618 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 717 y
-Fk(P)n(oin)n(ter)h(to)h(a)g(F)-7 b(rame)34 b(describing)g(the)h(ph)n
-(ysical)e(co)r(ordinate)g(system)i(in)f(whic)n(h)h(to)f(plot.)57
-b(A)35 b(p)r(oin)n(ter)427 817 y(to)29 b(a)g(F)-7 b(rameSet)29
-b(ma)n(y)f(also)g(b)r(e)h(giv)n(en,)g(in)g(whic)n(h)g(case)f(its)i
-(curren)n(t)e(F)-7 b(rame)28 b(will)i(b)r(e)f(used)g(to)g(de\014ne)g
-(the)427 916 y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)
-f(F)-7 b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)
-r(ordinates)427 1016 y(\(see)e(b)r(elo)n(w\).)427 1127
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(2-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 1227 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 1327 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)
-259 1450 y Fc(GRAPHBO)m(X\()k(4)g(\))g(=)g(REAL)f(\(Giv)m(en\))427
-1549 y Fk(An)h(arra)n(y)c(giving)i(the)h(p)r(osition)g(and)g(exten)n(t)
-g(of)g(the)g(plotting)g(area)e(\(on)i(the)g(plotting)g(surface)f(of)h
-(the)427 1649 y(underlying)e(graphics)f(system\))i(in)g(whic)n(h)f
-(graphical)f(output)i(is)g(to)f(app)r(ear.)42 b(This)30
-b(m)n(ust)f(b)r(e)h(sp)r(eci\014ed)427 1749 y(using)e(graphical)e(co)r
-(ordinates)g(appropriate)g(to)h(the)h(underlying)f(graphics)f(system.)
-427 1860 y(The)k(\014rst)f(pair)f(of)h(v)-5 b(alues)29
-b(should)g(giv)n(e)f(the)i(co)r(ordinates)e(of)h(the)h(b)r(ottom)f
-(left)h(corner)e(of)h(the)h(plotting)427 1960 y(area)25
-b(and)i(the)g(second)f(pair)g(should)h(giv)n(e)e(the)i(co)r(ordinates)f
-(of)g(the)h(top)g(righ)n(t)f(corner.)35 b(The)27 b(co)r(ordinate)427
-2059 y(on)41 b(the)g(horizon)n(tal)e(axis)h(should)g(b)r(e)i(giv)n(en)d
-(\014rst)i(in)g(eac)n(h)f(pair.)75 b(Note)41 b(that)g(the)g(order)f(in)
-h(whic)n(h)427 2159 y(these)26 b(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h
-(imp)r(ortan)n(t)g(b)r(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)
-h(and)f(righ)n(t)f(for)h(subsequen)n(t)427 2258 y(graphical)g(op)r
-(erations.)259 2382 y Fc(BASEBO)m(X\()32 b(4)g(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 2481 y Fk(An)c(arra)n(y)d(giving)i(the)h
-(co)r(ordinates)e(of)i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g
-(F)-7 b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26
-b(if)427 2581 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)
-g(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 2680 y(plotting)25 b(area,)g(as)f(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)35 b(This)25 b(range)f(of)h(co)r
-(ordinates)e(will)i(b)r(e)h(mapp)r(ed)f(linearly)g(on)f(to)h(the)427
-2780 y(plotting)j(area.)35 b(The)28 b(co)r(ordinates)e(should)i(b)r(e)g
-(giv)n(en)e(in)i(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-2903 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3003 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3102 y(b)r(e)e(used)g(for)f
-(initialising)h(the)g(new)f(Plot.)40 b(The)29 b(syn)n(tax)f(used)g(is)h
-(iden)n(tical)f(to)h(that)g(for)f(the)h(AST)p Ft(_)p
-Fk(SET)427 3202 y(routine.)37 b(If)28 b(no)f(initialisation)g(is)h
-(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)
-259 3325 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3425 y Fk(The)c(global)e(status.)0 3577
-y Fc(Returned)32 b(V)-8 b(alue:)259 3703 y(AST)p Ft(_)p
-Fc(PLOT)427 3803 y Fk(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Plot.)0
-3955 y Fc(Notes:)340 4228 y Fj(\017)45 b Fk(The)24 b(base)f(F)-7
-b(rame)24 b(of)g(the)g(returned)f(Plot)h(will)g(b)r(e)g(a)g(new)f(F)-7
-b(rame)24 b(whic)n(h)g(is)f(created)h(b)n(y)f(this)h(function)h(to)427
-4328 y(represen)n(t)32 b(the)h(co)r(ordinate)f(system)g(of)h(the)g
-(underlying)f(graphics)g(system)g(\(graphical)g(co)r(ordinates\).)427
-4427 y(It)h(is)g(giv)n(en)f(a)g(F)-7 b(rame)33 b(index)g(of)f(1)h
-(within)g(the)g(Plot.)52 b(The)33 b(c)n(hoice)f(of)h(base)f(F)-7
-b(rame)32 b(\(Base)g(attribute\))427 4527 y(should)26
-b(not,)g(in)g(general,)f(b)r(e)h(c)n(hanged)e(once)h(a)h(Plot)f(has)g
-(b)r(een)h(created)f(\(although)g(y)n(ou)g(could)h(use)f(this)427
-4626 y(as)i(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)f(area)g
-(around)f(on)h(the)h(plotting)g(surface\).)340 4749 y
-Fj(\017)45 b Fk(If)31 b(a)f(F)-7 b(rame)30 b(is)g(supplied)g(\(via)g
-(the)h(FRAME)g(p)r(oin)n(ter\),)g(then)f(it)h(b)r(ecomes)f(the)h
-(curren)n(t)e(F)-7 b(rame)30 b(of)g(the)427 4849 y(new)e(Plot)f(and)g
-(is)h(giv)n(en)f(a)g(F)-7 b(rame)27 b(index)h(of)f(2.)340
-4972 y Fj(\017)45 b Fk(If)29 b(a)g(F)-7 b(rameSet)28
-b(is)h(supplied)g(\(via)f(the)h(FRAME)g(p)r(oin)n(ter\),)g(then)h(all)e
-(the)h(F)-7 b(rames)28 b(within)h(this)g(F)-7 b(rame-)427
-5072 y(Set)34 b(b)r(ecome)g(part)f(of)h(the)g(new)g(Plot)f(\(where)h
-(their)g(F)-7 b(rame)33 b(indices)h(are)f(increased)f(b)n(y)i(1\),)h
-(with)f(the)427 5171 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7
-b(rame)27 b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27
-b(of)h(the)g(Plot.)340 5295 y Fj(\017)45 b Fk(If)33 b(a)f(n)n(ull)h(Ob)
-5 b(ject)32 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))h(is)f
-(supplied)h(\(via)f(the)h(FRAME)f(p)r(oin)n(ter\),)i(then)f(the)f(re-)
-427 5394 y(turned)k(Plot)e(will)i(con)n(tain)e(t)n(w)n(o)h(F)-7
-b(rames,)36 b(b)r(oth)g(created)f(b)n(y)g(this)g(function.)61
-b(The)35 b(base)g(F)-7 b(rame)34 b(will)427 5494 y(describ)r(e)23
-b(graphics)f(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h(the)h
-(curren)n(t)e(F)-7 b(rame)23 b(will)g(b)r(e)g(a)g(basic)g(F)-7
-b(rame)22 b(with)i(no)427 5593 y(attributes)i(set)g(\(this)h(will)f
-(therefore)f(giv)n(e)g(default)h(v)-5 b(alues)26 b(for)f(suc)n(h)g
-(things)h(as)g(the)g(Plot)f(Title)h(and)g(the)427 5693
-y(Lab)r(el)21 b(on)g(eac)n(h)f(axis\).)35 b(Ph)n(ysical)19
-b(co)r(ordinates)h(will)h(b)r(e)h(mapp)r(ed)f(linearly)g(on)f(to)h
-(graphical)f(co)r(ordinates.)p eop end
-%%Page: 293 303
-TeXDict begin 293 302 bop 3643 52 a FG(293)340 351 y
-Fj(\017)45 b Fk(An)29 b(error)e(will)h(result)g(if)h(the)g(F)-7
-b(rame)28 b(supplied)h(\(or)f(the)g(base)g(F)-7 b(rame)28
-b(if)h(a)f(F)-7 b(rameSet)28 b(w)n(as)g(supplied\))h(is)427
-451 y(not)f(2-dimensional.)340 575 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 675
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 856 3780 12 v 0 987
-a FA(AST)p Fe(_)p FA(PLOT3D)1470 988 y Fd(Create)38 b(a)g(Plot3D)2911
-987 y FA(AST)p Fe(_)p FA(PLOT3D)0 1146 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Plot3D)g(and)h
-(optionally)f(initialises)g(its)h(attributes.)227 1266
-y(A)g(Plot3D)f(is)h(a)f(sp)r(ecialised)g(form)g(of)h(Plot)f(that)h(pro)
-n(vides)e(facilities)h(for)h(pro)r(ducing)f(3D)g(graphical)f(output.)0
-1407 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_PLOT3D\()c
-(FRAME,)i(GRAPHBOX,)f(BASEBOX,)g(OPTIONS,)h(STATUS)g(\))0
-1548 y Fc(Argumen)m(ts:)259 1675 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 1775 y Fk(P)n(oin)n(ter)h(to)h(a)g(F)-7 b(rame)34
-b(describing)g(the)h(ph)n(ysical)e(co)r(ordinate)g(system)i(in)f(whic)n
-(h)h(to)f(plot.)57 b(A)35 b(p)r(oin)n(ter)427 1874 y(to)29
-b(a)g(F)-7 b(rameSet)29 b(ma)n(y)f(also)g(b)r(e)h(giv)n(en,)g(in)g
-(whic)n(h)g(case)f(its)i(curren)n(t)e(F)-7 b(rame)28
-b(will)i(b)r(e)f(used)g(to)g(de\014ne)g(the)427 1974
-y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)f(F)-7
-b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)r
-(ordinates)427 2074 y(\(see)e(b)r(elo)n(w\).)427 2186
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(3-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 2285 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 2385 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)
-259 2509 y Fc(GRAPHBO)m(X\()k(6)g(\))g(=)g(REAL)f(\(Giv)m(en\))427
-2608 y Fk(An)k(arra)n(y)e(giving)h(the)h(p)r(osition)f(and)h(exten)n(t)
-f(of)h(the)g(plotting)g(v)n(olume)f(\(within)i(the)f(plotting)f(space)
-427 2708 y(of)i(the)g(underlying)f(graphics)f(system\))h(in)h(whic)n(h)
-g(graphical)d(output)k(is)e(to)g(app)r(ear.)60 b(This)36
-b(m)n(ust)f(b)r(e)427 2808 y(sp)r(eci\014ed)28 b(using)f(graphical)f
-(co)r(ordinates)h(appropriate)e(to)j(the)g(underlying)f(graphics)f
-(system.)427 2920 y(The)g(\014rst)g(triple)g(of)g(v)-5
-b(alues)26 b(should)g(giv)n(e)f(the)h(co)r(ordinates)f(of)h(the)g(b)r
-(ottom)h(left)g(corner)d(of)i(the)h(plotting)427 3019
-y(v)n(olume)i(and)g(the)h(second)e(triple)i(should)f(giv)n(e)f(the)i
-(co)r(ordinates)e(of)h(the)g(top)h(righ)n(t)e(corner.)41
-b(The)29 b(co)r(or-)427 3119 y(dinate)e(on)f(the)h(horizon)n(tal)e
-(axis)h(should)g(b)r(e)h(giv)n(en)f(\014rst)g(in)h(eac)n(h)f(pair.)35
-b(Note)27 b(that)g(the)g(order)e(in)i(whic)n(h)427 3218
-y(these)f(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h(imp)r(ortan)n(t)g(b)r
-(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)h(and)f(righ)n(t)f
-(for)h(subsequen)n(t)427 3318 y(graphical)g(op)r(erations.)259
-3442 y Fc(BASEBO)m(X\()32 b(6)g(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m
-(en\))427 3542 y Fk(An)c(arra)n(y)d(giving)i(the)h(co)r(ordinates)e(of)
-i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g(F)-7
-b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26 b(if)427
-3641 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)g
-(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 3741 y(plotting)e(v)n(olume,)f(as)g(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)36 b(This)27 b(range)g(of)g(co)r
-(ordinates)g(will)g(b)r(e)i(mapp)r(ed)f(linearly)e(on)i(to)427
-3841 y(the)g(plotting)g(area.)35 b(The)28 b(co)r(ordinates)e(should)h
-(b)r(e)h(giv)n(en)f(in)h(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-3965 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4064 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4164 y(b)r(e)24
-b(used)e(for)h(initialising)f(the)h(new)g(Plot3D.)g(The)g(syn)n(tax)e
-(used)i(is)g(iden)n(tical)g(to)f(that)h(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 4264 y(routine.)37 b(If)28 b(no)f(initialisation)g
-(is)h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h
-(supplied.)259 4388 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 4487 y Fk(The)c(global)e(status.)0
-4640 y Fc(Returned)32 b(V)-8 b(alue:)259 4768 y(AST)p
-Ft(_)p Fc(PLOT3D)33 b(=)f(INTEGER)427 4868 y Fk(A)c(p)r(oin)n(ter)f(to)
-h(the)g(new)g(Plot3D.)0 5021 y Fc(Notes:)340 5295 y Fj(\017)45
-b Fk(The)24 b(base)f(F)-7 b(rame)23 b(of)g(the)h(returned)f(Plot3D)g
-(will)g(b)r(e)h(a)f(new)h(F)-7 b(rame)23 b(whic)n(h)g(is)g(created)g(b)
-n(y)g(this)h(function)427 5394 y(to)f(represen)n(t)f(the)i(co)r
-(ordinate)e(system)g(of)h(the)h(underlying)e(graphics)g(system)h
-(\(graphical)f(co)r(ordinates\).)427 5494 y(It)28 b(is)g(giv)n(en)f(a)g
-(F)-7 b(rame)28 b(index)f(of)h(1)f(within)i(the)f(Plot3D.)f(The)h(c)n
-(hoice)f(of)h(base)f(F)-7 b(rame)27 b(\(Base)g(attribute\))427
-5593 y(should)i(not,)h(in)g(general,)e(b)r(e)i(c)n(hanged)e(once)h(a)g
-(Plot3D)g(has)g(b)r(een)h(created)e(\(although)h(y)n(ou)g(could)g(use)
-427 5693 y(this)f(as)f(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)
-f(area)f(around)h(on)g(the)h(plotting)g(surface\).)p
-eop end
-%%Page: 294 304
-TeXDict begin 294 303 bop 0 52 a FG(294)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)31 b(a)f(F)-7 b(rame)30 b(is)g(supplied)g(\(via)g(the)h(FRAME)g
-(p)r(oin)n(ter\),)g(then)f(it)h(b)r(ecomes)f(the)h(curren)n(t)e(F)-7
-b(rame)30 b(of)g(the)427 451 y(new)e(Plot3D)f(and)g(is)h(giv)n(en)f(a)g
-(F)-7 b(rame)27 b(index)h(of)f(2.)340 582 y Fj(\017)45
-b Fk(If)24 b(a)e(F)-7 b(rameSet)23 b(is)f(supplied)h(\(via)g(the)g
-(FRAME)g(p)r(oin)n(ter\),)h(then)f(all)g(the)g(F)-7 b(rames)22
-b(within)i(this)f(F)-7 b(rameSet)427 682 y(b)r(ecome)37
-b(part)f(of)h(the)g(new)g(Plot3D)f(\(where)g(their)h(F)-7
-b(rame)36 b(indices)g(are)g(increased)g(b)n(y)g(1\),)j(with)e(the)427
-781 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)27
-b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g(Plot3D.)
-340 913 y Fj(\017)45 b Fk(If)33 b(a)f(n)n(ull)h(Ob)5
-b(ject)32 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))h(is)f(supplied)h
-(\(via)f(the)h(FRAME)f(p)r(oin)n(ter\),)i(then)f(the)f(re-)427
-1012 y(turned)d(Plot3D)f(will)h(con)n(tain)g(t)n(w)n(o)f(F)-7
-b(rames,)28 b(b)r(oth)h(created)f(b)n(y)h(this)g(function.)41
-b(The)29 b(base)f(F)-7 b(rame)28 b(will)427 1112 y(describ)r(e)j
-(graphics)f(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h(the)g
-(curren)n(t)f(F)-7 b(rame)31 b(will)g(b)r(e)h(a)e(basic)h(F)-7
-b(rame)30 b(with)427 1212 y(no)h(attributes)h(set)f(\(this)h(will)g
-(therefore)e(giv)n(e)h(default)h(v)-5 b(alues)31 b(for)g(suc)n(h)g
-(things)g(as)g(the)g(Plot3D)g(Title)427 1311 y(and)i(the)g(Lab)r(el)f
-(on)g(eac)n(h)g(axis\).)52 b(Ph)n(ysical)31 b(co)r(ordinates)g(will)i
-(b)r(e)g(mapp)r(ed)g(linearly)e(on)i(to)f(graphical)427
-1411 y(co)r(ordinates.)340 1542 y Fj(\017)45 b Fk(An)29
-b(error)e(will)h(result)g(if)h(the)g(F)-7 b(rame)28 b(supplied)h(\(or)f
-(the)g(base)g(F)-7 b(rame)28 b(if)h(a)f(F)-7 b(rameSet)28
-b(w)n(as)g(supplied\))h(is)427 1642 y(not)f(3-dimensional.)340
-1773 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1873 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2069 3780 12 v 0 2200 a FA(AST)p Fe(_)p FA(POINTLIST)341
-b Fd(Create)38 b(a)g(P)m(oin)m(tList)341 b FA(AST)p Fe(_)p
-FA(POINTLIST)0 2374 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(P)n(oin)n(tList)g(ob)5
-b(ject)27 b(and)h(optionally)e(initialises)i(its)g(attributes.)227
-2497 y(A)39 b(P)n(oin)n(tList)f(ob)5 b(ject)39 b(is)f(a)g(sp)r
-(ecialised)h(t)n(yp)r(e)g(of)f(Region)g(whic)n(h)h(represen)n(ts)e(a)i
-(collection)f(of)g(p)r(oin)n(ts)h(in)g(a)227 2597 y(co)r(ordinate)27
-b(F)-7 b(rame.)0 2745 y Fc(In)m(v)m(o)s(cation:)123 b
-Ft(RESULT)41 b(=)i(AST_POINTLIST\()38 b(FRAME,)j(NPNT,)g(COORD,)h(DIM,)
-f(POINTS,)g(UNC,)h(OPTIONS,)e(STATUS)227 2845 y(\))0
-2993 y Fc(Argumen)m(ts:)259 3127 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 3227 y Fk(A)d(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3327 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3426 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3558 y Fc(NPNT)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 3657 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(in)h
-(the)g(Region.)259 3789 y Fc(NCOORD)j(=)h(INTEGER)f(\(Giv)m(en\))427
-3888 y Fk(The)j(n)n(um)n(b)r(er)g(of)g(co)r(ordinates)f(b)r(eing)h
-(supplied)g(for)f(eac)n(h)h(p)r(oin)n(t.)56 b(This)34
-b(m)n(ust)g(equal)g(the)g(n)n(um)n(b)r(er)g(of)427 3988
-y(axes)27 b(in)h(the)g(supplied)g(F)-7 b(rame,)27 b(giv)n(en)g(b)n(y)g
-(its)h(Naxes)f(attribute.)259 4119 y Fc(DIM)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 4219 y Fk(The)d(n)n(um)n(b)r(er)g(of)g(elemen)n(ts)g(along)e
-(the)j(\014rst)e(dimension)h(of)g(the)g(POINTS)g(arra)n(y)d(\(whic)n(h)
-j(con)n(tains)f(the)427 4319 y(p)r(oin)n(t)38 b(co)r(ordinates\).)67
-b(This)38 b(v)-5 b(alue)38 b(is)f(required)g(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)37 b(can)h(b)r(e)g(correctly)427
-4418 y(lo)r(cated)26 b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)g
-(this)h(arra)n(y)-7 b(.)34 b(The)26 b(v)-5 b(alue)26
-b(giv)n(en)g(should)g(not)g(b)r(e)g(less)g(than)g(NPNT.)259
-4550 y Fc(POINTS\()32 b(DIM,)g(NCOORD)f(\))h(=)g(DOUBLE)g(PRECISION)f
-(\(Giv)m(en\))427 4649 y Fk(A)e(2-dimensional)e(arra)n(y)f(giving)h
-(the)i(ph)n(ysical)f(co)r(ordinates)f(of)h(the)h(p)r(oin)n(ts.)39
-b(These)28 b(should)g(b)r(e)g(stored)427 4749 y(suc)n(h)23
-b(that)h(the)g(v)-5 b(alue)23 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-(COORD)g(for)g(p)r(oin)n(t)h(n)n(um)n(b)r(er)f(PNT)g(is)g(found)h(in)f
-(elemen)n(t)427 4848 y(IN\(PNT,COORD\).)259 4980 y Fc(UNC)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 5079 y Fk(An)i(optional)e(p)r(oin)n
-(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h
-(uncertain)n(ties)e(asso)r(ciated)g(with)427 5179 y(eac)n(h)36
-b(p)r(oin)n(t)g(in)h(the)f(P)n(oin)n(tList)f(b)r(eing)i(created.)62
-b(The)36 b(uncertain)n(t)n(y)g(at)g(an)n(y)f(p)r(oin)n(t)i(in)f(the)h
-(P)n(oin)n(tList)427 5279 y(is)i(found)g(b)n(y)g(shifting)h(the)f
-(supplied)g Ft(")p Fk(uncertain)n(t)n(y)p Ft(")e Fk(Region)i(so)f(that)
-h(it)h(is)f(cen)n(tred)f(at)h(the)g(p)r(oin)n(t)427 5378
-y(b)r(eing)c(considered.)57 b(The)35 b(area)e(co)n(v)n(ered)g(b)n(y)h
-(the)h(shifted)g(uncertain)n(t)n(y)f(Region)g(then)h(represen)n(ts)e
-(the)427 5478 y(uncertain)n(t)n(y)27 b(in)h(the)g(p)r(osition.)37
-b(The)27 b(uncertain)n(t)n(y)g(is)g(assumed)g(to)h(b)r(e)g(the)g(same)f
-(for)g(all)g(p)r(oin)n(ts.)427 5593 y(If)38 b(supplied,)j(the)d
-(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e(a)g(class)g(for)g
-(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427 5693
-y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h(etc.\))36
-b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n(tro-symetric)f
-(comp)r(onen)n(t)p eop end
-%%Page: 295 305
-TeXDict begin 295 304 bop 3643 52 a FG(295)427 351 y
-Fk(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 451 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r
-(oin)n(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f
-(Bo)n(x.)57 b(Al-)427 551 y(ternativ)n(ely)-7 b(,)34
-b(a)f(n)n(ull)g(Ob)5 b(ject)33 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)i(supplied,)h(in)e(whic)n(h)g(case)f
-(a)h(default)427 650 y(uncertain)n(t)n(y)23 b(is)g(used)g(equiv)-5
-b(alen)n(t)23 b(to)g(a)f(b)r(o)n(x)h(1.0E-6)e(of)i(the)h(size)e(of)i
-(the)f(b)r(ounding)g(b)r(o)n(x)g(of)g(the)h(P)n(oin)n(tList)427
-750 y(b)r(eing)k(created.)427 866 y(The)h(uncertain)n(t)n(y)f(Region)g
-(has)h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-966 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-1065 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 1165 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 1264 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 1397 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 1497 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 1596 y(used)j(for)g(initialising)g(the)h(new)f(P)n(oin)
-n(tList.)35 b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 1696 y(routine.)259
-1829 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1928 y Fk(The)c(global)e(status.)0 2090
-y Fc(Returned)32 b(V)-8 b(alue:)259 2226 y(AST)p Ft(_)p
-Fc(POINTLIST)34 b(=)e(INTEGER)427 2326 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(P)n(oin)n(tList.)0 2487 y Fc(Notes:)340
-2770 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2869 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-3031 y Fc(Status)33 b(Handling)n(:)227 3177 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 3277 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 3376 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 3575 3780 12 v 0 3706 a FA(AST)p
-Fe(_)p FA(POL)-11 b(YCUR)c(VE)1480 3707 y Fd(Dra)m(w)38
-b(a)h(series)f(of)1407 3807 y(connected)g(geo)s(desic)1730
-3906 y(curv)m(es)2608 3706 y FA(AST)p Fe(_)p FA(POL)-11
-b(YCUR)c(VE)0 4072 y Fc(Description:)44 b Fk(This)22
-b(routine)g(joins)g(a)f(series)g(of)h(p)r(oin)n(ts)g(sp)r(eci\014ed)g
-(in)g(the)h(ph)n(ysical)e(co)r(ordinate)f(system)i(of)g(a)g(Plot)f(b)n
-(y)227 4171 y(dra)n(wing)d(a)h(sequence)g(of)g(geo)r(desic)f(curv)n
-(es.)33 b(It)20 b(is)f(equiv)-5 b(alen)n(t)19 b(to)g(making)f(rep)r
-(eated)h(calls)g(to)g(the)h(AST)p Ft(_)p Fk(CUR)-9 b(VE)227
-4271 y(routine)23 b(\(q.v.\),)h(except)g(that)f(AST)p
-Ft(_)p Fk(POL)-7 b(YCUR)e(VE)22 b(will)i(generally)d(b)r(e)j(more)e
-(e\016cien)n(t)h(when)h(dra)n(wing)d(man)n(y)227 4370
-y(geo)r(desic)27 b(curv)n(es)f(end-to-end.)37 b(A)28
-b(t)n(ypical)f(application)g(of)g(this)h(migh)n(t)g(b)r(e)g(in)g(dra)n
-(wing)e(con)n(tour)g(lines.)227 4495 y(As)i(with)f(AST)p
-Ft(_)p Fk(CUR)-9 b(VE,)27 b(full)h(accoun)n(t)f(is)g(tak)n(en)f(of)i
-(the)f(Mapping)g(b)r(et)n(w)n(een)g(ph)n(ysical)f(and)i(graphical)d(co)
-r(or-)227 4594 y(dinate)j(systems.)36 b(This)28 b(includes)g(an)n(y)e
-(discon)n(tin)n(uities)i(and)f(clipping)h(established)f(using)g(AST)p
-Ft(_)p Fk(CLIP)-7 b(.)0 4744 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_POLYCURVE\()37 b(THIS,)42 b(NPOINT,)f(NCOORD,)f
-(INDIM,)h(IN,)i(STATUS)e(\))0 4893 y Fc(Argumen)m(ts:)259
-5029 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5129
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 5261 y Fc(NPOINT)k(=)g
-(INTEGER)f(\(Giv)m(en\))427 5361 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r
-(oin)n(ts)f(b)r(et)n(w)n(een)h(whic)n(h)f(geo)r(desic)g(curv)n(es)f
-(are)h(to)h(b)r(e)g(dra)n(wn.)259 5494 y Fc(NCOORD)j(=)h(INTEGER)f
-(\(Giv)m(en\))427 5593 y Fk(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r
-(ordinates)e(b)r(eing)h(supplied)h(for)f(eac)n(h)g(p)r(oin)n(t)g
-(\(i.e.)64 b(the)37 b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427
-5693 y(curren)n(t)27 b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n
-(en)f(b)n(y)i(its)f(Naxes)g(attribute\).)p eop end
-%%Page: 296 306
-TeXDict begin 296 305 bop 0 52 a FG(296)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(INDIM)h(=)g(INTEGER)f
-(\(Giv)m(en\))427 451 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g
-(along)f(the)i(\014rst)f(dimension)g(of)g(the)h(IN)f(arra)n(y)e(\(whic)
-n(h)j(con)n(tains)e(the)i(input)427 551 y(co)r(ordinates\).)37
-b(This)28 b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)28 b(can)f(b)r(e)i(correctly)d(lo)r(cated)i
-(if)427 650 y(they)g(do)f(not)h(en)n(tirely)f(\014ll)h(this)g(arra)n(y)
--7 b(.)34 b(The)28 b(v)-5 b(alue)28 b(giv)n(en)e(should)i(not)f(b)r(e)h
-(less)f(than)h(NPOINT.)259 792 y Fc(IN\()k(INDIM,)f(NCOORD)g(\))h(=)g
-(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 892 y Fk(A)h(2-dimensional)f
-(arra)n(y)e(giving)i(the)h(ph)n(ysical)f(co)r(ordinates)g(of)g(the)h(p)
-r(oin)n(ts)g(whic)n(h)g(are)f(to)g(b)r(e)h(joined)427
-992 y(in)i(sequence)g(b)n(y)g(geo)r(desic)e(curv)n(es.)58
-b(These)35 b(should)g(b)r(e)g(stored)f(suc)n(h)h(that)g(the)g(v)-5
-b(alue)35 b(of)g(co)r(ordinate)427 1091 y(n)n(um)n(b)r(er)28
-b(COORD)f(for)g(input)h(p)r(oin)n(t)g(n)n(um)n(b)r(er)g(POINT)e(is)i
-(found)g(in)g(elemen)n(t)f(IN\(POINT,COORD\).)259 1233
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1333 y Fk(The)c(global)e(status.)0 1514 y Fc(Notes:)340
-1815 y Fj(\017)45 b Fk(No)32 b(curv)n(e)f(is)i(dra)n(wn)e(on)h(either)g
-(side)g(of)g(an)n(y)f(p)r(oin)n(t)h(whic)n(h)h(has)e(an)n(y)h(co)r
-(ordinate)f(equal)g(to)h(the)h(v)-5 b(alue)427 1915 y(AST)p
-Ft(__)p Fk(BAD.)340 2057 y Fj(\017)45 b Fk(An)28 b(error)e(results)h
-(if)h(the)g(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h
-(2-dimensional.)340 2199 y Fj(\017)45 b Fk(An)30 b(error)d(also)g
-(results)i(if)g(the)g(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)
-n(t)f(and)h(base)f(F)-7 b(rames)28 b(of)h(the)g(Plot)427
-2299 y(is)f(not)f(de\014ned)h(\(i.e.)38 b(the)28 b(Plot's)e(T)-7
-b(ranIn)n(v)n(erse)26 b(attribute)h(is)h(zero\).)p 0
-2517 3780 12 v 0 2647 a FA(AST)p Fe(_)p FA(POL)-11 b(YGON)1447
-2648 y Fd(Create)37 b(a)h(P)m(olygon)2772 2647 y FA(AST)p
-Fe(_)p FA(POL)-11 b(YGON)0 2856 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(P)n(olygon)f(ob)5
-b(ject)27 b(and)h(optionally)e(initialises)i(its)f(attributes.)227
-2990 y(The)36 b(P)n(olygon)d(class)i(implemen)n(ts)g(a)g(p)r(olygonal)f
-(area,)i(de\014ned)g(b)n(y)f(a)h(collection)e(of)i(v)n(ertices,)g
-(within)g(a)f(2-)227 3089 y(dimensional)20 b(F)-7 b(rame.)34
-b(The)21 b(v)n(ertices)e(are)h(connected)g(together)g(b)n(y)g(geo)r
-(desic)g(curv)n(es)f(within)i(the)g(encapsulated)227
-3189 y(F)-7 b(rame.)34 b(F)-7 b(or)20 b(instance,)i(if)f(the)g
-(encapsulated)f(F)-7 b(rame)21 b(is)f(a)g(simple)h(F)-7
-b(rame)20 b(then)h(the)g(geo)r(desics)f(will)h(b)r(e)g(straigh)n(t)227
-3289 y(lines,)33 b(but)f(if)g(the)g(F)-7 b(rame)31 b(is)h(a)f(SkyF)-7
-b(rame)31 b(then)h(the)g(geo)r(desics)e(will)i(b)r(e)g(great)e
-(circles.)48 b(Note,)33 b(the)f(v)n(ertices)227 3388
-y(m)n(ust)d(b)r(e)g(supplied)g(in)g(an)f(order)f(suc)n(h)i(that)g(the)g
-(inside)f(of)h(the)g(p)r(olygon)f(is)g(to)h(the)g(left)g(of)f(the)h(b)r
-(oundary)f(as)227 3488 y(the)f(v)n(ertices)e(are)h(tra)n(v)n(ersed.)34
-b(Supplying)26 b(them)h(in)g(the)g(rev)n(erse)d(order)h(will)i
-(e\013ectiv)n(ely)f(negate)g(the)h(p)r(olygon.)227 3622
-y(Within)33 b(a)e(SkyF)-7 b(rame,)32 b(neigh)n(b)r(ouring)e(v)n
-(ertices)g(are)h(alw)n(a)n(ys)e(joined)j(using)f(the)h(shortest)e
-(path.)49 b(Th)n(us)31 b(if)h(an)227 3722 y(edge)f(of)g(180)f(degrees)g
-(or)g(more)g(in)i(length)f(is)g(required,)g(it)h(should)e(b)r(e)i
-(split)g(in)n(to)e(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227
-3821 y(less)k(than)h(180)e(degrees.)59 b(The)35 b(closed)g(path)g
-(joining)g(all)h(the)f(v)n(ertices)g(in)g(order)f(will)i(divide)f(the)h
-(celestial)227 3921 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h
-(regions.)60 b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h
-(region)f(whic)n(h)h(is)f(circled)h(in)g(an)227 4020
-y(an)n(ti-clo)r(c)n(kwise)25 b(manner)h(\(when)i(view)n(ed)e(from)g
-(the)h(inside)g(of)g(the)g(celestial)f(sphere\))h(when)g(mo)n(ving)e
-(through)227 4120 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f
-(in)h(whic)n(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e
-(w)n(as)h(created)h(\(i.e.)36 b(the)227 4220 y(inside)28
-b(is)f(to)h(the)g(left)g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g
-(through)g(the)h(v)n(ertices)e(in)i(the)g(order)e(supplied\).)0
-4388 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_POLYGON\()c
-(FRAME,)i(NPNT,)g(DIM,)h(POINTS,)f(UNC,)h(OPTIONS,)e(STATUS)h(\))0
-4556 y Fc(Argumen)m(ts:)259 4711 y(FRAME)31 b(=)h(INTEGER)g(\(Giv)m
-(en\))427 4811 y Fk(A)e(p)r(oin)n(ter)f(to)g(the)g(F)-7
-b(rame)29 b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42
-b(It)30 b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41
-b(A)29 b(deep)427 4910 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)
-h(F)-7 b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h
-(c)n(hanges)f(made)h(to)g(the)427 5010 y(F)-7 b(rame)27
-b(using)h(the)g(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h
-(e\013ect)h(the)g(Region.)259 5152 y Fc(NPNT)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 5252 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(in)h
-(the)g(Region.)259 5394 y Fc(DIM)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(The)d(n)n(um)n(b)r(er)g(of)g(elemen)n(ts)g(along)e(the)j
-(\014rst)e(dimension)h(of)g(the)g(POINTS)g(arra)n(y)d(\(whic)n(h)j(con)
-n(tains)f(the)427 5593 y(p)r(oin)n(t)38 b(co)r(ordinates\).)67
-b(This)38 b(v)-5 b(alue)38 b(is)f(required)g(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)37 b(can)h(b)r(e)g(correctly)427
-5693 y(lo)r(cated)26 b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)g
-(this)h(arra)n(y)-7 b(.)34 b(The)26 b(v)-5 b(alue)26
-b(giv)n(en)g(should)g(not)g(b)r(e)g(less)g(than)g(NPNT.)p
-eop end
-%%Page: 297 307
-TeXDict begin 297 306 bop 3643 52 a FG(297)259 351 y
-Fc(POINTS\()32 b(DIM,)g(2)f(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))
-427 451 y Fk(A)25 b(2-dimensional)e(arra)n(y)f(giving)i(the)g(ph)n
-(ysical)g(co)r(ordinates)f(of)h(the)h(v)n(ertices.)34
-b(These)25 b(should)f(b)r(e)g(stored)427 551 y(suc)n(h)f(that)h(the)g
-(v)-5 b(alue)23 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h(COORD)g(for)g
-(p)r(oin)n(t)h(n)n(um)n(b)r(er)f(PNT)g(is)g(found)h(in)f(elemen)n(t)427
-650 y(IN\(PNT,COORD\).)259 790 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 889 y Fk(An)i(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g
-(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r
-(ciated)g(with)427 989 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r
-(eing)g(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r
-(oin)n(t)h(on)f(the)h(b)r(oundary)f(of)427 1089 y(the)g(Bo)n(x)e(is)h
-(found)h(b)n(y)f(shifting)h(the)f(supplied)h Ft(")p Fk(uncertain)n(t)n
-(y)p Ft(")e Fk(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-1188 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 1288 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-1387 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 1507 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-1607 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 1706 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-1806 y(uncertain)n(t)n(y)g(Region)g(using)g(the)h(supplied)g(p)r(oin)n
-(ter)g(will)f(ha)n(v)n(e)g(no)g(e\013ect)h(on)g(the)g(created)f(Bo)n
-(x.)57 b(Al-)427 1905 y(ternativ)n(ely)-7 b(,)34 b(a)f(n)n(ull)g(Ob)5
-b(ject)33 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(ma)n(y)f(b)r(e)
-i(supplied,)h(in)e(whic)n(h)g(case)f(a)h(default)427
-2005 y(uncertain)n(t)n(y)27 b(is)g(used)h(equiv)-5 b(alen)n(t)27
-b(to)h(a)f(b)r(o)n(x)g(1.0E-6)f(of)h(the)h(size)f(of)h(the)g(Bo)n(x)e
-(b)r(eing)i(created.)427 2125 y(The)h(uncertain)n(t)n(y)f(Region)g(has)
-h(t)n(w)n(o)f(uses:)39 b(1\))29 b(when)g(the)g(AST)p
-Ft(_)p Fk(O)n(VERLAP)f(function)h(compares)e(t)n(w)n(o)427
-2224 y(Regions)j(for)g(equalit)n(y)g(the)h(uncertain)n(t)n(y)f(Region)g
-(is)g(used)h(to)g(determine)f(the)h(tolerance)f(on)g(the)h(com-)427
-2324 y(parison,)23 b(and)g(2\))g(when)g(a)f(Region)h(is)g(mapp)r(ed)g
-(in)n(to)g(a)f(di\013eren)n(t)i(co)r(ordinate)d(system)i(and)g
-(subsequen)n(tly)427 2424 y(simpli\014ed)e(\(using)f(AST)p
-Ft(_)p Fk(SIMPLIFY\),)h(the)f(uncertain)n(ties)g(are)f(used)h(to)g
-(determine)g(if)h(the)g(transformed)427 2523 y(b)r(oundary)27
-b(can)g(b)r(e)h(accurately)f(represen)n(ted)f(b)n(y)h(a)g(sp)r
-(eci\014c)h(shap)r(e)g(of)f(Region.)259 2663 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 2762 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 2862 y(used)27 b(for)g(initialising)g(the)h(new)f(P)n
-(olygon.)34 b(The)28 b(syn)n(tax)e(used)h(is)g(iden)n(tical)g(to)g
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 2962 y(routine.)259
-3101 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3201 y Fk(The)c(global)e(status.)0 3376
-y Fc(Returned)32 b(V)-8 b(alue:)259 3526 y(AST)p Ft(_)p
-Fc(POL)g(YGON)32 b(=)g(INTEGER)427 3625 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(P)n(olygon.)0 3800 y Fc(Notes:)340 4096
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4196 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)-2 4371 y Fc(Status)33
-b(Handling)n(:)227 4517 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 4617 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 4717 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-0 4929 3780 12 v 0 5060 a FA(AST)p Fe(_)p FA(POL)-11
-b(YMAP)1422 5061 y Fd(Create)38 b(a)g(P)m(olyMap)2763
-5060 y FA(AST)p Fe(_)p FA(POL)-11 b(YMAP)0 5263 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(P)n(olyMap)f(and)i
-(optionally)f(initialises)g(its)h(attributes.)227 5394
-y(A)40 b(P)n(olyMap)d(is)i(a)f(form)h(of)g(Mapping)g(whic)n(h)g(p)r
-(erforms)f(a)g(general)g(p)r(olynomial)g(transformation.)70
-b(Eac)n(h)227 5494 y(output)29 b(co)r(ordinate)d(is)i(a)g(p)r
-(olynomial)f(function)i(of)e(all)h(the)g(input)h(co)r(ordinates.)36
-b(The)28 b(co)r(e\016cien)n(ts)g(are)f(sp)r(ec-)227 5593
-y(i\014ed)k(separately)e(for)h(eac)n(h)g(output)i(co)r(ordinate.)44
-b(The)31 b(forw)n(ard)e(and)i(in)n(v)n(erse)e(transformations)g(are)g
-(de\014ned)227 5693 y(indep)r(endan)n(tly)f(b)n(y)g(separate)e(sets)h
-(of)h(co)r(e\016cien)n(ts.)p eop end
-%%Page: 298 308
-TeXDict begin 298 307 bop 0 52 a FG(298)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_POLYMAP\()c(NIN,)j(NOUT,)f(NCOEFF_F,)f
-(COEFF_F,)g(NCOEFF_I,)g(COEFF_I,)g(OPTIONS,)227 451 y(STATUS)h(\))0
-600 y Fc(Argumen)m(ts:)259 736 y(NIN)32 b(=)g(INTEGER)f(\(Giv)m(en\))
-427 836 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-969 y Fc(NOUT)k(=)g(INTEGER)g(\(Giv)m(en\))427 1068 y
-Fk(The)c(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates.)259
-1201 y Fc(NCOEFF)p Ft(_)p Fc(F)j(=)h(INTEGER)f(\(Giv)m(en\))427
-1300 y Fk(The)36 b(n)n(um)n(b)r(er)f(of)h(non-zero)d(co)r(e\016cien)n
-(ts)i(necessary)f(to)i(de\014ne)f(the)h(forw)n(ard)e(transformation)g
-(of)h(the)427 1400 y(P)n(olyMap.)h(If)28 b(zero)e(is)i(supplied,)g(the)
-g(forw)n(ard)d(transformation)h(will)i(b)r(e)g(unde\014ned.)259
-1533 y Fc(COEFF)p Ft(_)p Fc(F\()j Fj(\003)h Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1632 y Fk(An)22 b(arra)n(y)d(con)n
-(taining)h Ft(")p Fk(NCOEFF)p Ft(_)p Fk(F)p Fj(\003)p
-Fk(\()h(2)g(+)g(NIN)g(\))p Ft(")h Fk(elemen)n(ts.)34
-b(Eac)n(h)21 b(group)f(of)h Ft(")p Fk(2)g(+)g(NIN)p Ft(")g
-Fk(adjacen)n(t)427 1732 y(elemen)n(ts)26 b(describ)r(e)f(a)f(single)h
-(co)r(e\016cien)n(t)h(of)f(the)h(forw)n(ard)d(transformation.)35
-b(Within)26 b(eac)n(h)f(suc)n(h)g(group,)427 1831 y(the)g(\014rst)g
-(elemen)n(t)g(is)f(the)h(co)r(e\016cien)n(t)g(v)-5 b(alue;)25
-b(the)h(next)e(elemen)n(t)h(is)g(the)g(in)n(teger)f(index)g(of)h(the)g
-(P)n(olyMap)427 1931 y(output)33 b(whic)n(h)f(uses)f(the)h(co)r
-(e\016cien)n(t)g(within)h(its)f(de\014ning)g(p)r(olynomial)f(\(the)i
-(\014rst)f(output)g(has)g(index)427 2031 y(1\);)48 b(the)41
-b(remaining)f(elemen)n(ts)h(of)g(the)g(group)f(giv)n(e)g(the)h(in)n
-(teger)f(p)r(o)n(w)n(ers)g(to)g(use)h(with)h(eac)n(h)e(input)427
-2130 y(co)r(ordinate)27 b(v)-5 b(alue)27 b(\(p)r(o)n(w)n(ers)g(m)n(ust)
-h(not)f(b)r(e)h(negativ)n(e,)f(and)h(\015oating)f(p)r(oin)n(t)g(v)-5
-b(alues)28 b(are)e(rounded)i(to)f(the)427 2230 y(nearest)g(in)n
-(teger\).)427 2346 y(F)-7 b(or)24 b(instance,)h(if)g(the)f(P)n(olyMap)f
-(has)h(3)g(inputs)h(and)f(2)g(outputs,)h(eac)n(h)f(group)f(consisting)g
-(of)i(5)f(elemen)n(ts,)427 2446 y(A)i(groups)e(suc)n(h)h(as)f
-Ft(")p Fk(\(1.2,)h(2.0,)g(1.0,)g(3.0,)g(0.0\))p Ft(")f
-Fk(describ)r(es)g(a)h(co)r(e\016cien)n(t)g(with)h(v)-5
-b(alue)25 b(1.2)f(whic)n(h)i(is)f(used)427 2545 y(within)36
-b(the)f(de\014nition)h(of)e(output)i(2.)59 b(The)35 b(output)g(v)-5
-b(alue)35 b(is)g(incremen)n(ted)f(b)n(y)h(the)g(pro)r(duct)g(of)g(the)
-427 2645 y(co)r(e\016cien)n(t)25 b(v)-5 b(alue,)25 b(the)g(v)-5
-b(alue)24 b(of)h(input)g(co)r(ordinate)e(1)i(raised)e(to)h(the)h(p)r(o)
-n(w)n(er)f(1,)h(and)f(the)h(v)-5 b(alue)24 b(of)h(input)427
-2745 y(co)r(ordinate)g(2)g(raised)f(to)i(the)g(p)r(o)n(w)n(er)e(3.)36
-b(Input)26 b(co)r(ordinate)f(3)g(is)g(not)h(used)f(since)h(its)g(p)r(o)
-n(w)n(er)e(is)h(sp)r(eci\014ed)427 2844 y(as)i(zero.)36
-b(As)27 b(another)f(example,)h(the)h(group)e Ft(")p Fk(\(-1.0,)g(1.0,)h
-(0.0,)g(0.0,)f(0.0)h(\))p Ft(")g Fk(describ)r(es)g(adds)f(a)h(constan)n
-(t)427 2944 y(v)-5 b(alue)30 b(-1.0)e(on)n(to)g(output)i(1)f(\(it)i(is)
-e(a)g(constan)n(t)g(v)-5 b(alue)29 b(since)g(the)h(p)r(o)n(w)n(er)e
-(for)h(ev)n(ery)f(input)i(axis)f(is)g(giv)n(en)427 3043
-y(as)e(zero\).)427 3160 y(Eac)n(h)i(\014nal)h(output)g(co)r(ordinate)f
-(v)-5 b(alue)30 b(is)g(the)g(sum)g(of)g(the)g Ft(")p
-Fk(NCOEFF)p Ft(_)p Fk(F)p Ft(")f Fk(terms)h(describ)r(ed)g(b)n(y)f(the)
-427 3259 y Ft(")p Fk(NCOEFF)p Ft(_)p Fk(F)p Ft(")e Fk(groups)f(within)i
-(the)g(supplied)g(arra)n(y)-7 b(.)259 3392 y Fc(NCOEFF)p
-Ft(_)p Fc(I)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 3491
-y Fk(The)38 b(n)n(um)n(b)r(er)g(of)g(non-zero)e(co)r(e\016cien)n(ts)i
-(necessary)e(to)i(de\014ne)g(the)g(in)n(v)n(erse)f(transformation)f(of)
-i(the)427 3591 y(P)n(olyMap.)e(If)28 b(zero)e(is)i(supplied,)g(the)g
-(in)n(v)n(erse)e(transformation)g(will)h(b)r(e)h(unde\014ned.)259
-3724 y Fc(COEFF)p Ft(_)p Fc(I\()j Fj(\003)h Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 3823 y Fk(An)i(arra)n(y)d(con)n(taining)i
-Ft(")p Fk(NCOEFF)p Ft(_)p Fk(I)p Fj(\003)p Fk(\()f(2)h(+)g(NOUT)h(\))p
-Ft(")f Fk(elemen)n(ts.)51 b(Eac)n(h)31 b(group)h(of)g
-Ft(")p Fk(2)g(+)g(NOUT)p Ft(")427 3923 y Fk(adjacen)n(t)e(elemen)n(ts)g
-(describ)r(e)f(a)h(single)f(co)r(e\016cien)n(t)h(of)g(the)h(in)n(v)n
-(erse)d(transformation,)h(using)h(the)g(same)427 4023
-y(sc)n(hame)d(as)g Ft(")p Fk(COEFF)p Ft(_)p Fk(F)p Ft(")p
-Fk(,)f(except)i(that)g Ft(")p Fk(inputs)p Ft(")f Fk(and)g
-Ft(")p Fk(outputs)p Ft(")g Fk(are)g(transp)r(osed.)259
-4155 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4255 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 4354 y(used)k(for)f
-(initialising)h(the)g(new)g(P)n(olyMap.)34 b(The)25 b(syn)n(tax)f(used)
-h(is)f(iden)n(tical)h(to)g(that)g(for)f(the)h(AST)p Ft(_)p
-Fk(SET)427 4454 y(routine.)259 4587 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 4686
-y Fk(The)c(global)e(status.)0 4848 y Fc(Returned)32 b(V)-8
-b(alue:)259 4984 y(AST)p Ft(_)p Fc(POL)g(YMAP)33 b(=)f(INTEGER)427
-5084 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(olyMap.)0
-5245 y Fc(Notes:)340 5528 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5627 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 299 309
-TeXDict begin 299 308 bop 3643 52 a FG(299)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(PRISM)724 b Fd(Create)37
-b(a)h(Prism)725 b FA(AST)p Fe(_)p FA(PRISM)0 653 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Prism)g(and)g(optionally)
-g(initialises)h(its)f(attributes.)227 776 y(A)21 b(Prism)e(is)h(a)f
-(Region)g(whic)n(h)h(represen)n(ts)f(an)h(extrusion)f(of)h(an)f
-(existing)h(Region)f(in)n(to)h(one)g(or)f(more)g(orthogonal)227
-876 y(dimensions)k(\(sp)r(eci\014ed)h(b)n(y)f(another)f(Region\).)35
-b(If)23 b(the)h(Region)e(to)h(b)r(e)h(extruded)f(has)f(N)i(axes,)f(and)
-g(the)g(Region)227 976 y(de\014ning)36 b(the)f(extrusion)f(has)h(M)g
-(axes,)i(then)e(the)h(resulting)f(Prism)f(will)h(ha)n(v)n(e)f(\(M+N\))i
-(axes.)59 b(A)35 b(p)r(oin)n(t)h(is)227 1075 y(inside)28
-b(the)g(Prism)f(if)h(the)g(\014rst)f(N)h(axis)f(v)-5
-b(alues)28 b(corresp)r(ond)e(to)h(a)g(p)r(oin)n(t)h(inside)g(the)g
-(Region)f(b)r(eing)h(extruded,)227 1175 y(and)g(the)g(remaining)e(M)i
-(axis)f(v)-5 b(alues)27 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)h(Region)f(de\014ning)h(the)g(extrusion.)227
-1298 y(As)33 b(an)g(example,)h(a)f(cylinder)g(can)f(b)r(e)i(represen)n
-(ted)e(b)n(y)h(extruding)f(an)h(existing)g(Circle,)h(using)e(an)h(In)n
-(terv)-5 b(al)227 1398 y(to)31 b(de\014ne)g(the)g(extrusion.)46
-b(Ih)31 b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n
-(v)n(e)e(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-1497 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 1644 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_PRISM\()c(REGION1,)i(REGION2,)f(OPTIONS,)g
-(STATUS)h(\))0 1791 y Fc(Argumen)m(ts:)259 1925 y(REGION1)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 2024 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Region)f(to)g(b)r(e)h(extruded.)259 2154
-y Fc(REGION2)j(=)h(INTEGER)f(\(Giv)m(en\))427 2254 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region)f(de\014ning)g(the)h(exten)n(t)
-g(of)f(the)h(extrusion.)259 2384 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2484 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-2583 y(b)r(e)26 b(used)e(for)h(initialising)g(the)g(new)g(Prism.)35
-b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)g(for)g
-(the)g(AST)p Ft(_)p Fk(SET)427 2683 y(routine.)259 2813
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2913 y Fk(The)c(global)e(status.)0 3072 y Fc(Returned)32
-b(V)-8 b(alue:)259 3206 y(AST)p Ft(_)p Fc(PRISM)32 b(=)g(INTEGER)427
-3305 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Prism.)0
-3464 y Fc(Notes:)340 3744 y Fj(\017)45 b Fk(Deep)37 b(copies)g(are)e
-(tak)n(en)i(of)f(the)i(supplied)f(Regions.)63 b(This)37
-b(means)f(that)i(an)n(y)e(subsequen)n(t)g(c)n(hanges)427
-3844 y(made)25 b(to)h(the)f(comp)r(onen)n(t)g(Regions)g(using)g(the)h
-(supplied)f(p)r(oin)n(ters)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f
-(the)g(Prism.)340 3974 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 4074 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 4267 V 0 4398 a FA(AST)p Fe(_)p FA(PUR)l(GEW)l(CS)1324
-4399 y Fd(Delete)39 b(all)f(cards)g(in)g(the)1376 4499
-y(FitsChan)g(describing)1439 4613 y(W)m(CS)h(information)2655
-4398 y FA(AST)p Fe(_)p FA(PUR)l(GEW)l(CS)0 4774 y Fc(Description:)44
-b Fk(This)36 b(routine)f(deletes)g(all)h(cards)e(in)i(a)f(FitsChan)h
-(that)f(relate)g(to)g(an)n(y)g(of)h(the)g(recognised)d(W)n(CS)227
-4873 y(enco)r(dings.)k(On)27 b(exit,)h(the)g(curren)n(t)e(card)h(is)h
-(the)g(\014rst)f(remaining)g(card)f(in)i(the)g(FitsChan.)0
-5020 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_PURGEWCS\()c
-(THIS,)j(STATUS)h(\))0 5167 y Fc(Argumen)m(ts:)259 5300
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5400 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 5530 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5630
-y Fk(The)c(global)e(status.)p eop end
-%%Page: 300 310
-TeXDict begin 300 309 bop 0 52 a FG(300)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(PUTCARDS)1396 483 y Fd(Store)38
-b(a)g(set)h(of)f(FITS)1450 583 y(header)h(cards)f(in)h(a)1653
-682 y(FitsChan)2683 482 y FA(AST)p Fe(_)p FA(PUTCARDS)0
-825 y Fc(Description:)44 b Fk(This)36 b(routine)e(stores)g(a)h(set)g
-(of)h(FITS)f(header)f(cards)h(in)g(a)g(FitsChan.)60 b(The)35
-b(cards)f(are)g(supplied)227 924 y(concatenated)41 b(together)f(in)n
-(to)h(a)g(single)g(c)n(haracter)e(string.)78 b(An)n(y)41
-b(existing)g(cards)f(in)h(the)h(FitsChan)g(are)227 1024
-y(remo)n(v)n(ed)24 b(b)r(efore)g(the)i(new)f(cards)f(are)g(added.)35
-b(The)25 b(FitsChan)g(is)g Ft(")p Fk(re-w)n(ound)p Ft(")e
-Fk(on)i(exit)g(b)n(y)g(clearing)e(its)i(Card)227 1124
-y(attribute.)67 b(This)38 b(means)f(that)h(a)f(subsequen)n(t)h(in)n(v)n
-(o)r(cation)e(of)i(AST)p Ft(_)p Fk(READ)g(can)f(b)r(e)h(made)f
-(immediately)227 1223 y(without)28 b(the)g(need)g(to)f(re-wind)h(the)f
-(FitsChan)h(\014rst.)0 1361 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_PUTCARDS\()c(THIS,)j(CARDS,)h(STATUS)f(\))0
-1499 y Fc(Argumen)m(ts:)259 1624 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 1723 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-1845 y Fc(CARDS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1944 y Fk(A)39 b(c)n(haracter)e
-(string)h(con)n(taining)g(the)h(FITS)h(cards)d(to)i(b)r(e)g(stored.)70
-b(Eac)n(h)38 b(individual)h(card)f(should)427 2044 y(o)r(ccup)n(y)23
-b(80)g(c)n(haracters)f(in)h(this)h(string,)g(and)g(there)f(should)h(b)r
-(e)g(no)f(delimiters,)i(new)e(lines,)i(etc,)g(b)r(et)n(w)n(een)427
-2143 y(adjacen)n(t)i(cards.)36 b(The)28 b(\014nal)f(card)g(ma)n(y)g(b)r
-(e)h(less)f(than)h(80)e(c)n(haracters)g(long.)259 2265
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2364 y Fk(The)c(global)e(status.)0 2515 y Fc(Notes:)340
-2786 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(the)g
-(supplied)g(string)f(con)n(tains)g(an)n(y)f(cards)h(whic)n(h)h(cannot)f
-(b)r(e)h(in)n(terpreted.)p 0 2962 V 0 3092 a FA(AST)p
-Fe(_)p FA(PUTFITS)1118 3093 y Fd(Store)38 b(a)h(FITS)g(header)f(card)g
-(in)h(a)1653 3193 y(FitsChan)2857 3092 y FA(AST)p Fe(_)p
-FA(PUTFITS)0 3335 y Fc(Description:)44 b Fk(This)28 b(routine)f(stores)
-g(a)g(FITS)i(header)d(card)h(in)h(a)g(FitsChan.)37 b(The)28
-b(card)f(is)h(either)f(inserted)h(b)r(efore)227 3435
-y(the)g(curren)n(t)f(card)g(\(iden)n(ti\014ed)h(b)n(y)f(the)h(Card)f
-(attribute\),)h(or)f(o)n(v)n(er-writes)e(the)j(curren)n(t)f(card,)f(as)
-h(required.)0 3573 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_PUTFITS\()c(THIS,)k(CARD,)f(OVERWRITE,)f(STATUS)h(\))0
-3711 y Fc(Argumen)m(ts:)259 3836 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3935 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-4057 y Fc(CARD)k(=)g(CHARA)m(CTER)f Fj(\003)h Fc(\()g(80)f(\))h(\(Giv)m
-(en\))427 4156 y Fk(A)26 b(c)n(haracter)e(string)h(string)f(con)n
-(taining)h(the)h(FITS)g(card)f(to)g(b)r(e)h(stored.)35
-b(No)26 b(more)f(than)g(80)g(c)n(haracters)427 4256 y(will)j(b)r(e)g
-(used)g(from)f(this)h(string.)259 4377 y Fc(O)m(VER)-11
-b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427 4477 y Fk(If)26
-b(this)h(v)-5 b(alue)25 b(is)h(.F)-9 b(ALSE.,)26 b(the)g(new)g(card)f
-(is)h(inserted)f(in)h(fron)n(t)g(of)f(the)h(curren)n(t)f(card)g(in)h
-(the)h(FitsChan)427 4576 y(\(as)22 b(iden)n(ti\014ed)h(b)n(y)f(the)g
-(initial)h(v)-5 b(alue)22 b(of)g(the)h(Card)e(attribute\).)36
-b(If)23 b(it)f(is)g(.TR)n(UE.,)i(the)e(new)g(card)g(replaces)427
-4676 y(the)35 b(curren)n(t)e(card.)55 b(In)35 b(either)f(case,)h(the)f
-(Card)f(attribute)h(is)g(then)h(incremen)n(ted)f(b)n(y)g(one)f(so)h
-(that)g(it)427 4776 y(subsequen)n(tly)27 b(iden)n(ti\014es)h(the)g
-(card)f(follo)n(wing)f(the)i(one)g(stored.)259 4897 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4996 y Fk(The)c(global)e(status.)0 5147 y Fc(Notes:)340
-5418 y Fj(\017)45 b Fk(If)28 b(the)g(Card)e(attribute)h(initially)h(p)r
-(oin)n(ts)f(at)g(the)h Ft(")p Fk(end-of-\014le)p Ft(")e
-Fk(\(i.e.)37 b(exceeds)26 b(the)i(n)n(um)n(b)r(er)f(of)g(cards)f(in)427
-5517 y(the)i(FitsChan\),)g(then)g(the)g(new)g(card)f(is)g(app)r(ended)h
-(as)f(the)h(last)f(card)g(in)h(the)g(FitsChan.)340 5639
-y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(the)g(supplied)g
-(string)f(cannot)g(b)r(e)h(in)n(terpreted)f(as)g(a)g(FITS)h(header)f
-(card.)p eop end
-%%Page: 301 311
-TeXDict begin 301 310 bop 3643 52 a FG(301)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(PUTLINE)1215 483 y Fd(Store)38
-b(a)g(text)g(line)g(read)g(b)m(y)h(a)1298 598 y(Channel)e(source)i
-(routine)2835 482 y FA(AST)p Fe(_)p FA(PUTLINE)0 758
-y Fc(Description:)44 b Fk(This)33 b(routine)f(should)g(only)g(b)r(e)h
-(used)f(when)g(implemen)n(ting)h(a)f(routine)g(whic)n(h)g(will)h(b)r(e)
-g(passed)e(as)227 858 y(the)d(SOUR)n(CE)f(argumen)n(t)g(to)g(AST)p
-Ft(_)p Fk(CHANNEL.)h(It)g(should)g(b)r(e)g(used)g(to)f(pass)g(bac)n(k)g
-(\(to)h(the)g(AST)g(library\))227 958 y(eac)n(h)h(line)h(of)f(text)h
-(read)e(from)h(the)h(external)f(data)g(source.)41 b(One)29
-b(suc)n(h)g(line)g(should)h(b)r(e)f(passed)g(bac)n(k)g(in)g(this)227
-1057 y(w)n(a)n(y)e(for)g(eac)n(h)f(in)n(v)n(o)r(cation)h(of)g(the)h
-(source)f(routine.)0 1204 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_PUTLINE\()c(LINE,)k(L,)h(STATUS)e(\))0
-1352 y Fc(Argumen)m(ts:)259 1486 y(LINE)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-1585 y Fk(A)c(c)n(haracter)e(string)h(con)n(taining)f(the)i(line)g(of)g
-(input)g(text)g(whic)n(h)f(has)h(b)r(een)g(read.)259
-1716 y Fc(L)k(=)g(INTEGER)g(\(Giv)m(en\))427 1815 y Fk(The)i(n)n(um)n
-(b)r(er)f(of)h(c)n(haracters)d(in)j(the)g(input)g(line,)h(whic)n(h)f
-(ma)n(y)f(b)r(e)g(zero.)54 b(If)34 b(there)f(is)h(no)f(more)g(input)427
-1915 y(a)n(v)-5 b(ailable)24 b(\(e.g.)35 b(an)25 b(end)g(of)f(\014le)h
-(has)f(b)r(een)h(reac)n(hed\),)g(this)g(v)-5 b(alue)24
-b(should)h(b)r(e)g(set)f(negativ)n(e)g(and)g(this)h(will)427
-2015 y(terminate)j(the)g(read)e(op)r(eration)h(on)g(the)h(Channel.)259
-2145 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2245 y Fk(The)c(global)e(status.)0 2404
-y Fc(Notes:)340 2684 y Fj(\017)45 b Fk(This)28 b(routine)f(is)h(only)f
-(a)n(v)-5 b(ailable)26 b(in)i(the)g(F)-7 b(ortran)26
-b(in)n(terface)h(to)h(the)g(AST)g(library)-7 b(.)p 0
-2879 V 0 3010 a FA(AST)p Fe(_)p FA(RA)c(TE)1052 3011
-y Fd(Calculate)37 b(the)h(rate)g(of)g(c)m(hange)g(of)h(a)1472
-3124 y(Mapping)f(output)3076 3010 y FA(AST)p Fe(_)p FA(RA)-11
-b(TE)0 3308 y Fc(Description:)44 b Fk(This)32 b(routine)f(ev)-5
-b(aluates)31 b(the)g(rate)g(of)h(c)n(hange)e(of)h(a)g(sp)r(eci\014ed)h
-(output)g(of)f(the)h(supplied)g(Mapping)227 3408 y(with)c(resp)r(ect)g
-(to)f(a)g(sp)r(eci\014ed)h(input,)h(at)e(a)g(sp)r(eci\014ed)h(input)h
-(p)r(osition.)227 3531 y(The)d(result)f(is)g(estimated)g(b)n(y)g(in)n
-(terp)r(olating)g(the)g(function)h(using)f(a)g(fourth)g(order)f(p)r
-(olynomial)h(in)g(the)h(neigh-)227 3631 y(b)r(ourho)r(o)r(d)i(of)h(the)
-g(sp)r(eci\014ed)f(p)r(osition.)40 b(The)28 b(size)h(of)f(the)h(neigh)n
-(b)r(ourho)r(o)r(d)e(used)i(is)f(c)n(hosen)g(to)g(minimise)h(the)227
-3730 y(RMS)38 b(residual)f(p)r(er)g(unit)h(length)g(b)r(et)n(w)n(een)f
-(the)h(in)n(terp)r(olating)e(p)r(olynomial)h(and)g(the)h(supplied)g
-(Mapping)227 3830 y(function.)59 b(This)35 b(metho)r(d)g(pro)r(duces)f
-(go)r(o)r(d)g(accuracy)f(but)j(can)e(in)n(v)n(olv)n(e)f(ev)-5
-b(aluating)35 b(the)g(Mapping)f(100)f(or)227 3930 y(more)27
-b(times.)0 4077 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_RATE\()d(THIS,)h(AT,)i(AX1,)f(AX2,)g(STATUS)f(\))0
-4224 y Fc(Argumen)m(ts:)259 4358 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4457 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)
-h(applied.)259 4588 y Fc(A)-8 b(T\()33 b Fj(\003)e Fc(\))h(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 4688 y Fk(An)23 b(arra)n(y)c(holding)j
-(the)g(axis)f(v)-5 b(alues)22 b(at)f(the)i(p)r(osition)e(at)h(whic)n(h)
-g(the)g(rate)f(of)h(c)n(hange)f(is)h(to)g(b)r(e)g(ev)-5
-b(aluated.)427 4787 y(The)28 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)
-h(this)g(arra)n(y)d(should)j(equal)f(the)h(n)n(um)n(b)r(er)f(of)h
-(inputs)g(to)f(the)h(Mapping.)259 4918 y Fc(AX1)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 5017 y Fk(The)f(index)f(of)h(the)f(Mapping)g(output)h(for)f
-(whic)n(h)g(the)h(rate)f(of)g(c)n(hange)f(is)i(to)f(b)r(e)h(found)g
-(\(output)g(n)n(um-)427 5117 y(b)r(ering)d(starts)g(at)h(1)f(for)g(the)
-h(\014rst)f(output\).)259 5247 y Fc(AX2)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 5347 y Fk(The)k(index)g(of)g(the)g(Mapping)g(input)h(whic)n
-(h)e(is)h(to)g(b)r(e)g(v)-5 b(aried)35 b(in)g(order)e(to)i(\014nd)g
-(the)h(rate)e(of)h(c)n(hange)427 5447 y(\(input)29 b(n)n(um)n(b)r
-(ering)e(starts)g(at)g(1)g(for)g(the)h(\014rst)g(input\).)259
-5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5677 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 302 312
-TeXDict begin 302 311 bop 0 52 a FG(302)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 492 y(AST)p Ft(_)p Fc(RA)g(TE)32 b(=)g(DOUBLE)g(PRECISION)
-427 592 y Fk(The)c(rate)g(of)g(c)n(hange)f(of)h(Mapping)f(output)i(AX1)
-f(with)h(resp)r(ect)e(to)h(input)h(AX2,)f(ev)-5 b(aluated)28
-b(at)g(A)-7 b(T,)28 b(or)427 691 y(AST)p Ft(__)p Fk(BAD)g(if)g(the)g(v)
--5 b(alue)28 b(cannot)f(b)r(e)h(calculated.)0 858 y Fc(Notes:)340
-1144 y Fj(\017)45 b Fk(A)24 b(v)-5 b(alue)23 b(of)g(AST)p
-Ft(__)p Fk(BAD)h(will)f(b)r(e)h(returned)f(if)h(this)g(function)g(is)f
-(in)n(v)n(ok)n(ed)f(with)i(the)f(global)f(error)g(status)427
-1244 y(set,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 1448 3780 12 v 0 1578 a FA(AST)p Fe(_)p FA(RA)-11
-b(TEMAP)388 b Fd(Create)37 b(a)i(RateMap)390 b FA(AST)p
-Fe(_)p FA(RA)-11 b(TEMAP)0 1771 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(RateMap)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 1898
-y(A)37 b(RateMap)g(is)f(a)g(Mapping)h(whic)n(h)f(represen)n(ts)g(a)g
-(single)g(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)h(of)h(another)227
-1997 y(Mapping.)k(The)28 b(Mapping)h(for)f(whic)n(h)h(the)g(Jacobian)f
-(is)g(required)g(is)h(sp)r(eci\014ed)g(when)g(the)g(new)g(RateMap)g(is)
-227 2097 y(created,)e(and)h(is)f(referred)f(to)i(as)f(the)h
-Ft(")p Fk(encapsulated)e(Mapping)p Ft(")h Fk(b)r(elo)n(w.)227
-2224 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 2323 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 2423
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 2523 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 2649 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 2749 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-2903 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_RATEMAP\()c
-(MAP,)j(AX1,)g(AX2,)f(OPTIONS,)g(STATUS)g(\))0 3057 y
-Fc(Argumen)m(ts:)259 3197 y(MAP)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3297 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Mapping.)259
-3432 y Fc(AX1)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3532
-y Fk(Index)26 b(of)h(the)f(output)h(from)f(the)g(encapsulated)g
-(Mapping)g(for)f(whic)n(h)h(the)h(rate)e(of)h(c)n(hange)f(is)i
-(required.)427 3631 y(This)g(corresp)r(onds)e(to)i(the)g(delta)g(quan)n
-(tit)n(y)f(forming)g(the)h(n)n(umerator)f(of)g(the)i(required)d(elemen)
-n(t)i(of)g(the)427 3731 y(Jacobian)f(matrix.)37 b(The)27
-b(\014rst)h(axis)f(has)g(index)g(1.)259 3866 y Fc(AX2)32
-b(=)g(INTEGER)f(\(Giv)m(en\))427 3966 y Fk(Index)f(of)g(the)h(input)g
-(to)f(the)g(encapsulated)g(Mapping)f(whic)n(h)h(is)g(to)g(b)r(e)h(v)-5
-b(aried.)43 b(This)31 b(corresp)r(onds)d(to)427 4065
-y(the)h(delta)g(quan)n(tit)n(y)f(forming)h(the)g(denominator)e(of)i
-(the)g(required)f(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix.)427
-4165 y(The)h(\014rst)f(axis)g(has)g(index)h(1.)259 4300
-y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 4399 y Fk(A)22 b(c)n(haracter)e(string)h(con)n
-(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g(attribute)g
-(assignmen)n(ts)f(to)g(b)r(e)427 4499 y(used)j(for)g(initialising)g
-(the)g(new)h(RateMap.)35 b(The)24 b(syn)n(tax)f(used)h(is)h(iden)n
-(tical)e(to)h(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427
-4599 y(routine.)259 4734 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)
-m(en)h(and)g(Returned\))427 4833 y Fk(The)c(global)e(status.)0
-5000 y Fc(Returned)32 b(V)-8 b(alue:)259 5140 y(AST)p
-Ft(_)p Fc(RA)g(TEMAP)32 b(=)g(INTEGER)427 5240 y Fk(A)c(p)r(oin)n(ter)f
-(to)h(the)g(new)g(RateMap.)0 5406 y Fc(Notes:)340 5693
-y Fj(\017)45 b Fk(The)28 b(forw)n(ard)e(transformation)g(of)h(the)h
-(encapsulated)f(Mapping)g(m)n(ust)h(b)r(e)g(de\014ned.)p
-eop end
-%%Page: 303 313
-TeXDict begin 303 312 bop 3643 52 a FG(303)340 351 y
-Fj(\017)45 b Fk(Note)32 b(that)g(the)g(comp)r(onen)n(t)g(Mappings)f
-(supplied)h(are)f(not)h(copied)f(b)n(y)h(AST)p Ft(_)p
-Fk(RA)-7 b(TEMAP)31 b(\(the)i(new)427 451 y(RateMap)40
-b(simply)h(retains)f(a)g(reference)g(to)g(them\).)77
-b(They)40 b(ma)n(y)g(con)n(tin)n(ue)g(to)h(b)r(e)g(used)f(for)g(other)
-427 551 y(purp)r(oses,)j(but)d(should)g(not)g(b)r(e)g(deleted.)75
-b(If)40 b(a)g(RateMap)f(con)n(taining)g(a)h(cop)n(y)f(of)h(its)g(comp)r
-(onen)n(t)427 650 y(Mappings)27 b(is)h(required,)e(then)j(a)e(cop)n(y)f
-(of)i(the)g(RateMap)f(should)h(b)r(e)g(made)f(using)g(AST)p
-Ft(_)p Fk(COPY.)340 811 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 911 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1166 3780 12 v 0 1297 a FA(AST)p Fe(_)p FA(READ)1066
-1298 y Fd(Read)39 b(an)g(Ob)7 b(ject)38 b(from)f(a)i(Channel)3055
-1297 y FA(AST)p Fe(_)p FA(READ)0 1542 y Fc(Description:)44
-b Fk(This)35 b(function)g(reads)f(the)h(next)g(Ob)5 b(ject)34
-b(from)h(a)f(Channel)h(and)f(returns)g(a)h(p)r(oin)n(ter)f(to)g(the)i
-(new)227 1642 y(Ob)5 b(ject.)0 1847 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_READ\()d(THIS,)h(STATUS)h(\))0
-2053 y Fc(Argumen)m(ts:)259 2245 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2345 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)259
-2506 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2605 y Fk(The)c(global)e(status.)0 2823
-y Fc(Class)31 b(Applicabilit)m(y:)259 3016 y(FitsChan)427
-3115 y Fk(All)24 b(successful)g(use)f(of)h(AST)p Ft(_)p
-Fk(READ)g(on)f(a)h(FitsChan)g(is)f(destructiv)n(e,)h(so)f(that)h(FITS)g
-(header)f(cards)g(are)427 3215 y(consumed)g(in)h(the)g(pro)r(cess)e(of)
-i(reading)e(an)h(Ob)5 b(ject,)25 b(and)e(are)f(remo)n(v)n(ed)g(from)h
-(the)h(FitsChan)g(\(this)g(dele-)427 3314 y(tion)g(can)f(b)r(e)g(prev)n
-(en)n(ted)g(for)g(sp)r(eci\014c)g(cards)f(b)n(y)h(calling)g(the)h
-(FitsChan)f(AST)p Ft(_)p Fk(RET)-7 b(AINFITS)24 b(routine\).)427
-3414 y(An)36 b(unsuccessful)g(call)f(of)h(AST)p Ft(_)p
-Fk(READ)f(\(for)h(instance,)h(caused)e(b)n(y)g(the)h(FitsChan)g(not)g
-(con)n(taining)427 3514 y(the)30 b(necessary)d(FITS)i(headers)f(cards)f
-(needed)i(to)g(create)f(an)h(Ob)5 b(ject\))29 b(results)f(in)h(the)g
-(con)n(ten)n(ts)f(of)h(the)427 3613 y(FitsChan)f(b)r(eing)g(left)g(unc)
-n(hanged.)259 3774 y Fc(StcsChan)427 3874 y Fk(The)f(AST)h(Ob)5
-b(ject)26 b(returned)h(b)n(y)g(a)f(successful)h(use)g(of)g(AST)p
-Ft(_)p Fk(READ)g(on)g(an)f(StcsChan,)h(will)g(b)r(e)h(either)427
-3973 y(a)g(Region)g(or)f(a)h(KeyMap,)f(dep)r(ending)i(on)f(the)h(v)-5
-b(alues)27 b(of)i(the)f(StcsArea,)g(StcsCo)r(ords)f(and)h(StcsProps)427
-4073 y(attributes.)37 b(See)28 b(the)g(do)r(cumen)n(tation)f(for)g
-(these)h(attributes)f(for)g(further)h(information.)0
-4291 y Fc(Returned)k(V)-8 b(alue:)259 4483 y(AST)p Ft(_)p
-Fc(READ)32 b(=)g(INTEGER)427 4583 y Fk(A)c(p)r(oin)n(ter)f(to)g(the)h
-(new)g(Ob)5 b(ject.)36 b(The)28 b(class)e(to)h(whic)n(h)h(this)f(will)h
-(b)r(elong)f(is)g(determined)h(b)n(y)f(the)h(input)427
-4683 y(data,)f(so)g(is)h(not)f(kno)n(wn)g(in)h(adv)-5
-b(ance.)0 4900 y Fc(Notes:)340 5239 y Fj(\017)45 b Fk(A)24
-b(n)n(ull)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))h(will)g(b)r(e)h(returned,)f(without)g(error,)f(if)h
-(the)g(Channel)g(con)n(tains)427 5339 y(no)k(further)f(Ob)5
-b(jects)27 b(to)h(b)r(e)g(read.)340 5499 y Fj(\017)45
-b Fk(A)26 b(n)n(ull)f(Ob)5 b(ject)25 b(p)r(oin)n(ter)g(will)g(also)f(b)
-r(e)h(returned)g(if)h(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j
-(ST)-7 b(A)g(TUS)26 b(set)f(to)g(an)427 5599 y(error)h(v)-5
-b(alue,)27 b(or)g(if)h(it)g(should)g(fail)f(for)g(an)n(y)g(reason.)p
-eop end
-%%Page: 304 314
-TeXDict begin 304 313 bop 0 52 a FG(304)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(REBIN)p Fb(<)p FA(X)p Fb(>)1266
-483 y Fd(Rebin)39 b(a)g(region)e(of)h(a)h(data)1789 598
-y(grid)2725 482 y FA(AST)p Fe(_)p FA(REBIN)p Fb(<)p FA(X)p
-Fb(>)0 793 y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(set)g(of)g
-(functions)h(for)e(rebinning)h(gridded)g(data)g(\(e.g.)38
-b(an)28 b(image\))g(under)g(the)h(con)n(trol)e(of)227
-893 y(a)f(geometrical)f(transformation,)g(whic)n(h)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(a)g(Mapping.)36 b(The)26 b(functions)h(op)r(erate)
-e(on)h(a)g(pair)g(of)227 993 y(data)f(grids)f(\(input)i(and)f
-(output\),)i(eac)n(h)d(of)h(whic)n(h)g(ma)n(y)g(ha)n(v)n(e)f(an)n(y)g
-(n)n(um)n(b)r(er)h(of)g(dimensions.)36 b(Rebinning)25
-b(ma)n(y)227 1092 y(b)r(e)e(restricted)f(to)g(a)g(sp)r(eci\014ed)g
-(region)f(of)i(the)f(input)h(grid.)35 b(An)23 b(asso)r(ciated)e(grid)g
-(of)i(error)d(estimates)i(asso)r(ciated)227 1192 y(with)30
-b(the)g(input)g(data)f(ma)n(y)g(also)f(b)r(e)i(supplied)g(\(in)g(the)g
-(form)f(of)g(v)-5 b(ariance)29 b(v)-5 b(alues\),)30 b(so)e(as)h(to)h
-(pro)r(duce)f(error)227 1291 y(estimates)f(for)f(the)h(rebined)f
-(output)h(data.)37 b(Propagation)24 b(of)k(missing)f(data)g(\(bad)h
-(pixels\))g(is)f(supp)r(orted.)227 1417 y(Note,)d(if)f(y)n(ou)e(will)i
-(b)r(e)g(rebining)f(a)g(sequence)g(of)g(input)i(arra)n(ys)19
-b(and)k(then)g(co-adding)e(them)i(in)n(to)f(a)g(single)g(arra)n(y)-7
-b(,)227 1517 y(the)28 b(alternativ)n(e)f(AST)p Ft(_)p
-Fk(REBINSEQ)p Fm(<)p Fk(X)p Fm(>)e Fk(routines)i(will)h(in)g(general)e
-(b)r(e)i(more)f(e\016cien)n(t.)227 1642 y(Y)-7 b(ou)32
-b(should)g(use)g(a)g(rebinning)g(function)g(whic)n(h)g(matc)n(hes)g
-(the)g(n)n(umerical)g(t)n(yp)r(e)g(of)g(the)h(data)e(y)n(ou)h(are)f
-(pro-)227 1742 y(cessing)h(b)n(y)h(replacing)f Fm(<)p
-Fk(X)p Fm(>)g Fk(in)h(the)h(generic)e(function)h(name)g(AST)p
-Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)f Fk(b)n(y)g(an)h(appropriate)e
-(1-)227 1842 y(or)26 b(2-c)n(haracter)e(t)n(yp)r(e)j(co)r(de.)36
-b(F)-7 b(or)26 b(example,)h(if)g(y)n(ou)f(are)g(rebinning)g(data)g
-(with)i(t)n(yp)r(e)f(REAL,)f(y)n(ou)g(should)h(use)227
-1941 y(the)j(function)g(AST)p Ft(_)p Fk(REBINR)f(\(see)g(the)h
-Ft(")p Fk(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fk(section)g(b)r(elo)n
-(w)g(for)g(the)g(co)r(des)g(appropriate)227 2041 y(to)f(other)f(n)n
-(umerical)g(t)n(yp)r(es\).)227 2167 y(Rebinning)i(of)g(the)g(grid)f(of)
-g(input)i(data)e(is)h(p)r(erformed)f(b)n(y)g(transforming)g(the)h(co)r
-(ordinates)e(of)i(the)g(cen)n(tre)f(of)227 2266 y(eac)n(h)h(input)g
-(grid)g(elemen)n(t)g(\(or)f(pixel\))i(in)n(to)f(the)g(co)r(ordinate)f
-(system)h(of)g(the)g(output)h(grid.)41 b(The)29 b(input)h(pixel)227
-2366 y(v)-5 b(alue)35 b(is)g(then)h(divided)f(up)h(and)f(assigned)f(to)
-h(the)g(output)h(pixels)f(in)g(the)h(neigh)n(b)r(ourho)r(o)r(d)e(of)h
-(the)h(cen)n(tral)227 2465 y(output)30 b(co)r(ordinates.)39
-b(A)29 b(c)n(hoice)g(of)f(sc)n(hemes)h(are)f(pro)n(vided)f(for)i
-(determining)g(ho)n(w)f(eac)n(h)g(input)i(pixel)f(v)-5
-b(alue)227 2565 y(is)24 b(divided)g(up)h(b)r(et)n(w)n(een)f(the)g
-(output)g(pixels.)36 b(In)24 b(general,)f(eac)n(h)h(output)g(pixel)g
-(ma)n(y)f(b)r(e)i(assigned)d(v)-5 b(alues)24 b(from)227
-2665 y(more)18 b(than)h(one)g(input)h(pixel.)34 b(All)19
-b(con)n(tributions)f(to)h(a)f(giv)n(en)h(output)g(pixel)g(are)f(summed)
-h(to)g(pro)r(duce)f(the)i(\014nal)227 2764 y(output)25
-b(pixel)f(v)-5 b(alue.)36 b(Output)25 b(pixels)f(can)f(b)r(e)i(set)f
-(to)g(the)h(supplied)f(bad)g(v)-5 b(alue)24 b(if)h(they)g(receiv)n(e)d
-(con)n(tributions)227 2864 y(from)28 b(an)f(insu\016cien)n(t)h(n)n(um)n
-(b)r(er)f(of)h(input)g(pixels.)37 b(This)27 b(is)h(con)n(trolled)e(b)n
-(y)h(the)h(WLIM)g(argumen)n(t.)227 2990 y(Input)34 b(pixel)e(co)r
-(ordinates)g(are)f(transformed)h(in)n(to)g(the)h(co)r(ordinate)f
-(system)g(of)h(the)g(output)g(grid)f(using)g(the)227
-3089 y(forw)n(ard)f(transformation)f(of)i(the)h(Mapping)f(whic)n(h)g
-(is)g(supplied.)50 b(This)33 b(means)e(that)i(geometrical)d(features)
-227 3189 y(in)i(the)f(input)h(data)f(are)f(sub)5 b(jected)31
-b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i(they)g(are)
-f(transferred)227 3289 y(from)e(the)g(input)g(to)f(the)h(output)g
-(grid.)227 3414 y(In)c(practice,)f(transforming)e(the)j(co)r(ordinates)
-e(of)h(ev)n(ery)e(pixel)j(of)f(a)f(large)g(data)h(grid)f(can)h(b)r(e)g
-(time-consuming,)227 3514 y(esp)r(ecially)38 b(if)g(the)h(Mapping)f(in)
-n(v)n(olv)n(es)e(complicated)i(functions,)j(suc)n(h)c(as)h(sky)f(pro)5
-b(jections.)67 b(T)-7 b(o)38 b(impro)n(v)n(e)227 3614
-y(p)r(erformance,)29 b(it)g(is)g(therefore)f(p)r(ossible)g(to)h(appro)n
-(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)g(set)g(of)f(linear)h
-(trans-)227 3713 y(formations)h(whic)n(h)h(are)f(applied)g(piece-wise)h
-(to)f(separate)g(sub-regions)f(of)h(the)i(data.)46 b(This)30
-b(appro)n(ximation)227 3813 y(pro)r(cess)37 b(is)h(applied)g
-(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)i(under)f(con)n
-(trol)f(of)h(an)g(accuracy)e(crite-)227 3912 y(rion)25
-b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f(geometrical)f
-(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r(duced,)f(as)f(a)
-227 4012 y(fraction)i(of)h(a)f(pixel.)227 4138 y(This)34
-b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e(the)i(Mapping)
-f(with)h(a)f(linear)g(transformation)f(applied)227 4237
-y(o)n(v)n(er)j(the)j(whole)e(region)g(of)h(the)g(input)h(grid)e(whic)n
-(h)h(is)g(b)r(eing)g(used.)65 b(If)37 b(this)g(pro)n(v)n(es)e(to)i(b)r
-(e)g(insu\016cien)n(tly)227 4337 y(accurate,)c(the)h(input)f(region)f
-(is)h(sub-divided)g(in)n(to)f(t)n(w)n(o)h(along)e(its)i(largest)f
-(dimension)h(and)g(the)g(pro)r(cess)f(is)227 4437 y(rep)r(eated)h
-(within)h(eac)n(h)f(of)g(the)h(resulting)e(sub-regions.)53
-b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n(tin)n(ues)f(un)n
-(til)i(a)227 4536 y(su\016cien)n(tly)27 b(go)r(o)r(d)g(linear)f(appro)n
-(ximation)g(is)h(found,)g(or)f(the)i(region)e(to)h(whic)n(h)g(it)h(is)f
-(b)r(eing)g(applied)g(b)r(ecomes)227 4636 y(to)r(o)h(small)f(\(in)h
-(whic)n(h)f(case)g(the)h(original)e(Mapping)h(is)h(used)g(directly\).)0
-4788 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_REBIN)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()c(THIS,)j(WLIM,)h(NDIM_IN,)e(LBND_IN,)g
-(UBND_IN,)h(IN,)h(IN_VAR,)f(SPREAD,)227 4887 y(PARAMS,)g(FLAGS,)g(TOL,)
-h(MAXPIX,)f(BADVAL,)f(NDIM_OUT,)g(LBND_OUT,)g(UBND_OUT,)g(LBND,)h
-(UBND,)h(OUT,)227 4987 y(OUT_VAR,)f(STATUS)g(\))0 5139
-y Fc(Argumen)m(ts:)259 5277 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5377 y Fk(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d(forw)n(ard)f
-(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f(the)h(co)r
-(ordinates)427 5477 y(of)28 b(pixels)f(in)h(the)g(input)g(grid)f(in)n
-(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g(grid.)427
-5593 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e(used)h(b)n
-(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 5693 y(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)
-g(input)h(grid)f(dimensions)f(giv)n(en)h(b)n(y)g(the)g(v)-5
-b(alue)25 b(of)f(NDIM)p Ft(_)p Fk(IN)h(b)r(elo)n(w.)35
-b(Similarly)-7 b(,)p eop end
-%%Page: 305 315
-TeXDict begin 305 314 bop 3643 52 a FG(305)427 351 y
-Fk(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)f(\(Nout)h
-(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g(of)g(output)
-g(grid)427 451 y(dimensions)g(giv)n(en)e(b)n(y)i(NDIM)p
-Ft(_)p Fk(OUT.)259 592 y Fc(WLIM)k(=)g(DOUBLE)g(PRECISION)g(\(Giv)m
-(en\))427 692 y Fk(Giv)n(es)27 b(the)g(required)f(n)n(um)n(b)r(er)g(of)
-h(input)h(pixel)f(v)-5 b(alues)26 b(whic)n(h)h(m)n(ust)g(con)n(tribute)
-g(to)f(an)h(output)g(pixel)g(in)427 792 y(order)f(for)h(the)h(output)f
-(pixel)h(v)-5 b(alue)27 b(to)g(b)r(e)h(considered)e(v)-5
-b(alid.)37 b(If)27 b(the)h(sum)f(of)h(the)f(input)h(pixel)g(w)n(eigh)n
-(ts)427 891 y(con)n(tributing)f(to)h(an)g(output)g(pixel)g(is)f(less)h
-(than)g(the)g(supplied)g(WLIM)g(v)-5 b(alue,)28 b(then)g(the)g(output)h
-(pixel)427 991 y(v)-5 b(alue)28 b(is)f(returned)g(set)h(to)f(the)h
-(supplied)g(bad)g(v)-5 b(alue.)259 1132 y Fc(NDIM)p Ft(_)p
-Fc(IN)31 b(=)h(INTEGER)g(\(Giv)m(en\))427 1232 y Fk(The)c(n)n(um)n(b)r
-(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28
-b(should)f(b)r(e)h(at)g(least)f(one.)259 1373 y Fc(LBND)p
-Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m
-(en\))427 1473 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r
-(ordinates)e(of)h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g
-(the)h(input)g(grid)f(along)427 1573 y(eac)n(h)27 b(dimension.)259
-1714 y Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g
-(INTEGER)f(\(Giv)m(en\))427 1814 y Fk(An)k(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)
-g(in)h(the)f(input)h(grid)f(along)427 1913 y(eac)n(h)27
-b(dimension.)427 2034 y(Note)h(that)f(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)
-p Ft(_)p Fk(IN)h(together)f(de\014ne)g(the)h(shap)r(e)f(and)g(size)g
-(of)h(the)g(input)g(grid,)e(its)427 2133 y(exten)n(t)33
-b(along)e(a)i(particular)e(\(J'th\))j(dimension)e(b)r(eing)h(UBND)p
-Ft(_)p Fk(IN\(J\)-LBND)p Ft(_)p Fk(IN\(J\)+1.)52 b(They)33
-b(also)427 2233 y(de\014ne)25 b(the)f(input)i(grid's)d(co)r(ordinate)g
-(system,)i(eac)n(h)e(pixel)i(ha)n(ving)e(unit)i(exten)n(t)f(along)f
-(eac)n(h)h(dimension)427 2333 y(with)k(in)n(tegral)f(co)r(ordinate)f(v)
--5 b(alues)27 b(at)h(its)g(cen)n(tre.)259 2474 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 2574 y Fk(An)k(arra)n(y)-7 b(,)36
-b(with)g(one)g(elemen)n(t)f(for)h(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)g(con)n(taining)e(the)h(input)g(data)g(to)427
-2673 y(b)r(e)c(rebined.)47 b(The)32 b(n)n(umerical)e(t)n(yp)r(e)h(of)h
-(this)f(arra)n(y)e(should)i(matc)n(h)g(the)g(1-)g(or)f(2-c)n(haracter)e
-(t)n(yp)r(e)k(co)r(de)427 2773 y(app)r(ended)d(to)f(the)g(function)h
-(name)f(\(e.g.)38 b(if)29 b(y)n(ou)f(are)f(using)h(AST)p
-Ft(_)p Fk(REBINR,)g(the)g(t)n(yp)r(e)g(of)h(eac)n(h)e(arra)n(y)427
-2873 y(elemen)n(t)h(should)f(b)r(e)h(REAL\).)427 2993
-y(The)33 b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c
-(should)j(b)r(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g
-(grid)427 3093 y(dimension)39 b(v)-5 b(aries)39 b(most)g(rapidly)g(and)
-g(that)g(of)h(the)f(\014nal)g(dimension)h(least)f(rapidly)f(\(i.e.)73
-b(normal)427 3192 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 3334 y Fc(IN)p Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427
-3434 y Fk(An)24 b(optional)e(second)h(arra)n(y)e(with)i(the)h(same)f
-(size)f(and)h(t)n(yp)r(e)h(as)e(the)i(IN)f(arra)n(y)-7
-b(.)34 b(If)23 b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)427
-3533 y(\015ag)28 b(is)g(set)h(via)f(the)h(FLA)n(GS)g(argumen)n(t)e(\(b)
-r(elo)n(w\),)i(this)g(arra)n(y)d(should)i(con)n(tain)g(a)g(set)h(of)f
-(non-negativ)n(e)427 3633 y(v)-5 b(alues)32 b(whic)n(h)h(represen)n(t)e
-(estimates)h(of)g(the)h(statistical)f(v)-5 b(ariance)31
-b(asso)r(ciated)g(with)i(eac)n(h)e(elemen)n(t)i(of)427
-3732 y(the)28 b(IN)g(arra)n(y)-7 b(.)35 b(Estimates)27
-b(of)g(the)h(v)-5 b(ariance)27 b(of)g(the)h(rebined)g(output)g(data)f
-(will)h(then)g(b)r(e)g(calculated.)427 3853 y(If)d(the)g(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)25 b(\015ag)f(is)g(not)h(set,)g(no)g(input)g(v)
--5 b(ariance)24 b(estimates)g(are)g(required)f(and)i(this)g(arra)n(y)
-427 3953 y(will)j(not)g(b)r(e)g(used.)37 b(A)27 b(dumm)n(y)h(\(e.g.)37
-b(one-elemen)n(t\))27 b(arra)n(y)e(ma)n(y)i(then)h(b)r(e)g(supplied.)
-259 4094 y Fc(SPREAD)k(=)g(INTEGER)f(\(Giv)m(en\))427
-4194 y Fk(This)25 b(argumen)n(t)e(sp)r(eci\014es)i(the)g(sc)n(heme)f
-(to)g(b)r(e)h(used)g(for)f(dividing)g(eac)n(h)g(input)h(data)f(v)-5
-b(alue)25 b(up)g(amongst)427 4293 y(the)30 b(corresp)r(onding)d(output)
-j(pixels.)42 b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g
-(set)g(of)g(pre-de\014ned)g(sc)n(hemes)427 4393 y(b)n(y)f(supplying)f
-(one)g(of)h(the)g(v)-5 b(alues)27 b(describ)r(ed)g(in)h(the)g
-Ft(")p Fk(Pixel)f(Spreading)g(Sc)n(hemes)p Ft(")f Fk(section)i(b)r(elo)
-n(w.)36 b(If)427 4493 y(a)d(v)-5 b(alue)34 b(of)f(zero)g(is)g
-(supplied,)i(then)f(the)g(default)g(linear)f(spreading)f(sc)n(heme)h
-(is)h(used)f(\(equiv)-5 b(alen)n(t)34 b(to)427 4592 y(supplying)28
-b(the)g(v)-5 b(alue)27 b(AST)p Ft(__)p Fk(LINEAR\).)259
-4734 y Fc(P)-8 b(ARAMS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)
-e(\(Giv)m(en\))427 4833 y Fk(An)23 b(optional)f(arra)n(y)e(whic)n(h)i
-(should)g(con)n(tain)g(an)n(y)g(additional)f(parameter)g(v)-5
-b(alues)22 b(required)g(b)n(y)g(the)h(pixel)427 4933
-y(spreading)g(sc)n(heme.)36 b(If)24 b(suc)n(h)g(parameters)f(are)g
-(required,)h(this)h(will)g(b)r(e)f(noted)h(in)f(the)h
-Ft(")p Fk(Pixel)f(Spreading)427 5033 y(Sc)n(hemes)p Ft(")j
-Fk(section)g(b)r(elo)n(w.)427 5153 y(If)f(no)e(additional)g(parameters)
-g(are)f(required,)i(this)g(arra)n(y)d(is)j(not)g(used.)36
-b(A)25 b(dumm)n(y)g(\(e.g.)36 b(one-elemen)n(t\))427
-5253 y(arra)n(y)26 b(ma)n(y)g(then)j(b)r(e)f(supplied.)259
-5394 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(The)36 b(sum)f(of)h(a)f(set)g(of)g(\015ag)g(v)-5
-b(alues)35 b(whic)n(h)g(ma)n(y)g(b)r(e)h(used)f(to)g(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)f(the)427 5593
-y(rebinning)d(op)r(eration.)45 b(See)31 b(the)f Ft(")p
-Fk(Con)n(trol)f(Flags)p Ft(")g Fk(section)i(b)r(elo)n(w)f(for)g(a)g
-(description)g(of)g(the)h(options)427 5693 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)p eop end
-%%Page: 306 316
-TeXDict begin 306 315 bop 0 52 a FG(306)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(TOL)h(=)h(DOUBLE)f
-(PRECISION)f(\(Giv)m(en\))427 451 y Fk(The)j(maxim)n(um)f(tolerable)f
-(geometrical)f(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r
-(duced)f(as)f(a)h(result)g(of)g(ap-)427 551 y(pro)n(ximating)c
-(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g
-(transformations.)42 b(This)30 b(should)427 650 y(b)r(e)e(expressed)f
-(as)g(a)g(displacemen)n(t)g(in)h(pixels)f(in)h(the)g(output)g(grid's)f
-(co)r(ordinate)f(system.)427 762 y(If)34 b(piece-wise)f(linear)g(appro)
-n(ximation)f(is)h(not)h(required,)g(a)f(v)-5 b(alue)33
-b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n(en.)54 b(This)33
-b(will)427 861 y(ensure)k(that)g(the)h(Mapping)e(is)h(used)g(without)h
-(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e(increase)g(execution)427
-961 y(time.)427 1072 y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g(high,)
-h(discon)n(tin)n(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e(appro)n
-(ximations)f(used)i(in)g(adjacen)n(t)427 1172 y(panel)h(will)g(b)r(e)g
-(higher,)h(and)f(ma)n(y)f(cause)g(the)i(edges)e(of)h(the)g(panel)g(to)g
-(b)r(e)g(visible)g(when)g(viewing)f(the)427 1272 y(output)c(image)f(at)
-h(high)f(con)n(trast.)36 b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h
-(the)g(tolerance)e(v)-5 b(alue)27 b(used.)259 1395 y
-Fc(MAXPIX)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 1495 y
-Fk(A)42 b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g
-(scale)g(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g
-(whic)n(h)427 1594 y(appro)n(ximates)d(non-linear)g(Mappings)h(with)h
-(piece-wise)f(linear)g(transformations.)68 b(Normally)-7
-b(,)40 b(this)427 1694 y(should)e(b)r(e)g(a)g(large)e(v)-5
-b(alue)38 b(\(larger)e(than)j(an)n(y)e(dimension)h(of)f(the)i(region)d
-(of)i(the)h(input)f(grid)g(b)r(eing)427 1793 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-1893 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 2005 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 2104 y(do)r(es)40
-b(not)g(exceed)f(MAXPIX)h(pixels)g(in)g(an)n(y)f(dimension.)74
-b(Only)39 b(at)h(this)g(p)r(oin)n(t)g(will)g(attempts)h(at)427
-2204 y(appro)n(ximation)26 b(commence.)427 2315 y(This)38
-b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)f(in)h
-(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h(adaptiv)n(e)
-e(al-)427 2415 y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r
-(ears)f(appro)n(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)
-427 2515 y(irregularities)27 b(\(e.g.)40 b(holes\))28
-b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5 b(alue)28 b(of,)h(sa)n(y)-7
-b(,)28 b(50)g(to)g(100)g(pixels)g(can)g(also)g(b)r(e)h(em-)427
-2614 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f(in)i(general-purp)r(ose)d
-(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f(on)h(p)r(erformance)e(is)h
-(minimal.)427 2726 y(If)e(to)r(o)f(small)g(a)g(v)-5 b(alue)20
-b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g(of)f
-(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-2825 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g(zero\).)34
-b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i(accurate)e
-(results)427 2925 y(will)28 b(still)g(b)r(e)g(obtained.)259
-3048 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Giv)m(en\))427 3148 y Fk(This)i(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-3247 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g(\(bad)h
-(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-3359 y(If)33 b(the)f(AST)p Ft(__)p Fk(USEBAD)g(\015ag)f(is)h(set)g(via)
-f(the)i(FLA)n(GS)f(argumen)n(t,)g(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)f(to)h(test)427 3459 y(for)27 b(bad)h(pixels)f
-(in)h(the)g(IN)g(\(and)g(IN)p Ft(_)p Fk(V)-9 b(AR\))28
-b(arra)n(y\(s\).)427 3570 y(In)e(all)g(cases,)f(this)h(v)-5
-b(alue)26 b(is)g(also)f(used)h(to)g(\015ag)f(an)n(y)g(output)h(elemen)n
-(ts)g(in)g(the)h(OUT)e(\(and)h(OUT)p Ft(_)p Fk(V)-9 b(AR\))427
-3670 y(arra)n(y\(s\))34 b(for)i(whic)n(h)g(rebined)g(v)-5
-b(alues)36 b(could)g(not)h(b)r(e)f(obtained)g(\(see)g(the)h
-Ft(")p Fk(Propagation)c(of)j(Missing)427 3769 y(Data)p
-Ft(")27 b Fk(section)g(b)r(elo)n(w)h(for)f(details)g(of)h(the)g
-(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)259
-3893 y Fc(NDIM)p Ft(_)p Fc(OUT)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-3992 y Fk(The)38 b(n)n(um)n(b)r(er)f(of)g(dimensions)g(in)h(the)f
-(output)h(grid.)66 b(This)37 b(should)g(b)r(e)h(at)f(least)g(one.)65
-b(It)38 b(need)g(not)427 4092 y(necessarily)26 b(b)r(e)i(equal)f(to)h
-(the)g(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)259
-4215 y Fc(LBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g
-(INTEGER)g(\(Giv)m(en\))427 4315 y Fk(An)f(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)e(of)h(the)h(\014rst)f
-(pixel)g(in)g(the)h(output)f(grid)g(along)427 4415 y(eac)n(h)d
-(dimension.)259 4538 y Fc(UBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p
-Ft(_)p Fc(OUT)e(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 4637
-y Fk(An)g(arra)n(y)c(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)h
-(cen)n(tre)e(of)h(the)h(last)e(pixel)h(in)h(the)f(output)h(grid)e
-(along)427 4737 y(eac)n(h)d(dimension.)427 4849 y(Note)41
-b(that)g(LBND)p Ft(_)p Fk(OUT)f(and)g(UBND)p Ft(_)p Fk(OUT)h(together)e
-(de\014ne)i(the)g(shap)r(e,)i(size)d(and)h(co)r(ordinate)427
-4948 y(system)24 b(of)f(the)h(output)h(grid)d(in)i(the)g(same)g(w)n(a)n
-(y)e(as)h(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p Ft(_)p Fk(IN)i(de\014ne)f
-(the)g(shap)r(e,)g(size)427 5048 y(and)k(co)r(ordinate)e(system)h(of)h
-(the)g(input)g(grid.)259 5171 y Fc(LBND\()k(NDIM)p Ft(_)p
-Fc(IN)f(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 5271 y Fk(An)c(arra)n(y)c
-(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)g(\014rst)g(pixel)g
-(in)g(the)h(region)d(of)i(the)h(input)g(grid)e(whic)n(h)h(is)427
-5370 y(to)h(b)r(e)g(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)
--7 b(.)259 5494 y Fc(UBND\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)h
-(INTEGER)e(\(Giv)m(en\))427 5593 y Fk(An)e(arra)n(y)c(con)n(taining)i
-(the)h(co)r(ordinates)e(of)i(the)g(last)g(pixel)g(in)g(the)g(region)e
-(of)i(the)g(input)h(grid)e(whic)n(h)h(is)427 5693 y(to)g(b)r(e)g
-(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)-7
-b(.)p eop end
-%%Page: 307 317
-TeXDict begin 307 316 bop 3643 52 a FG(307)427 351 y
-Fk(Note)26 b(that)g(LBND)h(and)e(UBND)i(together)e(de\014ne)h(the)g
-(shap)r(e)g(and)g(p)r(osition)g(of)f(a)h(\(h)n(yp)r(er-\)rectangular)
-427 451 y(region)19 b(of)i(the)f(input)h(grid)f(whic)n(h)g(is)g(to)h(b)
-r(e)f(included)h(in)g(the)f(rebined)h(output)f(arra)n(y)-7
-b(.)33 b(This)20 b(region)f(should)427 551 y(lie)33 b(wholly)e(within)i
-(the)g(exten)n(t)f(of)g(the)h(input)g(grid)e(\(as)h(de\014ned)h(b)n(y)f
-(the)g(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p Ft(_)p Fk(IN)427
-650 y(arra)n(ys\).)j(Regions)26 b(of)i(the)g(input)g(grid)f(lying)h
-(outside)f(this)h(region)e(will)i(not)g(b)r(e)g(used.)259
-783 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Returned\))427 883 y Fk(An)24 b(arra)n(y)-7
-b(,)22 b(with)j(one)e(elemen)n(t)g(for)g(eac)n(h)g(pixel)h(in)g(the)f
-(output)i(grid,)e(in)h(whic)n(h)g(the)g(rebined)f(data)g(v)-5
-b(alues)427 983 y(will)33 b(b)r(e)f(returned.)50 b(The)32
-b(n)n(umerical)f(t)n(yp)r(e)i(of)f(this)g(arra)n(y)e(should)i(matc)n(h)
-f(that)i(of)f(the)g(IN)h(arra)n(y)-7 b(,)31 b(and)427
-1082 y(the)f(data)e(storage)g(order)f(should)i(b)r(e)h(suc)n(h)f(that)g
-(the)h(index)f(of)g(the)g(\014rst)g(grid)g(dimension)g(v)-5
-b(aries)28 b(most)427 1182 y(rapidly)22 b(and)g(that)g(of)g(the)h
-(\014nal)f(dimension)g(least)g(rapidly)f(\(i.e.)36 b(normal)21
-b(F)-7 b(ortran)21 b(arra)n(y)e(storage)i(order\).)259
-1315 y Fc(OUT)p Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Returned\))427
-1415 y Fk(An)25 b(optional)f(arra)n(y)d(with)k(the)g(same)f(t)n(yp)r(e)
-g(and)g(size)g(as)g(the)g(OUT)g(arra)n(y)-7 b(.)34 b(If)25
-b(the)f(AST)p Ft(__)p Fk(USEV)-9 b(AR)24 b(\015ag)427
-1514 y(is)30 b(set)f(via)h(the)g(FLA)n(GS)g(argumen)n(t,)f(this)h(arra)
-n(y)d(will)j(b)r(e)g(used)g(to)f(return)g(v)-5 b(ariance)29
-b(estimates)g(for)g(the)427 1614 y(rebined)f(data)f(v)-5
-b(alues.)427 1730 y(The)23 b(output)f(v)-5 b(ariance)22
-b(v)-5 b(alues)21 b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f
-(that)g(errors)e(on)i(the)h(input)g(data)427 1830 y(v)-5
-b(alues)24 b(are)g(statistically)f(indep)r(enden)n(t)i(and)g(that)f
-(their)g(v)-5 b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f
-(summed)427 1930 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g
-(factors\))h(when)h(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h
-(an)f(output)h(data)427 2029 y(v)-5 b(alue.)59 b(If)35
-b(this)g(assumption)f(is)h(not)g(v)-5 b(alid,)36 b(then)f(the)h(output)
-f(error)e(estimates)h(ma)n(y)g(b)r(e)h(biased.)58 b(In)427
-2129 y(addition,)31 b(note)f(that)h(the)f(statistical)g(errors)e(on)i
-(neigh)n(b)r(ouring)f(output)h(data)g(v)-5 b(alues)30
-b(\(as)g(w)n(ell)g(as)f(the)427 2229 y(estimates)j(of)f(those)g
-(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g(if)h(the)g
-(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427 2328
-y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h(pixel)g
-(spreading)e(sc)n(hemes)h(emplo)n(y)n(ed.)427 2445 y(If)34
-b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)33 b(\015ag)g(is)h(not)f(set,)j
-(no)d(output)i(v)-5 b(ariance)32 b(estimates)h(will)h(b)r(e)h
-(calculated)e(and)427 2544 y(this)28 b(arra)n(y)d(will)j(not)g(b)r(e)g
-(used.)37 b(A)28 b(dumm)n(y)f(\(e.g.)37 b(one-elemen)n(t\))27
-b(arra)n(y)f(ma)n(y)g(then)j(b)r(e)f(supplied.)259 2678
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 2777 y Fk(The)c(global)e(status.)-2 2940 y Fc(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 3086 y Fk(T)-7 b(o)39
-b(select)g(the)h(appropriate)e(rebinning)h(function,)k(y)n(ou)38
-b(should)h(replace)g Fm(<)p Fk(X)p Fm(>)f Fk(in)i(the)g(generic)e
-(function)227 3186 y(name)c(AST)p Ft(_)p Fk(REBIN)p Fm(<)p
-Fk(X)p Fm(>)f Fk(with)i(a)f(1-)f(or)g(2-c)n(haracter)f(data)h(t)n(yp)r
-(e)i(co)r(de,)g(so)f(as)f(to)h(matc)n(h)g(the)g(n)n(umerical)227
-3285 y(t)n(yp)r(e)28 b Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)f
-Fk(of)h(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h(as)f(follo)n(ws:)
-340 3422 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-3556 y Fj(\017)45 b Fk(R:)28 b(REAL)340 3689 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)227 3852 y(F)-7 b(or)18 b(example,)i(AST)p
-Ft(_)p Fk(REBIND)e(w)n(ould)g(b)r(e)h(used)f(to)h(pro)r(cess)e(DOUBLE)h
-(PRECISION)f(data,)j(while)f(AST)p Ft(_)p Fk(REBINI)227
-3951 y(w)n(ould)27 b(b)r(e)h(used)g(to)f(pro)r(cess)g(in)n(teger)g
-(data)g(\(stored)g(in)h(an)f(INTEGER)g(arra)n(y\),)f(etc.)227
-4076 y(Note)38 b(that,)i(unlik)n(e)d(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(,)i(the)e(AST)p Ft(_)p Fk(REBIN)p
-Fm(<)p Fk(X)p Fm(>)g Fk(set)g(of)h(functions)f(do)r(es)g(not)h(y)n(et)
-227 4176 y(supp)r(ort)28 b(unsigned)f(in)n(teger)g(data)g(t)n(yp)r(es)g
-(or)g(in)n(tegers)g(of)g(di\013eren)n(t)h(sizes.)-2 4326
-y Fc(Pixel)k(Spreading)f(Sc)m(hemes)n(:)227 4472 y Fk(The)c(pixel)g
-(spreading)f(sc)n(heme)g(sp)r(eci\014es)h(the)g(P)n(oin)n(t)f(Spread)g
-(F)-7 b(unction)27 b(\(PSF\))g(applied)g(to)g(eac)n(h)f(input)i(pixel)
-227 4572 y(v)-5 b(alue)34 b(as)g(it)h(is)f(copied)g(in)n(to)g(the)h
-(output)g(arra)n(y)-7 b(.)54 b(It)35 b(can)f(b)r(e)h(though)n(t)f(of)g
-(as)f(the)i(in)n(v)n(erse)e(of)h(the)h(sub-pixel)227
-4671 y(in)n(terp)r(olation)30 b(sc)n(hemes)f(used)i(b)n(y)f(the)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(group)g(of)h(functions.)46
-b(That)30 b(is,)h(in)g(a)f(sub-)227 4771 y(pixel)22 b(in)n(terp)r
-(olation)e(sc)n(heme)h(the)h(k)n(ernel)e(sp)r(eci\014es)h(the)h(w)n
-(eigh)n(t)e(to)i(assign)e(to)h(eac)n(h)f(input)i(pixel)g(when)f
-(forming)227 4871 y(the)26 b(w)n(eigh)n(ted)e(mean)h(of)h(the)f(input)h
-(pixels,)g(whereas)e(the)h(k)n(ernel)g(in)g(a)g(pixel)g(spreading)f(sc)
-n(heme)h(sp)r(eci\014es)g(the)227 4970 y(fraction)18
-b(of)h(the)f(input)i(data)e(v)-5 b(alue)18 b(whic)n(h)g(is)h(to)f(b)r
-(e)h(assigned)e(to)i(eac)n(h)e(output)i(pixel.)34 b(As)19
-b(for)f(in)n(terp)r(olation,)h(the)227 5070 y(c)n(hoice)g(of)g
-(suitable)h(pixel)f(spreading)f(sc)n(heme)h(in)n(v)n(olv)n(es)f(stric)n
-(king)g(a)h(balance)g(b)r(et)n(w)n(een)h(sc)n(hemes)e(whic)n(h)i(tend)g
-(to)227 5170 y(degrade)k(sharp)g(features)h(in)g(the)g(data)g(b)n(y)g
-(smo)r(othing)f(them,)i(and)f(those)g(whic)n(h)g(attempt)g(to)g
-(preserv)n(e)f(sharp)227 5269 y(features)34 b(but)h(whic)n(h)f(often)g
-(tend)h(to)f(in)n(tro)r(duce)g(un)n(w)n(an)n(ted)f(artifacts.)56
-b(See)35 b(the)f(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p
-Fm(>)227 5369 y Fk(do)r(cumen)n(tation)28 b(for)f(further)g
-(discussion.)227 5494 y(The)d(binning)g(algorithm)f(used)h(has)f(the)h
-(abilit)n(y)g(to)g(in)n(tro)r(duce)f(artifacts)g(not)h(seen)g(when)g
-(using)f(a)h(resampling)227 5593 y(algorithm.)45 b(P)n(articularly)-7
-b(,)28 b(when)j(viewing)f(the)h(output)g(image)f(at)g(high)g(con)n
-(trast,)g(systems)g(of)g(curv)n(es)g(lines)227 5693 y(co)n(v)n(ering)d
-(the)i(en)n(tire)g(image)f(ma)n(y)g(b)r(e)i(visible.)40
-b(These)29 b(are)f(caused)g(b)n(y)h(a)f(b)r(eating)h(e\013ect)h(b)r(et)
-n(w)n(een)e(the)i(input)p eop end
-%%Page: 308 318
-TeXDict begin 308 317 bop 0 52 a FG(308)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(pixel)38
-b(p)r(ositions)g(and)f(the)i(output)f(pixels)g(p)r(osition,)i(and)e
-(their)f(nature)h(and)f(strength)h(dep)r(end)g(critically)227
-451 y(up)r(on)33 b(the)g(nature)f(of)h(the)g(Mapping)f(and)g(the)h
-(spreading)f(function)h(b)r(eing)f(used.)52 b(In)33 b(general,)g(the)g
-(nearest)227 551 y(neigh)n(b)r(our)d(spreading)f(function)i
-(demonstrates)e(this)i(e\013ect)g(more)e(clearly)g(than)i(the)g(other)e
-(functions,)j(and)227 650 y(for)27 b(this)h(reason)e(should)i(b)r(e)g
-(used)f(with)h(caution.)227 783 y(The)39 b(follo)n(wing)e(v)-5
-b(alues)38 b(\(de\014ned)h(in)f(the)h(AST)p Ft(_)p Fk(P)-7
-b(AR)38 b(include)h(\014le\))f(ma)n(y)g(b)r(e)h(assigned)e(to)h(the)h
-(SPREAD)227 883 y(parameter.)i(See)29 b(the)h(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)d Fk(do)r(cumen)n(tation)i(for)g
-(details)g(of)h(these)f(sc)n(hemes)f(including)227 982
-y(the)g(use)g(of)f(the)h(FSPREAD)g(and)f(P)-7 b(ARAMS)29
-b(argumen)n(ts:)340 1269 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(NEAREST)340 1410 y Fj(\017)g Fk(AST)p Ft(__)p Fk(LINEAR)340
-1551 y Fj(\017)g Fk(AST)p Ft(__)p Fk(SINC)340 1693 y
-Fj(\017)g Fk(AST)p Ft(__)p Fk(SINCSINC)340 1834 y Fj(\017)g
-Fk(AST)p Ft(__)p Fk(SINCCOS)340 1975 y Fj(\017)g Fk(AST)p
-Ft(__)p Fk(SINCGA)n(USS)340 2116 y Fj(\017)g Fk(AST)p
-Ft(__)p Fk(SOMBCOS)227 2295 y(In)19 b(addition,)h(the)f(follo)n(wing)e
-(sc)n(hemes)h(can)g(b)r(e)g(used)h(with)g(AST)p Ft(_)p
-Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)e Fk(but)i(not)g(with)f(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(:)340 2582
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(GA)n(USS:)24 b(This)f(sc)n(heme)g
-(uses)g(a)g(k)n(ernel)f(of)h(the)h(form)f(exp\(-k)p Fj(\003)p
-Fk(x)p Fj(\003)p Fk(x\),)g(with)g(k)h(a)e(p)r(ositiv)n(e)h(constan)n(t)
-427 2681 y(determined)k(b)n(y)f(the)g(full-width)i(at)e(half-maxim)n
-(um)g(\(FWHM\).)h(The)g(FWHM)g(should)f(b)r(e)h(supplied)f(in)427
-2781 y(units)33 b(of)g(output)g(pixels)f(b)n(y)g(means)g(of)h(the)g(P)
--7 b(ARAMS\(2\))33 b(v)-5 b(alue)32 b(and)h(should)f(b)r(e)h(at)g
-(least)f(0.1.)51 b(The)427 2880 y(P)-7 b(ARAMS\(1\))25
-b(v)-5 b(alue)24 b(should)f(b)r(e)i(used)e(to)h(sp)r(ecify)g(at)g(what)
-g(p)r(oin)n(t)g(the)g(Gaussian)f(is)h(truncated)g(to)g(zero.)427
-2980 y(This)k(should)g(b)r(e)g(giv)n(en)f(as)g(a)h(n)n(um)n(b)r(er)g
-(of)f(output)i(pixels)f(on)f(either)h(side)g(of)g(the)g(cen)n(tral)f
-(output)h(p)r(oin)n(t)427 3080 y(in)g(eac)n(h)f(dimension)g(\(the)i
-(nearest)d(in)n(teger)h(v)-5 b(alue)28 b(is)f(used\).)-2
-3258 y Fc(Con)m(trol)32 b(Flags)n(:)227 3405 y Fk(The)24
-b(follo)n(wing)f(\015ags)g(are)g(de\014ned)h(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)24 b(include)g(\014le)g(and)g(ma)n(y)f(b)r(e)h
-(used)g(to)g(pro)n(vide)e(additional)227 3504 y(con)n(trol)32
-b(o)n(v)n(er)e(the)j(rebinning)f(pro)r(cess.)51 b(Ha)n(ving)32
-b(selected)g(a)g(set)h(of)f(\015ags,)h(y)n(ou)f(should)g(supply)h(the)g
-(sum)g(of)227 3604 y(their)28 b(v)-5 b(alues)27 b(via)g(the)h(FLA)n(GS)
-g(argumen)n(t:)340 3890 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(USEBAD:)33 b(Indicates)g(that)h(there)f(ma)n(y)f(b)r(e)i(bad)f
-(pixels)f(in)i(the)f(input)h(arra)n(y\(s\))d(whic)n(h)i(m)n(ust)427
-3990 y(b)r(e)26 b(recognised)d(b)n(y)i(comparing)e(with)j(the)f(v)-5
-b(alue)25 b(giv)n(en)g(for)f(BAD)n(V)-9 b(AL)26 b(and)e(propagated)g
-(to)h(the)g(output)427 4089 y(arra)n(y\(s\).)41 b(If)30
-b(this)g(\015ag)f(is)g(not)h(set,)g(all)f(input)h(v)-5
-b(alues)30 b(are)e(treated)h(literally)g(and)h(the)g(BAD)n(V)-9
-b(AL)30 b(v)-5 b(alue)427 4189 y(is)28 b(only)f(used)h(for)f
-(\015agging)f(output)i(arra)n(y)d(v)-5 b(alues.)340 4330
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(USEV)-9 b(AR:)25 b(Indicates)f(that)
-g(v)-5 b(ariance)23 b(information)h(should)g(b)r(e)h(pro)r(cessed)e(in)
-i(order)e(to)h(pro)n(vide)427 4430 y(estimates)34 b(of)g(the)g
-(statistical)f(error)f(asso)r(ciated)h(with)h(the)g(rebined)g(v)-5
-b(alues.)55 b(If)35 b(this)f(\015ag)f(is)h(not)g(set,)427
-4530 y(no)c(v)-5 b(ariance)29 b(pro)r(cessing)g(will)i(o)r(ccur)e(and)i
-(the)f(IN)p Ft(_)p Fk(V)-9 b(AR)31 b(and)f(OUT)p Ft(_)p
-Fk(V)-9 b(AR)30 b(arra)n(ys)e(will)j(not)f(b)r(e)h(used.)427
-4629 y(\(Note)d(that)g(this)g(\015ag)f(is)g(only)g(a)n(v)-5
-b(ailable)27 b(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)g
-(AST.\))-2 4808 y Fc(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-4954 y Fk(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 5054 y(BAD)n(V)-9 b(AL)23 b(v)-5 b(alue)22
-b(in)g(the)h(OUT)f(arra)n(y)-7 b(.)33 b(These)22 b(are)f(pro)r(duced)h
-(if)h(the)f(sum)h(of)f(the)g(w)n(eigh)n(ts)f(of)i(the)f(con)n
-(tributing)227 5153 y(input)29 b(pixels)e(is)h(less)f(than)g(WLIM.)227
-5286 y(An)22 b(input)h(pixel)e(is)h(considered)e(bad)i(\(and)f(is)h
-(consequen)n(tly)e(ignored\))h(if)h(its)g(data)f(v)-5
-b(alue)21 b(is)h(equal)f(to)g(BAD)n(V)-9 b(AL)227 5386
-y(and)28 b(the)g(AST)p Ft(__)p Fk(USEBAD)f(\015ag)g(is)h(set)f(via)g
-(the)h(FLA)n(GS)g(argumen)n(t.)227 5519 y(In)h(addition,)f(asso)r
-(ciated)f(output)i(v)-5 b(ariance)27 b(estimates)h(\(if)i(calculated\))
-e(ma)n(y)f(b)r(e)i(declared)e(bad)i(and)f(\015agged)227
-5619 y(with)g(the)g(BAD)n(V)-9 b(AL)28 b(v)-5 b(alue)28
-b(in)g(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)27 b(arra)n(y)e(for)j(similar)e
-(reasons.)p eop end
-%%Page: 309 319
-TeXDict begin 309 318 bop 3643 52 a FG(309)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(REBINSEQ)p Fb(<)p FA(X)p
-Fb(>)1515 483 y Fd(Rebin)39 b(a)f(region)1485 598 y(of)g(a)g(sequence)i
-(of)1633 712 y(data)d(grids)2461 482 y FA(AST)p Fe(_)p
-FA(REBINSEQ)p Fb(<)p FA(X)p Fb(>)0 927 y Fc(Description:)44
-b Fk(This)25 b(set)h(of)f(routines)f(is)h(iden)n(tical)g(to)g(AST)p
-Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)f Fk(except)h(that)h(the)f
-(rebinned)g(input)h(data)227 1027 y(is)c(added)g(in)n(to)f(the)h
-(supplied)g(output)h(arra)n(ys,)d(rather)h(than)h(simply)g(o)n(v)n
-(er-writing)d(the)j(con)n(ten)n(ts)f(of)h(the)g(output)227
-1126 y(arra)n(ys.)46 b(Th)n(us,)33 b(b)n(y)e(calling)g(this)g(routine)g
-(rep)r(eatedly)-7 b(,)33 b(a)e(sequence)g(of)g(input)h(arra)n(ys)d(can)
-i(b)r(e)h(rebinned)g(and)227 1226 y(accum)n(ulated)27
-b(in)n(to)h(a)f(single)g(output)h(arra)n(y)-7 b(,)25
-b(e\013ectiv)n(ely)j(forming)f(a)g(mosaic)g(of)g(the)h(input)g(data)g
-(arra)n(ys.)227 1363 y(In)h(addition,)g(the)g(w)n(eigh)n(ts)f(asso)r
-(ciated)f(with)j(eac)n(h)e(output)h(pixel)g(are)e(returned.)40
-b(The)29 b(w)n(eigh)n(t)f(of)h(an)f(output)227 1463 y(pixel)23
-b(indicates)f(the)h(n)n(um)n(b)r(er)g(of)f(input)i(pixels)e(whic)n(h)h
-(ha)n(v)n(e)e(b)r(een)i(accum)n(ulated)f(in)h(that)g(output)g(pixel.)35
-b(If)23 b(the)227 1563 y(en)n(tire)30 b(v)-5 b(alue)30
-b(of)h(an)f(input)h(pixel)f(is)g(assigned)f(to)i(a)e(single)h(output)h
-(pixel,)g(then)g(the)g(w)n(eigh)n(t)e(of)h(that)h(output)227
-1662 y(pixel)25 b(is)f(incremen)n(ted)h(b)n(y)f(one.)36
-b(If)25 b(some)f(fraction)g(of)g(the)h(v)-5 b(alue)25
-b(of)f(an)g(input)i(pixel)e(is)h(assigned)e(to)i(an)f(output)227
-1762 y(pixel,)k(then)g(the)g(w)n(eigh)n(t)f(of)h(that)f(output)i(pixel)
-e(is)h(incremen)n(ted)f(b)n(y)g(the)h(fraction)f(used.)227
-1900 y(The)f(start)f(of)g(a)h(new)f(sequence)g(is)h(indicated)g(b)n(y)f
-(sp)r(ecifying)g(the)h(AST)p Ft(__)p Fk(REBININIT)f(\015ag)g(via)g(the)
-h(FLA)n(GS)227 1999 y(argumen)n(t.)81 b(This)43 b(causes)f(the)h
-(supplied)g(arra)n(ys)d(to)i(b)r(e)h(\014lled)g(with)g(zeros)f(b)r
-(efore)g(the)h(rebinned)g(input)227 2099 y(data)d(is)g(added)f(in)n(to)
-h(them.)74 b(Subsequenct)41 b(in)n(v)n(o)r(cations)d(within)i(the)h
-(same)e(sequence)g(should)h(omit)g(the)227 2198 y(AST)p
-Ft(__)p Fk(REBININIT)27 b(\015ag.)227 2336 y(The)36 b(last)g(call)g(in)
-g(a)g(sequence)f(is)h(indicated)g(b)n(y)g(sp)r(ecifying)g(the)h(AST)p
-Ft(__)p Fk(REBINEND)e(\015ag.)62 b(This)36 b(causes)227
-2436 y(the)c(output)f(data)g(and)f(v)-5 b(ariance)30
-b(arra)n(ys)e(to)j(b)r(e)h(normalised)d(b)r(efore)i(b)r(eing)g
-(returned.)46 b(This)31 b(normalisation)227 2535 y(consists)j(of)g
-(dividing)h(the)g(data)f(arra)n(y)e(b)n(y)i(the)h(w)n(eigh)n(ts)f(arra)
-n(y)-7 b(,)34 b(and)g(can)g(eliminate)h(artifacts)f(whic)n(h)g(ma)n(y)
-227 2635 y(b)r(e)e(in)n(tro)r(duced)f(in)n(to)g(the)h(rebinned)f(data)g
-(as)g(a)g(consequence)f(of)i(aliasing)e(b)r(et)n(w)n(een)h(the)h(input)
-g(and)f(output)227 2734 y(grids.)55 b(Ho)n(w)n(ev)n(er,)34
-b(it)g(can)g(also)f(result)g(in)i(small)e(c)n(hanges)g(to)h(the)g
-(total)g(pixel)g(v)-5 b(alue)34 b(in)g(an)n(y)f(giv)n(en)g(area)g(of)
-227 2834 y(the)26 b(output)h(arra)n(y)-7 b(.)34 b(In)25
-b(addition)h(to)f(normalisation)f(of)i(the)g(output)g(data)g(v)-5
-b(alues,)25 b(an)n(y)g(output)h(v)-5 b(ariances)25 b(are)227
-2934 y(also)h(appropriately)f(normalised,)h(and)h(an)n(y)f(output)h
-(data)f(v)-5 b(alues)27 b(with)g(w)n(eigh)n(t)f(less)h(than)g(WLIM)g
-(are)f(set)h(to)227 3033 y(BAD)n(V)-9 b(AL.)227 3171
-y(Output)34 b(v)-5 b(ariances)32 b(can)h(b)r(e)g(generated)f(in)i(t)n
-(w)n(o)e(w)n(a)n(ys;)j(b)n(y)d(rebinning)h(the)h(supplied)f(input)h(v)
--5 b(ariances)32 b(with)227 3271 y(appropriate)21 b(w)n(eigh)n(ts,)i
-(or)f(b)n(y)g(\014nding)h(the)g(spread)f(of)g(input)i(data)e(v)-5
-b(alues)22 b(con)n(tributing)g(to)h(eac)n(h)e(output)j(pixel)227
-3370 y(\(see)k(the)g(AST)p Ft(__)p Fk(GENV)-9 b(AR)27
-b(and)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)27 b(\015ags\).)0
-3546 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_REBINSEQ)p
-Fm(<)p Ft(X)p Fm(>)o Ft(\()c(THIS,)j(WLIM,)h(NDIM_IN,)e(LBND_IN,)g
-(UBND_IN,)g(IN,)j(IN_VAR,)e(SPREAD,)227 3645 y(PARAMS,)g(FLAGS,)g(TOL,)
-h(MAXPIX,)f(BADVAL,)f(NDIM_OUT,)g(LBND_OUT,)g(UBND_OUT,)g(LBND,)h
-(UBND,)h(OUT,)227 3745 y(OUT_VAR,)f(WEIGHTS,)f(NUSED,)h(STATUS)g(\))0
-3920 y Fc(Argumen)m(ts:)259 4083 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4183 y Fk(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d
-(forw)n(ard)f(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f
-(the)h(co)r(ordinates)427 4282 y(of)28 b(pixels)f(in)h(the)g(input)g
-(grid)f(in)n(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g
-(grid.)427 4405 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e
-(used)h(b)n(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 4505 y(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)
-g(input)h(grid)f(dimensions)f(giv)n(en)h(b)n(y)g(the)g(v)-5
-b(alue)25 b(of)f(NDIM)p Ft(_)p Fk(IN)h(b)r(elo)n(w.)35
-b(Similarly)-7 b(,)427 4604 y(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g
-(co)r(ordinates)f(\(Nout)h(attribute\))h(should)e(matc)n(h)h(the)g(n)n
-(um)n(b)r(er)g(of)g(output)g(grid)427 4704 y(dimensions)g(giv)n(en)e(b)
-n(y)i(NDIM)p Ft(_)p Fk(OUT.)259 4850 y Fc(WLIM)k(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 4949 y Fk(This)d(v)-5 b(alue)28
-b(is)h(only)f(used)g(if)i(the)f(AST)p Ft(__)p Fk(REBINEND)f(\015ag)f
-(is)i(sp)r(eci\014ed)g(via)f(the)h(FLA)n(GS)g(argumen)n(t.)427
-5049 y(It)h(giv)n(es)d(the)j(required)e(n)n(um)n(b)r(er)g(of)h(input)h
-(pixel)f(v)-5 b(alues)28 b(whic)n(h)h(m)n(ust)g(con)n(tribute)g(to)f
-(an)h(output)h(pixel)427 5149 y(\(i.e.)50 b(the)33 b(output)f(pixel)g
-(w)n(eigh)n(t\))f(in)h(order)f(for)g(the)i(output)f(pixel)g(v)-5
-b(alue)32 b(to)f(b)r(e)i(considered)d(v)-5 b(alid.)50
-b(If)427 5248 y(the)31 b(sum)f(of)g(the)h(input)g(pixel)f(w)n(eigh)n
-(ts)g(con)n(tributing)f(to)h(an)g(output)h(pixel)f(is)h(less)e(than)i
-(the)f(supplied)427 5348 y(WLIM)j(v)-5 b(alue,)35 b(then)e(the)g
-(output)g(pixel)g(v)-5 b(alue)33 b(is)g(returned)f(set)h(to)g(the)g
-(supplied)g(bad)g(v)-5 b(alue.)52 b(If)33 b(the)427 5448
-y(supplied)28 b(v)-5 b(alue)28 b(is)f(less)g(than)h(1.0E-10)d(then)j
-(1.0E-10)d(is)j(used)f(instead.)259 5593 y Fc(NDIM)p
-Ft(_)p Fc(IN)k(=)h(INTEGER)g(\(Giv)m(en\))427 5693 y
-Fk(The)c(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)
-36 b(This)28 b(should)f(b)r(e)h(at)g(least)f(one.)p eop
-end
-%%Page: 310 320
-TeXDict begin 310 319 bop 0 52 a FG(310)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(LBND)p
-Ft(_)p Fc(IN\()h(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m(en\))
-427 451 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)
-h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g
-(grid)f(along)427 551 y(eac)n(h)27 b(dimension.)259 675
-y Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)
-f(\(Giv)m(en\))427 775 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r
-(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)
-f(input)h(grid)f(along)427 874 y(eac)n(h)27 b(dimension.)427
-986 y(Note)h(that)f(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p
-Ft(_)p Fk(IN)h(together)f(de\014ne)g(the)h(shap)r(e)f(and)g(size)g(of)h
-(the)g(input)g(grid,)e(its)427 1086 y(exten)n(t)33 b(along)e(a)i
-(particular)e(\(J'th\))j(dimension)e(b)r(eing)h(UBND)p
-Ft(_)p Fk(IN\(J\)-LBND)p Ft(_)p Fk(IN\(J\)+1.)52 b(They)33
-b(also)427 1186 y(de\014ne)25 b(the)f(input)i(grid's)d(co)r(ordinate)g
-(system,)i(eac)n(h)e(pixel)i(ha)n(ving)e(unit)i(exten)n(t)f(along)f
-(eac)n(h)h(dimension)427 1285 y(with)k(in)n(tegral)f(co)r(ordinate)f(v)
--5 b(alues)27 b(at)h(its)g(cen)n(tre.)259 1410 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 1509 y Fk(An)k(arra)n(y)-7 b(,)36
-b(with)g(one)g(elemen)n(t)f(for)h(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)g(con)n(taining)e(the)h(input)g(data)g(to)427
-1609 y(b)r(e)c(rebined.)47 b(The)32 b(n)n(umerical)e(t)n(yp)r(e)h(of)h
-(this)f(arra)n(y)e(should)i(matc)n(h)g(the)g(1-)g(or)f(2-c)n(haracter)e
-(t)n(yp)r(e)k(co)r(de)427 1709 y(app)r(ended)g(to)f(the)h(function)g
-(name)f(\(e.g.)48 b(if)32 b(y)n(ou)e(are)h(using)f(AST)p
-Ft(_)p Fk(REBINSEQR,)h(the)h(t)n(yp)r(e)f(of)g(eac)n(h)427
-1808 y(arra)n(y)26 b(elemen)n(t)h(should)h(b)r(e)g(REAL\).)427
-1920 y(The)33 b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)
-c(should)j(b)r(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g
-(grid)427 2020 y(dimension)39 b(v)-5 b(aries)39 b(most)g(rapidly)g(and)
-g(that)g(of)h(the)f(\014nal)g(dimension)h(least)f(rapidly)f(\(i.e.)73
-b(normal)427 2119 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 2244 y Fc(IN)p Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427
-2344 y Fk(An)20 b(optional)e(second)h(arra)n(y)e(with)i(the)h(same)e
-(size)h(and)g(t)n(yp)r(e)g(as)g(the)g(IN)h(arra)n(y)-7
-b(.)31 b(If)20 b(giv)n(en,)g(this)f(should)g(con-)427
-2443 y(tain)g(a)f(set)g(of)h(non-negativ)n(e)e(v)-5 b(alues)18
-b(whic)n(h)g(represen)n(t)f(estimates)h(of)h(the)g(statistical)f(v)-5
-b(ariance)17 b(asso)r(ciated)427 2543 y(with)29 b(eac)n(h)f(elemen)n(t)
-h(of)g(the)g(IN)g(arra)n(y)-7 b(.)37 b(If)30 b(neither)e(the)h(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)29 b(nor)f(the)h(AST)p Ft(__)p
-Fk(V)-9 b(AR)g(W)n(GT)427 2642 y(\015ag)22 b(is)h(set,)h(no)f(input)h
-(v)-5 b(ariance)22 b(estimates)g(are)g(required)g(and)h(this)g(arra)n
-(y)e(will)i(not)g(b)r(e)h(used.)35 b(A)23 b(dumm)n(y)427
-2742 y(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)e(ma)n(y)i(then)h(b)r
-(e)g(supplied.)259 2866 y Fc(SPREAD)k(=)g(INTEGER)f(\(Giv)m(en\))427
-2966 y Fk(This)25 b(argumen)n(t)e(sp)r(eci\014es)i(the)g(sc)n(heme)f
-(to)g(b)r(e)h(used)g(for)f(dividing)g(eac)n(h)g(input)h(data)f(v)-5
-b(alue)25 b(up)g(amongst)427 3066 y(the)30 b(corresp)r(onding)d(output)
-j(pixels.)42 b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g
-(set)g(of)g(pre-de\014ned)g(sc)n(hemes)427 3165 y(b)n(y)36
-b(supplying)f(one)g(of)g(the)h(v)-5 b(alues)35 b(describ)r(ed)h(in)g
-(the)f Ft(")p Fk(Pixel)g(Spreading)g(Sc)n(hemes)p Ft(")f
-Fk(section)h(in)h(the)427 3265 y(description)26 b(of)g(the)h(AST)p
-Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)f Fk(routines.)36
-b(If)26 b(a)g(v)-5 b(alue)27 b(of)f(zero)f(is)h(supplied,)h(then)g(the)
-g(default)427 3365 y(linear)g(spreading)f(sc)n(heme)i(is)f(used)h
-(\(equiv)-5 b(alen)n(t)27 b(to)h(supplying)f(the)h(v)-5
-b(alue)28 b(AST)p Ft(__)p Fk(LINEAR\).)259 3489 y Fc(P)-8
-b(ARAMS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))
-427 3589 y Fk(An)23 b(optional)f(arra)n(y)e(whic)n(h)i(should)g(con)n
-(tain)g(an)n(y)g(additional)f(parameter)g(v)-5 b(alues)22
-b(required)g(b)n(y)g(the)h(pixel)427 3688 y(spreading)g(sc)n(heme.)36
-b(If)24 b(suc)n(h)g(parameters)f(are)g(required,)h(this)h(will)g(b)r(e)
-f(noted)h(in)f(the)h Ft(")p Fk(Pixel)f(Spreading)427
-3788 y(Sc)n(hemes)p Ft(")j Fk(section)g(in)h(the)g(description)f(of)h
-(the)g(AST)p Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)e Fk(routines.)427
-3900 y(If)g(no)e(additional)g(parameters)g(are)f(required,)i(this)g
-(arra)n(y)d(is)j(not)g(used.)36 b(A)25 b(dumm)n(y)g(\(e.g.)36
-b(one-elemen)n(t\))427 4000 y(arra)n(y)26 b(ma)n(y)g(then)j(b)r(e)f
-(supplied.)259 4124 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-4224 y Fk(The)36 b(sum)f(of)h(a)f(set)g(of)g(\015ag)g(v)-5
-b(alues)35 b(whic)n(h)g(ma)n(y)g(b)r(e)h(used)f(to)g(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)f(the)427 4323
-y(rebinning)d(op)r(eration.)45 b(See)31 b(the)f Ft(")p
-Fk(Con)n(trol)f(Flags)p Ft(")g Fk(section)i(b)r(elo)n(w)f(for)g(a)g
-(description)g(of)g(the)h(options)427 4423 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 4547 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f(\(Giv)m
-(en\))427 4647 y Fk(The)j(maxim)n(um)f(tolerable)f(geometrical)f
-(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h
-(result)g(of)g(ap-)427 4747 y(pro)n(ximating)c(non-linear)f(Mappings)h
-(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 4846 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(in)h(pixels)f(in)h(the)g(output)g(grid's)f(co)r(ordinate)f
-(system.)427 4958 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 5058 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 5158 y(time.)427 5270
-y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n
-(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e(appro)n(ximations)f(used)i
-(in)g(adjacen)n(t)427 5369 y(panel)h(will)g(b)r(e)g(higher,)h(and)f(ma)
-n(y)f(cause)g(the)i(edges)e(of)h(the)g(panel)g(to)g(b)r(e)g(visible)g
-(when)g(viewing)f(the)427 5469 y(output)c(image)f(at)h(high)f(con)n
-(trast.)36 b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h(the)g
-(tolerance)e(v)-5 b(alue)27 b(used.)259 5593 y Fc(MAXPIX)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 5693 y Fk(A)42 b(v)-5
-b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g(scale)g(size)f
-(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g(whic)n(h)p
-eop end
-%%Page: 311 321
-TeXDict begin 311 320 bop 3643 52 a FG(311)427 351 y
-Fk(appro)n(ximates)37 b(non-linear)g(Mappings)h(with)h(piece-wise)f
-(linear)g(transformations.)68 b(Normally)-7 b(,)40 b(this)427
-451 y(should)e(b)r(e)g(a)g(large)e(v)-5 b(alue)38 b(\(larger)e(than)j
-(an)n(y)e(dimension)h(of)f(the)i(region)d(of)i(the)h(input)f(grid)g(b)r
-(eing)427 551 y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g
-(attempt)h(to)g(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g
-(transformation)427 650 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n
-(tire)f(input)i(region.)427 772 y(If)k(a)f(smaller)f(v)-5
-b(alue)33 b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)
-h(divided)g(in)n(to)f(sub-regions)e(whose)i(size)427
-871 y(do)r(es)40 b(not)g(exceed)f(MAXPIX)h(pixels)g(in)g(an)n(y)f
-(dimension.)74 b(Only)39 b(at)h(this)g(p)r(oin)n(t)g(will)g(attempts)h
-(at)427 971 y(appro)n(ximation)26 b(commence.)427 1092
-y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)
-f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h
-(adaptiv)n(e)e(al-)427 1192 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 1292 y(irregularities)27 b(\(e.g.)40
-b(holes\))28 b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5
-b(alue)28 b(of,)h(sa)n(y)-7 b(,)28 b(50)g(to)g(100)g(pixels)g(can)g
-(also)g(b)r(e)h(em-)427 1391 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f
-(in)i(general-purp)r(ose)d(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f
-(on)h(p)r(erformance)e(is)h(minimal.)427 1513 y(If)e(to)r(o)f(small)g
-(a)g(v)-5 b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i
-(e\013ect)g(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)
-427 1613 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g
-(zero\).)34 b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i
-(accurate)e(results)427 1712 y(will)28 b(still)g(b)r(e)g(obtained.)259
-1856 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Giv)m(en\))427 1955 y Fk(This)i(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-2055 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g(\(bad)h
-(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-2176 y(If)33 b(the)f(AST)p Ft(__)p Fk(USEBAD)g(\015ag)f(is)h(set)g(via)
-f(the)i(FLA)n(GS)f(argumen)n(t,)g(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)f(to)h(test)427 2276 y(for)27 b(bad)h(pixels)f
-(in)h(the)g(IN)g(\(and)g(IN)p Ft(_)p Fk(V)-9 b(AR\))28
-b(arra)n(y\(s\).)427 2398 y(In)e(all)g(cases,)f(this)h(v)-5
-b(alue)26 b(is)g(also)f(used)h(to)g(\015ag)f(an)n(y)g(output)h(elemen)n
-(ts)g(in)g(the)h(OUT)e(\(and)h(OUT)p Ft(_)p Fk(V)-9 b(AR\))427
-2497 y(arra)n(y\(s\))34 b(for)i(whic)n(h)g(rebined)g(v)-5
-b(alues)36 b(could)g(not)h(b)r(e)f(obtained)g(\(see)g(the)h
-Ft(")p Fk(Propagation)c(of)j(Missing)427 2597 y(Data)p
-Ft(")27 b Fk(section)g(b)r(elo)n(w)h(for)f(details)g(of)h(the)g
-(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)259
-2740 y Fc(NDIM)p Ft(_)p Fc(OUT)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-2840 y Fk(The)38 b(n)n(um)n(b)r(er)f(of)g(dimensions)g(in)h(the)f
-(output)h(grid.)66 b(This)37 b(should)g(b)r(e)h(at)f(least)g(one.)65
-b(It)38 b(need)g(not)427 2939 y(necessarily)26 b(b)r(e)i(equal)f(to)h
-(the)g(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)259
-3083 y Fc(LBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g
-(INTEGER)g(\(Giv)m(en\))427 3183 y Fk(An)f(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)e(of)h(the)h(\014rst)f
-(pixel)g(in)g(the)h(output)f(grid)g(along)427 3282 y(eac)n(h)d
-(dimension.)259 3426 y Fc(UBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p
-Ft(_)p Fc(OUT)e(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 3525
-y Fk(An)g(arra)n(y)c(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)h
-(cen)n(tre)e(of)h(the)h(last)e(pixel)h(in)h(the)f(output)h(grid)e
-(along)427 3625 y(eac)n(h)d(dimension.)427 3746 y(Note)41
-b(that)g(LBND)p Ft(_)p Fk(OUT)f(and)g(UBND)p Ft(_)p Fk(OUT)h(together)e
-(de\014ne)i(the)g(shap)r(e,)i(size)d(and)h(co)r(ordinate)427
-3846 y(system)24 b(of)f(the)h(output)h(grid)d(in)i(the)g(same)g(w)n(a)n
-(y)e(as)h(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p Ft(_)p Fk(IN)i(de\014ne)f
-(the)g(shap)r(e,)g(size)427 3946 y(and)k(co)r(ordinate)e(system)h(of)h
-(the)g(input)g(grid.)259 4089 y Fc(LBND\()k(NDIM)p Ft(_)p
-Fc(IN)f(\))h(=)g(INTEGER)g(\(Giv)m(en\))427 4189 y Fk(An)c(arra)n(y)c
-(con)n(taining)i(the)i(co)r(ordinates)d(of)i(the)g(\014rst)g(pixel)g
-(in)g(the)h(region)d(of)i(the)h(input)g(grid)e(whic)n(h)h(is)427
-4288 y(to)h(b)r(e)g(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)
--7 b(.)259 4432 y Fc(UBND\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)h
-(INTEGER)e(\(Giv)m(en\))427 4531 y Fk(An)e(arra)n(y)c(con)n(taining)i
-(the)h(co)r(ordinates)e(of)i(the)g(last)g(pixel)g(in)g(the)g(region)e
-(of)i(the)g(input)h(grid)e(whic)n(h)h(is)427 4631 y(to)g(b)r(e)g
-(included)g(in)g(the)g(rebined)f(output)h(arra)n(y)-7
-b(.)427 4753 y(Note)26 b(that)g(LBND)h(and)e(UBND)i(together)e
-(de\014ne)h(the)g(shap)r(e)g(and)g(p)r(osition)g(of)f(a)h(\(h)n(yp)r
-(er-\)rectangular)427 4852 y(region)19 b(of)i(the)f(input)h(grid)f
-(whic)n(h)g(is)g(to)h(b)r(e)f(included)h(in)g(the)f(rebined)h(output)f
-(arra)n(y)-7 b(.)33 b(This)20 b(region)f(should)427 4952
-y(lie)33 b(wholly)e(within)i(the)g(exten)n(t)f(of)g(the)h(input)g(grid)
-e(\(as)h(de\014ned)h(b)n(y)f(the)g(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p
-Ft(_)p Fk(IN)427 5051 y(arra)n(ys\).)j(Regions)26 b(of)i(the)g(input)g
-(grid)f(lying)h(outside)f(this)h(region)e(will)i(not)g(b)r(e)g(used.)
-259 5195 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Giv)m(en)i(and)f(Returned\))427
-5295 y Fk(An)26 b(arra)n(y)-7 b(,)23 b(with)j(one)f(elemen)n(t)g(for)g
-(eac)n(h)f(pixel)h(in)h(the)f(output)h(grid.)35 b(The)25
-b(rebined)g(data)g(v)-5 b(alues)25 b(will)g(b)r(e)427
-5394 y(added)h(in)n(to)f(the)h(original)e(con)n(ten)n(ts)h(of)g(this)h
-(arra)n(y)-7 b(.)34 b(The)26 b(n)n(umerical)e(t)n(yp)r(e)i(of)g(this)f
-(arra)n(y)f(should)h(matc)n(h)427 5494 y(that)33 b(of)g(the)g(IN)g
-(arra)n(y)-7 b(,)32 b(and)g(the)h(data)f(storage)f(order)g(should)i(b)r
-(e)g(suc)n(h)f(that)h(the)g(index)g(of)g(the)g(\014rst)427
-5593 y(grid)27 b(dimension)h(v)-5 b(aries)27 b(most)h(rapidly)f(and)h
-(that)g(of)g(the)g(\014nal)g(dimension)g(least)f(rapidly)g(\(i.e.)39
-b(normal)427 5693 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)p
-eop end
-%%Page: 312 322
-TeXDict begin 312 321 bop 0 52 a FG(312)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(OUT)p
-Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Giv)m(en)i(and)f(Returned\))427
-451 y Fk(A)f(arra)n(y)d(with)j(the)g(same)e(t)n(yp)r(e)i(and)f(size)g
-(as)g(the)g(OUT)h(arra)n(y)-7 b(.)43 b(This)30 b(arra)n(y)e(will)i
-(only)g(b)r(e)h(used)f(if)h(the)427 551 y(AST)p Ft(__)p
-Fk(USEV)-9 b(AR)36 b(or)g(AST)p Ft(__)p Fk(GENV)-9 b(AR)36
-b(\015ag)f(is)i(set)f(via)f(the)i(FLA)n(GS)g(argumen)n(t,)g(via)f(the)g
-Ft(")p Fk(\015ags)p Ft(")427 650 y Fk(parameter,)d(in)g(whic)n(h)g
-(case)f(v)-5 b(ariance)31 b(estimates)i(for)f(the)h(rebined)g(data)f(v)
--5 b(alues)33 b(will)g(b)r(e)g(added)g(in)n(to)427 750
-y(the)28 b(arra)n(y)-7 b(.)34 b(If)27 b(neither)g(the)g(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)27 b(\015ag)f(nor)g(the)i(AST)p
-Ft(__)p Fk(GENV)-9 b(AR)26 b(\015ag)h(is)f(set,)h(no)g(output)427
-849 y(v)-5 b(ariance)31 b(estimates)h(will)g(b)r(e)h(calculated)e(and)h
-(this)g(arra)n(y)e(will)i(not)g(b)r(e)h(used.)50 b(A)32
-b(dumm)n(y)g(\(e.g.)50 b(one-)427 949 y(elemen)n(t\))28
-b(arra)n(y)e(ma)n(y)g(then)j(b)r(e)f(supplied.)259 1079
-y Fc(WEIGHTS\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en)
-h(and)g(Returned\))427 1179 y Fk(An)24 b(arra)n(y)e(with)i(one)f(or)f
-(t)n(w)n(o)h(elemen)n(ts)h(for)f(eac)n(h)g(pixel)g(in)h(the)g(output)g
-(grid,)g(dep)r(ending)g(on)f(whether)g(or)427 1279 y(not)c(the)f(AST)p
-Ft(__)p Fk(GENV)-9 b(AR)19 b(\015ag)e(has)h(b)r(een)h(supplied)g(via)e
-(the)i(FLA)n(GS)g(parameter.)32 b(If)19 b(AST)p Ft(__)p
-Fk(GENV)-9 b(AR)427 1378 y(has)30 b(not)f(b)r(een)i(sp)r(eci\014ed)f
-(then)g(the)g(arra)n(y)e(should)h(ha)n(v)n(e)g(one)g(elemen)n(t)h(for)g
-(eac)n(h)f(output)h(pixel,)h(and)e(it)427 1478 y(will)d(b)r(e)g(used)f
-(to)h(accum)n(ulate)f(the)h(w)n(eigh)n(t)e(asso)r(ciated)h(with)h(eac)n
-(h)e(output)i(pixel.)37 b(If)26 b(AST)p Ft(__)p Fk(GENV)-9
-b(AR)427 1577 y(has)30 b(b)r(een)g(sp)r(eci\014ed)g(then)h(the)f(arra)n
-(y)e(should)h(ha)n(v)n(e)g(t)n(w)n(o)g(elemen)n(ts)h(for)f(eac)n(h)g
-(output)i(pixel.)44 b(The)30 b(\014rst)427 1677 y(half)i(of)f(the)h
-(arra)n(y)d(is)i(again)f(used)i(to)f(accum)n(ulate)g(the)g(w)n(eigh)n
-(t)g(asso)r(ciated)f(with)i(eac)n(h)f(output)h(pixel,)427
-1777 y(and)f(the)f(second)g(half)h(is)f(used)g(to)h(accum)n(ulate)e
-(the)i(square)e(of)i(the)f(w)n(eigh)n(ts.)45 b(In)30
-b(eac)n(h)g(half,)h(the)g(data)427 1876 y(storage)g(order)g(should)h(b)
-r(e)h(suc)n(h)f(that)h(the)g(index)f(of)h(the)f(\014rst)h(grid)e
-(dimension)i(v)-5 b(aries)31 b(most)h(rapidly)427 1976
-y(and)c(that)g(of)f(the)h(\014nal)g(dimension)f(least)g(rapidly)g
-(\(i.e.)37 b(normal)27 b(F)-7 b(ortran)26 b(arra)n(y)g(storage)f
-(order\).)259 2106 y Fc(NUSED)32 b(=)g(INTEGER)f(\(Giv)m(en)i(and)f
-(Returned\))427 2206 y Fk(The)i(n)n(um)n(b)r(er)g(of)f(input)i(data)e
-(v)-5 b(alues)33 b(that)h(ha)n(v)n(e)f(b)r(een)h(added)g(in)n(to)f(the)
-h(output)g(arra)n(y)e(so)h(far.)55 b(The)427 2306 y(supplied)21
-b(v)-5 b(alue)20 b(is)g(incremen)n(ted)g(on)g(exit)g(b)n(y)g(the)g(n)n
-(um)n(b)r(er)g(of)g(input)h(v)-5 b(alues)20 b(used.)34
-b(The)20 b(v)-5 b(alue)20 b(is)g(initially)427 2405 y(set)28
-b(to)f(zero)g(if)h(the)g(AST)p Ft(__)p Fk(REBININIT)f(\015ag)g(is)g
-(set)h(in)g(FLA)n(GS.)259 2535 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2635
-y Fk(The)c(global)e(status.)-2 2794 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s
-(des)n(:)227 2941 y Fk(T)-7 b(o)23 b(select)f(the)i(appropriate)d
-(rebinning)h(function,)j(y)n(ou)d(should)g(replace)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)h(generic)d(function)j(name)227
-3040 y(AST)p Ft(_)p Fk(REBINSEQ)p Fm(<)p Fk(X)p Fm(>)g
-Fk(with)i(a)f(1-)f(or)h(2-c)n(haracter)d(data)j(t)n(yp)r(e)h(co)r(de,)f
-(so)g(as)g(to)g(matc)n(h)g(the)h(n)n(umerical)e(t)n(yp)r(e)227
-3140 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)j Fk(of)h(the)g(data)f(y)n(ou)g
-(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)340 3274 y Fj(\017)45
-b Fk(D:)28 b(DOUBLE)g(PRECISION)340 3404 y Fj(\017)45
-b Fk(R:)28 b(REAL)340 3534 y Fj(\017)45 b Fk(I:)28 b(INTEGER)227
-3694 y(F)-7 b(or)18 b(example,)i(AST)p Ft(_)p Fk(REBIND)e(w)n(ould)g(b)
-r(e)h(used)f(to)h(pro)r(cess)e(DOUBLE)h(PRECISION)f(data,)j(while)f
-(AST)p Ft(_)p Fk(REBINI)227 3793 y(w)n(ould)27 b(b)r(e)h(used)g(to)f
-(pro)r(cess)g(in)n(teger)g(data)g(\(stored)g(in)h(an)f(INTEGER)g(arra)n
-(y\),)f(etc.)227 3917 y(Note)d(that,)h(unlik)n(e)e(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(,)g(the)h(AST)p
-Ft(_)p Fk(REBINSEQ)p Fm(<)p Fk(X)p Fm(>)e Fk(set)h(of)g(functions)h(do)
-r(es)f(not)h(y)n(et)227 4016 y(supp)r(ort)28 b(unsigned)f(in)n(teger)g
-(data)g(t)n(yp)r(es)g(or)g(in)n(tegers)g(of)g(di\013eren)n(t)h(sizes.)
--2 4163 y Fc(Con)m(trol)k(Flags)n(:)227 4309 y Fk(The)24
-b(follo)n(wing)f(\015ags)g(are)g(de\014ned)h(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)24 b(include)g(\014le)g(and)g(ma)n(y)f(b)r(e)h
-(used)g(to)g(pro)n(vide)e(additional)227 4409 y(con)n(trol)32
-b(o)n(v)n(er)e(the)j(rebinning)f(pro)r(cess.)51 b(Ha)n(ving)32
-b(selected)g(a)g(set)h(of)f(\015ags,)h(y)n(ou)f(should)g(supply)h(the)g
-(sum)g(of)227 4509 y(their)28 b(v)-5 b(alues)27 b(via)g(the)h(FLA)n(GS)
-g(argumen)n(t:)340 4766 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(REBININIT:)28 b(Used)g(to)f(mark)g(the)i(\014rst)e(call)h(in)g(a)g
-(sequence.)37 b(It)28 b(indicates)g(that)g(the)g(supplied)427
-4865 y(OUT,)k(OUT)p Ft(_)p Fk(V)-9 b(AR)32 b(and)f(WEIGHTS)i(arra)n(ys)
-c(should)j(b)r(e)g(\014lled)g(with)g(zeros)f(\(th)n(us)h(o)n(v)n
-(er-writing)d(an)n(y)427 4965 y(supplied)h(v)-5 b(alues\))30
-b(b)r(efore)f(adding)g(the)h(rebinned)f(input)i(data)e(in)n(to)g(them.)
-43 b(This)30 b(\015ag)e(should)i(b)r(e)g(used)427 5065
-y(when)e(rebinning)f(the)h(\014rst)g(input)g(arra)n(y)d(in)j(a)f
-(sequence.)340 5195 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(REBINEND:)34
-b(Used)h(to)g(mark)f(the)h(last)f(call)g(in)h(a)g(sequence.)57
-b(It)35 b(causes)f(eac)n(h)g(v)-5 b(alue)34 b(in)h(the)427
-5295 y(OUT)30 b(and)h(OUT)p Ft(_)p Fk(V)-9 b(AR)30 b(arra)n(ys)d(to)k
-(b)r(e)f(divided)h(b)n(y)f(a)g(normalisation)e(factor)i(b)r(efore)g(b)r
-(eing)g(returned.)427 5394 y(The)38 b(normalisation)d(factor)h(for)h
-(eac)n(h)g(output)g(data)g(v)-5 b(alue)37 b(is)g(just)h(the)g(corresp)r
-(onding)d(v)-5 b(alue)37 b(from)427 5494 y(the)32 b(w)n(eigh)n(ts)e
-(arra)n(y)-7 b(.)46 b(The)32 b(normalisation)d(factor)i(for)g(eac)n(h)f
-(output)i(v)-5 b(ariance)30 b(v)-5 b(alue)32 b(is)f(the)h(square)e(of)
-427 5593 y(the)k(data)e(v)-5 b(alue)33 b(normalisation)e(factor.)53
-b(It)33 b(also)f(causes)g(output)h(data)g(v)-5 b(alues)33
-b(to)f(b)r(e)i(set)f(bad)g(if)g(the)427 5693 y(corresp)r(onding)26
-b(w)n(eigh)n(t)i(is)g(less)f(than)i(the)f(v)-5 b(alue)28
-b(supplied)h(for)e(argumen)n(t)g(WLIM.)i(It)f(also)f(causes)g(an)n(y)p
-eop end
-%%Page: 313 323
-TeXDict begin 313 322 bop 3643 52 a FG(313)427 351 y
-Fk(temp)r(orary)25 b(v)-5 b(alues)25 b(stored)f(in)i(the)g(output)g(v)
--5 b(ariance)25 b(arra)n(y)e(\(see)i(\015ag)g(AST)p Ft(__)p
-Fk(GENV)-9 b(AR)25 b(b)r(elo)n(w\))h(to)f(b)r(e)427 451
-y(con)n(v)n(erted)h(in)n(to)i(usable)f(v)-5 b(ariance)26
-b(v)-5 b(alues.)340 593 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(USEBAD:)33 b(Indicates)g(that)h(there)f(ma)n(y)f(b)r(e)i(bad)f
-(pixels)f(in)i(the)f(input)h(arra)n(y\(s\))d(whic)n(h)i(m)n(ust)427
-692 y(b)r(e)26 b(recognised)d(b)n(y)i(comparing)e(with)j(the)f(v)-5
-b(alue)25 b(giv)n(en)g(for)f(BAD)n(V)-9 b(AL)26 b(and)e(propagated)g
-(to)h(the)g(output)427 792 y(arra)n(y\(s\).)41 b(If)30
-b(this)g(\015ag)f(is)g(not)h(set,)g(all)f(input)h(v)-5
-b(alues)30 b(are)e(treated)h(literally)g(and)h(the)g(BAD)n(V)-9
-b(AL)30 b(v)-5 b(alue)427 892 y(is)28 b(only)f(used)h(for)f(\015agging)
-f(output)i(arra)n(y)d(v)-5 b(alues.)340 1034 y Fj(\017)45
-b Fk(AST)p Ft(__)p Fk(USEV)-9 b(AR:)36 b(Indicates)g(that)g(output)h(v)
--5 b(ariance)35 b(estimates)h(should)f(b)r(e)i(created)e(b)n(y)h
-(rebinning)427 1133 y(the)g(supplied)f(input)h(v)-5 b(ariance)33
-b(estimates.)59 b(An)35 b(error)e(will)j(b)r(e)f(rep)r(orted)f(if)i(b)r
-(oth)f(this)g(\015ag)f(and)h(the)427 1233 y(AST)p Ft(__)p
-Fk(GENV)-9 b(AR)28 b(\015ag)f(are)f(supplied.)340 1375
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(GENV)-9 b(AR:)33 b(Indicates)g(that)
-h(output)f(v)-5 b(ariance)32 b(estimates)h(should)g(b)r(e)g(created)g
-(based)f(on)h(the)427 1475 y(spread)19 b(of)h(input)h(data)e(v)-5
-b(alues)19 b(con)n(tributing)h(to)f(eac)n(h)g(output)i(pixel.)34
-b(An)20 b(error)e(will)i(b)r(e)h(rep)r(orted)e(if)h(b)r(oth)427
-1574 y(this)29 b(\015ag)e(and)h(the)h(AST)p Ft(__)p Fk(USEV)-9
-b(AR)28 b(\015ag)f(are)g(supplied.)39 b(If)29 b(the)g(AST)p
-Ft(__)p Fk(GENV)-9 b(AR)28 b(\015ag)f(is)h(sp)r(eci\014ed,)427
-1674 y(the)e(supplied)g(output)h(v)-5 b(ariance)24 b(arra)n(y)g(is)h
-(\014rst)h(used)f(as)g(a)h(w)n(ork)e(arra)n(y)f(to)j(accum)n(ulate)f
-(the)h(temp)r(orary)427 1773 y(v)-5 b(alues)33 b(needed)h(to)f
-(generate)g(the)h(output)g(v)-5 b(ariances.)53 b(When)34
-b(the)g(sequence)f(ends)g(\(as)g(indicated)h(b)n(y)427
-1873 y(the)24 b(AST)p Ft(__)p Fk(REBINEND)e(\015ag\),)i(the)f(con)n
-(ten)n(ts)f(of)h(the)h(output)f(v)-5 b(ariance)22 b(arra)n(y)f(are)h
-(con)n(v)n(erted)f(in)n(to)i(the)427 1973 y(required)29
-b(v)-5 b(ariance)29 b(estimates.)44 b(If)30 b(the)h(generation)d(of)i
-(suc)n(h)g(output)g(v)-5 b(ariances)29 b(is)g(required,)h(this)g
-(\015ag)427 2072 y(should)c(b)r(e)g(used)g(on)f(ev)n(ery)g(in)n(v)n(o)r
-(cation)f(of)i(this)g(routine)f(within)i(a)e(sequence,)h(and)g(an)n(y)f
-(supplied)h(input)427 2172 y(v)-5 b(ariances)31 b(will)h(ha)n(v)n(e)f
-(no)g(e\013ect)i(on)f(the)g(output)g(v)-5 b(ariances)31
-b(\(although)g(input)i(v)-5 b(ariances)31 b(will)h(still)g(b)r(e)427
-2272 y(used)c(to)f(w)n(eigh)n(t)g(the)h(input)h(data)e(if)h(the)g(AST)p
-Ft(__)p Fk(V)-9 b(AR)g(W)n(GT)27 b(\015ag)g(is)h(also)e(supplied\).)340
-2414 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(V)-9 b(AR)g(W)n(GT:)29
-b(Indicates)f(that)h(the)g(input)g(data)f(should)h(b)r(e)g(w)n(eigh)n
-(ted)f(b)n(y)g(the)h(recipro)r(cal)e(of)h(the)427 2513
-y(input)e(v)-5 b(ariances.)35 b(Otherwise,)25 b(all)g(input)h(data)f
-(are)g(giv)n(en)f(equal)h(w)n(eigh)n(t.)36 b(If)25 b(this)h(\015ag)f
-(is)g(sp)r(eci\014ed,)h(the)427 2613 y(calculation)e(of)h(the)g(output)
-g(v)-5 b(ariances)23 b(\(if)i(an)n(y\))g(is)f(mo)r(di\014ed)h(to)g(tak)
-n(e)f(accoun)n(t)f(of)i(the)g(v)-5 b(arying)24 b(w)n(eigh)n(ts)427
-2712 y(assigned)j(to)g(the)h(input)h(data)e(v)-5 b(alues.)-2
-2893 y Fc(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-3039 y Fk(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 3138 y(BAD)n(V)-9 b(AL)39 b(v)-5 b(alue)39
-b(in)f(the)h(OUT)g(arra)n(y)-7 b(.)67 b(These)38 b(are)g(only)g(pro)r
-(duced)g(if)h(the)g(AST)p Ft(__)p Fk(REBINEND)f(\015ag)g(is)227
-3238 y(sp)r(eci\014ed)28 b(and)g(a)f(pixel)g(has)g(zero)g(w)n(eigh)n
-(t.)227 3372 y(An)22 b(input)h(pixel)e(is)h(considered)e(bad)i(\(and)f
-(is)h(consequen)n(tly)e(ignored\))h(if)h(its)g(data)f(v)-5
-b(alue)21 b(is)h(equal)f(to)g(BAD)n(V)-9 b(AL)227 3471
-y(and)28 b(the)g(AST)p Ft(__)p Fk(USEBAD)f(\015ag)g(is)h(set)f(via)g
-(the)h(FLA)n(GS)g(argumen)n(t.)227 3605 y(In)h(addition,)f(asso)r
-(ciated)f(output)i(v)-5 b(ariance)27 b(estimates)h(\(if)i(calculated\))
-e(ma)n(y)f(b)r(e)i(declared)e(bad)i(and)f(\015agged)227
-3705 y(with)g(the)g(BAD)n(V)-9 b(AL)28 b(v)-5 b(alue)28
-b(in)g(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)27 b(arra)n(y)e(for)j(similar)e
-(reasons.)p 0 3922 3780 12 v 0 4053 a FA(AST)p Fe(_)p
-FA(REMAPFRAME)1659 4054 y Fd(Mo)s(dify)38 b(a)1690 4168
-y(F)-10 b(rame's)1519 4268 y(relationship)36 b(to)1554
-4383 y(other)h(F)-10 b(rames)1531 4482 y(in)39 b(a)f(F)-10
-b(rameSet)2436 4053 y FA(AST)p Fe(_)p FA(REMAPFRAME)0
-4671 y Fc(Description:)44 b Fk(This)39 b(routine)f(mo)r(di\014es)h(the)
-g(relationship)f(\(i.e.)71 b(Mapping\))39 b(b)r(et)n(w)n(een)f(a)h(sp)r
-(eci\014ed)g(F)-7 b(rame)38 b(in)h(a)227 4770 y(F)-7
-b(rameSet)28 b(and)f(the)h(other)f(F)-7 b(rames)27 b(in)h(that)g(F)-7
-b(rameSet.)227 4904 y(T)n(ypically)g(,)31 b(this)f(migh)n(t)g(b)r(e)h
-(required)f(if)g(the)h(F)-7 b(rameSet)30 b(has)g(b)r(een)h(used)f(to)g
-(calibrate)g(\(sa)n(y\))f(an)h(image,)h(and)227 5004
-y(that)h(image)e(is)h(re-binned.)48 b(The)31 b(F)-7 b(rame)30
-b(describing)h(the)g(image)g(will)g(then)h(ha)n(v)n(e)e(undergone)g(a)h
-(co)r(ordinate)227 5103 y(transformation,)26 b(and)i(this)g(should)f(b)
-r(e)h(comm)n(unicated)f(to)h(the)g(asso)r(ciated)e(F)-7
-b(rameSet)27 b(using)g(this)h(routine.)0 5271 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_REMAPFRAME\()37 b(THIS,)42
-b(IFRAME,)e(MAP,)i(STATUS)f(\))0 5439 y Fc(Argumen)m(ts:)259
-5593 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 5693
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rameSet.)p
-eop end
-%%Page: 314 324
-TeXDict begin 314 323 bop 0 52 a FG(314)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(IFRAME)g(=)h(INTEGER)
-g(\(Giv)m(en\))427 451 y Fk(The)i(index)h(within)g(the)f(F)-7
-b(rameSet)34 b(of)g(the)h(F)-7 b(rame)33 b(to)h(b)r(e)h(mo)r(di\014ed.)
-57 b(This)34 b(v)-5 b(alue)34 b(should)g(lie)g(in)g(the)427
-551 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)259 685 y Fc(MAP)k(=)g(INTEGER)f(\(Giv)m
-(en\))427 784 y Fk(P)n(oin)n(ter)38 b(to)i(a)f(Mapping)g(whose)g(forw)n
-(ard)f(transformation)g(con)n(v)n(erts)g(co)r(ordinate)h(v)-5
-b(alues)39 b(from)g(the)427 884 y(original)27 b(co)r(ordinate)f(system)
-i(describ)r(ed)f(b)n(y)h(the)g(F)-7 b(rame)27 b(to)h(the)g(new)g(one,)g
-(and)f(whose)g(in)n(v)n(erse)g(trans-)427 984 y(formation)g(con)n(v)n
-(erts)f(in)i(the)g(opp)r(osite)f(direction.)259 1118
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 1217 y Fk(The)c(global)e(status.)0 1382 y Fc(Notes:)340
-1667 y Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)31 b(of)g(AST)p
-Ft(__)p Fk(BASE)f(or)g(AST)p Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)
-n(en)f(for)h(the)g(IFRAME)h(argumen)n(t)e(to)427 1767
-y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)
--7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 1901 y Fj(\017)45
-b Fk(The)29 b(relationship)e(b)r(et)n(w)n(een)h(the)h(selected)f(F)-7
-b(rame)28 b(and)g(an)n(y)g(other)g(F)-7 b(rame)28 b(within)h(the)f(F)-7
-b(rameSet)28 b(will)427 2000 y(b)r(e)j(mo)r(di\014ed)g(b)n(y)g(this)f
-(routine,)h(but)h(the)f(relationship)e(b)r(et)n(w)n(een)i(all)f(other)g
-(F)-7 b(rames)30 b(in)h(the)g(F)-7 b(rameSet)427 2100
-y(remains)27 b(unc)n(hanged.)340 2234 y Fj(\017)45 b
-Fk(The)27 b(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinate)e(v)-5
-b(alues)27 b(accepted)g(b)n(y)f(the)i(Mapping)f(\(its)g(Nin)h
-(attribute\))f(and)g(the)427 2334 y(n)n(um)n(b)r(er)j(of)g(output)g(co)
-r(ordinate)f(v)-5 b(alues)30 b(generated)f(\(its)h(Nout)g(attribute\))h
-(m)n(ust)f(b)r(e)g(equal)g(and)f(m)n(ust)427 2433 y(matc)n(h)f(the)g(n)
-n(um)n(b)r(er)f(of)h(axes)e(in)i(the)g(F)-7 b(rame)27
-b(b)r(eing)h(mo)r(di\014ed.)340 2568 y Fj(\017)45 b Fk(If)26
-b(a)f(simple)h(c)n(hange)e(of)i(axis)f(order)f(is)h(required,)g(then)h
-(the)g(AST)p Ft(_)p Fk(PERMAXES)f(routine)g(ma)n(y)g(pro)n(vide)427
-2667 y(a)i(more)g(straigh)n(tforw)n(ard)e(metho)r(d)j(of)g(making)e
-(the)i(required)f(c)n(hanges)f(to)i(the)g(F)-7 b(rameSet.)340
-2801 y Fj(\017)45 b Fk(This)34 b(routine)f(cannot)g(b)r(e)h(used)f(to)h
-(c)n(hange)e(the)i(n)n(um)n(b)r(er)f(of)h(F)-7 b(rame)33
-b(axes.)54 b(T)-7 b(o)33 b(ac)n(hiev)n(e)f(this,)j(a)f(new)427
-2901 y(F)-7 b(rame)26 b(m)n(ust)g(b)r(e)h(added)f(to)g(the)g(F)-7
-b(rameSet)26 b(\(AST)p Ft(_)p Fk(ADDFRAME\))i(and)e(the)g(original)f
-(one)h(remo)n(v)n(ed)e(if)427 3001 y(necessary)i(\(AST)p
-Ft(_)p Fk(REMO)n(VEFRAME\).)p 0 3202 3780 12 v 0 3333
-a FA(AST)p Fe(_)p FA(REMO)l(VEFRAME)201 b Fd(Remo)m(v)m(e)38
-b(a)1591 3432 y(F)-10 b(rame)39 b(from)1600 3532 y(a)f(F)-10
-b(rameSet)2343 3333 y FA(AST)p Fe(_)p FA(REMO)l(VEFRAME)0
-3700 y Fc(Description:)44 b Fk(This)30 b(routine)f(remo)n(v)n(es)e(a)i
-(F)-7 b(rame)29 b(from)g(a)g(F)-7 b(rameSet.)41 b(All)30
-b(other)f(F)-7 b(rames)28 b(in)i(the)g(F)-7 b(rameSet)29
-b(ha)n(v)n(e)227 3800 y(their)f(indices)f(re-n)n(um)n(b)r(ered)g(from)g
-(one)g(\(if)i(necessary\),)d(but)i(are)f(otherwise)f(unc)n(hanged.)0
-3952 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_REMOVEFRAME)o(\()
-c(THIS,)j(IFRAME,)g(STATUS)g(\))0 4104 y Fc(Argumen)m(ts:)259
-4243 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4343
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rameSet.)259
-4477 y Fc(IFRAME)31 b(=)h(INTEGER)g(\(Giv)m(en\))427
-4577 y Fk(The)j(index)g(within)g(the)g(F)-7 b(rameSet)34
-b(of)h(the)g(F)-7 b(rame)34 b(to)h(b)r(e)g(remo)n(v)n(ed.)56
-b(This)35 b(v)-5 b(alue)34 b(should)h(lie)f(in)h(the)427
-4676 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)259 4810 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 4910
-y Fk(The)c(global)e(status.)0 5074 y Fc(Notes:)340 5360
-y Fj(\017)45 b Fk(Remo)n(ving)31 b(a)g(F)-7 b(rame)31
-b(from)g(a)g(F)-7 b(rameSet)32 b(do)r(es)f(not)h(a\013ect)f(the)h
-(relationship)f(b)r(et)n(w)n(een)g(other)g(F)-7 b(rames)427
-5459 y(in)28 b(the)g(F)-7 b(rameSet,)28 b(ev)n(en)f(if)h(they)g
-(originally)d(dep)r(ended)k(on)e(the)h(F)-7 b(rame)27
-b(b)r(eing)h(remo)n(v)n(ed.)340 5593 y Fj(\017)45 b Fk(The)31
-b(n)n(um)n(b)r(er)g(of)g(F)-7 b(rames)30 b(in)i(a)e(F)-7
-b(rameSet)31 b(cannot)g(b)r(e)g(reduced)g(to)g(zero.)46
-b(An)31 b(error)e(will)j(result)e(if)i(an)427 5693 y(attempt)d(is)e
-(made)g(to)h(remo)n(v)n(e)e(the)i(only)f(remaining)g(F)-7
-b(rame.)p eop end
-%%Page: 315 325
-TeXDict begin 315 324 bop 3643 52 a FG(315)340 351 y
-Fj(\017)45 b Fk(A)32 b(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p
-Fk(BASE)f(or)g(AST)p Ft(__)p Fk(CURRENT)h(ma)n(y)g(b)r(e)g(giv)n(en)f
-(for)h(the)g(IFRAME)h(argumen)n(t)e(to)427 451 y(sp)r(ecify)e(the)g
-(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7
-b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 578 y Fj(\017)45
-b Fk(If)22 b(a)f(F)-7 b(rameSet's)21 b(base)f(or)h(curren)n(t)f(F)-7
-b(rame)21 b(is)g(remo)n(v)n(ed,)g(the)g(Base)g(or)f(Curren)n(t)h
-(attribute)g(\(resp)r(ectiv)n(ely\))427 678 y(of)30 b(the)g(F)-7
-b(rameSet)30 b(will)g(ha)n(v)n(e)f(its)h(v)-5 b(alue)30
-b(cleared,)f(so)g(that)i(another)d(F)-7 b(rame)30 b(will)g(then)g
-(assume)f(its)i(role)427 778 y(b)n(y)d(default.)340 905
-y Fj(\017)45 b Fk(If)26 b(an)n(y)f(other)g(F)-7 b(rame)25
-b(is)g(remo)n(v)n(ed,)f(the)i(base)f(and)g(curren)n(t)g(F)-7
-b(rames)24 b(will)i(remain)f(the)h(same.)35 b(T)-7 b(o)25
-b(ensure)427 1005 y(this,)37 b(the)d(Base)g(and/or)e(Curren)n(t)i
-(attributes)g(of)g(the)h(F)-7 b(rameSet)34 b(will)h(b)r(e)f(c)n
-(hanged,)i(if)e(necessary)-7 b(,)35 b(to)427 1104 y(re\015ect)28
-b(an)n(y)e(c)n(hange)h(in)h(the)g(indices)f(of)h(these)f(F)-7
-b(rames.)p 0 1293 3780 12 v 0 1423 a FA(AST)p Fe(_)p
-FA(REMO)l(VEREGIONS)1712 1441 y Fd(Remo)m(v)m(e)1799
-1541 y(an)m(y)1801 1654 y(Re-)1759 1753 y(gions)1722
-1868 y(from)38 b(a)1755 1968 y(Map-)1779 2079 y(ping)2220
-1423 y FA(AST)p Fe(_)p FA(REMO)l(VEREGIONS)0 2261 y Fc(Description:)44
-b Fk(This)33 b(function)g(searc)n(hes)e(the)i(suppliedMapping)g(\(whic)
-n(h)g(ma)n(y)f(b)r(e)h(a)f(comp)r(ound)h(Mapping)f(suc)n(h)227
-2361 y(as)d(a)g(CmpMap\))g(for)g(an)n(y)f(comp)r(onen)n(t)h(Mappings)g
-(that)g(are)f(instances)h(of)g(the)h(AST)f(Region)g(class.)41
-b(It)29 b(then)227 2460 y(creates)f(a)h(new)g(Mapping)f(from)h(whic)n
-(h)g(all)f(Regions)g(ha)n(v)n(e)g(b)r(een)h(remo)n(v)n(ed.)40
-b(If)29 b(a)f(Region)h(cannot)f(simply)h(b)r(e)227 2560
-y(remo)n(v)n(ed)34 b(\(for)i(instance,)h(if)f(it)g(is)f(a)g(comp)r
-(onen)n(t)h(of)f(a)g(parallel)g(CmpMap\),)j(then)e(it)g(is)f(replaced)g
-(with)h(an)227 2660 y(equiv)-5 b(alen)n(t)28 b(UnitMap)g(in)g(the)g
-(returned)f(Mapping.)0 2804 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_REMOVEREGION)o(S\()37 b(THIS,)42
-b(STATUS)f(\))0 2948 y Fc(Argumen)m(ts:)259 3079 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 3178 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(original)e(Mapping.)259 3306 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3405 y Fk(The)c(global)e(status.)0 3562 y Fc(Class)31
-b(Applicabilit)m(y:)259 3693 y(CmpF)-8 b(rame)427 3793
-y Fk(If)35 b(the)f(supplied)g(Mapping)g(is)g(a)f(CmpF)-7
-b(rame,)36 b(an)n(y)d(comp)r(onen)n(t)g(F)-7 b(rames)34
-b(that)g(are)f(instances)g(of)h(the)427 3892 y(Region)27
-b(class)g(are)f(replaced)h(b)n(y)g(the)h(equiv)-5 b(alen)n(t)28
-b(F)-7 b(rame.)259 4020 y Fc(F)f(rameSet)427 4119 y Fk(If)29
-b(the)f(supplied)g(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28
-b(the)g(returned)g(Mapping)f(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g
-(supplied)427 4219 y(F)-7 b(rameSet)29 b(in)g(whic)n(h)g(Regions)f(ha)n
-(v)n(e)g(b)r(een)i(remo)n(v)n(ed)d(from)i(all)g(the)g(in)n(ter-F)-7
-b(rame)28 b(Mappings,)h(and)f(an)n(y)427 4319 y(F)-7
-b(rames)27 b(whic)n(h)h(are)e(instances)h(of)h(the)g(Region)f(class)f
-(are)h(repalced)g(b)n(y)g(the)h(equiv)-5 b(alen)n(t)27
-b(F)-7 b(rame.)259 4446 y Fc(Mapping)427 4546 y Fk(This)28
-b(function)g(applies)f(to)h(all)f(Mappings.)259 4673
-y Fc(Region)427 4773 y Fk(If)h(the)g(supplied)g(Mapping)f(is)h(a)f
-(Region,)g(the)h(returned)f(Mapping)g(will)h(b)r(e)g(the)g(equiv)-5
-b(alen)n(t)28 b(F)-7 b(rame.)0 4929 y Fc(Returned)32
-b(V)-8 b(alue:)259 5060 y(AST)p Ft(_)p Fc(REMO)m(VEREGIONS)30
-b(=)i(INTEGER)427 5160 y Fk(A)c(new)g(p)r(oin)n(ter)f(to)h(the)g(\(p)r
-(ossibly)f(mo)r(di\014ed\))h(Mapping.)0 5316 y Fc(Notes:)340
-5593 y Fj(\017)45 b Fk(This)22 b(function)f(can)g(safely)g(b)r(e)h
-(applied)f(ev)n(en)g(to)g(Mappings)f(whic)n(h)i(con)n(tain)e(no)h
-(Regions.)34 b(If)22 b(no)f(Regions)427 5693 y(are)f(found,)i(it)f(b)r
-(eha)n(v)n(es)e(exactly)h(lik)n(e)g(AST)p Ft(_)p Fk(CLONE)f(and)h
-(returns)g(a)g(p)r(oin)n(ter)g(to)g(the)h(original)e(Mapping.)p
-eop end
-%%Page: 316 326
-TeXDict begin 316 325 bop 0 52 a FG(316)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(The)26 b(Mapping)f(returned)g(b)n(y)g(this)h(function)g(ma)n(y)e
-(not)i(b)r(e)g(indep)r(enden)n(t)g(of)f(the)h(original)e(\(ev)n(en)h
-(if)h(some)427 451 y(Regions)37 b(w)n(ere)g(remo)n(v)n(ed\),)i(and)f
-(mo)r(difying)g(it)g(ma)n(y)f(therefore)g(result)g(in)h(indirect)g(mo)r
-(di\014cation)g(of)427 551 y(the)e(original.)58 b(If)35
-b(a)g(completely)g(indep)r(enden)n(t)h(result)f(is)g(required,)h(a)f
-(cop)n(y)f(should)h(b)r(e)h(made)f(using)427 650 y(AST)p
-Ft(_)p Fk(COPY.)340 785 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 885 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28
-b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 1088 3780 12 v 0 1219 a FA(AST)p Fe(_)p FA(RESAMPLE)p
-Fb(<)p FA(X)p Fb(>)1596 1220 y Fd(Resample)38 b(a)1618
-1334 y(region)f(of)i(a)1656 1449 y(data)e(grid)2411 1219
-y FA(AST)p Fe(_)p FA(RESAMPLE)p Fb(<)p FA(X)p Fb(>)0
-1646 y Fc(Description:)44 b Fk(This)31 b(is)g(a)f(set)h(of)g(functions)
-g(for)f(resampling)g(gridded)g(data)h(\(e.g.)46 b(an)31
-b(image\))f(under)h(the)g(con)n(trol)227 1746 y(of)c(a)e(geometrical)g
-(transformation,)g(whic)n(h)h(is)g(sp)r(eci\014ed)h(b)n(y)f(a)g
-(Mapping.)36 b(The)26 b(functions)h(op)r(erate)e(on)h(a)g(pair)227
-1845 y(of)i(data)f(grids)f(\(input)j(and)f(output\),)g(eac)n(h)f(of)g
-(whic)n(h)h(ma)n(y)f(ha)n(v)n(e)f(an)n(y)h(n)n(um)n(b)r(er)g(of)h
-(dimensions.)36 b(Resampling)227 1945 y(ma)n(y)c(b)r(e)g(restricted)g
-(to)g(a)g(sp)r(eci\014ed)h(region)d(of)j(the)f(output)h(grid.)50
-b(An)33 b(asso)r(ciated)e(grid)g(of)i(error)d(estimates)227
-2045 y(asso)r(ciated)36 b(with)h(the)g(input)h(data)e(ma)n(y)g(also)g
-(b)r(e)h(supplied)g(\(in)g(the)h(form)e(of)h(v)-5 b(ariance)35
-b(v)-5 b(alues\),)39 b(so)e(as)f(to)227 2144 y(pro)r(duce)29
-b(error)f(estimates)h(for)g(the)h(resampled)e(output)i(data.)42
-b(Propagation)27 b(of)i(missing)g(data)g(\(bad)h(pixels\))227
-2244 y(is)e(supp)r(orted.)227 2370 y(Y)-7 b(ou)29 b(should)g(use)g(a)f
-(resampling)g(function)h(whic)n(h)g(matc)n(hes)g(the)g(n)n(umerical)f
-(t)n(yp)r(e)h(of)g(the)g(data)g(y)n(ou)f(are)g(pro-)227
-2470 y(cessing)c(b)n(y)h(replacing)f Fm(<)p Fk(X)p Fm(>)g
-Fk(in)h(the)h(generic)d(function)j(name)f(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(b)n(y)i(an)f(appropriate)227
-2570 y(1-)i(or)f(2-c)n(haracter)f(t)n(yp)r(e)j(co)r(de.)36
-b(F)-7 b(or)26 b(example,)g(if)h(y)n(ou)f(are)f(resampling)g(data)h
-(with)h(t)n(yp)r(e)g(REAL,)f(y)n(ou)g(should)227 2669
-y(use)38 b(the)g(function)g(AST)p Ft(_)p Fk(RESAMPLER)e(\(see)i(the)g
-Ft(")p Fk(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fk(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(des)227 2769 y(appropriate)26 b(to)i(other)f(n)n
-(umerical)f(t)n(yp)r(es\).)227 2895 y(Resampling)f(of)h(the)f(grid)g
-(of)h(input)g(data)f(is)g(p)r(erformed)g(b)n(y)h(transforming)e(the)h
-(co)r(ordinates)f(of)i(the)g(cen)n(tre)f(of)227 2995
-y(eac)n(h)d(output)g(grid)g(elemen)n(t)g(\(or)g(pixel\))g(in)n(to)g
-(the)h(co)r(ordinate)e(system)h(of)g(the)h(input)g(grid.)34
-b(Since)23 b(the)f(resulting)227 3095 y(co)r(ordinates)27
-b(will)h(not,)g(in)g(general,)f(coincide)h(with)g(the)h(cen)n(tre)e(of)
-h(an)g(input)h(pixel,)f(sub-pixel)f(in)n(terp)r(olation)227
-3194 y(is)35 b(p)r(erformed)g(b)r(et)n(w)n(een)g(the)h(neigh)n(b)r
-(ouring)e(input)i(pixels.)60 b(This)35 b(pro)r(duces)f(a)h(resampled)f
-(v)-5 b(alue)36 b(whic)n(h)f(is)227 3294 y(then)26 b(assigned)d(to)i
-(the)g(output)g(pixel.)36 b(A)26 b(c)n(hoice)e(of)g(sub-pixel)h(in)n
-(terp)r(olation)f(sc)n(hemes)g(is)h(pro)n(vided,)f(but)h(y)n(ou)227
-3394 y(ma)n(y)i(also)g(implemen)n(t)h(y)n(our)e(o)n(wn.)227
-3520 y(This)g(algorithm)f(samples)h(the)h(input)g(data)e(v)-5
-b(alue,)27 b(it)f(do)r(es)g(not)g(in)n(tegrate)f(it.)37
-b(Th)n(us)26 b(total)g(data)g(v)-5 b(alue)26 b(in)g(the)227
-3620 y(input)31 b(image)f(will)h(not,)g(in)f(general,)g(b)r(e)h
-(conserv)n(ed.)43 b(Ho)n(w)n(ev)n(er,)30 b(an)g(option)g(is)g(pro)n
-(vided)f(\(see)i(the)f Ft(")p Fk(Con)n(trol)227 3719
-y(Flags)p Ft(")38 b Fk(section)h(b)r(elo)n(w\))g(whic)n(h)h(can)e(pro)r
-(duce)h(appro)n(ximate)f(\015ux)h(conserv)-5 b(ation)38
-b(b)n(y)h(scaling)f(the)i(output)227 3819 y(v)-5 b(alues)34
-b(using)f(the)h(ratio)f(of)h(the)g(output)h(pixel)f(size)f(to)h(the)g
-(input)h(pixel)f(size.)55 b(Ho)n(w)n(ev)n(er,)34 b(if)g(accurate)e
-(\015ux)227 3919 y(conserv)-5 b(ation)28 b(is)h(imp)r(ortan)n(t)g(to)g
-(y)n(ou,)g(consder)f(using)g(the)i(AST)p Ft(_)p Fk(REBIN)p
-Fm(<)p Fk(X)p Fm(>)e Fk(or)g(AST)p Ft(_)p Fk(REBINSEQ)p
-Fm(<)p Fk(X)p Fm(>)227 4018 y Fk(family)g(of)g(routines)e(instead.)227
-4145 y(Output)32 b(pixel)g(co)r(ordinates)e(are)h(transformed)f(in)n
-(to)h(the)h(co)r(ordinate)e(system)i(of)f(the)h(input)g(grid)f(using)g
-(the)227 4244 y(in)n(v)n(erse)i(transformation)g(of)h(the)h(Mapping)e
-(whic)n(h)i(is)f(supplied.)57 b(This)34 b(means)g(that)h(geometrical)d
-(features)227 4344 y(in)g(the)f(input)h(data)f(are)f(sub)5
-b(jected)31 b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i
-(they)g(are)f(transferred)227 4444 y(from)24 b(the)g(input)g(to)g(the)g
-(output)g(grid)f(\(although)g(the)h(Mapping's)f(forw)n(ard)f
-(transformation)g(is)i(not)f(explicitly)227 4543 y(used\).)227
-4670 y(In)h(practice,)f(transforming)e(the)j(co)r(ordinates)e(of)h(ev)n
-(ery)e(pixel)j(of)f(a)f(large)g(data)h(grid)f(can)h(b)r(e)g
-(time-consuming,)227 4769 y(esp)r(ecially)38 b(if)g(the)h(Mapping)f(in)
-n(v)n(olv)n(es)e(complicated)i(functions,)j(suc)n(h)c(as)h(sky)f(pro)5
-b(jections.)67 b(T)-7 b(o)38 b(impro)n(v)n(e)227 4869
-y(p)r(erformance,)29 b(it)g(is)g(therefore)f(p)r(ossible)g(to)h(appro)n
-(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)g(set)g(of)f(linear)h
-(trans-)227 4969 y(formations)h(whic)n(h)h(are)f(applied)g(piece-wise)h
-(to)f(separate)g(sub-regions)f(of)h(the)i(data.)46 b(This)30
-b(appro)n(ximation)227 5068 y(pro)r(cess)37 b(is)h(applied)g
-(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)i(under)f(con)n
-(trol)f(of)h(an)g(accuracy)e(crite-)227 5168 y(rion)25
-b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f(geometrical)f
-(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r(duced,)f(as)f(a)
-227 5268 y(fraction)i(of)h(a)f(pixel.)227 5394 y(This)34
-b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e(the)i(Mapping)
-f(with)h(a)f(linear)g(transformation)f(applied)227 5494
-y(o)n(v)n(er)h(the)h(whole)g(region)f(of)h(the)h(output)g(grid)e(whic)n
-(h)i(is)f(b)r(eing)g(used.)57 b(If)35 b(this)f(pro)n(v)n(es)f(to)h(b)r
-(e)g(insu\016cien)n(tly)227 5593 y(accurate,)29 b(the)h(output)g
-(region)f(is)g(sub-divided)h(in)n(to)f(t)n(w)n(o)g(along)f(its)i
-(largest)e(dimension)i(and)f(the)h(pro)r(cess)f(is)227
-5693 y(rep)r(eated)k(within)h(eac)n(h)f(of)g(the)h(resulting)e
-(sub-regions.)53 b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n
-(tin)n(ues)f(un)n(til)i(a)p eop end
-%%Page: 317 327
-TeXDict begin 317 326 bop 3643 52 a FG(317)227 351 y
-Fk(su\016cien)n(tly)27 b(go)r(o)r(d)g(linear)f(appro)n(ximation)g(is)h
-(found,)g(or)f(the)i(region)e(to)h(whic)n(h)g(it)h(is)f(b)r(eing)g
-(applied)g(b)r(ecomes)227 451 y(to)r(o)h(small)f(\(in)h(whic)n(h)f
-(case)g(the)h(original)e(Mapping)h(is)h(used)g(directly\).)0
-595 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_RESAMPLE)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)k(NDIM_IN,)g(LBND_IN,)f(UBND_IN,)
-g(IN,)j(IN_VAR,)d(INTERP,)227 695 y(FINTERP,)h(PARAMS,)f(FLAGS,)h(TOL,)
-h(MAXPIX,)f(BADVAL,)g(NDIM_OUT,)f(LBND_OUT,)f(UBND_OUT,)h(LBND,)i
-(UBND,)227 795 y(OUT,)g(OUT_VAR,)e(STATUS)i(\))0 939
-y Fc(Argumen)m(ts:)259 1070 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-1170 y Fk(P)n(oin)n(ter)21 b(to)h(a)g(Mapping,)h(whose)f(in)n(v)n(erse)
-f(transformation)g(will)i(b)r(e)f(used)h(to)f(transform)f(the)i(co)r
-(ordinates)427 1269 y(of)36 b(pixels)f(in)h(the)g(output)h(grid)e(in)n
-(to)g(the)h(co)r(ordinate)f(system)g(of)h(the)g(input)h(grid.)60
-b(This)36 b(yields)f(the)427 1369 y(p)r(ositions)h(whic)n(h)g(are)f
-(used)h(to)g(obtain)g(resampled)f(v)-5 b(alues)36 b(b)n(y)f(sub-pixel)h
-(in)n(terp)r(olation)f(within)i(the)427 1469 y(input)29
-b(grid.)427 1582 y(The)24 b(n)n(um)n(b)r(er)g(of)g(input)h(co)r
-(ordinates)e(used)h(b)n(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f
-(its)i(Nin)f(attribute\))h(should)427 1682 y(matc)n(h)f(the)h(n)n(um)n
-(b)r(er)f(of)g(input)h(grid)f(dimensions)f(giv)n(en)h(b)n(y)g(the)g(v)
--5 b(alue)25 b(of)f(NDIM)p Ft(_)p Fk(IN)h(b)r(elo)n(w.)35
-b(Similarly)-7 b(,)427 1782 y(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g
-(co)r(ordinates)f(\(Nout)h(attribute\))h(should)e(matc)n(h)h(the)g(n)n
-(um)n(b)r(er)g(of)g(output)g(grid)427 1881 y(dimensions)g(giv)n(en)e(b)
-n(y)i(NDIM)p Ft(_)p Fk(OUT.)259 2009 y Fc(NDIM)p Ft(_)p
-Fc(IN)j(=)h(INTEGER)g(\(Giv)m(en\))427 2109 y Fk(The)c(n)n(um)n(b)r(er)
-f(of)h(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28
-b(should)f(b)r(e)h(at)g(least)f(one.)259 2236 y Fc(LBND)p
-Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m
-(en\))427 2336 y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r
-(ordinates)e(of)h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g
-(the)h(input)g(grid)f(along)427 2436 y(eac)n(h)27 b(dimension.)259
-2564 y Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g
-(INTEGER)f(\(Giv)m(en\))427 2663 y Fk(An)k(arra)n(y)d(con)n(taining)h
-(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)
-g(in)h(the)f(input)h(grid)f(along)427 2763 y(eac)n(h)27
-b(dimension.)427 2876 y(Note)h(that)f(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)
-p Ft(_)p Fk(IN)h(together)f(de\014ne)g(the)h(shap)r(e)f(and)g(size)g
-(of)h(the)g(input)g(grid,)e(its)427 2976 y(exten)n(t)33
-b(along)e(a)i(particular)e(\(J'th\))j(dimension)e(b)r(eing)h(UBND)p
-Ft(_)p Fk(IN\(J\)-LBND)p Ft(_)p Fk(IN\(J\)+1.)52 b(They)33
-b(also)427 3076 y(de\014ne)25 b(the)f(input)i(grid's)d(co)r(ordinate)g
-(system,)i(eac)n(h)e(pixel)i(ha)n(ving)e(unit)i(exten)n(t)f(along)f
-(eac)n(h)h(dimension)427 3175 y(with)k(in)n(tegral)f(co)r(ordinate)f(v)
--5 b(alues)27 b(at)h(its)g(cen)n(tre.)259 3303 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 3403 y Fk(An)e(arra)n(y)-7 b(,)26
-b(with)k(one)e(elemen)n(t)h(for)f(eac)n(h)g(pixel)h(in)g(the)h(input)f
-(grid,)g(con)n(taining)e(the)j(input)f(data)g(to)f(b)r(e)427
-3502 y(resampled.)51 b(The)32 b(n)n(umerical)g(t)n(yp)r(e)g(of)h(this)f
-(arra)n(y)e(should)j(matc)n(h)f(the)h(1-)e(or)h(2-c)n(haracter)d(t)n
-(yp)r(e)k(co)r(de)427 3602 y(app)r(ended)d(to)f(the)h(function)g(name)f
-(\(e.g.)42 b(if)30 b(y)n(ou)f(are)f(using)h(AST)p Ft(_)p
-Fk(RESAMPLER,)g(the)g(t)n(yp)r(e)h(of)f(eac)n(h)427 3702
-y(arra)n(y)d(elemen)n(t)h(should)h(b)r(e)g(REAL\).)427
-3815 y(The)33 b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)
-c(should)j(b)r(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g
-(grid)427 3915 y(dimension)39 b(v)-5 b(aries)39 b(most)g(rapidly)g(and)
-g(that)g(of)h(the)f(\014nal)g(dimension)h(least)f(rapidly)f(\(i.e.)73
-b(normal)427 4015 y(F)-7 b(ortran)27 b(arra)n(y)e(storage)h(order\).)
-259 4142 y Fc(IN)p Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427
-4242 y Fk(An)24 b(optional)e(second)h(arra)n(y)e(with)i(the)h(same)f
-(size)f(and)h(t)n(yp)r(e)h(as)e(the)i(IN)f(arra)n(y)-7
-b(.)34 b(If)23 b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)427
-4342 y(\015ag)28 b(is)g(set)h(via)f(the)h(FLA)n(GS)g(argumen)n(t)e(\(b)
-r(elo)n(w\),)i(this)g(arra)n(y)d(should)i(con)n(tain)g(a)g(set)h(of)f
-(non-negativ)n(e)427 4441 y(v)-5 b(alues)32 b(whic)n(h)h(represen)n(t)e
-(estimates)h(of)g(the)h(statistical)f(v)-5 b(ariance)31
-b(asso)r(ciated)g(with)i(eac)n(h)e(elemen)n(t)i(of)427
-4541 y(the)26 b(IN)f(arra)n(y)-7 b(.)33 b(Estimates)25
-b(of)f(the)i(v)-5 b(ariance)23 b(of)i(the)g(resampled)g(output)g(data)f
-(will)h(then)h(b)r(e)f(calculated.)427 4655 y(If)g(the)g(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)25 b(\015ag)f(is)g(not)h(set,)g(no)g(input)g(v)
--5 b(ariance)24 b(estimates)g(are)g(required)f(and)i(this)g(arra)n(y)
-427 4754 y(will)j(not)g(b)r(e)g(used.)37 b(A)27 b(dumm)n(y)h(\(e.g.)37
-b(one-elemen)n(t\))27 b(arra)n(y)e(ma)n(y)i(then)h(b)r(e)g(supplied.)
-259 4882 y Fc(INTERP)k(=)g(INTEGER)f(\(Giv)m(en\))427
-4982 y Fk(This)i(argumen)n(t)f(sp)r(eci\014es)h(the)g(sc)n(heme)g(to)f
-(b)r(e)i(used)f(for)f(sub-pixel)h(in)n(terp)r(olation)f(within)h(the)h
-(input)427 5081 y(grid.)62 b(It)36 b(ma)n(y)f(b)r(e)i(used)f(to)f
-(select)h(from)g(a)f(set)h(of)g(pre-de\014ned)g(sc)n(hemes)f(b)n(y)h
-(supplying)g(one)f(of)h(the)427 5181 y(v)-5 b(alues)31
-b(describ)r(ed)f(in)i(the)f Ft(")p Fk(Sub-Pixel)f(In)n(terp)r(olation)g
-(Sc)n(hemes)p Ft(")g Fk(section)g(b)r(elo)n(w.)46 b(If)32
-b(a)e(v)-5 b(alue)31 b(of)g(zero)427 5280 y(is)d(supplied,)h(then)f
-(the)g(default)h(linear)e(in)n(terp)r(olation)g(sc)n(heme)h(is)g(used)g
-(\(equiv)-5 b(alen)n(t)28 b(to)f(supplying)h(the)427
-5380 y(v)-5 b(alue)28 b(AST)p Ft(__)p Fk(LINEAR\).)427
-5494 y(Alternativ)n(ely)-7 b(,)25 b(y)n(ou)e(ma)n(y)h(supply)g(a)g(v)-5
-b(alue)24 b(whic)n(h)g(indicates)g(that)h(y)n(ou)e(will)h(pro)n(vide)f
-(y)n(our)g(o)n(wn)h(routine)427 5593 y(to)39 b(p)r(erform)f(sub-pixel)g
-(in)n(terp)r(olation)g(b)n(y)g(means)g(of)g(the)h(FINTERP)g(argumen)n
-(t.)68 b(Again,)41 b(see)d(the)427 5693 y Ft(")p Fk(Sub-Pixel)27
-b(In)n(terp)r(olation)g(Sc)n(hemes)p Ft(")f Fk(section)i(b)r(elo)n(w)f
-(for)g(details.)p eop end
-%%Page: 318 328
-TeXDict begin 318 327 bop 0 52 a FG(318)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FINTERP)h(=)g(SUBR)m
-(OUTINE)g(\(Giv)m(en\))427 451 y Fk(If)g(the)f(v)-5 b(alue)32
-b(giv)n(en)e(for)h(the)g(INTERP)g(argumen)n(t)f(indicates)h(that)g(y)n
-(ou)g(will)g(pro)n(vide)f(y)n(our)g(o)n(wn)h(rou-)427
-551 y(tine)39 b(for)f(sub-pixel)g(in)n(terp)r(olation,)i(then)f(the)g
-(name)f(of)h(that)f(routine)g(should)h(b)r(e)f(giv)n(en)g(here)g(\(the)
-427 650 y(name)31 b(should)g(also)g(app)r(ear)f(in)i(a)e(F)-7
-b(ortran)31 b(EXTERNAL)g(statemen)n(t)g(in)h(the)f(routine)g(whic)n(h)g
-(in)n(v)n(ok)n(es)427 750 y(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(\).)37 b(F)-7 b(or)27 b(details)h(of)g(the)g
-(in)n(terface)f(whic)n(h)h(the)g(routine)g(should)f(ha)n(v)n(e)g(\(sev)
-n(eral)427 849 y(are)c(p)r(ossible,)i(dep)r(ending)f(on)g(the)g(v)-5
-b(alue)24 b(of)g(INTERP\),)g(see)g(the)g Ft(")p Fk(Sub-Pixel)f(In)n
-(terp)r(olation)g(Sc)n(hemes)p Ft(")427 949 y Fk(section)k(b)r(elo)n
-(w.)427 1063 y(If)35 b(the)f(INTERP)f(argumen)n(t)g(has)h(an)n(y)f
-(other)g(v)-5 b(alue,)36 b(corresp)r(onding)c(to)h(one)h(of)g(the)g
-(pre-de\014ned)g(in-)427 1163 y(terp)r(olation)28 b(sc)n(hemes,)g(then)
-h(this)f(routine)g(will)h(not)f(b)r(e)h(used)g(and)f(y)n(ou)g(ma)n(y)f
-(supply)i(the)f(n)n(ull)h(routine)427 1262 y(AST)p Ft(_)p
-Fk(NULL)e(here)f(\(note)g(only)g(one)g(underscore\).)35
-b(No)26 b(EXTERNAL)g(statemen)n(t)g(is)g(required)g(for)f(this)427
-1362 y(routine,)j(so)e(long)h(as)g(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)28 b(include)g(\014le)g(has)f(b)r(een)h(used.)259
-1491 y Fc(P)-8 b(ARAMS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)
-e(\(Giv)m(en\))427 1590 y Fk(An)39 b(optional)f(arra)n(y)f(whic)n(h)h
-(should)h(con)n(tain)f(an)n(y)g(additional)g(parameter)f(v)-5
-b(alues)38 b(required)g(b)n(y)g(the)427 1690 y(sub-pixel)e(in)n(terp)r
-(olation)f(sc)n(heme.)61 b(If)37 b(suc)n(h)e(parameters)f(are)h
-(required,)i(this)g(will)f(b)r(e)g(noted)g(in)g(the)427
-1789 y Ft(")p Fk(Sub-Pixel)26 b(In)n(terp)r(olation)f(Sc)n(hemes)p
-Ft(")h Fk(section)g(b)r(elo)n(w)g(\(y)n(ou)g(ma)n(y)g(also)f(use)h
-(this)h(arra)n(y)d(to)i(pass)g(v)-5 b(alues)427 1889
-y(to)28 b(y)n(our)e(o)n(wn)h(in)n(terp)r(olation)g(routine\).)427
-2003 y(If)f(no)e(additional)g(parameters)g(are)f(required,)i(this)g
-(arra)n(y)d(is)j(not)g(used.)36 b(A)25 b(dumm)n(y)g(\(e.g.)36
-b(one-elemen)n(t\))427 2103 y(arra)n(y)26 b(ma)n(y)g(then)j(b)r(e)f
-(supplied.)259 2231 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-2331 y Fk(The)36 b(sum)f(of)h(a)f(set)g(of)g(\015ag)g(v)-5
-b(alues)35 b(whic)n(h)g(ma)n(y)g(b)r(e)h(used)f(to)g(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)f(the)427 2431
-y(resampling)26 b(op)r(eration.)36 b(See)27 b(the)g Ft(")p
-Fk(Con)n(trol)e(Flags)p Ft(")h Fk(section)h(b)r(elo)n(w)f(for)h(a)f
-(description)h(of)g(the)g(options)427 2530 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 2659 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f(\(Giv)m
-(en\))427 2759 y Fk(The)j(maxim)n(um)f(tolerable)f(geometrical)f
-(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h
-(result)g(of)g(ap-)427 2858 y(pro)n(ximating)c(non-linear)f(Mappings)h
-(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 2958 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(in)h(pixels)f(in)h(the)g(input)h(grid's)d(co)r(ordinate)h
-(system.)427 3072 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 3172 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 3271 y(time.)259 3400
-y Fc(MAXPIX)d(=)f(INTEGER)f(\(Giv)m(en\))427 3499 y Fk(A)42
-b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g(scale)g
-(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g(whic)n
-(h)427 3599 y(appro)n(ximates)d(non-linear)g(Mappings)h(with)h
-(piece-wise)f(linear)g(transformations.)68 b(Normally)-7
-b(,)40 b(this)427 3699 y(should)35 b(b)r(e)g(a)f(large)g(v)-5
-b(alue)34 b(\(larger)f(than)i(an)n(y)f(dimension)h(of)g(the)g(region)e
-(of)i(the)g(output)g(grid)g(b)r(eing)427 3798 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-3898 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(output)i
-(region.)427 4012 y(If)40 b(a)g(smaller)e(v)-5 b(alue)40
-b(is)f(used,)k(the)d(output)g(region)f(will)h(\014rst)f(b)r(e)h
-(divided)g(in)n(to)g(sub-regions)d(whose)427 4112 y(size)30
-b(do)r(es)f(not)h(exceed)g(MAXPIX)g(pixels)g(in)g(an)n(y)f(dimension.)
-44 b(Only)29 b(at)h(this)g(p)r(oin)n(t)g(will)g(attempts)h(at)427
-4211 y(appro)n(ximation)26 b(commence.)427 4325 y(This)38
-b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)f(in)h
-(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h(adaptiv)n(e)
-e(al-)427 4425 y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r
-(ears)f(appro)n(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)
-427 4525 y(irregularities)27 b(\(e.g.)40 b(holes\))28
-b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5 b(alue)28 b(of,)h(sa)n(y)-7
-b(,)28 b(50)g(to)g(100)g(pixels)g(can)g(also)g(b)r(e)h(em-)427
-4624 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f(in)i(general-purp)r(ose)d
-(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f(on)h(p)r(erformance)e(is)h
-(minimal.)427 4738 y(If)e(to)r(o)f(small)g(a)g(v)-5 b(alue)20
-b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g(of)f
-(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-4838 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g(zero\).)34
-b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i(accurate)e
-(results)427 4938 y(will)28 b(still)g(b)r(e)g(obtained.)259
-5066 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Giv)m(en\))427 5166 y Fk(This)i(argumen)n(t)e(should)h(ha)n
-(v)n(e)g(the)g(same)g(t)n(yp)r(e)h(as)f(the)h(elemen)n(ts)f(of)g(the)h
-(IN)g(arra)n(y)-7 b(.)49 b(It)33 b(sp)r(eci\014es)f(the)427
-5266 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g(\(bad)h
-(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-5380 y(If)33 b(the)f(AST)p Ft(__)p Fk(USEBAD)g(\015ag)f(is)h(set)g(via)
-f(the)i(FLA)n(GS)f(argumen)n(t,)g(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)f(to)h(test)427 5479 y(for)27 b(bad)h(pixels)f
-(in)h(the)g(IN)g(\(and)g(IN)p Ft(_)p Fk(V)-9 b(AR\))28
-b(arra)n(y\(s\).)427 5593 y(Unless)35 b(the)h(AST)p Ft(__)p
-Fk(NOBAD)f(\015ag)f(is)h(set)g(via)g(the)h(FLA)n(GS)f(argumen)n(t,)h
-(this)g(v)-5 b(alue)35 b(is)g(also)f(used)h(to)427 5693
-y(\015ag)29 b(an)n(y)f(output)i(elemen)n(ts)f(in)g(the)h(OUT)f(\(and)g
-(OUT)p Ft(_)p Fk(V)-9 b(AR\))30 b(arra)n(y\(s\))d(for)i(whic)n(h)g
-(resampled)f(v)-5 b(alues)p eop end
-%%Page: 319 329
-TeXDict begin 319 328 bop 3643 52 a FG(319)427 351 y
-Fk(could)34 b(not)g(b)r(e)g(obtained)f(\(see)h(the)g
-Ft(")p Fk(Propagation)d(of)j(Missing)f(Data)p Ft(")g
-Fk(section)g(b)r(elo)n(w)h(for)f(details)h(of)427 451
-y(the)23 b(circumstances)f(under)h(whic)n(h)f(this)h(ma)n(y)f(o)r
-(ccur\).)35 b(The)23 b(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)e Fk(function)i(return)427 551 y(v)-5 b(alue)32
-b(indicates)g(whether)g(an)n(y)f(suc)n(h)h(v)-5 b(alues)31
-b(ha)n(v)n(e)g(b)r(een)i(pro)r(duced.)50 b(If)32 b(the)h(AST)p
-Ft(__)p Fk(NOBAD)e(\015ag)h(is)427 650 y(set.)41 b(then)30
-b(output)f(arra)n(y)e(elemen)n(ts)i(for)f(whic)n(h)h(no)g(resampled)f
-(v)-5 b(alue)29 b(could)g(b)r(e)g(obtained)g(are)f(left)i(set)427
-750 y(to)e(the)g(v)-5 b(alue)27 b(they)h(had)f(on)h(en)n(try)f(to)g
-(this)h(function.)259 888 y Fc(NDIM)p Ft(_)p Fc(OUT)k(=)g(INTEGER)f
-(\(Giv)m(en\))427 988 y Fk(The)38 b(n)n(um)n(b)r(er)f(of)g(dimensions)g
-(in)h(the)f(output)h(grid.)66 b(This)37 b(should)g(b)r(e)h(at)f(least)g
-(one.)65 b(It)38 b(need)g(not)427 1087 y(necessarily)26
-b(b)r(e)i(equal)f(to)h(the)g(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h
-(the)g(input)g(grid.)259 1226 y Fc(LBND)p Ft(_)p Fc(OUT\()33
-b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g(INTEGER)g(\(Giv)m(en\))427
-1325 y Fk(An)f(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)h(cen)n(tre)e(of)h(the)h(\014rst)f(pixel)g(in)g(the)h(output)f
-(grid)g(along)427 1425 y(eac)n(h)d(dimension.)259 1563
-y Fc(UBND)p Ft(_)p Fc(OUT\()33 b(NDIM)p Ft(_)p Fc(OUT)e(\))h(=)g
-(INTEGER)g(\(Giv)m(en\))427 1663 y Fk(An)g(arra)n(y)c(con)n(taining)i
-(the)i(co)r(ordinates)d(of)i(the)h(cen)n(tre)e(of)h(the)h(last)e(pixel)
-h(in)h(the)f(output)h(grid)e(along)427 1762 y(eac)n(h)d(dimension.)427
-1881 y(Note)41 b(that)g(LBND)p Ft(_)p Fk(OUT)f(and)g(UBND)p
-Ft(_)p Fk(OUT)h(together)e(de\014ne)i(the)g(shap)r(e,)i(size)d(and)h
-(co)r(ordinate)427 1981 y(system)24 b(of)f(the)h(output)h(grid)d(in)i
-(the)g(same)g(w)n(a)n(y)e(as)h(LBND)p Ft(_)p Fk(IN)h(and)f(UBND)p
-Ft(_)p Fk(IN)i(de\014ne)f(the)g(shap)r(e,)g(size)427
-2081 y(and)k(co)r(ordinate)e(system)h(of)h(the)g(input)g(grid.)259
-2219 y Fc(LBND\()k(NDIM)p Ft(_)p Fc(OUT)g(\))g(=)g(INTEGER)f(\(Giv)m
-(en\))427 2319 y Fk(An)37 b(arra)n(y)c(con)n(taining)i(the)h(co)r
-(ordinates)f(of)h(the)g(\014rst)g(pixel)f(in)i(the)f(region)e(of)i(the)
-h(output)f(grid)f(for)427 2418 y(whic)n(h)28 b(a)f(resampled)g(v)-5
-b(alue)27 b(is)h(to)f(b)r(e)h(calculated.)259 2557 y
-Fc(UBND\()k(NDIM)p Ft(_)p Fc(OUT)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-2656 y Fk(An)23 b(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)
-h(the)g(last)g(pixel)h(in)f(the)h(region)e(of)h(the)h(output)f(grid)g
-(for)g(whic)n(h)427 2756 y(a)27 b(resampled)g(v)-5 b(alue)28
-b(is)f(to)h(b)r(e)g(calculated.)427 2875 y(Note)e(that)g(LBND)h(and)e
-(UBND)i(together)e(de\014ne)h(the)g(shap)r(e)g(and)g(p)r(osition)g(of)f
-(a)h(\(h)n(yp)r(er-\)rectangular)427 2974 y(region)42
-b(of)i(the)f(output)h(grid)f(for)f(whic)n(h)i(resampled)e(v)-5
-b(alues)43 b(should)g(b)r(e)h(pro)r(duced.)84 b(This)43
-b(region)427 3074 y(should)32 b(lie)h(wholly)f(within)h(the)f(exten)n
-(t)h(of)f(the)h(output)g(grid)e(\(as)h(de\014ned)h(b)n(y)f(the)h(LBND)p
-Ft(_)p Fk(OUT)f(and)427 3174 y(UBND)p Ft(_)p Fk(OUT)20
-b(arra)n(ys\).)31 b(Regions)19 b(of)g(the)g(output)h(grid)e(lying)h
-(outside)g(this)g(region)f(will)h(not)h(b)r(e)f(mo)r(di\014ed.)259
-3312 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Returned\))427 3412 y Fk(An)e(arra)n(y)-7
-b(,)26 b(with)j(one)f(elemen)n(t)g(for)g(eac)n(h)g(pixel)g(in)g(the)h
-(output)g(grid,)f(in)n(to)g(whic)n(h)g(the)h(resampled)e(data)427
-3511 y(v)-5 b(alues)27 b(will)h(b)r(e)g(returned.)36
-b(The)27 b(n)n(umerical)g(t)n(yp)r(e)g(of)h(this)f(arra)n(y)e(should)i
-(matc)n(h)h(that)f(of)g(the)h(IN)g(arra)n(y)-7 b(,)427
-3611 y(and)32 b(the)g(data)f(storage)f(order)g(should)i(b)r(e)g(suc)n
-(h)g(that)g(the)g(index)g(of)f(the)h(\014rst)g(grid)f(dimension)h(v)-5
-b(aries)427 3710 y(most)27 b(rapidly)g(and)g(that)h(of)f(the)h(\014nal)
-f(dimension)g(least)g(rapidly)g(\(i.e.)37 b(normal)26
-b(F)-7 b(ortran)27 b(arra)n(y)e(storage)427 3810 y(order\).)259
-3948 y Fc(OUT)p Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Returned\))427
-4048 y Fk(An)25 b(optional)f(arra)n(y)d(with)k(the)g(same)f(t)n(yp)r(e)
-g(and)g(size)g(as)g(the)g(OUT)g(arra)n(y)-7 b(.)34 b(If)25
-b(the)f(AST)p Ft(__)p Fk(USEV)-9 b(AR)24 b(\015ag)427
-4148 y(is)30 b(set)f(via)h(the)g(FLA)n(GS)g(argumen)n(t,)f(this)h(arra)
-n(y)d(will)j(b)r(e)g(used)g(to)f(return)g(v)-5 b(ariance)29
-b(estimates)g(for)g(the)427 4247 y(resampled)e(data)g(v)-5
-b(alues.)427 4366 y(The)23 b(output)f(v)-5 b(ariance)22
-b(v)-5 b(alues)21 b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f
-(that)g(errors)e(on)i(the)h(input)g(data)427 4466 y(v)-5
-b(alues)24 b(are)g(statistically)f(indep)r(enden)n(t)i(and)g(that)f
-(their)g(v)-5 b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f
-(summed)427 4566 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g
-(factors\))h(when)h(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h
-(an)f(output)h(data)427 4665 y(v)-5 b(alue.)59 b(If)35
-b(this)g(assumption)f(is)h(not)g(v)-5 b(alid,)36 b(then)f(the)h(output)
-f(error)e(estimates)h(ma)n(y)g(b)r(e)h(biased.)58 b(In)427
-4765 y(addition,)31 b(note)f(that)h(the)f(statistical)g(errors)e(on)i
-(neigh)n(b)r(ouring)f(output)h(data)g(v)-5 b(alues)30
-b(\(as)g(w)n(ell)g(as)f(the)427 4864 y(estimates)j(of)f(those)g
-(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g(if)h(the)g
-(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427 4964
-y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h(sub-pixel)g
-(in)n(terp)r(olation)e(sc)n(hemes)h(emplo)n(y)n(ed.)427
-5083 y(If)34 b(the)h(AST)p Ft(__)p Fk(USEV)-9 b(AR)33
-b(\015ag)g(is)h(not)f(set,)j(no)d(output)i(v)-5 b(ariance)32
-b(estimates)h(will)h(b)r(e)h(calculated)e(and)427 5183
-y(this)28 b(arra)n(y)d(will)j(not)g(b)r(e)g(used.)37
-b(A)28 b(dumm)n(y)f(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)f(ma)n
-(y)g(then)j(b)r(e)f(supplied.)259 5321 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 5421
-y Fk(The)c(global)e(status.)0 5593 y Fc(Returned)32 b(V)-8
-b(alue:)p eop end
-%%Page: 320 330
-TeXDict begin 320 329 bop 0 52 a FG(320)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(AST)p
-Ft(_)p Fc(RESAMPLE)p Fm(<)p Fc(X)p Fm(>)g Fc(=)h(INTEGER)427
-451 y Fk(The)h(n)n(um)n(b)r(er)f(of)g(output)h(pixels)g(for)f(whic)n(h)
-g(no)g(v)-5 b(alid)33 b(resampled)e(v)-5 b(alue)33 b(could)f(b)r(e)h
-(obtained.)51 b(Th)n(us,)427 551 y(in)33 b(the)g(absence)f(of)h(an)n(y)
-f(error,)g(a)h(returned)f(v)-5 b(alue)33 b(of)f(zero)g(indicates)h
-(that)g(all)f(the)h(required)f(output)427 650 y(pixels)f(receiv)n(ed)f
-(v)-5 b(alid)31 b(resampled)f(data)h(v)-5 b(alues)30
-b(\(and)h(v)-5 b(ariances\).)46 b(See)31 b(the)h(BAD)n(V)-9
-b(AL)31 b(and)g(FLA)n(GS)427 750 y(argumen)n(ts.)0 926
-y Fc(Notes:)340 1224 y Fj(\017)45 b Fk(A)27 b(v)-5 b(alue)25
-b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g(function)h(is)f(in)
-n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)f(status)h(set,)h(or)427
-1323 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)-2
-1500 y Fc(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 1646
-y Fk(T)-7 b(o)19 b(select)g(the)g(appropriate)f(resampling)g(function,)
-j(y)n(ou)e(should)f(replace)h Fm(<)p Fk(X)p Fm(>)f Fk(in)i(the)f
-(generic)f(function)i(name)227 1746 y(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)i Fk(with)i(a)f(1-)f(or)g(2-c)n(haracter)f(data)i(t)
-n(yp)r(e)g(co)r(de,)h(so)f(as)f(to)h(matc)n(h)g(the)h(n)n(umerical)e(t)
-n(yp)r(e)227 1845 y Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)27 b
-Fk(of)h(the)g(data)f(y)n(ou)g(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)
-340 1996 y Fj(\017)45 b Fk(D:)28 b(DOUBLE)g(PRECISION)340
-2137 y Fj(\017)45 b Fk(R:)28 b(REAL)340 2277 y Fj(\017)45
-b Fk(I:)28 b(INTEGER)340 2417 y Fj(\017)45 b Fk(UI:)28
-b(INTEGER)f(\(treated)h(as)f(unsigned\))340 2557 y Fj(\017)45
-b Fk(S:)28 b(INTEGER)p Fj(\003)p Fk(2)e(\(short)h(in)n(teger\))340
-2698 y Fj(\017)45 b Fk(US:)28 b(INTEGER)p Fj(\003)p Fk(2)f(\(short)g
-(in)n(teger,)f(treated)i(as)f(unsigned\))340 2838 y Fj(\017)45
-b Fk(B:)28 b(BYTE)f(\(treated)h(as)e(signed\))340 2978
-y Fj(\017)45 b Fk(UB:)28 b(BYTE)f(\(treated)h(as)f(unsigned\))227
-3155 y(F)-7 b(or)33 b(example,)i(AST)p Ft(_)p Fk(RESAMPLED)e(w)n(ould)g
-(b)r(e)h(used)f(to)h(pro)r(cess)e(DOUBLE)h(PRECISION)g(data,)h(while)
-227 3254 y(AST)p Ft(_)p Fk(RESAMPLES)23 b(w)n(ould)g(b)r(e)h(used)f(to)
-g(pro)r(cess)g(short)f(in)n(teger)h(data)g(\(stored)g(in)g(an)h
-(INTEGER)p Fj(\003)p Fk(2)e(arra)n(y\),)227 3354 y(etc.)227
-3486 y(F)-7 b(or)32 b(compatibilit)n(y)h(with)g(other)f(Starlink)g
-(facilities,)i(the)f(co)r(des)g(W)g(and)f(UW)h(are)f(pro)n(vided)g(as)g
-(synon)n(yms)227 3585 y(for)27 b(S)h(and)g(US)g(resp)r(ectiv)n(ely)e
-(\(but)j(only)e(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)h
-(AST\).)-2 3750 y Fc(Sub-Pixel)k(In)m(terp)s(olation)f(Sc)m(hemes)n(:)
-227 3896 y Fk(There)d(is)f(no)h(suc)n(h)f(thing)h(as)g(a)f(p)r(erfect)h
-(sub-pixel)g(in)n(terp)r(olation)f(sc)n(heme)g(and,)h(in)g(practice,)f
-(all)h(resampling)227 3995 y(will)34 b(result)e(in)i(some)e
-(degradation)f(of)i(gridded)g(data.)52 b(A)34 b(range)d(of)i(sc)n
-(hemes)g(is)f(therefore)h(pro)n(vided,)g(from)227 4095
-y(whic)n(h)28 b(y)n(ou)f(can)g(c)n(ho)r(ose)f(the)i(one)f(whic)n(h)h(b)
-r(est)g(suits)g(y)n(our)e(needs.)227 4227 y(In)h(general,)e(a)g
-(balance)h(m)n(ust)g(b)r(e)g(struc)n(k)f(b)r(et)n(w)n(een)i(sc)n(hemes)
-e(whic)n(h)h(tend)g(to)g(degrade)f(sharp)g(features)h(in)g(the)227
-4326 y(data)d(b)n(y)g(smo)r(othing)g(them,)i(and)f(those)f(whic)n(h)g
-(attempt)h(to)g(preserv)n(e)d(sharp)i(features.)35 b(The)24
-b(latter)f(will)g(often)227 4426 y(tend)32 b(to)g(in)n(tro)r(duce)f(un)
-n(w)n(an)n(ted)g(oscillations,)g(t)n(ypically)g(visible)g(as)g
-Ft(")p Fk(ringing)p Ft(")f Fk(around)g(sharp)h(features)g(and)227
-4526 y(edges,)j(esp)r(ecially)f(if)g(the)h(data)e(are)g(under-sampled)h
-(\(i.e.)54 b(if)33 b(the)h(sharp)r(est)e(features)h(are)f(less)g(than)i
-(ab)r(out)227 4625 y(t)n(w)n(o)27 b(pixels)h(across\).)36
-b(In)28 b(practice,)f(a)g(go)r(o)r(d)h(in)n(terp)r(olation)e(sc)n(heme)
-i(is)g(lik)n(ely)f(to)h(b)r(e)g(a)f(compromise)g(and)g(ma)n(y)227
-4725 y(exhibit)h(some)f(asp)r(ects)h(of)f(b)r(oth)h(these)g(features.)
-227 4857 y(F)-7 b(or)31 b(under-sampled)g(data,)h(some)f(in)n(terp)r
-(olation)g(sc)n(hemes)f(ma)n(y)h(app)r(ear)g(to)g(preserv)n(e)f(data)h
-(resolution)g(b)r(e-)227 4957 y(cause)25 b(they)h(transform)e(single)h
-(input)h(pixels)g(in)n(to)f(single)g(output)h(pixels,)f(rather)g(than)g
-(spreading)g(their)g(data)227 5056 y(b)r(et)n(w)n(een)j(sev)n(eral)e
-(output)j(pixels.)38 b(While)28 b(this)h(ma)n(y)e(lo)r(ok)g(b)r(etter)i
-(cosmetically)-7 b(,)27 b(it)h(can)g(result)g(in)g(a)g(geomet-)227
-5156 y(rical)e(shift)h(of)g(sharp)e(features)h(in)h(the)g(data.)36
-b(Y)-7 b(ou)26 b(should)g(b)r(ew)n(are)g(of)g(this)h(if)g(y)n(ou)f
-(plan)g(to)h(use)f(suc)n(h)g(features)227 5255 y(\(e.g.\))37
-b(for)27 b(image)g(alignmen)n(t.)227 5387 y(The)j(follo)n(wing)f(are)h
-(t)n(w)n(o)f(easy-to-use)f(sub-pixel)i(in)n(terp)r(olation)f(sc)n
-(hemes)g(whic)n(h)h(are)g(generally)e(applicable.)227
-5487 y(They)k(are)f(selected)h(b)n(y)g(supplying)g(the)g(appropriate)e
-(v)-5 b(alue)32 b(\(de\014ned)h(in)f(the)g(AST)p Ft(_)p
-Fk(P)-7 b(AR)32 b(include)h(\014le\))f(via)227 5587 y(the)c(INTERP)f
-(argumen)n(t.)36 b(In)28 b(these)f(cases,)g(the)h(FINTERP)f(and)h(P)-7
-b(ARAMS)28 b(argumen)n(ts)e(are)h(not)g(used:)p eop end
-%%Page: 321 331
-TeXDict begin 321 330 bop 3643 52 a FG(321)340 351 y
-Fj(\017)45 b Fk(AST)p Ft(__)p Fk(NEAREST:)24 b(This)h(is)f(the)h
-(simplest)g(p)r(ossible)f(sc)n(heme,)h(in)g(whic)n(h)f(the)h(v)-5
-b(alue)25 b(of)f(the)h(input)h(pixel)427 451 y(with)j(the)g(nearest)f
-(cen)n(tre)g(to)h(the)g(in)n(terp)r(olation)f(p)r(oin)n(t)g(is)h(used.)
-40 b(This)29 b(is)f(v)n(ery)g(quic)n(k)g(to)g(execute)h(and)427
-551 y(will)38 b(preserv)n(e)d(single-pixel)h(features)h(in)g(the)h
-(data,)h(but)f(ma)n(y)e(displace)h(them)h(b)n(y)f(up)g(to)g(half)h
-(their)427 650 y(width)28 b(along)e(eac)n(h)h(dimension.)36
-b(It)28 b(often)g(giv)n(es)e(a)g(go)r(o)r(d)h(cosmetic)g(result,)g(so)g
-(is)g(useful)g(for)g(quic)n(k-lo)r(ok)427 750 y(pro)r(cessing,)f(but)j
-(is)e(unsuitable)h(if)g(accurate)e(geometrical)g(transformation)g(is)i
-(required.)340 868 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(LINEAR:)40
-b(This)h(is)f(the)h(default)g(sc)n(heme,)j(whic)n(h)c(uses)g(linear)g
-(in)n(terp)r(olation)g(b)r(et)n(w)n(een)g(the)427 968
-y(nearest)35 b(neigh)n(b)r(ouring)f(pixels)i(in)g(the)g(input)g(grid)f
-(\(there)h(are)e(t)n(w)n(o)h(neigh)n(b)r(ours)g(in)g(one)h(dimension,)
-427 1068 y(four)h(neigh)n(b)r(ours)f(in)i(t)n(w)n(o)f(dimensions,)i
-(eigh)n(t)e(in)h(three)f(dimensions,)i(etc.\).)67 b(It)38
-b(is)f(sup)r(erior)f(to)h(the)427 1167 y(nearest-pixel)25
-b(sc)n(heme)h(\(ab)r(o)n(v)n(e\))g(in)g(not)g(displacing)g(features)g
-(in)g(the)h(data,)f(y)n(et)g(it)h(still)f(executes)g(fairly)427
-1267 y(rapidly)-7 b(.)74 b(It)40 b(is)g(generally)e(a)i(safe)f(c)n
-(hoice)g(if)i(y)n(ou)e(do)h(not)g(ha)n(v)n(e)e(an)n(y)h(particular)g
-(reason)f(to)i(fa)n(v)n(our)427 1367 y(another)g(sc)n(heme,)k(since)c
-(it)h(cannot)g(in)n(tro)r(duce)f(oscillations.)75 b(Ho)n(w)n(ev)n(er,)
-42 b(it)f(do)r(es)g(in)n(tro)r(duce)f(some)427 1466 y(spatial)28
-b(smo)r(othing)f(whic)n(h)i(v)-5 b(aries)27 b(according)f(to)i(the)h
-(distance)f(of)g(the)h(in)n(terp)r(olation)e(p)r(oin)n(t)h(from)g(the)
-427 1566 y(neigh)n(b)r(ouring)g(pixels.)39 b(This)29
-b(can)f(degrade)f(the)i(shap)r(e)f(of)h(sharp)e(features)h(in)h(the)g
-(data)f(in)h(a)f(p)r(osition-)427 1665 y(dep)r(enden)n(t)f(w)n(a)n(y)-7
-b(.)35 b(It)27 b(ma)n(y)e(also)g(sho)n(w)h(in)g(the)h(output)g(v)-5
-b(ariance)24 b(grid)i(\(if)h(used\))f(as)g(a)g(pattern)g(of)g(strip)r
-(es)427 1765 y(or)h(fringes.)227 1913 y(An)35 b(alternativ)n(e)e(set)h
-(of)h(in)n(terp)r(olation)e(sc)n(hemes)h(is)g(based)g(on)g(forming)g
-(the)g(in)n(terp)r(olated)g(v)-5 b(alue)34 b(from)g(the)227
-2012 y(w)n(eigh)n(ted)g(sum)h(of)f(a)g(set)h(of)f(surrounding)f(pixel)i
-(v)-5 b(alues)34 b(\(not)h(necessarily)e(just)i(the)g(nearest)e(neigh)n
-(b)r(ours\).)227 2112 y(This)27 b(approac)n(h)e(has)h(its)h(origins)e
-(in)i(the)g(theory)f(of)h(digital)f(\014ltering,)h(in)f(whic)n(h)h(in)n
-(terp)r(olated)f(v)-5 b(alues)27 b(are)e(ob-)227 2212
-y(tained)f(b)n(y)g(conceptually)f(passing)g(the)h(sampled)f(data)h
-(\(represen)n(ted)e(b)n(y)i(a)f(grid)g(of)h(delta)g(functions\))g
-(through)227 2311 y(a)30 b(linear)g(\014lter)g(whic)n(h)g(implemen)n
-(ts)h(a)f(con)n(v)n(olution.)43 b(Because)29 b(the)i(con)n(v)n(olution)
-e(k)n(ernel)g(is)h(con)n(tin)n(uous,)g(the)227 2411 y(con)n(v)n
-(olution)23 b(yields)h(a)g(con)n(tin)n(uous)f(function)h(whic)n(h)g(ma)
-n(y)g(then)g(b)r(e)h(ev)-5 b(aluated)24 b(at)g(fractional)f(pixel)h(p)r
-(ositions.)227 2511 y(The)33 b(\(p)r(ossibly)g(m)n(ulti-dimensional\))f
-(k)n(ernel)g(is)h(usually)f(regarded)f(as)h Ft(")p Fk(separable)p
-Ft(")e Fk(and)i(formed)h(from)f(the)227 2610 y(pro)r(duct)22
-b(of)g(a)f(set)h(of)g(iden)n(tical)g(1-dimensional)e(k)n(ernel)h
-(functions,)i(ev)-5 b(aluated)22 b(along)f(eac)n(h)g(dimension.)35
-b(Di\013er-)227 2710 y(en)n(t)29 b(in)n(terp)r(olation)f(sc)n(hemes)h
-(are)e(then)j(distinguished)f(b)n(y)f(the)i(c)n(hoice)e(of)h(this)g
-(1-dimensional)e(in)n(terp)r(olation)227 2809 y(k)n(ernel.)36
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(surrounding)e(pixels)h(whic)n(h)h
-(con)n(tribute)f(to)h(the)g(result)f(ma)n(y)g(also)f(b)r(e)i(v)-5
-b(aried.)227 2927 y(F)e(rom)29 b(a)f(practical)g(standp)r(oin)n(t,)h
-(it)h(is)f(useful)g(to)g(divide)g(the)g(w)n(eigh)n(ted)f(sum)h(of)g
-(pixel)g(v)-5 b(alues)29 b(b)n(y)f(the)i(sum)f(of)227
-3027 y(the)g(w)n(eigh)n(ts)e(when)h(determining)g(the)h(in)n(terp)r
-(olated)e(v)-5 b(alue.)38 b(Strictly)-7 b(,)29 b(this)f(means)g(that)g
-(a)g(true)g(con)n(v)n(olution)227 3126 y(is)e(no)f(longer)g(b)r(eing)h
-(p)r(erformed.)36 b(Ho)n(w)n(ev)n(er,)24 b(the)i(distinction)g(is)g
-(rarely)e(imp)r(ortan)n(t)h(in)h(practice)f(b)r(ecause)h(\(for)227
-3226 y(sligh)n(tly)e(subtle)h(reasons\))d(the)j(sum)f(of)g(w)n(eigh)n
-(ts)g(is)g(alw)n(a)n(ys)e(appro)n(ximately)h(constan)n(t)g(for)h(go)r
-(o)r(d)f(in)n(terp)r(olation)227 3325 y(k)n(ernels.)51
-b(The)33 b(adv)-5 b(an)n(tage)31 b(of)i(this)g(tec)n(hnique,)h(whic)n
-(h)f(is)f(used)h(here,)h(is)e(that)h(it)g(can)g(easily)f(accommo)r
-(date)227 3425 y(missing)27 b(data)g(and)h(tends)g(to)f(minimise)h(un)n
-(w)n(an)n(ted)f(oscillations)f(at)i(the)g(edges)f(of)g(the)h(data)f
-(grid.)227 3543 y(In)d(the)g(follo)n(wing)e(sc)n(hemes,)h(whic)n(h)h
-(are)e(based)h(on)g(a)g(1-dimensional)f(in)n(terp)r(olation)g(k)n
-(ernel,)i(the)f(\014rst)g(elemen)n(t)227 3642 y(of)j(the)g(P)-7
-b(ARAMS)26 b(arra)n(y)e(should)h(b)r(e)h(used)g(to)f(sp)r(ecify)h(ho)n
-(w)f(man)n(y)h(pixels)f(are)g(to)g(con)n(tribute)h(to)f(the)h(in)n
-(terp)r(o-)227 3742 y(lated)31 b(result)g(on)f(either)h(side)g(of)f
-(the)i(in)n(terp)r(olation)e(p)r(oin)n(t)h(in)g(eac)n(h)f(dimension)g
-(\(the)i(nearest)e(in)n(teger)g(v)-5 b(alue)227 3841
-y(is)27 b(used\).)36 b(Execution)26 b(time)h(increases)e(rapidly)h
-(with)h(this)f(n)n(um)n(b)r(er.)36 b(T)n(ypically)-7
-b(,)26 b(a)g(v)-5 b(alue)27 b(of)f(2)g(is)g(appropriate)227
-3941 y(and)k(the)h(minim)n(um)f(v)-5 b(alue)30 b(used)g(will)g(b)r(e)h
-(1)f(\(i.e.)44 b(t)n(w)n(o)29 b(pixels)h(altogether,)g(one)f(on)h
-(either)g(side)g(of)g(the)g(in)n(ter-)227 4041 y(p)r(olation)g(p)r(oin)
-n(t\).)44 b(A)30 b(v)-5 b(alue)30 b(of)f(zero)g(or)g(less)g(ma)n(y)h(b)
-r(e)g(giv)n(en)f(for)g(P)-7 b(ARAMS\(1\))31 b(to)e(indicate)h(that)g(a)
-g(suitable)227 4140 y(n)n(um)n(b)r(er)e(of)f(pixels)h(should)f(b)r(e)h
-(calculated)f(automatically)-7 b(.)227 4258 y(In)28 b(eac)n(h)f(of)g
-(these)h(cases,)f(the)h(FINTERP)f(argumen)n(t)f(is)i(not)f(used:)340
-4497 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SINC:)27 b(This)f(sc)n(heme)g
-(uses)g(a)g(sinc\(pi)p Fj(\003)p Fk(x\))g(k)n(ernel,)g(where)g(x)g(is)g
-(the)h(pixel)f(o\013set)h(from)f(the)g(in)n(ter-)427
-4597 y(p)r(olation)j(p)r(oin)n(t)h(and)g(sinc\(z\)=sin\(z\)/z.)42
-b(This)30 b(sometimes)f(features)g(as)g(an)g Ft(")p Fk(optimal)p
-Ft(")f Fk(in)n(terp)r(olation)427 4697 y(k)n(ernel)35
-b(in)h(b)r(o)r(oks)f(on)g(image)g(pro)r(cessing.)59 b(Its)36
-b(supp)r(osed)f(optimalit)n(y)h(dep)r(ends)g(on)f(the)h(assumption)427
-4796 y(that)d(the)g(data)e(are)h(band-limited)g(\(i.e.)52
-b(ha)n(v)n(e)31 b(no)h(spatial)g(frequencies)g(ab)r(o)n(v)n(e)f(a)h
-(certain)f(v)-5 b(alue\))33 b(and)427 4896 y(are)e(adequately)g
-(sampled.)49 b(In)32 b(practice,)g(astronomical)d(data)j(rarely)e(meet)
-i(these)f(requiremen)n(ts.)48 b(In)427 4996 y(addition,)35
-b(high)e(spatial)g(frequencies)f(are)h(often)g(presen)n(t)g(due)g
-(\(e.g.\))54 b(to)33 b(image)g(defects)g(and)g(cosmic)427
-5095 y(ra)n(y)22 b(ev)n(en)n(ts.)35 b(Consequen)n(tly)-7
-b(,)24 b(substan)n(tial)e(ringing)h(can)g(b)r(e)h(exp)r(erienced)f
-(with)h(this)f(k)n(ernel.)35 b(The)24 b(k)n(ernel)427
-5195 y(also)33 b(deca)n(ys)g(slo)n(wly)g(with)i(distance,)g(so)e(that)i
-(man)n(y)e(surrounding)g(pixels)h(are)f(required,)h(leading)g(to)427
-5295 y(p)r(o)r(or)24 b(p)r(erformance.)35 b(Abruptly)25
-b(truncating)g(it,)g(b)n(y)g(using)f(only)g(a)h(few)g(neigh)n(b)r
-(ouring)e(pixels,)i(impro)n(v)n(es)427 5394 y(p)r(erformance)37
-b(and)g(ma)n(y)g(reduce)h(ringing)e(\(if)j(P)-7 b(ARAMS\(1\))38
-b(is)g(set)g(to)f(zero,)i(then)g(only)e(t)n(w)n(o)g(pixels)427
-5494 y(will)31 b(b)r(e)g(used)g(on)f(either)g(side\).)46
-b(Ho)n(w)n(ev)n(er,)30 b(a)g(more)g(gradual)f(truncation,)i(as)f
-(implemen)n(ted)h(b)n(y)f(other)427 5593 y(k)n(ernels,)c(is)g
-(generally)f(to)h(b)r(e)g(preferred.)36 b(This)26 b(k)n(ernel)f(is)i
-(pro)n(vided)e(mainly)h(so)g(that)g(y)n(ou)g(can)g(con)n(vince)427
-5693 y(y)n(ourself)h(not)g(to)h(use)f(it!)p eop end
-%%Page: 322 332
-TeXDict begin 322 331 bop 0 52 a FG(322)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(AST)p Ft(__)p Fk(SINCSINC:)25 b(This)g(sc)n(heme)g(uses)f(an)h
-(impro)n(v)n(ed)e(k)n(ernel,)i(of)g(the)g(form)f(sinc\(pi)p
-Fj(\003)p Fk(x\).sinc\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\),)427 451 y(with)32 b(k)f(a)f(constan)n(t,)h(out)g(to)g(the)g(p)r
-(oin)n(t)g(where)g(sinc\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\))f(go)r(es)g(to)h(zero,)f(and)h(zero)f(b)r(ey)n(ond.)47
-b(The)427 551 y(second)32 b(sinc\(\))i(factor)e(pro)n(vides)f(an)i
-Ft(")p Fk(en)n(v)n(elop)r(e)p Ft(")e Fk(whic)n(h)i(gradually)e(rolls)h
-(o\013)h(the)g(normal)f(sinc\(pi)p Fj(\003)p Fk(x\))427
-650 y(k)n(ernel)27 b(at)g(large)e(o\013sets.)37 b(The)27
-b(width)h(of)f(this)g(en)n(v)n(elop)r(e)g(is)g(sp)r(eci\014ed)g(b)n(y)g
-(giving)f(the)i(n)n(um)n(b)r(er)f(of)g(pixels)427 750
-y(o\013set)j(at)f(whic)n(h)h(it)g(go)r(es)e(to)i(zero)e(b)n(y)h(means)g
-(of)h(the)g(P)-7 b(ARAMS\(2\))30 b(v)-5 b(alue,)30 b(whic)n(h)f(should)
-h(b)r(e)g(at)f(least)427 849 y(1.0)34 b(\(in)i(addition,)g(setting)f(P)
--7 b(ARAMS\(1\))36 b(to)e(zero)g(will)h(select)g(the)g(n)n(um)n(b)r(er)
-g(of)g(con)n(tributing)f(pixels)427 949 y(so)g(as)g(to)g(utilise)g(the)
-h(full)g(width)g(of)g(the)f(k)n(ernel,)h(out)g(to)f(where)g(it)h(reac)n
-(hes)d(zero\).)57 b(The)34 b(case)f(giv)n(en)427 1049
-y(b)n(y)i(P)-7 b(ARAMS\(1\)=2,)37 b(P)-7 b(ARAMS\(2\)=2)35
-b(is)g(t)n(ypically)g(a)g(go)r(o)r(d)f(c)n(hoice)h(and)g(is)g
-(sometimes)g(kno)n(wn)f(as)427 1148 y(the)i(Lanczos)e(k)n(ernel.)60
-b(This)35 b(is)g(a)g(v)-5 b(aluable)35 b(general-purp)r(ose)e(in)n
-(terp)r(olation)i(sc)n(heme,)i(in)n(termediate)427 1248
-y(in)d(its)f(visual)g(e\013ect)h(on)f(images)f(b)r(et)n(w)n(een)h(the)h
-(AST)p Ft(__)p Fk(NEAREST)e(and)h(AST)p Ft(__)p Fk(LINEAR)g(sc)n
-(hemes.)427 1348 y(Although)i(the)f(k)n(ernel)f(is)h(sligh)n(tly)g
-(oscillatory)-7 b(,)34 b(ringing)f(is)h(adequately)f(suppressed)h(if)g
-(the)h(data)f(are)427 1447 y(w)n(ell)28 b(sampled.)340
-1572 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SINCCOS:)38 b(This)g(sc)n(heme)
-g(uses)g(a)g(k)n(ernel)f(of)h(the)h(form)f(sinc\(pi)p
-Fj(\003)p Fk(x\).cos\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\),)h(with)g(k)f(a)427 1672 y(constan)n(t,)32 b(out)f(to)g(the)h(p)
-r(oin)n(t)f(where)g(cos\(k)p Fj(\003)p Fk(pi)p Fj(\003)p
-Fk(x\))f(go)r(es)h(to)g(zero,)g(and)g(zero)f(b)r(ey)n(ond.)48
-b(As)31 b(ab)r(o)n(v)n(e,)g(the)427 1771 y(cos\(\))h(factor)f(pro)n
-(vides)f(an)h(en)n(v)n(elop)r(e)g(whic)n(h)h(gradually)e(rolls)g(o\013)
-i(the)g(sinc\(\))g(k)n(ernel)f(at)h(large)e(o\013sets.)427
-1871 y(The)e(width)h(of)e(this)h(en)n(v)n(elop)r(e)f(is)h(sp)r
-(eci\014ed)g(b)n(y)f(giving)g(the)h(n)n(um)n(b)r(er)g(of)g(pixels)f
-(o\013set)h(at)g(whic)n(h)f(it)i(go)r(es)427 1971 y(to)d(zero)f(b)n(y)g
-(means)g(of)h(the)g(P)-7 b(ARAMS\(2\))27 b(v)-5 b(alue,)26
-b(whic)n(h)g(should)f(b)r(e)h(at)g(least)f(1.0)g(\(in)i(addition,)f
-(setting)427 2070 y(P)-7 b(ARAMS\(1\))38 b(to)f(zero)f(will)i(select)f
-(the)g(n)n(um)n(b)r(er)g(of)g(con)n(tributing)g(pixels)g(so)f(as)h(to)g
-(utilise)g(the)h(full)427 2170 y(width)33 b(of)f(the)g(k)n(ernel,)g
-(out)g(to)g(where)g(it)g(reac)n(hes)e(zero\).)50 b(This)31
-b(sc)n(heme)h(giv)n(es)f(similar)g(results)g(to)h(the)427
-2270 y(AST)p Ft(__)p Fk(SINCSINC)c(sc)n(heme,)f(whic)n(h)h(it)g(resem)n
-(bles.)340 2395 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SINCGA)n(USS:)35
-b(This)f(sc)n(heme)f(uses)h(a)g(k)n(ernel)f(of)h(the)g(form)g(sinc\(pi)
-p Fj(\003)p Fk(x\).exp\(-k)p Fj(\003)p Fk(x)p Fj(\003)p
-Fk(x\),)g(with)h(k)427 2494 y(a)c(p)r(ositiv)n(e)g(constan)n(t.)48
-b(Here,)32 b(the)g(sinc\(\))g(k)n(ernel)e(is)h(rolled)g(o\013)g(using)g
-(a)g(Gaussian)g(en)n(v)n(elop)r(e)f(whic)n(h)i(is)427
-2594 y(sp)r(eci\014ed)i(b)n(y)e(giving)h(its)g(full-width)h(at)f
-(half-maxim)n(um)f(\(FWHM\))j(b)n(y)e(means)f(of)i(the)f(P)-7
-b(ARAMS\(2\))427 2694 y(v)i(alue,)32 b(whic)n(h)f(should)g(b)r(e)g(at)g
-(least)f(0.1)h(\(in)g(addition,)h(setting)f(P)-7 b(ARAMS\(1\))31
-b(to)g(zero)f(will)h(select)g(the)427 2793 y(n)n(um)n(b)r(er)22
-b(of)f(con)n(tributing)g(pixels)g(so)g(as)g(to)h(utilise)f(the)h(width)
-h(of)e(the)h(k)n(ernel)f(out)g(to)h(where)f(the)h(en)n(v)n(elop)r(e)427
-2893 y(declines)k(to)f(1\045)h(of)f(its)h(maxim)n(um)g(v)-5
-b(alue\).)36 b(On)25 b(astronomical)f(images)h(and)g(sp)r(ectra,)h(go)r
-(o)r(d)f(results)g(are)427 2992 y(often)36 b(obtained)g(b)n(y)g(appro)n
-(ximately)e(matc)n(hing)h(the)h(FWHM)h(of)f(the)g(en)n(v)n(elop)r(e)f
-(function,)k(giv)n(en)c(b)n(y)427 3092 y(P)-7 b(ARAMS\(2\),)31
-b(to)e(the)g(p)r(oin)n(t)h(spread)e(function)i(of)f(the)h(input)g
-(data.)41 b(Ho)n(w)n(ev)n(er,)28 b(there)h(do)r(es)g(not)g(seem)427
-3192 y(to)f(b)r(e)g(an)n(y)f(theoretical)f(reason)g(for)h(this.)340
-3317 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(SOMB:)24 b(This)h(sc)n(heme)g
-(uses)f(a)g(som)n(b\(pi)p Fj(\003)p Fk(x\))h(k)n(ernel)f(\(a)g
-Ft(")p Fk(som)n(brero)p Ft(")e Fk(function\),)k(where)f(x)f(is)h(the)
-427 3416 y(pixel)32 b(o\013set)g(from)f(the)i(in)n(terp)r(olation)e(p)r
-(oin)n(t)h(and)f(som)n(b\(z\)=2)p Fj(\003)p Fk(J1\(z\)/z)f(\(J1)h(is)h
-(a)f(Bessel)g(function)i(of)427 3516 y(the)24 b(\014rst)g(kind)f(of)h
-(order)e(1\).)36 b(It)24 b(is)f(similar)g(to)g(the)h(AST)p
-Ft(__)p Fk(SINC)g(k)n(ernel,)g(and)f(has)g(the)h(same)f(parameter)427
-3616 y(usage.)340 3741 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(SOMBCOS:)30 b(This)g(sc)n(heme)g(uses)g(a)g(k)n(ernel)f(of)i(the)g
-(form)f(som)n(b\(pi)p Fj(\003)p Fk(x\).cos\(k)p Fj(\003)p
-Fk(pi)p Fj(\003)p Fk(x\),)f(with)i(k)f(a)427 3840 y(constan)n(t,)g(out)
-g(to)g(the)g(p)r(oin)n(t)g(where)f(cos\(k)p Fj(\003)p
-Fk(pi)p Fj(\003)p Fk(x\))g(go)r(es)g(to)g(zero,)h(and)g(zero)e(b)r(ey)n
-(ond.)44 b(It)30 b(is)g(similar)f(to)427 3940 y(the)f(AST)p
-Ft(__)p Fk(SINCCOS)f(k)n(ernel,)g(and)h(has)f(the)h(same)f(parameter)f
-(usage.)227 4094 y(In)i(addition,)g(the)g(follo)n(wing)e(sc)n(hemes)h
-(are)g(pro)n(vided)f(whic)n(h)i(are)e(not)i(based)f(on)g(a)g
-(1-dimensional)g(k)n(ernel:)340 4343 y Fj(\017)45 b Fk(AST)p
-Ft(__)p Fk(BLOCKA)-9 b(VE:)20 b(This)h(sc)n(heme)g(simply)g(tak)n(es)f
-(an)h(a)n(v)n(erage)d(of)j(all)g(the)h(pixels)f(on)f(the)i(input)g
-(grid)e(in)427 4443 y(a)k(cub)r(e)h(cen)n(tred)f(on)g(the)h(in)n(terp)r
-(olation)f(p)r(oin)n(t.)36 b(The)24 b(n)n(um)n(b)r(er)g(of)g(pixels)h
-(in)f(the)h(cub)r(e)g(is)f(determined)h(b)n(y)427 4543
-y(the)g(v)-5 b(alue)25 b(of)g(the)g(\014rst)g(elemen)n(t)g(of)f(the)h
-(P)-7 b(ARAMS)26 b(arra)n(y)-7 b(,)23 b(whic)n(h)i(giv)n(es)e(the)i(n)n
-(um)n(b)r(er)g(of)g(pixels)f(in)h(eac)n(h)427 4642 y(dimension)e(on)f
-(either)h(side)f(of)h(the)g(cen)n(tral)f(p)r(oin)n(t.)35
-b(Hence)23 b(a)f(blo)r(c)n(k)h(of)f(\(2)h Fj(\003)f Fk(P)-7
-b(ARAMS\(1\)\))p Fj(\003\003)p Fk(NDIM)p Ft(_)p Fk(IN)427
-4742 y(pixels)31 b(in)g(the)g(input)g(grid)f(will)h(b)r(e)g(examined)f
-(to)h(determine)g(the)g(v)-5 b(alue)30 b(of)h(the)g(output)g(pixel.)46
-b(If)31 b(the)427 4841 y(v)-5 b(ariance)32 b(is)h(not)g(b)r(eing)g
-(used)g(\(USEV)-9 b(AR)33 b(=)g(.F)-9 b(ALSE.\))33 b(then)h(all)e(v)-5
-b(alid)33 b(pixels)g(in)g(this)h(cub)r(e)f(will)g(b)r(e)427
-4941 y(a)n(v)n(eraged)22 b(in)i(to)g(the)g(result)g(with)g(equal)g(w)n
-(eigh)n(t.)35 b(If)24 b(v)-5 b(ariances)23 b(are)g(b)r(eing)h(used,)h
-(then)g(eac)n(h)e(input)i(pixel)427 5041 y(will)35 b(b)r(e)g(w)n(eigh)n
-(ted)e(prop)r(ortionally)g(to)h(the)h(recipro)r(cal)e(of)h(its)h(v)-5
-b(ariance;)37 b(an)n(y)c(pixel)i(without)g(a)f(v)-5 b(alid)427
-5140 y(v)g(ariance)33 b(will)h(b)r(e)h(discarded.)55
-b(This)34 b(sc)n(heme)g(is)f(suitable)h(where)g(the)g(output)h(grid)e
-(is)h(m)n(uc)n(h)g(coarser)427 5240 y(than)28 b(the)g(input)h(grid;)e
-(if)i(the)f(ratio)f(of)h(pixel)g(sizes)f(is)h(R)g(then)g(a)g(suitable)f
-(v)-5 b(alue)28 b(of)g(P)-7 b(ARAMS\(1\))28 b(ma)n(y)427
-5340 y(b)r(e)g(R/2.)227 5494 y(Finally)-7 b(,)33 b(supplying)e(the)h
-(follo)n(wing)f(v)-5 b(alues)31 b(for)g(INTERP)h(allo)n(ws)e(y)n(ou)h
-(to)g(implemen)n(t)h(y)n(our)f(o)n(wn)g(sub-pixel)227
-5593 y(in)n(terp)r(olation)f(sc)n(heme)g(b)n(y)g(means)g(of)h(y)n(our)e
-(o)n(wn)h(routine.)46 b(Y)-7 b(ou)30 b(should)h(supply)f(the)h(name)g
-(of)f(this)h(routine)227 5693 y(via)c(the)h(FINTERP)g(argumen)n(t:)p
-eop end
-%%Page: 323 333
-TeXDict begin 323 332 bop 3643 52 a FG(323)340 491 y
-Fj(\017)45 b Fk(AST)p Ft(__)p Fk(UKERN1:)33 b(In)22 b(this)g(sc)n
-(heme,)g(y)n(ou)f(supply)g(a)g(routine)h(to)f(ev)-5 b(aluate)21
-b(y)n(our)g(o)n(wn)f(1-dimensional)h(in-)427 591 y(terp)r(olation)g(k)n
-(ernel,)h(whic)n(h)g(is)g(then)g(used)g(to)f(p)r(erform)g(sub-pixel)h
-(in)n(terp)r(olation)f(\(as)g(describ)r(ed)h(ab)r(o)n(v)n(e\).)427
-690 y(The)29 b(routine)e(y)n(ou)h(supply)g(should)g(ha)n(v)n(e)f(the)i
-(same)e(in)n(terface)h(as)f(the)i(\014ctitious)f(AST)p
-Ft(_)p Fk(UKERN1)g(rou-)427 790 y(tine)33 b(\(q.v.\).)51
-b(In)33 b(addition,)g(a)f(v)-5 b(alue)32 b(should)g(b)r(e)h(giv)n(en)f
-(via)f(P)-7 b(ARAMS\(1\))33 b(to)f(sp)r(ecify)h(the)g(n)n(um)n(b)r(er)f
-(of)427 890 y(neigh)n(b)r(ouring)e(pixels)h(whic)n(h)h(are)e(to)h(con)n
-(tribute)g(to)g(eac)n(h)g(in)n(terp)r(olated)g(v)-5 b(alue)31
-b(\(in)h(the)f(same)g(w)n(a)n(y)f(as)427 989 y(for)d(the)h
-(pre-de\014ned)g(in)n(terp)r(olation)e(sc)n(hemes)h(describ)r(ed)h(ab)r
-(o)n(v)n(e\).)36 b(Other)27 b(elemen)n(ts)g(of)h(the)g(P)-7
-b(ARAMS)427 1089 y(arra)n(y)26 b(are)g(a)n(v)-5 b(ailable)26
-b(to)i(pass)f(v)-5 b(alues)27 b(to)g(y)n(our)g(in)n(terp)r(olation)f
-(routine.)340 1224 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(UINTERP:)39
-b(This)h(is)g(a)g(completely)g(general)e(sc)n(heme,)43
-b(in)d(whic)n(h)g(y)n(our)f(in)n(terp)r(olation)g(rou-)427
-1323 y(tine)f(has)f(access)g(to)g(all)g(of)h(the)g(input)g(data.)67
-b(This)37 b(allo)n(ws)f(y)n(ou)h(to)g(implemen)n(t)i(an)n(y)d(in)n
-(terp)r(olation)427 1423 y(algorithm)e(y)n(ou)h(c)n(ho)r(ose,)h(whic)n
-(h)f(could)g(\(for)g(example\))g(b)r(e)h(non-linear,)g(or)e(adaptiv)n
-(e.)59 b(In)36 b(this)f(case,)427 1522 y(the)27 b(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(functions)h(pla)n(y)g(no)g
-(role)g(in)g(the)h(sub-pixel)f(in)n(terp)r(olation)g(pro)r(cess)f(and)
-427 1622 y(simply)34 b(handle)g(the)g(geometrical)e(transformation)g
-(of)i(co)r(ordinates)f(and)g(other)g(housek)n(eeping.)55
-b(The)427 1722 y(routine)30 b(y)n(ou)f(supply)h(should)f(ha)n(v)n(e)g
-(the)h(same)g(in)n(terface)f(as)g(the)h(\014ctitious)h(AST)p
-Ft(_)p Fk(UINTERP)e(routine)427 1821 y(\(q.v.\).)50 b(In)32
-b(this)g(case,)g(the)g(P)-7 b(ARAMS)33 b(argumen)n(t)d(is)i(not)g(used)
-g(b)n(y)f(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p
-Fk(,)g(but)i(is)427 1921 y(a)n(v)-5 b(ailable)27 b(to)g(pass)g(v)-5
-b(alues)27 b(to)h(y)n(our)e(in)n(terp)r(olation)h(routine.)-2
-2086 y Fc(Con)m(trol)32 b(Flags)n(:)227 2232 y Fk(The)24
-b(follo)n(wing)f(\015ags)g(are)g(de\014ned)h(in)g(the)g(AST)p
-Ft(_)p Fk(P)-7 b(AR)24 b(include)g(\014le)g(and)g(ma)n(y)f(b)r(e)h
-(used)g(to)g(pro)n(vide)e(additional)227 2332 y(con)n(trol)29
-b(o)n(v)n(er)f(the)i(resampling)e(pro)r(cess.)43 b(Ha)n(ving)28
-b(selected)i(a)f(set)h(of)g(\015ags,)f(y)n(ou)g(should)h(supply)g(the)g
-(sum)g(of)227 2432 y(their)e(v)-5 b(alues)27 b(via)g(the)h(FLA)n(GS)g
-(argumen)n(t:)340 2698 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(NOBAD:)22 b(Indicates)g(that)h(an)n(y)e(output)i(arra)n(y)d(elemen)n
-(ts)i(for)f(whic)n(h)i(no)e(resampled)h(v)-5 b(alue)22
-b(could)427 2797 y(b)r(e)g(obtained)f(should)h(b)r(e)f(left)i(set)e(to)
-g(the)h(v)-5 b(alue)21 b(they)h(had)f(on)h(en)n(try)e(to)i(this)g
-(function.)35 b(If)22 b(this)g(\015ag)e(is)i(not)427
-2897 y(supplied,)34 b(suc)n(h)e(output)g(arra)n(y)e(elemen)n(ts)i(are)f
-(set)h(to)g(the)g(v)-5 b(alue)32 b(supplied)h(for)e(argumen)n(t)g(BAD)n
-(V)-9 b(AL.)427 2997 y(Note,)39 b(this)d(\015ag)g(cannot)g(b)r(e)g
-(used)g(in)h(conjunction)f(with)h(the)g(AST)p Ft(__)p
-Fk(CONSER)-9 b(VEFLUX)35 b(\015ag)h(\(an)427 3096 y(error)26
-b(will)i(b)r(e)g(rep)r(orted)f(if)h(b)r(oth)g(\015ags)e(are)h(sp)r
-(eci\014ed\).)340 3231 y Fj(\017)45 b Fk(AST)p Ft(__)p
-Fk(URESAMP1,)27 b(2,)g(3)g(&)h(4:)36 b(A)28 b(set)g(of)f(four)g
-(\015ags)g(whic)n(h)g(are)g(reserv)n(ed)f(for)h(y)n(our)f(o)n(wn)h
-(use.)37 b(They)427 3331 y(ma)n(y)e(b)r(e)h(used)f(to)g(pass)f(priv)-5
-b(ate)35 b(information)g(to)g(an)n(y)g(sub-pixel)g(in)n(terp)r(olation)
-f(routine)h(whic)n(h)g(y)n(ou)427 3430 y(implemen)n(t)28
-b(y)n(ourself.)36 b(They)28 b(are)e(ignored)h(b)n(y)g(all)g(the)h
-(pre-de\014ned)f(in)n(terp)r(olation)g(sc)n(hemes.)340
-3565 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(USEBAD:)33 b(Indicates)g(that)h
-(there)f(ma)n(y)f(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n
-(y\(s\))d(whic)n(h)i(m)n(ust)427 3664 y(b)r(e)26 b(recognised)d(b)n(y)i
-(comparing)e(with)j(the)f(v)-5 b(alue)25 b(giv)n(en)g(for)f(BAD)n(V)-9
-b(AL)26 b(and)e(propagated)g(to)h(the)g(output)427 3764
-y(arra)n(y\(s\).)41 b(If)30 b(this)g(\015ag)f(is)g(not)h(set,)g(all)f
-(input)h(v)-5 b(alues)30 b(are)e(treated)h(literally)g(and)h(the)g(BAD)
-n(V)-9 b(AL)30 b(v)-5 b(alue)427 3864 y(is)28 b(only)f(used)h(for)f
-(\015agging)f(output)i(arra)n(y)d(v)-5 b(alues.)340 3998
-y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(USEV)-9 b(AR:)25 b(Indicates)f(that)
-g(v)-5 b(ariance)23 b(information)h(should)g(b)r(e)h(pro)r(cessed)e(in)
-i(order)e(to)h(pro)n(vide)427 4098 y(estimates)k(of)g(the)h
-(statistical)e(error)g(asso)r(ciated)f(with)j(the)g(resampled)e(v)-5
-b(alues.)38 b(If)29 b(this)f(\015ag)f(is)h(not)h(set,)427
-4198 y(no)h(v)-5 b(ariance)29 b(pro)r(cessing)g(will)i(o)r(ccur)e(and)i
-(the)f(IN)p Ft(_)p Fk(V)-9 b(AR)31 b(and)f(OUT)p Ft(_)p
-Fk(V)-9 b(AR)30 b(arra)n(ys)e(will)j(not)f(b)r(e)h(used.)427
-4297 y(\(Note)d(that)g(this)g(\015ag)f(is)g(only)g(a)n(v)-5
-b(ailable)27 b(in)h(the)g(F)-7 b(ortran)26 b(in)n(terface)h(to)g
-(AST.\))340 4432 y Fj(\017)45 b Fk(AST)p Ft(__)p Fk(CONSER)-9
-b(VEFLUX:)28 b(Indicates)h(that)f(the)h(output)h(pixel)e(v)-5
-b(alues)29 b(should)f(b)r(e)h(scaled)f(in)h(suc)n(h)f(a)427
-4531 y(w)n(a)n(y)c(as)g(to)g(preserv)n(e)f(\(appro)n(ximately\))g(the)i
-(total)g(data)f(v)-5 b(alue)25 b(in)f(a)h(feature)f(on)g(the)h(sky)-7
-b(.)36 b(Without)25 b(this)427 4631 y(\015ag,)k(eac)n(h)f(output)i
-(pixel)f(v)-5 b(alue)29 b(represen)n(ts)f(an)g(instan)n(taneous)g
-(sample)h(of)g(the)h(input)f(data)g(v)-5 b(alues)29 b(at)427
-4731 y(the)e(corresp)r(onding)d(input)j(p)r(osition.)36
-b(This)26 b(is)g(appropriate)e(if)i(the)h(input)g(data)e(represen)n(ts)
-g(the)h(spatial)427 4830 y(densit)n(y)k(of)f(some)g(quan)n(tit)n(y)h
-(\(e.g.)43 b(surface)28 b(brigh)n(tness)h(in)h(Janskys)e(p)r(er)i
-(square)e(arc-second\))g(b)r(ecause)427 4930 y(the)g(output)f(pixel)g
-(v)-5 b(alues)26 b(will)h(ha)n(v)n(e)f(the)h(same)g(normalisation)e
-(and)i(units)g(as)f(the)h(input)h(pixel)f(v)-5 b(alues.)427
-5029 y(Ho)n(w)n(ev)n(er,)27 b(if)i(the)g(input)g(data)f(v)-5
-b(alues)28 b(represen)n(t)f(\015ux)i(\(or)f(some)g(other)f(ph)n(ysical)
-h(quan)n(tit)n(y\))g(p)r(er)h(pixel,)427 5129 y(then)i(the)g(AST)p
-Ft(__)p Fk(CONSER)-9 b(VEFLUX)30 b(\015ag)g(could)h(b)r(e)g(used.)46
-b(This)30 b(causes)g(eac)n(h)g(output)h(pixel)g(v)-5
-b(alue)427 5229 y(to)28 b(b)r(e)g(scaled)f(b)n(y)g(the)h(ratio)f(of)g
-(the)h(output)g(pixel)g(size)f(to)h(the)g(input)g(pixel)g(size.)227
-5394 y(This)40 b(\015ag)g(can)f(only)h(b)r(e)h(used)f(if)g(the)h
-(Mapping)f(is)g(succesfully)g(appro)n(ximated)e(b)n(y)i(one)g(or)f
-(more)g(linear)227 5494 y(transformations.)71 b(Th)n(us)40
-b(an)f(error)f(will)h(b)r(e)i(rep)r(orted)d(if)j(it)f(used)f(when)h
-(the)g(TOL)f(argumen)n(t)g(is)g(set)h(to)227 5593 y(zero)d(\(whic)n(h)h
-(stops)f(the)h(use)f(of)h(linear)f(appro)n(ximations\),)h(or)f(if)h
-(the)g(Mapping)f(is)h(to)r(o)f(non-linear)g(to)g(b)r(e)227
-5693 y(appro)n(ximated)f(b)n(y)h(a)f(piece-wise)h(linear)f
-(transformation.)64 b(The)37 b(ratio)f(of)h(output)h(to)f(input)h
-(pixel)f(size)g(is)p eop end
-%%Page: 324 334
-TeXDict begin 324 333 bop 0 52 a FG(324)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(ev)-5
-b(aluated)19 b(once)h(for)f(eac)n(h)f(panel)i(of)f(the)h(piece-wise)f
-(linear)g(appro)n(ximation)e(to)j(the)g(Mapping,)g(and)g(is)f(assumed)
-227 451 y(to)33 b(b)r(e)h(constan)n(t)f(for)g(all)g(output)g(pixels)g
-(in)h(the)g(panel.)54 b(The)33 b(scaling)f(factors)g(for)h(adjacen)n(t)
-g(panels)g(will)g(in)227 551 y(general)f(di\013er)h(sligh)n(tly)-7
-b(,)34 b(and)e(so)h(the)g(join)n(ts)g(b)r(et)n(w)n(een)g(panels)f(ma)n
-(y)g(b)r(e)i(visible)e(when)h(viewing)g(the)g(output)227
-650 y(image)k(at)g(high)g(con)n(trast.)64 b(If)38 b(this)f(is)g(a)g
-(problem,)i(reduce)e(the)g(v)-5 b(alue)37 b(of)g(the)h(TOL)f(argumen)n
-(t)f(un)n(til)h(the)227 750 y(di\013erence)28 b(b)r(et)n(w)n(een)f
-(adjacen)n(t)g(panels)h(is)f(su\016cien)n(tly)h(small)f(to)g(b)r(e)h
-(insigni\014can)n(t.)227 886 y(Note,)22 b(this)e(\015ag)f(cannot)g(b)r
-(e)h(used)g(in)g(conjunction)g(with)g(the)h(AST)p Ft(__)p
-Fk(NOBAD)e(\015ag)g(\(an)h(error)e(will)i(b)r(e)g(rep)r(orted)227
-986 y(if)28 b(b)r(oth)g(\015ags)f(are)g(sp)r(eci\014ed\).)227
-1122 y(Flux)h(conserv)-5 b(ation)26 b(can)h(only)h(b)r(e)g(appro)n
-(ximate)e(when)h(using)h(a)f(resampling)f(algorithm.)36
-b(F)-7 b(or)27 b(accurate)f(\015ux)227 1221 y(conserv)-5
-b(ation)26 b(use)i(the)g(AST)p Ft(_)p Fk(REBIN)p Fm(<)p
-Fk(X)p Fm(>)e Fk(or)h(AST)p Ft(_)p Fk(REBINSEQ)p Fm(<)p
-Fk(X)p Fm(>)f Fk(routine)h(instead.)-2 1394 y Fc(Propagation)33
-b(of)e(Missing)f(Data)n(:)227 1540 y Fk(Unless)j(the)g(AST)p
-Ft(__)p Fk(NOBAD)g(\015ag)f(is)h(sp)r(eci\014ed,)i(instances)d(of)h
-(missing)f(data)h(\(bad)g(pixels\))g(in)g(the)g(output)227
-1640 y(grid)22 b(are)g(iden)n(ti\014ed)h(b)n(y)g(o)r(ccurrences)e(of)i
-(the)g(BAD)n(V)-9 b(AL)23 b(v)-5 b(alue)23 b(in)g(the)g(OUT)f(arra)n(y)
--7 b(.)33 b(These)23 b(ma)n(y)f(b)r(e)h(pro)r(duced)227
-1739 y(if)28 b(an)n(y)f(of)h(the)g(follo)n(wing)e(happ)r(en:)340
-2035 y Fj(\017)45 b Fk(The)35 b(input)h(p)r(osition)f(\(the)h
-(transformed)e(p)r(osition)h(of)g(the)g(output)h(pixel's)f(cen)n(tre\))
-f(lies)h(outside)g(the)427 2135 y(b)r(oundary)27 b(of)h(the)g(grid)f
-(of)g(input)h(pixels.)340 2279 y Fj(\017)45 b Fk(The)32
-b(input)h(p)r(osition)e(lies)h(inside)g(the)g(b)r(oundary)f(of)g(a)h
-(bad)f(input)i(pixel.)49 b(In)32 b(this)g(con)n(text,)g(an)g(input)427
-2379 y(pixel)g(is)f(considered)f(bad)i(if)g(its)f(data)g(v)-5
-b(alue)31 b(is)h(equal)f(to)g(BAD)n(V)-9 b(AL)32 b(and)f(the)h(AST)p
-Ft(__)p Fk(USEBAD)f(\015ag)427 2478 y(is)h(set)f(via)g(the)h(FLA)n(GS)g
-(argumen)n(t.)48 b(\(P)n(ositions)30 b(whic)n(h)i(ha)n(v)n(e)e(half-in)
-n(tegral)g(co)r(ordinate)h(v)-5 b(alues,)32 b(and)427
-2578 y(therefore)d(lie)g(on)h(a)f(pixel)g(b)r(oundary)-7
-b(,)30 b(are)e(regarded)g(as)h(lying)g(within)h(the)g(pixel)f(with)h
-(the)g(larger,)e(i.e.)427 2678 y(more)f(p)r(ositiv)n(e,)g(index.\))340
-2822 y Fj(\017)45 b Fk(The)27 b(set)g(of)g(neigh)n(b)r(ouring)e(input)j
-(pixels)f(\(excluding)f(those)h(whic)n(h)g(are)e(bad\))i(is)g
-(unsuitable)g(for)f(calcu-)427 2922 y(lating)g(an)f(in)n(terp)r(olated)
-h(v)-5 b(alue.)36 b(Whether)26 b(this)g(is)g(true)f(ma)n(y)h(dep)r(end)
-g(on)g(the)g(sub-pixel)f(in)n(terp)r(olation)427 3021
-y(sc)n(heme)i(in)h(use.)340 3166 y Fj(\017)45 b Fk(The)31
-b(in)n(terp)r(olated)g(v)-5 b(alue)31 b(lies)g(outside)g(the)g(range)f
-(whic)n(h)h(can)g(b)r(e)h(represen)n(ted)d(using)i(the)h(data)e(t)n(yp)
-r(e)427 3266 y(of)e(the)g(OUT)f(arra)n(y)-7 b(.)227 3451
-y(In)29 b(addition,)f(asso)r(ciated)f(output)i(v)-5 b(ariance)27
-b(estimates)h(\(if)i(calculated\))e(ma)n(y)f(b)r(e)i(declared)e(bad)i
-(and)f(\015agged)227 3550 y(with)g(the)g(BAD)n(V)-9 b(AL)28
-b(v)-5 b(alue)28 b(in)g(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)27
-b(arra)n(y)e(under)j(an)n(y)f(of)g(the)h(follo)n(wing)f(circumstances:)
-340 3846 y Fj(\017)45 b Fk(The)28 b(asso)r(ciated)e(resampled)h(data)g
-(v)-5 b(alue)28 b(\(in)g(the)g(OUT)f(arra)n(y\))f(is)h(bad.)340
-3991 y Fj(\017)45 b Fk(The)19 b(set)g(of)g(neigh)n(b)r(ouring)e(input)j
-(pixels)e(whic)n(h)h(con)n(tributed)g(to)f(the)i(output)f(data)f(v)-5
-b(alue)19 b(do)f(not)h(all)g(ha)n(v)n(e)427 4090 y(v)-5
-b(alid)34 b(v)-5 b(ariance)32 b(estimates)h(asso)r(ciated)f(with)h
-(them.)55 b(In)33 b(this)h(con)n(text,)g(an)f(input)i(v)-5
-b(ariance)32 b(estimate)427 4190 y(ma)n(y)27 b(b)r(e)i(regarded)d(as)h
-(bad)h(either)g(b)r(ecause)f(it)h(has)g(the)g(v)-5 b(alue)28
-b(BAD)n(V)-9 b(AL)28 b(\(and)g(the)h(AST)p Ft(__)p Fk(USEBAD)427
-4289 y(\015ag)e(is)h(set\),)g(or)e(b)r(ecause)h(it)h(is)g(negativ)n(e.)
-340 4434 y Fj(\017)45 b Fk(The)23 b(set)f(of)h(neigh)n(b)r(ouring)e
-(input)i(pixels)g(for)f(whic)n(h)g(v)-5 b(alid)23 b(v)-5
-b(ariance)21 b(v)-5 b(alues)22 b(are)g(a)n(v)-5 b(ailable)21
-b(is)h(unsuitable)427 4534 y(for)30 b(calculating)f(an)g(o)n(v)n(erall)
-f(v)-5 b(ariance)28 b(v)-5 b(alue.)44 b(Whether)30 b(this)g(is)g(true)g
-(ma)n(y)f(dep)r(end)h(on)g(the)g(sub-pixel)427 4633 y(in)n(terp)r
-(olation)d(sc)n(heme)g(in)h(use.)340 4778 y Fj(\017)45
-b Fk(The)25 b(v)-5 b(ariance)23 b(v)-5 b(alue)25 b(lies)f(outside)h
-(the)g(range)e(whic)n(h)i(can)f(b)r(e)h(represen)n(ted)e(using)i(the)g
-(data)f(t)n(yp)r(e)h(of)f(the)427 4877 y(OUT)p Ft(_)p
-Fk(V)-9 b(AR)28 b(arra)n(y)-7 b(.)227 5062 y(If)22 b(the)f(AST)p
-Ft(__)p Fk(NOBAD)g(\015ag)g(is)f(sp)r(eci\014ed)i(via)e(argumen)n(t)g
-(FLA)n(GS,)i(then)f(output)h(arra)n(y)d(elemen)n(ts)i(that)g(w)n(ould)
-227 5162 y(otherwise)k(b)r(e)i(set)f(to)g(BAD)n(V)-9
-b(AL)26 b(are)g(instead)f(left)i(holding)f(the)g(v)-5
-b(alue)26 b(they)h(had)e(on)h(en)n(try)g(to)g(this)g(function.)227
-5262 y(The)i(n)n(um)n(b)r(er)f(of)h(suc)n(h)f(arra)n(y)e(elemen)n(ts)j
-(is)f(returned)g(as)g(the)h(function)h(v)-5 b(alue.)p
-0 5484 3780 12 v 0 5615 a FA(AST)p Fe(_)p FA(RESOL)-15
-b(VE)1243 5616 y Fd(Resolv)m(e)38 b(a)h(v)m(ector)e(in)m(to)g(t)m(w)m
-(o)1294 5715 y(orthogonal)f(comp)s(onen)m(ts)2828 5615
-y FA(AST)p Fe(_)p FA(RESOL)-15 b(VE)p eop end
-%%Page: 325 335
-TeXDict begin 325 334 bop 3643 52 a FG(325)0 351 y Fc(Description:)44
-b Fk(This)21 b(routine)f(resolv)n(es)e(a)i(v)n(ector)g(in)n(to)g(t)n(w)
-n(o)f(p)r(erp)r(endicular)i(comp)r(onen)n(ts.)34 b(The)20
-b(v)n(ector)f(from)h(p)r(oin)n(t)h(1)227 451 y(to)g(p)r(oin)n(t)g(2)g
-(is)g(used)g(as)f(the)h(basis)f(v)n(ector.)34 b(The)21
-b(v)n(ector)e(from)i(p)r(oin)n(t)g(1)g(to)g(p)r(oin)n(t)g(3)f(is)h
-(resolv)n(ed)e(in)n(to)i(comp)r(onen)n(ts)227 551 y(parallel)29
-b(and)h(p)r(erp)r(endicular)g(to)g(this)g(basis)g(v)n(ector.)43
-b(The)30 b(lengths)g(of)g(the)h(t)n(w)n(o)e(comp)r(onen)n(ts)h(are)f
-(returned,)227 650 y(together)e(with)h(the)g(p)r(osition)f(of)h
-(closest)f(aproac)n(h)e(of)j(the)g(basis)f(v)n(ector)f(to)i(p)r(oin)n
-(t)f(3.)0 803 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_RESOLVE\()c(THIS,)k(POINT1,)f(POINT2,)f(POINT3,)h(POINT4,)g(D1,)h
-(D2,)g(STATUS)f(\))0 955 y Fc(Argumen)m(ts:)259 1095
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1194 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 1329 y Fc(POINT1\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-1428 y Fk(An)i(arra)n(y)c(with)k(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)
--7 b(rame)32 b(axis)f(\(Naxes)h(attribute\).)50 b(This)32
-b(marks)f(the)h(start)g(of)427 1528 y(the)c(basis)f(v)n(ector,)f(and)i
-(of)f(the)h(v)n(ector)f(to)g(b)r(e)h(resolv)n(ed.)259
-1662 y Fc(POINT2\()k Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 1762 y Fk(An)c(arra)n(y)c(with)k(one)e(elemen)n(t)h(for)f
-(eac)n(h)h(F)-7 b(rame)25 b(axis)g(\(Naxes)h(attribute\).)36
-b(This)26 b(marks)f(the)h(end)g(of)g(the)427 1862 y(basis)h(v)n(ector.)
-259 1996 y Fc(POINT3\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e
-(\(Giv)m(en\))427 2096 y Fk(An)c(arra)n(y)c(with)k(one)e(elemen)n(t)h
-(for)f(eac)n(h)h(F)-7 b(rame)25 b(axis)g(\(Naxes)h(attribute\).)36
-b(This)26 b(marks)f(the)h(end)g(of)g(the)427 2195 y(v)n(ector)h(to)g(b)
-r(e)h(resolv)n(ed.)259 2330 y Fc(POINT4\()k Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Returned\))427 2429
-y Fk(An)23 b(arra)n(y)d(with)j(one)f(elemen)n(t)g(for)g(eac)n(h)f(F)-7
-b(rame)22 b(axis)f(in)i(whic)n(h)f(the)h(co)r(ordinates)e(of)h(the)h(p)
-r(oin)n(t)f(of)g(closest)427 2529 y(approac)n(h)k(of)i(the)f(basis)g(v)
-n(ector)g(to)g(p)r(oin)n(t)h(3)f(will)h(b)r(e)g(returned.)259
-2663 y Fc(D1)k(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427
-2763 y Fk(The)i(distance)f(from)g(p)r(oin)n(t)g(1)g(to)g(p)r(oin)n(t)h
-(4)f(\(that)h(is,)h(the)e(length)h(of)f(the)h(comp)r(onen)n(t)f
-(parallel)f(to)h(the)427 2862 y(basis)27 b(v)n(ector\).)36
-b(P)n(ositiv)n(e)26 b(v)-5 b(alues)27 b(are)g(in)h(the)g(same)f(sense)g
-(as)g(mo)n(v)n(emen)n(t)f(from)i(p)r(oin)n(t)f(1)h(to)f(p)r(oin)n(t)h
-(2.)259 2997 y Fc(D2)k(=)g(DOUBLE)g(PRECISION)g(\(Returned\))427
-3096 y Fk(The)d(distance)f(from)g(p)r(oin)n(t)g(4)g(to)g(p)r(oin)n(t)h
-(3)e(\(that)i(is,)g(the)f(length)h(of)f(the)h(comp)r(onen)n(t)f(p)r
-(erp)r(endicular)g(to)427 3196 y(the)g(basis)f(v)n(ector\).)36
-b(The)28 b(v)-5 b(alue)27 b(is)h(alw)n(a)n(ys)d(p)r(ositiv)n(e.)259
-3330 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3430 y Fk(The)c(global)e(status.)0 3595
-y Fc(Notes:)340 3881 y Fj(\017)45 b Fk(Eac)n(h)20 b(v)n(ector)g(used)h
-(in)h(this)f(routine)g(is)g(the)h(path)f(of)g(shortest)g(distance)g(b)r
-(et)n(w)n(een)g(t)n(w)n(o)f(p)r(oin)n(ts,)j(as)d(de\014ned)427
-3980 y(b)n(y)28 b(the)g(AST)p Ft(_)p Fk(DIST)-7 b(ANCE)28
-b(function.)340 4115 y Fj(\017)45 b Fk(This)19 b(function)g(will)g
-(return)f Ft(")p Fk(bad)p Ft(")g Fk(co)r(ordinate)g(v)-5
-b(alues)18 b(\(AST)p Ft(__)p Fk(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)
-f(co)r(ordinates)427 4214 y(has)27 b(this)h(v)-5 b(alue,)28
-b(or)e(if)j(the)f(required)e(output)i(v)-5 b(alues)28
-b(are)e(unde\014ned.)p 0 4417 3780 12 v 0 4547 a FA(AST)p
-Fe(_)p FA(RET)-11 b(AINFITS)1456 4548 y Fd(Indicate)38
-b(that)f(the)1459 4648 y(curren)m(t)g(card)i(in)f(a)1388
-4748 y(FitsChan)f(should)i(b)s(e)1682 4847 y(retained)2618
-4547 y FA(AST)p Fe(_)p FA(RET)-11 b(AINFITS)0 5016 y
-Fc(Description:)44 b Fk(This)e(routine)f(stores)g(a)g(\015ag)g(with)h
-(the)g(curren)n(t)f(card)g(in)h(the)g(FitsChan)g(indicating)f(that)h
-(the)227 5116 y(card)35 b(should)g(not)h(b)r(e)g(remo)n(v)n(ed)d(from)j
-(the)g(FitsChan)f(when)h(an)f(Ob)5 b(ject)35 b(is)h(read)e(from)i(the)f
-(FitsChan)h(us-)227 5215 y(ing)28 b(AST)p Ft(_)p Fk(READ.)227
-5341 y(Cards)23 b(that)i(ha)n(v)n(e)e(not)h(b)r(een)g(\015agged)f(in)i
-(this)f(w)n(a)n(y)f(are)g(remo)n(v)n(ed)f(when)j(a)e(read)h(op)r
-(eration)f(completes)h(succes-)227 5441 y(fully)-7 b(,)27
-b(but)f(only)g(if)g(the)g(card)f(w)n(as)f(used)i(in)g(the)g(pro)r(cess)
-e(of)i(creating)f(the)h(returned)f(AST)h(Ob)5 b(ject.)36
-b(An)n(y)26 b(cards)227 5540 y(that)g(are)e(irrelev)-5
-b(an)n(t)24 b(to)i(the)f(creation)g(of)g(the)h(AST)f(Ob)5
-b(ject)26 b(are)e(retained)h(whether)g(or)g(not)g(they)g(are)g
-(\015agged.)0 5693 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_RETAINFITS\()37 b(THIS,)42 b(STATUS)f(\))p eop
-end
-%%Page: 326 336
-TeXDict begin 326 335 bop 0 52 a FG(326)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Argumen)m(ts:)259
-536 y(THIS)h(=)g(INTEGER)g(\(Giv)m(en\))427 636 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 793 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 892
-y Fk(The)c(global)e(status.)0 1103 y Fc(Notes:)340 1434
-y Fj(\017)45 b Fk(This)23 b(function)f(returns)g(without)h(action)e(if)
-i(the)g(FitsChan)f(is)h(initially)f(p)r(ositioned)g(at)g(the)h
-Ft(")p Fk(end-of-\014le)p Ft(")427 1533 y Fk(\(i.e.)38
-b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan\).)340 1691 y Fj(\017)45
-b Fk(The)28 b(curren)n(t)f(card)f(is)i(not)f(c)n(hanged)g(b)n(y)g(this)
-h(function.)p 0 1938 3780 12 v 0 2069 a FA(AST)p Fe(_)p
-FA(SAME)946 2070 y Fd(T)-10 b(est)39 b(if)f(t)m(w)m(o)f(AST)h(p)s(oin)m
-(ters)g(refer)g(to)g(the)1569 2185 y(same)g(Ob)7 b(ject)3056
-2069 y FA(AST)p Fe(_)p FA(SAME)0 2422 y Fc(Description:)44
-b Fk(This)31 b(function)g(returns)f(a)g(logical)f(result)h(to)h
-(indicate)f(whether)h(t)n(w)n(o)e(p)r(oin)n(ters)h(refer)g(to)g(the)h
-(same)227 2522 y(Ob)5 b(ject.)0 2719 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SAME\()d(THIS,)h(THAT,)h(STATUS)f(\))0
-2917 y Fc(Argumen)m(ts:)259 3102 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3202 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(Ob)5
-b(ject.)259 3359 y Fc(THA)-8 b(T)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-3459 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(Ob)5
-b(ject.)259 3616 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 3715 y Fk(The)c(global)e(status.)0
-3926 y Fc(Class)31 b(Applicabilit)m(y:)259 4111 y(Ob)5
-b(ject)427 4210 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 4421 y Fc(Returned)32 b(V)-8 b(alue:)259 4605
-y(AST)p Ft(_)p Fc(SAME)32 b(=)g(LOGICAL)427 4705 y Fk(.TR)n(UE.)c(if)g
-(the)g(t)n(w)n(o)f(p)r(oin)n(ters)f(refer)h(to)h(the)g(same)f(Ob)5
-b(ject,)27 b(otherwise)g(.F)-9 b(ALSE.)0 4915 y Fc(Notes:)340
-5246 y Fj(\017)45 b Fk(Tw)n(o)37 b(indep)r(enden)n(t)h(Ob)5
-b(jects)37 b(that)g(happ)r(en)h(to)f(b)r(e)h(iden)n(tical)f(are)f(not)h
-(considered)g(to)g(b)r(e)h(the)f(same)427 5346 y(Ob)5
-b(ject)28 b(b)n(y)f(this)h(function.)340 5503 y Fj(\017)45
-b Fk(A)28 b(v)-5 b(alue)28 b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7
-b(A)g(TUS)28 b(set)g(to)f(an)h(error)427 5603 y(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 327 337
-TeXDict begin 327 336 bop 3643 52 a FG(327)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(SELECTORMAP)293 b Fd(Create)37
-b(a)1573 581 y(SelectorMap)2403 482 y FA(AST)p Fe(_)p
-FA(SELECTORMAP)0 778 y Fc(Description:)44 b Fk(This)28
-b(function)g(creates)f(a)g(new)g(SelectorMap)g(and)g(optionally)g
-(initialises)g(its)h(attributes.)227 906 y(A)g(SelectorMap)f(is)g(a)g
-(Mapping)h(that)g(iden)n(ti\014es)f(whic)n(h)h(Region)f(con)n(tains)f
-(a)i(giv)n(en)e(input)j(p)r(osition.)227 1034 y(A)40
-b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g(of)g(Regions)f
-(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)g(of)g(axes)g
-(and)227 1134 y(represen)n(t)31 b(the)h(same)f(co)r(ordinate)g(F)-7
-b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i(\(Nin)f
-(attribute\))h(of)e(the)i(SelectorMap)227 1233 y(equals)24
-b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g(one)g(of)h(the)
-f(encapsulated)g(Region.)35 b(All)25 b(SelectorMaps)e(ha)n(v)n(e)g
-(only)227 1333 y(a)k(single)h(output.)37 b(SelectorMaps)26
-b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f(transformation.)227
-1461 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r(osition,)h(the)e(forw)n
-(ard)e(transformation)h(of)h(a)f(SelectorMap)g(searc)n(hes)f(through)h
-(the)i(en-)227 1561 y(capsulated)d(Regions)f(\(in)i(the)g(order)e
-(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h(created\))f(un)n(til)i
-(a)f(Region)g(is)227 1660 y(found)27 b(whic)n(h)g(con)n(tains)f(the)h
-(input)g(p)r(osition.)36 b(The)27 b(index)g(asso)r(ciated)e(with)i
-(this)g(Region)f(is)h(returned)f(as)g(the)227 1760 y(SelectorMap)h
-(output)h(v)-5 b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27
-b(is)h(the)g(p)r(osition)f(of)h(the)f(Region)g(within)h(the)g(list)g
-(of)g(Regions)227 1860 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g
-(created,)g(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 1959 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-2088 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 2187 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 2287 y(simpli\014ed)g(using)g
-(AST)p Ft(_)p Fk(SIMPLIFY.)227 2415 y(In)g(practice,)f(SelectorMaps)f
-(are)h(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)0
-2572 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_SELECTORMAP\()37 b(NREG,)42 b(REGS,)f(BADVAL,)g(OPTIONS,)f(STATUS)
-h(\))0 2729 y Fc(Argumen)m(ts:)259 2873 y(NREG)31 b(=)h(INTEGER)f
-(\(Giv)m(en\))427 2972 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(supplied)g
-(Regions.)259 3109 y Fc(REGS\()j(NREG)g(\))h(=)g(INTEGER)g(\(Giv)m
-(en\))427 3209 y Fk(An)41 b(arra)n(y)d(of)j(p)r(oin)n(ters)f(to)g(the)h
-(Regions.)74 b(All)41 b(the)g(supplied)g(Regions)f(m)n(ust)g(relate)g
-(to)g(the)h(same)427 3308 y(co)r(ordinate)23 b(F)-7 b(rame.)35
-b(The)23 b(n)n(um)n(b)r(er)g(of)h(axes)e(in)i(this)g(co)r(ordinate)e(F)
--7 b(rame)23 b(de\014nes)h(the)f(n)n(um)n(b)r(er)h(of)f(inputs)427
-3408 y(for)k(the)h(SelectorMap.)259 3544 y Fc(BAD)m(V)-11
-b(AL)34 b(=)e(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 3644
-y Fk(The)k(v)-5 b(alue)34 b(to)g(b)r(e)h(returned)e(b)n(y)h(the)h(forw)
-n(ard)e(transformation)f(of)j(the)f(SelectorMap)g(for)f(an)n(y)h(input)
-427 3744 y(p)r(ositions)27 b(that)h(ha)n(v)n(e)f(a)g(bad)g(\(AST)p
-Ft(__)p Fk(BAD\))i(v)-5 b(alue)27 b(on)g(an)n(y)g(axis.)259
-3880 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3980 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4080 y(b)r(e)36
-b(used)f(for)f(initialising)h(the)g(new)g(SelectorMap.)58
-b(The)35 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)f
-(the)427 4179 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-4316 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4415 y Fk(The)c(global)e(status.)0 4585
-y Fc(Returned)32 b(V)-8 b(alue:)259 4729 y(AST)p Ft(_)p
-Fc(SELECTORMAP)32 b(=)g(INTEGER)427 4828 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(SelectorMap.)0 4998 y Fc(Notes:)340 5288
-y Fj(\017)45 b Fk(Deep)22 b(copies)f(are)f(tak)n(en)h(of)g(the)h
-(supplied)g(Regions.)33 b(This)22 b(means)f(that)g(an)n(y)g(subsequen)n
-(t)g(c)n(hanges)f(made)427 5387 y(to)k(the)h(comp)r(onen)n(t)f(Regions)
-f(using)h(the)g(supplied)h(p)r(oin)n(ters)e(will)i(ha)n(v)n(e)e(no)g
-(e\013ect)i(on)f(the)h(SelectorMap.)340 5524 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5623
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 328 338
-TeXDict begin 328 337 bop 0 52 a FG(328)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(SET)1023 483 y Fd(Set)38
-b(attribute)f(v)-7 b(alues)38 b(for)g(an)h(Ob)7 b(ject)3192
-482 y FA(AST)p Fe(_)p FA(SET)0 675 y Fc(Description:)44
-b Fk(This)22 b(routine)g(assigns)e(a)h(set)h(of)g(attribute)g(v)-5
-b(alues)21 b(to)h(an)f(Ob)5 b(ject,)23 b(o)n(v)n(er-riding)c(an)n(y)i
-(previous)g(v)-5 b(alues.)227 775 y(The)33 b(attributes)h(and)f(their)g
-(new)g(v)-5 b(alues)33 b(are)f(sp)r(eci\014ed)h(via)g(a)g(c)n(haracter)
-e(string,)j(whic)n(h)f(should)g(con)n(tain)f(a)227 875
-y(comma-separated)26 b(list)h(of)h(the)g(form:)227 1001
-y Ft(")p Fk(attribute)p Ft(_)p Fk(1)f(=)g(v)-5 b(alue)p
-Ft(_)p Fk(1,)27 b(attribute)p Ft(_)p Fk(2)f(=)i(v)-5
-b(alue)p Ft(_)p Fk(2,)26 b(...)37 b Ft(")227 1128 y Fk(where)22
-b Ft(")p Fk(attribute)p Ft(_)p Fk(n)p Ft(")g Fk(sp)r(eci\014es)g(an)h
-(attribute)f(name,)i(and)e(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f
-(of)h(eac)n(h)e Ft(")p Fk(=)p Ft(")h Fk(sign)g(should)227
-1227 y(b)r(e)36 b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h
-(the)h(v)-5 b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35
-b(v)-5 b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227
-1327 y(according)26 b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)0
-1480 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SET\()e(THIS,)h
-(SETTINGS,)f(STATUS)h(\))0 1633 y Fc(Argumen)m(ts:)259
-1773 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1873
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2008
-y Fc(SETTINGS)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()f
-Fj(\003)h Fc(\))g(\(Giv)m(en\))427 2107 y Fk(A)j(c)n(haracter)e(string)
-h(con)n(taining)g(a)h(comma-separated)d(list)j(of)g(attribute)g
-(settings)g(in)g(the)g(form)g(de-)427 2207 y(scrib)r(ed)28
-b(ab)r(o)n(v)n(e.)259 2341 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 2441 y Fk(The)c(global)e(status.)0
-2607 y Fc(Class)31 b(Applicabilit)m(y:)259 2747 y(Ob)5
-b(ject)427 2846 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)0 3012 y Fc(Examples:)227 3153 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(MAP,)i('Report)f(=)h(1,)g(Zoom)g(=)g(25.0',)g
-(STATUS)f(\))427 3252 y Fk(Sets)28 b(the)g(Rep)r(ort)f(attribute)h(for)
-f(Ob)5 b(ject)28 b(MAP)f(to)h(the)g(v)-5 b(alue)27 b(1)g(and)h(the)g
-(Zo)r(om)f(attribute)g(to)h(25.0.)227 3391 y Fy(CALL)47
-b(AST)p Ft(_)p Fy(SET\()e(FRAME,)h('Label\()g(1)i(\))f(=Offset)f(from)h
-(cluster)e(axis',)h(STATUS)h(\))427 3486 y Fk(Sets)28
-b(the)g(Lab)r(el\(1\))g(attribute)f(for)g(Ob)5 b(ject)28
-b(FRAME)g(to)f(a)g(suitable)h(string.)0 3652 y Fc(Notes:)340
-3938 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 4073 y Fj(\017)45 b Fk(White)33 b(space)e(ma)n(y)f(also)h
-(surround)g(attribute)g(v)-5 b(alues,)33 b(where)e(it)h(will)g
-(generally)e(b)r(e)i(ignored)e(\(except)427 4172 y(for)24
-b(string-v)-5 b(alued)23 b(attributes)i(where)e(it)i(is)f(signi\014can)
-n(t)g(and)g(forms)g(part)f(of)i(the)f(v)-5 b(alue)25
-b(to)f(b)r(e)g(assigned\).)340 4307 y Fj(\017)45 b Fk(It)32
-b(is)e(not)h(p)r(ossible)g(to)g(include)g(a)g(comma)f(in)h(the)g(v)-5
-b(alue)31 b(to)g(b)r(e)g(assigned)f(to)h(an)g(attribute)g(using)f(this)
-427 4407 y(routine.)37 b(If)28 b(suc)n(h)f(a)g(v)-5 b(alue)28
-b(is)f(needed,)h(then)g(AST)p Ft(_)p Fk(SETC)f(should)h(b)r(e)g(used)f
-(instead.)340 4541 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f
-(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5
-b(alue)27 b(for)g(a)h(read-only)e(attribute.)p 0 4744
-V 0 4875 a FA(AST)p Fe(_)p FA(SET)p Fb(<)p FA(X)p Fb(>)1158
-4876 y Fd(Set)39 b(an)f(attribute)f(v)-7 b(alue)38 b(for)g(an)1716
-4976 y(Ob)7 b(ject)2908 4875 y FA(AST)p Fe(_)p FA(SET)p
-Fb(<)p FA(X)p Fb(>)0 5168 y Fc(Description:)44 b Fk(This)29
-b(is)g(a)g(family)g(of)g(routines)f(whic)n(h)h(set)g(a)g(sp)r
-(eci\014ed)g(attribute)g(v)-5 b(alue)29 b(for)g(an)f(Ob)5
-b(ject)29 b(using)g(one)227 5268 y(of)g(sev)n(eral)f(di\013eren)n(t)h
-(data)g(t)n(yp)r(es.)41 b(The)30 b(t)n(yp)r(e)f(is)g(selected)g(b)n(y)g
-(replacing)f Fm(<)p Fk(X)p Fm(>)h Fk(in)g(the)h(routine)f(name)g(b)n(y)
-g(C,)227 5367 y(D,)34 b(I,)g(L)f(or)f(R,)i(to)f(supply)h(a)f(v)-5
-b(alue)33 b(in)g(Character,)h(Double)f(precision,)h(In)n(teger,)g
-(Logical)e(or)g(Real)h(format,)227 5467 y(resp)r(ectiv)n(ely)-7
-b(.)227 5593 y(If)36 b(p)r(ossible,)h(the)f(v)-5 b(alue)36
-b(y)n(ou)e(supply)i(is)f(con)n(v)n(erted)f(to)i(the)f(t)n(yp)r(e)h(of)g
-(the)f(attribute.)61 b(If)36 b(con)n(v)n(ersion)d(is)j(not)227
-5693 y(p)r(ossible,)28 b(an)f(error)f(will)h(result.)p
-eop end
-%%Page: 329 339
-TeXDict begin 329 338 bop 3643 52 a FG(329)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_SET)p Fm(<)p Ft(X)p Fm(>)p
-Ft(\()d(THIS,)i(ATTRIB,)g(VALUE,)g(STATUS)g(\))0 499
-y Fc(Argumen)m(ts:)259 634 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-733 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259
-864 y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 964 y Fk(A)c(c)n(haracter)e
-(string)h(con)n(taining)f(the)i(name)g(of)f(the)h(attribute)g(whose)f
-(v)-5 b(alue)27 b(is)h(to)f(b)r(e)h(set.)259 1095 y Fc(V)-11
-b(ALUE)33 b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Giv)m(en\))427
-1195 y Fk(The)c(v)-5 b(alue)27 b(to)h(b)r(e)g(set)f(for)h(the)g
-(attribute,)f(in)h(the)g(data)f(t)n(yp)r(e)h(corresp)r(onding)e(to)h
-Fm(<)p Fk(X)p Fm(>)p Fk(.)259 1326 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1425
-y Fk(The)c(global)e(status.)0 1585 y Fc(Class)31 b(Applicabilit)m(y:)
-259 1720 y(Ob)5 b(ject)427 1820 y Fk(These)28 b(routines)f(apply)g(to)g
-(all)h(Ob)5 b(jects.)0 1980 y Fc(Examples:)227 2119 y
-Fy(CALL)47 b(AST)p Ft(_)p Fy(SETC\()e(PLOT,)h('Title',)g(CVALUE,)g
-(STATUS)g(\))427 2214 y Fk(Sets)38 b(the)h(Title)f(attribute)h(v)-5
-b(alue)38 b(for)f(Ob)5 b(ject)38 b(PLOT)f(to)h(the)h(con)n(ten)n(ts)e
-(of)h(the)h(c)n(haracter)d(v)-5 b(ariable)427 2314 y(CV)c(ALUE.)227
-2449 y Fy(CALL)47 b(AST)p Ft(_)p Fy(SETL\()e(FRAME,)h('Preserve',)f
-(.TRUE.,)h(STATUS)g(\);)427 2545 y Fk(Sets)28 b(the)g(Preserv)n(e)d
-(attribute)j(v)-5 b(alue)27 b(for)g(Ob)5 b(ject)28 b(FRAME)g(to)f(1)g
-(\(true\).)0 2705 y Fc(Notes:)340 2985 y Fj(\017)45 b
-Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g
-(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g(space.)340
-3117 y Fj(\017)45 b Fk(The)34 b(logical)f(v)-5 b(alue)34
-b(.F)-9 b(ALSE.)34 b(will)h(translate)e(to)h(a)f(n)n(umerical)h
-(attribute)g(v)-5 b(alue)34 b(of)g(zero)f(and)h(logical)427
-3216 y(.TR)n(UE.)28 b(will)f(translate)g(to)h(one.)340
-3347 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(result)f(if)h(an)g
-(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5 b(alue)27
-b(for)g(a)h(read-only)e(attribute.)p 0 3543 3780 12 v
-0 3674 a FA(AST)p Fe(_)p FA(SET)-11 b(A)l(CTIVEUNIT)1706
-3675 y Fd(Sp)s(ecify)1687 3789 y(ho)m(w)37 b(the)1774
-3889 y(Unit)1662 3988 y(attribute)1644 4088 y(should)h(b)s(e)1776
-4188 y(used)2322 3674 y FA(AST)p Fe(_)p FA(SET)-11 b(A)l(CTIVEUNIT)0
-4350 y Fc(Description:)44 b Fk(This)25 b(routine)f(sets)g(the)h(curren)
-n(t)f(v)-5 b(alue)24 b(of)h(the)g(Activ)n(eUnit)g(\015ag)f(for)g(a)g(F)
--7 b(rame,)25 b(whic)n(h)f(con)n(trols)f(ho)n(w)227 4449
-y(the)h(F)-7 b(rame)22 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)g
-(\(b)n(y)g(AST)p Ft(_)p Fk(FINDFRAME)h(or)f(AST)p Ft(_)p
-Fk(CONVER)-7 b(T\))23 b(to)g(matc)n(h)g(another)227 4549
-y(F)-7 b(rame.)35 b(If)23 b(the)g(Activ)n(eUnit)g(\015ag)f(is)g(set)h
-(in)f(b)r(oth)h(template)g(and)g(target)e(F)-7 b(rames)22
-b(then)h(the)g(returned)f(Mapping)227 4649 y(tak)n(es)j(in)n(to)g
-(accoun)n(t)g(an)n(y)f(di\013erences)h(in)h(axis)f(units.)36
-b(The)26 b(default)g(v)-5 b(alue)25 b(for)g(simple)h(F)-7
-b(rames)24 b(is)i(zero,)f(whic)n(h)227 4748 y(preserv)n(es)h(the)i(b)r
-(eha)n(viour)e(of)i(v)n(ersions)d(of)j(AST)g(prior)e(to)i(v)n(ersion)e
-(2.0.)227 4872 y(If)c(the)f(Activ)n(eUnit)h(\015ag)e(of)i(either)f(F)-7
-b(rame)20 b(is)h(.F)-9 b(ALSE.,)22 b(then)g(the)g(Mapping)e(will)i
-(ignore)d(an)n(y)i(di\013erence)g(in)g(the)227 4972 y(Unit)31
-b(attributes)f(of)g(corresp)r(onding)e(template)j(and)f(target)f(axes.)
-44 b(In)30 b(this)g(mo)r(de,)h(the)g(Unit)g(attributes)f(are)227
-5071 y(purely)23 b(descriptiv)n(e)f(commen)n(tary)g(for)h(the)h(b)r
-(ene\014t)g(of)f(h)n(uman)g(readers)e(and)i(do)g(not)g(in\015uence)h
-(the)f(Mappings)227 5171 y(b)r(et)n(w)n(een)k(F)-7 b(rames.)36
-b(This)27 b(is)f(the)i(b)r(eha)n(viour)d(whic)n(h)i(all)g(F)-7
-b(rames)26 b(had)g(in)h(older)f(v)n(ersion)g(of)h(AST,)g(prior)f(to)g
-(the)227 5270 y(in)n(tro)r(duction)i(of)f(this)h(attribute.)227
-5394 y(If)j(the)h(Activ)n(eUnit)f(\015ag)f(of)h(b)r(oth)g(F)-7
-b(rames)30 b(is)g(.TR)n(UE.,)i(then)f(the)g(Mapping)f(from)h(template)g
-(to)g(target)e(will)227 5494 y(tak)n(e)35 b(accoun)n(t)g(of)g(an)n(y)g
-(di\013erence)h(in)g(the)g(axis)f(Unit)h(attributes,)i(where-ev)n(er)33
-b(p)r(ossible.)61 b(F)-7 b(or)35 b(instance,)i(if)227
-5593 y(corresp)r(onding)31 b(target)g(and)h(template)h(axes)e(ha)n(v)n
-(e)g(Unit)i(strings)f(of)g Ft(")p Fk(km)p Ft(")f Fk(and)h
-Ft(")p Fk(m)p Ft(")p Fk(,)h(then)g(the)g(F)-7 b(rameSet)227
-5693 y(class)35 b(will)i(use)f(a)f(Zo)r(omMap)g(to)h(connect)g(them)h
-(whic)n(h)f(in)n(tro)r(duces)f(a)h(scaling)f(of)h(1000.)61
-b(If)36 b(no)g(Mapping)p eop end
-%%Page: 330 340
-TeXDict begin 330 339 bop 0 52 a FG(330)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(can)g(b)r(e)g(found)h
-(b)r(et)n(w)n(een)f(the)g(corresp)r(onding)e(units)j(string,)f(then)g
-(an)g(error)e(is)i(rep)r(orted.)47 b(In)31 b(this)g(mo)r(de,)h(it)227
-451 y(is)f(assumed)g(that)g(v)-5 b(alues)31 b(of)g(the)h(Unit)g
-(attribute)f(conform)g(to)g(the)h(syn)n(tax)e(for)g(units)i(strings)e
-(describ)r(ed)h(in)227 551 y(the)g(FITS)g(W)n(CS)f(P)n(ap)r(er)f(I)i
-Ft(")p Fk(Represen)n(tations)e(of)h(w)n(orld)f(co)r(ordinates)g(in)i
-(FITS)p Ft(")f Fk(\(Greisen)g(&)h(Calabretta\).)227 650
-y(P)n(articularly)-7 b(,)30 b(an)n(y)h(of)g(the)h(named)f(unit)h(sym)n
-(b)r(ols,)g(functions,)h(op)r(erators)c(or)i(standard)f(m)n(ultiplier)h
-(pre\014xes)227 750 y(listed)c(within)g(that)f(pap)r(er)g(can)g(b)r(e)g
-(used)h(within)g(a)e(units)i(string.)36 b(A)26 b(units)h(string)f(ma)n
-(y)f(con)n(tain)h(sym)n(b)r(ols)f(for)227 849 y(unit)31
-b(whic)n(h)g(are)e(not)i(listed)g(in)f(the)h(FITS)g(pap)r(er,)g(but)g
-(transformation)e(to)h(an)n(y)g(other)g(units)h(will)g(then)g(not)227
-949 y(b)r(e)f(p)r(ossible)f(\(except)h(to)f(units)h(whic)n(h)f(dep)r
-(end)h(only)f(on)g(the)h(same)f(unkno)n(wn)g(units)h(-)f(th)n(us)g
-Ft(")p Fk(\015ops)p Ft(")f Fk(can)h(b)r(e)227 1049 y(transformed)e(to)g
-Ft(")p Fk(M\015ops)p Ft(")g Fk(ev)n(en)g(though)g Ft(")p
-Fk(\015ops)p Ft(")f Fk(is)i(not)g(a)f(standard)f(FITS)i(unit)h(sym)n(b)
-r(ol\).)227 1173 y(A)c(range)e(of)h(common)g(non-standard)f(v)-5
-b(ariations)23 b(of)i(unit)g(names)f(and)g(m)n(ultiplier)h(pre\014xes)e
-(are)h(also)f(allo)n(w)n(ed,)227 1273 y(suc)n(h)28 b(as)f(adding)g(an)g
-Ft(")p Fk(s)p Ft(")g Fk(to)h(the)g(end)g(of)f(Angstrom,)g(using)h(a)f
-(lo)n(w)n(er)f(case)h Ft(")p Fk(a)p Ft(")f Fk(at)i(the)g(start)f(of)h
-Ft(")p Fk(angstrom)p Ft(")p Fk(,)227 1373 y Ft(")p Fk(micron)p
-Ft(")e Fk(instead)i(of)f Ft(")p Fk(um)p Ft(")p Fk(,)h
-Ft(")p Fk(sec)p Ft(")e Fk(instead)h(of)h Ft(")p Fk(s)p
-Ft(")p Fk(,)f(etc.)227 1497 y(If)c(the)f(Activ)n(eUnit)h(\015ag)f(is)g
-(.TR)n(UE.,)h(setting)f(a)g(new)g(Unit)h(v)-5 b(alue)22
-b(for)g(an)f(axis)h(ma)n(y)f(also)g(c)n(hange)g(its)i(Lab)r(el)f(and)
-227 1597 y(Sym)n(b)r(ol)30 b(attributes.)45 b(F)-7 b(or)30
-b(instance,)g(if)h(an)f(axis)f(has)h(Unit)h Ft(")p Fk(Hz)p
-Ft(")f Fk(and)g(Lab)r(el)g Ft(")p Fk(frequency)p Ft(")p
-Fk(,)f(then)i(c)n(hanging)227 1697 y(its)j(Unit)g(to)g
-Ft(")p Fk(log\(Hz\))p Ft(")e Fk(will)i(c)n(hange)e(its)i(Lab)r(el)g(to)
-f Ft(")p Fk(log\()f(frequency)i(\))p Ft(")p Fk(.)54 b(In)34
-b(addition,)h(the)f(Axis)f(F)-7 b(ormat)227 1796 y(attribute)28
-b(will)g(b)r(e)g(cleared)e(when-ev)n(er)h(a)g(new)h(v)-5
-b(alue)27 b(is)h(assigned)e(to)h(the)h(Unit)h(attribute.)227
-1921 y(Note,)h(if)f(a)g(.TR)n(UE.)g(v)-5 b(alue)29 b(is)g(set)g(for)f
-(the)i(Activ)n(eUnit)f(\015ag,)g(then)g(c)n(hanging)f(a)h(Unit)h(v)-5
-b(alue)29 b(for)f(the)h(curren)n(t)227 2021 y(F)-7 b(rame)29
-b(within)h(a)f(F)-7 b(rameSet)29 b(will)h(result)f(in)h(the)f(F)-7
-b(rame)29 b(b)r(eing)h(re-mapp)r(ed)e(\(that)i(is,)g(the)g(Mappings)f
-(whic)n(h)227 2120 y(de\014ne)d(the)f(relationships)f(b)r(et)n(w)n(een)
-i(F)-7 b(rames)24 b(within)i(the)f(F)-7 b(rameSet)25
-b(will)h(b)r(e)f(mo)r(di\014ed)h(to)f(tak)n(e)g(in)n(to)f(accoun)n(t)
-227 2220 y(the)k(c)n(hange)f(in)h(Units\).)0 2370 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_SETACTIVEUN)o(IT\()37
-b(THIS,)k(VALUE,)g(STATUS)h(\))0 2519 y Fc(Argumen)m(ts:)259
-2656 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 2756
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259 2889
-y Fc(V)c(ALUE)33 b(=)f(LOGICAL)h(\(Giv)m(en\))427 2989
-y Fk(The)28 b(new)g(v)-5 b(alue)27 b(to)h(use.)259 3122
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 3221 y Fk(The)c(global)e(status.)0 3383 y Fc(Class)31
-b(Applicabilit)m(y:)259 3520 y(SkyF)-8 b(rame)427 3620
-y Fk(The)25 b(Activ)n(eUnit)h(\015ag)e(for)g(a)h(SkyF)-7
-b(rame)24 b(is)g(alw)n(a)n(ys)f(.F)-9 b(ALSE.)25 b(\(an)n(y)f(v)-5
-b(alue)25 b(supplied)g(using)g(this)g(routine)427 3719
-y(is)j(ignored\).)259 3853 y Fc(Sp)s(ecF)-8 b(rame)427
-3952 y Fk(The)24 b(Activ)n(eUnit)h(\015ag)f(for)f(a)h(Sp)r(ecF)-7
-b(rame)24 b(is)g(alw)n(a)n(ys)e(.TR)n(UE.)i(\(an)n(y)f(v)-5
-b(alue)24 b(supplied)h(using)f(this)g(routine)427 4052
-y(is)k(ignored\).)259 4185 y Fc(FluxF)-8 b(rame)427 4284
-y Fk(The)25 b(Activ)n(eUnit)f(\015ag)g(for)g(a)f(FluxF)-7
-b(rame)24 b(is)g(alw)n(a)n(ys)e(.TR)n(UE.)i(\(an)n(y)g(v)-5
-b(alue)24 b(supplied)h(using)f(this)g(routine)427 4384
-y(is)k(ignored\).)259 4517 y Fc(CmpF)-8 b(rame)427 4617
-y Fk(The)26 b(default)g(Activ)n(eUnit)g(\015ag)e(for)h(a)g(CmpF)-7
-b(rame)25 b(is)h(.TR)n(UE.)f(if)h(b)r(oth)g(of)f(the)h(comp)r(onen)n(t)
-f(F)-7 b(rames)25 b(are)427 4716 y(using)j(activ)n(e)f(units,)i(and)f
-(.F)-9 b(ALSE.)28 b(otherwise.)38 b(When)28 b(a)g(new)g(v)-5
-b(alue)28 b(is)g(set)g(for)g(the)g(Activ)n(eUnit)h(\015ag,)427
-4816 y(the)e(\015ag)e(v)-5 b(alue)26 b(is)g(propagated)e(to)i(the)h
-(comp)r(onen)n(t)e(F)-7 b(rames.)36 b(This)26 b(c)n(hange)f(will)h(b)r
-(e)h(re\015ected)e(through)427 4916 y(all)j(references)e(to)h(the)h
-(comp)r(onen)n(t)g(F)-7 b(rames,)27 b(not)g(just)h(those)g
-(encapsulated)f(within)h(the)g(CmpF)-7 b(rame.)259 5049
-y Fc(Region:)427 5148 y Fk(Regions)27 b(alw)n(a)n(ys)f(use)h(activ)n(e)
-g(units)h(if)g(p)r(ossible.)0 5310 y Fc(Notes:)340 5593
-y Fj(\017)45 b Fk(The)28 b(Activ)n(eUnit)g(\015ag)f(resem)n(bles)f(a)h
-(F)-7 b(rame)27 b(attribute,)g(except)h(that)g(it)f(cannot)g(b)r(e)h
-(tested)g(or)f(cleared,)427 5693 y(and)h(it)g(cannot)f(b)r(e)h
-(accessed)e(using)h(the)h(generic)f(AST)p Ft(_)p Fk(GET)p
-Fm(<)p Fk(X)p Fm(>)g Fk(and)g(AST)p Ft(_)p Fk(SET)p Fm(<)p
-Fk(X)p Fm(>)g Fk(routines.)p eop end
-%%Page: 331 341
-TeXDict begin 331 340 bop 3643 52 a FG(331)340 351 y
-Fj(\017)45 b Fk(The)33 b(AST)p Ft(_)p Fk(GET)-7 b(A)n(CTIVEUNIT)33
-b(routine)g(can)g(b)r(e)g(used)g(to)g(retriev)n(e)f(the)h(curren)n(t)f
-(v)-5 b(alue)33 b(of)g(the)h(Ac-)427 451 y(tiv)n(eUnit)28
-b(\015ag.)p 0 634 3780 12 v 0 765 a FA(AST)p Fe(_)p FA(SETFITS)p
-Fb(<)p FA(X)p Fb(>)1326 766 y Fd(Store)38 b(a)g(k)m(eyw)m(ord)e(v)-7
-b(alue)1536 880 y(in)38 b(a)h(FitsChan)2605 765 y FA(AST)p
-Fe(_)p FA(SETFITS)p Fb(<)p FA(X)p Fb(>)0 1030 y Fc(Description:)44
-b Fk(This)29 b(is)f(a)f(family)i(of)f(routines)g(whic)n(h)g(store)f(v)
--5 b(alues)28 b(for)f(named)i(k)n(eyw)n(ords)d(within)j(a)e(FitsChan)i
-(at)227 1130 y(the)i(curren)n(t)f(card)g(p)r(osition.)46
-b(The)31 b(supplied)g(k)n(eyw)n(ord)d(v)-5 b(alue)31
-b(can)f(either)h(o)n(v)n(er-write)d(an)i(existing)g(k)n(eyw)n(ord)227
-1229 y(v)-5 b(alue,)28 b(or)f(can)g(b)r(e)h(inserted)f(as)g(a)g(new)h
-(header)f(card)f(in)n(to)i(the)g(FitsChan.)227 1350 y(The)h(k)n(eyw)n
-(ord)e(data)h(t)n(yp)r(e)h(is)g(selected)g(b)n(y)f(replacing)g
-Fm(<)p Fk(X)p Fm(>)g Fk(in)h(the)g(routine)f(name)h(b)n(y)f(one)h(of)g
-(the)g(follo)n(wing)227 1449 y(strings)e(represen)n(ting)f(the)i
-(recognised)e(FITS)i(data)f(t)n(yp)r(es:)340 1698 y Fj(\017)45
-b Fk(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 1823 y Fj(\017)45 b Fk(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 1948 y Fj(\017)45 b Fk(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 2073 y Fj(\017)45 b Fk(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 2198 y Fj(\017)45
-b Fk(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)340 2323 y Fj(\017)45 b Fk(S)28 b(-)f(String)h(v)-5
-b(alues.)340 2448 y Fj(\017)45 b Fk(CN)32 b(-)g(A)g Ft(")p
-Fk(CONTINUE)p Ft(")e Fk(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n
-(e)g(string)g(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-2547 y(an)d(equals)e(sign.)227 2701 y(The)i(data)f(t)n(yp)r(e)h(of)f
-(the)h Ft(")p Fk(v)-5 b(alue)p Ft(")27 b Fk(parameter)f(dep)r(ends)i
-(on)f Fm(<)p Fk(X)p Fm(>)h Fk(as)e(follo)n(ws:)340 2950
-y Fj(\017)45 b Fk(CF)31 b(-)g(DOUBLE)f(PRECISION\(2\))g(\(a)g(2)h
-(elemen)n(t)g(arra)n(y)d(holding)i(the)h(real)f(and)h(imaginary)e
-(parts)h(of)427 3050 y(the)e(complex)f(v)-5 b(alue\).)340
-3175 y Fj(\017)45 b Fk(CI)32 b(-)f(INTEGER\(2\))h(\(a)f(2)g(elemen)n(t)
-h(arra)n(y)d(holding)i(the)h(real)f(and)h(imaginary)e(parts)g(of)i(the)
-g(complex)427 3274 y(v)-5 b(alue\).)340 3399 y Fj(\017)45
-b Fk(F)28 b(-)f(DOUBLE)h(PRECISION.)340 3524 y Fj(\017)45
-b Fk(I)28 b(-)f(INTEGER)340 3649 y Fj(\017)45 b Fk(L)28
-b(-)f(LOGICAL)340 3774 y Fj(\017)45 b Fk(S)28 b(-)f(CHARA)n(CTER)340
-3898 y Fj(\017)45 b Fk(CN)28 b(-)g(CHARA)n(CTER)0 4052
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SETFITS)p
-Fm(<)p Ft(X)p Fm(>)p Ft(\()37 b(THIS,)42 b(NAME,)f(VALUE,)g(COMMENT,)f
-(OVERWRITE,)g(STATUS)h(\))0 4194 y Fc(Argumen)m(ts:)259
-4322 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4422
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 4547
-y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 4646 y Fk(A)25 b(c)n(haracter)d(string)i(con)n
-(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35 b(This)25
-b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427 4746
-y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g(is)g
-(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n(haracters)f
-(are)427 4846 y(read)h(from)g(this)h(string.)259 4970
-y Fc(V)-11 b(ALUE)33 b(=)f Fm(<)p Fc(X)p Fm(>)p Fc(t)m(yp)s(e)g(\(Giv)m
-(en\))427 5070 y Fk(The)20 b(k)n(eyw)n(ord)d(v)-5 b(alue)19
-b(to)g(store)g(with)h(the)f(named)h(k)n(eyw)n(ord.)32
-b(The)19 b(data)g(t)n(yp)r(e)g(of)h(this)f(parameter)f(dep)r(ends)427
-5170 y(on)28 b Fm(<)p Fk(X)p Fm(>)f Fk(as)g(describ)r(ed)g(ab)r(o)n(v)n
-(e.)259 5295 y Fc(COMMENT)k(=)h(CHARA)m(CTER)f Fj(\003)h
-Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5394 y Fk(A)i(string)e
-(holding)h(a)f(commen)n(t)h(to)g(asso)r(ciated)f(with)h(the)h(k)n(eyw)n
-(ord.)51 b(If)34 b(a)e(blank)h(string)f(is)h(supplied,)427
-5494 y(then)c(an)n(y)e(commen)n(t)h(included)h(in)f(the)g(string)g
-(supplied)g(for)g(the)g(NAME)g(parameter)f(is)h(used)g(instead.)427
-5593 y(If)f(NAME)f(con)n(tains)f(no)h(commen)n(t,)h(then)f(an)n(y)f
-(existing)h(commen)n(t)g(in)h(the)f(card)f(b)r(eing)i(o)n(v)n
-(er-written)d(is)427 5693 y(retained.)37 b(Otherwise,)26
-b(no)i(commen)n(t)f(is)h(stored)e(with)j(the)f(card.)p
-eop end
-%%Page: 332 342
-TeXDict begin 332 341 bop 0 52 a FG(332)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(O)m(VER)-11
-b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427 451 y Fk(If)27
-b(.TR)n(UE.,)f(the)g(new)g(card)f(formed)g(from)h(the)g(supplied)g(k)n
-(eyw)n(ord)e(name,)i(v)-5 b(alue)26 b(and)g(commen)n(t)f(string)427
-551 y(o)n(v)n(er-writes)30 b(the)j(curren)n(t)f(card,)i(and)e(the)h
-(curren)n(t)f(card)g(is)h(incremen)n(ted)f(to)h(refer)f(to)g(the)i
-(next)e(card)427 650 y(\(see)c(the)h Ft(")p Fk(Card)p
-Ft(")e Fk(attribute\).)39 b(If)28 b(.F)-9 b(ALSE.,)29
-b(the)f(new)h(card)e(is)h(inserted)g(in)h(fron)n(t)e(of)i(the)f(curren)
-n(t)f(card)427 750 y(and)h(the)h(curren)n(t)f(card)f(is)h(left)h(unc)n
-(hanged.)39 b(In)28 b(either)g(case,)g(if)h(the)g(curren)n(t)e(card)h
-(on)g(en)n(try)f(p)r(oin)n(ts)i(to)427 849 y(the)f Ft(")p
-Fk(end-of-\014le)p Ft(")p Fk(,)f(the)h(new)f(card)g(is)g(app)r(ended)h
-(to)g(the)g(end)g(of)f(the)h(list.)259 986 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-1085 y Fk(The)c(global)e(status.)0 1254 y Fc(Notes:)340
-1544 y Fj(\017)45 b Fk(The)39 b(routine)f(AST)p Ft(_)p
-Fk(SETFITSU)g(can)g(b)r(e)h(used)g(to)f(indicate)g(that)h(no)f(v)-5
-b(alue)39 b(is)f(asso)r(ciated)f(with)i(a)427 1644 y(k)n(eyw)n(ord.)340
-1780 y Fj(\017)45 b Fk(The)29 b(routine)f(AST)p Ft(_)p
-Fk(SETFITSCM)g(can)h(b)r(e)f(used)h(to)f(store)g(a)g(pure)g(commen)n(t)
-h(card)e(\(i.e.)40 b(a)28 b(card)g(with)427 1880 y(a)f(blank)h(k)n(eyw)
-n(ord\).)340 2016 y Fj(\017)45 b Fk(T)-7 b(o)22 b(assign)e(a)i(new)g(v)
--5 b(alue)21 b(for)h(an)f(existing)h(k)n(eyw)n(ord)d(within)k(a)e
-(FitsChan,)i(\014rst)f(\014nd)g(the)h(card)d(describing)427
-2116 y(the)29 b(k)n(eyw)n(ord)d(using)i(AST)p Ft(_)p
-Fk(FINDFITS,)h(and)f(then)h(use)f(one)f(of)i(the)f(AST)p
-Ft(_)p Fk(SETFITS)p Fm(<)p Fk(X)p Fm(>)g Fk(family)g(to)427
-2215 y(o)n(v)n(er-write)d(the)j(old)g(v)-5 b(alue.)340
-2352 y Fj(\017)45 b Fk(If,)25 b(on)e(exit,)h(there)f(are)f(no)h(cards)f
-(follo)n(wing)g(the)h(card)g(written)g(b)n(y)g(this)g(routine,)h(then)g
-(the)f(curren)n(t)f(card)427 2451 y(is)28 b(left)g(p)r(oin)n(ting)g(at)
-f(the)h Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)340 2588
-y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h
-(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g
-(requiremen)n(ts.)p 0 2794 3780 12 v 0 2925 a FA(AST)p
-Fe(_)p FA(SETFITSCM)1326 2926 y Fd(Store)37 b(a)i(commen)m(t)e(card)
-1536 3026 y(in)h(a)h(FitsChan)2664 2925 y FA(AST)p Fe(_)p
-FA(SETFITSCM)0 3203 y Fc(Description:)44 b Fk(This)31
-b(routine)g(stores)f(a)h(commen)n(t)g(card)f(\()i(i.e.)47
-b(a)31 b(card)f(with)i(no)f(k)n(eyw)n(ord)e(name)i(or)f(equals)h
-(sign\))227 3303 y(within)j(a)f(FitsChan)g(at)g(the)h(curren)n(t)e
-(card)h(p)r(osition.)53 b(The)34 b(new)f(card)f(can)h(either)g(o)n(v)n
-(er-write)e(an)i(existing)227 3402 y(card,)27 b(or)g(can)g(b)r(e)h
-(inserted)f(as)g(a)g(new)h(card)f(in)n(to)g(the)h(FitsChan.)0
-3559 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SETFITSCM\()37
-b(THIS,)42 b(COMMENT,)e(OVERWRITE,)g(STATUS)h(\))0 3715
-y Fc(Argumen)m(ts:)259 3859 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-3959 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-4095 y Fc(COMMENT)j(=)h(CHARA)m(CTER)f Fj(\003)h Fc(\()g
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4195 y Fk(A)f(string)f(holding)g
-(the)h(text)g(of)f(the)h(commen)n(t)g(card.)45 b(If)31
-b(a)f(blank)g(string)g(is)g(supplied,)i(then)f(a)f(totally)427
-4294 y(blank)e(card)e(is)i(pro)r(duced.)259 4431 y Fc(O)m(VER)-11
-b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427 4530 y Fk(If)h(.TR)n(UE.,)h
-(the)f(new)f(card)g(o)n(v)n(er-writes)e(the)j(curren)n(t)f(card,)h(and)
-f(the)h(curren)n(t)f(card)f(is)i(incremen)n(ted)427 4630
-y(to)c(refer)e(to)i(the)f(next)h(card)f(\(see)g(the)h
-Ft(")p Fk(Card)p Ft(")e Fk(attribute\).)39 b(If)29 b(.F)-9
-b(ALSE.,)29 b(the)g(new)f(card)g(is)g(inserted)g(in)427
-4729 y(fron)n(t)d(of)h(the)g(curren)n(t)f(card)g(and)g(the)h(curren)n
-(t)f(card)g(is)g(left)h(unc)n(hanged.)36 b(In)26 b(either)f(case,)g(if)
-h(the)g(curren)n(t)427 4829 y(card)h(on)g(en)n(try)g(p)r(oin)n(ts)h(to)
-f(the)h Ft(")p Fk(end-of-\014le)p Ft(")p Fk(,)f(the)h(new)f(card)g(is)h
-(app)r(ended)f(to)h(the)g(end)g(of)f(the)h(list.)259
-4966 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5065 y Fk(The)c(global)e(status.)0 5234
-y Fc(Notes:)340 5524 y Fj(\017)45 b Fk(If,)34 b(on)d(exit,)j(there)d
-(are)g(no)h(cards)f(follo)n(wing)g(the)h(card)f(written)h(b)n(y)g(this)
-g(function,)i(then)e(the)g(curren)n(t)427 5623 y(card)27
-b(is)g(left)i(p)r(oin)n(ting)e(at)h(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)p eop end
-%%Page: 333 343
-TeXDict begin 333 342 bop 3643 52 a FG(333)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(SETFITSU)1178 483 y Fd(Store)37
-b(an)i(unde\014ned)g(k)m(eyw)m(ord)1385 598 y(v)-7 b(alue)38
-b(in)h(a)f(FitsChan)2785 482 y FA(AST)p Fe(_)p FA(SETFITSU)0
-779 y Fc(Description:)44 b Fk(This)36 b(routine)e(stores)h(an)g
-(unde\014ned)g(v)-5 b(alue)36 b(for)e(a)h(named)g(k)n(eyw)n(ord)f
-(within)i(a)f(FitsChan)g(at)g(the)227 879 y(curren)n(t)c(card)f(p)r
-(osition.)49 b(The)31 b(new)h(unde\014ned)g(v)-5 b(alue)31
-b(can)g(either)h(o)n(v)n(er-write)d(an)i(existing)g(k)n(eyw)n(ord)f(v)
--5 b(alue,)227 979 y(or)27 b(can)g(b)r(e)h(inserted)g(as)e(a)i(new)f
-(header)g(card)g(in)n(to)g(the)h(FitsChan.)0 1144 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(CALL)42 b(AST_SETFITSU\()c(THIS,)j(NAME,)h(COMMENT,)e
-(OVERWRITE,)g(STATUS)h(\))0 1310 y Fc(Argumen)m(ts:)259
-1463 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1562
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 1703
-y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 1803 y Fk(A)25 b(c)n(haracter)d(string)i(con)n
-(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35 b(This)25
-b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427 1903
-y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g(is)g
-(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n(haracters)f
-(are)427 2002 y(read)h(from)g(this)h(string.)259 2143
-y Fc(COMMENT)j(=)h(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 2243 y Fk(A)i(string)e(holding)h(a)f(commen)n
-(t)h(to)g(asso)r(ciated)f(with)h(the)h(k)n(eyw)n(ord.)51
-b(If)34 b(a)e(blank)h(string)f(is)h(supplied,)427 2342
-y(then)c(an)n(y)e(commen)n(t)h(included)h(in)f(the)g(string)g(supplied)
-g(for)g(the)g(NAME)g(parameter)f(is)h(used)g(instead.)427
-2442 y(If)f(NAME)f(con)n(tains)f(no)h(commen)n(t,)h(then)f(an)n(y)f
-(existing)h(commen)n(t)g(in)h(the)f(card)f(b)r(eing)i(o)n(v)n
-(er-written)d(is)427 2542 y(retained.)37 b(Otherwise,)26
-b(no)i(commen)n(t)f(is)h(stored)e(with)j(the)f(card.)259
-2683 y Fc(O)m(VER)-11 b(WRITE)32 b(=)g(LOGICAL)g(\(Giv)m(en\))427
-2782 y Fk(If)d(.TR)n(UE.,)f(the)h(new)f(card)f(formed)h(from)g(the)g
-(supplied)h(k)n(eyw)n(ord)d(name)i(and)g(commen)n(t)g(string)g(o)n(v)n
-(er-)427 2882 y(writes)33 b(the)g(curren)n(t)g(card,)g(and)g(the)h
-(curren)n(t)e(card)g(is)h(incremen)n(ted)g(to)g(refer)g(to)g(the)g
-(next)g(card)g(\(see)427 2982 y(the)c Ft(")p Fk(Card)p
-Ft(")e Fk(attribute\).)40 b(If)29 b(.F)-9 b(ALSE.,)29
-b(the)g(new)f(card)g(is)g(inserted)g(in)h(fron)n(t)f(of)h(the)g(curren)
-n(t)e(card)h(and)427 3081 y(the)i(curren)n(t)e(card)h(is)g(left)h(unc)n
-(hanged.)41 b(In)30 b(either)f(case,)g(if)h(the)f(curren)n(t)g(card)f
-(on)h(en)n(try)g(p)r(oin)n(ts)g(to)g(the)427 3181 y Ft(")p
-Fk(end-of-\014le)p Ft(")p Fk(,)e(the)h(new)f(card)g(is)g(app)r(ended)h
-(to)g(the)g(end)g(of)f(the)h(list.)259 3322 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3421 y Fk(The)c(global)e(status.)0 3600 y Fc(Notes:)340
-3898 y Fj(\017)45 b Fk(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f
-(follo)n(wing)g(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)
-e(the)g(curren)n(t)427 3998 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e
-(at)h(the)g Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)340
-4139 y Fj(\017)45 b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g
-(requiremen)n(ts.)p 0 4354 V 0 4485 a FA(AST)p Fe(_)p
-FA(SETREFPOS)1462 4486 y Fd(Set)39 b(the)f(reference)1333
-4586 y(p)s(osition)f(in)i(a)f(sp)s(eci\014ed)1400 4700
-y(celestial)f(co)s(ordinate)1715 4800 y(system)2651 4485
-y FA(AST)p Fe(_)p FA(SETREFPOS)0 5010 y Fc(Description:)44
-b Fk(This)25 b(routine)f(sets)g(the)g(reference)g(p)r(osition)g(\(see)g
-(attributes)g(RefRA)h(and)f(RefDec\))i(using)e(axis)f(v)-5
-b(al-)227 5109 y(ues)19 b(\(in)h(radians\))e(supplied)i(within)g(the)f
-(celestial)g(co)r(ordinate)f(system)h(represen)n(ted)f(b)n(y)h(a)g
-(supplied)g(SkyF)-7 b(rame.)0 5275 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_SETREFPOS\()37 b(THIS,)42 b(FRM,)g(LON,)g(LAT,)g
-(STATUS)f(\))0 5441 y Fc(Argumen)m(ts:)259 5593 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Sp)r(ecF)-7 b(rame.)p eop end
-%%Page: 334 344
-TeXDict begin 334 343 bop 0 52 a FG(334)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FRM)g(=)h(INTEGER)g
-(\(Giv)m(en\))427 451 y Fk(P)n(oin)n(ter)23 b(to)i(the)g(SkyF)-7
-b(rame)24 b(whic)n(h)g(de\014nes)h(the)g(celestial)f(co)r(ordinate)g
-(system)g(in)h(whic)n(h)g(the)g(longitude)427 551 y(and)e(latitude)h(v)
--5 b(alues)23 b(are)g(supplied.)35 b(If)24 b(AST)p Ft(__)p
-Fk(NULL)f(is)h(supplied,)g(then)g(the)g(supplied)g(longitude)f(and)427
-650 y(latitude)28 b(v)-5 b(alues)28 b(are)e(assumed)h(to)h(b)r(e)g(FK5)
-f(J2000)e(RA)j(and)f(Dec)h(v)-5 b(alues.)259 787 y Fc(LON)32
-b(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 887 y Fk(The)i(longitude)g
-(of)f(the)h(reference)f(p)r(oin)n(t,)i(in)f(the)g(co)r(ordinate)f
-(system)g(represen)n(ted)g(b)n(y)g(the)h(supplied)427
-986 y(SkyF)-7 b(rame)27 b(\(radians\).)259 1123 y Fc(LA)-8
-b(T)33 b(=)f(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 1223
-y Fk(The)37 b(latitude)h(of)e(the)i(reference)e(p)r(oin)n(t,)j(in)e
-(the)g(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i(the)g
-(supplied)427 1322 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-1459 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1559 y Fk(The)c(global)e(status.)p 0
-1766 3780 12 v 0 1897 a FA(AST)p Fe(_)p FA(SETUNC)1061
-1898 y Fd(Store)37 b(uncertain)m(t)m(y)f(information)f(in)1665
-2011 y(a)j(Region)2886 1897 y FA(AST)p Fe(_)p FA(SETUNC)0
-2213 y Fc(Description:)44 b Fk(Eac)n(h)33 b(Region)h(\(of)g(an)n(y)g
-(class\))f(can)h(ha)n(v)n(e)f(an)h Ft(")p Fk(uncertain)n(t)n(y)p
-Ft(")e Fk(whic)n(h)j(sp)r(eci\014es)f(the)g(uncertain)n(ties)227
-2312 y(asso)r(ciated)27 b(with)i(the)g(b)r(oundary)e(of)h(the)h
-(Region.)38 b(This)29 b(information)e(is)h(supplied)h(in)g(the)f(form)g
-(of)g(a)g(second)227 2412 y(Region.)77 b(The)41 b(uncertain)n(t)n(y)f
-(in)h(an)n(y)f(p)r(oin)n(t)i(on)e(the)i(b)r(oundary)e(of)h(a)g(Region)f
-(is)h(found)g(b)n(y)g(shifting)g(the)227 2512 y(asso)r(ciated)24
-b Ft(")p Fk(uncertain)n(t)n(y)p Ft(")g Fk(Region)g(so)h(that)h(it)f(is)
-g(cen)n(tred)g(at)g(the)h(b)r(oundary)f(p)r(oin)n(t)g(b)r(eing)g
-(considered.)36 b(The)227 2611 y(area)c(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)h(represen)n(ts)e(the)i
-(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)227 2711
-y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g(b)r
-(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)227 2839
-y(The)33 b(uncertain)n(t)n(y)f(is)h(usually)f(sp)r(eci\014ed)i(when)f
-(the)g(Region)f(is)h(created,)g(but)h(this)f(routine)g(allo)n(ws)e(it)i
-(to)g(b)r(e)227 2939 y(c)n(hanged)27 b(at)g(an)n(y)g(time.)0
-3097 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_SETUNC\()d(THIS,)
-i(UNC,)h(STATUS)f(\))0 3254 y Fc(Argumen)m(ts:)259 3399
-y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3498 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Region)f(whic)n(h)g(is)h(to)f(b)r(e)h(assigned)e(a)i(new)f
-(uncertain)n(t)n(y)-7 b(.)259 3635 y Fc(UNC)32 b(=)g(INTEGER)f(\(Giv)m
-(en\))427 3735 y Fk(P)n(oin)n(ter)39 b(to)i(the)f(new)h(uncertain)n(t)n
-(y)f(Region.)74 b(This)41 b(m)n(ust)g(b)r(e)f(of)h(a)f(class)g(for)f
-(whic)n(h)i(all)f(instances)427 3834 y(are)27 b(cen)n(tro-symetric)e
-(\(e.g.)37 b(Bo)n(x,)26 b(Circle,)i(Ellipse,)f(etc.\))37
-b(or)27 b(b)r(e)g(a)g(Prism)g(con)n(taining)g(cen)n(tro-symetric)427
-3934 y(comp)r(onen)n(t)c(Regions.)34 b(A)24 b(deep)f(cop)n(y)f(of)h
-(the)g(supplied)g(Region)f(will)i(b)r(e)f(tak)n(en,)g(so)f(subsequen)n
-(t)h(c)n(hanges)427 4034 y(to)j(the)g(uncertain)n(t)n(y)f(Region)h
-(using)f(the)h(supplied)h(p)r(oin)n(ter)e(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)g(on)g(the)g(Region)f(THIS.)259 4170 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-4270 y Fk(The)c(global)e(status.)p 0 4477 V 0 4608 a
-FA(AST)p Fe(_)p FA(SHIFTMAP)1415 4609 y Fd(Create)37
-b(a)i(ShiftMap)2719 4608 y FA(AST)p Fe(_)p FA(SHIFTMAP)0
-4806 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(ShiftMap)i(and)e(optionally)g(initialises)g(its)h(attributes.)227
-4935 y(A)g(ShiftMap)h(is)e(a)g(linear)g(Mapping)g(whic)n(h)h(shifts)g
-(eac)n(h)f(axis)f(b)n(y)i(a)f(sp)r(eci\014ed)h(constan)n(t)f(v)-5
-b(alue.)0 5092 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_SHIFTMAP\()38 b(NCOORD,)j(SHIFT,)g(OPTIONS,)f(STATUS)h(\))0
-5250 y Fc(Argumen)m(ts:)259 5394 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 5494 y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)
--5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)
-f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-5593 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 5693 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)p eop end
-%%Page: 335 345
-TeXDict begin 335 344 bop 3643 52 a FG(335)259 351 y
-Fc(SHIFT\()33 b(NCOORD)d(\))i(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-451 y Fk(An)25 b(arra)n(y)e(con)n(taining)g(the)i(v)-5
-b(alues)24 b(to)h(b)r(e)g(added)f(on)g(to)h(the)g(input)g(co)r
-(ordinates)e(in)i(order)e(to)i(create)e(the)427 551 y(output)28
-b(co)r(ordinates.)36 b(A)28 b(separate)e(v)-5 b(alue)27
-b(should)h(b)r(e)g(supplied)g(for)f(eac)n(h)g(co)r(ordinate.)259
-677 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 776 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 876 y(used)j(for)g
-(initialising)g(the)g(new)g(ShiftMap.)37 b(The)24 b(syn)n(tax)f(used)h
-(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p Ft(_)p
-Fk(SET)427 976 y(routine.)259 1102 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1201
-y Fk(The)c(global)e(status.)0 1357 y Fc(Returned)32 b(V)-8
-b(alue:)259 1487 y(AST)p Ft(_)p Fc(SHIFTMAP)33 b(=)f(INTEGER)427
-1586 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(ShiftMap.)0
-1741 y Fc(Notes:)340 2017 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 2117 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-2272 y Fc(Status)33 b(Handling)n(:)227 2418 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 2518 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2618 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2804 3780 12 v 0 2934 a FA(AST)p
-Fe(_)p FA(SHO)l(W)919 2935 y Fd(Displa)m(y)38 b(a)h(textual)e(represen)
-m(tation)e(of)k(an)1198 3050 y(Ob)7 b(ject)38 b(on)h(standard)e(output)
-3032 2934 y FA(AST)p Fe(_)p FA(SHO)l(W)0 3226 y Fc(Description:)44
-b Fk(This)29 b(routine)g(displa)n(ys)f(a)h(textual)g(description)g(of)g
-(an)n(y)f(AST)i(Ob)5 b(ject)29 b(on)g(standard)f(output.)42
-b(It)30 b(is)227 3325 y(pro)n(vided)d(primarily)f(as)h(an)h(aid)f(to)g
-(debugging.)0 3468 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_SHOW\()e(THIS,)h(STATUS)g(\))0 3611 y Fc(Argumen)m(ts:)259
-3741 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3840
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g
-(displa)n(y)n(ed.)259 3966 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 4066 y Fk(The)c(global)e(status.)0
-4221 y Fc(Class)31 b(Applicabilit)m(y:)259 4351 y(Ob)5
-b(ject)427 4451 y Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5
-b(jects.)p 0 4637 V 0 4768 a FA(AST)p Fe(_)p FA(SHO)l(WMESH)1433
-4769 y Fd(Displa)m(y)38 b(a)g(mesh)h(of)1403 4883 y(p)s(oin)m(ts)f(co)m
-(v)m(ering)f(the)1401 4998 y(surface)h(of)g(a)h(Region)2636
-4768 y FA(AST)p Fe(_)p FA(SHO)l(WMESH)0 5173 y Fc(Description:)44
-b Fk(This)34 b(routine)g(writes)g(a)f(table)h(to)g(standard)f(output)i
-(con)n(taining)e(the)h(axis)f(v)-5 b(alues)34 b(at)g(a)g(mesh)g(of)227
-5273 y(p)r(oin)n(ts)d(co)n(v)n(ering)e(the)j(surface)e(of)h(the)h
-(supplied)g(Region.)47 b(Eac)n(h)29 b(ro)n(w)h(of)i(output)f(con)n
-(tains)g(a)f(tab-separated)227 5373 y(list)36 b(of)f(axis)f(v)-5
-b(alues,)37 b(one)e(for)g(eac)n(h)f(axis)h(in)g(the)h(F)-7
-b(rame)35 b(encapsulated)f(b)n(y)h(the)h(Region.)59 b(The)36
-b(n)n(um)n(b)r(er)f(of)227 5472 y(p)r(oin)n(ts)28 b(in)g(the)g(mesh)f
-(is)h(determined)g(b)n(y)f(the)h(MeshSize)f(attribute.)227
-5593 y(The)33 b(table)g(is)g(preceeded)g(b)n(y)f(a)h(giv)n(en)f(title)i
-(string,)g(and)e(follo)n(w)n(ed)g(b)n(y)h(a)g(single)f(line)h(con)n
-(taining)f(the)i(w)n(ord)227 5693 y Ft(")p Fk(ENDMESH)p
-Ft(")p Fk(.)p eop end
-%%Page: 336 346
-TeXDict begin 336 345 bop 0 52 a FG(336)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_SHOWMESH\()c(THIS,)j(FORMAT,)g(TTL,)h(STATUS)f
-(\))0 510 y Fc(Argumen)m(ts:)259 655 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 755 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-892 y Fc(F)m(ORMA)-8 b(T)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427
-992 y Fk(A)28 b(b)r(o)r(olean)f(v)-5 b(alue)28 b(indicating)g(if)g(the)
-g(displa)n(y)n(ed)e(axis)h(v)-5 b(alues)28 b(should)f(b)r(e)h
-(formatted)g(according)e(to)h(the)427 1091 y(F)-7 b(ormat)30
-b(attribute)g(asso)r(ciated)e(with)j(the)f(F)-7 b(rame's)29
-b(axis.)43 b(Otherwise,)30 b(they)g(are)f(displa)n(y)n(ed)g(as)g
-(simple)427 1191 y(\015oating)e(p)r(oin)n(t)h(v)-5 b(alues.)259
-1328 y Fc(TTL)33 b(=)f(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1428 y Fk(A)c(title)g(to)g(displa)n
-(y)f(b)r(efore)g(displa)n(ying)g(the)h(\014rst)f(p)r(osition.)259
-1565 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1665 y Fk(The)c(global)e(status.)p 0
-1873 3780 12 v 0 2004 a FA(AST)p Fe(_)p FA(SIMPLIFY)1384
-2005 y Fd(Simplify)37 b(a)h(Mapping)2787 2004 y FA(AST)p
-Fe(_)p FA(SIMPLIFY)0 2208 y Fc(Description:)44 b Fk(This)h(function)g
-(simpli\014es)g(a)f(Mapping)g(\(whic)n(h)h(ma)n(y)e(b)r(e)i(a)f(comp)r
-(ound)h(Mapping)f(suc)n(h)g(as)g(a)227 2307 y(CmpMap\))32
-b(to)g(eliminate)f(redundan)n(t)h(computational)e(steps,)j(or)e(to)g
-(merge)g(separate)f(steps)h(whic)n(h)h(can)f(b)r(e)227
-2407 y(p)r(erformed)c(more)g(e\016cien)n(tly)h(in)g(a)f(single)g(op)r
-(eration.)227 2536 y(As)e(a)g(simple)g(example,)h(a)e(Mapping)h(whic)n
-(h)g(m)n(ultiplied)h(co)r(ordinates)e(b)n(y)h(5,)g(and)g(then)h(m)n
-(ultiplied)f(the)h(result)227 2636 y(b)n(y)35 b(10,)g(could)g(b)r(e)g
-(simpli\014ed)g(to)f(a)h(single)f(step)h(whic)n(h)f(m)n(ultiplied)i(b)n
-(y)e(50.)57 b(Similarly)-7 b(,)36 b(a)e(Mapping)h(whic)n(h)227
-2735 y(m)n(ultiplied)29 b(b)n(y)e(5,)g(and)h(then)g(divided)g(b)n(y)f
-(5,)g(could)h(b)r(e)g(reduced)f(to)g(a)g(simple)h(cop)n(ying)f(op)r
-(eration.)227 2864 y(This)21 b(function)h(should)f(t)n(ypically)g(b)r
-(e)g(applied)h(to)f(Mappings)f(whic)n(h)h(ha)n(v)n(e)f(undergone)h
-(substan)n(tial)f(pro)r(cessing)227 2964 y(or)i(ha)n(v)n(e)f(b)r(een)i
-(formed)f(b)n(y)g(merging)f(other)h(Mappings.)35 b(It)22
-b(is)h(of)f(p)r(oten)n(tial)g(b)r(ene\014t,)j(for)d(example,)h(in)f
-(reducing)227 3063 y(execution)28 b(time)g(if)g(applied)f(b)r(efore)h
-(using)f(a)g(Mapping)g(to)h(transform)e(a)h(large)g(n)n(um)n(b)r(er)g
-(of)g(co)r(ordinates.)0 3222 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SIMPLIFY\()38 b(THIS,)k(STATUS)f(\))0
-3380 y Fc(Argumen)m(ts:)259 3526 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3626 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(original)e(Mapping.)
-259 3763 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3863 y Fk(The)c(global)e(status.)0 4033
-y Fc(Class)31 b(Applicabilit)m(y:)259 4179 y(Mapping)427
-4279 y Fk(This)d(function)g(applies)f(to)h(all)f(Mappings.)259
-4416 y Fc(F)-8 b(rameSet)427 4516 y Fk(If)29 b(the)f(supplied)g
-(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28 b(the)g(returned)g(Mapping)f
-(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g(supplied)427
-4615 y(F)-7 b(rameSet)28 b(in)g(whic)n(h)f(all)g(the)h(in)n(ter-F)-7
-b(rame)27 b(Mappings)g(ha)n(v)n(e)f(b)r(een)i(simpli\014ed.)0
-4786 y Fc(Returned)k(V)-8 b(alue:)259 4932 y(AST)p Ft(_)p
-Fc(SIMPLIFY)33 b(=)f(INTEGER)427 5031 y Fk(A)c(new)g(p)r(oin)n(ter)f
-(to)h(the)g(\(p)r(ossibly)f(simpli\014ed\))h(Mapping.)0
-5202 y Fc(Notes:)340 5494 y Fj(\017)45 b Fk(This)39 b(function)g(can)g
-(safely)f(b)r(e)h(applied)g(ev)n(en)f(to)h(Mappings)f(whic)n(h)h
-(cannot)f(b)r(e)i(simpli\014ed.)71 b(If)39 b(no)427 5593
-y(simpli\014cation)30 b(is)g(p)r(ossible,)h(it)g(b)r(eha)n(v)n(es)e
-(exactly)h(lik)n(e)f(AST)p Ft(_)p Fk(CLONE)h(and)g(returns)f(a)h(p)r
-(oin)n(ter)g(to)g(the)427 5693 y(original)c(Mapping.)p
-eop end
-%%Page: 337 347
-TeXDict begin 337 346 bop 3643 52 a FG(337)340 351 y
-Fj(\017)45 b Fk(The)40 b(Mapping)g(returned)g(b)n(y)g(this)g(function)h
-(ma)n(y)e(not)h(b)r(e)h(indep)r(enden)n(t)g(of)f(the)h(original)d(\(ev)
-n(en)i(if)427 451 y(simpli\014cation)34 b(w)n(as)e(p)r(ossible\),)j
-(and)f(mo)r(difying)f(it)i(ma)n(y)d(therefore)h(result)g(in)h(indirect)
-g(mo)r(di\014cation)427 551 y(of)29 b(the)h(original.)40
-b(If)30 b(a)f(completely)g(indep)r(enden)n(t)h(result)f(is)g(required,)
-g(a)g(cop)n(y)f(should)h(b)r(e)h(made)f(using)427 650
-y(AST)p Ft(_)p Fk(COPY.)340 779 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 878
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1069 3780 12 v 0 1199
-a FA(AST)p Fe(_)p FA(SKYFRAME)1398 1200 y Fd(Create)37
-b(a)i(SkyF)-10 b(rame)2664 1199 y FA(AST)p Fe(_)p FA(SKYFRAME)0
-1380 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(SkyF)-7 b(rame)27 b(and)h(optionally)e(initialises)i(its)f
-(attributes.)227 1502 y(A)h(SkyF)-7 b(rame)26 b(is)h(a)f(sp)r
-(ecialised)h(form)f(of)h(F)-7 b(rame)27 b(whic)n(h)f(describ)r(es)h
-(celestial)f(longitude/latitude)h(co)r(ordinate)227 1602
-y(systems.)53 b(The)33 b(particular)f(celestial)h(co)r(ordinate)f
-(system)h(to)g(b)r(e)g(represen)n(ted)f(is)h(sp)r(eci\014ed)g(b)n(y)g
-(setting)g(the)227 1702 y(SkyF)-7 b(rame's)33 b(System)g(attribute)h
-(\(curren)n(tly)-7 b(,)34 b(the)g(default)g(is)f(ICRS\))h(quali\014ed,)
-h(as)d(necessary)-7 b(,)34 b(b)n(y)f(a)g(mean)227 1801
-y(Equino)n(x)27 b(v)-5 b(alue)27 b(and/or)f(an)h(Ep)r(o)r(c)n(h.)227
-1924 y(F)-7 b(or)28 b(eac)n(h)f(of)g(the)i(supp)r(orted)e(celestial)h
-(co)r(ordinate)e(systems,)i(a)f(SkyF)-7 b(rame)27 b(can)h(apply)f(an)h
-(optional)f(shift)i(of)227 2023 y(origin)21 b(to)h(create)f(a)h(co)r
-(ordinate)f(system)h(represen)n(ting)e(o\013sets)i(within)h(the)g
-(celestial)e(co)r(ordinate)g(system)h(from)227 2123 y(some)33
-b(sp)r(eci\014ed)h(p)r(oin)n(t.)55 b(This)34 b(o\013set)f(co)r
-(ordinate)g(system)g(can)g(also)g(b)r(e)h(rotated)f(to)g(de\014ne)h
-(new)g(longitude)227 2222 y(and)28 b(latitude)g(axes.)36
-b(See)27 b(attributes)h(SkyRef,)g(SkyRefIs)f(and)h(SkyRefP)227
-2345 y(All)34 b(the)f(co)r(ordinate)f(v)-5 b(alues)33
-b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g(radians.)52
-b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-2444 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n
-(y)g(using)g(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T.)0 2589
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_SKYFRAME\()38
-b(OPTIONS,)j(STATUS)g(\))0 2734 y Fc(Argumen)m(ts:)259
-2866 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 2966 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 3066 y(used)i(for)e
-(initialising)i(the)f(new)h(SkyF)-7 b(rame.)34 b(The)22
-b(syn)n(tax)g(used)g(is)g(iden)n(tical)h(to)f(that)g(for)g(the)h(AST)p
-Ft(_)p Fk(SET)427 3165 y(routine.)37 b(If)28 b(no)f(initialisation)g
-(is)h(required,)e(a)i(blank)f(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h
-(supplied.)259 3294 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)
-h(and)g(Returned\))427 3393 y Fk(The)c(global)e(status.)0
-3551 y Fc(Returned)32 b(V)-8 b(alue:)259 3683 y(AST)p
-Ft(_)p Fc(SKYFRAME)31 b(=)i(INTEGER)427 3782 y Fk(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(SkyF)-7 b(rame.)0
-3940 y Fc(Examples:)227 4076 y Fy(FRAME)47 b(=)g(AST)p
-Ft(_)p Fy(SKYFRAME\()d(')k(',)f(STATUS)f(\))427 4171
-y Fk(Creates)27 b(a)g(SkyF)-7 b(rame)27 b(to)g(describ)r(e)g(the)h
-(default)h(ICRS)e(celestial)g(co)r(ordinate)g(system.)227
-4288 y Fy(FRAME)47 b(=)g(AST)p Ft(_)p Fy(SKYFRAME\()d('System)i(=)h
-(FK5,)g(Equinox)f(=)h(J2005,)f(Digits)g(=)i(10',)227
-4387 y(STATUS)e(\))427 4461 y Fk(Creates)23 b(a)g(SkyF)-7
-b(rame)23 b(to)h(describ)r(e)f(the)h(FK5)f(celestial)g(co)r(ordinate)g
-(system,)h(with)g(a)g(mean)f(Equino)n(x)g(of)427 4560
-y(J2005.0.)33 b(Because)23 b(esp)r(ecially)g(accurate)f(co)r(ordinates)
-g(will)i(b)r(e)g(used,)g(additional)f(precision)g(\(10)f(digits\))427
-4660 y(has)27 b(b)r(een)h(requested.)37 b(This)27 b(will)h(b)r(e)g
-(used)g(when)f(co)r(ordinate)g(v)-5 b(alues)27 b(are)g(formatted)g(for)
-g(displa)n(y)-7 b(.)227 4789 y Fy(FRAME)47 b(=)g(AST)p
-Ft(_)p Fy(SKYFRAME\()d('System)i(=)h(FK4,)g(Equinox)f(=)h(1955-SEP-2',)
-e(STATUS)h(\))427 4888 y Fk(Creates)32 b(a)g(SkyF)-7
-b(rame)31 b(to)i(describ)r(e)f(the)h(old)f(FK4)g(celestial)g(co)r
-(ordinate)f(system.)51 b(A)33 b(default)g(Ep)r(o)r(c)n(h)427
-4988 y(v)-5 b(alue)28 b(\(B1950.0\))d(is)j(used,)g(but)g(the)g(mean)f
-(Equino)n(x)f(v)-5 b(alue)28 b(is)f(giv)n(en)g(explicitly)h(as)f
-Ft(")p Fk(1955-SEP-2)p Ft(")p Fk(.)227 5117 y Fy(FRAME)47
-b(=)g(AST)p Ft(_)p Fy(SKYFRAME\()d('System)i(=)h(GAPPT,)f(Epoch)h(=)g
-(')h(//)f(DATE,)f(STATUS)g(\))427 5216 y Fk(Creates)32
-b(a)h(SkyF)-7 b(rame)32 b(to)h(describ)r(e)f(the)i(Geo)r(cen)n(tric)e
-(Apparen)n(t)h(celestial)f(co)r(ordinate)g(system.)53
-b(The)427 5315 y(Ep)r(o)r(c)n(h)37 b(v)-5 b(alue,)39
-b(whic)n(h)e(sp)r(eci\014es)g(the)g(date)g(of)g(observ)-5
-b(ation,)38 b(is)f(obtained)f(from)h(a)f(date/time)h(string)427
-5415 y(con)n(tained)27 b(in)h(the)g(c)n(haracter)e(v)-5
-b(ariable)26 b(D)n(A)-7 b(TE.)0 5572 y Fc(Notes:)p eop
-end
-%%Page: 338 348
-TeXDict begin 338 347 bop 0 52 a FG(338)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(Curren)n(tly)-7 b(,)26 b(the)g(default)h(celestial)e(co)r
-(ordinate)g(system)g(is)h(ICRS.)h(Ho)n(w)n(ev)n(er,)d(this)i(default)h
-(ma)n(y)e(c)n(hange)427 451 y(in)34 b(future)g(as)f(new)h(astrometric)e
-(standards)g(ev)n(olv)n(e.)54 b(The)33 b(in)n(ten)n(tion)h(is)g(to)f
-(trac)n(k)f(the)i(most)g(mo)r(dern)427 551 y(appropriate)e(standard.)55
-b(F)-7 b(or)33 b(this)h(reason,)g(y)n(ou)f(should)g(use)h(the)g
-(default)g(only)g(if)g(this)g(is)g(what)f(y)n(ou)427
-650 y(in)n(tend)j(\(and)f(can)f(tolerate)g(an)n(y)g(asso)r(ciated)g
-(sligh)n(t)g(c)n(hange)g(in)h(b)r(eha)n(viour)f(with)h(future)h(v)n
-(ersions)d(of)427 750 y(this)d(function\).)43 b(If)30
-b(y)n(ou)e(in)n(tend)i(to)f(use)g(the)h(ICRS)f(system)h(inde\014nitely)
--7 b(,)30 b(then)g(y)n(ou)e(should)i(sp)r(ecify)f(it)427
-849 y(explicitly)f(using)f(an)h(OPTIONS)e(v)-5 b(alue)28
-b(of)f Ft(")p Fk(System=ICRS)p Ft(")p Fk(.)340 988 y
-Fj(\017)45 b Fk(Whic)n(hev)n(er)25 b(celestial)g(co)r(ordinate)f
-(system)h(is)g(represen)n(ted,)g(it)h(will)g(ha)n(v)n(e)e(t)n(w)n(o)g
-(axes.)36 b(The)25 b(\014rst)g(of)h(these)427 1088 y(will)f(b)r(e)f
-(the)h(longitude)f(axis)g(and)g(the)h(second)e(will)i(b)r(e)f(the)h
-(latitude)g(axis.)35 b(This)24 b(order)f(can)h(b)r(e)h(c)n(hanged)427
-1187 y(using)j(AST)p Ft(_)p Fk(PERMAXES)f(if)h(required.)340
-1326 y Fj(\017)45 b Fk(When)19 b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)j
-(t)n(w)n(o)e(SkyF)-7 b(rames)18 b(is)g(requested)g(\(as)g(when)g
-(supplying)g(SkyF)-7 b(rames)18 b(AST)p Ft(_)p Fk(CONVER)-7
-b(T\),)427 1426 y(accoun)n(t)21 b(will)g(b)r(e)h(tak)n(en)e(of)i(the)f
-(nature)g(of)g(the)h(celestial)f(co)r(ordinate)f(systems)h(they)g
-(represen)n(t,)g(together)427 1525 y(with)26 b(an)n(y)f(qualifying)h
-(mean)f(Equino)n(x)f(or)h(Ep)r(o)r(c)n(h)g(v)-5 b(alues,)26
-b(etc.)36 b(The)26 b(AlignSystem)g(attribute)g(will)g(also)427
-1625 y(b)r(e)31 b(tak)n(en)e(in)n(to)h(accoun)n(t.)44
-b(The)30 b(results)f(will)i(therefore)e(fully)i(re\015ect)e(the)i
-(relationship)e(b)r(et)n(w)n(een)h(p)r(osi-)427 1725
-y(tions)e(on)f(the)h(sky)f(measured)g(in)h(the)g(t)n(w)n(o)e(systems.)
-340 1863 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1963 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-0 2174 3780 12 v 0 2305 a FA(AST)p Fe(_)p FA(SLAADD)1223
-2306 y Fd(Add)39 b(a)f(celestial)f(co)s(ordinate)1259
-2405 y(con)m(v)m(ersion)f(to)i(an)h(SlaMap)2883 2305
-y FA(AST)p Fe(_)p FA(SLAADD)0 2606 y Fc(Description:)44
-b Fk(This)24 b(routine)g(adds)f(one)h(of)g(the)g(standard)f(celestial)h
-(co)r(ordinate)f(system)h(con)n(v)n(ersions)d(pro)n(vided)i(b)n(y)227
-2705 y(the)28 b(SLALIB)g(P)n(ositional)e(Astronom)n(y)g(Library)g
-(\(Starlink)i(User)f(Note)g(SUN/67\))g(to)h(an)f(existing)g(SlaMap.)227
-2836 y(When)d(an)f(SlaMap)f(is)h(\014rst)g(created)f(\(using)h(AST)p
-Ft(_)p Fk(SLAMAP\),)g(it)h(simply)f(p)r(erforms)f(a)h(unit)g(\(n)n
-(ull\))h(Mapping.)227 2935 y(By)31 b(using)g(AST)p Ft(_)p
-Fk(SLAADD)h(\(rep)r(eatedly)f(if)h(necessary\),)e(one)h(or)f(more)h(co)
-r(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)227 3035
-y(then)36 b(b)r(e)f(added,)i(whic)n(h)e(the)h(SlaMap)f(will)g(p)r
-(erform)g(in)g(sequence.)59 b(This)35 b(allo)n(ws)f(m)n(ulti-step)h
-(con)n(v)n(ersions)227 3135 y(b)r(et)n(w)n(een)20 b(a)g(v)-5
-b(ariet)n(y)18 b(of)i(celestial)g(co)r(ordinate)e(systems)i(to)f(b)r(e)
-i(assem)n(bled)e(out)g(of)h(the)g(building)h(blo)r(c)n(ks)e(pro)n
-(vided)227 3234 y(b)n(y)28 b(SLALIB.)227 3365 y(Normally)-7
-b(,)29 b(if)h(an)f(SlaMap's)g(In)n(v)n(ert)g(attribute)g(is)h(zero)e
-(\(the)i(default\),)h(then)f(its)f(forw)n(ard)f(transformation)g(is)227
-3464 y(p)r(erformed)19 b(b)n(y)f(carrying)f(out)i(eac)n(h)f(of)h(the)g
-(individual)g(co)r(ordinate)f(con)n(v)n(ersions)e(sp)r(eci\014ed)k(b)n
-(y)e(AST)p Ft(_)p Fk(SLAADD)227 3564 y(in)28 b(the)g(order)e(giv)n(en)h
-(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n
-(ersion)e(applied)j(last\).)227 3694 y(This)e(order)f(is)h(rev)n(ersed)
-f(if)h(the)h(SlaMap's)e(In)n(v)n(ert)h(attribute)g(is)g(non-zero)f
-(\(or)g(if)i(the)g(in)n(v)n(erse)d(transformation)227
-3794 y(is)j(requested)f(b)n(y)h(an)n(y)f(other)g(means\))h(and)g(eac)n
-(h)f(individual)h(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(also)f
-(replaced)g(b)n(y)g(its)227 3894 y(o)n(wn)f(in)n(v)n(erse.)35
-b(This)25 b(pro)r(cess)f(in)n(v)n(erts)g(the)i(o)n(v)n(erall)d
-(e\013ect)j(of)g(the)f(SlaMap.)36 b(In)25 b(this)h(case,)f(the)h
-(\014rst)f(con)n(v)n(ersion)227 3993 y(to)j(b)r(e)g(applied)f(w)n(ould)
-g(b)r(e)h(the)g(in)n(v)n(erse)f(of)g(the)h(one)f(most)h(recen)n(tly)f
-(added.)0 4154 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42
-b(AST_SLAADD\()d(THIS,)i(CVT,)h(ARGS,)g(STATUS)f(\))0
-4316 y Fc(Argumen)m(ts:)259 4464 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4563 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(SlaMap.)259
-4702 y Fc(CVT)k(=)h(CHARA)m(CTER)e Fj(\003)g Fc(\()h
-Fj(\003)g Fc(\))g(\(Giv)m(en\))427 4802 y Fk(A)38 b(c)n(haracter)e
-(string)h(whic)n(h)h(iden)n(ti\014es)g(the)g(celestial)f(co)r(ordinate)
-g(con)n(v)n(ersion)e(to)j(b)r(e)g(added)g(to)f(the)427
-4901 y(SlaMap.)g(See)27 b(the)h Ft(")p Fk(SLALIB)f(Con)n(v)n(ersions)p
-Ft(")e Fk(section)i(for)g(details)h(of)f(those)h(a)n(v)-5
-b(ailable.)259 5040 y Fc(AR)m(GS\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 5140 y Fk(An)e(arra)n(y)d(con)n(taining)h
-(argumen)n(t)g(v)-5 b(alues)28 b(for)f(the)i(celestial)e(co)r(ordinate)
-g(con)n(v)n(ersion.)37 b(The)28 b(n)n(um)n(b)r(er)g(of)427
-5239 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r
-(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 5339 y(sp)r(eci\014ed)28 b(\(see)f(the)h
-Ft(")p Fk(SLALIB)f(Con)n(v)n(ersions)p Ft(")e Fk(section\).)36
-b(This)28 b(arra)n(y)d(is)i(ignored)f(if)i(no)f(argumen)n(ts)g(are)427
-5439 y(needed.)259 5577 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 5677 y Fk(The)c(global)e(status.)p
-eop end
-%%Page: 339 349
-TeXDict begin 339 348 bop 3643 52 a FG(339)0 351 y Fc(Notes:)340
-656 y Fj(\017)45 b Fk(All)38 b(co)r(ordinate)d(v)-5 b(alues)37
-b(pro)r(cessed)e(b)n(y)i(an)f(SlaMap)h(are)e(in)i(radians.)64
-b(The)36 b(\014rst)h(co)r(ordinate)f(is)g(the)427 755
-y(celestial)27 b(longitude)h(and)f(the)h(second)f(co)r(ordinate)g(is)g
-(the)h(celestial)f(latitude.)340 899 y Fj(\017)45 b Fk(When)21
-b(assem)n(bling)d(a)i(m)n(ulti-stage)f(con)n(v)n(ersion,)g(it)h(can)g
-(sometimes)f(b)r(e)h(di\016cult)h(to)f(determine)g(the)g(most)427
-999 y(economical)j(con)n(v)n(ersion)e(path.)36 b(F)-7
-b(or)23 b(example,)h(con)n(v)n(erting)e(to)i(the)g(standard)f(FK5)g(co)
-r(ordinate)g(system)427 1098 y(as)37 b(an)h(in)n(termediate)f(stage)g
-(is)g(often)h(sensible)g(in)g(form)n(ulating)f(the)h(problem,)i(but)e
-(ma)n(y)f(in)n(tro)r(duce)427 1198 y(unnecessary)31 b(extra)g(con)n(v)n
-(ersion)f(steps.)51 b(A)33 b(solution)e(to)h(this)h(is)f(to)g(include)h
-(all)f(the)g(steps)g(whic)n(h)h(are)427 1298 y(\(logically\))24
-b(necessary)-7 b(,)24 b(but)h(then)g(to)g(use)f(AST)p
-Ft(_)p Fk(SIMPLIFY)h(to)g(simplify)g(the)g(resulting)f(SlaMap.)36
-b(The)427 1397 y(simpli\014cation)28 b(pro)r(cess)e(will)i(eliminate)g
-(an)n(y)f(steps)g(whic)n(h)h(turn)f(out)h(not)f(to)h(b)r(e)g(needed.)
-340 1541 y Fj(\017)45 b Fk(This)30 b(routine)g(do)r(es)f(not)h(c)n(hec)
-n(k)f(to)h(ensure)f(that)h(the)h(sequence)e(of)h(co)r(ordinate)f(con)n
-(v)n(ersions)e(added)j(to)427 1641 y(an)e(SlaMap)f(is)g(ph)n(ysically)g
-(meaningful.)-2 1824 y Fc(SLALIB)33 b(Con)m(v)m(ersions)n(:)227
-1970 y Fk(The)19 b(follo)n(wing)f(strings)f(\(whic)n(h)i(are)f
-(case-insensitiv)n(e\))f(ma)n(y)h(b)r(e)h(supplied)g(via)f(the)h(CVT)g
-(argumen)n(t)f(to)h(indicate)227 2070 y(whic)n(h)33 b(celestial)e(co)r
-(ordinate)h(con)n(v)n(ersion)e(is)i(to)g(b)r(e)h(added)f(to)h(the)f
-(SlaMap.)51 b(Eac)n(h)31 b(string)h(is)g(deriv)n(ed)g(from)227
-2170 y(the)k(name)g(of)f(the)h(SLALIB)g(routine)f(that)h(p)r(erforms)e
-(the)i(con)n(v)n(ersion)e(and)h(the)h(relev)-5 b(an)n(t)35
-b(do)r(cumen)n(tation)227 2269 y(\(SUN/67\))d(should)g(b)r(e)g
-(consulted)g(for)f(details.)50 b(Where)32 b(argumen)n(ts)f(are)g
-(needed)h(b)n(y)f(the)i(con)n(v)n(ersion,)d(they)227
-2369 y(are)d(listed)i(in)f(paren)n(theses.)37 b(V)-7
-b(alues)28 b(for)f(these)h(argumen)n(ts)f(should)h(b)r(e)g(giv)n(en,)g
-(via)f(the)i(AR)n(GS)f(arra)n(y)-7 b(,)26 b(in)i(the)227
-2469 y(order)k(indicated.)52 b(The)33 b(argumen)n(t)e(names)h(matc)n(h)
-h(the)g(corresp)r(onding)d(SLALIB)j(routine)f(argumen)n(ts)g(and)227
-2568 y(their)f(v)-5 b(alues)30 b(should)h(b)r(e)g(giv)n(en)e(using)i
-(exactly)f(the)h(same)f(units,)i(time)f(scale,)f(calendar,)h(etc.)46
-b(as)30 b(describ)r(ed)227 2668 y(in)e(SUN/67:)340 2961
-y Fj(\017)45 b Ft(")p Fk(ADDET)p Ft(")28 b Fk(\(EQ\):)f(Add)h(E-terms)f
-(of)g(ab)r(erration.)340 3105 y Fj(\017)45 b Ft(")p Fk(SUBET)p
-Ft(")27 b Fk(\(EQ\):)g(Subtract)h(E-terms)e(of)i(ab)r(erration.)340
-3249 y Fj(\017)45 b Ft(")p Fk(PREBN)p Ft(")26 b Fk(\(BEP0,BEP1\):)35
-b(Apply)28 b(Bessel-New)n(com)n(b)d(pre-IA)n(U)i(1976)f(\(FK4\))i
-(precession)e(mo)r(del.)340 3393 y Fj(\017)45 b Ft(")p
-Fk(PREC)p Ft(")26 b Fk(\(EP0,EP1\):)35 b(Apply)28 b(IA)n(U)g(1975)d
-(\(FK5\))j(precession)e(mo)r(del.)340 3537 y Fj(\017)45
-b Ft(")p Fk(FK45Z)p Ft(")26 b Fk(\(BEPOCH\):)h(Con)n(v)n(ert)f(FK4)h
-(to)g(FK5)g(\(no)h(prop)r(er)e(motion)i(or)e(parallax\).)340
-3680 y Fj(\017)45 b Ft(")p Fk(FK54Z)p Ft(")26 b Fk(\(BEPOCH\):)h(Con)n
-(v)n(ert)f(FK5)h(to)g(FK4)g(\(no)h(prop)r(er)e(motion)i(or)e
-(parallax\).)340 3824 y Fj(\017)45 b Ft(")p Fk(AMP)p
-Ft(")27 b Fk(\(D)n(A)-7 b(TE,EQ\):)27 b(Con)n(v)n(ert)g(geo)r(cen)n
-(tric)f(apparen)n(t)g(to)i(mean)f(place.)340 3968 y Fj(\017)45
-b Ft(")p Fk(MAP)p Ft(")27 b Fk(\(EQ,D)n(A)-7 b(TE\):)27
-b(Con)n(v)n(ert)g(mean)g(place)g(to)h(geo)r(cen)n(tric)e(apparen)n(t.)
-340 4112 y Fj(\017)45 b Ft(")p Fk(ECLEQ)p Ft(")26 b Fk(\(D)n(A)-7
-b(TE\):)28 b(Con)n(v)n(ert)e(ecliptic)i(co)r(ordinates)e(to)i(FK5)f
-(J2000.0)d(equatorial.)340 4255 y Fj(\017)45 b Ft(")p
-Fk(EQECL)p Ft(")26 b Fk(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e
-(equatorial)g(FK5)h(J2000.0)e(to)i(ecliptic)h(co)r(ordinates.)340
-4399 y Fj(\017)45 b Ft(")p Fk(GALEQ)p Ft(")p Fk(:)36
-b(Con)n(v)n(ert)26 b(galactic)g(co)r(ordinates)h(to)g(FK5)g(J2000.0)e
-(equatorial.)340 4543 y Fj(\017)45 b Ft(")p Fk(EQGAL)p
-Ft(")p Fk(:)36 b(Con)n(v)n(ert)26 b(FK5)h(J2000.0)e(equatorial)h(to)h
-(galactic)g(co)r(ordinates.)340 4687 y Fj(\017)45 b Ft(")p
-Fk(HFK5Z)p Ft(")26 b Fk(\(JEPOCH\):)h(Con)n(v)n(ert)f(ICRS)i(co)r
-(ordinates)e(to)i(FK5)f(J2000.0)e(equatorial.)340 4830
-y Fj(\017)45 b Ft(")p Fk(FK5HZ)p Ft(")26 b Fk(\(JEPOCH\):)h(Con)n(v)n
-(ert)f(FK5)h(J2000.0)e(equatorial)h(co)r(ordinates)g(to)i(ICRS.)340
-4974 y Fj(\017)45 b Ft(")p Fk(GALSUP)p Ft(")p Fk(:)37
-b(Con)n(v)n(ert)26 b(galactic)g(to)i(sup)r(ergalactic)e(co)r
-(ordinates.)340 5118 y Fj(\017)45 b Ft(")p Fk(SUPGAL)p
-Ft(")p Fk(:)37 b(Con)n(v)n(ert)26 b(sup)r(ergalactic)g(co)r(ordinates)g
-(to)i(galactic.)340 5262 y Fj(\017)45 b Ft(")p Fk(J2000H)p
-Ft(")p Fk(:)34 b(Con)n(v)n(ert)27 b(dynamical)g(J2000.0)d(to)k(ICRS.)
-340 5405 y Fj(\017)45 b Ft(")p Fk(HJ2000)p Ft(")p Fk(:)34
-b(Con)n(v)n(ert)27 b(ICRS)g(to)h(dynamical)f(J2000.0.)340
-5549 y Fj(\017)45 b Ft(")p Fk(R2H)p Ft(")27 b Fk(\(LAST\):)i(Con)n(v)n
-(ert)d(RA)i(to)f(Hour)g(Angle.)340 5693 y Fj(\017)45
-b Ft(")p Fk(H2R)p Ft(")27 b Fk(\(LAST\):)i(Con)n(v)n(ert)d(Hour)h
-(Angle)g(to)h(RA.)p eop end
-%%Page: 340 350
-TeXDict begin 340 349 bop 0 52 a FG(340)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(F)-7
-b(or)36 b(example,)j(to)e(use)f(the)i Ft(")p Fk(ADDET)p
-Ft(")e Fk(con)n(v)n(ersion,)h(whic)n(h)g(tak)n(es)f(a)g(single)g
-(argumen)n(t)g(EQ,)g(y)n(ou)g(should)227 451 y(consult)c(the)g(do)r
-(cumen)n(tation)g(for)f(the)i(SLALIB)f(routine)f(SLA)p
-Ft(_)p Fk(ADDET.)h(This)g(describ)r(es)g(the)g(con)n(v)n(ersion)227
-551 y(in)e(detail)f(and)h(sho)n(ws)e(that)i(EQ)e(is)i(the)f(Besselian)g
-(ep)r(o)r(c)n(h)g(of)g(the)h(mean)f(equator)g(and)g(equino)n(x.)41
-b(This)30 b(v)-5 b(alue)227 650 y(should)28 b(then)g(b)r(e)g(supplied)g
-(to)f(AST)p Ft(_)p Fk(SLAADD)i(in)f(AR)n(GS\(1\).)227
-775 y(In)40 b(addition)g(the)g(follo)n(wing)e(strings)h(ma)n(y)g(b)r(e)
-h(supplied)g(for)f(more)g(complex)g(con)n(v)n(ersions)e(whic)n(h)i(do)h
-(not)227 875 y(corresp)r(ond)30 b(to)h(an)n(y)g(one)g(single)g(SLALIB)g
-(routine)g(\(DIURAB)i(is)e(the)h(magnitude)f(of)h(the)f(diurnal)g(ab)r
-(erra-)227 974 y(tion)j(v)n(ector)e(in)h(units)h(of)f
-Ft(")p Fk(da)n(y/\(2.PI\))p Ft(")p Fk(,)f(D)n(A)-7 b(TE)34
-b(is)f(the)h(Mo)r(di\014ed)f(Julian)g(Date)h(of)f(the)g(observ)-5
-b(ation,)34 b(and)227 1074 y(\(OBSX,OBSY,OBZ\))k(are)f(the)i(Helio)r
-(cen)n(tric-Aries-Ecliptic)d(cartesian)h(co)r(ordinates,)j(in)e
-(metres,)j(of)d(the)227 1174 y(observ)n(er\):)340 1436
-y Fj(\017)45 b Ft(")p Fk(HPCEQ)p Ft(")38 b Fk(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)39 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Cartesian)36 b(co)r(ordinates)i(to)427 1536
-y(J2000.0)25 b(equatorial.)340 1669 y Fj(\017)45 b Ft(")p
-Fk(EQHPC)p Ft(")17 b Fk(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18
-b(Con)n(v)n(ert)f(J2000.0)e(equatorial)i(co)r(ordinates)g(to)h
-(Heliopro)5 b(jectiv)n(e-)427 1768 y(Cartesian.)340 1902
-y Fj(\017)45 b Ft(")p Fk(HPREQ)p Ft(")17 b Fk(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Radial)16 b(co)r(ordinates)h(to)h(J2000.0)427
-2001 y(equatorial.)340 2135 y Fj(\017)45 b Ft(")p Fk(EQHPR)p
-Ft(")17 b Fk(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f
-(J2000.0)f(equatorial)g(co)r(ordinates)h(to)h(Heliopro)5
-b(jectiv)n(e-)427 2234 y(Radial.)340 2368 y Fj(\017)45
-b Ft(")p Fk(HEEQ)p Ft(")26 b Fk(\(D)n(A)-7 b(TE\):)28
-b(Con)n(v)n(ert)e(helio-ecliptic)i(co)r(ordinates)e(to)h(J2000.0)e
-(equatorial.)340 2501 y Fj(\017)45 b Ft(")p Fk(EQHE)p
-Ft(")26 b Fk(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e(J2000.0)f
-(equatorial)h(co)r(ordinates)g(to)i(helio-ecliptic.)340
-2634 y Fj(\017)45 b Ft(")p Fk(H2E)p Ft(")26 b Fk(\(LA)-7
-b(T,DIR)n(UAB\):)30 b(Con)n(v)n(ert)c(horizon)g(co)r(ordinates)g(to)i
-(equatorial.)340 2767 y Fj(\017)45 b Ft(")p Fk(E2H)p
-Ft(")26 b Fk(\(LA)-7 b(T,DIURAB\):)30 b(Con)n(v)n(ert)c(equatorial)g
-(co)r(ordinates)g(to)i(horizon.)227 2930 y(Note,)40 b(the)e
-Ft(")p Fk(H2E)p Ft(")e Fk(and)i Ft(")p Fk(E2H)p Ft(")e
-Fk(con)n(v)n(ersions)f(con)n(v)n(ert)h(b)r(et)n(w)n(een)i(top)r(o)r
-(cen)n(tric)f(horizon)f(co)r(ordinates)g(\(az-)227 3030
-y(im)n(uth,elev)-5 b(ation\),)39 b(and)d(apparen)n(t)f(lo)r(cal)h
-(equatorial)e(co)r(ordinates)h(\(hour)h(angle,declination\).)61
-b(Th)n(us,)38 b(the)227 3129 y(e\013ects)g(of)f(diurnal)g(ab)r
-(erration)f(are)g(tak)n(en)h(in)n(to)g(accoun)n(t)f(in)i(the)f(con)n(v)
-n(ersions)e(but)j(the)g(e\013ects)f(of)g(atmo-)227 3229
-y(spheric)27 b(refraction)g(are)f(not.)p 0 3429 3780
-12 v 0 3560 a FA(AST)p Fe(_)p FA(SLAMAP)1426 3561 y Fd(Create)38
-b(an)g(SlaMap)2870 3560 y FA(AST)p Fe(_)p FA(SLAMAP)0
-3751 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(SlaMap)g(and)h(optionally)f(initialises)g(its)h(attributes.)227
-3876 y(An)19 b(SlaMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)h(Mapping)f
-(whic)n(h)g(can)g(b)r(e)h(used)f(to)h(represen)n(t)e(a)h(sequence)g(of)
-g(con)n(v)n(ersions)227 3975 y(b)r(et)n(w)n(een)28 b(standard)e
-(celestial)i(\(longitude,)f(latitude\))i(co)r(ordinate)d(systems.)227
-4100 y(When)e(an)e(SlaMap)h(is)g(\014rst)f(created,)h(it)h(simply)f(p)r
-(erforms)f(a)g(unit)i(\(n)n(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r
-(ordinates.)227 4200 y(Using)39 b(the)g(AST)p Ft(_)p
-Fk(SLAADD)h(routine,)h(a)e(series)f(of)g(co)r(ordinate)g(con)n(v)n
-(ersion)e(steps)j(ma)n(y)f(then)h(b)r(e)h(added,)227
-4299 y(selected)34 b(from)f(those)h(pro)n(vided)e(b)n(y)i(the)g(SLALIB)
-g(P)n(ositional)e(Astronom)n(y)g(Library)h(\(Starlink)g(User)h(Note)227
-4399 y(SUN/67\).)44 b(This)30 b(allo)n(ws)e(m)n(ulti-step)i(con)n(v)n
-(ersions)e(b)r(et)n(w)n(een)i(a)f(v)-5 b(ariet)n(y)29
-b(of)h(celestial)g(co)r(ordinate)e(systems)i(to)227 4499
-y(b)r(e)e(assem)n(bled)f(out)h(of)f(the)h(building)g(blo)r(c)n(ks)f
-(pro)n(vided)f(b)n(y)i(SLALIB.)227 4624 y(F)-7 b(or)18
-b(details)g(of)g(the)h(individual)g(co)r(ordinate)e(con)n(v)n(ersions)f
-(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e(of)i(the)f(AST)p
-Ft(_)p Fk(SLAADD)227 4723 y(routine.)0 4874 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_SLAMAP\()c(FLAGS,)i(OPTIONS,)f(STATUS)i
-(\))0 5024 y Fc(Argumen)m(ts:)259 5161 y(FLA)m(GS)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 5261 y Fk(This)d(argumen)n(t)e(is)i
-(reserv)n(ed)e(for)h(future)h(use)f(and)h(should)f(curren)n(tly)g(alw)n
-(a)n(ys)e(b)r(e)j(set)g(to)f(zero.)259 5394 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 5494 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 5593 y(used)29 b(for)e(initialising)h(the)h(new)f
-(SlaMap.)39 b(The)28 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g(to)g
-(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427 5693 y(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)p eop end
-%%Page: 341 351
-TeXDict begin 341 350 bop 3643 52 a FG(341)259 351 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-451 y Fk(The)c(global)e(status.)0 617 y Fc(Returned)32
-b(V)-8 b(alue:)259 757 y(AST)p Ft(_)p Fc(SLAMAP)33 b(=)f(INTEGER)427
-857 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(SlaMap.)0
-1022 y Fc(Notes:)340 1309 y Fj(\017)45 b Fk(The)32 b(Nin)g(and)f(Nout)h
-(attributes)f(\(n)n(um)n(b)r(er)h(of)f(input)i(and)e(output)h(co)r
-(ordinates\))e(for)h(an)h(SlaMap)f(are)427 1408 y(b)r(oth)g(equal)e(to)
-h(2.)44 b(The)30 b(\014rst)g(co)r(ordinate)f(is)h(the)h(celestial)e
-(longitude)h(and)g(the)g(second)g(co)r(ordinate)f(is)427
-1508 y(the)f(celestial)f(latitude.)38 b(All)28 b(co)r(ordinate)e(v)-5
-b(alues)27 b(are)g(in)h(radians.)340 1643 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 1742
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1945 3780 12 v 0 2076
-a FA(AST)p Fe(_)p FA(SPECADD)1224 2077 y Fd(Add)39 b(a)g(sp)s(ectral)f
-(co)s(ordinate)1251 2190 y(con)m(v)m(ersion)e(to)i(a)h(Sp)s(ecMap)2788
-2076 y FA(AST)p Fe(_)p FA(SPECADD)0 2383 y Fc(Description:)44
-b Fk(This)24 b(routine)g(adds)g(one)g(of)g(the)g(standard)g(sp)r
-(ectral)f(co)r(ordinate)g(system)h(con)n(v)n(ersions)e(listed)i(b)r
-(elo)n(w)227 2483 y(to)k(an)f(existing)g(Sp)r(ecMap.)227
-2609 y(When)j(a)e(Sp)r(ecMap)h(is)g(\014rst)f(created)g(\(using)h(AST)p
-Ft(_)p Fk(SPECMAP\),)f(it)i(simply)f(p)r(erforms)f(a)g(unit)i(\(n)n
-(ull\))f(Map-)227 2709 y(ping.)35 b(By)23 b(using)g(AST)p
-Ft(_)p Fk(SPECADD)g(\(rep)r(eatedly)f(if)i(necessary\),)e(one)g(or)g
-(more)h(co)r(ordinate)e(con)n(v)n(ersion)g(steps)227
-2808 y(ma)n(y)29 b(then)g(b)r(e)h(added,)g(whic)n(h)f(the)g(Sp)r(ecMap)
-h(will)f(p)r(erform)g(in)g(sequence.)41 b(This)29 b(allo)n(ws)f(m)n
-(ulti-step)i(con)n(v)n(er-)227 2908 y(sions)f(b)r(et)n(w)n(een)g(a)g(v)
--5 b(ariet)n(y)28 b(of)h(sp)r(ectral)g(co)r(ordinate)f(systems)g(to)h
-(b)r(e)h(assem)n(bled)e(out)h(of)g(the)h(building)f(blo)r(c)n(ks)227
-3008 y(pro)n(vided)e(b)n(y)g(this)h(class.)227 3134 y(Normally)-7
-b(,)28 b(if)h(a)g(Sp)r(ecMap's)f(In)n(v)n(ert)g(attribute)h(is)f(zero)g
-(\(the)h(default\),)h(then)f(its)g(forw)n(ard)e(transformation)g(is)227
-3234 y(p)r(erformed)18 b(b)n(y)g(carrying)f(out)h(eac)n(h)g(of)g(the)h
-(individual)f(co)r(ordinate)f(con)n(v)n(ersions)f(sp)r(eci\014ed)j(b)n
-(y)f(AST)p Ft(_)p Fk(SPECADD)227 3333 y(in)28 b(the)g(order)e(giv)n(en)
-h(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n
-(ersion)e(applied)j(last\).)227 3460 y(This)23 b(order)e(is)h(rev)n
-(ersed)e(if)j(the)g(Sp)r(ecMap's)f(In)n(v)n(ert)g(attribute)g(is)g
-(non-zero)f(\(or)h(if)h(the)f(in)n(v)n(erse)f(transformation)227
-3559 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g(means\))h(and)g
-(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(also)f
-(replaced)g(b)n(y)g(its)227 3659 y(o)n(wn)21 b(in)n(v)n(erse.)33
-b(This)22 b(pro)r(cess)e(in)n(v)n(erts)g(the)i(o)n(v)n(erall)d
-(e\013ect)j(of)f(the)h(Sp)r(ecMap.)35 b(In)22 b(this)f(case,)h(the)g
-(\014rst)f(con)n(v)n(ersion)227 3759 y(to)28 b(b)r(e)g(applied)f(w)n
-(ould)g(b)r(e)h(the)g(in)n(v)n(erse)f(of)g(the)h(one)f(most)h(recen)n
-(tly)f(added.)0 3912 y Fc(In)m(v)m(o)s(cation:)123 b
-Ft(CALL)42 b(AST_SPECADD\()c(THIS,)k(CVT,)g(ARGS,)f(STATUS)g(\))0
-4065 y Fc(Argumen)m(ts:)259 4205 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 4305 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecMap.)259
-4440 y Fc(CVT)k(=)h(CHARA)m(CTER)e Fj(\003)g Fc(\()h
-Fj(\003)g Fc(\))g(\(Giv)m(en\))427 4539 y Fk(A)39 b(c)n(haracter)c
-(string)j(whic)n(h)f(iden)n(ti\014es)i(the)f(sp)r(ectral)f(co)r
-(ordinate)g(con)n(v)n(ersion)f(to)h(b)r(e)i(added)e(to)h(the)427
-4639 y(Sp)r(ecMap.)f(See)28 b(the)g Ft(")p Fk(Av)-5 b(ailable)27
-b(Con)n(v)n(ersions)p Ft(")e Fk(section)i(for)g(details)g(of)h(those)f
-(a)n(v)-5 b(ailable.)259 4774 y Fc(AR)m(GS\()32 b Fj(\003)g
-Fc(\))g(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 4873
-y Fk(An)e(arra)n(y)d(con)n(taining)h(argumen)n(t)g(v)-5
-b(alues)28 b(for)g(the)h(sp)r(ectral)f(co)r(ordinate)f(con)n(v)n
-(ersion.)36 b(The)29 b(n)n(um)n(b)r(er)f(of)427 4973
-y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r(er)g
-(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g(con)n(v)
-n(ersion)427 5073 y(sp)r(eci\014ed)i(\(see)g(the)f Ft(")p
-Fk(Av)-5 b(ailable)24 b(Con)n(v)n(ersions)p Ft(")e Fk(section\).)36
-b(This)24 b(arra)n(y)e(is)j(ignored)e(if)i(no)f(argumen)n(ts)g(are)427
-5172 y(needed.)259 5307 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m
-(en)h(and)g(Returned\))427 5407 y Fk(The)c(global)e(status.)0
-5572 y Fc(Notes:)p eop end
-%%Page: 342 352
-TeXDict begin 342 351 bop 0 52 a FG(342)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h(con)n(v)n(ersion,)g
-(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f(determine)g(the)427
-451 y(most)31 b(economical)g(con)n(v)n(ersion)e(path.)48
-b(F)-7 b(or)30 b(example,)i(when)g(con)n(v)n(erting)d(b)r(et)n(w)n(een)
-j(reference)e(frames,)427 551 y(con)n(v)n(erting)19 b(\014rst)i(to)f
-(the)i(heliographic)d(reference)h(frame)g(as)g(an)h(in)n(termediate)f
-(stage)g(is)h(often)g(sensible)f(in)427 650 y(form)n(ulating)f(the)i
-(problem,)g(but)g(ma)n(y)e(in)n(tro)r(duce)h(unnecessary)e(extra)i(con)
-n(v)n(ersion)d(steps.)35 b(A)20 b(solution)g(to)427 750
-y(this)h(is)g(to)f(include)h(all)g(the)g(steps)f(whic)n(h)h(are)f
-(\(logically\))g(necessary)-7 b(,)20 b(but)h(then)g(to)g(use)g(AST)p
-Ft(_)p Fk(SIMPLIFY)427 849 y(to)27 b(simplify)h(the)g(resulting)e(Sp)r
-(ecMap.)37 b(The)27 b(simpli\014cation)g(pro)r(cess)f(will)i(eliminate)
-f(an)n(y)g(steps)g(whic)n(h)427 949 y(turn)h(out)g(not)f(to)h(b)r(e)g
-(needed.)340 1078 y Fj(\017)45 b Fk(This)30 b(routine)g(do)r(es)f(not)h
-(c)n(hec)n(k)f(to)h(ensure)f(that)h(the)h(sequence)e(of)h(co)r
-(ordinate)f(con)n(v)n(ersions)e(added)j(to)427 1177 y(a)d(Sp)r(ecMap)h
-(is)g(ph)n(ysically)e(meaningful.)-2 1335 y Fc(Av)-5
-b(ailable)32 b(Con)m(v)m(ersions)n(:)227 1481 y Fk(The)19
-b(follo)n(wing)f(strings)f(\(whic)n(h)i(are)f(case-insensitiv)n(e\))f
-(ma)n(y)h(b)r(e)h(supplied)g(via)f(the)h(CVT)g(argumen)n(t)f(to)h
-(indicate)227 1581 y(whic)n(h)24 b(sp)r(ectral)g(co)r(ordinate)f(con)n
-(v)n(ersion)f(is)i(to)g(b)r(e)g(added)g(to)g(the)h(Sp)r(ecMap.)36
-b(Where)24 b(argumen)n(ts)e(are)h(needed)227 1681 y(b)n(y)28
-b(the)h(con)n(v)n(ersion,)d(they)j(are)e(listed)h(in)h(paren)n(theses.)
-38 b(V)-7 b(alues)28 b(for)f(these)i(argumen)n(ts)e(should)h(b)r(e)g
-(giv)n(en,)g(via)227 1780 y(the)33 b(AR)n(GS)f(arra)n(y)-7
-b(,)31 b(in)h(the)h(order)e(indicated.)50 b(Units)33
-b(and)f(argumen)n(t)f(names)g(are)g(describ)r(ed)h(at)g(the)g(end)h(of)
-227 1880 y(the)28 b(list)g(of)g(con)n(v)n(ersions.)340
-2135 y Fj(\017)45 b Ft(")p Fk(FR)-7 b(TO)n(VL)p Ft(")27
-b Fk(\(RF\):)i(Con)n(v)n(ert)d(frequency)h(to)g(relativistic)g(v)n(elo)
-r(cit)n(y)-7 b(.)340 2263 y Fj(\017)45 b Ft(")p Fk(VL)-7
-b(TOFR)p Ft(")27 b Fk(\(RF\):)i(Con)n(v)n(ert)d(relativistic)h(v)n(elo)
-r(cit)n(y)g(to)g(F)-7 b(requency)g(.)340 2392 y Fj(\017)45
-b Ft(")p Fk(ENTOFR)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26
-b(energy)h(to)g(frequency)-7 b(.)340 2521 y Fj(\017)45
-b Ft(")p Fk(FR)-7 b(TOEN)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26
-b(frequency)h(to)h(energy)-7 b(.)340 2649 y Fj(\017)45
-b Ft(")p Fk(WNTOFR)p Ft(")p Fk(:)37 b(Con)n(v)n(ert)26
-b(w)n(a)n(v)n(e)g(n)n(um)n(b)r(er)h(to)h(frequency)-7
-b(.)340 2778 y Fj(\017)45 b Ft(")p Fk(FR)-7 b(TO)n(WN)p
-Ft(")p Fk(:)37 b(Con)n(v)n(ert)26 b(frequency)h(to)g(w)n(a)n(v)n(e)f(n)
-n(um)n(b)r(er.)340 2907 y Fj(\017)45 b Ft(")p Fk(WVTOFR)p
-Ft(")p Fk(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g(\(v)-5
-b(acuum\))28 b(to)g(frequency)-7 b(.)340 3036 y Fj(\017)45
-b Ft(")p Fk(FR)-7 b(TO)n(WV)p Ft(")p Fk(:)37 b(Con)n(v)n(ert)26
-b(frequency)h(to)g(w)n(a)n(v)n(elength)f(\(v)-5 b(acuum\).)340
-3164 y Fj(\017)45 b Ft(")p Fk(A)-9 b(WTOFR)p Ft(")p Fk(:)37
-b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g(\(air\))h(to)h(frequency)-7
-b(.)340 3293 y Fj(\017)45 b Ft(")p Fk(FR)-7 b(TO)n(A)e(W)p
-Ft(")p Fk(:)36 b(Con)n(v)n(ert)27 b(frequency)g(to)g(w)n(a)n(v)n
-(elength)f(\(air\).)340 3422 y Fj(\017)45 b Ft(")p Fk(VR)-7
-b(TO)n(VL)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26 b(radio)h(to)g
-(relativistic)g(v)n(elo)r(cit)n(y)-7 b(.)340 3551 y Fj(\017)45
-b Ft(")p Fk(VL)-7 b(TO)n(VR)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26
-b(relativistic)h(to)h(radio)e(v)n(elo)r(cit)n(y)-7 b(.)340
-3679 y Fj(\017)45 b Ft(")p Fk(V)n(OTO)n(VL)p Ft(")p Fk(:)35
-b(Con)n(v)n(ert)26 b(optical)i(to)f(relativistic)g(v)n(elo)r(cit)n(y)-7
-b(.)340 3808 y Fj(\017)45 b Ft(")p Fk(VL)-7 b(TO)n(V)n(O)p
-Ft(")p Fk(:)35 b(Con)n(v)n(ert)27 b(relativistic)f(to)i(optical)f(v)n
-(elo)r(cit)n(y)-7 b(.)340 3937 y Fj(\017)45 b Ft(")p
-Fk(ZOTO)n(VL)p Ft(")p Fk(:)35 b(Con)n(v)n(ert)26 b(redshift)i(to)g
-(relativistic)e(v)n(elo)r(cit)n(y)-7 b(.)340 4065 y Fj(\017)45
-b Ft(")p Fk(VL)-7 b(TOZO)p Ft(")p Fk(:)35 b(Con)n(v)n(ert)27
-b(relativistic)g(v)n(elo)r(cit)n(y)f(to)i(redshift.)340
-4194 y Fj(\017)45 b Ft(")p Fk(BTTO)n(VL)p Ft(")p Fk(:)36
-b(Con)n(v)n(ert)26 b(b)r(eta)i(factor)e(to)i(relativistic)f(v)n(elo)r
-(cit)n(y)-7 b(.)340 4323 y Fj(\017)45 b Ft(")p Fk(VL)-7
-b(TOBT)p Ft(")p Fk(:)36 b(Con)n(v)n(ert)26 b(relativistic)h(v)n(elo)r
-(cit)n(y)g(to)g(b)r(eta)h(factor.)340 4452 y Fj(\017)45
-b Ft(")p Fk(USF2HL)p Ft(")28 b Fk(\(V)n(OFF,RA,DEC\):)i(Con)n(v)n(ert)d
-(frequency)g(from)h(a)g(user-de\014ned)g(reference)g(frame)g(to)g(he-)
-427 4551 y(lio)r(cen)n(tric.)340 4680 y Fj(\017)45 b
-Ft(")p Fk(HLF2US)p Ft(")31 b Fk(\(V)n(OFF,RA,DEC\):)h(Con)n(v)n(ert)d
-(frequency)i(from)g(helio)r(cen)n(tric)f(reference)g(frame)h(to)g
-(user-)427 4780 y(de\014ned.)340 4908 y Fj(\017)45 b
-Ft(")p Fk(TPF2HL)p Ft(")17 b Fk(\(OBSLON,OBSLA)-7 b(T,OBSAL)g
-(T,EPOCH,RA,DEC\):)17 b(Con)n(v)n(ert)g(frequency)h(from)g(top)r(o)r
-(cen-)427 5008 y(tric)28 b(reference)e(frame)i(to)f(helio)r(cen)n
-(tric.)340 5137 y Fj(\017)45 b Ft(")p Fk(HLF2TP)p Ft(")20
-b Fk(\(OBSLON,OBSLA)-7 b(T,OBSAL)g(T,EPOCH,RA,DEC\):)20
-b(Con)n(v)n(ert)g(frequency)h(from)g(helio-)427 5236
-y(cen)n(tric)27 b(reference)g(frame)g(to)h(top)r(o)r(cen)n(tric.)340
-5365 y Fj(\017)45 b Ft(")p Fk(GEF2HL)p Ft(")24 b Fk(\(EPOCH,RA,DEC\):)h
-(Con)n(v)n(ert)f(frequency)h(from)g(geo)r(cen)n(tric)f(reference)g
-(frame)h(to)g(helio-)427 5465 y(cen)n(tric.)340 5593
-y Fj(\017)45 b Ft(")p Fk(HLF2GE)p Ft(")24 b Fk(\(EPOCH,RA,DEC\):)h(Con)
-n(v)n(ert)f(frequency)h(from)g(helio)r(cen)n(tric)g(reference)f(frame)h
-(to)g(geo-)427 5693 y(cen)n(tric.)p eop end
-%%Page: 343 353
-TeXDict begin 343 352 bop 3643 52 a FG(343)340 351 y
-Fj(\017)45 b Ft(")p Fk(BYF2HL)p Ft(")30 b Fk(\(EPOCH,RA,DEC\):)g(Con)n
-(v)n(ert)f(frequency)h(from)g(barycen)n(tric)f(reference)h(frame)g(to)g
-(he-)427 451 y(lio)r(cen)n(tric.)340 599 y Fj(\017)45
-b Ft(")p Fk(HLF2BY)p Ft(")18 b Fk(\(EPOCH,RA,DEC\):)g(Con)n(v)n(ert)f
-(frequency)h(from)g(helio)r(cen)n(tric)g(reference)f(frame)h(to)g
-(barycen-)427 699 y(tric.)340 847 y Fj(\017)45 b Ft(")p
-Fk(LKF2HL)p Ft(")27 b Fk(\(RA,DEC\):)j(Con)n(v)n(ert)d(frequency)h
-(from)g(kinematic)h(LSR)g(reference)e(frame)i(to)f(helio)r(cen-)427
-947 y(tric.)340 1096 y Fj(\017)45 b Ft(")p Fk(HLF2LK)p
-Ft(")38 b Fk(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)g(reference)g(frame)h(to)g(kinematic)427
-1195 y(LSR.)340 1344 y Fj(\017)45 b Ft(")p Fk(LDF2HL)p
-Ft(")27 b Fk(\(RA,DEC\):)g(Con)n(v)n(ert)f(frequency)g(from)h
-(dynamical)f(LSR)h(reference)f(frame)g(to)h(helio)r(cen-)427
-1443 y(tric.)340 1592 y Fj(\017)45 b Ft(")p Fk(HLF2LD)p
-Ft(")37 b Fk(\(RA,DEC\):)h(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)h(reference)f(frame)g(to)h(dynamical)427
-1691 y(LSR.)340 1840 y Fj(\017)45 b Ft(")p Fk(LGF2HL)p
-Ft(")27 b Fk(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h(from)g(lo)r(cal)
-g(group)g(reference)f(frame)i(to)f(helio)r(cen)n(tric.)340
-1988 y Fj(\017)45 b Ft(")p Fk(HLF2LG)p Ft(")27 b Fk(\(RA,DEC\):)i(Con)n
-(v)n(ert)d(frequency)h(from)g(helio)r(cen)n(tric)g(reference)g(frame)g
-(to)h(lo)r(cal)f(group.)340 2137 y Fj(\017)45 b Ft(")p
-Fk(GLF2HL)p Ft(")27 b Fk(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h
-(from)g(galactic)g(reference)f(frame)h(to)h(helio)r(cen)n(tric.)340
-2285 y Fj(\017)45 b Ft(")p Fk(HLF2GL)p Ft(")27 b Fk(\(RA,DEC\):)i(Con)n
-(v)n(ert)d(frequency)h(from)g(helio)r(cen)n(tric)g(reference)g(frame)g
-(to)h(galactic.)227 2478 y(The)g(units)g(for)f(the)h(v)-5
-b(alues)27 b(pro)r(cessed)g(b)n(y)g(the)h(ab)r(o)n(v)n(e)e(con)n(v)n
-(ersions)f(are)i(as)g(follo)n(ws:)340 2786 y Fj(\017)45
-b Fk(all)28 b(v)n(elo)r(cities:)36 b(metres)27 b(p)r(er)h(second)e(\(p)
-r(ositiv)n(e)i(if)g(the)g(source)e(receeds)h(from)g(the)h(observ)n
-(er\).)340 2935 y Fj(\017)45 b Fk(frequency:)37 b(Hertz.)340
-3083 y Fj(\017)45 b Fk(all)28 b(w)n(a)n(v)n(elengths:)35
-b(metres.)340 3232 y Fj(\017)45 b Fk(energy:)36 b(Joules.)340
-3380 y Fj(\017)45 b Fk(w)n(a)n(v)n(e)26 b(n)n(um)n(b)r(er:)37
-b(cycles)27 b(p)r(er)g(metre.)227 3573 y(The)h(argumen)n(ts)e(used)i
-(in)g(the)g(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)h(as)h(follo)n
-(ws:)340 3881 y Fj(\017)45 b Fk(RF:)28 b(Rest)g(frequency)f(\(Hz\).)340
-4029 y Fj(\017)45 b Fk(OBSAL)-7 b(T:)28 b(Geo)r(detic)g(altitude)g(of)f
-(observ)n(er)e(\(IA)n(U)k(1975,)c(metres\).)340 4178
-y Fj(\017)45 b Fk(OBSLA)-7 b(T:)28 b(Geo)r(detic)g(latitude)g(of)f
-(observ)n(er)e(\(IA)n(U)k(1975,)c(radians\).)340 4326
-y Fj(\017)45 b Fk(OBSLON:)27 b(Longitude)g(of)h(observ)n(er)d
-(\(radians)i(-)g(p)r(ositiv)n(e)g(east)n(w)n(ards\).)340
-4475 y Fj(\017)45 b Fk(EPOCH:)27 b(Ep)r(o)r(c)n(h)g(of)h(observ)-5
-b(ation)26 b(\(UT1)h(expressed)g(as)g(a)g(Mo)r(di\014ed)h(Julian)f
-(Date\).)340 4623 y Fj(\017)45 b Fk(RA:)28 b(Righ)n(t)g(Ascension)f(of)
-g(source)g(\(radians,)f(FK5)h(J2000\).)340 4772 y Fj(\017)45
-b Fk(DEC:)28 b(Declination)g(of)f(source)f(\(radians,)h(FK5)g(J2000\).)
-340 4920 y Fj(\017)45 b Fk(V)n(OFF:)32 b(V)-7 b(elo)r(cit)n(y)32
-b(of)g(the)g(user-de\014ned)g(reference)f(frame,)h(to)n(w)n(ards)e(the)
-j(p)r(osition)f(giv)n(en)f(b)n(y)g(RA)i(and)427 5020
-y(DEC,)28 b(measured)f(in)g(the)h(helio)r(cen)n(tric)f(reference)g
-(frame.)227 5213 y(If)35 b(the)f(Sp)r(ecMap)g(is)f(3-dimensional,)i
-(source)d(p)r(ositions)h(are)g(pro)n(vided)g(b)n(y)h(the)g(v)-5
-b(alues)33 b(supplied)h(to)g(inputs)227 5313 y(2)f(and)g(3)g(of)h(the)f
-(Sp)r(ecMap)h(\(whic)n(h)f(are)g(simply)g(copied)g(to)g(outputs)h(2)f
-(and)g(3\).)54 b(Note,)35 b(usable)e(v)-5 b(alues)33
-b(are)227 5412 y(still)26 b(required)f(for)g(the)h(RA)f(and)h(DEC)f
-(argumen)n(ts)f(in)i(order)e(to)i(de\014ne)g(the)f Ft(")p
-Fk(user-de\014ned)p Ft(")f Fk(reference)h(frame)227 5512
-y(used)35 b(b)n(y)g(USF2HL)g(and)g(HLF2US.)h(Ho)n(w)n(ev)n(er,)f(AST)p
-Ft(__)p Fk(BAD)g(can)g(b)r(e)g(supplied)h(for)e(RA)i(and)f(DEC)g(if)g
-(the)227 5611 y(user-de\014ned)27 b(reference)g(frame)g(is)h(not)f
-(required.)p eop end
-%%Page: 344 354
-TeXDict begin 344 353 bop 0 52 a FG(344)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(SPECFLUXFRAME)162 b Fd(Create)1860
-581 y(a)1708 681 y(Sp)s(ecFluxF)-10 b(rame)2224 482 y
-FA(AST)p Fe(_)p FA(SPECFLUXFRAME)0 851 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Sp)r(ecFluxF)-7
-b(rame)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-971 y(A)g(Sp)r(ecFluxF)-7 b(rame)27 b(com)n(bines)g(a)g(Sp)r(ecF)-7
-b(rame)27 b(and)h(a)f(FluxF)-7 b(rame)27 b(in)n(to)g(a)g(single)g
-(2-dimensional)f(comp)r(ound)227 1071 y(F)-7 b(rame.)39
-b(Suc)n(h)28 b(a)g(F)-7 b(rame)28 b(can)f(for)h(instance)g(b)r(e)h
-(used)f(to)g(describ)r(e)g(a)g(Plot)g(of)g(a)g(sp)r(ectrum)g(in)h(whic)
-n(h)f(the)h(\014rst)227 1171 y(axis)e(represen)n(ts)f(sp)r(ectral)h(p)r
-(osition)h(and)f(the)h(second)f(axis)g(represen)n(ts)f(\015ux.)0
-1311 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_SPECFLUXFRAM)o(E\()37 b(FRAME1,)k(FRAME2,)g(OPTIONS,)f(STATUS)h
-(\))0 1451 y Fc(Argumen)m(ts:)259 1579 y(FRAME1)31 b(=)h(INTEGER)f
-(\(Giv)m(en\))427 1678 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)36 b(This)28 b(will)g(form)f(the)h(\014rst)f(axis)g(in)h(the)g
-(new)g(Sp)r(ecFluxF)-7 b(rame.)259 1802 y Fc(FRAME2)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 1901 y Fk(P)n(oin)n(ter)f(to)h(the)g
-(FluxF)-7 b(rame.)47 b(This)31 b(will)g(form)g(the)h(second)e(axis)g
-(in)i(the)f(new)g(Sp)r(ecFluxF)-7 b(rame.)48 b(The)427
-2001 y Ft(")p Fk(Sp)r(ecV)-7 b(al)p Ft(")30 b Fk(attribute)h(of)f(this)
-h(FluxF)-7 b(rame)30 b(is)g(not)h(used)f(b)n(y)g(the)h(Sp)r(ecFluxF)-7
-b(rame)31 b(class)e(and)i(so)e(ma)n(y)427 2101 y(b)r(e)f(set)g(to)f
-(AST)p Ft(__)p Fk(BAD)h(when)g(the)g(FluxF)-7 b(rame)27
-b(is)h(created.)259 2224 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2324 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-2424 y(b)r(e)e(used)f(for)g(initialising)g(the)h(new)f(Sp)r(ecFluxF)-7
-b(rame.)39 b(The)29 b(syn)n(tax)e(used)h(is)h(iden)n(tical)f(to)g(that)
-g(for)g(the)427 2523 y(AST)p Ft(_)p Fk(SET)f(routine.)259
-2647 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 2747 y Fk(The)c(global)e(status.)0 2899
-y Fc(Returned)32 b(V)-8 b(alue:)259 3027 y(AST)p Ft(_)p
-Fc(SPECFLUXFRAME)32 b(=)h(INTEGER)427 3126 y Fk(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecFluxF)-7 b(rame.)0
-3279 y Fc(Notes:)340 3552 y Fj(\017)45 b Fk(The)25 b(supplied)g(F)-7
-b(rame)24 b(p)r(oin)n(ters)g(are)g(stored)f(directly)-7
-b(,)26 b(rather)d(than)i(b)r(eing)g(used)f(to)h(create)f(deep)g(copies)
-427 3652 y(of)g(the)h(supplied)f(F)-7 b(rames.)35 b(This)24
-b(means)g(that)g(an)n(y)f(subsequen)n(t)h(c)n(hanges)e(made)i(to)g(the)
-g(F)-7 b(rames)24 b(via)f(the)427 3752 y(supplied)28
-b(p)r(oin)n(ters)f(will)h(result)f(in)h(equiv)-5 b(alen)n(t)27
-b(c)n(hanges)g(b)r(eing)g(visible)h(in)g(the)g(Sp)r(ecFluxF)-7
-b(rame.)340 3875 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 3975 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-4128 y Fc(Status)33 b(Handling)n(:)227 4274 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 4373 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 4473 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 4654 V 0 4785 a FA(AST)p
-Fe(_)p FA(SPECFRAME)1374 4784 y Fd(Create)37 b(a)h(Sp)s(ecF)-10
-b(rame)2594 4785 y FA(AST)p Fe(_)p FA(SPECFRAME)0 4955
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g(Sp)r
-(ecF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h(attributes.)
-227 5075 y(A)j(Sp)r(ecF)-7 b(rame)29 b(is)h(a)g(sp)r(ecialised)f(form)h
-(of)g(one-dimensional)e(F)-7 b(rame)30 b(whic)n(h)g(represen)n(ts)e(v)
--5 b(arious)29 b(co)r(ordinate)227 5175 y(systems)23
-b(used)h(to)f(describ)r(e)g(p)r(ositions)g(within)h(an)f
-(electro-magnetic)f(sp)r(ectrum.)35 b(The)24 b(particular)e(co)r
-(ordinate)227 5274 y(system)32 b(to)g(b)r(e)g(used)g(is)g(sp)r
-(eci\014ed)g(b)n(y)f(setting)h(the)g(Sp)r(ecF)-7 b(rame's)32
-b(System)g(attribute)g(\(the)g(default)h(is)f(w)n(a)n(v)n(e-)227
-5374 y(length\))27 b(quali\014ed,)f(as)g(necessary)-7
-b(,)24 b(b)n(y)i(other)g(attributes)g(suc)n(h)g(as)f(the)i(rest)e
-(frequency)-7 b(,)26 b(the)h(standard)e(of)h(rest,)227
-5473 y(the)i(ep)r(o)r(c)n(h)g(of)f(observ)-5 b(ation,)27
-b(etc)g(\(see)h(the)g(description)f(of)g(the)h(System)g(attribute)g
-(for)f(details\).)227 5593 y(By)d(setting)f(a)h(v)-5
-b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h(attribute,)g(a)g(Sp)r(ecF)-7
-b(rame)23 b(can)h(b)r(e)g(made)f(to)h(represen)n(t)e(o\013sets)i(from)
-227 5693 y(a)j(giv)n(en)g(sp)r(ectral)g(p)r(osition,)h(rather)e(than)i
-(absolute)p eop end
-%%Page: 345 355
-TeXDict begin 345 354 bop 3643 52 a FG(345)0 351 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_SPECFRAME\()38
-b(OPTIONS,)i(STATUS)h(\))0 494 y Fc(Argumen)m(ts:)259
-624 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 723 y Fk(A)g(c)n(haracter)e(string)h
-(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 823 y(b)r(e)39 b(used)f(for)g
-(initialising)f(the)i(new)f(Sp)r(ecF)-7 b(rame.)69 b(The)38
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)h(for)e(the)427
-923 y(AST)p Ft(_)p Fk(SET)27 b(routine.)37 b(If)28 b(no)f
-(initialisation)g(is)h(required,)f(a)g(blank)g(v)-5 b(alue)28
-b(ma)n(y)e(b)r(e)i(supplied.)259 1049 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 1149
-y Fk(The)c(global)e(status.)0 1304 y Fc(Returned)32 b(V)-8
-b(alue:)259 1434 y(AST)p Ft(_)p Fc(SPECFRAME)31 b(=)h(INTEGER)427
-1533 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecF)-7
-b(rame.)0 1688 y Fc(Examples:)227 1822 y Fy(FRAME)47
-b(=)g(AST)p Ft(_)p Fy(SPECFRAME\()d(')j(',)g(STATUS)g(\))427
-1918 y Fk(Creates)36 b(a)g(Sp)r(ecF)-7 b(rame)36 b(to)g(describ)r(e)g
-(the)h(default)g(w)n(a)n(v)n(elength)d(sp)r(ectral)i(co)r(ordinate)g
-(system.)63 b(The)427 2017 y(RestF)-7 b(req)39 b(attribute)g(\(rest)f
-(frequency\))h(is)g(unsp)r(eci\014ed,)j(so)c(it)i(will)f(not)g(b)r(e)g
-(p)r(ossible)f(to)h(align)f(this)427 2117 y(Sp)r(ecF)-7
-b(rame)24 b(with)h(another)e(Sp)r(ecF)-7 b(rame)24 b(on)f(the)i(basis)e
-(of)h(a)g(v)n(elo)r(cit)n(y-based)e(system.)35 b(The)25
-b(standard)e(of)427 2217 y(rest)30 b(is)f(also)g(unsp)r(eci\014ed.)44
-b(This)29 b(means)h(that)g(alignmen)n(t)f(will)h(b)r(e)g(p)r(ossible)g
-(with)g(other)f(Sp)r(ecF)-7 b(rames,)427 2316 y(but)31
-b(no)g(correction)e(will)h(b)r(e)i(made)e(for)g(Doppler)g(shift)i
-(caused)e(b)n(y)g(c)n(hange)f(of)i(rest)f(frame)g(during)g(the)427
-2416 y(alignmen)n(t.)227 2530 y Fy(FRAME)47 b(=)g(AST)p
-Ft(_)p Fy(SPECFRAME\()d('System=VELO,)g(RestFreq=1.0E15,)f
-(StdOfRest=LSRK',)227 2630 y(STATUS)j(\))427 2708 y Fk(Creates)39
-b(a)h(Sp)r(ecF)-7 b(rame)40 b(describing)f(a)h(apparen)n(t)e(radial)h
-(v)n(elo)r(cit)n(y)h(\()p Ft(")p Fk(VELO)p Ft(")p Fk(\))f(axis)g(with)h
-(rest)g(fre-)427 2807 y(quency)35 b(1.0E15)e(Hz)i(\(ab)r(out)g(3000)f
-(Angstroms\),)i(measured)e(in)h(the)h(kinematic)f(Lo)r(cal)f(Standard)h
-(of)427 2907 y(Rest)f(\()p Ft(")p Fk(LSRK)p Ft(")p Fk(\).)56
-b(Since)34 b(the)g(source)f(p)r(osition)h(has)f(not)h(b)r(een)h(sp)r
-(eci\014ed)f(\(using)g(attributes)g(RefRA)427 3007 y(and)c(RefDec\),)i
-(it)f(will)g(only)e(b)r(e)i(p)r(ossible)f(to)g(align)g(this)g(Sp)r(ecF)
--7 b(rame)30 b(with)h(other)f(Sp)r(ecF)-7 b(rames)30
-b(whic)n(h)427 3106 y(are)d(also)f(measured)h(in)h(the)g(LSRK)f
-(standard)g(of)g(rest.)0 3262 y Fc(Notes:)340 3537 y
-Fj(\017)45 b Fk(When)g(con)n(v)n(ersion)c(b)r(et)n(w)n(een)j(t)n(w)n(o)
-e(Sp)r(ecF)-7 b(rames)44 b(is)f(requested)g(\(as)h(when)g(supplying)f
-(Sp)r(ecF)-7 b(rames)427 3637 y(AST)p Ft(_)p Fk(CONVER)g(T\),)36
-b(accoun)n(t)f(will)g(b)r(e)h(tak)n(en)f(of)h(the)g(nature)f(of)h(the)g
-(sp)r(ectral)f(co)r(ordinate)f(systems)427 3737 y(they)f(represen)n(t,)
-g(together)f(with)h(an)n(y)f(qualifying)g(rest)g(frequency)-7
-b(,)34 b(standard)d(of)i(rest,)g(ep)r(o)r(c)n(h)g(v)-5
-b(alues,)427 3836 y(etc.)51 b(The)32 b(AlignSystem)g(and)g
-(AlignStdOfRest)h(attributes)f(will)g(also)f(b)r(e)i(tak)n(en)e(in)n
-(to)h(accoun)n(t.)50 b(The)427 3936 y(results)25 b(will)h(therefore)f
-(fully)h(re\015ect)g(the)g(relationship)f(b)r(et)n(w)n(een)g(p)r
-(ositions)h(measured)f(in)g(the)i(t)n(w)n(o)e(sys-)427
-4036 y(tems.)37 b(In)27 b(addition,)g(an)n(y)f(di\013erence)g(in)h(the)
-g(Unit)h(attributes)f(of)f(the)h(t)n(w)n(o)f(systems)h(will)f(also)g(b)
-r(e)h(tak)n(en)427 4135 y(in)n(to)h(accoun)n(t.)340 4261
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-4361 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 4547 3780
-12 v 0 4678 a FA(AST)p Fe(_)p FA(SPECMAP)1418 4677 y
-Fd(Create)37 b(a)i(Sp)s(ecMap)2775 4678 y FA(AST)p Fe(_)p
-FA(SPECMAP)0 4853 y Fc(Description:)44 b Fk(This)28 b(function)g
-(creates)f(a)g(new)g(Sp)r(ecMap)h(and)g(optionally)e(initialises)i(its)
-f(attributes.)227 4974 y(An)e(Sp)r(ecMap)e(is)h(a)f(sp)r(ecialised)h
-(form)f(of)h(Mapping)f(whic)n(h)h(can)f(b)r(e)h(used)g(to)g(represen)n
-(t)e(a)i(sequence)f(of)h(con)n(v)n(er-)227 5074 y(sions)i(b)r(et)n(w)n
-(een)h(standard)e(sp)r(ectral)h(co)r(ordinate)f(systems.)36
-b(This)27 b(includes)g(con)n(v)n(ersions)c(b)r(et)n(w)n(een)k
-(frequency)-7 b(,)227 5173 y(w)n(a)n(v)n(elength,)36
-b(and)f(v)-5 b(arious)34 b(forms)h(of)g(v)n(elo)r(cit)n(y)-7
-b(,)37 b(as)d(w)n(ell)h(as)g(con)n(v)n(ersions)e(b)r(et)n(w)n(een)i
-(di\013eren)n(t)h(standards)e(of)227 5273 y(rest.)227
-5394 y(When)19 b(a)f(Sp)r(ecMap)h(is)f(\014rst)g(created,)i(it)e
-(simply)h(p)r(erforms)e(a)h(unit)h(\(n)n(ull\))h(Mapping.)33
-b(Using)18 b(the)h(AST)p Ft(_)p Fk(SPECADD)227 5494 y(routine,)31
-b(a)g(series)e(of)i(co)r(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)e
-(then)j(b)r(e)f(added,)g(selected)g(from)f(the)h(list)g(of)g(sup-)227
-5593 y(p)r(orted)k(con)n(v)n(ersions.)57 b(This)35 b(allo)n(ws)f(m)n
-(ulti-step)h(con)n(v)n(ersions)d(b)r(et)n(w)n(een)j(a)g(v)-5
-b(ariet)n(y)34 b(of)h(sp)r(ectral)g(co)r(ordinate)227
-5693 y(systems)27 b(to)h(b)r(e)g(assem)n(bled)f(out)g(of)h(the)g
-(building)g(blo)r(c)n(ks)e(pro)n(vided)h(b)n(y)g(this)h(class.)p
-eop end
-%%Page: 346 356
-TeXDict begin 346 355 bop 0 52 a FG(346)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(F)-7
-b(or)18 b(details)g(of)g(the)h(individual)g(co)r(ordinate)e(con)n(v)n
-(ersions)f(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e(of)i(the)
-f(AST)p Ft(_)p Fk(SPECADD)227 451 y(routine.)227 598
-y(Con)n(v)n(ersions)27 b(are)g(a)n(v)-5 b(ailable)28
-b(to)h(transform)e(b)r(et)n(w)n(een)i(standards)f(of)h(rest.)40
-b(Suc)n(h)29 b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)227
-698 y(the)23 b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f(This)
-h(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 797 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 897
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 997 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-1096 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 1196 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-1295 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 1395 y(for)27 b(axes)g(2)g(and)h(3)f(from)g(input)h
-(to)g(output\).)0 1590 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SPECMAP\()c(NIN,)j(FLAGS,)f(OPTIONS,)f(STATUS)
-h(\))0 1785 y Fc(Argumen)m(ts:)259 1966 y(NIN)32 b(=)g(INTEGER)f(\(Giv)
-m(en\))427 2066 y Fk(The)22 b(n)n(um)n(b)r(er)g(of)g(inputs)h(to)f(the)
-g(Mapping)g(\(this)h(will)f(also)f(equal)h(the)g(n)n(um)n(b)r(er)g(of)g
-(outputs\).)36 b(This)22 b(v)-5 b(alue)427 2166 y(m)n(ust)33
-b(b)r(e)g(either)f(1)g(or)g(3.)51 b(In)33 b(either)f(case,)h(the)g
-(\014rst)f(input)h(and)g(output)g(corresp)r(oindis)d(the)j(sp)r(ectral)
-427 2265 y(axis.)45 b(F)-7 b(or)30 b(a)g(3-axis)f(Sp)r(ecMap,)j(the)f
-(second)f(and)g(third)h(axes)f(giv)n(e)f(the)i(RA)g(and)g(DEC)f
-(\(J2000)f(FK5\))427 2365 y(of)k(the)g(source.)51 b(This)32
-b(p)r(ositional)g(information)g(is)h(used)f(b)n(y)h(con)n(v)n(ersions)d
-(whic)n(h)i(transform)g(b)r(et)n(w)n(een)427 2464 y(standards)19
-b(of)i(rest,)g(and)f(replaces)f(the)i Ft(")p Fk(RA)p
-Ft(")f Fk(and)g Ft(")p Fk(DEC)p Ft(")f Fk(argumen)n(ts)g(for)h(the)h
-(individual)f(con)n(v)n(ersions)427 2564 y(listed)28
-b(in)g(description)f(of)h(the)g Ft(")p Fk(Sp)r(ecAdd)p
-Ft(")f Fk(routine.)259 2720 y Fc(FLA)m(GS)33 b(=)f(INTEGER)f(\(Giv)m
-(en\))427 2819 y Fk(This)d(argumen)n(t)e(is)i(reserv)n(ed)e(for)h
-(future)h(use)f(and)h(should)f(curren)n(tly)g(alw)n(a)n(ys)e(b)r(e)j
-(set)g(to)f(zero.)259 2975 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3074 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3174 y(used)k(for)e(initialising)i(the)f(new)h(Sp)r(ecMap.)36
-b(The)24 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)h(that)f(for)g
-(the)h(AST)p Ft(_)p Fk(SET)427 3274 y(routine.)37 b(If)28
-b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)259 3429 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3529 y Fk(The)c(global)e(status.)0 3736 y Fc(Returned)32
-b(V)-8 b(alue:)259 3918 y(AST)p Ft(_)p Fc(SPECMAP)32
-b(=)g(INTEGER)427 4017 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r
-(ecMap.)0 4224 y Fc(Notes:)340 4552 y Fj(\017)45 b Fk(The)32
-b(nature)e(and)i(units)f(of)g(the)h(co)r(ordinate)e(v)-5
-b(alues)31 b(supplied)h(for)e(the)i(\014rst)f(input)h(\(i.e.)49
-b(the)31 b(sp)r(ectral)427 4652 y(input\))23 b(of)e(a)g(Sp)r(ecMap)h(m)
-n(ust)g(b)r(e)g(appropriate)d(to)j(the)g(\014rst)f(con)n(v)n(ersion)e
-(step)j(applied)f(b)n(y)g(the)h(Sp)r(ecMap.)427 4752
-y(F)-7 b(or)19 b(instance,)j(if)e(the)g(\014rst)f(con)n(v)n(ersion)f
-(step)i(is)f Ft(")p Fk(FR)-7 b(TO)n(VL)p Ft(")19 b Fk(\(frequency)h(to)
-f(relativistic)g(v)n(elo)r(cit)n(y\),)i(then)427 4851
-y(the)34 b(co)r(ordinate)e(v)-5 b(alues)32 b(for)h(the)h(\014rst)e
-(input)i(should)f(b)r(e)h(frequency)e(in)i(units)f(of)g(Hz.)54
-b(Similarly)-7 b(,)34 b(the)427 4951 y(nature)k(and)h(units)g(of)f(the)
-h(co)r(ordinate)f(v)-5 b(alues)38 b(returned)g(b)n(y)g(a)h(Sp)r(ecMap)f
-(will)h(b)r(e)g(determined)g(b)n(y)427 5050 y(the)c(last)f(con)n(v)n
-(ersion)e(step)i(applied)g(b)n(y)g(the)h(Sp)r(ecMap.)56
-b(F)-7 b(or)34 b(instance,)h(if)g(the)g(last)f(con)n(v)n(ersion)d(step)
-427 5150 y(is)k Ft(")p Fk(VL)-7 b(TO)n(V)n(O)p Ft(")33
-b Fk(\(relativistic)h(v)n(elo)r(cit)n(y)g(to)g(optical)g(v)n(elo)r(cit)
-n(y\),)i(then)f(the)g(co)r(ordinate)f(v)-5 b(alues)34
-b(for)g(the)427 5250 y(\014rst)29 b(output)g(will)g(b)r(e)g(optical)g
-(v)n(elo)r(cit)n(y)e(in)j(units)f(of)f(metres)h(p)r(er)g(second.)39
-b(See)29 b(the)g(description)f(of)h(the)427 5349 y(AST)p
-Ft(_)p Fk(SPECADD)f(routine)f(for)g(the)h(units)g(exp)r(ected)g(and)g
-(returned)f(b)n(y)g(eac)n(h)g(con)n(v)n(ersion.)340 5505
-y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-5604 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 347 357
-TeXDict begin 347 356 bop 3643 52 a FG(347)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(SPHMAP)1439 483 y Fd(Create)38
-b(a)g(SphMap)2855 482 y FA(AST)p Fe(_)p FA(SPHMAP)0 696
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(SphMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-833 y(A)21 b(SphMap)g(is)f(a)g(Mapping)h(whic)n(h)f(transforms)f(p)r
-(oin)n(ts)i(from)f(a)g(3-dimensional)f(Cartesian)g(co)r(ordinate)h
-(system)227 933 y(in)n(to)28 b(a)g(2-dimensional)f(spherical)g(co)r
-(ordinate)g(system)h(\(longitude)g(and)g(latitude)g(on)g(a)g(unit)h
-(sphere)e(cen)n(tred)227 1033 y(at)33 b(the)f(origin\).)51
-b(It)33 b(w)n(orks)d(b)n(y)j(regarding)d(the)j(input)g(co)r(ordinates)e
-(as)h(p)r(osition)g(v)n(ectors)f(and)h(\014nding)h(their)227
-1132 y(in)n(tersection)25 b(with)h(the)h(sphere)e(surface.)35
-b(The)26 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)g(pro)r(duces)
-h(p)r(oin)n(ts)h(whic)n(h)g(are)227 1232 y(a)h(unit)i(distance)e(from)g
-(the)h(origin)f(\(i.e.)37 b(unit)28 b(v)n(ectors\).)0
-1406 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_SPHMAP\()c
-(OPTIONS,)h(STATUS)h(\))0 1580 y Fc(Argumen)m(ts:)259
-1741 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1841 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 1940 y(used)27
-b(for)f(initialising)g(the)h(new)f(SphMap.)37 b(The)26
-b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)g(that)h(for)f(the)h(AST)p
-Ft(_)p Fk(SET)427 2040 y(routine.)259 2185 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2285 y Fk(The)c(global)e(status.)0 2471 y Fc(Returned)32
-b(V)-8 b(alue:)259 2633 y(AST)p Ft(_)p Fc(SPHMAP)32 b(=)g(INTEGER)427
-2732 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(SphMap.)0
-2919 y Fc(Notes:)340 3226 y Fj(\017)45 b Fk(The)39 b(spherical)f(co)r
-(ordinates)f(are)h(longitude)g(\(p)r(ositiv)n(e)h(an)n(ti-clo)r(c)n
-(kwise)e(lo)r(oking)h(from)g(the)h(p)r(ositiv)n(e)427
-3326 y(latitude)24 b(p)r(ole\))f(and)g(latitude.)36 b(The)23
-b(Cartesian)f(co)r(ordinates)g(are)g(righ)n(t-handed,)h(with)g(the)h(x)
-f(axis)f(\(axis)427 3425 y(1\))28 b(at)f(zero)g(longitude)g(and)h
-(latitude,)g(and)f(the)h(z)g(axis)e(\(axis)i(3\))f(at)g(the)h(p)r
-(ositiv)n(e)g(latitude)g(p)r(ole.)340 3570 y Fj(\017)45
-b Fk(A)n(t)28 b(either)g(p)r(ole,)f(the)h(longitude)g(is)f(set)h(to)f
-(the)h(v)-5 b(alue)28 b(of)f(the)h(P)n(olarLong)d(attribute.)340
-3716 y Fj(\017)45 b Fk(If)28 b(the)f(Cartesian)f(co)r(ordinates)g(are)g
-(all)h(zero,)f(then)h(the)h(longitude)f(and)g(latitude)g(are)f(set)h
-(to)g(the)h(v)-5 b(alue)427 3815 y(AST)p Ft(__)p Fk(BAD.)340
-3960 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20
-b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e
-(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 4060 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-4247 y Fc(Status)33 b(Handling)n(:)227 4393 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 4492 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 4592 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)-2 4766 y Fc(Status)33 b(Handling)n(:)227
-4912 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 5012 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-5111 y Fj(\003)p Fk(status)p Ft(")p Fk(.)-2 5286 y Fc(Status)33
-b(Handling)n(:)227 5432 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5531 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 5631 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 348 358
-TeXDict begin 348 357 bop 0 52 a FG(348)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(STCCA)-11 b(T)g(ALOGENTR)g(YLOCA)g(TION)
-2602 500 y Fd(Create)2602 599 y(a)2602 699 y(Stc-)2602
-798 y(Cat-)2602 898 y(a-)2602 998 y(lo-)2602 1097 y(gEn-)2602
-1197 y(try-)2602 1310 y(Lo-)2602 1410 y(ca-)2602 1509
-y(tion)2752 482 y FA(AST)p Fe(_)p FA(STCCA)g(T)g(ALOGENTR)g(YLOCA)g
-(TION)0 1670 y Fc(Description:)44 b Fk(This)39 b(function)g(creates)f
-(a)g(new)h(StcCatalogEn)n(tryLo)r(cation)c(and)k(optionally)f
-(initialises)g(its)h(at-)227 1770 y(tributes.)227 1893
-y(The)20 b(StcCatalogEn)n(tryLo)r(cation)c(class)i(is)h(a)g(sub-class)f
-(of)h(Stc)h(used)f(to)h(describ)r(e)e(the)i(co)n(v)n(erage)c(of)k(the)f
-(datasets)227 1993 y(con)n(tained)27 b(in)h(some)f(V)n(O)g(resource.)
-227 2116 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p
-Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 2263
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_STCCATALOGEN)o
-(TRY)o(LO)o(CAT)o(IO)o(N\()37 b(REGION,)k(NCOORDS,)f(COORDS,)h
-(OPTIONS,)f(STATUS)227 2363 y(\))0 2510 y Fc(Argumen)m(ts:)259
-2644 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 2744
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2874 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427 2974
-y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7 b(.)34
-b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-3105 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-3204 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 3304 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-3403 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 3503
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 3603 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3702 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3802 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3902 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 4001 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 4101 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-4231 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4331 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4431 y(b)r(e)36
-b(used)e(for)h(initialising)g(the)g(new)g(StcCatalogEn)n(tryLo)r
-(cation.)55 b(The)35 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)427
-4530 y(that)28 b(for)f(the)h(AST)p Ft(_)p Fk(SET)f(routine.)259
-4661 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4760 y Fk(The)c(global)e(status.)0 4920
-y Fc(Returned)32 b(V)-8 b(alue:)259 5054 y(AST)p Ft(_)p
-Fc(STCCA)g(T)g(ALOGENTR)g(YLOCA)g(TION)34 b(=)e(INTEGER)427
-5154 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(StcCatalogEn)n(tryLo)r
-(cation.)0 5313 y Fc(Notes:)340 5593 y Fj(\017)45 b Fk(A)27
-b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f(supplied)h(Region.)36
-b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n(t)g(c)n(hanges)f(made)
-427 5693 y(to)j(the)g(encapsulated)f(Region)g(using)g(the)h(supplied)g
-(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i(e\013ect)g(on)f(the)h(Stc.)p
-eop end
-%%Page: 349 359
-TeXDict begin 349 358 bop 3643 52 a FG(349)340 351 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-451 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)p 0 637 3780
-12 v 0 768 a FA(AST)p Fe(_)p FA(STCOBSD)l(A)-11 b(T)g(ALOCA)g(TION)2110
-785 y Fd(Create)2110 885 y(a)2110 985 y(StcOb-)2110 1084
-y(s-)2110 1184 y(Dat-)2110 1283 y(aLo-)2110 1383 y(ca-)2110
-1483 y(tion)2260 768 y FA(AST)p Fe(_)p FA(STCOBSD)l(A)g(T)g(ALOCA)g
-(TION)0 1635 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f
-(a)g(new)g(StcObsDataLo)r(cation)g(and)g(optionally)g(initialises)g
-(its)h(attributes.)227 1756 y(The)j(StcObsDataLo)r(cation)e(class)h(is)
-g(a)g(sub-class)f(of)i(Stc)g(used)f(to)g(describ)r(e)h(the)g(co)n(v)n
-(erage)c(of)k(the)f(datasets)227 1856 y(con)n(tained)d(in)h(some)f(V)n
-(O)g(resource.)227 1977 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2120 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i
-(AST_STCOBSDATALO)o(CAT)o(IO)o(N\()37 b(REGION,)k(NCOORDS,)f(COORDS,)h
-(OPTIONS,)f(STATUS)h(\))0 2263 y Fc(Argumen)m(ts:)259
-2393 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 2493
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2619 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427 2718
-y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7 b(.)34
-b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-2845 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-2944 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 3044 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-3144 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 3243
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 3343 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3442 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3542 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3642 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 3741 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 3841 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-3967 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4067 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4166 y(b)r(e)26
-b(used)e(for)h(initialising)f(the)i(new)f(StcObsDataLo)r(cation.)34
-b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)g(for)427
-4266 y(the)j(AST)p Ft(_)p Fk(SET)f(routine.)259 4392
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4492 y Fk(The)c(global)e(status.)0 4647 y Fc(Returned)32
-b(V)-8 b(alue:)259 4777 y(AST)p Ft(_)p Fc(STCOBSD)m(A)g(T)g(ALOCA)g
-(TION)34 b(=)e(INTEGER)427 4877 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g
-(new)g(StcObsDataLo)r(cation.)0 5032 y Fc(Notes:)340
-5308 y Fj(\017)45 b Fk(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h
-(the)f(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f
-(subsequen)n(t)g(c)n(hanges)f(made)427 5408 y(to)j(the)g(encapsulated)f
-(Region)g(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e
-(no)i(e\013ect)g(on)f(the)h(Stc.)340 5534 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5634
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 350 360
-TeXDict begin 350 359 bop 0 52 a FG(350)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(STCRESOUR)l(CEPR)l(OFILE)2089
-500 y Fd(Create)2089 599 y(a)2089 699 y(StcRe-)2089 798
-y(sour-)2089 898 y(ce-)2089 998 y(Pro-)2089 1097 y(\014le)2239
-482 y FA(AST)p Fe(_)p FA(STCRESOUR)l(CEPR)l(OFILE)0 1238
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(StcResourcePro\014le)f(and)h(optionally)g(initialises)g(its)h
-(attributes.)227 1356 y(The)36 b(StcResourcePro\014le)d(class)i(is)h(a)
-f(sub-class)f(of)i(Stc)g(used)g(to)f(describ)r(e)h(the)g(co)n(v)n
-(erage)d(of)i(the)h(datasets)227 1456 y(con)n(tained)27
-b(in)h(some)f(V)n(O)g(resource.)227 1574 y(See)h(h)n
-(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o
-(meta/STC.h)n(tml)0 1711 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_STCRESOURCEP)o(ROF)o(IL)o(E\()37
-b(REGION,)k(NCOORDS,)f(COORDS,)h(OPTIONS,)f(STATUS)h(\))0
-1848 y Fc(Argumen)m(ts:)259 1973 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 2072 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f
-(Region.)259 2193 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427
-2292 y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7
-b(.)34 b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-2413 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-2512 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 2612 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-2712 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 2811
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 2911 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3010 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3110 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3210 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 3309 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 3409 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-3529 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 3629 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 3729 y(b)r(e)g(used)f(for)g
-(initialising)g(the)g(new)g(StcResourcePro\014le.)43
-b(The)30 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g(to)g(that)g(for)427
-3828 y(the)e(AST)p Ft(_)p Fk(SET)f(routine.)259 3949
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4048 y Fk(The)c(global)e(status.)0 4198 y Fc(Returned)32
-b(V)-8 b(alue:)259 4322 y(AST)p Ft(_)p Fc(STCRESOUR)m(CEPR)m(OFILE)32
-b(=)g(INTEGER)427 4421 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcResourcePro\014le.)0 4571 y Fc(Notes:)340 4841 y
-Fj(\017)45 b Fk(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f
-(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 4941 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 5061 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5161
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 5310 y Fc(Status)33
-b(Handling)n(:)227 5456 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5556 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 5656 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 351 361
-TeXDict begin 351 360 bop 3643 52 a FG(351)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(STCSCHAN)1379 483 y Fd(Create)37
-b(an)i(StcsChan)2699 482 y FA(AST)p Fe(_)p FA(STCSCHAN)0
-676 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(StcsChan)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-809 y(A)33 b(StcsChan)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Channel)g
-(whic)n(h)g(supp)r(orts)g(STC-S)h(I/O)e(op)r(erations.)50
-b(W)-7 b(riting)32 b(an)227 908 y(Ob)5 b(ject)35 b(to)f(an)g(StcsChan)h
-(\(using)f(AST)p Ft(_)p Fk(WRITE\))h(will,)h(if)f(the)g(Ob)5
-b(ject)35 b(is)f(suitable,)i(generate)d(an)i(STC-S)227
-1008 y(description)24 b(of)g(that)h(Ob)5 b(ject,)25 b(and)f(reading)g
-(from)g(an)g(StcsChan)g(will)h(create)e(a)h(new)h(Ob)5
-b(ject)24 b(from)g(its)h(STC-S)227 1108 y(description.)227
-1241 y(Normally)-7 b(,)40 b(when)e(y)n(ou)f(use)h(an)f(StcsChan,)k(y)n
-(ou)c(should)g(pro)n(vide)g Ft(")p Fk(source)p Ft(")f
-Fk(and)i Ft(")p Fk(sink)p Ft(")e Fk(routines)i(whic)n(h)227
-1340 y(connect)f(it)g(to)f(an)h(external)f(data)g(store)g(b)n(y)g
-(reading)f(and)i(writing)f(the)h(resulting)f(text.)65
-b(These)36 b(routines)227 1440 y(should)k(p)r(erform)f(an)n(y)h(con)n
-(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n(haracter)f
-(enco)r(dings)h(and)h(the)g(in)n(ternal)227 1539 y(ASCI)r(I)33
-b(enco)r(ding.)51 b(If)33 b(no)f(suc)n(h)g(routines)g(are)g(supplied,)i
-(a)e(Channel)g(will)h(read)e(from)h(standard)g(input)h(and)227
-1639 y(write)28 b(to)f(standard)g(output.)0 1805 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_STCSCHAN\()38 b(SOURCE,)j(SINK,)g
-(OPTIONS,)g(STATUS)g(\))0 1972 y Fc(Argumen)m(ts:)259
-2125 y(SOUR)m(CE)32 b(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-2225 y Fk(A)g(source)e(routine,)j(whic)n(h)e(is)h(a)f(subroutine)g
-(whic)n(h)g(tak)n(es)g(a)g(single)g(in)n(teger)g(error)e(status)j
-(argumen)n(t.)427 2325 y(This)23 b(routine)e(will)i(b)r(e)g(used)f(b)n
-(y)g(the)g(StcsChan)h(to)f(obtain)g(lines)g(of)g(input)h(text.)36
-b(On)22 b(eac)n(h)f(in)n(v)n(o)r(cation,)h(it)427 2424
-y(should)27 b(read)f(the)i(next)f(input)h(line)g(from)e(some)h
-(external)f(data)h(store,)f(and)h(then)h(return)f(the)g(resulting)427
-2524 y(text)32 b(to)f(the)g(AST)h(library)e(b)n(y)h(calling)f(AST)p
-Ft(_)p Fk(PUTLINE.)h(It)g(should)g(supply)g(a)g(negativ)n(e)f(line)i
-(length)427 2623 y(when)g(there)g(are)f(no)g(more)g(lines)h(to)g(read.)
-48 b(If)33 b(an)e(error)f(o)r(ccurs,)i(it)g(should)g(set)g(its)g(o)n
-(wn)f(error)f(status)427 2723 y(argumen)n(t)d(to)g(an)h(error)d(v)-5
-b(alue)28 b(b)r(efore)f(returning.)427 2844 y(If)g(the)g(n)n(ull)f
-(routine)g(AST)p Ft(_)p Fk(NULL)h(is)f(suppied)h(as)e(the)i(SOUR)n(CE)f
-(v)-5 b(alue,)26 b(the)h(Channel)f(will)g(read)g(from)427
-2943 y(standard)h(input)h(instead.)259 3084 y Fc(SINK)k(=)g(SUBR)m
-(OUTINE)g(\(Giv)m(en\))427 3184 y Fk(A)24 b(sink)f(routine,)h(whic)n(h)
-f(is)g(a)g(subroutine)g(whic)n(h)g(tak)n(es)f(a)h(single)g(in)n(teger)f
-(error)f(status)i(argumen)n(t.)35 b(This)427 3284 y(routine)g(will)g(b)
-r(e)h(used)f(b)n(y)f(the)i(StcsChan)f(to)g(deliv)n(er)f(lines)h(of)g
-(output)g(text.)60 b(On)35 b(eac)n(h)f(in)n(v)n(o)r(cation,)427
-3383 y(it)c(should)f(obtain)h(the)f(next)h(output)g(line)g(from)f(the)h
-(AST)g(library)e(b)n(y)h(calling)g(AST)p Ft(_)p Fk(GETLINE,)g(and)427
-3483 y(then)i(deliv)n(er)f(the)h(resulting)f(text)g(to)h(some)f
-(external)f(data)h(store.)45 b(If)31 b(an)f(error)e(o)r(ccurs,)i(it)h
-(should)g(set)427 3583 y(its)d(o)n(wn)f(error)f(status)h(argumen)n(t)g
-(to)g(an)g(error)f(v)-5 b(alue)27 b(b)r(efore)h(returning.)427
-3703 y(If)41 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(suppied)g(as)g(the)h(SINK)f(v)-5 b(alue,)43
-b(the)e(Channel)f(will)h(write)f(to)427 3803 y(standard)27
-b(output)h(instead.)259 3944 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4044 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 4143 y(used)j(for)f(initialising)h(the)g(new)f(StcsChan.)36
-b(The)24 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)g(for)f
-(the)h(AST)p Ft(_)p Fk(SET)427 4243 y(routine.)259 4384
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4484 y Fk(The)c(global)e(status.)0 4663 y Fc(Returned)32
-b(V)-8 b(alue:)259 4816 y(AST)p Ft(_)p Fc(STCSCHAN)32
-b(=)g(INTEGER)427 4916 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcsChan.)0 5095 y Fc(Notes:)340 5394 y Fj(\017)45 b
-Fk(The)27 b(names)g(of)g(the)h(routines)e(supplied)i(for)e(the)i(SOUR)n
-(CE)e(and)h(SINK)g(argumen)n(ts)f(should)h(app)r(ear)f(in)427
-5494 y(EXTERNAL)31 b(statemen)n(ts)f(in)h(the)g(F)-7
-b(ortran)30 b(routine)g(whic)n(h)h(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(STCSCHAN.)j(Ho)n(w)n(ev)n(er,)427 5593 y(this)k(is)f(not)g
-(generally)f(necessary)f(for)i(the)g(n)n(ull)h(routine)f(AST)p
-Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)427 5693 y(include)28 b(\014le)g(has)f(b)r(een)h(used\).)p
-eop end
-%%Page: 352 362
-TeXDict begin 352 361 bop 0 52 a FG(352)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)28 b(the)g(external)e(data)h(source)f(or)g(sink)i(uses)e(a)h(c)
-n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r(I,)g(the)f(supplied)
-427 451 y(source)i(and)g(sink)g(functions)h(should)f(translate)g(b)r
-(et)n(w)n(een)h(the)f(external)g(c)n(haracter)f(enco)r(ding)h(and)g
-(the)427 551 y(in)n(ternal)e(ASCI)r(I)i(enco)r(ding)e(used)g(b)n(y)h
-(AST.)340 679 y Fj(\017)45 b Fk(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fk(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 778 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)340 906 y Fj(\017)45 b
-Fk(Note)36 b(that)f(the)h(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(\(one)f(underscore\))f(is)h(di\013eren)n(t)h(to)f(AST)p
-Ft(__)p Fk(NULL)g(\(t)n(w)n(o)427 1006 y(underscores\),)26
-b(whic)n(h)i(is)f(the)h(n)n(ull)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)p
-0 1196 3780 12 v 0 1326 a FA(AST)p Fe(_)p FA(STCSEAR)l(CHLOCA)-11
-b(TION)2029 1344 y Fd(Create)2029 1444 y(a)2029 1543
-y(Stc-)2029 1643 y(Searc)m(hLo-)2029 1743 y(ca-)2029
-1842 y(tion)2179 1326 y FA(AST)p Fe(_)p FA(STCSEAR)l(CHLOCA)g(TION)0
-1998 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(StcSearc)n(hLo)r(cation)f(and)i(optionally)e(initialises)i(its)f
-(attributes.)227 2120 y(The)h(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)
-f(sub-class)f(of)i(Stc)g(used)f(to)h(describ)r(e)f(the)h(co)n(v)n
-(erage)d(of)i(a)h(V)n(O)f(query)-7 b(.)227 2243 y(See)28
-b(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o
-(meta/STC.h)n(tml)0 2387 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_STCSEARCHLOC)o(ATI)o(ON)o(\()38
-b(REGION,)i(NCOORDS,)g(COORDS,)h(OPTIONS,)f(STATUS)i(\))0
-2532 y Fc(Argumen)m(ts:)259 2664 y(REGION)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 2763 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f
-(Region.)259 2891 y Fc(NCOORDS)k(=)h(INTEGER)f(\(Giv)m(en\))427
-2991 y Fk(The)d(length)g(of)f(the)h(COORDS)g(arra)n(y)-7
-b(.)34 b(Supply)28 b(zero)f(if)h(COORDS)f(should)h(b)r(e)g(ignored.)259
-3119 y Fc(COORDS\()j(NCOORDS)g(\))h(=)g(INTEGER)f(\(Giv)m(en\))427
-3219 y Fk(An)20 b(arra)n(y)c(holding)j(NCOORDS)g(AstKeyMap)f(p)r(oin)n
-(ters)h(\(if)h(NCOORDS)f(is)f(zero,)i(the)g(supplied)f(v)-5
-b(alue)19 b(is)427 3318 y(ignored\).)35 b(Eac)n(h)24
-b(supplied)h(KeyMap)f(describ)r(es)g(the)h(con)n(ten)n(ts)g(of)f(a)h
-(single)f(STC)h Fm(<)p Fk(AstroCo)r(ords)p Fm(>)d Fk(ele-)427
-3418 y(men)n(t,)f(and)d(should)g(ha)n(v)n(e)f(elemen)n(ts)i(with)f(k)n
-(eys)g(giv)n(en)f(b)n(y)i(constan)n(ts)e(AST)p Ft(__)p
-Fk(STCNAME,)h(AST)p Ft(__)p Fk(STCV)-9 b(ALUE,)427 3518
-y(AST)p Ft(__)p Fk(STCERR)n(OR,)21 b(AST)p Ft(__)p Fk(STCRES,)g(AST)p
-Ft(__)p Fk(STCSIZE,)g(AST)p Ft(__)p Fk(STCPIXSZ.)g(An)n(y)h(of)f(these)
-h(ele-)427 3617 y(men)n(ts)d(ma)n(y)e(b)r(e)i(omitted,)i(but)e(no)f
-(other)g(elemen)n(ts)g(should)g(b)r(e)h(included.)34
-b(If)19 b(supplied,)i(the)d(AST)p Ft(__)p Fk(STCNAME)427
-3717 y(elemen)n(t)23 b(should)g(b)r(e)h(a)e(v)n(ector)g(of)h(c)n
-(haracter)e(string)h(p)r(oin)n(ters)h(holding)f(the)i
-Ft(")p Fk(Name)p Ft(")e Fk(item)i(for)e(eac)n(h)g(axis)427
-3816 y(in)34 b(the)g(co)r(ordinate)e(system)i(represen)n(ted)e(b)n(y)h
-(REGION.)g(An)n(y)h(other)f(supplied)h(elemen)n(ts)f(should)g(b)r(e)427
-3916 y(scalar)22 b(elemen)n(ts,)i(eac)n(h)f(holding)g(a)g(p)r(oin)n
-(ter)g(to)g(a)g(Region)f(describing)h(the)h(asso)r(ciated)e(item)i(of)f
-(ancillary)427 4016 y(information)37 b(\(error,)h(resolution,)g(size,)h
-(pixel)f(size)e(or)h(v)-5 b(alue\).)65 b(These)37 b(Regions)f(should)h
-(describ)r(e)g(a)427 4115 y(v)n(olume)27 b(within)i(the)f(co)r
-(ordinate)e(system)h(represen)n(ted)g(b)n(y)g(REGION.)259
-4243 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4343 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 4443 y(b)r(e)g(used)g(for)f
-(initialising)g(the)h(new)g(StcSearc)n(hLo)r(cation.)44
-b(The)31 b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)h(for)427
-4542 y(the)d(AST)p Ft(_)p Fk(SET)f(routine.)259 4670
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4770 y Fk(The)c(global)e(status.)0 4927 y Fc(Returned)32
-b(V)-8 b(alue:)259 5059 y(AST)p Ft(_)p Fc(STCSEAR)m(CHLOCA)g(TION)33
-b(=)f(INTEGER)427 5158 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcSearc)n(hLo)r(cation.)0 5316 y Fc(Notes:)340 5593
-y Fj(\017)45 b Fk(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f
-(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 5693 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)p eop end
-%%Page: 353 363
-TeXDict begin 353 362 bop 3643 52 a FG(353)340 351 y
-Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f
-(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427
-451 y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)-2 610 y Fc(Status)33
-b(Handling)n(:)227 756 y Fk(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 856 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fk(in)n(t)227
-956 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p 0 1150 3780
-12 v 0 1280 a FA(AST)p Fe(_)p FA(STRIPESCAPES)190 b Fd(Remo)m(v)m(e)37
-b(AST)1725 1380 y(escap)s(e)1644 1479 y(sequences)1556
-1594 y(from)h(a)g(string)2421 1280 y FA(AST)p Fe(_)p
-FA(STRIPESCAPES)0 1778 y Fc(Description:)44 b Fk(This)25
-b(function)h(remo)n(v)n(es)d(AST)j(escap)r(e)e(sequences)h(from)f(a)h
-(supplied)g(string,)g(returning)g(the)g(result-)227 1877
-y(ing)32 b(text)g(as)f(the)h(function)g(v)-5 b(alue.)49
-b(The)32 b(b)r(eha)n(viour)e(of)i(this)g(function)g(can)f(b)r(e)h(con)n
-(trolled)f(b)n(y)g(in)n(v)n(oking)f(the)227 1977 y(AST)p
-Ft(_)p Fk(ESCAPES)e(routine,)h(whic)n(h)g(can)g(b)r(e)h(used)f(to)g
-(supress)f(or)g(enable)h(the)g(remo)n(v)-5 b(al)28 b(of)h(escap)r(e)f
-(sequences)227 2077 y(b)n(y)g(this)f(function.)227 2200
-y(AST)33 b(escap)r(e)e(sequences)h(are)f(used)h(b)n(y)f(the)i(Plot)e
-(class)h(to)g(mo)r(dify)g(the)g(app)r(earance)f(and)h(p)r(osition)g(of)
-g(sub-)227 2299 y(strings)27 b(within)h(a)f(plotted)h(text)g(string.)37
-b(See)27 b(the)h Ft(")p Fk(Escap)r(e)p Ft(")e Fk(attribute)i(for)f
-(further)g(information.)0 2446 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_STRIPESCAPES)o(\()38 b(TEXT)k(\))0
-2593 y Fc(Argumen)m(ts:)259 2727 y(TEXT)427 2827 y Fk(The)28
-b(string)f(to)g(b)r(e)h(c)n(hec)n(k)n(ed.)0 2986 y Fc(Returned)k(V)-8
-b(alue:)259 3120 y(AST)p Ft(_)p Fc(STRIPESCAPES)33 b(=)f(CHARA)m(CTER)
-427 3220 y Fk(The)g(mo)r(di\014ed)g(string.)49 b(If)32
-b(the)g(AST)p Ft(_)p Fk(ESCAPES)f(routine)h(has)f(b)r(een)h(called)f
-(indicating)h(that)g(escap)r(e)427 3319 y(sequences)27
-b(should)g(not)h(b)r(e)g(stripp)r(ed,)g(then)g(the)g(supplied)g(string)
-f(is)g(returned)h(without)g(c)n(hange.)p 0 3513 V 0 3644
-a FA(AST)p Fe(_)p FA(SWITCHMAP)1366 3645 y Fd(Create)37
-b(a)i(Switc)m(hMap)2568 3644 y FA(AST)p Fe(_)p FA(SWITCHMAP)0
-3829 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(Switc)n(hMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-3952 y(A)34 b(Switc)n(hMap)e(is)h(a)g(Mapping)f(whic)n(h)h(represen)n
-(ts)f(a)g(set)h(of)g(alternate)f(Mappings,)i(eac)n(h)e(of)h(whic)n(h)g
-(is)g(used)227 4052 y(to)d(transform)f(p)r(ositions)g(within)i(a)e
-(particular)g(region)f(of)i(the)g(input)h(or)e(output)h(co)r(ordinate)f
-(system)g(of)h(the)227 4151 y(Switc)n(hMap.)227 4275
-y(A)k(Switc)n(hMap)e(can)h(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h(of)
-g(Mappings,)h(but)f(they)h(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)g(n)
-n(um-)227 4374 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 4474
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 4573 y(represen)n(ts)33
-b(a)h Ft(")p Fk(route)p Ft(")f Fk(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fk(route)p Ft(")e
-Fk(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)227 4673 y(route)30
-b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g(the)g(input)
-h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n(tire)227
-4773 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r(e)h
-(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 4872 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 4972 y(called)31
-b(the)h Ft(")p Fk(selector)p Ft(")e Fk(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 5072 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fk(for-)227 5171 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fk(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-5271 y Ft(")p Fk(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fk(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-5370 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 5470 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)227 5593 y(When)40 b(the)g(Switc)n(hMap)f
-(is)h(used)f(to)g(transform)g(a)g(p)r(osition)g(in)h(the)f(forw)n(ard)f
-(direction)h(\(from)h(input)g(to)227 5693 y(output\),)g(eac)n(h)35
-b(supplied)h(input)h(p)r(osition)f(is)h(\014rst)e(transformed)h(b)n(y)f
-(the)i(forw)n(ard)e(transformation)f(of)i(the)p eop end
-%%Page: 354 364
-TeXDict begin 354 363 bop 0 52 a FG(354)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(forw)n(ard)c
-(selector)g(Mapping.)38 b(This)28 b(pro)r(duces)f(a)h(single)f(output)i
-(v)-5 b(alue)28 b(for)g(eac)n(h)f(input)i(p)r(osition)f(referred)f(to)
-227 451 y(as)j(the)h(selector)e(v)-5 b(alue.)45 b(The)30
-b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5 b(alue)30
-b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-551 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f(supplied)
-g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f(Mapping)
-227 650 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35 b(the)g(nearest)f(in)
-n(teger)g(to)g(the)h(selector)f(v)-5 b(alue)35 b(is)f(less)h(than)f(1)h
-(or)e(greater)g(than)i(the)227 750 y(n)n(um)n(b)r(er)c(of)f(route)g
-(Mappings,)h(then)h(the)f(Switc)n(hMap)f(output)i(p)r(osition)e(is)h
-(set)f(to)h(a)f(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fk(BAD)227
-849 y(on)k(ev)n(ery)g(axis.)59 b(Otherwise,)37 b(the)f(forw)n(ard)e
-(transformation)f(of)j(the)g(selected)f(route)g(Mapping)g(is)g(used)h
-(to)227 949 y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f(to)
-h(pro)r(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-1083 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fk(output)p Ft(")g Fk(to)227 1182 y Ft(")p Fk(input)p
-Ft(")p Fk(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fk(output)p
-Ft(")g Fk(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 1282 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fk(output)p Ft(")h
-Fk(p)r(osition.)49 b(Again,)32 b(the)227 1382 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-1481 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 1581 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fk(output)p Ft(")f Fk(p)r(osition)227
-1680 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fk(input)p Ft(")h Fk(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-1780 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fk(input)p Ft(")f Fk(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fk(BAD)227 1880
-y(on)j(ev)n(ery)e(axis.)227 2013 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 2113 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 2213 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-2346 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 2446 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 2545 y(simpli\014ed)d(using)g(AST)p
-Ft(_)p Fk(SIMPLIFY.)0 2713 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_SWITCHMAP\()38 b(FSMAP,)j(ISMAP,)g(NROUTE,)g
-(ROUTEMAPS,)e(OPTIONS,)h(STATUS)i(\))0 2881 y Fc(Argumen)m(ts:)259
-3035 y(FSMAP)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 3135
-y Fk(P)n(oin)n(ter)d(to)h(the)g(forw)n(ard)f(selector)g(Mapping.)41
-b(This)29 b(m)n(ust)h(ha)n(v)n(e)d(a)i(de\014ned)h(forw)n(ard)d
-(transformation,)427 3235 y(but)i(need)g(not)f(ha)n(v)n(e)f(a)h
-(de\014ned)h(in)n(v)n(erse)e(transformation.)37 b(It)29
-b(m)n(ust)g(ha)n(v)n(e)e(one)h(output,)h(and)f(the)h(n)n(um-)427
-3334 y(b)r(er)39 b(of)g(inputs)g(m)n(ust)g(matc)n(h)f(the)h(n)n(um)n(b)
-r(er)g(of)f(inputs)i(of)e(eac)n(h)g(of)h(the)g(supplied)g(route)f
-(Mappings.)427 3434 y(AST)p Ft(__)p Fk(NULL)27 b(ma)n(y)f(b)r(e)i
-(supplied,)f(in)g(whic)n(h)g(case)f(the)h(Switc)n(hMap)g(will)g(ha)n(v)
-n(e)f(an)h(unde\014ned)g(forw)n(ard)427 3534 y(Mapping.)259
-3675 y Fc(ISMAP)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3775
-y Fk(P)n(oin)n(ter)g(to)h(the)h(in)n(v)n(erse)e(selector)g(Mapping.)54
-b(This)34 b(m)n(ust)f(ha)n(v)n(e)f(a)h(de\014ned)h(in)n(v)n(erse)e
-(transformation,)427 3875 y(but)e(need)g(not)g(ha)n(v)n(e)e(a)h
-(de\014ned)h(forw)n(ard)e(transformation.)41 b(It)30
-b(m)n(ust)g(ha)n(v)n(e)e(one)h(input,)i(and)f(the)g(n)n(um-)427
-3974 y(b)r(er)i(of)g(outputs)g(m)n(ust)g(matc)n(h)g(the)g(n)n(um)n(b)r
-(er)g(of)g(outputs)g(of)g(eac)n(h)f(of)h(the)h(supplied)f(route)f
-(Mappings.)427 4074 y(AST)p Ft(__)p Fk(NULL)e(ma)n(y)g(b)r(e)g
-(supplied,)h(in)g(whic)n(h)f(case)f(the)i(Switc)n(hMap)f(will)g(ha)n(v)
-n(e)f(an)h(unde\014ned)h(in)n(v)n(erse)427 4174 y(Mapping.)259
-4316 y Fc(NR)m(OUTE)i(=)g(INTEGER)f(\(Giv)m(en\))427
-4415 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(supplied)g(route)f(Mappings.)259
-4557 y Fc(R)m(OUTEMAPS\()32 b(NR)m(OUTE)g(\))g(=)g(INTEGER)g(\(Giv)m
-(en\))427 4657 y Fk(An)37 b(arra)n(y)d(of)i(p)r(oin)n(ters)f(to)h(the)h
-(route)e(Mappings.)62 b(All)37 b(the)f(supplied)h(route)e(Mappings)h(m)
-n(ust)g(ha)n(v)n(e)427 4756 y(common)23 b(v)-5 b(alues)23
-b(for)g(the)h(Nin)g(and)f(Nout)h(attributes,)g(and)f(these)h(v)-5
-b(alues)23 b(de\014ne)h(the)f(n)n(um)n(b)r(er)h(of)f(inputs)427
-4856 y(and)28 b(outputs)g(of)f(the)h(Switc)n(hMap.)259
-4998 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5098 y Fk(A)g(c)n(haracter)e(string)
-h(con)n(taining)f(an)h(optional)g(comma-separated)e(list)j(of)g
-(attribute)f(assignmen)n(ts)g(to)427 5197 y(b)r(e)38
-b(used)g(for)f(initialising)g(the)h(new)g(Switc)n(hMap.)66
-b(The)38 b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)g(that)h(for)f
-(the)427 5297 y(AST)p Ft(_)p Fk(SET)27 b(routine.)259
-5439 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5538 y Fk(The)c(global)e(status.)0 5718
-y Fc(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 355 365
-TeXDict begin 355 364 bop 3643 52 a FG(355)259 351 y
-Fc(AST)p Ft(_)p Fc(SWITCHMAP)32 b(=)g(INTEGER)427 451
-y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Switc)n(hMap.)0
-661 y Fc(Notes:)340 992 y Fj(\017)45 b Fk(Note)38 b(that)g(the)g(comp)r
-(onen)n(t)f(Mappings)g(supplied)h(are)f(not)g(copied)h(b)n(y)f(AST)p
-Ft(_)p Fk(SWITCHMAP)h(\(the)427 1092 y(new)26 b(Switc)n(hMap)f(simply)g
-(retains)g(a)g(reference)f(to)h(them\).)37 b(They)25
-b(ma)n(y)g(con)n(tin)n(ue)f(to)i(b)r(e)f(used)g(for)g(other)427
-1192 y(purp)r(oses,)37 b(but)f(should)g(not)f(b)r(e)i(deleted.)61
-b(If)36 b(a)f(Switc)n(hMap)h(con)n(taining)e(a)i(cop)n(y)e(of)i(its)g
-(comp)r(onen)n(t)427 1291 y(Mappings)27 b(is)h(required,)e(then)j(a)e
-(cop)n(y)f(of)i(the)g(Switc)n(hMap)g(should)f(b)r(e)h(made)f(using)h
-(AST)p Ft(_)p Fk(COPY.)340 1448 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 1548
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1796 3780 12 v 0 1926
-a FA(AST)p Fe(_)p FA(TEST)904 1927 y Fd(T)-10 b(est)38
-b(if)g(an)h(Ob)7 b(ject)38 b(attribute)e(v)-7 b(alue)39
-b(is)f(set)3098 1926 y FA(AST)p Fe(_)p FA(TEST)0 2165
-y Fc(Description:)44 b Fk(This)31 b(function)g(returns)f(a)h(logical)e
-(result)i(to)f(indicate)h(whether)f(a)h(v)-5 b(alue)30
-b(has)h(b)r(een)g(explicitly)g(set)227 2264 y(for)c(one)h(of)f(an)g(Ob)
-5 b(ject's)28 b(attributes.)0 2462 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_TEST\()d(THIS,)h(ATTRIB,)g(STATUS)g(\))0
-2660 y Fc(Argumen)m(ts:)259 2845 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 2945 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)259 3102 y Fc(A)-8 b(TTRIB)33 b(=)f(CHARA)m(CTER)f
-Fj(\003)h Fc(\()g Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3202 y Fk(A)c(c)n(haracter)e(string)h(con)n(taining)f(the)i(name)g(of)f
-(the)h(attribute)g(to)f(b)r(e)h(tested.)259 3359 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3458 y Fk(The)c(global)e(status.)0 3669 y Fc(Class)31
-b(Applicabilit)m(y:)259 3854 y(Ob)5 b(ject)427 3953 y
-Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5 b(jects.)0
-4164 y Fc(Returned)32 b(V)-8 b(alue:)259 4349 y(AST)p
-Ft(_)p Fc(TEST)33 b(=)f(LOGICAL)427 4448 y Fk(.TR)n(UE.)20
-b(if)g(a)f(v)-5 b(alue)20 b(has)f(previously)f(b)r(een)i(explicitly)g
-(set)g(for)f(the)h(attribute)g(\(and)g(hasn't)f(b)r(een)h(cleared\),)
-427 4548 y(otherwise)27 b(.F)-9 b(ALSE..)0 4758 y Fc(Notes:)340
-5089 y Fj(\017)45 b Fk(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 5246 y Fj(\017)45 b Fk(A)28 b(v)-5 b(alue)28
-b(of)f(.F)-9 b(ALSE.)28 b(will)g(b)r(e)g(returned)f(if)h(this)g
-(function)g(is)f(in)n(v)n(ok)n(ed)g(with)h(ST)-7 b(A)g(TUS)28
-b(set)g(to)f(an)h(error)427 5346 y(v)-5 b(alue,)28 b(or)f(if)h(it)g
-(should)f(fail)h(for)f(an)n(y)g(reason.)340 5503 y Fj(\017)45
-b Fk(A)26 b(v)-5 b(alue)25 b(of)h(.F)-9 b(ALSE.)25 b(will)h(also)e(b)r
-(e)i(returned)f(if)g(this)h(function)g(is)f(used)h(to)f(test)h(a)f
-(read-only)e(attribute,)427 5603 y(although)k(no)h(error)d(will)j
-(result.)p eop end
-%%Page: 356 366
-TeXDict begin 356 365 bop 0 52 a FG(356)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(TESTFITS)1136 483 y Fd(See)37
-b(if)g(a)f(named)g(k)m(eyw)m(ord)f(has)i(a)1183 598 y(de\014ned)i(v)-7
-b(alue)39 b(in)f(a)h(FitsChan)2795 482 y FA(AST)p Fe(_)p
-FA(TESTFITS)0 770 y Fc(Description:)44 b Fk(This)31 b(function)h(serc)n
-(hes)e(for)g(a)h(named)g(k)n(eyw)n(ord)e(in)i(a)g(FitsChan.)47
-b(If)31 b(found,)i(and)e(if)g(the)g(k)n(eyw)n(ord)227
-869 y(has)h(a)h(v)-5 b(alue)32 b(asso)r(ciated)f(with)j(it,)g(a)e(.TR)n
-(UE.)g(v)-5 b(alue)33 b(is)g(returned.)51 b(If)33 b(the)g(k)n(eyw)n
-(ord)e(is)h(not)h(found,)h(or)e(if)h(it)227 969 y(do)r(es)28
-b(not)f(ha)n(v)n(e)g(an)g(asso)r(ciated)f(v)-5 b(alue,)28
-b(a)f(.F)-9 b(ALSE.)27 b(v)-5 b(alue)28 b(is)f(returned.)0
-1125 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_TESTFITS\()
-38 b(THIS,)k(NAME,)f(THERE,)g(STATUS)g(\))0 1281 y Fc(Argumen)m(ts:)259
-1424 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1524
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 1660
-y Fc(NAME)j(=)h(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 1760 y Fk(A)25 b(c)n(haracter)d(string)i(con)n
-(taining)g(the)g(FITS)h(k)n(eyw)n(ord)e(name.)35 b(This)25
-b(ma)n(y)e(b)r(e)i(a)f(complete)h(FITS)f(header)427 1859
-y(card,)k(in)g(whic)n(h)g(case)f(the)h(k)n(eyw)n(ord)e(to)i(use)g(is)g
-(extracted)f(from)g(it.)39 b(No)28 b(more)f(than)h(80)f(c)n(haracters)f
-(are)427 1959 y(read)h(from)g(this)h(string.)259 2095
-y Fc(THERE)j(=)h(LOGICAL)h(\(Returned\))427 2195 y Fk(A)h(v)-5
-b(alue)33 b(of)h(.TR)n(UE.)f(will)h(b)r(e)g(returned)f(if)h(the)g(k)n
-(eyw)n(ord)d(w)n(as)i(found)h(in)f(the)h(header,)g(and)g(.F)-9
-b(ALSE.)427 2294 y(otherwise.)35 b(This)24 b(parameter)e(allo)n(ws)h(a)
-h(distinction)g(to)g(b)r(e)g(made)g(b)r(et)n(w)n(een)g(the)g(case)f
-(where)h(a)f(k)n(eyw)n(ord)427 2394 y(is)28 b(not)f(presen)n(t,)g(and)h
-(the)g(case)f(where)g(a)g(k)n(eyw)n(ord)e(is)j(presen)n(t)f(but)h(has)f
-(no)h(asso)r(ciated)e(v)-5 b(alue.)259 2530 y Fc(ST)d(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2630
-y Fk(The)c(global)e(status.)0 2798 y Fc(Returned)32 b(V)-8
-b(alue:)259 2942 y(AST)p Ft(_)p Fc(TESTFITS)33 b(=)g(LOGICAL)427
-3041 y Fk(A)28 b(v)-5 b(alue)27 b(of)g(zero)f(.F)-9 b(ALSE.)28
-b(is)f(returned)g(if)g(the)h(k)n(eyw)n(ord)d(w)n(as)i(not)g(found)g(in)
-h(the)f(FitsChan)h(or)e(has)h(no)427 3141 y(asso)r(ciated)g(v)-5
-b(alue.)36 b(Otherwise,)27 b(a)g(v)-5 b(alue)28 b(of)f(.TR)n(UE.)h(is)f
-(returned.)0 3309 y Fc(Notes:)340 3599 y Fj(\017)45 b
-Fk(The)28 b(curren)n(t)f(card)f(is)i(left)g(unc)n(hanged)f(b)n(y)g
-(this)h(function.)340 3735 y Fj(\017)45 b Fk(The)27 b(card)e(follo)n
-(wing)h(the)h(curren)n(t)e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37
-b(If)27 b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-3834 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 3934 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 4034 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 4170 y Fj(\017)45
-b Fk(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)
-340 4306 y Fj(\017)45 b Fk(.F)-9 b(ALSE.)26 b(is)g(returned)g(as)f(the)
-i(function)f(v)-5 b(alue)26 b(if)h(an)f(error)e(has)h(already)g(o)r
-(ccurred,)g(or)g(if)i(this)f(function)427 4406 y(should)i(fail)f(for)g
-(an)n(y)g(reason.)p 0 4612 V 0 4742 a FA(AST)p Fe(_)p
-FA(TEXT)1150 4743 y Fd(Dra)m(w)37 b(a)i(text)f(string)f(for)h(a)h(Plot)
-3071 4742 y FA(AST)p Fe(_)p FA(TEXT)0 4939 y Fc(Description:)44
-b Fk(This)38 b(function)g(dra)n(ws)e(a)i(string)f(of)g(text)h(at)g(a)f
-(p)r(osition)g(sp)r(eci\014ed)h(in)g(the)g(ph)n(ysical)f(co)r(ordinate)
-227 5038 y(system)e(of)h(a)e(Plot.)60 b(The)35 b(ph)n(ysical)f(p)r
-(osition)i(is)f(transformed)f(in)n(to)h(graphical)f(co)r(ordinates)f
-(to)j(determine)227 5138 y(where)27 b(the)h(text)g(should)g(app)r(ear)e
-(within)j(the)f(plotting)f(area.)0 5294 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_TEXT\()e(THIS,)h(TEXT,)h(POS,)g(UP,)g(JUST,)f
-(STATUS)g(\))0 5450 y Fc(Argumen)m(ts:)259 5593 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 5693 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)p eop end
-%%Page: 357 367
-TeXDict begin 357 366 bop 3643 52 a FG(357)259 351 y
-Fc(TEXT)33 b(=)f(CHARA)m(CTER)f Fj(\003)h Fc(\()g Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)c(c)n(haracter)e(string)h(con)n
-(taining)f(the)i(text)g(to)g(b)r(e)g(dra)n(wn.)36 b(T)-7
-b(railing)26 b(white)i(space)f(is)g(ignored.)259 580
-y Fc(POS\()32 b Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 679 y Fk(An)g(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d
-(co)r(ordinates)h(of)g(the)427 779 y(p)r(oin)n(t)e(where)f(the)h
-(reference)f(p)r(osition)g(of)h(the)g(text)g(string)f(is)g(to)h(b)r(e)g
-(placed.)259 908 y Fc(UP\()33 b Fj(\003)e Fc(\))h(=)g(REAL)g(\(Giv)m
-(en\))427 1007 y Fk(An)e(arra)n(y)d(holding)i(the)g(comp)r(onen)n(ts)g
-(of)g(a)g(v)n(ector)f(in)h(the)h Ft(")p Fk(up)p Ft(")e
-Fk(direction)h(of)g(the)h(text)f(\(in)h(graphical)427
-1107 y(co)r(ordinates\).)35 b(F)-7 b(or)24 b(example,)g(to)h(get)f
-(horizon)n(tal)f(text,)i(the)g(v)n(ector)e([0.0,1.0])g(should)h(b)r(e)h
-(supplied.)36 b(F)-7 b(or)427 1207 y(a)26 b(basic)f(Plot,)g(2)h(v)-5
-b(alues)25 b(should)h(b)r(e)g(supplied.)36 b(F)-7 b(or)25
-b(a)h(Plot3D,)f(3)g(v)-5 b(alues)26 b(should)f(b)r(e)h(supplied,)h(and)
-e(the)427 1306 y(actual)g(up)g(v)n(ector)f(used)g(is)h(the)h(pro)5
-b(jection)24 b(of)g(the)i(supplied)f(up)g(v)n(ector)f(on)n(to)g(the)h
-(text)h(plane)e(sp)r(eci\014ed)427 1406 y(b)n(y)k(the)g(curren)n(t)e(v)
--5 b(alue)28 b(of)f(the)h(Plot3D's)f(Norm)g(attribute.)259
-1535 y Fc(JUST)33 b(=)f(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 1634 y Fk(A)22 b(c)n(haracter)d
-(string)i(iden)n(tifying)g(the)h(reference)e(p)r(oin)n(t)h(for)g(the)h
-(text)f(b)r(eing)h(dra)n(wn.)33 b(The)22 b(\014rst)f(c)n(haracter)427
-1734 y(in)h(this)f(string)g(iden)n(ti\014es)g(the)h(reference)f(p)r
-(osition)g(in)g(the)h Ft(")p Fk(up)p Ft(")f Fk(direction)g(and)g(ma)n
-(y)f(b)r(e)i Ft(")p Fk(B)p Ft(")e Fk(\(baseline\),)427
-1834 y Ft(")p Fk(C)p Ft(")32 b Fk(\(cen)n(tre\),)i Ft(")p
-Fk(T)p Ft(")e Fk(\(top\))i(or)e Ft(")p Fk(M)p Ft(")g
-Fk(\(b)r(ottom\).)53 b(The)33 b(second)f(c)n(haracter)f(iden)n
-(ti\014es)i(the)g(side-to-side)427 1933 y(reference)e(p)r(osition)h
-(and)g(ma)n(y)f(b)r(e)h Ft(")p Fk(L)p Ft(")f Fk(\(left\),)j
-Ft(")p Fk(C)p Ft(")d Fk(\(cen)n(tre\))h(or)f Ft(")p Fk(R)p
-Ft(")g Fk(\(righ)n(t)h(\).)50 b(The)32 b(string)f(is)h(case-)427
-2033 y(insensitiv)n(e,)c(and)f(only)g(the)h(\014rst)f(t)n(w)n(o)g(c)n
-(haracters)f(are)g(signi\014can)n(t.)427 2147 y(F)-7
-b(or)35 b(example,)i(a)d(v)-5 b(alue)35 b(of)g Ft(")p
-Fk(BL)p Ft(")g Fk(means)f(that)i(the)f(left)h(end)g(of)f(the)g
-(baseline)g(of)g(the)h(original)d(\(un-)427 2247 y(rotated\))27
-b(text)h(is)g(to)f(b)r(e)h(dra)n(wn)f(at)g(the)h(p)r(osition)g(giv)n
-(en)f(b)n(y)g(POS.)259 2376 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 2475 y Fk(The)c(global)e(status.)0
-2633 y Fc(Notes:)340 2912 y Fj(\017)45 b Fk(The)34 b(Plot3D)e(class)g
-(curren)n(tly)h(do)r(es)g(not)g(in)n(terpret)g(graphical)e(escap)r(e)i
-(sequences)f(con)n(tained)h(within)427 3011 y(text)28
-b(displa)n(y)n(ed)f(using)g(this)h(metho)r(d.)340 3140
-y Fj(\017)45 b Fk(T)-7 b(ext)27 b(is)f(not)g(dra)n(wn)f(at)h(p)r
-(ositions)g(whic)n(h)g(ha)n(v)n(e)f(an)n(y)g(co)r(ordinate)h(equal)f
-(to)h(the)h(v)-5 b(alue)26 b(AST)p Ft(__)p Fk(BAD)g(\(or)427
-3240 y(where)k(the)g(transformation)f(in)n(to)h(graphical)f(co)r
-(ordinates)f(yields)i(co)r(ordinates)f(con)n(taining)g(the)i(v)-5
-b(alue)427 3339 y(AST)p Ft(__)p Fk(BAD\).)340 3468 y
-Fj(\017)45 b Fk(If)28 b(the)g(plotting)g(p)r(osition)f(is)h(clipp)r(ed)
-g(\(see)g(AST)p Ft(_)p Fk(CLIP\),)f(then)h(no)f(text)h(is)g(dra)n(wn.)
-340 3597 y Fj(\017)45 b Fk(An)40 b(error)d(results)i(if)g(the)h(base)e
-(F)-7 b(rame)39 b(of)g(the)g(Plot)g(is)g(not)g(2-dimensional)f(or)g
-(\(for)h(a)g(Plot3D\))f(3-)427 3697 y(dimensional.)340
-3825 y Fj(\017)45 b Fk(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3925 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 4116 3780 12 v 0 4247
-a FA(AST)p Fe(_)p FA(TIMEADD)1311 4248 y Fd(Add)39 b(a)f(time)g(co)s
-(ordinate)1236 4348 y(con)m(v)m(ersion)f(to)h(a)g(TimeMap)2781
-4247 y FA(AST)p Fe(_)p FA(TIMEADD)0 4528 y Fc(Description:)44
-b Fk(This)26 b(routine)g(adds)g(one)f(of)h(the)h(standard)e(time)i(co)r
-(ordinate)d(system)i(con)n(v)n(ersions)e(listed)i(b)r(elo)n(w)g(to)227
-4628 y(an)i(existing)f(TimeMap.)227 4751 y(When)h(a)f(TimeMap)g(is)g
-(\014rst)g(created)f(\(using)h(AST)p Ft(_)p Fk(TIMEMAP\),)g(it)g
-(simply)g(p)r(erforms)g(a)g(unit)g(\(n)n(ull\))h(Map-)227
-4850 y(ping.)35 b(By)23 b(using)f(AST)p Ft(_)p Fk(TIMEADD)h(\(rep)r
-(eatedly)f(if)h(necessary\),)g(one)f(or)f(more)h(co)r(ordinate)g(con)n
-(v)n(ersion)e(steps)227 4950 y(ma)n(y)27 b(then)i(b)r(e)f(added,)g
-(whic)n(h)g(the)g(TimeMap)g(will)g(p)r(erform)g(in)g(sequence.)37
-b(This)28 b(allo)n(ws)f(m)n(ulti-step)h(con)n(v)n(er-)227
-5049 y(sions)37 b(b)r(et)n(w)n(een)g(a)g(v)-5 b(ariet)n(y)37
-b(of)g(time)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h(assem)n(bled)e
-(out)i(of)f(the)h(building)f(blo)r(c)n(ks)227 5149 y(pro)n(vided)27
-b(b)n(y)g(this)h(class.)227 5272 y(Normally)-7 b(,)27
-b(if)g(a)g(TimeMap's)g(In)n(v)n(ert)f(attribute)i(is)f(zero)f(\(the)i
-(default\),)g(then)f(its)h(forw)n(ard)d(transformation)h(is)227
-5371 y(p)r(erformed)18 b(b)n(y)g(carrying)f(out)h(eac)n(h)g(of)g(the)h
-(individual)f(co)r(ordinate)f(con)n(v)n(ersions)f(sp)r(eci\014ed)j(b)n
-(y)f(AST)p Ft(_)p Fk(TIMEADD)227 5471 y(in)28 b(the)g(order)e(giv)n(en)
-h(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n
-(ersion)e(applied)j(last\).)227 5593 y(This)21 b(order)f(is)h(rev)n
-(ersed)e(if)i(the)h(TimeMap's)e(In)n(v)n(ert)g(attribute)h(is)g
-(non-zero)f(\(or)g(if)h(the)h(in)n(v)n(erse)d(transformation)227
-5693 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g(means\))h(and)g
-(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(also)f
-(replaced)g(b)n(y)g(its)p eop end
-%%Page: 358 368
-TeXDict begin 358 367 bop 0 52 a FG(358)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(o)n(wn)20
-b(in)n(v)n(erse.)32 b(This)20 b(pro)r(cess)f(in)n(v)n(erts)g(the)h(o)n
-(v)n(erall)e(e\013ect)i(of)g(the)h(TimeMap.)34 b(In)20
-b(this)g(case,)h(the)f(\014rst)g(con)n(v)n(ersion)227
-451 y(to)28 b(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n(erse)
-f(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0 607
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_TIMEADD\()c(THIS,)k
-(CVT,)g(ARGS,)f(STATUS)g(\))0 764 y Fc(Argumen)m(ts:)259
-908 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 1007 y
-Fk(P)n(oin)n(ter)26 b(to)i(the)g(TimeMap.)259 1144 y
-Fc(CVT)k(=)h(CHARA)m(CTER)e Fj(\003)g Fc(\()h Fj(\003)g
-Fc(\))g(\(Giv)m(en\))427 1243 y Fk(A)19 b(c)n(haracter)d(string)i(whic)
-n(h)g(iden)n(ti\014es)h(the)g(time)f(co)r(ordinate)g(con)n(v)n(ersion)e
-(to)i(b)r(e)h(added)f(to)g(the)h(TimeMap.)427 1343 y(See)28
-b(the)g Ft(")p Fk(Av)-5 b(ailable)27 b(Con)n(v)n(ersions)p
-Ft(")d Fk(section)k(for)f(details)g(of)h(those)f(a)n(v)-5
-b(ailable.)259 1479 y Fc(AR)m(GS\()32 b Fj(\003)g Fc(\))g(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 1579 y Fk(An)38 b(arra)n(y)d(con)n
-(taining)h(argumen)n(t)g(v)-5 b(alues)36 b(for)h(the)g(time)h(co)r
-(ordinate)e(con)n(v)n(ersion.)63 b(The)37 b(n)n(um)n(b)r(er)g(of)427
-1679 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r
-(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 1778 y(sp)r(eci\014ed)i(\(see)g(the)f
-Ft(")p Fk(Av)-5 b(ailable)24 b(Con)n(v)n(ersions)p Ft(")e
-Fk(section\).)36 b(This)24 b(arra)n(y)e(is)j(ignored)e(if)i(no)f
-(argumen)n(ts)g(are)427 1878 y(needed.)259 2014 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2114 y Fk(The)c(global)e(status.)0 2283 y Fc(Notes:)340
-2573 y Fj(\017)45 b Fk(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h
-(con)n(v)n(ersion,)g(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f
-(determine)g(the)427 2672 y(most)g(economical)f(con)n(v)n(ersion)e
-(path.)62 b(A)36 b(solution)g(to)f(this)h(is)g(to)g(include)g(all)g
-(the)g(steps)g(whic)n(h)g(are)427 2772 y(\(logically\))d(necessary)-7
-b(,)34 b(but)g(then)g(to)g(use)g(AST)p Ft(_)p Fk(SIMPLIFY)f(to)h
-(simplify)g(the)g(resulting)g(TimeMap.)427 2871 y(The)28
-b(simpli\014cation)f(pro)r(cess)g(will)h(eliminate)f(an)n(y)g(steps)h
-(whic)n(h)f(turn)h(out)g(not)f(to)h(b)r(e)g(needed.)340
-3008 y Fj(\017)45 b Fk(This)30 b(routine)g(do)r(es)f(not)h(c)n(hec)n(k)
-f(to)h(ensure)f(that)h(the)h(sequence)e(of)h(co)r(ordinate)f(con)n(v)n
-(ersions)e(added)j(to)427 3108 y(a)d(TimeMap)h(is)f(ph)n(ysically)g
-(meaningful.)-2 3277 y Fc(Av)-5 b(ailable)32 b(Con)m(v)m(ersions)n(:)
-227 3423 y Fk(The)19 b(follo)n(wing)f(strings)f(\(whic)n(h)i(are)f
-(case-insensitiv)n(e\))f(ma)n(y)h(b)r(e)h(supplied)g(via)f(the)h(CVT)g
-(argumen)n(t)f(to)h(indicate)227 3522 y(whic)n(h)31 b(time)h(co)r
-(ordinate)e(con)n(v)n(ersion)f(is)i(to)g(b)r(e)g(added)g(to)g(the)g
-(TimeMap.)48 b(Where)31 b(argumen)n(ts)e(are)h(needed)227
-3622 y(b)n(y)e(the)h(con)n(v)n(ersion,)d(they)j(are)e(listed)h(in)h
-(paren)n(theses.)38 b(V)-7 b(alues)28 b(for)f(these)i(argumen)n(ts)e
-(should)h(b)r(e)g(giv)n(en,)g(via)227 3722 y(the)33 b(AR)n(GS)f(arra)n
-(y)-7 b(,)31 b(in)h(the)h(order)e(indicated.)50 b(Units)33
-b(and)f(argumen)n(t)f(names)g(are)g(describ)r(ed)h(at)g(the)g(end)h(of)
-227 3821 y(the)28 b(list)g(of)g(con)n(v)n(ersions,)d(and)i
-Ft(")p Fk(MJD)p Ft(")g Fk(means)g(Mo)r(di\014ed)h(Julian)f(Date.)340
-4093 y Fj(\017)45 b Ft(")p Fk(MJDTOMJD)p Ft(")27 b Fk
-(\(MJDOFF1,MJDOFF2\):)37 b(Con)n(v)n(ert)26 b(MJD)i(from)f(one)g
-(o\013set)h(to)f(another.)340 4229 y Fj(\017)45 b Ft(")p
-Fk(MJDTOJD)p Ft(")27 b Fk(\(MJDOFF,JDOFF\):)h(Con)n(v)n(ert)f(MJD)h(to)
-f(Julian)g(Date.)340 4366 y Fj(\017)45 b Ft(")p Fk(JDTOMJD)p
-Ft(")27 b Fk(\(JDOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)g(Date)h(to)f
-(MJD.)340 4502 y Fj(\017)45 b Ft(")p Fk(MJDTOBEP)p Ft(")26
-b Fk(\(MJDOFF,BEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Besselian)g(ep)r
-(o)r(c)n(h.)340 4638 y Fj(\017)45 b Ft(")p Fk(BEPTOMJD)p
-Ft(")26 b Fk(\(BEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Besselian)h(ep)r(o)r
-(c)n(h)g(to)h(MJD.)340 4775 y Fj(\017)45 b Ft(")p Fk(MJDTOJEP)p
-Ft(")26 b Fk(\(MJDOFF,JEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Julian)g
-(ep)r(o)r(c)n(h.)340 4911 y Fj(\017)45 b Ft(")p Fk(JEPTOMJD)p
-Ft(")26 b Fk(\(JEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)h(ep)r(o)r(c)n
-(h)h(to)f(MJD.)340 5048 y Fj(\017)45 b Ft(")p Fk(T)-7
-b(AITOUTC)p Ft(")27 b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(T)-7
-b(AI)28 b(MJD)g(to)f(a)g(UTC)h(MJD.)340 5184 y Fj(\017)45
-b Ft(")p Fk(UTCTOT)-7 b(AI)p Ft(")27 b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d
-(a)h(UTC)h(MJD)g(to)f(a)g(T)-7 b(AI)28 b(MJD.)340 5321
-y Fj(\017)45 b Ft(")p Fk(T)-7 b(AITOTT)p Ft(")27 b Fk(\(MJDOFF\):)h
-(Con)n(v)n(ert)e(a)i(T)-7 b(AI)28 b(MJD)g(to)f(a)g(TT)h(MJD.)340
-5457 y Fj(\017)45 b Ft(")p Fk(TTTOT)-7 b(AI)p Ft(")27
-b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)i(TT)f(MJD)h(to)g(a)f(T)-7
-b(AI)28 b(MJD.)340 5593 y Fj(\017)45 b Ft(")p Fk(TTTOTDB)p
-Ft(")33 b Fk(\(MJDOFF,)i(OBSLON,)e(OBSLA)-7 b(T,)34 b(OBSAL)-7
-b(T\):)34 b(Con)n(v)n(ert)f(a)g(TT)i(MJD)f(to)g(a)f(TDB)427
-5693 y(MJD.)p eop end
-%%Page: 359 369
-TeXDict begin 359 368 bop 3643 52 a FG(359)340 351 y
-Fj(\017)45 b Ft(")p Fk(TDBTOTT)p Ft(")33 b Fk(\(MJDOFF,)i(OBSLON,)e
-(OBSLA)-7 b(T,)34 b(OBSAL)-7 b(T\):)34 b(Con)n(v)n(ert)f(a)g(TDB)i(MJD)
-f(to)g(a)g(TT)427 451 y(MJD.)340 592 y Fj(\017)45 b Ft(")p
-Fk(TTTOTCG)p Ft(")27 b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TT)h(MJD)g
-(to)f(a)h(TCG)f(MJD.)340 734 y Fj(\017)45 b Ft(")p Fk(TCGTOTT)p
-Ft(")27 b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TCG)h(MJD)g(to)g(a)f(TT)
-g(MJD.)340 875 y Fj(\017)45 b Ft(")p Fk(TDBTOTCB)p Ft(")27
-b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TDB)h(MJD)g(to)g(a)f(TCB)g(MJD.)
-340 1016 y Fj(\017)45 b Ft(")p Fk(TCBTOTDB)p Ft(")27
-b Fk(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h(TCB)h(MJD)g(to)f(a)g(TDB)h(MJD.)
-340 1158 y Fj(\017)45 b Ft(")p Fk(UTTOGMST)p Ft(")27
-b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(UT)h(MJD)g(to)f(a)g(GMST)h(MJD.)
-340 1299 y Fj(\017)45 b Ft(")p Fk(GMSTTOUT)p Ft(")27
-b Fk(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(GMST)h(MJD)g(to)f(a)h(UT)f(MJD.)
-340 1441 y Fj(\017)45 b Ft(")p Fk(GMSTTOLMST)p Ft(")37
-b Fk(\(MJDOFF,)h(OBSLON,)f(OBSLA)-7 b(T\):)38 b(Con)n(v)n(ert)e(a)h
-(GMST)h(MJD)g(to)f(a)g(LMST)427 1540 y(MJD.)340 1682
-y Fj(\017)45 b Ft(")p Fk(LMSTTOGMST)p Ft(")37 b Fk(\(MJDOFF,)h(OBSLON,)
-f(OBSLA)-7 b(T\):)38 b(Con)n(v)n(ert)e(a)h(LMST)h(MJD)g(to)f(a)g(GMST)
-427 1781 y(MJD.)340 1923 y Fj(\017)45 b Ft(")p Fk(LASTTOLMST)p
-Ft(")40 b Fk(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(GMST)h(MJD)f(to)h(a)e(LMST)427
-2022 y(MJD.)340 2164 y Fj(\017)45 b Ft(")p Fk(LMSTTOLAST)p
-Ft(")40 b Fk(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(LMST)h(MJD)f(to)g(a)g(GMST)427
-2263 y(MJD.)340 2405 y Fj(\017)45 b Ft(")p Fk(UTTOUTC)p
-Ft(")27 b Fk(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UT1)h(MJD)f(to)h(a)f
-(UTC)h(MJD.)340 2546 y Fj(\017)45 b Ft(")p Fk(UTCTOUT)p
-Ft(")27 b Fk(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UTC)h(MJD)g(to)f(a)g
-(UT1)h(MJD.)340 2687 y Fj(\017)45 b Ft(")p Fk(L)-7 b(TTOUTC)p
-Ft(")27 b Fk(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e(a)h(Lo)r(cal)g(Time)
-h(MJD)g(to)f(a)g(UTC)h(MJD.)340 2829 y Fj(\017)45 b Ft(")p
-Fk(UTCTOL)-7 b(T)p Ft(")27 b Fk(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e
-(a)h(UTC)h(MJD)g(to)g(a)f(Lo)r(cal)g(Time)g(MJD.)227
-3008 y(The)h(units)g(for)f(the)h(v)-5 b(alues)27 b(pro)r(cessed)g(b)n
-(y)g(the)h(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)i(as)g(follo)n(ws:)
-340 3294 y Fj(\017)45 b Fk(Julian)27 b(ep)r(o)r(c)n(hs)h(and)f
-(o\013sets:)37 b(Julian)27 b(y)n(ears)340 3436 y Fj(\017)45
-b Fk(Besselian)27 b(ep)r(o)r(c)n(hs)g(and)h(o\013sets:)36
-b(T)-7 b(ropical)27 b(y)n(ears)340 3577 y Fj(\017)45
-b Fk(Mo)r(di\014ed)28 b(Julian)f(Dates)h(and)f(o\013sets:)37
-b(da)n(ys)340 3718 y Fj(\017)45 b Fk(Julian)27 b(Dates)h(and)f
-(o\013sets:)37 b(da)n(ys)227 3897 y(The)25 b(argumen)n(ts)f(used)g(in)i
-(the)f(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)i(the)h(zero-p)r(oin)n
-(ts)f(used)g(b)n(y)h(the)g(AST)p Ft(_)p Fk(TRANSF)n(ORM)227
-3997 y(routine.)35 b(The)23 b(axis)f(v)-5 b(alues)22
-b(supplied)i(and)e(returned)g(b)n(y)h(AST)p Ft(_)p Fk(TRANSF)n(ORM)g
-(are)f(o\013sets)g(a)n(w)n(a)n(y)f(from)i(these)227 4097
-y(zero-p)r(oin)n(ts:)340 4383 y Fj(\017)45 b Fk(MJDOFF:)28
-b(The)g(zero-p)r(oin)n(t)e(b)r(eing)i(used)f(with)h(MJD)g(v)-5
-b(alues.)340 4525 y Fj(\017)45 b Fk(JDOFF:)28 b(The)g(zero-p)r(oin)n(t)
-e(b)r(eing)i(used)f(with)h(Julian)g(Date)f(v)-5 b(alues.)340
-4666 y Fj(\017)45 b Fk(BEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Besselian)f(ep)r(o)r(c)n(h)g(v)-5 b(alues.)340
-4807 y Fj(\017)45 b Fk(JEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Julian)f(ep)r(o)r(c)n(h)h(v)-5 b(alues.)340
-4949 y Fj(\017)45 b Fk(OBSLON:)27 b(Observ)n(er)f(longitude)h(in)h
-(radians)e(\(+v)n(e)h(w)n(est)n(w)n(ards\).)340 5090
-y Fj(\017)45 b Fk(OBSLA)-7 b(T:)28 b(Observ)n(er)d(geo)r(detic)i
-(latitude)h(\(IA)n(U)h(1975\))d(in)h(radians)g(\(+v)n(e)g(north)n(w)n
-(ards\).)340 5232 y Fj(\017)45 b Fk(OBSAL)-7 b(T:)28
-b(Observ)n(er)d(geo)r(detic)i(altitude)h(\(IA)n(U)h(1975\))d(in)h
-(metres.)340 5373 y Fj(\017)45 b Fk(DUT1:)37 b(The)28
-b(UT1-UTC)f(v)-5 b(alue)28 b(to)f(use.)340 5514 y Fj(\017)45
-b Fk(L)-7 b(TOFF:)30 b(The)h(o\013set)f(b)r(et)n(w)n(een)g(Lo)r(cal)f
-(Time)h(and)g(UTC)g(\(in)h(hours,)f(p)r(ositiv)n(e)g(for)f(time)i
-(zones)e(east)h(of)427 5614 y(Green)n(wic)n(h\).)p eop
-end
-%%Page: 360 370
-TeXDict begin 360 369 bop 0 52 a FG(360)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(TIMEFRAME)163 b Fd(Create)37
-b(a)i(TimeF)-10 b(rame)163 b FA(AST)p Fe(_)p FA(TIMEFRAME)0
-710 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(TimeF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 859 y(A)h(TimeF)-7 b(rame)28 b(is)g(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)f(F)-7 b(rame)28
-b(whic)n(h)g(represen)n(ts)f(v)-5 b(arious)27 b(co)r(ordinate)227
-959 y(systems)g(used)h(to)f(describ)r(e)h(p)r(ositions)f(in)h(time.)227
-1109 y(A)23 b(TimeF)-7 b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g
-(time)h(as)e(either)h(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h
-(a)f(Julian)f(Date)227 1209 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)
-i(or)f(a)h(Julian)g(ep)r(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i
-(System)f(attribute.)34 b(Optionally)-7 b(,)20 b(a)f(zero)227
-1308 y(p)r(oin)n(t)30 b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e
-(attribute)i(TimeOrigin\))e(whic)n(h)h(results)f(in)h(the)h(TimeF)-7
-b(rame)29 b(represen)n(ting)227 1408 y(time)f(o\013sets)g(from)f(the)h
-(sp)r(eci\014ed)g(zero)e(p)r(oin)n(t.)227 1558 y(Ev)n(en)g(though)g(JD)
-g(and)g(MJD)g(are)g(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n
-(ys,)g(the)g(TimeF)-7 b(rame)26 b(class)f(allo)n(ws)g(other)227
-1658 y(units)31 b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))
-g(on)f(the)h(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g
-(min)n(ute,)227 1757 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g
-(=)g(1)g(da)n(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1857 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1956 y(\(tropical\))c(y)n(ears.)
-227 2106 y(The)h(TimeScale)f(attribute)h(allo)n(ws)f(the)h(time)g
-(scale)f(to)g(b)r(e)h(sp)r(eci\014ed)g(\(that)h(is,)e(the)h(ph)n
-(ysical)f(pro)r(ces)g(used)h(to)227 2206 y(de\014ne)34
-b(the)g(rate)f(of)g(\015o)n(w)g(of)h(time\).)55 b(MJD,)34
-b(JD)g(and)f(Julian)g(ep)r(o)r(c)n(h)h(can)f(b)r(e)h(used)f(to)h
-(represen)n(t)e(a)h(time)h(in)227 2306 y(an)n(y)26 b(supp)r(orted)h
-(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25 b(Besselian)h(ep)r(o)r(c)n(h)g
-(ma)n(y)g(only)h(b)r(e)g(used)g(with)g(the)g Ft(")p Fk(TT)p
-Ft(")f Fk(\(T)-7 b(errestrial)227 2405 y(Time\))39 b(time)g(scale.)70
-b(The)38 b(list)h(of)g(supp)r(orted)f(time)h(scales)f(includes)h(univ)n
-(ersal)e(time)i(and)f(siderial)g(time.)227 2505 y(Strictly)-7
-b(,)30 b(these)g(represen)n(t)e(angles)g(rather)g(than)i(time)f
-(scales,)g(but)h(are)e(included)i(in)g(the)f(list)h(since)f(they)h(are)
-227 2605 y(in)e(common)f(use)h(and)f(are)g(often)h(though)n(t)f(of)g
-(as)g(time)h(scales.)227 2755 y(When)h(a)e(time)h(v)-5
-b(alue)28 b(is)f(formatted)h(it)g(can)f(b)r(e)h(formated)g(either)f(as)
-g(a)h(simple)g(\015oating)e(p)r(oin)n(t)i(v)-5 b(alue,)28
-b(or)f(as)g(a)227 2854 y(Gregorian)f(date)h(\(see)h(the)g(F)-7
-b(ormat)27 b(attribute\).)0 3055 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_TIMEFRAME\()38 b(OPTIONS,)i(STATUS)h(\))0
-3255 y Fc(Argumen)m(ts:)259 3442 y(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3542 y Fk(A)g(c)n(haracter)e(string)h(con)n(taining)f(an)h(optional)g
-(comma-separated)e(list)j(of)g(attribute)f(assignmen)n(ts)g(to)427
-3641 y(b)r(e)38 b(used)f(for)f(initialising)h(the)g(new)g(TimeF)-7
-b(rame.)64 b(The)37 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)
-g(for)f(the)427 3741 y(AST)p Ft(_)p Fk(SET)27 b(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)f(a)g(blank)g(v)-5
-b(alue)28 b(ma)n(y)e(b)r(e)i(supplied.)259 3899 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-3999 y Fk(The)c(global)e(status.)0 4212 y Fc(Returned)32
-b(V)-8 b(alue:)259 4399 y(AST)p Ft(_)p Fc(TIMEFRAME)31
-b(=)h(INTEGER)427 4499 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(TimeF)
--7 b(rame.)0 4711 y Fc(Notes:)340 5045 y Fj(\017)45 b
-Fk(When)40 b(con)n(v)n(ersion)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(TimeF)-7
-b(rames)39 b(is)g(requested)g(\(as)g(when)h(supplying)f(TimeF)-7
-b(rames)427 5144 y(AST)p Ft(_)p Fk(CONVER)g(T\),)30 b(accoun)n(t)g
-(will)g(b)r(e)g(tak)n(en)g(of)g(the)g(nature)g(of)g(the)g(time)h(co)r
-(ordinate)e(systems)g(they)427 5244 y(represen)n(t,)35
-b(together)f(with)h(an)n(y)f(qualifying)g(time)h(scale,)h(o\013set,)g
-(unit,)h(etc.)58 b(The)35 b(AlignSystem)g(and)427 5344
-y(AlignTimeScale)28 b(attributes)f(will)h(also)e(b)r(e)i(tak)n(en)f(in)
-n(to)h(accoun)n(t.)340 5502 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 5602 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 361 371
-TeXDict begin 361 370 bop 3643 52 a FG(361)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(TIMEMAP)389 b Fd(Create)37
-b(a)h(TimeMap)391 b FA(AST)p Fe(_)p FA(TIMEMAP)0 663
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(TimeMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-785 y(A)39 b(TimeMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g
-(1-dimensional)f(Mapping)h(whic)n(h)h(can)f(b)r(e)g(used)h(to)f
-(represen)n(t)f(a)227 885 y(sequence)27 b(of)h(con)n(v)n(ersions)d(b)r
-(et)n(w)n(een)i(standard)g(time)h(co)r(ordinate)f(systems.)227
-1007 y(When)19 b(a)f(TimeMap)g(is)h(\014rst)f(created,)h(it)g(simply)g
-(p)r(erforms)e(a)h(unit)h(\(n)n(ull\))g(Mapping.)34 b(Using)18
-b(the)h(AST)p Ft(_)p Fk(TIMEADD)227 1107 y(routine,)35
-b(a)e(series)f(of)h(co)r(ordinate)f(con)n(v)n(ersion)f(steps)i(ma)n(y)g
-(then)h(b)r(e)g(added.)54 b(This)33 b(allo)n(ws)f(m)n(ulti-step)h(con-)
-227 1207 y(v)n(ersions)i(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)35 b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h
-(assem)n(bled)e(out)h(of)g(a)g(set)g(of)g(building)227
-1306 y(blo)r(c)n(ks.)227 1429 y(F)-7 b(or)18 b(details)g(of)g(the)h
-(individual)g(co)r(ordinate)e(con)n(v)n(ersions)f(a)n(v)-5
-b(ailable,)19 b(see)f(the)h(description)e(of)i(the)f(AST)p
-Ft(_)p Fk(TIMEADD)227 1528 y(routine.)0 1674 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(RESULT)41 b(=)i(AST_TIMEMAP\()c(FLAGS,)i(OPTIONS,)f(STATUS)h
-(\))0 1819 y Fc(Argumen)m(ts:)259 1952 y(FLA)m(GS)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 2052 y Fk(This)d(argumen)n(t)e(is)i
-(reserv)n(ed)e(for)h(future)h(use)f(and)h(should)f(curren)n(tly)g(alw)n
-(a)n(ys)e(b)r(e)j(set)g(to)f(zero.)259 2181 y Fc(OPTIONS)32
-b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))
-427 2280 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h
-(optional)f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f
-(to)g(b)r(e)427 2380 y(used)i(for)g(initialising)f(the)i(new)f
-(TimeMap.)35 b(The)23 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h
-(that)g(for)g(the)g(AST)p Ft(_)p Fk(SET)427 2479 y(routine.)37
-b(If)28 b(no)f(initialisation)g(is)h(required,)e(a)i(blank)f(v)-5
-b(alue)27 b(ma)n(y)g(b)r(e)h(supplied.)259 2608 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2708 y Fk(The)c(global)e(status.)0 2866 y Fc(Returned)32
-b(V)-8 b(alue:)259 2998 y(AST)p Ft(_)p Fc(TIMEMAP)32
-b(=)g(INTEGER)427 3098 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(TimeMap.)0 3256 y Fc(Notes:)340 3535 y Fj(\017)45 b
-Fk(The)23 b(nature)g(and)g(units)h(of)f(the)g(co)r(ordinate)f(v)-5
-b(alues)23 b(supplied)h(for)e(the)i(\014rst)f(input)h(\(i.e.)35
-b(the)24 b(time)g(input\))427 3634 y(of)36 b(a)g(TimeMap)g(m)n(ust)h(b)
-r(e)f(appropriate)f(to)h(the)h(\014rst)f(con)n(v)n(ersion)d(step)k
-(applied)f(b)n(y)g(the)h(TimeMap.)427 3734 y(F)-7 b(or)23
-b(instance,)h(if)g(the)g(\014rst)f(con)n(v)n(ersion)e(step)i(is)h
-Ft(")p Fk(MJDTOBEP)p Ft(")d Fk(\(Mo)r(di\014ed)j(Julian)f(Date)g(to)h
-(Besselian)427 3833 y(ep)r(o)r(c)n(h\))e(then)g(the)g(co)r(ordinate)f
-(v)-5 b(alues)21 b(for)g(the)h(\014rst)f(input)i(should)e(b)r(e)h(date)
-g(in)g(units)g(of)f(da)n(ys.)34 b(Similarly)-7 b(,)427
-3933 y(the)28 b(nature)e(and)h(units)g(of)g(the)g(co)r(ordinate)f(v)-5
-b(alues)27 b(returned)f(b)n(y)h(a)f(TimeMap)h(will)g(b)r(e)h
-(determined)f(b)n(y)427 4033 y(the)h(last)g(con)n(v)n(ersion)d(step)j
-(applied)f(b)n(y)g(the)h(TimeMap.)340 4162 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4261
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4453 V 0 4583 a FA(AST)p
-Fe(_)p FA(TRAN1)1255 4584 y Fd(T)-10 b(ransform)36 b(1-dimensional)1598
-4684 y(co)s(ordinates)2980 4583 y FA(AST)p Fe(_)p FA(TRAN1)0
-4842 y Fc(Description:)44 b Fk(This)37 b(routine)f(applies)g(a)f
-(Mapping)h(to)h(transform)e(the)h(co)r(ordinates)f(of)i(a)f(set)g(of)g
-(p)r(oin)n(ts)g(in)h(one)227 4941 y(dimension.)0 5087
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_TRAN1\()d(THIS,)j
-(NPOINT,)e(XIN,)i(FORWARD,)f(XOUT,)g(STATUS)g(\))0 5232
-y Fc(Argumen)m(ts:)259 5365 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-5464 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h
-(applied.)259 5593 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5693 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)p eop end
-%%Page: 362 372
-TeXDict begin 362 371 bop 0 52 a FG(362)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(XIN\()h(NPOINT)g(\))g
-(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 451 y Fk(An)c(arra)n(y)e(of)
-h(co)r(ordinate)g(v)-5 b(alues)27 b(for)g(the)h(input)g(\(un)n
-(transformed\))f(p)r(oin)n(ts.)259 602 y Fc(F)m(OR)-11
-b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427 702 y Fk(A)38
-b(.TR)n(UE.)e(v)-5 b(alue)37 b(indicates)g(that)h(the)f(Mapping's)g
-(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)i(to)g(b)r(e)427
-801 y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27 b(v)-5
-b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g
-(should)i(b)r(e)g(used.)259 953 y Fc(X)m(OUT\()33 b(NPOINT)f(\))g(=)g
-(DOUBLE)g(PRECISION)g(\(Returned\))427 1052 y Fk(An)c(arra)n(y)e(in)n
-(to)h(whic)n(h)g(the)h(co)r(ordinates)f(of)g(the)h(output)g
-(\(transformed\))f(p)r(oin)n(ts)h(will)g(b)r(e)g(written.)259
-1203 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1303 y Fk(The)c(global)e(status.)0 1502
-y Fc(Notes:)340 1821 y Fj(\017)45 b Fk(The)28 b(Mapping)f(supplied)h(m)
-n(ust)g(ha)n(v)n(e)e(the)i(v)-5 b(alue)28 b(1)f(for)g(b)r(oth)h(its)g
-(Nin)g(and)f(Nout)h(attributes.)p 0 2057 3780 12 v 0
-2188 a FA(AST)p Fe(_)p FA(TRAN2)1255 2189 y Fd(T)-10
-b(ransform)36 b(2-dimensional)1598 2288 y(co)s(ordinates)2980
-2188 y FA(AST)p Fe(_)p FA(TRAN2)0 2491 y Fc(Description:)44
-b Fk(This)36 b(routine)g(applies)g(a)f(Mapping)h(to)g(transform)f(the)h
-(co)r(ordinates)f(of)h(a)f(set)h(of)g(p)r(oin)n(ts)g(in)g(t)n(w)n(o)227
-2590 y(dimensions.)0 2776 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_TRAN2\()d(THIS,)j(NPOINT,)e(XIN,)i(YIN,)g(FORWARD,)e
-(XOUT,)i(YOUT,)g(STATUS)f(\))0 2963 y Fc(Argumen)m(ts:)259
-3136 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 3235
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259
-3387 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))427 3486
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)259 3637 y Fc(XIN\()k(NPOINT)g(\))g(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 3737 y Fk(An)c(arra)n(y)e(of)h(X-co)r
-(ordinate)f(v)-5 b(alues)28 b(for)f(the)h(input)g(\(un)n(transformed\))
-f(p)r(oin)n(ts.)259 3888 y Fc(YIN\()32 b(NPOINT)g(\))g(=)g(DOUBLE)g
-(PRECISION)g(\(Giv)m(en\))427 3988 y Fk(An)c(arra)n(y)e(of)h(Y-co)r
-(ordinate)f(v)-5 b(alues)28 b(for)f(the)h(input)g(\(un)n(transformed\))
-f(p)r(oin)n(ts.)259 4139 y Fc(F)m(OR)-11 b(W)g(ARD)32
-b(=)g(LOGICAL)h(\(Giv)m(en\))427 4239 y Fk(A)38 b(.TR)n(UE.)e(v)-5
-b(alue)37 b(indicates)g(that)h(the)f(Mapping's)g(forw)n(ard)e(co)r
-(ordinate)h(transformation)f(is)i(to)g(b)r(e)427 4338
-y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27 b(v)-5 b(alue)28
-b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)
-r(e)g(used.)259 4489 y Fc(X)m(OUT\()33 b(NPOINT)f(\))g(=)g(DOUBLE)g
-(PRECISION)g(\(Returned\))427 4589 y Fk(An)c(arra)n(y)e(in)n(to)h(whic)
-n(h)g(the)h(X-co)r(ordinates)f(of)g(the)h(output)g(\(transformed\))f(p)
-r(oin)n(ts)h(will)g(b)r(e)g(written.)259 4740 y Fc(YOUT\()33
-b(NPOINT)f(\))g(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-4840 y Fk(An)d(arra)n(y)e(in)n(to)h(whic)n(h)g(the)h(Y-co)r(ordinates)f
-(of)g(the)h(output)g(\(transformed\))f(p)r(oin)n(ts)h(will)g(b)r(e)g
-(written.)259 4991 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h
-(and)g(Returned\))427 5091 y Fk(The)c(global)e(status.)0
-5289 y Fc(Notes:)340 5609 y Fj(\017)45 b Fk(The)28 b(Mapping)f
-(supplied)h(m)n(ust)g(ha)n(v)n(e)e(the)i(v)-5 b(alue)28
-b(2)f(for)g(b)r(oth)h(its)g(Nin)g(and)f(Nout)h(attributes.)p
-eop end
-%%Page: 363 373
-TeXDict begin 363 372 bop 3643 52 a FG(363)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(TRANGRID)1390 483 y Fd(T)-10
-b(ransform)37 b(a)h(grid)g(of)1663 594 y(p)s(ositions)2688
-482 y FA(AST)p Fe(_)p FA(TRANGRID)0 788 y Fc(Description:)44
-b Fk(This)36 b(function)g(uses)f(the)h(supplied)f(Mapping)g(to)h
-(transforms)e(a)h(regular)e(square)i(grid)f(of)i(p)r(oin)n(ts)227
-888 y(co)n(v)n(ering)28 b(a)h(sp)r(eci\014ed)h(b)r(o)n(x.)42
-b(It)30 b(attempts)g(to)f(do)g(this)h(quic)n(kly)f(b)n(y)g(\014rst)g
-(appro)n(ximating)f(the)i(Mapping)f(with)227 987 y(a)35
-b(linear)g(transformation)e(applied)j(o)n(v)n(er)d(the)j(whole)f
-(region)f(of)h(the)h(input)g(grid)e(whic)n(h)i(is)f(b)r(eing)g(used.)60
-b(If)227 1087 y(this)30 b(pro)n(v)n(es)e(to)i(b)r(e)g(insu\016cien)n
-(tly)g(accurate,)f(the)h(input)h(region)d(is)i(sub-divided)g(in)n(to)f
-(t)n(w)n(o)g(along)g(its)h(largest)227 1187 y(dimension)k(and)g(the)h
-(pro)r(cess)e(is)h(rep)r(eated)g(within)h(eac)n(h)e(of)h(the)h
-(resulting)f(sub-regions.)54 b(This)35 b(pro)r(cess)e(of)227
-1286 y(sub-division)21 b(con)n(tin)n(ues)g(un)n(til)g(a)g(su\016cien)n
-(tly)h(go)r(o)r(d)f(linear)f(appro)n(ximation)g(is)h(found,)i(or)e(the)
-g(region)f(to)i(whic)n(h)227 1386 y(it)28 b(is)g(b)r(eing)f(applied)h
-(b)r(ecomes)f(to)r(o)h(small)f(\(in)h(whic)n(h)g(case)e(the)i(original)
-e(Mapping)h(is)h(used)g(directly\).)0 1541 y Fc(In)m(v)m(o)s(cation:)
-123 b Ft(CALL)42 b(AST_TRANGRID\()c(THIS,)j(NCOORD_IN,)f(LBND,)h(UBND,)
-h(TOL,)g(MAXPIX,)f(FORWARD,)f(NCOORD_OUT,)227 1640 y(OUTDIM,)h(OUT,)h
-(STATUS)f(\))0 1795 y Fc(Argumen)m(ts:)259 1937 y(THIS)32
-b(=)g(INTEGER)g(\(Giv)m(en\))427 2036 y Fk(P)n(oin)n(ter)26
-b(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259 2172
-y Fc(NCOORD)p Ft(_)p Fc(IN)i(=)i(INTEGER)g(\(Giv)m(en\))427
-2272 y Fk(The)24 b(n)n(um)n(b)r(er)g(of)g(co)r(ordinates)f(b)r(eing)h
-(supplied)g(for)g(eac)n(h)f(b)r(o)n(x)g(corner)g(\(i.e.)36
-b(the)24 b(n)n(um)n(b)r(er)g(of)g(dimensions)427 2371
-y(of)k(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)g
-(reside\).)259 2507 y Fc(LBND\()k(NCOORD)p Ft(_)p Fc(IN)f(\))h(=)g
-(INTEGER)f(\(Giv)m(en\))427 2606 y Fk(An)j(arra)n(y)d(con)n(taining)h
-(the)i(co)r(ordinates)e(of)h(the)h(cen)n(tre)f(of)g(the)g(\014rst)h
-(pixel)f(in)g(the)h(input)g(grid)f(along)427 2706 y(eac)n(h)27
-b(dimension.)259 2842 y Fc(UBND\()32 b(NCOORD)p Ft(_)p
-Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m(en\))427 2941 y Fk(An)k(arra)n(y)d
-(con)n(taining)h(the)h(co)r(ordinates)f(of)h(the)h(cen)n(tre)f(of)g
-(the)g(last)g(pixel)g(in)h(the)f(input)h(grid)f(along)427
-3041 y(eac)n(h)27 b(dimension.)427 3158 y(Note)i(that)g(LBND)g(and)f
-(UBND)h(together)f(de\014ne)h(the)f(shap)r(e)h(and)f(size)g(of)h(the)g
-(input)g(grid,)f(its)h(exten)n(t)427 3258 y(along)24
-b(a)h(particular)f(\(J'th\))j(dimension)e(b)r(eing)g
-(UBND\(J\)-LBND\(J\)+1.)37 b(They)25 b(also)f(de\014ne)i(the)g(input)
-427 3358 y(grid's)33 b(co)r(ordinate)f(system,)i(eac)n(h)f(pixel)g(ha)n
-(ving)g(unit)h(exten)n(t)f(along)f(eac)n(h)h(dimension)g(with)h(in)n
-(tegral)427 3457 y(co)r(ordinate)27 b(v)-5 b(alues)27
-b(at)g(its)h(cen)n(tre.)259 3593 y Fc(TOL)k(=)h(DOUBLE)f(PRECISION)f
-(\(Giv)m(en\))427 3692 y Fk(The)j(maxim)n(um)f(tolerable)f(geometrical)
-f(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h
-(result)g(of)g(ap-)427 3792 y(pro)n(ximating)c(non-linear)f(Mappings)h
-(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 3892 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(within)h(the)g(output)h(co)r(ordinate)d(system)h(of)h(the)g
-(Mapping.)427 4009 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 4109 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 4208 y(time.)427 4326
-y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n
-(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e(appro)n(ximations)f(used)i
-(in)g(adjacen)n(t)427 4426 y(panel)c(will)f(b)r(e)h(higher.)37
-b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h(the)g(tolerance)e(v)-5
-b(alue)27 b(used.)259 4561 y Fc(MAXPIX)33 b(=)f(INTEGER)f(\(Giv)m(en\))
-427 4661 y Fk(A)e(v)-5 b(alue)29 b(whic)n(h)g(sp)r(eci\014es)f(an)h
-(initial)g(scale)f(size)g(\(in)h(input)h(grid)e(p)r(oin)n(ts\))h(for)f
-(the)h(adaptiv)n(e)f(algorithm)427 4760 y(whic)n(h)j(appro)n(ximates)f
-(non-linear)g(Mappings)g(with)i(piece-wise)f(linear)f(transformations.)
-46 b(Normally)-7 b(,)427 4860 y(this)28 b(should)g(b)r(e)g(a)g(large)e
-(v)-5 b(alue)28 b(\(larger)e(than)i(an)n(y)f(dimension)g(of)h(the)g
-(region)f(of)h(the)g(input)g(grid)g(b)r(eing)427 4960
-y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g
-(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)
-427 5059 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 5177 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 5277 y(do)r(es)c(not)g
-(exceed)g(MAXPIX)h(grid)e(p)r(oin)n(ts)h(in)g(an)n(y)g(dimension.)38
-b(Only)28 b(at)g(this)h(p)r(oin)n(t)f(will)g(attempts)h(at)427
-5376 y(appro)n(ximation)d(commence.)427 5494 y(This)38
-b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)f(in)h
-(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h(adaptiv)n(e)
-e(al-)427 5593 y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r
-(ears)f(appro)n(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)
-427 5693 y(irregularities)e(\(e.g.)53 b(holes\))32 b(on)h(smaller)f
-(scales.)52 b(A)33 b(v)-5 b(alue)33 b(of,)h(sa)n(y)-7
-b(,)34 b(50)e(to)g(100)g(grid)g(p)r(oin)n(ts)h(can)g(also)p
-eop end
-%%Page: 364 374
-TeXDict begin 364 373 bop 0 52 a FG(364)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)427 351 y Fk(b)r(e)j(emplo)n(y)n
-(ed)e(as)g(a)h(safeguard)f(in)h(general-purp)r(ose)e(soft)n(w)n(are,)i
-(since)g(the)g(e\013ect)h(on)f(p)r(erformance)f(is)427
-451 y(minimal.)427 567 y(If)21 b(to)r(o)f(small)g(a)g(v)-5
-b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g
-(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-666 y(\(equiv)-5 b(alen)n(t)21 b(to)f(setting)h(TOL)f(to)g(zero\).)34
-b(Although)20 b(this)h(ma)n(y)f(degrade)f(p)r(erformance,)i(accurate)e
-(results)427 766 y(will)28 b(still)g(b)r(e)g(obtained.)259
-898 y Fc(F)m(OR)-11 b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427
-998 y Fk(A)38 b(.TR)n(UE.)e(v)-5 b(alue)37 b(indicates)g(that)h(the)f
-(Mapping's)g(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)i(to)g(b)
-r(e)427 1098 y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27
-b(v)-5 b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e
-(transformation)g(should)i(b)r(e)g(used.)259 1230 y Fc(NCOORD)p
-Ft(_)p Fc(OUT)j(=)h(INTEGER)f(\(Giv)m(en\))427 1330 y
-Fk(The)g(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j(generated)e
-(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n(t)f(\(i.e.)
-45 b(the)427 1429 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g(of)h(the)f
-(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f(reside\).)39
-b(This)28 b(need)g(not)h(b)r(e)f(the)427 1529 y(same)f(as)g(NCOORD)p
-Ft(_)p Fk(IN.)259 1661 y Fc(OUTDIM)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1761 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(along)e(the)i
-(\014rst)f(dimension)g(of)h(the)g(OUT)f(arra)n(y)e(\(whic)n(h)j(will)f
-(con)n(tain)g(the)427 1861 y(output)34 b(co)r(ordinates\).)54
-b(The)33 b(v)-5 b(alue)34 b(giv)n(en)e(should)i(not)f(b)r(e)h(less)f
-(than)h(the)f(n)n(um)n(b)r(er)h(of)f(p)r(oin)n(ts)g(in)h(the)427
-1960 y(grid.)259 2092 y Fc(OUT\()f(OUTDIM,)f(NCOORD)p
-Ft(_)p Fc(OUT)f(\))h(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-2192 y Fk(An)22 b(arra)n(y)d(in)n(to)i(whic)n(h)g(the)h(co)r(ordinates)
-d(of)j(the)f(output)h(\(transformed\))f(p)r(oin)n(ts)g(will)g(b)r(e)h
-(written.)35 b(These)427 2292 y(will)e(b)r(e)g(stored)f(suc)n(h)g(that)
-h(the)g(v)-5 b(alue)33 b(of)f(co)r(ordinate)g(n)n(um)n(b)r(er)g(COORD)h
-(for)f(output)h(p)r(oin)n(t)g(n)n(um)n(b)r(er)427 2391
-y(POINT)d(will)h(b)r(e)g(found)f(in)h(elemen)n(t)g(OUT\(POINT,COORD\).)
-f(The)g(p)r(oin)n(ts)h(are)e(ordered)g(suc)n(h)h(that)427
-2491 y(the)36 b(\014rst)g(axis)f(of)h(the)g(input)h(grid)e(c)n(hanges)f
-(most)i(rapidly)-7 b(.)61 b(F)-7 b(or)35 b(example,)i(if)g(the)f(input)
-h(grid)e(is)g(2-)427 2591 y(dimensional)d(and)g(extends)h(from)f
-(\(2,-1\))f(to)i(\(3,1\),)g(the)g(output)g(p)r(oin)n(ts)f(will)g(b)r(e)
-h(stored)f(in)g(the)h(order)427 2690 y(\(2,-1\),)27 b(\(3,)h(-1\),)f
-(\(2,0\),)g(\(3,0\),)h(\(2,1\),)f(\(3,1\).)259 2823 y
-Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-2922 y Fk(The)c(global)e(status.)0 3084 y Fc(Notes:)340
-3366 y Fj(\017)45 b Fk(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h
-(transformation)f(is)h(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h
-(m)n(ust)g(ha)n(v)n(e)427 3465 y(the)24 b(v)-5 b(alue)23
-b(of)g(NCOORD)p Ft(_)p Fk(IN)h(for)e(its)i(Nin)g(attribute)f(and)g(the)
-h(v)-5 b(alue)23 b(of)g(NCOORD)p Ft(_)p Fk(OUT)g(for)g(its)g(Nout)427
-3565 y(attribute.)37 b(If)28 b(the)g(in)n(v)n(erse)e(transformation)g
-(is)i(b)r(eing)g(applied,)f(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h
-(rev)n(ersed.)p 0 3763 3780 12 v 0 3894 a FA(AST)p Fe(_)p
-FA(TRANMAP)1415 3893 y Fd(Create)37 b(a)i(T)-10 b(ranMap)2727
-3894 y FA(AST)p Fe(_)p FA(TRANMAP)0 4081 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(T)-7 b(ranMap)27
-b(and)g(optionally)g(initialises)g(its)h(attributes.)227
-4206 y(A)f(T)-7 b(ranMap)26 b(is)g(a)h(Mapping)f(whic)n(h)g(com)n
-(bines)g(the)h(forw)n(ard)e(transformation)g(of)i(a)f(supplied)h
-(Mapping)f(with)227 4305 y(the)34 b(in)n(v)n(erse)d(transformation)g
-(of)i(another)f(supplied)h(Mapping,)h(ignoring)d(the)i(un-used)g
-(transformation)e(in)227 4405 y(eac)n(h)c(Mapping)g(\(indeed)h(the)g
-(un-used)g(transformation)e(need)i(not)f(exist\).)227
-4529 y(When)h(the)f(forw)n(ard)e(transformation)h(of)h(the)g(T)-7
-b(ranMap)26 b(is)h(referred)f(to,)h(the)g(transformation)e(actually)i
-(used)227 4629 y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i
-(\014rst)e(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30
-b(w)n(as)g(constructed.)227 4728 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n
-(erse)d(transformation)h(of)h(the)h(T)-7 b(ranMap)31
-b(is)h(referred)f(to,)i(the)g(transformation)d(ac-)227
-4828 y(tually)f(used)g(is)g(the)g(in)n(v)n(erse)f(transformation)f(of)i
-(the)h(second)e(Mapping)h(supplied)g(when)g(the)h(T)-7
-b(ranMap)28 b(w)n(as)227 4928 y(constructed.)0 5077 y
-Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_TRANMAP\()c(MAP1,)
-i(MAP2,)h(OPTIONS,)e(STATUS)h(\))0 5226 y Fc(Argumen)m(ts:)259
-5361 y(MAP1)32 b(=)g(INTEGER)f(\(Giv)m(en\))427 5461
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(Mapping,)h(whic)n(h)f(de\014nes)h(the)g(forw)n(ard)e(transformation.)
-259 5593 y Fc(MAP2)32 b(=)g(INTEGER)f(\(Giv)m(en\))427
-5693 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g
-(Mapping,)g(whic)n(h)h(de\014nes)f(the)h(in)n(v)n(erse)f
-(transformation.)p eop end
-%%Page: 365 375
-TeXDict begin 365 374 bop 3643 52 a FG(365)259 351 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 451 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 551 y(used)j(for)g
-(initialising)g(the)g(new)g(T)-7 b(ranMap.)35 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)g(for)g(the)g(AST)p
-Ft(_)p Fk(SET)427 650 y(routine.)259 778 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 878
-y Fk(The)c(global)e(status.)0 1035 y Fc(Returned)32 b(V)-8
-b(alue:)259 1167 y(AST)p Ft(_)p Fc(TRANMAP)32 b(=)g(INTEGER)427
-1266 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(T)-7 b(ranMap.)0
-1424 y Fc(Notes:)340 1701 y Fj(\017)45 b Fk(The)36 b(n)n(um)n(b)r(er)g
-(of)g(output)h(co)r(ordinates)d(generated)h(b)n(y)h(the)g(t)n(w)n(o)f
-(Mappings)h(\(their)g(Nout)g(attribute\))427 1801 y(m)n(ust)e(b)r(e)g
-(equal,)h(as)e(m)n(ust)h(the)g(n)n(um)n(b)r(er)f(of)h(input)g(co)r
-(ordinates)e(accepted)i(b)n(y)f(eac)n(h)g(Mapping)g(\(their)427
-1901 y(Nin)28 b(attribute\).)340 2029 y Fj(\017)45 b
-Fk(The)28 b(forw)n(ard)e(transformation)g(of)h(the)h(\014rst)g(Mapping)
-f(m)n(ust)h(exist.)340 2157 y Fj(\017)45 b Fk(The)28
-b(in)n(v)n(erse)e(transformation)g(of)i(the)g(second)f(Mapping)g(m)n
-(ust)g(exist.)340 2285 y Fj(\017)45 b Fk(Note)31 b(that)g(the)g(comp)r
-(onen)n(t)g(Mappings)f(supplied)h(are)e(not)i(copied)g(b)n(y)f(AST)p
-Ft(_)p Fk(TRANMAP)h(\(the)h(new)427 2385 y(T)-7 b(ranMap)40
-b(simply)g(retains)g(a)g(reference)g(to)g(them\).)76
-b(They)41 b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)f(for)g(other)
-427 2484 y(purp)r(oses,)i(but)f(should)f(not)g(b)r(e)g(deleted.)74
-b(If)40 b(a)g(T)-7 b(ranMap)39 b(con)n(taining)f(a)i(cop)n(y)f(of)h
-(its)g(comp)r(onen)n(t)427 2584 y(Mappings)27 b(is)h(required,)e(then)j
-(a)e(cop)n(y)f(of)i(the)g(T)-7 b(ranMap)27 b(should)g(b)r(e)h(made)f
-(using)h(AST)p Ft(_)p Fk(COPY.)340 2712 y Fj(\017)45
-b Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 2812
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2969 y Fc(Status)33
-b(Handling)n(:)227 3115 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3214 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 3314 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-0 3504 3780 12 v 0 3635 a FA(AST)p Fe(_)p FA(TRANN)1240
-3636 y Fd(T)-10 b(ransform)37 b(N-dimensional)1598 3735
-y(co)s(ordinates)2942 3635 y FA(AST)p Fe(_)p FA(TRANN)0
-3891 y Fc(Description:)44 b Fk(This)39 b(routine)f(applies)h(a)f
-(Mapping)h(to)f(transform)g(the)h(co)r(ordinates)e(of)i(a)g(set)f(of)h
-(p)r(oin)n(ts)g(in)g(an)227 3991 y(arbitrary)33 b(n)n(um)n(b)r(er)i(of)
-h(dimensions.)59 b(It)36 b(is)f(the)h(appropriate)d(routine)i(to)g(use)
-g(if)h(the)g(co)r(ordinates)d(are)i(not)227 4091 y(purely)27
-b(1-)g(or)g(2-dimensional)f(and)i(are)e(stored)h(in)h(a)f(single)g
-(arra)n(y)e(\(whic)n(h)j(they)g(need)g(not)f(\014ll)h(completely\).)0
-4235 y Fc(In)m(v)m(o)s(cation:)123 b Ft(CALL)42 b(AST_TRANN\()d(THIS,)j
-(NPOINT,)e(NCOORD_IN,)g(INDIM,)h(IN,)h(FORWARD,)f(NCOORD_OUT,)e
-(OUTDIM,)227 4335 y(OUT,)j(STATUS)f(\))0 4480 y Fc(Argumen)m(ts:)259
-4611 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427 4711
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259
-4839 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))427 4939
-y Fk(The)d(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)259 5067 y Fc(NCOORD)p Ft(_)p Fc(IN)i(=)i(INTEGER)g
-(\(Giv)m(en\))427 5166 y Fk(The)22 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)h(for)e(eac)n(h)h(input)h(p)r(oin)n(t)
-f(\(i.e.)35 b(the)23 b(n)n(um)n(b)r(er)f(of)g(dimensions)427
-5266 y(of)28 b(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n
-(ts)g(reside\).)259 5394 y Fc(INDIM)k(=)g(INTEGER)f(\(Giv)m(en\))427
-5494 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g(along)f(the)i
-(\014rst)f(dimension)g(of)g(the)h(IN)f(arra)n(y)e(\(whic)n(h)j(con)n
-(tains)e(the)i(input)427 5593 y(co)r(ordinates\).)37
-b(This)28 b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)g(the)g(co)r
-(ordinate)f(v)-5 b(alues)28 b(can)f(b)r(e)i(correctly)d(lo)r(cated)i
-(if)427 5693 y(they)g(do)f(not)h(en)n(tirely)f(\014ll)h(this)g(arra)n
-(y)-7 b(.)34 b(The)28 b(v)-5 b(alue)28 b(giv)n(en)e(should)i(not)f(b)r
-(e)h(less)f(than)h(NPOINT.)p eop end
-%%Page: 366 376
-TeXDict begin 366 375 bop 0 52 a FG(366)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(IN\()h(INDIM,)f
-(NCOORD)p Ft(_)p Fc(IN)g(\))h(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-451 y Fk(An)i(arra)n(y)d(con)n(taining)h(the)h(co)r(ordinates)f(of)h
-(the)g(input)h(\(un)n(transformed\))e(p)r(oin)n(ts.)51
-b(These)31 b(should)h(b)r(e)427 551 y(stored)c(suc)n(h)f(that)i(the)f
-(v)-5 b(alue)28 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h(COORD)g(for)f
-(input)i(p)r(oin)n(t)f(n)n(um)n(b)r(er)g(POINT)g(is)427
-650 y(found)g(in)g(elemen)n(t)g(IN\(POINT,COORD\).)259
-780 y Fc(F)m(OR)-11 b(W)g(ARD)32 b(=)g(LOGICAL)h(\(Giv)m(en\))427
-879 y Fk(A)38 b(.TR)n(UE.)e(v)-5 b(alue)37 b(indicates)g(that)h(the)f
-(Mapping's)g(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)i(to)g(b)
-r(e)427 979 y(applied,)28 b(while)g(a)f(.F)-9 b(ALSE.)27
-b(v)-5 b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e
-(transformation)g(should)i(b)r(e)g(used.)259 1109 y Fc(NCOORD)p
-Ft(_)p Fc(OUT)j(=)h(INTEGER)f(\(Giv)m(en\))427 1208 y
-Fk(The)g(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j(generated)e
-(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n(t)f(\(i.e.)
-45 b(the)427 1308 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g(of)h(the)f
-(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f(reside\).)39
-b(This)28 b(need)g(not)h(b)r(e)f(the)427 1408 y(same)f(as)g(NCOORD)p
-Ft(_)p Fk(IN.)259 1537 y Fc(OUTDIM)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-1637 y Fk(The)e(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(along)e(the)i
-(\014rst)f(dimension)g(of)h(the)g(OUT)f(arra)n(y)e(\(whic)n(h)j(will)f
-(con)n(tain)g(the)427 1737 y(output)35 b(co)r(ordinates\).)56
-b(This)34 b(v)-5 b(alue)34 b(is)g(required)f(so)h(that)g(the)h(co)r
-(ordinate)e(v)-5 b(alues)34 b(can)g(b)r(e)g(correctly)427
-1836 y(lo)r(cated)40 b(if)h(they)f(will)h(not)f(en)n(tirely)g(\014ll)g
-(this)h(arra)n(y)-7 b(.)72 b(The)40 b(v)-5 b(alue)41
-b(giv)n(en)e(should)h(not)g(b)r(e)h(less)e(than)427 1936
-y(NPOINT.)259 2066 y Fc(OUT\()33 b(OUTDIM,)f(NCOORD)p
-Ft(_)p Fc(OUT)f(\))h(=)g(DOUBLE)g(PRECISION)f(\(Returned\))427
-2165 y Fk(An)22 b(arra)n(y)d(in)n(to)i(whic)n(h)g(the)h(co)r(ordinates)
-d(of)j(the)f(output)h(\(transformed\))f(p)r(oin)n(ts)g(will)g(b)r(e)h
-(written.)35 b(These)427 2265 y(will)e(b)r(e)g(stored)f(suc)n(h)g(that)
-h(the)g(v)-5 b(alue)33 b(of)f(co)r(ordinate)g(n)n(um)n(b)r(er)g(COORD)h
-(for)f(output)h(p)r(oin)n(t)g(n)n(um)n(b)r(er)427 2365
-y(POINT)27 b(will)h(b)r(e)g(found)g(in)g(elemen)n(t)g
-(OUT\(POINT,COORD\).)259 2494 y Fc(ST)-8 b(A)g(TUS)34
-b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427 2594
-y Fk(The)c(global)e(status.)0 2753 y Fc(Notes:)340 3032
-y Fj(\017)45 b Fk(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h
-(transformation)f(is)h(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h
-(m)n(ust)g(ha)n(v)n(e)427 3132 y(the)24 b(v)-5 b(alue)23
-b(of)g(NCOORD)p Ft(_)p Fk(IN)h(for)e(its)i(Nin)g(attribute)f(and)g(the)
-h(v)-5 b(alue)23 b(of)g(NCOORD)p Ft(_)p Fk(OUT)g(for)g(its)g(Nout)427
-3231 y(attribute.)37 b(If)28 b(the)g(in)n(v)n(erse)e(transformation)g
-(is)i(b)r(eing)g(applied,)f(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h
-(rev)n(ersed.)p 0 3424 3780 12 v 0 3555 a FA(AST)p Fe(_)p
-FA(TUNE)1062 3556 y Fd(Set)39 b(or)f(get)g(an)h(AST)f(global)f(tuning)
-1630 3656 y(parameter)3058 3555 y FA(AST)p Fe(_)p FA(TUNE)0
-3838 y Fc(Description:)44 b Fk(This)35 b(function)g(returns)f(the)g
-(curren)n(t)g(v)-5 b(alue)34 b(of)h(an)f(AST)h(global)e(tuning)i
-(parameter,)f(optionally)227 3938 y(storing)27 b(a)g(new)h(v)-5
-b(alue)27 b(for)g(the)h(parameter.)0 4084 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_TUNE\()d(NAME,)h(VALUE,)h(STATUS)f(\))0
-4231 y Fc(Argumen)m(ts:)259 4364 y(NAME)31 b(=)h(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4464 y Fk(The)c(name)f(of)h(the)g(tuning)g(parameter)e
-(\(case-insensitiv)n(e\).)259 4593 y Fc(V)-11 b(ALUE)33
-b(=)f(INTEGER)g(\(Giv)m(en\))427 4693 y Fk(The)22 b(new)g(v)-5
-b(alue)22 b(for)f(the)h(tuning)g(parameter.)34 b(If)22
-b(this)g(is)g(AST)p Ft(__)p Fk(TUNULL,)g(the)g(existing)g(curren)n(t)f
-(v)-5 b(alue)427 4793 y(will)28 b(b)r(e)g(retained.)259
-4922 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5022 y Fk(The)c(global)e(status.)0 5181
-y Fc(Returned)32 b(V)-8 b(alue:)259 5314 y(AST)p Ft(_)p
-Fc(TUNE)32 b(=)h(INTEGER)427 5414 y Fk(b)r(e)28 b(returned)f(if)i(no)e
-(v)-5 b(alue)27 b(has)g(b)r(een)h(set)g(for)f(the)h(parameter.)0
-5572 y Fc(Notes:)p eop end
-%%Page: 367 377
-TeXDict begin 367 376 bop 3643 52 a FG(367)340 351 y
-Fj(\017)45 b Fk(This)28 b(routine)f(attempts)g(to)h(execute)f(ev)n(en)g
-(if)g(ST)-7 b(A)g(TUS)29 b(is)e(set)g(to)h(an)f(error)e(v)-5
-b(alue)27 b(on)g(en)n(try)-7 b(,)27 b(although)427 451
-y(no)h(further)f(error)f(rep)r(ort)h(will)g(b)r(e)h(made)g(if)g(it)g
-(subsequen)n(tly)f(fails)g(under)h(these)g(circumstances.)340
-576 y Fj(\017)45 b Fk(All)28 b(threads)f(in)h(a)f(pro)r(cess)g(share)f
-(the)i(same)f(AST)h(tuning)g(parameters)e(v)-5 b(alues.)32
-730 y Fc(T)d(uning)31 b(P)m(arameters)i(:)259 858 y(Ob)5
-b(jectCac)m(hing)427 958 y Fk(A)38 b(b)r(o)r(olean)f(\015ag)g(whic)n(h)
-h(indicates)f(what)h(should)f(happ)r(en)h(to)g(the)g(memory)f(o)r
-(ccupied)g(b)n(y)h(an)f(AST)427 1057 y(Ob)5 b(ject)28
-b(when)h(the)f(Ob)5 b(ject)29 b(is)f(deleted)g(\(i.e.)40
-b(when)28 b(its)g(reference)g(coun)n(t)g(falls)g(to)g(zero)f(or)g(it)i
-(is)f(deleted)427 1157 y(using)k(AST)p Ft(_)p Fk(DELETE\).)f(If)h(this)
-h(is)f(zero,)g(the)g(memory)f(is)h(simply)g(freed)g(using)g(the)g
-(systems)g Ft(")p Fk(free)p Ft(")427 1257 y Fk(function.)37
-b(If)26 b(it)g(is)f(non-zero,)g(the)g(memory)g(is)h(not)f(freed.)36
-b(Instead)25 b(a)g(p)r(oin)n(ter)h(to)f(it)h(is)f(stored)g(in)h(a)f(p)r
-(o)r(ol)427 1356 y(of)i(suc)n(h)g(p)r(oin)n(ters,)g(all)g(of)g(whic)n
-(h)g(refer)f(to)h(allo)r(cated)f(but)i(curren)n(tly)e(un)n(used)h(blo)r
-(c)n(ks)g(of)g(memory)-7 b(.)36 b(This)427 1456 y(allo)n(ws)24
-b(AST)h(to)g(sp)r(eed)g(up)g(subsequen)n(t)g(Ob)5 b(ject)25
-b(creation)e(b)n(y)i(re-using)f(previously)f(allo)r(cated)h(memory)427
-1556 y(blo)r(c)n(ks)32 b(rather)g(than)h(allo)r(cating)e(new)i(memory)f
-(using)h(the)g(systems)f(mallo)r(c)g(function.)53 b(The)33
-b(default)427 1655 y(v)-5 b(alue)29 b(for)f(this)h(parameter)e(is)h
-(zero.)39 b(Setting)28 b(it)h(to)g(a)f(non-zero)f(v)-5
-b(alue)28 b(will)h(result)f(in)h(Ob)5 b(ject)28 b(memory)427
-1755 y(b)r(eing)33 b(cac)n(hed)g(in)g(future.)53 b(Setting)33
-b(it)h(bac)n(k)e(to)h(zero)f(causes)g(an)n(y)g(memory)g(blo)r(c)n(ks)g
-(curren)n(tly)g(in)h(the)427 1854 y(p)r(o)r(ol)e(to)g(b)r(e)g(freed.)47
-b(Note,)31 b(this)h(tuning)f(parameter)e(only)i(con)n(trols)e(the)i
-(cac)n(hing)f(of)h(memory)f(used)h(to)427 1954 y(store)c(AST)h(Ob)5
-b(jects.)36 b(T)-7 b(o)28 b(cac)n(he)e(other)h(memory)g(blo)r(c)n(ks)g
-(allo)r(cated)g(b)n(y)g(AST,)h(use)g(MemoryCac)n(hing.)259
-2079 y Fc(MemoryCac)m(hing)427 2179 y Fk(A)e(b)r(o)r(olean)f(\015ag)f
-(similar)g(to)i(Ob)5 b(jectCac)n(hing)24 b(except)h(that)g(it)h(con)n
-(trols)e(cac)n(hing)g(of)h(all)g(memory)f(blo)r(c)n(ks)427
-2278 y(of)40 b(less)f(than)h(300)f(b)n(ytes)g(allo)r(cated)h(b)n(y)f
-(AST)h(\(whether)g(for)g(in)n(ternal)f(or)g(external)g(use\),)k(not)d
-(just)427 2378 y(memory)27 b(used)h(to)f(store)g(AST)h(Ob)5
-b(jects.)p 0 2561 3780 12 v 0 2692 a FA(AST)p Fe(_)p
-FA(UINTERP)1435 2693 y Fd(P)m(erform)36 b(sub-pixel)1116
-2807 y(in)m(terp)s(olation)d(on)j(a)h(grid)f(of)g(data)2816
-2692 y FA(AST)p Fe(_)p FA(UINTERP)0 2980 y Fc(Description:)44
-b Fk(This)33 b(is)g(a)g(\014ctitious)g(routine)g(whic)n(h)g(do)r(es)g
-(not)g(actually)g(exist.)53 b(Instead,)34 b(this)g(description)e(con-)
-227 3080 y(stitutes)40 b(a)e(template)i(so)e(that)h(y)n(ou)f(ma)n(y)h
-(implemen)n(t)g(a)g(routine)f(with)i(this)f(in)n(terface)f(for)h(y)n
-(ourself)e(\(and)227 3180 y(giv)n(e)d(it)g(an)n(y)g(name)g(y)n(ou)g
-(wish\).)57 b(Suc)n(h)34 b(a)g(routine)g(ma)n(y)g(b)r(e)h(passed)e(via)
-h(the)h(FINTERP)f(argumen)n(t)f(of)h(the)227 3279 y(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)24 b Fk(functions)i(\(q.v.\))37
-b(in)25 b(order)g(to)g(p)r(erform)g(sub-pixel)g(in)n(terp)r(olation)g
-(during)g(resam-)227 3379 y(pling)i(of)g(gridded)g(data)f(\(y)n(ou)h(m)
-n(ust)g(also)f(set)h(the)g(INTERP)g(argumen)n(t)f(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(to)i(the)227
-3479 y(v)-5 b(alue)31 b(AST)p Ft(__)p Fk(UINTERP\).)f(This)h(allo)n(ws)
-e(y)n(ou)h(to)g(use)h(y)n(our)e(o)n(wn)h(in)n(terp)r(olation)g
-(algorithm)f(in)i(addition)g(to)227 3578 y(those)d(whic)n(h)f(are)g
-(pre-de\014ned.)227 3699 y(The)38 b(routine)f(in)n(terp)r(olates)f(an)h
-(input)i(grid)d(of)i(data)f(\(and,)j(optionally)-7 b(,)39
-b(pro)r(cesses)d(asso)r(ciated)g(statistical)227 3798
-y(v)-5 b(ariance)27 b(estimates\))g(at)h(a)f(sp)r(eci\014ed)h(set)f(of)
-h(p)r(oin)n(ts.)0 3940 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_UINTERP\()c(NDIM_IN,)j(LBND_IN,)f(UBND_IN,)g(IN,)i
-(IN_VAR,)f(NPOINT,)g(OFFSET,)g(COORDS,)227 4039 y(PARAMS,)g(FLAGS,)g
-(BADVAL,)g(OUT,)h(OUT_VAR,)e(NBAD,)h(STATUS)h(\))0 4181
-y Fc(Argumen)m(ts:)259 4309 y(NDIM)p Ft(_)p Fc(IN)31
-b(=)h(INTEGER)g(\(Giv)m(en\))427 4409 y Fk(The)c(n)n(um)n(b)r(er)f(of)h
-(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28 b(will)g(b)r(e)g
-(at)f(least)h(one.)259 4534 y Fc(LBND)p Ft(_)p Fc(IN\()k(NDIM)p
-Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f(\(Giv)m(en\))427 4634
-y Fk(An)j(arra)n(y)d(con)n(taining)h(the)i(co)r(ordinates)e(of)h(the)h
-(cen)n(tre)f(of)g(the)g(\014rst)h(pixel)f(in)g(the)h(input)g(grid)f
-(along)427 4733 y(eac)n(h)27 b(dimension.)259 4858 y
-Fc(UBND)p Ft(_)p Fc(IN\()32 b(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g(INTEGER)f
-(\(Giv)m(en\))427 4958 y Fk(An)k(arra)n(y)d(con)n(taining)h(the)h(co)r
-(ordinates)f(of)h(the)h(cen)n(tre)f(of)g(the)g(last)g(pixel)g(in)h(the)
-f(input)h(grid)f(along)427 5057 y(eac)n(h)27 b(dimension.)427
-5170 y(Note)e(that)g(LBND)p Ft(_)p Fk(IN)g(and)g(UBND)p
-Ft(_)p Fk(IN)g(together)f(de\014ne)h(the)g(shap)r(e,)g(size)g(and)g(co)
-r(ordinate)e(system)i(of)427 5269 y(the)j(input)h(grid)e(in)g(the)h
-(same)f(w)n(a)n(y)g(as)g(they)g(do)h(in)g(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)259 5394 y Fc(IN\()k
-Fj(\003)f Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)g
-Fc(\(Giv)m(en\))427 5494 y Fk(An)d(arra)n(y)-7 b(,)26
-b(with)j(one)f(elemen)n(t)h(for)f(eac)n(h)f(pixel)h(in)h(the)g(input)g
-(grid,)f(con)n(taining)f(the)i(input)g(data.)39 b(This)427
-5593 y(will)31 b(b)r(e)g(the)f(same)g(arra)n(y)e(as)i(w)n(as)f(passed)g
-(to)i(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)d
-Fk(via)i(the)h(IN)g(argumen)n(t.)44 b(The)427 5693 y(n)n(umerical)27
-b(t)n(yp)r(e)h(of)f(this)h(arra)n(y)e(should)h(matc)n(h)g(that)h(of)g
-(the)g(data)f(b)r(eing)g(pro)r(cessed.)p eop end
-%%Page: 368 378
-TeXDict begin 368 377 bop 0 52 a FG(368)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(IN)p
-Ft(_)p Fc(V)-11 b(AR\()32 b Fj(\003)f Fc(\))h(=)g Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)g Fc(\(Giv)m(en\))427 451 y Fk(An)24
-b(optional)e(second)h(arra)n(y)e(with)j(the)f(same)g(size)g(and)g(t)n
-(yp)r(e)g(as)g(the)h(IN)f(arra)n(y)-7 b(.)33 b(This)24
-b(will)f(only)g(b)r(e)g(giv)n(en)427 551 y(if)30 b(the)f(AST)p
-Ft(__)p Fk(USEV)-9 b(AR)29 b(\015ag)f(is)h(set)g(via)f(the)i(FLA)n(GS)f
-(argumen)n(t)f(\(b)r(elo)n(w\).)41 b(If)29 b(giv)n(en,)g(it)g(will)g
-(con)n(tain)427 650 y(the)i(set)f(of)g(v)-5 b(ariance)29
-b(v)-5 b(alues)29 b(asso)r(ciated)g(with)h(the)h(input)g(data)e(and)h
-(will)g(b)r(e)h(the)f(same)g(arra)n(y)d(as)j(w)n(as)427
-750 y(passed)d(to)h(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)e Fk(via)h(the)h(IN)p Ft(_)p Fk(V)-9 b(AR)28
-b(argumen)n(t.)427 862 y(If)33 b(the)f(AST)p Ft(__)p
-Fk(USEV)-9 b(AR)33 b(\015ag)e(is)h(not)g(set,)i(then)e(no)g(v)-5
-b(ariance)31 b(v)-5 b(alues)32 b(are)f(b)r(eing)h(pro)r(cessed.)50
-b(In)32 b(this)427 962 y(case,)27 b(this)h(arra)n(y)d(of)i(v)-5
-b(ariance)27 b(v)-5 b(alues)27 b(ma)n(y)f(b)r(e)i(a)f(dumm)n(y)h
-(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)e(and)i(should)h(not)427
-1062 y(b)r(e)g(used.)259 1187 y Fc(NPOINT)k(=)g(INTEGER)f(\(Giv)m(en\))
-427 1287 y Fk(The)26 b(n)n(um)n(b)r(er)f(of)g(p)r(oin)n(ts)h(at)f(whic)
-n(h)g(the)h(input)g(grid)f(is)g(to)g(b)r(e)h(in)n(terp)r(olated.)36
-b(This)25 b(will)h(b)r(e)g(at)f(least)g(one.)259 1413
-y Fc(OFFSET\()32 b(NPOINT)g(\))g(=)g(INTEGER)f(\(Giv)m(en\))427
-1512 y Fk(F)-7 b(or)23 b(eac)n(h)g(in)n(terp)r(olation)g(p)r(oin)n(t,)h
-(this)g(arra)n(y)d(will)j(con)n(tain)e(the)i(o\013set)g(from)f(the)h
-(start)f(of)g(the)h(OUT)f(\(and)427 1612 y(OUT)p Ft(_)p
-Fk(V)-9 b(AR\))35 b(arra)n(y\(s\))d(at)i(whic)n(h)g(the)h(in)n(terp)r
-(olated)e(v)-5 b(alue)34 b(\(and)h(its)f(v)-5 b(ariance,)35
-b(if)f(required\))g(should)427 1712 y(b)r(e)28 b(stored.)36
-b(F)-7 b(or)26 b(example,)h(the)h(in)n(terp)r(olated)e(v)-5
-b(alue)27 b(for)g(p)r(oin)n(t)g(n)n(um)n(b)r(er)g(POINT)g(should)f(b)r
-(e)i(stored)e(in)427 1811 y(OUT\(1+OFFSET\(POINT\)\).)259
-1937 y Fc(COORDS\()31 b(NPOINT,)h(NDIM)p Ft(_)p Fc(IN)f(\))h(=)g
-(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427 2037 y Fk(A)26
-b(2-dimensional)e(arra)n(y)g(con)n(taining)g(the)i(co)r(ordinates)e(of)
-i(the)g(p)r(oin)n(ts)f(at)h(whic)n(h)f(in)n(terp)r(olation)g(should)427
-2136 y(b)r(e)37 b(p)r(erformed.)63 b(These)36 b(will)g(b)r(e)h(stored)f
-(so)g(that)g(co)r(ordinate)f(n)n(um)n(b)r(er)i(COORD)f(for)f(in)n(terp)
-r(olation)427 2236 y(p)r(oin)n(t)28 b(n)n(um)n(b)r(er)f(POINT)g(is)h
-(found)g(in)g(elemen)n(t)f(COORDS\(POINT,COORD\).)427
-2348 y(If)42 b(an)n(y)f(in)n(terp)r(olation)f(p)r(oin)n(t)i(has)f(an)n
-(y)f(of)i(its)f(co)r(ordinates)f(equal)h(to)g(the)h(v)-5
-b(alue)42 b(AST)p Ft(__)p Fk(BAD)f(\(as)427 2448 y(de\014ned)35
-b(in)g(the)h(AST)p Ft(_)p Fk(P)-7 b(AR)34 b(include)i(\014le\),)h(then)
-e(the)g(corresp)r(onding)e(output)i(data)g(\(and)g(v)-5
-b(ariance\))427 2548 y(should)23 b(either)g(b)r(e)g(set)g(to)g(the)g(v)
--5 b(alue)23 b(giv)n(en)g(b)n(y)f(BAD)n(V)-9 b(AL,)24
-b(or)e(left)h(unc)n(hanged,)h(dep)r(ending)f(on)g(whether)427
-2647 y(the)28 b(AST)p Ft(__)p Fk(NOBAD)g(\015ag)f(is)g(sp)r(eci\014ed)h
-(b)n(y)f(FLA)n(GS.)259 2773 y Fc(P)-8 b(ARAMS\()32 b
-Fj(\003)f Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2873 y Fk(This)19 b(will)f(b)r(e)h(the)g(same)f(arra)n(y)e(as)h(w)n(as)
-h(giv)n(en)f(via)h(the)h(P)-7 b(ARAMS)19 b(argumen)n(t)e(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)427 2972
-y(Y)-7 b(ou)28 b(ma)n(y)f(use)h(this)g(to)g(pass)f(an)n(y)h(additional)
-f(parameter)f(v)-5 b(alues)28 b(required)f(b)n(y)h(y)n(our)e(in)n(terp)
-r(olation)h(al-)427 3072 y(gorithm.)259 3198 y Fc(FLA)m(GS)33
-b(=)f(INTEGER)f(\(Giv)m(en\))427 3297 y Fk(This)21 b(will)g(b)r(e)g
-(the)h(same)e(v)-5 b(alue)21 b(as)f(w)n(as)g(giv)n(en)g(via)g(the)h
-(FLA)n(GS)h(argumen)n(t)d(of)i(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(.)427 3397 y(Y)-7 b(ou)30 b(ma)n(y)f(test)g
-(this)h(v)-5 b(alue)29 b(to)h(pro)n(vide)e(additional)h(con)n(trol)f(o)
-n(v)n(er)g(the)i(op)r(eration)e(of)i(y)n(our)e(resampling)427
-3497 y(algorithm.)52 b(Note)34 b(that)f(the)g(sp)r(ecial)g(\015ag)f(v)
--5 b(alues)33 b(AST)p Ft(__)p Fk(URESAMP1,)h(2,)g(3)e(&)h(4)g(are)f
-(reserv)n(ed)f(for)427 3596 y(y)n(ou)g(to)h(use)f(for)g(y)n(our)g(o)n
-(wn)g(purp)r(oses)f(and)i(will)g(not)f(clash)g(with)h(other)f
-(pre-de\014ned)h(\015ag)e(v)-5 b(alues)32 b(\(see)427
-3696 y(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p
-Fk(\).)259 3821 y Fc(BAD)m(V)-11 b(AL)34 b(=)e Fm(<)p
-Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Giv)m(en\))427 3921 y Fk(This)19
-b(will)f(b)r(e)h(the)g(same)f(v)-5 b(alue)18 b(as)f(w)n(as)h(giv)n(en)f
-(for)h(the)h(BAD)n(V)-9 b(AL)19 b(argumen)n(t)e(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(,)427 4021
-y(and)40 b(will)g(ha)n(v)n(e)f(the)h(same)g(n)n(umerical)f(t)n(yp)r(e)h
-(as)f(the)i(data)e(b)r(eing)h(pro)r(cessed)f(\(i.e.)75
-b(as)39 b(elemen)n(ts)h(of)427 4120 y(the)d(IN)f(arra)n(y\).)60
-b(It)36 b(should)g(b)r(e)g(used)g(to)g(test)h(for)e(bad)h(pixels)g(in)g
-(the)g(input)h(grid)e(\(but)i(only)f(if)g(the)427 4220
-y(AST)p Ft(__)p Fk(USEBAD)26 b(\015ag)e(is)i(set)f(via)g(the)h(FLA)n
-(GS)g(argumen)n(t\))f(and)g(\(unless)h(the)g(AST)p Ft(__)p
-Fk(NOBAD)f(\015ag)g(is)427 4320 y(set)j(in)g(FLA)n(GS\))g(for)f(iden)n
-(tifying)h(bad)f(output)h(v)-5 b(alues)28 b(in)g(the)g(OUT)f(\(and)h
-(OUT)p Ft(_)p Fk(V)-9 b(AR\))27 b(arra)n(y\(s\).)259
-4445 y Fc(OUT\()33 b Fj(\003)e Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p
-Fm(>)f Fc(\(Returned\))427 4545 y Fk(An)36 b(arra)n(y)d(with)j(the)f
-(same)g(n)n(umerical)f(t)n(yp)r(e)i(as)e(the)i(IN)g(arra)n(y)-7
-b(,)35 b(in)n(to)g(whic)n(h)g(the)g(in)n(terp)r(olated)g(data)427
-4645 y(v)-5 b(alues)29 b(should)f(b)r(e)h(returned.)40
-b(Note)29 b(that)g(details)f(of)h(the)g(storage)e(order)g(and)i(n)n(um)
-n(b)r(er)f(of)h(dimensions)427 4744 y(of)34 b(this)h(arra)n(y)c(are)i
-(not)i(required,)f(since)g(the)h(OFFSET)e(arra)n(y)f(con)n(tains)h(all)
-h(necessary)e(information)427 4844 y(ab)r(out)c(where)f(eac)n(h)g
-(returned)g(v)-5 b(alue)27 b(should)h(b)r(e)g(stored.)427
-4957 y(In)e(general,)e(not)h(all)g(elemen)n(ts)g(of)g(this)g(arra)n(y)e
-(\(or)i(the)g(OUT)p Ft(_)p Fk(V)-9 b(AR)25 b(arra)n(y)e(b)r(elo)n(w\))i
-(ma)n(y)f(b)r(e)i(used)f(in)g(an)n(y)427 5056 y(particular)c(in)n(v)n
-(o)r(cation)g(of)h(the)g(routine.)35 b(Those)21 b(whic)n(h)h(are)f(not)
-h(used)g(should)g(b)r(e)h(returned)e(unc)n(hanged.)259
-5182 y Fc(OUT)p Ft(_)p Fc(V)-11 b(AR\()33 b Fj(\003)e
-Fc(\))h(=)g Fm(<)p Fc(Xt)m(yp)s(e)p Fm(>)f Fc(\(Returned\))427
-5281 y Fk(An)k(optional)f(arra)n(y)e(with)i(the)h(same)f(t)n(yp)r(e)g
-(and)g(size)g(as)g(the)h(OUT)f(arra)n(y)-7 b(,)34 b(in)n(to)g(whic)n(h)
-g(v)-5 b(ariance)33 b(es-)427 5381 y(timates)j(for)f(the)h(resampled)e
-(v)-5 b(alues)35 b(should)h(b)r(e)f(returned.)60 b(This)36
-b(arra)n(y)d(will)j(only)f(b)r(e)h(giv)n(en)e(if)i(the)427
-5481 y(AST)p Ft(__)p Fk(USEV)-9 b(AR)28 b(\015ag)f(is)g(set)h(via)f
-(the)h(FLA)n(GS)g(argumen)n(t.)427 5593 y(If)g(giv)n(en,)e(it)i(is)f
-(addressed)f(in)h(exactly)g(the)g(same)g(w)n(a)n(y)f(\(via)g(the)i
-(OFFSET)f(arra)n(y\))e(as)h(the)i(OUT)f(arra)n(y)-7 b(.)427
-5693 y(The)22 b(v)-5 b(alues)21 b(returned)g(should)h(b)r(e)g
-(estimates)f(of)h(the)g(statistical)f(v)-5 b(ariance)21
-b(of)g(the)h(corresp)r(onding)e(v)-5 b(alues)p eop end
-%%Page: 369 379
-TeXDict begin 369 378 bop 3643 52 a FG(369)427 351 y
-Fk(in)36 b(the)g(OUT)g(arra)n(y)-7 b(,)36 b(on)f(the)h(assumption)f
-(that)h(all)g(errors)d(in)j(input)h(data)e(v)-5 b(alues)35
-b(are)g(statistically)427 451 y(indep)r(enden)n(t)40
-b(and)f(that)g(their)f(v)-5 b(ariance)38 b(estimates)g(ma)n(y)h(simply)
-f(b)r(e)i(summed)f(\(with)g(appropriate)427 551 y(w)n(eigh)n(ting)27
-b(factors\).)427 668 y(If)k(the)g(AST)p Ft(__)p Fk(USEV)-9
-b(AR)30 b(\015ag)f(is)i(not)f(set,)h(then)g(v)-5 b(ariance)29
-b(v)-5 b(alues)30 b(are)f(not)i(b)r(eing)f(pro)r(cessed.)44
-b(In)30 b(this)427 767 y(case,)d(this)h(arra)n(y)d(ma)n(y)i(b)r(e)h(a)f
-(dumm)n(y)h(\(e.g.)37 b(one-elemen)n(t\))27 b(arra)n(y)e(and)j(should)f
-(not)h(b)r(e)g(used.)259 902 y Fc(NBAD)k(=)g(INTEGER)f(\(Returned\))427
-1001 y Fk(This)h(should)g(return)f(the)h(n)n(um)n(b)r(er)g(of)f(in)n
-(terp)r(olation)g(p)r(oin)n(ts)h(at)f(whic)n(h)h(no)g(v)-5
-b(alid)31 b(in)n(terp)r(olated)h(v)-5 b(alue)427 1101
-y(could)29 b(b)r(e)g(obtained.)39 b(The)29 b(maxim)n(um)f(v)-5
-b(alue)28 b(that)h(should)f(b)r(e)h(returned)f(is)h(NPOINT,)f(and)h
-(the)f(mini-)427 1201 y(m)n(um)g(is)g(zero)e(\(indicating)i(that)g(all)
-f(output)h(v)-5 b(alues)27 b(w)n(ere)g(successfully)g(obtained\).)259
-1335 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1435 y Fk(The)c(global)e(status.)0 1600
-y Fc(Notes:)340 1886 y Fj(\017)45 b Fk(The)37 b(data)e(t)n(yp)r(e)i
-Fm(<)p Fk(Xt)n(yp)r(e)p Fm(>)f Fk(indicates)g(the)g(n)n(umerical)g(t)n
-(yp)r(e)g(of)g(the)h(data)f(b)r(eing)g(pro)r(cessed,)i(as)d(for)427
-1985 y(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p
-Fk(.)340 2120 y Fj(\017)45 b Fk(This)19 b(routine)f(will)g(t)n
-(ypically)g(b)r(e)h(in)n(v)n(ok)n(ed)e(more)g(than)i(once)f(for)f(eac)n
-(h)h(in)n(v)n(o)r(cation)f(of)h(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(.)340 2254 y Fj(\017)45 b Fk(If)29
-b(an)g(error)d(o)r(ccurs)i(within)h(this)g(routine,)f(it)h(should)g
-(set)f(the)h(ST)-7 b(A)g(TUS)30 b(argumen)n(t)d(to)i(an)f(error)f(v)-5
-b(alue)427 2354 y(b)r(efore)34 b(returning.)56 b(This)34
-b(will)h(cause)e(an)h(immediate)h(return)e(from)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)56 b(The)427
-2453 y(error)32 b(v)-5 b(alue)34 b(AST)p Ft(__)p Fk(UINER)g(is)g(a)n(v)
--5 b(ailable)33 b(for)g(this)i(purp)r(ose,)g(but)g(other)e(v)-5
-b(alues)34 b(ma)n(y)f(also)g(b)r(e)i(used)427 2553 y(\(e.g.)54
-b(if)34 b(y)n(ou)f(wish)g(to)g(distinguish)h(di\013eren)n(t)f(t)n(yp)r
-(es)h(of)f(error\).)53 b(The)33 b(AST)p Ft(__)p Fk(UINER)g(error)e(v)-5
-b(alue)34 b(is)427 2653 y(de\014ned)28 b(in)g(the)g(AST)p
-Ft(_)p Fk(ERR)f(include)h(\014le.)p 0 2855 3780 12 v
-0 2986 a FA(AST)p Fe(_)p FA(UKERN1)1289 2987 y Fd(1-dimensional)36
-b(sub-pixel)1389 3101 y(in)m(terp)s(olation)f(k)m(ernel)2879
-2986 y FA(AST)p Fe(_)p FA(UKERN1)0 3294 y Fc(Description:)44
-b Fk(This)33 b(is)g(a)g(\014ctitious)g(routine)g(whic)n(h)g(do)r(es)g
-(not)g(actually)g(exist.)53 b(Instead,)34 b(this)g(description)e(con-)
-227 3393 y(stitutes)40 b(a)e(template)i(so)e(that)h(y)n(ou)f(ma)n(y)h
-(implemen)n(t)g(a)g(routine)f(with)i(this)f(in)n(terface)f(for)h(y)n
-(ourself)e(\(and)227 3493 y(giv)n(e)d(it)g(an)n(y)g(name)g(y)n(ou)g
-(wish\).)57 b(Suc)n(h)34 b(a)g(routine)g(ma)n(y)g(b)r(e)h(passed)e(via)
-h(the)h(FINTERP)f(argumen)n(t)f(of)h(the)227 3592 y(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)24 b Fk(functions)h(\(q.v.\))36
-b(in)25 b(order)f(to)h(supply)g(a)f(1-dimensional)g(in)n(terp)r
-(olation)g(k)n(ernel)g(to)227 3692 y(the)h(algorithm)f(whic)n(h)g(p)r
-(erforms)g(sub-pixel)h(in)n(terp)r(olation)f(during)g(resampling)f(of)i
-(gridded)f(data)g(\(y)n(ou)g(m)n(ust)227 3792 y(also)33
-b(set)g(the)h(INTERP)f(argumen)n(t)g(of)h(AST)p Ft(_)p
-Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)e Fk(to)h(the)h(v)-5
-b(alue)34 b(AST)p Ft(__)p Fk(UKERN1\).)54 b(This)227
-3891 y(allo)n(ws)26 b(y)n(ou)h(to)h(use)f(y)n(our)g(o)n(wn)g(in)n(terp)
-r(olation)f(k)n(ernel)h(in)h(addition)f(to)h(those)f(whic)n(h)h(are)e
-(pre-de\014ned.)227 4018 y(The)f(routine)f(calculates)f(the)i(v)-5
-b(alue)24 b(of)g(a)g(1-dimensional)f(sub-pixel)h(in)n(terp)r(olation)g
-(k)n(ernel.)34 b(This)25 b(determines)227 4117 y(ho)n(w)31
-b(the)i(w)n(eigh)n(t)e(giv)n(en)g(to)h(neigh)n(b)r(ouring)e(pixels)i
-(in)g(calculating)f(an)g(in)n(terp)r(olated)h(v)-5 b(alue)31
-b(dep)r(ends)i(on)e(the)227 4217 y(pixel's)f(o\013set)g(from)g(the)h
-(in)n(terp)r(olation)e(p)r(oin)n(t.)45 b(In)30 b(more)f(than)i(one)e
-(dimension,)i(the)g(w)n(eigh)n(t)e(assigned)g(to)h(a)227
-4316 y(pixel)k(is)h(formed)e(b)n(y)h(ev)-5 b(aluating)34
-b(this)g(1-dimensional)f(k)n(ernel)g(using)h(the)h(o\013set)f(along)f
-(eac)n(h)g(dimension)h(in)227 4416 y(turn.)j(The)28 b(pro)r(duct)g(of)f
-(the)h(returned)f(v)-5 b(alues)27 b(is)h(then)g(used)g(as)f(the)g
-(pixel)h(w)n(eigh)n(t.)0 4569 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(CALL)42 b(AST_UKERN1\()d(OFFSET,)h(PARAMS,)h(FLAGS,)g(VALUE,)g
-(STATUS)g(\))0 4721 y Fc(Argumen)m(ts:)259 4861 y(OFFSET)32
-b(=)g(DOUBLE)g(PRECISION)g(\(Giv)m(en\))427 4961 y Fk(This)22
-b(will)g(b)r(e)g(the)g(o\013set)g(of)f(the)h(pixel)g(from)g(the)g(in)n
-(terp)r(olation)e(p)r(oin)n(t,)k(measured)c(in)i(pixels.)35
-b(This)22 b(v)-5 b(alue)427 5060 y(ma)n(y)29 b(b)r(e)h(p)r(ositiv)n(e)g
-(or)e(negativ)n(e,)h(but)i(for)e(most)g(practical)g(in)n(terp)r
-(olation)g(sc)n(hemes)g(its)h(sign)f(should)g(b)r(e)427
-5160 y(ignored.)259 5295 y Fc(P)-8 b(ARAMS\()32 b Fj(\003)f
-Fc(\))h(=)g(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427 5394
-y Fk(This)19 b(will)f(b)r(e)h(the)g(same)f(arra)n(y)e(as)h(w)n(as)h
-(giv)n(en)f(via)h(the)h(P)-7 b(ARAMS)19 b(argumen)n(t)e(of)h(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(.)427 5494
-y(Y)-7 b(ou)29 b(ma)n(y)f(use)g(this)h(to)f(pass)g(an)n(y)g(additional)
-g(parameter)f(v)-5 b(alues)28 b(required)f(b)n(y)h(y)n(our)g(k)n
-(ernel,)g(but)h(note)427 5593 y(that)i(P)-7 b(ARAMS\(1\))31
-b(will)f(already)f(ha)n(v)n(e)g(b)r(een)h(used)h(to)f(sp)r(ecify)g(the)
-h(n)n(um)n(b)r(er)f(of)g(neigh)n(b)r(ouring)f(pixels)427
-5693 y(whic)n(h)f(con)n(tribute)f(to)g(the)h(in)n(terp)r(olated)g(v)-5
-b(alue.)p eop end
-%%Page: 370 380
-TeXDict begin 370 379 bop 0 52 a FG(370)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)259 351 y Fc(FLA)m(GS)i(=)f
-(INTEGER)f(\(Giv)m(en\))427 451 y Fk(This)21 b(will)g(b)r(e)g(the)h
-(same)e(v)-5 b(alue)21 b(as)f(w)n(as)g(giv)n(en)g(via)g(the)h(FLA)n(GS)
-h(argumen)n(t)d(of)i(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)p Fk(.)427 551 y(Y)-7 b(ou)23 b(ma)n(y)f(test)h(this)f(v)-5
-b(alue)23 b(to)f(pro)n(vide)g(additional)g(con)n(trol)f(o)n(v)n(er)g
-(the)i(op)r(eration)e(of)h(y)n(our)g(routine.)35 b(Note)427
-650 y(that)27 b(the)g(sp)r(ecial)f(\015ag)g(v)-5 b(alues)27
-b(AST)p Ft(__)p Fk(URESAMP1,)e(2,)i(3)f(&)g(4)h(are)e(reserv)n(ed)g
-(for)h(y)n(ou)g(to)g(use)h(for)f(y)n(our)427 750 y(o)n(wn)18
-b(purp)r(oses)g(and)g(will)g(not)h(clash)f(with)g(other)g
-(pre-de\014ned)g(\015ag)g(v)-5 b(alues)18 b(\(see)g(AST)p
-Ft(_)p Fk(RESAMPLE)p Fm(<)p Fk(X)p Fm(>)p Fk(\).)259
-878 y Fc(V)-11 b(ALUE)33 b(=)f(DOUBLE)h(PRECISION)e(\(Returned\))427
-977 y Fk(The)d(calculated)f(k)n(ernel)g(v)-5 b(alue,)27
-b(whic)n(h)h(ma)n(y)f(b)r(e)h(p)r(ositiv)n(e)f(or)g(negativ)n(e.)259
-1105 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 1205 y Fk(The)c(global)e(status.)0 1362
-y Fc(Notes:)340 1639 y Fj(\017)45 b Fk(Not)29 b(all)g(functions)g(mak)n
-(e)f(go)r(o)r(d)g(in)n(terp)r(olation)h(k)n(ernels.)39
-b(In)29 b(general,)f(acceptable)g(k)n(ernels)g(tend)h(to)g(b)r(e)427
-1739 y(symmetrical)h(ab)r(out)h(zero,)g(to)g(ha)n(v)n(e)f(a)g(p)r
-(ositiv)n(e)h(p)r(eak)g(\(usually)f(unit)n(y\))i(at)f(zero,)g(and)f(to)
-h(ev)-5 b(aluate)31 b(to)427 1838 y(zero)24 b(whenev)n(er)g(the)h
-(pixel)g(o\013set)g(has)g(an)n(y)f(other)g(in)n(tegral)g(v)-5
-b(alue)25 b(\(this)g(ensures)g(that)g(the)g(in)n(terp)r(olated)427
-1938 y(v)-5 b(alues)26 b(pass)g(through)g(the)g(original)f(data\).)37
-b(An)26 b(in)n(terp)r(olation)g(k)n(ernel)g(ma)n(y)f(or)h(ma)n(y)g(not)
-g(ha)n(v)n(e)f(regions)427 2038 y(with)j(negativ)n(e)f(v)-5
-b(alues.)36 b(Y)-7 b(ou)28 b(should)f(consult)h(a)f(go)r(o)r(d)g(b)r(o)
-r(ok)g(on)g(image)g(pro)r(cessing)f(for)i(more)e(details.)340
-2166 y Fj(\017)45 b Fk(If)29 b(an)g(error)d(o)r(ccurs)i(within)h(this)g
-(routine,)f(it)h(should)g(set)f(the)h(ST)-7 b(A)g(TUS)30
-b(argumen)n(t)d(to)i(an)f(error)f(v)-5 b(alue)427 2265
-y(b)r(efore)34 b(returning.)56 b(This)34 b(will)h(cause)e(an)h
-(immediate)h(return)e(from)h(AST)p Ft(_)p Fk(RESAMPLE)p
-Fm(<)p Fk(X)p Fm(>)p Fk(.)56 b(The)427 2365 y(error)31
-b(v)-5 b(alue)33 b(AST)p Ft(__)p Fk(UK1ER)f(is)h(a)n(v)-5
-b(ailable)32 b(for)g(this)i(purp)r(ose,)g(but)f(other)g(v)-5
-b(alues)33 b(ma)n(y)f(also)g(b)r(e)i(used)427 2464 y(\(e.g.)52
-b(if)33 b(y)n(ou)f(wish)h(to)f(distinguish)h(di\013eren)n(t)f(t)n(yp)r
-(es)h(of)g(error\).)50 b(The)32 b(AST)p Ft(__)p Fk(UK1ER)g(error)e(v)-5
-b(alue)33 b(is)427 2564 y(de\014ned)28 b(in)g(the)g(AST)p
-Ft(_)p Fk(ERR)f(include)h(\014le.)p 0 2753 3780 12 v
-0 2884 a FA(AST)p Fe(_)p FA(UNF)l(ORMA)-11 b(T)1439 2885
-y Fd(Read)38 b(a)h(formatted)1332 2985 y(co)s(ordinate)e(v)-7
-b(alue)38 b(for)g(a)1611 3084 y(F)-10 b(rame)38 b(axis)2646
-2884 y FA(AST)p Fe(_)p FA(UNF)l(ORMA)-11 b(T)0 3244 y
-Fc(Description:)44 b Fk(This)24 b(function)g(reads)e(a)h(formatted)h
-(co)r(ordinate)e(v)-5 b(alue)23 b(\(giv)n(en)g(as)g(a)g(c)n(haracter)f
-(string\))h(for)g(a)g(F)-7 b(rame)227 3344 y(axis)29
-b(and)h(returns)f(the)h(equiv)-5 b(alen)n(t)30 b(n)n(umerical)f
-(\(double)h(precision\))f(v)-5 b(alue.)44 b(It)30 b(also)f(returns)g
-(the)h(n)n(um)n(b)r(er)g(of)227 3444 y(c)n(haracters)c(read)g(from)i
-(the)g(string.)227 3566 y(The)39 b(principle)f(use)g(of)h(this)f
-(function)h(is)g(in)f(deco)r(ding)g(user-supplied)g(input)h(whic)n(h)f
-(con)n(tains)g(formatted)227 3665 y(co)r(ordinate)31
-b(v)-5 b(alues.)49 b(F)-7 b(ree-format)30 b(input)j(is)e(supp)r(orted)h
-(as)f(far)g(as)g(p)r(ossible.)49 b(If)32 b(input)h(is)e(am)n(biguous,)h
-(it)g(is)227 3765 y(in)n(terpreted)h(with)i(reference)d(to)i(the)g(F)-7
-b(rame's)33 b(attributes)h(\(in)g(particular,)g(the)g(F)-7
-b(ormat)33 b(string)g(asso)r(ciated)227 3865 y(with)28
-b(the)g(F)-7 b(rame's)27 b(axis\).)37 b(This)27 b(function)h(is,)g(in)g
-(essence,)f(the)h(in)n(v)n(erse)e(of)h(AST)p Ft(_)p Fk(F)n(ORMA)-7
-b(T.)0 4009 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_UNFORMAT\()38 b(THIS,)k(AXIS,)f(STRING,)g(VALUE,)g(STATUS)g
-(\))0 4154 y Fc(Argumen)m(ts:)259 4285 y(THIS)32 b(=)g(INTEGER)g(\(Giv)
-m(en\))427 4385 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4512 y Fc(AXIS)33 b(=)f(INTEGER)f(\(Giv)m(en\))427
-4612 y Fk(The)j(n)n(um)n(b)r(er)f(of)g(the)h(F)-7 b(rame)33
-b(axis)f(for)h(whic)n(h)g(a)g(co)r(ordinate)f(v)-5 b(alue)34
-b(is)f(to)g(b)r(e)h(read)e(\(axis)h(n)n(um)n(b)r(ering)427
-4712 y(starts)27 b(at)h(1)f(for)g(the)h(\014rst)f(axis\).)259
-4840 y Fc(STRING)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 4939 y Fk(A)h(c)n(haracter)d(string)
-h(con)n(taining)g(the)i(formatted)f(co)r(ordinate)f(v)-5
-b(alue.)50 b(This)32 b(string)f(ma)n(y)h(con)n(tain)f(ad-)427
-5039 y(ditional)h(information)f(follo)n(wing)f(the)i(v)-5
-b(alue)32 b(to)f(b)r(e)h(read,)g(in)g(whic)n(h)f(case)g(reading)f
-(stops)h(at)h(the)g(\014rst)427 5138 y(c)n(haracter)27
-b(whic)n(h)j(cannot)f(b)r(e)g(in)n(terpreted)g(as)g(part)f(of)i(the)f
-(v)-5 b(alue.)42 b(An)n(y)29 b(white)h(space)f(b)r(efore)g(or)f(after)
-427 5238 y(the)g(v)-5 b(alue)28 b(is)f(discarded.)259
-5366 y Fc(V)-11 b(ALUE)33 b(=)f(DOUBLE)h(PRECISION)e(\(Returned\))427
-5466 y Fk(The)d(co)r(ordinate)e(v)-5 b(alue)28 b(read.)259
-5593 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 5693 y Fk(The)c(global)e(status.)p eop
-end
-%%Page: 371 381
-TeXDict begin 371 380 bop 3643 52 a FG(371)0 351 y Fc(Class)31
-b(Applicabilit)m(y:)259 488 y(F)-8 b(rame)427 587 y Fk(This)27
-b(function)h(applies)f(to)g(all)g(F)-7 b(rames.)36 b(See)27
-b(the)h Ft(")p Fk(F)-7 b(rame)26 b(Input)i(F)-7 b(ormat)p
-Ft(")26 b Fk(section)h(b)r(elo)n(w)g(for)g(details)427
-687 y(of)h(the)g(input)g(formats)f(accepted)g(b)n(y)h(a)f(basic)g(F)-7
-b(rame.)259 820 y Fc(SkyF)f(rame)427 919 y Fk(The)35
-b(SkyF)-7 b(rame)34 b(class)f(re-de\014nes)h(the)h(input)g(format)f(to)
-h(b)r(e)g(suitable)f(for)g(represen)n(ting)f(angles)h(and)427
-1019 y(times,)40 b(with)d(the)g(resulting)f(co)r(ordinate)f(v)-5
-b(alue)37 b(returned)f(in)h(radians.)63 b(See)36 b(the)h
-Ft(")p Fk(SkyF)-7 b(rame)36 b(Input)427 1119 y(F)-7 b(ormat)p
-Ft(")27 b Fk(section)g(b)r(elo)n(w)g(for)g(details)h(of)f(the)h
-(formats)f(accepted.)259 1252 y Fc(F)-8 b(rameSet)427
-1351 y Fk(The)26 b(input)g(formats)f(accepted)h(b)n(y)f(a)g(F)-7
-b(rameSet)26 b(are)e(determined)i(b)n(y)f(its)h(curren)n(t)f(F)-7
-b(rame)25 b(\(as)g(sp)r(eci\014ed)427 1451 y(b)n(y)j(the)g(Curren)n(t)e
-(attribute\).)0 1613 y Fc(Returned)32 b(V)-8 b(alue:)259
-1749 y(AST)p Ft(_)p Fc(UNF)m(ORMA)g(T)32 b(=)g(INTEGER)427
-1849 y Fk(The)c(n)n(um)n(b)r(er)f(of)g(c)n(haracters)e(read)h(from)h
-(the)h(string)f(in)g(order)f(to)h(obtain)g(the)h(co)r(ordinate)e(v)-5
-b(alue.)37 b(This)427 1948 y(will)28 b(include)g(an)n(y)f(white)h
-(space)f(whic)n(h)g(o)r(ccurs)g(b)r(efore)g(or)g(after)g(the)h(v)-5
-b(alue.)0 2110 y Fc(Notes:)340 2393 y Fj(\017)45 b Fk(A)37
-b(function)f(v)-5 b(alue)36 b(of)g(zero)f(\(and)h(no)g(co)r(ordinate)f
-(v)-5 b(alue\))36 b(will)h(b)r(e)f(returned,)i(without)e(error,)h(if)f
-(the)427 2493 y(string)27 b(supplied)h(do)r(es)f(not)h(con)n(tain)f(a)g
-(suitably)g(formatted)h(v)-5 b(alue.)340 2625 y Fj(\017)45
-b Fk(Bew)n(are)20 b(that)h(it)g(is)g(p)r(ossible)g(for)g(a)f
-(formatting)h(error)e(part-w)n(a)n(y)g(through)h(an)h(input)g(string)g
-(to)g(terminate)427 2725 y(input)29 b(b)r(efore)e(it)h(has)f(b)r(een)h
-(completely)f(read,)g(but)h(to)g(yield)f(a)g(co)r(ordinate)g(v)-5
-b(alue)27 b(that)h(app)r(ears)f(v)-5 b(alid.)427 2825
-y(F)e(or)24 b(example,)g(if)h(a)f(user)f(t)n(yp)r(es)h
-Ft(")p Fk(1.5R6)p Ft(")e Fk(instead)i(of)g Ft(")p Fk(1.5E6)p
-Ft(")p Fk(,)e(the)j Ft(")p Fk(R)p Ft(")e Fk(will)i(terminate)f(input,)h
-(giving)427 2924 y(an)h(incorrect)f(co)r(ordinate)g(v)-5
-b(alue)26 b(of)h(1.5.)35 b(It)27 b(is)f(therefore)f(most)h(imp)r(ortan)
-n(t)g(to)g(c)n(hec)n(k)f(the)i(return)f(v)-5 b(alue)427
-3024 y(of)28 b(this)g(function)g(to)f(ensure)g(that)h(the)g(correct)e
-(n)n(um)n(b)r(er)i(of)f(c)n(haracters)f(ha)n(v)n(e)g(b)r(een)i(read.)
-340 3157 y Fj(\017)45 b Fk(An)33 b(error)e(will)h(result)g(if)h(a)f(v)
--5 b(alue)33 b(is)f(read)g(whic)n(h)g(app)r(ears)f(to)h(ha)n(v)n(e)g
-(the)g(correct)f(format,)j(but)f(whic)n(h)427 3256 y(cannot)d(b)r(e)g
-(con)n(v)n(erted)f(in)n(to)h(a)g(v)-5 b(alid)30 b(co)r(ordinate)f(v)-5
-b(alue)30 b(\(for)g(instance,)g(b)r(ecause)g(the)h(v)-5
-b(alue)30 b(of)g(one)f(or)427 3356 y(more)e(of)h(its)f(\014elds)h(is)f
-(in)n(v)-5 b(alid\).)340 3489 y Fj(\017)45 b Fk(The)e(string)f
-Ft(")p Fm(<)p Fk(bad)p Fm(>)p Ft(")e Fk(is)j(recognised)d(as)i(a)g(sp)r
-(ecial)g(case)g(and)g(will)h(yield)g(the)f(co)r(ordinate)g(v)-5
-b(alue)427 3588 y(AST)p Ft(__)p Fk(BAD)32 b(without)f(error.)47
-b(The)31 b(test)h(for)f(this)g(string)g(is)g(case-insensitiv)n(e)f(and)
-h(also)f(p)r(ermits)i(em-)427 3688 y(b)r(edded)d(white)f(space.)340
-3821 y Fj(\017)45 b Fk(A)33 b(function)f(result)g(of)g(zero)f(will)h(b)
-r(e)h(returned)e(and)h(no)g(co)r(ordinate)f(v)-5 b(alue)31
-b(will)i(b)r(e)f(returned)g(via)f(the)427 3921 y(V)-9
-b(ALUE)25 b(argumen)n(t)f(if)h(this)g(function)g(is)g(in)n(v)n(ok)n(ed)
-e(with)i(the)g(AST)g(error)e(status)i(set,)g(or)f(if)h(it)g(should)g
-(fail)427 4020 y(for)i(an)n(y)g(reason.)-2 4182 y Fc(F)-8
-b(rame)32 b(Input)h(F)-8 b(ormat)n(:)227 4328 y Fk(The)28
-b(input)g(format)f(accepted)h(for)f(a)g(basic)g(F)-7
-b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)340 4465 y Fj(\017)45
-b Fk(An)28 b(optional)f(sign,)g(follo)n(w)n(ed)g(b)n(y:)340
-4598 y Fj(\017)45 b Fk(A)28 b(sequence)f(of)h(one)f(or)g(more)g(digits)
-g(p)r(ossibly)g(con)n(taining)g(a)g(decimal)g(p)r(oin)n(t,)h(follo)n(w)
-n(ed)f(b)n(y:)340 4730 y Fj(\017)45 b Fk(An)28 b(optional)f(exp)r(onen)
-n(t)h(\014eld.)340 4863 y Fj(\017)45 b Fk(The)28 b(exp)r(onen)n(t)f
-(\014eld,)h(if)g(presen)n(t,)f(consists)g(of)h Ft(")p
-Fk(E)p Ft(")e Fk(or)h Ft(")p Fk(e)p Ft(")g Fk(follo)n(w)n(ed)f(b)n(y)h
-(a)h(p)r(ossibly)f(signed)g(in)n(teger.)227 5025 y(Examples)g(of)g
-(acceptable)g(F)-7 b(rame)27 b(input)i(formats)d(include:)340
-5162 y Fj(\017)45 b Fk(99)340 5294 y Fj(\017)g Fk(1.25)340
-5427 y Fj(\017)g Fk(-1.6)340 5560 y Fj(\017)g Fk(1E8)340
-5693 y Fj(\017)g Fk(-.99e-17)p eop end
-%%Page: 372 382
-TeXDict begin 372 381 bop 0 52 a FG(372)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fm(<)p Fk(bad)p Fm(>)-2 525 y Fc(SkyF)-8 b(rame)33
-b(Input)g(F)-8 b(ormat)n(:)227 671 y Fk(The)28 b(input)g(format)f
-(accepted)h(for)f(a)g(SkyF)-7 b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)
-340 819 y Fj(\017)45 b Fk(An)32 b(optional)e(sign,)i(follo)n(w)n(ed)e
-(b)n(y)g(b)r(et)n(w)n(een)h(one)g(and)g(three)g(\014elds)g(represen)n
-(ting)e(either)i(degrees,)g(arc-)427 918 y(min)n(utes,)d(arc-seconds)d
-(or)i(hours,)g(min)n(utes,)h(seconds)e(\(e.g.)37 b Ft(")p
-Fk(-12)26 b(42)h(03)p Ft(")p Fk(\).)340 1057 y Fj(\017)45
-b Fk(Eac)n(h)22 b(\014eld)h(should)f(consist)g(of)h(a)f(sequence)h(of)f
-(one)h(or)f(more)f(digits,)j(whic)n(h)f(ma)n(y)f(include)h(leading)f
-(zeros.)427 1157 y(A)n(t)29 b(most)f(one)g(\014eld)h(ma)n(y)e(con)n
-(tain)h(a)g(decimal)g(p)r(oin)n(t,)h(in)f(whic)n(h)g(case)g(it)h(is)f
-(tak)n(en)f(to)i(b)r(e)f(the)h(\014nal)f(\014eld)427
-1256 y(\(e.g.)55 b(decimal)34 b(degrees)e(migh)n(t)i(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fk(124.707)p Ft(")p Fk(,)f(while)h(degrees)g(and)g
-(decimal)h(arc-min)n(utes)427 1356 y(migh)n(t)28 b(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fk(-13)e(33.8)p Ft(")p Fk(\).)340 1495 y
-Fj(\017)45 b Fk(The)29 b(\014rst)g(\014eld)g(giv)n(en)g(ma)n(y)f(tak)n
-(e)g(an)n(y)g(v)-5 b(alue,)30 b(allo)n(wing)d(angles)h(and)h(times)g
-(outside)g(the)h(con)n(v)n(en)n(tional)427 1594 y(ranges)g(to)h(b)r(e)g
-(represen)n(ted.)46 b(Ho)n(w)n(ev)n(er,)30 b(subsequen)n(t)h(\014elds)g
-(m)n(ust)g(ha)n(v)n(e)f(v)-5 b(alues)31 b(of)g(less)f(than)i(60)e
-(\(e.g.)427 1694 y Ft(")p Fk(720)c(45)h(31)p Ft(")f Fk(is)i(v)-5
-b(alid,)27 b(whereas)g Ft(")p Fk(11)f(45)h(61)p Ft(")f
-Fk(is)h(not\).)340 1832 y Fj(\017)45 b Fk(Fields)30 b(ma)n(y)g(b)r(e)g
-(separated)f(b)n(y)h(white)g(space)f(or)g(b)n(y)h Ft(")p
-Fk(:)p Ft(")f Fk(\(colon\),)i(but)f(the)h(c)n(hoice)e(of)h(separator)d
-(m)n(ust)427 1932 y(b)r(e)34 b(used)f(consisten)n(tly)f(throughout)h
-(the)g(v)-5 b(alue.)53 b(Additional)33 b(white)h(space)e(ma)n(y)h(b)r
-(e)g(presen)n(t)g(around)427 2032 y(\014elds)28 b(and)f(separators)e
-(\(e.g.)37 b Ft(")p Fk(-)27 b(2:)37 b(04)26 b(:)37 b(7.1)p
-Ft(")p Fk(\).)340 2170 y Fj(\017)45 b Fk(The)35 b(follo)n(wing)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)e(ma)n(y)h(b)r(e)i(used)
-f(as)g(separators)e(to)i(replace)f(either)i(of)427 2270
-y(those)d(ab)r(o)n(v)n(e)f(\(or)h(ma)n(y)f(b)r(e)i(app)r(ended)g(to)f
-(the)h(\014nal)f(\014eld\),)i(in)e(order)f(to)h(iden)n(tify)h(the)g
-(\014eld)g(to)f(whic)n(h)427 2370 y(they)g(are)e(app)r(ended:)45
-b Ft(")p Fk(d)p Ft(")p Fk(|degrees;)32 b Ft(")p Fk(h)p
-Ft(")p Fk(|hours;)f Ft(")p Fk(m)p Ft(")p Fk(|min)n(utes)g(of)h(arc)e
-(or)h(time;)j Ft(")p Fk(s)p Ft(")p Fk(|seconds)427 2469
-y(of)24 b(arc)f(or)g(time;)i Ft(")p Fk(')p Ft(")f Fk(\(single)f
-(quote\)|min)n(utes)h(of)g(arc;)g Ft(""")f Fk(\(double)h
-(quote\)|seconds)f(of)h(arc.)34 b(Either)427 2569 y(lo)n(w)n(er)e(or)h
-(upp)r(er)h(case)f(ma)n(y)g(b)r(e)h(used.)56 b(Fields)33
-b(m)n(ust)h(b)r(e)g(giv)n(en)f(in)h(order)f(of)g(decreasing)g
-(signi\014cance)427 2668 y(\(e.g.)k Ft(")p Fk(-11D)26
-b(3')i(14.4)p Ft("")d Fk(or)i Ft(")p Fk(22h14m11.2s)p
-Ft(")p Fk(\).)340 2807 y Fj(\017)45 b Fk(The)22 b(presence)e(of)h(an)n
-(y)g(of)g(the)h(\014eld)f(iden)n(ti\014cation)g(c)n(haracters)e
-Ft(")p Fk(d)p Ft(")p Fk(,)j Ft(")p Fk(')p Ft(")f Fk(\(single)g(quote\))
-g(or)f Ft(""")g Fk(\(double)427 2907 y(quote\))g(indicates)f(that)h
-(the)f(v)-5 b(alue)20 b(is)f(to)g(b)r(e)h(in)n(terpreted)f(as)g(an)g
-(angle.)33 b(Con)n(v)n(ersely)-7 b(,)19 b(the)h(presence)f(of)g
-Ft(")p Fk(h)p Ft(")427 3006 y Fk(indicates)27 b(that)h(it)f(is)g(to)g
-(b)r(e)h(in)n(terpreted)e(as)h(a)g(time)g(\(with)h(24)e(hours)h
-(corresp)r(onding)e(to)i(360)f(degrees\).)427 3106 y(Incompatible)j
-(angle/time)f(iden)n(ti\014cation)h(c)n(haracters)d(ma)n(y)j(not)f(b)r
-(e)i(mixed)f(\(e.g.)40 b Ft(")p Fk(10h14'3)p Ft("")26
-b Fk(is)j(not)427 3206 y(v)-5 b(alid\).)35 b(The)21 b(remaining)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)f(and)h(separators)e(do)
-i(not)h(sp)r(ecify)f(a)g(preference)427 3305 y(for)27
-b(an)h(angle)e(or)h(a)g(time)h(and)g(ma)n(y)f(b)r(e)h(used)f(with)h
-(either.)340 3444 y Fj(\017)45 b Fk(If)23 b(no)f(preference)f(for)h(an)
-g(angle)f(or)h(a)g(time)g(is)h(expressed)e(an)n(ywhere)f(within)j(the)g
-(v)-5 b(alue,)23 b(it)g(is)f(in)n(terpreted)427 3543
-y(as)33 b(an)g(angle)g(if)h(the)g(F)-7 b(ormat)33 b(attribute)h(string)
-e(asso)r(ciated)h(with)h(the)f(SkyF)-7 b(rame)33 b(axis)g(generates)f
-(an)427 3643 y(angle)i(and)h(as)f(a)g(time)h(otherwise.)57
-b(This)35 b(ensures)f(that)h(v)-5 b(alues)34 b(pro)r(duced)h(b)n(y)f
-(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T)35 b(are)427 3743 y(correctly)26
-b(in)n(terpreted)h(b)n(y)h(AST)p Ft(_)p Fk(UNF)n(ORMA)-7
-b(T.)340 3881 y Fj(\017)45 b Fk(Fields)37 b(ma)n(y)g(b)r(e)g(omitted,)j
-(in)d(whic)n(h)g(case)f(they)h(default)h(to)f(zero.)64
-b(The)37 b(remaining)f(\014elds)h(ma)n(y)f(b)r(e)427
-3981 y(iden)n(ti\014ed)e(b)n(y)f(using)g(appropriate)f(\014eld)h(iden)n
-(ti\014cation)h(c)n(haracters)d(\(see)i(ab)r(o)n(v)n(e\))f(and/or)g(b)n
-(y)h(adding)427 4081 y(extra)28 b(colon)g(separators)f(\(e.g.)40
-b Ft(")p Fk(-05m13s)p Ft(")26 b Fk(is)i(equiv)-5 b(alen)n(t)29
-b(to)g Ft(")p Fk(-:05:13)p Ft(")p Fk(\).)38 b(If)29 b(a)f(\014eld)i(is)
-e(not)h(iden)n(ti\014ed)427 4180 y(explicitly)-7 b(,)40
-b(it)e(is)g(assumed)e(that)i(adjacen)n(t)f(\014elds)g(ha)n(v)n(e)g(b)r
-(een)h(giv)n(en,)h(after)e(taking)f(accoun)n(t)h(of)g(an)n(y)427
-4280 y(extra)31 b(separator)e(c)n(haracters)h(\(e.g.)49
-b Ft(")p Fk(14:25.4s)p Ft(")28 b Fk(sp)r(eci\014es)k(min)n(utes)g(and)f
-(seconds,)h(while)g Ft(")p Fk(14::25.4s)p Ft(")427 4379
-y Fk(sp)r(eci\014es)c(degrees)e(and)h(seconds\).)340
-4518 y Fj(\017)45 b Fk(If)37 b(\014elds)g(are)f(omitted)h(in)g(suc)n(h)
-f(a)g(w)n(a)n(y)g(that)g(the)h(remaining)f(ones)g(cannot)g(b)r(e)h
-(iden)n(ti\014ed)h(uniquely)427 4618 y(\(e.g.)69 b Ft(")p
-Fk(01:02)p Ft(")p Fk(\),)38 b(then)h(the)f(\014rst)g(\014eld)g
-(\(either)h(giv)n(en)e(explicitly)h(or)g(implied)g(b)n(y)g(an)g(extra)f
-(leading)427 4717 y(colon)25 b(separator\))f(is)h(tak)n(en)g(to)g(b)r
-(e)h(the)g(most)g(signi\014can)n(t)f(\014eld)g(that)h(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)26 b(w)n(ould)f(pro)r(duce)427
-4817 y(when)36 b(formatting)e(a)h(v)-5 b(alue)35 b(\(using)g(the)h(F)-7
-b(ormat)34 b(attribute)i(asso)r(ciated)d(with)j(the)g(SkyF)-7
-b(rame)34 b(axis\).)427 4917 y(By)e(default,)i(this)e(means)f(that)i
-(the)f(\014rst)g(\014eld)g(will)g(normally)f(b)r(e)i(in)n(terpreted)e
-(as)h(degrees)e(or)h(hours.)427 5016 y(Ho)n(w)n(ev)n(er,)j(if)h(this)f
-(do)r(es)g(not)g(result)g(in)g(consisten)n(t)g(\014eld)g(iden)n
-(ti\014cation,)i(then)f(the)f(last)g(\014eld)g(\(either)427
-5116 y(giv)n(en)f(explicitly)g(or)g(implied)h(b)n(y)f(an)g(extra)g
-(trailing)g(colon)f(separator\))g(is)h(tak)n(en)g(to)g(to)g(b)r(e)h
-(the)g(least)427 5215 y(signi\014can)n(t)27 b(\014eld)h(that)g(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)27 b(w)n(ould)h(pro)r(duce.)227
-5389 y(This)23 b(\014nal)g(con)n(v)n(en)n(tion)f(is)h(in)n(tended)g(to)
-g(ensure)g(that)g(v)-5 b(alues)23 b(formatted)f(b)n(y)h(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)23 b(whic)n(h)g(con)n(tain)227
-5489 y(less)33 b(than)g(three)f(\014elds)h(will)g(b)r(e)h(correctly)d
-(in)n(terpreted)h(if)i(read)e(bac)n(k)g(using)g(AST)p
-Ft(_)p Fk(UNF)n(ORMA)-7 b(T,)34 b(ev)n(en)e(if)227 5588
-y(they)c(do)f(not)h(con)n(tain)f(\014eld)h(iden)n(ti\014cation)f(c)n
-(haracters.)227 5718 y(Examples)g(of)g(acceptable)g(SkyF)-7
-b(rame)27 b(input)h(formats)f(\(with)i(in)n(terpretation)d(in)i(paren)n
-(theses\))f(include:)p eop end
-%%Page: 373 383
-TeXDict begin 373 382 bop 3643 52 a FG(373)340 351 y
-Fj(\017)45 b Fk(-14d)27 b(13m)g(22.2s)f(\(-14d)g(13')h(22.2)p
-Ft(")p Fk(\))340 500 y Fj(\017)45 b Fk(+)28 b(12:34:56.7)c(\(12d)j(34')
-g(56.7)p Ft(")f Fk(or)g(12h)h(34m)g(56.7s\))340 649 y
-Fj(\017)45 b Fk(001)26 b(:)37 b(02)27 b(:)37 b(03.4)26
-b(\(1d)i(02')f(03.4)p Ft(")f Fk(or)g(1h)i(02m)e(03.4s\))340
-799 y Fj(\017)45 b Fk(22h)27 b(30)g(\(22h)g(30m)g(00s\))340
-948 y Fj(\017)45 b Fk(136::10)p Ft(")25 b Fk(\(136d)i(00')g(10)p
-Ft(")f Fk(or)h(136h)f(00m)h(10s\))340 1097 y Fj(\017)45
-b Fk(-14M)27 b(27S)g(\(-0d)g(14')g(27)p Ft(")f Fk(or)h(-0h)g(14m)f
-(27s\))340 1246 y Fj(\017)45 b Fk(-:14:)36 b(\(-0d)27
-b(14')g(00)p Ft(")f Fk(or)h(-0h)g(14m)g(00s\))340 1395
-y Fj(\017)45 b Fk(-::4.1)27 b(\(-0d)g(00')g(04.1)p Ft(")f
-Fk(or)g(-0h)h(00m)g(04.1s\))340 1544 y Fj(\017)45 b Fk(.9)p
-Ft(")27 b Fk(\(0d)h(00')e(00.9)p Ft(")p Fk(\))340 1693
-y Fj(\017)45 b Fk(d12m)27 b(\(0d)h(12')f(00)p Ft(")p
-Fk(\))340 1842 y Fj(\017)45 b Fk(H)28 b(12:22.3s)d(\(0h)j(12m)f
-(22.3s\))340 1992 y Fj(\017)45 b Fm(<)p Fk(bad)p Fm(>)27
-b Fk(\(AST)p Ft(__)p Fk(BAD\))227 2186 y(Where)e(alternativ)n(e)e(in)n
-(terpretations)g(are)h(sho)n(wn,)g(the)h(c)n(hoice)f(of)g(angle)g(or)g
-(time)h(dep)r(ends)g(on)f(the)h(asso)r(ciated)227 2286
-y(F)-7 b(ormat\(axis\))27 b(attribute.)p 0 2517 3780
-12 v 0 2648 a FA(AST)p Fe(_)p FA(UNITMAP)415 b Fd(Create)37
-b(a)h(UnitMap)416 b FA(AST)p Fe(_)p FA(UNITMAP)0 2869
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(UnitMap)i(and)e(optionally)g(initialises)g(its)h(attributes.)227
-3010 y(A)f(UnitMap)f(is)g(a)f(unit)i(\(n)n(ull\))f(Mapping)g(that)g
-(has)g(no)f(e\013ect)i(on)e(the)i(co)r(ordinates)d(supplied)i(to)g(it.)
-37 b(They)26 b(are)227 3110 y(simply)32 b(copied.)47
-b(This)31 b(can)g(b)r(e)g(useful)h(if)g(a)f(Mapping)f(is)h(required)g
-(\(e.g.)47 b(to)31 b(pass)g(to)g(another)f(routine\))h(but)227
-3209 y(y)n(ou)c(do)g(not)h(w)n(an)n(t)f(it)h(to)f(ha)n(v)n(e)g(an)n(y)g
-(e\013ect.)0 3391 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_UNITMAP\()c(NCOORD,)h(OPTIONS,)h(STATUS)g(\))0
-3573 y Fc(Argumen)m(ts:)259 3742 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 3842 y Fk(The)d(n)n(um)n(b)r(er)f(of)h(input)g(and)g(output)g
-(co)r(ordinates)e(\(these)i(n)n(um)n(b)r(ers)f(are)g(necessarily)f(the)
-h(same\).)259 3991 y Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-4091 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 4190 y(used)k(for)f(initialising)h(the)g(new)f(UnitMap.)37
-b(The)25 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)g(for)f
-(the)h(AST)p Ft(_)p Fk(SET)427 4290 y(routine.)259 4439
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4539 y Fk(The)c(global)e(status.)0 4733 y Fc(Returned)32
-b(V)-8 b(alue:)259 4902 y(AST)p Ft(_)p Fc(UNITMAP)33
-b(=)f(INTEGER)427 5002 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(UnitMap.)0 5196 y Fc(Notes:)340 5511 y Fj(\017)45 b
-Fk(A)21 b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 5611
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 374 384
-TeXDict begin 374 383 bop 0 52 a FG(374)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)p 0 351 3780 12
-v 0 482 a FA(AST)p Fe(_)p FA(VERSION)1105 483 y Fd(Return)38
-b(the)h(v)m(ersion)e(of)i(the)f(AST)1428 583 y(library)e(b)s(eing)j
-(used)2827 482 y FA(AST)p Fe(_)p FA(VERSION)0 771 y Fc(Description:)44
-b Fk(This)30 b(function)h(returns)e(an)g(in)n(teger)g(represen)n(ting)f
-(the)j(v)n(ersion)d(of)i(the)g(AST)g(library)f(b)r(eing)h(used.)227
-870 y(The)i(library)f(v)n(ersion)g(is)g(formatted)h(as)g(a)f(string)h
-(suc)n(h)f(as)h Ft(")p Fk(2.0-7)p Ft(")d Fk(whic)n(h)j(con)n(tains)f
-(in)n(tegers)g(represen)n(ting)227 970 y(the)h Ft(")p
-Fk(ma)5 b(jor)29 b(v)n(ersion)p Ft(")g Fk(\(2\),)j(the)g
-Ft(")p Fk(minor)e(v)n(ersion)p Ft(")f Fk(\(0\))i(and)g(the)g
-Ft(")p Fk(release)p Ft(")e Fk(\(7\).)47 b(The)31 b(in)n(teger)f
-(returned)h(b)n(y)227 1069 y(this)d(function)g(com)n(bines)f(all)h
-(three)f(in)n(tegers)f(together)h(in)n(to)g(a)h(single)f(in)n(teger)f
-(using)i(the)g(expresion:)227 1194 y(\(ma)5 b(jor)27
-b(v)n(ersion\))p Fj(\003)p Fk(1E6)d(+)k(\(minor)f(v)n(ersion\))p
-Fj(\003)p Fk(1E3)d(+)k(\(release\))0 1343 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_VERSION\(\))0 1492 y Fc(Class)31
-b(Applicabilit)m(y:)259 1628 y(Ob)5 b(ject)427 1727 y
-Fk(This)28 b(routine)f(applies)g(to)h(all)f(Ob)5 b(jects.)0
-1889 y Fc(Returned)32 b(V)-8 b(alue:)259 2025 y(AST)p
-Ft(_)p Fc(VERSION)31 b(=)h(INTEGER)427 2125 y Fk(The)37
-b(ma)5 b(jor)35 b(v)n(ersion,)j(minor)e(v)n(ersion)f(and)h(release)g(n)
-n(um)n(b)r(ers)g(for)g(the)h(AST)g(library)-7 b(,)37
-b(enco)r(ded)g(as)f(a)427 2224 y(single)27 b(in)n(teger.)p
-0 2423 V 0 2553 a FA(AST)p Fe(_)p FA(W)-15 b(ARNINGS)231
-b Fd(Returns)38 b(an)m(y)g(w)m(arnings)1321 2667 y(issued)h(b)m(y)g
-(the)g(previous)1296 2782 y(read)f(or)h(write)e(op)s(eration)2681
-2553 y FA(AST)p Fe(_)p FA(W)-15 b(ARNINGS)0 2970 y Fc(Description:)44
-b Fk(This)28 b(function)f(returns)g(an)g(AST)h(KeyMap)e(ob)5
-b(ject)27 b(holding)g(the)g(text)h(of)f(an)n(y)g(w)n(arnings)e(issued)i
-(as)227 3070 y(a)i(result)g(of)g(the)g(previous)f(in)n(v)n(o)r(cation)g
-(of)h(the)h(AST)p Ft(_)p Fk(READ)f(or)g(AST)p Ft(_)p
-Fk(WRITE)g(function)g(on)g(the)h(Channel.)227 3169 y(If)e(no)g(w)n
-(arnings)e(w)n(ere)g(issued,)i(a)f(AST)p Ft(__)p Fk(NULL)g(will)h(b)r
-(e)g(returned.)227 3294 y(Suc)n(h)d(w)n(arnings)e(are)h(non-fatal)g
-(and)g(will)h(not)g(prev)n(en)n(t)f(the)h(read)e(or)h(write)h(op)r
-(eration)e(succeeding.)36 b(Ho)n(w)n(ev)n(er,)227 3393
-y(the)29 b(con)n(v)n(erted)f(ob)5 b(ject)28 b(ma)n(y)g(not)h(b)r(e)g
-(iden)n(tical)f(to)h(the)g(original)e(ob)5 b(ject)28
-b(in)h(all)f(resp)r(ects.)40 b(Di\013erences)29 b(whic)n(h)227
-3493 y(w)n(ould)23 b(usually)f(b)r(e)h(deemed)g(as)f(insigni\014can)n
-(t)h(in)g(most)f(usual)h(cases)e(will)j(generate)d(a)h(w)n(arning,)h
-(whereas)e(more)227 3592 y(signi\014can)n(t)27 b(di\013erences)g(will)h
-(generate)e(an)i(error.)227 3717 y(The)d Ft(")p Fk(Strict)p
-Ft(")f Fk(attribute)h(allo)n(ws)e(this)i(w)n(arning)e(facilit)n(y)i(to)
-g(b)r(e)g(switc)n(hed)f(o\013,)i(so)e(that)g(a)h(fatal)f(error)f(is)i
-(alw)n(a)n(ys)227 3816 y(rep)r(orted)i(for)g(an)n(y)g(con)n(v)n(ersion)
-e(error.)0 3965 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_WARNINGS\()38 b(THIS,)k(STATUS)f(\))0 4114
-y Fc(Argumen)m(ts:)259 4250 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m(en\))427
-4350 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)259
-4483 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 4582 y Fk(The)c(global)e(status.)0 4744
-y Fc(Class)31 b(Applicabilit)m(y:)259 4880 y(Channel)427
-4979 y Fk(The)25 b(basic)f(Channel)h(class)f(generates)f(a)h(w)n
-(arning)g(when)g(ev)n(er)g(an)h(un-recognised)e(item)i(is)f(encoun)n
-(tered)427 5079 y(whilst)32 b(reading)f(an)g(Ob)5 b(ject)32
-b(from)f(an)g(external)g(data)g(source.)48 b(If)32 b(Strict)g(is)g
-(zero)e(\(the)j(default\),)g(then)427 5178 y(unexp)r(ected)28
-b(items)f(in)g(the)g(Ob)5 b(ject)27 b(description)g(are)f(simply)h
-(ignored,)e(and)i(an)n(y)f(remaining)g(items)i(are)427
-5278 y(used)h(to)g(construct)g(the)g(returned)f(Ob)5
-b(ject.)41 b(If)30 b(Strict)f(is)g(non-zero,)f(an)g(error)f(will)j(b)r
-(e)f(rep)r(orted)f(and)h(a)427 5378 y(NULL)f(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(returned)g(if)h(an)n(y)f(unexp)r(ected)h(items)g(are)
-f(encoun)n(tered.)427 5494 y(As)f(AST)g(con)n(tin)n(ues)f(to)h(b)r(e)g
-(dev)n(elop)r(ed,)g(new)g(attributes)f(are)g(added)h(o)r(ccasionally)e
-(to)h(selected)h(classes.)427 5593 y(If)35 b(an)f(older)f(v)n(ersion)g
-(of)h(AST)h(is)f(used)g(to)g(read)f(external)h(Ob)5 b(ject)34
-b(descriptions)f(created)h(b)n(y)g(a)f(more)427 5693
-y(recen)n(t)20 b(v)n(ersion)f(of)i(AST,)g(then)g(the)g(Channel)f(class)
-g(will,)i(b)n(y)f(default,)h(ignore)d(the)i(new)g(attributes,)h(using)p
-eop end
-%%Page: 375 385
-TeXDict begin 375 384 bop 3643 52 a FG(375)427 351 y
-Fk(the)35 b(remaining)e(attributes)h(to)h(construct)e(the)i(Ob)5
-b(ject.)57 b(This)34 b(is)g(usually)g(a)g(go)r(o)r(d)f(thing.)58
-b(Ho)n(w)n(ev)n(er,)427 451 y(since)32 b(external)f(Ob)5
-b(ject)32 b(descriptions)f(are)g(often)h(stored)f(in)i(plain)f(text,)h
-(it)f(is)g(p)r(ossible)g(to)g(edit)g(them)427 551 y(using)37
-b(a)g(text)h(editor.)65 b(This)37 b(giv)n(es)f(rise)h(to)g(the)h(p)r
-(ossibilit)n(y)f(of)g(gen)n(uine)g(errors)e(in)j(the)f(description)427
-650 y(due)25 b(to)g(\014nger-slips,)f(t)n(yp)r(os,)i(or)e(simple)h
-(mis-understanding.)35 b(Suc)n(h)25 b(inappropriate)e(attributes)i
-(will)g(b)r(e)427 750 y(ignored)k(if)h(Strict)g(is)g(left)g(at)g(its)g
-(default)g(zero)f(v)-5 b(alue.)43 b(This)30 b(will)g(cause)f(the)h
-(mis-sp)r(elled)g(attribute)g(to)427 849 y(rev)n(ert)c(to)h(its)g
-(default)g(v)-5 b(alue,)27 b(p)r(oten)n(tially)g(causing)f(subtle)h(c)n
-(hanges)f(in)h(the)h(b)r(eha)n(viour)d(of)i(application)427
-949 y(soft)n(w)n(are.)38 b(If)29 b(suc)n(h)f(an)g(e\013ect)h(is)g(susp)
-r(ected,)g(the)g(Strict)f(attribute)h(can)f(b)r(e)h(set)f(non-zero,)f
-(resulting)h(in)427 1049 y(the)g(erroneous)e(attribute)i(b)r(eing)f
-(iden)n(ti\014ed)h(in)g(an)f(error)f(message.)259 1181
-y Fc(FitsChan)427 1281 y Fk(The)20 b(returned)e(KeyMap)h(will)g(con)n
-(tain)g(w)n(arnings)f(for)g(all)h(conditions)g(listed)h(in)f(the)h(W)-7
-b(arnings)18 b(attribute.)259 1413 y Fc(XmlChan)427 1513
-y Fk(Rep)r(orts)27 b(con)n(v)n(ersion)f(errors)f(that)j(result)f(in)h
-(what)g(are)e(usally)h(insigni\014can)n(t)g(c)n(hanges.)0
-1675 y Fc(Returned)32 b(V)-8 b(alue:)259 1811 y(AST)p
-Ft(_)p Fc(W)d(ARNINGS)32 b(=)g(INTEGER)427 1910 y Fk(A)24
-b(p)r(oin)n(ter)g(to)g(the)g(KeyMap)f(holding)g(the)h(w)n(arning)f
-(messages,)g(or)g(AST)p Ft(__)p Fk(NULL)h(if)g(no)f(w)n(arnings)g(w)n
-(ere)427 2010 y(issued)28 b(during)f(the)h(previous)e(read)h(op)r
-(eration.)0 2171 y Fc(Notes:)340 2454 y Fj(\017)45 b
-Fk(The)28 b(returned)f(KeyMap)g(uses)g(k)n(eys)g(of)g(the)h(form)f
-Ft(")p Fk(W)-7 b(arning)p Ft(_)p Fk(1)p Ft(")p Fk(,)26
-b Ft(")p Fk(W)-7 b(arning)p Ft(_)p Fk(2)p Ft(")p Fk(,)25
-b(etc.)340 2586 y Fj(\017)45 b Fk(A)30 b(v)-5 b(alue)29
-b(of)g(AST)p Ft(__)p Fk(NULL)h(will)f(b)r(e)h(returned)f(if)h(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7 b(A)g(TUS)30
-b(set)g(to)f(an)427 2686 y(error)d(v)-5 b(alue,)27 b(or)g(if)h(it)g
-(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 2884 3780
-12 v 0 3015 a FA(AST)p Fe(_)p FA(W)l(CSMAP)466 b Fd(Create)37
-b(a)h(WcsMap)469 b FA(AST)p Fe(_)p FA(W)l(CSMAP)0 3203
-y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(WcsMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-3327 y(A)g(WcsMap)g(is)f(used)h(to)g(represen)n(t)e(sky)h(co)r
-(ordinate)g(pro)5 b(jections)26 b(as)h(describ)r(ed)h(in)f(the)i
-(\(draft\))f(FITS)g(w)n(orld)227 3427 y(co)r(ordinate)20
-b(system)g(\(FITS-W)n(CS\))h(pap)r(er)f(b)n(y)g(E.W.)h(Griesen)f(and)g
-(M.)h(Calabretta)e(\(A)i(&)f(A,)h(in)g(preparation\).)227
-3527 y(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h(of)f(functions,)h(or)
-f(sky)g(pro)5 b(jections,)28 b(whic)n(h)h(transform)e
-(longitude-latitude)i(pairs)227 3626 y(represen)n(ting)d(spherical)h
-(celestial)g(co)r(ordinates)f(in)n(to)h(corresp)r(onding)f(pairs)h(of)g
-(Cartesian)f(co)r(ordinates)g(\(and)227 3726 y(vice)i(v)n(ersa\).)227
-3850 y(A)j(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5 b(jections)29
-b(and)h(applies)227 3950 y(them)25 b(to)g(a)f(sp)r(eci\014ed)h(pair)f
-(of)g(co)r(ordinates.)35 b(All)25 b(the)g(pro)5 b(jections)23
-b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g(supp)r(orted,)227
-4049 y(plus)32 b(the)f(no)n(w)g(deprecated)f Ft(")p Fk(T)-7
-b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fk(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-4149 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fk(TPN)p
-Ft(")p Fk(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fk(nativ)n(e)227 4249 y(spherical)p Ft(")32 b
-Fk(and)g Ft(")p Fk(pro)5 b(jection)31 b(plane)p Ft(")h
-Fk(co)r(ordinates.)51 b(These)32 b(co)r(ordinates)g(ma)n(y)-7
-b(,)33 b(optionally)-7 b(,)33 b(b)r(e)g(em)n(b)r(edded)227
-4348 y(in)j(a)f(space)g(with)h(more)f(than)h(t)n(w)n(o)f(dimensions,)i
-(the)f(remaining)f(co)r(ordinates)f(b)r(eing)i(copied)f(unc)n(hanged.)
-227 4448 y(Note,)27 b(ho)n(w)n(ev)n(er,)d(that)j(for)f(consistency)f
-(with)i(other)e(AST)i(facilities,)g(a)f(WcsMap)g(handles)g(co)r
-(ordinates)e(that)227 4548 y(represen)n(t)j(angles)f(in)i(radians)e
-(\(rather)h(than)h(the)g(degrees)e(used)i(b)n(y)f(FITS-W)n(CS\).)227
-4672 y(The)32 b(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 4772
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 4871 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 4971 y(WcsAxis\(lonlat\))d
-(attribute.)227 5095 y(Eac)n(h)37 b(WcsMap)i(also)e(allo)n(ws)g(up)i
-(to)f(100)f Ft(")p Fk(pro)5 b(jection)37 b(parameters)p
-Ft(")f Fk(to)i(b)r(e)h(asso)r(ciated)e(with)i(eac)n(h)e(axis.)227
-5195 y(These)31 b(sp)r(ecify)h(the)g(precise)f(form)g(of)g(the)h(pro)5
-b(jection,)31 b(and)h(are)e(accessed)g(using)h(PVi)p
-Ft(_)p Fk(m)h(attribute,)g(where)227 5295 y Ft(")p Fk(i)p
-Ft(")27 b Fk(is)h(the)g(in)n(teger)f(axis)h(index)f(\(starting)h(at)g
-(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f Ft(")p Fk(parameter)f(index)p
-Ft(")h Fk(in)h(the)h(range)d(0)227 5394 y(to)i(99.)39
-b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5 b(jection)27
-b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5 b(jection,)27
-b(and)i(their)f(meanings,)g(are)227 5494 y(dep)r(enden)n(t)c(up)r(on)e
-(the)h(pro)5 b(jection)22 b(t)n(yp)r(e)h(\(most)g(pro)5
-b(jections)21 b(either)h(do)h(not)f(use)h(an)n(y)f(pro)5
-b(jection)21 b(parameters,)227 5593 y(or)h(use)g(parameters)f(1)h(and)g
-(2)g(asso)r(ciated)f(with)i(the)g(latitude)g(axis\).)35
-b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-5693 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)p eop end
-%%Page: 376 386
-TeXDict begin 376 385 bop 0 52 a FG(376)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)227 351 y Fk(ha)n(v)n(e)h
-(defaults.)53 b(When)34 b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h
-(explicitly)g(set)g(v)-5 b(alues)33 b(for)f(all)h(those)g(required)227
-451 y(pro)5 b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n
-(e)g(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 611
-y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41 b(=)i(AST_WCSMAP\()c
-(NCOORD,)i(TYPE,)g(LONAX,)g(LATAX,)g(OPTIONS,)g(STATUS)g(\))0
-772 y Fc(Argumen)m(ts:)259 920 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m
-(en\))427 1019 y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)
--5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)
-f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-1119 y(sions)g(of)g(the)h(space)f(in)g(whic)n(h)g(the)h(p)r(oin)n(ts)g
-(will)f(reside\).)36 b(This)24 b(m)n(ust)g(b)r(e)h(at)f(least)g(2.)36
-b(The)24 b(same)g(n)n(um)n(b)r(er)427 1218 y(is)k(applicable)f(to)g(b)r
-(oth)h(input)h(and)e(output)h(p)r(oin)n(ts.)259 1357
-y Fc(TYPE)33 b(=)f(INTEGER)f(\(Giv)m(en\))427 1457 y
-Fk(The)g(t)n(yp)r(e)f(of)g(FITS-W)n(CS)g(pro)5 b(jection)29
-b(to)i(apply)-7 b(.)44 b(This)30 b(should)g(b)r(e)h(giv)n(en)e(as)g(a)h
-(sym)n(b)r(olic)g(v)-5 b(alue)30 b(suc)n(h)427 1556 y(as)j(AST)p
-Ft(__)p Fk(T)-7 b(AN)34 b(\(for)g(a)f(tangen)n(t)h(plane)f(pro)5
-b(jection\),)35 b(where)e(the)h(c)n(haracters)e(follo)n(wing)h(the)h
-(double)427 1656 y(underscore)19 b(giv)n(e)h(the)h(pro)5
-b(jection)20 b(t)n(yp)r(e)h(co)r(de)f(\(in)i(upp)r(er)e(case\))h(as)f
-(used)g(in)h(the)g(FITS-W)n(CS)g Ft(")p Fk(CTYPEi)p Ft(")427
-1755 y Fk(k)n(eyw)n(ord.)34 b(Y)-7 b(ou)23 b(should)g(consult)g(the)h
-(FITS-W)n(CS)f(pap)r(er)g(for)f(a)h(list)h(of)f(the)g(a)n(v)-5
-b(ailable)22 b(pro)5 b(jections.)35 b(The)427 1855 y(additional)41
-b(co)r(de)f(of)h(AST)p Ft(__)p Fk(TPN)g(can)f(b)r(e)h(supplied)h(whic)n
-(h)f(represen)n(ts)e(a)i(T)-7 b(AN)41 b(pro)5 b(jection)40
-b(with)427 1955 y(p)r(olynomial)27 b(correction)f(terms)h(as)g
-(de\014ned)h(in)g(an)f(early)g(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r
-(er.)259 2093 y Fc(LONAX)k(=)g(INTEGER)g(\(Giv)m(en\))427
-2193 y Fk(The)c(index)g(of)f(the)h(longitude)g(axis.)36
-b(This)27 b(should)h(lie)f(in)h(the)g(range)e(1)i(to)f(NCOORD.)259
-2331 y Fc(LA)-8 b(T)g(AX)33 b(=)f(INTEGER)g(\(Giv)m(en\))427
-2431 y Fk(The)f(index)g(of)g(the)g(latitude)g(axis.)45
-b(This)31 b(should)f(lie)h(in)g(the)g(range)f(1)g(to)h(NCOORD)f(and)h
-(b)r(e)g(distinct)427 2530 y(from)d(LONAX.)259 2669 y
-Fc(OPTIONS)k(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h Fj(\003)f
-Fc(\))h(\(Giv)m(en\))427 2768 y Fk(A)22 b(c)n(haracter)e(string)h(con)n
-(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g(attribute)g
-(assignmen)n(ts)f(to)g(b)r(e)427 2868 y(used)26 b(for)e(initialising)h
-(the)h(new)f(WcsMap.)36 b(The)26 b(syn)n(tax)e(used)h(is)h(iden)n
-(tical)f(to)g(that)h(for)e(the)i(AST)p Ft(_)p Fk(SET)427
-2968 y(routine.)427 3087 y(If)i(the)g(sky)f(pro)5 b(jection)26
-b(to)i(b)r(e)g(implemen)n(ted)g(requires)e(pro)5 b(jection)26
-b(parameter)g(v)-5 b(alues)27 b(to)h(b)r(e)g(set,)f(then)427
-3186 y(this)36 b(should)e(normally)g(b)r(e)i(done)e(here)h(via)f(the)i
-(PVi)p Ft(_)p Fk(m)e(attribute)h(\(see)g(the)h Ft(")p
-Fk(Examples)p Ft(")d Fk(section\).)427 3286 y(Setting)22
-b(v)-5 b(alues)21 b(for)g(these)h(parameters)d(is)j(mandatory)e(if)i
-(they)f(do)g(not)h(ha)n(v)n(e)e(default)i(v)-5 b(alues)21
-b(\(as)g(de\014ned)427 3386 y(in)28 b(the)g(FITS-W)n(CS)g(pap)r(er\).)
-259 3524 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g
-(Returned\))427 3624 y Fk(The)c(global)e(status.)0 3797
-y Fc(Returned)32 b(V)-8 b(alue:)259 3944 y(AST)p Ft(_)p
-Fc(W)m(CSMAP)32 b(=)g(INTEGER)427 4044 y Fk(A)c(p)r(oin)n(ter)f(to)h
-(the)g(new)g(WcsMap.)0 4217 y Fc(Examples:)227 4368 y
-Fy(WCSMAP)46 b(=)i(AST)p Ft(_)p Fy(WCSMAP\()c(2,)k(AST)p
-Ft(__)p Fy(MER,)d(1,)i(2,)g(')g(',)h(STATUS)e(\))427
-4464 y Fk(Creates)19 b(a)h(WcsMap)g(that)g(implemen)n(ts)g(a)g(FITS-W)n
-(CS)g(Mercator)e(pro)5 b(jection)19 b(on)h(pairs)f(of)h(co)r
-(ordinates,)427 4564 y(with)28 b(co)r(ordinates)f(1)g(and)h(2)f
-(represen)n(ting)f(the)i(longitude)g(and)f(latitude)h(resp)r(ectiv)n
-(ely)-7 b(.)37 b(Note)27 b(that)h(the)427 4663 y(FITS-W)n(CS)g
-(Mercator)e(pro)5 b(jection)26 b(do)r(es)i(not)f(require)g(an)n(y)g
-(pro)5 b(jection)26 b(parameters.)227 4806 y Fy(WCSMAP)46
-b(=)i(AST)p Ft(_)p Fy(WCSMAP\()c(3,)k(AST)p Ft(__)p Fy(COE,)d(2,)i(3,)g
-('PV3)p Ft(_)p Fy(1=40.0',)d(STATUS)i(\))427 4901 y Fk(Creates)20
-b(a)g(WcsMap)g(that)h(implemen)n(ts)g(a)f(FITS-W)n(CS)g(conical)g
-(equal)g(area)f(pro)5 b(jection.)33 b(The)21 b(WcsMap)427
-5001 y(acts)k(on)h(p)r(oin)n(ts)f(in)h(a)f(3-dimensional)f(space;)i(co)
-r(ordinates)e(2)h(and)h(3)f(represen)n(t)f(longitude)i(and)f(latitude)
-427 5100 y(resp)r(ectiv)n(ely)-7 b(,)29 b(while)g(the)g(v)-5
-b(alues)29 b(of)g(co)r(ordinate)e(1)i(are)f(copied)g(unc)n(hanged.)40
-b(Pro)5 b(jection)28 b(parameter)f(1)427 5200 y(asso)r(ciat)n(y)n(ed)22
-b(with)j(the)g(latitude)f(axis)g(\(corresp)r(onding)e(to)i(FITS)h(k)n
-(eyw)n(ord)d Ft(")p Fk(PV3)p Ft(_)p Fk(1)p Ft(")p Fk(\))g(is)j
-(required)e(and)427 5300 y(has)k(no)h(default,)g(so)f(is)g(set)h
-(explicitly)g(to)f(40.0)g(degrees.)35 b(Pro)5 b(jection)26
-b(parameter)h(2)g(\(corresp)r(onding)f(to)427 5399 y(FITS)i(k)n(eyw)n
-(ord)e Ft(")p Fk(PV3)p Ft(_)p Fk(2)p Ft(")p Fk(\))f(is)j(required)f
-(but)h(has)f(a)g(default)h(of)g(zero,)e(so)h(need)h(not)f(b)r(e)h(sp)r
-(eci\014ed.)0 5572 y Fc(Notes:)p eop end
-%%Page: 377 387
-TeXDict begin 377 386 bop 3643 52 a FG(377)340 351 y
-Fj(\017)45 b Fk(The)34 b(forw)n(ard)f(transformation)f(of)i(a)g(WcsMap)
-f(con)n(v)n(erts)g(b)r(et)n(w)n(een)h(FITS-W)n(CS)g Ft(")p
-Fk(nativ)n(e)f(spherical)p Ft(")427 451 y Fk(and)24 b
-Ft(")p Fk(relativ)n(e)e(ph)n(ysical)p Ft(")g Fk(co)r(ordinates,)h
-(while)h(the)f(in)n(v)n(erse)g(transformation)e(con)n(v)n(erts)h(in)i
-(the)g(opp)r(osite)427 551 y(direction.)68 b(This)38
-b(arrangemen)n(t)e(ma)n(y)h(b)r(e)h(rev)n(ersed,)h(if)g(required,)g(b)n
-(y)f(using)g(AST)p Ft(_)p Fk(INVER)-7 b(T)38 b(or)f(b)n(y)427
-650 y(setting)28 b(the)g(In)n(v)n(ert)f(attribute)g(to)h(a)f(non-zero)f
-(v)-5 b(alue.)340 784 y Fj(\017)45 b Fk(If)27 b(an)n(y)f(set)h(of)f(co)
-r(ordinates)g(cannot)g(b)r(e)h(transformed)e(\(for)i(example,)f(man)n
-(y)g(pro)5 b(jections)26 b(do)g(not)g(co)n(v)n(er)427
-884 y(the)i(en)n(tire)f(celestial)h(sphere\),)f(then)h(a)f(WcsMap)h
-(will)f(yield)h(co)r(ordinate)e(v)-5 b(alues)28 b(of)f(AST)p
-Ft(__)p Fk(BAD.)340 1018 y Fj(\017)45 b Fk(The)29 b(v)-5
-b(alidit)n(y)28 b(of)g(an)n(y)g(pro)5 b(jection)27 b(parameters)g(giv)n
-(en)g(via)h(the)g(PVi)p Ft(_)p Fk(m)g(parameter)f(in)i(the)g(OPTIONS)
-427 1118 y(string)g(is)g(not)h(c)n(hec)n(k)n(ed)e(b)n(y)h(this)h
-(function.)43 b(Ho)n(w)n(ev)n(er,)28 b(their)i(v)-5 b(alidit)n(y)29
-b(is)g(c)n(hec)n(k)n(ed)g(when)g(the)h(resulting)427
-1217 y(WcsMap)21 b(is)f(used)g(to)h(transform)e(co)r(ordinates,)h(and)h
-(an)f(error)e(will)j(result)f(if)h(the)g(pro)5 b(jection)19
-b(parameters)427 1317 y(do)28 b(not)f(satisfy)g(all)h(the)g(required)e
-(constrain)n(ts)g(\(as)i(de\014ned)g(in)g(the)g(FITS-W)n(CS)f(pap)r
-(er\).)340 1451 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1551 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-1715 y Fc(Status)33 b(Handling)n(:)227 1861 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1961 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 2060 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2262 3780 12 v 0 2393 a FA(AST)p
-Fe(_)p FA(WINMAP)1428 2392 y Fd(Create)37 b(a)i(WinMap)2833
-2393 y FA(AST)p Fe(_)p FA(WINMAP)0 2584 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(WinMap)h(and)g
-(optionally)e(initialises)i(its)g(attributes.)227 2710
-y(A)i(Winmap)g(is)f(a)g(linear)g(Mapping)g(whic)n(h)g(transforms)f(a)h
-(rectangular)e(windo)n(w)i(in)h(one)f(co)r(ordinate)f(system)227
-2809 y(in)n(to)g(a)f(similar)g(windo)n(w)g(in)h(another)f(co)r
-(ordinate)g(system)g(b)n(y)g(scaling)g(and)h(shifting)g(eac)n(h)f(axis)
-g(\(the)h(windo)n(w)227 2909 y(edges)f(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 3035 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-3134 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 3286 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_WINMAP\()c(NCOORD,)i(INA,)h(INB,)g(OUTA,)f(OUTB,)h(OPTIONS,)e
-(STATUS)h(\))0 3438 y Fc(Argumen)m(ts:)259 3577 y(NCOORD)31
-b(=)h(INTEGER)f(\(Giv)m(en\))427 3677 y Fk(The)25 b(n)n(um)n(b)r(er)f
-(of)g(co)r(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i
-(to)f(b)r(e)h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g
-(dimen-)427 3776 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g
-(p)r(oin)n(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h
-(is)g(applicable)f(to)h(b)r(oth)427 3876 y(input)d(and)e(output)h(p)r
-(oin)n(ts.)259 4010 y Fc(INA\()k(NCOORD)f(\))h(=)g(DOUBLE)g(PRECISION)g
-(\(Giv)m(en\))427 4110 y Fk(An)21 b(arra)n(y)d(con)n(taining)i(the)g
-(co)r(ordinates)f(of)i(corner)e(A)i(of)f(the)h(windo)n(w)f(in)g(the)h
-(input)h(co)r(ordinate)d(system.)259 4244 y Fc(INB\()32
-b(NCOORD)f(\))h(=)g(DOUBLE)g(PRECISION)f(\(Giv)m(en\))427
-4343 y Fk(An)21 b(arra)n(y)e(con)n(taining)g(the)i(co)r(ordinates)f(of)
-g(corner)f(B)i(of)g(the)g(windo)n(w)f(in)h(the)g(input)g(co)r(ordinate)
-f(system.)259 4478 y Fc(OUT)-8 b(A\()33 b(NCOORD)e(\))h(=)g(DOUBLE)g
-(PRECISION)f(\(Giv)m(en\))427 4577 y Fk(An)38 b(arra)n(y)e(con)n
-(taining)g(the)i(co)r(ordinates)e(of)i(corner)e(A)i(of)g(the)g(windo)n
-(w)f(in)h(the)g(output)g(co)r(ordinate)427 4677 y(system.)259
-4811 y Fc(OUTB\()33 b(NCOORD)d(\))i(=)g(DOUBLE)h(PRECISION)e(\(Giv)m
-(en\))427 4911 y Fk(An)39 b(arra)n(y)c(con)n(taining)i(the)h(co)r
-(ordinates)f(of)g(corner)g(B)h(of)f(the)i(windo)n(w)e(in)h(the)g
-(output)h(co)r(ordinate)427 5010 y(system.)259 5144 y
-Fc(OPTIONS)32 b(=)g(CHARA)m(CTER)g Fj(\003)f Fc(\()h
-Fj(\003)f Fc(\))h(\(Giv)m(en\))427 5244 y Fk(A)22 b(c)n(haracter)e
-(string)h(con)n(taining)g(an)h(optional)f(comma-separated)e(list)j(of)g
-(attribute)g(assignmen)n(ts)f(to)g(b)r(e)427 5344 y(used)26
-b(for)e(initialising)i(the)f(new)h(WinMap.)36 b(The)26
-b(syn)n(tax)e(used)h(is)g(iden)n(tical)h(to)f(that)g(for)g(the)h(AST)p
-Ft(_)p Fk(SET)427 5443 y(routine.)259 5577 y Fc(ST)-8
-b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))427
-5677 y Fk(The)c(global)e(status.)p eop end
-%%Page: 378 388
-TeXDict begin 378 387 bop 0 52 a FG(378)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)0 351 y Fc(Returned)h(V)-8
-b(alue:)259 535 y(AST)p Ft(_)p Fc(WINMAP)32 b(=)g(INTEGER)427
-635 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(WinMap.)0
-844 y Fc(Notes:)340 1174 y Fj(\017)45 b Fk(A)21 b(n)n(ull)f(Ob)5
-b(ject)20 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fk(NULL\))i(will)f(b)r(e)h
-(returned)e(if)i(this)f(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7
-b(A)g(TUS)427 1274 y(set)28 b(to)f(an)h(error)d(v)-5
-b(alue,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)-2
-1483 y Fc(Status)33 b(Handling)n(:)227 1629 y Fk(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 1729 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fk(in)n(t)227 1829 y Fj(\003)p
-Fk(status)p Ft(")p Fk(.)p 0 2075 3780 12 v 0 2206 a FA(AST)p
-Fe(_)p FA(WRITE)1121 2207 y Fd(W)-10 b(rite)38 b(an)g(Ob)7
-b(ject)38 b(to)g(a)h(Channel)2977 2206 y FA(AST)p Fe(_)p
-FA(WRITE)0 2443 y Fc(Description:)44 b Fk(This)21 b(function)h(writes)f
-(an)g(Ob)5 b(ject)21 b(to)g(a)f(Channel,)j(app)r(ending)e(it)g(to)g(an)
-n(y)g(previous)f(Ob)5 b(jects)20 b(written)227 2543 y(to)28
-b(that)g(Channel.)0 2740 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(RESULT)41 b(=)i(AST_WRITE\()c(THIS,)j(OBJECT,)f(STATUS)g(\))0
-2937 y Fc(Argumen)m(ts:)259 3121 y(THIS)32 b(=)g(INTEGER)g(\(Giv)m
-(en\))427 3221 y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)259
-3377 y Fc(OBJECT)k(=)g(INTEGER)f(\(Giv)m(en\))427 3477
-y Fk(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(whic)n(h)h(is)f(to)
-h(b)r(e)g(written.)259 3633 y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f
-(\(Giv)m(en)h(and)g(Returned\))427 3733 y Fk(The)c(global)e(status.)0
-3942 y Fc(Returned)32 b(V)-8 b(alue:)259 4126 y(AST)p
-Ft(_)p Fc(WRITE)32 b(=)g(INTEGER)427 4226 y Fk(The)23
-b(n)n(um)n(b)r(er)g(of)g(Ob)5 b(jects)23 b(written)g(to)g(the)g
-(Channel)g(b)n(y)g(this)g(in)n(v)n(o)r(cation)e(of)i(AST)p
-Ft(_)p Fk(WRITE)g(\(normally)-7 b(,)427 4326 y(this)28
-b(will)g(b)r(e)g(one\).)0 4535 y Fc(Notes:)340 4865 y
-Fj(\017)45 b Fk(A)24 b(v)-5 b(alue)23 b(of)g(zero)g(will)g(b)r(e)h
-(returned)f(if)g(this)h(function)g(is)f(in)n(v)n(ok)n(ed)f(with)i(ST)-7
-b(A)g(TUS)24 b(set)f(to)g(an)g(error)f(v)-5 b(alue,)427
-4965 y(or)27 b(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)340
-5121 y Fj(\017)45 b Fk(In)n(v)n(oking)27 b(this)h(function)h(will)f
-(usually)f(cause)h(the)g(sink)g(function)g(asso)r(ciated)f(with)h(the)h
-(c)n(hannel)e(to)h(b)r(e)427 5221 y(called)g(in)g(order)f(to)h
-(transfer)f(a)h(textual)g(description)g(of)g(the)g(supplied)g(ob)5
-b(ject)28 b(to)g(some)g(external)f(data)427 5321 y(store.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)i(FitsChan)g(class)f(b)r(eha)n(v)n(es)g
-(di\013eren)n(tly)-7 b(.)36 b(In)n(v)n(oking)24 b(this)i(function)h(on)
-e(a)h(FitsChan)427 5420 y(causes)35 b(new)g(FITS)h(header)f(cards)f(to)
-h(b)r(e)h(added)g(to)f(an)g(in)n(ternal)g(bu\013er)h(\(the)g(sink)f
-(function)h(is)g(not)427 5520 y(in)n(v)n(ok)n(ed\).)58
-b(This)35 b(bu\013er)h(is)f(written)g(out)g(through)f(the)i(sink)f
-(function)g(only)g(when)g(the)h(FitsChan)f(is)427 5619
-y(deleted.)p eop end
-%%Page: 379 389
-TeXDict begin 379 388 bop 3643 52 a FG(379)p 0 351 3780
-12 v 0 482 a FA(AST)p Fe(_)p FA(XMLCHAN)1374 483 y Fd(Create)38
-b(an)g(XmlChan)2729 482 y FA(AST)p Fe(_)p FA(XMLCHAN)0
-663 y Fc(Description:)44 b Fk(This)28 b(function)g(creates)f(a)g(new)g
-(XmlChan)h(and)g(optionally)e(initialises)i(its)g(attributes.)227
-790 y(A)36 b(XmlChan)f(is)g(a)f(sp)r(ecialised)h(form)f(of)h(Channel)g
-(whic)n(h)g(supp)r(orts)g(XML)g(I/O)f(op)r(erations.)58
-b(W)-7 b(riting)35 b(an)227 890 y(Ob)5 b(ject)38 b(to)f(an)g(XmlChan)h
-(\(using)f(AST)p Ft(_)p Fk(WRITE\))h(will,)i(if)e(the)g(Ob)5
-b(ject)38 b(is)f(suitable,)j(generate)c(an)h(XML)227
-989 y(description)27 b(of)g(that)g(Ob)5 b(ject,)28 b(and)f(reading)e
-(from)i(an)g(XmlChan)h(will)f(create)f(a)h(new)g(Ob)5
-b(ject)27 b(from)g(its)g(XML)227 1089 y(description.)227
-1216 y(Normally)-7 b(,)39 b(when)f(y)n(ou)e(use)i(an)f(XmlChan,)j(y)n
-(ou)d(should)g(pro)n(vide)f Ft(")p Fk(source)p Ft(")f
-Fk(and)j Ft(")p Fk(sink)p Ft(")e Fk(routines)h(whic)n(h)227
-1316 y(connect)31 b(it)h(to)f(an)g(external)f(data)g(store)h(b)n(y)f
-(reading)g(and)h(writing)g(the)h(resulting)e(XML)h(text.)48
-b(By)31 b(default,)227 1415 y(ho)n(w)n(ev)n(er,)26 b(a)h(Channel)g
-(will)h(read)f(from)g(standard)g(input)h(and)g(write)f(to)h(standard)e
-(output.)0 1569 y Fc(In)m(v)m(o)s(cation:)123 b Ft(RESULT)41
-b(=)i(AST_XMLCHAN\()c(SOURCE,)h(SINK,)i(OPTIONS,)e(STATUS)h(\))0
-1723 y Fc(Argumen)m(ts:)259 1865 y(SOUR)m(CE)32 b(=)g(SUBR)m(OUTINE)g
-(\(Giv)m(en\))427 1964 y Fk(A)g(source)e(routine,)j(whic)n(h)e(is)h(a)f
-(subroutine)g(whic)n(h)g(tak)n(es)g(a)g(single)g(in)n(teger)g(error)e
-(status)j(argumen)n(t.)427 2064 y(This)27 b(routine)g(will)g(b)r(e)g
-(used)g(b)n(y)g(the)g(XmlChan)h(to)f(obtain)f(lines)h(of)g(input)h
-(text.)37 b(On)27 b(eac)n(h)f(in)n(v)n(o)r(cation,)427
-2163 y(it)k(should)g(read)f(the)h(next)g(input)g(line)g(from)g(some)f
-(external)g(XML)h(data)f(store,)g(and)h(then)g(return)f(the)427
-2263 y(resulting)c(text)g(to)f(the)i(AST)f(library)e(b)n(y)i(calling)f
-(AST)p Ft(_)p Fk(PUTLINE.)g(It)i(should)e(supply)h(a)g(negativ)n(e)e
-(line)427 2363 y(length)32 b(when)f(there)h(are)e(no)h(more)g(lines)g
-(to)g(read.)48 b(If)32 b(an)f(error)e(o)r(ccurs,)j(it)g(should)f(set)g
-(its)h(o)n(wn)f(error)427 2462 y(status)d(argumen)n(t)e(to)i(an)f
-(error)f(v)-5 b(alue)27 b(b)r(efore)g(returning.)427
-2580 y(If)g(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p Fk(NULL)h(is)f
-(suppied)h(as)e(the)i(SOUR)n(CE)f(v)-5 b(alue,)26 b(the)h(Channel)f
-(will)g(read)g(from)427 2679 y(standard)h(input)h(instead.)259
-2815 y Fc(SINK)k(=)g(SUBR)m(OUTINE)g(\(Giv)m(en\))427
-2914 y Fk(A)24 b(sink)f(routine,)h(whic)n(h)f(is)g(a)g(subroutine)g
-(whic)n(h)g(tak)n(es)f(a)h(single)g(in)n(teger)f(error)f(status)i
-(argumen)n(t.)35 b(This)427 3014 y(routine)g(will)f(b)r(e)h(used)g(b)n
-(y)f(the)h(XmlChan)g(to)g(deliv)n(er)f(lines)g(of)h(output)g(text.)59
-b(On)34 b(eac)n(h)g(in)n(v)n(o)r(cation,)427 3113 y(it)c(should)f
-(obtain)h(the)f(next)h(output)g(line)g(from)f(the)h(AST)g(library)e(b)n
-(y)h(calling)g(AST)p Ft(_)p Fk(GETLINE,)g(and)427 3213
-y(then)d(deliv)n(er)e(the)i(resulting)f(text)g(to)g(some)g(external)f
-(XML)i(data)e(store.)36 b(If)25 b(an)g(error)e(o)r(ccurs,)i(it)h
-(should)427 3313 y(set)i(its)g(o)n(wn)f(error)e(status)j(argumen)n(t)e
-(to)i(an)f(error)f(v)-5 b(alue)27 b(b)r(efore)g(returning.)427
-3430 y(If)41 b(the)g(n)n(ull)f(routine)g(AST)p Ft(_)p
-Fk(NULL)h(is)f(suppied)g(as)g(the)h(SINK)f(v)-5 b(alue,)43
-b(the)e(Channel)f(will)h(write)f(to)427 3530 y(standard)27
-b(output)h(instead.)259 3665 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)g
-Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-3765 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3864 y(used)i(for)g(initialising)g(the)h(new)f(XmlChan.)36
-b(The)23 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)g(that)h(for)e
-(the)i(AST)p Ft(_)p Fk(SET)427 3964 y(routine.)259 4099
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 4199 y Fk(The)c(global)e(status.)0 4365 y Fc(Returned)32
-b(V)-8 b(alue:)259 4506 y(AST)p Ft(_)p Fc(XMLCHAN)32
-b(=)g(INTEGER)427 4606 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g
-(XmlChan.)0 4772 y Fc(Notes:)340 5060 y Fj(\017)45 b
-Fk(The)27 b(names)g(of)g(the)h(routines)e(supplied)i(for)e(the)i(SOUR)n
-(CE)e(and)h(SINK)g(argumen)n(ts)f(should)h(app)r(ear)f(in)427
-5159 y(EXTERNAL)33 b(statemen)n(ts)g(in)h(the)f(F)-7
-b(ortran)32 b(routine)h(whic)n(h)g(in)n(v)n(ok)n(es)e(AST)p
-Ft(_)p Fk(XMLCHAN.)k(Ho)n(w)n(ev)n(er,)427 5259 y(this)h(is)f(not)g
-(generally)f(necessary)f(for)i(the)g(n)n(ull)h(routine)f(AST)p
-Ft(_)p Fk(NULL)g(\(so)g(long)f(as)h(the)h(AST)p Ft(_)p
-Fk(P)-7 b(AR)427 5359 y(include)28 b(\014le)g(has)f(b)r(een)h(used\).)
-340 5494 y Fj(\017)45 b Fk(If)28 b(the)g(external)e(data)h(source)f(or)
-g(sink)i(uses)e(a)h(c)n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r
-(I,)g(the)f(supplied)427 5593 y(source)i(and)g(sink)g(functions)h
-(should)f(translate)g(b)r(et)n(w)n(een)h(the)f(external)g(c)n(haracter)
-f(enco)r(ding)h(and)g(the)427 5693 y(in)n(ternal)e(ASCI)r(I)i(enco)r
-(ding)e(used)g(b)n(y)h(AST.)p eop end
-%%Page: 380 390
-TeXDict begin 380 389 bop 0 52 a FG(380)2115 b Fz(B)92
-b(AST)29 b(R)m(OUTINE)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fk(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)340 584 y Fj(\017)45 b Fk(Note)36 b(that)f(the)h(n)n(ull)f
-(routine)g(AST)p Ft(_)p Fk(NULL)h(\(one)f(underscore\))f(is)h
-(di\013eren)n(t)h(to)f(AST)p Ft(__)p Fk(NULL)g(\(t)n(w)n(o)427
-683 y(underscores\),)26 b(whic)n(h)i(is)f(the)h(n)n(ull)g(Ob)5
-b(ject)28 b(p)r(oin)n(ter.)p 0 883 3780 12 v 0 1013 a
-FA(AST)p Fe(_)p FA(ZOOMMAP)325 b Fd(Create)37 b(a)i(Zo)s(omMap)326
-b FA(AST)p Fe(_)p FA(ZOOMMAP)0 1202 y Fc(Description:)44
-b Fk(This)28 b(function)g(creates)f(a)g(new)g(Zo)r(omMap)g(and)g
-(optionally)g(initialises)h(its)f(attributes.)227 1326
-y(A)40 b(Zo)r(omMap)e(is)h(a)f(Mapping)h(whic)n(h)g Ft(")p
-Fk(zo)r(oms)p Ft(")f Fk(a)g(set)h(of)g(p)r(oin)n(ts)g(ab)r(out)g(the)h
-(origin)e(b)n(y)h(m)n(ultiplying)g(all)227 1426 y(co)r(ordinate)25
-b(v)-5 b(alues)25 b(b)n(y)h(the)g(same)f(scale)g(factor)f(\(the)j(in)n
-(v)n(erse)d(transformation)g(is)i(p)r(erformed)f(b)n(y)g(dividing)h(b)n
-(y)227 1526 y(this)i(scale)f(factor\).)0 1675 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(RESULT)41 b(=)i(AST_ZOOMMAP\()c(NCOORD,)h(ZOOM,)i
-(OPTIONS,)e(STATUS)h(\))0 1824 y Fc(Argumen)m(ts:)259
-1961 y(NCOORD)31 b(=)h(INTEGER)f(\(Giv)m(en\))427 2060
-y Fk(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)-5
-b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)f
-(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-2160 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 2260 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 2393 y Fc(ZOOM)j(=)h(DOUBLE)h(PRECISION)e(\(Giv)m(en\))427
-2492 y Fk(Initial)c(scale)e(factor)g(b)n(y)h(whic)n(h)h(co)r(ordinate)e
-(v)-5 b(alues)25 b(should)h(b)r(e)h(m)n(ultiplied)g(\(b)n(y)f(the)h
-(forw)n(ard)d(transfor-)427 2592 y(mation\))f(or)e(divided)i(\(b)n(y)g
-(the)g(in)n(v)n(erse)e(transformation\).)34 b(This)22
-b(factor)g(ma)n(y)g(subsequen)n(tly)g(b)r(e)h(c)n(hanged)427
-2691 y(via)k(the)h(Zo)r(omMap's)f(Zo)r(om)g(attribute.)37
-b(It)28 b(ma)n(y)f(b)r(e)h(p)r(ositiv)n(e)f(or)f(negativ)n(e,)h(but)h
-(should)g(not)f(b)r(e)h(zero.)259 2824 y Fc(OPTIONS)k(=)g(CHARA)m(CTER)
-g Fj(\003)f Fc(\()h Fj(\003)f Fc(\))h(\(Giv)m(en\))427
-2924 y Fk(A)22 b(c)n(haracter)e(string)h(con)n(taining)g(an)h(optional)
-f(comma-separated)e(list)j(of)g(attribute)g(assignmen)n(ts)f(to)g(b)r
-(e)427 3024 y(used)h(for)f(initialising)h(the)g(new)g(Zo)r(omMap.)34
-b(The)22 b(syn)n(tax)f(used)g(is)h(iden)n(tical)g(to)f(that)i(for)e
-(the)h(AST)p Ft(_)p Fk(SET)427 3123 y(routine.)259 3256
-y Fc(ST)-8 b(A)g(TUS)34 b(=)e(INTEGER)f(\(Giv)m(en)h(and)g(Returned\))
-427 3356 y Fk(The)c(global)e(status.)0 3518 y Fc(Returned)32
-b(V)-8 b(alue:)259 3654 y(AST)p Ft(_)p Fc(ZOOMMAP)32
-b(=)g(INTEGER)427 3754 y Fk(A)c(p)r(oin)n(ter)f(to)h(the)g(new)g(Zo)r
-(omMap.)0 3915 y Fc(Notes:)340 4198 y Fj(\017)45 b Fk(A)21
-b(n)n(ull)f(Ob)5 b(ject)20 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fk(NULL\))i(will)f(b)r(e)h(returned)e(if)i(this)f(function)h
-(is)f(in)n(v)n(ok)n(ed)e(with)j(ST)-7 b(A)g(TUS)427 4298
-y(set)28 b(to)f(an)h(error)d(v)-5 b(alue,)28 b(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 4459 y Fc(Status)33
-b(Handling)n(:)227 4606 y Fk(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 4705 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fk(in)n(t)227 4805 y Fj(\003)p Fk(status)p Ft(")p Fk(.)p
-eop end
-%%Page: 381 391
-TeXDict begin 381 390 bop 3643 52 a FG(381)0 351 y FA(C)135
-b(AST)43 b(A)l(ttribute)j(Descriptions)p 0 596 3780 12
-v 0 735 a(Abbrev\(axis\))1073 728 y Fd(Abbreviate)37
-b(leading)g(\014elds)i(within)1330 843 y(n)m(umerical)d(axis)i(lab)s
-(els?)3010 735 y FA(Abbrev\(axis\))0 1021 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1120 y(AST)p Ft(_)p Fk(GRID)42 b(routine\))e(b)n(y)g(determining)h
-(whether)g(matc)n(hing)f(leading)g(\014elds)g(should)h(b)r(e)g(remo)n
-(v)n(ed)e(from)227 1220 y(adjacen)n(t)24 b(n)n(umerical)f(axis)g(lab)r
-(els.)36 b(It)24 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)24
-b(for)f(eac)n(h)h(ph)n(ysical)f(axis)g(of)h(a)g(Plot)g(so)f(that,)i
-(for)227 1320 y(instance,)j(the)h(setting)f Ft(")p Fk(Abbrev\(2\)=0)p
-Ft(")e Fk(sp)r(eci\014es)j(that)f(matc)n(hing)g(leading)f(\014elds)h
-(should)g(not)h(b)r(e)f(remo)n(v)n(ed)227 1419 y(on)g(the)g(second)f
-(axis.)227 1548 y(If)33 b(the)g(Abbrev)g(v)-5 b(alue)32
-b(of)g(a)h(Plot)f(is)g(non-zero)f(\(the)i(default\),)i(then)e(leading)f
-(\014elds)g(will)h(b)r(e)g(remo)n(v)n(ed)e(from)227 1647
-y(adjacen)n(t)c(axis)g(lab)r(els)h(if)g(they)f(are)g(equal.)0
-1804 y Fc(T)m(yp)s(e:)227 1904 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-2061 y Fc(Class)k(Applicabilit)m(y:)259 2205 y(Plot)427
-2305 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2475 y Fc(Notes:)340 2765 y Fj(\017)45 b Fk(If)c(no)f(axis)f(is)h(sp)r
-(eci\014ed,)k(\(e.g.)74 b Ft(")p Fk(Abbrev)p Ft(")39
-b Fk(instead)h(of)h Ft(")p Fk(Abbrev\(2\))p Ft(")p Fk(\),)h(then)f(a)f
-Ft(")p Fk(set)p Ft(")f Fk(or)g Ft(")p Fk(clear)p Ft(")427
-2865 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 2964 y(will)k(use)g(just)g(the)g(Abbrev\(1\))f(v)-5
-b(alue.)p 0 3171 V 0 3303 a FA(Adaptiv)l(e)330 b Fd(Should)38
-b(the)g(area)g(adapt)g(to)g(c)m(hanges)g(in)g(the)1400
-3418 y(co)s(ordinate)e(system?)3245 3303 y FA(Adaptiv)l(e)0
-3614 y Fc(Description:)44 b Fk(The)28 b(co)r(ordinate)e(system)g
-(represen)n(ted)g(b)n(y)h(a)g(Region)f(ma)n(y)h(b)r(e)g(c)n(hanged)f(b)
-n(y)h(assigning)f(new)h(v)-5 b(alues)227 3714 y(to)33
-b(attributes)g(suc)n(h)g(as)f(System,)i(Unit,)h(etc.)54
-b(F)-7 b(or)32 b(instance,)i(a)e(Region)h(represen)n(ting)e(an)i(area)e
-(on)i(the)g(sky)227 3813 y(in)h(ICRS)f(co)r(ordinates)f(ma)n(y)g(ha)n
-(v)n(e)g(its)i(System)f(attribute)g(c)n(hanged)f(so)h(that)g(it)h
-(represen)n(ts)e(\(sa)n(y\))g(Galactic)227 3913 y(co)r(ordinates)h
-(instead)h(of)h(ICRS.)f(This)h(attribute)f(con)n(trols)f(what)h(happ)r
-(ens)g(when)h(the)g(co)r(ordinate)e(system)227 4013 y(represen)n(ted)27
-b(b)n(y)g(a)g(Region)g(is)h(c)n(hanged)e(in)i(this)g(w)n(a)n(y)-7
-b(.)227 4141 y(If)40 b(Adaptiv)n(e)f(is)h(non-zero)d(\(the)j
-(default\),)j(then)d(area)e(represen)n(ted)g(b)n(y)h(the)h(Region)f
-(adapts)g(to)g(the)h(new)227 4241 y(co)r(ordinate)27
-b(system.)37 b(That)27 b(is,)h(the)g(n)n(umerical)f(v)-5
-b(alues)27 b(whic)n(h)g(de\014ne)h(the)g(area)e(represen)n(ted)h(b)n(y)
-g(the)h(Region)227 4340 y(are)34 b(c)n(hanged)g(b)n(y)h(mapping)f(them)
-i(from)e(the)h(old)g(co)r(ordinate)f(system)g(in)n(to)h(the)g(new)g(co)
-r(ordinate)f(system.)227 4440 y(Th)n(us)28 b(the)g(Region)e(con)n(tin)n
-(ues)h(to)h(represen)n(t)e(the)i(same)f(ph)n(ysical)g(area.)227
-4568 y(If)35 b(Adaptiv)n(e)g(is)g(zero,)g(then)h(area)d(represen)n(ted)
-h(b)n(y)g(the)h(Region)f(do)r(es)h(not)g(adapt)f(to)h(the)g(new)g(co)r
-(ordinate)227 4668 y(system.)59 b(That)35 b(is,)h(the)f(n)n(umerical)f
-(v)-5 b(alues)35 b(whic)n(h)g(de\014ne)g(the)g(area)e(represen)n(ted)h
-(b)n(y)h(the)g(Region)f(are)g(left)227 4768 y(unc)n(hanged.)i(Th)n(us)
-28 b(the)g(ph)n(ysical)e(area)g(represen)n(ted)h(b)n(y)g(the)h(Region)f
-(will)h(usually)f(c)n(hange.)227 4896 y(As)35 b(an)g(example,)h
-(consider)e(a)h(Region)f(describ)r(e)h(a)f(range)g(of)h(w)n(a)n(v)n
-(elength)e(from)h(2000)g(Angstrom)g(to)g(4000)227 4996
-y(Angstrom.)42 b(If)30 b(the)g(Unit)g(attribute)g(for)e(the)i(Region)f
-(is)g(c)n(hanged)g(from)g(Angstrom)g(to)g Ft(")p Fk(nm)p
-Ft(")g Fk(\(nanometre\),)227 5095 y(what)f(happ)r(ens)f(dep)r(ends)h
-(on)f(the)g(setting)h(of)f(Adaptiv)n(e.)37 b(If)27 b(Adaptiv)n(e)h(is)f
-(non-zero,)f(the)h(Mapping)g(from)g(the)227 5195 y(old)34
-b(to)f(the)i(new)e(co)r(ordinate)g(system)g(is)h(found.)56
-b(In)33 b(this)i(case)d(it)j(is)e(a)g(simple)h(scaling)f(b)n(y)h(a)f
-(factor)g(of)g(0.1)227 5295 y(\(since)e(1)f(Angstrom)g(is)h(0.1)e
-(nm\).)47 b(This)31 b(Mapping)f(is)g(then)i(used)e(to)h(mo)r(dify)g
-(the)g(n)n(umerical)f(v)-5 b(alues)30 b(within)227 5394
-y(the)i(Region,)g(c)n(hanging)e(2000)g(to)h(200)f(and)i(4000)d(to)j
-(400.)47 b(Th)n(us)31 b(the)h(mo)r(di\014ed)g(region)e(represen)n(ts)g
-(200)g(nm)227 5494 y(to)e(400)e(nm,)h(the)h(same)f(ph)n(ysical)g(space)
-f(as)h(the)h(original)e(2000)f(Angstrom)i(to)g(4000)f(Angstrom.)36
-b(Ho)n(w)n(ev)n(er,)25 b(if)227 5593 y(Adaptiv)n(e)j(had)g(b)r(een)g
-(zero,)f(then)h(the)g(n)n(umerical)f(v)-5 b(alues)28
-b(w)n(ould)f(not)h(ha)n(v)n(e)f(b)r(een)h(c)n(hanged,)f(resulting)g(in)
-h(the)227 5693 y(\014nal)g(Region)f(represen)n(ting)f(2000)f(nm)j(to)g
-(4000)e(nm.)p eop end
-%%Page: 382 392
-TeXDict begin 382 391 bop 0 52 a FG(382)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(Setting)g(Adaptiv)n(e)g(to)f(zero)f(can)h(b)r(e)h(necessary)e(if)i
-(y)n(ou)f(w)n(an)n(t)g(correct)f(inaccurate)g(attribute)i(settings)f
-(in)h(an)227 451 y(existing)23 b(Region.)35 b(F)-7 b(or)23
-b(instance,)h(when)f(creating)g(a)g(Region)f(y)n(ou)h(ma)n(y)g(not)g
-(kno)n(w)g(what)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)23 b(to)h(use,)227
-551 y(so)k(y)n(ou)f(w)n(ould)g(lea)n(v)n(e)g(Ep)r(o)r(c)n(h)g(unset)h
-(resulting)f(in)i(some)e(default)h(v)-5 b(alue)28 b(b)r(eing)g(used.)38
-b(If)28 b(at)g(some)f(later)g(p)r(oin)n(t)227 650 y(in)34
-b(the)h(application,)f(the)g(correct)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)34 b(is)g(determined,)h(y)n(ou)e(could)h(assign)e(the)j(correct)
-d(v)-5 b(alue)34 b(to)227 750 y(the)c(Ep)r(o)r(c)n(h)f(attribute.)42
-b(Ho)n(w)n(ev)n(er,)27 b(y)n(ou)i(w)n(ould)g(\014rst)f(need)i(to)f(set)
-g(Adaptiv)n(e)g(temp)r(orarily)f(to)h(zero,)g(b)r(ecause)227
-849 y(otherwise)g(the)h(area)e(represen)n(ted)g(b)n(y)i(the)g(Region)e
-(w)n(ould)h(b)r(e)h(Mapp)r(ed)g(from)g(the)f(spurious)g(default)h(Ep)r
-(o)r(c)n(h)227 949 y(to)e(the)g(new)f(correct)g(Ep)r(o)r(c)n(h,)g(whic)
-n(h)g(is)h(not)f(what)h(is)f(required.)0 1107 y Fc(T)m(yp)s(e:)227
-1207 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 1365 y Fc(Class)k
-(Applicabilit)m(y:)259 1509 y(Region)427 1609 y Fk(All)d(Regions)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 1817 3780 12 v 0 1948
-a FA(AlignO\013set)383 b Fd(Align)37 b(SkyF)-10 b(rames)38
-b(using)h(the)f(o\013set)1400 2063 y(co)s(ordinate)e(system?)3115
-1948 y FA(AlignO\013set)0 2260 y Fc(Description:)44 b
-Fk(This)26 b(attribute)g(is)g(a)g(b)r(o)r(olean)f(v)-5
-b(alue)26 b(whic)n(h)g(con)n(trols)e(ho)n(w)i(a)f(SkyF)-7
-b(rame)25 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)f(used)227
-2360 y(\(b)n(y)g(AST)p Ft(_)p Fk(FINDFRAME)i(or)d(AST)p
-Ft(_)p Fk(CONVER)-7 b(T\))26 b(as)f(a)h(template)h(to)e(matc)n(h)h
-(another)g(\(target\))f(SkyF)-7 b(rame.)227 2460 y(It)28
-b(determines)g(the)g(co)r(ordinate)e(system)h(in)h(whic)n(h)g(the)g(t)n
-(w)n(o)f(SkyF)-7 b(rames)26 b(are)h(aligned)g(if)h(a)f(matc)n(h)g(o)r
-(ccurs.)227 2588 y(If)21 b(the)g(template)g(and)f(target)g(SkyF)-7
-b(rames)19 b(b)r(oth)i(ha)n(v)n(e)e(de\014ned)i(o\013set)g(co)r
-(ordinate)e(systems)h(\(i.e.)35 b(the)21 b(SkyRefIs)227
-2688 y(attribute)j(is)g(set)f(to)h(either)f Ft(")p Fk(Origin)p
-Ft(")f Fk(or)h Ft(")g Fk(P)n(ole)p Ft(")p Fk(\),)g(and)g(they)h(b)r
-(oth)g(ha)n(v)n(e)f(a)g(non-zero)f(v)-5 b(alue)23 b(for)h
-(AlignO\013set,)227 2788 y(then)h(alignmen)n(t)e(o)r(ccurs)g(within)h
-(the)g(o\013set)g(co)r(ordinate)f(systems)g(\(that)h(is,)h(a)e(UnitMap)
-i(will)f(alw)n(a)n(ys)d(b)r(e)k(used)227 2887 y(to)e(align)f(the)g(t)n
-(w)n(o)g(SkyF)-7 b(rames\).)35 b(If)23 b(either)f(the)h(template)g(or)e
-(target)h(SkyF)-7 b(rame)22 b(has)g(zero)f(\(the)i(default)g(v)-5
-b(alue\))227 2987 y(for)35 b(AlignO\013set,)j(or)d(if)h(either)f(SkyF)
--7 b(rame)35 b(has)g(SkyRefIs)h(set)g(to)f Ft(")p Fk(Ignored)p
-Ft(")p Fk(,)h(then)g(alignmen)n(t)f(o)r(ccurring)227
-3087 y(within)29 b(the)f(co)r(ordinate)e(system)h(sp)r(eci\014ed)h(b)n
-(y)f(the)h(AlignSystem)g(attribute.)0 3244 y Fc(T)m(yp)s(e:)227
-3344 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 3502 y Fc(Class)k
-(Applicabilit)m(y:)259 3647 y(SkyF)-8 b(rame)427 3747
-y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)p
-0 3954 V 0 4086 a FA(AlignSideBand)227 b Fd(Should)38
-b(the)g(SideBand)h(attribute)1183 4186 y(b)s(e)g(tak)m(en)f(in)m(to)f
-(accoun)m(t)g(when)1157 4285 y(aligning)f(this)j(DSBSp)s(ecF)-10
-b(rame)1117 4400 y(with)37 b(another)h(DSBSp)s(ecF)-10
-b(rame?)2903 4086 y FA(AlignSideBand)0 4597 y Fc(Description:)44
-b Fk(This)28 b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(DSBSp)r(ecF)-7
-b(rame)27 b(b)r(eha)n(v)n(es)g(when)h(an)f(attempt)h(is)f(made)h(to)f
-(align)227 4697 y(it)43 b(with)g(another)e(DSBSp)r(ecF)-7
-b(rame)43 b(using)f(AST)p Ft(_)p Fk(FINDFRAME)h(or)f(AST)p
-Ft(_)p Fk(CONVER)-7 b(T.)42 b(If)h(b)r(oth)g(DSB-)227
-4796 y(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)f(a)g(non-zero)f(v)-5
-b(alue)27 b(for)g(AlignSideBand,)g(the)g(v)-5 b(alue)27
-b(of)g(the)g(SideBand)g(attribute)g(in)g(eac)n(h)227
-4896 y(DSBSp)r(ecF)-7 b(rame)22 b(is)f(used)h(so)e(that)i(alignmen)n(t)
-f(o)r(ccurs)g(b)r(et)n(w)n(een)g(sidebands.)34 b(That)22
-b(is,)g(if)g(one)f(DSBSp)r(ecF)-7 b(rame)227 4996 y(represen)n(ts)24
-b(USB)h(and)g(the)g(other)f(represen)n(ts)g(LSB)h(then)g(AST)p
-Ft(_)p Fk(FINDFRAME)h(and)f(AST)p Ft(_)p Fk(CONVER)-7
-b(T)24 b(will)227 5095 y(recognise)32 b(that)j(the)f(DSBSp)r(ecF)-7
-b(rames)34 b(represen)n(t)f(di\013eren)n(t)h(sidebands)f(and)h(will)g
-(tak)n(e)g(this)g(in)n(to)f(accoun)n(t)227 5195 y(when)22
-b(constructing)e(the)h(Mapping)g(that)h(maps)e(p)r(ositions)h(in)h(one)
-e(DSBSp)r(ecF)-7 b(rame)22 b(in)n(to)f(the)g(other.)34
-b(If)22 b(Align-)227 5295 y(SideBand)32 b(in)f(either)h(DSBSp)r(ecF)-7
-b(rame)31 b(is)h(set)f(to)g(zero,)h(then)g(the)g(v)-5
-b(alues)31 b(of)g(the)h(SideBand)f(attributes)h(are)227
-5394 y(ignored.)39 b(In)29 b(the)g(ab)r(o)n(v)n(e)e(example,)i(this)g
-(w)n(ould)f(result)g(in)h(a)f(frequency)g(in)h(the)g(\014rst)g(DSBSp)r
-(ecF)-7 b(rame)29 b(b)r(eing)227 5494 y(mapp)r(ed)38
-b(on)n(to)e(the)h(same)f(frequency)h(in)g(the)h(second)e(DSBSp)r(ecF)-7
-b(rame,)39 b(ev)n(en)e(though)g(those)f(frequencies)227
-5593 y(refer)25 b(to)f(di\013eren)n(t)h(sidebands.)36
-b(In)25 b(other)g(w)n(ords,)f(if)h(either)g(AlignSideBand)g(attribute)g
-(is)g(zero,)g(then)g(the)g(t)n(w)n(o)227 5693 y(DSBSp)r(ecF)-7
-b(rames)28 b(aligns)e(lik)n(e)i(basic)f(Sp)r(ecF)-7 b(rames.)36
-b(The)28 b(default)g(v)-5 b(alue)27 b(for)g(AlignSideBand)h(is)f(zero.)
-p eop end
-%%Page: 383 393
-TeXDict begin 383 392 bop 3643 52 a FG(383)227 351 y
-Fk(When)34 b(AST)p Ft(_)p Fk(FINDFRAME)h(or)e(AST)p Ft(_)p
-Fk(CONVER)-7 b(T)33 b(is)g(used)h(on)f(t)n(w)n(o)g(DSBSp)r(ecF)-7
-b(rames)33 b(\(p)r(oten)n(tially)h(de-)227 451 y(scribing)29
-b(di\013eren)n(t)h(sp)r(ectral)f(co)r(ordinate)f(systems)i(and/or)e
-(sidebands\),)i(it)g(returns)f(a)g(Mapping)g(whic)n(h)h(can)227
-551 y(b)r(e)23 b(used)g(to)g(transform)e(a)i(p)r(osition)f(in)h(one)f
-(DSBSp)r(ecF)-7 b(rame)23 b(in)n(to)g(the)g(corresp)r(onding)e(p)r
-(osition)h(in)h(the)g(other.)227 650 y(The)28 b(Mapping)f(is)h(made)f
-(up)h(of)g(the)f(follo)n(wing)g(steps)h(in)f(the)h(indicated)g(order:)
-340 918 y Fj(\017)45 b Fk(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h
-(AlignSideBand)f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427
-1017 y(the)39 b(target's)f(curren)n(t)g(sideband)g(\(giv)n(en)g(b)n(y)h
-(its)g(SideBand)f(attribute\))h(to)g(the)g(observ)n(ed)e(sideband)427
-1117 y(\(whether)27 b(USB)g(or)f(LSB\).)h(If)g(the)h(target)e(already)f
-(represen)n(ts)g(the)i(observ)n(ed)f(sideband,)g(this)h(step)g(will)427
-1217 y(lea)n(v)n(e)g(the)i(v)-5 b(alues)28 b(unc)n(hanged.)39
-b(If)28 b(either)h(of)f(the)h(t)n(w)n(o)e(DSBSp)r(ecF)-7
-b(rames)29 b(ha)n(v)n(e)e(a)h(v)-5 b(alue)28 b(of)g(zero)g(for)f(its)
-427 1316 y(AlignSideBand)h(attribute,)g(then)g(this)g(step)f(is)h
-(omitted.)340 1451 y Fj(\017)45 b Fk(Map)25 b(the)g(v)-5
-b(alues)24 b(from)g(the)h(sp)r(ectral)f(system)g(of)h(the)g(target)e
-(to)i(the)g(sp)r(ectral)e(system)i(of)f(the)h(template.)427
-1551 y(This)39 b(Mapping)g(tak)n(es)f(in)n(to)h(accoun)n(t)f(all)h(the)
-g(inherited)g(Sp)r(ecF)-7 b(rame)39 b(attributes)g(suc)n(h)g(as)f
-(System,)427 1651 y(StdOfRest,)29 b(Unit,)f(etc.)340
-1786 y Fj(\017)45 b Fk(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h
-(AlignSideBand)f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427
-1885 y(the)37 b(result's)f(observ)n(ed)e(sideband)j(to)f(the)g
-(result's)g(curren)n(t)g(sideband)g(\(giv)n(en)f(b)n(y)h(its)h
-(SideBand)f(at-)427 1985 y(tribute\).)h(If)24 b(the)g(result)g(already)
-f(represen)n(ts)f(the)i(observ)n(ed)f(sideband,)h(this)h(step)f(will)g
-(lea)n(v)n(e)f(the)h(v)-5 b(alues)427 2085 y(unc)n(hanged.)44
-b(If)31 b(either)f(of)g(the)g(t)n(w)n(o)g(DSBSp)r(ecF)-7
-b(rames)30 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)30 b(of)g(zero)f(for)g(its)i
-(AlignSideBand)427 2184 y(attribute,)d(then)g(this)g(step)g(is)f
-(omitted.)0 2351 y Fc(T)m(yp)s(e:)227 2450 y Fk(In)n(teger)g(\(b)r(o)r
-(olean\).)0 2604 y Fc(Class)k(Applicabilit)m(y:)259 2745
-y(DSBSp)s(ecF)-8 b(rame)427 2845 y Fk(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 3049
-3780 12 v 0 3180 a FA(AlignSp)t(ecO\013set)238 b Fd(Align)38
-b(Sp)s(ecF)-10 b(rames)38 b(using)h(the)1245 3295 y(o\013set)g(co)s
-(ordinate)d(system?)2841 3180 y FA(AlignSp)t(ecO\013set)0
-3488 y Fc(Description:)44 b Fk(This)24 b(attribute)g(is)f(a)h(b)r(o)r
-(olean)f(v)-5 b(alue)23 b(whic)n(h)h(con)n(trols)e(ho)n(w)h(a)g(Sp)r
-(ecF)-7 b(rame)24 b(b)r(eha)n(v)n(es)e(when)i(it)g(is)g(used)227
-3588 y(\(b)n(y)f(AST)p Ft(_)p Fk(FINDFRAME)h(or)e(AST)p
-Ft(_)p Fk(CONVER)-7 b(T\))23 b(as)g(a)f(template)h(to)g(matc)n(h)g
-(another)f(\(target\))h(Sp)r(ecF)-7 b(rame.)227 3687
-y(It)31 b(determines)f(whether)g(alignmen)n(t)g(o)r(ccurs)f(b)r(et)n(w)
-n(een)h(the)h(o\013set)f(v)-5 b(alues)30 b(de\014ned)h(b)n(y)f(the)g
-(curren)n(t)g(v)-5 b(alue)30 b(of)227 3787 y(the)e(Sp)r(ecO\013set)g
-(attribute,)g(or)f(b)r(et)n(w)n(een)g(the)h(corresp)r(onding)e
-(absolute)h(sp)r(ectral)g(v)-5 b(alues.)227 3914 y(The)36
-b(default)f(v)-5 b(alue)36 b(of)f(zero)f(results)h(in)g(the)h(t)n(w)n
-(o)f(Sp)r(ecF)-7 b(rames)35 b(b)r(eing)g(aligned)g(so)f(that)i(a)f(giv)
-n(en)f(absolute)227 4013 y(sp)r(ectral)28 b(v)-5 b(alue)28
-b(in)h(one)f(is)g(mapp)r(ed)h(to)f(the)h(same)f(absolute)g(v)-5
-b(alue)28 b(in)h(the)g(other.)38 b(A)29 b(non-zero)e(v)-5
-b(alue)28 b(results)227 4113 y(in)j(the)g(Sp)r(ecF)-7
-b(rames)30 b(b)r(eing)h(aligned)e(so)h(that)h(a)f(giv)n(en)g(o\013set)g
-(v)-5 b(alue)30 b(in)h(one)f(is)h(mapp)r(ed)g(to)f(the)h(same)f
-(o\013set)227 4213 y(v)-5 b(alue)28 b(in)g(the)g(other.)0
-4367 y Fc(T)m(yp)s(e:)227 4466 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-4620 y Fc(Class)k(Applicabilit)m(y:)259 4761 y(Sp)s(ecF)-8
-b(rame)427 4861 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 5064 V 0 5196 a
-FA(AlignStdOfRest)221 b Fd(Standard)38 b(of)g(rest)g(to)g(use)i(when)
-1367 5296 y(aligning)c(Sp)s(ecF)-10 b(rames)2850 5196
-y FA(AlignStdOfRest)0 5494 y Fc(Description:)44 b Fk(This)24
-b(attribute)f(con)n(trols)f(ho)n(w)g(a)h(Sp)r(ecF)-7
-b(rame)23 b(b)r(eha)n(v)n(es)f(when)h(it)h(is)f(used)g(\(b)n(y)h(AST)p
-Ft(_)p Fk(FINDFRAME)227 5593 y(or)31 b(AST)p Ft(_)p Fk(CONVER)-7
-b(T\))31 b(as)g(a)g(template)h(to)f(matc)n(h)g(another)g(\(target\))g
-(Sp)r(ecF)-7 b(rame.)48 b(It)32 b(iden)n(ti\014es)f(the)h(stan-)227
-5693 y(dard)g(of)h(rest)g(in)g(whic)n(h)g(alignmen)n(t)f(is)h(to)g(o)r
-(ccur.)52 b(See)32 b(the)i(StdOfRest)f(attribute)g(for)g(a)f
-(desription)g(of)h(the)p eop end
-%%Page: 384 394
-TeXDict begin 384 393 bop 0 52 a FG(384)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(v)-5 b(alues)39 b(whic)n(h)h(ma)n(y)e(b)r(e)i(assigned)e(to)i
-(this)f(attribute.)73 b(The)39 b(default)h(AlignStdOfRest)g(v)-5
-b(alue)39 b(is)h Ft(")p Fk(Helio)p Ft(")227 451 y Fk(\(heliographic\).)
-227 579 y(When)e(AST)p Ft(_)p Fk(FindF)-7 b(rame)37 b(or)g(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)37 b(is)g(used)g(on)g(t)n(w)n(o)f(Sp)r(ecF)-7
-b(rames)37 b(\(p)r(oten)n(tially)g(describing)227 678
-y(di\013eren)n(t)h(sp)r(ectral)e(co)r(ordinate)g(systems\),)k(it)d
-(returns)g(a)f(Mapping)h(whic)n(h)g(can)g(b)r(e)h(used)f(to)g
-(transform)f(a)227 778 y(p)r(osition)27 b(in)h(one)f(Sp)r(ecF)-7
-b(rame)27 b(in)n(to)g(the)h(corresp)r(onding)e(p)r(osition)h(in)g(the)h
-(other.)36 b(The)28 b(Mapping)f(is)g(made)g(up)227 878
-y(of)h(the)g(follo)n(wing)e(steps)i(in)g(the)g(indicated)f(order:)340
-1149 y Fj(\017)45 b Fk(Map)33 b(v)-5 b(alues)33 b(from)g(the)h(system)f
-(used)g(b)n(y)g(the)h(target)e(\(w)n(a)n(v)n(elength,)i(apparen)n(t)e
-(radial)g(v)n(elo)r(cit)n(y)-7 b(,)34 b(etc\))427 1248
-y(to)k(the)g(system)f(sp)r(eci\014ed)h(b)n(y)g(the)g(AlignSystem)f
-(attribute,)k(using)c(the)h(target's)f(rest)g(frequency)g(if)427
-1348 y(necessary)-7 b(.)340 1484 y Fj(\017)45 b Fk(Map)30
-b(these)h(v)-5 b(alues)30 b(from)g(the)h(target's)e(standard)g(of)i
-(rest)f(to)g(the)h(standard)e(of)i(rest)e(sp)r(eci\014ed)i(b)n(y)f(the)
-427 1584 y(AlignStdOfRest)35 b(attribute,)h(using)e(the)h(Ep)r(o)r(c)n
-(h,)g(ObsLat,)h(ObsLon,)f(ObsAlt,)h(RefDec)f(and)f(RefRA)427
-1683 y(attributes)28 b(of)f(the)h(target)f(to)g(de\014ne)h(the)g(t)n(w)
-n(o)f(standards)f(of)i(rest.)340 1819 y Fj(\017)45 b
-Fk(Map)26 b(these)f(v)-5 b(alues)26 b(from)f(the)h(standard)f(of)g
-(rest)h(sp)r(eci\014ed)g(b)n(y)f(the)h(AlignStdOfRest)g(attribute,)h
-(to)e(the)427 1919 y(template's)30 b(standard)e(of)h(rest,)g(using)g
-(the)h(Ep)r(o)r(c)n(h,)f(ObsLat,)g(ObsLon,)g(ObsAlt,)h(RefDec)g(and)f
-(RefRA)427 2019 y(attributes)f(of)f(the)h(template)g(to)g(de\014ne)g
-(the)g(t)n(w)n(o)e(standards)h(of)g(rest.)340 2155 y
-Fj(\017)45 b Fk(Map)24 b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)
-f(sp)r(eci\014ed)g(b)n(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h
-(system)f(used)427 2255 y(b)n(y)k(the)g(template,)g(using)f(the)h
-(template's)g(rest)f(frequency)g(if)h(necessary)-7 b(.)0
-2423 y Fc(T)m(yp)s(e:)227 2523 y Fk(String.)0 2679 y
-Fc(Class)31 b(Applicabilit)m(y:)259 2822 y(Sp)s(ecF)-8
-b(rame)427 2922 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3127 3780 12 v 0
-3259 a FA(AlignSystem)219 b Fd(Co)s(ordinate)36 b(system)i(in)h(whic)m
-(h)f(to)g(align)1629 3374 y(the)g(F)-10 b(rame)3037 3259
-y FA(AlignSystem)0 3551 y Fc(Description:)44 b Fk(This)29
-b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(F)-7 b(rame)28
-b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h(\(b)n(y)g(AST)p
-Ft(_)p Fk(FINDFRAME)g(or)227 3650 y(AST)p Ft(_)p Fk(CONVER)-7
-b(T\))37 b(as)f(a)g(template)h(to)g(matc)n(h)f(another)g(\(target\))g
-(F)-7 b(rame.)64 b(It)37 b(iden)n(ti\014es)g(the)g(co)r(ordinate)227
-3750 y(system)28 b(in)f(whic)n(h)h(the)g(t)n(w)n(o)f(F)-7
-b(rames)27 b(will)g(b)r(e)h(aligned)f(b)n(y)h(the)g(matc)n(h.)227
-3878 y(The)36 b(v)-5 b(alues)35 b(whic)n(h)h(ma)n(y)e(b)r(e)i(assigned)
-f(to)g(this)h(attribute,)i(and)d(its)h(default)g(v)-5
-b(alue,)37 b(dep)r(end)f(on)g(the)g(class)227 3977 y(of)i(F)-7
-b(rame)37 b(and)h(are)e(describ)r(ed)i(in)g(the)g Ft(")p
-Fk(Applicabilit)n(y)p Ft(")f Fk(section)h(b)r(elo)n(w.)66
-b(In)38 b(general,)h(the)f(AlignSystem)227 4077 y(attribute)28
-b(will)g(accept)f(an)n(y)g(of)h(the)g(v)-5 b(alues)27
-b(whic)n(h)g(ma)n(y)g(b)r(e)h(assigned)f(to)g(the)h(System)g
-(attribute.)227 4205 y(The)36 b(Mapping)e(returned)h(b)n(y)g(astFindF)
--7 b(rame)35 b(or)f(astCon)n(v)n(ert)f(will)j(use)f(the)g(co)r
-(ordinate)f(system)h(sp)r(eci\014ed)227 4304 y(b)n(y)29
-b(the)g(AlignSystem)g(attribute)g(as)f(an)g(in)n(termediate)h(co)r
-(ordinate)e(system.)40 b(The)29 b(total)g(returned)f(Mapping)227
-4404 y(will)33 b(\014rst)g(map)f(p)r(ositions)h(from)f(the)h(\014rst)g
-(F)-7 b(rame)32 b(in)n(to)g(this)h(in)n(termediate)g(co)r(ordinate)e
-(system,)j(using)e(the)227 4504 y(attributes)h(of)g(the)h(\014rst)f(F)
--7 b(rame.)53 b(It)33 b(will)g(then)h(map)f(these)g(p)r(ositions)g
-(from)g(the)g(in)n(termediate)g(co)r(ordinate)227 4603
-y(system)28 b(in)n(to)f(the)h(second)f(F)-7 b(rame,)27
-b(using)g(the)h(attributes)g(of)f(the)h(second)f(F)-7
-b(rame.)0 4759 y Fc(T)m(yp)s(e:)227 4859 y Fk(String.)0
-5015 y Fc(Class)31 b(Applicabilit)m(y:)259 5158 y(F)-8
-b(rame)427 5258 y Fk(The)36 b(AlignSystem)g(attribute)g(for)g(a)f
-(basic)h(F)-7 b(rame)35 b(alw)n(a)n(ys)f(equals)h Ft(")p
-Fk(Cartesian)p Ft(")p Fk(,)h(and)g(ma)n(y)f(not)h(b)r(e)427
-5358 y(altered.)259 5494 y Fc(CmpF)-8 b(rame)427 5593
-y Fk(The)35 b(AlignSystem)h(attribute)f(for)f(a)h(CmpF)-7
-b(rame)35 b(alw)n(a)n(ys)e(equals)h Ft(")p Fk(Comp)r(ound)p
-Ft(")p Fk(,)i(and)f(ma)n(y)f(not)h(b)r(e)427 5693 y(altered.)p
-eop end
-%%Page: 385 395
-TeXDict begin 385 394 bop 3643 52 a FG(385)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(The)22 b(AlignSystem)f(attribute)h(of)f
-(a)g(F)-7 b(rameSet)21 b(is)g(the)h(same)f(as)g(that)g(of)h(its)f
-(curren)n(t)g(F)-7 b(rame)20 b(\(as)h(sp)r(eci\014ed)427
-551 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)259
-688 y Fc(SkyF)-8 b(rame)427 787 y Fk(The)28 b(default)g(AlignSystem)g
-(attribute)g(for)f(a)g(SkyF)-7 b(rame)27 b(is)g Ft(")p
-Fk(ICRS)p Ft(")p Fk(.)259 924 y Fc(Sp)s(ecF)-8 b(rame)427
-1024 y Fk(The)28 b(default)g(AlignSystem)g(attribute)g(for)f(a)g(Sp)r
-(ecF)-7 b(rame)27 b(is)h Ft(")p Fk(W)-7 b(a)n(v)n(e)p
-Ft(")26 b Fk(\(w)n(a)n(v)n(elength\).)259 1161 y Fc(TimeF)-8
-b(rame)427 1261 y Fk(The)28 b(default)g(AlignSystem)g(attribute)g(for)f
-(a)g(TimeF)-7 b(rame)27 b(is)g Ft(")p Fk(MJD)p Ft(")p
-Fk(.)p 0 1469 3780 12 v 0 1600 a FA(AlignTimeScale)153
-b Fd(Time)36 b(scale)h(to)g(use)h(when)f(aligning)1573
-1714 y(TimeF)-10 b(rames)2858 1600 y FA(AlignTimeScale)0
-1892 y Fc(Description:)44 b Fk(This)22 b(attribute)f(con)n(trols)f(ho)n
-(w)h(a)g(TimeF)-7 b(rame)21 b(b)r(eha)n(v)n(es)g(when)g(it)h(is)g(used)
-f(\(b)n(y)h(AST)p Ft(_)p Fk(FINDFRAME)227 1992 y(or)31
-b(AST)p Ft(_)p Fk(CONVER)-7 b(T\))31 b(as)g(a)g(template)g(to)g(matc)n
-(h)g(another)g(\(target\))g(TimeF)-7 b(rame.)47 b(It)32
-b(iden)n(ti\014es)f(the)h(time)227 2092 y(scale)h(in)h(whic)n(h)g
-(alignmen)n(t)f(is)g(to)h(o)r(ccur.)54 b(See)34 b(the)g(TimeScale)f
-(attribute)h(for)f(a)g(desription)g(of)h(the)g(v)-5 b(alues)227
-2191 y(whic)n(h)24 b(ma)n(y)e(b)r(e)i(assigned)f(to)g(this)h
-(attribute.)35 b(The)24 b(default)g(AlignTimeScale)f(v)-5
-b(alue)23 b(dep)r(ends)h(on)g(the)f(curren)n(t)227 2291
-y(v)-5 b(alue)26 b(of)h(TimeScale:)36 b(if)27 b(TimeScale)f(is)g(UT1,)g
-(GMST,)h(LMST)f(or)g(LAST,)h(the)f(default)h(for)f(AlignTimeScale)227
-2391 y(is)i(UT1,)f(for)g(all)h(other)f(TimeScales)g(the)h(default)g(is)
-f(T)-7 b(AI.)227 2519 y(When)36 b(AST)p Ft(_)p Fk(FindF)-7
-b(rame)35 b(or)f(AST)p Ft(_)p Fk(CONVER)-7 b(T)35 b(is)g(used)g(on)g(t)
-n(w)n(o)g(TimeF)-7 b(rames)34 b(\(p)r(oten)n(tially)h(describing)227
-2619 y(di\013eren)n(t)24 b(time)g(co)r(ordinate)f(systems\),)h(it)h
-(returns)e(a)g(Mapping)g(whic)n(h)h(can)f(b)r(e)i(used)e(to)h
-(transform)e(a)i(p)r(osition)227 2719 y(in)31 b(one)f(TimeF)-7
-b(rame)31 b(in)n(to)f(the)h(corresp)r(onding)e(p)r(osition)h(in)h(the)g
-(other.)46 b(The)30 b(Mapping)h(is)f(made)h(up)g(of)f(the)227
-2818 y(follo)n(wing)d(steps)g(in)h(the)g(indicated)g(order:)340
-3092 y Fj(\017)45 b Fk(Map)32 b(v)-5 b(alues)32 b(from)g(the)h(system)f
-(used)h(b)n(y)f(the)g(target)g(\(MJD,)h(JD,)f(etc\))h(to)f(the)h
-(system)f(sp)r(eci\014ed)h(b)n(y)427 3192 y(the)28 b(AlignSystem)g
-(attribute.)340 3329 y Fj(\017)45 b Fk(Map)20 b(these)f(v)-5
-b(alues)19 b(from)g(the)h(target's)f(time)h(scale)e(to)i(the)f(time)h
-(scale)f(sp)r(eci\014ed)h(b)n(y)f(the)h(AlignTimeScale)427
-3428 y(attribute.)340 3566 y Fj(\017)45 b Fk(Map)28 b(these)f(v)-5
-b(alues)27 b(from)h(the)f(time)h(scale)f(sp)r(eci\014ed)h(b)n(y)f(the)h
-(AlignTimeScale)f(attribute,)h(to)g(the)f(tem-)427 3665
-y(plate's)h(time)g(scale.)340 3802 y Fj(\017)45 b Fk(Map)24
-b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)f(sp)r(eci\014ed)g(b)n
-(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h(system)f(used)427
-3902 y(b)n(y)k(the)g(template.)0 4073 y Fc(T)m(yp)s(e:)227
-4172 y Fk(String.)0 4330 y Fc(Class)j(Applicabilit)m(y:)259
-4475 y(TimeF)-8 b(rame)427 4575 y Fk(All)28 b(TimeF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 4783
-V 0 4914 a FA(AllW)-11 b(arnings)378 b Fd(A)39 b(list)f(of)g(all)f
-(curren)m(tly)g(a)m(v)-7 b(ailable)1473 5029 y(condition)37
-b(names)3048 4914 y FA(AllW)-11 b(arnings)0 5203 y Fc(Description:)44
-b Fk(This)32 b(read-only)d(attribute)j(is)f(a)g(space)g(separated)f
-(list)i(of)f(all)g(the)h(conditions)f(names)g(recognized)227
-5303 y(b)n(y)d(the)g(W)-7 b(arnings)26 b(attribute.)37
-b(The)28 b(names)f(are)g(listed)h(b)r(elo)n(w.)0 5461
-y Fc(T)m(yp)s(e:)227 5560 y Fk(String,)g(read-only)0
-5718 y Fc(Class)j(Applicabilit)m(y:)p eop end
-%%Page: 386 396
-TeXDict begin 386 395 bop 0 52 a FG(386)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(FitsChan)427 451 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)-2 623 y Fc(Conditions)n(:)227 770 y Fk(The)g(follo)n(wing)
-e(conditions)i(are)e(curren)n(tly)h(recognised)f(\(all)h(are)g
-(case-insensitiv)n(e\):)340 1046 y Fj(\017)45 b Ft(")p
-Fk(BadCel)p Ft(")p Fk(:)31 b(This)18 b(condition)h(arises)e(when)h
-(reading)f(a)h(F)-7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r
-(ded)g(FitsChan)427 1146 y(if)28 b(an)g(unkno)n(wn)f(celestial)g
-(co-ordinate)f(system)h(is)h(sp)r(eci\014ed)f(b)n(y)h(the)g(CTYPE)f(k)n
-(eyw)n(ords.)340 1284 y Fj(\017)45 b Ft(")p Fk(BadCTYPE)p
-Ft(")p Fk(:)e(This)31 b(condition)g(arises)f(when)i(reading)e(a)h(F)-7
-b(rameSet)31 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427
-1384 y(FitsChan)d(if)g(an)g(illegal)f(algorithm)g(co)r(de)g(is)h(sp)r
-(eci\014ed)g(b)n(y)f(a)h(CTYPE)f(k)n(eyw)n(ord,)f(and)i(the)g(illegal)f
-(co)r(de)427 1483 y(can)g(b)r(e)h(con)n(v)n(erted)f(to)g(an)g(equiv)-5
-b(alen)n(t)28 b(legal)e(co)r(de.)340 1622 y Fj(\017)45
-b Ft(")p Fk(BadLat)p Ft(")p Fk(:)31 b(This)18 b(condition)g(arises)f
-(when)i(reading)e(a)h(F)-7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g
-(enco)r(ded)g(FitsChan)427 1721 y(if)23 b(the)f(latitude)g(of)g(the)h
-(reference)e(p)r(oin)n(t)h(has)f(an)h(absolute)f(v)-5
-b(alue)22 b(greater)e(than)i(90)f(degrees.)34 b(The)22
-b(actual)427 1821 y(absolute)27 b(v)-5 b(alue)28 b(used)f(is)h(set)f
-(to)h(exactly)f(90)f(degrees)h(in)h(these)f(cases.)340
-1959 y Fj(\017)45 b Ft(")p Fk(BadMat)p Ft(")p Fk(:)32
-b(This)20 b(condition)g(arises)f(if)i(the)f(matrix)g(describing)g(the)g
-(transformation)f(from)h(pixel)g(o\013sets)427 2059 y(to)38
-b(in)n(termediate)g(w)n(orld)f(co)r(ordinates)g(cannot)g(b)r(e)i(in)n
-(v)n(erted.)67 b(This)38 b(matrix)g(describ)r(es)f(the)i(scaling,)427
-2158 y(rotation,)32 b(shear,)h(etc.,)g(applied)f(to)g(the)h(pixel)f
-(axes,)g(and)g(is)g(sp)r(eci\014ed)h(b)n(y)f(k)n(eyw)n(ords)e(suc)n(h)i
-(as)f(PCi)p Ft(_)p Fk(j,)427 2258 y(CDi)p Ft(_)p Fk(j,)g(CR)n(OT)-7
-b(A,)29 b(etc.)43 b(F)-7 b(or)29 b(example,)h(the)g(matrix)f(will)h
-(not)g(b)r(e)g(in)n(v)n(ertable)e(if)i(an)n(y)f(ro)n(ws)f(or)h(columns)
-427 2357 y(consist)i(en)n(tirely)f(of)h(zeros.)46 b(The)31
-b(FITS-W)n(CS)g(P)n(ap)r(er)f(I)h Ft(")p Fk(Represen)n(tation)e(of)i(W)
--7 b(orld)31 b(Co)r(ordinates)e(in)427 2457 y(FITS)p
-Ft(")35 b Fk(b)n(y)g(Greisen)f(&)h(Calabretta)e(requires)h(that)h(this)
-g(matrix)g(b)r(e)g(in)n(v)n(ertable.)58 b(Man)n(y)34
-b(op)r(erations)427 2557 y(\(suc)n(h)28 b(as)f(grid)g(plotting\))h
-(will)f(not)h(b)r(e)g(p)r(ossible)f(if)h(the)g(matrix)f(cannot)h(b)r(e)
-g(in)n(v)n(erted.)340 2695 y Fj(\017)45 b Ft(")p Fk(BadPV)p
-Ft(")p Fk(:)31 b(This)18 b(condition)g(arises)f(when)i(reading)e(a)h(F)
--7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan.)427
-2795 y(It)27 b(is)g(issued)f(if)h(a)f(PVi)p Ft(_)p Fk(m)h(header)e(is)i
-(found)g(that)g(refers)e(to)i(a)f(pro)5 b(jection)26
-b(parameter)f(that)i(is)f(not)h(used)427 2894 y(b)n(y)h(the)g(pro)5
-b(jection)26 b(t)n(yp)r(e)i(sp)r(eci\014ed)g(b)n(y)f(CTYPE.)340
-3032 y Fj(\017)45 b Ft(")p Fk(BadV)-7 b(al)p Ft(")p Fk(:)31
-b(This)18 b(condition)h(arises)e(when)h(reading)f(a)h(F)-7
-b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan)427
-3132 y(if)33 b(it)g(is)g(not)g(p)r(ossible)f(to)g(con)n(v)n(ert)f(the)i
-(v)-5 b(alue)33 b(of)f(a)h(FITS)g(k)n(eyw)n(ords)d(to)j(the)g(exp)r
-(ected)g(t)n(yp)r(e.)52 b(F)-7 b(or)32 b(in-)427 3232
-y(stance,)27 b(this)g(can)g(o)r(ccur)f(if)i(the)f(FITS)g(header)f(con)n
-(tains)g(a)h(string)f(v)-5 b(alue)27 b(for)f(a)h(k)n(eyw)n(ord)e(whic)n
-(h)i(should)427 3331 y(ha)n(v)n(e)g(a)g(\015oating)g(p)r(oin)n(t)g(v)-5
-b(alue,)28 b(or)f(if)h(the)g(k)n(eyw)n(ord)d(has)j(no)f(v)-5
-b(alue)27 b(at)h(all)f(\(i.e.)37 b(is)28 b(a)f(commen)n(t)g(card\).)340
-3469 y Fj(\017)45 b Ft(")p Fk(Distortion)p Ft(")p Fk(:)56
-b(This)37 b(condition)g(arises)g(when)g(reading)g(a)g(F)-7
-b(rameSet)37 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427
-3569 y(FitsChan)32 b(if)h(an)n(y)f(of)g(the)g(CTYPE)g(k)n(eyw)n(ords)e
-(sp)r(ecify)i(an)g(unsupp)r(orted)g(distortion)f(co)r(de)h(using)g(the)
-427 3669 y Ft(")p Fk(4-3-3)p Ft(")25 b Fk(format)i(sp)r(eci\014ed)h(in)
-g(FITS-W)n(CS)f(pap)r(er)h(IV.)g(Suc)n(h)f(distortion)g(co)r(des)g(are)
-g(ignored.)340 3807 y Fj(\017)45 b Ft(")p Fk(NoCTYPE)p
-Ft(")p Fk(:)f(This)31 b(condition)h(arises)e(if)i(a)g(default)g(CTYPE)f
-(v)-5 b(alue)31 b(is)h(used)g(within)g(AST)p Ft(_)p Fk(READ,)427
-3906 y(due)j(to)g(no)g(v)-5 b(alue)34 b(b)r(eing)h(presen)n(t)g(in)g
-(the)g(supplied)g(FitsChan.)59 b(This)35 b(condition)g(is)f(only)h
-(tested)g(for)427 4006 y(when)28 b(using)f(non-Nativ)n(e)g(enco)r
-(dings.)340 4144 y Fj(\017)45 b Ft(")p Fk(NoEquino)n(x)p
-Ft(")p Fk(:)g(This)33 b(condition)f(arises)f(if)j(a)e(default)h(equino)
-n(x)f(v)-5 b(alue)33 b(is)f(used)h(within)g(AST)p Ft(_)p
-Fk(READ,)427 4244 y(due)i(to)g(no)g(v)-5 b(alue)34 b(b)r(eing)h(presen)
-n(t)g(in)g(the)g(supplied)g(FitsChan.)59 b(This)35 b(condition)g(is)f
-(only)h(tested)g(for)427 4343 y(when)28 b(using)f(non-Nativ)n(e)g(enco)
-r(dings.)340 4482 y Fj(\017)45 b Ft(")p Fk(NoRadesys)p
-Ft(")p Fk(:)36 b(This)28 b(condition)g(arises)f(if)h(a)g(default)h
-(reference)e(frame)h(is)f(used)i(for)e(an)h(equatorial)e(co-)427
-4581 y(ordinate)e(system)g(within)h(AST)p Ft(_)p Fk(READ,)f(due)h(to)f
-(no)g(v)-5 b(alue)24 b(b)r(eing)h(presen)n(t)f(in)g(the)h(supplied)f
-(FitsChan.)427 4681 y(This)k(condition)f(is)h(only)f(tested)h(for)f
-(when)h(using)f(non-Nativ)n(e)g(enco)r(dings.)340 4819
-y Fj(\017)45 b Ft(")p Fk(NoLonp)r(ole)p Ft(")p Fk(:)52
-b(This)35 b(condition)h(arises)e(if)i(a)g(default)g(v)-5
-b(alue)35 b(is)h(used)f(for)h(the)g(LONPOLE)d(k)n(eyw)n(ord)427
-4919 y(within)28 b(AST)p Ft(_)p Fk(READ,)g(due)g(to)f(no)g(v)-5
-b(alue)27 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)g(FitsChan.)36
-b(This)28 b(condition)427 5018 y(is)g(only)f(tested)h(for)f(when)h
-(using)f(non-Nativ)n(e)g(enco)r(dings.)340 5156 y Fj(\017)45
-b Ft(")p Fk(NoLatp)r(ole)p Ft(")p Fk(:)56 b(This)37 b(condition)g
-(arises)f(if)i(a)f(default)h(v)-5 b(alue)38 b(is)f(used)g(for)g(the)h
-(LA)-7 b(TPOLE)36 b(k)n(eyw)n(ord)427 5256 y(within)28
-b(AST)p Ft(_)p Fk(READ,)g(due)g(to)f(no)g(v)-5 b(alue)27
-b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)g(FitsChan.)36
-b(This)28 b(condition)427 5356 y(is)g(only)f(tested)h(for)f(when)h
-(using)f(non-Nativ)n(e)g(enco)r(dings.)340 5494 y Fj(\017)45
-b Ft(")p Fk(NoMjd-obs)p Ft(")p Fk(:)56 b(This)37 b(condition)h(arises)e
-(if)i(a)f(default)h(v)-5 b(alue)38 b(is)f(used)h(for)f(the)h(date)f(of)
-h(observ)-5 b(ation)427 5593 y(within)28 b(AST)p Ft(_)p
-Fk(READ,)g(due)g(to)f(no)g(v)-5 b(alue)27 b(b)r(eing)h(presen)n(t)e(in)
-i(the)g(supplied)g(FitsChan.)36 b(This)28 b(condition)427
-5693 y(is)g(only)f(tested)h(for)f(when)h(using)f(non-Nativ)n(e)g(enco)r
-(dings.)p eop end
-%%Page: 387 397
-TeXDict begin 387 396 bop 3643 52 a FG(387)340 351 y
-Fj(\017)45 b Ft(")p Fk(Tnx)p Ft(")p Fk(:)38 b(This)28
-b(condition)g(arises)f(if)i(a)f(F)-7 b(rameSet)28 b(is)h(read)e(from)h
-(a)g(FITS)h(header)e(con)n(taining)h(an)g(IRAF)427 451
-y Ft(")p Fk(TNX)p Ft(")g Fk(pro)5 b(jection)26 b(whic)n(h)i(includes)g
-(terms)f(not)h(supproted)f(b)n(y)g(AST.)i(Suc)n(h)e(terms)h(are)e
-(ignored)h(and)427 551 y(so)g(the)h(resulting)f(F)-7
-b(rameSet)28 b(ma)n(y)e(b)r(e)i(inaccurate.)340 679 y
-Fj(\017)45 b Ft(")p Fk(Zp)n(x)p Ft(")p Fk(:)39 b(This)29
-b(condition)g(arises)e(if)j(a)f(F)-7 b(rameSet)29 b(is)g(read)f(from)h
-(a)f(FITS)i(header)e(con)n(taining)g(an)h(IRAF)427 779
-y Ft(")p Fk(ZPX)p Ft(")24 b Fk(pro)5 b(jection)25 b(whic)n(h)g
-(includes)h Ft(")p Fk(lngcor)p Ft(")d Fk(or)h Ft(")p
-Fk(latcor)p Ft(")g Fk(correction)f(terms.)36 b(These)25
-b(terms)g(are)g(not)427 878 y(supp)r(orted)j(b)n(y)f(AST)h(and)f(are)g
-(ignored.)36 b(The)27 b(resulting)g(F)-7 b(rameSet)28
-b(ma)n(y)f(therefore)f(b)r(e)i(inaccurate.)p 0 1069 3780
-12 v 0 1208 a FA(AsTime\(axis\))1116 1201 y Fd(F)-10
-b(ormat)37 b(celestal)g(co)s(ordinates)g(as)1725 1301
-y(times?)2989 1208 y FA(AsTime\(axis\))0 1462 y Fc(Description:)44
-b Fk(This)21 b(attribute)g(sp)r(eci\014es)g(the)g(default)g(st)n(yle)f
-(of)h(formatting)f(to)h(b)r(e)g(used)f(\(e.g.)35 b(b)n(y)20
-b(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T\))227 1562 y(for)36
-b(the)h(celestial)f(co)r(ordinate)g(v)-5 b(alues)36 b(describ)r(ed)g(b)
-n(y)h(a)f(SkyF)-7 b(rame.)63 b(It)37 b(tak)n(es)e(a)i(separate)e(b)r(o)
-r(olean)h(v)-5 b(alue)227 1662 y(for)39 b(eac)n(h)g(SkyF)-7
-b(rame)38 b(axis)h(so)g(that,)k(for)c(instance,)j(the)e(setting)f
-Ft(")p Fk(AsTime\(2\)=0)p Ft(")f Fk(sp)r(eci\014es)h(the)h(default)227
-1761 y(formatting)27 b(st)n(yle)g(for)h(celestial)f(latitude)h(v)-5
-b(alues.)227 1884 y(If)23 b(the)f(AsTime)g(attribute)g(for)g(a)g(SkyF)
--7 b(rame)21 b(axis)g(is)h(zero,)g(then)g(co)r(ordinates)f(on)h(that)g
-(axis)f(will)h(b)r(e)h(formatted)227 1983 y(as)e(angles)f(b)n(y)h
-(default)g(\(using)g(degrees,)g(min)n(utes)h(and)f(seconds\),)h
-(otherwise)e(they)h(will)g(b)r(e)h(formatted)f(as)f(times)227
-2083 y(\(using)28 b(hours,)f(min)n(utes)g(and)h(seconds\).)227
-2205 y(The)h(default)h(v)-5 b(alue)29 b(of)g(AsTime)h(is)f(c)n(hosen)f
-(according)f(to)i(the)h(sky)f(co)r(ordinate)f(system)g(b)r(eing)i
-(represen)n(ted,)227 2305 y(as)22 b(determined)i(b)n(y)e(the)h(SkyF)-7
-b(rame's)22 b(System)h(attribute.)36 b(This)23 b(ensures,)g(for)f
-(example,)i(that)f(righ)n(t)f(ascension)227 2405 y(v)-5
-b(alues)27 b(will)h(b)r(e)g(formatted)g(as)f(times)g(b)n(y)h(default,)g
-(follo)n(wing)e(normal)h(con)n(v)n(en)n(tions.)0 2550
-y Fc(T)m(yp)s(e:)227 2649 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-2795 y Fc(Class)k(Applicabilit)m(y:)259 2927 y(SkyF)-8
-b(rame)427 3026 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 3184 y Fc(Notes:)340 3462 y Fj(\017)45
-b Fk(The)d(AsTime)g(attribute)g(op)r(erates)e(b)n(y)h(c)n(hanging)g
-(the)h(default)g(v)-5 b(alue)41 b(of)h(the)g(corresp)r(onding)e(F)-7
-b(or-)427 3562 y(mat\(axis\))28 b(attribute.)37 b(This,)27
-b(in)h(turn,)g(ma)n(y)f(also)f(a\013ect)i(the)g(v)-5
-b(alue)28 b(of)f(the)h(Unit\(axis\))g(attribute.)340
-3691 y Fj(\017)45 b Fk(Only)38 b(the)g(default)h(st)n(yle)e(of)h
-(formatting)f(is)h(a\013ected)g(b)n(y)g(the)g(AsTime)g(v)-5
-b(alue.)68 b(If)39 b(an)e(explicit)i(F)-7 b(or-)427 3790
-y(mat\(axis\))28 b(v)-5 b(alue)27 b(is)h(set,)f(it)h(will)g(o)n(v)n
-(er-ride)d(an)n(y)i(e\013ect)h(from)f(the)h(AsTime)g(attribute.)p
-0 3981 V 0 4112 a FA(Base)1181 4113 y Fd(F)-10 b(rameSet)37
-b(base)i(F)-10 b(rame)39 b(index)3504 4112 y FA(Base)0
-4270 y Fc(Description:)44 b Fk(This)28 b(attribute)g(giv)n(es)f(the)h
-(index)g(of)f(the)h(F)-7 b(rame)28 b(whic)n(h)f(is)h(to)g(b)r(e)g
-(regarded)e(as)h(the)h Ft(")p Fk(base)p Ft(")e Fk(F)-7
-b(rame)227 4370 y(within)30 b(a)e(F)-7 b(rameSet.)40
-b(The)28 b(default)h(is)g(the)g(\014rst)f(F)-7 b(rame)28
-b(added)h(to)f(the)h(F)-7 b(rameSet)29 b(when)g(it)g(is)f(created)g
-(\(this)227 4469 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h(an)g(index)h
-(of)g(1\).)0 4614 y Fc(T)m(yp)s(e:)227 4714 y Fk(In)n(teger.)0
-4859 y Fc(Class)j(Applicabilit)m(y:)259 4991 y(F)-8 b(rameSet)427
-5091 y Fk(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)
-0 5249 y Fc(Notes:)340 5527 y Fj(\017)45 b Fk(In)n(v)n(erting)17
-b(a)h(F)-7 b(rameSet)19 b(\(in)n(v)n(erting)e(the)i(b)r(o)r(olean)f
-(sense)f(of)i(its)f(In)n(v)n(ert)g(attribute,)i(with)f(the)g(AST)p
-Ft(_)p Fk(INVER)-7 b(T)427 5627 y(routine)27 b(for)h(example\))f(will)h
-(in)n(terc)n(hange)e(the)i(v)-5 b(alues)27 b(of)h(its)f(Base)g(and)g
-(Curren)n(t)g(attributes.)p eop end
-%%Page: 388 398
-TeXDict begin 388 397 bop 0 52 a FG(388)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Border)298 b Fd(Dra)m(w)38 b(a)h(b)s(order)f
-(around)f(v)-7 b(alid)38 b(regions)g(of)g(a)h(Plot?)297
-b FA(Border)0 687 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n
-(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g
-(grid)g(\(dra)n(wn)g(with)h(the)227 787 y(AST)p Ft(_)p
-Fk(GRID)i(routine\))e(b)n(y)h(determining)g(whether)f(a)h(b)r(order)e
-(is)i(dra)n(wn)f(around)g(regions)f(corresp)r(onding)g(to)227
-887 y(the)f(v)-5 b(alid)28 b(ph)n(ysical)f(co)r(ordinates)f(of)h(a)h
-(Plot)f(\(c.f.)37 b(AST)p Ft(_)p Fk(BORDER\).)227 1017
-y(If)j(the)g(Border)d(v)-5 b(alue)39 b(of)g(a)g(Plot)g(is)g(non-zero,)h
-(then)g(this)g(b)r(order)e(will)h(b)r(e)h(dra)n(wn)e(as)h(part)f(of)i
-(the)f(grid.)227 1116 y(Otherwise,)32 b(the)g(b)r(order)e(is)i(not)f
-(dra)n(wn)g(\(although)g(axis)g(lab)r(els)g(and)g(tic)n(k)g(marks)g
-(will)g(still)h(app)r(ear,)g(unless)227 1216 y(other)25
-b(relev)-5 b(an)n(t)24 b(Plot)g(attributes)h(indicate)f(that)i(they)f
-(should)f(not\).)36 b(The)25 b(default)h(b)r(eha)n(viour)d(is)i(to)g
-(dra)n(w)e(the)227 1316 y(b)r(order)j(if)i(tic)n(k)e(marks)g(and)h(n)n
-(umerical)f(lab)r(els)h(will)g(b)r(e)g(dra)n(wn)f(around)g(the)h(edges)
-f(of)h(the)g(plotting)g(area)f(\(see)227 1415 y(the)i(Lab)r(elling)f
-(attribute\),)i(but)f(to)f(omit)h(it)g(otherwise.)0 1576
-y Fc(T)m(yp)s(e:)227 1675 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-1836 y Fc(Class)k(Applicabilit)m(y:)259 1983 y(Plot)427
-2083 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2293 V 0 2431 a FA(Bottom\(axis\))1173 2424 y Fd(Lo)m(w)m(est)37
-b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)3001 2431 y
-FA(Bottom\(axis\))0 2642 y Fc(Description:)44 b Fk(This)23
-b(attribute)g(giv)n(es)f(the)h(lo)n(w)n(est)f(axis)g(v)-5
-b(alue)23 b(to)g(b)r(e)g(displa)n(y)n(ed)f(\(for)g(instance,)i(b)n(y)f
-(the)g(AST)p Ft(_)p Fk(GRID)227 2742 y(metho)r(d\).)0
-2902 y Fc(T)m(yp)s(e:)227 3002 y Fk(Floating)k(p)r(oin)n(t.)0
-3162 y Fc(Class)k(Applicabilit)m(y:)259 3310 y(F)-8 b(rame)427
-3409 y Fk(The)28 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g(axis)g(v)-5
-b(alues,)27 b(without)h(an)n(y)f(limit.)259 3548 y Fc(SkyF)-8
-b(rame)427 3647 y Fk(The)27 b(SkyF)-7 b(rame)25 b(class)g(re-de\014nes)
-h(the)h(default)f(Bottom)g(v)-5 b(alue)26 b(to)h(-90)e(degrees)g(for)g
-(latitude)i(axes,)f(and)427 3747 y(0)h(degrees)g(for)g(co-latitude)g
-(axes.)36 b(The)27 b(default)i(for)e(longitude)g(axes)g(is)g(to)h
-(displa)n(y)e(all)i(axis)f(v)-5 b(alues.)0 3920 y Fc(Notes:)340
-4213 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 4313 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)p 0 4523 V 0 4655 a FA(Bounded)758 b Fd(Is)40
-b(the)e(Region)g(b)s(ounded?)759 b FA(Bounded)0 4854
-y Fc(Description:)44 b Fk(This)27 b(is)g(a)f(read-only)g(attribute)h
-(indicating)f(if)i(the)f(Region)f(is)h(b)r(ounded.)37
-b(A)27 b(Region)f(is)h(b)r(ounded)g(if)227 4954 y(it)h(is)g(con)n
-(tained)f(en)n(tirely)g(within)h(some)f(\014nite-size)g(b)r(ounding)h
-(b)r(o)n(x.)0 5115 y Fc(T)m(yp)s(e:)227 5214 y Fk(In)n(teger)f(\(b)r(o)
-r(olean\),)h(read-only)-7 b(.)0 5375 y Fc(Class)31 b(Applicabilit)m(y:)
-259 5522 y(Region)427 5622 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)p eop end
-%%Page: 389 399
-TeXDict begin 389 398 bop 3643 52 a FG(389)p 0 351 3780
-12 v 0 483 a FA(CDMatrix)298 b Fd(Use)39 b(CDi)p Fe(_)p
-Fd(j)f(k)m(eyw)m(ords)f(to)h(represen)m(t)g(pixel)1338
-598 y(scaling,)f(rotation,)e(etc?)3171 483 y FA(CDMatrix)0
-791 y Fc(Description:)44 b Fk(This)26 b(attribute)f(is)g(a)g(b)r(o)r
-(olean)g(v)-5 b(alue)25 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(the)h
-(linear)e(transformation)g(from)h(pixel)227 890 y(co)r(ordinates)d(to)g
-(in)n(termediate)h(w)n(orld)e(co)r(ordinates)h(should)g(b)r(e)i
-(represen)n(ted)d(within)j(a)e(FitsChan)h(when)g(using)227
-990 y(FITS-W)n(CS)29 b(enco)r(ding.)40 b(This)29 b(transformation)e
-(describ)r(es)h(the)h(scaling,)f(rotation,)g(shear,)g(etc.,)h(of)f(the)
-i(pixel)227 1090 y(axes.)227 1216 y(If)38 b(the)g(attribute)g(has)f(a)g
-(non-zero)f(v)-5 b(alue)38 b(then)g(the)g(transformation)e(is)h
-(represen)n(ted)g(b)n(y)g(a)g(set)h(of)f(CDi)p Ft(_)p
-Fk(j)227 1316 y(k)n(eyw)n(ords)23 b(represen)n(ting)g(a)i(square)e
-(matrix)h(\(where)h Ft(")p Fk(i)p Ft(")f Fk(is)g(the)i(index)e(of)h(an)
-g(in)n(termediate)f(w)n(orld)g(co)r(ordinate)227 1415
-y(axis)36 b(and)f Ft(")p Fk(j)p Ft(")h Fk(is)g(the)g(index)g(of)g(a)g
-(pixel)g(axis\).)62 b(If)36 b(the)h(attribute)f(has)f(a)h(zero)f(v)-5
-b(alue)36 b(the)g(transformation)227 1515 y(is)f(represen)n(ted)e(b)n
-(y)i(a)f(set)g(of)h(PCi)p Ft(_)p Fk(j)f(k)n(eyw)n(ords)f(\(whic)n(h)i
-(also)e(represen)n(t)g(a)i(square)e(matrix\))h(together)g(with)227
-1615 y(a)i(corresp)r(onding)f(set)h(of)g(CDEL)-7 b(Ti)37
-b(k)n(eyw)n(ords)d(represen)n(ting)h(the)i(axis)e(scalings.)62
-b(See)37 b(FITS-W)n(CS)f(pap)r(er)227 1714 y(I)r(I)i
-Ft(")p Fk(Represen)n(tation)d(of)i(Celestial)g(Co)r(ordinates)f(in)h
-(FITS)p Ft(")g Fk(b)n(y)g(M.)g(Calabretta)f(&)g(E.W.)i(Greisen,)g(for)f
-(a)227 1814 y(complete)28 b(description)f(of)g(these)h(t)n(w)n(o)f(sc)n
-(hemes.)227 1941 y(The)g(default)f(v)-5 b(alue)26 b(of)g(the)h
-(CDMatrix)f(attribute)g(is)h(determined)f(b)n(y)g(the)g(con)n(ten)n(ts)
-g(of)g(the)h(FitsChan)f(at)g(the)227 2040 y(time)f(the)g(attribute)f
-(is)g(accessed.)35 b(If)24 b(the)h(FitsChan)f(con)n(tains)f(an)n(y)h
-(CDi)p Ft(_)p Fk(j)h(k)n(eyw)n(ords)d(then)i(the)h(default)g(v)-5
-b(alue)227 2140 y(is)21 b(non-zero.)32 b(Otherwise)20
-b(it)h(is)f(zero.)33 b(Note,)22 b(reading)d(a)h(F)-7
-b(rameSet)20 b(from)g(a)g(FitsChan)h(will)f(in)h(general)e(consume)227
-2240 y(an)n(y)33 b(CDi)p Ft(_)p Fk(j)i(k)n(eyw)n(ords)d(presen)n(t)h
-(in)h(the)g(FitsChan.)56 b(Th)n(us)34 b(the)g(default)g(v)-5
-b(alue)34 b(for)g(CDMatrix)f(follo)n(wing)g(a)227 2339
-y(read)g(will)g(usually)g(b)r(e)h(zero,)g(ev)n(en)f(if)h(the)g
-(FitsChan)f(originally)f(con)n(tained)h(some)g(CDi)p
-Ft(_)p Fk(j)g(k)n(eyw)n(ords.)53 b(This)227 2439 y(b)r(eha)n(viour)31
-b(is)g(similar)g(to)g(that)h(of)f(the)h(Enco)r(ding)f(attribute,)h(the)
-g(default)g(v)-5 b(alue)32 b(for)f(whic)n(h)g(is)g(determined)227
-2538 y(b)n(y)i(the)g(con)n(ten)n(ts)g(of)f(the)i(FitsChan)f(at)g(the)g
-(time)g(the)h(attribute)f(is)g(accessed.)51 b(If)34 b(y)n(ou)e(wish)h
-(to)g(retain)f(the)227 2638 y(original)24 b(v)-5 b(alue)25
-b(of)g(the)h(CDMatrix)f(attribute)g(\(that)h(is,)f(the)h(v)-5
-b(alue)25 b(b)r(efore)g(reading)f(the)h(F)-7 b(rameSet\))26
-b(then)f(y)n(ou)227 2738 y(should)j(enquire)f(the)h(default)g(v)-5
-b(alue)27 b(b)r(efore)h(doing)f(the)h(read,)e(and)i(then)g(set)f(that)h
-(v)-5 b(alue)28 b(explicitly)-7 b(.)0 2891 y Fc(T)m(yp)s(e:)227
-2991 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 3145 y
-Fc(Class)k(Applicabilit)m(y:)259 3286 y(FitsChan)427
-3385 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 3589 V 0 3720 a FA(CarLin)268 b Fd(Ignore)38 b(spherical)g(rotations)
-e(on)i(CAR)h(pro)7 b(jections?)265 b FA(CarLin)0 3918
-y Fc(Description:)44 b Fk(This)e(attribute)f(is)g(a)g(b)r(o)r(olean)g
-(v)-5 b(alue)41 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(FITS)g
-Ft(")p Fk(CAR)p Ft(")g Fk(\(plate)g(carree,)i(or)227
-4018 y Ft(")p Fk(Cartesian)p Ft(")p Fk(\))23 b(pro)5
-b(jections)24 b(should)h(b)r(e)g(treated)g(when)g(reading)f(a)g(F)-7
-b(rameSet)25 b(from)g(a)f(foreign)g(enco)r(ded)h(FITS)227
-4117 y(header.)43 b(If)30 b(zero)f(\(the)h(default\),)h(it)g(is)e
-(assumed)h(that)g(the)g(CAR)g(pro)5 b(jection)29 b(conforms)f(to)i(the)
-g(con)n(v)n(en)n(tions)227 4217 y(describ)r(ed)j(in)g(the)h(FITS)f(w)n
-(orld)f(co)r(ordinate)g(system)h(\(FITS-W)n(CS\))h(pap)r(er)e(I)r(I)i
-Ft(")p Fk(Represen)n(tation)d(of)i(Celes-)227 4317 y(tial)h(Co)r
-(ordinates)e(in)h(FITS)p Ft(")h Fk(b)n(y)f(M.)g(Calabretta)g(&)g(E.W.)g
-(Greisen.)54 b(If)34 b(CarLin)e(is)h(non-zero,)h(then)g(these)227
-4416 y(con)n(v)n(en)n(tions)f(are)g(ignored,)i(and)f(it)h(is)f(assumed)
-g(that)h(the)f(mapping)h(from)f(pixel)g(co)r(ordinates)f(to)h
-(celestial)227 4516 y(co)r(ordinates)25 b(is)h(a)g(simple)g(linear)f
-(transformation)g(\(hence)h(the)h(attribute)f(name)g
-Ft(")p Fk(CarLin)p Ft(")p Fk(\).)35 b(This)26 b(is)g(appro-)227
-4616 y(priate)31 b(for)f(some)g(older)g(FITS)h(data)f(whic)n(h)h
-(claims)f(to)h(ha)n(v)n(e)f(a)g Ft(")p Fk(CAR)p Ft(")g
-Fk(pro)5 b(jection,)31 b(but)g(whic)n(h)g(in)g(fact)g(do)227
-4715 y(not)d(conform)g(to)g(the)g(con)n(v)n(en)n(tions)e(of)i(the)h
-(FITS-W)n(CS)f(pap)r(er.)38 b(F)-7 b(urthermore,)27 b(if)i(CarLin)e(is)
-h(non-zero,)e(it)j(is)227 4815 y(assumed)i(that)h(CDEL)-7
-b(T)31 b(and)h(CD)f(k)n(eyw)n(ords)f(are)g(in)i(units)g(of)f(degrees)f
-(rather)h(than)g(radians)f(\(as)i(required)227 4914 y(b)n(y)c(the)g
-(FITS-W)n(CS)f(pap)r(ers\).)227 5041 y(The)34 b(FITS-W)n(CS)g(pap)r(er)
-g(sp)r(eci\014es)g(that)g(headers)f(whic)n(h)h(include)g(a)g(CAR)g(pro)
-5 b(jection)33 b(represen)n(t)g(a)g(linear)227 5141 y(mapping)c(from)f
-(pixel)h(co)r(ordinates)e(to)h Ft(")p Fk(nativ)n(e)g(spherical)g(co)r
-(ordinates)p Ft(")p Fk(,)f(NOT)h(celestial)h(co)r(ordinates.)38
-b(An)227 5240 y(extra)30 b(mapping)g(is)h(then)g(required)f(from)g
-(nativ)n(e)g(spherical)g(to)g(celestial.)45 b(This)31
-b(mapping)f(is)h(a)f(3D)h(rotation)227 5340 y(and)e(so)f(the)h(o)n(v)n
-(erall)e(Mapping)h(from)h(pixel)f(to)h(celestial)f(co)r(ordinates)g(is)
-g(NOT)h(linear.)40 b(See)28 b(the)h(FITS-W)n(CS)227 5440
-y(pap)r(ers)e(for)g(further)h(details.)0 5593 y Fc(T)m(yp)s(e:)227
-5693 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)p eop end
-%%Page: 390 400
-TeXDict begin 390 399 bop 0 52 a FG(390)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(Class)g(Applicabilit)m(y:)259 474 y(FitsChan)427 573
-y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 745 3780 12 v 0 876 a FA(Card)528 b Fd(Index)39 b(of)f(curren)m(t)g
-(FITS)h(card)f(in)h(a)f(FitsChan)526 b FA(Card)0 1014
-y Fc(Description:)44 b Fk(This)28 b(attribute)g(giv)n(es)f(the)h(index)
-g(of)g(the)g Ft(")p Fk(curren)n(t)p Ft(")e Fk(FITS)i(header)f(card)g
-(within)i(a)e(FitsChan,)h(the)227 1113 y(\014rst)23 b(card)g(ha)n(ving)
-f(an)h(index)g(of)g(1.)35 b(The)23 b(c)n(hoice)g(of)g(curren)n(t)f
-(card)h(a\013ects)g(the)g(b)r(eha)n(viour)f(of)h(routines)g(that)g(ac-)
-227 1213 y(cess)i(the)g(con)n(ten)n(ts)f(of)h(the)g(FitsChan,)h(suc)n
-(h)e(as)h(AST)p Ft(_)p Fk(DELFITS,)g(AST)p Ft(_)p Fk(FINDFITS)h(and)f
-(AST)p Ft(_)p Fk(PUTFITS.)227 1331 y(A)h(v)-5 b(alue)25
-b(assigned)f(to)h(Card)f(will)h(p)r(osition)g(the)h(FitsChan)f(at)g(an)
-n(y)g(desired)f(p)r(oin)n(t,)i(so)e(that)i(a)f(particular)e(card)227
-1430 y(within)28 b(it)g(can)f(b)r(e)h(accessed.)36 b(Alternativ)n(ely)
--7 b(,)27 b(the)h(v)-5 b(alue)27 b(of)h(Card)e(ma)n(y)h(b)r(e)h
-(enquired)f(in)h(order)e(to)i(determine)227 1530 y(the)g(curren)n(t)f
-(p)r(osition)g(of)h(a)f(FitsChan.)227 1647 y(The)39 b(default)f(v)-5
-b(alue)38 b(of)g(Card)g(is)g(1.)68 b(This)38 b(means)g(that)h(clearing)
-e(this)h(attribute)g(\(using)h(AST)p Ft(_)p Fk(CLEAR\))227
-1747 y(e\013ectiv)n(ely)26 b Ft(")p Fk(rewinds)p Ft(")e
-Fk(the)j(FitsChan,)f(so)f(that)h(the)g(\014rst)g(card)f(is)h(accessed)e
-(next.)37 b(If)26 b(Card)f(is)h(set)g(to)f(a)h(v)-5 b(alue)227
-1847 y(whic)n(h)33 b(exceeds)e(the)i(total)f(n)n(um)n(b)r(er)h(of)f
-(cards)f(in)i(the)g(FitsChan)f(\(as)g(giv)n(en)g(b)n(y)g(its)h(Ncard)f
-(attribute\),)i(it)f(is)227 1946 y(regarded)23 b(as)h(p)r(oin)n(ting)g
-(at)g(the)h Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)34
-b(In)25 b(this)g(case,)f(the)h(v)-5 b(alue)24 b(returned)g(in)g(resp)r
-(onse)g(to)g(an)g(enquiry)227 2046 y(is)k(alw)n(a)n(ys)d(one)j(more)e
-(than)i(the)g(n)n(um)n(b)r(er)f(of)h(cards)e(in)i(the)g(FitsChan.)0
-2181 y Fc(T)m(yp)s(e:)227 2281 y Fk(In)n(teger.)0 2416
-y Fc(Class)j(Applicabilit)m(y:)259 2539 y(FitsChan)427
-2638 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2810 V 0 2941 a FA(Class)1118 b Fd(Ob)7 b(ject)37 b(class)i(name)1116
-b FA(Class)0 3102 y Fc(Description:)44 b Fk(This)28 b(attribute)g(giv)n
-(es)e(the)i(name)f(of)h(the)g(class)f(to)g(whic)n(h)h(an)f(Ob)5
-b(ject)27 b(b)r(elongs.)0 3238 y Fc(T)m(yp)s(e:)227 3337
-y Fk(Character)f(string,)h(read-only)-7 b(.)0 3473 y
-Fc(Class)31 b(Applicabilit)m(y:)259 3595 y(Ob)5 b(ject)427
-3695 y Fk(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 3866 V 0 3998 a FA(Clean)275 b Fd(Remo)m(v)m(e)38 b(cards)g(used)h
-(whilst)f(reading)f(ev)m(en)h(if)h(an)f(error)1701 4112
-y(o)s(ccurs?)3444 3998 y FA(Clean)0 4250 y Fc(Description:)44
-b Fk(This)27 b(attribute)f(indicates)g(whether)g(or)g(not)g(cards)f
-(should)i(b)r(e)f(remo)n(v)n(ed)f(from)h(the)h(FitsChan)f(if)h(an)227
-4349 y(error)g(o)r(ccurs)h(within)h(AST)p Ft(_)p Fk(READ.)g(A)g
-(succesful)f(read)g(on)g(a)g(FitsChan)h(alw)n(a)n(ys)e(results)h(in)g
-(the)h(remo)n(v)-5 b(al)28 b(of)227 4449 y(the)h(cards)e(whic)n(h)h(w)n
-(ere)f(in)n(v)n(olv)n(ed)f(in)i(the)h(description)e(of)h(the)h
-(returned)e(Ob)5 b(ject.)38 b(Ho)n(w)n(ev)n(er,)26 b(in)j(the)f(ev)n
-(en)n(t)g(of)227 4549 y(an)j(error)e(during)h(the)h(read)g(\(for)f
-(instance)h(if)g(the)g(cards)f(in)h(the)h(FitsChan)f(ha)n(v)n(e)e
-(illegal)h(v)-5 b(alues,)32 b(or)e(if)h(some)227 4648
-y(required)f(cards)f(are)h(missing\))g(no)g(cards)f(will)i(b)r(e)g
-(remo)n(v)n(ed)e(from)h(the)h(FitsChan)f(if)h(the)g(Clean)f(attribute)h
-(is)227 4748 y(zero)c(\(the)h(default\).)37 b(If)28 b(Clean)f(is)h
-(non-zero)e(then)i(an)n(y)e(cards)h(whic)n(h)g(w)n(ere)g(used)g(in)h
-(the)g(ab)r(orted)f(attempt)h(to)227 4848 y(read)f(an)g(ob)5
-b(ject)28 b(will)f(b)r(e)i(remo)n(v)n(ed.)227 4965 y(This)34
-b(pro)n(vides)e(a)h(means)g(of)g Ft(")p Fk(cleaning)p
-Ft(")f Fk(a)h(FitsChan)g(of)h(W)n(CS)f(related)g(cards)f(whic)n(h)i(w)n
-(orks)e(ev)n(en)h(in)g(the)227 5065 y(ev)n(en)n(t)27
-b(of)h(the)g(cards)e(not)i(forming)f(a)g(legal)g(W)n(CS)h(description.)
-0 5200 y Fc(T)m(yp)s(e:)227 5300 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-5435 y Fc(Class)k(Applicabilit)m(y:)259 5558 y(FitsChan)427
-5657 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 391 401
-TeXDict begin 391 400 bop 3643 52 a FG(391)p 0 351 3780
-12 v 0 483 a FA(Clip)641 490 y Fd(Clip)38 b(lines)g(and/or)f(mark)m
-(ers)g(at)h(the)h(Plot)e(b)s(oundary?)3533 483 y FA(Clip)0
-695 y Fc(Description:)44 b Fk(This)33 b(attribute)h(con)n(trols)d
-(whether)i(curv)n(es)f(and)h(mark)n(ers)e(are)h(clipp)r(ed)i(at)e(the)i
-(b)r(oundary)e(of)h(the)227 794 y(graphics)22 b(b)r(o)n(x)g(sp)r
-(eci\014ed)h(when)f(the)h(Plot)g(w)n(as)e(created.)35
-b(A)23 b(v)-5 b(alue)22 b(of)h(3)f(implies)h(b)r(oth)g(mark)n(ers)e
-(and)h(curv)n(es)g(are)227 894 y(clipp)r(ed)27 b(at)e(the)h(Plot)f(b)r
-(oundary)-7 b(.)36 b(A)26 b(v)-5 b(alue)25 b(of)h(2)f(implies)h(mark)n
-(ers)d(are)i(clipp)r(ed,)h(but)h(not)e(curv)n(es.)35
-b(A)26 b(v)-5 b(alue)26 b(of)227 994 y(1)j(implies)g(curv)n(es)e(are)h
-(clipp)r(ed,)i(but)g(not)f(mark)n(ers.)38 b(A)30 b(v)-5
-b(alue)28 b(of)h(zero)f(implies)h(neither)g(curv)n(es)f(nor)g(mark)n
-(ers)227 1093 y(are)35 b(clipp)r(ed.)63 b(The)36 b(default)h(v)-5
-b(alue)36 b(is)g(1.)62 b(Note,)38 b(this)e(attributes)g(con)n(trols)f
-(only)h(the)g(clipping)g(p)r(erformed)227 1193 y(in)n(ternally)e
-(within)h(AST.)f(The)g(underlying)g(graphics)f(system)h(ma)n(y)f(also)g
-(apply)h(clipping.)57 b(In)34 b(suc)n(h)g(cases,)227
-1292 y(remo)n(ving)e(clipping)h(using)g(this)h(attribute)f(do)r(es)g
-(not)h(guaran)n(tee)d(that)j(no)f(clipping)g(will)h(b)r(e)f(visible)h
-(in)f(the)227 1392 y(\014nal)28 b(plot.)227 1521 y(The)33
-b(AST)p Ft(_)p Fk(CLIP)e(routine)h(can)g(b)r(e)g(used)g(to)g(establish)
-g(generalised)f(clipping)h(within)h(arbitrary)d(regions)h(of)227
-1621 y(the)d(Plot.)0 1780 y Fc(T)m(yp)s(e:)227 1880 y
-Fk(In)n(teger.)0 2039 y Fc(Class)j(Applicabilit)m(y:)259
-2185 y(Plot)427 2285 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-p 0 2493 V 0 2625 a FA(ClipOp)175 b Fd(Com)m(bine)37
-b(Plot)g(clipping)g(limits)g(using)h(a)h(b)s(o)s(olean)e(OR?)175
-b FA(ClipOp)0 2828 y Fc(Description:)44 b Fk(This)27
-b(attribute)g(con)n(trols)e(ho)n(w)h(the)h(clipping)g(limits)g(sp)r
-(eci\014ed)g(for)g(eac)n(h)e(axis)h(of)h(a)f(Plot)h(\(using)f(the)227
-2928 y(AST)p Ft(_)p Fk(CLIP)j(routine\))g(are)f(com)n(bined.)41
-b(This,)30 b(in)f(turn,)h(determines)f(whic)n(h)g(parts)f(of)h(the)h
-(graphical)d(output)227 3027 y(will)h(b)r(e)g(visible.)227
-3157 y(If)f(the)g(ClipOp)f(attribute)h(of)g(a)f(Plot)g(is)g(zero)f
-(\(the)i(default\),)h(graphical)d(output)i(is)f(visible)g(only)h(if)g
-(it)f(satis\014es)227 3256 y(the)h(clipping)g(limits)g(on)f(all)g(the)h
-(axes)f(of)g(the)h(clipping)g(F)-7 b(rame)26 b(\(a)g(b)r(o)r(olean)g
-(AND\).)i(Otherwise,)e(if)h(ClipOp)g(is)227 3356 y(non-zero,)f(output)i
-(is)g(visible)f(if)h(it)g(satis\014es)f(the)h(clipping)g(limits)g(on)f
-(one)g(or)g(more)g(axes)g(\(a)g(b)r(o)r(olean)g(OR\).)227
-3485 y(An)g(imp)r(ortan)n(t)f(use)g(of)g(this)h(attribute)f(is)g(to)g
-(allo)n(w)f(areas)g(of)h(a)g(Plot)f(to)h(b)r(e)h(left)g(clear)e(\(e.g.)
-36 b(as)26 b(a)g(bac)n(kground)227 3585 y(for)c(some)f(text\).)36
-b(T)-7 b(o)21 b(ac)n(hiev)n(e)g(this,)i(the)f(lo)n(w)n(er)f(and)g(upp)r
-(er)i(clipping)f(b)r(ounds)g(supplied)g(to)g(AST)p Ft(_)p
-Fk(CLIP)f(should)227 3685 y(b)r(e)28 b(rev)n(ersed,)e(and)i(the)g
-(ClipOp)f(attribute)h(of)f(the)h(Plot)f(should)h(b)r(e)g(set)f(to)h(a)f
-(non-zero)f(v)-5 b(alue.)0 3844 y Fc(T)m(yp)s(e:)227
-3943 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 4102 y
-Fc(Class)k(Applicabilit)m(y:)259 4249 y(Plot)427 4348
-y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p 0
-4557 V 0 4689 a FA(Closed)176 b Fd(Should)38 b(the)g(b)s(oundary)g(b)s
-(e)i(considered)e(to)g(b)s(e)h(inside)f(the)1706 4803
-y(region?)3389 4689 y FA(Closed)0 5002 y Fc(Description:)44
-b Fk(This)28 b(attribute)g(con)n(trols)e(whether)i(p)r(oin)n(ts)f(on)g
-(the)i(b)r(oundary)d(of)i(a)f(Region)g(are)g(considered)g(to)g(b)r(e)
-227 5101 y(inside)c(or)f(outside)h(the)g(region.)34 b(If)24
-b(the)f(attribute)g(v)-5 b(alue)23 b(is)f(non-zero)g(\(the)h
-(default\),)i(p)r(oin)n(ts)e(on)f(the)h(b)r(oundary)227
-5201 y(are)29 b(considered)g(to)h(b)r(e)h(inside)f(the)g(region)f
-(\(that)i(is,)f(the)h(Region)e(is)h Ft(")p Fk(closed)p
-Ft(")p Fk(\).)43 b(Ho)n(w)n(ev)n(er,)28 b(if)j(the)f(attribute)227
-5301 y(v)-5 b(alue)28 b(is)f(zero,)g(p)r(oin)n(ts)g(on)h(the)g(b)r
-(ounary)e(are)h(considered)f(to)i(b)r(e)g(outside)f(the)h(region.)0
-5460 y Fc(T)m(yp)s(e:)227 5559 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-5718 y Fc(Class)k(Applicabilit)m(y:)p eop end
-%%Page: 392 402
-TeXDict begin 392 401 bop 0 52 a FG(392)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(Region)427 451 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 585 y Fc(P)m(oin)m(tList)427 685 y Fk(The)f(v)-5
-b(alue)26 b(of)g(the)h(Closed)e(attribute)i(is)f(ignored)f(b)n(y)h(P)n
-(oin)n(tList)g(regions.)34 b(If)27 b(the)g(P)n(oin)n(tList)e(region)g
-(has)427 784 y(not)32 b(b)r(een)g(negated,)h(then)f(it)g(is)g(alw)n(a)n
-(ys)e(assumed)h(to)g(b)r(e)i(closed.)48 b(If)33 b(the)f(P)n(oin)n
-(tList)e(region)h(has)g(b)r(een)427 884 y(negated,)24
-b(then)h(it)f(is)f(alw)n(a)n(ys)f(assumed)h(to)h(b)r(e)g(op)r(en.)36
-b(This)23 b(is)h(required)f(since)g(p)r(oin)n(ts)h(ha)n(v)n(e)f(zero)f
-(v)n(olume)427 984 y(and)28 b(therefore)e(consist)h(en)n(tirely)g(of)h
-(b)r(oundary)-7 b(.)259 1118 y Fc(CmpRegion)427 1217
-y Fk(The)27 b(default)g(Closed)e(v)-5 b(alue)27 b(for)f(a)g(CmpRegion)g
-(is)g(the)h(Closed)f(v)-5 b(alue)26 b(of)g(its)h(\014rst)f(comp)r(onen)
-n(t)g(Region.)259 1351 y Fc(Stc)427 1451 y Fk(The)i(default)g(Closed)f
-(v)-5 b(alue)27 b(for)g(an)h(Stc)g(is)f(the)h(Closed)f(v)-5
-b(alue)28 b(of)f(its)h(encapsulated)f(Region.)p 0 1653
-3780 12 v 0 1791 a FA(Colour\(elemen)l(t\))1294 1784
-y Fd(Colour)37 b(index)h(for)g(a)g(Plot)1693 1884 y(elemen)m(t)2819
-1791 y FA(Colour\(elemen)l(t\))0 2052 y Fc(Description:)44
-b Fk(This)29 b(attribute)f(determines)g(the)h(colour)e(index)h(used)g
-(when)g(dra)n(wing)f(eac)n(h)h(elemen)n(t)g(of)g(graphical)227
-2152 y(output)21 b(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-2251 y(the)25 b(setting)g Ft(")p Fk(Colour\(title\)=2)p
-Ft(")d Fk(causes)i(the)h(Plot)f(title)h(to)f(b)r(e)h(dra)n(wn)f(using)g
-(colour)f(index)i(2.)35 b(The)25 b(synon)n(ym)227 2351
-y Ft(")p Fk(Color)p Ft(")h Fk(ma)n(y)h(also)f(b)r(e)i(used.)227
-2477 y(The)d(range)f(of)h(in)n(teger)g(colour)f(indices)h(a)n(v)-5
-b(ailable)24 b(and)h(their)g(app)r(earance)e(is)i(determined)h(b)n(y)f
-(the)g(underlying)227 2577 y(graphics)g(system.)36 b(The)26
-b(default)h(b)r(eha)n(viour)e(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)g(b)r(e)h(dra)n(wn)e(using)h(the)g(default)227 2676
-y(colour)e(index)g(supplied)h(b)n(y)f(this)h(graphics)e(system)i
-(\(normally)-7 b(,)24 b(this)h(is)g(lik)n(ely)f(to)g(result)g(in)h
-(white)g(plotting)g(on)227 2776 y(a)i(blac)n(k)g(bac)n(kground,)f(or)h
-(vice)g(v)n(ersa\).)0 2928 y Fc(T)m(yp)s(e:)227 3027
-y Fk(In)n(teger.)0 3179 y Fc(Class)k(Applicabilit)m(y:)259
-3318 y(Plot)427 3418 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 3582 y Fc(Notes:)340 3868 y Fj(\017)45 b Fk(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-4002 y Fj(\017)45 b Fk(If)31 b(no)e(graphical)g(elemen)n(t)h(is)g(sp)r
-(eci\014ed,)h(\(e.g.)44 b Ft(")p Fk(Colour)p Ft(")28
-b Fk(instead)h(of)h Ft(")p Fk(Colour\(title\))p Ft(")p
-Fk(\),)g(then)h(a)e Ft(")p Fk(set)p Ft(")427 4101 y Fk(or)d
-Ft(")p Fk(clear)p Ft(")f Fk(op)r(eration)h(will)g(a\013ect)h(the)g
-(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n(ts,)i
-(while)g(a)f Ft(")p Fk(get)p Ft(")f Fk(or)427 4201 y
-Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)g(will)h(use)f(just)h(the)g
-(Colour\(T)-7 b(extLab\))27 b(v)-5 b(alue.)p 0 4403 V
-0 4533 a FA(Commen)l(t)940 4534 y Fd(Include)39 b(textual)e(commen)m
-(ts)g(in)i(output?)3206 4533 y FA(Commen)l(t)0 4726 y
-Fc(Description:)44 b Fk(This)30 b(is)f(a)h(b)r(o)r(olean)f(attribute)g
-(whic)n(h)h(con)n(trols)e(whether)h(textual)h(commen)n(ts)f(are)g(to)g
-(b)r(e)h(included)227 4825 y(in)j(the)g(output)g(generated)f(b)n(y)g(a)
-g(Channel.)52 b(If)33 b(included,)i(they)e(will)g(describ)r(e)f(what)g
-(eac)n(h)g(item)h(of)g(output)227 4925 y(represen)n(ts.)227
-5051 y(If)28 b(Commen)n(t)g(is)f(non-zero,)f(then)i(commen)n(ts)g(will)
-f(b)r(e)h(included.)38 b(If)28 b(it)g(is)f(zero,)g(commen)n(ts)g(will)h
-(b)r(e)g(omitted.)0 5203 y Fc(T)m(yp)s(e:)227 5302 y
-Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 5454 y Fc(Class)k(Applicabilit)m
-(y:)259 5593 y(Channel)427 5693 y Fk(The)d(default)g(v)-5
-b(alue)27 b(is)h(non-zero)e(for)h(a)g(normal)g(Channel.)p
-eop end
-%%Page: 393 403
-TeXDict begin 393 402 bop 3643 52 a FG(393)259 351 y
-Fc(FitsChan)427 451 y Fk(The)28 b(default)g(v)-5 b(alue)27
-b(is)h(non-zero)e(for)h(a)g(FitsChan.)259 585 y Fc(XmlChan)427
-685 y Fk(The)h(default)g(v)-5 b(alue)27 b(is)h(zero)e(for)i(an)f
-(XmlChan.)p 0 887 3780 12 v 0 1017 a FA(Curren)l(t)1108
-1018 y Fd(F)-10 b(rameSet)38 b(curren)m(t)f(F)-10 b(rame)38
-b(index)3313 1017 y FA(Curren)l(t)0 1187 y Fc(Description:)44
-b Fk(This)38 b(attribute)g(giv)n(es)f(the)h(index)g(of)g(the)g(F)-7
-b(rame)37 b(whic)n(h)h(is)g(to)g(b)r(e)g(regarded)e(as)h(the)h
-Ft(")p Fk(curren)n(t)p Ft(")227 1286 y Fk(F)-7 b(rame)37
-b(within)g(a)g(F)-7 b(rameSet.)65 b(The)37 b(default)g(is)g(the)h(most)
-e(recen)n(t)h(F)-7 b(rame)36 b(added)h(to)g(the)g(F)-7
-b(rameSet)37 b(\(this)227 1386 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h
-(an)g(index)h(equal)f(to)h(the)g(F)-7 b(rameSet's)27
-b(Nframe)g(attribute\).)0 1538 y Fc(T)m(yp)s(e:)227 1638
-y Fk(In)n(teger.)0 1790 y Fc(Class)k(Applicabilit)m(y:)259
-1929 y(F)-8 b(rameSet)427 2029 y Fk(All)28 b(F)-7 b(rameSets)27
-b(ha)n(v)n(e)g(this)h(attribute.)0 2193 y Fc(Notes:)340
-2479 y Fj(\017)45 b Fk(In)n(v)n(erting)17 b(a)h(F)-7
-b(rameSet)19 b(\(in)n(v)n(erting)e(the)i(b)r(o)r(olean)f(sense)f(of)i
-(its)f(In)n(v)n(ert)g(attribute,)i(with)f(the)g(AST)p
-Ft(_)p Fk(INVER)-7 b(T)427 2578 y(routine)27 b(for)h(example\))f(will)h
-(in)n(terc)n(hange)e(the)i(v)-5 b(alues)27 b(of)h(its)f(Base)g(and)g
-(Curren)n(t)g(attributes.)p 0 2780 V 0 2911 a FA(DSBCen)l(tre)849
-2912 y Fd(The)38 b(cen)m(tral)f(p)s(osition)g(of)i(in)m(terest)e(in)h
-(a)h(dual)1409 3026 y(sideband)g(sp)s(ectrum)3108 2911
-y FA(DSBCen)l(tre)0 3218 y Fc(Description:)44 b Fk(This)31
-b(attribute)h(sp)r(eci\014es)e(the)i(cen)n(tral)e(p)r(osition)h(of)g
-(in)n(terest)f(in)i(a)e(dual)h(sideband)g(sp)r(ectrum.)48
-b(Its)227 3318 y(sole)33 b(use)g(is)g(to)g(determine)g(the)h(lo)r(cal)e
-(oscillator)g(frequency)g(\(the)i(frequency)f(whic)n(h)g(marks)f(the)h
-(b)r(oundary)227 3417 y(b)r(et)n(w)n(een)f(the)h(lo)n(w)n(er)e(and)h
-(upp)r(er)g(sidebands\).)50 b(See)32 b(the)h(description)f(of)g(the)g
-(IF)h(\(in)n(termediate)f(frequency\))227 3517 y(attribute)21
-b(for)g(details)f(of)h(ho)n(w)f(the)h(lo)r(cal)g(oscillator)e
-(frequency)h(is)h(calculated.)34 b(The)21 b(sideband)f(con)n(taining)g
-(this)227 3617 y(cen)n(tral)28 b(p)r(osition)g(is)g(referred)g(to)g(as)
-g(the)h Ft(")p Fk(observ)n(ed)p Ft(")d Fk(sideband,)i(and)h(the)f
-(other)g(sideband)h(as)e(the)i Ft(")p Fk(image)p Ft(")227
-3716 y Fk(sideband.)227 3842 y(The)c(v)-5 b(alue)25 b(is)g(accessed)f
-(as)g(a)h(p)r(osition)g(in)g(the)h(sp)r(ectral)e(system)h(represen)n
-(ted)f(b)n(y)g(the)i(Sp)r(ecF)-7 b(rame)25 b(attributes)227
-3942 y(inherited)40 b(b)n(y)f(this)h(class,)h(but)f(is)f(stored)g(in)n
-(ternally)f(as)h(top)r(o)r(cen)n(tric)g(frequency)-7
-b(.)72 b(Th)n(us,)42 b(if)e(the)f(System)227 4041 y(attribute)30
-b(of)g(the)h(DSBSp)r(ecF)-7 b(rame)30 b(is)g(set)g(to)g
-Ft(")p Fk(VRAD)p Ft(")p Fk(,)h(the)f(Unit)h(attribute)f(set)g(to)g
-Ft(")p Fk(m/s)p Ft(")f Fk(and)h(the)g(Std-)227 4141 y(OfRest)i
-(attribute)f(set)h(to)f Ft(")p Fk(LSRK)p Ft(")p Fk(,)g(then)h(v)-5
-b(alues)31 b(for)g(the)h(DSBCen)n(tre)f(attribute)h(should)f(b)r(e)h
-(supplied)f(as)227 4241 y(radio)e(v)n(elo)r(cit)n(y)h(in)g(units)h(of)f
-Ft(")p Fk(m/s)p Ft(")f Fk(relativ)n(e)g(to)h(the)h(kinematic)f(LSR)h
-(\(alternativ)n(e)e(units)h(ma)n(y)g(b)r(e)h(used)f(b)n(y)227
-4340 y(app)r(ending)24 b(a)g(suitable)g(units)g(string)f(to)h(the)g
-(end)h(of)e(the)i(v)-5 b(alue\).)36 b(This)23 b(v)-5
-b(alue)24 b(is)g(then)h(con)n(v)n(erted)d(to)i(top)r(o)r(cen-)227
-4440 y(tric)33 b(frequency)f(and)h(stored.)51 b(If)33
-b(\(sa)n(y\))g(the)g(Unit)g(attribute)g(is)g(subsequen)n(tly)f(c)n
-(hanged)g(to)h Ft(")p Fk(km/s)p Ft(")e Fk(b)r(efore)227
-4539 y(retrieving)e(the)i(curren)n(t)e(v)-5 b(alue)30
-b(of)g(the)g(DSBCen)n(tre)g(attribute,)h(the)f(stored)g(top)r(o)r(cen)n
-(tric)f(frequency)h(will)g(b)r(e)227 4639 y(con)n(v)n(erted)c(bac)n(k)h
-(to)h(LSRK)f(radio)f(v)n(elo)r(cit)n(y)-7 b(,)27 b(this)h(time)g(in)g
-(units)g(of)g Ft(")p Fk(km/s)p Ft(")p Fk(,)e(b)r(efore)h(b)r(eing)h
-(returned.)227 4765 y(The)g(default)g(v)-5 b(alue)27
-b(for)h(this)f(attribute)h(is)g(30)e(GHz.)0 4917 y Fc(T)m(yp)s(e:)227
-5017 y Fk(Floating)h(p)r(oin)n(t.)0 5169 y Fc(Class)k(Applicabilit)m
-(y:)259 5308 y(DSBSp)s(ecF)-8 b(rame)427 5408 y Fk(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)-2
-5572 y Fc(Note)n(:)p eop end
-%%Page: 394 404
-TeXDict begin 394 403 bop 0 52 a FG(394)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(The)32 b(attributes)g(whic)n(h)g(de\014ne)g(the)g
-(transformation)e(to)i(or)f(from)h(top)r(o)r(cen)n(tric)f(frequency)h
-(should)f(b)r(e)427 451 y(assigned)19 b(their)h(correct)f(v)-5
-b(alues)20 b(b)r(efore)g(accessing)e(this)j(attribute.)34
-b(These)20 b(p)r(oten)n(tially)g(include)g(System,)427
-551 y(Unit,)29 b(StdOfRest,)f(ObsLon,)f(ObsLat,)g(ObsAlt,)g(Ep)r(o)r(c)
-n(h,)h(RefRA,)g(RefDec)g(and)g(RestF)-7 b(req.)p 0 763
-3780 12 v 0 894 a FA(DefB1950)598 b Fd(Use)39 b(FK4)g(B1950)e(as)i
-(defaults?)595 b FA(DefB1950)0 1073 y Fc(Description:)44
-b Fk(This)34 b(attribute)g(is)g(a)f(b)r(o)r(olean)h(v)-5
-b(alue)33 b(whic)n(h)h(sp)r(eci\014es)g(a)f(default)h(equino)n(x)f(and)
-h(reference)f(frame)227 1172 y(to)d(use)g(when)g(reading)f(a)h(F)-7
-b(rameSet)30 b(from)f(a)h(FitsChan)g(with)h(a)e(foreign)h(\(i.e.)44
-b(non-nativ)n(e\))29 b(enco)r(ding.)44 b(It)31 b(is)227
-1272 y(only)g(used)f(if)i(the)f(FITS)g(header)f(con)n(tains)g(RA)h(and)
-g(DEC)g(axes)f(but)h(con)n(tains)f(no)g(information)g(ab)r(out)h(the)
-227 1372 y(reference)f(frame)g(or)g(equino)n(x.)46 b(If)31
-b(this)g(is)g(the)g(case,)f(then)i(v)-5 b(alues)30 b(of)h(FK4)f(and)g
-(B1950)f(are)h(assumed)g(if)h(the)227 1471 y(DefB1950)g(attribute)i
-(has)f(a)g(non-zero)f(v)-5 b(alue)33 b(and)f(ICRS)h(is)f(assumed)g(if)h
-(DefB1950)e(is)i(zero.)51 b(The)32 b(default)227 1571
-y(v)-5 b(alue)29 b(for)g(DefB1950)f(dep)r(ends)i(on)f(the)g(v)-5
-b(alue)29 b(of)h(the)f(Enco)r(ding)g(attribute:)40 b(for)29
-b(FITS-W)n(CS)g(enco)r(ding)g(the)227 1670 y(default)f(is)g(zero,)e
-(and)i(for)f(all)g(other)g(enco)r(dings)g(it)h(is)g(one.)0
-1833 y Fc(T)m(yp)s(e:)227 1932 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-2095 y Fc(Class)k(Applicabilit)m(y:)259 2244 y(FitsChan)427
-2343 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2555 V 0 2694 a FA(Digits/Digits\(axis\))1390 2687
-y Fd(Num)m(b)s(er)38 b(of)h(digits)e(of)1665 2798 y(precision)2680
-2694 y FA(Digits/Digits\(axis\))0 3000 y Fc(Description:)44
-b Fk(This)26 b(attribute)g(sp)r(eci\014es)f(ho)n(w)g(man)n(y)g(digits)h
-(of)f(precision)g(are)f(required)h(b)n(y)g(default)h(when)g(a)f(co)r
-(or-)227 3099 y(dinate)g(v)-5 b(alue)24 b(is)h(formatted)f(for)g(a)g(F)
--7 b(rame)24 b(axis)g(\(e.g.)35 b(using)25 b(AST)p Ft(_)p
-Fk(F)n(ORMA)-7 b(T\).)24 b(Its)h(v)-5 b(alue)24 b(ma)n(y)g(b)r(e)h(set)
-g(either)227 3199 y(for)33 b(a)f(F)-7 b(rame)32 b(as)g(a)h(whole,)h(or)
-e(\(b)n(y)g(subscripting)h(the)g(attribute)g(name)f(with)i(the)f(n)n
-(um)n(b)r(er)g(of)f(an)h(axis\))f(for)227 3299 y(eac)n(h)d(axis)g
-(individually)-7 b(.)43 b(An)n(y)30 b(v)-5 b(alue)29
-b(set)h(for)f(an)g(individual)h(axis)f(will)g(o)n(v)n(er-ride)f(the)i
-(v)-5 b(alue)29 b(for)g(the)h(F)-7 b(rame)227 3398 y(as)27
-b(a)g(whole.)227 3529 y(Note)g(that)f(the)h(Digits)g(v)-5
-b(alue)26 b(acts)g(only)g(as)g(a)g(means)g(of)g(determining)g(a)g
-(default)h(F)-7 b(ormat)26 b(string.)36 b(Its)26 b(e\013ects)227
-3629 y(are)32 b(o)n(v)n(er-ridden)f(if)i(a)g(F)-7 b(ormat)32
-b(string)g(is)h(set)g(explicitly)g(for)f(an)g(axis.)52
-b(Ho)n(w)n(ev)n(er,)33 b(if)g(the)g(F)-7 b(ormat)32 b(attribute)227
-3728 y(sp)r(eci\014es)37 b(the)g(precision)f(using)g(the)h(string)f
-Ft(")p Fk(.)p Fj(\003)p Ft(")p Fk(,)i(then)f(the)g(Digits)g(attribute)g
-(is)f(used)h(to)f(determine)h(the)227 3828 y(n)n(um)n(b)r(er)28
-b(of)f(decimal)h(places)e(to)i(pro)r(duce.)0 3990 y Fc(T)m(yp)s(e:)227
-4090 y Fk(In)n(teger.)0 4252 y Fc(Class)j(Applicabilit)m(y:)259
-4401 y(F)-8 b(rame)427 4501 y Fk(The)30 b(default)f(Digits)h(v)-5
-b(alue)29 b(supplied)h(b)n(y)f(the)g(F)-7 b(rame)29 b(class)f(is)i(7.)
-41 b(If)30 b(a)f(v)-5 b(alue)29 b(less)g(than)g(1)g(is)g(supplied,)427
-4601 y(then)f(1)g(is)f(used)h(instead.)259 4740 y Fc(F)-8
-b(rameSet)427 4839 y Fk(The)23 b(Digits)f(attribute)g(of)h(a)f(F)-7
-b(rameSet)22 b(\(or)f(one)h(of)g(its)h(axes\))e(is)i(the)f(same)g(as)g
-(that)g(of)g(its)h(curren)n(t)e(F)-7 b(rame)427 4939
-y(\(as)27 b(sp)r(eci\014ed)h(b)n(y)g(the)g(Curren)n(t)e(attribute\).)
-259 5078 y Fc(Plot)427 5178 y Fk(The)34 b(default)h(Digits)f(v)-5
-b(alue)33 b(used)h(b)n(y)g(the)g(Plot)g(class)f(when)h(dra)n(wing)e
-(annotated)i(axis)f(lab)r(els)g(is)h(the)427 5278 y(smallest)27
-b(v)-5 b(alue)28 b(whic)n(h)f(results)h(in)f(all)h(adjacen)n(t)f(lab)r
-(els)g(b)r(eing)h(distinct.)259 5417 y Fc(TimeF)-8 b(rame)427
-5516 y Fk(The)27 b(Digits)f(attribute)g(is)g(ignored)f(when)i(a)e
-(TimeF)-7 b(rame)26 b(formats)f(a)h(v)-5 b(alue)26 b(as)g(a)g(date)g
-(and)g(time)g(string)427 5616 y(\(see)i(the)g(F)-7 b(ormat)27
-b(attribute\).)p eop end
-%%Page: 395 405
-TeXDict begin 395 404 bop 3643 52 a FG(395)p 0 351 3780
-12 v 0 490 a FA(Direction\(axis\))1173 483 y Fd(Displa)m(y)38
-b(axis)g(in)g(con)m(v)m(en)m(tional)1638 598 y(direction?)2900
-490 y FA(Direction\(axis\))0 749 y Fc(Description:)44
-b Fk(This)c(attribute)g(is)g(a)f(b)r(o)r(olean)g(v)-5
-b(alue)40 b(whic)n(h)g(suggests)e(ho)n(w)h(the)h(axes)f(of)h(a)f(F)-7
-b(rame)40 b(should)f(b)r(e)227 849 y(displa)n(y)n(ed)28
-b(\(e.g.\))39 b(in)29 b(graphical)e(output.)40 b(By)28
-b(default,)h(it)g(has)f(the)h(v)-5 b(alue)28 b(one,)g(indicating)g
-(that)h(they)g(should)227 948 y(b)r(e)f(sho)n(wn)g(in)g(the)g(con)n(v)n
-(en)n(tional)e(sense)h(\(increasing)g(left)h(to)g(righ)n(t)f(for)g(an)h
-(abscissa,)e(and)i(b)r(ottom)g(to)f(top)h(for)227 1048
-y(an)d(ordinate\).)36 b(If)25 b(set)h(to)f(zero,)f(this)i(attribute)f
-(indicates)g(that)h(the)f(direction)g(should)g(b)r(e)h(rev)n(ersed,)e
-(as)g(w)n(ould)227 1148 y(often)k(b)r(e)g(done)f(for)h(an)f
-(astronomical)e(magnitude)j(or)f(a)g(righ)n(t)g(ascension)f(axis.)0
-1290 y Fc(T)m(yp)s(e:)227 1390 y Fk(In)n(teger)h(\(b)r(o)r(olean\).)0
-1532 y Fc(Class)k(Applicabilit)m(y:)259 1662 y(F)-8 b(rame)427
-1761 y Fk(The)29 b(default)g(Direction)f(v)-5 b(alue)28
-b(supplied)h(b)n(y)f(the)h(F)-7 b(rame)27 b(class)h(is)g(1,)g
-(indicating)h(that)f(all)g(axes)g(should)427 1861 y(b)r(e)g(displa)n(y)
-n(ed)f(in)h(the)g(con)n(v)n(en)n(tional)d(direction.)259
-1987 y Fc(SkyF)-8 b(rame)427 2087 y Fk(The)31 b(SkyF)-7
-b(rame)30 b(class)f(re-de\014nes)h(the)h(default)g(Direction)g(v)-5
-b(alue)30 b(to)h(suggest)e(that)i(certain)f(axes)g(\(e.g.)427
-2186 y(righ)n(t)d(ascension\))g(should)g(b)r(e)h(plotted)g(in)g(rev)n
-(erse)e(when)h(appropriate.)259 2312 y Fc(F)-8 b(rameSet)427
-2412 y Fk(The)40 b(Direction)f(attribute)g(of)h(a)e(F)-7
-b(rameSet)40 b(axis)e(is)h(the)h(same)f(as)f(that)i(of)f(its)h(curren)n
-(t)e(F)-7 b(rame)39 b(\(as)427 2511 y(sp)r(eci\014ed)28
-b(b)n(y)f(the)h(Curren)n(t)f(attribute\).)259 2637 y
-Fc(Plot)427 2737 y Fk(The)33 b(Direction)g(attribute)f(of)h(the)g(base)
-f(F)-7 b(rame)32 b(in)h(a)g(Plot)f(is)g(set)h(to)g(indicate)f(the)h
-(sense)g(of)f(the)h(t)n(w)n(o)427 2837 y(graphics)23
-b(axes,)i(as)f(implied)h(b)n(y)f(the)h(graphics)e(b)r(ounding)i(b)r(o)n
-(x)f(supplied)h(when)g(the)g(Plot)f(w)n(as)f(created.)0
-2992 y Fc(Notes:)340 3267 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 3367 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)340
-3493 y Fj(\017)45 b Fk(The)32 b(Direction)f(attribute)h(do)r(es)f(not)h
-(directly)f(a\013ect)h(the)g(b)r(eha)n(viour)f(of)g(the)h(AST)g
-(library)-7 b(.)48 b(Instead,)427 3592 y(it)28 b(serv)n(es)d(as)h(a)h
-(hin)n(t)g(to)g(applications)e(programs)g(ab)r(out)i(the)g(orien)n
-(tation)f(in)h(whic)n(h)g(they)g(ma)n(y)f(wish)h(to)427
-3692 y(displa)n(y)h(an)n(y)f(data)h(asso)r(ciated)e(with)j(the)f(F)-7
-b(rame.)38 b(Applications)28 b(are)f(free)h(to)g(ignore)f(this)h(hin)n
-(t)h(if)f(they)427 3791 y(wish.)p 0 3977 V 0 4109 a FA(Disco)664
-4115 y Fd(PcdMap)39 b(pincushion/barrel)c(distortion)h(co)s(e\016cien)m
-(t)3459 4109 y FA(Disco)0 4301 y Fc(Description:)44 b
-Fk(This)37 b(attribute)f(sp)r(eci\014es)g(the)h(pincushion/barrel)d
-(distortion)h(co)r(e\016cien)n(t)h(used)h(b)n(y)e(a)h(PcdMap.)227
-4401 y(This)29 b(co)r(e\016cien)n(t)h(is)f(set)g(when)g(the)h(PcdMap)e
-(is)i(created,)e(but)i(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)42
-b(If)30 b(the)f(attribute)h(is)227 4501 y(cleared,)k(its)f(default)h(v)
--5 b(alue)33 b(is)g(zero,)g(whic)n(h)g(giv)n(es)f(no)h(distortion.)53
-b(F)-7 b(or)32 b(pincushion)h(distortion,)h(the)g(v)-5
-b(alue)227 4600 y(should)28 b(b)r(e)g(p)r(ositiv)n(e.)36
-b(F)-7 b(or)27 b(barrel)f(distortion,)h(it)h(should)g(b)r(e)g(negativ)n
-(e.)227 4721 y(Note)39 b(that)f(the)h(forw)n(ard)e(transformation)f(of)
-j(a)f(PcdMap)f(applies)h(the)h(distortion)f(sp)r(eci\014ed)g(b)n(y)g
-(this)h(at-)227 4821 y(tribute)d(and)g(the)g(in)n(v)n(erse)e
-(transformation)g(remo)n(v)n(es)g(this)i(distortion.)61
-b(If)36 b(the)g(PcdMap)f(is)h(in)n(v)n(erted)f(\(e.g.)227
-4921 y(using)27 b(AST)p Ft(_)p Fk(INVER)-7 b(T\),)28
-b(then)g(the)g(forw)n(ard)e(transformation)f(will)j(remo)n(v)n(e)e(the)
-h(distortion)g(and)g(the)h(in)n(v)n(erse)227 5020 y(transformation)e
-(will)i(apply)f(it.)38 b(The)27 b(distortion)g(itself)h(will)g(still)g
-(b)r(e)g(giv)n(en)f(b)n(y)g(the)h(same)f(v)-5 b(alue)28
-b(of)f(Disco.)0 5163 y Fc(T)m(yp)s(e:)227 5262 y Fk(Double)h
-(precision.)0 5405 y Fc(Class)j(Applicabilit)m(y:)259
-5534 y(PcdMap)427 5634 y Fk(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)p eop end
-%%Page: 396 406
-TeXDict begin 396 405 bop 0 52 a FG(396)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Domain)744 b Fd(Co)s(ordinate)36
-b(system)i(domain)742 b FA(Domain)0 662 y Fc(Description:)44
-b Fk(This)36 b(attribute)f(con)n(tains)g(a)g(string)g(whic)n(h)g(iden)n
-(ti\014es)h(the)g(ph)n(ysical)e(domain)h(of)h(the)g(co)r(ordinate)227
-762 y(system)28 b(that)g(a)f(F)-7 b(rame)27 b(describ)r(es.)227
-884 y(The)d(Domain)g(attribute)g(also)f(con)n(trols)f(ho)n(w)i(a)f(F)-7
-b(rame)23 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)e(used)h(\(b)n(y)g(AST)p
-Ft(_)p Fk(FINDFRAME\))227 983 y(as)32 b(a)g(template)h(to)g(matc)n(h)f
-(another)g(\(target\))g(F)-7 b(rame.)52 b(It)33 b(do)r(es)f(this)h(b)n
-(y)f(sp)r(ecifying)h(the)g(Domain)f(that)h(the)227 1083
-y(target)f(F)-7 b(rame)33 b(should)g(ha)n(v)n(e)f(in)h(order)f(to)h
-(matc)n(h)g(the)g(template.)54 b(If)33 b(the)h(Domain)f(v)-5
-b(alue)32 b(in)i(the)f(template)227 1182 y(F)-7 b(rame)33
-b(is)h(set,)h(then)f(only)f(targets)f(with)i(the)g(same)f(Domain)h(v)-5
-b(alue)33 b(will)h(b)r(e)g(matc)n(hed.)55 b(If)34 b(the)f(template's)
-227 1282 y(Domain)28 b(v)-5 b(alue)27 b(is)h(not)f(set,)h(ho)n(w)n(ev)n
-(er,)e(then)i(the)g(target's)e(Domain)i(will)f(b)r(e)h(ignored.)0
-1427 y Fc(T)m(yp)s(e:)227 1526 y Fk(String.)0 1671 y
-Fc(Class)j(Applicabilit)m(y:)259 1802 y(F)-8 b(rame)427
-1902 y Fk(The)28 b(default)g(Domain)f(v)-5 b(alue)28
-b(supplied)g(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h(empt)n(y)
-f(string.)259 2030 y Fc(SkyF)-8 b(rame)427 2129 y Fk(The)28
-b(SkyF)-7 b(rame)27 b(class)f(re-de\014nes)h(the)h(default)g(Domain)g
-(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(SKY)p Ft(")p
-Fk(.)259 2257 y Fc(CmpF)-8 b(rame)427 2357 y Fk(The)43
-b(CmpF)-7 b(rame)42 b(class)f(re-de\014nes)g(the)i(default)g(Domain)f
-(v)-5 b(alue)42 b(to)g(b)r(e)h(of)f(the)h(form)f Ft(")p
-Fm(<)p Fk(dom1)p Fm(>)p Fk(-)427 2456 y Fm(<)p Fk(dom2)p
-Fm(>)p Ft(")p Fk(,)35 b(where)g Fm(<)p Fk(dom1)p Fm(>)e
-Fk(and)i Fm(<)p Fk(dom2)p Fm(>)e Fk(are)h(the)i(Domains)e(of)h(the)g(t)
-n(w)n(o)g(comp)r(onen)n(t)f(F)-7 b(rames.)427 2556 y(If)39
-b(b)r(oth)g(these)g(Domains)f(are)g(blank,)j(then)e(the)g(string)f
-Ft(")p Fk(CMP)p Ft(")g Fk(is)g(used)h(as)f(the)h(default)g(Domain)427
-2656 y(name.)259 2784 y Fc(F)-8 b(rameSet)427 2883 y
-Fk(The)25 b(Domain)g(attribute)h(of)f(a)f(F)-7 b(rameSet)25
-b(is)g(the)h(same)e(as)g(that)i(of)f(its)g(curren)n(t)f(F)-7
-b(rame)25 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427 2983 y(the)j(Curren)n(t)f
-(attribute\).)259 3111 y Fc(Sp)s(ecF)-8 b(rame)427 3210
-y Fk(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)h
-(default)g(Domain)f(v)-5 b(alue)28 b(to)f(b)r(e)h Ft(")p
-Fk(SPECTR)n(UM)p Ft(")p Fk(.)259 3338 y Fc(DSBSp)s(ecF)-8
-b(rame)427 3438 y Fk(The)28 b(DSBSp)r(ecF)-7 b(rame)28
-b(class)e(re-de\014nes)h(the)h(default)g(Domain)g(v)-5
-b(alue)27 b(to)g(b)r(e)h Ft(")p Fk(DSBSPECTR)n(UM)p Ft(")p
-Fk(.)259 3566 y Fc(FluxF)-8 b(rame)427 3665 y Fk(The)28
-b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g(default)i(Domain)e
-(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(FLUX)p Ft(")p
-Fk(.)259 3793 y Fc(Sp)s(ecFluxF)-8 b(rame)427 3893 y
-Fk(The)28 b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g(default)i
-(Domain)e(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(SPECTR)n(UM-FLUX)p
-Ft(")p Fk(.)259 4021 y Fc(TimeF)-8 b(rame)427 4120 y
-Fk(The)28 b(TimeF)-7 b(rame)27 b(class)g(re-de\014nes)f(the)i(default)g
-(Domain)g(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fk(TIME)p
-Ft(")p Fk(.)0 4277 y Fc(Notes:)340 4555 y Fj(\017)45
-b Fk(All)28 b(Domain)g(v)-5 b(alues)27 b(are)g(con)n(v)n(erted)f(to)h
-(upp)r(er)h(case)f(and)g(white)h(space)f(is)h(remo)n(v)n(ed)e(b)r
-(efore)h(use.)p 0 4744 V 0 4883 a FA(Dra)l(wAxes\(axis\))1330
-4876 y Fd(Dra)m(w)38 b(axes)g(for)g(a)h(Plot?)2844 4883
-y FA(Dra)l(wAxes\(axis\))0 5073 y Fc(Description:)44
-b Fk(This)f(attribute)g(con)n(trols)f(the)h(app)r(earance)f(of)h(an)f
-(annotated)h(co)r(ordinate)f(grid)g(\(dra)n(wn)g(with)227
-5172 y(the)35 b(AST)p Ft(_)p Fk(GRID)g(routine\))f(b)n(y)g(determining)
-g(whether)g(curv)n(es)f(represen)n(ting)g(co)r(ordinate)g(axes)g
-(should)h(b)r(e)227 5272 y(dra)n(wn.)42 b(It)30 b(tak)n(es)f(a)g
-(separate)f(v)-5 b(alue)30 b(for)f(eac)n(h)g(ph)n(ysical)f(axis)h(of)h
-(a)f(Plot)g(so)g(that,)i(for)e(instance,)h(the)g(setting)227
-5372 y Ft(")p Fk(Dra)n(wAxes\(2\)=0)p Ft(")25 b Fk(sp)r(eci\014es)j
-(that)f(no)h(axis)f(should)g(b)r(e)h(dra)n(wn)f(for)g(the)h(second)f
-(axis.)227 5494 y(If)g(dra)n(wn,)f(these)h(axis)e(lines)i(will)f(pass)g
-(through)g(an)n(y)g(tic)n(k)g(marks)f(asso)r(ciated)h(with)h(n)n
-(umerical)e(lab)r(els)i(dra)n(wn)227 5593 y(to)g(mark)f(v)-5
-b(alues)27 b(on)f(the)h(axes.)36 b(The)27 b(lo)r(cation)f(of)h(these)g
-(tic)n(k)g(marks)f(and)g(lab)r(els)h(\(and)g(hence)g(the)g(axis)f
-(lines\))227 5693 y(is)i(determined)g(b)n(y)f(the)h(Plot's)f(Lab)r(elA)
-n(t\(axis\))g(attribute.)p eop end
-%%Page: 397 407
-TeXDict begin 397 406 bop 3643 52 a FG(397)227 351 y
-Fk(If)29 b(the)f(Dra)n(wAxes)f(v)-5 b(alue)27 b(of)h(a)g(Plot)f(is)h
-(non-zero)e(\(the)i(default\),)h(then)f(axis)f(lines)h(will)g(b)r(e)h
-(dra)n(wn,)e(otherwise)227 451 y(they)h(will)g(b)r(e)g(omitted.)0
-596 y Fc(T)m(yp)s(e:)227 696 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-842 y Fc(Class)k(Applicabilit)m(y:)259 974 y(Plot)427
-1074 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1232 y Fc(Notes:)340 1511 y Fj(\017)45 b Fk(Axis)32 b(lines)h(are)e
-(dra)n(wn)g(indep)r(enden)n(tly)i(of)f(an)n(y)f(co)r(ordinate)g(grid)h
-(lines)g(\(see)g(the)h(Grid)f(attribute\))g(so)427 1610
-y(grid)27 b(lines)h(ma)n(y)f(b)r(e)h(used)f(to)h(substitute)g(for)f
-(axis)g(lines)g(if)i(required.)340 1739 y Fj(\017)45
-b Fk(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r(els)g(and)g
-(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f(of)g(the)427
-1839 y(plotting)c(area)e(\(see)i(the)g(Lab)r(elling)g(attribute\).)37
-b(In)27 b(this)g(case,)f(the)h(v)-5 b(alue)27 b(of)g(the)g(Dra)n(wAxes)
-e(attribute)427 1938 y(is)j(ignored.)340 2067 y Fj(\017)45
-b Fk(If)28 b(no)g(axis)f(is)g(sp)r(eci\014ed,)h(\(e.g.)37
-b Ft(")p Fk(Dra)n(wAxes)p Ft(")26 b Fk(instead)i(of)f
-Ft(")p Fk(Dra)n(wAxes\(2\))p Ft(")p Fk(\),)f(then)j(a)e
-Ft(")p Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427
-2167 y Fk(op)r(eration)d(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 2267 y(will)k(use)g(just)g(the)g(Dra)n(wAxes\(1\))e
-(v)-5 b(alue.)p 0 2458 3780 12 v 0 2590 a FA(Dra)l(wTitle)690
-b Fd(Dra)m(w)37 b(a)i(title)e(for)h(a)g(Plot?)687 b FA(Dra)l(wTitle)0
-2752 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2852 y(AST)p Ft(_)p Fk(GRID)f(routine\))e(b)n(y)g
-(determining)h(whether)f(a)g(title)i(is)e(dra)n(wn.)227
-2975 y(If)f(the)g(Dra)n(wTitle)f(v)-5 b(alue)25 b(of)h(a)f(Plot)f(is)i
-(non-zero)e(\(the)i(default\),)g(then)g(the)g(title)g(will)g(b)r(e)g
-(dra)n(wn,)f(otherwise)f(it)227 3074 y(will)k(b)r(e)g(omitted.)0
-3220 y Fc(T)m(yp)s(e:)227 3319 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-3465 y Fc(Class)k(Applicabilit)m(y:)259 3598 y(Plot)427
-3697 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3826 y Fc(Plot3D)427 3926 y Fk(The)h(Plot3D)f(class)g(ignores)f(this)h
-(attributes,)h(assuming)f(a)g(v)-5 b(alue)27 b(of)h(zero.)0
-4084 y Fc(Notes:)340 4363 y Fj(\017)45 b Fk(The)28 b(text)g(used)f(for)
-h(the)g(title)g(is)f(obtained)h(from)f(the)h(Plot's)f(Title)h
-(attribute.)340 4492 y Fj(\017)45 b Fk(The)28 b(v)n(ertical)e(placemen)
-n(t)i(of)f(the)h(title)h(can)e(b)r(e)h(con)n(trolled)e(using)h(the)h
-(TitleGap)g(attribute.)p 0 4683 V 0 4814 a FA(Dut1)1233
-4815 y Fd(The)39 b(UT1-UTC)d(correction)3482 4814 y FA(Dut1)0
-4973 y Fc(Description:)44 b Fk(This)28 b(attribute)g(is)g(used)g(when)g
-(calculating)f(the)i(Lo)r(cal)e(Apparen)n(t)g(Sidereal)g(Time)i
-(corresp)r(onding)227 5072 y(to)34 b(SkyF)-7 b(rame's)33
-b(Ep)r(o)r(c)n(h)h(v)-5 b(alue)34 b(\(used)h(when)f(con)n(v)n(erting)e
-(p)r(ositions)i(to)g(or)f(from)h(the)h Ft(")p Fk(AzEl)p
-Ft(")e Fk(system\).)56 b(It)227 5172 y(should)29 b(b)r(e)h(set)g(to)f
-(the)h(di\013erence,)g(in)f(seconds,)g(b)r(et)n(w)n(een)h(the)g(UT1)f
-(and)g(UTC)h(timescales)f(at)g(the)h(momen)n(t)227 5272
-y(in)35 b(time)g(represen)n(ted)f(b)n(y)g(the)h(SkyF)-7
-b(rame's)34 b(Ep)r(o)r(c)n(h)g(attribute.)58 b(The)35
-b(v)-5 b(alue)35 b(to)f(use)h(is)f(unpredictable)h(and)227
-5371 y(dep)r(ends)29 b(on)e(c)n(hanges)g(in)h(the)h(earth's)e(rotation)
-g(sp)r(eed.)38 b(V)-7 b(alues)28 b(for)f(UT1-UTC)h(can)f(b)r(e)i
-(obtained)f(from)f(the)227 5471 y(In)n(ternational)g(Earth)f(Rotation)h
-(and)h(Reference)f(Systems)h(Service)e(\(IERS\))i(at)g(h)n
-(ttp://www.iers.org/.)227 5593 y(Curren)n(tly)-7 b(,)20
-b(the)g(correction)e(is)h(alw)n(a)n(ys)e(less)i(than)g(1)g(second.)34
-b(This)19 b(is)g(ensured)g(b)n(y)g(the)g(o)r(ccasional)f(in)n(tro)r
-(duction)227 5693 y(of)29 b(leap)g(seconds)f(in)n(to)h(the)g(UTC)g
-(timescale.)41 b(Therefore)28 b(no)g(great)g(error)f(will)i(usually)g
-(result)g(if)g(no)g(v)-5 b(alue)29 b(is)p eop end
-%%Page: 398 408
-TeXDict begin 398 407 bop 0 52 a FG(398)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(assigned)21 b(to)h(this)h(attribute)f(\(in)h(whic)n(h)f(case)g(a)g
-(default)g(v)-5 b(alue)22 b(of)h(zero)e(is)h(used\).)35
-b(Ho)n(w)n(ev)n(er,)22 b(it)g(is)g(p)r(ossible)g(that)227
-451 y(a)30 b(decision)g(ma)n(y)f(b)r(e)h(tak)n(en)g(at)g(some)f(time)i
-(in)f(the)h(future)f(to)g(abandon)f(the)i(in)n(tro)r(duction)f(of)g
-(leap)f(seconds,)227 551 y(in)f(whic)n(h)g(case)e(the)i(DUT)h
-(correction)d(could)h(gro)n(w)f(to)h(signi\014can)n(t)g(sizes.)0
-700 y Fc(T)m(yp)s(e:)227 799 y Fk(Floating)g(p)r(oin)n(t.)0
-949 y Fc(Class)k(Applicabilit)m(y:)259 1085 y(F)-8 b(rame)427
-1185 y Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)p
-0 1384 3780 12 v 0 1522 a FA(Edge\(axis\))1110 1515 y
-Fd(Whic)m(h)39 b(edges)f(to)g(lab)s(el)g(in)h(a)f(Plot)3157
-1522 y FA(Edge\(axis\))0 1722 y Fc(Description:)44 b
-Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1821 y(AST)p Ft(_)p Fk(GRID)h(routine\))e(b)n(y)h(determining)g(whic)n
-(h)g(edges)f(of)g(a)h(Plot)f(are)g(used)h(for)f(displa)n(ying)g(n)n
-(umerical)g(and)227 1921 y(descriptiv)n(e)36 b(axis)f(lab)r(els.)62
-b(It)36 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)36 b(for)f(eac)n(h)h
-(ph)n(ysical)f(axis)g(of)h(the)h(Plot)e(so)h(that,)i(for)227
-2020 y(instance,)d(the)f(setting)g Ft(")p Fk(Edge\(2\)=left)p
-Ft(")e Fk(sp)r(eci\014es)i(whic)n(h)f(edge)g(to)h(use)f(to)h(displa)n
-(y)f(lab)r(els)g(for)g(the)h(second)227 2120 y(axis.)227
-2245 y(The)j(v)-5 b(alues)36 b Ft(")p Fk(left)p Ft(")p
-Fk(,)j Ft(")p Fk(top)p Ft(")p Fk(,)f Ft(")p Fk(righ)n(t)p
-Ft(")e Fk(and)g Ft(")p Fk(b)r(ottom)p Ft(")g Fk(\(or)g(an)n(y)g
-(abbreviation\))g(can)g(b)r(e)h(supplied)g(for)f(this)227
-2344 y(attribute.)f(The)21 b(default)g(is)f(usually)h
-Ft(")p Fk(b)r(ottom)p Ft(")f Fk(for)g(the)h(\014rst)f(axis)g(and)h
-Ft(")p Fk(left)p Ft(")f Fk(for)h(the)g(second)f(axis.)34
-b(Ho)n(w)n(ev)n(er,)227 2444 y(if)24 b(exterior)f(lab)r(elling)g(w)n
-(as)g(requested)g(\(see)h(the)g(Lab)r(elling)f(attribute\))h(but)h
-(cannot)e(b)r(e)h(pro)r(duced)f(using)h(these)227 2543
-y(default)j(Edge)d(v)-5 b(alues,)26 b(then)h(the)f(default)g(v)-5
-b(alues)25 b(will)h(b)r(e)h(sw)n(app)r(ed)e(if)h(this)g(enables)g
-(exterior)e(lab)r(elling)i(to)f(b)r(e)227 2643 y(pro)r(duced.)0
-2792 y Fc(T)m(yp)s(e:)227 2892 y Fk(String.)0 3041 y
-Fc(Class)31 b(Applicabilit)m(y:)259 3178 y(Plot)427 3277
-y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3410 y Fc(Plot3D)427 3509 y Fk(The)36 b(Plot3D)f(class)f(ignores)g
-(this)i(attributes.)61 b(Instead)35 b(it)h(uses)f(its)h(o)n(wn)f(Ro)r
-(otCorner)f(attribute)i(to)427 3609 y(determine)28 b(whic)n(h)f(edges)g
-(of)h(the)g(3D)f(plot)h(to)g(lab)r(el.)0 3771 y Fc(Notes:)340
-4053 y Fj(\017)45 b Fk(In)29 b(some)e(circumstances,)g(n)n(umerical)g
-(lab)r(els)h(will)h(b)r(e)f(dra)n(wn)f(along)g(in)n(ternal)g(grid)h
-(lines)g(instead)g(of)g(at)427 4153 y(the)i(edges)e(of)i(the)f
-(plotting)h(area)d(\(see)j(the)f(Lab)r(elling)g(attribute\).)43
-b(In)29 b(this)h(case,)e(the)i(Edge)e(attribute)427 4252
-y(only)39 b(a\013ects)h(the)g(placemen)n(t)f(of)g(the)h(descriptiv)n(e)
-f(lab)r(els)g(\(these)h(are)e(dra)n(wn)h(at)g(the)h(edges)f(of)g(the)
-427 4352 y(plotting)28 b(area,)e(rather)h(than)g(along)g(the)h(axis)f
-(lines\).)p 0 4551 V 0 4683 a FA(Enco)t(ding)169 b Fd(System)38
-b(for)g(enco)s(ding)g(Ob)7 b(jects)38 b(as)h(FITS)g(headers)169
-b FA(Enco)t(ding)0 4871 y Fc(Description:)44 b Fk(This)25
-b(attribute)f(sp)r(eci\014es)g(the)h(enco)r(ding)f(system)g(to)g(use)g
-(when)g(AST)h(Ob)5 b(jects)24 b(are)f(stored)h(as)f(FITS)227
-4971 y(header)e(cards)g(in)h(a)g(FitsChan.)35 b(It)22
-b(a\013ects)g(the)g(b)r(eha)n(viour)f(of)h(the)g(AST)p
-Ft(_)p Fk(WRITE)g(and)g(AST)p Ft(_)p Fk(READ)g(routines)227
-5070 y(when)31 b(they)g(are)f(used)h(to)g(transfer)f(an)n(y)g(AST)h(Ob)
-5 b(ject)31 b(to)g(or)f(from)h(an)f(external)g(represen)n(tation)f
-(consisting)227 5170 y(of)j(FITS)g(header)e(cards)h(\(i.e.)49
-b(whenev)n(er)30 b(a)h(write)g(or)g(read)g(op)r(eration)f(is)h(p)r
-(erformed)g(using)h(a)f(FitsChan)g(as)227 5270 y(the)d(I/O)f
-(Channel\).)227 5394 y(There)g(are)f(sev)n(eral)f(w)n(a)n(ys)h(\(con)n
-(v)n(en)n(tions\))g(b)n(y)h(whic)n(h)g(co)r(ordinate)f(system)g
-(information)h(ma)n(y)f(b)r(e)i(represen)n(ted)227 5494
-y(in)j(the)g(form)f(of)h(FITS)g(headers)e(and)i(the)f(Enco)r(ding)g
-(attribute)h(is)f(used)h(to)f(sp)r(ecify)h(whic)n(h)g(of)f(these)h
-(should)227 5593 y(b)r(e)e(used.)37 b(The)28 b(enco)r(ding)g(options)f
-(a)n(v)-5 b(ailable)27 b(are)g(outlined)h(in)g(the)h
-Ft(")p Fk(Enco)r(dings)d(Av)-5 b(ailable)p Ft(")27 b
-Fk(section)h(b)r(elo)n(w,)227 5693 y(and)g(in)g(more)e(detail)i(in)g
-(the)g(sections)f(whic)n(h)g(follo)n(w.)p eop end
-%%Page: 399 409
-TeXDict begin 399 408 bop 3643 52 a FG(399)227 351 y
-Fk(Enco)r(ding)31 b(systems)f(di\013er)h(in)g(the)h(range)d(of)i(p)r
-(ossible)g(Ob)5 b(jects)31 b(\(e.g.)46 b(classes\))30
-b(they)i(can)e(represen)n(t,)h(in)g(the)227 451 y(restrictions)20
-b(they)i(place)f(on)g(these)g(Ob)5 b(jects)21 b(\(e.g.)35
-b(compatibilit)n(y)21 b(with)h(some)e(externally-de\014ned)h(co)r
-(ordinate)227 551 y(system)30 b(mo)r(del\))g(and)g(in)g(the)g(n)n(um)n
-(b)r(er)f(of)h(Ob)5 b(jects)29 b(that)h(can)g(b)r(e)g(stored)f
-(together)f(in)i(an)n(y)f(particular)g(set)h(of)227 650
-y(FITS)i(header)f(cards)g(\(e.g.)48 b(m)n(ultiple)33
-b(Ob)5 b(jects,)32 b(or)f(only)g(a)g(single)g(Ob)5 b(ject\).)49
-b(The)32 b(c)n(hoice)f(of)g(enco)r(ding)h(also)227 750
-y(a\013ects)24 b(the)h(range)d(of)j(external)e(applications)g(whic)n(h)
-h(can)g(p)r(oten)n(tially)g(read)f(and)h(in)n(terpret)g(the)g(FITS)g
-(header)227 849 y(cards)j(pro)r(duced.)227 974 y(The)20
-b(enco)r(ding)f(options)g(a)n(v)-5 b(ailable)18 b(are)h(not)g
-(necessarily)f(m)n(utually)i(exclusiv)n(e,)g(and)f(it)h(ma)n(y)f
-(sometimes)g(b)r(e)h(p)r(os-)227 1074 y(sible)27 b(to)f(store)f(m)n
-(ultiple)i(Ob)5 b(jects)26 b(\(or)g(the)g(same)g(Ob)5
-b(ject)26 b(sev)n(eral)f(times\))i(using)f(di\013eren)n(t)g(enco)r
-(dings)g(within)227 1173 y(the)31 b(same)f(set)g(of)g(FITS)h(header)e
-(cards.)44 b(This)30 b(p)r(ossibilit)n(y)g(increases)f(the)i(lik)n
-(eliho)r(o)r(d)f(of)g(other)g(applications)227 1273 y(b)r(eing)e(able)f
-(to)h(read)e(and)i(in)n(terpret)f(the)h(information.)227
-1398 y(By)33 b(default,)i(a)e(FitsChan)h(will)f(attempt)h(to)f
-(determine)h(whic)n(h)f(enco)r(ding)g(system)g(is)g(already)f(in)h
-(use,)i(and)227 1497 y(will)41 b(set)f(the)g(default)h(Enco)r(ding)e(v)
--5 b(alue)40 b(accordingly)e(\(so)i(that)h(subsequen)n(t)e(I/O)h(op)r
-(erations)e(adopt)i(the)227 1597 y(same)28 b(con)n(v)n(en)n(tions\).)38
-b(It)29 b(do)r(es)f(this)h(b)n(y)f(lo)r(oking)f(for)h(certain)g
-(critical)g(FITS)h(k)n(eyw)n(ords)d(whic)n(h)j(only)f(o)r(ccur)f(in)227
-1697 y(particular)g(enco)r(dings.)38 b(F)-7 b(or)28 b(details)g(of)g
-(ho)n(w)g(this)g(w)n(orks,)f(see)h(the)g Ft(")p Fk(Choice)g(of)g
-(Default)h(Enco)r(ding)p Ft(")e Fk(section)227 1796 y(b)r(elo)n(w.)36
-b(If)26 b(y)n(ou)e(wish)h(to)g(ensure)g(that)g(a)g(particular)f(enco)r
-(ding)h(system)g(is)g(used,)h(indep)r(enden)n(tly)g(of)f(an)n(y)f(FITS)
-227 1896 y(cards)j(already)f(presen)n(t,)h(y)n(ou)g(should)g(set)h(an)f
-(explicit)h(Enco)r(ding)f(v)-5 b(alue)27 b(y)n(ourself.)0
-2046 y Fc(T)m(yp)s(e:)227 2145 y Fk(String.)0 2295 y
-Fc(Class)k(Applicabilit)m(y:)259 2432 y(FitsChan)427
-2532 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)-2
-2694 y Fc(Enco)s(dings)j(Av)-5 b(ailable)n(:)227 2840
-y Fk(The)29 b(Enco)r(ding)f(attribute)h(can)f(tak)n(e)g(an)n(y)g(of)h
-(the)g(follo)n(wing)f(\(case)g(insensitiv)n(e\))h(string)f(v)-5
-b(alues)28 b(to)h(select)f(the)227 2940 y(corresp)r(onding)e(enco)r
-(ding)h(system:)340 3202 y Fj(\017)45 b Ft(")p Fk(DSS)p
-Ft(")p Fk(:)f(Enco)r(des)30 b(co)r(ordinate)g(system)h(information)f
-(in)i(FITS)f(header)f(cards)g(using)h(the)g(con)n(v)n(en)n(tion)427
-3301 y(dev)n(elop)r(ed)19 b(at)h(the)g(Space)f(T)-7 b(elescop)r(e)19
-b(Science)h(Institute)g(\(STScI\))g(for)f(the)h(Digitised)g(Sky)g(Surv)
-n(ey)e(\(DSS\))427 3401 y(astrometric)29 b(plate)h(calibrations.)43
-b(The)30 b(main)h(adv)-5 b(an)n(tages)28 b(of)i(this)h(enco)r(ding)e
-(are)h(that)g(FITS)h(images)427 3501 y(whic)n(h)i(use)g(it)g(are)e
-(widely)i(a)n(v)-5 b(ailable)32 b(and)g(it)h(is)g(understo)r(o)r(d)f(b)
-n(y)h(a)f(n)n(um)n(b)r(er)h(of)f(imp)r(ortan)n(t)h(and)f(w)n(ell-)427
-3600 y(established)25 b(astronom)n(y)e(applications.)36
-b(F)-7 b(or)24 b(further)h(details,)h(see)f(the)g(section)g
-Ft(")p Fk(The)g(DSS)h(Enco)r(ding)p Ft(")427 3700 y Fk(b)r(elo)n(w.)340
-3833 y Fj(\017)45 b Ft(")p Fk(FITS-W)n(CS)p Ft(")p Fk(:)c(Enco)r(des)29
-b(co)r(ordinate)f(system)h(information)h(in)f(FITS)h(header)f(cards)g
-(using)g(the)h(con-)427 3932 y(v)n(en)n(tions)18 b(describ)r(ed)h(in)g
-(the)h(FITS)f(w)n(orld)f(co)r(ordinate)g(system)g(\(FITS-W)n(CS\))i
-(pap)r(ers)e(b)n(y)h(E.W.)g(Greisen,)427 4032 y(M.)26
-b(Calabretta,)f(et)h(al.)36 b(The)26 b(main)f(adv)-5
-b(an)n(tages)24 b(of)i(this)g(enco)r(ding)f(are)g(that)h(it)g(should)g
-(b)r(e)g(understo)r(o)r(d)427 4132 y(b)n(y)g(an)n(y)e(FITS-W)n(CS)i
-(complian)n(t)f(application)g(and)h(is)f(lik)n(ely)h(to)f(b)r(e)h
-(adopted)f(widely)h(for)f(FITS)h(data)f(in)427 4231 y(future.)38
-b(F)-7 b(or)27 b(further)g(details,)g(see)h(the)g(section)f
-Ft(")p Fk(The)g(FITS-W)n(CS)h(Enco)r(ding)p Ft(")e Fk(b)r(elo)n(w.)340
-4364 y Fj(\017)45 b Ft(")p Fk(FITS-PC)p Ft(")p Fk(:)52
-b(Enco)r(des)35 b(co)r(ordinate)g(system)g(information)g(in)h(FITS)g
-(header)f(cards)g(using)g(the)h(con-)427 4464 y(v)n(en)n(tions)31
-b(describ)r(ed)f(in)i(an)f(earlier)f(draft)h(of)g(the)g(FITS)h(w)n
-(orld)e(co)r(ordinate)g(system)h(pap)r(ers)g(b)n(y)g(E.W.)427
-4564 y(Greisen)e(and)h(M.)f(Calabretta.)42 b(This)29
-b(enco)r(ding)g(uses)g(a)g(com)n(bination)g(of)h(CDEL)-7
-b(Ti)29 b(and)g(PCiiijjj)i(k)n(ey-)427 4663 y(w)n(ords)38
-b(to)g(describ)r(e)h(the)g(scale)f(and)g(rotation)g(of)h(the)g(pixel)f
-(axes.)70 b(This)39 b(enco)r(ding)f(is)h(included)g(to)427
-4763 y(supp)r(ort)25 b(existing)f(data)h(and)g(soft)n(w)n(are)e(whic)n
-(h)h(uses)h(these)g(no)n(w)f(sup)r(erceded)h(con)n(v)n(en)n(tions.)34
-b(In)25 b(general,)427 4863 y(the)32 b Ft(")p Fk(FITS-W)n(CS)p
-Ft(")f Fk(enco)r(ding)h(\(whic)n(h)g(uses)f(CDi)p Ft(_)p
-Fk(j)h(or)f(PCi)p Ft(_)p Fk(j)g(k)n(eyw)n(ords)f(to)h(describ)r(e)h
-(the)g(scale)f(and)427 4962 y(rotation\))c(should)g(b)r(e)h(used)g(in)g
-(preference)f(to)g Ft(")p Fk(FITS-PC)p Ft(")p Fk(.)340
-5095 y Fj(\017)45 b Ft(")p Fk(FITS-IRAF)p Ft(")p Fk(:)38
-b(Enco)r(des)27 b(co)r(ordinate)g(system)h(information)g(in)g(FITS)h
-(header)e(cards)g(using)h(the)g(con-)427 5195 y(v)n(en)n(tions)e
-(describ)r(ed)g(in)g(the)h(do)r(cumen)n(t)g Ft(")p Fk(W)-7
-b(orld)25 b(Co)r(ordinate)h(Systems)g(Represen)n(tations)f(Within)i
-(the)427 5295 y(FITS)k(F)-7 b(ormat)p Ft(")29 b Fk(b)n(y)h(R.J.)g
-(Hanisc)n(h)g(and)g(D.G.)h(W)-7 b(ells,)32 b(1988.)43
-b(This)30 b(enco)r(ding)g(is)g(curren)n(tly)g(emplo)n(y)n(ed)427
-5394 y(b)n(y)35 b(the)h(IRAF)g(data)f(analysis)f(facilit)n(y)-7
-b(,)37 b(so)e(its)h(use)f(will)g(facilitate)h(data)f(exc)n(hange)f
-(with)h(IRAF.)i(Its)427 5494 y(main)f(adv)-5 b(an)n(tages)34
-b(are)h(that)h(it)h(is)f(a)f(stable)h(con)n(v)n(en)n(tion)e(whic)n(h)i
-(appro)n(ximates)e(to)i(a)f(subset)h(of)g(the)427 5593
-y(propsed)27 b(FITS-W)n(CS)g(enco)r(ding)g(\(ab)r(o)n(v)n(e\).)35
-b(This)28 b(mak)n(es)e(it)h(suitable)g(as)g(an)g(in)n(terim)g(metho)r
-(d)g(for)g(stor-)427 5693 y(ing)k(co)r(ordinate)f(system)h(information)
-g(in)h(FITS)f(headers)f(un)n(til)i(the)g(FITS-W)n(CS)f(enco)r(ding)g(b)
-r(ecomes)p eop end
-%%Page: 400 410
-TeXDict begin 400 409 bop 0 52 a FG(400)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fk(stable.)37 b(Since)26 b(man)n(y)h(datasets)e(curren)n(tly)h(use)h
-(the)g(FITS-IRAF)g(enco)r(ding,)g(con)n(v)n(ersion)d(of)j(data)f(from)
-427 451 y(FITS-IRAF)i(to)g(the)g(\014nal)f(form)h(of)f(FITS-W)n(CS)h
-(is)f(lik)n(ely)g(to)h(b)r(e)g(w)n(ell)f(supp)r(orted.)340
-583 y Fj(\017)45 b Ft(")p Fk(FITS-AIPS)p Ft(")p Fk(:)39
-b(Enco)r(des)29 b(co)r(ordinate)f(system)h(information)f(in)i(FITS)f
-(header)g(cards)f(using)h(the)g(con-)427 683 y(v)n(en)n(tions)35
-b(originally)f(in)n(tro)r(duced)i(b)n(y)f(the)h(AIPS)g(data)f(analysis)
-g(facilit)n(y)-7 b(.)61 b(This)35 b(is)h(base)f(on)h(the)g(use)427
-782 y(of)h(CDEL)-7 b(Ti)37 b(and)g(CR)n(OT)-7 b(Ai)36
-b(k)n(eu)n(w)n(ords)f(to)i(desrib)r(e)f(the)i(scale)e(and)g(rotation)g
-(of)h(eac)n(h)f(axis.)64 b(These)427 882 y(con)n(v)n(en)n(tions)26
-b(ha)n(v)n(e)h(b)r(een)h(sup)r(erceded)f(but)h(are)f(still)h(widely)f
-(used.)340 1014 y Fj(\017)45 b Ft(")p Fk(FITS-AIPS++)p
-Ft(")p Fk(:)j(Enco)r(des)33 b(co)r(ordinate)g(system)h(information)f
-(in)h(FITS)h(header)e(cards)g(using)g(the)427 1114 y(con)n(v)n(en)n
-(tions)24 b(used)h(b)n(y)g(the)g(AIPS++)f(pro)5 b(ject.)36
-b(This)25 b(is)g(an)g(extension)f(of)h(FITS-AIPS)g(whic)n(h)g(includes)
-427 1213 y(some)i(of)h(the)g(features)f(of)g(FITS-IRAF)i(and)e
-(FITS-PC.)340 1346 y Fj(\017)45 b Ft(")p Fk(FITS-CLASS)p
-Ft(")p Fk(:)34 b(Enco)r(des)22 b(co)r(ordinate)g(system)g(information)g
-(in)h(FITS)g(header)f(cards)f(using)h(the)h(con-)427
-1445 y(v)n(en)n(tions)d(used)i(b)n(y)f(the)g(CLASS)h(pro)5
-b(ject.)34 b(CLASS)21 b(is)g(a)g(soft)n(w)n(are)f(pac)n(k)-5
-b(age)19 b(for)i(reducing)f(single-dish)h(ra-)427 1545
-y(dio)d(and)h(sub-mm)f(sp)r(ectroscopic)f(data.)33 b(See)19
-b(the)g(section)f Ft(")p Fk(CLASS)g(FITS)h(format)p Ft(")e
-Fk(at)h(h)n(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-)
-427 1644 y(h)n(tml/.)340 1777 y Fj(\017)45 b Ft(")p Fk(NA)-7
-b(TIVE)p Ft(")p Fk(:)36 b(Enco)r(des)24 b(AST)i(Ob)5
-b(jects)26 b(in)f(FITS)h(header)f(cards)g(using)g(a)g(con)n(v)n(en)n
-(tion)f(whic)n(h)h(is)h(priv)-5 b(ate)427 1876 y(to)21
-b(the)h(AST)f(library)f(\(but)i(adheres)e(to)h(the)h(general)e(FITS)h
-(standard\))f(and)h(whic)n(h)h(uses)e(FITS)i(k)n(eyw)n(ords)427
-1976 y(that)42 b(will)f(not)g(clash)f(with)i(other)e(enco)r(ding)h
-(systems.)77 b(The)41 b(main)g(adv)-5 b(an)n(tages)39
-b(of)i(this)g(are)f(that)427 2076 y(an)n(y)e(class)f(of)i(AST)f(Ob)5
-b(ject)39 b(ma)n(y)e(b)r(e)i(enco)r(ded,)i(and)d(an)n(y)g
-(\(reasonable\))f(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)38
-b(ma)n(y)427 2175 y(b)r(e)33 b(stored)e(sequen)n(tially)g(in)h(the)h
-(same)e(FITS)h(header.)50 b(This)32 b(mak)n(es)e(FITS)j(headers)e(an)g
-(almost)h(loss-)427 2275 y(less)i(comm)n(unication)f(path)h(for)f
-(passing)g(AST)h(Ob)5 b(jects)34 b(b)r(et)n(w)n(een)g(applications)f
-(\(although)g(all)h(suc)n(h)427 2374 y(applications)27
-b(m)n(ust,)h(of)g(course,)e(mak)n(e)h(use)g(of)h(the)g(AST)g(library)f
-(to)g(in)n(terpret)g(the)h(information\).)37 b(F)-7 b(or)427
-2474 y(further)28 b(details,)f(see)g(the)h(section)g
-Ft(")p Fk(The)f(NA)-7 b(TIVE)28 b(Enco)r(ding)p Ft(")e
-Fk(b)r(elo)n(w.)-2 2635 y Fc(Choice)32 b(of)f(Default)h(Enco)s(ding)n
-(:)227 2781 y Fk(If)d(the)g(Enco)r(ding)f(attribute)g(of)h(a)f
-(FitsChan)h(is)f(not)g(set,)h(the)g(default)g(v)-5 b(alue)28
-b(it)h(tak)n(es)f(is)g(determined)h(b)n(y)f(the)227 2881
-y(presence)d(of)h(certain)f(critical)g(FITS)h(k)n(eyw)n(ords)e(within)j
-(the)f(FitsChan.)36 b(The)26 b(sequence)f(of)h(decisions)f(used)h(to)
-227 2981 y(arriv)n(e)g(at)h(the)h(default)g(v)-5 b(alue)28
-b(is)f(as)g(follo)n(ws:)340 3241 y Fj(\017)45 b Fk(If)26
-b(the)f(FitsChan)g(con)n(tains)f(an)n(y)g(k)n(eyw)n(ords)f(b)r
-(eginning)i(with)g(the)h(string)e Ft(")p Fk(BEGAST)p
-Ft(")p Fk(,)h(then)g(NA)-7 b(TIVE)427 3340 y(enco)r(ding)28
-b(is)f(used,)340 3472 y Fj(\017)45 b Fk(Otherwise,)24
-b(FITS-CLASS)h(is)f(used)g(if)g(the)h(FitsChan)f(con)n(tains)f(a)g(DEL)
--7 b(T)g(A)e(V)25 b(k)n(eyw)n(ord)d(and)i(a)f(k)n(eyw)n(ord)427
-3572 y(of)f(the)g(form)f(VELO-xxx,)h(where)f(xxx)g(indicates)g(one)h
-(of)f(the)h(rest)g(frames)f(used)g(b)n(y)h(class)e(\(e.g.)35
-b Ft(")p Fk(VELO-)427 3672 y(LSR)p Ft(")p Fk(\).)340
-3804 y Fj(\017)45 b Fk(Otherwise,)e(if)e(the)g(FitsChan)f(con)n(tains)g
-(a)g(CTYPE)g(k)n(eyw)n(ord)e(whic)n(h)j(represen)n(ts)d(a)j(sp)r
-(ectral)e(axis)427 3904 y(using)f(the)h(con)n(v)n(en)n(tions)e(of)i
-(the)f(AIPS)h(and)f(AIPS++)g(pro)5 b(jects)37 b(\(e.g.)70
-b Ft(")p Fk(FELO-LSR)p Ft(")p Fk(,)39 b(etc\),)j(then)427
-4003 y(one)31 b(of)g(FITS-AIPS)g(or)f(FITS-AIPS++)g(enco)r(ding)h(is)f
-(used.)48 b(FITS-AIPS++)30 b(is)h(used)f(if)i(an)n(y)e(of)h(the)427
-4103 y(k)n(eyw)n(ords)g(CDi)p Ft(_)p Fk(j,)j(PR)n(OJP)-7
-b(,)32 b(LONPOLE)f(or)g(LA)-7 b(TPOLE)32 b(are)g(found)h(in)g(the)g
-(FitsChan.)52 b(Otherwise)427 4202 y(FITS-AIPS)28 b(is)f(used.)340
-4335 y Fj(\017)45 b Fk(Otherwise,)28 b(if)g(the)h(FitsChan)f(con)n
-(tains)f(a)h(k)n(eyw)n(ord)e(of)i(the)g(form)g Ft(")p
-Fk(PCiiijjj)p Ft(")p Fk(,)g(where)g Ft(")p Fk(i)p Ft(")f
-Fk(and)h Ft(")p Fk(j)p Ft(")g Fk(are)427 4434 y(single)f(digits,)h
-(then)g(FITS-PC)f(enco)r(ding)g(is)h(used,)340 4566 y
-Fj(\017)45 b Fk(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)f(a)g
-(k)n(eyw)n(ord)e(of)j(the)g(form)f Ft(")p Fk(CDiiijjj)p
-Ft(")p Fk(,)i(where)e Ft(")p Fk(i)p Ft(")g Fk(and)g Ft(")p
-Fk(j)p Ft(")h Fk(are)427 4666 y(single)f(digits,)h(then)g(FITS-IRAF)g
-(enco)r(ding)f(is)h(used,)340 4798 y Fj(\017)45 b Fk(Otherwise,)c(if)e
-(the)f(FitsChan)h(con)n(tains)e(a)h(k)n(eyw)n(ord)f(of)h(the)h(form)f
-Ft(")p Fk(CDi)p Ft(_)p Fk(j)p Ft(")p Fk(,)j(and)d(at)h(least)f(one)g
-(of)427 4898 y(RADECSYS,)43 b(PR)n(OJPi,)g(or)d(CjV)-9
-b(ALi)42 b(where)f Ft(")p Fk(i)p Ft(")g Fk(and)g Ft(")p
-Fk(j)p Ft(")g Fk(are)f(single)h(digits,)k(then)d(FITS-IRAF)427
-4998 y(enco)r(ding)28 b(is)f(used.)340 5130 y Fj(\017)45
-b Fk(Otherwise,)26 b(if)i(the)f(FitsChan)f(con)n(tains)g(an)n(y)g(k)n
-(eyw)n(ords)e(of)j(the)g(form)f(PR)n(OJPi,)f(CjV)-9 b(ALi)28
-b(or)e(RADEC-)427 5229 y(SYS,)j(where)e Ft(")p Fk(i)p
-Ft(")g Fk(and)g Ft(")p Fk(j)p Ft(")g Fk(are)g(single)g(digits,)g(then)h
-(FITS-PC)g(enco)r(ding)f(is)g(used.)340 5362 y Fj(\017)45
-b Fk(Otherwise,)34 b(if)g(the)g(FitsChan)g(con)n(tains)e(a)h(k)n(eyw)n
-(ord)f(of)h(the)h(form)f(CR)n(OT)-7 b(Ai,)35 b(where)e
-Ft(")p Fk(i)p Ft(")g Fk(is)g(a)g(single)427 5461 y(digit,)28
-b(then)g(FITS-AIPS)g(enco)r(ding)f(is)g(used.)340 5593
-y Fj(\017)45 b Fk(Otherwise,)36 b(if)f(the)g(FitsChan)g(con)n(tains)f
-(a)g(k)n(eyw)n(ord)f(of)i(the)g(form)f(CR)-9 b(V)g(ALi,)37
-b(where)d Ft(")p Fk(i)p Ft(")g Fk(is)h(a)f(single)427
-5693 y(digit,)28 b(then)g(FITS-W)n(CS)g(enco)r(ding)f(is)h(used.)p
-eop end
-%%Page: 401 411
-TeXDict begin 401 410 bop 3643 52 a FG(401)340 351 y
-Fj(\017)45 b Fk(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)e
-(the)i Ft(")p Fk(PL)-7 b(TRAH)p Ft(")27 b Fk(k)n(eyw)n(ord,)f(then)i
-(DSS)h(enco)r(ding)e(is)g(used,)340 486 y Fj(\017)45
-b Fk(Otherwise,)37 b(if)e(none)g(of)h(these)f(conditions)g(is)g(met)h
-(\(as)f(w)n(ould)f(b)r(e)i(the)g(case)e(when)i(using)f(an)g(empt)n(y)
-427 585 y(FitsChan\),)28 b(then)g(NA)-7 b(TIVE)28 b(enco)r(ding)g(is)f
-(used.)227 751 y(Except)e(for)g(the)g(NA)-7 b(TIVE)25
-b(and)g(DSS)h(enco)r(dings,)f(all)g(the)h(ab)r(o)n(v)n(e)d(c)n(hec)n
-(ks)h(also)g(require)g(that)i(the)f(header)f(con-)227
-850 y(tains)g(at)g(least)g(one)g(CTYPE,)f(CRPIX)i(and)f(CR)-9
-b(V)g(AL)24 b(k)n(eyw)n(ord)e(\(otherwise)i(the)g(c)n(hec)n(king)f(pro)
-r(cess)g(con)n(tin)n(ues)227 950 y(to)28 b(the)g(next)g(case\).)227
-1076 y(Setting)g(an)g(explicit)f(v)-5 b(alue)28 b(for)f(the)h(Enco)r
-(ding)f(attribute)h(alw)n(a)n(ys)d(o)n(v)n(er-rides)g(this)j(default)g
-(b)r(eha)n(viour.)227 1203 y(Note)h(that)g(when)g(writing)f
-(information)g(to)h(a)f(FitsChan,)h(the)g(c)n(hoice)f(of)h(enco)r(ding)
-f(will)h(dep)r(end)h(greatly)d(on)227 1302 y(the)d(t)n(yp)r(e)f(of)g
-(application)g(y)n(ou)f(exp)r(ect)i(to)f(b)r(e)g(reading)f(the)i
-(information)f(in)g(future.)36 b(If)23 b(y)n(ou)g(do)g(not)g(kno)n(w)f
-(this,)227 1402 y(there)32 b(ma)n(y)f(sometimes)g(b)r(e)h(an)f(adv)-5
-b(an)n(tage)30 b(in)i(writing)f(the)h(information)f(sev)n(eral)f
-(times,)j(using)e(a)g(di\013eren)n(t)227 1501 y(enco)r(ding)d(on)f(eac)
-n(h)g(o)r(ccasion.)-2 1654 y Fc(The)32 b(DSS)h(Enco)s(ding)n(:)227
-1801 y Fk(The)g(DSS)h(enco)r(ding)f(uses)f(FITS)i(header)e(cards)g(to)h
-(store)f(a)g(m)n(ulti-term)h(p)r(olynomial)g(whic)n(h)g(relates)f
-(pixel)227 1900 y(p)r(ositions)20 b(on)f(a)h(digitised)f(photographic)g
-(plate)g(to)h(celestial)g(co)r(ordinates)e(\(righ)n(t)h(ascension)g
-(and)h(declination\).)227 2000 y(This)33 b(enco)r(ding)g(ma)n(y)f(only)
-h(b)r(e)g(used)g(to)g(store)f(a)h(single)f(AST)i(Ob)5
-b(ject)33 b(in)g(an)n(y)f(set)h(of)g(FITS)g(header)g(cards,)227
-2099 y(and)27 b(that)h(Ob)5 b(ject)27 b(m)n(ust)h(b)r(e)f(a)g(F)-7
-b(rameSet)27 b(whic)n(h)g(conforms)g(to)g(the)h(STScI/DSS)f(co)r
-(ordinate)f(system)h(mo)r(del)227 2199 y(\(this)g(means)f(the)h
-(Mapping)g(whic)n(h)f(relates)g(its)g(base)g(and)g(curren)n(t)g(F)-7
-b(rames)26 b(m)n(ust)g(include)h(either)g(a)f(DssMap)227
-2299 y(or)h(a)g(WcsMap)h(with)g(t)n(yp)r(e)f(AST)p Ft(__)p
-Fk(T)-7 b(AN)28 b(or)f(AST)p Ft(__)p Fk(TPN\).)227 2425
-y(When)h(reading)f(a)g(DSS)h(enco)r(ded)g(Ob)5 b(ject)28
-b(\(using)f(AST)p Ft(_)p Fk(READ\),)h(the)g(FitsChan)g(concerned)f(m)n
-(ust)g(initially)227 2525 y(b)r(e)38 b(p)r(ositioned)f(at)g(the)h
-(\014rst)f(card)f(\(its)i(Card)f(attribute)g(m)n(ust)h(equal)e(1\))h
-(and)h(the)f(result)g(of)h(the)f(read,)i(if)227 2624
-y(successful,)34 b(will)f(alw)n(a)n(ys)d(b)r(e)j(a)g(p)r(oin)n(ter)f
-(to)g(a)h(F)-7 b(rameSet.)51 b(The)33 b(base)f(F)-7 b(rame)32
-b(of)h(this)g(F)-7 b(rameSet)32 b(represen)n(ts)227 2724
-y(DSS)27 b(pixel)g(co)r(ordinates,)e(and)h(the)h(curren)n(t)e(F)-7
-b(rame)26 b(represen)n(ts)f(DSS)i(celestial)f(co)r(ordinates.)35
-b(Suc)n(h)26 b(a)g(read)g(is)227 2823 y(alw)n(a)n(ys)c(destructiv)n(e)i
-(and)f(causes)g(the)h(FITS)h(header)e(cards)f(required)h(for)g(the)i
-(construction)e(of)h(the)g(F)-7 b(rameSet)227 2923 y(to)27
-b(b)r(e)g(remo)n(v)n(ed)f(from)g(the)i(FitsChan,)f(whic)n(h)g(is)f
-(then)i(left)f(p)r(ositioned)g(at)g(the)g Ft(")p Fk(end-of-\014le)p
-Ft(")p Fk(.)36 b(A)27 b(subsequen)n(t)227 3023 y(read)h(using)h(the)g
-(same)f(enco)r(ding)g(will)h(therefore)f(not)h(return)f(another)g(F)-7
-b(rameSet,)29 b(ev)n(en)f(if)i(the)f(FitsChan)g(is)227
-3122 y(rew)n(ound.)227 3249 y(When)35 b(AST)p Ft(_)p
-Fk(WRITE)g(is)f(used)h(to)f(store)g(a)g(F)-7 b(rameSet)34
-b(using)g(DSS)i(enco)r(ding,)g(an)e(attempt)h(is)g(\014rst)f(made)227
-3348 y(to)d(simplify)g(the)h(F)-7 b(rameSet)30 b(to)h(see)f(if)i(it)f
-(conforms)f(to)h(the)g(DSS)g(mo)r(del.)47 b(Sp)r(eci\014cally)-7
-b(,)32 b(the)f(curren)n(t)f(F)-7 b(rame)227 3448 y(m)n(ust)36
-b(b)r(e)h(a)e(FK5)h(SkyF)-7 b(rame;)39 b(the)d(pro)5
-b(jection)35 b(m)n(ust)h(b)r(e)h(a)e(tangen)n(t)h(plane)g(\(gnomonic\))
-f(pro)5 b(jection)35 b(with)227 3547 y(p)r(olynomial)26
-b(corrections)e(conforming)h(to)h(DSS)h(requiremen)n(ts,)f(and)g(north)
-g(m)n(ust)g(b)r(e)g(parallel)g(to)g(the)g(second)227
-3647 y(base)h(F)-7 b(rame)27 b(axis.)227 3773 y(If)36
-b(the)g(simpli\014cation)f(pro)r(cess)f(succeeds,)j(a)e(description)g
-(of)g(the)h(F)-7 b(rameSet)35 b(is)h(written)f(to)h(the)g(FitsChan)227
-3873 y(using)31 b(appropriate)e(DSS)j(FITS)g(header)e(cards.)46
-b(The)32 b(base)e(F)-7 b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31
-b(is)g(used)g(to)g(form)g(the)227 3973 y(DSS)37 b(pixel)g(co)r
-(ordinate)e(system)h(and)g(the)h(curren)n(t)e(F)-7 b(rame)36
-b(giv)n(es)f(the)i(DSS)g(celestial)f(co)r(ordinate)f(system.)227
-4072 y(A)c(successful)g(write)g(op)r(eration)e(will)i(o)n(v)n(er-write)
-e(an)n(y)h(existing)g(DSS)i(enco)r(ded)f(data)f(in)h(the)g(FitsChan,)h
-(but)227 4172 y(will)f(not)g(a\013ect)g(other)f(\(non-DSS\))h(header)f
-(cards.)45 b(If)31 b(a)g(destructiv)n(e)f(read)g(of)g(a)h(DSS)g(enco)r
-(ded)g(Ob)5 b(ject)30 b(has)227 4271 y(previously)h(o)r(ccurred,)g
-(then)h(an)g(attempt)g(will)g(b)r(e)g(made)f(to)h(store)f(the)h(FITS)g
-(header)e(cards)h(bac)n(k)g(in)h(their)227 4371 y(original)26
-b(lo)r(cations.)227 4497 y(If)h(an)g(attempt)g(to)f(simplify)i(a)e(F)-7
-b(rameSet)26 b(to)h(conform)f(to)g(the)h(DSS)g(mo)r(del)g(fails)g(\(or)
-f(if)h(the)g(Ob)5 b(ject)26 b(supplied)227 4597 y(is)33
-b(not)g(a)g(F)-7 b(rameSet\),)34 b(then)f(no)g(data)f(will)i(b)r(e)f
-(written)g(to)g(the)g(FitsChan)g(and)g(AST)p Ft(_)p Fk(WRITE)g(will)g
-(return)227 4697 y(zero.)j(No)28 b(error)d(will)j(result.)-2
-4850 y Fc(The)k(FITS-W)m(CS)h(Enco)s(ding)n(:)227 4996
-y Fk(The)k(FITS-W)n(CS)g(con)n(v)n(en)n(tion)e(uses)h(FITS)h(header)e
-(cards)h(to)g(describ)r(e)h(the)g(relationship)e(b)r(et)n(w)n(een)i
-(pixels)227 5095 y(in)30 b(an)f(image)f(\(not)h(necessarily)f
-(2-dimensional\))g(and)h(one)g(or)f(more)g(related)h
-Ft(")p Fk(w)n(orld)e(co)r(ordinate)h(systems)p Ft(")p
-Fk(.)227 5195 y(The)39 b(FITS-W)n(CS)g(enco)r(ding)f(ma)n(y)g(only)h(b)
-r(e)g(used)g(to)f(store)g(a)h(single)f(AST)h(Ob)5 b(ject)39
-b(in)g(an)n(y)f(set)h(of)f(FITS)227 5295 y(header)27
-b(cards,)g(and)h(that)g(Ob)5 b(ject)28 b(m)n(ust)g(b)r(e)h(a)e(F)-7
-b(rameSet)28 b(whic)n(h)g(conforms)f(to)g(the)i(FITS-W)n(CS)f(mo)r(del)
-g(\(the)227 5394 y(F)-7 b(rameSet)27 b(ma)n(y)-7 b(,)27
-b(ho)n(w)n(ev)n(er,)e(con)n(tain)h(m)n(ultiple)i(F)-7
-b(rames)26 b(whic)n(h)h(will)g(b)r(e)h(result)f(in)g(m)n(ultiple)g
-(FITS)h Ft(")p Fk(alternate)227 5494 y(axis)h(descriptions)p
-Ft(")p Fk(\).)40 b(Details)29 b(of)g(the)g(use)g(made)g(b)n(y)g(this)g
-(Enco)r(ding)f(of)h(the)h(con)n(v)n(en)n(tions)d(describ)r(ed)i(in)g
-(the)227 5593 y(FITS-W)n(CS)22 b(pap)r(ers)g(are)f(giv)n(en)g(in)h(the)
-h(app)r(endix)f Ft(")p Fk(FITS-W)n(CS)g(Co)n(v)n(erage)p
-Ft(")c Fk(of)k(this)h(do)r(cumen)n(t.)35 b(A)22 b(few)h(main)227
-5693 y(p)r(oin)n(ts)28 b(are)e(describ)r(ed)i(b)r(elo)n(w.)p
-eop end
-%%Page: 402 412
-TeXDict begin 402 411 bop 0 52 a FG(402)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(The)26 b(rotation)e(and)i(scaling)e(of)i(the)g(in)n(termediate)f
-(w)n(orld)g(co)r(ordinate)f(system)h(can)h(b)r(e)g(sp)r(eci\014ed)g
-(using)f(either)227 451 y Ft(")p Fk(CDi)p Ft(_)p Fk(j)p
-Ft(")30 b Fk(k)n(eyw)n(ords,)f(or)h Ft(")p Fk(PCi)p Ft(_)p
-Fk(j)p Ft(")f Fk(together)g(with)i Ft(")p Fk(CDEL)-7
-b(Ti)p Ft(")30 b Fk(k)n(eyw)n(ords.)43 b(When)31 b(writing)f(a)g(F)-7
-b(rameSet)30 b(to)227 551 y(a)f(FitsChan,)g(the)g(the)g(v)-5
-b(alue)28 b(of)h(the)g(CDMatrix)g(attribute)g(of)f(the)h(FitsChan)g
-(determines)g(whic)n(h)f(system)h(is)227 650 y(used.)227
-770 y(In)d(addition,)f(this)g(enco)r(ding)g(supp)r(orts)g(the)g
-Ft(")p Fk(T)-7 b(AN)26 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fk(pro)5 b(jection)24 b(whic)n(h)227 870 y(w)n(as)38
-b(included)h(in)g(a)f(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r(er,)h(but)
-g(w)n(as)d(not)i(presen)n(t)f(in)h(the)g(\014nal)f(v)n(ersion.)68
-b(A)227 969 y Ft(")p Fk(T)-7 b(AN)38 b(with)h(p)r(olynomial)e
-(correction)f(terms)p Ft(")h Fk(pro)5 b(jection)37 b(is)g(represen)n
-(ted)g(using)g(a)h(WcsMap)f(with)h(t)n(yp)r(e)227 1069
-y(AST)p Ft(__)p Fk(TPN)28 b(\(rather)g(than)h(AST)p Ft(__)p
-Fk(T)-7 b(AN)28 b(whic)n(h)h(is)f(used)h(to)f(represen)n(t)f(simple)i
-(T)-7 b(AN)29 b(pro)5 b(jections\).)39 b(When)227 1168
-y(reading)20 b(a)g(FITS)g(header,)h(a)f(CTYPE)g(k)n(eyw)n(ord)f(v)-5
-b(alue)20 b(including)g(a)g Ft(")p Fk(-T)-7 b(AN)p Ft(")20
-b Fk(co)r(de)h(results)e(in)i(an)f(AST)p Ft(__)p Fk(TPN)227
-1268 y(pro)5 b(jection)28 b(if)h(there)f(are)f(an)n(y)h(pro)5
-b(jection)27 b(parameters)g(\(giv)n(en)h(b)n(y)g(the)g(PVi)p
-Ft(_)p Fk(m)h(k)n(eyw)n(ords\))d(asso)r(ciated)h(with)227
-1368 y(the)35 b(latitude)f(axis,)h(or)e(if)i(there)f(are)f(pro)5
-b(jection)33 b(parameters)f(asso)r(ciated)h(with)h(the)h(longitude)f
-(axis)f(for)g(m)227 1467 y(greater)28 b(than)h(4.)41
-b(When)30 b(writing)f(a)g(F)-7 b(rameSet)29 b(to)g(a)f(FITS)i(header,)f
-(an)g(AST)p Ft(__)p Fk(TPN)f(pro)5 b(jection)28 b(giv)n(es)g(rise)227
-1567 y(to)c(a)g(CTYPE)f(v)-5 b(alue)24 b(including)h(the)f(normal)f
-Ft(")p Fk(-T)-7 b(AN)p Ft(")24 b Fk(co)r(de,)g(but)h(the)g(pro)5
-b(jection)23 b(parameters)f(are)h(stored)g(in)227 1667
-y(k)n(eyw)n(ords)e(with)i(names)f Ft(")p Fk(QVi)p Ft(_)p
-Fk(m)p Ft(")p Fk(,)g(instead)g(of)h(the)g(usual)f Ft(")p
-Fk(PVi)p Ft(_)p Fk(m)p Ft(")p Fk(.)34 b(Since)22 b(these)h(QV)f
-(parameters)f(are)h(not)227 1766 y(part)28 b(of)g(the)h(FITS-W)n(CS)f
-(standard)f(they)h(will)h(b)r(e)f(ignored)f(b)n(y)h(other)g(non-AST)g
-(soft)n(w)n(are,)e(resulting)i(in)g(the)227 1866 y(W)n(CS)h(b)r(eing)g
-(in)n(terpreted)f(as)g(a)g(simple)h(T)-7 b(AN)30 b(pro)5
-b(jection)27 b(without)i(an)n(y)f(corrections.)39 b(This)28
-b(should)h(b)r(e)g(seen)227 1965 y(as)k(an)g(in)n(terim)g(solution)g
-(un)n(til)g(suc)n(h)g(time)h(as)f(an)g(agreed)e(metho)r(d)j(for)f
-(describing)f(pro)5 b(jection)33 b(distortions)227 2065
-y(within)c(FITS-W)n(CS)e(has)g(b)r(een)h(published.)227
-2185 y(AST)38 b(extends)g(the)g(range)e(of)h(celestial)g(co)r(ordinate)
-g(sytstems)g(whic)n(h)h(ma)n(y)f(b)r(e)g(describ)r(ed)h(using)f(this)h
-(en-)227 2284 y(co)r(ding)33 b(b)n(y)g(inclusion)h(of)f(the)h(allo)n
-(wing)e(the)i(use)f(of)g Ft(")p Fk(AZ{)p Ft(")f Fk(and)i
-Ft(")p Fk(EL{)p Ft(")d Fk(as)i(the)h(co)r(ordinate)e(sp)r
-(eci\014cation)227 2384 y(within)f(CTYPE)e(v)-5 b(alues.)44
-b(These)30 b(form)g(a)g(longitude/latitude)f(pair)h(of)g(axes)f(whic)n
-(h)h(describ)r(e)g(azim)n(uth)g(and)227 2484 y(elev)-5
-b(ation.)37 b(The)27 b(geographic)e(p)r(osition)i(of)h(the)f(observ)n
-(er)f(should)h(b)r(e)g(supplied)h(using)f(the)h(OBSGEO-X/Y/Z)227
-2583 y(k)n(eyw)n(ords)f(describ)r(ed)i(in)g(FITS-W)n(CS)g(pap)r(er)f(I)
-r(I)r(I.)i(Curren)n(tly)-7 b(,)28 b(a)h(simple)g(mo)r(del)g(is)g(used)g
-(whic)n(h)g(includes)g(di-)227 2683 y(urnal)f(ab)r(erration,)e(but)j
-(ignores)d(atmospheric)h(refraction,)g(p)r(olar)g(motion,)h(etc.)39
-b(These)27 b(ma)n(y)g(b)r(e)i(added)f(in)g(a)227 2783
-y(leter)g(release.)227 2902 y(When)33 b(reading)f(a)g(FITS-W)n(CS)h
-(enco)r(ded)g(Ob)5 b(ject)32 b(\(using)h(AST)p Ft(_)p
-Fk(READ\),)g(the)g(FitsChan)g(concerned)e(m)n(ust)227
-3002 y(initially)25 b(b)r(e)g(p)r(ositioned)f(at)h(the)g(\014rst)f
-(card)g(\(its)h(Card)f(attribute)h(m)n(ust)f(equal)h(1\))f(and)h(the)g
-(result)f(of)g(the)h(read,)227 3102 y(if)k(successful,)f(will)g(alw)n
-(a)n(ys)f(b)r(e)h(a)g(p)r(oin)n(ter)g(to)g(a)g(F)-7 b(rameSet.)38
-b(The)28 b(base)g(F)-7 b(rame)28 b(of)g(this)g(F)-7 b(rameSet)28
-b(represen)n(ts)227 3201 y(FITS-W)n(CS)36 b(pixel)h(co)r(ordinates,)f
-(and)g(the)h(curren)n(t)e(F)-7 b(rame)36 b(represen)n(ts)e(the)j(ph)n
-(ysical)e(co)r(ordinate)g(system)227 3301 y(describ)r(ed)j(b)n(y)f(the)
-i(FITS-W)n(CS)f(primary)e(axis)h(descriptions.)67 b(If)39
-b(secondary)d(axis)h(descriptions)g(are)g(also)227 3400
-y(presen)n(t,)e(then)f(the)g(F)-7 b(rameSet)33 b(ma)n(y)g(con)n(tain)f
-(additional)h(\(non-curren)n(t\))g(F)-7 b(rames)33 b(whic)n(h)g
-(represen)n(t)g(these.)227 3500 y(Suc)n(h)23 b(a)f(read)g(is)h(alw)n(a)
-n(ys)e(destructiv)n(e)h(and)h(causes)f(the)h(FITS)g(header)f(cards)f
-(required)h(for)h(the)g(construction)f(of)227 3600 y(the)28
-b(F)-7 b(rameSet)28 b(to)f(b)r(e)h(remo)n(v)n(ed)f(from)g(the)h
-(FitsChan,)g(whic)n(h)g(is)f(then)h(left)h(p)r(ositioned)e(at)h(the)g
-Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)227 3699 y(A)d(subsequen)n(t)f
-(read)f(using)h(the)h(same)e(enco)r(ding)h(will)g(therefore)g(not)g
-(return)g(another)f(F)-7 b(rameSet,)25 b(ev)n(en)e(if)i(the)227
-3799 y(FitsChan)j(is)f(rew)n(ound.)227 3919 y(When)34
-b(AST)p Ft(_)p Fk(WRITE)f(is)f(used)h(to)g(store)f(a)h(F)-7
-b(rameSet)32 b(using)h(FITS-W)n(CS)g(enco)r(ding,)h(an)e(attempt)i(is)f
-(\014rst)227 4018 y(made)25 b(to)h(simplify)g(the)f(F)-7
-b(rameSet)25 b(to)h(see)f(if)g(it)h(conforms)f(to)g(the)h(FITS-W)n(CS)f
-(mo)r(del.)36 b(If)26 b(this)g(simpli\014cation)227 4118
-y(pro)r(cess)39 b(succeeds)g(\(as)g(it)h(often)f(should,)k(as)38
-b(the)i(mo)r(del)g(is)f(reasonably)f(\015exible\),)43
-b(a)c(description)g(of)g(the)227 4218 y(F)-7 b(rameSet)35
-b(is)g(written)h(to)f(the)g(FitsChan)h(using)e(appropriate)g(FITS)h
-(header)g(cards.)58 b(The)35 b(base)g(F)-7 b(rame)35
-b(of)227 4317 y(the)27 b(F)-7 b(rameSet)26 b(is)h(used)f(to)g(form)g
-(the)h(FITS-W)n(CS)g(pixel)f(co)r(ordinate)f(system)h(and)h(the)f
-(curren)n(t)g(F)-7 b(rame)26 b(giv)n(es)227 4417 y(the)j(ph)n(ysical)e
-(co)r(ordinate)g(system)h(to)f(b)r(e)i(describ)r(ed)f(b)n(y)g(the)g
-(FITS-W)n(CS)g(primary)f(axis)g(descriptions.)38 b(An)n(y)227
-4517 y(additional)32 b(F)-7 b(rames)32 b(in)h(the)g(F)-7
-b(rameSet)32 b(ma)n(y)g(b)r(e)h(used)f(to)h(construct)f(secondary)e
-(axis)i(descriptions,)h(where)227 4616 y(appropriate.)227
-4736 y(A)24 b(successful)f(write)h(op)r(eration)e(will)i(o)n(v)n
-(er-write)d(an)n(y)i(existing)g(FITS-W)n(CS)g(enco)r(ded)h(data)f(in)h
-(the)f(FitsChan,)227 4836 y(but)37 b(will)g(not)g(a\013ect)g(other)f
-(\(non-FITS-W)n(CS\))g(header)g(cards.)63 b(If)37 b(a)f(destructiv)n(e)
-g(read)g(of)g(a)g(FITS-W)n(CS)227 4935 y(enco)r(ded)30
-b(Ob)5 b(ject)29 b(has)g(previously)f(o)r(ccurred,)h(then)h(an)g
-(attempt)g(will)f(b)r(e)h(made)g(to)f(store)g(the)h(FITS)f(header)227
-5035 y(cards)22 b(bac)n(k)h(in)g(their)g(original)f(lo)r(cations.)34
-b(Otherwise,)23 b(the)h(new)f(cards)f(will)h(b)r(e)h(inserted)f(follo)n
-(wing)f(an)n(y)g(other)227 5134 y(FITS-W)n(CS)30 b(related)g(header)f
-(cards)f(presen)n(t)i(or,)f(failing)h(that,)h(in)f(fron)n(t)f(of)h(the)
-g(curren)n(t)f(card)g(\(as)h(giv)n(en)f(b)n(y)227 5234
-y(the)f(Card)f(attribute\).)227 5354 y(If)32 b(an)f(attempt)g(to)g
-(simplify)h(a)e(F)-7 b(rameSet)31 b(to)g(conform)g(to)f(the)i(FITS-W)n
-(CS)f(mo)r(del)g(fails)g(\(or)g(if)g(the)h(Ob)5 b(ject)227
-5453 y(supplied)29 b(is)f(not)h(a)f(F)-7 b(rameSet\),)28
-b(then)h(no)f(data)g(will)h(b)r(e)g(written)f(to)h(the)f(FitsChan)h
-(and)f(AST)p Ft(_)p Fk(WRITE)g(will)227 5553 y(return)f(zero.)36
-b(No)28 b(error)d(will)j(result.)-2 5693 y Fc(The)k(FITS-IRAF)h(Enco)s
-(ding)n(:)p eop end
-%%Page: 403 413
-TeXDict begin 403 412 bop 3643 52 a FG(403)227 351 y
-Fk(The)36 b(FITS-IRAF)g(enco)r(ding)f(can,)j(for)d(most)g(purp)r(oses,)
-i(b)r(e)f(considered)f(as)g(a)g(subset)h(of)f(the)h(FITS-W)n(CS)227
-451 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h(di\013ers)
-f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d(used.)36
-b(It)24 b(is)h(used)f(in)g(exactly)227 551 y(the)k(same)f(w)n(a)n(y)g
-(and)g(has)g(the)h(same)f(restrictions,)g(but)h(with)g(the)g(addition)f
-(of)h(the)g(follo)n(wing:)340 804 y Fj(\017)45 b Fk(The)33
-b(only)g(celestial)f(co)r(ordinate)g(systems)g(that)h(ma)n(y)g(b)r(e)g
-(represen)n(ted)f(are)f(equatorial,)i(galactic)f(and)427
-904 y(ecliptic,)340 1032 y Fj(\017)45 b Fk(Sky)34 b(pro)5
-b(jections)32 b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f
-(asso)r(ciated)f(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-1132 y(their)28 b(default)g(v)-5 b(alues.)340 1260 y
-Fj(\017)45 b Fk(Secondary)30 b(axis)h(descriptions)g(are)g(not)g(supp)r
-(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 1359 y(only)c(information)g(from)h(the)g(base)
-f(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)227
-1517 y(Note)36 b(that)g(this)f(enco)r(ding)h(is)f(pro)n(vided)f(mainly)
-i(as)f(an)g(in)n(terim)g(measure)g(to)g(pro)n(vide)f(a)h(more)g(stable)
-g(al-)227 1616 y(ternativ)n(e)e(to)g(the)g(FITS-W)n(CS)h(enco)r(ding)e
-(un)n(til)i(the)g(FITS)f(standard)f(for)h(enco)r(ding)g(W)n(CS)g
-(information)g(is)227 1716 y(\014nalised.)49 b(The)31
-b(name)h Ft(")p Fk(FITS-IRAF)p Ft(")f Fk(indicates)g(the)h(general)e(k)
-n(eyw)n(ord)g(con)n(v)n(en)n(tions)g(used)h(and)g(do)r(es)h(not)227
-1815 y(imply)h(that)g(this)g(enco)r(ding)f(will)g(necessarily)f(supp)r
-(ort)h(all)h(features)e(of)i(the)g(W)n(CS)f(sc)n(heme)g(used)h(b)n(y)f
-(IRAF)227 1915 y(soft)n(w)n(are.)40 b(Nev)n(ertheless,)29
-b(an)g(attempt)h(has)f(b)r(een)g(made)g(to)g(supp)r(ort)g(a)g(few)h
-(suc)n(h)f(features)f(where)h(they)h(are)227 2015 y(kno)n(wn)d(to)h(b)r
-(e)g(used)f(b)n(y)h(imp)r(ortan)n(t)f(sources)f(of)h(data.)227
-2137 y(When)g(writing)f(a)f(F)-7 b(rameSet)26 b(using)g(the)g
-(FITS-IRAF)h(enco)r(ding,)f(axis)f(rotations)g(are)g(sp)r(eci\014ed)i
-(b)n(y)e(a)h(matrix)227 2236 y(of)j(FITS)h(k)n(eyw)n(ords)d(of)i(the)h
-(form)f Ft(")p Fk(CDi)p Ft(_)p Fk(j)p Ft(")p Fk(,)g(where)g
-Ft(")p Fk(i)p Ft(")f Fk(and)h Ft(")p Fk(j)p Ft(")g Fk(are)f(single)h
-(digits.)42 b(The)29 b(alternativ)n(e)f(form)227 2336
-y Ft(")p Fk(CDiiijjj)p Ft(")p Fk(,)h(whic)n(h)e(is)h(also)e(in)i(use,)g
-(is)f(recognised)f(when)i(reading)e(an)i(Ob)5 b(ject,)27
-b(but)h(is)g(nev)n(er)f(written.)227 2458 y(In)36 b(addition,)h(the)f
-(exp)r(erimen)n(tal)f(IRAF)h Ft(")p Fk(ZPX)p Ft(")e Fk(and)h
-Ft(")p Fk(TNX)p Ft(")g Fk(sky)g(pro)5 b(jections)34 b(will)i(b)r(e)f
-(accepted)g(when)227 2558 y(reading,)25 b(but)i(will)e(nev)n(er)g(b)r
-(e)h(written)g(\(the)h(corresp)r(onding)c(FITS)j Ft(")p
-Fk(ZPN)p Ft(")f Fk(or)g Ft(")p Fk(distorted)g(T)-7 b(AN)p
-Ft(")26 b Fk(pro)5 b(jection)227 2658 y(b)r(eing)29 b(used)g
-(instead\).)42 b(Ho)n(w)n(ev)n(er,)27 b(there)i(are)f(restrictions)f
-(on)i(the)h(use)e(of)h(these)g(exp)r(erimen)n(tal)g(pro)5
-b(jections.)227 2757 y(F)-7 b(or)34 b Ft(")p Fk(ZPX)p
-Ft(")p Fk(,)g(longitude)f(and)h(latitude)g(correction)e(surfaces)h
-(\(app)r(earing)g(as)g Ft(")p Fk(lngcor)p Ft(")f Fk(or)h
-Ft(")p Fk(latcor)p Ft(")f Fk(terms)227 2857 y(in)k(the)g(IRAF-sp)r
-(eci\014c)f Ft(")p Fk(W)-9 b(A)i(T)p Ft(")35 b Fk(k)n(eyw)n(ords\))f
-(are)g(not)i(supp)r(orted.)60 b(F)-7 b(or)34 b Ft(")p
-Fk(TNX)p Ft(")h Fk(pro)5 b(jections,)36 b(only)f(cubic)227
-2956 y(surfaces)g(enco)r(ded)h(as)f(simple)h(p)r(olynomials)f(with)h
-Ft(")p Fk(half)g(cross-terms)p Ft(")d Fk(are)i(supp)r(orted.)61
-b(If)37 b(an)e(un-usable)227 3056 y Ft(")p Fk(TNX)p Ft(")23
-b Fk(or)f Ft(")p Fk(ZPX)p Ft(")g Fk(pro)5 b(jection)22
-b(is)h(encoun)n(tered)f(while)h(reading)f(from)g(a)h(FitsChan,)h(a)f
-(simpler)f(form)h(of)g(T)-7 b(AN)227 3156 y(or)22 b(ZPN)g(pro)5
-b(jection)21 b(is)i(used)f(whic)n(h)h(ignores)e(the)i(unsupp)r(orted)f
-(features)g(and)g(ma)n(y)g(therefore)g(b)r(e)h(inaccurate.)227
-3255 y(If)j(this)f(happ)r(ens,)g(a)g(w)n(arning)f(message)f(is)i(added)
-g(to)g(the)g(con)n(ten)n(ts)f(of)h(the)g(FitsChan)g(as)g(a)f(set)h(of)g
-(cards)f(using)227 3355 y(the)k(k)n(eyw)n(ord)e Ft(")p
-Fk(ASTW)-9 b(ARN)p Ft(")p Fk(.)227 3477 y(Y)i(ou)32 b(should)f(not)g
-(normally)g(attempt)h(to)f(mix)h(the)g(foreign)e(FITS)i(enco)r(dings)f
-(within)h(the)g(same)e(FitsChan,)227 3577 y(since)e(there)f(is)h(a)f
-(risk)g(that)g(k)n(eyw)n(ord)f(clashes)h(ma)n(y)g(o)r(ccur.)-2
-3721 y Fc(The)32 b(FITS-PC)h(Enco)s(ding)n(:)227 3867
-y Fk(The)38 b(FITS-PC)e(enco)r(ding)h(can,)j(for)c(most)h(purp)r(oses,)
-i(b)r(e)f(considered)e(as)h(equiv)-5 b(alen)n(t)37 b(to)g(the)g(FITS-W)
-n(CS)227 3967 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4067
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions.)-2
-4211 y Fc(The)32 b(FITS-AIPS)i(Enco)s(ding)n(:)227 4358
-y Fk(The)e(FITS-AIPS)f(enco)r(ding)g(can,)h(for)f(most)g(purp)r(oses,)h
-(b)r(e)g(considered)e(as)h(equiv)-5 b(alen)n(t)31 b(to)h(the)f(FITS-W)n
-(CS)227 4457 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4557
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions,)g
-(but)h(with)g(the)g(addition)f(of)h(the)g(follo)n(wing:)340
-4811 y Fj(\017)45 b Fk(The)33 b(only)g(celestial)f(co)r(ordinate)g
-(systems)g(that)h(ma)n(y)g(b)r(e)g(represen)n(ted)f(are)f(equatorial,)i
-(galactic)f(and)427 4910 y(ecliptic,)340 5038 y Fj(\017)45
-b Fk(Sp)r(ectral)33 b(axes)g(can)g(only)g(b)r(e)h(represen)n(ted)e(if)i
-(they)f(represen)n(t)f(frequency)-7 b(,)35 b(radio)d(v)n(elo)r(cit)n(y)
-h(or)f(optical)427 5138 y(v)n(elo)r(cit)n(y)-7 b(,)36
-b(and)f(are)e(linearly)h(sampled)h(in)g(frequency)-7
-b(.)58 b(In)35 b(addition,)h(the)g(standard)d(of)i(rest)f(m)n(ust)h(b)r
-(e)427 5238 y(LSRK,)28 b(LSRD,)g(barycen)n(tric)e(or)h(geo)r(cen)n
-(tric.)340 5366 y Fj(\017)45 b Fk(Sky)34 b(pro)5 b(jections)32
-b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f(asso)r(ciated)f
-(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-5465 y(their)28 b(default)g(v)-5 b(alues.)340 5593 y
-Fj(\017)45 b Fk(The)25 b(AIT,)g(SFL)g(and)f(MER)g(pro)5
-b(jections)23 b(can)i(only)f(b)r(e)h(written)f(if)h(the)g(CR)-9
-b(V)g(AL)25 b(k)n(eyw)n(ords)d(are)i(zero)f(for)427 5693
-y(b)r(oth)28 b(longitude)g(and)f(latitude)h(axes.)p eop
-end
-%%Page: 404 414
-TeXDict begin 404 413 bop 0 52 a FG(404)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(Secondary)30 b(axis)h(descriptions)g(are)g(not)g
-(supp)r(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 451 y(only)c(information)g(from)h(the)g(base)f
-(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)340
-585 y Fj(\017)45 b Fk(If)25 b(there)f(are)f(more)g(than)i(2)f(axes)f
-(in)h(the)h(base)e(and)h(curren)n(t)g(F)-7 b(rames,)24
-b(an)n(y)f(rotation)g(m)n(ust)i(b)r(e)f(restricted)427
-684 y(to)k(the)g(celestial)f(plane,)g(and)h(m)n(ust)f(in)n(v)n(olv)n(e)
-f(no)i(shear.)-2 848 y Fc(The)k(FITS-AIPS)p Fk(++)h Fc(Enco)s(ding)n(:)
-227 994 y Fk(The)d(FITS-AIPS++)e(enco)r(ding)h(is)g(based)f(on)h(the)h
-(FITS-AIPS)f(enco)r(ding,)g(but)h(includes)f(some)g(features)g(of)227
-1094 y(the)23 b(FITS-IRAF)g(and)f(FITS-PC)g(enco)r(dings.)35
-b(Sp)r(eci\014cally)-7 b(,)23 b(an)n(y)f(celestial)g(pro)5
-b(jections)21 b(supp)r(orted)h(b)n(y)h(FITS-)227 1193
-y(PC)h(ma)n(y)f(b)r(e)h(used,)h(including)f(those)g(whic)n(h)f(require)
-g(parameterisation,)g(and)h(the)g(axis)f(rotation)g(and)h(scaling)227
-1293 y(ma)n(y)31 b(b)r(e)i(sp)r(eci\014ed)f(using)f(CDi)p
-Ft(_)p Fk(j)i(k)n(eyw)n(ords.)47 b(When)33 b(writing)e(a)h(FITS)g
-(header,)g(rotation)f(will)h(b)r(e)g(sp)r(eci\014ed)227
-1392 y(using)c(CR)n(OT)-7 b(A/CDEL)g(T)26 b(k)n(eyw)n(ords)g(if)i(p)r
-(ossible,)f(otherwise)g(CDi)p Ft(_)p Fk(j)h(k)n(eyw)n(ords)d(will)j(b)r
-(e)g(used)g(instead.)-2 1544 y Fc(The)k(FITS-CLASS)h(Enco)s(ding)n(:)
-227 1690 y Fk(The)24 b(FITS-CLASS)g(enco)r(ding)f(uses)h(the)g(con)n(v)
-n(en)n(tions)e(of)i(the)g(CLASS)g(pro)5 b(ject.)35 b(These)23
-b(are)g(describ)r(ed)g(in)h(the)227 1789 y(section)j
-Ft(")p Fk(Dev)n(elop)r(er)g(Man)n(ual)p Ft(")p Fk(/)p
-Ft(")p Fk(CLASS)f(FITS)i(F)-7 b(ormat)p Ft(")26 b Fk(con)n(tained)h(in)
-h(the)g(CLASS)g(do)r(cumen)n(tation)f(at:)227 1915 y(h)n
-(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-h)n
-(tml/class.h)n(tml.)227 2040 y(This)h(enco)r(ding)f(is)h(similar)e(to)i
-(FITS-AIPS)f(with)h(the)g(follo)n(wing)f(restrictions:)340
-2304 y Fj(\017)45 b Fk(When)23 b(a)e(Sp)r(ecF)-7 b(rame)22
-b(is)f(created)g(b)n(y)h(reading)f(a)g(FITS-CLASS)h(header,)g(the)h
-(attributes)e(describing)g(the)427 2403 y(observ)n(er's)f(p)r(osition)i
-(\(ObsLat,)h(ObsLon)e(and)h(ObsAlt\))h(are)e(left)i(unset)f(b)r(ecause)
-g(the)g(CLASS)h(enco)r(ding)427 2503 y(do)r(es)32 b(not)h(sp)r(ecify)g
-(these)f(v)-5 b(alues.)52 b(Con)n(v)n(ersions)30 b(to)i(or)g(from)g
-(the)h(top)r(o)r(cen)n(tric)f(standard)g(of)g(rest)g(will)427
-2603 y(therefore)21 b(b)r(e)i(inaccurate)e(\(t)n(ypically)g(b)n(y)h(up)
-g(to)g(ab)r(out)g(0.5)f(km/s\))h(unless)f(suitable)h(v)-5
-b(alues)22 b(are)f(assigned)427 2702 y(to)28 b(these)f(attributes)h
-(after)f(the)h(F)-7 b(rameSet)27 b(has)h(b)r(een)g(created.)340
-2836 y Fj(\017)45 b Fk(When)24 b(writing)e(a)h(F)-7 b(rameSet)23
-b(to)f(a)h(FITS-CLASS)g(header,)g(the)h(curren)n(t)e(F)-7
-b(rame)22 b(in)h(the)h(F)-7 b(rameSet)22 b(m)n(ust)427
-2936 y(ha)n(v)n(e)f(at)g(least)h(3)f(W)n(CS)h(axes,)g(of)g(whic)n(h)f
-(one)h(m)n(ust)g(b)r(e)g(a)f(linear)g(sp)r(ectral)g(axis.)34
-b(The)22 b(sp)r(ectral)f(axis)g(in)h(the)427 3035 y(created)29
-b(header)g(will)h(alw)n(a)n(ys)e(describ)r(e)h(frequency)-7
-b(.)43 b(If)30 b(the)g(sp)r(ectral)f(axis)g(in)h(the)g(supplied)g(F)-7
-b(rameSet)427 3135 y(refers)27 b(to)g(some)g(other)g(system)h(\(e.g.)36
-b(radio)27 b(v)n(elo)r(cit)n(y)-7 b(,)27 b(etc\),)h(then)g(it)g(will)g
-(b)r(e)g(con)n(v)n(erted)e(to)h(frequency)-7 b(.)340
-3268 y Fj(\017)45 b Fk(There)23 b(m)n(ust)g(b)r(e)g(a)f(pair)g(of)h
-(celestial)f(axes)g(-)h(either)g(\(RA,Dec\))h(or)e(\(GLON,GLA)-7
-b(T\).)23 b(RA)h(and)e(Dec)h(m)n(ust)427 3368 y(b)r(e)28
-b(either)g(FK4/B1950)c(or)j(FK5/J2000.)340 3502 y Fj(\017)45
-b Fk(A)35 b(limited)g(range)e(of)h(pro)5 b(jection)34
-b(co)r(des)g(\(T)-7 b(AN,)35 b(AR)n(C,)f(STG,)h(AIT,)g(SFL,)f(SIN\))h
-(can)f(b)r(e)h(used.)57 b(F)-7 b(or)427 3601 y(AIT)30
-b(and)f(SFL,)g(the)h(reference)e(p)r(oin)n(t)i(m)n(ust)f(b)r(e)h(at)f
-(the)g(origin)f(of)h(longitude)g(and)g(latitude.)43 b(F)-7
-b(or)28 b(SIN,)427 3701 y(the)g(asso)r(ciated)f(pro)5
-b(jection)26 b(parameters)g(m)n(ust)i(b)r(oth)g(b)r(e)g(zero.)340
-3835 y Fj(\017)45 b Fk(No)28 b(rotation)f(of)i(the)f(celestial)g(axes)f
-(is)h(allo)n(w)n(ed,)g(unless)g(the)g(spatial)g(axes)f(are)g
-(degenerate)g(\(i.e.)39 b(co)n(v)n(er)427 3934 y(only)27
-b(a)h(single)f(pixel\).)340 4068 y Fj(\017)45 b Fk(The)34
-b(frequency)g(axis)f(in)h(the)h(created)e(header)g(will)h(alw)n(a)n(ys)
-e(describ)r(e)i(frequency)g(in)g(the)g(source)f(rest)427
-4168 y(frame.)53 b(If)34 b(the)f(supplied)h(F)-7 b(rameSet)33
-b(uses)f(some)h(other)f(standard)h(of)g(rest)f(then)i(suitable)f(con)n
-(v)n(ersion)427 4267 y(will)28 b(b)r(e)g(applied.)340
-4401 y Fj(\017)45 b Fk(The)35 b(source)e(v)n(elo)r(cit)n(y)g(m)n(ust)i
-(b)r(e)f(de\014ned.)58 b(In)35 b(other)e(w)n(ords,)i(the)g(Sp)r(ecF)-7
-b(rame)34 b(attributes)g(SourceV)-7 b(el)427 4501 y(and)28
-b(SourceVRF)f(m)n(ust)h(ha)n(v)n(e)e(b)r(een)i(assigned)f(v)-5
-b(alues.)340 4634 y Fj(\017)45 b Fk(The)40 b(frequency)g(axis)f(in)i(a)
-e(FITS-CLASS)i(header)e(do)r(es)h(not)g(represen)n(t)f(absolute)g
-(frequency)-7 b(,)43 b(but)427 4734 y(instead)28 b(represen)n(ts)e
-(o\013sets)h(from)g(the)h(rest)f(frequency)h(in)f(the)h(standard)f(of)h
-(rest)f(of)g(the)h(source.)227 4898 y(When)23 b(writing)f(a)g(F)-7
-b(rameSet)22 b(out)g(using)g(FITS-CLASS)h(enco)r(ding,)g(the)f(curren)n
-(t)g(F)-7 b(rame)22 b(ma)n(y)f(b)r(e)i(temp)r(orarily)227
-4997 y(mo)r(di\014ed)31 b(if)f(this)g(will)g(allo)n(w)f(the)h(header)f
-(to)h(b)r(e)g(pro)r(duced.)44 b(If)30 b(this)g(is)g(done,)g(the)h(asso)
-r(ciated)d(pixel-)p Fm(>)p Fk(W)n(CS)227 5097 y(Mapping)34
-b(will)g(also)f(b)r(e)i(mo)r(di\014ed)f(to)g(tak)n(e)g(accoun)n(t)f(of)
-h(the)h(c)n(hanges)d(to)i(the)h(F)-7 b(rame.)56 b(The)34
-b(mo)r(di\014cations)227 5196 y(p)r(erformed)19 b(include)h
-(re-ordering)d(axes)h(\(W)n(CS)i(axes,)g(not)f(pixel)h(axes\),)g(c)n
-(hanging)e(sp)r(ectral)h(co)r(ordinate)f(system)227 5296
-y(and)24 b(standard)f(of)h(rest,)g(c)n(hanging)f(the)h(celestial)f(co)r
-(ordinate)g(system)h(and)f(reference)g(equino)n(x,)h(and)g(c)n(hanging)
-227 5396 y(axis)j(units.)-2 5547 y Fc(The)32 b(NA)-8
-b(TIVE)33 b(Enco)s(ding)n(:)227 5693 y Fk(The)27 b(NA)-7
-b(TIVE)26 b(enco)r(ding)h(ma)n(y)e(b)r(e)i(used)f(to)h(store)e(a)h
-(description)g(of)g(an)n(y)g(class)f(of)i(AST)f(Ob)5
-b(ject)27 b(in)f(the)h(form)p eop end
-%%Page: 405 415
-TeXDict begin 405 414 bop 3643 52 a FG(405)227 351 y
-Fk(of)29 b(FITS)g(header)f(cards,)g(and)h(\(for)g(most)f(practical)g
-(purp)r(oses\))g(an)n(y)g(n)n(um)n(b)r(er)h(of)g(these)g(Ob)5
-b(ject)28 b(descriptions)227 451 y(ma)n(y)i(b)r(e)g(stored)g(within)h
-(a)f(single)f(set)i(of)f(FITS)g(cards.)44 b(If)31 b(m)n(ultiple)g(Ob)5
-b(ject)30 b(descriptions)f(are)g(stored,)h(they)227 551
-y(are)35 b(written)g(and)g(read)g(sequen)n(tially)-7
-b(.)59 b(The)35 b(NA)-7 b(TIVE)36 b(enco)r(ding)f(mak)n(es)f(use)h(of)h
-(unique)f(FITS)h(k)n(eyw)n(ords)227 650 y(whic)n(h)29
-b(are)e(designed)h(not)g(to)h(clash)e(with)i(k)n(eyw)n(ords)e(that)h
-(ha)n(v)n(e)f(already)g(b)r(een)i(used)g(for)e(other)h(purp)r(oses)g
-(\(if)227 750 y(a)f(p)r(oten)n(tial)h(clash)f(is)g(detected,)i(an)e
-(alternativ)n(e)f(k)n(eyw)n(ord)g(is)h(constructed)h(to)f(a)n(v)n(oid)f
-(the)i(clash\).)227 877 y(When)23 b(reading)e(a)g(NA)-7
-b(TIVE)23 b(enco)r(ded)f(ob)5 b(ject)21 b(from)h(a)g(FitsChan)g
-(\(using)g(AST)p Ft(_)p Fk(READ\),)g(FITS)h(header)e(cards)227
-977 y(are)26 b(read,)h(starting)f(at)h(the)g(curren)n(t)f(card)g(\(as)h
-(determined)g(b)n(y)g(the)g(Card)f(attribute\),)i(un)n(til)f(the)h
-(start)e(of)h(the)227 1076 y(next)e(Ob)5 b(ject)25 b(description)f(is)g
-(found.)37 b(This)24 b(description)g(is)h(then)g(read)f(and)h(con)n(v)n
-(erted)e(in)n(to)h(an)h(AST)g(Ob)5 b(ject,)227 1176 y(for)28
-b(whic)n(h)h(a)f(p)r(oin)n(ter)g(is)h(returned.)39 b(Suc)n(h)28
-b(a)h(read)e(is)i(alw)n(a)n(ys)d(destructiv)n(e)i(and)h(causes)e(all)i
-(the)g(FITS)f(header)227 1276 y(cards)c(in)n(v)n(olv)n(ed)g(in)h(the)g
-(Ob)5 b(ject)25 b(description)g(to)g(b)r(e)g(remo)n(v)n(ed)e(from)i
-(the)h(FitsChan,)f(whic)n(h)g(is)g(left)h(p)r(ositioned)227
-1375 y(at)i(the)g(follo)n(wing)e(card.)227 1503 y(The)k(Ob)5
-b(ject)29 b(returned)g(ma)n(y)f(b)r(e)i(of)f(an)n(y)g(class,)f(dep)r
-(ending)i(on)f(the)h(description)e(that)i(w)n(as)e(read,)h(and)g(other)
-227 1602 y(AST)38 b(routines)f(ma)n(y)f(b)r(e)i(used)f(to)g(v)-5
-b(alidate)37 b(it)h(\(for)f(example,)j(b)n(y)d(examining)f(its)i(Class)
-e(or)h(ID)g(attribute)227 1702 y(using)32 b(AST)p Ft(_)p
-Fk(GETC\).)g(If)g(further)g(NA)-7 b(TIVE)32 b(enco)r(ded)g(Ob)5
-b(ject)32 b(descriptions)f(exist)h(in)g(the)h(FitsChan,)g(sub-)227
-1801 y(sequen)n(t)c(calls)f(to)h(AST)p Ft(_)p Fk(READ)g(will)g(return)f
-(the)h(Ob)5 b(jects)29 b(they)g(describ)r(e)f(in)h(sequence)f(\(and)h
-(destro)n(y)f(their)227 1901 y(descriptions\))f(un)n(til)h(no)g(more)e
-(remain)h(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(card)f(and)i(the)g
-Ft(")p Fk(end-of-\014le)p Ft(")p Fk(.)227 2028 y(When)20
-b(AST)p Ft(_)p Fk(WRITE)g(is)f(used)h(to)f(write)g(an)g(Ob)5
-b(ject)20 b(using)f(NA)-7 b(TIVE)20 b(enco)r(ding,)g(a)g(description)e
-(of)i(the)g(Ob)5 b(ject)227 2128 y(is)32 b(inserted)f(immediately)h(b)r
-(efore)f(the)h(curren)n(t)f(card)f(\(as)i(determined)f(b)n(y)h(the)g
-(Card)f(attribute\).)49 b(Multiple)227 2228 y(Ob)5 b(ject)29
-b(descriptions)g(ma)n(y)f(b)r(e)i(written)f(in)h(this)f(w)n(a)n(y)f
-(and)h(are)g(stored)f(separately)g(\(and)h(sequen)n(tially)f(if)i(the)
-227 2327 y(Card)f(attribute)g(is)g(not)g(mo)r(di\014ed)h(b)r(et)n(w)n
-(een)f(the)g(writes\).)42 b(A)29 b(write)g(op)r(eration)f(using)h(the)g
-(NA)-7 b(TIVE)30 b(enco)r(d-)227 2427 y(ing)35 b(do)r(es)f(not)g(o)n(v)
-n(er-write)e(previously)i(written)g(Ob)5 b(ject)35 b(descriptions.)57
-b(Note,)36 b(ho)n(w)n(ev)n(er,)e(that)h(subsequen)n(t)227
-2527 y(b)r(eha)n(viour)29 b(is)h(unde\014ned)g(if)g(an)g(Ob)5
-b(ject)29 b(description)h(is)f(written)h(inside)g(a)g
-(previously-written)e(description,)227 2626 y(so)f(this)h(should)f(b)r
-(e)h(a)n(v)n(oided.)227 2753 y(When)f(an)e(Ob)5 b(ject)26
-b(is)g(written)g(to)f(a)h(FitsChan)g(using)f(NA)-7 b(TIVE)27
-b(enco)r(ding,)f(AST)p Ft(_)p Fk(WRITE)f(should)h(\(barring)227
-2853 y(errors\))g(alw)n(a)n(ys)g(transfer)g(data)h(and)h(return)f(a)g
-(v)-5 b(alue)28 b(of)f(1.)p 0 3058 3780 12 v 0 3190 a
-FA(Ep)t(o)t(c)l(h)981 b Fd(Ep)s(o)s(c)m(h)39 b(of)f(observ)-7
-b(ation)980 b FA(Ep)t(o)t(c)l(h)0 3384 y Fc(Description:)44
-b Fk(This)29 b(attribute)g(is)f(used)h(to)f(qualify)h(the)g(co)r
-(ordinate)e(systems)h(describ)r(ed)g(b)n(y)h(a)f(F)-7
-b(rame,)28 b(b)n(y)g(giving)227 3484 y(the)g(momen)n(t)f(in)h(time)f
-(when)h(the)g(co)r(ordinates)d(are)i(kno)n(wn)f(to)h(b)r(e)h(correct.)
-35 b(Often,)28 b(this)g(will)f(b)r(e)h(the)f(date)h(of)227
-3583 y(observ)-5 b(ation,)26 b(and)h(is)g(imp)r(ortan)n(t)f(in)h(cases)
-f(where)g(co)r(ordinates)g(systems)g(mo)n(v)n(e)g(with)i(resp)r(ect)e
-(to)h(eac)n(h)f(other)227 3683 y(o)n(v)n(er)g(the)i(course)e(of)i
-(time.)227 3810 y(The)23 b(Ep)r(o)r(c)n(h)f(attribute)h(is)f(stored)g
-(as)g(a)g(Mo)r(di\014ed)h(Julian)g(Date,)g(but)h(when)f(setting)f(its)h
-(v)-5 b(alue)22 b(it)h(ma)n(y)f(b)r(e)h(giv)n(en)227
-3910 y(in)32 b(a)e(v)-5 b(ariet)n(y)30 b(of)h(formats.)46
-b(See)31 b(the)h Ft(")p Fk(Input)f(F)-7 b(ormats)p Ft(")30
-b Fk(section)g(\(b)r(elo)n(w\))h(for)g(details.)47 b(Strictly)-7
-b(,)32 b(the)f(Ep)r(o)r(c)n(h)227 4009 y(v)-5 b(alue)25
-b(should)g(b)r(e)g(supplied)g(in)g(the)g(TDB)g(timescale,)g(but)h(for)e
-(some)g(purp)r(oses)g(\(for)h(instance,)g(for)f(con)n(v)n(erting)227
-4109 y(sky)36 b(p)r(ositions)f(b)r(et)n(w)n(een)h(di\013eren)n(t)g(t)n
-(yp)r(es)f(of)h(equatorial)e(system\))i(the)h(timescale)e(is)h(not)g
-(signi\014can)n(t,)h(and)227 4209 y(UTC)28 b(ma)n(y)f(b)r(e)h(used.)0
-4364 y Fc(T)m(yp)s(e:)227 4463 y Fk(Floating)f(p)r(oin)n(t.)0
-4618 y Fc(Class)k(Applicabilit)m(y:)259 4760 y(F)-8 b(rame)427
-4860 y Fk(All)29 b(F)-7 b(rames)27 b(ha)n(v)n(e)f(this)j(attribute.)38
-b(The)27 b(basic)h(F)-7 b(rame)27 b(class)g(pro)n(vides)g(a)g(default)h
-(of)g(J2000.0)d(\(Julian\))427 4960 y(but)31 b(mak)n(es)f(no)g(use)g
-(of)g(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue.)45 b(This)30
-b(is)g(b)r(ecause)g(the)h(F)-7 b(rame)30 b(class)f(do)r(es)h(not)h
-(distinguish)427 5059 y(b)r(et)n(w)n(een)d(di\013eren)n(t)g(Cartesian)e
-(co)r(ordinate)g(systems)h(\(see)h(the)g(System)g(attribute\).)259
-5195 y Fc(CmpF)-8 b(rame)427 5295 y Fk(The)32 b(default)h(Ep)r(o)r(c)n
-(h)e(v)-5 b(alue)32 b(for)f(a)h(CmpF)-7 b(rame)31 b(is)h(selected)g(as)
-f(follo)n(ws;)i(if)f(the)h(Ep)r(o)r(c)n(h)e(attribute)h(has)427
-5394 y(b)r(een)26 b(set)g(in)g(the)g(\014rst)f(comp)r(onen)n(t)g(F)-7
-b(rame)26 b(then)g(the)g(Ep)r(o)r(c)n(h)f(v)-5 b(alue)25
-b(from)g(the)h(\014rst)g(comp)r(onen)n(t)f(F)-7 b(rame)427
-5494 y(is)36 b(used)f(as)g(the)g(default)h(for)f(the)h(CmpF)-7
-b(rame.)59 b(Otherwise,)37 b(if)f(the)g(Ep)r(o)r(c)n(h)e(attribute)i
-(has)f(b)r(een)h(set)427 5593 y(in)29 b(the)h(second)e(comp)r(onen)n(t)
-h(F)-7 b(rame)28 b(then)i(the)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)28 b(from)h(the)g(second)g(comp)r(onen)n(t)f(F)-7
-b(rame)29 b(is)427 5693 y(used)35 b(as)f(the)h(default)g(for)f(the)h
-(CmpF)-7 b(rame.)57 b(Otherwise,)36 b(the)f(default)g(Ep)r(o)r(c)n(h)f
-(v)-5 b(alue)35 b(from)f(the)h(\014rst)p eop end
-%%Page: 406 416
-TeXDict begin 406 415 bop 0 52 a FG(406)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fk(comp)r(onen)n(t)d(F)-7 b(rame)28 b(is)h(used)f(as)g(the)h(default)
-f(for)g(the)h(CmpF)-7 b(rame.)39 b(When)29 b(the)g(Ep)r(o)r(c)n(h)f
-(attribute)h(of)f(a)427 451 y(CmpF)-7 b(rame)28 b(is)f(set)h(or)e
-(cleared,)h(it)h(is)g(also)e(set)i(or)e(cleared)h(in)h(the)g(t)n(w)n(o)
-f(comp)r(onen)n(t)g(F)-7 b(rames.)259 591 y Fc(F)f(rameSet)427
-691 y Fk(The)29 b(Ep)r(o)r(c)n(h)f(attribute)g(of)g(a)g(F)-7
-b(rameSet)28 b(is)h(the)f(same)g(as)g(that)g(of)h(its)f(curren)n(t)g(F)
--7 b(rame)27 b(\(as)h(sp)r(eci\014ed)h(b)n(y)427 791
-y(the)f(Curren)n(t)f(attribute\).)259 931 y Fc(SkyF)-8
-b(rame)427 1031 y Fk(The)35 b(co)r(ordinates)e(of)i(sources)e(within)j
-(a)e(SkyF)-7 b(rame)34 b(can)g(c)n(hanged)g(with)h(time)h(for)e(v)-5
-b(arious)33 b(reasons,)427 1130 y(including:)58 b(\(i\))39
-b(c)n(hanging)d(ab)r(erration)h(of)g(ligh)n(t)h(caused)f(b)n(y)h(the)g
-(observ)n(er's)e(v)n(elo)r(cit)n(y)h(\(e.g.)68 b(due)38
-b(to)427 1230 y(the)d(Earth's)e(motion)h(around)f(the)h(Sun\),)j
-(\(ii\))e(c)n(hanging)e(gra)n(vitational)e(de\015ection)j(b)n(y)g(the)h
-(Sun)f(due)427 1330 y(to)40 b(c)n(hanges)e(in)i(the)h(observ)n(er's)c
-(p)r(osition)j(with)g(time,)j(\(iii\))e(\014ctitious)f(motion)f(due)h
-(to)g(rotation)f(of)427 1429 y(non-inertial)c(co)r(ordinate)f(systems)g
-(\(e.g.)60 b(the)36 b(old)f(FK4)f(system\),)k(and)d(\(iv\))h(prop)r(er)
-e(motion)h(of)g(the)427 1529 y(source)25 b(itself)h(\(although)g(this)g
-(last)g(e\013ect)g(is)g(not)g(handled)g(b)n(y)f(the)i(SkyF)-7
-b(rame)25 b(class)g(b)r(ecause)g(it)i(a\013ects)427 1629
-y(individual)h(sources)e(rather)h(than)g(the)h(co)r(ordinate)f(system)g
-(as)g(a)g(whole\).)427 1749 y(The)f(default)g(Ep)r(o)r(c)n(h)f(v)-5
-b(alue)26 b(in)g(a)f(SkyF)-7 b(rame)25 b(is)g(B1950.0)e(\(Besselian\))i
-(for)g(the)h(old)g(FK4-based)e(co)r(ordi-)427 1848 y(nate)k(systems)f
-(\(see)g(the)h(System)g(attribute\))g(and)g(J2000.0)d(\(Julian\))i(for)
-g(all)h(others.)427 1968 y(Care)35 b(m)n(ust)g(b)r(e)h(tak)n(en)f(to)g
-(distinguish)g(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue,)37
-b(whic)n(h)e(relates)g(to)g(motion)g(\(or)g(apparen)n(t)427
-2068 y(motion\))h(of)g(the)g(source,)h(from)e(the)h(sup)r(er\014cially)
-f(similar)g(Equino)n(x)g(v)-5 b(alue.)61 b(The)36 b(latter)f(is)h(used)
-g(to)427 2168 y(qualify)c(a)f(co)r(ordinate)g(system)h(whic)n(h)f(is)h
-(itself)g(in)g(motion)g(in)g(a)f(\(notionally\))h(predictable)f(w)n(a)n
-(y)g(as)g(a)427 2267 y(result)d(of)f(b)r(eing)h(referred)e(to)i(a)f
-(slo)n(wly)f(mo)n(ving)h(reference)g(plane)g(\(e.g.)37
-b(the)28 b(equator\).)427 2387 y(See)d(the)h(description)f(of)g(the)g
-(System)h(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g
-(attributes)g(apply)g(to)427 2487 y(eac)n(h)i(celestial)g(co)r
-(ordinate)g(system.)259 2628 y Fc(TimeF)-8 b(rame)427
-2727 y Fk(A)30 b(TimeF)-7 b(rame)29 b(describ)r(es)g(a)g(general)f
-(time)i(axis)f(and)g(so)g(cannot)g(b)r(e)h(completely)g(c)n
-(haracterised)d(b)n(y)i(a)427 2827 y(single)22 b(Ep)r(o)r(c)n(h)f(v)-5
-b(alue.)35 b(F)-7 b(or)21 b(this)h(reason)e(the)i(TimeF)-7
-b(rame)22 b(class)e(mak)n(es)h(no)h(use)f(of)h(the)g(Ep)r(o)r(c)n(h)f
-(attribute.)427 2926 y(Ho)n(w)n(ev)n(er,)31 b(user)g(co)r(de)g(can)g
-(still)h(mak)n(e)f(use)g(of)h(the)g(attribute)f(if)h(necessary)e(to)h
-(represen)n(t)g(a)g Ft(")p Fk(t)n(ypical)p Ft(")427 3026
-y Fk(time)25 b(spanned)e(b)n(y)h(the)h(TimeF)-7 b(rame.)35
-b(The)24 b(default)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)24
-b(for)f(a)h(TimeF)-7 b(rame)23 b(will)i(b)r(e)f(the)g(TDB)427
-3126 y(equiv)-5 b(alen)n(t)35 b(of)h(the)f(curren)n(t)g(v)-5
-b(alue)35 b(of)g(the)h(TimeF)-7 b(rame's)35 b(TimeOrigin)f(attribute.)
-60 b(If)36 b(no)f(v)-5 b(alue)35 b(has)427 3225 y(b)r(een)28
-b(set)g(for)f(TimeOrigin,)g(then)h(the)g(default)g(Ep)r(o)r(c)n(h)f(v)
--5 b(alue)27 b(is)h(J2000.0.)-2 3403 y Fc(Input)33 b(F)-8
-b(ormats)n(:)227 3549 y Fk(The)29 b(formats)f(accepted)g(when)g
-(setting)h(an)f(Ep)r(o)r(c)n(h)g(v)-5 b(alue)29 b(are)e(listed)i(b)r
-(elo)n(w.)39 b(They)29 b(are)e(all)h(case-insensitiv)n(e)227
-3648 y(and)g(are)e(generally)g(toleran)n(t)h(of)g(extra)g(white)h
-(space)f(and)g(alternativ)n(e)g(\014eld)h(delimiters:)340
-3932 y Fj(\017)45 b Fk(Besselian)33 b(Ep)r(o)r(c)n(h:)48
-b(Expressed)32 b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i
-(decimal)g(places)f(\()p Ft(")p Fk(B1950)p Ft(")d Fk(or)427
-4032 y Ft(")p Fk(B1976.13)p Ft(")24 b Fk(for)j(example\).)340
-4173 y Fj(\017)45 b Fk(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fk(J2000)p Ft(")e Fk(or)427 4272 y Ft(")p
-Fk(J2100.9)p Ft(")24 b Fk(for)j(example\).)340 4413 y
-Fj(\017)45 b Fk(Y)-7 b(ear:)50 b(Decimal)35 b(y)n(ears,)f(with)h(or)f
-(without)h(decimal)f(places)g(\()p Ft(")p Fk(1996.8)p
-Ft(")d Fk(for)j(example\).)57 b(Suc)n(h)35 b(v)-5 b(alues)427
-4512 y(are)34 b(in)n(terpreted)g(as)g(a)g(Besselian)f(ep)r(o)r(c)n(h)i
-(\(see)f(ab)r(o)n(v)n(e\))f(if)i(less)f(than)h(1984.0)d(and)j(as)e(a)i
-(Julian)f(ep)r(o)r(c)n(h)427 4612 y(otherwise.)340 4752
-y Fj(\017)45 b Fk(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fk(JD)h(2454321.9)p Ft(")23
-b Fk(for)k(example\).)340 4893 y Fj(\017)45 b Fk(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fk(MJD)h(54321.4)p Ft(")c Fk(for)j(example\).)340
-5034 y Fj(\017)45 b Fk(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 5133 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fk(1996-10-2)p
-Ft(")427 5233 y Fk(or)f Ft(")p Fk(1996-Oct-2.6)p Ft(")d
-Fk(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-5332 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-5473 y Fj(\017)45 b Fk(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 5573
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fk(1996-Oct-2)e(12:13:56.985)p Ft(")e Fk(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 5672 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fk(T)p Ft(")g
-Fk(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)p eop end
-%%Page: 407 417
-TeXDict begin 407 416 bop 3643 52 a FG(407)-2 351 y Fc(Output)32
-b(F)-8 b(ormat)n(:)227 497 y Fk(When)29 b(enquiring)f(Ep)r(o)r(c)n(h)g
-(v)-5 b(alues,)28 b(the)h(format)f(used)g(is)h(the)f
-Ft(")p Fk(Y)-7 b(ear)p Ft(")27 b Fk(format)h(describ)r(ed)h(under)f
-Ft(")p Fk(Input)h(F)-7 b(or-)227 597 y(mats)p Ft(")p
-Fk(.)43 b(This)30 b(is)f(a)g(v)-5 b(alue)30 b(in)g(decimal)g(y)n(ears)e
-(whic)n(h)h(will)h(b)r(e)g(a)f(Besselian)g(ep)r(o)r(c)n(h)h(if)g(less)f
-(than)h(1984.0)d(and)j(a)227 697 y(Julian)h(ep)r(o)r(c)n(h)f
-(otherwise.)46 b(By)31 b(omitting)g(an)n(y)f(c)n(haracter)e(pre\014x,)k
-(this)f(format)f(allo)n(ws)f(the)j(Ep)r(o)r(c)n(h)e(v)-5
-b(alue)31 b(to)227 796 y(b)r(e)d(obtained)g(as)f(either)g(a)g(c)n
-(haracter)f(string)h(or)f(a)i(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alue.)p 0 988 3780 12 v 0 1120 a FA(Equino)l(x)708
-b Fd(Ep)s(o)s(c)m(h)39 b(of)f(the)h(mean)f(equino)m(x)706
-b FA(Equino)l(x)0 1301 y Fc(Description:)44 b Fk(This)19
-b(attribute)f(is)h(used)f(to)g(qualify)g(those)g(celestial)g(co)r
-(ordinate)f(systems)h(describ)r(ed)g(b)n(y)h(a)e(SkyF)-7
-b(rame)227 1401 y(whic)n(h)28 b(are)g(notionally)f(based)g(on)h(the)h
-(ecliptic)f(\(the)h(plane)f(of)g(the)h(Earth's)e(orbit)h(around)f(the)h
-(Sun\))h(and/or)227 1500 y(the)f(Earth's)f(equator.)227
-1623 y(Both)e(of)g(these)g(planes)g(are)f(in)h(motion)g(and)g(their)g
-(p)r(ositions)g(are)f(di\016cult)i(to)e(sp)r(ecify)i(precisely)-7
-b(.)35 b(In)25 b(practice,)227 1723 y(therefore,)36 b(a)f(mo)r(del)h
-(ecliptic)f(and/or)f(equator)g(are)g(used)h(instead.)59
-b(These,)37 b(together)d(with)i(the)g(p)r(oin)n(t)f(on)227
-1822 y(the)f(sky)f(that)h(de\014nes)g(the)g(co)r(ordinate)e(origin)h
-(\(the)h(in)n(tersection)f(of)h(the)g(t)n(w)n(o)e(planes)i(termed)f
-(the)h Ft(")p Fk(mean)227 1922 y(equino)n(x)p Ft(")p
-Fk(\))f(mo)n(v)n(e)f(with)i(time)g(according)e(to)h(some)g(mo)r(del)h
-(whic)n(h)g(remo)n(v)n(es)d(the)j(more)f(rapid)g(\015uctuations.)227
-2022 y(The)28 b(SkyF)-7 b(rame)27 b(class)f(supp)r(orts)i(b)r(oth)g
-(the)g(FK4)f(and)g(FK5)g(mo)r(dels.)227 2144 y(The)i(p)r(osition)f(of)h
-(a)f(\014xed)h(source)e(expressed)h(in)h(an)n(y)f(of)g(these)h(co)r
-(ordinate)e(systems)i(will)g(app)r(ear)e(to)i(c)n(hange)227
-2244 y(with)36 b(time)h(due)e(to)h(mo)n(v)n(emen)n(t)f(of)g(the)h(co)r
-(ordinate)f(system)g(itself)h(\(rather)f(than)h(motion)f(of)g(the)h
-(source\).)227 2344 y(Suc)n(h)25 b(co)r(ordinate)f(systems)g(m)n(ust)h
-(therefore)f(b)r(e)h(quali\014ed)f(b)n(y)h(a)f(momen)n(t)h(in)g(time)g
-(\(the)h Ft(")p Fk(ep)r(o)r(c)n(h)e(of)h(the)g(mean)227
-2443 y(equino)n(x)p Ft(")h Fk(or)g Ft(")p Fk(equino)n(x)p
-Ft(")f Fk(for)i(short\))f(whic)n(h)h(allo)n(ws)f(the)h(p)r(osition)g
-(of)g(the)h(mo)r(del)f(co)r(ordinate)f(system)g(on)h(the)227
-2543 y(sky)g(to)h(b)r(e)g(determined.)37 b(This)27 b(is)h(the)g(role)f
-(of)g(the)h(Equino)n(x)e(attribute.)227 2665 y(The)31
-b(Equino)n(x)f(attribute)h(is)f(stored)g(as)g(a)h(Mo)r(di\014ed)g
-(Julian)f(Date,)i(but)g(when)f(setting)f(or)g(getting)h(its)g(v)-5
-b(alue)227 2765 y(y)n(ou)27 b(ma)n(y)g(use)g(the)h(same)f(formats)g(as)
-g(for)g(the)h(Ep)r(o)r(c)n(h)f(attribute)h(\(q.v.\).)227
-2888 y(The)k(default)g(Equino)n(x)f(v)-5 b(alue)31 b(is)h(B1950.0)d
-(\(Besselian\))j(for)f(the)h(old)g(FK4-based)e(co)r(ordinate)g(systems)
-i(\(see)227 2987 y(the)c(System)g(attribute\))g(and)f(J2000.0)e
-(\(Julian\))j(for)f(all)h(others.)0 3133 y Fc(T)m(yp)s(e:)227
-3233 y Fk(Floating)f(p)r(oin)n(t.)0 3378 y Fc(Class)k(Applicabilit)m
-(y:)259 3511 y(SkyF)-8 b(rame)427 3611 y Fk(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 3769 y
-Fc(Notes:)340 4048 y Fj(\017)45 b Fk(Care)21 b(m)n(ust)h(b)r(e)h(tak)n
-(en)e(to)h(distinguish)g(the)h(Equino)n(x)e(v)-5 b(alue,)23
-b(whic)n(h)f(relates)f(to)h(the)g(de\014nition)h(of)f(a)f(time-)427
-4147 y(dep)r(enden)n(t)31 b(co)r(ordinate)e(system)h(\(based)f(on)h
-(solar)f(system)g(reference)h(planes)f(whic)n(h)h(are)f(in)i(motion\),)
-427 4247 y(from)f(the)h(sup)r(er\014cially)e(similar)h(Ep)r(o)r(c)n(h)g
-(v)-5 b(alue.)44 b(The)31 b(latter)e(is)i(used)f(to)g(qualify)g(co)r
-(ordinate)f(systems)427 4347 y(where)j(the)g(p)r(ositions)f(of)h
-(sources)e(c)n(hange)h(with)h(time)g(\(or)g(app)r(ear)e(to)i(do)g(so\))
-f(for)g(a)h(v)-5 b(ariet)n(y)30 b(of)i(other)427 4446
-y(reasons,)26 b(suc)n(h)h(as)g(ab)r(erration)f(of)i(ligh)n(t)f(caused)g
-(b)n(y)h(the)g(observ)n(er's)d(motion,)i(etc.)340 4575
-y Fj(\017)45 b Fk(See)25 b(the)h(description)f(of)g(the)g(System)h
-(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g(attributes)g
-(apply)g(to)427 4675 y(eac)n(h)i(celestial)g(co)r(ordinate)g(system.)p
-0 4867 V 0 4998 a FA(Escap)t(e)753 4999 y Fd(Allo)m(w)36
-b(c)m(hanges)i(of)h(c)m(haracter)d(attributes)h(within)1692
-5113 y(strings?)3373 4998 y FA(Escap)t(e)0 5295 y Fc(Description:)44
-b Fk(This)28 b(attribute)g(con)n(trols)e(the)i(app)r(earance)e(of)i
-(text)g(strings)f(and)h(n)n(umerical)f(lab)r(els)g(dra)n(wn)g(b)n(y)g
-(the)227 5394 y(AST)p Ft(_)p Fk(GRID)g(and)f(\(for)g(the)g(Plot)g
-(class\))f(AST)p Ft(_)p Fk(TEXT)h(routines,)g(b)n(y)g(determining)g(if)
-g(an)n(y)g(escap)r(e)f(sequences)227 5494 y(con)n(tained)33
-b(within)h(the)g(strings)f(should)g(b)r(e)h(used)g(to)f(con)n(trol)f
-(the)i(app)r(earance)e(of)i(the)g(text,)h(or)e(should)g(b)r(e)227
-5593 y(prin)n(ted)f(literally)-7 b(.)47 b(Note,)33 b(the)f(Plot3D)e
-(class)h(only)g(in)n(terprets)g(escap)r(e)f(sequences)h(within)h(the)g
-(AST)p Ft(_)p Fk(GRID)227 5693 y(routine.)p eop end
-%%Page: 408 418
-TeXDict begin 408 417 bop 0 52 a FG(408)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(If)24 b(the)g(Escap)r(e)f(v)-5 b(alue)24 b(of)f(a)h(Plot)f(is)g
-(one)h(\(the)g(default\),)h(then)f(an)n(y)f(escap)r(e)g(sequences)g(in)
-h(text)g(strings)f(pro)r(duce)227 451 y(the)28 b(e\013ects)g(describ)r
-(ed)f(b)r(elo)n(w)h(when)f(prin)n(ted.)37 b(Otherwise,)27
-b(they)h(are)e(prin)n(ted)i(literally)-7 b(.)227 580
-y(See)28 b(also)e(the)i(AST)p Ft(_)p Fk(ESCAPES)f(function.)0
-739 y Fc(T)m(yp)s(e:)227 839 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-997 y Fc(Class)k(Applicabilit)m(y:)259 1143 y(Plot)427
-1243 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)-2
-1414 y Fc(Escap)s(e)32 b(Sequences)n(:)227 1560 y Fk(Escap)r(e)19
-b(sequences)g(are)g(in)n(tro)r(duced)g(in)n(to)h(the)g(text)g(string)f
-(b)n(y)g(a)g(p)r(ercen)n(t)h Ft(")p Fk(\045)p Ft(")f
-Fk(c)n(haracter.)32 b(An)n(y)20 b(unrecognised,)227 1660
-y(illegal)36 b(or)f(incomplete)i(escap)r(e)f(sequences)g(are)f(prin)n
-(ted)h(literally)-7 b(.)63 b(The)37 b(follo)n(wing)e(escap)r(e)h
-(sequences)g(are)227 1759 y(curren)n(tly)27 b(recognised)f(\()p
-Ft(")p Fk(...)p Ft(")h Fk(represen)n(ts)f(a)h(string)g(of)h(one)f(or)g
-(more)g(decimal)g(digits\):)227 1888 y(\045\045)h(-)g(Prin)n(t)f(a)g
-(literal)g Ft(")p Fk(\045)p Ft(")g Fk(c)n(haracter.)227
-2018 y(\045)p Fj(^)p Fk(...+)i(-)f(Dra)n(w)g(subsequen)n(t)g(c)n
-(haracters)f(as)h(sup)r(er-scripts.)38 b(The)29 b(digits)f
-Ft(")p Fk(...)p Ft(")g Fk(giv)n(e)g(the)h(distance)f(from)g(the)227
-2117 y(base-line)e(of)g Ft(")p Fk(normal)p Ft(")f Fk(text)i(to)f(the)h
-(base-line)f(of)h(the)f(sup)r(er-script)g(text,)h(scaled)f(so)g(that)h
-(a)f(v)-5 b(alue)26 b(of)h Ft(")p Fk(100)p Ft(")227 2217
-y Fk(corresp)r(onds)h(to)h(the)h(heigh)n(t)f(of)h Ft(")p
-Fk(normal)p Ft(")e Fk(text.)43 b(\045)p Fj(^)p Fk(+)29
-b(-)h(Dra)n(w)e(subsequen)n(t)h(c)n(haracters)f(with)i(the)g(normal)227
-2317 y(base-line.)227 2446 y(\045v...+)k(-)f(Dra)n(w)g(subsequen)n(t)h
-(c)n(haracters)d(as)i(sub-scripts.)55 b(The)34 b(digits)f
-Ft(")p Fk(...)p Ft(")g Fk(giv)n(e)g(the)h(distance)g(from)f(the)227
-2545 y(base-line)d(of)h Ft(")p Fk(normal)p Ft(")e Fk(text)i(to)f(the)h
-(base-line)f(of)h(the)g(sub-script)f(text,)i(scaled)e(so)g(that)h(a)g
-(v)-5 b(alue)30 b(of)h Ft(")p Fk(100)p Ft(")227 2645
-y Fk(corresp)r(onds)26 b(to)h(the)h(heigh)n(t)g(of)f
-Ft(")p Fk(normal)p Ft(")f Fk(text.)227 2774 y(\045v+)i(-)f(Dra)n(w)g
-(subsequen)n(t)g(c)n(haracters)e(with)j(the)g(normal)f(base-line)g
-(\(equiv)-5 b(alen)n(t)27 b(to)h(\045)p Fj(^)p Fk(+\).)227
-2903 y(\045)p Fm(>)p Fk(...+)j(-)g(Lea)n(v)n(e)e(a)i(gap)f(b)r(efore)h
-(dra)n(wing)e(subsequen)n(t)i(c)n(haracters.)45 b(The)31
-b(digits)g Ft(")p Fk(...)p Ft(")f Fk(giv)n(e)g(the)i(size)e(of)h(the)
-227 3003 y(gap,)c(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28
-b(of)f Ft(")p Fk(100)p Ft(")e Fk(corresp)r(onds)h(to)i(the)g(heigh)n(t)
-f(of)h Ft(")p Fk(normal)p Ft(")d Fk(text.)227 3132 y(\045)p
-Fm(<)p Fk(...+)30 b(-)g(Mo)n(v)n(e)e(bac)n(kw)n(ards)g(b)r(efore)i(dra)
-n(wing)f(subsequen)n(t)g(c)n(haracters.)42 b(The)30 b(digits)g
-Ft(")p Fk(...)p Ft(")f Fk(giv)n(e)h(the)g(size)g(of)227
-3232 y(the)e(mo)n(v)n(emen)n(t,)f(scaled)g(so)g(that)h(a)f(v)-5
-b(alue)27 b(of)h Ft(")p Fk(100)p Ft(")d Fk(corresp)r(onds)h(to)h(the)h
-(heigh)n(t)g(of)f Ft(")p Fk(normal)p Ft(")f Fk(text.)227
-3361 y(\045s...+)g(-)g(Change)g(the)g(Size)h(attribute)f(for)g
-(subsequen)n(t)g(c)n(haracters.)34 b(The)26 b(digits)g
-Ft(")p Fk(...)p Ft(")g Fk(giv)n(e)f(the)i(new)f(Size)g(as)227
-3461 y(a)h(fraction)g(of)h(the)g Ft(")p Fk(normal)p Ft(")e
-Fk(Size,)h(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28 b(of)f
-Ft(")p Fk(100)p Ft(")f Fk(corresp)r(onds)f(to)j(1.0;)227
-3590 y(\045s+)f(-)h(Reset)f(the)h(Size)g(attribute)g(to)f(its)h
-Ft(")p Fk(normal)p Ft(")e Fk(v)-5 b(alue.)227 3719 y(\045w...+)36
-b(-)g(Change)f(the)i(Width)g(attribute)f(for)f(subsequen)n(t)h(c)n
-(haracters.)60 b(The)36 b(digits)g Ft(")p Fk(...)p Ft(")f
-Fk(giv)n(e)g(the)i(new)227 3819 y(width)29 b(as)d(a)i(fraction)f(of)g
-(the)h Ft(")p Fk(normal)p Ft(")e Fk(Width,)j(scaled)d(so)h(that)h(a)f
-(v)-5 b(alue)28 b(of)f Ft(")p Fk(100)p Ft(")f Fk(corresp)r(onds)g(to)h
-(1.0;)227 3948 y(\045w+)h(-)f(Reset)h(the)g(Size)f(attribute)h(to)g
-(its)f Ft(")p Fk(normal)p Ft(")f Fk(v)-5 b(alue.)227
-4077 y(\045f...+)31 b(-)f(Change)f(the)i(F)-7 b(on)n(t)30
-b(attribute)g(for)g(subsequen)n(t)g(c)n(haracters.)42
-b(The)31 b(digits)f Ft(")p Fk(...)p Ft(")f Fk(giv)n(e)h(the)g(new)h(F)
--7 b(on)n(t)227 4177 y(v)i(alue.)227 4306 y(\045f+)28
-b(-)f(Reset)h(the)g(F)-7 b(on)n(t)28 b(attribute)f(to)h(its)g
-Ft(")p Fk(normal)p Ft(")d Fk(v)-5 b(alue.)227 4435 y(\045c...+)37
-b(-)f(Change)g(the)h(Colour)f(attribute)h(for)f(subsequen)n(t)g(c)n
-(haracters.)62 b(The)37 b(digits)g Ft(")p Fk(...)p Ft(")f
-Fk(giv)n(e)f(the)j(new)227 4535 y(Colour)27 b(v)-5 b(alue.)227
-4664 y(\045c+)28 b(-)f(Reset)h(the)g(Colour)e(attribute)i(to)f(its)h
-Ft(")p Fk(normal)p Ft(")e Fk(v)-5 b(alue.)227 4793 y(\045t...+)29
-b(-)e(Change)h(the)g(St)n(yle)g(attribute)g(for)g(subsequen)n(t)g(c)n
-(haracters.)35 b(The)29 b(digits)f Ft(")p Fk(...)p Ft(")f
-Fk(giv)n(e)g(the)i(new)f(St)n(yle)227 4893 y(v)-5 b(alue.)227
-5022 y(\045t+)28 b(-)f(Reset)h(the)g(St)n(yle)f(attribute)h(to)g(its)g
-Ft(")p Fk(normal)p Ft(")d Fk(v)-5 b(alue.)227 5151 y(\045h+)28
-b(-)f(Remem)n(b)r(er)h(the)g(curren)n(t)e(horizon)n(tal)g(p)r(osition)i
-(\(see)f Ft(")p Fk(\045g+)p Ft(")p Fk(\))227 5280 y(\045g+)g(-)h(Go)f
-(to)g(the)h(horizon)n(tal)e(p)r(osition)i(of)f(the)h(previous)f
-Ft(")p Fk(\045h+)p Ft(")f Fk(\(if)j(an)n(y\).)227 5410
-y(\045-)f(-)f(Push)g(the)h(curren)n(t)f(graphics)f(attribute)i(v)-5
-b(alues)27 b(on)n(to)g(the)h(top)g(of)f(the)h(stac)n(k)f(\(see)g
-Ft(")p Fk(\045+)p Ft(")p Fk(\).)227 5539 y(\045+)39 b(-)g(P)n(op)f
-(attributes)h(v)-5 b(alues)38 b(of)h(the)g(top)g(the)h(stac)n(k)e
-(\(see)h Ft(")p Fk(\045-)p Ft(")p Fk(\).)70 b(If)39 b(the)h(stac)n(k)e
-(is)g(empt)n(y)-7 b(,)42 b Ft(")p Fk(normal)p Ft(")227
-5639 y Fk(attribute)28 b(v)-5 b(alues)27 b(are)g(restored.)p
-eop end
-%%Page: 409 419
-TeXDict begin 409 418 bop 3643 52 a FG(409)p 0 351 3780
-12 v 0 483 a FA(FillF)-11 b(actor)242 b Fd(F)-10 b(raction)38
-b(of)g(the)g(Region)g(whic)m(h)g(is)h(of)f(in)m(terest)240
-b FA(FillF)-11 b(actor)0 718 y Fc(Description:)44 b Fk(This)27
-b(attribute)f(indicates)g(the)h(fraction)f(of)g(the)h(Region)f(whic)n
-(h)g(is)g(of)h(in)n(terest.)36 b(AST)26 b(do)r(es)g(not)h(use)227
-818 y(this)f(attribute)g(in)n(ternally)f(for)h(an)n(y)f(purp)r(ose.)35
-b(T)n(ypically)-7 b(,)26 b(it)g(could)g(b)r(e)g(used)g(to)f(indicate)h
-(the)g(fraction)f(of)h(the)227 917 y(Region)h(for)g(whic)n(h)h(data)f
-(is)g(a)n(v)-5 b(ailable.)227 1065 y(The)30 b(supplied)h(v)-5
-b(alue)30 b(m)n(ust)g(b)r(e)h(in)f(the)h(range)e(0.0)g(to)h(1.0,)g(and)
-g(the)h(default)f(v)-5 b(alue)30 b(is)g(1.0)g(\(except)g(as)g(noted)227
-1164 y(b)r(elo)n(w\).)0 1360 y Fc(T)m(yp)s(e:)227 1460
-y Fk(Floating)d(p)r(oin)n(t.)0 1655 y Fc(Class)k(Applicabilit)m(y:)259
-1838 y(Region)427 1938 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 2094 y Fc(CmpRegion)427 2193 y Fk(The)g(default)g
-(FillF)-7 b(actor)27 b(for)g(a)g(CmpRegion)g(is)h(the)g(FillF)-7
-b(actor)27 b(of)h(its)f(\014rst)h(comp)r(onen)n(t)f(Region.)259
-2349 y Fc(Prism)427 2449 y Fk(The)36 b(default)h(FillF)-7
-b(actor)35 b(for)h(a)f(Prism)h(is)f(the)i(pro)r(duct)f(of)g(the)g
-(FillF)-7 b(actors)35 b(of)h(its)h(t)n(w)n(o)e(comp)r(onen)n(t)427
-2548 y(Regions.)259 2704 y Fc(Stc)427 2804 y Fk(The)28
-b(default)g(FillF)-7 b(actor)27 b(for)g(an)g(Stc)h(is)g(the)g(FillF)-7
-b(actor)27 b(of)g(its)h(encapsulated)f(Region.)p 0 3049
-V 0 3181 a FA(FitsDigits)243 b Fd(Digits)38 b(of)g(precision)g(for)g
-(\015oating)e(p)s(oin)m(t)i(FITS)1735 3296 y(v)-7 b(alues)3202
-3181 y FA(FitsDigits)0 3507 y Fc(Description:)44 b Fk(This)24
-b(attribute)h(giv)n(es)d(the)j(n)n(um)n(b)r(er)f(of)g(signi\014can)n(t)
-f(decimal)h(digits)g(to)g(use)g(when)g(formatting)f(\015oat-)227
-3607 y(ing)28 b(p)r(oin)n(t)f(v)-5 b(alues)28 b(for)f(inclusion)g(in)h
-(the)g(FITS)g(header)f(cards)f(within)i(a)g(FitsChan.)227
-3755 y(By)c(default,)i(a)e(p)r(ositiv)n(e)g(v)-5 b(alue)24
-b(is)g(used)h(whic)n(h)f(results)g(in)g(no)h(loss)e(of)h(information,)h
-(assuming)e(that)i(the)g(v)-5 b(alue)227 3854 y(is)28
-b(double)f(precision.)36 b(Usually)-7 b(,)28 b(this)f(causes)g(no)g
-(problems.)227 4002 y(Ho)n(w)n(ev)n(er,)22 b(to)g(adhere)g(strictly)g
-(to)g(the)h(recommendations)e(of)i(the)g(FITS)g(standard,)f(the)h
-(width)g(of)g(the)f(format-)227 4102 y(ted)31 b(v)-5
-b(alue)30 b(\(including)g(sign,)h(decimal)f(p)r(oin)n(t)g(and)g(exp)r
-(onen)n(t\))g(ough)n(t)g(not)g(to)g(b)r(e)g(more)f(than)i(20)e(c)n
-(haracters.)227 4201 y(If)f(y)n(ou)e(are)h(concerned)f(ab)r(out)h
-(this,)h(y)n(ou)e(should)h(set)h(FitsDigits)f(to)h(a)e(negativ)n(e)h(v)
--5 b(alue,)27 b(suc)n(h)g(as)f(-15.)36 b(In)27 b(this)227
-4301 y(case,)g(the)h(absolute)f(v)-5 b(alue)27 b(\(+15\))g(indicates)g
-(the)h(maxim)n(um)f(n)n(um)n(b)r(er)g(of)g(signi\014can)n(t)g(digits)g
-(to)h(use,)f(but)h(the)227 4400 y(actual)23 b(n)n(um)n(b)r(er)f(used)h
-(ma)n(y)g(b)r(e)g(few)n(er)g(than)g(this)g(to)g(ensure)f(that)i(the)f
-(FITS)g(recommendations)f(are)g(satis\014ed.)227 4500
-y(When)g(using)g(this)f(approac)n(h,)g(the)h(resulting)f(n)n(um)n(b)r
-(er)g(of)h(signi\014can)n(t)f(digits)g(ma)n(y)g(dep)r(end)h(on)f(the)h
-(v)-5 b(alue)22 b(b)r(eing)227 4600 y(formatted)28 b(and)f(on)g(the)h
-(presence)f(of)h(an)n(y)f(sign,)g(decimal)g(p)r(oin)n(t)h(or)f(exp)r
-(onen)n(t.)227 4747 y(The)19 b(v)-5 b(alue)18 b(of)g(this)h(attribute)f
-(is)h(e\013ectiv)n(e)f(when)h(FITS)f(header)g(cards)f(are)g(output,)k
-(either)e(using)f(AST)p Ft(_)p Fk(FINDFITS)227 4847 y(or)27
-b(b)n(y)g(the)h(action)f(of)h(the)g(FitsChan's)f(sink)h(routine)f(when)
-h(it)g(is)f(\014nally)h(deleted.)0 5043 y Fc(T)m(yp)s(e:)227
-5142 y Fk(In)n(teger.)0 5338 y Fc(Class)j(Applicabilit)m(y:)259
-5520 y(FitsChan)427 5620 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 410 420
-TeXDict begin 410 419 bop 0 52 a FG(410)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(F)-11 b(on)l(t\(elemen)l(t\))1034
-483 y Fd(Character)36 b(fon)m(t)i(for)g(a)g(Plot)f(elemen)m(t)2954
-490 y FA(F)-11 b(on)l(t\(elemen)l(t\))0 701 y Fc(Description:)44
-b Fk(This)35 b(attribute)g(determines)f(the)h(c)n(haracter)d(fon)n(t)j
-(index)g(used)f(when)h(dra)n(wing)e(eac)n(h)h(elemen)n(t)h(of)227
-801 y(graphical)25 b(output)j(pro)r(duced)e(b)n(y)h(a)f(Plot.)36
-b(It)27 b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)27 b(for)f(eac)n(h)g
-(graphical)f(elemen)n(t)i(so)f(that,)227 901 y(for)h(instance,)h(the)g
-(setting)f Ft(")p Fk(F)-7 b(on)n(t\(title\)=2)p Ft(")27
-b Fk(causes)g(the)h(Plot)f(title)h(to)g(b)r(e)g(dra)n(wn)e(using)h(fon)
-n(t)h(n)n(um)n(b)r(er)f(2.)227 1033 y(The)i(range)f(of)h(in)n(teger)e
-(fon)n(t)i(indices)g(a)n(v)-5 b(ailable)28 b(and)g(the)i(app)r(earance)
-d(of)i(the)g(resulting)f(text)i(is)e(determined)227 1133
-y(b)n(y)c(the)g(underlying)f(graphics)g(system.)35 b(The)24
-b(default)g(b)r(eha)n(viour)f(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)f(b)r(e)i(dra)n(wn)227 1233 y(using)j(the)f(default)i(fon)n(t)e
-(supplied)h(b)n(y)f(this)h(graphics)f(system.)0 1398
-y Fc(T)m(yp)s(e:)227 1498 y Fk(In)n(teger.)0 1664 y Fc(Class)k
-(Applicabilit)m(y:)259 1817 y(Plot)427 1916 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 2095 y Fc(Notes:)340 2393 y
-Fj(\017)45 b Fk(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e
-(elemen)n(ts)h(a)n(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g
-(the)h(Plot)f(class.)340 2534 y Fj(\017)45 b Fk(If)34
-b(no)f(graphical)f(elemen)n(t)h(is)h(sp)r(eci\014ed,)h(\(e.g.)54
-b Ft(")p Fk(F)-7 b(on)n(t)p Ft(")32 b Fk(instead)h(of)h
-Ft(")p Fk(F)-7 b(on)n(t\(title\))p Ft(")p Fk(\),)35 b(then)f(a)f
-Ft(")p Fk(set)p Ft(")f Fk(or)427 2634 y Ft(")p Fk(clear)p
-Ft(")g Fk(op)r(eration)h(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)34 b(of)f(all)h(graphical)e(elemen)n(ts,)j(while)f(a)g
-Ft(")p Fk(get)p Ft(")e Fk(or)427 2734 y Ft(")p Fk(test)p
-Ft(")27 b Fk(op)r(eration)g(will)h(use)f(just)h(the)g(F)-7
-b(on)n(t\(T)g(extLab\))28 b(v)-5 b(alue.)p 0 2949 V 0
-3088 a FA(F)-11 b(ormat\(axis\))987 3081 y Fd(F)h(ormat)38
-b(sp)s(eci\014cation)f(for)h(axis)g(v)-7 b(alues)3023
-3088 y FA(F)c(ormat\(axis\))0 3299 y Fc(Description:)44
-b Fk(This)21 b(attribute)g(sp)r(eci\014es)f(the)h(format)f(to)h(b)r(e)g
-(used)f(when)h(displa)n(ying)e(co)r(ordinate)h(v)-5 b(alues)20
-b(asso)r(ciated)227 3399 y(with)j(a)e(particular)f(F)-7
-b(rame)22 b(axis)f(\(i.e.)35 b(to)22 b(con)n(v)n(ert)e(v)-5
-b(alues)21 b(from)h(binary)f(to)h(c)n(haracter)d(form\).)35
-b(It)22 b(is)g(in)n(terpreted)227 3499 y(b)n(y)28 b(the)g(AST)p
-Ft(_)p Fk(F)n(ORMA)-7 b(T)27 b(function)h(and)g(determines)f(the)h
-(formatting)f(whic)n(h)h(it)g(applies.)227 3631 y(If)33
-b(no)g(F)-7 b(ormat)32 b(v)-5 b(alue)32 b(is)h(set)f(for)g(a)h(F)-7
-b(rame)32 b(axis,)h(a)f(default)h(v)-5 b(alue)32 b(is)h(supplied)g
-(instead.)52 b(This)32 b(is)h(based)f(on)227 3731 y(the)i(v)-5
-b(alue)32 b(of)h(the)h(Digits,)g(or)e(Digits\(axis\),)i(attribute)g
-(and)e(is)h(c)n(hosen)f(so)g(that)i(it)f(displa)n(ys)f(the)h(requested)
-227 3831 y(n)n(um)n(b)r(er)28 b(of)f(digits)h(of)f(precision.)0
-3996 y Fc(T)m(yp)s(e:)227 4096 y Fk(String.)0 4262 y
-Fc(Class)k(Applicabilit)m(y:)259 4415 y(F)-8 b(rame)427
-4514 y Fk(The)28 b(F)-7 b(rame)27 b(class)f(in)n(terprets)h(this)g
-(attribute)h(as)f(a)g(format)f(sp)r(eci\014cation)i(string)e(to)i(b)r
-(e)f(passed)g(to)g(the)427 4614 y(C)h Ft(")p Fk(prin)n(tf)p
-Ft(")e Fk(function)i(\(e.g.)37 b Ft(")p Fk(\0451.7G)p
-Ft(")p Fk(\))26 b(in)i(order)e(to)h(format)g(a)g(single)g(co)r
-(ordinate)f(v)-5 b(alue)27 b(\(supplied)h(as)427 4714
-y(a)f(double)h(precision)f(n)n(um)n(b)r(er\).)259 4855
-y Fc(SkyF)-8 b(rame)427 4954 y Fk(The)36 b(SkyF)-7 b(rame)35
-b(class)f(re-de\014nes)h(the)h(syn)n(tax)e(and)i(default)g(v)-5
-b(alue)35 b(of)h(the)g(F)-7 b(ormat)34 b(string)h(to)h(allo)n(w)427
-5054 y(the)i(formatting)f(of)g(sexagesimal)e(v)-5 b(alues)37
-b(as)f(appropriate)g(for)h(the)g(particular)f(celestial)h(co)r
-(ordinate)427 5153 y(system)c(b)r(eing)h(represen)n(ted.)52
-b(The)34 b(syn)n(tax)e(of)h(SkyF)-7 b(rame)33 b(F)-7
-b(ormat)32 b(strings)h(is)g(describ)r(ed)g(\(b)r(elo)n(w\))g(in)427
-5253 y(the)28 b Ft(")p Fk(SkyF)-7 b(rame)27 b(F)-7 b(ormats)p
-Ft(")26 b Fk(section.)259 5394 y Fc(F)-8 b(rameSet)427
-5494 y Fk(The)23 b(F)-7 b(ormat)23 b(attribute)g(of)g(a)g(F)-7
-b(rameSet)23 b(axis)f(is)h(the)h(same)e(as)h(that)g(of)g(its)h(curren)n
-(t)e(F)-7 b(rame)23 b(\(as)f(sp)r(eci\014ed)427 5593
-y(b)n(y)30 b(the)g(Curren)n(t)g(attribute\).)44 b(Note)30
-b(that)g(the)h(syn)n(tax)e(of)h(the)g(F)-7 b(ormat)30
-b(string)f(is)h(also)f(determined)h(b)n(y)427 5693 y(the)e(curren)n(t)f
-(F)-7 b(rame.)p eop end
-%%Page: 411 421
-TeXDict begin 411 420 bop 3643 52 a FG(411)259 351 y
-Fc(TimeF)-8 b(rame)427 451 y Fk(The)37 b(TimeF)-7 b(rame)36
-b(class)g(extends)h(the)g(syn)n(tax)f(of)g(the)h(F)-7
-b(ormat)36 b(string)g(to)h(allo)n(w)e(the)j(formatting)e(of)427
-551 y(TimeF)-7 b(rame)34 b(axis)f(v)-5 b(alues)34 b(as)f(Gregorian)f
-(calendar)g(dates)i(and)g(times.)56 b(The)34 b(syn)n(tax)f(of)h(TimeF)
--7 b(rame)427 650 y(F)g(ormat)27 b(strings)g(is)g(describ)r(ed)h(\(b)r
-(elo)n(w\))g(in)f(the)h Ft(")p Fk(TimeF)-7 b(rame)27
-b(F)-7 b(ormats)p Ft(")26 b Fk(section.)0 820 y Fc(Notes:)340
-1110 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 1210 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)-2 1380 y Fc(SkyF)-8 b(rame)33 b(F)-8
-b(ormats)n(:)227 1526 y Fk(The)23 b(F)-7 b(ormat)21 b(string)h
-(supplied)h(for)e(a)h(SkyF)-7 b(rame)22 b(should)g(con)n(tain)g(zero)f
-(or)g(more)h(of)g(the)h(follo)n(wing)e(c)n(haracters.)227
-1625 y(These)28 b(ma)n(y)e(o)r(ccur)h(in)h(an)n(y)f(order,)f(but)j(the)
-f(follo)n(wing)e(is)i(recommended)f(for)g(clarit)n(y:)340
-1898 y Fj(\017)45 b Ft(")p Fk(+)p Ft(")p Fk(:)34 b(Indicates)24
-b(that)g(a)f(plus)h(sign)f(should)h(b)r(e)g(pre\014xed)f(to)h(p)r
-(ositiv)n(e)f(v)-5 b(alues.)35 b(By)24 b(default,)h(no)e(plus)h(sign)
-427 1998 y(is)k(used.)340 2134 y Fj(\017)45 b Ft(")p
-Fk(z)p Ft(")p Fk(:)e(Indicates)31 b(that)g(leading)g(zeros)f(should)h
-(b)r(e)g(pre\014xed)g(to)g(the)g(v)-5 b(alue)31 b(so)g(that)g(the)g
-(\014rst)g(\014eld)h(is)f(of)427 2234 y(constan)n(t)23
-b(width,)j(as)d(w)n(ould)g(b)r(e)h(required)f(in)h(a)g(\014xed-width)g
-(table)f(\(leading)h(zeros)e(are)h(alw)n(a)n(ys)f(pre\014xed)427
-2334 y(to)28 b(an)n(y)f(\014elds)g(that)h(follo)n(w\).)36
-b(By)28 b(default,)g(no)f(leading)g(zeros)f(are)h(added.)340
-2470 y Fj(\017)45 b Ft(")p Fk(i)p Ft(")p Fk(:)64 b(Use)42
-b(the)g(standard)e(ISO)h(\014eld)h(separator)d(\(a)j(colon\))e(b)r(et)n
-(w)n(een)i(\014elds.)78 b(This)42 b(is)f(the)h(default)427
-2570 y(b)r(eha)n(viour.)340 2707 y Fj(\017)j Ft(")p Fk(b)p
-Ft(")p Fk(:)37 b(Use)27 b(a)g(blank)h(to)f(separate)f(\014elds.)340
-2844 y Fj(\017)45 b Ft(")p Fk(l)p Ft(")p Fk(:)36 b(Use)28
-b(a)f(letter)h(\()p Ft(")p Fk(h)p Ft(")p Fk(/)p Ft(")p
-Fk(d)p Ft(")p Fk(,)e Ft(")p Fk(m)p Ft(")h Fk(or)g Ft(")p
-Fk(s)p Ft(")f Fk(as)h(appropriate\))f(to)i(separate)e(\014elds.)340
-2980 y Fj(\017)45 b Ft(")p Fk(g)p Ft(")p Fk(:)37 b(Use)28
-b(a)g(letter)h(and)f(sym)n(b)r(ols)f(to)h(separate)f(\014elds)h(\()p
-Ft(")p Fk(h)p Ft(")p Fk(/)p Ft(")p Fk(d)p Ft(")p Fk(,)f
-Ft(")p Fk(m)p Ft(")h Fk(or)f Ft(")p Fk(s)p Ft(")p Fk(,)h(etc,)g(as)g
-(appropriate\),)427 3080 y(but)39 b(include)g(escap)r(e)e(sequences)h
-(in)g(the)h(formatted)e(v)-5 b(alue)39 b(so)e(that)h(the)h(Plot)f
-(class)f(will)h(dra)n(w)f(the)427 3180 y(separators)25
-b(as)i(small)g(sup)r(er-scripts.)340 3316 y Fj(\017)45
-b Ft(")p Fk(d)p Ft(")p Fk(:)35 b(Include)24 b(a)g(degrees)f(\014eld.)36
-b(Expressing)23 b(the)h(angle)g(purely)g(in)g(degrees)f(is)h(also)g
-(the)g(default)h(if)g(none)427 3416 y(of)j Ft(")p Fk(h)p
-Ft(")p Fk(,)f Ft(")p Fk(m)p Ft(")p Fk(,)g Ft(")p Fk(s)p
-Ft(")g Fk(or)f Ft(")p Fk(t)p Ft(")h Fk(are)g(giv)n(en.)340
-3553 y Fj(\017)45 b Ft(")p Fk(h)p Ft(")p Fk(:)e(Express)29
-b(the)i(angle)f(as)g(a)h(time)g(and)g(include)g(an)f(hours)g(\014eld)h
-(\(where)g(24)f(hours)g(corresp)r(ond)f(to)427 3652 y(360)e(degrees\).)
-37 b(Expressing)26 b(the)j(angle)e(purely)h(in)g(hours)f(is)h(also)f
-(the)h(default)h(if)f Ft(")p Fk(t)p Ft(")g Fk(is)g(giv)n(en)f(without)
-427 3752 y(either)h Ft(")p Fk(m)p Ft(")f Fk(or)f Ft(")p
-Fk(s)p Ft(")p Fk(.)340 3889 y Fj(\017)45 b Ft(")p Fk(m)p
-Ft(")p Fk(:)37 b(Include)27 b(a)h(min)n(utes)f(\014eld.)38
-b(By)27 b(default)h(this)g(is)f(not)h(included.)340 4025
-y Fj(\017)45 b Ft(")p Fk(s)p Ft(")p Fk(:)d(Include)31
-b(a)f(seconds)g(\014eld.)46 b(By)31 b(default)g(this)g(is)f(not)h
-(included.)46 b(This)31 b(request)f(is)h(ignored)e(if)i
-Ft(")p Fk(d)p Ft(")427 4125 y Fk(or)c Ft(")p Fk(h)p Ft(")g
-Fk(is)g(giv)n(en,)g(unless)h(a)f(min)n(utes)h(\014eld)g(is)f(also)f
-(included.)340 4262 y Fj(\017)45 b Ft(")p Fk(t)p Ft(")p
-Fk(:)37 b(Express)26 b(the)h(angle)g(as)g(a)g(time)h(\(where)f(24)g
-(hours)f(corresp)r(ond)g(to)h(360)f(degrees\).)36 b(This)28
-b(option)f(is)427 4361 y(ignored)c(if)h(either)g Ft(")p
-Fk(d)p Ft(")f Fk(or)g Ft(")p Fk(h)p Ft(")g Fk(is)g(giv)n(en)g(and)h(is)
-f(in)n(tended)i(for)e(use)g(where)h(the)g(v)-5 b(alue)23
-b(is)h(to)g(b)r(e)g(expressed)427 4461 y(purely)29 b(in)g(min)n(utes)g
-(and/or)e(seconds)h(of)h(time)g(\(with)h(no)e(hours)g(\014eld\).)42
-b(If)29 b Ft(")p Fk(t)p Ft(")f Fk(is)h(giv)n(en)f(without)h
-Ft(")p Fk(d)p Ft(")p Fk(,)427 4561 y Ft(")p Fk(h)p Ft(")p
-Fk(,)e Ft(")p Fk(m)p Ft(")g Fk(or)g Ft(")p Fk(s)p Ft(")g
-Fk(b)r(eing)g(presen)n(t,)g(then)h(it)g(is)g(equiv)-5
-b(alen)n(t)27 b(to)h Ft(")p Fk(h)p Ft(")p Fk(.)340 4697
-y Fj(\017)45 b Ft(")p Fk(.)p Ft(")p Fk(:)f(Indicates)31
-b(that)g(decimal)g(places)g(are)f(to)h(b)r(e)h(giv)n(en)e(for)h(the)h
-(\014nal)f(\014eld)g(in)h(the)f(formatted)g(string)427
-4797 y(\(whic)n(hev)n(er)20 b(\014eld)h(this)f(is\).)35
-b(The)21 b Ft(")p Fk(.)p Ft(")e Fk(should)i(b)r(e)f(follo)n(w)n(ed)g
-(immediately)g(b)n(y)h(an)f(unsigned)g(in)n(teger)g(whic)n(h)427
-4897 y(giv)n(es)30 b(the)i(n)n(um)n(b)r(er)f(of)g(decimal)g(places)f
-(required,)h(or)f(b)n(y)h(an)g(asterisk.)46 b(If)32 b(an)f(asterisk)f
-(is)h(supplied,)h(a)427 4996 y(default)c(n)n(um)n(b)r(er)g(of)f
-(decimal)h(places)f(is)g(used)h(whic)n(h)f(is)h(based)f(on)g(the)h(v)-5
-b(alue)27 b(of)h(the)g(Digits)g(attribute.)227 5166 y(All)21
-b(of)f(the)g(ab)r(o)n(v)n(e)f(format)h(sp)r(eci\014ers)f(are)g
-(case-insensitiv)n(e.)33 b(If)20 b(sev)n(eral)f(c)n(haracters)e(mak)n
-(e)j(con\015icting)f(requests)227 5266 y(\(e.g.)38 b(if)29
-b(b)r(oth)g Ft(")p Fk(i)p Ft(")e Fk(and)h Ft(")p Fk(b)p
-Ft(")f Fk(app)r(ear\),)h(then)h(the)f(c)n(haracter)e(o)r(ccurring)h
-(last)g(tak)n(es)h(precedence,)f(except)h(that)227 5365
-y Ft(")p Fk(d)p Ft(")f Fk(and)h Ft(")p Fk(h)p Ft(")f
-Fk(alw)n(a)n(ys)e(o)n(v)n(erride)h Ft(")p Fk(t)p Ft(")p
-Fk(.)227 5494 y(If)i(the)g(format)f(string)f(starts)h(with)h(a)f(p)r
-(ercen)n(tage)f(sign)g(\(\045\),)j(then)f(the)f(whole)g(format)g
-(string)g(is)g(assumed)g(to)227 5593 y(conform)33 b(to)g(the)h(syn)n
-(tax)e(de\014ned)i(b)n(y)f(the)h(F)-7 b(rame)33 b(class,)h(and)f(the)g
-(axis)g(v)-5 b(alues)33 b(is)g(formated)g(as)g(a)g(decimal)227
-5693 y(radians)27 b(v)-5 b(alue.)p eop end
-%%Page: 412 422
-TeXDict begin 412 421 bop 0 52 a FG(412)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fc(TimeF)-8 b(rame)32 b(F)-8 b(ormats)n(:)227 497 y Fk(The)37
-b(F)-7 b(ormat)36 b(string)f(supplied)i(for)f(a)g(TimeF)-7
-b(rame)36 b(should)g(either)h(use)f(the)h(syn)n(tax)e(de\014ned)i(b)n
-(y)f(the)h(base)227 597 y(F)-7 b(rame)31 b(class)g(\(i.e.)48
-b(a)31 b(C)h Ft(")p Fk(prin)n(tf)p Ft(")e Fk(format)h(string\),)h(or)f
-(the)h(extended)f Ft(")p Fk(iso)p Ft(")f Fk(syn)n(tax)h(describ)r(ed)g
-(b)r(elo)n(w)g(\(the)227 697 y(default)d(v)-5 b(alue)28
-b(is)f(inherited)h(from)f(the)h(F)-7 b(rame)27 b(class\):)340
-952 y Fj(\017)45 b Fk(C)28 b Ft(")p Fk(prin)n(tf)p Ft(")f
-Fk(syn)n(tax:)36 b(If)28 b(the)g(F)-7 b(ormat)28 b(string)f(is)g(a)g(C)
-h Ft(")p Fk(prin)n(tf)p Ft(")f Fk(format)g(description)g(suc)n(h)h(as)f
-Ft(")p Fk(\0451.7G)p Ft(")p Fk(,)427 1052 y(the)32 b(TimeF)-7
-b(rame)31 b(axis)f(v)-5 b(alue)31 b(will)h(b)r(e)g(formatted)f(without)
-g(c)n(hange)f(as)h(a)g(\015oating)f(p)r(oin)n(t)i(v)-5
-b(alue)31 b(using)427 1151 y(this)f(format.)41 b(The)29
-b(formatted)g(string)f(will)i(th)n(us)f(represen)n(t)f(an)h(o\013set)g
-(from)f(the)i(zero)e(p)r(oin)n(t)h(sp)r(eci\014ed)427
-1251 y(b)n(y)24 b(the)h(TimeF)-7 b(rame's)23 b(TimeOrigin)g(attribute,)
-i(measured)f(in)g(units)h(giv)n(en)e(b)n(y)h(the)g(TimeF)-7
-b(rame's)24 b(Unit)427 1350 y(attribute.)340 1480 y Fj(\017)45
-b Ft(")p Fk(iso)p Ft(")31 b Fk(syn)n(tax:)45 b(This)33
-b(is)f(used)g(to)g(format)g(a)g(TimeF)-7 b(rame)31 b(axis)h(v)-5
-b(alue)32 b(as)g(a)f(Gregorian)g(date)h(follo)n(w)n(ed)427
-1579 y(b)n(y)g(an)g(optional)f(time)i(of)f(da)n(y)-7
-b(.)50 b(If)33 b(the)f(F)-7 b(ormat)32 b(v)-5 b(alue)32
-b(commences)f(with)i(the)f(string)g Ft(")p Fk(iso)p Ft(")f
-Fk(then)h(the)427 1679 y(TimeF)-7 b(rame)32 b(axis)f(v)-5
-b(alue)32 b(will)g(b)r(e)g(con)n(v)n(erted)f(to)h(an)f(absolute)h(MJD,)
-g(including)g(the)g(addition)g(of)g(the)427 1778 y(curren)n(t)d
-(TimeOrigin)f(v)-5 b(alue,)29 b(and)h(then)f(formatted)g(as)g(a)g
-(Gregorian)e(date)i(using)g(the)g(format)g Ft(")p Fk(yyyy-)427
-1878 y(mm-dd)p Ft(")p Fk(.)44 b(Optionally)-7 b(,)29
-b(the)i(F)-7 b(ormat)29 b(v)-5 b(alue)30 b(ma)n(y)f(include)h(an)f(in)n
-(teger)g(precision)g(follo)n(wing)g(the)h Ft(")p Fk(iso)p
-Ft(")427 1978 y Fk(sp)r(eci\014cation)e(\(e.g.)39 b Ft(")p
-Fk(iso.2)p Ft(")p Fk(\),)27 b(in)h(whic)n(h)h(case)e(the)i(time)g(of)f
-(da)n(y)f(will)i(b)r(e)f(app)r(ended)h(to)f(the)h(formatted)427
-2077 y(date)e(\(if)g(no)f(time)h(of)g(da)n(y)e(is)i(included,)g(the)g
-(date)f(\014eld)h(is)f(rounded)g(to)h(the)f(nearest)g(da)n(y\).)36
-b(The)27 b(in)n(teger)427 2177 y(v)-5 b(alue)26 b(in)g(the)h(F)-7
-b(ormat)25 b(string)g(indicates)h(the)g(n)n(um)n(b)r(er)g(of)g(decimal)
-g(places)f(to)h(use)g(in)g(the)g(seconds)f(\014eld.)427
-2277 y(F)-7 b(or)27 b(instance,)h(a)g(F)-7 b(ormat)27
-b(v)-5 b(alue)27 b(of)h Ft(")p Fk(iso.0)p Ft(")e Fk(pro)r(duces)h(a)h
-(time)g(of)g(da)n(y)f(of)h(the)g(form)f Ft(")p Fk(hh:mm:ss)p
-Ft(")p Fk(,)h(and)427 2376 y(a)i(F)-7 b(ormat)30 b(v)-5
-b(alue)30 b(of)g Ft(")p Fk(iso.2)p Ft(")e Fk(pro)r(duces)h(a)h(time)h
-(of)f(da)n(y)f(of)i(the)f(form)g Ft(")p Fk(hh:mm:ss.ss)p
-Ft(")p Fk(.)43 b(The)31 b(date)f(and)427 2476 y(time)e(\014elds)g(will)
-g(b)r(e)g(separated)e(b)n(y)h(a)h(space)e(unless)i('T')g(is)f(app)r
-(ended)h(to)f(the)h(end)g(of)g(string,)f(in)h(whic)n(h)427
-2575 y(case)c(the)h(letter)g(T)g(\(upp)r(er)g(case\))g(will)g(b)r(e)g
-(used)g(as)f(the)h(separator.)34 b(The)25 b(v)-5 b(alue)24
-b(of)h(the)g(Digits)g(attribute)427 2675 y(is)j(ignored)e(when)i(using)
-f(this)h Ft(")p Fk(iso)p Ft(")e Fk(format.)p 0 2867 3780
-12 v 0 2999 a FA(F)-11 b(ull)1031 b Fd(Set)39 b(lev)m(el)e(of)i(output)
-e(detail)1030 b FA(F)-11 b(ull)0 3180 y Fc(Description:)44
-b Fk(This)26 b(attribute)g(is)g(a)f(three-state)g(\015ag)g(and)g(tak)n
-(es)g(v)-5 b(alues)25 b(of)h(-1,)f(0)h(or)e(+1.)36 b(It)26
-b(con)n(trols)e(the)i(amoun)n(t)227 3280 y(of)i(information)f(included)
-h(in)g(the)g(output)g(generated)e(b)n(y)i(a)f(Channel.)227
-3402 y(If)33 b(F)-7 b(ull)32 b(is)g(zero,)h(then)f(a)g(mo)r(dest)g
-(amoun)n(t)g(of)g(non-essen)n(tial)e(but)j(useful)g(information)e(will)
-h(b)r(e)h(included)f(in)227 3502 y(the)j(output.)57 b(If)35
-b(F)-7 b(ull)35 b(is)f(negativ)n(e,)h(all)f(non-essen)n(tial)f
-(information)h(will)g(b)r(e)h(suppressed)e(to)i(minimise)f(the)227
-3602 y(amoun)n(t)27 b(of)h(output,)g(while)g(if)g(it)g(is)f(p)r(ositiv)
-n(e,)h(the)g(output)g(will)g(include)g(the)f(maxim)n(um)h(amoun)n(t)f
-(of)h(detailed)227 3701 y(information)f(ab)r(out)h(the)g(Ob)5
-b(ject)27 b(b)r(eing)h(written.)0 3847 y Fc(T)m(yp)s(e:)227
-3946 y Fk(In)n(teger.)0 4092 y Fc(Class)j(Applicabilit)m(y:)259
-4225 y(Channel)427 4325 y Fk(The)d(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(normal)f(Channel.)259 4454 y
-Fc(FitsChan)427 4553 y Fk(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(FitsChan.)259 4682 y Fc(XmlChan)427
-4782 y Fk(The)h(default)g(v)-5 b(alue)27 b(is)h(-1)f(for)g(an)g
-(XmlChan.)259 4911 y Fc(StcsChan)427 5011 y Fk(The)i(default)g(v)-5
-b(alue)28 b(is)g(zero)f(for)h(an)g(StcsChan.)39 b(Set)29
-b(a)f(p)r(ositiv)n(e)g(v)-5 b(alue)28 b(to)g(cause)g(default)h(v)-5
-b(alues)28 b(to)g(b)r(e)427 5110 y(included)g(in)g(STC-S)g
-(descriptions.)0 5269 y Fc(Notes:)340 5547 y Fj(\017)45
-b Fk(All)27 b(p)r(ositiv)n(e)f(v)-5 b(alues)26 b(supplied)h(for)f(this)
-g(attribute)h(are)e(con)n(v)n(erted)g(to)h(+1)g(and)g(all)g(negativ)n
-(e)g(v)-5 b(alues)26 b(are)427 5647 y(con)n(v)n(erted)g(to)i(-1.)p
-eop end
-%%Page: 413 423
-TeXDict begin 413 422 bop 3643 52 a FG(413)p 0 351 3780
-12 v 0 490 a FA(Gap\(axis\))779 483 y Fd(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(linearly)f(spaced)h(ma)7
-b(jor)37 b(axis)1492 598 y(v)-7 b(alues)39 b(of)f(a)g(Plot)3202
-490 y FA(Gap\(axis\))0 735 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 835
-y(AST)p Ft(_)p Fk(GRID)d(routine\))e(b)n(y)h(determining)g(the)g
-(linear)f(in)n(terv)-5 b(al)25 b(b)r(et)n(w)n(een)h(the)g
-Ft(")p Fk(ma)5 b(jor)p Ft(")24 b Fk(axis)h(v)-5 b(alues)25
-b(of)h(a)f(Plot,)227 934 y(at)33 b(whic)n(h)h(\(for)f(example\))g(ma)5
-b(jor)32 b(tic)n(k)h(marks)g(are)f(dra)n(wn.)53 b(It)34
-b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)33 b(for)g(eac)n(h)f(ph)n
-(ysical)227 1034 y(axis)i(of)g(the)h(Plot)f(so)f(that,)k(for)c
-(instance,)j(the)f(setting)f Ft(")p Fk(Gap\(2\)=3.0)p
-Ft(")e Fk(sp)r(eci\014es)j(the)f(di\013erence)h(b)r(et)n(w)n(een)227
-1134 y(adjacen)n(t)30 b(ma)5 b(jor)30 b(v)-5 b(alues)30
-b(along)f(the)i(second)f(axis.)45 b(The)31 b(Gap)g(attribute)f(is)h
-(only)f(used)h(when)f(the)h(LogTic)n(ks)227 1233 y(attribute)c
-(indicates)f(that)h(the)g(spacing)e(b)r(et)n(w)n(een)i(ma)5
-b(jor)25 b(axis)h(v)-5 b(alues)26 b(is)g(to)h(b)r(e)f(linear.)36
-b(If)27 b(ma)5 b(jor)25 b(axis)h(v)-5 b(alues)227 1333
-y(are)27 b(logarithmically)f(spaced)h(then)h(the)g(gap)f(is)g(sp)r
-(eci\014ed)h(using)f(attribute)h(LogGap.)227 1449 y(The)35
-b(Gap)f(v)-5 b(alue)35 b(supplied)g(will)f(usually)h(b)r(e)g(rounded)f
-(to)g(the)h(nearest)f Ft(")p Fk(nice)p Ft(")f Fk(v)-5
-b(alue,)37 b(suitable)d(\(e.g.\))58 b(for)227 1549 y(generating)26
-b(axis)g(lab)r(els,)h(b)r(efore)g(use.)36 b(T)-7 b(o)27
-b(a)n(v)n(oid)e(this)i Ft(")p Fk(nicing)p Ft(")f Fk(y)n(ou)h(should)f
-(set)h(an)g(explicit)g(format)g(for)f(the)227 1649 y(axis)g(using)h
-(the)g(F)-7 b(ormat\(axis\))26 b(or)g(Digits/Digits\(axis\))h
-(attribute.)37 b(The)27 b(default)g(b)r(eha)n(viour)f(is)g(for)h(the)g
-(Plot)227 1748 y(to)g(generate)f(its)h(o)n(wn)g(Gap)g(v)-5
-b(alue)27 b(when)g(required,)f(based)h(on)g(the)g(range)f(of)h(axis)f
-(v)-5 b(alues)27 b(to)g(b)r(e)h(represen)n(ted.)0 1881
-y Fc(T)m(yp)s(e:)227 1981 y Fk(Floating)f(p)r(oin)n(t.)0
-2114 y Fc(Class)k(Applicabilit)m(y:)259 2234 y(Plot)427
-2334 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2480 y Fc(Notes:)340 2746 y Fj(\017)45 b Fk(The)27 b(Gap)f(v)-5
-b(alue)27 b(should)f(use)g(the)h(same)f(units)h(as)f(are)g(used)g(in)n
-(ternally)g(for)g(storing)g(co)r(ordinate)f(v)-5 b(alues)427
-2845 y(on)32 b(the)h(corresp)r(onding)d(axis.)50 b(F)-7
-b(or)32 b(example,)h(with)g(a)f(celestial)g(co)r(ordinate)f(system,)i
-(the)g(Gap)f(v)-5 b(alue)427 2945 y(should)28 b(b)r(e)g(in)f(radians,)g
-(not)g(hours)g(or)g(degrees.)340 3062 y Fj(\017)45 b
-Fk(If)32 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)48
-b Ft(")p Fk(Gap)p Ft(")30 b Fk(instead)h(of)h Ft(")p
-Fk(Gap\(2\))p Ft(")p Fk(\),)f(then)h(a)f Ft(")p Fk(set)p
-Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")g Fk(op)r(eration)427
-3161 y(will)f(a\013ect)g(the)g(attribute)g(v)-5 b(alue)28
-b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f Ft(")p
-Fk(get)p Ft(")g Fk(or)f Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)g(will)
-h(use)427 3261 y(just)f(the)g(Gap\(1\))g(v)-5 b(alue.)p
-0 3427 V 0 3559 a FA(Grf)338 b Fd(Use)39 b(Grf)f(routines)f(registered)
-g(through)g(AST)p Fe(_)p Fd(GRFSET?)337 b FA(Grf)0 3715
-y Fc(Description:)44 b Fk(This)25 b(attribute)h(selects)e(the)i
-(routines)e(whic)n(h)h(are)f(used)h(to)g(dra)n(w)f(graphics)f(b)n(y)i
-(the)g(Plot)g(class.)35 b(If)25 b(it)227 3815 y(is)k(zero,)g(then)h
-(the)f(routines)g(in)g(the)h(graphics)e(in)n(terface)g(selected)i(at)f
-(link-time)g(are)f(used)i(\(see)f(the)g(ast)p Ft(_)p
-Fk(link)227 3915 y(script\).)57 b(Otherwise,)35 b(routines)e
-(registered)g(using)g(AST)p Ft(_)p Fk(GRFSET)i(are)e(used.)56
-b(In)34 b(this)h(case,)g(if)f(a)g(routine)227 4014 y(is)k(needed)g
-(whic)n(h)f(has)h(not)f(b)r(een)h(registered,)h(then)f(the)g(routine)g
-(in)g(the)g(graphics)e(in)n(terface)h(selected)h(at)227
-4114 y(link-time)28 b(is)g(used.)227 4230 y(The)g(default)g(is)f(to)h
-(use)f(the)h(graphics)f(in)n(terface)0 4364 y Fc(T)m(yp)s(e:)227
-4463 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 4596 y Fc(Class)k
-(Applicabilit)m(y:)259 4716 y(Plot)427 4816 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)259 4933 y Fc(Plot3D)427 5032
-y Fk(The)h(Plot3D)f(class)g(ignores)f(this)h(attributes,)h(assuming)f
-(a)g(v)-5 b(alue)27 b(of)h(zero.)0 5178 y Fc(Notes:)340
-5444 y Fj(\017)45 b Fk(The)31 b(v)-5 b(alue)31 b(of)g(this)g(attribute)
-h(is)e(not)h(sa)n(v)n(ed)f(when)h(the)h(Plot)e(is)h(written)g(out)g
-(through)f(a)h(Channel)g(to)427 5544 y(an)h(external)f(data)g(store.)49
-b(On)32 b(re-loading)e(suc)n(h)h(a)h(Plot)f(using)h(AST)p
-Ft(_)p Fk(READ,)g(the)g(attribute)g(will)g(b)r(e)427
-5643 y(cleared,)27 b(resulting)g(in)h(the)g(graphics)e(in)n(terface)h
-(selected)g(at)h(link-time)g(b)r(eing)f(used.)p eop end
-%%Page: 414 424
-TeXDict begin 414 423 bop 0 52 a FG(414)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Grid)932 b Fd(Dra)m(w)38 b(grid)f(lines)i(for)e(a)
-i(Plot?)931 b FA(Grid)0 700 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 800
-y(AST)p Ft(_)p Fk(GRID)38 b(routine\))g(b)n(y)f(determining)g(whether)g
-(grid)g(lines)g(\(a)h(grid)e(of)i(curv)n(es)e(marking)g(the)i
-Ft(")p Fk(ma)5 b(jor)p Ft(")227 900 y Fk(v)-5 b(alues)27
-b(on)h(eac)n(h)f(axis\))g(are)f(dra)n(wn)h(across)f(the)h(plotting)h
-(area.)227 1036 y(If)h(the)g(Grid)f(v)-5 b(alue)28 b(of)h(a)f(Plot)f
-(is)i(non-zero,)e(then)i(grid)e(lines)i(will)f(b)r(e)h(dra)n(wn.)38
-b(Otherwise,)28 b(short)g(tic)n(k)g(marks)227 1136 y(on)g(the)h(axes)e
-(are)g(used)h(to)g(mark)g(the)g(ma)5 b(jor)27 b(axis)h(v)-5
-b(alues.)38 b(The)28 b(default)h(b)r(eha)n(viour)e(is)h(to)g(use)g(tic)
-n(k)g(marks)f(if)227 1235 y(the)h(en)n(tire)f(plotting)h(area)e(is)i
-(\014lled)g(b)n(y)f(v)-5 b(alid)28 b(ph)n(ysical)e(co)r(ordinates,)g
-(but)j(to)e(dra)n(w)g(grid)g(lines)g(otherwise.)0 1409
-y Fc(T)m(yp)s(e:)227 1508 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0
-1682 y Fc(Class)k(Applicabilit)m(y:)259 1842 y(Plot)427
-1942 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2128 y Fc(Notes:)340 2434 y Fj(\017)45 b Fk(The)31 b(spacing)f(b)r(et)n
-(w)n(een)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues,)31 b(whic)n(h)f
-(determines)h(the)g(spacing)e(of)i(grid)f(lines,)h(ma)n(y)f(b)r(e)427
-2534 y(set)e(using)f(the)h(Gap\(axis\))f(attribute.)p
-0 2757 V 0 2889 a FA(GrismAlpha)181 b Fd(The)39 b(angle)e(of)i
-(incidence)f(of)g(the)h(incoming)1194 3003 y(ligh)m(t)d(on)j(the)g
-(grating)d(surface)3063 2889 y FA(GrismAlpha)0 3216 y
-Fc(Description:)44 b Fk(This)29 b(attribute)f(holds)g(the)h(angle)f(b)r
-(et)n(w)n(een)g(the)h(incoming)f(ligh)n(t)g(and)g(the)h(normal)e(to)h
-(the)h(grating)227 3316 y(surface,)e(in)h(radians.)35
-b(The)28 b(default)g(v)-5 b(alue)28 b(is)f(0.)0 3489
-y Fc(T)m(yp)s(e:)227 3589 y Fk(Double)h(precision.)0
-3762 y Fc(Class)j(Applicabilit)m(y:)259 3923 y(GrismMap)427
-4022 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4246 V 0 4377 a FA(GrismEps)317 b Fd(The)39 b(angle)f(b)s(et)m(w)m
-(een)g(the)g(normal)f(and)i(the)1478 4492 y(disp)s(ersion)f(plane)3200
-4377 y FA(GrismEps)0 4709 y Fc(Description:)44 b Fk(This)22
-b(attribute)g(holds)f(the)i(angle)d(\(in)j(radians\))d(b)r(et)n(w)n
-(een)i(the)g(normal)f(to)h(the)g(grating)e(or)h(exit)h(prism)227
-4809 y(face,)36 b(and)e(the)g(disp)r(ersion)f(plane.)56
-b(The)34 b(disp)r(ersion)f(plane)h(is)g(the)h(plane)e(spanned)h(b)n(y)g
-(the)g(incoming)g(and)227 4909 y(outgoing)27 b(ra)n(y)-7
-b(.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(0.0.)0
-5082 y Fc(T)m(yp)s(e:)227 5182 y Fk(Double)g(precision.)0
-5355 y Fc(Class)j(Applicabilit)m(y:)259 5515 y(GrismMap)427
-5615 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-eop end
-%%Page: 415 425
-TeXDict begin 415 424 bop 3643 52 a FG(415)p 0 351 3780
-12 v 0 483 a FA(GrismG)747 b Fd(The)39 b(grating)d(ruling)h(densit)m(y)
-747 b FA(GrismG)0 675 y Fc(Description:)44 b Fk(This)34
-b(attribute)g(holds)f(the)h(n)n(um)n(b)r(er)g(of)f(grating)g(rulings)g
-(p)r(er)g(unit)i(length.)55 b(The)34 b(unit)g(of)g(length)227
-775 y(used)i(should)f(b)r(e)h(consisten)n(t)f(with)h(the)f(units)h
-(used)g(for)e(attributes)i(GrismW)-7 b(a)n(v)n(eR)34
-b(and)h(GrismNRP)-7 b(.)36 b(The)227 875 y(default)28
-b(v)-5 b(alue)28 b(is)f(0.0.)36 b(\(the)29 b(appropriate)c(v)-5
-b(alue)28 b(for)f(a)g(pure)h(prism)f(disp)r(erser)f(with)j(no)e
-(grating\).)0 1028 y Fc(T)m(yp)s(e:)227 1127 y Fk(Double)h(precision.)0
-1280 y Fc(Class)j(Applicabilit)m(y:)259 1420 y(GrismMap)427
-1520 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1723 V 0 1854 a FA(GrismM)830 b Fd(The)38 b(in)m(terference)f(order)
-829 b FA(GrismM)0 2023 y Fc(Description:)44 b Fk(This)28
-b(attribute)g(holds)f(the)h(in)n(terference)f(order)f(b)r(eing)i
-(considered.)36 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(0.)0
-2176 y Fc(T)m(yp)s(e:)227 2276 y Fk(In)n(teger.)0 2429
-y Fc(Class)k(Applicabilit)m(y:)259 2569 y(GrismMap)427
-2669 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2871 V 0 3003 a FA(GrismNR)387 b Fd(The)39 b(refractiv)m(e)d(index)i
-(at)g(the)h(reference)1607 3103 y(w)m(a)m(v)m(elength)3211
-3003 y FA(GrismNR)0 3295 y Fc(Description:)44 b Fk(This)36
-b(attribute)f(holds)g(refractiv)n(e)f(index)h(of)h(the)f(grism)g
-(material)f(at)h(the)h(reference)e(w)n(a)n(v)n(elength)227
-3395 y(\(giv)n(en)27 b(b)n(y)h(attribute)f(GrismW)-7
-b(a)n(v)n(eR\).)27 b(The)h(default)g(v)-5 b(alue)27 b(is)h(1.0.)0
-3548 y Fc(T)m(yp)s(e:)227 3647 y Fk(Double)g(precision.)0
-3800 y Fc(Class)j(Applicabilit)m(y:)259 3940 y(GrismMap)427
-4040 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4243 V 0 4374 a FA(GrismNRP)266 b Fd(The)38 b(rate)g(of)g(c)m(hange)g
-(of)g(refractiv)m(e)e(index)1474 4489 y(with)h(w)m(a)m(v)m(elength)3119
-4374 y FA(GrismNRP)0 4681 y Fc(Description:)44 b Fk(This)28
-b(attribute)g(holds)g(the)g(rate)f(of)h(c)n(hange)f(of)h(the)g
-(refractiv)n(e)f(index)h(of)g(the)g(grism)f(material)g(with)227
-4781 y(resp)r(ect)i(to)g(w)n(a)n(v)n(elength)e(at)i(the)g(reference)f
-(w)n(a)n(v)n(elength)f(\(giv)n(en)h(b)n(y)h(attribute)g(GrismW)-7
-b(a)n(v)n(eR\).)28 b(The)h(default)227 4880 y(v)-5 b(alue)31
-b(is)f(0.0)f(\(the)j(appropriate)c(v)-5 b(alue)31 b(for)e(a)h(pure)h
-(grating)e(disp)r(erser)g(with)i(no)f(prism\).)46 b(The)30
-b(units)h(of)f(this)227 4980 y(attribute)e(should)f(b)r(e)h(consisten)n
-(t)f(with)i(those)e(of)g(attributes)h(GrismW)-7 b(a)n(v)n(eR)26
-b(and)i(GrismG.)0 5133 y Fc(T)m(yp)s(e:)227 5233 y Fk(Double)g
-(precision.)0 5386 y Fc(Class)j(Applicabilit)m(y:)259
-5526 y(GrismMap)427 5625 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 416 426
-TeXDict begin 416 425 bop 0 52 a FG(416)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(GrismTheta)152 b Fd(Angle)38 b(b)s(et)m(w)m(een)g
-(normal)f(to)h(detector)f(plane)1449 598 y(and)i(reference)f(ra)m(y)
-3069 483 y FA(GrismTheta)0 774 y Fc(Description:)44 b
-Fk(This)30 b(attribute)g(giv)n(es)f(the)h(angle)f(of)h(incidence)g(of)g
-(ligh)n(t)f(of)h(the)g(reference)f(w)n(a)n(v)n(elength)g(\(giv)n(en)g
-(b)n(y)227 874 y(attribute)d(GrismW)-7 b(a)n(v)n(eR\))25
-b(on)n(to)g(the)h(detector.)36 b(Sp)r(eci\014cally)-7
-b(,)26 b(it)h(holds)e(the)h(angle)f(\(in)i(radians\))d(b)r(et)n(w)n
-(een)i(the)227 974 y(normal)f(to)h(the)g(detector)f(plane)g(and)h(an)g
-(inciden)n(t)g(ra)n(y)e(at)i(the)g(reference)f(w)n(a)n(v)n(elength.)34
-b(The)26 b(default)g(v)-5 b(alue)26 b(is)227 1073 y(0.0.)0
-1214 y Fc(T)m(yp)s(e:)227 1314 y Fk(Double)i(precision.)0
-1455 y Fc(Class)j(Applicabilit)m(y:)259 1583 y(GrismMap)427
-1683 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1865 V 0 1997 a FA(GrismW)-11 b(a)l(v)l(eR)461 b Fd(The)39
-b(reference)f(w)m(a)m(v)m(elength)456 b FA(GrismW)-11
-b(a)l(v)l(eR)0 2174 y Fc(Description:)44 b Fk(This)34
-b(attribute)g(holds)f(reference)g(w)n(a)n(v)n(elength.)54
-b(The)34 b(default)g(v)-5 b(alue)34 b(is)f(5000)f(\(Angstrom\).)56
-b(The)227 2273 y(units)28 b(of)g(this)g(attribute)g(should)f(b)r(e)h
-(consisten)n(t)f(with)h(those)f(of)h(attributes)f(GrismNRP)h(and)f
-(GrismG.)0 2414 y Fc(T)m(yp)s(e:)227 2514 y Fk(Double)h(precision.)0
-2655 y Fc(Class)j(Applicabilit)m(y:)259 2783 y(GrismMap)427
-2883 y Fk(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 3066 V 0 3196 a FA(ID)1197 3197 y Fd(Ob)7 b(ject)38
-b(iden)m(ti\014cation)d(string)3626 3196 y FA(ID)0 3369
-y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(tains)f(a)h
-(string)f(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)g(iden)n(tify)h(the)f
-(Ob)5 b(ject)30 b(to)g(whic)n(h)f(it)i(is)227 3469 y(attac)n(hed.)36
-b(There)26 b(is)g(no)g(restriction)g(on)g(the)h(con)n(ten)n(ts)e(of)i
-(this)f(string,)g(whic)n(h)h(is)f(not)g(used)h(in)n(ternally)e(b)n(y)h
-(the)227 3569 y(AST)h(library)-7 b(,)25 b(and)g(is)h(simply)g(returned)
-f(without)h(c)n(hange)f(when)h(required.)35 b(The)26
-b(default)h(v)-5 b(alue)25 b(is)h(an)g(empt)n(y)227 3668
-y(string.)227 3789 y(An)34 b(iden)n(ti\014cation)g(string)f(can)g(b)r
-(e)h(v)-5 b(aluable)33 b(when,)j(for)d(example,)i(sev)n(eral)d(Ob)5
-b(jects)33 b(ha)n(v)n(e)f(b)r(een)j(stored)d(in)227 3888
-y(a)d(\014le)h(\(using)f(AST)p Ft(_)p Fk(WRITE\))g(and)g(are)g(later)f
-(retriev)n(ed)g(\(using)h(AST)p Ft(_)p Fk(READ\).)h(Consisten)n(t)f
-(use)g(of)g(the)h(ID)227 3988 y(attribute)j(allo)n(ws)d(the)j(retriev)n
-(ed)e(Ob)5 b(jects)31 b(to)h(b)r(e)h(iden)n(ti\014ed)f(without)h(dep)r
-(ending)f(simply)g(on)g(the)h(order)d(in)227 4087 y(whic)n(h)e(they)g
-(w)n(ere)e(stored.)227 4208 y(This)37 b(attribute)g(ma)n(y)f(also)g(b)r
-(e)h(useful)h(during)e(debugging,)j(to)d(distinguish)h(similar)f(Ob)5
-b(jects)37 b(when)g(using)227 4307 y(AST)p Ft(_)p Fk(SHO)n(W)28
-b(to)f(displa)n(y)g(them.)0 4449 y Fc(T)m(yp)s(e:)227
-4548 y Fk(String.)0 4689 y Fc(Class)k(Applicabilit)m(y:)259
-4817 y(Ob)5 b(ject)427 4917 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)0 5071 y Fc(Notes:)340
-5345 y Fj(\017)45 b Fk(Unlik)n(e)25 b(most)h(other)e(attributes,)i(the)
-f(v)-5 b(alue)25 b(of)h(the)f(ID)h(attribute)f(is)g(not)h(transferred)d
-(when)j(an)f(Ob)5 b(ject)427 5444 y(is)31 b(copied.)45
-b(Instead,)31 b(its)g(v)-5 b(alue)30 b(is)h(unde\014ned)g(\(and)g
-(therefore)e(defaults)i(to)g(an)f(empt)n(y)g(string\))h(in)f(an)n(y)427
-5544 y(cop)n(y)-7 b(.)53 b(Ho)n(w)n(ev)n(er,)33 b(it)h(is)f(retained)f
-(in)i(an)n(y)e(external)h(represen)n(tation)e(of)i(an)g(Ob)5
-b(ject)33 b(pro)r(duced)g(b)n(y)g(the)427 5644 y(AST)p
-Ft(_)p Fk(WRITE)28 b(routine.)p eop end
-%%Page: 417 427
-TeXDict begin 417 426 bop 3643 52 a FG(417)p 0 351 3780
-12 v 0 482 a FA(IF)437 483 y Fd(The)39 b(in)m(termediate)c(frequency)j
-(in)h(a)g(dual)f(sideband)g(sp)s(ectrum)3645 482 y FA(IF)0
-687 y Fc(Description:)44 b Fk(This)26 b(attribute)h(sp)r(eci\014es)f
-(the)g(\(top)r(o)r(cen)n(tric\))g(in)n(termediate)g(frequency)g(in)g(a)
-g(dual)g(sideband)g(sp)r(ec-)227 786 y(trum.)41 b(Its)29
-b(sole)g(use)g(is)f(to)h(determine)g(the)h(lo)r(cal)e(oscillator)f
-(\(LO\))i(frequency)g(\(the)g(frequency)g(whic)n(h)g(marks)227
-886 y(the)h(b)r(oundary)f(b)r(et)n(w)n(een)g(the)h(lo)n(w)n(er)d(and)j
-(upp)r(er)f(sidebands\).)42 b(The)29 b(LO)g(frequency)g(is)g(equal)g
-(to)g(the)h(sum)g(of)227 985 y(the)d(cen)n(tre)f(frequency)g(and)g(the)
-h(in)n(termediate)f(frequency)-7 b(.)36 b(Here,)26 b(the)h
-Ft(")p Fk(cen)n(tre)e(frequency)p Ft(")h Fk(is)g(the)h(top)r(o)r(cen-)
-227 1085 y(tric)h(frequency)g(in)g(Hz)g(corresp)r(onding)e(to)i(the)h
-(curren)n(t)e(v)-5 b(alue)28 b(of)g(the)g(DSBCen)n(tre)g(attribute.)39
-b(The)28 b(v)-5 b(alue)28 b(of)227 1185 y(the)33 b(IF)f(attribute)g(ma)
-n(y)f(b)r(e)i(p)r(ositiv)n(e)e(or)g(negativ)n(e:)45 b(a)31
-b(p)r(ositiv)n(e)h(v)-5 b(alue)32 b(results)f(in)h(the)h(LO)e
-(frequency)h(b)r(eing)227 1284 y(ab)r(o)n(v)n(e)23 b(the)h(cen)n(tral)f
-(frequency)-7 b(,)24 b(whilst)g(a)g(negativ)n(e)f(IF)h(v)-5
-b(alue)23 b(results)h(in)g(the)g(LO)f(frequency)h(b)r(eing)g(b)r(elo)n
-(w)f(the)227 1384 y(cen)n(tral)g(frequency)-7 b(.)36
-b(The)24 b(sign)f(of)h(the)g(IF)h(attribute)f(v)-5 b(alue)24
-b(determines)f(the)i(default)f(v)-5 b(alue)24 b(for)f(the)i(SideBand)
-227 1484 y(attribute.)227 1613 y(When)g(setting)f(a)f(new)h(v)-5
-b(alue)24 b(for)f(this)h(attribute,)h(the)g(units)f(in)g(whic)n(h)g
-(the)g(frequency)g(v)-5 b(alue)23 b(is)h(supplied)g(ma)n(y)227
-1713 y(b)r(e)j(indicated)g(b)n(y)f(app)r(ending)h(a)f(suitable)h
-(string)e(to)i(the)g(end)g(of)f(the)h(formatted)g(v)-5
-b(alue.)36 b(If)27 b(the)g(units)g(are)f(not)227 1813
-y(sp)r(eci\014ed,)35 b(then)f(the)g(supplied)f(v)-5 b(alue)33
-b(is)g(assumed)g(to)g(b)r(e)h(in)f(units)h(of)f(GHz.)54
-b(F)-7 b(or)33 b(instance,)h(the)g(follo)n(wing)227 1912
-y(strings)27 b(all)g(result)h(in)f(an)h(IF)g(of)f(4)g(GHz)h(b)r(eing)g
-(used:)37 b Ft(")p Fk(4.0)p Ft(")p Fk(,)26 b Ft(")p Fk(4.0)g(GHz)p
-Ft(")p Fk(,)i Ft(")p Fk(4.0E9)d(Hz)p Ft(")p Fk(,)j(etc.)227
-2042 y(When)d(getting)g(the)g(v)-5 b(alue)24 b(of)h(this)g(attribute,)g
-(the)g(returned)f(v)-5 b(alue)25 b(is)f(alw)n(a)n(ys)f(in)i(units)g(of)
-f(GHz.)37 b(The)24 b(default)227 2141 y(v)-5 b(alue)28
-b(for)f(this)h(attribute)f(is)h(4)f(GHz.)0 2301 y Fc(T)m(yp)s(e:)227
-2401 y Fk(Floating)g(p)r(oin)n(t.)0 2560 y Fc(Class)k(Applicabilit)m
-(y:)259 2707 y(DSBSp)s(ecF)-8 b(rame)427 2807 y Fk(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 3016 V 0 3148 a FA(Iden)l(t)591 b Fd(P)m(ermanen)m(t)37
-b(Ob)7 b(ject)37 b(iden)m(ti\014cation)f(string)589 b
-FA(Iden)l(t)0 3347 y Fc(Description:)44 b Fk(This)30
-b(attribute)f(is)g(lik)n(e)g(the)h(ID)g(attribute,)f(in)h(that)g(it)f
-(con)n(tains)g(a)f(string)h(whic)n(h)g(ma)n(y)g(b)r(e)g(used)h(to)227
-3446 y(iden)n(tify)c(the)f(Ob)5 b(ject)25 b(to)g(whic)n(h)g(it)h(is)f
-(attac)n(hed.)35 b(The)25 b(only)g(di\013erence)g(b)r(et)n(w)n(een)g
-(ID)h(and)f(Iden)n(t)g(is)g(that)g(Iden)n(t)227 3546
-y(is)j(transferred)e(when)i(an)f(Ob)5 b(ject)27 b(is)h(copied,)f(but)i
-(ID)f(is)f(not.)0 3706 y Fc(T)m(yp)s(e:)227 3805 y Fk(String.)0
-3965 y Fc(Class)k(Applicabilit)m(y:)259 4112 y(Ob)5 b(ject)427
-4211 y Fk(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4421 V 0 4551 a FA(ImagF)-11 b(req)816 4552 y Fd(The)39
-b(image)e(sideband)h(equiv)-7 b(alen)m(t)37 b(of)i(the)f(rest)1644
-4667 y(frequency)3224 4551 y FA(ImagF)-11 b(req)0 4866
-y Fc(Description:)44 b Fk(This)24 b(is)g(a)g(read-only)e(attribute)i
-(giving)f(the)i(frequency)e(whic)n(h)h(corresp)r(onds)e(to)i(the)h
-(rest)e(frequency)227 4966 y(but)28 b(is)g(in)g(the)g(opp)r(osite)f
-(sideband.)227 5095 y(The)i(v)-5 b(alue)29 b(is)g(calculated)f(b)n(y)h
-(\014rst)f(transforming)g(the)h(rest)f(frequency)h(\(giv)n(en)f(b)n(y)g
-(the)i(RestF)-7 b(req)28 b(attribute\))227 5195 y(from)f(the)g
-(standard)f(of)h(rest)f(of)h(the)g(source)f(\(giv)n(en)g(b)n(y)h(the)g
-(SourceV)-7 b(el)26 b(and)h(SourceVRF)f(attributes\))h(to)g(the)227
-5295 y(standard)i(of)h(rest)f(of)h(the)g(observ)n(er)e(\(i.e.)44
-b(the)30 b(top)r(o)r(cen)n(tric)f(standard)g(of)h(rest\).)43
-b(The)30 b(resulting)f(top)r(o)r(cen)n(tric)227 5394
-y(frequency)h(is)g(assumed)g(to)g(b)r(e)h(in)f(the)h(same)f(sideband)g
-(as)g(the)g(v)-5 b(alue)30 b(giv)n(en)g(for)g(the)g(DSBCen)n(tre)g
-(attribute)227 5494 y(\(the)c Ft(")p Fk(observ)n(ed)p
-Ft(")d Fk(sideband\),)j(and)f(is)h(transformed)e(to)h(the)h(other)e
-(sideband)i(\(the)g Ft(")p Fk(image)p Ft(")d Fk(sideband\).)37
-b(The)227 5593 y(new)32 b(frequency)f(is)h(con)n(v)n(erted)f(bac)n(k)f
-(to)i(the)g(standard)f(of)h(rest)f(of)h(the)g(source,)g(and)g(the)g
-(resulting)f(v)-5 b(alue)32 b(is)227 5693 y(returned)27
-b(as)g(the)h(attribute)g(v)-5 b(alue,)28 b(in)g(units)g(of)f(GHz.)p
-eop end
-%%Page: 418 428
-TeXDict begin 418 427 bop 0 52 a FG(418)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(Floating)c(p)r(oin)n(t,)h(read-only)-7
-b(.)0 602 y Fc(Class)31 b(Applicabilit)m(y:)259 740 y(DSBSp)s(ecF)-8
-b(rame)427 840 y Fk(All)28 b(DSBSp)r(ecF)-7 b(rames)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 1041 3780 12 v 0
-1173 a FA(In)l(traFlag)582 b Fd(In)m(traMap)37 b(iden)m(ti\014cation)f
-(string)578 b FA(In)l(traFlag)0 1363 y Fc(Description:)44
-b Fk(This)32 b(attribute)g(allo)n(ws)e(an)h(In)n(traMap)f(to)i(b)r(e)g
-(\015agged)e(so)h(that)h(it)f(is)h(distinguishable)f(from)g(other)227
-1463 y(In)n(traMaps.)36 b(The)28 b(transformation)e(routine)i(asso)r
-(ciated)e(with)i(the)g(In)n(traMap)f(ma)n(y)g(then)h(enquire)g(the)g(v)
--5 b(alue)227 1563 y(of)34 b(this)g(attribute)h(and)e(adapt)h(the)g
-(transformation)f(it)h(pro)n(vides)f(according)f(to)i(the)g(particular)
-f(In)n(traMap)227 1662 y(in)n(v)n(olv)n(ed.)227 1788
-y(Although)28 b(this)h(is)f(a)g(string)f(attribute,)h(it)h(ma)n(y)e
-(often)i(b)r(e)f(useful)h(to)f(store)f(n)n(umerical)g(v)-5
-b(alues)28 b(here,)g(enco)r(ded)227 1887 y(as)h(a)f(c)n(haracter)f
-(string,)i(and)g(to)g(use)g(these)g(as)g(data)f(within)i(the)g
-(transformation)d(routine.)41 b(Note,)30 b(ho)n(w)n(ev)n(er,)227
-1987 y(that)f(this)f(mec)n(hanism)f(is)h(not)g(suitable)g(for)g
-(transferring)e(large)g(amoun)n(ts)i(of)f(data)h(\(more)f(than)i(ab)r
-(out)e(1000)227 2087 y(c)n(haracters\))33 b(to)h(an)h(In)n(traMap.)57
-b(F)-7 b(or)34 b(that)h(purp)r(ose,)h(global)d(v)-5 b(ariables)34
-b(are)f(recommended,)j(although)e(the)227 2186 y(In)n(traFlag)24
-b(v)-5 b(alue)25 b(can)f(b)r(e)i(used)f(to)g(supplemen)n(t)g(this)h
-(approac)n(h.)34 b(The)25 b(default)g(In)n(traFlag)f(v)-5
-b(alue)25 b(is)g(an)g(empt)n(y)227 2286 y(string.)0 2437
-y Fc(T)m(yp)s(e:)227 2537 y Fk(String.)0 2688 y Fc(Class)31
-b(Applicabilit)m(y:)259 2826 y(In)m(traMap)427 2926 y
-Fk(All)d(In)n(traMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-3090 y Fc(Notes:)340 3374 y Fj(\017)45 b Fk(A)34 b(pair)f(of)g(In)n
-(traMaps)f(whose)h(transformations)e(ma)n(y)i(p)r(oten)n(tially)g
-(cancel)g(cannot)g(b)r(e)h(simpli\014ed)g(to)427 3473
-y(pro)r(duce)22 b(a)f(UnitMap)i(\(e.g.)35 b(using)21
-b(AST)p Ft(_)p Fk(SIMPLIFY\))i(unless)f(they)g(ha)n(v)n(e)f(the)h(same)
-f(In)n(traFlag)g(v)-5 b(alues.)427 3573 y(The)28 b(test)g(for)f
-(equalit)n(y)g(is)g(case-sensitiv)n(e.)p 0 3774 V 0 3905
-a FA(In)l(v)l(ert)1307 3906 y Fd(Mapping)38 b(in)m(v)m(ersion)f(\015ag)
-3423 3905 y FA(In)l(v)l(ert)0 4096 y Fc(Description:)44
-b Fk(This)25 b(attribute)g(con)n(trols)e(whic)n(h)i(one)f(of)h(a)f
-(Mapping's)h(t)n(w)n(o)f(p)r(ossible)g(co)r(ordinate)g(transformations)
-227 4196 y(is)29 b(considered)e(the)i Ft(")p Fk(forw)n(ard)p
-Ft(")d Fk(transformation)g(\(the)j(other)f(b)r(eing)h(the)f
-Ft(")p Fk(in)n(v)n(erse)p Ft(")f Fk(transformation\).)37
-b(If)29 b(the)227 4296 y(attribute)36 b(v)-5 b(alue)36
-b(is)f(zero)g(\(the)h(default\),)j(the)d(Mapping's)f(b)r(eha)n(viour)f
-(will)i(b)r(e)g(the)g(same)g(as)f(when)g(it)i(w)n(as)227
-4395 y(\014rst)29 b(created.)39 b(Ho)n(w)n(ev)n(er,)27
-b(if)i(it)g(is)g(non-zero,)e(its)i(t)n(w)n(o)f(transformations)f(will)i
-(b)r(e)g(in)n(ter-c)n(hanged,)e(so)h(that)h(the)227 4495
-y(Mapping)f(displa)n(ys)e(the)i(in)n(v)n(erse)e(of)i(its)f(original)g
-(b)r(eha)n(viour.)227 4620 y(In)n(v)n(erting)k(the)h(b)r(o)r(olean)g
-(sense)f(of)h(the)g(In)n(v)n(ert)f(attribute)h(will)h(cause)e(the)h(v)
--5 b(alues)32 b(of)f(a)h(Mapping's)f(Nin)i(and)227 4720
-y(Nout)25 b(attributes)g(to)g(b)r(e)g(in)n(terc)n(hanged.)34
-b(The)25 b(v)-5 b(alues)25 b(of)f(its)h(T)-7 b(ranF)g(orw)n(ard)23
-b(and)h(T)-7 b(ranIn)n(v)n(erse)23 b(attributes)h(will)227
-4820 y(also)j(b)r(e)h(in)n(terc)n(hanged.)35 b(This)28
-b(op)r(eration)e(ma)n(y)h(b)r(e)h(p)r(erformed)f(with)h(the)g(AST)p
-Ft(_)p Fk(INVER)-7 b(T)28 b(routine.)0 4971 y Fc(T)m(yp)s(e:)227
-5071 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 5222 y Fc(Class)k
-(Applicabilit)m(y:)259 5360 y(Mapping)427 5460 y Fk(All)d(Mappings)f
-(ha)n(v)n(e)g(this)h(attribute.)259 5593 y Fc(UnitMap)427
-5693 y Fk(The)g(v)-5 b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g
-(has)g(no)h(e\013ect)g(on)f(the)h(b)r(eha)n(viour)e(of)i(a)f(UnitMap.)p
-eop end
-%%Page: 419 429
-TeXDict begin 419 428 bop 3643 52 a FG(419)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(In)n(v)n(erting)35 b(the)h(b)r(o)r
-(olean)e(sense)h(of)h(the)g(In)n(v)n(ert)f(attribute)g(for)g(a)g(F)-7
-b(rameSet)36 b(will)f(cause)g(its)h(base)f(and)427 551
-y(curren)n(t)25 b(F)-7 b(rames)25 b(\(and)h(its)f(Base)g(and)g(Curren)n
-(t)g(attributes\))h(to)f(b)r(e)h(in)n(terc)n(hanged.)35
-b(This,)26 b(in)g(turn,)g(ma)n(y)427 650 y(a\013ect)31
-b(other)f(prop)r(erties)g(and)g(attributes)h(of)f(the)h(F)-7
-b(rameSet)31 b(\(suc)n(h)f(as)g(Nin,)i(Nout,)g(Naxes,)e(T)-7
-b(ranF)g(or-)427 750 y(w)n(ard,)24 b(T)-7 b(ranIn)n(v)n(erse,)23
-b(etc.\).)37 b(The)24 b(In)n(v)n(ert)g(attribute)g(of)h(a)f(F)-7
-b(rameSet)24 b(is)h(not)f(itself)h(a\013ected)g(b)n(y)f(selecting)427
-849 y(a)j(new)h(base)f(or)g(curren)n(t)g(F)-7 b(rame.)p
-0 1070 3780 12 v 0 1202 a FA(In)l(visible)521 b Fd(Dra)m(w)38
-b(graphics)f(using)i(in)m(visible)e(ink?)519 b FA(In)l(visible)0
-1412 y Fc(Description:)44 b Fk(This)31 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(Plot)g
-(metho)r(ds)h(b)n(y)f(de-)227 1512 y(termining)e(whether)f(graphics)f
-(should)i(b)r(e)g(visible)f(or)g(in)n(visible.)227 1647
-y(If)37 b(the)f(In)n(visible)g(v)-5 b(alue)36 b(of)g(a)g(Plot)g(is)g
-(non-zero,)h(then)f(all)g(the)h(Plot)e(metho)r(ds)i(whic)n(h)f
-(normally)f(generate)227 1747 y(graphical)23 b(output)h(do)g(not)g(do)f
-(so)h(\(y)n(ou)f(can)h(think)g(of)g(them)h(dra)n(wing)d(with)i
-Ft(")p Fk(in)n(visible)g(ink)p Ft(")p Fk(\).)35 b(Suc)n(h)24
-b(metho)r(ds)227 1846 y(do,)32 b(ho)n(w)n(ev)n(er,)f(con)n(tin)n(ue)g
-(to)g(do)g(all)g(the)h(calculations)e(whic)n(h)i(w)n(ould)f(b)r(e)g
-(needed)h(to)f(pro)r(duce)g(the)h(graphics.)227 1946
-y(In)g(particular,)g(the)g(b)r(ounding)f(b)r(o)n(x)g(enclosing)g(the)h
-(graphics)e(is)i(still)g(calculated)f(and)h(can)f(b)r(e)h(retriev)n(ed)
-e(as)227 2046 y(normal)e(using)h(AST)p Ft(_)p Fk(BOUNDINGBO)n(X.)f(The)
-h(default)h(v)-5 b(alue)28 b(is)h(zero,)f(resulting)g(in)h(all)g(metho)
-r(ds)g(dra)n(wing)227 2145 y(graphics)d(as)h(normal,)g(using)g(visible)
-h(ink.)0 2316 y Fc(T)m(yp)s(e:)227 2416 y Fk(In)n(teger)f(\(b)r(o)r
-(olean\).)0 2587 y Fc(Class)k(Applicabilit)m(y:)259 2745
-y(Plot)427 2844 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 3065 V 0 3197 a FA(IsLinear)832 b Fd(Is)39 b(the)g(Mapping)f(linear?)
-830 b FA(IsLinear)0 3407 y Fc(Description:)44 b Fk(This)22
-b(attribute)g(indicates)f(whether)g(a)g(Mapping)h(is)f(an)g(instance)g
-(of)h(a)f(class)g(that)g(alw)n(a)n(ys)f(represen)n(ts)227
-3506 y(a)j(linear)g(transformation.)33 b(Note,)25 b(some)d(Mapping)h
-(classes)f(can)h(represen)n(t)f(linear)g(or)h(non-linear)f(transforma-)
-227 3606 y(tions)29 b(\(the)h(MathMap)e(class)g(for)h(instance\).)41
-b(Suc)n(h)29 b(classes)e(ha)n(v)n(e)h(a)g(zero)g(v)-5
-b(alue)29 b(for)f(the)i(IsLinear)d(attribute.)227 3706
-y(Sp)r(eci\014c)33 b(instances)g(of)f(suc)n(h)h(classes)e(can)h(b)r(e)h
-(tested)g(for)f(linearit)n(y)g(using)h(the)g(astLinearAppro)n(x)d
-(function.)227 3805 y(AST)p Ft(_)p Fk(LINEARAPPR)n(O)n(X)d(routine.)0
-3976 y Fc(T)m(yp)s(e:)227 4076 y Fk(In)n(teger)g(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 4247 y Fc(Class)31 b(Applicabilit)m(y:)259
-4405 y(Mapping)427 4504 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4648 y Fc(CmpMap)427 4748 y Fk(The)23
-b(IsLinear)f(v)-5 b(alue)23 b(for)f(a)h(CmpMap)f(is)h(determined)g(b)n
-(y)g(the)g(classes)f(of)h(the)g(encapsulated)f(Mappings.)427
-4847 y(F)-7 b(or)34 b(instance,)i(a)e(CmpMap)g(that)h(com)n(bines)e(a)h
-(Zo)r(omMap)g(and)g(a)g(ShiftMap)h(will)f(ha)n(v)n(e)f(a)h(non-zero)427
-4947 y(v)-5 b(alue)31 b(for)f(its)g(IsLinear)g(attribute,)h(but)g(a)f
-(CmpMap)h(that)g(con)n(tains)e(a)h(MathMap)h(will)f(ha)n(v)n(e)g(a)g(v)
--5 b(alue)427 5046 y(of)28 b(zero)e(for)h(its)h(IsLinear)f(attribute.)
-259 5190 y Fc(F)-8 b(rame)427 5290 y Fk(The)28 b(IsLinear)e(v)-5
-b(alue)28 b(for)f(a)g(F)-7 b(rame)27 b(is)h(1)f(\(since)g(a)h(F)-7
-b(rame)27 b(is)g(equiv)-5 b(alen)n(t)28 b(to)f(a)g(UnitMap\).)259
-5433 y Fc(F)-8 b(rameSet)427 5533 y Fk(The)26 b(IsLinear)f(v)-5
-b(alue)25 b(for)g(a)h(F)-7 b(rameSet)25 b(is)h(obtained)f(from)g(the)i
-(Mapping)e(from)g(the)h(base)f(F)-7 b(rame)26 b(to)f(the)427
-5632 y(curren)n(t)i(F)-7 b(rame.)p eop end
-%%Page: 420 430
-TeXDict begin 420 429 bop 0 52 a FG(420)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(IsSimple)518 b Fd(Has)38 b(the)h(Mapping)f(b)s
-(een)h(simpli\014ed?)516 b FA(IsSimple)0 662 y Fc(Description:)44
-b Fk(This)29 b(attribute)f(indicates)h(whether)f(a)g(Mapping)g(has)g(b)
-r(een)h(simpli\014ed)g(b)n(y)f(the)h(AST)p Ft(_)p Fk(SIMPLIFY)227
-761 y(metho)r(d.)49 b(If)32 b(the)g(IsSimple)f(v)-5 b(alue)31
-b(is)h(non-zero,)e(then)i(the)g(Mapping)f(has)g(b)r(een)h(simpli\014ed)
-g(and)f(so)g(there)g(is)227 861 y(nothing)20 b(to)g(b)r(e)g(gained)f(b)
-n(y)h(simplifying)g(it)h(again.)33 b(Indeed,)22 b(the)e(AST)p
-Ft(_)p Fk(SIMPLIFY)g(metho)r(d)g(will)g(immediately)227
-961 y(return)32 b(the)g(Mapping)g(unc)n(hanged)f(if)i(the)f(IsSimple)h
-(attribute)f(indicates)g(that)g(the)h(Mapping)f(has)f(already)227
-1060 y(b)r(een)d(simpli\014ed.)0 1205 y Fc(T)m(yp)s(e:)227
-1304 y Fk(In)n(teger)f(\(b)r(o)r(olean\),)h(read-only)-7
-b(.)0 1449 y Fc(Class)31 b(Applicabilit)m(y:)259 1580
-y(Mapping)427 1680 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1808 y Fc(F)-8 b(rame)427 1907 y Fk(All)32
-b(classes)e(of)h(F)-7 b(rame)30 b(return)h(zero)f(for)h(the)g(IsSimple)
-g(attribute.)48 b(This)31 b(is)g(b)r(ecause)g(c)n(hanges)e(can)i(b)r(e)
-427 2007 y(made)g(to)h(a)f(F)-7 b(rame)31 b(whic)n(h)g(a\013ect)g(the)h
-(Mapping)f(represen)n(ted)f(b)n(y)h(the)h(F)-7 b(rame,)32
-b(and)f(so)g(there)g(can)g(b)r(e)427 2107 y(no)c(guaran)n(tee)e(that)i
-(the)g(Mapping)f(ma)n(y)h(not)f(need)h(re-simplifying.)36
-b(Most)27 b(non-F)-7 b(rame)25 b(Mappings,)i(on)427 2206
-y(the)32 b(other)e(hand,)i(are)e(imm)n(utable)i(and)f(so)f(when)h(they)
-h(are)e(simpli\014ed)h(it)h(is)f(certain)f(that)h(they)h(w)n(eill)427
-2306 y(remain)27 b(in)h(a)f(simple)h(state.)p 0 2495
-V 0 2626 a FA(Iw)l(c)498 2627 y Fd(Include)39 b(a)f(F)-10
-b(rame)39 b(represen)m(ting)d(FITS-W)m(CS)j(in)m(termediate)1410
-2742 y(w)m(orld)e(co)s(ordinates?)3576 2626 y FA(Iw)l(c)0
-2897 y Fc(Description:)44 b Fk(This)26 b(attribute)g(is)g(a)g(b)r(o)r
-(olean)f(v)-5 b(alue)26 b(whic)n(h)g(is)g(used)g(when)g(a)g(F)-7
-b(rameSet)25 b(is)h(read)f(from)h(a)g(FitsChan)227 2997
-y(with)39 b(a)e(foreign)g(FITS)h(enco)r(ding)f(\(e.g.)67
-b(FITS-W)n(CS\))38 b(using)g(AST)p Ft(_)p Fk(READ.)g(If)g(it)g(has)f(a)
-h(non-zero)e(v)-5 b(alue)227 3096 y(then)39 b(the)f(returned)f(F)-7
-b(rameSet)38 b(will)f(include)i(F)-7 b(rames)37 b(represen)n(ting)f
-Ft(")p Fk(in)n(termediate)h(w)n(orld)f(co)r(ordinates)p
-Ft(")227 3196 y Fk(\(IW)n(C\).)29 b(These)f(F)-7 b(rames)28
-b(will)g(ha)n(v)n(e)g(Domain)g(name)g Ft(")p Fk(IW)n(C)p
-Ft(")f Fk(for)h(primary)f(axis)h(descriptions,)g(and)g
-Ft(")p Fk(IW)n(Ca)p Ft(")227 3296 y Fk(for)41 b(secondary)e(axis)h
-(descriptions,)j(where)e Ft(")p Fk(a)p Ft(")e Fk(is)i(replaced)f(b)n(y)
-g(the)i(single)e(alternate)g(axis)g(description)227 3395
-y(c)n(haracter,)26 b(as)h(used)g(in)h(the)g(FITS-W)n(CS)g(header.)36
-b(The)28 b(default)g(v)-5 b(alue)27 b(for)g Ft(")p Fk(Iw)n(c)p
-Ft(")g Fk(is)g(zero.)227 3517 y(FITS-W)n(CS)22 b(pap)r(er)g(1)f
-(de\014nes)h(IW)n(C)g(as)f(a)g(Cartesian)g(co)r(ordinate)g(system)g
-(with)h(one)g(axis)f(for)g(eac)n(h)g(W)n(CS)h(axis,)227
-3617 y(and)f(is)g(the)g(co)r(ordinate)f(system)g(pro)r(duced)h(b)n(y)f
-(the)h(rotation)f(matrix)g(\(represen)n(ted)g(b)n(y)h(FITS)g(k)n(eyw)n
-(ord)e(PCi)p Ft(_)p Fk(j,)227 3717 y(CDi)p Ft(_)p Fk(j,)26
-b(etc\).)36 b(F)-7 b(or)24 b(instance,)h(for)e(a)h(2-D)h(FITS-W)n(CS)f
-(header)g(describing)f(pro)5 b(jected)24 b(celestial)g(longitude)g(and)
-227 3816 y(latitude,)33 b(the)f(in)n(termediate)g(w)n(orld)e(co)r
-(ordinates)g(represen)n(t)h(o\013sets)g(in)h(degrees)e(from)i(the)g
-(reference)e(p)r(oin)n(t)227 3916 y(within)f(the)f(plane)f(of)g(pro)5
-b(jection.)0 4060 y Fc(T)m(yp)s(e:)227 4160 y Fk(In)n(teger)27
-b(\(b)r(o)r(olean\).)0 4304 y Fc(Class)k(Applicabilit)m(y:)259
-4436 y(FitsChan)427 4536 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 4725 V 0 4856 a FA(KeyError)769 4857
-y Fd(Rep)s(ort)38 b(an)g(error)g(when)g(getting)f(the)i(v)-7
-b(alue)38 b(of)g(a)1156 4971 y(non-existan)m(t)f(KeyMap)h(en)m(try?)
-3222 4856 y FA(KeyError)0 5150 y Fc(Description:)44 b
-Fk(This)37 b(attribute)g(is)g(a)f(b)r(o)r(olean)h(v)-5
-b(alue)36 b(whic)n(h)h(con)n(trols)f(ho)n(w)g(the)h(AST)p
-Ft(_)p Fk(MAPGET...)64 b(functions)227 5250 y(b)r(eha)n(v)n(e)31
-b(if)h(the)h(requested)e(k)n(ey)g(is)g(not)h(found)g(in)g(the)g
-(KeyMap.)49 b(If)32 b(KeyError)d(is)i(zero)g(\(the)i(default\),)g(then)
-227 5349 y(these)f(functions)g(will)g(return)f(.F)-9
-b(ALSE.)32 b(but)g(no)g(error)d(will)j(b)r(e)g(rep)r(orted.)49
-b(If)32 b(KeyError)c(is)k(non-zero,)f(then)227 5449 y(the)d(same)f(v)-5
-b(alues)27 b(are)g(returned)g(but)h(an)g(error)d(is)j(also)e(rep)r
-(orted.)0 5593 y Fc(T)m(yp)s(e:)227 5693 y Fk(In)n(teger)h(\(b)r(o)r
-(olean\).)p eop end
-%%Page: 421 431
-TeXDict begin 421 430 bop 3643 52 a FG(421)0 351 y Fc(Class)31
-b(Applicabilit)m(y:)259 520 y(KeyMap)427 620 y Fk(All)d(KeyMaps)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 851 3780 12 v 0 983 a
-FA(L)-11 b(TO\013set)212 b Fd(The)39 b(o\013set)f(from)g(UTC)f(to)h(Lo)
-s(cal)h(Time,)e(in)h(hours)211 b FA(L)-11 b(TO\013set)0
-1209 y Fc(Description:)44 b Fk(This)d(sp)r(eci\014es)g(the)g(o\013set)g
-(from)g(UTC)g(to)g(Lo)r(cal)f(Time,)k(in)e(hours)e(\(fractional)g
-(hours)g(can)g(b)r(e)227 1308 y(supplied\).)48 b(It)31
-b(is)g(p)r(ositiv)n(e)f(for)h(time)g(zones)f(east)h(of)g(Green)n(wic)n
-(h.)46 b(AST)31 b(uses)f(the)i(\014gure)e(as)g(giv)n(en,)h(without)227
-1408 y(making)c(an)n(y)g(attempt)h(to)g(correct)e(for)h(da)n(yligh)n(t)
-g(sa)n(ving.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-1590 y Fc(T)m(yp)s(e:)227 1689 y Fk(Floating)f(p)r(oin)n(t.)0
-1871 y Fc(Class)k(Applicabilit)m(y:)259 2040 y(TimeF)-8
-b(rame)427 2139 y Fk(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2371 V 0 2509 a FA(Lab)t(el\(axis\))1634
-2503 y Fd(Axis)38 b(lab)s(el)3125 2509 y FA(Lab)t(el\(axis\))0
-2737 y Fc(Description:)44 b Fk(This)20 b(attribute)g(sp)r(eci\014es)g
-(a)g(lab)r(el)g(to)f(b)r(e)i(attac)n(hed)e(to)h(eac)n(h)f(axis)g(of)h
-(a)f(F)-7 b(rame)20 b(when)g(it)g(is)g(represen)n(ted)227
-2837 y(\(e.g.\))37 b(in)28 b(graphical)e(output.)227
-2977 y(If)i(a)f(Lab)r(el)h(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set)g
-(for)f(a)g(F)-7 b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)
-f(supplied.)0 3159 y Fc(T)m(yp)s(e:)227 3259 y Fk(String.)0
-3441 y Fc(Class)k(Applicabilit)m(y:)259 3609 y(F)-8 b(rame)427
-3709 y Fk(The)31 b(default)h(supplied)f(b)n(y)g(the)g(F)-7
-b(rame)31 b(class)f(is)h(the)g(string)g Ft(")p Fk(Axis)f
-Fm(<)p Fk(n)p Fm(>)p Ft(")p Fk(,)h(where)g Fm(<)p Fk(n)p
-Fm(>)f Fk(is)h(1,)h(2,)f(etc.)427 3808 y(for)c(eac)n(h)g(successiv)n(e)
-f(axis.)259 3957 y Fc(SkyF)-8 b(rame)427 4057 y Fk(The)23
-b(SkyF)-7 b(rame)22 b(class)g(re-de\014nes)g(the)h(default)g(Lab)r(el)f
-(v)-5 b(alue)23 b(\(e.g.)35 b(to)23 b Ft(")p Fk(Righ)n(t)f(ascension)p
-Ft(")f Fk(or)h Ft(")p Fk(Galactic)427 4157 y(latitude)p
-Ft(")p Fk(\))28 b(as)f(appropriate)f(for)h(the)h(particular)e
-(celestial)h(co)r(ordinate)g(system)g(b)r(eing)h(represen)n(ted.)259
-4306 y Fc(TimeF)-8 b(rame)427 4405 y Fk(The)24 b(TimeF)-7
-b(rame)22 b(class)g(re-de\014nes)h(the)g(default)h(Lab)r(el)f(v)-5
-b(alue)23 b(as)g(appropriate)e(for)i(the)g(particular)f(time)427
-4505 y(system)28 b(b)r(eing)f(represen)n(ted.)259 4654
-y Fc(F)-8 b(rameSet)427 4754 y Fk(The)27 b(Lab)r(el)g(attribute)g(of)g
-(a)f(F)-7 b(rameSet)27 b(axis)f(is)g(the)h(same)g(as)f(that)h(of)g(its)
-g(curren)n(t)f(F)-7 b(rame)26 b(\(as)g(sp)r(eci\014ed)427
-4853 y(b)n(y)i(the)g(Curren)n(t)e(attribute\).)0 5047
-y Fc(Notes:)340 5362 y Fj(\017)45 b Fk(Axis)28 b(lab)r(els)f(are)g(in)n
-(tended)h(purely)f(for)g(in)n(terpretation)g(b)n(y)g(h)n(uman)g
-(readers)f(and)i(not)f(b)n(y)h(soft)n(w)n(are.)340 5511
-y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g
-(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r
-(er)f(of)g(the)427 5611 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h
-(applies.)p eop end
-%%Page: 422 432
-TeXDict begin 422 431 bop 0 52 a FG(422)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(Lab)t(elA)l(t\(axis\))979 483 y
-Fd(Where)39 b(to)f(place)g(n)m(umerical)f(lab)s(els)h(for)1733
-598 y(a)g(Plot)2975 490 y FA(Lab)t(elA)l(t\(axis\))0
-770 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 869 y(AST)p Ft(_)p Fk(GRID)37 b(routine\))e(b)n(y)
-h(determining)g(where)f(n)n(umerical)g(axis)g(lab)r(els)g(and)h(asso)r
-(ciated)e(tic)n(k)i(marks)f(are)227 969 y(placed.)42
-b(It)30 b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)29 b(for)g(eac)n(h)f
-(ph)n(ysical)h(axis)f(of)h(a)g(Plot)g(so)g(that,)h(for)e(instance,)i
-(the)g(setting)227 1069 y Ft(")p Fk(Lab)r(elA)n(t\(2\)=10.0)p
-Ft(")25 b Fk(sp)r(eci\014es)i(where)f(the)i(n)n(umerical)e(lab)r(els)h
-(and)g(tic)n(k)g(marks)f(for)h(the)g(second)g(axis)f(should)227
-1168 y(b)r(e)i(dra)n(wn.)227 1294 y(F)-7 b(or)30 b(eac)n(h)g(axis,)h
-(the)g(Lab)r(elA)n(t)g(v)-5 b(alue)30 b(giv)n(es)g(the)h(v)-5
-b(alue)31 b(on)f(the)h(other)f(axis)g(at)h(whic)n(h)f(n)n(umerical)g
-(lab)r(els)h(and)227 1394 y(tic)n(k)24 b(marks)e(should)i(b)r(e)g
-(placed)f(\(remem)n(b)r(er)g(that)h(Plots)f(suitable)h(for)f(use)g
-(with)h(AST)p Ft(_)p Fk(GRID)h(ma)n(y)e(only)g(ha)n(v)n(e)227
-1493 y(t)n(w)n(o)29 b(axes\).)43 b(F)-7 b(or)29 b(example,)h(in)g(a)g
-(celestial)f(\(RA,Dec\))i(co)r(ordinate)e(system,)h(Lab)r(elA)n(t\(1\))
-g(giv)n(es)e(a)i(Dec)g(v)-5 b(alue)227 1593 y(whic)n(h)32
-b(de\014nes)g(a)f(line)h(\(of)g(constan)n(t)f(Dec\))h(along)f(whic)n(h)
-h(the)g(n)n(umerical)f(RA)h(lab)r(els)g(and)f(their)h(asso)r(ciated)227
-1692 y(tic)n(k)f(marks)f(will)i(b)r(e)g(dra)n(wn.)46
-b(Similarly)-7 b(,)32 b(Lab)r(elA)n(t\(2\))g(giv)n(es)e(the)h(RA)h(v)-5
-b(alue)31 b(at)g(whic)n(h)h(the)f(Dec)h(lab)r(els)f(and)227
-1792 y(tic)n(ks)c(will)h(b)r(e)g(dra)n(wn.)227 1918 y(The)34
-b(default)h(baha)n(viour)d(is)i(for)g(the)h(Plot)e(to)h(generate)f(its)
-h(o)n(wn)g(p)r(osition)g(for)g(n)n(umerical)f(lab)r(els)h(and)g(tic)n
-(k)227 2017 y(marks.)0 2169 y Fc(T)m(yp)s(e:)227 2268
-y Fk(Floating)27 b(p)r(oin)n(t.)0 2420 y Fc(Class)k(Applicabilit)m(y:)
-259 2559 y(Plot)427 2658 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2822 y Fc(Notes:)340 3107 y Fj(\017)45
-b Fk(The)34 b(Lab)r(elA)n(t)h(v)-5 b(alue)33 b(should)h(use)g(the)h
-(same)e(units)i(as)e(are)g(used)h(in)n(ternally)f(for)h(storing)f(co)r
-(ordinate)427 3206 y(v)-5 b(alues)26 b(on)g(the)h(appropriate)d(axis.)
-36 b(F)-7 b(or)26 b(example,)g(with)h(a)f(celestial)f(co)r(ordinate)g
-(system,)i(the)f(Lab)r(elA)n(t)427 3306 y(v)-5 b(alue)28
-b(should)f(b)r(e)h(in)g(radians,)e(not)i(hours)f(or)f(degrees.)340
-3440 y Fj(\017)45 b Fk(Normally)-7 b(,)23 b(the)g(Lab)r(elA)n(t)g(v)-5
-b(alue)23 b(also)f(determines)g(where)h(the)g(lines)g(represen)n(ting)e
-(co)r(ordinate)h(axes)f(will)427 3540 y(b)r(e)k(dra)n(wn,)f(so)f(that)h
-(the)h(tic)n(k)f(marks)f(will)h(lie)g(on)g(these)g(lines)g(\(but)h
-(also)e(see)h(the)g(Dra)n(wAxes)f(attribute\).)340 3674
-y Fj(\017)45 b Fk(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 3773 y(plotting)c(area)e(\(see)h(the)h(Lab)r(elling)f
-(attribute\).)37 b(In)26 b(this)h(case,)f(the)g(v)-5
-b(alue)27 b(of)f(the)h(Lab)r(elA)n(t)f(attribute)h(is)427
-3873 y(ignored.)p 0 4074 V 0 4213 a FA(Lab)t(elUnits\(axis\))1163
-4206 y Fd(Use)39 b(axis)f(unit)g(descriptions)g(in)1705
-4320 y(a)h(Plot?)2804 4213 y FA(Lab)t(elUnits\(axis\))0
-4493 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4592 y(AST)p Ft(_)p Fk(GRID)h(routine\))f(b)n(y)g
-(determining)g(whether)g(the)h(descriptiv)n(e)e(lab)r(els)h(dra)n(wn)f
-(for)h(eac)n(h)f(axis)g(of)h(a)g(Plot)227 4692 y(should)d(include)g(a)g
-(description)f(of)h(the)h(units)f(b)r(eing)g(used)g(on)g(the)h(axis.)35
-b(It)28 b(tak)n(es)e(a)g(separate)g(v)-5 b(alue)27 b(for)f(eac)n(h)227
-4792 y(ph)n(ysical)32 b(axis)g(of)h(a)g(Plot)f(so)g(that,)j(for)d
-(instance,)j(the)e(setting)g Ft(")p Fk(Lab)r(elUnits\(2\)=1)p
-Ft(")e Fk(sp)r(eci\014es)i(that)g(a)g(unit)227 4891 y(description)27
-b(should)h(b)r(e)g(included)g(in)g(the)g(lab)r(el)f(for)g(the)h(second)
-f(axis.)227 5017 y(If)e(the)f(Lab)r(elUnits)g(v)-5 b(alue)24
-b(of)g(a)g(Plot)f(axis)g(is)h(non-zero,)f(a)h(unit)g(description)g
-(will)g(b)r(e)g(included)h(in)f(the)g(descrip-)227 5116
-y(tiv)n(e)33 b(lab)r(el)g(for)g(that)g(axis,)h(otherwise)e(it)h(will)h
-(b)r(e)f(omitted.)54 b(The)33 b(default)g(b)r(eha)n(viour)f(is)h(to)g
-(include)g(a)g(unit)227 5216 y(description)g(unless)f(the)i(curren)n(t)
-e(F)-7 b(rame)32 b(of)h(the)h(Plot)e(is)h(a)g(SkyF)-7
-b(rame)32 b(represen)n(ting)f(equatorial,)i(ecliptic,)227
-5316 y(galactic)27 b(or)f(sup)r(ergalactic)h(co)r(ordinates,)f(in)i
-(whic)n(h)f(case)g(it)h(is)f(omitted.)0 5467 y Fc(T)m(yp)s(e:)227
-5567 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 5718 y Fc(Class)k
-(Applicabilit)m(y:)p eop end
-%%Page: 423 433
-TeXDict begin 423 432 bop 3643 52 a FG(423)259 351 y
-Fc(Plot)427 451 y Fk(All)28 b(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-603 y Fc(Notes:)340 875 y Fj(\017)45 b Fk(The)28 b(text)g(used)f(for)h
-(the)g(unit)g(description)f(is)g(obtained)h(from)f(the)h(Plot's)f
-(Unit\(axis\))h(attribute.)340 998 y Fj(\017)45 b Fk(If)24
-b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)35 b Ft(")p
-Fk(Lab)r(elUnits)p Ft(")23 b Fk(instead)h(of)f Ft(")p
-Fk(Lab)r(elUnits\(2\))p Ft(")p Fk(\),)h(then)g(a)f Ft(")p
-Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427 1098
-y Fk(op)r(eration)h(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 1197 y(will)k(use)g(just)g(the)g(Lab)r
-(elUnits\(1\))g(v)-5 b(alue.)340 1320 y Fj(\017)45 b
-Fk(If)30 b(the)g(curren)n(t)f(F)-7 b(rame)28 b(of)i(the)g(Plot)e(is)i
-(not)f(a)g(SkyF)-7 b(rame,)29 b(but)h(includes)g(axes)e(whic)n(h)i(w)n
-(ere)e(extracted)427 1420 y(from)i(a)g(SkyF)-7 b(rame,)30
-b(then)h(the)f(default)h(b)r(eha)n(viour)e(is)h(to)g(include)g(a)g
-(unit)h(description)f(only)f(for)h(those)427 1520 y(axes)d(whic)n(h)g
-(w)n(ere)g(not)h(extracted)f(from)g(a)g(SkyF)-7 b(rame.)p
-0 1699 3780 12 v 0 1837 a FA(Lab)t(elUp\(axis\))1192
-1831 y Fd(Dra)m(w)38 b(n)m(umerical)e(Plot)i(lab)s(els)1675
-1930 y(uprigh)m(t?)2947 1837 y FA(Lab)t(elUp\(axis\))0
-2104 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2203 y(AST)p Ft(_)p Fk(GRID)j(routine\))e(b)n(y)h
-(determining)g(whether)f(the)i(n)n(umerical)e(lab)r(els)g(for)g(eac)n
-(h)g(axis)g(of)h(a)g(Plot)f(should)227 2303 y(b)r(e)k(dra)n(wn)f
-(uprigh)n(t)g(or)g(not.)57 b(It)35 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)35 b(for)f(eac)n(h)f(ph)n(ysical)h(axis)g(of)g(a)h(Plot)f(so)f
-(that,)k(for)227 2403 y(instance,)27 b(the)f(setting)g
-Ft(")p Fk(Lab)r(elUp\(2\)=1)p Ft(")f Fk(sp)r(eci\014es)h(that)h(n)n
-(umerical)e(lab)r(els)h(for)g(the)g(second)g(axis)f(should)h(b)r(e)227
-2502 y(dra)n(wn)h(uprigh)n(t.)227 2622 y(If)d(the)f(Lab)r(elUp)h(v)-5
-b(alue)23 b(of)g(a)g(Plot)f(axis)h(is)g(non-zero,)f(it)i(causes)e(n)n
-(umerical)g(lab)r(els)h(for)g(that)g(axis)g(to)g(b)r(e)g(plotted)227
-2721 y(uprigh)n(t)30 b(\(i.e.)45 b(as)30 b(normal,)g(horizon)n(tal)e
-(text\),)k(otherwise)d(lab)r(els)h(are)f(dra)n(wn)g(parallel)g(to)i
-(the)f(axis)g(to)g(whic)n(h)227 2821 y(they)e(apply)-7
-b(.)227 2941 y(The)30 b(default)h(is)f(to)g(pro)r(duce)g(uprigh)n(t)g
-(lab)r(els)g(if)g(the)h(lab)r(els)f(are)f(placed)h(around)f(the)h(edge)
-g(of)g(the)h(plot,)g(and)227 3040 y(to)g(pro)r(duce)g(lab)r(els)g(that)
-h(follo)n(w)e(the)i(axes)e(if)i(the)f(lab)r(els)g(are)f(placed)h
-(within)h(the)g(in)n(terior)e(of)h(the)g(plot)h(\(see)227
-3140 y(attribute)c(Lab)r(elling\).)0 3279 y Fc(T)m(yp)s(e:)227
-3379 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 3518 y Fc(Class)k
-(Applicabilit)m(y:)259 3645 y(Plot)427 3745 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3896 y Fc(Notes:)340 4169 y
-Fj(\017)45 b Fk(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 4269 y(plotting)g(area)e(\(see)i(the)g(Lab)r(elling)f
-(attribute\).)47 b(In)31 b(this)g(case,)f(the)h(v)-5
-b(alue)31 b(of)f(the)h(Lab)r(elUp)g(attribute)427 4368
-y(is)d(ignored.)340 4491 y Fj(\017)45 b Fk(If)36 b(no)e(axis)h(is)g(sp)
-r(eci\014ed,)i(\(e.g.)59 b Ft(")p Fk(Lab)r(elUp)p Ft(")34
-b Fk(instead)h(of)g Ft(")p Fk(Lab)r(elUp\(2\))p Ft(")p
-Fk(\),)i(then)e(a)g Ft(")p Fk(set)p Ft(")f Fk(or)g Ft(")p
-Fk(clear)p Ft(")427 4591 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h
-(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h
-(a)f Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p
-Ft(")h Fk(op)r(eration)427 4690 y(will)k(use)g(just)g(the)g(Lab)r
-(elUp\(1\))g(v)-5 b(alue.)p 0 4870 V 0 5001 a FA(Lab)t(elling)255
-b Fd(Lab)s(el)38 b(and)h(tic)m(k)f(placemen)m(t)f(option)g(for)h(a)g
-(Plot)252 b FA(Lab)t(elling)0 5175 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-5275 y(AST)p Ft(_)p Fk(GRID)h(routine\))g(b)n(y)f(determining)g(the)h
-(strategy)e(for)h(placing)g(n)n(umerical)f(lab)r(els)h(and)h(tic)n(k)f
-(marks)f(for)227 5374 y(a)e(Plot.)227 5494 y(If)21 b(the)g(Lab)r
-(elling)f(v)-5 b(alue)20 b(of)g(a)g(Plot)g(is)g Ft(")p
-Fk(exterior)p Ft(")e Fk(\(the)j(default\),)i(then)e(n)n(umerical)e(lab)
-r(els)h(and)h(their)f(asso)r(ciated)227 5593 y(tic)n(k)30
-b(marks)e(are)h(placed)g(around)f(the)i(edges)f(of)h(the)f(plotting)h
-(area,)f(if)h(p)r(ossible.)42 b(If)30 b(this)g(is)f(not)h(p)r(ossible,)
-f(or)227 5693 y(if)f(the)g(Lab)r(elling)g(v)-5 b(alue)27
-b(is)h Ft(")p Fk(in)n(terior)p Ft(")p Fk(,)d(then)j(they)g(are)f
-(placed)g(along)f(grid)h(lines)h(inside)f(the)h(plotting)g(area.)p
-eop end
-%%Page: 424 434
-TeXDict begin 424 433 bop 0 52 a FG(424)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(String.)0 606 y Fc(Class)g(Applicabilit)m
-(y:)259 747 y(Plot)427 847 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1014 y Fc(Notes:)340 1302 y Fj(\017)45
-b Fk(The)25 b(Lab)r(elA)n(t\(axis\))f(attribute)g(ma)n(y)f(b)r(e)i
-(used)f(to)g(determine)g(the)h(exact)f(placemen)n(t)g(of)g(lab)r(els)g
-(and)g(tic)n(k)427 1401 y(marks)j(that)h(are)e(dra)n(wn)h(inside)h(the)
-f(plotting)h(area.)p 0 1606 3780 12 v 0 1738 a FA(LatAxis)781
-b Fd(Index)40 b(of)e(the)g(latitude)f(axis)780 b FA(LatAxis)0
-1913 y Fc(Description:)44 b Fk(This)26 b(read-only)d(attribute)j(giv)n
-(es)e(the)i(index)g(\(1)f(or)f(2\))i(of)f(the)h(latitude)g(axis)e
-(within)j(the)e(SkyF)-7 b(rame)227 2013 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 2167 y Fc(T)m(yp)s(e:)227 2267 y Fk(In)n(teger.)0
-2422 y Fc(Class)k(Applicabilit)m(y:)259 2563 y(SkyF)-8
-b(rame)427 2663 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2868 V 0 2999 a FA(ListSize)612 b Fd(Num)m(b)s(er)38
-b(of)g(p)s(oin)m(ts)g(in)h(a)f(P)m(oin)m(tList)609 b
-FA(ListSize)0 3193 y Fc(Description:)44 b Fk(This)34
-b(is)g(a)g(read-only)e(attribute)j(giving)e(the)h(n)n(um)n(b)r(er)g(of)
-g(p)r(oin)n(ts)g(in)h(a)e(P)n(oin)n(tList.)56 b(This)34
-b(v)-5 b(alue)34 b(is)227 3293 y(determined)28 b(when)g(the)g(P)n(oin)n
-(tList)e(is)i(created.)0 3448 y Fc(T)m(yp)s(e:)227 3547
-y Fk(In)n(teger,)f(read-only)-7 b(.)0 3702 y Fc(Class)31
-b(Applicabilit)m(y:)259 3844 y(P)m(oin)m(tList)427 3943
-y Fk(All)d(P)n(oin)n(tLists)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 4148 V 0 4286 a FA(LogGap\(axis\))1003 4280 y Fd(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(ma)7 b(jor)37 b(axis)h(v)-7
-b(alues)1666 4394 y(of)39 b(a)f(Plot)2987 4286 y FA(LogGap\(axis\))0
-4570 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4669 y(AST)p Ft(_)p Fk(GRID)i(routine\))f(b)n(y)f
-(determining)h(the)h(logarithmic)d(in)n(terv)-5 b(al)31
-b(b)r(et)n(w)n(een)g(the)g Ft(")p Fk(ma)5 b(jor)p Ft(")29
-b Fk(axis)h(v)-5 b(alues)31 b(of)227 4769 y(a)k(Plot,)i(at)e(whic)n(h)g
-(\(for)h(example\))f(ma)5 b(jor)34 b(tic)n(k)h(marks)f(are)g(dra)n(wn.)
-60 b(It)35 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)36
-b(for)e(eac)n(h)227 4868 y(ph)n(ysical)d(axis)f(of)i(the)f(Plot)g(so)g
-(that,)i(for)d(instance,)i(the)g(setting)g Ft(")p Fk(LogGap\(2\)=100.0)
-p Ft(")27 b Fk(sp)r(eci\014es)k(the)h(ratio)227 4968
-y(b)r(et)n(w)n(een)25 b(adjacen)n(t)e(ma)5 b(jor)23 b(v)-5
-b(alues)24 b(along)f(the)i(second)f(axis.)35 b(The)24
-b(LogGap)f(attribute)h(is)h(only)f(used)g(when)g(the)227
-5068 y(LogTic)n(ks)31 b(attribute)h(indicates)h(that)f(the)h(spacing)f
-(b)r(et)n(w)n(een)g(ma)5 b(jor)31 b(axis)h(v)-5 b(alues)32
-b(is)g(to)g(b)r(e)h(logarithmic.)50 b(If)227 5167 y(ma)5
-b(jor)27 b(axis)f(v)-5 b(alues)28 b(are)e(linearly)h(spaced)g(then)h
-(the)g(gap)f(is)g(sp)r(eci\014ed)h(using)f(attribute)h(Gap.)227
-5295 y(The)37 b(LogGap)e(v)-5 b(alue)36 b(supplied)h(will)g(b)r(e)f
-(rounded)g(to)g(the)h(nearest)f(p)r(o)n(w)n(er)f(of)h(10.)63
-b(The)36 b(recipro)r(cal)f(of)h(the)227 5394 y(supplied)c(v)-5
-b(alue)31 b(ma)n(y)g(b)r(e)g(used)h(if)f(this)h(is)f(necessary)f(to)h
-(pro)r(duce)g(usable)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues.)48
-b(If)31 b(a)g(zero)f(or)227 5494 y(negativ)n(e)23 b(v)-5
-b(alue)24 b(is)g(supplied,)h(an)f(error)e(will)j(b)r(e)f(rep)r(orted)f
-(when)i(the)f(grid)f(is)h(dra)n(wn.)35 b(The)24 b(default)h(b)r(eha)n
-(viour)227 5593 y(is)j(for)f(the)h(Plot)f(to)h(generate)e(its)i(o)n(wn)
-f(LogGap)f(v)-5 b(alue)28 b(when)g(required,)f(based)g(on)g(the)h
-(range)e(of)i(axis)f(v)-5 b(alues)227 5693 y(to)28 b(b)r(e)g(represen)n
-(ted.)p eop end
-%%Page: 425 435
-TeXDict begin 425 434 bop 3643 52 a FG(425)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(Floating)27 b(p)r(oin)n(t.)0 602 y Fc(Class)k(Applicabilit)m
-(y:)259 741 y(Plot)427 841 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1005 y Fc(Notes:)340 1289 y Fj(\017)45
-b Fk(The)28 b(LogGap)e(v)-5 b(alue)28 b(is)f(a)g(ratio)g(b)r(et)n(w)n
-(een)h(axis)e(v)-5 b(alues)28 b(and)f(is)h(therefore)e(dimensionless.)
-340 1423 y Fj(\017)45 b Fk(If)38 b(no)g(axis)f(is)h(sp)r(eci\014ed,)i
-(\(e.g.)67 b Ft(")p Fk(LogGap)p Ft(")36 b Fk(instead)i(of)f
-Ft(")p Fk(LogGap\(2\))p Ft(")p Fk(\),)i(then)f(a)g Ft(")p
-Fk(set)p Ft(")f Fk(or)f Ft(")p Fk(clear)p Ft(")427 1523
-y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 1622 y(will)k(use)g(just)g(the)g(LogGap\(1\))e(v)-5
-b(alue.)p 0 1824 3780 12 v 0 1962 a FA(LogLab)t(el\(axis\))1203
-1956 y Fd(Use)39 b(exp)s(onen)m(tial)e(format)f(for)1330
-2070 y(n)m(umerical)g(axis)i(lab)s(els?)2909 1962 y FA(LogLab)t
-(el\(axis\))0 2242 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 2342
-y(AST)p Ft(_)p Fk(GRID)23 b(routine\))e(b)n(y)g(determining)h(whether)f
-(the)h(n)n(umerical)f(axis)g(lab)r(els)g(should)g(b)r(e)h(in)g(normal)f
-(decimal)227 2442 y(form)f(or)g(should)g(b)r(e)h(represen)n(ted)f(as)f
-(10)h(raised)f(to)i(the)g(appropriate)d(p)r(o)n(w)n(er.)34
-b(That)20 b(is,)i(an)e(axis)g(v)-5 b(alue)20 b(of)h(1000.0)227
-2541 y(will)28 b(b)r(e)g(dra)n(wn)f(as)g Ft(")p Fk(1000.0)p
-Ft(")e Fk(if)j(LogLab)r(el)f(is)h(zero,)e(but)j(as)e
-Ft(")p Fk(10)p Fj(^)p Fk(3)p Ft(")f Fk(if)i(LogLab)r(el)f(is)g
-(non-zero.)36 b(If)28 b(graphical)227 2641 y(escap)r(e)j(sequences)g
-(are)g(supp)r(orted)h(\(see)f(attribute)h(Escap)r(e\),)h(the)f(p)r(o)n
-(w)n(er)e(in)i(suc)n(h)g(exp)r(onen)n(tial)f(lab)r(els)g(will)227
-2741 y(b)r(e)d(dra)n(wn)f(as)g(a)g(small)g(sup)r(erscript)g(instead)h
-(of)f(using)g(a)h Ft(")p Fj(^)p Ft(")f Fk(c)n(haracter)e(to)j(represen)
-n(t)e(exp)r(onen)n(tiation.)227 2866 y(The)e(default)g(is)f(to)g(pro)r
-(duce)g(exp)r(onen)n(tial)g(lab)r(els)g(if)h(the)g(ma)5
-b(jor)22 b(tic)n(k)i(marks)e(are)g(logarithmically)g(spaced)h(\(see)227
-2966 y(the)28 b(LogTic)n(ks)e(attribute\).)0 3117 y Fc(T)m(yp)s(e:)227
-3217 y Fk(In)n(teger)h(\(b)r(o)r(olean\).)0 3369 y Fc(Class)k
-(Applicabilit)m(y:)259 3507 y(Plot)427 3607 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3771 y Fc(Notes:)340 4055 y
-Fj(\017)45 b Fk(If)33 b(no)e(axis)g(is)h(sp)r(eci\014ed,)h(\(e.g.)49
-b Ft(")p Fk(LogLab)r(el)p Ft(")30 b Fk(instead)i(of)g
-Ft(")p Fk(LogLab)r(el\(2\))p Ft(")p Fk(\),)f(then)h(a)g
-Ft(")p Fk(set)p Ft(")f Fk(or)f Ft(")p Fk(clear)p Ft(")427
-4155 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 4255 y(will)k(use)g(just)g(the)g(LogLab)r(el\(1\))e
-(v)-5 b(alue.)p 0 4456 V 0 4594 a FA(LogPlot\(axis\))1020
-4588 y Fd(Map)39 b(the)f(plot)g(logarithmically)33 b(on)m(to)1605
-4702 y(the)39 b(screen?)2984 4594 y FA(LogPlot\(axis\))0
-4870 y Fc(Description:)44 b Fk(This)19 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(the)h
-(Plot,)g(b)n(y)g(determining)227 4970 y(whether)j(the)g(axes)f(of)g
-(the)h(plotting)g(surface)f(are)g(mapp)r(ed)h(logarithmically)e(or)g
-(linearly)h(on)n(to)g(the)h(base)f(F)-7 b(rame)227 5069
-y(of)32 b(the)f(F)-7 b(rameSet)31 b(supplied)h(when)f(the)h(Plot)f(w)n
-(as)f(constructed.)47 b(It)32 b(tak)n(es)e(a)h(separate)f(v)-5
-b(alue)31 b(for)g(eac)n(h)f(axis)227 5169 y(of)39 b(the)f(graphics)f
-(co)r(ordinate)g(system)h(\(i.e.)70 b(the)38 b(base)g(F)-7
-b(rame)38 b(in)g(the)h(Plot\))f(so)f(that,)42 b(for)37
-b(instance,)k(the)227 5269 y(setting)32 b Ft(")p Fk(LogPlot\(2\)=1)p
-Ft(")c Fk(sp)r(eci\014es)j(that)h(the)f(second)g(axis)g(of)g(the)h
-(graphics)e(co)r(ordinate)g(system)h(\(usually)227 5368
-y(the)d(v)n(ertical)e(axis\))h(should)g(b)r(e)h(mapp)r(ed)g
-(logarithmically)d(on)n(to)i(the)h(second)f(axis)f(of)i(the)f(base)g(F)
--7 b(rame)27 b(of)g(the)227 5468 y(F)-7 b(rameSet)28
-b(supplied)g(when)f(the)h(Plot)f(w)n(as)g(constructed.)227
-5593 y(If)32 b(the)g(LogPlot)d(v)-5 b(alue)31 b(of)h(a)f(Plot)f(axis)h
-(is)g(non-zero,)g(it)g(causes)g(that)g(axis)g(to)g(b)r(e)h(mapp)r(ed)f
-(logarithmically)-7 b(,)227 5693 y(otherwise)27 b(\(the)h(default\))h
-(the)f(axis)e(is)i(mapp)r(ed)g(linearly)-7 b(.)p eop
-end
-%%Page: 426 436
-TeXDict begin 426 435 bop 0 52 a FG(426)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(In)n(teger)c(\(b)r(o)r(olean\).)0
-595 y Fc(Class)k(Applicabilit)m(y:)259 726 y(Plot)427
-825 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-981 y Fc(Notes:)340 1258 y Fj(\017)45 b Fk(The)c(setting)f(of)g(the)h
-(LogPlot)d(attribute)i(pro)n(vides)f(the)i(default)f(v)-5
-b(alue)41 b(for)e(the)i(related)e(LogTic)n(ks)427 1358
-y(attribute.)48 b(By)30 b(selecting)h(suitable)g(v)-5
-b(alues)30 b(for)h(LogPlot)e(and)i(LogTic)n(ks,)f(it)i(is)e(p)r
-(ossible)h(to)g(ha)n(v)n(e)f(tic)n(k)427 1458 y(marks)22
-b(whic)n(h)g(are)f(ev)n(enly)h(spaced)g(in)h(v)-5 b(alue)22
-b(but)h(whic)n(h)f(are)g(mapp)r(ed)g(logarithmically)f(on)n(to)h(the)g
-(screen)427 1557 y(\(and)28 b(vice-v)n(ersa\).)340 1684
-y Fj(\017)45 b Fk(An)22 b(axis)e(ma)n(y)g(only)h(b)r(e)g(mapp)r(ed)h
-(logarithmically)d(if)j(the)f(visible)g(part)f(of)h(the)h(axis)e(do)r
-(es)h(not)g(include)g(the)427 1784 y(v)-5 b(alue)29 b(zero.)38
-b(The)29 b(visible)f(part)g(of)g(the)h(axis)f(is)g(that)h(part)f(whic)n
-(h)h(is)f(mapp)r(ed)h(on)n(to)f(the)g(plotting)h(area,)427
-1884 y(and)i(is)g(measured)f(within)i(the)f(base)f(F)-7
-b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31 b(whic)n(h)f(w)n(as)g
-(supplied)i(when)f(the)g(Plot)427 1983 y(w)n(as)g(constructed.)49
-b(An)n(y)32 b(attempt)h(to)f(set)f(LogPlot)g(to)g(a)h(non-zero)e(v)-5
-b(alue)32 b(will)g(b)r(e)g(ignored)f(\(without)427 2083
-y(error\))26 b(if)i(the)g(visible)g(part)f(of)g(the)h(axis)f(includes)h
-(the)g(v)-5 b(alue)27 b(zero)340 2210 y Fj(\017)45 b
-Fk(If)38 b(no)g(axis)f(is)g(sp)r(eci\014ed,)k(\(e.g.)67
-b Ft(")p Fk(LogPlot)p Ft(")35 b Fk(instead)j(of)f Ft(")p
-Fk(LogPlot\(2\))p Ft(")p Fk(\),)h(then)h(a)e Ft(")p Fk(set)p
-Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427 2310 y Fk(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)427
-2409 y(will)k(use)g(just)g(the)g(LogPlot\(1\))e(v)-5
-b(alue.)p 0 2597 3780 12 v 0 2736 a FA(LogTic)l(ks\(axis\))1184
-2729 y Fd(Space)38 b(the)h(ma)7 b(jor)37 b(tic)m(k)g(marks)1480
-2844 y(logarithmically?)2922 2736 y FA(LogTic)l(ks\(axis\))0
-3026 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 3126 y(AST)p Ft(_)p Fk(GRID)20 b(routine\))f(b)n
-(y)g(determining)g(whether)g(the)g(ma)5 b(jor)18 b(tic)n(k)h(marks)f
-(should)h(b)r(e)h(spaced)e(logarithmically)227 3225 y(or)32
-b(linearly)f(in)i(axis)f(v)-5 b(alue.)51 b(It)32 b(tak)n(es)g(a)g
-(separate)f(v)-5 b(alue)32 b(for)g(eac)n(h)f(ph)n(ysical)h(axis)g(of)g
-(the)h(Plot)e(so)h(that,)i(for)227 3325 y(instance,)22
-b(the)g(setting)f Ft(")p Fk(LogTic)n(ks\(2\)=1)p Ft(")c
-Fk(sp)r(eci\014es)k(that)g(the)g(ma)5 b(jor)20 b(tic)n(k)h(marks)e(on)i
-(the)g(second)g(axis)f(should)227 3424 y(b)r(e)28 b(spaced)f
-(logarithmically)-7 b(.)227 3546 y(If)35 b(the)g(LogTic)n(ks)e(v)-5
-b(alue)34 b(for)g(a)h(ph)n(ysical)e(axis)h(is)h(non-zero,)f(the)h(ma)5
-b(jor)34 b(tic)n(k)g(marks)f(on)i(that)g(axis)e(will)i(b)r(e)227
-3646 y(spaced)29 b(logarithmically)e(\(that)j(is,)g(there)f(will)g(b)r
-(e)h(a)f(constan)n(t)g(ratio)f(b)r(et)n(w)n(een)h(the)h(axis)e(v)-5
-b(alues)29 b(at)g(adjacen)n(t)227 3745 y(ma)5 b(jor)33
-b(tic)n(k)g(marks\).)55 b(An)34 b(error)e(will)i(b)r(e)g(rep)r(orted)f
-(if)h(the)g(dynamic)f(range)g(of)g(the)i(axis)d(\(the)j(ratio)e(of)g
-(the)227 3845 y(largest)27 b(to)h(smallest)g(displa)n(y)n(ed)f(axis)g
-(v)-5 b(alue\))28 b(is)h(less)e(than)h(10.0.)38 b(If)28
-b(the)h(LogTic)n(ks)d(v)-5 b(alue)28 b(is)g(zero,)f(the)i(ma)5
-b(jor)227 3945 y(tic)n(k)23 b(marks)f(will)h(b)r(e)g(ev)n(enly)g
-(spaced)f(\(that)h(is,)h(there)f(will)g(b)r(e)g(a)g(constan)n(t)f
-(di\013erence)h(b)r(et)n(w)n(een)g(the)g(axis)f(v)-5
-b(alues)227 4044 y(at)29 b(adjacen)n(t)e(ma)5 b(jor)28
-b(tic)n(k)g(marks\).)38 b(The)29 b(default)g(is)f(to)g(pro)r(duce)g
-(logarithmically)f(spaced)h(tic)n(k)g(marks)f(if)i(the)227
-4144 y(corresp)r(onding)22 b(LogPlot)h(attribute)h(is)g(non-zero)e(and)
-i(the)g(ratio)f(of)h(maxim)n(um)g(axis)f(v)-5 b(alue)24
-b(to)g(minim)n(um)g(axis)227 4244 y(v)-5 b(alue)34 b(is)f(100)g(or)g
-(more.)54 b(If)34 b(either)g(of)g(these)f(conditions)h(is)f(not)h(met,)
-i(the)e(default)g(is)g(to)f(pro)r(duce)g(linearly)227
-4343 y(spaced)27 b(tic)n(k)h(marks.)0 4487 y Fc(T)m(yp)s(e:)227
-4587 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0 4731 y Fc(Class)k
-(Applicabilit)m(y:)259 4861 y(Plot)427 4961 y Fk(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 5117 y Fc(Notes:)340 5394 y
-Fj(\017)45 b Fk(The)d(setting)g(of)f(the)h(LogTic)n(ks)e(attribute)i
-(do)r(es)f(not)h(a\013ect)g(the)g(mapping)f(of)h(the)g(plot)f(on)n(to)g
-(the)427 5494 y(screen,)d(whic)n(h)d(is)h(con)n(trolled)f(b)n(y)h
-(attribute)g(LogPlot.)60 b(By)36 b(selecting)f(suitable)h(v)-5
-b(alues)36 b(for)f(LogPlot)427 5593 y(and)c(LogTic)n(ks,)f(it)i(is)f(p)
-r(ossible)g(to)g(ha)n(v)n(e)f(tic)n(k)h(marks)e(whic)n(h)j(are)e(ev)n
-(enly)g(spaced)h(in)g(v)-5 b(alue)31 b(but)h(whic)n(h)427
-5693 y(are)27 b(mapp)r(ed)h(logarithmically)e(on)n(to)g(the)i(screen)f
-(\(and)h(vica-v)n(ersa\).)p eop end
-%%Page: 427 437
-TeXDict begin 427 436 bop 3643 52 a FG(427)340 351 y
-Fj(\017)45 b Fk(An)38 b(error)e(will)i(b)r(e)g(rep)r(orted)f(when)h
-(dra)n(wing)f(an)g(annotated)g(axis)g(grid)g(if)i(the)f(visible)f(part)
-h(of)f(the)427 451 y(ph)n(ysical)27 b(axis)g(includes)h(the)f(v)-5
-b(alue)28 b(zero.)340 581 y Fj(\017)45 b Fk(If)33 b(no)g(axis)f(is)g
-(sp)r(eci\014ed,)j(\(e.g.)52 b Ft(")p Fk(LogTic)n(ks)p
-Ft(")30 b Fk(instead)j(of)f Ft(")p Fk(LogTic)n(ks\(2\))p
-Ft(")p Fk(\),)g(then)h(a)g Ft(")p Fk(set)p Ft(")f Fk(or)f
-Ft(")p Fk(clear)p Ft(")427 681 y Fk(op)r(eration)23 b(will)i(a\013ect)f
-(the)h(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h
-(while)h(a)f Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p
-Ft(")h Fk(op)r(eration)427 780 y(will)k(use)g(just)g(the)g(LogTic)n
-(ks\(1\))e(v)-5 b(alue.)p 0 974 3780 12 v 0 1106 a FA(LonAxis)717
-b Fd(Index)39 b(of)g(the)f(longitude)f(axis)717 b FA(LonAxis)0
-1294 y Fc(Description:)44 b Fk(This)22 b(read-only)e(attribute)i(giv)n
-(es)f(the)h(index)g(\(1)f(or)g(2\))h(of)f(the)h(longitude)g(axis)f
-(within)h(the)g(SkyF)-7 b(rame)227 1393 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 1540 y Fc(T)m(yp)s(e:)227 1640 y Fk(In)n(teger.)0
-1787 y Fc(Class)k(Applicabilit)m(y:)259 1920 y(SkyF)-8
-b(rame)427 2020 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2214 V 0 2345 a FA(LutIn)l(terp)398 b
-Fd(Lo)s(ok-up)39 b(table)e(in)m(terp)s(olation)e(metho)s(d)397
-b FA(LutIn)l(terp)0 2529 y Fc(Description:)44 b Fk(This)22
-b(attribute)g(indicates)f(the)h(metho)r(d)g(to)g(b)r(e)g(used)f(when)h
-(\014nding)g(the)g(output)g(v)-5 b(alue)22 b(of)f(a)g(LutMap)227
-2629 y(for)33 b(an)f(input)i(v)-5 b(alue)33 b(part)g(w)n(a)n(y)e(b)r
-(et)n(w)n(een)i(t)n(w)n(o)g(table)g(en)n(tries.)52 b(If)34
-b(it)f(is)g(set)g(to)g(0)f(\(the)i(default\))g(then)f(linear)227
-2728 y(in)n(terp)r(olation)27 b(is)h(used.)36 b(Otherwise,)27
-b(nearest)g(neigh)n(b)r(our)f(in)n(terp)r(olation)h(is)h(used.)227
-2851 y(Using)f(nearest)f(neigh)n(b)r(our)g(in)n(terp)r(olation)h
-(causes)f(AST)p Ft(__)p Fk(BAD)h(to)g(b)r(e)g(returned)g(for)f(an)n(y)h
-(p)r(oin)n(t)g(whic)n(h)g(falls)227 2951 y(outside)20
-b(the)g(b)r(ounds)g(of)f(the)i(table.)34 b(Linear)19
-b(in)n(terp)r(olation)f(results)i(in)g(an)f(extrap)r(olated)g(v)-5
-b(alue)19 b(b)r(eing)h(returned)227 3051 y(based)27 b(on)h(the)g(t)n(w)
-n(o)e(end)i(en)n(tries)f(in)h(the)g(table.)0 3197 y Fc(T)m(yp)s(e:)227
-3297 y Fk(In)n(teger.)0 3444 y Fc(Class)j(Applicabilit)m(y:)259
-3577 y(LutMap)427 3677 y Fk(All)d(LutMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 3871 V 0 4009 a FA(Ma)7 b(jTic)l(kLen\(axis\))1359
-4003 y Fd(Length)38 b(of)h(ma)7 b(jor)36 b(tic)m(k)1469
-4117 y(marks)i(for)g(a)g(Plot)2732 4009 y FA(Ma)7 b(jTic)l
-(kLen\(axis\))0 4282 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 4382
-y(AST)p Ft(_)p Fk(GRID)k(routine\))e(b)n(y)h(determining)g(the)g
-(length)g(of)g(the)g(ma)5 b(jor)31 b(tic)n(k)i(marks)f(dra)n(wn)g(on)g
-(the)h(axes)f(of)h(a)227 4481 y(Plot.)42 b(It)30 b(tak)n(es)f(a)g
-(separate)f(v)-5 b(alue)29 b(for)g(eac)n(h)g(ph)n(ysical)f(axis)h(of)g
-(the)h(Plot)f(so)g(that,)h(for)f(instance,)h(the)g(setting)227
-4581 y Ft(")p Fk(Ma)5 b(jTic)n(kLen\(2\)=0)p Ft(")25
-b Fk(sp)r(eci\014es)j(the)g(length)f(of)h(the)g(ma)5
-b(jor)26 b(tic)n(k)i(marks)e(dra)n(wn)h(on)g(the)h(second)f(axis.)227
-4704 y(The)35 b(Ma)5 b(jTic)n(kLen)33 b(v)-5 b(alue)34
-b(should)g(b)r(e)h(giv)n(en)e(as)h(a)f(fraction)h(of)g(the)h(minim)n
-(um)g(dimension)f(of)g(the)h(plotting)227 4804 y(area.)56
-b(Negativ)n(e)33 b(v)-5 b(alues)34 b(cause)g(ma)5 b(jor)33
-b(tic)n(k)h(marks)f(to)i(b)r(e)f(placed)h(on)f(the)g(outside)g(of)h
-(the)g(corresp)r(onding)227 4903 y(grid)c(line)h(or)f(axis)g(\(but)i
-(sub)5 b(ject)32 b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)g(the)g
-(underlying)f(graphics)f(system\),)j(while)227 5003 y(p)r(ositiv)n(e)27
-b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)h(placed)f(on)h(the)g
-(inside.)227 5126 y(The)e(default)g(b)r(eha)n(viour)e(dep)r(ends)i(on)f
-(whether)g(a)g(co)r(ordinate)f(grid)h(is)g(dra)n(wn)g(inside)g(the)h
-(plotting)g(area)e(\(see)227 5226 y(the)f(Grid)e(attribute\).)36
-b(If)22 b(so,)h(the)f(default)g(Ma)5 b(jTic)n(kLen)21
-b(v)-5 b(alue)22 b(is)g(zero)f(\(so)g(that)h(ma)5 b(jor)21
-b(tic)n(ks)g(are)g(not)h(dra)n(wn\),)227 5325 y(otherwise)27
-b(the)h(default)g(is)f(+0.015.)0 5472 y Fc(T)m(yp)s(e:)227
-5572 y Fk(Floating)g(p)r(oin)n(t.)0 5718 y Fc(Class)k(Applicabilit)m
-(y:)p eop end
-%%Page: 428 438
-TeXDict begin 428 437 bop 0 52 a FG(428)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(Plot)427 451 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-607 y Fc(Notes:)340 884 y Fj(\017)45 b Fk(If)37 b(no)g(axis)f(is)g(sp)r
-(eci\014ed,)k(\(e.g.)64 b Ft(")p Fk(Ma)5 b(jTic)n(kLen)p
-Ft(")34 b Fk(instead)j(of)g Ft(")p Fk(Ma)5 b(jTic)n(kLen\(2\))p
-Ft(")p Fk(\),)37 b(then)g(a)g Ft(")p Fk(set)p Ft(")e
-Fk(or)427 984 y Ft(")p Fk(clear)p Ft(")28 b Fk(op)r(eration)g(will)i
-(a\013ect)g(the)g(attribute)g(v)-5 b(alue)29 b(of)h(all)f(the)h(Plot)f
-(axes,)g(while)h(a)f Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p
-Fk(test)p Ft(")427 1084 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g
-(Ma)5 b(jTic)n(kLen\(1\))27 b(v)-5 b(alue.)p 0 1272 3780
-12 v 0 1404 a FA(Matc)l(hEnd)752 b Fd(Matc)m(h)38 b(trailing)e(axes?)
-752 b FA(Matc)l(hEnd)0 1586 y Fc(Description:)44 b Fk(This)26
-b(attribute)f(is)g(a)g(b)r(o)r(olean)f(v)-5 b(alue)25
-b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7 b(rame)24
-b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-1686 y(AST)p Ft(_)p Fk(FINDFRAME\))32 b(as)f(a)f(template)h(to)g(matc)n
-(h)g(another)e(\(target\))i(F)-7 b(rame.)46 b(It)31 b(applies)g(only)f
-(in)h(the)g(case)227 1785 y(where)c(a)h(matc)n(h)f(o)r(ccurs)g(b)r(et)n
-(w)n(een)g(template)h(and)f(target)g(F)-7 b(rames)27
-b(with)h(di\013eren)n(t)g(n)n(um)n(b)r(ers)f(of)g(axes.)227
-1907 y(If)g(the)g(Matc)n(hEnd)f(v)-5 b(alue)26 b(of)h(the)g(template)f
-(F)-7 b(rame)26 b(is)h(zero,)e(then)i(the)g(axes)f(whic)n(h)g(o)r(ccur)
-g(\014rst)g(in)h(the)g(target)227 2007 y(F)-7 b(rame)25
-b(will)g(b)r(e)h(matc)n(hed)f(and)g(an)n(y)f(trailing)g(axes)g(\(in)i
-(either)f(the)g(target)g(or)f(template\))i(will)f(b)r(e)g(disregarded.)
-227 2106 y(If)33 b(it)f(is)g(non-zero,)g(the)g(\014nal)g(axes)f(in)h
-(eac)n(h)f(F)-7 b(rame)32 b(will)g(b)r(e)h(matc)n(hed)e(and)h(an)n(y)f
-(un-matc)n(hed)h(leading)g(axes)227 2206 y(will)c(b)r(e)g(disregarded)e
-(instead.)0 2350 y Fc(T)m(yp)s(e:)227 2450 y Fk(In)n(teger)h(\(b)r(o)r
-(olean\).)0 2594 y Fc(Class)k(Applicabilit)m(y:)259 2725
-y(F)-8 b(rame)427 2824 y Fk(The)28 b(default)g(Matc)n(hEnd)f(v)-5
-b(alue)27 b(for)h(a)f(F)-7 b(rame)27 b(is)g(zero,)g(so)g(that)h
-(trailing)e(axes)h(are)g(disregarded.)259 2952 y Fc(F)-8
-b(rameSet)427 3051 y Fk(The)27 b(Matc)n(hEnd)e(attribute)i(of)f(a)g(F)
--7 b(rameSet)26 b(is)g(the)g(same)g(as)f(that)i(of)f(its)g(curren)n(t)g
-(F)-7 b(rame)26 b(\(as)f(sp)r(eci\014ed)427 3151 y(b)n(y)j(the)g
-(Curren)n(t)e(attribute\).)p 0 3339 V 0 3470 a FA(MaxAxes)794
-3471 y Fd(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)h(F)-10
-b(rame)38 b(axes)h(to)f(matc)m(h)3229 3470 y FA(MaxAxes)0
-3630 y Fc(Description:)44 b Fk(This)27 b(attribute)f(con)n(trols)e(ho)n
-(w)i(a)g(F)-7 b(rame)25 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h
-(\(b)n(y)f(AST)p Ft(_)p Fk(FINDFRAME\))h(as)227 3730
-y(a)k(template)h(to)g(matc)n(h)f(another)f(\(target\))i(F)-7
-b(rame.)48 b(It)32 b(sp)r(eci\014es)f(the)h(maxim)n(um)f(n)n(um)n(b)r
-(er)g(of)h(axes)e(that)i(the)227 3829 y(target)27 b(F)-7
-b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e(to)i(matc)n(h)f(the)h
-(template.)227 3951 y(Normally)-7 b(,)22 b(this)g(v)-5
-b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7 b(rame)21
-b(will)h(only)g(matc)n(h)227 4051 y(another)29 b(F)-7
-b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g(as)h
-(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4150 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-4294 y Fc(T)m(yp)s(e:)227 4394 y Fk(In)n(teger.)0 4538
-y Fc(Class)k(Applicabilit)m(y:)259 4669 y(F)-8 b(rame)427
-4769 y Fk(The)35 b(default)g(MaxAxes)f(v)-5 b(alue)34
-b(for)g(a)g(F)-7 b(rame)34 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)34 b(axes)g(\(Naxes)g(at-)427 4868
-y(tribute\).)259 4996 y Fc(CmpF)-8 b(rame)427 5095 y
-Fk(The)27 b(MaxAxes)f(attribute)h(of)f(a)g(CmpF)-7 b(rame)27
-b(defaults)g(to)f(a)g(large)g(n)n(um)n(b)r(er)g(\(1000000\))e(whic)n(h)
-i(is)h(m)n(uc)n(h)427 5195 y(larger)k(than)j(an)n(y)e(lik)n(ely)g(n)n
-(um)n(b)r(er)h(of)g(axes)f(in)i(a)e(F)-7 b(rame.)53 b(Com)n(bined)33
-b(with)h(the)f(MinAxes)g(default)h(of)427 5295 y(zero)28
-b(\(for)h(a)g(CmpF)-7 b(rame\),)30 b(this)f(means)g(that)g(the)h
-(default)f(b)r(eha)n(viour)f(for)h(a)g(CmpF)-7 b(rame)29
-b(is)g(to)g(matc)n(h)427 5394 y(an)n(y)24 b(target)g(F)-7
-b(rame)24 b(that)h(consists)f(of)g(a)g(subset)h(of)f(the)h(axes)f(in)h
-(the)g(template)g(CmpF)-7 b(rame.)36 b(T)-7 b(o)24 b(c)n(hange)427
-5494 y(this)33 b(so)f(that)g(a)g(CmpF)-7 b(rame)32 b(will)h(only)f
-(matc)n(h)g(F)-7 b(rames)31 b(that)i(ha)n(v)n(e)e(the)i(same)e(n)n(um)n
-(b)r(er)h(of)h(axes,)f(y)n(ou)427 5593 y(should)i(set)g(the)h(CmpF)-7
-b(rame)34 b(MaxAxes)f(and)h(MinAxes)g(attributes)g(to)g(the)h(n)n(um)n
-(b)r(er)f(of)g(axes)f(in)h(the)427 5693 y(CmpF)-7 b(rame.)p
-eop end
-%%Page: 429 439
-TeXDict begin 429 438 bop 3643 52 a FG(429)259 351 y
-Fc(F)-8 b(rameSet)427 451 y Fk(The)29 b(MaxAxes)f(attribute)h(of)g(a)g
-(F)-7 b(rameSet)28 b(is)h(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)28 b(\(as)g(sp)r(eci\014ed)427 551 y(b)n(y)g(the)g
-(Curren)n(t)e(attribute\).)0 706 y Fc(Notes:)340 982
-y Fj(\017)45 b Fk(When)39 b(setting)g(a)e(MaxAxes)h(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MinAxes)g(attribute)f
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1082 y(c)n(hanged)26
-b(so)h(that)g(it)g(remains)f(consisten)n(t)h(with)g(\(i.e.)37
-b(do)r(es)27 b(not)g(exceed\))g(the)g(new)h(v)-5 b(alue.)36
-b(The)27 b(default)427 1182 y(MaxAxes)g(v)-5 b(alue)28
-b(ma)n(y)e(also)h(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MinAxes)g(v)-5 b(alue.)340 1308 y Fj(\017)45
-b Fk(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 1408 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 1507 y(matc)n(h.)p
-0 1694 3780 12 v 0 1826 a FA(MeshSize)332 b Fd(Num)m(b)s(er)38
-b(of)h(p)s(oin)m(ts)f(used)h(to)f(represen)m(t)g(the)1335
-1940 y(b)s(oundary)f(of)i(a)f(Region)3230 1826 y FA(MeshSize)0
-2117 y Fc(Description:)44 b Fk(This)24 b(attribute)f(con)n(trols)f(ho)n
-(w)g(man)n(y)h(p)r(oin)n(ts)g(are)f(used)i(when)f(creating)f(a)h(mesh)g
-(of)h(p)r(oin)n(ts)f(co)n(v)n(ering)227 2216 y(the)35
-b(b)r(oundary)e(of)i(a)f(Region.)56 b(This)34 b(mesh)g(is)g(used)h
-(primarily)e(when)h(testing)h(for)e(o)n(v)n(erlap)g(with)h(a)g(second)
-227 2316 y(Region:)i(eac)n(h)25 b(p)r(oin)n(t)h(in)g(the)g(mesh)g(is)g
-(c)n(hec)n(k)n(ed)e(to)i(see)g(if)g(it)g(is)g(inside)g(or)f(outside)h
-(the)g(second)f(Region.)36 b(Th)n(us,)227 2416 y(the)23
-b(reliabilit)n(y)f(of)g(the)h(o)n(v)n(erlap)d(c)n(hec)n(k)h(dep)r(ends)
-i(on)f(the)h(v)-5 b(alue)22 b(assigned)g(to)g(this)h(attribute.)35
-b(If)23 b(the)f(v)-5 b(alue)23 b(used)227 2515 y(is)e(v)n(ery)e(lo)n
-(w,)i(it)g(is)f(p)r(ossible)g(for)g(o)n(v)n(erlaps)e(to)i(go)g
-(unnoticed.)34 b(High)21 b(v)-5 b(alues)20 b(pro)r(duce)g(more)f
-(reliable)h(results,)h(but)227 2615 y(can)i(result)h(in)f(the)h(o)n(v)n
-(erlap)e(test)i(b)r(eing)f(v)n(ery)g(slo)n(w.)34 b(The)24
-b(default)g(v)-5 b(alue)23 b(is)h(200)e(for)h(t)n(w)n(o)g(dimensional)g
-(Regions)227 2714 y(and)f(2000)d(for)i(three)g(or)g(more)f(dimensional)
-h(Regions)g(\(this)h(attribute)f(is)g(not)h(used)f(for)g(1-dimensional)
-f(regions)227 2814 y(since)29 b(the)g(b)r(oundary)e(of)i(a)f(simple)h
-(1-d)f(Region)f(can)i(only)f(ev)n(er)f(ha)n(v)n(e)h(t)n(w)n(o)f(p)r
-(oin)n(ts\).)40 b(A)29 b(v)-5 b(alue)29 b(of)f(\014v)n(e)g(is)h(used)
-227 2914 y(if)f(the)g(supplied)g(v)-5 b(alue)28 b(is)f(less)g(than)h
-(\014v)n(e.)0 3057 y Fc(T)m(yp)s(e:)227 3156 y Fk(In)n(teger.)0
-3300 y Fc(Class)j(Applicabilit)m(y:)259 3430 y(Region)427
-3529 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i(attribute.)259
-3656 y Fc(CmpRegion)427 3756 y Fk(The)g(default)g(MeshSize)g(for)f(a)g
-(CmpRegion)g(is)g(the)h(MeshSize)g(of)f(its)h(\014rst)g(comp)r(onen)n
-(t)f(Region.)259 3882 y Fc(Stc)427 3982 y Fk(The)h(default)g(MeshSize)g
-(for)f(an)g(Stc)h(is)f(the)h(MeshSize)g(of)f(its)h(encapsulated)f
-(Region.)p 0 4168 V 0 4300 a FA(MinAxes)279 b Fd(Minim)m(um)37
-b(n)m(um)m(b)s(er)h(of)g(F)-10 b(rame)39 b(axes)f(to)g(matc)m(h)278
-b FA(MinAxes)0 4458 y Fc(Description:)44 b Fk(This)27
-b(attribute)f(con)n(trols)e(ho)n(w)i(a)g(F)-7 b(rame)25
-b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)f(AST)p
-Ft(_)p Fk(FINDFRAME\))h(as)227 4557 y(a)32 b(template)h(to)f(matc)n(h)h
-(another)e(\(target\))h(F)-7 b(rame.)51 b(It)33 b(sp)r(eci\014es)f(the)
-h(minim)n(um)g(n)n(um)n(b)r(er)g(of)f(axes)f(that)i(the)227
-4657 y(target)27 b(F)-7 b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e
-(to)i(matc)n(h)f(the)h(template.)227 4778 y(Normally)-7
-b(,)22 b(this)g(v)-5 b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f
-(of)h(F)-7 b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7
-b(rame)21 b(will)h(only)g(matc)n(h)227 4878 y(another)29
-b(F)-7 b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g
-(as)h(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4978 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-5121 y Fc(T)m(yp)s(e:)227 5220 y Fk(In)n(teger.)0 5364
-y Fc(Class)k(Applicabilit)m(y:)259 5494 y(F)-8 b(rame)427
-5593 y Fk(The)36 b(default)g(MinAxes)g(v)-5 b(alue)35
-b(for)g(a)g(F)-7 b(rame)35 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)35 b(axes)g(\(Naxes)g(at-)427 5693
-y(tribute\).)p eop end
-%%Page: 430 440
-TeXDict begin 430 439 bop 0 52 a FG(430)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(CmpF)-8 b(rame)427 451 y Fk(The)22 b(MinAxes)f(attribute)h(of)f(a)
-g(CmpF)-7 b(rame)22 b(defaults)f(to)h(zero.)33 b(Com)n(bined)22
-b(with)g(the)f(MaxAxes)g(default)427 551 y(of)30 b(1000000)d(\(for)j(a)
-g(CmpF)-7 b(rame\),)30 b(this)h(means)e(that)i(the)f(default)h(b)r(eha)
-n(viour)e(for)g(a)h(CmpF)-7 b(rame)30 b(is)g(to)427 650
-y(matc)n(h)c(an)n(y)f(target)h(F)-7 b(rame)25 b(that)i(consists)e(of)h
-(a)g(subset)g(of)g(the)g(axes)g(in)g(the)g(template)h(CmpF)-7
-b(rame.)36 b(T)-7 b(o)427 750 y(c)n(hange)24 b(this)h(so)g(that)g(a)g
-(CmpF)-7 b(rame)25 b(will)g(only)g(matc)n(h)f(F)-7 b(rames)25
-b(that)g(ha)n(v)n(e)f(the)h(same)g(n)n(um)n(b)r(er)f(of)h(axes,)427
-849 y(y)n(ou)33 b(should)g(set)g(the)g(CmpF)-7 b(rame)33
-b(MinAxes)g(and)g(MaxAxes)g(attributes)g(to)g(the)g(n)n(um)n(b)r(er)g
-(of)g(axes)f(in)427 949 y(the)c(CmpF)-7 b(rame.)259 1086
-y Fc(F)f(rameSet)427 1186 y Fk(The)30 b(MinAxes)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)30 b(is)g(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)427 1285
-y(b)n(y)f(the)g(Curren)n(t)e(attribute\).)0 1456 y Fc(Notes:)340
-1746 y Fj(\017)45 b Fk(When)39 b(setting)g(a)e(MinAxes)i(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MaxAxes)f(attribute)g
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1846 y(c)n(hanged)28
-b(so)f(that)i(it)f(remains)g(consisten)n(t)g(with)g(\(i.e.)40
-b(is)28 b(not)g(less)g(than\))h(the)g(new)f(v)-5 b(alue.)39
-b(The)28 b(default)427 1946 y(MinAxes)g(v)-5 b(alue)27
-b(ma)n(y)g(also)g(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MaxAxes)f(v)-5 b(alue.)340 2083 y Fj(\017)45
-b Fk(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 2182 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 2282 y(matc)n(h.)p
-0 2490 3780 12 v 0 2628 a FA(MinTic)l(k\(axis\))1033
-2621 y Fd(Densit)m(y)38 b(of)h(minor)e(tic)m(k)g(marks)h(for)g(a)1782
-2736 y(Plot)2951 2628 y FA(MinTic)l(k\(axis\))0 2914
-y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 3014 y(AST)p Ft(_)p Fk(GRID)k(routine\))g(b)n(y)f
-(determining)g(the)h(densit)n(y)g(of)f(minor)g(tic)n(k)g(marks)g(whic)n
-(h)g(app)r(ear)g(b)r(et)n(w)n(een)g(the)227 3114 y(ma)5
-b(jor)29 b(axis)g(v)-5 b(alues)30 b(of)g(a)f(Plot.)43
-b(It)31 b(tak)n(es)e(a)g(separate)g(v)-5 b(alue)29 b(for)h(eac)n(h)f
-(ph)n(ysical)g(axis)g(of)h(a)g(Plot)f(so)g(that,)i(for)227
-3213 y(instance,)i(the)f(setting)g Ft(")p Fk(MinTic)n(k\(2\)=2)p
-Ft(")e Fk(sp)r(eci\014es)i(the)h(densit)n(y)e(of)h(minor)g(tic)n(k)f
-(marks)g(along)g(the)h(second)227 3313 y(axis.)227 3442
-y(The)e(v)-5 b(alue)29 b(supplied)h(should)g(b)r(e)g(the)g(n)n(um)n(b)r
-(er)f(of)g(minor)h(divisions)e(required)h(b)r(et)n(w)n(een)h(eac)n(h)e
-(pair)h(of)h(ma)5 b(jor)227 3541 y(axis)28 b(v)-5 b(alues,)28
-b(this)g(b)r(eing)h(one)e(more)h(than)g(the)h(n)n(um)n(b)r(er)f(of)g
-(minor)g(tic)n(k)g(marks)f(to)h(b)r(e)g(dra)n(wn.)38
-b(By)28 b(default,)h(a)227 3641 y(v)-5 b(alue)28 b(is)f(c)n(hosen)g
-(that)h(dep)r(ends)g(on)f(the)h(gap)f(b)r(et)n(w)n(een)g(ma)5
-b(jor)27 b(axis)g(v)-5 b(alues)27 b(and)g(the)h(nature)f(of)h(the)g
-(axis.)0 3799 y Fc(T)m(yp)s(e:)227 3898 y Fk(In)n(teger.)0
-4056 y Fc(Class)j(Applicabilit)m(y:)259 4201 y(Plot)427
-4301 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-4471 y Fc(Notes:)340 4762 y Fj(\017)45 b Fk(If)36 b(no)f(axis)g(is)g
-(sp)r(eci\014ed,)j(\(e.g.)60 b Ft(")p Fk(MinTic)n(k)p
-Ft(")35 b Fk(instead)g(of)g Ft(")p Fk(MinTic)n(k\(2\))p
-Ft(")p Fk(\),)i(then)f(a)f Ft(")p Fk(set)p Ft(")g Fk(or)f
-Ft(")p Fk(clear)p Ft(")427 4861 y Fk(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)427
-4961 y(will)k(use)g(just)g(the)g(MinTic)n(k\(1\))f(v)-5
-b(alue.)p 0 5169 V 0 5307 a FA(MinTic)l(kLen\(axis\))1361
-5300 y Fd(Length)38 b(of)g(minor)f(tic)m(k)1469 5415
-y(marks)h(for)g(a)g(Plot)2734 5307 y FA(MinTic)l(kLen\(axis\))0
-5593 y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 5693 y(AST)p Ft(_)p Fk(GRID)k(routine\))f(b)n(y)f
-(determining)h(the)h(length)f(of)g(the)g(minor)f(tic)n(k)h(marks)f(dra)
-n(wn)g(on)h(the)g(axes)f(of)h(a)p eop end
-%%Page: 431 441
-TeXDict begin 431 440 bop 3643 52 a FG(431)227 351 y
-Fk(Plot.)42 b(It)30 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)29 b(for)g(eac)n(h)g(ph)n(ysical)f(axis)h(of)g(the)h(Plot)f(so)g
-(that,)h(for)f(instance,)h(the)g(setting)227 451 y Ft(")p
-Fk(MinTic)n(kLen\(2\)=0)p Ft(")c Fk(sp)r(eci\014es)h(the)h(length)g(of)
-g(the)g(minor)f(tic)n(k)g(marks)g(dra)n(wn)f(on)h(the)h(second)f(axis.)
-227 581 y(The)35 b(MinTic)n(kLen)f(v)-5 b(alue)34 b(should)g(b)r(e)h
-(giv)n(en)f(as)f(a)h(fraction)g(of)g(the)h(minim)n(um)g(dimension)f(of)
-h(the)g(plotting)227 681 y(area.)56 b(Negativ)n(e)34
-b(v)-5 b(alues)34 b(cause)g(minor)g(tic)n(k)g(marks)f(to)i(b)r(e)g
-(placed)f(on)g(the)h(outside)f(of)h(the)g(corresp)r(onding)227
-780 y(grid)c(line)h(or)f(axis)g(\(but)i(sub)5 b(ject)32
-b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)g(the)g(underlying)f
-(graphics)f(system\),)j(while)227 880 y(p)r(ositiv)n(e)27
-b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)h(placed)f(on)h(the)g
-(inside.)227 1010 y(The)g(default)g(v)-5 b(alue)27 b(is)h(+0.007.)0
-1171 y Fc(T)m(yp)s(e:)227 1270 y Fk(Floating)f(p)r(oin)n(t.)0
-1431 y Fc(Class)k(Applicabilit)m(y:)259 1579 y(Plot)427
-1678 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1851 y Fc(Notes:)340 2145 y Fj(\017)45 b Fk(The)27 b(n)n(um)n(b)r(er)f
-(of)g(minor)g(tic)n(k)h(marks)e(dra)n(wn)h(is)g(determined)h(b)n(y)f
-(the)h(Plot's)e(MinTic)n(k\(axis\))h(attribute.)340 2284
-y Fj(\017)45 b Fk(If)38 b(no)e(axis)h(is)f(sp)r(eci\014ed,)k(\(e.g.)65
-b Ft(")p Fk(MinTic)n(kLen)p Ft(")36 b Fk(instead)h(of)g
-Ft(")p Fk(MinTic)n(kLen\(2\))p Ft(")p Fk(\),)h(then)g(a)e
-Ft(")p Fk(set)p Ft(")g Fk(or)427 2383 y Ft(")p Fk(clear)p
-Ft(")28 b Fk(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p Fk(test)p Ft(")427
-2483 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g(MinTic)n(kLen\(1\))g
-(v)-5 b(alue.)p 0 2693 3780 12 v 0 2824 a FA(NatLat)823
-2825 y Fd(Nativ)m(e)37 b(latitude)g(of)h(the)h(reference)f(p)s(oin)m(t)
-f(of)i(a)1325 2938 y(FITS-W)m(CS)g(pro)7 b(jection)3358
-2824 y FA(NatLat)0 3138 y Fc(Description:)44 b Fk(This)23
-b(attribute)g(giv)n(es)e(the)i(latitude)g(of)g(the)g(reference)f(p)r
-(oin)n(t)h(of)f(the)h(FITS-W)n(CS)g(pro)5 b(jection)22
-b(imple-)227 3238 y(men)n(ted)30 b(b)n(y)g(a)f(WcsMap.)43
-b(The)29 b(v)-5 b(alue)30 b(is)f(in)h(radians)f(in)g(the)h
-Ft(")p Fk(nativ)n(e)f(spherical)p Ft(")f Fk(co)r(ordinate)h(system.)43
-b(This)227 3338 y(v)-5 b(alue)29 b(is)f(\014xed)g(for)g(most)g(pro)5
-b(jections,)28 b(for)g(instance)g(it)h(is)f(PI/2)f(\(90)h(degrees\))f
-(for)h(all)g(zenithal)h(pro)5 b(jections.)227 3437 y(F)-7
-b(or)28 b(some)g(pro)5 b(jections)28 b(\(e.g.)39 b(the)29
-b(conics\))f(the)h(v)-5 b(alue)29 b(is)f(not)h(\014xed,)g(but)g(is)f
-(sp)r(eci\014ed)h(b)n(y)g(parameter)e(one)h(on)227 3537
-y(the)g(latitude)g(axis.)227 3667 y(FITS-W)n(CS)g(pap)r(er)f(I)r(I)g
-(in)n(tro)r(duces)g(the)h(concept)f(of)g(a)g Ft(")p Fk(\014ducial)g(p)r
-(oin)n(t)p Ft(")g Fk(whic)n(h)g(is)g(logical)f(distinct)i(from)f(the)
-227 3767 y(pro)5 b(jection)29 b(reference)g(p)r(oin)n(t.)43
-b(It)30 b(is)f(easy)g(to)h(confuse)f(the)h(use)f(of)h(these)g(t)n(w)n
-(o)f(p)r(oin)n(ts.)43 b(The)29 b(\014ducial)h(p)r(oin)n(t)g(is)227
-3866 y(the)22 b(p)r(oin)n(t)g(whic)n(h)g(has)f(celestial)g(co)r
-(ordinates)f(giv)n(en)h(b)n(y)g(the)h(CR)-9 b(V)g(AL)22
-b(FITS)g(k)n(eyw)n(ords.)33 b(The)21 b(nativ)n(e)h(spherical)227
-3966 y(co)r(ordinates)k(for)h(this)g(p)r(oin)n(t)h(default)f(to)g(the)h
-(v)-5 b(alues)27 b(of)g(the)g(NatLat)g(and)g(NatLon,)g(but)h(these)f
-(defaults)h(mey)227 4066 y(b)r(e)34 b(o)n(v)n(er-ridden)c(b)n(y)j(v)-5
-b(alues)32 b(stored)g(in)h(the)h(PVi)p Ft(_)p Fk(j)e(k)n(eyw)n(ords.)51
-b(Put)33 b(another)e(w)n(a)n(y)-7 b(,)34 b(the)f(CR)-9
-b(V)g(AL)33 b(k)n(eyw)n(ords)227 4165 y(will)j(b)n(y)e(default)i(giv)n
-(e)e(the)h(celestial)g(co)r(ordinates)f(of)h(the)g(pro)5
-b(jection)34 b(reference)g(p)r(oin)n(t,)j(but)f(ma)n(y)e(refer)h(to)227
-4265 y(some)23 b(other)g(p)r(oin)n(t)g(if)h(alternativ)n(e)e(nativ)n(e)
-h(longitude)g(and)g(latitude)h(v)-5 b(alues)23 b(are)f(pro)n(vided)g
-(through)h(the)h(PVi)p Ft(_)p Fk(j)227 4364 y(k)n(eyw)n(ords.)227
-4495 y(The)k(NatLat)f(attribute)h(is)g(read-only)-7 b(.)0
-4655 y Fc(T)m(yp)s(e:)227 4755 y Fk(Floating)27 b(p)r(oin)n(t,)h
-(read-only)-7 b(.)0 4916 y Fc(Class)31 b(Applicabilit)m(y:)259
-5063 y(WcsMap)427 5163 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h
-(attribute.)0 5336 y Fc(Notes:)340 5630 y Fj(\017)45
-b Fk(A)28 b(default)g(v)-5 b(alue)28 b(of)f(AST)p Ft(__)p
-Fk(BAD)h(is)f(used)h(if)g(no)f(latitude)h(v)-5 b(alue)28
-b(is)f(a)n(v)-5 b(ailable.)p eop end
-%%Page: 432 442
-TeXDict begin 432 441 bop 0 52 a FG(432)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a FA(NatLon)784 483 y Fd(Nativ)m(e)37
-b(longitude)g(of)h(the)h(reference)f(p)s(oin)m(t)f(of)i(a)1325
-596 y(FITS-W)m(CS)g(pro)7 b(jection)3334 482 y FA(NatLon)0
-827 y Fc(Description:)44 b Fk(This)39 b(attribute)g(giv)n(es)f(the)h
-(longitude)f(of)h(the)g(reference)f(p)r(oin)n(t)h(of)g(the)g(FITS-W)n
-(CS)g(pro)5 b(jection)227 927 y(implemen)n(ted)31 b(b)n(y)f(a)f
-(WcsMap.)44 b(The)30 b(v)-5 b(alue)30 b(is)g(in)h(radians)d(in)j(the)f
-Ft(")p Fk(nativ)n(e)f(spherical)p Ft(")g Fk(co)r(ordinate)g(system,)227
-1026 y(and)f(will)g(usually)f(b)r(e)h(zero.)35 b(See)28
-b(the)g(description)f(of)h(attribute)f(NatLat)h(for)f(further)g
-(information.)227 1172 y(The)h(NatLon)f(attribute)h(is)f(read-only)-7
-b(.)0 1363 y Fc(T)m(yp)s(e:)227 1463 y Fk(Floating)27
-b(p)r(oin)n(t,)h(read-only)-7 b(.)0 1654 y Fc(Class)31
-b(Applicabilit)m(y:)259 1832 y(WcsMap)427 1932 y Fk(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 2173 V 0 2304 a FA(Naxes)1308
-2305 y Fd(Num)m(b)s(er)38 b(of)g(F)-10 b(rame)39 b(axes)3424
-2304 y FA(Naxes)0 2517 y Fc(Description:)44 b Fk(This)33
-b(is)f(a)g(read-only)f(attribute)i(giving)f(the)h(n)n(um)n(b)r(er)f(of)
-h(axes)e(in)i(a)f(F)-7 b(rame)32 b(\(i.e.)52 b(the)33
-b(n)n(um)n(b)r(er)g(of)227 2616 y(dimensions)24 b(of)g(the)g(co)r
-(ordinate)f(space)g(whic)n(h)h(the)g(F)-7 b(rame)24 b(describ)r(es\).)
-35 b(This)24 b(v)-5 b(alue)24 b(is)g(determined)g(when)g(the)227
-2716 y(F)-7 b(rame)27 b(is)h(created.)0 2907 y Fc(T)m(yp)s(e:)227
-3007 y Fk(In)n(teger,)f(read-only)-7 b(.)0 3198 y Fc(Class)31
-b(Applicabilit)m(y:)259 3376 y(F)-8 b(rame)427 3476 y
-Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3630 y Fc(F)-8 b(rameSet)427 3730 y Fk(The)29 b(Naxes)g(attribute)g(of)
-g(a)g(F)-7 b(rameSet)28 b(is)h(the)h(same)e(as)h(that)g(of)g(its)g
-(curren)n(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427
-3829 y(the)f(Curren)n(t)f(attribute\).)259 3983 y Fc(CmpF)-8
-b(rame)427 4083 y Fk(The)40 b(Naxes)e(attribute)i(of)f(a)g(CmpF)-7
-b(rame)39 b(is)g(equal)g(to)h(the)f(sum)h(of)f(the)h(Naxes)f(v)-5
-b(alues)39 b(of)g(its)g(t)n(w)n(o)427 4182 y(comp)r(onen)n(t)28
-b(F)-7 b(rames.)p 0 4423 V 0 4555 a FA(Ncard)388 b Fd(Num)m(b)s(er)38
-b(of)g(FITS)h(header)g(cards)f(in)g(a)h(FitsChan)387
-b FA(Ncard)0 4762 y Fc(Description:)44 b Fk(This)33 b(attribute)g(giv)n
-(es)e(the)i(total)f(n)n(um)n(b)r(er)h(of)f(FITS)h(header)f(cards)f
-(stored)h(in)h(a)f(FitsChan.)52 b(It)33 b(is)227 4862
-y(up)r(dated)28 b(as)f(cards)g(are)f(added)i(or)f(deleted.)0
-5053 y Fc(T)m(yp)s(e:)227 5153 y Fk(In)n(teger,)g(read-only)-7
-b(.)0 5344 y Fc(Class)31 b(Applicabilit)m(y:)259 5523
-y(FitsChan)427 5622 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 433 443
-TeXDict begin 433 442 bop 3643 52 a FG(433)p 0 351 3780
-12 v 0 482 a FA(NegLon)1009 483 y Fd(Displa)m(y)37 b(negativ)m(e)g
-(longitude)g(v)-7 b(alues?)3323 482 y FA(NegLon)0 708
-y Fc(Description:)44 b Fk(This)29 b(attribute)g(is)f(a)h(b)r(o)r(olean)
-f(v)-5 b(alue)28 b(whic)n(h)h(con)n(trols)e(ho)n(w)h(longitude)h(v)-5
-b(alues)28 b(are)f(normalized)h(for)227 808 y(displa)n(y)f(b)n(y)g(AST)
-p Ft(_)p Fk(NORM.)227 950 y(If)h(the)f(NegLon)f(attribute)i(is)f(zero,)
-f(then)h(normalized)f(longitude)h(v)-5 b(alues)27 b(will)g(b)r(e)g(in)h
-(the)f(range)f(zero)g(to)h(2.pi.)227 1050 y(If)h(NegLon)f(is)h
-(non-zero,)e(then)i(normalized)e(longitude)i(v)-5 b(alues)27
-b(will)h(b)r(e)g(in)g(the)g(range)e(-pi)h(to)h(pi.)227
-1193 y(The)h(default)f(v)-5 b(alue)29 b(dep)r(ends)f(on)g(the)h(curren)
-n(t)f(v)-5 b(alue)28 b(of)g(the)h(SkyRefIs)f(attribute,)h(If)g
-(SkyRefIs)f(has)g(a)g(v)-5 b(alue)227 1292 y(of)28 b
-Ft(")p Fk(Origin)p Ft(")p Fk(,)e(then)i(the)g(default)g(for)f(NegLon)g
-(is)g(one,)g(otherwise)g(the)h(default)g(is)g(zero.)0
-1478 y Fc(T)m(yp)s(e:)227 1578 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-1764 y Fc(Class)k(Applicabilit)m(y:)259 1937 y(SkyF)-8
-b(rame)427 2036 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2272 V 0 2403 a FA(Negated)879 b Fd(Region)38
-b(negation)f(\015ag)877 b FA(Negated)0 2629 y Fc(Description:)44
-b Fk(This)30 b(attribute)f(con)n(trols)f(whether)i(a)f(Region)f
-(represen)n(ts)g(the)i Ft(")p Fk(inside)p Ft(")f Fk(or)g(the)g
-Ft(")p Fk(outside)p Ft(")g Fk(of)g(the)227 2728 y(area)d(whic)n(h)h(w)n
-(as)f(supplied)i(when)f(the)h(Region)f(w)n(as)f(created.)36
-b(If)27 b(the)h(attribute)g(v)-5 b(alue)27 b(is)g(zero)f(\(the)i
-(default\),)227 2828 y(the)k(Region)e(represen)n(ts)f(the)j(inside)f
-(of)g(the)g(original)e(area.)46 b(Ho)n(w)n(ev)n(er,)30
-b(if)h(it)g(is)g(non-zero,)f(it)i(represen)n(ts)d(the)227
-2928 y(outside)f(of)h(the)f(original)f(area.)38 b(The)28
-b(v)-5 b(alue)28 b(of)h(this)f(attribute)h(ma)n(y)e(b)r(e)i(toggled)e
-(using)h(the)h(AST)p Ft(_)p Fk(NEGA)-7 b(TE)227 3027
-y(routine.)227 3170 y(Note,)24 b(whether)e(the)h(b)r(oundary)f(is)h
-(considered)e(to)i(b)r(e)g(inside)f(the)h(Region)f(or)g(not)g(is)h(con)
-n(trolled)e(b)n(y)h(the)h(Closed)227 3270 y(attribute.)51
-b(Changing)32 b(the)g(v)-5 b(alue)33 b(of)f(the)h(Negated)e(attribute)i
-(do)r(es)f(not)g(c)n(hange)f(the)i(v)-5 b(alue)32 b(of)h(the)f(Closed)
-227 3369 y(attribute.)51 b(Th)n(us,)34 b(if)f(Region)e(is)h(closed,)h
-(then)g(the)g(b)r(oundary)e(of)i(the)f(Region)g(will)g(b)r(e)h(inside)g
-(the)f(Region,)227 3469 y(whatev)n(er)27 b(the)h(setting)f(of)h(the)g
-(Negated)f(attribute.)0 3655 y Fc(T)m(yp)s(e:)227 3754
-y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 3940 y Fc(Class)k(Applicabilit)m
-(y:)259 4113 y(Region)427 4212 y Fk(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4448 V 0 4580 a FA(Nframe)597 b Fd(Num)m(b)s(er)38
-b(of)g(F)-10 b(rames)39 b(in)f(a)h(F)-10 b(rameSet)595
-b FA(Nframe)0 4782 y Fc(Description:)44 b Fk(This)22
-b(attrbute)f(giv)n(es)g(the)h(n)n(um)n(b)r(er)f(of)g(F)-7
-b(rames)21 b(in)h(a)f(F)-7 b(rameSet.)35 b(This)21 b(v)-5
-b(alue)21 b(will)h(c)n(hange)f(as)f(F)-7 b(rames)227
-4881 y(are)27 b(added)g(or)g(remo)n(v)n(ed,)f(but)i(will)g(alw)n(a)n
-(ys)e(b)r(e)i(at)f(least)g(one.)0 5067 y Fc(T)m(yp)s(e:)227
-5167 y Fk(In)n(teger,)g(read-only)-7 b(.)0 5353 y Fc(Class)31
-b(Applicabilit)m(y:)259 5525 y(F)-8 b(rameSet)427 5625
-y Fk(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 434 444
-TeXDict begin 434 443 bop 0 52 a FG(434)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Nin)549 b Fd(Num)m(b)s(er)38 b(of)g(input)g(co)s
-(ordinates)f(for)h(a)h(Mapping)547 b FA(Nin)0 668 y Fc(Description:)44
-b Fk(This)33 b(attribute)f(giv)n(es)f(the)i(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)f(v)-5 b(alues)32 b(required)f(to)h(sp)r(ecify)g(an)g(input)h
-(p)r(oin)n(t)227 768 y(for)f(a)g(Mapping)g(\(i.e.)51
-b(the)32 b(n)n(um)n(b)r(er)g(of)h(dimensions)e(of)i(the)f(space)g(in)g
-(whic)n(h)g(the)h(Mapping's)f(input)h(p)r(oin)n(ts)227
-868 y(reside\).)0 1015 y Fc(T)m(yp)s(e:)227 1115 y Fk(In)n(teger,)27
-b(read-only)-7 b(.)0 1263 y Fc(Class)31 b(Applicabilit)m(y:)259
-1397 y(Mapping)427 1497 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1628 y Fc(CmpMap)427 1728 y Fk(If)k(a)e(CmpMap's)h
-(comp)r(onen)n(t)g(Mappings)g(are)f(joined)h(in)g(series,)g(then)h(its)
-f(Nin)h(attribute)f(is)g(equal)g(to)427 1827 y(the)f(Nin)g(attribute)f
-(of)g(the)h(\014rst)f(comp)r(onen)n(t)g(\(or)g(to)g(the)g(Nout)h
-(attribute)f(of)h(the)f(second)g(comp)r(onen)n(t)427
-1927 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 2042 y(If)e(a)f(CmpMap's)h(comp)r(onen)n(t)f(Mappings)
-g(are)f(joined)i(in)g(parallel,)e(then)i(its)g(Nin)g(attribute)g(is)f
-(giv)n(en)g(b)n(y)427 2142 y(the)32 b(sum)f(of)g(the)g(Nin)h
-(attributes)f(of)g(eac)n(h)f(comp)r(onen)n(t)h(\(or)f(to)h(the)h(sum)f
-(of)g(their)g(Nout)g(attributes)g(if)427 2242 y(the)d(CmpMap's)g(In)n
-(v)n(ert)e(attribute)i(is)g(non-zero\).)259 2373 y Fc(F)-8
-b(rame)427 2472 y Fk(The)23 b(Nin)g(attribute)f(for)g(a)g(F)-7
-b(rame)22 b(is)h(alw)n(a)n(ys)d(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)h(F)-7 b(rame)22 b(axes)f(\(Naxes)h(attribute\).)259
-2603 y Fc(F)-8 b(rameSet)427 2703 y Fk(The)27 b(Nin)g(attribute)g(of)f
-(a)h(F)-7 b(rameSet)26 b(is)g(equal)h(to)f(the)h(n)n(um)n(b)r(er)f(of)h
-(axes)f(\(Naxes)g(attribute\))h(of)f(its)h(base)427 2803
-y(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)g(F)-7
-b(rameSet's)22 b(Base)f(attribute\).)36 b(The)22 b(Nin)h(attribute)g(v)
--5 b(alue)22 b(ma)n(y)g(therefore)427 2902 y(c)n(hange)27
-b(if)h(a)f(new)h(base)f(F)-7 b(rame)27 b(is)g(selected.)p
-0 3098 V 0 3230 a FA(Nob)7 b(ject)727 b Fd(Num)m(b)s(er)38
-b(of)g(Ob)7 b(jects)38 b(in)h(class)724 b FA(Nob)7 b(ject)0
-3415 y Fc(Description:)44 b Fk(This)22 b(attribute)g(giv)n(es)f(the)i
-(total)e(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)21 b(curren)n(tly)g(in)i
-(existence)e(in)i(the)f(same)f(class)g(as)227 3515 y(the)29
-b(Ob)5 b(ject)29 b(whose)f(attribute)g(v)-5 b(alue)29
-b(is)f(requested.)40 b(This)28 b(coun)n(t)g(do)r(es)h(not)f(include)h
-(Ob)5 b(jects)28 b(whic)n(h)h(b)r(elong)227 3614 y(to)f(deriv)n(ed)f
-(\(more)g(sp)r(ecialised\))g(classes.)227 3738 y(This)i(attribute)h(is)
-f(mainly)g(in)n(tended)h(for)f(debugging.)40 b(It)30
-b(can)f(b)r(e)h(used)f(to)g(detect)h(whether)f(Ob)5 b(jects)29
-b(whic)n(h)227 3838 y(should)f(ha)n(v)n(e)e(b)r(een)i(deleted)g(ha)n(v)
-n(e,)f(in)g(fact,)h(b)r(een)g(deleted.)0 3985 y Fc(T)m(yp)s(e:)227
-4085 y Fk(In)n(teger,)f(read-only)-7 b(.)0 4233 y Fc(Class)31
-b(Applicabilit)m(y:)259 4367 y(Ob)5 b(ject)427 4467 y
-Fk(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4663 V 0 4801 a FA(Norm\(axis\))851 4795 y Fd(Sp)s(eci\014es)39
-b(the)f(plane)g(up)s(on)h(whic)m(h)f(a)h(Plot3D)1284
-4909 y(dra)m(ws)f(text)g(and)g(mark)m(ers)3109 4801 y
-FA(Norm\(axis\))0 5071 y Fc(Description:)44 b Fk(This)30
-b(attribute)h(con)n(trols)d(the)j(app)r(earance)d(of)i(text)h(and)e
-(mark)n(ers)f(dra)n(wn)i(b)n(y)f(a)h(Plot3D.)f(It)i(sp)r(ec-)227
-5171 y(i\014es)k(the)g(orien)n(tation)f(of)g(the)i(plane)e(up)r(on)h
-(whic)n(h)g(text)g(and)g(mark)n(ers)e(will)i(b)r(e)g(dra)n(wn)f(b)n(y)g
-(all)h(subsequen)n(t)227 5270 y(in)n(v)n(o)r(cations)26
-b(of)i(the)g(AST)p Ft(_)p Fk(TEXT)f(and)h(AST)p Ft(_)p
-Fk(MARK)f(functions.)227 5394 y(When)e(setting)f(or)e(getting)i(the)g
-(Norm)g(attribute,)h(the)f(attribute)g(name)f(m)n(ust)h(b)r(e)h
-(quali\014ed)e(b)n(y)h(an)f(axis)h(index)227 5494 y(in)30
-b(the)f(range)f(1)g(to)h(3.)41 b(The)29 b(3)g(elemen)n(ts)g(of)g(the)g
-(Norm)g(attribute)g(are)f(together)g(in)n(terpreted)h(as)f(a)h(v)n
-(ector)e(in)227 5593 y(3D)g(graphics)e(co)r(ordinates)h(that)h(is)f
-(normal)g(to)h(the)g(plane)g(up)r(on)g(whic)n(h)f(text)i(and)e(marks)g
-(should)g(b)r(e)i(dra)n(wn.)227 5693 y(When)35 b(testing)f(or)f
-(clearing)f(the)j(attribute,)h(the)e(axis)f(index)h(is)g(optional.)55
-b(If)35 b(no)e(index)h(is)g(supplied,)i(then)p eop end
-%%Page: 435 445
-TeXDict begin 435 444 bop 3643 52 a FG(435)227 351 y
-Fk(clearing)22 b(the)h(Norm)f(attribute)h(will)f(clear)g(all)g(three)h
-(elemen)n(ts,)g(and)g(testing)f(the)h(Norm)f(attribute)h(will)g(return)
-227 451 y(a)k(non-zero)f(v)-5 b(alue)28 b(if)g(an)n(y)f(of)g(the)h
-(three)g(elemen)n(ts)f(are)g(set.)227 574 y(The)f(default)f(v)-5
-b(alue)25 b(is)g(1.0)g(for)g(eac)n(h)f(of)h(the)h(3)f(elemen)n(ts.)35
-b(The)26 b(length)f(of)g(the)h(v)n(ector)e(is)h(insigni\014can)n(t,)g
-(but)h(an)227 674 y(error)g(will)i(b)r(e)g(rep)r(orted)f(when)g
-(attempting)h(to)g(dra)n(w)e(text)i(or)f(mark)n(ers)e(if)k(the)f(v)n
-(ector)e(has)h(zero)f(length.)0 820 y Fc(T)m(yp)s(e:)227
-920 y Fk(Floating)h(p)r(oin)n(t.)0 1067 y Fc(Class)k(Applicabilit)m(y:)
-259 1200 y(Plot)427 1300 y Fk(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 1494 3780 12 v 0 1632 a FA(NormUnit\(axis\))1097
-1626 y Fd(Normalised)36 b(Axis)i(ph)m(ysical)g(units)2841
-1632 y FA(NormUnit\(axis\))0 1822 y Fc(Description:)44
-b Fk(The)36 b(v)-5 b(alue)36 b(of)f(this)h(read-only)e(attribute)i(is)f
-(deriv)n(ed)g(from)h(the)g(curren)n(t)e(v)-5 b(alue)36
-b(of)g(the)g(Unit)g(at-)227 1922 y(tribute.)45 b(It)30
-b(will)g(represen)n(t)f(an)h(equiv)-5 b(alen)n(t)30 b(system)f(of)h
-(units)h(to)f(the)g(Unit)h(attribute,)g(but)g(will)f(p)r(oten)n(tially)
-227 2021 y(b)r(e)k(simpli\014ed.)55 b(F)-7 b(or)32 b(instance,)j(if)f
-(Unit)g(is)f(set)h(to)f Ft(")p Fk(s)p Fj(\003)p Fk(\(m/s\))p
-Ft(")p Fk(,)g(the)h(NormUnit)g(v)-5 b(alue)33 b(will)h(b)r(e)f
-Ft(")p Fk(m)p Ft(")p Fk(.)54 b(If)34 b(no)227 2121 y(simpli\014cation)d
-(can)g(b)r(e)h(p)r(erformed,)f(the)h(v)-5 b(alue)31 b(of)g(the)h
-(NormUnit)f(attribute)h(will)f(equal)g(that)g(of)g(the)h(Unit)227
-2221 y(attribute.)0 2367 y Fc(T)m(yp)s(e:)227 2467 y
-Fk(String,)c(read-only)-7 b(.)0 2614 y Fc(Class)31 b(Applicabilit)m(y:)
-259 2747 y(F)-8 b(rame)427 2847 y Fk(All)28 b(F)-7 b(rames)27
-b(ha)n(v)n(e)g(this)g(attribute.)0 3006 y Fc(Notes:)340
-3286 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 3386 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)p 0 3579 V 0 3710 a FA(Nout)730 3711 y
-Fd(Num)m(b)s(er)38 b(of)h(output)e(co)s(ordinates)g(for)h(a)g(Mapping)
-3480 3710 y FA(Nout)0 3895 y Fc(Description:)44 b Fk(This)30
-b(attribute)g(giv)n(es)f(the)h(n)n(um)n(b)r(er)f(of)h(co)r(ordinate)e
-(v)-5 b(alues)30 b(generated)e(b)n(y)i(a)f(Mapping)h(to)f(sp)r(ecify)
-227 3994 y(eac)n(h)36 b(output)h(p)r(oin)n(t)g(\(i.e.)64
-b(the)36 b(n)n(um)n(b)r(er)h(of)f(dimensions)g(of)h(the)f(space)g(in)h
-(whic)n(h)f(the)h(Mapping's)f(output)227 4094 y(p)r(oin)n(ts)28
-b(reside\).)0 4241 y Fc(T)m(yp)s(e:)227 4340 y Fk(In)n(teger,)f
-(read-only)-7 b(.)0 4487 y Fc(Class)31 b(Applicabilit)m(y:)259
-4621 y(Mapping)427 4720 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4850 y Fc(CmpMap)427 4950 y Fk(If)g(a)g(CmpMap's)f
-(comp)r(onen)n(t)h(Mappings)f(are)g(joined)h(in)g(series,)f(then)h(its)
-g(Nout)g(attribute)g(is)f(equal)h(to)427 5050 y(the)i(Nout)f(attribute)
-h(of)f(the)h(second)e(comp)r(onen)n(t)h(\(or)g(to)g(the)h(Nin)g
-(attribute)f(of)g(the)h(\014rst)f(comp)r(onen)n(t)427
-5149 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 5264 y(If)j(a)e(CmpMap's)h(comp)r(onen)n(t)g(Mappings)
-f(are)g(joined)h(in)g(parallel,)g(then)g(its)g(Nout)g(attribute)h(is)e
-(giv)n(en)427 5364 y(b)n(y)g(the)g(sum)g(of)f(the)i(Nout)f(attributes)f
-(of)h(eac)n(h)f(comp)r(onen)n(t)g(\(or)g(to)h(the)g(sum)g(of)g(their)f
-(Nin)i(attributes)427 5463 y(if)e(the)g(CmpMap's)g(In)n(v)n(ert)f
-(attribute)g(is)h(non-zero\).)259 5593 y Fc(F)-8 b(rame)427
-5693 y Fk(The)20 b(Nout)f(attribute)h(for)e(a)h(F)-7
-b(rame)19 b(is)g(alw)n(a)n(ys)e(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)g(F)-7 b(rame)19 b(axes)f(\(Naxes)h(attribute\).)p
-eop end
-%%Page: 436 446
-TeXDict begin 436 445 bop 0 52 a FG(436)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(F)-8 b(rameSet)427 451 y Fk(The)25 b(Nout)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)25 b(is)f(equal)g(to)h(the)g(n)n(um)n(b)r(er)g(of)f(F)
--7 b(rameSet)25 b(axes)f(\(Naxes)g(attribute\))427 551
-y(whic)n(h,)k(in)f(turn,)h(is)f(equal)g(to)g(the)g(Naxes)g(attribute)h
-(of)f(the)g(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)26
-b(\(as)h(sp)r(eci\014ed)427 650 y(b)n(y)j(the)h(Curren)n(t)e
-(attribute\).)45 b(The)30 b(Nout)h(attribute)f(v)-5 b(alue)30
-b(ma)n(y)g(therefore)f(c)n(hange)g(if)h(a)g(new)g(curren)n(t)427
-750 y(F)-7 b(rame)27 b(is)h(selected.)p 0 940 3780 12
-v 0 1078 a FA(NumLab\(axis\))1062 1071 y Fd(Dra)m(w)38
-b(n)m(umerical)f(axis)h(lab)s(els)g(for)g(a)1754 1171
-y(Plot?)2935 1078 y FA(NumLab\(axis\))0 1332 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1431 y(AST)p Ft(_)p Fk(GRID)k(routine\))e(b)n(y)h(determining)f
-(whether)h(lab)r(els)g(should)f(b)r(e)h(dra)n(wn)f(to)h(represen)n(t)e
-(the)i(n)n(umerical)227 1531 y(v)-5 b(alues)28 b(along)f(eac)n(h)g
-(axis)h(of)g(a)g(Plot.)38 b(It)29 b(tak)n(es)e(a)h(separate)e(v)-5
-b(alue)28 b(for)g(eac)n(h)f(ph)n(ysical)h(axis)f(of)h(a)g(Plot)g(so)f
-(that,)227 1631 y(for)j(instance,)g(the)h(setting)f Ft(")p
-Fk(NumLab\(2\)=1)p Ft(")f Fk(sp)r(eci\014es)h(that)g(n)n(umerical)f
-(lab)r(els)h(should)g(b)r(e)h(dra)n(wn)e(for)g(the)227
-1730 y(second)e(axis.)227 1852 y(If)j(the)f(NumLab)h(v)-5
-b(alue)29 b(of)g(a)f(Plot)h(axis)f(is)h(non-zero)f(\(the)i(default\),)g
-(then)g(n)n(umerical)e(lab)r(els)h(will)g(b)r(e)h(dra)n(wn)227
-1952 y(for)d(that)h(axis,)f(otherwise)g(they)h(will)f(b)r(e)h(omitted.)
-0 2097 y Fc(T)m(yp)s(e:)227 2196 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-2341 y Fc(Class)k(Applicabilit)m(y:)259 2473 y(Plot)427
-2572 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2730 y Fc(Notes:)340 3007 y Fj(\017)45 b Fk(The)34 b(dra)n(wing)f(of)h
-(asso)r(ciated)f(descriptiv)n(e)g(axis)g(lab)r(els)h(for)g(a)f(Plot)h
-(\(describing)f(the)i(quan)n(tit)n(y)f(b)r(eing)427 3107
-y(plotted)28 b(along)f(eac)n(h)f(axis\))i(is)f(con)n(trolled)f(b)n(y)i
-(the)g(T)-7 b(extLab\(axis\))27 b(attribute.)340 3235
-y Fj(\017)45 b Fk(If)35 b(no)f(axis)f(is)h(sp)r(eci\014ed,)i(\(e.g.)57
-b Ft(")p Fk(NumLab)p Ft(")34 b Fk(instead)g(of)g Ft(")p
-Fk(NumLab\(2\))p Ft(")p Fk(\),)h(then)g(a)f Ft(")p Fk(set)p
-Ft(")f Fk(or)g Ft(")p Fk(clear)p Ft(")427 3335 y Fk(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h Fk(op)r(eration)427
-3434 y(will)k(use)g(just)g(the)g(NumLab\(1\))g(v)-5 b(alue.)p
-0 3624 V 0 3763 a FA(NumLabGap\(axis\))1356 3756 y Fd(Spacing)38
-b(of)h(n)m(umerical)1479 3870 y(lab)s(els)f(for)g(a)g(Plot)2689
-3763 y FA(NumLabGap\(axis\))0 4031 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4131 y(AST)p Ft(_)p Fk(GRID)35 b(routine\))f(b)n(y)f(determining)h
-(where)g(n)n(umerical)f(axis)g(lab)r(els)h(are)f(placed)h(relativ)n(e)e
-(to)i(the)h(axes)227 4230 y(they)c(describ)r(e.)45 b(It)31
-b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)30 b(for)g(eac)n(h)g(ph)n
-(ysical)f(axis)h(of)g(a)g(Plot)g(so)g(that,)h(for)f(instance,)h(the)227
-4330 y(setting)d Ft(")p Fk(NumLabGap\(2\)=-0.01)p Ft(")e
-Fk(sp)r(eci\014es)i(where)g(the)g(n)n(umerical)g(lab)r(el)g(for)g(the)g
-(second)g(axis)f(should)h(b)r(e)227 4430 y(dra)n(wn.)227
-4552 y(F)-7 b(or)21 b(eac)n(h)f(axis,)i(the)f(NumLabGap)h(v)-5
-b(alue)21 b(giv)n(es)f(the)h(spacing)f(b)r(et)n(w)n(een)h(the)h(axis)e
-(line)i(\(or)e(edge)h(of)g(the)h(plotting)227 4652 y(area,)e(if)g
-(appropriate\))e(and)h(the)h(nearest)f(edge)g(of)g(the)h(corresp)r
-(onding)e(n)n(umerical)g(axis)h(lab)r(els.)34 b(P)n(ositiv)n(e)18
-b(v)-5 b(alues)227 4751 y(cause)28 b(the)h(descriptiv)n(e)f(lab)r(el)h
-(to)g(b)r(e)g(placed)f(on)h(the)g(opp)r(osite)g(side)f(of)h(the)g(line)
-g(to)g(the)g(default)g(tic)n(k)g(marks,)227 4851 y(while)f(negativ)n(e)
-f(v)-5 b(alues)27 b(cause)g(it)h(to)f(b)r(e)h(placed)f(on)h(the)g(same)
-f(side.)227 4973 y(The)33 b(NumLabGap)f(v)-5 b(alue)33
-b(should)f(b)r(e)h(giv)n(en)f(as)f(a)h(fraction)g(of)h(the)g(minim)n
-(um)g(dimension)f(of)h(the)g(plotting)227 5073 y(area,)26
-b(the)i(default)g(v)-5 b(alue)28 b(b)r(eing)g(+0.01.)0
-5217 y Fc(T)m(yp)s(e:)227 5317 y Fk(Floating)f(p)r(oin)n(t.)0
-5462 y Fc(Class)k(Applicabilit)m(y:)259 5593 y(Plot)427
-5693 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-eop end
-%%Page: 437 447
-TeXDict begin 437 446 bop 3643 52 a FG(437)0 351 y Fc(Notes:)340
-631 y Fj(\017)45 b Fk(If)34 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i
-(\(e.g.)54 b Ft(")p Fk(NumLabGap)p Ft(")32 b Fk(instead)i(of)f
-Ft(")p Fk(NumLabGap\(2\))p Ft(")p Fk(\),)h(then)g(a)f
-Ft(")p Fk(set)p Ft(")f Fk(or)427 731 y Ft(")p Fk(clear)p
-Ft(")c Fk(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p Fk(test)p Ft(")427
-831 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g(NumLabGap\(1\))g(v)-5
-b(alue.)p 0 1025 3780 12 v 0 1157 a FA(Ob)7 b(jSize)566
-b Fd(The)38 b(in-memory)f(size)i(of)f(the)h(Ob)7 b(ject)564
-b FA(Ob)7 b(jSize)0 1341 y Fc(Description:)44 b Fk(This)c(attribute)g
-(giv)n(es)f(the)h(total)g(n)n(um)n(b)r(er)f(of)h(b)n(ytes)g(of)f
-(memory)g(used)h(b)n(y)g(the)g(Ob)5 b(ject.)74 b(This)227
-1440 y(includes)28 b(an)n(y)f(Ob)5 b(jects)27 b(whic)n(h)h(are)e
-(encapsulated)h(within)h(the)g(supplied)g(Ob)5 b(ject.)0
-1587 y Fc(T)m(yp)s(e:)227 1687 y Fk(In)n(teger,)27 b(read-only)-7
-b(.)0 1834 y Fc(Class)31 b(Applicabilit)m(y:)259 1968
-y(Ob)5 b(ject)427 2068 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 2262 V 0 2394 a
-FA(ObsAlt)523 b Fd(The)39 b(geo)s(detic)e(altitude)g(of)h(the)h(observ)
-m(er)522 b FA(ObsAlt)0 2578 y Fc(Description:)44 b Fk(This)35
-b(attribute)g(sp)r(eci\014es)g(the)g(geo)r(detic)g(altitude)g(of)g(the)
-g(observ)n(er,)g(in)g(metres,)i(relativ)n(e)c(to)i(the)227
-2677 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36 b(The)26
-b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f(this)h
-(attribute,)h(but)f(sp)r(ecialised)227 2777 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 2876
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-3023 y Fc(T)m(yp)s(e:)227 3123 y Fk(String.)0 3270 y
-Fc(Class)j(Applicabilit)m(y:)259 3404 y(F)-8 b(rame)427
-3504 y Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3634 y Fc(Sp)s(ecF)-8 b(rame)427 3734 y Fk(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-3833 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 3933 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4033 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4163 y Fc(TimeF)-8 b(rame)427 4263 y Fk(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4362 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4557 V 0 4688
-a FA(ObsLat)516 b Fd(The)39 b(geo)s(detic)e(latitude)g(of)h(the)h
-(observ)m(er)514 b FA(ObsLat)0 4872 y Fc(Description:)44
-b Fk(This)34 b(attribute)f(sp)r(eci\014es)g(the)h(geo)r(detic)e
-(latitude)i(of)f(the)h(observ)n(er,)e(in)i(degrees,)f(relativ)n(e)f(to)
-h(the)227 4972 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36
-b(The)26 b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f
-(this)h(attribute,)h(but)f(sp)r(ecialised)227 5072 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 5171
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)227
-5295 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 5394 y(cess.)79 b(Some)41 b(example)h(input)g
-(formats)f(are:)64 b Ft(")p Fk(22:19:23.2)p Ft(")p Fk(,)42
-b Ft(")p Fk(22)e(19)h(23.2)p Ft(")p Fk(,)i Ft(")p Fk(22:19.387)p
-Ft(")p Fk(,)f Ft(")p Fk(22.32311)p Ft(")p Fk(,)227 5494
-y Ft(")p Fk(N22.32311)p Ft(")p Fk(,)e Ft(")p Fk(-45.6)p
-Ft(")p Fk(,)h Ft(")p Fk(S45.6)p Ft(")p Fk(.)72 b(As)40
-b(indicated,)k(the)c(sign)g(of)g(the)g(latitude)h(can)f(optionally)f(b)
-r(e)h(indi-)227 5593 y(cated)23 b(using)g(c)n(haracters)e
-Ft(")p Fk(N)p Ft(")i Fk(and)g Ft(")p Fk(S)p Ft(")f Fk(in)i(place)f(of)g
-(the)g(usual)g Ft(")p Fk(+)p Ft(")f Fk(and)h Ft(")p Fk(-)p
-Ft(")p Fk(.)35 b(When)23 b(con)n(v)n(erting)f(the)h(stored)227
-5693 y(v)-5 b(alue)28 b(to)f(a)g(string,)g(the)h(format)f
-Ft(")p Fk([s]dd:mm:ss.ss)p Ft(")g Fk(is)g(used,)h(when)g
-Ft(")p Fk([s])p Ft(")f Fk(is)g Ft(")p Fk(N)p Ft(")g Fk(or)g
-Ft(")p Fk(S)p Ft(")p Fk(.)p eop end
-%%Page: 438 448
-TeXDict begin 438 447 bop 0 52 a FG(438)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(String.)0 603 y Fc(Class)g(Applicabilit)m
-(y:)259 742 y(F)-8 b(rame)427 842 y Fk(All)28 b(F)-7
-b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259 976 y
-Fc(Sp)s(ecF)-8 b(rame)427 1076 y Fk(T)h(ogether)23 b(with)h(the)g
-(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g(attributes,)h(it)f
-(de\014nes)f(the)i(Doppler)e(shift)427 1175 y(in)n(tro)r(duced)35
-b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j(motion)f(around)g(the)i
-(earths)e(axis,)i(whic)n(h)f(is)f(needed)h(when)427 1275
-y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r(cen)n(tric)f
-(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)r(cit)n(y)f
-(error)g(whic)n(h)427 1375 y(can)d(b)r(e)h(caused)f(b)n(y)h(an)f
-(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36 b(The)28
-b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h(zero.)259
-1509 y Fc(TimeF)-8 b(rame)427 1608 y Fk(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-1708 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 1910 3780 12
-v 0 2042 a FA(ObsLon)452 b Fd(The)39 b(geo)s(detic)e(longitude)g(of)h
-(the)h(observ)m(er)451 b FA(ObsLon)0 2238 y Fc(Description:)44
-b Fk(This)22 b(attribute)g(sp)r(eci\014es)f(the)h(geo)r(detic)f(\(or)h
-(equiv)-5 b(alen)n(tly)e(,)22 b(geo)r(cen)n(tric\))f(longitude)g(of)h
-(the)g(observ)n(er,)227 2337 y(in)e(degrees,)f(measured)f(p)r(ositiv)n
-(e)h(east)n(w)n(ards.)32 b(See)19 b(also)e(attribute)j(ObsLat.)33
-b(The)19 b(basic)f(F)-7 b(rame)19 b(class)f(mak)n(es)g(no)227
-2437 y(use)26 b(of)g(this)h(attribute,)g(but)f(sp)r(ecialised)g(sub)r
-(classes)f(of)h(F)-7 b(rame)26 b(ma)n(y)f(use)i(it.)36
-b(F)-7 b(or)26 b(instance,)g(the)h(Sp)r(ecF)-7 b(rame,)227
-2537 y(SkyF)g(rame)27 b(and)h(TimeF)-7 b(rame)27 b(classes)f(use)h(it.)
-38 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(zero.)227
-2663 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 2762 y(cess.)45 b(Some)30 b(example)g(input)i
-(formats)d(are:)42 b Ft(")p Fk(155:19:23.2)p Ft(")p Fk(,)27
-b Ft(")p Fk(155)h(19)i(23.2)p Ft(")p Fk(,)f Ft(")p Fk(155:19.387)p
-Ft(")p Fk(,)e Ft(")p Fk(155.32311)p Ft(")p Fk(,)227 2862
-y Ft(")p Fk(E155.32311)p Ft(")p Fk(,)19 b Ft(")p Fk(-204.67689)p
-Ft(")p Fk(,)h Ft(")p Fk(W204.67689)p Ft(")p Fk(.)31 b(As)23
-b(indicated,)i(the)f(sign)e(of)i(the)f(longitude)h(can)e(optionally)227
-2961 y(b)r(e)30 b(indicated)g(using)f(c)n(haracters)f
-Ft(")p Fk(E)p Ft(")g Fk(and)h Ft(")p Fk(W)p Ft(")h Fk(in)f(place)h(of)f
-(the)h(usual)f Ft(")p Fk(+)p Ft(")g Fk(and)g Ft(")p Fk(-)p
-Ft(")p Fk(.)42 b(When)30 b(con)n(v)n(erting)227 3061
-y(the)g(stored)f(v)-5 b(alue)29 b(to)h(a)f(string,)h(the)f(format)h
-Ft(")p Fk([s]ddd:mm:ss.ss)p Ft(")e Fk(is)i(used,)g(when)f
-Ft(")p Fk([s])p Ft(")g Fk(is)h Ft(")p Fk(E)p Ft(")e Fk(or)h
-Ft(")p Fk(W)p Ft(")g Fk(and)227 3161 y(the)f(n)n(umerical)f(v)-5
-b(alue)27 b(is)h(c)n(hosen)f(to)g(b)r(e)h(less)f(than)h(180)e(degrees.)
-0 3313 y Fc(T)m(yp)s(e:)227 3413 y Fk(String.)0 3565
-y Fc(Class)31 b(Applicabilit)m(y:)259 3704 y(F)-8 b(rame)427
-3803 y Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3938 y Fc(Sp)s(ecF)-8 b(rame)427 4037 y Fk(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-4137 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 4237 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4336 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4470 y Fc(TimeF)-8 b(rame)427 4570 y Fk(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4670 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4872 V 0 5010
-a FA(PVMax\(i\))767 5003 y Fd(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)g
-(FITS-W)m(CS)h(pro)7 b(jection)1607 5103 y(parameters)3180
-5010 y FA(PVMax\(i\))0 5295 y Fc(Description:)44 b Fk(This)27
-b(attribute)g(sp)r(eci\014es)g(the)g(largest)e(legal)h(index)h(for)f(a)
-h(PV)f(pro)5 b(jection)26 b(parameter)g(attac)n(hed)g(to)227
-5394 y(a)j(sp)r(eci\014ed)h(axis)e(of)i(the)g(WcsMap)f(\(i.e.)42
-b(the)30 b(largest)e(legal)h(v)-5 b(alue)29 b(for)g Ft(")p
-Fk(m)p Ft(")g Fk(when)g(accessing)f(the)i Ft(")p Fk(PVi)p
-Ft(_)p Fk(m)p Ft(")227 5494 y Fk(attribute\).)59 b(The)35
-b(axis)e(index)i(is)g(sp)r(eci\014ed)g(b)n(y)f(i,)j(and)d(should)h(b)r
-(e)g(in)g(the)g(range)e(1)h(to)h(99.)57 b(The)35 b(v)-5
-b(alue)34 b(for)227 5593 y(eac)n(h)d(axis)g(is)h(determined)g(b)n(y)g
-(the)g(pro)5 b(jection)31 b(t)n(yp)r(e)h(sp)r(eci\014ed)g(when)g(the)g
-(WcsMap)g(is)f(\014rst)h(created)f(using)227 5693 y(AST)p
-Ft(_)p Fk(W)n(CSMAP)d(and)f(cannot)g(subsequen)n(tly)h(b)r(e)g(c)n
-(hanged.)p eop end
-%%Page: 439 449
-TeXDict begin 439 448 bop 3643 52 a FG(439)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(In)n(teger,)27 b(read-only)-7 b(.)0 608 y Fc(Class)31
-b(Applicabilit)m(y:)259 753 y(WcsMap)427 852 y Fk(All)d(WcsMaps)f(ha)n
-(v)n(e)g(this)h(attribute.)p 0 1060 3780 12 v 0 1191
-a FA(PVi)p Fe(_)p FA(m)1022 1190 y Fd(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3375 1191 y FA(PVi)p
-Fe(_)p FA(m)0 1387 y Fc(Description:)44 b Fk(This)32
-b(attribute)h(sp)r(eci\014es)f(the)g(pro)5 b(jection)32
-b(parameter)e(v)-5 b(alues)32 b(to)g(b)r(e)h(used)f(b)n(y)g(a)f(WcsMap)
-h(when)227 1486 y(implemen)n(ting)26 b(a)e(FITS-W)n(CS)i(sky)e(pro)5
-b(jection.)35 b(Eac)n(h)24 b(PV)h(attribute)g(name)g(should)g(include)h
-(t)n(w)n(o)e(in)n(tegers,)g(i)227 1586 y(and)k(m,)g(separated)e(b)n(y)i
-(an)f(underscore.)35 b(The)28 b(axis)f(index)h(is)f(sp)r(eci\014ed)h(b)
-n(y)g(i,)g(and)f(should)h(b)r(e)g(in)g(the)g(range)e(1)227
-1686 y(to)i(99.)36 b(The)27 b(parameter)f(n)n(um)n(b)r(er)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(m,)h(and)f(should)h(b)r(e)f(in)h(the)g(range)e(0)h
-(to)g(99.)36 b(F)-7 b(or)27 b(example,)227 1785 y Ft(")p
-Fk(PV2)p Ft(_)p Fk(1=45.0)p Ft(")d Fk(w)n(ould)j(sp)r(ecify)h(a)f(v)-5
-b(alue)27 b(for)g(pro)5 b(jection)27 b(parameter)f(1)h(of)h(axis)f(2)g
-(in)h(a)f(WcsMap.)227 1914 y(These)20 b(pro)5 b(jection)19
-b(parameters)f(corresp)r(ond)h(exactly)g(to)h(the)h(v)-5
-b(alues)19 b(stored)g(using)h(the)h(FITS-W)n(CS)f(k)n(eyw)n(ords)227
-2014 y Ft(")p Fk(PV1)p Ft(_)p Fk(1)p Ft(")p Fk(,)k Ft(")p
-Fk(PV1)p Ft(_)p Fk(2)p Ft(")p Fk(,)g(etc.)37 b(This)26
-b(means)f(that)h(pro)5 b(jection)25 b(parameters)g(whic)n(h)g(corresp)r
-(ond)g(to)h(angles)e(m)n(ust)227 2113 y(b)r(e)31 b(giv)n(en)e(in)i
-(degrees)d(\(despite)j(the)g(fact)f(that)g(the)h(angular)e(co)r
-(ordinates)f(and)i(other)g(attributes)g(used)g(b)n(y)g(a)227
-2213 y(WcsMap)e(are)e(in)i(radians\).)227 2341 y(The)36
-b(set)g(of)g(pro)5 b(jection)34 b(parameters)g(used)i(b)n(y)g(a)f
-(WcsMap)g(dep)r(ends)i(on)e(the)h(t)n(yp)r(e)g(of)g(pro)5
-b(jection,)37 b(whic)n(h)227 2441 y(is)c(determined)g(b)n(y)g(its)g
-(WcsT)n(yp)r(e)g(parameter.)51 b(Most)33 b(pro)5 b(jections)31
-b(either)i(do)g(not)g(require)e(pro)5 b(jection)32 b(pa-)227
-2541 y(rameters,)37 b(or)d(use)i(parameters)e(1)h(and)h(2)f(asso)r
-(ciated)f(with)i(the)g(latitude)g(axis.)61 b(Y)-7 b(ou)35
-b(should)h(consult)f(the)227 2640 y(FITS-W)n(CS)28 b(pap)r(er)f(for)g
-(details.)227 2769 y(Some)g(pro)5 b(jection)26 b(parameters)f(ha)n(v)n
-(e)h(default)h(v)-5 b(alues)26 b(\(as)h(de\014ned)g(in)g(the)g(FITS-W)n
-(CS)g(pap)r(er\))g(whic)n(h)g(apply)227 2868 y(if)f(no)f(explicit)h(v)
--5 b(alue)25 b(is)h(giv)n(en.)35 b(Y)-7 b(ou)25 b(ma)n(y)g(omit)h
-(setting)f(a)g(v)-5 b(alue)25 b(for)g(these)g Ft(")p
-Fk(optional)p Ft(")f Fk(parameters)g(and)h(the)227 2968
-y(default)j(will)f(apply)-7 b(.)37 b(Some)27 b(pro)5
-b(jection)26 b(parameters,)g(ho)n(w)n(ev)n(er,)f(ha)n(v)n(e)h(no)h
-(default)g(and)g(a)g(v)-5 b(alue)27 b(m)n(ust)h(b)r(e)f(ex-)227
-3068 y(plicitly)22 b(supplied.)35 b(This)21 b(is)g(most)g(con)n(v)n
-(enien)n(tly)f(done)h(using)g(the)g(OPTIONS)f(argumen)n(t)h(of)g(AST)p
-Ft(_)p Fk(W)n(CSMAP)227 3167 y(\(q.v.\))40 b(when)29
-b(a)f(WcsMap)g(is)g(\014rst)h(created.)38 b(An)29 b(error)e(will)h
-(result)h(when)f(a)g(WcsMap)h(is)f(used)g(to)h(transform)227
-3267 y(co)r(ordinates)c(if)h(an)n(y)f(of)h(its)g(required)f(pro)5
-b(jection)25 b(parameters)g(has)g(not)h(b)r(een)g(set)g(and)g(lac)n(ks)
-f(a)g(default)i(v)-5 b(alue.)227 3395 y(A)36 b Ft(")p
-Fk(get)p Ft(")e Fk(op)r(eration)h(for)g(a)g(parameter)f(whic)n(h)h(has)
-g(not)g(b)r(een)h(assigned)e(a)h(v)-5 b(alue)36 b(will)f(return)g(the)h
-(default)227 3495 y(v)-5 b(alue)32 b(de\014ned)g(in)g(the)h(FITS-W)n
-(CS)f(pap)r(er,)g(or)f(AST)p Ft(__)p Fk(BAD)h(if)g(the)h(pap)r(er)e
-(indicates)h(that)g(the)g(parameter)227 3595 y(has)f(no)f(default.)48
-b(A)31 b(default)g(v)-5 b(alue)31 b(of)g(zero)f(is)h(returned)f(for)h
-(parameters)e(whic)n(h)i(are)f(not)h(accessed)f(b)n(y)g(the)227
-3694 y(pro)5 b(jection.)227 3823 y(Note,)31 b(the)f(FITS-W)n(CS)g(pap)r
-(er)f(reserv)n(es)f(parameters)g(1)h(and)h(2)f(on)h(the)g(longitude)g
-(axis)f(to)g(hold)h(the)g(nativ)n(e)227 3922 y(longitude)j(and)h
-(latitude)g(of)f(the)h(\014ducial)f(p)r(oin)n(t)h(of)f(the)h(pro)5
-b(jection,)34 b(in)g(degrees.)53 b(The)33 b(default)h(v)-5
-b(alues)33 b(for)227 4022 y(these)e(parameters)f(are)g(determined)h(b)n
-(y)g(the)h(pro)5 b(jection)30 b(t)n(yp)r(e.)47 b(The)32
-b(AST-sp)r(eci\014c)f(TPN)g(pro)5 b(jection)30 b(do)r(es)227
-4122 y(not)25 b(use)g(this)g(con)n(v)n(en)n(tion)e(-)h(all)h(pro)5
-b(jection)24 b(parameters)f(for)h(b)r(oth)h(axes)f(are)g(used)g(to)h
-(represen)n(t)e(p)r(olynomical)227 4221 y(correction)29
-b(terms,)h(and)g(the)g(nativ)n(e)g(longitude)f(and)h(latitude)h(at)e
-(the)i(\014ducial)f(p)r(oin)n(t)g(ma)n(y)f(not)h(b)r(e)h(c)n(hanged)227
-4321 y(from)d(the)g(default)g(v)-5 b(alues)27 b(of)g(zero)g(and)g(90)g
-(degrees.)0 4478 y Fc(T)m(yp)s(e:)227 4578 y Fk(Floating)g(p)r(oin)n
-(t.)0 4735 y Fc(Class)k(Applicabilit)m(y:)259 4880 y(WcsMap)427
-4980 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-5149 y Fc(Notes:)340 5440 y Fj(\017)45 b Fk(If)33 b(the)g(pro)5
-b(jection)31 b(parameter)g(v)-5 b(alues)31 b(giv)n(en)h(for)g(a)f
-(WcsMap)h(do)g(not)h(satisfy)e(all)h(the)h(required)e(con-)427
-5540 y(strain)n(ts)d(\(as)g(de\014ned)h(in)f(the)h(FITS-W)n(CS)f(pap)r
-(er\),)h(then)g(an)f(error)e(will)j(result)f(when)h(the)g(WcsMap)f(is)
-427 5639 y(used)g(to)f(transform)g(co)r(ordinates.)p
-eop end
-%%Page: 440 450
-TeXDict begin 440 449 bop 0 52 a FG(440)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(PcdCen\(axis\))1342 483 y Fd(Cen)m(tre)37
-b(co)s(ordinates)g(of)1170 583 y(pincushion/barrel)f(distortion)2989
-490 y FA(PcdCen\(axis\))0 828 y Fc(Description:)44 b
-Fk(This)39 b(attribute)g(sp)r(eci\014es)f(the)h(cen)n(tre)f(of)h(the)g
-(pincushion/barrel)e(distortion)h(implemen)n(ted)h(b)n(y)227
-928 y(a)i(PcdMap.)76 b(It)41 b(tak)n(es)f(a)h(separate)f(v)-5
-b(alue)40 b(for)h(eac)n(h)f(axis)g(of)h(the)g(PcdMap)g(so)f(that,)45
-b(for)40 b(instance,)k(the)227 1028 y(settings)35 b Ft(")p
-Fk(PcdCen\(1\)=345.0,PcdCen\(2\)=-104.4)o Ft(")29 b Fk(sp)r(ecify)34
-b(that)h(the)g(pincushion)g(distortion)f(is)g(cen)n(tred)227
-1127 y(at)26 b(p)r(ositions)f(of)h(345.0)d(and)j(-104.4)d(on)j(axes)e
-(1)i(and)f(2)g(resp)r(ectiv)n(ely)-7 b(.)36 b(This)25
-b(attribute)h(is)g(set)f(when)h(a)f(PcdMap)227 1227 y(is)i(created,)f
-(but)h(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)37 b(If)27
-b(the)g(attribute)g(is)f(cleared,)g(the)h(default)g(v)-5
-b(alue)26 b(for)g(b)r(oth)h(axes)f(is)227 1326 y(zero.)0
-1521 y Fc(T)m(yp)s(e:)227 1621 y Fk(Floating)h(p)r(oin)n(t.)0
-1816 y Fc(Class)k(Applicabilit)m(y:)259 1998 y(PcdMap)427
-2098 y Fk(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-2305 y Fc(Notes:)340 2634 y Fj(\017)45 b Fk(If)39 b(no)f(axis)g(is)g
-(sp)r(eci\014ed,)j(\(e.g.)70 b Ft(")p Fk(PcdCen)p Ft(")37
-b Fk(instead)h(of)g Ft(")p Fk(PcdCen\(2\))p Ft(")p Fk(\),)j(then)d(a)g
-Ft(")p Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427
-2733 y Fk(op)r(eration)29 b(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(b)r(oth)g(axes,)g(while)g(a)f Ft(")p
-Fk(get)p Ft(")g Fk(or)f Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)e(will)
-427 2833 y(use)g(just)g(the)g(PcdCen\(1\))f(v)-5 b(alue.)p
-0 3078 V 0 3208 a FA(P)l(erm)l(ute)1375 3209 y Fd(P)m(erm)m(ute)37
-b(axis)h(order?)3278 3208 y FA(P)l(erm)l(ute)0 3425 y
-Fc(Description:)44 b Fk(This)26 b(attribute)f(is)g(a)g(b)r(o)r(olean)f
-(v)-5 b(alue)25 b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7
-b(rame)24 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-3525 y(AST)p Ft(_)p Fk(FINDFRAME\))h(as)e(a)g(template)h(to)g(matc)n(h)
-f(another)g(\(target\))g(F)-7 b(rame.)36 b(It)25 b(sp)r(eci\014es)h
-(whether)f(the)h(axis)227 3624 y(order)h(of)g(the)h(target)f(F)-7
-b(rame)27 b(ma)n(y)g(b)r(e)h(p)r(erm)n(uted)g(in)f(order)g(to)g(obtain)
-g(a)h(matc)n(h.)227 3772 y(If)e(the)f(template's)g(P)n(erm)n(ute)f(v)-5
-b(alue)24 b(is)h(zero,)g(it)g(will)g(matc)n(h)g(a)f(target)g(only)h(if)
-g(it)g(can)g(do)f(so)h(without)g(c)n(hanging)227 3871
-y(the)j(order)e(of)i(its)g(axes.)36 b(Otherwise,)27 b(it)h(will)f
-(attempt)i(to)e(p)r(erm)n(ute)h(the)g(target's)e(axes)h(as)g(necessary)
--7 b(.)227 4019 y(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1,)f(so)g
-(that)h(axis)f(p)r(erm)n(utation)g(will)h(b)r(e)g(attempted.)0
-4214 y Fc(T)m(yp)s(e:)227 4313 y Fk(String.)0 4509 y
-Fc(Class)j(Applicabilit)m(y:)259 4691 y(F)-8 b(rame)427
-4790 y Fk(All)34 b(F)-7 b(rames)33 b(ha)n(v)n(e)g(this)h(attribute.)55
-b(Ho)n(w)n(ev)n(er,)34 b(the)g(F)-7 b(rame)33 b(class)g(e\013ectiv)n
-(ely)g(ignores)f(this)i(attribute)427 4890 y(and)k(b)r(eha)n(v)n(es)f
-(as)h(if)h(it)f(has)g(the)g(v)-5 b(alue)38 b(1.)69 b(This)38
-b(is)g(b)r(ecause)g(the)g(axes)f(of)h(a)g(basic)g(F)-7
-b(rame)37 b(are)h(not)427 4989 y(distinguishable)28 b(and)f(will)h(alw)
-n(a)n(ys)d(matc)n(h)j(an)n(y)f(other)g(F)-7 b(rame)27
-b(whatev)n(er)f(their)i(order.)259 5145 y Fc(SkyF)-8
-b(rame)427 5245 y Fk(Unlik)n(e)28 b(a)f(basic)g(F)-7
-b(rame,)27 b(the)h(SkyF)-7 b(rame)27 b(class)g(mak)n(es)f(use)i(of)f
-(this)h(attribute.)259 5400 y Fc(F)-8 b(rameSet)427 5500
-y Fk(The)31 b(P)n(erm)n(ute)f(attribute)h(of)g(a)f(F)-7
-b(rameSet)31 b(is)f(the)h(same)g(as)f(that)h(of)g(its)g(curren)n(t)f(F)
--7 b(rame)30 b(\(as)g(sp)r(eci\014ed)427 5600 y(b)n(y)e(the)g(Curren)n
-(t)e(attribute\).)p eop end
-%%Page: 441 451
-TeXDict begin 441 450 bop 3643 52 a FG(441)p 0 351 3780
-12 v 0 483 a FA(P)l(olarLong)172 b Fd(The)38 b(longitude)f(v)-7
-b(alue)39 b(to)f(assign)g(to)g(either)f(p)s(ole)170 b
-FA(P)l(olarLong)0 679 y Fc(Description:)44 b Fk(This)38
-b(attribute)f(holds)g(the)g(longitude)g(v)-5 b(alue,)40
-b(in)d(radians,)h(to)f(b)r(e)h(returned)f(when)g(a)g(Cartesian)227
-778 y(p)r(osition)27 b(corresp)r(onding)e(to)i(either)f(the)i(north)e
-(or)g(south)h(p)r(ole)g(is)g(transformed)e(in)n(to)i(spherical)f(co)r
-(ordinates.)227 878 y(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero.)0 1035 y Fc(T)m(yp)s(e:)227 1134 y Fk(Double)g(precision.)
-0 1291 y Fc(Class)j(Applicabilit)m(y:)259 1434 y(SphMap)427
-1534 y Fk(All)d(SphMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 1740 V 0 1871 a FA(Preserv)l(eAxes)1518 1872 y Fd(Preserv)m(e)37
-b(axes?)2986 1871 y FA(Preserv)l(eAxes)0 2049 y Fc(Description:)44
-b Fk(This)27 b(attribute)f(con)n(trols)e(ho)n(w)i(a)g(F)-7
-b(rame)25 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)f(AST)p
-Ft(_)p Fk(FINDFRAME\))h(as)227 2149 y(a)e(template)g(to)f(matc)n(h)g
-(another)g(\(target\))g(F)-7 b(rame.)36 b(It)25 b(determines)f(whic)n
-(h)h(axes)f(app)r(ear)f(\(and)i(in)g(what)g(order\))227
-2248 y(in)j(the)g Ft(")p Fk(result)p Ft(")f Fk(F)-7 b(rame)27
-b(pro)r(duced.)227 2376 y(If)k(Preserv)n(eAxes)d(is)i(zero)f(in)i(the)f
-(template)h(F)-7 b(rame,)30 b(then)h(the)g(result)f(F)-7
-b(rame)30 b(will)g(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)227
-2476 y(\(and)25 b(order\))f(of)h(axes)f(as)g(the)i(template.)36
-b(If)25 b(it)h(is)f(non-zero,)f(ho)n(w)n(ev)n(er,)f(the)i(axes)f(of)h
-(the)h(target)e(F)-7 b(rame)24 b(will)h(b)r(e)227 2576
-y(preserv)n(ed,)h(so)h(that)h(the)g(result)f(F)-7 b(rame)27
-b(will)h(ha)n(v)n(e)f(the)h(same)f(n)n(um)n(b)r(er)g(\(and)h(order\))e
-(of)i(axes)e(as)h(the)h(target.)227 2704 y(The)e(default)f(v)-5
-b(alue)26 b(is)f(zero,)g(so)f(that)i(target)e(axes)h(are)f(not)i
-(preserv)n(ed)d(and)i(the)h(result)f(F)-7 b(rame)25 b(resem)n(bles)f
-(the)227 2803 y(template.)0 2960 y Fc(T)m(yp)s(e:)227
-3059 y Fk(In)n(teger)j(\(b)r(o)r(olean\).)0 3216 y Fc(Class)k
-(Applicabilit)m(y:)259 3359 y(F)-8 b(rame)427 3459 y
-Fk(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3595 y Fc(F)-8 b(rameSet)427 3695 y Fk(The)20 b(Preserv)n(eAxes)d
-(attribute)j(of)g(a)f(F)-7 b(rameSet)20 b(is)g(the)g(same)f(as)g(that)h
-(of)g(its)g(curren)n(t)f(F)-7 b(rame)19 b(\(as)g(sp)r(eci\014ed)427
-3795 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)p 0
-4001 V 0 4139 a FA(Pro)7 b(jP\(m\))1022 4131 y Fd(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3208 4139 y FA(Pro)7
-b(jP\(m\))0 4342 y Fc(Description:)44 b Fk(This)33 b(attribute)g(pro)n
-(vides)f(aliases)f(for)h(the)i(PV)e(attributes,)j(whic)n(h)d(sp)r
-(eci\014es)h(the)g(pro)5 b(jection)32 b(pa-)227 4441
-y(rameter)23 b(v)-5 b(alues)23 b(to)h(b)r(e)g(used)g(b)n(y)g(a)f
-(WcsMap)h(when)g(implemen)n(ting)g(a)f(FITS-W)n(CS)h(sky)f(pro)5
-b(jection.)35 b(Pro)5 b(jP)22 b(is)227 4541 y(retained)j(for)f
-(compatibilit)n(y)g(with)i(previous)d(v)n(ersions)g(of)i(FITS-W)n(CS)g
-(and)g(AST.)g(New)g(applications)f(should)227 4641 y(use)k(the)g(PV)f
-(attibute)h(instead.)227 4769 y(A)n(ttributes)i(Pro)5
-b(jP\(0\))27 b(to)i(Pro)5 b(jP\(9\))28 b(corresp)r(ond)f(to)i
-(attributes)h(PV)p Fm(<)p Fk(axlat)p Fm(>)p Ft(_)p Fk(0)c(to)j(PV)p
-Fm(<)p Fk(axlat)p Fm(>)p Ft(_)p Fk(9,)e(where)227 4868
-y Fm(<)p Fk(axlat)p Fm(>)e Fk(is)h(replaced)g(b)n(y)g(the)h(index)f(of)
-g(the)h(latitude)g(axis)e(\(giv)n(en)h(b)n(y)g(attribute)h
-(WcsAxis\(2\)\).)37 b(See)26 b(PV)g(for)227 4968 y(further)i(details.)0
-5124 y Fc(T)m(yp)s(e:)227 5224 y Fk(Floating)f(p)r(oin)n(t.)0
-5380 y Fc(Class)k(Applicabilit)m(y:)259 5524 y(WcsMap)427
-5624 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 442 452
-TeXDict begin 442 451 bop 0 52 a FG(442)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Pro)7 b(jection)604 b Fd(Sky)39
-b(pro)7 b(jection)36 b(description)600 b FA(Pro)7 b(jection)0
-728 y Fc(Description:)44 b Fk(This)32 b(attribute)f(pro)n(vides)f(a)h
-(place)f(to)i(store)e(a)h(description)f(of)h(the)h(t)n(yp)r(e)g(of)f
-(sky)f(pro)5 b(jection)31 b(used)227 827 y(when)c(a)g(SkyF)-7
-b(rame)26 b(is)h(attac)n(hed)f(to)h(a)g(2-dimensional)f(ob)5
-b(ject,)26 b(suc)n(h)h(as)f(an)h(image)f(or)g(plotting)h(surface.)36
-b(F)-7 b(or)227 927 y(example,)28 b(t)n(ypical)f(v)-5
-b(alues)27 b(migh)n(t)g(b)r(e)h Ft(")p Fk(orthographic)p
-Ft(")p Fk(,)d Ft(")p Fk(Hammer-Aito\013)p Ft(")i Fk(or)f
-Ft(")p Fk(cylindrical)h(equal)g(area)p Ft(")p Fk(.)227
-1079 y(The)41 b(Pro)5 b(jection)40 b(v)-5 b(alue)40 b(is)h(purely)g
-(descriptiv)n(e)f(and)h(do)r(es)f(not)h(a\013ect)g(the)h(celestial)e
-(co)r(ordinate)g(system)227 1179 y(represen)n(ted)23
-b(b)n(y)g(the)h(SkyF)-7 b(rame)23 b(in)h(an)n(y)f(w)n(a)n(y)-7
-b(.)34 b(If)24 b(it)g(is)g(set)f(to)h(a)f(non-blank)g(string,)h(the)g
-(description)f(pro)n(vided)227 1279 y(ma)n(y)28 b(b)r(e)h(used)g(when)g
-(forming)f(the)h(default)g(v)-5 b(alue)28 b(for)g(the)i(SkyF)-7
-b(rame's)27 b(Title)i(attribute)g(\(so)f(that)h(t)n(ypically)227
-1378 y(it)f(will)g(app)r(ear)f(in)h(graphical)e(output,)i(for)f
-(instance\).)37 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(an)h(empt)n
-(y)f(string.)0 1584 y Fc(T)m(yp)s(e:)227 1683 y Fk(String.)0
-1889 y Fc(Class)k(Applicabilit)m(y:)259 2081 y(SkyF)-8
-b(rame)427 2181 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2436 V 0 2567 a FA(RefCoun)l(t)514 b
-Fd(Coun)m(t)38 b(of)g(activ)m(e)f(Ob)7 b(ject)38 b(p)s(oin)m(ters)511
-b FA(RefCoun)l(t)0 2812 y Fc(Description:)44 b Fk(This)20
-b(attribute)g(giv)n(es)e(the)i(n)n(um)n(b)r(er)g(of)f(activ)n(e)g(p)r
-(oin)n(ters)g(asso)r(ciated)f(with)i(an)g(Ob)5 b(ject.)34
-b(It)20 b(is)f(mo)r(di\014ed)227 2912 y(whenev)n(er)39
-b(p)r(oin)n(ters)g(are)g(created)g(or)g(ann)n(ulled)h(\(b)n(y)f(AST)p
-Ft(_)p Fk(CLONE,)g(AST)p Ft(_)p Fk(ANNUL)i(or)e(AST)p
-Ft(_)p Fk(END)h(for)227 3011 y(example\).)d(The)28 b(coun)n(t)f
-(includes)h(the)g(initial)g(p)r(oin)n(ter)f(issued)g(when)h(the)g(Ob)5
-b(ject)27 b(w)n(as)g(created.)227 3164 y(If)g(the)g(reference)f(coun)n
-(t)h(for)f(an)g(Ob)5 b(ject)27 b(falls)f(to)h(zero)e(as)h(the)h(result)
-g(of)f(ann)n(ulling)h(a)f(p)r(oin)n(ter)g(to)h(it,)g(then)g(the)227
-3263 y(Ob)5 b(ject)28 b(will)g(b)r(e)g(deleted.)0 3469
-y Fc(T)m(yp)s(e:)227 3568 y Fk(In)n(teger,)f(read-only)-7
-b(.)0 3774 y Fc(Class)31 b(Applicabilit)m(y:)259 3966
-y(Ob)5 b(ject)427 4066 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 4321 V 0 4453 a
-FA(RefDec)498 b Fd(The)39 b(declination)d(of)i(the)h(reference)f(p)s
-(oin)m(t)496 b FA(RefDec)0 4697 y Fc(Description:)44
-b Fk(This)30 b(attribute)f(sp)r(eci\014es)g(the)h(FK5)f(J2000.0)e
-(declination)i(of)g(a)g(reference)g(p)r(oin)n(t)g(on)g(the)h(sky)-7
-b(.)42 b(See)227 4797 y(the)28 b(description)f(of)h(attribute)g(RefRA)g
-(for)f(details.)37 b(The)27 b(default)h(RefDec)h(is)e
-Ft(")p Fk(0:0:0)p Ft(")p Fk(.)0 5002 y Fc(T)m(yp)s(e:)227
-5102 y Fk(String.)0 5307 y Fc(Class)k(Applicabilit)m(y:)259
-5499 y(Sp)s(ecF)-8 b(rame)427 5599 y Fk(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 443 453
-TeXDict begin 443 452 bop 3643 52 a FG(443)p 0 351 3780
-12 v 0 483 a FA(RefRA)420 b Fd(The)39 b(righ)m(t)e(ascension)h(of)g
-(the)h(reference)f(p)s(oin)m(t)418 b FA(RefRA)0 662 y
-Fc(Description:)44 b Fk(This)26 b(attribute,)g(together)e(with)i(the)f
-(RefDec)h(attribute,)g(sp)r(eci\014es)f(the)h(FK5)e(J2000.0)f(co)r
-(ordinates)227 761 y(of)k(a)g(reference)f(p)r(oin)n(t)h(on)g(the)g(sky)
--7 b(.)36 b(F)-7 b(or)27 b(1-dimensional)f(sp)r(ectra,)g(this)h(should)
-g(normally)f(b)r(e)h(the)h(p)r(osition)f(of)227 861 y(the)33
-b(source.)50 b(F)-7 b(or)32 b(sp)r(ectral)g(data)g(with)h(spatial)f(co)
-n(v)n(erage)d(\(sp)r(ectral)j(cub)r(es,)i(etc\),)g(this)f(should)f(b)r
-(e)h(close)f(to)227 960 y(cen)n(tre)20 b(of)g(the)h(spatial)e(co)n(v)n
-(erage.)32 b(It)20 b(is)g(used)g(to)h(de\014ne)f(the)h(correction)d
-(for)i(Doppler)g(shift)h(to)f(b)r(e)g(applied)g(when)227
-1060 y(using)25 b(the)g(AST)p Ft(_)p Fk(FINDFRAME)i(or)d(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)25 b(metho)r(d)g(to)g(con)n(v)n(ert)f(b)r(et)n
-(w)n(een)h(di\013eren)n(t)g(standards)227 1160 y(of)j(rest.)227
-1282 y(The)h(Sp)r(ecF)-7 b(rame)28 b(class)f(assumes)g(this)i(v)n(elo)r
-(cit)n(y)e(correction)f(is)j(spatially)e(in)n(v)-5 b(arian)n(t.)38
-b(If)28 b(a)g(single)g(Sp)r(ecF)-7 b(rame)227 1381 y(is)39
-b(used)f(\(for)h(instance,)i(as)d(a)g(comp)r(onen)n(t)g(of)h(a)f(CmpF)
--7 b(rame\))39 b(to)f(describ)r(e)h(sp)r(ectral)f(v)-5
-b(alues)38 b(at)g(di\013eren)n(t)227 1481 y(p)r(oin)n(ts)30
-b(on)g(the)g(sky)-7 b(,)30 b(then)g(it)h(is)e(assumes)g(that)h(the)h
-(doppler)e(shift)h(at)g(an)n(y)f(spatial)g(p)r(osition)h(is)g(the)g
-(same)f(as)227 1581 y(at)35 b(the)g(reference)f(p)r(osition.)59
-b(The)35 b(maxim)n(um)g(v)n(elo)r(cit)n(y)f(error)f(in)n(tro)r(duced)h
-(b)n(y)h(this)g(assumption)g(is)f(of)h(the)227 1680 y(order)d(of)i(V)p
-Fj(\003)p Fk(SIN\(F)n(O)n(V\),)f(where)g(F)n(O)n(V)g(is)g(the)h
-(angular)e(\014eld)i(of)f(view,)i(and)e(V)h(is)f(the)h(relativ)n(e)e(v)
-n(elo)r(cit)n(y)h(of)227 1780 y(the)c(t)n(w)n(o)e(standards)f(of)i
-(rest.)38 b(As)28 b(an)g(example,)f(when)h(correcting)f(from)g(the)h
-(observ)n(ers)e(rest)h(frame)h(\(i.e.)38 b(the)227 1879
-y(top)r(o)r(cen)n(tric)23 b(rest)g(frame\))h(to)f(the)h(kinematic)g(lo)
-r(cal)e(standard)h(of)h(rest)f(the)g(maxim)n(um)h(v)-5
-b(alue)23 b(of)h(V)g(is)f(ab)r(out)h(20)227 1979 y(km/s,)e(so)f(for)g
-(5)g(arc-min)n(ute)f(\014eld)i(of)f(view)g(the)h(maxim)n(um)f(v)n(elo)r
-(cit)n(y)g(error)e(in)n(tro)r(duced)i(b)n(y)g(the)h(correction)d(will)
-227 2079 y(b)r(e)28 b(ab)r(out)f(0.03)e(km/s.)36 b(As)27
-b(another)f(example,)h(the)h(maxim)n(um)e(error)g(when)h(correcting)e
-(from)i(the)g(observ)n(ers)227 2178 y(rest)g(frame)h(to)f(the)h(lo)r
-(cal)f(group)f(is)i(ab)r(out)g(5)f(km/s)g(o)n(v)n(er)e(a)j(1)f(degree)f
-(\014eld)i(of)g(view.)227 2300 y(The)g(RefRA)h(and)e(RefDec)i
-(attributes)e(are)g(stored)g(in)n(ternally)g(in)h(radians,)e(but)j(are)
-d(con)n(v)n(erted)h(to)g(and)h(from)227 2400 y(a)34 b(string)g(for)f
-(access.)56 b(The)34 b(format)f Ft(")p Fk(hh:mm:ss.ss)p
-Ft(")h Fk(is)g(used)g(for)f(RefRA,)i(and)f Ft(")p Fk(dd:mm:ss.s)p
-Ft(")g Fk(is)g(used)g(for)227 2500 y(RefDec.)65 b(The)37
-b(metho)r(ds)g(AST)p Ft(_)p Fk(SETREFPOS)e(and)i(AST)p
-Ft(_)p Fk(GETREFPOS)e(ma)n(y)h(b)r(e)h(used)g(to)g(access)e(the)227
-2599 y(v)-5 b(alue)28 b(of)f(these)h(attributes)f(directly)h(as)f
-(unformatted)g(v)-5 b(alues)28 b(in)f(radians.)227 2721
-y(The)h(default)g(for)f(RefRA)h(is)g Ft(")p Fk(0:0:0)p
-Ft(")p Fk(.)0 2865 y Fc(T)m(yp)s(e:)227 2965 y Fk(String.)0
-3109 y Fc(Class)j(Applicabilit)m(y:)259 3241 y(Sp)s(ecF)-8
-b(rame)427 3340 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3529 V 0 3661 a
-FA(RegionClass)282 b Fd(The)39 b(AST)f(class)h(name)f(of)g(the)h
-(Region)1197 3776 y(encapsulated)e(within)h(an)g(Stc)3065
-3661 y FA(RegionClass)0 3954 y Fc(Description:)44 b Fk(This)23
-b(is)f(a)g(read-only)e(attribute)j(giving)e(the)i(AST)f(class)g(name)g
-(of)g(the)h(Region)e(encapsulated)h(within)227 4054 y(an)28
-b(Stc)g(\(that)g(is,)f(the)h(class)f(of)g(the)h(Region)f(whic)n(h)h(w)n
-(as)e(supplied)i(when)g(the)g(Stc)g(w)n(as)f(created\).)0
-4198 y Fc(T)m(yp)s(e:)227 4298 y Fk(String,)h(read-only)-7
-b(.)0 4442 y Fc(Class)31 b(Applicabilit)m(y:)259 4574
-y(Stc)427 4673 y Fk(All)d(Stc)g(ob)5 b(jects)27 b(this)h(attribute.)p
-0 4862 V 0 4993 a FA(Rep)t(ort)1046 4994 y Fd(Rep)s(ort)38
-b(transformed)e(co)s(ordinates?)3365 4993 y FA(Rep)t(ort)0
-5173 y Fc(Description:)44 b Fk(This)36 b(attribute)g(con)n(trols)e
-(whether)i(co)r(ordinate)e(v)-5 b(alues)36 b(are)e(rep)r(orted)h
-(whenev)n(er)g(a)g(Mapping)h(is)227 5272 y(used)c(to)f(transform)g(a)g
-(set)g(of)h(p)r(oin)n(ts.)49 b(If)32 b(its)f(v)-5 b(alue)32
-b(is)f(zero)g(\(the)h(default\),)h(no)f(rep)r(ort)e(is)i(made.)49
-b(Ho)n(w)n(ev)n(er,)227 5372 y(if)28 b(it)f(is)f(non-zero,)g(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)h(are)f(rep)r(orted)g(\(b)r
-(oth)h(b)r(efore)g(and)g(after)f(transformation\))227
-5471 y(b)n(y)i(writing)f(them)h(to)f(standard)g(output.)227
-5593 y(This)j(attribute)f(is)g(pro)n(vided)g(as)f(an)h(aid)g(to)g
-(debugging,)g(and)h(to)f(a)n(v)n(oid)f(ha)n(ving)g(to)h(rep)r(ort)f(v)
--5 b(alues)29 b(explicitly)227 5693 y(in)f(simple)g(programs.)p
-eop end
-%%Page: 444 454
-TeXDict begin 444 453 bop 0 52 a FG(444)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(In)n(teger)c(\(b)r(o)r(olean\).)0
-601 y Fc(Class)k(Applicabilit)m(y:)259 737 y(Mapping)427
-837 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h(attribute.)259
-970 y Fc(CmpMap)427 1070 y Fk(When)20 b(applied)e(to)h(a)f(comp)r(ound)
-h(Mapping)f(\(CmpMap\),)k(only)c(the)h(Rep)r(ort)g(attribute)g(of)f
-(the)h(CmpMap,)427 1169 y(and)27 b(not)f(those)h(of)f(its)h(comp)r
-(onen)n(t)f(Mappings,)h(is)f(used.)37 b(Co)r(ordinate)25
-b(information)h(is)h(nev)n(er)e(rep)r(orted)427 1269
-y(for)i(the)h(comp)r(onen)n(t)g(Mappings)f(individually)-7
-b(,)27 b(only)h(for)f(the)h(complete)f(CmpMap.)259 1402
-y Fc(F)-8 b(rame)427 1502 y Fk(When)35 b(applied)f(to)g(an)n(y)g(F)-7
-b(rame,)35 b(the)g(formatting)e(capabilities)h(of)g(the)h(F)-7
-b(rame)33 b(\(as)h(pro)n(vided)f(b)n(y)h(the)427 1601
-y(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T)28 b(function\))g(will)g(b)r(e)g
-(used)g(to)f(format)g(the)h(rep)r(orted)f(co)r(ordinates.)259
-1734 y Fc(F)-8 b(rameSet)427 1834 y Fk(When)20 b(applied)g(to)f(an)n(y)
-g(F)-7 b(rameSet,)21 b(the)f(formatting)f(capabilities)g(of)g(the)h
-(base)f(and)g(curren)n(t)g(F)-7 b(rames)18 b(will)427
-1933 y(b)r(e)29 b(used)g(\(as)f(ab)r(o)n(v)n(e\))f(to)i(individually)f
-(format)g(the)h(input)h(and)e(output)h(co)r(ordinates,)e(as)h
-(appropriate.)427 2033 y(The)i(Rep)r(ort)g(attribute)g(of)g(a)g(F)-7
-b(rameSet)29 b(is)h(not)g(itself)g(a\013ected)g(b)n(y)g(selecting)g(a)f
-(new)h(base)f(or)g(curren)n(t)427 2133 y(F)-7 b(rame,)27
-b(but)i(the)f(resulting)f(formatting)g(capabilities)g(ma)n(y)g(b)r(e.)0
-2295 y Fc(Notes:)340 2578 y Fj(\017)45 b Fk(Unlik)n(e)37
-b(most)f(other)g(attributes,)i(the)f(v)-5 b(alue)37 b(of)f(the)h(Rep)r
-(ort)f(attribute)h(is)f(not)g(transferred)f(when)i(a)427
-2677 y(Mapping)f(is)f(copied.)61 b(Instead,)38 b(its)e(v)-5
-b(alue)35 b(is)h(unde\014ned)g(\(and)g(therefore)f(defaults)h(to)f
-(zero\))g(in)h(an)n(y)427 2777 y(cop)n(y)-7 b(.)38 b(Similarly)-7
-b(,)28 b(it)h(b)r(ecomes)f(unde\014ned)g(in)h(an)n(y)e(external)h
-(represen)n(tation)e(of)i(a)g(Mapping)g(pro)r(duced)427
-2877 y(b)n(y)g(the)g(AST)p Ft(_)p Fk(WRITE)f(routine.)p
-0 3076 3780 12 v 0 3208 a FA(Rep)t(ortLev)l(el)1144 3215
-y Fd(Determines)38 b(whic)m(h)g(read/write)1296 3336
-y(conditions)f(are)h(rep)s(orted)3057 3208 y FA(Rep)t(ortLev)l(el)0
-3525 y Fc(Description:)44 b Fk(This)36 b(attribute)f(determines)g(whic)
-n(h,)i(if)f(an)n(y)-7 b(,)37 b(of)e(the)h(conditions)f(that)g(o)r(ccur)
-g(whilst)g(reading)f(or)227 3625 y(writing)j(an)g(Ob)5
-b(ject)37 b(should)g(b)r(e)h(rep)r(orted.)65 b(These)36
-b(conditions)h(will)h(generate)e(either)h(a)f(fatal)h(error)f(or)g(a)
-227 3724 y(w)n(arning,)27 b(as)f(determined)i(b)n(y)g(attribute)f
-(Strict.)37 b(Rep)r(ortLev)n(el)27 b(can)g(tak)n(e)g(an)n(y)g(of)h(the)
-g(follo)n(wing)e(v)-5 b(alues:)227 3849 y(0)27 b(-)h(Do)f(not)h(rep)r
-(ort)f(an)n(y)g(conditions.)227 3974 y(1)i(-)g(Rep)r(ort)g(only)g
-(conditions)f(where)h(signi\014can)n(t)f(information)h(con)n(ten)n(t)g
-(has)f(b)r(een)i(c)n(hanged.)40 b(F)-7 b(or)29 b(instance,)227
-4073 y(an)g(unsupp)r(orted)h(time-scale)e(has)h(b)r(een)h(replaced)e(b)
-n(y)h(a)g(supp)r(orted)h(near-equiv)-5 b(alen)n(t)27
-b(time-scale.)42 b(Another)227 4173 y(example)32 b(is)g(if)h(a)f(basic)
-g(Channel)g(unexp)r(ected)h(encoun)n(ters)e(data)g(items)i(that)g(ma)n
-(y)e(ha)n(v)n(e)g(b)r(een)i(in)n(tro)r(duced)227 4272
-y(b)n(y)28 b(later)f(v)n(ersions)e(of)j(AST.)227 4397
-y(2)21 b(-)g(Rep)r(ort)h(the)g(ab)r(o)n(v)n(e,)f(and)g(in)h(addition)f
-(rep)r(ort)g(signi\014can)n(t)g(default)g(v)-5 b(alues.)35
-b(F)-7 b(or)21 b(instance,)h(if)g(no)f(time-scale)227
-4497 y(w)n(as)28 b(sp)r(eci\014ed)i(when)f(reading)f(an)h(Ob)5
-b(ject)29 b(from)g(an)g(external)f(data)h(source,)g(rep)r(ort)f(the)i
-(default)f(time-scale)227 4596 y(that)f(is)g(b)r(eing)f(used.)227
-4721 y(3)e(-)g(Rep)r(ort)h(the)f(ab)r(o)n(v)n(e,)g(and)g(in)h(addition)
-f(rep)r(ort)g(an)n(y)f(other)h(p)r(oten)n(tially)g(in)n(teresting)g
-(conditions)g(that)h(ha)n(v)n(e)227 4821 y(no)36 b(signi\014can)n(t)e
-(e\013ect)i(on)g(the)g(con)n(v)n(ersion.)58 b(F)-7 b(or)35
-b(instance,)j(rep)r(ort)c(if)j(a)e(time-scale)g(of)g
-Ft(")p Fk(TT)p Ft(")g Fk(\(terrestrial)227 4920 y(time\))28
-b(is)e(used)h(in)f(place)g(of)h Ft(")p Fk(ET)p Ft(")e
-Fk(\(ephemeris)i(time\).)37 b(This)26 b(c)n(hange)g(has)g(no)g
-(sign\014cian)n(t)g(e\013ect)h(b)r(ecause)f(ET)227 5020
-y(is)e(the)h(predecessor)d(of,)i(and)g(is)g(con)n(tin)n(uous)f(with,)i
-(TT.)f(Synon)n(yms)g(suc)n(h)f(as)h Ft(")p Fk(IA)-7 b(T)p
-Ft(")23 b Fk(and)h Ft(")p Fk(T)-7 b(AI)p Ft(")24 b Fk(are)f(another)227
-5120 y(example.)227 5244 y(The)34 b(default)h(v)-5 b(alue)34
-b(is)g(1.)56 b(Note,)35 b(there)f(are)f(man)n(y)h(other)f(conditions)h
-(that)g(can)g(o)r(ccur)f(whilst)i(reading)d(or)227 5344
-y(writing)23 b(an)f(Ob)5 b(ject)23 b(that)g(completely)g(prev)n(en)n(t)
-f(the)h(con)n(v)n(ersion)d(taking)i(place.)35 b(Suc)n(h)23
-b(conditions)f(will)i(alw)n(a)n(ys)227 5444 y(generate)j(errors,)e
-(irresp)r(ectiv)n(e)h(of)i(the)g(Rep)r(ortLev)n(el)f(and)g(Strict)h
-(attributes.)0 5593 y Fc(T)m(yp)s(e:)227 5693 y Fk(In)n(teger)f(\(b)r
-(o)r(olean\).)p eop end
-%%Page: 445 455
-TeXDict begin 445 454 bop 3643 52 a FG(445)0 351 y Fc(Class)31
-b(Applicabilit)m(y:)259 491 y(Channel)427 591 y Fk(All)d(Channels)g(ha)
-n(v)n(e)e(this)i(attribute.)259 725 y Fc(FitsChan)427
-825 y Fk(All)g(the)g(conditions)f(selected)h(b)n(y)f(the)h(FitsChan)g
-(W)-7 b(arnings)27 b(attribute)g(are)g(rep)r(orted)g(at)g(lev)n(el)g
-(1.)p 0 1027 3780 12 v 0 1158 a FA(RestF)-11 b(req)1410
-1159 y Fd(The)38 b(rest)h(frequency)3252 1158 y FA(RestF)-11
-b(req)0 1351 y Fc(Description:)44 b Fk(This)39 b(attribute)f(sp)r
-(eci\014es)h(the)f(frequency)g(corresp)r(onding)f(to)h(zero)f(v)n(elo)r
-(cit)n(y)-7 b(.)69 b(It)39 b(is)f(used)g(when)227 1451
-y(con)n(v)n(erting)29 b(b)r(et)n(w)n(een)g(b)r(et)n(w)n(een)h(v)n(elo)r
-(cit)n(y-based)f(co)r(ordinate)g(systems)g(and)h(and)g(other)f(co)r
-(ordinate)g(systems)227 1550 y(\(suc)n(h)f(as)f(frequency)-7
-b(,)27 b(w)n(a)n(v)n(elength,)f(energy)-7 b(,)27 b(etc\).)37
-b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1.0E5)d(GHz.)227
-1677 y(When)35 b(setting)g(a)f(new)g(v)-5 b(alue)35 b(for)e(this)i
-(attribute,)i(the)d(new)h(v)-5 b(alue)34 b(can)g(b)r(e)h(supplied)g
-(either)f(directly)g(as)g(a)227 1776 y(frequency)-7 b(,)34
-b(or)d(indirectly)i(as)f(a)g(w)n(a)n(v)n(elength)e(or)i(energy)-7
-b(,)33 b(in)g(whic)n(h)f(case)g(the)g(supplied)h(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)227 1876 y(to)i(a)f(frequency)g(b)r
-(efore)g(b)r(eing)h(stored.)54 b(The)34 b(nature)f(of)h(the)g(supplied)
-g(v)-5 b(alue)33 b(is)h(indicated)f(b)n(y)h(app)r(ending)227
-1975 y(text)e(to)f(the)h(end)f(of)g(the)h(n)n(umerical)e(v)-5
-b(alue)31 b(indicating)h(the)f(units)h(in)f(whic)n(h)h(the)f(v)-5
-b(alue)31 b(is)g(supplied.)49 b(If)31 b(the)227 2075
-y(units)h(are)e(not)h(sp)r(eci\014ed,)h(then)g(the)f(supplied)h(v)-5
-b(alue)31 b(is)f(assumed)h(to)g(b)r(e)g(a)g(frequency)g(in)g(units)g
-(of)g(GHz.)48 b(If)227 2175 y(the)35 b(supplied)f(unit)h(is)f(a)f(unit)
-i(of)f(frequency)-7 b(,)35 b(the)g(supplied)f(v)-5 b(alue)34
-b(is)g(assumed)f(to)h(b)r(e)h(a)e(frequency)h(in)g(the)227
-2274 y(giv)n(en)24 b(units.)36 b(If)24 b(the)h(supplied)f(unit)h(is)f
-(a)g(unit)h(of)f(length,)h(the)f(supplied)h(v)-5 b(alue)24
-b(is)g(assumed)g(to)g(b)r(e)g(a)g(\(v)-5 b(acuum\))227
-2374 y(w)n(a)n(v)n(elength.)35 b(If)26 b(the)h(supplied)f(unit)h(is)f
-(a)f(unit)i(of)f(energy)-7 b(,)25 b(the)h(supplied)h(v)-5
-b(alue)25 b(is)h(assumed)g(to)g(b)r(e)g(an)g(energy)-7
-b(.)227 2474 y(F)g(or)31 b(instance,)h(the)f(follo)n(wing)g(strings)f
-(all)h(result)g(in)g(a)g(rest)g(frequency)g(of)g(around)f(1.4E14)f(Hz)i
-(b)r(eing)h(used:)227 2573 y Ft(")p Fk(1.4E5)p Ft(")p
-Fk(,)23 b Ft(")p Fk(1.4E14)f(Hz)p Ft(")p Fk(,)j Ft(")p
-Fk(1.4E14)d(s)p Fj(\003\003)p Fk(-1)p Ft(")p Fk(,)h Ft(")p
-Fk(1.4E5)g(GHz)p Ft(")p Fk(,)i Ft(")p Fk(2.14E-6)d(m)p
-Ft(")p Fk(,)j Ft(")p Fk(21400)d(Angstrom)p Ft(")p Fk(,)i
-Ft(")p Fk(9.28E-20)227 2673 y(J)p Ft(")p Fk(,)j Ft(")p
-Fk(9.28E-13)d(erg)p Ft(")p Fk(,)j Ft(")p Fk(0.58)e(eV)p
-Ft(")p Fk(,)j(etc.)227 2799 y(When)e(getting)g(the)g(v)-5
-b(alue)25 b(of)g(this)h(attribute,)g(the)g(returned)f(v)-5
-b(alue)26 b(is)f(alw)n(a)n(ys)f(a)h(frequency)g(in)h(units)g(of)f(GHz.)
-0 2952 y Fc(T)m(yp)s(e:)227 3051 y Fk(Floating)i(p)r(oin)n(t.)0
-3204 y Fc(Class)k(Applicabilit)m(y:)259 3344 y(Sp)s(ecF)-8
-b(rame)427 3443 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3646 V 0 3777 a
-FA(Ro)t(otCorner)976 3778 y Fd(Sp)s(eci\014es)39 b(whic)m(h)f(edges)h
-(of)f(the)h(3D)g(b)s(o)m(x)1368 3892 y(should)f(b)s(e)h(annotated)3078
-3777 y FA(Ro)t(otCorner)0 4066 y Fc(Description:)44 b
-Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4165 y(AST)p Ft(_)p Fk(GRID)f(routine\))g(b)n(y)f(determining)g(whic)n
-(h)h(edges)f(of)g(the)h(cub)r(e)g(enclosing)e(the)i(3D)g(graphics)e
-(space)h(are)227 4265 y(used)g(for)f(displa)n(ying)g(n)n(umerical)g
-(and)h(descriptiv)n(e)f(axis)g(lab)r(els.)37 b(The)28
-b(attribute)g(v)-5 b(alue)28 b(iden)n(ti\014es)g(one)f(of)h(the)227
-4365 y(eigh)n(t)34 b(corners)e(of)h(the)h(cub)r(e)g(within)h(whic)n(h)e
-(graphics)f(are)h(b)r(eing)h(dra)n(wn)e(\(i.e.)56 b(the)34
-b(cub)r(e)g(sp)r(eci\014ed)g(b)n(y)f(the)227 4464 y(GRAPHBO)n(X)h
-(argumen)n(t)g(when)g(AST)p Ft(_)p Fk(PLOT3D)g(w)n(as)f(called)h(tp)h
-(create)e(the)i(Plot3D\).)f(Axis)h(lab)r(els)f(and)227
-4564 y(tic)n(k)28 b(marks)e(will)i(b)r(e)g(placed)f(on)h(the)g(three)f
-(cub)r(e)h(edges)f(that)h(meet)g(at)f(the)h(giv)n(en)f(corner.)227
-4690 y(The)32 b(attribute)h(v)-5 b(alue)32 b(should)g(consist)f(of)h
-(three)g(c)n(haracter,)f(eac)n(h)h(of)g(whic)n(h)g(m)n(ust)g(b)r(e)h
-(either)f Ft(")p Fk(U)p Ft(")f Fk(or)g Ft(")p Fk(L)p
-Ft(")p Fk(.)227 4790 y(The)h(\014rst)g(c)n(haracter)e(in)j(the)f
-(string)f(sp)r(eci\014es)h(the)h(p)r(osition)f(of)g(the)g(corner)f(on)h
-(the)g(\014rst)g(graphics)f(axis.)49 b(If)227 4889 y(the)29
-b(c)n(haracter)c(is)j Ft(")p Fk(U)p Ft(")g Fk(then)g(the)h(corner)d(is)
-i(at)g(the)g(upp)r(er)g(b)r(ound)g(on)g(the)g(\014rst)g(graphics)f
-(axis.)37 b(If)28 b(it)h(is)e Ft(")p Fk(L)p Ft(")p Fk(,)227
-4989 y(then)j(the)f(corner)f(is)h(at)g(the)h(lo)n(w)n(er)d(b)r(ound)j
-(on)f(the)g(\014rst)g(axis.)41 b(Lik)n(ewise,)29 b(the)g(second)g(and)g
-(third)g(c)n(haracters)227 5089 y(in)f(the)g(string)f(sp)r(ecify)h(the)
-g(lo)r(cation)f(of)g(the)h(corner)f(on)g(the)h(second)f(and)g(third)h
-(graphics)e(axes.)227 5215 y(F)-7 b(or)25 b(instance,)h(corner)d
-Ft(")p Fk(LLL)p Ft(")i Fk(is)g(the)h(corner)e(that)h(is)g(at)h(the)f
-(lo)n(w)n(er)f(b)r(ound)i(on)f(all)g(three)g(graphics)f(axes,)h(and)227
-5314 y(corner)h Ft(")p Fk(ULU)p Ft(")i Fk(is)f(at)h(the)g(upp)r(er)f(b)
-r(ound)h(on)g(axes)e(1)i(and)f(3)g(but)h(at)g(the)g(lo)n(w)n(er)e(b)r
-(ound)i(on)f(axis)g(2.)227 5441 y(The)h(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fk(LLL)p Ft(")p Fk(.)0 5593 y
-Fc(T)m(yp)s(e:)227 5693 y Fk(String.)p eop end
-%%Page: 446 456
-TeXDict begin 446 455 bop 0 52 a FG(446)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(Class)g(Applicabilit)m(y:)259 483 y(Plot3D)427 583
-y Fk(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 774 3780 12 v 0 905 a FA(Seed)651 b Fd(Random)38 b(n)m(um)m(b)s(er)g
-(seed)h(for)f(a)g(MathMap)650 b FA(Seed)0 1085 y Fc(Description:)44
-b Fk(This)37 b(attribute,)j(whic)n(h)d(ma)n(y)f(tak)n(e)h(an)n(y)f(in)n
-(teger)g(v)-5 b(alue,)40 b(determines)d(the)g(sequence)g(of)g(random)
-227 1185 y(n)n(um)n(b)r(ers)i(pro)r(duced)g(b)n(y)h(the)f(random)g(n)n
-(um)n(b)r(er)g(functions)h(in)g(MathMap)f(expressions.)71
-b(It)40 b(is)f(set)h(to)f(an)227 1285 y(unpredictable)28
-b(default)g(v)-5 b(alue)27 b(when)h(a)f(MathMap)g(is)g(created,)g(so)g
-(that)h(b)n(y)f(default)h(eac)n(h)f(MathMap)g(uses)g(a)227
-1384 y(di\013eren)n(t)h(set)g(of)f(random)g(n)n(um)n(b)r(ers.)227
-1507 y(If)42 b(required,)i(y)n(ou)d(ma)n(y)f(set)i(this)f(Seed)h
-(attribute)f(to)h(a)f(v)-5 b(alue)41 b(of)g(y)n(our)f(c)n(ho)r(osing)g
-(in)i(order)e(to)h(pro)r(duce)227 1606 y(rep)r(eatable)33
-b(b)r(eha)n(viour)g(from)g(the)h(random)f(n)n(um)n(b)r(er)h(functions.)
-56 b(Y)-7 b(ou)34 b(ma)n(y)f(also)f(enquire)i(the)g(Seed)g(v)-5
-b(alue)227 1706 y(\(e.g.)43 b(if)30 b(an)g(initially)g(unpredictable)f
-(v)-5 b(alue)30 b(has)f(b)r(een)h(used\))g(and)f(then)h(use)g(it)g(to)f
-(repro)r(duce)g(the)h(resulting)227 1806 y(sequence)d(of)h(random)f(n)n
-(um)n(b)r(ers,)g(either)g(from)g(the)h(same)f(MathMap)h(or)f(from)g
-(another)f(one.)227 1928 y(Clearing)h(the)h(Seed)f(attribute)h(giv)n
-(es)e(it)i(a)g(new)f(unpredictable)h(default)g(v)-5 b(alue.)0
-2073 y Fc(T)m(yp)s(e:)227 2173 y Fk(In)n(teger.)0 2318
-y Fc(Class)31 b(Applicabilit)m(y:)259 2450 y(MathMap)427
-2549 y Fk(All)d(MathMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2740 V 0 2872 a FA(SideBand)267 b Fd(Indicates)38 b(whic)m(h)g
-(sideband)g(a)g(dual)h(sideband)1378 2971 y(sp)s(ectrum)f(represen)m
-(ts)3221 2872 y FA(SideBand)0 3152 y Fc(Description:)44
-b Fk(This)d(attribute)g(indicates)g(whether)g(the)g(DSBSp)r(ecF)-7
-b(rame)42 b(curren)n(tly)d(represen)n(ts)h(its)h(lo)n(w)n(er)e(or)227
-3251 y(upp)r(er)27 b(sideband,)g(or)f(an)h(o\013set)g(from)f(the)h(lo)r
-(cal)g(oscillator)e(frequency)-7 b(.)36 b(When)28 b(querying)d(the)j
-(curren)n(t)e(v)-5 b(alue,)227 3351 y(the)25 b(returned)f(string)g(is)h
-(alw)n(a)n(ys)e(one)h(of)g Ft(")p Fk(usb)p Ft(")g Fk(\(for)g(upp)r(er)h
-(sideband\),)h Ft(")p Fk(lsb)p Ft(")d Fk(\(for)i(lo)n(w)n(er)e
-(sideband\),)i(or)f Ft(")p Fk(lo)p Ft(")227 3450 y Fk(\(for)i(o\013set)
-g(from)f(the)i(lo)r(cal)e(oscillator)f(frequency\).)36
-b(When)27 b(setting)f(a)f(new)h(v)-5 b(alue,)26 b(an)n(y)f(of)h(the)g
-(strings)f Ft(")p Fk(lsb)p Ft(")p Fk(,)227 3550 y Ft(")p
-Fk(usb)p Ft(")p Fk(,)j Ft(")p Fk(observ)n(ed)p Ft(")p
-Fk(,)f Ft(")p Fk(image)p Ft(")g Fk(or)h Ft(")p Fk(lo)p
-Ft(")f Fk(ma)n(y)h(b)r(e)h(supplied)g(\(case)f(insensitiv)n(e\).)40
-b(The)29 b Ft(")p Fk(observ)n(ed)p Ft(")d Fk(sideband)227
-3650 y(is)32 b(whic)n(h)g(ev)n(er)f(sideband)h(\(upp)r(er)g(or)f(lo)n
-(w)n(er\))g(con)n(tains)g(the)h(cen)n(tral)f(sp)r(ectral)h(p)r(osition)
-g(giv)n(en)f(b)n(y)g(attribute)227 3749 y(DSBCen)n(tre,)37
-b(and)d(the)h Ft(")p Fk(image)p Ft(")f Fk(sideband)g(is)h(the)g(other)f
-(sideband.)58 b(It)35 b(is)g(the)g(sign)g(of)f(the)h(IF)g(attribute)227
-3849 y(whic)n(h)c(determines)g(if)h(the)g(observ)n(ed)d(sideband)i(is)h
-(the)f(upp)r(er)h(or)e(lo)n(w)n(er)g(sideband.)47 b(The)31
-b(default)h(v)-5 b(alue)31 b(for)227 3949 y(SideBand)d(is)f(the)h
-(observ)n(ed)e(sideband.)0 4094 y Fc(T)m(yp)s(e:)227
-4193 y Fk(String.)0 4338 y Fc(Class)31 b(Applicabilit)m(y:)259
-4470 y(DSBSp)s(ecF)-8 b(rame)427 4570 y Fk(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 4761
-V 0 4892 a FA(SimpFI)386 b Fd(F)-10 b(orw)m(ard-in)m(v)m(erse)36
-b(MathMap)i(pairs)g(simplify?)384 b FA(SimpFI)0 5073
-y Fc(Description:)44 b Fk(This)29 b(attribute)g(should)f(b)r(e)h(set)f
-(to)h(a)f(non-zero)f(v)-5 b(alue)28 b(if)h(applying)f(a)h(MathMap's)f
-(forw)n(ard)f(trans-)227 5172 y(formation,)36 b(follo)n(w)n(ed)e
-(immediately)h(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)e
-(transformation)h(will)h(alw)n(a)n(ys)e(restore)g(the)227
-5272 y(original)f(set)h(of)g(co)r(ordinates.)52 b(It)34
-b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f(sequence)h
-(of)g(op)r(erations)f(b)n(y)227 5371 y(an)25 b(iden)n(tit)n(y)h
-(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n(tered)g(while)g
-(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-5471 y(using)j(AST)p Ft(_)p Fk(SIMPLIFY\).)227 5593 y(By)j(default,)i
-(the)f(SimpFI)g(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h
-(p)r(erform)f(this)h(simpli\014cation)f(unless)227 5693
-y(y)n(ou)c(ha)n(v)n(e)g(set)g(SimpFI)h(to)g(indicate)g(that)f(it)h(is)g
-(safe)f(to)h(do)f(so.)p eop end
-%%Page: 447 457
-TeXDict begin 447 456 bop 3643 52 a FG(447)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 587 y Fc(Class)k
-(Applicabilit)m(y:)259 711 y(MathMap)427 810 y Fk(All)d(MathMaps)g(ha)n
-(v)n(e)e(this)i(attribute.)0 959 y Fc(Notes:)340 1229
-y Fj(\017)45 b Fk(F)-7 b(or)40 b(simpli\014cation)g(to)g(o)r(ccur,)j
-(the)e(t)n(w)n(o)f(MathMaps)g(m)n(ust)g(b)r(e)h(in)f(series)g(and)g(b)r
-(e)h(iden)n(tical)f(\(with)427 1328 y(textually)28 b(iden)n(tical)f
-(transformation)f(functions\).)38 b(F)-7 b(unctional)27
-b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n(t.)340
-1448 y Fj(\017)45 b Fk(The)27 b(consen)n(t)f(of)g(b)r(oth)h(MathMaps)g
-(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n(e)f(place.)
-36 b(If)27 b(either)f(has)427 1548 y(a)h(SimpFI)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 1668 y Fj(\017)45 b Fk(The)35 b(SimpFI)g(attribute)g(con)n
-(trols)e(simpli\014cation)h(only)g(in)h(the)g(case)e(where)h(a)g
-(MathMap's)g(forw)n(ard)427 1767 y(transformation)d(is)h(follo)n(w)n
-(ed)g(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)f(transformation.)50
-b(It)32 b(do)r(es)h(not)f(apply)g(if)h(an)427 1867 y(in)n(v)n(erse)25
-b(transformation)g(is)h(follo)n(w)n(ed)g(b)n(y)g(a)g(forw)n(ard)f
-(transformation.)34 b(This)27 b(latter)f(case)g(is)g(con)n(trolled)427
-1967 y(b)n(y)i(the)g(SimpIF)g(attribute.)340 2087 y Fj(\017)45
-b Fk(The)19 b Ft(")p Fk(forw)n(ard)p Ft(")e Fk(and)i
-Ft(")p Fk(in)n(v)n(erse)p Ft(")d Fk(transformations)h(referred)h(to)h
-(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427 2186
-y(is)k(created)f(\(corresp)r(onding)g(to)g(the)i(FWD)g(and)f(INV)g
-(argumen)n(ts)f(of)h(its)g(constructor)e(function\).)37
-b(If)24 b(the)427 2286 y(MathMap)30 b(is)f(in)n(v)n(erted)g(\(i.e.)44
-b(its)30 b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)g(then)i(the)f
-(role)e(of)i(the)g(SimpFI)h(and)427 2385 y(SimpIF)e(attributes)e(will)h
-(b)r(e)g(in)n(terc)n(hanged.)p 0 2559 3780 12 v 0 2690
-a FA(SimpIF)396 b Fd(In)m(v)m(erse-forw)m(ard)36 b(MathMap)i(pairs)g
-(simplify?)395 b FA(SimpIF)0 2853 y Fc(Description:)44
-b Fk(This)31 b(attribute)g(should)f(b)r(e)h(set)g(to)g(a)f(non-zero)f
-(v)-5 b(alue)31 b(if)g(applying)f(a)g(MathMap's)g(in)n(v)n(erse)g
-(trans-)227 2953 y(formation,)j(follo)n(w)n(ed)e(immediately)i(b)n(y)f
-(the)g(matc)n(hing)g(forw)n(ard)f(transformation)g(will)h(alw)n(a)n(ys)
-e(restore)h(the)227 3053 y(original)h(set)h(of)g(co)r(ordinates.)52
-b(It)34 b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f
-(sequence)h(of)g(op)r(erations)f(b)n(y)227 3152 y(an)25
-b(iden)n(tit)n(y)h(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n
-(tered)g(while)g(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-3252 y(using)j(AST)p Ft(_)p Fk(SIMPLIFY\).)227 3370 y(By)j(default,)i
-(the)f(SimpIF)g(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h
-(p)r(erform)f(this)h(simpli\014cation)f(unless)227 3469
-y(y)n(ou)c(ha)n(v)n(e)g(set)g(SimpIF)h(to)g(indicate)g(that)f(it)h(is)g
-(safe)f(to)h(do)f(so.)0 3606 y Fc(T)m(yp)s(e:)227 3706
-y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 3842 y Fc(Class)k(Applicabilit)m
-(y:)259 3965 y(MathMap)427 4065 y Fk(All)d(MathMaps)g(ha)n(v)n(e)e
-(this)i(attribute.)0 4214 y Fc(Notes:)340 4483 y Fj(\017)45
-b Fk(F)-7 b(or)40 b(simpli\014cation)g(to)g(o)r(ccur,)j(the)e(t)n(w)n
-(o)f(MathMaps)g(m)n(ust)g(b)r(e)h(in)f(series)g(and)g(b)r(e)h(iden)n
-(tical)f(\(with)427 4583 y(textually)28 b(iden)n(tical)f
-(transformation)f(functions\).)38 b(F)-7 b(unctional)27
-b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n(t.)340
-4703 y Fj(\017)45 b Fk(The)27 b(consen)n(t)f(of)g(b)r(oth)h(MathMaps)g
-(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n(e)f(place.)
-36 b(If)27 b(either)f(has)427 4803 y(a)h(SimpIF)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 4922 y Fj(\017)45 b Fk(The)37 b(SimpIF)h(attribute)f(con)n
-(trols)e(simpli\014cation)i(only)g(in)g(the)g(case)f(where)h(a)f
-(MathMap's)h(in)n(v)n(erse)427 5022 y(transformation)32
-b(is)h(follo)n(w)n(ed)g(b)n(y)g(the)h(matc)n(hing)f(forw)n(ard)f
-(transformation.)52 b(It)34 b(do)r(es)f(not)h(apply)f(if)h(a)427
-5122 y(forw)n(ard)21 b(transformation)g(is)h(follo)n(w)n(ed)f(b)n(y)h
-(an)g(in)n(v)n(erse)f(transformation.)34 b(This)22 b(latter)g(case)g
-(is)g(con)n(trolled)427 5221 y(b)n(y)28 b(the)g(SimpFI)g(attribute.)340
-5341 y Fj(\017)45 b Fk(The)19 b Ft(")p Fk(forw)n(ard)p
-Ft(")e Fk(and)i Ft(")p Fk(in)n(v)n(erse)p Ft(")d Fk(transformations)h
-(referred)h(to)h(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427
-5441 y(is)k(created)f(\(corresp)r(onding)g(to)g(the)i(FWD)g(and)f(INV)g
-(argumen)n(ts)f(of)h(its)g(constructor)e(function\).)37
-b(If)24 b(the)427 5540 y(MathMap)30 b(is)f(in)n(v)n(erted)g(\(i.e.)44
-b(its)30 b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)g(then)i(the)f
-(role)e(of)i(the)g(SimpFI)h(and)427 5640 y(SimpIF)e(attributes)e(will)h
-(b)r(e)g(in)n(terc)n(hanged.)p eop end
-%%Page: 448 458
-TeXDict begin 448 457 bop 0 52 a FG(448)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a FA(Size\(elemen)l(t\))1043 483 y Fd(Character)36
-b(size)j(for)f(a)h(Plot)e(elemen)m(t)2985 490 y FA(Size\(elemen)l(t\))0
-689 y Fc(Description:)44 b Fk(This)25 b(attribute)f(determines)g(the)h
-(c)n(haracter)d(size)i(used)h(when)f(dra)n(wing)f(eac)n(h)g(elemen)n(t)
-i(of)f(graphical)227 788 y(output)d(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-888 y(the)35 b(setting)e Ft(")p Fk(Size\(title\)=2.0)p
-Ft(")g Fk(causes)g(the)h(Plot)g(title)g(to)g(b)r(e)g(dra)n(wn)f(using)g
-(t)n(wice)h(the)g(default)h(c)n(haracter)227 988 y(size.)227
-1114 y(The)e(range)d(of)j(c)n(haracter)d(sizes)h(a)n(v)-5
-b(ailable)31 b(and)h(the)h(app)r(earance)e(of)h(the)g(resulting)g(text)
-g(is)h(determined)f(b)n(y)227 1214 y(the)g(underlying)f(graphics)f
-(system.)48 b(The)32 b(default)g(b)r(eha)n(viour)e(is)h(for)g(all)g
-(graphical)f(elemen)n(ts)h(to)h(b)r(e)g(dra)n(wn)227
-1313 y(using)c(the)f(default)i(c)n(haracter)c(size)i(supplied)h(b)n(y)g
-(this)f(graphics)g(system.)0 1466 y Fc(T)m(yp)s(e:)227
-1566 y Fk(Floating)g(P)n(oin)n(t.)0 1719 y Fc(Class)k(Applicabilit)m
-(y:)259 1859 y(Plot)427 1959 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2124 y Fc(Notes:)340 2410 y Fj(\017)45
-b Fk(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 2545 y Fj(\017)45 b Fk(If)37 b(no)e(graphical)g(elemen)n(t)
-h(is)g(sp)r(eci\014ed,)i(\(e.g.)62 b Ft(")p Fk(Size)p
-Ft(")36 b Fk(instead)f(of)h Ft(")p Fk(Size\(title\))p
-Ft(")p Fk(\),)j(then)e(a)e Ft(")p Fk(set)p Ft(")g Fk(or)427
-2645 y Ft(")p Fk(clear)p Ft(")d Fk(op)r(eration)h(will)h(a\013ect)g
-(the)g(attribute)g(v)-5 b(alue)34 b(of)f(all)h(graphical)e(elemen)n
-(ts,)j(while)f(a)g Ft(")p Fk(get)p Ft(")e Fk(or)427 2744
-y Ft(")p Fk(test)p Ft(")27 b Fk(op)r(eration)g(will)h(use)f(just)h(the)
-g(Size\(T)-7 b(extLab\))28 b(v)-5 b(alue.)p 0 2947 V
-0 3079 a FA(SizeGuess)448 b Fd(The)39 b(exp)s(ected)g(size)g(of)f(the)g
-(KeyMap)448 b FA(SizeGuess)0 3271 y Fc(Description:)44
-b Fk(This)37 b(is)f(attribute)g(giv)n(es)g(an)g(estimate)g(of)g(the)h
-(n)n(um)n(b)r(er)f(of)g(en)n(tries)g(that)h(will)f(b)r(e)h(stored)f(in)
-g(the)227 3371 y(KeyMap.)59 b(It)36 b(is)f(used)g(to)g(tune)h(the)f(in)
-n(ternal)g(prop)r(erties)f(of)h(the)h(KeyMap)e(for)h(sp)r(eed)h(and)f
-(e\016ciency)-7 b(.)59 b(A)227 3471 y(larger)24 b(v)-5
-b(alue)26 b(will)h(result)e(in)i(faster)e(access)g(at)h(the)g(exp)r
-(ense)g(of)g(increased)f(memory)g(requiremen)n(ts.)36
-b(Ho)n(w)n(ev)n(er)227 3570 y(if)28 b(the)f(SizeGuess)g(v)-5
-b(alue)27 b(is)f(m)n(uc)n(h)h(larger)e(than)i(the)h(actual)e(size)h(of)
-g(the)g(KeyMap,)f(then)i(there)e(will)h(b)r(e)h(little,)227
-3670 y(if)g(an)n(y)-7 b(,)27 b(sp)r(eed)h(gained)f(b)n(y)g(making)g
-(the)h(SizeGuess)g(ev)n(en)f(larger.)35 b(The)27 b(default)h(v)-5
-b(alue)28 b(is)f(300.)227 3796 y(The)36 b(v)-5 b(alue)36
-b(of)g(this)h(attribute)f(can)g(only)f(b)r(e)i(c)n(hanged)e(if)h(the)h
-(KeyMap)e(is)h(empt)n(y)-7 b(.)62 b(Its)37 b(v)-5 b(alue)35
-b(can)h(b)r(e)h(set)227 3896 y(con)n(v)n(enien)n(tly)24
-b(when)i(creating)e(the)i(KeyMap.)35 b(An)26 b(error)d(will)j(b)r(e)g
-(rep)r(orted)e(if)i(an)f(attempt)h(is)g(made)f(to)g(set)g(or)227
-3996 y(clear)i(the)h(attribute)g(when)f(the)h(KeyMap)f(con)n(tains)g
-(an)n(y)g(en)n(tries.)0 4149 y Fc(T)m(yp)s(e:)227 4248
-y Fk(In)n(teger.)0 4401 y Fc(Class)k(Applicabilit)m(y:)259
-4541 y(KeyMap)427 4641 y Fk(All)d(KeyMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4844 V 0 4976 a FA(Skip)1098 b Fd(Skip)39
-b(irrelev)-7 b(an)m(t)36 b(data?)1098 b FA(Skip)0 5168
-y Fc(Description:)44 b Fk(This)30 b(is)f(a)g(b)r(o)r(olean)f(attribute)
-i(whic)n(h)f(indicates)g(whether)g(the)h(Ob)5 b(ject)29
-b(data)g(b)r(eing)g(read)f(through)227 5268 y(a)f(Channel)h(are)f(in)n
-(ter-mixed)g(with)h(other,)f(irrelev)-5 b(an)n(t,)26
-b(external)h(data.)227 5394 y(If)33 b(Skip)f(is)f(zero)g(\(the)i
-(default\),)h(then)e(the)g(source)f(of)h(input)g(data)g(is)f(exp)r
-(ected)i(to)e(con)n(tain)h(descriptions)f(of)227 5494
-y(AST)26 b(Ob)5 b(jects)24 b(and)h(commen)n(ts)g(and)f(nothing)h(else)g
-(\(if)h(an)n(ything)e(else)h(is)f(read,)h(an)g(error)e(will)i
-(result\).)36 b(If)25 b(Skip)227 5593 y(is)34 b(non-zero,)g(then)g(an)n
-(y)f(non-Ob)5 b(ject)33 b(data)g(encoun)n(tered)g(b)r(et)n(w)n(een)h
-(Ob)5 b(jects)33 b(will)h(b)r(e)g(ignored)f(and)h(simply)227
-5693 y(skipp)r(ed)28 b(o)n(v)n(er)e(in)i(order)e(to)i(reac)n(h)e(the)i
-(next)g(Ob)5 b(ject.)p eop end
-%%Page: 449 459
-TeXDict begin 449 458 bop 3643 52 a FG(449)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)0 602 y Fc(Class)k
-(Applicabilit)m(y:)259 740 y(Channel)427 839 y Fk(All)d(Channels)g(ha)n
-(v)n(e)e(this)i(attribute.)259 973 y Fc(FitsChan)427
-1073 y Fk(The)k(FitsChan)g(class)f(sets)g(the)h(default)g(v)-5
-b(alue)32 b(of)f(this)h(attribute)g(to)g(1,)g(so)f(that)h(all)g
-(irrelev)-5 b(an)n(t)30 b(FITS)427 1172 y(headers)d(will)h(normally)e
-(b)r(e)i(ignored.)p 0 1373 3780 12 v 0 1511 a FA(SkyRef\(axis\))918
-1505 y Fd(P)m(osition)36 b(de\014ning)i(the)h(o\013set)f(co)s(ordinate)
-1715 1604 y(system)3029 1511 y FA(SkyRef\(axis\))0 1795
-y Fc(Description:)44 b Fk(This)33 b(attribute)g(allo)n(ws)f(a)g(SkyF)-7
-b(rame)32 b(to)h(represen)n(t)e(o\013sets,)j(rather)e(than)h(absolute)f
-(axis)g(v)-5 b(alues,)227 1894 y(within)29 b(the)f(co)r(ordinate)f
-(system)h(sp)r(eci\014ed)g(b)n(y)f(the)i(System)f(attribute.)38
-b(If)28 b(supplied,)g(SkyRef)h(should)e(b)r(e)i(set)227
-1994 y(to)d(hold)f(the)h(longitude)g(and)f(latitude)h(of)g(a)f(p)r(oin)
-n(t)h(within)g(the)g(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)f
-(the)h(System)227 2094 y(attribute.)36 b(The)23 b(co)r(ordinate)f
-(system)h(represen)n(ted)f(b)n(y)h(the)g(SkyF)-7 b(rame)23
-b(will)g(then)h(b)r(e)f(rotated)g(in)g(order)f(to)h(put)227
-2193 y(the)32 b(sp)r(eci\014ed)g(p)r(osition)f(at)h(either)f(the)h(p)r
-(ole)f(or)g(the)h(origin)e(of)h(the)h(new)g(co)r(ordinate)e(system)h
-(\(as)g(indicated)227 2293 y(b)n(y)g(the)g(SkyRefIs)g(attribute\).)46
-b(The)31 b(orien)n(tation)f(of)g(the)i(mo)r(di\014ed)f(co)r(ordinate)e
-(system)i(is)g(then)g(con)n(trolled)227 2393 y(using)d(the)f(SkyRefP)h
-(attribute.)227 2518 y(If)34 b(an)f(in)n(teger)g(axis)g(index)g(is)h
-(included)f(in)h(the)g(attribute)g(name)f(\(e.g.)54 b
-Ft(")p Fk(SkyRef\(1\))p Ft(")p Fk(\))34 b(then)g(the)f(attribute)227
-2617 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 2717 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 2817 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fk(1)p Ft(")f Fk(or)g Ft(")p
-Fk(2)p Ft(")f Fk(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 2916 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)227 3042 y(If)h(no)g(axis)f
-(index)h(is)f(included)i(in)f(the)g(attribute)g(name)f(\(e.g.)37
-b Ft(")p Fk(SkyRef)p Ft(")p Fk(\))28 b(then)g(the)g(attribute)g(v)-5
-b(alue)28 b(should)227 3141 y(b)r(e)f(supplied)f(as)f(a)g(c)n(haracter)
-f(string)h(con)n(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5
-b(alues)25 b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)
-227 3241 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 3341 y(attribute.)227
-3466 y(The)g(default)g(v)-5 b(alues)27 b(for)g(SkyRef)h(are)f(zero)f
-(longitude)i(and)f(zero)f(latitude.)0 3617 y Fc(T)m(yp)s(e:)227
-3716 y Fk(Floating)h(p)r(oin)n(t.)0 3867 y Fc(Class)k(Applicabilit)m
-(y:)259 4005 y(SkyF)-8 b(rame)427 4105 y Fk(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 4268 y
-Fc(Notes:)340 4552 y Fj(\017)45 b Fk(If)31 b(the)f(System)g(attribute)g
-(of)g(the)g(SkyF)-7 b(rame)29 b(is)h(c)n(hanged,)g(an)n(y)f(p)r
-(osition)g(giv)n(en)g(for)h(SkyRef)g(is)g(trans-)427
-4652 y(formed)e(in)n(to)f(the)h(new)g(System.)340 4786
-y Fj(\017)45 b Fk(If)24 b(a)f(v)-5 b(alue)23 b(has)f(b)r(een)i
-(assigned)e(to)h(SkyRef)g(attribute,)i(then)e(the)h(default)g(v)-5
-b(alues)22 b(for)h(certain)g(attributes)427 4885 y(are)k(c)n(hanged)g
-(as)g(follo)n(ws:)37 b(the)28 b(default)h(axis)e(Lab)r(els)h(for)f(the)
-h(SkyF)-7 b(rame)28 b(are)f(mo)r(di\014ed)h(b)n(y)g(app)r(ending)427
-4985 y Ft(")h Fk(o\013set)p Ft(")f Fk(to)g(the)i(end,)f(the)g(default)g
-(axis)f(Sym)n(b)r(ols)g(for)g(the)i(SkyF)-7 b(rame)27
-b(are)h(mo)r(di\014ed)h(b)n(y)g(prep)r(ending)427 5085
-y(the)i(c)n(haracter)d Ft(")p Fk(D)p Ft(")i Fk(to)g(the)h(start,)f(and)
-g(the)h(default)f(title)h(is)f(mo)r(di\014ed)h(b)n(y)f(replacing)f(the)
-i(pro)5 b(jection)427 5184 y(information)27 b(b)n(y)h(the)f(origin)g
-(information.)-2 5348 y Fc(Aligning)k(SkyF)-8 b(rames)32
-b(with)f(O\013set)g(Co)s(ordinate)g(Systems)n(:)227 5494
-y Fk(The)22 b(o\013set)h(co)r(ordinate)e(system)g(within)i(a)f(SkyF)-7
-b(rame)21 b(should)h(normally)f(b)r(e)i(considered)e(as)h(a)f(sup)r
-(er\014cial)h Ft(")p Fk(re-)227 5593 y(badging)p Ft(")f
-Fk(of)h(the)h(axes)e(of)h(the)g(co)r(ordinate)f(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)h(System)f(attribute)g(-)g(it)g(merely)g(pro)n
-(vides)227 5693 y(an)h(alternativ)n(e)f(n)n(umerical)h
-Ft(")p Fk(lab)r(el)p Ft(")f Fk(for)h(eac)n(h)f(p)r(osition)h(in)h(the)f
-(System)h(co)r(ordinate)e(system.)35 b(The)23 b(SkyF)-7
-b(rame)p eop end
-%%Page: 450 460
-TeXDict begin 450 459 bop 0 52 a FG(450)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(retains)f(full)h(kno)n(wledge)f(of)g(the)h(celestial)g(co)r
-(ordinate)e(system)h(on)h(whic)n(h)f(the)h(o\013set)g(co)r(ordinate)e
-(system)i(is)227 451 y(based)e(\(giv)n(en)g(b)n(y)g(the)h(System)g
-(attribute\).)43 b(F)-7 b(or)29 b(instance,)g(the)h(SkyF)-7
-b(rame)29 b(retains)f(kno)n(wledge)h(of)g(the)h(w)n(a)n(y)227
-551 y(that)37 b(one)g(celestial)f(co)r(ordinate)f(system)i(ma)n(y)f
-Ft(")p Fk(drift)p Ft(")g Fk(with)h(resp)r(ect)g(to)f(another)g(o)n(v)n
-(er)f(time.)64 b(Normally)-7 b(,)227 650 y(if)33 b(y)n(ou)f(attempt)i
-(to)e(align)g(t)n(w)n(o)g(SkyF)-7 b(rames)32 b(\(e.g.)52
-b(using)32 b(the)h(AST)p Ft(_)p Fk(CONVER)-7 b(T)33 b(or)f(AST)p
-Ft(_)p Fk(FINDFRAME)227 750 y(routine\),)k(the)e(e\013ect)h(of)f(an)n
-(y)f(o\013set)h(co)r(ordinate)f(system)h(de\014ned)g(in)g(either)g
-(SkyF)-7 b(rame)33 b(will)i(b)r(e)f(remo)n(v)n(ed,)227
-849 y(resulting)22 b(in)i(alignmen)n(t)e(b)r(eing)h(p)r(erformed)f(in)h
-(the)g(celestial)g(co)r(ordinate)e(system)i(giv)n(en)f(b)n(y)g(the)h
-(AlignSystem)227 949 y(attribute.)35 b(Ho)n(w)n(ev)n(er,)21
-b(b)n(y)h(setting)g(the)g(AlignO\013set)g(attribute)g(ot)f(a)h
-(non-zero)e(v)-5 b(alue,)23 b(it)f(is)g(p)r(ossible)f(to)h(c)n(hange)
-227 1049 y(this)28 b(b)r(eha)n(viour)e(so)h(that)h(the)g(e\013ect)g(of)
-g(the)g(o\013set)f(co)r(ordinate)g(system)g(is)g(not)h(remo)n(v)n(ed)e
-(when)i(aligning)e(t)n(w)n(o)227 1148 y(SkyF)-7 b(rames.)p
-0 1355 3780 12 v 0 1487 a FA(SkyRefIs)299 b Fd(Selects)38
-b(the)h(nature)f(of)g(the)h(o\013set)f(co)s(ordinate)1715
-1586 y(system)3257 1487 y FA(SkyRefIs)0 1782 y Fc(Description:)44
-b Fk(This)34 b(attribute)f(con)n(trols)f(ho)n(w)h(the)h(v)-5
-b(alues)33 b(supplied)h(for)f(the)h(SkyRef)f(and)h(SkyRefP)f
-(attributes)227 1882 y(are)e(used.)49 b(These)32 b(three)f(attributes)h
-(together)f(allo)n(w)f(a)i(SkyF)-7 b(rame)31 b(to)g(represen)n(t)g
-(o\013sets)g(relativ)n(e)g(to)g(some)227 1982 y(sp)r(eci\014ed)39
-b(origin)e(or)g(p)r(ole)h(within)h(the)g(co)r(ordinate)e(system)g(sp)r
-(eci\014ed)i(b)n(y)f(the)g(System)h(attribute,)i(rather)227
-2081 y(than)26 b(absolute)f(axis)g(v)-5 b(alues.)36 b(SkyRefIs)25
-b(can)h(tak)n(e)f(one)g(of)g(the)h(case-insensitiv)n(e)e(v)-5
-b(alues)26 b Ft(")p Fk(Origin)p Ft(")p Fk(,)e Ft(")p
-Fk(P)n(ole)p Ft(")f Fk(or)227 2181 y Ft(")p Fk(Ignored)p
-Ft(")p Fk(.)227 2309 y(If)h(SkyRefIs)g(is)f(set)g(to)h
-Ft(")p Fk(Origin)p Ft(")p Fk(,)e(then)i(the)g(co)r(ordinate)e(system)i
-(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7 b(rame)23 b(is)g(mo)r(di\014ed)
-227 2409 y(to)28 b(put)g(the)g(origin)e(of)i(longitude)f(and)h
-(latitude)g(at)f(the)h(p)r(osition)g(sp)r(eci\014ed)f(b)n(y)h(the)g
-(SkyRef)g(attribute.)227 2537 y(If)h(SkyRefIs)g(is)f(set)h(to)f
-Ft(")p Fk(P)n(ole)p Ft(")p Fk(,)f(then)i(the)g(co)r(ordinate)e(system)h
-(represen)n(ted)g(b)n(y)g(the)h(SkyF)-7 b(rame)28 b(is)g(mo)r(di\014ed)
-227 2637 y(to)g(put)g(the)g(north)f(p)r(ole)h(at)f(the)h(p)r(osition)g
-(sp)r(eci\014ed)f(b)n(y)h(the)g(SkyRef)g(attribute.)227
-2765 y(If)d(SkyRefIs)e(is)h(set)g(to)g Ft(")p Fk(Ignored)p
-Ft(")e Fk(\(the)i(default\),)i(then)e(an)n(y)f(v)-5 b(alue)24
-b(set)g(for)f(the)i(SkyRef)f(attribute)g(is)g(ignored,)227
-2864 y(and)39 b(the)g(SkyF)-7 b(rame)38 b(represen)n(ts)f(the)i(co)r
-(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g(attribute)
-g(directly)227 2964 y(without)28 b(an)n(y)f(rotation.)0
-3121 y Fc(T)m(yp)s(e:)227 3220 y Fk(String.)0 3377 y
-Fc(Class)k(Applicabilit)m(y:)259 3521 y(SkyF)-8 b(rame)427
-3621 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)
-p 0 3827 V 0 3966 a FA(SkyRefP\(axis\))1068 3959 y Fd(P)m(osition)36
-b(on)i(primary)f(meridian)g(of)1273 4073 y(o\013set)h(co)s(ordinate)f
-(system)2937 3966 y FA(SkyRefP\(axis\))0 4270 y Fc(Description:)44
-b Fk(This)33 b(attribute)g(is)g(used)g(to)g(con)n(trol)e(the)i(orien)n
-(tation)f(of)h(the)g(o\013set)g(co)r(ordinate)f(system)g(de\014ned)227
-4369 y(b)n(y)h(attributes)h(SkyRef)f(and)h(SkyRefIs.)54
-b(If)34 b(used,)h(it)f(should)f(b)r(e)h(set)f(to)h(hold)f(the)h
-(longitude)f(and)g(latitude)227 4469 y(of)e(a)f(p)r(oin)n(t)h(within)h
-(the)f(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g
-(attribute.)46 b(The)31 b(o\013set)g(co)r(ordinate)227
-4569 y(system)c(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7
-b(rame)26 b(will)h(then)g(b)r(e)g(rotated)f(in)h(order)e(to)i(put)g
-(the)g(p)r(osition)f(supplied)h(for)227 4668 y(SkyRefP)35
-b(on)f(the)h(zero)e(longitude)h(meridian.)58 b(This)34
-b(rotation)g(is)g(ab)r(out)h(an)f(axis)g(from)g(the)h(cen)n(tre)f(of)g
-(the)227 4768 y(celestial)d(sphere)g(to)h(the)g(p)r(oin)n(t)g(sp)r
-(eci\014ed)g(b)n(y)f(the)h(SkyRef)g(attribute.)49 b(The)32
-b(default)g(v)-5 b(alue)31 b(for)g(SkyRefP)h(is)227 4867
-y(usually)26 b(the)g(north)g(p)r(ole)g(\(that)h(is,)f(a)g(latitude)g
-(of)g(+90)f(degrees)g(in)h(the)g(co)r(ordinate)f(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)227 4967 y(System)j(attribute\).)39
-b(The)28 b(exception)g(to)g(this)h(is)f(if)h(the)f(SkyRef)h(attribute)f
-(is)g(itself)h(set)f(to)g(either)g(the)h(north)227 5067
-y(or)23 b(south)h(p)r(ole.)35 b(In)24 b(these)g(cases)f(the)h(default)g
-(for)f(SkyRefP)h(is)f(the)h(origin)f(\(that)h(is,)h(a)e(\(0,0\))h(in)g
-(the)g(co)r(ordinate)227 5166 y(system)k(sp)r(eci\014ed)f(b)n(y)h(the)g
-(System)g(attribute\).)227 5295 y(If)j(an)f(in)n(teger)f(axis)g(index)i
-(is)f(included)g(in)h(the)f(attribute)h(name)e(\(e.g.)45
-b Ft(")p Fk(SkyRefP\(1\))p Ft(")p Fk(\))29 b(then)i(the)f(attribute)227
-5394 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 5494 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 5593 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fk(1)p Ft(")f Fk(or)g Ft(")p
-Fk(2)p Ft(")f Fk(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 5693 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)p eop end
-%%Page: 451 461
-TeXDict begin 451 460 bop 3643 52 a FG(451)227 351 y
-Fk(If)25 b(no)f(axis)f(index)h(is)g(included)h(in)f(the)h(attribute)f
-(name)g(\(e.g.)35 b Ft(")p Fk(SkyRefP)p Ft(")p Fk(\))24
-b(then)g(the)h(attribute)f(v)-5 b(alue)24 b(should)227
-451 y(b)r(e)j(supplied)f(as)f(a)g(c)n(haracter)f(string)h(con)n
-(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5 b(alues)25
-b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)227
-551 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 650 y(attribute.)0
-794 y Fc(T)m(yp)s(e:)227 894 y Fk(Floating)f(p)r(oin)n(t.)0
-1038 y Fc(Class)k(Applicabilit)m(y:)259 1170 y(SkyF)-8
-b(rame)427 1269 y Fk(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 1426 y Fc(Notes:)340 1703 y Fj(\017)45
-b Fk(If)24 b(the)g(p)r(osition)f(giv)n(en)f(b)n(y)h(the)h(SkyRef)f
-(attribute)h(de\014nes)f(the)h(origin)e(of)h(the)h(o\013set)f(co)r
-(ordinate)f(system)427 1803 y(\(that)33 b(is,)h(if)f(the)g(SkyRefIs)g
-(attribute)g(is)f(set)h(to)f Ft(")p Fk(origin)p Ft(")p
-Fk(\),)h(then)g(there)f(will)h(in)g(general)e(b)r(e)i(t)n(w)n(o)f(ori-)
-427 1902 y(en)n(tations)27 b(whic)n(h)h(will)f(put)i(the)f(supplied)f
-(SkyRefP)h(p)r(osition)f(on)g(the)h(zero)f(longitude)g(meridian.)37
-b(The)427 2002 y(orien)n(tation)25 b(whic)n(h)i(is)f(actually)g(used)g
-(is)g(the)h(one)f(whic)n(h)h(giv)n(es)e(the)i(SkyRefP)f(p)r(osition)g
-(a)g(p)r(ositiv)n(e)g(lat-)427 2102 y(itude)i(in)g(the)g(o\013set)g(co)
-r(ordinate)f(system)g(\(the)h(other)f(p)r(ossible)h(orien)n(tation)e(w)
-n(ould)h(giv)n(e)g(the)h(SkyRefP)427 2201 y(p)r(osition)g(a)f(negativ)n
-(e)f(latitude\).)340 2329 y Fj(\017)45 b Fk(An)29 b(error)d(will)i(b)r
-(e)h(rep)r(orted)e(if)i(an)e(attempt)i(is)f(made)g(to)g(use)g(a)f
-(SkyRefP)h(v)-5 b(alue)28 b(whic)n(h)g(is)g(co-inciden)n(t)427
-2429 y(with)h(SkyRef)f(or)f(with)h(the)g(p)r(oin)n(t)g(diametrically)f
-(opp)r(osite)h(to)f(SkyRef)h(on)g(the)g(celestial)g(sphere.)37
-b(The)427 2528 y(rep)r(orting)d(of)h(this)g(error)d(is)j(deferred)f(un)
-n(til)h(the)h(SkyRef)f(and)f(SkyRefP)h(attribute)g(v)-5
-b(alues)34 b(are)g(used)427 2628 y(within)29 b(a)e(calculation.)340
-2756 y Fj(\017)45 b Fk(If)27 b(the)f(System)h(attribute)f(of)g(the)h
-(SkyF)-7 b(rame)25 b(is)h(c)n(hanged,)f(an)n(y)h(p)r(osition)g(giv)n
-(en)f(for)h(SkyRefP)g(is)g(trans-)427 2855 y(formed)i(in)n(to)f(the)h
-(new)g(System.)p 0 3044 3780 12 v 0 3175 a FA(SourceSys)754
-3176 y Fd(Sp)s(ectral)37 b(system)i(in)f(whic)m(h)g(the)h(source)f(v)m
-(elo)s(cit)m(y)1675 3290 y(is)g(stored)3188 3175 y FA(SourceSys)0
-3450 y Fc(Description:)44 b Fk(This)31 b(attribute)f(iden)n(ti\014es)h
-(the)g(sp)r(ectral)f(system)g(in)h(whic)n(h)f(the)h(SourceV)-7
-b(el)30 b(attribute)h(v)-5 b(alue)30 b(\(the)227 3550
-y(source)d(v)n(elo)r(cit)n(y\))g(is)g(supplied)h(and)g(returned.)36
-b(It)28 b(can)f(b)r(e)h(one)f(of)h(the)g(follo)n(wing:)340
-3803 y Fj(\017)45 b Ft(")p Fk(VRAD)p Ft(")28 b Fk(or)f
-Ft(")p Fk(VRADIO)p Ft(")p Fk(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))340 3931 y Fj(\017)45 b Ft(")p Fk(V)n(OPT)p
-Ft(")26 b Fk(or)h Ft(")p Fk(V)n(OPTICAL)p Ft(")p Fk(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))340 4058
-y Fj(\017)45 b Ft(")p Fk(ZOPT)p Ft(")26 b Fk(or)h Ft(")p
-Fk(REDSHIFT)p Ft(")p Fk(:)36 b(Redshift)29 b(\(dimensionless\))340
-4186 y Fj(\017)45 b Ft(")p Fk(BET)-7 b(A)p Ft(")p Fk(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))340 4314 y Fj(\017)45
-b Ft(")p Fk(VELO)p Ft(")26 b Fk(or)h Ft(")p Fk(VREL)p
-Ft(")p Fk(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fk(relativistic)p Ft(")p Fk(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))227
-4470 y(When)34 b(setting)e(a)h(new)f(v)-5 b(alue)33 b(for)f(the)i
-(SourceV)-7 b(el)32 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)n(y)g
-(should)g(b)r(e)h(supplied)g(in)227 4570 y(the)28 b(sp)r(ectral)f
-(system)g(indicated)g(b)n(y)g(this)h(attribute.)37 b(Lik)n(ewise,)27
-b(when)g(getting)g(the)h(v)-5 b(alue)27 b(of)g(the)h(SourceV)-7
-b(el)227 4670 y(attribute,)28 b(the)g(v)n(elo)r(cit)n(y)f(will)h(b)r(e)
-g(returned)f(in)h(this)g(sp)r(ectral)f(system.)227 4792
-y(If)g(the)h(v)-5 b(alue)26 b(of)h(SourceSys)f(is)g(c)n(hanged,)g(the)i
-(v)-5 b(alue)26 b(stored)g(for)g(SourceV)-7 b(el)27 b(will)g(b)r(e)g
-(con)n(v)n(erted)e(from)i(the)g(old)227 4891 y(to)h(the)g(new)f(sp)r
-(ectral)g(systems.)227 5013 y(The)h(default)g(v)-5 b(alue)27
-b(is)h Ft(")p Fk(VELO)p Ft(")e Fk(\(apparen)n(t)h(radial)f(v)n(elo)r
-(cit)n(y\).)0 5157 y Fc(T)m(yp)s(e:)227 5257 y Fk(String.)0
-5401 y Fc(Class)31 b(Applicabilit)m(y:)259 5533 y(Sp)s(ecF)-8
-b(rame)427 5632 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 452 462
-TeXDict begin 452 461 bop 0 52 a FG(452)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a FA(SourceVRF)879 483 y Fd(Rest)39 b(frame)e(in)i
-(whic)m(h)e(the)i(source)f(v)m(elo)s(cit)m(y)1675 598
-y(is)g(stored)3100 482 y FA(SourceVRF)0 781 y Fc(Description:)44
-b Fk(This)32 b(attribute)f(iden)n(ti\014es)g(the)h(rest)f(frame)g(in)g
-(whic)n(h)g(the)h(source)e(v)n(elo)r(cit)n(y)g(or)h(redshift)g(is)g
-(stored)227 880 y(\(the)g(source)e(v)n(elo)r(cit)n(y)h(or)f(redshift)h
-(is)h(accessed)e(using)h(attribute)g(SourceV)-7 b(el\).)45
-b(When)30 b(setting)h(a)e(new)i(v)-5 b(alue)227 980 y(for)34
-b(the)h(SourceV)-7 b(el)34 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)
-n(y)f(or)h(redshift)g(should)h(b)r(e)g(supplied)f(in)h(the)g(rest)f
-(frame)227 1079 y(indicated)21 b(b)n(y)e(this)i(attribute.)34
-b(Lik)n(ewise,)21 b(when)g(getting)e(the)i(v)-5 b(alue)20
-b(of)g(the)h(SourceV)-7 b(el)19 b(attribute,)j(the)e(v)n(elo)r(cit)n(y)
-227 1179 y(or)27 b(redshift)h(will)g(b)r(e)g(returned)f(in)h(this)g
-(rest)f(frame.)227 1312 y(If)33 b(the)f(v)-5 b(alue)32
-b(of)g(SourceVRF)f(is)h(c)n(hanged,)g(the)g(v)-5 b(alue)32
-b(stored)f(for)g(SourceV)-7 b(el)32 b(will)g(b)r(e)g(con)n(v)n(erted)f
-(from)g(the)227 1412 y(old)d(to)f(the)h(new)g(rest)f(frame.)227
-1545 y(The)44 b(v)-5 b(alues)43 b(whic)n(h)h(can)f(b)r(e)h(supplied)g
-(are)f(the)h(same)f(as)g(for)g(the)h(StdOfRest)h(attribute)e(\(except)h
-(that)227 1645 y(SourceVRF)28 b(cannot)f(b)r(e)h(set)f(to)h
-Ft(")p Fk(Source)p Ft(")p Fk(\).)35 b(The)28 b(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fk(Helio)p Ft(")p Fk(.)0 1812
-y Fc(T)m(yp)s(e:)227 1911 y Fk(String.)0 2078 y Fc(Class)j
-(Applicabilit)m(y:)259 2232 y(Sp)s(ecF)-8 b(rame)427
-2332 y Fk(All)28 b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2548 V 0 2680 a FA(SourceV)-11 b(el)812
-b Fd(The)38 b(source)h(v)m(elo)s(cit)m(y)809 b FA(SourceV)-11
-b(el)0 2891 y Fc(Description:)44 b Fk(This)39 b(attribute)f(\(together)
-g(with)h(SourceSys,)h(SourceVRF,)f(RefRA)g(and)f(RefDec\))i(de\014nes)e
-(the)227 2990 y Ft(")p Fk(Source)p Ft(")25 b Fk(standard)f(of)i(rest)g
-(\(see)g(attribute)g(StdOfRest\).)37 b(This)26 b(is)g(a)f(rest)g(frame)
-h(whic)n(h)g(is)g(mo)n(ving)e(to)n(w)n(ards)227 3090
-y(the)j(p)r(osition)e(giv)n(en)g(b)n(y)h(RefRA)h(and)e(RefDec)i(at)f(a)
-f(v)n(elo)r(cit)n(y)g(giv)n(en)g(b)n(y)h(SourceV)-7 b(el.)36
-b(A)26 b(p)r(ositiv)n(e)f(v)-5 b(alue)26 b(means)227
-3190 y(the)j(source)e(is)h(mo)n(ving)f(a)n(w)n(a)n(y)f(from)i(the)h
-(observ)n(er.)37 b(When)28 b(a)g(new)h(v)-5 b(alue)28
-b(is)g(assigned)f(to)h(this)h(attribute,)f(the)227 3289
-y(supplied)f(v)-5 b(alue)26 b(is)g(assumed)g(to)g(refer)f(to)h(the)h
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)g(b)n(y)g(the)h(SourceSys)e
-(attribute.)36 b(F)-7 b(or)227 3389 y(instance,)35 b(the)f(SourceV)-7
-b(el)32 b(v)-5 b(alue)33 b(ma)n(y)g(b)r(e)h(supplied)f(as)g(a)g(radio)f
-(v)n(elo)r(cit)n(y)-7 b(,)34 b(a)f(redshift,)i(a)e(b)r(eta)g(factor,)h
-(etc.)227 3488 y(Similarly)-7 b(,)34 b(when)f(the)h(curren)n(t)e(v)-5
-b(alue)32 b(of)h(the)h(SourceV)-7 b(el)32 b(attribute)h(is)g(obtained,)
-h(the)f(returned)g(v)-5 b(alue)32 b(will)227 3588 y(refer)f(to)h(the)g
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)h(b)n(y)f(the)h(SourceSys)e(v)-5
-b(alue.)49 b(If)32 b(the)g(SourceSys)f(v)-5 b(alue)31
-b(is)h(c)n(hanged,)227 3688 y(an)n(y)25 b(v)-5 b(alue)25
-b(previously)f(stored)g(for)h(the)g(SourceV)-7 b(el)25
-b(attribute)g(will)h(b)r(e)f(c)n(hanged)f(automatically)g(from)h(the)h
-(old)227 3787 y(sp)r(ectral)h(system)h(to)f(the)h(new)g(sp)r(ectral)f
-(system.)227 3921 y(When)f(setting)f(a)g(v)-5 b(alue)25
-b(for)f(SourceV)-7 b(el,)25 b(the)h(v)-5 b(alue)25 b(should)g(b)r(e)g
-(supplied)h(in)f(the)h(rest)e(frame)h(sp)r(eci\014ed)g(b)n(y)g(the)227
-4020 y(SourceVRF)f(attribute.)36 b(Lik)n(ewise,)23 b(when)h(getting)g
-(the)g(v)-5 b(alue)23 b(of)h(SourceV)-7 b(el,)24 b(it)g(will)g(b)r(e)h
-(returned)e(in)h(the)g(rest)227 4120 y(frame)j(sp)r(eci\014ed)h(b)n(y)g
-(the)g(SourceVRF)f(attribute.)227 4253 y(The)h(default)g(SourceV)-7
-b(el)27 b(v)-5 b(alue)28 b(is)f(zero.)0 4420 y Fc(T)m(yp)s(e:)227
-4520 y Fk(Floating)g(p)r(oin)n(t.)0 4686 y Fc(Class)k(Applicabilit)m
-(y:)259 4840 y(Sp)s(ecF)-8 b(rame)427 4940 y Fk(All)28
-b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)0
-5119 y Fc(Notes:)340 5419 y Fj(\017)45 b Fk(It)35 b(is)f(imp)r(ortan)n
-(t)f(to)h(set)g(an)g(appropriate)e(v)-5 b(alue)34 b(for)g(SourceVRF)f
-(and)h(SourceSys)f(b)r(efore)h(setting)g(a)427 5519 y(v)-5
-b(alue)27 b(for)f(SourceV)-7 b(el.)36 b(If)27 b(a)f(new)g(v)-5
-b(alue)27 b(is)f(later)g(set)h(for)f(SourceVRF)g(or)f(SourceSys,)h(the)
-h(v)-5 b(alue)26 b(stored)427 5618 y(for)g(SourceV)-7
-b(el)26 b(will)h(sim)n(ultaneously)f(b)r(e)h(c)n(hanged)e(to)i(the)f
-(new)h(standard)f(of)g(rest)g(or)g(sp)r(ectral)g(system.)p
-eop end
-%%Page: 453 463
-TeXDict begin 453 462 bop 3643 52 a FG(453)p 0 351 3780
-12 v 0 483 a FA(Sp)t(ecOrigin)185 b Fd(The)38 b(zero)g(p)s(oin)m(t)g
-(for)g(Sp)s(ecF)-10 b(rame)38 b(axis)g(v)-7 b(alues)185
-b FA(Sp)t(ecOrigin)0 680 y Fc(Description:)44 b Fk(This)31
-b(sp)r(eci\014es)g(the)h(origin)e(from)h(whic)n(h)g(all)f(sp)r(ectral)h
-(v)-5 b(alues)31 b(are)f(measured.)46 b(The)31 b(default)h(v)-5
-b(alue)227 780 y(\(zero\))38 b(results)f(in)h(the)g(Sp)r(ecF)-7
-b(rame)37 b(describing)g(absolute)h(sp)r(ectral)f(v)-5
-b(alues)37 b(in)h(the)g(system)g(giv)n(en)f(b)n(y)g(the)227
-879 y(System)e(attribute)f(\(e.g.)56 b(frequency)-7 b(,)36
-b(v)n(elo)r(cit)n(y)-7 b(,)35 b(etc\).)57 b(If)34 b(a)g(Sp)r(ecF)-7
-b(rame)34 b(is)g(to)g(b)r(e)h(used)f(to)g(describ)r(e)g(o\013set)227
-979 y(from)e(some)g(origin,)h(the)g(Sp)r(ecOrigin)e(attribute)i(should)
-f(b)r(e)h(set)f(to)h(hold)f(the)h(required)e(origin)g(v)-5
-b(alue.)52 b(The)227 1079 y(Sp)r(ecOrigin)24 b(v)-5 b(alue)25
-b(stored)f(inside)h(the)g(Sp)r(ecF)-7 b(rame)25 b(structure)f(is)h(mo)r
-(di\014ed)g(whenev)n(er)f(Sp)r(ecF)-7 b(rame)24 b(attribute)227
-1178 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g(so)g(that)g(it)h(refers)f
-(to)h(the)g(original)e(sp)r(ectral)h(p)r(osition.)227
-1307 y(When)22 b(setting)f(a)g(new)g(v)-5 b(alue)21 b(for)f(this)i
-(attribute,)g(the)g(supplied)f(v)-5 b(alue)21 b(is)g(assumed)g(to)g(b)r
-(e)g(in)g(the)h(system,)g(units)227 1406 y(and)e(standard)f(of)h(rest)f
-(describ)r(ed)h(b)n(y)f(the)i(Sp)r(ecF)-7 b(rame.)34
-b(Lik)n(ewise,)21 b(when)f(getting)f(the)i(v)-5 b(alue)19
-b(of)h(this)g(attribute,)227 1506 y(the)26 b(v)-5 b(alue)26
-b(is)g(returned)f(in)h(the)g(system,)g(units)g(and)g(standard)e(of)i
-(rest)f(describ)r(ed)h(b)n(y)f(the)h(Sp)r(ecF)-7 b(rame.)36
-b(If)26 b(an)n(y)227 1606 y(of)j(these)g(attributes)f(are)g(c)n
-(hanged,)g(then)h(an)n(y)f(previously)g(stored)f(Sp)r(ecOrigin)h(v)-5
-b(alue)29 b(will)g(also)f(b)r(e)h(c)n(hanged)227 1705
-y(so)e(that)h(refers)f(to)g(the)h(new)g(system,)f(units)h(or)f
-(standard)g(of)g(rest.)0 1863 y Fc(T)m(yp)s(e:)227 1963
-y Fk(Floating)g(p)r(oin)n(t.)0 2120 y Fc(Class)k(Applicabilit)m(y:)259
-2265 y(Sp)s(ecF)-8 b(rame)427 2365 y Fk(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 2572
-V 0 2704 a FA(Sp)t(ecV)-11 b(al)252 b Fd(The)38 b(sp)s(ectral)g(p)s
-(osition)f(at)h(whic)m(h)g(\015ux)h(v)-7 b(alues)39 b(are)1649
-2818 y(measured)3312 2704 y FA(Sp)t(ecV)-11 b(al)0 2997
-y Fc(Description:)44 b Fk(This)32 b(attribute)g(sp)r(eci\014es)g(the)g
-(sp)r(ectral)g(p)r(osition)g(\(frequency)-7 b(,)33 b(w)n(a)n(v)n
-(elength,)e(etc.\),)j(at)d(whic)n(h)h(the)227 3097 y(v)-5
-b(alues)19 b(describ)r(ed)h(b)n(y)f(the)h(FluxF)-7 b(rame)19
-b(are)f(measured.)33 b(It)20 b(is)f(used)h(when)f(determining)h(the)g
-(Mapping)f(b)r(et)n(w)n(een)227 3196 y(b)r(et)n(w)n(een)28
-b(FluxF)-7 b(rames.)227 3325 y(The)20 b(default)h(v)-5
-b(alue)20 b(and)g(sp)r(ectral)f(system)h(used)g(for)f(this)h(attribute)
-h(are)e(b)r(oth)h(sp)r(eci\014ed)g(when)h(the)f(FluxF)-7
-b(rame)227 3425 y(is)28 b(created.)0 3582 y Fc(T)m(yp)s(e:)227
-3682 y Fk(Floating)f(p)r(oin)n(t.)0 3840 y Fc(Class)k(Applicabilit)m
-(y:)259 3984 y(FluxF)-8 b(rame)427 4084 y Fk(All)28 b(FluxF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 4291
-V 0 4422 a FA(StcsArea)731 4423 y Fd(Return)39 b(the)f(Co)s
-(ordinateArea)d(comp)s(onen)m(t)i(when)1134 4538 y(reading)g(an)i
-(STC-S)f(do)s(cumen)m(t?)3256 4422 y FA(StcsArea)0 4735
-y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(b)r(o)r(olean)f(attribute)
-i(whic)n(h)f(con)n(trols)f(what)h(is)g(returned)g(b)n(y)g(the)g(AST)p
-Ft(_)p Fk(READ)h(function)227 4834 y(when)e(it)g(is)f(used)g(to)h(read)
-e(from)h(an)g(StcsChan.)37 b(If)27 b(StcsArea)e(is)i(set)f(non-zero)f
-(\(the)i(default\),)g(then)g(a)f(Region)227 4934 y(represen)n(ting)g
-(the)i(STC)f(Co)r(ordinateArea)f(will)h(b)r(e)h(returned)f(b)n(y)g(AST)
-p Ft(_)p Fk(READ.)h(If)f(StcsArea)g(is)g(set)g(to)h(zero,)227
-5034 y(then)g(the)g(STC)g(Co)r(ordinateArea)e(will)i(not)f(b)r(e)h
-(returned.)0 5191 y Fc(T)m(yp)s(e:)227 5291 y Fk(In)n(teger)f(\(b)r(o)r
-(olean\).)0 5449 y Fc(Class)k(Applicabilit)m(y:)259 5593
-y(StcsChan)427 5693 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 454 464
-TeXDict begin 454 463 bop 0 52 a FG(454)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(Notes:)340 652 y Fj(\017)45 b Fk(Other)30 b(attributes)f(suc)n(h)h
-(as)f(StcsCo)r(ords)g(and)g(StcsProps)g(can)g(b)r(e)h(used)g(to)g(sp)r
-(ecify)g(other)f(Ob)5 b(jects)30 b(to)427 752 y(b)r(e)j(returned)f(b)n
-(y)h(AST)p Ft(_)p Fk(READ.)g(If)g(more)e(than)i(one)f(of)h(these)f
-(attributes)h(is)f(set)h(non-zero,)f(then)h(the)427 851
-y(actual)25 b(Ob)5 b(ject)25 b(returned)g(b)n(y)g(AST)p
-Ft(_)p Fk(READ)h(will)f(b)r(e)h(a)f(KeyMap,)g(con)n(taining)f(the)i
-(requested)f(Ob)5 b(jects.)427 951 y(In)27 b(this)g(case,)f(the)h
-(Region)f(represen)n(ting)f(the)j(STC)e(Co)r(ordinateArea)f(will)i(b)r
-(e)g(stored)f(in)h(the)g(returned)427 1050 y(KeyMap)j(using)h(the)h(k)n
-(ey)e Ft(")p Fk(AREA)p Ft(")p Fk(.)46 b(If)32 b(StcsArea)e(is)h(the)h
-(only)e(attribute)h(to)g(b)r(e)h(set)f(non-zero,)f(then)427
-1150 y(the)e(Ob)5 b(ject)28 b(returned)f(b)n(y)g(AST)p
-Ft(_)p Fk(READ)h(will)g(b)r(e)g(the)g(Co)r(ordinateArea)e(Region)g
-(itself.)340 1292 y Fj(\017)45 b Fk(The)c(class)e(of)h(Region)f(used)i
-(to)f(represen)n(t)f(the)h(Co)r(ordinateArea)f(for)g(eac)n(h)h(STC-S)g
-(sub-phrase)f(is)427 1392 y(determined)34 b(b)n(y)g(the)g(\014rst)f(w)n
-(ord)g(in)h(the)g(sub-phrase)e(\(the)j Ft(")p Fk(sub-phrase)d(iden)n
-(ti\014er)p Ft(")p Fk(\).)55 b(The)33 b(individ-)427
-1491 y(ual)40 b(sub-phrase)g(Regions)f(are)g(com)n(bined)i(in)n(to)f(a)
-g(single)g(Prism,)i(whic)n(h)f(is)f(then)h(simpli\014ed)g(using)427
-1591 y(AST)p Ft(_)p Fk(SIMPLIFY)28 b(to)f(form)h(the)g(returned)f
-(region.)340 1733 y Fj(\017)45 b Fk(Sub-phrases)20 b(that)h(represen)n
-(t)f(a)h(single)f(v)-5 b(alue)21 b(\()h(that)f(is,)h(ha)n(v)n(e)e(iden)
-n(ti\014ers)h Ft(")p Fk(Time)p Ft(")p Fk(,)h Ft(")p Fk(P)n(osition)p
-Ft(")p Fk(,)e Ft(")p Fk(Sp)r(ec-)427 1832 y(tral)p Ft(")27
-b Fk(or)g Ft(")p Fk(Redshift)p Ft(")g Fk(\))h(are)f(considered)f(to)i
-(b)r(e)g(b)r(e)g(part)f(of)g(the)h(STC)g(Co)r(ordinateArea)e(comp)r
-(onen)n(t.)340 1974 y Fj(\017)45 b Fk(The)21 b(TimeF)-7
-b(rame)20 b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e
-(will)i(ha)n(v)n(e)f(its)h(TimeOrigin)e(attribute)427
-2074 y(set)25 b(to)g(the)g(sub-phrase)e(start)h(time.)37
-b(If)25 b(no)g(start)f(time)h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h
-(sub-phrase,)f(then)i(the)f(stop)427 2174 y(time)i(will)f(b)r(e)h(used)
-f(instead.)36 b(If)27 b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)
-f(the)g(sub-phrase,)f(then)i(the)f(single)g(time)427
-2273 y(v)-5 b(alue)27 b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h
-(b)r(e)g(used)g(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j
-(TimeOrigin)427 2373 y(attribute)g(\(or)f(setting)h(its)f(v)-5
-b(alue)28 b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7
-b(rame)27 b(to)g(reprsen)n(t)g(absolute)g(times.)340
-2515 y Fj(\017)45 b Fk(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h
-(returned)f(Region)g(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)
-h(TimeOrigin)427 2614 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p
-0 2832 3780 12 v 0 2964 a FA(StcsCo)t(ords)172 b Fd(Return)39
-b(the)f(Co)s(ordinates)e(comp)s(onen)m(t)i(when)1134
-3078 y(reading)f(an)i(STC-S)f(do)s(cumen)m(t?)3122 2964
-y FA(StcsCo)t(ords)0 3285 y Fc(Description:)44 b Fk(This)29
-b(is)f(a)g(b)r(o)r(olean)f(attribute)i(whic)n(h)f(con)n(trols)f(what)h
-(is)g(returned)g(b)n(y)g(the)g(AST)p Ft(_)p Fk(READ)h(function)227
-3385 y(when)i(it)g(is)g(used)f(to)h(read)e(from)i(an)f(StcsChan.)46
-b(If)31 b(StcsCo)r(ords)e(is)i(set)f(non-zero,)g(then)h(a)f(P)n(oin)n
-(tList)g(repre-)227 3484 y(sen)n(ting)j(the)h(STC)f(Co)r(ordinates)f
-(will)i(b)r(e)f(returned)g(b)n(y)g(AST)p Ft(_)p Fk(READ.)h(If)g(StcsCo)
-r(ords)e(is)h(set)h(to)f(zero)f(\(the)227 3584 y(default\),)d(then)f
-(the)g(STC)f(Co)r(ordinates)g(will)h(not)f(b)r(e)h(returned.)0
-3752 y Fc(T)m(yp)s(e:)227 3851 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-4019 y Fc(Class)k(Applicabilit)m(y:)259 4174 y(StcsChan)427
-4273 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)0
-4453 y Fc(Notes:)340 4754 y Fj(\017)45 b Fk(Other)27
-b(attributes)h(suc)n(h)f(as)h(StcsArea)f(and)g(StcsProps)f(can)i(b)r(e)
-g(used)g(to)f(sp)r(ecify)h(other)f(Ob)5 b(jects)28 b(to)f(b)r(e)427
-4854 y(returned)c(b)n(y)h(AST)p Ft(_)p Fk(READ.)g(If)f(more)g(than)h
-(one)f(of)g(these)h(attributes)f(is)h(set)f(non-zero,)g(then)h(the)g
-(actual)427 4953 y(Ob)5 b(ject)23 b(returned)g(b)n(y)g(AST)p
-Ft(_)p Fk(READ)h(will)f(b)r(e)h(a)f(KeyMap,)g(con)n(taining)f(the)i
-(requested)f(Ob)5 b(jects.)35 b(In)23 b(this)427 5053
-y(case,)i(the)h(P)n(oin)n(tList)f(represen)n(ting)e(the)j(STC)g(Co)r
-(ordinates)e(will)i(b)r(e)f(stored)g(in)h(the)f(returned)h(KeyMap)427
-5153 y(using)31 b(the)g(k)n(ey)e Ft(")p Fk(COORDS)p Ft(")p
-Fk(.)45 b(If)31 b(StcsCo)r(ords)f(is)g(the)h(only)f(attribute)h(to)g(b)
-r(e)g(set)f(non-zero,)g(then)h(the)427 5252 y(Ob)5 b(ject)28
-b(returned)f(b)n(y)g(AST)p Ft(_)p Fk(READ)h(will)g(b)r(e)g(the)g(Co)r
-(ordinates)e(P)n(oin)n(tList)h(itself.)340 5394 y Fj(\017)45
-b Fk(The)31 b(Co)r(ordinates)f(comp)r(onen)n(t)h(is)g(sp)r(eci\014ed)h
-(b)n(y)e(the)i(additional)f(axis)f(v)-5 b(alues)31 b(em)n(b)r(edded)g
-(within)h(the)427 5494 y(b)r(o)r(dy)24 b(of)f(eac)n(h)g(STC-S)g
-(sub-phrase)f(that)i(represen)n(ts)e(an)h(extended)h(area.)34
-b(Sub-phrases)22 b(that)i(represen)n(t)427 5593 y(a)31
-b(single)g(v)-5 b(alue)31 b(\()h(that)g(is,)g(ha)n(v)n(e)e(iden)n
-(ti\014ers)h Ft(")p Fk(Time)p Ft(")p Fk(,)h Ft(")p Fk(P)n(osition)p
-Ft(")p Fk(,)e Ft(")p Fk(Sp)r(ectral)p Ft(")g Fk(or)h
-Ft(")p Fk(Redshift)p Ft(")g Fk(\))h(are)427 5693 y(not)c(considered)e
-(to)i(b)r(e)g(b)r(e)g(part)f(of)h(the)g(STC)f(Co)r(ordinates)g(comp)r
-(onen)n(t.)p eop end
-%%Page: 455 465
-TeXDict begin 455 464 bop 3643 52 a FG(455)340 351 y
-Fj(\017)45 b Fk(If)36 b(the)f(STC-S)g(do)r(cumen)n(ts)g(do)r(es)f(not)h
-(con)n(tain)f(a)h(Co)r(ordinates)e(comp)r(onen)n(t,)k(then)e(a)g(NULL)g
-(ob)5 b(ject)427 451 y(p)r(oin)n(ter)38 b(\(AST)p Ft(__)p
-Fk(NULL\))i(will)e(b)r(e)h(returned)g(b)n(y)f(AST)p Ft(_)p
-Fk(READ)h(if)g(the)g(Co)r(ordinates)e(comp)r(onen)n(t)i(is)427
-551 y(the)31 b(only)e(ob)5 b(ject)30 b(b)r(eing)g(returned.)44
-b(If)31 b(other)e(ob)5 b(jects)30 b(are)f(also)g(b)r(eing)h(returned)g
-(\(see)g(attributes)g(Stc-)427 650 y(sProps)c(and)h(StcsArea\),)g(then)
-g(the)h(returned)e(KeyMap)h(will)g(con)n(tain)f(a)h Ft(")p
-Fk(COORDS)p Ft(")f Fk(k)n(ey)h(only)g(if)g(the)427 750
-y(Co)r(ordinates)g(comp)r(onen)n(t)g(is)g(read)g(succesfully)-7
-b(.)340 886 y Fj(\017)45 b Fk(The)21 b(TimeF)-7 b(rame)20
-b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e(will)i(ha)
-n(v)n(e)f(its)h(TimeOrigin)e(attribute)427 985 y(set)25
-b(to)g(the)g(sub-phrase)e(start)h(time.)37 b(If)25 b(no)g(start)f(time)
-h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h(sub-phrase,)f(then)i(the)f(stop)
-427 1085 y(time)i(will)f(b)r(e)h(used)f(instead.)36 b(If)27
-b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)f(the)g(sub-phrase,)f
-(then)i(the)f(single)g(time)427 1184 y(v)-5 b(alue)27
-b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h(b)r(e)g(used)g
-(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j(TimeOrigin)427
-1284 y(attribute)g(\(or)f(setting)h(its)f(v)-5 b(alue)28
-b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7 b(rame)27
-b(to)g(reprsen)n(t)g(absolute)g(times.)340 1420 y Fj(\017)45
-b Fk(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h(returned)f(Region)g
-(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)h(TimeOrigin)427
-1519 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p 0 1725
-3780 12 v 0 1856 a FA(StcsInden)l(t)216 b Fd(Con)m(trols)37
-b(inden)m(tation)f(and)i(line)g(splitting)f(of)1595 1956
-y(output)h(text)3155 1856 y FA(StcsInden)l(t)0 2151 y
-Fc(Description:)44 b Fk(This)c(attribute)f(con)n(trols)f(ho)n(w)h(the)g
-(STC-S)h(text)f(is)h(written)f(out)g(to)h(the)f(sink)h(function)f(when)
-227 2250 y(writing)30 b(an)g(AST)g(ob)5 b(ject)30 b(to)g(an)g
-(StcsChan.)45 b(If)30 b(it)h(is)f(zero)f(\(the)i(default\))g(the)f(en)n
-(tire)g(STC-S)g(description)g(is)227 2350 y(written)d(out)g(b)n(y)f(a)g
-(single)h(in)n(v)n(o)r(cation)e(of)i(the)g(sink)f(function.)37
-b(The)27 b(text)g(supplied)g(to)g(the)g(sink)f(function)h(will)227
-2449 y(not)i(con)n(tain)f(an)n(y)g(linefeed)h(c)n(haracters,)e(and)i
-(eac)n(h)f(pair)g(of)g(adjacen)n(t)g(w)n(ords)g(will)h(b)r(e)g
-(separated)e(b)n(y)i(a)f(single)227 2549 y(space.)36
-b(The)28 b(text)g(ma)n(y)f(th)n(us)h(b)r(e)g(arbitrarily)d(large)h(and)
-i(the)g(StcsLength)f(attribute)h(is)g(ignored.)227 2677
-y(If)h(StcsInden)n(t)g(is)g(non-zero,)e(then)i(the)g(text)g(is)f
-(written)h(out)f(via)g(m)n(ultiple)h(calls)f(to)h(the)g(sink)f
-(function,)h(eac)n(h)227 2776 y(call)i(corresp)r(onding)f(to)h(a)g
-(single)g Ft(")p Fk(line)p Ft(")g Fk(of)h(text)g(\(although)f(no)g
-(line)h(feed)g(c)n(haracters)d(will)j(b)r(e)g(inserted)f(b)n(y)227
-2876 y(AST\).)e(The)e(complete)h(STC-S)f(description)g(is)h(brok)n(en)e
-(in)n(to)i(lines)f(so)g(that:)340 3146 y Fj(\017)45 b
-Fk(the)28 b(line)g(length)g(sp)r(eci\014ed)g(b)n(y)f(attribute)h
-(StcsLength)f(is)h(not)f(exceeded)340 3281 y Fj(\017)45
-b Fk(eac)n(h)27 b(sub-phrase)f(\(time,)j(space,)e(etc.\))37
-b(starts)27 b(on)g(a)g(new)h(line)340 3417 y Fj(\017)45
-b Fk(eac)n(h)27 b(argumen)n(t)g(in)g(a)h(comp)r(ound)f(spatial)g
-(region)f(starts)h(on)h(a)f(new)g(line)227 3585 y(If)32
-b(this)g(causes)e(a)h(sub-phrase)g(to)g(extend)h(to)f(t)n(w)n(o)g(or)f
-(more)h(lines,)h(then)g(the)g(second)f(and)g(subsequen)n(t)h(lines)227
-3684 y(will)e(b)r(e)f(inden)n(ted)h(b)n(y)f(three)g(spaces)f(compared)h
-(to)g(the)g(\014rst)g(line.)42 b(In)30 b(addition,)g(lines)f(within)h
-(a)f(comp)r(ound)227 3784 y(spatial)34 b(region)f(will)i(ha)n(v)n(e)f
-(extra)f(inden)n(tation)i(to)f(highligh)n(t)g(the)h(nesting)f(pro)r
-(duced)h(b)n(y)f(the)h(paren)n(theses.)227 3884 y(Eac)n(h)27
-b(new)g(lev)n(el)g(of)h(nesting)f(will)h(b)r(e)g(inden)n(ted)g(b)n(y)g
-(a)f(further)g(three)h(spaces.)227 4011 y(Note,)40 b(the)e(default)g(v)
--5 b(alue)37 b(of)h(zero)e(is)h(unlik)n(ely)g(to)h(b)r(e)g(appropriate)
-d(when)j(an)f(StcsChan)g(is)h(used)f(within)227 4111
-y(F)-7 b(ortran)22 b(co)r(de.)36 b(In)23 b(this)h(case,)f(StcsInden)n
-(t)g(should)g(usually)g(b)r(e)h(set)f(non-zero,)g(and)g(the)g
-(StcsLength)g(attribute)227 4210 y(set)j(to)g(the)g(size)g(of)g(the)g
-(CHARA)n(CTER)g(v)-5 b(ariable)25 b(used)h(to)g(receiv)n(e)f(the)h
-(text)g(returned)g(b)n(y)f(AST)p Ft(_)p Fk(GETLINE)227
-4310 y(within)k(the)g(sink)f(function.)40 b(This)29 b(a)n(v)n(oids)e
-(the)h(p)r(ossibilit)n(y)g(of)h(long)f(lines)g(b)r(eing)h(truncated)f
-(in)n(visibly)g(within)227 4410 y(AST)p Ft(_)p Fk(GETLINE.)0
-4565 y Fc(T)m(yp)s(e:)227 4665 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-4820 y Fc(Class)k(Applicabilit)m(y:)259 4962 y(StcsChan)427
-5062 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 5267 V 0 5399 a FA(StcsLength)541 b Fd(Con)m(trols)36
-b(output)i(line)g(length)540 b FA(StcsLength)0 5593 y
-Fc(Description:)44 b Fk(This)34 b(attribute)h(sp)r(eci\014es)e(the)i
-(maxim)n(um)f(length)g(to)g(use)g(when)g(writing)f(out)i(text)f
-(through)f(the)227 5693 y(sink)28 b(function)h(supplied)f(when)h(the)f
-(StcsChan)g(w)n(as)f(created.)38 b(It)28 b(is)g(ignored)f(if)i(the)f
-(StcsInden)n(t)g(attribute)h(is)p eop end
-%%Page: 456 466
-TeXDict begin 456 465 bop 0 52 a FG(456)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fk(zero)25 b(\(in)i(whic)n(h)f(case)g(the)g(text)h(supplied)f(to)g
-(the)h(sink)f(function)h(can)f(b)r(e)g(of)h(an)n(y)e(length\).)37
-b(The)26 b(default)h(v)-5 b(alue)227 451 y(is)28 b(70.)227
-580 y(The)36 b(n)n(um)n(b)r(er)f(of)g(c)n(haracters)e(in)i(eac)n(h)g
-(string)f(written)i(out)f(through)g(the)g(sink)g(function)h(will)g(not)
-f(usually)227 679 y(b)r(e)c(greater)e(than)i(the)h(v)-5
-b(alue)30 b(of)h(this)g(attribute)g(\(but)h(ma)n(y)e(b)r(e)h(less\).)46
-b(Ho)n(w)n(ev)n(er,)30 b(if)h(an)n(y)f(single)g(w)n(ord)g(in)h(the)227
-779 y(STC-S)d(description)f(exceeds)g(the)h(sp)r(eci\014ed)g(length,)f
-(then)h(the)g(w)n(ord)f(will)h(b)r(e)g(written)g(out)f(as)g(a)g(single)
-g(line.)227 908 y(Note,)21 b(the)f(default)f(v)-5 b(alue)19
-b(of)h(zero)e(is)h(unlik)n(ely)g(to)g(b)r(e)g(appropriate)f(when)h(an)g
-(StcsChan)g(is)g(used)g(within)h(F)-7 b(ortran)227 1007
-y(co)r(de.)34 b(In)19 b(this)g(case,)h(StcsLength)f(should)f(usually)h
-(b)r(e)g(set)g(to)f(the)i(size)e(of)h(the)g(CHARA)n(CTER)g(v)-5
-b(ariable)18 b(used)h(to)227 1107 y(receiv)n(e)25 b(the)h(text)g
-(returned)f(b)n(y)h(AST)p Ft(_)p Fk(GETLINE)e(within)j(the)f(sink)f
-(function.)37 b(In)26 b(addition,)g(the)g(StcsInden)n(t)227
-1207 y(attribute)g(should)g(b)r(e)g(set)g(non-zero.)35
-b(This)26 b(a)n(v)n(oids)e(the)i(p)r(ossibilit)n(y)g(of)g(long)f(lines)
-h(b)r(eing)g(truncated)g(in)n(visibly)227 1306 y(within)j(AST)p
-Ft(_)p Fk(GETLINE.)0 1464 y Fc(T)m(yp)s(e:)227 1564 y
-Fk(In)n(teger.)0 1722 y Fc(Class)i(Applicabilit)m(y:)259
-1867 y(StcsChan)427 1967 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 2175 3780 12 v 0 2306 a FA(StcsProps)912
-2307 y Fd(Return)38 b(all)f(prop)s(erties)h(when)g(reading)f(an)1423
-2421 y(STC-S)h(do)s(cumen)m(t?)3198 2306 y FA(StcsProps)0
-2595 y Fc(Description:)44 b Fk(This)29 b(is)f(a)g(b)r(o)r(olean)f
-(attribute)i(whic)n(h)f(con)n(trols)f(what)h(is)g(returned)g(b)n(y)g
-(the)g(AST)p Ft(_)p Fk(READ)h(function)227 2695 y(when)d(it)g(is)g
-(used)f(to)h(read)e(from)i(an)f(StcsChan.)36 b(If)26
-b(StcsProps)e(is)i(set)f(non-zero,)g(then)h(a)f(KeyMap)g(con)n(taining)
-227 2795 y(all)h(the)g(prop)r(erties)g(read)f(from)g(the)i(STC-S)f(do)r
-(cumen)n(t)g(will)g(b)r(e)h(returned)e(b)n(y)h(AST)p
-Ft(_)p Fk(READ.)h(If)f(StcsProps)f(is)227 2894 y(set)j(to)f(zero)g
-(\(the)h(default\),)h(then)f(the)g(prop)r(erties)e(will)i(not)g(b)r(e)g
-(returned.)0 3052 y Fc(T)m(yp)s(e:)227 3152 y Fk(In)n(teger)f(\(b)r(o)r
-(olean\).)0 3310 y Fc(Class)k(Applicabilit)m(y:)259 3455
-y(StcsChan)427 3555 y Fk(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)0 3725 y Fc(Notes:)340 4016 y Fj(\017)45
-b Fk(Other)32 b(attributes)h(suc)n(h)f(as)f(StcsCo)r(ords)h(and)g
-(StcsArea)g(can)g(b)r(e)g(used)h(to)f(sp)r(ecify)h(other)f(Ob)5
-b(jects)32 b(to)427 4116 y(b)r(e)h(returned)f(b)n(y)h(AST)p
-Ft(_)p Fk(READ.)g(If)g(more)e(than)i(one)f(of)h(these)f(attributes)h
-(is)f(set)h(non-zero,)f(then)h(the)427 4216 y(actual)27
-b(Ob)5 b(ject)27 b(returned)g(b)n(y)g(AST)p Ft(_)p Fk(READ)h(will)f(b)r
-(e)h(a)f(KeyMap)f(con)n(taining)h(the)g(requested)g(Ob)5
-b(jects.)427 4315 y(In)35 b(this)f(case,)h(the)g(prop)r(erties)e
-(KeyMap)h(will)g(b)r(e)h(stored)e(in)i(the)g(returned)e(KeyMap)h(using)
-g(the)g(k)n(ey)427 4415 y Ft(")p Fk(PR)n(OPS)p Ft(")p
-Fk(.)g(If)25 b(StcsProps)e(is)i(the)g(only)f(attribute)h(to)g(b)r(e)g
-(set)g(non-zero,)f(then)h(the)g(Ob)5 b(ject)25 b(returned)f(b)n(y)427
-4515 y(AST)p Ft(_)p Fk(READ)k(will)g(b)r(e)g(the)g(prop)r(erties)f
-(KeyMap)f(itself.)340 4652 y Fj(\017)45 b Fk(The)24 b(KeyMap)e(con)n
-(taining)h(the)h(prop)r(erties)e(will)i(ha)n(v)n(e)e(en)n(tries)h(for)g
-(one)g(or)g(more)g(of)g(the)h(follo)n(wing)e(k)n(eys:)427
-4751 y Ft(")p Fk(TIME)p Ft(_)p Fk(PR)n(OPS)p Ft(")p Fk(,)k
-Ft(")p Fk(SP)-7 b(A)n(CE)p Ft(_)p Fk(PR)n(OPS)p Ft(")p
-Fk(,)25 b Ft(")p Fk(SPECTRAL)p Ft(_)p Fk(PR)n(OPS)p Ft(")g
-Fk(and)j Ft(")p Fk(REDSHIFT)p Ft(_)p Fk(PR)n(OPS)p Ft(")p
-Fk(.)427 4851 y(Eac)n(h)d(of)h(these)g(en)n(tries)g(will)g(b)r(e)h
-(another)e(KeyMap)g(con)n(taining)g(the)i(prop)r(erties)e(of)h(the)h
-(corresp)r(onding)427 4951 y(STC-S)h(sub-phrase.)p 0
-5159 V 0 5290 a FA(StdOfRest)865 b Fd(Standard)37 b(of)h(rest)864
-b FA(StdOfRest)0 5465 y Fc(Description:)44 b Fk(This)19
-b(attribute)f(iden)n(ti\014es)h(the)f(standard)g(of)g(rest)g(to)g(whic)
-n(h)h(the)f(sp)r(ectral)g(axis)g(v)-5 b(alues)18 b(of)g(a)g(Sp)r(ecF)-7
-b(rame)227 5564 y(refer,)27 b(and)h(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fk(Standards)e(of)i
-(Rest)p Ft(")f Fk(section)g(\(b)r(elo)n(w\).)227 5693
-y(The)h(default)g(StdOfRest)g(v)-5 b(alue)28 b(is)f Ft(")p
-Fk(Helio)p Ft(")p Fk(.)p eop end
-%%Page: 457 467
-TeXDict begin 457 466 bop 3643 52 a FG(457)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(String.)0 641 y Fc(Class)31 b(Applicabilit)m(y:)259
-818 y(Sp)s(ecF)-8 b(rame)427 918 y Fk(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)-2 1120 y
-Fc(Standards)33 b(of)f(Rest)n(:)227 1266 y Fk(The)c(Sp)r(ecF)-7
-b(rame)27 b(class)g(supp)r(orts)g(the)h(follo)n(wing)f(StdOfRest)h(v)-5
-b(alues)27 b(\(all)h(are)e(case-insensitiv)n(e\):)340
-1588 y Fj(\017)45 b Ft(")p Fk(T)-7 b(op)r(o)r(cen)n(tric)p
-Ft(")p Fk(,)43 b Ft(")p Fk(T)-7 b(op)r(o)r(cen)n(t)p
-Ft(")40 b Fk(or)g Ft(")p Fk(T)-7 b(op)r(o)p Ft(")p Fk(:)62
-b(The)41 b(observ)n(ers)d(rest-frame)i(\(assumed)h(to)f(b)r(e)i(on)e
-(the)427 1688 y(surface)30 b(of)g(the)g(earth\).)45 b(Sp)r(ectra)30
-b(recorded)e(in)j(this)f(standard)f(of)h(rest)g(su\013er)g(a)g(Doppler)
-g(shift)h(whic)n(h)427 1788 y(v)-5 b(aries)26 b(o)n(v)n(er)g(the)h
-(course)f(of)h(a)g(da)n(y)f(b)r(ecause)h(of)g(the)g(rotation)f(of)h
-(the)h(observ)n(er)c(around)i(the)i(axis)e(of)h(the)427
-1887 y(earth.)52 b(This)32 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)h(ObsLat,)g(ObsLon,)g(ObsAlt,)h(Ep)r(o)r(c)n
-(h,)427 1987 y(RefRA)29 b(and)e(RefDec)h(attributes.)340
-2140 y Fj(\017)45 b Ft(")p Fk(Geo)r(cen)n(tric)p Ft(")p
-Fk(,)25 b Ft(")p Fk(Geo)r(cen)n(tr)p Ft(")g Fk(or)g Ft(")p
-Fk(Geo)p Ft(")p Fk(:)34 b(The)26 b(rest-frame)f(of)h(the)g(earth)f(cen)
-n(tre.)36 b(Sp)r(ectra)26 b(recorded)e(in)427 2240 y(this)30
-b(standard)e(of)h(rest)f(su\013er)h(a)g(Doppler)g(shift)g(whic)n(h)g(v)
--5 b(aries)28 b(o)n(v)n(er)g(the)h(course)f(of)h(a)f(y)n(ear)g(b)r
-(ecause)h(of)427 2339 y(the)h(rotation)f(of)g(the)h(earth)f(around)f
-(the)i(Sun.)44 b(This)29 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)g(the)427 2439 y(Ep)r(o)r(c)n(h,)e(RefRA)i(and)e
-(RefDec)i(attributes.)340 2592 y Fj(\017)45 b Ft(")p
-Fk(Barycen)n(tric)p Ft(")p Fk(,)19 b Ft(")p Fk(Barycen)n(t)p
-Ft(")f Fk(or)g Ft(")p Fk(Bary)p Ft(")p Fk(:)31 b(The)20
-b(rest-frame)f(of)g(the)i(solar-system)c(barycen)n(tre.)33
-b(Sp)r(ectra)427 2692 y(recorded)24 b(in)i(this)g(standard)f(of)g(rest)
-h(su\013er)f(a)g(Doppler)h(shift)g(whic)n(h)f(dep)r(ends)i(b)r(oth)f
-(on)f(the)h(v)n(elo)r(cit)n(y)f(of)427 2791 y(the)e(Sun)h(through)e
-(the)h(Lo)r(cal)f(Standard)g(of)h(Rest,)h(and)e(on)h(the)g(mo)n(v)n
-(emen)n(t)f(of)g(the)i(planets)e(through)g(the)427 2891
-y(solar)30 b(system.)48 b(This)32 b(standard)e(of)i(rest)f(m)n(ust)g(b)
-r(e)h(quali\014ed)f(using)g(the)h(Ep)r(o)r(c)n(h,)g(RefRA)h(and)e
-(RefDec)427 2991 y(attributes.)340 3144 y Fj(\017)45
-b Ft(")p Fk(Helio)r(cen)n(tric)p Ft(")p Fk(,)31 b Ft(")p
-Fk(Helio)r(cen)p Ft(")f Fk(or)g Ft(")p Fk(Helio)p Ft(")p
-Fk(:)43 b(The)31 b(rest-frame)e(of)i(the)h(Sun.)47 b(Sp)r(ectra)31
-b(recorded)e(in)i(this)427 3243 y(standard)c(of)g(rest)g(su\013er)g(a)f
-(Doppler)h(shift)h(whic)n(h)g(dep)r(ends)f(on)g(the)h(v)n(elo)r(cit)n
-(y)e(of)h(the)h(Sun)g(through)e(the)427 3343 y(Lo)r(cal)d(Standard)h
-(of)g(Rest.)35 b(This)24 b(standard)f(of)h(rest)g(m)n(ust)g(b)r(e)g
-(quali\014ed)g(using)f(the)h(RefRA)h(and)f(RefDec)427
-3443 y(attributes.)340 3596 y Fj(\017)45 b Ft(")p Fk(LSRK)p
-Ft(")p Fk(,)21 b Ft(")p Fk(LSR)p Ft(")p Fk(:)33 b(The)20
-b(rest-frame)f(of)h(the)h(kinematical)e(Lo)r(cal)h(Standard)f(of)i
-(Rest.)34 b(Sp)r(ectra)20 b(recorded)427 3696 y(in)j(this)f(standard)f
-(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n(h)f(dep)r(ends)h
-(on)e(the)i(v)n(elo)r(cit)n(y)e(of)i(the)f(kinematical)427
-3795 y(Lo)r(cal)i(Standard)g(of)h(Rest)g(through)f(the)h(galaxy)-7
-b(.)34 b(This)25 b(standard)f(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)427 3895 y(RefRA)29 b(and)e(RefDec)h
-(attributes.)340 4048 y Fj(\017)45 b Ft(")p Fk(LSRD)p
-Ft(")p Fk(:)38 b(The)28 b(rest-frame)f(of)h(the)g(dynamical)g(Lo)r(cal)
-f(Standard)g(of)h(Rest.)39 b(Sp)r(ectra)27 b(recorded)g(in)h(this)427
-4148 y(standard)e(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n
-(h)f(dep)r(ends)g(on)g(the)h(v)n(elo)r(cit)n(y)e(of)h(the)h(dynamical)e
-(Lo)r(cal)427 4247 y(Standard)21 b(of)g(Rest)g(through)g(the)h(galaxy)
--7 b(.)33 b(This)21 b(standard)f(of)h(rest)g(m)n(ust)h(b)r(e)f
-(quali\014ed)g(using)g(the)h(RefRA)427 4347 y(and)28
-b(RefDec)g(attributes.)340 4500 y Fj(\017)45 b Ft(")p
-Fk(Galactic)p Ft(")p Fk(,)35 b Ft(")p Fk(Galacto)r(c)p
-Ft(")e Fk(or)h Ft(")p Fk(Gal)p Ft(")p Fk(:)50 b(The)35
-b(rest-frame)e(of)i(the)g(galactic)e(cen)n(tre.)58 b(Sp)r(ectra)34
-b(recorded)427 4600 y(in)e(this)f(standard)f(of)h(rest)f(su\013er)h(a)g
-(Doppler)f(shift)i(whic)n(h)f(dep)r(ends)g(on)g(the)g(v)n(elo)r(cit)n
-(y)f(of)h(the)h(galactic)427 4699 y(cen)n(tre)25 b(through)g(the)h(lo)r
-(cal)f(group.)35 b(This)25 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)h(the)f(RefRA)i(and)427 4799 y(RefDec)i
-(attributes.)340 4952 y Fj(\017)45 b Ft(")p Fk(Lo)r(cal)p
-Ft(_)p Fk(group)p Ft(")p Fk(,)33 b Ft(")p Fk(Lo)r(calgrp)p
-Ft(")e Fk(or)i Ft(")p Fk(LG)p Ft(")p Fk(:)49 b(The)34
-b(rest-frame)f(of)h(the)g(lo)r(cal)g(group.)55 b(This)34
-b(standard)f(of)427 5052 y(rest)27 b(m)n(ust)h(b)r(e)g(quali\014ed)g
-(using)f(the)h(RefRA)g(and)g(RefDec)g(attributes.)340
-5205 y Fj(\017)45 b Ft(")p Fk(Source)p Ft(")p Fk(,)35
-b(or)e Ft(")p Fk(src)p Ft(")p Fk(:)49 b(The)34 b(rest-frame)f(of)h(the)
-h(source.)55 b(This)35 b(standard)e(of)h(rest)g(m)n(ust)g(b)r(e)h
-(quali\014ed)427 5304 y(using)28 b(the)f(RefRA,)i(RefDec)f(and)g
-(SourceV)-7 b(el)27 b(attributes.)227 5507 y(Where)i(more)f(than)h(one)
-f(alternativ)n(e)g(System)h(v)-5 b(alue)29 b(is)f(sho)n(wn)g(ab)r(o)n
-(v)n(e,)g(the)h(\014rst)g(of)g(these)g(will)g(b)r(e)g(returned)227
-5607 y(when)f(an)f(enquiry)g(is)h(made.)p eop end
-%%Page: 458 468
-TeXDict begin 458 467 bop 0 52 a FG(458)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Strict)322 b Fd(Rep)s(ort)38 b(an)h(error)e(if)h
-(an)m(y)g(unexp)s(eted)h(data)f(items)f(are)1717 598
-y(found?)3448 483 y FA(Strict)0 792 y Fc(Description:)44
-b Fk(This)24 b(is)f(a)g(b)r(o)r(olean)f(attribute)i(whic)n(h)f
-(indicates)g(whether)g(a)g(w)n(arning)f(rather)g(than)i(an)f(error)e
-(should)227 891 y(b)r(e)29 b(issed)g(for)f(insigni\014can)n(t)g(con)n
-(v)n(ersion)e(problems.)40 b(If)29 b(it)g(is)f(set)h(non-zero,)e(then)j
-(fatal)e(errors)f(are)g(issued)i(in-)227 991 y(stead)c(of)h(w)n
-(arnings,)e(resulting)h(in)g(the)h(inherited)g(ST)-7
-b(A)g(TUS)26 b(v)-5 b(ariable)25 b(b)r(eing)g(set)h(to)f(an)g(error)e
-(v)-5 b(alue.)37 b(If)25 b(Strict)227 1091 y(is)d(zero)f(\(the)i
-(default\),)h(then)f(execution)f(con)n(tin)n(ues)f(after)h(minor)f(con)
-n(v)n(ersion)f(problems,)j(and)f(a)f(w)n(arning)g(mes-)227
-1190 y(sage)d(is)g(added)h(to)g(the)g(Channel)f(structure.)34
-b(Suc)n(h)19 b(messages)e(can)h(b)r(e)h(retriev)n(ed)f(using)g(the)h
-(AST)p Ft(_)p Fk(W)-9 b(ARNINGS)227 1290 y(function.)0
-1468 y Fc(T)m(yp)s(e:)227 1568 y Fk(In)n(teger)27 b(\(b)r(o)r(olean\).)
-0 1746 y Fc(Class)k(Applicabilit)m(y:)259 1911 y(Channel)427
-2011 y Fk(All)d(Channels)g(ha)n(v)n(e)e(this)i(attribute.)0
-2201 y Fc(Notes:)340 2513 y Fj(\017)45 b Fk(This)30 b(attribute)g(w)n
-(as)f(in)n(tro)r(duced)g(in)i(AST)f(v)n(ersion)e(5.0.)43
-b(Prior)28 b(to)i(this)g(v)n(ersion)e(of)i(AST)g(unexp)r(ected)427
-2612 y(data)g(items)h(read)f(b)n(y)h(a)f(basic)g(Channel)h(alw)n(a)n
-(ys)e(caused)h(an)g(error)f(to)h(b)r(e)i(rep)r(orted.)45
-b(So)31 b(applications)427 2712 y(link)n(ed)21 b(against)e(v)n(ersions)
-g(of)i(AST)g(prior)e(to)i(v)n(ersion)e(5.0)h(ma)n(y)g(not)g(b)r(e)h
-(able)g(to)f(read)g(Ob)5 b(ject)20 b(descriptions)427
-2811 y(created)27 b(b)n(y)g(later)g(v)n(ersions)f(of)i(AST,)g(if)g(the)
-g(Ob)5 b(ject's)27 b(class)g(description)g(has)g(c)n(hanged.)p
-0 3039 V 0 3178 a FA(St)l(yle\(elemen)l(t\))1159 3171
-y Fd(Line)39 b(st)m(yle)f(for)g(a)g(Plot)g(elemen)m(t)2925
-3178 y FA(St)l(yle\(elemen)l(t\))0 3402 y Fc(Description:)44
-b Fk(This)39 b(attribute)f(determines)g(the)h(line)g(st)n(yle)f(used)g
-(when)h(dra)n(wing)e(eac)n(h)g(elemen)n(t)i(of)f(graphical)227
-3502 y(output)i(pro)r(duced)g(b)n(y)f(a)h(Plot.)72 b(It)40
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40 b(for)f(eac)n(h)g(graphical)
-f(elemen)n(t)i(so)f(that,)k(for)227 3601 y(instance,)f(the)e(setting)f
-Ft(")p Fk(St)n(yle\(b)r(order\)=2)p Ft(")e Fk(causes)i(the)g(Plot)g(b)r
-(order)f(to)i(b)r(e)f(dra)n(wn)g(using)g(line)g(st)n(yle)g(2)227
-3701 y(\(whic)n(h)28 b(migh)n(t)g(result)f(in,)h(sa)n(y)-7
-b(,)26 b(a)i(dashed)f(line\).)227 3840 y(The)35 b(range)f(of)h(in)n
-(teger)f(line)h(st)n(yles)g(a)n(v)-5 b(ailable)33 b(and)i(their)g(app)r
-(earance)f(is)h(determined)g(b)n(y)g(the)g(underlying)227
-3939 y(graphics)25 b(system.)36 b(The)26 b(default)h(b)r(eha)n(viour)e
-(is)h(for)f(all)h(graphical)e(elemen)n(ts)i(to)g(b)r(e)h(dra)n(wn)e
-(using)h(the)g(default)227 4039 y(line)i(st)n(yle)f(supplied)h(b)n(y)g
-(this)f(graphics)g(system)g(\(normally)-7 b(,)27 b(this)h(is)f(lik)n
-(ely)g(to)h(giv)n(e)e(a)i(solid)f(line\).)0 4217 y Fc(T)m(yp)s(e:)227
-4317 y Fk(In)n(teger.)0 4495 y Fc(Class)k(Applicabilit)m(y:)259
-4660 y(Plot)427 4760 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 4950 y Fc(Notes:)340 5262 y Fj(\017)45 b Fk(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-5409 y Fj(\017)45 b Fk(If)33 b(no)f(graphical)f(elemen)n(t)i(is)f(sp)r
-(eci\014ed,)j(\(e.g.)51 b Ft(")p Fk(St)n(yle)p Ft(")32
-b Fk(instead)g(of)g Ft(")p Fk(St)n(yle\(b)r(order\))p
-Ft(")p Fk(\),)h(then)g(a)f Ft(")p Fk(set)p Ft(")427 5508
-y Fk(or)26 b Ft(")p Fk(clear)p Ft(")f Fk(op)r(eration)h(will)g
-(a\013ect)h(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e
-(elemen)n(ts,)i(while)g(a)f Ft(")p Fk(get)p Ft(")f Fk(or)427
-5608 y Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)g(will)h(use)f(just)h
-(the)g(St)n(yle\(Border\))f(v)-5 b(alue.)p eop end
-%%Page: 459 469
-TeXDict begin 459 468 bop 3643 52 a FG(459)p 0 351 3780
-12 v 0 490 a FA(Sym)l(b)t(ol\(axis\))1575 483 y Fd(Axis)39
-b(sym)m(b)s(ol)3011 490 y FA(Sym)l(b)t(ol\(axis\))0 690
-y Fc(Description:)44 b Fk(This)37 b(attribute)g(sp)r(eci\014es)g(a)f
-(short-form)g(sym)n(b)r(ol)g(to)h(b)r(e)g(used)g(to)g(represen)n(t)e
-(co)r(ordinate)h(v)-5 b(alues)227 790 y(for)32 b(a)f(particular)g(axis)
-g(of)h(a)f(F)-7 b(rame.)49 b(This)32 b(migh)n(t)g(b)r(e)g(used)g
-(\(e.g.\))50 b(in)32 b(algebraic)e(expressions)g(where)h(a)h(full)227
-890 y(description)37 b(of)g(the)g(axis)f(w)n(ould)g(b)r(e)i
-(inappropriate.)63 b(Examples)36 b(include)h Ft(")p Fk(RA)p
-Ft(")g Fk(and)g Ft(")p Fk(Dec)p Ft(")f Fk(\(for)h(Righ)n(t)227
-989 y(Ascension)27 b(and)h(Declination\).)227 1116 y(If)g(a)f(Sym)n(b)r
-(ol)h(v)-5 b(alue)27 b(has)h(not)f(b)r(een)h(set)g(for)f(a)g(F)-7
-b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)f(supplied.)0
-1271 y Fc(T)m(yp)s(e:)227 1371 y Fk(String.)0 1525 y
-Fc(Class)k(Applicabilit)m(y:)259 1667 y(F)-8 b(rame)427
-1767 y Fk(The)24 b(default)h(Sym)n(b)r(ol)e(v)-5 b(alue)24
-b(supplied)g(b)n(y)g(the)g(F)-7 b(rame)24 b(class)f(is)g(the)i(string)e
-Ft(")p Fm(<)p Fk(Domain)p Fm(><)p Fk(n)p Fm(>)p Ft(")p
-Fk(,)f(where)427 1866 y Fm(<)p Fk(n)p Fm(>)34 b Fk(is)g(1,)h(2,)g(etc.)
-57 b(for)33 b(successiv)n(e)g(axes,)i(and)f Fm(<)p Fk(Domain)p
-Fm(>)f Fk(is)h(the)g(v)-5 b(alue)34 b(of)g(the)g(F)-7
-b(rame's)34 b(Domain)427 1966 y(attribute)25 b(\(truncated)g(if)h
-(necessary)d(so)h(that)h(the)g(\014nal)g(string)f(do)r(es)h(not)f
-(exceed)h(15)f(c)n(haracters\).)34 b(If)25 b(no)427 2065
-y(Domain)j(v)-5 b(alue)29 b(has)e(b)r(een)i(set,)f Ft(")p
-Fk(x)p Ft(")g Fk(is)g(used)g(as)g(the)g Fm(<)p Fk(Domain)p
-Fm(>)g Fk(v)-5 b(alue)28 b(in)g(constructing)g(this)g(default)427
-2165 y(string.)259 2301 y Fc(SkyF)-8 b(rame)427 2400
-y Fk(The)30 b(SkyF)-7 b(rame)29 b(class)g(re-de\014nes)g(the)i(default)
-f(Sym)n(b)r(ol)g(v)-5 b(alue)30 b(\(e.g.)44 b(to)29 b
-Ft(")p Fk(RA)p Ft(")h Fk(or)f Ft(")p Fk(Dec)p Ft(")p
-Fk(\))h(as)f(appro-)427 2500 y(priate)e(for)g(the)h(particular)f
-(celestial)g(co)r(ordinate)f(system)i(b)r(eing)f(represen)n(ted.)259
-2635 y Fc(TimeF)-8 b(rame)427 2735 y Fk(The)33 b(TimeF)-7
-b(rame)33 b(class)f(re-de\014nes)g(the)h(default)g(Sym)n(b)r(ol)g(v)-5
-b(alue)33 b(as)f(appropriate)f(for)i(the)g(particular)427
-2835 y(time)28 b(system)g(b)r(eing)f(represen)n(ted.)259
-2970 y Fc(F)-8 b(rameSet)427 3070 y Fk(The)23 b(Sym)n(b)r(ol)g
-(attribute)g(of)g(a)f(F)-7 b(rameSet)23 b(axis)f(is)g(the)h(same)g(as)f
-(that)h(of)g(its)g(curren)n(t)f(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)
-427 3169 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)0
-3336 y Fc(Notes:)340 3624 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 3724 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0
-3928 V 0 4059 a FA(System)733 4060 y Fd(Co)s(ordinate)37
-b(system)h(used)h(to)f(describ)s(e)h(p)s(ositions)1418
-4175 y(within)e(the)i(domain)3355 4059 y FA(System)0
-4345 y Fc(Description:)44 b Fk(In)25 b(general)e(it)i(is)f(p)r(ossible)
-g(for)g(p)r(ositions)g(within)h(a)f(giv)n(en)g(ph)n(ysical)g(domain)g
-(to)g(b)r(e)h(describ)r(ed)f(using)227 4445 y(one)38
-b(of)g(sev)n(eral)f(di\013eren)n(t)h(co)r(ordinate)f(systems.)68
-b(F)-7 b(or)38 b(instance,)j(the)d(SkyF)-7 b(rame)38
-b(class)f(can)h(use)g(galactic)227 4545 y(co)r(ordinates,)f(equatorial)
-e(co)r(ordinates,)h(etc,)j(to)d(describ)r(e)g(p)r(ositions)f(on)h(the)h
-(sky)-7 b(.)62 b(As)36 b(another)f(example,)227 4644
-y(the)j(Sp)r(ecF)-7 b(rame)37 b(class)f(can)g(use)h(frequency)-7
-b(,)39 b(w)n(a)n(v)n(elength,)f(v)n(elo)r(cit)n(y)-7
-b(,)39 b(etc,)h(to)d(describ)r(e)f(a)h(p)r(osition)g(within)227
-4744 y(an)f(electromagnetic)f(sp)r(ectrum.)64 b(The)36
-b(System)h(attribute)f(iden)n(ti\014es)h(the)g(particular)e(co)r
-(ordinate)g(system)227 4843 y(represen)n(ted)29 b(b)n(y)g(a)g(F)-7
-b(rame.)42 b(Eac)n(h)28 b(class)h(of)g(F)-7 b(rame)29
-b(de\014nes)h(a)f(set)g(of)h(acceptable)e(v)-5 b(alues)30
-b(for)f(this)g(attribute,)227 4943 y(as)e(listed)h(b)r(elo)n(w)e(\(all)
-i(are)e(case)h(insensitiv)n(e\).)36 b(Where)27 b(more)g(than)g(one)g
-(alternativ)n(e)f(System)i(v)-5 b(alue)27 b(is)g(sho)n(wn,)227
-5043 y(the)h(\014rst)g(of)f(will)h(b)r(e)g(returned)f(when)h(an)f
-(enquiry)g(is)h(made.)0 5197 y Fc(T)m(yp)s(e:)227 5297
-y Fk(String.)0 5452 y Fc(Class)j(Applicabilit)m(y:)259
-5593 y(F)-8 b(rame)427 5693 y Fk(The)28 b(System)g(attribute)f(for)h(a)
-f(basic)g(F)-7 b(rame)27 b(alw)n(a)n(ys)e(equals)i Ft(")p
-Fk(Cartesian)p Ft(")p Fk(,)f(and)h(ma)n(y)g(not)h(b)r(e)g(altered.)p
-eop end
-%%Page: 460 470
-TeXDict begin 460 469 bop 0 52 a FG(460)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(CmpF)-8 b(rame)427 451 y Fk(The)27 b(System)g(attribute)f(for)g(a)
-h(CmpF)-7 b(rame)26 b(alw)n(a)n(ys)f(equals)g Ft(")p
-Fk(Comp)r(ound)p Ft(")p Fk(,)h(and)h(ma)n(y)f(not)g(b)r(e)h(altered.)
-427 551 y(In)21 b(addition,)g(the)g(CmpF)-7 b(rame)20
-b(class)f(allo)n(ws)g(the)i(System)f(attribute)g(to)g(b)r(e)h
-(referenced)e(for)h(a)g(comp)r(onen)n(t)427 650 y(F)-7
-b(rame)25 b(b)n(y)g(including)h(the)g(index)f(of)g(an)g(axis)g(within)h
-(the)g(required)e(comp)r(onen)n(t)h(F)-7 b(rame.)36 b(F)-7
-b(or)25 b(instance,)427 750 y Ft(")p Fk(System\(3\))p
-Ft(")h Fk(refers)g(to)g(the)h(System)f(attribute)h(of)f(the)h(comp)r
-(onen)n(t)f(F)-7 b(rame)26 b(whic)n(h)g(includes)h(axis)f(3)g(of)427
-849 y(the)i(CmpF)-7 b(rame.)259 993 y Fc(F)f(rameSet)427
-1093 y Fk(The)27 b(System)f(attribute)h(of)f(a)h(F)-7
-b(rameSet)26 b(is)g(the)h(same)f(as)g(that)g(of)h(its)g(curren)n(t)e(F)
--7 b(rame)26 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427 1192
-y(the)h(Curren)n(t)f(attribute\).)259 1336 y Fc(SkyF)-8
-b(rame)427 1436 y Fk(The)26 b(SkyF)-7 b(rame)25 b(class)f(supp)r(orts)h
-(the)h(follo)n(wing)e(System)i(v)-5 b(alues)25 b(and)h(asso)r(ciated)e
-(celestial)h(co)r(ordinate)427 1535 y(systems:)510 1775
-y Fj(\017)45 b Ft(")p Fk(AZEL)p Ft(")p Fk(:)33 b(Horizon)20
-b(co)r(ordinates.)34 b(The)21 b(longitude)g(axis)g(is)g(azim)n(uth)h
-(suc)n(h)f(that)h(geographic)d(north)597 1875 y(has)j(an)g(azim)n(uth)g
-(of)h(zero)e(and)h(geographic)e(east)i(has)g(an)g(azim)n(uth)g(of)g
-(+PI/2)f(radians.)34 b(The)22 b(zenith)597 1974 y(has)f(elev)-5
-b(ation)21 b(+PI/2.)33 b(When)21 b(con)n(v)n(erting)f(to)h(and)g(from)g
-(other)f(celestial)h(co)r(ordinate)f(systems,)i(no)597
-2074 y(corrections)g(are)h(applied)h(for)g(atmospheric)f(refraction)g
-(or)g(p)r(olar)g(motion)h(\(ho)n(w)n(ev)n(er,)f(a)g(correction)597
-2174 y(for)28 b(diurnal)g(ab)r(erattion)g(is)g(applied\).)40
-b(Note,)29 b(unlik)n(e)f(most)h(other)f(celestial)g(co)r(ordinate)f
-(systems,)597 2273 y(this)38 b(system)g(is)g(righ)n(t)f(handed.)68
-b(Also,)40 b(unlik)n(e)e(other)f(SkyF)-7 b(rame)37 b(systems,)j(the)e
-(AzEl)g(system)597 2373 y(is)j(sensitiv)n(e)g(to)g(the)g(timescale)g
-(in)g(whic)n(h)g(the)h(Ep)r(o)r(c)n(h)e(v)-5 b(alue)41
-b(is)g(supplied.)78 b(This)41 b(is)g(b)r(ecause)597 2472
-y(of)c(the)g(gross)d(diurnal)i(rotation)f(whic)n(h)i(this)g(system)f
-(undergo)r(es,)h(causing)f(a)g(small)g(c)n(hange)f(in)597
-2572 y(time)c(to)e(translate)g(to)h(a)g(large)e(rotation.)43
-b(When)30 b(con)n(v)n(erting)e(to)i(or)f(from)h(an)f(AzEl)h(system,)g
-(the)597 2672 y(Ep)r(o)r(c)n(h)d(v)-5 b(alue)27 b(for)g(b)r(oth)g
-(source)f(and)h(destination)g(SkyF)-7 b(rames)26 b(should)h(b)r(e)h
-(supplied)f(in)h(the)f(TDB)597 2771 y(timescale.)36 b(The)27
-b(di\013erence)f(b)r(et)n(w)n(een)g(TDB)h(and)f(TT)g(is)h(b)r(et)n(w)n
-(een)f(1)g(and)g(2)g(milliseconds,)g(and)g(so)597 2871
-y(a)d(TT)h(v)-5 b(alue)23 b(can)g(usually)g(b)r(e)h(supplied)g(in)g
-(place)f(of)g(a)h(TDB)f(v)-5 b(alue.)36 b(The)23 b(TT)h(timescale)f(is)
-g(related)597 2971 y(to)28 b(T)-7 b(AI)28 b(via)f(TT)g(=)h(T)-7
-b(AI)28 b(+)f(32.184)e(seconds.)510 3092 y Fj(\017)45
-b Ft(")p Fk(ECLIPTIC)p Ft(")p Fk(:)31 b(Ecliptic)20 b(co)r(ordinates)f
-(\(IA)n(U)i(1980\),)f(referred)f(to)h(the)g(ecliptic)h(and)f(mean)f
-(equino)n(x)597 3192 y(sp)r(eci\014ed)28 b(b)n(y)f(the)h(qualifying)g
-(Equino)n(x)e(v)-5 b(alue.)510 3314 y Fj(\017)45 b Ft(")p
-Fk(FK4)p Ft(")p Fk(:)35 b(The)26 b(old)g(FK4)g(\(barycen)n(tric\))f
-(equatorial)g(co)r(ordinate)g(system,)h(whic)n(h)h(should)f(b)r(e)g
-(qual-)597 3413 y(i\014ed)k(b)n(y)g(an)f(Equino)n(x)g(v)-5
-b(alue.)43 b(The)30 b(underlying)g(mo)r(del)f(on)h(whic)n(h)g(this)g
-(is)g(based)f(is)h(non-inertial)597 3513 y(and)f(rotates)f(slo)n(wly)h
-(with)g(time,)h(so)f(for)g(accurate)f(w)n(ork)f(FK4)i(co)r(ordinate)f
-(systems)h(should)g(also)597 3612 y(b)r(e)f(quali\014ed)g(b)n(y)f(an)g
-(Ep)r(o)r(c)n(h)g(v)-5 b(alue.)510 3734 y Fj(\017)45
-b Ft(")p Fk(FK4-NO-E)p Ft(")24 b Fk(or)h Ft(")p Fk(FK4)p
-Ft(_)p Fk(NO)p Ft(_)p Fk(E)p Ft(")p Fk(:)33 b(The)26
-b(old)g(FK4)g(\(barycen)n(tric\))f(equatorial)g(system)h(but)g(with-)
-597 3834 y(out)32 b(the)g Ft(")p Fk(E-terms)f(of)h(ab)r(erration)p
-Ft(")e Fk(\(e.g.)49 b(some)31 b(radio)g(catalogues\).)48
-b(This)32 b(co)r(ordinate)f(system)597 3933 y(should)d(also)e(b)r(e)i
-(quali\014ed)g(b)n(y)f(b)r(oth)h(an)f(Equino)n(x)g(and)g(an)g(Ep)r(o)r
-(c)n(h)g(v)-5 b(alue.)510 4055 y Fj(\017)45 b Ft(")p
-Fk(FK5)p Ft(")26 b Fk(or)g Ft(")p Fk(EQUA)-7 b(TORIAL)p
-Ft(")p Fk(:)35 b(The)27 b(mo)r(dern)g(FK5)f(\(barycen)n(tric\))g
-(equatorial)g(co)r(ordinate)g(sys-)597 4155 y(tem.)38
-b(This)27 b(should)h(b)r(e)g(quali\014ed)f(b)n(y)g(an)h(Equino)n(x)e(v)
--5 b(alue.)510 4276 y Fj(\017)45 b Ft(")p Fk(GALA)n(CTIC)p
-Ft(")p Fk(:)37 b(Galactic)27 b(co)r(ordinates)f(\(IA)n(U)i(1958\).)510
-4398 y Fj(\017)45 b Ft(")p Fk(GAPPT)p Ft(")p Fk(,)36
-b Ft(")p Fk(GEOCENTRIC)p Ft(")d Fk(or)h Ft(")p Fk(APP)-7
-b(ARENT)p Ft(")p Fk(:)50 b(The)35 b(geo)r(cen)n(tric)e(apparen)n(t)h
-(equatorial)597 4497 y(co)r(ordinate)j(system,)j(whic)n(h)e(giv)n(es)e
-(the)i(apparen)n(t)f(p)r(ositions)g(of)h(sources)e(relativ)n(e)h(to)h
-(the)g(true)597 4597 y(plane)28 b(of)f(the)h(Earth's)e(equator)h(and)g
-(the)h(equino)n(x)f(\(the)h(co)r(ordinate)e(origin\))h(at)g(a)g(time)h
-(sp)r(eci\014ed)597 4697 y(b)n(y)i(the)f(qualifying)g(Ep)r(o)r(c)n(h)h
-(v)-5 b(alue.)42 b(\(Note)30 b(that)g(no)f(Equino)n(x)f(is)i(needed)f
-(to)h(qualify)f(this)h(co)r(ordi-)597 4796 y(nate)e(system)f(b)r
-(ecause)g(no)g(mo)r(del)g Ft(")p Fk(mean)g(equino)n(x)p
-Ft(")f Fk(is)h(in)n(v)n(olv)n(ed.\))36 b(These)27 b(co)r(ordinates)f
-(giv)n(e)g(the)597 4896 y(apparen)n(t)i(righ)n(t)g(ascension)g(and)h
-(declination)f(of)h(a)g(source)e(for)i(a)f(sp)r(eci\014ed)h(date)g(of)g
-(observ)-5 b(ation,)597 4996 y(and)31 b(therefore)f(form)h(an)g(appro)n
-(ximate)e(basis)h(for)h(p)r(oin)n(ting)g(a)g(telescop)r(e.)46
-b(Note,)32 b(ho)n(w)n(ev)n(er,)e(that)597 5095 y(they)35
-b(are)e(applicable)g(to)h(a)g(\014ctitious)g(observ)n(er)e(at)i(the)g
-(Earth's)f(cen)n(tre,)i(and)f(therefore)f(ignore)597
-5195 y(suc)n(h)20 b(e\013ects)g(as)g(atmospheric)f(refraction)g(and)h
-(the)g(\(normally)g(m)n(uc)n(h)g(smaller\))f(ab)r(erration)g(of)h(ligh)
-n(t)597 5295 y(due)34 b(to)f(the)g(rotational)f(v)n(elo)r(cit)n(y)g(of)
-h(the)g(Earth's)f(surface.)53 b(Geo)r(cen)n(tric)32 b(apparen)n(t)g(co)
-r(ordinates)597 5394 y(are)26 b(deriv)n(ed)f(from)i(the)g(standard)e
-(FK5)h(\(J2000.0\))e(barycen)n(tric)h(co)r(ordinates)g(b)n(y)i(taking)e
-(accoun)n(t)597 5494 y(of)h(the)h(gra)n(vitational)c(de\015ection)j(of)
-g(ligh)n(t)g(b)n(y)f(the)i(Sun)f(\(usually)g(small\),)g(the)g(ab)r
-(erration)f(of)h(ligh)n(t)597 5593 y(caused)i(b)n(y)g(the)h(motion)f
-(of)h(the)f(Earth's)g(cen)n(tre)f(with)i(resp)r(ect)g(to)f(the)h
-(barycen)n(tre)d(\(larger\),)i(and)597 5693 y(the)g(precession)e(and)i
-(n)n(utation)f(of)h(the)g(Earth's)e(spin)i(axis)f(\(normally)g(larger)e
-(still\).)p eop end
-%%Page: 461 471
-TeXDict begin 461 470 bop 3643 52 a FG(461)510 351 y
-Fj(\017)45 b Ft(")p Fk(HELIOECLIPTIC)p Ft(")p Fk(:)32
-b(Ecliptic)24 b(co)r(ordinates)e(\(IA)n(U)j(1980\),)e(referred)f(to)i
-(the)g(ecliptic)g(and)g(mean)597 451 y(equino)n(x)31
-b(of)h(J2000.0,)f(in)h(whic)n(h)g(an)f(o\013set)h(is)g(added)g(to)f
-(the)i(longitude)e(v)-5 b(alue)32 b(whic)n(h)g(results)f(in)597
-551 y(the)f(cen)n(tre)f(of)g(the)h(sun)g(b)r(eing)f(at)h(zero)e
-(longitude)h(at)h(the)f(date)h(giv)n(en)e(b)n(y)i(the)f(Ep)r(o)r(c)n(h)
-g(attribute.)597 650 y(A)n(ttempts)k(to)f(set)g(a)f(v)-5
-b(alue)32 b(for)g(the)g(Equino)n(x)f(attribute)h(will)g(b)r(e)g
-(ignored,)g(since)g(this)g(system)g(is)597 750 y(alw)n(a)n(ys)26
-b(referred)g(to)i(J2000.0.)510 867 y Fj(\017)45 b Ft(")p
-Fk(ICRS)p Ft(")p Fk(:)54 b(The)36 b(In)n(ternation)f(Celestial)h
-(Reference)f(System,)k(realised)c(through)g(the)i(Hipparcos)597
-967 y(catalogue.)j(Whilst)30 b(not)f(an)g(equatorial)f(system)h(b)n(y)g
-(de\014nition,)h(the)f(ICRS)h(is)f(v)n(ery)f(close)g(to)h(the)597
-1066 y(FK5)37 b(\(J2000\))e(system)i(and)g(is)g(usually)g(treated)g(as)
-f(an)h(equatorial)f(system.)65 b(The)37 b(distinction)597
-1166 y(b)r(et)n(w)n(een)d(ICRS)h(and)f(FK5)f(\(J2000\))f(only)i(b)r
-(ecomes)g(imp)r(ortan)n(t)g(when)g(accuracies)e(of)i(50)f(milli-)597
-1266 y(arcseconds)26 b(or)h(b)r(etter)h(are)e(required.)36
-b(ICRS)28 b(need)g(not)f(b)r(e)h(quali\014ed)g(b)n(y)f(an)g(Equino)n(x)
-g(v)-5 b(alue.)510 1383 y Fj(\017)45 b Ft(")p Fk(J2000)p
-Ft(")p Fk(:)h(An)34 b(equatorial)e(co)r(ordinate)g(system)h(based)g(on)
-g(the)h(mean)g(dynamical)f(equator)f(and)597 1482 y(equino)n(x)j(of)h
-(the)h(J2000)c(ep)r(o)r(c)n(h.)62 b(The)36 b(dynamical)g(equator)f(and)
-g(equino)n(x)g(di\013er)i(sligh)n(tly)e(from)597 1582
-y(those)40 b(used)h(b)n(y)f(the)h(FK5)f(mo)r(del,)k(and)c(so)g(a)g
-Ft(")p Fk(J2000)p Ft(")d Fk(SkyF)-7 b(rame)40 b(will)g(di\013er)h
-(sligh)n(tly)f(from)597 1682 y(an)31 b Ft(")p Fk(FK5\(Equino)n
-(x=J2000\))p Ft(")26 b Fk(SkyF)-7 b(rame.)47 b(The)32
-b(J2000)d(System)i(need)g(not)g(b)r(e)h(quali\014ed)f(b)n(y)g(an)597
-1781 y(Equino)n(x)c(v)-5 b(alue)510 1899 y Fj(\017)45
-b Ft(")p Fk(SUPER)n(GALA)n(CTIC)p Ft(")p Fk(:)36 b(De)28
-b(V)-7 b(aucouleurs)26 b(Sup)r(ergalactic)h(co)r(ordinates.)510
-2016 y Fj(\017)45 b Ft(")p Fk(UNKNO)n(WN)p Ft(")p Fk(:)54
-b(An)n(y)36 b(other)g(general)f(spherical)g(co)r(ordinate)g(system.)63
-b(No)36 b(Mapping)g(can)g(b)r(e)597 2115 y(created)27
-b(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(SkyF)-7 b(rames)26
-b(if)i(either)g(of)f(the)h(SkyF)-7 b(rames)26 b(has)h(System)g(set)h
-(to)f Ft(")p Fk(Un-)597 2215 y(kno)n(wn)p Ft(")p Fk(.)427
-2350 y(Curren)n(tly)-7 b(,)30 b(the)g(default)h(System)f(v)-5
-b(alue)29 b(is)h Ft(")p Fk(ICRS)p Ft(")p Fk(.)43 b(Ho)n(w)n(ev)n(er,)29
-b(this)h(default)g(ma)n(y)f(c)n(hange)g(in)h(future)427
-2450 y(as)d(new)g(astrometric)e(standards)h(ev)n(olv)n(e.)35
-b(The)27 b(in)n(ten)n(tion)g(is)g(to)g(trac)n(k)e(the)j(most)f(mo)r
-(dern)f(appropriate)427 2549 y(standard.)53 b(F)-7 b(or)33
-b(this)h(reason,)f(y)n(ou)g(should)g(use)g(the)h(default)f(only)g(if)h
-(this)g(is)f(what)g(y)n(ou)g(in)n(tend)g(\(and)427 2649
-y(can)f(tolerate)g(an)n(y)f(asso)r(ciated)g(sligh)n(t)h(c)n(hange)f(in)
-i(future\).)51 b(If)33 b(y)n(ou)f(in)n(tend)g(to)g(use)h(the)f(ICRS)h
-(system)427 2748 y(inde\014nitely)-7 b(,)29 b(then)f(y)n(ou)f(should)g
-(sp)r(ecify)h(it)g(explicitly)-7 b(.)259 2883 y Fc(Sp)s(ecF)f(rame)427
-2983 y Fk(The)23 b(Sp)r(ecF)-7 b(rame)22 b(class)g(supp)r(orts)g(the)h
-(follo)n(wing)e(System)i(v)-5 b(alues)22 b(and)h(asso)r(ciated)e(sp)r
-(ectral)h(co)r(ordinate)427 3083 y(systems)i(\(the)h(default)g(is)g
-Ft(")p Fk(W)-9 b(A)g(VE)p Ft(")23 b Fk(-)h(w)n(a)n(v)n(elength\).)35
-b(They)24 b(are)g(all)g(de\014ned)h(in)f(FITS-W)n(CS)h(pap)r(er)f(I)r
-(I)r(I:)510 3309 y Fj(\017)45 b Ft(")p Fk(FREQ)p Ft(")p
-Fk(:)36 b(F)-7 b(requency)27 b(\(GHz\))510 3426 y Fj(\017)45
-b Ft(")p Fk(ENER)p Ft(")27 b Fk(or)f Ft(")p Fk(ENER)n(GY)p
-Ft(")p Fk(:)36 b(Energy)26 b(\(J\))510 3544 y Fj(\017)45
-b Ft(")p Fk(W)-9 b(A)g(VN)p Ft(")28 b Fk(or)f Ft(")p
-Fk(W)-9 b(A)g(VENUM)p Ft(")p Fk(:)36 b(W)-7 b(a)n(v)n(e-n)n(um)n(b)r
-(er)26 b(\(1/m\))510 3661 y Fj(\017)45 b Ft(")p Fk(W)-9
-b(A)g(VE)p Ft(")27 b Fk(or)g Ft(")p Fk(W)-9 b(A)g(VELEN)p
-Ft(")p Fk(:)35 b(V)-7 b(acuum)28 b(w)n(a)n(v)n(e-length)e(\(Angstrom\))
-510 3778 y Fj(\017)45 b Ft(")p Fk(A)-9 b(W)g(A)g(V)p
-Ft(")28 b Fk(or)e Ft(")p Fk(AIR)-9 b(W)g(A)g(VE)p Ft(")p
-Fk(:)36 b(W)-7 b(a)n(v)n(e-length)27 b(in)h(air)e(\(Angstrom\))510
-3895 y Fj(\017)45 b Ft(")p Fk(VRAD)p Ft(")28 b Fk(or)f
-Ft(")p Fk(VRADIO)p Ft(")p Fk(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))510 4013 y Fj(\017)45 b Ft(")p Fk(V)n(OPT)p
-Ft(")26 b Fk(or)h Ft(")p Fk(V)n(OPTICAL)p Ft(")p Fk(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))510 4130
-y Fj(\017)45 b Ft(")p Fk(ZOPT)p Ft(")26 b Fk(or)h Ft(")p
-Fk(REDSHIFT)p Ft(")p Fk(:)36 b(Redshift)29 b(\(dimensionless\))510
-4247 y Fj(\017)45 b Ft(")p Fk(BET)-7 b(A)p Ft(")p Fk(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))510 4364 y Fj(\017)45
-b Ft(")p Fk(VELO)p Ft(")26 b Fk(or)h Ft(")p Fk(VREL)p
-Ft(")p Fk(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fk(relativistic)p Ft(")p Fk(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))427
-4499 y(The)i(default)h(v)-5 b(alue)29 b(for)f(the)h(Unit)h(attribute)f
-(for)g(eac)n(h)f(system)g(is)h(sho)n(wn)g(in)g(paren)n(theses.)39
-b(Note)29 b(that)427 4599 y(the)i(default)f(v)-5 b(alue)30
-b(for)g(the)g(Activ)n(eUnit)h(\015ag)e(is)h(.TR)n(UE.)g(for)g(a)f(Sp)r
-(ecF)-7 b(rame,)31 b(meaning)f(that)g(c)n(hanges)427
-4699 y(to)g(the)g(Unit)g(attribute)g(for)f(a)g(Sp)r(ecF)-7
-b(rame)29 b(will)h(result)f(in)h(the)g(Sp)r(ecF)-7 b(rame)29
-b(b)r(eing)h(re-mapp)r(ed)f(within)427 4798 y(its)j(enclosing)e(F)-7
-b(rameSet)32 b(in)f(order)f(to)i(re\015ect)f(the)h(c)n(hange)e(in)i
-(units)f(\(see)h(AST)p Ft(_)p Fk(SET)-7 b(A)n(CTIVEUNIT)427
-4898 y(routine)27 b(for)h(further)f(information\).)259
-5033 y Fc(TimeF)-8 b(rame)427 5132 y Fk(The)21 b(TimeF)-7
-b(rame)21 b(class)f(supp)r(orts)h(the)g(follo)n(wing)f(System)h(v)-5
-b(alues)21 b(and)g(asso)r(ciated)e(co)r(ordinate)h(systems)427
-5232 y(\(the)29 b(default)f(is)f Ft(")p Fk(MJD)p Ft(")p
-Fk(\):)510 5459 y Fj(\017)45 b Ft(")p Fk(MJD)p Ft(")p
-Fk(:)37 b(Mo)r(di\014ed)28 b(Julian)f(Date)h(\(d\))510
-5576 y Fj(\017)45 b Ft(")p Fk(JD)p Ft(")p Fk(:)36 b(Julian)28
-b(Date)f(\(d\))510 5693 y Fj(\017)45 b Ft(")p Fk(JEPOCH)p
-Ft(")p Fk(:)35 b(Julian)27 b(ep)r(o)r(c)n(h)h(\(yr\))p
-eop end
-%%Page: 462 472
-TeXDict begin 462 471 bop 0 52 a FG(462)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)510 351
-y Fj(\017)45 b Ft(")p Fk(BEPOCH)p Ft(")p Fk(:)35 b(Besselian)27
-b(\(yr\))427 484 y(The)34 b(default)f(v)-5 b(alue)33
-b(for)g(the)h(Unit)g(attribute)f(for)g(eac)n(h)f(system)h(is)g(sho)n
-(wn)g(in)g(paren)n(theses.)52 b(Strictly)-7 b(,)427 584
-y(these)37 b(systems)e(should)i(not)f(allo)n(w)f(c)n(hanges)g(to)h(b)r
-(e)h(made)f(to)g(the)h(units.)63 b(F)-7 b(or)36 b(instance,)i(the)f
-(usual)427 684 y(de\014nition)26 b(of)g Ft(")p Fk(MJD)p
-Ft(")f Fk(and)h Ft(")p Fk(JD)p Ft(")f Fk(include)h(the)g(statemen)n(t)g
-(that)g(the)g(v)-5 b(alues)26 b(will)g(b)r(e)g(in)g(units)g(of)g(da)n
-(ys.)427 783 y(Ho)n(w)n(ev)n(er,)d(AST)h(do)r(es)g(allo)n(w)e(the)j
-(use)e(of)h(other)f(units)i(with)f(all)g(the)g(ab)r(o)n(v)n(e)e(supp)r
-(orted)i(systems)f(\(except)427 883 y(BEPOCH\),)38 b(on)g(the)g
-(understanding)g(that)h(con)n(v)n(ersion)d(to)i(the)g
-Ft(")p Fk(correct)p Ft(")f Fk(units)h(in)n(v)n(olv)n(es)f(nothing)427
-983 y(more)e(than)g(a)g(simple)h(scaling)e(\(1)i(yr)e(=)h(365.25)f(d,)j
-(1)e(d)h(=)f(24)f(h,)k(1)d(h)h(=)f(60)f(min,)k(1)d(min)h(=)f(60)f(s\).)
-427 1082 y(Besselian)e(ep)r(o)r(c)n(h)h(v)-5 b(alues)33
-b(are)f(de\014ned)i(in)f(terms)g(of)g(tropical)f(y)n(ears)g(of)h
-(365.2422)d(da)n(ys,)j(rather)f(than)427 1182 y(the)27
-b(usual)e(Julian)h(y)n(ear)f(of)h(365.25)e(da)n(ys.)35
-b(Therefore,)25 b(to)h(a)n(v)n(oid)f(an)n(y)g(confusion,)h(the)h(Unit)f
-(attribute)h(is)427 1281 y(automatically)i(cleared)g(to)g
-Ft(")p Fk(yr)p Ft(")g Fk(when)h(a)f(System)h(v)-5 b(alue)29
-b(of)h(BEPOCH)f(System)g(is)h(selected,)g(and)g(an)427
-1381 y(error)c(is)h(rep)r(orted)g(if)h(an)n(y)f(attempt)h(is)g
-(subsequen)n(tly)f(made)g(to)h(c)n(hange)e(the)i(Unit)h(attribute.)427
-1498 y(Note)42 b(that)g(the)h(default)f(v)-5 b(alue)42
-b(for)f(the)i(Activ)n(eUnit)f(\015ag)g(is)f(.TR)n(UE.)h(for)f(a)h
-(TimeF)-7 b(rame,)45 b(mean-)427 1597 y(ing)35 b(that)h(c)n(hanges)e
-(to)h(the)g(Unit)h(attribute)g(for)f(a)f(TimeF)-7 b(rame)35
-b(will)h(result)f(in)g(the)h(TimeF)-7 b(rame)35 b(b)r(e-)427
-1697 y(ing)40 b(re-mapp)r(ed)g(within)g(its)h(enclosing)e(F)-7
-b(rameSet)40 b(in)g(order)f(to)h(re\015ect)f(the)i(c)n(hange)e(in)h
-(units)h(\(see)427 1796 y(AST)p Ft(_)p Fk(SET)-7 b(A)n(CTIVEUNIT)28
-b(routine)f(for)g(further)g(information\).)259 1930 y
-Fc(FluxF)-8 b(rame)427 2029 y Fk(The)30 b(FluxF)-7 b(rame)30
-b(class)f(supp)r(orts)g(the)i(follo)n(wing)d(System)j(v)-5
-b(alues)29 b(and)h(asso)r(ciated)e(systems)i(for)f(mea-)427
-2129 y(suring)e(observ)n(ed)f(v)-5 b(alue:)510 2353 y
-Fj(\017)45 b Ft(")p Fk(FLXDN)p Ft(")p Fk(:)37 b(Flux)28
-b(p)r(er)g(unit)g(frequency)f(\(W/m)p Fj(^)p Fk(2/Hz\))510
-2469 y Fj(\017)45 b Ft(")p Fk(FLXDNW)p Ft(")p Fk(:)38
-b(Flux)28 b(p)r(er)f(unit)h(w)n(a)n(v)n(elength)e(\(W/m)p
-Fj(^)p Fk(2/Angstrom\))510 2586 y Fj(\017)45 b Ft(")p
-Fk(SF)n(CBR)p Ft(")p Fk(:)36 b(Surface)27 b(brigh)n(tness)g(in)h
-(frequency)f(units)h(\(W/m)p Fj(^)p Fk(2/Hz/arcmin)p
-Fj(\003\003)p Fk(2\))510 2702 y Fj(\017)45 b Ft(")p Fk(SF)n(CBR)-9
-b(W)p Ft(")p Fk(:)36 b(Surface)28 b(brigh)n(tness)e(in)i(w)n(a)n(v)n
-(elength)e(units)i(\(W/m)p Fj(^)p Fk(2/Angstrom/arcmin)p
-Fj(\003\003)p Fk(2\))427 2835 y(The)h(ab)r(o)n(v)n(e)e(lists)h(sp)r
-(eci\014ed)h(the)f(default)h(units)g(for)f(eac)n(h)f(System.)39
-b(If)29 b(an)f(explicit)h(v)-5 b(alue)28 b(is)g(set)g(for)g(the)427
-2935 y(Unit)e(attribute)f(but)g(no)g(v)-5 b(alue)25 b(is)g(set)f(for)h
-(System,)g(then)h(the)f(default)g(System)g(v)-5 b(alue)25
-b(is)g(determined)g(b)n(y)427 3035 y(the)j(Unit)f(string)g(\(if)g(the)h
-(units)f(are)f(not)h(appropriate)e(for)h(describing)h(an)n(y)f(of)h
-(the)g(supp)r(orted)g(Systems)427 3134 y(then)19 b(an)f(error)f(will)i
-(b)r(e)f(rep)r(orted)g(when)h(an)f(attempt)h(is)f(made)h(to)f(access)f
-(the)i(System)g(v)-5 b(alue\).)34 b(If)19 b(no)f(v)-5
-b(alue)427 3234 y(has)31 b(b)r(een)i(sp)r(eci\014ed)f(for)f(either)g
-(Unit)i(or)e(System,)h(then)h(System=FLXDN)f(and)g(Unit=W/m)p
-Fj(^)p Fk(2/Hz)427 3334 y(are)27 b(used.)p 0 3534 3780
-12 v 0 3672 a FA(T)-11 b(extLab\(axis\))1038 3665 y Fd(Dra)m(w)37
-b(descriptiv)m(e)g(axis)h(lab)s(els)g(for)g(a)1754 3780
-y(Plot?)2960 3672 y FA(T)-11 b(extLab\(axis\))0 3951
-y Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4050 y(AST)p Ft(_)p Fk(GRID)c(routine\))e(b)n(y)h
-(determining)g(whether)f(textual)h(lab)r(els)g(should)f(b)r(e)h(dra)n
-(wn)f(to)h(describ)r(e)f(the)h(quan-)227 4150 y(tit)n(y)30
-b(b)r(eing)f(represen)n(ted)f(on)g(eac)n(h)h(axis)f(of)h(a)f(Plot.)41
-b(It)30 b(tak)n(es)e(a)g(separate)g(v)-5 b(alue)29 b(for)f(eac)n(h)h
-(ph)n(ysical)f(axis)g(of)h(a)227 4250 y(Plot)i(so)f(that,)i(for)f
-(instance,)g(the)h(setting)e Ft(")p Fk(T)-7 b(extLab\(2\)=1)p
-Ft(")29 b Fk(sp)r(eci\014es)i(that)h(descriptiv)n(e)e(lab)r(els)g
-(should)h(b)r(e)227 4349 y(dra)n(wn)c(for)g(the)h(second)f(axis.)227
-4474 y(If)h(the)f(T)-7 b(extLab)27 b(v)-5 b(alue)27 b(of)g(a)g(Plot)f
-(axis)g(is)h(non-zero,)f(then)h(descriptiv)n(e)g(lab)r(els)g(will)g(b)r
-(e)g(dra)n(wn)f(for)h(that)g(axis,)227 4574 y(otherwise)j(they)h(will)g
-(b)r(e)g(omitted.)47 b(The)30 b(default)h(b)r(eha)n(viour)f(is)g(to)h
-(dra)n(w)f(descriptiv)n(e)g(lab)r(els)g(if)h(tic)n(k)g(marks)227
-4673 y(and)37 b(n)n(umerical)f(lab)r(els)h(are)f(b)r(eing)h(dra)n(wn)f
-(around)g(the)h(edges)f(of)h(the)g(plotting)g(area)f(\(see)h(the)g(Lab)
-r(elling)227 4773 y(attribute\),)28 b(but)h(to)e(omit)h(them)g
-(otherwise.)0 4923 y Fc(T)m(yp)s(e:)227 5023 y Fk(In)n(teger)f(\(b)r(o)
-r(olean\).)0 5173 y Fc(Class)k(Applicabilit)m(y:)259
-5310 y(Plot)427 5410 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 5572 y Fc(Notes:)p eop end
-%%Page: 463 473
-TeXDict begin 463 472 bop 3643 52 a FG(463)340 351 y
-Fj(\017)45 b Fk(The)c(text)g(used)f(for)g(the)h(descriptiv)n(e)f(lab)r
-(els)g(is)h(deriv)n(ed)e(from)i(the)f(Plot's)g(Lab)r(el\(axis\))g
-(attribute,)427 451 y(together)27 b(with)h(its)g(Unit\(axis\))g
-(attribute)g(if)g(appropriate)e(\(see)h(the)h(Lab)r(elUnits\(axis\))g
-(attribute\).)340 583 y Fj(\017)45 b Fk(The)20 b(dra)n(wing)f(of)h(n)n
-(umerical)f(axis)h(lab)r(els)f(for)h(a)g(Plot)f(\(whic)n(h)h(indicate)g
-(v)-5 b(alues)20 b(on)g(the)g(axis\))g(is)g(con)n(trolled)427
-683 y(b)n(y)28 b(the)g(NumLab\(axis\))f(attribute.)340
-815 y Fj(\017)45 b Fk(If)36 b(no)g(axis)e(is)i(sp)r(eci\014ed,)i
-(\(e.g.)60 b Ft(")p Fk(T)-7 b(extLab)p Ft(")35 b Fk(instead)g(of)h
-Ft(")p Fk(T)-7 b(extLab\(2\))p Ft(")p Fk(\),)37 b(then)f(a)f
-Ft(")p Fk(set)p Ft(")g Fk(or)f Ft(")p Fk(clear)p Ft(")427
-914 y Fk(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fk(get)p Ft(")f Fk(or)g Ft(")p Fk(test)p Ft(")h
-Fk(op)r(eration)427 1014 y(will)k(use)g(just)g(the)g(T)-7
-b(extLab\(1\))27 b(v)-5 b(alue.)p 0 1212 3780 12 v 0
-1350 a FA(T)-11 b(extLabGap\(axis\))1332 1343 y Fd(Spacing)38
-b(of)g(descriptiv)m(e)1360 1458 y(axis)g(lab)s(els)g(for)g(a)g(Plot)
-2714 1350 y FA(T)-11 b(extLabGap\(axis\))0 1627 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1726 y(AST)p Ft(_)p Fk(GRID)i(routine\))f(b)n(y)g(determining)h(where)e
-(descriptiv)n(e)h(axis)f(lab)r(els)h(are)g(placed)g(relativ)n(e)f(to)h
-(the)h(axes)227 1826 y(they)f(describ)r(e.)45 b(It)31
-b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)30 b(for)g(eac)n(h)g(ph)n
-(ysical)f(axis)h(of)g(a)g(Plot)g(so)g(that,)h(for)f(instance,)h(the)227
-1925 y(setting)e Ft(")p Fk(T)-7 b(extLabGap\(2\)=0.01)p
-Ft(")25 b Fk(sp)r(eci\014es)k(where)f(the)h(descriptiv)n(e)f(lab)r(el)g
-(for)g(the)h(second)f(axis)g(should)g(b)r(e)227 2025
-y(dra)n(wn.)227 2149 y(F)-7 b(or)27 b(eac)n(h)f(axis,)h(the)g(T)-7
-b(extLabGap)27 b(v)-5 b(alue)27 b(giv)n(es)f(the)h(spacing)f(b)r(et)n
-(w)n(een)i(the)f(descriptiv)n(e)f(lab)r(el)i(and)f(the)g(edge)227
-2249 y(of)k(a)f(b)r(o)n(x)g(enclosing)g(all)g(other)g(parts)g(of)g(the)
-h(annotated)f(grid)g(\(excluding)h(other)f(descriptiv)n(e)g(lab)r
-(els\).)46 b(The)227 2348 y(gap)25 b(is)g(measured)f(to)h(the)h
-(nearest)f(edge)f(of)i(the)f(lab)r(el)h(\(i.e.)36 b(the)26
-b(top)f(or)f(the)i(b)r(ottom\).)37 b(P)n(ositiv)n(e)23
-b(v)-5 b(alues)25 b(cause)227 2448 y(the)32 b(descriptiv)n(e)e(lab)r
-(el)i(to)f(b)r(e)g(placed)g(outside)g(the)h(b)r(ounding)f(b)r(o)n(x,)h
-(while)f(negativ)n(e)f(v)-5 b(alues)31 b(cause)f(it)i(to)f(b)r(e)227
-2548 y(placed)d(inside.)227 2672 y(The)34 b(T)-7 b(extLabGap)32
-b(v)-5 b(alue)33 b(should)g(b)r(e)h(giv)n(en)f(as)f(a)h(fraction)g(of)g
-(the)h(minim)n(um)g(dimension)f(of)g(the)h(plotting)227
-2771 y(area,)26 b(the)i(default)g(v)-5 b(alue)28 b(b)r(eing)g(+0.01.)0
-2920 y Fc(T)m(yp)s(e:)227 3020 y Fk(Floating)f(p)r(oin)n(t.)0
-3168 y Fc(Class)k(Applicabilit)m(y:)259 3304 y(Plot)427
-3404 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-3565 y Fc(Notes:)340 3847 y Fj(\017)45 b Fk(If)25 b(dra)n(wn,)f
-(descriptiv)n(e)g(lab)r(els)g(are)g(alw)n(a)n(ys)e(placed)j(at)f(the)h
-(edges)f(of)g(the)h(plotting)g(area,)e(ev)n(en)h(although)427
-3946 y(the)c(corresp)r(onding)e(n)n(umerical)h(lab)r(els)g(ma)n(y)g(b)r
-(e)h(dra)n(wn)f(along)f(axis)h(lines)h(in)g(the)g(in)n(terior)e(of)i
-(the)g(plotting)427 4046 y(area)26 b(\(see)i(the)g(Lab)r(elling)f
-(attribute\).)340 4178 y Fj(\017)45 b Fk(If)36 b(no)e(axis)g(is)h(sp)r
-(eci\014ed,)i(\(e.g.)58 b Ft(")p Fk(T)-7 b(extLabGap)p
-Ft(")34 b Fk(instead)g(of)h Ft(")p Fk(T)-7 b(extLabGap\(2\))p
-Ft(")p Fk(\),)36 b(then)f(a)f Ft(")p Fk(set)p Ft(")g
-Fk(or)427 4278 y Ft(")p Fk(clear)p Ft(")28 b Fk(op)r(eration)g(will)i
-(a\013ect)g(the)g(attribute)g(v)-5 b(alue)29 b(of)h(all)f(the)h(Plot)f
-(axes,)g(while)h(a)f Ft(")p Fk(get)p Ft(")f Fk(or)h Ft(")p
-Fk(test)p Ft(")427 4377 y Fk(op)r(eration)e(will)h(use)f(just)h(the)g
-(T)-7 b(extLabGap\(1\))27 b(v)-5 b(alue.)p 0 4575 V 0
-4707 a FA(Tic)l(kAll)441 b Fd(Dra)m(w)37 b(tic)m(k)h(marks)g(on)g(all)g
-(edges)h(of)f(a)g(Plot?)439 b FA(Tic)l(kAll)0 4898 y
-Fc(Description:)44 b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r
-(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g
-(with)h(the)227 4998 y(AST)p Ft(_)p Fk(GRID)f(routine\))e(b)n(y)g
-(determining)h(whether)f(tic)n(k)h(marks)e(should)i(b)r(e)g(dra)n(wn)e
-(on)h(all)h(edges)f(of)g(a)g(Plot.)227 5122 y(If)h(the)g(Tic)n(kAll)f
-(v)-5 b(alue)27 b(of)h(a)e(Plot)h(is)g(non-zero)f(\(the)i(default\),)g
-(then)g(tic)n(k)f(marks)g(will)g(b)r(e)h(dra)n(wn)e(on)h(all)g(edges)
-227 5222 y(of)c(the)g(Plot.)35 b(Otherwise,)23 b(they)g(will)g(b)r(e)g
-(dra)n(wn)f(only)g(on)h(those)f(edges)g(where)h(the)g(n)n(umerical)f
-(and)g(descriptiv)n(e)227 5322 y(axis)27 b(lab)r(els)g(are)g(dra)n(wn)g
-(\(see)g(the)h(Edge\(axis\))f(attribute\).)0 5470 y Fc(T)m(yp)s(e:)227
-5570 y Fk(In)n(teger)g(\(b)r(o)r(olean\).)0 5718 y Fc(Class)k
-(Applicabilit)m(y:)p eop end
-%%Page: 464 474
-TeXDict begin 464 473 bop 0 52 a FG(464)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(Plot)427 451 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-608 y Fc(Notes:)340 886 y Fj(\017)45 b Fk(In)26 b(some)g
-(circumstances,)f(n)n(umerical)g(lab)r(els)h(and)g(tic)n(k)g(marks)f
-(are)g(dra)n(wn)g(along)g(grid)g(lines)h(inside)g(the)427
-986 y(plotting)34 b(area,)g(rather)f(than)h(around)f(its)i(edges)e
-(\(see)h(the)g(Lab)r(elling)g(attribute\).)56 b(In)34
-b(this)g(case,)h(the)427 1085 y(v)-5 b(alue)28 b(of)f(the)h(Tic)n(kAll)
-g(attribute)g(is)f(ignored.)p 0 1276 3780 12 v 0 1407
-a FA(TimeOrigin)153 b Fd(The)35 b(zero)f(p)s(oin)m(t)f(for)h(TimeF)-10
-b(rame)33 b(axis)h(v)-7 b(alues)152 b FA(TimeOrigin)0
-1587 y Fc(Description:)44 b Fk(This)c(sp)r(eci\014es)f(the)g(origin)g
-(from)f(whic)n(h)i(all)f(time)g(v)-5 b(alues)39 b(are)g(measured.)71
-b(The)39 b(default)h(v)-5 b(alue)227 1687 y(\(zero\))24
-b(results)h(in)f(the)h(TimeF)-7 b(rame)25 b(describing)e(absolute)h
-(time)i(v)-5 b(alues)24 b(in)h(the)g(system)f(giv)n(en)g(b)n(y)g(the)h
-(System)227 1786 y(attribute)33 b(\(e.g.)53 b(MJD,)33
-b(Julian)f(ep)r(o)r(c)n(h,)j(etc\).)53 b(If)33 b(a)g(TimeF)-7
-b(rame)32 b(is)h(to)f(b)r(e)i(used)f(to)f(describ)r(e)h(elapsed)f(time)
-227 1886 y(since)f(some)f(origin,)h(the)g(TimeOrigin)f(attribute)h
-(should)f(b)r(e)h(set)g(to)g(hold)g(the)g(required)f(origin)f(v)-5
-b(alue.)47 b(The)227 1985 y(TimeOrigin)18 b(v)-5 b(alue)19
-b(stored)g(inside)g(the)h(TimeF)-7 b(rame)18 b(structure)h(is)g(mo)r
-(di\014ed)h(whenev)n(er)e(TimeF)-7 b(rame)18 b(attribute)227
-2085 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g(so)g(that)g(it)h(refers)f
-(to)h(the)g(original)e(momen)n(t)h(in)h(time.)0 2230
-y Fc(T)m(yp)s(e:)227 2330 y Fk(Floating)f(p)r(oin)n(t.)0
-2474 y Fc(Class)k(Applicabilit)m(y:)259 2606 y(TimeF)-8
-b(rame)427 2706 y Fk(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)-2 2863 y Fc(Input)33 b(F)-8 b(ormats)n(:)227
-3009 y Fk(The)43 b(formats)f(accepted)h(when)g(setting)g(a)f
-(TimeOrigin)g(v)-5 b(alue)43 b(are)f(listed)h(b)r(elo)n(w.)83
-b(They)42 b(are)g(all)h(case-)227 3109 y(insensitiv)n(e)27
-b(and)h(are)f(generally)f(toleran)n(t)g(of)i(extra)e(white)i(space)f
-(and)h(alternativ)n(e)e(\014eld)i(delimiters:)340 3363
-y Fj(\017)45 b Fk(Besselian)33 b(Ep)r(o)r(c)n(h:)48 b(Expressed)32
-b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i(decimal)g(places)f
-(\()p Ft(")p Fk(B1950)p Ft(")d Fk(or)427 3463 y Ft(")p
-Fk(B1976.13)p Ft(")24 b Fk(for)j(example\).)340 3591
-y Fj(\017)45 b Fk(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fk(J2000)p Ft(")e Fk(or)427 3691 y Ft(")p
-Fk(J2100.9)p Ft(")24 b Fk(for)j(example\).)340 3819 y
-Fj(\017)45 b Fk(Units:)62 b(An)40 b(unquali\014ed)g(decimal)f(v)-5
-b(alue)39 b(is)h(in)n(terpreted)f(as)g(a)g(v)-5 b(alue)40
-b(in)g(the)g(system)f(sp)r(eci\014ed)h(b)n(y)427 3918
-y(the)35 b(TimeF)-7 b(rame's)34 b(System)h(attribute,)i(in)e(the)g
-(units)g(giv)n(en)f(b)n(y)g(the)h(TimeF)-7 b(rame's)34
-b(Unit)h(attribute.)427 4018 y(Alternativ)n(ely)-7 b(,)35
-b(an)f(appropriate)e(unit)j(string)e(can)g(b)r(e)i(app)r(ended)f(to)g
-(the)g(end)g(of)g(the)g(\015oating)f(p)r(oin)n(t)427
-4118 y(v)-5 b(alue)20 b(\()p Ft(")p Fk(123.4)d(d)p Ft(")i
-Fk(for)g(example\),)i(in)e(whic)n(h)h(case)e(the)i(supplied)g(v)-5
-b(alue)19 b(is)g(scaled)g(in)n(to)g(the)h(units)f(sp)r(eci\014ed)427
-4217 y(b)n(y)28 b(the)g(Unit)g(attribute.)340 4346 y
-Fj(\017)45 b Fk(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fk(JD)h(2454321.9)p Ft(")23
-b Fk(for)k(example\).)340 4474 y Fj(\017)45 b Fk(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fk(MJD)h(54321.4)p Ft(")c Fk(for)j(example\).)340
-4602 y Fj(\017)45 b Fk(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 4702 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fk(1996-10-2)p
-Ft(")427 4801 y Fk(or)f Ft(")p Fk(1996-Oct-2.6)p Ft(")d
-Fk(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-4901 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-5029 y Fj(\017)45 b Fk(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 5129
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fk(1996-Oct-2)e(12:13:56.985)p Ft(")e Fk(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 5229 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fk(T)p Ft(")g
-Fk(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)-2 5386
-y Fc(Output)32 b(F)-8 b(ormat)n(:)227 5532 y Fk(When)27
-b(enquiring)e(TimeOrigin)g(v)-5 b(alues,)26 b(the)h(returned)e
-(formatted)h(\015oating)f(p)r(oin)n(t)i(v)-5 b(alue)26
-b(represen)n(ts)e(a)i(v)-5 b(alue)227 5632 y(in)28 b(the)g(TimeF)-7
-b(rame's)27 b(System,)h(in)g(the)g(unit)g(sp)r(eci\014ed)g(b)n(y)f(the)
-h(TimeF)-7 b(rame's)27 b(Unit)i(attribute.)p eop end
-%%Page: 465 475
-TeXDict begin 465 474 bop 3643 52 a FG(465)p 0 351 3780
-12 v 0 483 a FA(TimeScale)1014 b Fd(Time)38 b(scale)1013
-b FA(TimeScale)0 644 y Fc(Description:)44 b Fk(This)23
-b(attribute)g(iden)n(ti\014es)f(the)h(time)g(scale)f(to)h(whic)n(h)f
-(the)h(time)g(axis)f(v)-5 b(alues)22 b(of)h(a)f(TimeF)-7
-b(rame)22 b(refer,)227 743 y(and)28 b(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fk(Time)f(Scales)p
-Ft(")g Fk(section)g(\(b)r(elo)n(w\).)227 867 y(The)20
-b(default)g(TimeScale)g(v)-5 b(alue)19 b(dep)r(ends)i(on)e(the)h
-(curren)n(t)f(System)h(v)-5 b(alue;)22 b(if)e(the)h(curren)n(t)e(TimeF)
--7 b(rame)19 b(system)227 966 y(is)31 b Ft(")p Fk(Besselian)e(ep)r(o)r
-(c)n(h)p Ft(")h Fk(the)h(default)g(is)f Ft(")p Fk(TT)p
-Ft(")p Fk(,)h(otherwise)e(it)i(is)g Ft(")p Fk(T)-7 b(AI)p
-Ft(")p Fk(.)45 b(Note,)31 b(if)g(the)g(System)g(attribute)g(is)227
-1066 y(set)23 b(so)g(that)g(the)g(TimeF)-7 b(rame)23
-b(represen)n(ts)f(Besselian)g(Ep)r(o)r(c)n(h,)h(then)h(an)f(error)e
-(will)i(b)r(e)g(rep)r(orted)g(if)g(an)g(attempt)227 1165
-y(is)28 b(made)f(to)h(set)f(the)h(TimeScale)f(to)h(an)n(ything)f(other)
-g(than)h(TT.)227 1289 y(Note,)22 b(the)e(supp)r(orted)g(time)h(scales)e
-(fall)h(in)n(to)f(t)n(w)n(o)h(groups.)33 b(The)20 b(\014rst)g(group)e
-(con)n(taining)h(UT1,)j(GMST,)e(LAST)227 1388 y(and)29
-b(LMST)h(de\014ne)f(time)h(in)f(terms)g(of)g(the)g(orien)n(tation)f(of)
-h(the)h(earth.)41 b(The)29 b(second)f(group)g(\(con)n(taining)h(all)227
-1488 y(the)k(remaining)f(time)h(scales\))f(de\014ne)h(time)g(in)g
-(terms)g(of)f(an)h(atomic)f(pro)r(cess.)51 b(Since)33
-b(the)g(rate)f(of)h(rotation)227 1588 y(of)28 b(the)h(earth)e(v)-5
-b(aries)27 b(in)h(an)g(unpredictable)g(w)n(a)n(y)-7 b(,)27
-b(con)n(v)n(ersion)f(b)r(et)n(w)n(een)i(t)n(w)n(o)f(timescales)h(in)g
-(di\013eren)n(t)g(groups)227 1687 y(relies)i(on)f(a)h(v)-5
-b(alue)30 b(b)r(eing)g(supplied)g(for)g(the)g(Dut1)h(attribute)f
-(\(de\014ned)g(b)n(y)g(the)g(paren)n(t)g(F)-7 b(rame)29
-b(class\).)44 b(This)227 1787 y(attribute)30 b(sp)r(eci\014es)g(the)g
-(di\013erence)f(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h(UTC)f(time)i
-(scales,)e(in)h(seconds,)f(and)g(defaults)227 1886 y(to)f(zero.)36
-b(See)27 b(the)h(do)r(cumen)n(tation)f(for)g(the)h(Dut1)g(attribute)g
-(for)f(further)h(details.)0 2033 y Fc(T)m(yp)s(e:)227
-2133 y Fk(String.)0 2280 y Fc(Class)j(Applicabilit)m(y:)259
-2414 y(TimeF)-8 b(rame)427 2514 y Fk(All)28 b(TimeF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)-2 2673 y
-Fc(Time)j(Scales)n(:)227 2819 y Fk(The)d(TimeF)-7 b(rame)27
-b(class)g(supp)r(orts)g(the)h(follo)n(wing)e(TimeScale)i(v)-5
-b(alues)27 b(\(all)h(are)e(case-insensitiv)n(e\):)340
-3076 y Fj(\017)45 b Ft(")p Fk(T)-7 b(AI)p Ft(")27 b Fk(-)h(In)n
-(ternational)e(A)n(tomic)i(Time)340 3207 y Fj(\017)45
-b Ft(")p Fk(UTC)p Ft(")27 b Fk(-)h(Co)r(ordinated)e(Univ)n(ersal)h
-(Time)340 3337 y Fj(\017)45 b Ft(")p Fk(UT1)p Ft(")27
-b Fk(-)g(Univ)n(ersal)g(Time)340 3467 y Fj(\017)45 b
-Ft(")p Fk(GMST)p Ft(")27 b Fk(-)h(Green)n(wic)n(h)e(Mean)i(Sidereal)f
-(Time)340 3598 y Fj(\017)45 b Ft(")p Fk(LAST)p Ft(")27
-b Fk(-)h(Lo)r(cal)f(Apparen)n(t)g(Sidereal)g(Time)340
-3728 y Fj(\017)45 b Ft(")p Fk(LMST)p Ft(")27 b Fk(-)h(Lo)r(cal)e(Mean)i
-(Sidereal)f(Time)340 3859 y Fj(\017)45 b Ft(")p Fk(TT)p
-Ft(")27 b Fk(-)g(T)-7 b(errestrial)26 b(Time)340 3989
-y Fj(\017)45 b Ft(")p Fk(TDB)p Ft(")27 b Fk(-)h(Barycen)n(tric)d
-(Dynamical)j(Time)340 4119 y Fj(\017)45 b Ft(")p Fk(TCB)p
-Ft(")27 b Fk(-)g(Barycen)n(tric)f(Co)r(ordinate)g(Time)340
-4250 y Fj(\017)45 b Ft(")p Fk(TCG)p Ft(")27 b Fk(-)h(Geo)r(cen)n(tric)e
-(Co)r(ordinate)h(Time)340 4380 y Fj(\017)45 b Ft(")p
-Fk(L)-7 b(T)p Ft(")27 b Fk(-)g(Lo)r(cal)g(Time)h(\(the)g(o\013set)g
-(from)f(UTC)h(is)f(giv)n(en)g(b)n(y)h(attribute)f(L)-7
-b(TO\013set\))227 4539 y(An)19 b(v)n(ery)e(informativ)n(e)h
-(description)g(of)g(these)g(and)h(other)e(time)i(scales)f(is)g(a)n(v)-5
-b(ailable)17 b(at)h(h)n(ttp://www.ucolic)n(k.org/)p Fj(\030)p
-Fk(sla/leapsecs/timesca)o(les.h)n(tml.)-2 4686 y Fc(UTC)33
-b(W)-8 b(arnings)n(:)227 4833 y Fk(UTC)31 b(should)g(ideally)f(b)r(e)h
-(expressed)f(using)g(separate)g(hours,)g(min)n(utes)h(and)g(seconds)f
-(\014elds)g(\(or)g(at)h(least)f(in)227 4932 y(seconds)e(for)f(a)h(giv)n
-(en)g(date\))g(if)h(leap)f(seconds)f(are)g(to)h(b)r(e)h(tak)n(en)f(in)n
-(to)g(accoun)n(t.)38 b(Since)28 b(the)h(TimeF)-7 b(rame)28
-b(class)227 5032 y(represen)n(ts)e(eac)n(h)f(momen)n(t)i(in)g(time)g
-(using)g(a)f(single)g(\015oating)g(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-(\(the)g(axis)f(v)-5 b(alue\))27 b(there)f(will)h(b)r(e)227
-5131 y(an)f(am)n(biguit)n(y)f(during)g(a)h(leap)g(second.)35
-b(Th)n(us)26 b(an)g(error)e(of)i(up)g(to)g(1)f(second)g(can)h(result)g
-(when)g(using)f(AST)i(to)227 5231 y(con)n(v)n(ert)i(a)h(UTC)h(time)f
-(to)h(another)e(time)i(scale)e(if)i(the)g(time)g(o)r(ccurs)e(within)i
-(a)f(leap)g(second.)45 b(Leap)29 b(seconds)227 5331 y(o)r(ccur)f(at)h
-(most)g(t)n(wice)f(a)h(y)n(ear,)e(and)i(are)f(in)n(tro)r(duced)g(to)h
-(tak)n(e)f(accoun)n(t)g(of)h(v)-5 b(ariation)28 b(in)h(the)g(rotation)e
-(of)i(the)227 5430 y(earth.)35 b(The)22 b(most)g(recen)n(t)f(leap)h
-(second)f(o)r(ccurred)g(on)h(1st)f(Jan)n(uary)f(1999.)33
-b(Although)23 b(in)f(the)g(v)-5 b(ast)22 b(ma)5 b(jorit)n(y)21
-b(of)227 5530 y(cases)g(leap)h(second)g(am)n(biguities)f(w)n(on't)h
-(matter,)h(there)f(are)f(p)r(oten)n(tial)h(problems)g(in)g(on-line)g
-(data)f(acquisition)227 5630 y(systems)27 b(and)h(in)g(critical)f
-(applications)f(in)n(v)n(olving)g(taking)h(the)h(di\013erence)g(b)r(et)
-n(w)n(een)g(t)n(w)n(o)e(times.)p eop end
-%%Page: 466 476
-TeXDict begin 466 475 bop 0 52 a FG(466)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a FA(Title)1325 b Fd(F)-10 b(rame)38
-b(title)1323 b FA(Title)0 668 y Fc(Description:)44 b
-Fk(This)25 b(attribute)g(holds)g(a)f(string)g(whic)n(h)h(is)g(used)f
-(as)h(a)f(title)i(in)f(\(e.g.\))36 b(graphical)23 b(output)i(to)g
-(describ)r(e)227 767 y(the)32 b(co)r(ordinate)d(system)i(whic)n(h)g(a)f
-(F)-7 b(rame)31 b(represen)n(ts.)45 b(Examples)30 b(migh)n(t)h(b)r(e)g
-Ft(")p Fk(Detector)f(Co)r(ordinates)p Ft(")f Fk(or)227
-867 y Ft(")p Fk(Galactic)e(Co)r(ordinates)p Ft(")p Fk(.)227
-999 y(If)g(a)f(Title)h(v)-5 b(alue)26 b(has)g(not)g(b)r(een)h(set)f
-(for)g(a)g(F)-7 b(rame,)26 b(then)g(a)g(suitable)h(default)f(is)h
-(supplied,)g(dep)r(ending)f(on)g(the)227 1098 y(class)h(of)g(the)h(F)-7
-b(rame.)0 1262 y Fc(T)m(yp)s(e:)227 1362 y Fk(String.)0
-1526 y Fc(Class)31 b(Applicabilit)m(y:)259 1677 y(F)-8
-b(rame)427 1777 y Fk(The)33 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)32 b(class)g(is)g Ft(")p Fm(<)p Fk(n)p Fm(>)p
-Fk(-d)f(co)r(ordinate)h(system)p Ft(")p Fk(,)h(where)f
-Fm(<)p Fk(n)p Fm(>)g Fk(is)g(the)427 1876 y(n)n(um)n(b)r(er)c(of)f(F)-7
-b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259 2016 y
-Fc(CmpF)-8 b(rame)427 2116 y Fk(The)30 b(CmpF)-7 b(rame)30
-b(class)f(re-de\014nes)g(the)h(default)h(Title)f(v)-5
-b(alue)30 b(to)g(b)r(e)g Ft(")p Fm(<)p Fk(n)p Fm(>)p
-Fk(-d)f(comp)r(ound)h(co)r(ordinate)427 2216 y(system)p
-Ft(")p Fk(,)d(where)g Fm(<)p Fk(n)p Fm(>)g Fk(is)h(the)g(n)n(um)n(b)r
-(er)f(of)h(CmpF)-7 b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259
-2356 y Fc(F)-8 b(rameSet)427 2455 y Fk(The)32 b(Title)g(attribute)f(of)
-h(a)f(F)-7 b(rameSet)31 b(is)h(the)g(same)f(as)f(that)i(of)g(its)f
-(curren)n(t)g(F)-7 b(rame)31 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427
-2555 y(the)c(Curren)n(t)f(attribute\).)0 2732 y Fc(Notes:)340
-3029 y Fj(\017)45 b Fk(A)28 b(F)-7 b(rame's)26 b(Title)h(is)g(in)n
-(tended)h(purely)e(for)h(in)n(terpretation)f(b)n(y)h(h)n(uman)f
-(readers)g(and)h(not)g(b)n(y)f(soft)n(w)n(are.)p 0 3242
-V 0 3374 a FA(TitleGap)567 b Fd(V)-10 b(ertical)36 b(spacing)i(for)g(a)
-h(Plot)e(title)564 b FA(TitleGap)0 3582 y Fc(Description:)44
-b Fk(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-3682 y(AST)p Ft(_)p Fk(GRID)f(routine\))e(b)n(y)g(determining)h(where)f
-(the)h(title)g(of)g(a)f(Plot)g(is)g(dra)n(wn.)227 3814
-y(Its)32 b(v)-5 b(alue)31 b(giv)n(es)g(the)h(spacing)e(b)r(et)n(w)n
-(een)i(the)g(b)r(ottom)f(edge)g(of)h(the)g(title)g(and)f(the)h(top)g
-(edge)f(of)g(a)h(b)r(ounding)227 3913 y(b)r(o)n(x)23
-b(con)n(taining)f(all)h(the)h(other)f(parts)f(of)i(the)f(annotated)g
-(grid.)35 b(P)n(ositiv)n(e)22 b(v)-5 b(alues)22 b(cause)h(the)h(title)g
-(to)f(b)r(e)h(dra)n(wn)227 4013 y(outside)k(the)g(b)r(o)n(x,)f(while)h
-(negativ)n(e)e(v)-5 b(alues)27 b(cause)g(it)h(to)g(b)r(e)g(dra)n(wn)e
-(inside.)227 4145 y(The)j(TitleGap)f(v)-5 b(alue)28 b(should)h(b)r(e)f
-(giv)n(en)g(as)g(a)f(fraction)h(of)h(the)f(minim)n(um)h(dimension)g(of)
-f(the)h(plotting)f(area,)227 4244 y(the)g(default)g(v)-5
-b(alue)28 b(b)r(eing)f(+0.05.)0 4408 y Fc(T)m(yp)s(e:)227
-4508 y Fk(Floating)g(p)r(oin)n(t.)0 4672 y Fc(Class)k(Applicabilit)m
-(y:)259 4823 y(Plot)427 4923 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)259 5063 y Fc(Plot3D)427 5162 y Fk(The)h(Plot3D)f(class)g
-(ignores)f(this)h(attributes)h(since)f(it)h(do)r(es)g(not)f(dra)n(w)g
-(a)g(Title.)0 5339 y Fc(Notes:)340 5636 y Fj(\017)45
-b Fk(The)28 b(text)g(used)f(for)h(the)g(title)g(is)f(obtained)h(from)f
-(the)h(Plot's)f(Title)h(attribute.)p eop end
-%%Page: 467 477
-TeXDict begin 467 476 bop 3643 52 a FG(467)p 0 351 3780
-12 v 0 483 a FA(T)-11 b(ol)1243 b Fd(Plotting)36 b(tolerance)1242
-b FA(T)-11 b(ol)0 679 y Fc(Description:)44 b Fk(This)28
-b(attribute)f(sp)r(eci\014es)h(the)f(plotting)h(tolerance)e(\(or)h
-(resolution\))f(to)h(b)r(e)h(used)g(for)e(the)i(graphical)227
-779 y(output)f(pro)r(duced)e(b)n(y)g(a)h(Plot.)35 b(Smaller)26
-b(v)-5 b(alues)25 b(will)h(result)f(in)h(smo)r(other)f(and)h(more)f
-(accurate)f(curv)n(es)h(b)r(eing)227 878 y(dra)n(wn,)c(but)f(ma)n(y)f
-(slo)n(w)f(do)n(wn)h(the)h(plotting)g(pro)r(cess.)33
-b(Con)n(v)n(ersely)-7 b(,)19 b(larger)f(v)-5 b(alues)19
-b(ma)n(y)g(sp)r(eed)h(up)g(the)g(plotting)227 978 y(pro)r(cess)27
-b(in)h(cases)e(where)h(high)h(resolution)e(is)i(not)f(required.)227
-1104 y(The)k(T)-7 b(ol)31 b(v)-5 b(alue)31 b(should)g(b)r(e)h(giv)n(en)
-e(as)h(a)f(fraction)h(of)g(the)g(minim)n(um)h(dimension)f(of)g(the)h
-(plotting)f(area,)g(and)227 1204 y(should)d(lie)f(in)h(the)g(range)e
-(from)i(1.0E-7)d(to)j(1.0.)36 b(By)27 b(default,)h(a)f(v)-5
-b(alue)28 b(of)f(0.01)g(is)g(used.)0 1356 y Fc(T)m(yp)s(e:)227
-1455 y Fk(Floating)g(p)r(oin)n(t.)0 1608 y Fc(Class)k(Applicabilit)m
-(y:)259 1747 y(Plot)427 1846 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)p 0 2049 V 0 2187 a FA(T)-11 b(op\(axis\))1156
-2180 y Fd(Highest)37 b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)3224
-2187 y FA(T)-11 b(op\(axis\))0 2390 y Fc(Description:)44
-b Fk(This)21 b(attribute)f(giv)n(es)f(the)i(highest)f(axis)f(v)-5
-b(alue)20 b(to)g(b)r(e)h(displa)n(y)n(ed)e(\(for)h(instance,)h(b)n(y)f
-(the)h(AST)p Ft(_)p Fk(GRID)227 2489 y(metho)r(d\).)0
-2642 y Fc(T)m(yp)s(e:)227 2741 y Fk(Floating)27 b(p)r(oin)n(t.)0
-2893 y Fc(Class)k(Applicabilit)m(y:)259 3033 y(F)-8 b(rame)427
-3132 y Fk(The)28 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g(axis)g(v)-5
-b(alues,)27 b(without)h(an)n(y)f(limit.)259 3266 y Fc(SkyF)-8
-b(rame)427 3366 y Fk(The)34 b(SkyF)-7 b(rame)32 b(class)g(re-de\014nes)
-h(the)g(default)h(T)-7 b(op)33 b(v)-5 b(alue)33 b(to)g(+90)f(degrees)g
-(for)g(latitude)i(axes,)g(and)427 3466 y(180)26 b(degrees)g(for)h
-(co-latitude)g(axes.)36 b(The)28 b(default)f(for)g(longitude)h(axes)e
-(is)h(to)h(displa)n(y)e(all)h(axis)g(v)-5 b(alues.)0
-3630 y Fc(Notes:)340 3916 y Fj(\017)45 b Fk(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 4015 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0
-4217 V 0 4349 a FA(T)-11 b(ranF)g(orw)l(ard)289 b Fd(F)-10
-b(orw)m(ard)37 b(transformation)e(de\014ned?)290 b FA(T)-11
-b(ranF)g(orw)l(ard)0 4517 y Fc(Description:)44 b Fk(This)29
-b(attribute)f(indicates)h(whether)f(a)g(Mapping)g(is)h(able)f(to)g
-(transform)f(co)r(ordinates)g(in)i(the)g Ft(")p Fk(for-)227
-4617 y(w)n(ard)p Ft(")34 b Fk(direction)g(\(i.e.)60 b(con)n(v)n(erting)
-33 b(input)i(co)r(ordinates)f(in)n(to)h(output)g(co)r(ordinates\).)58
-b(If)35 b(this)h(attribute)f(is)227 4717 y(non-zero,)26
-b(the)i(forw)n(ard)e(transformation)g(is)i(a)n(v)-5 b(ailable.)35
-b(Otherwise,)27 b(it)h(is)f(not.)0 4869 y Fc(T)m(yp)s(e:)227
-4968 y Fk(In)n(teger)g(\(b)r(o)r(olean\),)h(read-only)-7
-b(.)0 5121 y Fc(Class)31 b(Applicabilit)m(y:)259 5260
-y(Mapping)427 5360 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 5494 y Fc(CmpMap)427 5593 y Fk(The)j(T)-7
-b(ranF)g(orw)n(ard)28 b(attribute)j(v)-5 b(alue)30 b(for)h(a)f(CmpMap)h
-(is)f(giv)n(en)g(b)n(y)g(the)h(b)r(o)r(olean)f(AND)i(of)f(the)g(v)-5
-b(alue)427 5693 y(for)27 b(eac)n(h)g(comp)r(onen)n(t)g(Mapping.)p
-eop end
-%%Page: 468 478
-TeXDict begin 468 477 bop 0 52 a FG(468)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fc(F)-8 b(rameSet)427 451 y Fk(The)31 b(T)-7 b(ranF)g(orw)n(ard)27
-b(attribute)k(of)f(a)g(F)-7 b(rameSet)30 b(applies)g(to)g(the)h
-(transformation)e(whic)n(h)h(con)n(v)n(erts)f(b)r(e-)427
-551 y(t)n(w)n(een)22 b(the)g(F)-7 b(rameSet's)22 b(base)f(F)-7
-b(rame)22 b(and)g(its)g(curren)n(t)f(F)-7 b(rame)21 b(\(as)h(sp)r
-(eci\014ed)g(b)n(y)g(the)g(Base)g(and)f(Curren)n(t)427
-650 y(attributes\).)37 b(This)27 b(v)-5 b(alue)27 b(is)g(giv)n(en)g(b)n
-(y)g(the)g(b)r(o)r(olean)g(AND)h(of)f(the)h(T)-7 b(ranF)g(orw)n(ard)24
-b(v)-5 b(alues)27 b(whic)n(h)g(apply)427 750 y(to)33
-b(eac)n(h)f(of)g(the)h(individual)g(sub-Mappings)f(required)f(to)i(p)r
-(erform)f(this)h(con)n(v)n(ersion.)50 b(The)32 b(T)-7
-b(ranF)g(or-)427 849 y(w)n(ard)25 b(attribute)h(v)-5
-b(alue)26 b(for)g(a)f(F)-7 b(rameSet)26 b(ma)n(y)f(therefore)g(c)n
-(hange)g(if)h(a)g(new)g(Base)f(or)g(Curren)n(t)g(F)-7
-b(rame)26 b(is)427 949 y(selected.)0 1106 y Fc(Notes:)340
-1383 y Fj(\017)45 b Fk(An)38 b(error)e(will)i(result)f(if)h(a)f
-(Mapping)h(with)g(a)f(T)-7 b(ranF)g(orw)n(ard)35 b(v)-5
-b(alue)37 b(of)h(zero)e(is)i(used)f(to)h(transform)427
-1483 y(co)r(ordinates)26 b(in)i(the)g(forw)n(ard)e(direction.)p
-0 1672 3780 12 v 0 1802 a FA(T)-11 b(ranIn)l(v)l(erse)1083
-1803 y Fd(In)m(v)m(erse)38 b(transformation)c(de\014ned?)3083
-1802 y FA(T)-11 b(ranIn)l(v)l(erse)0 1958 y Fc(Description:)44
-b Fk(This)31 b(attribute)g(indicates)g(whether)f(a)h(Mapping)f(is)h
-(able)f(to)h(transform)f(co)r(ordinates)f(in)i(the)g
-Ft(")p Fk(in-)227 2058 y(v)n(erse)p Ft(")26 b Fk(direction)i(\(i.e.)38
-b(con)n(v)n(erting)26 b(output)j(co)r(ordinates)d(bac)n(k)h(in)n(to)h
-(input)g(co)r(ordinates\).)37 b(If)28 b(this)g(attribute)227
-2158 y(is)g(non-zero,)e(the)i(in)n(v)n(erse)e(transformation)g(is)h(a)n
-(v)-5 b(ailable.)36 b(Otherwise,)27 b(it)h(is)f(not.)0
-2302 y Fc(T)m(yp)s(e:)227 2402 y Fk(In)n(teger)g(\(b)r(o)r(olean\),)h
-(readonly)-7 b(.)0 2546 y Fc(Class)31 b(Applicabilit)m(y:)259
-2677 y(Mapping)427 2777 y Fk(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 2904 y Fc(CmpMap)427 3004 y Fk(The)e(T)-7
-b(ranIn)n(v)n(erse)23 b(attribute)i(v)-5 b(alue)25 b(for)g(a)g(CmpMap)g
-(is)h(giv)n(en)e(b)n(y)h(the)h(b)r(o)r(olean)f(AND)h(of)f(the)h(v)-5
-b(alue)25 b(for)427 3103 y(eac)n(h)i(comp)r(onen)n(t)g(Mapping.)259
-3231 y Fc(F)-8 b(rameSet)427 3331 y Fk(The)19 b(T)-7
-b(ranIn)n(v)n(erse)17 b(attribute)i(of)g(a)g(F)-7 b(rameSet)19
-b(applies)g(to)f(the)i(transformation)d(whic)n(h)i(con)n(v)n(erts)f(b)r
-(et)n(w)n(een)427 3430 y(the)39 b(F)-7 b(rameSet's)38
-b(curren)n(t)g(F)-7 b(rame)38 b(and)g(its)g(base)g(F)-7
-b(rame)38 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)h(Curren)n(t)e(and)i
-(Base)427 3530 y(attributes\).)45 b(This)30 b(v)-5 b(alue)30
-b(is)f(giv)n(en)h(b)n(y)f(the)i(b)r(o)r(olean)e(AND)i(of)f(the)h(T)-7
-b(ranIn)n(v)n(erse)27 b(v)-5 b(alues)30 b(whic)n(h)g(apply)427
-3630 y(to)25 b(eac)n(h)e(of)i(the)g(individual)f(sub-Mappings)g
-(required)g(to)g(p)r(erform)g(this)h(con)n(v)n(ersion.)33
-b(The)25 b(T)-7 b(ranIn)n(v)n(erse)427 3729 y(attribute)40
-b(v)-5 b(alue)39 b(for)g(a)h(F)-7 b(rameSet)39 b(ma)n(y)g(therefore)f
-(c)n(hange)h(if)h(a)f(new)h(Base)e(or)h(Curren)n(t)g(F)-7
-b(rame)39 b(is)427 3829 y(selected.)0 3986 y Fc(Notes:)340
-4263 y Fj(\017)45 b Fk(An)c(error)e(will)h(result)g(if)h(a)f(Mapping)g
-(with)h(a)f(T)-7 b(ranIn)n(v)n(erse)38 b(v)-5 b(alue)40
-b(of)h(zero)e(is)h(used)h(to)f(transform)427 4363 y(co)r(ordinates)26
-b(in)i(the)g(in)n(v)n(erse)e(direction.)p 0 4551 V 0
-4690 a FA(Unit\(axis\))1404 4683 y Fd(Axis)39 b(ph)m(ysical)e(units)
-3180 4690 y FA(Unit\(axis\))0 4875 y Fc(Description:)44
-b Fk(This)35 b(attribute)f(con)n(tains)f(a)h(textual)g(represen)n
-(tation)f(of)h(the)h(ph)n(ysical)e(units)i(used)f(to)g(represen)n(t)227
-4974 y(co)r(ordinate)29 b(v)-5 b(alues)29 b(on)h(a)f(particular)f(axis)
-h(of)h(a)f(F)-7 b(rame.)43 b(The)29 b(AST)p Ft(_)p Fk(SET)-7
-b(A)n(CTIVEUNIT)30 b(routine)f(con)n(trols)227 5074 y(ho)n(w)e(the)h
-(Unit)h(v)-5 b(alues)27 b(are)f(used.)0 5218 y Fc(T)m(yp)s(e:)227
-5318 y Fk(String.)0 5462 y Fc(Class)31 b(Applicabilit)m(y:)259
-5593 y(F)-8 b(rame)427 5693 y Fk(The)28 b(default)g(supplied)g(b)n(y)f
-(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h(empt)n(y)f(string.)p
-eop end
-%%Page: 469 479
-TeXDict begin 469 478 bop 3643 52 a FG(469)259 351 y
-Fc(SkyF)-8 b(rame)427 451 y Fk(The)35 b(SkyF)-7 b(rame)34
-b(class)g(re-de\014nes)g(the)h(default)g(Unit)g(v)-5
-b(alue)35 b(\(e.g.)58 b(to)35 b Ft(")p Fk(hh:mm:ss.sss)p
-Ft(")p Fk(\))e(to)i(describ)r(e)427 551 y(the)g(c)n(haracter)e(string)h
-(returned)g(b)n(y)h(the)g(AST)p Ft(_)p Fk(F)n(ORMA)-7
-b(T)34 b(function)i(when)f(formatting)f(co)r(ordinate)427
-650 y(v)-5 b(alues.)259 778 y Fc(Sp)s(ecF)d(rame)427
-877 y Fk(The)24 b(Sp)r(ecF)-7 b(rame)23 b(class)g(re-de\014nes)f(the)i
-(default)g(Unit)g(v)-5 b(alue)24 b(so)f(that)g(it)h(is)g(appropriate)e
-(for)h(the)g(curren)n(t)427 977 y(System)30 b(v)-5 b(alue.)43
-b(See)29 b(the)h(System)g(attribute)g(for)f(details.)42
-b(An)30 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(an)f(attempt)427
-1076 y(is)f(made)f(to)h(use)f(an)g(inappropriate)f(Unit.)259
-1204 y Fc(TimeF)-8 b(rame)427 1303 y Fk(The)22 b(TimeF)-7
-b(rame)22 b(class)f(re-de\014nes)h(the)g(default)h(Unit)g(v)-5
-b(alue)22 b(so)f(that)h(it)h(is)f(appropriate)e(for)i(the)g(curren)n(t)
-427 1403 y(System)30 b(v)-5 b(alue.)43 b(See)29 b(the)h(System)g
-(attribute)g(for)f(details.)42 b(An)30 b(error)e(will)i(b)r(e)g(rep)r
-(orted)f(if)h(an)f(attempt)427 1503 y(is)f(made)f(to)h(use)f(an)g
-(inappropriate)f(Unit)j(\(e.g.)37 b Ft(")p Fk(km)p Ft(")p
-Fk(\).)259 1630 y Fc(F)-8 b(rameSet)427 1730 y Fk(The)29
-b(Unit)h(attribute)f(of)g(a)g(F)-7 b(rameSet)29 b(axis)f(is)h(the)h
-(same)e(as)g(that)i(of)f(its)g(curren)n(t)f(F)-7 b(rame)29
-b(\(as)f(sp)r(eci\014ed)427 1829 y(b)n(y)g(the)g(Curren)n(t)e
-(attribute\).)0 1986 y Fc(Notes:)340 2263 y Fj(\017)45
-b Fk(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g(name,)i(it)f
-(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r(er)f(of)g
-(the)427 2362 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p
-0 2551 3780 12 v 0 2683 a FA(UnitRadius)318 b Fd(SphMap)39
-b(input)f(v)m(ectors)g(lie)g(on)g(a)h(unit)1699 2797
-y(sphere?)3106 2683 y FA(UnitRadius)0 2975 y Fc(Description:)44
-b Fk(This)30 b(is)f(a)g(b)r(o)r(olean)g(attribute)h(whic)n(h)f
-(indicates)h(whether)f(the)h(3-dimensional)e(v)n(ectors)g(whic)n(h)i
-(are)227 3075 y(supplied)i(as)f(input)i(to)e(a)g(SphMap)h(are)f(kno)n
-(wn)g(to)g(alw)n(a)n(ys)f(ha)n(v)n(e)g(unit)i(length,)h(so)e(that)h
-(they)g(lie)f(on)h(a)f(unit)227 3174 y(sphere)c(cen)n(tred)g(on)h(the)g
-(origin.)227 3296 y(If)36 b(this)h(condition)e(is)h(true)g(\(indicated)
-g(b)n(y)f(setting)h(UnitRadius)g(non-zero\),)h(it)f(implies)g(that)g(a)
-g(CmpMap)227 3396 y(whic)n(h)e(is)g(comp)r(osed)f(of)h(a)g(SphMap)g
-(applied)g(in)g(the)g(forw)n(ard)f(direction)g(follo)n(w)n(ed)g(b)n(y)h
-(a)f(similar)g(SphMap)227 3495 y(applied)22 b(in)h(the)f(in)n(v)n(erse)
-f(direction)h(ma)n(y)f(b)r(e)i(simpli\014ed)f(\(e.g.)35
-b(b)n(y)22 b(AST)p Ft(_)p Fk(SIMPLIFY\))g(to)g(b)r(ecome)g(a)g
-(UnitMap.)227 3595 y(This)j(is)f(b)r(ecause)g(the)h(input)g(and)f
-(output)h(v)n(ectors)e(will)h(b)r(oth)h(ha)n(v)n(e)e(unit)i(length)g
-(and)f(will)h(therefore)e(ha)n(v)n(e)g(the)227 3695 y(same)k(co)r
-(ordinate)g(v)-5 b(alues.)227 3816 y(If)35 b(UnitRadius)g(is)g(zero)e
-(\(the)j(default\),)h(then)e(although)f(the)h(output)g(v)n(ector)e(pro)
-r(duced)h(b)n(y)h(the)g(CmpMap)227 3916 y(\(ab)r(o)n(v)n(e\))25
-b(will)g(still)g(ha)n(v)n(e)f(unit)i(length,)g(the)f(input)h(v)n(ector)
-e(ma)n(y)g(not)h(ha)n(v)n(e.)35 b(This)25 b(will,)h(in)f(general,)f(c)n
-(hange)g(the)227 4016 y(co)r(ordinate)j(v)-5 b(alues,)27
-b(so)g(it)h(prev)n(en)n(ts)e(the)i(pair)f(of)h(SphMaps)f(b)r(eing)h
-(simpli\014ed.)0 4160 y Fc(T)m(yp)s(e:)227 4259 y Fk(In)n(teger)f(\(b)r
-(o)r(olean\).)0 4403 y Fc(Class)k(Applicabilit)m(y:)259
-4534 y(SphMap)427 4634 y Fk(All)d(SphMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)0 4790 y Fc(Notes:)340 5067 y Fj(\017)45
-b Fk(This)28 b(attribute)g(is)g(in)n(tended)h(mainly)e(for)h(use)g
-(when)g(SphMaps)g(are)e(in)n(v)n(olv)n(ed)h(in)h(a)g(sequence)f(of)h
-(Map-)427 5167 y(pings)35 b(whic)n(h)g(pro)5 b(ject)34
-b(\(e.g.\))59 b(a)35 b(dataset)f(on)h(to)g(the)g(celestial)g(sphere.)58
-b(By)35 b(regarding)e(the)i(celestial)427 5267 y(sphere)24
-b(as)f(a)h(unit)h(sphere)e(\(and)h(setting)g(UnitRadius)h(to)f(b)r(e)g
-(non-zero\))f(it)i(b)r(ecomes)e(p)r(ossible)h(to)g(cancel)427
-5366 y(the)31 b(SphMaps)g(presen)n(t,)f(along)g(with)h(asso)r(ciated)e
-(sky)h(pro)5 b(jections,)30 b(when)g(t)n(w)n(o)g(datasets)g(are)f
-(aligned)427 5466 y(using)f(celestial)f(co)r(ordinates.)35
-b(This)28 b(often)g(considerably)e(impro)n(v)n(es)f(p)r(erformance.)340
-5593 y Fj(\017)45 b Fk(Suc)n(h)29 b(a)g(situations)f(often)i(arises)d
-(when)i(in)n(terpreting)f(FITS)i(data)e(and)h(is)g(handled)g
-(automatically)f(b)n(y)427 5693 y(the)g(FitsChan)g(class.)p
-eop end
-%%Page: 470 480
-TeXDict begin 470 479 bop 0 52 a FG(470)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(The)28 b(v)-5 b(alue)27 b(of)g(the)h(UnitRadius)g
-(attribute)g(is)f(used)g(only)g(to)h(con)n(trol)e(the)i
-(simpli\014cation)f(of)g(Mappings)427 451 y(and)i(has)f(no)h(e\013ect)g
-(on)g(the)g(v)-5 b(alue)28 b(of)h(the)g(co)r(ordinates)f(transformed)f
-(b)n(y)i(a)f(SphMap.)41 b(The)29 b(lengths)g(of)427 551
-y(the)f(input)f(3-dimensional)f(Cartesian)f(v)n(ectors)h(supplied)h
-(are)f(alw)n(a)n(ys)f(ignored,)h(ev)n(en)g(if)h(UnitRadius)h(is)427
-650 y(non-zero.)p 0 855 3780 12 v 0 986 a FA(UseDefs)262
-b Fd(Use)39 b(default)f(v)-7 b(alues)38 b(for)g(unsp)s(eci\014ed)h
-(attributes?)259 b FA(UseDefs)0 1181 y Fc(Description:)44
-b Fk(This)36 b(attribute)h(sp)r(eci\014es)e(whether)h(default)h(v)-5
-b(alues)35 b(should)h(b)r(e)h(used)f(in)n(ternally)f(for)g(ob)5
-b(ject)36 b(at-)227 1280 y(tributes)41 b(whic)n(h)g(ha)n(v)n(e)f(not)h
-(b)r(een)g(assigned)f(a)h(v)-5 b(alue)40 b(explicitly)-7
-b(.)77 b(If)42 b(a)e(non-zero)g(v)-5 b(alue)40 b(\(the)i(default\))g
-(is)227 1380 y(supplied)26 b(for)f(UseDefs,)h(then)g(default)g(v)-5
-b(alues)24 b(will)i(b)r(e)g(used)f(for)g(attributes)g(whic)n(h)g(ha)n
-(v)n(e)f(not)i(explicitly)f(b)r(een)227 1479 y(assigned)i(a)h(v)-5
-b(alue.)39 b(If)29 b(zero)f(is)g(supplied)g(for)g(UseDefs,)h(then)g(an)
-f(error)f(will)h(b)r(e)h(rep)r(orted)f(if)h(an)f(attribute)g(for)227
-1579 y(whic)n(h)g(no)f(explicit)h(v)-5 b(alue)27 b(has)h(b)r(een)g
-(supplied)f(is)h(needed)g(in)n(ternally)f(within)h(AST.)227
-1706 y(Man)n(y)20 b(attributes)g(\(including)g(the)h(UseDefs)g
-(attribute)f(itself)6 b(\))21 b(are)e(una\013ected)i(b)n(y)f(the)g
-(setting)h(of)f(the)g(UseDefs)227 1806 y(attribute,)28
-b(and)g(default)g(v)-5 b(alues)27 b(will)h(alw)n(a)n(ys)e(b)r(e)i(used)
-g(without)g(error)e(for)h(suc)n(h)g(attributes.)37 b(The)28
-b Ft(")p Fk(Applica-)227 1906 y(bilit)n(y:)p Ft(")g Fk(section)f(b)r
-(elo)n(w)g(lists)h(the)g(attributes)f(whic)n(h)h(are)e(a\013ected)i(b)n
-(y)f(the)h(setting)g(of)g(UseDefs.)227 2033 y(Note,)23
-b(UseDefs)f(only)f(a\013ects)g(access)f(to)i(attributes)f(in)n
-(ternally)g(within)h(AST.)g(The)f(public)h(accessor)d(functions)227
-2132 y(suc)n(h)24 b(as)f(AST)p Ft(_)p Fk(GETC)h(is)g(una\013ected)g(b)n
-(y)g(the)g(UseDefs)g(attribute)h(-)e(default)i(v)-5 b(alues)23
-b(will)i(alw)n(a)n(ys)d(b)r(e)i(returned)227 2232 y(if)39
-b(no)g(v)-5 b(alue)38 b(has)g(b)r(een)h(set.)70 b(Application)39
-b(co)r(de)f(should)g(use)h(the)g(AST)p Ft(_)p Fk(TEST)f(function)h(if)g
-(required)f(to)227 2332 y(determine)28 b(if)g(a)f(v)-5
-b(alue)28 b(has)f(b)r(een)h(set)f(for)g(an)h(attribute.)0
-2486 y Fc(T)m(yp)s(e:)227 2586 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-2741 y Fc(Class)k(Applicabilit)m(y:)259 2883 y(Ob)5 b(ject)427
-2982 y Fk(All)24 b(Ob)5 b(jects)22 b(ha)n(v)n(e)g(this)i(attribute,)g
-(but)g(ignore)d(its)j(setting)f(except)g(as)f(describ)r(ed)h(b)r(elo)n
-(w)g(for)f(individual)427 3082 y(classes.)259 3217 y
-Fc(F)-8 b(rameSet)427 3317 y Fk(The)23 b(default)f(v)-5
-b(alue)22 b(of)h(UseDefs)f(for)g(a)g(F)-7 b(rameSet)22
-b(is)g(rede\014ned)g(to)g(b)r(e)h(the)f(UseDefs)h(v)-5
-b(alue)22 b(of)g(its)g(curren)n(t)427 3417 y(F)-7 b(rame.)259
-3552 y Fc(CmpF)f(rame)427 3652 y Fk(The)26 b(default)g(v)-5
-b(alue)25 b(of)h(UseDefs)g(for)f(a)g(CmpF)-7 b(rame)26
-b(is)f(rede\014ned)h(to)f(b)r(e)h(the)g(UseDefs)g(v)-5
-b(alue)26 b(of)f(its)h(\014rst)427 3751 y(comp)r(onen)n(t)i(F)-7
-b(rame.)259 3887 y Fc(Region)427 3986 y Fk(The)30 b(default)f(v)-5
-b(alue)29 b(of)g(UseDefs)h(for)f(a)f(Region)h(is)g(rede\014ned)g(to)g
-(b)r(e)h(the)f(UseDefs)h(v)-5 b(alue)29 b(of)g(its)g(encap-)427
-4086 y(sulated)f(F)-7 b(rame.)259 4222 y Fc(F)f(rame)427
-4321 y Fk(If)24 b(UseDefs)g(is)f(zero,)g(an)g(error)e(is)j(rep)r(orted)
-e(when)i(aligning)e(F)-7 b(rames)22 b(if)i(the)g(Ep)r(o)r(c)n(h,)g
-(ObsLat)e(or)h(ObsLon)427 4421 y(attribute)28 b(is)g(required)e(but)i
-(has)f(not)h(b)r(een)g(assigned)e(a)i(v)-5 b(alue)27
-b(explicitly)-7 b(.)259 4556 y Fc(SkyF)f(rame)427 4656
-y Fk(If)41 b(UseDefs)f(is)g(zero,)h(an)f(error)e(is)h(rep)r(orted)h
-(when)g(aligning)e(SkyF)-7 b(rames)39 b(if)i(an)n(y)e(of)g(the)i(follo)
-n(wing)427 4756 y(attributes)28 b(are)e(required)h(but)h(ha)n(v)n(e)f
-(not)g(b)r(een)h(assigned)f(a)g(v)-5 b(alue)27 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)28 b(Equino)n(x.)259 4891 y Fc(Sp)s(ecF)-8
-b(rame)427 4991 y Fk(If)38 b(UseDefs)g(is)g(zero,)h(an)e(error)f(is)h
-(rep)r(orted)g(when)h(aligning)e(Sp)r(ecF)-7 b(rames)37
-b(if)h(an)n(y)f(of)h(the)g(follo)n(wing)427 5090 y(attributes)24
-b(are)f(required)f(but)j(ha)n(v)n(e)d(not)i(b)r(een)g(assigned)e(a)i(v)
--5 b(alue)23 b(explicitly:)35 b(Ep)r(o)r(c)n(h,)24 b(RefRA,)h(RefDec,)
-427 5190 y(RestF)-7 b(req,)28 b(SourceV)-7 b(el,)27 b(StdOfRest.)259
-5326 y Fc(DSBSp)s(ecF)-8 b(rame)427 5425 y Fk(If)27 b(UseDefs)g(is)g
-(zero,)f(an)g(error)f(is)h(rep)r(orted)g(when)h(aligning)f(DSBSp)r(ecF)
--7 b(rames)26 b(or)g(when)h(accessing)e(the)427 5525
-y(ImagF)-7 b(req)25 b(attribute)h(if)g(an)n(y)f(of)h(the)g(follo)n
-(wing)f(attributes)g(are)g(required)g(but)h(ha)n(v)n(e)f(not)h(b)r(een)
-g(assigned)427 5624 y(a)h(v)-5 b(alue)28 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)27 b(DSBCen)n(tre,)h(IF.)p eop end
-%%Page: 471 481
-TeXDict begin 471 480 bop 3643 52 a FG(471)p 0 351 3780
-12 v 0 483 a FA(W)-11 b(arnings)345 b Fd(Con)m(trols)36
-b(the)j(issuing)f(of)g(w)m(arnings)f(ab)s(out)1429 598
-y(v)-7 b(arious)38 b(conditions)3224 483 y FA(W)-11 b(arnings)0
-745 y Fc(Description:)44 b Fk(This)27 b(attribute)g(con)n(trols)f(the)h
-(issuing)g(of)f(w)n(arnings)g(ab)r(out)h(selected)f(conditions)h(when)g
-(an)g(Ob)5 b(ject)227 845 y(or)28 b(k)n(eyw)n(ord)f(is)i(read)f(from)h
-(or)f(written)h(to)g(a)f(FitsChan.)41 b(The)29 b(v)-5
-b(alue)29 b(supplied)g(for)f(the)h(W)-7 b(arnings)28
-b(attribute)227 945 y(should)d(consist)f(of)h(a)g(space)f(separated)g
-(list)h(of)g(condition)g(names)f(\(see)h(the)h(AllW)-7
-b(arnings)24 b(attribute)h(for)g(a)f(list)227 1044 y(of)29
-b(the)g(curren)n(tly)f(de\014ned)h(names\).)41 b(Eac)n(h)28
-b(name)g(indicates)h(a)f(condition)h(whic)n(h)g(should)f(b)r(e)i(rep)r
-(orted.)40 b(The)227 1144 y(default)28 b(v)-5 b(alue)28
-b(for)f(W)-7 b(arnings)27 b(is)g(the)h(string)f Ft(")p
-Fk(Tnx)g(Zp)n(x)g(BadCel)g(BadMat)g(BadPV)g(BadCTYPE)p
-Ft(")p Fk(.)227 1264 y(The)e(text)h(of)f(an)n(y)f(w)n(arning)g(will)i
-(b)r(e)f(stored)f(within)i(the)g(FitsChan)f(in)g(the)h(form)f(of)g(one)
-g(or)f(more)g(new)h(header)227 1364 y(cards)i(with)i(k)n(eyw)n(ord)d
-(ASTW)-9 b(ARN.)29 b(If)f(required,)f(applications)g(can)h(c)n(hec)n(k)
-f(the)h(FitsChan)g(for)f(ASTW)-9 b(ARN)227 1463 y(cards)24
-b(\(using)h(AST)p Ft(_)p Fk(FINDFITS\))h(after)e(the)i(call)e(to)h(AST)
-p Ft(_)p Fk(READ)g(or)f(AST)p Ft(_)p Fk(WRITE)g(has)h(b)r(een)g(p)r
-(erformed,)227 1563 y(and)33 b(rep)r(ort)g(the)g(text)h(of)f(an)n(y)f
-(suc)n(h)h(cards)f(to)h(the)g(user.)53 b(ASTW)-9 b(ARN)34
-b(cards)e(will)i(b)r(e)f(propagated)e(to)i(an)n(y)227
-1662 y(output)28 b(header)f(unless)h(they)f(are)g(deleted)h(from)f(the)
-h(FitsChan)g(using)f(astDelFits.)0 1803 y Fc(T)m(yp)s(e:)227
-1903 y Fk(String)0 2043 y Fc(Class)k(Applicabilit)m(y:)259
-2171 y(FitsChan)427 2270 y Fk(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)0 2423 y Fc(Notes:)227 2569 y Fk(This)36
-b(attribute)g(only)g(con)n(trols)e(the)j(w)n(arnings)d(that)i(are)f(to)
-h(b)r(e)g(stored)f(as)h(a)f(set)h(of)g(header)f(cards)g(in)h(the)227
-2669 y(FitsChan)d(as)f(describ)r(ed)g(ab)r(o)n(v)n(e.)51
-b(It)33 b(has)f(no)g(e\013ect)h(on)g(the)g(storage)d(of)j(w)n(arnings)e
-(in)i(the)g(paren)n(t)f(Channel)227 2769 y(structure.)i(All)19
-b(w)n(arnings)e(are)h(stored)g(in)h(the)g(paren)n(t)f(Channel)h
-(structure,)h(from)f(where)f(they)h(can)g(b)r(e)g(retriev)n(ed)227
-2868 y(using)28 b(the)f(AST)p Ft(_)p Fk(W)-9 b(ARNINGS)29
-b(function.)p 0 3050 V 0 3188 a FA(WcsAxis\(lonlat\))1196
-3180 y Fd(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(axes)2826
-3188 y FA(WcsAxis\(lonlat\))0 3366 y Fc(Description:)44
-b Fk(This)21 b(attribute)g(giv)n(es)e(the)i(indices)g(of)g(the)g
-(longitude)f(and)h(latitude)g(co)r(ordinates)e(of)h(the)h(FITS-W)n(CS)
-227 3465 y(pro)5 b(jection)33 b(within)i(the)g(co)r(ordinate)e(space)g
-(used)h(b)n(y)g(a)f(WcsMap.)57 b(These)33 b(indices)h(are)f(de\014ned)i
-(when)f(the)227 3565 y(WcsMap)28 b(is)f(\014rst)g(created)g(using)h
-(AST)p Ft(_)p Fk(W)n(CSMAP)f(and)h(cannot)f(subsequen)n(tly)g(b)r(e)h
-(altered.)227 3685 y(If)j Ft(")p Fk(lonlat)p Ft(")d Fk(is)i(1,)g(the)h
-(index)f(of)g(the)g(longitude)g(axis)f(is)h(returned.)43
-b(Otherwise,)30 b(if)h(it)f(is)g(2,)g(the)g(index)g(of)g(the)227
-3785 y(latitude)e(axis)f(is)h(returned.)0 3925 y Fc(T)m(yp)s(e:)227
-4025 y Fk(In)n(teger,)f(read-only)-7 b(.)0 4165 y Fc(Class)31
-b(Applicabilit)m(y:)259 4293 y(WcsMap)427 4392 y Fk(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 4574 V 0 4705 a FA(WcsT)l(yp)t(e)1193
-4704 y Fd(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(t)m(yp)s(e)3227
-4705 y FA(WcsT)l(yp)t(e)0 4876 y Fc(Description:)44 b
-Fk(This)29 b(attribute)g(sp)r(eci\014es)g(whic)n(h)g(t)n(yp)r(e)g(of)f
-(FITS-W)n(CS)h(pro)5 b(jection)28 b(will)h(b)r(e)g(p)r(erformed)g(b)n
-(y)f(a)h(Wc-)227 4975 y(sMap.)49 b(The)32 b(v)-5 b(alue)32
-b(is)g(sp)r(eci\014ed)g(when)g(a)f(WcsMap)h(is)g(\014rst)f(created)g
-(using)h(AST)p Ft(_)p Fk(W)n(CSMAP)f(and)h(cannot)227
-5075 y(subsequen)n(tly)27 b(b)r(e)h(c)n(hanged.)227 5195
-y(The)36 b(v)-5 b(alues)36 b(used)g(are)f(represen)n(ted)f(b)n(y)i(sym)
-n(b)r(olic)f(constan)n(ts)g(with)i(names)e(of)h(the)g(form)g
-Ft(")p Fk(AST)p Ft(__)p Fk(XXX)p Ft(")p Fk(,)227 5295
-y(where)d Ft(")p Fk(XXX)p Ft(")f Fk(is)h(the)g(\(upp)r(er)g(case\))g
-(3-c)n(haracter)c(co)r(de)k(used)g(b)n(y)f(the)h(FITS-W)n(CS)g
-Ft(")p Fk(CTYPEi)p Ft(")e Fk(k)n(eyw)n(ord)227 5394 y(to)36
-b(iden)n(tify)g(the)g(pro)5 b(jection.)61 b(F)-7 b(or)35
-b(example,)i(p)r(ossible)f(v)-5 b(alues)35 b(are)g(AST)p
-Ft(__)p Fk(T)-7 b(AN)36 b(\(for)f(the)i(tangen)n(t)e(plane)227
-5494 y(or)e(gnomonic)h(pro)5 b(jection\))33 b(and)h(AST)p
-Ft(__)p Fk(AIT)g(\(for)g(the)g(Hammer-Aito\013)g(pro)5
-b(jection\).)56 b(AST)p Ft(__)p Fk(TPN)33 b(is)h(an)227
-5593 y(exception)d(in)g(that)g(it)h(is)f(not)g(part)f(of)h(the)h
-(FITS-W)n(CS)f(standard)f(\(it)h(represen)n(ts)f(a)g(T)-7
-b(AN)32 b(pro)5 b(jection)30 b(with)227 5693 y(p)r(olynomial)d
-(correction)f(terms)h(as)g(de\014ned)h(in)g(an)f(early)g(draft)g(of)h
-(the)g(FITS-W)n(CS)g(pap)r(er\).)p eop end
-%%Page: 472 482
-TeXDict begin 472 481 bop 0 52 a FG(472)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fc(T)m(yp)s(e:)227 451 y Fk(In)n(teger,)c(read-only)-7
-b(.)0 599 y Fc(Class)31 b(Applicabilit)m(y:)259 735 y(WcsMap)427
-834 y Fk(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-995 y Fc(Notes:)340 1277 y Fj(\017)45 b Fk(F)-7 b(or)27
-b(a)g(list)h(of)g(a)n(v)-5 b(ailable)26 b(pro)5 b(jections,)27
-b(see)g(the)h(FITS-W)n(CS)f(pap)r(er.)p 0 1474 3780 12
-v 0 1612 a FA(Width\(elemen)l(t\))1131 1606 y Fd(Line)38
-b(width)g(for)g(a)g(Plot)g(elemen)m(t)2840 1612 y FA(Width\(elemen)l
-(t\))0 1806 y Fc(Description:)44 b Fk(This)35 b(attribute)g(determines)
-g(the)h(line)f(width)g(used)g(when)g(dra)n(wing)f(eac)n(h)g(elemen)n(t)
-h(of)g(graphical)227 1906 y(output)40 b(pro)r(duced)g(b)n(y)f(a)h
-(Plot.)72 b(It)40 b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40
-b(for)f(eac)n(h)g(graphical)f(elemen)n(t)i(so)f(that,)k(for)227
-2005 y(instance,)28 b(the)h(setting)f Ft(")p Fk(Width\(b)r(order\)=2.0)
-p Ft(")f Fk(causes)g(the)h(Plot)g(b)r(order)f(to)h(b)r(e)h(dra)n(wn)e
-(using)h(a)g(line)g(width)227 2105 y(of)g(2.0.)37 b(A)28
-b(v)-5 b(alue)28 b(of)f(1.0)g(results)h(in)g(a)f(line)h(thic)n(kness)f
-(whic)n(h)h(is)g(appro)n(ximately)e(0.0005)f(times)k(the)f(length)g(of)
-227 2204 y(the)g(diagonal)e(of)i(the)g(en)n(tire)f(displa)n(y)g
-(surface.)227 2328 y(The)d(actual)f(app)r(earance)g(of)g(lines)h(dra)n
-(wn)f(with)h(an)n(y)f(particular)g(width,)i(and)e(the)i(range)d(of)i(a)
-n(v)-5 b(ailable)22 b(widths,)227 2428 y(is)e(determined)g(b)n(y)f(the)
-h(underlying)g(graphics)e(system.)34 b(The)20 b(default)g(b)r(eha)n
-(viour)e(is)i(for)f(all)h(graphical)e(elemen)n(ts)227
-2528 y(to)23 b(b)r(e)h(dra)n(wn)e(using)h(the)h(default)g(line)f(width)
-h(supplied)g(b)n(y)f(this)g(graphics)f(system.)35 b(This)23
-b(will)h(not)f(necessarily)227 2627 y(corresp)r(ond)j(to)i(a)f(Width)h
-(v)-5 b(alue)28 b(of)g(1.0.)0 2776 y Fc(T)m(yp)s(e:)227
-2875 y Fk(Floating)f(p)r(oin)n(t.)0 3024 y Fc(Class)k(Applicabilit)m
-(y:)259 3159 y(Plot)427 3259 y Fk(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 3420 y Fc(Notes:)340 3701 y Fj(\017)45
-b Fk(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 3833 y Fj(\017)45 b Fk(If)26 b(no)f(graphical)e(elemen)n(t)
-i(is)g(sp)r(eci\014ed,)h(\(e.g.)36 b Ft(")p Fk(Width)p
-Ft(")25 b Fk(instead)g(of)g Ft(")p Fk(Width\(b)r(order\))p
-Ft(")p Fk(\),)h(then)g(a)e Ft(")p Fk(set)p Ft(")427 3933
-y Fk(or)i Ft(")p Fk(clear)p Ft(")f Fk(op)r(eration)h(will)g(a\013ect)h
-(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n
-(ts,)i(while)g(a)f Ft(")p Fk(get)p Ft(")f Fk(or)427 4032
-y Ft(")p Fk(test)p Ft(")i Fk(op)r(eration)g(will)h(use)f(just)h(the)g
-(Width\(Border\))g(v)-5 b(alue.)p 0 4230 V 0 4361 a FA(XmlF)-11
-b(ormat)207 b Fd(System)38 b(for)g(formatting)d(Ob)7
-b(jects)38 b(as)h(XML)207 b FA(XmlF)-11 b(ormat)0 4548
-y Fc(Description:)44 b Fk(This)29 b(attribute)h(sp)r(eci\014es)f(the)g
-(formatting)g(system)g(to)g(use)g(when)g(AST)g(Ob)5 b(jects)29
-b(are)f(written)i(out)227 4648 y(as)24 b(XML)g(through)f(an)h(XmlChan.)
-36 b(It)25 b(a\013ects)f(the)g(b)r(eha)n(viour)f(of)h(the)g(AST)p
-Ft(_)p Fk(WRITE)g(routine)g(when)g(they)h(are)227 4748
-y(used)j(to)f(transfer)g(an)n(y)g(AST)h(Ob)5 b(ject)27
-b(to)h(or)e(from)i(an)f(external)g(XML)h(represen)n(tation.)227
-4872 y(The)36 b(XmlChan)h(class)e(allo)n(ws)g(AST)h(ob)5
-b(jects)36 b(to)g(b)r(e)g(represen)n(ted)f(in)i(the)f(form)g(of)g(XML)g
-(in)h(sev)n(eral)d(w)n(a)n(ys)227 4971 y(\(con)n(v)n(en)n(tions\))27
-b(and)g(the)i(XmlF)-7 b(ormat)27 b(attribute)h(is)g(used)g(to)f(sp)r
-(ecify)h(whic)n(h)g(of)g(these)f(should)h(b)r(e)g(used.)38
-b(The)227 5071 y(formatting)27 b(options)g(a)n(v)-5 b(ailable)27
-b(are)f(outlined)i(in)g(the)g Ft(")p Fk(F)-7 b(ormats)26
-b(Av)-5 b(ailable)p Ft(")27 b Fk(section)g(b)r(elo)n(w.)227
-5195 y(By)35 b(default,)h(an)f(XmlChan)f(will)h(attempt)g(to)g
-(determine)f(whic)n(h)h(format)f(system)g(is)h(already)e(in)i(use,)h
-(and)227 5295 y(will)f(set)f(the)g(default)h(XmlF)-7
-b(ormat)34 b(v)-5 b(alue)34 b(accordingly)e(\(so)h(that)i(subsequen)n
-(t)f(I/O)f(op)r(erations)g(adopt)g(the)227 5394 y(same)26
-b(con)n(v)n(en)n(tions\).)36 b(It)27 b(do)r(es)f(this)h(b)n(y)g(lo)r
-(oking)e(for)i(certain)f(critical)g(items)h(whic)n(h)f(only)h(o)r(ccur)
-f(in)h(particular)227 5494 y(formats.)42 b(F)-7 b(or)29
-b(details)h(of)f(ho)n(w)g(this)h(w)n(orks,)e(see)i(the)g
-Ft(")p Fk(Choice)e(of)i(Default)g(F)-7 b(ormat)p Ft(")29
-b Fk(section)g(b)r(elo)n(w.)42 b(If)30 b(y)n(ou)227 5593
-y(wish)h(to)g(ensure)f(that)h(a)f(particular)g(format)g(system)g(is)h
-(used,)h(indep)r(enden)n(tly)f(of)g(an)n(y)f(XML)h(already)e(read,)227
-5693 y(y)n(ou)e(should)g(set)h(an)f(explicit)h(XmlF)-7
-b(ormat)28 b(v)-5 b(alue)27 b(y)n(ourself.)p eop end
-%%Page: 473 483
-TeXDict begin 473 482 bop 3643 52 a FG(473)0 351 y Fc(T)m(yp)s(e:)227
-451 y Fk(String.)0 602 y Fc(Class)31 b(Applicabilit)m(y:)259
-740 y(XmlChan)427 839 y Fk(All)d(XmlChans)g(ha)n(v)n(e)e(this)i
-(attribute.)-2 1003 y Fc(F)-8 b(ormats)32 b(Av)-5 b(ailable)n(:)227
-1149 y Fk(The)34 b(XmlF)-7 b(ormat)33 b(attribute)h(can)f(tak)n(e)f(an)
-n(y)h(of)g(the)h(follo)n(wing)f(\(case)f(insensitiv)n(e\))i(string)e(v)
--5 b(alues)33 b(to)h(select)227 1248 y(the)28 b(corresp)r(onding)e
-(formatting)h(system:)340 1512 y Fj(\017)45 b Ft(")p
-Fk(NA)-7 b(TIVE)p Ft(")p Fk(:)34 b(This)23 b(is)g(a)f(direct)h(con)n(v)
-n(ersion)e(to)h(XML)i(of)e(the)i(heirarc)n(hical)c(format)j(used)g(b)n
-(y)f(a)h(standard)427 1611 y(XML)28 b(c)n(hannel)f(\(and)h(also)f(b)n
-(y)g(the)h(NA)-7 b(TIVE)28 b(enco)r(ding)f(of)h(a)f(FitsChan\).)340
-1745 y Fj(\017)45 b Ft(")p Fk(QUOTED)p Ft(")p Fk(:)35
-b(This)27 b(is)g(the)g(same)f(as)h(NA)-7 b(TIVE)27 b(format)f(except)h
-(that)g(extra)f(information)g(is)h(included)427 1844
-y(whic)n(h)21 b(allo)n(ws)e(clien)n(t)i(co)r(de)g(to)f(con)n(v)n(ert)f
-(the)j(XML)f(in)n(to)f(a)g(form)h(whic)n(h)f(can)h(b)r(e)g(read)f(b)n
-(y)g(a)g(standard)g(AST)427 1944 y(Channel.)37 b(This)26
-b(extra)g(information)f(indicates)i(whic)n(h)f(AST)h(attribute)f(v)-5
-b(alues)27 b(should)f(b)r(e)h(enclosed)e(in)427 2044
-y(quotes)i(b)r(efore)h(b)r(eing)f(passed)g(to)h(a)f(Channel.)340
-2177 y Fj(\017)45 b Ft(")p Fk(IV)n(O)n(A)p Ft(")p Fk(:)63
-b(This)40 b(is)h(a)g(format)f(that)h(uses)g(an)g(early)e(draft)i(of)g
-(the)g(STC-X)g(sc)n(hema)f(dev)n(elop)r(ed)h(b)n(y)427
-2277 y(the)30 b(In)n(ternational)e(Virtual)h(Observ)-5
-b(atory)27 b(Alliance)i(\(IV)n(O)n(A)g(-)g(see)g Ft(")p
-Fk(h)n(ttp://www.iv)n(oa.net/)p Ft(")p Fk(\))e(to)i(de-)427
-2376 y(scrib)r(e)38 b(co)r(ordinate)f(systems,)j(regions,)f(mappings,)h
-(etc.)68 b(Supp)r(ort)38 b(is)g(limited)g(to)g(V1.20)f(describ)r(ed)427
-2476 y(at)d Ft(")p Fk(h)n(ttp://www.iv)n(oa.net/Do)r(cumen)n
-(ts/WD/STC/STC-2005022)o(5.h)n(tml)p Ft(")p Fk(.)49 b(Since)34
-b(the)g(v)n(ersion)e(of)427 2576 y(STC-X)i(\014nally)f(adopted)g(b)n(y)
-h(the)f(IV)n(O)n(A)g(di\013ers)h(in)g(sev)n(eral)d(signi\014can)n(t)i
-(resp)r(ects)g(from)g(V1.20,)h(this)427 2675 y(format)27
-b(is)g(no)n(w)f(mainly)h(of)g(historical)f(in)n(terest.)37
-b(Note,)27 b(the)g(alternativ)n(e)f Ft(")p Fk(STC-S)p
-Ft(")g Fk(format)h(\(a)g(simpler)427 2775 y(non-XML)h(enco)r(ding)f(of)
-g(the)h(STC)g(metadata\))f(is)h(supp)r(orted)f(b)n(y)h(the)g(StcsChan)f
-(class.)-2 2938 y Fc(Choice)32 b(of)f(Default)h(F)-8
-b(ormat;)n(:)227 3084 y Fk(If)30 b(the)f(XmlF)-7 b(ormat)29
-b(attribute)g(of)g(an)f(XmlChan)h(is)g(not)g(set,)g(the)h(default)f(v)
--5 b(alue)29 b(it)g(tak)n(es)f(is)h(determined)g(b)n(y)227
-3184 y(the)h(presence)f(of)g(certain)g(critical)g(items)h(within)g(the)
-g(do)r(cumen)n(t)f(most)h(recen)n(tly)e(read)h(using)g(AST)p
-Ft(_)p Fk(READ.)227 3284 y(The)f(sequence)f(of)h(decision)f(used)g(to)h
-(arriv)n(e)d(at)j(the)g(default)g(v)-5 b(alue)27 b(is)h(as)f(follo)n
-(ws:)340 3547 y Fj(\017)45 b Fk(If)19 b(the)g(previous)e(do)r(cumen)n
-(t)i(read)e(con)n(tained)h(an)n(y)f(elemen)n(ts)i(in)f(an)n(y)g(of)g
-(the)h(STC)f(namespaces)g(\()p Ft(")p Fk(urn:n)n(v)n(o-)427
-3646 y(stc)p Ft(")p Fk(,)28 b Ft(")p Fk(urn:n)n(v)n(o-co)r(ords)p
-Ft(")23 b Fk(or)k Ft(")p Fk(urn:n)n(v)n(o-region)p Ft(")p
-Fk(\),)d(then)k(the)g(default)g(v)-5 b(alue)28 b(is)f(IV)n(O)n(A.)340
-3780 y Fj(\017)45 b Fk(If)30 b(the)f(previous)f(do)r(cumen)n(t)h(read)f
-(con)n(tained)g(an)n(y)g(elemen)n(ts)h(in)g(the)g(AST)g(namespace)f
-(whic)n(h)h(had)g(an)427 3880 y(asso)r(ciated)e(XML)g(attribute)h
-(called)f Ft(")p Fk(quoted)p Ft(")p Fk(,)g(then)h(the)g(default)g(v)-5
-b(alue)28 b(is)f(QUOTED.)340 4013 y Fj(\017)45 b Fk(Otherwise,)31
-b(if)g(none)g(of)f(these)h(conditions)f(is)h(met)g(\(as)f(w)n(ould)h(b)
-r(e)g(the)g(case)f(if)h(no)f(do)r(cumen)n(t)h(had)g(y)n(et)427
-4113 y(b)r(een)d(read\),)f(then)h(NA)-7 b(TIVE)28 b(format)g(is)f
-(used.)227 4276 y(Setting)h(an)g(explicit)f(v)-5 b(alue)28
-b(for)f(the)h(XmlF)-7 b(ormat)27 b(attribute)h(alw)n(a)n(ys)e(o)n(v)n
-(er-rides)f(this)j(default)g(b)r(eha)n(viour.)-2 4427
-y Fc(The)k(IV)m(O)m(A)h(F)-8 b(ormat)n(:)227 4573 y Fk(The)39
-b(IV)n(O)n(A)g(supp)r(ort)g(caters)f(only)h(for)f(certain)h(parts)f(of)
-h(V1.20)g(of)g(the)g(draft)g(Space-Time)g(Co)r(ordinate)227
-4673 y(\(STC\))33 b(sc)n(hema)f(\(see)h(h)n(ttp://www.iv)n(oa.net/Do)r
-(cumen)n(ts/WD/STC/STC-2005022)o(5.h)n(tml\).)46 b(Note,)34
-b(this)227 4773 y(draft)f(has)g(no)n(w)f(b)r(een)i(sup)r(erceded)f(b)n
-(y)g(an)g(o\016cially)f(adopted)h(v)n(ersion)e(that)j(di\013ers)f(in)g
-(sev)n(eral)e(signi\014can)n(t)227 4872 y(resp)r(ects)c(from)h(V1.20.)
-35 b(Consequen)n(tly)-7 b(,)27 b(the)h Ft(")p Fk(IV)n(O)n(A)p
-Ft(")f Fk(XmlChan)h(format)f(is)g(of)h(historical)e(in)n(terest)h(only)
--7 b(.)227 4997 y(The)30 b(follo)n(wing)f(p)r(oin)n(ts)h(should)f(b)r
-(e)h(noted)g(when)g(using)g(an)f(XmlChan)h(to)g(read)f(or)g(write)g
-(STC)h(information)227 5097 y(\(note,)e(this)g(list)g(is)f(curren)n
-(tly)g(incomplete\):)340 5360 y Fj(\017)45 b Fk(Ob)5
-b(jects)27 b(can)h(curren)n(tly)e(only)h(b)r(e)h(read)f(using)g(this)h
-(format,)f(not)h(written.)340 5494 y Fj(\017)45 b Fk(The)23
-b(AST)f(ob)5 b(ject)22 b(generated)f(b)n(y)h(reading)f(an)h
-Fm(<)p Fk(STCMetadata)p Fm(>)f Fk(elemen)n(t)h(will)g(b)r(e)h(an)f
-(instance)g(of)g(one)427 5593 y(of)27 b(the)h(AST)g Ft(")p
-Fk(Stc)p Ft(")f Fk(classes:)35 b(StcResourcePro\014le,)25
-b(StcSearc)n(hLo)r(cation,)h(StcCatalogEn)n(tryLo)r(cation,)427
-5693 y(StcObsDataLo)r(cation.)p eop end
-%%Page: 474 484
-TeXDict begin 474 483 bop 0 52 a FG(474)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fj(\017)45 b Fk(When)27 b(reading)f(an)g Fm(<)p Fk(STCMetadata)p
-Fm(>)f Fk(elemen)n(t,)i(the)g(axes)f(in)h(the)g(returned)f(AST)h(Ob)5
-b(ject)26 b(will)h(b)r(e)g(in)427 451 y(the)j(order)e(space,)g(time,)j
-(sp)r(ectral,)e(redshift,)g(irresp)r(ectiv)n(e)f(of)h(the)h(order)e(in)
-h(whic)n(h)g(the)h(axes)e(o)r(ccur)g(in)427 551 y(the)34
-b Fm(<)p Fk(STCMetadata)p Fm(>)e Fk(elemen)n(t.)53 b(If)34
-b(the)g(supplied)f Fm(<)p Fk(STCMetadata)p Fm(>)f Fk(elemen)n(t)h(do)r
-(es)g(not)g(con)n(tain)427 650 y(all)h(of)h(these)f(axes,)i(the)f
-(returned)f(AST)h(Ob)5 b(ject)34 b(will)h(also)e(omit)i(them,)i(but)e
-(the)g(ordering)e(of)h(those)427 750 y(axes)h(whic)n(h)h(are)f(presen)n
-(t)g(will)i(b)r(e)f(as)f(stated)h(ab)r(o)n(v)n(e.)61
-b(If)36 b(the)g(spatial)g(frame)f(represen)n(ts)g(a)g(celestial)427
-849 y(co)r(ordinate)27 b(system)g(the)h(spatial)f(axes)g(will)g(b)r(e)h
-(in)g(the)g(order)f(\(longitude,)g(latitude\).)340 986
-y Fj(\017)45 b Fk(Un)n(til)25 b(suc)n(h)g(time)g(as)f(the)h(AST)g
-(TimeF)-7 b(rame)24 b(is)g(complete,)h(a)g(simple)f(1-dimensional)g(F)
--7 b(rame)24 b(\(with)h(Do-)427 1086 y(main)g(set)f(to)g(TIME\))g(will)
-h(b)r(e)g(used)f(to)g(represen)n(t)f(the)i(STC)f Fm(<)p
-Fk(TimeF)-7 b(rame)p Fm(>)23 b Fk(elemen)n(t.)36 b(Consequen)n(tly)-7
-b(,)427 1185 y(most)28 b(of)f(the)h(information)f(within)h(a)g
-Fm(<)p Fk(TimeF)-7 b(rame)p Fm(>)26 b Fk(elemen)n(t)i(is)f(curren)n
-(tly)g(ignored.)340 1322 y Fj(\017)45 b Fm(<)p Fk(SpaceF)-7
-b(rame)p Fm(>)27 b Fk(elemen)n(ts)i(can)f(only)g(b)r(e)h(read)f(if)h
-(they)g(describ)r(e)g(a)f(celestial)g(longitude)h(and)f(latitude)427
-1421 y(axes)33 b(supp)r(orted)g(b)n(y)g(the)h(AST)f(SkyF)-7
-b(rame)33 b(class.)53 b(The)33 b(space)g(axes)f(will)i(b)r(e)g
-(returned)f(in)g(the)h(order)427 1521 y(\(longitude,)28
-b(latitude\).)340 1658 y Fj(\017)45 b Fk(V)-7 b(elo)r(cities)28
-b(asso)r(ciated)e(with)i(SpaceF)-7 b(rames)27 b(cannot)g(b)r(e)h(read.)
-340 1794 y Fj(\017)45 b Fk(An)n(y)23 b Fm(<)p Fk(GenericCo)r(ordF)-7
-b(rame)p Fm(>)19 b Fk(elemen)n(ts)k(within)g(an)f Fm(<)p
-Fk(AstroCo)r(ordSystem)p Fm(>)e Fk(elemen)n(t)j(are)f(curren)n(tly)427
-1894 y(ignored.)340 2031 y Fj(\017)45 b Fk(An)n(y)29
-b(second)e(or)h(subsequen)n(t)g Fm(<)p Fk(AstroCo)r(ordSystem)p
-Fm(>)e Fk(found)j(within)g(an)f(STCMetaData)g(elemen)n(t)h(is)427
-2130 y(ignored.)340 2267 y Fj(\017)45 b Fk(An)n(y)37
-b(second)g(or)f(subsequen)n(t)h Fm(<)p Fk(AstroCo)r(ordArea)p
-Fm(>)d Fk(found)k(within)g(an)f(STCMetaData)f(elemen)n(t)i(is)427
-2366 y(ignored.)340 2503 y Fj(\017)45 b Fk(An)n(y)28
-b Fm(<)p Fk(O\013setCen)n(ter)p Fm(>)e Fk(found)i(within)g(a)f
-Fm(<)p Fk(SpaceF)-7 b(rame)p Fm(>)26 b Fk(is)i(ignored.)340
-2640 y Fj(\017)45 b Fk(An)n(y)28 b(Co)r(ordFla)n(v)n(or)c(elemen)n(t)k
-(found)g(within)g(a)g Fm(<)p Fk(SpaceF)-7 b(rame)p Fm(>)25
-b Fk(is)j(ignored.)340 2776 y Fj(\017)45 b Fm(<)p Fk(SpaceF)-7
-b(rame)p Fm(>)23 b Fk(elemen)n(ts)h(can)g(only)f(b)r(e)i(read)e(if)i
-(they)g(refer)e(to)h(one)g(of)g(the)h(follo)n(wing)e(space)h(reference)
-427 2876 y(frames:)36 b(ICRS,)28 b(GALA)n(CTIC)p Ft(_)p
-Fk(I)r(I,)g(SUPER)p Ft(_)p Fk(GALA)n(CTIC,)f(HEE,)g(FK4,)g(FK5,)g
-(ECLIPTIC.)340 3013 y Fj(\017)45 b Fm(<)p Fk(SpaceF)-7
-b(rame)p Fm(>)25 b Fk(elemen)n(ts)h(can)g(only)g(b)r(e)h(read)f(if)h
-(the)f(reference)g(p)r(osition)g(is)g(TOPOCENTER.)f(Also,)427
-3112 y(an)n(y)i(planetary)g(ephemeris)g(is)g(ignored.)340
-3249 y Fj(\017)45 b Fk(Regions:)36 b(there)26 b(is)g(curren)n(tly)g(no)
-g(supp)r(ort)g(for)g(STC)h(regions)e(of)h(t)n(yp)r(e)h(Sector,)f(Con)n
-(v)n(exHull)f(or)h(SkyIn-)427 3348 y(dex.)340 3485 y
-Fj(\017)45 b Fk(The)34 b(AST)g(Region)e(read)h(from)g(a)g(Co)r(ordIn)n
-(terv)-5 b(al)32 b(elemen)n(t)h(is)h(considered)e(to)i(b)r(e)f(op)r(en)
-h(if)g(either)f(the)427 3585 y(lo)p Ft(_)p Fk(include)27
-b(or)g(the)h(hi)p Ft(_)p Fk(include)g(attribute)g(is)f(set)h(to)f
-(false.)340 3721 y Fj(\017)45 b Fm(<)p Fk(RegionFile)p
-Fm(>)27 b Fk(elemen)n(ts)g(are)g(not)g(supp)r(orted.)340
-3858 y Fj(\017)45 b Fk(V)-7 b(ertices)33 b(within)h Fm(<)p
-Fk(P)n(olygon)p Fm(>)c Fk(elemen)n(ts)k(are)e(alw)n(a)n(ys)f
-(considered)h(to)h(b)r(e)h(joined)g(using)e(great)g(circles)427
-3957 y(\(that)c(is,)g Fm(<)p Fk(SmallCircle)p Fm(>)e
-Fk(elemen)n(ts)i(are)e(ignored\).)p 0 4164 3780 12 v
-0 4296 a FA(XmlInden)l(t)245 b Fd(Con)m(trols)36 b(output)i(of)g(inden)
-m(tation)e(and)j(line)1764 4411 y(feeds)3144 4296 y FA(XmlInden)l(t)0
-4584 y Fc(Description:)44 b Fk(This)39 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)e(of)h(the)h(XML)g(pro)r(duced)f(when)h(an)f(AST)h(ob)5
-b(ject)39 b(is)227 4683 y(written)21 b(to)g(an)g(XmlChan.)35
-b(If)21 b(it)h(is)f(non-zero,)f(then)i(extra)e(linefeed)h(c)n
-(haracters)e(will)i(b)r(e)g(inserted)g(as)f(necessary)227
-4783 y(to)26 b(ensure)f(that)i(eac)n(h)e(XML)h(tag)f(starts)g(on)h(a)g
-(new)g(line,)g(and)g(eac)n(h)f(tag)g(will)h(b)r(e)h(inden)n(ted)f(to)g
-(sho)n(w)f(its)h(depth)227 4883 y(in)k(the)f(con)n(tainmen)n(t)g
-(hierarc)n(h)n(y)-7 b(.)40 b(If)30 b(XmlInden)n(t)g(is)f(zero)f(\(the)i
-(default\),)g(then)g(no)f(linefeeds)g(or)g(inden)n(tation)227
-4982 y(strings)e(will)h(b)r(e)g(added)f(to)h(output)g(text.)0
-5139 y Fc(T)m(yp)s(e:)227 5239 y Fk(In)n(teger)f(\(b)r(o)r(olean\).)0
-5396 y Fc(Class)k(Applicabilit)m(y:)259 5540 y(XmlChan)427
-5639 y Fk(All)d(XmlChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 475 485
-TeXDict begin 475 484 bop 3643 52 a FG(475)p 0 351 3780
-12 v 0 483 a FA(XmlLength)473 b Fd(Con)m(trols)36 b(output)i(bu\013er)h
-(length)471 b FA(XmlLength)0 653 y Fc(Description:)44
-b Fk(This)34 b(attribute)h(sp)r(eci\014es)e(the)i(maxim)n(um)f(length)g
-(to)g(use)g(when)g(writing)f(out)i(text)f(through)f(the)227
-753 y(sink)28 b(function)g(supplied)g(when)g(the)g(XmlChan)f(w)n(as)g
-(created.)227 872 y(The)h(n)n(um)n(b)r(er)g(of)g(c)n(haracters)d(in)j
-(eac)n(h)f(string)h(written)g(out)g(through)f(the)h(sink)g(function)g
-(will)g(not)g(b)r(e)g(greater)227 972 y(than)g(the)g(v)-5
-b(alue)27 b(of)h(this)g(attribute)g(\(but)g(ma)n(y)f(b)r(e)h(less\).)37
-b(A)28 b(v)-5 b(alue)27 b(of)h(zero)e(\(the)j(default\))f(means)f
-(there)g(is)h(no)227 1072 y(limit)h(-)e(eac)n(h)g(string)g(can)g(b)r(e)
-h(of)f(an)n(y)g(length.)227 1192 y(Note,)40 b(the)d(default)h(v)-5
-b(alue)37 b(of)g(zero)e(is)i(unlik)n(ely)g(to)g(b)r(e)g(appropriate)f
-(when)h(an)g(XmlChan)g(is)g(used)g(within)227 1291 y(F)-7
-b(ortran)36 b(co)r(de.)63 b(In)37 b(this)f(case,)i(XmlLength)f(should)f
-(usually)g(b)r(e)h(set)g(to)f(the)h(size)f(of)h(the)f(CHARA)n(CTER)227
-1391 y(v)-5 b(ariable)22 b(used)i(to)f(receiv)n(e)f(the)h(text)h
-(returned)e(b)n(y)h(AST)p Ft(_)p Fk(GETLINE)g(within)h(the)f(sink)g
-(function.)36 b(This)23 b(a)n(v)n(oids)227 1490 y(the)28
-b(p)r(ossibilit)n(y)g(of)f(long)g(lines)h(b)r(eing)f(truncated)h(in)n
-(visibly)f(within)h(AST)p Ft(_)p Fk(GETLINE.)0 1630 y
-Fc(T)m(yp)s(e:)227 1730 y Fk(In)n(teger.)0 1870 y Fc(Class)j
-(Applicabilit)m(y:)259 1997 y(XmlChan)427 2097 y Fk(All)d(XmlChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p 0 2277 V 0 2409 a FA(XmlPre\014x)200
-b Fd(The)38 b(namespace)g(pre\014x)h(to)f(use)h(when)g(writing)197
-b FA(XmlPre\014x)0 2579 y Fc(Description:)44 b Fk(This)22
-b(attribute)h(is)f(a)g(string)f(whic)n(h)h(is)g(to)g(b)r(e)h(used)f(as)
-f(the)i(namespace)e(pre\014x)h(for)f(all)h(XML)h(elemen)n(ts)227
-2679 y(created)k(as)g(a)g(result)g(of)h(writing)f(an)g(AST)h(Ob)5
-b(ject)28 b(out)f(through)g(an)g(XmlChan.)37 b(The)28
-b(URI)g(asso)r(ciated)e(with)227 2778 y(the)33 b(namespace)e(pre\014x)h
-(is)g(giv)n(en)g(b)n(y)f(the)i(sym)n(b)r(olic)f(constan)n(t)f(AST)p
-Ft(__)p Fk(XMLNS)i(de\014ned)f(in)h(AST)p Ft(_)p Fk(P)-7
-b(AR.)32 b(A)227 2878 y(de\014nition)26 b(of)e(the)i(namespace)e
-(pre\014x)g(is)h(included)g(in)h(eac)n(h)e(top-lev)n(el)g(elemen)n(t)h
-(pro)r(duced)f(b)n(y)h(the)g(XmlChan.)227 2998 y(The)31
-b(default)g(v)-5 b(alue)30 b(is)g(a)g(blank)h(string)e(whic)n(h)i
-(causes)e(no)h(pre\014x)g(to)h(b)r(e)f(used.)46 b(In)31
-b(this)f(case)g(eac)n(h)g(top-lev)n(el)227 3097 y(elemen)n(t)e(will)g
-(set)f(the)h(default)g(namespace)f(to)g(b)r(e)h(the)g(v)-5
-b(alue)28 b(of)g(AST)p Ft(__)p Fk(XMLNS.)0 3237 y Fc(T)m(yp)s(e:)227
-3337 y Fk(String.)0 3477 y Fc(Class)j(Applicabilit)m(y:)259
-3604 y(Ob)5 b(ject)427 3704 y Fk(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 3884 V 0 4015 a
-FA(Zo)t(om)1322 4016 y Fd(Zo)s(omMap)37 b(scale)i(factor)3447
-4015 y FA(Zo)t(om)0 4186 y Fc(Description:)44 b Fk(This)24
-b(attribute)g(holds)g(the)g(Zo)r(omMap)f(scale)g(factor,)h(b)n(y)g
-(whic)n(h)g(co)r(ordinate)e(v)-5 b(alues)24 b(are)f(m)n(ultiplied)227
-4285 y(\(b)n(y)g(the)h(forw)n(ard)d(transformation\))g(or)h(divided)i
-(\(b)n(y)f(the)g(in)n(v)n(erse)f(transformation\).)34
-b(This)22 b(factor)h(is)f(set)h(when)227 4385 y(a)k(Zo)r(omMap)g(is)h
-(created,)e(but)j(ma)n(y)e(later)g(b)r(e)h(mo)r(di\014ed.)37
-b(The)27 b(default)i(v)-5 b(alue)27 b(is)g(unit)n(y)-7
-b(.)227 4505 y(Note)23 b(that)f(if)h(a)f(Zo)r(omMap)f(is)h(in)n(v)n
-(erted)g(\(e.g.)35 b(b)n(y)22 b(using)f(AST)p Ft(_)p
-Fk(INVER)-7 b(T\),)23 b(then)g(the)g(recipro)r(cal)d(of)j(this)f(zo)r
-(om)227 4604 y(factor)27 b(will,)h(in)g(e\013ect,)g(b)r(e)g(used.)0
-4745 y Fc(T)m(yp)s(e:)227 4844 y Fk(Double)g(precision.)0
-4984 y Fc(Class)j(Applicabilit)m(y:)259 5111 y(Zo)s(omMap)427
-5211 y Fk(All)d(Zo)r(omMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-5363 y Fc(Notes:)340 5636 y Fj(\017)45 b Fk(The)28 b(Zo)r(om)f
-(attribute)h(ma)n(y)f(not)g(b)r(e)h(set)g(to)f(zero.)p
-eop end
-%%Page: 476 486
-TeXDict begin 476 485 bop 0 52 a FG(476)1994 b Fz(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p eop end
-%%Page: 477 487
-TeXDict begin 477 486 bop 3643 52 a FG(477)0 351 y FA(D)135
-b(AST)43 b(Class)j(Descriptions)p 0 582 3780 12 v 0 713
-a(Axis)1057 b Fd(Store)38 b(axis)g(information)1054 b
-FA(Axis)0 861 y Fc(Description:)44 b Fk(The)30 b(Axis)f(class)f(is)h
-(used)g(to)g(store)g(information)f(asso)r(ciated)g(with)i(a)f
-(particular)f(axis)g(of)h(a)g(F)-7 b(rame.)227 960 y(It)28
-b(is)g(used)f(in)n(ternally)g(b)n(y)g(the)h(AST)g(library)e(and)i(has)f
-(no)g(constructor)f(function.)38 b(Y)-7 b(ou)27 b(should)g(encoun)n
-(ter)g(it)227 1060 y(only)g(within)i(textual)e(output)i(\(e.g.)36
-b(from)28 b(AST)p Ft(_)p Fk(WRITE\).)0 1200 y Fc(Constructor)k(F)-8
-b(unction:)227 1300 y Fk(None.)-2 1440 y Fc(Inheritance)n(:)227
-1586 y Fk(The)28 b(Axis)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)p 0 1767 V 0 1898 a FA(Bo)l(x)480
-1899 y Fd(A)39 b(b)s(o)m(x)f(region)f(with)h(sides)h(parallel)d(to)i
-(the)h(axes)f(of)h(a)f(F)-10 b(rame)3549 1898 y FA(Bo)l(x)0
-2069 y Fc(Description:)44 b Fk(The)26 b(Bo)n(x)e(class)g(implemen)n(ts)
-i(a)e(Region)h(whic)n(h)g(represen)n(ts)f(a)h(b)r(o)n(x)f(with)i(sides)
-f(parallel)f(to)h(the)h(axes)227 2169 y(of)34 b(a)f(F)-7
-b(rame)32 b(\(i.e.)55 b(an)33 b(area)f(whic)n(h)h(encloses)g(a)g(giv)n
-(en)f(range)g(of)i(v)-5 b(alues)33 b(on)g(eac)n(h)f(axis\).)54
-b(A)34 b(Bo)n(x)e(is)h(similar)227 2269 y(to)e(an)g(In)n(terv)-5
-b(al,)31 b(the)g(only)g(real)f(di\013erence)g(b)r(eing)h(that)h(the)f
-(In)n(terv)-5 b(al)30 b(class)g(allo)n(ws)g(some)g(axis)g(limits)h(to)g
-(b)r(e)227 2368 y(unsp)r(eci\014ed.)37 b(Note,)26 b(a)e(Bo)n(x)h(will)g
-(only)g(lo)r(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7
-b(rame)25 b(geometry)f(is)h(appro)n(ximately)e(\015at.)36
-b(F)-7 b(or)227 2468 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f
-(to)h(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)
-f(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-2567 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-2708 y Fc(Constructor)k(F)-8 b(unction:)227 2807 y Fk(AST)p
-Ft(_)p Fk(BO)n(X)-2 2948 y Fc(Inheritance)n(:)227 3094
-y Fk(The)28 b(Bo)n(x)e(class)h(inherits)h(from)f(the)h(Region)f(class.)
--2 3234 y Fc(A)m(ttributes)n(:)227 3380 y Fk(The)d(Bo)n(x)e(class)h(do)
-r(es)g(not)h(de\014ne)f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)h
-(those)f(whic)n(h)g(are)g(applicable)g(to)g(all)g(Regions.)-2
-3521 y Fc(F)-8 b(unctions)n(:)227 3667 y Fk(The)26 b(Bo)n(x)e(class)g
-(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(routines)g(b)r(ey)n(ond)g
-(those)g(whic)n(h)g(are)f(applicable)h(to)g(all)g(Regions.)p
-0 3848 V 0 3979 a FA(Channel)1180 3986 y Fd(Basic)38
-b(\(textual\))e(I/O)j(c)m(hannel)3294 3979 y FA(Channel)0
-4168 y Fc(Description:)44 b Fk(The)35 b(Channel)g(class)f(implemen)n
-(ts)h(lo)n(w-lev)n(el)e(input/output)i(for)g(the)g(AST)g(library)-7
-b(.)57 b(W)-7 b(riting)35 b(an)227 4267 y(Ob)5 b(ject)36
-b(to)g(a)g(Channel)f(will)i(generate)d(a)i(textual)g(represen)n(tation)
-e(of)i(that)h(Ob)5 b(ject,)38 b(and)e(reading)e(from)i(a)227
-4367 y(Channel)28 b(will)g(create)e(a)h(new)h(Ob)5 b(ject)28
-b(from)f(its)h(textual)f(represen)n(tation.)227 4487
-y(Normally)-7 b(,)22 b(when)h(y)n(ou)e(use)g(a)h(Channel,)h(y)n(ou)e
-(should)h(pro)n(vide)e Ft(")p Fk(source)p Ft(")g Fk(and)i
-Ft(")p Fk(sink)p Ft(")f Fk(routines)g(whic)n(h)h(connect)227
-4587 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 4686 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-4826 y Fc(Constructor)32 b(F)-8 b(unction:)227 4926 y
-Fk(AST)p Ft(_)p Fk(CHANNEL)-2 5066 y Fc(Inheritance)n(:)227
-5213 y Fk(The)28 b(Channel)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)-2 5353 y Fc(A)m(ttributes)n(:)227
-5499 y Fk(In)34 b(addition)e(to)h(those)g(attributes)g(common)g(to)g
-(all)f(Ob)5 b(jects,)34 b(ev)n(ery)e(Channel)h(also)f(has)h(the)g
-(follo)n(wing)f(at-)227 5599 y(tributes:)p eop end
-%%Page: 478 488
-TeXDict begin 478 487 bop 0 52 a FG(478)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(Commen)n(t:)37 b(Include)28 b(textual)g(commen)n(ts)f(in)h
-(output?)340 484 y Fj(\017)45 b Fk(F)-7 b(ull:)38 b(Set)28
-b(lev)n(el)f(of)g(output)i(detail)340 617 y Fj(\017)45
-b Fk(Rep)r(ortLev)n(el:)36 b(Selects)28 b(the)g(lev)n(el)f(of)g(error)f
-(rep)r(orting)340 750 y Fj(\017)45 b Fk(Skip:)37 b(Skip)28
-b(irrelev)-5 b(an)n(t)27 b(data?)340 883 y Fj(\017)45
-b Fk(Strict:)37 b(Generate)27 b(errors)f(instead)h(of)h(w)n(arnings?)-2
-1046 y Fc(F)-8 b(unctions)n(:)227 1192 y Fk(In)29 b(addition)f(to)g
-(those)g(routines)f(applicable)h(to)g(all)g(Ob)5 b(jects,)28
-b(the)h(follo)n(wing)e(routines)g(ma)n(y)h(also)f(b)r(e)i(applied)227
-1291 y(to)f(all)f(Channels:)340 1553 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(W)-9 b(ARNINGS:)29 b(Return)f(w)n(arnings)e(from)h(the)h
-(previous)f(read)f(or)h(write)340 1686 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(READ:)28 b(Read)g(an)f(Ob)5 b(ject)27
-b(from)h(a)f(Channel)340 1819 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(WRITE:)28 b(W)-7 b(rite)28 b(an)f(Ob)5 b(ject)27
-b(to)h(a)f(Channel)p 0 2018 3780 12 v 0 2150 a FA(Circle)386
-b Fd(A)38 b(circular)f(or)h(spherical)g(region)f(within)g(a)i(F)-10
-b(rame)384 b FA(Circle)0 2339 y Fc(Description:)44 b
-Fk(The)27 b(Circle)e(class)h(implemen)n(ts)g(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(a)h(circle)g(or)f(sphere)g(within)i(a)f(F)-7
-b(rame.)0 2489 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2589 y Fk(AST)p Ft(_)p Fk(CIR)n(CLE)-2 2739 y Fc(Inheritance)n(:)227
-2885 y Fk(The)28 b(Circle)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 3034 y Fc(A)m(ttributes)n(:)227 3181 y Fk(The)19
-b(Circle)g(class)f(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)f(Regions.)-2 3330 y Fc(F)-8 b(unctions)n(:)227
-3476 y Fk(In)28 b(addition)g(to)g(those)g(routines)f(applicable)h(to)f
-(all)h(Regions,)f(the)i(follo)n(wing)e(routines)g(ma)n(y)g(also)g(b)r
-(e)i(applied)227 3576 y(to)f(all)f(Circles:)p 0 3776
-V 0 3906 a FA(CmpF)-11 b(rame)1429 3907 y Fd(Comp)s(ound)37
-b(F)-10 b(rame)3128 3906 y FA(CmpF)f(rame)0 4101 y Fc(Description:)44
-b Fk(A)33 b(CmpF)-7 b(rame)32 b(is)g(a)f(comp)r(ound)i(F)-7
-b(rame)31 b(whic)n(h)h(allo)n(ws)f(t)n(w)n(o)g(comp)r(onen)n(t)h(F)-7
-b(rames)32 b(\(of)g(an)n(y)f(class\))227 4201 y(to)i(b)r(e)h(merged)e
-(together)g(to)h(form)g(a)g(more)f(complex)h(F)-7 b(rame.)53
-b(The)33 b(axes)f(of)i(the)f(t)n(w)n(o)g(comp)r(onen)n(t)f(F)-7
-b(rames)227 4300 y(then)25 b(app)r(ear)f(together)f(in)i(the)f
-(resulting)g(CmpF)-7 b(rame)24 b(\(those)h(of)f(the)h(\014rst)f(F)-7
-b(rame,)24 b(follo)n(w)n(ed)g(b)n(y)g(those)g(of)g(the)227
-4400 y(second)j(F)-7 b(rame\).)227 4525 y(Since)24 b(a)f(CmpF)-7
-b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24 b(it)g(can)f(b)r(e)g
-(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f(further)g(CmpF)-7
-b(rames.)227 4624 y(F)g(rames)27 b(of)h(arbitrary)d(complexit)n(y)i(ma)
-n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h(F)-7
-b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 4749 y(Also)39
-b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)-7
-b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 4849 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 4948 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 5048
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 5148 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)0
-5297 y Fc(Constructor)32 b(F)-8 b(unction:)227 5397 y
-Fk(AST)p Ft(_)p Fk(CMPFRAME)-2 5547 y Fc(Inheritance)n(:)227
-5693 y Fk(The)28 b(CmpF)-7 b(rame)27 b(class)g(inherits)g(from)h(the)g
-(F)-7 b(rame)27 b(class.)p eop end
-%%Page: 479 489
-TeXDict begin 479 488 bop 3643 52 a FG(479)-2 351 y Fc(A)m(ttributes)n
-(:)227 497 y Fk(The)28 b(CmpF)-7 b(rame)28 b(class)g(do)r(es)f(not)h
-(de\014ne)h(an)n(y)e(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)f(applicable)h(to)g(all)227 597 y(F)-7 b(rames.)34
-b(Ho)n(w)n(ev)n(er,)19 b(the)i(attributes)f(of)g(the)g(comp)r(onen)n(t)
-g(F)-7 b(rames)19 b(can)h(b)r(e)g(accessed)f(as)g(if)h(they)h(w)n(ere)e
-(attributes)227 697 y(of)29 b(the)g(CmpF)-7 b(rame.)39
-b(F)-7 b(or)28 b(instance,)g(if)h(a)g(CmpF)-7 b(rame)28
-b(con)n(tains)f(a)h(Sp)r(ecF)-7 b(rame)29 b(and)f(a)g(SkyF)-7
-b(rame,)28 b(then)h(the)227 796 y(CmpF)-7 b(rame)30 b(will)g(recognise)
-e(the)i Ft(")p Fk(Equino)n(x)p Ft(")e Fk(attribute)i(and)g(forw)n(ard)e
-(access)h(requests)g(to)h(the)g(comp)r(onen)n(t)227 896
-y(SkyF)-7 b(rame.)36 b(Lik)n(ewise,)27 b(it)h(will)f(recognise)f(the)h
-Ft(")p Fk(RestF)-7 b(req)p Ft(")26 b Fk(attribute)i(and)f(forw)n(ard)f
-(access)g(requests)g(to)h(the)227 995 y(comp)r(onen)n(t)36
-b(Sp)r(ecF)-7 b(rame.)63 b(An)36 b(axis)g(index)g(can)g(optionally)f(b)
-r(e)h(app)r(ended)h(to)f(the)h(end)f(of)g(an)n(y)f(attribute)227
-1095 y(name,)f(in)f(whic)n(h)f(case)g(the)g(request)g(to)h(access)e
-(the)i(attribute)f(will)h(b)r(e)g(forw)n(arded)e(to)h(the)h(primary)e
-(F)-7 b(rame)227 1195 y(de\014ning)28 b(the)g(sp)r(eci\014ed)g(axis.)-2
-1341 y Fc(F)-8 b(unctions)n(:)227 1487 y Fk(The)33 b(CmpF)-7
-b(rame)32 b(class)f(do)r(es)i(not)f(de\014ne)h(an)n(y)e(new)i(routines)
-f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-1587 y(F)-7 b(rames.)p 0 1781 3780 12 v 0 1911 a FA(CmpMap)1363
-1912 y Fd(Comp)s(ound)38 b(Mapping)3228 1911 y FA(CmpMap)0
-2100 y Fc(Description:)44 b Fk(A)e(CmpMap)f(is)g(a)g(comp)r(ound)g
-(Mapping)g(whic)n(h)g(allo)n(ws)f(t)n(w)n(o)g(comp)r(onen)n(t)h
-(Mappings)g(\(of)g(an)n(y)227 2200 y(class\))28 b(to)g(b)r(e)g
-(connected)g(together)g(to)g(form)g(a)f(more)h(complex)g(Mapping.)38
-b(This)28 b(connection)g(ma)n(y)f(either)h(b)r(e)227
-2300 y Ft(")p Fk(in)34 b(series)p Ft(")e Fk(\(where)h(the)h(\014rst)f
-(Mapping)h(is)f(used)h(to)f(transform)g(the)h(co)r(ordinates)e(of)h
-(eac)n(h)g(p)r(oin)n(t)h(and)f(the)227 2399 y(second)i(mapping)g(is)g
-(then)h(applied)f(to)g(the)g(result\),)i(or)e Ft(")p
-Fk(in)g(parallel)p Ft(")e Fk(\(where)i(one)g(Mapping)g(transforms)227
-2499 y(the)26 b(earlier)f(co)r(ordinates)f(for)h(eac)n(h)g(p)r(oin)n(t)
-h(and)g(the)g(second)f(Mapping)g(sim)n(ultaneously)g(transforms)f(the)i
-(later)227 2598 y(co)r(ordinates\).)227 2722 y(Since)g(a)f(CmpMap)g(is)
-h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r(e)h(used)f(as)g(a)g(comp)r
-(onen)n(t)g(in)h(forming)e(further)i(CmpMaps.)227 2821
-y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)h
-(from)e(simple)h(individual)f(Mappings)g(in)h(this)g(w)n(a)n(y)-7
-b(.)0 2968 y Fc(Constructor)32 b(F)-8 b(unction:)227
-3068 y Fk(AST)p Ft(_)p Fk(CMPMAP)-2 3214 y Fc(Inheritance)n(:)227
-3360 y Fk(The)28 b(CmpMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 3507 y Fc(A)m(ttributes)n(:)227 3653 y Fk(The)33
-b(CmpMap)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n(y)e(new)i
-(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g(applicable)g(to)g
-(all)227 3753 y(Mappings.)-2 3899 y Fc(F)-8 b(unctions)n(:)227
-4045 y Fk(The)37 b(CmpMap)g(class)f(do)r(es)g(not)h(de\014ne)f(an)n(y)g
-(new)h(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h
-(to)h(all)227 4145 y(Mappings.)p 0 4339 V 0 4470 a FA(CmpRegion)215
-b Fd(A)39 b(com)m(bination)c(of)k(t)m(w)m(o)e(regions)g(within)g(a)1567
-4585 y(single)h(F)-10 b(rame)3087 4470 y FA(CmpRegion)0
-4773 y Fc(Description:)44 b Fk(A)d(CmpRegion)f(is)g(a)g(Region)g(whic)n
-(h)h(allo)n(ws)e(t)n(w)n(o)g(comp)r(onen)n(t)h(Regions)g(\(of)g(an)n(y)
-g(class\))g(to)g(b)r(e)227 4872 y(com)n(bined)29 b(to)h(form)f(a)g
-(more)f(complex)h(Region.)42 b(This)30 b(com)n(bination)e(ma)n(y)h(b)r
-(e)h(p)r(erformed)f(a)g(b)r(o)r(olean)g(AND,)227 4972
-y(OR)i(or)f(X)n(OR)h(\(exclusiv)n(e)g(OR\))g(op)r(erator.)46
-b(If)31 b(the)h(AND)g(op)r(erator)d(is)j(used,)g(then)f(a)g(p)r
-(osition)g(is)g(inside)g(the)227 5072 y(CmpRegion)24
-b(only)f(if)i(it)f(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n(o)f(comp)
-r(onen)n(t)h(Regions.)34 b(If)25 b(the)f(OR)g(op)r(erator)e(is)h(used,)
-i(then)227 5171 y(a)i(p)r(osition)f(is)h(inside)g(the)g(CmpRegion)f(if)
-h(it)h(is)e(inside)h(either)g(\(or)f(b)r(oth\))h(of)g(its)g(t)n(w)n(o)f
-(comp)r(onen)n(t)h(Regions.)35 b(If)227 5271 y(the)27
-b(X)n(OR)f(op)r(erator)f(is)h(used,)g(then)h(a)f(p)r(osition)g(is)h
-(inside)f(the)h(CmpRegion)f(if)h(it)f(is)h(inside)f(one)g(but)h(not)f
-(b)r(oth)227 5371 y(of)g(its)f(t)n(w)n(o)g(comp)r(onen)n(t)g(Regions.)
-35 b(Other)25 b(op)r(erators)e(can)i(b)r(e)g(formed)g(b)n(y)g(negating)
-g(one)g(or)f(b)r(oth)i(comp)r(onen)n(t)227 5470 y(Regions)h(b)r(efore)g
-(using)g(them)i(to)e(construct)g(a)g(new)h(CmpRegion.)227
-5593 y(The)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Region)g(need)g(not)h(refer)
-e(to)h(the)h(same)f(co)r(ordinate)f(F)-7 b(rame,)28 b(but)h(it)g(m)n
-(ust)f(b)r(e)h(p)r(ossible)227 5693 y(for)22 b(the)h(AST)p
-Ft(_)p Fk(CONVER)-7 b(T)23 b(function)g(to)f(determine)h(a)f(Mapping)g
-(b)r(et)n(w)n(een)h(them)g(\(an)g(error)d(will)j(b)r(e)g(rep)r(orted)p
-eop end
-%%Page: 480 490
-TeXDict begin 480 489 bop 0 52 a FG(480)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(otherwise)k(when)g(the)h
-(CmpRegion)f(is)g(created\).)54 b(F)-7 b(or)33 b(instance,)i(a)e
-(CmpRegion)g(ma)n(y)f(com)n(bine)h(a)g(Region)227 451
-y(de\014ned)k(within)f(an)g(ICRS)g(SkyF)-7 b(rame)36
-b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g(Galactic)f(SkyF)-7
-b(rame.)62 b(This)36 b(is)227 551 y(acceptable)24 b(b)r(ecause)h(the)g
-(SkyF)-7 b(rame)24 b(class)g(kno)n(ws)f(ho)n(w)h(to)h(con)n(v)n(ert)e
-(b)r(et)n(w)n(een)i(these)g(t)n(w)n(o)f(systems,)h(and)f(con-)227
-650 y(sequen)n(tly)j(the)g(AST)p Ft(_)p Fk(CONVER)-7
-b(T)27 b(function)g(will)h(also)d(b)r(e)j(able)e(to)h(con)n(v)n(ert)f
-(b)r(et)n(w)n(een)h(them.)37 b(In)27 b(suc)n(h)g(cases,)227
-750 y(the)33 b(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h(mapp)
-r(ed)f(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32
-b(of)h(the)g(\014rst)g(comp)r(onen)n(t)227 849 y(Region,)g(and)g(the)f
-(F)-7 b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h
-(whole)g(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-949 y(comp)r(onen)n(t)28 b(Region.)227 1077 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-1176 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 1332 y Fc(Constructor)32 b(F)-8 b(unction:)227
-1431 y Fk(AST)p Ft(_)p Fk(CMPREGION)-2 1587 y Fc(Inheritance)n(:)227
-1733 y Fk(The)28 b(CmpRegion)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 1889 y Fc(A)m(ttributes)n(:)227 2035 y Fk(The)g(CmpRegion)f
-(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i(attributes)g(b)r(ey)
-n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227
-2134 y(Regions.)-2 2290 y Fc(F)-8 b(unctions)n(:)227
-2436 y Fk(The)31 b(CmpRegion)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n
-(y)g(new)g(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 2536 y(Regions.)p 0 2741 3780
-12 v 0 2872 a FA(DSBSp)t(ecF)-11 b(rame)1303 2873 y Fd(Dual)39
-b(sideband)f(sp)s(ectral)1128 2987 y(co)s(ordinate)e(system)j
-(description)2865 2872 y FA(DSBSp)t(ecF)-11 b(rame)0
-3182 y Fc(Description:)44 b Fk(A)d(DSBSp)r(ecF)-7 b(rame)41
-b(is)f(a)g(sp)r(ecialised)g(form)g(of)g(Sp)r(ecF)-7 b(rame)40
-b(whic)n(h)h(represen)n(ts)d(p)r(ositions)i(in)h(a)227
-3282 y(sp)r(ectrum)34 b(obtained)f(using)h(a)f(dual)g(sideband)h
-(instrumen)n(t.)55 b(Suc)n(h)33 b(an)h(instrumen)n(t)f(pro)r(duces)g(a)
-g(sp)r(ectrum)227 3381 y(in)d(whic)n(h)f(eac)n(h)g(p)r(oin)n(t)g(con)n
-(tains)g(con)n(tributions)f(from)h(t)n(w)n(o)g(distinctly)h(di\013eren)
-n(t)f(frequencies,)g(one)g(from)g(the)227 3481 y Ft(")p
-Fk(lo)n(w)n(er)34 b(side)i(band)p Ft(")f Fk(\(LSB\))i(and)e(one)h(from)
-f(the)i Ft(")p Fk(upp)r(er)e(side)h(band)p Ft(")f Fk(\(USB\).)i
-(Corresp)r(onding)d(LSB)i(and)227 3581 y(USB)26 b(frequencies)g(are)e
-(connected)i(b)n(y)f(the)i(fact)f(that)g(they)g(are)e(an)i(equal)f
-(distance)h(on)f(either)h(side)f(of)h(a)g(\014xed)227
-3680 y(cen)n(tral)h(frequency)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fk(Lo)r(cal)e(Oscillator)p Ft(")g Fk(\(LO\))i(frequency)-7
-b(.)227 3808 y(When)33 b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g
-(a)f(sp)r(ectrum,)i(it)g(is)e(necessary)f(to)i(indicate)g(whether)g
-(the)g(quoted)227 3907 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)
-g(or)f(the)i(corresp)r(onding)d(LSB)i(p)r(osition.)36
-b(The)27 b(SideBand)g(attribute)g(pro)n(vides)227 4007
-y(this)36 b(indication.)60 b(Another)35 b(option)g(that)h(the)f
-(SideBand)g(attribute)h(pro)n(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r
-(ectral)227 4107 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)
-f(o\013set)g(from)h(the)g(LO)f(frequency)-7 b(.)227 4234
-y(In)32 b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n
-(y)g(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)
-227 4334 y Ft(")p Fk(cen)n(tral)p Ft(")37 b Fk(sp)r(ectral)h(p)r
-(osition.)69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h
-(that)f(of)h(some)f(in)n(teresting)f(sp)r(ectral)227
-4434 y(feature.)f(The)23 b(distance)h(from)f(this)h(cen)n(tral)f(p)r
-(osition)g(to)h(the)g(LO)f(frequency)g(is)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fk(in)n(termediate)227 4533 y(frequency)p Ft(")k
-Fk(\(IF\).)h(The)g(v)-5 b(alue)28 b(supplied)h(for)f(IF)h(can)f(b)r(e)h
-(a)f(signed)g(v)-5 b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f
-(the)227 4633 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n
-(w)g(the)h(cen)n(tral)f(p)r(osition.)0 4788 y Fc(Constructor)32
-b(F)-8 b(unction:)227 4888 y Fk(AST)p Ft(_)p Fk(DSBSPECFRAME)-2
-5044 y Fc(Inheritance)n(:)227 5190 y Fk(The)28 b(DSBSp)r(ecF)-7
-b(rame)28 b(class)e(inherits)i(from)f(the)h(Sp)r(ecF)-7
-b(rame)27 b(class.)-2 5345 y Fc(A)m(ttributes)n(:)227
-5491 y Fk(In)39 b(addition)g(to)g(those)f(attributes)h(common)g(to)f
-(all)h(Sp)r(ecF)-7 b(rames,)41 b(ev)n(ery)d(DSBSp)r(ecF)-7
-b(rame)39 b(also)f(has)g(the)227 5591 y(follo)n(wing)27
-b(attributes:)p eop end
-%%Page: 481 491
-TeXDict begin 481 490 bop 3643 52 a FG(481)340 351 y
-Fj(\017)45 b Fk(AlignSideBand:)37 b(Should)28 b(alignmen)n(t)f(o)r
-(ccur)g(b)r(et)n(w)n(een)g(sidebands?)340 477 y Fj(\017)45
-b Fk(DSBCen)n(tre:)37 b(The)28 b(cen)n(tral)e(p)r(osition)i(of)f(in)n
-(terest.)340 603 y Fj(\017)45 b Fk(IF:)28 b(The)g(in)n(termediate)f
-(frequency)g(used)h(to)f(de\014ne)h(the)g(LO)f(frequency)-7
-b(.)340 729 y Fj(\017)45 b Fk(ImagF)-7 b(req:)36 b(The)28
-b(image)e(sideband)i(equiv)-5 b(alen)n(t)27 b(of)h(the)g(rest)f
-(frequency)-7 b(.)340 854 y Fj(\017)45 b Fk(SideBand:)37
-b(Indicates)27 b(whic)n(h)h(sideband)f(the)h(DSBSp)r(ecF)-7
-b(rame)28 b(represen)n(ts.)-2 1009 y Fc(F)-8 b(unctions)n(:)227
-1155 y Fk(The)30 b(DSBSp)r(ecF)-7 b(rame)29 b(class)g(do)r(es)g(not)h
-(de\014ne)f(an)n(y)g(new)h(routines)f(b)r(ey)n(ond)g(those)g(whic)n(h)g
-(are)g(applicable)g(to)227 1255 y(all)f(Sp)r(ecF)-7 b(rames.)p
-0 1440 3780 12 v 0 1571 a FA(DssMap)696 1572 y Fd(Map)39
-b(p)s(oin)m(ts)f(using)g(a)h(Digitised)e(Sky)i(Surv)m(ey)f(plate)1688
-1686 y(solution)3303 1571 y FA(DssMap)0 1838 y Fc(Description:)44
-b Fk(The)29 b(DssMap)g(class)e(implemen)n(ts)j(a)e(Mapping)g(whic)n(h)h
-(transforms)e(b)r(et)n(w)n(een)i(2-dimensional)f(pixel)227
-1937 y(co)r(ordinates)38 b(and)h(an)g(equatorial)e(sky)h(co)r(ordinate)
-g(system)h(\(righ)n(t)g(ascension)e(and)i(declination\))g(using)g(a)227
-2037 y(Digitised)28 b(Sky)g(Surv)n(ey)e(\(DSS\))j(astrometric)d(plate)i
-(solution.)227 2158 y(The)e(input)g(co)r(ordinates)e(are)h(pixel)g(n)n
-(um)n(b)r(ers)g(along)g(the)h(\014rst)f(and)g(second)g(dimensions)g(of)
-h(an)f(image,)g(where)227 2258 y(the)j(cen)n(tre)f(of)h(the)g(\014rst)f
-(pixel)h(is)f(lo)r(cated)h(at)f(\(1,1\))g(and)h(the)g(spacing)e(b)r(et)
-n(w)n(een)i(pixel)g(cen)n(tres)e(is)i(unit)n(y)-7 b(.)227
-2379 y(The)34 b(output)h(co)r(ordinates)e(are)g(righ)n(t)g(ascension)g
-(and)h(declination)g(in)h(radians.)55 b(The)34 b(celestial)g(co)r
-(ordinate)227 2478 y(system)22 b(used)g(\(FK4,)h(FK5,)g(etc.\))35
-b(is)22 b(unsp)r(eci\014ed,)i(and)e(will)g(usually)g(b)r(e)g(indicated)
-h(b)n(y)e(appropriate)g(k)n(eyw)n(ords)227 2578 y(in)28
-b(a)f(FITS)h(header.)0 2720 y Fc(Constructor)k(F)-8 b(unction:)227
-2820 y Fk(The)24 b(DssMap)f(class)g(do)r(es)g(not)g(ha)n(v)n(e)g(a)g
-(constructor)f(function.)36 b(A)24 b(DssMap)f(is)h(created)e(only)h(as)
-g(a)g(b)n(y-pro)r(duct)227 2919 y(of)35 b(reading)e(a)h(F)-7
-b(rameSet)35 b(\(using)f(AST)p Ft(_)p Fk(READ\))h(from)f(a)g(FitsChan)h
-(whic)n(h)g(con)n(tains)e(FITS)i(header)f(cards)227 3019
-y(describing)25 b(a)f(DSS)i(plate)g(solution,)f(and)g(whose)f(Enco)r
-(ding)h(attribute)g(is)g(set)h(to)f Ft(")p Fk(DSS)p Ft(")p
-Fk(.)36 b(The)25 b(result)g(of)g(suc)n(h)227 3119 y(a)i(read,)g(if)h
-(successful,)g(is)f(a)g(F)-7 b(rameSet)28 b(whose)f(base)g(and)g
-(curren)n(t)g(F)-7 b(rames)27 b(are)f(related)h(b)n(y)g(a)h(DssMap.)-2
-3261 y Fc(Inheritance)n(:)227 3407 y Fk(The)g(DssMap)f(class)g
-(inherits)g(from)h(the)g(Mapping)f(class.)-2 3550 y Fc(A)m(ttributes)n
-(:)227 3696 y Fk(The)36 b(DssMap)f(class)g(do)r(es)g(not)g(de\014ne)h
-(an)n(y)f(new)g(attributes)g(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 3795 y(Mappings.)-2 3938 y
-Fc(F)-8 b(unctions)n(:)227 4084 y Fk(The)40 b(DssMap)g(class)e(do)r(es)
-i(not)g(de\014ne)g(an)n(y)f(new)h(routines)f(b)r(ey)n(ond)g(those)h
-(whic)n(h)f(are)g(applicable)g(to)h(all)227 4183 y(Mappings.)p
-0 4368 V 0 4500 a FA(Ellipse)231 b Fd(An)39 b(elliptical)c(region)j
-(within)f(a)h(2-dimensional)e(F)-10 b(rame)229 b FA(Ellipse)0
-4675 y Fc(Description:)44 b Fk(The)31 b(Ellipse)e(class)h(implemen)n
-(ts)g(a)g(Region)f(whic)n(h)i(represen)n(ts)d(a)i(ellipse)g(within)h(a)
-f(2-dimensional)227 4774 y(F)-7 b(rame.)0 4917 y Fc(Constructor)32
-b(F)-8 b(unction:)227 5016 y Fk(AST)p Ft(_)p Fk(ELLIPSE)-2
-5159 y Fc(Inheritance)n(:)227 5305 y Fk(The)28 b(Ellipse)f(class)g
-(inherits)g(from)g(the)h(Region)f(class.)-2 5447 y Fc(A)m(ttributes)n
-(:)227 5593 y Fk(The)39 b(Ellipse)g(class)f(do)r(es)g(not)h(de\014ne)g
-(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f
-(applicable)g(to)h(all)227 5693 y(Regions.)p eop end
-%%Page: 482 492
-TeXDict begin 482 491 bop 0 52 a FG(482)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(F)-8 b(unctions)n(:)227
-497 y Fk(In)28 b(addition)g(to)g(those)g(routines)f(applicable)h(to)f
-(all)h(Regions,)f(the)i(follo)n(wing)e(routines)g(ma)n(y)g(also)g(b)r
-(e)i(applied)227 597 y(to)f(all)f(Ellipses:)p 0 798 3780
-12 v 0 930 a FA(FitsChan)843 937 y Fd(I/O)39 b(Channel)f(using)g(FITS)h
-(header)f(cards)h(to)1440 1058 y(represen)m(t)f(Ob)7
-b(jects)3240 930 y FA(FitsChan)0 1253 y Fc(Description:)44
-b Fk(A)27 b(FitsChan)e(is)h(a)g(sp)r(ecialised)f(form)h(of)f(Channel)h
-(whic)n(h)g(supp)r(orts)f(I/O)g(op)r(erations)g(in)n(v)n(olving)f(the)
-227 1353 y(use)32 b(of)h(FITS)f(\(Flexible)h(Image)e(T)-7
-b(ransp)r(ort)31 b(System\))i(header)e(cards.)50 b(W)-7
-b(riting)32 b(an)g(Ob)5 b(ject)33 b(to)f(a)g(FitsChan)227
-1453 y(\(using)22 b(AST)p Ft(_)p Fk(WRITE\))g(will,)h(if)f(the)g(Ob)5
-b(ject)22 b(is)f(suitable,)i(generate)e(a)g(description)g(of)h(that)g
-(Ob)5 b(ject)21 b(comp)r(osed)227 1552 y(of)k(FITS)h(header)e(cards,)h
-(and)g(reading)f(from)h(a)g(FitsChan)g(will)g(create)g(a)f(new)i(Ob)5
-b(ject)25 b(from)g(its)g(FITS)g(header)227 1652 y(card)i(description.)
-227 1777 y(While)36 b(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f(represen)n
-(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f(or)h(more)
-g(80-c)n(haracter)227 1877 y Ft(")p Fk(header)29 b(cards)p
-Ft(")f Fk(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-1977 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fk(END)p Ft(")e Fk(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 2076
-y(accessed)38 b(in)h(an)n(y)f(order)f(b)n(y)i(using)f(the)h(FitsChan's)
-g(in)n(teger)f(Card)g(attribute,)k(whic)n(h)c(iden)n(ti\014es)h(a)g
-Ft(")p Fk(cur-)227 2176 y(ren)n(t)p Ft(")44 b Fk(card,)k(to)c(whic)n(h)
-h(subsequen)n(t)f(op)r(erations)f(apply)-7 b(.)87 b(Searc)n(hes)43
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(er-)227
-2276 y(formed)23 b(\(using)h(AST)p Ft(_)p Fk(FINDFITS\),)h(new)e(cards)
-f(ma)n(y)h(b)r(e)h(inserted)f(\(AST)p Ft(_)p Fk(PUTFITS,)h(AST)p
-Ft(_)p Fk(PUTCARDS,)227 2375 y(AST)p Ft(_)p Fk(SETFITS)p
-Fm(<)p Fk(X)p Fm(>)p Fk(\))18 b(and)g(existing)g(ones)g(ma)n(y)g(b)r(e)
-h(deleted)f(\(AST)p Ft(_)p Fk(DELFITS\),)h(extracted)f(\(AST)p
-Ft(_)p Fk(GETFITS)p Fm(<)p Fk(X)p Fm(>)p Fk(\))227 2475
-y(or)27 b(c)n(hanged)g(\(AST)p Ft(_)p Fk(SETFITS)p Fm(<)p
-Fk(X)p Fm(>)p Fk(\).)227 2600 y(When)37 b(y)n(ou)f(create)g(a)g
-(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g(the)h(option)f(of)h(sp)r(ecifying)g
-Ft(")p Fk(source)p Ft(")d Fk(and)j Ft(")p Fk(sink)p Ft(")e
-Fk(functions)227 2700 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f
-(data)h(stores)f(b)n(y)h(reading)f(and)h(writing)g(FITS)g(header)g
-(cards.)35 b(If)26 b(y)n(ou)g(pro)n(vide)227 2800 y(a)h(source)f
-(function,)j(it)e(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h
-(header)f(cards)f(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-2899 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 2999 y(en)n(ter)23 b(data)g(in)n(to)g(it)g(\(e.g.)36
-b(using)23 b(AST)p Ft(_)p Fk(PUTFITS,)g(AST)p Ft(_)p
-Fk(PUTCARDS)h(or)e(AST)p Ft(_)p Fk(WRITE\).)i(If)f(y)n(ou)g(pro)n(vide)
-227 3099 y(a)h(sink)f(function,)j(it)e(is)g(used)g(to)f(deliv)n(er)g
-(an)n(y)g(remaining)g(con)n(ten)n(ts)h(of)f(a)h(FitsChan)g(to)g(an)f
-(external)g(data)h(store)227 3198 y(when)30 b(the)g(FitsChan)g(is)f
-(deleted.)43 b(If)30 b(y)n(ou)f(do)g(not)h(pro)n(vide)e(a)h(sink)h
-(function,)h(an)n(y)d(header)h(cards)g(remaining)227
-3298 y(when)f(the)g(FitsChan)g(is)g(deleted)g(will)g(b)r(e)g(lost,)f
-(so)g(y)n(ou)g(should)h(arrange)d(to)i(extract)g(them)i(\014rst)e(if)h
-(necessary)227 3397 y(\(e.g.)37 b(using)27 b(AST)p Ft(_)p
-Fk(FINDFITS)i(or)e(AST)p Ft(_)p Fk(READ\).)227 3523 y(Co)r(ordinate)i
-(system)g(information)g(ma)n(y)g(b)r(e)h(describ)r(ed)g(using)f(FITS)h
-(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)n(t)227
-3623 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p Fk(enco)r(dings)p
-Ft(")p Fk(.)39 b(When)29 b(an)g(AST)g(Ob)5 b(ject)29
-b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)227
-3722 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r(ding)f
-(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5 b(ject)22
-b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227 3822
-y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 3922 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-4021 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 4121 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 4220 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 4346 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 4446 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 4545 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-4645 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 4744 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)227 4870 y(The)k(detailed)h(b)r
-(eha)n(viour)e(of)h(AST)p Ft(_)p Fk(READ)g(and)g(AST)p
-Ft(_)p Fk(WRITE,)g(when)h(used)f(with)g(a)g(FitsChan,)h(dep)r(ends)227
-4970 y(on)h(the)h(enco)r(ding)f(in)g(use.)54 b(In)33
-b(general,)g(ho)n(w)n(ev)n(er,)g(all)g(successful)f(use)h(of)h(AST)p
-Ft(_)p Fk(READ)f(is)g(destructiv)n(e,)h(so)227 5069 y(that)29
-b(FITS)g(header)f(cards)f(are)h(consumed)g(in)h(the)g(pro)r(cess)f(of)g
-(reading)g(an)g(Ob)5 b(ject,)29 b(and)f(are)g(remo)n(v)n(ed)f(from)227
-5169 y(the)i(FitsChan)f(\(this)h(deletion)g(can)f(b)r(e)h(prev)n(en)n
-(ted)e(for)h(sp)r(eci\014c)g(cards)g(b)n(y)g(calling)f(the)i(AST)p
-Ft(_)p Fk(RET)-7 b(AINFITS)227 5269 y(routine\).)36 b(An)23
-b(unsuccessful)g(call)g(of)g(AST)p Ft(_)p Fk(READ)h(\(for)f(instance,)h
-(caused)f(b)n(y)f(the)i(FitsChan)f(not)h(con)n(taining)227
-5368 y(the)19 b(necessary)e(FITS)i(headers)e(cards)h(needed)g(to)h
-(create)e(an)i(Ob)5 b(ject\))18 b(results)g(in)h(the)g(con)n(ten)n(ts)f
-(of)h(the)g(FitsChan)227 5468 y(b)r(eing)28 b(left)g(unc)n(hanged.)227
-5593 y(If)38 b(the)f(enco)r(ding)f(in)h(use)g(allo)n(ws)f(only)g(a)h
-(single)f(Ob)5 b(ject)37 b(description)f(to)h(b)r(e)g(stored)f(in)h(a)g
-(FitsChan)g(\(e.g.)227 5693 y(the)31 b(DSS,)g(FITS-W)n(CS)g(and)f
-(FITS-IRAF)h(enco)r(dings\),)g(then)g(write)g(op)r(erations)e(using)h
-(AST)p Ft(_)p Fk(WRITE)g(will)p eop end
-%%Page: 483 493
-TeXDict begin 483 492 bop 3643 52 a FG(483)227 351 y
-Fk(o)n(v)n(er-write)36 b(an)n(y)i(existing)h(Ob)5 b(ject)38
-b(description)g(using)g(that)h(enco)r(ding.)70 b(Otherwise)37
-b(\(e.g.)70 b(the)39 b(NA)-7 b(TIVE)227 451 y(enco)r(ding\),)26
-b(m)n(ultiple)g(Ob)5 b(ject)25 b(descriptions)f(are)h(written)g(sequen)
-n(tially)g(and)g(ma)n(y)f(later)h(b)r(e)h(read)e(bac)n(k)h(in)g(the)227
-551 y(same)i(sequence.)0 699 y Fc(Constructor)32 b(F)-8
-b(unction:)227 799 y Fk(AST)p Ft(_)p Fk(FITSCHAN)-2 947
-y Fc(Inheritance)n(:)227 1093 y Fk(The)28 b(FitsChan)g(class)e
-(inherits)i(from)f(the)h(Channel)f(class.)-2 1242 y Fc(A)m(ttributes)n
-(:)227 1388 y Fk(In)37 b(addition)f(to)g(those)g(attributes)g(common)g
-(to)g(all)g(Channels,)i(ev)n(ery)d(FitsChan)h(also)f(has)h(the)h(follo)
-n(wing)227 1487 y(attributes:)340 1747 y Fj(\017)45 b
-Fk(AllW)-7 b(arnings:)37 b(A)28 b(list)f(of)h(the)g(a)n(v)-5
-b(ailable)26 b(conditions)340 1879 y Fj(\017)45 b Fk(Card:)36
-b(Index)28 b(of)g(curren)n(t)e(FITS)i(card)f(in)h(a)f(FitsChan)340
-2011 y Fj(\017)45 b Fk(CarLin:)36 b(Ignore)27 b(spherical)f(rotations)g
-(on)i(CAR)g(pro)5 b(jections?)340 2142 y Fj(\017)45 b
-Fk(CDMatrix:)37 b(Use)27 b(a)h(CD)g(matrix)f(instead)g(of)h(a)f(PC)g
-(matrix?)340 2274 y Fj(\017)45 b Fk(Clean:)37 b(Remo)n(v)n(e)26
-b(cards)h(used)g(whilst)h(reading)f(ev)n(en)g(if)h(an)f(error)f(o)r
-(ccurs?)340 2406 y Fj(\017)45 b Fk(DefB1950:)36 b(Use)27
-b(FK4)g(B1950)f(as)h(default)h(equatorial)e(co)r(ordinates?)340
-2538 y Fj(\017)45 b Fk(Enco)r(ding:)36 b(System)28 b(for)f(enco)r(ding)
-g(Ob)5 b(jects)28 b(as)f(FITS)g(headers)340 2670 y Fj(\017)45
-b Fk(FitsDigits:)38 b(Digits)27 b(of)h(precision)f(for)g(\015oating-p)r
-(oin)n(t)f(FITS)i(v)-5 b(alues)340 2802 y Fj(\017)45
-b Fk(Iw)n(c:)37 b(Add)28 b(a)f(F)-7 b(rame)27 b(describing)g(In)n
-(termediate)g(W)-7 b(orld)27 b(Co)r(ords?)340 2934 y
-Fj(\017)45 b Fk(Ncard:)37 b(Num)n(b)r(er)27 b(of)h(FITS)g(header)f
-(cards)f(in)i(a)f(FitsChan)340 3065 y Fj(\017)45 b Fk(W)-7
-b(arnings:)36 b(Pro)r(duces)27 b(w)n(arnings)e(ab)r(out)j(selected)f
-(conditions)-2 3226 y Fc(F)-8 b(unctions)n(:)227 3372
-y Fk(In)25 b(addition)g(to)f(those)g(routines)g(applicable)h(to)f(all)g
-(Channels,)h(the)g(follo)n(wing)f(routines)g(ma)n(y)g(also)g(b)r(e)h
-(applied)227 3472 y(to)j(all)f(FitsChans:)340 3732 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(DELFITS:)28 b(Delete)g(the)g(curren)n
-(t)f(FITS)h(card)f(in)g(a)h(FitsChan)340 3863 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(FINDFITS:)29 b(Find)f(a)f(FITS)h(card)f(in)h(a)f
-(FitsChan)h(b)n(y)f(k)n(eyw)n(ord)340 3995 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GETFITS)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Get)28 b(a)g(k)n(eyw)n(ord)d(v)-5 b(alue)28 b(from)f(a)g(FitsChan)340
-4127 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SETFITS)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Store)27 b(a)h(new)f(k)n(eyw)n(ord)f(v)-5
-b(alue)27 b(in)h(a)g(FitsChan)340 4259 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(PUTFITS:)28 b(Store)f(a)g(FITS)h(header)f(card)g(in)
-g(a)h(FitsChan)340 4391 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(PUTCARDS:)29 b(Stores)d(a)i(set)f(of)h(FITS)g(header)e(card)h(in)h
-(a)f(FitsChan)340 4523 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(RET)-7 b(AINFITS:)28 b(Ensure)f(curren)n(t)g(card)f(is)i(retained)f
-(in)h(a)f(FitsChan)340 4655 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(TESTFITS:)28 b(T)-7 b(est)27 b(if)i(a)e(k)n(eyw)n(ord)e(has)i(a)h
-(de\014ned)g(v)-5 b(alue)27 b(in)h(a)f(FitsChan)p 0 4852
-3780 12 v 0 4984 a FA(FluxF)-11 b(rame)594 b Fd(Measured)39
-b(\015ux)g(description)592 b FA(FluxF)-11 b(rame)0 5170
-y Fc(Description:)44 b Fk(A)39 b(FluxF)-7 b(rame)37 b(is)h(a)f(sp)r
-(ecialised)h(form)f(of)h(one-dimensional)e(F)-7 b(rame)38
-b(whic)n(h)f(represen)n(ts)g(v)-5 b(arious)227 5270 y(systems)29
-b(used)h(to)f(represen)n(t)f(the)i(signal)f(lev)n(el)g(in)g(an)h
-(observ)-5 b(ation.)41 b(The)29 b(particular)f(co)r(ordinate)h(system)g
-(to)227 5370 y(b)r(e)i(used)f(is)g(sp)r(eci\014ed)g(b)n(y)g(setting)g
-(the)g(FluxF)-7 b(rame's)29 b(System)i(attribute)f(quali\014ed,)g(as)f
-(necessary)-7 b(,)29 b(b)n(y)h(other)227 5469 y(attributes)e(suc)n(h)f
-(as)g(the)h(units,)g(etc)g(\(see)f(the)h(description)f(of)h(the)g
-(System)g(attribute)f(for)g(details\).)227 5593 y(All)i(\015ux)f(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h(measured)e(at)h(the)h(same)e
-(frequency)h(or)f(w)n(a)n(v)n(elength)f(\(as)i(giv)n(en)f(b)n(y)h(the)
-227 5693 y(Sp)r(ecV)-7 b(al)28 b(attribute\).)38 b(Th)n(us)27
-b(this)h(class)e(is)i(more)f(appropriate)f(for)h(use)g(with)h(images)f
-(rather)f(than)i(sp)r(ectra.)p eop end
-%%Page: 484 494
-TeXDict begin 484 493 bop 0 52 a FG(484)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fc(Constructor)j(F)-8
-b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(FLUXFRAME)-2
-601 y Fc(Inheritance)n(:)227 747 y Fk(The)28 b(FluxF)-7
-b(rame)27 b(class)g(inherits)g(from)h(the)g(F)-7 b(rame)27
-b(class.)-2 897 y Fc(A)m(ttributes)n(:)227 1043 y Fk(In)38
-b(addition)f(to)g(those)g(attributes)g(common)g(to)g(all)g(F)-7
-b(rames,)38 b(ev)n(ery)e(FluxF)-7 b(rame)37 b(also)f(has)h(the)h(follo)
-n(wing)227 1143 y(attributes:)340 1404 y Fj(\017)45 b
-Fk(Sp)r(ecV)-7 b(al:)38 b(The)27 b(sp)r(ectral)g(p)r(osition)h(at)f
-(whic)n(h)h(the)g(\015ux)f(v)-5 b(alues)28 b(are)e(measured.)-2
-1567 y Fc(F)-8 b(unctions)n(:)227 1713 y Fk(The)33 b(FluxF)-7
-b(rame)33 b(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(routines)
-f(b)r(ey)n(ond)h(those)g(whic)n(h)g(are)f(applicable)g(to)h(all)227
-1812 y(F)-7 b(rames.)p 0 2012 3780 12 v 0 2143 a FA(F)c(rame)1112
-2144 y Fd(Co)s(ordinate)36 b(system)i(description)3412
-2143 y FA(F)-11 b(rame)0 2333 y Fc(Description:)44 b
-Fk(This)22 b(class)e(is)h(used)h(to)f(represen)n(t)f(co)r(ordinate)g
-(systems.)34 b(It)22 b(do)r(es)f(this)h(in)f(rather)g(the)g(same)g(w)n
-(a)n(y)f(that)227 2433 y(a)31 b(frame)f(around)g(a)h(graph)e(describ)r
-(es)i(the)g(co)r(ordinate)f(space)g(in)h(whic)n(h)g(data)f(are)g
-(plotted.)47 b(Consequen)n(tly)-7 b(,)227 2532 y(a)35
-b(F)-7 b(rame)34 b(has)g(a)g(Title)h(\(string\))g(attribute,)i(whic)n
-(h)e(describ)r(es)f(the)h(co)r(ordinate)e(space,)j(and)f(con)n(tains)f
-(axes)227 2632 y(whic)n(h)28 b(in)h(turn)f(hold)g(information)g(suc)n
-(h)g(as)f(Lab)r(el)h(and)g(Units)h(strings)e(whic)n(h)h(are)g(used)g
-(for)f(lab)r(elling)h(\(e.g.\))227 2731 y(graphical)e(output.)38
-b(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e(the)j(n)n(um)n(b)r(er)g(of)f
-(axes)g(is)g(not)h(restricted)f(to)g(t)n(w)n(o.)227 2856
-y(F)-7 b(unctions)24 b(are)f(a)n(v)-5 b(ailable)23 b(for)g(con)n(v)n
-(erting)f(F)-7 b(rame)24 b(co)r(ordinate)e(v)-5 b(alues)24
-b(in)n(to)g(a)f(form)h(suitable)f(for)h(displa)n(y)-7
-b(,)24 b(and)227 2956 y(also)j(for)g(calculating)g(distances)g(and)g
-(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f(within)h(the)g(F)-7
-b(rame.)227 3081 y(F)g(rames)27 b(ma)n(y)g(also)f(con)n(tain)h(kno)n
-(wledge)g(of)g(ho)n(w)g(to)h(transform)e(to)i(and)f(from)g(related)g
-(co)r(ordinate)g(systems.)0 3231 y Fc(Constructor)32
-b(F)-8 b(unction:)227 3330 y Fk(AST)p Ft(_)p Fk(FRAME)0
-3480 y Fc(Notes:)340 3763 y Fj(\017)45 b Fk(When)40 b(used)f(as)g(a)g
-(Mapping,)j(a)c(F)-7 b(rame)39 b(implemen)n(ts)h(a)f(unit)g(\(n)n
-(ull\))h(transformation)e(in)i(b)r(oth)f(the)427 3863
-y(forw)n(ard)22 b(and)g(in)n(v)n(erse)g(directions)g(\(equiv)-5
-b(alen)n(t)23 b(to)g(a)g(UnitMap\).)36 b(The)23 b(Nin)h(and)f(Nout)g
-(attribute)g(v)-5 b(alues)427 3962 y(are)27 b(b)r(oth)h(equal)f(to)g
-(the)h(n)n(um)n(b)r(er)g(of)f(F)-7 b(rame)27 b(axes.)-2
-4125 y Fc(Inheritance)n(:)227 4271 y Fk(The)h(F)-7 b(rame)27
-b(class)g(inherits)g(from)g(the)h(Mapping)g(class.)-2
-4421 y Fc(A)m(ttributes)n(:)227 4567 y Fk(In)33 b(addition)g(to)g
-(those)g(attributes)g(common)f(to)h(all)g(Mappings,)g(ev)n(ery)f(F)-7
-b(rame)32 b(also)g(has)h(the)g(follo)n(wing)f(at-)227
-4666 y(tributes)20 b(\(if)h(the)g(F)-7 b(rame)19 b(has)h(only)g(one)f
-(axis,)i(the)g(axis)e(sp)r(eci\014er)h(can)f(b)r(e)i(omited)f(from)g
-(the)g(follo)n(wing)f(attribute)227 4766 y(names\):)340
-5028 y Fj(\017)45 b Fk(AlignSystem:)37 b(Co)r(ordinate)27
-b(system)g(used)h(to)f(align)g(F)-7 b(rames)340 5161
-y Fj(\017)45 b Fk(Bottom\(axis\):)37 b(Lo)n(w)n(est)26
-b(axis)h(v)-5 b(alue)27 b(to)h(displa)n(y)340 5294 y
-Fj(\017)45 b Fk(Digits/Digits\(axis\):)37 b(Num)n(b)r(er)27
-b(of)h(digits)f(of)h(precision)340 5427 y Fj(\017)45
-b Fk(Direction\(axis\):)37 b(Displa)n(y)27 b(axis)g(in)h(con)n(v)n(en)n
-(tional)d(direction?)340 5560 y Fj(\017)45 b Fk(Domain:)37
-b(Co)r(ordinate)27 b(system)g(domain)340 5693 y Fj(\017)45
-b Fk(Dut1:)38 b(Di\013erence)27 b(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h
-(UTC)g(timescale)p eop end
-%%Page: 485 495
-TeXDict begin 485 494 bop 3643 52 a FG(485)340 351 y
-Fj(\017)45 b Fk(Ep)r(o)r(c)n(h:)37 b(Ep)r(o)r(c)n(h)27
-b(of)g(observ)-5 b(ation)340 483 y Fj(\017)45 b Fk(F)-7
-b(ormat\(axis\):)36 b(F)-7 b(ormat)27 b(sp)r(eci\014cation)g(for)g
-(axis)g(v)-5 b(alues)340 615 y Fj(\017)45 b Fk(Lab)r(el\(axis\):)37
-b(Axis)27 b(lab)r(el)340 747 y Fj(\017)45 b Fk(Matc)n(hEnd:)37
-b(Matc)n(h)27 b(trailing)g(axes?)340 879 y Fj(\017)45
-b Fk(MaxAxes:)36 b(Maxim)n(um)28 b(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)27 b(axes)f(to)i(matc)n(h)340 1011 y Fj(\017)45
-b Fk(MinAxes:)37 b(Minim)n(um)28 b(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rame)27 b(axes)g(to)h(matc)n(h)340 1143 y Fj(\017)45
-b Fk(Naxes:)36 b(Num)n(b)r(er)28 b(of)g(F)-7 b(rame)27
-b(axes)340 1275 y Fj(\017)45 b Fk(NormUnit\(axis\):)37
-b(Normalised)27 b(axis)g(ph)n(ysical)f(units)340 1407
-y Fj(\017)45 b Fk(ObsAlt:)37 b(Geo)r(detic)28 b(altitude)g(of)g(observ)
-n(er)340 1539 y Fj(\017)45 b Fk(ObsLat:)36 b(Geo)r(detic)28
-b(latitude)g(of)g(observ)n(er)340 1671 y Fj(\017)45 b
-Fk(ObsLon:)36 b(Geo)r(detic)28 b(longitude)f(of)h(observ)n(er)340
-1803 y Fj(\017)45 b Fk(P)n(erm)n(ute:)36 b(P)n(erm)n(ute)27
-b(axis)f(order?)340 1935 y Fj(\017)45 b Fk(Preserv)n(eAxes:)34
-b(Preserv)n(e)26 b(axes?)340 2067 y Fj(\017)45 b Fk(Sym)n(b)r
-(ol\(axis\):)37 b(Axis)27 b(sym)n(b)r(ol)340 2199 y Fj(\017)45
-b Fk(System:)37 b(Co)r(ordinate)27 b(system)g(used)h(to)f(describ)r(e)g
-(the)h(domain)340 2331 y Fj(\017)45 b Fk(Title:)38 b(F)-7
-b(rame)27 b(title)340 2463 y Fj(\017)45 b Fk(T)-7 b(op\(axis\):)37
-b(Highest)27 b(axis)g(v)-5 b(alue)27 b(to)h(displa)n(y)340
-2595 y Fj(\017)45 b Fk(Unit\(axis\):)38 b(Axis)27 b(ph)n(ysical)g
-(units)-2 2756 y Fc(F)-8 b(unctions)n(:)227 2902 y Fk(In)24
-b(addition)f(to)g(those)g(routines)f(applicable)h(to)g(all)g(Mappings,)
-h(the)f(follo)n(wing)g(routines)f(ma)n(y)h(also)f(b)r(e)i(applied)227
-3001 y(to)k(all)f(F)-7 b(rames:)340 3261 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(ANGLE:)28 b(Find)g(the)g(angle)f(subtended)h(b)n
-(y)f(t)n(w)n(o)g(p)r(oin)n(ts)h(at)f(a)g(third)h(p)r(oin)n(t)340
-3393 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(AXANGLE:)29 b(Find)f(the)g
-(angle)e(from)i(an)f(axis,)g(to)g(a)h(line)f(through)g(t)n(w)n(o)g(p)r
-(oin)n(ts)340 3525 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(AXDIST)-7
-b(ANCE:)29 b(Calculate)e(the)h(distance)f(b)r(et)n(w)n(een)h(t)n(w)n(o)
-f(axis)g(v)-5 b(alues)340 3657 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(AX)n(OFFSET:)28 b(Calculate)f(an)g(o\013set)h(along)e(an)h
-(axis)340 3789 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CONVER)-7
-b(T:)28 b(Determine)g(ho)n(w)f(to)g(con)n(v)n(ert)f(b)r(et)n(w)n(een)i
-(t)n(w)n(o)f(co)r(ordinate)f(systems)340 3921 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(DIST)-7 b(ANCE:)29 b(Calculate)d(the)i(distance)g
-(b)r(et)n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts)h(in)g(a)f(F)-7
-b(rame)340 4053 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(FINDFRAME:)29
-b(Find)f(a)f(co)r(ordinate)g(system)g(with)h(sp)r(eci\014ed)g(c)n
-(haracteristics)340 4185 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(F)n(ORMA)-7 b(T:)28 b(F)-7 b(ormat)27 b(a)g(co)r(ordinate)g(v)-5
-b(alue)27 b(for)g(a)g(F)-7 b(rame)27 b(axis)340 4317
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GET)-7 b(A)n(CTIVEUNIT:)28
-b(Determines)f(ho)n(w)g(the)h(Unit)h(attribute)f(will)f(b)r(e)h(used)
-340 4449 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(INTERSECT:)27
-b(Find)h(the)g(in)n(tersection)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(geo)r
-(desic)f(curv)n(es)340 4581 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(MA)-7 b(TCHAXES:)29 b(Find)f(an)n(y)f(corresp)r(onding)e(axes)i(in)h
-(t)n(w)n(o)f(F)-7 b(rames)340 4712 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(NORM:)28 b(Normalise)e(a)i(set)f(of)h(F)-7
-b(rame)27 b(co)r(ordinates)340 4844 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(OFFSET:)27 b(Calculate)g(an)h(o\013set)f(along)g(a)g(geo)r
-(desic)g(curv)n(e)340 4976 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(OFFSET2:)36 b(Calculate)27 b(an)h(o\013set)f(along)f(a)i(geo)r
-(desic)e(curv)n(e)h(in)h(a)f(2D)h(F)-7 b(rame)340 5108
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(PERMAXES:)27 b(P)n(erm)n(ute)g(the)h
-(order)e(of)i(a)f(F)-7 b(rame's)27 b(axes)340 5240 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(PICKAXES:)27 b(Create)g(a)g(new)h(F)-7
-b(rame)27 b(b)n(y)g(pic)n(king)g(axes)g(from)g(an)g(existing)g(one)340
-5372 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(RESOL)-9 b(VE:)27
-b(Resolv)n(e)f(a)h(v)n(ector)g(in)n(to)g(t)n(w)n(o)g(orthogonal)e(comp)
-r(onen)n(ts)340 5504 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SET)-7
-b(A)n(CTIVEUNIT:)28 b(Sp)r(ecify)g(ho)n(w)f(the)h(Unit)g(attribute)g
-(should)f(b)r(e)h(used)340 5636 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(UNF)n(ORMA)-7 b(T:)28 b(Read)g(a)f(formatted)g(co)r(ordinate)
-g(v)-5 b(alue)27 b(for)g(a)g(F)-7 b(rame)28 b(axis)p
-eop end
-%%Page: 486 496
-TeXDict begin 486 495 bop 0 52 a FG(486)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 482
-a FA(F)-11 b(rameSet)904 483 y Fd(Set)38 b(of)g(in)m(ter-related)e(co)s
-(ordinate)h(systems)3224 482 y FA(F)-11 b(rameSet)0 673
-y Fc(Description:)44 b Fk(A)27 b(F)-7 b(rameSet)27 b(consists)f(of)h(a)
-f(set)h(of)g(one)f(or)g(more)g(F)-7 b(rames)26 b(\(whic)n(h)h(describ)r
-(e)f(co)r(ordinate)g(systems\),)227 773 y(connected)g(together)f(b)n(y)
-g(Mappings)g(\(whic)n(h)h(describ)r(e)f(ho)n(w)h(the)g(co)r(ordinate)e
-(systems)h(are)g(in)n(ter-related\).)35 b(A)227 872 y(F)-7
-b(rameSet)26 b(mak)n(es)f(it)h(p)r(ossible)g(to)g(obtain)f(a)h(Mapping)
-f(b)r(et)n(w)n(een)h(an)n(y)f(pair)h(of)f(these)h(F)-7
-b(rames)26 b(\(i.e.)36 b(to)26 b(con)n(v)n(ert)227 972
-y(b)r(et)n(w)n(een)32 b(an)n(y)f(of)g(the)h(co)r(ordinate)f(systems)g
-(whic)n(h)g(it)i(describ)r(es\).)48 b(The)32 b(individual)g(F)-7
-b(rames)30 b(are)h(iden)n(ti\014ed)227 1072 y(within)f(the)f(F)-7
-b(rameSet)28 b(b)n(y)g(an)h(in)n(teger)e(index,)i(with)g(F)-7
-b(rames)28 b(b)r(eing)h(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)g
-(one)g(as)227 1171 y(they)g(are)f(added)g(to)h(the)g(F)-7
-b(rameSet.)227 1295 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fk(base)p Ft(")e Fk(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fk(curren)n(t)p Ft(")e Fk(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-1395 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 1494 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 1594 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 1694 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 1817
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fk(nativ)n(e)p Ft(")e Fk(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 1917
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fk(apparen)n(t)p Ft(")227 2017 y Fk(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 2116 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 2240 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 2340 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 2439 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 2563 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-2663 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fk(nativ)n(e)p Ft(")227 2762 y Fk(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fk(apparen)n(t)p Ft(")f Fk(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 2862 y(in)n(v)n(erted)e(\(see)
-g(AST)p Ft(_)p Fk(INVER)-7 b(T\),)34 b(whic)n(h)f(has)g(the)h(e\013ect)
-g(of)f(in)n(terc)n(hanging)e(its)j(base)f(and)g(curren)n(t)f(F)-7
-b(rames)227 2961 y(and)28 b(hence)f(of)h(rev)n(ersing)d(the)j(Mapping)g
-(b)r(et)n(w)n(een)f(them.)227 3085 y(Regions)33 b(ma)n(y)f(b)r(e)i
-(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33 b(\(since)g(a)g(Region)g(is)g
-(a)g(t)n(yp)r(e)h(of)f(F)-7 b(rame\),)35 b(either)e(explicitly)g(or)227
-3185 y(as)e(comp)r(onen)n(ts)g(within)h(CmpF)-7 b(rames.)48
-b(In)31 b(this)h(case)e(the)i(Mapping)f(b)r(et)n(w)n(een)g(a)g(pair)g
-(of)g(F)-7 b(rames)31 b(within)h(a)227 3284 y(F)-7 b(rameSet)35
-b(will)g(include)g(the)h(e\013ects)f(of)g(the)g(clipping)g(pro)r(duced)
-g(b)n(y)f(an)n(y)h(Regions)f(included)h(in)g(the)g(path)227
-3384 y(b)r(et)n(w)n(een)28 b(the)g(F)-7 b(rames.)0 3532
-y Fc(Constructor)32 b(F)-8 b(unction:)227 3632 y Fk(AST)p
-Ft(_)p Fk(FRAMESET)-2 3779 y Fc(Inheritance)n(:)227 3926
-y Fk(The)28 b(F)-7 b(rameSet)27 b(class)g(inherits)g(from)h(the)g(F)-7
-b(rame)27 b(class.)-2 4073 y Fc(A)m(ttributes)n(:)227
-4220 y Fk(In)41 b(addition)g(to)g(those)f(attributes)h(common)f(to)h
-(all)g(F)-7 b(rames,)43 b(ev)n(ery)d(F)-7 b(rameSet)40
-b(also)g(has)g(the)i(follo)n(wing)227 4319 y(attributes:)340
-4578 y Fj(\017)j Fk(Base:)36 b(F)-7 b(rameSet)28 b(base)f(F)-7
-b(rame)27 b(index)340 4709 y Fj(\017)45 b Fk(Curren)n(t:)36
-b(F)-7 b(rameSet)28 b(curren)n(t)e(F)-7 b(rame)28 b(index)340
-4840 y Fj(\017)45 b Fk(Nframe:)37 b(Num)n(b)r(er)28 b(of)f(F)-7
-b(rames)27 b(in)h(a)f(F)-7 b(rameSet)227 5001 y(Ev)n(ery)32
-b(F)-7 b(rameSet)32 b(also)g(inherits)h(an)n(y)f(further)h(attributes)g
-(that)g(b)r(elong)f(to)h(its)g(curren)n(t)f(F)-7 b(rame,)34
-b(regardless)227 5100 y(of)j(that)h(F)-7 b(rame's)36
-b(class.)65 b(\(F)-7 b(or)37 b(example,)i(the)f(Equino)n(x)e
-(attribute,)k(de\014ned)d(b)n(y)g(the)h(SkyF)-7 b(rame)36
-b(class,)j(is)227 5200 y(inherited)d(b)n(y)g(an)n(y)f(F)-7
-b(rameSet)35 b(whic)n(h)h(has)f(a)g(SkyF)-7 b(rame)35
-b(as)g(its)h(curren)n(t)f(F)-7 b(rame.\))61 b(The)36
-b(set)g(of)g(attributes)227 5299 y(b)r(elonging)27 b(to)h(a)f(F)-7
-b(rameSet)27 b(ma)n(y)g(therefore)g(c)n(hange)f(when)i(a)f(new)h
-(curren)n(t)f(F)-7 b(rame)27 b(is)g(selected.)-2 5447
-y Fc(F)-8 b(unctions)n(:)227 5593 y Fk(In)30 b(addition)f(to)h(those)f
-(routines)g(applicable)g(to)g(all)g(F)-7 b(rames,)29
-b(the)h(follo)n(wing)f(routines)g(ma)n(y)f(also)h(b)r(e)h(applied)227
-5693 y(to)e(all)f(F)-7 b(rameSets:)p eop end
-%%Page: 487 497
-TeXDict begin 487 496 bop 3643 52 a FG(487)340 522 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(ADDFRAME:)29 b(Add)f(a)g(F)-7
-b(rame)27 b(to)g(a)g(F)-7 b(rameSet)28 b(to)f(de\014ne)h(a)f(new)h(co)r
-(ordinate)e(system)340 672 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(GETFRAME:)28 b(Obtain)f(a)g(p)r(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)
-h(F)-7 b(rame)27 b(in)h(a)f(F)-7 b(rameSet)340 822 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETMAPPING:)27 b(Obtain)h(a)f(Mapping)g
-(b)r(et)n(w)n(een)h(t)n(w)n(o)e(F)-7 b(rames)27 b(in)h(a)f(F)-7
-b(rameSet)340 972 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REMAPFRAME:)28
-b(Mo)r(dify)g(a)f(F)-7 b(rame's)27 b(relationship)f(to)i(the)g(other)f
-(F)-7 b(rames)27 b(in)g(a)h(F)-7 b(rameSet)340 1122 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REMO)n(VEFRAME:)27 b(Remo)n(v)n(e)f(a)i
-(F)-7 b(rame)27 b(from)g(a)g(F)-7 b(rameSet)p 0 1355
-3780 12 v 0 1487 a FA(GrismMap)160 b Fd(T)-10 b(ransform)36
-b(1-dimensional)g(co)s(ordinates)h(using)1186 1602 y(a)i(grism)e(disp)s
-(ersion)h(equation)3149 1487 y FA(GrismMap)0 1825 y Fc(Description:)44
-b Fk(A)22 b(GrismMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(transforms)f(1-dimensional)g(co)r(ordinates)227
-1924 y(using)f(the)h(sp)r(ectral)f(disp)r(ersion)g(equation)g(describ)r
-(ed)g(in)g(FITS-W)n(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p
-Fk(Represen)n(tation)e(of)h(sp)r(ectral)227 2024 y(co)r(ordinates)26
-b(in)i(FITS)p Ft(")p Fk(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r
-(ersion)f(pro)r(duced)g(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227
-2166 y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d
-(transformation)g(of)i(a)g(GrismMap)f(transforms)g(input)h
-Ft(")p Fk(grism)f(param-)227 2265 y(eter)p Ft(")k Fk(v)-5
-b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)n(elength)d(v)-5
-b(alues.)36 b(The)25 b Ft(")p Fk(grism)f(parameter)p
-Ft(")f Fk(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2365 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fk(the)h(o\013set)227 2464 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 2564 y(lo)r(cal)f(length)p Ft(")p
-Fk(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 2664 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 2763 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 2947 y Fc(Constructor)32 b(F)-8
-b(unction:)227 3047 y Fk(AST)p Ft(_)p Fk(GRISMMAP)-2
-3230 y Fc(Inheritance)n(:)227 3376 y Fk(The)28 b(GrismMap)f(class)g
-(inherits)g(from)g(the)h(Mapping)g(class.)-2 3560 y Fc(A)m(ttributes)n
-(:)227 3706 y Fk(In)k(addition)f(to)g(those)g(attributes)g(common)g(to)
-g(all)g(Mappings,)g(ev)n(ery)f(GrismMap)h(also)f(has)h(the)h(follo)n
-(wing)227 3806 y(attributes:)340 4118 y Fj(\017)45 b
-Fk(GrismNR:)28 b(The)g(refractiv)n(e)e(index)i(at)f(the)h(reference)f
-(w)n(a)n(v)n(elength)340 4268 y Fj(\017)45 b Fk(GrismNRP:)28
-b(Rate)f(of)h(c)n(hange)e(of)i(refractiv)n(e)e(index)h(with)i(w)n(a)n
-(v)n(elength)340 4418 y Fj(\017)45 b Fk(GrismW)-7 b(a)n(v)n(eR:)27
-b(The)g(reference)g(w)n(a)n(v)n(elength)340 4568 y Fj(\017)45
-b Fk(GrismAlpha:)37 b(The)28 b(angle)e(of)i(incidence)g(of)f(the)h
-(incoming)f(ligh)n(t)340 4718 y Fj(\017)45 b Fk(GrismG:)28
-b(The)f(grating)g(ruling)g(densit)n(y)340 4868 y Fj(\017)45
-b Fk(GrismM:)28 b(The)f(in)n(terference)g(order)340 5018
-y Fj(\017)45 b Fk(GrismEps:)36 b(The)28 b(angle)f(b)r(et)n(w)n(een)g
-(the)h(normal)f(and)g(the)h(disp)r(ersion)f(plane)340
-5168 y Fj(\017)45 b Fk(GrismTheta:)37 b(Angle)27 b(b)r(et)n(w)n(een)h
-(normal)e(to)i(detector)f(plane)g(and)h(reference)e(ra)n(y)-2
-5364 y Fc(F)-8 b(unctions)n(:)227 5510 y Fk(The)34 b(GrismMap)f(class)f
-(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)g
-(those)h(whic)n(h)f(are)g(applicable)f(to)i(all)227 5610
-y(Mappings.)p eop end
-%%Page: 488 498
-TeXDict begin 488 497 bop 0 52 a FG(488)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a FA(In)l(terv)-7 b(al)186 b Fd(A)39 b(region)e(represen)m(ting)g(an)h
-(in)m(terv)-7 b(al)37 b(on)h(one)h(or)f(more)1485 598
-y(axes)h(of)f(a)h(F)-10 b(rame)3324 483 y FA(In)l(terv)j(al)0
-774 y Fc(Description:)44 b Fk(The)23 b(In)n(terv)-5 b(al)22
-b(class)g(implemen)n(ts)h(a)f(Region)g(whic)n(h)g(represen)n(ts)g(upp)r
-(er)g(and/or)f(lo)n(w)n(er)h(limits)h(on)f(one)227 874
-y(or)i(more)g(axes)g(of)g(a)h(F)-7 b(rame.)35 b(F)-7
-b(or)24 b(a)g(p)r(oin)n(t)h(to)g(b)r(e)g(within)g(the)g(region)f
-(represen)n(ted)f(b)n(y)i(the)g(In)n(terv)-5 b(al,)24
-b(the)h(p)r(oin)n(t)227 973 y(m)n(ust)j(satisfy)f(all)g(the)h
-(restrictions)e(placed)h(on)g(all)g(the)h(axes.)36 b(The)27
-b(p)r(oin)n(t)h(is)f(outside)g(the)h(region)e(if)i(it)g(fails)f(to)227
-1073 y(satisfy)j(an)n(y)g(one)f(of)i(the)f(restrictions.)44
-b(Eac)n(h)29 b(axis)g(ma)n(y)h(ha)n(v)n(e)f(either)h(an)g(upp)r(er)g
-(limit,)i(a)e(lo)n(w)n(er)e(limit,)k(b)r(oth)227 1173
-y(or)e(neither.)47 b(If)32 b(b)r(oth)f(limits)h(are)e(supplied)h(but)g
-(are)f(in)i(rev)n(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)f
-(limit)i(is)e(greater)227 1272 y(than)e(the)g(upp)r(er)g(limit\),)g
-(then)h(the)f(in)n(terv)-5 b(al)27 b(is)g(an)g(excluded)h(in)n(terv)-5
-b(al,)27 b(rather)g(than)g(an)h(included)g(in)n(terv)-5
-b(al.)227 1400 y(Note,)33 b(The)e(In)n(terv)-5 b(al)31
-b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g(nature)g
-(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-1500 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 1599 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-1755 y Fc(Constructor)32 b(F)-8 b(unction:)227 1855 y
-Fk(AST)p Ft(_)p Fk(INTER)f(V)g(AL)-2 2010 y Fc(Inheritance)n(:)227
-2156 y Fk(The)28 b(In)n(terv)-5 b(al)27 b(class)g(inherits)g(from)g
-(the)h(Region)f(class.)-2 2312 y Fc(A)m(ttributes)n(:)227
-2458 y Fk(The)37 b(In)n(terv)-5 b(al)35 b(class)h(do)r(es)g(not)g
-(de\014ne)h(an)n(y)e(new)i(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)g(applicable)g(to)g(all)227 2558 y(Regions.)-2
-2714 y Fc(F)-8 b(unctions)n(:)227 2860 y Fk(The)41 b(In)n(terv)-5
-b(al)40 b(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)g(routines)g
-(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h(to)h(all)227
-2959 y(Regions.)p 0 3165 V 0 3296 a FA(In)l(traMap)801
-3297 y Fd(Map)e(p)s(oin)m(ts)f(using)g(a)h(priv)-7 b(ate)37
-b(transformation)1708 3408 y(routine)3218 3296 y FA(In)l(traMap)0
-3580 y Fc(Description:)44 b Fk(The)21 b(In)n(traMap)e(class)g(pro)n
-(vides)g(a)h(sp)r(ecialised)f(form)h(of)g(Mapping)g(whic)n(h)g
-(encapsulates)g(a)f(priv)-5 b(ately-)227 3679 y(de\014ned)26
-b(co)r(ordinate)d(transformation)h(routine)g(\(e.g.)36
-b(written)25 b(in)g(F)-7 b(ortran\))24 b(so)h(that)g(it)g(ma)n(y)g(b)r
-(e)g(used)g(lik)n(e)f(an)n(y)227 3779 y(other)h(AST)h(Mapping.)35
-b(This)25 b(allo)n(ws)f(y)n(ou)h(to)g(create)f(Mappings)h(that)g(p)r
-(erform)g(an)n(y)f(conceiv)-5 b(able)25 b(co)r(ordinate)227
-3878 y(transformation.)227 4006 y(Ho)n(w)n(ev)n(er,)30
-b(an)h(In)n(traMap)g(is)g(in)n(tended)g(for)g(use)g(within)h(a)f
-(single)f(program)g(or)g(a)h(priv)-5 b(ate)31 b(suite)g(of)g(soft)n(w)n
-(are,)227 4106 y(where)24 b(all)g(programs)d(ha)n(v)n(e)i(access)g(to)h
-(the)g(same)g(co)r(ordinate)f(transformation)f(functions)j(\(i.e.)36
-b(can)23 b(b)r(e)i(link)n(ed)227 4205 y(against)40 b(them\).)76
-b(In)n(traMaps)39 b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g
-(datasets)g(whic)n(h)g(ma)n(y)g(b)r(e)h(exp)r(orted)227
-4305 y(for)34 b(pro)r(cessing)f(b)n(y)h(other)g(soft)n(w)n(are,)g
-(since)g(that)h(soft)n(w)n(are)e(will)h(not)h(ha)n(v)n(e)e(the)i
-(necessary)d(transformation)227 4405 y(functions)c(a)n(v)-5
-b(ailable,)27 b(resulting)g(in)g(an)h(error.)227 4532
-y(Y)-7 b(ou)37 b(m)n(ust)g(register)e(an)n(y)h(co)r(ordinate)f
-(transformation)g(functions)i(to)f(b)r(e)h(used)g(using)f(AST)p
-Ft(_)p Fk(INTRAREG)227 4632 y(b)r(efore)28 b(creating)e(an)h(In)n
-(traMap.)0 4788 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4887 y Fk(AST)p Ft(_)p Fk(INTRAMAP)28 b(\(also)f(see)g(AST)p
-Ft(_)p Fk(INTRAREG\))-2 5043 y Fc(Inheritance)n(:)227
-5189 y Fk(The)h(In)n(traMap)e(class)h(inherits)h(from)f(the)h(Mapping)f
-(class.)-2 5345 y Fc(A)m(ttributes)n(:)227 5491 y Fk(In)35
-b(addition)f(to)g(those)g(attributes)g(common)g(to)g(all)g(Mappings,)h
-(ev)n(ery)e(In)n(traMap)g(also)g(has)h(the)h(follo)n(wing)227
-5591 y(attributes:)p eop end
-%%Page: 489 499
-TeXDict begin 489 498 bop 3643 52 a FG(489)340 351 y
-Fj(\017)45 b Fk(In)n(traFlag:)36 b(In)n(traMap)26 b(iden)n
-(ti\014cation)i(string)-2 524 y Fc(F)-8 b(unctions)n(:)227
-670 y Fk(The)37 b(In)n(traMap)e(class)g(do)r(es)h(not)h(de\014ne)f(an)n
-(y)g(new)g(routines)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 769 y(Mappings.)p 0 979 3780
-12 v 0 1110 a FA(KeyMap)1140 1118 y Fd(Store)h(a)i(set)g(of)f(k)m(ey/v)
--7 b(alue)37 b(pairs)3274 1110 y FA(KeyMap)0 1324 y Fc(Description:)44
-b Fk(The)27 b(KeyMap)f(class)f(is)i(used)g(to)f(store)g(a)g(set)h(of)f
-(v)-5 b(alues)26 b(with)i(asso)r(ciated)d(k)n(eys)h(whic)n(h)g(iden)n
-(tify)h(the)227 1423 y(v)-5 b(alues.)41 b(The)29 b(k)n(eys)f(are)g
-(strings)g(\(case-sensitiv)n(e,)f(trailing)h(spaces)g(are)g(ignored\),)
-h(and)f(the)i(data)e(t)n(yp)r(e)h(of)g(the)227 1523 y(v)-5
-b(alues)31 b(can)f(b)r(e)h(in)n(teger,)g(\015oating)f(p)r(oin)n(t,)h(c)
-n(haracter)e(string)h(or)g(AST)h(Ob)5 b(ject)31 b(p)r(oin)n(ter.)46
-b(Eac)n(h)29 b(v)-5 b(alue)31 b(can)f(b)r(e)227 1623
-y(a)i(scalar)f(or)g(a)h(one-dimensional)f(v)n(ector.)49
-b(A)33 b(KeyMap)e(is)h(conceptually)g(similar)f(to)h(a)g(Mapping)g(in)h
-(that)f(a)227 1722 y(KeyMap)h(transforms)f(an)h(input)h(in)n(to)f(an)h
-(output)g(-)f(the)h(input)g(is)f(the)h(k)n(ey)-7 b(,)34
-b(and)g(the)g(output)g(is)f(the)h(v)-5 b(alue)227 1822
-y(asso)r(ciated)26 b(with)h(the)h(k)n(ey)-7 b(.)36 b(Ho)n(w)n(ev)n(er,)
-25 b(this)i(is)g(only)g(a)f(conceptual)h(similarit)n(y)-7
-b(,)26 b(and)h(it)g(should)g(b)r(e)g(noted)g(that)227
-1921 y(the)j(KeyMap)f(class)g(inherits)g(from)h(the)g(Ob)5
-b(ject)29 b(class)g(rather)g(than)g(the)i(Mapping)e(class.)42
-b(The)30 b(metho)r(ds)g(of)227 2021 y(the)e(Mapping)f(class)g(cannot)g
-(b)r(e)h(used)g(with)g(a)f(KeyMap.)0 2181 y Fc(Constructor)32
-b(F)-8 b(unction:)227 2281 y Fk(AST)p Ft(_)p Fk(KEYMAP)-2
-2441 y Fc(Inheritance)n(:)227 2587 y Fk(The)28 b(KeyMap)f(class)f
-(inherits)i(from)f(the)h(Ob)5 b(ject)27 b(class.)-2 2747
-y Fc(A)m(ttributes)n(:)227 2893 y Fk(In)33 b(addition)f(to)h(those)f
-(attributes)g(common)g(to)g(all)g(Ob)5 b(jects,)34 b(ev)n(ery)d(KeyMap)
-h(also)f(has)h(the)h(follo)n(wing)e(at-)227 2993 y(tributes:)340
-3269 y Fj(\017)45 b Fk(KeyError:)34 b(Rep)r(ort)28 b(an)f(error)e(if)k
-(the)f(requested)f(k)n(ey)f(do)r(es)i(not)f(exist?)340
-3407 y Fj(\017)45 b Fk(SizeGuess:)37 b(The)28 b(exp)r(ected)f(size)h
-(of)f(the)h(KeyMap.)-2 3580 y Fc(F)-8 b(unctions)n(:)227
-3726 y Fk(In)29 b(addition)f(to)g(those)g(routines)f(applicable)h(to)g
-(all)g(Ob)5 b(jects,)28 b(the)h(follo)n(wing)e(routines)g(ma)n(y)h
-(also)f(b)r(e)i(applied)227 3826 y(to)f(all)f(KeyMaps:)340
-4102 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPGET0)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Get)28 b(a)f(named)g(scalar)f(en)n(try)h(from)g
-(a)h(KeyMap)340 4241 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPGET1)p
-Fm(<)p Fk(X)p Fm(>)p Fk(:)36 b(Get)28 b(a)f(named)g(v)n(ector)g(en)n
-(try)g(from)g(a)g(KeyMap)340 4379 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(MAPGETELEM)p Fm(<)p Fk(X)p Fm(>)p Fk(:)35 b(Get)28
-b(an)f(elemen)n(t)h(of)g(a)f(named)g(v)n(ector)g(en)n(try)g(from)g(a)g
-(KeyMap)340 4517 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPHASKEY:)28
-b(Do)r(es)f(the)h(KeyMap)f(con)n(tain)g(a)g(named)h(en)n(try?)340
-4655 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPKEY:)27 b(Return)h(the)g(k)n
-(ey)f(name)g(at)h(a)f(giv)n(en)g(index)g(in)h(the)g(KeyMap)340
-4793 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPLENC:)27 b(Get)h(the)g
-(length)g(of)g(a)f(named)g(c)n(haracter)f(en)n(try)h(in)h(a)f(KeyMap)
-340 4931 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPLENGTH:)28
-b(Get)g(the)g(length)g(of)f(a)g(named)h(en)n(try)f(in)h(a)f(KeyMap)340
-5069 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPPUT0)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Add)28 b(a)f(new)h(scalar)e(en)n(try)h(to)g(a)g
-(KeyMap)340 5207 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPPUT1)p
-Fm(<)p Fk(X)p Fm(>)p Fk(:)36 b(Add)28 b(a)f(new)h(v)n(ector)e(en)n(try)
-h(to)h(a)f(KeyMap)340 5346 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(MAPREMO)n(VE:)27 b(Remo)n(v)n(ed)f(a)h(named)h(en)n(try)f(from)g(a)g
-(KeyMap)340 5484 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPSIZE:)27
-b(Get)h(the)g(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(a)f(KeyMap)340
-5622 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPTYPE:)27 b(Return)h(the)g
-(data)f(t)n(yp)r(e)h(of)f(a)g(named)h(en)n(try)f(in)h(a)f(map.)p
-eop end
-%%Page: 490 500
-TeXDict begin 490 499 bop 0 52 a FG(490)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 482
-a FA(LutMap)742 483 y Fd(T)-10 b(ransform)37 b(1-dimensional)f(co)s
-(ordinates)g(using)j(a)1571 598 y(lo)s(okup)f(table)3304
-482 y FA(LutMap)0 782 y Fc(Description:)44 b Fk(A)30
-b(LutMap)g(is)g(a)f(sp)r(ecialised)g(form)h(of)f(Mapping)h(whic)n(h)f
-(transforms)g(1-dimensional)f(co)r(ordinates)227 882
-y(b)n(y)g(using)f(linear)g(in)n(terp)r(olation)f(in)i(a)f(lo)r(okup)h
-(table.)227 1005 y(Eac)n(h)d(input)h(co)r(ordinate)e(v)-5
-b(alue)26 b(is)f(\014rst)g(scaled)g(to)g(giv)n(e)g(the)h(index)f(of)h
-(an)f(en)n(try)g(in)h(the)g(table)f(b)n(y)g(subtracting)227
-1105 y(a)32 b(starting)f(v)-5 b(alue)31 b(\(the)i(input)f(co)r
-(ordinate)f(corresp)r(onding)f(to)h(the)h(\014rst)g(table)g(en)n(try\))
-f(and)h(dividing)f(b)n(y)h(an)227 1205 y(incremen)n(t)c(\(the)g
-(di\013erence)f(in)h(input)h(co)r(ordinate)d(v)-5 b(alue)28
-b(b)r(et)n(w)n(een)f(adjacen)n(t)g(table)h(en)n(tries\).)227
-1328 y(The)j(resulting)g(index)g(will)g(usually)g(con)n(tain)f(a)h
-(fractional)f(part,)i(so)e(the)i(output)f(co)r(ordinate)f(v)-5
-b(alue)31 b(is)g(then)227 1428 y(generated)f(b)n(y)g(in)n(terp)r
-(olating)f(linearly)h(b)r(et)n(w)n(een)g(the)h(appropriate)d(en)n
-(tries)i(in)h(the)f(table.)46 b(If)31 b(the)f(index)h(lies)227
-1528 y(outside)h(the)h(range)e(of)h(the)h(table,)g(linear)e(extrap)r
-(olation)g(is)h(used)h(based)e(on)h(the)h(t)n(w)n(o)e(nearest)h(en)n
-(tries)f(\(i.e.)227 1627 y(the)26 b(t)n(w)n(o)e(en)n(tries)g(at)h(the)g
-(start)f(or)g(end)h(of)g(the)g(table,)h(as)e(appropriate\).)35
-b(If)25 b(either)g(of)g(the)g(en)n(tries)f(used)h(for)f(the)227
-1727 y(in)n(terplation)j(has)g(a)g(v)-5 b(alue)28 b(of)f(AST)p
-Ft(__)p Fk(BAD,)h(then)g(the)g(in)n(terp)r(olated)f(v)-5
-b(alue)28 b(is)f(returned)h(as)e(AST)p Ft(__)p Fk(BAD.)227
-1850 y(If)19 b(the)g(lo)r(okup)f(table)g(en)n(tries)g(increase)f(or)g
-(decrease)g(monotonically)g(\(and)i(if)g(the)g(table)f(con)n(tains)f
-(no)h(AST)p Ft(__)p Fk(BAD)227 1950 y(v)-5 b(alues\),)28
-b(then)g(the)g(in)n(v)n(erse)e(transformation)g(ma)n(y)h(also)f(b)r(e)i
-(p)r(erformed.)0 2097 y Fc(Constructor)k(F)-8 b(unction:)227
-2197 y Fk(AST)p Ft(_)p Fk(LUTMAP)-2 2344 y Fc(Inheritance)n(:)227
-2490 y Fk(The)28 b(LutMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 2638 y Fc(A)m(ttributes)n(:)227 2784 y Fk(In)38
-b(addition)g(to)f(those)h(attributes)f(common)h(to)f(all)h(Mappings,)h
-(ev)n(ery)e(LutMap)h(also)e(has)i(the)g(follo)n(wing)227
-2884 y(attributes:)340 3142 y Fj(\017)45 b Fk(LutIn)n(terp:)37
-b(The)28 b(in)n(terp)r(olation)f(metho)r(d)h(to)f(use)h(b)r(et)n(w)n
-(een)f(table)h(en)n(tries.)-2 3301 y Fc(F)-8 b(unctions)n(:)227
-3448 y Fk(The)40 b(LutMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)e
-(new)i(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h
-(to)h(all)227 3547 y(Mappings.)p 0 3742 V 0 3874 a FA(Mapping)466
-b Fd(In)m(ter-relate)36 b(t)m(w)m(o)h(co)s(ordinate)g(systems)466
-b FA(Mapping)0 4063 y Fc(Description:)44 b Fk(This)29
-b(class)e(pro)n(vides)g(the)i(basic)f(facilities)h(for)f(transforming)f
-(a)h(set)g(of)h(co)r(ordinates)e(\(represen)n(ting)227
-4163 y Ft(")p Fk(input)p Ft(")38 b Fk(p)r(oin)n(ts\))g(to)g(giv)n(e)e
-(a)i(new)g(set)f(of)h(co)r(ordinates)f(\(represen)n(ting)f
-Ft(")p Fk(output)p Ft(")i Fk(p)r(oin)n(ts\).)67 b(It)38
-b(is)g(used)g(to)227 4263 y(describ)r(e)28 b(the)g(relationship)f(whic)
-n(h)h(exists)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(di\013eren)n(t)h(co)r
-(ordinate)f(systems)h(and)f(to)h(implemen)n(t)227 4362
-y(op)r(erations)22 b(whic)n(h)i(mak)n(e)e(use)i(of)f(this)h(\(suc)n(h)f
-(as)g(transforming)f(co)r(ordinates)g(and)i(resampling)e(grids)g(of)i
-(data\).)227 4462 y(Ho)n(w)n(ev)n(er,)38 b(the)f(Mapping)g(class)f(do)r
-(es)h(not)g(ha)n(v)n(e)f(a)h(constructor)f(function)h(of)g(its)h(o)n
-(wn,)h(as)d(it)i(is)f(simply)g(a)227 4562 y(con)n(tainer)22
-b(class)g(for)g(a)g(family)h(of)g(sp)r(ecialised)f(Mappings)g(whic)n(h)
-h(implemen)n(t)g(particular)e(t)n(yp)r(es)i(of)g(co)r(ordinate)227
-4661 y(transformation.)0 4809 y Fc(Constructor)32 b(F)-8
-b(unction:)227 4908 y Fk(None.)-2 5056 y Fc(Inheritance)n(:)227
-5202 y Fk(The)28 b(Mapping)f(class)g(inherits)g(from)h(the)g(Ob)5
-b(ject)27 b(class.)-2 5349 y Fc(A)m(ttributes)n(:)227
-5495 y Fk(In)42 b(addition)e(to)h(those)g(attributes)g(common)g(to)f
-(all)h(Ob)5 b(jects,)44 b(ev)n(ery)c(Mapping)h(also)f(has)g(the)i
-(follo)n(wing)227 5595 y(attributes:)p eop end
-%%Page: 491 501
-TeXDict begin 491 500 bop 3643 52 a FG(491)340 351 y
-Fj(\017)45 b Fk(In)n(v)n(ert:)36 b(Mapping)27 b(in)n(v)n(ersion)f
-(\015ag)340 483 y Fj(\017)45 b Fk(IsLinear:)36 b(Is)27
-b(the)h(Mapping)g(linear?)340 615 y Fj(\017)45 b Fk(IsSimple:)37
-b(Has)28 b(the)g(Mapping)f(b)r(een)h(simpli\014ed?)340
-747 y Fj(\017)45 b Fk(Nin:)38 b(Num)n(b)r(er)27 b(of)h(input)g(co)r
-(ordinates)f(for)g(a)g(Mapping)340 879 y Fj(\017)45 b
-Fk(Nout:)37 b(Num)n(b)r(er)28 b(of)g(output)g(co)r(ordinates)e(for)h(a)
-g(Mapping)340 1011 y Fj(\017)45 b Fk(Rep)r(ort:)37 b(Rep)r(ort)27
-b(transformed)g(co)r(ordinates?)340 1143 y Fj(\017)45
-b Fk(T)-7 b(ranF)g(orw)n(ard:)35 b(F)-7 b(orw)n(ard)25
-b(transformation)h(de\014ned?)340 1275 y Fj(\017)45 b
-Fk(T)-7 b(ranIn)n(v)n(erse:)35 b(In)n(v)n(erse)26 b(transformation)g
-(de\014ned?)-2 1436 y Fc(F)-8 b(unctions)n(:)227 1582
-y Fk(In)29 b(addition)f(to)g(those)g(routines)f(applicable)h(to)g(all)g
-(Ob)5 b(jects,)28 b(the)h(follo)n(wing)e(routines)g(ma)n(y)h(also)f(b)r
-(e)i(applied)227 1682 y(to)f(all)f(Mappings:)340 1941
-y Fj(\017)45 b Fk(astRebinSeq)p Fm(<)p Fk(X)p Fm(>)p
-Fk(:)36 b(Rebin)28 b(a)g(region)e(of)h(a)h(sequence)f(of)g(data)g
-(grids)340 2073 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(DECOMPOSE:)26
-b(Decomp)r(ose)h(a)h(Mapping)f(in)n(to)g(t)n(w)n(o)g(comp)r(onen)n(t)g
-(Mappings)340 2205 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TRANGRID:)29
-b(T)-7 b(ransform)26 b(a)i(grid)e(of)i(p)r(ositions)340
-2337 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(INVER)-7 b(T:)28
-b(In)n(v)n(ert)f(a)g(Mapping)340 2469 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(LINEARAPPR)n(O)n(X:)27 b(Calculate)g(a)g(linear)g
-(appro)n(ximation)e(to)j(a)f(Mapping)340 2601 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(MAPBO)n(X:)27 b(Find)h(a)g(b)r(ounding)f(b)r(o)n
-(x)g(for)g(a)h(Mapping)340 2733 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(MAPSPLIT:)27 b(Split)i(a)e(Mapping)g(up)h(in)n(to)f(parallel)
-g(comp)r(onen)n(t)g(Mappings)340 2865 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(RA)-7 b(TE:)28 b(Calculate)f(the)h(rate)f(of)g(c)n
-(hange)g(of)g(a)g(Mapping)h(output)340 2997 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(REBIN)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Rebin)28 b(a)f(region)g(of)g(a)g(data)h(grid)340 3129
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REBINSEQ)p Fm(<)p Fk(X)p
-Fm(>)p Fk(:)35 b(Rebin)28 b(a)g(region)e(of)h(a)h(sequence)f(of)g(data)
-g(grids)340 3261 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(REMO)n(VEREGIONS:)26
-b(Remo)n(v)n(e)h(an)n(y)g(Regions)f(from)i(a)f(Mapping)340
-3393 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(RESAMPLE)p Fm(<)p
-Fk(X)p Fm(>)p Fk(:)36 b(Resample)27 b(a)g(region)f(of)i(a)f(data)g
-(grid)340 3525 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SIMPLIFY:)28
-b(Simplify)g(a)g(Mapping)340 3657 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(TRAN1:)37 b(T)-7 b(ransform)26 b(1-dimensional)h(co)r
-(ordinates)340 3789 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TRAN2:)37
-b(T)-7 b(ransform)26 b(2-dimensional)h(co)r(ordinates)340
-3921 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TRANN:)29 b(T)-7
-b(ransform)26 b(N-dimensional)h(co)r(ordinates)p 0 4118
-3780 12 v 0 4250 a FA(MathMap)207 b Fd(T)-10 b(ransform)36
-b(co)s(ordinates)h(using)h(mathematical)1604 4361 y(expressions)3192
-4250 y FA(MathMap)0 4552 y Fc(Description:)44 b Fk(A)36
-b(MathMap)e(is)h(a)f(Mapping)h(whic)n(h)f(allo)n(ws)g(y)n(ou)g(to)h(sp)
-r(ecify)g(a)f(set)h(of)g(forw)n(ard)e(and/or)g(in)n(v)n(erse)227
-4652 y(transformation)26 b(functions)i(using)g(arithmetic)f(op)r
-(erations)g(and)g(mathematical)g(functions)h(similar)f(to)h(those)227
-4752 y(a)n(v)-5 b(ailable)30 b(in)i(F)-7 b(ortran.)46
-b(The)31 b(MathMap)g(in)n(terprets)g(these)g(functions)h(at)f
-(run-time,)h(whenev)n(er)e(its)h(forw)n(ard)227 4851
-y(or)c(in)n(v)n(erse)g(transformation)f(is)i(required.)37
-b(Because)27 b(the)h(functions)h(are)e(not)h(compiled)g(in)g(the)g
-(normal)f(sense)227 4951 y(\(unlik)n(e)g(an)e(In)n(traMap\),)h(they)g
-(ma)n(y)g(b)r(e)g(used)g(to)g(describ)r(e)g(co)r(ordinate)f
-(transformations)f(in)i(a)g(transp)r(ortable)227 5051
-y(manner.)53 b(A)33 b(MathMap)g(therefore)f(pro)n(vides)f(a)i
-(\015exible)g(w)n(a)n(y)f(of)h(de\014ning)g(new)g(t)n(yp)r(es)g(of)g
-(Mapping)f(whose)227 5150 y(descriptions)27 b(ma)n(y)g(b)r(e)h(stored)f
-(as)g(part)g(of)g(a)g(dataset)h(and)f(in)n(terpreted)g(b)n(y)g(other)g
-(programs.)0 5299 y Fc(Constructor)32 b(F)-8 b(unction:)227
-5398 y Fk(AST)p Ft(_)p Fk(MA)h(THMAP)-2 5547 y Fc(Inheritance)n(:)227
-5693 y Fk(The)28 b(MathMap)f(class)g(inherits)h(from)f(the)h(Mapping)f
-(class.)p eop end
-%%Page: 492 502
-TeXDict begin 492 501 bop 0 52 a FG(492)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(A)m(ttributes)n(:)227
-497 y Fk(In)34 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(Mappings,)h(ev)n(ery)e(MathMap)h(also)f(has)g(the)i(follo)n
-(wing)227 597 y(attributes:)340 727 y Fj(\017)45 b Fk(Seed:)37
-b(Random)28 b(n)n(um)n(b)r(er)f(seed)340 853 y Fj(\017)45
-b Fk(SimpFI:)29 b(F)-7 b(orw)n(ard-in)n(v)n(erse)24 b(MathMap)j(pairs)g
-(simplify?)340 980 y Fj(\017)45 b Fk(SimpIF:)29 b(In)n(v)n(erse-forw)n
-(ard)24 b(MathMap)j(pairs)g(simplify?)-2 1135 y Fc(F)-8
-b(unctions)n(:)227 1281 y Fk(The)36 b(MathMap)f(class)f(do)r(es)h(not)g
-(de\014ne)h(an)n(y)e(new)i(routines)e(b)r(ey)n(ond)h(those)g(whic)n(h)h
-(are)e(applicable)h(to)g(all)227 1381 y(Mappings.)p 0
-1567 3780 12 v 0 1699 a FA(MatrixMap)264 b Fd(Map)39
-b(co)s(ordinates)e(b)m(y)h(m)m(ultiplying)d(b)m(y)k(a)1719
-1809 y(matrix)3103 1699 y FA(MatrixMap)0 1962 y Fc(Description:)44
-b Fk(A)20 b(MatrixMap)e(is)h(form)g(of)g(Mapping)g(whic)n(h)h(p)r
-(erforms)e(a)h(general)f(linear)g(transformation.)33
-b(Eac)n(h)18 b(set)227 2062 y(of)26 b(input)g(co)r(ordinates,)f
-(regarded)f(as)h(a)h(column-v)n(ector,)e(are)h(pre-m)n(ultiplied)g(b)n
-(y)h(a)f(matrix)g(\(whose)h(elemen)n(ts)227 2161 y(are)j(sp)r
-(eci\014ed)h(when)g(the)g(MatrixMap)f(is)g(created\))g(to)h(giv)n(e)e
-(a)i(new)f(column-v)n(ector)f(con)n(taining)h(the)h(output)227
-2261 y(co)r(ordinates.)36 b(If)28 b(appropriate,)e(the)i(in)n(v)n(erse)
-e(transformation)g(ma)n(y)h(also)f(b)r(e)i(p)r(erformed.)0
-2404 y Fc(Constructor)k(F)-8 b(unction:)227 2503 y Fk(AST)p
-Ft(_)p Fk(MA)h(TRIXMAP)-2 2646 y Fc(Inheritance)n(:)227
-2792 y Fk(The)28 b(MatrixMap)f(class)f(inherits)i(from)f(the)h(Mapping)
-f(class.)-2 2935 y Fc(A)m(ttributes)n(:)227 3081 y Fk(The)h(MatrixMap)e
-(class)h(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)
-n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-3181 y(Mappings.)-2 3324 y Fc(F)-8 b(unctions)n(:)227
-3470 y Fk(The)32 b(MatrixMap)f(class)g(do)r(es)g(not)h(de\014ne)g(an)n
-(y)f(new)h(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g
-(applicable)g(to)h(all)227 3570 y(Mappings.)p 0 3756
-V 0 3887 a FA(NormMap)890 3888 y Fd(Normalise)k(co)s(ordinates)h(using)
-h(a)h(supplied)1730 4001 y(F)-10 b(rame)3172 3887 y FA(NormMap)0
-4153 y Fc(Description:)44 b Fk(The)26 b(NormMap)e(class)g(implemen)n
-(ts)i(a)f(Mapping)g(whic)n(h)g(normalises)e(co)r(ordinate)i(v)-5
-b(alues)24 b(using)h(the)227 4253 y(AST)p Ft(_)p Fk(NORM)k(routine)g
-(of)g(a)f(supplied)i(F)-7 b(rame.)40 b(The)29 b(n)n(um)n(b)r(er)g(of)g
-(inputs)h(and)e(outputs)i(of)f(a)f(NormMap)h(are)227
-4353 y(b)r(oth)f(equal)f(to)h(the)g(n)n(um)n(b)r(er)f(of)h(axes)e(in)i
-(the)g(supplied)g(F)-7 b(rame.)227 4474 y(The)26 b(forw)n(ard)f(and)h
-(in)n(v)n(erse)e(transformation)h(of)h(a)f(NormMap)h(are)f(b)r(oth)h
-(de\014ned)g(but)h(are)e(iden)n(tical)h(\(that)h(is,)227
-4574 y(they)h(do)g(not)f(form)h(a)f(real)g(in)n(v)n(erse)f(pair)h(in)h
-(that)g(the)g(in)n(v)n(erse)e(transformation)g(do)r(es)i(not)f(undo)h
-(the)g(normal-)227 4673 y(isation,)h(instead)f(it)i(reapplies)d(it\).)
-42 b(Ho)n(w)n(ev)n(er,)27 b(the)i(AST)p Ft(_)p Fk(SIMPLIFY)g(function)g
-(will)g(replace)f(neigh)n(b)r(ouring)227 4773 y(pairs)f(of)g(forw)n
-(ard)f(and)i(in)n(v)n(erse)e(NormMaps)h(b)n(y)g(a)g(single)g(UnitMap.)0
-4916 y Fc(Constructor)32 b(F)-8 b(unction:)227 5015 y
-Fk(AST)p Ft(_)p Fk(NORMMAP)-2 5158 y Fc(Inheritance)n(:)227
-5304 y Fk(The)28 b(NormMap)f(class)f(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 5447 y Fc(A)m(ttributes)n(:)227 5593 y Fk(The)h(MatrixMap)e
-(class)h(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)
-n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-5693 y(Mappings.)p eop end
-%%Page: 493 503
-TeXDict begin 493 502 bop 3643 52 a FG(493)-2 351 y Fc(F)-8
-b(unctions)n(:)227 497 y Fk(The)35 b(NormMap)f(class)g(do)r(es)g(not)h
-(de\014ne)g(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)h(those)f(whic)n(h)h
-(are)e(applicable)h(to)h(all)227 597 y(Mappings.)p 0
-789 3780 12 v 0 921 a FA(NullRegion)330 b Fd(A)39 b(b)s(oundless)f
-(region)g(within)f(a)h(F)-10 b(rame)328 b FA(NullRegion)0
-1103 y Fc(Description:)44 b Fk(The)21 b(NullRegion)g(class)f(implemen)n
-(ts)h(a)f(Region)h(with)g(no)f(b)r(ounds)h(within)h(a)e(F)-7
-b(rame.)35 b(If)21 b(the)g(Negated)227 1203 y(attribute)28
-b(of)f(a)h(NullRegion)f(is)g(false,)h(the)f(NullRegion)h(represen)n(ts)
-e(a)h(Region)g(con)n(taining)f(no)h(p)r(oin)n(ts.)37
-b(If)28 b(the)227 1302 y(Negated)k(attribute)g(of)h(a)e(NullRegion)i
-(is)f(true,)h(the)g(NullRegion)f(represen)n(ts)e(an)i(in\014nite)h
-(Region)f(\(that)h(is,)227 1402 y(all)28 b(p)r(oin)n(ts)f(in)h(the)g
-(co)r(ordinate)e(system)i(are)e(inside)i(the)g(NullRegion\).)0
-1548 y Fc(Constructor)k(F)-8 b(unction:)227 1648 y Fk(AST)p
-Ft(_)p Fk(NULLREGION)-2 1794 y Fc(Inheritance)n(:)227
-1940 y Fk(The)28 b(NullRegion)f(class)g(inherits)g(from)h(the)g(Region)
-f(class.)-2 2086 y Fc(A)m(ttributes)n(:)227 2232 y Fk(The)h(NullRegion)
-g(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r
-(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)g(to)h(all)227
-2332 y(Regions.)-2 2478 y Fc(F)-8 b(unctions)n(:)227
-2624 y Fk(The)33 b(NullRegion)f(class)f(do)r(es)h(not)g(de\014ne)h(an)n
-(y)e(new)i(routines)e(b)r(ey)n(ond)h(those)g(whic)n(h)h(are)e
-(applicable)h(to)g(all)227 2723 y(Regions.)p 0 2916 V
-0 3047 a FA(Ob)7 b(ject)710 b Fd(Base)39 b(class)f(for)g(all)g(AST)g
-(Ob)7 b(jects)709 b FA(Ob)7 b(ject)0 3229 y Fc(Description:)44
-b Fk(This)33 b(class)e(is)h(the)h(base)f(class)f(from)h(whic)n(h)g(all)
-g(other)g(classes)f(in)i(the)f(AST)h(library)e(are)g(deriv)n(ed.)227
-3329 y(It)e(pro)n(vides)e(all)h(the)g(basic)g(Ob)5 b(ject)28
-b(b)r(eha)n(viour)f(and)h(Ob)5 b(ject)28 b(manipulation)g(facilities)g
-(required)f(throughout)227 3429 y(the)h(library)-7 b(.)36
-b(There)27 b(is)g(no)h(Ob)5 b(ject)27 b(constructor,)f(ho)n(w)n(ev)n
-(er,)g(as)h(Ob)5 b(jects)27 b(on)g(their)h(o)n(wn)f(are)f(not)i
-(useful.)0 3575 y Fc(Constructor)k(F)-8 b(unction:)227
-3674 y Fk(None.)-2 3820 y Fc(Inheritance)n(:)227 3967
-y Fk(The)28 b(Ob)5 b(ject)27 b(base)g(class)g(do)r(es)g(not)h(inherit)g
-(from)f(an)n(y)g(other)g(class.)-2 4113 y Fc(A)m(ttributes)n(:)227
-4259 y Fk(All)h(Ob)5 b(jects)28 b(ha)n(v)n(e)e(the)i(follo)n(wing)e
-(attributes:)340 4514 y Fj(\017)45 b Fk(Class:)36 b(Ob)5
-b(ject)28 b(class)e(name)340 4644 y Fj(\017)45 b Fk(ID:)28
-b(Ob)5 b(ject)28 b(iden)n(ti\014cation)f(string)340 4773
-y Fj(\017)45 b Fk(Iden)n(t:)37 b(P)n(ermanen)n(t)26 b(Ob)5
-b(ject)28 b(iden)n(ti\014cation)f(string)340 4903 y Fj(\017)45
-b Fk(Nob)5 b(ject:)37 b(Num)n(b)r(er)28 b(of)g(Ob)5 b(jects)27
-b(in)h(class)340 5032 y Fj(\017)45 b Fk(Ob)5 b(jSize:)37
-b(The)28 b(in-memory)e(size)h(of)h(the)g(Ob)5 b(ject)27
-b(in)h(b)n(ytes)340 5162 y Fj(\017)45 b Fk(RefCoun)n(t:)37
-b(Coun)n(t)28 b(of)f(activ)n(e)g(Ob)5 b(ject)28 b(p)r(oin)n(ters)340
-5291 y Fj(\017)45 b Fk(UseDefs:)38 b(Allo)n(w)27 b(use)g(of)h(default)g
-(v)-5 b(alues)27 b(for)g(Ob)5 b(ject)28 b(attributes?)-2
-5450 y Fc(F)-8 b(unctions)n(:)227 5596 y Fk(The)28 b(follo)n(wing)e
-(routines)h(ma)n(y)g(b)r(e)h(applied)g(to)f(all)h(Ob)5
-b(jects:)p eop end
-%%Page: 494 504
-TeXDict begin 494 503 bop 0 52 a FG(494)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(ANNUL:)29 b(Ann)n(ul)f(a)f(p)r(oin)n(ter)g(to)h
-(an)f(Ob)5 b(ject)340 483 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(BEGIN:)28 b(Begin)f(a)g(new)h(AST)g(con)n(text)340
-614 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CLEAR:)28 b(Clear)e(attribute)i
-(v)-5 b(alues)27 b(for)g(an)h(Ob)5 b(ject)340 745 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(CLONE:)27 b(Clone)g(a)h(p)r(oin)n(ter)f(to)g(an)h
-(Ob)5 b(ject)340 877 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(COPY:)27
-b(Cop)n(y)g(an)g(Ob)5 b(ject)340 1008 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(DELETE:)27 b(Delete)h(an)f(Ob)5 b(ject)340
-1140 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(END:)28 b(End)g(an)f(AST)h(con)n
-(text)340 1271 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(ESCAPES:)27
-b(Con)n(trol)f(whether)i(graphical)e(escap)r(e)h(sequences)g(are)f
-(remo)n(v)n(ed)340 1402 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(EXEMPT:)27 b(Exempt)g(an)h(Ob)5 b(ject)27 b(p)r(oin)n(ter)g(from)g
-(AST)h(con)n(text)g(handling)340 1534 y Fj(\017)45 b
-Fk(AST)p Ft(_)p Fk(EXPOR)-7 b(T:)27 b(Exp)r(ort)g(an)g(Ob)5
-b(ject)27 b(p)r(oin)n(ter)h(to)f(an)g(outer)g(con)n(text)340
-1665 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GET)p Fm(<)p Fk(X)p
-Fm(>)p Fk(:)36 b(Get)28 b(an)g(attribute)f(v)-5 b(alue)28
-b(for)f(an)g(Ob)5 b(ject)340 1797 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(IMPOR)-7 b(T:)27 b(Imp)r(ort)h(an)f(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(to)g(the)h(curren)n(t)f(con)n(text)340
-1928 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(ISA)p Fm(<)p Fk(CLASS)p
-Fm(>)p Fk(:)37 b(T)-7 b(est)28 b(class)e(mem)n(b)r(ership)340
-2059 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SAME:)28 b(Do)g(t)n(w)n(o)e(AST)
-i(p)r(oin)n(ters)f(refer)g(to)h(the)g(same)f(Ob)5 b(ject?)340
-2191 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SET:)28 b(Set)g(attribute)f(v)-5
-b(alues)28 b(for)f(an)g(Ob)5 b(ject)340 2322 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(SET)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Set)28 b(an)f(attribute)h(v)-5 b(alue)28 b(for)f(an)g(Ob)5
-b(ject)340 2454 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SHO)n(W:)28
-b(Displa)n(y)f(a)g(textual)h(represen)n(tation)e(of)h(an)h(Ob)5
-b(ject)27 b(on)g(standard)g(output)340 2585 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(TEST:)27 b(T)-7 b(est)28 b(if)g(an)g(attribute)f
-(v)-5 b(alue)28 b(is)f(set)h(for)f(an)g(Ob)5 b(ject)340
-2717 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TUNE:)28 b(Set)g(or)f(get)g(an)g
-(AST)h(tuning)g(parameter)340 2848 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(VERSION:)28 b(Return)g(the)f(v)n(erson)f(of)i(the)g(AST)g
-(library)e(b)r(eing)i(used.)p 0 3044 3780 12 v 0 3176
-a FA(PcdMap)891 3183 y Fd(Apply)38 b(2-dimensional)e(pincushion/barrel)
-1642 3304 y(distortion)3285 3176 y FA(PcdMap)0 3467 y
-Fc(Description:)44 b Fk(A)31 b(PcdMap)g(is)f(a)h(non-linear)e(Mapping)h
-(whic)n(h)h(transforms)f(2-dimensional)f(p)r(ositions)h(to)h(correct)
-227 3566 y(for)25 b(the)g(radial)f(distortion)g(in)n(tro)r(duced)h(b)n
-(y)f(some)h(cameras)e(and)i(telescop)r(es.)35 b(This)25
-b(can)g(tak)n(e)f(the)h(form)g(either)227 3666 y(of)j(pincushion)f(or)g
-(barrel)f(distortion,)h(and)h(is)f(c)n(haracterized)f(b)n(y)h(a)g
-(single)g(distortion)g(co)r(e\016cien)n(t.)227 3790 y(A)g(PcdMap)f(is)g
-(sp)r(eci\014ed)h(b)n(y)f(giving)g(this)h(distortion)f(co)r(e\016cien)n
-(t)g(and)g(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227
-3889 y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h
-(of)i(a)f(PcdMap)g(applies)g(the)h(distortion:)227 4013
-y(RD)g(=)g(R)g Fj(\003)f Fk(\()h(1)f(+)g(C)h Fj(\003)f
-Fk(R)h Fj(\003)f Fk(R)h(\))227 4137 y(where)h(R)h(is)g(the)g
-(undistorted)f(radial)g(distance)g(from)h(the)g(distortion)f(cen)n(tre)
-g(\(sp)r(eci\014ed)h(b)n(y)f(attribute)h(Pcd-)227 4237
-y(Cen\),)k(RD)e(is)g(the)g(radial)e(distance)i(from)f(the)i(same)e(cen)
-n(tre)g(in)h(the)g(presence)f(of)h(distortion,)g(and)g(C)g(is)f(the)227
-4336 y(distortion)c(co)r(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g
-(attribute)h(Disco\).)227 4460 y(The)33 b(in)n(v)n(erse)f
-(transformation)f(of)i(a)f(PcdMap)h(remo)n(v)n(es)d(the)k(distortion)e
-(pro)r(duced)h(b)n(y)f(the)h(forw)n(ard)f(trans-)227
-4560 y(formation.)42 b(The)29 b(expression)f(used)i(to)f(deriv)n(e)g(R)
-g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n(erse)g(of)h(the)h
-(expression)227 4659 y(ab)r(o)n(v)n(e.)0 4807 y Fc(Constructor)i(F)-8
-b(unction:)227 4907 y Fk(AST)p Ft(_)p Fk(PCDMAP)-2 5055
-y Fc(Inheritance)n(:)227 5201 y Fk(The)28 b(PcdMap)f(class)g(inherits)g
-(from)g(the)h(Mapping)f(class.)-2 5349 y Fc(A)m(ttributes)n(:)227
-5495 y Fk(In)38 b(addition)f(to)f(those)h(attributes)g(common)g(to)g
-(all)g(Mappings,)h(ev)n(ery)e(PcdMap)h(also)f(has)g(the)i(follo)n(wing)
-227 5595 y(attributes:)p eop end
-%%Page: 495 505
-TeXDict begin 495 504 bop 3643 52 a FG(495)340 351 y
-Fj(\017)45 b Fk(Disco:)37 b(PcdMap)27 b(pincushion/barrel)f(distortion)
-g(co)r(e\016cien)n(t)340 486 y Fj(\017)45 b Fk(PcdCen\(axis\):)36
-b(Cen)n(tre)28 b(co)r(ordinates)e(of)h(pincushion/barrel)f(distortion)
--2 651 y Fc(F)-8 b(unctions)n(:)227 797 y Fk(The)39 b(PcdMap)g(class)f
-(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(routines)g(b)r(ey)n(ond)g
-(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)227 896
-y(Mappings.)p 0 1099 3780 12 v 0 1229 a FA(P)l(ermMap)1025
-1230 y Fd(Co)s(ordinate)d(p)s(erm)m(utation)g(Mapping)3195
-1229 y FA(P)l(ermMap)0 1422 y Fc(Description:)44 b Fk(A)37
-b(P)n(ermMap)e(is)h(a)g(Mapping)g(whic)n(h)g(p)r(erm)n(utes)h(the)f
-(order)f(of)h(co)r(ordinates,)i(and)e(p)r(ossibly)g(also)227
-1522 y(c)n(hanges)26 b(the)i(n)n(um)n(b)r(er)g(of)f(co)r(ordinates,)g
-(b)r(et)n(w)n(een)g(its)h(input)g(and)g(output.)227 1648
-y(In)37 b(addition)f(to)g(p)r(erm)n(uting)h(the)f(co)r(ordinate)g
-(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)f(assign)g(constan)n(t)h(v)-5
-b(alues)36 b(to)227 1748 y(co)r(ordinates.)53 b(This)33
-b(is)g(useful)h(when)g(the)f(n)n(um)n(b)r(er)g(of)h(co)r(ordinates)d
-(is)j(b)r(eing)f(increased)f(as)h(it)h(allo)n(ws)e(\014xed)227
-1847 y(v)-5 b(alues)27 b(to)h(b)r(e)g(assigned)e(to)i(an)n(y)f(new)g
-(ones.)0 2000 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2100 y Fk(AST)p Ft(_)p Fk(PERMMAP)-2 2252 y Fc(Inheritance)n(:)227
-2398 y Fk(The)28 b(P)n(ermMap)e(class)h(inherits)g(from)h(the)g
-(Mapping)f(class.)-2 2551 y Fc(A)m(ttributes)n(:)227
-2697 y Fk(The)32 b(P)n(ermMap)d(class)i(do)r(es)g(not)g(de\014ne)g(an)n
-(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 2796 y(Mappings.)-2 2949 y
-Fc(F)-8 b(unctions)n(:)227 3095 y Fk(The)36 b(P)n(ermMap)e(class)h(do)r
-(es)g(not)g(de\014ne)h(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)g(those)h
-(whic)n(h)f(are)g(applicable)f(to)i(all)227 3195 y(Mappings.)p
-0 3397 V 0 3529 a FA(Plot)588 b Fd(Pro)m(vide)37 b(facilities)f(for)i
-(2D)h(graphical)d(output)586 b FA(Plot)0 3721 y Fc(Description:)44
-b Fk(This)33 b(class)e(pro)n(vides)g(facilities)h(for)g(pro)r(ducing)f
-(2D)i(graphical)d(output.)52 b(A)32 b(Plot)g(is)g(a)g(sp)r(ecialised)
-227 3820 y(form)40 b(of)g(F)-7 b(rameSet,)43 b(in)e(whic)n(h)f(the)h
-(base)e(F)-7 b(rame)40 b(describ)r(es)f(a)h Ft(")p Fk(graphical)p
-Ft(")e Fk(co)r(ordinate)h(system)h(and)g(is)227 3920
-y(asso)r(ciated)28 b(with)i(a)e(rectangular)f(plotting)i(area)f(in)h
-(the)h(underlying)e(graphics)g(system.)41 b(This)29 b(plotting)g(area)
-227 4020 y(is)f(where)f(graphical)f(output)i(app)r(ears.)36
-b(It)28 b(is)f(de\014ned)h(when)g(the)g(Plot)f(is)g(created.)227
-4146 y(The)36 b(curren)n(t)e(F)-7 b(rame)35 b(of)h(a)f(Plot)g(describ)r
-(es)g(a)g Ft(")p Fk(ph)n(ysical)p Ft(")f Fk(co)r(ordinate)g(system,)j
-(whic)n(h)f(is)f(the)h(co)r(ordinate)227 4245 y(system)41
-b(in)h(whic)n(h)f(plotting)h(op)r(erations)e(are)g(sp)r(eci\014ed.)79
-b(The)41 b(results)g(of)g(eac)n(h)g(plotting)g(op)r(eration)g(are)227
-4345 y(automatically)26 b(transformed)f(in)n(to)i(graphical)e(co)r
-(ordinates)g(so)h(as)g(to)h(app)r(ear)e(in)i(the)g(plotting)g(area)e
-(\(sub)5 b(ject)227 4445 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n
-(y)f(b)r(e)h(in)f(e\013ect\).)227 4571 y(Because)d(the)h(Mapping)f(b)r
-(et)n(w)n(een)g(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(ma)n
-(y)h(often)h(b)r(e)g(non-linear,)e(or)h(ev)n(en)227 4670
-y(discon)n(tin)n(uous,)33 b(most)f(plotting)g(do)r(es)g(not)h(result)f
-(in)g(simple)h(straigh)n(t)e(lines.)51 b(The)32 b(basic)g(plotting)g
-(elemen)n(t)227 4770 y(is)h(therefore)g(not)g(a)g(straigh)n(t)f(line,)j
-(but)f(a)f(geo)r(desic)f(curv)n(e)g(\(see)h(AST)p Ft(_)p
-Fk(CUR)-9 b(VE,)34 b(AST)p Ft(_)p Fk(GENCUR)-9 b(VE)33
-b(and)227 4870 y(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE\).)19
-b(A)g(Plot)f(also)g(pro)n(vides)g(facilities)h(for)f(dra)n(wing)g(mark)
-n(ers)f(or)h(sym)n(b)r(ols)g(\(AST)p Ft(_)p Fk(MARK\),)227
-4969 y(text)31 b(\(AST)p Ft(_)p Fk(TEXT\))g(and)g(grid)f(lines)g(\(AST)
-p Ft(_)p Fk(GRIDLINE\).)i(It)f(is)f(also)g(p)r(ossible)g(to)h(dra)n(w)e
-(curvilinear)h(axes)227 5069 y(with)23 b(optional)e(co)r(ordinate)g
-(grids)f(\(AST)p Ft(_)p Fk(GRID\).)k(A)e(range)e(of)i(Plot)g
-(attributes)f(is)h(a)n(v)-5 b(ailable)21 b(to)h(allo)n(w)e(precise)227
-5168 y(con)n(trol)27 b(o)n(v)n(er)e(the)j(app)r(earance)e(of)i
-(graphical)e(output)i(pro)r(duced)f(b)n(y)h(these)f(routines.)227
-5295 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 5394 y(co)r(ordinate)33
-b(system)h(itself)6 b(\))35 b(b)n(y)f(selecting)g(di\013eren)n(t)g(F)-7
-b(rames)33 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)34 b(of)g(a)g(Plot,)h
-(using)e(its)227 5494 y(Curren)n(t)21 b(attribute.)35
-b(Y)-7 b(ou)22 b(ma)n(y)e(also)h(set)g(up)h(clipping)g(\(see)f(AST)p
-Ft(_)p Fk(CLIP\))g(to)h(limit)g(the)g(exten)n(t)f(of)h(an)n(y)f
-(plotting)227 5593 y(y)n(ou)26 b(p)r(erform,)h(and)f(this)h(ma)n(y)f(b)
-r(e)h(done)f(in)h(an)n(y)f(of)h(the)g(co)r(ordinate)e(systems)i(asso)r
-(ciated)e(with)i(the)g(Plot,)g(not)227 5693 y(necessarily)f(the)i(one)f
-(y)n(ou)g(are)g(plotting)g(in.)p eop end
-%%Page: 496 506
-TeXDict begin 496 505 bop 0 52 a FG(496)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(Lik)n(e)i(an)n(y)f(F)-7
-b(rameSet,)32 b(a)f(Plot)g(ma)n(y)f(also)g(b)r(e)i(used)f(as)g(a)f(F)-7
-b(rame.)47 b(In)32 b(this)f(case,)h(it)f(b)r(eha)n(v)n(es)f(lik)n(e)h
-(its)g(curren)n(t)227 451 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f
-(the)h(ph)n(ysical)f(co)r(ordinate)f(system.)227 576
-y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f(Plot)g(describ)r(es)f(the)i
-(in)n(ter-relation)e(b)r(et)n(w)n(een)h(graphical)e(co)r(ordinates)h
-(\(its)227 676 y(base)k(F)-7 b(rame\))38 b(and)f(ph)n(ysical)g(co)r
-(ordinates)g(\(its)h(curren)n(t)f(F)-7 b(rame\).)67 b(It)38
-b(di\013ers)f(from)h(a)f(normal)g(F)-7 b(rameSet,)227
-776 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i(to)f(transform)
-f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f(areas)f(of)h(the)g
-(Plot)g(will)g(result)227 875 y(in)e(bad)g(co)r(ordinate)e(v)-5
-b(alues)27 b(\(AST)p Ft(__)p Fk(BAD\).)0 1026 y Fc(Constructor)32
-b(F)-8 b(unction:)227 1126 y Fk(AST)p Ft(_)p Fk(PLOT)-2
-1277 y Fc(Inheritance)n(:)227 1423 y Fk(The)28 b(Plot)f(class)g
-(inherits)g(from)g(the)h(F)-7 b(rameSet)28 b(class.)-2
-1574 y Fc(A)m(ttributes)n(:)227 1720 y Fk(In)37 b(addition)f(to)g
-(those)g(attributes)h(common)e(to)i(all)f(F)-7 b(rameSets,)38
-b(ev)n(ery)d(Plot)h(also)f(has)h(the)h(follo)n(wing)e(at-)227
-1820 y(tributes:)340 2084 y Fj(\017)45 b Fk(Abbrev:)37
-b(Abbreviate)27 b(leading)g(\014elds?)340 2217 y Fj(\017)45
-b Fk(Border:)36 b(Dra)n(w)26 b(a)i(b)r(order)e(around)h(v)-5
-b(alid)27 b(regions)g(of)g(a)g(Plot?)340 2351 y Fj(\017)45
-b Fk(Clip:)37 b(Clip)28 b(lines)g(and/or)e(mark)n(ers)f(at)j(the)g
-(Plot)f(b)r(oundary?)340 2485 y Fj(\017)45 b Fk(ClipOp:)37
-b(Com)n(bine)27 b(Plot)g(clipping)h(limits)g(using)f(a)h(b)r(o)r(olean)
-f(OR?)340 2618 y Fj(\017)45 b Fk(Colour\(elemen)n(t\):)37
-b(Colour)26 b(index)i(for)f(a)g(Plot)g(elemen)n(t)340
-2752 y Fj(\017)45 b Fk(Dra)n(wAxes\(axis\):)36 b(Dra)n(w)27
-b(axes)f(for)h(a)g(Plot?)340 2886 y Fj(\017)45 b Fk(Dra)n(wTitle:)37
-b(Dra)n(w)26 b(a)i(title)g(for)f(a)g(Plot?)340 3019 y
-Fj(\017)45 b Fk(Escap)r(e:)36 b(Allo)n(w)27 b(c)n(hanges)g(of)g(c)n
-(haracter)f(attributes)h(within)i(strings?)340 3153 y
-Fj(\017)45 b Fk(Edge\(axis\):)36 b(Whic)n(h)28 b(edges)f(to)g(lab)r(el)
-h(in)g(a)f(Plot)340 3287 y Fj(\017)45 b Fk(F)-7 b(on)n(t\(elemen)n
-(t\):)38 b(Character)26 b(fon)n(t)h(for)g(a)h(Plot)f(elemen)n(t)340
-3420 y Fj(\017)45 b Fk(Gap\(axis\):)37 b(In)n(terv)-5
-b(al)27 b(b)r(et)n(w)n(een)g(linearly)g(spaced)g(ma)5
-b(jor)26 b(axis)h(v)-5 b(alues)340 3554 y Fj(\017)45
-b Fk(Grf:)37 b(Select)28 b(the)g(graphics)e(in)n(terface)h(to)h(use.)
-340 3688 y Fj(\017)45 b Fk(Grid:)37 b(Dra)n(w)27 b(grid)g(lines)g(for)g
-(a)h(Plot?)340 3821 y Fj(\017)45 b Fk(In)n(visible:)37
-b(Dra)n(w)27 b(graphics)f(in)i(in)n(visible)f(ink?)340
-3955 y Fj(\017)45 b Fk(Lab)r(elA)n(t\(axis\):)37 b(Where)27
-b(to)h(place)f(n)n(umerical)g(lab)r(els)g(for)g(a)g(Plot)340
-4089 y Fj(\017)45 b Fk(Lab)r(elUnits\(axis\):)37 b(Use)28
-b(axis)f(unit)h(descriptions)f(in)h(a)f(Plot?)340 4222
-y Fj(\017)45 b Fk(Lab)r(elUp\(axis\):)37 b(Dra)n(w)27
-b(n)n(umerical)g(Plot)g(lab)r(els)g(uprigh)n(t?)340 4356
-y Fj(\017)45 b Fk(Lab)r(elling:)37 b(Lab)r(el)27 b(and)h(tic)n(k)f
-(placemen)n(t)g(option)h(for)f(a)g(Plot)340 4490 y Fj(\017)45
-b Fk(LogGap\(axis\):)36 b(In)n(terv)-5 b(al)27 b(b)r(et)n(w)n(een)g
-(logarithmically)f(spaced)h(ma)5 b(jor)26 b(axis)h(v)-5
-b(alues)340 4624 y Fj(\017)45 b Fk(LogPlot\(axis\):)35
-b(Map)28 b(the)g(plot)f(on)n(to)g(the)h(screen)f(logarithmically?)340
-4757 y Fj(\017)45 b Fk(LogTic)n(ks\(axis\):)35 b(Space)27
-b(the)h(ma)5 b(jor)27 b(tic)n(k)g(marks)g(logarithmically?)340
-4891 y Fj(\017)45 b Fk(Ma)5 b(jTic)n(kLen\(axis\):)36
-b(Length)27 b(of)h(ma)5 b(jor)26 b(tic)n(k)i(marks)e(for)h(a)g(Plot)340
-5025 y Fj(\017)45 b Fk(MinTic)n(kLen\(axis\):)37 b(Length)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)340 5158
-y Fj(\017)45 b Fk(MinTic)n(k\(axis\):)37 b(Densit)n(y)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)340 5292
-y Fj(\017)45 b Fk(NumLab\(axis\):)37 b(Dra)n(w)27 b(n)n(umerical)g
-(axis)f(lab)r(els)i(for)f(a)g(Plot?)340 5426 y Fj(\017)45
-b Fk(NumLabGap\(axis\):)37 b(Spacing)27 b(of)g(n)n(umerical)g(axis)g
-(lab)r(els)g(for)g(a)h(Plot)340 5559 y Fj(\017)45 b Fk(Size\(elemen)n
-(t\):)38 b(Character)26 b(size)h(for)g(a)g(Plot)g(elemen)n(t)340
-5693 y Fj(\017)45 b Fk(St)n(yle\(elemen)n(t\):)38 b(Line)27
-b(st)n(yle)h(for)f(a)g(Plot)g(elemen)n(t)p eop end
-%%Page: 497 507
-TeXDict begin 497 506 bop 3643 52 a FG(497)340 351 y
-Fj(\017)45 b Fk(T)-7 b(extLab\(axis\):)37 b(Dra)n(w)26
-b(descriptiv)n(e)h(axis)g(lab)r(els)g(for)g(a)h(Plot?)340
-482 y Fj(\017)45 b Fk(T)-7 b(extLabGap\(axis\):)36 b(Spacing)27
-b(of)h(descriptiv)n(e)f(axis)f(lab)r(els)i(for)f(a)g(Plot)340
-612 y Fj(\017)45 b Fk(Tic)n(kAll:)37 b(Dra)n(w)27 b(tic)n(k)g(marks)g
-(on)g(all)g(edges)g(of)h(a)f(Plot?)340 742 y Fj(\017)45
-b Fk(TitleGap:)37 b(V)-7 b(ertical)28 b(spacing)e(for)h(a)g(Plot)g
-(title)340 873 y Fj(\017)45 b Fk(T)-7 b(ol:)37 b(Plotting)27
-b(tolerance)340 1003 y Fj(\017)45 b Fk(Width\(elemen)n(t\):)39
-b(Line)27 b(width)i(for)e(a)g(Plot)g(elemen)n(t)-2 1162
-y Fc(F)-8 b(unctions)n(:)227 1308 y Fk(In)22 b(addition)g(to)f(those)h
-(routines)f(applicable)g(to)h(all)f(F)-7 b(rameSets,)23
-b(the)f(follo)n(wing)f(routines)g(ma)n(y)g(also)f(b)r(e)j(applied)227
-1408 y(to)28 b(all)f(Plots:)340 1665 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(BORDER:)27 b(Dra)n(w)g(a)g(b)r(order)g(around)g(v)-5
-b(alid)27 b(regions)f(of)i(a)f(Plot)340 1796 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(BOUNDINGBO)n(X:)28 b(Returns)f(a)h(b)r(ounding)f
-(b)r(o)n(x)g(for)h(previously)e(dra)n(wn)h(graphics)340
-1926 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CLIP:)27 b(Set)h(up)g(or)f(remo)
-n(v)n(e)f(clipping)h(for)g(a)h(Plot)340 2056 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(CUR)-9 b(VE:)28 b(Dra)n(w)f(a)g(geo)r(desic)f
-(curv)n(e)340 2187 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GENCUR)-9
-b(VE:)28 b(Dra)n(w)f(a)g(generalized)f(curv)n(e)340 2317
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETGRF)n(CONTEXT:)27
-b(Get)h(the)g(graphics)e(con)n(text)i(for)f(a)g(Plot)340
-2447 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GRFPOP:)27 b(Retriev)n(e)g
-(previously)f(sa)n(v)n(ed)g(graphics)h(functions)340
-2578 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GRFPUSH:)29 b(Sa)n(v)n(e)d(the)i
-(curren)n(t)f(graphics)f(functions)340 2708 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GRFSET:)28 b(Register)f(a)g(graphics)f(routine)h
-(for)g(use)h(b)n(y)f(the)h(Plot)f(class)340 2838 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GRID:)29 b(Dra)n(w)d(a)i(set)f(of)h(lab)r(elled)f
-(co)r(ordinate)g(axes)340 2969 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(GRIDLINE:)28 b(Dra)n(w)f(a)g(grid)g(line)h(\(or)f(axis\))g
-(for)g(a)g(Plot)340 3099 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(MARK:)28 b(Dra)n(w)f(a)g(set)h(of)f(mark)n(ers)f(for)h(a)g(Plot)340
-3229 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE:)27
-b(Dra)n(w)g(a)g(series)g(of)g(connected)h(geo)r(desic)e(curv)n(es)340
-3360 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TEXT:)28 b(Dra)n(w)e(a)i(text)g
-(string)e(for)i(a)f(Plot)-2 3519 y Fc(Graphical)33 b(Elemen)m(ts)n(:)
-227 3665 y Fk(The)21 b(colour)e(index,)j(c)n(haracter)d(fon)n(t,)j(c)n
-(haracter)c(size,)k(line)f(st)n(yle)f(and)g(line)h(width)g(used)g(for)f
-(plotting)g(can)h(b)r(e)g(set)227 3765 y(indep)r(enden)n(tly)g(for)f(v)
--5 b(arious)19 b(elemen)n(ts)h(of)g(the)g(graphical)f(output)h(pro)r
-(duced)g(b)n(y)g(a)g(Plot.)34 b(The)20 b(di\013eren)n(t)g(graph-)227
-3864 y(ical)h(elemen)n(ts)g(are)f(iden)n(ti\014ed)h(b)n(y)g(app)r
-(ending)f(the)i(strings)e(listed)h(b)r(elo)n(w)g(as)f(subscripts)g(to)h
-(the)g(Plot)g(attributes)227 3964 y(Colour\(elemen)n(t\),)k(F)-7
-b(on)n(t\(elemen)n(t\),)27 b(Size\(elemen)n(t\),)f(St)n(yle\(elemen)n
-(t\))g(and)f(Width\(elemen)n(t\).)38 b(These)25 b(strings)227
-4064 y(are)k(case-insensitiv)n(e)g(and)h(unam)n(biguous)f
-(abbreviations)f(ma)n(y)i(b)r(e)g(used.)44 b(Elemen)n(ts)30
-b(of)g(the)g(graphical)f(out-)227 4163 y(put)34 b(whic)n(h)g(relate)f
-(to)g(individual)h(axes)f(can)g(b)r(e)h(referred)e(to)i(either)f(indep)
-r(enden)n(tly)h(\(e.g.)55 b Ft(")p Fk(\(Grid1\))p Ft(")33
-b Fk(and)227 4263 y Ft(")p Fk(\(Grid2\))p Ft(")27 b Fk(\))h(or)f
-(together)f(\(e.g.)37 b Ft(")p Fk(\(Grid\))p Ft(")p Fk(\):)340
-4520 y Fj(\017)45 b Fk(Axes:)37 b(Axis)28 b(lines)f(dra)n(wn)g(through)
-g(tic)n(k)g(marks)f(using)i(AST)p Ft(_)p Fk(GRID)340
-4650 y Fj(\017)45 b Fk(Axis1:)37 b(Axis)27 b(line)h(dra)n(wn)f(through)
-f(tic)n(k)i(marks)e(on)i(axis)f(1)g(using)g(AST)p Ft(_)p
-Fk(GRID)340 4781 y Fj(\017)45 b Fk(Axis2:)37 b(Axis)27
-b(line)h(dra)n(wn)f(through)f(tic)n(k)i(marks)e(on)i(axis)f(2)g(using)g
-(AST)p Ft(_)p Fk(GRID)340 4911 y Fj(\017)45 b Fk(Border:)36
-b(The)27 b(Plot)g(b)r(order)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(BORDER)g(or)g(AST)p Ft(_)p Fk(GRID)340 5041
-y Fj(\017)45 b Fk(Curv)n(es:)31 b(Geo)r(desic)18 b(curv)n(es)g(dra)n
-(wn)f(using)h(AST)p Ft(_)p Fk(CUR)-9 b(VE,)18 b(AST)p
-Ft(_)p Fk(GENCUR)-9 b(VE)18 b(or)g(AST)p Ft(_)p Fk(POL)-7
-b(YCUR)e(VE)340 5172 y Fj(\017)45 b Fk(Grid:)37 b(Grid)28
-b(lines)f(dra)n(wn)g(using)g(AST)p Ft(_)p Fk(GRIDLINE)h(or)f(AST)p
-Ft(_)p Fk(GRID)340 5302 y Fj(\017)45 b Fk(Grid1:)37 b(Grid)27
-b(lines)h(whic)n(h)f(cross)f(axis)h(1,)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(GRIDLINE)h(or)f(AST)p Ft(_)p Fk(GRID)340 5432
-y Fj(\017)45 b Fk(Grid2:)37 b(Grid)27 b(lines)h(whic)n(h)f(cross)f
-(axis)h(2,)g(dra)n(wn)g(using)g(AST)p Ft(_)p Fk(GRIDLINE)h(or)f(AST)p
-Ft(_)p Fk(GRID)340 5563 y Fj(\017)45 b Fk(Mark)n(ers:)35
-b(Graphical)27 b(mark)n(ers)e(\(sym)n(b)r(ols\))j(dra)n(wn)e(using)i
-(AST)p Ft(_)p Fk(MARK)340 5693 y Fj(\017)45 b Fk(NumLab:)37
-b(Numerical)28 b(axis)e(lab)r(els)i(dra)n(wn)e(using)i(AST)p
-Ft(_)p Fk(GRID)p eop end
-%%Page: 498 508
-TeXDict begin 498 507 bop 0 52 a FG(498)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(NumLab1:)37 b(Numerical)27 b(lab)r(els)g(for)g(axis)g(1)g(dra)n
-(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 471 y Fj(\017)45
-b Fk(NumLab2:)37 b(Numerical)27 b(lab)r(els)g(for)g(axis)g(2)g(dra)n
-(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 591 y Fj(\017)45
-b Fk(Strings:)37 b(T)-7 b(ext)27 b(strings)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(TEXT)340 711 y Fj(\017)45 b Fk(T)-7 b(extLab:)37
-b(Descriptiv)n(e)27 b(axis)g(lab)r(els)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(GRID)340 830 y Fj(\017)45 b Fk(T)-7 b(extLab1:)36
-b(Descriptiv)n(e)27 b(lab)r(el)h(for)f(axis)g(1)g(dra)n(wn)g(using)g
-(AST)p Ft(_)p Fk(GRID)340 950 y Fj(\017)45 b Fk(T)-7
-b(extLab2:)36 b(Descriptiv)n(e)27 b(lab)r(el)h(for)f(axis)g(2)g(dra)n
-(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 1070 y Fj(\017)45
-b Fk(Tic)n(ks:)36 b(Tic)n(k)28 b(marks)e(\(b)r(oth)i(ma)5
-b(jor)27 b(and)g(minor\))g(dra)n(wn)g(using)g(AST)p Ft(_)p
-Fk(GRID)340 1190 y Fj(\017)45 b Fk(Tic)n(ks1:)36 b(Tic)n(k)27
-b(marks)f(\(b)r(oth)j(ma)5 b(jor)26 b(and)i(minor\))f(for)g(axis)g(1)g
-(dra)n(wn)g(using)g(AST)p Ft(_)p Fk(GRID)340 1309 y Fj(\017)45
-b Fk(Tic)n(ks2:)36 b(Tic)n(k)27 b(marks)f(\(b)r(oth)j(ma)5
-b(jor)26 b(and)i(minor\))f(for)g(axis)g(2)g(dra)n(wn)g(using)g(AST)p
-Ft(_)p Fk(GRID)340 1429 y Fj(\017)45 b Fk(Title:)38 b(The)27
-b(Plot)g(title)h(dra)n(wn)f(using)g(AST)p Ft(_)p Fk(GRID)p
-0 1602 3780 12 v 0 1734 a FA(Plot3D)418 b Fd(Pro)m(vide)37
-b(facilities)f(for)i(2D)h(graphical)d(output)415 b FA(Plot3D)0
-1897 y Fc(Description:)44 b Fk(A)28 b(Plot3D)g(is)f(a)h(sp)r(ecialised)
-f(form)g(of)h(Plot)f(that)h(pro)n(vides)e(facilities)i(for)f(pro)r
-(ducing)g(3D)h(graphical)227 1996 y(output,)35 b(including)d(fully)i
-(annotated)e(3D)g(co)r(ordinate)g(grids.)50 b(The)33
-b(base)f(F)-7 b(rame)32 b(in)h(a)f(Plot3D)g(describ)r(es)g(a)227
-2096 y(3-dimensional)c Ft(")p Fk(graphical)p Ft(")f Fk(co)r(ordinate)h
-(system.)42 b(The)29 b(axes)g(of)g(this)h(co)r(ordinate)e(system)h(are)
-f(assumed)h(to)227 2195 y(b)r(e)d(righ)n(t-handed)f(\(that)h(is,)f(if)h
-(X)g(app)r(ears)f(horizon)n(tally)e(to)j(the)g(righ)n(t)e(and)i(Y)g(v)n
-(ertically)e(up)n(w)n(ards,)g(then)i(Z)g(is)227 2295
-y(out)d(of)h(the)f(screen)g(to)n(w)n(ards)e(the)i(view)n(er\),)h(and)f
-(are)f(assumed)h(to)g(b)r(e)g(equally)g(scaled)f(\(that)i(is,)g(the)g
-(same)e(units)227 2395 y(are)32 b(used)g(to)g(measure)g(p)r(ositions)g
-(on)g(eac)n(h)f(of)i(the)g(3)f(axes\).)50 b(The)33 b(upp)r(er)f(and)h
-(lo)n(w)n(er)d(b)r(ounds)j(of)f(a)g(v)n(olume)227 2494
-y(within)25 b(this)g(graphical)d(co)r(ordinate)h(system)h(is)g(sp)r
-(eci\014ed)h(when)f(the)g(Plot3D)g(is)g(created,)g(and)g(all)g
-(subsequen)n(t)227 2594 y(graphics)i(are)h Ft(")p Fk(dra)n(wn)p
-Ft(")f Fk(in)i(this)g(v)n(olume.)227 2712 y(The)h(Plot3D)g(class)f(do)r
-(es)g(not)i(itself)f(include)g(an)n(y)g(abilit)n(y)f(to)h(dra)n(w)f(on)
-h(a)g(graphics)e(device.)41 b(Instead)29 b(it)g(calls)227
-2812 y(up)r(on)21 b(function)g(in)g(an)f(externally)g(supplied)g(mo)r
-(dule)h(\(the)g Ft(")p Fk(grf3d)p Ft(")e Fk(mo)r(dule\))i(to)g(do)f
-(the)h(required)e(dra)n(wing.)33 b(A)227 2911 y(mo)r(dule)23
-b(should)g(b)r(e)g(written)g(that)g(implemen)n(ts)h(the)f(functions)g
-(of)g(the)g(grf3d)f(in)n(terface)g(using)h(the)g(facilities)g(of)227
-3011 y(a)d(sp)r(eci\014c)g(graphics)e(system)h(This)h(mo)r(dule)g
-(should)g(then)g(b)r(e)g(link)n(ed)g(in)n(to)g(the)g(application)f(so)g
-(that)h(the)g(Plot3D)227 3110 y(class)30 b(can)f(use)h(its)h(functions)
-f(\(see)g(the)h(description)f(of)g(the)g(ast)p Ft(_)p
-Fk(link)g(commands)f(for)h(details)g(of)g(ho)n(w)g(to)g(do)227
-3210 y(this\).)35 b(The)19 b(grf3d)g(in)n(terface)g(de\014nes)g(a)g
-(few)h(simple)f(functions)h(for)f(dra)n(wing)f(primitiv)n(es)h(suc)n(h)
-g(as)f(straigh)n(t)h(lines,)227 3310 y(mark)n(ers)27
-b(and)h(c)n(haracter)e(strings.)38 b(These)28 b(functions)h(all)f
-(accept)g(p)r(ositions)f(in)i(the)g(3D)f(graphics)f(co)r(ordinate)227
-3409 y(system)21 b(\(the)h(base)e(F)-7 b(rame)21 b(of)f(the)i
-(Plot3D\),)f(and)f(so)h(the)g(grf3d)f(mo)r(dule)h(m)n(ust)h(also)d
-(manage)h(the)i(pro)5 b(jection)20 b(of)227 3509 y(these)i(3D)g(co)r
-(ordinates)e(on)n(to)h(the)h(2D)g(viewing)f(surface,)h(including)g(the)
-h(c)n(hoice)d(of)i Ft(")p Fk(ey)n(e)p Ft(")p Fk(/)p Ft(")p
-Fk(camera)p Ft(")c Fk(p)r(osition,)227 3609 y(direction)25
-b(of)g(viewing,)f(etc.)37 b(The)25 b(AST)g(library)e(includes)i(a)g
-(sample)f(implemen)n(tation)h(of)g(the)g(grf3d)f(in)n(terface)227
-3708 y(based)j(on)h(the)g(PGPLOT)e(graphics)h(system)g(\(see)h(\014le)f
-(grf3d)p Ft(_)p Fk(pgplot.c\).)36 b(This)28 b(implemen)n(tation)g(also)
-e(serv)n(es)227 3808 y(to)36 b(do)r(cumen)n(t)g(the)h(grf3d)e(in)n
-(terface)g(itself)i(and)f(should)g(b)r(e)g(consulted)g(for)g(details)f
-(b)r(efore)h(writing)g(a)g(new)227 3908 y(implemen)n(tation.)227
-4026 y(The)30 b(curren)n(t)g(F)-7 b(rame)29 b(of)h(a)g(Plot3D)f
-(describ)r(es)h(a)f Ft(")p Fk(ph)n(ysical)p Ft(")g Fk(3-dimensional)f
-(co)r(ordinate)h(system,)i(whic)n(h)f(is)227 4125 y(the)36
-b(co)r(ordinate)f(system)h(in)g(whic)n(h)f(plotting)h(op)r(erations)e
-(are)h(sp)r(eci\014ed)h(when)g(in)n(v)n(oking)e(the)j(metho)r(ds)f(of)
-227 4225 y(the)f(Plot3D)e(class.)55 b(The)34 b(results)f(of)h(eac)n(h)f
-(plotting)h(op)r(eration)f(are)g(automatically)g(transformed)g(in)n(to)
-h(3D)227 4324 y(graphical)29 b(co)r(ordinates)f(b)r(efore)i(b)r(eing)g
-(plotted)g(using)g(the)g(facilities)g(of)g(the)g(grf3d)f(mo)r(dule)i
-(link)n(ed)f(in)n(to)f(the)227 4424 y(application.)227
-4542 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 4642 y(co)r(ordinate)26
-b(system)h(itself)6 b(\))29 b(b)n(y)e(selecting)f(di\013eren)n(t)i(F)-7
-b(rames)26 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)27 b(of)g(a)g(Plot3D,)
-g(using)f(its)227 4741 y(Curren)n(t)h(attribute.)227
-4859 y(Lik)n(e)f(an)n(y)f(F)-7 b(rameSet,)26 b(a)g(Plot3D)f(ma)n(y)h
-(also)f(b)r(e)h(used)g(as)g(a)f(F)-7 b(rame.)36 b(In)26
-b(this)h(case,)e(it)i(b)r(eha)n(v)n(es)e(lik)n(e)g(its)h(curren)n(t)227
-4959 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f(the)h(ph)n(ysical)f
-(co)r(ordinate)f(system.)227 5077 y(When)i(used)g(as)f(a)g(Mapping,)g
-(a)g(Plot3D)g(describ)r(es)g(the)g(in)n(ter-relation)f(b)r(et)n(w)n
-(een)i(3D)f(graphical)f(co)r(ordinates)227 5177 y(\(its)i(base)f(F)-7
-b(rame\))28 b(and)f(3D)h(ph)n(ysical)e(co)r(ordinates)h(\(its)h(curren)
-n(t)e(F)-7 b(rame\).)227 5295 y(Although)26 b(the)g(Plot3D)e(class)h
-(inherits)g(from)g(the)h(Plot)f(class,)g(sev)n(eral)e(of)j(the)g
-(facilities)f(of)g(the)h(Plot)f(class)g(are)227 5394
-y(not)f(a)n(v)-5 b(ailable)22 b(in)i(the)g(Plot3D)f(class,)h(and)f(an)h
-(error)e(will)h(b)r(e)i(rep)r(orted)d(if)j(an)n(y)e(attempt)h(is)f
-(made)h(to)f(use)h(them.)227 5494 y(Sp)r(eci\014cally)-7
-b(,)38 b(the)d(Plot3D)g(class)f(do)r(es)h(not)g(supp)r(ort)g(clipping)g
-(using)g(the)h(astClip)f(function.)60 b(AST)p Ft(_)p
-Fk(CLIP)227 5593 y(routine.)36 b(Nor)24 b(do)r(es)h(it)g(supp)r(ort)g
-(the)g(sp)r(eci\014cation)g(of)g(graphics)e(primitiv)n(e)i(functions)g
-(at)g(run-time)g(using)f(the)227 5693 y(AST)p Ft(_)p
-Fk(GRFSET,)k(AST)p Ft(_)p Fk(GRFPOP)-7 b(,)27 b(AST)p
-Ft(_)p Fk(GRFPUSH,)h(and)f(AST)p Ft(_)p Fk(GETGRF)n(CONTEXT)g
-(routines.)p eop end
-%%Page: 499 509
-TeXDict begin 499 508 bop 3643 52 a FG(499)0 351 y Fc(Constructor)32
-b(F)-8 b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(PLOT3D)-2
-649 y Fc(Inheritance)n(:)227 795 y Fk(The)28 b(Plot3D)f(class)g
-(inherits)g(from)g(the)h(Plot)f(class.)-2 992 y Fc(A)m(ttributes)n(:)
-227 1138 y Fk(In)d(addition)g(to)f(those)g(attributes)h(common)f(to)g
-(all)h(Plots,)f(ev)n(ery)g(Plot3D)g(also)f(has)h(the)h(follo)n(wing)f
-(attributes:)340 1472 y Fj(\017)45 b Fk(Norm:)37 b(Normal)26
-b(v)n(ector)h(de\014ning)g(the)h(2D)g(plane)f(used)h(for)f(text)h(and)f
-(mark)n(ers)340 1629 y Fj(\017)45 b Fk(Ro)r(otCorner:)35
-b(Sp)r(eci\014es)28 b(whic)n(h)g(edges)f(of)g(the)h(3D)g(b)r(o)n(x)f
-(should)g(b)r(e)h(annotated.)227 1839 y(Some)35 b(attributes)f(of)g
-(the)h(Plot)f(class)g(refer)f(to)i(sp)r(eci\014c)f(ph)n(ysical)g(co)r
-(ordinate)f(axes)h(\(e.g.)57 b(Gap,)36 b(Lab)r(elUp,)227
-1938 y(Dra)n(wAxes,)29 b(etc\).)43 b(F)-7 b(or)29 b(a)g(basic)g(Plot,)g
-(the)h(axis)f(index)g(m)n(ust)h(b)r(e)g(1)f(or)f(2,)i(but)g(for)f(a)g
-(Plot3D)g(the)h(axis)f(index)227 2038 y(can)e(b)r(e)h(1,)g(2)f(or)g(3.)
-227 2187 y(Certain)35 b(Plot)h(attributes)f(are)g(ignored)f(b)n(y)i
-(the)g(Plot3D)f(class)g(\(e.g.)61 b(Edge,)37 b(Dra)n(wTitle,)g
-(TitleGap,)h(etc\).)227 2286 y(Consult)28 b(the)g(Plot)f(attribute)h
-(do)r(cumen)n(tation)f(for)g(details.)-2 2484 y Fc(F)-8
-b(unctions)n(:)227 2630 y Fk(The)27 b(Plot3D)e(class)h(do)r(es)g(not)g
-(de\014ne)h(an)n(y)e(new)i(routines)f(b)r(ey)n(ond)g(those)g(whic)n(h)g
-(are)f(applicable)h(to)g(all)g(Plots.)227 2730 y(Note,)37
-b(ho)n(w)n(ev)n(er,)d(that)h(the)g(follo)n(wing)e(metho)r(ds)i
-(inherited)g(from)f(the)h(Plot)f(class)f(cannot)h(b)r(e)h(used)g(with)g
-(a)227 2829 y(Plot3D)27 b(and)h(will)f(rep)r(ort)g(an)h(error)d(if)j
-(called:)340 3014 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(BOUNDINGBO)n(X,)19
-b(AST)p Ft(_)p Fk(CLIP)-7 b(,)18 b(AST)p Ft(_)p Fk(CUR)-9
-b(VE,)18 b(AST)p Ft(_)p Fk(GENCUR)-9 b(VE,)18 b(AST)p
-Ft(_)p Fk(GETGRF)n(CONTEXT,)427 3113 y(AST)p Ft(_)p Fk(GRFPOP)-7
-b(,)27 b(AST)p Ft(_)p Fk(GRFPUSH,)h(AST)p Ft(_)p Fk(GRFSET,)g(AST)p
-Ft(_)p Fk(GRIDLINE,)g(AST)p Ft(_)p Fk(POL)-7 b(YCUR)e(VE.)p
-0 3361 3780 12 v 0 3493 a FA(P)l(oin)l(tList)508 b Fd(A)39
-b(collection)e(of)h(p)s(oin)m(ts)g(in)g(a)h(F)-10 b(rame)506
-b FA(P)l(oin)l(tList)0 3730 y Fc(Description:)44 b Fk(The)20
-b(P)n(oin)n(tList)e(class)g(implemen)n(ts)i(a)f(Region)f(whic)n(h)i
-(represen)n(ts)e(a)g(collection)h(of)g(p)r(oin)n(ts)h(in)f(a)g(F)-7
-b(rame.)0 3927 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4027 y Fk(AST)p Ft(_)p Fk(POINTLIST)-2 4224 y Fc(Inheritance)n(:)227
-4371 y Fk(The)28 b(P)n(oin)n(tList)e(class)h(inherits)h(from)f(the)h
-(Region)f(class.)-2 4568 y Fc(A)m(ttributes)n(:)227 4714
-y Fk(In)40 b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)f
-(Regions,)j(ev)n(ery)d(P)n(oin)n(tList)f(also)h(has)g(the)i(follo)n
-(wing)227 4814 y(attributes:)340 5147 y Fj(\017)k Fk(ListSize:)37
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(p)r(ositions)f(stored)g(in)h(the)g(P)
-n(oin)n(tList)-2 5357 y Fc(F)-8 b(unctions)n(:)227 5503
-y Fk(The)37 b(P)n(oin)n(tList)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n
-(y)f(new)h(routines)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 5603 y(Regions.)p eop end
-%%Page: 500 510
-TeXDict begin 500 509 bop 0 52 a FG(500)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a FA(P)l(olyMap)225 b Fd(Map)38 b(co)s(ordinates)f(using)h(p)s
-(olynomial)e(functions)223 b FA(P)l(olyMap)0 644 y Fc(Description:)44
-b Fk(A)33 b(P)n(olyMap)f(is)g(a)g(form)h(of)g(Mapping)f(whic)n(h)h(p)r
-(erforms)f(a)g(general)f(p)r(olynomial)h(transformation.)227
-744 y(Eac)n(h)37 b(output)g(co)r(ordinate)g(is)g(a)g(p)r(olynomial)g
-(function)h(of)f(all)g(the)h(input)h(co)r(ordinates.)65
-b(The)37 b(co)r(e\016cien)n(ts)227 844 y(are)29 b(sp)r(eci\014ed)i
-(separately)d(for)i(eac)n(h)f(output)i(co)r(ordinate.)43
-b(The)30 b(forw)n(ard)f(and)h(in)n(v)n(erse)e(transformations)h(are)227
-943 y(de\014ned)f(indep)r(endan)n(tly)g(b)n(y)f(separate)g(sets)g(of)h
-(co)r(e\016cien)n(ts.)0 1079 y Fc(Constructor)k(F)-8
-b(unction:)227 1179 y Fk(AST)p Ft(_)p Fk(POL)h(YMAP)-2
-1314 y Fc(Inheritance)n(:)227 1460 y Fk(The)28 b(P)n(olyMap)e(class)h
-(inherits)g(from)g(the)h(Mapping)g(class.)-2 1596 y Fc(A)m(ttributes)n
-(:)227 1742 y Fk(The)34 b(P)n(olyMap)d(class)h(do)r(es)h(not)h
-(de\014ne)f(an)n(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)f(applicable)h(to)g(all)227 1842 y(Mappings.)-2
-1978 y Fc(F)-8 b(unctions)n(:)227 2124 y Fk(The)38 b(P)n(olyMap)e
-(class)g(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)g(routines)g(b)r(ey)n
-(ond)g(those)g(whic)n(h)h(are)f(applicable)f(to)i(all)227
-2223 y(Mappings.)p 0 2395 V 0 2527 a FA(P)l(olygon)153
-b Fd(A)38 b(p)s(olygonal)d(region)h(within)h(a)g(2-dimensional)e(F)-10
-b(rame)152 b FA(P)l(olygon)0 2688 y Fc(Description:)44
-b Fk(The)25 b(P)n(olygon)e(class)g(implemen)n(ts)i(a)f(p)r(olygonal)g
-(area,)f(de\014ned)i(b)n(y)g(a)f(collection)g(of)h(v)n(ertices,)f
-(within)227 2788 y(a)k(2-dimensional)f(F)-7 b(rame.)39
-b(The)29 b(v)n(ertices)e(are)h(connected)g(together)f(b)n(y)i(geo)r
-(desic)e(curv)n(es)g(within)i(the)g(encap-)227 2887 y(sulated)g(F)-7
-b(rame.)42 b(F)-7 b(or)28 b(instance,)i(if)g(the)f(encapsulated)g(F)-7
-b(rame)29 b(is)g(a)g(simple)g(F)-7 b(rame)29 b(then)h(the)f(geo)r
-(desics)f(will)227 2987 y(b)r(e)34 b(straigh)n(t)d(lines,)j(but)g(if)f
-(the)g(F)-7 b(rame)33 b(is)f(a)h(SkyF)-7 b(rame)32 b(then)h(the)g(geo)r
-(desics)f(will)h(b)r(e)g(great)f(circles.)52 b(Note,)227
-3087 y(the)31 b(v)n(ertices)e(m)n(ust)h(b)r(e)h(supplied)g(in)f(an)g
-(order)f(suc)n(h)h(that)g(the)h(inside)f(of)g(the)h(p)r(olygon)e(is)h
-(to)g(the)h(left)g(of)f(the)227 3186 y(b)r(oundary)c(as)g(the)h(v)n
-(ertices)f(are)f(tra)n(v)n(ersed.)35 b(Supplying)27 b(them)g(in)g(the)g
-(rev)n(erse)e(order)g(will)i(e\013ectiv)n(ely)f(negate)227
-3286 y(the)i(p)r(olygon.)227 3404 y(Within)33 b(a)e(SkyF)-7
-b(rame,)32 b(neigh)n(b)r(ouring)e(v)n(ertices)g(are)h(alw)n(a)n(ys)e
-(joined)j(using)f(the)h(shortest)e(path.)49 b(Th)n(us)31
-b(if)h(an)227 3503 y(edge)f(of)g(180)f(degrees)g(or)g(more)g(in)i
-(length)f(is)g(required,)g(it)h(should)e(b)r(e)i(split)g(in)n(to)e
-(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227 3603 y(less)k(than)h(180)e
-(degrees.)59 b(The)35 b(closed)g(path)g(joining)g(all)h(the)f(v)n
-(ertices)g(in)g(order)f(will)i(divide)f(the)h(celestial)227
-3702 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h(regions.)60
-b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h(region)f(whic)n
-(h)h(is)f(circled)h(in)g(an)227 3802 y(an)n(ti-clo)r(c)n(kwise)25
-b(manner)h(\(when)i(view)n(ed)e(from)g(the)h(inside)g(of)g(the)g
-(celestial)f(sphere\))h(when)g(mo)n(ving)e(through)227
-3902 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f(in)h(whic)n
-(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e(w)n(as)h
-(created)h(\(i.e.)36 b(the)227 4001 y(inside)28 b(is)f(to)h(the)g(left)
-g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g(through)g(the)h(v)n
-(ertices)e(in)i(the)g(order)e(supplied\).)0 4137 y Fc(Constructor)32
-b(F)-8 b(unction:)227 4237 y Fk(AST)p Ft(_)p Fk(POL)h(YGON)-2
-4372 y Fc(Inheritance)n(:)227 4518 y Fk(The)28 b(P)n(olygon)d(class)i
-(inherits)g(from)h(the)g(Region)f(class.)-2 4654 y Fc(A)m(ttributes)n
-(:)227 4800 y Fk(The)36 b(P)n(olygon)d(class)i(do)r(es)g(not)h
-(de\014ne)f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)h(are)e(applicable)h(to)h(all)227 4900 y(Regions.)-2
-5036 y Fc(F)-8 b(unctions)n(:)227 5182 y Fk(In)28 b(addition)g(to)g
-(those)g(routines)f(applicable)h(to)f(all)h(Regions,)f(the)i(follo)n
-(wing)e(routines)g(ma)n(y)g(also)g(b)r(e)i(applied)227
-5281 y(to)f(all)f(P)n(olygons:)340 5522 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(DO)n(WNSIZE:)28 b(Reduce)f(the)h(n)n(um)n(b)r(er)g
-(of)f(v)n(ertices)g(in)h(a)f(P)n(olygon.)340 5641 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(OUTLINE)p Fm(<)p Fk(X)p Fm(>)p Fk(:)36
-b(Create)27 b(a)g(P)n(olygon)e(outlining)j(v)-5 b(alues)27
-b(in)h(a)f(pixel)h(arra)n(y)p eop end
-%%Page: 501 511
-TeXDict begin 501 510 bop 3643 52 a FG(501)p 0 351 3780
-12 v 0 483 a FA(Prism)320 b Fd(An)39 b(extrusion)e(of)i(a)f(region)f
-(in)m(to)h(higher)g(dimensions)318 b FA(Prism)0 695 y
-Fc(Description:)44 b Fk(A)26 b(Prism)e(is)h(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(an)h(extrusion)f(of)h(an)g(existing)g(Region)f(in)n
-(to)h(one)g(or)f(more)227 794 y(orthogonal)32 b(dimensions)h(\(sp)r
-(eci\014ed)i(b)n(y)e(another)g(Region\).)55 b(If)34 b(the)g(Region)g
-(to)f(b)r(e)h(extruded)g(has)f(N)h(axes,)227 894 y(and)25
-b(the)g(Region)f(de\014ning)h(the)g(extrusion)f(has)g(M)h(axes,)g(then)
-g(the)g(resulting)g(Prism)e(will)i(ha)n(v)n(e)f(\(M+N\))h(axes.)227
-993 y(A)i(p)r(oin)n(t)g(is)g(inside)f(the)h(Prism)f(if)h(the)g(\014rst)
-g(N)g(axis)f(v)-5 b(alues)26 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)i(Region)e(b)r(eing)227 1093 y(extruded,)34
-b(and)e(the)h(remaining)e(M)i(axis)e(v)-5 b(alues)32
-b(corresp)r(ond)f(to)h(a)g(p)r(oin)n(t)h(inside)f(the)h(Region)f
-(de\014ning)g(the)227 1193 y(extrusion.)227 1329 y(As)h(an)g(example,)h
-(a)f(cylinder)g(can)f(b)r(e)i(represen)n(ted)e(b)n(y)h(extruding)f(an)h
-(existing)g(Circle,)h(using)e(an)h(In)n(terv)-5 b(al)227
-1428 y(to)31 b(de\014ne)g(the)g(extrusion.)46 b(Ih)31
-b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n(v)n(e)e
-(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-1528 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 1700 y Fc(Constructor)32 b(F)-8
-b(unction:)227 1800 y Fk(AST)p Ft(_)p Fk(PRISM)-2 1972
-y Fc(Inheritance)n(:)227 2118 y Fk(The)28 b(Prism)f(class)f(inherits)i
-(from)f(the)h(Region)f(class.)-2 2290 y Fc(A)m(ttributes)n(:)227
-2436 y Fk(The)19 b(Prism)g(class)f(do)r(es)g(not)h(de\014ne)h(an)n(y)e
-(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)
-h(to)g(all)f(Regions.)-2 2609 y Fc(F)-8 b(unctions)n(:)227
-2755 y Fk(The)21 b(Prism)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)f(applicable)g
-(to)h(all)g(Regions.)p 0 2977 V 0 3107 a FA(RateMap)844
-3108 y Fd(Mapping)38 b(whic)m(h)g(represen)m(ts)f(di\013eren)m(tiation)
-3232 3107 y FA(RateMap)0 3320 y Fc(Description:)44 b
-Fk(A)37 b(RateMap)e(is)h(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e(a)i
-(single)f(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)i(of)227
-3420 y(another)h(Mapping.)67 b(The)38 b(Mapping)g(for)f(whic)n(h)h(the)
-g(Jacobian)e(is)i(required)f(is)g(sp)r(eci\014ed)h(when)g(the)h(new)227
-3519 y(RateMap)27 b(is)h(created,)f(and)g(is)h(referred)e(to)i(as)f
-(the)h Ft(")p Fk(encapsulated)e(Mapping)p Ft(")h Fk(b)r(elo)n(w.)227
-3655 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 3755 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 3854
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 3954 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 4090 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 4190 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-4362 y Fc(Constructor)32 b(F)-8 b(unction:)227 4461 y
-Fk(AST)p Ft(_)p Fk(RA)h(TEMAP)-2 4634 y Fc(Inheritance)n(:)227
-4780 y Fk(The)28 b(RateMap)f(class)g(inherits)g(from)h(the)g(Mapping)f
-(class.)-2 4952 y Fc(A)m(ttributes)n(:)227 5098 y Fk(The)33
-b(RateMap)f(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i
-(attributes)g(b)r(ey)n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 5198 y(Mappings.)-2 5370 y Fc(F)-8 b(unctions)n(:)227
-5516 y Fk(The)37 b(RateMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)
-g(new)g(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)g(are)f(applicable)g
-(to)h(all)227 5616 y(Mappings.)p eop end
-%%Page: 502 512
-TeXDict begin 502 511 bop 0 52 a FG(502)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a FA(Region)269 b Fd(Represen)m(ts)39 b(a)f(region)g(within)f(a)h(co)s
-(ordinate)f(system)267 b FA(Region)0 675 y Fc(Description:)44
-b Fk(This)25 b(class)e(pro)n(vides)g(the)h(basic)g(facilities)g(for)g
-(describing)g(a)f(region)g(within)i(a)f(sp)r(eci\014ed)h(co)r(ordinate)
-227 774 y(system.)37 b(Ho)n(w)n(ev)n(er,)26 b(the)h(Region)g(class)g
-(do)r(es)g(not)h(ha)n(v)n(e)e(a)h(constructor)f(function)i(of)g(its)f
-(o)n(wn,)g(as)g(it)h(is)g(simply)227 874 y(a)i(con)n(tainer)e(class)h
-(for)h(a)f(family)h(of)g(sp)r(ecialised)f(sub-classes)f(suc)n(h)i(as)f
-(Circle,)h(Bo)n(x,)g(etc,)g(whic)n(h)g(implemen)n(t)227
-973 y(Regions)d(with)h(particular)e(shap)r(es.)227 1099
-y(All)j(sub-classes)e(of)i(Region)f(require)g(a)g(F)-7
-b(rame)28 b(to)h(b)r(e)g(supplied)g(when)g(the)g(Region)f(is)g
-(created.)39 b(This)29 b(F)-7 b(rame)227 1199 y(describ)r(es)25
-b(the)h(co)r(ordinate)e(system)i(in)g(whic)n(h)f(the)h(Region)f(is)g
-(de\014ned,)i(and)e(is)g(referred)g(to)g(as)g(the)h Ft(")p
-Fk(encapsu-)227 1299 y(lated)g(F)-7 b(rame)p Ft(")24
-b Fk(b)r(elo)n(w.)36 b(Constructors)23 b(will)j(also)e(t)n(ypically)h
-(required)f(one)h(or)g(more)f(p)r(ositions)h(to)h(b)r(e)f(supplied)227
-1398 y(whic)n(h)32 b(de\014ne)g(the)g(lo)r(cation)g(and)f(exten)n(t)h
-(of)g(the)g(region.)48 b(These)32 b(p)r(ositions)f(m)n(ust)h(b)r(e)h
-(supplied)f(within)g(the)227 1498 y(encapsulated)27 b(F)-7
-b(rame.)227 1624 y(The)36 b(Region)g(class)f(inherits)g(from)h(the)g(F)
--7 b(rame)36 b(class,)h(and)f(so)f(a)h(Region)f(can)g(b)r(e)i(supplied)
-f(where-ev)n(er)e(a)227 1723 y(F)-7 b(rame)27 b(is)h(exp)r(ected.)37
-b(In)28 b(these)g(cases,)e(supplying)i(a)f(Region)g(is)h(equiv)-5
-b(alen)n(t)27 b(to)g(supplying)h(a)f(reference)g(to)g(its)227
-1823 y(encapsulated)33 b(F)-7 b(rame.)53 b(Th)n(us)32
-b(all)h(the)h(metho)r(ds)f(of)g(the)h(F)-7 b(rame)32
-b(class)g(can)h(b)r(e)h(used)f(on)g(the)g(Region)f(class.)227
-1923 y(F)-7 b(or)27 b(instance,)h(the)g(AST)p Ft(_)p
-Fk(F)n(ORMA)-7 b(T)27 b(routine)g(ma)n(y)g(b)r(e)h(used)g(on)f(a)g
-(Region)g(to)h(format)f(an)g(axis)g(v)-5 b(alue.)227
-2049 y(In)26 b(addition,)h(since)f(F)-7 b(rame)25 b(inherits)h(from)g
-(Mapping,)g(a)f(Region)h(is)g(also)f(a)g(sort)g(of)h(Mapping.)36
-b(T)-7 b(ransforming)227 2148 y(p)r(ositions)24 b(b)n(y)g(supplying)g
-(a)g(Region)f(to)h(one)g(of)g(the)h(AST)p Ft(_)p Fk(TRAN)p
-Fm(<)p Fk(X)p Fm(>)f Fk(routines)f(is)h(the)h(w)n(a)n(y)e(to)h
-(determine)g(if)227 2248 y(a)d(giv)n(en)f(p)r(osition)h(is)g(inside)g
-(or)f(outside)h(the)g(Region.)34 b(When)22 b(used)f(as)f(a)h(Mapping,)h
-(most)e(classes)g(of)h(F)-7 b(rame)21 b(are)227 2348
-y(equiv)-5 b(alen)n(t)26 b(to)g(a)g(UnitMap.)37 b(Ho)n(w)n(ev)n(er,)25
-b(the)i(Region)e(class)h(mo)r(di\014es)g(this)g(b)r(eha)n(viour)f(so)h
-(that)h(a)f(Region)f(acts)227 2447 y(lik)n(e)e(a)f(UnitMap)i(only)e
-(for)h(input)g(p)r(ositions)g(whic)n(h)g(are)e(within)j(the)f(area)f
-(represen)n(ted)f(b)n(y)i(the)g(Region.)35 b(Input)227
-2547 y(p)r(ositions)24 b(whic)n(h)h(are)e(outside)h(the)h(area)e(pro)r
-(duce)h(bad)g(output)h(v)-5 b(alues)24 b(\(i.e.)37 b(the)24
-b(output)h(v)-5 b(alues)24 b(are)g(equal)g(to)227 2646
-y(AST)p Ft(__)p Fk(BAD\).)k(This)f(b)r(eha)n(viour)f(is)h(the)h(same)e
-(for)h(b)r(oth)h(the)f(forw)n(ard)f(and)h(the)h(in)n(v)n(erse)d
-(transformation.)35 b(In)227 2746 y(this)d(sense)e(the)h
-Ft(")p Fk(in)n(v)n(erse)e(transformation)p Ft(")g Fk(is)i(not)g(a)g
-(true)g(in)n(v)n(erse)e(of)i(the)g(forw)n(ard)f(transformation,)g
-(since)227 2846 y(applying)d(the)h(forw)n(ard)e(transformation)h(to)g
-(a)g(p)r(oin)n(t)h(outside)g(the)g(Region,)f(and)h(then)g(applying)f
-(the)h(in)n(v)n(erse)227 2945 y(transformation)g(results,)i(in)g(a)f
-(set)h(of)f(AST)p Ft(__)p Fk(BAD)h(axis)f(v)-5 b(alues)29
-b(rather)g(than)h(the)g(original)e(axis)h(v)-5 b(alues.)42
-b(If)227 3045 y(required,)32 b(the)h(AST)p Ft(_)p Fk(REMO)n(VEREGIONS)d
-(function)j(can)e(b)r(e)i(used)f(to)f(remo)n(v)n(e)g(the)h
-Ft(")p Fk(masking)p Ft(")e Fk(e\013ect)j(of)227 3145
-y(an)n(y)e(Regions)f(con)n(tained)g(within)i(a)f(comp)r(ound)g(Mapping)
-g(or)f(F)-7 b(rameSet.)47 b(It)31 b(do)r(es)g(this)h(b)n(y)f(replacing)
-e(eac)n(h)227 3244 y(Region)35 b(with)g(a)g(UnitMap)h(or)e(equiv)-5
-b(alen)n(t)35 b(F)-7 b(rame)35 b(\(dep)r(ending)h(on)f(the)g(con)n
-(text)g(in)h(whic)n(h)f(the)g(Region)g(is)227 3344 y(used\).)227
-3470 y(If)d(the)f(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i
-(the)g(Region)g(is)g(c)n(hanged)e(\(b)n(y)i(c)n(hanging)f(the)h(v)-5
-b(alues)31 b(of)g(one)f(or)227 3569 y(more)23 b(of)g(the)h(attribute)g
-(whic)n(h)g(the)g(Region)e(inherits)i(from)f(its)h(encapsulated)f(F)-7
-b(rame\),)24 b(the)g(area)e(represen)n(ted)227 3669 y(b)n(y)f(the)h
-(Region)f(is)g(mapp)r(ed)h(in)n(to)f(the)g(new)h(co)r(ordinate)e
-(system.)35 b(F)-7 b(or)20 b(instance,)j(let's)e(sa)n(y)f(a)h(Circle)g
-(\(a)g(sub)r(class)227 3769 y(of)32 b(Region\))g(is)f(created,)i(a)e
-(SkyF)-7 b(rame)31 b(b)r(eing)h(supplied)h(to)e(the)i(constructor)d(so)
-h(that)i(the)f(Circle)f(describ)r(es)227 3868 y(a)g(circular)f(area)g
-(on)h(the)g(sky)g(in)h(FK4)e(equatorial)g(co)r(ordinates.)46
-b(Since)32 b(Region)e(inherits)i(from)f(F)-7 b(rame,)31
-b(the)227 3968 y(Circle)23 b(will)h(ha)n(v)n(e)f(a)g(System)h
-(attribute)f(and)h(this)g(attribute)g(will)f(b)r(e)h(set)g(to)g
-Ft(")p Fk(FK4)p Ft(")p Fk(.)34 b(If)24 b(the)g(System)f(attribute)227
-4068 y(of)29 b(the)g(Region)f(is)g(then)h(c)n(hanged)f(from)g(FK4)g(to)
-g(FK5,)h(the)g(circular)e(area)g(represen)n(ted)g(b)n(y)i(the)g(Region)
-e(will)227 4167 y(automatically)34 b(b)r(e)h(mapp)r(ed)g(from)f(the)h
-(FK4)f(system)g(in)n(to)h(the)g(FK5)f(system.)57 b(In)35
-b(general,)g(c)n(hanging)e(the)227 4267 y(co)r(ordinate)26
-b(system)h(in)h(this)f(w)n(a)n(y)f(ma)n(y)g(result)h(in)g(the)h(region)
-e(c)n(hanging)g(shap)r(e)h(-)f(for)h(instance,)g(a)g(circle)f(ma)n(y)
-227 4366 y(c)n(hange)33 b(in)n(to)g(an)g(ellipse)h(if)g(the)g
-(transformation)e(from)h(the)h(old)g(to)f(the)h(new)g(co)r(ordinate)e
-(system)i(is)f(linear)227 4466 y(but)j(with)g(di\013eren)n(t)f(scales)f
-(on)h(eac)n(h)g(axis.)58 b(Th)n(us)35 b(the)h(sp)r(eci\014c)f(class)g
-(of)g(a)f(Region)h(cannot)g(b)r(e)g(used)g(as)g(a)227
-4566 y(guaran)n(tee)22 b(of)h(the)h(shap)r(e)f(in)h(an)n(y)e
-(particular)g(co)r(ordinate)g(system.)36 b(If)23 b(the)h(AST)p
-Ft(_)p Fk(SIMPLIFY)f(routine)g(is)h(used)227 4665 y(on)g(a)g(Region,)g
-(it)h(will)f(endea)n(v)n(our)e(to)i(return)g(a)g(new)g(Region)f(of)h(a)
-g(sub-class)f(whic)n(h)h(accurately)f(describ)r(es)g(the)227
-4765 y(shap)r(e)28 b(in)g(the)f(curren)n(t)g(co)r(ordinate)g(system)g
-(of)h(the)g(Region)e(\(but)j(this)f(ma)n(y)f(not)g(alw)n(a)n(ys)f(b)r
-(e)i(p)r(ossible\).)227 4891 y(It)e(is)f(p)r(ossible)g(to)g(negate)f
-(an)h(existing)g(Region)f(so)h(that)g(it)h(represen)n(ts)e(all)g(areas)
-g(of)h(the)h(encapsulated)e(F)-7 b(rame)227 4990 y(except)28
-b(for)f(the)h(area)e(sp)r(eci\014ed)i(when)g(the)g(Region)f(w)n(as)f
-(created.)0 5143 y Fc(Constructor)32 b(F)-8 b(unction:)227
-5242 y Fk(None.)-2 5395 y Fc(Inheritance)n(:)227 5541
-y Fk(The)28 b(Region)f(class)f(inherits)i(from)f(the)h(F)-7
-b(rame)27 b(class.)-2 5693 y Fc(A)m(ttributes)n(:)p eop
-end
-%%Page: 503 513
-TeXDict begin 503 512 bop 3643 52 a FG(503)227 351 y
-Fk(In)20 b(addition)f(to)g(those)f(attributes)h(common)g(to)g(all)g(F)
--7 b(rames,)20 b(ev)n(ery)e(Region)g(also)g(has)h(the)h(follo)n(wing)e
-(attributes:)340 619 y Fj(\017)45 b Fk(Adaptiv)n(e:)37
-b(Should)28 b(the)g(area)e(adapt)h(to)h(c)n(hanges)e(in)i(the)g(co)r
-(ordinate)e(system?)340 754 y Fj(\017)45 b Fk(Negated:)37
-b(Has)27 b(the)h(original)e(region)g(b)r(een)i(negated?)340
-890 y Fj(\017)45 b Fk(Closed:)37 b(Should)27 b(the)h(b)r(oundary)f(b)r
-(e)h(considered)f(to)g(b)r(e)h(inside)g(the)g(region?)340
-1025 y Fj(\017)45 b Fk(MeshSize:)37 b(Num)n(b)r(er)28
-b(of)f(p)r(oin)n(ts)h(used)g(to)f(create)g(a)g(mesh)g(co)n(v)n(ering)f
-(the)i(Region)340 1160 y Fj(\017)45 b Fk(FillF)-7 b(actor:)37
-b(F)-7 b(raction)26 b(of)i(the)g(Region)f(whic)n(h)g(is)h(of)f(in)n
-(terest)340 1295 y Fj(\017)45 b Fk(Bounded:)37 b(Is)27
-b(the)h(Region)f(b)r(ounded?)227 1462 y(Ev)n(ery)21 b(Region)g(also)g
-(inherits)h(an)n(y)g(further)g(attributes)g(that)g(b)r(elong)g(to)g
-(the)h(encapsulated)e(F)-7 b(rame,)23 b(regardless)227
-1561 y(of)37 b(that)h(F)-7 b(rame's)36 b(class.)65 b(\(F)-7
-b(or)37 b(example,)i(the)f(Equino)n(x)e(attribute,)k(de\014ned)d(b)n(y)
-g(the)h(SkyF)-7 b(rame)36 b(class,)j(is)227 1661 y(inherited)28
-b(b)n(y)f(an)n(y)g(Region)g(whic)n(h)h(represen)n(ts)e(a)h(SkyF)-7
-b(rame.\))-2 1815 y Fc(F)f(unctions)n(:)227 1961 y Fk(In)30
-b(addition)f(to)h(those)f(routines)g(applicable)g(to)g(all)g(F)-7
-b(rames,)29 b(the)h(follo)n(wing)f(routines)g(ma)n(y)f(also)h(b)r(e)h
-(applied)227 2061 y(to)e(all)f(Regions:)340 2329 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(GETREGIONBOUNDS:)28 b(Get)g(the)g(b)r(ounds)f(of)h
-(a)f(Region)340 2464 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETREGIONFRAME:)
-27 b(Get)h(a)g(cop)n(y)e(of)i(the)g(F)-7 b(rame)27 b(represen)n(t)f(b)n
-(y)i(a)f(Region)340 2599 y Fj(\017)45 b Fk(AST)p Ft(_)p
-Fk(GETREGIONPOINTS:)27 b(Get)h(the)g(p)r(ositions)f(that)h(de\014ne)f
-(a)h(Region)340 2734 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETUNC:)28
-b(Obtain)f(uncertain)n(t)n(y)g(information)g(from)g(a)g(Region)340
-2870 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(MAPREGION:)27
-b(T)-7 b(ransform)27 b(a)g(Region)g(in)n(to)g(a)g(new)h(co)r(ordinate)e
-(system)340 3005 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(NEGA)-7
-b(TE:)28 b(T)-7 b(oggle)26 b(the)i(v)-5 b(alue)27 b(of)h(the)g(Negated)
-f(attribute)340 3140 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(O)n(VERLAP:)27
-b(Determines)g(the)h(nature)g(of)f(the)h(o)n(v)n(erlap)e(b)r(et)n(w)n
-(een)h(t)n(w)n(o)g(Regions)340 3275 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(MASK)p Fm(<)p Fk(X)p Fm(>)p Fk(:)37 b(Mask)27
-b(a)g(region)f(of)i(a)f(data)g(grid)340 3410 y Fj(\017)45
-b Fk(AST)p Ft(_)p Fk(SETUNC:)28 b(Asso)r(ciate)f(a)g(new)h(uncertain)n
-(t)n(y)e(with)j(a)e(Region)340 3545 y Fj(\017)45 b Fk(AST)p
-Ft(_)p Fk(SHO)n(WMESH:)28 b(Displa)n(y)f(a)g(mesh)h(of)f(p)r(oin)n(ts)h
-(on)f(the)h(surface)f(of)h(a)f(Region)p 0 3749 3780 12
-v 0 3881 a FA(SelectorMap)298 b Fd(A)38 b(Mapping)g(that)g(lo)s(cates)g
-(p)s(ositions)889 3996 y(within)c(one)j(of)f(a)g(set)g(of)g(alternate)e
-(Regions)3043 3881 y FA(SelectorMap)0 4189 y Fc(Description:)44
-b Fk(A)26 b(SelectorMap)e(is)h(a)g(Mapping)g(that)h(iden)n(ti\014es)f
-(whic)n(h)g(Region)g(con)n(tains)f(a)h(giv)n(en)g(input)h(p)r(osition.)
-227 4316 y(A)40 b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g
-(of)g(Regions)f(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)
-g(of)g(axes)g(and)227 4416 y(represen)n(t)31 b(the)h(same)f(co)r
-(ordinate)g(F)-7 b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i
-(\(Nin)f(attribute\))h(of)e(the)i(SelectorMap)227 4515
-y(equals)24 b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g
-(one)g(of)h(the)f(encapsulated)g(Region.)35 b(All)25
-b(SelectorMaps)e(ha)n(v)n(e)g(only)227 4615 y(a)k(single)h(output.)37
-b(SelectorMaps)26 b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)227 4742 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r
-(osition,)h(the)e(forw)n(ard)e(transformation)h(of)h(a)f(SelectorMap)g
-(searc)n(hes)f(through)h(the)i(en-)227 4841 y(capsulated)d(Regions)f
-(\(in)i(the)g(order)e(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h
-(created\))f(un)n(til)i(a)f(Region)g(is)227 4941 y(found)27
-b(whic)n(h)g(con)n(tains)f(the)h(input)g(p)r(osition.)36
-b(The)27 b(index)g(asso)r(ciated)e(with)i(this)g(Region)f(is)h
-(returned)f(as)g(the)227 5041 y(SelectorMap)h(output)h(v)-5
-b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27 b(is)h(the)g(p)r(osition)f
-(of)h(the)f(Region)g(within)h(the)g(list)g(of)g(Regions)227
-5140 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g(created,)g
-(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 5240 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-5367 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 5467 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 5566 y(simpli\014ed)g(using)g
-(AST)p Ft(_)p Fk(SIMPLIFY.)227 5693 y(In)g(practice,)f(SelectorMaps)f
-(are)h(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)p
-eop end
-%%Page: 504 514
-TeXDict begin 504 513 bop 0 52 a FG(504)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fc(Constructor)j(F)-8
-b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(SELECTORMAP)-2
-600 y Fc(Inheritance)n(:)227 746 y Fk(The)28 b(SelectorMap)f(class)f
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 895 y Fc(A)m(ttributes)n
-(:)227 1041 y Fk(The)e(SelectorMap)f(class)g(do)r(es)h(not)g(de\014ne)g
-(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 1141 y(Mappings.)-2 1290 y
-Fc(F)-8 b(unctions)n(:)227 1436 y Fk(The)30 b(SelectorMap)e(class)g(do)
-r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(routines)g(b)r(ey)n(ond)g(those)
-f(whic)n(h)i(are)e(applicable)h(to)g(all)227 1535 y(Mappings.)p
-0 1734 3780 12 v 0 1865 a FA(ShiftMap)306 b Fd(Add)39
-b(a)f(constan)m(t)f(v)-7 b(alue)39 b(to)f(eac)m(h)g(co)s(ordinate)304
-b FA(ShiftMap)0 2053 y Fc(Description:)44 b Fk(A)28 b(ShiftMap)h(is)e
-(a)g(linear)g(Mapping)g(whic)n(h)h(shifts)g(eac)n(h)f(axis)g(b)n(y)g(a)
-g(sp)r(eci\014ed)h(constan)n(t)f(v)-5 b(alue.)0 2202
-y Fc(Constructor)32 b(F)-8 b(unction:)227 2302 y Fk(AST)p
-Ft(_)p Fk(SHIFTMAP)-2 2451 y Fc(Inheritance)n(:)227 2597
-y Fk(The)28 b(ShiftMap)g(class)f(inherits)g(from)h(the)g(Mapping)f
-(class.)-2 2746 y Fc(A)m(ttributes)n(:)227 2892 y Fk(The)33
-b(ShiftMap)g(class)f(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)h
-(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 2992 y(Mappings.)-2 3141 y Fc(F)-8 b(unctions)n(:)227
-3287 y Fk(The)37 b(ShiftMap)h(class)e(do)r(es)g(not)h(de\014ne)g(an)n
-(y)f(new)h(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)f
-(applicable)g(to)h(all)227 3387 y(Mappings.)p 0 3585
-V 0 3717 a FA(SkyAxis)619 b Fd(Store)38 b(celestial)e(axis)j
-(information)615 b FA(SkyAxis)0 3905 y Fc(Description:)44
-b Fk(The)c(SkyAxis)f(class)g(is)h(used)f(to)h(store)f(information)f
-(asso)r(ciated)h(with)h(a)f(particular)g(axis)f(of)i(a)227
-4004 y(SkyF)-7 b(rame.)43 b(It)30 b(is)g(used)g(in)n(ternally)f(b)n(y)g
-(the)h(AST)h(library)d(and)i(has)f(no)h(constructor)e(function.)44
-b(Y)-7 b(ou)30 b(should)227 4104 y(encoun)n(ter)d(it)h(only)f(within)i
-(textual)e(output)h(\(e.g.)37 b(from)27 b(AST)p Ft(_)p
-Fk(WRITE\).)0 4253 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4352 y Fk(None.)-2 4501 y Fc(Inheritance)n(:)227 4648
-y Fk(The)28 b(SkyAxis)f(class)g(inherits)g(from)h(the)g(Axis)f(class.)p
-0 4846 V 0 4978 a FA(SkyF)-11 b(rame)306 b Fd(Celestial)37
-b(co)s(ordinate)f(system)i(description)305 b FA(SkyF)-11
-b(rame)0 5170 y Fc(Description:)44 b Fk(A)35 b(SkyF)-7
-b(rame)34 b(is)g(a)g(sp)r(ecialised)g(form)g(of)h(F)-7
-b(rame)34 b(whic)n(h)g(describ)r(es)g(celestial)g(longitude/latitude)
-227 5270 y(co)r(ordinate)f(systems.)56 b(The)34 b(particular)f
-(celestial)g(co)r(ordinate)g(system)h(to)g(b)r(e)g(represen)n(ted)f(is)
-h(sp)r(eci\014ed)g(b)n(y)227 5369 y(setting)24 b(the)h(SkyF)-7
-b(rame's)23 b(System)h(attribute)g(\(curren)n(tly)-7
-b(,)24 b(the)g(default)h(is)e(ICRS\))i(quali\014ed,)g(as)e(necessary)-7
-b(,)23 b(b)n(y)227 5469 y(a)k(mean)h(Equino)n(x)e(v)-5
-b(alue)28 b(and/or)e(an)h(Ep)r(o)r(c)n(h.)227 5593 y(F)-7
-b(or)34 b(eac)n(h)g(of)g(the)h(supp)r(orted)g(celestial)f(co)r
-(ordinate)f(systems,)j(a)e(SkyF)-7 b(rame)34 b(can)g(apply)g(an)g
-(optional)g(shift)227 5693 y(of)c(origin)f(to)h(create)f(a)g(co)r
-(ordinate)g(system)h(represen)n(ting)e(o\013sets)i(within)g(the)h
-(celestial)e(co)r(ordinate)g(system)p eop end
-%%Page: 505 515
-TeXDict begin 505 514 bop 3643 52 a FG(505)227 351 y
-Fk(from)33 b(some)f(sp)r(eci\014ed)i(reference)e(p)r(oin)n(t.)53
-b(This)33 b(o\013set)g(co)r(ordinate)f(system)g(can)h(also)f(b)r(e)h
-(rotated)f(to)h(de\014ne)227 451 y(new)28 b(longitude)f(and)h(latitude)
-g(axes.)36 b(See)27 b(attributes)h(SkyRef,)g(SkyRefIs,)f(SkyRefP)h(and)
-f(AlignO\013set.)227 573 y(All)34 b(the)f(co)r(ordinate)f(v)-5
-b(alues)33 b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g
-(radians.)52 b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-673 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n(y)
-g(using)g(AST)p Ft(_)p Fk(F)n(ORMA)-7 b(T.)0 818 y Fc(Constructor)32
-b(F)-8 b(unction:)227 918 y Fk(AST)p Ft(_)p Fk(SKYFRAME)-2
-1064 y Fc(Inheritance)n(:)227 1210 y Fk(The)28 b(SkyF)-7
-b(rame)27 b(class)f(inherits)i(from)f(the)h(F)-7 b(rame)27
-b(class.)-2 1355 y Fc(A)m(ttributes)n(:)227 1501 y Fk(In)40
-b(addition)f(to)h(those)f(attributes)h(common)f(to)g(all)g(F)-7
-b(rames,)42 b(ev)n(ery)c(SkyF)-7 b(rame)39 b(also)g(has)g(the)h(follo)n
-(wing)227 1601 y(attributes:)340 1856 y Fj(\017)45 b
-Fk(AlignO\013set:)37 b(Align)28 b(SkyF)-7 b(rames)26
-b(using)i(the)g(o\013set)f(co)r(ordinate)g(system?)340
-1985 y Fj(\017)45 b Fk(AsTime\(axis\):)37 b(F)-7 b(ormat)27
-b(celestial)g(co)r(ordinates)f(as)h(times?)340 2113 y
-Fj(\017)45 b Fk(Equino)n(x:)36 b(Ep)r(o)r(c)n(h)27 b(of)h(the)g(mean)f
-(equino)n(x)340 2242 y Fj(\017)45 b Fk(LatAxis:)37 b(Index)27
-b(of)h(the)g(latitude)g(axis)340 2371 y Fj(\017)45 b
-Fk(LonAxis:)37 b(Index)27 b(of)h(the)g(longitude)f(axis)340
-2500 y Fj(\017)45 b Fk(NegLon:)36 b(Displa)n(y)28 b(longitude)f(v)-5
-b(alues)27 b(in)h(the)g(range)e([-pi,pi]?)340 2629 y
-Fj(\017)45 b Fk(Pro)5 b(jection:)36 b(Sky)27 b(pro)5
-b(jection)27 b(description.)340 2757 y Fj(\017)45 b Fk(SkyRef:)37
-b(P)n(osition)27 b(de\014ning)g(lo)r(cation)g(of)h(the)g(o\013set)f(co)
-r(ordinate)g(system)340 2886 y Fj(\017)45 b Fk(SkyRefIs:)37
-b(Selects)28 b(the)g(nature)f(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)340 3015 y Fj(\017)45 b Fk(SkyRefP:)28 b(P)n(osition)e
-(de\014ning)h(orien)n(tation)g(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)-2 3173 y Fc(F)-8 b(unctions)n(:)227 3319 y Fk(The)36
-b(SkyF)-7 b(rame)34 b(class)g(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(routines)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)227 3419 y(F)-7 b(rames.)p 0 3610 3780 12 v 0 3742
-a FA(SlaMap)328 b Fd(Sequence)39 b(of)g(celestial)e(co)s(ordinate)f
-(con)m(v)m(ersions)326 b FA(SlaMap)0 3922 y Fc(Description:)44
-b Fk(An)32 b(SlaMap)e(is)h(a)g(sp)r(ecialised)f(form)h(of)g(Mapping)f
-(whic)n(h)h(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)g(sequence)227
-4022 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g
-(celestial)g(\(longitude,)h(latitude\))g(co)r(ordinate)f(systems.)227
-4145 y(When)d(an)e(SlaMap)h(is)g(\014rst)f(created,)h(it)h(simply)f(p)r
-(erforms)f(a)g(unit)i(\(n)n(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r
-(ordinates.)227 4244 y(Using)39 b(the)g(AST)p Ft(_)p
-Fk(SLAADD)h(routine,)h(a)e(series)f(of)g(co)r(ordinate)g(con)n(v)n
-(ersion)e(steps)j(ma)n(y)f(then)h(b)r(e)h(added,)227
-4344 y(selected)34 b(from)f(those)h(pro)n(vided)e(b)n(y)i(the)g(SLALIB)
-g(P)n(ositional)e(Astronom)n(y)g(Library)h(\(Starlink)g(User)h(Note)227
-4443 y(SUN/67\).)44 b(This)30 b(allo)n(ws)e(m)n(ulti-step)i(con)n(v)n
-(ersions)e(b)r(et)n(w)n(een)i(a)f(v)-5 b(ariet)n(y)29
-b(of)h(celestial)g(co)r(ordinate)e(systems)i(to)227 4543
-y(b)r(e)e(assem)n(bled)f(out)h(of)f(the)h(building)g(blo)r(c)n(ks)f
-(pro)n(vided)f(b)n(y)i(SLALIB.)227 4666 y(F)-7 b(or)18
-b(details)g(of)g(the)h(individual)g(co)r(ordinate)e(con)n(v)n(ersions)f
-(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e(of)i(the)f(AST)p
-Ft(_)p Fk(SLAADD)227 4765 y(routine.)0 4911 y Fc(Constructor)32
-b(F)-8 b(unction:)227 5010 y Fk(AST)p Ft(_)p Fk(SLAMAP)28
-b(\(also)f(see)g(AST)p Ft(_)p Fk(SLAADD\))-2 5156 y Fc(Inheritance)n(:)
-227 5302 y Fk(The)h(SlaMap)f(class)g(inherits)g(from)g(the)h(Mapping)g
-(class.)-2 5447 y Fc(A)m(ttributes)n(:)227 5593 y Fk(The)37
-b(SlaMap)f(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 5693 y(Mappings.)p eop end
-%%Page: 506 516
-TeXDict begin 506 515 bop 0 52 a FG(506)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(F)-8 b(unctions)n(:)227
-497 y Fk(In)26 b(addition)f(to)h(those)f(routines)g(applicable)f(to)i
-(all)f(Mappings,)g(the)h(follo)n(wing)f(routine)g(ma)n(y)f(also)h(b)r
-(e)h(applied)227 597 y(to)i(all)f(SlaMaps:)340 853 y
-Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SLAADD:)29 b(Add)g(a)e(celestial)g(co)r
-(ordinate)f(con)n(v)n(ersion)f(to)j(an)f(SlaMap)p 0 1045
-3780 12 v 0 1177 a FA(Sp)t(ecFluxF)-11 b(rame)1228 1183
-y Fd(Comp)s(ound)37 b(sp)s(ectrum/\015ux)1730 1303 y(F)-10
-b(rame)2871 1177 y FA(Sp)t(ecFluxF)f(rame)0 1462 y Fc(Description:)44
-b Fk(A)35 b(Sp)r(ecFluxF)-7 b(rame)35 b(com)n(bines)f(a)g(Sp)r(ecF)-7
-b(rame)34 b(and)g(a)g(FluxF)-7 b(rame)35 b(in)n(to)f(a)g(single)g
-(2-dimensional)227 1562 y(comp)r(ound)24 b(F)-7 b(rame.)34
-b(Suc)n(h)24 b(a)f(F)-7 b(rame)22 b(can)h(for)g(instance)g(b)r(e)h
-(used)f(to)g(describ)r(e)g(a)g(Plot)g(of)g(a)g(sp)r(ectrum)g(in)h(whic)
-n(h)227 1661 y(the)k(\014rst)g(axis)e(represen)n(ts)h(sp)r(ectral)g(p)r
-(osition)g(and)g(the)h(second)f(axis)g(represen)n(ts)f(\015ux.)0
-1807 y Fc(Constructor)32 b(F)-8 b(unction:)227 1907 y
-Fk(AST)p Ft(_)p Fk(SPECFLUXFRAME)-2 2053 y Fc(Inheritance)n(:)227
-2199 y Fk(The)28 b(Sp)r(ecFluxF)-7 b(rame)28 b(class)e(inherits)i(from)
-f(the)h(CmpF)-7 b(rame)27 b(class.)-2 2345 y Fc(A)m(ttributes)n(:)227
-2491 y Fk(The)e(Sp)r(ecFluxF)-7 b(rame)25 b(class)f(do)r(es)h(not)g
-(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(applicable)h(to)227 2591 y(all)i(CmpF)-7 b(rames.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)j(attributes)g(of)f(the)h(comp)r(onen)n(t)
-g(F)-7 b(rames)25 b(can)i(b)r(e)f(accessed)g(as)g(if)h(they)g(w)n(ere)
-227 2690 y(attributes)d(of)f(the)h(Sp)r(ecFluxF)-7 b(rame.)36
-b(F)-7 b(or)23 b(instance,)h(the)g(Sp)r(ecFluxF)-7 b(rame)23
-b(will)h(recognise)e(the)i Ft(")p Fk(StdOfRest)p Ft(")227
-2790 y Fk(attribute)k(and)g(forw)n(ard)e(access)g(requests)h(to)g(the)h
-(comp)r(onen)n(t)g(Sp)r(ecF)-7 b(rame.)36 b(An)29 b(axis)d(index)i(can)
-f(optionally)227 2890 y(b)r(e)32 b(app)r(ended)f(to)g(the)h(end)f(of)g
-(an)n(y)f(attribute)i(name,)f(in)h(whic)n(h)f(case)f(the)i(request)e
-(to)h(access)f(the)h(attribute)227 2989 y(will)d(b)r(e)g(forw)n(arded)e
-(to)h(the)h(primary)f(F)-7 b(rame)27 b(de\014ning)h(the)g(sp)r
-(eci\014ed)f(axis.)-2 3135 y Fc(F)-8 b(unctions)n(:)227
-3281 y Fk(The)30 b(Sp)r(ecFluxF)-7 b(rame)30 b(class)e(do)r(es)h(not)h
-(de\014ne)g(an)n(y)f(new)g(routines)g(b)r(ey)n(ond)g(those)h(whic)n(h)f
-(are)g(applicable)g(to)227 3381 y(all)f(CmpF)-7 b(rames.)p
-0 3573 V 0 3704 a FA(Sp)t(ecF)c(rame)899 3705 y Fd(Sp)s(ectral)37
-b(co)s(ordinate)g(system)h(description)3138 3704 y FA(Sp)t(ecF)-11
-b(rame)0 3887 y Fc(Description:)44 b Fk(A)38 b(Sp)r(ecF)-7
-b(rame)38 b(is)g(a)f(sp)r(ecialised)g(form)h(of)f(one-dimensional)g(F)
--7 b(rame)37 b(whic)n(h)h(represen)n(ts)e(v)-5 b(arious)227
-3987 y(co)r(ordinate)22 b(systems)h(used)h(to)f(describ)r(e)g(p)r
-(ositions)g(within)h(an)f(electro-magnetic)f(sp)r(ectrum.)35
-b(The)24 b(particular)227 4086 y(co)r(ordinate)h(system)g(to)g(b)r(e)h
-(used)f(is)h(sp)r(eci\014ed)f(b)n(y)h(setting)f(the)h(Sp)r(ecF)-7
-b(rame's)25 b(System)g(attribute)h(\(the)g(default)227
-4186 y(is)i(w)n(a)n(v)n(elength\))e(quali\014ed,)h(as)g(necessary)-7
-b(,)26 b(b)n(y)i(other)f(attributes)g(suc)n(h)g(as)g(the)h(rest)f
-(frequency)-7 b(,)28 b(the)g(standard)227 4285 y(of)c(rest,)g(the)g(ep)
-r(o)r(c)n(h)f(of)h(observ)-5 b(ation,)23 b(units,)i(etc)f(\(see)f(the)h
-(description)f(of)h(the)g(System)g(attribute)f(for)g(details\).)227
-4408 y(By)h(setting)f(a)h(v)-5 b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h
-(attribute,)g(a)g(Sp)r(ecF)-7 b(rame)23 b(can)h(b)r(e)g(made)f(to)h
-(represen)n(t)e(o\013sets)i(from)227 4508 y(a)j(giv)n(en)g(sp)r(ectral)
-g(p)r(osition,)h(rather)e(than)i(absolute)f(sp)r(ectral)g(v)-5
-b(alues.)0 4654 y Fc(Constructor)32 b(F)-8 b(unction:)227
-4753 y Fk(AST)p Ft(_)p Fk(SPECFRAME)-2 4899 y Fc(Inheritance)n(:)227
-5046 y Fk(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 5192 y Fc(A)m(ttributes)n(:)227
-5338 y Fk(In)38 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(F)-7 b(rames,)39 b(ev)n(ery)d(Sp)r(ecF)-7 b(rame)37
-b(also)f(has)g(the)i(follo)n(wing)227 5437 y(attributes:)340
-5693 y Fj(\017)45 b Fk(AlignSp)r(ecO\013set:)38 b(Align)27
-b(Sp)r(ecF)-7 b(rames)27 b(using)h(the)g(o\013set)f(co)r(ordinate)g
-(system?)p eop end
-%%Page: 507 517
-TeXDict begin 507 516 bop 3643 52 a FG(507)340 351 y
-Fj(\017)45 b Fk(AlignStdOfRest:)38 b(Standard)27 b(of)g(rest)g(in)h
-(whic)n(h)g(to)f(align)g(Sp)r(ecF)-7 b(rames)340 479
-y Fj(\017)45 b Fk(RefDec:)38 b(Declination)27 b(of)h(the)g(source)e
-(\(FK5)i(J2000\))340 608 y Fj(\017)45 b Fk(RefRA:)29
-b(Righ)n(t)e(ascension)g(of)g(the)h(source)e(\(FK5)i(J2000\))340
-736 y Fj(\017)45 b Fk(RestF)-7 b(req:)37 b(Rest)28 b(frequency)340
-864 y Fj(\017)45 b Fk(SourceSys:)36 b(Source)27 b(v)n(elo)r(cit)n(y)f
-(sp)r(ectral)h(system)340 992 y Fj(\017)45 b Fk(SourceV)-7
-b(el:)37 b(Source)26 b(v)n(elo)r(cit)n(y)340 1120 y Fj(\017)45
-b Fk(SourceVRF:)28 b(Source)e(v)n(elo)r(cit)n(y)h(rest)g(frame)340
-1248 y Fj(\017)45 b Fk(Sp)r(ecOrigin:)36 b(The)28 b(zero)f(p)r(oin)n(t)
-g(for)g(Sp)r(ecF)-7 b(rame)28 b(axis)f(v)-5 b(alues)340
-1376 y Fj(\017)45 b Fk(StdOfRest:)38 b(Standard)27 b(of)g(rest)227
-1533 y(Sev)n(eral)35 b(of)h(the)g(F)-7 b(rame)35 b(attributes)h
-(inherited)g(b)n(y)g(the)g(Sp)r(ecF)-7 b(rame)36 b(class)f(refer)g(to)h
-(a)f(sp)r(eci\014c)h(axis)f(of)h(the)227 1633 y(F)-7
-b(rame)25 b(\(for)g(instance)f(Unit\(axis\),)j(Lab)r(el\(axis\),)e
-(etc\).)36 b(Since)26 b(a)e(Sp)r(ecF)-7 b(rame)25 b(is)g(strictly)g
-(one-dimensional,)f(it)227 1733 y(allo)n(ws)i(these)h(attributes)h(to)f
-(b)r(e)h(sp)r(eci\014ed)f(without)h(an)f(axis)f(index.)37
-b(So)27 b(for)g(instance,)g Ft(")p Fk(Unit)p Ft(")g Fk(is)g(allo)n(w)n
-(ed)f(in)227 1832 y(place)h(of)h Ft(")p Fk(Unit\(1\))p
-Ft(")p Fk(.)-2 1977 y Fc(F)-8 b(unctions)n(:)227 2123
-y Fk(In)30 b(addition)f(to)h(those)f(routines)g(applicable)g(to)g(all)g
-(F)-7 b(rames,)29 b(the)h(follo)n(wing)f(routines)g(ma)n(y)f(also)h(b)r
-(e)h(applied)227 2223 y(to)e(all)f(Sp)r(ecF)-7 b(rames:)340
-2477 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SETREFPOS:)27
-b(Set)h(reference)e(p)r(osition)i(in)f(an)n(y)g(celestial)g(system)340
-2605 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETREFPOS:)27
-b(Get)h(reference)e(p)r(osition)i(in)g(an)n(y)e(celestial)h(system)p
-0 2795 3780 12 v 0 2925 a FA(Sp)t(ecMap)775 2926 y Fd(Sequence)39
-b(of)f(sp)s(ectral)g(co)s(ordinate)f(con)m(v)m(ersions)3238
-2925 y FA(Sp)t(ecMap)0 3106 y Fc(Description:)44 b Fk(A)31
-b(Sp)r(ecMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g(whic)n
-(h)g(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)h(sequence)227
-3205 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g(sp)r
-(ectral)g(co)r(ordinate)f(systems.)227 3328 y(When)19
-b(an)f(Sp)r(ecMap)h(is)f(\014rst)g(created,)i(it)e(simply)h(p)r
-(erforms)f(a)g(unit)h(\(n)n(ull\))g(Mapping.)33 b(Using)18
-b(the)h(AST)p Ft(_)p Fk(SPECADD)227 3427 y(routine,)35
-b(a)e(series)f(of)h(co)r(ordinate)f(con)n(v)n(ersion)f(steps)i(ma)n(y)g
-(then)h(b)r(e)g(added.)54 b(This)33 b(allo)n(ws)f(m)n(ulti-step)h(con-)
-227 3527 y(v)n(ersions)27 b(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)28 b(of)g(sp)r(ectral)g(co)r(ordinate)g(systems)g(to)g(b)r
-(e)h(assem)n(bled)e(out)i(of)f(a)g(set)h(of)f(building)227
-3626 y(blo)r(c)n(ks.)227 3749 y(Con)n(v)n(ersions)f(are)g(a)n(v)-5
-b(ailable)28 b(to)h(transform)e(b)r(et)n(w)n(een)i(standards)f(of)h
-(rest.)40 b(Suc)n(h)29 b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)227
-3848 y(the)23 b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f
-(This)h(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 3948 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 4047
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 4147 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-4247 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 4346 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-4446 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 4546 y(for)24 b(axes)f(2)h(and)g(3)f(from)h(input)h
-(to)f(output\),)i(but)e(mo)r(di\014es)h(axis)e(1)h(v)-5
-b(alues)23 b(\(the)i(sp)r(ectral)f(axis\))f(appropriately)-7
-b(.)227 4668 y(F)g(or)18 b(details)g(of)g(the)h(individual)g(co)r
-(ordinate)e(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)19
-b(see)f(the)h(description)e(of)i(the)f(AST)p Ft(_)p Fk(SPECADD)227
-4767 y(routine.)0 4912 y Fc(Constructor)32 b(F)-8 b(unction:)227
-5012 y Fk(AST)p Ft(_)p Fk(SPECMAP)27 b(\(also)g(see)g(AST)p
-Ft(_)p Fk(SPECADD\))-2 5156 y Fc(Inheritance)n(:)227
-5303 y Fk(The)h(Sp)r(ecMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 5447 y Fc(A)m(ttributes)n(:)227 5593 y Fk(The)33
-b(Sp)r(ecMap)g(class)f(do)r(es)h(not)f(de\014ne)i(an)n(y)e(new)g
-(attributes)h(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)h
-(all)227 5693 y(Mappings.)p eop end
-%%Page: 508 518
-TeXDict begin 508 517 bop 0 52 a FG(508)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(F)-8 b(unctions)n(:)227
-497 y Fk(In)26 b(addition)f(to)h(those)f(routines)g(applicable)f(to)i
-(all)f(Mappings,)g(the)h(follo)n(wing)f(routine)g(ma)n(y)f(also)h(b)r
-(e)h(applied)227 597 y(to)i(all)f(Sp)r(ecMaps:)340 857
-y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(SPECADD:)28 b(Add)g(a)g(sp)r(ectral)f
-(co)r(ordinate)f(con)n(v)n(ersion)f(to)j(an)f(Sp)r(ecMap)p
-0 1056 3780 12 v 0 1187 a FA(SphMap)189 b Fd(Map)39 b(3-d)g(Cartesian)d
-(to)i(2-d)h(spherical)e(co)s(ordinates)189 b FA(SphMap)0
-1375 y Fc(Description:)44 b Fk(A)33 b(SphMap)g(is)f(a)g(Mapping)g(whic)
-n(h)g(transforms)f(p)r(oin)n(ts)h(from)g(a)g(3-dimensional)f(Cartesian)
-g(co)r(or-)227 1475 y(dinate)f(system)g(in)n(to)g(a)f(2-dimensional)g
-(spherical)f(co)r(ordinate)h(system)h(\(longitude)g(and)g(latitude)g
-(on)f(a)h(unit)227 1575 y(sphere)e(cen)n(tred)f(at)h(the)g(origin\).)37
-b(It)28 b(w)n(orks)f(b)n(y)g(regarding)f(the)i(input)h(co)r(ordinates)d
-(as)i(p)r(osition)f(v)n(ectors)g(and)227 1674 y(\014nding)38
-b(their)f(in)n(tersection)g(with)h(the)g(sphere)f(surface.)66
-b(The)38 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)f(pro)r(duces)
-227 1774 y(p)r(oin)n(ts)28 b(whic)n(h)f(are)g(a)g(unit)h(distance)g
-(from)f(the)h(origin)e(\(i.e.)38 b(unit)28 b(v)n(ectors\).)0
-1923 y Fc(Constructor)k(F)-8 b(unction:)227 2022 y Fk(AST)p
-Ft(_)p Fk(SPHMAP)-2 2171 y Fc(Inheritance)n(:)227 2318
-y Fk(The)28 b(SphMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 2467 y Fc(A)m(ttributes)n(:)227 2613 y Fk(In)38
-b(addition)f(to)g(those)g(attributes)g(common)f(to)h(all)g(Mappings,)i
-(ev)n(ery)d(SphMap)h(also)f(has)h(the)h(follo)n(wing)227
-2712 y(attributes:)340 2973 y Fj(\017)45 b Fk(UnitRadius:)38
-b(SphMap)27 b(input)i(v)n(ectors)d(lie)i(on)f(a)g(unit)h(sphere?)340
-3105 y Fj(\017)45 b Fk(P)n(olarLong:)34 b(The)28 b(longitude)f(v)-5
-b(alue)28 b(to)f(assign)f(to)i(either)f(p)r(ole)-2 3266
-y Fc(F)-8 b(unctions)n(:)227 3413 y Fk(The)39 b(SphMap)h(class)e(do)r
-(es)h(not)g(de\014ne)g(an)n(y)g(new)g(routines)f(b)r(ey)n(ond)h(those)g
-(whic)n(h)g(are)f(applicable)h(to)g(all)227 3512 y(Mappings.)p
-0 3711 V 0 3841 a FA(Stc)692 3842 y Fd(Represen)m(ts)g(an)f(instance)g
-(of)h(the)f(IV)m(O)m(A)h(STC)f(class)3593 3841 y FA(Stc)0
-4030 y Fc(Description:)44 b Fk(The)26 b(Stc)f(class)f(is)h(an)g
-(implemen)n(tation)g(of)g(the)h(IV)n(O)n(A)f(STC)g(class)f(whic)n(h)h
-(forms)g(part)f(of)i(the)f(IV)n(O)n(A)227 4130 y(Space-Time)i(Co)r
-(ordinate)g(Metadata)g(system.)36 b(See:)227 4254 y(h)n
-(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(ometa/)o
-(STC.h)n(tml)227 4378 y(The)36 b(Stc)g(class)e(do)r(es)i(not)f(ha)n(v)n
-(e)g(a)g(constructor)f(function)i(of)f(its)h(o)n(wn,)h(as)e(it)h(is)g
-(simply)f(a)g(con)n(tainer)g(class)227 4478 y(for)25
-b(a)f(family)i(of)f(sp)r(ecialised)f(sub-classes)g(including)h
-(StcCatalogEn)n(tryLo)r(cation,)d(StcResourcePro\014le,)i(Stc-)227
-4578 y(Searc)n(hLo)r(cation)i(and)h(StcObsDataLo)r(cation.)0
-4727 y Fc(Constructor)32 b(F)-8 b(unction:)227 4826 y
-Fk(AST)p Ft(_)p Fk(STC)-2 4975 y Fc(Inheritance)n(:)227
-5121 y Fk(The)28 b(Stc)g(class)f(inherits)g(from)g(the)h(Region)f
-(class.)-2 5270 y Fc(A)m(ttributes)n(:)227 5417 y Fk(In)g(addition)g
-(to)f(those)h(attributes)f(common)h(to)f(all)h(Regions,)f(ev)n(ery)f
-(Stc)i(also)f(has)g(the)h(follo)n(wing)f(attributes:)340
-5677 y Fj(\017)45 b Fk(RegionClass:)35 b(The)28 b(class)f(name)g(of)h
-(the)g(encapsulated)f(Region.)p eop end
-%%Page: 509 519
-TeXDict begin 509 518 bop 3643 52 a FG(509)-2 351 y Fc(F)-8
-b(unctions)n(:)227 497 y Fk(In)28 b(addition)g(to)g(those)g(routines)f
-(applicable)h(to)f(all)h(Regions,)f(the)i(follo)n(wing)e(routines)g(ma)
-n(y)g(also)g(b)r(e)i(applied)227 597 y(to)f(all)f(Stc's:)340
-854 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETSTCREGION:)27
-b(Get)h(a)f(p)r(oin)n(ter)h(to)f(the)h(encapsulated)f(Region)340
-984 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETSTCCOORD:)27
-b(Get)h(information)f(ab)r(out)h(an)f(AstroCo)r(ords)f(elemen)n(t)340
-1115 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(GETSTCNCOORD:)28
-b(Returns)f(the)h(n)n(um)n(b)r(er)f(of)h(AstroCo)r(ords)e(elemen)n(ts)h
-(in)h(an)f(Stc)p 0 1309 3780 12 v 0 1441 a FA(StcCatalogEn)l(tryLo)t
-(cation)1637 1457 y Fd(Corresp)s(ond)1737 1572 y(to)38
-b(the)1739 1671 y(IV)m(O)m(A)1659 1771 y(STCCat-)1694
-1871 y(alogEn-)1671 1984 y(tryLo)s(ca-)1789 2095 y(tion)1772
-2195 y(class)2295 1441 y FA(StcCatalogEn)l(tryLo)t(cation)0
-2355 y Fc(Description:)44 b Fk(The)29 b(StcCatalogEn)n(tryLo)r(cation)d
-(class)i(is)h(a)f(sub-class)g(of)h(Stc)g(used)g(to)g(describ)r(e)f(the)
-i(co)n(v)n(erage)c(of)227 2455 y(the)i(datasets)f(con)n(tained)g(in)h
-(some)f(V)n(O)g(resource.)227 2578 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2725 y Fc(Constructor)32 b(F)-8 b(unction:)227 2825 y
-Fk(AST)p Ft(_)p Fk(STCCA)h(T)g(ALOGENTR)g(YLOCA)g(TION)-2
-2971 y Fc(Inheritance)n(:)227 3118 y Fk(The)28 b(StcCatalogEn)n(tryLo)r
-(cation)c(class)j(inherits)g(from)h(the)g(Stc)g(class.)-2
-3264 y Fc(A)m(ttributes)n(:)227 3411 y Fk(The)36 b(StcCatalogEn)n
-(tryLo)r(cation)c(class)j(do)r(es)h(not)f(de\014ne)h(an)n(y)f(new)h
-(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)227
-3510 y(applicable)27 b(to)h(all)f(Stcs.)-2 3657 y Fc(F)-8
-b(unctions)n(:)227 3803 y Fk(The)41 b(StcCatalogEn)n(tryLo)r(cation)d
-(class)i(do)r(es)h(not)g(de\014ne)g(an)n(y)g(new)g(routines)f(b)r(ey)n
-(ond)h(those)g(whic)n(h)g(are)227 3903 y(applicable)27
-b(to)h(all)f(Stcs.)p 0 4097 V 0 4229 a FA(StcObsDataLo)t(cation)214
-b Fd(Corresp)s(ond)37 b(to)h(the)1739 4342 y(IV)m(O)m(A)1439
-4442 y(ObsDataLo)s(cation)1772 4541 y(class)2569 4229
-y FA(StcObsDataLo)t(cation)0 4702 y Fc(Description:)44
-b Fk(The)27 b(StcObsDataLo)r(cation)e(class)g(is)i(a)f(sub-class)f(of)h
-(Stc)h(used)f(to)g(describ)r(e)g(the)h(co)r(ordinate)e(space)227
-4801 y(o)r(ccupied)j(b)n(y)f(a)g(particular)g(observ)-5
-b(ational)25 b(dataset.)227 4925 y(See)j(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)227
-5048 y(An)29 b(STC)f(ObsDataLo)r(cation)f(elemen)n(t)h(sp)r(eci\014es)g
-(the)h(exten)n(t)f(of)g(the)g(observ)-5 b(ation)27 b(within)i(a)f(sp)r
-(eci\014ed)g(co)r(or-)227 5148 y(dinate)g(system,)f(and)h(also)e(sp)r
-(eci\014es)i(the)g(observ)-5 b(atory)25 b(lo)r(cation)i(within)h(a)g
-(second)e(co)r(ordinate)h(system.)227 5271 y(The)i(AST)g(StcObsDataLo)r
-(cation)f(class)g(inherits)g(from)h(Stc,)g(and)g(therefore)f(an)h
-(StcObsDataLo)r(cation)e(can)227 5370 y(b)r(e)f(used)g(directly)f(as)f
-(an)i(Stc.)36 b(When)26 b(used)g(in)f(this)h(w)n(a)n(y)-7
-b(,)25 b(the)h(StcObsDataLo)r(cation)e(describ)r(es)g(the)i(lo)r
-(cation)227 5470 y(of)i(the)g(observ)-5 b(ation)26 b(\(not)i(the)g
-(observ)-5 b(atory\).)227 5593 y(Ev)n(en)n(tually)e(,)27
-b(this)g(class)g(will)h(ha)n(v)n(e)e(a)h(metho)r(d)h(for)f(returning)g
-(an)g(Stc)h(describing)e(the)i(observ)-5 b(atory)25 b(lo)r(cation.)227
-5693 y(Ho)n(w)n(ev)n(er,)32 b(AST)i(curren)n(tly)e(do)r(es)g(not)h
-(include)g(an)n(y)f(classes)g(of)g(F)-7 b(rame)33 b(for)f(describing)g
-(terrestrial)f(or)h(solar)p eop end
-%%Page: 510 520
-TeXDict begin 510 519 bop 0 52 a FG(510)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(system)h(p)r(ositions.)44
-b(Therefore,)29 b(the)h(pro)n(vision)f(for)g(returning)g(observ)-5
-b(atory)28 b(lo)r(cation)i(as)f(an)h(Stc)g(is)g(not)g(y)n(et)227
-451 y(a)n(v)-5 b(ailable.)34 b(Ho)n(w)n(ev)n(er,)21 b(for)g
-(terrestrial)g(observ)-5 b(ations,)21 b(the)h(p)r(osition)g(of)g(the)g
-(observ)-5 b(atory)19 b(can)j(still)g(b)r(e)g(recorded)227
-551 y(using)33 b(the)g(ObsLon)f(and)g(ObsLat)g(attributes)h(of)g(the)g
-(F)-7 b(rame)32 b(encapsulated)g(within)i(the)f(Stc)g(represen)n(ting)
-227 650 y(the)28 b(observ)-5 b(ation)26 b(lo)r(cation)h(\(this)i
-(assumes)d(the)i(observ)-5 b(atory)25 b(is)j(lo)r(cated)f(at)h(sea)f
-(lev)n(el\).)0 810 y Fc(Constructor)32 b(F)-8 b(unction:)227
-910 y Fk(AST)p Ft(_)p Fk(STCOBSD)n(A)h(T)g(ALOCA)g(TION)-2
-1070 y Fc(Inheritance)n(:)227 1216 y Fk(The)28 b(StcObsDataLo)r(cation)
-e(class)h(inherits)g(from)h(the)g(Stc)g(class.)-2 1376
-y Fc(A)m(ttributes)n(:)227 1522 y Fk(The)i(StcObsDataLo)r(cation)f
-(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)
-n(ond)g(those)f(whic)n(h)h(are)f(appli-)227 1621 y(cable)e(to)h(all)f
-(Stcs.)-2 1781 y Fc(F)-8 b(unctions)n(:)227 1928 y Fk(The)23
-b(StcObsDataLo)r(cation)f(class)f(do)r(es)i(not)g(de\014ne)g(an)n(y)f
-(new)h(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g(applicable)
-227 2027 y(to)28 b(all)f(Stcs.)p 0 2237 3780 12 v 0 2369
-a FA(StcResourcePro\014le)153 b Fd(Corresp)s(ond)33 b(to)g(the)h(IV)m
-(O)m(A)1377 2483 y(STCResourcePro\014le)1772 2583 y(class)2672
-2369 y FA(StcResourcePro\014le)0 2759 y Fc(Description:)44
-b Fk(The)37 b(StcResourcePro\014le)d(class)h(is)h(a)g(sub-class)e(of)j
-(Stc)f(used)g(to)g(describ)r(e)g(the)h(co)n(v)n(erage)c(of)j(the)227
-2859 y(datasets)27 b(con)n(tained)g(in)h(some)f(V)n(O)g(resource.)227
-2988 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fj(\030)p
-Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 3148 y Fc(Constructor)32
-b(F)-8 b(unction:)227 3248 y Fk(AST)p Ft(_)p Fk(STCRESOUR)n(CEPR)n
-(OFILE)-2 3408 y Fc(Inheritance)n(:)227 3554 y Fk(The)28
-b(StcResourcePro\014le)d(class)i(inherits)g(from)h(the)g(Stc)g(class.)
--2 3714 y Fc(A)m(ttributes)n(:)227 3860 y Fk(The)c
-(StcResourcePro\014le)e(class)h(do)r(es)g(not)h(de\014ne)g(an)n(y)f
-(new)h(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)
-227 3960 y(to)28 b(all)f(Stcs.)-2 4120 y Fc(F)-8 b(unctions)n(:)227
-4266 y Fk(The)29 b(StcResourcePro\014le)e(class)g(do)r(es)i(not)g
-(de\014ne)g(an)n(y)f(new)h(routines)f(b)r(ey)n(ond)g(those)h(whic)n(h)f
-(are)g(applicable)227 4365 y(to)g(all)f(Stcs.)p 0 4575
-V 0 4707 a FA(StcSearc)l(hLo)t(cation)170 b Fd(Corresp)s(ond)37
-b(to)h(the)h(IV)m(O)m(A)1362 4821 y(Searc)m(hLo)s(cation)d(class)2697
-4707 y FA(StcSearc)l(hLo)t(cation)0 4998 y Fc(Description:)44
-b Fk(The)25 b(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)f(sub-class)f
-(of)h(Stc)h(used)g(to)f(describ)r(e)g(the)h(co)n(v)n(erage)d(of)i(a)g
-(query)-7 b(.)227 5127 y(See)28 b(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fj(\030)p Fk(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-5287 y Fc(Constructor)32 b(F)-8 b(unction:)227 5387 y
-Fk(AST)p Ft(_)p Fk(STCSEAR)n(CHLOCA)h(TION)-2 5547 y
-Fc(Inheritance)n(:)227 5693 y Fk(The)28 b(StcSearc)n(hLo)r(cation)e
-(class)g(inherits)i(from)f(the)h(Stc)g(class.)p eop end
-%%Page: 511 521
-TeXDict begin 511 520 bop 3643 52 a FG(511)-2 351 y Fc(A)m(ttributes)n
-(:)227 497 y Fk(The)25 b(StcSearc)n(hLo)r(cation)d(class)i(do)r(es)g
-(not)g(de\014ne)g(an)n(y)g(new)g(attributes)h(b)r(ey)n(ond)f(those)g
-(whic)n(h)g(are)f(applicable)227 597 y(to)28 b(all)f(Stcs.)-2
-745 y Fc(F)-8 b(unctions)n(:)227 891 y Fk(The)30 b(StcSearc)n(hLo)r
-(cation)d(class)h(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(routines)g
-(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)227
-991 y(to)g(all)f(Stcs.)p 0 1188 3780 12 v 0 1319 a FA(StcsChan)897
-1326 y Fd(I/O)39 b(Channel)f(using)g(STC-S)g(to)h(represen)m(t)1693
-1447 y(Ob)7 b(jects)3228 1319 y FA(StcsChan)0 1638 y
-Fc(Description:)44 b Fk(A)24 b(StcsChan)f(is)h(a)f(sp)r(ecialised)g
-(form)g(of)g(Channel)g(whic)n(h)h(supp)r(orts)f(STC-S)g(I/O)f(op)r
-(erations.)35 b(W)-7 b(rit-)227 1738 y(ing)35 b(an)g(Ob)5
-b(ject)34 b(to)h(an)g(StcsChan)g(\(using)g(AST)p Ft(_)p
-Fk(WRITE\))g(will,)i(if)e(the)h(Ob)5 b(ject)35 b(is)f(suitable,)j
-(generate)d(an)227 1837 y(STC-S)e(description)f(of)h(that)g(Ob)5
-b(ject,)33 b(and)f(reading)f(from)g(an)h(StcsChan)g(will)g(create)f(a)g
-(new)h(Ob)5 b(ject)32 b(from)227 1937 y(its)c(STC-S)g(description.)227
-2061 y(When)37 b(an)e(STC-S)h(description)f(is)h(read)f(using)h(AST)p
-Ft(_)p Fk(READ,)g(the)g(returned)g(AST)g(Ob)5 b(ject)36
-b(ma)n(y)f(b)r(e)h(1\))g(a)227 2160 y(P)n(oin)n(tList)e(describing)g
-(the)h(STC)g(AstroCo)r(ords)e(\(i.e.)59 b(a)34 b(single)g(p)r(oin)n(t)h
-(of)g(in)n(terest)f(within)i(the)f(co)r(ordinate)227
-2260 y(frame)e(describ)r(ed)g(b)n(y)g(the)h(STC-S)f(description\),)i
-(or)d(2\))i(a)f(Region)f(describing)h(the)g(STC)h(AstrCo)r(ordsArea)227
-2360 y(\(i.e.)i(an)21 b(area)f(or)g(v)n(olume)h(of)h(in)n(terest)f
-(within)h(the)g(co)r(ordinate)e(frame)h(describ)r(ed)g(b)n(y)h(the)f
-(STC-S)h(description\),)227 2459 y(or)d(3\))g(a)f(KeyMap)h(con)n
-(taining)f(the)h(unin)n(terpreted)g(prop)r(ert)n(y)f(v)-5
-b(alues)19 b(read)g(form)f(the)i(STC-S)f(description,)h(or)f(4\))227
-2559 y(a)26 b(KeyMap)f(con)n(taining)g(an)n(y)g(com)n(bination)g(of)h
-(the)h(\014rst)f(3)f(options.)36 b(The)26 b(attributes)g(StcsArea,)g
-(StcsCo)r(ords)227 2659 y(and)i(StcsProps)e(con)n(trol)g(whic)n(h)i(of)
-f(the)h(ab)r(o)n(v)n(e)e(is)i(returned)f(b)n(y)g(AST)p
-Ft(_)p Fk(READ.)227 2782 y(When)h(an)e(STC-S)h(description)f(is)g
-(created)g(from)h(an)f(AST)h(Ob)5 b(ject)27 b(using)f(AST)p
-Ft(_)p Fk(WRITE,)h(the)g(AST)g(Ob)5 b(ject)227 2882 y(m)n(ust)21
-b(b)r(e)g(either)g(a)f(Region)g(or)g(a)h(KeyMap.)33 b(If)22
-b(it)f(is)g(a)f(Region,)h(it)h(is)e(assumed)g(to)h(de\014ne)g(the)g
-(AstroCo)r(ordsArea)227 2982 y(or)g(\(if)i(the)g(Region)e(is)h(a)g
-(single)f(p)r(oin)n(t\))i(the)f(AstroCo)r(ords)e(to)i(write)g(to)g(the)
-g(STC-S)g(description.)35 b(If)22 b(the)h(Ob)5 b(ject)227
-3081 y(is)24 b(a)f(KeyMap,)h(it)g(ma)n(y)f(con)n(tain)h(an)f(en)n(try)g
-(with)i(the)f(k)n(ey)f Ft(")p Fk(AREA)p Ft(")p Fk(,)h(holding)f(a)h
-(Region)f(to)h(b)r(e)g(used)g(to)f(de\014ne)227 3181
-y(the)i(AstroCo)r(ordsArea.)34 b(It)25 b(ma)n(y)f(also)g(con)n(tain)g
-(an)g(en)n(try)h(with)g(the)g(k)n(ey)f Ft(")p Fk(COORDS)p
-Ft(")p Fk(,)h(holding)f(a)h(Region)f(\(a)227 3281 y(P)n(oin)n(tList\))g
-(to)g(b)r(e)h(used)g(to)f(create)g(the)h(AstroCo)r(ords.)34
-b(It)25 b(ma)n(y)e(also)h(con)n(tain)g(an)g(en)n(try)g(with)h(k)n(ey)f
-Ft(")p Fk(PR)n(OPS)p Ft(")p Fk(,)227 3380 y(holding)d(a)f(KeyMap)g
-(that)h(con)n(tains)f(unin)n(terpreted)g(prop)r(ert)n(y)g(v)-5
-b(alues)21 b(to)f(b)r(e)h(used)g(as)f(defaults)h(for)g(an)n(y)f(STC-S)
-227 3480 y(prop)r(erties)k(that)g(are)f(not)h(determined)h(b)n(y)f(the)
-g(other)g(supplied)g(Regions.)35 b(In)24 b(addition,)h(a)f(KeyMap)f
-(supplied)227 3579 y(to)29 b(AST)p Ft(_)p Fk(WRITE)f(ma)n(y)g(itself)h
-(hold)f(the)h(default)g(STC-S)f(prop)r(erties)g(\(rather)g(than)g
-(defaults)h(b)r(eing)g(held)f(in)227 3679 y(a)f(secondary)f(KeyMap,)h
-(stored)g(as)g(the)h Ft(")p Fk(PR)n(OPS)p Ft(")d Fk(en)n(try)i(in)h
-(the)g(supplied)g(KeyMap\).)227 3803 y(The)43 b(AST)p
-Ft(_)p Fk(READ)g(and)f(AST)p Ft(_)p Fk(WRITE)g(functions)h(w)n(ork)e
-(together)g(so)h(that)h(an)n(y)f(Ob)5 b(ject)42 b(returned)g(b)n(y)227
-3903 y(AST)p Ft(_)p Fk(READ)28 b(can)f(immediately)h(b)r(e)g
-(re-written)f(using)g(AST)p Ft(_)p Fk(WRITE.)227 4026
-y(Normally)-7 b(,)40 b(when)e(y)n(ou)f(use)h(an)f(StcsChan,)k(y)n(ou)c
-(should)g(pro)n(vide)g Ft(")p Fk(source)p Ft(")f Fk(and)i
-Ft(")p Fk(sink)p Ft(")e Fk(routines)i(whic)n(h)227 4126
-y(connect)f(it)g(to)f(an)h(external)f(data)g(store)g(b)n(y)g(reading)f
-(and)i(writing)f(the)h(resulting)f(text.)65 b(These)36
-b(routines)227 4226 y(should)k(p)r(erform)f(an)n(y)h(con)n(v)n(ersions)
-d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n(haracter)f(enco)r(dings)h
-(and)h(the)g(in)n(ternal)227 4325 y(ASCI)r(I)33 b(enco)r(ding.)51
-b(If)33 b(no)f(suc)n(h)g(routines)g(are)g(supplied,)i(a)e(Channel)g
-(will)h(read)e(from)h(standard)g(input)h(and)227 4425
-y(write)28 b(to)f(standard)g(output.)227 4549 y(Supp)r(ort)36
-b(for)f(STC-S)g(is)g(curren)n(tly)g(based)g(on)g(the)g(IV)n(O)n(A)g(do)
-r(cumen)n(t)h Ft(")p Fk(STC-S:)f(Space-Time)g(Co)r(ordinate)227
-4648 y(\(STC\))22 b(Metadata)d(Linear)h(String)g(Implemen)n(tation)p
-Ft(")p Fk(,)i(v)n(ersion)d(1.30)g(\(dated)i(5th)g(Decem)n(b)r(er)f
-(2007\),)h(a)n(v)-5 b(ailable)227 4748 y(at)21 b(h)n(ttp://www.iv)n
-(oa.net/Do)r(cumen)n(ts/latest/STC-S.h)n(tml.)32 b(Note,)23
-b(this)e(do)r(cumen)n(t)h(is)f(a)g(recommednation)227
-4848 y(only)27 b(and)h(do)r(es)f(not)h(constitute)g(an)f(accepted)g(IV)
-n(O)n(A)g(standard.)227 4972 y(The)f(full)h(text)f(of)g(v)n(ersion)e
-(1.30)g(is)i(supp)r(orted)g(b)n(y)f(the)h(StcsChan)g(class,)f(with)i
-(the)f(follo)n(wing)f(exceptions)g(and)227 5071 y(pro)n(visos:)340
-5330 y Fj(\017)45 b Fk(When)28 b(reading)f(an)g(STC-S)h(phrase,)e(case)
-h(is)h(ignored)e(except)i(when)f(reading)g(units)h(strings.)340
-5462 y Fj(\017)45 b Fk(There)31 b(is)g(no)h(supp)r(ort)f(for)g(m)n
-(ultiple)h(in)n(terv)-5 b(als)30 b(sp)r(eci\014ed)i(within)g(a)f
-(TimeIn)n(terv)-5 b(al,)32 b(P)n(ositionIn)n(terv)-5
-b(al,)427 5561 y(Sp)r(ectralIn)n(terv)g(al)27 b(or)g(RedshiftIn)n(terv)
--5 b(al.)340 5693 y Fj(\017)45 b Fk(If)28 b(the)g(ET)f(timescale)h(is)f
-(sp)r(eci\014ed,)h(TT)g(is)f(used)h(instead.)p eop end
-%%Page: 512 522
-TeXDict begin 512 521 bop 0 52 a FG(512)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(If)28 b(the)g(TEB)f(timescale)g(is)h(sp)r(eci\014ed,)g(TDB)g(is)f
-(used)h(instead.)340 484 y Fj(\017)45 b Fk(The)28 b(LOCAL)f(timescale)g
-(is)h(not)f(supp)r(orted.)340 617 y Fj(\017)45 b Fk(The)26
-b(AST)g(TimeF)-7 b(rame)25 b(and)h(SkyF)-7 b(rame)25
-b(classes)f(do)h(not)h(curren)n(tly)f(allo)n(w)f(a)h(reference)g(p)r
-(osition)h(to)f(b)r(e)427 717 y(sp)r(eci\014ed.)45 b(Consequen)n(tly)-7
-b(,)30 b(an)n(y)f Fm(<)p Fk(refp)r(os)p Fm(>)g Fk(sp)r(eci\014ed)h
-(within)h(the)f(Time)g(or)g(Space)f(sub-phrase)g(of)h(an)427
-817 y(STC-S)e(do)r(cumen)n(t)g(is)f(ignored.)340 950
-y Fj(\017)45 b Fk(The)28 b(Con)n(v)n(ex)e(iden)n(ti\014er)i(for)f(the)h
-(space)e(sub-phrase)h(is)g(not)h(supp)r(orted.)340 1083
-y Fj(\017)45 b Fk(The)28 b(GEO)p Ft(_)p Fk(C)e(and)i(GEO)p
-Ft(_)p Fk(D)f(space)g(frames)f(are)h(not)h(supp)r(orted.)340
-1216 y Fj(\017)45 b Fk(The)28 b(UNITSPHERE)f(and)h(SPHER3)e(space)h
-(\015a)n(v)n(ours)e(are)i(not)h(supp)r(orted.)340 1349
-y Fj(\017)45 b Fk(If)33 b(an)n(y)f(Error)d(v)-5 b(alues)32
-b(are)g(supplied)g(in)h(a)f(space)f(sub-phrase,)i(then)f(the)h(n)n(um)n
-(b)r(er)f(of)g(v)-5 b(alues)32 b(supplied)427 1448 y(should)c(equal)f
-(the)i(n)n(um)n(b)r(er)f(of)g(spatial)f(axes,)g(and)h(the)g(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(sp)r(ecify)g(an)g(error)e(b)r(o)n(x)
-427 1548 y(\(i.e.)38 b(error)25 b(circles,)i(ellipses,)g(etc,)h(are)f
-(not)g(supp)r(orted\).)340 1681 y Fj(\017)45 b Fk(The)35
-b(sp)r(ectral)g(and)f(redshift)h(sub-phrases)f(do)g(not)h(supp)r(ort)g
-(the)g(follo)n(wing)f Fm(<)p Fk(refp)r(os)p Fm(>)f Fk(v)-5
-b(alues:)51 b(LO-)427 1781 y(CAL)p Ft(_)p Fk(GR)n(OUP)p
-Ft(_)p Fk(CENTER,)41 b(UNKNO)n(WNRefP)n(os,)46 b(EMBAR)-7
-b(YCENTER,)42 b(MOON,)g(MER)n(CUR)-7 b(Y,)427 1880 y(VENUS,)28
-b(MARS,)h(JUPITER,)d(SA)-7 b(TURN,)29 b(URANUS,)g(NEPTUNE,)e(PLUTO.)340
-2013 y Fj(\017)45 b Fk(Error)26 b(v)-5 b(alues)27 b(are)f(supp)r(orted)
-i(but)g(error)e(ranges)g(are)g(not.)340 2146 y Fj(\017)45
-b Fk(Resolution,)27 b(PixSize)g(and)h(Size)g(v)-5 b(alues)27
-b(are)f(ignored.)340 2280 y Fj(\017)45 b Fk(Space)28
-b(v)n(elo)r(cit)n(y)e(sub-phrases)g(are)h(ignored.)0
-2442 y Fc(Constructor)32 b(F)-8 b(unction:)227 2541 y
-Fk(AST)p Ft(_)p Fk(STCSCHAN)-2 2691 y Fc(Inheritance)n(:)227
-2837 y Fk(The)28 b(StcsChan)f(class)g(inherits)h(from)f(the)h(Channel)f
-(class.)-2 2987 y Fc(A)m(ttributes)n(:)227 3133 y Fk(In)36
-b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)g(Channels,)h
-(ev)n(ery)e(StcsChan)g(also)g(has)g(the)i(follo)n(wing)227
-3233 y(attributes:)340 3495 y Fj(\017)45 b Fk(StcsArea:)36
-b(Return)28 b(the)g(Co)r(ordinateArea)e(comp)r(onen)n(t)h(after)g
-(reading)g(an)g(STC-S?)340 3628 y Fj(\017)45 b Fk(StcsCo)r(ords:)36
-b(Return)28 b(the)g(Co)r(ordinates)e(comp)r(onen)n(t)h(after)h(reading)
-e(an)h(STC-S?)340 3761 y Fj(\017)45 b Fk(StcsInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)f(inden)n(tation)h(and)f(line)h(feeds)
-340 3894 y Fj(\017)45 b Fk(StcsLength:)37 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 4027 y Fj(\017)45 b
-Fk(StcsProps:)36 b(Return)27 b(the)h(STC-S)g(prop)r(erties)f(after)g
-(reading)f(an)i(STC-S?)-2 4189 y Fc(F)-8 b(unctions)n(:)227
-4335 y Fk(The)37 b(StcsChan)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n
-(y)f(new)g(routines)g(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g
-(applicable)g(to)g(all)227 4435 y(Channels.)p 0 4635
-3780 12 v 0 4766 a FA(Switc)l(hMap)268 b Fd(A)39 b(Mapping)f(that)f
-(encapsulates)h(a)h(set)f(of)1394 4881 y(alternate)e(Mappings)3120
-4766 y FA(Switc)l(hMap)0 5070 y Fc(Description:)44 b
-Fk(A)31 b(Switc)n(hMap)f(is)g(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e
-(a)i(set)g(of)g(alternate)f(Mappings,)h(eac)n(h)g(of)g(whic)n(h)227
-5170 y(is)e(used)f(to)g(transform)g(p)r(ositions)g(within)h(a)f
-(particular)f(region)g(of)i(the)g(input)g(or)f(output)h(co)r(ordinate)e
-(system)227 5269 y(of)i(the)g(Switc)n(hMap.)227 5394
-y(A)34 b(Switc)n(hMap)e(can)h(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h
-(of)g(Mappings,)h(but)f(they)h(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)
-g(n)n(um-)227 5494 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 5593
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 5693 y(represen)n(ts)33
-b(a)h Ft(")p Fk(route)p Ft(")f Fk(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fk(route)p Ft(")e
-Fk(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)p eop end
-%%Page: 513 523
-TeXDict begin 513 522 bop 3643 52 a FG(513)227 351 y
-Fk(route)30 b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g
-(the)g(input)h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n
-(tire)227 451 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r
-(e)h(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 551 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 650 y(called)31
-b(the)h Ft(")p Fk(selector)p Ft(")e Fk(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 750 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fk(for-)227 849 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fk(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-949 y Ft(")p Fk(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fk(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-1049 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 1148 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)227 1279 y(When)40 b(the)g(Switc)n(hMap)f
-(is)h(used)f(to)g(transform)g(a)g(p)r(osition)g(in)h(the)f(forw)n(ard)f
-(direction)h(\(from)h(input)g(to)227 1379 y(output\),)g(eac)n(h)35
-b(supplied)h(input)h(p)r(osition)f(is)h(\014rst)e(transformed)h(b)n(y)f
-(the)i(forw)n(ard)e(transformation)f(of)i(the)227 1478
-y(forw)n(ard)27 b(selector)g(Mapping.)38 b(This)28 b(pro)r(duces)f(a)h
-(single)f(output)i(v)-5 b(alue)28 b(for)g(eac)n(h)f(input)i(p)r
-(osition)f(referred)f(to)227 1578 y(as)j(the)h(selector)e(v)-5
-b(alue.)45 b(The)30 b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5
-b(alue)30 b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-1678 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f
-(supplied)g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f
-(Mapping)227 1777 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35
-b(the)g(nearest)f(in)n(teger)g(to)g(the)h(selector)f(v)-5
-b(alue)35 b(is)f(less)h(than)f(1)h(or)e(greater)g(than)i(the)227
-1877 y(n)n(um)n(b)r(er)c(of)f(route)g(Mappings,)h(then)h(the)f(Switc)n
-(hMap)f(output)i(p)r(osition)e(is)h(set)f(to)h(a)f(v)-5
-b(alue)31 b(of)g(AST)p Ft(__)p Fk(BAD)227 1976 y(on)k(ev)n(ery)g(axis.)
-59 b(Otherwise,)37 b(the)f(forw)n(ard)e(transformation)f(of)j(the)g
-(selected)f(route)g(Mapping)g(is)g(used)h(to)227 2076
-y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f(to)h(pro)r
-(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-2207 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fk(output)p Ft(")g Fk(to)227 2306 y Ft(")p Fk(input)p
-Ft(")p Fk(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fk(output)p
-Ft(")g Fk(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 2406 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fk(output)p Ft(")h
-Fk(p)r(osition.)49 b(Again,)32 b(the)227 2506 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-2605 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 2705 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fk(output)p Ft(")f Fk(p)r(osition)227
-2805 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fk(input)p Ft(")h Fk(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-2904 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fk(input)p Ft(")f Fk(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fk(BAD)227 3004
-y(on)j(ev)n(ery)e(axis.)227 3135 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 3234 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 3334 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-3465 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 3564 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 3664 y(simpli\014ed)d(using)g(AST)p
-Ft(_)p Fk(SIMPLIFY.)0 3826 y Fc(Constructor)k(F)-8 b(unction:)227
-3925 y Fk(AST)p Ft(_)p Fk(SWITCHMAP)-2 4087 y Fc(Inheritance)n(:)227
-4233 y Fk(The)28 b(Switc)n(hMap)f(class)g(inherits)h(from)f(the)h
-(Mapping)f(class.)-2 4395 y Fc(A)m(ttributes)n(:)227
-4541 y Fk(The)h(Switc)n(hMap)g(class)f(do)r(es)h(not)g(de\014ne)g(an)n
-(y)f(new)h(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 4641 y(Mappings.)-2 4803 y
-Fc(F)-8 b(unctions)n(:)227 4949 y Fk(The)33 b(Switc)n(hMap)f(class)f
-(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h(routines)g(b)r(ey)n(ond)g
-(those)g(whic)n(h)g(are)f(applicable)h(to)g(all)227 5049
-y(Mappings.)p 0 5260 3780 12 v 0 5392 a FA(TimeF)-11
-b(rame)304 b Fd(Time)38 b(co)s(ordinate)e(system)j(description)301
-b FA(TimeF)-11 b(rame)0 5593 y Fc(Description:)44 b Fk(A)37
-b(TimeF)-7 b(rame)35 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h
-(one-dimensional)e(F)-7 b(rame)36 b(whic)n(h)f(represen)n(ts)g(v)-5
-b(arious)227 5693 y(co)r(ordinate)27 b(systems)g(used)g(to)h(describ)r
-(e)f(p)r(ositions)g(in)h(time.)p eop end
-%%Page: 514 524
-TeXDict begin 514 523 bop 0 52 a FG(514)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fk(A)23 b(TimeF)-7
-b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g(time)h(as)e(either)h
-(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h(a)f(Julian)f(Date)227
-451 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)i(or)f(a)h(Julian)g(ep)r
-(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i(System)f(attribute.)34
-b(Optionally)-7 b(,)20 b(a)f(zero)227 551 y(p)r(oin)n(t)30
-b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e(attribute)i(TimeOrigin\))e
-(whic)n(h)h(results)f(in)h(the)h(TimeF)-7 b(rame)29 b(represen)n(ting)
-227 650 y(time)f(o\013sets)g(from)f(the)h(sp)r(eci\014ed)g(zero)e(p)r
-(oin)n(t.)227 772 y(Ev)n(en)g(though)g(JD)g(and)g(MJD)g(are)g
-(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n(ys,)g(the)g(TimeF)
--7 b(rame)26 b(class)f(allo)n(ws)g(other)227 872 y(units)31
-b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))g(on)f(the)h
-(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g(min)n(ute,)
-227 971 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g(=)g(1)g(da)n
-(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1071 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1171 y(\(tropical\))c(y)n(ears.)
-227 1293 y(The)33 b(TimeScale)e(attribute)i(allo)n(ws)e(the)h(time)h
-(scale)e(to)h(b)r(e)h(sp)r(eci\014ed)g(\(that)f(is,)i(the)e(ph)n
-(ysical)g(pro)r(cess)f(used)227 1392 y(to)e(de\014ne)g(the)g(rate)f(of)
-g(\015o)n(w)g(of)h(time\).)41 b(MJD,)29 b(JD)g(and)f(Julian)g(ep)r(o)r
-(c)n(h)h(can)f(b)r(e)h(used)g(to)f(represen)n(t)g(a)g(time)h(in)227
-1492 y(an)n(y)d(supp)r(orted)h(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25
-b(Besselian)h(ep)r(o)r(c)n(h)g(ma)n(y)g(only)h(b)r(e)g(used)g(with)g
-(the)g Ft(")p Fk(TT)p Ft(")f Fk(\(T)-7 b(errestrial)227
-1592 y(Time\))39 b(time)g(scale.)70 b(The)38 b(list)h(of)g(supp)r
-(orted)f(time)h(scales)f(includes)h(univ)n(ersal)e(time)i(and)f
-(siderial)g(time.)227 1691 y(Strictly)-7 b(,)30 b(these)g(represen)n(t)
-e(angles)g(rather)g(than)i(time)f(scales,)g(but)h(are)e(included)i(in)g
-(the)f(list)h(since)f(they)h(are)227 1791 y(in)e(common)f(use)h(and)f
-(are)g(often)h(though)n(t)f(of)g(as)g(time)h(scales.)227
-1913 y(When)h(a)e(time)h(v)-5 b(alue)28 b(is)f(formatted)h(it)g(can)f
-(b)r(e)h(formated)g(either)f(as)g(a)h(simple)g(\015oating)e(p)r(oin)n
-(t)i(v)-5 b(alue,)28 b(or)f(as)g(a)227 2012 y(Gregorian)f(date)h(\(see)
-h(the)g(F)-7 b(ormat)27 b(attribute\).)0 2157 y Fc(Constructor)32
-b(F)-8 b(unction:)227 2256 y Fk(AST)p Ft(_)p Fk(TIMEFRAME)-2
-2401 y Fc(Inheritance)n(:)227 2547 y Fk(The)28 b(TimeF)-7
-b(rame)27 b(class)g(inherits)g(from)g(the)h(F)-7 b(rame)28
-b(class.)-2 2691 y Fc(A)m(ttributes)n(:)227 2837 y Fk(In)36
-b(addition)g(to)f(those)h(attributes)f(common)g(to)h(all)f(F)-7
-b(rames,)37 b(ev)n(ery)e(TimeF)-7 b(rame)35 b(also)f(has)i(the)g(follo)
-n(wing)227 2937 y(attributes:)340 3190 y Fj(\017)45 b
-Fk(AlignTimeScale:)37 b(Time)28 b(scale)e(in)i(whic)n(h)g(to)f(align)g
-(TimeF)-7 b(rames)340 3318 y Fj(\017)45 b Fk(L)-7 b(TO\013set:)37
-b(The)28 b(o\013set)f(of)h(Lo)r(cal)f(Time)g(from)h(UTC,)g(in)g(hours.)
-340 3446 y Fj(\017)45 b Fk(TimeOrigin:)36 b(The)28 b(zero)e(p)r(oin)n
-(t)i(for)f(TimeF)-7 b(rame)27 b(axis)g(v)-5 b(alues)340
-3574 y Fj(\017)45 b Fk(TimeScale:)37 b(The)27 b(timescale)h(used)f(b)n
-(y)h(the)g(TimeF)-7 b(rame)227 3731 y(Sev)n(eral)33 b(of)i(the)g(F)-7
-b(rame)34 b(attributes)h(inherited)f(b)n(y)h(the)g(TimeF)-7
-b(rame)34 b(class)g(refer)f(to)i(a)f(sp)r(eci\014c)h(axis)f(of)g(the)
-227 3830 y(F)-7 b(rame)30 b(\(for)g(instance)g(Unit\(axis\),)h(Lab)r
-(el\(axis\),)g(etc\).)45 b(Since)30 b(a)g(TimeF)-7 b(rame)30
-b(is)g(strictly)g(one-dimensional,)227 3930 y(it)f(allo)n(ws)e(these)h
-(attributes)g(to)g(b)r(e)g(sp)r(eci\014ed)g(without)h(an)f(axis)f
-(index.)39 b(So)27 b(for)h(instance,)g Ft(")p Fk(Unit)p
-Ft(")g Fk(is)g(allo)n(w)n(ed)227 4029 y(in)g(place)f(of)h
-Ft(")p Fk(Unit\(1\))p Ft(")p Fk(.)-2 4174 y Fc(F)-8 b(unctions)n(:)227
-4320 y Fk(In)30 b(addition)f(to)h(those)f(routines)g(applicable)g(to)g
-(all)g(F)-7 b(rames,)29 b(the)h(follo)n(wing)f(routines)g(ma)n(y)f
-(also)h(b)r(e)h(applied)227 4420 y(to)e(all)f(TimeF)-7
-b(rames:)340 4673 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(CURRENTTIME:)28
-b(Return)f(the)h(curren)n(t)f(system)g(time)p 0 4862
-3780 12 v 0 4994 a FA(TimeMap)290 b Fd(Sequence)39 b(of)f(time)g(co)s
-(ordinate)e(con)m(v)m(ersions)288 b FA(TimeMap)0 5172
-y Fc(Description:)44 b Fk(A)22 b(TimeMap)e(is)h(a)f(sp)r(ecialised)h
-(form)f(of)h(1-dimensional)e(Mapping)i(whic)n(h)g(can)f(b)r(e)h(used)g
-(to)g(represen)n(t)227 5272 y(a)27 b(sequence)h(of)f(con)n(v)n(ersions)
-e(b)r(et)n(w)n(een)j(standard)e(time)i(co)r(ordinate)f(systems.)227
-5394 y(When)19 b(a)f(TimeMap)g(is)h(\014rst)f(created,)h(it)g(simply)g
-(p)r(erforms)e(a)h(unit)h(\(n)n(ull\))g(Mapping.)34 b(Using)18
-b(the)h(AST)p Ft(_)p Fk(TIMEADD)227 5494 y(routine,)35
-b(a)e(series)f(of)h(co)r(ordinate)f(con)n(v)n(ersion)f(steps)i(ma)n(y)g
-(then)h(b)r(e)g(added.)54 b(This)33 b(allo)n(ws)f(m)n(ulti-step)h(con-)
-227 5593 y(v)n(ersions)i(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)35 b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h
-(assem)n(bled)e(out)h(of)g(a)g(set)g(of)g(building)227
-5693 y(blo)r(c)n(ks.)p eop end
-%%Page: 515 525
-TeXDict begin 515 524 bop 3643 52 a FG(515)227 351 y
-Fk(F)-7 b(or)18 b(details)g(of)g(the)h(individual)g(co)r(ordinate)e
-(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)19 b(see)f(the)h(description)e
-(of)i(the)f(AST)p Ft(_)p Fk(TIMEADD)227 451 y(routine.)0
-610 y Fc(Constructor)32 b(F)-8 b(unction:)227 710 y Fk(AST)p
-Ft(_)p Fk(TIMEMAP)27 b(\(also)g(see)g(AST)p Ft(_)p Fk(TIMEADD\))-2
-870 y Fc(Inheritance)n(:)227 1016 y Fk(The)h(TimeMap)f(class)g
-(inherits)h(from)f(the)h(Mapping)f(class.)-2 1175 y Fc(A)m(ttributes)n
-(:)227 1321 y Fk(The)32 b(TimeMap)f(class)g(do)r(es)g(not)g(de\014ne)h
-(an)n(y)f(new)g(attributes)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 1421 y(Mappings.)-2 1580 y
-Fc(F)-8 b(unctions)n(:)227 1727 y Fk(In)26 b(addition)f(to)h(those)f
-(routines)g(applicable)f(to)i(all)f(Mappings,)g(the)h(follo)n(wing)f
-(routine)g(ma)n(y)f(also)h(b)r(e)h(applied)227 1826 y(to)i(all)f
-(TimeMaps:)340 2102 y Fj(\017)45 b Fk(AST)p Ft(_)p Fk(TIMEADD:)29
-b(Add)f(a)f(time)h(co)r(ordinate)e(con)n(v)n(ersion)g(to)h(an)h
-(TimeMap)p 0 2312 3780 12 v 0 2442 a FA(T)-11 b(ranMap)772
-2443 y Fd(Mapping)38 b(with)g(sp)s(eci\014ed)h(forw)m(ard)d(and)j(in)m
-(v)m(erse)1488 2558 y(transformations)3234 2442 y FA(T)-11
-b(ranMap)0 2734 y Fc(Description:)44 b Fk(A)27 b(T)-7
-b(ranMap)25 b(is)h(a)f(Mapping)h(whic)n(h)g(com)n(bines)f(the)i(forw)n
-(ard)d(transformation)g(of)i(a)g(supplied)g(Map-)227
-2833 y(ping)i(with)h(the)g(in)n(v)n(erse)e(transformation)f(of)j
-(another)e(supplied)i(Mapping,)f(ignoring)e(the)j(un-used)f(transfor-)
-227 2933 y(mation)g(in)f(eac)n(h)g(Mapping)h(\(indeed)g(the)g(un-used)f
-(transformation)f(need)i(not)f(exist\).)227 3062 y(When)h(the)f(forw)n
-(ard)e(transformation)h(of)h(the)g(T)-7 b(ranMap)26 b(is)h(referred)f
-(to,)h(the)g(transformation)e(actually)i(used)227 3162
-y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i(\014rst)e
-(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30 b(w)n(as)g
-(constructed.)227 3262 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n(erse)d
-(transformation)h(of)h(the)h(T)-7 b(ranMap)31 b(is)h(referred)f(to,)i
-(the)g(transformation)d(ac-)227 3361 y(tually)f(used)g(is)g(the)g(in)n
-(v)n(erse)f(transformation)f(of)i(the)h(second)e(Mapping)h(supplied)g
-(when)g(the)h(T)-7 b(ranMap)28 b(w)n(as)227 3461 y(constructed.)0
-3620 y Fc(Constructor)k(F)-8 b(unction:)227 3720 y Fk(AST)p
-Ft(_)p Fk(TRANMAP)-2 3880 y Fc(Inheritance)n(:)227 4026
-y Fk(The)28 b(T)-7 b(ranMap)27 b(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 4185 y Fc(A)m(ttributes)n(:)227
-4331 y Fk(The)33 b(T)-7 b(ranMap)31 b(class)h(do)r(es)g(not)h(de\014ne)
-f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g
-(applicable)f(to)i(all)227 4431 y(Mappings.)-2 4591 y
-Fc(F)-8 b(unctions)n(:)227 4737 y Fk(The)37 b(T)-7 b(ranMap)36
-b(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h(routines)f(b)r(ey)n
-(ond)h(those)f(whic)n(h)h(are)f(applicable)g(to)h(all)227
-4836 y(Mappings.)p 0 5046 V 0 5177 a FA(UnitMap)1368
-5184 y Fd(Unit)h(\(n)m(ull\))f(Mapping)3244 5177 y FA(UnitMap)0
-5394 y Fc(Description:)44 b Fk(A)36 b(UnitMap)g(is)f(a)g(unit)g(\(n)n
-(ull\))h(Mapping)f(that)h(has)e(no)h(e\013ect)h(on)f(the)g(co)r
-(ordinates)f(supplied)i(to)227 5494 y(it.)47 b(They)31
-b(are)f(simply)h(copied.)46 b(This)31 b(can)f(b)r(e)i(useful)f(if)g(a)g
-(Mapping)f(is)h(required)f(\(e.g.)46 b(to)31 b(pass)f(to)h(another)227
-5593 y(routine\))26 b(but)g(y)n(ou)e(do)h(not)h(w)n(an)n(t)f(it)h(to)f
-(ha)n(v)n(e)f(an)n(y)h(e\013ect.)36 b(The)26 b(Nin)g(and)f(Nout)h
-(attributes)f(of)h(a)f(UnitMap)h(are)227 5693 y(alw)n(a)n(ys)g(equal)h
-(and)g(are)g(sp)r(eci\014ed)h(when)g(it)g(is)f(created.)p
-eop end
-%%Page: 516 526
-TeXDict begin 516 525 bop 0 52 a FG(516)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fc(Constructor)j(F)-8
-b(unction:)227 451 y Fk(AST)p Ft(_)p Fk(UNITMAP)-2 595
-y Fc(Inheritance)n(:)227 741 y Fk(The)28 b(UnitMap)g(class)f(inherits)g
-(from)g(the)h(Mapping)g(class.)-2 885 y Fc(A)m(ttributes)n(:)227
-1031 y Fk(The)33 b(UnitMap)h(class)e(do)r(es)h(not)g(de\014ne)h(an)n(y)
-e(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 1130 y(Mappings.)-2 1274 y
-Fc(F)-8 b(unctions)n(:)227 1420 y Fk(The)38 b(UnitMap)g(class)e(do)r
-(es)h(not)h(de\014ne)g(an)n(y)e(new)i(routines)f(b)r(ey)n(ond)g(those)g
-(whic)n(h)g(are)g(applicable)g(to)g(all)227 1520 y(Mappings.)p
-0 1708 3780 12 v 0 1839 a FA(WcsMap)879 1840 y Fd(Implemen)m(t)g(a)i
-(FITS-W)m(CS)g(sky)f(pro)7 b(jection)3260 1839 y FA(WcsMap)0
-2017 y Fc(Description:)44 b Fk(This)28 b(class)e(is)i(used)f(to)g
-(represen)n(t)g(sky)g(co)r(ordinate)f(pro)5 b(jections)26
-b(as)h(describ)r(ed)g(in)h(the)g(FITS)g(w)n(orld)227
-2117 y(co)r(ordinate)k(system)g(\(FITS-W)n(CS\))i(pap)r(er)e(I)r(I)h
-Ft(")p Fk(Represen)n(tations)e(of)i(Celestial)f(Co)r(ordinates)f(in)i
-(FITS)p Ft(")g Fk(b)n(y)227 2216 y(M.)c(Calabretta)f(and)g(E.W.)h
-(Griesen.)40 b(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h(of)f
-(functions,)i(or)e(sky)g(pro)5 b(jections,)28 b(whic)n(h)227
-2316 y(transform)33 b(longitude-latitude)g(pairs)g(represen)n(ting)f
-(spherical)h(celestial)g(co)r(ordinates)f(in)n(to)i(corresp)r(onding)
-227 2416 y(pairs)27 b(of)g(Cartesian)g(co)r(ordinates)f(\(and)i(vice)f
-(v)n(ersa\).)227 2537 y(A)k(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g
-(of)g(Mapping)g(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5
-b(jections)29 b(and)h(applies)227 2637 y(them)25 b(to)g(a)f(sp)r
-(eci\014ed)h(pair)f(of)g(co)r(ordinates.)35 b(All)25
-b(the)g(pro)5 b(jections)23 b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g
-(supp)r(orted,)227 2737 y(plus)32 b(the)f(no)n(w)g(deprecated)f
-Ft(")p Fk(T)-7 b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fk(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-2836 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fk(TPN)p
-Ft(")p Fk(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fk(nativ)n(e)227 2936 y(spherical)p Ft(")e Fk(and)h
-Ft(")p Fk(pro)5 b(jection)19 b(plane)p Ft(")i Fk(co)r(ordinates)e
-(\(also)h(called)h Ft(")p Fk(in)n(termediate)f(w)n(orld)g(co)r
-(ordinates)p Ft(")p Fk(.)33 b(These)227 3036 y(co)r(ordinates)20
-b(ma)n(y)-7 b(,)22 b(optionally)-7 b(,)22 b(b)r(e)g(em)n(b)r(edded)g
-(in)g(a)f(space)g(with)g(more)g(than)h(t)n(w)n(o)e(dimensions,)j(the)f
-(remaining)227 3135 y(co)r(ordinates)g(b)r(eing)h(copied)g(unc)n
-(hanged.)35 b(Note,)24 b(ho)n(w)n(ev)n(er,)e(that)i(for)e(consistency)h
-(with)g(other)g(AST)h(facilities,)227 3235 y(a)30 b(WcsMap)f(handles)h
-(co)r(ordinates)f(that)h(represen)n(t)e(angles)h(in)h(radians)f
-(\(rather)g(than)h(the)g(degrees)f(used)h(b)n(y)227 3334
-y(FITS-W)n(CS\).)227 3456 y(The)i(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 3556
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 3655 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 3755 y(WcsAxis\(lonlat\))d
-(attribute.)227 3877 y(Eac)n(h)37 b(WcsMap)i(also)e(allo)n(ws)g(up)i
-(to)f(100)f Ft(")p Fk(pro)5 b(jection)37 b(parameters)p
-Ft(")f Fk(to)i(b)r(e)h(asso)r(ciated)e(with)i(eac)n(h)e(axis.)227
-3976 y(These)31 b(sp)r(ecify)h(the)g(precise)f(form)g(of)g(the)h(pro)5
-b(jection,)31 b(and)h(are)e(accessed)g(using)h(PVi)p
-Ft(_)p Fk(m)h(attribute,)g(where)227 4076 y Ft(")p Fk(i)p
-Ft(")27 b Fk(is)h(the)g(in)n(teger)f(axis)h(index)f(\(starting)h(at)g
-(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f Ft(")p Fk(parameter)f(index)p
-Ft(")h Fk(in)h(the)h(range)d(0)227 4176 y(to)i(99.)39
-b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5 b(jection)27
-b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5 b(jection,)27
-b(and)i(their)f(meanings,)g(are)227 4275 y(dep)r(enden)n(t)c(up)r(on)e
-(the)h(pro)5 b(jection)22 b(t)n(yp)r(e)h(\(most)g(pro)5
-b(jections)21 b(either)h(do)h(not)f(use)h(an)n(y)f(pro)5
-b(jection)21 b(parameters,)227 4375 y(or)h(use)g(parameters)f(1)h(and)g
-(2)g(asso)r(ciated)f(with)i(the)g(latitude)g(axis\).)35
-b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-4475 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)227 4574 y(ha)n(v)n(e)h(defaults.)53 b(When)34
-b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h(explicitly)g(set)g(v)-5
-b(alues)33 b(for)f(all)h(those)g(required)227 4674 y(pro)5
-b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n(e)g
-(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 4818
-y Fc(Constructor)k(F)-8 b(unction:)227 4917 y Fk(AST)p
-Ft(_)p Fk(W)n(CSMAP)-2 5061 y Fc(Inheritance)n(:)227
-5207 y Fk(The)28 b(WcsMap)f(class)g(inherits)g(from)h(the)g(Mapping)f
-(class.)-2 5351 y Fc(A)m(ttributes)n(:)227 5497 y Fk(In)36
-b(addition)g(to)g(those)g(attributes)g(common)f(to)h(all)g(Mappings,)h
-(ev)n(ery)e(WcsMap)h(also)f(has)g(the)i(follo)n(wing)227
-5597 y(attributes:)p eop end
-%%Page: 517 527
-TeXDict begin 517 526 bop 3643 52 a FG(517)340 351 y
-Fj(\017)45 b Fk(NatLat:)37 b(Nativ)n(e)27 b(latitude)h(of)g(the)g
-(reference)e(p)r(oin)n(t)i(of)g(a)f(FITS-W)n(CS)h(pro)5
-b(jection)340 483 y Fj(\017)45 b Fk(NatLon:)37 b(Nativ)n(e)27
-b(longitude)g(of)h(the)g(reference)f(p)r(oin)n(t)g(of)h(a)f(FITS-W)n
-(CS)h(pro)5 b(jection)340 614 y Fj(\017)45 b Fk(PVi)p
-Ft(_)p Fk(m:)37 b(FITS-W)n(CS)28 b(pro)5 b(jection)26
-b(parameters)340 746 y Fj(\017)45 b Fk(PVMax:)36 b(Maxim)n(um)28
-b(n)n(um)n(b)r(er)f(of)h(FITS-W)n(CS)f(pro)5 b(jection)27
-b(parameters)340 877 y Fj(\017)45 b Fk(WcsAxis\(lonlat\):)37
-b(FITS-W)n(CS)28 b(pro)5 b(jection)27 b(axes)340 1009
-y Fj(\017)45 b Fk(WcsT)n(yp)r(e:)37 b(FITS-W)n(CS)28
-b(pro)5 b(jection)26 b(t)n(yp)r(e)-2 1170 y Fc(F)-8 b(unctions)n(:)227
-1316 y Fk(The)38 b(WcsMap)g(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)g
-(new)g(routines)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 1415 y(Mappings.)p 0 1612 3780 12 v 0 1744
-a FA(WinMap)180 b Fd(Map)39 b(one)g(windo)m(w)e(on)h(to)g(another)g(b)m
-(y)g(scaling)g(and)1449 1858 y(shifting)f(eac)m(h)h(axis)3261
-1744 y FA(WinMap)0 2045 y Fc(Description:)44 b Fk(A)26
-b(Winmap)g(is)g(a)f(linear)g(Mapping)h(whic)n(h)f(transforms)f(a)i
-(rectangular)d(windo)n(w)j(in)f(one)h(co)r(ordinate)227
-2144 y(system)k(in)n(to)f(a)g(similar)g(windo)n(w)g(in)g(another)g(co)r
-(ordinate)f(system)i(b)n(y)f(scaling)f(and)i(shifting)g(eac)n(h)e(axis)
-h(\(the)227 2244 y(windo)n(w)e(edges)g(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 2368 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-2467 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 2616 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2715 y Fk(AST)p Ft(_)p Fk(WINMAP)-2 2863 y Fc(Inheritance)n(:)227
-3009 y Fk(The)28 b(WinMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 3158 y Fc(A)m(ttributes)n(:)227 3304 y Fk(The)34
-b(WinMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)g(to)h
-(all)227 3403 y(Mappings.)-2 3551 y Fc(F)-8 b(unctions)n(:)227
-3698 y Fk(The)38 b(WinMap)h(class)e(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(routines)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 3797 y(Mappings.)p 0 3994 V 0 4126 a FA(XmlChan)716
-4132 y Fd(I/O)h(Channel)e(using)i(XML)g(to)f(represen)m(t)g(Ob)7
-b(jects)3217 4126 y FA(XmlChan)0 4330 y Fc(Description:)44
-b Fk(A)21 b(XmlChan)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Channel)g
-(whic)n(h)g(supp)r(orts)g(XML)g(I/O)f(op)r(erations.)34
-b(W)-7 b(riting)227 4429 y(an)29 b(Ob)5 b(ject)30 b(to)f(an)g(XmlChan)h
-(\(using)f(AST)p Ft(_)p Fk(WRITE\))h(will,)g(if)g(the)g(Ob)5
-b(ject)29 b(is)g(suitable,)h(generate)e(an)h(XML)227
-4529 y(description)e(of)g(that)g(Ob)5 b(ject,)28 b(and)f(reading)e
-(from)i(an)g(XmlChan)h(will)f(create)f(a)h(new)g(Ob)5
-b(ject)27 b(from)g(its)g(XML)227 4629 y(description.)227
-4752 y(Normally)-7 b(,)39 b(when)f(y)n(ou)e(use)i(an)f(XmlChan,)j(y)n
-(ou)d(should)g(pro)n(vide)f Ft(")p Fk(source)p Ft(")f
-Fk(and)j Ft(")p Fk(sink)p Ft(")e Fk(routines)h(whic)n(h)227
-4852 y(connect)24 b(it)f(to)h(an)f(external)g(data)g(store)f(b)n(y)h
-(reading)f(and)i(writing)f(the)h(resulting)e(XML)i(text.)36
-b(These)23 b(routines)227 4952 y(should)40 b(p)r(erform)f(an)n(y)h(con)
-n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n(haracter)f
-(enco)r(dings)h(and)h(the)g(in)n(ternal)227 5051 y(ASCI)r(I)33
-b(enco)r(ding.)51 b(If)33 b(no)f(suc)n(h)g(routines)g(are)g(supplied,)i
-(a)e(Channel)g(will)h(read)e(from)h(standard)g(input)h(and)227
-5151 y(write)28 b(to)f(standard)g(output.)0 5299 y Fc(Constructor)32
-b(F)-8 b(unction:)227 5399 y Fk(AST)p Ft(_)p Fk(XMLCHAN)-2
-5547 y Fc(Inheritance)n(:)227 5693 y Fk(The)28 b(XmlChan)g(class)e
-(inherits)i(from)f(the)h(Channel)g(class.)p eop end
-%%Page: 518 528
-TeXDict begin 518 527 bop 0 52 a FG(518)2251 b Fz(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fc(A)m(ttributes)n(:)227
-497 y Fk(In)36 b(addition)f(to)g(those)g(attributes)h(common)f(to)g
-(all)g(Channels,)i(ev)n(ery)d(XmlChan)i(also)e(has)h(the)h(follo)n
-(wing)227 597 y(attributes:)340 858 y Fj(\017)45 b Fk(XmlF)-7
-b(ormat:)37 b(System)28 b(for)f(formatting)g(Ob)5 b(jects)27
-b(as)g(XML)340 991 y Fj(\017)45 b Fk(XmlInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)g(inden)n(tation)f(and)h(line)f(feeds)
-340 1124 y Fj(\017)45 b Fk(XmlLength:)38 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 1256 y Fj(\017)45 b
-Fk(XmlPre\014x:)37 b(The)27 b(namespace)g(pre\014x)g(to)g(use)h(when)g
-(writing)-2 1418 y Fc(F)-8 b(unctions)n(:)227 1564 y
-Fk(The)36 b(XmlChan)h(class)e(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h
-(routines)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h(to)g
-(all)227 1664 y(Mappings.)p 0 1863 3780 12 v 0 1994 a
-FA(Zo)t(omMap)1000 1995 y Fd(Zo)s(om)i(co)s(ordinates)e(ab)s(out)i(the)
-h(origin)3179 1994 y FA(Zo)t(omMap)0 2184 y Fc(Description:)44
-b Fk(The)27 b(Zo)r(omMap)f(class)h(implemen)n(ts)g(a)f(Mapping)h(whic)n
-(h)g(p)r(erforms)f(a)h Ft(")p Fk(zo)r(om)p Ft(")f Fk(transformation)f
-(b)n(y)227 2283 y(m)n(ultiplying)g(all)g(co)r(ordinate)f(v)-5
-b(alues)25 b(b)n(y)f(the)i(same)e(scale)g(factor)h(\(the)g(in)n(v)n
-(erse)f(transformation)f(is)i(p)r(erformed)227 2383 y(b)n(y)39
-b(dividing)g(b)n(y)g(this)h(scale)e(factor\).)72 b(The)39
-b(n)n(um)n(b)r(er)g(of)g(co)r(ordinate)f(v)-5 b(alues)39
-b(represen)n(ting)f(eac)n(h)g(p)r(oin)n(t)i(is)227 2483
-y(unc)n(hanged.)0 2632 y Fc(Constructor)32 b(F)-8 b(unction:)227
-2732 y Fk(AST)p Ft(_)p Fk(ZOOMMAP)-2 2881 y Fc(Inheritance)n(:)227
-3027 y Fk(The)28 b(Zo)r(omMap)f(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 3177 y Fc(A)m(ttributes)n(:)227
-3323 y Fk(In)33 b(addition)f(to)h(those)f(attributes)g(common)g(to)g
-(all)h(Mappings,)g(ev)n(ery)e(Zo)r(omMap)g(also)h(has)g(the)h(follo)n
-(wing)227 3422 y(attributes:)340 3683 y Fj(\017)45 b
-Fk(Zo)r(om:)36 b(Zo)r(omMap)27 b(scale)g(factor)-2 3845
-y Fc(F)-8 b(unctions)n(:)227 3991 y Fk(The)35 b(Zo)r(omMap)f(class)g
-(do)r(es)g(not)h(de\014ne)f(an)n(y)g(new)h(routines)f(b)r(ey)n(ond)h
-(those)f(whic)n(h)g(are)g(applicable)g(to)h(all)227 4091
-y(Mappings.)p eop end
-%%Page: 519 529
-TeXDict begin 519 528 bop 3643 52 a FG(519)0 351 y FA(E)135
-b(UNIX)45 b(Command)g(Descriptions)0 594 y FG(The)35
-b(commands)h(describ)s(ed)e(here)i(are)g(pro)m(vided)f(for)h(use)f
-(from)g(the)h(UNIX)g(shell)g(to)h(assist)f(with)f(dev)m(el-)0
-694 y(oping)e(soft)m(w)m(are)g(whic)m(h)g(uses)f(AST.)g(T)-8
-b(o)32 b(use)h(these)g(commands,)f(y)m(ou)h(should)f(ensure)f(that)i
-(the)g(directory)0 793 y(\\/star/bin")459 760 y Fv(37)565
-793 y FG(is)e(on)f(y)m(our)g(P)-8 b(A)g(TH.)p 0 945 3780
-12 v 0 1076 a FA(ast)p Fe(_)p FA(link)476 b Fd(Link)39
-b(a)f(program)e(with)i(the)h(AST)f(library)473 b FA(ast)p
-Fe(_)p FA(link)0 1270 y Fc(Description:)44 b Fk(This)36
-b(command)g(should)g(b)r(e)h(used)f(when)g(building)g(programs)e(whic)n
-(h)i(use)g(the)h(AST)f(library)-7 b(,)37 b(in)227 1369
-y(order)21 b(to)g(generate)f(the)i(correct)f(argumen)n(ts)f(to)h(allo)n
-(w)g(the)h(compiler)f(to)g(link)h(y)n(our)e(program.)33
-b(The)22 b(argumen)n(ts)227 1469 y(generated)k(are)g(written)h(to)f
-(standard)g(output)i(but)f(ma)n(y)f(b)r(e)h(substituted)h(in)n(to)f
-(the)g(compiler)f(command)g(line)227 1568 y(in)i(the)g(standard)f(UNIX)
-h(w)n(a)n(y)f(using)g(bac)n(kw)n(ard)e(quotes)i(\(see)h(b)r(elo)n(w\).)
-227 1695 y(By)35 b(default,)j(it)d(is)h(assumed)e(that)i(y)n(ou)e(are)g
-(building)i(a)f(stand-alone)f(program)f(whic)n(h)i(do)r(es)g(not)g(pro)
-r(duce)227 1795 y(graphical)26 b(output.)38 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)i(are)g(pro)n(vided)g(for)g(linking)g(other)g(t)n(yp)r
-(es)h(of)f(program.)0 1949 y Fc(In)m(v)m(o)s(cation:)123
-b Ft(f77)42 b(program.f)e(-L/star/lib)f(`ast_link)h([switches]`)f(-o)k
-(program)0 2102 y Fc(Examples:)227 2244 y Fy(f77)k(display.f)e
-(-L/star/lib)g(`ast)p Ft(_)p Fy(link)g(-pgplot`)h(-o)h(display)427
-2343 y Fk(Compiles)34 b(and)f(links)h(a)f(F)-7 b(ortran)32
-b(program)g(called)h(\\displa)n(y")f(whic)n(h)i(uses)f(the)h(standard)f
-(v)n(ersion)f(of)427 2442 y(PGPLOT)27 b(for)g(graphical)f(output.)227
-2578 y Fy(f77)47 b(plotit.f)f(-L.)h(-L/star/lib)d(`ast)p
-Ft(_)p Fy(link)h(-grf`)i(-lgrf)f(-o)h(plotit)427 2677
-y Fk(Compiles)32 b(and)f(links)h(a)g(F)-7 b(ortran)30
-b(program)g(\\plotit".)49 b(The)32 b(\\-grf)6 b(")31
-b(switc)n(h)g(indicates)h(that)g(graphical)427 2777 y(output)c(will)g
-(b)r(e)g(deliv)n(ered)f(through)g(a)g(graphical)f(in)n(terface)h(whic)n
-(h)g(y)n(ou)g(ha)n(v)n(e)g(implemen)n(ted)h(y)n(ourself,)427
-2876 y(whic)n(h)22 b(corresp)r(onds)e(to)h(the)h(in)n(terface)f
-(required)g(b)n(y)h(the)g(curren)n(t)f(v)n(ersion)f(of)h(AST.)i(Here,)f
-(this)g(in)n(terface)427 2976 y(is)28 b(supplied)g(b)n(y)f(means)g(of)h
-(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)227 3112
-y Fy(f77)47 b(plotit.f)f(-L.)h(-L/star/lib)d(`ast)p Ft(_)p
-Fy(link)h(-grf)p Ft(_)p Fy(v2.0`)g(-lgrf)i(-o)g(plotit)427
-3210 y Fk(Compiles)25 b(and)g(links)f(a)h(F)-7 b(ortran)24
-b(program)e(\\plotit".)36 b(The)25 b(\\-grf)p Ft(_)p
-Fk(v2.0")c(switc)n(h)k(indicates)g(that)g(graph-)427
-3310 y(ical)f(output)i(will)e(b)r(e)h(deliv)n(ered)f(through)g(a)g
-(graphical)f(in)n(terface)h(whic)n(h)h(y)n(ou)f(ha)n(v)n(e)f(implemen)n
-(ted)i(y)n(our-)427 3410 y(self,)32 b(whic)n(h)f(corresp)r(onds)e(to)i
-(the)g(in)n(terface)f(required)g(b)n(y)h(v)n(ersion)e(2.0)h(of)h(AST.)h
-(Here,)f(this)g(in)n(terface)427 3509 y(is)d(supplied)g(b)n(y)f(means)g
-(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)-2
-3675 y Fc(Switc)m(hes)n(:)227 3822 y Fk(The)i(follo)n(wing)e(switc)n
-(hes)i(ma)n(y)e(optionally)h(b)r(e)h(giv)n(en)f(to)g(this)h(command)g
-(to)f(mo)r(dify)h(its)g(b)r(eha)n(viour:)340 4089 y Fj(\017)45
-b Fk(\\-csla":)35 b(Ignored.)h(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)e
-(compatibilit)n(y)j(only)-7 b(.)340 4224 y Fj(\017)45
-b Fk(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)f
-(compatibilit)n(y)h(only)-7 b(.)340 4359 y Fj(\017)45
-b Fk(\\-ems":)e(Requests)31 b(that)g(the)h(program)d(b)r(e)i(link)n(ed)
-g(so)g(that)g(error)e(messages)h(pro)r(duced)h(b)n(y)g(the)g(AST)427
-4459 y(library)d(are)f(deliv)n(ered)h(via)g(the)i(Starlink)e(EMS)g
-(\(Error)f(Message)g(Service\))h(library)g(\(Starlink)g(System)427
-4558 y(Note)g(SSN/4\).)37 b(By)27 b(default,)h(error)e(messages)g(are)g
-(simply)i(written)g(to)f(standard)g(error.)340 4693 y
-Fj(\017)45 b Fk(\\-drama":)33 b(Requests)25 b(that)g(the)g(program)e(b)
-r(e)i(link)n(ed)f(so)g(that)h(error)e(messages)g(pro)r(duced)i(b)n(y)f
-(the)h(AST)427 4793 y(library)d(are)g(deliv)n(ered)g(via)h(the)g(DRAMA)
-h(Ers)e(\(Error)f(Rep)r(orting)i(Service\))f(library)-7
-b(.)34 b(By)23 b(default,)i(error)427 4892 y(messages)h(are)h(simply)g
-(written)h(to)g(standard)e(error.)340 5027 y Fj(\017)45
-b Fk(\\-grf)6 b(":)54 b(Requests)37 b(that)g(no)f(argumen)n(ts)g(b)r(e)
-h(generated)f(to)g(sp)r(ecify)h(whic)n(h)g(2D)g(graphics)e(system)i(is)
-427 5127 y(used)c(to)g(displa)n(y)g(output)g(from)g(the)h(AST)f
-(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)g
-(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 5227 y(implemen)n(ted)h(an)e(in)n
-(terface)h(to)f(a)h(new)g(graphics)e(system)i(y)n(ourself)f(and)g(wish)
-h(to)g(pro)n(vide)f(y)n(our)f(o)n(wn)427 5326 y(argumen)n(ts)i(for)h
-(linking)h(with)g(it.)58 b(This)34 b(switc)n(h)h(di\013ers)f(from)g
-(the)h(other)f(\\grf)6 b(")34 b(switc)n(hes)g(in)g(that)h(it)427
-5426 y(assumes)21 b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n
-(ts)h(the)g(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n
-(t)427 5526 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d
-(of)i(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d
-(in)n(terface,)p 0 5607 1512 4 v 73 5661 a Fs(37)138
-5693 y Fr(Or)f(the)f(equiv)l(alen)n(t)g(directory)g(if)i(AST)e(is)h
-(installed)h(in)f(a)g(non-standard)f(lo)r(cation.)p eop
-end
-%%Page: 520 530
-TeXDict begin 520 529 bop 0 52 a FG(520)1988 b Fz(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)427 351 y Fk(this)e(switc)n(h)g
-(will)g(cause)f(\\unresolv)n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r
-(ccur)f(during)h(linking,)g(w)n(arning)e(y)n(ou)h(that)427
-451 y(y)n(ou)24 b(need)g(to)h(implemen)n(t)g(new)f(functions)h(in)f(y)n
-(our)g(graphics)e(mo)r(dule.)37 b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j
-(errors,)d(y)n(ou)i(can)427 551 y(use)34 b(one)f(of)h(the)g(other,)g(v)
-n(ersion-sp)r(eci\014c,)f(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)
-6 b(")32 b(switc)n(h,)k(but)e(these)f(will)427 650 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 750 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-885 y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 984 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 1084 y(V2.0)i(of)h(AST.)340 1219
-y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-1319 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 1454 y Fj(\017)45 b Fk(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-1553 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 1653 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 1752 y(argumen)n(ts)27
-b(for)g(linking)g(with)h(it.)340 1887 y Fj(\017)45 b
-Fk(\\-m)n(ygrf)6 b(":)46 b(This)33 b(switc)n(h)g(has)g(b)r(een)g(sup)r
-(erceeded)g(b)n(y)g(the)g(\\-grf)6 b(")32 b(switc)n(h,)i(but)g(is)f
-(retained)g(in)g(order)427 1987 y(to)26 b(allo)n(w)e(applications)h(to)
-h(b)r(e)g(link)n(ed)f(with)h(a)g(graphics)e(mo)r(dule)i(whic)n(h)g
-(implemen)n(ts)g(the)g(2D)f(in)n(terface)427 2087 y(used)j(b)n(y)f(AST)
-h(V2.0.)36 b(It)28 b(is)g(equiv)-5 b(alen)n(t)27 b(to)h(the)g(\\-grf)p
-Ft(_)p Fk(v2.0")c(switc)n(h.)340 2222 y Fj(\017)45 b
-Fk(\\-pgp":)53 b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n
-(ed)g(so)g(that)h(2D)f(graphical)f(output)i(from)e(the)i(AST)427
-2321 y(library)c(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n
-(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33
-b(\(whic)n(h)h(uses)427 2421 y(GKS)29 b(for)g(its)g(output\).)42
-b(By)29 b(default,)h(no)e(2D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2521 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2656 y Fj(\017)45 b Fk(\\-pgplot":)40 b(Requests)30 b(that)g(the)g
-(program)e(b)r(e)i(link)n(ed)g(so)f(that)h(2D)g(graphical)e(output)i
-(from)g(the)g(AST)427 2755 y(library)25 b(is)h(displa)n(y)n(ed)e(via)i
-(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427 2855 y(By)32
-b(default,)j(no)d(2D)g(graphics)f(pac)n(k)-5 b(age)31
-b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f(error)f(at)h
-(run)g(time)h(if)427 2954 y(AST)28 b(routines)f(are)g(in)n(v)n(ok)n(ed)
-f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-3089 y Fj(\017)45 b Fk(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 3189 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3289 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-3388 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-3523 y Fj(\017)45 b Fk(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 3623 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 3722 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-3822 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-3957 y Fj(\017)45 b Fk(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 4057 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-4156 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 4256 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-4422 y Fc(SLALIB)n(:)227 4568 y Fk(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 4668 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 4768 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 4867 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-4967 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 5066 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-5166 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fk(-fsla)p Ft(")e Fk(and)h Ft(")p Fk(-csla)p Ft(")f Fk(\015ags)h
-(\(previously)f(used)i(for)227 5266 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p 0 5469 3780 12
-v 0 5601 a FA(ast)p Fe(_)p FA(link)p Fe(_)p FA(adam)189
-b Fd(Link)39 b(an)f(AD)m(AM)h(program)d(with)i(the)1581
-5715 y(AST)g(library)2948 5601 y FA(ast)p Fe(_)p FA(link)p
-Fe(_)p FA(adam)p eop end
-%%Page: 521 531
-TeXDict begin 521 530 bop 3643 52 a FG(521)0 351 y Fc(Description:)44
-b Fk(This)21 b(command)e(should)h(only)g(b)r(e)h(used)f(when)h
-(building)f(Starlink)g(AD)n(AM)h(programs)d(whic)n(h)i(use)g(the)227
-451 y(AST)29 b(library)-7 b(,)27 b(in)h(order)f(to)h(generate)f(the)i
-(correct)e(argumen)n(ts)f(to)i(allo)n(w)g(the)g(AD)n(AM)h(\\alink")e
-(command)h(to)227 551 y(link)22 b(the)h(program.)33 b(The)22
-b(argumen)n(ts)f(generated)g(are)g(written)h(to)g(standard)f(output)h
-(but)h(ma)n(y)e(b)r(e)i(substituted)227 650 y(in)n(to)28
-b(the)g(\\alink")e(command)h(line)h(in)g(the)g(standard)e(UNIX)j(w)n(a)
-n(y)d(using)h(bac)n(kw)n(ard)f(quotes)h(\(see)h(b)r(elo)n(w\).)227
-774 y(By)19 b(default,)i(it)f(is)e(assumed)h(that)g(y)n(ou)f(are)g
-(building)i(an)e(AD)n(AM)i(program)d(whic)n(h)i(do)r(es)g(not)g(pro)r
-(duce)f(graphical)227 874 y(output.)37 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)g(are)g(pro)n(vided)g(for)h(linking)g(other)g(t)n(yp)r
-(es)g(of)g(program.)34 b(This)26 b(command)g(should)227
-974 y(not)40 b(b)r(e)g(used)f(when)h(building)g(stand-alone)e(\(non-AD)
-n(AM\))j(programs.)70 b(Use)40 b(the)g(\\ast)p Ft(_)p
-Fk(link")e(command)227 1073 y(instead.)0 1222 y Fc(In)m(v)m(o)s
-(cation:)123 b Ft(alink)41 b(program.f)f(-L/star/lib)f(`ast_link_adam)f
-([switches]`)0 1372 y Fc(Examples:)227 1509 y Fy(alink)47
-b(display.f)e(-L/star/lib)g(`ast)p Ft(_)p Fy(link)p Ft(_)p
-Fy(adam)e(-pgplot`)427 1607 y Fk(Compiles)37 b(and)h(links)f(an)h(AD)n
-(AM)g(F)-7 b(ortran)36 b(program)g(called)h(\\displa)n(y")f(whic)n(h)h
-(uses)h(the)g(standard)427 1707 y(v)n(ersion)26 b(of)i(PGPLOT)e(for)h
-(graphical)f(output.)227 1840 y Fy(alink)47 b(plotit.f)e(-L.)i
-(-L/star/lib)e(`ast)p Ft(_)p Fy(link)p Ft(_)p Fy(adam)e(-grf`)k(-lgrf)
-427 1939 y Fk(Compiles)34 b(and)f(links)g(an)h(AD)n(AM)g(F)-7
-b(ortran)33 b(program)e(\\plotit".)55 b(The)33 b(\\-grf)6
-b(")32 b(switc)n(h)i(indicates)f(that)427 2039 y(graphical)24
-b(output)h(will)h(b)r(e)f(deliv)n(ered)g(through)f(a)h(graphical)e(in)n
-(terface)i(whic)n(h)g(y)n(ou)f(ha)n(v)n(e)g(implemen)n(ted)427
-2138 y(y)n(ourself,)35 b(whic)n(h)f(corresp)r(onds)e(to)i(the)h(in)n
-(terface)e(required)h(b)n(y)g(the)g(curren)n(t)f(v)n(ersion)g(of)h
-(AST.)h(Here,)427 2238 y(this)28 b(in)n(terface)f(is)h(supplied)g(b)n
-(y)f(means)g(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)227
-2371 y Fy(alink)47 b(plotit.f)e(-L.)i(-L/star/lib)e(`ast)p
-Ft(_)p Fy(link)p Ft(_)p Fy(adam)e(-grf)p Ft(_)p Fy(v2.0`)i(-lgrf)427
-2470 y Fk(Compiles)18 b(and)h(links)f(an)g(AD)n(AM)i(F)-7
-b(ortran)17 b(program)g(\\plotit".)33 b(The)18 b(\\-grf)p
-Ft(_)p Fk(v2.0")e(switc)n(h)i(indicates)g(that)427 2570
-y(graphical)24 b(output)h(will)h(b)r(e)f(deliv)n(ered)g(through)f(a)h
-(graphical)e(in)n(terface)i(whic)n(h)g(y)n(ou)f(ha)n(v)n(e)g(implemen)n
-(ted)427 2669 y(y)n(ourself,)c(whic)n(h)f(corresp)r(onds)f(to)h(the)g
-(in)n(terface)g(required)f(b)n(y)h(v)n(ersion)f(2.0)g(of)h(AST.)h
-(Here,)h(this)e(in)n(terface)427 2769 y(is)28 b(supplied)g(b)n(y)f
-(means)g(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)-2
-2930 y Fc(Switc)m(hes)n(:)227 3077 y Fk(The)i(follo)n(wing)e(switc)n
-(hes)i(ma)n(y)e(optionally)h(b)r(e)h(giv)n(en)f(to)g(this)h(command)g
-(to)f(mo)r(dify)h(its)g(b)r(eha)n(viour:)340 3337 y Fj(\017)45
-b Fk(\\-csla":)35 b(Ignored.)h(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)e
-(compatibilit)n(y)j(only)-7 b(.)340 3469 y Fj(\017)45
-b Fk(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)f
-(compatibilit)n(y)h(only)-7 b(.)340 3602 y Fj(\017)45
-b Fk(\\-grf)6 b(":)54 b(Requests)37 b(that)g(no)f(argumen)n(ts)g(b)r(e)
-h(generated)f(to)g(sp)r(ecify)h(whic)n(h)g(2D)g(graphics)e(system)i(is)
-427 3702 y(used)c(to)g(displa)n(y)g(output)g(from)g(the)h(AST)f
-(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)g
-(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3801 y(implemen)n(ted)h(an)e(in)n
-(terface)h(to)f(a)h(new)g(graphics)e(system)i(y)n(ourself)f(and)g(wish)
-h(to)g(pro)n(vide)f(y)n(our)f(o)n(wn)427 3901 y(argumen)n(ts)i(for)h
-(linking)h(with)g(it.)58 b(This)34 b(switc)n(h)h(di\013ers)f(from)g
-(the)h(other)f(\\grf)6 b(")34 b(switc)n(hes)g(in)g(that)h(it)427
-4000 y(assumes)21 b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n
-(ts)h(the)g(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n
-(t)427 4100 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d
-(of)i(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d
-(in)n(terface,)427 4200 y(this)j(switc)n(h)g(will)g(cause)f(\\unresolv)
-n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r(ccur)f(during)h(linking,)g(w)n
-(arning)e(y)n(ou)h(that)427 4299 y(y)n(ou)24 b(need)g(to)h(implemen)n
-(t)g(new)f(functions)h(in)f(y)n(our)g(graphics)e(mo)r(dule.)37
-b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j(errors,)d(y)n(ou)i(can)427
-4399 y(use)34 b(one)f(of)h(the)g(other,)g(v)n(ersion-sp)r(eci\014c,)f
-(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)6 b(")32
-b(switc)n(h,)k(but)e(these)f(will)427 4499 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 4598 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-4731 y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 4830 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 4930 y(V2.0)i(of)h(AST.)340 5062
-y Fj(\017)45 b Fk(\\-grf)p Ft(_)p Fk(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-5162 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 5295 y Fj(\017)45 b Fk(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-5394 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 5494 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 5593 y(argumen)n(ts)20
-b(for)h(linking)g(with)h(it.)35 b(By)21 b(default,)i(error)c(messages)h
-(are)g(deliv)n(ered)g(in)i(the)g(standard)e(AD)n(AM)427
-5693 y(w)n(a)n(y)27 b(via)g(the)h(EMS)f(Error)e(Message)h(Service)h
-(\(Starlink)h(System)f(Note)h(SSN/4\).)p eop end
-%%Page: 522 532
-TeXDict begin 522 531 bop 0 52 a FG(522)1988 b Fz(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)340 351 y Fj(\017)45
-b Fk(\\-m)n(ygrf)6 b(":)35 b(This)26 b(switc)n(h)g(has)g(b)r(een)h(sup)
-r(erceeded)f(b)n(y)g(the)h(\\-grf)6 b(")25 b(switc)n(h,)h(but)h(is)f
-(retained)g(in)h(order)e(to)427 451 y(allo)n(w)j(applications)g(to)h(b)
-r(e)g(link)n(ed)g(with)h(a)e(graphics)g(mo)r(dule)h(whic)n(h)g
-(implemen)n(ts)g(the)g(in)n(terface)g(used)427 551 y(b)n(y)f(AST)g
-(V2.0.)36 b(It)28 b(is)f(equiv)-5 b(alen)n(t)28 b(to)f(the)h(\\-grf)p
-Ft(_)p Fk(v2.0")c(switc)n(h.)340 683 y Fj(\017)45 b Fk(\\-pgp":)53
-b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n(ed)g(so)g(that)h
-(2D)f(graphical)f(output)i(from)e(the)i(AST)427 783 y(library)c(is)h
-(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n(ersion)g(of)h(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33 b(\(whic)n(h)h(uses)427
-883 y(GKS)25 b(for)g(its)g(output\).)36 b(By)25 b(default,)h(no)f
-(graphics)e(pac)n(k)-5 b(age)23 b(is)i(link)n(ed)g(and)g(this)g(will)g
-(result)g(in)g(an)g(error)427 982 y(at)j(run)f(time)h(if)g(AST)g
-(routines)f(are)g(in)n(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e
-(graphical)g(output.)340 1115 y Fj(\017)45 b Fk(\\-pgplot":)40
-b(Requests)30 b(that)g(the)g(program)e(b)r(e)i(link)n(ed)g(so)f(that)h
-(2D)g(graphical)e(output)i(from)g(the)g(AST)427 1215
-y(library)25 b(is)h(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g
-(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)
--5 b(age.)427 1314 y(By)29 b(default,)h(no)e(graphics)g(pac)n(k)-5
-b(age)27 b(is)i(link)n(ed)g(and)g(this)g(will)g(result)g(in)g(an)g
-(error)e(at)h(run)h(time)h(if)f(AST)427 1414 y(routines)e(are)g(in)n(v)
-n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-1547 y Fj(\017)45 b Fk(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 1646 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 1746 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-1846 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-1978 y Fj(\017)45 b Fk(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 2078 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 2178 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2277 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2410 y Fj(\017)45 b Fk(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 2510 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-2609 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 2709 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-2871 y Fc(SLALIB)n(:)227 3017 y Fk(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 3117 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 3216 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 3316 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-3416 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 3515 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-3615 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fk(-fsla)p Ft(")e Fk(and)h Ft(")p Fk(-csla)p Ft(")f Fk(\015ags)h
-(\(previously)f(used)i(for)227 3714 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p eop end
-%%Page: 523 533
-TeXDict begin 523 532 bop 3643 52 a FG(523)0 351 y FA(F)134
-b(FITS-W)l(CS)44 b(Co)l(v)l(erage)0 605 y FG(This)32
-b(app)s(endix)f(giv)m(es)i(details)h(of)e(the)h(FitsChan)f(class)h
-(implemen)m(tation)h(of)f(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)0
-718 y(in)25 b(the)h(FITS-W)m(CS)g(pap)s(ers)e(a)m(v)-5
-b(ailable)28 b(at)f(h)m(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p
-Fy(_)p FG(w)m(cs.h)m(tml.)44 b(These)25 b(con)m(v)m(en)m(tions)0
-831 y(are)35 b(used)f(only)h(if)g(the)g(Enco)s(ding)f(attribute)h(of)g
-(the)g(FitsChan)g(has)f(the)h(v)-5 b(alue)35 b(\\FITS-W)m(CS")h
-(\(whether)0 944 y(set)f(explicitly)g(or)f(defaulted\).)52
-b(It)34 b(should)f(alw)m(a)m(ys)i(b)s(e)f(p)s(ossible)f(for)h(a)g(F)-8
-b(rameSet)36 b(to)e(b)s(e)g(read)f(\(using)h(the)0 1057
-y(AST)p Fy(_)p FG(READ)20 b(function\))h(from)f(a)h(FitsChan)f(con)m
-(taining)j(a)e(header)f(whic)m(h)g(conforms)h(to)g(these)g(con)m(v)m
-(en)m(tions.)0 1170 y(Ho)m(w)m(ev)m(er,)30 b(only)c(those)i(F)-8
-b(rameSets)27 b(whic)m(h)g(are)g(compatible)h(with)e(the)h(FITS-W)m(CS)
-f(mo)s(del)h(can)g(b)s(e)f Fx(written)0 1283 y FG(to)e(a)f(FitsChan)f
-(using)h(the)g(AST)p Fy(_)p FG(WRITE)e(function.)38 b(F)-8
-b(or)24 b(instance,)h(if)e(the)g(curren)m(t)f(F)-8 b(rame)24
-b(of)f(a)g(F)-8 b(rameSet)0 1396 y(is)28 b(re-mapp)s(ed)e(using,)i(sa)m
-(y)-8 b(,)30 b(an)d(arbitrary)g(MathMap)i(then)e(the)h(F)-8
-b(rameSet)29 b(will)f(no)f(longer)h(b)s(e)f(compatible)0
-1508 y(with)j(the)h(FITS-W)m(CS)f(mo)s(del,)g(and)g(so)g(will)h(not)g
-(b)s(e)f(written)g(out)h(successfully)f(to)h(a)g(FitsChan.)0
-1672 y(The)36 b(follo)m(wing)h(sub-sections)g(describ)s(e)e(the)i
-(details)g(of)f(the)h(implemen)m(tation)g(of)g(eac)m(h)g(of)f(the)h
-(\014rst)e(four)0 1785 y(FITS-W)m(CS)e(pap)s(ers.)49
-b(Here,)35 b(the)f(term)f(\\pixel)h(axes")h(is)e(used)g(to)h(refer)f
-(to)i(the)e(FITS)g(pixel)h(co)s(ordinates)0 1898 y(\(i.e.)72
-b(the)41 b(cen)m(tre)g(of)g(the)g(\014rst)e(image)j(pixel)f(has)f(a)h
-(v)-5 b(alue)41 b(1.0)g(on)g(eac)m(h)g(pixel)g(axis\);)47
-b(the)40 b(term)h(\\IW)m(C)0 2011 y(axes")35 b(is)f(used)f(to)i(refer)e
-(to)i(the)f(axes)g(of)g(the)g(In)m(termediate)i(W)-8
-b(orld)34 b(Co)s(ordinate)g(system;)i(and)d(the)h(term)0
-2124 y(\\W)m(CS)28 b(axes")g(is)g(used)e(to)i(refer)f(to)h(the)g(axes)g
-(of)g(the)f(\014nal)g(ph)m(ysical)h(co)s(ordinate)g(system)g(describ)s
-(ed)e(b)m(y)h(the)0 2236 y(CTYPE)p Fx(i)39 b FG(k)m(eyw)m(ords.)0
-2532 y Fw(F.1)113 b(P)m(ap)s(er)37 b(I)g(-)h(General)h(Linear)f(Co)s
-(ordinates)0 2755 y FG(When)27 b(reading)g(a)g(F)-8 b(rameSet)29
-b(from)d(a)h(FitsChan,)h(these)g(con)m(v)m(en)m(tions)h(are)e(used)f
-(if)h(the)h(CTYPE)p Fx(i)35 b FG(k)m(eyw)m(ord)0 2868
-y(v)-5 b(alues)42 b(within)f(the)h(FitsChan)g(do)f(not)h(conform)g(to)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(later)g(pap)s(ers,)i
-(in)0 2981 y(whic)m(h)33 b(case)i(the)f(axes)g(are)g(assumed)f(to)h(b)s
-(e)f(linear.)51 b(When)33 b(writing)h(a)g(F)-8 b(rameSet)34
-b(to)h(a)f(FitsChan,)g(these)0 3094 y(con)m(v)m(en)m(tions)41
-b(are)f(used)f(for)g(axes)h(whic)m(h)f(are)h(describ)s(ed)e(b)m(y)h(a)h
-(simple)f(F)-8 b(rame)40 b(\()p Fx(i.e.)67 b FG(not)40
-b(a)g(SkyF)-8 b(rame,)0 3207 y(Sp)s(ecF)g(rame,)31 b
-Fx(etc.)p FG(\).)0 3370 y(T)-8 b(able)31 b(1)g(describ)s(es)e(the)i
-(use)f(made)g(b)m(y)h(AST)e(of)i(eac)m(h)g(k)m(eyw)m(ord)g(de\014ned)e
-(b)m(y)i(FITS-W)m(CS)f(pap)s(er)f(I.)0 3663 y FE(F.1.1)105
-b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9 b(rite)35
-b(Op)s(eration)0 3885 y FG(When)f(writing)g(a)h(F)-8
-b(rameSet)35 b(in)f(whic)m(h)f(the)i(W)m(CS)f(F)-8 b(rame)35
-b(is)f(a)h(simple)f(F)-8 b(rame)35 b(to)g(a)f(FitsChan,)h(success)0
-3998 y(dep)s(ends)28 b(on)i(the)g(Mapping)g(from)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)31 b(in)f(the)g(F)-8
-b(rameSet\))32 b(to)e(the)g(W)m(CS)0 4111 y(F)-8 b(rame)31
-b(b)s(eing)f(linear.)41 b(The)30 b(write)h(op)s(eration)g(will)f(fail)h
-(if)g(this)f(is)g(not)h(the)g(case.)0 4404 y FE(F.1.2)105
-b(Use)35 b(and)g(Choice)g(of)g(CTYPE)p Fa(i)45 b FE(k)m(eyw)m(ords)0
-4626 y FG(When)37 b(reading)g(a)h(F)-8 b(rameSet)38 b(from)f(a)g
-(FitsChan)g(the)h(CTYPE)p Fx(i)45 b FG(v)-5 b(alues)38
-b(in)e(the)i(FitsChan)f(are)g(used)g(to)0 4739 y(set)32
-b(the)f(Sym)m(b)s(ol)g(attributes)h(of)f(the)g(corresp)s(onding)g(W)m
-(CS)g(F)-8 b(rame.)44 b(The)31 b(Lab)s(el)g(attributes)h(of)f(the)g(W)m
-(CS)0 4852 y(F)-8 b(rame)38 b(are)f(set)g(from)g(the)g(CNAME)p
-Fx(i)46 b FG(k)m(eyw)m(ords,)39 b(if)e(presen)m(t)g(in)f(the)h(header.)
-60 b(Otherwise)37 b(they)g(are)g(set)0 4965 y(from)42
-b(the)g(CTYPE)p Fx(i)51 b FG(commen)m(ts)43 b(strings)g(in)f(the)g
-(header,)k(so)c(long)h(as)g(eac)m(h)h(axis)e(has)h(a)f(unique)g(non-)0
-5078 y(blank)d(commen)m(t.)67 b(Otherwise,)41 b(the)e(Lab)s(el)g
-(attributes)g(are)h(set)f(to)h(the)f(CTYPE)p Fx(i)47
-b FG(v)-5 b(alues.)67 b(The)38 b(ab)s(o)m(v)m(e)0 5191
-y(pro)s(cedure)c(is)h(o)m(v)m(er-ridden)h(if)f(the)g(axis)g(t)m(yp)s
-(es)g(conform)g(to)h(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)c(in)g
-(pap)s(er)g(I)s(I)g(or)0 5304 y(I)s(I)s(I,)29 b(as)i(describ)s(ed)e(b)s
-(elo)m(w.)0 5467 y(When)g(writing)h(a)g(F)-8 b(rameSet)31
-b(to)f(a)g(FitsChan,)g(eac)m(h)h(CTYPE)p Fx(i)38 b FG(v)-5
-b(alue)30 b(is)g(set)g(to)g(the)g(v)-5 b(alue)30 b(of)g(the)g(Sym)m(b)s
-(ol)0 5580 y(attribute)d(of)g(the)g(corresp)s(onding)e(axis)i(in)g(the)
-f(F)-8 b(rame)28 b(b)s(eing)e(written.)40 b(If)26 b(a)h(v)-5
-b(alue)27 b(has)f(b)s(een)g(set)h(explicitly)0 5693 y(for)i(the)g(axis)
-h(Lab)s(el)f(attribute,)h(it)g(is)f(used)g(as)g(the)h(axis)f(commen)m
-(t)i(\(except)f(that)g(an)m(y)f(existing)i(commen)m(ts)p
-eop end
-%%Page: 524 534
-TeXDict begin 524 533 bop 0 52 a FG(524)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 853 3841 4 v -2
-965 4 113 v 115 932 a FE(Keyw)m(ord)p 640 965 V 798 w(Read)p
-2240 965 V 1352 w(W)-9 b(rite)p 3839 965 V 0 969 3841
-4 v -2 1307 4 339 v 50 1048 a FG(W)m(CSAXES)p Fx(a)p
-640 1307 V 140 w FG(Ignored.)p 2240 1307 V 1273 w(Set)27
-b(to)h(the)f(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(the)h(W)m(CS)2291
-1161 y(F)-8 b(rame)51 b(-)g(only)f(written)g(if)h(di\013eren)m(t)f(to)
-2291 1274 y(NAXIS.)p 3839 1307 V -2 1533 4 226 v 50 1386
-a(CR)-10 b(V)g(AL)p Fx(ia)p 640 1533 V 262 w FG(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1499 y(ping.)p 2240 1533 V 2291 1386 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1499
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1533 V
--2 1759 V 50 1612 a(CRPIX)p Fx(ja)p 640 1759 V 272 w
-FG(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1725 y(ping.)p 2240 1759 V 2291 1612 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1725
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1759 V
--2 1985 V 50 1838 a(CDEL)-8 b(T)p Fx(ia)p 640 1985 V
-256 w FG(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1951 y(ping.)p 2240 1985 V 2291 1838 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 1951 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 1985 V -2 2211 V 50 2064 a(CR)m(OT)-8
-b(A)p Fx(i)p 640 2211 V 287 w FG(Used)24 b(to)i(create)g(the)f(pixel)g
-(to)h(W)m(CS)f(Map-)692 2177 y(ping.)p 2240 2211 V 2291
-2064 a(Only)20 b(written)i(in)e(FITS-AIPS)g(and)h(FITS-)2291
-2177 y(AIPS++)29 b(enco)s(dings.)p 3839 2211 V -2 2888
-4 678 v 50 2290 a(CTYPE)p Fx(ia)p 640 2888 V 244 w FG(Used)66
-b(to)h(c)m(ho)s(ose)h(the)f(class)g(and)f(at-)692 2403
-y(tributes)46 b(of)h(the)f(W)m(CS)h(F)-8 b(rame,)52 b(and)46
-b(to)692 2516 y(create)63 b(the)f(pixel)g(to)g(W)m(CS)g(Mapping)692
-2629 y(\(note,)35 b(\\STOKES")d(and)h(\\COMPLEX")692
-2741 y(axes)53 b(are)g(treated)h(as)f(unkno)m(wn)e(linear)692
-2854 y(axes\).)p 2240 2888 V 2291 2290 a(Alw)m(a)m(ys)36
-b(written)f(\(see)g(\\Use)h(and)d(Choice)2291 2403 y(of)e(CTYPE)e(k)m
-(eyw)m(ords")i(b)s(elo)m(w\).)p 3839 2888 V -2 3340 4
-452 v 50 2967 a(CUNIT)p Fx(ia)p 640 3340 V 267 w FG(Used)25
-b(to)i(set)g(the)f(Units)g(attributes)h(of)f(the)692
-3080 y(W)m(CS)k(F)-8 b(rame.)p 2240 3340 V 2291 2967
-a(Only)32 b(written)h(if)g(the)g(Units)f(attribute)i(of)2291
-3080 y(the)39 b(W)m(CS)f(F)-8 b(rame)39 b(has)f(b)s(een)g(set)h
-(explic-)2291 3193 y(itly)-8 b(.)84 b(If)44 b(so,)49
-b(the)44 b(Units)h(v)-5 b(alue)45 b(for)f(eac)m(h)2291
-3306 y(axis)31 b(is)f(used)g(as)h(the)f(CUNIT)g(v)-5
-b(alue.)p 3839 3340 V -2 3566 4 226 v 50 3419 a(PC)p
-Fx(i)p Fy(_)p Fx(j)13 b(a)p 640 3566 V 351 w FG(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3532 y(ping.)p 2240 3566 V 2291 3419 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3532 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 3566 V -2 3904 4 339 v 50 3645
-a(CD)p Fx(i)p Fy(_)p Fx(j)13 b(a)p 640 3904 V 344 w FG(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3758 y(ping.)p 2240 3904 V 2291 3645 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3758 y(tribute)23 b(of)g(the)h(FitsChan)e(is)i
-(set)f(to)h(a)f(non-)2291 3871 y(zero)31 b(v)-5 b(alue.)p
-3839 3904 V -2 4017 4 113 v 50 3983 a(PV)p Fx(i)p Fy(_)p
-Fx(ma)p 640 4017 V 316 w FG(Ignored)30 b(for)g(linear)g(axes.)p
-2240 4017 V 683 w(Not)h(written)g(if)f(the)h(axes)g(are)g(linear.)p
-3839 4017 V -2 4130 V 50 4096 a(PS)p Fx(i)p Fy(_)p Fx(ma)p
-640 4130 V 333 w FG(Ignored.)p 2240 4130 V 1273 w(Not)g(used.)p
-3839 4130 V -2 4582 4 452 v 50 4209 a(W)m(CSNAME)p Fx(a)p
-640 4582 V 108 w FG(Used)41 b(to)h(set)g(the)f(Domain)h(attribute)g(of)
-692 4322 y(the)30 b(W)m(CS)g(F)-8 b(rame.)p 2240 4582
-V 2291 4209 a(Only)34 b(written)h(if)f(the)h(Domain)g(attribute)2291
-4322 y(of)23 b(the)f(W)m(CS)h(F)-8 b(rame)23 b(has)f(b)s(een)g(set)h
-(explic-)2291 4435 y(itly)-8 b(.)40 b(If)26 b(so,)h(the)f(Domain)g(v)-5
-b(alue)26 b(is)g(used)f(as)2291 4548 y(the)31 b(W)m(CSNAME)g(v)-5
-b(alue.)p 3839 4582 V -2 4695 4 113 v 50 4661 a(CRDER)p
-Fx(ia)p 640 4695 V 237 w FG(Ignored.)p 2240 4695 V 1273
-w(Not)31 b(used.)p 3839 4695 V -2 4808 V 50 4774 a(CSYER)p
-Fx(ia)p 640 4808 V 254 w FG(Ignored.)p 2240 4808 V 1273
-w(Not)g(used.)p 3839 4808 V 0 4811 3841 4 v 986 5086
-a(T)-8 b(able)31 b(1:)41 b(Use)31 b(of)g(FITS-W)m(CS)f(P)m(ap)s(er)g(I)
-g(k)m(eyw)m(ords)p eop end
-%%Page: 525 535
-TeXDict begin 525 534 bop 0 52 a Fz(F.1)92 b(P)m(ap)s(er)30
-b(I)g(-)h(General)g(Linear)f(Co)s(ordinates)1933 b FG(525)0
-351 y(in)33 b(the)g(FitsChan)h(tak)m(e)g(precedence)g(if)f(the)h(k)m
-(eyw)m(ord)g(v)-5 b(alue)33 b(has)g(not)h(c)m(hanged\).)50
-b(The)33 b(ab)s(o)m(v)m(e)i(pro)s(cedure)0 464 y(is)d(o)m(v)m
-(er-ridden)g(if)f(the)h(F)-8 b(rame)32 b(is)g(a)g(SkyF)-8
-b(rame)32 b(or)f(a)h(Sp)s(ecF)-8 b(rame,)33 b(in)e(whic)m(h)g(case)i
-(the)f(CTYPE)p Fx(i)39 b FG(v)-5 b(alue)32 b(is)0 577
-y(deriv)m(ed)i(from)e(the)i(System)f(attribute)i(of)e(the)h(F)-8
-b(rame)34 b(and)f(the)h(nature)f(of)g(the)h(pixel)g(to)g(W)m(CS)g
-(Mapping)0 690 y(according)d(to)g(the)g(con)m(v)m(en)m(tions)h(of)f
-(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I,)g(as)i(describ)s(ed)e(b)s(elo)m
-(w.)0 986 y FE(F.1.3)105 b(Choice)35 b(of)g(Reference)h(P)m(oin)m(t)0
-1210 y FG(When)31 b(writing)g(a)g(F)-8 b(rameSet)32 b(to)g(a)f
-(FitsChan,)h(the)f(pixel)g(co)s(ordinates)h(of)f(the)g(reference)g(p)s
-(oin)m(t)g(for)g(linear)0 1323 y(axes)g(\(i.e.)42 b(the)30
-b(CRPIX)p Fx(j)43 b FG(v)-5 b(alues\))31 b(are)g(c)m(hosen)g(as)g
-(follo)m(ws:)136 1590 y Fu(\017)46 b FG(If)35 b(the)h(F)-8
-b(rameSet)37 b(is)e(b)s(eing)g(written)h(to)g(a)g(FitsChan)f(whic)m(h)g
-(previously)h(con)m(tained)g(a)g(set)g(of)g(axis)227
-1703 y(descriptions)i(with)f(the)g(same)h(iden)m(tifying)g(letter,)i
-(then)d(the)h(previous)f(CR)-10 b(V)g(AL)p Fx(j)13 b
-FG(v)-5 b(alues)37 b(are)h(con-)227 1816 y(v)m(erted)c(in)m(to)h(the)f
-(co)s(ordinate)g(system)g(of)f(the)h(F)-8 b(rame)34 b(b)s(eing)f
-(written)h(\(if)g(p)s(ossible\).)50 b(These)33 b(v)-5
-b(alues)227 1929 y(are)29 b(then)e(transformed)h(in)m(to)h(the)f(pixel)
-g(F)-8 b(rame,)30 b(and)e(the)g(closest)h(in)m(teger)h(pixel)e(v)-5
-b(alues)29 b(are)f(used)f(as)227 2042 y(the)k(CRPIX)f(k)m(eyw)m(ords.)
-136 2233 y Fu(\017)46 b FG(If)34 b(the)g(ab)s(o)m(v)m(e)h(step)e(could)
-h(not)g(b)s(e)f(p)s(erformed)g(for)g(an)m(y)h(reason,)h(the)f(cen)m
-(tral)h(pixel)f(is)g(used)f(as)h(the)227 2346 y(reference)e(p)s(oin)m
-(t.)45 b(This)30 b(requires)h(the)h(image)h(dimensions)e(to)h(b)s(e)f
-(presen)m(t)h(in)f(the)h(FitsChan)f(in)g(the)227 2459
-y(form)f(of)h(a)f(set)h(of)g(NAXIS)p Fx(j)43 b FG(k)m(eyw)m(ord)31
-b(v)-5 b(alues.)136 2650 y Fu(\017)46 b FG(If)33 b(b)s(oth)f(the)h(ab)s
-(o)m(v)m(e)g(t)m(w)m(o)i(steps)d(failed)i(for)e(an)m(y)h(axis,)h(then)f
-(the)g(pixel)g(reference)g(p)s(osition)g(is)f(set)i(to)227
-2763 y(a)d(v)-5 b(alue)31 b(of)f(1.0)i(on)e(the)h(pixel)f(axis.)0
-3031 y(The)g(pixel)h(to)g(W)m(CS)f(Mapping)g(is)h(then)f(used)f(to)j
-(\014nd)c(the)j(corresp)s(onding)e(CR)-10 b(V)g(AL)p
-Fx(j)13 b FG(v)-5 b(alues.)0 3195 y(Again,)29 b(the)f(ab)s(o)m(v)m(e)h
-(pro)s(cedure)e(is)h(o)m(v)m(er-ridden)g(if)g(the)g(F)-8
-b(rame)28 b(is)g(a)g(SkyF)-8 b(rame)29 b(or)e(a)h(Sp)s(ecF)-8
-b(rame,)29 b(in)f(whic)m(h)0 3308 y(case)j(the)g(con)m(v)m(en)m(tions)h
-(of)f(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I)g(are)i(used)f(as)g(describ)s
-(ed)f(b)s(elo)m(w.)0 3604 y FE(F.1.4)105 b(Choice)35
-b(of)g(Axis)g(Ordering)0 3828 y FG(When)e(reading)h(a)f(F)-8
-b(rameSet)35 b(from)e(a)h(FitsChan,)g(W)m(CS)f(axis)h
-Fp(i)g FG(in)f(the)h(curren)m(t)f(F)-8 b(rame)34 b(of)g(the)f
-(resulting)0 3941 y(F)-8 b(rameSet)32 b(corresp)s(onds)d(to)i(axis)g
-Fp(i)f FG(in)g(the)h(FITS)e(header.)0 4105 y(When)37
-b(writing)h(a)g(F)-8 b(rameSet)39 b(to)f(a)g(FitsChan,)i(the)e(axis)g
-(ordering)f(for)h(the)f(FITS)g(header)h(is)g(c)m(hosen)g(to)0
-4218 y(mak)m(e)30 b(the)e(CD)p Fx(i)p Fy(_)p Fx(j)42
-b FG(or)28 b(PC)p Fx(i)p Fy(_)p Fx(j)41 b FG(matrix)29
-b(predominately)g(diagonal.)41 b(This)28 b(means)h(that)g(the)f(axis)i
-(n)m(um)m(b)s(ering)0 4331 y(in)g(the)h(FITS)e(header)h(will)h(not)g
-(necessarily)g(b)s(e)f(the)g(same)h(as)g(that)g(in)f(the)g(AST)g(F)-8
-b(rame.)0 4627 y FE(F.1.5)105 b(Alternate)34 b(Axis)h(Descriptions)0
-4851 y FG(When)41 b(reading)h(a)f(F)-8 b(rameSet)43 b(from)e(a)g
-(FitsChan)h(whic)m(h)f(con)m(tains)h(alternate)h(axis)f(descriptions,)i
-(eac)m(h)0 4964 y(complete)37 b(set)f(of)g(axis)g(descriptions)f
-(results)h(in)f(a)h(single)g(F)-8 b(rame)37 b(b)s(eing)e(added)g(to)h
-(the)g(\014nal)f(F)-8 b(rameSet,)0 5077 y(connected)42
-b(via)f(an)g(appropriate)f(Mapping)h(to)g(the)g(base)g(pixel)g(F)-8
-b(rame.)73 b(The)40 b(Iden)m(t)h(attribute)g(of)g(the)0
-5190 y(F)-8 b(rame)36 b(is)f(set)g(to)h(hold)e(the)i(single)f(alphab)s
-(etical)h(c)m(haracter)h(whic)m(h)d(is)h(used)f(to)i(iden)m(tify)f(the)
-g(set)h(of)f(axis)0 5303 y(descriptions)30 b(within)g(the)h(FITS)e
-(header)h(\(a)i(single)f(space)g(is)f(used)g(for)g(the)g(primary)g
-(axis)h(descriptions\).)0 5467 y(When)37 b(writing)h(a)g(F)-8
-b(rameSet)39 b(to)f(a)g(FitsChan,)h(it)f(is)g(assumed)f(that)h(the)g
-(base)f(F)-8 b(rame)39 b(represen)m(ts)e(pixel)0 5580
-y(co)s(ordinates,)g(and)e(the)g(curren)m(t)g(F)-8 b(rame)36
-b(represen)m(ts)f(the)h(primary)e(axis)i(descriptions.)55
-b(If)34 b(there)i(are)f(an)m(y)0 5693 y(other)23 b(F)-8
-b(rames)24 b(presen)m(t)e(in)h(the)g(F)-8 b(rameSet,)25
-b(an)e(attempt)h(is)f(made)f(to)i(create)g(a)f(complete)i(set)e(of)g
-(\\alternate")p eop end
-%%Page: 526 536
-TeXDict begin 526 535 bop 0 52 a FG(526)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)0 351 y FG(set)j(of)f(k)m(eyw)m(ords)
-h(describing)f(eac)m(h)i(additional)f(F)-8 b(rame.)48
-b(The)32 b(\014rst)f(c)m(haracter)j(in)e(the)h(Iden)m(t)f(attribute)h
-(of)0 464 y(the)i(F)-8 b(rame)35 b(is)g(used)f(as)h(the)g(single)g(c)m
-(haracter)h(descriptor)f(to)g(b)s(e)f(app)s(ended)f(to)j(the)e(k)m(eyw)
-m(ord,)j(with)d(the)0 577 y(pro)m(viso)c(that)h(a)f(giv)m(en)h(c)m
-(haracter)h(can)e(only)g(b)s(e)f(used)g(once.)42 b(If)29
-b(a)i(second)f(F)-8 b(rame)30 b(is)g(found)f(with)h(an)f(Iden)m(t)0
-690 y(attribute)g(whic)m(h)e(has)h(already)g(b)s(een)f(used,)h(its)g
-(Iden)m(t)g(attribute)h(is)f(ignored)g(and)f(the)h(next)g(free)g(c)m
-(haracter)0 803 y(is)c(used)f(instead.)39 b(Note,)26
-b(failure)f(to)f(write)g(a)g(set)h(of)f(alternate)h(axis)g
-(descriptions)e(do)s(es)h(not)g(result)g(in)f(failure)0
-916 y(of)32 b(the)g(en)m(tire)g(write)g(op)s(eration:)44
-b(the)32 b(primary)f(axis)h(descriptions)g(are)g(still)g(written,)h
-(together)g(with)e(an)m(y)0 1029 y(other)g(alternate)h(axis)f
-(descriptions)f(whic)m(h)g(can)h(b)s(e)e(pro)s(duced)g(successfully)-8
-b(.)0 1335 y Fw(F.2)113 b(P)m(ap)s(er)37 b(I)s(I)g(-)h(Celestial)g(Co)s
-(ordinates)0 1562 y FG(These)33 b(con)m(v)m(en)m(tions)i(are)f(used)e
-(when)g(reading)i(a)f(F)-8 b(rameSet)34 b(from)f(a)h(FitsChan)f(con)m
-(taining)h(appropriate)0 1675 y(CTYPE)p Fx(i)39 b FG(v)-5
-b(alues,)31 b(and)e(when)h(writing)g(a)h(F)-8 b(rameSet)31
-b(in)g(whic)m(h)f(the)g(W)m(CS)h(F)-8 b(rame)31 b(is)f(a)h(SkyF)-8
-b(rame.)0 1841 y(T)g(able)31 b(2)g(describ)s(es)e(the)i(use)f(made)g(b)
-m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g(whose)f(meaning)h(is)f
-(de\014ned)f(or)h(extended)0 1954 y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)
-s(I.)0 2257 y FE(F.2.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)
-j(W)-9 b(rite)35 b(Op)s(eration)0 2484 y FG(When)43 b(writing)g(a)h(F)
--8 b(rameSet)45 b(in)e(whic)m(h)g(the)g(W)m(CS)h(F)-8
-b(rame)44 b(is)f(a)h(SkyF)-8 b(rame)44 b(to)g(a)g(FitsChan,)i(success)0
-2597 y(dep)s(ends)29 b(on)h(the)g(follo)m(wing)i(conditions)f(b)s(eing)
-f(met:)111 2870 y(1.)46 b(The)h(Mapping)f(from)h(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)48 b(in)e(the)h(F)-8
-b(rameSet\))49 b(to)e(the)g(W)m(CS)227 2983 y(SkyF)-8
-b(rame)31 b(includes)f(a)h(WcsMap.)111 3179 y(2.)46 b(The)30
-b(Mapping)g(prior)g(to)h(the)g(WcsMap)g(\()p Fx(i.e.)40
-b FG(from)30 b(pixel)h(to)g(IW)m(C\))g(is)g(linear.)111
-3374 y(3.)46 b(The)34 b(Mapping)g(after)g(the)g(WcsMap)h(\()p
-Fx(i.e.)52 b FG(from)33 b(nativ)m(e)i(spherical)g(to)f(celestial)j(co)s
-(ordinates\))e(is)f(a)227 3487 y(spherical)d(rotation)h(for)e(the)g
-(celestial)j(axes,)e(and)f(linear)h(for)f(an)m(y)h(other)f(axes.)0
-3760 y(If)g(an)m(y)h(of)f(the)h(ab)s(o)m(v)m(e)g(conditions)g(do)f(not)
-h(hold,)f(the)h(write)f(op)s(eration)h(will)g(b)s(e)f(unsuccessful.)0
-4063 y FE(F.2.2)105 b(Choice)35 b(of)g(LONPOLE/LA)-9
-b(TPOLE)0 4290 y FG(When)39 b(writing)h(a)f(F)-8 b(rameSet)41
-b(to)f(a)g(FitsChan,)i(the)d(c)m(hoice)i(of)f(LONPOLE)e(and)h(LA)-8
-b(TPOLE)39 b(v)-5 b(alues)39 b(is)0 4403 y(determined)30
-b(as)h(follo)m(ws:)111 4677 y(1.)46 b(If)41 b(the)f(pro)5
-b(jection)42 b(represen)m(ted)e(b)m(y)h(the)g(WcsMap)h(is)e(azim)m
-(uthal,)45 b(then)c(an)m(y)g(v)-5 b(alues)41 b(set)g(for)f(at-)227
-4790 y(tributes)33 b(\\PV)p Fx(i)9 b Fy(_)p FG(3")34
-b(and)e(\\PV)p Fx(i)9 b Fy(_)p FG(4")34 b(\(where)f(\\)p
-Fx(i)9 b FG(")34 b(is)f(the)g(index)g(of)g(the)g(longitude)g(axis\))h
-(within)e(the)227 4903 y(WcsMap)h(are)g(used)e(as)h(the)g(LONPOLE)f
-(and)g(LA)-8 b(TPOLE)32 b(v)-5 b(alues.)46 b(Reading)32
-b(a)g(F)-8 b(rameSet)34 b(from)d(a)227 5016 y(FITS-W)m(CS)i(header)f
-(results)g(in)h(the)g(original)h(LONPOLE)d(and)h(LA)-8
-b(TPOLE)32 b(v)-5 b(alues)33 b(b)s(eing)f(stored)227
-5128 y(within)27 b(a)i(WcsMap)f(within)f(the)h(F)-8 b(rameSet.)41
-b(Consequen)m(tly)-8 b(,)29 b(if)f(a)g(F)-8 b(rameSet)29
-b(is)f(read)g(from)f(a)h(FITS-)227 5241 y(W)m(CS)k(header)g(and)f(it)h
-(is)g(subsequen)m(tly)g(written)f(out)h(to)h(a)f(new)g(FITS-W)m(CS)f
-(header,)h(the)g(original)227 5354 y(LONPOLE)g(and)h(LA)-8
-b(TPOLE)33 b(v)-5 b(alues)33 b(will)h(usually)f(b)s(e)g(used)f(in)h
-(the)h(new)e(header)h(\(the)h(exception)227 5467 y(b)s(eing)h(if)g(the)
-g(WcsMap)h(has)f(b)s(een)g(explicitly)h(mo)s(di\014ed)e(b)s(efore)h(b)s
-(eing)g(written)g(out)g(again\).)56 b(An)m(y)227 5580
-y(extra)28 b(rotation)h(of)e(the)g(sky)g(is)g(absorb)s(ed)f(in)m(to)i
-(the)g(CD)p Fx(i)p Fy(_)p Fx(j)39 b FG(or)27 b(PC)p Fx(i)p
-Fy(_)p Fx(j)40 b FG(matrix)27 b(\(this)g(is)h(p)s(ossible)e(only)227
-5693 y(if)31 b(the)f(pro)5 b(jection)31 b(is)g(azim)m(uthal\).)p
-eop end
-%%Page: 527 537
-TeXDict begin 527 536 bop 0 52 a Fz(F.2)92 b(P)m(ap)s(er)30
-b(I)s(I)g(-)g(Celestial)i(Co)s(ordinates)2152 b FG(527)p
-0 853 3800 4 v -2 965 4 113 v 94 932 a FE(Keyw)m(ord)p
-598 965 V 777 w(Read)p 2198 965 V 1352 w(W)-9 b(rite)p
-3798 965 V 0 969 3800 4 v -2 1533 4 565 v 50 1048 a FG(CTYPE)p
-Fx(ia)p 598 1533 V 202 w FG(All)28 b(co)s(ordinate)g(systems)f(and)g
-(pro)5 b(jection)650 1161 y(t)m(yp)s(es)32 b(listed)g(in)f(pap)s(er)g
-(I)s(I)g(are)h(supp)s(orted)650 1274 y(\(note,)27 b(\\CUBEF)-10
-b(A)m(CE")26 b(axes)g(are)f(treated)650 1386 y(as)32
-b(unkno)m(wn)e(linear)i(axes\).)45 b(In)31 b(addition,)650
-1499 y("-HPX")h(\(HEALPix\))f(is)f(supp)s(orted.)p 2198
-1533 V 2249 1048 a(Determined)45 b(b)m(y)e(the)h(System)g(attribute)
-2249 1161 y(of)52 b(the)g(SkyF)-8 b(rame)52 b(and)f(the)h(WcsT)m(yp)s
-(e)2249 1274 y(attribute)45 b(of)f(the)g(WcsMap)h(within)e(the)2249
-1386 y(F)-8 b(rameSet.)p 3798 1533 V -2 1646 4 113 v
-50 1612 a(CUNIT)p Fx(ia)p 598 1646 V 225 w FG(Ignored)30
-b(\(assumed)g(to)h(b)s(e)f('degrees'\).)p 2198 1646 V
-235 w(Not)i(written.)p 3798 1646 V -2 1985 4 339 v 50
-1725 a(PV)p Fx(i)p Fy(_)p Fx(ma)p 598 1985 V 274 w FG(Used)25
-b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g(Map-)650
-1838 y(ping)f(\(v)-5 b(alues)24 b(are)h(stored)f(as)g(attributes)h(of)
-650 1951 y(a)31 b(WcsMap)g(within)f(this)g(Mapping\).)p
-2198 1985 V 2249 1725 a(V)-8 b(alues)25 b(are)f(obtained)g(from)f(the)g
-(WcsMap)2249 1838 y(in)31 b(the)f(pixel)h(to)g(W)m(CS)f(Mapping.)p
-3798 1985 V -2 2437 4 452 v 50 2064 a(LONPOLE)p Fx(a)p
-598 2437 V 106 w FG(Used)25 b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g
-(Map-)650 2177 y(ping.)106 b(Also)54 b(stored)e(as)h(a)g(PVi)p
-Fy(_)p FG(m)f(at-)650 2290 y(tribute)45 b(for)f(the)i(longitude)f(axis)
-g(of)h(the)650 2403 y(WcsMap.)p 2198 2437 V 2249 2064
-a(Only)c(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2177 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2290 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2403 y(b)s(elo)m(w\).)p 3798 2437 V -2 2888 V 50 2516
-a(LA)g(TPOLE)p Fx(a)p 598 2888 V 119 w FG(Used)25 b(to)g(create)i(the)e
-(pixel)g(to)g(W)m(CS)g(Map-)650 2629 y(ping.)37 b(Also)22
-b(stored)g(as)g(a)f(PV)h(attribute)g(for)650 2741 y(the)30
-b(longitude)h(axis)g(of)g(the)f(WcsMap.)p 2198 2888 V
-2249 2516 a(Only)42 b(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2629 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2741 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2854 y(b)s(elo)m(w\).)p 3798 2888 V -2 3340 V 50 2967
-a(RADESYS)p Fx(a)p 598 3340 V 118 w FG(Used)66 b(to)h(set)g(the)f
-(attributes)h(of)g(the)650 3080 y(SkyF)-8 b(rame.)77
-b(All)44 b(v)-5 b(alues)42 b(supp)s(orted)f(ex-)650 3193
-y(cept)31 b(that)g(ecliptic)i(co)s(ordinates)e(are)g(cur-)650
-3306 y(ren)m(tly)g(alw)m(a)m(ys)h(assumed)d(to)i(b)s(e)f(FK5.)p
-2198 3340 V 2249 2967 a(Alw)m(a)m(ys)46 b(written.)84
-b(Determined)46 b(b)m(y)e(the)2249 3080 y(System)31 b(attribute)g(of)f
-(the)h(SkyF)-8 b(rame.)p 3798 3340 V -2 3679 4 339 v
-50 3419 a(EQUINO)m(X)p Fx(a)p 598 3679 V 116 w FG(Used)39
-b(to)g(set)g(the)g(Equino)m(x)g(attribute)h(of)650 3532
-y(the)30 b(SkyF)-8 b(rame.)p 2198 3679 V 2249 3419 a(W)g(ritten)79
-b(if)f(relev)-5 b(an)m(t.)183 b(Determined)2249 3532
-y(b)m(y)80 b(the)g(Equino)m(x)f(attribute)h(of)g(the)2249
-3645 y(SkyF)-8 b(rame.)p 3798 3679 V -2 4130 4 452 v
-50 3758 a(EPOCH)p 598 4130 V 271 w(Used)39 b(to)g(set)g(the)g(Equino)m
-(x)g(attribute)h(of)650 3871 y(the)30 b(SkyF)-8 b(rame.)p
-2198 4130 V 2249 3758 a(Only)32 b(written)f(if)h(using)f(FITS-AIPS)g
-(and)2249 3871 y(FITS-AIPS++)72 b(enco)s(dings.)170 b(Deter-)2249
-3983 y(mined)26 b(b)m(y)g(the)g(Equino)m(x)g(attribute)g(of)g(the)2249
-4096 y(SkyF)-8 b(rame.)p 3798 4130 V -2 4808 4 678 v
-50 4209 a(MJD-OBS)p 598 4808 V 185 w(Used)51 b(to)h(set)g(the)g(Ep)s(o)
-s(c)m(h)e(attribute)j(of)650 4322 y(the)c(SkyF)-8 b(rame.)97
-b(D)m(A)-8 b(TE-OBS)50 b(is)g(used)650 4435 y(if)e(MJD-OBS)h(is)g(not)g
-(presen)m(t.)96 b(A)49 b(de-)650 4548 y(fault)42 b(v)-5
-b(alue)43 b(based)f(on)g(RADESYS)f(and)650 4661 y(EQUINO)m(X)h(is)h
-(used)f(if)g(used)g(if)g(D)m(A)-8 b(TE-)650 4774 y(OBS)30
-b(is)g(not)h(presen)m(t)f(either.)p 2198 4808 V 2249
-4209 a(Determined)e(b)m(y)f(the)h(Ep)s(o)s(c)m(h)e(attribute)i(of)2249
-4322 y(the)47 b(SkyF)-8 b(rame.)87 b(Only)46 b(written)g(if)g(this)2249
-4435 y(attribute)d(has)f(b)s(een)f(set)i(to)f(an)g(explicit)2249
-4548 y(v)-5 b(alue)53 b(\(in)f(whic)m(h)g(case)h(D)m(A)-8
-b(TE-OBS)53 b(is)2249 4661 y(also)32 b(written\).)p 3798
-4808 V 0 4811 3800 4 v 969 5086 a(T)-8 b(able)31 b(2:)41
-b(Use)30 b(of)h(FITS-W)m(CS)f(P)m(ap)s(er)g(I)s(I)g(k)m(eyw)m(ords)p
-eop end
-%%Page: 528 538
-TeXDict begin 528 537 bop 0 52 a FG(528)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)111 351 y FG(2.)46
-b(If)29 b(the)f(pro)5 b(jection)30 b(represen)m(ted)f(b)m(y)f(the)h
-(WcsMap)h(is)f(azim)m(uthal)h(but)e(no)g(v)-5 b(alues)29
-b(ha)m(v)m(e)h(b)s(een)e(set)i(for)227 464 y(the)38 b(\\PV)p
-Fx(i)9 b Fy(_)p FG(3")38 b(and)e(\\PV)p Fx(i)9 b Fy(_)p
-FG(4")39 b(attributes)e(within)g(the)g(WcsMap,)j(then)d(the)g(default)h
-(LONPOLE)227 577 y(and)f(LA)-8 b(TPOLE)37 b(v)-5 b(alues)38
-b(are)f(used.)61 b(This)37 b(results)g(in)g(no)h(LONPOLE)e(or)h(LA)-8
-b(TPOLE)37 b(k)m(eyw)m(ords)227 690 y(b)s(eing)28 b(stored)g(in)g(the)g
-(header)g(since)h(default)f(v)-5 b(alues)28 b(are)h(nev)m(er)f(stored.)
-40 b(An)m(y)29 b(extra)g(rotation)g(of)f(the)227 803
-y(sky)k(is)g(absorb)s(ed)f(in)m(to)i(the)g(CD)p Fx(i)p
-Fy(_)p Fx(j)45 b FG(or)32 b(PC)p Fx(i)p Fy(_)p Fx(j)44
-b FG(matrix)32 b(\(this)h(is)f(p)s(ossible)g(only)g(if)g(the)h(pro)5
-b(jection)32 b(is)227 916 y(azim)m(uthal\).)111 1121
-y(3.)46 b(If)35 b(the)g(pro)5 b(jection)35 b(represen)m(ted)g(b)m(y)g
-(the)g(WcsMap)g(is)g(not)g(azim)m(uthal,)j(then)c(the)h(v)-5
-b(alues)36 b(of)f(LON-)227 1234 y(POLE)j(and)g(LA)-8
-b(TPOLE)37 b(are)i(found)e(b)m(y)h(transforming)g(the)h(co)s(ordinates)
-g(of)g(the)f(celestial)j(north)227 1347 y(p)s(ole)28
-b(\()p Fx(i.e)34 b FG(longitude)28 b(zero,)h(latitude)g(+)p
-Fp(\031)s(=)p FG(2\))f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates)g(using)f(the)h(in)m(v)m(erse)227 1459 y(of)j(the)f(Mapping)
-h(whic)m(h)f(follo)m(ws)h(the)g(WcsMap.)0 1778 y FE(F.2.3)105
-b(User)35 b(De\014ned)h(Fiducial)f(P)m(oin)m(ts)0 2012
-y FG(When)f(reading)g(a)h(F)-8 b(rameSet)36 b(from)d(a)i(FitsChan,)g
-(pro)5 b(jection)35 b(parameters)g(PV)p Fx(i)9 b Fy(_)p
-FG(0,)36 b(PV)p Fx(i)9 b Fy(_)p FG(1)34 b(and)g(PV)p
-Fx(i)9 b Fy(_)p FG(2)0 2125 y(\(for)29 b(longitude)h(axis)g(\\)p
-Fx(i)9 b FG("\))31 b(are)e(used)g(to)h(indicate)g(a)g(user-de\014ned)d
-(\014ducial)i(p)s(oin)m(t)h(as)f(describ)s(ed)f(in)h(section)0
-2238 y(2.5)37 b(of)f(pap)s(er)e(I)s(I.)h(This)g(results)h(in)f(a)h
-(shift)g(of)g(IW)m(C)g(origin)g(b)s(eing)f(applied)h
-Fx(b)-5 b(efor)g(e)43 b FG(the)36 b(WcsMap)h(whic)m(h)0
-2351 y(con)m(v)m(erts)g(IW)m(C)f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates.)57 b(The)35 b(v)-5 b(alues)35 b(of)h(these)g(pro)5
-b(jection)36 b(parameters,)h(if)0 2464 y(supplied,)29
-b(are)i(stored)g(as)f(the)h(corresp)s(onding)e(PVi)p
-Fy(_)p FG(m)h(attributes)h(of)g(the)f(WcsMap.)0 2635
-y(When)24 b(writing)g(a)h(F)-8 b(rameSet)25 b(to)g(a)g(FitsChan,)h(the)
-e(PV)g(attributes)h(of)g(the)f(WcsMap)h(determine)g(the)f(nativ)m(e)0
-2748 y(co)s(ordinates)29 b(of)f(the)h(\014ducial)f(p)s(oin)m(t)g(\(the)
-h(\014xed)f(defaults)g(for)g(eac)m(h)h(pro)5 b(jection)29
-b(describ)s(ed)f(in)f(pap)s(er)h(I)s(I)f(are)0 2861 y(used)32
-b(if)h(the)g(PV)g(attributes)h(of)f(the)g(WcsMap)h(ha)m(v)m(e)g(not)g
-(b)s(een)e(assigned)h(a)h(v)-5 b(alue\).)49 b(The)32
-b(corresp)s(onding)0 2974 y(celestial)e(co)s(ordinates)f(are)f(used)e
-(as)i(the)g(CR)-10 b(V)g(AL)p Fx(i)36 b FG(k)m(eyw)m(ords)28
-b(and)f(the)h(corresp)s(onding)f(pixel)h(co)s(ordinates)0
-3087 y(as)j(the)f(CRPIX)p Fx(j)43 b FG(k)m(eyw)m(ords.)0
-3406 y FE(F.2.4)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 3640 y FG(A)39 b(collection)j(of)e(common)f(non-standard)f
-(features)i(are)f(supp)s(orted)e(when)i(reading)g(a)h(F)-8
-b(rameSet)40 b(from)0 3753 y(a)46 b(FitsChan,)j(in)c(addition)g(to)h
-(those)g(em)m(b)s(o)s(died)e(within)h(the)g(a)m(v)-5
-b(ailable)48 b(enco)s(dings)d(of)g(the)h(FitsChan)0 3866
-y(class.)j(These)33 b(are)h(translated)f(in)m(to)h(the)f(equiv)-5
-b(alen)m(t)35 b(standard)d(features)h(b)s(efore)g(b)s(eing)g(used)f(to)
-i(create)g(a)0 3979 y(F)-8 b(rameSet.)60 b(Note,)39 b(the)d(rev)m(erse)
-h(op)s(eration)g(is)f(nev)m(er)h(p)s(erformed:)51 b(it)37
-b(is)f(not)h(p)s(ossible)f(to)h(pro)s(duce)e(non-)0 4092
-y(standard)g(features)h(when)e(writing)i(a)g(F)-8 b(rameSet)37
-b(to)g(a)f(FitsChan)f(\(other)h(than)g(those)g(em)m(b)s(o)s(died)f(in)g
-(the)0 4205 y(a)m(v)-5 b(ailable)33 b(enco)s(dings)d(of)g(the)h
-(FitsChan)f(class\).)42 b(The)30 b(supp)s(orted)e(non-standard)i
-(features)g(include:)136 4493 y Fu(\017)46 b FG(EQUINO)m(X)28
-b(k)m(eyw)m(ords)h(with)e(string)h(v)-5 b(alues)29 b(equal)f(to)h(a)f
-(date)h(preceded)f(b)m(y)f(the)i(letter)g(B)f(or)g(J)g(\()p
-Fx(e.g.)227 4606 y FG(\\B1995.0"\).)136 4811 y Fu(\017)46
-b FG(EQUINO)m(X)31 b(or)f(EPOCH)g(k)m(eyw)m(ords)g(with)g(v)-5
-b(alue)31 b(zero)g(\(these)h(are)e(con)m(v)m(erted)i(to)f(B1950\).)136
-5016 y Fu(\017)46 b FG(The)22 b(IRAF)g(\\ZPX")g(pro)5
-b(jection)23 b(is)f(represen)m(ted)g(b)m(y)f(a)i(WcsMap)f(with)g(t)m
-(yp)s(e)g(of)g(AST)p Fy(__)p FG(ZPN.)f(Pro)5 b(jec-)227
-5128 y(tion)30 b(parameter)f(v)-5 b(alues)29 b(are)g(read)g(from)f(an)m
-(y)i(W)-10 b(A)i(T)p Fx(i)p Fy(_)p Fx(nnn)36 b FG(k)m(eyw)m(ords,)30
-b(and)e(corresp)s(onding)g(PVi)p Fy(_)p FG(m)227 5241
-y(attributes)36 b(are)f(set)h(in)e(the)i(WcsMap.)55 b(The)35
-b(W)-10 b(A)i(T)p Fx(i)p Fy(_)p Fx(nnn)42 b FG(k)m(eyw)m(ords)35
-b(ma)m(y)h(sp)s(ecify)f(corrections)h(to)227 5354 y(the)43
-b(basic)f(ZPN)g(pro)5 b(jection)43 b(b)m(y)g(including)e(\\lngcor")j
-(or)f(\\latcor")h(terms.)77 b(There)41 b(is)i(no)f(direct)227
-5467 y(equiv)-5 b(alen)m(t)30 b(in)d(FITS-W)m(CS)h(to)g(these)g(terms)g
-(and)f(so)h(they)g(are)h(ignored.)40 b(If)27 b(these)h(correction)i
-(terms)227 5580 y(are)d(found,)g(ASTW)-10 b(ARN)26 b(k)m(eyw)m(ords)h
-(are)g(added)f(to)h(the)g(FitsChan)g(con)m(taining)h(a)f(w)m(arning)f
-(message)227 5693 y(\(but)k(only)h(if)f(the)h(W)-8 b(arnings)30
-b(attribute)i(of)e(the)h(FitsChan)f(is)g(set)h(appropriately\).)p
-eop end
-%%Page: 529 539
-TeXDict begin 529 538 bop 0 52 a Fz(F.3)92 b(P)m(ap)s(er)30
-b(I)s(I)s(I)f(-)i(Sp)s(ectral)f(Co)s(ordinates)2129 b
-FG(529)136 351 y Fu(\017)46 b FG(The)37 b(IRAF)h(\\TNX")h(pro)5
-b(jection)38 b(is)g(represen)m(ted)f(b)m(y)h(a)g(WcsMap)h(with)e(t)m
-(yp)s(e)h(of)g(AST)p Fy(__)p FG(TPN)e(\(a)227 464 y(distorted)j(T)-8
-b(AN)39 b(pro)5 b(jection)39 b(retained)g(within)e(the)i(WcsMap)g
-(class)g(from)f(an)h(early)g(draft)f(of)g(the)227 577
-y(FITS-W)m(CS)22 b(pap)s(er)f(I)s(I\).)g(Pro)5 b(jection)23
-b(parameter)g(v)-5 b(alues)22 b(are)g(read)g(from)f(an)m(y)i(W)-10
-b(A)i(T)p Fx(i)p Fy(_)p Fx(nnn)29 b FG(k)m(eyw)m(ords,)227
-690 y(and)34 b(corresp)s(onding)f(PV)i(attributes)g(are)g(set)g(in)f
-(the)g(WcsMap.)54 b(If)34 b(the)g(TNX)h(pro)5 b(jection)35
-b(cannot)227 803 y(b)s(e)e(con)m(v)m(erted)i(exactly)g(in)m(to)f(an)g
-(AST)p Fy(__)p FG(TPN)d(pro)5 b(jection,)35 b(ASTW)-10
-b(ARN)34 b(k)m(eyw)m(ords)f(are)h(added)f(to)227 916
-y(the)40 b(FitsChan)g(con)m(taining)i(a)e(w)m(arning)g(message)h(\(but)
-e(only)h(if)g(the)g(W)-8 b(arnings)41 b(attribute)f(of)g(the)227
-1029 y(FitsChan)31 b(is)f(set)h(appropriately\).)136
-1222 y Fu(\017)46 b FG(\\QV")33 b(parameters)f(for)g(T)-8
-b(AN)32 b(pro)5 b(jections)33 b(\(as)f(pro)s(duced)f(b)m(y)h(A)m(UTO)m
-(ASTR)m(OM)g(are)g(renamed)g(to)227 1335 y(the)f(equiv)-5
-b(alen)m(t)32 b(\\PV")f(parameters.)0 1637 y Fw(F.3)113
-b(P)m(ap)s(er)37 b(I)s(I)s(I)g(-)h(Sp)s(ectral)g(Co)s(ordinates)0
-1862 y FG(These)27 b(con)m(v)m(en)m(tions)i(are)e(used)g(when)f
-(reading)h(a)h(F)-8 b(rameSet)28 b(from)e(a)i(FitsChan)f(whic)m(h)g
-(includes)f(appropri-)0 1975 y(ate)32 b(CTYPE)p Fx(i)38
-b FG(v)-5 b(alues,)31 b(and)f(when)f(writing)i(a)f(F)-8
-b(rameSet)32 b(in)e(whic)m(h)g(the)h(W)m(CS)f(F)-8 b(rame)31
-b(is)g(a)g(Sp)s(ecF)-8 b(rame.)0 2141 y(T)g(able)31 b(3)g(describ)s(es)
-e(the)i(use)f(made)g(b)m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g
-(whose)f(meaning)h(is)f(de\014ned)f(or)h(extended)0 2253
-y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)s(I)s(I.)0 2552
-y FE(F.3.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9
-b(rite)35 b(Op)s(eration)0 2778 y FG(When)26 b(writing)f(a)i(F)-8
-b(rameSet)27 b(in)e(whic)m(h)h(the)g(W)m(CS)g(F)-8 b(rame)26
-b(is)g(a)g(Sp)s(ecF)-8 b(rame)27 b(to)f(a)g(FitsChan,)h(the)f(write)g
-(op-)0 2891 y(eration)d(is)g(successful)f(only)h(if)f(the)h(Mapping)f
-(from)g(pixel)h(co)s(ordinates)g(\(the)g(base)g(F)-8
-b(rame)23 b(in)f(the)h(F)-8 b(rameSet\))0 3004 y(to)31
-b(the)g(Sp)s(ecF)-8 b(rame)30 b(satis\014es)h(one)g(of)f(the)h(follo)m
-(wing)h(conditions:)111 3274 y(1.)46 b(It)31 b(is)f(linear.)111
-3467 y(2.)46 b(It)31 b(is)f(logarithmic.)111 3660 y(3.)46
-b(It)31 b(is)h(linear)f(if)g(the)g(Sp)s(ecF)-8 b(rame)32
-b(w)m(ere)f(to)h(b)s(e)f(re-mapp)s(ed)f(in)m(to)i(one)f(of)g(the)h
-(other)f(sp)s(ectral)g(systems)227 3773 y(supp)s(orted)e(b)m(y)h
-(FITS-W)m(CS)g(pap)s(er)f(I)s(I)s(I.)111 3966 y(4.)46
-b(It)33 b(con)m(tains)g(a)g(GrismMap,)g(and)e(the)i(Mapping)f(b)s
-(efore)f(the)i(GrismMap)f(\(from)g(pixel)h(co)s(ordinates)227
-4079 y(to)46 b(grism)e(parameter\))i(is)f(linear,)j(and)d(the)f
-(Mapping)h(after)g(the)g(GrismMap)g(is)g(either)g(n)m(ull)f(or)227
-4192 y(represen)m(ts)e(a)f(c)m(hange)i(of)e(sp)s(ectral)h(system)g
-(from)f(w)m(a)m(v)m(elength)i(\(air)f(or)g(v)-5 b(acuum\))41
-b(to)h(one)g(of)f(the)227 4304 y(supp)s(orted)29 b(sp)s(ectral)h
-(systems.)0 4575 y(If)g(none)g(of)h(the)f(ab)s(o)m(v)m(e)i(conditions)f
-(hold,)f(the)g(write)h(op)s(eration)g(will)g(b)s(e)e(unsuccessful.)0
-4874 y FE(F.3.2)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 5099 y FG(The)25 b(follo)m(wing)j(non-standard)c(features)i
-(are)h(supp)s(orted)d(when)g(reading)i(sp)s(ectral)g(axes)h(from)e(a)h
-(FitsChan:)136 5369 y Fu(\017)46 b FG(Con)m(v)m(ersion)32
-b(of)f(\\-W)-10 b(A)g(V",)33 b(\\-FR)m(Q")f(and)e(\\-VEL")i(algorithm)g
-(co)s(des)f(\(sp)s(eci\014ed)g(in)f(early)i(drafts)e(of)227
-5482 y(pap)s(er)g(I)s(I)s(I\))f(to)i(the)f(corresp)s(onding)g(\\-X2P")i
-(form.)136 5675 y Fu(\017)46 b FG(Con)m(v)m(ersion)31
-b(of)g(\\RESTFREQ")f(to)h(\\RESTFR)m(Q")p eop end
-%%Page: 530 540
-TeXDict begin 530 539 bop 0 52 a FG(530)2489 b Fz(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 263 4002 4 v -2
-376 4 113 v 196 342 a FE(Keyw)m(ord)p 801 376 V 877 w(Read)p
-2400 376 V 1353 w(W)-9 b(rite)p 4000 376 V 0 379 4002
-4 v -2 944 4 565 v 50 459 a FG(CTYPE)p Fx(ia)p 801 944
-V 404 w FG(All)28 b(co)s(ordinate)g(systems)g(and)e(pro)5
-b(jection)852 571 y(t)m(yp)s(es)22 b(listed)g(in)f(pap)s(er)g(I)s(I)s
-(I)f(are)i(supp)s(orted,)852 684 y(except)32 b(for)e(the)h(\\-T)-8
-b(AB")32 b(algorithm)f(\(the)852 797 y(\\-LOG")53 b(algorithm)f(ma)m(y)
-g(also)h(b)s(e)e(ap-)852 910 y(plied)30 b(to)h(non-sp)s(ectral)g
-(linear)g(axes\).)p 2400 944 V 2452 459 a(Determined)21
-b(b)m(y)f(the)g(System)g(attribute)h(of)2452 571 y(the)35
-b(Sp)s(ecF)-8 b(rame)35 b(and)g(the)g(nature)g(of)g(the)2452
-684 y(pixel)30 b(to)i(Sp)s(ecF)-8 b(rame)30 b(Mapping.)p
-4000 944 V -2 1396 4 452 v 50 1023 a(CUNIT)p Fx(ia)p
-801 1396 V 427 w FG(Used)h(to)h(set)g(the)f(Units)h(attribute)f(of)h
-(the)852 1136 y(Sp)s(ecF)-8 b(rame)35 b(\(note,)i(Sp)s(ecF)-8
-b(rames)34 b(alw)m(a)m(ys)852 1249 y(ha)m(v)m(e)j(an)g(\\activ)m(e")i
-(Units)d(attribute)h(\(see)852 1362 y(astSetActiv)m(eUnit\).)p
-2400 1396 V 2452 1023 a(Alw)m(a)m(ys)31 b(written.)p
-4000 1396 V -2 1734 4 339 v 50 1475 a(PV)p Fx(i)p Fy(_)p
-Fx(ma)p 801 1734 V 476 w FG(Used)25 b(to)g(create)i(the)e(pixel)g(to)h
-(W)m(CS)e(Map-)852 1588 y(ping)g(\(v)-5 b(alues)24 b(are)h(stored)f(as)
-g(attributes)h(of)852 1701 y(a)31 b(GrismMap\).)p 2400
-1734 V 2452 1475 a(Set)46 b(from)f(the)i(attributes)f(of)g(the)g(Gris-)
-2452 1588 y(mMap,)28 b(if)f(presen)m(t,)h(and)e(if)h(set)g(explicitly)
--8 b(.)p 4000 1734 V -2 2073 V 50 1813 a(SPECSYS)p Fx(a)p
-801 2073 V 345 w FG(Used)24 b(to)i(set)e(the)h(StdOfRest)f(attribute)h
-(of)852 1926 y(the)43 b(Sp)s(ecF)-8 b(rame)43 b(\(all)h(systems)f(are)g
-(sup-)852 2039 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 2073 V 2452 1813 a(Set)44 b(from)h(the)f(StdOfRest)g(attribute)h
-(of)2452 1926 y(the)26 b(Sp)s(ecF)-8 b(rame,)27 b(but)e(only)g(if)h(it)
-g(has)f(b)s(een)2452 2039 y(set)31 b(explicitly)-8 b(.)p
-4000 2073 V -2 2186 4 113 v 50 2152 a(SSYSOBS)p Fx(a)p
-801 2186 V 349 w FG(Ignored.)p 2400 2186 V 1274 w(Nev)m(er)31
-b(written.)p 4000 2186 V -2 2638 4 452 v 50 2265 a(OBSGEO-X/Y/Z)p
-801 2638 V 100 w(Used)39 b(to)h(set)g(the)g(ObsLon)e(and)g(ObsLat)852
-2378 y(attributes)28 b(of)f(the)g(F)-8 b(rame)28 b(\(the)g(observ)m
-(ers)852 2491 y(heigh)m(t)j(ab)s(o)m(v)m(e)h(sea)f(lev)m(el)h(is)e
-(ignored\).)p 2400 2638 V 2452 2265 a(Set)j(from)g(the)h(ObsLon)f(and)f
-(ObsLat)i(at-)2452 2378 y(tributes)51 b(of)g(the)g(F)-8
-b(rame,)57 b(if)51 b(they)g(ha)m(v)m(e)2452 2491 y(b)s(een)29
-b(set)i(explicitly)h(\(it)g(is)e(assumed)g(that)2452
-2604 y(the)g(observ)m(er)h(is)f(at)h(sea)g(lev)m(el\).)p
-4000 2638 V -2 2976 4 339 v 50 2717 a(MJD-A)-10 b(V)m(G)p
-801 2976 V 379 w(Used)21 b(to)h(set)f(the)g(Ep)s(o)s(c)m(h)f
-(attributes)i(of)f(the)852 2830 y(Sp)s(ecF)-8 b(rame.)p
-2400 2976 V 2452 2717 a(Set)43 b(from)g(the)g(Ep)s(o)s(c)m(h)f
-(attribute)i(of)f(the)2452 2830 y(Sp)s(ecF)-8 b(rame,)42
-b(if)e(it)g(has)f(b)s(een)g(set)i(explic-)2452 2943 y(itly)-8
-b(.)p 4000 2976 V -2 3315 V 50 3055 a(SSYSSR)m(C)p Fx(a)p
-801 3315 V 354 w FG(Used)35 b(to)h(set)g(the)f(SourceVRF)g(attribute)
-852 3168 y(of)24 b(the)f(Sp)s(ecF)-8 b(rame)24 b(\(all)h(systems)e(are)
-h(sup-)852 3281 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 3315 V 2452 3055 a(Set)36 b(from)f(the)h(SourceVRF)g(attribute)g
-(of)2452 3168 y(the)30 b(Sp)s(ecF)-8 b(rame.)p 4000 3315
-V -2 4106 4 791 v 50 3394 a(ZSOUR)m(CE)p Fx(a)p 801 4106
-V 318 w FG(Used)49 b(to)g(set)h(the)e(SourceV)-8 b(el)50
-b(attribute)852 3507 y(of)28 b(the)f(Sp)s(ecF)-8 b(rame)28
-b(\(the)g(SourceVRF)g(at-)852 3620 y(tribute)34 b(is)g(\014rst)f(set)h
-(to)h(the)f(system)g(indi-)852 3733 y(cated)g(b)m(y)f(the)g(SSYSSR)m(C)
-e(k)m(eyw)m(ord,)k(and)852 3846 y(the)23 b(ZSOUR)m(CE)e(v)-5
-b(alue)23 b(is)g(then)g(con)m(v)m(erted)852 3959 y(to)59
-b(an)g(apparen)m(t)g(radial)g(v)m(elo)s(cit)m(y)i(and)852
-4072 y(stored)31 b(as)f(the)h(SourceV)-8 b(el)31 b(attribute\).)p
-2400 4106 V 2452 3394 a(Set)49 b(from)g(the)h(SourceV)-8
-b(el)50 b(attribute)g(of)2452 3507 y(the)36 b(Sp)s(ecF)-8
-b(rame,)38 b(if)f(it)g(has)f(b)s(een)f(set)i(ex-)2452
-3620 y(plicitly)51 b(\(the)g(SourceV)-8 b(el)51 b(v)-5
-b(alue)51 b(is)f(\014rst)2452 3733 y(con)m(v)m(erted)33
-b(from)e(apparen)m(t)g(radial)h(v)m(elo)s(c-)2452 3846
-y(it)m(y)f(to)g(redshift\).)p 4000 4106 V -2 4444 4 339
-v 50 4185 a(VELOSYS)p Fx(a)p 801 4444 V 328 w FG(Ignored.)p
-2400 4444 V 1274 w(Set)95 b(from)f(the)h(attributes)g(of)g(the)2452
-4297 y(Sp)s(ecF)-8 b(rame)24 b(that)g(de\014ne)f(the)h(standard)f(of)
-2452 4410 y(rest)30 b(and)g(the)h(observ)m(ers)f(p)s(osition.)p
-4000 4444 V -2 5122 4 678 v 50 4523 a(RESTFR)m(Q)p Fx(a)p
-801 5122 V 316 w FG(Used)k(to)h(set)g(the)f(RestF)-8
-b(req)36 b(attribute)f(of)852 4636 y(the)c(Sp)s(ecF)-8
-b(rame.)p 2400 5122 V 2452 4523 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 4636 y(the)44 b(Sp)s(ecF)-8
-b(rame,)47 b(but)c(only)h(if)g(the)g(Sys-)2452 4749 y(tem)37
-b(attribute)h(is)f(not)h(set)f(to)h(\\W)-10 b(A)g(VE",)2452
-4862 y(\\V)m(OPT",)42 b(\\ZOPT")e(or)h(\\A)-10 b(W)g(A)g(V",)43
-b(and)2452 4975 y(only)c(if)g(RestF)-8 b(req)41 b(has)e(b)s(een)g(set)h
-(explic-)2452 5088 y(itly)-8 b(.)p 4000 5122 V -2 5799
-V 50 5201 a(RESTW)e(A)g(V)p Fx(a)p 801 5799 V 301 w FG(Used)34
-b(to)h(set)g(the)f(RestF)-8 b(req)36 b(attribute)f(of)852
-5314 y(the)c(Sp)s(ecF)-8 b(rame)31 b(\(after)h(con)m(v)m(ersion)g(from)
-852 5427 y(w)m(a)m(v)m(elength)h(to)e(frequency\).)p
-2400 5799 V 2452 5201 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 5314 y(the)28 b(Sp)s(ecF)-8
-b(rame)28 b(\(after)g(con)m(v)m(ersion\),)i(but)2452
-5427 y(only)56 b(if)h(the)g(System)f(attribute)h(is)g(set)2452
-5539 y(to)g(\\W)-10 b(A)g(VE",)58 b(\\V)m(OPT",)g(\\ZOPT")e(or)2452
-5652 y(\\A)-10 b(W)g(A)g(V",)54 b(and)e(only)g(if)g(RestF)-8
-b(req)54 b(has)2452 5765 y(b)s(een)29 b(set)i(explicitly)-8
-b(.)p 4000 5799 V -2 6138 4 339 v 50 5878 a(CNAME)p Fx(ia)p
-801 6138 V 381 w FG(Used)25 b(to)h(set)g(the)f(Lab)s(el)h(attributes)f
-(of)h(the)852 5991 y(W)m(CS)k(F)-8 b(rame)32 b(k)m(eyw)m(ords.)p
-2400 6138 V 2452 5878 a(Set)42 b(from)g(the)g(Lab)s(el)g(attributes)h
-(of)f(the)2452 5991 y(W)m(CS)28 b(F)-8 b(rame,)30 b(if)e(they)g(ha)m(v)
-m(e)i(b)s(een)d(set)i(ex-)2452 6104 y(plicitly)-8 b(.)p
-4000 6138 V 0 6141 4002 4 v 951 6416 a(T)g(able)31 b(3:)41
-b(Use)31 b(of)f(FITS-W)m(CS)g(P)m(ap)s(er)g(I)s(I)s(I)f(k)m(eyw)m(ords)
-p eop end
-%%Page: 531 541
-TeXDict begin 531 540 bop 0 52 a Fz(F.4)92 b(P)m(ap)s(er)30
-b(IV)g(-)h(Co)s(ordinate)f(Distortions)2056 b FG(531)0
-351 y Fw(F.4)113 b(P)m(ap)s(er)37 b(IV)g(-)h(Co)s(ordinate)g
-(Distortions)0 573 y FG(This)25 b(pap)s(er)f(prop)s(oses)h(that)h(an)g
-(additional)g(4)g(c)m(haracter)h(co)s(de)f(b)s(e)f(app)s(ended)f(to)i
-(the)g(end)f(of)h(the)f(CTYPE)p Fx(i)0 686 y FG(k)m(eyw)m(ord)k(to)h
-(sp)s(ecify)f(the)g(nature)f(of)h(an)m(y)h(distortion)f(a)m(w)m(a)m(y)i
-(from)d(the)h(basic)h(algorithm)g(describ)s(ed)d(b)m(y)i(the)0
-799 y(\014rst)37 b(8)h(c)m(haracters)h(of)f(the)g(CTYPE)p
-Fx(i)46 b FG(v)-5 b(alue.)63 b(Curren)m(tly)37 b(AST)g(ignores)h(all)h
-(suc)m(h)e(co)s(des)h(when)e(reading)0 911 y(a)h(F)-8
-b(rameSet)38 b(from)f(a)g(FitsChan)g(\(except)h(for)f(the)g(\\-SIP")g
-(co)s(de)g(de\014ned)f(b)m(y)h(the)g(SIR)-8 b(TF)36 b(pro)5
-b(ject)38 b(-)f(see)0 1024 y(b)s(elo)m(w\).)71 b(This)39
-b(means)h(that)h(a)f(F)-8 b(rameSet)42 b(can)e(still)h(b)s(e)f(read)g
-(from)f(suc)m(h)h(headers,)j(but)c(the)i(Mapping)0 1137
-y(whic)m(h)33 b(giv)m(es)h(the)f(W)m(CS)g(p)s(osition)g(asso)s(ciated)i
-(with)d(a)i(giv)m(en)g(pixel)f(p)s(osition)g(will)g(re\015ect)h(only)f
-(the)g(basic)0 1250 y(algorithm)e(and)f(will)h(not)f(include)h(the)f
-(e\013ects)i(of)e(the)h(distortion.)0 1413 y(If)40 b(suc)m(h)g(a)h(F)-8
-b(rameSet)42 b(is)f(then)f(written)h(out)f(to)i(a)f(FitsChan,)i(the)e
-(resulting)f(CTYPE)p Fx(i)49 b FG(k)m(eyw)m(ords)41 b(will)0
-1526 y(include)30 b(no)g(distortion)h(co)s(de.)0 1816
-y FE(F.4.1)105 b(The)35 b(\\-SIP")f(distortion)h(co)s(de)0
-2037 y FG(The)d(SIR)-8 b(TF)32 b(pro)5 b(ject)33 b(\(h)m
-(ttp://sirtf.caltec)m(h.edu/SSC/\))j(has)c(dev)m(elop)s(ed)h(its)g(o)m
-(wn)g(system)f(for)h(enco)s(ding)0 2150 y(2-dimensional)27
-b(image)g(distortion)g(within)e(a)i(FITS)e(header,)i(based)f(on)g(the)g
-(prop)s(osals)g(of)g(pap)s(er)f(IV.)h(A)g(de-)0 2263
-y(scription)20 b(of)h(this)f(system)g(is)h(a)m(v)-5 b(ailable)22
-b(in)e(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)m(ts/W)m(CSk)m
-(eyw)m(ords)p Fy(_)p FG(v1.3.p)s(df.)0 2376 y(In)k(this)g(system,)i
-(the)e(presence)h(of)f(distortion)h(is)f(indicated)h(b)m(y)f(app)s
-(ending)f(the)i(distortion)g(co)s(de)f(\\-SIP")h(to)0
-2489 y(the)f(CTYPE)p Fx(i)32 b FG(k)m(eyw)m(ord)24 b(v)-5
-b(alues)24 b(for)f(the)h(celestial)i(axes.)39 b(The)23
-b(distortion)h(tak)m(es)h(the)f(form)f(of)h(a)g(p)s(olynomial)0
-2602 y(function)30 b(whic)m(h)g(is)h(applied)f(to)h(the)f(pixel)h(co)s
-(ordinates,)g(after)g(subtraction)g(of)f(the)h(CRPIX)p
-Fx(j)43 b FG(v)-5 b(alues.)0 2764 y(This)39 b(system)h(is)g(a)g
-(strictly)h(2)f(dimensional)g(system.)69 b(When)39 b(reading)h(a)g(F)-8
-b(rameSet)41 b(from)e(a)i(FitsChan)0 2877 y(whic)m(h)c(includes)f(the)h
-(\\-SIP")g(distortion)h(co)s(de,)h(AST)d(assumes)g(that)i(it)f(is)g
-(only)g(applied)f(to)i(the)f(\014rst)f(2)0 2990 y(W)m(CS)j(axes)g(in)g
-(a)g(FITS)f(header)h(\(i.e.)67 b(CTYPE1)39 b(and)f(CTYPE2\).)66
-b(If)39 b(the)g(\\-SIP")g(distortion)g(co)s(de)g(is)0
-3103 y(attac)m(hed)h(to)f(other)f(axes,)j(it)e(will)f(b)s(e)f(ignored.)
-64 b(The)38 b(distortion)h(itself)g(is)f(represen)m(ted)g(b)m(y)g(a)g
-(P)m(olyMap)0 3216 y(within)30 b(the)g(resulting)h(F)-8
-b(rameSet.)0 3379 y(If)27 b(a)h(F)-8 b(rameSet)29 b(is)f(read)g(from)f
-(a)h(FitsChan)g(whic)m(h)g(includes)f(\\-SIP")h(distortion,)h(and)e(an)
-h(attempt)h(is)f(then)0 3492 y(made)d(to)g(write)f(this)h(F)-8
-b(rameSet)26 b(out)e(to)h(a)g(FitsChan,)h(the)f(write)g(op)s(eration)f
-(will)h(fail)g(unless)f(the)h(distortion)0 3605 y(is)34
-b(insigni\014can)m(t)i(\()p Fx(i.e.)52 b FG(is)34 b(so)h(small)g(that)g
-(the)g(tests)g(for)f(linearit)m(y)i(built)e(in)m(to)i(AST)d(are)i
-(passed\).)53 b(In)34 b(this)0 3718 y(case,)e(no)e(distortion)h(co)s
-(de)f(will)h(b)s(e)f(app)s(ended)f(to)i(the)f(resulting)h(CTYPE)p
-Fx(i)38 b FG(k)m(eyw)m(ord)31 b(v)-5 b(alues.)p eop end
-%%Page: 532 542
-TeXDict begin 532 541 bop 0 52 a FG(532)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y FA(G)134
-b(Changes)46 b(and)e(New)i(F)-11 b(eatures)0 626 y Fw(G.1)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.1)0 866 y FG(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 979 y(v)m(ersions)31 b(V1.0)g(and)f(V1.1)i(\(not)f(the)f
-(most)h(recen)m(t)g(v)m(ersion\):)111 1279 y(1.)46 b(A)37
-b(new)g(\\Ho)m(w)h(T)-8 b(o.)16 b(.)f(.)h(")60 b(section)38
-b(\()p Fu(x)p FG(3\))h(has)d(b)s(een)g(added)h(to)g(this)g(do)s(cumen)m
-(t.)60 b(It)37 b(con)m(tains)h(simple)227 1392 y(recipies)31
-b(for)f(p)s(erforming)g(commonly-required)g(op)s(erations)h(using)f
-(AST.)111 1605 y(2.)46 b(A)25 b(new)f(AST)p Fy(_)p FG(UNF)m(ORMA)-8
-b(T)24 b(function)h(has)f(b)s(een)f(pro)m(vided)h(to)i(read)e
-(formatted)h(co)s(ordinate)g(v)-5 b(alues)227 1718 y(for)31
-b(the)g(axes)g(of)g(a)g(F)-8 b(rame)31 b(\()p Fu(x)p
-FG(7.8\).)44 b(In)30 b(essence,)h(this)g(function)f(is)h(the)g(in)m(v)m
-(erse)g(of)g(AST)p Fy(_)p FG(F)m(ORMA)-8 b(T.)227 1831
-y(It)27 b(ma)m(y)f(b)s(e)g(used)f(to)i(deco)s(de)f(user-supplied)f
-(formatted)i(v)-5 b(alues)26 b(represen)m(ting)g(co)s(ordinates,)i
-(turning)227 1944 y(them)36 b(in)m(to)g(n)m(umerical)g(v)-5
-b(alues)36 b(for)f(pro)s(cessing.)55 b(Celestial)38 b(co)s(ordinates)e
-(ma)m(y)g(also)g(b)s(e)f(read)g(using)227 2057 y(this)c(function)f(\()p
-Fu(x)p FG(8.7\))i(and)e(free-format)h(input)f(is)g(supp)s(orted.)111
-2270 y(3.)46 b(The)41 b(F)-8 b(ormat)42 b(attribute)g(string)f(used)f
-(b)m(y)h(a)h(SkyF)-8 b(rame)41 b(when)f(formatting)i(celestial)i(co)s
-(ordinate)227 2383 y(v)-5 b(alues)30 b(no)m(w)f(allo)m(ws)i(the)e
-(degrees/hours)g(\014eld)g(to)h(b)s(e)e(omitted,)j(so)e(that)h
-(celestial)i(co)s(ordinates)e(ma)m(y)227 2496 y(b)s(e)k(giv)m(en)i(in)e
-(\()p Fx(e.g.)p FG(\))53 b(arc-min)m(utes)35 b(and/or)f(arc-seconds)i
-(\()p Fu(x)p FG(8.6\).)55 b(As)34 b(a)h(result,)h(the)f(degrees/hours)
-227 2609 y(\014eld)28 b(is)f(no)h(longer)g(included)f(b)m(y)g(default.)
-40 b(A)28 b(new)f(\\t")i(format)f(sp)s(eci\014er)f(has)h(b)s(een)e(in)m
-(tro)s(duced)i(\(see)227 2721 y(the)i(F)-8 b(ormat)31
-b(attribute\))g(to)f(allo)m(w)h(min)m(utes)f(and/or)f(seconds)h(of)g
-(time)g(to)g(b)s(e)f(sp)s(eci\014ed)g(if)h(required.)111
-2934 y(4.)46 b(A)35 b(new)f(routine)h(AST)p Fy(_)p FG(MAPBO)m(X)f(has)h
-(b)s(een)f(in)m(tro)s(duced.)52 b(This)34 b(allo)m(ws)i(y)m(ou)f(to)g
-(\014nd)e(the)i(exten)m(t)227 3047 y(of)f(a)g(\\b)s(ounding)f(b)s(o)m
-(x")h(whic)m(h)f(just)h(encloses)g(another)g(b)s(o)m(x)g(after)g(it)h
-(has)e(b)s(een)g(transformed)g(b)m(y)h(a)227 3160 y(Mapping.)60
-b(A)36 b(t)m(ypical)i(use)f(migh)m(t)g(b)s(e)f(to)h(calculate)i(the)e
-(size)h(whic)m(h)e(an)g(image)i(w)m(ould)f(ha)m(v)m(e)g(if)g(it)227
-3273 y(w)m(ere)31 b(transformed)f(b)m(y)g(the)h(Mapping.)111
-3486 y(5.)46 b(A)26 b(new)e(class)j(of)e(Ob)5 b(ject,)27
-b(the)e(In)m(traMap,)i(has)e(b)s(een)g(in)m(tro)s(duced)g(\()p
-Fu(x)p FG(20\).)41 b(This)24 b(is)h(a)h(sp)s(ecialised)g(form)227
-3599 y(of)g(Mapping)g(whic)m(h)f(encapsulates)i(a)f(priv)-5
-b(ately-de\014ned)25 b(co)s(ordinate)i(transformation)f(routine)g(\()p
-Fx(e.g.)227 3712 y FG(written)31 b(in)g(F)-8 b(ortran\))31
-b(so)g(that)h(it)f(ma)m(y)h(b)s(e)e(used)g(lik)m(e)i(an)m(y)f(other)g
-(AST)f(Mapping.)42 b(This)30 b(allo)m(ws)i(y)m(ou)227
-3825 y(to)f(create)h(Mappings)e(that)h(p)s(erform)e(an)m(y)i(conceiv)-5
-b(able)32 b(co)s(ordinate)g(transformation.)111 4038
-y(6.)46 b(The)27 b(in)m(ternal)h(in)m(tegrit)m(y)h(of)e(a)h(F)-8
-b(rameSet)28 b(is)g(no)m(w)f(automatically)j(preserv)m(ed)d(whenev)m
-(er)g(c)m(hanges)h(are)227 4151 y(made)i(to)h(an)m(y)f(attributes)h
-(whic)m(h)f(a\013ect)h(the)g(curren)m(t)e(F)-8 b(rame)31
-b(\(either)g(b)m(y)f(setting)h(or)f(clearing)h(their)227
-4264 y(v)-5 b(alues\).)46 b(This)31 b(is)g(accomplished)i(b)m(y)e
-(appropriately)h(re-mapping)g(the)f(curren)m(t)h(F)-8
-b(rame)33 b(to)f(accoun)m(t)227 4377 y(for)e(an)m(y)h(c)m(hange)h(to)f
-(the)f(co)s(ordinate)i(system)e(whic)m(h)g(it)h(represen)m(ts)f(\()p
-Fu(x)p FG(14.6\).)111 4590 y(7.)46 b(The)33 b(in)m(ternal)g(structure)g
-(of)g(a)g(F)-8 b(rameSet)35 b(is)e(no)m(w)g(automatically)i(tidied)e
-(to)h(eliminate)h(redundan)m(t)227 4703 y(no)s(des)41
-b(whenev)m(er)g(an)m(y)h(of)g(its)g(F)-8 b(rames)42 b(is)g(remo)m(v)m
-(ed)h(or)e(re-mapp)s(ed.)73 b(Automatic)44 b(simpli\014cation)227
-4815 y(of)e(an)m(y)f(comp)s(ound)f(Mappings)h(whic)m(h)h(result)f(ma)m
-(y)h(also)g(o)s(ccur.)73 b(The)41 b(e\013ect)i(of)f(this)f(c)m(hange)h
-(is)227 4928 y(to)34 b(prev)m(en)m(t)g(the)f(accum)m(ulation)i(of)e
-(unnecessary)f(structure)h(in)g(F)-8 b(rameSets)34 b(whic)m(h)f(are)g
-(rep)s(eatedly)227 5041 y(mo)s(di\014ed.)111 5254 y(8.)46
-b(Some)39 b(impro)m(v)m(emen)m(ts)g(ha)m(v)m(e)h(b)s(een)d(made)i(to)g
-(the)g(algorithms)g(for)f(simplifying)g(comp)s(ound)f(Map-)227
-5367 y(pings,)30 b(as)h(used)f(b)m(y)g(AST)p Fy(_)p FG(SIMPLIFY.)111
-5580 y(9.)46 b(The)23 b(textual)h(represen)m(tation)g(used)e(for)h
-(some)g(Ob)5 b(jects)23 b(\()p Fx(i.e.)g FG(when)f(they)h(are)g
-(written)g(to)h(a)f(Channel\))227 5693 y(has)30 b(c)m(hanged)h(sligh)m
-(tly)-8 b(,)33 b(but)c(remains)i(compatible)g(with)f(earlier)i(v)m
-(ersions)e(of)h(AST.)p eop end
-%%Page: 533 543
-TeXDict begin 533 542 bop 0 52 a Fz(G.2)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.2)2294 b FG(533)66 351 y(10.)46
-b(A)23 b(problem)f(has)h(b)s(een)f(\014xed)g(whic)m(h)g(could)h(result)
-g(when)e(using)i(AST)p Fy(_)p FG(READ)f(to)h(read)g(FITS)f(headers)227
-464 y(in)h(whic)m(h)g(the)h(CDEL)-8 b(T)23 b(v)-5 b(alue)24
-b(is)f(zero.)39 b(Previously)-8 b(,)26 b(this)d(could)g(pro)s(duce)f(a)
-i(Mapping)f(whose)h(in)m(v)m(erse)227 577 y(transformation)37
-b(w)m(as)f(not)g(de\014ned)f(and)g(this)h(could)g(unnecessarily)g
-(restrict)h(the)f(use)g(to)g(whic)m(h)g(it)227 690 y(could)26
-b(b)s(e)e(put.)39 b(The)24 b(problem)h(has)g(b)s(een)g(o)m(v)m(ercome)i
-(b)m(y)f(supplying)e(a)h(suitable)h(small)g(CDEL)-8 b(T)25
-b(v)-5 b(alue)227 803 y(for)30 b(FITS)g(axes)h(whic)m(h)f(ha)m(v)m(e)i
-(only)e(a)h(single)g(pixel.)66 1003 y(11.)46 b(A)37 b(bug)f(has)h(b)s
-(een)f(\014xed)g(whic)m(h)g(could)h(o)s(ccasionally)i(cause)e(a)g
-(MatrixMap)h(to)g(b)s(e)e(used)g(with)g(the)227 1116
-y(wrong)e(In)m(v)m(ert)g(attribute)g(v)-5 b(alue)35 b(when)d(it)j
-(forms)e(part)h(of)f(a)i(comp)s(ound)d(Mapping)i(whic)m(h)f(is)h(b)s
-(eing)227 1229 y(simpli\014ed)c(using)g(AST)p Fy(_)p
-FG(SIMPLIFY.)66 1430 y(12.)46 b(A)33 b(bug)g(has)f(b)s(een)g(\014xed)h
-(whic)m(h)f(could)h(cause)h(the)f(AST)p Fy(__)p FG(BAD)g(parameter)g
-(to)h(ha)m(v)m(e)g(an)f(incorrect)227 1543 y(v)-5 b(alue)31
-b(on)f(some)h(platforms.)66 1743 y(13.)46 b(A)37 b(problem)f(has)g(b)s
-(een)g(\014xed)g(whic)m(h)h(could)f(prev)m(en)m(t)i(tic)m(k)g(marks)e
-(b)s(eing)g(dra)m(wn)g(on)h(a)g(co)s(ordinate)227 1856
-y(axis)31 b(close)h(to)f(a)g(singularit)m(y)g(in)f(the)h(co)s(ordinate)
-g(system.)0 2171 y Fw(G.2)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.2)0 2402 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2515 y(v)m(ersions)31
-b(V1.1)g(and)f(V1.2)i(\(not)f(the)f(most)h(recen)m(t)g(v)m(ersion\):)
-111 2796 y(1.)46 b(A)32 b(new)f(routine,)i(AST)p Fy(_)p
-FG(POL)-8 b(YCUR)e(VE,)31 b(has)g(b)s(een)g(in)m(tro)s(duced)g(to)i
-(allo)m(w)g(more)f(e\016cien)m(t)h(plotting)227 2909
-y(of)e(m)m(ultiple)g(geo)s(desic)g(curv)m(es)g(\()p Fu(x)p
-FG(21.3\).)111 3110 y(2.)46 b(A)35 b(new)f(set)g(of)h(functions,)g(AST)
-p Fy(_)p FG(RESAMPLE)p Fp(<)p FG(X)p Fp(>)p FG(,)f(has)g(b)s(een)f(in)m
-(tro)s(duced)h(to)h(p)s(erform)e(resam-)227 3223 y(pling)f(of)h
-(gridded)e(data)i(suc)m(h)f(as)g(images)h(\()p Fx(i.e.)f
-FG(re-gridding\))g(under)f(the)h(con)m(trol)i(of)e(a)h(geometrical)227
-3336 y(transformation)e(sp)s(eci\014ed)f(b)m(y)g(a)h(Mapping.)111
-3536 y(3.)46 b(The)40 b(command-line)g(options)g(\\)p
-Fu(\000)p FG(pgp")g(and)f(\\)p Fu(\000)p FG(pgplot",)44
-b(whic)m(h)39 b(w)m(ere)i(previously)e(synon)m(ymous)227
-3649 y(when)20 b(used)g(with)h(the)g(\\ast)p Fy(_)p FG(link")h(and)f
-(\\ast)p Fy(_)p FG(link)p Fy(_)p FG(adam")h(commands,)g(are)g(no)e
-(longer)i(synon)m(ymous.)227 3762 y(The)28 b(option)h(\\)p
-Fu(\000)p FG(pgp")g(no)m(w)g(causes)g(linking)f(with)h(the)f(Starlink)h
-(v)m(ersion)g(of)f(PGPLOT)g(\(whic)m(h)h(uses)227 3875
-y(GKS)23 b(to)g(generate)i(its)e(output\),)i(while)e(\\)p
-Fu(\000)p FG(pgplot")h(links)e(with)h(the)g(standard)f(\(or)h(\\nativ)m
-(e"\))j(v)m(ersion)227 3988 y(of)31 b(PGPLOT.)111 4188
-y(4.)46 b(The)27 b(routine)h(AST)p Fy(_)p FG(MAPBO)m(X)f(has)g(b)s(een)
-g(c)m(hanged)h(to)g(execute)h(more)e(quic)m(kly)-8 b(,)30
-b(although)d(this)h(has)227 4301 y(b)s(een)i(ac)m(hiev)m(ed)i(at)f(the)
-g(cost)g(of)g(some)f(loss)h(of)g(robustness)e(when)g(used)h(with)g
-(di\016cult)g(Mappings.)111 4502 y(5.)46 b(A)21 b(new)e(v)-5
-b(alue)21 b(of)g(\\FITS-IRAF")g(has)f(b)s(een)f(in)m(tro)s(duced)h(for)
-g(the)g(Enco)s(ding)g(attribute)h(of)f(a)h(FitsChan.)227
-4615 y(This)30 b(new)g(enco)s(ding)h(pro)m(vides)g(an)g(in)m(terim)g
-(solution)g(to)h(the)f(problem)f(of)h(storing)g(co)s(ordinate)h(sys-)
-227 4727 y(tem)j(information)g(in)f(FITS)g(headers,)i(un)m(til)e(the)h
-(prop)s(osed)e(new)h(FITS-W)m(CS)h(standard)e(b)s(ecomes)227
-4840 y(stable.)111 5041 y(6.)46 b(When)27 b(a)g(F)-8
-b(rameSet)29 b(is)e(created)h(from)e(a)i(set)f(of)g(FITS)g(header)g
-(cards)f(\(b)m(y)i(reading)f(from)f(a)i(FitsChan)227
-5154 y(using)e(a)g(\\foreign")h(enco)s(ding\),)g(the)f(base)g(F)-8
-b(rame)27 b(of)e(the)h(resulting)g(F)-8 b(rameSet)27
-b(no)m(w)f(has)g(its)g(Domain)227 5267 y(attribute)31
-b(set)f(to)h(\\GRID".)g(This)e(re\015ects)h(the)g(fact)h(that)f(this)g
-(F)-8 b(rame)31 b(represen)m(ts)e(FITS)g(data)i(grid)227
-5380 y(co)s(ordinates)39 b(\(equiv)-5 b(alen)m(t)40 b(to)e(FITS)g
-(pixel)g(co)s(ordinates|see)h Fu(x)p FG(7.13\).)66 b(Previously)-8
-b(,)41 b(this)d(Domain)227 5493 y(v)-5 b(alue)31 b(w)m(as)g(not)f(set.)
-111 5693 y(7.)46 b(AST)p Fy(_)p FG(FINDFITS)30 b(no)m(w)g(ignores)h
-(trailing)g(spaces)g(in)f(its)h(k)m(eyw)m(ord)g(template.)p
-eop end
-%%Page: 534 544
-TeXDict begin 534 543 bop 0 52 a FG(534)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(8.)46
-b(AST)p Fy(_)p FG(PUTFITS)23 b(no)m(w)i(recognises)h(\\D")h(and)d(\\d")
-h(as)g(v)-5 b(alid)26 b(exp)s(onen)m(t)f(c)m(haracters)h(in)f
-(\015oating)g(p)s(oin)m(t)227 464 y(n)m(um)m(b)s(ers.)111
-660 y(9.)46 b(The)22 b(FitsChan)h(class)g(is)f(no)m(w)h(more)f(toleran)
-m(t)j(of)d(common)h(minor)f(violations)i(of)f(the)f(FITS)g(standard.)66
-857 y(10.)46 b(The)f(FitsChan)g(class)g(no)m(w)g(incorp)s(orates)h(an)f
-(impro)m(v)m(ed)g(test)h(for)f(the)g(linearit)m(y)h(of)f(Mappings,)227
-970 y(allo)m(wing)25 b(more)e(reliable)g(con)m(v)m(ersion)h(of)f(AST)f
-(data)i(in)m(to)f(FITS)f(\(using)h(\\foreign")h(FITS)e(enco)s(dings\).)
-66 1166 y(11.)46 b(Some)33 b(further)e(impro)m(v)m(emen)m(ts)i(ha)m(v)m
-(e)h(b)s(een)d(made)i(to)g(the)f(algorithms)i(for)e(simplifying)g(comp)
-s(ound)227 1279 y(Mappings,)f(as)f(used)g(b)m(y)g(AST)p
-Fy(_)p FG(SIMPLIFY.)66 1475 y(12.)46 b(A)33 b(new)f(UnitRadius)g
-(attribute)h(has)g(b)s(een)e(added)h(to)i(the)e(SphMap)g(class.)48
-b(This)31 b(allo)m(ws)j(impro)m(v)m(ed)227 1588 y(simpli\014cation)k
-(of)e(comp)s(ound)f(Mappings)i(\(CmpMaps\))f(in)m(v)m(olving)i(SphMaps)
-d(and)h(t)m(ypically)i(im-)227 1701 y(pro)m(v)m(es)31
-b(p)s(erformance)f(when)f(handling)h(FITS)g(w)m(orld)g(co)s(ordinate)h
-(information.)66 1897 y(13.)46 b(A)30 b(MatrixMap)h(no)e(longer)i
-(propagates)f(input)f(co)s(ordinate)h(v)-5 b(alues)30
-b(of)g(AST)p Fy(__)p FG(BAD)g(automatically)227 2010
-y(to)40 b(all)g(output)f(co)s(ordinates.)68 b(If)38 b(certain)i(output)
-f(co)s(ordinates)h(do)f(not)g(dep)s(end)f(on)h(the)g(a\013ected)227
-2123 y(input)g(co)s(ordinate\(s\))i(b)s(ecause)f(the)g(relev)-5
-b(an)m(t)41 b(matrix)f(elemen)m(ts)h(are)f(zero,)k(then)39
-b(they)h(ma)m(y)g(no)m(w)227 2236 y(remain)31 b(v)-5
-b(alid.)66 2432 y(14.)46 b(A)32 b(minor)e(bug)h(has)g(b)s(een)g
-(corrected)h(whic)m(h)f(could)g(cause)h(certain)g(pro)5
-b(jections)32 b(whic)m(h)f(in)m(v)m(olv)m(e)j(half)227
-2545 y(the)k(celestial)i(sphere)d(to)h(pro)s(duce)e(v)-5
-b(alid)38 b(co)s(ordinates)g(for)f(the)h(other)g(\(unpro)5
-b(jected\))37 b(half)h(of)f(the)227 2658 y(sphere)30
-b(as)g(w)m(ell.)66 2855 y(15.)46 b(A)30 b(bug)f(has)h(b)s(een)f
-(\014xed)g(whic)m(h)h(could)g(o)s(ccasionally)i(cause)e(AST)p
-Fy(_)p FG(CONVER)-8 b(T)29 b(to)h(think)f(that)i(con-)227
-2968 y(v)m(ersion)g(b)s(et)m(w)m(een)g(a)g(CmpF)-8 b(rame)30
-b(and)g(another)g(F)-8 b(rame)32 b(w)m(as)e(p)s(ossible)g(when,)g(in)g
-(fact,)i(it)f(w)m(asn't.)0 3275 y Fw(G.3)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.3)0 3503 y FG(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-3616 y(v)m(ersions)31 b(V1.2)g(and)f(V1.3)i(\(not)f(the)f(most)h(recen)
-m(t)g(v)m(ersion\):)111 3892 y(1.)46 b(A)33 b(new)f(set)h(of)f
-(functions,)h(AST)p Fy(_)p FG(RESAMPLE)p Fp(<)p FG(X)p
-Fp(>)p FG(,)e(has)i(b)s(een)e(in)m(tro)s(duced)h(to)h(pro)m(vide)g
-(e\016cien)m(t)227 4004 y(resampling)26 b(of)g(gridded)f(data,)j(suc)m
-(h)e(as)g(sp)s(ectra)g(and)f(images,)j(under)d(the)h(con)m(trol)h(of)f
-(a)h(geometrical)227 4117 y(transformation)35 b(sp)s(eci\014ed)e(b)m(y)
-h(a)h(Mapping.)51 b(A)35 b(v)-5 b(ariet)m(y)35 b(of)f(sub-pixel)g(in)m
-(terp)s(olation)h(sc)m(hemes)g(are)227 4230 y(supp)s(orted.)111
-4427 y(2.)46 b(A)32 b(new)f(class,)i(PcdMap,)g(has)e(b)s(een)g(in)m
-(tro)s(duced.)44 b(This)31 b(is)h(a)g(sp)s(ecialised)g(form)f(of)h
-(Mapping)g(whic)m(h)227 4539 y(implemen)m(ts)f(2-dimensional)g
-(pincushion)e(or)i(barrel)f(distortion.)111 4736 y(3.)46
-b(A)40 b(bug)f(has)h(b)s(een)f(\014xed)g(whic)m(h)h(could)g(cause)g(a)g
-(FitsChan)g(to)h(pro)s(duce)d(to)s(o)j(man)m(y)f(digits)g(when)227
-4849 y(formatting)31 b(\015oating)g(p)s(oin)m(t)f(v)-5
-b(alues)31 b(for)e(inclusion)h(in)g(a)h(FITS)e(header)h(if)g(the)g(n)m
-(umerical)h(v)-5 b(alue)30 b(w)m(as)227 4962 y(in)g(the)h(range)g
-(-0.00099999.)20 b(.)15 b(.)g(to)32 b(-0.0001.)111 5158
-y(4.)46 b(A)32 b(bug)f(has)g(b)s(een)f(\014xed)h(whic)m(h)g(could)h
-(cause)g(a)f(FitsChan)h(to)g(lose)g(the)f(commen)m(t)i(asso)s(ciated)g
-(with)227 5271 y(a)e(string)f(v)-5 b(alue)31 b(in)f(a)h(FITS)f(header.)
-111 5467 y(5.)46 b(A)27 b(FitsChan)f(no)m(w)h(rep)s(orts)e(an)i(error)f
-(if)g(it)h(reads)g(a)f(FITS)g(header)h(whic)m(h)f(iden)m(ti\014es)h(a)g
-(non-standard)227 5580 y(sky)41 b(pro)5 b(jection)42
-b(\(previously)-8 b(,)44 b(this)d(w)m(as)g(accepted)h(without)f(error)g
-(and)f(a)h(Cartesian)h(pro)5 b(jection)227 5693 y(used)30
-b(instead\).)p eop end
-%%Page: 535 545
-TeXDict begin 535 544 bop 0 52 a Fz(G.4)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.4)2294 b FG(535)111 351
-y(6.)46 b(A)d(bug)f(has)h(b)s(een)e(\014xed)h(whic)m(h)h(could)g(prev)m
-(en)m(t)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(the)g(co)s(ordinate)g
-(systems)227 464 y(represen)m(ted)d(b)m(y)f(t)m(w)m(o)i(CmpF)-8
-b(rames.)69 b(This)38 b(could)i(only)g(o)s(ccur)f(if)h(the)g(CmpF)-8
-b(rames)39 b(con)m(tained)i(a)227 577 y(relativ)m(ely)33
-b(large)e(n)m(um)m(b)s(er)f(of)g(nested)g(F)-8 b(rames.)111
-766 y(7.)46 b(F)-8 b(urther)35 b(impro)m(v)m(emen)m(ts)h(ha)m(v)m(e)g
-(b)s(een)e(made)h(to)h(the)f(simpli\014cation)h(of)f(comp)s(ound)e
-(Mappings,)j(in-)227 879 y(cluding)29 b(\014xes)g(for)g(sev)m(eral)i
-(bugs)d(whic)m(h)h(could)h(cause)f(inde\014nite)g(lo)s(oping)h(or)f(un)
-m(w)m(an)m(ted)g(error)g(mes-)227 992 y(sages.)111 1181
-y(8.)46 b(Some)31 b(memory)f(leaks)h(ha)m(v)m(e)h(b)s(een)d(\014xed.)
-111 1369 y(9.)46 b(A)31 b(small)g(n)m(um)m(b)s(er)e(of)h(do)s(cumen)m
-(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e(corrected.)0
-1665 y Fw(G.4)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.4)0
-1887 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2000 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.3)g(and)f(V1.4)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 2264 y(1.)46 b(A)35 b(new)g(MathMap)h(class)g(has)e(b)s
-(een)h(in)m(tro)s(duced.)54 b(This)34 b(is)h(a)g(form)g(of)g(Mapping)g
-(that)h(allo)m(ws)g(y)m(ou)227 2377 y(to)c(de\014ne)f(co)s(ordinate)h
-(transformations)g(in)f(a)h(\015exible)f(and)g(transp)s(ortable)g(w)m
-(a)m(y)h(using)f(arithmetic)227 2490 y(op)s(erations)g(and)f
-(mathematical)i(functions)e(similar)h(to)g(those)g(a)m(v)-5
-b(ailable)33 b(in)d(F)-8 b(ortran.)111 2679 y(2.)46 b
-FE(W)-12 b(ARNING|INCOMP)j(A)g(TIBLE)32 b(CHANGE.)27
-b FG(T)-8 b(ransformation)28 b(routines)g(used)f(with)h(the)227
-2791 y(In)m(traMap)h(class)g(\(see,)g(for)f(example,)i(AST)p
-Fy(_)p FG(INTRAREG\))d(no)m(w)h(require)g(a)h(THIS)e(p)s(oin)m(ter)h
-(as)g(their)227 2904 y(\014rst)41 b(argumen)m(t.)74 b
-FE(Existing)47 b(implemen)m(tations)h(will)f(not)g(con)m(tin)m(ue)i(to)
-e(w)m(ork)g(correctly)227 3017 y(with)e(this)g(v)m(ersion)h(of)f(AST)g
-(unless)h(this)f(argumen)m(t)g(is)g(added.)67 b FG(There)39
-b(is)g(no)h(need)f(for)227 3130 y(existing)32 b(soft)m(w)m(are)f(to)h
-(mak)m(e)f(use)f(of)h(this)f(p)s(oin)m(ter,)g(but)g(it)h(m)m(ust)f(b)s
-(e)g(presen)m(t.)227 3281 y(This)45 b(c)m(hange)h(has)f(b)s(een)g(in)m
-(tro)s(duced)g(so)g(that)h(transformation)g(functions)f(can)g(gain)h
-(access)h(to)227 3394 y(In)m(traMap)31 b(attributes.)111
-3583 y(3.)46 b(A)34 b(new)e(In)m(traFlag)j(attribute)f(has)f(b)s(een)f
-(added)h(to)h(the)f(In)m(traMap)g(class.)50 b(This)33
-b(allo)m(ws)h(the)f(trans-)227 3696 y(formation)27 b(routines)g(used)f
-(b)m(y)g(In)m(traMaps)h(to)g(adapt)g(to)h(pro)s(duce)d(the)i(required)f
-(transformation)h(on)227 3809 y(a)k(p)s(er-In)m(traMap)f(basis)g(\()p
-Fu(x)p FG(20.9\).)111 3997 y(4.)46 b(The)30 b(Plot)h(attributes)g(Ma)5
-b(jTic)m(kLen)31 b(and)f(MinTic)m(kLen,)h(whic)m(h)f(con)m(trol)i(the)f
-(length)f(of)h(ma)5 b(jor)30 b(and)227 4110 y(minor)d(tic)m(k)i(marks)e
-(on)g(co)s(ordinate)h(axes,)h(ma)m(y)e(no)m(w)h(b)s(e)e(subscripted)g
-(using)h(an)g(axis)h(n)m(um)m(b)s(er.)38 b(This)227 4223
-y(allo)m(ws)31 b(tic)m(k)g(marks)e(of)g(di\013eren)m(t)h(lengths)g(to)g
-(b)s(e)f(used)g(on)g(eac)m(h)h(axis.)41 b(It)30 b(also)g(allo)m(ws)h
-(tic)m(k)g(marks)e(to)227 4336 y(b)s(e)h(suppressed)e(on)j(one)f(axis)h
-(only)g(b)m(y)f(setting)h(the)g(length)g(to)g(zero.)111
-4525 y(5.)46 b(The)33 b(v)-5 b(alue)34 b(of)f(the)h(Plot)g(attribute)g
-(NumLab,)f(whic)m(h)g(con)m(trols)h(the)g(plotting)g(of)f(n)m(umerical)
-h(lab)s(els)227 4638 y(on)h(co)s(ordinate)g(axes,)i(no)d(longer)i(has)e
-(an)m(y)h(e\013ect)h(on)e(whether)g(lab)s(elling)i(of)f(a)g(co)s
-(ordinate)g(grid)f(is)227 4751 y(in)m(terior)d(or)g(exterior)g(\(as)g
-(con)m(trolled)h(b)m(y)e(the)h(Lab)s(elling)g(attribute\).)111
-4940 y(6.)46 b(The)32 b(FitsChan)h(class)g(no)m(w)g(pro)m(vides)f(some)
-i(supp)s(ort)c(for)j(the)g(IRAF-sp)s(eci\014c)g(\\ZPX")g(sky)f(pro)5
-b(jec-)227 5053 y(tion,)28 b(whic)m(h)f(is)g(con)m(v)m(erted)h
-(transparen)m(tly)f(in)m(to)g(the)g(equiv)-5 b(alen)m(t)28
-b(FITS)e(\\ZPN")h(pro)5 b(jection)28 b(\(see)f(the)227
-5165 y(description)k(of)f(the)h(Enco)s(ding)f(attribute)h(for)f
-(details\).)111 5354 y(7.)46 b(The)28 b(FitsChan)g(class)h(no)m(w)f
-(recognises)h(the)f(co)s(ordinate)h(system)f(\\ICRS")g(\(In)m
-(ternational)i(Celestial)227 5467 y(Reference)36 b(System\))e(as)h
-(equiv)-5 b(alen)m(t)36 b(to)g(\\FK5".)54 b(This)34 b(is)h(an)f(in)m
-(terim)h(measure)g(and)f(full)g(supp)s(ort)227 5580 y(for)j(the)f
-(\(exceedingly)j(small\))e(di\013erence)g(b)s(et)m(w)m(een)g(ICRS)f
-(and)g(FK5)h(will)f(b)s(e)g(added)g(at)h(a)g(future)227
-5693 y(release.)p eop end
-%%Page: 536 546
-TeXDict begin 536 545 bop 0 52 a FG(536)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)227 351 y FG(Note)37
-b(that)f(\\ICRS")g(is)f(not)h(y)m(et)h(recognised)f(as)g(a)g(co)s
-(ordinate)g(system)g(b)m(y)g(other)f(classes)i(suc)m(h)e(as)227
-464 y(SkyF)-8 b(rame,)31 b(so)g(this)f(c)m(hange)i(only)e(facilitates)j
-(the)e(imp)s(ortation)g(of)f(foreign)h(data.)111 656
-y(8.)46 b(A)35 b(bug)f(in)g(the)g(FitsChan)g(class)i(has)e(b)s(een)f
-(\014xed)h(whic)m(h)g(could)h(result)f(in)g(longitude)h(v)-5
-b(alues)35 b(b)s(eing)227 768 y(incorrect)30 b(b)m(y)f(180)i(degrees)f
-(when)e(using)h(cylindrical)h(sky)e(pro)5 b(jections,)31
-b(suc)m(h)e(as)g(the)g(FITS)g(\\CAR")227 881 y(pro)5
-b(jection.)111 1073 y(9.)46 b(A)30 b(bug)f(in)g(the)h(FitsChan)f(class)
-h(has)f(b)s(een)g(\014xed)g(whic)m(h)g(could)h(result)f(in)g(the)h
-(FITS)f(sky)g(pro)5 b(jection)227 1186 y(parameters)40
-b(Pro)5 b(jP\(0\))39 b(to)h(Pro)5 b(jP\(9\))40 b(b)s(eing)e
-(incorrectly)i(named)f(PR)m(OJP1)f(to)i(PR)m(OJP10)f(when)227
-1299 y(written)31 b(out)f(as)h(FITS)f(cards.)66 1490
-y(10.)46 b(A)e(bug)e(in)i(the)f(FitsChan)g(class)h(has)g(b)s(een)e
-(\014xed)h(whic)m(h)g(could)g(cause)h(confusion)f(b)s(et)m(w)m(een)h
-(the)227 1603 y(FITS-IRAF)31 b(and)g(FITS-W)m(CS)g(enco)s(ding)g(sc)m
-(hemes)h(if)f(b)s(oth)g(a)g(CD)h(matrix)f(and)g(a)h(PC)e(matrix)i(are)
-227 1716 y(erroneously)f(presen)m(t)f(in)g(a)h(FITS)e(header.)66
-1907 y(11.)46 b(Some)31 b(minor)f(memory)g(leaks)h(ha)m(v)m(e)h(b)s
-(een)d(\014xed.)66 2099 y(12.)46 b(A)31 b(small)g(n)m(um)m(b)s(er)e(of)
-h(do)s(cumen)m(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e(corrected.)0
-2398 y Fw(G.5)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.5)0
-2622 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2735 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.4)g(and)f(V1.5)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 3003 y(1.)46 b(The)36 b(FitsChan)g(class)i(has)e(b)s
-(een)f(mo)s(di\014ed)h(to)h(supp)s(ort)d(the)j(latest)h(draft)e(FITS)g
-(W)m(CS)g(standard,)227 3116 y(describ)s(ed)27 b(in)g(the)h(t)m(w)m(o)h
-(pap)s(ers)e(\\Represen)m(tation)i(of)f(w)m(orld)g(co)s(ordinates)g(in)
-f(FITS")h(\(E.W.)16 b(Greisen)227 3229 y(and)31 b(M.)16
-b(Calabretta,)34 b(dated)d(30th)i(No)m(v)m(em)m(b)s(er,)g(1999\),)i
-(and)c(\\Represen)m(tation)i(of)f(celestial)i(co)s(ordi-)227
-3342 y(nates)27 b(in)e(FITS")h(\(M.)16 b(Calabretta)27
-b(and)f(E.W.)16 b(Greisen,)27 b(dated)f(24th)h(Septem)m(b)s(er,)f
-(1999\).)41 b(These)26 b(are)227 3455 y(a)m(v)-5 b(ailable)33
-b(at)e(h)m(ttp://www.cv.nrao.edu/\014ts/do)s(cumen)m(ts/w)m(cs/w)m
-(cs.h)m(tml.)227 3607 y(The)f(FITS-W)m(CS)g(enco)s(ding)g(no)m(w)h
-(uses)f(these)h(up)s(dated)e(con)m(v)m(en)m(tions.)42
-b(The)30 b(main)h(c)m(hanges)g(are:)336 3824 y Fu(\017)46
-b FG(Rotation)31 b(and)d(scaling)h(of)g(pixel)g(axes)g(is)g(no)m(w)f
-(represen)m(ted)h(b)m(y)f(a)h(matrix)g(of)g Fy(CDj_i)e
-FG(k)m(eyw)m(ords)427 3937 y(instead)k(of)f(a)h(com)m(bination)h(of)e
-Fy(PCjjjiii)f FG(and)g Fy(CDELTj)g FG(k)m(eyw)m(ords.)336
-4085 y Fu(\017)46 b FG(Pro)5 b(jection)37 b(parameters)g(are)f(no)m(w)g
-(asso)s(ciated)h(with)f(particular)g(axes)h(and)e(are)h(represen)m(ted)
-427 4198 y(b)m(y)31 b Fy(PVi_m)d FG(k)m(eyw)m(ords)j(instead)g(of)f
-(the)h Fy(PROJPm)e FG(k)m(eyw)m(ords.)336 4346 y Fu(\017)46
-b FG(The)31 b(tangen)m(t)j(plane)d(pro)5 b(jection)33
-b(\(\\T)-8 b(AN"\))33 b(can)f(no)m(w)g(include)f(optional)i(p)s
-(olynomial)f(correc-)427 4459 y(tion)f(terms.)336 4607
-y Fu(\017)46 b FG(An)24 b(en)m(tire)g(set)h(of)e(k)m(eyw)m(ords)i(m)m
-(ust)e(b)s(e)g(supplied)g(for)g(eac)m(h)i(set)f(of)g(secondary)g(axis)g
-(descriptions,)427 4720 y(and)39 b(eac)m(h)i(suc)m(h)e(k)m(eyw)m(ord)h
-(m)m(ust)g(\014nish)e(with)h(a)h(single)g(c)m(haracter)h(indicating)g
-(whic)m(h)e(set)h(it)427 4833 y(b)s(elongs)f(to.)67 b(This)39
-b(means)f(that)i(k)m(eyw)m(ords)f(whic)m(h)g(previously)g(o)s(ccupied)g
-(eigh)m(t)h(c)m(haracters)427 4946 y(ha)m(v)m(e)d(b)s(een)f(shorten)f
-(to)i(sev)m(en)f(to)h(lea)m(v)m(e)h(ro)s(om)e(for)f(this)h(extra)h(c)m
-(haracter.)59 b(Th)m(us)35 b Fy(LONGPOLE)427 5059 y FG(has)30
-b(b)s(ecome)h Fy(LONPOLE)e FG(and)g Fy(RADECSYS)f FG(has)j(b)s(ecome)f
-Fy(RADESYS)p FG(.)111 5276 y(2.)46 b(Tw)m(o)31 b(new)f(enco)s(dings)g
-(ha)m(v)m(e)h(b)s(een)f(added)g(to)h(the)f(FitsChan)h(class:)227
-5467 y FE(FITS-PC)45 b FG(This)34 b(enco)s(ding)g(uses)g(the)h(con)m(v)
-m(en)m(tions)i(of)d(the)h(no)m(w)g(sup)s(erseded)d(FITS)i(W)m(CS)h(pap)
-s(er)427 5580 y(b)m(y)j(E.W.)16 b(Greisen)37 b(and)g(M.)16
-b(Calabretta)39 b(whic)m(h)e(used)g(k)m(eyw)m(ords)h
-Fy(CDELTj)e FG(and)g Fy(PCjjjiii)g FG(to)427 5693 y(describ)s(e)27
-b(axis)h(scaling)h(and)e(rotation.)41 b(These)27 b(are)h(the)g(con)m(v)
-m(en)m(tions)h(whic)m(h)e(w)m(ere)h(used)f(b)m(y)g(the)p
-eop end
-%%Page: 537 547
-TeXDict begin 537 546 bop 0 52 a Fz(G.6)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.6)2294 b FG(537)427 351
-y(FITS-W)m(CS)30 b(enco)s(ding)f(prior)h(to)g(v)m(ersion)g(1.5)h(of)f
-(AST.)f(This)g(enco)s(ding)h(is)g(pro)m(vided)f(to)i(allo)m(w)427
-464 y(existing)c(data)f(whic)m(h)f(use)g(these)g(con)m(v)m(en)m(tions)j
-(to)e(b)s(e)e(read.)39 b(It)26 b(should)e(not)h(in)g(general)i(b)s(e)d
-(used)427 577 y(to)31 b(create)h(new)e(data.)227 716
-y FE(FITS-AIPS)45 b FG(This)26 b(enco)s(ding)g(is)h(based)f(on)g(the)h
-(con)m(v)m(en)m(tions)h(describ)s(ed)e(in)g(the)g(do)s(cumen)m(t)h
-(\\Non-)427 829 y(linear)d(Co)s(ordinate)g(Systems)g(in)f(AIPS")g(b)m
-(y)h(Eric)g(W.)g(Greisen)g(\(revised)g(9th)g(Septem)m(b)s(er,)h(1994)
-427 942 y(and)45 b(a)m(v)-5 b(ailable)48 b(b)m(y)d(ftp)g(from)g
-(\014ts.cv.nrao.edu)h(/\014ts/do)s(cumen)m(ts/w)m(cs/aips27.ps.Z\).)i
-(This)427 1055 y(enco)s(ding)31 b(uses)f Fy(CROTAi)e
-FG(and)i Fy(CDELTi)f FG(k)m(eyw)m(ords)h(to)h(describ)s(e)f(axis)h
-(rotation)h(and)e(scaling.)111 1236 y(3.)46 b(The)31
-b(FitsChan)g(class)h(no)m(w)f(pro)m(vides)h(some)f(supp)s(ort)f(for)h
-(the)g(IRAF-sp)s(eci\014c)h(\\TNX")g(sky)f(pro)5 b(jec-)227
-1349 y(tion,)28 b(whic)m(h)d(is)h(con)m(v)m(erted)i(transparen)m(tly)e
-(in)m(to)h(the)f(equiv)-5 b(alen)m(t)27 b(FITS)f(\\T)-8
-b(AN")27 b(pro)5 b(jection)26 b(\(see)h(the)227 1462
-y(description)k(of)f(the)h(Enco)s(ding)f(attribute)h(for)f(details\).)
-111 1642 y(4.)46 b(F)-8 b(rameSets)29 b(originally)g(read)f(from)g(a)g
-(DSS)f(enco)s(ded)h(FITS)f(header)h(can)g(no)m(w)g(b)s(e)f(written)h
-(out)g(using)227 1755 y(the)c(FITS-W)m(CS)f(enco)s(ding)h(\(a)g(T)-8
-b(AN)24 b(pro)5 b(jection)25 b(with)e(correction)i(terms)f(will)g(b)s
-(e)f(used\))g(in)g(addition)227 1868 y(to)28 b(the)e(DSS)g(enco)s
-(ding.)40 b(The)26 b(rev)m(erse)h(is)f(also)i(p)s(ossible:)38
-b(F)-8 b(rameSets)28 b(originally)g(read)e(from)g(a)h(FITS-)227
-1981 y(W)m(CS)g(enco)s(ded)e(FITS)h(header)g(and)g(whic)m(h)g(use)g(a)g
-(T)-8 b(AN)27 b(pro)5 b(jection)27 b(can)f(no)m(w)h(b)s(e)e(written)h
-(out)h(using)227 2094 y(the)k(DSS)f(enco)s(ding.)111
-2275 y(5.)46 b(The)d(algorithm)i(used)d(b)m(y)i(the)f(FitsChan)g(class)
-i(to)f(v)m(erify)g(that)g(a)f(F)-8 b(rameSet)45 b(conforms)e(to)h(the)
-227 2388 y(FITS-W)m(CS)26 b(mo)s(del)h(has)f(b)s(een)g(impro)m(v)m(ed)h
-(so)g(that)g(F)-8 b(rameSets)28 b(including)e(more)h(complex)g
-(mixtures)227 2500 y(of)k(parallel)g(and)f(serial)h(Mappings)f(can)h(b)
-s(e)f(written)g(out)h(using)f(the)g(FITS-W)m(CS)g(enco)s(ding.)111
-2681 y(6.)46 b(The)26 b(FitsChan)g(class)h(has)e(b)s(een)h(c)m(hanged)g
-(so)h(that)f(long)h(strings)f(included)f(in)h(the)g(description)g(of)h
-(an)227 2794 y(Ob)5 b(ject)32 b(can)f(b)s(e)g(sa)m(v)m(ed)h(and)f
-(restored)g(without)h(truncation)f(when)f(using)h(the)h(NA)-8
-b(TIVE)31 b(enco)s(ding.)227 2907 y(Previously)-8 b(,)34
-b(v)m(ery)e(long)h(F)-8 b(rame)33 b(titles,)i(mathematical)f
-(expressions,)f Fx(etc.)45 b FG(w)m(ere)33 b(truncated)f(if)g(they)227
-3020 y(exceeded)26 b(the)f(capacit)m(y)i(of)e(a)g(single)g(FITS)f
-(header)h(card.)39 b(They)24 b(are)h(no)m(w)g(split)f(o)m(v)m(er)j(sev)
-m(eral)f(header)227 3133 y(cards)j(so)h(that)g(they)f(can)h(b)s(e)e
-(restored)i(without)f(truncation.)41 b(Note,)31 b(this)e(facilit)m(y)i
-(is)f(only)f(a)m(v)-5 b(ailable)227 3246 y(when)30 b(using)g(NA)-8
-b(TIVE)30 b(enco)s(ding.)111 3426 y(7.)46 b(The)33 b(FitsChan)f(class)i
-(has)e(a)i(new)e(attribute)i(called)g(W)-8 b(arnings)33
-b(whic)m(h)f(can)i(b)s(e)e(used)g(to)h(select)i(p)s(o-)227
-3539 y(ten)m(tially)i(dangerous)c(conditions)i(under)e(whic)m(h)g(w)m
-(arnings)h(should)f(b)s(e)h(issued.)51 b(These)34 b(conditions)227
-3652 y(include)29 b(\(for)f(instance\))i(unsupp)s(orted)c(features)j
-(within)f(non-standard)f(pro)5 b(jections,)30 b(missing)e(k)m(ey-)227
-3765 y(w)m(ords)i(for)g(whic)m(h)g(default)h(v)-5 b(alues)31
-b(will)f(b)s(e)g(used,)g Fx(etc)p FG(.)111 3946 y(8.)46
-b(The)c(WcsMap)g(class)h(has)e(b)s(een)h(c)m(hanged)g(to)h(supp)s(ort)d
-(the)i(c)m(hanges)g(made)g(to)h(the)f(FITS-W)m(CS)227
-4059 y(enco)s(ding)31 b(in)f(the)g(FitsChan)g(class:)336
-4240 y Fu(\017)46 b FG(Pro)5 b(jection)42 b(parameters)f(are)g(no)m(w)f
-(asso)s(ciated)i(with)e(a)h(particular)g(axis)g(and)f(are)h(sp)s
-(eci\014ed)427 4352 y(using)h(a)g(new)g(set)g(of)g(attributes)h(called)
-g(PVj)p Fy(_)p FG(m.)75 b(Here,)45 b(\\j")e(is)f(the)g(index)g(of)g(an)
-g(axis)g(of)427 4465 y(WcsMap,)32 b(and)e(\\m")h(is)f(the)h(index)e(of)
-i(the)g(pro)5 b(jection)31 b(parameter.)336 4605 y Fu(\017)46
-b FG(The)28 b(old)g(attributes)g(Pro)5 b(jP\(0\))29 b(to)g(Pro)5
-b(jP\(9\))28 b(are)h(still)g(a)m(v)-5 b(ailable)30 b(but)d(are)h(no)m
-(w)g(deprecated)h(in)427 4717 y(fa)m(v)m(our)g(of)g(the)g(new)f(PVj)p
-Fy(_)p FG(m)f(attributes.)41 b(They)28 b(are)h(in)m(terpreted)f(as)h
-(aliases)h(for)e(PV\(axlat\))p Fy(_)p FG(0)427 4830 y(to)j(PV\(axlat\))
-p Fy(_)p FG(9,)i(where)d(\\axlat")j(is)d(the)h(index)f(of)g(the)h
-(latitude)g(axis.)336 4970 y Fu(\017)46 b FG(The)32 b(GLS)h(pro)5
-b(jection)33 b(pro)5 b(jection)33 b(has)f(b)s(een)g(renamed)g(as)h
-(SFL,)g(but)f(the)g(AST)p Fy(__)p FG(GLS)f(t)m(yp)s(e)427
-5082 y(has)f(b)s(een)g(retained)h(as)f(an)h(alias)g(for)f(AST)p
-Fy(__)p FG(SFL.)0 5366 y Fw(G.6)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V1.6)0 5580 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 5693 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.5)g(and)f(V1.6:)p eop end
-%%Page: 538 548
-TeXDict begin 538 547 bop 0 52 a FG(538)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(1.)46
-b(A)24 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h(Plot)h(class)f
-(whic)m(h)f(could)h(cause)g(groups)f(of)h(tic)m(k)h(marks)e(to)h(b)s(e)
-f(skipp)s(ed)227 464 y(when)30 b(using)g(v)m(ery)g(small)h(gaps.)111
-671 y(2.)46 b(A)35 b(bug)f(has)h(b)s(een)f(\014xed)g(in)h(the)g(Plot)g
-(class)h(whic)m(h)f(could)g(cause)g(axes)g(to)h(b)s(e)e(lab)s(eled)h
-(outside)g(the)227 784 y(visible)c(windo)m(w,)f(resulting)h(in)f(no)g
-(axes)h(b)s(eing)f(visible.)111 991 y(3.)46 b(The)32
-b(FITS-W)m(CS)h(enco)s(ding)g(used)e(b)m(y)i(the)g(FitsChan)g(class)g
-(no)m(w)g(includes)f(the)h(W)m(CSNAME)g(k)m(ey-)227 1103
-y(w)m(ord.)44 b(When)32 b(creating)h(a)f(F)-8 b(rameSet)32
-b(from)f(FITS)g(headers,)h(the)g(v)-5 b(alues)32 b(of)f(the)h(W)m
-(CSNAME)g(k)m(ey-)227 1216 y(w)m(ords)i(are)h(no)m(w)g(used)e(as)i(the)
-g(Domain)g(names)f(for)g(the)h(corresp)s(onding)f(F)-8
-b(rames)35 b(in)f(the)h(returned)227 1329 y(F)-8 b(rameSet.)42
-b(When)30 b(writing)g(a)h(F)-8 b(rameSet)32 b(to)f(a)f(FITS)g(header)g
-(the)g(Domain)h(names)g(of)f(eac)m(h)i(F)-8 b(rame)227
-1442 y(are)31 b(stored)g(in)f(W)m(CSNAME)h(k)m(eyw)m(ords)f(in)g(the)h
-(header.)111 1649 y(4.)46 b(The)34 b(FITS-W)m(CS)f(enco)s(ding)h(used)f
-(b)m(y)h(the)h(FitsChan)e(class)i(no)m(w)f(attempts)h(to)g(retain)f
-(the)g(iden)m(ti-)227 1762 y(\014cation)f(letter)f(asso)s(ciated)h
-(with)f(m)m(ultiple)g(axis)g(descriptions.)44 b(When)31
-b(reading)g(a)h(F)-8 b(rameSet)33 b(from)227 1875 y(a)38
-b(FITS)f(header,)j(the)e(iden)m(ti\014cation)h(letter)g(is)f(stored)g
-(in)g(the)g(Iden)m(t)f(attribute)i(for)e(eac)m(h)i(F)-8
-b(rame.)227 1988 y(When)42 b(writing)g(a)h(F)-8 b(rameSet)43
-b(to)g(a)f(FITS)f(header,)k(the)e(iden)m(ti\014cation)g(letter)h(is)e
-(read)g(from)f(the)227 2101 y(Iden)m(t)28 b(attribute)g(of)f(eac)m(h)i
-(F)-8 b(rame.)40 b(The)27 b(letter)i(to)f(asso)s(ciate)h(with)e(eac)m
-(h)i(F)-8 b(rame)28 b(can)g(b)s(e)f(c)m(hanged)h(b)m(y)227
-2213 y(assigning)j(a)g(new)f(v)-5 b(alue)31 b(to)g(the)f(F)-8
-b(rame's)32 b(Iden)m(t)e(attribute.)111 2420 y(5.)46
-b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g(FITS-AIPS)f
-(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227 2533
-y(class)g(no)m(w)e(create)i(a)f(SkyF)-8 b(rame)31 b(with)f(the)h
-(System)g(attribute)g(set)g(to)g(\\Unkno)m(wn")g(if)g(the)f(CTYPE)227
-2646 y(k)m(eyw)m(ords)h(in)f(the)h(supplied)e(header)h(refers)g(to)h
-(an)g(unkno)m(wn)e(celestial)k(co)s(ordinate)e(system.)41
-b(Previ-)227 2759 y(ously)-8 b(,)31 b(a)g(F)-8 b(rame)31
-b(w)m(as)g(used)f(instead)g(of)h(a)g(SkyF)-8 b(rame.)111
-2966 y(6.)46 b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g
-(FITS-AIPS)f(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227
-3079 y(class)38 b(no)f(longer)h(rep)s(ort)f(an)g(error)g(if)g(the)h
-(FITS)e(header)h(con)m(tains)i(no)e(CTYPE)f(k)m(eyw)m(ords.)62
-b(It)37 b(is)227 3191 y(assumed)22 b(that)i(a)f(missing)g(CTYPE)f(k)m
-(eyw)m(ord)i(implies)f(that)g(the)g(w)m(orld)g(co)s(ordinate)h(system)f
-(is)g(linear)227 3304 y(and)30 b(iden)m(tically)i(equal)f(to)g(\\in)m
-(termediate)i(w)m(orld)d(co)s(ordinates".)111 3511 y(7.)46
-b(The)37 b(new)f(v)-5 b(alue)37 b(\\no)s(ct)m(yp)s(e")h(is)f(no)m(w)g
-(recognized)h(b)m(y)f(the)g(W)-8 b(arnings)37 b(attribute)h(of)f(the)g
-(FitsChan)227 3624 y(class.)i(This)23 b(v)-5 b(alue)23
-b(causes)h(w)m(arnings)f(to)h(b)s(e)e(issued)h(if)g(CTYPE)f(k)m(eyw)m
-(ords)i(are)f(missing)g(from)g(foreign)227 3737 y(enco)s(dings.)111
-3944 y(8.)46 b(A)28 b(new)g(attribute)h(called)g(AllW)-8
-b(arnings)29 b(has)f(b)s(een)f(added)g(to)i(the)f(FitsChan)g(class.)41
-b(This)27 b(is)h(a)g(read-)227 4057 y(only)-8 b(,)34
-b(space)f(separated)f(list)h(of)g(all)g(the)g(kno)m(wn)e(condition)i
-(names)f(whic)m(h)g(can)h(b)s(e)f(sp)s(eci\014ed)f(in)h(the)227
-4170 y(W)-8 b(arnings)31 b(attribute.)111 4376 y(9.)46
-b(The)38 b(FitsChan)f(class)i(no)m(w)f(attempts)h(to)f(assigns)g(a)h
-(Title)f(to)h(eac)m(h)g(F)-8 b(rame)39 b(in)e(a)i(F)-8
-b(rameSet)39 b(read)227 4489 y(using)d(a)g(foreign)g(enco)s(ding.)57
-b(The)35 b(Title)i(is)f(based)f(on)h(the)g(Domain)g(name)g(of)g(the)g
-(F)-8 b(rame.)58 b(If)35 b(the)227 4602 y(F)-8 b(rame)32
-b(has)e(no)g(Domain)h(name,)g(the)f(default)h(Title)g(supplied)e(b)m(y)
-h(the)h(F)-8 b(rame)31 b(class)g(is)g(retained.)66 4809
-y(10.)46 b(The)36 b(FitsChan)g(class)g(uses)g(the)g(commen)m(ts)h(asso)
-s(ciated)g(with)f(CTYPE)f(k)m(eyw)m(ords)i(as)f(axis)g(lab)s(els)227
-4922 y(when)f(reading)h(a)g(foreign)g(enco)s(ding.)57
-b(This)35 b(b)s(eha)m(viour)g(has)h(b)s(een)f(mo)s(di\014ed)f(so)i
-(that)g(the)g(default)227 5035 y(lab)s(els)c(pro)m(vided)e(b)m(y)h(the)
-g(F)-8 b(rame)32 b(class)g(are)g(retained)f(\(instead)h(of)f(using)g
-(the)g(CTYPE)f(commen)m(ts\))227 5148 y(if)h(an)m(y)f(of)h(the)f(CTYPE)
-g(commen)m(ts)h(are)g(iden)m(tical.)66 5354 y(11.)46
-b(A)25 b(new)f(\\in)m(terp)s(olation")j(sc)m(heme)f(iden)m(ti\014ed)e
-(b)m(y)h(the)g(sym)m(b)s(olic)g(constan)m(t)h(AST)p Fy(__)p
-FG(BLOCKA)-10 b(VE)23 b(has)227 5467 y(b)s(een)36 b(added)f(to)i(the)g
-(AST)p Fy(_)p FG(RESAMPLE)p Fp(<)p FG(X)p Fp(>)d FG(set)j(of)g
-(functions.)58 b(The)35 b(new)h(sc)m(heme)h(calculates)227
-5580 y(eac)m(h)f(output)f(pixel)g(v)-5 b(alue)36 b(b)m(y)f(\014nding)f
-(the)h(mean)g(of)g(the)g(input)f(pixels)i(in)e(a)i(b)s(o)m(x)f(cen)m
-(tred)g(on)g(the)227 5693 y(output)30 b(pixel.)p eop
-end
-%%Page: 539 549
-TeXDict begin 539 548 bop 0 52 a Fz(G.7)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.7)2294 b FG(539)66 351 y(12.)46
-b(The)24 b(SkyF)-8 b(rame)25 b(class)h(can)e(no)m(w)h(b)s(e)f(used)g
-(to)h(represen)m(t)f(an)h(arbitrary)f(spherical)h(co)s(ordinate)g
-(system)227 464 y(b)m(y)31 b(setting)g(its)g(System)f(attribute)h(to)g
-(\\Unkno)m(wn".)66 645 y(13.)46 b(The)28 b(indices)f(of)h(the)g
-(latitude)h(and)e(longitude)i(axes)f(of)g(a)g(SkyF)-8
-b(rame)28 b(can)g(no)m(w)g(b)s(e)f(found)g(using)g(new)227
-758 y(read-only)35 b(attributes)h(LatAxis)f(and)f(LonAxis.)54
-b(The)34 b(e\013ects)j(of)d(an)m(y)i(axis)f(p)s(erm)m(utation)g(is)f
-(tak)m(en)227 871 y(in)m(to)e(accoun)m(t.)66 1052 y(14.)46
-b(A)37 b(new)f(attribute)h(called)g(Iden)m(t)f(has)h(b)s(een)e(added)h
-(to)h(the)f(Ob)5 b(ject)37 b(class.)59 b(This)36 b(serv)m(es)h(the)f
-(same)227 1165 y(purp)s(ose)f(as)h(the)g(existing)h(ID)f(attribute,)j
-(but)c(\(unlik)m(e)i(ID\))f(its)g(v)-5 b(alue)37 b(is)f(transferred)f
-(to)i(the)f(new)227 1278 y(Ob)5 b(ject)31 b(when)e(a)i(cop)m(y)g(is)f
-(made.)66 1458 y(15.)46 b(A)38 b(bug)e(has)h(b)s(een)f(\014xed)h(whic)m
-(h)g(could)g(prev)m(en)m(t)h(complex)g(CmpF)-8 b(rames)37
-b(b)s(eha)m(ving)g(correctly)h(\(for)227 1571 y(instance,)30
-b(resulting)f(in)f(the)g(failure)h(of)f(attempts)i(to)f(\014nd)e(a)i
-(Mapping)f(b)s(et)m(w)m(een)h(a)g(CmpF)-8 b(rame)28 b(and)227
-1684 y(itself)7 b(\).)0 1968 y Fw(G.7)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.7)0 2182 y FG(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-2295 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V1.6)g(and)f(V1.7:)111
-2530 y(1.)46 b(The)22 b(F)-8 b(rame)24 b(class)f(has)f(a)h(new)f(metho)
-s(d)g(called)i(AST)p Fy(_)p FG(ANGLE)e(whic)m(h)g(returns)g(the)g
-(angle)i(subtended)227 2643 y(b)m(y)31 b(t)m(w)m(o)g(p)s(oin)m(ts)f(at)
-i(a)e(third)g(p)s(oin)m(t)g(within)g(a)h(2)g(or)f(3)h(dimensional)f(F)
--8 b(rame.)111 2824 y(2.)46 b(The)40 b(F)-8 b(rame)41
-b(class)g(has)f(a)h(new)e(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(OFFSET2)e(whic)m(h)h(calculates)j(a)d(p)s(osition)227
-2937 y(whic)m(h)34 b(is)h(o\013set)g(a)m(w)m(a)m(y)i(from)d(a)h(giv)m
-(en)g(starting)g(p)s(oin)m(t)g(b)m(y)f(a)h(sp)s(eci\014ed)f(distance)h
-(along)g(a)g(geo)s(desic)227 3050 y(curv)m(e)i(whic)m(h)e(passes)h
-(through)g(the)g(starting)h(p)s(oin)m(t)f(at)h(a)f(giv)m(en)h(p)s
-(osition)g(angle.)58 b(It)37 b(can)f(only)g(b)s(e)227
-3163 y(used)30 b(with)g(2-dimensional)h(F)-8 b(rames.)111
-3344 y(3.)46 b(The)33 b(F)-8 b(rame)34 b(class)g(has)f(a)g(new)g(metho)
-s(d)f(called)j(AST)p Fy(_)p FG(AXDIST)-8 b(ANCE)32 b(whic)m(h)h
-(returns)f(the)h(incre-)227 3457 y(men)m(t)k(b)s(et)m(w)m(een)g(t)m(w)m
-(o)g(supplied)e(axis)h(v)-5 b(alues.)59 b(F)-8 b(or)36
-b(axes)h(b)s(elonging)f(to)h(SkyF)-8 b(rames,)38 b(the)f(returned)227
-3570 y(v)-5 b(alue)31 b(is)g(normalized)f(in)m(to)i(the)e(range)h
-Fu(\006)p Fp(\031)s FG(.)111 3751 y(4.)46 b(The)31 b(F)-8
-b(rame)31 b(class)h(has)f(a)g(new)f(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(AX)m(OFFSET)e(whic)m(h)g(returns)g(an)h(axis)g(v)-5
-b(alue)227 3863 y(a)40 b(giv)m(en)g(incremen)m(t)g(a)m(w)m(a)m(y)i
-(from)d(a)g(sp)s(eci\014ed)g(axis)h(v)-5 b(alue.)68 b(F)-8
-b(or)40 b(axes)g(b)s(elonging)g(to)g(SkyF)-8 b(rames,)227
-3976 y(the)34 b(returned)f(v)-5 b(alue)34 b(is)f(normalized)i(in)m(to)f
-(the)g(range)g Fu(\006)p Fp(\031)j FG(\(for)c(latitude)i(axes\))g(or)e
-(zero)i(to)f(2)p Fp(\031)j FG(\(for)227 4089 y(longitude)31
-b(axes\).)111 4270 y(5.)46 b(The)27 b(Plot)i(class)f(has)g(a)g(new)f
-(metho)s(d)g(called)i(AST)p Fy(_)p FG(GENCUR)-10 b(VE)27
-b(whic)m(h)g(allo)m(ws)i(generalised)g(user-)227 4383
-y(de\014ned)f(curv)m(es)h(to)g(b)s(e)f(dra)m(wn.)40 b(The)28
-b(curv)m(e)h(is)g(de\014ned)e(b)m(y)i(a)g(user-supplied)e(Mapping)h
-(whic)m(h)h(maps)227 4496 y(distance)g(along)h(the)f(curv)m(e)f(in)m
-(to)i(the)f(corresp)s(onding)e(p)s(osition)i(in)f(the)g(curren)m(t)h(F)
--8 b(rame)29 b(of)g(the)f(Plot.)227 4609 y(The)c(new)f(metho)s(d)h
-(then)g(maps)f(these)i(curren)m(t)f(F)-8 b(rame)25 b(p)s(osition)f(in)m
-(to)h(graphics)f(co)s(ordinates,)j(taking)227 4722 y(care)k(of)g(an)m
-(y)g(non-linearities)g(or)g(discon)m(tin)m(uities)h(in)e(the)g
-(mapping.)111 4903 y(6.)46 b(The)26 b(Plot)h(class)g(has)f(a)h(new)e
-(metho)s(d)h(called)h(AST)p Fy(_)p FG(GRFSET)e(whic)m(h)h(allo)m(ws)i
-(the)e(underlying)f(prim-)227 5016 y(itiv)m(e)34 b(graphics)f
-(functions)f(to)h(b)s(e)f(selected)i(at)f(run-time.)47
-b(Previously)-8 b(,)34 b(the)e(functions)g(used)g(b)m(y)g(the)227
-5128 y(Plot)c(class)g(to)g(pro)s(duce)f(graphics)g(could)g(only)g(b)s
-(e)g(selected)i(at)f(link-time,)h(using)e(the)g(options)h(of)f(the)227
-5241 y(ast)p Fy(_)p FG(link)j(command.)40 b(The)28 b(new)g(Plot)i
-(metho)s(d)e(allo)m(ws)j(an)e(application)h(to)f(o)m(v)m(er-ride)i(the)
-e(functions)227 5354 y(established)40 b(at)g(link-time,)j(b)m(y)d(sp)s
-(ecifying)f(alternativ)m(e)j(primitiv)m(e)e(graphics)g(routines.)68
-b(In)39 b(addi-)227 5467 y(tion,)d(the)f(t)m(w)m(o)g(new)f(Plot)h
-(metho)s(ds)e(AST)p Fy(_)p FG(GRFPUSH)h(and)f(AST)p Fy(_)p
-FG(GRFPOP)h(allo)m(w)h(the)g(curren)m(t)227 5580 y(graphics)e(routines)
-g(to)g(b)s(e)f(sa)m(v)m(ed)i(and)e(restore)i(on)e(a)h
-(\014rst-in-last-out)h(stac)m(k,)h(allo)m(wing)g(temp)s(orary)227
-5693 y(c)m(hanges)d(to)f(b)s(e)e(made)i(to)g(the)g(set)g(of)f
-(registered)h(graphics)g(routines.)p eop end
-%%Page: 540 550
-TeXDict begin 540 549 bop 0 52 a FG(540)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(7.)46
-b(The)39 b(Dra)m(wAxes)i(attribute)f(of)g(the)g(Plot)g(class)h(can)f
-(no)m(w)f(b)s(e)g(sp)s(eci\014ed)g(indep)s(endan)m(tly)g(for)g(eac)m(h)
-227 464 y(axis,)31 b(b)m(y)g(app)s(ending)e(the)h(axis)h(index)f(to)h
-(the)g(end)e(of)i(the)f(attribute)i(name.)111 692 y(8.)46
-b(A)36 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h(Plot)g(class)g
-(whic)m(h)g(could)f(result)h(in)f(axis)h(lab)s(els)g(b)s(eing)f(dra)m
-(wn)g(on)227 805 y(inappropriate)30 b(edges)h(of)g(the)f(plotting)i(b)s
-(o)m(x)e(when)g(using)f(\\in)m(terior")k(lab)s(elling.)111
-1033 y(9.)46 b(A)30 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h(In)m
-(traMap)g(class)h(whic)m(h)e(could)h(cause)h(In)m(traMaps)f(to)g(b)s(e)
-f(corrupted)227 1145 y(after)i(transforming)f(an)m(y)h(p)s(oin)m(ts.)66
-1373 y(10.)46 b(Bugs)36 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h
-(FitsChan)f(class)h(whic)m(h)f(could)g(cause)h(inappropriate)f
-(ordering)g(of)227 1486 y(headers)30 b(within)g(a)h(FitsChan)f(when)g
-(writing)g(or)g(reading)h(ob)5 b(jects)31 b(using)f(NA)-8
-b(TIVE)30 b(enco)s(dings.)66 1714 y(11.)46 b(A)32 b(bug)e(has)h(b)s
-(een)f(\014xed)h(in)g(the)g(FitsChan)g(class)h(whic)m(h)f(could)g
-(cause)h(the)f(celestial)j(longitude)e(of)f(a)227 1827
-y(pixel)26 b(to)h(b)s(e)e(estimated)i(incorrectly)g(b)m(y)e(180)i
-(degrees)f(if)g(the)g(reference)g(p)s(oin)m(t)g(is)g(at)g(either)g(the)
-g(north)227 1940 y(or)31 b(the)f(south)g(p)s(ole.)0 2300
-y Fw(G.8)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-2)0
-2551 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2664 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.7)g(and)f(V1.8-2:)111 2986 y(1.)46
-b(The)33 b(SkyF)-8 b(rame)34 b(class)h(has)e(a)h(new)f(attribute)h
-(called)h(NegLon)f(whic)m(h)g(allo)m(ws)h(longitude)f(v)-5
-b(alues)34 b(to)227 3099 y(b)s(e)c(displa)m(y)m(ed)h(in)f(the)h(range)f
-Fu(\000)p Fp(\031)j FG(to)f(+)p Fp(\031)s FG(,)e(instead)h(of)f(the)h
-(usual)f(range)g(zero)h(to)h(2)p Fp(:\031)s FG(.)111
-3327 y(2.)46 b(Some)29 b(new)f(routines)g(\(AST)p Fy(_)p
-FG(ANGLE,)h(AST)p Fy(_)p FG(AXANGLE,)g(AST)p Fy(_)p FG(RESOL)-10
-b(VE,)26 b(AST)p Fy(_)p FG(OFFSET2,)227 3440 y(AST)p
-Fy(_)p FG(AX)m(OFFSET,)39 b(AST)p Fy(_)p FG(AXDIST)-8
-b(ANCE\))38 b(ha)m(v)m(e)j(b)s(een)d(added)g(to)i(the)f(F)-8
-b(rame)40 b(class)g(to)g(allo)m(w)227 3553 y(na)m(vigation)24
-b(of)e(the)g(co)s(ordinate)h(space)f(to)h(b)s(e)e(p)s(erformed)f
-(without)i(needing)g(to)h(kno)m(w)f(the)g(underlying)227
-3666 y(geometry)32 b(of)f(the)f(co-ordinate)i(system)f(\(for)f
-(instance,)h(whether)f(it)h(is)f(Cartesian)h(or)g(spherical\).)227
-3836 y(Note,)46 b(v)m(ersion)d(1.8-1)g(con)m(tained)g(man)m(y)f(of)g
-(these)g(facilities,)47 b(but)41 b(some)h(ha)m(v)m(e)h(b)s(een)e(c)m
-(hanged)i(in)227 3949 y(v)m(ersion)e(1.8-2.)71 b(P)m(articularly)-8
-b(,)45 b(p)s(ositions)40 b(angles)h(are)f(no)m(w)h(referred)e(to)i(the)
-f(second)g(F)-8 b(rame)41 b(axis)227 4062 y(for)e Fx(al)5
-b(l)40 b FG(classes)g(of)g(F)-8 b(rames)40 b(\(including)f(SkyF)-8
-b(rames\),)42 b(and)d(the)g(AST)p Fy(_)p FG(BEAR)g(routine)g(has)g(b)s
-(een)227 4175 y(replaced)31 b(b)m(y)f(AST)p Fy(_)p FG(AXANGLE.)0
-4535 y Fw(G.9)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-3)0
-4786 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 4899 y(v)m(ersions)31
-b(V1.8-2)h(and)e(V1.8-3:)111 5222 y(1.)46 b(A)33 b(new)f(metho)s(d)g
-(called)i(astDecomp)s(ose)h(has)d(b)s(een)g(added)g(to)i(the)f(Mapping)
-f(class)i(whic)m(h)e(enables)227 5335 y(p)s(oin)m(ters)f(to)g(b)s(e)e
-(obtained)i(to)g(the)g(comp)s(onen)m(t)f(parts)h(of)f(CmpMap)g(and)f
-(CmpF)-8 b(rame)31 b(ob)5 b(jects.)111 5562 y(2.)46 b(F)-8
-b(unctions)46 b(within)e(pro)5 b(j.c)44 b(and)g(w)m(cstrig.c)j(ha)m(v)m
-(e)f(b)s(een)e(renamed)g(to)h(a)m(v)m(oid)i(name)d(clashes)i(with)227
-5675 y(functions)30 b(in)g(more)h(recen)m(t)g(v)m(ersions)g(of)f(Mark)h
-(Calabretta's)h(w)m(cslib)f(library)-8 b(.)p eop end
-%%Page: 541 551
-TeXDict begin 541 550 bop 0 52 a Fz(G.10)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V1.8-4)2174 b FG(541)0 351
-y Fw(G.10)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-4)0
-560 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 673 y(v)m(ersions)31
-b(V1.8-3)h(and)e(V1.8-4:)111 887 y(1.)46 b(The)32 b(FitsChan)g(class)i
-(has)e(a)g(new)g(attribute)h(called)h(DefB1950)h(whic)m(h)d(can)h(b)s
-(e)f(used)f(to)i(select)h(the)227 999 y(default)22 b(reference)h(frame)
-f(and)f(equino)m(x)h(to)h(b)s(e)e(used)g(if)h(a)h(FitsChan)e(with)h
-(foreign)g(enco)s(ding)g(con)m(tains)227 1112 y(no)31
-b(indication)g(of)f(the)h(reference)g(frame)f(or)g(equino)m(x.)111
-1288 y(2.)46 b(A)36 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h
-(FitsChan)g(class)g(whic)m(h)g(could)g(prev)m(en)m(t)g(astW)-8
-b(rite)38 b(from)d(creating)227 1401 y(a)k(set)f(of)h(FITS)e(headers)h
-(from)f(an)h(otherwise)h(v)-5 b(alid)38 b(F)-8 b(rameSet,)42
-b(when)37 b(when)g(using)h(FITS-AIPS)227 1514 y(enco)s(ding.)111
-1689 y(3.)46 b(A)37 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h
-(FitsChan)f(class)h(whic)m(h)g(could)f(cause)h(astRead)h(to)f(mis-in)m
-(terpret)227 1802 y(the)31 b(FITS)e(CR)m(OT)-8 b(A)31
-b(k)m(eyw)m(ord)g(when)e(using)h(FITS-AIPS)f(enco)s(ding.)0
-2077 y Fw(G.11)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-5)0
-2286 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2399 y(v)m(ersions)31
-b(V1.8-4)h(and)e(V1.8-5:)111 2612 y(1.)46 b(The)41 b(Plot)g(class)h
-(de\014nes)e(new)g(graphical)i(elemen)m(ts)g(Axis1,)i(Axis2,)g(Grid1,)g
-(Grid2,)g(NumLabs1,)227 2725 y(NumLabs2,)g(T)-8 b(extLab1,)45
-b(T)-8 b(extLab2,)45 b(Tic)m(ks1)d(and)f(Tic)m(ks2.)73
-b(These)41 b(allo)m(w)i(graphical)f(attributes)227 2838
-y(\(colour,)c(width,)e(etc\))h(to)f(b)s(e)f(set)g(for)h(eac)m(h)g(axis)
-g(individually)-8 b(.)55 b(Previously)-8 b(,)38 b(graphical)e
-(attributes)227 2951 y(could)31 b(only)g(b)s(e)g(set)g(for)g(b)s(oth)f
-(axes)i(together,)h(using)d(graphical)i(elemen)m(ts)g(Axes,)g(Grid,)f
-(NumLabs,)227 3064 y(T)-8 b(extLabs)31 b(and)f(Tic)m(ks.)0
-3339 y Fw(G.12)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-7)0
-3548 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3661 y(v)m(ersions)31
-b(V1.8-5)h(and)e(V1.8-7:)111 3874 y(1.)46 b(A)23 b(new)f(attribute)h
-(called)g(CarLin)f(has)g(b)s(een)g(added)f(to)i(the)g(FitsChan)f(class)
-h(whic)m(h)f(con)m(trols)i(the)e(w)m(a)m(y)227 3987 y(CAR)34
-b(pro)5 b(jections)35 b(are)g(handled)f(when)f(reading)i(a)g(F)-8
-b(rameSet)35 b(from)f(a)h(non-nativ)m(e)h(FITS)d(header.)227
-4100 y(Some)45 b(FITS)e(writers)h(use)g(a)h(CAR)e(pro)5
-b(jection)45 b(to)g(represen)m(t)g(a)f(simple)g(linear)h
-(transformation)227 4213 y(b)s(et)m(w)m(een)37 b(pixel)f(co)s
-(ordinates)h(and)f(celestial)j(sky)c(co)s(ordinates.)59
-b(This)35 b(is)i(not)f(consisten)m(t)h(with)f(the)227
-4326 y(de\014nition)41 b(of)g(the)g(CAR)f(pro)5 b(jection)42
-b(in)e(the)h(draft)g(FITS-W)m(CS)f(standard,)j(whic)m(h)e(requires)f
-(the)227 4439 y(resultan)m(t)33 b(Mapping)f(to)h(include)f(a)g(3D)h
-(rotation)g(from)f(nativ)m(e)h(spherical)f(co)s(ordinates)h(to)g
-(celestial)227 4552 y(spherical)39 b(co)s(ordinates,)i(th)m(us)d
-(making)h(the)f(Mapping)h(non-linear.)64 b(Setting)40
-b(CarLin)d(to)i(1)g(forces)227 4665 y(AST)p Fy(_)p FG(READ)29
-b(to)i(ignore)f(the)g(FITS-W)m(CS)g(standard)f(and)g(treat)i(an)m(y)f
-(CAR)f(pro)5 b(jections)30 b(as)g(simple)227 4778 y(linear)h(Mappings)f
-(from)g(pixel)h(co)s(ordinates)g(to)g(celestial)i(co)s(ordinates.)111
-4953 y(2.)46 b(A)35 b(bug)e(has)h(b)s(een)g(\014xed)f(whic)m(h)h(could)
-h(result)f(in)g(axis)h(F)-8 b(ormat)35 b(attributes)g(set)g(b)m(y)f
-(the)g(user)g(b)s(eing)227 5066 y(ignored)d(under)e(certain)i
-(circumstances.)111 5241 y(3.)46 b(A)32 b(bug)f(in)h(the)g(w)m(a)m(y)g
-(tic)m(k)i(marks)d(p)s(ositions)h(are)g(selected)h(in)e(the)h(Plot)h
-(class)g(has)e(b)s(een)g(\014xed.)44 b(This)227 5354
-y(bug)c(could)h(result)f(in)g(extra)h(tic)m(ks)h(marks)e(b)s(eing)g
-(displa)m(y)m(ed)h(at)g(inappropriate)f(p)s(ositions.)71
-b(This)227 5467 y(bug)35 b(manifested)g(itself,)i(for)d(instance,)j(if)
-e(the)g(Mapping)g(represen)m(ted)g(b)m(y)f(the)h(Plot)h(w)m(as)f(a)g
-(simple)227 5580 y(Cartesian)e(to)g(P)m(olar)h(Mapping.)47
-b(In)31 b(this)i(example,)g(the)g(bug)f(caused)g(tic)m(k)i(marks)e(to)h
-(b)s(e)f(dra)m(wn)g(at)227 5693 y(negativ)m(e)h(radius)c(v)-5
-b(alues.)p eop end
-%%Page: 542 552
-TeXDict begin 542 551 bop 0 52 a FG(542)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(4.)46
-b(A)31 b(bug)e(has)h(b)s(een)g(\014xed)g(whic)m(h)g(could)g(prev)m(en)m
-(t)h(attribute)g(settings)g(from)f(b)s(eing)g(read)g(correctly)i(b)m(y)
-227 464 y(AST)p Fy(_)p FG(SET,)d(etc.,)j(on)e(certain)h(platforms)g
-(\(MacOS,)g(for)f(instance\).)0 754 y Fw(G.13)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.8-8)0 973 y FG(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-1086 y(v)m(ersions)31 b(V1.8-7)h(and)e(V1.8-8:)111 1338
-y(1.)46 b(A)33 b(bug)g(has)g(b)s(een)f(\014xed)g(in)h(the)g(FitsChan)g
-(class)h(whic)m(h)f(could)g(cause)g(problems)g(when)f(creating)i(a)227
-1451 y(F)-8 b(rameSet)28 b(from)d(a)i(FITS)e(header)h(con)m(taining)i
-(W)m(CS)e(information)g(stored)h(in)e(the)i(form)e(of)i(Digitised)227
-1564 y(Digitised)i(Sky)e(Surv)m(ey)f(\(DSS\))i(k)m(eyw)m(ords.)40
-b(These)27 b(problems)f(only)i(o)s(ccurred)e(for)h(DSS)g(\014elds)f(in)
-h(the)227 1676 y(southern)k(hemisphere,)g(and)g(resulted)g(in)h(pixel)f
-(p)s(ositions)h(b)s(eing)f(mapp)s(ed)f(to)i(sky)g(p)s(ositions)f(close)
-227 1789 y(to)g(the)g(corresp)s(onding)e Fx(northern)j
-FG(hemispshere)e(\014eld.)111 1974 y(2.)46 b(A)d(new)e(metho)s(d)h
-(called)h(AST)p Fy(_)p FG(BOUNDINGBO)m(X)h(has)e(b)s(een)f(added)h(to)h
-(the)f(Plot)h(class.)77 b(This)227 2087 y(metho)s(d)37
-b(returns)g(the)h(b)s(ounding)d(b)s(o)m(x)j(of)g(the)f(previous)g
-(graphical)i(output)e(pro)s(duced)f(b)m(y)i(a)g(Plot)227
-2200 y(metho)s(d.)111 2385 y(3.)46 b(A)39 b(new)f(attribute)h(called)g
-(In)m(visible)g(has)f(b)s(een)g(added)f(to)j(the)e(Plot)h(class)g(whic)
-m(h)g(suppresses)d(the)227 2498 y(graphical)45 b(output)e(normally)g
-(pro)s(duced)f(b)m(y)i(Plot)g(metho)s(ds.)79 b(All)44
-b(the)g(calculations)i(needed)d(to)227 2611 y(pro)s(duce)25
-b(the)i(normal)f(output)f(are)i(still)g(p)s(erformed)e(ho)m(w)m(ev)m
-(er,)j(and)e(so)g(the)g(b)s(ounding)f(b)s(o)m(x)h(returned)227
-2724 y(b)m(y)31 b(the)f(new)g(AST)p Fy(_)p FG(BOUNDINGBO)m(X)h(metho)s
-(d)f(is)h(still)g(usable.)111 2909 y(4.)46 b(Bugs)30
-b(ha)m(v)m(e)h(b)s(een)e(\014xed)g(related)h(to)h(the)f(app)s(earance)g
-(of)f(graphical)i(output)e(pro)s(duced)f(b)m(y)i(the)g(Plot)227
-3022 y(class.)39 b(These)24 b(bugs)e(w)m(ere)i(to)h(do)e(with)g(the)h
-(w)m(a)m(y)g(in)g(whic)m(h)f(graphical)h(elemen)m(ts)h(relating)g(to)f
-(a)g(sp)s(eci\014c)227 3135 y(axis)36 b(\(e.g.)57 b Fy(Colour\(axis1\))
-p FG(,)33 b(etc.\))58 b(in)m(teracted)37 b(with)e(the)g(corresp)s
-(onding)g(generic)h(elemen)m(t)h(\(e.g.)227 3248 y Fy(Colour\(axes\))p
-FG(,)28 b(etc.\).)0 3537 y Fw(G.14)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V1.8-13)0 3756 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 3869 y(v)m(ersions)31
-b(V1.8-8)h(and)e(V1.8-13:)111 4122 y(1.)46 b(The)29 b(FitsChan)g(class)
-g(has)g(b)s(een)f(mo)s(di\014ed)g(so)h(that)h(LONPOLE)e(k)m(eyw)m(ords)
-h(are)g(only)g(pro)s(duced)f(b)m(y)227 4234 y(AST)p Fy(_)p
-FG(WRITE)e(when)f(necessary)-8 b(.)41 b(F)-8 b(or)27
-b(zenithal)h(pro)5 b(jections)27 b(suc)m(h)g(as)g(T)-8
-b(AN,)27 b(the)g(LONPOLE)e(k)m(ey-)227 4347 y(w)m(ord)i(can)f(alw)m(a)m
-(ys)j(tak)m(e)f(its)f(default)g(v)-5 b(alue)27 b(and)f(so)g(is)h(not)g
-(included)f(in)g(the)h(FITS)f(header)g(pro)s(duced)227
-4460 y(b)m(y)33 b(AST)p Fy(_)p FG(WRITE)f(Previously)-8
-b(,)35 b(the)e(unnecessary)g(pro)s(duction)f(of)h(a)h(LONPOLE)e(k)m
-(eyw)m(ord)h(could)227 4573 y(prev)m(en)m(t)24 b(F)-8
-b(rameSets)25 b(b)s(eing)e(written)g(out)h(using)f(enco)s(dings)g(whic)
-m(h)g(do)h(not)f(supp)s(ort)f(the)i(LONPOLE)227 4686
-y(k)m(eyw)m(ord)31 b(\(suc)m(h)g(as)f(FITS-IRAF\).)111
-4871 y(2.)46 b(The)31 b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s
-(di\014ed)f(to)i(retain)g(leading)g(and)f(trailing)h(spaces)g(within)f
-(COM-)227 4984 y(MENT)g(cards.)111 5169 y(3.)46 b(The)41
-b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i(only)f(use)g
-(CTYPE)g(commen)m(ts)h(as)f(axis)h(lab)s(els)f(if)227
-5282 y(all)d(non-celestial)i(axes)d(ha)m(v)m(e)i(unique)d(non-blank)h
-(commen)m(ts)h(\(otherwise)f(the)h(CTYPE)e(k)m(eyw)m(ord)227
-5395 y(v)-5 b(alues)31 b(are)g(used)e(as)i(lab)s(els\).)111
-5580 y(4.)46 b(The)29 b(FitsChan)g(class)h(has)f(b)s(een)f(mo)s
-(di\014ed)g(so)h(that)h(it)g(do)s(es)f(not)g(app)s(end)f(a)h(trailing)h
-(\\Z")g(c)m(haracter)227 5693 y(to)h(the)g(end)f(of)g(D)m(A)-8
-b(TE-OBS)31 b(k)m(eyw)m(ord)g(v)-5 b(alues.)p eop end
-%%Page: 543 553
-TeXDict begin 543 552 bop 0 52 a Fz(G.15)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V2.0)2249 b FG(543)111 351
-y(5.)46 b(The)e(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i
-(use)f(latest)i(list)e(of)h(FITS-W)m(CS)f(pro)5 b(jections,)48
-b(as)227 464 y(describ)s(ed)33 b(in)g(the)h(FITS-W)m(CS)f(pap)s(er)f(I)
-s(I,)h(\\Represen)m(tations)i(of)f(celestial)i(co)s(ordinates)f(in)e
-(FITS")227 577 y(\(Calabretta)42 b(&)d(Greisen,)k(draft)c(dated)h(23)g
-(April)g(2002\).)71 b(Supp)s(ort)37 b(has)j(b)s(een)f(retained)h(for)f
-(the)227 690 y(p)s(olynomial)44 b(correction)h(terms)e(whic)m(h)h
-(previous)f(drafts)g(ha)m(v)m(e)h(allo)m(w)m(ed)i(to)e(b)s(e)f(asso)s
-(ciated)i(with)227 803 y(T)-8 b(AN)31 b(pro)5 b(jections.)111
-998 y(6.)46 b(The)37 b(WcsMap)h(class)g(has)f(additional)i(pro)5
-b(jection)38 b(t)m(yp)s(es)f(of)g(AST)p Fy(__)p FG(TPN)f(\(whic)m(h)h
-(implemen)m(ts)h(a)227 1111 y(distorted)e(T)-8 b(AN)36
-b(pro)5 b(jection\))37 b(and)e(AST)p Fy(__)p FG(SZP)-8
-b(.)34 b(The)h(AST)p Fy(__)p FG(T)-8 b(AN)35 b(pro)5
-b(jection)36 b(t)m(yp)s(e)g(no)m(w)g(repre-)227 1223
-y(sen)m(ts)c(a)f(simple)g(T)-8 b(AN)31 b(pro)5 b(jection)32
-b(and)e(has)g(no)h(asso)s(ciated)i(pro)5 b(jection)31
-b(parameters.)43 b(In)30 b(addition,)227 1336 y(the)39
-b(usage)f(of)h(pro)5 b(jection)39 b(parameters)f(has)g(b)s(een)g
-(brough)m(t)g(in)m(to)h(line)f(with)g(the)g(the)h(FITS-W)m(CS)227
-1449 y(pap)s(er)30 b(I)s(I.)111 1644 y(7.)46 b(The)27
-b(WcsMap)h(class)f(has)g(b)s(een)f(mo)s(di\014ed)g(so)i(that)f(a)h
-(\\get")h(op)s(eration)e(on)g(a)g(pro)5 b(jection)28
-b(parameter)227 1757 y(attribute)34 b(will)f(return)f(the)h(default)h
-(v)-5 b(alue)33 b(de\014ned)f(in)h(the)g(FITS-W)m(CS)f(pap)s(er)g(I)s
-(I)g(if)h(no)g(v)-5 b(alue)34 b(has)227 1870 y(b)s(een)42
-b(set)g(for)g(the)g(attribute.)77 b(Previously)-8 b(,)45
-b(a)e(v)-5 b(alue)42 b(of)h(AST)p Fy(__)p FG(BAD)e(w)m(as)i(returned)e
-(in)g(suc)m(h)h(a)227 1983 y(situation.)111 2177 y(8.)k(The)29
-b(F)-8 b(rame)31 b(class)f(has)g(new)f(attributes)h(T)-8
-b(op\(axis\))31 b(and)e(Bottom\(axis\))j(whic)m(h)d(allo)m(w)j(a)e
-(\\plottable)227 2290 y(range")g(to)f(b)s(e)f(sp)s(eci\014ed)f(for)i
-(eac)m(h)g(F)-8 b(rame)30 b(axis.)40 b(The)28 b(grid)h(pro)s(duced)d(b)
-m(y)j(the)f(AST)p Fy(_)p FG(GRID)g(routine)227 2403 y(will)j(not)g
-(extend)f(b)s(ey)m(ond)g(these)h(limits.)0 2708 y Fw(G.15)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V2.0)0 2935 y
-FG(Note,)i(F)-8 b(rame)38 b(descriptions)e(created)h(using)f(AST)f
-(V2.0)j(will)f(not)f(b)s(e)g(readable)h(b)m(y)f(applications)h(link)m
-(ed)0 3048 y(with)30 b(earlier)h(v)m(ersions)g(of)g(AST.)e(This)h
-(applies)h(to)g(F)-8 b(rame)31 b(descriptions)f(created)i(using:)136
-3294 y Fu(\017)46 b FG(the)31 b(Channel)e(class)136 3489
-y Fu(\017)46 b FG(the)31 b(FitsChan)f(class)h(if)g(the)f(NA)-8
-b(TIVE)31 b(Enco)s(ding)f(is)g(used)136 3684 y Fu(\017)46
-b FG(the)31 b(AST)p Fy(_)p FG(SHO)m(W)f(routine.)0 3930
-y(Applications)35 b(m)m(ust)f(b)s(e)g(re-link)m(ed)h(with)f(AST)f(V2.0)
-i(in)f(order)g(to)h(b)s(e)f(able)g(to)h(read)f(F)-8 b(rame)36
-b(descriptions)0 4043 y(created)31 b(b)m(y)g(AST)e(v2.0.)0
-4209 y(The)37 b(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 4322 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.8-13)i(and)c(V2.0)j(\(the)f(curren)m(t)f(v)m
-(ersion\):)111 4595 y(1.)46 b(The)39 b(default)g(v)-5
-b(alue)40 b(for)f(the)h(Domain)g(attribute)g(pro)m(vided)f(b)m(y)g(the)
-g(CmpF)-8 b(rame)39 b(class)h(has)f(b)s(een)227 4708
-y(c)m(hanged)c(from)f(\\CMP")g(to)h(a)f(string)g(formed)g(b)m(y)g
-(concatenating)i(the)f(Domain)f(attributes)h(of)f(the)227
-4821 y(t)m(w)m(o)26 b(comp)s(onen)m(t)f(F)-8 b(rames,)27
-b(separated)e(b)m(y)g(a)g(min)m(us)e(sign.)39 b(If)24
-b(b)s(oth)g(comp)s(onen)m(t)h(Domains)h(are)f(blank,)227
-4934 y(then)30 b(the)h(old)f(default)h(of)g(\\CMP")g(is)f(retained)h
-(for)f(the)g(CmpF)-8 b(rame)31 b(Domain.)111 5128 y(2.)46
-b(The)f(implemen)m(tation)i(of)e(the)g(AST)p Fy(_)p FG(WRITE)f(routine)
-h(within)g(the)g(FitsChan)g(class)h(has)f(b)s(een)227
-5241 y(mo)s(di\014ed.)37 b(It)22 b(will)h(no)m(w)f(attempt)i(to)f(pro)s
-(duce)e(a)h(set)h(of)g(FITS)e(header)h(cards)g(to)h(describ)s(e)f(a)g
-(F)-8 b(rameSet)227 5354 y(ev)m(en)32 b(if)e(the)h(n)m(um)m(b)s(er)e
-(of)i(axes)g(in)f(the)h(Curren)m(t)e(F)-8 b(rames)32
-b(is)e(greater)i(than)e(the)h(n)m(um)m(b)s(er)e(in)i(the)f(Base)227
-5467 y(F)-8 b(rame)25 b(\(that)g(is,)g(if)f(there)g(are)h(more)f(W)m
-(CS)g(axes)g(than)g(pixel)g(axes\).)40 b(This)23 b(has)g(alw)m(a)m(ys)j
-(b)s(een)d(p)s(ossible)227 5580 y(with)32 b(NA)-8 b(TIVE)32
-b(enco)s(ding,)g(but)f(has)h(not)g(previously)f(b)s(een)g(p)s(ossible)h
-(for)f(foreign)h(enco)s(dings.)45 b(The)227 5693 y(W)m(CSAXES)30
-b(k)m(eyw)m(ord)h(is)g(used)e(to)i(store)g(the)g(n)m(um)m(b)s(er)e(of)h
-(W)m(CS)h(axes)g(in)f(the)g(FITS)g(header.)p eop end
-%%Page: 544 554
-TeXDict begin 544 553 bop 0 52 a FG(544)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(3.)46
-b(Another)23 b(c)m(hange)i(to)f(the)f(AST)p Fy(_)p FG(WRITE)f(routine)h
-(within)g(the)g(FitsChan)g(class)h(is)g(that)f(the)h(ordering)227
-464 y(of)32 b(\\foreign")h(axes)g(\()p Fx(i.e.)44 b FG(CTYPE)31
-b(k)m(eyw)m(ords\))i(is)f(no)m(w)g(c)m(hosen)g(to)h(mak)m(e)f(the)g(CD)
-g(\(or)g(PC\))g(matrix)227 577 y(as)h(diagonal)g(as)g(p)s(ossible)f(-)g
-(an)m(y)h(elemen)m(t)g(of)g(axis)f(transp)s(osition)h(is)f(remo)m(v)m
-(ed)h(b)m(y)f(this)g(re-ordering)227 690 y(as)37 b(recommended)f(in)h
-(FITS-W)m(CS)f(pap)s(er)f(I.)i(Previously)g(the)f(ordering)h(w)m(as)g
-(determined)f(b)m(y)g(the)227 803 y(order)e(of)g(the)h(axes)g(in)f(the)
-g(Curren)m(t)g(F)-8 b(rame)35 b(of)f(the)h(supplied)e(F)-8
-b(rameSet.)53 b(This)34 b(c)m(hange)h(do)s(es)f(not)227
-916 y(a\013ect)e(NA)-8 b(TIVE)31 b(enco)s(ding.)111 1097
-y(4.)46 b(Supp)s(ort)26 b(for)h(sp)s(ectral)h(co)s(ordinate)h(systems)e
-(has)h(b)s(een)f(in)m(tro)s(duced)g(through)m(t)h(the)f(addition)h(of)g
-(t)m(w)m(o)227 1210 y(new)36 b(classes,)j(Sp)s(ecF)-8
-b(rame)37 b(and)e(Sp)s(ecMap.)58 b(The)36 b(Sp)s(ecF)-8
-b(rame)36 b(is)h(a)f(1-dimensional)i(F)-8 b(rame)37 b(whic)m(h)227
-1322 y(can)c(b)s(e)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f
-(an)g(electromagnetic)k(sp)s(ectrum)c(in)g(v)-5 b(arious)32
-b(systems)227 1435 y(\(w)m(a)m(v)m(elength,)d(frequency)-8
-b(,)25 b(v)-5 b(arious)24 b(forms)g(of)g(v)m(elo)s(cit)m(y)-8
-b(,)27 b Fx(etc.)p FG(\))38 b(and)24 b(referred)f(to)i(v)-5
-b(arious)24 b(standards)f(of)227 1548 y(rest)30 b(\(top)s(o)s(cen)m
-(tric,)i(geo)s(cen)m(tric,)g(helio)s(cen)m(tric)g(LSRK,)d
-Fx(etc.)p FG(\).)40 b(The)30 b(Sp)s(ecMap)f(is)h(a)g(Mapping)g(whic)m
-(h)227 1661 y(can)37 b(transform)e(sp)s(ectral)i(axis)f(v)-5
-b(alues)37 b(b)s(et)m(w)m(een)g(these)f(v)-5 b(arious)37
-b(systems)f(and)f(standards)h(of)g(rest.)227 1774 y(Note,)h(FitsChans)c
-(whic)m(h)h(ha)m(v)m(e)h(a)f(foreign)g(enco)s(ding)g(\()p
-Fx(i.e.)50 b FG(an)m(y)34 b(enco)s(ding)g(other)g(than)g(NA)-8
-b(TIVE\))227 1887 y(are)31 b(not)g(y)m(et)g(able)g(to)g(read)f(or)h
-(write)f(these)h(new)f(classes.)111 2068 y(5.)46 b(F)-8
-b(acilities)38 b(ha)m(v)m(e)d(b)s(een)f(added)f(to)i(the)g(F)-8
-b(rame)35 b(class)g(whic)m(h)f(allo)m(w)i(di\013erences)f(in)f(axis)g
-(units)g(to)h(b)s(e)227 2181 y(tak)m(en)e(in)m(to)g(accoun)m(t)g(when)e
-(\014nding)f(a)i(Mapping)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames.)46 b(In)31 b(previous)g(v)m(ersions)h(of)227
-2294 y(AST,)k(the)g(Unit)h(attribute)f(w)m(as)h(a)f(purely)g
-(descriptiv)m(e)h(item)f(in)m(tended)g(only)h(for)e(h)m(uman)h(readers)
-227 2407 y(-)k(c)m(hanging)g(the)f(v)-5 b(alue)40 b(of)f(Unit)h(made)f
-(no)g(di\013erence)g(to)h(the)g(b)s(eha)m(viour)e(of)i(the)f(F)-8
-b(rame.)68 b(As)39 b(of)227 2520 y(v)m(ersion)31 b(2.0,)g(the)f(Unit)g
-(attribute)g(can)h(in\015uence)e(the)h(nature)f(of)h(the)g(Mappings)g
-(b)s(et)m(w)m(een)g(F)-8 b(rames.)227 2632 y(F)g(or)41
-b(instance,)i(if)d(the)g(AST)p Fy(_)p FG(FINDRAME)f(or)h(AST)p
-Fy(_)p FG(CONVER)-8 b(T)39 b(metho)s(d)g(is)h(used)f(to)h(\014nd)e(the)
-227 2745 y(Mapping)30 b(b)s(et)m(w)m(een)h(an)e(Axis)h(with)g(Unit)g
-(set)g(to)h(\\m")g(and)e(another)h(Axis)g(with)g(Unit)g(set)g(to)h
-(\\km",)227 2858 y(then)23 b(the)h(metho)s(d)f(will)g(return)f(a)i(Zo)s
-(omMap)f(whic)m(h)g(in)m(tro)s(duces)h(a)f(scaling)i(factor)f(of)g
-(0.001)h(b)s(et)m(w)m(een)227 2971 y(the)f(t)m(w)m(o)i(axes.)39
-b(These)24 b(facilities)i(assume)d(that)i(units)e(are)h(sp)s(eci\014ed)
-g(follo)m(wing)h(the)f(rules)g(included)f(in)227 3084
-y(FITS-W)m(CS)g(pap)s(er)f(I)h(\()p Fx(R)-5 b(epr)g(esentation)29
-b(of)d(World)h(Co)-5 b(or)g(dinates)29 b(in)d(FITS)p
-FG(,)e(Greisen)g(&)e(Calabretta\).)227 3231 y(In)h(order)g(to)h
-(minimise)f(the)h(risk)f(of)h(breaking)f(existing)i(soft)m(w)m(are,)h
-(the)e(default)f(b)s(eha)m(viour)g(for)g(simple)227 3344
-y(F)-8 b(rames)35 b(is)f(to)h(ignore)g(the)f(Unit)h(attribute)f(\()p
-Fx(i.e.)52 b FG(to)35 b(retain)f(the)h(previous)e(b)s(eha)m(viour\).)52
-b(Ho)m(w)m(ev)m(er,)227 3457 y(the)23 b(new)g(F)-8 b(rame)23
-b(metho)s(d)f(AST)p Fy(_)p FG(SET)-8 b(A)m(CTIVEUNIT)21
-b(ma)m(y)j(b)s(e)e(used)g(to)h(\\activ)-5 b(ate")27 b(\(or)c(deactiv)-5
-b(ate\))227 3570 y(the)35 b(new)f(facilities)j(within)d(a)g(sp)s
-(eci\014c)h(F)-8 b(rame.)54 b(Note,)37 b(the)d(new)g(Sp)s(ecF)-8
-b(rame)35 b(class)g(is)g(di\013eren)m(t)g(to)227 3683
-y(the)25 b(simple)g(F)-8 b(rame)26 b(class)g(in)e(that)i(the)f(new)g
-(facilities)i(for)d(handling)h(units)f(are)h(alw)m(a)m(ys)i(activ)m(e)g
-(within)227 3796 y(a)k(Sp)s(ecF)-8 b(rame.)111 3976 y(6.)46
-b(The)33 b(System)g(and)g(Ep)s(o)s(c)m(h)f(attributes)i(fo)f(the)g
-(SkyF)-8 b(rame)34 b(class)g(ha)m(v)m(e)g(b)s(een)f(mo)m(v)m(ed)h(to)g
-(the)f(paren)m(t)227 4089 y(F)-8 b(rame)34 b(class.)50
-b(This)32 b(enables)i(all)g(sub-classes)f(of)h(F)-8 b(rame)34
-b(\(suc)m(h)f(as)g(the)g(new)g(Sp)s(ecF)-8 b(rame)33
-b(class\))i(to)227 4202 y(share)30 b(these)h(attributes,)g(and)f(to)h
-(pro)m(vide)g(suitable)g(options)f(for)h(eac)m(h)g(class.)111
-4383 y(7.)46 b(The)37 b(F)-8 b(rame)38 b(class)h(has)e(a)h(new)e
-(attribute)i(called)h(AlignSystem,)h(whic)m(h)d(allo)m(ws)i(con)m(trol)
-g(o)m(v)m(er)f(the)227 4496 y(alignmen)m(t)32 b(pro)s(cess)e(p)s
-(erformed)f(b)m(y)h(the)h(metho)s(ds)e(AST)p Fy(_)p FG(FINDFRAME)i(and)
-f(AST)p Fy(_)p FG(CONVER)-8 b(T.)111 4677 y(8.)46 b(The)32
-b(CmpF)-8 b(rame)31 b(class)i(has)f(b)s(een)f(mo)s(di\014ed)g(so)h
-(that)g(attributes)h(of)f(a)g(comp)s(onen)m(t)g(F)-8
-b(rame)33 b(can)f(b)s(e)227 4790 y(accessed)h(without)f(needing)f(to)h
-(extract)h(the)f(F)-8 b(rame)33 b(\014rst.)43 b(T)-8
-b(o)32 b(do)f(this,)h(app)s(end)e(an)i(axis)g(index)f(to)227
-4903 y(the)g(end)g(of)g(the)g(attribute)h(name.)43 b(F)-8
-b(or)31 b(instance,)i(if)e(a)g(CmpF)-8 b(rame)31 b(con)m(tains)h(a)f
-(Sp)s(ecF)-8 b(rame)32 b(and)e(a)227 5016 y(SkyF)-8 b(rame)21
-b(\(in)g(that)g(order\),)i(then)e(the)f(StdOfRest)h(attribute)g(of)g
-(the)g(Sp)s(ecF)-8 b(rame)21 b(can)g(b)s(e)f(referred)g(to)227
-5128 y(as)28 b(the)f(\\StdOfRest\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame.)40 b(Lik)m(ewise,)29 b(the)e(Equino)m(x)g(attribute)h(of)f(the)
-227 5241 y(SkyF)-8 b(rame)35 b(can)f(b)s(e)g(accessed)h(as)g(the)f
-(\\Equino)m(x\(2\)")j(\(or)d(equiv)-5 b(alen)m(tly)36
-b(\\Equino)m(x\(3\)"\))h(attribute)227 5354 y(of)32 b(the)h(CmpF)-8
-b(rame.)45 b(The)32 b(\\System\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame)32 b(will)g(refer)g(to)g(the)h(System)227 5467
-y(attribute)i(of)g(the)g(Sp)s(ecF)-8 b(rame,)36 b(whereas)e(the)g
-(\\System\(2\)")j(and)c(\\System\(3\)")k(attributes)e(of)f(the)227
-5580 y(CmpF)-8 b(rame)38 b(will)h(refer)e(to)i(the)g(System)e
-(attribute)i(of)g(the)f(SkyF)-8 b(rame)38 b(\(the)h(\\System")g
-(attribute)227 5693 y(without)33 b(an)f(axis)h(sp)s(eci\014er)f(will)g
-(refer)g(to)h(the)g(System)f(attribute)h(of)g(the)f(CmpF)-8
-b(rame)33 b(as)f(a)h(whole,)p eop end
-%%Page: 545 555
-TeXDict begin 545 554 bop 0 52 a Fz(G.16)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.0)2249 b FG(545)227 351
-y(since)27 b(System)g(is)g(an)f(attribute)i(of)e(all)i(F)-8
-b(rames,)29 b(and)d(a)h(CmpF)-8 b(rame)26 b(is)h(a)g(F)-8
-b(rame)28 b(and)e(so)h(has)f(its)h(o)m(wn)227 464 y(System)j(v)-5
-b(alue)31 b(whic)m(h)f(is)h(indep)s(endan)m(t)e(of)i(the)f(System)g
-(attributes)h(of)g(its)g(comp)s(onen)m(t)f(F)-8 b(rames\).)111
-655 y(9.)46 b(The)22 b(algorithms)h(used)e(b)m(y)h(the)h(Plot)g(class)g
-(for)f(determining)g(when)f(to)i(omit)g(o)m(v)m(erlapping)g(axis)g(lab)
-s(els,)227 768 y(and)k(the)h(abbreviation)h(of)e(redundan)m(t)g
-(leading)h(\014elds)g(within)f(sexagesimal)i(axis)g(lab)s(els,)f(ha)m
-(v)m(e)h(b)s(een)227 881 y(impro)m(v)m(ed)i(to)g(a)m(v)m(oid)h(some)f
-(anomolous)g(b)s(eha)m(viour)f(in)g(previous)g(v)m(ersions.)66
-1072 y(10.)46 b(The)23 b(curv)m(e)g(dra)m(wing)g(algorithm)h(used)f(b)m
-(y)g(the)g(Plot)h(class)g(has)f(b)s(een)f(mo)s(di\014ed)g(to)i(reduce)f
-(the)g(c)m(hance)227 1185 y(of)28 b(it)h(\\missing")f(small)h(curv)m(e)
-f(sections,)i(suc)m(h)d(as)h(ma)m(y)h(b)s(e)e(pro)s(duced)f(if)i(a)g
-(grid)g(line)g(cuts)g(across)g(the)227 1298 y(plot)38
-b(v)m(ery)g(close)g(to)g(a)g(corner.)61 b(Previously)-8
-b(,)40 b(these)e(missed)f(sections)h(could)f(sometimes)i(result)e(in)
-227 1411 y(axis)31 b(lab)s(els)g(b)s(eing)f(omitted.)66
-1602 y(11.)46 b(A)25 b(new)f(function)g(\(AST)p Fy(_)p
-FG(VERSION\))g(has)g(b)s(een)g(added)g(to)h(return)f(the)g(v)m(ersion)h
-(of)g(the)g(AST)f(library)227 1715 y(in)30 b(use.)66
-1906 y(12.)46 b(Bugs)32 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h
-(Plot)g(class)g(whic)m(h)f(caused)g(serious)h(problems)e(when)g
-(plotting)j(high)227 2019 y(precision)43 b(data.)79 b(These)42
-b(problems)h(could)f(range)i(from)e(the)h(omission)g(of)g(some)g(tic)m
-(k)h(marks)f(to)227 2132 y(complete)32 b(failure)f(to)g(pro)s(duce)e(a)
-i(plot.)0 2400 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)
-f(will)f(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h
-(adv)-5 b(an)m(tage)27 b(of)e(these)0 2513 y(new)30 b(facilities.)0
-2812 y Fw(G.16)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.0)0
-3036 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3149 y(v)m(ersions)31
-b(V2.0)g(and)f(V3.0:)111 3417 y(1.)46 b(Man)m(y)30 b(c)m(hanges)f(ha)m
-(v)m(e)h(b)s(een)e(made)h(in)f(the)h(FitsChan)f(class)i(in)e(order)g
-(to)h(bring)f(the)h(FITS-W)m(CS)f(en-)227 3530 y(co)s(ding)21
-b(in)m(to)g(line)f(with)g(the)h(curren)m(t)f(v)m(ersions)h(of)f(the)g
-(FITS-W)m(CS)g(pap)s(ers)f(\(see)j(h)m(ttp://www.atnf.csiro.au/p)s
-(eople/mcalabre/W)m(CS/\):)336 3747 y Fu(\017)46 b FG(The)34
-b(rotation)h(and)e(scaling)j(of)e(the)g(pixel)g(axes)h(ma)m(y)f(no)m(w)
-g(b)s(e)g(sp)s(eci\014ed)f(using)h(either)g(CD)p Fx(i)p
-Fy(_)p Fx(j)427 3859 y FG(k)m(eyw)m(ords,)k(or)e(PC)p
-Fx(i)p Fy(_)p Fx(j)48 b FG(and)35 b(CDEL)-8 b(Tj)35 b(k)m(eyw)m(ords.)
-58 b(A)36 b(new)f(attribute)i(called)g(CDMatrix)g(has)427
-3972 y(b)s(een)c(added)g(to)i(the)f(FitsChan)f(class)i(to)f(indicate)h
-(whic)m(h)e(set)i(of)e(k)m(eyw)m(ords)h(should)f(b)s(e)g(used)427
-4085 y(when)d(writing)g(a)h(F)-8 b(rameSet)31 b(to)g(a)g(FITS-W)m(CS)f
-(header.)336 4233 y Fu(\017)46 b FG(The)33 b(FITS-W)m(CS)f(enco)s(ding)
-h(no)m(w)f(supp)s(orts)f(most)i(of)g(the)g(con)m(v)m(en)m(tions)i
-(describ)s(ed)c(in)i(FITS-)427 4346 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)
-g(for)g(the)i(description)f(of)g(sp)s(ectral)g(co)s(ordinates.)39
-b(The)21 b(exceptions)i(are)g(that)f(the)427 4459 y(SSYSOBS)30
-b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g(and)g(W)m(CS)g(stored)h
-(in)f(tabular)h(form)f(\(as)h(indicated)427 4572 y(b)m(y)f(the)f(\\-T)
--8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f(not)h(supp)s(orted.)336
-4720 y Fu(\017)46 b FG(User-sp)s(eci\014ed)34 b(\014ducial)h(p)s(oin)m
-(ts)f(for)g(W)m(CS)h(pro)5 b(jections)35 b(are)f(no)m(w)h(supp)s(orted)
-d(b)m(y)j(FitsChans)427 4833 y(whic)m(h)29 b(use)f(FITS-W)m(CS)g(enco)s
-(ding.)40 b(This)28 b(use)g(k)m(eyw)m(ords)h(PVi)p Fy(_)p
-FG(0,)g(PVi)p Fy(_)p FG(1)g(and)f(PVi)p Fy(_)p FG(2)h(for)f(the)427
-4946 y(longitude)j(axis.)336 5093 y Fu(\017)46 b FG(When)37
-b(reading)g(a)h(FITS-W)m(CS)e(header,)j(a)e(FitsChan)g(will)h(no)m(w)f
-(use)f(k)m(eyw)m(ords)i(PVi)p Fy(_)p FG(3)f(and)427 5206
-y(PVi)p Fy(_)p FG(4)d(for)f(the)g(longitude)g(axis)h(\(if)f(presen)m
-(t\))h(in)f(preference)g(to)g(an)m(y)h(LONPOLE)e(and)g(LA)-8
-b(T-)427 5319 y(POLE)38 b(k)m(eyw)m(ords)h(whic)m(h)g(ma)m(y)g(b)s(e)f
-(presen)m(t.)66 b(When)38 b(writing)h(a)g(FITS-W)m(CS)f(header,)j(b)s
-(oth)427 5432 y(forms)30 b(are)h(written)f(out.)336 5580
-y Fu(\017)46 b FG(The)31 b(n)m(um)m(b)s(er)g(of)g(W)m(CS)h(axes)g(is)f
-(stored)h(in)f(the)h(W)m(CSAXES)f(k)m(eyw)m(ord)h(if)g(its)g(v)-5
-b(alue)32 b(w)m(ould)f(b)s(e)427 5693 y(di\013eren)m(t)g(to)g(that)g
-(of)g(the)f(NAXIS)g(k)m(eyw)m(ord.)p eop end
-%%Page: 546 556
-TeXDict begin 546 555 bop 0 52 a FG(546)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)336 351 y Fu(\017)46
-b FG(Helio-ecliptic)j(co)s(ordinates)c(are)g(no)m(w)g(supp)s(orted)e(b)
-m(y)h(FitsChans)h(whic)m(h)f(use)h(FITS-W)m(CS)427 464
-y(enco)s(ding.)h(This)31 b(uses)h(CTYPE)f(co)s(des)h(\\HLON")h(and)e
-(\\HLA)-8 b(T".)33 b(The)f(resulting)g(SkyF)-8 b(rame)427
-577 y(will)31 b(ha)m(v)m(e)g(a)f(System)g(v)-5 b(alue)30
-b(of)h(\\HELIOECLIPTIC",)d(and)i(all)g(the)h(usual)e(facilities,)k(suc)
-m(h)c(as)427 690 y(con)m(v)m(ersion)j(to)f(other)g(celestial)i
-(systems,)d(are)h(a)m(v)-5 b(ailable.)336 826 y Fu(\017)46
-b FG(The)33 b(FITS-W)m(CS)f(enco)s(ding)h(no)m(w)f(supp)s(orts)f(most)i
-(of)g(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(FITS-)427
-939 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)g(for)g(the)i(description)f(of)g
-(sp)s(ectral)g(co)s(ordinates.)39 b(The)21 b(exceptions)i(are)g(that)f
-(the)427 1052 y(SSYSOBS)30 b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g
-(and)g(W)m(CS)g(stored)h(in)f(tabular)h(form)f(\(as)h(indicated)427
-1165 y(b)m(y)f(the)f(\\-T)-8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f
-(not)h(supp)s(orted.)336 1300 y Fu(\017)46 b FG(When)29
-b(reading)g(a)g(FITS-W)m(CS)g(header,)g(a)h(FitsChan)f(will)g(no)m(w)g
-(ignore)h(an)m(y)f(distortion)g(co)s(des)427 1413 y(whic)m(h)24
-b(are)h(presen)m(t)g(in)f(CTYPE)f(k)m(eyw)m(ords.)40
-b(Here,)26 b(a)f(\\distortion)g(co)s(de")g(is)g(the)f(\014nal)g(group)g
-(of)427 1526 y(four)j(c)m(haracters)i(in)e(a)h(CTYPE)e(v)-5
-b(alue)28 b(of)g(the)f(form)g(\\xxxx-yyy-zzz",)k(as)d(describ)s(ed)e
-(in)h(FITS-)427 1639 y(W)m(CS)21 b(pap)s(er)f(IV.)h(The)f(exception)i
-(to)g(this)f(is)g(that)g(the)g(\\-SIP")g(distortion)h(co)s(de)f(\(as)g
-(used)g(b)m(y)f(the)427 1752 y(SIR)-8 b(TF)20 b(pro)5
-b(ject)21 b(-)f(see)41 b(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)
-m(ts/W)m(CSk)m(eyw)m(ords)p Fy(_)p FG(v1.3.p)s(df)7 b(\))427
-1865 y(is)31 b(in)m(terpreted)h(correctly)g(and)f(results)g(in)g(a)g(P)
-m(olyMap)i(b)s(eing)d(used)h(to)h(represen)m(t)f(the)g(distor-)427
-1978 y(tion)j(in)e(the)h(resulting)g(F)-8 b(rameSet.)49
-b(Note,)35 b(\\-SIP")e(distortion)g(co)s(des)g(can)g(only)g(b)s(e)f
-(read,)h(not)427 2091 y(written.)41 b(A)29 b(F)-8 b(rameSet)31
-b(whic)m(h)e(uses)g(a)h(P)m(olyMap)h(will)e(not)h(in)f(general)i(b)s(e)
-d(able)i(to)h(b)s(e)d(written)427 2204 y(out)38 b(to)h(a)f(FitsChan)g
-(using)g(an)m(y)g(foreign)g(enco)s(ding)g(\(although)h(NA)-8
-b(TIVE)38 b(enco)s(ding)g(can)g(of)427 2317 y(course)31
-b(b)s(e)f(used\).)336 2452 y Fu(\017)46 b FG(The)35 b(W)-8
-b(arnings)35 b(attribute)g(of)g(the)g(FitsChan)g(class)g(no)m(w)g
-(accepts)h(v)-5 b(alues)35 b(\\BadV)-8 b(al")37 b(\(whic)m(h)427
-2565 y(giv)m(es)k(w)m(arnings)e(ab)s(out)f(con)m(v)m(ersion)j(errors)e
-(when)f(reading)h(FITS)f(k)m(eyw)m(ord)i(v)-5 b(alues\),)42
-b(\\Dis-)427 2678 y(tortion")37 b(\(whic)m(h)f(giv)m(es)h(w)m(arnings)f
-(ab)s(out)f(unsupp)s(orted)e(distortion)j(co)s(des)g(within)f(CTYPE)427
-2791 y(v)-5 b(alues\),)31 b(and)e(\\BadMat")j(\(whic)m(h)e(giv)m(es)h
-(a)f(w)m(arning)g(if)f(the)h(rotation/scaling)j(matrix)d(cannot)427
-2904 y(b)s(e)g(in)m(v)m(erted\).)336 3040 y Fu(\017)46
-b FG(When)f(writing)g(a)g(F)-8 b(rameSet)46 b(to)g(a)f(FitsChan)g(whic)
-m(h)g(uses)f(a)i(non-Nativ)m(e)g(enco)s(ding,)j(the)427
-3153 y(commen)m(t)40 b(asso)s(ciated)g(with)e(an)m(y)h(card)f(already)i
-(in)e(the)h(FitsChan)f(will)h(b)s(e)f(retained)h(if)f(the)427
-3266 y(k)m(eyw)m(ord)23 b(v)-5 b(alue)22 b(b)s(eing)f(written)h(is)g
-(the)g(same)g(as)h(the)f(k)m(eyw)m(ord)g(v)-5 b(alue)22
-b(already)h(in)e(the)h(FitsChan.)336 3402 y Fu(\017)46
-b FG(A)26 b(F)-8 b(rameSet)26 b(whic)m(h)f(uses)g(the)g(non-FITS)f(pro)
-5 b(jection)26 b(t)m(yp)s(e)g(AST)p Fy(__)p FG(TPN)d(\(a)j(T)-8
-b(AN)26 b(pro)5 b(jection)427 3515 y(with)36 b(p)s(olynomial)f
-(distortion)h(terms\))g(can)g(no)m(w)g(b)s(e)f(written)g(to)h(a)g
-(FitsChan)g(if)f(the)h(Enco)s(d-)427 3627 y(ing)42 b(attribute)g(is)f
-(set)h(to)g(FITS-W)m(CS.)f(The)f(standard)h(\\-T)-8 b(AN")42
-b(co)s(de)g(is)f(used)g(within)f(the)427 3740 y(CTYPE)34
-b(v)-5 b(alues,)35 b(and)f(the)g(distortion)h(co)s(e\016cien)m(ts)h
-(are)e(enco)s(ded)g(in)g(k)m(eyw)m(ords)g(of)h(the)f(form)427
-3853 y(\\)g(QVi)p Fy(_)p FG(ma",)g(whic)m(h)f(are)g(directly)g
-(analogous)i(to)e(the)h(standard)e(\\PVi)p Fy(_)p FG(ma")i(pro)5
-b(jection)33 b(pa-)427 3966 y(rameter)i(k)m(eyw)m(ords.)53
-b(Th)m(us)33 b(a)h(FITS)g(reader)g(whic)m(h)g(do)s(es)g(not)g
-(recognise)i(the)e(QV)g(k)m(eyw)m(ords)427 4079 y(will)d(still)g(b)s(e)
-f(able)h(to)g(read)f(the)h(header,)f(but)g(the)h(distortion)f(will)h(b)
-s(e)f(ignored.)336 4215 y Fu(\017)46 b FG(The)30 b(default)g(v)-5
-b(alue)31 b(for)f(DefB1950)i(attribute)f(no)m(w)f(dep)s(ends)f(on)h
-(the)g(v)-5 b(alue)30 b(of)h(the)f(Enco)s(ding)427 4328
-y(attribute.)336 4464 y Fu(\017)46 b FG(A)d(new)e(app)s(endix)g(has)h
-(b)s(een)g(added)f(to)i(SUN/210)h(and)e(SUN/211)i(giving)f(details)g
-(of)f(the)427 4577 y(implemen)m(tation)36 b(pro)m(vided)e(b)m(y)g(the)g
-(FitsChan)g(class)h(of)f(the)g(con)m(v)m(en)m(tions)i(con)m(tained)g
-(in)d(the)427 4690 y(\014rst)d(four)g(FITS-W)m(CS)g(pap)s(ers.)111
-4887 y(2.)46 b(The)37 b(SkyF)-8 b(rame)38 b(class)h(no)m(w)e(supp)s
-(orts)f(t)m(w)m(o)j(new)e(co)s(ordinate)i(systems)e(\\ICRS")g(and)g
-(\\HELIOE-)227 5000 y(CLIPTIC".)e(The)h(default)g(for)g(the)g(System)g
-(attribute)h(for)f(SkyF)-8 b(rames)36 b(has)g(b)s(een)f(c)m(hanged)i
-(from)227 5112 y(\\FK5")32 b(to)f(\\ICRS".)111 5290 y(3.)46
-b(The)26 b(AST)p Fy(_)p FG(RA)-8 b(TE)25 b(function)g(has)h(b)s(een)f
-(added)g(whic)m(h)g(allo)m(ws)j(an)d(estimate)j(to)f(b)s(e)e(made)h(of)
-g(the)g(rate)227 5403 y(of)31 b(c)m(hange)g(of)g(a)g(Mapping)f(output)g
-(with)g(resp)s(ect)g(to)h(one)g(of)g(the)f(Mapping)h(inputs.)111
-5580 y(4.)46 b(All)38 b(attribute)f(names)f(for)h(F)-8
-b(rames)37 b(of)g(an)m(y)g(class)g(ma)m(y)g(no)m(w)g(include)f(an)h
-(optional)h(axis)f(sp)s(eci\014er.)227 5693 y(This)25
-b(includes)f(those)i(attributes)f(whic)m(h)g(describ)s(e)f(a)i(prop)s
-(ert)m(y)e(of)h(the)h(whole)f(F)-8 b(rame.)40 b(F)-8
-b(or)26 b(instance,)p eop end
-%%Page: 547 557
-TeXDict begin 547 556 bop 0 52 a Fz(G.17)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.1)2249 b FG(547)227 351
-y(the)39 b(Domain)h(attribute)g(ma)m(y)f(no)m(w)g(b)s(e)f(sp)s
-(eci\014ed)h(as)g(\\Domain\(1\)")i(in)e(addition)g(to)h(the)f(simpler)
-227 464 y(\\Domain".)61 b(In)35 b(cases)i(suc)m(h)f(as)h(this,)h(where)
-e(the)g(attribute)h(describ)s(es)f(a)h(prop)s(ert)m(y)e(of)i(the)f
-(whole)227 577 y(F)-8 b(rame,)31 b(axis)e(sp)s(eci\014ers)g(will)g
-(usually)g(b)s(e)f(ignored.)41 b(The)28 b(exception)i(is)f(that)h(a)f
-(CmpF)-8 b(rame)29 b(will)h(use)227 690 y(the)e(presence)g(of)f(an)h
-(axis)g(sp)s(eci\014er)f(to)h(indicate)h(that)f(the)g(attribute)g(name)
-f(relates)i(to)g(the)e(primary)227 803 y(F)-8 b(rame)32
-b(con)m(taining)f(the)g(sp)s(eci\014ed)f(axis,)h(rather)f(than)g(to)h
-(the)g(CmpF)-8 b(rame)30 b(as)h(a)f(whole.)111 992 y(5.)46
-b(A)35 b(new)f(sub)s(class)g(of)h(Mapping,)h(the)f(P)m(olyMap,)i(has)e
-(b)s(een)f(added)g(whic)m(h)g(p)s(erforms)f(a)i(general)h(N-)227
-1105 y(dimensional)31 b(p)s(olynomial)f(mapping.)111
-1293 y(6.)46 b(A)37 b(new)g(sub)s(class)f(of)i(Mapping,)g(the)g
-(GrismMap,)h(has)e(b)s(een)f(added)g(whic)m(h)h(mo)s(dels)g(the)g(sp)s
-(ectral)227 1406 y(disp)s(ersion)29 b(pro)s(duced)g(b)m(y)h(a)h
-(grating,)h(prism)d(or)h(grism.)111 1595 y(7.)46 b(A)38
-b(new)f(sub)s(class)g(of)h(Mapping,)i(the)e(ShiftMap,)h(has)f(b)s(een)f
-(added)g(whic)m(h)g(adds)g(constan)m(t)i(v)-5 b(alues)227
-1708 y(on)m(to)32 b(all)f(co)s(ordinates)g(\(this)g(is)f(equiv)-5
-b(alen)m(t)32 b(to)f(a)g(WinMap)g(with)f(unit)g(scaling)h(on)f(all)i
-(axes\).)111 1897 y(8.)46 b(Minor)32 b(bugs)f(ha)m(v)m(e)i(b)s(een)e
-(\014xed)g(within)g(the)h(Plot)h(class)f(to)h(do)e(with)h(the)f(c)m
-(hoice)j(and)d(placemen)m(t)i(of)227 2010 y(n)m(umerical)e(axis)g(lab)s
-(els.)111 2198 y(9.)46 b(The)33 b(SphMap)g(class)h(has)f(a)h(new)g
-(attribute)g(called)h(P)m(olarLong)g(whic)m(h)e(giv)m(es)i(the)f
-(longitude)g(v)-5 b(alue)227 2311 y(to)31 b(b)s(e)f(returned)f(when)g
-(a)i(Cartesian)f(p)s(osition)h(corresp)s(onding)e(to)i(either)f(the)h
-(north)e(or)i(south)e(p)s(ole)227 2424 y(is)i(transformed)e(in)m(to)j
-(spherical)e(co)s(ordinates.)66 2613 y(10.)46 b(The)33
-b(WcsMap)i(class)f(no)m(w)g(assigns)g(a)g(longitude)g(of)g(zero)g(to)h
-(output)e(celestial)j(co)s(ordinates)f(whic)m(h)227 2726
-y(ha)m(v)m(e)d(a)f(latitude)g(of)g(plus)e(or)h(min)m(us)g(90)h
-(degrees.)66 2915 y(11.)46 b(The)31 b(NatLat)h(and)f(NatLon)g
-(attributes)h(of)f(the)g(WcsMap)h(class)g(ha)m(v)m(e)g(b)s(een)f(c)m
-(hanged)g(so)h(that)f(they)227 3027 y(no)m(w)g(return)f(the)g(\014xed)h
-(nativ)m(e)h(co)s(ordinates)f(of)g(the)g(pro)5 b(jection)31
-b(reference)g(p)s(oin)m(t,)g(rather)g(than)f(the)227
-3140 y(nativ)m(e)i(co)s(ordinates)f(of)g(the)f(user-de\014ned)f
-(\014ducial)h(p)s(oin)m(t.)66 3329 y(12.)46 b(Notation)34
-b(has)d(b)s(een)g(c)m(hanged)h(in)f(b)s(oth)f(the)i(WcsMap)g(and)f
-(FitsChan)h(classes)g(to)g(re\015ect)g(the)g(con-)227
-3442 y(v)m(en)m(tion)39 b(used)d(in)h(the)h(FITS-W)m(CS)e(pap)s(ers)g
-(that)i(index)f(\\i")h(refers)f(to)h(a)g(w)m(orld)f(co)s(ordinate)h
-(axis,)227 3555 y(and)30 b(index)g(\\j")h(refers)f(to)h(a)g(pixel)g
-(axis.)66 3744 y(13.)46 b(Changes)24 b(ha)m(v)m(e)h(b)s(een)e(made)h
-(to)h(sev)m(eral)g(Mapping)f(classes)h(in)f(order)f(to)i(allo)m(w)h
-(the)e(AST)p Fy(_)p FG(SIMPLIFY)227 3857 y(function)30
-b(to)h(mak)m(e)h(simpli\014cations)f(in)f(a)h(CmpMap)e(whic)m(h)h
-(previously)g(w)m(ere)h(not)g(p)s(ossible.)66 4045 y(14.)46
-b(The)40 b(SlaMap)h(class)g(has)g(b)s(een)e(extended)i(b)m(y)f(the)h
-(addition)g(of)f(con)m(v)m(ersions)i(b)s(et)m(w)m(een)f(FK5)g(and)227
-4158 y(ICRS)29 b(co)s(ordinates,)j(and)e(b)s(et)m(w)m(een)h(FK5)f(and)g
-(helio-ecliptic)j(co)s(ordinates.)66 4347 y(15.)46 b(The)36
-b(Sp)s(ecMap)f(class)i(has)e(b)s(een)g(c)m(hanged)i(to)f(use)g(the)g
-(equation)h(for)e(the)h(refractiv)m(e)i(index)d(of)h(air)227
-4460 y(as)42 b(giv)m(en)g(in)f(the)g(curren)m(t)g(v)m(ersion)g(of)h
-(FITS-W)m(CS)e(pap)s(er)h(I)s(I)s(I.)e(Also,)45 b(the)c(forw)m(ard)g
-(and)g(in)m(v)m(erse)227 4573 y(transformations)33 b(b)s(et)m(w)m(een)h
-(frequency)e(and)g(air-w)m(a)m(v)m(elength)k(ha)m(v)m(e)e(b)s(een)e
-(made)h(more)g(compatible)227 4686 y(b)m(y)e(using)e(an)i(iterativ)m(e)
-i(pro)s(cedure)c(to)i(calculate)i(the)d(in)m(v)m(erse.)0
-4981 y Fw(G.17)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.1)0
-5203 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 5316 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V3.0)g(and)f(V3.1)i(\(the)f(curren)m(t)f(v)m(ersion\):)
-111 5580 y(1.)46 b(Addition)30 b(of)g(a)g(new)f(class)h(called)h
-(XmlChan)e(-)h(a)g(Channel)e(whic)m(h)i(reads)f(and)g(writes)h(AST)f
-(ob)5 b(jects)227 5693 y(in)30 b(the)h(form)f(of)g(XML.)p
-eop end
-%%Page: 548 558
-TeXDict begin 548 557 bop 0 52 a FG(548)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(2.)46
-b(A)30 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)g(Plot)i(class)f
-(whic)m(h)f(could)h(cause)g(incorrect)g(graphical)h(attributes)f(to)227
-464 y(b)s(e)35 b(used)g(for)g(v)-5 b(arious)36 b(parts)f(of)h(the)f
-(plot)h(if)g(either)g(axis)g(has)f(no)h(tic)m(k)h(marks)e(\(i.e.)57
-b(if)36 b(b)s(oth)e(ma)5 b(jor)227 577 y(and)30 b(minor)g(tic)m(k)i
-(marks)e(ha)m(v)m(e)h(zero)g(length\).)0 810 y(Programs)25
-b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f(need)g(to)h(b)s(e)f
-(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5 b(an)m(tage)27
-b(of)e(these)0 923 y(new)30 b(facilities.)0 1206 y Fw(G.18)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.2)0 1420 y
-FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1533 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.1)g(and)f
-(V3.2:)111 1766 y(1.)46 b(A)d(new)f(routine)g(AST)p Fy(_)p
-FG(PUTCARDS)f(has)h(b)s(een)g(added)f(to)i(the)g(FitsChan)f(class.)78
-b(This)41 b(allo)m(ws)227 1879 y(m)m(ultiple)33 b(concatenated)h
-(header)e(cards)g(to)h(b)s(e)f(stored)g(in)g(a)g(FitsChan)g(in)g(a)h
-(single)f(call,)j(pro)m(viding)227 1992 y(an)c(alternativ)m(e)h(to)f
-(the)g(existing)g(AST)p Fy(_)p FG(PUTCARDS)e(routine.)111
-2172 y(2.)46 b(Some)33 b(sign\014can)m(t)h(c)m(hanges)g(ha)m(v)m(e)g(b)
-s(een)f(made)g(to)h(the)f(simpli\014cation)h(of)f(Mappings)g(whic)m(h)f
-(should)227 2285 y(resultin)24 b(a)h(greater)h(degree)f(of)g
-(simplication)g(taking)h(place.Some)f(bugs)f(ha)m(v)m(e)i(also)f(b)s
-(een)f(\014xed)g(whic)m(h)227 2398 y(could)d(result)f(in)h(an)f
-(in\014nite)h(lo)s(op)f(b)s(eing)h(en)m(tered)g(when)e(attempting)j(to)
-g(simplify)e(certain)h(Mappings.)111 2578 y(3.)46 b(The)40
-b(FitsChan)h(class)g(no)m(w)g(translates)g(the)g(sp)s(ectral)g
-(algorithm)h(co)s(des)e(\\-W)-10 b(A)g(V",)43 b(\\-FR)m(Q")f(and)227
-2691 y(\\-VEL")d(\(sp)s(eci\014ed)e(in)g(early)h(drafts)f(of)g(pap)s
-(er)f(I)s(I)s(I\))h(to)h(the)f(corresp)s(onding)g(\\-X2P")i(form)d
-(when)227 2804 y(reading)31 b(a)g(sp)s(ectral)f(axis)h(description)f
-(from)g(a)h(set)g(of)g(FITS)e(header)h(cards.)111 2985
-y(4.)46 b(A)35 b(bug)f(has)g(b)s(een)g(\014xed)f(in)h(the)h(FitsChan)f
-(class)h(whic)m(h)g(could)f(cause)h(k)m(eyw)m(ords)g(asso)s(ciated)h
-(with)227 3098 y(alternate)c(axis)f(descriptions)f(to)i(b)s(e)d(mis-in)
-m(terpreted.)111 3278 y(5.)46 b(The)33 b(Plot)h(class)f(no)m(w)g(pro)m
-(vides)g(facilities)i(for)e(mo)s(difying)g(the)g(app)s(earance)g(of)g
-(sub-strings)f(within)227 3391 y(text)24 b(strings)f(suc)m(h)g(as)g
-(axis)g(lab)s(els,)i(titles,)h Fx(etc)p FG(,)e(b)m(y)f(pro)s(ducing)f
-(sup)s(er-scripts,)h(sub-scripts,)h(c)m(hanging)227 3504
-y(the)31 b(fon)m(t)g(colour,)g(size,)g Fx(etc)p FG(.)41
-b(See)31 b(attribute)g(Escap)s(e.)111 3684 y(6.)46 b(The)36
-b(default)g(v)-5 b(alue)36 b(of)g(the)h(T)-8 b(ol)36
-b(attribute)h(of)f(the)g(Plot)h(class)g(has)e(b)s(een)h(c)m(hanged)g
-(from)g(0.001)i(to)227 3797 y(0.01.)47 b(This)31 b(should)g(not)h
-(usually)f(cause)i(an)m(y)f(signi\014can)m(t)h(visible)f(c)m(hange)h
-(to)f(the)g(plot,)h(but)e(should)227 3910 y(mak)m(e)i(the)f(plotting)h
-(faster.)46 b(Y)-8 b(ou)33 b(ma)m(y)f(need)g(to)h(set)f(a)g(lo)m(w)m
-(er)i(v)-5 b(alue)32 b(for)g(T)-8 b(ol)32 b(if)g(y)m(ou)g(are)h(pro)s
-(ducing)227 4023 y(a)e(particularly)g(large)g(plot.)111
-4203 y(7.)46 b(The)30 b(algorithm)h(for)e(\014nding)g(the)h(default)g
-(v)-5 b(alue)31 b(for)e(the)h(Gap)h(attribute)f(has)g(b)s(een)f(c)m
-(hanged.)41 b(This)227 4316 y(attribute)34 b(sp)s(eci\014es)f(the)g
-(gap)h(b)s(et)m(w)m(een)g(ma)5 b(jor)33 b(axis)g(v)-5
-b(alues)34 b(in)f(an)g(annotated)h(grid)f(dra)m(wn)f(b)m(y)h(the)227
-4429 y(Plot)26 b(class.)40 b(The)25 b(c)m(hange)h(in)f(algorithm)h(ma)m
-(y)f(cause)h(the)f(default)h(v)-5 b(alue)25 b(to)h(b)s(e)f(di\013eren)m
-(t)g(to)h(previous)227 4542 y(v)m(ersions)31 b(in)f(cirtain)h
-(circumstances.)111 4722 y(8.)46 b(Some)39 b(bugs)f(ha)m(v)m(e)i(b)s
-(een)e(\014xed)g(in)g(the)h(Plot)h(class)f(whic)m(h)g(could)g(cause)g
-(the)g(system)g(to)g(hang)g(for)227 4835 y(a)k(long)g(time)g(while)g
-(dra)m(wing)f(certain)i(all-sky)f(grids)f(\(notable)i(some)f(of)f(the)h
-(FITS)f(Quad-cub)s(e)227 4948 y(pro)5 b(jections\).)111
-5128 y(9.)46 b(The)33 b(SkyAxis)g(class)i(has)e(extended)g(the)h(F)-8
-b(ormat)35 b(attribute)f(b)m(y)f(the)h(addition)g(of)f(the)h(\\g")h
-(option.)227 5241 y(this)k(option)g(is)f(similar)h(to)g(the)g(older)f
-(\\l")i(option)f(in)f(that)h(it)g(results)f(in)g(c)m(haracters)i
-(\(\\h",)i(\\m",)227 5354 y(\\s",)34 b Fx(etc)5 b FG(\))32
-b(b)s(eing)g(used)f(as)h(delimiters)h(b)s(et)m(w)m(een)f(the)h
-(sexagesimal)h(\014elds)d(of)h(the)h(celestial)h(p)s(osition.)227
-5467 y(The)g(di\013erence)i(is)e(that)i(the)e(\\g")i(option)f(includes)
-g(graphics)f(escap)s(e)i(sequences)e(in)h(the)g(returned)227
-5580 y(formatted)27 b(string)e(whic)m(h)h(result)g(in)f(the)h(\014eld)g
-(delimiter)g(c)m(haracters)i(b)s(eing)d(dra)m(wn)g(as)h(sup)s
-(er-scripts)227 5693 y(when)k(plotted)h(as)f(n)m(umerical)h(axis)g(v)-5
-b(alues)31 b(b)m(y)f(a)h(Plot.)p eop end
-%%Page: 549 559
-TeXDict begin 549 558 bop 0 52 a Fz(G.19)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.3)2249 b FG(549)66 351 y(10.)46
-b(The)30 b(Plot)h(class)g(has)f(b)s(een)f(extended)h(to)h(include)f
-(facilities)i(for)e(pro)s(ducing)f(logarithmic)j(axes.)41
-b(See)227 464 y(attributes)31 b(LogPlot,)h(LogTic)m(ks,)g(LogGap)g(and)
-d(LogLab)s(el.)66 672 y(11.)46 b(New)35 b(functions)g(astGCap)g(and)g
-(astGScales)h(ha)m(v)m(e)g(b)s(een)f(added)f(to)h(the)g(in)m(terface)i
-(de\014ned)d(b)m(y)g(\014le)227 785 y Fy(grf.h)p FG(.)39
-b(The)26 b(ast)p Fy(_)p FG(link)i(command)f(has)g(b)s(een)g(mo)s
-(di\014ed)f(so)h(that)h(the)g Fy(-mygrf)d FG(switc)m(h)j(loads)g(dumm)m
-(y)227 898 y(v)m(ersions)34 b(of)f(the)g(new)g(grf)g(functions.)48
-b(This)32 b(means)h(that)h(applications)g(should)e(con)m(tin)m(ue)j(to)
-f(build)227 1011 y(without)23 b(an)m(y)f(c)m(hange.)40
-b(Ho)m(w)m(ev)m(er,)26 b(the)c(facilities)j(for)d(in)m(terpreting)h
-(escap)s(e)g(sequences)g(within)f(strings)227 1124 y(dra)m(wn)j(b)m(y)g
-(the)g(Plot)i(class)f(will)f(not)h(b)s(e)e(a)m(v)-5 b(ailable)28
-b(unless)d(the)g(new)g(grf)g(functions)g(are)h(implemen)m(ted.)227
-1237 y(If)c(y)m(ou)g(c)m(ho)s(ose)h(to)f(implemen)m(t)h(them,)h(y)m(ou)
-e(should)f(mo)s(dify)g(y)m(our)h(linking)g(pro)s(cedure)e(to)j(use)f
-(the)g Fy(-grf)227 1349 y FG(switc)m(h)34 b(in)e(place)i(of)f(the)h
-(older)f Fy(-mygrf)e FG(switc)m(h.)49 b(See)33 b(the)g(description)g
-(of)g(the)g(ast)p Fy(_)p FG(link)h(command)227 1462 y(for)g(details)h
-(of)f(the)g(new)g(switc)m(hes.)52 b(Also)35 b(note)f(that)h(the)f
-(astGQc)m(h)h(function,)g(whilst)f(included)f(in)227
-1575 y(v)m(erb+grf.h+)i(in)h(p)s(ervious)f(v)m(ersions)i(of)f(AST,)g(w)
-m(as)h(not)f(actually)i(called.)59 b(As)36 b(of)h(this)f(v)m(ersion)g
-(of)227 1688 y(AST,)c(calls)i(are)f(made)f(to)h(the)g(astGQc)m(h)h
-(function,)e(and)g(so)h(an)m(y)g(bugs)e(in)i(the)f(implemen)m(tation)i
-(of)227 1801 y(astGQc)m(h)e(ma)m(y)f(cause)g(spurious)d(b)s(eha)m
-(viour)i(when)g(plotting)h(text)h(strings.)66 2009 y(12.)46
-b(A)c(new)f('static')i(metho)s(d)e(called)h(astEscap)s(es)g(has)f(b)s
-(een)g(added)f(whic)m(h)h(is)h(used)e(to)i(con)m(trol)h(and)227
-2122 y(enquire)33 b(whether)g(astGetC)h(and)f(astF)-8
-b(ormat)35 b(will)e(strip)g(an)m(y)h(graphical)g(escap)s(e)f(sequences)
-h(whic)m(h)227 2235 y(ma)m(y)d(b)s(e)f(presen)m(t)g(out)h(of)g(the)f
-(returned)f(v)-5 b(alue.)66 2443 y(13.)46 b(New)35 b(attribute)g
-(XmlPre\014x)f(has)g(b)s(een)f(added)h(to)h(the)g(XmlChan)e(class.)54
-b(It)34 b(allo)m(ws)i(XML)e(written)227 2556 y(b)m(y)d(the)f(XmlChan)g
-(class)h(to)g(include)f(an)g(explicit)i(namespace)f(pre\014x)e(on)i
-(eac)m(h)g(elemen)m(t.)66 2763 y(14.)46 b(New)33 b(attribute)g(XmlF)-8
-b(ormat)34 b(has)e(b)s(een)g(added)f(to)i(the)g(XmlChan)f(class.)47
-b(It)33 b(sp)s(eci\014es)f(the)g(format)227 2876 y(in)e(whic)m(h)g(AST)
-g(ob)5 b(jects)31 b(should)f(b)s(e)f(written.)66 3084
-y(15.)46 b(A)26 b(new)f(class)h(of)f(Mapping,)i(the)e(T)-8
-b(ranMap,)27 b(has)e(b)s(een)f(in)m(tro)s(duced.)39 b(A)25
-b(T)-8 b(ranMap)25 b(tak)m(es)i(its)f(forw)m(ard)227
-3197 y(transformation)41 b(from)g(an)f(existing)i(Mapping,)h(and)d(its)
-h(in)m(v)m(erse)h(transformation)f(from)f(another)227
-3310 y(existing)32 b(Mapping.)66 3518 y(16.)46 b(A)39
-b(bug)f(has)h(b)s(een)f(\014xed)g(in)h(WcsMap)g(whic)m(h)g(caused)g
-(error)f(rep)s(orts)g(to)i(include)e(erroneous)h(axis)227
-3631 y(n)m(um)m(b)s(ers)29 b(when)h(referring)f(to)j(missing)e
-(parameter)h(v)-5 b(alues.)0 3958 y Fw(G.19)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V3.3)0 4194 y FG(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-4307 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.2)g(and)f(V3.3:)111
-4600 y(1.)46 b(Options)37 b(ha)m(v)m(e)i(b)s(een)e(added)g(to)h(the)g
-(SkyF)-8 b(rame)38 b(class)g(whic)m(h)g(allo)m(ws)h(the)e(origin)h(of)g
-(celestial)i(co-)227 4713 y(ordinates)c(to)g(b)s(e)f(mo)m(v)m(ed)i(to)f
-(an)m(y)f(sp)s(eci\014ed)g(p)s(oin)m(t.)56 b(See)36 b(the)g(new)f
-(attributes)h(SkyRef,)g(SkyRefIs,)227 4826 y(SkyRefP)30
-b(and)g(AlignO\013set.)111 5034 y(2.)46 b(An)33 b(option)g(has)g(b)s
-(een)f(added)g(to)i(the)f(FitsChan)f(class)i(whic)m(h)f(allo)m(ws)h
-(extra)g(F)-8 b(rames)33 b(represen)m(ting)227 5146 y(cartesian)i(pro)5
-b(jection)34 b(plane)f(co)s(ordinates)h(\(\\in)m(termediate)i(w)m(orld)
-d(co)s(ordinates")h(in)f(the)h(parlance)227 5259 y(of)29
-b(FITS-W)m(CS\))f(to)i(b)s(e)d(created)j(when)d(reading)i(W)m(CS)f
-(information)h(from)f(a)h(foreign)g(FITS)e(header.)227
-5372 y(This)j(option)h(is)f(con)m(trolled)i(b)m(y)e(a)h(new)f
-(attribute)h(called)h(Iw)m(c.)111 5580 y(3.)46 b(The)29
-b(FitsChan)f(class)i(whic)m(h)e(b)s(een)g(mo)s(di\014ed)g(to)h(in)m
-(terpret)g(FITS-W)m(CS)g(CAR)f(pro)5 b(jection)30 b(headers)227
-5693 y(correctly)i(if)e(the)h(longitude)g(reference)g(pixel)f
-(\(CRPIX\))h(is)f(v)m(ery)h(large.)p eop end
-%%Page: 550 560
-TeXDict begin 550 559 bop 0 52 a FG(550)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(4.)46
-b(The)35 b(FITS-AIPS++)e(enco)s(ding)j(in)e(the)i(FitsChan)f(class)h
-(no)m(w)f(recognised)h(sp)s(ectral)f(axes)h(if)f(they)227
-464 y(conform)42 b(to)h(the)g(AIPS)f(con)m(v)m(en)m(tion)i(in)e(whic)m
-(h)g(the)h(sp)s(ectral)f(axis)h(is)f(descirb)s(ed)f(b)m(y)i(a)f(CTYPE)
-227 577 y(k)m(eyw)m(ord)36 b(o)s(d)g(the)g(form)f("AAAA-BBB")k(where)c
-(\\AAAA")i(is)f(one)g(of)g(FREQ,)g(VELO)f(or)h(FELO,)227
-690 y(and)d(\\BBB")j(is)d(one)h(of)f(LSR,)g(LSD,)h(HEL)f(or)h(OBS.)f
-(Suc)m(h)g(sp)s(ectral)g(axes)h(can)g(b)s(e)f(b)s(oth)g(read)g(and)227
-803 y(written.)111 984 y(5.)46 b(The)24 b(FitsChan)g(class)h(no)m(w)g
-(has)f(a)h(FITS-AIPS++)d(enco)s(ding)j(whic)m(h)f(represen)m(ts)g(W)m
-(CS)g(information)227 1097 y(using)30 b(FITS)f(header)h(cards)g
-(recognised)h(b)m(y)f(the)g(AIPS++)f(pro)5 b(ject.)41
-b(Supp)s(ort)28 b(for)i(sp)s(ectral)h(axes)f(is)227 1210
-y(iden)m(tical)i(to)g(the)e(FITS-AIPS)f(enco)s(ding.)111
-1390 y(6.)46 b(The)39 b(organisation)i(of)f(the)g(AST)e(distribution)h
-(and)g(the)h(commands)f(for)g(building)f(it)i(ha)m(v)m(e)h(b)s(een)227
-1503 y(c)m(hanged.)h(Whereas)31 b(AST)f(used)f(to)j(b)s(e)d(built)i
-(and)e(installed)j(with)e Fy(./mk)46 b(build;)h(./mk)f(install)p
-FG(,)227 1616 y(it)36 b(no)m(w)e(builds)g(using)g(the)h(more)g
-(standard)f(idiom)h Fy(./configure;)44 b(make;)i(make)h(install)p
-FG(.)52 b(The)227 1729 y(installation)41 b(lo)s(cation)f(is)f(con)m
-(trolled)h(b)m(y)e(the)h Fy(--prefix)e FG(argumen)m(t)i(to)g
-(./con\014gure)g(\(as)g(is)g(usual)227 1842 y(for)30
-b(other)g(pac)m(k)-5 b(ages)32 b(whic)m(h)e(use)g(this)g(sc)m(heme\).)
-41 b(Note)32 b(that)e(the)h(INST)-8 b(ALL)29 b(en)m(vironmen)m(t)i(v)-5
-b(ariable)227 1955 y(no)m(w)28 b(has)g(a)g Fx(di\013er)-5
-b(ent)37 b FG(meaning)28 b(to)g(that)h(whic)m(h)e(it)h(had)g(b)s
-(efore,)g(and)f(it)h(should)f(generally)i(b)s(e)e Fx(unset)p
-FG(.)227 2068 y(Also,)32 b(there)e(is)h(no)f(need)g(to)h(set)g(the)g
-(SYSTEM)e(v)-5 b(ariable.)111 2249 y(7.)46 b(Shared)26
-b(libraries)g(are)h(no)m(w)g(installed)g(in)f(the)h(same)g(directory)g
-(as)g(the)g(static)h(libraries.)39 b(In)26 b(addition,)227
-2362 y(links)i(to)g(sharable)g(libraries)g(are)g(installed)h(with)e
-(names)h(whic)m(h)f(include)h(v)m(ersion)g(information,)h(and)227
-2475 y(\\libto)s(ol)22 b(libraries")f(are)f(also)i(installed)f(\(see)g
-(h)m(ttp://www.gn)m(u.org/soft)m(w)m(are/libto)s(ol/man)m(ual.h)m
-(tml\))q(.)111 2655 y(8.)46 b(The)22 b Fy(ast_dev)f FG(script)h(has)h
-(b)s(een)e(remo)m(v)m(ed.)39 b(Instead,)25 b(the)d(lo)s(cation)i(of)f
-(the)g(AST)f(include)g(\014les)g(should)227 2768 y(b)s(e)30
-b(sp)s(eci\014ed)g(using)g(the)g(-I)h(option)f(when)g(compiling.)111
-2949 y(9.)46 b(The)30 b(names)g(of)h(the)g(installed)g(AST)e(include)h
-(\014les)h(ha)m(v)m(e)g(b)s(een)f(c)m(hanged)h(to)g(upp)s(er)d(case.)0
-3233 y Fw(G.20)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.4)0
-3447 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 3560 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V3.3)g(and)f(V3.4:)111 3795 y(1.)46 b(The)e(Mapping)f
-(class)i(has)e(a)h(new)g(metho)s(d)f(\(AST)p Fy(_)p FG(LINEARAPPR)m(O)m
-(X\))h(whic)m(h)f(calculates)j(the)227 3908 y(co-e\016cien)m(ts)33
-b(of)e(a)f(linear)h(appro)m(ximation)h(to)f(a)f(Mapping.)111
-4089 y(2.)46 b(The)27 b(F)-8 b(ormat)29 b(attribute)g(for)e(simple)h(F)
--8 b(rames)28 b(and)f(SkyF)-8 b(rames)28 b(has)f(b)s(een)g(extended.)40
-b(It)28 b(has)f(alw)m(a)m(ys)227 4202 y(b)s(een)e(p)s(ossible,)h(in)f
-(b)s(oth)g(classes,)j(to)e(sp)s(ecify)f(a)h(precision)g(b)m(y)f
-(including)g(a)h(dot)f(in)h(the)f(F)-8 b(ormat)27 b(v)-5
-b(alue)227 4315 y(follo)m(w)m(ed)27 b(b)m(y)e(an)g(in)m(teger)i(\()p
-Fx(e.g.)39 b FG(\\)p Fy(dms.1)p FG(")24 b(for)h(a)h(SkyF)-8
-b(rame,)27 b(or)e(\\)p Fy(\045.10g)p FG(")g(for)g(a)g(simple)h(F)-8
-b(rame\).)40 b(The)227 4428 y(precision)31 b(can)g(no)m(w)g(also)g(b)s
-(e)f(sp)s(eci\014ed)g(using)g(an)h(asterisk)g(in)f(place)i(of)e(the)h
-(in)m(teger)h(\()p Fx(e.g.)41 b FG(\\)p Fy(dms.*)p FG(")227
-4541 y(or)36 b(\\)p Fy(\045.*g)p FG("\).)58 b(This)35
-b(causes)i(the)f(precision)g(to)h(b)s(e)e(deriv)m(ed)h(on)g(the)g
-(basis)g(of)g(the)g(Digits)i(attribute)227 4654 y(v)-5
-b(alue.)111 4835 y(3.)46 b(The)30 b(Plot)i(class)f(has)g(b)s(een)f(c)m
-(hanged)h(so)g(that)h(the)e(default)h(v)-5 b(alue)31
-b(used)f(for)h(the)g(Digits)h(attribute)f(is)227 4948
-y(c)m(hosen)f(to)h(b)s(e)e(the)g(smallest)i(v)-5 b(alue)30
-b(whic)m(h)f(results)h(in)f(no)h(pair)f(of)h(adjacen)m(t)g(lab)s(els)g
-(b)s(eing)f(iden)m(tical.)227 5060 y(F)-8 b(or)22 b(instance,)i(if)e
-(an)f(annotated)h(grid)f(is)g(b)s(eing)g(dra)m(wn)f(describing)h(a)h
-(SkyF)-8 b(rame,)24 b(and)d(the)g(F)-8 b(ormat\(1\))227
-5173 y(v)j(alue)30 b(is)e(set)i(to)f(\\)p Fy(hms.*g)p
-FG(")g(\(the)g(\\g")h(causes)f(\014eld)g(delimiters)g(to)h(b)s(e)e(dra)
-m(wn)g(as)h(sup)s(erscripts\),)f(and)227 5286 y(the)35
-b(Digits\(1\))i(v)-5 b(alue)36 b(is)e(unset,)i(then)e(the)h(seconds)g
-(\014eld)f(will)h(ha)m(v)m(e)h(a)f(n)m(um)m(b)s(er)e(of)i(decimal)h
-(places)227 5399 y(whic)m(h)30 b(results)h(in)f(no)g(pair)g(of)g(lab)s
-(els)h(b)s(eing)f(iden)m(tical.)111 5580 y(4.)46 b(Addition)34
-b(of)g(a)g(new)g(class)g(classed)h(DSBSp)s(ecF)-8 b(rame.)52
-b(This)33 b(is)h(a)g(sub-class)g(of)g(Sp)s(ecF)-8 b(rame)34
-b(whic)m(h)227 5693 y(can)d(b)s(e)f(used)f(to)i(describ)s(e)f(sp)s
-(ectral)h(axes)g(asso)s(ciated)h(with)e(dual)g(sideband)f(sp)s(ectral)i
-(data.)p eop end
-%%Page: 551 561
-TeXDict begin 551 560 bop 0 52 a Fz(G.21)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.5)2249 b FG(551)111 351
-y(5.)46 b(The)d(FitsChan)g(class)i(will)e(no)m(w)h(read)f(headers)g
-(whic)m(h)g(use)g(the)h(old)g(\\-GLS")g(pro)5 b(jection)44
-b(co)s(de,)227 464 y(con)m(v)m(erting)d(them)f(to)g(the)f(corresp)s
-(onding)f(mo)s(dern)g(\\-SFL")j(co)s(de,)h(pro)m(vided)c(that)i(the)g
-(celestial)227 577 y(axes)31 b(are)g(not)g(rotated.)111
-802 y(6.)46 b(The)36 b(FitsChan)f(class)i(has)f(a)g(new)f(Enco)s(ding,)
-i(\\FITS-CLASS",)e(whic)m(h)h(allo)m(ws)h(the)f(reading)g(and)227
-915 y(writing)21 b(of)f(FITS)g(headers)f(using)h(the)h(con)m(v)m(en)m
-(tions)h(of)e(the)h(CLASS)e(pac)m(k)-5 b(age)22 b(-)f(see)41
-b(h)m(ttp://www.iram.fr/IRAMFR/GILD)m(AS/do)s(c/h)m(tml/class-)227
-1028 y(h)m(tml/class.h)m(tml\).)0 1385 y Fw(G.21)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.5)0 1634 y
-FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1747 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.4)g(and)f
-(V3.5:)111 2066 y(1.)46 b(AST)29 b(no)m(w)g(pro)m(vides)h(facilities)i
-(for)d(represen)m(ting)g(regions)h(of)g(v)-5 b(arious)29
-b(shap)s(es)g(within)g(a)h(co)s(ordinate)227 2179 y(system.)43
-b(The)31 b(Region)g(class)h(pro)m(vides)f(general)h(facilities)h(whic)m
-(h)e(are)h(indep)s(enden)m(t)d(of)i(the)h(sp)s(eci\014c)227
-2292 y(shap)s(e)37 b(of)h(region)h(b)s(eing)e(used.)62
-b(V)-8 b(arious)39 b(sub-classes)f(of)g(Region)h(are)f(also)h(no)m(w)f
-(a)m(v)-5 b(ailable)40 b(whic)m(h)227 2404 y(pro)m(vide)25
-b(means)f(of)g(creating)h(Regions)g(of)g(sp)s(eci\014c)e(shap)s(e.)38
-b(F)-8 b(acilities)28 b(pro)m(vided)23 b(b)m(y)h(the)h(Region)g(class)
-227 2517 y(include)j(testing)h(p)s(oin)m(ts)f(to)h(see)f(if)g(they)h
-(are)f(inside)g(the)g(Region,)i(testing)f(t)m(w)m(o)g(Regions)g(for)f
-(o)m(v)m(erlap,)227 2630 y(transforming)i(Regions)h(from)f(one)h(co)s
-(ordinate)g(system)g(to)g(another)f Fx(etc)p FG(.)111
-2856 y(2.)46 b(A)31 b(new)f(class)h(of)g(1-dimensional)g(F)-8
-b(rame)32 b(called)g(FluxF)-8 b(rame)31 b(has)g(b)s(een)e(added)h(whic)
-m(h)g(can)h(b)s(e)f(used)227 2968 y(to)c(describ)s(e)e(v)-5
-b(arious)24 b(systems)h(for)f(describing)g(o)m(vserv)m(ed)i(v)-5
-b(alue)25 b(at)g(a)g(single)g(\014xed)f(sp)s(ectral)h(p)s(osition.)111
-3194 y(3.)46 b(A)33 b(new)f(class)h(of)f(2-dimensional)h(F)-8
-b(rame)34 b(called)f(Sp)s(ecFluxF)-8 b(rame)33 b(has)f(b)s(een)g(added)
-f(whic)m(h)h(can)h(b)s(e)227 3307 y(used)24 b(to)h(describ)s(e)f(a)h
-(2-d)g(frame)f(spanned)f(b)m(y)i(a)g(sp)s(ectral)g(p)s(osition)f(axis)h
-(and)f(and)g(an)g(observ)m(ed)h(v)-5 b(alue)227 3420
-y(axis.)111 3645 y(4.)46 b(A)c(new)f(class)h(of)g(Mapping)f(called)i
-(RateMap)f(has)g(b)s(een)e(added.)73 b(A)42 b(RateMap)h(encapsulates)f
-(a)227 3758 y(previously)32 b(created)h(Mapping.)44 b(The)31
-b(inputs)g(of)h(the)g(RateMap)h(corresp)s(ond)d(to)j(the)f(inputs)e(of)
-i(the)227 3871 y(encapsulated)i(Mapping.)48 b(All)33
-b(RateMaps)i(ha)m(v)m(e)f(just)e(a)h(single)h(output)e(whic)m(h)h
-(corresp)s(ond)f(to)h(the)227 3984 y(rate)24 b(of)g(c)m(hange)g(of)f(a)
-h(sp)s(eci\014ed)f(output)g(of)g(the)g(encapsulated)h(Mapping)f(with)g
-(resp)s(ect)h(to)g(a)f(sp)s(eci\014ed)227 4097 y(input.)111
-4322 y(5.)46 b(The)d(SkyF)-8 b(rame)45 b(class)f(no)m(w)g(supp)s(orts)e
-(a)i(v)-5 b(alue)44 b(of)g(\\J2000")i(for)d(System.)81
-b(This)43 b(system)h(is)g(an)227 4435 y(equatorial)29
-b(system)d(based)h(on)f(the)h(mean)g(dynamical)g(equator)g(and)f
-(equino)m(x)h(at)h(J2000,)h(and)d(di\013ers)227 4548
-y(sligh)m(tly)32 b(from)e(an)g(FK5\(J2000\))j(system.)111
-4773 y(6.)46 b(A)31 b(new)e(class)j(called)f(KeyMap)g(has)f(b)s(een)f
-(added.)40 b(A)31 b(KeyMap)f(can)h(b)s(e)f(used)f(to)i(store)g(a)g
-(collection)227 4886 y(of)d(v)m(ector)i(or)d(scalar)i(v)-5
-b(alues)28 b(or)g(Ob)5 b(jects,)29 b(indexed)e(b)m(y)h(a)g(c)m
-(haracter)h(string)f(rather)g(than)f(an)h(in)m(teger.)111
-5111 y(7.)46 b(The)33 b(parameter)h(list)g(for)f(the)g(AST)p
-Fy(_)p FG(RA)-8 b(TE)32 b(metho)s(d)h(of)g(the)h(Mapping)f(class)h(has)
-f(b)s(een)f(mo)s(di\014ed.)227 5224 y(It)j(no)f(longer)g(returns)f(a)i
-(second)f(deriv)-5 b(ativ)m(e)36 b(estimate.)53 b(Existing)35
-b(co)s(de)f(whic)m(h)g(uses)g(this)g(metho)s(d)227 5337
-y(will)d(need)f(to)h(b)s(e)f(c)m(hanged.)111 5562 y(8.)46
-b(Metho)s(ds)33 b(\(AST)p Fy(_)p FG(SETFITS<X>\))e(ha)m(v)m(e)i(b)s
-(een)f(added)g(to)h(the)g(FitsChan)f(class)i(to)f(allo)m(w)h(v)-5
-b(alues)33 b(for)227 5675 y(named)d(k)m(eyw)m(ords)h(to)g(b)s(e)f(c)m
-(hanged)h(or)f(added.)p eop end
-%%Page: 552 562
-TeXDict begin 552 561 bop 0 52 a FG(552)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.22)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.6)0 574 y FG(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 687 y(v)m(ersions)31 b(V3.5)g(and)f(V3.6:)111
-953 y(1.)46 b(If)29 b(the)h(F)-8 b(ormat)30 b(attribute)h(asso)s
-(ciated)f(with)f(an)h(axis)g(of)f(a)h(SkyF)-8 b(rame)30
-b(starts)f(with)h(a)f(p)s(ercen)m(t)h(c)m(har-)227 1066
-y(acter)41 b(\(\\)p Fy(\045)p FG("\),)j(then)39 b(axis)i(v)-5
-b(alues)40 b(are)g(no)m(w)g(formatted)g(and)f(unformatted)h(as)g(a)g
-(decimal)h(radians)227 1179 y(v)-5 b(alue,)31 b(using)f(the)h(F)-8
-b(ormat)32 b(syn)m(tax)e(of)h(a)g(simple)f(F)-8 b(rame.)111
-1369 y(2.)46 b(The)34 b(Plot)i(class)f(has)f(a)h(new)f(attribute)h
-(called)h(Clip)e(whic)m(h)g(con)m(trols)i(the)f(clipping)g(p)s
-(erformed)e(b)m(y)227 1482 y(AST)d(at)h(the)g(plot)f(b)s(oundary)-8
-b(.)111 1672 y(3.)46 b(The)31 b(k)m(eys)g(used)g(to)g(lab)s(el)h(comp)s
-(onen)m(ts)f(of)g(the)g(P)m(olyMap)h(structure)f(when)f(a)h(P)m(olyMap)
-h(is)f(written)227 1785 y(out)24 b(through)g(a)g(Channel)f(ha)m(v)m(e)i
-(b)s(een)e(c)m(hanged.)40 b(The)23 b(new)g(k)m(eys)i(are)f(shorter)g
-(than)f(the)h(old)h(k)m(eys)f(and)227 1898 y(so)j(can)f(written)h
-(succesfully)f(to)h(a)g(FitsChan.)39 b(The)26 b(new)g(P)m(olyMap)h
-(class)g(alw)m(a)m(ys)h(writes)f(new)e(st)m(yles)227
-2011 y(k)m(eys)30 b(but)f(can)g(read)g(either)h(old)f(or)g(new)g(st)m
-(yle)h(k)m(eys.)41 b(Consequen)m(tly)-8 b(,)31 b(P)m(olyMap)f(dumps)d
-(written)j(b)m(y)227 2124 y(this)h(v)m(ersion)f(of)h(AST)f(cannot)h(b)s
-(e)e(read)i(b)m(y)f(older)g(v)m(ersions)h(of)g(AST.)111
-2314 y(4.)46 b(A)36 b(mimimal)f(cut)h(do)m(wn)f(subset)f(of)i(the)f(C)g
-(v)m(ersion)h(of)g(SLALIB)e(is)i(no)m(w)f(included)g(with)g(the)g(AST)
-227 2427 y(distribution)c(and)g(built)h(as)g(part)f(of)h(building)f
-(AST.)g(This)g(means)h(that)g(it)g(is)g(no)g(longer)g(necessary)227
-2540 y(to)i(ha)m(v)m(e)h(SLALIB)d(installed)i(separately)h(at)f(y)m
-(our)f(site.)50 b(The)33 b(SLALIB)f(co)s(de)i(included)e(with)h(AST)227
-2652 y(is)e(distrubuted)d(under)h(the)h(GPL.)h(The)e(default)i(b)s(eha)
-m(viour)f(of)g(the)g(ast)p Fy(_)p FG(link)h(script)f(is)g(no)m(w)h(to)g
-(link)227 2765 y(with)41 b(this)g(in)m(ternal)h(slalib)f(subset.)73
-b(Ho)m(w)m(ev)m(er,)46 b(the)41 b(\\-csla")i(option)f(can)f(still)h(b)s
-(e)f(used)f(to)i(force)227 2878 y(linking)29 b(with)f(an)g(external)h
-(full)f(C)g(SLALIB)g(library)-8 b(.)40 b(A)29 b(new)f(option)g
-(\\-fsla")i(has)e(b)s(een)g(in)m(tro)s(duced)227 2991
-y(whic)m(h)i(forces)h(linking)g(with)f(the)g(external)i(full)e(F)-8
-b(ortran)31 b(SLALIB)f(library)-8 b(.)0 3288 y Fw(G.23)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.7)0 3512 y
-FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 3625 y(v)m(ersions)31 b(V3.6)g(and)f(V3.7:)111
-3890 y(1.)46 b(Supp)s(ort)37 b(for)i(time)g(co)s(ordinate)h(systems)f
-(has)f(b)s(een)h(in)m(tro)s(duced)f(through)m(t)h(the)g(addition)g(of)g
-(t)m(w)m(o)227 4003 y(new)31 b(classes,)h(TimeF)-8 b(rame)33
-b(and)d(TimeMap.)43 b(The)31 b(TimeF)-8 b(rame)32 b(is)f(a)h
-(1-dimensional)g(F)-8 b(rame)32 b(whic)m(h)227 4116 y(can)i(b)s(e)f
-(used)g(to)h(describ)s(e)f(momen)m(ts)h(in)f(time)i(\(either)f
-(absolute)g(or)g(relativ)m(e\))i(in)d(v)-5 b(arious)33
-b(systems)227 4229 y(\(MJD,)h(Julian)e(Ep)s(o)s(c)m(h,)g
-Fx(etc.)p FG(\))47 b(and)31 b(referred)h(to)h(v)-5 b(arious)32
-b(time)h(scales)h(\(T)-8 b(AI,)33 b(UTC,)f(UT1,)h(GMST,)227
-4342 y Fx(etc)5 b FG(\).)41 b(The)29 b(TimeMap)h(is)g(a)h(Mapping)e
-(whic)m(h)h(can)g(transform)f(time)i(v)-5 b(alues)30
-b(b)s(et)m(w)m(een)g(these)g(v)-5 b(arious)227 4455 y(systems)23
-b(and)f(time)h(scales.)40 b(Note,)25 b(FitsChans)e(whic)m(h)f(ha)m(v)m
-(e)i(a)f(foreign)g(enco)s(ding)g(\()p Fx(i.e.)38 b FG(an)m(y)23
-b(enco)s(ding)227 4568 y(other)31 b(than)f(NA)-8 b(TIVE\))31
-b(are)g(not)f(able)h(to)g(read)g(or)f(write)h(these)f(new)g(classes.)0
-4865 y Fw(G.24)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.0)0
-5088 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 5201 y(v)m(ersions)31
-b(V3.7)g(and)f(V4.0:)111 5467 y(1.)46 b(Exp)s(erimen)m(tal)41
-b(supp)s(ort)d(for)i(reading)g(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g
-(\(STC-X\))f(descriptions)227 5580 y(using)28 b(the)f(XmlChan)g(class)i
-(has)e(b)s(een)h(added.)39 b(Supp)s(ort)25 b(is)j(included)f(for)h(a)g
-(subset)f(of)h(V1.20)h(of)f(the)227 5693 y(draft)i(STC)f(sp)s
-(eci\014cation.)p eop end
-%%Page: 553 563
-TeXDict begin 553 562 bop 0 52 a Fz(G.25)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.1)2249 b FG(553)111 351
-y(2.)46 b(A)39 b(new)g(set)h(of)f(metho)s(ds)f(\(AST)p
-Fy(_)p FG(REBIN<X>/astRebin<X>\))j(has)e(b)s(een)f(added)g(to)i(the)g
-(Mapping)227 464 y(class.)e(These)20 b(are)h(\015ux-conserving)f
-(alternativ)m(es)j(to)e(the)f(existing)h(AST)p Fy(_)p
-FG(RESAMPLE<X>/astResample<X>)227 577 y(metho)s(ds.)0
-870 y Fw(G.25)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.1)0
-1091 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1203 y(v)m(ersions)31
-b(V4.0)g(and)f(V4.1:)111 1464 y(1.)46 b(A)23 b(new)g(con)m(trol)h
-(\015ag)g(has)f(b)s(een)f(added)g(to)i(the)f(AST)p Fy(_)p
-FG(RESAMPLE<X>/astResample<X>)h(functions)227 1577 y(whic)m(h)30
-b(pro)s(duces)f(appro)m(ximate)j(\015ux)d(conserv)-5
-b(ation.)111 1764 y(2.)46 b(New)22 b(constan)m(ts)g(AST)p
-Fy(__)p FG(SOMB)f(and)f(AST)p Fy(__)p FG(SOMBCOS)f(ha)m(v)m(e)k(b)s
-(een)e(added)f(to)j(AST)p Fy(_)p FG(P)-8 b(AR.)21 b(These)227
-1877 y(sp)s(ecify)j(k)m(ernels)h(for)g(AST)p Fy(_)p FG(RESAMPLE)e(and)h
-(AST)p Fy(_)p FG(REBIN)f(based)h(on)h(the)g(\\Som)m(brero")g(function)
-227 1990 y(\()31 b(2)21 b Fu(\003)f Fp(J)9 b FG(1\()p
-Fp(x)p FG(\))p Fp(=x)32 b FG(where)e Fp(J)9 b FG(1\()p
-Fp(x)p FG(\))32 b(is)e(the)h(\014rst)e(order)h(Bessel)i(function)e(of)g
-(the)h(\014rst)e(kind\).)111 2177 y(3.)46 b(The)f(SkyF)-8
-b(rame)45 b(class)g(no)m(w)g(supp)s(orts)e(a)i(System)g(v)-5
-b(alue)45 b(of)g(AZEL)f(corresp)s(onding)g(to)h(horizon)227
-2290 y(\(azim)m(uth/elev)-5 b(ation\))34 b(co)s(ordinates.)111
-2477 y(4.)46 b(The)31 b(FitsChan)h(class)g(allo)m(ws)h(the)e
-(non-standard)g(strings)g(\\AZ{")h(and)f(\\EL{")i(to)f(b)s(e)f(used)f
-(as)i(axis)227 2590 y(t)m(yp)s(es)f(in)f(FITS-W)m(CS)g(CTYPE)f(k)m(eyw)
-m(ord)i(v)-5 b(alues.)111 2777 y(5.)46 b(The)28 b(F)-8
-b(rame)28 b(class)h(no)m(w)f(has)f(attributes)h(ObsLon)f(and)g(ObsLat)h
-(to)g(sp)s(ecify)f(the)h(geo)s(detic)i(longitude)227
-2890 y(and)g(latitude)h(of)g(the)g(observ)m(er.)111 3077
-y(6.)46 b(The)41 b(Clo)s(c)m(kLon)g(and)g(Clo)s(c)m(kLat)h(attributes)f
-(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed)i(from)e(the)h(TimeF)-8
-b(rame)42 b(class.)227 3190 y(Lik)m(ewise,)49 b(the)44
-b(GeoLon)h(and)e(GeoLat)j(attributes)e(ha)m(v)m(e)h(b)s(een)f(remo)m(v)
-m(ed)h(from)e(the)h(Sp)s(ecF)-8 b(rame)227 3303 y(class.)45
-b(Both)32 b(classes)g(no)m(w)f(use)g(the)h(ObsLon)e(and)h(ObsLat)g
-(attributes)h(of)f(the)h(paren)m(t)f(F)-8 b(rame)33 b(class)227
-3416 y(instead.)81 b(Ho)m(w)m(ev)m(er,)50 b(the)43 b(old)h(attribute)h
-(names)e(can)h(b)s(e)f(used)g(as)h(synon)m(yms)f(for)h(ObsLat)f(and)227
-3529 y(ObsLon.)e(Also,)32 b(dumps)d(created)j(using)f(the)g(old)g(sc)m
-(heme)h(can)f(b)s(e)f(read)h(succesfully)g(b)m(y)g(AST)f(V4.1)227
-3642 y(and)g(con)m(v)m(erted)i(to)f(the)g(new)e(form.)111
-3829 y(7.)46 b(A)d(new)e(routine)h(AST)p Fy(_)p FG(MAPSPLIT)f(has)g(b)s
-(een)h(added)f(to)i(the)g(Mapping)f(class.)77 b(This)41
-b(splits)h(a)227 3942 y(Mapping)30 b(in)m(to)h(t)m(w)m(o)g(comp)s(onen)
-m(t)g(Mappings)e(whic)m(h,)h(when)f(com)m(bined)i(in)e(parallel,)j(are)
-e(equiv)-5 b(alen)m(t)227 4055 y(to)31 b(the)g(original)g(Mapping.)111
-4242 y(8.)46 b(The)24 b(default)g(v)-5 b(alue)25 b(for)f(the)g
-(SkyRefIs)g(attribute)h(has)f(b)s(een)f(c)m(hanged)i(from)f(\\Origin")h
-(to)g(\\Ignored".)227 4355 y(This)41 b(means)h(that)h(if)e(y)m(ou)i(w)m
-(an)m(t)f(to)h(use)f(a)g(SkyF)-8 b(rame)42 b(to)h(represen)m(t)f
-(o\013sets)g(from)g(some)g(origin)227 4467 y(p)s(osition,)31
-b(y)m(ou)f(m)m(ust)g(no)m(w)g(set)h(the)f(SkyRefIs)f(attribute)i
-(explicitly)h(to)f(either)f(\\P)m(ole")j(or)d(\\Origin",)227
-4580 y(in)g(addition)h(to)g(assigning)g(the)f(required)g(origin)h(p)s
-(osition)f(to)h(the)g(SkyRef)f(attribute.)0 4873 y Fw(G.26)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.2)0 5094 y
-FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 5207 y(v)m(ersions)31 b(V4.1)g(and)f(V4.2:)111
-5467 y(1.)46 b(The)41 b(SideBand)f(attribute)h(of)g(the)g(DSBSp)s(ecF)
--8 b(rame)42 b(class)f(can)g(no)m(w)g(tak)m(e)h(the)f(option)h(\\LO")f
-(in)227 5580 y(addition)c(to)g(\\USB")g(and)e(\\LSB".)i(The)f(new)g
-(option)h(causes)f(the)h(DSBSp)s(ecF)-8 b(rame)36 b(to)h(represen)m(t)
-227 5693 y(the)31 b(o\013set)g(from)f(the)h(lo)s(cal)g(oscillator)i
-(frequency)-8 b(,)31 b(rather)f(than)g(either)h(of)f(the)h(t)m(w)m(o)h
-(sidebands.)p eop end
-%%Page: 554 564
-TeXDict begin 554 563 bop 0 52 a FG(554)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(2.)46
-b(The)37 b(FitsChan)g(class)h(has)g(b)s(een)e(c)m(hanged)i(so)g(that)g
-(it)g(writes)f(out)h(a)g(VELOSYS)e(k)m(eyw)m(ord)h(when)227
-464 y(creating)k(a)e(FITS-W)m(CS)g(enco)s(ding)g(\(VELOSYS)f(indicates)
-h(the)h(top)s(o)s(cen)m(tric)g(apparen)m(t)f(v)m(elo)s(cit)m(y)227
-577 y(of)f(the)g(standard)f(of)h(rest\).)64 b(FitsChan)38
-b(also)g(strips)g(out)g(VELOSYS)e(k)m(eyw)m(ords)i(when)f(reading)h(a)
-227 690 y(F)-8 b(rameSet)32 b(from)e(a)g(FITS-W)m(CS)g(enco)s(ding.)111
-876 y(3.)46 b(The)31 b(FitsChan)h(class)g(has)g(a)f(new)h(metho)s(d)f
-(called)h(AST)p Fy(_)p FG(RET)-8 b(AINFITS)30 b(that)j(indicates)f
-(that)g(the)227 989 y(curren)m(t)j(card)h(in)f(the)g(FitsChan)g(should)
-g(not)g(b)s(e)g(stripp)s(ed)f(out)h(of)h(the)f(FitsChan)h(when)e(an)h
-(AST)227 1101 y(Ob)5 b(ject)26 b(is)g(read)g(from)g(the)g(FitsChan.)39
-b(Unless)26 b(this)g(metho)s(d)f(is)h(used,)g(all)h(cards)f(that)g(w)m
-(ere)h(in)m(v)m(olv)m(ed)227 1214 y(in)c(the)g(creation)i(of)e(the)h
-(AST)e(Ob)5 b(ject)23 b(will)h(b)s(e)e(stripp)s(ed)g(from)h(the)g
-(FitsChan)g(afte)h(a)g(read)f(op)s(eration.)111 1400
-y(4.)46 b(A)30 b(problem)e(with)h(unaligned)g(memory)g(access)i(that)f
-(could)f(cause)h(bus)e(errors)h(on)g(Solaris)g(has)g(b)s(een)227
-1513 y(\014xed.)111 1698 y(5.)46 b(A)32 b(new)f(read-only)g(attribute)i
-(called)f(Ob)5 b(jSize)31 b(has)g(b)s(een)g(added)g(to)h(the)f(base)h
-(Ob)5 b(ject)31 b(Class.)44 b(This)227 1811 y(giv)m(es)31
-b(the)e(n)m(um)m(b)s(er)f(of)h(b)m(ytes)g(of)h(memory)f(o)s(ccupied)f
-(b)m(y)h(the)h(Ob)5 b(ject.)40 b(Note,)31 b(this)e(is)g(the)g(size)h
-(of)f(the)227 1924 y(in)m(ternal)e(in-memory)g(represen)m(tation)g(of)g
-(the)f(Ob)5 b(ject,)28 b(not)f(the)f(size)i(of)e(the)h(textual)g
-(represen)m(tation)227 2037 y(pro)s(duced)i(b)m(y)h(writing)h(the)f(Ob)
-5 b(ject)31 b(out)f(through)g(a)h(Channel.)111 2223 y(6.)46
-b(A)28 b(new)e(function)h(AST)p Fy(_)p FG(TUNE)f(has)h(b)s(een)f(added)
-h(whic)m(h)g(can)g(b)s(e)g(used)f(to)i(get)g(and)f(set)h(global)g(AST)
-227 2336 y(tuning)i(parameters.)41 b(A)m(t)31 b(the)g(momen)m(t)g
-(there)f(are)h(only)f(t)m(w)m(o)i(suc)m(h)e(parameter,)h(b)s(oth)f(of)g
-(whic)m(h)g(are)227 2449 y(concerned)h(with)f(memory)g(managemen)m(t)i
-(within)e(AST.)111 2634 y(7.)46 b(A)e(new)f(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(TRANGRID)e(has)g(b)s(een)g(added)g(to)i(the)f(Mapping)g
-(class.)81 b(This)227 2747 y(metho)s(d)40 b(creates)i(a)f(regular)g
-(grid)f(of)h(p)s(oin)m(ts)f(co)m(v)m(ering)j(a)e(rectangular)g(region)h
-(within)e(the)g(input)227 2860 y(space)c(of)f(a)h(Mapping,)h(and)d
-(then)h(transforms)f(this)i(set)f(of)h(p)s(oin)m(ts)f(in)m(to)h(the)f
-(output)g(space)h(of)f(the)227 2973 y(Mapping,)25 b(using)e(a)h
-(piecewise-con)m(tin)m(uous)h(linear)f(appro)m(ximation)g(to)g(the)g
-(Mapping)f(if)g(appropriate)227 3086 y(in)30 b(order)g(to)h(ac)m(hiv)m
-(e)i(higher)d(sp)s(eed.)111 3272 y(8.)46 b(A)34 b(new)f(sub)s(class)g
-(of)h(Mapping)f(has)h(b)s(een)f(added)g(called)i(Switc)m(hMap.)51
-b(A)33 b(Switc)m(hMap)i(represen)m(ts)227 3384 y(sev)m(eral)g
-(alternate)g(Mappings,)g(eac)m(h)g(of)e(whic)m(h)h(is)f(used)g(to)h
-(transforms)f(input)g(p)s(ositions)g(within)g(a)227 3497
-y(di\013eren)m(t)e(region)g(of)g(the)f(input)g(co)s(ordinate)h(space.)
-111 3683 y(9.)46 b(A)28 b(new)e(sub)s(class)h(of)g(Mapping)g(has)g(b)s
-(een)f(added)h(called)h(SelectorMap.)41 b(A)28 b(SelectorMap)g(tests)g
-(eac)m(h)227 3796 y(input)33 b(p)s(osition)h(to)h(see)f(if)g(it)g
-(falls)h(within)e(one)h(of)g(sev)m(eral)h(Regions.)52
-b(If)34 b(it)g(do)s(es,)h(the)f(index)f(of)h(the)227
-3909 y(Region)e(con)m(taining)f(the)g(input)e(p)s(osition)i(is)f
-(returned)g(as)g(the)h(Mapping)f(output.)66 4094 y(10.)46
-b(The)36 b(b)s(eha)m(viour)f(of)h(the)g(AST)p Fy(_)p
-FG(CONVER)-8 b(T)35 b(metho)s(d)g(when)g(trying)h(to)g(align)h(a)f
-(CmpF)-8 b(rame)36 b(with)227 4207 y(another)g(F)-8 b(rame)36
-b(has)f(b)s(een)g(mo)s(di\014ed.)54 b(If)35 b(no)g(con)m(v)m(ersion)i
-(b)s(et)m(w)m(een)f(p)s(ositions)f(in)g(the)h(F)-8 b(rame)36
-b(and)227 4320 y(CmpF)-8 b(rame)27 b(can)g(b)s(e)f(found,)g(an)g
-(attempt)i(is)f(no)m(w)f(made)h(to)g(\014nd)f(a)h(con)m(v)m(ersion)g(b)
-s(et)m(w)m(een)h(the)f(F)-8 b(rame)227 4433 y(and)23
-b(one)g(of)g(t)m(w)m(o)i(comp)s(onen)m(t)e(F)-8 b(rames)24
-b(con)m(tained)h(within)d(the)h(CmpF)-8 b(rame.)39 b(Th)m(us)22
-b(is)h(should)f(no)m(w)h(b)s(e)227 4546 y(p)s(ossible)30
-b(to)g(align)h(a)f(SkyF)-8 b(rame)30 b(with)f(a)i(CmpF)-8
-b(rame)29 b(con)m(taining)j(a)e(SkyF)-8 b(rame)30 b(and)f(a)h(Sp)s(ecF)
--8 b(rame)227 4659 y(\(for)31 b(instance\).)41 b(The)30
-b(returned)f(Mapping)h(pro)s(duces)f(bad)h(v)-5 b(alues)30
-b(for)g(the)h(extra)g(axes)f(\(i.e.)42 b(for)30 b(the)227
-4772 y(Sp)s(ecF)-8 b(rame)31 b(axis)g(in)f(the)g(ab)s(o)m(v)m(e)i
-(example\).)66 4957 y(11.)46 b(The)25 b(\\ast)p Fy(_)p
-FG(link)p Fy(_)p FG(adam")i(and)e(\\ast)p Fy(_)p FG(link")h(scripts)f
-(no)m(w)h(ignore)g(the)f Fy(-fsla)f FG(and)h Fy(-csla)f
-FG(options,)j(and)227 5070 y(alw)m(a)m(ys)32 b(link)e(against)i(the)f
-(minimal)f(cut-do)m(wn)h(v)m(ersion)g(of)f(SLALIB)g(distributed)f(as)i
-(part)f(of)h(AST.)0 5361 y Fw(G.27)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V4.3)0 5580 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 5693 y(v)m(ersions)31
-b(V4.2)g(and)f(V4.3:)p eop end
-%%Page: 555 565
-TeXDict begin 555 564 bop 0 52 a Fz(G.28)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.4)2249 b FG(555)111 351
-y(1.)46 b(The)35 b(AST)p Fy(_)p FG(GETFITSS)d(function)i(no)m(w)h
-(strips)f(trailing)i(white)f(space)g(from)g(the)g(returned)e(string,)
-227 464 y(if)e(the)f(original)i(string)e(con)m(tains)i(8)e(or)h(few)m
-(er)f(c)m(haracters)111 637 y(2.)46 b(The)d(Sp)s(ecF)-8
-b(rame)44 b(class)g(has)f(a)h(new)f(attribute)h(called)g(SourceSys)f
-(that)h(sp)s(eci\014ed)f(whether)f(the)227 750 y(SourceV)-8
-b(el)38 b(attribute)g(\(whic)m(h)f(sp)s(eci\014es)f(the)h(rest)h(frame)
-e(of)h(the)h(source\))f(should)f(b)s(e)g(accessed)i(as)227
-863 y(an)d(apparen)m(t)h(radial)f(v)m(elo)s(cit)m(y)j(or)d(a)h
-(redshift.)54 b(Note,)38 b(an)m(y)e(existing)g(soft)m(w)m(are)g(that)g
-(assumes)f(that)227 976 y(SourceV)-8 b(el)34 b(alw)m(a)m(ys)g(represen)
-m(ts)e(a)h(v)m(elo)s(cit)m(y)i(in)d(km/s)h(should)e(b)s(e)h(c)m(hanged)
-i(to)f(allo)m(w)h(for)e(the)h(p)s(ossi-)227 1089 y(bilit)m(y)f(of)e
-(SourceV)-8 b(el)32 b(represen)m(ting)e(a)h(redshift)f(v)-5
-b(alue.)0 1361 y Fw(G.28)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V4.4)0 1568 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1680 y(v)m(ersions)31
-b(V4.3)g(and)f(V4.4:)111 1885 y(1.)46 b(The)28 b(AST)p
-Fy(_)p FG(FINDFRAME)g(function)f(can)i(no)m(w)e(b)s(e)h(used)f(to)h
-(searc)m(h)h(a)f(CmpF)-8 b(rame)27 b(for)h(an)g(instance)227
-1998 y(of)i(a)h(more)f(sp)s(ecialised)h(class)g(of)f(F)-8
-b(rame)31 b(\(SkyF)-8 b(rame,)31 b(TimeF)-8 b(rame,)31
-b(Sp)s(ecF)-8 b(rame,)31 b(DSBSp)s(ecF)-8 b(rame)227
-2110 y(or)36 b(FluxF)-8 b(rame\).)58 b(That)36 b(is,)h(if)f(an)f
-(instance)i(of)f(one)g(of)g(these)g(classes)h(is)e(used)g(as)h(the)g
-(\\template")227 2223 y(when)d(calling)h(AST)p Fy(_)p
-FG(FINDFRAME,)g(and)f(the)h(\\target")h(b)s(eing)e(searc)m(hed)h(is)g
-(a)f(CmpF)-8 b(rame)33 b(\(or)h(a)227 2336 y(F)-8 b(rameSet)27
-b(in)e(whic)m(h)f(the)i(curren)m(t)f(F)-8 b(rame)26 b(is)f(a)h(CmpF)-8
-b(rame\),)26 b(then)f(the)h(comp)s(onen)m(t)f(F)-8 b(rames)26
-b(within)227 2449 y(the)37 b(CmpF)-8 b(rame)36 b(will)g(b)s(e)g(searc)m
-(hed)h(for)f(an)g(instance)h(of)f(the)h(supplied)e(template)i(F)-8
-b(rame,)39 b(and,)e(if)227 2562 y(found,)44 b(a)f(suitable)g(Mapping)f
-(\(whic)m(h)g(will)h(include)f(a)h(P)m(ermMap)f(to)h(select)h(the)e
-(required)g(axes)227 2675 y(from)29 b(the)g(CmpF)-8 b(rame\))28
-b(will)i(b)s(e)e(returned)f(b)m(y)i(AST)p Fy(_)p FG(FINDFRAME.)g(Note,)
-i(for)e(this)f(to)i(w)m(ork,)f(the)227 2788 y(MaxAxes)h(and)e(MinAxes)h
-(attributes)g(of)f(the)h(template)h(F)-8 b(rame)29 b(m)m(ust)g(b)s(e)e
-(set)i(so)g(that)g(they)g(co)m(v)m(er)h(a)227 2901 y(range)h(that)g
-(includes)f(the)h(n)m(um)m(b)s(er)e(of)h(axes)h(in)f(the)h(target)h
-(CmpF)-8 b(rame.)111 3074 y(2.)46 b(The)23 b(SkyF)-8
-b(rame,)26 b(Sp)s(ecF)-8 b(rame,)26 b(DSBSp)s(ecF)-8
-b(rame,)25 b(TimeF)-8 b(rame)25 b(and)e(FluxF)-8 b(rame)25
-b(classes)f(no)m(w)g(allo)m(w)227 3187 y(the)34 b(MaxAxes)h(and)e
-(MinAxes)g(attributes)i(to)f(b)s(e)f(set)h(freely)g(to)g(an)m(y)g(v)-5
-b(alue.)50 b(In)33 b(previous)g(v)m(ersions)227 3300
-y(of)f(AST,)g(an)m(y)g(attempt)h(to)g(c)m(hange)g(the)f(v)-5
-b(alue)32 b(of)g(MinAxes)h(or)e(MaxAxes)i(w)m(as)g(ignored,)f
-(resulting)227 3413 y(in)e(them)h(alw)m(a)m(ys)h(taking)f(the)f
-(default)h(v)-5 b(alues.)111 3586 y(3.)46 b(The)38 b(DSBSp)s(ecF)-8
-b(rame)40 b(class)f(has)f(a)h(new)g(attribute)g(called)h(AlignSB)f
-(that)g(sp)s(eci\014es)f(whether)g(or)227 3699 y(not)32
-b(to)g(tak)m(e)i(accoun)m(t)f(of)f(the)f(SideBand)g(attributes)i(when)d
-(aligning)j(t)m(w)m(o)g(DSBSp)s(ecF)-8 b(rames)32 b(using)227
-3811 y(AST)p Fy(_)p FG(CONVER)-8 b(T.)111 3985 y(4.)46
-b(The)28 b(F)-8 b(rame)30 b(class)g(has)e(a)h(new)f(attribute)i(called)
-g(Dut1)f(that)h(can)f(b)s(e)f(used)g(to)h(store)g(a)h(v)-5
-b(alue)29 b(for)f(the)227 4097 y(di\013erence)j(b)s(et)m(w)m(een)g(the)
-g(UT1)f(and)g(UTC)g(timescales)i(at)f(the)g(ep)s(o)s(c)m(h)f(referred)g
-(to)h(b)m(y)f(the)g(F)-8 b(rame.)111 4271 y(5.)46 b(The)32
-b(n)m(um)m(b)s(er)f(of)h(digits)h(used)e(to)i(format)f(the)h(F)-8
-b(rame)33 b(attributes)f(ObsLat)g(and)f(ObsLon)g(has)h(b)s(een)227
-4383 y(increased.)111 4557 y(6.)46 b(The)24 b(use)h(of)g(the)f(SkyF)-8
-b(rame)25 b(attribute)h(AlignO\013set)f(has)g(b)s(een)f(c)m(hanged.)39
-b(This)24 b(attribute)h(is)g(used)f(to)227 4669 y(con)m(trol)36
-b(ho)m(w)e(t)m(w)m(o)h(SkyF)-8 b(rames)35 b(are)f(aligned)h(b)m(y)f
-(AST)p Fy(_)p FG(CONVER)-8 b(T.)33 b(If)h(the)g(template)h(and)f
-(target)227 4782 y(SkyF)-8 b(rames)41 b(b)s(oth)e(ha)m(v)m(e)j(a)f
-(non-zero)f(v)-5 b(alue)41 b(for)f(AlignO\013set,)k(then)c(alignmen)m
-(t)i(o)s(ccurs)e(b)s(et)m(w)m(een)227 4895 y(the)f(o\013set)i(co)s
-(ordinate)e(systems)g(\(that)h(is,)i(a)d(UnitMap)h(will)f(alw)m(a)m(ys)
-i(b)s(e)d(used)g(to)i(align)g(the)f(t)m(w)m(o)227 5008
-y(SkyF)-8 b(rames\).)111 5181 y(7.)46 b(The)29 b(Plot)h(class)g(has)f
-(a)h(new)f(attribute)h(called)g(F)-8 b(orceExterior)32
-b(that)e(can)f(b)s(e)g(used)g(to)h(force)f(exterior)227
-5294 y(\(rather)45 b(than)f(in)m(terior\))i(tic)m(k)g(marks)e(to)i(b)s
-(e)e(pro)s(duced.)81 b(By)45 b(default,)k(exterior)c(tic)m(ks)h(are)f
-(only)227 5407 y(pro)s(duced)29 b(if)h(this)h(w)m(ould)f(result)g(in)g
-(more)h(than)f(3)g(tic)m(k)i(marks)e(b)s(eing)g(dra)m(wn.)111
-5580 y(8.)46 b(The)40 b(TimeF)-8 b(rame)40 b(class)h(no)m(w)f(supp)s
-(orts)d(con)m(v)m(ersion)42 b(b)s(et)m(w)m(een)e(angle)h(based)e
-(timescales)j(suc)m(h)d(as)227 5693 y(UT1)31 b(and)f(atomic)i(based)e
-(timescales)i(suc)m(h)e(as)h(UTC.)p eop end
-%%Page: 556 566
-TeXDict begin 556 565 bop 0 52 a FG(556)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.29)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.5)0 570 y FG(The)31
-b(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m
-(hanges)g(that)g(o)s(ccurred)e(in)h(the)h(AST)e(library)h(b)s(et)m(w)m
-(een)0 683 y(v)m(ersions)g(V4.4)g(and)f(V4.5:)111 933
-y(1.)46 b(All)28 b(FITS-CLASS)d(headers)i(are)g(no)m(w)g(created)h
-(with)e(a)i(frequency)e(axis.)40 b(If)27 b(the)g(F)-8
-b(rameSet)28 b(supplied)227 1046 y(to)39 b(AST)p Fy(_)p
-FG(WRITE)d(con)m(tains)k(a)e(v)m(elo)s(cit)m(y)i(axis)f(\(or)f(an)m(y)g
-(other)g(form)g(of)g(sp)s(ectral)g(axis\))g(it)h(will)f(b)s(e)227
-1159 y(con)m(v)m(erted)h(to)f(an)f(equiv)-5 b(alen)m(t)39
-b(frequency)e(axis)h(b)s(efore)e(b)s(eing)h(used)g(to)h(create)h(the)e
-(FITS-CLASS)227 1272 y(header.)111 1457 y(2.)46 b(The)32
-b(v)-5 b(alue)33 b(stored)f(in)g(the)h(FITS-CLASS)d(k)m(eyw)m(ord)j
-(\\VELO-LSR")f(has)g(b)s(een)g(c)m(hanged)g(from)g(the)227
-1570 y(v)m(elo)s(cit)m(y)h(of)e(the)f(source)h(to)g(the)f(v)m(elo)s
-(cit)m(y)j(of)e(the)f(reference)h(c)m(hannel.)111 1755
-y(3.)46 b(Addition)37 b(of)g(a)g(new)f(metho)s(d)g(call)i(AST)p
-Fy(_)p FG(PUR)m(GEW)m(CS)e(to)i(the)e(FitsChan)h(class.)60
-b(This)36 b(metho)s(d)227 1867 y(remo)m(v)m(es)c(all)f(W)m(CS-related)h
-(header)e(cards)g(from)g(a)h(FitsChan.)111 2052 y(4.)46
-b(The)37 b(Plot)h(class)h(has)e(a)h(new)e(attribute)j(called)f(GrfCon)m
-(text)g(that)g(can)g(b)s(e)f(used)f(to)j(comminicate)227
-2165 y(con)m(text)27 b(information)e(b)s(et)m(w)m(een)h(an)f
-(application)h(and)f(an)m(y)g(graphics)g(functions)g(registered)h(with)
-e(the)227 2278 y(Plot)32 b(class)f(via)g(the)f(AST)p
-Fy(_)p FG(GRFSET)f(routine.)111 2463 y(5.)46 b(F)-8 b(unctions)33
-b(registered)g(with)f(the)g(Plot)i(class)e(using)g(AST)p
-Fy(_)p FG(GRFSET)f(no)m(w)h(tak)m(e)i(a)f(new)f(additional)227
-2576 y(in)m(teger)h(parameter,)e(\\grfcon".)44 b(The)31
-b(Plot)g(class)h(sets)g(this)e(parameter)i(to)g(the)f(v)-5
-b(alue)31 b(of)g(the)g(Plot's)227 2689 y(GrfCon)m(text)e(attribute)f(b)
-s(efore)f(calling)i(the)f(graphics)f(function.)40 b(NOTE,)27
-b(THIS)g(CHANGE)h(WILL)227 2801 y(REQUIRE)h(EXISTING)g(CODE)g(THA)-8
-b(T)30 b(USES)e(AST)p Fy(_)p FG(GRFSET)g(TO)h(BE)h(MODIFIED)g(TO)f(IN-)
-227 2914 y(CLUDE)i(THE)f(NEW)g(P)-8 b(ARAMETER.)111 3099
-y(6.)46 b(The)36 b(AST)p Fy(_)p FG(REBINSEQ)e(routines)h(no)m(w)h(ha)m
-(v)m(e)h(an)e(extra)i(parameter)f(that)g(is)g(used)f(to)i(record)e(the)
-227 3212 y(total)27 b(n)m(um)m(b)s(er)d(of)h(input)f(data)h(v)-5
-b(alues)26 b(added)e(in)m(to)i(the)f(output)f(arra)m(y)-8
-b(.)40 b(This)24 b(is)h(necessary)h(to)f(correct)227
-3325 y(a)31 b(\015a)m(w)g(in)f(the)h(calculation)i(of)d(output)g(v)-5
-b(ariances)32 b(based)e(on)g(the)h(spread)f(of)h(input)e(v)-5
-b(alues.)42 b(NOTE,)227 3438 y(THIS)24 b(CHANGE)g(WILL)g(REQUIRE)g
-(EXISTING)f(CODE)h(TO)g(BE)g(MODIFIED)h(TO)f(INCLUDE)227
-3551 y(THE)30 b(NEW)h(P)-8 b(ARAMETER)31 b(\(CALLED)f("NUSED"\).)111
-3735 y(7.)46 b(Supp)s(ort)29 b(has)h(b)s(een)f(added)h(for)g(the)h
-(FITS-W)m(CS)f(\\HPX")h(\(HEALPix\))g(pro)5 b(jection.)111
-3920 y(8.)46 b(A)23 b(new)e(\015ag)i(\\AST)p Fy(__)p
-FG(V)-10 b(AR)g(W)m(GT")23 b(can)f(b)s(e)g(supplied)f(to)i(AST)p
-Fy(_)p FG(REBINSEQ.)e(This)g(causes)i(the)f(input)227
-4033 y(data)31 b(v)-5 b(alues)31 b(to)g(b)s(e)f(w)m(eigh)m(ted)i(using)
-e(the)g(recipro)s(cals)h(of)g(the)f(input)g(v)-5 b(ariances)31
-b(\(if)g(supplied\).)111 4218 y(9.)46 b(The)20 b(F)-8
-b(rame)22 b(class)f(has)f(a)h(new)f(read-only)h(attribute)h(called)f
-(NormUnit)g(that)g(returns)f(the)g(normalised)227 4331
-y(v)-5 b(alue)29 b(of)e(the)h(Unit)g(attribute)h(for)f(an)f(axis.)41
-b(Here,)29 b(\\normalisation")g(means)f(cancelling)i(redundan)m(t)227
-4444 y(units,)f(etc.)41 b(So)29 b(for)f(instance,)i(a)g(Unit)f(v)-5
-b(alue)29 b(of)g(\\s*\(m/s\)")h(w)m(ould)f(result)g(in)f(a)h(NormUnit)g
-(v)-5 b(alue)29 b(of)227 4557 y(\\m".)66 4741 y(10.)46
-b(A)28 b(new)f(routine)g(AST)p Fy(_)p FG(SHO)m(WMESH)g(has)g(b)s(een)g
-(added)f(to)j(the)e(Region)i(class.)40 b(It)28 b(displa)m(ys)f(a)h
-(mesh)227 4854 y(of)g(p)s(oin)m(ts)f(co)m(v)m(ering)i(the)f(surface)f
-(of)h(a)g(Region)g(b)m(y)f(writing)g(out)h(a)g(table)g(of)g(axis)f(v)-5
-b(alues)28 b(to)g(standard)227 4967 y(output.)66 5152
-y(11.)46 b(The)26 b(Plot)g(class)h(no)m(w)e(honours)g(the)h(v)-5
-b(alue)26 b(of)g(the)g(Lab)s(elUp)f(attribute)i(ev)m(en)f(if)g(n)m
-(umerical)g(lab)s(els)g(are)227 5265 y(placed)33 b(around)e(the)h(edge)
-h(of)g(the)f(Plot.)47 b(Previously)32 b(Lab)s(elUp)g(w)m(as)g(only)h
-(used)e(if)h(the)h(lab)s(els)f(w)m(ere)227 5378 y(dra)m(wn)f(within)g
-(the)h(in)m(terior)g(of)g(the)f(plot.)45 b(The)31 b(Lab)s(elUp)g
-(attribute)h(con)m(trols)h(whether)e(n)m(umerical)227
-5491 y(lab)s(els)g(are)g(dra)m(wn)e(horizon)m(tally)j(or)f(parallel)g
-(to)g(the)g(axis)g(they)f(describ)s(e.)66 5675 y(12.)46
-b(A)31 b(bug)f(has)g(b)s(een)f(\014xed)h(that)h(could)f(segmen)m
-(tation)j(violations)f(when)d(setting)j(attribute)f(v)-5
-b(alues.)p eop end
-%%Page: 557 567
-TeXDict begin 557 566 bop 0 52 a Fz(G.30)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.6)2249 b FG(557)0 351 y
-Fw(G.30)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.6)0
-566 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)
-m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g
-(AST)g(library)0 679 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V4.5)g(and)f
-(V4.6:)111 917 y(1.)46 b(The)33 b(TimeF)-8 b(rame)35
-b(class)g(no)m(w)e(supp)s(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h
-(scale.)52 b(The)33 b(o\013set)h(from)g(UTC)f(to)227
-1030 y(Lo)s(cal)e(Time)g(is)f(sp)s(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)
--8 b(rame)31 b(attribute)g(called)h(L)-8 b(TO\013set.)111
-1211 y(2.)46 b(A)39 b(new)e(class)j(called)f(Plot3D)h(has)e(b)s(een)g
-(added.)64 b(The)37 b(Plot3D)j(class)f(allo)m(ws)h(the)f(creation)g(of)
-g(3-)227 1324 y(dimensional)31 b(annotated)g(co)s(ordinate)g(grids.)111
-1506 y(3.)46 b(A)34 b(correction)h(for)f(diurnal)e(ab)s(erration)i(is)g
-(no)m(w)g(included)e(when)h(con)m(v)m(erting)j(b)s(et)m(w)m(een)e(AZEL)
-f(and)227 1618 y(other)39 b(celestial)i(co)s(ordinate)f(systems.)65
-b(The)38 b(correction)i(is)e(based)g(on)h(the)f(v)-5
-b(alue)39 b(of)g(the)g(ObsLat)227 1731 y(F)-8 b(rame)32
-b(attribute)f(\(the)g(geo)s(detic)h(latitude)f(of)g(the)f(observ)m
-(er\).)111 1913 y(4.)46 b(A)35 b(bug)g(has)g(b)s(een)f(\014xed)h(whic)m
-(h)f(caused)i(the)f(DUT1)h(attribute)f(to)h(b)s(e)f(ignored)g(b)m(y)g
-(the)g(SkyF)-8 b(rame)227 2026 y(class)31 b(when)f(\014nding)f(con)m(v)
-m(ersions)i(b)s(et)m(w)m(een)g(AZEL)f(and)g(other)g(celestial)j(co)s
-(ordinate)f(systems.)0 2310 y Fw(G.31)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V5.0)0 2525 y FG(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-2638 y(v)m(ersions)31 b(V4.6)g(and)f(V5.0:)111 2876 y(1.)46
-b(The)23 b(AST)f(library)g(is)h(no)m(w)g(thread-safe)g(\(assuming)g
-(that)h(the)f(POSIX)f(pthreads)g(library)g(is)h(a)m(v)-5
-b(ailable)227 2988 y(when)29 b(AST)h(is)g(built\).)40
-b(Man)m(y)31 b(of)f(the)g(macros)h(de\014ned)e(in)g(the)i(ast.h)f
-(header)g(\014le)g(ha)m(v)m(e)h(c)m(hanged.)41 b(It)227
-3101 y(is)31 b(therefore)g(necessary)f(to)h(re-compile)h(all)f(source)g
-(co)s(de)f(that)h(includes)f(ast.h.)111 3283 y(2.)46
-b(New)31 b(metho)s(ds)f(astLo)s(c)m(k)i(and)e(astUnlo)s(c)m(k)j(allo)m
-(w)f(an)e(AST)g(Ob)5 b(ject)31 b(to)h(b)s(e)e(lo)s(c)m(k)m(ed)i(for)f
-(exclusiv)m(e)h(use)227 3396 y(b)m(y)f(a)f(thread.)111
-3577 y(3.)46 b(The)33 b(TimeF)-8 b(rame)35 b(class)g(no)m(w)e(supp)s
-(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h(scale.)52 b(The)33
-b(o\013set)h(from)g(UTC)f(to)227 3690 y(Lo)s(cal)e(Time)g(is)f(sp)s
-(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)-8 b(rame)31 b(attribute)g(called)
-h(L)-8 b(TO\013set.)111 3871 y(4.)46 b(The)23 b(Channel)g(class)h(has)f
-(a)h(new)e(attribute)i(called)h(Strict)f(whic)m(h)f(con)m(trols)h
-(whether)f(or)g(not)h(to)g(rep)s(ort)227 3984 y(an)31
-b(error)f(if)h(unexp)s(ected)g(data)g(items)g(are)h(found)d(within)i
-(an)f(AST)g(Ob)5 b(ject)31 b(description)g(read)g(from)227
-4097 y(an)39 b(external)h(data)f(source.)66 b(Note,)43
-b(the)c(default)g(b)s(eha)m(viour)f(is)h(no)m(w)g(not)g(to)g(rep)s(ort)
-f(suc)m(h)h(errors.)227 4210 y(This)32 b(di\013ers)g(from)g(previous)g
-(v)m(ersions)g(of)h(AST)f(whic)m(h)g(alw)m(a)m(ys)i(rep)s(orted)d(an)i
-(error)f(is)g(unexp)s(ected)227 4323 y(input)e(items)h(w)m(ere)f
-(encoun)m(tered.)0 4607 y Fw(G.32)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V5.1)0 4822 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 4935 y(v)m(ersions)31
-b(V5.0)g(and)f(V5.1:)111 5173 y(1.)46 b(The)33 b(Prism)f(class)h(has)g
-(b)s(een)f(mo)s(di\014ed)f(so)i(that)g(an)m(y)h(class)f(of)g(Region)h
-(can)f(b)s(e)f(used)g(to)h(de\014ne)f(the)227 5286 y(extrusion)e(axes.)
-42 b(Previously)-8 b(,)31 b(only)f(a)h(Bo)m(x)h(or)e(In)m(terv)-5
-b(al)31 b(could)g(b)s(e)e(used)h(for)g(this)g(purp)s(ose.)111
-5467 y(2.)46 b(Impro)m(v)m(emen)m(ts)21 b(ha)m(v)m(e)h(b)s(een)d(made)i
-(to)g(the)f(w)m(a)m(y)h(that)g(Prisms)f(are)g(simpli\014ed)g(when)f
-(AST)p Fy(_)p FG(SIMPLIFY)227 5580 y(is)37 b(called.)63
-b(The)36 b(c)m(hanges)j(mean)e(that)h(more)f(t)m(yp)s(es)g(of)g(Prism)g
-(will)g(no)m(w)g(simplify)g(in)m(to)h(a)g(simpler)227
-5693 y(class)31 b(of)g(Region.)p eop end
-%%Page: 558 568
-TeXDict begin 558 567 bop 0 52 a FG(558)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(3.)46
-b(The)36 b(P)m(oin)m(tList)h(class)g(has)f(a)h(new)e(metho)s(d,)i(AST)p
-Fy(_)p FG(POINTS,)d(that)j(copies)g(the)f(axis)h(v)-5
-b(alues)36 b(from)227 464 y(the)31 b(P)m(oin)m(tList)h(in)m(to)f(a)g
-(supplied)e(arra)m(y)-8 b(.)111 648 y(4.)46 b(The)38
-b(P)m(oin)m(tList)h(class)g(has)f(a)g(new)g(\(read-only\))h(attribute,)
-i(ListSize,)g(that)d(giv)m(es)h(the)g(n)m(um)m(b)s(er)d(of)227
-761 y(p)s(oin)m(ts)31 b(stored)f(in)g(the)h(P)m(oin)m(tList.)111
-945 y(5.)46 b(The)34 b(handling)g(of)g(w)m(arnings)g(within)f
-(di\013eren)m(t)i(classes)g(of)g(Channel)e(has)h(b)s(een)f
-(rationalised.)54 b(The)227 1058 y(XmlStrict)35 b(attribute)f(and)f
-(AST)p Fy(_)p FG(XML)-10 b(W)g(ARNINGS)34 b(function)g(ha)m(v)m(e)h(b)s
-(een)e(remo)m(v)m(ed.)52 b(The)33 b(same)227 1170 y(functionalit)m(y)41
-b(is)e(no)m(w)g(a)m(v)-5 b(ailable)41 b(via)f(the)f(existing)h(Strict)g
-(attribute)f(\(whic)m(h)h(has)e(had)h(its)g(remit)227
-1283 y(widened\),)d(a)g(new)f(attribute)g(called)i(Rep)s(ortLev)m(el,)g
-(and)e(the)g(new)g(AST)p Fy(_)p FG(W)-10 b(ARNINGS)35
-b(function.)227 1396 y(This)h(new)h(function)f(can)h(b)s(e)f(used)g(on)
-h(an)m(y)g(class)h(of)f(Channel.)59 b(T)-8 b(eh)37 b(FitsChan)f(class)i
-(retains)f(its)227 1509 y(long)f(standing)f(abilit)m(y)i(to)g(store)f
-(w)m(arnings)f(as)g(header)g(cards)h(within)e(the)i(FitsChan,)h(but)e
-(it)h(also)227 1622 y(no)m(w)h(stores)f(w)m(arnings)g(in)g(the)h(paren)
-m(t)f(Channel)g(structure,)h(from)f(where)g(they)g(can)h(b)s(e)f
-(retriev)m(ed)227 1735 y(using)30 b(the)h(AST)p Fy(_)p
-FG(W)-10 b(ARNINGS)30 b(function.)111 1919 y(6.)46 b(A)30
-b(new)g(function)g(called)h(AST)p Fy(_)p FG(INTER)m(CEPT)d(has)i(b)s
-(een)f(added)g(to)i(the)f(F)-8 b(rame)31 b(class.)42
-b(This)29 b(func-)227 2032 y(tion)i(\014nds)e(the)h(p)s(oin)m(t)h(of)f
-(in)m(tersection)i(b)s(eteeen)f(t)m(w)m(o)h(geo)s(desic)g(curv)m(es.)
-111 2215 y(7.)46 b(A)34 b(bug)f(in)h(the)g(t)m(yp)s(e-c)m(hec)m(king)i
-(of)e(Ob)5 b(jects)34 b(passed)f(as)h(argumen)m(ts)h(to)f(constructor)g
-(functions)g(has)227 2328 y(b)s(een)e(\014xed.)48 b(This)32
-b(bug)g(could)h(lead)g(to)g(applications)h(crashing)f(or)g(sho)m(wing)g
-(strange)g(b)s(eha)m(viour)f(if)227 2441 y(an)f(inappropriate)f(class)h
-(of)f(Ob)5 b(ject)31 b(w)m(as)g(supplied)e(as)h(an)h(argumen)m(t)f(to)i
-(a)e(constructor.)111 2625 y(8.)46 b(The)35 b(AST)p Fy(_)p
-FG(PICKAXES)d(function)j(will)g(no)m(w)g(return)e(a)j(Region,)h(if)d(p)
-s(ossible,)i(when)e(applied)h(to)g(a)227 2738 y(Region.)42
-b(If)30 b(this)g(is)h(not)f(p)s(ossible,)g(a)h(F)-8 b(rame)31
-b(will)g(b)s(e)f(returned)f(as)i(b)s(efore.)111 2922
-y(9.)46 b(The)34 b(default)h(gap)g(size)g(b)s(et)m(w)m(een)h(the)e(ISO)
-g(date/time)i(lab)s(els)f(used)f(b)m(y)g(the)h(Plot)h(class)f(when)f
-(dis-)227 3035 y(pla)m(ying)d(an)f(annotated)h(axis)f(describ)s(ed)f(b)
-m(y)h(a)g(TimeF)-8 b(rame)31 b(has)f(b)s(een)f(c)m(hanged.)42
-b(The)29 b(c)m(hanges)i(are)227 3148 y(mean)m(t)i(to)g(impro)m(v)m(e)g
-(the)g(lab)s(elling)g(of)f(calendar)h(time)g(axes)g(that)f(span)g(in)m
-(terv)-5 b(als)33 b(from)f(a)h(da)m(y)f(to)h(a)227 3260
-y(few)d(y)m(ears.)66 3444 y(10.)46 b(A)f(new)g(function)f(called)i(AST)
-p Fy(_)p FG(TESTFITS)c(has)j(b)s(een)f(added)g(to)i(the)f(FitsChan)f
-(class.)85 b(This)227 3557 y(function)30 b(tests)h(a)g(FitsChan)f(to)h
-(see)g(if)f(it)h(con)m(tains)g(a)g(de\014ned)e(v)-5 b(alue)31
-b(for)f(sp)s(eci\014ed)f(FITS)h(k)m(eyw)m(ord.)66 3741
-y(11.)46 b(The)26 b(AST)p Fy(__)p FG(UNDEF<X>)g(parameters)h(used)e(to)
-i(\015ag)g(unde\014ned)d(FITS)h(k)m(eyw)m(ord)i(v)-5
-b(alues)27 b(ha)m(v)m(e)g(b)s(een)227 3854 y(remo)m(v)m(ed.)42
-b(Use)31 b(the)f(new)g(AST)p Fy(_)p FG(TESTFITS)e(function)i(instead.)0
-4141 y Fw(G.33)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.2)0
-4359 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 4472 y(v)m(ersions)31
-b(V5.1)g(and)f(V5.2:)111 4719 y(1.)46 b(A)30 b(new)g(metho)s(d)f
-(called)i(AST)p Fy(_)p FG(SETFITSCM)d(has)h(b)s(een)h(added)f(to)i(the)
-f(FitsChan)g(class.)41 b(It)30 b(stores)227 4832 y(a)d(pure)e(commen)m
-(t)i(card)f(in)g(a)h(FitsChan)f(\(that)h(is,)g(a)f(card)g(with)g(no)g
-(k)m(eyw)m(ord)h(name)f(or)g(equals)h(sign\).)111 5016
-y(2.)46 b(A)29 b(new)f(attribute)h(called)h(ObsAlt)e(has)h(b)s(een)f
-(added)g(to)h(the)g(F)-8 b(rame)29 b(class.)41 b(It)29
-b(records)f(the)h(geo)s(detic)227 5128 y(altitude)35
-b(of)f(the)g(observ)m(er,)h(in)f(metres.)51 b(It)34 b(defaults)g(to)g
-(zero.)52 b(It)34 b(is)g(used)f(when)f(con)m(v)m(erting)k(times)227
-5241 y(to)31 b(or)e(from)h(the)f(TDB)h(timescale,)j(or)c(con)m(v)m
-(erting)j(sp)s(ectral)e(p)s(ositions)f(to)i(or)e(from)g(the)h(top)s(o)s
-(cen)m(tric)227 5354 y(rest)d(frame,)g(or)f(con)m(v)m(erting)i(sky)e(p)
-s(ositions)g(to)h(or)f(from)g(horizon)g(co)s(ordinates.)40
-b(The)26 b(FitsChan)g(class)227 5467 y(will)g(include)f(its)g(e\013ect)
-i(when)d(creating)i(a)g(set)g(of)f(v)-5 b(alues)25 b(for)g(the)h
-(OBSGEO-X/Y/Z)f(k)m(eyw)m(ords,)i(and)227 5580 y(will)j(also)h(assign)f
-(a)f(v)-5 b(alue)31 b(to)f(it)g(when)e(reading)i(a)g(set)g(of)g
-(OBSGEO-X/Y/Z)g(k)m(eyw)m(ord)g(v)-5 b(alues)30 b(from)227
-5693 y(a)h(FITS)f(header.)p eop end
-%%Page: 559 569
-TeXDict begin 559 568 bop 0 52 a Fz(G.34)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V5.3)2249 b FG(559)111 351
-y(3.)46 b(The)21 b(TimeMap)g(con)m(v)m(ersions)h(\\TTTOTDB")f(and)g
-(\\TDBTOTT",)g(and)f(the)i(Sp)s(ecMap)e(con)m(v)m(ersions)227
-464 y(\\TPF2HL")38 b(and)e(\\HLF2TP",)i(no)m(w)f(ha)m(v)m(e)g(an)g
-(additional)g(argumen)m(t)g(-)g(the)g(observ)m(er's)g(geo)s(detic)227
-577 y(altitude.)111 758 y(4.)46 b(The)29 b(P)m(olygon)h(class)f(has)g
-(b)s(een)f(mo)s(di\014ed)f(to)j(mak)m(e)g(it)f(consisten)m(t)h(with)f
-(the)g(IV)m(O)m(A)g(STC)f(de\014nition)227 871 y(of)j(a)h(P)m(olygon.)
-44 b(Sp)s(eci\014cally)-8 b(,)32 b(the)f(inside)g(of)g(a)g(p)s(olygon)g
-(is)g(no)m(w)g(the)g(area)h(to)g(the)f(left)h(of)f(eac)m(h)h(edge)227
-984 y(as)k(the)f(v)m(ertices)i(are)f(tra)m(v)m(ersed)g(in)f(an)g(an)m
-(ti-clo)s(c)m(kwise)k(manner,)d(as)f(seen)h(from)e(the)i(inside)f(of)g
-(the)227 1097 y(celestial)c(sphere.)39 b(Previously)-8
-b(,)30 b(AST)d(used)h(the)h(an)m(ti-clo)s(c)m(kwise)i(con)m(v)m(en)m
-(tion,)g(but)d(view)m(ed)g(from)g(the)227 1210 y(outside)39
-b(of)g(the)g(celestial)i(sphere)d(instead)h(of)g(the)g(inside.)65
-b(An)m(y)39 b(P)m(olygon)h(sa)m(v)m(ed)g(using)e(previous)227
-1323 y(v)m(ersions)31 b(of)g(AST)e(will)i(b)s(e)f(iden)m(ti\014ed)g
-(and)g(negated)h(automatically)i(when)d(read)g(b)m(y)g(AST)g(V5.2.)111
-1503 y(5.)46 b(A)24 b(new)g(class)g(of)g(Channel,)h(called)g(StcsChan,)
-g(has)f(b)s(een)f(added)g(that)h(allo)m(ws)i(con)m(v)m(ersion)f(of)f
-(suitable)227 1616 y(AST)30 b(Ob)5 b(jects)30 b(to)h(and)f(from)g(IV)m
-(O)m(A)h(STC-S)e(format.)111 1797 y(6.)46 b(A)28 b(new)g(metho)s(d)f
-(called)j(AST)p Fy(_)p FG(REMO)m(VEREGIONS)c(has)i(b)s(een)f(added)h
-(to)g(the)h(Mapping)f(class.)40 b(It)227 1910 y(searc)m(hes)29
-b(a)g(\(p)s(ossibly)e(comp)s(ound\))g(Mapping)h(\(or)h(F)-8
-b(rame\))29 b(for)f(an)m(y)g(instances)h(of)f(the)g(AST)g(Region)227
-2023 y(class,)35 b(and)d(either)h(remo)m(v)m(es)i(them,)e(or)g
-(replaces)h(them)f(with)f(UnitMaps)i(\(or)f(equiv)-5
-b(alen)m(t)34 b(F)-8 b(rames\).)227 2136 y(It)38 b(can)g(b)s(e)e(used)h
-(to)h(remo)m(v)m(e)h(the)f(masking)g(e\013ects)g(of)g(Regions)g(from)f
-(a)h(comp)s(ound)e(Mapping)h(or)227 2249 y(F)-8 b(rame.)111
-2430 y(7.)46 b(A)27 b(new)f(metho)s(d)h(called)h(AST)p
-Fy(_)p FG(DO)m(WNSIZE)d(has)i(b)s(een)f(added)g(to)h(the)g(P)m(olygon)i
-(class.)40 b(It)27 b(pro)s(duces)227 2543 y(a)k(new)f(P)m(olygon)i
-(that)f(con)m(tains)g(a)g(subset)f(of)g(the)h(v)m(ertices)h(in)e(the)h
-(supplied)e(P)m(olygon.)42 b(The)30 b(subset)227 2655
-y(is)e(c)m(hosen)h(to)f(retain)g(the)g(main)g(features)g(of)g(the)g
-(supplied)f(P)m(olygion,)j(in)e(so)g(far)f(as)h(that)h(is)f(p)s
-(ossible,)227 2768 y(within)i(sp)s(eci\014ed)g(constrain)m(ts.)111
-2949 y(8.)46 b(A)32 b(new)g(constructor)g(called)h(AST)p
-Fy(_)p FG(OUTLINE)d(has)i(b)s(een)f(added)g(to)i(the)f(P)m(olygon)h
-(class.)46 b(Giv)m(en)33 b(a)227 3062 y(2D)26 b(data)f(arra)m(y)-8
-b(,)27 b(it)e(iden)m(ti\014es)g(the)g(b)s(oundary)e(of)h(a)h(region)h
-(within)e(the)g(arra)m(y)i(that)f(holds)f(pixels)h(with)227
-3175 y(sp)s(eci\014ed)35 b(v)-5 b(alues.)57 b(It)36 b(then)f(creates)j
-(a)e(new)f(P)m(olygon)i(to)f(describ)s(e)f(this)h(b)s(oundary)e(to)i(a)
-g(sp)s(eci\014ed)227 3288 y(accuracy)-8 b(.)111 3469
-y(9.)46 b(A)35 b(new)e(set)i(of)f(metho)s(ds,)h(called)g(AST)p
-Fy(_)p FG(MAPGETELEM<X>)f(has)g(b)s(een)f(added)h(to)h(the)f(KeyMap)227
-3582 y(class.)42 b(They)30 b(allo)m(w)h(a)g(single)g(elemen)m(t)h(of)f
-(a)f(v)m(ector)i(v)-5 b(alued)31 b(en)m(try)f(to)h(b)s(e)f(returned.)66
-3763 y(10.)46 b(A)24 b(new)f(attribute)h(called)h(KeyError)e(has)g(b)s
-(een)g(added)f(to)j(the)e(KeyMap)h(Class.)39 b(It)23
-b(con)m(trols)i(whether)227 3876 y(the)34 b(AST)p Fy(_)p
-FG(MAPGET...)50 b(family)34 b(of)g(functions)f(rep)s(ort)g(an)h(error)f
-(if)h(an)f(en)m(try)h(with)g(the)g(requested)227 3988
-y(k)m(ey)d(do)s(es)f(not)h(exist)g(in)f(the)h(KeyMap.)0
-4272 y Fw(G.34)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3)0
-4486 y FG(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 4599 y(v)m(ersions)31
-b(V5.2)g(and)f(V5.3:)111 4835 y(1.)46 b(The)26 b(details)h(of)g(ho)m(w)
-f(a)h(F)-8 b(rame)27 b(is)g(aligned)g(with)f(another)g(F)-8
-b(rame)28 b(b)m(y)e(the)g(AST)p Fy(_)p FG(FINDFRAME)h(and)227
-4948 y(AST)p Fy(_)p FG(CONVER)-8 b(T)28 b(functions)g(ha)m(v)m(e)j(b)s
-(een)d(c)m(hanged.)41 b(The)28 b(c)m(hanges)i(mean)f(that)h(a)f(F)-8
-b(rame)30 b(can)f(no)m(w)227 5060 y(b)s(e)36 b(aligned)h(with)f(an)g
-(instance)h(of)g(a)f(sub-class)h(of)f(F)-8 b(rame,)39
-b(so)e(long)g(as)f(the)h(n)m(um)m(b)s(er)e(of)h(axes)h(and)227
-5173 y(the)27 b(Domain)f(v)-5 b(alues)27 b(are)f(consisten)m(t.)41
-b(F)-8 b(or)27 b(instance,)h(a)e(basic)h(2-dimensional)g(F)-8
-b(rame)27 b(with)f(Domain)227 5286 y(\\SKY")36 b(will)h(no)m(w)e(align)
-i(succesfully)f(with)g(a)g(SkyF)-8 b(rame,)38 b(con)m(v)m(ersion)f(b)s
-(et)m(w)m(een)f(the)g(t)m(w)m(o)i(F)-8 b(rames)227 5399
-y(b)s(eing)30 b(ac)m(hiev)m(ed)i(using)e(a)h(UnitMap.)111
-5580 y(2.)46 b(Added)21 b(metho)s(d)g(AST)p Fy(_)p FG(MA)-8
-b(TCHAXES)21 b(to)h(the)g(F)-8 b(rame)22 b(class.)39
-b(This)21 b(metho)s(d)g(allo)m(ws)h(corresp)s(onding)227
-5693 y(axes)31 b(within)f(t)m(w)m(o)i(F)-8 b(rames)31
-b(to)g(b)s(e)f(iden)m(ti\014ed.)p eop end
-%%Page: 560 570
-TeXDict begin 560 569 bop 0 52 a FG(560)2013 b Fz(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FG(3.)46
-b(The)22 b(AST)p Fy(_)p FG(ADDFRAME)h(metho)s(d)f(can)g(no)m(w)h(b)s(e)
-e(used)h(to)h(app)s(end)d(one)j(or)f(more)h(axes)g(to)g(all)g(F)-8
-b(rames)227 464 y(in)30 b(a)h(F)-8 b(rameSet.)0 757 y
-Fw(G.35)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3-1)0
-979 y FG(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)
-m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g
-(AST)g(library)0 1092 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V5.3)g(and)
-f(V5.3-1)j(\(the)d(curren)m(t)h(v)m(ersion\):)111 1354
-y(1.)46 b(The)e(StcsChan)f(class)i(no)m(w)f(ignores)g(case)h(when)e
-(reading)h(STC-S)f(phrases)g(\(except)i(that)g(units)227
-1467 y(strings)30 b(are)h(still)h(case)f(sensitiv)m(e\).)0
-1729 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f
-(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5
-b(an)m(tage)27 b(of)e(these)0 1842 y(new)30 b(facilities.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/ast-5.3-1/sun210.tex b/ast-5.3-1/sun210.tex
deleted file mode 100644
index 47f7740..0000000
--- a/ast-5.3-1/sun210.tex
+++ /dev/null
@@ -1,45811 +0,0 @@
-\documentclass[twoside,11pt]{article}
-
-% ? Specify used packages
-\usepackage[english]{babel}  %  For correct hyphenation rules
-\usepackage{graphicx}        %  Use this one for final production.
-% \usepackage[draft]{graphicx} %  Use this one for drafting.
-% ? End of specify used packages
-
-\pagestyle{headings}
-\pagenumbering{roman}
-
-% -----------------------------------------------------------------------------
-% ? Document identification
-% Fixed part
-\newcommand{\stardoccategory}  {Starlink User Note}
-\newcommand{\stardocinitials}  {SUN}
-\newcommand{\stardocsource}    {sun\stardocnumber}
-
-% Variable part - replace [xxx] as appropriate.
-\newcommand{\stardocnumber}    {210.26}
-\newcommand{\stardocauthors}   {R.F. Warren-Smith \& D.S. Berry}
-\newcommand{\stardocdate}      {30th October 2009}
-\newcommand{\stardoctitle}     {AST\\
-                                A Library for Handling\\
-                                World Coordinate Systems\\
-                                in Astronomy}
-\newcommand{\stardoccopyright} {Copyright (C) 2009 Science \& Technology Facilities Council}
-\newcommand{\stardoctitlehtml} {AST - A Library for Handling World Coordinate
-                                      Systems in Astronomy}
-\newcommand{\stardocversion}   {V5.3}
-\newcommand{\stardocmanual}    {Programmer's Guide\\(Fortran Version)}
-\newcommand{\stardocmanualhtml}{Programmer's Guide (Fortran Version)}
-\newcommand{\stardocabstract}  {
-The AST library provides a comprehensive range of facilities for
-attaching world coordinate systems to astronomical data, for
-retrieving and interpreting that information in a variety of formats,
-including FITS-WCS, and for generating graphical output based on it.
-
-This programmer's manual should be of interest to anyone writing
-astronomical applications which need to manipulate coordinate system
-data, especially celestial or spectral coordinate systems. AST is portable and
-environment-independent.
-}
-% ? End of document identification
-% -----------------------------------------------------------------------------
-
-% +
-%  Name:
-%     sun.tex
-%
-%  Purpose:
-%     Template for Starlink User Note (SUN) documents.
-%     Refer to SUN/199
-%
-%  Authors:
-%     AJC: A.J.Chipperfield (Starlink, RAL)
-%     BLY: M.J.Bly (Starlink, RAL)
-%
-%  History:
-%     17-JAN-1996 (AJC):
-%        Original with hypertext macros, based on MDL plain originals.
-%     16-JUN-1997 (BLY):
-%        Adapted for LaTeX2e.
-%        Added picture commands.
-%     {Add further history here}
-%
-% -
-
-\newcommand{\stardocname}{\stardocinitials /\stardocnumber}
-\markboth{\stardocname}{\stardocname}
-\setlength{\textwidth}{160mm}
-\setlength{\textheight}{230mm}
-\setlength{\topmargin}{-2mm}
-\setlength{\oddsidemargin}{0mm}
-\setlength{\evensidemargin}{0mm}
-\setlength{\parindent}{0mm}
-\setlength{\parskip}{\medskipamount}
-\setlength{\unitlength}{1mm}
-
-% -----------------------------------------------------------------------------
-%  Hypertext definitions.
-%  ======================
-%  These are used by the LaTeX2HTML translator in conjunction with star2html.
-
-%  \htmlref{Comment}{Comment}.sty: version 2.0, 19 June 1992
-%  Selectively in/exclude pieces of text.
-%
-%  Author
-%    Victor Eijkhout                                      <eijkhout at cs.utk.edu>
-%    Department of Computer Science
-%    University Tennessee at Knoxville
-%    104 Ayres Hall
-%    Knoxville, TN 37996
-%    USA
-
-%  Do not remove the %begin{latexonly} and %end{latexonly} lines (used by 
-%  star2html to signify raw TeX that latex2html cannot process).
-%begin{latexonly}
-\makeatletter
-\def\makeinnocent#1{\catcode`#1=12 }
-\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
-
-\def\ThrowAwayComment#1{\begingroup
-    \def\CurrentComment{#1}%
-    \let\do\makeinnocent \dospecials
-    \makeinnocent\^^L% and whatever other special cases
-    \endlinechar`\^^M \catcode`\^^M=12 \xComment}
-{\catcode`\^^M=12 \endlinechar=-1 %
- \gdef\xComment#1^^M{\def\test{#1}
-      \csarg\ifx{PlainEnd\CurrentComment Test}\test
-          \let\html at next\endgroup
-      \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test
-            \edef\html at next{\endgroup\noexpand\end{\CurrentComment}}
-      \else \let\html at next\xComment
-      \fi \fi \html at next}
-}
-\makeatother
-
-\def\includecomment
- #1{\expandafter\def\csname#1\endcsname{}%
-    \expandafter\def\csname end#1\endcsname{}}
-\def\excludecomment
- #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}%
-    {\escapechar=-1\relax
-     \csarg\xdef{PlainEnd#1Test}{\string\\end#1}%
-     \csarg\xdef{LaLaEnd#1Test}{\string\\end\string\{#1\string\}}%
-    }}
-
-%  Define environments that ignore their contents.
-\excludecomment{comment}
-\excludecomment{rawhtml}
-\excludecomment{htmlonly}
-
-%  Hypertext commands etc. This is a condensed version of the html.sty
-%  file supplied with LaTeX2HTML by: Nikos Drakos <nikos at cbl.leeds.ac.uk> &
-%  Jelle van Zeijl <jvzeijl at isou17.estec.esa.nl>. The LaTeX2HTML documentation
-%  should be consulted about all commands (and the environments defined above)
-%  except \xref and \xlabel which are Starlink specific.
-
-\newcommand{\htmladdnormallinkfoot}[2]{#1\footnote{#2}}
-\newcommand{\htmladdnormallink}[2]{#1}
-\newcommand{\htmladdimg}[1]{}
-\newenvironment{latexonly}{}{}
-\newcommand{\hyperref}[4]{#2\ref{#4}#3}
-\newcommand{\htmlref}[2]{#1}
-\newcommand{\htmlimage}[1]{}
-\newcommand{\htmladdtonavigation}[1]{}
-\newcommand{\latexhtml}[2]{#1}
-\newcommand{\html}[1]{}
-
-%  Starlink cross-references and labels.
-\newcommand{\xref}[3]{#1}
-\newcommand{\xlabel}[1]{}
-
-%  LaTeX2HTML symbol.
-\newcommand{\latextohtml}{{\bf LaTeX}{2}{\tt{HTML}}}
-
-%  Define command to re-centre underscore for Latex and leave as normal
-%  for HTML (severe problems with \_ in tabbing environments and \_\_
-%  generally otherwise).
-\newcommand{\latex}[1]{#1}
-\newcommand{\setunderscore}{\renewcommand{\_}{{\tt\symbol{95}}}}
-\latex{\setunderscore}
-
-%  Redefine the \tableofcontents command. This procrastination is necessary 
-%  to stop the automatic creation of a second table of contents page
-%  by latex2html.
-\newcommand{\latexonlytoc}[0]{\tableofcontents}
-
-% -----------------------------------------------------------------------------
-%  Debugging.
-%  =========
-%  Remove % on the following to debug links in the HTML version using Latex.
-
-% \newcommand{\hotlink}[2]{\fbox{\begin{tabular}[t]{@{}c@{}}#1\\\hline{\footnotesize #2}\end{tabular}}}
-% \renewcommand{\htmladdnormallinkfoot}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\htmladdnormallink}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\hyperref}[4]{\hotlink{#1}{\S\ref{#4}}}
-% \renewcommand{\htmlref}[2]{\hotlink{#1}{\S\ref{#2}}}
-% \renewcommand{\xref}[3]{\hotlink{#1}{#2 -- #3}}
-%end{latexonly}
-% -----------------------------------------------------------------------------
-% ? Document specific \newcommand or \newenvironment commands.
-
-\newcommand{\appref}[1]{Appendix~\ref{#1}}
-\newcommand{\secref}[1]{\S\ref{#1}}
-\begin{htmlonly}
-   \newcommand{\appref}[1]{\ref{#1}}
-   \newcommand{\secref}[1]{\ref{#1}}
-\end{htmlonly}
-
-\newcommand{\fitsurl}[0]{http://fits.gsfc.nasa.gov/}
-\newcommand{\fitskey}[3]{{#1}&{#2}&{#3}\\}
-
-% The following stuff has been moved out of the document body
-% in an attempt to stop spurious behaviour form latex2html.
-
-\begin{htmlonly}
-  \newcommand{\latexonlytoc}[0]{}
-\end{htmlonly}
-\renewcommand{\thepage}{\arabic{page}}
-
-% +
-%  Name:
-%     SST.TEX
-
-%  Purpose:
-%     Define LaTeX commands for laying out Starlink routine descriptions.
-
-%  Language:
-%     LaTeX
-
-%  Type of Module:
-%     LaTeX data file.
-
-%  Description:
-%     This file defines LaTeX commands which allow routine documentation
-%     produced by the SST application PROLAT to be processed by LaTeX and
-%     by LaTeX2html. The contents of this file should be included in the
-%     source prior to any statements that make of the sst commands.
-
-%  Notes:
-%     The commands defined in the style file html.sty provided with LaTeX2html
-%     are used. These should either be made available by using the appropriate
-%     sun.tex (with hypertext extensions) or by putting the file html.sty
-%     on your TEXINPUTS path (and including the name as part of the
-%     documentstyle declaration).
-
-%  Authors:
-%     RFWS: R.F. Warren-Smith (STARLINK)
-%     PDRAPER: P.W. Draper (Starlink - Durham University)
-
-%  History:
-%     10-SEP-1990 (RFWS):
-%        Original version.
-%     10-SEP-1990 (RFWS):
-%        Added the implementation status section.
-%     12-SEP-1990 (RFWS):
-%        Added support for the usage section and adjusted various spacings.
-%     8-DEC-1994 (PDRAPER):
-%        Added support for simplified formatting using LaTeX2html.
-%     {enter_further_changes_here}
-
-%  Bugs:
-%     {note_any_bugs_here}
-
-% -
-
-%  Define length variables.
-\newlength{\sstbannerlength}
-\newlength{\sstcaptionlength}
-\newlength{\sstexampleslength}
-\newlength{\sstexampleswidth}
-
-%  Define a \tt font of the required size.
-\latex{\newfont{\ssttt}{cmtt10 scaled1095}}
-\html{\newcommand{\ssttt}{\tt}}
-
-%  Define a command to produce a routine header, including its name,
-%  a purpose description and the rest of the routine's documentation.
-\newcommand{\sstlabel}[1]{}
-\newcommand{\sstroutine}[3]{
-   \goodbreak
-   \rule{\textwidth}{0.5mm}
-   \vspace{-7ex}
-   \newline
-   \settowidth{\sstbannerlength}{{\Large {\bf #1}}}
-   \setlength{\sstcaptionlength}{\textwidth}
-   \setlength{\sstexampleslength}{\textwidth}
-   \addtolength{\sstbannerlength}{0.5em}
-   \addtolength{\sstcaptionlength}{-2.0\sstbannerlength}
-   \addtolength{\sstcaptionlength}{-5.0pt}
-   \settowidth{\sstexampleswidth}{{\bf Examples:}}
-   \addtolength{\sstexampleslength}{-\sstexampleswidth}
-   \parbox[t]{\sstbannerlength}{\flushleft{\Large {\bf #1}}}
-   \parbox[t]{\sstcaptionlength}{\center{\Large #2}}
-   \parbox[t]{\sstbannerlength}{\flushright{\Large {\bf #1}}}
-   \begin{description}
-      #3
-   \end{description}
-}
-
-%  Format the description section.
-\newcommand{\sstdescription}[1]{\item[Description:] #1}
-
-%  Format the usage section.
-\newcommand{\sstusage}[1]{\item[Usage:] \mbox{} \\[1.3ex] {\ssttt #1}}
-
-%  Format the invocation/synopsis section.
-\newcommand{\sstinvocation}[1]{\item[Invocation:]\hspace{0.4em}{\tt #1}}
-\newcommand{\sstsynopsis}[1]{\item[Synopsis:]\hspace{0.4em}{\tt #1}}
-
-%  Format the attribute data type section.
-\newcommand{\sstattributetype}[1]{
-   \item[Type:] \mbox{} \\
-      #1
-}
-
-%  Format the constructor section.
-\newcommand{\sstconstructor}[1]{
-   \item[Constructor Function:] \mbox{} \\
-      #1
-}
-
-%  Format the arguments section.
-\newcommand{\sstarguments}[1]{
-   \item[Arguments:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the returned value section (for a function).
-\newcommand{\sstreturnedvalue}[1]{
-   \item[Returned Value:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the parameters section (for an application).
-\newcommand{\sstparameters}[1]{
-   \item[Parameters:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the applicability section.
-\newcommand{\sstapplicability}[1]{
-   \item[Clas\mbox{}s Applicability:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the examples section.
-\newcommand{\sstexamples}[1]{
-   \item[Examples:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Define the format of a subsection in a normal section.
-\newcommand{\sstsubsection}[1]{ \item[{#1}] \mbox{} \\}
-
-%  Define the format of a subsection in the examples section.
-\newcommand{\sstexamplesubsection}[2]{\sloppy
-\item[\parbox{\sstexampleslength}{\ssttt #1}] \mbox{} \\ #2 }
-
-%  Format the notes section.
-\newcommand{\sstnotes}[1]{\item[Notes:] \mbox{} \\[1.3ex] #1}
-
-%  Provide a general-purpose format for additional (DIY) sections.
-\newcommand{\sstdiytopic}[2]{\item[{\hspace{-0.35em}#1\hspace{-0.35em}:}] \mbox{} \\[1.3ex] #2}
-
-%  Format the a generic section as a list
-\newcommand{\sstdiylist}[2]{
-   \item[#1:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #2
-   \end{description}
-}
-
-%  Format the implementation status section.
-\newcommand{\sstimplementationstatus}[1]{
-   \item[{Implementation Status:}] \mbox{} \\[1.3ex] #1}
-
-%  Format the bugs section.
-\newcommand{\sstbugs}[1]{\item[Bugs:] #1}
-
-%  Format a list of items while in paragraph mode.
-\newcommand{\sstitemlist}[1]{
-  \mbox{} \\
-  \vspace{-3.5ex}
-  \begin{itemize}
-     #1
-  \end{itemize}
-}
-
-%  Define the format of an item.
-\newcommand{\sstitem}{\item}
-
-%  Now define html equivalents of those already set. These are used by
-%  latex2html and are defined in the html.sty files.
-\begin{htmlonly}
-
-%  Re-define \ssttt.
-   \newcommand{\ssttt}{\tt}
-
-%  sstroutine.
-%   \newcommand{\sstroutine}[3]{
-%      \subsection{#1\xlabel{#1}-\label{#1}#2}
-%      \begin{description}
-%         #3
-%      \end{description}
-%   }
-   \newcommand{\sstlabel}[1]{\label{#1}\xlabel{#1}}
-   \newcommand{\sstroutine}[3]{
-      \subsection{#1 - #2}
-      \begin{description}
-         #3
-      \end{description}
-   }
-
-%  sstdescription
-   \newcommand{\sstdescription}[1]{\item[Description:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstusage
-   \newcommand{\sstusage}[1]{\item[Usage:]
-      \begin{description}
-         {\ssttt #1}
-      \end{description}
-   }
-
-%  sstinvocation
-   \newcommand{\sstinvocation}[1]{\item[Invocation:]
-      \begin{description}
-         {\ssttt #1}
-      \end{description}
-   }
-
-%  sstsynopsis
-   \newcommand{\sstsynopsis}[1]{\item[Synopsis:]
-      \begin{description}
-         {\ssttt #1}
-      \end{description}
-   }
-
-%  sstattributetype
-   \newcommand{\sstattributetype}[1]{\item[Type:]
-         #1
-   }
-
-%  sstconstructor
-   \newcommand{\sstconstructor}[1]{\item[Constructor Function:]
-         #1
-   }
-
-%  sstarguments
-   \newcommand{\sstarguments}[1]{
-      \item[Arguments:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstreturnedvalue
-   \newcommand{\sstreturnedvalue}[1]{
-      \item[Returned Value:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstparameters
-   \newcommand{\sstparameters}[1]{
-      \item[Parameters:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstapplicability
-   \newcommand{\sstapplicability}[1]{
-      \item[Clas\mbox{}s Applicability:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstexamples
-   \newcommand{\sstexamples}[1]{
-      \item[Examples:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstsubsection
-   \newcommand{\sstsubsection}[1]{\item[{#1}]}
-
-%  sstexamplesubsection
-   \newcommand{\sstexamplesubsection}[2]{\item[{\ssttt #1}] \\ #2}
-
-%  sstnotes
-   \newcommand{\sstnotes}[1]{\item[Notes:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstdiytopic
-   \newcommand{\sstdiytopic}[2]{\item[{#1}]
-      \begin{description}
-         #2
-      \end{description}
-   }
-
-%  sstimplementationstatus
-   \newcommand{\sstimplementationstatus}[1]{\item[Implementation Status:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstitemlist
-   \newcommand{\sstitemlist}[1]{
-      \begin{itemize}
-         #1
-      \end{itemize}
-   }
-\end{htmlonly}
-
-%  End of "sst.tex" layout definitions.
-% .
-% @(#)sst.tex   1.4   95/06/06 11:46:41   96/07/05 10:28:17
-
-
-
-
-
-% ? End of document specific commands
-% -----------------------------------------------------------------------------
-%  \htmlref{Title}{Title} Page.
-%  ===========
-\renewcommand{\thepage}{\roman{page}}
-\begin{document}
-\thispagestyle{empty}
-
-%  Latex document header.
-%  ======================
-\begin{latexonly}
-   CCLRC / {\sc Rutherford Appleton Laboratory} \hfill {\bf \stardocname}\\
-   {\large Particle Physics \& Astronomy Research Council}\\
-   {\large Starlink Project\\}
-   {\large \stardoccategory\ \stardocnumber}
-   \begin{flushright}
-   \stardocauthors\\
-   \stardocdate
-   \end{flushright}
-   \vspace{-4mm}
-   \rule{\textwidth}{0.5mm}
-   \vspace{-7mm}
-   \begin{center}
-   {\Huge\bf  \stardoctitle \\ [2.0ex]}
-   {\LARGE\bf \stardocversion \\ [1.0ex]}
-   {\Huge\bf  \stardocmanual}
-   \end{center}
-
-% ? Add picture here if required for the LaTeX version.
-   \begin{center}
-   \mbox{}\hfill
-   \includegraphics[scale=0.25,angle=-90]{sun210_figures/fronta_bw.eps}\hfill
-   \includegraphics[scale=0.25,angle=-90]{sun210_figures/frontb_bw.eps}\hfill
-   \includegraphics[scale=0.25,angle=-90]{sun210_figures/frontc_bw.eps}\hfill
-   \mbox{}
-   \end{center}
-% ? End of picture
-
-% ? Heading for abstract if used.
-   \begin{center}
-      {\Large\bf Abstract}
-   \end{center}
-% ? End of heading for abstract.
-\end{latexonly}
-
-%  HTML documentation header.
-%  ==========================
-\begin{htmlonly}
-   \xlabel{}
-   \begin{rawhtml} <H1> \end{rawhtml}
-      \stardoctitlehtml
-   \begin{rawhtml} </H1> \end{rawhtml}
-
-% ? Add picture here if required for the hypertext version.
-   \includegraphics[scale=0.3,angle=-90]{sun210_figures/fronta.eps}\hfill
-   \includegraphics[scale=0.3,angle=-90]{sun210_figures/frontb.eps}\hfill
-   \includegraphics[scale=0.3,angle=-90]{sun210_figures/frontc.eps}
-% ? End of picture
-
-   \begin{rawhtml} <H1> \end{rawhtml}
-      \stardocversion
-      \stardocmanualhtml
-   \begin{rawhtml} </H1> \end{rawhtml}
-   \begin{rawhtml} <P> <I> \end{rawhtml}
-   \stardoccategory\ \stardocnumber \\
-   \stardocauthors \\
-   \stardocdate
-   \begin{rawhtml} </I> </P> \end{rawhtml}
-   \begin{rawhtml} <P> <I> \end{rawhtml}
-   (For the C version of this document, please see \xref{SUN/211}{sun211}{}.)
-   \begin{rawhtml} </I> </P> \end{rawhtml}
-   \begin{rawhtml} <H3> \end{rawhtml}
-      \htmladdnormallink{CCLRC}{http://www.cclrc.ac.uk} /
-      \htmladdnormallink{Rutherford Appleton Laboratory}
-                        {http://www.cclrc.ac.uk/ral} \\
-      \htmladdnormallink{Particle Physics \& Astronomy Research Council}
-                        {http://www.pparc.ac.uk} \\
-   \begin{rawhtml} </H3> <H2> \end{rawhtml}
-      \htmladdnormallink{Starlink Project}{http://www.starlink.rl.ac.uk/}
-   \begin{rawhtml} </H2> \end{rawhtml}
-   \htmladdnormallink{\htmladdimg{source.gif} Retrieve hardcopy}
-      {http://www.starlink.rl.ac.uk/cgi-bin/hcserver?\stardocsource}\\
-
-%  HTML document table of contents. 
-%  ================================
-%  Add table of contents header and a navigation button to return to this 
-%  point in the document (this should always go before the abstract \section). 
-  \label{stardoccontents}
-  \begin{rawhtml} 
-    <HR>
-    <H2>Contents</H2>
-  \end{rawhtml}
-  \htmladdtonavigation{\htmlref{\htmladdimg{contents_motif.gif}}
-        {stardoccontents}}
-
-% ? New section for abstract if used.
-  \section{\xlabel{abstract}Abstract}
-% ? End of new section for abstract
-\end{htmlonly}
-
-% -----------------------------------------------------------------------------
-% ? Document Abstract. (if used)
-%  ==================
-\stardocabstract
-% ? End of document abstract
-% -----------------------------------------------------------------------------
-% ? Document Copyright Statement.
-%  =============================
-   \begin{latexonly}
-      \newpage
-      \vspace*{\fill}
-      \stardoccopyright
-   \end{latexonly}
-% ? End of Document Copyright Statement.
-% -----------------------------------------------------------------------------
-% ? Latex document Table of Contents (if used).
-%  ===========================================
-  \cleardoublepage
-  \cleardoublepage
-  \begin{latexonly}
-    \setlength{\parskip}{0mm}
-    \latexonlytoc
-    \setlength{\parskip}{\medskipamount}
-    \markboth{\stardocname}{\stardocname}
-  \end{latexonly}
-% ? End of Latex document table of contents
-% -----------------------------------------------------------------------------
-\cleardoublepage
-\setcounter{page}{1}
-
-\null\vspace {5mm}
-\begin{latexonly}
-   \begin {center}
-   \rule{80mm}{0.5mm} \\ [1ex]
-   {\Large\bf \stardoctitle \\ [2.5ex]
-              \stardocversion} \\ [2ex]
-   \rule{80mm}{0.5mm}
-
-   \vspace{10mm}   
-   {\em{This is the Fortran version of this document.\\
-        For the C version, please see SUN/211.}}
-   \end{center}
-\end{latexonly}
-
-% Main text of document.
-\vspace{7mm}
-\pagenumbering{arabic}
-\section{Introduction}
-
-Welcome to the AST library. If you are writing software for astronomy
-and need to use celestial coordinates ({\em{e.g.}}\ RA and Dec), spectral
-coordinates ({\em{e.g.}}\ wavelength, frequency, {\em{etc.}}), or
-other coordinate system information, then this library should be of
-interest. It provides solutions for most of the problems you will meet
-and allows you to write robust and flexible software. It is able to read
-and write WCS information in a variety of formats, including 
-\htmladdnormallink{FITS-WCS}{http://fits.gsfc.nasa.gov/fits_wcs.html}. 
-
-%\subsection{TBW---What is a World Coordinate \htmlref{System}{System}?}
-
-\subsection{What Problems Does AST Tackle?}
-
-Here are some of the main problems you may face when handling world
-coordinate system (WCS) information and the solutions that AST
-provides:
-
-\begin{description}
-\item[1. The Variety of Coordinate Systems]\mbox{}\\
-Astronomers use a wide range of differing coordinate systems to describe
-positions within a variety of physical domains. For instance, there are a 
-large number of celestial coordinate systems in use within astronomy to
-describe positions on the sky. Understanding these, and knowing how to 
-convert coordinates between them, can require considerable expertise. It 
-can also be difficult to decide which of them your software should support.
-The same applies to coordinate systems describing other domains, such as
-position within an electro-magnetic spectrum.
-
-{\bf{Solution.}} AST has built-in knowledge of many coordinate systems
-and allows you to convert freely between them without specialist
-knowledge. This avoids the need to embed details of specific
-coordinate systems in your software. You also benefit automatically
-when new coordinate systems are added to AST.
-
-\item[2. Storing and Retrieving WCS Information]\mbox{}\\
-Storing coordinate system information in astronomical datasets and
-retrieving it later can present a considerable challenge. Typically,
-it requires knowledge of rather complex conventions
-({\em{e.g.}}\ FITS) which are low-level, often mis-interpreted and may
-be subject to change. Exchanging information with other software
-systems is further complicated by the number of different conventions
-in use.
-
-{\bf{Solution.}} AST combines a unifying high-level description of WCS
-information with the ability to save and restore this using a variety
-of formats. Details of the formats, which include FITS, are handled
-internally by AST. This frees you from the need to understand them or
-embed the details in your software. Again, you benefit automatically
-when new formats are added to AST.
-
-\item[3. Generating Graphical Output]\mbox{}\\
-Producing graphical displays involving curvilinear coordinate systems,
-such as celestial coordinate grids, can be complicated. Particular
-difficulties arise when handling large areas of sky, the polar regions
-and discontinuous ({\em{e.g.}}\ segmented) sky projections.  Even just
-numbering and labelling curvilinear axes is rarely straightforward.
-
-{\bf{Solution.}} AST provides plotting facilities especially designed
-for use with curvilinear coordinate systems. These include the
-plotting of axes and complete labelled coordinate grids.  A large
-number of options are provided for tailoring the output to your
-specific needs.
-
-\item[4. Aligning Data from Different Sources]\mbox{}\\
-One of the main uses of coordinate systems is to facilitate the
-inter-comparison of data from different sources. A typical use might
-be to plot (say) radio contours over an optical image.  In practice,
-however, different celestial coordinate systems may have been used,
-making accurate alignment far from simple.
-
-{\bf{Solution}} AST provides a one-step method of aligning datasets,
-searching for all possible intermediate coordinate systems.  This
-makes it simple to directly inter-relate the pixel coordinates of
-different datasets.
-
-\item[5. Handling Different Types of Coordinate \htmlref{System}{System}]\mbox{}\\
-Not all coordinate systems used in astronomy are celestial ones, so if
-you are writing general-purpose software such as (say) a display tool,
-you may also need to handle axes representing wavelength, distance,
-time or whatever else comes along. Obviously, you would prefer not to
-handle each one as a special case.
-
-{\bf{Solution}} AST uses the same flexible high-level model to
-describe all types of coordinate system. This allows you to write
-software that handles different kinds of coordinate axis without
-introducing special cases.
-\end{description}
-
-\subsection{Other Design Objectives}
-
-As well as its scientific objectives, the AST library's design
-includes a number of technical criteria intended to make it applicable
-to as wide a range of projects as possible. The main considerations
-are described here:
-
-\begin{enumerate}
-\item {\bf{Minimum Software Dependencies.}}
-The AST library depends on no other other software\footnote{It now comes with a
-minimal cut-down version of the widely-available SLALIB positional astronomy 
-library (\xref{SUN/67}{sun67}{}), including just those functions needed
-by AST, and the previous dependency on SLALIB is no longer present}.
-
-\item {\bf{Environment Independence.}}
-AST is designed so that it can operate in a variety of ``programming
-environments'' and is not tied to any particular one. To allow this,
-it uses simple, flexible interfaces to obtain the following services:
-
-\begin{itemize}
-\item {\bf{Data Storage.}} Data I/O operations are based on text
-and/or FITS headers. This makes it easy to interface to a wide variety
-of astronomical data formats in a machine-independent way.
-
-\item {\bf{Graphics.}} Graphical output is produced {\em{via}} a
-simple generic graphics interface, which may easily be re-implemented
-over different graphics systems. AST provides a default implementation
-based on the widely-used PGPLOT graphics system
-(\xref{SUN/15}{sun15}{}).
-
-\item {\bf{Error Handling.}} Error messages are written to standard
-error by default, but go through a simple generic interface similar to
-that used for graphics (above). This permits error message delivery
-{\em{via}} other routes when necessary ({\em{e.g.}} in a graphical
-interface).
-\end{itemize}
-
-\item {\bf{Multiple Language Support.}}
-AST has been designed to be called from more than one language.
-Both Fortran and C interfaces are available (see
-\xref{SUN/211}{sun211}{} for the C version)
-and use from C$++$ is also straightforward if the C interface is
-included using:
-
-\begin{quote}
-\small
-\begin{verbatim}
-extern "C" {
-#include "ast.h"
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A JNI interface (known as ``JNIAST'' - see 
-\htmladdnormallink{http://www.starlink.ac.uk/jniast/}
-{http://www.starlink.ac.uk/jniast/}) has also been developed by Starlink 
-which allows AST to be used from Java.
-
-\item {\bf{\htmlref{Object}{Object} Oriented Design.}}
-AST uses ``object oriented'' techniques internally in order to provide
-a flexible and easily-extended programming model.  A fairly
-traditional calling interface is provided, however, so that the
-library's facilities are easily accessible to programmers using
-Fortran and C.
-
-\item {\bf{Portability.}}
-AST is implemented entirely in ANSI standard C and, when called
-{\em{via}} its C interface, makes no explicit use of any
-machine-dependent facilities.
-
-The Fortran interface is, unavoidably, machine dependent. However, the
-potential for problems has been minimised by encapsulating the
-interface layer in a compact set of C macros which facilitate its
-transfer to other platforms. No Fortran compiler is needed to build
-the library.
-
-Currently, AST is supported by Starlink on PC~Linux, Sun~Solaris and
-Tru64~Unix (formerly DEC~UNIX) platforms.
-\end{enumerate}
-
-\subsection{What Does ``AST'' Stand For?}
-
-The library name ``AST'' stands for ``ASTrometry Library''. The name
-arose when it was thought that knowledge of ``astrometry''
-({\em{i.e.}}\ celestial coordinate systems) would form the bulk of the
-library.  In fact, it turns out that astrometry forms only a minor
-component, but the name AST has stuck.
-
-\cleardoublepage
-\section{Overview of AST Concepts}
-
-This section presents a brief overview of AST concepts. It is intended
-as a basic orientation course before you move on to the more technical
-considerations in subsequent sections.
-
-\subsection{\label{ss:mappingoverview}Relationships Between Coordinate Systems}
-
-The relationships between coordinate systems are represented in AST by
-Objects called Mappings. A \htmlref{Mapping}{Mapping} does not represent a coordinate
-system itself, but merely the process by which you move from one
-coordinate system to another related one.
- 
-\begin{latexonly}
-   A convenient picture of a Mapping is as a ``black box''
-   (Figure~\ref{fig:mapping}) into which you can feed sets of
-   coordinates.
-   \begin{figure}[bhtp]
-   \begin{center}
-   \includegraphics[scale=0.7]{sun210_figures/mapping.eps}
-   \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
-   \label{fig:mapping}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   A convenient picture of a Mapping is as a ``black box'' (see Figure
-   below) into which you can feed sets of coordinates.
-   \begin{quote}
-   \begin{figure}[bhtp]
-   \label{fig:mapping}
-   \includegraphics[scale=1.2]{sun210_figures/mapping.eps}
-   \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-For each set you feed in, the Mapping returns a corresponding set of
-transformed coordinates. Since each set of coordinates represents a
-point in a coordinate space, the Mapping acts to inter-relate
-corresponding positions in the two spaces, although what these spaces
-represent is unspecified.  Notice that a Mapping need not have the
-same number of input and output coordinates. That is, the two
-coordinate spaces which it inter-relates need not have the same number
-of dimensions.
-
-In many cases, the transformation can, in principle, be performed in
-either direction: either from the {\em{input}} coordinate space to the
-{\em{output,}} or {\em{vice versa.}} The first of these is termed the
-{\em{forward}} transformation and the other the {\em{inverse}}
-transformation.
-
-
-{\bf{Further reading:}} For a more complete discussion of Mappings,
-see~\secref{ss:mappings}.
-
-\subsection{\label{ss:mappingselection}Mappings Available}
-
-The basic concept of a \htmlref{Mapping}{Mapping} (\secref{ss:mappingoverview}) is rather
-generic and obviously it is necessary to have specific Mappings that
-implement specific relationships between coordinate systems. AST
-provides a range of these, to perform transformations such as the
-following and, where appropriate, their inverses:
-
-\begin{itemize}
-\item Conversions between various celestial coordinate systems (the
-\htmlref{SlaMap}{SlaMap}).
-
-\item Conversions between various spectral coordinate systems (the
-\htmlref{SpecMap}{SpecMap} and \htmlref{GrismMap}{GrismMap}).
-
-\item Conversions between various time systems (the \htmlref{TimeMap}{TimeMap}).
-
-\item Conversion between 2-dimensional spherical celestial coordinates
-(longitude and latitude) and a 3-dimensional vectorial positions (the \htmlref{SphMap}{SphMap}).
-
-\item Various projections of the celestial sphere on to 2-dimensional
-coordinate spaces---{\em{i.e.}}\ map projections (the \htmlref{DssMap}{DssMap} and \htmlref{WcsMap}{WcsMap}).
-
-\item Permutation, introduction and elimination of coordinates (the
-\htmlref{PermMap}{PermMap}).
-
-\item Various linear coordinate transformations (the \htmlref{MatrixMap}{MatrixMap}, \htmlref{WinMap}{WinMap},
-\htmlref{ShiftMap}{ShiftMap} and \htmlref{ZoomMap}{ZoomMap}).
-
-\item General N-dimensional polynomial transformations (the \htmlref{PolyMap}{PolyMap}).
-
-\item Lookup tables (the \htmlref{LutMap}{LutMap}).
-
-\item General-purpose transformations expressed using arithmetic
-operations and functions similar to those available in Fortran (the
-\htmlref{MathMap}{MathMap}).
-
-\item Transformations for internal use within a program, based on
-private transformation routines which you write yourself in Fortran
-(the \htmlref{IntraMap}{IntraMap}).
-\end{itemize}
-
-{\bf{Further reading:}} For a more complete description of each of the
-Mappings mentioned above, see its entry in
-\appref{ss:classdescriptions}. In addition, see the discussion of the
-PermMap in \secref{ss:permmapexample}, the \htmlref{UnitMap}{UnitMap} in
-\secref{ss:unitmapexample} and the IntraMap in
-\secref{ss:intramaps}. The ZoomMap is used as an example throughout
-\secref{ss:primer}.
-
-\subsection{\label{ss:cmpmapoverview}Compound Mappings}
-
-The Mappings described in \secref{ss:mappingselection} provide a set
-of basic building blocks from which more complex Mappings may be
-constructed. The key to doing this is a type of \htmlref{Mapping}{Mapping} called a
-\htmlref{CmpMap}{CmpMap}, or compound Mapping.  A CmpMap's role is, in principle, very
-simple: it allows any other pair of Mappings to be joined together
-into a single entity which behaves as if it were a single Mapping. A
-CmpMap is therefore a container for another pair of Mappings.
-
-\begin{latexonly}
-   A pair of Mappings may be combined using a CmpMap in either of two
-   ways. The first of these, {\em{in series,}} is illustrated in
-   Figure~\ref{fig:seriescmpmap}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.5]{sun210_figures/series.eps}
-   \caption{A CmpMap (compound Mapping) composed of two component
-   Mappings joined in series. The output coordinates of the first Mapping
-   feed into the input coordinates of the second one, so that the whole
-   entity behaves like a single Mapping.}
-   \label{fig:seriescmpmap}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   A pair of Mappings may be combined using a CmpMap in either of two
-   ways. The first of these, {\em{in series,}} is illustrated in the
-   following Figure.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:seriescmpmap}
-   \includegraphics[scale=1.0]{sun210_figures/series.eps}
-   \caption{A CmpMap (compound Mapping) composed of two component
-   Mappings joined in series. The output coordinates of the first Mapping
-   feed into the input coordinates of the second one, so that the whole
-   entity behaves like a single Mapping.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-\begin{latexonly}
-   Here, the transformations implemented by each component Mapping are
-   performed one after the other, with the output from the first Mapping
-   feeding into the second.  The second way, {\em{in parallel,}} is shown in
-   Figure~\ref{fig:parallelcmpmap}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.75]{sun210_figures/parallel.eps}
-   \caption{A CmpMap composed of two Mappings joined in parallel. Each
-   component Mapping acts on a complementary subset of the input and
-   output coordinates.}
-   \label{fig:parallelcmpmap}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   Here, the transformations implemented by each component Mapping are
-   performed one after the other, with the output from the first Mapping
-   feeding into the second.  The second way, {\em{in parallel,}} is shown in
-   the Figure below.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:parallelcmpmap}
-   \includegraphics[scale=1.0]{sun210_figures/parallel.eps}
-   \caption{A CmpMap composed of two Mappings joined in parallel. Each
-   component Mapping acts on a complementary subset of the input and
-   output coordinates.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-In this case, each Mapping acts on a complementary subset of the
-input and output coordinates.\footnote{A pair of Mappings can be combined
-in a third way using a \htmlref{TranMap}{TranMap}. A TranMap allows the forward
-transformation of one Mapping to be combined with the inverse
-transformation of another to produce a single Mapping.}
-
-\begin{latexonly}
-   The CmpMap forms the key to building arbitrarily complex Mappings
-   because it is itself a form of Mapping. This means that a CmpMap may
-   contain other CmpMaps as components
-   ({\em{e.g.}}\ Figure~\ref{fig:complexcmpmap}). This nesting of CmpMaps
-   can be repeated indefinitely, so that complex Mappings may be built in
-   a hierarchical manner out of simper ones.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.6]{sun210_figures/complex.eps}
-   \caption{CmpMaps (compound Mappings) may be nested in order to
-   construct complex Mappings out of simpler building blocks.}
-   \label{fig:complexcmpmap}
-   \end{center}
-   \end{figure}
-   This gives AST great flexibility in the coordinate transformations it
-   can describe.
-\end{latexonly}
-\begin{htmlonly}
-   The CmpMap forms the key to building arbitrarily complex Mappings
-   because it is itself a form of Mapping. This means that a CmpMap may
-   contain other CmpMaps as components ({\em{e.g.}}\ the Figure
-   below). This nesting of CmpMaps can be repeated indefinitely, so that
-   complex Mappings may be built in a hierarchical manner out of simper
-   ones.  This gives AST great flexibility in the coordinate
-   transformations it can describe.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:complexcmpmap}
-   \includegraphics[scale=0.8]{sun210_figures/complex.eps}
-   \caption{CmpMaps (compound Mappings) may be nested in order to
-   construct complex Mappings out of simpler building blocks.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of CmpMaps,
-see \secref{ss:cmpmaps}. Also see the CmpMap entry in
-\appref{ss:classdescriptions}.
-
-\subsection{Representing Coordinate Systems}
-
-\begin{latexonly}
-   While Mappings (\secref{ss:mappingoverview}) represent the
-   relationships between coordinate systems in AST, the coordinate
-   systems themselves are represented by Objects called Frames
-   (Figure~\ref{fig:frames}).
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.75]{sun210_figures/frames.eps}
-   \caption{(a) A basic \htmlref{Frame}{Frame} is used to represent a Cartesian coordinate
-   system, here 2-dimensional. (b) A \htmlref{SkyFrame}{SkyFrame} represents a (spherical)
-   celestial coordinate system. (c) The axis order of any Frame may be
-   permuted to match the coordinate space it describes.}
-   \label{fig:frames}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   While Mappings (\secref{ss:mappingoverview}) represent the
-   relationships between coordinate systems in AST, the coordinate
-   systems themselves are represented by Objects called Frames (see
-   Figure below).
-   \begin{quote}
-   \begin{figure}
-   \label{fig:frames}
-   \includegraphics[scale=1.5]{sun210_figures/frames.eps}
-   \caption{(a) A basic Frame is used to represent a Cartesian coordinate
-   system, here 2-dimensional. (b) A SkyFrame represents a (spherical)
-   celestial coordinate system. (c) The axis order of any Frame may be
-   permuted to match the coordinate space it describes.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-A Frame is similar in concept to the frame you might draw around a
-graph.  It contains information about the labels which appear on the
-axes, the axis units, a title, knowledge of how to format the
-coordinate values on each axis, {\em{etc.}}  An AST Frame is not,
-however, restricted to two dimensions and may have any number of axes.
-
-A basic Frame may be used to represent a Cartesian coordinate system
-by setting values for its {\em attributes} (all AST Objects have
-values associated with them called attributes, which may be set and
-enquired).  Usually, this would involve setting appropriate axis
-labels and units, for example.  Routines are provided for use with
-Frames to perform operations such as formatting coordinate values as
-text, calculating distances between points, interchanging axes,
-{\em{etc.}}
-
-There are several more specialised forms of Frame, which provide the
-additional functionality required when handling coordinates within some
-specific physical domain. This ranges from tasks such as formatting axis
-values, to complex tasks such as determining the transformation between
-any pair of related coordinate systems. For instance, the SkyFrame
-(Figure~\ref{fig:frames}b,c), represents celestial coordinate systems,
-the \htmlref{SpecFrame}{SpecFrame} represents spectral coordinate systems, and the \htmlref{TimeFrame}{TimeFrame} 
-represents time coordinate systems. All these provide a wide range of 
-different systems for describing positions within their associated physical 
-domain, and these may be selected by setting appropriate attributes.  
-
-\begin{latexonly}
-   As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
-   to merge two Frames together to form a compound Frame, or \htmlref{CmpFrame}{CmpFrame}, in
-   which both sets of axes are combined.  One could, for example, have
-   celestial coordinates on two axes and an unrelated coordinate
-   (wavelength, perhaps) on a third (Figure~\ref{fig:cmpframe}).
-   Knowledge of the relationships between the axes is preserved
-   internally by the process of constructing the CmpFrame which
-   represents them.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.85]{sun210_figures/cmpframe.eps}
-   \caption{A CmpFrame (compound Frame) formed by combining two simpler
-   Frames. Note how the special relationship which exists between the RA
-   and Dec axes is preserved within this data structure. As with compound
-   Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
-   order to build more complex Frames.}
-   \label{fig:cmpframe}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
-   to merge two Frames together to form a compound Frame, or CmpFrame, in
-   which both sets of axes are combined.  One could, for example, have
-   celestial coordinates on two axes and an unrelated coordinate
-   (wavelength, perhaps) on a third (see Figure below).  Knowledge of the
-   relationships between the axes is preserved internally by the process
-   of constructing the CmpFrame which represents them.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:cmpframe}
-   \includegraphics[scale=1.5]{sun210_figures/cmpframe.eps}
-   \caption{A CmpFrame (compound Frame) formed by combining two simpler
-   Frames. Note how the special relationship which exists between the RA
-   and Dec axes is preserved within this data structure. As with compound
-   Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
-   order to build more complex Frames.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of Frames see
-\secref{ss:frames}, for SkyFrames see \secref{ss:skyframes} and for 
-SpecFrames see \secref{ss:specframes}.  Also see the Frame, SkyFrame,
-SpecFrame, TimeFrame and CmpFrame entries in \appref{ss:classdescriptions}.
-
-\subsection{Networks of Coordinate Systems}
-
-\begin{latexonly}
-   Mappings and Frames may be connected together to form networks called
-   FrameSets, which are used to represent sets of inter-related
-   coordinate systems (Figure~\ref{fig:frameset}).
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.75]{sun210_figures/frameset.eps}
-   \caption{A \htmlref{FrameSet}{FrameSet} is a network of Frames inter-connected by Mappings
-   such that there is exactly one conversion path, {\em{via}} Mappings,
-   between any pair of Frames.}
-   \label{fig:frameset}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   Mappings and Frames may be connected together to form networks called
-   FrameSets, which are used to represent sets of inter-related
-   coordinate systems (see Figure below).
-   \begin{quote}
-   \begin{figure}
-   \label{fig:frameset}
-   \includegraphics[scale=1.0]{sun210_figures/frameset.eps}
-   \caption{A FrameSet is a network of Frames inter-connected by Mappings
-   such that there is exactly one conversion path, {\em{via}} Mappings,
-   between any pair of Frames.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-A FrameSet may be extended by adding a new \htmlref{Frame}{Frame} to it, together with
-an associated \htmlref{Mapping}{Mapping} which relates the new coordinate system to one
-which is already present.  This process ensures that there is always
-exactly one path, {\em{via}} Mappings, between any pair of Frames.  A
-function is provided for identifying this path and returning the
-complete Mapping.
-
-One of the Frames in a FrameSet is termed its {\em{base}} Frame.  This
-underlies the FrameSet's purpose, which is to calibrate datasets and
-other entities by attaching coordinate systems to them.  In this
-context, the base Frame represents the ``native'' coordinate system
-(for example, the pixel coordinates of an image).  Similarly, one
-Frame is termed the {\em{current}} Frame and represents the
-``currently-selected'' coordinates.  It might, typically, be a
-celestial or spectral coordinate system and would be used during 
-interactions with
-a user, as when plotting axes on a graph or producing a table of
-results.  Other Frames within the FrameSet represent a library of
-alternative coordinate systems which a software user can select by
-making them current.
-
-{\bf{Further reading:}} For a more complete description of
-FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}. Also
-see the FrameSet entry in \appref{ss:classdescriptions}.
-
-\subsection{Input/Output Facilities}
-
-AST allows you to convert any kind of \htmlref{Object}{Object} into a stream of text
-which contains a full description of that Object. This text may be
-written out by one program and read back in by another, thus allowing
-the original Object to be reconstructed.
-
-The filter which converts Objects into text and back again is itself a
-kind of Object, called a \htmlref{Channel}{Channel}. A Channel provides a number of
-options for controlling the information content of the text, such as
-the addition of comments for human interpretation.  It is also
-possible to intercept the text being processed by a Channel so that it
-may be redirected to/from any chosen external data store, such as a
-text file, an astronomical dataset, or a network connection.
-
-The text format used by the basic Channel class is peculiar to the AST
-library - no other software will understand it. However, more specialised 
-forms of Channel are provided which use text formats more widely
-understood.
-
-To further facilitate the storage of coordinate system information in
-astronomical datasets, a more specialised form of Channel called a
-\htmlref{FitsChan}{FitsChan} is provided. Instead of using free-format text, a FitsChan
-converts AST Objects to and from FITS header cards. It also allows the
-information to be encoded in the FITS cards in a number of ways
-(called {\em{encodings}}), so that WCS information from a variety of
-sources can be handled.
-
-Another sub-class of Channel, called \htmlref{XmlChan}{XmlChan}, is a specialised form of
-Channel that stores the text in the form of XML markup. Currently, two
-markup formats are provided by the XmlChan class, one is closely related
-to the text format produced by the basic Channel class (currently, no
-schema or DTD is available describing this format). The other is a subset
-of an early draft of the IVOA Space-Time-Coordinates XML (STC-X) schema
-(V1.20) described at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}\footnote{XML documents which use only the subset of the STC schema
-supported by AST can be read by the XmlChan class to produce
-corresponding AST objects (subclasses of the \htmlref{Stc}{Stc} class). However, the
-reverse is not possible. That is, AST objects can not currently be
-written out in the form of STC documents.}. The version of STC-X that has
-been adopted by the IVOA differs in several significant respects from
-V1.20, and therefore this XmlChan format is of historical interest only.
-
-Finally, the \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA STC-S region descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of STC metadata. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a 
-region within an AST-supported astronomical coordinate system to be converted 
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa.
-
-{\bf{Further reading:}} For a more complete description of Channels
-see \secref{ss:channels} and for FitsChans see \secref{ss:nativefits}
-and \secref{ss:foreignfits}. Also see the Channel and FitsChan entries
-in \appref{ss:classdescriptions} and the \htmlref{Encoding}{Encoding} entry in
-\appref{ss:attributedescriptions}.
-
-\subsection{Producing Graphical Output}
-
-Graphical output is supported by a specialised form of \htmlref{FrameSet}{FrameSet} called
-a \htmlref{Plot}{Plot}, whose base \htmlref{Frame}{Frame} corresponds with the native coordinates of
-the underlying graphics system.  Plotting operations are specified in
-{\em{physical coordinates}} which correspond with the Plot's current
-Frame. Typically, this might be a celestial coordinate system.
-
-Operations, such as drawing lines, are automatically transformed from
-physical to graphical coordinates before plotting, using an adaptive
-algorithm which ensures smooth curves (because the transformation is
-usually non-linear).  ``Missing'' coordinates ({\em{e.g.}}\ graphical
-coordinates which do not project on to the celestial sphere),
-discontinuities and generalised clipping are all consistently handled.
-It is possible, for example, to plot in equatorial coordinates and
-clip in galactic coordinates.  The usual plotting operations are
-provided (text, markers), but a geodesic curve replaces the primitive
-straight line element.  There is also a separate function for drawing
-axis lines, since these are normally not geodesics.
-
-In addition to drawing coordinate grids over an area of the sky, another
-common use of the Plot class is to produce line plots such as flux
-against wavelength, displacement again time, \emph{etc}. For these
-situations the current Frame of the Plot would be a compound Frame
-(\htmlref{CmpFrame}{CmpFrame}) containing a pair of 1-dimensional Frames - the first
-representing the X axis quantity (wavelength, time, etc), and the second
-representing the Y axis quantity (flux, displacement, etc). The Plot
-class includes an option for axes to be plotted logarithmically.
-
-\begin{latexonly}
-   Perhaps the most useful graphics function available is for drawing
-   fully annotated coordinate grids ({\em{e.g.}}\ Figure~\ref{fig:gridplot}).
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.8,angle=-90]{sun210_figures/gridplot_bw.eps}
-   \caption{A labelled coordinate grid for an all-sky zenithal equal area
-   projection in ecliptic coordinates. This was composed and drawn
-   {\em{via}} a Plot using a
-   single subroutine call.}
-   \label{fig:gridplot}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   Perhaps the most useful graphics function available is for drawing
-   fully annotated coordinate grids ({\em{e.g.}}\ the Figure below).
-   \begin{quote}
-   \begin{figure}
-   \label{fig:gridplot}
-   \includegraphics[scale=1.2,angle=-90]{sun210_figures/gridplot.eps}
-   \caption{A labelled coordinate grid for an all-sky zenithal equal area
-   projection in ecliptic coordinates. This was composed and drawn
-   {\em{via}} a Plot using a
-   single subroutine call.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-This uses a general algorithm which does not depend on knowledge of
-the coordinates being represented, so can also handle
-programmer-defined coordinate systems.  Grids for all-sky projections,
-including polar regions, can be drawn and most aspects of the output
-(colour, line style, {\em{etc.}}) can be adjusted by setting
-appropriate Plot attributes.
-
-{\bf{Further reading:}} For a more complete description of
-Plots and how to produce graphical output, see \secref{ss:plots}. Also
-see the Plot entry in \appref{ss:classdescriptions}.
-
-\cleardoublepage
-\section{\label{ss:howto}How To\ldots}
-
-For those of you with a plane to catch, this section provides some
-instant templates and recipes for performing the most
-commonly-required operations using AST, but without going into
-detail. The examples given (sort of) follow on from each other, so you
-should be able to construct a variety of programs by piecing them
-together.  Note that some of them appear longer than they actually
-are, because we have included plenty of comments and a few options
-that you probably won't need.
-
-If any of this material has you completely baffled, then you may want
-to read the introduction to AST programming concepts in
-\secref{ss:primer} first. Otherwise, references to more detailed
-reading are given after each example, just in case they don't quite do
-what you want.
-
-\subsection{\ldots Obtain and Install AST}
-The AST library is available both as a stand-alone package and also as 
-part of the Starlink Software Collection\footnote{The Starlink Software 
-Collection can be downloaded from
-\htmladdnormallink{http://www.starlink.ac.uk/Download/}
-{http://www.starlink.ac.uk/Download/}.}. If your site has the Starlink
-Software Collection installed then AST should already be available. 
-
-If not, you can download the AST library by itself from
-\htmladdnormallink{http://www.starlink.ac.uk/ast/}
-{http://www.starlink.ac.uk/ast/}. 
-
-\subsection{\ldots Structure an AST Program}
-
-An AST program normally has the following structure:
-
-\small
-\begin{verbatim}
-*  Include the interface to the AST library.
-      INCLUDE 'AST_PAR'
-
-*  Declare an integer status variable.
-      INTEGER STATUS
-      <maybe other declarations>
-
-*  Initialise the status to zero.
-      STATUS = 0
-      <maybe some Fortran statements>
-
-*  Enclose the parts which use AST between AST_BEGIN and AST_END calls.
-      CALL AST_BEGIN( STATUS )
-      <Fortran statements which use AST>
-      CALL AST_END( STATUS )
-
-      <maybe more Fortran statements>
-      END
-\end{verbatim}
-\normalsize
-
-The use of \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END} is optional, but has the effect of
-tidying up after you have finished using AST, so is normally
-recommended. For more details of this, see \secref{ss:contexts}. For
-details of how to access the AST\_PAR include file, see
-\secref{ss:accessingheaderfile}.
-
-\subsection{\label{ss:howtobuild}\ldots Build an AST Program}
-
-To build a simple AST program that doesn't use graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 program.f -L/star/lib -I/star/include `ast_link` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-On Linux systems you should usually use \verb+g77 -fno-second-underscore+ in
-place of \verb+f77+ - see \xref{``Software development on Linux''}{sun212}
-{software_development_on_linux} in \xref{SUN/212}{sun212}{}. 
-
-To build a program which uses PGPLOT for graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 program.f -L/star/lib `ast_link -pgplot` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-again using \verb+g77 -fno-second-underscore+ in place of \verb+f77+ 
-on Linux systems.
-
-For more details about accessing AST include files, see
-\secref{ss:accessingheaderfile}. For more
-details about linking programs, see \secref{ss:linking} and the
-description of the ``\htmlref{ast\_link}{ast_link}'' command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoreadwcs}\ldots Read a WCS Calibration from a Dataset}
-
-
-Precisely how you extract world coordinate system (WCS) information
-from a dataset obviously depends on what type of dataset it
-is. Usually, however, you should be able to obtain a set of FITS
-header cards which contain the WCS information (and probably much more
-besides). Suppose that CARDS is an array of character strings
-containing a complete set of FITS header cards and NCARD is the number
-of cards. Then proceed as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FITSCHAN, ICARD, NCARD, WCSINFO
-      CHARACTER * ( 80 ) CARDS( NCARD )
-
-      ...
-
-*  Create a FitsChan and fill it with FITS header cards.
-      FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
-      DO 1 ICARD = 1, NCARD
-         CALL AST_PUTFITS( FITSCHAN, CARDS( ICARD ), .FALSE., STATUS )
- 1    CONTINUE
-
-*  Rewind the FitsChan and read WCS information from it.
-      CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-      WCSINFO = AST_READ( FITSCHAN, STATUS )
-\end{verbatim}
-\normalsize
-
-The result should be a pointer, WCSINFO, to a \htmlref{FrameSet}{FrameSet} which contains
-the WCS information. This pointer can now be used to perform many
-useful tasks, some of which are illustrated in the following recipes.
-
-Some datasets which do not easily yield FITS header cards may require
-a different approach, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a \htmlref{FitsChan}{FitsChan}. In the case of the
-Starlink NDF data format, for example, all the above may be replaced
-by a single call to the routine
-\xref{NDF\_GTWCS}{sun33}{NDF_GTWCS}---see \xref{SUN/33}{sun33}{}.  The
-whole process can probably be encapsulated in a similar way for most
-other data systems, whether they use FITS header cards or not.
-
-For more details about reading WCS information from datasets, see
-\secref{ss:identifyingfitsencoding} and
-\secref{ss:readingforeignfits}. For a more general description of
-FitsChans and their use with FITS header cards, see
-\secref{ss:nativefits} and \secref{ss:foreignfits}. For more details
-about FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}.
-
-\subsection{\ldots Validate WCS Information}
-
-Once you have read WCS information from a dataset, as in
-\secref{ss:howtoreadwcs}, you may wish to check that you have been
-successful. The following will detect and classify the things that
-might possibly go wrong:
-
-\small
-\begin{verbatim}
-      IF ( STATUS .NE. 0 ) THEN
-         <an error occurred (a message will have been issued)>
-      ELSE IF ( WCSINFO .EQ. AST__NULL ) THEN
-         <there was no WCS information present>
-      ELSE IF ( AST_GETC( WCSINFO, 'Class', STATUS ) .NE. 'FrameSet' ) THEN
-         <something unexpected was read (i.e. not a FrameSet)>
-      ELSE
-         <WCS information was read OK>
-      END IF
-\end{verbatim}
-\normalsize
-
-For more information about detecting errors in AST routines, see
-\secref{ss:errordetection}. For details of how to validate input data
-read by AST, see \secref{ss:validatinginput} and
-\secref{ss:readingforeignfits}.
-
-\subsection{\ldots Display AST Data}
-
-If you have a pointer to any AST \htmlref{Object}{Object}, you can display the data
-stored in that Object in textual form as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SHOW( WCSINFO, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have used a pointer to the \htmlref{FrameSet}{FrameSet} which we read earlier
-(\secref{ss:howtoreadwcs}).  The result is written to the program's
-standard output stream. This can be very useful during debugging.
-
-For more details about using \htmlref{AST\_SHOW}{AST_SHOW}, see
-\secref{ss:displayingobjects}. For information about interpreting the
-output, also see \secref{ss:textualoutputformat}.
-
-\subsection{\label{ss:howtotransform}\ldots Convert Between Pixel and World Coordinates}
-
-You may use a pointer to a \htmlref{FrameSet}{FrameSet}, such as we read in
-\secref{ss:howtoreadwcs}, to transform a set of points between the
-pixel coordinates of an image and the associated world coordinates. If
-you are working in two dimensions, proceed as follows:
-
-\small
-\begin{verbatim}
-      INTEGER N
-      DOUBLE PRECISION XPIXEL( N ), YPIXEL( N )
-      DOUBLE PRECISION XWORLD( N ), YWORLD( N )
-
-      ...
-
-      CALL AST_TRAN2( WCSINFO, N, XPIXEL, YPIXEL, .TRUE.,
-     :                            XWORLD, YWORLD, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, N is the number of points to be transformed, XPIXEL and YPIXEL
-hold the pixel coordinates, and XWORLD and YWORLD receive the returned
-world coordinates.\footnote{By pixel coordinates, we mean a coordinate
-system in which the first pixel in the image is centred on (1,1) and
-each pixel is a unit square.  Note that the world coordinates will not
-necessarily be celestial coordinates, but if they are, then they will
-be in radians.}  To transform in the opposite direction, interchange
-the two pairs of arrays (so that the world coordinates are given as
-input) and change the fifth argument of \htmlref{AST\_TRAN2}{AST_TRAN2} to .FALSE..
-
-To transform points in one dimension, use \htmlref{AST\_TRAN1}{AST_TRAN1}. In any other
-number of dimensions (or if the number of dimensions is initially
-unknown), use \htmlref{AST\_TRANN}{AST_TRANN}. These routines are described in
-\appref{ss:functiondescriptions}.
-
-For more information about transforming coordinates, see
-\secref{ss:transforming} and \secref{ss:framesetasmapping}. For
-details of how to handle missing coordinates, see
-\secref{ss:badcoordinates}.
-
-\subsection{\label{ss:howtotestforcelestial}\ldots Test if a WCS is a Celestial Coordinate System}
-
-The world coordinate system (WCS) currently associated with an image
-may often be a celestial coordinate system, but this need not
-necessarily be the case. For instance, instead of right ascension and
-declination, an image might have a WCS with axes representing
-wavelength and slit position, or maybe just plain old pixels.
-
-If you have obtained a WCS calibration for an image, as in
-\secref{ss:howtoreadwcs}, in the form of a pointer WCSINFO to a
-\htmlref{FrameSet}{FrameSet}, then you may determine if the current coordinate system is a
-celestial one or not, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FRAME
-      LOGICAL ISSKY
-
-      ...
-
-*  Obtain a pointer to the current Frame and determine if it is a
-*  SkyFrame.
-      FRAME = AST_GETFRAME( WCSINFO, AST__CURRENT, STATUS )
-      ISSKY = AST_ISASKYFRAME( FRAME, STATUS )
-      CALL AST_ANNUL( FRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-This will set ISSKY to .TRUE.\ if the WCS is a celestial coordinate
-system, and to .FALSE.\ otherwise.
-
-\subsection{\label{ss:howtotestforspectral}\ldots Test if a WCS is a Spectral Coordinate System}
-Testing for a spectral coordinate system is basically the same as testing
-for a celestial coordinate system (see the previous section). The one
-difference is that you use the 
-AST\_ISASPECFRAME routine
-in place of the 
-AST\_ISASKYFRAME routine.
-
-\subsection{\label{ss:howtoformatcoordinates}\ldots Format Coordinates for Display}
-
-Once you have converted pixel coordinates into world coordinates
-(\secref{ss:howtotransform}), you may want to format them as text
-before displaying them. Typically, this would convert from (say)
-radians into something more comprehensible. Using the \htmlref{FrameSet}{FrameSet} pointer
-WCSINFO obtained in \secref{ss:howtoreadwcs} and a pair of world
-coordinates XW and YW ({\em{e.g.}}\ see \secref{ss:howtotransform}),
-you could proceed as follows:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 20 ) XTEXT, YTEXT
-      DOUBLE PRECISION XW, YW
-
-      ...
-
-      XTEXT = AST_FORMAT( WCSINFO, 1, XW, STATUS )
-      YTEXT = AST_FORMAT( WCSINFO, 2, YW, STATUS )
-
-      WRITE ( *, 199 ) XTEXT, YTEXT
- 199  FORMAT( 'Position = ', A, ', ', A )
-\end{verbatim}
-\normalsize
-
-Here, the second argument to \htmlref{AST\_FORMAT}{AST_FORMAT} is the axis number.
-
-With celestial coordinates, this will usually result in sexagesimal
-notation, such as ``12:34:56.7''. However, the same method may be
-applied to any type of coordinates and appropriate formatting will be
-employed.
-
-For more information about formatting coordinate values and how to
-control the style of formatting used, see
-\secref{ss:formattingaxisvalues} and
-\secref{ss:formattingskyaxisvalues}. If necessary, also see
-\secref{ss:normalising} for details of how to ``normalise'' a set of
-coordinates so that they lie within the standard range ({\em{e.g.}}\ 0
-to 24 hours for right ascension and $\pm 90^\circ$ for
-declination).
-
-\subsection{\ldots Display Coordinates as they are Transformed}
-
-In addition to formatting coordinates as part of a program's output,
-you may also want to examine coordinate values while debugging your
-program. To save time, you can ``eavesdrop'' on the coordinate values
-being processed every time they are transformed. For example, when
-using the \htmlref{FrameSet}{FrameSet} pointer WCSINFO obtained in
-\secref{ss:howtoreadwcs} to transform coordinates
-(\secref{ss:howtotransform}), you could inspect the coordinate values
-as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( WCSINFO, 'Report=1', STATUS )
-      CALL AST_TRAN2( WCSINFO, N, XPIXEL, YPIXEL, .TRUE.,
-     :                            XWORLD, YWORLD, STATUS )
-\end{verbatim}
-\normalsize
-
-By setting the FrameSet's \htmlref{Report}{Report} attribute to 1, coordinate
-transformations are automatically displayed on the program's standard
-output stream, appropriately formatted, for example:
-
-\begin{quote}
-\begin{verbatim}
-(42.1087, 20.2717) --> (2:06:03.0, 34:22:39)
-(43.0197, 21.1705) --> (2:08:20.6, 35:31:24)
-(43.9295, 22.0716) --> (2:10:38.1, 36:40:09)
-(44.8382, 22.9753) --> (2:12:55.6, 37:48:55)
-(45.7459, 23.8814) --> (2:15:13.1, 38:57:40)
-(46.6528, 24.7901) --> (2:17:30.6, 40:06:25)
-(47.5589, 25.7013) --> (2:19:48.1, 41:15:11)
-(48.4644, 26.6149) --> (2:22:05.6, 42:23:56)
-(49.3695, 27.5311) --> (2:24:23.1, 43:32:41)
-(50.2742, 28.4499) --> (2:26:40.6, 44:41:27)
-\end{verbatim}
-\end{quote}
-
-For a complete description of the Report attribute, see its entry in
-\appref{ss:attributedescriptions}.  For further details of how to set
-and enquire attribute values, see \secref{ss:settingattributes} and
-\secref{ss:gettingattributes}.
-
-\subsection{\ldots Read Coordinates Entered by a User}
-
-In addition to writing out coordinate values generated by your program
-(\secref{ss:howtoformatcoordinates}), you may also need to accept
-coordinates entered by a user, or perhaps read from a file. In this
-case, you will probably want to allow ``free-format'' input, so that
-the user has some flexibility in the format that can be used. You will
-probably also want to detect any typing errors.
-
-Let's assume that you want to read a number of lines of text, each
-containing the world coordinates of a single point, and to split each
-line into individual numerical coordinate values. Using the \htmlref{FrameSet}{FrameSet}
-pointer WCSINFO obtained earlier (\secref{ss:howtoreadwcs}), you could
-proceed as follows:
-
-\small
-\begin{verbatim}
-      CHARACTER TEXT * ( 80 )
-      DOUBLE PRECISION COORD( 10 )
-      INTEGER IAXIS, N, NAXES, T
-
-      ...
-
-*  Obtain the number of coordinate axes (if not already known).
-      NAXES = AST_GETI( WCSINFO, 'Naxes', STATUS )
-
-*  Loop to read each line of input text, in this case from the
-*  standard input channel (your programming environment will probably
-*  provide a better way of reading text than this). Set the index T to
-*  the start of each line read.
- 2    CONTINUE
-      READ( *, '(A)', END=99 ) TEXT
-      T = 1
-
-*  Attempt to read a coordinate for each axis.
-      DO 3 IAXIS = 1, NAXES
-         N = AST_UNFORMAT( WCSINFO, IAXIS, TEXT( T : ), COORD( IAXIS ),
-     :                     STATUS )
-
-*  If nothing was read and this is not the first axis and the end of
-*  the text has not been reached, try stepping over a separator and
-*  reading again.
-         IF ( ( N .EQ. 0 ) .AND. ( IAXIS .GT. 1 ) .AND.
-     :        ( T .LT. LEN( STRING ) ) ) THEN
-            T = T + 1
-            N = AST_UNFORMAT( WCSINFO, IAXIS, TEXT( T : ),
-                              COORD( IAXIS ), STATUS )
-         END IF
-
-*  Quit if nothing was read, otherwise move on to the next coordinate.
-         IF ( N .EQ. 0 ) GO TO 4
-         T = T + N
- 3    CONTINUE
- 4    CONTINUE
-
-*  Test for the possible errors that may occur...
-
-*  Error detected by AST (a message will have been issued).
-      IF ( STATUS .NE. 0 ) THEN
-         GO TO 99
-
-*  Error in input data at character TEXT( T + N : T + N ).
-      ELSE IF ( ( T .LT. LEN( STRING ) ) .OR. ( N .EQ. 0 ) ) THEN
-         <handle the error, or report your own message here>
-         GO TO 99
-
-      ELSE
-         <coordinates were read OK>
-      END IF
-
-*  Return to read the next input line.
-      GO TO 2
- 99   CONTINUE
-\end{verbatim}
-\normalsize
-
-This algorithm has the advantage of accepting free-format input in
-whatever style is appropriate for the world coordinates in use (under
-the control of the FrameSet whose pointer you provide). For example,
-wavelength values might be read as floating point numbers
-({\em{e.g.}}\ ``1.047'' or ``4787''), whereas celestial positions
-could be given in sexagesimal format ({\em{e.g.}}\ ``12:34:56'' or
-``12~34.5'') and would be converted into radians. Individual
-coordinate values may be separated by white space and/or any
-non-ambiguous separator character, such as a comma.
-
-For more information on reading coordinate values using the
-\htmlref{AST\_UNFORMAT}{AST_UNFORMAT} function, see \secref{ss:unformattingaxisvalues}. For
-details of how sexagesimal formats are handled, and the forms of input
-that may be used for for celestial coordinates, see
-\secref{ss:unformattingskyaxisvalues}.
-
-\subsection{\label{ss:howtocreatenewwcs}\ldots Create a New WCS Calibration}
-
-This section describes how to add a WCS calibration to a data set which you 
-are creating from scratch, rather than modifying an existing data set. 
-
-In most common cases, the simplest way to create a new WCS calibration
-from scratch is probably to create a set of strings describing the
-required calibration in terms of the keywords used by the FITS WCS
-standard, and then convert these strings into an AST \htmlref{FrameSet}{FrameSet} describing
-the calibration. This FrameSet can then be used for many other purposes, or
-simply stored in the data set. 
-
-The full FITS-WCS standard is quite involved, currently running to four
-separate papers, but the basic kernel is quite simple, involving the
-following keywords (all of which end with an integer axis index,
-indicated below by $<i>$):
-
-\begin{description}
-\item[CRPIX<i>]\mbox{}\\
-hold the pixel coordinates at a reference point 
-\item[CRVAL<i>]\mbox{}\\
-hold the corresponding WCS coordinates at the reference point 
-\item[CTYPE<i>]\mbox{}\\
-name the quantity represented by the WCS axes, together with the
-projection algorithm used to convert the scaled and rotated pixel coordinates 
-to WCS coordinates.
-\item[CD<i>\_<j>]\mbox{}\\
-a set of keywords which specify the elements of a matrix. This matrix scales
-pixel offsets from the reference point into the offsets required as input
-by the projection algorithm specified by the CTYPE keywords. This matrix 
-specifies the scale and rotation of the image. If there is no rotation
-the off-diagonal elements of the matrix (\emph{e.g.} CD1\_2 and
-CD2\_1) can be omitted. 
-\end{description}
-
-As an example consider the common case of a simple 2D image of the sky in 
-which north is parallel to the second pixel axis and east parallel to the 
-(negative) first pixel axis. The image scale is 1.2 arc-seconds per pixel
-on both axes, and the image is presumed to have been obtained with a
-tangent plane projection. Furthermore, it is known that pixel coordinates
-(100.5,98.4) correspond to an RA of 11:00:10 and a Dec. of  -23:26:02.
-A suitable set of FITS-WCS header cards could be:
-
-\begin{quote}
-\small
-\begin{verbatim}
-CTYPE1  = 'RA---TAN'       / Axis 1 represents RA with a tan projection
-CTYPE2  = 'DEC--TAN'       / Axis 2 represents Dec with a tan projection
-CRPIX1  = 100.5            / Pixel coordinates of reference point
-CRPIX2  = 98.4             / Pixel coordinates of reference point
-CRVAL1  = 165.04167        / Degrees equivalent of "11:00:10" hours
-CRVAL2  = -23.433889       / Decimal equivalent of "-23:26:02" degrees
-CD1_1   = -0.0003333333    / Decimal degrees equivalent of -1.2 arc-seconds
-CD2_2   = 0.0003333333     / Decimal degrees equivalent of 1.2 arc-seconds
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notes:
-\begin{itemize}
-\item a FITS header card begins with the keyword name starting at column 1, 
-has an equals sign in column 9, and the keyword value in columns 11 to 80.
-\item string values must be enclosed in single quotes.
-\item celestial longitude and latitude must both be specified in decimal degrees.
-\item the CD1\_1 value is negative to indicate that RA increases as the
-first pixel axis decreases.
-\item the (RA,Dec) coordinates will be taken as ICRS coordinates. For FK5
-you should add:
-
-\begin{quote}
-\small
-\begin{verbatim}
-RADESYS = 'FK5'           
-EQUINOX = 2005.6 
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The EQUINOX value defaults to J2000.0 if omitted. FK4 can also be used in
-place of FK5, in which case EQUINOX defaults to B1950.0. 
-
-\end{itemize}
-
-Once you have created these FITS-WCS header card strings, you should
-store them in a \htmlref{FitsChan}{FitsChan} and then read the corresponding FrameSet from the
-FitsChan. How to do this is described in \secref{ss:howtoreadwcs}.
-
-Having created the WCS calibration, you may want to store it in a data
-file. How to do this is described in \secref{ss:howtowritewcs}).\footnote{If 
-you are writing the WCS calibration to a FITS file you obviously
-have the choice of storing the FITS-WCS cards directly.}
-
-If the required WCS calibration cannot be described as a set of FITS-WCS 
-headers, then a different approach is necessary. In this case, you should
-first create a \htmlref{Frame}{Frame} describing pixel coordinates, and store this Frame
-in a new FrameSet. You should then create a new Frame describing the
-world coordinate system. This Frame may be a specific subclass of Frame such
-as a \htmlref{SkyFrame}{SkyFrame} for celestial coordinates, a \htmlref{SpecFrame}{SpecFrame} for spectral
-coordinates, a Timeframe for time coordinates, or a \htmlref{CmpFrame}{CmpFrame} for a combination 
-of different coordinates.
-You also need to create a suitable \htmlref{Mapping}{Mapping} which transforms pixel
-coordinates into world coordinates. AST provides many different types of
-Mappings, all of which can be combined together in arbitrary fashions to
-create more complicated Mappings. The WCS Frame should then be added into
-the FrameSet, using the Mapping to connect the WCS Frame with the pixel
-Frame.
-
-\subsection{\label{ss:howtomodifywcs}\ldots Modify a WCS Calibration}
-
-The usual reason for wishing to modify the WCS calibration associated
-with a dataset is that the data have been geometrically transformed in
-some way (here, we will assume a 2-dimensional image dataset). This
-causes the image features (stars, galaxies, {\em{etc.}}) to move with
-respect to the grid of pixels which they occupy, so that any
-coordinate systems previously associated with the image become
-invalid.
-
-To correct for this, it is necessary to set up a \htmlref{Mapping}{Mapping} which
-expresses the positions of image features in the new data grid in
-terms of their positions in the old grid. In both cases, the grid
-coordinates we use will have the first pixel centred at (1,1) with
-each pixel being a unit square.
-
-AST allows you to correct for any type of geometrical transformation
-in this way, so long as a suitable Mapping to describe it can be
-constructed. For purposes of illustration, we will assume here that
-the new image coordinates XNEW and YNEW can be expressed in terms of
-the old coordinates XOLD and YOLD as follows:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION XNEW, XOLD, YNEW, YOLD
-      DOUBLE PRECISION M( 4 ), Z( 2 )
-
-      ...
-
-      XNEW = XOLD * M( 1 ) + YOLD * M( 2 ) + Z( 1 )
-      YNEW = XOLD * M( 3 ) + YOLD * M( 4 ) + Z( 2 )
-\end{verbatim}
-\normalsize
-
-where M is a 2$\times$2 transformation matrix and Z represents a shift
-of origin. This is therefore a general linear coordinate
-transformation which can represent displacement, rotation,
-magnification and shear.
-
-In AST, it can be represented by concatenating two Mappings. The first
-is a \htmlref{MatrixMap}{MatrixMap}, which implements the matrix multiplication. The second
-is a \htmlref{WinMap}{WinMap}, which linearly transforms one coordinate window on to
-another, but will be used here simply to implement the shift of
-origin (alternatively, a \htmlref{ShiftMap}{ShiftMap} could have been used in place of a
-WinMap). These Mappings may be constructed and concatenated as follows:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION INA( 2 ), INB( 2 ), OUTA( 2 ), OUTB( 2 )
-      INTEGER MATRIXMAP, WINMAP
-
-      ...
-
-*  Set up the corners of a unit square.
-      DATA INA / 2 * 0.0D0 /
-      DATA INB / 2 * 1.0D0 /
-
-*  The MatrixMap may be constructed directly from the matrix M.
-      MATRIXMAP = AST_MATRIXMAP( 2, 2, 0, M, ' ', STATUS )
-
-*  For the WinMap, we take the coordinates of the corners of a unit
-*  square (window) and then shift them by the required amounts.
-      OUTA( 1 ) = INA( 1 ) + Z( 1 )
-      OUTA( 2 ) = INA( 2 ) + Z( 2 )
-      OUTB( 1 ) = INB( 1 ) + Z( 1 )
-      OUTB( 2 ) = INB( 2 ) + Z( 2 )
-
-*  The WinMap will then implement this shift.
-      WINMAP = AST_WINMAP( 2, INA, INB, OUTA, OUTB, ' ', STATUS )
-
-*  Join the two Mappings together, so that they are applied one after
-*  the other.
-      NEWMAP = AST_CMPMAP( MATRIXMAP, WINMAP, 1, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-You might, of course, create any other form of Mapping depending on
-the type of geometrical transformation involved. For an overview of
-the Mappings provided by AST, see \secref{ss:mappingselection}, and
-for a description of the capabilities of each class of Mapping, see
-its entry in \appref{ss:classdescriptions}. For an overview of how
-individual Mappings may be combined, see \secref{ss:cmpmapoverview}
-(\secref{ss:cmpmaps} gives more details).
-
-Assuming you have obtained a WCS calibration for your original image
-in the form of a pointer to a \htmlref{FrameSet}{FrameSet}, WCSINFO1
-(\secref{ss:howtoreadwcs}), the Mapping created above may be used to
-produce a calibration for the new image as follows:
-
-\small
-\begin{verbatim}
-      INTEGER WCSINFO1, WCSINFO2
-
-      ...
-
-*  If necessary, make a copy of the WCS calibration, since we are
-*  about to alter it.
-      WCSINFO2 = AST_COPY( WCSINFO1, STATUS )
-
-*  Re-map the base Frame so that it refers to the new data grid
-*  instead of the old one.
-      CALL AST_REMAPFRAME( WCSINFO2, AST__BASE, NEWMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This will produce a pointer, WCSINFO2, to a new FrameSet in which all
-the coordinate systems associated with the original image are modified
-so that they are correctly registered with your new image instead.
-
-For more information about re-mapping the Frames within a FrameSet,
-see \secref{ss:remapframe}. Also see \secref{ss:wcsprocessingexample}
-for a similar example to the above, applicable to the case of reducing
-the size of an image by binning.
-
-\subsection{\label{ss:howtowritewcs}\ldots Write a Modified WCS Calibration to a Dataset}
-
-If you have modified the WCS calibration associated with a dataset,
-such as in the example above (\secref{ss:howtomodifywcs}), then you
-will need to write the modified version out along with any new data.
-
-In the same way as when reading a WCS calibration
-(\secref{ss:howtoreadwcs}), how you do this will depend on your data
-system, but we will assume that you wish to generate a set of FITS
-header cards that can be stored with the data. You should usually make
-preparations for doing this when you first read the WCS calibration
-from your input dataset by modifying the example given in
-\secref{ss:howtoreadwcs} as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FITSCHAN1, WCSINFO1
-      CHARACTER * ( 20 ) ENCODE
-
-      ...
-
-*  Create an input FitsChan and fill it with FITS header cards. Note,
-*  if you have all the header cards in a single string, use AST_PUTCARDS in
-*  place of AST_PUTFITS.
-      FITSCHAN1 = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
-      DO 1 ICARD = 1, NCARD
-         CALL AST_PUTFITS( FITSCHAN1, CARDS( ICARD ), .FALSE., STATUS )
- 1    CONTINUE
-
-*  Note which encoding has been used for the WCS information.
-      ENCODE = AST_GETC( FITSCHAN1, 'Encoding', STATUS );
-
-*  Rewind the input FitsChan and read the WCS information from it.
-      CALL AST_CLEAR( FITSCHAN1, 'Card', STATUS )
-      WCSINFO1 = AST_READ( FITSCHAN1, STATUS )
-\end{verbatim}
-\normalsize
-
-Note how we have added an enquiry to determine how the WCS information
-is encoded in the input FITS cards, storing the resulting string in
-the ENCODE variable. This must be done {\bf{before}} actually reading
-the WCS calibration.
-
-
-Once you have produced a modified WCS calibration for the output
-dataset ({\em{e.g.}}\ \secref{ss:howtomodifywcs}), in the form of a
-\htmlref{FrameSet}{FrameSet} identified by the pointer WCSINFO2, you can produce a new
-\htmlref{FitsChan}{FitsChan} containing the output FITS header cards as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FITSCHAN2, JUNK, WCSINFO2
-
-      ...
-
-*  Make a copy of the input FitsChan, AFTER the WCS information has
-*  been read from it. This will propagate all the input FITS header
-*  cards, apart from those describing the WCS calibration.
-      FITSCHAN2 = AST_COPY( FITSCHAN1, STATUS )
-
-*  If necessary, make modifications to the cards in FITSCHAN2
-*  (e.g. you might need to change NAXIS1, NAXIS2, etc., to account for
-*  a change in image size). You probably only need to do this if your
-*  data system does not provide these facilities itself.
-      <details not shown - see below>
-
-*  Alternatively, if your data system handles the propagation of FITS
-*  header cards to the output dataset for you, then simply create an
-*  empty FitsChan to contain the output WCS information alone.
-*     FITSCHAN2 = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
-
-*  Rewind the new FitsChan (if necessary) and attempt to write the
-*  output WCS information to it using the same encoding method as the
-*  input dataset.
-      CALL AST_SET( FITSCHAN2, 'Card=1, Encoding=' // ENCODE, STATUS )
-      IF ( AST_WRITE( FITSCHAN2, WCSINFO2, STATUS ) .EQ. 0 ) THEN
-
-*  If this didn't work (the WCS FrameSet has become too complex), then
-*  use the native AST encoding instead.
-         CALL AST_SETC( FITSCHAN2, 'Encoding', 'NATIVE', STATUS );
-         JUNK = AST_WRITE( FITSCHAN2, WCSINFO2, STATUS );
-      END IF
-\end{verbatim}
-\normalsize
-
-For details of how to modify the contents of the output FitsChan in
-other ways, such as by adding, over-writing or deleting header cards,
-see \secref{ss:addressingfitscards}, \secref{ss:addingmulticards}, \secref{ss:addingfitscards} and
-\secref{ss:findingandchangingfits}.
-
-Once you have assembled the output FITS cards, you may retrieve them
-from the FitsChan that contains them as follows:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 80 ) CARD
-
-      ...
-
-      CALL AST_CLEAR( FITSCHAN2, 'Card', STATUS )
- 5    CONTINUE
-      IF ( AST_FINDFITS( FITSCHAN2, '%f', CARD, .TRUE., STATUS ) ) THEN
-         WRITE ( *, '(A)' ) CARD
-         GO TO 5
-      END IF
-\end{verbatim}
-\normalsize
-
-Here, we have simply written each card to the standard output unit,
-but you would obviously replace this with a subroutine call to store
-the cards in your output dataset.
-
-For data systems that do not use FITS header cards, a different
-approach may be needed, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a FitsChan.  In the case of the
-Starlink NDF data format, for example, all of the above may be
-replaced by a single call to the routine
-\xref{NDF\_PTWCS}{sun33}{NDF_PTWCS}---see \xref{SUN/33}{sun33}{}. The
-whole process can probably be encapsulated in a similar way for most
-other data systems, whether they use FITS header cards or not.
-
-For an overview of how to propagate WCS information through data
-processing steps, see \secref{ss:propagatingwcsinformation}.  For more
-information about writing WCS information to FitsChans, see
-\secref{ss:writingnativefits} and \secref{ss:writingforeignfits}.  For
-information about the options for encoding WCS information in FITS
-header cards, see \secref{ss:nativeencoding},
-\secref{ss:foreignencodings}, and the description of the \htmlref{Encoding}{Encoding}
-attribute in \appref{ss:attributedescriptions}.  For a complete
-understanding of FitsChans and their use with FITS header cards, you
-should read \secref{ss:nativefits} and \secref{ss:foreignfits}.
-
-\subsection{\label{ss:howtoplotgrid}\ldots Display a Graphical Coordinate Grid}
-
-\begin{latexonly}
-   A common requirement when displaying image data is to plot an
-   associated coordinate grid ({\em{e.g.}}\ Figure~\ref{fig:overgrid})
-   over the displayed image.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.7]{sun210_figures/overgrid_bw.eps}
-   \caption{An example of a displayed image with a coordinate grid
-   plotted over it.}
-   \label{fig:overgrid}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   A common requirement when displaying image data is to plot an
-   associated coordinate grid over the displayed image ({\em{e.g.}}\
-   the following Figure):
-   \begin{quote}
-   \begin{figure}[bhtp]
-   \label{fig:overgrid}
-   \includegraphics[scale=0.8]{sun210_figures/overgrid.eps}
-   \caption{An example of a displayed image with a coordinate grid
-   plotted over it.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-The use of AST in such circumstances is independent of the underlying
-graphics system, so starting up the graphics system, setting up a
-coordinate system, displaying the image, and closing down afterwards
-can all be done using the graphics routines you would normally use.
-
-However, displaying an image at a precise location can be a little
-fiddly with some graphics systems, and obviously the grid drawn by AST
-will not be accurately registered with the image unless this is done
-correctly. In the following template, we therefore illustrate both
-steps, basing the image display on the PGPLOT graphics
-package.\footnote{An interface is provided with AST that allows it to
-use PGPLOT (\xref{SUN/15}{sun15}{}) for its graphics, although
-interfaces to other graphics systems may also be written.}  Plotting a
-coordinate grid with AST then becomes a relatively minor part of what
-is almost a complete graphics program.
-
-Once again, we assume that a pointer, WCSINFO, to a suitable \htmlref{FrameSet}{FrameSet}
-associated with the image has already been obtained
-(\secref{ss:howtoreadwcs}).
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION BBOX( 4 )
-      INTEGER NX, NY, PGBEG, PLOT
-      REAL DATA( NX, NY ), GBOX( 4 ), HI, LO, SCALE, TR( 6 )
-      REAL X1, X2, XLEFT, XRIGHT, Y1, Y2, YBOTTOM, YTOP
-
-      ...
-
-*  Access the image data, which we assume will be stored in the real
-*  2-dimensional array DATA with dimension sizes NX and NY. Also
-*  derive limits for scaling it, which we assign to the variables HI
-*  and LO.
-      <this stage depends on your data system, so is not shown>
-
-*  Open PGPLOT using the device given by environment variable
-*  PGPLOT_DEV and check for success.
-      IF ( PGBEG( 0, ' ', 1, 1 ) .EQ. 1 ) THEN
-
-*  Clear the screen and ensure equal scales on both axes.
-         CALL PGPAGE
-         CALL PGWNAD( 0.0, 1.0, 0.0, 1.0 )
-
-*  Obtain the extent of the plotting area (not strictly necessary for
-*  PGPLOT, but possibly for other graphics systems). From this, derive
-*  the display scale in graphics units per pixel so that the image
-*  will fit within the display area.
-         CALL PGQWIN( X1, X2, Y1, Y2 )
-         SCALE = MIN( ( X2 - X1 ) / NX, ( Y2 - Y1 ) / NY )
-
-*  Calculate the extent of the area in graphics units that the image
-*  will occupy, so as to centre it within the display area.
-         XLEFT   = 0.5 * ( X1 + X2 - NX * SCALE )
-         XRIGHT  = 0.5 * ( X1 + X2 + NX * SCALE )
-         YBOTTOM = 0.5 * ( Y1 + Y2 - NY * SCALE )
-         YTOP    = 0.5 * ( Y1 + Y2 + NY * SCALE )
- 
-*  Set up a PGPLOT coordinate transformation matrix and display the
-*  image data as a grey scale map (these details are specific to
-*  PGPLOT).
-         TR( 1 ) = XLEFT - 0.5 * SCALE
-         TR( 2 ) = SCALE
-         TR( 3 ) = 0.0
-         TR( 4 ) = YBOTTOM - 0.5 * SCALE
-         TR( 5 ) = 0.0
-         TR( 6 ) = SCALE
-         CALL PGGRAY( DATA, NX, NY, 1, NX, 1, NY, HI, LO, TR )
-
-*  BEGINNING OF AST BIT
-*  ====================
-*  Store the locations of the bottom left and top right corners of the
-*  region used to display the image, in graphics coordinates.
-         GBOX( 1 ) = XLEFT
-         GBOX( 2 ) = YBOTTOM
-         GBOX( 3 ) = XRIGHT
-         GBOX( 4 ) = YTOP
-
-*  Similarly, store the locations of the image's bottom left and top
-*  right corners, in pixel coordinates -- with the first pixel centred
-*  at (1,1).
-         BBOX( 1 ) = 0.5D0
-         BBOX( 2 ) = 0.5D0
-         BBOX( 3 ) = NX + 0.5D0
-         BBOX( 4 ) = NY + 0.5D0
-
-*  Create a Plot, based on the FrameSet associated with the
-*  image. This attaches the Plot to the graphics surface so that it
-*  matches the displayed image. Specify that a complete set of grid
-*  lines should be drawn (rather than just coordinate axes).
-         PLOT = AST_PLOT( WCSINFO, GBOX, BBOX, 'Grid=1', STATUS )
-
-*  Optionally, we can now set other Plot attributes to control the
-*  appearance of the grid. The values assigned here use the
-*  colour/font indices defined by the underlying graphics system.
-         CALL AST_SET( PLOT, 'Colour(grid)=2, Font(textlab)=3', STATUS )
-
-*  Use the Plot to draw the coordinate grid.
-         CALL AST_GRID( PLOT, STATUS )
-
-         <maybe some more AST graphics here>
-
-*  Annul the Plot when finished (or use the AST_BEGIN/AST_END
-*  technique shown earlier).
-         CALL AST_ANNUL( PLOT, STATUS )
-
-*  END OF AST BIT
-*  ==============
-
-*  Close down the graphics system.
-         CALL PGEND
-      END IF
-\end{verbatim}
-\normalsize
-
-Note that once you have set up a \htmlref{Plot}{Plot} which is aligned with a
-displayed image, you may also use it to generate further graphical
-output of your own, specified in the image's world coordinate system
-(such as markers to represent astronomical objects, annotation,
-{\em{etc.}}). There is also a range of Plot attributes which gives
-control over most aspects of the output's appearance.  For details of
-the facilities available, see \secref{ss:plots} and the description of
-the Plot class in \appref{ss:classdescriptions}.
-
-For details of how to build a graphics program which uses PGPLOT, see
-\secref{ss:howtobuild} and the description of the \htmlref{ast\_link}{ast_link} command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoswitchgrid}\ldots Switch to Plot a Different Celestial Coordinate Grid}
-
-Once you have set up a \htmlref{Plot}{Plot} to draw a coordinate grid
-(\secref{ss:howtoplotgrid}), it is a simple matter to change things so
-that the grid represents a different celestial coordinate system. For
-example, after creating the Plot with \htmlref{AST\_PLOT}{AST_PLOT}, you could use:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( PLOT, 'System=Galactic', STATUS )
-\end{verbatim}
-\normalsize
-or:
-\small
-\begin{verbatim}
-      CALL AST_SET( PLOT, 'System=FK5, Equinox=J2010', STATUS )
-\end{verbatim}
-\normalsize
-
-and any axes and/or grid drawn subsequently would represent the new
-celestial coordinate system you specified.  Note, however, that this
-will only work if the original grid represented celestial coordinates
-of some kind (see \secref{ss:howtotestforcelestial} for how to
-determine if this is the case\footnote{Note that the methods applied
-to a \htmlref{FrameSet}{FrameSet} may be used equally well with a Plot.}). If it did not,
-you will get an error message.
-
-For more information about the celestial coordinate systems available,
-see the descriptions of the \htmlref{System}{System}, \htmlref{Equinox}{Equinox} and \htmlref{Epoch}{Epoch} attributes in
-\appref{ss:attributedescriptions}.
-
-\subsection{\ldots Give a User Control Over the Appearance of a Plot}
-
-The idea of using a \htmlref{Plot}{Plot}'s attributes to control the appearance of the
-graphical output it produces (\secref{ss:howtoplotgrid} and
-\secref{ss:howtoswitchgrid}) can easily be extended to allow the user
-of a program complete control over such matters.
-
-For instance, if the file ``plot.config'' contains a series of
-plotting options in the form of Plot attribute assignments (see below
-for an example), then we could create a Plot and implement these
-assignments before producing the graphical output as follows:
-
-\small
-\begin{verbatim}
-      CHARACTER LINE( 120 )
-      INTEGER BASE
-
-      ...
-
-*  Create a Plot and define the default appearance of the graphical
-*  output it will produce.
-      PLOT = AST_PLOT( WCSINFO, GBOX, PBOX,
-     :                 'Grid=1, Colour(grid)=2, Font(textlab)=3',
-     :                 STATUS )
-
-*  Obtain the value of any Plot attributes we want to preserve.
-      BASE = AST_GETI( PLOT, 'Base', STATUS )
-
-*  Open the plot configuration file, if it exists.
-      OPEN ( 1, FILE = 'plot.config', STATUS = 'OLD', ERR = 8 )
-
-*  Read each line of text and use it to set new Plot attribute
-*  values. Close the file when done.
- 6    CONTINUE
-         READ ( 1, '(A)', END = 7 ) LINE
-         CALL AST_SET( PLOT, LINE, STATUS )
-      GO TO 6
- 7    CLOSE ( 1 )
- 8    CONTINUE
-
-*  Restore any attribute values we are preserving.
-      CALL AST_SETI( PLOT, 'Base', BASE, STATUS )
-
-*  Produce the graphical output (e.g.).
-      CALL AST_GRID( PLOT, STATUS )
-\end{verbatim}
-\normalsize
-
-Notice that we take care that the Plot's \htmlref{Base}{Base} attribute is preserved
-so that the user cannot change it. This is because graphical output
-will not be produced successfully if the base \htmlref{Frame}{Frame} does not describe
-the plotting surface to which we attached the Plot when we created it.
-
-The arrangement shown above allows the contents of the ``plot.config''
-file to control most aspects of the graphical output produced
-(including the coordinate system used; the colour, line style,
-thickness and font used for each component; the positioning of axes
-and tick marks; the precision, format and positioning of labels;
-{\em{etc.}}) {\em{via}} assignments of the form:
-
-\begin{quote}
-\small
-\begin{verbatim}
-System=Galactic, Equinox = 2001
-Border = 1, Colour( border ) = 1
-Colour( grid ) = 2
-DrawAxes = 1
-Colour( axes ) = 3
-Digits = 8
-Labelling = Interior
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For a more sophisticated interface, you could obviously perform
-pre-processing on this input---for example, to translate words like
-``red'', ``green'' and ``blue'' into colour indices, to permit
-comments and blank lines, {\em{etc.}}
-
-For a full list of the attributes that may be used to control the
-appearance of graphical output, see the description of the Plot class
-in \appref{ss:classdescriptions}. For a complete description of each
-individual attribute ({\em{e.g.}}\ those above), see the attribute's
-entry in \appref{ss:attributedescriptions}.
-
-\cleardoublepage
-\section{\label{ss:primer}An AST Object Primer}
-
-The AST library deals throughout with entities called Objects and a
-basic understanding of how to handle these is needed before you can
-use the library effectively.  If you are already familiar with an
-object-oriented language, such as C$++$, few of the concepts should
-seem new to you.  Be aware, however, that AST is designed to be used
-{\em{via}} fairly conventional Fortran and C interfaces, so some
-things have to be done a little differently.
-
-If you are not already familiar with object-oriented programming, then
-don't worry---we will not emphasise this aspect more than is necessary
-and will not assume any background knowledge.  Instead, this section
-concentrates on presenting all the fundamental information you will
-need, explaining how AST Objects behave and how to manipulate them
-from conventional Fortran programs.
-
-If you like to read documents from cover to cover, then you can
-consider this section as an introduction to the programming techniques
-used in the rest of the document. Otherwise, you may prefer to skim
-through it on a first reading and return to it later as reference
-material.
-
-\subsection{AST Objects}
-
-An AST \htmlref{Object}{Object} is an entity which is used to store information and
-Objects come in various kinds, called {\em{classes,}} according to the
-sort of information they hold. Throughout this section, we will make
-use of a simple Object belonging to the ``\htmlref{ZoomMap}{ZoomMap}'' class to
-illustrate many of the basic concepts.
-
-A ZoomMap is an Object that contains a recipe for converting
-coordinates between two hypothetical coordinate systems.  It does this
-by multiplying all the coordinate values by a constant called the
-{\em{\htmlref{Zoom}{Zoom} factor.}}  A ZoomMap is a very simple Object which exists
-mainly for use in examples. It allows us to illustrate the ways in
-which Objects are manipulated and to introduce the concept of a
-\htmlref{Mapping}{Mapping}---a recipe for converting coordinates---which is fundamental
-to the way the AST library works.
-
-\subsection{\label{ss:objectcreation}Object Creation and Pointers}
-
-Let us first consider how to create a \htmlref{ZoomMap}{ZoomMap}. This is done very
-simply as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER STATUS, ZOOMMAP
-
-      STATUS = 0
-
-      ...
-
-      ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The first step is to include the file AST\_PAR which defines the
-interface to the AST library and, amongst other things, declares
-\htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP} to be an integer function.  We then declare an integer
-variable ZOOMMAP to receive the result and an integer STATUS variable
-to hold the error status, which we initialise to zero. Next, we invoke
-AST\_ZOOMMAP to create the ZoomMap. The pattern is the same for all
-other classes of AST \htmlref{Object}{Object}---you simply prefix ``AST\_'' to the class
-name to obtain the function that creates the Object.
-
-These functions are called {\em{constructor functions,}} or simply
-{\em{constructors}} (you can find an individual description of all AST
-functions in \appref{ss:functiondescriptions}) and the arguments
-passed to the constructor are used to initialise the new Object. In
-this case, we specify 2 as the number of coordinates ({\em{i.e.}}\ we
-are going to work in a 2-dimensional
-space) and 5.0D0 as the \htmlref{Zoom}{Zoom} factor to be applied. Note that this is a
-Fortran double precision value. We will return to the final two
-arguments, a blank string and the error status, shortly
-(\secref{ss:attributeinitialisation} and \secref{ss:errordetection}).
-
-The integer value returned by the constructor is termed an {\em{Object
-pointer}} or, in this case, a {\em{ZoomMap pointer.}} This pointer is not
-an Object itself, but is a value used to refer to the Object. You
-should be careful not to modify any Object pointer yourself, as this
-may render it invalid. Instead, you perform all subsequent operations
-on the Object by passing this pointer to other AST routines.
-
-\subsection{\label{ss:objecthierarchy}The Object Hierarchy}
-
-Now that we have created our first \htmlref{ZoomMap}{ZoomMap}, let us examine how it
-relates to other kinds of \htmlref{Object}{Object} before investigating what we can do
-with it.
-
-We have so far indicated that a ZoomMap is a kind of Object and have
-also mentioned that it is a kind of \htmlref{Mapping}{Mapping} as well. These statements
-can be represented very simply using the following hierarchy:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
-   Mapping
-      ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-which is a way of stating that a ZoomMap is a special class of
-Mapping, while a Mapping, in turn, is a special class of Object.  This
-is exactly like saying that an Oak is a special form of Tree, while a
-Tree, in turn, is a special form of Plant. This may seem almost
-trivial, but before you turn to read something less dull, be assured
-that it is a very important idea to keep in mind in what follows.
-
-If we look at some of the other Objects used by the AST library, we
-can see how these are all related in a similar way (don't worry about
-what they do at this stage):
-\label{ss:mappinghierarchy}
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
-   Mapping
-      Frame
-         FrameSet
-            Plot
-      UnitMap
-      ZoomMap
-   Channel
-      FitsChan
-      XmlChan
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notice that there are several different types of Mapping available
-({\em{i.e.}}\ there are classes of Object indented beneath the
-``Mapping'' heading) and, in addition, other types of Object which are
-not Mappings---Channels for instance (which are at the same
-hierarchical level as Mappings).
-
-The most specialised Object we have shown here is the \htmlref{Plot}{Plot} (which we
-will not discuss in detail until \secref{ss:plots}). As you can see, a
-Plot is a \htmlref{FrameSet}{FrameSet}\ldots\ and a \htmlref{Frame}{Frame}\ldots\ and a Mapping\ldots\ and,
-like everything else, ultimately an Object.
-
-What this means is that you can use a Plot not only for its own
-specialised behaviour, but also whenever any of these other
-less-specialised classes of Object is called for. The general rule is
-that an Object of a particular class may substitute for any of the
-classes appearing above it in this hierarchy. The Object is then said
-to {\em{inherit}} the behaviour of these higher classes. We can
-therefore use our ZoomMap whenever a ZoomMap, a Mapping or an Object
-is called for.
-
-Sometimes, this can lead to some spectacular short-cuts by avoiding
-the need to break large Objects down in order to access their
-components. With some practice and a little lateral thinking you
-should soon be able to spot opportunities for this.
-
-You can find the full {\em{class hierarchy}}, as this is called, for
-the AST library in \appref{ss:classhierarchy} and you may need to
-refer to it occasionally until you are familiar with the classes you
-need to use.
-
-\subsection{\label{ss:displayingobjects}Displaying Objects}
-
-Let us now return to the \htmlref{ZoomMap}{ZoomMap} that we created earlier
-(\secref{ss:objectcreation}) and examine what it's made of.
-There is a routine for doing this, called \htmlref{AST\_SHOW}{AST_SHOW}, which is provided
-mainly for looking at Objects while you are debugging programs.
-
-If you consult the description of AST\_SHOW in
-\appref{ss:functiondescriptions}, you will find that it takes a
-pointer to an \htmlref{Object}{Object} as its argument (in addition to the usual STATUS
-argument). Although we have only a ZoomMap pointer available,
-fortunately this is not a problem. If you refer to the brief class
-hierarchy described above (\secref{ss:mappinghierarchy}), you will see
-that a ZoomMap is an Object, albeit a specialised one, so it inherits
-the properties of all Objects and can be substituted wherever an
-Object is required.  We can therefore pass our ZoomMap pointer
-directly to AST\_SHOW, as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SHOW( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this will appear on the standard output stream and
-should look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Begin ZoomMap
-   Nin = 2
-IsA Mapping
-   Zoom = 5
-End ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the ``Begin'' and ``End'' lines mark the beginning and end of
-the ZoomMap, while the values 2 and 5 are simply the values we
-supplied to initialise it (\secref{ss:objectcreation}). These have
-been given simple names to make them easy to refer to.
-
-The line in the middle which says ``IsA~\htmlref{Mapping}{Mapping}'' is a dividing line
-between the two values. It indicates that the ``\htmlref{Nin}{Nin}'' value is a
-property shared by all Mappings, so the ZoomMap has inherited this
-from its {\em{parent class}} (Mapping). The ``\htmlref{Zoom}{Zoom}'' value, however,
-is specific to a ZoomMap and isn't shared by other kinds of Mappings.
-
-\subsection{\label{ss:gettingattributes}Getting Attribute Values}
-
-We saw above (\secref{ss:displayingobjects}) how to display the
-internal values of an \htmlref{Object}{Object}, but what about accessing these values
-from a program?  Not all internal Object values are accessible in this
-way, but many are. Those that are, are called {\em{attributes}}. A
-description of all the attributes used by the AST library can be found
-in \appref{ss:attributedescriptions}.
-
-Attributes come in several data types (character string, integer,
-boolean and floating point) and there is a standard way of obtaining
-their values. As an example, consider obtaining the value of the \htmlref{Nin}{Nin}
-attribute for the \htmlref{ZoomMap}{ZoomMap} created earlier. This could be done as
-follows:
-
-\small
-\begin{verbatim}
-      INTEGER NIN
-
-      ...
-
-      NIN = AST_GETI( ZOOMMAP, 'Nin', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the integer function AST\_GETI is used to extract the attribute
-value by giving it the ZoomMap pointer and the attribute name
-(attribute names are not case sensitive, but we have used consistent
-capitalisation in this document in order to identify them). Remember
-to use the AST\_PAR include file to save having to declare AST\_GETI
-as integer yourself.
-
-If we had wanted the value of the \htmlref{Zoom}{Zoom} attribute, we would probably
-have used AST\_GETD instead, this being a double precision version of
-the same function, for example:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION ZOOM
-
-      ...
-
-      ZOOM = AST_GETD( ZOOMMAP, 'Zoom', STATUS )
-\end{verbatim}
-\normalsize
-
-However, we could equally well have read the Nin value as double
-precision, or the Zoom value as an integer, or whatever we wanted.
-
-The data type you want returned is specified simply by replacing the
-final character of the AST\_GETx function name with C~(character),
-D~(double precision), I~(integer), L~(logical) or R~(real). If
-possible, the value is converted to the type you want. If not, an
-error message will result. In converting from integer to logical, zero
-is regarded as .FALSE.\ and non-zero as .TRUE.. Note that all floating
-point values are stored internally as double precision. Boolean values
-are stored as integers, but only take the values 1 and 0 (for
-true/false).
-
-\subsection{\label{ss:settingattributes}Setting Attribute Values}
-
-Some attribute values are read-only and cannot be altered after an
-\htmlref{Object}{Object} has been created. The \htmlref{Nin}{Nin} attribute of a \htmlref{ZoomMap}{ZoomMap} (describing
-the number of coordinates) is like this. It is defined when the
-ZoomMap is created, but cannot then be altered.
-
-Other attributes, however, can be modified whenever you want. A
-ZoomMap's \htmlref{Zoom}{Zoom} attribute is like this. If we wanted to change it, this
-could be done simply as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SETD( ZOOMMAP, 'Zoom', 99.6D0, STATUS )
-\end{verbatim}
-\normalsize
-
-which sets the value to 99.6 (double precision). As when getting an
-attribute value (\secref{ss:gettingattributes}), you have a choice of
-which data type you will use to supply the new value. For instance,
-you could use an integer value, as in:
-
-\small
-\begin{verbatim}
-      CALL AST_SETI( ZOOMMAP, 'Zoom', 99, STATUS )
-\end{verbatim}
-\normalsize
-
-and the necessary data conversion would occur.  You specify the data
-type you want to supply simply by replacing the final character of the
-AST\_SETx routine name with C~(character), D~(double precision),
-I~(integer), L~(logical) or R~(real).  Setting a boolean attribute to
-any non-zero integer causes it to take the value 1.
-
-An alternative way of setting attribute values for Objects is to use
-the \htmlref{AST\_SET}{AST_SET} routine ({\em{i.e.}}\ with no final character specifying
-a data type). In this case, you supply the attribute values in a
-character string. The big advantage of this method is that you can
-assign values to several attributes at once, separating them with
-commas. This also reads more naturally in programs. For example:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( ZOOMMAP, 'Zoom=99.6, Report=1', STATUS )
-\end{verbatim}
-\normalsize
-
-would set values for both the Zoom attribute and the \htmlref{Report}{Report} attribute
-(about which more shortly---\secref{ss:transforming}). You don't really
-have to worry about data types with this method, as any character
-representation will do (although you must use 0/1 instead of
-.TRUE./.FALSE., which are not supported).
-
-\label{ss:attributeinitialisation}
-
-Finally, a very convenient way of setting attribute values is to do so
-at the same time as you create an Object. Every Object constructor
-function has a penultimate character argument which allows you to do
-this. Although you can simply leave this blank, it is an ideal
-opportunity to initialise the Object to have just the attributes you
-want. For example, we might have created our original ZoomMap with:
-
-\small
-\begin{verbatim}
-      ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, 'Report=1', STATUS )
-\end{verbatim}
-\normalsize
-
-and it would then start life with its Report attribute set to 1.
-
-\subsection{\label{ss:defaultingattributes}Testing, Clearing and Defaulting Attributes}
-
-You can use the AST\_GETx family of routines
-(\secref{ss:gettingattributes}) to get a value for any \htmlref{Object}{Object} attribute
-at any time, regardless of whether a value has previously been set for
-it. If no value has been set, the AST library will generate a suitable
-default value.
-
-Often, the default value of an attribute will not simply be trivial
-(zero or blank) but may involve considerable processing to
-calculate. Wherever possible, defaults are designed to be real-life,
-sensible values that convey information about the state of the
-Object. In particular, they may often be based on the values of other
-attributes, so their values may change in response to changes in these
-other attributes. The \htmlref{ZoomMap}{ZoomMap} class that we have studied so far is a
-little too simple to show this behaviour, but we will meet it later
-on.
-
-An attribute that returns a default value in this way is said to be
-{\em{un-set.}} Conversely, once an explicit value has been assigned to
-an attribute, it becomes {\em{set}} and will always return precisely
-that value, never a default.
-
-The distinction between set and un-set attributes is important and
-affects the behaviour of several key routines in the AST library. You
-can test if an attribute is set using the logical function \htmlref{AST\_TEST}{AST_TEST},
-as in:
-
-\small
-\begin{verbatim}
-      IF ( AST_TEST( ZOOMMAP, 'Report', STATUS ) ) THEN
-         <the Report attribute is set>
-      END IF
-\end{verbatim}
-\normalsize
-
-(as usual, remember to include the AST\_PAR file to declare the
-function as LOGICAL, or make this declaration yourself).
-
-Once an attribute is set, you can return it to its un-set state using
-\htmlref{AST\_CLEAR}{AST_CLEAR}. The effect is as if it had never been set in the first
-place. For example:
-
-\small
-\begin{verbatim}
-      CALL AST_CLEAR( ZOOMMAP, 'Report', STATUS )
-\end{verbatim}
-\normalsize
-
-would ensure that the default value of the \htmlref{Report}{Report} attribute is used
-subsequently.
-
-%\subsection{TBW--Handling Character Attributes}
-
-\subsection{\label{ss:transforming}Transforming Coordinates}
-
-We now have the necessary apparatus to start using our \htmlref{ZoomMap}{ZoomMap} to show
-what it is really for. Here, we will also encounter a routine that is
-a little more fussy about the type of pointer it will accept.
-
-The purpose of a ZoomMap is to multiply coordinates by a constant zoom
-factor. To witness this in action, we will first set the \htmlref{Report}{Report}
-attribute for our ZoomMap to a non-zero value:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( ZOOMMAP, 'Report=1', STATUS )
-\end{verbatim}
-\normalsize
-
-This boolean (integer) attribute, which is present in all Mappings
-(and a ZoomMap is a \htmlref{Mapping}{Mapping}), causes the automatic display of all
-coordinate values that the Mapping converts. It is not a good idea to
-leave this feature turned on in a finished program, but it can save a
-lot of work during debugging.
-
-Our next step is to set up some coordinates for the ZoomMap to work
-on, using two arrays XIN and YIN, and two arrays to receive the
-transformed coordinates, XOUT and YOUT.  Note that these arrays are
-double precision, as are all coordinate data processed by the AST
-library:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION XIN( 10 ), YIN( 10 ), XOUT( 10 ), YOUT( 10 )
-      DATA XIN / 0D0, 1D0, 2D0, 3D0, 4D0, 5D0, 6D0, 7D0, 8D0, 9D0 /
-      DATA YIN / 0D0, 2D0, 4D0, 6D0, 8D0, 10D0, 12D0, 14D0, 16D0, 18D0 /
-\end{verbatim}
-\normalsize
-
-We will now use the routine \htmlref{AST\_TRAN2}{AST_TRAN2} to transform the input
-coordinates. This is the most commonly-used (2-dimensional) coordinate
-transformation routine. If you look at its description in
-\appref{ss:functiondescriptions}, you will see that it requires a
-pointer to a Mapping, so we cannot supply just any old \htmlref{Object}{Object} pointer,
-as we could with the routines discussed previously. If we passed it a
-pointer to an inappropriate Object, an error message would result.
-
-Fortunately, a ZoomMap is a Mapping (\appref{ss:classhierarchy}), so we
-can use it with AST\_TRAN2 to transform our coordinates, as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_TRAN2( ZOOMMAP, 10, XIN, YIN, .TRUE., XOUT, YOUT, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, 10 is the number of points we want to transform and the fifth
-argument value of .TRUE.\ indicates that we want to transform in the
-{\em{forward}} direction (from input to output).
-
-Because our ZoomMap's Report attribute is set to 1, this will cause
-the effects of the ZoomMap on the coordinates to be displayed on the
-standard output stream:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(1, 2) --> (5, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, 8) --> (20, 40)
-(5, 10) --> (25, 50)
-(6, 12) --> (30, 60)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This shows the coordinate values of each point both before and after
-the ZoomMap is applied. You can see that each coordinate value has
-been multiplied by the factor 5 determined by the \htmlref{Zoom}{Zoom} attribute
-value. The transformed coordinates are now stored in the XOUT and YOUT
-arrays.
-
-If we wanted to transform in the opposite direction, we need simply
-change the fifth argument of AST\_TRAN2 from .TRUE. to .FALSE.. We can
-also feed the output coordinates from the above back into the routine:
-
-\small
-\begin{verbatim}
-      CALL AST_TRAN2( ZOOMMAP, 10, XOUT, YOUT, .FALSE., XIN, YIN, STATUS )
-\end{verbatim}
-\normalsize
-
-The output would then look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(5, 10) --> (1, 2)
-(10, 20) --> (2, 4)
-(15, 30) --> (3, 6)
-(20, 40) --> (4, 8)
-(25, 50) --> (5, 10)
-(30, 60) --> (6, 12)
-(35, 70) --> (7, 14)
-(40, 80) --> (8, 16)
-(45, 90) --> (9, 18)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is termed the {\em{inverse}} transformation (we have converted
-from output to input) and you can see that the original coordinates
-have been recovered by dividing by the Zoom factor.
-
-\subsection{\label{ss:annullingpointers}Managing Object Pointers}
-
-So far, we have looked at creating Objects and using them in various
-simple ways but have not yet considered how to get rid of them again.
-
-Every \htmlref{Object}{Object} consumes various computer resources (principally memory)
-and should be disposed of when it is no longer required, so as to free
-up these resources. One way of doing this (not necessarily the
-best---\secref{ss:contexts}) is to {\em{annul}} each Object pointer once
-you have finished with it, using \htmlref{AST\_ANNUL}{AST_ANNUL}. For example:
-
-\small
-\begin{verbatim}
-      CALL AST_ANNUL( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This indicates that you have finished with the pointer and sets it to
-the null value AST\_\_NULL (as defined in the AST\_PAR include file),
-so that any attempt to use it again will generate an error message.
-
-In general, this process may not delete the Object, because there may
-still be other pointers associated with it. However, each Object
-maintains a count of the number of pointers associated with it and
-will be deleted if you annul the final pointer. Using AST\_ANNUL
-consistently will therefore ensure that all Objects are disposed of at
-the correct time. You can determine how many pointers are associated
-with an Object by examining its (read-only) \htmlref{RefCount}{RefCount} attribute.
-
-\subsection{\label{ss:contexts}AST Pointer Contexts---Begin and End}
-
-The use of \htmlref{AST\_ANNUL}{AST_ANNUL} (\secref{ss:annullingpointers}) is not completely
-foolproof, however. Consider the following:
-
-\small
-\begin{verbatim}
-      CALL AST_SHOW( AST_ZOOMMAP( 2, 5.ODO, ' ', STATUS ), STATUS )
-\end{verbatim}
-\normalsize
-
-This creates a \htmlref{ZoomMap}{ZoomMap} and displays it on standard output
-(\secref{ss:displayingobjects}). Using function invocations as
-arguments to other routines in this way is very convenient because it
-avoids the need for intermediate pointer variables. However, the
-pointer generated by \htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP} is still active, and since we have
-not stored its value, we cannot use AST\_ANNUL to annul it. The
-ZoomMap will therefore stay around until the end of the program.
-
-A simple way to avoid this problem is to enclose all use of AST
-routines between calls to \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END}, for example:
-
-\small
-\begin{verbatim}
-      CALL AST_BEGIN( STATUS )
-      CALL AST_SHOW( AST_ZOOMMAP( 2, 5.ODO, ' ', STATUS ), STATUS )
-      CALL AST_END( STATUS )
-\end{verbatim}
-\normalsize
-
-When the AST\_END call executes, every \htmlref{Object}{Object} pointer created since
-the previous AST\_BEGIN call is automatically annulled and any Objects
-left without pointers are deleted. This provides a simple solution to
-managing Objects and their pointers, and allows you to create Objects
-very freely without needing to keep detailed track of each one.
-Because this is so convenient, we implicitly assume that AST\_BEGIN
-and AST\_END are used in most of the examples given in this document.
-Pointer management is not generally shown explicitly unless it is
-particularly relevant to the point being illustrated.
-
-If necessary, calls to AST\_BEGIN and AST\_END may be nested, like
-\htmlref{IF}{IF}\ldots ENDIF blocks in Fortran, to define a series of AST pointer
-contexts. Each call to AST\_END will then annul only those Object
-pointers created since the matching call to AST\_BEGIN.
-
-\subsection{Exporting, Importing and Exempting AST Pointers}
-The \htmlref{AST\_EXPORT}{AST_EXPORT} routine allows you to export particular pointers from
-one AST context (\secref{ss:contexts}) to the next outer one, as
-follows:
-
-\small
-\begin{verbatim}
-      CALL AST_EXPORT( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This would identify the pointer stored in ZOOMMAP as being required after
-the end of the current AST context. It causes any pointers nominated
-in this way to survive the next call to \htmlref{AST\_END}{AST_END} (but only one such
-call) unscathed, so that they are available to the next outer context.
-This facility is not needed often, but is invaluable when the purpose
-of your \htmlref{AST\_BEGIN}{AST_BEGIN}\ldots AST\_END block is basically to generate an
-\htmlref{Object}{Object} pointer. Without this, there is no way of getting that pointer
-out.
-
-The \htmlref{AST\_IMPORT}{AST_IMPORT} routine can be used in a similar manner to import a
-pointer into the current context, so that it is deleted when the current
-context is closed using AST\_END.
-
-
-Sometimes, you may also want to exempt a pointer from all the effects
-of AST contexts. You should not need to do this often, but it will
-prove essential if you ever need to write a library of routines that
-stores AST pointers as part of its own internal data. Without some
-form of exemption, the caller of your routines could cause the
-pointers you have stored to be annulled---thus corrupting your
-internal data---simply by using AST\_END. To avoid this, you should
-use \htmlref{AST\_EXEMPT}{AST_EXEMPT} on each pointer that you store, for example:
-
-\small
-\begin{verbatim}
-      CALL AST_EXEMPT( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-This will prevent the pointer being affected by any subsequent use of
-AST\_END. Of course, it then becomes your responsibility to annul this
-pointer (using \htmlref{AST\_ANNUL}{AST_ANNUL}) when it is no longer required.
-
-
-
-
-\subsection{\label{ss:copyingobjects}Copying Objects}
-
-The AST library makes extensive use of pointers, not only for
-accessing Objects directly, but also as a means of storing Objects
-inside other Objects (a number of classes of \htmlref{Object}{Object} are designed to
-hold collections of other Objects). Rather than copy an Object in its
-entirety, a pointer to the interior Object is simply stored in the
-enclosing Object.
-
-This means that Objects may frequently not be completely independent
-of each other because, for instance, they both contain pointers to the
-same sub-Object. In this situation, changing one Object (say assigning
-an attribute value) may affect the other one {\em{via}} the common
-Object.
-
-It is difficult to describe all cases where this may happen, so you
-should always be alert to the possibility. Fortunately, there is a
-simple solution. If you require two Objects to be independent, then
-simply use \htmlref{AST\_COPY}{AST_COPY} to make a copy of one, {\em{e.g:}}
-
-\small
-\begin{verbatim}
-      INTEGER ZOOMMAP1, ZOOMMAP2
-
-      ...
-
-      ZOOMMAP2 = AST_COPY( ZOOMMAP1, STATUS )
-\end{verbatim}
-\normalsize
-
-This process will create a true copy of any Object and return a
-pointer to the copy. This copy will not contain any pointers to any
-component of the original Object (everything is duplicated), so you
-can then modify it safely, without fear of affecting either the
-original or any other Object.
-
-%\subsection{TBW - Inheritance}
-
-
-\subsection{\label{ss:errordetection}Error Detection}
-
-If an error occurs in an AST routine (for example, if you supply an
-invalid argument, such as a pointer to the wrong class of \htmlref{Object}{Object}), an
-error message will be written to the standard error stream and the
-function will immediately return.
-
-To indicate that an error has occurred, each AST routine that can
-potentially fail has a final integer {\em{error status}} argument
-called STATUS.  This is both an input and an output argument.
-Normally, you should declare a single error status variable and pass
-it as the STATUS argument to every AST routine you invoke.  This
-variable must initially be cleared ({\em{i.e}}\ set to
-zero\footnote{We will assume throughout that the ``OK'' value is zero,
-as it currently is. However, a different value could, in principle, be
-used if the environment in which AST is running requires it. To allow
-for this possibility, you might prefer to use a parameter constant to
-represent the value zero when testing for errors.} to indicate no
-error).  If an error occurs, the STATUS argument is returned set to a
-different {\em{error value}}, which allows you to detect the error, as
-follows:
-
-\small
-\begin{verbatim}
-      STATUS = 0
-
-      ...
-
-      ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, 'Title=My ZoomMap', STATUS )
-      IF ( STATUS .NE. 0 ) THEN
-         <an error has occurred>
-      END IF
-\end{verbatim}
-\normalsize
-
-In this example, an error would be detected because we have attempted
-to set a value for the \htmlref{Title}{Title} attribute of a \htmlref{ZoomMap}{ZoomMap} and a ZoomMap does
-not have such an attribute.
-
-A consequence of the error status variable STATUS being set to an
-error value is that almost all AST routines will subsequently cease to
-function and will instead simply return without action.  This means
-that you do not need to check for errors very frequently. Instead, you
-can usually simply invoke a succession of AST routines. If an error
-occurs in any of them, the following ones will do nothing and you can
-check for the error at the end, for example:
-
-\small
-\begin{verbatim}
-      STATUS = 0
-
-      ...
-
-      CALL AST_ROUTINEA( ... , STATUS )
-      CALL AST_ROUTINEB( ... , STATUS )
-      CALL AST_ROUTINEC( ... , STATUS )
-      IF ( STATUS .NE. 0 ) THEN
-         <an error has occurred>
-      END IF
-\end{verbatim}
-\normalsize
-
-There are, however, a few routines which do not adhere to this general
-rule and which will attempt to execute if their STATUS argument is
-initially set.  These routines, such as \htmlref{AST\_ANNUL}{AST_ANNUL}, are concerned with
-cleaning up and recovering resources. For example, in the following:
-
-\small
-\begin{verbatim}
-      STATUS = 0
-
-      ...
-
-      ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS )
-
-      CALL AST_ROUTINEX( ... , STATUS )
-      CALL AST_ROUTINEY( ... , STATUS )
-      CALL AST_ROUTINEZ( ... , STATUS )
-
-      CALL AST_ANNUL( ZOOMMAP, STATUS )
-      IF ( STATUS .NE. 0 ) THEN
-         <an error has occurred>
-      END IF
-\end{verbatim}
-\normalsize
-
-AST\_ANNUL will execute normally in order to recover the resources
-associated with the ZoomMap that was created earlier, regardless of
-whether an error has occurred in any of the intermediate routines.
-Routines which behave in this way are noted in the relevant
-descriptions in \appref{ss:functiondescriptions}.
-
-If a serious error occurs, you will probably want to abort your
-program, but sometimes you may want to recover and carry on.  This is
-simply done by resetting your error status variable to zero, whereupon
-the AST routines you pass it to will execute normally again.
-
-
-
-
-
-
-
-\cleardoublepage
-\section{\label{ss:mappings}Inter-Relating Coordinate Systems (Mappings)}
-
-In \secref{ss:primer} we used the \htmlref{ZoomMap}{ZoomMap} as an example of a
-\htmlref{Mapping}{Mapping}. We saw how it could be used to transform coordinates from its
-input to its output and back again (\secref{ss:transforming}). We also
-saw how its behaviour could be controlled by setting various
-attributes, such as the \htmlref{Zoom}{Zoom} factor and the \htmlref{Report}{Report} attribute that made
-it display coordinate values as it transformed them.
-
-In this section, we will look at Mappings a bit more thoroughly and
-explore the behaviour which is common to all the Mappings provided by
-AST.  This is good background for what follows, because many of the
-Objects we discuss later will also turn out to be Mappings in various
-disguises.
-
-\subsection{\label{ss:mappingclass}The Mapping Class}
-
-Before we start, it is worth taking a quick look at the \htmlref{Mapping}{Mapping} class
-as a whole and some of the sub-classes it contains:
-
-\begin{quote}
-\begin{verbatim}
-   Mapping
-      CmpMap
-      DssMap
-      GrismMap
-      IntraMap
-      LutMap
-      MathMap
-      MatrixMap
-      PermMap
-      PolyMap
-      SlaMap
-      SpecMap
-      TimeMap
-      UnitMap
-      WcsMap
-      ZoomMap
-
-      Frame
-         <various types of Frame>
-\end{verbatim}
-\end{quote}
-
-The \htmlref{Frame}{Frame} sub-class has been separated out here because it is covered
-in detail in \secref{ss:frames}. We start by looking at the parent
-class, Mapping.
-
-AST does not provide a function to create a basic Mapping
-({\em{i.e.}}\ the AST\_MAPPING constructor does not exist). This is
-because the Mapping class itself is ``virtual'' and basic Mappings are
-of no use in themselves. The Mapping class serves simply to contain
-the various specialised Mappings that exist.
-However, it provides more than just a convenient heading for them
-because it bestows all classes of Mapping with common properties
-({\em{e.g.}}\ attributes) and behaviour.  By examining the Mapping
-class, we are therefore examining the things that all other Mappings
-have in common.
-
-\subsection{The Mapping Model}
-
-The concept of a \htmlref{Mapping}{Mapping} was illustrated in Figure~\ref{fig:mapping}.
-It is a black box which you can supply with a set of coordinate values
-in return for a set of transformed coordinates. The two sets are
-termed {\em{input}} and {\em{output}} coordinates. You can also go
-back the other way and transform output coordinates back into input
-coordinates, as we saw in \secref{ss:transforming}.
-
-\subsection{Input and Output Coordinate Numbers}
-
-In general, the number of coordinates you feed into a \htmlref{Mapping}{Mapping} to
-represent a single point need not be the same as the number that comes
-out. Often these numbers will be the same, and often they will both
-equal 2 (because 2-dimensional coordinate systems are common), but
-this needn't necessarily be the case.
-
-The number of coordinates required to specify an input point is
-represented by the integer attribute \htmlref{Nin}{Nin} and the number required to
-specify an output point is represented by \htmlref{Nout}{Nout}. These are read-only
-attributes common to all Mappings. Generally, their values are fixed
-when a Mapping is created.
-
-In \secref{ss:objectcreation}, we saw how the Nin attribute for a
-\htmlref{ZoomMap}{ZoomMap} was initialised by the call to the constructor function
-\htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP} which created it. In this case, the Nout attribute was
-not needed and it implicitly took the same value as Nout, but we could
-have enquired about its value had we wanted, as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER NOUT, STATUS, ZOOMMAP
-
-      STATUS = 0
-
-      ...
-
-      NOUT = AST_GETI( ZOOMMAP, 'Nout', STATUS )
-\end{verbatim}
-\normalsize
-
-\subsection{Forward and Inverse Transformations}
-
-We stated earlier that a \htmlref{Mapping}{Mapping} may be used to transform coordinates
-either from input to output, or {\em{vice versa.}} These are termed
-its {\em{forward}} and {\em{inverse}} transformations.
-
-This statement was not quite accurate, however, because in general
-Mappings are only {\bf{potentially}} capable of working in both
-directions. In practice, coordinate transformation may only be
-feasible in one direction or the other because some functions are not
-easily inverted (they may be multi-valued, for instance). Allowance
-must be made for this, so each Mapping has two read-only boolean
-(integer) attributes, \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}, which indicate
-whether each transformation is available.
-
-A transformation is available if the corresponding attribute is
-non-zero, otherwise it is not.\footnote{Most of the Mappings provided
-by the AST library work in both directions, although the \htmlref{LutMap}{LutMap} can
-behave otherwise.} If you enquire about the value of these attributes,
-a value of 0 or 1 is returned.  Attempting to use a Mapping to apply a
-transformation which is not available will result in an error.
-
-\subsection{\label{ss:invertingmappings}Inverting Mappings}
-
-An important attribute, common to all Mappings, is the \htmlref{Invert}{Invert}
-flag. This is a boolean (integer) attribute that can be assigned a new
-value at any time. If it is non-zero, it has the effect of
-interchanging the \htmlref{Mapping}{Mapping}'s input and output coordinates and the
-Mapping is then said to be {\em{inverted.}} By default, the Invert
-attribute is zero.
-
-There is no magic in this. There is no fancy arithmetic involved in
-inverting mathematical functions, for instance. The Invert flag is
-simply a switch that interchanges a Mapping's input and output
-ports. If it is non-zero, the Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are
-swapped, its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes are swapped, and
-when you ask for what was once the forward transformation you get the
-inverse transformation instead (and {\em{vice versa}}). When you
-return the Invert attribute to zero, or clear it, the Mapping returns
-to its original behaviour.
-
-Often, the actual value of the Invert attribute is unimportant and you
-simply wish to invert its boolean sense, so that what was the
-Mapping's input becomes its output and {\em{vice versa.}} This is most
-easily accomplished using \htmlref{AST\_INVERT}{AST_INVERT}, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER MAPPING
-
-      ...
-
-      CALL AST_INVERT( MAPPING, STATUS )
-\end{verbatim}
-\normalsize
-
-If the Mapping you have happens to be the wrong way around,
-AST\_INVERT allows you to correct the problem.
-
-\subsection{Finding the Rate of Change of a Mapping Output}
-The
-\htmlref{AST\_RATE}{AST_RATE}
-function can be used to find the rate of change of any \htmlref{Mapping}{Mapping} output
-with respect to any Mapping input, at a given input position. The method
-used produces good accuracy (typically a relative error of 10E-10 or
-less) but may require the Mapping to be evaluated 100 or more times. 
-An estimate of the second derivative is also produced by this function.
-
-
-\subsection{Reporting Coordinate Transformations}
-
-We have already seen (\secref{ss:transforming}) how the boolean
-(integer) \htmlref{Report}{Report} attribute of a \htmlref{Mapping}{Mapping} works. If it is non-zero, the
-operation of transforming a set of coordinates will result in a report
-being written to standard output. This will display the coordinate
-values before and after transformation. It can save considerable time
-during program development by eliminating the need to add loops and
-output statements to your program.
-
-In a finished program, however, you should be careful that the Report
-attribute is not set to a non-zero value unless you want to see the
-output (there may often be rather a lot of this!). To help prevent
-unwanted output being produced by accident, the Report attribute is
-unusual in that its value is not preserved when a Mapping is copied
-using \htmlref{AST\_COPY}{AST_COPY} (\secref{ss:copyingobjects}). Instead, it reverts to
-its default of zero ({\em{i.e.}}\ un-set) in the copy. It also reverts
-to zero when a Mapping is written out, {\em{e.g.}}\ to a file using a
-\htmlref{Channel}{Channel} (\secref{ss:channels}).
-
-%\subsection{TBW---More on Transforming Coordinates}
-
-\subsection{\label{ss:badcoordinates}Handling Missing (Bad) Coordinate Values}
-
-Even when coordinates can, in principle, be transformed in either
-direction by a \htmlref{Mapping}{Mapping}, there may still be instances where specific
-coordinate values cannot be handled. For example, the Mapping may be
-mathematically intractable ({\em{e.g.}}\ singular) in certain places,
-or it may map a subset of one space on to another, so that some points
-in one space are not represented in the other.  Sky projections often
-show this behaviour, since it is quite common to project only half of
-the celestial sphere on to two dimensions, omitting points on the
-opposite side of the sky. There are many other examples.
-
-To indicate when coordinates cannot be transformed, for whatever
-reason, AST substitutes a special output coordinate value given by the
-parameter constant AST\_\_BAD (as defined in the AST\_PAR include
-file).  Before making use of coordinates generated by any of the AST
-transformation routines, therefore, you may need to check for the
-presence of this value.
-
-Because coordinates with the value AST\_\_BAD can be generated in this
-way, all other AST routines are also capable of recognising this value
-and handling it appropriately. The coordinate transformation routines
-do this by propagating any missing input coordinate information
-through to their output.  This means that if you supply coordinates
-with the value AST\_\_BAD, the returned coordinates are also likely to
-contain this value. Here, for example, is what happens if you use a
-\htmlref{ZoomMap}{ZoomMap} (with \htmlref{Zoom}{Zoom} factor 5) to transform such a set of coordinates:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(<bad>, 2) --> (<bad>, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, <bad>) --> (20, <bad>)
-(5, 10) --> (25, 50)
-(<bad>, <bad>) --> (<bad>, <bad>)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The AST\_\_BAD value is represented by the string ``$<$bad$>$''. This
-is a case of ``garbage in, garbage out'' but at least it's consistent
-garbage that you can recognise!
-
-Note how the presence of the AST\_\_BAD value in one input dimension
-does not necessarily result in the loss of information for all output
-dimensions. Sometimes, such loss will be unavoidable, but in general
-an attempt is made to preserve information as far as possible. The
-exact behaviour will depend on the Mapping involved.
-
-\subsection{\label{ss:unitmapexample}Example---the UnitMap}
-
-The \htmlref{UnitMap}{UnitMap} is the simplest of Mappings. It is a null \htmlref{Mapping}{Mapping}. Its
-purpose is simply to copy coordinate values, unaltered, from its input
-to its output and {\em{vice versa.}}
-
-A UnitMap has no additional attributes beyond those of a basic
-Mapping. Its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are always equal and are
-specified by the first argument supplied to its constructor. For
-example:
-
-\small
-\begin{verbatim}
-      INTEGER UNITMAP
-
-      ...
-
-      UNITMAP = AST_UNITMAP( 2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-will create a UnitMap that copies 2-dimensional coordinates. Inverting
-a UnitMap has no effect beyond changing the value of its \htmlref{Invert}{Invert}
-attribute.
-
-The main use of a UnitMap is to allow a Mapping to be supplied when one
-is required (as an argument to a routine, for example) but you wish
-it to leave coordinate values unchanged.
-
-\subsection{\label{ss:permmapexample}Example---the PermMap}
-
-The \htmlref{PermMap}{PermMap} is a rather more complicated \htmlref{Mapping}{Mapping} than we have met
-previously.  Its purpose is to change the order, or number, of
-coordinates. It is also able to substitute fixed values for
-coordinates.
-
-To illustrate its action, suppose our input coordinates are denoted by
-($x_1,x_2,x_3,x_4$) in a 4-dimensional space and suppose our output
-coordinates are to be ($x_4,x_1,x_2,x_3$). Our PermMap, therefore,
-should rotate the coordinate values by one position.
-
-To create such a PermMap, we first set up two integer arrays. One of
-these, OUTPERM, controls the selection of input coordinates for use in
-the output and the other, INPERM, controls selection of output
-coordinates for use in the input:
-
-\small
-\begin{verbatim}
-      INTEGER OUTPERM( 4 ), INPERM( 4 )
-      DATA OUTPERM / 4, 1, 2, 3 /
-      DATA INPERM / 2, 3, 4, 1 /
-\end{verbatim}
-\normalsize
-
-Note that the numbers we store in these arrays are the indices of the
-coordinates that we want to select. We have chosen these so that the
-forward and inverse transformations will perform complementary
-permutations on the coordinates.
-
-The PermMap is then created by passing these arrays to its
-constructor, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER PERMMAP
-      DOUBLE PRECISION DUMMY( 1 )
-
-      ...
-
-      PERMMAP = AST_PERMMAP( 4, INPERM, 4, OUTPERM, DUMMY, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-(the fifth argument is not being used, so a dummy array has been supplied).
-Note that we specify the number of input and output coordinates
-separately, but set both to 4 in this example. The resulting PermMap
-would have the following effect when used to transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
-   (1, 2, 3, 4) --> (4, 1, 2, 3)
-   (2, 4, 6, 8) --> (8, 2, 4, 6)
-   (3, 6, 9, 12) --> (12, 3, 6, 9)
-   (4, 8, 12, 16) --> (16, 4, 8, 12)
-   (5, 10, 15, 20) --> (20, 5, 10, 15)
-
-Inverse:
-   (4, 1, 2, 3) --> (1, 2, 3, 4)
-   (8, 2, 4, 6) --> (2, 4, 6, 8)
-   (12, 3, 6, 9) --> (3, 6, 9, 12)
-   (16, 4, 8, 12) --> (4, 8, 12, 16)
-   (20, 5, 10, 15) --> (5, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-If the number of input and output coordinates are unequal so, also,
-will be the size of the OUTPERM and INPERM arrays. This means,
-however, that we cannot fill them with coordinate indices so that they
-perform complementary permutations, because one transformation will
-lose information (discard a coordinate) that the other cannot recover.
-To give an example, consider the following:
-
-\small
-\begin{verbatim}
-      INTEGER OUTPERM( 3 ), INPERM( 4 )
-      DOUBLE PRECISION CONST( 1 )
-      DATA OUTPERM / 4, 3, 2 /
-      DATA INPERM / -1, 3, 2, 1 /
-      DATA CONST / 99.004D0 /
-\end{verbatim}
-\normalsize
-
-In this case, the forward transformation will change
-($x_1,x_2,x_3,x_4$) into ($x_4,x_3,x_2$) and will discard $x_1$. The
-inverse transformation restores the original coordinate order, but has
-no value to assign to the first coordinate. In this case, the number
-entered in the INPERM array is $-$1.
-
-This negative value indicates that the coordinate value should be
-obtained by addressing the CONST array using an index of 1 (the
-absolute value). This array, ignored in the previous example, may then
-be used to supply a value for the missing coordinate.
-
-The constructor function:
-
-\small
-\begin{verbatim}
-      PERMMAP = AST_PERMMAP( 4, INPERM, 3, OUTPERM, CONST, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-will then create a PermMap with the following effect when used to
-transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
-   (1, 2, 3, 4) --> (4, 3, 2)
-   (2, 4, 6, 8) --> (8, 6, 4)
-   (3, 6, 9, 12) --> (12, 9, 6)
-   (4, 8, 12, 16) --> (16, 12, 8)
-   (5, 10, 15, 20) --> (20, 15, 10)
-
-Inverse:
-   (4, 3, 2) --> (99.004, 2, 3, 4)
-   (8, 6, 4) --> (99.004, 4, 6, 8)
-   (12, 9, 6) --> (99.004, 6, 9, 12)
-   (16, 12, 8) --> (99.004, 8, 12, 16)
-   (20, 15, 10) --> (99.004, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-The CONST array may contain more than one value if necessary and may
-be addressed by both the INPERM and OUTPERM arrays using coordinate
-indices $-$1, $-$2, $-$3,~{\em{etc.}}\ to refer to the first, second,
-third,~{\em{etc.}}\ elements.
-
-If there is no suitable replacement value that can be supplied
-{\em{via}} the CONST array, a value of zero may be entered into the
-OUTPERM and/or INPERM arrays. This causes the value AST\_\_BAD to be
-used for the affected coordinate (as defined in the AST\_PAR include
-file), thus indicating a missing coordinate value
-(\secref{ss:badcoordinates}).
-
-The principle use for a PermMap lies in matching a coordinate system
-to a data array where there is a choice of storage order for the data.
-PermMaps are also useful for discarding unwanted coordinates so as to
-reduce the number of dimensions, such as when selecting a ``slice''
-from a multi-dimensional array.
-
-\cleardoublepage
-\section{\label{ss:cmpmaps}Compound Mappings (CmpMaps)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpMap}{CmpMap}. The
-Mappings we have considered so far have been atomic, in the sense that
-they perform pre-defined elementary transformations. A CmpMap,
-however, is a compound Mapping. In essence, it is a framework for
-containing other Mappings and its purpose is to allow those Mappings
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpMap's behaviour is therefore not pre-defined, but is
-determined by the other Mappings it contains.
-
-\subsection{\label{ss:seriescmpmap}Combining Mappings in Series}
-
-Consider a simple example based on two 2-dimensional coordinate
-systems. Suppose that to convert from one to the other we must swap
-the coordinate order and multiply both coordinates by 5, so that the
-coordinates ($x_1,x_2$) transform into ($5x_2,5x_1$). This can be done
-in two stages:
-
-\begin{enumerate}
-\item Apply a \htmlref{PermMap}{PermMap} (\secref{ss:permmapexample}) to swap the
-coordinate order.
-
-\item Apply a \htmlref{ZoomMap}{ZoomMap} (\secref{ss:transforming}) to multiply both
-coordinate values by the constant 5.
-\end{enumerate}
-
-The PermMap and ZoomMap are then said to operate {\em{in series,}}
-because they are applied sequentially
-({\em{c.f.}}\ Figure~\ref{fig:seriescmpmap}).  We can create a \htmlref{CmpMap}{CmpMap}
-that applies these Mappings in series as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER CMPMAP, PERMMAP, STATUS, ZOOMMAP
-      INTEGER INPERM( 2 ), OUTPERM( 2 ), CONST( 1 )
-      DATA INPERM / 1, 2 /
-      DATA OUTPERM / 1, 2 /
-
-      STATUS = 0
-
-      ...
-
-*  Create the individual Mappings.
-      PERMMAP = AST_PERMMAP( 2, INPERM, 2, OUTPERM, CONST, ' ', STATUS )
-      ZOOMMAP = AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS )
-
-*  Combine them in series.
-      CMPMAP = AST_CMPMAP( PERMMAP, ZOOMMAP, .TRUE., ' ', STATUS )
-
-*  Annul the individual Mapping pointers.
-      CALL AST_ANNUL( PERMMAP, STATUS )
-      CALL AST_ANNUL( ZOOMMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the third argument (.TRUE.) of the constructor function
-\htmlref{AST\_CMPMAP}{AST_CMPMAP} indicates ``in series''.
-
-When used to transform coordinates in the forward direction, the
-resulting CmpMap will apply the first component \htmlref{Mapping}{Mapping} (the PermMap)
-and then the second one (the ZoomMap). When transforming in the
-inverse direction, it will apply the second one (in the inverse
-direction) and then the first one (also in the inverse direction).  In
-general, although not in this particular example, the order in which
-the two component Mappings are supplied is significant. Clearly, also,
-the \htmlref{Nout}{Nout} attribute (number of output coordinates) for the first
-Mapping must equal the \htmlref{Nin}{Nin} attribute (number of input coordinates) for
-the second one.
-
-\subsection{Combining Mappings in Parallel}
-
-Connecting two Mappings in series (\secref{ss:seriescmpmap}) is not the
-only way of combining them. The alternative, {\em{in parallel,}}
-involves applying the two Mappings at once but on different subsets of
-the coordinate values.
-
-Consider, for example, a set of 3-dimensional coordinates and suppose
-we wish to transform them by swapping the first two coordinate values
-and multiplying the final one by 5, so that ($x_1,x_2,x_3$) transforms
-into ($x_2,x_1,5x_3$). Again, we can perform each of these steps
-individually using exactly the same \htmlref{PermMap}{PermMap} and \htmlref{ZoomMap}{ZoomMap} as used
-earlier (\secref{ss:seriescmpmap}). In this case, however, these
-individual Mappings are applied in parallel
-({\em{c.f.}}\ Figure~\ref{fig:parallelcmpmap}).
-
-Creating a \htmlref{CmpMap}{CmpMap} for this purpose is also very simple:
-
-\small
-\begin{verbatim}
-      CMPMAP = AST_CMPMAP( PERMMAP, ZOOMMAP, .FALSE., ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The only difference is that the third argument of \htmlref{AST\_CMPMAP}{AST_CMPMAP} is now
-.FALSE., meaning ``in parallel''.
-
-As before, the order in which the two component Mappings are supplied
-is significant. The first one acts on the lower-numbered input
-coordinate values (however many it needs) and produces the
-lower-numbered output coordinates, while the second \htmlref{Mapping}{Mapping} acts on
-the higher-numbered input coordinates (however many remain) and
-generates the remaining higher-numbered output coordinates.  When the
-CmpMap transforms coordinates in the inverse direction, both component
-Mappings are applied to the same coordinates, but in the inverse
-direction.
-
-Note that the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the component Mappings
-({\em{i.e.}}\ the numbers of input and output coordinates) will sum to
-give the Nin and Nout attributes of the overall CmpMap.
-
-\subsection{\label{ss:cmpmapcomponents}The Component Mappings}
-
-A \htmlref{CmpMap}{CmpMap} does not store copies of its component Mappings, but simply
-holds pointers to them. In th example above (\secref{ss:seriescmpmap}),
-we were free to annul the individual \htmlref{Mapping}{Mapping} pointers after creating
-the CmpMap because the pointers held internally by the CmpMap
-increased the reference count (\htmlref{RefCount}{RefCount} attribute) of each component
-Mapping by one. The individual components are therefore not deleted by
-\htmlref{AST\_ANNUL}{AST_ANNUL}, but retained until the CmpMap itself is deleted and annuls
-the pointers it holds. Consistent use of AST\_ANNUL
-(\secref{ss:annullingpointers}) and/or pointer contexts
-(\secref{ss:contexts}) will therefore ensure that all Objects are
-deleted at the appropriate time.
-
-Note that access to a CmpMap's component Mappings is not generally
-available unless pointers to them are retained when the CmpMap is
-created. If such pointers are retained, then subsequent modifications
-to the individual components can be used to indirectly modify the
-behaviour of the overall CmpMap.
-
-There is an important exception to this, however, because a CmpMap
-retains a copy of the initial \htmlref{Invert}{Invert} flag settings of each of its
-components and uses these in order to ignore any subsequent external
-changes. This means that you may invert either component Mapping
-before inserting it into a CmpMap and need not worry if you un-invert
-it again later. The CmpMap's behaviour will not be affected by the
-later action.
-
-\subsection{\label{ss:complexcmpmap}Creating More Complex Mappings}
-
-Because a \htmlref{CmpMap}{CmpMap} is itself a \htmlref{Mapping}{Mapping}, any existing CmpMap can
-substitute (\secref{ss:objecthierarchy}) as a component Mapping when
-constructing a new CmpMap using \htmlref{AST\_CMPMAP}{AST_CMPMAP}. This has the effect of
-nesting one CmpMap inside another and opens up many new possibilities.
-For example, combining three Mappings in series can be accomplished as
-follows:
-
-\small
-\begin{verbatim}
-      INTEGER MAP1, MAP2, MAP3
-
-      ...
-
-      CMPMAP = AST_CMPMAP( MAP1, AST_CMPMAP( MAP2, MAP3, .TRUE., ' ', STATUS ),
-     :                     .TRUE., ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The way in which the individual component Mappings are grouped within
-the nested CmpMaps is not usually important.
-
-A similar technique can be used to combine multiple Mappings in
-parallel and, of course, mixed series and parallel combinations are
-also possible (Figure~\ref{fig:complexcmpmap}).  There is no built-in
-limit to how many CmpMaps may be nested in this way, so this mechanism
-provides an indefinitely extensible method of building complex
-Mappings out of the elemental building blocks provided by AST.
-
-In practice, you might not need to construct such complex CmpMaps
-yourself very frequently, but they will often be returned by AST
-routines.  Nested CmpMaps underlie the library's entire ability to
-represent a wide range of different coordinate transformations.
-
-\subsection{\label{ss:cmpmapexample}Example---Transforming Between Two Calibrated Images}
-
-Consider, as a practical example of CmpMaps, two images of the
-sky. Suppose that for each image we have a \htmlref{Mapping}{Mapping} which converts from
-pixel coordinates to a standard celestial coordinate system, say
-FK5~(J2000.0). If we wish to inter-compare these images, we can do so
-by using this celestial coordinate system to align them. That is, we
-first convert from pixel coordinates in the first image into FK5
-coordinates and we then convert from FK5 coordinates into pixel
-coordinates in the second image.
-
-If MAPA and MAPB are pointers to our two original Mappings, we could
-form a \htmlref{CmpMap}{CmpMap} which transforms directly between the pixel coordinates
-of the first and second images by combining these Mappings, as
-follows:
-
-\small
-\begin{verbatim}
-      INTEGER ALIGNMAP, MAPA, MAPB
-
-      ...
-
-      CALL AST_INVERT( MAPB, STATUS )
-      ALIGNMAP = AST_CMPMAP( MAPA, MAPB, .TRUE., ' ', STATUS )
-      CALL AST_INVERT( MAPB, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have used \htmlref{AST\_INVERT}{AST_INVERT} (\secref{ss:invertingmappings}) to
-invert MAPB before inserting it into the CmpMap because, as supplied,
-it converted in the wrong direction. Afterwards, we invert it again to
-return it to its original state. The CmpMap, however, will ignore this
-subsequent change (\secref{ss:cmpmapcomponents}).
-
-The forward transformation of the resulting CmpMap will now transform
-from pixel coordinates in the first image to pixel coordinates in the
-second image, while its inverse transformation will convert in the
-opposite direction.
-
-\subsection{\label{ss:overcomplexcmpmaps}Over-Complex Compound Mappings}
-
-While a \htmlref{CmpMap}{CmpMap} provides a very flexible way of constructing
-arbitrarily complex Mappings (\secref{ss:complexcmpmap}), it
-unfortunately also provides an opportunity for representing simple
-Mappings in complex ways. Sometimes, unnecessary complexity can be
-difficult to avoid but can obscure important simplifications.
-
-Consider the example above (\secref{ss:cmpmapexample}), in which we
-inter-related two images of the sky {\em{via}} a CmpMap.  If the two
-images turned out to be simply offset from each other by a shift along
-each pixel axis, then this approach would align them correctly, but it
-would be inefficient. This is because it would introduce unnecessary
-and expensive transformations to and from an intermediate celestial
-coordinate system, whereas a simple shift of pixel origin would
-suffice.
-
-Recognising that a simpler and more efficient solution exists
-obviously requires a little more than simply joining two Mappings
-end-to-end. We must also determine whether the resulting CmpMap is
-more complex than it needs to be, {\em{i.e.}}\ contains redundant
-information. If it is, we then need a way to simplify it.
-
-The problem is not always just one of efficiency, however. Sometimes
-we may also need to know something about the actual form a \htmlref{Mapping}{Mapping}
-takes---{\em{i.e.}}\ the nature of the operations it performs.
-Unnecessary complexity can obscure this, but such complexity can
-easily accumulate during normal data processing.
-
-For example, a Mapping that transforms pixel coordinates into
-positions on the sky might be repeatedly modified as changes are made
-to the shape and size of the image. Typically, on each occasion,
-another Mapping will be concatenated to reflect what has happened to
-the image. This could soon make it difficult to discern the overall
-nature of the transformation from the complex CmpMap that
-accumulates. If only shifts of origin were involved on each occasion,
-however, they could be combined into a single shift which could be
-represented much more simply.
-
-Suppose we now wanted to represent our image's celestial coordinate
-calibration using FITS conventions (\secref{ss:foreignfits}). This
-requires AST to determine whether the Mapping which relates pixel
-coordinate to sky positions conforms to the FITS model (for example,
-whether it is equivalent to applying a single set of shifts and scale
-factors followed by a map projection). Clearly, there is an important
-use here for some means of simplifying the internal structure of a
-CmpMap.
-
-\subsection{\label{ss:simplifyingcmpmaps}Simplifying Compound Mappings}
-
-The ability to simplify compound Mappings is provided by the
-\htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} function. This function encapsulates a number of
-heuristics for converting Mappings, or combinations of Mappings within
-a \htmlref{CmpMap}{CmpMap}, into simpler, equivalent ones. When applied to a CmpMap,
-AST\_SIMPLIFY tries to reduce the number of individual Mappings within
-it by merging neighbouring component Mappings together. It will do
-this with both series and parallel combinations of Mappings, or both,
-and will handle CmpMaps nested to any depth
-(\secref{ss:complexcmpmap}).
-
-\begin{latexonly}
-   To illustrate how AST\_SIMPLIFY works, consider the combination of
-   Mappings shown in Figure~\ref{fig:simplifyexample}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.65]{sun210_figures/simpexamp.eps}
-   \caption{An over-complex compound \htmlref{Mapping}{Mapping}, consisting of PermMaps,
-   ZoomMaps and a \htmlref{UnitMap}{UnitMap}, which can be simplified to become a single
-   UnitMap.  The enclosing nested CmpMaps have been omitted for clarity.}
-   \label{fig:simplifyexample}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   To illustrate how AST\_SIMPLIFY works, consider the combination of
-   Mappings shown in the Figure below.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:simplifyexample}
-   \includegraphics[scale=1.1]{sun210_figures/simpexamp.eps}
-   \caption{An over-complex compound Mapping, consisting of PermMaps,
-   ZoomMaps and a UnitMap, which can be simplified to become a single
-   UnitMap.  The enclosing nested CmpMaps have been omitted for clarity.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-If this were contained in a CmpMap, it could be simplified as follows:
-
-\small
-\begin{verbatim}
-      INTEGER SIMPLER
-
-      ...
-
-      SIMPLER = AST_SIMPLIFY( CMPMAP, STATUS );
-\end{verbatim}
-\normalsize
-
-In this case, the result would be a simple 3-dimensional UnitMap (the
-identity Mapping).  To reach this conclusion, AST\_SIMPLIFY will have
-made a number of deductions, roughly as follows:
-
-\begin{enumerate}
-\item The two 2-dimensional ZoomMaps in series are equivalent to a
-single \htmlref{ZoomMap}{ZoomMap} with a combined \htmlref{Zoom}{Zoom} factor of unity. This, in turn, is
-equivalent to a 2-dimensional UnitMap.
-
-\item This UnitMap in parallel with the other 1-dimensional UnitMap is
-equivalent to a single 3-dimensional UnitMap. This UnitMap, sandwiched
-between any other pair of Mappings, can then be eliminated.
-
-\item The remaining two PermMaps in series are equivalent to a single
-3-dimensional \htmlref{PermMap}{PermMap}. When these are combined, the resulting PermMap
-is found to be equivalent to a 3-dimensional UnitMap.
-\end{enumerate}
-
-This example is a little contrived, but illustrates how AST\_SIMPLIFY
-can deal with even quite complicated compound Mappings through a
-series of incremental simplifications. Where possible, this will
-result in either a simpler compound Mapping or, if feasible, an atomic
-(non-compound) Mapping, as here. If no simplification is possible,
-AST\_SIMPLIFY will just return a pointer to the original Mapping.
-
-Although AST\_SIMPLIFY cannot identify every simplification that is
-theoretically possible, sufficient rules are included to deal with the
-most common and important cases.
-
-\cleardoublepage
-\section{\label{ss:frames}Representing Coordinate Systems (Frames)}
-
-An AST \htmlref{Frame}{Frame} is an \htmlref{Object}{Object} that is used to represent a coordinate
-system. Contrast this with a \htmlref{Mapping}{Mapping} (\secref{ss:mappings}), which is
-used to describe how to convert between coordinate systems. The two
-concepts are complementary and we will see how they work together in
-\secref{ss:framesets}.
-
-In this section we will discuss only basic Frames, which represent
-Cartesian coordinate systems. More specialised types of Frame
-({\em{e.g.}}\ the \htmlref{SkyFrame}{SkyFrame}, which represents celestial coordinate
-systems, and the \htmlref{SpecFrame}{SpecFrame}, which represents spectral coordinate
-systems) are covered later (\secref{ss:skyframes} and \secref{ss:specframes}) 
-and, naturally, inherit the properties and behaviour of the simple Frames 
-discussed here.
-
-\subsection{The Frame Model}
-
-The best way to think about a \htmlref{Frame}{Frame} is like the frame that you would
-plot around a graph. In two dimensions, you would have an ``$x$'' and
-a ``$y$'' axis, a title on the graph and labels on the axes, together
-with an indication of the physical units being plotted. The values
-marked along each axis would be formatted in a human-readable way. The
-frame around a graph therefore defines a coordinate space within which
-you can locate points, draw lines, calculate distances, {\em{etc.}}
-
-An AST Frame works in much the same way, embodying all of these
-concepts and a few more. It also allows any number of axes, which
-means that a Frame can represent coordinate systems with any number of
-dimensions. You specify how many when you create it.
-
-Remember that the basic Frame we are considering here is completely
-general.  It knows nothing of celestial coordinates, for example, and
-all its axes are equivalent. It can be adapted to describe any general
-purpose Cartesian coordinate system by setting its attributes, such as
-its \htmlref{Title}{Title} and axis Labels, {\em{etc.}}\ to appropriate values.
-
-\subsection{\label{ss:creatingframes}Creating a Frame}
-
-Creating a \htmlref{Frame}{Frame} is straightforward and follows the usual pattern:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER FRAME, STATUS
-
-      STATUS = 0
-
-      ...
-
-      FRAME = AST_FRAME( 2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The first argument of the \htmlref{AST\_FRAME}{AST_FRAME} constructor function specifies
-the number of axes which the Frame should have.
-
-\subsection{\label{ss:frameasmapping}Using a Frame as a Mapping}
-
-We should briefly point out that the \htmlref{Frame}{Frame} we created above
-(\secref{ss:creatingframes}) is also a \htmlref{Mapping}{Mapping}
-(\secref{ss:mappingclass}) and therefore inherits the properties and
-behaviour common to other Mappings.
-
-One way to see this is to set the Frame's \htmlref{Report}{Report} attribute (inherited
-from the Mapping class) to a non-zero value and pass the Frame pointer
-to a coordinate transformation routine, such as \htmlref{AST\_TRAN2}{AST_TRAN2}.
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION XIN( 5 ), YIN( 5 ), XOUT( 5 ), YOUT( 5 )
-      DATA XIN / 0D0, 1D0, 2D0, 3D0, 4D0, 5D0 /
-      DATA YIN / 0D0, 2D0, 4D0, 6D0, 8D0, 10D0 /
-
-      CALL AST_SET( FRAME, 'Report=1', STATUS )
-      CALL AST_TRAN2( FRAME, 5, XIN, YIN, .TRUE., XOUT, YOUT, STATUS )
-\end{verbatim}
-\normalsize
-
-The resulting output might then look like this:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is not very exciting because a Frame implements an identity
-transformation just like a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). However, it illustrates that a Frame can
-be used as a Mapping and that its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are both
-equal to the number of Frame axes.
-
-When we consider more specialised Frames
-({\em{e.g.}}~\secref{ss:framesets}), we will see that using them as
-Mappings can be very useful indeed.
-
-\subsection{\label{ss:frameaxisattributes}Frame Axis Attributes}
-
-Frames have a number of attributes which can take multiple values, one
-for each axis. These separate values are identified by appending the
-axis number in parentheses to the attribute name. For example, the
-Label(1) attribute is a character string containing the label which
-appears on the first axis.
-
-\htmlref{Axis}{Axis} attributes are accessed in the same way as all other attributes
-(\secref{ss:gettingattributes}, \secref{ss:settingattributes} and
-\secref{ss:defaultingattributes}). For example, the Label on the second
-axis might be obtained as follows:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 70 ) LABEL
-
-      ...
-
-      LABEL = AST_GETC( FRAME, 'Label(2)', STATUS )
-\end{verbatim}
-\normalsize
-
-Other attribute access routines (AST\_SETx, \htmlref{AST\_TEST}{AST_TEST} and \htmlref{AST\_CLEAR}{AST_CLEAR})
-may also be applied to axis attributes in the same way.
-
-If the axis number is stored in a program variable, then its value
-must be formatted to generate a suitable attribute name before using
-this to access the attribute itself. For example, the following will
-print out the Label value for each axis of a \htmlref{Frame}{Frame}:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 10 ) AXIS
-      INTEGER IAXIS
-
-      ...
-
-      DO 1 IAXIS = 1, AST_GETI( FRAME, 'Naxes', STATUS )
-         WRITE ( AXIS, '( I10 )' ) IAXIS
-         LABEL = AST_GETC( FRAME, 'Label(' // AXIS // ')', STATUS )
-         WRITE ( *, 199 ) IAXIS, LABEL
- 199     FORMAT ( 'Label ', I2, ': ', A )
- 1    CONTINUE
-\end{verbatim}
-\normalsize
-
-Note the use of the \htmlref{Naxes}{Naxes} attribute to determine the number of Frame
-axes.
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-Label  1: Axis 1
-Label  2: Axis 2
-\end{verbatim}
-\end{quote}
-
-In this case, the Frame's default axis Labels have been revealed as
-rather un-exciting. Normally, you would set much more useful values,
-typically when you create the Frame---perhaps something like:
-
-\small
-\begin{verbatim}
-      FRAME = AST_FRAME( 2, 'Label(1)=Offset from centre of field,' //
-                            'Unit(1) =mm,' //
-                            'Label(2)=Transmission coefficient,' //
-                            'Unit(2) =%', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have also set the (character string) Unit attribute for each
-axis to describe the physical units represented on that axis. All the
-attribute assignments have been combined into a single string,
-separated by commas.
-
-\subsection{\label{ss:frameattributes}Frame Attributes}
-
-We will now briefly outline the various attributes associated with a
-\htmlref{Frame}{Frame} (this is, of course, in addition to those inherited from the
-\htmlref{Mapping}{Mapping} class). We will not delve too deeply into the details of each
-attribute, for which you should consult the appropriate description in
-\appref{ss:attributedescriptions}. Instead, we aim simply to sketch
-the range of facilities available:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Naxes}{Naxes}]\mbox{}\\
-A read-only integer giving the number of Frame axes.
-
-\item[\htmlref{Title}{Title}]\mbox{}\\
-A string describing the coordinate system which the Frame represents.
-
-\item[\htmlref{Label(axis)}{Labelaxis}]\mbox{}\\
-A label string for each axis.
-
-\item[\htmlref{Unit(axis)}{Unitaxis}]\mbox{}\\
-A string describing the physical units on each axis. You can choose
-whether to make this attribute ``active'' or ``passive'' (using
-\htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT}
-). If active, its value will be taken into account when finding the
-Mapping between two Frames (\emph{e.g.} a scaling of 0.001 would be used
-to connect two axis with units of ``km'' and ``m''). If passive, its value
-is ignored. Its use is described in more detail in \secref{ss:frameunits}.
-
-\item[\htmlref{Symbol(axis)}{Symbolaxis}]\mbox{}\\
-A string containing a ``short form'' symbol ({\em{e.g.}}\ like ``X''
-or ``Y'') used to represent the quantity plotted on each axis.
-
-\item[\htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}]\mbox{}\\
-The preferred number of digits of precision to be used when formatting
-values for display on each axis.
-
-\item[\htmlref{Format(axis)}{Formataxis}]\mbox{}\\
-A string containing a {\em{format specifier}} which determines exactly
-how values should be formatted for display on each axis
-(\secref{ss:formattingaxisvalues}). If this attribute is un-set, the
-formatting is based on the Digits value, otherwise the Format string
-over-rides the Digits value.
-
-\item[\htmlref{Direction(axis)}{Directionaxis}]\mbox{}\\
-A boolean (integer) value which indicates in which direction each axis
-should be plotted. If it is non-zero (the default), the axis should be
-plotted in the conventional direction---{\em{i.e.}}\ increasing to the
-right for the abscissa and increasing upwards for the ordinate. If it
-is zero, the axis should be plotted in reverse.  This attribute is
-provided as a hint only and programs are free to ignore it if they
-wish.
-
-\item[\htmlref{Domain}{Domain}]\mbox{}\\
-A character string which identifies the {\em{physical domain}} to
-which the Frame's coordinate system applies. The primary purpose of
-this attribute is to prevent unwanted conversions from occurring
-between coordinate systems which are not related. Its use is described
-in more detail in \secref{ss:framedomains}.
-
-\item[\htmlref{System}{System}]\mbox{}\\
-A character string which identifies the specific coordinate system used
-to describe positions within the physical domain represented by the Frame.
-For a simple Frame, this attribute currently has a fixed value of 
-``Cartesian'', but could in principle be extended to include options such
-as ``Polar'', ``Cylindrical'', {\em{etc}}. More specialised Frames such
-as the \htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame}  and \htmlref{SpecFrame}{SpecFrame}, re-define the allowed values to be
-appropriate to the domain which they describe. For instance, the SkyFrame
-allows values such as ``FK4'' and ``Galactic'', and the SpecFrame allows
-values such as ``frequency'' and ``wavelength''. 
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This value is used to qualify a coordinate system by giving the moment in
-time when the coordinates are correct. Usually, this will be the date of
-observation. The Epoch value is important in cases where coordinates
-systems move with respect to each other over time. An example of two such
-coordinate systems are the FK4 and FK5 celestial coordinate systems.
-
-\item[\htmlref{ObsLon}{ObsLon}]\mbox{}\\
-Specifies the longitude of the observer (assumed to be on the surface of
-the earth). The basic Frame class does not use this value, but
-specialised sub-classes may. For instance, the SpecFrame class uses it to
-calculate the relative velocity of the observer and the centre of the
-earth for use in converting between standards of rest.
-
-\item[\htmlref{ObsLat}{ObsLat}]\mbox{}\\
-Specifies the latitude of the observer. Use in conjunction with ObsLon.
-
-\end{description}
-\end{quote}
-
-There are also some further Frame attributes, not described above,
-which are important when Frames are used as templates to search for
-other Frames. Their use goes beyond the present discussion.
-%TBW---Add reference here.
-
-\subsection{\label{ss:formattingaxisvalues}Formatting Axis Values}
-
-The coordinate values associated with each axis of a \htmlref{Frame}{Frame} are stored
-({\em{e.g.}}\ within your program) as double precision values. The
-Frame class therefore provides a function, \htmlref{AST\_FORMAT}{AST_FORMAT}, to convert
-these values into formatted strings for display:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 50 ) STRING
-      DOUBLE PRECISION VALUE
-
-      ...
-
-      STRING = AST_FORMAT( FRAME, IAXIS, VALUE, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the AST\_FORMAT character function is passed a Frame pointer,
-the number of an axis (IAXIS) and a double precision value to format
-(VALUE). It returns a character string containing the formatted value.
-\label{ss:formattingwithdigits}
-
-By default, the formatting applied will be determined by the Frame's
-Digits attribute and will normally display results with seven digits
-of precision (corresponding approximately to the Fortran REAL data
-type on many machines). Setting a different Digits value, however,
-allows you to adjust the precision as necessary to suit the accuracy
-of the coordinate data you are processing.  If finer control is
-needed, it is also possible to set a Digits value for each individual
-axis by appending an axis number to the attribute name
-({\em{e.g.}}\ ``Digits(2)''). If this is done, it over-rides the
-effect of the Frame's main Digits value for that axis.
-
-Even finer control is possible by setting the (character string)
-Format attribute for a Frame axis. The string given should contain a
-{\em{format specifier}} which explicitly determines how the values on
-that axis should be formatted. This will over-ride the effects of any
-Digits value\footnote{The exception to this rule is that if the Format value 
-includes a precision of ``$.*$'', then Digits will be used to determine 
-the actual precision used.}.  Unfortunately for Fortran programmers, this must 
-be a C language format specifier,\footnote{This is a consequence of
-implementing the AST library in C.} so you might find the Digits
-approach preferable.
-
-The simplest type of format specifier takes the form ``\%m.nG'', where
-``m'' and ``n'' are integers giving the minimum field width in characters
-and the number of significant digits to display ({\em{e.g.}}\
-``\%10.5G''). The ''n'' value may be replaced by an asterisk, in which
-case the value of the Digits attribute is used to determine the number of
-significant digits to display. Other formatting options are also possible
-and if you need to use them you may wish to consult a book on C (see the
-``printf'' function), remembering that you want to format a double
-precision (C double) value.
-
-It is recommended that you use AST\_FORMAT whenever you display
-formatted coordinate values, even although you could format them
-yourself using a WRITE statement. This is because it puts the Frame in
-control of formatting. When you start to handle more elaborate Frames
-(representing, say, celestial coordinates), you will need different
-formatting methods. This approach delivers them without any change to
-your software.
-
-You should also consider regularly using the \htmlref{AST\_NORM}{AST_NORM} routine,
-described below (\secref{ss:normalising}), for any values that will be
-made visible to the user of your software.
-
-\subsection{\label{ss:normalising}Normalising Frame Coordinates}
-
-The routine \htmlref{AST\_NORM}{AST_NORM} is provided to cope with the fact that some
-coordinate systems do not extend indefinitely in all directions. Some
-may have boundaries, outside which coordinates are meaningless, while
-others wrap around on themselves, so that after a certain distance you
-return to the beginning again (coordinate systems based on circles and
-spheres, for instance). A basic \htmlref{Frame}{Frame} has no such complications, but
-other more specialised Frames (such as SkyFrames, representing the
-celestial sphere---\secref{ss:skyframes}) do.
-
-The role played by AST\_NORM is to {\em{normalise}} any arbitrary set
-of coordinates by converting them into a set which is ``within
-bounds'', interpreted according to the particular Frame in
-question. For example, on the celestial sphere, a right ascension
-value of 24~hours or more can have a suitable multiple of 24~hours
-subtracted without affecting its meaning and AST\_NORM would perform
-this task. Similarly, negative values of right ascension would have a
-multiple of 24~hours added, so that the result lies in the range zero
-to 24~hours. The coordinates in question are modified in place by
-AST\_NORM, as follows:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION POINT( 2 )
-
-      ...
-
-      CALL AST_NORM( FRAME, POINT, STATUS )
-\end{verbatim}
-\normalsize
-
-If the coordinates supplied are initially OK, as they would always be
-with a basic Frame, then they are returned unchanged.
-
-Because the main purpose of AST\_NORM is to convert coordinates into
-the preferred range for human consumption, its use is almost always
-appropriate immediately before formatting coordinate values for
-display using \htmlref{AST\_FORMAT}{AST_FORMAT} (\secref{ss:formattingaxisvalues}). Even if
-the Frame in question does not restrict the range of coordinates, so
-that AST\_NORM does nothing, using it will allow you to process other
-more specialised Frames, where normalisation is important, without
-changing your software.
-
-\subsection{\label{ss:unformattingaxisvalues}Reading Formatted Axis Values}
-
-The process of converting a formatted coordinate value for a \htmlref{Frame}{Frame}
-axis, such as might be produced by \htmlref{AST\_FORMAT}{AST_FORMAT}
-(\secref{ss:formattingaxisvalues}), back into a numerical (double
-precision) value ready for processing is performed by \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}.
-However, although this process is essentially the inverse of that
-performed by AST\_FORMAT, there are a number of additional difficulties
-that must be addressed in practice.
-
-The main use for AST\_UNFORMAT is in reading formatted coordinate
-values which have been entered by the user of a program, or read from
-a file. As such, we can rarely assume that the values are neatly
-formatted in the way that AST\_FORMAT would produce. Instead, it is
-usually desirable to allow considerable flexibility in the form of
-input that can be accommodated, so as to permit ``free-format'' data
-input by the user. In addition, we may need to extract individual
-coordinate values embedded in other textual data.
-
-Underlying these requirements is the root difficulty that the textual
-format used to represent a coordinate value will depend on the class
-of Frame we are considering. For example, for a basic Frame,
-AST\_UNFORMAT may have to read a value like ``1.25E-6'', whereas a
-more specialised Frame representing celestial coordinates may have to
-handle a value like ``-07d~49m~13s''. Of course, the format might also
-depend on which axis is being considered.
-
-Ideally, we would like to write software that can handle any kind of
-Frame. However, this makes it a little more difficult to analyse
-textual input data to extract individual coordinate values, since we
-cannot make assumptions about how the values are formatted. It would
-not be safe, for example, simply to assume that the values being read
-are separated by white space. This is not just because they might be
-separated by some other character, but also because celestial
-coordinate values might themselves contain spaces. In fact, to be
-completely safe, we cannot make any assumptions about how a formatted
-coordinate value is separated from the surrounding text, except that
-it should be separated in some way which is not ambiguous.
-
-This is the very basic assumption upon which AST\_UNFORMAT works. It is
-invoked as follows:
-
-\small
-\begin{verbatim}
-      INTEGER N
-
-      ...
-
-      N = AST_UNFORMAT( FRAME, IAXIS, STRING, VALUE, STATUS )
-\end{verbatim}
-\normalsize
-
-It is supplied with a Frame pointer (FRAME), the number of an axis
-(IAXIS) and a character string to be read (STRING). If it succeeds in
-reading a value, AST\_UNFORMAT returns the resulting coordinate
-{\em{via}} its penultimate argument (VALUE). The returned function
-value indicates how many characters were read from the string in order
-to obtain this result.
-
-The string is read as follows:
-
-\begin{enumerate}
-\item Any white space at the start is skipped over.
-
-\item Further characters are considered, one at a time, until the next
-character no longer matches any of the acceptable forms of input
-(given the characters that precede it). The longest sequence of
-characters which matches is then considered ``read''.
-
-\item If a suitable sequence of characters was read successfully, it
-is converted into a coordinate value which is returned. Any white
-space following this sequence is then skipped over and the total
-number of characters consumed is returned as the function value.
-
-\item If the sequence of characters read is empty, or insufficient to
-define a coordinate value, then the string does not contain a value to
-read. In this case, the read is aborted and AST\_UNFORMAT returns a
-function value of zero and no coordinate value. However, it returns
-without error.
-\end{enumerate}
-
-Note that failing to read a coordinate value does not constitute an
-error, at least so far as AST\_UNFORMAT is concerned. However, an
-error can occur if the sequence of characters read appears to have the
-correct form but cannot be converted into a valid coordinate
-value. Typically, this will be because it violates some constraint,
-such as a limit on the value of one of its fields. The resulting error
-message will give details.
-
-For any given Frame axis, AST\_UNFORMAT does not necessarily always
-use the same algorithm for converting the sequence of characters it
-reads into a coordinate value. This is because some forms of input
-(particularly free-format input) can be ambiguous and might be
-interpreted in several ways depending on the context. For example, the
-celestial longitude ``12:34:56.7'' could represent an angle in degrees
-or a right ascension in hours. To decide which to use, AST\_UNFORMAT
-may examine the Frame's attributes and, in particular, the appropriate
-\htmlref{Format(axis)}{Formataxis} string which is used by AST\_FORMAT when formatting
-coordinate values (\secref{ss:formattingaxisvalues}). This is done in
-order that AST\_FORMAT and AST\_UNFORMAT should complement each
-other---so that formatting a value and then un-formatting it will
-yield the original value, subject to any rounding error.
-
-To give a simple (but crucially incomplete!) example, consider reading
-a value for the axis of a basic Frame, as follows:
-
-\small
-\begin{verbatim}
-      N = AST_UNFORMAT( FRAME, IAXIS, ' 1.5E6   -99.0', VALUE, STATUS )
-\end{verbatim}
-\normalsize
-
-AST\_UNFORMAT will skip over the initial space in the string supplied
-and then examine each successive character. It will accept the
-sequence ``1.5E6'' as input, but reject the space which follows
-because it does not form part of the format of a floating point
-number. It will then convert the characters ``1.5E6'' into a
-coordinate value and skip over the three spaces which follow them. The
-returned function value will therefore be 9, equal to the total number
-of characters consumed. This result may be used to address the string
-during a subsequent read, so as to commence reading at the start of
-``-99.0''.
-
-Most importantly, however, note that if the user of a program
-mistakenly enters the string ``~1.5R6\ldots'' instead of
-``~1.5E6\ldots'', a coordinate value of 1.5 and a function result of 4
-will be returned, because the ``R'' would prematurely terminate the
-attempt to read the value. Because this sort of mistake does not
-automatically result in an error but can produce incorrect results, it
-is {\bf{vital}} to check the returned function value to ensure that
-the expected number of characters have been read. For example, if the
-string is expected to contain exactly one value, and nothing else,
-then the following would suffice:
-
-\small
-\begin{verbatim}
-      N = AST_UNFORMAT( FRAME, IAXIS, STRING, VALUE, STATUS )
-      IF ( STATUS .EQ. 0 ) THEN
-         IF ( N .LT. LEN( STRING ) ) THEN
-            <error in input data>
-         ELSE
-            <value read correctly>
-         END IF
-      END IF
-\end{verbatim}
-\normalsize
-
-If AST\_UNFORMAT does not detect an error itself, we check that it has
-read to the end of the string. If this reveals an error, the value of
-N indicates where it occurred.
-
-Another common requirement is to obtain a position by reading a list
-of coordinates from a string which contains one value for each axis of
-a Frame. We assume that the values are separated in some unambiguous
-manner, perhaps using white space and/or some unspecified
-single-character separator. The choice of separator is up to the data
-supplier, who must choose it so as not to conflict with the format of
-the coordinate values, but our software does not need to know what it
-is. The following is a template algorithm for reading data in this
-form:
-
-\small
-\begin{verbatim}
-      INTEGER I
-      DOUBLE PRECISION VALUES( 10 )
-
-      ...
-
-*  Initialise the string index.
-      I = 1
-
-*  Obtain the number of Frame axes and loop through them.
-      DO 1 IAXIS = 1, AST_GETI( FRAME, 'Naxes', STATUS )
-
-*  Attempt to read a value for this axis.
-         N = AST_UNFORMAT( FRAME, IAXIS, STRING( I : ),
-     :                     VALUES( IAXIS ), STATUS )
-
-*  If nothing was read and this is not the first axis and the end of
-*  the string has not been reached, try stepping over a separator and
-*  reading again.
-         IF ( ( N .EQ. 0 ) .AND. ( IAXIS .GT. 1 ) .AND.
-     :        ( I .LT. LEN( STRING ) ) ) THEN
-            I = I + 1
-            N = AST_UNFORMAT( FRAME, IAXIS, STRING( I : ),
-     :                        VALUES( IAXIS ), STATUS )
-         END IF
-
-*  Quit if nothing was read, otherwise move on to the next value.
-         IF ( N .EQ. 0 ) GO TO 2
-         I = I + N
- 1    CONTINUE
- 2    CONTINUE
-
-*  Check for possible errors.
-      IF ( STATUS .EQ. 0 ) THEN
-         IF ( ( I .LT. LEN( STRING ) ) .OR. ( N .EQ. 0 ) ) THEN
-            <error in input data>
-         ELSE
-            <values read correctly>
-         END IF
-      END IF
-\end{verbatim}
-\normalsize
-
-In this case, the value of I will indicate the location of any input error.
-
-Note that this algorithm is insensitive to the precise format of the
-data and will therefore work with any class of Frame and any
-reasonably unambiguous input data. For example, here is a range of
-suitable input data for a 3-dimensional basic Frame:
-
-\begin{quote}
-\small
-\begin{verbatim}
-1 2.5 3
-3.1,3.2,3.3
-1.5, 2.6, -9.9e2
--1.1+0.4-1.8
-    .1/.2/.3
- 44.0 ; 55.1 -14
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:permutingaxes}Permuting Frame Axes}
-
-Once a \htmlref{Frame}{Frame} has been created, it is not possible to change the number
-of axes it contains, but it is possible to change the order in which
-these axes occur. To do so, an integer {\em{permutation array}} is
-filled with the numbers of the axes so as to specify the new order,
-{\em{e.g:}}
-
-\small
-\begin{verbatim}
-      INTEGER PERM( 2 )
-      DATA PERM / 2, 1 /
-\end{verbatim}
-\normalsize
-
-In this case, the axes of a 2-dimensional Frame could be interchanged
-by passing this permutation array to the \htmlref{AST\_PERMAXES}{AST_PERMAXES} function. That
-is, an ($x_1,x_2$) coordinate system would be changed into an
-($x_2,x_1$) coordinate system by:
-
-\small
-\begin{verbatim}
-      CALL AST_PERMAXES( FRAME, PERM, STATUS )
-\end{verbatim}
-\normalsize
-
-If the axes are permuted more than once, the effects are cumulative.
-You are, of course, not restricted to Frames with only two axes.
-
-\subsection{Selecting Frame Axes}
-
-An alternative to changing the number of \htmlref{Frame}{Frame} axes, which is not
-allowed, is to create a new Frame by selecting axes from an existing
-one. The method of doing this is very similar to the way \htmlref{AST\_PERMAXES}{AST_PERMAXES}
-is used (\secref{ss:permutingaxes}), in that we supply an integer
-array filled with the numbers of the axes we want, in their new
-order. In this case, however, the number of array elements need not
-equal the number of Frame axes.
-
-For example, we could select axes 3 and 2 (in that order) from a
-3-dimensional Frame as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FRAME1, FRAME2, MAPPING, PICK( 2 )
-      DATA PICK / 3, 2 /
-
-      ...
-
-      FRAME2 = AST_PICKAXES( FRAME1, 2, PICK, MAPPING, STATUS )
-\end{verbatim}
-\normalsize
-
-This would return a pointer to a 2-dimensional Frame (FRAME2) which
-contains the information associated with axes 3 and 2, in that order,
-from the original Frame (FRAME1). The original Frame is not altered by
-this process. Beware, however, that the axis information may still be
-shared by both Frames, so if you wish to alter either of them
-independently you may first need to use \htmlref{AST\_COPY}{AST_COPY}
-(\secref{ss:copyingobjects}) to make an independent copy.
-
-In addition to the new Frame pointer, \htmlref{AST\_PICKAXES}{AST_PICKAXES} will also return a
-pointer to a new \htmlref{Mapping}{Mapping} {\em{via}} its fourth argument. This Mapping will
-inter-relate the two Frames. By this we mean that its forward
-transformation will convert coordinates originally in the coordinate
-system represented by FRAME1 into that represented by FRAME2, while
-its inverse transformation will convert in the opposite direction. In
-this particular case, the Mapping would be a \htmlref{PermMap}{PermMap}
-(\secref{ss:permmapexample}) and would implement the following
-transformations:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
-   (1, 2, 3) --> (3, 2)
-   (2, 4, 6) --> (6, 4)
-   (3, 6, 9) --> (9, 6)
-   (4, 8, 12) --> (12, 8)
-   (5, 10, 15) --> (15, 10)
-
-Inverse:
-   (3, 2) --> (<bad>, 2, 3)
-   (6, 4) --> (<bad>, 4, 6)
-   (9, 6) --> (<bad>, 6, 9)
-   (12, 8) --> (<bad>, 8, 12)
-   (15, 10) --> (<bad>, 10, 15)
-\end{verbatim}
-\end{quote}
-
-This is our first introduction to the idea of inter-relating pairs of
-Frames {\em{via}} a Mapping, but this will assume a central role later on.
-
-Note that when using AST\_PICKAXES, it is also possible to request
-more axes than there were in the original Frame. This will involve
-selecting axes from the original Frame that do not exist. To do this,
-the corresponding axis number (in the PICK array) should be set to
-zero and the effect is to introduce an additional new axis which is
-not derived from the original Frame. This axis will have default
-values for all its attributes. You will need to do this because
-AST\_PICKAXES does not allow you to select any of the original axes
-more than once.\footnote{It will probably not be obvious why this
-restriction is necessary, but consider creating a Frame with one
-longitude axis and two latitude axes. Which latitude axis should be
-associated with the longitude axis?}
-
-\subsection{\label{ss:distanceandoffset}Calculating Distances, Angles and Offsets}
-Some complementary 
-routines 
-are provided for use with Frames to allow you to perform geometric
-operations without needing to know the nature of the coordinate system
-represented by the \htmlref{Frame}{Frame}.
-
-Routines 
-can be used to find the distance between two points, and to offset a 
-specified distance along a line joining two points, {\em{etc.}} In essence, 
-these define the metric of the coordinate space which the Frame represents. In
-the case of a basic Frame, this is a Cartesian metric.
-
-The first of these routines, \htmlref{AST\_DISTANCE}{AST_DISTANCE}, returns a double precision
-distance value when supplied with the Frame coordinates of two
-points. For example:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION DIST, POINT1( 2 ), POINT2( 2 )
-      DATA POINT1 / 0D0, 0D0 /
-      DATA POINT2 / 1D0, 1D0 /
-
-      ...
-
-      DIST = AST_DISTANCE( FRAME, POINT1, POINT2, STATUS )
-\end{verbatim}
-\normalsize
-
-This calculates the distance between the origin (0,0) and a point at
-position (1,1). In this case, the result, as you would expect, is
-$\surd{2}$. However, this is only true for the Cartesian coordinate
-system which a basic Frame represents. In general, AST\_DISTANCE will
-calculate the geodesic distance between the two points, so that with a
-more specialised Frame (such as a \htmlref{SkyFrame}{SkyFrame}, representing the celestial
-sphere) a great-circle distance might be returned.
-
-The \htmlref{AST\_OFFSET}{AST_OFFSET} routine is really the inverse of AST\_DISTANCE. Given
-two points in a Frame, it calculates the coordinates of a third point
-which is offset a specified distance away from the first point along
-the geodesic joining it to the second one. For example:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION POINT1( 2 ), POINT2( 2 ), POINT3( 2 )
-      DATA POINT1 / 0D0, 0D0 /
-      DATA POINT2 / 1D0, 1D0 /
-
-      ...
-
-      CALL AST_OFFSET( FRAME, POINT1, POINT2, 0.5D0, POINT3, STATUS )
-\end{verbatim}
-\normalsize
-
-This would fill the POINT3 array with the coordinates of a point which
-is offset 0.5 units away from the origin (0,0) in the direction of the
-position (1,1). Again, this is a simple result in a Cartesian Frame,
-as varying the offset will trace out a straight line. On the celestial
-sphere, however ({\em{e.g.}}\ using a SkyFrame), it would trace out a
-great circle.
-
-The routines \htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE} and \htmlref{AST\_AXOFFSET}{AST_AXOFFSET} are similar to AST\_DISTANCE
-and AST\_OFFSET, except that the curves which they use as ``straight
-lines'' are not geodesics, but curves parallel to a specified axis\footnote
-{For instance, a line of constant Declination is not a geodesic}. One
-reason for using these routines is to deal with the cyclic ambiguity of
-longitude and latitude axes.
-
-The \htmlref{AST\_OFFSET2}{AST_OFFSET2} routine is similar to AST\_OFFSET, but instead of using the
-geodesic which passes through two positions, it uses the geodesic which
-passes at a given position angle through the starting position. 
-
-Position angles are always measured from the positive direction of the 
-second Frame axis to the required line, with positive angles being in the 
-same sense as rotation from the positive direction of the second axis to 
-the positive direction of the first Frame axis. This definition applies
-to all classes of Frame, including SkyFrame. The default ordering of axes
-in a SkyFrame makes the second axis equivalent to north, and so the
-definition of position angle given above corresponds to the normal 
-astronomical usage, ``from north, through east''. However, it should be
-remembered that it is possible to permute the axes of a SkyFrame (or
-indeed any Frame), so that north becomes axis 1. In this case, an AST
-``position angle'' would be the angle ``from east, through north''. 
-Always take the axis ordering into account when deriving an astronomical 
-position angle from an AST position angle.
-
-Within a Cartesian coordinate system, the position angle of a geodesic
-({\em{i.e.}}\ a straight line) is constant along its entire length, but
-this is not necessarily true of other coordinate systems. Within a
-spherical coordinate system, for instance, the position angle of a geodesic
-will vary along its length (except for the special cases of a meridian and
-the equator). In addition to returning the required offset position, the 
-AST\_OFFSET2 routine
-returns the position angle of the geodesic at the
-offset position. This is useful if you want to trace out a path which
-involves turning through specified angles. For instance, tracing out a
-rectangle in which each side is a geodesic involves turning through 90 
-degrees at the corners. To do this, use AST\_OFFSET2 to calculate the
-position of each corner, and then add (or subtract) 90 degrees from the 
-position angle returned by AST\_OFFSET2.
-
-The \htmlref{AST\_ANGLE}{AST_ANGLE} routine 
-calculates the angle subtended by two points, at a third point.
-If used with a 2-dimensional Frame the returned angle
-is signed to indicate the sense of rotation (clockwise or anti-clockwise)
-in taking the ``shortest route'' from the first point to the second.
-If the Frame has more than 2 axes, the result is un-signed and is always
-in the range zero to $\pi$. 
-
-The \htmlref{AST\_AXANGLE}{AST_AXANGLE} routine is similar to AST\_AXANGLE,
-but the ``reference direction'', from which angles are measured, is 
-a specified axis. 
-
-The \htmlref{AST\_RESOLVE}{AST_RESOLVE} routine
-resolves a given displacement within a Frame into two components, parallel and 
-perpendicular to a given reference direction. 
-
-The displacement is specified by two positions within the Frame; the
-starting and ending positions. The reference direction is defined by the 
-geodesic curve passing through the starting position and a third specified
-position. The lengths of the two components are returned, together with
-the position on the reference geodesic which is closest to the third
-supplied point.
-
-\subsection{\label{ss:framedomains}The Domain Attribute}
-
-The \htmlref{Domain}{Domain} attribute is one of the most important properties of a
-\htmlref{Frame}{Frame}, although the concept it expresses can sometimes seem a little
-subtle.  We will introduce it here, but its true value will probably
-not become apparent until later (\secref{ss:framesetconverting}).
-
-To understand the need for the Domain attribute, consider using
-different Frames to represent the following different coordinate
-systems associated with a CCD image:
-
-\begin{enumerate}
-\item A coordinate system based on pixel numbers.
-
-\item Positions on the CCD chip, measured in $\mu$m.
-
-\item Positions in the focal plane of the telescope, measured in mm.
-
-\item A celestial coordinate system, measured in radians.
-\end{enumerate}
-
-If we had two such CCD images, we might legitimately want to align
-them pixel-for-pixel ({\em{i.e.}}\ using the coordinate system based
-on pixel numbers) in order to, say, divide by a flat-field exposure.
-We might similarly consider aligning them using any of the other
-coordinate systems so as to achieve different results. For example, we
-might consider merging separate images from a CCD mosaic by using
-focal plane positions.
-
-It would obviously not be legitimate, however, to directly compare
-positions in one image measured in pixels with positions in the other
-measured in mm, nor to equate chip positions in $\mu$m with sky
-coordinates in radians. If we wanted to inter-compare these
-coordinates, we would need to do it indirectly, using other
-information based on the experimental set-up. For instance, we might
-need to know the size of the pixels expressed in mm and the
-orientation of the CCD chip in the focal plane.
-
-Note that it is not simply the difference in physical units which
-prevents certain coordinates from being directly inter-compared
-(because the appropriate unit scaling factors could be included
-without any additional information). Neither is it the fact that
-different coordinate systems are in use (because we could legitimately
-inter-compare two different celestial coordinate systems without any
-extra information).  Instead, it is the different nature of the
-coordinate spaces to which these coordinate systems have been applied.
-
-We normally express this by saying that the coordinate systems apply
-to different {\em{physical domains}}. Although we may establish
-{\em{ad hoc}} relationships between coordinates in different physical
-domains, they are not intrinsically related to each other and we need
-to supply extra information before we can convert coordinates between
-them.
-
-In AST, the role of the (character string) Domain attribute is to
-assign Frames to their respective physical domains. The way it
-operates is as follows:
-
-\begin{itemize}
-\item Coordinate systems which apply to the same physical domain
-({\em{i.e.}}\ whose Frames have the same Domain value) can be directly
-inter-compared.
-
-If the domain has several coordinate systems associated with it
-({\em{e.g.}}\ the celestial sphere), then a coordinate conversion may
-be involved. Otherwise, coordinate values may simply be equated.
-
-\item Coordinate systems which apply to different physical domains
-({\em{i.e.}}\ whose Frames have different Domain values) cannot be
-directly inter-compared.
-
-If any relationship does exist between such coordinate systems---and
-it need not---then additional information must be supplied in order to
-establish the relationship between them in any particular case. We
-will see later (\secref{ss:framesets}) how to establish such
-relationships between Frames in different domains.
-\end{itemize}
-
-With the basic Frames we are considering here, each physical domain only
-has a single (Cartesian) coordinate system associated with it, so that if
-two such Frames have the same Domain value, their coordinate systems will
-be identical and may simply be equated. With more specialised Frames,
-however, more than one coordinate system may apply to each domain. In
-such cases, a coordinate conversion may need to be performed.
-
-When a basic Frame is created, its Domain attribute defaults to a
-blank string. This means that all such Frames belong to the same
-(null) domain by default and therefore describe the same unspecified
-physical coordinate space. In order to assign a Frame to a different
-domain, you simply need to set its Domain value. This is normally most
-conveniently done when it is created, as follows:
-
-\small
-\begin{verbatim}
-      FRAME1 = AST_FRAME( 2, 'Domain=CCD_CHIP,' //
-                             'Unit(1)=micron,' //
-                             'Unit(2)=micron', STATUS )
-      FRAME2 = AST_FRAME( 2, 'Domain=FOCAL_PLANE,' //
-                             'Unit(1)=mm,' //
-                             'Unit(2)=mm', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have created two Frames in different physical
-domains. Although their coordinate values all have units of length,
-they cannot be directly inter-compared (because their axes may be
-rotated with respect to each other, for instance).
-
-All Domain values are automatically converted to upper case and white
-space is removed, but there are no other restrictions on the names you
-may use to label different physical domains. From a practical point of
-view, however, it is worth following a few conventions
-(\secref{ss:domainconventions}).
-
-\subsection{\label{ss:domainconventions}Conventions for Domain Names}
-
-When choosing a value for the \htmlref{Domain}{Domain} attribute of a \htmlref{Frame}{Frame}, it
-obviously makes sense to avoid generic names which might clash with
-those used for similar (but subtly different!) purposes by other
-programmers. If you are developing software for an instrument, for
-example, and want to identify an instrumental coordinate system, then
-it is sensible to add a distinguishing prefix. For instance, you might
-use $<$INST$>$\_FOCAL\_PLANE, where $<$INST$>$ ({\em{e.g.}}\ an
-acronym) identifies your instrument.
-
-For some purposes, however, a standard choice of Domain name is
-desirable so that different items of software can communicate. For
-this purpose, the following Domain names are reserved by AST and the
-use recommended below should be carefully observed:
-
-\begin{quote}
-\begin{description}
-\item[GRAPHICS]\mbox{}\\
-Identifies the coordinate space used by an underlying computer
-graphics system to specify plotting operations. Typically, when
-performing graphical operations, AST is used to define additional
-coordinate systems which are related to these ``native'' graphical
-coordinates.  Plotting may be carried out in any of these coordinate
-systems, but the GRAPHICS domain identifies the native coordinates
-through which AST communicates with the underlying graphics system.
-
-\item[GRID]\mbox{}\\
-Identifies the instantaneous {\em{data grid}} used to store and handle
-data, together with an associated coordinate system. In this
-coordinate system, the first element stored in an array of data always
-has a coordinate value of unity at its centre and all elements have
-unit extent. This applies to all dimensions.
-
-If data are copied or transformed to a new data grid (by whatever
-means), or a subset of the original grid is extracted, then the same
-rules apply to the copy or subset. Its first element therefore has
-GRID coordinate values of unity at its centre. Note that this means
-that GRID coordinates remain attached to the first element of the data
-grid and not to its data content ({\em{e.g.}}\ the features in an
-image).
-
-\item[PIXEL]\mbox{}\\
-Identifies an array of pixels and an associated {\em{pixel-based}}
-coordinate system which is related to the GRID coordinate system
-(above) simply by a shift of origin along each axis. This shift may be
-integral, fractional, positive, negative or zero. The data elements
-retain their unit extent along each axis.
-
-Because the amount of shift is unspecified, the PIXEL domain is
-distinct from the GRID domain. The relationship between them contains
-a degree of uncertainty, such as typically arises from the different
-conventions used by different software systems. For instance, in some
-software the first pixel is regarded as being centred at (1,1), while
-in other software it is at (0.5,0.5). In addition, some software
-packages implement a ``pixel origin'' which allows pixel coordinates
-to start at an arbitrary value.
-
-The GRID domain (which corresponds with the pixel-numbering convention
-used by FITS) is a special case of the PIXEL domain and avoids this
-uncertainty. In general, additional information is required in order
-to convert from one to the other.
-
-\item[SKY]\mbox{}\\
-Identifies the domain which contains all equivalent celestial
-coordinate systems. Because these are represented in AST by SkyFrames
-(\secref{ss:skyframes}), it should be no surprise that the default
-Domain value for a \htmlref{SkyFrame}{SkyFrame} is SKY. Since there is only one sky, you
-probably won't need to change this very often.
-
-\item[SPECTRUM]\mbox{}\\
-Identifies the domain used to describe positions within an
-electro-magnetic spectrum. The AST \htmlref{SpecFrame}{SpecFrame} (\secref{ss:specframes})
-class describes positions within this domain, allowing a wide range of
-different coordinate systems to be used (frequency, wavelength,
-{\em{etc}}). The default Domain value for a SpecFrame is SPECTRUM.
-
-\item[TIME]\mbox{}\\
-Identifies the domain used to describe moments in time. The AST \htmlref{TimeFrame}{TimeFrame} 
-class describes positions within this domain, allowing a wide range of
-different coordinate systems and timescales to be used. The default Domain 
-value for a TimeFrame is TIME.
-
-\end{description}
-\end{quote}
-
-Although we have drawn a necessary distinction here between the GRID
-and PIXEL domains, we will continue to refer in general terms to image
-``pixels'' and ``pixel coordinates'' whenever this distinction is not
-important. This should not be taken to imply that the GRID convention
-for numbering pixels is excluded---in fact, it is usually to be
-preferred (at the level of data handling being discussed in this
-document) and we recommend it.
-
-\subsection{\label{ss:frameunits}The Unit Attribute}
-Each axis of a \htmlref{Frame}{Frame} has a Unit attribute which holds the physical units used
-to describe positions on the axis. The index of the axis to which the 
-attribute refers should normally be placed in parentheses following the
-attribute name (``Unit(2)'' for instance). However, if the Frame has only
-a single axis, then the axis index can be omitted.
-
-In versions of AST prior to version 2.0, the Unit attribute was nothing
-more than a descriptive string intended purely for human readers---no
-part of the AST system used the Unit string for any purpose (other than 
-inclusion in axis labels produced by the \htmlref{Plot}{Plot} class). In particular, no
-account was taken of the Unit attribute when finding the \htmlref{Mapping}{Mapping} between
-two Frames. Thus if the conversion between a pair of 1-dimensional Frames 
-representing velocity was found (using
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-) the returned Mapping would always be a \htmlref{UnitMap}{UnitMap}, even if the Unit
-attributes of the two Frames were ``km/h'' and ``m/s''. This behaviour is
-referred to below as a \emph{passive} Unit attribute.
-
-As of AST version 2.0, a facility exists which allows the Unit attribute
-to be \emph{active}; that is, differences in the 
-Unit attribute may be taken into account when finding the Mapping between
-two Frames. In order to minimise the risk of breaking older software, the 
-\emph{default} behaviour of simple Frames and SkyFrames is unchanged from 
-previous versions (\emph{i.e.} they have passive Unit attributes). However, 
-the new 
-routines \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} and \htmlref{AST\_GETACTIVEUNIT}{AST_GETACTIVEUNIT}
-allow this default behaviour to be changed. The \htmlref{SpecFrame}{SpecFrame} and \htmlref{TimeFrame}{TimeFrame}
-classes \emph{always} have an active Unit attribute (attempts to change this 
-are ignored).
-
-For instance, consider the above example of two 1-dimensional Frames
-describing velocity. These Frames can be created as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FRAME1, FRAME2
-
-      FRAME1 = AST_FRAME( 1, 'Domain=VELOCITY,Unit=km/h' )
-      FRAME2 = AST_FRAME( 1, 'Domain=VELOCITY,Unit=m/s' )
-
-\end{verbatim}
-\normalsize
-
-By default, these Frames have passive Unit attributes, and so an attempt
-to find a Mapping between them would ignore the difference in their Unit
-attributes and return a unit Mapping. To avoid this, we indicate that we
-want these Frames to have \emph{active} Unit attributes, as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SETACTIVEUNIT( FRAME1, .TRUE., STATUS )
-      CALL AST_SETACTIVEUNIT( FRAME2, .TRUE., STATUS )
-\end{verbatim}
-\normalsize
-
-If we then find the Mapping between them as follows:
-
-\small
-\begin{verbatim}
-      INTEGER CVT
-      ...
-      CVT = AST_CONVERT( FRAME1, FRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-the Mapping contained within the \htmlref{FrameSet}{FrameSet} returned by
-AST\_CONVERT
-will be a one-dimensional \htmlref{ZoomMap}{ZoomMap} which simply scales its input (a
-velocity in $km/h$) by a factor of 0.278 to create its output (a velocity
-in $m/s$).
-
-In fact we need not have set the Unit attribute active in FRAME1
-since the behaviour of AST\_CONVERT is determined by its TO Frame
-(the second Frame argument).
-
-\subsubsection{\label{ss:unitsyntax}The Syntax for Unit Strings}
-Conversion between units systems relies on the use of a specific syntax
-for the Unit attribute. If the value of the Unit attribute does not
-conform to this syntax, then an error will be reported if an attempt is
-made to use it to determine an inter-unit \htmlref{Mapping}{Mapping} (this will never happen
-if the Unit attribute is \emph{passive}).
-
-The adopted syntax is that described in FITS-WCS paper I "Representation
-of World Coordinate in FITS" by Greisen \& Calabretta. We distinguish
-here between ``basic'' units and ``derived'' units: derived units are
-defined in terms of other units (either derived or basic), whereas basic
-units have no such definitions. Derived units may be represented by their
-own \emph{symbol} (\emph{e.g.} ``Jy''---the Jansky) or by a
-\emph{mathematical expression} which combines other symbols and constants
-to form a definition of the unit (\emph{e.g.} ``km/s''---kilometres per
-second). Unit symbols may be prefixed by a string representing a standard 
-multiple or sub-multiple.
-
-In addition to the unit symbols listed in FITS-WCS Paper I, any other
-arbitrary unit symbol may be used, with the proviso that it will not be
-possible to convert between Frames using such units. The exception to
-this is if both Frames refer to the same unknown unit string. For instance,
-an axis with unknown unit symbol "flop" \emph{could} be converted to an axis 
-with  unit "Mflop" (Mega-flop).
-
-Unit symbols (optionally prefixed with a multiple or sub-multiple) can be
-combined together using a limited range of mathematical operators and
-functions, to produce new units. Such expressions may also contain
-parentheses and numerical constants (these may optionally use
-``scientific'' notation including an ``E'' character to represent the
-power of 10).
-
-The following tables list the symbols for the basic and derived units which 
-may be included in a units string, the standard prefixes for multiples
-and sub-multiples, and the strings which may be used to represent
-mathematical operators and functions.
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|}
-\hline
-\multicolumn{3}{|c|}{{\large Basic units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{\htmlref{Full}{Full} Name} \\ \hline
-length              & m   & metre \\ 
-mass                & g   & gram \\
-time                & s   & second \\
-plane angle         & rad & radian \\
-solid angle         & sr  & steradian \\
-temperature         & K   & Kelvin \\
-electric current    & A   & Ampere \\
-amount of substance & mol & mole \\
-luminous intensity  & cd  & candela \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|l|}
-\hline
-\multicolumn{4}{|c|}{{\large Derived units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{Full Name} & \multicolumn{1}{c|}{Definition} \\ \hline
-area & barn & barn & 1.0E-28 m**2 \\
-area & pix & pixel & \\
-area & pixel & pixel & \\
-electric capacitance & F & Farad & C/V \\
-electric charge & C & Coulomb & A s \\
-electric conductance & S & Siemens & A/V \\
-electric potential & V & Volt & J/C \\
-electric resistance & Ohm & Ohm & V/A \\
-energy & J & Joule & N m \\
-energy & Ry & Rydberg & 13.605692 eV \\
-energy & eV & electron-Volt & 1.60217733E-19 J \\
-energy & erg & erg & 1.0E-7 J \\
-events & count & count & \\
-events & ct & count & \\
-events & ph & photon & \\
-events & photon & photon & \\
-flux density & Jy & Jansky & 1.0E-26 W /m**2 /Hz \\
-flux density & R & Rayleigh & 1.0E10/(4*PI) photon.m**-2 /s/sr \\
-flux density & mag & magnitude & \\
-force & N & Newton & kg m/s**2 \\
-frequency & Hz & Hertz & 1/s \\
-illuminance & lx & lux & lm/m**2 \\
-inductance & H & Henry & Wb/A \\
-length & AU & astronomical unit & 1.49598E11 m \\
-length & Angstrom & Angstrom & 1.0E-10 m \\
-length & lyr & light year & 9.460730E15 m \\
-length & pc & parsec & 3.0867E16 m \\
-length & solRad & solar radius & 6.9599E8 m \\
-luminosity & solLum & solar luminosity & 3.8268E26 W \\
-luminous flux & lm & lumen & cd sr \\
-magnetic field & G & Gauss & 1.0E-4 T \\
-magnetic flux & Wb & Weber & V s \\
-mass & solMass & solar mass & 1.9891E30 kg \\
-mass & u & unified atomic mass unit & 1.6605387E-27 kg \\
-magnetic flux density & T & Tesla & Wb/m**2 \\
-plane angle  & arcmin & arc-minute & 1/60 deg \\
-plane angle  & arcsec & arc-second & 1/3600 deg \\
-plane angle  & mas & milli-arcsecond & 1/3600000 deg \\
-plane angle & deg & degree & pi/180 rad \\
-power & W & Watt & J/s \\
-pressure, stress & Pa & Pascal & N/m**2 \\
-time  & a & year & 31557600 s \\
-time  & d & day & 86400 s \\
-time  & h & hour & 3600 s \\
-time  & yr & year & 31557600 s \\
-time  & min & minute & 60 s \\
-      & D & Debye & 1.0E-29/3 C.m \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|lll|lll|}
-\hline
-\multicolumn{6}{|c|}{{\large Prefixes for multiples \& 
-sub-multiples}} \\ \hline
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} & 
-\multicolumn{1}{c|}{Prefix} &
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} & 
-\multicolumn{1}{c|}{Prefix} \\ \hline
-$10^{-1}$ & deci & d & $10$ & deca & da \\
-$10^{-2}$ & centi & c & $10^{2}$ & hecto & h \\
-$10^{-3}$ & milli & m & $10^{3}$ & kilo & k \\
-$10^{-6}$ & micro & u & $10^{6}$ & mega & M \\
-$10^{-9}$ & nano & n & $10^{9}$ & giga & G \\
-$10^{-12}$ & pico & p & $10^{12}$ & tera & T \\
-$10^{-15}$ & femto & f & $10^{15}$ & peta & P \\
-$10^{-18}$ & atto & a & $10^{18}$ & exa & E \\
-$10^{-21}$ & zepto & z & $10^{21}$ & zetta & Z \\
-$10^{-24}$ & yocto & y & $10^{24}$ & yotta & Y \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-\multicolumn{2}{|c|}{{\large Mathematical operators \& functions}} \\
-\hline
-\multicolumn{1}{|c|}{String} & \multicolumn{1}{|c|}{Meaning} \\ \hline
-sym1 sym2           & multiplication (a space) \\ 
-sym1*sym2           & multiplication (an asterisk) \\
-sym1.sym2           & multiplication (a dot) \\
-sym1/sym2           & division \\
-sym1**y             & exponentiation ($y$ must be a numerical constant)\\
-sym1\verb+^+y       & exponentiation ($y$ must be a numerical constant)\\
-log(sym1)           & common logarithm \\
-ln(sym1)            & natural logarithm \\
-exp(sym1)           & exponential \\
-sqrt(sym1)          & square root \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\subsubsection{Side-effects of Changing the Unit attribute}
-If an \htmlref{Axis}{Axis} has an active Unit attribute, changing its value (either by 
-setting a new value or by clearing it so that the default value is 
-re-instated) may cause the Label and Symbol attributes to be changed
-accordingly. For instance, if an Axis has Unit, Label and Symbol of ``Hz'',
-``Frequency'' and ``nu'', then changing its Unit attribute to ``log(Hz)''
-will cause AST to change its Label and Symbol to ``log(Frequency)'' and 
-``Log(nu)''. These changes are only made if the Unit attribute is active,
-and a \htmlref{Mapping}{Mapping} can be found from the old units to the new units. On the other
- hand, changing the Unit from ``Hz'' to ``MHz'' would not cause any change 
-to the Label or Symbol attributes.
-
-\cleardoublepage
-\section{\label{ss:skyframes}Celestial Coordinate Systems (SkyFrames)}
-
-A \htmlref{Frame}{Frame} which is specialised for representing coordinate systems on
-the celestial sphere is obviously of great importance in
-astronomy. The \htmlref{SkyFrame}{SkyFrame} is such a Frame. In this section we examine
-the additional properties and behaviour of a SkyFrame that distinguish
-it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SkyFrame Model}
-
-A \htmlref{SkyFrame}{SkyFrame} is, of course, a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes.  When used as a Mapping, a
-SkyFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SkyFrame represents a 2-dimensional
-{\em{spherical}} coordinate system, in which the shortest distance
-between two points is a great circle.  A SkyFrame therefore always has
-exactly two axes which represent the longitude and latitude of a
-coordinate system residing on the celestial sphere. Many such
-coordinate systems can be represented by a SkyFrame, as we will see
-shortly.
-
-A SkyFrame can represent any of the commonly used celestial coordinate
-systems. Optionally, the origin of the longitude/latitude system can be 
-moved to any specified point in the standard celestial system, allowing
-a SkyFrame to represent offsets from a specified sky position.
-
-When it is first created, a SkyFrame's axes are always in the order
-(longitude,~latitude) but this can be changed, if required, by using the
-\htmlref{AST\_PERMAXES}{AST_PERMAXES} routine (\secref{ss:permutingaxes}). The order of the axes
-can be determined at any time using the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes. A
-SkyFrame's coordinate values are always stored as angles in (double
-precision) radians, regardless of the setting of the Unit attribute.
-
-\subsection{Creating a SkyFrame}
-
-The \htmlref{SkyFrame}{SkyFrame} constructor function is particularly simple and a
-SkyFrame with default attributes is created as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER SKYFRAME, STATUS
-
-      STATUS = 0
-
-      ...
-
-      SKYFRAME = AST_SKYFRAME( ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Such a SkyFrame would represent the default celestial coordinate
-system which, at present, is the ICRS system (the default was "FK5(J2000)" 
-in versions of AST prior to 3.0).
-
-\subsection{Specifying a Particular Celestial Coordinate System}
-
-For many purposes, the ICRS coordinate system is perfectly
-adequate. In order to support conversion between a variety of
-celestial coordinate systems, however, you can create SkyFrames that
-represent any of these.
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SkyFrame}{SkyFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SkyFrame is
-created. For example, a SkyFrame representing the old FK4~(B1950.0)
-coordinate system would be created by:
-
-\small
-\begin{verbatim}
-      SKYFRAME = AST_SKYFRAME( 'System=FK4', STATUS )
-\end{verbatim}
-\normalsize
-
-Note that specifying ``System$=$FK4'' also changes the associated
-equinox (from J2000.0 to B1950.0). This is because the default value
-of the SkyFrame's \htmlref{Equinox}{Equinox} attribute (\secref{ss:equinoxitem}) depends
-on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed.  The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of equatorial coordinate systems, together with ecliptic and galactic
-coordinates.
-
-General spherical coordinates are supported by specifying
-``System$=$unknown''. You should note, though, that no \htmlref{Mapping}{Mapping} can be 
-created to convert between ``unknown'' coordinates and any of the other 
-celestial coordinate systems (see \secref{ss:introducingconversion} ).
-
-\subsection{Attributes which Qualify Celestial Coordinate Systems}
-
-Many celestial coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-FK5~(J2010.0) system is distinguished from the FK5~(J2000.0)
-system by a different equinox---and the coordinates of a fixed
-astronomical source would have different values when expressed in
-these two systems.
-
-In AST, these free parameters are represented by additional \htmlref{SkyFrame}{SkyFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by 
-assigning an explicit value to the attribute, rather than simply relying on 
-the default.
-
-
-The main SkyFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\label{ss:epochitem}\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation). 
-
-\item[\label{ss:equinoxitem}\htmlref{Equinox}{Equinox}]\mbox{}\\
-This value is used to qualify celestial coordinate systems that are
-notionally based on the Earth's equator and/or the ecliptic (the plane
-of the Earth's orbit around the Sun). The position of either of these
-planes is difficult to specify precisely, so in practice a model
-{\em{mean}}\ equator and/or ecliptic are used instead. These, together
-with the point on the sky that defines the coordinate origin (termed
-the {\em{mean equinox}}) move with time according to some model which
-smoothes out the more rapid fluctuations. The SkyFrame class supports
-both the old FK4 model and the newer FK5 one.
-
-Coordinates expressed in any of these systems vary with time due to
-movement (by definition) of the coordinate system itself, and must
-therefore be qualified by a moment in time (the {\em{epoch of the mean
-equinox,}} or ``equinox'' for short) which specifies the position of
-the model coordinate system on the sky. This is the role of the
-Equinox attribute.
-
-Note that it is quite valid and common to relate the position of a
-source to an equinox other than the date of observation. Usually a
-standard equinox such as J2000.0 is used, meaning that the coordinates
-are referred to axes defined by where the model mean equator and
-ecliptic would lie on the sky at the Julian epoch J2000.0.
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-For the interested reader, an excellent overview of celestial
-coordinate systems can also be found in the documentation for the
-SLALIB library (\xref{SUN/67}{sun67}{}).
-
-The value of these qualifying attributes is most conveniently set at
-the same time as the System value, {\em{e.g.}}\ when a SkyFrame is
-created. For instance:
-
-\small
-\begin{verbatim}
-      SKYFRAME = AST_SKYFRAME( 'System=Ecliptic, Equinox=J2005.5', STATUS )
-\end{verbatim}
-\normalsize
-
-would create a SkyFrame representing an ecliptic coordinate system
-referred to the mean equinox and ecliptic of Julian epoch J2005.5.
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SkyFrame Attributes}
-
-The default values supplied for many \htmlref{SkyFrame}{SkyFrame} attributes will depend
-on the value of the SkyFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{AST\_SHOW}{AST_SHOW} to examine a SkyFrame, as
-follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SHOW( AST_SKYFRAME( 'System=FK4-NO-E, Epoch=1958', STATUS ), STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SkyFrame         # Description of celestial coordinate system
-#   Title = "FK4 equatorial coordinates; no E-terms; mean equinox B1950.0; 
-epoch B1958.0"   # Title of coordinate system
-    Naxes = 2   # Number of coordinate axes
-#   Domain = "SKY"      # Coordinate system domain
-    Epoch = 1958        # Besselian epoch of observation
-#   Lbl1 = "Right ascension"    # Label for axis 1
-#   Lbl2 = "Declination"        # Label for axis 2
-    System = "FK4-NO-E"         # Coordinate system type
-#   Uni1 = "hh:mm:ss.s"         # Units for axis 1
-#   Uni2 = "ddd:mm:ss"  # Units for axis 2
-#   Dir1 = 0    # Plot axis 1 in reverse direction
-#   Bot2 = -1.5707963267949     # Lowest legal axis value
-#   Top2 = 1.5707963267949      # Highest legal axis value
-    Ax1 =       # Axis number 1
-       Begin SkyAxis    # Celestial coordinate axis
-       End SkyAxis
-    Ax2 =       # Axis number 2
-       Begin SkyAxis    # Celestial coordinate axis
-       End SkyAxis
- IsA Frame      # Coordinate system description
-#   Eqnox = 1950        # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Format specifiers are all set to values appropriate
-for the particular equatorial coordinate system that the SkyFrame
-represents.
-
-This means, for example, that if we were to use this SkyFrame to
-format a right ascension value stored in radians using \htmlref{AST\_FORMAT}{AST_FORMAT}
-(\secref{ss:formattingaxisvalues}), it would automatically result in a
-string in sexagesimal notation (such as ``12:14:35.7'') suitable for
-display.  If we changed the value of the SkyFrame's Digits attribute
-(which is inherited from the \htmlref{Frame}{Frame} class), the number of digits
-appearing would also change accordingly.
-
-These choices would be appropriate for a System value of ``FK4-NO-E'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, ecliptic longitude is
-traditionally expressed in degrees, so setting ``System=ecliptic''
-would result in coordinate values being formatted as degrees by
-default.
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself.
-
-\subsection{\label{ss:formattingskyaxisvalues}Formatting Celestial Coordinates}
-
-SkyFrames use \htmlref{AST\_FORMAT}{AST_FORMAT} for formatting coordinate values in the same
-way as other Frames (\secref{ss:formattingaxisvalues}). However, they
-offer a different set of formatting options more appropriate to
-celestial coordinates.
-
-The Digits attribute of a \htmlref{SkyFrame}{SkyFrame} behaves in essentially the same way
-as for a basic \htmlref{Frame}{Frame} (\secref{ss:formattingwithdigits}), so the
-precision with which celestial coordinates are displayed can also be
-adjusted in this way. However, the range of format specifiers that can
-be given for the \htmlref{Format(axis)}{Formataxis} attribute, and the default format
-resulting from any particular Digits value, is different.
-
-The syntax of SkyFrame format specifiers is detailed under the
-description of the Format(axis) attribute in
-\appref{ss:attributedescriptions}.  Briefly, however, it allows
-celestial coordinates to be expressed either as angles or times and to
-include one or more of the fields:
-
-\begin{quote}
-\begin{itemize}
-\item degrees or hours
-\item arc-minutes or minutes
-\item arc-seconds or seconds
-\end{itemize}
-\end{quote}
-
-with a specified number of decimal places for the final field. A range
-of field separators is also available, as the following examples show:
-
-\begin{quote}
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-{\bf{Format Specifier}} & {\bf{Example Formatted Value}}\\
-\hline \hline
-{\tt{d}} & {\tt{219}}\\
-{\tt{d.3}} & {\tt{219.123}}\\
-{\tt{dm}} & {\tt{219:05}}\\
-{\tt{dm.2}} & {\tt{219:05.44}}\\
-{\tt{dms}} & {\tt{219:05:42}}\\
-{\tt{hms.1}} & {\tt{15:44:13.8}}\\
-{\tt{bdms.2}} & {\tt{219 05 42.81}}\\
-{\tt{lhms.3}} & {\tt{15h44m13.88s}}\\
-{\tt{+zlhms}} & {\tt{+06h10m44s}}\\
-{\tt{ms.1}} & {\tt{13145:42.8}}\\
-{\tt{lmst.3}} & {\tt{876m22.854s}}\\
-{\tt{s.2}} & {\tt{788742.81}}\\
-\hline
-\end{tabular}
-\end{center}
-\end{quote}
-
-Note the following key points:
-
-\begin{itemize}
-\item The required fields are specified using characters chosen from
-either ``dms'' or ``hms'' according to whether the value is to be
-formatted as an angle (in degrees) or a time (in hours).
-
-\item If no degrees or hours field is required, the distinction
-between angle and time may be made by including ``t'' to request time.
-
-\item The number of decimal places (for the final field) is indicated
-using ``{\tt{.}}'' followed by an integer. An asterisk can be used in
-place of an integer, in which case the number of decimal places is 
-chosen so that the total number of digits in the formatted value is equal 
-to the value of the Digits attribute.
-
-\item ``b'' causes fields to be separated by blanks, while ``l''
-causes them to be separated by the appropriate letters (the default
-being a colon).
-
-\item ``z'' causes padding with leading zeros.
-
-\item ``+'' cause a plus sign to be prefixed to positive values
-(negative values always have a minus sign).
-\end{itemize}
-
-The formatting performed by a SkyFrame is also influenced by the
-\htmlref{AsTime(axis)}{AsTimeaxis} attribute, which has a boolean (integer) value for each
-SkyFrame axis.  It determines whether the default format specifier for
-an axis will present values as angles ({\em{e.g.}}\ in degrees) if it
-is zero, or as times ({\em{e.g.}}\ in hours) if it is non-zero.
-
-The default AsTime value depends on the celestial coordinate system
-which the SkyFrame represents which, in turn, depends on its \htmlref{System}{System}
-attribute value. For example, equatorial longitude values (right
-ascension) are normally expressed in hours, whereas ecliptic
-longitudes are normally expressed in degrees, so their default AsTime
-values will reflect this difference.
-
-The value of the AsTime attribute may be set explicitly to over-ride
-these defaults if required, with the formatting precision being
-determined by the \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis} value. Alternatively, the
-Format(axis) attribute may be set explicitly to specify both the
-format and precision required. Setting an explicit Format value always
-over-rides the effects of both the Digits and AsTime attributes (unless
-the Format value does not specify the required number of decimal places,
-in which case Digits is used to determine the default number of decimal
-places)
-
-\subsection{\label{ss:unformattingskyaxisvalues}Reading Formatted Celestial Coordinates}
-
-The process of converting formatted celestial coordinates, such as
-might be produced by the \htmlref{AST\_FORMAT}{AST_FORMAT} function
-(\secref{ss:formattingskyaxisvalues}), into numerical (double
-precision) coordinate values is performed by using \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}
-(\secref{ss:unformattingaxisvalues}) and passing it a pointer to a
-\htmlref{SkyFrame}{SkyFrame}. The use of a SkyFrame means that the range of input formats
-accepted is appropriate to positions on the sky expressed as angles
-and/or times, while the returned value is in radians.
-
-The following describes the forms of celestial coordinate which are
-supported:
-
-\begin{itemize}
-\item You may supply an optional sign, followed by between one and
-three fields representing either degrees, arc-minutes, arc-seconds or
-hours, minutes, seconds ({\em{e.g.}}\ ``$-$12~42~03'').
-
-\item Each field should consist of a sequence of one or more digits,
-which may include leading zeros. At most one field may contain a
-decimal point, in which case it is taken to be the final field
-({\em{e.g.}}\ decimal degrees might be given as ``124.707'', while
-degrees and decimal arc-minutes might be given as ``$-$13~33.8'').
-
-\item The first field given may take any value, allowing angles and
-times outside the conventional ranges to be represented. However,
-subsequent fields must have values of less than 60 ({\em{e.g.}}
-``720~45~31'' is valid, whereas ``11~45~61'' is not).
-
-\item Fields may be separated by white space or by ``:'' (colon), but
-the choice of separator must be used consistently throughout the
-value. Additional white space may be present around fields and
-separators ({\em{e.g.}}\ ``$-$~2:~04~:~7.1'').
-
-\item The following field identification characters may be used as
-separators to replace those above (or may be appended to the final
-field), in order to identify the field to which they are appended:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & degrees \\
-h & -- & hours \\
-m & -- & minutes (of arc or time) \\
-s & -- & seconds (of arc or time) \\
-{\tt{'}} & -- & arc-minutes \\
-{\tt{"}} & -- & arc-seconds
-\end{tabular}
-\end{quote}
-
-Either lower or upper case may be used.  Fields must be given in order
-of decreasing significance
-({\em{e.g.}}\ ``$-$11D~3{\tt{'}}~14.4{\tt{"}}'' or ``22h14m11.2s'').
-
-\item The presence of certain field identification characters
-indicates whether the value is to be interpreted as an angle or a time
-(with 24 hours corresponding to 360 degrees), as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & angle \\
-{\tt{'}} & -- & angle \\
-{\tt{"}} & -- & angle \\
-h & -- & time
-\end{tabular}
-\end{quote}
-
-Incompatible angle/time identification characters may not be mixed
-({\em{e.g.}}\ ``10h14{\tt{'}}3{\tt{"}}'' is not valid).  The remaining
-field identification characters and separators do not specify a
-preference for an angle or a time and may be used with either.
-
-\item If no preference for an angle or a time is expressed anywhere
-within the value, then it is interpreted as an angle if the Format
-attribute string associated with the SkyFrame axis generates an angle
-and as a time otherwise.  This ensures that values produced by
-AST\_FORMAT (\secref{ss:formattingskyaxisvalues}) are correctly
-interpreted by AST\_UNFORMAT.
-
-\item Fields may be omitted, in which case they default to zero. The
-remaining fields may be identified by using appropriate field
-identification characters (see above) and/or by adding extra colon
-separators (e.g. ``$-$05m13s'' is equivalent to ``$-$:05:13''). If a field
-is not identified explicitly, it is assumed that adjacent fields have
-been given, after taking account of any extra separator
-characters. For example:
-
-\begin{quote}
-\begin{tabular}{lll}
-10d & -- & degrees \\
-10d12 & -- & degrees and arc-minutes \\
-11:14{\tt{"}} & -- & arc-minutes and arc-seconds \\
-9h13s & -- & hours and seconds of time \\
-:45:33 & -- & minutes and seconds (of arc or time) \\
-:55: & -- & minutes (of arc or time) \\
-::13 & -- & seconds (of arc or time) \\
-$-$6::2.5 & -- & degrees/hours and seconds (of arc or time) \\
-07m14 & -- & minutes and seconds (of arc or time) \\
-$-$8:14{\tt{'}} & -- & degrees and arc-minutes \\
-$-$h3:14 & -- & minutes and seconds of time \\
-h:2.1 & -- & seconds of time
-\end{tabular}
-\end{quote}
-
-\item If fields are omitted in such a way that the remaining ones
-cannot be identified uniquely (e.g. ``01:02''), then the first field
-(either given explicitly or implied by an extra leading colon
-separator) is taken to be the most significant field that AST\_FORMAT
-would produce when formatting a value (using the Format attribute
-associated with the SkyFrame axis). By default, this means that the
-first field will normally be interpreted as degrees or hours. However,
-if this does not result in consistent field identification, then the
-last field (either given explicitly or implied by an extra trailing
-colon separator) is taken to to be the least significant field that
-AST\_FORMAT would produce.
-
-\end{itemize}
-
-This final convention is intended to ensure that values formatted by
-AST\_FORMAT which contain less than three fields will be correctly
-interpreted if read back using AST\_UNFORMAT, even if they do not
-contain field identification characters.  However, it also affects
-other forms of input. For example, if the \htmlref{Format(axis)}{Formataxis} string were set
-to ``mst.1'' (producing two fields representing minutes and seconds of
-time), then formatted input would be interpreted by AST\_UNFORMAT as
-follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12 13 & -- & minutes and seconds \\
-12 & -- & minutes \\
-:13 & -- & seconds \\
-$-$18: & -- & minutes \\
-12.8 & -- & minutes \\
-1 2 3 & -- & hours, minutes and seconds \\
-& & \\
-4{\tt{'}} & -- & arc-minutes \\
-60::{\tt{"}} & -- & degrees \\
-$-$23:{\tt{"}} & -- & arc-minutes \\
-$-$33h & -- & hours
-\end{tabular}
-\end{quote}
-
-(in the last four cases, explicit field identification has been given
-which overrides the implicit identification).
-
-Alternatively, if the Format(axis) string were set to ``s.3''
-(producing only an arc-seconds field), then formatted input would be
-interpreted by AST\_UNFORMAT as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12.8 & -- & arc-seconds \\
-12 13 & -- & arc-minutes and arc-seconds \\
-:12 & -- & arc-seconds \\
-13: & -- & arc-minutes \\
-1 2 3 & -- & degrees, arc-minutes and arc-seconds
-\end{tabular}
-\end{quote}
-
-In general, if you are preparing formatted input data containing
-celestial coordinates and wish to omit certain fields, then you are
-advised to identify clearly those that you do provide by using the
-appropriate field identification characters and/or extra colon
-separators. This prevents you depending on the implicit field
-identification described above which, in turn, depends on an
-appropriate Format(axis) string having been set.
-
-When writing software, it is also a good idea to set the Format(axis)
-string so that data input will be as simple as possible for the
-user. Unless some special effect is desired, this normally means that
-it should contain ``d'' or ``h'' to ensure that the first field
-entered by the user will be interpreted as degrees or hours, unless
-otherwise identified. This is the normal behaviour unless an explicit
-Format(axis) value has been set to override the default.
-
-\subsection{Representing Offsets from a Specified Sky Position}
-A \htmlref{SkyFrame}{SkyFrame} can be modified so that its longitude and latitude axes are
-referred to an origin at any specified sky position. Such a coordinate
-system is referred to as an ``offset'' coordinate syetem. First, the \htmlref{System}{System}
-attribute should be set to represent the celestial coordinate system in
-which the origin is to be specified. Then the SkyRef attribute should be
-set to hold the coordinates of the origin within the selected celestial
-coordinate system. 
-
-By default, ``north'' in the new offset coordinate system is parallel to
-north in the original celestial coordinate system. However, the direction
-of north in the offset system can be controlled by assigning a value to
-the SkyRefP attribute. This attribute should be assigned the celestial
-coordinates of a point which is on the zero longitude meridian and which
-has non-zero latitude.
-
-By default, the position given by the SkyRef attribute is used as the
-origin of the new longitude/latitude system, but an option exists to use
-it as the north pole of the system instead. This option is controlled by
-the \htmlref{SkyRefIs}{SkyRefIs} attribute. The choice of value for SkyRefIs depends on what
-sort of offset coordinate system you want. Setting SkyRefIs to
-``Origin'' (the default) produces an offset coordinate system which is
-approximately Cartesian close to the specified position. Setting SkyRefIs
-to
-``Pole'' produces an offset coordinate system which is approximately Polar
-close to the specified position. 
-
-\cleardoublepage
-\section{\xlabel{ss_specframes}\label{ss:specframes}Spectral Coordinate Systems (SpecFrames)}
-
-The \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} which is specialised for representing coordinate 
-systems which describe a position within an electro-magnetic spectrum.
-In this section we examine the additional properties and behaviour of a 
-SpecFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SpecFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes.  When used as a Mapping, a
-SpecFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SpecFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-positions within a spectrum. The options available largely mirror those
-described in the FITS-WCS paper III \emph{Representations of spectral
-coordinates in FITS} (Greisen, Valdes, Calabretta \& Allen).
-
-\subsection{Creating a SpecFrame}
-
-The \htmlref{SpecFrame}{SpecFrame} constructor function is particularly simple and a
-SpecFrame with default attributes is created as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER SPECFRAME, STATUS
-
-      STATUS = 0
-
-      ...
-
-      SPECFRAME = AST_SPECFRAME( ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Such a SpecFrame would represent the default coordinate system which is 
-heliocentric wavelength in metres (i.e. wavelength corrected to take into 
-account the Doppler shift caused by the velocity of the observer around the 
-sun).
-
-\subsection{Specifying a Particular Spectral Coordinate System}
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SpecFrame}{SpecFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SpecFrame is
-created. For example, a SpecFrame representing Energy would be created by:
-
-\small
-\begin{verbatim}
-      SPECFRAME = AST_SPECFRAME( 'System=Energy', STATUS )
-\end{verbatim}
-\normalsize
-
-Note that specifying ``System$=$Energy'' also changes the associated
-Unit (from metres to Joules). This is because the default value
-of the SpecFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed.  The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of velocity systems, together with frequency, wavelength, energy,
-wave-number, \emph{etc}.
-
-\subsection{Attributes which Qualify Spectral Coordinate Systems}
-
-Many spectral coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-velocity systems are all parameterised by a rest frequency---the
-frequency which defines zero velocity, and all coordinate systems 
-are qualified by a `standard of rest'' which indicates the rest frame to
-which the values refer.
-
-In AST, these free parameters are represented by additional \htmlref{SpecFrame}{SpecFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by 
-assigning an explicit value to the attribute, rather than simply relying on 
-the default.
-
-
-The main SpecFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation). It is needed in order to 
-calculate the Doppler shift produced by the velocity of the observer
-relative to the centre of the earth, and of the earth relative to the sun.
-
-\item[\htmlref{StdOfRest}{StdOfRest}]\mbox{}\\
-This specifies the rest frame in which the coordinates are correct.
-Transforming between different standards of rest involves taking account
-of the Doppler shift introduced by the relative motion of the two
-standards of rest. 
-
-\item[\htmlref{RestFreq}{RestFreq}]\mbox{}\\
-Specifies the frequency which correspond to zero velocity. When setting a
-value for this attribute, the value may be supplied as a wavelength
-(including an indication of the units being used, ``nm'' ``Angstrom'',
-\emph{etc.}), which will be automatically be converted to a frequency.
-
-\item[\htmlref{RefRA}{RefRA}]\mbox{}\\
-Specifies the RA (FK5 J2000) of the source. This is used when converting
-between standards of rest. It specifies the direction along which the
-component of the relative velocity of the two standards of rest is taken.
-
-\item[\htmlref{RefDec}{RefDec}]\mbox{}\\
-Specifies the Dec (FK5 J2000) of the source. Used in conjunction with
-REFRA.
-
-\item[\htmlref{SourceVel}{SourceVel}]\mbox{}\\
-This defines the ``source'' standard of rest. This is a rest frame which
-is moving towards the position given by RefRA and RefDec, at a velocity
-given by SourceVel. The velocity is stored internally as a heliocentric
-velocity, but can be given in any of the other supported standards of rest.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SpecFrame Attributes}
-
-The default values supplied for many \htmlref{SpecFrame}{SpecFrame} attributes will depend
-on the value of the SpecFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{AST\_SHOW}{AST_SHOW} to examine a SpecFrame, as
-follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SHOW( AST_SPECFRAME( 'System=Vopt, RestFreq=250 GHz', STATUS ), 
-     :               STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SpecFrame        # Description of spectral coordinate system
-#   Title = "Optical velocity, rest frequency = 250 GHz"       # Title
-of coordinate system
-    Naxes = 1   # Number of coordinate axes
-#   Domain = "SPECTRUM"         # Coordinate system domain
-#   Epoch = 2000        # Julian epoch of observation
-#   Lbl1 = "Optical velocity"  # Label for axis 1
-    System = "VOPT"     # Coordinate system type
-#   Uni1 = "km/s"       # Units for axis 1
-    Ax1 =       # Axis number 1
-       Begin Axis       # Coordinate axis
-       End Axis
- IsA Frame      # Coordinate system description
-#   SoR = "Heliocentric"        # Standard of rest
-    RstFrq = 250000000000       # Rest frequency (Hz)
- End SpecFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Unit specifiers are all set to values appropriate
-for the particular velocity system that the SpecFrame represents.
-
-These choices would be appropriate for a System value of ``Vopt'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, by default frequency is measured in 
-units of GHz, not $km/s$, so setting ``System=freq''
-would change the appropriate line above from:
-
-\begin{quote}
-\begin{verbatim}
-#   Uni1 = "km/s"       # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-to
-
-\begin{quote}
-\begin{verbatim}
-#   Uni1 = "GHz"        # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself. For
-instance, you may choose to have your frequency axis expressed in ``kHz''
-rather than ``GHz''. To do this simply set the attribute value as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SETC( SPECFRAME, 'Unit', 'kHz', STATUS )
-\end{verbatim}
-\normalsize
-
-No error will be reported if you accidentally set an inappropriate Unit value 
-(say "J" - Joules)---after all, AST cannot tell what you are about to do,
-and you \emph{may} be about to change the System value to ``Energy''.
-However, an error \emph{will} be reported if you attempt to find a
-conversion between two SpecFrames (for instance using 
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-) if either SpecFrame has a Unit value which is inappropriate for its
-System value.
-
-SpecFrame attributes, like all other attributes, all have default
-value. However, be aware that for some attributes these default values
-can never be more than ``a legal numerical value'' and have no
-astronomical significance. For instance, the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes
-(which give the source position) both have a default value of zero. So
-unless your source happens to be at that point (highly unlikely!) you will
-need to set new values. Likewise, the \htmlref{RestFreq}{RestFreq} (rest frequency) attribute
-has an arbitrary default value of 1.0E5 GHz. Some operations are not
-affected by inappropriate values for these attributes (for instance,
-converting from frequency to wavelength, changing axis units, \emph{etc}),
-but some are. For instance, converting from frequency to velocity
-requires a correct rest frequency, moving between different standards of
-rest requires a correct source position. The moral is, always set explicit
-values for as many attributes as possible.
-
-\subsection{\label{ss:creatingspectralcubes}Creating Spectral Cubes}
-You can use a \htmlref{SpecFrame}{SpecFrame} to describe the spectral axis in a data cube
-containing two spatial axes and a spectral axis. To do this you would
-create an appropriate SpecFrame, together with a 2-dimensional \htmlref{Frame}{Frame} 
-(often a \htmlref{SkyFrame}{SkyFrame}) to describe the spatial axes. You would then combine
-these two Frames together into a single \htmlref{CmpFrame}{CmpFrame}.
-
-\small
-\begin{verbatim}
-      INTEGER SKYFRAME
-      INTEGER SPECFRAME
-      INTEGER CMPFRAME
-      ...
-      SKYFRAME = AST_SKYFRAME( 'Epoch=J2002', STATUS )
-      SPECFRAME = AST_SPECFRAME( 'System=Freq,StdOfRest=LSRK',
-     :                           STATUS )
-      CMPFRAME = AST_CMPFRAME( SKYFRAME, SPECFRAME, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-In the resulting CmpFrame, axis 1 will be RA, axis 2 will be Dec and axis
-3 will be Frequency. If this is not the order you want, you can permute
-the axes using 
-\htmlref{AST\_PERMAXES}{AST_PERMAXES}.
-
-There is one potential problem with this approach if you are interested in
-unusually high accuracy. Conversion between different standards of rest
-involves taking account of the Doppler shift caused by the relative
-motion of the two standards of rest. At some point this involves finding
-the component of  the relative velocity in the direction of interest.
-For a SpecFrame, this direction is always given by the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}
-attributes, even if the SpecFrame is embedded within a CmpFrame as above.
-It would be more appropriate if this ``direction of interest'' was
-specified by the values passed into the CmpFrame on the RA and DEC axes,
-allowing each pixel within a data cube to have a slightly different
-correction for Doppler shift.
-
-Unfortunately, the SpecFrame class cannot do this (since it is purely a
-1-dimensional Frame), and so some small degree of error will be
-introduced when converting between standards of rest, the size of the
-error varying from pixel to pixel. It is hoped that at some point in the
-future a sub-class of CmpFrame (a SpecCubeFrame) will be added to AST which 
-allows for this spatial variation in Doppler shift.
-
-The maximum velocity error introduced by this problem is of the order of
-$V*SIN(FOV)$, where $FOV$ is the angular field of view, and $V$ is the
-relative velocity of the two standards of rest. As an example, when
-correcting from the observers rest frame (i.e. the topocentric rest
-frame) to the kinematic local standard of rest the maximum value of $V$
-is about 20 $km/s$, so for 5 arc-minute field of view the maximum
-velocity error introduced by the correction will be about 0.03 $km/s$. As
-another example, the maximum error when correcting from the observers
-rest frame to the local group is about 5 $km/s$ over a 1 degree field of
-view.
-
-\subsection{\label{ss:handlingdualsidebandspectra}Handling Dual-Sideband Spectra}
-Dual sideband super-heterodyne receivers produce spectra in which each channel
-contains contributions from two different frequencies, referred to as the
-``upper sideband frequency'' and the ``lower sideband frequency''. In the
-rest frame of the observer (topocentric), these are related to each other as 
-follows:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb}
-   f_{lsb} = 2.f_{LO} - f_{usb}
-\end{equation}
-\end{small}
-\end{quote}
-
-where $f_{LO}$ is a fixed frequency known as the ``local oscillator
-frequency''. In other words, the local oscillator frequency is always
-mid-way between any pair of corresponding upper and lower sideband
-frequencies\footnote{Note, this simple relationship only applies if all
-frequencies are topocentric.}. If you want to describe the spectral axis
-of such a spectrum using a \htmlref{SpecFrame}{SpecFrame} you must choose whether you want the
-SpecFrame to describe $f_{lsb}$ or $f_{usb}$ - a basic SpecFrame cannot
-describe both sidebands simultaneously. However, there is a sub-class of
-SpecFrame, called \htmlref{DSBSpecFrame}{DSBSpecFrame}, which overcomes this difficulty.
-
-A DSBSpecFrame has a \htmlref{SideBand}{SideBand} attribute which indicates if the
-DSBSpecFrame is currently being used to describe the upper or lower
-sideband spectral axis. The value of this attribute can be changed at any
-time. If you use the 
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-function to find the \htmlref{Mapping}{Mapping} between two DSBSpecFrames, the setting for
-the two SideBand attributes will be taken into account. Thus, if you take
-a copy of a DSBSpecFrame, toggle its SideBand attribute, and then use
-AST\_CONVERT
-to find a Mapping from the original to the modified copy, the resulting 
-Mapping will be of the form of equation \ref{eqn:dsb} (if the
-DSBSpecFrame has its \htmlref{StdOfRest}{StdOfRest} attribute set to ``Topocentric'').
-
-In general, when finding a Mapping between two arbitrary DSBSpecFrames, 
-the total Mapping is made of of three parts in series:
-
-\begin{enumerate}
-\item A Mapping which converts the first DSBSpecFrame into its upper
-sideband representation. If the DSBSpecFrame already represents its upper
-sideband, this Mapping will be a \htmlref{UnitMap}{UnitMap}.
-\item A Mapping which converts from the first to the second DSBSpecFrame,
-treating them as if they were both basic SpecFrames. This takes account of 
-any difference in units, standard of rest, system, \emph{etc} between the
-two DSBSpecFrames. 
-\item A Mapping which converts the second DSBSpecFrame from its upper
-sideband representation to its current sideband. If the DSBSpecFrame 
-currently represents its upper sideband, this Mapping will be a UnitMap.
-\end{enumerate}
-
-If an attempt is made to find the Mapping between a DSBSpecFrame and a
-basic SpecFrame, then the DSBSpecFrame will be treated like a basic
-SpecFrame. In other words, the returned Mapping will not be affected by
-the setting of the SideBand attribute (or any of the other attributes
-specific to the DSBSpecFrame class).
-
-In practice, the local oscillator frequency for a dual sideband
-instrument may not be easily available to an observer. Instead, it is
-common practice to specify the spectral position of some central feature
-in the observation (commonly the centre of the instrument passband),
-together with an ``intermediate frequency''. Together, these two values
-allow the local oscillator frequency to be determined. The intermediate
-frequency is the difference between the topocentric frequency at the
-central spectral position and the topocentric frequency of the local
-oscillator. So:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb2}
-   f_{LO} = f_{central} + f_{if}
-\end{equation}
-\end{small}
-\end{quote}
-
-The DSBSpecFrame class uses the \htmlref{DSBCentre}{DSBCentre} attribute to specify the central 
-spectral position ($f_{central}$), and the \htmlref{IF}{IF} attribute to specify the 
-intermediate frequency ($f_{if}$). The DSBCentre value is given and returned 
-in the spectral system described by the DSBSpecFrame (thus you do not need to
-calculate the corresponding topocentric frequency yourself - this will be
-done automatically by the DSBSpecFrame when you assign a new value to the
-DSBCentre attribute). The value assigned to the IF attribute should
-always be a topocentric frequency in units of Hz, however a negative
-value may be given to indicate that the DSBCentre value is in the upper
-sideband (that is, if $IF < 0$  then $f_{central} > f_{LO}$). A positive
-value for IF indicates that the DSBCentre value is in the lower sideband
-(that is, if $IF > 0$  then $f_{central} < f_{LO}$).
-
-
-\cleardoublepage
-\section{\xlabel{ss_timeframes}\label{ss:timeframes}Time Systems (TimeFrames)}
-
-The \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} which is specialised for representing moments in
-time. In this section we examine the additional properties and behaviour of a 
-TimeFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The TimeFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes.  When used as a Mapping, a
-TimeFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a TimeFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-moments in time. Absolute times and relative (i.e. elapsed) times are
-supported (attribute \htmlref{TimeOrigin}{TimeOrigin}), as are a range of different time scales
-(attribute \htmlref{TimeScale}{TimeScale}). An absolute or relative value in any time scale can 
-be represented in different forms such as Modified Julian Date, Julian \htmlref{Epoch}{Epoch}, 
-\emph{etc} (attribute \htmlref{System}{System}). AST extends the definition of these systems to
-allow them to be used with any unit of time (attribute Unit). The TimeFrame 
-class also allows times to formatted as either a simple floating point value 
-or as a Gregorian date and time of day (attribute Format).
-
-\subsection{Creating a TimeFrame}
-
-The \htmlref{TimeFrame}{TimeFrame} constructor function is particularly simple and a
-TimeFrame with default attributes is created as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER TIMEFRAME, STATUS
-
-      STATUS = 0
-
-      ...
-
-      TIMEFRAME = AST_TIMEFRAME( ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Such a TimeFrame would represent the default coordinate system which is 
-Modified Julian Date (with the usual units of days) in the International 
-Atomic Time (TAI) time scale.
-
-\subsection{Specifying a Particular Time System}
-By setting the \htmlref{System}{System} attribute appropriately, the \htmlref{TimeFrame}{TimeFrame} can represent 
-Julian Date, Modified Julian Date, Julian \htmlref{Epoch}{Epoch} or Besselian Epoch (the
-time scale is specified by a separate attribute called \htmlref{TimeScale}{TimeScale}).
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the TimeFrame's (character string) System
-attribute. This setting is most conveniently done when the TimeFrame is
-created. For example, a TimeFrame representing Julian Epoch would be created 
-by:
-
-\small
-\begin{verbatim}
-      TIMEFRAME = AST_TIMEFRAME( 'System=JEPOCH', STATUS )
-\end{verbatim}
-\normalsize
-
-Note that specifying ``System$=$JEPOCH'' also changes the associated
-default Unit (from days to years). This is because the default value
-of the TimeFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed.  The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions}.
-
-\subsection{Attributes which Qualify Time Coordinate Systems}
-
-Time coordinate systems require some additional free parameters to identify 
-a particular coordinate system from amongst a broader class of related 
-coordinate systems. For example, all TimeFrames are qualified by the time 
-scale (that is, the physical process used to define the flow of time),
-and some require the position of the observer's clock.
-
-In AST, these free parameters are represented by additional \htmlref{TimeFrame}{TimeFrame}
-attributes, each of which has a default appropriate to ({\em{i.e.}}\ defined 
-by) the setting of the main \htmlref{System}{System} attribute. Each of these {\em{qualifying 
-attributes}} may, however, be assigned an explicit value so as to select a 
-particular coordinate system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by 
-assigning an explicit value to the attribute, rather than simply relying on 
-the default.
-
-The main TimeFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{TimeScale}{TimeScale}]\mbox{}\\
-This specifies the time scale.
-
-\item[\htmlref{LTOffset}{LTOffset}]\mbox{}\\
-This specifies the offset from Local Time to UTC in hours (time zones
-east of Greenwich have positive values). Note, AST uses the value as
-supplied without making any correction for daylight saving.
-
-\item[\htmlref{TimeOrigin}{TimeOrigin}]\mbox{}\\
-This specifies the zero point from which time values are measured, within
-the system specified by the System attribute. Thus, a value ofzero (the
-default) indicates that time values represent absolute times. Non-zero
-values may be used to indicate that the TimeFrame represents elapsed time
-since the specified origin.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System or TimeScale value. Any such 
-values are stored, but are not used unless the System and/or TimeScale 
-value is later set so that they become relevant.
-
-\cleardoublepage
-\section{\label{ss:cmpframes}Compound Frames (CmpFrames)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpFrame}{CmpFrame}. The
-Frames we have considered so far have been atomic, in the sense that
-they represent pre-defined elementary physical domains. A CmpFrame,
-however, is a compound \htmlref{Frame}{Frame}. In essence, it is a structure for
-containing other Frames and its purpose is to allow those Frames
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpFrame's behaviour is therefore not pre-defined, but is
-determined by the other Frames it contains (its ``component'' Frames).
-
-As with compound Mappings, compound Frames can be nested within each
-other, forming arbitrarily complex Frames.
-
-\subsection{Creating a CmpFrame}
-A very common use for a \htmlref{CmpFrame}{CmpFrame} within astronomy is to represent a
-``spectral cube''. This is a 3-dimensional \htmlref{Frame}{Frame} in which one of the axes
-represents position within a spectrum, and the other two axes represent
-position on the sky (or some other spatial domain such as the focal plane
-of a telescope). As an example, we create such a CmpFrame in which axes
-1 and 2 represent Right Ascension and Declination (ICRS), and axis 3 
-represents wavelength (these are the default coordinate Systems
-represented by a \htmlref{SkyFrame}{SkyFrame} and a \htmlref{SpecFrame}{SpecFrame} respectively):
-
-\small
-\begin{verbatim}
-      INTEGER SKYFRAME
-      INTEGER SPECFRAME
-      INTEGER CMPFRAME
-      ...
-      SKYFRAME = AST_SKYFRAME( ' ', STATUS )
-      SPECFRAME = AST_SPECFRAME( ' ', STATUS )
-      CMPFRAME = AST_CMPFRAME( SKYFRAME, SPECFRAME, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-If it was desired to make RA and Dec correspond to axes 1 and 3, with
-axis 2 being the spectral axis, then the axes of the CmpFrame created 
-above would need to be permuted as follows:
-
-\small
-\begin{verbatim}
-      INTEGER PERM(3)
-      ...
-
-      PERM( 1 ) = 1
-      PERM( 2 ) = 3
-      PERM( 3 ) = 2
-      CALL AST_PERMAXES( CMPFRAME, PERM, STATUS ) 
-\end{verbatim}
-\normalsize
-
-\subsection{The Attributes of a CmpFrame}
-
-A \htmlref{CmpFrame}{CmpFrame} \emph{is a} \htmlref{Frame}{Frame} and so has all the attributes of a Frame.
-The default value for the \htmlref{Domain}{Domain} attribute for a CmpFrame is formed by
-concatenating the Domains of the two component Frames, separated by a
-minus sign (``-'').\footnote{If both component Frames have blank Domains, 
-then the default Domain for the CmpFrame is the string ``CMP''.} The (fixed) 
-value for its \htmlref{System}{System} attribute is ``Compound''.\footnote{Any attempt to 
-change the System value of a CmpFrame is ignored.} A CmpFrame has no 
-further attributes over and above those common to all Frames. However,
-attributes of the two component Frames can be accessed as if they were
-attributes of the CmpFrame, as described below.
-
-Frame attributes which are specific to individual axes (such as Label(2),
-Format(1), \emph{etc}) simply mirror the corresponding axes of the
-relevant component Frame. That is, if the ``Label(2)'' attribute of a
-CmpFrame is accessed, the CmpFrame will forward the access request to the
-component Frame which contains axis 2. Thus, default values for axis
-attributes will be the same as those provided by the component Frames.
-
-An axis index can optionally be appended to the name of Frames attributes
-which do not normally have such an index (System, Domain, \htmlref{Epoch}{Epoch}, \htmlref{Title}{Title},
-\emph{etc}). If this is done, the access request is forwarded to the
-component Frame containing the indicated axis. For instance, if a
-CmpFrame contains a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{SkyFrame}{SkyFrame} in that order, and the axes
-have not been permuted, then getting the value of attribute ``System'' will 
-return  ``Compound'' as mentioned above (that is, the System value of the
-CmpFrame as a whole), whereas getting the value of attribute
-``System(1)'' will return ``Spectral''(that is, the System value of the
-component Frame containing axis 1 --- the SpecFrame).
-
-This technique is not limited to attributes common to all Frames. For
-instance, the SkyFrame class defines an attribute called \htmlref{Equinox}{Equinox} which is
-not held by other classes of Frames. To set a value for the Equinox
-attribute of the SkyFrame contained within the above CmpFrame, assign the
-value to the ``Equinox(2)'' attribute of the CmpFrame. Since the SkyFrame
-defines both axes 2 and 3 of the CmpFrame, we could equivalently have set
-a value for ``Equinox(3)'' since this would also result in the attribute
-access being forwarded to the SkyFrame.
-
-Finally, if an attribute is not qualified by a axis index, attempts will
-be made to access it using each of the CmpFrame axes in turn. Using the
-above example of the spectral cube, if an attempt was made to get the
-value of attribute ``Equinox'' (with no axis index), each axis in turn
-would be used. Since axis 1 is contained within a SpecFrame, the first
-attempt would fail since the SpecFrame class does not have an Equinox
-attribute. However, the second attempt would succeed because axis 2 is
-contained within a SkyFrame which \emph{does} have an Equinox attribute. Thus
-the returned attribute value would be that obtained from the SkyFrame
-containing axis 2. When getting or testing an attribute value, the
-returned value is determined by the \emph{first} axis which recognises
-the attribute. When setting an attribute value, \emph{all} axes
-which recognises the attribute have the attribute value set to the given
-value. Likewise, when clearing an attribute value, all axes
-which recognises the attribute have the attribute value cleared.
-
-\cleardoublepage
-\section{\label{ss:introducingconversion}An Introduction to Coordinate System Conversions}
-
-In this section, we start to look at techniques for converting between
-different coordinate systems.  At this stage, the tools we have available
-are Frames (\secref{ss:frames}), SkyFrames (\secref{ss:skyframes}),
-SpecFrames (\secref{ss:specframes}), TimeFrames (\secref{ss:timeframes}) and 
-various Mappings (\secref{ss:mappings}). These are sufficient to allow us to 
-begin examining the problem, but more sophisticated approaches will also emerge
-later (\secref{ss:framesetconverting}).
-
-\subsection{\label{ss:convertingskyframes}Converting between Celestial Coordinate Systems}
-
-We begin by examining how to convert between two celestial coordinate
-systems represented by SkyFrames, as this is both an illuminating and
-practical example.  Consider the problem of converting celestial
-coordinates between:
-
-\begin{enumerate}
-\item The old FK4 system, with no E terms, a Besselian epoch of
-1958.0 and a Besselian equinox of 1960.0.
-
-\item An ecliptic coordinate system based on the mean equinox and
-ecliptic of Julian epoch 2010.5.
-\end{enumerate}
-
-This example is arbitrary but not completely unrealistic. Unless you
-already have expertise with such conversions, you are unlikely to find
-it straightforward.
-
-Using AST, we begin by creating two SkyFrames to represent these
-coordinate systems, as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER SKYFRAME1, SKYFRAME2, STATUS
-
-      STATUS = 0
-
-      ...
-
-      SKYFRAME1 = AST_SKYFRAME( 'System=FK4-NO-E, Epoch=B1958, Equinox=B1960', STATUS )
-      SKYFRAME2 = AST_SKYFRAME( 'System=Ecliptic, Equinox=J2010.5', STATUS )
-\end{verbatim}
-\normalsize
-
-Note how specifying the coordinate systems consists simply of
-initialising the attributes of each \htmlref{SkyFrame}{SkyFrame} appropriately.  The next
-step is to find a way of converting between these SkyFrames. This is
-done using \htmlref{AST\_CONVERT}{AST_CONVERT}, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER CVT
-
-      ...
-
-      CVT = AST_CONVERT( SKYFRAME1, SKYFRAME2, ' ', STATUS )
-      IF ( CVT .EQ. AST__NULL ) THEN
-         <conversion is not possible>
-      ELSE
-         <conversion is possible>
-      END IF
-\end{verbatim}
-\normalsize
-
-The third argument of AST\_CONVERT is not used here and should be a
-blank string.
-
-AST\_CONVERT will return a null result, AST\_\_NULL (as defined in the
-AST\_PAR include file), if conversion is not possible. In this
-example, conversion is possible, so it will return a pointer to a new
-\htmlref{Object}{Object} that describes the conversion.
-
-The Object returned is called a \htmlref{FrameSet}{FrameSet}. We have not discussed
-FrameSets yet (\secref{ss:framesets}), but for the present purposes we
-can consider them simply as Objects that can behave both as Mappings
-and as Frames. It is the FrameSet's behaviour as a \htmlref{Mapping}{Mapping} in which we
-are mainly interested here, because the Mapping it implements is the
-one we require---{\em{i.e.}}\ it converts between the two celestial
-coordinate systems (\secref{ss:framesetsfromconvert}).
-
-For example, if ALPHA1 and DELTA1 are two arrays containing the
-longitude and latitude, in radians, of N points on the sky in the
-original coordinate system (corresponding to SKYFRAME1), then they
-could be converted into the new coordinate system (represented by
-SKYFRAME2) as follows:
-
-\small
-\begin{verbatim}
-      INTEGER N
-      DOUBLE PRECISION ALPHA1( N ), DELTA1( N )
-      DOUBLE PRECISION ALPHA2( N ), DELTA2( N )
-
-      ...
-
-      CALL AST_TRAN2( CVT, N, ALPHA1, DELTA1, .TRUE., ALPHA2, DELTA2, STATUS )
-\end{verbatim}
-\normalsize
-
-The new coordinates are returned {\em{via}} the ALPHA2 and DELTA2
-arrays.  To transform coordinates in the opposite direction, we simply
-invert the 5th (logical) argument to \htmlref{AST\_TRAN2}{AST_TRAN2}, as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_TRAN2( CVT, N, ALPHA2, DELTA2, .FALSE., ALPHA1, DELTA1, STATUS )
-\end{verbatim}
-\normalsize
-
-The FrameSet returned by AST\_CONVERT also contains information about
-the SkyFrames used in the conversion
-(\secref{ss:framesetsfromconvert}). As we mentioned above, a FrameSet
-may be used as a \htmlref{Frame}{Frame} and in this case it behaves like the
-``destination'' Frame used in the conversion ({\em{i.e.}}\ like
-SKYFRAME2). We could therefore use the CVT FrameSet to calculate the
-distance between two points (with coordinates in radians) in the
-destination coordinate system, using \htmlref{AST\_DISTANCE}{AST_DISTANCE}:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION DISTANCE, POINT1( 2 ), POINT2( 2 )
-
-      ...
-
-      DISTANCE = AST_DISTANCE( CVT, POINT1, POINT2, STATUS )
-\end{verbatim}
-\normalsize
-
-and the result would be the same as if the SKYFRAME2 SkyFrame had been
-used.
-
-Another way to see how the FrameSet produced by astConvert retains
-information about the coordinate systems involved is to set its \htmlref{Report}{Report}
-attribute (inherited from the Mapping class) so that it displays the
-coordinates before and after conversion (\secref{ss:transforming}):
-
-\small
-\begin{verbatim}
-      CALL AST_SET( CVT, 'Report=1', STATUS )
-      CALL AST_TRAN2( CVT, N, ALPHA1, DELTA1, .TRUE., ALPHA2, DELTA2, STATUS )
-\end{verbatim}
-\normalsize
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (42.1087, 20.2717)
-(2:08:20.6, 35:31:24) --> (43.0197, 21.1705)
-(2:10:38.1, 36:40:09) --> (43.9295, 22.0716)
-(2:12:55.6, 37:48:55) --> (44.8382, 22.9753)
-(2:15:13.1, 38:57:40) --> (45.7459, 23.8814)
-(2:17:30.6, 40:06:25) --> (46.6528, 24.7901)
-(2:19:48.1, 41:15:11) --> (47.5589, 25.7013)
-(2:22:05.6, 42:23:56) --> (48.4644, 26.6149)
-(2:24:23.1, 43:32:41) --> (49.3695, 27.5311)
-(2:26:40.6, 44:41:27) --> (50.2742, 28.4499)
-\end{verbatim}
-\end{quote}
-
-Here, we see that the input FK4 equatorial coordinate values (given in
-radians) have been formatted automatically in sexagesimal notation
-using the conventional hours for right ascension and degrees for
-declination. Conversely, the output ecliptic coordinates are shown in
-decimal degrees, as is conventional for ecliptic coordinates. Both are
-displayed using the default precision of 7 digits.\footnote{The
-leading digit is zero and is therefore not seen in this particular
-example.}
-
-In fact, the CVT FrameSet has access to all the information in the
-original SkyFrames which were passed to AST\_CONVERT. If you had set a
-new Digits attribute value for either of these, the formatting above
-would reflect the different precision you requested by displaying a
-greater or smaller number of digits.
-
-
-\subsection{\label{ss:convertingspecframes}Converting between Spectral Coordinate Systems}
-The principles described in the previous section for converting between
-celestial coordinate systems also apply to the task of converting between
-spectral coordinate systems. As an example, let's look at how we might
-convert between frequency measured in $GHz$ as measured in the rest frame
-of the telescope, and radio velocity measured in $km/s$ measured with
-respect the kinematic Local Standard of Rest.
-
-First we create a default \htmlref{SpecFrame}{SpecFrame}, and then set its attributes to
-describe the required radio velocity system (this is slightly more
-convenient, given the relatively large number of attributes, than
-specifying the attribute values in a single string such as would be
-passed to the SpecFrame constructor). We then take a copy of this
-SpecFrame, and change the attribute values so that the copy describes the
-original frequency system (modifying a copy, rather than creating a new
-SpecFrame from scratch, avoids the need to specify the epoch, reference
-position, \emph{etc} a second time since they are all inherited by the copy):
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER SPECFRAME1, SPECFRAME2, STATUS
-
-      STATUS = 0
-
-      ...
-
-      SPECFRAME1 = AST_SPECFRAME( ' ', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'System=vradio', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'Unit=km/s', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'Epoch=1996-Oct-2 12:13:56.985', 
-     :               STATUS )
-      CALL AST_SETC( SPECFRAME1, 'ObsLon=W155:28:18', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'ObsLat=N19:49:34', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'RefRA=18:14:50.6', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'RefDec=-4:40:49', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'RestFreq=230.538 GHz', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'StdOfRest=LSRK', STATUS )
-      
-      SPECFRAME2 = AST_COPY( SPECFRAME1, STATUS )
-      CALL AST_SETC( SPECFRAME1, 'System=freq', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'Unit=GHz', STATUS )
-      CALL AST_SETC( SPECFRAME1, 'StdOfRest=Topocentric', STATUS )
-
-\end{verbatim}
-\normalsize
-
-Note, the fact that a SpecFrame has only a single axis means that we were
-able to refer to the Unit attribute without an axis index. The other
-attributes are: the time of of observation (\htmlref{Epoch}{Epoch}), the geographical
-position of the telescope (\htmlref{ObsLat}{ObsLat} \& \htmlref{ObsLon}{ObsLon}), the position of the source
-on the sky (\htmlref{RefRA}{RefRA} \& \htmlref{RefDec}{RefDec}), the rest frequency (\htmlref{RestFreq}{RestFreq}) and the
-standard of rest (\htmlref{StdOfRest}{StdOfRest}).
-
-The next step is to find a way of converting between these SpecFrames. We
-use exactly the same code that we did in the previous section where we were
-converting between celestial coordinate systems:
-
-\small
-\begin{verbatim}
-      INTEGER CVT
-
-      ...
-
-      CVT = AST_CONVERT( SPECFRAME1, SPECFRAME2, ' ', STATUS )
-      IF ( CVT .EQ. AST__NULL ) THEN
-         <conversion is not possible>
-      ELSE
-         <conversion is possible>
-      END IF
-\end{verbatim}
-\normalsize
-
-A before, this will give us a \htmlref{FrameSet}{FrameSet} (assuming conversion is possible,
-which should always be the case for our example), and we can use the
-FrameSet to convert between the two spectral coordinate systems. We use 
-\htmlref{AST\_TRAN1}{AST_TRAN1} in place of \htmlref{AST\_TRAN2}{AST_TRAN2}
-since a SpecFrame has only one axis (unlike a \htmlref{SkyFrame}{SkyFrame} which has two).
-
-For example, if FRQ is an array containing the observed frequency, in
-GHz, of N spectral channels (describe by SPECFRAME1), then they
-could be converted into the new coordinate system (represented by
-SPECFRAME2) as follows:
-
-\small
-\begin{verbatim}
-      INTEGER N
-      DOUBLE PRECISION FRQ( N )
-      DOUBLE PRECISION VEL( N )
-
-      ...
-
-      CALL AST_TRAN1( CVT, N, FRQ, .TRUE., VEL, STATUS )
-\end{verbatim}
-\normalsize
-
-The radio velocity values are returned in the VEL array.
-
-\subsection{Converting between Time Coordinate Systems}
-All the principles outlined in the previous section about aligning
-spectral cocordinate systems (SpecFrames) can be applied directly to the 
-problem of aligning time coordinate systems (TimeFrames).
-
-\subsection{\label{ss:convertingpermutedaxes}Handling SkyFrame Axis Permutations}
-
-We can illustrate an important point if we swap the axis order of
-either \htmlref{SkyFrame}{SkyFrame} in the example above (\secref{ss:convertingskyframes})
-before identifying the conversion. Let's assume we use \htmlref{AST\_PERMAXES}{AST_PERMAXES}
-(\secref{ss:permutingaxes}) to do this to the second SkyFrame, before
-applying \htmlref{AST\_CONVERT}{AST_CONVERT}, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER PERM( 2 )
-      DATA PERM / 2, 1 /
-
-      ...
-
-      CALL AST_PERMAXES( SKYFRAME2, PERM, STATUS )
-      CVT = AST_CONVERT( SKYFRAME1, SKYFRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Now, the destination SkyFrame system no longer represents the
-coordinate system:
-
-\begin{quote}
-(ecliptic~longitude, ecliptic~latitude)
-\end{quote}
-
-but instead represents the transposed system:
-
-\begin{quote}
-(ecliptic~latitude, ecliptic~longitude)
-\end{quote}
-
-As a consequence, when we use the \htmlref{FrameSet}{FrameSet} returned by AST\_CONVERT to
-apply a coordinate transformation, we obtain something like the
-following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (20.2717, 42.1087)
-(2:08:20.6, 35:31:24) --> (21.1705, 43.0197)
-(2:10:38.1, 36:40:09) --> (22.0716, 43.9295)
-(2:12:55.6, 37:48:55) --> (22.9753, 44.8382)
-(2:15:13.1, 38:57:40) --> (23.8814, 45.7459)
-(2:17:30.6, 40:06:25) --> (24.7901, 46.6528)
-(2:19:48.1, 41:15:11) --> (25.7013, 47.5589)
-(2:22:05.6, 42:23:56) --> (26.6149, 48.4644)
-(2:24:23.1, 43:32:41) --> (27.5311, 49.3695)
-(2:26:40.6, 44:41:27) --> (28.4499, 50.2742)
-\end{verbatim}
-\end{quote}
-
-When compared to the original (\secref{ss:convertingskyframes}), the
-output coordinate order has been swapped to compensate for the
-different destination SkyFrame axis order.
-
-In all, there are four possible axis combinations, corresponding to two
-possible axis orders for each of the source and destination SkyFrames,
-and AST\_CONVERT will convert correctly between any of these.
-The point to note is that a SkyFrame contains knowledge about how to
-convert to and from other SkyFrames. Since its two axes (longitude and
-latitude) are distinguishable, the conversion is able to take account
-of the axis order.
-
-If you need to identify the axes of a SkyFrame explicitly, taking into
-account any axis permutations, the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes can be
-used. These are read-only attributes which give the indices of the
-latitude and longitude axes respectively.
-
-\subsection{\label{ss:convertingframes}Converting Between Frames}
-
-Having seen how clever SkyFrames are (\secref{ss:convertingskyframes}
-and \secref{ss:convertingpermutedaxes}), we will next examine how dumb
-a basic \htmlref{Frame}{Frame} can be in comparison. For example, if we create two
-2-dimensional Frames and use \htmlref{AST\_CONVERT}{AST_CONVERT} to derive a conversion
-between them, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FRAME1, FRAME2
-
-      ...
-
-      FRAME1 = AST_FRAME( 2, ' ', STATUS )
-      FRAME2 = AST_FRAME( 2, ' ', STATUS )
-      CVT = AST_CONVERT( FRAME1, FRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-then the coordinate transformation which the ``cvt'' \htmlref{FrameSet}{FrameSet} performs
-will be as follows:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is an identity transformation, exactly the same as a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). Even if we permute the axis order of our
-Frames, as we did above (\secref{ss:convertingpermutedaxes}), we will
-fare no better. The conversion between our two basic Frames will
-always be an identity transformation.
-
-The reason for this is that, unlike a \htmlref{SkyFrame}{SkyFrame}, all basic Frames start
-life the same and have axes that are indistinguishable. Therefore,
-permuting their axes doesn't make them look any different---they still
-represent the same coordinate system.
-%Actually, this behaviour isn't as dumb as it seems and can actually be
-%very useful, as the following example illustrates.
-%
-%\subsection{Distinguishable and Indistinguishable Axes}
-%
-%c+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with astPermAxes) to take account of this.
-%c-
-%f+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with astPermAxes) to take account of this.
-%f-
-%
-%Next, consider what happens if you want to subtract one image from the
-%other. If you have a ``subtract'' program that is intelligent and
-%tries to align the two images for you, one of two things could happen:
-%
-%\begin{enumerate}
-%c+
-%\item If the axes are distinguishable, when your program invokes
-%astConvert it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%c-
-%f+
-%\item If the axes are distinguishable, when your program invokes
-%AST\_CONVERT it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%f-
-%
-%\item If the axes are indistinguishable, the transformation between
-%the two images will always be an identity
-%(\secref{ss:convertingframes}). Therefore, your program will align
-%X-with-Y and Y-with-X, so that you see the effects of your earlier
-%transposition of the second image.
-%\end{enumerate}
-%
-%Clearly, if we are considering pixel coordinates, the latter behaviour
-%is preferable, since there would be no point in implementing an image
-%transposition program if we could never see the effects of it. This
-%indicates that a basic Frame, with is indistinguishable axes, is the
-%correct type of \htmlref{Object}{Object} to represent a pixel coordinate system, where
-%this behaviour is necessary.
-%
-%Conversely, the former behaviour would be more useful if the axes we
-%were considering were, say, wavelength (in nm) and slit position (in
-%mm). In this case, we would expect our ``subtract'' program to
-%subtract data at corresponding wavelengths and slit positions, not
-%just at corresponding pixels. This case requires distinguishable axes,
-%so that corresponding axes in the two images can be matched up, just
-%as happens with a SkyFrame (\secref{ss:convertingpermutedaxes}).
-%
-%Of course, there may also be intermediate cases, where some axes are
-%distinguishable and others aren't.
-
-\subsection{\label{ss:alignmentsystem}The Choice of Alignment System}
-
-In practice, when AST is asked to find a conversion between two Frames
-describing two different coordinate systems on a given physical domain,
-it uses an intermediate ``alignment'' system. Thus, when finding a
-conversion from system A to system B, AST first finds the \htmlref{Mapping}{Mapping} from
-system A to some alignment system, system C, and then finds the Mapping
-from this system C to the required system B. It finally concatenates
-these two Mappings to get the Mapping from system A to system B.
-
-One advantage of this is that it cuts down the number of conversion
-algorithms required. If there are $N$ different Systems which may be used
-to describe positions within the \htmlref{Domain}{Domain}, then this approach requires
-about $2*N$ conversion algorithms to be written. The alternative approach
-of going directly from system A to system B would require about $N*N$
-conversion algorithms.
-
-In addition, the use of an intermediate alignment system highlights the
-nature of the conversion process. What do we mean by saying that a
-Mapping ``converts a position in one coordinate system into the
-corresponding position in another''? In practice, it means that the input
-and output coordinates correspond to the same coordinates \emph{in some
-third coordinate system}. The choice of this third coordinate system, the
-``alignment'' system, can completely alter the nature of the Mapping. The
-\htmlref{Frame}{Frame} class has an attribute called \htmlref{AlignSystem}{AlignSystem} which can be used to
-specify the alignment system.
-
-As an example, consider the case of aligning two spectra calibrated in
-radio velocity, but each with a different rest frequency (each spectrum
-will be described by a \htmlref{SpecFrame}{SpecFrame}). Since the rest frequencies differ, a
-given velocity will correspond to different frequencies in the two
-spectra. So when we come to ``align'' these two spectra (that is, find a
-Mapping which converts positions in one SpecFrame to the corresponding
-positions in the other), we have the choice of aligning the frequencies
-or aligning the velocities. Different Mappings will be required to
-describe these two forms of alignment. If we set AlignSystem to ``Freq''
-then the returned Mapping will align the frequencies described by the two
-SpecFrames. On the other hand, if we set AlignSystem to ``Vradio''
-then the returned Mapping will align the velocities.
-
-Some choices of alignment system are redundant. For instance, in the
-above example, changing the alignment system from frequency to wavelength
-has no effect on the returned Mapping: if two spectra are aligned in
-frequency they will also be aligned in wavelength (assuming the speed of
-light doesn't change).
-
-The default value for AlignSystem depends on the class of Frame. For a
-SpecFrame, the default is wavelength (or equivalently, frequency)
-since this is the system in which observations are usually made. The
-SpecFrame class also has an attribute called \htmlref{AlignStdOfRest}{AlignStdOfRest} which
-allows the standard of rest of the alignment system to be specified.
-Similarly, the \htmlref{TimeFrame}{TimeFrame} class has an attribute called \htmlref{AlignTimeScale}{AlignTimeScale}
-which allows the time scale of the alignment system to be specified.
-Currently, the \htmlref{SkyFrame}{SkyFrame} uses ICRS as the default for AlignSystem, since
-this is a close approximation to an inertial frame of rest.
-
-\cleardoublepage
-\section{\label{ss:framesets}Coordinate System Networks (FrameSets)}
-
-We saw in \secref{ss:introducingconversion} how \htmlref{AST\_CONVERT}{AST_CONVERT} could be
-used to find a \htmlref{Mapping}{Mapping} that inter-relates a pair of coordinate systems
-represented by Frames. There is a limitation to this, however, in that
-it can only be applied to coordinate systems that are inter-related by
-suitable conventions. In the case of celestial coordinates, the
-relevant conventions are standards set out by the International
-Astronomical Union, and others, that define what these coordinate
-systems mean. In practice, however, the relationships between many
-other coordinate systems are also of practical importance.
-
-Consider, for example, the focal plane of a telescope upon which an
-image of the sky is falling. We could measure positions in this focal
-plane in millimetres or, if there were a detector system such as a CCD
-present, we could count pixels. We could also use celestial
-coordinates of many different kinds. All of these systems are
-equivalent in their effectiveness at specifying positions in the focal
-plane, but some are more convenient than others for particular
-purposes.
-
-Although we could, in principle, convert between all of these focal
-plane coordinate systems, there is no pre-defined convention for doing
-so. This is because the conversions required depend on where the
-telescope is pointing and how the CCD is mounted in the focal
-plane. Clearly, knowledge about this cannot be built into the AST
-library and must be supplied in some other way. Note that this is
-exactly the same problem as we met in \secref{ss:framedomains} when
-discussing the \htmlref{Domain}{Domain} attribute---{\em{i.e.}}\ coordinate systems that
-apply to different physical domains require that extra information be
-supplied before we can convert between them.
-
-What we need, therefore, is a general way to describe how coordinate
-systems are inter-related, so that when there is no convention already
-in place, we can define our own. We can then look forward to
-converting, say, from pixels into galactic coordinates and {\em{vice
-versa.}}  In AST, the \htmlref{FrameSet}{FrameSet} class provides this capability.
-
-\subsection{The FrameSet Model}
-
-Consider a coordinate system (call it number 1) which is represented
-by a \htmlref{Frame}{Frame} of some kind. Now consider a \htmlref{Mapping}{Mapping} which, when applied to
-the coordinates in system 1 yields coordinates in another system,
-number 2. The Mapping therefore inter-relates coordinate systems 1 and
-2.
-
-Now consider a second Mapping which inter-relates system 1 and a
-further coordinate system, number 3. If we wanted to convert
-coordinates between systems 2 and 3, we could do so by:
-
-\begin{enumerate}
-\item Applying our first Mapping in reverse, so as to convert between
-systems 2 and 1.
-
-\item Applying the second Mapping, as given, to convert between
-systems 1 and 3.
-\end{enumerate}
-
-We are not limited to three coordinate systems, of course. In fact, we
-could continue to introduce any number of further coordinate systems,
-so long as we have a suitable Mapping for each one which relates it to
-one of the Frames already present. Continuing in this way, we can
-build up a network in which Frames are inter-related by Mappings in
-such a way that there is always a way of converting between any pair
-of coordinate systems.
-
-The \htmlref{FrameSet}{FrameSet} (Figure~\ref{fig:frameset}) encapsulates these ideas.  It
-is a network composed of Frames and associated Mappings, in which
-there is always exactly one path, {\em{via}} Mappings, between any
-pair of Frames.  Since we assemble FrameSets ourselves, they can be
-used to represent any coordinate systems we choose and to set up the
-particular relationships between them that we want.
-
-\subsection{\label{ss:creatingaframeset}Creating a FrameSet}
-
-Before we can create a \htmlref{FrameSet}{FrameSet}, we must have a \htmlref{Frame}{Frame} of some kind to
-put into it, so let's create a simple one:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER FRAME1, STATUS
-
-      STATUS = 0
-
-      ...
-
-      FRAME1 = AST_FRAME( 2, 'Domain=A', STATUS )
-\end{verbatim}
-\normalsize
-
-We have set this Frame's \htmlref{Domain}{Domain} attribute (\secref{ss:framedomains}) to
-A so that it will be distinct from the others we will be using. We can
-now create a new FrameSet containing just this Frame, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FRAMESET
-
-      ...
-
-      FRAMESET = AST_FRAMESET( FRAME1, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-So far, however, this Frame isn't related to any others.
-
-\subsection{\label{ss:addingframes}Adding New Frames to a FrameSet}
-
-We can now add further Frames to the \htmlref{FrameSet}{FrameSet} created above
-(\secref{ss:creatingaframeset}). To do so, we must supply a new \htmlref{Frame}{Frame}
-and an associated \htmlref{Mapping}{Mapping} that relates it to any of the Frames that
-are already present (there is only one present so far).  To keep the
-example simple, we will just use a \htmlref{ZoomMap}{ZoomMap} that multiplies coordinates
-by 10. The required Objects are created as follows:
-
-\small
-\begin{verbatim}
-      INTEGER FRAME2, MAPPING12
-
-      ...
-
-      FRAME2 = AST_FRAME( 2, 'Domain=B', STATUS )
-      MAPPING12 = AST_ZOOMMAP( 2, 10.0D0, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-To add the new Frame into our FrameSet, we use the \htmlref{AST\_ADDFRAME}{AST_ADDFRAME}
-routine:
-
-\small
-\begin{verbatim}
-      CALL AST_ADDFRAME( FRAMESET, 1, MAPPING12, FRAME2, STATUS )
-\end{verbatim}
-\normalsize
-
-Whenever a Frame is added to a FrameSet, it is assigned an integer
-index. This index starts with 1 for the initial Frame used to create
-the FrameSet (\secref{ss:creatingaframeset}) and increments by one
-every time a new Frame is added. This index is the primary way of
-identifying the Frames within a FrameSet.
-
-When a Frame is added, we also have to specify which of the existing
-ones the new Frame is related to. Here, we chose number 1, the only
-one present so far, and the new one we added became number 2.
-
-Note that a FrameSet does not make copies of the Frames and Mappings
-that you insert into it. Instead, it holds pointers to them. This
-means that if you retain the original pointers to these Objects and
-alter them, you will indirectly be altering the FrameSet's
-contents. You can, of course, always use \htmlref{AST\_COPY}{AST_COPY}
-(\secref{ss:copyingobjects}) to make a separate copy of any \htmlref{Object}{Object} if
-you need to ensure its independence.
-
-We could also add a third Frame into our FrameSet, this time defining
-a coordinate system which is reached by multiplying the original
-coordinates (of FRAME1) by 5:
-
-\small
-\begin{verbatim}
-      CALL AST_ADDFRAME( FRAMESET, 1,
-     :                   AST_ZOOMMAP( 2, 5.0D0, ' ', STATUS ),
-     :                   AST_FRAME( 2, 'Domain=C', STATUS ),
-     :                   STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have avoided storing unnecessary pointer values by using
-function invocations directly as arguments for AST\_ADDFRAME. This
-assumes that we are using \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END}
-(\secref{ss:contexts}) to ensure that Objects are correctly deleted
-when no longer required.
-
-\begin{latexonly}
-   Our example FrameSet now contains three Frames and two Mappings with
-   the arrangement shown in Figure~\ref{fig:fsexample}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.6]{sun210_figures/fsexample.eps}
-   \caption{An example FrameSet, in which Frames~2 and 3 are related to
-   Frame~1 by multiplying its coordinates by factors of 10 and 5
-   respectively. The FrameSet's \htmlref{Base}{Base} attribute has the value 1 and its
-   \htmlref{Current}{Current} attribute has the value 3. The transformation performed when
-   the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
-   its current Frame) is shown in bold.}
-   \label{fig:fsexample}
-   \end{center}
-   \end{figure}
-   The total number of Frames is given by its read-only \htmlref{Nframe}{Nframe} attribute.
-\end{latexonly}
-\begin{htmlonly}
-   Our example FrameSet now contains three Frames and two Mappings with
-   the arrangement shown in the Figure below. The total number of Frames
-   is given by its read-only Nframe attribute.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:fsexample}
-   \includegraphics[scale=0.9]{sun210_figures/fsexample.eps}
-   \caption{An example FrameSet, in which Frames~2 and 3 are related to
-   Frame~1 by multiplying its coordinates by factors of 10 and 5
-   respectively. The FrameSet's Base attribute has the value 1 and its
-   Current attribute has the value 3. The transformation performed when
-   the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
-   its current Frame) is shown in bold.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-
-\subsection{\label{ss:baseandcurrent}The Base and Current Frames}
-
-At all times, one of the Frames in a \htmlref{FrameSet}{FrameSet} is designated to be its
-{\em{base}} \htmlref{Frame}{Frame} and one to be its {\em{current}} Frame
-(Figure~\ref{fig:fsexample}). These Frames are identified by two
-integer FrameSet attributes, \htmlref{Base}{Base} and \htmlref{Current}{Current}, which hold the indices
-of the nominated Frames within the FrameSet.
-
-The existence of the base and current Frames reflects an important
-application of FrameSets, which is to attach coordinate systems to
-entities such as data arrays, data files, plotting surfaces (for
-graphics), {\em{etc.}}  In this context, the base Frame represents the
-``native'' coordinate system of the attached entity---for example, the
-pixel coordinates of an image or the intrinsic coordinates of a
-plotting surface. The other Frames within the FrameSet represent
-alternative coordinate systems which may also be used to refer to
-positions within that entity.  The current Frame represents the
-particular coordinate system which is currently selected for use. For
-instance, if an image were being displayed, you would aim to label it
-with coordinates corresponding to the current Frame. In order to see a
-different coordinate system, a software user would arrange for a
-different Frame to be made current.
-
-The choice of base and current Frames may be changed at any time,
-simply by assigning new values to the FrameSet's Base and Current
-attributes. For example, to make the Frame with index 3 become the
-current Frame, you could use:
-
-\small
-\begin{verbatim}
-      CALL AST_SETI( FRAMESET, 'Current', 3, STATUS )
-\end{verbatim}
-\normalsize
-
-You can nominate the same Frame to be both the base and current Frame
-if you wish.
-\label{ss:baseandcurrentdefault}
-
-By default ({\em{i.e.}}\ if the Base or Current attribute is un-set),
-the first Frame added to a FrameSet becomes its base Frame and the
-last one added becomes its current Frame.\footnote{Although this is
-reversed if the FrameSet's \htmlref{Invert}{Invert} attribute is non-zero.} Whenever a
-new Frame is added to a FrameSet, the Current attribute is modified so
-that the new Frame becomes the current one. This behaviour is
-reflected in the state of the example FrameSet in
-Figure~\ref{fig:fsexample}.
-
-\subsection{\label{ss:astbaseandastcurrent}Referring to the Base and Current Frames}
-
-It is often necessary to refer to the base and current Frames
-(\secref{ss:baseandcurrent}) within a \htmlref{FrameSet}{FrameSet}, but it can be
-cumbersome having to obtain their indices from the \htmlref{Base}{Base} and \htmlref{Current}{Current}
-attributes on each occasion. To make this easier, two parameter
-constants, AST\_\_BASE and AST\_\_CURRENT, are defined in the AST\_PAR
-include file and may be used to represent the indices of the base and
-current Frames respectively. They may be used whenever a \htmlref{Frame}{Frame} index
-is required.
-
-For example, when adding a new Frame to a FrameSet
-(\secref{ss:addingframes}), you could use the following to indicate
-that the new Frame is related to the existing current Frame, whatever
-its index happens to be:
-
-\small
-\begin{verbatim}
-      INTEGER FRAME, MAPPING
-
-      ...
-
-      CALL AST_ADDFRAME( FRAMESET, AST__CURRENT, MAPPING, FRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-Of course, the Frame you added would then become the new current
-Frame.
-
-\subsection{\label{ss:framesetasmapping}Using a FrameSet as a Mapping}
-
-The \htmlref{FrameSet}{FrameSet} class inherits properties and behaviour from the \htmlref{Frame}{Frame}
-class (\secref{ss:frames}) and, in turn, from the \htmlref{Mapping}{Mapping} class
-(\secref{ss:mappings}). Its behaviour when used as a Mapping is
-particularly important.
-
-Consider, for instance, passing a FrameSet pointer to a coordinate
-transformation routine such as \htmlref{AST\_TRAN2}{AST_TRAN2}:
-
-\small
-\begin{verbatim}
-      INTEGER N
-      DOUBLE PRECISION XIN( N ), YIN( N )
-      DOUBLE PRECISION XOUT( N ), YOUT( N )
-
-      ...
-
-      CALL AST_TRAN2( FRAMESET, N, XIN, YIN, .TRUE., XOUT, YOUT, STATUS )
-\end{verbatim}
-\normalsize
-
-The coordinate transformation applied by this FrameSet would be the
-one which converts between its base and current Frames. Using the
-FrameSet in Figure~\ref{fig:fsexample}, for example, the coordinates
-would be multiplied by a factor of 5.  If we instead requested the
-FrameSet's inverse transformation, we would be transforming from its
-current Frame to its base Frame, so our example FrameSet would then
-multiply by a factor of 0.2.
-
-Whenever the choice of base and current Frames changes, the
-transformations which a FrameSet performs when used as a Mapping also
-change to reflect this. The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes may also change in
-consequence, because they are determined by the numbers of axes in the
-FrameSet's base and current Frames respectively. These numbers need
-not necessarily be equal, of course.
-
-Like any Mapping, a FrameSet may also be inverted by changing the
-boolean sense of its \htmlref{Invert}{Invert} attribute, {\em{e.g.}}\ using \htmlref{AST\_INVERT}{AST_INVERT}
-(\secref{ss:invertingmappings}). If this is happens, the values of the
-FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes are interchanged, along with
-its Nin and Nout attributes, so that its base and current Frames swap
-places. When used as a Mapping, the FrameSet will therefore perform
-the inverse transformation to that which it performed previously.
-
-To summarise, a FrameSet may be used exactly like any other Mapping
-which inter-relates the coordinate systems described by its base and
-current Frames.
-
-\subsection{\label{ss:extractingamapping}Extracting a Mapping from a FrameSet}
-
-Although it is very convenient to use a \htmlref{FrameSet}{FrameSet} when a \htmlref{Mapping}{Mapping} is
-required (\secref{ss:framesetasmapping}), a FrameSet necessarily
-contains additional information and sometimes this might cause
-inefficiency or confusion.  For example, if you wanted to use a
-Mapping contained in one FrameSet and insert it into another, it would
-probably not be efficient to insert the whole of the first FrameSet
-into the second one, although it would work.
-
-In such a situation, the \htmlref{AST\_GETMAPPING}{AST_GETMAPPING} function allows you to
-extract a Mapping from a FrameSet. You do this by specifying the two
-Frames which the Mapping should inter-relate using their indices
-within the FrameSet. For example:
-
-\small
-\begin{verbatim}
-      MAP = AST_GETMAPPING( FRAMESET, 2, 3, STATUS )
-\end{verbatim}
-\normalsize
-
-would return a pointer to a Mapping that converted between Frames~2
-and 3 in the FrameSet. Its inverse transformation would then convert
-in the opposite direction, {\em{i.e.}}\ between Frames~3 and 2.  Note
-that this Mapping might not be independent of the Mappings contained
-within the FrameSet---{\em{i.e.}}\ they may share sub-Objects---so
-\htmlref{AST\_COPY}{AST_COPY} should be used to make a copy if you need to guarantee
-independence (\secref{ss:copyingobjects}).
-
-Very often, the Mapping returned by AST\_GETMAPPING will be a compound
-Mapping, or \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}). This reflects the fact that
-conversion between the two Frames may need to be done {\em{via}} an
-intermediate coordinate system so that several stages may be involved.
-You can, however, easily simplify this Mapping (where this is possible)
-by using the \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} function (\secref{ss:simplifyingcmpmaps})
-and this is recommended if you plan to use it for transforming a large
-amount of data.
-
-\subsection{\label{ss:framesetasframe}Using a FrameSet as a Frame}
-
-A \htmlref{FrameSet}{FrameSet} can also be used as a \htmlref{Frame}{Frame}, in which capacity it almost
-always behaves as if its current Frame had been used instead. For
-example, if you request the \htmlref{Title}{Title} attribute of a FrameSet using:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 80 ) TITLE
-
-      ...
-
-      TITLE = AST_GETC( FRAMESET, 'Title', STATUS )
-\end{verbatim}
-\normalsize
-
-the result will be the Title of the current Frame, or a suitable
-default if the current Frame's Title attribute is un-set. The same
-also applies to other attribute operations---{\em{i.e.}}\ setting,
-clearing and testing attributes.  Most attributes shared by both
-Frames and FrameSets behave in this way, such as \htmlref{Naxes}{Naxes}, \htmlref{Label(axis)}{Labelaxis},
-\htmlref{Format(axis)}{Formataxis}, {\em{etc.}} There are, however, a few exceptions:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Class}{Class}]\mbox{}\\
-Has the value ``FrameSet''.
-
-\item[\htmlref{ID}{ID}]\mbox{}\\
-Identifies the particular FrameSet (not its current Frame).
-
-\item[\htmlref{Nin}{Nin}]\mbox{}\\
-Equals the number of axes in the FrameSet's base Frame.
-
-\item[\htmlref{Invert}{Invert}]\mbox{}\\
-Is independent of any of the Objects within the FrameSet.
-
-\item[\htmlref{Nobject}{Nobject}]\mbox{}\\
-Counts the number of active FrameSets.
-
-\item[\htmlref{RefCount}{RefCount}]\mbox{}\\
-Counts the number of active pointers to the FrameSet (not to its
-current Frame).
-\end{description}
-\end{quote}
-
-Note that the set of attributes possessed by a FrameSet can vary,
-depending on the nature of its current Frame. For example, if the
-current Frame is a \htmlref{SkyFrame}{SkyFrame} (\secref{ss:skyframes}), then the FrameSet
-will acquire an \htmlref{Equinox}{Equinox} attribute from it which can be set, enquired,
-{\em{etc.}}  However, if the current Frame is changed to be a basic
-Frame, which does not have an Equinox attribute, then this attribute
-will be absent from the FrameSet as well. Any attempt to reference it
-will then result in an error.
-
-\subsection{Extracting a Frame from a FrameSet}
-
-Although a \htmlref{FrameSet}{FrameSet} may be used in place of its current \htmlref{Frame}{Frame} in most
-situations, it is sometimes convenient to have direct access to a
-specified Frame within it. This may be obtained using the
-\htmlref{AST\_GETFRAME}{AST_GETFRAME} function, as follows:
-
-\small
-\begin{verbatim}
-      FRAME = AST_GETFRAME( FRAMESET, AST__BASE, STATUS )
-\end{verbatim}
-\normalsize
-
-This would return a pointer (not a copy) to the base Frame within the
-FrameSet. Note the use of AST\_\_BASE
-(\secref{ss:astbaseandastcurrent}) as shorthand for the value of the
-FrameSet's \htmlref{Base}{Base} attribute, which gives the base Frame's index.
-
-\subsection{Removing a Frame from a FrameSet}
-
-Removing a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet} is straightforward and is performed
-using the \htmlref{AST\_REMOVEFRAME}{AST_REMOVEFRAME} routine. You identify the Frame you wish to
-remove in the usual way, by giving its index within the FrameSet. For
-example, the following would remove the Frame with index 1:
-
-\small
-\begin{verbatim}
-      CALL AST_REMOVEFRAME( FRAMESET, 1, STATUS );
-\end{verbatim}
-\normalsize
-
-The only restriction is that you cannot remove the last remaining
-Frame because a FrameSet must always contain at least one Frame.  When
-a Frame is removed, the Frames which follow it are re-numbered
-({\em{i.e.}}\ their indices are reduced by one) so as to preserve the
-sequence of consecutive Frame indices.  The FrameSet's \htmlref{Nframe}{Nframe}
-attribute is also decremented.
-
-If appropriate, AST\_REMOVEFRAME will modify the FrameSet's \htmlref{Base}{Base}
-and/or \htmlref{Current}{Current} attributes so that they continue to identify the same
-Frames as previously. If either the base or current Frame is removed,
-however, the corresponding attribute will become un-set, so that it
-reverts to its default value (\secref{ss:baseandcurrentdefault}) and
-therefore identifies an alternative Frame.
-
-Note that it is quite permissible to remove any Frame from a FrameSet,
-even although other Frames may appear to depend on it. For example, in
-Figure~\ref{fig:fsexample}, if Frame~1 were removed, the correct
-relationship between Frames~2 and 3 would still be preserved, although
-they would be re-numbered as Frames~1 and 2.
-
-\cleardoublepage
-\section{\label{ss:fshigher}Higher Level Operations on FrameSets}
-
-\subsection{\label{ss:framesetsfromconvert}Creating FrameSets with AST\_CONVERT}
-
-Before considering the important subject of using FrameSets to convert
-between coordinate systems (\secref{ss:framesetconverting}), let us
-return briefly to reconsider the output generated by \htmlref{AST\_CONVERT}{AST_CONVERT}. We
-used this function earlier (\secref{ss:introducingconversion}), when
-converting between the coordinate systems represented by various kinds
-of \htmlref{Frame}{Frame}, and indicated that it returns a \htmlref{FrameSet}{FrameSet} to represent the
-coordinate conversion it identifies. We are now in a position to
-examine the structure of this FrameSet.
-
-Take our earlier example (\secref{ss:convertingskyframes}) of
-converting between the celestial coordinate systems represented by two
-SkyFrames:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER SKYFRAME1, SKYFRAME2, STATUS
-
-      STATUS = 0
-
-      ...
-
-      SKYFRAME1 = AST_SKYFRAME( 'System=FK4-NO-E, Epoch=B1958, Equinox=B1960', STATUS )
-      SKYFRAME2 = AST_SKYFRAME( 'System=Ecliptic, Equinox=J2010.5', STATUS )
-
-      CVT = AST_CONVERT( SKYFRAME1, SKYFRAME2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-\begin{latexonly}
-   This will produce a pointer, CVT, to the FrameSet shown in
-   Figure~\ref{fig:fsconvert}.
-   \begin{figure}[bhtp]
-   \begin{center}
-   \includegraphics[scale=0.65]{sun210_figures/fsconvert.eps}
-   \caption{The FrameSet produced when AST\_CONVERT is used to convert
-   between the coordinate systems represented by two SkyFrames. The
-   source \htmlref{SkyFrame}{SkyFrame} becomes the base Frame, while the destination SkyFrame
-   becomes the current Frame. The \htmlref{Mapping}{Mapping} between them implements the
-   required conversion.}
-   \label{fig:fsconvert}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   This will produce a pointer, CVT, to the FrameSet shown in the Figure
-   below.
-   \begin{quote}
-   \begin{figure}[bhtp]
-   \label{fig:fsconvert}
-   \includegraphics[scale=1.0]{sun210_figures/fsconvert.eps}
-   \caption{The FrameSet produced when AST\_CONVERT is used to convert
-   between the coordinate systems represented by two SkyFrames. The
-   source SkyFrame becomes the base Frame, while the destination SkyFrame
-   becomes the current Frame. The Mapping between them implements the
-   required conversion.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-As can be seen, this FrameSet contains just two Frames.  The source
-Frame supplied to AST\_CONVERT becomes its base Frame, while the
-destination Frame becomes its current Frame. (The FrameSet, of course,
-simply holds pointers to these Frames, rather than making copies.) The
-Mapping which relates the base Frame to the current Frame is the one
-which implements the required conversion.
-
-As we noted earlier (\secref{ss:convertingskyframes}), the FrameSet
-returned by AST\_CONVERT may be used both as a Mapping and as a Frame
-to perform most of the functions you are likely to need. However, the
-Mapping may be extracted for use on its own if necessary, using
-\htmlref{AST\_GETMAPPING}{AST_GETMAPPING} (\secref{ss:extractingamapping}), for example:
-
-\small
-\begin{verbatim}
-      INTEGER MAPPING
-
-      ...
-
-      MAPPING = AST_GETMAPPING( CVT, AST__BASE, AST__CURRENT, STATUS )
-\end{verbatim}
-\normalsize
-
-\subsection{\label{ss:framesetconverting}Converting between FrameSet Coordinate Systems}
-
-\begin{latexonly}
-   We now consider the process of converting between the coordinate
-   systems represented by two FrameSets. This is a most important
-   operation, as a subsequent example (\secref{ss:registeringimages})
-   will show, and is illustrated in Figure~\ref{fig:fsalign}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.6]{sun210_figures/fsalign.eps}
-   \caption{Conversion between two FrameSets is performed by establishing
-   a link between a pair of Frames, one from each \htmlref{FrameSet}{FrameSet}. If conversion
-   between these two Frames is possible, then a route for converting
-   between the current Frames of both FrameSets can also be found. In
-   practice, there may be many ways of pairing Frames to find the
-   ``missing link'', so the Frames' \htmlref{Domain}{Domain} attribute may be used to
-   narrow the choice.}
-   \label{fig:fsalign}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   We now consider the process of converting between the coordinate
-   systems represented by two FrameSets. This is a most important
-   operation, as a subsequent example (\secref{ss:registeringimages})
-   will show, and is illustrated in the Figure below.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:fsconvert}
-   \includegraphics[scale=1.0]{sun210_figures/fsalign.eps}
-   \caption{Conversion between two FrameSets is performed by establishing
-   a link between a pair of Frames, one from each FrameSet. If conversion
-   between these two Frames is possible, then a route for converting
-   between the current Frames of both FrameSets can also be found. In
-   practice, there may be many ways of pairing Frames to find the
-   ``missing link'', so the Frames' Domain attribute may be used to
-   narrow the choice.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-Recalling (\secref{ss:framesetasframe}) that a FrameSet will behave
-like its current \htmlref{Frame}{Frame} when necessary, conversion between two
-FrameSets is performed using \htmlref{AST\_CONVERT}{AST_CONVERT}
-(\secref{ss:convertingskyframes}), but supplying pointers to FrameSets
-instead of Frames. The effect of this is to convert between the
-coordinate systems represented by the current Frames of each FrameSet:
-
-\small
-\begin{verbatim}
-      INTEGER FRAMESETA, FRAMESETB
-
-      ...
-
-      CVT = AST_CONVERT( FRAMESETA, FRAMESETB, 'SKY', STATUS )
-\end{verbatim}
-\normalsize
-
-When using FrameSets, we are presented with considerably more
-conversion options than when using Frames alone. This is because each
-current Frame is related to all the other Frames in its respective
-FrameSet. Therefore, if we can establish a link between any pair of
-Frames, one from each FrameSet, we can form a complete conversion path
-between the two current Frames (Figure~\ref{fig:fsalign}).
-
-This expanded range of options is, of course, precisely the
-intention. By connecting Frames together within a FrameSet, we have
-extended the range of coordinate systems that can be reached from any
-one of them.  We are therefore no longer restricted to converting
-between Frames with the same Domain value (\secref{ss:framedomains}),
-but can go {\em{via}} a range of intermediate coordinate systems in
-order to make the connection we require. Transformation between
-different domains has therefore become possible because, in assembling
-the FrameSets, we provided the additional information needed to
-inter-relate them.
-
-It is important to appreciate, however, that the choice of ``missing
-link'' is crucial in determining the conversion that results.
-Although each FrameSet may be perfectly self-consistent internally,
-this does not mean that all conversion paths through the combined
-network of Mappings are equivalent. Quite the contrary in fact:
-everything depends on where the inter-connecting link between the two
-FrameSets is made.  In practice, there may be a large number of
-possible pairings of Frames and hence of possible links. Other factors
-must therefore be used to restrict the choice. These are:
-
-\begin{enumerate}
-\item Not every possible pairing of Frames is legitimate. For example,
-you cannot convert directly between a basic Frame and a \htmlref{SkyFrame}{SkyFrame} which
-belong to different classes, so such pairings will be ignored.
-
-\item In a similar way, you cannot convert directly between Frames
-with different Domain values (\secref{ss:framedomains}). If the Domain
-attribute is used consistently (typically only one Frame in each
-FrameSet will have a particular Domain value), then this further
-restricts the choice.
-
-\item The third argument of AST\_CONVERT may then be used to specify
-explicitly which Domain value the paired Frames should have. You may
-also supply a comma-separated list of preferences here (see below).
-
-\item If the above steps fail to uniquely identify the link, then the
-first suitable pairing of Frames is used, so that any ambiguity is
-resolved by the order in which Frames are considered for pairing (see
-the description of the AST\_CONVERT function in
-\appref{ss:functiondescriptions} for details of the search
-order).\footnote{If you find that how this ambiguity is resolved
-actually makes a difference to the conversion that results, then you
-have probably constructed a FrameSet which lacks internal
-self-consistency. For example, you might have two Frames representing
-indistinguishable coordinate systems but inter-related by a non-null
-\htmlref{Mapping}{Mapping}.}
-\end{enumerate}
-
-In the example above we supplied the string ``SKY'' as the third
-argument of AST\_CONVERT. This constitutes a request that a pair of
-Frames with
-the Domain value SKY ({\em{i.e.}}\ representing celestial coordinate
-systems) should be used to inter-relate the two FrameSets. Note that
-this does not specify which celestial coordinate system to use, but is
-a general request that the two FrameSets be inter-related using
-coordinates on the celestial sphere.
-
-Of course, it may be that this request cannot be met because there may
-not be a celestial coordinate system in both FrameSets. If this is
-likely to happen, we can supply a list of preferences, or a
-{\em{domain search path,}}
-as the third argument to AST\_CONVERT, such as
-the following:
-
-\small
-\begin{verbatim}
-      CVT = AST_CONVERT( FRAMESETA, FRAMESETB, 'SKY,PIXEL,GRID,', STATUS )
-\end{verbatim}
-\normalsize
-
-Now, if the two FrameSets cannot be inter-related using the SKY domain,
-AST\_CONVERT will attempt to use the PIXEL domain instead. If this
-also fails, it will try the GRID domain. A blank field in the domain
-search path (here indicated by the final comma) allows any Domain
-value to be used. This can be employed as a last resort when all else
-has failed.
-
-If astConvert succeeds in identifying a conversion, it will return a
-pointer to a FrameSet (\secref{ss:framesetsfromconvert}) in which the
-source and destination Frames are inter-connected by the required
-Mapping. In this case, of course, these Frames will be the current
-Frames of the two FrameSets, but in all other respects the returned
-FrameSet is the same as when converting between Frames.
-
-Very importantly, however, AST\_CONVERT may modify the FrameSets you
-are converting between. It does this, in order to indicate which
-pairing of Frames was used to inter-relate them, by changing the \htmlref{Base}{Base}
-attribute for each FrameSet so that the Frame used in the pairing
-becomes its base Frame (\secref{ss:baseandcurrent}).
-
-Finally, note that AST\_CONVERT may also be used to convert between a
-FrameSet and a Frame, or {\em{vice versa.}} If a pointer to a Frame is
-supplied for either the first or second argument, it will behave like
-a FrameSet containing only a single Frame.
-
-\subsection{\label{ss:registeringimages}Example---Registering Two Images}
-
-Consider two images which have been calibrated by attaching FrameSets
-to them, such that the base \htmlref{Frame}{Frame} of each \htmlref{FrameSet}{FrameSet} corresponds to the
-raw data grid coordinates of each image (the GRID domain of
-\secref{ss:domainconventions}). Suppose, also, that these FrameSets
-contain an unknown number of other Frames, representing alternative
-world coordinate systems.  What we wish to do is register these two
-images, such that we can transform from a position in the data grid of
-one into the corresponding position in the data grid of the other.
-This is a very practical example because images will typically be
-calibrated using FrameSets in precisely this way.
-
-The first step will probably involve making a copy of both FrameSets
-(using \htmlref{AST\_COPY}{AST_COPY}---\secref{ss:copyingobjects}), since we will be
-modifying them. Let ``frameseta'' and ``framesetb'' be pointers to
-these copies. Since we want to convert between the base Frames of
-these FrameSets ({\em{i.e.}}\ their data grid coordinates), the next
-step is to make these Frames current. This is simply done by inverting
-both FrameSets, which interchanges their base and current
-Frames. astInvert will perform this task:
-
-\small
-\begin{verbatim}
-      CALL AST_INVERT( FRAMESETA, STATUS )
-      CALL AST_INVERT( FRAMESETB, STATUS )
-\end{verbatim}
-\normalsize
-
-To identify the required conversion, we now use \htmlref{AST\_CONVERT}{AST_CONVERT},
-supplying a suitable domain search path with which we would like our
-two images to be registered:
-
-\small
-\begin{verbatim}
-      CVT = AST_CONVERT( FRAMESETA, FRAMESETB, 'SKY,PIXEL,GRID', STATUS )
-      IF ( CVT .EQ. AST__NULL ) THEN
-         <no conversion was possible>
-      ELSE
-         <conversion was possible>
-      END IF
-\end{verbatim}
-\normalsize
-
-The effects of this are:
-
-\begin{enumerate}
-\item AST\_CONVERT first attempts to register the two images on the
-celestial sphere ({\em{i.e.}}\ using the SKY domain). To do this, it
-searches for a celestial coordinate system, although not necessarily
-the same one, attached to each image.  If it finds a suitable pair of
-coordinate systems, it then registers the images by matching
-corresponding positions on the sky.
-
-\item If this fails, AST\_CONVERT next tries to match positions in the
-PIXEL domain (\secref{ss:framedomains}). If it succeeds, the two
-images will then be registered so that their corresponding pixel
-positions correspond. If the PIXEL domain is offset from the data grid
-(as typically happens in data reduction systems which implement a
-``pixel origin''), then this will be correctly accounted for.
-
-\item If this also fails, the GRID domain is finally used. This will
-result in image registration by matching corresponding points in the
-data grids used by both images. This means they will be
-aligned so that the first element their data arrays correspond.
-
-\item If all of the above fail, AST\_CONVERT will return the value
-AST\_\_NULL. Otherwise a pointer to a FrameSet will be returned.
-\end{enumerate}
-
-The resulting CVT FrameSet may then be used directly
-(\secref{ss:convertingskyframes}) to convert between positions in the
-data grid of the first image and corresponding positions in the data
-grid of the second image.
-
-To determine which domain was used to achieve registration,
-we can use the fact that the \htmlref{Base}{Base} attribute of each FrameSet is set by
-AST\_CONVERT to indicate which intermediate Frames were used. We
-can therefore simply invert either FrameSet (to make its base Frame
-become the current one) and then enquire the \htmlref{Domain}{Domain} value:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 20 ) DOMAIN
-
-      ...
-
-
-      CALL AST_INVERT( FRAMESETA, STATUS )
-      DOMAIN = AST_GETC( FRAMESETA, 'Domain', STATUS )
-\end{verbatim}
-\normalsize
-
-If conversion was successful, the result will be one of the strings
-``SKY'', ``PIXEL'' or ``GRID''.
-
-\subsection{\label{ss:remapframe}Re-Defining a FrameSet Coordinate System}
-
-As discussed earlier (\secref{ss:baseandcurrent}), an important
-application of a \htmlref{FrameSet}{FrameSet} is to allow coordinate system information to
-be attached to entities such as images in order to calibrate them. In
-addition, one of the main objectives of AST is to simplify the
-propagation of such information through successive stages of data
-processing, so that it remains consistent with the associated image
-data.
-
-In such a situation, the FrameSet's base \htmlref{Frame}{Frame} would correspond with
-the image's data grid coordinates and its other Frames (if any) with
-the various alternative world coordinate systems associated with the
-image.  If the data processing being performed does not change the
-relationship between the image's data grid coordinates and any of the
-associated world coordinate systems, then propagation of the WCS
-information is straightforward and simply involves copying the
-FrameSet associated with the image.
-
-If any of these relationships change, however, then corresponding
-changes must be made to the way Frames within the FrameSet are
-inter-related. By far the most common case occurs when the image
-undergoes some geometrical transformation resulting in ``re-gridding''
-on to another data grid, but the same principles can be applied to any
-re-definition of a coordinate system.
-
-To pursue the re-gridding example, we would need to modify our
-FrameSet to account for the fact that the image's data grid coordinate
-system (corresponding to the FrameSet's base Frame) has
-changed. Looking at the steps needed in detail, we might proceed as
-follows:
-
-\begin{enumerate}
-\item Create a \htmlref{Mapping}{Mapping} which represents the relationship between the
-original data grid coordinate system and the new one.
-
-\item Obtain a Frame to represent the new data grid coordinate system
-(we could re-use the original base Frame here, using \htmlref{AST\_GETFRAME}{AST_GETFRAME} to
-obtain a pointer to it).
-
-\item Add the new Frame to the FrameSet, related to the original base
-Frame by the new Mapping. This Frame now represents the new data grid
-coordinate system and is correctly related to all the other Frames
-present.\footnote{This is because any transformation to or from this
-new Frame must go {\em{via}} the base Frame representing the original
-data grid coordinate system, which we assume was correctly related to
-all the other Frames present.}
-
-\item Remove the original base Frame (representing the old data grid
-coordinate system).
-
-\item Make the new Frame the base Frame and restore the original
-current Frame.
-\end{enumerate}
-
-\begin{latexonly}
-   The effect of these steps is to change the relationship between the
-   base Frame and all the other Frames present. It is as if a new Mapping
-   has been interposed between the Frame we want to alter and all the
-   other Frames within the FrameSet (Figure~\ref{fig:fsremap}).
-   \begin{figure}[hbtp]
-   \begin{center}
-   \includegraphics[scale=0.6]{sun210_figures/fsremap.eps}
-   \caption{The effect of \htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME} is to interpose a Mapping between
-   a nominated Frame within a FrameSet and the remaining contents of the
-   FrameSet. This effectively ``re-defines'' the coordinate system
-   represented by the affected Frame. It may be used to compensate (say)
-   for geometrical changes made to an associated image. The
-   inter-relationships between all the other Frames within the FrameSet
-   remain unchanged.}
-   \label{fig:fsremap}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   The effect of these steps is to change the relationship between the
-   base Frame and all the other Frames present. It is as if a new Mapping
-   has been interposed between the Frame we want to alter and all the
-   other Frames within the FrameSet (see Figure below).
-   \begin{quote}
-   \begin{figure}[hbtp]
-   \label{fig:fsremap}
-   \includegraphics[scale=0.9]{sun210_figures/fsremap.eps}
-   \caption{The effect of AST\_REMAPFRAME is to interpose a Mapping between
-   a nominated Frame within a FrameSet and the remaining contents of the
-   FrameSet. This effectively ``re-defines'' the coordinate system
-   represented by the affected Frame. It may be used to compensate (say)
-   for geometrical changes made to an associated image. The
-   inter-relationships between all the other Frames within the FrameSet
-   remain unchanged.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-Performing the steps above is rather lengthy, however, so the
-AST\_REMAPFRAME function is provided to perform all of these
-operations in one go.  A practical example of its use is given below
-(\secref{ss:wcsprocessingexample}).
-
-\subsection{\label{ss:wcsprocessingexample}Example---Binning an Image}
-
-As an example of using \htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME}, consider a case where the
-pixels of a 2-dimensional image have been binned 2$\times$2, so as to
-reduce the image size by a factor of two in each dimension.  We must
-now modify the associated \htmlref{FrameSet}{FrameSet} to reflect this change to the
-image. Much the same process would be needed for any other geometrical
-change the image might undergo.
-
-We first set up a \htmlref{Mapping}{Mapping} (a \htmlref{WinMap}{WinMap} in this case) which relates the
-data grid coordinates in the original image to those in the new one:
-
-\small
-\begin{verbatim}
-      INTEGER WINMAP
-      DOUBLE PRECISION INA( 2 ), INB( 2 ), OUTA( 2 ), OUTB( 2 )
-      DATA INA / 0.5D0, 0.5D0 /
-      DATA INB / 2.5D0, 2.5D0 /
-      DATA OUTA / 0.5D0, 0.5D0 /
-      DATA OUTB / 1.5DO, 1.5DO /
-
-      ...
-
-      WINMAP = AST_WINMAP( 2, INA, INB, OUTA, OUTB, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have simply set up arrays containing the data grid
-coordinates of the bottom left and top right corners of the first
-element in the output image (OUTA and OUTB) and the corresponding
-coordinates in the input image (INA and INB). \htmlref{AST\_WINMAP}{AST_WINMAP} then creates
-a WinMap which performs the required transformation. We do not need to
-know the size of the image.
-
-We can then pass this WinMap to AST\_REMAPFRAME. This modifies the
-relationship between our FrameSet's base \htmlref{Frame}{Frame} and the other Frames in
-the FrameSet, so that the base Frame represents the data grid
-coordinate system of the new image rather than the old one:
-
-\small
-\begin{verbatim}
-      INTEGER FRAMESET
-
-      ...
-
-      CALL AST_REMAPFRAME( FRAMESET, AST__BASE, WINMAP, STATUS )
-\end{verbatim}
-\normalsize
-
-Any other coordinate systems described by the FrameSet, no matter how
-many of these there might be, are now correctly associated with the
-new image.
-
-\subsection{\label{ss:framesetintegrity}Maintaining the Integrity of FrameSets}
-
-When constructing a \htmlref{FrameSet}{FrameSet}, you are provided with a framework into
-which you can place any combination of Frames and Mappings that you
-wish. There are relatively few constraints on this process and no
-checks are performed to see whether the FrameSet you construct makes
-physical sense.  It is quite possible, for example, to construct a
-FrameSet containing two identical SkyFrames which are inter-related by
-a non-unit \htmlref{Mapping}{Mapping}. AST will not object if you do this, but it makes
-no sense, because applying a non-unit Mapping to any set of celestial
-coordinates cannot yield positions that are still in the original
-coordinate system.  If you use such a FrameSet to perform coordinate
-conversions, you are likely to get unpredictable results because the
-information in the FrameSet is corrupt.
-
-It is, of course, your responsibility as a programmer to ensure the
-validity of any information which you insert into a
-FrameSet. Normally, this is straightforward and simply consists of
-formulating your problem correctly (a diagram can often help to
-clarify how coordinate systems are inter-related) and writing the
-appropriate bug-free code to construct the FrameSet. However, once you
-start to modify an existing FrameSet, there are new opportunities for
-corrupting it!
-
-Consider, for example, a FrameSet whose current \htmlref{Frame}{Frame} is a
-\htmlref{SkyFrame}{SkyFrame}. We can set a new value for this SkyFrame's \htmlref{Equinox}{Equinox} attribute
-simply by using \htmlref{AST\_SET}{AST_SET} on the FrameSet, as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( FRAMESET, 'Equinox=J2010', STATUS )
-\end{verbatim}
-\normalsize
-
-The effect of this will be to change the celestial coordinate system
-which the current Frame represents. You can see, however, that this
-has the potential to make the FrameSet corrupt unless corresponding
-changes are also made to the Mapping which relates this SkyFrame to
-the other Frames within the FrameSet. In fact, it is a general rule
-that any change to a FrameSet which affects its current Frame can
-potentially require corresponding changes to the FrameSet's Mappings
-in order to maintain its overall integrity.
-
-Fortunately, once you have stored valid information in a FrameSet, AST
-will look after these details for you automatically, so that the
-FrameSet's integrity is maintained. In the example above, it would do
-this by appropriately re-mapping the current Frame (as if
-\htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME} had been used---\secref{ss:remapframe}) in response to
-the use of AST\_SET. One way of illustrating this process is as
-follows:
-
-\small
-\begin{verbatim}
-      INTEGER SKYFRAME
-
-      ...
-
-      SKYFRAME = AST_SKYFRAME( ' ', STATUS )
-      FRAMESET = AST_FRAMESET( SKYFRAME, STATUS )
-      CALL AST_ADDFRAME( FRAMESET, 1, AST_UNITMAP( 2, ' ', STATUS )
-     :                   SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-This constructs a trivial FrameSet whose base and current Frames are
-both the same SkyFrame connected by a \htmlref{UnitMap}{UnitMap}. You can think of this
-as a ``pipe'' connecting two coordinate systems. At present, these two
-systems represent identical ICRS coordinates, so the FrameSet
-implements a unit Mapping. We can change the coordinate system on the
-current end of this pipe as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( FRAMESET, 'System=Ecliptic, Equinox=J2010', STATUS )
-\end{verbatim}
-\normalsize
-
-and the Mapping which the FrameSet implements would change
-accordingly. To change the coordinate system on the base end of the
-pipe, we might use:
-
-\small
-\begin{verbatim}
-      CALL AST_INVERT( FRAMESET )
-      CALL AST_SET( FRAMESET, 'System=Galactic', STATUS )
-      CALL AST_INVERT( FRAMESET )
-\end{verbatim}
-\normalsize
-
-The FrameSet would then convert between galactic and ecliptic
-coordinates.
-
-Note that AST\_SET is not the only function which has this effect:
-\htmlref{AST\_CLEAR}{AST_CLEAR} behaves similarly, as also does \htmlref{AST\_PERMAXES}{AST_PERMAXES}
-(\secref{ss:permutingaxes}). If you need to circumvent this mechanism
-for any reason, this can be done by going behind the scenes and
-obtaining a pointer directly to the Frame you wish to modify. Consider
-the following, for example:
-
-\small
-\begin{verbatim}
-      SKYFRAME = AST_GETFRAME( FRAMESET, AST__CURRENT, STATUS )
-      CALL AST_SET( SKYFRAME, 'Equinox=J2010', STATUS )
-      CALL AST_ANNUL( SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, AST\_SET is applied to the SkyFrame pointer rather than the
-FrameSet pointer, so the usual checks on FrameSet integrity do not
-occur. The SkyFrame's Equinox attribute will therefore be modified
-without any corresponding change to the FrameSet's Mappings.  In this
-case you must take responsibility yourself for maintaining the
-FrameSet's integrity, perhaps through appropriate use of
-AST\_REMAPFRAME.
-
-\subsection{Merging FrameSets}
-
-\begin{latexonly}
-   As well as adding individual Frames to a \htmlref{FrameSet}{FrameSet}
-   (\secref{ss:addingframes}), it is also possible to add complete sets of
-   inter-related Frames which are contained within another
-   FrameSet. This, of course, corresponds to the process of merging two
-   FrameSets (Figure~\ref{fig:fsmerge}).
-   \begin{figure}[hbtp]
-   \begin{center}
-   \includegraphics[scale=0.6]{sun210_figures/fsmerge.eps}
-   \caption{Two FrameSets in the process of being merged using
-   \htmlref{AST\_ADDFRAME}{AST_ADDFRAME}. FrameSet~B is being added to FrameSet~A by supplying a
-   new \htmlref{Mapping}{Mapping} which inter-relates a nominated \htmlref{Frame}{Frame} in A (here number~1)
-   and the current Frame of B. In the merged FrameSet, the Frames
-   contributed by B will be re-numbered to become Frames~4, 5 and 6. The
-   base Frame will remain unchanged, but the current Frame of B becomes
-   the new current Frame. Note that FrameSet~B itself is not
-   altered by this process.}
-   \label{fig:fsmerge}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   As well as adding individual Frames to a FrameSet
-   (\secref{ss:addingframes}), it is also possible to add complete sets of
-   inter-related Frames which are contained within another
-   FrameSet. This, of course, corresponds to the process of merging two
-   FrameSets (see Figure below).
-   \begin{quote}
-   \begin{figure}[hbtp]
-   \label{fig:fsmerge}
-   \includegraphics[scale=0.75]{sun210_figures/fsmerge.eps}
-   \caption{Two FrameSets in the process of being merged using
-   AST\_ADDFRAME. FrameSet~B is being added to FrameSet~A by supplying a
-   new Mapping which inter-relates a nominated Frame in A (here number~1)
-   and the current Frame of B. In the merged FrameSet, the Frames
-   contributed by B will be re-numbered to become Frames~4, 5 and 6. The
-   base Frame will remain unchanged, but the current Frame of B becomes
-   the new current Frame. Note that FrameSet~B itself is not
-   altered by this process.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-This process is performed by adding one FrameSet to another using
-AST\_ADDFRAME, in much the same manner as when adding a new Frame to
-an existing FrameSet (\secref{ss:addingframes}). It is simply a matter
-of providing a FrameSet pointer, instead of a Frame pointer, for the
-4th argument. In performing the merger you must, as usual, supply a
-Mapping, but in this case the Mapping should relate the current Frame
-of the FrameSet being added to one of the Frames already present. For
-example, you might perform the merger shown in
-Figure~\ref{fig:fsmerge} as follows:
-
-\small
-\begin{verbatim}
-      INTEGER MAPPING
-
-      ...
-
-      CALL AST_ADDFRAME( FRAMESETA, 1, MAPPING, FRAMESETB, STATUS )
-\end{verbatim}
-\normalsize
-
-The Frames acquired by FRAMESETA from the FrameSet being added
-(FRAMESETB) are re-numbered so that they retain their original order
-and follow on consecutively after the Frames that were already
-present, whose indices remain unchanged. The base Frame of FRAMESETA
-remains unchanged, but the current Frame of FRAMESETB becomes its new
-current Frame. All the inter-relationships between Frames in both
-FrameSets remain in place and are preserved in the merged FrameSet.
-
-Note that while this process modifies the first FrameSet (FRAMESETA),
-it leaves the original contents of the one being added (FRAMESETB)
-unchanged.
-
-%\cleardoublepage
-%\section{\label{ss:searching}TBW - Searching for Coordinate Systems}
-
-\cleardoublepage
-\section{\label{ss:channels}Saving and Restoring Objects (Channels)}
-
-Facilities are provided by the AST library for performing input and
-output (I/O) with any kind of \htmlref{Object}{Object}. This means it is possible
-to write any Object into various external representations for
-storage, and then to read these representations back in, so as to
-restore the original Object. Typically, an Object would be written by
-one program and read back in by another.
-
-We refer to ``external representations'' in the plural because AST is
-designed to function independently of any particular data storage
-system. This means that Objects may need converting into a number of
-different external representations in order to be compatible with
-(say) the astronomical data storage system in which they will reside.
-
-In this section, we discuss the basic I/O facilities which support
-external representations based on a textual format referred to as the AST
-``native format''. These are implemented using a new kind of Object---a
-\htmlref{Channel}{Channel}. We will examine later how to use other representations, based on
-an XML format or on the use of FITS headers, for storing Objects. These
-are implemented using more specialised forms of Channel called \htmlref{XmlChan}{XmlChan} 
-(\secref{ss:xmlchan}) and \htmlref{FitsChan}{FitsChan} (\secref{ss:nativefits}).
-
-\subsection{The Channel Model}
-
-The best way to start thinking about a \htmlref{Channel}{Channel} is like a Fortran I/O
-unit (also represented by an integer, as it happens) and to think of
-the process of creating a Channel as the combined process of
-allocating a unit number and attaching it to a file by opening the
-file on that unit. Subsequently, you can read and write Objects
-{\em{via}} the Channel.
-
-This analogy is not quite perfect, however, because a Channel has, in
-principle, two ``files'' attached to it. One is used when reading, and
-the other when writing. These are termed the Channel's {\em{source}}
-and {\em{sink}} respectively. In practice, the source and sink may
-both be the same, in which case the analogy with the Fortran I/O unit
-is correct, but this need not always be so. It is not necessarily so
-with the basic Channel, as we will now see
-(\secref{ss:creatingachannel}).
-
-\subsection{\label{ss:creatingachannel}Creating a Channel}
-
-The process of creating a \htmlref{Channel}{Channel} is straightforward. As you
-might expect, it uses the constructor function \htmlref{AST\_CHANNEL}{AST_CHANNEL}:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER CHANNEL, STATUS
-
-      STATUS = 0
-
-      ...
-
-      CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-The first two arguments to AST\_CHANNEL specify the external source
-and sink that the Channel is to use. There arguments are the names of
-Fortran subroutines and we will examine their use in more detail later
-(\secref{ss:channelsource} and \secref{ss:channelsink}).
-
-In this very simple example we have supplied the name of the null
-routine AST\_NULL\footnote{Note that AST\_NULL (one underscore) is a
-routine name and is distinct from AST\_\_NULL (two underscores) which
-is a null \htmlref{Object}{Object} pointer.  Since we are passing the name of one
-routine to another routine, AST\_NULL would normally have to appear in
-a Fortran EXTERNAL statement. In this example, however, a suitable
-statement is already present in the AST\_PAR include file.} for both
-the source and sink routines.  This requests the default behaviour,
-which means that textual input will be read from the program's
-standard input stream (typically, this means your keyboard) while
-textual output will go to the standard output stream (typically
-appearing on your screen). On UNIX systems, of course, either of these
-streams can easily be redirected to files.
-
-\subsection{\label{ss:writingtoachannel}Writing Objects to a Channel}
-
-The process of saving Objects is very straightforward. You can
-simply write any \htmlref{Object}{Object} to a \htmlref{Channel}{Channel} using the \htmlref{AST\_WRITE}{AST_WRITE}
-function, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER NOBJ, OBJECT
-
-      ...
-
-      NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-\end{verbatim}
-\normalsize
-
-The effect of this will be to produce a textual description of the
-Object which will appear, by default, on your program's standard
-output stream. Any class of Object may be converted into text in this
-way.
-
-AST\_WRITE returns a count of the number of Objects written. Usually,
-this will be one, unless the Object supplied cannot be
-represented. With a basic Channel all Objects can be represented, so a
-value of one will always be returned unless there has been an
-error. We will see later, however, that more specialised forms of
-Channel may impose restrictions on the kind of Object you can write
-(\secref{ss:foreignfitslimitations}). In such cases, AST\_WRITE may
-return zero to indicate that the Object was not acceptable.
-
-\subsection{\label{ss:readingfromachannel}Reading Objects from a Channel}
-
-Before discussing the format of the output produced above
-(\secref{ss:writingtoachannel}), let us consider how to read it back,
-so as to reconstruct the original \htmlref{Object}{Object}. Naturally, we would first
-need to save the output in a file. On UNIX systems, we can do that
-simply by redirecting standard output to a file using a shell command
-like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program1 >file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Within a subsequent program, we can read this Object back in by
-using the \htmlref{AST\_READ}{AST_READ} function, having first created a suitable
-\htmlref{Channel}{Channel}:
-
-\small
-\begin{verbatim}
-      OBJECT = AST_READ( CHANNEL, STATUS )
-\end{verbatim}
-\normalsize
-
-By default, this function will read from the standard input stream
-(the default source for a basic Channel), so we would need to ensure
-that our second program reads its input from the file in which the
-Object description is stored. On UNIX systems, we could again use a
-shell redirection command such as:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program2 <file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Saving and Restoring Multiple Objects}
-
-I/O operations performed on a basic \htmlref{Channel}{Channel} are sequential. This
-means that if you write more than one \htmlref{Object}{Object} to a Channel,
-each new Object's textual description is simply appended to the
-previous one. You can store any number of Objects in this way,
-subject only to the storage space you have available.
-
-After you read an Object back from a basic Channel, the
-Channel is ``positioned'' at the end of that Object's
-textual description. If you then perform another read, you will
-read the next Object's textual description and therefore
-retrieve the next Object.  This process may be repeated to read
-each Object in turn. When there are no more Objects to be
-read, \htmlref{AST\_READ}{AST_READ} will return the value AST\_\_NULL to indicate an
-{\em{end-of-file.}}
-
-\subsection{\label{ss:validatinginput}Validating Input}
-
-The pointer returned by \htmlref{AST\_READ}{AST_READ} (\secref{ss:readingfromachannel})
-could identify any class of \htmlref{Object}{Object}---this is determined entirely by
-the external data being read. If it is necessary to test for a
-particular class (say a \htmlref{Frame}{Frame}), this may be done as follows using the
-appropriate member of the \htmlref{AST\_ISA$<$CLASS$>$}{AST_ISACLASS} family of functions:
-
-\small
-\begin{verbatim}
-      LOGICAL OK
-
-      ...
-
-      OK = AST_ISAFRAME( OBJECT, STATUS )
-\end{verbatim}
-\normalsize
-
-Note, however, that this will accept any Frame, so would be equally
-happy with a basic Frame or a \htmlref{SkyFrame}{SkyFrame}.  An alternative validation
-strategy would be to obtain the value of the Object's \htmlref{Class}{Class} attribute
-and then test this character string, as follows:
-
-\small
-\begin{verbatim}
-      OK = AST_GETC( OBJECT, 'Class', STATUS ) .EQ. 'Frame'
-\end{verbatim}
-\normalsize
-
-This would only accept a basic Frame and would reject a SkyFrame.
-
-\subsection{Storing an ID String with an Object}
-
-Occasionally, you may want to store a number of Objects and later
-retrieve them and use each for a different purpose. If the Objects are
-of the same class, you cannot use the \htmlref{Class}{Class} attribute to distinguish
-them when you read them back
-({\em{c.f.}}~\secref{ss:validatinginput}). Although relying on the
-order in which they are stored is a possible solution, this becomes
-complicated if some of the Objects are optional and may not always be
-present. It also makes extending your data format in future more
-difficult.
-
-To help with this, every AST \htmlref{Object}{Object} has an \htmlref{ID}{ID} attribute and an \htmlref{Ident}{Ident}
-attribute, both of which allows you, in effect, to attach a textual
-identification label to it. You simply set the ID or Ident attribute before
-writing the Object:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( OBJECT, 'ID=Calibration', STATUS )
-      NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-\end{verbatim}
-\normalsize
-
-You can then test its value after you read the Object back:
-
-\small
-\begin{verbatim}
-      OBJECT = AST_READ( CHANNEL, STATUS )
-      IF ( AST_GETC( OBJECT, 'ID', STATUS ) .EQ. 'Calibration' ) THEN
-         <the Calibration Object has been read>
-      ELSE
-         <some other Object has been read>
-      END IF
-\end{verbatim}
-\normalsize
-
-The only difference between the ID and Ident attributes is that the ID
-attribute is unique to a particular Object and is lost if, for example,
-you make a copy of the Object. The Ident attrubute, on the other hand, is
-transferred to the new Object when a copy is made. Consequently, it is
-safest to set the value of the ID attribute immediately before you
-perform the write.
-
-\subsection{\label{ss:textualoutputformat}The Textual Output Format} 
-
-Let us now examine the format of the textual output produced by
-writing an \htmlref{Object}{Object} to a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}). To give a concrete example, suppose
-the Object in question is a \htmlref{SkyFrame}{SkyFrame}, written out as follows:
-
-\small
-\begin{verbatim}
-      INTEGER SKYFRAME
-
-      ...
-
-      NOBJ = AST_WRITE( CHANNEL, SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-The output should then look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame 	# Description of celestial coordinate system
-#   Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" 	# Title of coordinate system
-    Naxes = 2 	# Number of coordinate axes
-#   Domain = "SKY" 	# Coordinate system domain
-#   Lbl1 = "Right Ascension" 	# Label for axis 1
-#   Lbl2 = "Declination" 	# Label for axis 2
-#   Uni1 = "hh:mm:ss.s" 	# Units for axis 1
-#   Uni2 = "ddd:mm:ss" 	# Units for axis 2
-#   Dir1 = 0 	# Plot axis 1 in reverse direction (hint)
-    Ax1 = 	# Axis number 1
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
-    Ax2 = 	# Axis number 2
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
- IsA Frame 	# Coordinate system description
-    System = "FK4-NO-E" 	# Celestial coordinate system type
-    Epoch = 1958 	# Besselian epoch of observation
-#   Eqnox = 1950 	# Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You will notice that this output is designed both for a human reader,
-in that it is formatted, and also to be read back by a computer in
-order to reconstruct the SkyFrame. In fact, this is precisely the way
-that \htmlref{AST\_SHOW}{AST_SHOW} works (\secref{ss:displayingobjects}), this routine
-being roughly equivalent to the following use of a Channel:
-
-\small
-\begin{verbatim}
-      CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, ' ', STATUS )
-      NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-      CALL AST_ANNUL( CHANNEL, STATUS )
-\end{verbatim}
-\normalsize
-
-Some lines of the output start with a ``\verb?#?'' comment character,
-which turns the rest of the line into a comment. These lines will be
-ignored when read back in by \htmlref{AST\_READ}{AST_READ}.  They typically contain
-default values, or values that can be derived in some way from the
-other data present, so that they do not actually need to be stored in
-order to reconstruct the original Object. They are provided purely for
-human information. The same comment character is also used to append
-explanatory comments to most output lines.
-
-It is not sensible to attempt a complete description of this output
-format because every class of Object is potentially different and each
-can define how its own data should be represented. However, there are
-some basic rules, which mean that the following common features will
-usually be present:
-
-\begin{enumerate}
-\item Each Object is delimited by matching ``Begin'' and ``End''
-lines, which also identify the class of Object involved.
-
-\item Within each Object description, data values are represented
-by a simple ``keyword~$=$~value'' syntax, with one value to a line.
-
-\item Lines beginning ``IsA'' are used to mark the divisions between
-data belonging to different levels in the class hierarchy
-(\appref{ss:classhierarchy}). Thus, ``IsA~\htmlref{Frame}{Frame}'' marks the end of data
-associated with the Frame class and the start of data associated with
-some derived class (a SkyFrame in the above example). ``IsA'' lines
-may be omitted if associated data values are absent and no confusion
-arises.
-
-\item Objects may contain other Objects as data. This is
-indicated by an absent value, with the description of the data
-Object following on subsequent lines.
-
-\item Indentation is used to clarify the overall structure.
-\end{enumerate}
-
-Beyond these general principles, the best guide to what a particular
-line of output represents will generally be the comment which
-accompanies it together with a general knowledge of the class of
-Object being described.
-
-\subsection{\label{ss:controllingchanneloutput}Controlling the Amount of Output}
-
-It is not always necessary for the output from \htmlref{AST\_WRITE}{AST_WRITE}
-(\secref{ss:writingtoachannel}) to be human-readable, so a \htmlref{Channel}{Channel} has
-attributes that allow the amount of detail in the output to be
-controlled.
-
-The first of these is the integer attribute \htmlref{Full}{Full}, which controls the
-extent to which optional, commented out, output lines are produced. By
-default, Full is zero, and this results in the standard style of
-output (\secref{ss:textualoutputformat}) where default values that may
-be helpful to humans are included. To suppress these optional lines,
-Full should be set to $-$1. This is most conveniently done when the
-Channel is created, so that:
-
-\small
-\begin{verbatim}
-      CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, 'Full=-1', STATUS )
-      NOBJ = AST_WRITE( CHANNEL, SKYFRAME, STATUS )
-      CALL AST_ANNUL( CHANNEL, STATUS )
-\end{verbatim}
-\normalsize
-
-would result in output containing only the essential information, such
-as:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame 	# Description of celestial coordinate system
-    Naxes = 2 	# Number of coordinate axes
-    Ax1 = 	# Axis number 1
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
-    Ax2 = 	# Axis number 2
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
- IsA Frame 	# Coordinate system description
-    System = "FK4-NO-E" 	# Celestial coordinate system type
-    Epoch = 1958 	# Besselian epoch of observation
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In contrast, setting Full to $+$1 will result in additional output
-lines which will reveal every last detail of the \htmlref{Object}{Object}'s
-construction. Often this will be rather more than you want, especially
-for more complex Objects, but it can sometimes help when debugging
-programs. This is how a \htmlref{SkyFrame}{SkyFrame} appears at this level of detail:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame 	# Description of celestial coordinate system
-#   RefCnt = 1 	# Count of active Object pointers
-#   Nobj = 1 	# Count of active Objects in same class
- IsA Object 	# Astrometry Object
-#   Nin = 2 	# Number of input coordinates
-#   Nout = 2 	# Number of output coordinates
-#   Invert = 0 	# Mapping not inverted
-#   Fwd = 1 	# Forward transformation defined
-#   Inv = 1 	# Inverse transformation defined
-#   Report = 0 	# Don't report coordinate transformations
- IsA Mapping 	# Mapping between coordinate systems
-#   Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" 	# Title of coordinate system
-    Naxes = 2 	# Number of coordinate axes
-#   Domain = "SKY" 	# Coordinate system domain
-#   Lbl1 = "Right Ascension" 	# Label for axis 1
-#   Lbl2 = "Declination" 	# Label for axis 2
-#   Sym1 = "RA" 	# Symbol for axis 1
-#   Sym2 = "Dec" 	# Symbol for axis 2
-#   Uni1 = "hh:mm:ss.s" 	# Units for axis 1
-#   Uni2 = "ddd:mm:ss" 	# Units for axis 2
-#   Dig1 = 7 	# Individual precision for axis 1
-#   Dig2 = 7 	# Individual precision for axis 2
-#   Digits = 7 	# Default formatting precision
-#   Fmt1 = "hms.1" 	# Format specifier for axis 1
-#   Fmt2 = "dms" 	# Format specifier for axis 2
-#   Dir1 = 0 	# Plot axis 1 in reverse direction (hint)
-#   Dir2 = 1 	# Plot axis 2 in conventional direction (hint)
-#   Presrv = 0 	# Don't preserve target axes
-#   Permut = 1 	# Axes may be permuted to match
-#   MinAx = 2 	# Minimum number of axes to match
-#   MaxAx = 2 	# Maximum number of axes to match
-#   MchEnd = 0 	# Match initial target axes
-#   Prm1 = 1 	# Axis 1 not permuted
-#   Prm2 = 2 	# Axis 2 not permuted
-    Ax1 = 	# Axis number 1
-       Begin SkyAxis 	# Celestial coordinate axis
-#         RefCnt = 1 	# Count of active Object pointers
-#         Nobj = 2 	# Count of active Objects in same class
-       IsA Object 	# Astrometry Object
-#         Label = "Angle on Sky" 	# Axis Label
-#         Symbol = "delta" 	# Axis symbol
-#         Unit = "ddd:mm:ss" 	# Axis units
-#         Digits = 7 	# Default formatting precision
-#         Format = "dms" 	# Format specifier
-#         Dirn = 1 	# Plot in conventional direction
-       IsA Axis 	# Coordinate axis
-#         Format = "dms" 	# Format specifier
-#         IsLat = 0 	# Longitude axis (not latitude)
-#         AsTime = 0 	# Display values as angles (not times)
-       End SkyAxis
-    Ax2 = 	# Axis number 2
-       Begin SkyAxis 	# Celestial coordinate axis
-#         RefCnt = 1 	# Count of active Object pointers
-#         Nobj = 2 	# Count of active Objects in same class
-       IsA Object 	# Astrometry Object
-#         Label = "Angle on Sky" 	# Axis Label
-#         Symbol = "delta" 	# Axis symbol
-#         Unit = "ddd:mm:ss" 	# Axis units
-#         Digits = 7 	# Default formatting precision
-#         Format = "dms" 	# Format specifier
-#         Dirn = 1 	# Plot in conventional direction
-       IsA Axis 	# Coordinate axis
-#         Format = "dms" 	# Format specifier
-#         IsLat = 0 	# Longitude axis (not latitude)
-#         AsTime = 0 	# Display values as angles (not times)
-       End SkyAxis
- IsA Frame 	# Coordinate system description
-    System = "FK4-NO-E" 	# Celestial coordinate system type
-    Epoch = 1958 	# Besselian epoch of observation
-#   Eqnox = 1950 	# Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:channelcommenting}Controlling Commenting}
-
-Another way of controlling output from a \htmlref{Channel}{Channel} is {\em{via}} the
-boolean (integer) \htmlref{Comment}{Comment} attribute, which controls whether comments
-are appended to describe the purpose of each value. Comment has the
-value 1 by default but, if set to zero, will suppress these
-comments. This is normally appropriate only if you wish to minimise
-the amount of output, for example:
-
-\small
-\begin{verbatim}
-      CALL AST_SET( CHANNEL, 'Full=-1, Comment=0', STATUS )
-      NOBJ = AST_WRITE( CHANNEL, SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-might result in the following more compact output:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame
-    Naxes = 2
-    Ax1 =
-       Begin SkyAxis
-       End SkyAxis
-    Ax2 =
-       Begin SkyAxis
-       End SkyAxis
- IsA Frame
-    System = "FK4-NO-E"
-    Epoch = 1958
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Editing Textual Output}
-
-The safest advice about editing the textual output from \htmlref{AST\_WRITE}{AST_WRITE} (or
-\htmlref{AST\_SHOW}{AST_SHOW}) is ``don't!''---unless you know what you are doing.
-
-Having given that warning, however, it is sometimes possible to make
-changes to the text, or even to write entire \htmlref{Object}{Object} descriptions from
-scratch, and to read the results back in to construct new
-Objects. Normally, simple changes to numerical values are safest, but
-be aware that this is a back door method of creating Objects, so
-you are on your own! There are a number of potential pitfalls. In
-particular:
-
-\begin{itemize}
-\item \htmlref{AST\_READ}{AST_READ} is intended for retrieving data written by AST\_WRITE
-and not for reading data input by humans. As such, the data validation
-provided is very limited and is certainly not foolproof. This makes it
-quite easy to construct Objects that are internally inconsistent by
-this means. In contrast, the normal programming interface incorporates
-numerous checks designed to make it impossible to construct invalid
-Objects. You should not necessarily think you have found a bug if your
-changes to an Object's textual description fail to produce the results
-you expected!
-
-\item In many instances the names associated with values in textual
-output will correspond with Object attributes. Sometimes, however,
-these names may differ from the attribute name. This is mainly because
-of length restrictions imposed by other common external formats, such
-as FITS headers. Some of the names used do not correspond with
-attributes at all.
-
-\item It is safest to change single numerical or string values.
-Beware of changing the size or shape of Objects ({\em{e.g.}}\ the
-number of axes in a \htmlref{Frame}{Frame}). Often, these values must match others
-stored elsewhere within the Object and changing them in a haphazard
-fashion will not produce useful results.
-
-\item Be wary about un-commenting default values. Sometimes this will
-work, but often these values are derived from other Objects stored
-more deeply in the structure and the proper place to insert a new
-value is not where the default itself appears.
-\end{itemize}
-
-\subsection{\label{ss:mixingchanneltext}Mixing Objects with other Text}
-
-By default, when you use \htmlref{AST\_READ}{AST_READ} to read from a basic \htmlref{Channel}{Channel}
-(\secref{ss:readingfromachannel}), it is assumed that you are reading a
-stream of text containing only AST Objects, which follow each other
-end-to-end. If any extraneous input data are encountered which do not
-appear to form part of the textual description of an \htmlref{Object}{Object}, then an
-error will result. In particular, the first input line must identify
-the start of an Object description, so you cannot start reading half
-way through an Object.
-
-Sometimes, however, you may want to store AST Object descriptions
-intermixed with other textual data. You can do this by setting the
-Channel's boolean (integer) \htmlref{Skip}{Skip} attribute to 1. This will cause every
-read to skip over extraneous data until the start of a new AST Object
-description, if any, is found. So long as your other data do not mimic
-the appearance of an AST Object description, the two sets of data can
-co-exist.
-
-For example, by setting Skip to 1, the following complete Fortran
-program will read all the AST Objects whose descriptions appear in the
-source of this document, ignoring the other text. \htmlref{AST\_SHOW}{AST_SHOW} is used to
-display those found:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER CHANNEL, OBJECT, STATUS
-
-      STATUS = 0      
-      CHANNEL = AST_CHANNEL( AST_NULL, AST_NULL, 'Skip=1', STATUS )
- 1    OBJECT = AST_READ( CHANNEL, STATUS )
-      IF ( OBJECT .NE. AST__NULL ) THEN
-         CALL AST_SHOW( OBJECT, STATUS )
-         CALL AST_ANNUL( OBJECT, STATUS )
-         GO TO 1
-      END IF
-      CALL AST_ANNUL( CHANNEL, STATUS )
-      END
-\end{verbatim}
-\normalsize
-
-\subsection{\label{ss:channelsource}Reading Objects from Files}
-
-Thus far, we have only considered the default behaviour of a \htmlref{Channel}{Channel}
-in reading and writing Objects through a program's standard input and
-output streams. We will now consider how to access Objects stored in
-files more directly.
-
-Because the AST library is designed to be used from more than one
-language, it has to be a little careful about reading and writing to
-files. This is due to the incompatibilities that often exist between
-the file I/O facilities provided by different languages.  Fortunately,
-this ties in well with the principle that AST should also be
-independent of any particular data storage system, which we mention
-again in \secref{ss:otherplaces}.
-
-What this means in practice is that you must provide some simple
-Fortran routines that perform the actual transfer of data to and from
-files and similar external data stores. The routines you provide are
-supplied as the source and/or sink routine arguments to \htmlref{AST\_CHANNEL}{AST_CHANNEL}
-when you create a Channel (\secref{ss:creatingachannel}). An example is
-the best way to illustrate this.
-
-Consider the following simple subroutine called SOURCE. It reads a
-single line of text from a Fortran I/O unit and then calls
-\htmlref{AST\_PUTLINE}{AST_PUTLINE} to pass it to the AST library, together with its
-length. It sets this length to be negative if there is no more input:
-
-\small
-\begin{verbatim}
-      SUBROUTINE SOURCE( STATUS )
-      INTEGER STATUS
-      CHARACTER * ( 200 ) BUFFER
-
-      READ( 1, '(A)', END = 99 ) BUFFER
-      CALL AST_PUTLINE( BUFFER, LEN( BUFFER ), STATUS )
-      RETURN
-
- 99   CALL AST_PUTLINE( BUFFER, -1, STATUS )      
-      END
-\end{verbatim}
-\normalsize
-
-Our main program might then look something like this (omitting error
-checking for brevity):
-
-\small
-\begin{verbatim}
-      EXTERNAL SOURCE
-
-      ...
-
-*  Open the input file.
-      OPEN( UNIT = 1, FILE = 'infile.ast', STATUS = 'OLD' )
-
-*  Create the Channel and read an Object from it.
-      CHANNEL = AST_CHANNEL( SOURCE, AST_NULL, ' ', STATUS )
-      OBJECT = AST_READ( CHANNEL, STATUS )
-
-      ...
-
-*  Annul the Channel and close the file when done.
-      CALL AST_ANNUL( CHANNEL, STATUS )
-      CLOSE( 1 )
-\end{verbatim}
-\normalsize
-
-Here, we first open the required input file.  We then pass the name of
-our SOURCE routine as the first argument to AST\_CHANNEL when creating
-a new Channel (ensuring that SOURCE also appears in an EXTERNAL
-statement). When we read an \htmlref{Object}{Object} from this Channel using
-\htmlref{AST\_READ}{AST_READ}, the SOURCE routine will be called to obtain the textual
-data from the file, the end-of-file being detected when it yields a
-negative line length.
-
-\subsection{\label{ss:channelsink}Writing Objects to Files}
-
-We can also write a SINK routine, that obtains a line of output text
-from the AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE} and then writes it to a
-file. We can use this in basically the same way as the SOURCE routine
-in the previous section (\secref{ss:channelsource}):
-
-\small
-\begin{verbatim}
-      SUBROUTINE SINK( STATUS )
-      INTEGER L, STATUS
-      CHARACTER * ( 200 ) BUFFER
-
-      CALL AST_GETLINE( BUFFER, L, STATUS )
-      IF ( L .GT. 0 ) WRITE( 2, '(A)' ) BUFFER( : L )
-
-      END
-\end{verbatim}
-\normalsize
-
-In this case, our main program would supply the name of this SINK
-routine as the second argument to \htmlref{AST\_CHANNEL}{AST_CHANNEL} (ensuring that it also
-appears in an EXTERNAL statement), as follows:
-
-\small
-\begin{verbatim}
-      EXTERNAL SINK
-
-      ...
-
-*  Open the output file.
-      OPEN( UNIT = 2, FILE = 'outfile.ast', STATUS = 'NEW' )
-
-*  Create a Channel and write an Object to it.
-      CHANNEL = AST_CHANNEL( SOURCE, SINK, ' ', STATUS )
-      NOBJ = AST_WRITE( CHANNEL, OBJECT, STATUS )
-
-      ...
-
-*  Annul the Channel and close the file when done.
-      CALL AST_ANNUL( CHANNEL, STATUS )
-      CLOSE( 2 )
-\end{verbatim}
-\normalsize
-
-Note that we can specify a source and/or a sink routine for the
-\htmlref{Channel}{Channel}, and that these may use either the same file, or different
-files according to whether we are reading or writing. AST has no
-knowledge of the underlying file system, nor of file positioning. It
-just reads and writes sequentially. If you wish, for example, to
-reposition a file at the beginning in between reads and writes, then
-this can be done directly (and completely independently of AST) using
-standard Fortran statements.
-
-If an error occurs in your source or sink routine, you can communicate
-this to the AST library by setting the STATUS argument to any error
-value. This will immediately terminate the read or write operation.
-
-\subsection{\label{ss:otherplaces}Reading and Writing Objects to other Places}
-
-It should be obvious from the above (\secref{ss:channelsource} and
-\secref{ss:channelsink}) that a \htmlref{Channel}{Channel}'s source and sink routines
-provide a flexible means of intercepting textual data that describes
-AST Objects as it flows in and out of your program. In fact, you might
-like to regard a Channel simply as a filter for converting AST Objects
-to and from a stream of text which is then handled by your source and
-sink routines, where the real I/O occurs.
-
-This gives you the ability to store AST Objects in virtually any data
-system, so long as you can convert a stream of text into something
-that can be stored (it need no longer be text) and retrieve it
-again. There is generally no need to retain comments.  Other
-possibilities, such as inter-process and network communication, could
-also be implemented {\em{via}} source and sink functions in basically
-the same way.
-
-\cleardoublepage
-\section{\label{ss:nativefits}Storing AST Objects in FITS Headers (FitsChans)}
-
-\begin{latexonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-\htmlref{System}{System}
-(FITS). FITS\footnote{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems.  The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{latexonly}
-\begin{htmlonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-System (FITS).
-\htmladdnormallink{FITS}{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems.  The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{htmlonly}
-
-A sequence of FITS cards appears as a header at the start of every
-FITS data file, and sometimes also at other points within it, and is
-used to provide ancillary information which qualifies or describes the
-main array of data stored in the file. As such, FITS headers are prime
-territory for storing information about the coordinate systems
-associated with data held in FITS files.
-
-In this section, we will examine how to store information in FITS
-headers directly in the form of AST Objects---a process which is
-supported by a specialised class of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. Our
-discussion here will turn out to be a transitional step that
-emphasises the similarities between a FitsChan and a Channel
-(\secref{ss:channels}). At the same time, it will prepare us for the
-next section (\secref{ss:foreignfits}), where we will examine how to
-use a FitsChan to tackle some of the more difficult problems that FITS
-headers can present.
-
-\subsection{\label{ss:nativeencoding}The Native FITS Encoding}
-
-As it turns out, we are not the first to have thought of storing WCS
-information in FITS headers. In fact, the original FITS standard (1981
-vintage) defined a set of header keywords for this purpose which have
-been widely used, although they have proved too limited for many
-practical purposes.
-
-At the time of writing, a number of different ways of using FITS
-headers for storing WCS information are in use, most (although not
-all) based on the original standard. We will refer to these
-alternative ways of storing the information as FITS {\em{encodings}}
-but will defer a discussion of their advantages and limitations until
-the next section (\secref{ss:foreignfits}).
-
-Here, we will examine how to store AST Objects directly in FITS
-headers. In effect, this defines a new encoding, which we will term
-the {\em{native encoding.}} This is a special kind of encoding,
-because not only does it allow us to associate conventional
-WCS calibration information with FITS data, but it also allows any other
-information that can be expressed in terms of AST Objects to be stored
-as well.  In fact, the native encoding provides us with facilities
-roughly analogous to those of the \htmlref{Channel}{Channel}
-(\secref{ss:channels})---{\em{i.e.}}\ a lossless way of
-transferring AST Objects from program to program---but based on FITS
-headers instead of free-format text.
-
-\subsection{The FitsChan Model}
-
-I/O between AST Objects and FITS headers is supported by a specialised
-form of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. A FitsChan contains a buffer which
-may hold any number, including zero, of FITS header cards. This buffer
-forms a workspace in which you can assemble FITS cards and manipulate
-them before writing them out to a FITS file.
-
-By default, when a FitsChan is first created, it contains no cards and
-there are four ways of inserting cards into it:
-
-\begin{enumerate}
-\item You may add cards yourself, one at a time, using \htmlref{AST\_PUTFITS}{AST_PUTFITS}
-(\secref{ss:addingfitscards}).
-
-\item You may add cards yourself, supplying all cards concatenated into a
-single string, using \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}.
-(\secref{ss:addingmulticards}).
-
-\item You may write an AST \htmlref{Object}{Object} to the FitsChan (using \htmlref{AST\_WRITE}{AST_WRITE}),
-which will have the effect of creating new cards within the FitsChan
-which describe the Object (\secref{ss:writingnativefits}).
-
-\item You may specify a source routine which reads data from some
-external store of FITS cards, just like the source associated with a
-basic Channel (\secref{ss:channelsource}). If you supply a source
-routine, it will be called when the FitsChan is created in order to
-fill it with an initial set of cards (\secref{ss:fitssourceandsink}).
-\end{enumerate}
-
-There are also three ways of removing cards from a FitsChan:
-
-\begin{enumerate}
-\item You may delete cards yourself, one at a time, using \htmlref{AST\_DELFITS}{AST_DELFITS}
-(\secref{ss:findingandchangingfits}).
-
-\item You may read an AST Object from the FitsChan (using \htmlref{AST\_READ}{AST_READ}),
-which will have the effect of removing those cards from the FitsChan
-which describe the Object (\secref{ss:readingnativefits}).
-
-\item You may specify a sink routine which writes data to some
-external store of FITS cards, just like the sink associated with a
-basic Channel (\secref{ss:channelsink}). If you supply a sink routine,
-it will be called when the FitsChan is deleted in order to write out
-any FITS cards that remain in it (\secref{ss:fitssourceandsink}).
-\end{enumerate}
- 
-Note, in particular, that reading an AST Object from a FitsChan is
-{\em{destructive.}} That is, it deletes the FITS cards that describe the
-Object. The reason for this is explained in
-\secref{ss:destructiveread}.
-
-In addition to the above, you may also read individual cards from a
-FitsChan using the function \htmlref{AST\_FINDFITS}{AST_FINDFITS} (which is not
-destructive). This is the main means of writing out FITS cards if you
-have not supplied a sink routine.  AST\_FINDFITS also provides a means
-of searching for particular FITS cards (by keyword, for example) and
-there are other facilities for overwriting cards when required
-(\secref{ss:findingandchangingfits}).
-
-\subsection{\label{ss:creatingafitschan}Creating a FitsChan}
-
-The \htmlref{FitsChan}{FitsChan} constructor function, \htmlref{AST\_FITSCHAN}{AST_FITSCHAN}, is straightforward
-to use:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER FITSCHAN, STATUS
-
-      STATUS = 0
-
-      ...
-
-      FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, 'Encoding=NATIVE', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, we have omitted any source or sink functions by supplying the
-AST\_NULL routine for the first two arguments (remember to include the
-AST\_PAR include file which contains the required EXTERNAL statement
-for this routine).
-We have also initialised the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. This indicates that we will be using the native encoding
-(\secref{ss:nativeencoding}) to store and retrieve Objects. If this
-was left unspecified, the default would depend on the FitsChan's
-contents. An attempt is made to use whatever encoding appears to have
-been used previously. For an empty FitsChan, the default is NATIVE,
-but it does no harm to be sure.
-
-\subsection{\label{ss:addressingfitscards}Addressing Cards in a FitsChan}
-
-Because a \htmlref{FitsChan}{FitsChan} contains an ordered sequence of header cards, a
-mechanism is needed for addressing them. This allows you to specify
-where new cards are to be added, for example, or which card is to be
-deleted.
-
-This role is filled by the FitsChan's integer \htmlref{Card}{Card} attribute, which
-gives the index of the {\em{current card}} in the FitsChan.  You can
-nominate any card you like to be current, simply by setting a new
-value for the Card attribute, for example:
-
-\small
-\begin{verbatim}
-      INTEGER ICARD
-
-      ...
-
-      CALL AST_SETI( FITSCHAN, 'Card', ICARD, STATUS )
-\end{verbatim}
-\normalsize
-
-where ICARD contains the index of the card on which you wish to
-operate next.  Some functions will update the Card attribute as a
-means of advancing through the sequence of cards, when reading them
-for example, or to indicate which card matches a search criterion.
-
-The default value for Card is one, which is the index of the first
-card. This means that you can ``rewind'' a FitsChan to access its
-first card by clearing the Card attribute:
-
-\small
-\begin{verbatim}
-      CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-\end{verbatim}
-\normalsize
-
-The total number of cards in a FitsChan is given by the integer \htmlref{Ncard}{Ncard}
-attribute. This is a read-only attribute whose value is automatically
-updated as you add or remove cards. It means you can address all the
-cards in sequence using a loop such as the following:
-
-\small
-\begin{verbatim}
-      DO 1 ICARD = 1, AST_GETI( FITSCHAN, 'Ncard', STATUS )
-         CALL AST_SETI( FITSCHAN, 'Card', ICARD, STATUS )
-         <access the current card>
- 1    CONTINUE
-\end{verbatim}
-\normalsize
-
-However, it is usually possible to write slightly tidier loops based
-on the \htmlref{AST\_FINDFITS}{AST_FINDFITS} function described later
-(\secref{ss:extractingfitscards} and
-\secref{ss:findingandchangingfits}).
-
-If you set the Card attribute to a value larger than Ncard, the
-FitsChan is regarded as being positioned at its {\em{end-of-file.}} In
-this case there is no current card and an attempt to obtain a value
-for the Card attribute will always return the value Ncard~$+$~1. When
-a FitsChan is empty, it is always at the end-of-file.
- 
-\subsection{\label{ss:writingnativefits}Writing Native Objects to a FitsChan}
-
-Having created an empty \htmlref{FitsChan}{FitsChan} (\secref{ss:creatingafitschan}), you
-can write any AST \htmlref{Object}{Object} to it in the native encoding using the
-\htmlref{AST\_WRITE}{AST_WRITE} function. Let us assume we are writing a
-\htmlref{SkyFrame}{SkyFrame},\footnote{More probably, you would want to write a \htmlref{FrameSet}{FrameSet},
-but for purposes of illustration a SkyFrame contains a more manageable
-amount of data.} as follows:
-
-\small
-\begin{verbatim}
-      INTEGER NOBJ, SKYFRAME
-
-      ...
-
-      NOBJ = AST_WRITE( FITSCHAN, SKYFRAME, STATUS )
-\end{verbatim}
-\normalsize
-
-Since we have selected the native encoding
-(\secref{ss:nativeencoding}), there are no restrictions on the class
-of Object we may write, so AST\_WRITE should always return a value of
-one, unless an error occurs. Unlike a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}), this write operation will not produce
-any output from our program. The FITS headers produced are simply
-stored inside the FitsChan.
-
-After this write operation, the \htmlref{Ncard}{Ncard} attribute will be updated to
-reflect the number of new cards added to the FitsChan and the \htmlref{Card}{Card}
-attribute will point at the card immediately after the last one
-written. Since our FitsChan was initially empty, the Card attribute
-will, in this example, point at the end-of-file
-(\secref{ss:addressingfitscards}).
-
-The FITS standard imposes a limit of 68 characters on the length of
-strings which may be stored in a single header card. Sometimes, a
-description of an AST Object involves the use of strings which exceed
-this limit ({\em{e.g.}}\ a \htmlref{Frame}{Frame} title can be of arbitrary length). If
-this occurs, the long string will be split over two or more header cards.
-Each ``continuation'' card will have the keyword {\tt CONTINUE} in
-columns 1 to 8, and will contain a space in column 9 (instead of the
-usual equals sign). An ampersand (``{\tt \&}'') is appended to the end of
-each of the strings (except the last one) to indicate that the string is
-continued on the next card. 
-
-
-Note, this splitting of long strings over several cards only occurs when
-writing AST Objects to a FitsChan using the AST\_WRITE routine and the
-{\em native} encoding. If a long string is stored in a FitsChan using
-(for instance) the \htmlref{AST\_PUTFITS}{AST_PUTFITS} or \htmlref{AST\_PUTCARDS}{AST_PUTCARDS} routine, it will simply be truncated.
-
-\subsection{\label{ss:extractingfitscards}Extracting Individual Cards from a FitsChan}
-
-To examine the contents of the \htmlref{FitsChan}{FitsChan} after writing the \htmlref{SkyFrame}{SkyFrame}
-above (\secref{ss:writingnativefits}), we must write a simple loop to
-extract each card in turn and print it out. We must also remember to
-rewind the FitsChan first, {\em{e.g.}}\ using \htmlref{AST\_CLEAR}{AST_CLEAR}. The
-following loop would do:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 80 ) CARD
-
-      ...
-
-      CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-
- 2    CONTINUE
-      IF ( AST_FINDFITS( FITSCHAN, '%f', CARD, .TRUE., STATUS ) ) THEN
-         WRITE ( *, '(A)' ) CARD
-         GO TO 2
-      END IF
-\end{verbatim}
-\normalsize
-
-Here, we have used the \htmlref{AST\_FINDFITS}{AST_FINDFITS} function to find a FITS card by
-keyword. It is given a keyword template of ``\%f'', which matches any
-FITS keyword, so it always finds the current card, which it
-returns. Its fourth argument is set to .TRUE., to indicate that the
-\htmlref{Card}{Card} attribute should be incremented afterwards so that the following
-card will be found the next time around the loop. AST\_FINDFITS
-returns .FALSE.\ when it reaches the end-of-file and this terminates
-the loop.
-
-If we were storing the FITS headers in an output FITS file instead of
-printing them out, we might use a loop like this but replace the WRITE
-statement with a call to a suitable data access routine to store the
-header card. This would only be necessary if we had not provided a
-sink routine for the FitsChan (\secref{ss:fitssourceandsink}).
-
-\subsection{The Native FitsChan Output Format}
-
-If we print out the FITS header cards describing the \htmlref{SkyFrame}{SkyFrame} we wrote
-earlier (\secref{ss:writingnativefits}), we should obtain something
-like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST
-COMMENT AST            Beginning of AST data for SkyFrame object             AST
-COMMENT AST ................................................................ AST
-BEGAST_A= 'SkyFrame'           / Description of celestial coordinate system     
-NAXES_A =                    2 / Number of coordinate axes                      
-AX1_A   = '        '           / Axis number 1                                  
-BEGAST_B= 'SkyAxis '           / Celestial coordinate axis                      
-ENDAST_A= 'SkyAxis '           / End of object definition                       
-AX2_A   = '        '           / Axis number 2                                  
-BEGAST_C= 'SkyAxis '           / Celestial coordinate axis                      
-ENDAST_B= 'SkyAxis '           / End of object definition                       
-ISA_A   = 'Frame   '           / Coordinate system description                  
-SYSTEM_A= 'FK4-NO-E'           / Celestial coordinate system type               
-EPOCH_A =               1958.0 / Besselian epoch of observation                 
-ENDAST_C= 'SkyFrame'           / End of object definition                       
-COMMENT AST ................................................................ AST
-COMMENT AST               End of AST data for SkyFrame object                AST
-COMMENT AST ---------------------------------------------------------------- AST
-\end{verbatim}
-\normalsize
-\end{quote}
-
-As you can see, this resembles the information that would be written
-to a basic \htmlref{Channel}{Channel} to describe the same SkyFrame
-(\secref{ss:textualoutputformat}), except that it has been formatted
-into 80-character header cards according to FITS conventions.
-
-There are also a number of other differences worth noting:
-
-\begin{enumerate}
-\item There is no unnecessary information about default values
-provided for the benefit of the human reader. This is because the \htmlref{Full}{Full}
-attribute for a \htmlref{FitsChan}{FitsChan} defaults to $-$1, thus suppressing this
-information ({\em{c.f.}}~\secref{ss:controllingchanneloutput}). You
-can restore the information if you wish by setting Full to 0 or $+$1,
-in which case additional COMMENT cards will be generated to hold it.
-
-\item The information is not indented, because FITS does not allow
-this. However, if you change the Full attribute to 0 or $+$1, comments
-will be included that are intended to help break up the sequence of
-headers and highlight its structure. This will probably only be of use
-if you are attempting to track down a problem by examining the FITS
-cards produced in detail.
-
-\item The FITS keywords which appear to the left of the ``$=$'' signs
-have additional characters (``\_A'', ``\_B'', {\em{etc.}}) appended to
-them. This is done in order to make each keyword unique.
-\end{enumerate}
-
-This last point is worth further comment and is necessary because the
-FITS standard only allows for certain keywords (such as COMMENT and
-HISTORY) to appear more than once. \htmlref{AST\_WRITE}{AST_WRITE} therefore appends an
-arbitrary sequence of two characters to each new keyword it generates
-in order to ensure that it does not duplicate any already present in
-the FitsChan.
-
-The main risk from not following this convention is that some software
-might ignore (say) all but the last occurrence of a keyword before
-passing the FITS headers on. Such an event is unlikely, but would
-obviously destroy the information present, so AST\_WRITE enforces the
-uniqueness of the keywords it uses. The extra characters added are
-ignored when the information is read back.
-
-As with a basic Channel, you can also suppress the comments produced
-in a FitsChan by setting the boolean (integer) \htmlref{Comment}{Comment} attribute to
-zero (\secref{ss:channelcommenting}). However, FITS headers are
-traditionally generously commented, so this is not recommended.
-
-\subsection{\label{ss:addingfitscards}Adding Individual Cards to a FitsChan}
-
-To insert individual cards into a \htmlref{FitsChan}{FitsChan}, prior to reading them back
-as Objects for example, you should use the \htmlref{AST\_PUTFITS}{AST_PUTFITS} routine. You
-can insert a card in front of the current one as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_PUTFITS( FITSCHAN, CARD, .FALSE., STATUS )
-\end{verbatim}
-\normalsize
-
-where the third argument of .FALSE.\ indicates that the current card
-should not be overwritten. Note that facilities are not provided by
-AST for formatting the card contents.
-
-After inserting a card, the FitsChan's \htmlref{Card}{Card} attribute points at the
-original Card, or at the end-of-file if the FitsChan was originally
-empty. Entering a sequence of cards is therefore straightforward. If
-CARDS is an array of character strings containing FITS header cards
-and NCARDS is the number of cards, then a loop such as the following
-will insert the cards in sequence into a FitsChan:
-
-\small
-\begin{verbatim}
-      INTEGER NCARD
-      CHARACTER * ( 80 ) CARDS( NCARD )
-
-      ...
-
-      DO 3 ICARD = 1, NCARD
-         CALL AST_PUTFITS( FITSCHAN, CARDS( ICARD ), .FALSE., STATUS )
- 3    CONTINUE
-\end{verbatim}
-\normalsize
-
-
-Note that AST\_PUTFITS enforces the validity of a FitsChan by
-rejecting any cards which do not adhere to the FITS standard. If any
-such cards are detected, an error will result.
-
-\subsection{\label{ss:addingmulticards}Adding Concatenated Cards to a FitsChan}
-
-If you have all your cards concatenated together into a single long string, 
-each occupying 80 characters (with no delimiters), you can insert them
-into a \htmlref{FitsChan}{FitsChan} in a single call using
-\htmlref{AST\_PUTCARDS}{AST_PUTCARDS}.
-This call first empties the supplied FitsChan of any existing cards, then 
-inserts the new cards, and finally rewinds the FitsChan so that a
-subsequent call to 
-\htmlref{AST\_READ}{AST_READ}
-will start reading from the first supplied card. The
-AST\_PUTCARDS routine uses \htmlref{AST\_PUTFITS}{AST_PUTFITS}
-internally to interpret and store each individual card, and so the
-caveats in \secref{ss:addingfitscards} should be read.
-
-
-\subsection{\label{ss:readingnativefits}Reading Native Objects From a FitsChan}
-
-Once you have stored a FITS header description of an \htmlref{Object}{Object} in a
-\htmlref{FitsChan}{FitsChan} using the native encoding (\secref{ss:writingnativefits}),
-you can read it back using \htmlref{AST\_READ}{AST_READ} in much the same way as with a
-basic \htmlref{Channel}{Channel} (\secref{ss:readingfromachannel}). Similar comments
-about validating the Object you read also apply
-(\secref{ss:validatinginput}).  If you have just written to the
-FitsChan, you must remember to rewind it first:
-
-\small
-\begin{verbatim}
-      INTEGER OBJECT
-
-      ...
-
-      CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-      OBJECT = AST_READ( FITSCHAN, STATUS )
-\end{verbatim}
-\normalsize
-
-An important feature of a FitsChan is that read operations are
-destructive. This means that if an Object description is found, it
-will be consumed by AST\_READ which will remove all the cards
-involved, including associated COMMENT cards, from the FitsChan. Thus,
-if you write an Object to a FitsChan, rewind, and read the same Object
-back, you should end up with the original FitsChan contents.  If you
-need to circumvent this behaviour for any reason, it is a simple
-matter to make a copy of a FitsChan using \htmlref{AST\_COPY}{AST_COPY}
-(\secref{ss:copyingobjects}). If you then read from the copy, the
-original FitsChan will remain untouched.
-
-After a read completes, the FitsChan's \htmlref{Card}{Card} attribute identifies the
-card immediately following the last card read, or the end-of-file of
-there are no more cards.
-
-
-Since the {\em native} encoding is being used, any long strings involved
-in the object description will have been split into two or more adjacent
-contuation cards when the Object was stored in the header using routine
-\htmlref{AST\_WRITE}{AST_WRITE}. The AST\_READ routine reverses this process by concatenating
-any such adjacent continuation cards to re-create the original long
-string.
-
-\subsection{Saving and Restoring Multiple Objects in a FitsChan}
-
-When using the native FITS encoding, multiple Objects may be stored
-and all I/O operations are sequential.  This means that you can simply
-write a sequence of Objects to a \htmlref{FitsChan}{FitsChan}. After each write operation,
-the \htmlref{Card}{Card} attribute will be updated so that the next write appends the
-next \htmlref{Object}{Object} description to the previous one.
-
-If you then rewind the FitsChan, you can read the Objects back in the
-original order. Reading them back will, of course, remove their
-descriptions from the FitsChan (\secref{ss:readingnativefits}) but the
-behaviour of the Card attribute is such that successive reads will
-simply return each Object in sequence.
-
-The only thing that may require care, given that a FitsChan can always
-be addressed randomly by setting its Card attribute, is to avoid
-writing one Object on top of another. For obvious reasons, the Object
-descriptions in a FitsChan must remain separate if they are to make
-sense when read back.
-
-\subsection{Mixing Native Objects with Other FITS Cards}
-
-Of course, any real FITS header will contain other information besides
-AST Objects, if only the mandatory FITS cards that must accompany all
-FITS data. When FITS headers are read in from a real dataset,
-therefore, any native AST \htmlref{Object}{Object} descriptions will be inter-mixed with
-many other cards.
-
-Because this is the normal state of affairs, the boolean (integer)
-\htmlref{Skip}{Skip} attribute for a \htmlref{FitsChan}{FitsChan} defaults to one. This means that when
-you read an Object From a FitsChan, any irrelevant cards will simply
-be skipped over until the start of the next Object description, if
-any, is found. If you start reading part way through an Object
-description, no error will result. The remainder of the description
-will simply be skipped.
-
-Setting Skip to zero will change this behaviour to resemble that of a
-basic \htmlref{Channel}{Channel} (\secref{ss:mixingchanneltext}), where extraneous data
-are not permitted by default, but this will probably rarely be useful.
-
-\subsection{\label{ss:findingandchangingfits}Finding and Changing Cards in a FitsChan}
-
-You can search for, and retrieve, particular cards in a \htmlref{FitsChan}{FitsChan} by
-keyword, using the function \htmlref{AST\_FINDFITS}{AST_FINDFITS}. This performs a search,
-starting at the current card, until it finds a card whose keyword
-matches the template you supply, or the end-of-file is reached.
-
-If a suitable card is found, AST\_FINDFITS returns the card's contents
-and then sets the FitsChan's \htmlref{Card}{Card} attribute either to identify the
-card found, or the one following it. The way you want the Card
-attribute to be set is indicated by the fourth (logical) argument to
-AST\_FINDFITS. A value of .TRUE.\ is returned to indicate success.  If
-a suitable card cannot be found, AST\_FINDFITS returns a value of
-.FALSE.\ to indicate failure and sets the FitsChan's Card attribute to
-the end-of-file.
-
-Requesting that the Card attribute be set to indicate the card that
-AST\_FINDFITS finds is useful if you want to replace that card with a
-new one, as in this example:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 80 ) NEWCARD
-      LOGICAL JUNK
-
-      ...
-
-      JUNK = AST_FINDFITS( FITSCHAN, 'AIRMASS', CARD, .FALSE., STATUS )
-      CALL AST_PUTFITS( FITSCHAN, NEWCARD, .TRUE., STATUS )
-\end{verbatim}
-\normalsize
-
-Here, AST\_FINDFITS is used to search for a card with the keyword
-AIRMASS. If the card is found, \htmlref{AST\_PUTFITS}{AST_PUTFITS} then overwrites it with a
-new card.  Otherwise, the Card attribute ends up pointing at the
-end-of-file and the new card is simply appended to the end of the
-FitsChan.
-
-A similar approach can be used to delete selected cards from a
-FitsChan using \htmlref{AST\_DELFITS}{AST_DELFITS}, which deletes the current card:
-
-\small
-\begin{verbatim}
-      IF ( AST_FINDFITS( FITSCHAN, 'BSCALE', CARD, .FALSE., STATUS ) ) THEN
-         CALL AST_DELFITS( FITSCHAN, STATUS )
-      END IF
-\end{verbatim}
-\normalsize
-
-This deletes the first card, if any, with the BSCALE keyword.
-
-Requesting that AST\_FINDFITS increments the Card attribute to
-identify the card following the one found is more useful when writing
-loops.  For example, the following loop extracts each card whose
-keyword matches the template ``CD\%6d'' (that is, ``CD'' followed by
-six decimal digits):
-
-\small
-\begin{verbatim}
- 4    CONTINUE
-      IF ( AST_FINDFITS( FITSCHAN, 'CD%6d', CARD, .TRUE., STATUS ) ) THEN
-         <process the card's contents>
-         GO TO 4
-      END IF
-\end{verbatim}
-\normalsize
-
-For further details of keyword templates, see the description of
-AST\_FINDFITS in \appref{ss:functiondescriptions}.
-
-\subsection{\label{ss:fitssourceandsink}Source and Sink Routines for FitsChans}
-
-The use of source and sink routines with a \htmlref{FitsChan}{FitsChan} is optional. This
-is because you can always arrange to explicitly fill a FitsChan with
-FITS cards (\secref{ss:addingfitscards} and \secref{ss:addingmulticards}) 
-and you can also extract any
-cards that remain and write them out yourself
-(\secref{ss:extractingfitscards}) before you delete the FitsChan.
-
-If you choose to use these routines, however, they behave in a very
-similar manner to those used by a \htmlref{Channel}{Channel} (\secref{ss:channelsource}
-and \secref{ss:channelsink}). You supply these routines, as arguments
-to the constructor function \htmlref{AST\_FITSCHAN}{AST_FITSCHAN} when you create the FitsChan
-(\secref{ss:creatingafitschan}). The source routine is invoked
-implicitly at this point to fill the FitsChan with FITS cards and the
-FitsChan is then rewound, so that the first card becomes current. The
-sink routine is automatically invoked later, when the FitsChan is
-deleted, in order to write out any cards that remain in it.
-
-
-The only real difference between the source and sink routines for a
-FitsChan and a basic Channel is that FITS cards are limited in length
-to 80~characters, so the choice of buffer size is simplified.  This
-affects the way the card contents are passed, so the routines
-themselves are slightly different.  The following is therefore the
-FitsChan equivalent of the Channel SOURCE routine given in
-\secref{ss:channelsource}:
-
-\small
-\begin{verbatim}
-      INTEGER FUNCTION FITSSOURCE( CARD, STATUS )
-      CHARACTER * ( 80 ) CARD
-      INTEGER STATUS
-
-      READ( 1, '(A)', END = 99 ) CARD
-      FITSSOURCE = 1
-      RETURN
-
- 99   FITSSOURCE = 0
-      END
-\end{verbatim}
-\normalsize
-
-Here, the FITS card contents are returned {\em{via}} the CARD argument
-(the \htmlref{AST\_PUTLINE}{AST_PUTLINE} routine should not be used) and the function returns
-1 to indicate that a card has been read. A value of zero is returned
-if there are no more cards to read.
-
-The sink routine for a FitsChan is also a little different
-({\em{c.f.}}\ the SINK routine in~\secref{ss:channelsink}), as
-follows:
-
-\small
-\begin{verbatim}
-      SUBROUTINE FITSSINK( CARD, STATUS )
-      CHARACTER * ( 80 ) CARD
-      INTEGER STATUS
-
-      WRITE( 2, '(A)' ) CARD
-
-      END
-\end{verbatim}
-\normalsize
-
-The contents of the FITS card being written are passed {\em{via}}\ the
-CARD argument (the \htmlref{AST\_GETLINE}{AST_GETLINE} routine should not be used).
-
-Of course, both of these examples assume that you are accessing text
-files. If this is not the case, then appropriate changes to the I/O
-statements would be needed.  The details obviously depend on the
-format of the file you are handling, which need not necessarily be a
-true FITS file.
-
-\cleardoublepage
-\section{\label{ss:foreignfits}Using Foreign FITS Encodings}
-
-We saw in the previous section (\secref{ss:nativefits}) how to store
-and retrieve any kind of AST \htmlref{Object}{Object} in a FITS header by using a
-\htmlref{FitsChan}{FitsChan}. To achieve this, we set the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. However, the Objects we wrote could then only be read back by
-other programs that use AST.
-
-In practice, we will also encounter FITS headers containing WCS
-information written by other software systems.  We will probably also
-need to write FITS headers in a format that can be understood by these
-systems. Indeed, this interchange of data is one of the main reasons
-for the existence of FITS, so in this section we will examine how to
-accommodate these requirements.
-
-\subsection{\label{ss:foreignencodings}The Foreign FITS Encodings}
-
-As mentioned previously (\secref{ss:nativeencoding}), there are a
-number of conventions currently in use for storing WCS information in
-FITS headers, which we call {\em{encodings.}} Here, we are concerned
-with those encodings defined by software systems other than AST, which
-we term {\em{foreign encodings.}}
-
-Currently, AST supports six foreign encodings, which may be selected
-by setting the \htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan} to one of the
-following (character string) values:
-
-\begin{quote}
-\begin{description}
-\item[DSS]\mbox{}\\
-This encoding stores WCS information using the convention developed at
-the Space Telescope Science Institute for the Digitised Sky Survey
-(DSS) astrometric plate calibrations.  DSS images which use this
-convention are widely available and it is understood by a number of
-important and well-established astronomy applications.
-
-However, the calibration model used (based on a polynomial fit) is not
-easily applicable to other types of data and creating the polynomial
-coefficients needed to calibrate your own images can prove
-difficult. For this reason, the DSS encoding is probably best viewed
-as a ``read-only'' format. It is possible, however, to read in WCS
-information using this encoding and then to write it back out again,
-so long as only minor changes have been made.
-
-\item[FITS-WCS]\mbox{}\\
-This encoding is very important because it is based on a new FITS standard 
-which should, for the first time, address the problem of celestial coordinate 
-systems in a proper manner, by considerably extending the original FITS 
-standard.
-
-The conventions used are described in a series of papers by
-E.W.\,Greisen, M.\,Calabretta, \emph{et. al.}, often referred to as the
-``FITS-WCS papers''. They are described at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. Now that the first two papers
-in this series have been agreed, this encoding should be understood by any 
-FITS-WCS compliant software and it is likely to be adopted widely for FITS 
-data in future.  For details of the coverage of these conventions provided
-by the FitsChan class, see \appref{ss:fitswcscoverage}.
-
-\item[FITS-IRAF]\mbox{}\\
-This encoding is based on the conventions described in the document
-``World Coordinate Systems Representations Within the FITS Format'' by R.J.
-Hanisch and D.G. Wells, 1988.\footnote{Available by ftp from
-fits.cv.nrao.edu /fits/documents/wcs/wcs88.ps.Z} It is employed
-by the IRAF data analysis facility, so its use will facilitate data
-exchange with IRAF. This encoding is in effect a sub-set of the current
-FITS-WCS encoding.
-
-\item[FITS-PC]\mbox{}\\
-This encoding is based on a previous version of the proposed new FITS WCS
-standard which used {\tt PCjjjjiii} and {\tt CDELTj} keywords to describe
-axis rotation and scaling. Versions of AST prior to V1.5 used this scheme
-for the FITS-WCS encoding. As of V1.5, FITS-WCS uses {\tt CDi\_j}
-keywords instead.\footnote{There are many other differences between the
-previous and the current FITS-WCS encodings. The keywords to describe
-axis rotation and scaling is used purely as a label to identify the
-scheme.} The FITS-PC encoding is included in AST V1.5 only to allow
-FITS-WCS data created with previous versions to be read. It should not,
-in general, be used to create new data sets.
-
-\item[FITS-AIPS]\mbox{}\\
-This encoding is based on the conventions described in the document
-``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen (revised 9th
-September, 1994).\footnote{Available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z} It is currently employed by the AIPS
-data analysis facility, so its use will facilitate data exchange with
-AIPS. This encoding uses {\tt CROTAi} and {\tt CDELTi} keywords to
-describe axis rotation and scaling.
-
-\item[FITS-AIPS++]\mbox{}\\
-Encodes coordinate system information in FITS
-header cards using the conventions used by the AIPS++ project.
-This is an extension of FITS-AIPS which includes some of the
-features of FITS-PC and FITS-IRAF.
-\end{description}
-\end{quote}
-
-For more detail about the above encodings, see the description of the
-Encoding attribute in \appref{ss:attributedescriptions}. 
-
-\subsection{\label{ss:foreignfitslimitations}Limitations of Foreign Encodings}
-
-The foreign encodings available for storing WCS information in FITS
-headers have a number of limitations when compared with the native
-encoding of AST Objects (\secref{ss:nativefits}). The main ones are:
-
-\begin{enumerate}
-\item Only one class of AST \htmlref{Object}{Object}, the \htmlref{FrameSet}{FrameSet}, may be represented
-using a foreign FITS encoding. This should not come as a surprise,
-because the purpose of storing WCS information in FITS headers is to
-attach coordinate systems to an associated array of data. Since the
-FrameSet is the AST Object designed for the same purpose
-(\secref{ss:baseandcurrent}), there is a natural correspondence.
-
-The way in which a FrameSet is translated to and from the foreign
-encoding also follows from this correspondence. The FrameSet's base
-\htmlref{Frame}{Frame} identifies the data grid coordinates of the associated FITS
-data. These are the same as FITS pixel coordinates, in which the first
-pixel (in 2 dimensions) has coordinates (1,1) at its
-centre. Similarly, the current Frame of the FrameSet identifies the
-FITS world coordinate system associated with the data.
-
-\item You may store a representation of only a single FrameSet in any
-individual set of FITS header cards ({\em{i.e.}}\ in a single
-\htmlref{FitsChan}{FitsChan}) at one time. If you attempt to store more than one, you may
-over-write the previous one or generate an invalid representation of
-your WCS information.
-
-This is mainly a consequence of the use of fixed FITS keywords by
-foreign encodings and the fact that you cannot, in general, have
-multiple FITS cards with the same keyword.
-
-\item In general, it will not be possible to store every possible
-FrameSet that you might construct. Depending on the encoding, only
-certain FrameSets that conform to particular restrictions can be
-represented and, even then, some of their information may be lost. See
-the description of the \htmlref{Encoding}{Encoding} attribute in
-\appref{ss:attributedescriptions} for more details of these
-limitations.
-\end{enumerate}
-
-It should be understood that using foreign encodings to read and write
-information held in AST Objects is essentially a process of converting
-the data format. As such, it potentially suffers from the same
-problems faced by all such processes, {\em{i.e.}}\ differences between
-the AST data model and that of the foreign encoding may cause some
-information to be lost.  Because the AST model is extremely flexible,
-however, any data loss can largely be eliminated when reading.
-Instead, this effect manifests itself in the form of the above
-encoding-dependent restrictions on the kind of AST Objects which may
-be written.
-
-One of the aims of the AST library, of course, is to insulate you from
-the details of these foreign encodings and the restrictions they
-impose. We will see shortly, therefore, how AST provides a mechanism
-for determining whether your WCS information satisfies the necessary
-conditions and allows you to make an automatic choice of which
-encoding to use.
-
-\subsection{\label{ss:identifyingfitsencoding}Identifying Foreign Encodings on Input}
-
-Let us now examine the practicalities of extracting WCS information
-from a set of FITS header cards which have been written by some other
-software system. We will pretend that our program does not know which
-encoding has been used for the WCS information and must discover this
-for itself. In order to have a concrete example, however, we will use
-the following set of cards. These use the FITS-AIPS encoding and
-contain a typical mix of other FITS cards which are irrelevant to the
-WCS information in which we are interested:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE  =                    T / Written by IDL:  30-Jul-1997 05:35:42.00
-BITPIX  =                  -32 / Bits per pixel.
-NAXIS   =                    2 / Number of dimensions
-NAXIS1  =                  300 / Length of x axis.
-NAXIS2  =                  300 / Length of y axis.
-CTYPE1  = 'GLON-ZEA'           / X-axis type
-CTYPE2  = 'GLAT-ZEA'           / Y-axis type
-CRVAL1  =           -149.56866 / Reference pixel value
-CRVAL2  =           -19.758201 / Reference pixel value
-CRPIX1  =              150.500 / Reference pixel
-CRPIX2  =              150.500 / Reference pixel
-CDELT1  =             -1.20000 / Degrees/pixel
-CDELT2  =              1.20000 / Degrees/pixel
-CROTA1  =              0.00000 / Rotation in degrees.
-SURVEY  = 'COBE DIRBE'
-BUNITS  = 'MJy/sr  '           /
-ORIGIN  = 'CDAC    '           / Cosmology Data Analysis Center
-TELESCOP= 'COBE    '           / COsmic Background Explorer satellite
-INSTRUME= 'DIRBE   '           / COBE instrument [DIRBE, DMR, FIRAS]
-PIXRESOL=                    9 / Quad tree pixel resolution [6, 9]
-DATE    = '27/09/94'           / FITS file creation date (dd/mm/yy)
-DATE-MAP= '16/09/94'           / Date of original file creation (dd/mm/yy)
-COMMENT     COBE specific keywords
-DATE-BEG= '08/12/89'           / date of initial data represented (dd/mm/yy)
-DATE-END= '25/09/90'           / date of final data represented   (dd/mm/yy)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first step is to create a \htmlref{FitsChan}{FitsChan} and insert these cards into
-it. If CARDS is an array of character strings holding the header cards
-and NCARDS is the number of cards, this could be done as follows:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER FITSCHAN, ICARD, NCARD, STATUS
-      CHARACTER * ( 80 ) CARDS( NCARD )
-
-      STATUS = 0
-
-      ...
-
-      FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, ' ', STATUS )
-      DO 1 ICARD = 1, NCARD
-         CALL AST_PUTFITS( FITSCHAN, CARDS( ICARD ), .FALSE., STATUS )
- 1    CONTINUE
-\end{verbatim}
-\normalsize
-
-Note that we have not initialised the \htmlref{Encoding}{Encoding} attribute of the
-FitsChan as we did in \secref{ss:creatingafitschan} when we wanted to
-use the native encoding. This is because we are pretending not to know
-which encoding to use and want AST to determine this for us. By
-leaving the Encoding attribute un-set, its default value will adjust
-to whichever encoding AST considers to be most appropriate, according
-to the FITS header cards present. For details of how this choice is
-made, see the description of the Encoding attribute in
-\appref{ss:attributedescriptions}.
-
-This approach has the obvious advantages of making our program simpler
-and more flexible and of freeing us from having to know about the
-different encodings available. As a bonus, it also means that the
-program will be able to read any new encodings that AST may support in
-future, without needing to be changed.
-
-At this point, we could enquire the default value of the Encoding
-attribute, which indicates which encoding AST intends to use, as
-follows:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 20 ) ENCODE
-
-      ...
-
-      ENCODE = AST_GETC( FITSCHAN, 'Encoding', STATUS )
-\end{verbatim}
-\normalsize
-
-The result of this enquiry would be the string ``FITS-AIPS''.  Note
-that we could also have set the FitsChan's Encoding attribute
-explicitly, such as when creating it:
-
-\small
-\begin{verbatim}
-      FITSCHAN = AST_FITSCHAN( AST_NULL, AST_NULL, 'Encoding=FITS-AIPS', STATUS )
-\end{verbatim}
-\normalsize
-
-If we tried to read information using this encoding
-(\secref{ss:readingforeignfits}), but failed, we could then change the
-encoding and try again.  This would allow our program to take control
-of how the optimum choice of encoding is arrived at. However, it would
-also involve using explicit knowledge of the encodings available and
-this is best avoided if possible.
-
-\subsection{\label{ss:readingforeignfits}Reading Foreign WCS Information from a FITS Header}
-
-Having stored a set of FITS header cards in a \htmlref{FitsChan}{FitsChan} and determined
-how the WCS information is encoded
-(\secref{ss:identifyingfitsencoding}), the next step is to read an AST
-\htmlref{Object}{Object} from the FitsChan using \htmlref{AST\_READ}{AST_READ}. We must also remember to
-rewind the FitsChan first, if necessary, such as by clearing its \htmlref{Card}{Card}
-attribute, which defaults to 1:
-
-\small
-\begin{verbatim}
-      INTEGER WCSINFO
-
-      ...
-
-      CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
-      WCSINFO = AST_READ( FITSCHAN, STATUS )
-\end{verbatim}
-\normalsize
-
-If the pointer returned by AST\_READ is not equal to AST\_\_NULL, then
-an Object has been read successfully. Otherwise, there was either no
-information to read or the choice of FITS encoding
-(\secref{ss:identifyingfitsencoding}) was inappropriate.
-
-At this point you might like to indulge in a little data validation
-along the lines described in \secref{ss:validatinginput}, for example:
-
-\small
-\begin{verbatim}
-      IF ( AST_GETC( WCSINFO, 'Class', STATUS ) .EQ. 'FrameSet' ) THEN
-         <the Object is a FrameSet, so use it>
-      ELSE
-         <something unexpected was read>
-      END IF
-\end{verbatim}
-\normalsize
-
-If a foreign encoding has definitely been used, then the Object will
-automatically be a \htmlref{FrameSet}{FrameSet} (\secref{ss:foreignfitslimitations}), so
-this stage can be omitted. However, if the native encoding
-(\secref{ss:nativeencoding}) might have been employed, which is a
-possibility if you accept the FitsChan's default \htmlref{Encoding}{Encoding} value, then
-any class of Object might have been read and a quick check would be
-worthwhile.
-
-If you used \htmlref{AST\_SHOW}{AST_SHOW} (\secref{ss:displayingobjects}) to examine the
-FrameSet which results from reading our example FITS header
-(\secref{ss:identifyingfitsencoding}), you would find that its base
-\htmlref{Frame}{Frame} describes the image's pixel coordinate system and that its
-current Frame is a \htmlref{SkyFrame}{SkyFrame} representing galactic coordinates. These
-two Frames are inter-related by a \htmlref{Mapping}{Mapping} (actually a \htmlref{CmpMap}{CmpMap}) which
-incorporates the effects of various rotations, scalings and a
-``zenithal equal area'' sky projection, so that each pixel of the FITS
-image is mapped on to a corresponding sky position in galactic
-coordinates.
-
-Because this FrameSet may be used both as a Mapping
-(\secref{ss:framesetasmapping}) and as a Frame
-(\secref{ss:framesetasframe}), it may be employed directly to perform
-many useful operations without any need to decompose it into its
-component parts. These include:
-
-\begin{itemize}
-\item Transforming data grid (FITS pixel) coordinates into galactic
-coordinates and {\em{vice versa}} (\secref{ss:framesetasmapping}).
-
-\item Formatting coordinate values (either pixel or galactic
-coordinates) ready for display to a user
-(\secref{ss:formattingaxisvalues} and \secref{ss:normalising}).
-
-\item Enquiring about axis labels (or other axis
-information---\secref{ss:frameattributes}) which might be used, for
-example, to label columns of coordinates in a table
-(\secref{ss:frameaxisattributes}).
-
-\item Aligning the image with another image from which a similar
-FrameSet has been obtained (\secref{ss:registeringimages}).
-
-\item Creating a \htmlref{Plot}{Plot} (\secref{ss:plots}), which can be used to overlay
-a variety of graphical information (including a coordinate
-grid---Figure~\ref{fig:gridplot}) on the displayed image.
-
-\item Generating a new FrameSet which reflects any geometrical
-processing you perform on the associated image data
-(\secref{ss:wcsprocessingexample}). This new FrameSet could then be
-written out as FITS headers to describe the modified image
-(\secref{ss:writingforeignfits}).
-\end{itemize}
-
-If the FrameSet contains other Frames (apart from the base and current
-Frames), then you would also have access to information about other
-coordinate systems associated with the image.
-
-\subsection{\label{ss:destructiveread}Removing WCS Information from FITS Headers---the Destructive Read}
-
-It is instructive at this point to examine the contents of a \htmlref{FitsChan}{FitsChan}
-after we have read a \htmlref{FrameSet}{FrameSet} from it
-(\secref{ss:readingforeignfits}). The following would rewind our
-FitsChan and display its contents:
-
-\small
-\begin{verbatim}
-      CHARACTER CARD * ( 80 )
-
-      ...
-
-      CALL AST_CLEAR( FITSCHAN, 'Card', STATUS )
- 2    CONTINUE
-      IF ( AST_FINDFITS( FITSCHAN, '%f', CARD, .TRUE., STATUS ) ) THEN
-         WRITE ( *, '(A)' ) CARD
-         GO TO 2
-      END IF
-\end{verbatim}
-\normalsize
-
-The output, if we started with the example FITS header in
-\secref{ss:identifyingfitsencoding}, might look like this:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE  =                    T /  Written by IDL:  30-Jul-1997 05:35:42.00      
-BITPIX  =                  -32 /  Bits per pixel.                               
-NAXIS   =                    2 /  Number of dimensions                          
-NAXIS1  =                  300 /  Length of x axis.                             
-NAXIS2  =                  300 /  Length of y axis.                             
-SURVEY  = 'COBE DIRBE'                                                          
-BUNITS  = 'MJy/sr  '                                                            
-ORIGIN  = 'CDAC    '           /  Cosmology Data Analysis Center                
-TELESCOP= 'COBE    '           /  COsmic Background Explorer satellite          
-INSTRUME= 'DIRBE   '           /  COBE instrument [DIRBE, DMR, FIRAS]           
-PIXRESOL=                    9 /  Quad tree pixel resolution [6, 9]             
-DATE    = '27/09/94'           /  FITS file creation date (dd/mm/yy)            
-DATE-MAP= '16/09/94'           /  Date of original file creation (dd/mm/yy)     
-COMMENT     COBE specific keywords                                              
-DATE-BEG= '08/12/89'           /  date of initial data represented (dd/mm/yy)   
-DATE-END= '25/09/90'           /  date of final data represented   (dd/mm/yy)   
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Comparing this with the original, you can see that all the FITS cards
-that represent WCS information have been removed. They have
-effectively been ``sucked out'' of the FitsChan by the destructive
-read that \htmlref{AST\_READ}{AST_READ} performs and converted into an equivalent
-FrameSet. AST remembers where they were stored, however, so that if we
-later write WCS information back into the FitsChan
-(\secref{ss:writingforeignfits}) they will, as far as possible, go
-back into their original locations.  This helps to preserve the
-overall layout of the FITS header.
-
-You can now see why AST\_READ performs destructive reads. It is a
-mechanism for removing WCS information from a FITS header while
-insulating you, as a programmer, from the details of the encoding
-being used. It means you can ensure that all relevant header cards
-have been removed, giving you a clean slate, without having to know
-which FITS keywords any particular encoding uses.
-
-Clearing this WCS information out of a FITS header is particularly
-important when considering how to write new WCS information back after
-processing (\secref{ss:writingforeignfits}). If any relevant FITS
-cards are left over from the input dataset and find their way into the
-new processed header, they could interfere with the new information
-being written.\footnote{This can happen if a particular keyword is
-present in the input header but is not used in the output header
-(whether particular keywords are used can depend on the WCS
-information being stored). In such a case, the original value would
-not be over-written by a new output value, so would remain erroneously
-present.} The destructive read mechanism ensures that this doesn't
-happen.
-
-\subsection{\label{ss:propagatingwcsinformation}Propagating WCS Information through Data Processing Steps}
-
-One of the purposes of AST is to make it feasible to propagate WCS
-information through successive stages of data processing, so that it
-remains consistent with the associated image data. As far as possible,
-this should happen regardless of the FITS encoding used to store the
-original WCS information.
-
-If the data processing being performed does not change the
-relationship between image pixel and world coordinates (whatever these
-may be), then propagation of the WCS information is
-straightforward. You can simply copy the FITS header from input to
-output.
-
-If this relationship changes, however, then the WCS information must
-be processed alongside the image data and a new FITS header generated
-to represent it. In this case, the sequence of operations within your
-program would probably be as follows:
-
-\begin{enumerate}
-\item Read the image data and associated FITS header from the input
-dataset, putting the header cards into a \htmlref{FitsChan}{FitsChan}
-(\secref{ss:identifyingfitsencoding}).
-
-\item Read an AST \htmlref{Object}{Object}, a \htmlref{FrameSet}{FrameSet}, from the FitsChan (typically
-using a foreign FITS encoding---\secref{ss:readingforeignfits}).
-
-\item Process the image data and modify the FrameSet accordingly
-({\em{e.g.}}~\secref{ss:wcsprocessingexample}).
-
-\item Write the FrameSet back into the FitsChan
-(\secref{ss:writingforeignfits}).
-
-\item Perform any other modification of FITS header cards your program
-may require.
-
-\item Write the FitsChan contents ({\em{i.e.}}\ processed header
-cards) and image data to the output dataset.
-\end{enumerate}
-
-In stage (2), the original WCS information will be removed from the
-FitsChan by a destructive read. Later, in stage (4), new WCS
-information is written to replace it. This is the process which we
-consider next (\secref{ss:writingforeignfits}).
-
-\subsection{\label{ss:writingforeignfits}Writing Foreign WCS Information to a FITS Header}
-
-Before we can write processed WCS information held in a \htmlref{FrameSet}{FrameSet} back
-into a \htmlref{FitsChan}{FitsChan} in preparation for output, we must select the FITS
-encoding to use.  Unfortunately, we cannot simply depend on the
-default value of the \htmlref{Encoding}{Encoding} attribute, as we did when reading the
-input information (\secref{ss:identifyingfitsencoding}), because the
-destructive action of reading the WCS data
-(\secref{ss:destructiveread}) will have altered the FitsChan's
-contents. This, in turn, will have changed the choice of default
-encoding, probably causing it to revert to NATIVE.
-
-We will return to the question of the optimum choice of encoding
-below.  For now, let's assume we want to use the same encoding for
-output as we used for input. Since we enquired what that was before we
-read the input WCS data from the FitsChan
-(\secref{ss:identifyingfitsencoding}), we can now set that value
-explicitly. We can also set the FitsChan's \htmlref{Card}{Card} attribute back to 1 at
-the same time (because the write will fail if the FitsChan is not
-rewound). \htmlref{AST\_WRITE}{AST_WRITE} can then be used to write the output WCS
-information into the FitsChan:
-
-\small
-\begin{verbatim}
-      INTEGER NOBJ
-
-      ...
-
-
-      CALL AST_SET( FITSCHAN, 'Card=1, Encoding=' // ENCODE, STATUS )
-      NOBJ = AST_WRITE( FITSCHAN, WCSINFO, STATUS )
-\end{verbatim}
-\normalsize
-
-The value returned by AST\_WRITE (assigned to NOBJ) indicates how many
-Objects were written. This will either be 1 or zero. A value of zero
-is used to indicate that the information could not be encoded in the
-form you requested. If this happens, nothing will have been written.
-
-If your choice of encoding proves inadequate, the probable reason is
-that the changes you have made to the FrameSet have caused it to
-depart from the data model which the encoding assumes.  AST knows
-about the data model used by each encoding and will attempt to
-simplify the FrameSet you provide so as to fit into that model, thus
-relieving you of the need to understand the details and limitations of
-each encoding yourself. When this attempt fails, however, you must
-consider what alternative encoding to use.
-
-Ideally, you would probably want to try a sequence of alternative
-encodings, using an approach such as the following:
-
-\small
-\begin{verbatim}
-*  1.
-      CALL AST_SET( FITSCHAN, 'Card=1, Encoding=FITS-WCS', STATUS )
-      IF ( AST_WRITE( FITSCHAN, WCSINFO, STATUS ) .EQ. 0 ) THEN
-
-*  2.
-         CALL AST_SETC( FITSCHAN, 'Encoding', ENCODE, STATUS )
-         IF ( AST_WRITE( FITSCHAN, WCSINFO, STATUS ) .EQ. 0 ) THEN
-
-*  3.
-            CALL AST_SET( FITSCHAN, 'Encoding=NATIVE', STATUS )
-            NOBJ = AST_WRITE( FITSCHAN, WCSINFO, STATUS )
-         END IF
-      END IF
-\end{verbatim}
-\normalsize
-
-That is:
-
-\begin{enumerate}
-\item Start by trying the FITS-WCS encoding, on the grounds that FITS
-should provide a universal interchange standard in which all WCS
-information should be expressed if possible. 
-
-\item If that fails, then try the original encoding used for the input
-WCS information, on the grounds that you are at least not making the
-information any harder for others to read than it originally was.
-
-\item If that also fails, then you are probably trying to store fairly
-complex information for which you need the native encoding. Only other
-AST programs will then be able to read this information, but these are
-probably the only programs that will be able to do anything sensible
-with it anyway.
-\end{enumerate}
-
-An alternative approach might be to encode the WCS information in several
-ways, since this gives the maximum chance that other software will be
-able to read it. This approach is only possible if there is no
-significant conflict between the FITS keywords used by the different
-encodings\footnote{In practice, this means you should avoid mixing
-FITS-IRAF, FITS-WCS, FITS-AIPS, FITS-AIPS++ and FITS-PC encodings since they share
-many keywords.}.  Adopting this approach would simply require multiple
-calls to AST\_WRITE, rewinding the FitsChan and changing its Encoding value
-before each one.
-
-Unfortunately, however, there is a drawback to duplicating WCS
-information in the FITS header in this way, because any program which
-modifies one version of this information and simply copies the
-remainder of the header will risk producing two inconsistent sets of
-information. This could obviously be confusing to subsequent
-software. Whether you consider this a worthwhile risk probably depends
-on the use to which you expect your data to be put.
-
-\cleardoublepage
-\section{\label{ss:xmlchan}Storing AST Objects as XML (XmlChan)}
-
-\begin{latexonly}
-XML\footnote{http://www.w3.org/XML/}
-\end{latexonly}
-\begin{htmlonly}
-\htmladdnormallink{XML}{http://www.w3.org/XML/}
-\end{htmlonly}
-is fast becoming the standard format for passing structured data around
-the internet, and much general purpose software has been written for
-tasks such as the parsing, editing, display and transformation of XML
-data. The \htmlref{XmlChan}{XmlChan} class (a specialised form of \htmlref{Channel}{Channel}) provides
-facilities for storing AST objects externally in the form of XML documents, 
-thus allowing such software to be used.
-
-The primary XML format used by the XmlChan class is a fairly close
-transliteration of the AST native format produced by the basic Channel
-class. Currently, there is no DTD or schema defining the structure of data 
-produced in this format by an XmlChan. The following is a native AST 
-representation of a simple 1-D \htmlref{Frame}{Frame} (including comments and with the \htmlref{Full}{Full} 
-attribute set to zero so that some default attribute values are included 
-as extra comments):
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin Frame    # Coordinate system description
-#   Title = "1-d coordinate system"     # Title of coordinate system
-    Naxes = 1   # Number of coordinate axes
-    Domain = "SCREEN"   # Coordinate system domain
-#   Lbl1 = "Axis 1"     # Label for axis 1
-#   Uni1 = "cm"         # Units for axis 1
-    Ax1 =       # Axis number 1
-       Begin Axis       # Coordinate axis
-          Unit = "cm"   # Axis units
-       End Axis
- End Frame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The corresponding XmlChan output would look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/" 
-        desc="Coordinate system description">
-    <_attribute name="Title" quoted="true" value="1-d coordinate system"
-                desc="Title of coordinate system" default="true"/>
-    <_attribute name="Naxes" value="1" desc="Number of coordinate axes"/>
-    <_attribute name="Domain" quoted="true" value="SCREEN"
-                desc="Coordinate system domain"/>
-    <_attribute name="Lbl1" quoted="true" value="Axis 1" 
-                desc="Label for axis 1" default="true"/>
-    <_attribute name="Uni1" quoted="true" value="cm" 
-                desc="Units for axis 1" default="true"/>
-    <Axis label="Ax1" desc="Coordinate axis">
-       <!--Axis number 1-->
-       <_attribute name="Unit" quoted="true" value="cm" desc="Axis units"/>
-    </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-Notes:
-
-\begin{enumerate}
-\item The AST class name is used as the name for an XML element which contain 
-a description of an AST object.
-
-\item AST attributes are described by XML elements with the name
-``\_attribute''. Unfortunately, the word ``attribute'' is also used by XML
-to refer to a ``name=value'' pair within an element start tag. So for
-instance, the ``\htmlref{Title}{Title}'' attribute of the AST Frame object is described
-within an XML element with name ``\_attribute'' in which the XML attribute
-``name'' has the value ``Title'', and the XML attribute ``value'' has the 
-value ``1-d coordinate system''. The moral is always to be clear clear 
-about the context (AST or XML) in which the word \emph{attribute} is being 
-used!
-
-\item The XML includes comments both as XML attributes with the name ``desc'', 
-and as separate comment tags.
-
-\item Elements which describe default values are identified by the fact
-that they have an XML attribute called ``default'' set to the value
-``true''. These elements are ignored when being read back into an XmlChan.
-
-\item The outer-most XML element of an AST object will set the default
-namespace to \verb+http://www.starlink.ac.uk/ast/xml/+ which will be
-inherited by all nested elements.
-
-\end{enumerate}
-
-
-The XmlChan class changes the default value for the \htmlref{Comment}{Comment} and Full
-attributes (inherited from the base Channel class) to zero and -1,
-resulting in terse output by default. With the default values for these
-attributes, the above XML is reduced to the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/">
-    <_attribute name="Naxes" value="1"/>
-    <_attribute name="Domain" quoted="true" value="SCREEN"/>
-    <Axis label="Ax1">
-       <_attribute name="Unit" quoted="true" value="cm"/>
-    </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-The XmlChan class uses the \htmlref{Skip}{Skip} attributes very similarly to the Channel
-class. If Skip is zero (the default) then an error will be reported if the text
-supplied by the source function does not begin with an AST \htmlref{Object}{Object}. If
-Skip is non-zero, then initial text is skipped over without error until
-the start of an AST object is found. this allows an AST object to be
-located within a larger XML document.
-
-\subsection{Reading IVOA Space-Time-Coordinates XML (STC-X) Descriptions}
-The \htmlref{XmlChan}{XmlChan} class also provides support for reading (but not writing) XML 
-documents which use a restricted subset of an early draft (V1.20) of the 
-IVOA Space-Time-Coordinates XML (STC-X) system. The version of STC-X 
-finally adopted by the IVOA differs in several significant respects from 
-V1.20, and so the STC-X support currently provided by AST is mainly of 
-historical interest. Note, AST also supports the alternative ``STC-S'' 
-linear string description of the STC model (see \secref{ss:stcschans}). 
-
-STC-X V1.20 is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}, and the current
-version is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-X.html}{
-http://www.ivoa.net/Documents/latest/STC-X.html}.
-
-When an STC-X document is read using an XmlChan, the read operation
-produces an AST \htmlref{Object}{Object} of the \htmlref{Stc}{Stc} class, which is itself a subclass of
-\htmlref{Region}{Region}. Specifically, each such Object will be an instance of
-\htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} or
-\htmlref{StcObsDataLocation}{StcObsDataLocation}. See the description of the XmlChan class and the
-\htmlref{XmlFormat}{XmlFormat} attribute for further details.
-
-\cleardoublepage
-\section{\label{ss:stcschans}Reading and writing STC-S descriptions (StcsChans)}
-
-The \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA ``STC-S'' descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of the STC metadata describing a
-region in an astronomical coordinate system. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a 
-region within an AST-supported astronomical coordinate system to be converted 
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa. For further
-details, see the full description of the StcsChan class in 
-\appref{ss:classdescriptions}. 
-
-
-\cleardoublepage
-\section{\label{ss:intramaps}Creating Your Own Private Mappings (IntraMaps)}
-
-\subsection{The Need for Extensibility}
-
-However many \htmlref{Mapping}{Mapping} classes are provided by AST, sooner or later you
-will want to transform coordinates in some way that has not been
-foreseen. You might want to plot a graph in some novel curvilinear
-coordinate system (perhaps you already have a WCS system in your
-software and just want to use AST for its graphical capabilities).
-Alternatively, you might need to calibrate a complex dataset (like an
-objective prism plate) where each position must be converted to world
-coordinates with reference to calibration data under the control of an
-elaborate algorithm.
-
-In such cases, it is clear that the basic pre-formed components
-provided by AST for building Mappings are just not enough. What you
-need is access to a programming language. However, if you write your
-own software to transform coordinate values, then it must be made
-available in the form of an AST class (from which you can create
-Objects) before it can be used in conjunction with other AST
-facilities.
-
-At this point you might consider writing your own AST class, but this
-is not recommended. Not only would the internal conventions used by
-AST take some time to master, but you might also find yourself having
-to change your software whenever a new version of AST was
-released. Fortunately, there is a much easier route provided by the
-\htmlref{IntraMap}{IntraMap} class.
-
-\subsection{The IntraMap Model}
-
-To allow you to write your own Mappings, AST provides a special kind
-of \htmlref{Mapping}{Mapping} called an \htmlref{IntraMap}{IntraMap}. An IntraMap is a sort of ``wrapper''
-for a coordinate transformation routine written in Fortran. You write
-this routine yourself and then register it with AST. This, in effect,
-creates a new class from which you can create Mappings
-({\em{i.e.}}\ IntraMaps) which will transform coordinates in whatever
-way your transformation routine specifies.
-
-Because IntraMaps are Mappings, they may be used in the same way as
-any other Mapping. For instance, they may be combined in series or
-parallel with other Mappings using a \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}),
-they may be inverted (\secref{ss:invertingmappings}), you may enquire
-about their attributes (\secref{ss:gettingattributes}), they may be
-inserted into FrameSets (\secref{ss:framesets}), {\em{etc.}} They do,
-however, have some important limitations of which you should be aware
-before we go on to consider how to create them.
-
-\subsection{\label{ss:intramaplimitations}Limitations of IntraMaps}
-
-By now, you might be wondering why any other kind of \htmlref{Mapping}{Mapping} is
-required at all. After all, why not simply write your own coordinate
-transformation routines in Fortran, wrap them up in IntraMaps and do
-away with all the other Mapping classes in AST?
-
-The reason is not too hard to find. Any transformation routine you
-write is created solely by you, so it is a private extension which
-does not form a permanent part of AST. If you use it to calibrate some
-data and then pass that data to someone else, who has only the
-standard version of AST, then they will not be able to interpret it.
-
-Thus, while an \htmlref{IntraMap}{IntraMap} is fine for use by you and your collaborators
-(who we assume have access to the same transformation routines), it
-does not address the need for universal data exchange like other AST
-Mappings do. This is where the ``Intra'' in the class name
-``IntraMap'' comes from, implying private or internal usage.
-
-For this reason, it is unwise to store IntraMaps in datasets, unless
-they will be used solely for communication between collaborating items
-of software which share conventions about their use.  A private
-database describing coordinate systems on a graphics device might be
-an example where IntraMaps would be suitable, because the data would
-probably never be accessed by anyone else's software. Restricting
-IntraMap usage to within a single program ({\em{i.e.}} never writing
-it out) is, of course, completely safe.
-
-If, by accident, an IntraMap should happen to escape as part of a
-dataset, then the unsuspecting recipient is likely to receive an error
-message when they attempt to read the data. However, AST will
-associate details of the IntraMap's transformation routine and its
-author (if provided) with the data, so that the recipient can make an
-intelligent enquiry to obtain the necessary software if this proves
-essential.
-
-\subsection{\label{ss:transformationfunctions}Writing a Transformation Routine}
-
-The first stage in creating an \htmlref{IntraMap}{IntraMap} is to write the coordinate
-transformation routine. This should have a calling interface like the
-\htmlref{AST\_TRANN}{AST_TRANN} function provided by AST ({\em{q.v.}}). Here is a simple
-example of a suitable transformation routine which transforms
-coordinates by squaring them:
-\xlabel{SqrTran}
-
-\small
-\begin{verbatim}
-      SUBROUTINE SQRTRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
-    :                     NCOORD_OUT, OUTDIM, OUT, STATUS )
-      INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
-      DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
-      LOGICAL FORWARD
-
-      INCLUDE 'AST_PAR'
-      DOUBLE PRECISION X
-      INTEGER COORD, POINT
-
-*  Forward transformation.
-      IF ( FORWARD ) THEN
-         DO 2 POINT = 1, NPOINT
-            DO 1 COORD = 1, NCOORD_IN
-               X = IN( POINT, COORD )
-               IF ( X .EQ. AST__BAD ) THEN
-                  OUT( POINT, COORD ) = AST__BAD
-               ELSE
-                  OUT( POINT, COORD ) = X * X
-               ENDIF
- 1          CONTINUE
- 2       CONTINUE
-
-*  Inverse transformation.
-      ELSE
-         DO 4 POINT = 1, NPOINT
-            DO 3 COORD = 1, NCOORD_IN
-               X = IN( POINT, COORD )
-               IF ( X .LT. 0.0D0 .OR. X .EQ. AST__BAD ) THEN
-                  OUT( POINT, COORD ) = AST__BAD
-               ELSE
-                  OUT( POINT, COORD ) = SQRT( X )
-               ENDIF
- 3          CONTINUE
- 4       CONTINUE
-      ENDIF
-      END
-\end{verbatim}
-\normalsize
-
-As you can see, the routine comes in two halves which implement the
-forward and inverse coordinate transformations. The number of points
-to be transformed (NPOINT) and the numbers of input and output
-coordinates per point (NCOORD\_IN and NCOORD\_OUT---in this case both
-are assumed equal) are passed to the routine. A pair of loops then
-accesses all the coordinate values.  Note that it is legitimate to
-omit one or other of the forward/inverse transformations and simply
-not to implement it, if it will not be required. It is also
-permissible to require that the numbers of input and output
-coordinates be fixed ({\em{e.g.}}\ at 2), or to write the routine so
-that it can handle arbitrary dimensionality, as here.
-
-Before using an incoming coordinate, the routine must first check that
-it is not set to the value AST\_\_BAD, which indicates missing data
-(\secref{ss:badcoordinates}). If it is, the same value is also
-assigned to any affected output coordinates. The value AST\_\_BAD is
-also generated if any coordinates cannot be transformed. In this
-example, this can happen with the inverse transformation if negative
-values are encountered, so that the square root cannot be taken.
-
-There are very few restrictions on what a coordinate transformation
-routine may do. For example, it may freely perform I/O to access any
-external data needed, it may invoke other AST facilities (but beware
-of unwanted recursion), {\em{etc.}} Typically, you may also want to
-pass information to it {\em{via}}\ global variables held in common
-blocks.  Remember, however, that whatever facilities the
-transformation routine requires must be available in every program
-which uses it.
-
-Generally, it is not a good idea to retain context information within
-a transformation routine. That is, it should transform each set of
-coordinates as a single point and retain no memory of the points it
-has transformed before. This is in order to conform with the AST model
-of a \htmlref{Mapping}{Mapping}.
-
-If an error occurs within a transformation routine, it should set its
-STATUS argument to an error value before returning. This will alert
-AST to the error, causing it to abort the current operation. The error
-value AST\_\_ITFER is available for this purpose, but other values may
-also be used ({\em{e.g.}}\ if you wish to distinguish different types
-of error). The AST\_\_ITFER error value is defined in the AST\_ERR
-include file.
-
-\subsection{\label{ss:registeringintramaps}Registering a Transformation Routine}
-
-Having written your coordinate transformation routine, the next step
-is to register it with AST. Registration is performed using
-\htmlref{AST\_INTRAREG}{AST_INTRAREG}, as follows:
-
-\small
-\begin{verbatim}
-      EXTERNAL SQRTRAN
-
-      CHARACTER * ( 80 ) AUTHOR, CONTACT, PURPOSE
-
-      ...
-
-      PURPOSE = 'Square each coordinate value'
-      AUTHOR  = 'R.F. Warren-Smith & D.S. Berry'
-      CONTACT = 'http://www.starlink.rl.ac.uk/cgi-bin/htxserver/' //
-                'sun210.htx/?xref_SqrTran'
-
-      CALL AST_INTRAREG( 'SqrTran', 2, 2, SQRTRAN, 0,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-Note that the transformation routine must also appear in a Fortran
-EXTERNAL statement.
-
-The first argument to AST\_INTRAREG is a name by which the
-transformation routine will be known. This will be used when we come
-to create an \htmlref{IntraMap}{IntraMap} and is case sensitive. We recommend that you
-base this on the actual routine name and make this sufficiently
-unusual that it is unlikely to clash with any other routines in most
-people's software.
-
-The next two arguments specify the number of input and output
-coordinates which the transformation routine will handle. These
-correspond with the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the IntraMap we will
-create. Here, we have set them both to 2, which means that we will
-only be able to create IntraMaps with 2 input and 2 output coordinates
-(despite the fact that the transformation routine can actually handle
-other dimensionalities). We will see later
-(\secref{ss:variableintramapcoordinates}) how to remove this
-restriction.
-
-The fourth argument should contain a set of flags which describe the
-transformation routine in a little more detail. We will return to this
-shortly (\secref{ss:restrictedintramaps} \&
-\secref{ss:simplifyingintramaps}). For now, we supply a value of zero.
-
-The remaining arguments are character strings which document the
-transformation routine, mainly for the benefit of anyone who is
-unfortunate enough to encounter a reference to it in their data which
-they cannot interpret. As explained above
-(\secref{ss:intramaplimitations}), you should try and avoid this, but
-accidents will happen, so you should always provide strings containing
-the following:
-
-\begin{enumerate}
-\item A short description of what the transformation routine is for.
-\item The name of the author.
-\item Contact details, such as an e-mail or WWW address.
-\end{enumerate}
-
-The idea is that anyone finding an IntraMap in their data, but lacking
-the necessary transformation routine, should be able to contact the
-author and make a sensible enquiry in order to obtain it. If you
-expect many enquiries, you may like to set up a World Wide Web page
-and use that instead (in the example above, we use the WWW address of
-the relevant part of this document).
-
-\subsection{Creating an IntraMap}
-
-Once a transformation routine been registered, creating an \htmlref{IntraMap}{IntraMap}
-from it is simple:
-
-\small
-\begin{verbatim}
-      INTEGER INTRAMAP
-
-      ...
-
-      INTRAMAP = AST_INTRAMAP( 'SqrTran', 2, 2, ' ', STATUS );
-\end{verbatim}
-\normalsize
-
-We simply use the \htmlref{AST\_INTRAMAP}{AST_INTRAMAP} constructor function and pass it the
-name of the transformation routine to use. This name is the same (case
-sensitive) one that we associated with the routine when we registered
-it using \htmlref{AST\_INTRAREG}{AST_INTRAREG} (\secref{ss:registeringintramaps}).
-
-You can, of course, register any number of transformation routines and
-select which one to use whenever you create an IntraMap. You can also
-create any number of independent IntraMaps using each transformation
-routine. In this sense, each transformation routine you register
-effectively creates a new ``sub-class'' of IntraMap, from which you
-can create Objects just like any other class. However, an error will
-occur if you attempt to use a transformation routine that has not yet
-been registered.
-
-The second and third arguments to AST\_INTRAMAP are the numbers of
-input and output coordinates. These define the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes
-for the IntraMap that is created and they must match the corresponding
-numbers given when the transformation routine was registered.
-
-The penultimate argument is the usual attribute initialisation
-string. You may set attribute values for an IntraMap in exactly the
-same way as for any other \htmlref{Mapping}{Mapping} (\secref{ss:settingattributes}, and
-also see \secref{ss:intraflag}).
-
-\subsection{\label{ss:restrictedintramaps}Restricted Implementations of Transformation Routines}
-
-You may not always want to use both the forward and inverse
-transformations when you create an \htmlref{IntraMap}{IntraMap}, so it is possible to omit
-either from the underlying coordinate transformation routine. Consider
-the following, for example:
-
-\small
-\begin{verbatim}
-      SUBROUTINE POLY3TRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
-     :                      NCOORD_OUT, OUTDIM, OUT, STATUS )
-      INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
-      DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
-      LOGICAL FORWARD
-
-      INCLUDE 'AST_PAR'
-      DOUBLE PRECISION X
-      INTEGER POINT
-
-*  Forward transformation.
-      DO 1 POINT = 1, NPOINT
-         X = IN( POINT, 1 )
-         IF ( X .EQ. AST__BAD ) THEN
-            OUT( POINT, 1 ) = AST__BAD
-         ELSE
-            OUT( POINT, 1 ) =
-     :      6.18D0 + X * ( 0.12D0 + X * ( -0.003D0 + X * 0.0000101D0 ) )
-         END IF
- 1    CONTINUE
-      END
-\end{verbatim}
-\normalsize
-
-This implements a 1-dimensional cubic polynomial transformation. Since
-this is somewhat awkward to invert, however, we have only implemented
-the forward transformation.  When registering the routine, this is
-indicated via the FLAGS argument to \htmlref{AST\_INTRAREG}{AST_INTRAREG}, as follows:
-
-\small
-\begin{verbatim}
-      EXTERNAL POLY3TRAN
-
-      ...
-
-      CALL AST_INTRAREG( 'Poly3Tran', 1, 1, POLY3TRAN, AST__NOINV,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the fifth argument has been set to the flag value AST\_\_NOINV
-to indicate the lack of an inverse. If the forward transformation were
-absent, we would use AST\_\_NOFOR instead. Flag values for this
-argument may be combined by summing them if necessary.
-
-\subsection{\label{ss:variableintramapcoordinates}Variable Numbers of Coordinates}
-
-In our earlier examples, we have used a fixed number of input and
-output coordinates when registering a coordinate transformation
-routine. It is not necessary to impose this restriction, however, if
-the transformation routine can cope with a variable number of
-coordinates (as with the example in
-\secref{ss:transformationfunctions}). We indicate the acceptability of
-a variable number when registering the transformation routine by
-supplying the value AST\_\_ANY for the number of input and/or output
-coordinates, as follows:
-
-\small
-\begin{verbatim}
-      CALL AST_INTRAREG( 'SqrTran', AST__ANY, AST__ANY, SQRTRAN, 0,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-The result is that an \htmlref{IntraMap}{IntraMap} may now be created with any number of
-input and output coordinates. For example:
-
-\small
-\begin{verbatim}
-      INTEGER INTRAMAP1, INTRAMAP2
-
-      ...
-
-      INTRAMAP1 = AST_INTRAMAP( 'SqrTran', 1, 1, ' ', STATUS )
-      INTRAMAP2 = AST_INTRAMAP( 'SqrTran', 3, 3, 'Invert=1', STATUS )
-\end{verbatim}
-\normalsize
-
-It is possible to fix either the number of input or output coordinates
-(by supplying an explicit number to \htmlref{AST\_INTRAREG}{AST_INTRAREG}), but more subtle
-restrictions on the number of coordinates, such as requiring that \htmlref{Nin}{Nin}
-and \htmlref{Nout}{Nout} be equal, are not supported. This means that:
-
-\small
-\begin{verbatim}
-      INTRAMAP = AST_INTRAMAP( 'SqrTran', 1, 2, ' ', STATUS )
-\end{verbatim}
-\normalsize
-
-will be accepted without error, although the transformation routine
-cannot actually handle such a combination sensibly. If this is
-important, it would be worth adding a check within the transformation
-routine itself, so that the error would be detected when it came to be
-used.
-
-\subsection{\label{ss:intraflag}Adapting a Transformation Routine to Individual IntraMaps}
-
-In the examples given so far, our coordinate transformation routines
-have not made use of the THIS pointer passed to them (which identifies
-the \htmlref{IntraMap}{IntraMap} whose transformation we are implementing). In practice,
-this will often be the case. However, the presence of the THIS pointer
-allows the transformation routine to invoke any other AST routine on
-the IntraMap, and this permits enquiries about its attributes. The
-transformation routine's behaviour can therefore be modified according
-to any attribute values which are set. This turns out to be a useful
-thing to do, so each IntraMap has a special \htmlref{IntraFlag}{IntraFlag} attribute reserved
-for exactly this purpose.
-
-Consider, for instance, the case where the transformation routine has
-access to several alternative sets of internally-stored data which it
-may apply to perform its transformation. Rather than implement many
-different versions of the transformation routine, you may switch
-between them by setting a value for the IntraFlag attribute when you
-create an instance of an IntraMap, for example:
-
-\small
-\begin{verbatim}
-      INTRAMAP1 = AST_INTRAMAP( 'MyTran', 2, 2, 'IntraFlag=A', STATUS )
-      INTRAMAP2 = AST_INTRAMAP( 'MyTran', 2, 2, 'IntraFlag=B', STATUS )
-\end{verbatim}
-\normalsize
-
-The transformation routine may then enquire the value of the IntraFlag
-attribute ({\em{e.g.}}\ using AST\_GETC and passing it the THIS
-pointer) and use whichever dataset is required for that particular
-IntraMap.
-
-This approach is particularly useful when the number of possible
-transformations is unbounded or not known in advance, in which case
-the IntraFlag attribute may be used to hold numerical values encoded
-as part of a character string (effectively using them as data for the
-IntraMap). It is also superior to the use of a global switch for
-communication ({\em{e.g.}}\ setting an index to select the ``current''
-data before using the IntraMap), because it continues to work when
-several IntraMaps are embedded within a more complex compound \htmlref{Mapping}{Mapping},
-when you may have no control over the order in which they are used.
-
-\subsection{\xlabel{MaxTran}\label{ss:simplifyingintramaps}Simplifying IntraMaps}
-
-A notable disadvantage of IntraMaps is that they are ``black boxes''
-as far as AST is concerned. This means that they have limited ability
-to participate in the simplification of compound Mappings performed,
-{\em{e.g.}}, by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} (\secref{ss:simplifyingcmpmaps}),
-because AST cannot know how they interact with other Mappings. In
-reality, of course, they will often implement such specialised
-coordinate transformations that the simplification possibilities will
-be rather limited anyway.
-
-One important simplification, however, is the ability of a \htmlref{Mapping}{Mapping} to
-cancel with its own inverse to yield a unit Mapping (a \htmlref{UnitMap}{UnitMap}). This
-is important because Mappings are frequently used to relate a dataset
-to some external standard (a celestial coordinate system, for
-example). When inter-relating two similar datasets calibrated using
-the same standard, part of the Mapping often cancels, because it is
-applied first in one direction and then the other, effectively
-eliminating the reference to the standard. This is often a useful
-simplification and can lead to greater efficiency.
-
-Many transformations have this property of cancelling with their own
-inverse, but not necessarily all. Consider the following
-transformation routine, for example:
-
-\small
-\begin{verbatim}
-      SUBROUTINE MAXTRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
-     :                    NCOORD_OUT, OUTDIM, OUT, STATUS )
-      INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
-      DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
-      LOGICAL FORWARD
-
-      INCLUDE 'AST_PAR'
-      DOUBLE PRECISION HI, X
-      INTEGER COORD, POINT
-
-*  Forward transformation.
-      IF ( FORWARD ) THEN
-         DO 2 POINT = 1, NPOINT
-            HI = AST__BAD
-            DO 1 COORD = 1, NCOORD_IN
-               X = IN( POINT, COORD )
-               IF ( X .NE. AST__BAD ) THEN
-                  IF ( X .GT. HI .OR. HI .EQ. AST__BAD ) HI = X
-               END IF
- 1          CONTINUE
- 2       CONTINUE
-
-*  Inverse transformation.
-      ELSE
-         DO 4 COORD = 1, NCOORD_OUT
-            DO 3 POINT = 1, NPOINT
-               OUT( POINT, COORD ) = IN( POINT, 1 )
- 3          CONTINUE
- 4       CONTINUE
-      END IF
-      END
-\end{verbatim}
-\normalsize
-
-This routine takes any number of input coordinates and returns a
-single output coordinate which is the maximum value of the input
-coordinates. Its inverse (actually a ``pseudo-inverse'') sets all the
-input coordinates to the value of the output
-coordinate.\footnote{Remember that IN holds the original ``output''
-coordinates when applying the inverse transformation and OUT holds the
-original ``input'' coordinates.}
-
-If this routine is applied in the forward direction and then in the
-inverse direction, it does {\bf{not}} in general restore the original
-coordinate values. However, if applied in the inverse direction and
-then the forward direction, it does. Hence, replacing the sequence of
-operations with an equivalent UnitMap is possible in the latter case,
-but not in the former.
-
-To distinguish these possibilities, two flag values are provided for
-use with \htmlref{AST\_INTRAREG}{AST_INTRAREG} to indicate what simplification (if any) is
-possible. For example, to register the above transformation routine,
-we might use:
-
-\small
-\begin{verbatim}
-      EXTERNAL MAXTRAN
-
-      ...
-
-      CALL AST_INTRAREG( 'MaxTran', AST__ANY, 1, MAXTRAN, AST__SIMPIF,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the flag value AST\_\_SIMPIF supplied for the fifth argument
-indicates that simplification is possible if the transformation is
-applied in the inverse direction followed by the forward direction. To
-indicate the complementary case, the flag AST\_\_SIMPFI would be used
-instead. If both simplifications are possible (as with the SQRTRAN
-function in \secref{ss:transformationfunctions}), then we would use
-the sum of both values.
-
-In practice, some judgement is usually necessary when deciding whether
-to allow simplification. For example, seen in one light our SQRTRAN
-routine (\secref{ss:transformationfunctions}) does not cancel with its
-own inverse, because squaring a coordinate value and then taking its
-square root can change the original value, if this was
-negative. Therefore, replacing this combination with a UnitMap will
-change the behaviour of a compound Mapping and should not be
-allowed. Seen in another light, however, where the coordinates being
-processed are intrinsically all positive, it is a permissible and
-probably useful simplification.
-
-If such distinctions are ever important in practice, it is simple to
-register the same transformation routine twice with different flag
-values (use a separate name for each) and then use whichever is
-appropriate when creating an \htmlref{IntraMap}{IntraMap}.
-
-\subsection{\label{ss:readingandwritingintramaps}Writing and Reading IntraMaps}
-
-It is most important to realise that when you write an \htmlref{IntraMap}{IntraMap} to a
-\htmlref{Channel}{Channel} (\secref{ss:writingtoachannel}), the transformation routine
-which it uses is not stored with it. To do so is impossible, because
-the routine has been compiled and loaded into memory ready for
-execution before AST gets to see it. However, AST does store the name
-associated with the transformation routine and various details about
-the IntraMap itself.
-
-This means that any program attempting to read the IntraMap
-(\secref{ss:readingfromachannel}) cannot make use of it unless it also
-has independent access to the original transformation routine. If it
-does not have access to this routine, an error will occur at the point
-where the IntraMap is read and the associated error message will
-direct the user to the author of the transformation routine for more
-information.
-
-However, if the necessary transformation routine is available, and
-has been registered before the read operation takes place, then AST is
-able to re-create the original IntraMap and will do so. Registration
-of the transformation routine must, of course, use the same name
-(and, in fact, be identical in most particulars) as was used in the
-original program which wrote the data.
-
-This means that a set of co-operating programs which all have access
-to the same set of transformation routines and register them in
-identical fashion (see \secref{ss:intramaplibrary} for how this can
-best be achieved) can freely exchange data that contain IntraMaps. The
-need to avoid exporting such data to unsuspecting third parties
-(\secref{ss:intramaplimitations}) must, however, be re-iterated.
-
-\subsection{\label{ss:intramaplibrary}Managing Transformation Routines in Libraries}
-
-If you are developing a large suite of data reduction software, you
-may have a need to use IntraMaps at various points within it. Very
-probably this will occur in unrelated modules which are compiled
-separately and then stored in a library. Since the transformation
-routines required must be registered before they can be used, this
-makes it difficult to decide where to perform this registration,
-especially since any particular data reduction program may use an
-arbitrary subset of the modules in your library.
-
-To assist with this problem, AST allows you to perform the same
-registration of a transformation routine any number of times, so long
-as it is performed using an identical invocation of \htmlref{AST\_INTRAREG}{AST_INTRAREG} on
-each occasion ({\em{i.e.}}\ all of its arguments must be
-identical). This means you do not have to keep track of whether a
-particular routine has already been registered but could, in fact,
-register it on each occasion immediately before it is required
-(wherever that may be). In order that all registrations are identical,
-however, it is recommended that you group them all together into a
-single routine, perhaps as follows:
-
-\small
-\begin{verbatim}
-      SUBROUTINE MYTRANS( STATUS )
-      INTEGER STATUS
-
-      INCLUDE 'AST_PAR'
-      EXTERNAL MAXTRAN, POLY3TRAN, SQRTRAN
-
-      ...
-
-      CALL AST_INTRAREG( 'MaxTran', AST__ANY, 1, MAXTRAN, AST__SIMPIF,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-
-      ...
-
-      CALL AST_INTRAREG( 'Poly3Tran', 1, 1, POLY3TRAN, AST__NOINV,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-
-      ...
-
-      CALL AST_INTRAREG( 'SqrTran, 2, 2, SQRTRAN, 0,
-     :                   PURPOSE, AUTHOR, CONTACT, STATUS )
-      END
-\end{verbatim}
-\normalsize
-
-You can then simply invoke this routine wherever necessary. It is, in
-fact, particularly important to register all relevant transformation
-routines in this way before you attempt to read an \htmlref{Object}{Object} that might
-be (or contain) an \htmlref{IntraMap}{IntraMap}
-(\secref{ss:readingandwritingintramaps}). This is because you may not
-know in advance which of these transformation routines the IntraMap
-will use, so they must all be available in order to avoid an error.
-
-\cleardoublepage
-\section{\label{ss:plots}Producing Graphical Output (Plots)}
-
-Graphical output from AST is performed though an \htmlref{Object}{Object} called a \htmlref{Plot}{Plot},
-which is a specialised form of \htmlref{FrameSet}{FrameSet}. A Plot does not represent the
-graphical content itself, but is a route through which plotting
-operations, such as drawing lines and curves, are conveyed on to a
-plotting surface to appear as visible graphics.
-
-\subsection{The Plot Model}
-
-When a \htmlref{Plot}{Plot} is created, it is initialised by providing a \htmlref{FrameSet}{FrameSet} whose
-base \htmlref{Frame}{Frame} (as specified by its \htmlref{Base}{Base} attribute) is mapped linearly or
-logarithmically (as specified by the LogPlot attribues) on to a
-{\em{plotting area.}} This is a rectangular region in the graphical
-coordinate space of the underlying graphics system and becomes the new
-base Frame of the Plot. In effect, the Plot becomes attached to the
-plotting surface, in rather the same way that a basic FrameSet might be
-attached to (say) an image.
-
-The current Frame of the Plot (derived from the current Frame of the
-FrameSet supplied) is used to represent a {\em{physical coordinate
-system.}} This is the system in which plotting operations are
-performed by your program.  Every plotting operation is then
-transformed through the \htmlref{Mapping}{Mapping} which inter-relates the Plot's current
-and base Frames in order to appear on the plotting surface.
-
-An example may help here. Suppose we start with a FrameSet whose base
-Frame describes the pixel coordinates of an image and whose current
-Frame describes a celestial (equatorial) coordinate system. Let us
-assume that these two Frames are inter-related by a Mapping within the
-FrameSet which represents a particular sky projection.
-
-When a Plot is created from this FrameSet, we specify how the pixel
-coordinates (the base Frame) maps on to the plotting surface. This
-simply corresponds to telling the Plot where we have previously
-plotted the image data. If we now use the Plot to plot a line with
-latitude zero in our physical coordinate system, as given by the
-current Frame, this line would appear as a curve (the equator) on the
-plotting surface, correctly registered with the image.
-
-There are a number of plotting functions provided, which all work in a
-similar way. Plotting operations are transformed through the Mapping
-which the Plot represents before they appear on the plotting
-surface.\footnote{Like any FrameSet, a Plot can be used as a
-Mapping. In this case it is the inverse transformation which is used
-when plotting ({\em{i.e.}}\ that which transforms between the current
-and base Frames).}  It is possible to draw symbols, lines, axes,
-entire grids and more in this way.
-
-%\subsection{TBW---Creating a Plot}
-
-\subsection{Plotting Symbols}
-
-The simplest form of plotting is to draw symbols (termed
-{\em{markers}}) at a set of points. This is performed by \htmlref{AST\_MARK}{AST_MARK},
-which is supplied with a set of physical coordinates at which to place
-the markers:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-      INTEGER NCOORD, NMARK, TYPE, STATUS
-      DOUBLE PRECISION IN( NMARK, NCOORD )
-
-      STATUS = 0
-
-      ...
-
-      CALL AST_MARK( PLOT, NMARK, NCOORD, NMARK, IN, TYPE, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, NMARK specifies how many markers to plot and NCOORD specifies
-how many coordinates are being supplied for each
-point.\footnote{Remember, the physical coordinate space need not
-necessarily be 2-dimensional, even if the plotting surface is.} The
-array IN supplies the coordinates and the integer TYPE specifies which
-type of marker to plot.
-
-\subsection{\label{ss:plottinggeodesics}Plotting Geodesic Curves}
-
-There is no \htmlref{Plot}{Plot} routine to draw a straight line, because any straight
-line in physical coordinates can potentially turn into a curve in
-graphical coordinates. We therefore start by considering how to draw
-geodesic curves.  These are curves which trace the path of shortest
-distance between two points in physical coordinates
- and are the basic drawing element in a Plot. 
-
-In many instances, the geodesic will, in fact, be a straight line, but
-this depends on the Plot's current \htmlref{Frame}{Frame}. If this represents a
-celestial coordinate system, for instance, it will be a great circle
-(corresponding with the behaviour of the \htmlref{AST\_DISTANCE}{AST_DISTANCE} function which
-defines the metric of the physical coordinate space).  The geodesic
-will, of course, be transformed into graphics coordinates before being
-plotted. A geodesic curve is plotted using \htmlref{AST\_CURVE}{AST_CURVE} as follows:
-
-\small
-\begin{verbatim}
-      DOUBLE PRECISION START( NCOORD ), FINISH( NCOORD )
-
-      ...
-
-      CALL AST_CURVE( PLOT, START, FINISH, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, START and FINISH are arrays containing the starting and
-finishing coordinates of the curve. The \htmlref{AST\_OFFSET}{AST_OFFSET} and AST\_DISTANCE
-routines can often be useful for computing these
-(\secref{ss:distanceandoffset}).
-
-If you need to draw a series of curves end-to-end (when drawing a
-contour line, for example), then a more efficient alternative is to
-use \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}. This has the same effect as a sequence of calls to
-AST\_CURVE, but allows you to supply a whole set of points at the same
-time. AST\_POLYLINE then joins them, in sequence, using geodesic
-curves:
-
-\small
-\begin{verbatim}
-      INTEGER NPOINT
-      DOUBLE PRECISION COORDS( NPOINT, NCOORD )
-
-      ...
-
-      CALL AST_POLYCURVE( PLOT, NPOINT, NCOORD, NPOINT, COORDS, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, NPOINT specifies how many points are to be joined and NCOORD
-specifies how many coordinates are being supplied for each point.  The
-array COORDS supplies the coordinates of the points in the Plot's
-physical coordinate system.
-
-\subsection{Plotting Curves Parallel to Axes}
-
-As there is no \htmlref{Plot}{Plot} routine to draw a ``straight line'', drawing axes
-and grid lines to represent coordinate systems requires a slightly
-different approach. The problem is that for some coordinate systems,
-these grid lines will not be geodesics, so \htmlref{AST\_CURVE}{AST_CURVE} and
-\htmlref{AST\_POLYCURVE}{AST_POLYCURVE} (\secref{ss:plottinggeodesics}) cannot easily be used
-(you would have to resort to approximating grid lines by many small
-elements). Lines of constant celestial latitude provide an example of
-this, with the exception of the equator which is a geodesic.
-
-The \htmlref{AST\_GRIDLINE}{AST_GRIDLINE} routine allows these curves to be drawn, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER AXIS
-      DOUBLE PRECISION LENGTH
-
-      ...
-
-      CALL AST_GRIDLINE( PLOT, AXIS, START, LENGTH, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, AXIS specifies which physical coordinate axis we wish to draw
-parallel to. The START array contains the coordinates of the start of
-the curve and LENGTH specifies the distance to draw along the axis in
-physical coordinate space.
-
-\subsection{\label{ss:plottinggeneralizedcurves}Plotting Generalized Curves}
-We have seen how geodesic curves and grid lines can be drawn. The \htmlref{Plot}{Plot}
-class includes another method,
-\htmlref{AST\_GENCURVE}{AST_GENCURVE},
-which allows curves of {\em any} form to be drawn. The caller supplies a
-\htmlref{Mapping}{Mapping} which maps offset along the curve\footnote{normalized so that the
-start of the curve is at offset 0.0 and the end of the curve is at offset
-1.0 - offset need not be linearly related to distance.} into the
-corresponding position in the current \htmlref{Frame}{Frame} of the Plot.
-AST\_GENCURVE,
-then takes care of Mapping these positions into graphics coordinates. The
-choice of exactly which positions along the curve are to be used to
-define the curve is also made by
-AST\_GENCURVE,
-using an adaptive algorithm which concentrates points around areas where
-the curve is bending sharply or is discontinuous in graphics coordinates.
-
-The \htmlref{IntraMap}{IntraMap} class may be of particular use in this context since it allows 
-you to code your own Mappings to do any transformation you choose.
-
-
-\subsection{\label{ss:clipping}Clipping}
-
-Like many graphics systems, a \htmlref{Plot}{Plot} allows you to {\em{clip}} the graphics
-you produce. This means that plotting is restricted to certain regions
-of the plotting surface so that anything drawn outside these regions
-will not appear.  All Plots automatically clip at the edges of the
-plotting area specified when the Plot is created. This means that
-graphics are ultimately restricted to the rectangular region of
-plotting space to which you have attached the Plot.
-
-In addition to this, you may also specify lower and upper limits on
-each axis at which clipping should occur. This permits you to further
-restrict the plotting region. Moreover, you may attach these clipping
-limits to {\em{any}} of the Frames in the Plot. This allows you to
-place restrictions on where plotting will take place in either the
-physical coordinate system, the graphical coordinate system, or in any
-other coordinate system which is described by a \htmlref{Frame}{Frame} within the Plot.
-
-For example, you could plot using equatorial coordinates and set up
-clipping limits in galactic coordinates. In general, you could set up
-arbitrary clipping regions by adding a new Frame to a Plot (in which
-clipping will be performed) and inter-relating this to the other
-Frames in a suitable way.
-
-Clipping limits are defined using the \htmlref{AST\_CLIP}{AST_CLIP} routine, as follows:
-
-\small
-\begin{verbatim}
-      INTEGER IFRAME, NAXES
-      DOUBLE PRECISION LBND( NAXES ), UBND( NAXES )
-
-      ...
-
-      CALL AST_CLIP( PLOT, IFRAME, LBND, UBND, STATUS )
-\end{verbatim}
-\normalsize
-
-Here, the IFRAME value gives the index of the Frame within the Plot to
-which clipping is to be applied, while LBND and UBND give the limits
-on each axis of the selected Frame (NAXES is the number of axes in
-this Frame).
-
-You can remove clipping by giving a value of AST\_\_NOFRAME for IFRAME.
-
-\subsection{Using a Plot as a Mapping}
-
-All Plots are also Mappings (just like the FrameSets from which they
-are derived), so can be used to transform coordinates.
-
-Like FrameSets, the forward transformation of a \htmlref{Plot}{Plot} will convert
-coordinates between the base and current Frames ({\em{i.e.}}\ between
-graphical and physical coordinates). This would be useful if you were
-(say) reading a cursor position in graphical coordinates and needed to
-convert this into physical coordinates for display.
-
-Conversely, a Plot's inverse transformation converts between its
-current and base Frames ({\em{i.e.}}\ from physical coordinates to
-graphical coordinates). This transformation is applied automatically
-whenever plotting operations are carried out by AST routines. It may
-also be useful to apply it directly, however, if you wish to perform
-additional plotting operations ({\em{e.g.}}\ those provided by the
-native graphics system) at positions specified in physical
-coordinates.
-
-There is, however. one important difference between using a \htmlref{FrameSet}{FrameSet}
-and a Plot to transform coordinates, and this is that clipping may be
-applied by a Plot (if it has been enabled using
-\htmlref{AST\_CLIP}{AST_CLIP}---\secref{ss:clipping}). Any point which lies within the
-clipped region of a Plot will, when transformed, yield coordinates
-with the value AST\_\_BAD. If you wish to avoid this clipping, you
-should extract the relevant \htmlref{Mapping}{Mapping} from the Plot (using
-\htmlref{AST\_GETMAPPING}{AST_GETMAPPING}) and use this, instead of the Plot, to transform the
-coordinates.
-
-\subsection{Using a Plot as a Frame}
-
-Every \htmlref{Plot}{Plot} is also a \htmlref{Frame}{Frame}, so can be used to obtain the values of
-Frame attributes such as a \htmlref{Title}{Title}, axis Labels, axis Units,
-{\em{etc.,}} which are typically used when displaying data and/or
-coordinates. These attributes are, as for any \htmlref{FrameSet}{FrameSet}, derived from
-the current Frame of the Plot (\secref{ss:framesetasframe}). They are
-also used automatically when using the Plot to plot coordinate axes
-and coordinate grids ({\em{e.g.}}\ for labelling
-them---\secref{ss:plottingagrid}).
-
-Because the current Frame of a Plot represents physical coordinates,
-any Frame operation applied to the Plot will effectively be working in
-this coordinate system. For example, the \htmlref{AST\_DISTANCE}{AST_DISTANCE} and \htmlref{AST\_OFFSET}{AST_OFFSET}
-routines will compute distances and offsets in physical coordinate
-space, and \htmlref{AST\_FORMAT}{AST_FORMAT} will format physical coordinates in an
-appropriate way for display.
-
-\subsection{\label{ss:validphysicalcoordinates}Regions of Valid Physical Coordinates}
-
-When points in physical coordinate space are transformed by a \htmlref{Plot}{Plot}
-into graphics coordinates for plotting, they may not always yield
-valid coordinates, irrespective of any clipping being applied
-(\secref{ss:clipping}). To indicate this, the resulting coordinate
-values will be set to the value AST\_\_BAD
-(\secref{ss:badcoordinates}).
-
-There are a number of reasons why this may occur, but typically it
-will be because physical coordinates only map on to a subset of the
-graphics coordinate space. This situation is commonly encountered with
-all-sky projections where, typically, the celestial sphere appears,
-when plotted, as a distorted shape ({\em{e.g.}}\ an ellipse) which
-does not entirely fill the graphics space. In some cases, there may
-even be multiple regions of valid and invalid physical coordinates.
-
-When plotting is performed {\em{via}} a Plot, graphical output will
-only appear in the regions of valid physical coordinates. Nothing will
-appear where invalid coordinates occur. Such output is effectively
-clipped. If you wish to plot in these areas, you must change
-coordinate system and use, say, graphical coordinates to address the
-plotting surface directly.
-
-\subsection{Plotting Borders}
-
-The \htmlref{AST\_BORDER}{AST_BORDER} routine is provided to draw a (line) border around
-your graphical output. With most graphics systems, this would simply
-be a rectangular box around the plotting area. With a \htmlref{Plot}{Plot}, however,
-this boundary follows the edge of each region containing valid,
-unclipped physical coordinates (\secref{ss:validphysicalcoordinates}).
-
-This means, for example, that if you were plotting an all-sky
-projection, this boundary would outline the perimeter of the celestial
-sphere when projected on to your plotting surface. Of course, if there
-is no clipping and all physical coordinates are valid, then you will
-get the traditional rectangular box. AST\_BORDER requires only a
-pointer to the Plot and the usual STATUS argument:
-
-\small
-\begin{verbatim}
-      LOGICAL HOLES
-
-      ...
-
-      HOLES = AST_BORDER( PLOT, STATUS )
-\end{verbatim}
-\normalsize
-
-It returns a logical value to indicate if any invalid or clipped
-physical coordinates were found within the plotting area. If they
-were, it will draw around the valid unclipped regions and return
-.TRUE.. Otherwise, it will draw a simple rectangular border and return
-.FALSE..
-
-\subsection{Plotting Text}
-
-Using a \htmlref{Plot}{Plot} to draw text involves supplying a string of text to be
-displayed and a position in physical coordinates where the text is to
-appear. The position is transformed into graphical coordinates to
-determine where the text should appear on the plotting surface. You
-must also provide a 2-element UP vector which gives the upward
-direction of the text in graphical coordinates. This allows text to be
-drawn at any angle.
-
-Plotting is performed by \htmlref{AST\_TEXT}{AST_TEXT}, for example:
-
-\small
-\begin{verbatim}
-      CHARACTER * ( 20 ) TEXT
-      DOUBLE PRECISION POS( NCOORD )
-      REAL UP( 2 )
-      DATA UP / 0.0, 1.0 /
-
-      ...
-
-      CALL AST_TEXT( PLOT, TEXT, POS, UP, 'TL', STATUS )
-\end{verbatim}
-\normalsize
-
-Here, TEXT contains the string to be drawn, POS is an array of
-physical coordinates and UP specifies the upward vector. In this case,
-the text will be drawn horizontally. The penultimate argument
-specifies the text justification, here indicating that the top left
-corner of the text should appear at the position given.
-
-Further control over the appearance of the text is possible by setting
-values for various Plot attributes, for example Colour, Font and Size.
-Sub-strings within the displayed text can be given different appearances,
-or turned into super-scripts or sub-scripts, by the inclusion of escape 
-sequences (see section~\secref{ss:escapes}) within the supplied text string.
-
-\subsection{\label{ss:plottingagrid}Plotting a Grid}
-
-The most comprehensive plotting routine available is \htmlref{AST\_GRID}{AST_GRID}, which
-can be used to draw labelled coordinate axes and, optionally, to
-overlay coordinate grids on the plotting area
-(Figure~\ref{fig:gridplot}). The routine is straightforward to use,
-simply requiring a pointer to the \htmlref{Plot}{Plot} and a STATUS argument:
-
-\small
-\begin{verbatim}
-      CALL AST_GRID( PLOT, STATUS )
-\end{verbatim}
-\normalsize
-
-It will draw both linear and curvilinear axes and grids, as required
-by the particular Plot. The appearance of the output can be modified
-in a wide variety of ways by setting various Plot attributes.
-The Label attributes of the current \htmlref{Frame}{Frame} are displayed as the axis 
-labels in the grid, and the \htmlref{Title}{Title} attribute as the plot title. Sub-strings 
-within these strings can be given different appearances, or turned into
-super-scripts or sub-scripts, by the inclusion of escape sequences (see 
-section~\secref{ss:escapes}) within the Label attributes.
-
-\subsection{\label{ss:escapes}Controlling the Appearance of Sub-strings}
-Normally, each string of characters displayed using a \htmlref{Plot}{Plot} will be
-plotted so that all characters in the string have the same font size,
-colour, {\em{etc.,}} specified by the appropriate attributes of the
-Plot. However, it is possible to include \emph{escape sequences} within
-the text to modify the appearance of sub-strings. \htmlref{Escape}{Escape} sequences can be
-used to change, colour, font, size, width, to introduce extra horizontal
-space between characters, and to change the base line of characters (thus
-allowing super-scripts and sub-scripts to be created). See the entry for
-the Escape attribute in \appref{ss:attributedescriptions} for details.
-
-As an example, if the character string ``\verb+10\%^50+\%s70+0.5+'' is
-plotted, it will be displayed as ``$10^{0.5}$'' - that is, with a
-super-scripted exponent. The exponent text will be 70\% of the size of
-normal text (as determined by the Size attribute), and its baseline will
-be raised by 50\% of the height of a normal character.
-
-Such escape sequences can be used in the strings assigned to textual
-attributes of the Plot (such as the axis Labels), and may also be
-included in strings plotted using 
-\htmlref{AST\_TEXT}{AST_TEXT}.
-
-The Format attribute for the \htmlref{SkyAxis}{SkyAxis} class includes the ``g'' option
-which will cause escape sequences to be included when formatting
-celestial positions so that super-script characters are used as
-delimiters for the various fields (a super-script ``h'' for hours, ``m''
-for minutes, \emph{etc}).
-
-Note, the facility for interpreting escape sequences is only available if
-the graphics wrapper functions which provide the interface to the
-underlying graphics system support all the functions included in the
-\verb+grf.h+ file as of AST V3.2. Older grf interfaces may need to be
-extended by the addition of new functions before escape sequences can be
-interpretted.
-
-\subsection{\label{ss:logaxes}Producing Logarithmic Axes}
-In certain situations you may wish for one or both of the plotted axes to
-be displayed logarithmically rather than linearly. For instance, you may
-wish to do this when using a \htmlref{Plot}{Plot} to represent a spectrum of, say, flux
-against frequency. In this case, you can cause the frequency axis to be drawn
-logarithmically simply by setting the boolean LogPlot attribute for the
-frequency axis to a non-zero value. This causes several things to happen:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} between the base \htmlref{Frame}{Frame} of the Plot (which represents 
-the underlying graphics world coordinate system) and the base Frame of
-the \htmlref{FrameSet}{FrameSet} supplied when the Plot was created, is modified. By
-default, this mapping is linear on both axes, but setting LogPlot non-zero
-for an axis causes the Mapping to be modified so that it is logarithmic
-on the specified axis. This is only possible if the displayed section of
-the axis does not include the value zero (otherwise the attempt to set
-a new value for LogPlot is ignored,and it retains its default value of
-zero).
-
-\item The major tick marks drawn as part of the annotated coordinate grid
-are spaced logarithmically rather than linearly. That is, major axis
-values are chosen so that there is a constant ratio between adjacent
-tick mark values. This ratio is constrained to be a power of ten. The
-minor tick marks are drawn at linearly distributed points between the 
-adjoining major tick values. Thus if a pair of adjacent major tick values 
-are drawn at axis values 10.0 and 100.0, minor ticks will be placed at 
-20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0 and 90.0 (note only 8 minor tick
-marks are drawn).
-
-\item If possible, numerical axis labels are shown as powers of ten.
-This depends on the facilities implemented by the graphics wrapper
-functions (see the next section). Extra functions were introduced to this
-set of wrapper functions at AST V3.2 which enable super-scripts and 
-sub-scripts to be produced. Some older wrappers may not yet have
-implemented these functiosn and this will result in axis labels being
-drawn in usual scientific or decimal notation.
-
-\end{enumerate}
-
-Whilst the LogPlot attribute can be used to control all three of the above 
-facilities, it is possible to control them individually as well. The
-LogTicks and LogLabel attributes control the behaviour specified in items
-2 and 3 above, but the default values for these attributes depend on the
-setting of the LogPlot attribute. This means that setting LogPlot 
-non-zero will swicth all three facilites on, so long as zero values have
-not been assigned explicitly to LogTicks or LogLabel.
-
-
-\subsection{\label{ss:choosingagraphicspackage}Choosing a Graphics Package}
-The \htmlref{Plot}{Plot} class itself does not include any code for actually drawing on a
-graphics device. Instead, it requires a set of functions to be provided
-which it uses to draw the required graphics. These include functions
-to draw a straight line, draw a text string, \emph{etc}. You may choose
-to provide functions from your favorite graphics package, or you can even
-write your own! To accomodate variations in the calling interfaces of
-different graphics packages, AST defines a standard interface for these
-routines. If this interface differs from the interface provided by your
-graphics package (which in general it will), then you must write a set of
-\emph{wrapper functions}, which provide the interface expected by AST but
-which then call functions from your graphics package to provide the
-required functionality. AST comes with wrapper functions suitable for
-the PGPLOT graphics package (see \xref{SUN/15}{sun15}{}).
-
-There are two ways of indicating which wrapper functions are to be used by 
-the Plot class:
-\begin{enumerate}
-
-\item A file containing C functions with pre-defined names can be written
-and linked with the application using options of the \htmlref{ast\_link}{ast_link} command.
-(see \secref{ss:howtobuild} and \appref{ss:commanddescriptions}). AST is
-distributed with such a file (called {\tt grf\_pgplot.c}) which calls PGPLOT 
-functions to implement the required functionality. This file can be used
-as a template for writing your own.
-Currently, it is not possible to write such ``grf modules'' in Fortran.
-If you want to use wrapper functions written in Fortran, then you must 
-use the \htmlref{AST\_GRFSET}{AST_GRFSET} method as described below.
-
-\item The 
-AST\_GRFSET
-method of the Plot class can be used to ``register''
-wrapper functions at run-time. This allows an application to switch
-between graphics systems if required. Graphics functions registered in
-this way do not need to have the pre-defined names used in the link-time
-method described above.
-
-\end{enumerate}
-
-For details of the interfaces of the wrapper routines, see 
-the reference documentation for the AST\_GRFSET method.
-
-\cleardoublepage
-\section{Compiling and Linking Software that Uses AST}
-
-A small number of UNIX commands are provided by AST to assist with the
-process of building software. A description of these can be found in
-\appref{ss:commanddescriptions} and their use is discussed here.  Note
-that in order to access these commands, the appropriate directory
-(normally ``/star/bin'') should be on your PATH.\footnote{If you have
-not installed AST in the usual location, then substitute the
-appropriate directory in place of ``/star'' wherever it occurs.}
-
-\subsection{\label{ss:accessingheaderfile}Accessing AST Include Files}
-
-
-The include files provided for use with Fortran are:
-
-\begin{quote}
-\begin{description}
-\item[AST\_PAR]\mbox{}\\
-Declares the types of all AST functions and defines parameter
-constants, except those that identify error values.
-
-\item[AST\_ERR]\mbox{}\\
-Defines parameter constants to represent the various error values to
-which the AST error status may be set when an error occurs
-(\secref{ss:errordetection}).
-\end{description}
-\end{quote}
-
-References to AST include files should be in upper case. Most modern
-Fortran compilers allow the directory to be specified as a command line
-option:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 prog.f -I/star/include -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If you are using such a compiler then your Fortran source code should,
-for instance, include:
-
-\small
-\begin{verbatim}
-      INCLUDE 'AST_PAR'
-\end{verbatim}
-\normalsize
-
-(that is, there is no need to include the directory within the INCLUDE
-statement). If your compiler does not provide such an option then your
-source code must contain an absolute file name identifying the directory 
-where the include files reside, for instance:
-
-\small
-\begin{verbatim}
-      INCLUDE '/star/include/AST_PAR'
-\end{verbatim}
-\normalsize
-
-
-\subsection{\label{ss:linking}Linking with AST Facilities}
-
-Fortran programs may be linked with AST by including execution of the
-command ``\htmlref{ast\_link}{ast_link}'' on the compiler command line. Thus, to compile
-and link a program called ``prog'', the following might be used:
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 prog.f -L/star/lib `ast_link` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-On Linux systems you should usually use \verb+g77 -fno-second-underscore+ in
-place of \verb+f77+ - see \xref{``Software development on Linux''}{sun212}
-{software_development_on_linux} in \xref{SUN/212}{sun212}{}. 
-
-
-Note the use of backward quote characters, which cause the
-``ast\_link'' command to be executed and its result substituted into
-the compiler command. An alternative is to save the output from
-``ast\_link'' in (say) a shell variable and use this instead. You may
-find this a little faster if you are building software repeatedly
-during development.
-
-Programs which use AST can also be linked in a number of other ways,
-depending on the facilities they require. In the example above, we
-have used the default method which assumes that the program will not
-be generating graphical output, so that no graphics libraries need be
-linked. If you need other facilities, then various switches can be
-applied to the ``ast\_link'' command in order to control the linking
-process.
-
-For example, if you were producing graphical output using the PGPLOT
-graphics package, you could link with the AST/PGPLOT interface by
-using the ``$-$pgplot'' switch with ``ast\_link'', as
-follows:\footnote{Use the ``$-$pgp'' option instead if you wish to use
-the Starlink version of PGPLOT which uses GKS to generate its output.}
-
-\begin{quote}
-\small
-\begin{verbatim}
-f77 prog.f -L/star/lib `ast_link -pgplot` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-again using \verb+g77 -fno-second-underscore+ in place of \verb+f77+ 
-on Linux systems.
-
-
-See the ``ast\_link'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\subsection{Building ADAM Applications that Use AST}
-
-Users of Starlink's \xref{ADAM}{sg4}{} programming environment
-\latex{(SG/4)} on UNIX should use the
-``\xref{alink}{sun144}{ADAM_link_scripts}'' command
-(\xref{SUN/144}{sun144}{}) to compile and link applications and can
-access the AST library by including execution of the command
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' on the command line, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-alink adamprog.f `ast_link_adam`
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of backward quote characters.
-
-By default, AST error messages produced by applications built in this
-way will be delivered {\em{via}} the Starlink EMS Error Message
-Service (\xref{SSN/4}{ssn4}{}) so that error handling by AST is
-consistent with the \xref{{\em{inherited
-status}}}{sun104}{inherited_status} error handling normally used in
-Starlink software.
-
-Switches may be given to the ``ast\_link\_adam'' command (in a similar
-way to ``\htmlref{ast\_link}{ast_link}''---\secref{ss:linking}) in order to link with
-additional AST-related facilities, such as a graphics interface. See
-the ``ast\_link\_adam'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\appendix
-\cleardoublepage
-\section{\label{ss:classhierarchy}The AST Class Hierarchy}
-The following table shows the hierarchy of classes in the AST library.
-For a description of each class, you should consult
-\appref{ss:classdescriptions}.
-
-\small
-\begin{verbatim}
-Object             - Base class for all AST Objects
-   Axis            - Store axis information
-      SkyAxis      - Store celestial axis information
-   Channel         - Basic (textual) I/O channel
-      FitsChan     - I/O Channel using FITS header cards
-      XmlChan      - I/O Channel using XML
-      StcsChan     - I/O Channel using IVOA STC-S descriptions
-   KeyMap          - Store a set of key/value pairs
-   Mapping         - Inter-relate two coordinate systems
-      CmpMap       - Compound Mapping
-      DssMap       - Map points using Digitised Sky Survey plate solution
-      Frame        - Coordinate system description
-         CmpFrame  - Compound Frame
-            SpecFluxFrame - Observed value versus spectral position
-         FluxFrame - Observed value at a given fixed spectral position
-         FrameSet  - Set of inter-related coordinate systems
-            Plot   - Provide facilities for graphical output
-         Region    - Specify areas within a coordinate system
-            Box    - A box region with sides parallel to the axes of a Frame
-            Circle - A circular or spherical region within a Frame
-            CmpRegion  - A combination of two regions within a single Frame
-            Ellipse    - An elliptical region within a 2-dimensional Frame
-            Interval   - Intervals on one or more axes of a Frame.
-            NullRegion - A boundless region within a Frame
-            PointList  - A collection of points in a Frame
-            Polygon    - A polygonal region within a 2-dimensional Frame
-            Prism  - An extrusion of a Region into orthogonal dimensions
-            Stc    - Represents an generic instance of an IVOA STC-X description
-               StcResourceProfile - Represents an an IVOA STC-X ResourceProfile
-               StcSearchLocation  - Represents an an IVOA STC-X SearchLocation
-               StcCatalogEntryLocation - Represents an an IVOA STC-X CatalogEntryLocation
-               StcObsDataLocation - Represents an an IVOA STC-X ObsDataLocation
-         SkyFrame  - Celestial coordinate system description
-         SpecFrame - Spectral coordinate system description
-            DSBSpecFrame - Dual sideband spectral coordinate system description
-         TimeFrame - Time coordinate system description
-      GrismMap     - Models the spectral dispersion produced by a grism
-      IntraMap     - Map points using a private transformation function
-      LutMap       - Transform 1-dimensional coordinates using a lookup table
-      MathMap      - Transform coordinates using mathematical expressions
-      MatrixMap    - Map positions by multiplying them by a matrix
-      NormMap      - Normalise coordinates using a supplied Frame
-      PcdMap       - Apply 2-dimensional pincushion/barrel distortion
-      PermMap      - Coordinate permutation Mapping
-      PolyMap      - General N-dimensional polynomial Mapping
-      RateMap      - Calculates an element of a Mapping's Jacobian matrix 
-      SelectorMap  - Locates positions within a set of Regions
-      ShiftMap     - Shifts each axis by a constant amount
-      SlaMap       - Sequence of celestial coordinate conversions
-      SpecMap      - Sequence of spectral coordinate conversions
-      SphMap       - Map 3-d Cartesian to 2-d spherical coordinates
-      SwitchMap    - Encapuslates a set of alternate Mappings
-      TimeMap      - Sequence of time coordinate conversions
-      TranMap      - Combine fwd. and inv. transformations from two Mappings
-      UnitMap      - Unit (null) Mapping
-      WcsMap       - Implement a FITS-WCS sky projection
-      WinMap       - Match windows by scaling and shifting each axis
-      ZoomMap      - Zoom coordinates about the origin
-\end{verbatim}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:functiondescriptions}AST Routine Descriptions}
-\small
-\sstroutine{
-   AST\_SET\sstlabel{AST_SET}
-}{
-   Set attribute values for an Object
-}{
-   \sstdescription{
-      This routine assigns a set of attribute values to an \htmlref{Object}{Object},
-      over-riding any previous values. The attributes and their new
-      values are specified via a character string, which should
-      contain a comma-separated list of the form:
-
-         {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
-      where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
-      to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
-      representation of the value to be assigned. This value will be
-      interpreted according to the attribute's data type.
-   }
-   \sstinvocation{
-      CALL AST\_SET( THIS, SETTINGS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         SETTINGS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a comma-separated list of
-         attribute settings in the form described above.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         CALL AST\_SET( MAP, '\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0', STATUS )
-      }{
-         Sets the Report attribute for Object MAP to the value 1 and
-         the Zoom attribute to 25.0.
-      }
-      \sstexamplesubsection{
-         CALL AST\_SET( FRAME, 'Label( 1 ) =Offset from cluster axis', STATUS )
-      }{
-         Sets the Label(1) attribute for Object FRAME to a suitable
-         string.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         White space may also surround attribute values, where it will
-         generally be ignored (except for string-valued attributes where
-         it is significant and forms part of the value to be assigned).
-
-         \sstitem
-         It is not possible to include a comma in the value to be
-         assigned to an attribute using this routine. If such a value is
-         needed, then AST\_SETC should be used instead.
-
-         \sstitem
-         An error will result if an attempt is made to set a value for
-         a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   AST\_ADDFRAME\sstlabel{AST_ADDFRAME}
-}{
-   Add a Frame to a FrameSet to define a new coordinate system
-}{
-   \sstdescription{
-      This routine adds a new \htmlref{Frame}{Frame} and an associated \htmlref{Mapping}{Mapping} to a
-      \htmlref{FrameSet}{FrameSet} so as to define a new coordinate system, derived from
-      one which already exists within the FrameSet. The new Frame then
-      becomes the FrameSet's current Frame.
-
-      This routine
-      may also be used to merge two FrameSets, or to append extra axes
-      to every Frame in a FrameSet.
-   }
-   \sstinvocation{
-      CALL AST\_ADDFRAME( THIS, IFRAME, MAP, FRAME, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         IFRAME = INTEGER (Given)
-      }{
-         The index of the Frame within the FrameSet which describes
-         the coordinate system upon which the new one is to be based.
-         This value should lie in the range from 1 to the number of
-         Frames already in the FrameSet (as given by its \htmlref{Nframe}{Nframe}
-         attribute). As a special case, AST\_\_ALLFRAMES may be supplied,
-         in which case the axes defined by the supplied Frame are appended
-         to every Frame in the FrameSet (see the Notes section for details).
-      }
-      \sstsubsection{
-         MAP = INTEGER (Given)
-      }{
-         Pointer to a Mapping which describes how to convert
-         coordinates from the old coordinate system (described by the
-         Frame with index IFRAME) into coordinates in the new
-         system. The Mapping's forward transformation should perform
-         this conversion, and its inverse transformation should
-         convert in the opposite direction. The supplied Mapping is ignored
-         if parameter IFRAME is equal to AST\_\_ALLFRAMES.
-      }
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         Pointer to a Frame that describes the new coordinate system.
-         Any class of Frame may be supplied (including Regions and
-         FrameSets).
-
-         This routine may also be used to merge two FrameSets by
-         supplying a pointer to a second FrameSet for this argument
-         (see the Notes section for details).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         IFRAME argument to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         This routine sets the value of the \htmlref{Current}{Current} attribute for the
-         FrameSet so that the new Frame subsequently becomes the current
-         Frame.
-
-         \sstitem
-         The number of input coordinate values accepted by the supplied
-         Mapping (its \htmlref{Nin}{Nin} attribute) must match the number of axes in the
-         Frame identified by the IFRAME argument. Similarly, the
-         number of output coordinate values generated by this Mapping
-         (its \htmlref{Nout}{Nout} attribute) must match the number of axes in the new
-         Frame.
-
-         \sstitem
-         As a special case, if a pointer to a FrameSet is given for the
-         FRAME argument, this is treated as a request to merge a pair of
-         FrameSets.  This is done by appending all the new Frames (in the
-         FRAME FrameSet) to the original FrameSet, while preserving
-         their order and retaining all the inter-relationships
-         (i.e. Mappings) between them. The two sets of Frames are
-         inter-related within the merged FrameSet by using the Mapping
-         supplied. This should convert between the Frame identified by
-         the IFRAME argument (in the original FrameSet) and the current
-         Frame of the FRAME FrameSet. This latter Frame becomes the
-         current Frame in the merged FrameSet.
-
-         \sstitem
-         As another special case, if a value of AST\_\_ALLFRAMES is supplied
-         for parameter
-         IFRAME,
-         then the supplied Mapping is ignored, and the axes defined by the
-         supplied Frame are appended to each Frame in the FrameSet. In detail,
-         each Frame in the FrameSet is replaced by a \htmlref{CmpFrame}{CmpFrame} containing the
-         original Frame and the Frame specified by parameter
-         FRAME.
-         In addition, each Mapping in the FrameSet is replaced by a \htmlref{CmpMap}{CmpMap}
-         containing the original Mapping and a \htmlref{UnitMap}{UnitMap} in parallel. The Nin and
-         Nout attributes of the UnitMap are set equal to the number of axes
-         in the supplied Frame. Each new CmpMap is simplified using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-         before being stored in the FrameSet.
-      }
-   }
-}
-\sstroutine{
-   AST\_ANGLE\sstlabel{AST_ANGLE}
-}{
-   Calculate the angle subtended by two points at a third point
-}{
-   \sstdescription{
-      This routine
-      finds the angle at point B between the line joining points A and B,
-      and the line joining points C and B. These lines will in fact be
-      geodesic curves appropriate to the \htmlref{Frame}{Frame} in use. For instance, in
-      \htmlref{SkyFrame}{SkyFrame}, they will be great circles.
-   }
-   \sstinvocation{
-      RESULT = AST\_ANGLE( THIS, A, B, C, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         A( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
-      }
-      \sstsubsection{
-         B( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute) containing the coordinates of the second point.
-      }
-      \sstsubsection{
-         C( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute) containing the coordinates of the third point.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_ANGLE = DOUBLE PRECISION
-      }{
-         The angle in radians, from the line AB to the line CB. If the
-         Frame is 2-dimensional, it will be in the range \$$\backslash$pm $\backslash$pi\$,
-         and positive rotation is in the same sense as rotation from
-         the positive direction of axis 2 to the positive direction of
-         axis 1. If the Frame has more than 2 axes, a positive value will
-         always be returned in the range zero to \$$\backslash$pi\$.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BAD will also be returned if points A and B are
-         co-incident, or if points B and C are co-incident.
-
-         \sstitem
-         A value of AST\_\_BAD will also be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_ANNUL\sstlabel{AST_ANNUL}
-}{
-   Annul a pointer to an Object
-}{
-   \sstdescription{
-      This routine annuls a pointer to an \htmlref{Object}{Object} so that it is no
-      longer recognised as a valid pointer by the AST library. Any
-      resources associated with the pointer are released and made
-      available for re-use.
-
-      This routine also decrements the Object's \htmlref{RefCount}{RefCount} attribute by
-      one. If this attribute reaches zero (which happens when the last
-      pointer to the Object is annulled), then the Object is deleted.
-   }
-   \sstinvocation{
-      CALL AST\_ANNUL( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given and Returned)
-      }{
-         The Object pointer to be annulled. A null pointer value (AST\_\_NULL)
-         is always returned.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine attempts to execute even if STATUS is set to an
-         error value
-         on entry, although no further error report will be
-         made if it subsequently fails under these circumstances. In
-         particular, it will fail if the pointer suppled is not valid,
-         but this will only be reported if the error status is clear on
-         entry.
-      }
-   }
-}
-\sstroutine{
-   AST\_AXANGLE\sstlabel{AST_AXANGLE}
-}{
-   Returns the angle from an axis, to a line through two points
-}{
-   \sstdescription{
-      This routine
-      finds the angle, as seen from point A, between the positive
-      direction of a specified axis, and the geodesic curve joining point
-      A to point B.
-   }
-   \sstinvocation{
-      RESULT = AST\_AXANGLE( THIS, A, B, AXIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         A( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
-      }
-      \sstsubsection{
-         B( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute) containing the coordinates of the second point.
-      }
-      \sstsubsection{
-         AXIS = INTEGER (Given)
-      }{
-         The number of the Frame axis from which the angle is to be
-         measured (axis numbering starts at 1 for the first axis).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_AXANGLE = DOUBLE PRECISION
-      }{
-         The angle in radians, from the positive direction of the
-         specified axis, to the line AB. If the Frame is 2-dimensional,
-         it will be in the range [-PI/2,$+$PI/2], and positive rotation is in
-         the same sense as rotation from the positive direction of axis 2
-         to the positive direction of axis 1. If the Frame has more than 2
-         axes, a positive value will always be returned in the range zero
-         to PI.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The geodesic curve used by this routine is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value, or if the require
-         position angle is undefined.
-      }
-   }
-}
-\sstroutine{
-   AST\_AXDISTANCE\sstlabel{AST_AXDISTANCE}
-}{
-   Find the distance between two axis values
-}{
-   \sstdescription{
-      This routine returns a signed value representing the axis increment
-      from axis value v1 to axis value v2.
-
-      For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
-      difference between the two axis values. But for other derived classes
-      of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
-   }
-   \sstinvocation{
-      RESULT = AST\_AXDISTANCE( THIS, AXIS, V1, V2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         AXIS = INTEGER (Given)
-      }{
-         The index of the axis to which the supplied values refer. The
-         first axis has index 1.
-      }
-      \sstsubsection{
-         V1 = DOUBLE PRECISION (Given)
-      }{
-         The first axis value.
-      }
-      \sstsubsection{
-         V2 = DOUBLE PRECISION (Given)
-      }{
-         The second axis value.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_AXDISTANCE = DOUBLE PRECISION
-      }{
-         The distance from the first to the second axis value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
-         any of the input values has this value.
-
-         \sstitem
-         A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_AXOFFSET\sstlabel{AST_AXOFFSET}
-}{
-   Add an increment onto a supplied axis value
-}{
-   \sstdescription{
-      This routine returns an axis value formed by adding a signed axis
-      increment onto a supplied axis value.
-
-      For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
-      sum of the two supplied values. But for other derived classes
-      of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
-   }
-   \sstinvocation{
-      RESULT = AST\_AXOFFSET( THIS, AXIS, V1, DIST, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         AXIS = INTEGER (Given)
-      }{
-         The index of the axis to which the supplied values refer. The
-         first axis has index 1.
-      }
-      \sstsubsection{
-         V1 = DOUBLE PRECISION (Given)
-      }{
-         The original axis value.
-      }
-      \sstsubsection{
-         DIST = DOUBLE PRECISION (Given)
-      }{
-         The axis increment to add to the original axis value.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_AXOFFSET = DOUBLE PRECISION
-      }{
-         The incremented axis value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
-         any of the input values has this value.
-
-         \sstitem
-         A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_BEGIN\sstlabel{AST_BEGIN}
-}{
-   Begin a new AST context
-}{
-   \sstdescription{
-      This routine begins a new AST context. Any \htmlref{Object}{Object} pointers
-      created within this context will be annulled when it is later
-      ended using \htmlref{AST\_END}{AST_END} (just as if \htmlref{AST\_ANNUL}{AST_ANNUL} had been invoked),
-      unless they have first been exported using \htmlref{AST\_EXPORT}{AST_EXPORT} or rendered
-      exempt using \htmlref{AST\_EXEMPT}{AST_EXEMPT}. If
-      annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
-      fall to zero (which happens when the last pointer to it is
-      annulled), then the Object will be deleted.
-   }
-   \sstinvocation{
-      CALL AST\_BEGIN( STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine attempts to execute even if STATUS is set to an
-         error value.
-
-         \sstitem
-         Contexts delimited by AST\_BEGIN and AST\_END may be nested to any
-         depth.
-      }
-   }
-}
-\sstroutine{
-   AST\_BORDER\sstlabel{AST_BORDER}
-}{
-   Draw a border around valid regions of a Plot
-}{
-   \sstdescription{
-      This function draws a (line) border around regions of the
-      plotting area of a \htmlref{Plot}{Plot} which correspond to valid, unclipped
-      physical coordinates. For example, when plotting using an
-      all-sky map projection, this function could be used to draw the
-      boundary of the celestial sphere when it is projected on to the
-      plotting surface.
-
-      If the entire plotting area contains valid, unclipped physical
-      coordinates, then the boundary will just be a rectangular box
-      around the edges of the plotting area.
-
-      If the Plot is a \htmlref{Plot3D}{Plot3D}, this method is applied individually to
-      each of the three 2D Plots encapsulated within the Plot3D (each of
-      these Plots corresponds to a single 2D plane in the 3D graphics
-      system). In addition, if the entire plotting volume has valid
-      coordinates in the 3D current \htmlref{Frame}{Frame} of the Plot3D, then additional
-      lines are drawn along the edges of the 3D plotting volume so that
-      the entire plotting volume is enclosed within a cuboid grid.
-   }
-   \sstinvocation{
-      RESULT = AST\_BORDER( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_BORDER = LOGICAL
-      }{
-         .FALSE. is returned if the plotting space is completely filled by
-         valid, unclipped physical coordinates (so that only a
-         rectangular box was drawn around the edge). Otherwise, .TRUE. is
-         returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of .FALSE. will be returned if this function is invoked
-         with STATUS set to an error value, or if it should fail for any
-         reason.
-
-         \sstitem
-         An error results if either the current Frame or the base Frame
-         of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the base
-         and current Frames of the Plot is not defined (i.e. the Plot's
-         \htmlref{TranForward}{TranForward} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_BOUNDINGBOX\sstlabel{AST_BOUNDINGBOX}
-}{
-   Return a bounding box for previously drawn graphics
-}{
-   \sstdescription{
-      This routine returns the bounds of a box which just encompasess the
-      graphics produced by the previous call to any of the \htmlref{Plot}{Plot} methods
-      which produce graphical output. If no such previous call has yet
-      been made, or if the call failed for any reason, then the bounding box
-      returned by this routine is undefined.
-   }
-   \sstinvocation{
-      CALL AST\_BOUNDINGBOX( THIS, LBND, UBND, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         LBND( 2 ) = REAL (Returned)
-      }{
-         A two element array in which is returned the lower limits of the
-         bounding box on each of the two axes of the graphics coordinate
-         system (the base \htmlref{Frame}{Frame} of the Plot).
-      }
-      \sstsubsection{
-         UBND( 2 ) = REAL (Returned)
-      }{
-         A two element array in which is returned the upper limits of the
-         bounding box on each of the two axes of the graphics coordinate
-         system (the base Frame of the Plot).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error results if the base Frame of the Plot is not
-         2-dimensional.
-      }
-   }
-}
-\sstroutine{
-   AST\_BOX\sstlabel{AST_BOX}
-}{
-   Create a Box
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Box}{Box} and optionally initialises its
-      attributes.
-
-      The Box class implements a \htmlref{Region}{Region} which represents a box with sides
-      parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
-      range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
-      only real difference being that the Interval class allows some axis
-      limits to be unspecified. Note, a Box will only look like a box if
-      the Frame geometry is approximately flat. For instance, a Box centred
-      close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
-      (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
-      pole).
-   }
-   \sstinvocation{
-      RESULT = AST\_BOX( FRAME, FORM, POINT1, POINT2, UNC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         FORM = INTEGER (Given)
-      }{
-         Indicates how the box is described by the remaining parameters.
-         A value of zero indicates that the box is specified by a centre
-         position and a corner position. A value of one indicates that the
-         box is specified by a two opposite corner positions.
-      }
-      \sstsubsection{
-         POINT1( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). If
-         FORM
-         is zero, this array should contain the coordinates at the centre of
-         the box.
-         If FORM
-         is one, it should contain the coordinates at the corner of the box
-         which is diagonally opposite the corner specified by
-         POINT2.
-      }
-      \sstsubsection{
-         POINT2( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute) containing the coordinates at any corner of the
-         box.
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the Box being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Box. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_BOX = INTEGER
-      }{
-         A pointer to the new Box.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_CHANNEL\sstlabel{AST_CHANNEL}
-}{
-   Create a Channel
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Channel}{Channel} and optionally initialises
-      its attributes.
-
-      A Channel implements low-level input/output for the AST library.
-      Writing an \htmlref{Object}{Object} to a Channel (using \htmlref{AST\_WRITE}{AST_WRITE}) will generate a
-      textual representation of that Object, and reading from a
-      Channel (using \htmlref{AST\_READ}{AST_READ}) will create a new Object from its
-      textual representation.
-
-      Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
-      by reading and writing the resulting text. By default, however,
-      a Channel will read from standard input and write to standard
-      output.
-   }
-   \sstinvocation{
-      RESULT = AST\_CHANNEL( SOURCE, SINK, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         SOURCE = SUBROUTINE (Given)
-      }{
-         A source routine, which is a subroutine which takes a single
-         integer error status argument.  This routine will be used by
-         the Channel to obtain lines of input text. On each
-         invocation, it should read the next input line from some
-         external data store, and then return the resulting text to
-         the AST library by calling \htmlref{AST\_PUTLINE}{AST_PUTLINE}. It should supply a
-         negative line length when there are no more lines to read.
-         If an error occurs, it should set its own error status
-         argument to an error value before returning.
-
-         If the null routine AST\_NULL is suppied as the SOURCE value,
-         the Channel will read from standard input instead.
-      }
-      \sstsubsection{
-         SINK = SUBROUTINE (Given)
-      }{
-         A sink routine, which is a subroutine which takes a single
-         integer error status argument.  This routine will be used by
-         the Channel to deliver lines of output text. On each
-         invocation, it should obtain the next output line from the
-         AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE}, and then deliver the
-         resulting text to some external data store.  If an error
-         occurs, it should set its own error status argument to an
-         error value before returning.
-
-         If the null routine AST\_NULL is suppied as the SINK value,
-         the Channel will write to standard output instead.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Channel. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CHANNEL = INTEGER
-      }{
-         A pointer to the new Channel.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The names of the routines supplied for the SOURCE and SINK
-         arguments should appear in EXTERNAL statements in the Fortran
-         routine which invokes AST\_CHANNEL. However, this is not generally
-         necessary for the null routine AST\_NULL (so long as the AST\_PAR
-         include file has been used).
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-
-         \sstitem
-         Note that the null routine AST\_NULL (one underscore) is
-         different to AST\_\_NULL (two underscores), which is the null Object
-         pointer.
-      }
-   }
-}
-\sstroutine{
-   AST\_CIRCLE\sstlabel{AST_CIRCLE}
-}{
-   Create a Circle
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Circle}{Circle} and optionally initialises its
-      attributes.
-
-      A Circle is a \htmlref{Region}{Region} which represents a circle or sphere within the
-      supplied \htmlref{Frame}{Frame}.
-   }
-   \sstinvocation{
-      RESULT = AST\_CIRCLE( FRAME, FORM, CENTRE, POINT, UNC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         FORM = INTEGER (Given)
-      }{
-         Indicates how the circle is described by the remaining parameters.
-         A value of zero indicates that the circle is specified by a
-         centre position and a position on the circumference. A value of one
-         indicates that the circle is specified by a centre position and a
-         scalar radius.
-      }
-      \sstsubsection{
-         CENTRE( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates at the centre of
-         the circle or sphere.
-      }
-      \sstsubsection{
-         POINT( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         If FORM
-         is zero, then this array should have one element for each Frame
-         axis (Naxes attribute), and should be supplied holding the
-         coordinates at a point on the circumference of the circle or sphere.
-         If FORM
-         is one, then this array should have one element only which should
-         be supplied holding the scalar radius of the circle or sphere,
-         as a geodesic distance within the Frame.
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the Circle being created.
-         The uncertainty in any point on the boundary of the Circle is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. \htmlref{Box}{Box}, Circle, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Circle. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Circle being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Circle. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CIRCLE = INTEGER
-      }{
-         A pointer to the new Circle.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_CIRCLEPARS\sstlabel{AST_CIRCLEPARS}
-}{
-   Returns the geometric parameters of an Circle
-}{
-   \sstdescription{
-      This routine
-      returns the geometric parameters describing the supplied \htmlref{Circle}{Circle}.
-   }
-   \sstinvocation{
-      CALL AST\_CIRCLEPARS( THIS, CENTRE, RADIUS, P1, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         CENTRE( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array
-         in which to return the coordinates of the Circle centre.
-         The length of this array should be no less than the number of
-         axes in the associated coordinate system.
-      }
-      \sstsubsection{
-         RADIUS = DOUBLE PRECISION (Returned)
-      }{
-         Returned holding the radius of the Circle, as an geodesic
-         distance in the associated coordinate system.
-      }
-      \sstsubsection{
-         P1( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array
-         in which to return the coordinates of a point on the
-         circumference of the Circle. The length of this array should be
-         no less than the number of axes in the associated coordinate system.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the coordinate system represented by the Circle has been
-         changed since it was first created, the returned parameters refer
-         to the new (changed) coordinate system, rather than the original
-         coordinate system. Note however that if the transformation from
-         original to new coordinate system is non-linear, the shape
-         represented by the supplied Circle object may not be an accurate
-         circle.
-      }
-   }
-}
-\sstroutine{
-   AST\_CLEAR\sstlabel{AST_CLEAR}
-}{
-   Clear attribute values for an Object
-}{
-   \sstdescription{
-      This routine clears the values of a specified set of attributes
-      for an \htmlref{Object}{Object}. Clearing an attribute cancels any value that has
-      previously been explicitly set for it, so that the standard
-      default attribute value will subsequently be used instead. This
-      also causes the \htmlref{AST\_TEST}{AST_TEST} function to return the value .FALSE. for
-      the attribute, indicating that no value has been set.
-   }
-   \sstinvocation{
-      CALL AST\_CLEAR( THIS, ATTRIB, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a comma-separated list of the
-         names of the attributes to be cleared.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         It does no harm to clear an attribute whose value has not been
-         set.
-
-         \sstitem
-         An error will result if an attempt is made to clear the value
-         of a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   AST\_CLIP\sstlabel{AST_CLIP}
-}{
-   Set up or remove clipping for a Plot
-}{
-   \sstdescription{
-      This routine defines regions of a \htmlref{Plot}{Plot} which are to be clipped.
-      Any subsequent graphical output created using the Plot will then
-      be visible only within the unclipped regions of the plotting
-      area. See also the \htmlref{Clip}{Clip} attribute.
-   }
-   \sstinvocation{
-      CALL AST\_CLIP( THIS, IFRAME, LBND, UBND, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         IFRAME = INTEGER (Given)
-      }{
-         The index of the \htmlref{Frame}{Frame} within the Plot to which the clipping
-         limits supplied in LBND and UBND (below) refer. Clipping
-         may be applied to any of the coordinate systems associated
-         with a Plot (as defined by the Frames it contains), so this
-         index may take any value from 1 to the number of Frames in
-         the Plot (\htmlref{Nframe}{Nframe} attribute). In addition, the values
-         AST\_\_BASE and AST\_\_CURRENT may be used to specify the base
-         and current Frames respectively.
-
-         For example, a value of AST\_\_CURRENT causes clipping to be
-         performed in physical coordinates, while a value of AST\_\_BASE
-         would clip in graphical coordinates. Clipping may also be
-         removed completely by giving a value of AST\_\_NOFRAME. In this
-         case any clipping bounds supplied (below) are ignored.
-      }
-      \sstsubsection{
-         LBND( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each axis of the clipping Frame
-         (identified by the index IFRAME). This should contain the
-         lower bound, on each axis, of the region which is to remain
-         visible (unclipped).
-      }
-      \sstsubsection{
-         UBND( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each axis of the clipping Frame
-         (identified by the index IFRAME). This should contain the
-         upper bound, on each axis, of the region which is to remain
-         visible (unclipped).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Only one clipping Frame may be active at a time. This routine
-         will deactivate any previously-established clipping Frame before
-         setting up new clipping limits.
-
-         \sstitem
-         The clipping produced by this routine is in addition to that
-         specified by the Clip attribute which occurs at the edges of the
-         plotting area
-         established when the Plot is created (see \htmlref{AST\_PLOT}{AST_PLOT}). The
-         underlying graphics system may also impose further clipping.
-
-         \sstitem
-         When testing a graphical position for clipping, it is first
-         transformed into the clipping Frame. The resulting coordinate on
-         each axis is then checked against the clipping limits (given by
-         LBND and UBND). By default, a position is clipped if any
-         coordinate lies outside these limits. However, if a non-zero
-         value is assigned to the Plot's \htmlref{ClipOp}{ClipOp} attribute, then a
-         position is only clipped if the coordinates on all axes lie
-         outside their clipping limits.
-
-         \sstitem
-         If the lower clipping limit exceeds the upper limit for any
-         axis, then the sense of clipping for that axis is reversed (so
-         that coordinate values lying between the limits are clipped
-         instead of those lying outside the limits). To produce a {\tt{"}}hole{\tt{"}}
-         in a coordinate space (that is, an internal region where nothing
-         is plotted), you should supply all the bounds in reversed order,
-         and set the ClipOp attribute for the Plot to a non-zero value.
-
-         \sstitem
-         Either clipping limit may be set to the value AST\_\_BAD, which
-         is equivalent to setting it to infinity (or minus infinity for a
-         lower bound) so that it is not used.
-
-         \sstitem
-         If a graphical position results in any bad coordinate values
-         (AST\_\_BAD) when transformed into the clipping Frame, then it is
-         treated (for the purposes of producing graphical output) as if
-         it were clipped.
-
-         \sstitem
-         When a Plot is used as a \htmlref{Mapping}{Mapping} to transform points
-         (e.g. using \htmlref{AST\_TRAN2}{AST_TRAN2}), any clipped output points are assigned
-         coordinate values of AST\_\_BAD.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not
-         2-dimensional.
-      }
-   }
-}
-\sstroutine{
-   AST\_CLONE\sstlabel{AST_CLONE}
-}{
-   Clone (duplicate) an Object pointer
-}{
-   \sstdescription{
-      This function returns a duplicate pointer to an existing
-      \htmlref{Object}{Object}. It also increments the Object's \htmlref{RefCount}{RefCount} attribute to
-      keep track of how many pointers have been issued.
-
-      Note that this function is NOT equivalent to an assignment
-      statement, as in general the two pointers will not have the same
-      value.
-   }
-   \sstinvocation{
-      RESULT = AST\_CLONE( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Original pointer to the Object.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CLONE = INTEGER
-      }{
-         A duplicate pointer to the same Object.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_CMPFRAME\sstlabel{AST_CMPFRAME}
-}{
-   Create a CmpFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{CmpFrame}{CmpFrame} and optionally initialises
-      its attributes.
-
-      A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
-      (of any class) to be merged together to form a more complex
-      Frame. The axes of the two component Frames then appear together
-      in the resulting CmpFrame (those of the first Frame, followed by
-      those of the second Frame).
-
-      Since a CmpFrame is itself a Frame, it can be used as a
-      component in forming further CmpFrames. Frames of arbitrary
-      complexity may be built from simple individual Frames in this
-      way.
-
-      Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
-      Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
-      but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
-      (a sub-class of Frame), then the CmpFrame will use the Region as a
-      Mapping when transforming values for axes described by the Region.
-      Thus input axis values corresponding to positions which are outside the
-      Region will result in bad output axis values.
-   }
-   \sstinvocation{
-      RESULT = AST\_CMPFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME1 = INTEGER (Given)
-      }{
-         Pointer to the first component Frame.
-      }
-      \sstsubsection{
-         FRAME2 = INTEGER (Given)
-      }{
-         Pointer to the second component Frame.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new CmpFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CMPFRAME = INTEGER
-      }{
-         A pointer to the new CmpFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_CMPMAP\sstlabel{AST_CMPMAP}
-}{
-   Create a CmpMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{CmpMap}{CmpMap} and optionally initialises
-      its attributes.
-
-      A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
-      Mappings (of any class) to be connected together to form a more
-      complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
-      (where the first Mapping is used to transform the coordinates of
-      each point and the second mapping is then applied to the
-      result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
-      earlier coordinates for each point and the second Mapping
-      simultaneously transforms the later coordinates).
-
-      Since a CmpMap is itself a Mapping, it can be used as a
-      component in forming further CmpMaps. Mappings of arbitrary
-      complexity may be built from simple individual Mappings in this
-      way.
-   }
-   \sstinvocation{
-      RESULT = AST\_CMPMAP( MAP1, MAP2, SERIES, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         MAP1 = INTEGER (Given)
-      }{
-         Pointer to the first component Mapping.
-      }
-      \sstsubsection{
-         MAP2 = INTEGER (Given)
-      }{
-         Pointer to the second component Mapping.
-      }
-      \sstsubsection{
-         SERIES = LOGICAL (Given)
-      }{
-         If a .TRUE. value is given for this argument, the two
-         component Mappings will be connected in series. A
-         .FALSE. value requests that they are connected in parallel.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new CmpMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CMPMAP = INTEGER
-      }{
-         A pointer to the new CmpMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the component Mappings are connected in series, then using
-         the resulting CmpMap to transform coordinates will cause the
-         first Mapping to be applied, followed by the second Mapping. If
-         the inverse CmpMap transformation is requested, the two
-         component Mappings will be applied in both the reverse order and
-         the reverse direction.
-
-         \sstitem
-         When connecting two component Mappings in series, the number
-         of output coordinates generated by the first Mapping (its \htmlref{Nout}{Nout}
-         attribute) must equal the number of input coordinates accepted
-         by the second Mapping (its \htmlref{Nin}{Nin} attribute).
-
-         \sstitem
-         If the component Mappings of a CmpMap are connected in
-         parallel, then the first Mapping will be used to transform the
-         earlier input coordinates for each point (and to produce the
-         earlier output coordinates) and the second Mapping will be used
-         simultaneously to transform the remaining input coordinates (to
-         produce the remaining output coordinates for each point). If the
-         inverse transformation is requested, each Mapping will still be
-         applied to the same coordinates, but in the reverse direction.
-
-         \sstitem
-         When connecting two component Mappings in parallel, there is
-         no restriction on the number of input and output coordinates for
-         each Mapping.
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         AST\_CMPMAP (the new CmpMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a CmpMap containing a copy of its
-         component Mappings is required, then a copy of the CmpMap should
-         be made using \htmlref{AST\_COPY}{AST_COPY}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_CMPREGION\sstlabel{AST_CMPREGION}
-}{
-   Create a CmpRegion
-}{
-   \sstdescription{
-      This function creates a new \htmlref{CmpRegion}{CmpRegion} and optionally initialises
-      its attributes.
-
-      A CmpRegion is a \htmlref{Region}{Region} which allows two component
-      Regions (of any class) to be combined to form a more complex
-      Region. This combination may be performed a boolean AND, OR
-      or XOR (exclusive OR) operator. If the AND operator is
-      used, then a position is inside the CmpRegion only if it is
-      inside both of its two component Regions. If the OR operator is
-      used, then a position is inside the CmpRegion if it is inside
-      either (or both) of its two component Regions. If the XOR operator
-      is used, then a position is inside the CmpRegion if it is inside
-      one but not both of its two component Regions. Other operators can
-      be formed by negating one or both component Regions before using
-      them to construct a new CmpRegion.
-
-      The two component Region need not refer to the same coordinate
-      \htmlref{Frame}{Frame}, but it must be possible for the
-      \htmlref{AST\_CONVERT}{AST_CONVERT}
-      function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
-      reported otherwise when the CmpRegion is created). For instance,
-      a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
-      with a Region defined within a Galactic SkyFrame. This is
-      acceptable because the SkyFrame class knows how to convert between
-      these two systems, and consequently the
-      AST\_CONVERT
-      function will also be able to convert between them. In such cases,
-      the second component Region will be mapped into the coordinate Frame
-      of the first component Region, and the Frame represented by the
-      CmpRegion as a whole will be the Frame of the first component Region.
-
-      Since a CmpRegion is itself a Region, it can be used as a
-      component in forming further CmpRegions. Regions of arbitrary
-      complexity may be built from simple individual Regions in this
-      way.
-   }
-   \sstinvocation{
-      RESULT = AST\_CMPREGION( REGION1, REGION2, OPER, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         REGION1 = INTEGER (Given)
-      }{
-         Pointer to the first component Region.
-      }
-      \sstsubsection{
-         REGION2 = INTEGER (Given)
-      }{
-         Pointer to the second component Region. This Region will be
-         transformed into the coordinate Frame of the first region before
-         use. An error will be reported if this is not possible.
-      }
-      \sstsubsection{
-         OPER = INTEGER (Given)
-      }{
-         The boolean operator with which to combine the two Regions. This
-         must be one of the symbolic constants AST\_\_AND, AST\_\_OR or AST\_\_XOR.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new CmpRegion. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CMPREGION = INTEGER
-      }{
-         A pointer to the new CmpRegion.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If one of the supplied Regions has an associated uncertainty,
-         that uncertainty will also be used for the returned CmpRegion.
-         If both supplied Regions have associated uncertainties, the
-         uncertainty associated with the first Region will be used for the
-         returned CmpRegion.
-
-         \sstitem
-         Deep copies are taken of the supplied Regions. This means that
-         any subsequent changes made to the component Regions using the
-         supplied pointers will have no effect on the CmpRegion.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_CONVERT\sstlabel{AST_CONVERT}
-}{
-   Determine how to convert between two coordinate systems
-}{
-   \sstdescription{
-      This function compares two Frames and determines whether it is
-      possible to convert between the coordinate systems which they
-      represent. If conversion is possible, it returns a \htmlref{FrameSet}{FrameSet}
-      which describes the conversion and which may be used (as a
-      \htmlref{Mapping}{Mapping}) to transform coordinate values in either direction.
-
-      The same function may also be used to determine how to convert
-      between two FrameSets (or between a \htmlref{Frame}{Frame} and a FrameSet, or
-      vice versa). This mode is intended for use when (for example)
-      two images have been calibrated by attaching a FrameSet to each.
-      AST\_CONVERT might then be used to search for a
-      celestial coordinate system that both images have in common, and
-      the result could then be used to convert between the pixel
-      coordinates of both images -- having effectively used their
-      celestial coordinate systems to align them.
-
-      When using FrameSets, there may be more than one possible
-      intermediate coordinate system in which to perform the
-      conversion (for instance, two FrameSets might both have
-      celestial coordinates, detector coordinates, pixel coordinates,
-      etc.). A comma-separated list of coordinate system domains may
-      therefore be given which defines a priority order to use when
-      selecting the intermediate coordinate system.  The path used for
-      conversion must go via an intermediate coordinate system whose
-      \htmlref{Domain}{Domain} attribute matches one of the domains given. If conversion
-      cannot be achieved using the first domain, the next one is
-      considered, and so on, until success is achieved.
-   }
-   \sstinvocation{
-      RESULT = AST\_CONVERT( FROM, TO, DOMAINLIST, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FROM = INTEGER (Given)
-      }{
-         Pointer to a Frame which represents the {\tt{"}}source{\tt{"}} coordinate
-         system.  This is the coordinate system in which you already
-         have coordinates available.
-
-         If a FrameSet is given, its current Frame (as determined by
-         its \htmlref{Current}{Current} attribute) is taken to describe the source
-         coordinate system. Note that the \htmlref{Base}{Base} attribute of this
-         FrameSet may be modified by this function to indicate which
-         intermediate coordinate system was used (see under
-         {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
-      }
-      \sstsubsection{
-         TO = INTEGER (Given)
-      }{
-         Pointer to a Frame which represents the {\tt{"}}destination{\tt{"}}
-         coordinate system. This is the coordinate system into which
-         you wish to convert your coordinates.
-
-         If a FrameSet is given, its current Frame (as determined by
-         its Current attribute) is taken to describe the destination
-         coordinate system. Note that the Base attribute of this
-         FrameSet may be modified by this function to indicate which
-         intermediate coordinate system was used (see under
-         {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
-      }
-      \sstsubsection{
-         DOMAINLIST = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a
-         comma-separated list of Frame domains. This may be used to
-         define a priority order for the different intermediate
-         coordinate systems that might be used to perform the
-         conversion.
-
-         The function will first try to obtain a conversion by making
-         use only of an intermediate coordinate system whose Domain
-         attribute matches the first domain in this list. If this
-         fails, the second domain in the list will be used, and so on,
-         until conversion is achieved. A blank domain (e.g. two
-         consecutive commas) indicates that all coordinate systems
-         should be considered, regardless of their domains.
-
-         This list is case-insensitive and all white space is ignored.
-         If you do not wish to restrict the domain in this way,
-         you should supply a blank string. This is normally
-         appropriate if either of the source or destination coordinate
-         systems are described by Frames (rather than FrameSets),
-         since there is then usually only one possible choice of
-         intermediate coordinate system.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         If the \htmlref{AlignSideBand}{AlignSideBand} attribute is non-zero, alignment occurs in the
-         upper sideband expressed within the spectral system and standard of
-         rest given by attributes \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}. If
-         AlignSideBand is zero, the two DSBSpecFrames are aligned as if
-         they were simple SpecFrames (i.e. the \htmlref{SideBand}{SideBand} is ignored).
-      }
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames. Alignment occurs within the
-         coordinate system given by attribute AlignSystem.
-      }
-      \sstsubsection{
-         FrameSet
-      }{
-         If either of the FROM or TO arguments is a pointer to a
-         FrameSet, then AST\_CONVERT will attempt to convert from the
-         coordinate system described by the current Frame of the FROM
-         FrameSet to that described by the current Frame of the TO
-         FrameSet.
-
-         To achieve this, it will consider all of the Frames within
-         each FrameSet as a possible way of reaching an intermediate
-         coordinate system that can be used for the conversion. There
-         is then the possibility that more than one conversion path
-         may exist and, unless the choice is sufficiently restricted
-         by the DOMAINLIST string, the sequence in which the Frames
-         are considered can be important. In this case, the search
-         for a conversion path proceeds as follows:
-         \sstitemlist{
-
-            \sstitem
-            Each field in the DOMAINLIST string is considered in turn.
-
-            \sstitem
-            The Frames within each FrameSet are considered in a
-            specific order: (1) the base Frame is always considered
-            first, (2) after this come all the other Frames in
-            Frame-index order (but omitting the base and current Frames),
-            (3) the current Frame is always considered last.  However, if
-            either FrameSet's \htmlref{Invert}{Invert} attribute is set to a non-zero value
-            (so that the FrameSet is inverted), then its Frames are
-            considered in reverse order. (Note that this still means that
-            the base Frame is considered first and the current Frame
-            last, because the Invert value will also cause these Frames
-            to swap places.)
-
-            \sstitem
-            All source Frames are first considered (in the appropriate
-            order) for conversion to the first destination Frame. If no
-            suitable intermediate coordinate system emerges, they are
-            then considered again for conversion to the second
-            destination Frame (in the appropriate order), and so on.
-
-            \sstitem
-            Generally, the first suitable intermediate coordinate
-            system found is used. However, the overall Mapping between
-            the source and destination coordinate systems is also
-            examined.  Preference is given to cases where both the
-            forward and inverse transformations are defined (as indicated
-            by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes). If only one
-            transformation is defined, the forward one is preferred.
-
-            \sstitem
-            If the domain of the intermediate coordinate system matches
-            the current DOMAINLIST field, the conversion path is
-            accepted. Otherwise, the next DOMAINLIST field is considered
-            and the process repeated.
-
-         }
-         If conversion is possible, the Base attributes of the two
-         FrameSets will be modified on exit to identify the Frames
-         used to access the intermediate coordinate system which was
-         finally accepted.
-
-         Note that it is possible to force a particular Frame within a
-         FrameSet to be used as the basis for the intermediate
-         coordinate system, if it is suitable, by (a) focussing
-         attention on
-         it by specifying its domain in the DOMAINLIST string, or (b)
-         making it the base Frame, since this is always considered
-         first.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         Alignment occurs within the spectral system and standard of rest
-         given by attributes AlignSystem and AlignStdOfRest.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         Alignment occurs within the time system and time scale given by
-         attributes AlignSystem and \htmlref{AlignTimeScale}{AlignTimeScale}.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CONVERT = INTEGER
-      }{
-         If the requested coordinate conversion is possible, the
-         function returns a pointer to a FrameSet which describes the
-         conversion. Otherwise, a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is
-         returned without error.
-
-         If a FrameSet is returned, it will contain two Frames. Frame
-         number 1 (its base Frame) will describe the source coordinate
-         system, corresponding to the FROM argument. Frame number 2
-         (its current Frame) will describe the destination coordinate
-         system, corresponding to the TO argument. The Mapping
-         which inter-relates these two Frames will perform the
-         required conversion between their respective coordinate
-         systems.
-
-         Note that a FrameSet may be used both as a Mapping and as a
-         Frame.  If the result is used as a Mapping (e.g. with
-         \htmlref{AST\_TRAN2}{AST_TRAN2}), then it provides a means of converting coordinates
-         from the source to the destination coordinate system (or
-         vice versa if its inverse transformation is selected). If it
-         is used as a Frame, its attributes will describe the
-         destination coordinate system.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         CVT = AST\_CONVERT( A, B, ' ', STATUS )
-      }{
-         Attempts to convert between the coordinate systems represented
-         by A and B (assumed to be Frames). If successful, a FrameSet
-         is returned via the CVT pointer which may be used to apply the
-         conversion to sets of coordinates (e.g. using AST\_TRAN2).
-      }
-      \sstexamplesubsection{
-         CVT = AST\_CONVERT( \htmlref{AST\_SKYFRAME}{AST_SKYFRAME}( ' ', STATUS ), AST\_SKYFRAME( '\htmlref{Equinox}{Equinox}=2005', STATUS ), ' ', STATUS )
-      }{
-         Creates a FrameSet which describes precession in the default
-         FK5 celestial coordinate system between equinoxes J2000 (also
-         the default) and J2005. The returned CVT pointer may then
-         be passed to AST\_TRAN2 to apply this precession correction to
-         any number of coordinate values given in radians.
-
-         Note that the returned FrameSet also contains information
-         about how to format coordinate values. This means that
-         setting its \htmlref{Report}{Report} attribute to 1 is a simple way to obtain
-         printed output (formatted in sexagesimal notation) to show
-         the coordinate values before and after conversion.
-      }
-      \sstexamplesubsection{
-         CVT = AST\_CONVERT( A, B, 'SKY,DETECTOR,', STATUS )
-      }{
-         Attempts to convert between the coordinate systems
-         represented by the current Frames of A and B
-         (now assumed to be FrameSets), via the intermediate {\tt{"}}SKY{\tt{"}}
-         coordinate system.  This, by default, is the Domain
-         associated with a celestial coordinate system represented by
-         a \htmlref{SkyFrame}{SkyFrame}.
-
-         If this fails (for example, because either FrameSet lacks
-         celestial coordinate information), then the user-defined
-         {\tt{"}}DETECTOR{\tt{"}} coordinate system is used instead. If this also
-         fails, then all other possible ways of achieving conversion
-         are considered before giving up.
-
-         The returned pointer CVT indicates whether conversion was
-         possible and will have the value AST\_\_NULL if it was not. If
-         conversion was possible, CVT will point at a new FrameSet
-         describing the conversion.
-
-         The Base attributes of the two FrameSets
-         will be set by AST\_CONVERT to indicate which of their Frames was
-         used for the intermediate coordinate system. This means that
-         you can subsequently determine which coordinate system was
-         used by enquiring the Domain attribute of either base Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping represented by the returned FrameSet results in
-         alignment taking place in the coordinate system specified by the
-         AlignSystem attribute of the TO Frame. See the description of the
-         AlignSystem attribute for further details.
-
-         \sstitem
-         When aligning (say) two images, which have been calibrated by
-         attaching FrameSets to them, it is usually necessary to convert
-         between the base Frames (representing {\tt{"}}native{\tt{"}} pixel
-         coordinates) of both FrameSets. This may be achieved by
-         inverting the FrameSets (e.g. using astInvert) so as to
-         interchange their base and current Frames before using
-         astConvert.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_COPY\sstlabel{AST_COPY}
-}{
-   Copy an Object
-}{
-   \sstdescription{
-      This function creates a copy of an \htmlref{Object}{Object} and returns a pointer
-      to the resulting new Object. It makes a {\tt{"}}deep{\tt{"}} copy, which
-      contains no references to any other Object (i.e. if the original
-      Object contains references to other Objects, then the actual
-      data are copied, not simply the references). This means that
-      modifications may safely be made to the copy without indirectly
-      affecting any other Object.
-   }
-   \sstinvocation{
-      RESULT = AST\_COPY( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object to be copied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_COPY = INTEGER
-      }{
-         Pointer to the new Object.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_CURRENTTIME\sstlabel{AST_CURRENTTIME}
-}{
-   Return the current system time
-}{
-   \sstdescription{
-      This routine
-      returns the current system time, represented in the form specified
-      by the supplied \htmlref{TimeFrame}{TimeFrame}. That is, the returned floating point
-      value should be interpreted using the attribute values of the
-      TimeFrame. This includes \htmlref{System}{System}, \htmlref{TimeOrigin}{TimeOrigin}, \htmlref{LTOffset}{LTOffset}, \htmlref{TimeScale}{TimeScale},
-      and Unit.
-   }
-   \sstinvocation{
-      RESULT = AST\_CURRENTTIME( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the TimeFrame.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_CURRENTTIME = DOUBLE
-      }{
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Values of AST\_\_BAD will be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-
-         \sstitem
-         It is assumes that the system time (returned by the C time()
-         function) follows the POSIX standard, representing a continuous
-         monotonic increasing count of SI seconds since the epoch 00:00:00
-         UTC 1 January 1970 AD (equivalent to TAI with a constant offset).
-         Resolution is one second.
-
-         \sstitem
-         An error will be reported if the TimeFrame has a TimeScale value
-         which cannot be converted to TAI (e.g. {\tt{"}}angular{\tt{"}} systems such as
-         UT1, GMST, LMST and LAST).
-
-         \sstitem
-         Any inaccuracy in the system clock will be reflected in the value
-         returned by this function.
-      }
-   }
-}
-\sstroutine{
-   AST\_CURVE\sstlabel{AST_CURVE}
-}{
-   Draw a geodesic curve
-}{
-   \sstdescription{
-      This routine draws a geodesic curve between two points in the
-      physical coordinate system of a \htmlref{Plot}{Plot}.  The curve drawn is the
-      path of shortest distance joining the two points (as defined by
-      the \htmlref{AST\_DISTANCE}{AST_DISTANCE} function for the current \htmlref{Frame}{Frame} of the Plot).
-      For example, if the current Frame is a basic Frame, then the
-      curve joining the two points will be a straight line in physical
-      coordinate space.  If the current Frame is more specialised and
-      describes, for instance, a sky coordinate system, then the
-      geodesic curve would be a great circle in physical coordinate
-      space passing through the two sky positions given.
-
-      Note that the geodesic curve is transformed into graphical
-      coordinate space for plotting, so that a straight line in
-      physical coordinates may result in a curved line being drawn if
-      the \htmlref{Mapping}{Mapping} involved is non-linear. Any discontinuities in the
-      Mapping between physical and graphical coordinates are
-      catered for, as is any clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
-
-      If you need to draw many geodesic curves end-to-end, then the
-      \htmlref{AST\_POLYCURVE}{AST_POLYCURVE} routine is equivalent to repeatedly calling
-      AST\_CURVE, but will usually be more efficient.
-
-      If you need to draw curves which are not geodesics, see \htmlref{AST\_GENCURVE}{AST_GENCURVE}
-      or \htmlref{AST\_GRIDLINE}{AST_GRIDLINE}.
-   }
-   \sstinvocation{
-      CALL AST\_CURVE( THIS, START, FINISH, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         START( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the first point on the geodesic
-         curve.
-      }
-      \sstsubsection{
-         FINISH( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the second point on the geodesic
-         curve.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No curve is drawn if either of the START or FINISH arrays
-         contains any coordinates with the value AST\_\_BAD.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_DECOMPOSE\sstlabel{AST_DECOMPOSE}
-}{
-   Decompose a Mapping into two component Mappings
-}{
-   \sstdescription{
-      This routine returns pointers to two Mappings which, when applied
-      either in series or parallel, are equivalent to the supplied \htmlref{Mapping}{Mapping}.
-
-      Since the \htmlref{Frame}{Frame} class inherits from the Mapping class, Frames can
-      be considered as special types of Mappings and so this method can
-      be used to decompose either CmpMaps or CmpFrames.
-   }
-   \sstinvocation{
-      CALL AST\_DECOMPOSE( THIS, MAP1, MAP2, SERIES, INVERT1, INVERT2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         MAP1 = INTEGER (Returned)
-      }{
-         A pointer to first component
-         Mapping.
-      }
-      \sstsubsection{
-         MAP2 = INTEGER (Returned)
-      }{
-         A pointer to second component
-         Mapping.
-      }
-      \sstsubsection{
-         SERIES = LOGICAL (Returned)
-      }{
-         Indicates if the
-         component Mappings are applied in series or parallel. A .TRUE.
-         value means that the supplied Mapping is equivalent to applying MAP1
-         followed by MAP2 in series. A zero value means that the supplied
-         Mapping is equivalent to applying MAP1 to the lower numbered axes
-         and MAP2 to the higher numbered axes, in parallel.
-      }
-      \sstsubsection{
-         INVERT1 = INTEGER (Returned)
-      }{
-         The value of the \htmlref{Invert}{Invert} attribute to be used with MAP1.
-      }
-      \sstsubsection{
-         INVERT2 = INTEGER (Returned)
-      }{
-         The value of the Invert attribute to be used with MAP2.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         If the supplied Mapping is a CmpMap, then MAP1 and MAP2 will be
-         returned holding pointers to the component Mappings used to
-         create the CmpMap, either in series or parallel. Note, changing
-         the Invert attribute of either of the component Mappings using
-         the returned pointers will have no effect on the supplied CmpMap.
-         This is because the CmpMap remembers and uses the original settings
-         of the Invert attributes (that is, the values of the Invert
-         attributes when the CmpMap was first created). These are the
-         Invert values which are returned in INVERT1 and INVERT2.
-      }
-      \sstsubsection{
-         \htmlref{TranMap}{TranMap}
-      }{
-         If the supplied Mapping is a TranMap, then MAP1 and MAP2 will be
-         returned holding pointers to the forward and inverse Mappings
-         represented by the TranMap (zero will be returned for
-         SERIES).
-         Note, changing the Invert attribute of
-         either of the component Mappings using the returned pointers will
-         have no effect on the supplied TranMap. This is because the TranMap
-         remembers and uses the original settings of the Invert attributes
-         (that is, the values of the Invert attributes when the TranMap was
-         first created). These are the
-         Invert values which are returned in INVERT1 and INVERT2.
-      }
-      \sstsubsection{
-         Mapping
-      }{
-         For any class of Mapping other than a CmpMap, MAP1 will be
-         returned holding a clone of the supplied Mapping pointer, and MAP2
-         will be returned holding AST\_\_NULL. INVERT1 will be returned
-         holding the current value of the Invert attribute for the supplied
-         Mapping, and INVERT2 will be returned holding zero.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         If the supplied Mapping is a CmpFrame, then MAP1 and MAP2 will be
-         returned holding pointers to the component Frames used to
-         create the CmpFrame. The component Frames are considered to be in
-         applied in parallel.
-      }
-      \sstsubsection{
-         Frame
-      }{
-         For any class of Frame other than a CmpFrame, MAP1 will be
-         returned holding a clone of the supplied Frame pointer, and MAP2
-         will be returned holding AST\_\_NULL.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned Invert values should be used in preference to the
-         current values of the Invert attribute in map1 and map2. This is
-         because the attributes may have changed value since the Mappings
-         were combined.
-
-         \sstitem
-         Any changes made to the component Mappings using the returned
-         pointers will be reflected in the supplied Mapping.
-      }
-   }
-}
-\sstroutine{
-   AST\_DELETE\sstlabel{AST_DELETE}
-}{
-   Delete an Object
-}{
-   \sstdescription{
-      This routine deletes an \htmlref{Object}{Object}, freeing all resources
-      associated with it and rendering any remaining pointers to the
-      Object invalid.
-
-      Note that deletion is unconditional, regardless of whether other
-      pointers to the Object are still in use (possibly within other
-      Objects). A safer approach is to defer deletion, until all
-      references to an Object have expired, by using \htmlref{AST\_BEGIN}{AST_BEGIN}/\htmlref{AST\_END}{AST_END}
-      (together with \htmlref{AST\_CLONE}{AST_CLONE} and \htmlref{AST\_ANNUL}{AST_ANNUL} if necessary).
-   }
-   \sstinvocation{
-      CALL AST\_DELETE( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given and Returned)
-      }{
-         Pointer to the Object to be deleted. A null pointer value
-         (AST\_\_NULL) is always returned.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine attempts to execute even if STATUS is set to an error
-         value
-         on entry, although no further error report will be
-         made if it subsequently fails under these circumstances.
-      }
-   }
-}
-\sstroutine{
-   AST\_DELFITS\sstlabel{AST_DELFITS}
-}{
-   Delete the current FITS card in a FitsChan
-}{
-   \sstdescription{
-      This routine deletes the current FITS card from a \htmlref{FitsChan}{FitsChan}. The
-      current card may be selected using the \htmlref{Card}{Card} attribute (if its index
-      is known) or by using \htmlref{AST\_FINDFITS}{AST_FINDFITS} (if only the FITS keyword is
-      known).
-
-      After deletion, the following card becomes the current card.
-   }
-   \sstinvocation{
-      CALL AST\_DELFITS( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function returns without action if the FitsChan is
-         initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the Card
-         attribute exceeds the number of cards in the FitsChan).
-
-         \sstitem
-         If there are no subsequent cards in the FitsChan, then the
-         Card attribute is left pointing at the {\tt{"}}end-of-file{\tt{"}} after
-         deletion (i.e. is set to one more than the number of cards in
-         the FitsChan).
-      }
-   }
-}
-\sstroutine{
-   AST\_DISTANCE\sstlabel{AST_DISTANCE}
-}{
-   Calculate the distance between two points in a Frame
-}{
-   \sstdescription{
-      This function finds the distance between two points whose \htmlref{Frame}{Frame}
-      coordinates are given. The distance calculated is that along
-      the geodesic curve that joins the two points.
-
-      For example, in a basic Frame, the distance calculated will be
-      the Cartesian distance along the straight line joining the two
-      points. For a more specialised Frame describing a sky coordinate
-      system, however, it would be the distance along the great circle
-      passing through two sky positions.
-   }
-   \sstinvocation{
-      RESULT = AST\_DISTANCE( THIS, POINT1, POINT2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         POINT1( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
-      }
-      \sstsubsection{
-         POINT2( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         containing the coordinates of the second point.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_DISTANCE = DOUBLE PRECISION
-      }{
-         The distance between the two points.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
-         any of the input coordinates has this value.
-
-         \sstitem
-         A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_DOWNSIZE\sstlabel{AST_DOWNSIZE}
-}{
-   Reduce the number of vertices in a Polygon
-}{
-   \sstdescription{
-      This function returns a pointer to a new \htmlref{Polygon}{Polygon} that contains a
-      subset of the vertices in the supplied Polygon. The subset is
-      chosen so that the returned Polygon is a good approximation to
-      the supplied Polygon, within the limits specified by the supplied
-      parameter values. That is, the density of points in the returned
-      Polygon is greater at points where the curvature of the boundary of
-      the supplied Polygon is greater.
-   }
-   \sstinvocation{
-      RESULT = AST\_DOWNSIZE( THIS, MAXERR, MAXVERT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Polygon.
-      }
-      \sstsubsection{
-         MAXERR = DOUBLE PRECISION (Given)
-      }{
-         The maximum allowed discrepancy between the supplied and
-         returned Polygons, expressed as a geodesic distance within the
-         Polygon's coordinate frame. If this is zero or less, the
-         returned Polygon will have the number of vertices specified by
-         MAXVERT.
-      }
-      \sstsubsection{
-         MAXVERT = INTEGER (Given)
-      }{
-         The maximum allowed number of vertices in the returned Polygon.
-         If this is less than 3, the number of vertices in the returned
-         Polygon will be the minimum needed to achieve the maximum
-         discrepancy specified by
-         MAXERR.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_DOWNSIZE = INTEGER
-      }{
-         Pointer to the new Polygon.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_DSBSPECFRAME\sstlabel{AST_DSBSPECFRAME}
-}{
-   Create a DSBSpecFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{DSBSpecFrame}{DSBSpecFrame} and optionally initialises its
-      attributes.
-
-      A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
-      positions in a spectrum obtained using a dual sideband instrument.
-      Such an instrument produces a spectrum in which each point contains
-      contributions from two distinctly different frequencies, one from
-      the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
-      Corresponding LSB and USB frequencies are connected by the fact
-      that they are an equal distance on either side of a fixed central
-      frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
-      When quoting a position within such a spectrum, it is necessary to
-      indicate whether the quoted position is the USB position or the
-      corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
-      indication. Another option that the SideBand attribute provides is
-      to represent a spectral position by its topocentric offset from the
-      LO frequency.
-
-      In practice, the LO frequency is specified by giving the distance
-      from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
-      this central position is that of some interesting spectral feature.
-      The distance from this central position to the LO frequency is known
-      as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
-      be a signed value in order to indicate whether the LO frequency is
-      above or below the central position.
-   }
-   \sstinvocation{
-      RESULT = AST\_DSBSPECFRAME( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new DSBSpecFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_DSBSPECFRAME = INTEGER
-      }{
-         A pointer to the new DSBSpecFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_ELLIPSE\sstlabel{AST_ELLIPSE}
-}{
-   Create a Ellipse
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Ellipse}{Ellipse} and optionally initialises its
-      attributes.
-
-      A Ellipse is a \htmlref{Region}{Region} which represents a elliptical area within the
-      supplied 2-dimensional \htmlref{Frame}{Frame}.
-   }
-   \sstinvocation{
-      RESULT = AST\_ELLIPSE( FRAME, FORM, CENTRE, POINT1, POINT2, UNC, OPTIONS,
-                            STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame in which the region is defined. It must
-         have exactly 2 axes. A deep copy is taken of the supplied Frame.
-         This means that any subsequent changes made to the Frame using the
-         supplied pointer will have no effect the Region.
-      }
-      \sstsubsection{
-         FORM = INTEGER (Given)
-      }{
-         Indicates how the ellipse is described by the remaining parameters.
-         A value of zero indicates that the ellipse is specified by a
-         centre position and two positions on the circumference. A value of
-         one indicates that the ellipse is specified by its centre position,
-         the half-lengths of its two axes, and the orientation of its first
-         axis.
-      }
-      \sstsubsection{
-         CENTRE( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         An array
-         containing the coordinates at the centre of
-         the ellipse.
-      }
-      \sstsubsection{
-         POINT1( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         If FORM
-         is zero, this array should contain the coordinates of one of the four
-         points where an axis of the ellipse crosses the circumference of the
-         ellipse.
-         If FORM
-         is one, it should contain the lengths of semi-major and
-         semi-minor axes of the ellipse, given as geodesic distances
-         within the Frame.
-      }
-      \sstsubsection{
-         POINT2( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         If FORM
-         is zero, this array should containing the coordinates at some other
-         point on the circumference of the ellipse, distinct from
-         POINT1. If FORM
-         is one, the first element of this array should hold the angle
-         between the second axis of the Frame and the first ellipse axis
-         (i.e. the ellipse axis which is specified first in the
-         POINT1
-         array), and the second element will be ignored. The angle should be
-         given in radians, measured positive in the same sense as rotation
-         from the positive direction of the second Frame axis to the positive
-         direction of the first Frame axis.
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, Ellipse, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Ellipse. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_ELLIPSE = INTEGER
-      }{
-         A pointer to the new Ellipse.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_ELLIPSEPARS\sstlabel{AST_ELLIPSEPARS}
-}{
-   Returns the geometric parameters of an Ellipse
-}{
-   \sstdescription{
-      This routine
-      returns the geometric parameters describing the supplied ellipse.
-   }
-   \sstinvocation{
-      CALL AST\_ELLIPSEPARS( THIS, CENTRE, A, B, ANGLE, P1, P2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         CENTRE( 2 ) = DOUBLE PRECISION (Returned)
-      }{
-         The coordinates of the \htmlref{Ellipse}{Ellipse} centre are returned in this arrays.
-      }
-      \sstsubsection{
-         A = DOUBLE PRECISION (Returned)
-      }{
-         Returned holding the half-length of the first axis of the
-         ellipse.
-      }
-      \sstsubsection{
-         B = DOUBLE PRECISION (Returned)
-      }{
-         Returned holding the half-length of the second axis of the
-         ellipse.
-      }
-      \sstsubsection{
-         ANGLE = DOUBLE PRECISION (Returned)
-      }{
-         If the coordinate system in which the Ellipse is defined has
-         axes (X,Y), then
-         ANGLE
-         is returned holding the angle from the positive direction of
-         the Y axis to the first axis of the ellipse, in radians.
-         Positive rotation is in the same sense as rotation from the
-         positive direction of Y to the positive direction of X.
-      }
-      \sstsubsection{
-         P1( 2 ) = DOUBLE PRECISION (Returned)
-      }{
-         An array in which to return the coordinates at one of the two ends
-         of the first axis  of the ellipse.
-      }
-      \sstsubsection{
-         P2( 2 ) = DOUBLE PRECISION (Returned)
-      }{
-         An array in which to return the coordinates at one of the two ends
-         of the second axis  of the ellipse.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the coordinate system represented by the Ellipse has been
-         changed since it was first created, the returned parameters refer
-         to the new (changed) coordinate system, rather than the original
-         coordinate system. Note however that if the transformation from
-         original to new coordinate system is non-linear, the shape
-         represented by the supplied Ellipse object may not be an accurate
-         ellipse.
-
-         \sstitem
-         Values of AST\_\_BAD are returned for the parameters without error
-         if the ellipse is degenerate or undefined.
-      }
-   }
-}
-\sstroutine{
-   AST\_END\sstlabel{AST_END}
-}{
-   End an AST context
-}{
-   \sstdescription{
-      This routine ends an AST context which was
-      begun with a matching invocation of \htmlref{AST\_BEGIN}{AST_BEGIN}. Any \htmlref{Object}{Object}
-      pointers created within this context will be annulled (just as
-      if \htmlref{AST\_ANNUL}{AST_ANNUL} had been invoked) and will cease to be valid
-      afterwards, unless they have previously been exported using
-      \htmlref{AST\_EXPORT}{AST_EXPORT} or rendered exempt using \htmlref{AST\_EXEMPT}{AST_EXEMPT}.
-      If annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
-      fall to zero (which happens when the last pointer to it is
-      annulled), then the Object will be deleted.
-   }
-   \sstinvocation{
-      CALL AST\_END( STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine attempts to execute even if STATUS is set to an
-         error value.
-
-         \sstitem
-         Contexts delimited by AST\_BEGIN and AST\_END may be nested to any
-         depth.
-      }
-   }
-}
-\sstroutine{
-   AST\_ESCAPES\sstlabel{AST_ESCAPES}
-}{
-   Control whether graphical escape sequences are included in strings
-}{
-   \sstdescription{
-      The \htmlref{Plot}{Plot} class defines a set of escape sequences which can be
-      included within a text string in order to control the appearance of
-      sub-strings within the text. See the \htmlref{Escape}{Escape} attribute for a
-      description of these escape sequences. It is usually inappropriate
-      for AST to return strings containing such escape sequences when
-      called by application code. For instance, an application which
-      displays the value of the \htmlref{Title}{Title} attribute of a \htmlref{Frame}{Frame} usually does
-      not want the displayed string to include potentially long escape
-      sequences which a human read would have difficuly interpreting.
-      Therefore the default behaviour is for AST to strip out such escape
-      sequences when called by application code. This default behaviour
-      can be changed using this function.
-   }
-   \sstinvocation{
-      RESULT = AST\_ESCAPES( NEWVAL, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NEWVAL = INTEGER (Given)
-      }{
-         A flag which indicates if escapes sequences should be included
-         in returned strings. If zero is supplied, escape sequences will
-         be stripped out of all strings returned by any AST function. If
-         a positive value is supplied, then any escape sequences will be
-         retained in the value returned to the caller. If a negative
-         value is supplied, the current value of the flag will be left
-         unchanged.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Object}{Object}
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_ESCAPES = INTEGER
-      }{
-         The value of the flag on entry to this function.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function also controls whether the
-         \htmlref{AST\_STRIPESCAPES}{AST_STRIPESCAPES}
-         function removes escape sequences from the supplied string, or
-         returns the supplied string without change.
-
-         \sstitem
-         This function attempts to execute even if an error has already
-         occurred.
-      }
-   }
-}
-\sstroutine{
-   AST\_EXEMPT\sstlabel{AST_EXEMPT}
-}{
-   Exempt an Object pointer from AST context handling
-}{
-   \sstdescription{
-      This routine exempts an \htmlref{Object}{Object} pointer from AST context
-      handling, as implemented by \htmlref{AST\_BEGIN}{AST_BEGIN} and \htmlref{AST\_END}{AST_END}. This means that
-      the pointer will not be affected when AST\_END is called and will
-      remain active until the end of the program, or until explicitly
-      annulled using \htmlref{AST\_ANNUL}{AST_ANNUL}.
-
-      If possible, you should avoid using this routine when writing
-      applications. It is provided mainly for developers of other
-      libraries, who may wish to retain references to AST Objects in
-      internal data structures, and who therefore need to avoid the
-      effects of AST\_BEGIN and AST\_END.
-   }
-   \sstinvocation{
-      CALL AST\_EXEMPT( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Object pointer to be exempted from context handling.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-}
-\sstroutine{
-   AST\_EXPORT\sstlabel{AST_EXPORT}
-}{
-   Export an Object pointer to an outer context
-}{
-   \sstdescription{
-      This routine exports an \htmlref{Object}{Object} pointer from the current AST context
-      into the context that encloses the current one. This means that
-      the pointer will no longer be annulled when the current context
-      is ended (with \htmlref{AST\_END}{AST_END}), but only when the next outer context (if
-      any) ends.
-   }
-   \sstinvocation{
-      CALL AST\_EXPORT( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Object pointer to be exported.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         It is only sensible to apply this routine to pointers that
-         have been created within (or exported to) the current context
-         and have not been rendered exempt using \htmlref{AST\_EXEMPT}{AST_EXEMPT}.
-         Applying it to an unsuitable Object pointer has no effect.
-      }
-   }
-}
-\sstroutine{
-   AST\_FINDFITS\sstlabel{AST_FINDFITS}
-}{
-   Find a FITS card in a FitsChan by keyword
-}{
-   \sstdescription{
-      This function searches for a card in a \htmlref{FitsChan}{FitsChan} by keyword. The
-      search commences at the current card (identified by the \htmlref{Card}{Card}
-      attribute) and ends when a card is found whose FITS keyword
-      matches the template supplied, or when the last card in the
-      FitsChan has been searched.
-
-      If the search is successful (i.e. a card is found which matches
-      the template), the contents of the card are
-      returned and the Card attribute is adjusted to identify the card
-      found or, if required, the one following it. If the search is
-      not successful, the function returns .FALSE. and the Card attribute
-      is set to the {\tt{"}}end-of-file{\tt{"}}.
-   }
-   \sstinvocation{
-      RESULT = AST\_FINDFITS( THIS, NAME, CARD, INC, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a
-         template for the keyword to be found. In the simplest case,
-         this should simply be the keyword name (the search is case
-         insensitive and trailing spaces are ignored). However, this
-         template may also contain {\tt{"}}field specifiers{\tt{"}} which are
-         capable of matching a range of characters (see the {\tt{"}}Keyword
-         Templates{\tt{"}} section for details). In this case, the first card
-         with a keyword which matches the template will be found. To
-         find the next FITS card regardless of its keyword, you should
-         use the template {\tt{"}}\%f{\tt{"}}.
-      }
-      \sstsubsection{
-         CARD = CHARACTER $*$ ( 80 ) (Returned)
-      }{
-         A character variable with at least 80 characters
-         in which the FITS card which is found will be returned.  If
-         the search is not successful, a
-         card will not be returned.
-      }
-      \sstsubsection{
-         INC = LOGICAL (Given)
-      }{
-         If this value is .FALSE. (and the search is successful), the
-         FitsChan's Card attribute will be set to the index of the card
-         that was found. If it is .TRUE., however, the Card
-         attribute will be incremented to identify the card which
-         follows the one found.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FINDFITS = LOGICAL
-      }{
-         .TRUE. if the search was successful, otherwise .FALSE..
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFITS( FITSCHAN, '\%f', CARD, .TRUE., STATUS )
-      }{
-         Returns the current card in a FitsChan and advances the Card
-         attribute to identify the card that follows (the {\tt{"}}\%f{\tt{"}}
-         template matches any keyword).
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFITS( FITSCHAN, 'BITPIX', CARD, .TRUE., STATUS )
-      }{
-         Searches a FitsChan for a FITS card with the {\tt{"}}BITPIX{\tt{"}} keyword
-         and returns that card. The Card attribute is then incremented
-         to identify the card that follows it.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFITS( FITSCHAN, 'COMMENT', CARD, .FALSE., STATUS )
-      }{
-         Sets the Card attribute of a FitsChan to identify the next
-         COMMENT card (if any) and returns that card.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFITS( FITSCHAN, 'CRVAL\%1d', CARD, .TRUE., STATUS )
-      }{
-         Searches a FitsChan for the next card with a keyword of the
-         form {\tt{"}}CRVALi{\tt{"}} (for example, any of the keywords {\tt{"}}CRVAL1{\tt{"}},
-         {\tt{"}}CRVAL2{\tt{"}} or {\tt{"}}CRVAL3{\tt{"}} would be matched). The card found (if
-         any) is returned, and the Card attribute is then incremented
-         to identify the following card (ready to search for another
-         keyword with the same form, perhaps).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The search always starts with the current card, as identified
-         by the Card attribute. To ensure you search the entire contents
-         of a FitsChan, you should first clear the Card attribute (using
-         \htmlref{AST\_CLEAR}{AST_CLEAR}). This effectively {\tt{"}}rewinds{\tt{"}} the FitsChan.
-
-         \sstitem
-         If a search is unsuccessful, the Card attribute is set to the
-         {\tt{"}}end-of-file{\tt{"}} (i.e. to one more than the number of cards in the
-         FitsChan). No error occurs.
-
-         \sstitem
-         A value of .FALSE. will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Keyword Templates
-   }{
-      The templates used to match FITS keywords are normally composed
-      of literal characters, which must match the keyword exactly
-      (apart from case). However, a template may also contain {\tt{"}}field
-      specifiers{\tt{"}} which can match a range of possible characters. This
-      allows you to search for keywords that contain (for example)
-      numbers, where the digits comprising the number are not known in
-      advance.
-
-      A field specifier starts with a {\tt{"}}\%{\tt{"}} character. This is followed
-      by an optional single digit (0 to 9) specifying a field
-      width. Finally, there is a single character which specifies the
-      type of character to be matched, as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}c{\tt{"}}: matches all upper case letters,
-
-         \sstitem
-         {\tt{"}}d{\tt{"}}: matches all decimal digits,
-
-         \sstitem
-         {\tt{"}}f{\tt{"}}: matches all characters which are permitted within a FITS
-         keyword (upper case letters, digits, underscores and hyphens).
-
-      }
-      If the field width is omitted, the field specifier matches one
-      or more characters. If the field width is zero, it matches zero
-      or more characters. Otherwise, it matches exactly the number of
-      characters specified. In addition to this:
-
-      \sstitemlist{
-
-         \sstitem
-         The template {\tt{"}}\%f{\tt{"}} will match a blank FITS keyword consisting
-         of 8 spaces (as well as matching all other keywords).
-
-         \sstitem
-         A template consisting of 8 spaces will match a blank keyword
-         (only).
-
-      }
-      For example:
-
-      \sstitemlist{
-
-         \sstitem
-         The template {\tt{"}}BitPix{\tt{"}} will match the keyword {\tt{"}}BITPIX{\tt{"}} only.
-
-         \sstitem
-         The template {\tt{"}}crpix\%1d{\tt{"}} will match keywords consisting of
-         {\tt{"}}CRPIX{\tt{"}} followed by one decimal digit.
-
-         \sstitem
-         The template {\tt{"}}P\%c{\tt{"}} will match any keyword starting with {\tt{"}}P{\tt{"}}
-         and followed by one or more letters.
-
-         \sstitem
-         The template {\tt{"}}E\%0f{\tt{"}} will match any keyword beginning with {\tt{"}}E{\tt{"}}.
-
-         \sstitem
-         The template {\tt{"}}\%f{\tt{"}} will match any keyword at all (including a
-         blank one).
-      }
-   }
-}
-\sstroutine{
-   AST\_FINDFRAME\sstlabel{AST_FINDFRAME}
-}{
-   Find a coordinate system with specified characteristics
-}{
-   \sstdescription{
-      This function uses a {\tt{"}}template{\tt{"}} \htmlref{Frame}{Frame} to search another Frame
-      (or \htmlref{FrameSet}{FrameSet}) to identify a coordinate system which has a
-      specified set of characteristics. If a suitable coordinate
-      system can be found, the function returns a pointer to a
-      FrameSet which describes the required coordinate system and how
-      to convert coordinates to and from it.
-
-      This function is provided to help answer general questions about
-      coordinate systems, such as typically arise when coordinate
-      information is imported into a program as part of an initially
-      unknown dataset. For example:
-      \sstitemlist{
-
-         \sstitem
-         Is there a wavelength scale?
-
-         \sstitem
-         Is there a 2-dimensional coordinate system?
-
-         \sstitem
-         Is there a celestial coordinate system?
-
-         \sstitem
-         Can I plot the data in ecliptic coordinates?
-
-      }
-      You can also use this function as a means of reconciling a
-      user's preference for a particular coordinate system (for
-      example, what type of axes to draw) with what is actually
-      possible given the coordinate information available.
-
-      To perform a search, you supply a {\tt{"}}target{\tt{"}} Frame (or FrameSet)
-      which represents the set of coordinate systems to be searched.
-      If a basic Frame is given as the target, this set of coordinate
-      systems consists of the one described by this Frame, plus all
-      other {\tt{"}}virtual{\tt{"}} coordinate systems which can potentially be
-      reached from it by applying built-in conversions (for example,
-      any of the celestial coordinate conversions known to the AST
-      library would constitute a {\tt{"}}built-in{\tt{"}} conversion). If a FrameSet
-      is given as the target, the set of coordinate systems to be
-      searched consists of the union of those represented by all the
-      individual Frames within it.
-
-      To select from this large set of possible coordinate systems,
-      you supply a {\tt{"}}template{\tt{"}} Frame which is an instance of the type
-      of Frame you are looking for. Effectively, you then ask the
-      function to {\tt{"}}find a coordinate system that looks like this{\tt{"}}.
-
-      You can make your request more or less specific by setting
-      attribute values for the template Frame. If a particular
-      attribute is set in the template, then the function will only
-      find coordinate systems which have exactly the same value for
-      that attribute.  If you leave a template attribute un-set,
-      however, then the function has discretion about the value the
-      attribute should have in any coordinate system it finds. The
-      attribute will then take its value from one of the actual
-      (rather than virtual) coordinate systems in the target. If the
-      target is a FrameSet, its \htmlref{Current}{Current} attribute will be modified to
-      indicate which of its Frames was used for this purpose.
-
-      The result of this process is a coordinate system represented by
-      a hybrid Frame which acquires some attributes from the template
-      (but only if they were set) and the remainder from the
-      target. This represents the {\tt{"}}best compromise{\tt{"}} between what you
-      asked for and what was available. A \htmlref{Mapping}{Mapping} is then generated
-      which converts from the target coordinate system to this hybrid
-      one, and the returned FrameSet encapsulates all of this
-      information.
-   }
-   \sstinvocation{
-      RESULT = AST\_FINDFRAME( TARGET, TEMPLATE, DOMAINLIST, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         TARGET = INTEGER (Given)
-      }{
-         Pointer to the target Frame (or FrameSet).
-
-         Note that if a FrameSet is supplied (and a suitable
-         coordinate system is found), then its Current attribute will
-         be modified to indicate which Frame was used to obtain
-         attribute values which were not specified by the template.
-         This Frame will, in some sense, represent the {\tt{"}}closest{\tt{"}}
-         non-virtual coordinate system to the one you requested.
-      }
-      \sstsubsection{
-         TEMPLATE = INTEGER (Given)
-      }{
-         Pointer to the template Frame, which should be an instance of
-         the type of Frame you wish to find. If you wanted to find a
-         Frame describing a celestial coordinate system, for example,
-         then you might use a \htmlref{SkyFrame}{SkyFrame} here. See the {\tt{"}}Examples{\tt{"}}
-         section for more ideas.
-      }
-      \sstsubsection{
-         DOMAINLIST = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a
-         comma-separated list of Frame domains. This may be used to
-         establish a priority order for the different types of
-         coordinate system that might be found.
-
-         The function will first try to find a suitable coordinate
-         system whose \htmlref{Domain}{Domain} attribute equals the first domain in this
-         list. If this fails, the second domain in the list will be
-         used, and so on, until a result is obtained. A blank domain
-         (e.g. two consecutive commas) indicates that any coordinate
-         system is acceptable (subject to the template) regardless of
-         its domain.
-
-         This list is case-insensitive and all white space is ignored.
-         If you do not wish to restrict the domain in this way,
-         you should supply a blank string.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames.
-      }
-      \sstsubsection{
-         FrameSet
-      }{
-         If the target is a FrameSet, the possibility exists that
-         several of the Frames within it might be matched by the
-         template.  Unless the choice is sufficiently restricted by
-         the DOMAINLIST string, the sequence in which Frames are
-         searched can then become important. In this case, the search
-         proceeds as follows:
-         \sstitemlist{
-
-            \sstitem
-            Each field in the DOMAINLIST string is considered in turn.
-
-            \sstitem
-            An attempt is made to match the template to each of the
-            target's Frames in the order: (1) the current Frame, (2) the
-            base Frame, (3) each remaining Frame in the order of being
-            added to the target FrameSet.
-
-            \sstitem
-            Generally, the first match found is used. However, the
-            Mapping between the target coordinate system and the
-            resulting Frame is also examined. Preference is given to
-            cases where both the forward and inverse transformations are
-            defined (as indicated by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
-            attributes). If only one transformation is defined, the
-            forward one is preferred.
-
-            \sstitem
-            If a match is found and the domain of the resulting Frame also
-            matches the current DOMAINLIST field, it is
-            accepted. Otherwise, the next DOMAINLIST field is considered
-            and the process repeated.
-
-         }
-         If a suitable coordinate system is found, the Current
-         attribute of the target FrameSet will be modified on exit to
-         identify the Frame whose match with the target was eventually
-         accepted.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FINDFRAME = INTEGER
-      }{
-         If the search is successful, the function returns a pointer
-         to a FrameSet which contains the Frame found and a
-         description of how to convert to (and from) the coordinate
-         system it represents. Otherwise, a null \htmlref{Object}{Object} pointer
-         (AST\_\_NULL) is returned without error.
-
-         If a FrameSet is returned, it will contain two Frames. Frame
-         number 1 (its base Frame) represents the target coordinate
-         system and will be the same as the (base Frame of the)
-         target. Frame number 2 (its current Frame) will be a Frame
-         representing the coordinate system which the function
-         found. The Mapping which inter-relates these two Frames will
-         describe how to convert between their respective coordinate
-         systems.
-
-         Note that a FrameSet may be used both as a Mapping and as a
-         Frame. If the result is used as a Mapping (e.g. with
-         astTran2), then it provides a means of converting coordinates
-         from the target coordinate system into the new coordinate
-         system that was found (and vice versa if its inverse
-         transformation is selected). If it is used as a Frame, its
-         attributes will describe the new coordinate system.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, \htmlref{AST\_FRAME}{AST_FRAME}( 3, ' ', STATUS ), ' ', STATUS )
-      }{
-         Searches for a 3-dimensional coordinate system in the target
-         Frame (or FrameSet). No attributes have been set in the
-         template Frame (created by AST\_FRAME), so no restriction has
-         been placed on the required coordinate system, other than
-         that it should have 3 dimensions. The first suitable Frame
-         found will be returned as part of the RESULT FrameSet.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, \htmlref{AST\_SKYFRAME}{AST_SKYFRAME}( ' ', STATUS ), ' ', STATUS )
-      }{
-         Searches for a celestial coordinate system in the target
-         Frame (or FrameSet). The type of celestial coordinate system
-         is unspecified, so AST\_FINDFRAME will return the first one
-         found as part of the RESULT FrameSet. If the target is
-         a FrameSet, then its Current attribute will be updated to
-         identify the Frame that was used.
-
-         If no celestial coordinate system can be found, a value of
-         AST\_\_NULL will be returned without error.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_SKYFRAME( '\htmlref{MaxAxes}{MaxAxes}=100', STATUS ), ' ', STATUS )
-      }{
-         This is like the last example, except that in the event of the
-         target being a \htmlref{CmpFrame}{CmpFrame}, the component Frames encapsulated by the
-         CmpFrame will be searched for a SkyFrame. If found, the returned
-         Mapping will included a \htmlref{PermMap}{PermMap} which selects the required axes
-         from the target CmpFrame.
-
-         This is acomplished by setting the MaxAxes attribute of the
-         template SkyFrame to a large number (larger than or equal to the
-         number of axes in the target CmpFrame). This allows the SkyFrame
-         to be used as a match for Frames containing from 2 to 100 axes.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_SKYFRAME( '\htmlref{System}{System}=FK5', STATUS ), ' ', STATUS )
-      }{
-         Searches for an equatorial (FK5) coordinate system in the
-         target. The \htmlref{Equinox}{Equinox} value for the coordinate system has not
-         been specified, so will be obtained from the target. If the
-         target is a FrameSet, its Current attribute will be updated
-         to indicate which SkyFrame was used to obtain this value.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 2, ' ', STATUS ), 'SKY,PIXEL,', STATUS )
-      }{
-         Searches for a 2-dimensional coordinate system in the
-         target. Initially, a search is made for a suitable coordinate
-         system whose Domain attribute has the value {\tt{"}}SKY{\tt{"}}. If this
-         search fails, a search is then made for one with the domain
-         {\tt{"}}PIXEL{\tt{"}}. If this also fails, then any 2-dimensional
-         coordinate system is returned as part of the RESULT
-         FrameSet.
-
-         Only if no 2-dimensional coordinate systems can be reached by
-         applying built-in conversions to any of the Frames in the
-         target will a value of AST\_\_NULL be returned.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 1, 'Domain=WAVELENGTH', STATUS ), ' ', STATUS )
-      }{
-         Searches for any 1-dimensional coordinate system in the
-         target which has the domain {\tt{"}}WAVELENGTH{\tt{"}}.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 1, ' ', STATUS ), 'WAVELENGTH', STATUS )
-      }{
-         This example has exactly the same effect as that above. It
-         illustrates the equivalence of the template's Domain attribute
-         and the fields in the DOMAINLIST string.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_FRAME( 1, 'MaxAxes=3', STATUS ), ' ', STATUS )
-      }{
-         This is a more advanced example which will search for any
-         coordinate system in the target having 1, 2 or 3
-         dimensions. The Frame returned (as part of the RESULT
-         FrameSet) will always be 1-dimensional, but will be related
-         to the coordinate system that was found by a suitable Mapping
-         (e.g. a PermMap) which simply extracts the first axis.
-
-         If we had wanted a Frame representing the actual (1, 2 or
-         3-dimensional) coordinate system found, we could set the
-         \htmlref{PreserveAxes}{PreserveAxes} attribute to a non-zero value in the template.
-      }
-      \sstexamplesubsection{
-         RESULT = AST\_FINDFRAME( TARGET, AST\_SKYFRAME( '\htmlref{Permute}{Permute}=0', STATUS ), ' ', STATUS )
-      }{
-         Searches for any celestial coordinate system in the target,
-         but only finds one if its axes are in the conventional
-         (longitude,latitude) order and have not been permuted
-         (e.g. with \htmlref{AST\_PERMAXES}{AST_PERMAXES}).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping represented by the returned FrameSet results in
-         alignment taking place in the coordinate system specified by the
-         \htmlref{AlignSystem}{AlignSystem} attribute of the TEMPLATE Frame. See the description
-         of the AlignSystem attribute for further details.
-
-         \sstitem
-         Beware of setting the Domain attribute of the template and then
-         using a DOMAINLIST string which does not include the template's domain
-         (or a blank field). If you do so, no coordinate system will be
-         found.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      More on Using Templates
-   }{
-      A Frame (describing a coordinate system) will be found by this
-      function if (a) it is {\tt{"}}matched{\tt{"}} by the template you supply, and
-      (b) the value of its Domain attribute appears in the DOMAINLIST
-      string (except that a blank field in this string permits any
-      domain). A successful match by the template depends on a number
-      of criteria, as outlined below:
-      \sstitemlist{
-
-         \sstitem
-         In general, a template will only match another Frame which
-         belongs to the same class as the template, or to a derived (more
-         specialised) class. For example, a SkyFrame template will match
-         any other SkyFrame, but will not match a basic
-         Frame. Conversely, a basic Frame template will match any class
-         of Frame.
-
-         \sstitem
-         The exception to this is that a Frame of any class can be used to
-         match a CmpFrame, if that CmpFrame contains a Frame of the same
-         class as the template. Note however, the MaxAxes and \htmlref{MinAxes}{MinAxes}
-         attributes of the template must be set to suitable values to allow
-         it to match the CmpFrame. That is, the MinAxes attribute must be
-         less than or equal to the number of axes in the target, and the MaxAxes
-         attribute must be greater than or equal to the number of axes in
-         the target.
-
-         \sstitem
-         If using a CmpFrame as a template frame, the MinAxes and MaxAxes
-         for the template are determined by the MinAxes and MaxAxes values of
-         the component Frames within the template. So if you want a template
-         CmpFrame to be able to match Frames with different numbers of axes,
-         then you must set the MaxAxes and/or MinAxes attributes in the component
-         template Frames, before combining them together into the template
-         CmpFrame.
-
-         \sstitem
-         If a template has a value set for any of its main attributes, then
-         it will only match Frames which have an identical value for that
-         attribute (or which can be transformed, using a built-in
-         conversion, so that they have the required value for that
-         attribute). If any attribute in the template is un-set, however,
-         then Frames are matched regardless of the value they may have
-         for that attribute. You may therefore make a template more or
-         less specific by choosing the attributes for which you set
-         values. This requirement does not apply to 'descriptive' attributes
-         such as titles, labels, symbols, etc.
-
-         \sstitem
-         An important application of this principle involves the Domain
-         attribute. Setting the Domain attribute of the template has the
-         effect of restricting the search to a particular type of Frame
-         (with the domain you specify).  Conversely, if the Domain
-         attribute is not set in the template, then the domain of the
-         Frame found is not relevant, so all Frames are searched.  Note
-         that the
-         DOMAINLIST string provides an alternative way of restricting the
-         search in the same manner, but is a more convenient interface if
-         you wish to search automatically for another domain if the first
-         search fails.
-
-         \sstitem
-         Normally, a template will only match a Frame which has the
-         same number of axes as itself. However, for some classes of
-         template, this default behaviour may be changed by means of the
-         MinAxes, MaxAxes and \htmlref{MatchEnd}{MatchEnd} attributes. In addition, the
-         behaviour of a template may be influenced by its Permute and
-         PreserveAxes attributes, which control whether it matches Frames
-         whose axes have been permuted, and whether this permutation is
-         retained in the Frame which is returned (as opposed to returning
-         the axes in the order specified in the template, which is the
-         default behaviour). You should consult the descriptions of these
-         attributes for details of this more advanced use of templates.
-      }
-   }
-}
-\sstroutine{
-   AST\_FITSCHAN\sstlabel{AST_FITSCHAN}
-}{
-   Create a FitsChan
-}{
-   \sstdescription{
-      This function creates a new \htmlref{FitsChan}{FitsChan} and optionally initialises
-      its attributes.
-
-      A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
-      operations involving the use of FITS (Flexible Image Transport
-      \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
-      \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate a
-      description of that Object composed of FITS header cards, and
-      reading from a FitsChan will create a new Object from its FITS
-      header card description.
-
-      While a FitsChan is active, it represents a buffer which may
-      contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
-      FITS conventions. Any sequence of FITS-conforming header cards
-      may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
-      merely implied.  The cards may be accessed in any order by using
-      the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
-      card, to which subsequent operations apply. Searches
-      based on keyword may be performed (using \htmlref{AST\_FINDFITS}{AST_FINDFITS}), new
-      cards may be inserted (\htmlref{AST\_PUTFITS}{AST_PUTFITS}, \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}, \htmlref{AST\_SETFITS$<$X$>$}{AST_SETFITSX}) and
-      existing ones may be deleted (\htmlref{AST\_DELFITS}{AST_DELFITS}) or changed (AST\_SETFITS$<$X$>$).
-
-      When you create a FitsChan, you have the option of specifying
-      {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
-      stores by reading and writing FITS header cards. If you provide
-      a source function, it is used to fill the FitsChan with header cards
-      when it is accessed for the first time. If you do not provide a source
-      function, the FitsChan remains empty until you explicitly enter
-      data into it (e.g. using AST\_PUTCARDS, AST\_PUTFITS or AST\_WRITE). If you
-      provide a sink function, it is used to deliver any remaining
-      contents of a FitsChan to an external data store when the
-      FitsChan is deleted. If you do not provide a sink function, any
-      header cards remaining when the FitsChan is deleted will be
-      lost, so you should arrange to extract them first if necessary
-      (e.g. using AST\_FINDFITS or \htmlref{AST\_READ}{AST_READ}).
-
-      Coordinate system information may be described using FITS header
-      cards using several different conventions, termed
-      {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
-      FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
-      determines how the Object is converted to (or from) a
-      description involving FITS header cards. In general, different
-      encodings will result in different sets of header cards to
-      describe the same Object. Examples of encodings include the DSS
-      encoding (based on conventions used by the STScI Digitised Sky
-      Survey data), the FITS-WCS encoding (based on a proposed FITS
-      standard) and the NATIVE encoding (a near loss-less way of
-      storing AST Objects in FITS headers).
-
-      The available encodings differ in the range of Objects they can
-      represent, in the number of Object descriptions that can coexist
-      in the same FitsChan, and in their accessibility to other
-      (external) astronomy applications (see the Encoding attribute
-      for details). Encodings are not necessarily mutually exclusive
-      and it may sometimes be possible to describe the same Object in
-      several ways within a particular set of FITS header cards by
-      using several different encodings.
-
-      The detailed behaviour of AST\_READ and AST\_WRITE, when used with
-      a FitsChan, depends on the encoding in use. In general, however,
-      all use of AST\_READ is destructive, so that FITS header cards
-      are consumed in the process of reading an Object, and are
-      removed from the FitsChan (this deletion can be prevented for
-      specific cards by calling the
-      \htmlref{AST\_RETAINFITS}{AST_RETAINFITS} routine).
-
-      If the encoding in use allows only a single Object description
-      to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-      encodings), then write operations using AST\_WRITE will
-      over-write any existing Object description using that
-      encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-      descriptions are written sequentially and may later be read
-      back in the same sequence.
-   }
-   \sstinvocation{
-      RESULT = AST\_FITSCHAN( SOURCE, SINK, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         SOURCE = FUNCTION (Given)
-      }{
-         A source routine, which is a function taking two arguments: a
-         character argument of length 80 to contain a FITS card, and an
-         integer error status argument. It should return an integer value.
-         This function will be used by the FitsChan to obtain input
-         FITS header cards. On each invocation, it should read the
-         next input card from some external source (such as a FITS
-         file), and return the contents of the card via its character
-         argument. It should return a function result of one unless
-         there are no more cards to be read, in which case it should
-         return zero. If an error occurs, it should set its error
-         status argument to an error value before returning.
-
-         If the null routine AST\_NULL is supplied as the SOURCE value,
-         the FitsChan will remain empty until cards are explicitly
-         stored in it (e.g. using AST\_PUTCARDS or AST\_PUTFITS).
-      }
-      \sstsubsection{
-         SINK = SUBROUTINE (Given)
-      }{
-         A sink routine, which is a subroutine which takes two
-         arguments: a character argument of length 80 to contain a
-         FITS card, and an integer error status argument. This routine
-         will be used by the FitsChan to deliver any FITS header cards
-         it contains when it is finally deleted. On each invocation,
-         it should deliver the contents of the character string passed
-         to it as a FITS header card to some external data store (such
-         as a FITS file).  If an error occurs, it should set its error
-         status argument to an error value before returning.
-
-         If the null routine AST\_NULL is supplied as the SINK value,
-         the contents of the FitsChan will not be written out when it
-         is deleted.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new FitsChan. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FITSCHAN = INTEGER
-      }{
-         A pointer to the new FitsChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The names of the routines supplied for the SOURCE and SINK
-         arguments should appear in EXTERNAL statements in the Fortran
-         routine which invokes AST\_FITSCHAN. However, this is not generally
-         necessary for the null routine AST\_NULL (so long as the AST\_PAR
-         include file has been used).
-
-         \sstitem
-         No FITS {\tt{"}}END{\tt{"}} card will be written via the sink routine. You
-         should add this card yourself after the FitsChan has been
-         deleted.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-
-         \sstitem
-         Note that the null routine AST\_NULL (one underscore) is
-         different to AST\_\_NULL (two underscores), which is the null Object
-         pointer.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_FLUXFRAME\sstlabel{AST_FLUXFRAME}
-}{
-   Create a FluxFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{FluxFrame}{FluxFrame} and optionally initialises
-      its attributes.
-
-      A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various systems used to represent the signal level in an
-      observation. The particular coordinate system to be used is specified
-      by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
-      other attributes such as the units, etc (see the description of the
-      System attribute for details).
-
-      All flux values are assumed to be measured at the same frequency or
-      wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
-      more appropriate for use with images rather than spectra.
-   }
-   \sstinvocation{
-      RESULT = AST\_FLUXFRAME( SPECVAL, SPECFRM, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         SPECVAL = DOUBLE PRECISION (Given)
-      }{
-         The spectral value to which the flux values refer, given in the
-         spectral coordinate system specified by
-         SPECFRM. The value supplied for the SPECVAL
-         parameter becomes the default value for the SpecVal attribute.
-         A value of AST\_\_BAD may be supplied if the spectral position is
-         unknown, but this may result in it not being possible for the
-         \htmlref{AST\_CONVERT}{AST_CONVERT}
-         function to determine a \htmlref{Mapping}{Mapping} between the new FluxFrame and
-         some other FluxFrame.
-      }
-      \sstsubsection{
-         SPECFRM = INTEGER (Given)
-      }{
-         A pointer to a \htmlref{SpecFrame}{SpecFrame} describing the spectral coordinate system
-         in which the
-         SPECVAL
-         parameter is given. A deep copy of this object is taken, so any
-         subsequent changes to the SpecFrame using the supplied pointer will
-         have no effect on the new FluxFrame.
-         AST\_\_NULL can be supplied if AST\_\_BAD is supplied for SPECVAL.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new FluxFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FLUXFRAME = INTEGER
-      }{
-         A pointer to the new FluxFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When conversion between two FluxFrames is requested (as when
-         supplying FluxFrames AST\_CONVERT),
-         account will be taken of the nature of the flux coordinate systems
-         they represent, together with any qualifying attribute values, including
-         the \htmlref{AlignSystem}{AlignSystem} attribute. The results will therefore fully reflect the
-         relationship between positions measured in the two systems. In addition,
-         any difference in the Unit attributes of the two systems will also be
-         taken into account.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_FORMAT\sstlabel{AST_FORMAT}
-}{
-   Format a coordinate value for a Frame axis
-}{
-   \sstdescription{
-      This function returns a character string containing the
-      formatted (character) version of a coordinate value for a \htmlref{Frame}{Frame}
-      axis. The formatting applied is determined by the Frame's
-      attributes and, in particular, by any Format attribute string
-      that has been set for the axis. A suitable default format (based
-      on the Digits attribute value) will be applied if necessary.
-   }
-   \sstinvocation{
-      RESULT = AST\_FORMAT( THIS, AXIS, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         AXIS = INTEGER (Given)
-      }{
-         The number of the Frame axis for which formatting is to be
-         performed (axis numbering starts at 1 for the first axis).
-      }
-      \sstsubsection{
-         VALUE = DOUBLE PRECISION (Given)
-      }{
-         The coordinate value to be formatted.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FORMAT = CHARACTER $*$ ( AST\_\_SZCHR )
-      }{
-         The formatted value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A formatted value may be converted back into a numerical
-         (double precision) value using \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}.
-
-         \sstitem
-         A blank string will be returned if this function is invoked
-         with STATUS set to an error value, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_FRAME\sstlabel{AST_FRAME}
-}{
-   Create a Frame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Frame}{Frame} and optionally initialises its
-      attributes.
-
-      A Frame is used to represent a coordinate system. It does this
-      in rather the same way that a frame around a graph describes the
-      coordinate space in which data are plotted. Consequently, a
-      Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
-      coordinate space, and contains axes which in turn hold
-      information such as Label and Units strings which are used for
-      labelling (e.g.) graphical output. In general, however, the
-      number of axes is not restricted to two.
-
-      Functions are available for converting Frame coordinate values
-      into a form suitable for display, and also for calculating
-      distances and offsets between positions within the Frame.
-
-      Frames may also contain knowledge of how to transform to and
-      from related coordinate systems.
-   }
-   \sstinvocation{
-      RESULT = AST\_FRAME( NAXES, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NAXES = INTEGER (Given)
-      }{
-         The number of Frame axes (i.e. the number of dimensions of
-         the coordinate space which the Frame describes).
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Frame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FRAME = INTEGER
-      }{
-         A pointer to the new Frame.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         FRAME = AST\_FRAME( 2, 'Title=Energy Spectrum', STATUS );
-      }{
-         Creates a new 2-dimensional Frame and initialises its Title
-         attribute to the string {\tt{"}}Energy Spectrum{\tt{"}}.
-      }
-      \sstexamplesubsection{
-         FRAME = AST\_FRAME( 2, 'Label(1)=Energy, Label(2)=Response', STATUS );
-      }{
-         Creates a new 2-dimensional Frame and initialises its axis
-         Label attributes to suitable string values.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_FRAMESET\sstlabel{AST_FRAMESET}
-}{
-   Create a FrameSet
-}{
-   \sstdescription{
-      This function creates a new \htmlref{FrameSet}{FrameSet} and optionally initialises
-      its attributes.
-
-      A FrameSet consists of a set of one or more Frames (which
-      describe coordinate systems), connected together by Mappings
-      (which describe how the coordinate systems are inter-related). A
-      FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
-      of these Frames (i.e. to convert between any of the coordinate
-      systems which it describes).  The individual Frames are
-      identified within the FrameSet by an integer index, with Frames
-      being numbered consecutively from one as they are added to the
-      FrameSet.
-
-      Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
-      are allowed to be the same). Any of the Frames may be nominated
-      to hold these positions, and the choice is determined by the
-      values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
-      the indices of the relevant Frames.  By default, the first Frame
-      added to a FrameSet is its base Frame, and the last one added is
-      its current Frame.
-
-      The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
-      whatever the FrameSet is used to calibrate (e.g. the pixel
-      coordinates of an image) and the current Frame describes the
-      {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
-      (e.g. displayed, etc.). Any further Frames represent a library
-      of alternative coordinate systems, which may be selected by
-      making them current.
-
-      When a FrameSet is used in a context that requires a Frame,
-      (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
-      Frame is used. A FrameSet may therefore be used in place of its
-      current Frame in most situations.
-
-      When a FrameSet is used in a context that requires a Mapping,
-      the Mapping used is the one between its base Frame and its
-      current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
-      coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
-      Mapping, a FrameSet may also be inverted (see \htmlref{AST\_INVERT}{AST_INVERT}), which
-      has the effect of interchanging its base and current Frames and
-      hence of reversing the Mapping between them.
-
-      Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
-      Frame), either explicitly or as components within CmpFrames. In this
-      case the Mapping between a pair of Frames within a FrameSet will
-      include the effects of the clipping produced by any Regions included
-      in the path between the Frames.
-   }
-   \sstinvocation{
-      RESULT = AST\_FRAMESET( FRAME, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         Pointer to the first Frame to be inserted into the
-         FrameSet. This initially becomes both the base and the
-         current Frame. (Further Frames may be added using the
-         \htmlref{AST\_ADDFRAME}{AST_ADDFRAME} routine.)
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new FrameSet. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_FRAMESET
-      }{
-         A pointer to the new FrameSet.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If a pointer to an existing FrameSet is given for the FRAME
-         argument, then the new FrameSet will (as a special case) be
-         initialised to contain the same Frames and Mappings, and to have
-         the same attribute values, as the one supplied. This process is
-         similar to making a copy of a FrameSet (see \htmlref{AST\_COPY}{AST_COPY}), except
-         that the Frames and Mappings contained in the original are not
-         themselves copied, but are shared by both FrameSets.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GENCURVE\sstlabel{AST_GENCURVE}
-}{
-   Draw a generalized curve
-}{
-   \sstdescription{
-      This routine draws a general user-defined curve defined by the
-      supplied \htmlref{Mapping}{Mapping}. Note that the curve is transformed into graphical
-      coordinate space for plotting, so that a straight line in
-      physical coordinates may result in a curved line being drawn if
-      the Mapping involved is non-linear. Any discontinuities in the
-      Mapping between physical and graphical coordinates are
-      catered for, as is any clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
-
-      If you need to draw simple straight lines (geodesics), \htmlref{AST\_CURVE}{AST_CURVE}
-      or \htmlref{AST\_POLYCURVE}{AST_POLYCURVE} will usually be easier to use and faster.
-   }
-   \sstinvocation{
-      CALL AST\_GENCURVE( THIS, MAP )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{Plot}{Plot}.
-      }
-      \sstsubsection{
-         MAP = INTEGER (Given)
-      }{
-         Pointer to a Mapping. This Mapping should have 1 input
-         coordinate representing offset along the required curve,
-         normalized so that the start of the curve is at offset 0.0,
-         and the end of the curve is at offset 1.0. Note, this offset
-         does not need to be linearly related to distance along the curve.
-         The number of output coordinates should equal the number of axes
-         in the current \htmlref{Frame}{Frame} of the Plot. The Mapping should map a
-         specified offset along the curve, into the corresponding
-         coordinates in the current Frame of the Plot. The inverse
-         transformation need not be defined.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error results if the base Frame of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_GET$<$X$>$\sstlabel{AST_GETX}
-}{
-   Get an attribute value for an Object
-}{
-   \sstdescription{
-      This is a family of functions which return a specified attribute
-      value for an \htmlref{Object}{Object} using one of several different data
-      types. The type is selected by replacing $<$X$>$ in the function name
-      by C, D, I, L or R, to obtain a result in Character, Double
-      precision, Integer, Logical or Real format, respectively.
-
-      If possible, the attribute value is converted to the type you
-      request. If conversion is not possible, an error will result.
-   }
-   \sstinvocation{
-      RESULT = AST\_GET$<$X$>$( THIS, ATTRIB, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the name of the attribute whose
-         value is required.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         These functions apply to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GET$<$X$>$ = $<$X$>$type
-      }{
-         The attribute value, in the data type corresponding to $<$X$>$.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         WRITE( $*$, '('' \htmlref{RefCount}{RefCount} = '', A10 )' ) AST\_GETC( Z, 'RefCount', STATUS )
-      }{
-         Prints the RefCount attribute value for Object Z as a character
-         string.
-      }
-      \sstexamplesubsection{
-         NAXES = AST\_GETI( FRAME, '\htmlref{Naxes}{Naxes}', STATUS )
-      }{
-         Obtains the value of the Naxes attribute for Object FRAME as an
-         integer.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         An appropriate {\tt{"}}null{\tt{"}} value will be returned if this function
-         is invoked with STATUS set to an error value, or if it should
-         fail for any reason. This null value is zero for numeric
-         values, .FALSE. for logical values, and blank for character values.
-
-         \sstitem
-         Numerical attribute values of zero translate to logical value
-         .FALSE. and all other numerical values translate to .TRUE..
-      }
-   }
-}
-\sstroutine{
-   AST\_GETACTIVEUNIT\sstlabel{AST_GETACTIVEUNIT}
-}{
-   Determines how the Unit attribute will be used
-}{
-   \sstdescription{
-      This routine
-      returns the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}. See
-      the description of the \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} routine
-      for a description of the ActiveUnit flag.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETACTIVEUNIT( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETACTIVEUNIT = LOGICAL
-      }{
-         The current value of the ActiveUnit flag.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of .FALSE. will be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETFITS$<$X$>$\sstlabel{AST_GETFITSX}
-}{
-   Get a named keyword value from a FitsChan
-}{
-   \sstdescription{
-      This is a family of functions which gets a value for a named keyword
-      from a \htmlref{FitsChan}{FitsChan} using one of several different data types. The data
-      type of the returned value is selected by replacing $<$X$>$ in the function
-      name by one of the following strings representing the recognised FITS
-      data types:
-
-      The data type of the returned value is selected by replacing $<$X$>$ in the
-      function name by one of the following strings representing the
-      recognised FITS data types:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - Complex floating point values.
-
-         \sstitem
-         CI - Complex integer values.
-
-         \sstitem
-         F  - Floating point values.
-
-         \sstitem
-         I  - Integer values.
-
-         \sstitem
-         L  - Logical (i.e. boolean) values.
-
-         \sstitem
-         S  - String values.
-
-         \sstitem
-         CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
-                are encoded without an equals sign.
-
-      }
-      The data type of the {\tt{"}}value{\tt{"}}
-      argument
-      depends on $<$X$>$ as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - DOUBLE PRECISION(2) (a 2 element array to hold the real and
-                imaginary parts of the complex value).
-
-         \sstitem
-         CI - INTEGER(2) (a 2 element array to hold the real and imaginary
-                parts of the complex value).
-
-         \sstitem
-         F  - DOUBLE PRECISION.
-
-         \sstitem
-         I  - INTEGER
-
-         \sstitem
-         L  - LOGICAL
-
-         \sstitem
-         S  - CHARACTER
-
-         \sstitem
-         CN - CHARACTER
-      }
-   }
-   \sstinvocation{
-      RESULT = AST\_GETFITS$<$X$>$( THIS, NAME, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         VALUE = $<$X$>$type (Given)
-      }{
-         A
-         buffer to receive the keyword value. The data type depends on $<$X$>$
-         as described above.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETFITS$<$X$>$ = LOGICAL
-      }{
-         .FALSE.
-         is returned if the keyword was not found in the FitsChan (no error
-         is reported). Otherwise, a value of
-         .TRUE.
-         is returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The card following the current card is checked first. If this is
-         not the required card, then the rest of the FitsChan is searched,
-         starting with the first card added to the FitsChan. Therefore cards
-         should be accessed in the order they are stored in the FitsChan (if
-         possible) as this will minimise the time spent searching for cards.
-
-         \sstitem
-         If the requested card is found, it becomes the current card,
-         otherwise the current card is left pointing at the {\tt{"}}end-of-file{\tt{"}}.
-
-         \sstitem
-         If the stored keyword value is not of the requested type, it is
-         converted into the requested type.
-
-         \sstitem
-         If the keyword is found in the FitsChan, but has no associated
-         value, an error is reported. If necessary, the
-         \htmlref{AST\_TESTFITS}{AST_TESTFITS}
-         function can be used to determine if the keyword has a defined
-         value in the FitsChan prior to calling this function.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-
-         \sstitem
-         .FALSE.
-         is returned as the function value if an error has already occurred,
-         or if this function should fail for any reason.
-
-         \sstitem
-         The FITS standard says that string keyword values should be
-         padded with trailing spaces if they are shorter than 8 characters.
-         For this reason, trailing spaces are removed from the string
-         returned by
-         AST\_GETFITSS
-         if the original string (including any trailing spaces) contains 8
-         or fewer characters. Trailing spaces are not removed from longer
-         strings.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETFRAME\sstlabel{AST_GETFRAME}
-}{
-   Obtain a pointer to a specified Frame in a FrameSet
-}{
-   \sstdescription{
-      This function returns a pointer to a specified \htmlref{Frame}{Frame} in a
-      \htmlref{FrameSet}{FrameSet}.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETFRAME( THIS, IFRAME, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         IFRAME = INTEGER (Given)
-      }{
-         The index of the required Frame within the FrameSet.  This
-         value should lie in the range from 1 to the number of Frames
-         in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETFRAME = INTEGER
-      }{
-         A pointer to the requested Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         IFRAME argument to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         This function increments the \htmlref{RefCount}{RefCount} attribute of the
-         selected Frame by one.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETGRFCONTEXT\sstlabel{AST_GETGRFCONTEXT}
-}{
-   Return the KeyMap that describes a Plot's graphics context
-}{
-   \sstdescription{
-      This routine
-      returns a reference to a \htmlref{KeyMap}{KeyMap} that will be passed to any drawing
-      routines registered using \htmlref{AST\_GRFSET}{AST_GRFSET}.
-      This KeyMap can be used by an application to pass information to
-      the drawing routines
-      about the context in which they are being called. The contents of
-      the KeyMap are never accessed byt the \htmlref{Plot}{Plot} class itself.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETGRFCONTEXT( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETGRFCONTEXT = INTEGER
-      }{
-         A pointer to the graphics context KeyMap. The returned pointer
-         should be annulled when it is no longer needed.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETLINE\sstlabel{AST_GETLINE}
-}{
-   Obtain text to be written by a Channel sink routine
-}{
-   \sstdescription{
-      This routine should only be used when implementing a routine
-      which will be passed as the SINK argument to \htmlref{AST\_CHANNEL}{AST_CHANNEL}. It
-      should be used to obtain (from the AST library) each line of
-      text which is to be written to the external data sink. One such
-      line should be obtained in this way for each invocation of the
-      sink routine.
-   }
-   \sstinvocation{
-      CALL AST\_GETLINE( LINE, L, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         LINE = CHARACTER $*$ ( $*$ ) (Returned)
-      }{
-         The line of text to be written. Depending on the length of
-         character variable supplied, the returned text may be
-         truncated if necessary. Note, however, that it will not be
-         padded with blanks in order to fill this variable.
-      }
-      \sstsubsection{
-         L = INTEGER (Returned)
-      }{
-         The number of characters returned, which may be zero. Note
-         that characters beyond the L'th character in the LINE
-         variable are not modified and may therefore contain junk.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine is only available in the Fortran interface to the
-         AST library.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETMAPPING\sstlabel{AST_GETMAPPING}
-}{
-   Obtain a Mapping that converts between two Frames in a FrameSet
-}{
-   \sstdescription{
-      This function returns a pointer to a \htmlref{Mapping}{Mapping} that will convert
-      coordinates between the coordinate systems represented by two
-      Frames in a \htmlref{FrameSet}{FrameSet}.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETMAPPING( THIS, IFRAME1, IFRAME2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         IFRAME1 = INTEGER (Given)
-      }{
-         The index of the first \htmlref{Frame}{Frame} in the FrameSet. This Frame describes
-         the coordinate system for the {\tt{"}}input{\tt{"}} end of the Mapping.
-      }
-      \sstsubsection{
-         IFRAME2 = INTEGER (Given)
-      }{
-         The index of the second Frame in the FrameSet. This Frame
-         describes the coordinate system for the {\tt{"}}output{\tt{"}} end of the
-         Mapping.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETMAPPING = INTEGER
-      }{
-         Pointer to a Mapping whose forward transformation converts
-         coordinates from the first coordinate system to the second
-         one, and whose inverse transformation converts coordinates in
-         the opposite direction.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned Mapping will include the clipping effect of any
-         Regions which occur on the path between the two supplied Frames
-         (this includes the two supplied Frames themselves).
-
-         \sstitem
-         The values given for the IFRAME1 and IFRAME2 arguments
-         should lie in the range from 1 to the number of Frames in the
-         FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute). A value of
-         AST\_\_BASE or AST\_\_CURRENT may also be given to identify the
-         FrameSet's base Frame or current Frame respectively.  It is
-         permissible for both these arguments to have the same value, in
-         which case a unit Mapping (\htmlref{UnitMap}{UnitMap}) is returned.
-
-         \sstitem
-         It should always be possible to generate the Mapping
-         requested, but this does necessarily guarantee that it will be
-         able to perform the required coordinate conversion. If
-         necessary, the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes of the
-         returned Mapping should be inspected to determine if the
-         required transformation is available.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETREFPOS\sstlabel{AST_GETREFPOS}
-}{
-   Return the reference position in a specified celestial coordinate system
-}{
-   \sstdescription{
-      This routine
-      returns the reference position (specified by attributes \htmlref{RefRA}{RefRA} and
-      \htmlref{RefDec}{RefDec}) converted to the celestial coordinate system represented by
-      a supplied \htmlref{SkyFrame}{SkyFrame}. The celestial longitude and latitude values
-      are returned in radians.
-   }
-   \sstinvocation{
-      CALL AST\_GETREFPOS( THIS, FRM, LON, LAT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{SpecFrame}{SpecFrame}.
-      }
-      \sstsubsection{
-         FRM = INTEGER (Given)
-      }{
-         Pointer to the SkyFrame which defines the required celestial
-         coordinate system.
-         If AST\_\_NULL
-         is supplied, then the longitude and latitude values are returned
-         as FK5 J2000 RA and Dec values.
-      }
-      \sstsubsection{
-         LON = DOUBLE PRECISION (Returned)
-      }{
-         The
-         longitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-      \sstsubsection{
-         LAT = DOUBLE PRECISION (Returned)
-      }{
-         The
-         latitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Values of AST\_\_BAD will be returned if this function is
-         invoked with STATUS set to an error value, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETREGIONBOUNDS\sstlabel{AST_GETREGIONBOUNDS}
-}{
-   Returns the bounding box of Region
-}{
-   \sstdescription{
-      This routine
-      returns the upper and lower limits of a box which just encompasses
-      the supplied \htmlref{Region}{Region}. The limits are returned as axis values within
-      the \htmlref{Frame}{Frame} represented by the Region. The value of the \htmlref{Negated}{Negated}
-      attribute is ignored (i.e. it is assumed that the Region has not
-      been negated).
-   }
-   \sstinvocation{
-      CALL AST\_GETREGIONBOUNDS( THIS, LBND, UBND, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         LBND() = DOUBLE PRECISION (Returned)
-      }{
-         An
-         array in which to return the lower axis bounds covered by the Region.
-         It should have at least as many elements as there are axes in the
-         Region. If an axis has no lower limit, the returned value will
-         be the largest possible negative value.
-      }
-      \sstsubsection{
-         UBND() = DOUBLE PRECISION (Returned)
-      }{
-         An
-         array in which to return the upper axis bounds covered by the Region.
-         It should have at least as many elements as there are axes in the
-         Region. If an axis has no upper limit, the returned value will
-         be the largest possible positive value.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The value of the Negated attribute is ignored (i.e. it is assumed that
-         the Region has not been negated).
-
-         \sstitem
-         If an axis has no extent on an axis then the lower limit will be
-         returned larger than the upper limit. Note, this is different to an
-         axis which has a constant value (in which case both lower and upper
-         limit will be returned set to the constant value).
-      }
-   }
-}
-\sstroutine{
-   AST\_GETREGIONFRAME\sstlabel{AST_GETREGIONFRAME}
-}{
-   Obtain a pointer to the encapsulated Frame within a Region
-}{
-   \sstdescription{
-      This function returns a pointer to the \htmlref{Frame}{Frame} represented by a
-      \htmlref{Region}{Region}.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETREGIONFRAME( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETREGIONFRAME = INTEGER
-      }{
-         A pointer to a deep copy of the Frame represented by the Region.
-         Using this pointer to modify the Frame will have no effect on
-         the Region. To modify the Region, use the Region pointer directly.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETREGIONPOINTS\sstlabel{AST_GETREGIONPOINTS}
-}{
-   Returns the positions that define the given Region
-}{
-   \sstdescription{
-      This routine
-      returns the axis values at the points that define the supplied
-      \htmlref{Region}{Region}. The particular meaning of these points will depend on the
-      type of class supplied, as listed below under {\tt{"}}Applicability:{\tt{"}}.
-   }
-   \sstinvocation{
-      CALL AST\_GETREGIONPOINTS( THIS, MAXPOINT, MAXCOORD, NPOINT, POINTS,
-                                STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         MAXPOINT = INTEGER (Given)
-      }{
-         If zero, the number of points needed to define the Region is
-         returned in
-         NPOINT,
-         but no axis values are returned and all other parameters are ignored.
-         If not zero, the supplied value should be the length of the
-         first dimension of the POINTS
-         array. An error is reported if the number of points needed to define
-         the Region exceeds this number.
-      }
-      \sstsubsection{
-         MAXCOORD = INTEGER (Given)
-      }{
-         The length of the
-         second dimension of the POINTS array.
-         An error is reported if the number of axes in the supplied Region
-         exceeds this number.
-      }
-      \sstsubsection{
-         NPOINT = INTEGER (Returned)
-      }{
-         The
-         number of points defining the Region.
-      }
-      \sstsubsection{
-         POINTS( MAXPOINT, MAXCOORD ) = DOUBLE PRECISION (Returned)
-      }{
-         An array in which to return the coordinates values at the
-         positions that define the Region. These are stored such that the
-         value of coordinate number COORD for point number POINT
-         is found in element POINTS(POINT,COORD).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Box}{Box}
-      }{
-         The first returned position is the Box centre, and the second is
-         a Box corner.
-      }
-      \sstsubsection{
-         \htmlref{Circle}{Circle}
-      }{
-         The first returned position is the Circle centre, and the second is
-         a point on the circumference.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         Returns a value of zero for
-         NPOINT
-         and leaves the supplied array contents unchanged. To find the
-         points defining a CmpRegion, use this method on the component
-         Regions, which can be accessed by invoking
-         \htmlref{AST\_DECOMPOSE}{AST_DECOMPOSE}
-         on the CmpRegion.
-      }
-      \sstsubsection{
-         \htmlref{Ellipse}{Ellipse}
-      }{
-         The first returned position is the Ellipse centre. The second is
-         the end of one of the axes of the ellipse. The third is some
-         other point on the circumference of the ellipse, distinct from
-         the second point.
-      }
-      \sstsubsection{
-         \htmlref{Interval}{Interval}
-      }{
-         The first point corresponds to the lower bounds position, and
-         the second point corresponds to the upper bounds position. These
-         are reversed to indicate an extcluded interval rather than an
-         included interval. See the Interval constructor for more
-         information.
-      }
-      \sstsubsection{
-         \htmlref{NullRegion}{NullRegion}
-      }{
-         Returns a value of zero for
-         NPOINT
-         and leaves the supplied array contents unchanged.
-      }
-      \sstsubsection{
-         \htmlref{PointList}{PointList}
-      }{
-         The positions returned are those that were supplied when the
-         PointList was constructed.
-      }
-      \sstsubsection{
-         \htmlref{Polygon}{Polygon}
-      }{
-         The positions returned are the vertex positions that were supplied
-         when the Polygon was constructed.
-      }
-      \sstsubsection{
-         \htmlref{Prism}{Prism}
-      }{
-         Returns a value of zero for
-         NPOINT
-         and leaves the supplied array contents unchanged. To find the
-         points defining a Prism, use this method on the component
-         Regions, which can be accessed by invoking
-         AST\_DECOMPOSE
-         on the CmpRegion.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the coordinate system represented by the Region has been
-         changed since it was first created, the returned axis values refer
-         to the new (changed) coordinate system, rather than the original
-         coordinate system. Note however that if the transformation from
-         original to new coordinate system is non-linear, the shape within
-         the new coordinate system may be distorted, and so may not match
-         that implied by the name of the Region subclass (Circle, Box, etc).
-      }
-   }
-}
-\sstroutine{
-   AST\_GETSTCCOORD\sstlabel{AST_GETSTCCOORD}
-}{
-   Return information about an AstroCoords element stored in an Stc
-}{
-   \sstdescription{
-      When any sub-class of \htmlref{Stc}{Stc} is created, the constructor function
-      allows one or more AstroCoords elements to be stored within the Stc.
-      This function allows any one of these AstroCoords elements to be
-      retrieved. The format of the returned information is the same as
-      that used to pass the original information to the Stc constructor.
-      That is, the information is returned in a \htmlref{KeyMap}{KeyMap} structure
-      containing elements with one or more of the keys given by symbolic
-      constants AST\_\_STCNAME, AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES,
-      AST\_\_STCSIZE and AST\_\_STCPIXSZ.
-
-      If the coordinate system represented by the Stc has been changed
-      since it was created (for instance, by changing its \htmlref{System}{System}
-      attribute), then the sizes and positions in the returned KeyMap
-      will reflect the change in coordinate system.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETSTCCOORD( THIS, ICOORD, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Stc.
-      }
-      \sstsubsection{
-         ICOORD = INTEGER (Given)
-      }{
-         The index of the AstroCoords element required. The first has index
-         one. The number of AstroCoords elements in the Stc can be found using
-         function \htmlref{AST\_GETSTCNCOORD}{AST_GETSTCNCOORD}.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETSTCCOORD = INTEGER
-      }{
-         A pointer to a new KeyMap containing the required information.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETSTCNCOORD\sstlabel{AST_GETSTCNCOORD}
-}{
-   Return the number of AstroCoords elements stored in an Stc
-}{
-   \sstdescription{
-      This function returns the number of AstroCoords elements stored in
-      an \htmlref{Stc}{Stc}.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETSTCNCOORD( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Stc.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETSTCNCOORD = INTEGER
-      }{
-         The number of  AstroCoords elements stored in the Stc.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Zero will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETSTCREGION\sstlabel{AST_GETSTCREGION}
-}{
-   Obtain a copy of the encapsulated Region within a Stc
-}{
-   \sstdescription{
-      This function returns a pointer to a deep copy of the \htmlref{Region}{Region}
-      supplied when the \htmlref{Stc}{Stc} was created.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETSTCREGION( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Stc.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETSTCREGION = INTEGER
-      }{
-         A pointer to a deep copy of the Region encapsulated within the
-         supplied Stc.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GETUNC\sstlabel{AST_GETUNC}
-}{
-   Obtain uncertainty information from a Region
-}{
-   \sstdescription{
-      This function returns a \htmlref{Region}{Region} which represents the uncertainty
-      associated with positions within the supplied Region. See
-      \htmlref{AST\_SETUNC}{AST_SETUNC}
-      for more information about Region uncertainties and their use.
-   }
-   \sstinvocation{
-      RESULT = AST\_GETUNC( THIS, DEF, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         DEF = LOGICAL (Given)
-      }{
-         Controls what is returned if no uncertainty information has been
-         associated explicitly with the supplied Region. If
-         .TRUE.
-         is supplied, then the default uncertainty Region used internally
-         within AST is returned (see {\tt{"}}Applicability{\tt{"}} below). If
-         .FALSE. is supplied, then AST\_\_NULL
-         will be returned (without error).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default uncertainty for a CmpRegion is taken from one of the
-         two component Regions. If the first component Region has a
-         non-default uncertainty, then it is used as the default uncertainty
-         for the parent CmpRegion. Otherwise, if the second component Region
-         has a non-default uncertainty, then it is used as the default
-         uncertainty for the parent CmpRegion. If neither of the
-         component Regions has non-default uncertainty, then the default
-         uncertainty for the CmpRegion is 1.0E-6 of the bounding box of
-         the CmpRegion.
-      }
-      \sstsubsection{
-         \htmlref{Prism}{Prism}
-      }{
-         The default uncertainty for a Prism is formed by combining the
-         uncertainties from the two component Regions. If a component
-         Region does not have a non-default uncertainty, then its default
-         uncertainty will be used to form the default uncertainty of the
-         parent Prism.
-      }
-      \sstsubsection{
-         Region
-      }{
-         For other classes of Region, the default uncertainty is 1.0E-6
-         of the bounding box of the Region. If the bounding box has zero
-         width on any axis, then the uncertainty will be 1.0E-6 of the
-         axis value.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GETUNC = INTEGER
-      }{
-         A pointer to a Region describing the uncertainty in the supplied
-         Region.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If uncertainty information is associated with a Region, and the
-         coordinate system described by the Region is subsequently changed
-         (e.g. by changing the value of its \htmlref{System}{System} attribute, or using the
-         \htmlref{AST\_MAPREGION}{AST_MAPREGION}
-         function), then the uncertainty information returned by this function
-         will be modified so that it refers to the coordinate system currently
-         described by the supplied Region.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_GRFPOP\sstlabel{AST_GRFPOP}
-}{
-   Restore previously saved graphics functions used by a Plot
-}{
-   \sstdescription{
-      The \htmlref{AST\_GRFPUSH}{AST_GRFPUSH} and AST\_GRFPOP functions are intended for situations
-      where it is necessary to make temporary changes to the graphics
-      functions used by the \htmlref{Plot}{Plot}. The current functions should first be
-      saved by calling AST\_GRFPUSH. New functions should then be registered
-      using \htmlref{AST\_GRFSET}{AST_GRFSET}. The required graphics should then be produced.
-      Finally, AST\_GRFPOP should be called to restore the original graphics
-      functions.
-   }
-   \sstinvocation{
-      CALL AST\_GRFPOP( THIS STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine returns without action if there are no snapshots to
-         restore. No error is reported in this case.
-      }
-   }
-}
-\sstroutine{
-   AST\_GRFPUSH\sstlabel{AST_GRFPUSH}
-}{
-   Save the current graphics functions used by a Plot
-}{
-   \sstdescription{
-      This routine takes a snapshot of the graphics functions which are
-      currently registered with the supplied \htmlref{Plot}{Plot}, and saves the snapshot
-      on a first-in-last-out stack within the Plot. The snapshot can be
-      restored later using function
-      \htmlref{AST\_GRFPOP}{AST_GRFPOP}.
-
-      The AST\_GRFPUSH and AST\_GRFPOP functions are intended for situations
-      where it is necessary to make temporary changes to the graphics
-      functions used by the Plot. The current functions should first be
-      saved by calling AST\_GRFPUSH. New functions should then be registered
-      using \htmlref{AST\_GRFSET}{AST_GRFSET}. The required graphics should then be produced.
-      Finally, AST\_GRFPOP should be called to restore the original graphics
-      functions.
-   }
-   \sstinvocation{
-      CALL AST\_GRFPUSH( THIS STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_GRFSET\sstlabel{AST_GRFSET}
-}{
-   Register a graphics routine for use by a Plot
-}{
-   \sstdescription{
-      This routine can be used to select the underlying graphics
-      routines to be used when the supplied \htmlref{Plot}{Plot} produces graphical output.
-      If this routine is not called prior to producing graphical
-      output, then the underlying graphics routines selected at
-      link-time (using the \htmlref{ast\_link}{ast_link} command) will be used. To use
-      alternative graphics routines, call this routine before
-      the graphical output is created, specifying the graphics
-      routines to be used. This will register the routine for future
-      use, but the routine will not actually be used until the \htmlref{Grf}{Grf}
-      attribute is given a non-zero value.
-   }
-   \sstinvocation{
-      CALL AST\_GRFSET( THIS, NAME, FUN, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A name indicating the graphics routine to be replaced.
-         Various graphics routines are used by the
-         Plot class, and any combination of them may be supplied by calling
-         this routine once for each routine to be replaced. If any of the
-         graphics routines are not replaced in this way, the
-         corresponding routines in the graphics interface selected at
-         link-time (using the ast\_link command) are used. The allowed
-         function names are:
-
-         \sstitemlist{
-
-            \sstitem
-            Attr -  Enquire or set a graphics attribute value
-
-            \sstitem
-            Cap -  Inquire a capability
-
-            \sstitem
-            Flush - Flush all pending graphics to the output device
-
-            \sstitem
-            Line - Draw a polyline (i.e. a set of connected lines)
-
-            \sstitem
-            Mark -  Draw a set of markers
-
-            \sstitem
-            Qch -  Return the character height in world coordinates
-
-            \sstitem
-            Scales -  Get the axis scales
-
-            \sstitem
-            Text - Draw a character string
-
-            \sstitem
-            TxExt -  Get the extent of a character string
-
-         }
-         The string is case insensitive. For details of the interface
-         required for each, see the sections below.
-      }
-      \sstsubsection{
-         FUN = INTEGER FUNCTION (Given)
-      }{
-         The name of the routine to be used to provide the
-         functionality indicated by parameter NAME (the name
-         should also appear in a Fortran EXTERNAL statement in the
-         routine which invokes AST\_GRFSET).
-
-         Once a routine has been provided, the {\tt{"}}null{\tt{"}} routine AST\_NULL can
-         be supplied in a subsequent call to astGrfSet to reset the routine
-         to the corresponding routine in the graphics interface selected at
-         link-time. AST\_NULL is defined in the AST\_PAR include file.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstdiytopic{
-      Function Interfaces
-   }{
-      All the functions listed below (except for {\tt{"}}Cap{\tt{"}}) should return an
-      integer value of 0 if an error occurs, and 1 otherwise. All x and y
-      values refer
-      to {\tt{"}}graphics cordinates{\tt{"}} as defined by the GRAPHBOX parameter of
-      the \htmlref{AST\_PLOT}{AST_PLOT} call which created the Plot.
-
-      The first argument (GRFCON)
-      for each function is an AST \htmlref{KeyMap}{KeyMap} pointer that can be used by the
-      called function to establish the context in which it is being called.
-      The contents of the KeyMap are determined by the calling
-      application, which should obtain a pointer to the KeyMap using the
-      \htmlref{AST\_GETGRFCONTEXT}{AST_GETGRFCONTEXT} routine,
-      and then store any necessary information in the KeyMap using the
-      methods of the KeyMap class. Note, the functions listed below
-      should never annul or delete the supplied KeyMap pointer.
-   }
-   \sstdiytopic{
-      Attr
-   }{
-      The {\tt{"}}Attr{\tt{"}} function returns the current value of a specified graphics
-      attribute, and optionally establishes a new value. The supplied
-      value is converted to an integer value if necessary before use.
-      It requires the following interface:
-
-      INTEGER FUNCTION ATTR( GRFCON, ATT, VAL, OLDVAL, PRIM )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         ATT = INTEGER (Given) - An integer identifying the required attribute.
-           The following symbolic values are defined in GRF\_PAR:
-           GRF\_\_STYLE (Line style),
-           GRF\_\_WIDTH (Line width),
-           GRF\_\_SIZE (Character and marker size scale factor),
-           GRF\_\_FONT (Character font),
-           GRF\_\_COLOUR (Colour index).
-
-         \sstitem
-         VAL = DOUBLE PRECISION (Given) -
-           no value is stored.
-
-         \sstitem
-         OLDVAL = DOUBLE PRECISION (Returned) - Returned holding
-           the attribute value.
-
-         \sstitem
-         PRIM = INTEGER (Given) -
-           The sort of graphics primitive to be drawn with the new attribute.
-           Identified by the following values defined in GRF\_PAR:
-           GRF\_\_LINE,
-           GRF\_\_MARK,
-           GRF\_\_TEXT.
-      }
-   }
-   \sstdiytopic{
-      Cap
-   }{
-      The {\tt{"}}Cap{\tt{"}} function is called to determine if the grf module has a
-      given capability, as indicated by the {\tt{"}}cap{\tt{"}} argument:
-
-      INTEGER FUNCTION CAP( GRFCON, CAP, VALUE )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         CAP = INTEGER (Given)
-            The capability being inquired about. This will be one of the
-            following constants defined in GRF\_PAR:
-
-      }
-         GRF\_\_SCALES: This function should return a non-zero value if the
-         {\tt{"}}Scales{\tt{"}} function is implemented, and zero otherwise. The supplied
-         VALUE argument should be ignored.
-
-         GRF\_\_MJUST: This function should return a non-zero value if
-         the {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions recognise {\tt{"}}M{\tt{"}} as a
-         character in the justification string. If the first character of
-         a justification string is {\tt{"}}M{\tt{"}}, then the text should be justified
-         with the given reference point at the bottom of the bounding box.
-         This is different to {\tt{"}}B{\tt{"}} justification, which requests that the
-         reference point be put on the baseline of the text, since some
-         characters hang down below the baseline. If the {\tt{"}}Text{\tt{"}} or
-         {\tt{"}}TxExt{\tt{"}} function cannot differentiate between {\tt{"}}M{\tt{"}} and {\tt{"}}B{\tt{"}},
-         then this function should return zero, in which case {\tt{"}}M{\tt{"}}
-         justification will never be requested by Plot. The supplied
-         VALUE argument should be ignored.
-
-         GRF\_\_ESC: This function should return a non-zero value if the
-         {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions can recognise and interpret
-         graphics escape sequences within the supplied string (see
-         attribute \htmlref{Escape}{Escape}). Zero should be returned if escape sequences
-         cannot be interpreted (in which case the Plot class will interpret
-         them itself if needed). The supplied VALUE argument should be
-         ignored only if escape sequences cannot be interpreted by {\tt{"}}Text{\tt{"}} and
-         {\tt{"}}TxExt{\tt{"}}. Otherwise, VALUE indicates whether {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}}
-         should interpret escape sequences in subsequent calls. If VALUE is
-         non-zero then escape sequences should be interpreted by {\tt{"}}Text{\tt{"}} and
-         {\tt{"}}TxExt{\tt{"}}. Otherwise, they should be drawn as literal text.
-
-      \sstitemlist{
-
-         \sstitem
-         VALUE = INTEGER (Given)
-            The use of this parameter depends on the value of CAP as
-            described above.
-
-         \sstitem
-         Returned Function Value:
-            The value returned by the function depends on the value of CAP
-            as described above. Zero should be returned if the supplied
-            capability is not recognised.
-      }
-   }
-   \sstdiytopic{
-      Flush
-   }{
-      The {\tt{"}}Flush{\tt{"}} function ensures that the display device is up-to-date,
-      by flushing any pending graphics to the output device. It
-      requires the following interface:
-
-      INTEGER FUNCTION FLUSH( GRFCON )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-      }
-   }
-   \sstdiytopic{
-      Line
-   }{
-      The {\tt{"}}Line{\tt{"}} function displays lines joining the given positions and
-      requires the following interface:
-
-      INTEGER FUNCTION LINE( GRFCON, N, X, Y )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         N = INTEGER (Given) - The number of positions to be joined together.
-
-         \sstitem
-         X( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} x values.
-
-         \sstitem
-         Y( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} y values.
-      }
-   }
-   \sstdiytopic{
-      Mark
-   }{
-      The {\tt{"}}Mark{\tt{"}} function displays markers at the given positions. It
-      requires the following interface:
-
-      INTEGER FUNCTION MARK( GRFCON, N, X, Y, TYPE )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         N = INTEGER (Given) - The number of positions to be marked.
-
-         \sstitem
-         X( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} x values.
-
-         \sstitem
-         Y( N ) = REAL (Given) - An array holding the {\tt{"}}n{\tt{"}} y values.
-
-         \sstitem
-         TYPE = INTEGER (Given) - An integer which can be used to indicate
-           the type of marker symbol required.
-      }
-   }
-   \sstdiytopic{
-      Qch
-   }{
-      The {\tt{"}}Qch{\tt{"}} function returns the heights of characters drawn vertically
-      and horizontally in graphics coordinates. It requires the following
-      interface:
-
-      INTEGER FUNCTION QCH( GRFCON, CHV, CHH )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         CHV = REAL (Returned) The height of
-         characters drawn with a vertical baseline. This will be an
-         increment in the X axis.
-
-         \sstitem
-         CHH = REAL (Returned) The height of
-         characters drawn with a horizontal baseline. This will be an
-         increment in the Y axis.
-      }
-   }
-   \sstdiytopic{
-      Scales
-   }{
-      The {\tt{"}}Scales{\tt{"}} function returns two values (one for each axis) which
-      scale increments on the corresponding axis into a {\tt{"}}normal{\tt{"}} coordinate
-      system in which: 1) the axes have equal scale in terms of (for instance)
-      millimetres per unit distance, 2) X values increase from left to
-      right, and 3) Y values increase from bottom to top. It requires the
-      following interface:
-
-      INTEGER FUNCTION SCALES( GRFCON, ALPHA, BETA )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         ALPHA = REAL (Returned) The
-         scale for the X axis (i.e. Xnorm = alpha$*$Xworld).
-
-         \sstitem
-         BETA = REAL (Returned) The
-         scale for the Y axis (i.e. Ynorm = beta$*$Yworld).
-      }
-   }
-   \sstdiytopic{
-      Text
-   }{
-      The {\tt{"}}Text{\tt{"}} function displays a character string at a given
-      position using a specified justification and up-vector. It
-      requires the following interface:
-
-      INTEGER FUNCTION TEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         TEXT = CHARACTER $*$ ( $*$ ) (Given) - The string to be displayed.
-
-         \sstitem
-         X = REAL (Given) - The reference x coordinate.
-
-         \sstitem
-         Y = REAL (Given) - The reference y coordinate.
-
-         \sstitem
-         JUST = CHARACTER $*$ ( $*$ ) (Given ) - A string which specifies the
-            location within the
-            text string which is to be placed at the reference position
-            given by x and y. The first character may be 'T' for {\tt{"}}top{\tt{"}},
-            'C' for {\tt{"}}centre{\tt{"}}, or 'B' for {\tt{"}}bottom{\tt{"}}, and specifies the
-            vertical location of the reference position. Note, {\tt{"}}bottom{\tt{"}}
-            corresponds to the base-line of normal text. Some characters
-            (eg {\tt{"}}y{\tt{"}}, {\tt{"}}g{\tt{"}}, {\tt{"}}p{\tt{"}}, etc) descend below the base-line. The second
-            character may be 'L' for {\tt{"}}left{\tt{"}}, 'C' for {\tt{"}}centre{\tt{"}}, or 'R'
-            for {\tt{"}}right{\tt{"}}, and specifies the horizontal location of the
-            reference position. If the string has less than 2 characters
-            then 'C' is used for the missing characters.
-
-         \sstitem
-         UPX = REAL (Given) - The x component of the up-vector for the text.
-            If necessary the supplied value should be negated
-            to ensure that positive values always refer to displacements from
-            left to right on the screen.
-
-         \sstitem
-         UPX = REAL (Given) - The y component of the up-vector for the text.
-            If necessary the supplied value should be negated
-            to ensure that positive values always refer to displacements from
-            bottom to top on the screen.
-      }
-   }
-   \sstdiytopic{
-      TxExt
-   }{
-      The {\tt{"}}TxExt{\tt{"}} function returns the corners of a box which would enclose
-      the supplied character string if it were displayed using the
-      Text function described above. The returned box includes any leading
-      or trailing spaces. It requires the following interface:
-
-      INTEGER FUNCTION TXEXT( GRFCON, TEXT, X, Y, JUST, UPX, UPY, XB, YB )
-
-      \sstitemlist{
-
-         \sstitem
-         GRFCON = INTEGER (Given) -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         TEXT = CHARACTER $*$ ( $*$ ) (Given) - The string to be displayed.
-
-         \sstitem
-         X = REAL (Given) - The reference x coordinate.
-
-         \sstitem
-         Y = REAL (Given) - The reference y coordinate.
-
-         \sstitem
-         JUST = CHARACTER $*$ ( $*$ ) (Given ) - A string which specifies the
-            location within the
-            text string which is to be placed at the reference position
-            given by x and y. See {\tt{"}}Text{\tt{"}} above.
-
-         \sstitem
-         UPX = REAL (Given) - The x component of the up-vector for the text.
-            See {\tt{"}}Text{\tt{"}} above.
-
-         \sstitem
-         UPX = REAL (Given) - The y component of the up-vector for the text.
-            See {\tt{"}}Text{\tt{"}} above.
-
-         \sstitem
-         XB( 4 ) = REAL (Returned) - Returned holding the x coordinate of
-            each corner of the bounding box.
-
-         \sstitem
-         YB( 4 ) = REAL (Returned) - Returned holding the y coordinate of
-            each corner of the bounding box.
-      }
-   }
-}
-\sstroutine{
-   AST\_GRID\sstlabel{AST_GRID}
-}{
-   Draw a set of labelled coordinate axes
-}{
-   \sstdescription{
-      This routine draws a complete annotated set of
-      coordinate axes for a \htmlref{Plot}{Plot} with (optionally) a coordinate grid
-      superimposed. Details of the axes and grid can be controlled by
-      setting values for the various attributes defined by the Plot
-      class (q.v.).
-   }
-   \sstinvocation{
-      CALL AST\_GRID( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the supplied Plot is a \htmlref{Plot3D}{Plot3D}, the axes will be annotated
-         using three 2-dimensional Plots, one for each 2D plane in the 3D
-         current coordinate system. The plots will be {\tt{"}}pasted{\tt{"}} onto 3 faces
-         of the cuboid graphics volume specified when the Plot3D was
-         constructed. The faces to be used can be controlled by the {\tt{"}}\htmlref{RootCorner}{RootCorner}{\tt{"}}
-         attribute.
-
-         \sstitem
-         An error results if either the current \htmlref{Frame}{Frame} or the base Frame
-         of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the base
-         and current Frames of the Plot is not defined in either
-         direction (i.e. the Plot's \htmlref{TranForward}{TranForward} or \htmlref{TranInverse}{TranInverse} attribute
-         is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_GRIDLINE\sstlabel{AST_GRIDLINE}
-}{
-   Draw a grid line (or axis) for a Plot
-}{
-   \sstdescription{
-      This routine draws a curve in the physical coordinate system of
-      a \htmlref{Plot}{Plot} by varying only one of the coordinates along the length
-      of the curve. It is intended for drawing coordinate axes,
-      coordinate grids, and tick marks on axes (but note that these
-      are also available via the more comprehensive \htmlref{AST\_GRID}{AST_GRID} routine).
-
-      The curve is transformed into graphical coordinate space for
-      plotting, so that a straight line in physical coordinates may
-      result in a curved line being drawn if the \htmlref{Mapping}{Mapping} involved is
-      non-linear. Any discontinuities in the Mapping between physical
-      and graphical coordinates are catered for, as is any
-      clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
-   }
-   \sstinvocation{
-      CALL AST\_GRIDLINE( THIS, AXIS, START, LENGTH, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         AXIS = INTEGER (Given)
-      }{
-         The index of the Plot axis whose physical coordinate value is
-         to be varied along the length of the curve (all other
-         coordinates will remain fixed). This value should lie in the
-         range from 1 to the number of Plot axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         START( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the start of the curve.
-      }
-      \sstsubsection{
-         LENGTH = DOUBLE PRECISION (Given)
-      }{
-         The length of curve to be drawn, given as an increment along
-         the selected physical axis. This may be positive or negative.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No curve is drawn if the START array contains any
-         coordinates with the value AST\_\_BAD, nor if LENGTH has this value.
-
-         \sstitem
-         An error results if the base \htmlref{Frame}{Frame} of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_GRISMMAP\sstlabel{AST_GRISMMAP}
-}{
-   Create a GrismMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{GrismMap}{GrismMap} and optionally initialises
-      its attributes.
-
-      A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates using the spectral dispersion equation
-      described in FITS-WCS paper III {\tt{"}}Representation of spectral
-      coordinates in FITS{\tt{"}}. This describes the dispersion produced by
-      gratings, prisms and grisms.
-
-      When initially created, the forward transformation of a GrismMap
-      transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
-      values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
-      linearly related to position on the detector. It is defined in FITS-WCS
-      paper III as {\tt{"}}the offset on the detector from the point of intersection
-      of the camera axis, measured in units of the effective local length{\tt{"}}.
-      The units in which wavelength values are expected or returned is
-      determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
-      \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
-      also be used for the wavelength values.
-   }
-   \sstinvocation{
-      RESULT = AST\_GRISMMAP( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new GrismMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_GRISMMAP = INTEGER
-      }{
-         A pointer to the new GrismMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_IMPORT\sstlabel{AST_IMPORT}
-}{
-   Import an Object pointer to the current context
-}{
-   \sstdescription{
-      This routine
-      imports an \htmlref{Object}{Object} pointer that was created in a higher or lower
-      level context, into the current AST context.
-      This means that the pointer will be annulled when the current context
-      is ended (with \htmlref{AST\_END}{AST_END}).
-   }
-   \sstinvocation{
-      CALL AST\_IMPORT( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Object pointer to be imported.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-}
-\sstroutine{
-   AST\_INTERSECT\sstlabel{AST_INTERSECT}
-}{
-   Find the point of intersection between two geodesic curves
-}{
-   \sstdescription{
-      This routine
-      finds the coordinate values at the point of intersection between
-      two geodesic curves. Each curve is specified by two points on
-      the curve.  It can only be used with 2-dimensional Frames.
-
-      For example, in a basic \htmlref{Frame}{Frame}, it will find the point of
-      intersection between two straight lines. But for a \htmlref{SkyFrame}{SkyFrame} it
-      will find an intersection of two great circles.
-   }
-   \sstinvocation{
-      CALL AST\_INTERSECT( THIS, A1, A2, B1, B2, CROSS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         A1( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
-         first point on the first geodesic curve.
-      }
-      \sstsubsection{
-         A2( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute). This should contain the coordinates of a
-         second point on the first geodesic curve. It should not be
-         co-incident with the first point.
-      }
-      \sstsubsection{
-         B1( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute). This should contain the coordinates of the
-         first point on the second geodesic curve.
-      }
-      \sstsubsection{
-         B2( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute). This should contain the coordinates of a
-         second point on the second geodesic curve. It should not be
-         co-incident with the first point.
-      }
-      \sstsubsection{
-         CROSS( 2 ) = DOUBLE PRECISION (Returned)
-      }{
-         An array with one element for each Frame axis
-         in which the coordinates of the required intersection will
-         be returned.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For SkyFrames each curve will be a great circle, and in general
-         each pair of curves will intersect at two diametrically opposite
-         points on the sky. The returned position is the one which is
-         closest to point
-         A1.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value, or if the two
-         points defining either geodesic are co-incident, or if the two
-         curves do not intersect.
-
-         \sstitem
-         The geodesic curve used by this routine is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
-         \sstitem
-         An error will be reported if the Frame is not 2-dimensional.
-      }
-   }
-}
-\sstroutine{
-   AST\_INTERVAL\sstlabel{AST_INTERVAL}
-}{
-   Create a Interval
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Interval}{Interval} and optionally initialises its
-      attributes.
-
-      A Interval is a \htmlref{Region}{Region} which represents upper and/or lower limits on
-      one or more axes of a \htmlref{Frame}{Frame}. For a point to be within the region
-      represented by the Interval, the point must satisfy all the
-      restrictions placed on all the axes. The point is outside the region
-      if it fails to satisfy any one of the restrictions. Each axis may have
-      either an upper limit, a lower limit, both or neither. If both limits
-      are supplied but are in reverse order (so that the lower limit is
-      greater than the upper limit), then the interval is an excluded
-      interval, rather than an included interval.
-
-      At least one axis limit must be supplied.
-
-      Note, The Interval class makes no allowances for cyclic nature of
-      some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
-      should usually be used in these cases since this requires the user
-      to think about suitable upper and lower limits,
-   }
-   \sstinvocation{
-      RESULT = AST\_INTERVAL( FRAME, LBND, UBND, UNC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         LBND( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the lower limits on each axis.
-         Set a value to AST\_\_BAD to indicate that the axis has no lower
-         limit.
-      }
-      \sstsubsection{
-         UBND( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute) containing the upper limits on each axis.
-         Set a value to AST\_\_BAD to indicate that the axis has no upper
-         limit.
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the Box being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Interval. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_INTERVAL = INTEGER
-      }{
-         A pointer to the new Interval.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_INTRAMAP\sstlabel{AST_INTRAMAP}
-}{
-   Create an IntraMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{IntraMap}{IntraMap} and optionally initialises
-      its attributes.
-
-      An IntraMap is a specialised form of \htmlref{Mapping}{Mapping} which encapsulates
-      a privately-defined coordinate transformation routine
-      (e.g. written in Fortran) so that it may be used like any other
-      AST Mapping. This allows you to create Mappings that perform any
-      conceivable coordinate transformation.
-
-      However, an IntraMap is intended for use within a single program
-      or a private suite of software, where all programs have access
-      to the same coordinate transformation functions (i.e. can be
-      linked against them). IntraMaps should not normally be stored in
-      datasets which may be exported for processing by other software,
-      since that software will not have the necessary transformation
-      functions available, resulting in an error.
-
-      You must register any coordinate transformation functions to be
-      used using \htmlref{AST\_INTRAREG}{AST_INTRAREG} before creating an IntraMap.
-   }
-   \sstinvocation{
-      RESULT = AST\_INTRAMAP( NAME, NIN, NOUT, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the name of the transformation
-         routine to use (which should previously have been registered
-         using AST\_INTRAREG). This name is case sensitive. All white
-         space will be removed before use.
-      }
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of input coordinates. This must be compatible with
-         the number of input coordinates accepted by the
-         transformation routine (as specified when this routine was
-         registered using AST\_INTRAREG).
-      }
-      \sstsubsection{
-         NOUT = INTEGER (Given)
-      }{
-         The number of output coordinates. This must be compatible
-         with the number of output coordinates produced by the
-         transformation routine (as specified when this routine was
-         registered using AST\_INTRAREG).
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new IntraMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_INTRAMAP = INTEGER
-      }{
-         A pointer to the new IntraMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_INTRAREG\sstlabel{AST_INTRAREG}
-}{
-   Register a transformation routine for use by an IntraMap
-}{
-   \sstdescription{
-      This function registers a privately-defined coordinate
-      transformation routine written in Fortran so that it may be used
-      to create an \htmlref{IntraMap}{IntraMap}. An IntraMap is a specialised form of
-      \htmlref{Mapping}{Mapping} which encapsulates the Fortran routine so that it may be
-      used like any other AST Mapping. This allows you to create
-      Mappings that perform any conceivable coordinate transformation.
-
-      Registration of relevant transformation routines is required
-      before using the \htmlref{AST\_INTRAMAP}{AST_INTRAMAP} constructor function to create an
-      IntraMap or reading an external representation of an IntraMap
-      from a \htmlref{Channel}{Channel}.
-   }
-   \sstinvocation{
-      CALL AST\_INTRAREG( NAME, NIN, NOUT, TRAN, FLAGS, PURPOSE, AUTHOR,
-                         CONTACT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a unique name to be associated
-         with the transformation routine in order to identify it. This
-         name is case sensitive. All white space will be removed
-         before use.
-      }
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of input coordinates accepted by the
-         transformation routine (i.e. the number of dimensions of the
-         space in which the input points reside). A value of AST\_\_ANY
-         may be given if the routine is able to accommodate a variable
-         number of input coordinates.
-      }
-      \sstsubsection{
-         NOUT = INTEGER (Given)
-      }{
-         The number of output coordinates produced by the
-         transformation routine (i.e. the number of dimensions of the
-         space in which the output points reside). A value of AST\_\_ANY
-         may be given if the routine is able to produce a variable
-         number of output coordinates.
-      }
-      \sstsubsection{
-         TRAN = SUBROUTINE (Given)
-      }{
-         The transformation routine to be registered.  This routine
-         should perform whatever coordinate transformations are
-         required and should have an interface like \htmlref{AST\_TRANN}{AST_TRANN} (q.v.).
-
-         This transformation routine must also appear in an EXTERNAL
-         statement in the routine which calls AST\_INTRAREG.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         This value may be used to supply a set of flags which
-         describe the transformation routine and which may affect the
-         behaviour of any IntraMap which uses it.  Often, a value of
-         zero will be given here, but you may also supply the sum of a
-         set of flags as described in the {\tt{"}}Transformation Flags{\tt{"}}
-         section (below).
-      }
-      \sstsubsection{
-         PURPOSE = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a short (one line) textual
-         comment to describe the purpose of the transformation
-         routine.
-      }
-      \sstsubsection{
-         AUTHOR = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the name of the author of the
-         transformation routine.
-      }
-      \sstsubsection{
-         CONTACT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing contact details for the author
-         of the transformation routine (e.g. an e-mail or WWW
-         address). If any IntraMap which uses this transformation
-         routine is exported as part of a dataset to an external user
-         who does not have access to the routine, then these contact
-         details should allow them to obtain the necessary code.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Beware that an external representation of an IntraMap (created
-         by writing it to a Channel) will not include the coordinate
-         transformation routine which it uses, so will only refer to the
-         routine by its name (as assigned using AST\_INTRAREG).
-         Consequently, the external representation cannot be utilised by
-         another program unless that program has also registered the same
-         transformation routine with the same name using an identical
-         invocation of AST\_INTRAREG. If no such registration has been
-         performed, then attempting to read the external representation
-         will result in an error.
-
-         \sstitem
-         You may use AST\_INTRAREG to register a transformation routine
-         with the same name more than once, but only if the arguments
-         supplied are identical on each occasion (i.e there is no way of
-         changing things once a routine has been successfully registered
-         under a given name, and attempting to do so will result in an
-         error). This feature simply allows registration to be performed
-         independently, but consistently, at several places within your
-         program, without having to check whether it has already been
-         done.
-
-         \sstitem
-         If an error occurs in the transformation routine, this may be
-         indicated by setting its STATUS argument to an error value
-         before it returns.  This will immediately terminate the current
-         AST operation.  The error value AST\_\_ITFER is available for this
-         purpose, but other values may also be used (e.g. if you wish to
-         distinguish different types of error). The AST\_\_ITFER error
-         value is defined in the AST\_ERR include file.
-      }
-   }
-   \sstdiytopic{
-      Transformation Flags
-   }{
-      The following flags are defined in the AST\_PAR include file and
-      allow you to provide further information about the nature of the
-      transformation routine. Having selected the set of flags which
-      apply, you should supply the sum of their values as the FLAGS
-      argument to AST\_INTRAREG.
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NOFWD: If this flag is set, it indicates that the
-         transformation routine does not implement a forward coordinate
-         transformation. In this case, any IntraMap which uses it will
-         have a \htmlref{TranForward}{TranForward} attribute value of zero and the
-         transformation routine itself will not be called with its
-         FORWARD argument set to .TRUE.. By default, it is assumed that a
-         forward transformation is provided.
-
-         \sstitem
-         AST\_\_NOINV: If this flag is set, it indicates that the
-         transformation routine does not implement an inverse coordinate
-         transformation. In this case, any IntraMap which uses it will
-         have a \htmlref{TranInverse}{TranInverse} attribute value of zero and the
-         transformation routine itself will not be called with its
-         FORWARD argument set to .FALSE.. By default, it is assumed that
-         an inverse transformation is provided.
-
-         \sstitem
-         AST\_\_SIMPFI: You may set this flag if applying the
-         transformation routine's forward coordinate transformation,
-         followed immediately by the matching inverse transformation,
-         should always restore the original set of coordinates. It
-         indicates that AST may replace such a sequence of operations by
-         an identity Mapping (a \htmlref{UnitMap}{UnitMap}) if it is encountered while
-         simplifying a compound Mapping (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}).  It is
-         not necessary that both transformations have actually been
-         implemented.
-
-         \sstitem
-         AST\_\_SIMPIF: You may set this flag if applying the
-         transformation routine's inverse coordinate transformation,
-         followed immediately by the matching forward transformation,
-         should always restore the original set of coordinates. It
-         indicates that AST may replace such a sequence of operations by
-         an identity Mapping (a UnitMap) if it is encountered while
-         simplifying a compound Mapping (e.g. using AST\_SIMPLIFY).  It is
-         not necessary that both transformations have actually been
-         implemented.
-      }
-   }
-}
-\sstroutine{
-   AST\_INVERT\sstlabel{AST_INVERT}
-}{
-   Invert a Mapping
-}{
-   \sstdescription{
-      This routine inverts a \htmlref{Mapping}{Mapping} by reversing the boolean sense
-      of its \htmlref{Invert}{Invert} attribute. If this attribute is zero (the
-      default), the Mapping will transform coordinates in the way
-      specified when it was created. If it is non-zero, the input and
-      output coordinates will be inter-changed so that the direction
-      of the Mapping is reversed. This will cause it to display the
-      inverse of its original behaviour.
-   }
-   \sstinvocation{
-      CALL AST\_INVERT( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_ISA$<$CLASS$>$\sstlabel{AST_ISACLASS}
-}{
-   Test membership of a class by an Object
-}{
-   \sstdescription{
-      This is a family of functions which test whether an \htmlref{Object}{Object} is a
-      member of the class called $<$CLASS$>$, or of any class derived from
-      it.
-   }
-   \sstinvocation{
-      RESULT = AST\_ISA$<$CLASS$>$( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         These functions apply to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_ISA$<$CLASS$>$ = LOGICAL
-      }{
-         .TRUE. if the Object belongs to the class called $<$CLASS$>$ (or to
-         a class derived from it), otherwise .FALSE..
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         MEMBER = AST\_ISAFRAME( OBJ, STATUS );
-      }{
-         Tests whether Object OBJ is a member of the \htmlref{Frame}{Frame} class, or
-         of any class derived from a Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Every AST class provides a function (AST\_ISA$<$CLASS$>$) of this
-         form, where $<$CLASS$>$ should be replaced by the class name.
-
-         \sstitem
-         This function attempts to execute even if STATUS is set to an
-         error value
-         on entry, although no further error report will be made
-         if it subsequently fails under these circumstances.
-
-         \sstitem
-         A value of .FALSE. will be returned if this function should fail
-         for any reason. In particular, it will fail if the pointer
-         supplied does not identify an Object of any sort.
-      }
-   }
-}
-\sstroutine{
-   AST\_KEYMAP\sstlabel{AST_KEYMAP}
-}{
-   Create a KeyMap
-}{
-   \sstdescription{
-      This function creates a new empty \htmlref{KeyMap}{KeyMap} and optionally initialises its
-      attributes. Entries can then be added to the KeyMap using the
-      \htmlref{AST\_MAPPUT0$<$X$>$}{AST_MAPPUT0X} and \htmlref{AST\_MAPPUT1$<$X$>$}{AST_MAPPUT1X} functions.
-
-      The KeyMap class is used to store a set of values with associated keys
-      which identify the values. The keys are strings (case-sensitive,
-      trailing spaces are ignored), and the data type of the values can be
-      integer, floating point, character string or AST \htmlref{Object}{Object} pointer. Each
-      value can be a scalar or a one-dimensional vector. A KeyMap is
-      conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
-      input into an output - the input is the key, and the output is the
-      value associated with the key. However, this is only a conceptual
-      similarity, and it should be noted that the KeyMap class inherits from
-      the Object class rather than the Mapping class. The methods of the
-      Mapping class cannot be used with a KeyMap.
-   }
-   \sstinvocation{
-      RESULT = AST\_KEYMAP( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new KeyMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAP = INTEGER
-      }{
-         A pointer to the new KeyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_LINEARAPPROX\sstlabel{AST_LINEARAPPROX}
-}{
-   Obtain a linear approximation to a Mapping, if appropriate
-}{
-   \sstdescription{
-      This function tests the forward coordinate transformation
-      implemented by a \htmlref{Mapping}{Mapping} over a given range of input coordinates. If
-      the transformation is found to be linear to a specified level of
-      accuracy, then an array of fit coefficients is returned. These
-      may be used to implement a linear approximation to the Mapping's
-      forward transformation within the specified range of output coordinates.
-      If the transformation is not sufficiently linear, no coefficients
-      are returned.
-   }
-   \sstinvocation{
-      RESULT = AST\_LINEARAPPROX( THIS, LBND, UBND, TOL, FIT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         LBND( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array
-         containing the lower bounds of a box defined within the input
-         coordinate system of the Mapping. The number of elements in this
-         array should equal the value of the Mapping's \htmlref{Nin}{Nin} attribute. This
-         box should specify the region over which linearity is required.
-      }
-      \sstsubsection{
-         UBND( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array
-         containing the upper bounds of the box specifying the region over
-         which linearity is required.
-      }
-      \sstsubsection{
-         TOL = DOUBLE PRECISION (Given)
-      }{
-         The maximum permitted deviation from linearity, expressed as
-         a positive Cartesian displacement in the output coordinate
-         space of the Mapping. If a linear fit to the forward
-         transformation of the Mapping deviates from the true transformation
-         by more than this amount at any point which is tested, then no fit
-         coefficients will be returned.
-      }
-      \sstsubsection{
-         FIT( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array
-         in which to return the co-efficients of the linear
-         approximation to the specified transformation. This array should
-         have at least {\tt{"}}( Nin $+$ 1 ) $*$ \htmlref{Nout}{Nout}{\tt{"}}, elements. The first Nout elements
-         hold the constant offsets for the transformation outputs. The
-         remaining elements hold the gradients. So if the Mapping has 2 inputs
-         and 3 outputs the linear approximation to the forward transformation
-         is:
-
-            X\_out = fit(1) $+$ fit(4)$*$X\_in $+$ fit(5)$*$Y\_in
-
-            Y\_out = fit(2) $+$ fit(6)$*$X\_in $+$ fit(7)$*$Y\_in
-
-            Z\_out = fit(3) $+$ fit(8)$*$X\_in $+$ fit(9)$*$Y\_in
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_LINEARAPPROX = LOGICAL
-      }{
-         If the forward transformation is sufficiently linear,
-         .TRUE is returned. Otherwise .FALSE. is returned
-         and the fit co-efficients are set to AST\_\_BAD.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function fits the Mapping's forward transformation. To fit
-         the inverse transformation, the Mapping should be inverted using
-         \htmlref{AST\_INVERT}{AST_INVERT}
-         before invoking this function.
-
-         \sstitem
-         A value of .FALSE.
-         will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_LUTMAP\sstlabel{AST_LUTMAP}
-}{
-   Create a LutMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{LutMap}{LutMap} and optionally initialises
-      its attributes.
-
-      A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates by using linear interpolation in a
-      lookup table.  Each input coordinate value is first scaled to
-      give the index of an entry in the table by subtracting a
-      starting value (the input coordinate corresponding to the first
-      table entry) and dividing by an increment (the difference in
-      input coordinate value between adjacent table entries).
-
-      The resulting index will usually contain a fractional part, so
-      the output coordinate value is then generated by interpolating
-      linearly between the appropriate entries in the table. If the
-      index lies outside the range of the table, linear extrapolation
-      is used based on the two nearest entries (i.e. the two entries
-      at the start or end of the table, as appropriate).
-
-      If the lookup table entries increase or decrease monotonically,
-      then the inverse transformation may also be performed.
-   }
-   \sstinvocation{
-      RESULT = AST\_LUTMAP( NLUT, LUT, START, INC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NLUT = INTEGER (Given)
-      }{
-         The number of entries in the lookup table. This value must be
-         at least 2.
-      }
-      \sstsubsection{
-         LUT( NLUT ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the
-         lookup table entries.
-      }
-      \sstsubsection{
-         START = DOUBLE PRECISION (Given)
-      }{
-         The input coordinate value which corresponds to the first lookup
-         table entry.
-      }
-      \sstsubsection{
-         INC = DOUBLE PRECISION (Given)
-      }{
-         The lookup table spacing (the increment in input coordinate
-         value between successive lookup table entries). This value
-         may be positive or negative, but must not be zero.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new LutMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_LUTMAP = INTEGER
-      }{
-         A pointer to the new LutMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the entries in the lookup table either increase or decrease
-         monotonically, then the new LutMap's \htmlref{TranInverse}{TranInverse} attribute will
-         have a value of one, indicating that the inverse transformation
-         can be performed. Otherwise, it will have a value of zero, so
-         that any attempt to use the inverse transformation will result
-         in an error.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_MAPBOX\sstlabel{AST_MAPBOX}
-}{
-   Find a bounding box for a Mapping
-}{
-   \sstdescription{
-      This routine allows you to find the {\tt{"}}bounding box{\tt{"}} which just
-      encloses another box after it has been transformed by a \htmlref{Mapping}{Mapping}
-      (using either its forward or inverse transformation). A typical
-      use might be to calculate the size of an image after being
-      transformed by a Mapping.
-
-      The routine works on one dimension at a time. When supplied with
-      the lower and upper bounds of a rectangular region (box) of
-      input coordinate space, it finds the lowest and highest values
-      taken by a nominated output coordinate within that region. It
-      also returns the input coordinates where these bounding values
-      are attained. It should be used repeatedly to obtain the extent
-      of the bounding box in more than one dimension.
-   }
-   \sstinvocation{
-      CALL AST\_MAPBOX( THIS, LBND\_IN, UBND\_IN, FORWARD, COORD\_OUT,
-                       LBND\_OUT, UBND\_OUT, XL, XU, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         LBND\_IN( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Mapping input
-         coordinate. This should contain the lower bound of the input
-         box in each input dimension.
-      }
-      \sstsubsection{
-         UBND\_IN( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Mapping input
-         coordinate. This should contain the upper bound of the input
-         box in each input dimension.
-
-         Note that it is permissible for the upper bound to be less
-         than the corresponding lower bound, as the values will simply
-         be swapped before use.
-      }
-      \sstsubsection{
-         FORWARD = LOGICAL (Given)
-      }{
-         If this value is .TRUE., then the Mapping's forward
-         transformation will be used to transform the input
-         box. Otherwise, its inverse transformation will be used.
-
-         (If the inverse transformation is selected, then references
-         to {\tt{"}}input{\tt{"}} and {\tt{"}}output{\tt{"}} coordinates in this description
-         should be transposed. For example, the size of the LBND\_IN
-         and UBND\_IN arrays should match the number of output
-         coordinates, as given by the Mapping's \htmlref{Nout}{Nout} attribute.
-         Similarly, the COORD\_OUT argument, below, should nominate one
-         of the Mapping's input coordinates.)
-      }
-      \sstsubsection{
-         COORD\_OUT = INTEGER (Given)
-      }{
-         The index of the output coordinate for which the lower and
-         upper bounds are required. This value should be at least one,
-         and no larger than the number of Mapping output coordinates.
-      }
-      \sstsubsection{
-         LBND\_OUT = DOUBLE PRECISION (Returned)
-      }{
-         The lowest value taken by the nominated output coordinate
-         within the specified region of input coordinate space.
-      }
-      \sstsubsection{
-         UBND\_OUT = DOUBLE PRECISION (Returned)
-      }{
-         The highest value taken by the nominated output coordinate
-         within the specified region of input coordinate space.
-      }
-      \sstsubsection{
-         XL( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array with one element for each Mapping input
-         coordinate. This will return the coordinates of an input
-         point (although not necessarily a unique one) for which the
-         nominated output coordinate attains the lower bound value
-         returned in LBND\_OUT.
-      }
-      \sstsubsection{
-         XU( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array with one element for each Mapping input
-         coordinate. This will return the coordinates of an input
-         point (although not necessarily a unique one) for which the
-         nominated output coordinate attains the upper bound value
-         returned in UBND\_OUT.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Any input points which are transformed by the Mapping to give
-         output coordinates containing the value AST\_\_BAD are regarded as
-         invalid and are ignored. They will make no contribution to
-         determining the output bounds, even although the nominated
-         output coordinate might still have a valid value at such points.
-
-         \sstitem
-         An error will occur if the required output bounds cannot be
-         found. Typically, this might happen if all the input points
-         which the routine considers turn out to be invalid (see
-         above). The number of points considered before generating such
-         an error is quite large, so this is unlikely to occur by
-         accident unless valid points are restricted to a very small
-         subset of the input coordinate space.
-
-         \sstitem
-         The values returned via LBND\_OUT, UBND\_OUT, XL and XU will be
-         set to the value AST\_\_BAD if this routine should fail for any
-         reason. Their initial values on entry will not be altered if the
-         routine is invoked with STATUS set to an error value.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPGET0$<$X$>$\sstlabel{AST_MAPGET0X}
-}{
-   Get a scalar value from a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions for retrieving a scalar value from a \htmlref{KeyMap}{KeyMap}.
-      You should replace $<$X$>$ in the generic function name
-      AST\_MAPGET0$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-      The stored value is converted to the data type indiced by $<$X$>$
-      before being returned (an error is reported if it is not possible to
-      convert the stored value to the requested data type).
-      Note, the version of this function which returns character strings,
-      AST\_MAPGET0C, has an extra parameter in which is returned the number
-      of characters written into the supplied CHARACTER variable.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPGET0$<$X$>$( THIS, KEY, VALUE, STATUS )
-
-      RESULT = AST\_MAPGET0C( THIS, KEY, VALUE, L, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         VALUE = $<$X$>$type (Returned)
-      }{
-         The requested value.
-         If the requested key is not found, then the contents of the
-         buffer on entry to this function will be unchanged on exit.
-      }
-      \sstsubsection{
-         L = INTEGER (Returned)
-      }{
-         This parameter is only present in the interface for the AST\_MAPGET0C
-         function. It is returned holding the number of characters
-         written into the CHARACTER variable supplied for parameter VALUE.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPGET0$<$X$>$ = LOGICAL
-      }{
-         A flag which is set to
-         .TRUE.
-         if the requested key name was found, and is set to
-         .FALSE.
-         otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No error is reported if the requested key cannot be found in the
-         given KeyMap, but a
-         .FALSE.
-         value will be returned as the function value. The supplied buffer
-         will be returned unchanged.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-
-         \sstitem
-         If the stored value is a vector value, then the first value in
-         the vector will be returned.
-
-         \sstitem
-         If the returned value is an AST \htmlref{Object}{Object} pointer, the Object's reference
-         count is incremented by this call. Any subsequent changes made to
-         the Object using the returned pointer will be reflected in any
-         any other active pointers for the Object. The returned pointer
-         should be annulled using
-         \htmlref{AST\_ANNUL}{AST_ANNUL}
-         when it is no longer needed.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      routine, you should replace $<$X$>$ in the generic routine name AST\_MAPGET0$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         C: CHARACTER
-
-         \sstitem
-         A: INTEGER used to identify an AstObject
-
-      }
-      For example, AST\_MAPGET0D would be used to get a DOUBLE PRECISION value,
-      while AST\_MAPGET0I would be used to get an INTEGER, etc.
-   }
-}
-\sstroutine{
-   AST\_MAPGET1$<$X$>$\sstlabel{AST_MAPGET1X}
-}{
-   Get a vector value from a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions for retrieving a vector value from a \htmlref{KeyMap}{KeyMap}.
-      You should replace $<$X$>$ in the generic function name
-      AST\_MAPGET1$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-      The stored value is converted to the data type indiced by $<$X$>$
-      before being returned (an error is reported if it is not possible to
-      convert the stored value to the requested data type).
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPGET1$<$X$>$( THIS, KEY, MXVAL, NVAL, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         MXVAL = INTEGER (Given)
-      }{
-         The number of elements in the
-         VALUE array.
-      }
-      \sstsubsection{
-         NVAL = INTEGER (Returned)
-      }{
-         The
-         number of elements stored in the
-         Any unused elements of the array are left unchanged.
-      }
-      \sstsubsection{
-         VALUE( MXVAL ) = $<$X$>$type (Returned)
-      }{
-         The requested values.
-         If the requested key is not found, then the contents of the
-         buffer on entry to this function will be unchanged on exit.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPGET1$<$X$>$ = LOGICAL
-      }{
-         A flag which is set to
-         .TRUE.
-         if the requested key name was found, and is set to
-         .FALSE.
-         otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No error is reported if the requested key cannot be found in the
-         given KeyMap, but a
-         .FALSE.
-         value will be returned as the function value. The supplied array
-         will be returned unchanged.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-
-         \sstitem
-         If the stored value is a scalar value, then the value will be
-         returned in the first element of the supplied array, and
-         NVAL
-         will be returned set to 1.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      routine, you should replace $<$X$>$ in the generic routine name AST\_MAPGET1$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         C: CHARACTER
-
-         \sstitem
-         A: INTEGER used to identify an AstObject
-
-      }
-      For example, AST\_MAPGET1D would be used to get DOUBLE PRECISION values,
-      while AST\_MAPGET1I would be used to get INTEGER values, etc.
-   }
-}
-\sstroutine{
-   AST\_MAPGETELEM$<$X$>$\sstlabel{AST_MAPGETELEMX}
-}{
-   Get a single element of a vector value from a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions for retrieving a single element of a vector
-      value from a \htmlref{KeyMap}{KeyMap}. You should replace $<$X$>$ in the generic function name
-      AST\_MAPGETELEM$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-      The stored value is converted to the data type indiced by $<$X$>$
-      before being returned (an error is reported if it is not possible to
-      convert the stored value to the requested data type).
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPGETELEM$<$X$>$( THIS, KEY, ELEM, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         ELEM = INTEGER (Given)
-      }{
-         The index of the required vector element, starting at
-         one.
-         An error will be reported if the value is outside the range of
-         the vector.
-      }
-      \sstsubsection{
-         VALUE = $<$X$>$type (Returned)
-      }{
-         The requested value.
-         If the requested key is not found, then the contents of the
-         buffer on entry to this function will be unchanged on exit.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPGETELEM$<$X$>$ = LOGICAL
-      }{
-         A flag which is set to
-         .TRUE.
-         if the requested key name was found, and is set to
-         .FALSE.
-         otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No error is reported if the requested key cannot be found in the
-         given KeyMap, but a
-         .FALSE.
-         value will be returned as the function value.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      routine, you should replace $<$X$>$ in the generic routine name
-      AST\_MAPGETELEM$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         C: CHARACTER
-
-         \sstitem
-         A: INTEGER used to identify an AstObject
-
-      }
-      For example, AST\_MAPGETELEMD would be used to get a DOUBLE PRECISION
-      value, while AST\_MAPGETELEMI would be used to get an INTEGER value, etc.
-   }
-}
-\sstroutine{
-   AST\_MAPHASKEY\sstlabel{AST_MAPHASKEY}
-}{
-   Check if an entry with a given key exists in a KeyMap
-}{
-   \sstdescription{
-      This function returns a flag indicating if the \htmlref{KeyMap}{KeyMap} contains an
-      entry with the given key.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPHASKEY( THIS, KEY, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the KeyMap entry. Trailing spaces are
-         ignored.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPHASKEY = LOGICAL
-      }{
-         .TRUE. if the key was found, and .FALSE. otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of
-         .FALSE.
-         will be returned if an error has already occurred, or if this
-         function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPKEY\sstlabel{AST_MAPKEY}
-}{
-   Get the key at a given index within the KeyMap
-}{
-   \sstdescription{
-      This function returns a string holding the key for the entry with
-      the given index within the \htmlref{KeyMap}{KeyMap}.
-
-      This function is intended primarily as a means of iterating round all
-      the elements in a KeyMap. For this purpose, the number of entries in
-      the KeyMap should first be found using
-      \htmlref{AST\_MAPSIZE}{AST_MAPSIZE}
-      and this function should then be called in a loop, with the index
-      value going from
-      one to the size of the KeyMap.
-      The index associated with a given entry is not, in general, related to
-      the order in which the entries are added to the KeyMap, and may change
-      if other entries are added to or removed from the KeyMap.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPKEY( THIS, INDEX, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         INDEX = INTEGER (Given)
-      }{
-         The index into the KeyMap. The first entry has index
-         one, and the last has index SIZE, the value returned by the
-         AST\_MAPSIZE function.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPKEY = CHARACTER $*$ ( AST\_\_SZCHR )
-      }{
-         The key value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A blank string will be returned if this function is invoked
-         with STATUS set to an error value, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPLENC\sstlabel{AST_MAPLENC}
-}{
-   Get the number of characters in a character entry in a KeyMap
-}{
-   \sstdescription{
-      This function returns the minimum length which a character variable
-      which must have in order to be able to store a specified entry in
-      the supplied \htmlref{KeyMap}{KeyMap}. If the named entry is a vector entry, then the
-      returned value is the length of the longest element of the vector
-      value.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPLENC( THIS, KEY, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the KeyMap entry. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPLENC = INTEGER
-      }{
-         The length (i.e. number of characters) of the longest formatted
-         value associated with the named entry.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero will be returned without error if the
-         named entry cannot be formatted as a character string.
-
-         \sstitem
-         A function value of zero will be returned if an error has already
-         occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPLENGTH\sstlabel{AST_MAPLENGTH}
-}{
-   Get the vector length of an entry in a KeyMap
-}{
-   \sstdescription{
-      This function returns the vector length of a named entry in a \htmlref{KeyMap}{KeyMap},
-      (that is, how many values are associated with the entry).
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPLENGTH( THIS, KEY, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the KeyMap entry. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPLENGTH = INTEGER
-      }{
-         The length of the entry. One for a scalar, greater than one for
-         a vector. A value of zero is returned if the KeyMap does not
-         contain the named entry.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero will be returned if an error has already
-         occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPPUT0$<$X$>$\sstlabel{AST_MAPPUT0X}
-}{
-   Add a scalar value to a KeyMap
-}{
-   \sstdescription{
-      This is a set of routine
-      for adding scalar values to a \htmlref{KeyMap}{KeyMap}. You should use a
-      routine
-      which matches the data type of the data you wish to add to the KeyMap
-      by replacing $<$X$>$ in the generic
-      routine name AST\_MAPPUT0$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-   }
-   \sstinvocation{
-      CALL AST\_MAPPUT0$<$X$>$( THIS, KEY, VALUE, COMMENT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap in which to store the supplied value.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string to be stored with the value, which can later
-         be used to identify the value. Trailing spaces are ignored.
-      }
-      \sstsubsection{
-         VALUE = $<$X$>$type (Given)
-      }{
-         The value to be stored. The data type of this value should match the
-         1-character type code appended to the
-         routine name (e.g. if you are using AST\_MAPPUT0A, the type of this
-         value should be {\tt{"}}integer pointer for an AstObject{\tt{"}}).
-      }
-      \sstsubsection{
-         COMMENT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A comment string to be stored with the value.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-
-         \sstitem
-         If the supplied key is already in use in the KeyMap, the new value
-         will replace the old value.
-
-         \sstitem
-         If the stored value is an AST \htmlref{Object}{Object} pointer, the Object's reference
-         count is incremented by this call. Any subsequent changes made to
-         the Object using the returned pointer will be reflected in any
-         any other active pointers for the Object, including any obtained
-         later using
-         AST\_MAPGET0A.
-         The reference count for the Object will be decremented when the
-         KeyMap is destroyed, or the entry is removed or over-written with a
-         different pointer.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      routine, you should replace $<$X$>$ in the generic routine name AST\_MAPPUT0$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         C: CHARACTER
-
-         \sstitem
-         A: INTEGER used to identify an AstObject
-
-      }
-      For example, AST\_MAPPUT0D would be used to store a DOUBLE PRECISION value,
-      while AST\_MAPPUT0I would be used to store an INTEGER, etc.
-   }
-}
-\sstroutine{
-   AST\_MAPPUT1$<$X$>$\sstlabel{AST_MAPPUT1X}
-}{
-   Add a vector value to a KeyMap
-}{
-   \sstdescription{
-      This is a set of routine
-      for adding vector values to a \htmlref{KeyMap}{KeyMap}. You should use a
-      routine
-      which matches the data type of the data you wish to add to the KeyMap
-      by replacing $<$X$>$ in the generic
-      routine name AST\_MAPPUT1$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-   }
-   \sstinvocation{
-      CALL AST\_MAPPUT1$<$X$>$( THIS, KEY, SIZE, VALUE, COMMENT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap in which to store the supplied values.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string to be stored with the values, which can later
-         be used to identify the values. Trailing spaces are ignored.
-      }
-      \sstsubsection{
-         SIZE = INTEGER (Given)
-      }{
-         The number of elements in the supplied array of values.
-      }
-      \sstsubsection{
-         VALUE( $*$ ) = $<$X$>$type (Given)
-      }{
-         The array of values to be stored. The data type of this value should
-         match the 1-character type code appended to the
-         routine name (e.g. if you are using AST\_MAPPUT1A, the type of this
-         value should be {\tt{"}}integer pointer for an AstObject){\tt{"}}.
-      }
-      \sstsubsection{
-         COMMENT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A comment string to be stored with the values.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the supplied key is already in use in the KeyMap, the new values
-         will replace the old values.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      routine, you should replace $<$X$>$ in the generic routine name AST\_MAPPUT1$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         C: CHARACTER
-
-         \sstitem
-         A: INTEGER used to identify an AstObject
-
-      }
-      For example, AST\_MAPPUT1D would be used to store DOUBLE PRECISION values,
-      while AST\_MAPPUT1I would be used to store INTEGER, etc.
-   }
-}
-\sstroutine{
-   AST\_MAPREGION\sstlabel{AST_MAPREGION}
-}{
-   Transform a Region into a new Frame using a given Mapping
-}{
-   \sstdescription{
-      This function returns a pointer to a new \htmlref{Region}{Region} which corresponds to
-      supplied Region described by some other specified coordinate system. A
-      \htmlref{Mapping}{Mapping} is supplied which transforms positions between the old and new
-      coordinate systems. The new Region may not be of the same class as
-      the original region.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPREGION( THIS, MAP, FRAME, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         MAP = INTEGER (Given)
-      }{
-         Pointer to a Mapping which transforms positions from the
-         coordinate system represented by the supplied Region to the
-         coordinate system specified by
-         FRAME.
-         The supplied Mapping should define both forward and inverse
-         transformations, and these transformations should form a genuine
-         inverse pair. That is, transforming a position using the forward
-         transformation and then using the inverse transformation should
-         produce the original input position. Some Mapping classes (such
-         as \htmlref{PermMap}{PermMap}, \htmlref{MathMap}{MathMap}, \htmlref{SphMap}{SphMap}) can result in Mappings for which this
-         is not true.
-      }
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         Pointer to a \htmlref{Frame}{Frame} describing the coordinate system in which
-         the new Region is required.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPREGION = INTEGER
-      }{
-         A pointer to a new Region. This Region will represent the area
-         within the coordinate system specified by
-         FRAME
-         which corresponds to the supplied Region.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The uncertainty associated with the supplied Region is modified
-         using the supplied Mapping.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPREMOVE\sstlabel{AST_MAPREMOVE}
-}{
-   Removed a named entry from a KeyMap
-}{
-   \sstdescription{
-      This routine
-      removes a named entry from a \htmlref{KeyMap}{KeyMap}. It returns without action if the
-      KeyMap does not contain the specified key.
-   }
-   \sstinvocation{
-      CALL AST\_MAPREMOVE( THIS, KEY, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPSIZE\sstlabel{AST_MAPSIZE}
-}{
-   Get the number of entries in a KeyMap
-}{
-   \sstdescription{
-      This function returns the number of entries in a \htmlref{KeyMap}{KeyMap}.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPSIZE( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPSIZE = INTEGER
-      }{
-         The number of entries in the KeyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero will be returned if an error has already
-         occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPSPLIT\sstlabel{AST_MAPSPLIT}
-}{
-   Split a Mapping up into parallel component Mappings
-}{
-   \sstdescription{
-      This routine
-      creates a new \htmlref{Mapping}{Mapping} which connects specified inputs within a
-      supplied Mapping to the corresponding outputs of the supplied Mapping.
-      This is only possible if the specified inputs correspond to some
-      subset of the Mapping outputs. That is, there must exist a subset of
-      the Mapping outputs for which each output depends only on the selected
-      Mapping inputs, and not on any of the inputs which have not been
-      selected. Also, any output which is not in this subset must not depend
-      on any of the selected inputs. If these conditions are not met by the
-      supplied Mapping, then
-      an AST\_\_NULL
-      Mapping pointer is returned.
-   }
-   \sstinvocation{
-      CALL AST\_MAPSPLIT( THIS, NIN, IN, OUT, MAP, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping to be split.
-      }
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of inputs to pick from THIS.
-      }
-      \sstsubsection{
-         IN( NIN ) = INTEGER (Given)
-      }{
-         An
-         array holding the indices within the supplied Mapping of the inputs
-         which are to be picked from the Mapping.
-         If {\tt{"}}\htmlref{Nin}{Nin}{\tt{"}} is the number of inputs of the supplied Mapping, then each
-         element should have a value in the range 1 to Nin.
-      }
-      \sstsubsection{
-         OUT( $*$ ) = INTEGER (Returned)
-      }{
-         An
-         array in which to return the indices of the outputs of the supplied
-         Mapping which are fed by the picked inputs. A value of one is
-         used to refer to the first Mapping output. The supplied array should
-         have a length at least equal to the number of outputs in the
-         supplied Mapping. The number of values stored in the array on
-         exit will equal the number of outputs in the returned Mapping.
-         The i'th element in the returned array holds the index within
-         the supplied Mapping which corresponds to the i'th output of
-         the returned Mapping.
-      }
-      \sstsubsection{
-         MAP = INTEGER (Returned)
-      }{
-         The
-         returned Mapping. This Mapping will have
-         NIN inputs (the number of outputs may be different to NIN). AST\_\_NULL
-         is returned if the supplied Mapping has no subset of outputs which
-         depend only on the selected inputs.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If this
-         routine
-         is invoked with the global error status set, or if it should fail for
-         any reason, then
-         AST\_\_NULL
-         will be returned for
-         MAP.
-      }
-   }
-}
-\sstroutine{
-   AST\_MAPTYPE\sstlabel{AST_MAPTYPE}
-}{
-   Get the data type of an entry in a KeyMap
-}{
-   \sstdescription{
-      This function returns a value indicating the data type of a
-      named entry in a \htmlref{KeyMap}{KeyMap}. This is the data type which was used when the
-      entry was added to the KeyMap.
-   }
-   \sstinvocation{
-      RESULT = AST\_MAPTYPE( THIS, KEY, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         KEY = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The character string identifying the KeyMap entry. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MAPTYPE = INTEGER
-      }{
-         One of AST\_\_INTTYPE (for integer), AST\_\_DOUBLETYPE (for double
-         precision floating point), AST\_\_FLOATTYPE (for single
-         precision floating point), AST\_\_STRINGTYPE (for character string)
-         or AST\_\_OBJECTTYPE (for AST \htmlref{Object}{Object} pointer). AST\_\_BADTYPE is
-         returned if the supplied key is not found in the KeyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of AST\_\_BADTYPE will be returned if an error has
-         already occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_MARK\sstlabel{AST_MARK}
-}{
-   Draw a set of markers for a Plot
-}{
-   \sstdescription{
-      This routine draws a set of markers (symbols) at positions
-      specified in the physical coordinate system of a \htmlref{Plot}{Plot}. The
-      positions are transformed into graphical coordinates to
-      determine where the markers should appear within the plotting
-      area.
-   }
-   \sstinvocation{
-      CALL AST\_MARK( THIS, NMARK, NCOORD, INDIM, IN, TYPE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         NMARK = INTEGER (Given)
-      }{
-         The number of markers to draw. This may be zero, in which
-         case nothing will be drawn.
-      }
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinates being supplied for each mark
-         (i.e. the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as
-         given by its \htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         INDIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the IN
-         array (which contains the marker coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than NMARK.
-      }
-      \sstsubsection{
-         IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         A 2-dimensional array giving the physical coordinates of the
-         points where markers are to be drawn. These should be
-         stored such that the value of coordinate number COORD for
-         input mark number MARK is found in element IN(MARK,COORD).
-      }
-      \sstsubsection{
-         TYPE = INTEGER (Given)
-      }{
-         A value specifying the type (e.g. shape) of marker to be
-         drawn. The set of values which may be used (and the shapes
-         that will result) is determined by the underlying graphics
-         system.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Markers are not drawn at positions which have any coordinate
-         equal to the value AST\_\_BAD (or where the transformation into
-         graphical coordinates yields coordinates containing the value
-         AST\_\_BAD).
-
-         \sstitem
-         If any marker position is clipped (see \htmlref{AST\_CLIP}{AST_CLIP}), then the
-         entire marker is not drawn.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_MASK$<$X$>$\sstlabel{AST_MASKX}
-}{
-   Mask a region of a data grid
-}{
-   \sstdescription{
-      This is a set of functions for masking out regions within gridded data
-      (e.g. an image). The functions modifies a given data grid by
-      assigning a specified value to all samples which are inside (or outside
-      if INSIDE is .FALSE.)
-      the specified \htmlref{Region}{Region}.
-
-      You should use a masking function which matches the numerical
-      type of the data you are processing by replacing $<$X$>$ in
-      the generic function name AST\_MASK$<$X$>$ by an appropriate 1- or
-      2-character type code. For example, if you are masking data
-      with type REAL, you should use the function AST\_MASKR (see
-      the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-   }
-   \sstinvocation{
-      RESULT = AST\_MASK$<$X$>$( THIS, MAP, INSIDE, NDIM, LBND, UBND, IN, VAL,
-                            STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to a Region.
-      }
-      \sstsubsection{
-         MAP = INTEGER (Given)
-      }{
-         Pointer to a \htmlref{Mapping}{Mapping}. The forward transformation should map
-         positions in the coordinate system of the supplied Region
-         into pixel coordinates as defined by the
-         LBND and UBND arguments. A value of AST\_\_NULL
-         can be supplied if the coordinate system of the supplied Region
-         corresponds to pixel coordinates. This is equivalent to
-         supplying a \htmlref{UnitMap}{UnitMap}.
-
-         The number of inputs for this Mapping (as given by its \htmlref{Nin}{Nin} attribute)
-         should match the number of axes in the supplied Region (as given
-         by the \htmlref{Naxes}{Naxes} attribute of the Region).
-         The number of outputs for the Mapping (as given by its \htmlref{Nout}{Nout} attribute)
-         should match the number of
-         grid dimensions given by the value of NDIM
-         below.
-      }
-      \sstsubsection{
-         INSIDE = INTEGER (Given)
-      }{
-         A boolean value which indicates which pixel are to be masked. If
-         .TRUE.
-         is supplied, then all grid pixels with centres inside the supplied
-         Region are assigned the value given by
-         VAL,
-         and all other pixels are left unchanged. If
-         .FALSE.
-         is supplied, then all grid pixels with centres not inside the supplied
-         Region are assigned the value given by
-         VAL,
-         and all other pixels are left unchanged. Note, the \htmlref{Negated}{Negated}
-         attribute of the Region is used to determine which pixel are
-         inside the Region and which are outside. So the inside of a Region
-         which has not been negated is the same as the outside of the
-         corresponding negated Region.
-
-         For types of Region such as \htmlref{PointList}{PointList} which have zero volume,
-         pixel centres will rarely fall exactly within the Region. For
-         this reason, the inclusion criterion is changed for zero-volume
-         Regions so that pixels are included (or excluded) if any part of
-         the Region passes through the pixel. For a PointList, this means
-         that pixels are included (or excluded) if they contain at least
-         one of the points listed in the PointList.
-      }
-      \sstsubsection{
-         NDIM = INTEGER (Given)
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         LBND( NDIM ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND( NDIM ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND and UBND together define the shape
-         and size of the input grid, its extent along a particular
-         (J'th) dimension being UBND(J)-LBND(J)$+$1. They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         IN( $*$ ) = $<$Xtype$>$ (Given and Returned)
-      }{
-         An array, with one element for each pixel in the
-         input grid, containing the data to be masked.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using AST\_MASKR, the type of each array element
-         should be REAL).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-
-         On exit, the samples specified by
-         INSIDE are set to the value of VAL.
-         All other samples are left unchanged.
-      }
-      \sstsubsection{
-         VAL = $<$Xtype$>$ (Given)
-      }{
-         This argument should have the same type as the elements of
-         the IN array. It specifies the value used to flag the
-         masked data (see
-         INSIDE).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MASK$<$X$>$ = INTEGER
-      }{
-         The number of pixels to which a value of
-         BADVAL
-         has been assigned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate masking function, you should
-      replace $<$X$>$ in the generic function name AST\_MASK$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         UI: INTEGER (treated as unsigned)
-
-         \sstitem
-         S: INTEGER$*$2 (short integer)
-
-         \sstitem
-         US: INTEGER$*$2 (short integer, treated as unsigned)
-
-         \sstitem
-         B: BYTE (treated as signed)
-
-         \sstitem
-         UB: BYTE (treated as unsigned)
-
-      }
-      For example, AST\_MASKD would be used to process DOUBLE
-      PRECISION data, while AST\_MASKS would be used to process
-      short integer data (stored in an INTEGER$*$2 array), etc.
-
-      For compatibility with other Starlink facilities, the codes W
-      and UW are provided as synonyms for S and US respectively (but
-      only in the Fortran interface to AST).
-   }
-}
-\sstroutine{
-   AST\_MATCHAXES\sstlabel{AST_MATCHAXES}
-}{
-   Find any corresponding axes in two Frames
-}{
-   \sstdescription{
-      This function looks for corresponding axes within two supplied
-      Frames. An array of integers is returned that contains an element
-      for each axis in the second supplied \htmlref{Frame}{Frame}. An element in this array
-      will be set to zero if the associated axis within the second Frame
-      has no corresponding axis within the first Frame. Otherwise, it
-      will be set to the index (a non-zero positive integer) of the
-      corresponding axis within the first supplied Frame.
-   }
-   \sstinvocation{
-      CALL AST\_MATCHAXES( FRM1, FRM2, AXES, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRM1 = INTEGER (Given)
-      }{
-         Pointer to the first Frame.
-      }
-      \sstsubsection{
-         FRM2 = INTEGER (Given)
-      }{
-         Pointer to the second Frame.
-      }
-      \sstsubsection{
-         AXES = INTEGER( $*$ ) (Returned)
-      }{
-         An
-         integer array in which to return the indices of the axes (within
-         the first Frame) that correspond to each axis within the second
-         Frame. \htmlref{Axis}{Axis} indices start at 1. A value of zero will be stored
-         in the returned array for each axis in the second Frame that has
-         no corresponding axis in the first Frame.
-
-         The number of elements in this array must be greater than or
-         equal to the number of axes in the second Frame.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Corresponding axes are identified by the fact that a \htmlref{Mapping}{Mapping} can
-         be found between them using
-         \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}.
-         Thus, {\tt{"}}corresponding axes{\tt{"}} are not necessarily identical. For
-         instance, \htmlref{SkyFrame}{SkyFrame} axes in two Frames will match even if they
-         describe different celestial coordinate systems
-      }
-   }
-}
-\sstroutine{
-   AST\_MATHMAP\sstlabel{AST_MATHMAP}
-}{
-   Create a MathMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{MathMap}{MathMap} and optionally initialises its
-      attributes.
-
-      A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
-      and/or inverse transformation functions using arithmetic operations
-      and mathematical functions similar to those available in Fortran. The
-      MathMap interprets these functions at run-time, whenever its forward
-      or inverse transformation is required. Because the functions are not
-      compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
-      describe coordinate transformations in a transportable manner. A
-      MathMap therefore provides a flexible way of defining new types of
-      Mapping whose descriptions may be stored as part of a dataset and
-      interpreted by other programs.
-   }
-   \sstinvocation{
-      RESULT = AST\_MATHMAP( NIN, NOUT, NFWD, FWD, NINV, INV, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NIN = INTEGER
-      }{
-         Number of input variables for the MathMap. This determines the
-         value of its \htmlref{Nin}{Nin} attribute.
-      }
-      \sstsubsection{
-         NOUT = INTEGER
-      }{
-         Number of output variables for the MathMap. This determines the
-         value of its \htmlref{Nout}{Nout} attribute.
-      }
-      \sstsubsection{
-         NFWD = INTEGER
-      }{
-         The number of forward transformation functions being supplied.
-         This must be at least equal to NOUT, but may be increased to
-         accommodate any additional expressions which define intermediate
-         variables for the forward transformation (see the {\tt{"}}Calculating
-         Intermediate Values{\tt{"}} section below).
-      }
-      \sstsubsection{
-         FWD = CHARACTER $*$ ( $*$ )( NFWD )
-      }{
-         An array which contains the expressions defining the forward
-         transformation.
-         The syntax of these expressions is described below.
-      }
-      \sstsubsection{
-         NINV = INTEGER
-      }{
-         The number of inverse transformation functions being supplied.
-         This must be at least equal to NIN, but may be increased to
-         accommodate any additional expressions which define intermediate
-         variables for the inverse transformation (see the {\tt{"}}Calculating
-         Intermediate Values{\tt{"}} section below).
-      }
-      \sstsubsection{
-         INV = CHARACTER $*$ ( $*$ )( NINV )
-      }{
-         An array which contains the expressions defining the inverse
-         transformation.
-         The syntax of these expressions is described below.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new MathMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MATHMAP = INTEGER
-      }{
-         A pointer to the new MathMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The sequence of numbers produced by the random number functions
-         available within a MathMap is normally unpredictable and different for
-         each MathMap. However, this behaviour may be controlled by means of
-         the MathMap's \htmlref{Seed}{Seed} attribute.
-
-         \sstitem
-         Normally, compound Mappings (CmpMaps) which involve MathMaps will
-         not be subject to simplification (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}) because AST
-         cannot know how different MathMaps will interact. However, in the
-         special case where a MathMap occurs in series with its own inverse,
-         then simplification may be possible. Whether simplification does, in
-         fact, occur under these circumstances is controlled by the MathMap's
-         \htmlref{SimpFI}{SimpFI} and \htmlref{SimpIF}{SimpIF} attributes.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Defining Transformation Functions
-   }{
-      A MathMap's transformation functions are supplied as a set of
-      expressions in an array of character strings. Normally you would
-      supply the same number of expressions for the forward transformation,
-      via the FWD argument, as there are output variables (given by the
-      MathMap's Nout attribute). For instance, if Nout is 2 you might use:
-      \sstitemlist{
-
-         \sstitem
-         'R = SQRT( X $*$ X $+$ Y $*$ Y )'
-
-         \sstitem
-         'THETA = ATAN2( Y, X )'
-
-      }
-      which defines a transformation from Cartesian to polar
-      coordinates. Here, the variables that appear on the left of each
-      expression (R and THETA) provide names for the output variables and
-      those that appear on the right (X and Y) are references to input
-      variables.
-
-      To complement this, you must also supply expressions for the inverse
-      transformation via the INV argument.  In this case, the number of
-      expressions given would normally match the number of MathMap input
-      coordinates (given by the Nin attribute).  If Nin is 2, you might use:
-      \sstitemlist{
-
-         \sstitem
-         'X = R $*$ COS( THETA )'
-
-         \sstitem
-         'Y = R $*$ SIN( THETA )'
-
-      }
-      which expresses the transformation from polar to Cartesian
-      coordinates. Note that here the input variables (X and Y) are named on
-      the left of each expression, and the output variables (R and THETA)
-      are referenced on the right.
-
-      Normally, you cannot refer to a variable on the right of an expression
-      unless it is named on the left of an expression in the complementary
-      set of functions. Therefore both sets of functions (forward and
-      inverse) must be formulated using the same consistent set of variable
-      names. This means that if you wish to leave one of the transformations
-      undefined, you must supply dummy expressions which simply name each of
-      the output (or input) variables.  For example, you might use:
-      \sstitemlist{
-
-         \sstitem
-         'X'
-
-         \sstitem
-         'Y'
-
-      }
-      for the inverse transformation above, which serves to name the input
-      variables but without defining an inverse transformation.
-   }
-   \sstdiytopic{
-      Calculating Intermediate Values
-   }{
-      It is sometimes useful to calculate intermediate values and then to
-      use these in the final expressions for the output (or input)
-      variables. This may be done by supplying additional expressions for
-      the forward (or inverse) transformation functions. For instance, the
-      following array of five expressions describes 2-dimensional pin-cushion
-      distortion:
-      \sstitemlist{
-
-         \sstitem
-         'R = SQRT( XIN $*$ XIN $+$ YIN $*$ YIN )'
-
-         \sstitem
-         'ROUT = R $*$ ( 1 $+$ 0.1 $*$ R $*$ R )'
-
-         \sstitem
-         'THETA = ATAN2( YIN, XIN )',
-
-         \sstitem
-         'XOUT = ROUT $*$ COS( THETA )'
-
-         \sstitem
-         'YOUT = ROUT $*$ SIN( THETA )'
-
-      }
-      Here, we first calculate three intermediate results (R, ROUT
-      and THETA) and then use these to calculate the final results (XOUT
-      and YOUT). The MathMap knows that only the final two results
-      constitute values for the output variables because its Nout attribute
-      is set to 2. You may define as many intermediate variables in this
-      way as you choose. Having defined a variable, you may then refer to it
-      on the right of any subsequent expressions.
-
-      Note that when defining the inverse transformation you may only refer
-      to the output variables XOUT and YOUT. The intermediate variables R,
-      ROUT and THETA (above) are private to the forward transformation and
-      may not be referenced by the inverse transformation. The inverse
-      transformation may, however, define its own private intermediate
-      variables.
-   }
-   \sstdiytopic{
-      Expression Syntax
-   }{
-      The expressions given for the forward and inverse transformations
-      closely follow the syntax of Fortran (with some extensions for
-      compatibility with the C language). They may contain references to
-      variables and literal constants, together with arithmetic, logical,
-      relational and bitwise operators, and function invocations. A set of
-      symbolic constants is also available. Each of these is described in
-      detail below. Parentheses may be used to over-ride the normal order of
-      evaluation. There is no built-in limit to the length of expressions
-      and they are insensitive to case or the presence of additional white
-      space.
-   }
-   \sstdiytopic{
-      Variables
-   }{
-      Variable names must begin with an alphabetic character and may contain
-      only alphabetic characters, digits, and the underscore character
-      {\tt{"}}\_{\tt{"}}. There is no built-in limit to the length of variable names.
-   }
-   \sstdiytopic{
-      Literal Constants
-   }{
-      Literal constants, such as {\tt{"}}0{\tt{"}}, {\tt{"}}1{\tt{"}}, {\tt{"}}0.007{\tt{"}} or {\tt{"}}2.505E-16{\tt{"}} may appear
-      in expressions, with the decimal point and exponent being optional (a
-      {\tt{"}}D{\tt{"}} may also be used as an exponent character). A unary minus {\tt{"}}-{\tt{"}} may
-      be used as a prefix.
-   }
-   \sstdiytopic{
-      Arithmetic Precision
-   }{
-      All arithmetic is floating point, performed in double precision.
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Unless indicated otherwise, if any argument of a function or operator
-      has the value AST\_\_BAD (indicating missing data), then the result of
-      that function or operation is also AST\_\_BAD, so that such values are
-      propagated automatically through all operations performed by MathMap
-      transformations.  The special value AST\_\_BAD can be represented in
-      expressions by the symbolic constant {\tt{"}}$<$bad$>${\tt{"}}.
-
-      A $<$bad$>$ result (i.e. equal to AST\_\_BAD) is also produced in response
-      to any numerical error (such as division by zero or numerical
-      overflow), or if an invalid argument value is provided to a function
-      or operator.
-   }
-   \sstdiytopic{
-      Arithmetic Operators
-   }{
-      The following arithmetic operators are available:
-      \sstitemlist{
-
-         \sstitem
-         X1 $+$ X2: Sum of X1 and X2.
-
-         \sstitem
-         X1 - X2: Difference of X1 and X2.
-
-         \sstitem
-         X1 $*$ X2: Product of X1 and X2.
-
-         \sstitem
-         X1 / X2: Ratio of X1 and X2.
-
-         \sstitem
-         X1 $*$$*$ X2: X1 raised to the power of X2.
-
-         \sstitem
-         $+$ X: Unary plus, has no effect on its argument.
-
-         \sstitem
-         - X: Unary minus, negates its argument.
-      }
-   }
-   \sstdiytopic{
-      Logical Operators
-   }{
-      Logical values are represented using zero to indicate .FALSE. and
-      non-zero to indicate .TRUE.. In addition, the value AST\_\_BAD is taken to
-      mean {\tt{"}}unknown{\tt{"}}. The values returned by logical operators may therefore
-      be 0, 1 or AST\_\_BAD. Where appropriate, {\tt{"}}tri-state{\tt{"}} logic is
-      implemented. For example, A.OR.B may evaluate to 1 if A is non-zero,
-      even if B has the value AST\_\_BAD. This is because the result of the
-      operation would not be affected by the value of B, so long as A is
-      non-zero.
-
-      The following logical operators are available:
-      \sstitemlist{
-
-         \sstitem
-         X1 .AND. X2: Logical AND between X1 and X2, returning 1 if both X1
-         and X2 are non-zero, and 0 otherwise. This operator implements
-         tri-state logic. (The synonym {\tt{"}}\&\&{\tt{"}} is also provided for compatibility
-         with C.)
-
-         \sstitem
-         X1 .OR. X2: Logical OR between X1 and X2, returning 1 if either X1
-         or X2 are non-zero, and 0 otherwise. This operator implements
-         tri-state logic. (The synonym {\tt{"}}$|$$|${\tt{"}} is also provided for compatibility
-         with C.)
-
-         \sstitem
-         X1 .NEQV. X2: Logical exclusive OR (XOR) between X1 and X2,
-         returning 1 if exactly one of X1 and X2 is non-zero, and 0
-         otherwise. Tri-state logic is not used with this operator. (The
-         synonym {\tt{"}}.XOR.{\tt{"}} is also provided, although this is not standard
-         Fortran. In addition, the C-like synonym {\tt{"}}$\wedge$$\wedge${\tt{"}} may be used, although
-         this is also not standard.)
-
-         \sstitem
-         X1 .EQV. X2: Tests whether the logical states of X1 and X2
-         (i.e. .TRUE./.FALSE.) are equal. It is the negative of the exclusive OR
-         (XOR) function.  Tri-state logic is not used with this operator.
-
-         \sstitem
-         .NOT. X: Logical unary NOT operation, returning 1 if X is zero, and
-         0 otherwise. (The synonym {\tt{"}}!{\tt{"}} is also provided for compatibility with
-         C.)
-      }
-   }
-   \sstdiytopic{
-      Relational Operators
-   }{
-      Relational operators return the logical result (0 or 1) of comparing
-      the values of two floating point values for equality or inequality. The
-      value AST\_\_BAD may also be returned if either argument is $<$bad$>$.
-
-      The following relational operators are available:
-      \sstitemlist{
-
-         \sstitem
-         X1 .EQ. X2: Tests whether X1 equals X2. (The synonym {\tt{"}}=={\tt{"}} is also
-         provided for compatibility with C.)
-
-         \sstitem
-         X1 .NE. X2: Tests whether X1 is unequal to X2. (The synonym {\tt{"}}!={\tt{"}} is
-         also provided for compatibility with C.)
-
-         \sstitem
-         X1 .GT. X2: Tests whether X1 is greater than X2. (The synonym {\tt{"}}$>${\tt{"}} is
-         also provided for compatibility with C.)
-
-         \sstitem
-         X1 .GE. X2: Tests whether X1 is greater than or equal to X2. (The
-         synonym {\tt{"}}$>$={\tt{"}} is also provided for compatibility with C.)
-
-         \sstitem
-         X1 .LT. X2: Tests whether X1 is less than X2. (The synonym {\tt{"}}$<${\tt{"}} is also
-         provided for compatibility with C.)
-
-         \sstitem
-         X1 .LE. X2: Tests whether X1 is less than or equal to X2. (The synonym
-         {\tt{"}}$<$={\tt{"}} is also provided for compatibility with C.)
-
-      }
-      Note that relational operators cannot usefully be used to compare
-      values with the $<$bad$>$ value (representing missing data), because the
-      result is always $<$bad$>$. The ISBAD() function should be used instead.
-
-      Note, also, that because logical operators can operate on floating
-      point values, care must be taken to use parentheses in some cases
-      where they would not normally be required in Fortran. For example,
-      the expresssion:
-      \sstitemlist{
-
-         \sstitem
-         .NOT. A .EQ. B
-
-      }
-      must be written:
-      \sstitemlist{
-
-         \sstitem
-         .NOT. ( A .EQ. B )
-
-      }
-      to prevent the .NOT. operator from associating with the variable A.
-   }
-   \sstdiytopic{
-      Bitwise Operators
-   }{
-      Bitwise operators are often useful when operating on raw data
-      (e.g. from instruments), so they are provided for use in MathMap
-      expressions. In this case, however, the values on which they operate
-      are floating point values rather than the more usual pure integers. In
-      order to produce results which match the pure integer case, the
-      operands are regarded as fixed point binary numbers (i.e. with the
-      binary equivalent of a decimal point) with negative numbers
-      represented using twos-complement notation. For integer values, the
-      resulting bit pattern corresponds to that of the equivalent signed
-      integer (digits to the right of the point being zero). Operations on
-      the bits representing the fractional part are also possible, however.
-
-      The following bitwise operators are available:
-      \sstitemlist{
-
-         \sstitem
-         X1 $>$$>$ X2: Rightward bit shift. The integer value of X2 is taken
-         (rounding towards zero) and the bits representing X1 are then
-         shifted this number of places to the right (or to the left if the
-         number of places is negative). This is equivalent to dividing X1 by
-         the corresponding power of 2.
-
-         \sstitem
-         X1 $<$$<$ X2: Leftward bit shift. The integer value of X2 is taken
-         (rounding towards zero), and the bits representing X1 are then
-         shifted this number of places to the left (or to the right if the
-         number of places is negative). This is equivalent to multiplying X1
-         by the corresponding power of 2.
-
-         \sstitem
-         X1 \& X2: Bitwise AND between the bits of X1 and those of X2
-         (equivalent to a logical AND applied at each bit position in turn).
-
-         \sstitem
-         X1 $|$ X2: Bitwise OR between the bits of X1 and those of X2
-         (equivalent to a logical OR applied at each bit position in turn).
-
-         \sstitem
-         X1 $\wedge$ X2: Bitwise exclusive OR (XOR) between the bits of X1 and
-         those of X2 (equivalent to a logical XOR applied at each bit
-         position in turn).
-
-      }
-      Note that no bit inversion operator is provided. This is
-      because inverting the bits of a twos-complement fixed point binary
-      number is equivalent to simply negating it. This differs from the
-      pure integer case because bits to the right of the binary point are
-      also inverted. To invert only those bits to the left of the binary
-      point, use a bitwise exclusive OR with the value -1 (i.e. X$\wedge$-1).
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The following functions are available:
-      \sstitemlist{
-
-         \sstitem
-         ABS(X): Absolute value of X (sign removal), same as FABS(X).
-
-         \sstitem
-         ACOS(X): Inverse cosine of X, in radians.
-
-         \sstitem
-         ACOSD(X): Inverse cosine of X, in degrees.
-
-         \sstitem
-         ACOSH(X): Inverse hyperbolic cosine of X.
-
-         \sstitem
-         ACOTH(X): Inverse hyperbolic cotangent of X.
-
-         \sstitem
-         ACSCH(X): Inverse hyperbolic cosecant of X.
-
-         \sstitem
-         AINT(X): Integer part of X (round towards zero), same as INT(X).
-
-         \sstitem
-         ASECH(X): Inverse hyperbolic secant of X.
-
-         \sstitem
-         ASIN(X): Inverse sine of X, in radians.
-
-         \sstitem
-         ASIND(X): Inverse sine of X, in degrees.
-
-         \sstitem
-         ASINH(X): Inverse hyperbolic sine of X.
-
-         \sstitem
-         ATAN(X): Inverse tangent of X, in radians.
-
-         \sstitem
-         ATAND(X): Inverse tangent of X, in degrees.
-
-         \sstitem
-         ATANH(X): Inverse hyperbolic tangent of X.
-
-         \sstitem
-         ATAN2(X1, X2): Inverse tangent of X1/X2, in radians.
-
-         \sstitem
-         ATAN2D(X1, X2): Inverse tangent of X1/X2, in degrees.
-
-         \sstitem
-         CEIL(X): Smallest integer value not less then X (round towards
-           plus infinity).
-
-         \sstitem
-         COS(X): Cosine of X in radians.
-
-         \sstitem
-         COSD(X): Cosine of X in degrees.
-
-         \sstitem
-         COSH(X): Hyperbolic cosine of X.
-
-         \sstitem
-         COTH(X): Hyperbolic cotangent of X.
-
-         \sstitem
-         CSCH(X): Hyperbolic cosecant of X.
-
-         \sstitem
-         DIM(X1, X2): Returns X1-X2 if X1 is greater than X2, otherwise 0.
-
-         \sstitem
-         EXP(X): Exponential function of X.
-
-         \sstitem
-         FABS(X): Absolute value of X (sign removal), same as ABS(X).
-
-         \sstitem
-         FLOOR(X): Largest integer not greater than X (round towards
-           minus infinity).
-
-         \sstitem
-         FMOD(X1, X2): Remainder when X1 is divided by X2, same as
-           MOD(X1, X2).
-
-         \sstitem
-         GAUSS(X1, X2): Random sample from a Gaussian distribution with mean
-           X1 and standard deviation X2.
-
-         \sstitem
-         INT(X): Integer part of X (round towards zero), same as AINT(X).
-
-         \sstitem
-         ISBAD(X): Returns 1 if X has the $<$bad$>$ value (AST\_\_BAD), otherwise 0.
-
-         \sstitem
-         LOG(X): Natural logarithm of X.
-
-         \sstitem
-         LOG10(X): Logarithm of X to base 10.
-
-         \sstitem
-         MAX(X1, X2, ...): Maximum of two or more values.
-
-         \sstitem
-         MIN(X1, X2, ...): Minimum of two or more values.
-
-         \sstitem
-         MOD(X1, X2): Remainder when X1 is divided by X2, same as
-           FMOD(X1, X2).
-
-         \sstitem
-         NINT(X): Nearest integer to X (round to nearest).
-
-         \sstitem
-         POISSON(X): Random integer-valued sample from a Poisson
-           distribution with mean X.
-
-         \sstitem
-         POW(X1, X2): X1 raised to the power of X2.
-
-         \sstitem
-         QIF(x1, x2, x3): Returns X2 if X1 is true, and X3 otherwise.
-
-         \sstitem
-         RAND(X1, X2): Random sample from a uniform distribution in the
-           range X1 to X2 inclusive.
-
-         \sstitem
-         SECH(X): Hyperbolic secant of X.
-
-         \sstitem
-         SIGN(X1, X2): Absolute value of X1 with the sign of X2
-           (transfer of sign).
-
-         \sstitem
-         SIN(X): Sine of X in radians.
-
-         \sstitem
-         SINC(X): Sinc function of X [= SIN(X)/X].
-
-         \sstitem
-         SIND(X): Sine of X in degrees.
-
-         \sstitem
-         SINH(X): Hyperbolic sine of X.
-
-         \sstitem
-         SQR(X): Square of X (= X$*$X).
-
-         \sstitem
-         SQRT(X): Square root of X.
-
-         \sstitem
-         TAN(X): Tangent of X in radians.
-
-         \sstitem
-         TAND(X): Tangent of X in degrees.
-
-         \sstitem
-         TANH(X): Hyperbolic tangent of X.
-      }
-   }
-   \sstdiytopic{
-      Symbolic Constants
-   }{
-      The following symbolic constants are available (the enclosing {\tt{"}}$<$$>${\tt{"}}
-      brackets must be included):
-      \sstitemlist{
-
-         \sstitem
-         $<$bad$>$: The {\tt{"}}bad{\tt{"}} value (AST\_\_BAD) used to flag missing data. Note
-         that you cannot usefully compare values with this constant because the
-         result is always $<$bad$>$. The ISBAD() function should be used instead.
-
-         \sstitem
-         $<$dig$>$: Number of decimal digits of precision available in a
-         floating point (double precision) value.
-
-         \sstitem
-         $<$e$>$: \htmlref{Base}{Base} of natural logarithms.
-
-         \sstitem
-         $<$epsilon$>$: Smallest positive number such that 1.0$+$$<$epsilon$>$ is
-         distinguishable from unity.
-
-         \sstitem
-         $<$mant\_dig$>$: The number of base $<$radix$>$ digits stored in the
-         mantissa of a floating point (double precision) value.
-
-         \sstitem
-         $<$max$>$: Maximum representable floating point (double precision) value.
-
-         \sstitem
-         $<$max\_10\_exp$>$: Maximum integer such that 10 raised to that power
-         can be represented as a floating point (double precision) value.
-
-         \sstitem
-         $<$max\_exp$>$: Maximum integer such that $<$radix$>$ raised to that
-         power minus 1 can be represented as a floating point (double precision)
-         value.
-
-         \sstitem
-         $<$min$>$: Smallest positive number which can be represented as a
-         normalised floating point (double precision) value.
-
-         \sstitem
-         $<$min\_10\_exp$>$: Minimum negative integer such that 10 raised to that
-         power can be represented as a normalised floating point (double
-         precision) value.
-
-         \sstitem
-         $<$min\_exp$>$: Minimum negative integer such that $<$radix$>$ raised to
-         that power minus 1 can be represented as a normalised floating point
-         (double precision) value.
-
-         \sstitem
-         $<$pi$>$: Ratio of the circumference of a circle to its diameter.
-
-         \sstitem
-         $<$radix$>$: The radix (number base) used to represent the mantissa of
-         floating point (double precision) values.
-
-         \sstitem
-         $<$rounds$>$: The mode used for rounding floating point results after
-         addition. Possible values include: -1 (indeterminate), 0 (toward
-         zero), 1 (to nearest), 2 (toward plus infinity) and 3 (toward minus
-         infinity). Other values indicate machine-dependent behaviour.
-      }
-   }
-   \sstdiytopic{
-      Evaluation Precedence and Associativity
-   }{
-      Items appearing in expressions are evaluated in the following order
-      (highest precedence first):
-      \sstitemlist{
-
-         \sstitem
-         Constants and variables
-
-         \sstitem
-         Function arguments and parenthesised expressions
-
-         \sstitem
-         Function invocations
-
-         \sstitem
-         Unary $+$ - ! .not.
-
-         \sstitem
-         $*$$*$
-
-         \sstitem
-         $*$ /
-
-         \sstitem
-         $+$ -
-
-         \sstitem
-         $<$$<$ $>$$>$
-
-         \sstitem
-         $<$ .lt. $<$= .le. $>$ .gt. $>$= .ge.
-
-         \sstitem
-         == .eq. != .ne.
-
-         \sstitem
-         \&
-
-         \sstitem
-         $\wedge$
-
-         \sstitem
-         $|$
-
-         \sstitem
-         \&\& .and.
-
-         \sstitem
-         $\wedge$$\wedge$
-
-         \sstitem
-         $|$$|$ .or
-
-         \sstitem
-         .eqv. .neqv. .xor.
-
-      }
-      All operators associate from left-to-right, except for unary $+$,
-      unary -, !, .not. and $*$$*$ which associate from right-to-left.
-   }
-}
-\sstroutine{
-   AST\_MATRIXMAP\sstlabel{AST_MATRIXMAP}
-}{
-   Create a MatrixMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{MatrixMap}{MatrixMap} and optionally initialises
-      its attributes.
-
-      A MatrixMap is a form of \htmlref{Mapping}{Mapping} which performs a general linear
-      transformation.  Each set of input coordinates, regarded as a
-      column-vector, are pre-multiplied by a matrix (whose elements
-      are specified when the MatrixMap is created) to give a new
-      column-vector containing the output coordinates. If appropriate,
-      the inverse transformation may also be performed.
-   }
-   \sstinvocation{
-      RESULT = AST\_MATRIXMAP( NIN, NOUT, FORM, MATRIX, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of input coordinates, which determines the number
-         of columns in the matrix.
-      }
-      \sstsubsection{
-         NOUT = INTEGER (Given)
-      }{
-         The number of output coordinates, which determines the number
-         of rows in the matrix.
-      }
-      \sstsubsection{
-         FORM = INTEGER (Given)
-      }{
-         An integer which indicates the form in which the matrix
-         elements will be supplied.
-
-         A value of zero indicates that a full NOUT x NIN  matrix
-         of values will be supplied via the MATRIX argument
-         (below). In this case, the elements should be given in row
-         order (the elements of the first row, followed by the
-         elements of the second row, etc.).
-
-         A value of 1 indicates that only the diagonal elements of the
-         matrix will be supplied, and that all others should be
-         zero. In this case, the elements of MATRIX should contain
-         only the diagonal elements, stored consecutively.
-
-         A value of 2 indicates that a {\tt{"}}unit{\tt{"}} matrix is required,
-         whose diagonal elements are set to unity (with all other
-         elements zero).  In this case, the MATRIX argument is not used.
-      }
-      \sstsubsection{
-         MATRIX( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         The array of matrix elements to be used, stored according to
-         the value of FORM.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new MatrixMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_MATRIXMAP = INTEGER
-      }{
-         A pointer to the new MatrixMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In general, a MatrixMap's forward transformation will always
-         be available (as indicated by its \htmlref{TranForward}{TranForward} attribute), but
-         its inverse transformation (\htmlref{TranInverse}{TranInverse} attribute) will only be
-         available if the associated matrix is square and non-singular.
-
-         \sstitem
-         As an exception to this, the inverse transformation is always
-         available if a unit or diagonal matrix is specified. In this
-         case, if the matrix is not square, one or more of the input
-         coordinate values may not be recoverable from a set of output
-         coordinates. Any coordinates affected in this way will simply be
-         set to the value zero.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_NEGATE\sstlabel{AST_NEGATE}
-}{
-   Negate the area represented by a Region
-}{
-   \sstdescription{
-      This function negates the area represented by a \htmlref{Region}{Region}. That is,
-      points which were previously inside the region will then be
-      outside, and points which were outside will be inside. This is
-      acomplished by toggling the state of the \htmlref{Negated}{Negated} attribute for
-      the supplied region.
-   }
-   \sstinvocation{
-      CALL AST\_NEGATE( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_NORM\sstlabel{AST_NORM}
-}{
-   Normalise a set of Frame coordinates
-}{
-   \sstdescription{
-      This routine normalises a set of \htmlref{Frame}{Frame} coordinate values which
-      might be unsuitable for display (e.g. may lie outside the
-      expected range) into a set of acceptable values suitable for
-      display.
-   }
-   \sstinvocation{
-      CALL AST\_NORM( THIS, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         VALUE( $*$ ) = DOUBLE PRECISION (Given and Returned)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). Initially, this should contain a set of
-         coordinate values representing a point in the space which the
-         Frame describes. If these values lie outside the expected
-         range for the Frame, they will be replaced with more
-         acceptable (normalised) values. Otherwise, they will be
-         returned unchanged.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For some classes of Frame, whose coordinate values are not
-         constrained, this function will never modify the values
-         supplied. However, for Frames whose axes represent cyclic
-         quantities (such as angles or positions on the sky), coordinates
-         will typically be wrapped into an appropriate standard range,
-         such as zero to 2$*$pi.
-
-         \sstitem
-         The \htmlref{NormMap}{NormMap} class is a \htmlref{Mapping}{Mapping} which can be used to normalise a
-         set of points using the
-         AST\_NORM routine
-         of a specified Frame.
-
-         \sstitem
-         It is intended to be possible to put any set of coordinates
-         into a form suitable for display by using this function to
-         normalise them, followed by appropriate formatting
-         (using \htmlref{AST\_FORMAT}{AST_FORMAT}).
-      }
-   }
-}
-\sstroutine{
-   AST\_NORMMAP\sstlabel{AST_NORMMAP}
-}{
-   Create a NormMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{NormMap}{NormMap} and optionally initialises its
-      attributes.
-
-      A NormMap is a \htmlref{Mapping}{Mapping} which normalises coordinate values using the
-      \htmlref{AST\_NORM}{AST_NORM} routine
-      of the supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
-      are both equal to the number of axes in the supplied Frame.
-
-      The forward and inverse transformation of a NormMap are both
-      defined but are identical (that is, they do not form a real inverse
-      pair in that the inverse transformation does not undo the
-      normalisation, instead it reapplies it). However, the
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-      function will replace neighbouring pairs of forward and inverse
-      NormMaps by a single \htmlref{UnitMap}{UnitMap}.
-   }
-   \sstinvocation{
-      RESULT = AST\_NORMMAP( FRAME, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame which is to be used to normalise the
-         supplied axis values.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new NormMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_NORMMAP = INTEGER
-      }{
-         A pointer to the new NormMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_NULLREGION\sstlabel{AST_NULLREGION}
-}{
-   Create a NullRegion
-}{
-   \sstdescription{
-      This function creates a new \htmlref{NullRegion}{NullRegion} and optionally initialises its
-      attributes.
-
-      A NullRegion is a \htmlref{Region}{Region} with no bounds. If the \htmlref{Negated}{Negated} attribute of a
-      NullRegion is false, the NullRegion represents a Region containing no
-      points. If the Negated attribute of a NullRegion is true, the NullRegion
-      represents an infinite Region containing all points within the
-      coordinate system.
-   }
-   \sstinvocation{
-      RESULT = AST\_NULLREGION( FRAME, UNC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the \htmlref{Frame}{Frame} in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with positions in the supplied Frame.
-         The uncertainty in any point in the Frame is found by shifting the
-         supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
-         being considered. The area covered by the shifted uncertainty
-         Region then represents the uncertainty in the position. The
-         uncertainty is assumed to be the same for all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty of zero is
-         used.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new NullRegion. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_NULLREGION = INTEGER
-      }{
-         A pointer to the new NullRegion.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_OFFSET\sstlabel{AST_OFFSET}
-}{
-   Calculate an offset along a geodesic curve
-}{
-   \sstdescription{
-      This routine finds the \htmlref{Frame}{Frame} coordinate values of a point which
-      is offset a specified distance along the geodesic curve between
-      two other points.
-
-      For example, in a basic Frame, this offset will be along the
-      straight line joining two points. For a more specialised Frame
-      describing a sky coordinate system, however, it would be along
-      the great circle passing through two sky positions.
-   }
-   \sstinvocation{
-      CALL AST\_OFFSET( THIS, POINT1, POINT2, OFFSET, POINT3, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         POINT1( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
-         point marking the start of the geodesic curve.
-      }
-      \sstsubsection{
-         POINT2( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis.
-         This should contain the coordinates of the point marking the
-         end of the geodesic curve.
-      }
-      \sstsubsection{
-         OFFSET = DOUBLE PRECISION
-      }{
-         The required offset from the first point along the geodesic
-         curve. If this is positive, it will be towards the second
-         point. If it is negative, it will be in the opposite
-         direction. This offset need not imply a position lying
-         between the two points given, as the curve will be
-         extrapolated if necessary.
-      }
-      \sstsubsection{
-         POINT3( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array with one element for each Frame axis
-         in which the coordinates of the required point will be returned.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The geodesic curve used by this routine is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value.
-
-         \sstitem
-         {\tt{"}}Bad{\tt{"}} coordinate values will also be returned if the two
-         points supplied are coincident (or otherwise fail to uniquely
-         specify a geodesic curve) but the requested offset is non-zero.
-      }
-   }
-}
-\sstroutine{
-   AST\_OFFSET2\sstlabel{AST_OFFSET2}
-}{
-   Calculate an offset along a geodesic curve in a 2D Frame
-}{
-   \sstdescription{
-      This routine finds the \htmlref{Frame}{Frame} coordinate values of a point which
-      is offset a specified distance along the geodesic curve at a
-      given angle from a specified starting point. It can only be
-      used with 2-dimensional Frames.
-
-      For example, in a basic Frame, this offset will be along the
-      straight line joining two points. For a more specialised Frame
-      describing a sky coordinate system, however, it would be along
-      the great circle passing through two sky positions.
-   }
-   \sstinvocation{
-      RESULT = AST\_OFFSET2( THIS, POINT1, ANGLE, OFFSET, POINT2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         POINT1( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
-         point marking the start of the geodesic curve.
-      }
-      \sstsubsection{
-         ANGLE = DOUBLE PRECISION (Given)
-      }{
-         The angle (in radians) from the positive direction of the second
-         axis, to the direction of the required position, as seen from
-         the starting position. Positive rotation is in the sense of
-         rotation from the positive direction of axis 2 to the positive
-         direction of axis 1.
-      }
-      \sstsubsection{
-         OFFSET = DOUBLE PRECISION
-      }{
-         The required offset from the first point along the geodesic
-         curve. If this is positive, it will be in the direction of the
-         given angle. If it is negative, it will be in the opposite
-         direction.
-      }
-      \sstsubsection{
-         POINT2( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array with one element for each Frame axis
-         in which the coordinates of the required point will be returned.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_OFFSET2 = DOUBLE PRECISION
-      }{
-         The direction of the geodesic curve at the end point. That is, the
-         angle (in radians) between the positive direction of the second
-         axis and the continuation of the geodesic curve at the requested
-         end point. Positive rotation is in the sense of rotation from
-         the positive direction of axis 2 to the positive direction of axis
-         1.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The geodesic curve used by this routine is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
-         \sstitem
-         An error will be reported if the Frame is not 2-dimensional.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value.
-      }
-   }
-}
-\sstroutine{
-   AST\_OUTLINE$<$X$>$\sstlabel{AST_OUTLINEX}
-}{
-   Create a new Polygon outling values in a 2D data grid
-}{
-   \sstdescription{
-      This is a set of functions that create a \htmlref{Polygon}{Polygon} enclosing a single
-      contiguous set of pixels that have a specified value within a gridded
-      2-dimensional data array (e.g. an image).
-
-      A basic 2-dimensional \htmlref{Frame}{Frame} is used to represent the pixel coordinate
-      system in the returned Polygon. The \htmlref{Domain}{Domain} attribute is set to
-      {\tt{"}}PIXEL{\tt{"}}, the \htmlref{Title}{Title} attribute is set to {\tt{"}}Pixel coordinates{\tt{"}}, and the
-      Unit attribute for each axis is set to {\tt{"}}pixel{\tt{"}}. All other
-      attributes are left unset. The nature of the pixel coordinate system
-      is determined by parameter
-      STARPIX.
-
-      The
-      MAXERR and MAXVERT
-      parameters can be used to control how accurately the returned
-      Polygon represents the required region in the data array. The
-      number of vertices in the returned Polygon will be the minimum
-      needed to achieve the required accuracy.
-
-      You should use a function which matches the numerical type of the
-      data you are processing by replacing $<$X$>$ in the generic function
-      name
-      AST\_OUTLINE$<$X$>$
-      are procesing data with type
-      REAL, you should use the function AST\_OUTLINER
-      (see the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-   }
-   \sstinvocation{
-      RESULT = AST\_OUTLINE$<$X$>$( VALUE, OPER, ARRAY, LBND, UBND, MAXERR,
-                               MAXVERT, INSIDE, STARPIX, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         VALUE = $<$Xtype$>$ (Given)
-      }{
-         A data value that specifies the pixels to be outlined.
-      }
-      \sstsubsection{
-         OPER = INTEGER (Given)
-      }{
-         Indicates how the
-         VALUE
-         parameter is used to select the outlined pixels. It can
-         have any of the following values:
-         \sstitemlist{
-
-            \sstitem
-            AST\_\_LT: outline pixels with value less than VALUE.
-
-            \sstitem
-            AST\_\_LE: outline pixels with value less than or equal to VALUE.
-
-            \sstitem
-            AST\_\_EQ: outline pixels with value equal to VALUE.
-
-            \sstitem
-            AST\_\_NE: outline pixels with value not equal to VALUE.
-
-            \sstitem
-            AST\_\_GE: outline pixels with value greater than or equal to VALUE.
-
-            \sstitem
-            AST\_\_GT: outline pixels with value greater than VALUE.
-         }
-      }
-      \sstsubsection{
-         ARRAY( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         A
-         2-dimensional array containing the data to be processed.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using AST\_OUTLINER, the type of each array element
-         should be REAL).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the second dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         LBND( 2 ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND( 2) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND and UBND together define the shape
-         and size of the input grid, its extent along a particular
-         (J'th) dimension being UBND(J)-LBND(J)$+$1. They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre or upper corner, as selected by parameter
-         STARPIX.
-      }
-      \sstsubsection{
-         MAXERR = DOUBLE PRECISION (Given)
-      }{
-         Together with
-         MAXVERT,
-         this determines how accurately the returned Polygon represents
-         the required region of the data array. It gives the target
-         discrepancy between the returned Polygon and the accurate outline
-         in the data array, expressed as a number of pixels. Insignificant
-         vertices are removed from the accurate outline, one by one, until
-         the number of vertices remaining in the returned Polygon equals
-         MAXVERT,
-         or the largest discrepancy between the accurate outline and the
-         returned Polygon is greater than
-         MAXERR. If MAXERR
-         is zero or less, its value is ignored and the returned Polygon will
-         have the number of vertices specified by
-         MAXVERT.
-      }
-      \sstsubsection{
-         MAXVERT = INTEGER (Given)
-      }{
-         Together with
-         MAXERR,
-         this determines how accurately the returned Polygon represents
-         the required region of the data array. It gives the maximum
-         allowed number of vertices in the returned Polygon. Insignificant
-         vertices are removed from the accurate outline, one by one, until
-         the number of vertices remaining in the returned Polygon equals
-         MAXVERT,
-         or the largest discrepancy between the accurate outline and the
-         returned Polygon is greater than
-         MAXERR. If MAXVERT
-         is less than 3, its value is ignored and the number of vertices in
-         the returned Polygon will be the minimum needed to ensure that the
-         discrepancy between the accurate outline and the returned
-         Polygon is less than
-         MAXERR.
-      }
-      \sstsubsection{
-         INSIDE( 2 ) = INTEGER (Given)
-      }{
-         An array
-         containing the indices of a pixel known to be inside the
-         required region. This is needed because the supplied data
-         array may contain several disjoint areas of pixels that satisfy
-         the criterion specified by
-         VALUE and OPER.
-         In such cases, the area described by the returned Polygon will
-         be the one that contains the pixel specified by
-         INSIDE.
-         If the specified pixel is outside the bounds given by
-         LBND and UBND,
-         or has a value that does not meet the criterion specified by
-         VALUE and OPER,
-         then this function will search for a suitable pixel. The search
-         starts at the central pixel and proceeds in a spiral manner until
-         a pixel is found that meets the specified crierion.
-      }
-      \sstsubsection{
-         STARPIX = LOGICAL (Given)
-      }{
-         A flag indicating the nature of the pixel coordinate system used
-         to describe the vertex positions in the returned Polygon. If
-         .TRUE.,
-         the standard Starlink definition of pixel coordinate is used in
-         which a pixel with integer index I spans a range of pixel coordinate
-         from (I-1) to I (i.e. pixel corners have integral pixel coordinates).
-         If .FALSE.,
-         the definition of pixel coordinate used by other AST functions
-         such as AST\_RESAMPLE, AST\_MASK,
-         etc., is used. In this definition, a pixel with integer index I
-         spans a range of pixel coordinate from (I-0.5) to (I$+$0.5) (i.e.
-         pixel centres have integral pixel coordinates).
-      }
-      \sstsubsection{
-         BOXSIZE = INTEGER (Given)
-      }{
-         The full width in pixels of a smoothing box to be applied to the
-         polygon vertices before downsizing the polygon to a smaller number
-         of vertices. If an even number is supplied, the next larger odd
-         number is used. Values of one or zero result in no smoothing.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_OUTLINE$<$X$>$ = INTEGER
-      }{
-         The number of pixels to which a value of
-         BADVAL
-         has been assigned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function proceeds by first finding a very accurate polygon,
-         and then removing insignificant vertices from this fine polygon
-         using
-         \htmlref{AST\_DOWNSIZE}{AST_DOWNSIZE}.
-
-         \sstitem
-         The returned Polygon is the outer boundary of the contiguous set
-         of pixels that includes ths specified {\tt{"}}inside{\tt{"}} point, and satisfy
-         the specified value requirement. This set of pixels may potentially
-         include {\tt{"}}holes{\tt{"}} where the pixel values fail to meet the specified
-         value requirement. Such holes will be ignored by this function.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate masking function, you should
-      replace $<$X$>$ in the generic function name AST\_OUTLINE$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         UI: INTEGER (treated as unsigned)
-
-         \sstitem
-         S: INTEGER$*$2 (short integer)
-
-         \sstitem
-         US: INTEGER$*$2 (short integer, treated as unsigned)
-
-         \sstitem
-         B: BYTE (treated as signed)
-
-         \sstitem
-         UB: BYTE (treated as unsigned)
-
-      }
-      For example, AST\_OUTLINED would be used to process DOUBLE
-      PRECISION data, while AST\_OUTLINES would be used to process
-      short integer data (stored in an INTEGER$*$2 array), etc.
-
-      For compatibility with other Starlink facilities, the codes W
-      and UW are provided as synonyms for S and US respectively (but
-      only in the Fortran interface to AST).
-   }
-}
-\sstroutine{
-   AST\_OVERLAP\sstlabel{AST_OVERLAP}
-}{
-   Test if two regions overlap each other
-}{
-   \sstdescription{
-      This function returns an integer value indicating if the two
-      supplied Regions overlap. The two Regions are converted to a commnon
-      coordinate system before performing the check. If this conversion is
-      not possible (for instance because the two Regions represent areas in
-      different domains), then the check cannot be performed and a zero value
-      is returned to indicate this.
-   }
-   \sstinvocation{
-      RESULT = AST\_OVERLAP( THIS, THAT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the first \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         THAT = INTEGER (Given)
-      }{
-         Pointer to the second Region.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_OVERLAP = INTEGER
-      }{
-         A value indicating if there is any overlap between the two Regions.
-         Possible values are:
-
-         0 - The check could not be performed because the second Region
-             could not be mapped into the coordinate system of the first
-             Region.
-
-         1 - There is no overlap between the two Regions.
-
-         2 - The first Region is completely inside the second Region.
-
-         3 - The second Region is completely inside the first Region.
-
-         4 - There is partial overlap between the two Regions.
-
-         5 - The Regions are identical to within their uncertainties.
-
-         6 - The second Region is the exact negation of the first Region
-             to within their uncertainties.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned values 5 and 6 do not check the value of the \htmlref{Closed}{Closed}
-         attribute in the two Regions.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked with the
-         AST error status set, or if it should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_PCDMAP\sstlabel{AST_PCDMAP}
-}{
-   Create a PcdMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PcdMap}{PcdMap} and optionally initialises its
-      attributes.
-
-      A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
-      positions to correct for the radial distortion introduced by some
-      cameras and telescopes. This can take the form either of pincushion
-      or barrel distortion, and is characterized by a single distortion
-      coefficient.
-
-      A PcdMap is specified by giving this distortion coefficient and the
-      coordinates of the centre of the radial distortion. The forward
-      transformation of a PcdMap applies the distortion:
-
-         RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
-      where R is the undistorted radial distance from the distortion
-      centre (specified by attribute PcdCen), RD is the radial distance
-      from the same centre in the presence of distortion, and C is the
-      distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
-      The inverse transformation of a PcdMap removes the distortion
-      produced by the forward transformation. The expression used to derive
-      R from RD is an approximate inverse of the expression above, obtained
-      from two iterations of the Newton-Raphson method. The mismatch between
-      the forward and inverse expressions is negligible for astrometric
-      applications (to reach 1 milliarcsec at the edge of the Anglo-Australian
-      Telescope triplet or a Schmidt field would require field diameters of
-      2.4 and 42 degrees respectively).
-
-      If a PcdMap is inverted (e.g. using \htmlref{AST\_INVERT}{AST_INVERT}) then the roles of the
-      forward and inverse transformations are reversed; the forward
-      transformation will remove the distortion, and the inverse
-      transformation will apply it.
-   }
-   \sstinvocation{
-      RESULT = AST\_PCDMAP( DISCO, PCDCEN, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         DISCO = DOUBLE PRECISION (Given)
-      }{
-         The distortion coefficient. Negative values give barrel
-         distortion, positive values give pincushion distortion, and
-         zero gives no distortion.
-      }
-      \sstsubsection{
-         PCDCEN( 2 ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the coordinates of the centre of the
-         distortion.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new PcdMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_PCDMAP = INTEGER
-      }{
-         A pointer to the new PcdMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_PERMAXES\sstlabel{AST_PERMAXES}
-}{
-   Permute the axis order in a Frame
-}{
-   \sstdescription{
-      This routine permutes the order in which a \htmlref{Frame}{Frame}'s axes occur.
-   }
-   \sstinvocation{
-      CALL AST\_PERMAXES( THIS, PERM, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         PERM( $*$ ) = INTEGER (Given)
-      }{
-         An array with one element for each axis of the Frame (\htmlref{Naxes}{Naxes}
-         attribute). This should list the axes in their new order,
-         using the original axis numbering (which starts at 1 for the
-         first axis).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Only genuine permutations of the axis order are permitted, so
-         each axis must be referenced exactly once in the PERM array.
-
-         \sstitem
-         If successive axis permutations are applied to a Frame, then
-         the effects are cumulative.
-      }
-   }
-}
-\sstroutine{
-   AST\_PERMMAP\sstlabel{AST_PERMMAP}
-}{
-   Create a PermMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PermMap}{PermMap} and optionally initialises its
-      attributes.
-
-      A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
-      and possibly also changes the number of coordinates, between its
-      input and output.
-
-      In addition to permuting the coordinate order, a PermMap may
-      also assign constant values to coordinates. This is useful when
-      the number of coordinates is being increased as it allows fixed
-      values to be assigned to any new ones.
-   }
-   \sstinvocation{
-      RESULT = AST\_PERMMAP( NIN, INPERM, NOUT, OUTPERM, CONSTANT, OPTIONS,
-                            STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of input coordinates.
-      }
-      \sstsubsection{
-         INPERM = INTEGER( NIN ) (Given)
-      }{
-         An array which, for each input
-         coordinate, should contain the number of the output
-         coordinate whose value is to be used (note that this array
-         therefore defines the inverse coordinate transformation).
-         Coordinates are numbered starting from 1.
-
-         For details of additional special values that may be used in
-         this array, see the description of the CONSTANT argument.
-      }
-      \sstsubsection{
-         NOUT = INTEGER (Given)
-      }{
-         The number of output coordinates.
-      }
-      \sstsubsection{
-         OUTPERM = INTEGER( NOUT ) (Given)
-      }{
-         An array which, for each output
-         coordinate, should contain the number of the input coordinate
-         whose value is to be used (note that this array therefore
-         defines the forward coordinate transformation).  Coordinates
-         are numbered starting from 1.
-
-         For details of additional special values that may be used in
-         this array, see the description of the CONSTANT argument.
-      }
-      \sstsubsection{
-         CONSTANT = DOUBLE PRECISION( $*$ ) (Given)
-      }{
-         An array containing values which may be assigned to
-         input and/or output coordinates instead of deriving them
-         from other coordinate values. If either of the INPERM or
-         OUTPERM arrays contains a negative value, it is used to
-         address this CONSTANT array (such that -1 addresses the
-         first element, -2 addresses the second element, etc.) and the
-         value obtained is used as the corresponding coordinate value.
-
-         Care should be taken to ensure that locations lying outside
-         the extent of this array are not accidentally addressed. The
-         array is not used if the INPERM and OUTPERM arrays do not
-         contain negative values.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new PermMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_PERMMAP = INTEGER
-      }{
-         A pointer to the new PermMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If either of the INPERM or OUTPERM arrays contains a
-         zero value (or a positive value which does not identify a valid
-         output/input coordinate, as appropriate), then the value
-         AST\_\_BAD is assigned as the new coordinate value.
-
-         \sstitem
-         This function does not attempt to ensure that the forward and
-         inverse transformations performed by the PermMap are
-         self-consistent in any way. You are therefore free to supply
-         coordinate permutation arrays that achieve whatever effect is
-         desired.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_PICKAXES\sstlabel{AST_PICKAXES}
-}{
-   Create a new Frame by picking axes from an existing one
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Frame}{Frame} whose axes are copied from an
-      existing Frame along with other Frame attributes, such as its
-      \htmlref{Title}{Title}. Any number (zero or more) of the original Frame's axes
-      may be copied, in any order, and additional axes with default
-      attributes may also be included in the new Frame.
-
-      A \htmlref{Mapping}{Mapping} that converts between the coordinate
-      systems described by the two Frames will also be returned.
-   }
-   \sstinvocation{
-      RESULT = AST\_PICKAXES( THIS, NAXES, AXES, MAP, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the original Frame.
-      }
-      \sstsubsection{
-         NAXES = INTEGER (Given)
-      }{
-         The number of axes required in the new Frame.
-      }
-      \sstsubsection{
-         AXES( NAXES ) = INTEGER (Given)
-      }{
-         An array which lists the axes to be
-         copied. These should be given in the order required in the
-         new Frame, using the axis numbering in the original Frame
-         (which starts at 1 for the first axis). Axes may be selected
-         in any order, but each may only be used once.  If additional
-         (default) axes are also to be included, the corresponding
-         elements of this array should be set to zero.
-      }
-      \sstsubsection{
-         MAP = INTEGER (Returned)
-      }{
-         A pointer to a new
-         Mapping. This will be a \htmlref{PermMap}{PermMap} (or a \htmlref{UnitMap}{UnitMap} as a special
-         case) that describes the axis permutation that has taken
-         place between the original and new Frames. The Mapping's
-         forward transformation will convert coordinates from the
-         original Frame into the new one, and vice versa.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames. The class of Frame returned
-         may differ from that of the original Frame, depending on which
-         axes are selected. For example, if a single axis is picked from a
-         \htmlref{SkyFrame}{SkyFrame} (which must always have two axes) then the resulting
-         Frame cannot be a valid SkyFrame, so will revert to the parent
-         class (Frame) instead.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         Using this function on a FrameSet is identical to using it on
-         the current Frame in the FrameSet. The returned Frame will not
-         be a FrameSet.
-      }
-      \sstsubsection{
-         \htmlref{Region}{Region}
-      }{
-         If this function is used on a Region, an attempt is made to
-         retain the bounds information on the selected axes. If
-         succesful, the returned Frame will be a Region of some class.
-         Otherwise, the returned Frame is obtained by calling this
-         function on the Frame represented by the supplied Region (the
-         returned Frame will then not be a Region). In order to be
-         succesful, the selected axes in the Region must be independent
-         of the others. For instance, a \htmlref{Box}{Box} can be split in this way but
-         a \htmlref{Circle}{Circle} cannot. Another requirement for success is that no
-         default axes are added (that is, the
-         AXES
-         array must not contain any zero values.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_PICKAXES = INTEGER
-      }{
-         A pointer to the new Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The new Frame will contain a {\tt{"}}deep{\tt{"}} copy (c.f. \htmlref{AST\_COPY}{AST_COPY}) of all
-         the data selected from the original Frame. Modifying any aspect
-         of the new Frame will therefore not affect the original one.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_PLOT\sstlabel{AST_PLOT}
-}{
-   Create a Plot
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Plot}{Plot} and optionally initialises its
-      attributes.
-
-      A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
-      \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
-      associated with a rectangular plotting area in the underlying
-      graphics system. This plotting area is where graphical output
-      appears. It is defined when the Plot is created.
-
-      The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
-      system, which is the coordinate system in which plotting
-      operations are specified. The results of each plotting operation
-      are automatically transformed into graphical coordinates so as
-      to appear in the plotting area (subject to any clipping which
-      may be in effect).
-
-      Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
-      may often be non-linear, or even discontinuous, most plotting
-      does not result in simple straight lines. The basic plotting
-      element is therefore not a straight line, but a geodesic curve
-      (see \htmlref{AST\_CURVE}{AST_CURVE}). A Plot also provides facilities for drawing
-      markers or symbols (\htmlref{AST\_MARK}{AST_MARK}), text (\htmlref{AST\_TEXT}{AST_TEXT}) and grid lines
-      (\htmlref{AST\_GRIDLINE}{AST_GRIDLINE}). It is also possible to draw curvilinear axes
-      with optional coordinate grids (\htmlref{AST\_GRID}{AST_GRID}).
-      A range of Plot attributes is available to allow precise control
-      over the appearance of graphical output produced by these
-      routines.
-
-      You may select different physical coordinate systems in which to
-      plot (including the native graphical coordinate system itself)
-      by selecting different Frames as the current Frame of a Plot,
-      using its \htmlref{Current}{Current} attribute.  You may also set up clipping (see
-      \htmlref{AST\_CLIP}{AST_CLIP}) to limit the extent of any plotting you perform, and
-      this may be done in any of the coordinate systems associated
-      with the Plot, not necessarily the one you are plotting in.
-
-      Like any FrameSet, a Plot may also be used as a Frame. In this
-      case, it behaves like its current Frame, which describes the
-      physical coordinate system.
-
-      When used as a Mapping, a Plot describes the inter-relation
-      between graphical coordinates (its base Frame) and physical
-      coordinates (its current Frame).  It differs from a normal
-      FrameSet, however, in that an attempt to transform points which
-      lie in clipped areas of the Plot will result in bad coordinate
-      values (AST\_\_BAD).
-   }
-   \sstinvocation{
-      RESULT = AST\_PLOT( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         Pointer to a Frame describing the physical coordinate system
-         in which to plot. A pointer to a FrameSet may also be given,
-         in which case its current Frame will be used to define the
-         physical coordinate system and its base Frame will be mapped
-         on to graphical coordinates (see below).
-
-         If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
-         2-dimensional Frame will be used to describe the physical
-         coordinate system. Labels, etc. may then be attached to this
-         by setting the appropriate Frame attributes
-         (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
-      }
-      \sstsubsection{
-         GRAPHBOX( 4 ) = REAL (Given)
-      }{
-         An array giving the position and extent of the plotting area
-         (on the plotting surface of the underlying graphics system)
-         in which graphical output is to appear. This must be
-         specified using graphical coordinates appropriate to the
-         underlying graphics system.
-
-         The first pair of values should give the coordinates of the
-         bottom left corner of the plotting area and the second pair
-         should give the coordinates of the top right corner. The
-         coordinate on the horizontal axis should be given first in
-         each pair. Note that the order in which these points are
-         given is important because it defines up, down, left and
-         right for subsequent graphical operations.
-      }
-      \sstsubsection{
-         BASEBOX( 4 ) = DOUBLE PRECISION (Given)
-      }{
-         An array giving the coordinates of two points in the supplied
-         Frame (or in the base Frame if a FrameSet was supplied) which
-         correspond to the bottom left and top right corners of the
-         plotting area, as specified above. This range of coordinates
-         will be mapped linearly on to the plotting area. The
-         coordinates should be given in the same order as above.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Plot. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_PLOT
-      }{
-         A pointer to the new Plot.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The base Frame of the returned Plot will be a new Frame which
-         is created by this function to represent the coordinate system
-         of the underlying graphics system (graphical coordinates). It is
-         given a Frame index of 1 within the Plot. The choice of base
-         Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
-         Plot has been created (although you could use this as a way of
-         moving the plotting area around on the plotting surface).
-
-         \sstitem
-         If a Frame is supplied (via the FRAME pointer), then it
-         becomes the current Frame of the new Plot and is given a Frame
-         index of 2.
-
-         \sstitem
-         If a FrameSet is supplied (via the FRAME pointer), then
-         all the Frames within this FrameSet become part of the new Plot
-         (where their Frame indices are increased by 1), with the
-         FrameSet's current Frame becoming the current Frame of the Plot.
-
-         \sstitem
-         If a null Object pointer (AST\_\_NULL) is supplied (via the
-         FRAME pointer), then the returned Plot will contain two
-         Frames, both created by this function. The base Frame will
-         describe graphics coordinates (as above) and the current Frame
-         will be a basic Frame with no attributes set (this will
-         therefore give default values for such things as the Plot \htmlref{Title}{Title}
-         and the Label on each axis). Physical coordinates will be mapped
-         linearly on to graphical coordinates.
-
-         \sstitem
-         An error will result if the Frame supplied (or the base Frame
-         if a FrameSet was supplied) is not 2-dimensional.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_PLOT3D\sstlabel{AST_PLOT3D}
-}{
-   Create a Plot3D
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Plot3D}{Plot3D} and optionally initialises
-      its attributes.
-
-      A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
-      for producing 3D graphical output.
-   }
-   \sstinvocation{
-      RESULT = AST\_PLOT3D( FRAME, GRAPHBOX, BASEBOX, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         Pointer to a \htmlref{Frame}{Frame} describing the physical coordinate system
-         in which to plot. A pointer to a \htmlref{FrameSet}{FrameSet} may also be given,
-         in which case its current Frame will be used to define the
-         physical coordinate system and its base Frame will be mapped
-         on to graphical coordinates (see below).
-
-         If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
-         3-dimensional Frame will be used to describe the physical
-         coordinate system. Labels, etc. may then be attached to this
-         by setting the appropriate Frame attributes
-         (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
-      }
-      \sstsubsection{
-         GRAPHBOX( 6 ) = REAL (Given)
-      }{
-         An array giving the position and extent of the plotting volume
-         (within the plotting space of the underlying graphics system)
-         in which graphical output is to appear. This must be
-         specified using graphical coordinates appropriate to the
-         underlying graphics system.
-
-         The first triple of values should give the coordinates of the
-         bottom left corner of the plotting volume and the second triple
-         should give the coordinates of the top right corner. The
-         coordinate on the horizontal axis should be given first in
-         each pair. Note that the order in which these points are
-         given is important because it defines up, down, left and
-         right for subsequent graphical operations.
-      }
-      \sstsubsection{
-         BASEBOX( 6 ) = DOUBLE PRECISION (Given)
-      }{
-         An array giving the coordinates of two points in the supplied
-         Frame (or in the base Frame if a FrameSet was supplied) which
-         correspond to the bottom left and top right corners of the
-         plotting volume, as specified above. This range of coordinates
-         will be mapped linearly on to the plotting area. The
-         coordinates should be given in the same order as above.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Plot3D. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_PLOT3D = INTEGER
-      }{
-         A pointer to the new Plot3D.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The base Frame of the returned Plot3D will be a new Frame which
-         is created by this function to represent the coordinate system
-         of the underlying graphics system (graphical coordinates). It is
-         given a Frame index of 1 within the Plot3D. The choice of base
-         Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
-         Plot3D has been created (although you could use this as a way of
-         moving the plotting area around on the plotting surface).
-
-         \sstitem
-         If a Frame is supplied (via the FRAME pointer), then it
-         becomes the current Frame of the new Plot3D and is given a Frame
-         index of 2.
-
-         \sstitem
-         If a FrameSet is supplied (via the FRAME pointer), then
-         all the Frames within this FrameSet become part of the new Plot3D
-         (where their Frame indices are increased by 1), with the
-         FrameSet's current Frame becoming the current Frame of the Plot3D.
-
-         \sstitem
-         If a null Object pointer (AST\_\_NULL) is supplied (via the
-         FRAME pointer), then the returned Plot3D will contain two
-         Frames, both created by this function. The base Frame will
-         describe graphics coordinates (as above) and the current Frame
-         will be a basic Frame with no attributes set (this will
-         therefore give default values for such things as the Plot3D \htmlref{Title}{Title}
-         and the Label on each axis). Physical coordinates will be mapped
-         linearly on to graphical coordinates.
-
-         \sstitem
-         An error will result if the Frame supplied (or the base Frame
-         if a FrameSet was supplied) is not 3-dimensional.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_POINTLIST\sstlabel{AST_POINTLIST}
-}{
-   Create a PointList
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PointList}{PointList} object and optionally initialises
-      its attributes.
-
-      A PointList object is a specialised type of \htmlref{Region}{Region} which represents a
-      collection of points in a coordinate \htmlref{Frame}{Frame}.
-   }
-   \sstinvocation{
-      RESULT = AST\_POINTLIST( FRAME, NPNT, COORD, DIM, POINTS, UNC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         NPNT = INTEGER (Given)
-      }{
-         The number of points in the Region.
-      }
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinates being supplied for each point. This
-         must equal the number of axes in the supplied Frame, given by
-         its \htmlref{Naxes}{Naxes} attribute.
-      }
-      \sstsubsection{
-         DIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the POINTS
-         array (which contains the point coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than NPNT.
-      }
-      \sstsubsection{
-         POINTS( DIM, NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         A 2-dimensional array giving the physical coordinates of the
-         points. These should be stored such that the value of coordinate
-         number COORD for point number PNT is found in element IN(PNT,COORD).
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the uncertainties
-         associated with each point in the PointList being created. The
-         uncertainty at any point in the PointList is found by shifting the
-         supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
-         being considered. The area covered by the shifted uncertainty Region
-         then represents the uncertainty in the position. The uncertainty is
-         assumed to be the same for all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the bounding box of the
-         PointList being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new PointList. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_POINTLIST = INTEGER
-      }{
-         A pointer to the new PointList.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_POLYCURVE\sstlabel{AST_POLYCURVE}
-}{
-   Draw a series of connected geodesic curves
-}{
-   \sstdescription{
-      This routine joins a series of points specified in the physical
-      coordinate system of a \htmlref{Plot}{Plot} by drawing a sequence of geodesic
-      curves.  It is equivalent to making repeated calls to the
-      \htmlref{AST\_CURVE}{AST_CURVE} routine (q.v.), except that AST\_POLYCURVE will
-      generally be more efficient when drawing many geodesic curves
-      end-to-end. A typical application of this might be in drawing
-      contour lines.
-
-      As with AST\_CURVE, full account is taken of the \htmlref{Mapping}{Mapping} between
-      physical and graphical coordinate systems. This includes any
-      discontinuities and clipping established using \htmlref{AST\_CLIP}{AST_CLIP}.
-   }
-   \sstinvocation{
-      CALL AST\_POLYCURVE( THIS, NPOINT, NCOORD, INDIM, IN, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         NPOINT = INTEGER (Given)
-      }{
-         The number of points between which geodesic curves are to be drawn.
-      }
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinates being supplied for each point (i.e.
-         the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as given
-         by its \htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         INDIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the IN
-         array (which contains the input coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than NPOINT.
-      }
-      \sstsubsection{
-         IN( INDIM, NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         A 2-dimensional array giving the physical coordinates of the
-         points which are to be joined in sequence by geodesic
-         curves. These should be stored such that the value of
-         coordinate number COORD for input point number POINT is found
-         in element IN(POINT,COORD).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No curve is drawn on either side of any point which has any
-         coordinate equal to the value AST\_\_BAD.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not
-         2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_POLYGON\sstlabel{AST_POLYGON}
-}{
-   Create a Polygon
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Polygon}{Polygon} object and optionally initialises
-      its attributes.
-
-      The Polygon class implements a polygonal area, defined by a
-      collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
-      are connected together by geodesic curves within the encapsulated Frame.
-      For instance, if the encapsulated Frame is a simple Frame then the
-      geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
-      the geodesics will be great circles. Note, the vertices must be
-      supplied in an order such that the inside of the polygon is to the
-      left of the boundary as the vertices are traversed. Supplying them
-      in the reverse order will effectively negate the polygon.
-
-      Within a SkyFrame, neighbouring vertices are always joined using the
-      shortest path. Thus if an edge of 180 degrees or more in length is
-      required, it should be split into section each of which is less
-      than 180 degrees. The closed path joining all the vertices in order
-      will divide the celestial sphere into two disjoint regions. The
-      inside of the polygon is the region which is circled in an
-      anti-clockwise manner (when viewed from the inside of the celestial
-      sphere) when moving through the list of vertices in the order in
-      which they were supplied when the Polygon was created (i.e. the
-      inside is to the left of the boundary when moving through the
-      vertices in the order supplied).
-   }
-   \sstinvocation{
-      RESULT = AST\_POLYGON( FRAME, NPNT, DIM, POINTS, UNC, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME = INTEGER (Given)
-      }{
-         A pointer to the Frame in which the region is defined. It must
-         have exactly 2 axes. A deep copy is taken of the supplied Frame.
-         This means that any subsequent changes made to the Frame using the
-         supplied pointer will have no effect the \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         NPNT = INTEGER (Given)
-      }{
-         The number of points in the Region.
-      }
-      \sstsubsection{
-         DIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the POINTS
-         array (which contains the point coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than NPNT.
-      }
-      \sstsubsection{
-         POINTS( DIM, 2 ) = DOUBLE PRECISION (Given)
-      }{
-         A 2-dimensional array giving the physical coordinates of the
-         vertices. These should be stored such that the value of coordinate
-         number COORD for point number PNT is found in element IN(PNT,COORD).
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a null \htmlref{Object}{Object} pointer (AST\_\_NULL)
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Polygon. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_POLYGON = INTEGER
-      }{
-         A pointer to the new Polygon.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_POLYMAP\sstlabel{AST_POLYMAP}
-}{
-   Create a PolyMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PolyMap}{PolyMap} and optionally initialises
-      its attributes.
-
-      A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
-      transformation.  Each output coordinate is a polynomial function of
-      all the input coordinates. The coefficients are specified separately
-      for each output coordinate. The forward and inverse transformations
-      are defined independantly by separate sets of coefficients.
-   }
-   \sstinvocation{
-      RESULT = AST\_POLYMAP( NIN, NOUT, NCOEFF\_F, COEFF\_F, NCOEFF\_I, COEFF\_I,
-                            OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of input coordinates.
-      }
-      \sstsubsection{
-         NOUT = INTEGER (Given)
-      }{
-         The number of output coordinates.
-      }
-      \sstsubsection{
-         NCOEFF\_F = INTEGER (Given)
-      }{
-         The number of non-zero coefficients necessary to define the
-         forward transformation of the PolyMap. If zero is supplied, the
-         forward transformation will be undefined.
-      }
-      \sstsubsection{
-         COEFF\_F( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing
-         {\tt{"}}NCOEFF\_F$*$( 2 $+$ NIN ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ NIN{\tt{"}}
-         adjacent elements describe a single coefficient of the forward
-         transformation. Within each such group, the first element is the
-         coefficient value; the next element is the integer index of the
-         PolyMap output which uses the coefficient within its defining
-         polynomial (the first output has index 1); the remaining elements
-         of the group give the integer powers to use with each input
-         coordinate value (powers must not be negative, and floating
-         point values are rounded to the nearest integer).
-
-         For instance, if the PolyMap has 3 inputs and 2 outputs, each group
-         consisting of 5 elements, A groups such as {\tt{"}}(1.2, 2.0, 1.0, 3.0, 0.0){\tt{"}}
-         describes a coefficient with value 1.2 which is used within the
-         definition of output 2. The output value is incremented by the
-         product of the coefficient value, the value of input coordinate
-         1 raised to the power 1, and the value of input coordinate 2 raised
-         to the power 3. Input coordinate 3 is not used since its power is
-         specified as zero. As another example, the group {\tt{"}}(-1.0, 1.0,
-         0.0, 0.0, 0.0 ){\tt{"}} describes adds a constant value -1.0 onto
-         output 1 (it is a constant value since the power for every input
-         axis is given as zero).
-
-         Each final output coordinate value is the sum of the {\tt{"}}NCOEFF\_F{\tt{"}} terms
-         described by the {\tt{"}}NCOEFF\_F{\tt{"}} groups within the supplied array.
-      }
-      \sstsubsection{
-         NCOEFF\_I = INTEGER (Given)
-      }{
-         The number of non-zero coefficients necessary to define the
-         inverse transformation of the PolyMap. If zero is supplied, the
-         inverse transformation will be undefined.
-      }
-      \sstsubsection{
-         COEFF\_I( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing
-         {\tt{"}}NCOEFF\_I$*$( 2 $+$ NOUT ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ NOUT{\tt{"}}
-         adjacent elements describe a single coefficient of the inverse
-         transformation, using the same schame as {\tt{"}}COEFF\_F{\tt{"}},
-         except that {\tt{"}}inputs{\tt{"}} and {\tt{"}}outputs{\tt{"}} are transposed.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new PolyMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_POLYMAP = INTEGER
-      }{
-         A pointer to the new PolyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_PRISM\sstlabel{AST_PRISM}
-}{
-   Create a Prism
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Prism}{Prism} and optionally initialises
-      its attributes.
-
-      A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
-      into one or more orthogonal dimensions (specified by another Region).
-      If the Region to be extruded has N axes, and the Region defining the
-      extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
-      A point is inside the Prism if the first N axis values correspond to
-      a point inside the Region being extruded, and the remaining M axis
-      values correspond to a point inside the Region defining the extrusion.
-
-      As an example, a cylinder can be represented by extruding an existing
-      \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
-      Interval would have a single axis and would specify the upper and
-      lower limits of the cylinder along its length.
-   }
-   \sstinvocation{
-      RESULT = AST\_PRISM( REGION1, REGION2, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         REGION1 = INTEGER (Given)
-      }{
-         Pointer to the Region to be extruded.
-      }
-      \sstsubsection{
-         REGION2 = INTEGER (Given)
-      }{
-         Pointer to the Region defining the extent of the extrusion.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new Prism. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_PRISM = INTEGER
-      }{
-         A pointer to the new Prism.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Deep copies are taken of the supplied Regions. This means that
-         any subsequent changes made to the component Regions using the
-         supplied pointers will have no effect on the Prism.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_PURGEWCS\sstlabel{AST_PURGEWCS}
-}{
-   Delete all cards in the FitsChan describing WCS information
-}{
-   \sstdescription{
-      This routine
-      deletes all cards in a \htmlref{FitsChan}{FitsChan} that relate to any of the recognised
-      WCS encodings. On exit, the current card is the first remaining card
-      in the FitsChan.
-   }
-   \sstinvocation{
-      CALL AST\_PURGEWCS( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_PUTCARDS\sstlabel{AST_PUTCARDS}
-}{
-   Store a set of FITS header cards in a FitsChan
-}{
-   \sstdescription{
-      This routine
-      stores a set of FITS header cards in a \htmlref{FitsChan}{FitsChan}. The cards are
-      supplied concatenated together into a single character string.
-      Any existing cards in the FitsChan are removed before the new cards
-      are added. The FitsChan is {\tt{"}}re-wound{\tt{"}} on exit by clearing its \htmlref{Card}{Card}
-      attribute. This means that a subsequent invocation of
-      \htmlref{AST\_READ}{AST_READ}
-      can be made immediately without the need to re-wind the FitsChan
-      first.
-   }
-   \sstinvocation{
-      CALL AST\_PUTCARDS( THIS, CARDS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         CARDS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string
-         containing the FITS cards to be stored. Each individual card
-         should occupy 80 characters in this string, and there should be
-         no delimiters, new lines, etc, between adjacent cards. The final
-         card may be less than 80 characters long.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error will result if the supplied string contains any cards
-         which cannot be interpreted.
-      }
-   }
-}
-\sstroutine{
-   AST\_PUTFITS\sstlabel{AST_PUTFITS}
-}{
-   Store a FITS header card in a FitsChan
-}{
-   \sstdescription{
-      This routine stores a FITS header card in a \htmlref{FitsChan}{FitsChan}. The card
-      is either inserted before the current card (identified by the
-      \htmlref{Card}{Card} attribute), or over-writes the current card, as required.
-   }
-   \sstinvocation{
-      CALL AST\_PUTFITS( THIS, CARD, OVERWRITE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         CARD = CHARACTER $*$ ( 80 ) (Given)
-      }{
-         A character string string containing the FITS card to be
-         stored. No more than 80 characters will be used from this
-         string.
-      }
-      \sstsubsection{
-         OVERWRITE = LOGICAL (Given)
-      }{
-         If this value is .FALSE., the new card is inserted in front of
-         the current card in the FitsChan (as identified by the
-         initial value of the Card attribute). If it is .TRUE., the
-         new card replaces the current card. In either case, the Card
-         attribute is then incremented by one so that it subsequently
-         identifies the card following the one stored.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the Card attribute initially points at the {\tt{"}}end-of-file{\tt{"}}
-         (i.e. exceeds the number of cards in the FitsChan), then the new
-         card is appended as the last card in the FitsChan.
-
-         \sstitem
-         An error will result if the supplied string cannot be interpreted
-         as a FITS header card.
-      }
-   }
-}
-\sstroutine{
-   AST\_PUTLINE\sstlabel{AST_PUTLINE}
-}{
-   Store a text line read by a Channel source routine
-}{
-   \sstdescription{
-      This routine should only be used when implementing a routine
-      which will be passed as the SOURCE argument to \htmlref{AST\_CHANNEL}{AST_CHANNEL}. It
-      should be used to pass back (to the AST library) each line of
-      text read from the external data source. One such line should be
-      passed back in this way for each invocation of the source
-      routine.
-   }
-   \sstinvocation{
-      CALL AST\_PUTLINE( LINE, L, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         LINE = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the line of input text which
-         has been read.
-      }
-      \sstsubsection{
-         L = INTEGER (Given)
-      }{
-         The number of characters in the input line, which may be
-         zero. If there is no more input available (e.g. an end of
-         file has been reached), this value should be set negative and
-         this will terminate the read operation on the \htmlref{Channel}{Channel}.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine is only available in the Fortran interface to the
-         AST library.
-      }
-   }
-}
-\sstroutine{
-   AST\_RATE\sstlabel{AST_RATE}
-}{
-   Calculate the rate of change of a Mapping output
-}{
-   \sstdescription{
-      This routine
-      evaluates the rate of change of a specified output of the supplied
-      \htmlref{Mapping}{Mapping} with respect to a specified input, at a specified input
-      position.
-
-      The result is estimated by interpolating the function using a
-      fourth order polynomial in the neighbourhood of the specified
-      position. The size of the neighbourhood used is chosen to minimise
-      the RMS residual per unit length between the interpolating
-      polynomial and the supplied Mapping function. This method produces
-      good accuracy but can involve evaluating the Mapping 100 or more
-      times.
-   }
-   \sstinvocation{
-      RESULT = AST\_RATE( THIS, AT, AX1, AX2, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         AT( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An
-         array holding the axis values at the position at which the rate
-         of change is to be evaluated. The number of elements in this
-         array should equal the number of inputs to the Mapping.
-      }
-      \sstsubsection{
-         AX1 = INTEGER (Given)
-      }{
-         The index of the Mapping output for which the rate of change is to
-         be found (output numbering starts at 1 for the first output).
-      }
-      \sstsubsection{
-         AX2 = INTEGER (Given)
-      }{
-         The index of the Mapping input which is to be varied in order to
-         find the rate of change (input numbering starts at 1 for the first
-         input).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_RATE = DOUBLE PRECISION
-      }{
-         The rate of change of Mapping output AX1 with respect to input
-         AX2, evaluated at AT, or AST\_\_BAD if the value cannot be
-         calculated.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BAD will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_RATEMAP\sstlabel{AST_RATEMAP}
-}{
-   Create a RateMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{RateMap}{RateMap} and optionally initialises
-      its attributes.
-
-      A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
-      Jacobian matrix of another Mapping. The Mapping for which the
-      Jacobian is required is specified when the new RateMap is created,
-      and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
-      The number of inputs to a RateMap is the same as the number of inputs
-      to its encapsulated Mapping. The number of outputs from a RateMap
-      is always one. This one output equals the rate of change of a
-      specified output of the encapsulated Mapping with respect to a
-      specified input of the encapsulated Mapping (the input and output
-      to use are specified when the RateMap is created).
-
-      A RateMap which has not been inverted does not define an inverse
-      transformation. If a RateMap has been inverted then it will define
-      an inverse transformation but not a forward transformation.
-   }
-   \sstinvocation{
-      RESULT = AST\_RATEMAP( MAP, AX1, AX2, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         MAP = INTEGER (Given)
-      }{
-         Pointer to the encapsulated Mapping.
-      }
-      \sstsubsection{
-         AX1 = INTEGER (Given)
-      }{
-         Index of the output from the encapsulated Mapping for which the
-         rate of change is required. This corresponds to the delta
-         quantity forming the numerator of the required element of the
-         Jacobian matrix. The first axis has index 1.
-      }
-      \sstsubsection{
-         AX2 = INTEGER (Given)
-      }{
-         Index of the input to the encapsulated Mapping which is to be
-         varied. This corresponds to the delta quantity forming the
-         denominator of the required element of the Jacobian matrix.
-         The first axis has index 1.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new RateMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_RATEMAP = INTEGER
-      }{
-         A pointer to the new RateMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The forward transformation of the encapsulated Mapping must be
-         defined.
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         AST\_RATEMAP (the new RateMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a RateMap containing a copy of its
-         component Mappings is required, then a copy of the RateMap should
-         be made using \htmlref{AST\_COPY}{AST_COPY}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_READ\sstlabel{AST_READ}
-}{
-   Read an Object from a Channel
-}{
-   \sstdescription{
-      This function reads the next \htmlref{Object}{Object} from a \htmlref{Channel}{Channel} and returns a
-      pointer to the new Object.
-   }
-   \sstinvocation{
-      RESULT = AST\_READ( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Channel.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All successful use of AST\_READ on a FitsChan is destructive, so that
-         FITS header cards are consumed in the process of reading an Object,
-         and are removed from the FitsChan (this deletion can be prevented
-         for specific cards by calling the FitsChan
-         \htmlref{AST\_RETAINFITS}{AST_RETAINFITS} routine).
-         An unsuccessful call of
-         AST\_READ
-         (for instance, caused by the FitsChan not containing the necessary
-         FITS headers cards needed to create an Object) results in the
-         contents of the FitsChan being left unchanged.
-      }
-      \sstsubsection{
-         \htmlref{StcsChan}{StcsChan}
-      }{
-         The AST Object returned by a successful use of
-         AST\_READ
-         on an StcsChan, will be either a \htmlref{Region}{Region} or a \htmlref{KeyMap}{KeyMap}, depending
-         on the values of the \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
-         attributes. See the documentation for these attributes for further
-         information.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_READ = INTEGER
-      }{
-         A pointer to the new Object. The class to which this will
-         belong is determined by the input data, so is not known in
-         advance.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned, without
-         error, if the Channel contains no further Objects to be read.
-
-         \sstitem
-         A null Object pointer will also be returned if this function
-         is invoked with STATUS set to an error value, or if it should fail
-         for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_REBIN$<$X$>$\sstlabel{AST_REBINX}
-}{
-   Rebin a region of a data grid
-}{
-   \sstdescription{
-      This is a set of functions for rebinning gridded data (e.g. an
-      image) under the control of a geometrical transformation, which
-      is specified by a \htmlref{Mapping}{Mapping}.  The functions operate on a pair of
-      data grids (input and output), each of which may have any number
-      of dimensions. Rebinning may be restricted to a specified
-      region of the input grid. An associated grid of error estimates
-      associated with the input data may also be supplied (in the form
-      of variance values), so as to produce error estimates for the
-      rebined output data. Propagation of missing data (bad pixels)
-      is supported.
-
-      Note, if you will be rebining a sequence of input arrays and then
-      co-adding them into a single array, the alternative
-      \htmlref{AST\_REBINSEQ$<$X$>$}{AST_REBINSEQX} routines
-      will in general be more efficient.
-
-      You should use a rebinning function which matches the numerical
-      type of the data you are processing by replacing $<$X$>$ in
-      the generic function name AST\_REBIN$<$X$>$ by an appropriate 1- or
-      2-character type code. For example, if you are rebinning data
-      with type REAL, you should use the function AST\_REBINR (see
-      the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-
-      Rebinning of the grid of input data is performed by transforming
-      the coordinates of the centre of each input grid element (or pixel)
-      into the coordinate system of the output grid. The input pixel
-      value is then divided up and assigned to the output pixels in the
-      neighbourhood of the central output coordinates. A choice of
-      schemes are provided for determining how each input pixel value is
-      divided up between the output pixels. In general, each output pixel
-      may be assigned values from more than one input pixel. All
-      contributions to a given output pixel are summed to produce the
-      final output pixel value. Output pixels can be set to the supplied
-      bad value if they receive contributions from an insufficient number
-      of input pixels. This is controlled by the
-      WLIM argument.
-
-      Input pixel coordinates are transformed into the coordinate
-      system of the output grid using the forward transformation of the
-      Mapping which is supplied. This means that geometrical features
-      in the input data are subjected to the Mapping's forward
-      transformation as they are transferred from the input to the
-      output grid.
-
-      In practice, transforming the coordinates of every pixel of a
-      large data grid can be time-consuming, especially if the Mapping
-      involves complicated functions, such as sky projections. To
-      improve performance, it is therefore possible to approximate
-      non-linear Mappings by a set of linear transformations which are
-      applied piece-wise to separate sub-regions of the data. This
-      approximation process is applied automatically by an adaptive
-      algorithm, under control of an accuracy criterion which
-      expresses the maximum tolerable geometrical distortion which may
-      be introduced, as a fraction of a pixel.
-
-      This algorithm first attempts to approximate the Mapping with a
-      linear transformation applied over the whole region of the
-      input grid which is being used. If this proves to be
-      insufficiently accurate, the input region is sub-divided into
-      two along its largest dimension and the process is repeated
-      within each of the resulting sub-regions. This process of
-      sub-division continues until a sufficiently good linear
-      approximation is found, or the region to which it is being
-      applied becomes too small (in which case the original Mapping is
-      used directly).
-   }
-   \sstinvocation{
-      CALL AST\_REBIN$<$X$>$( THIS, WLIM, NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
-                         SPREAD, PARAMS, FLAGS,
-                         TOL, MAXPIX, BADVAL,
-                         NDIM\_OUT, LBND\_OUT, UBND\_OUT,
-                         LBND, UBND, OUT, OUT\_VAR, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to a Mapping, whose forward transformation will be
-         used to transform the coordinates of pixels in the input
-         grid into the coordinate system of the output grid.
-
-         The number of input coordinates used by this Mapping (as
-         given by its \htmlref{Nin}{Nin} attribute) should match the number of input
-         grid dimensions given by the value of NDIM\_IN
-         below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
-         attribute) should match the number of output grid dimensions
-         given by NDIM\_OUT.
-      }
-      \sstsubsection{
-         WLIM = DOUBLE PRECISION (Given)
-      }{
-         Gives the required number of input pixel values which must contribute
-         to an output pixel in order for the output pixel value to be
-         considered valid. If the sum of the input pixel weights contributing
-         to an output pixel is less than the supplied
-         WLIM
-         value, then the output pixel value is returned set to the
-         supplied bad value.
-      }
-      \sstsubsection{
-         NDIM\_IN = INTEGER (Given)
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         LBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND\_IN and UBND\_IN together define the shape
-         and size of the input grid, its extent along a particular
-         (J'th) dimension being UBND\_IN(J)-LBND\_IN(J)$+$1. They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         IN( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An array, with one element for each pixel in the
-         input grid, containing the input data to be rebined.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using AST\_REBINR, the type of each array element
-         should be REAL).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An optional second array with the same size and type as the
-         IN array. If the AST\_\_USEVAR flag is set via the FLAGS
-         argument (below), this array should contain a set of
-         non-negative values which represent estimates of the
-         statistical variance associated with each element of the IN
-         array. Estimates of the variance of the rebined output data
-         will then be calculated.
-
-         If the AST\_\_USEVAR flag is not set, no input variance
-         estimates are required and this array will not be used. A
-         dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         SPREAD = INTEGER (Given)
-      }{
-         This argument specifies the scheme to be used for dividing
-         each input data value up amongst the corresponding output pixels.
-         It may be used to select
-         from a set of pre-defined schemes by supplying one of the
-         values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
-         section below.  If a value of zero is supplied, then the
-         default linear spreading scheme is used (equivalent to
-         supplying the value AST\_\_LINEAR).
-      }
-      \sstsubsection{
-         PARAMS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An optional array which should contain
-         any additional parameter values required by the pixel
-         spreading scheme. If such parameters are required, this
-         will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
-         section below.
-
-         If no additional parameters are required, this array is not
-         used. A dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         The sum of a set of flag values which may be used to
-         provide additional control over the rebinning operation. See
-         the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
-         options available.  If no flag values are to be set, a value
-         of zero should be given.
-      }
-      \sstsubsection{
-         TOL = DOUBLE PRECISION (Given)
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement in pixels in the output grid's
-         coordinate system.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-
-         If the value is too high, discontinuities between the linear
-         approximations used in adjacent panel will be higher, and may
-         cause the edges of the panel to be visible when viewing the output
-         image at high contrast. If this is a problem, reduce the
-         tolerance value used.
-      }
-      \sstsubsection{
-         MAXPIX = INTEGER (Given)
-      }{
-         A value which specifies an initial scale size (in pixels) for
-         the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the input grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire input region.
-
-         If a smaller value is used, the input region will first be
-         divided into sub-regions whose size does not exceed MAXPIX
-         pixels in any dimension. Only at this point will attempts at
-         approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 pixels can also be employed as a safeguard in
-         general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting TOL to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         BADVAL = $<$Xtype$>$ (Given)
-      }{
-         This argument should have the same type as the elements of
-         the IN array. It specifies the value used to flag missing
-         data (bad pixels) in the input and output arrays.
-
-         If the AST\_\_USEBAD flag is set via the FLAGS argument,
-         then this value is used to test for bad pixels in the IN
-         (and IN\_VAR) array(s).
-
-         In all cases, this value is also used to flag any output
-         elements in the OUT (and OUT\_VAR) array(s) for which
-         rebined values could not be obtained (see the {\tt{"}}Propagation
-         of Missing Data{\tt{"}} section below for details of the
-         circumstances under which this may occur).
-      }
-      \sstsubsection{
-         NDIM\_OUT = INTEGER (Given)
-      }{
-         The number of dimensions in the output grid. This should be
-         at least one. It need not necessarily be equal to the number
-         of dimensions in the input grid.
-      }
-      \sstsubsection{
-         LBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the output grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the output grid along each dimension.
-
-         Note that LBND\_OUT and UBND\_OUT together define the
-         shape, size and coordinate system of the output grid in the
-         same way as LBND\_IN and UBND\_IN define the shape, size
-         and coordinate system of the input grid.
-      }
-      \sstsubsection{
-         LBND( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the first pixel in the region
-         of the input grid which is to be included in the rebined output
-         array.
-      }
-      \sstsubsection{
-         UBND( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the last pixel in the region of
-         the input grid which is to be included in the rebined output
-         array.
-
-         Note that LBND and UBND together define the shape and
-         position of a (hyper-)rectangular region of the input grid
-         which is to be included in the rebined output array. This region
-         should lie wholly within the extent of the input grid (as
-         defined by the LBND\_IN and UBND\_IN arrays). Regions of
-         the input grid lying outside this region will not be used.
-      }
-      \sstsubsection{
-         OUT( $*$ ) = $<$Xtype$>$ (Returned)
-      }{
-         An array, with one element for each pixel in the
-         output grid, in which the rebined data values will be
-         returned. The numerical type of this array should match that
-         of the IN array, and the data storage order should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         OUT\_VAR( $*$ ) = $<$Xtype$>$ (Returned)
-      }{
-         An optional array with the same type and size as the OUT
-         array. If the AST\_\_USEVAR flag is set via the FLAGS argument,
-         this array will be used to return variance estimates for the
-         rebined data values.
-
-         The output variance values will be calculated on the
-         assumption that errors on the input data values are
-         statistically independent and that their variance estimates
-         may simply be summed (with appropriate weighting factors)
-         when several input pixels contribute to an output data
-         value. If this assumption is not valid, then the output error
-         estimates may be biased. In addition, note that the
-         statistical errors on neighbouring output data values (as
-         well as the estimates of those errors) may often be
-         correlated, even if the above assumption about the input data
-         is correct, because of the pixel spreading schemes
-         employed.
-
-         If the AST\_\_USEVAR flag is not set, no output variance
-         estimates will be calculated and this array will not be
-         used. A dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate rebinning function, you should
-      replace $<$X$>$ in the generic function name AST\_REBIN$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-      }
-      For example, AST\_REBIND would be used to process DOUBLE
-      PRECISION data, while AST\_REBINI would be used to process
-      integer data (stored in an INTEGER array), etc.
-
-      Note that, unlike
-      \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, the AST\_REBIN$<$X$>$
-      set of functions does not yet support unsigned integer data types
-      or integers of different sizes.
-   }
-   \sstdiytopic{
-      Pixel Spreading Schemes
-   }{
-      The pixel spreading scheme specifies the Point Spread Function (PSF)
-      applied to each input pixel value as it is copied into the output
-      array. It can be thought of as the inverse of the sub-pixel
-      interpolation schemes used by the
-      AST\_RESAMPLE$<$X$>$
-      group of functions. That is, in a sub-pixel interpolation scheme the
-      kernel specifies the weight to assign to each input pixel when
-      forming the weighted mean of the input pixels, whereas the kernel in a
-      pixel spreading scheme specifies the fraction of the input data value
-      which is to be assigned to each output pixel. As for interpolation, the
-      choice of suitable pixel spreading scheme involves stricking a balance
-      between schemes which tend to degrade sharp features in the data by
-      smoothing them, and those which attempt to preserve sharp features but
-      which often tend to introduce unwanted artifacts. See the
-      AST\_RESAMPLE$<$X$>$
-      documentation for further discussion.
-
-      The binning algorithm used has the ability to introduce artifacts
-      not seen when using a resampling algorithm. Particularly, when
-      viewing the output image at high contrast, systems of curves lines
-      covering the entire image may be visible. These are caused by a
-      beating effect between the input pixel positions and the output pixels
-      position, and their nature and strength depend critically upon the
-      nature of the Mapping and the spreading function being used. In
-      general, the nearest neighbour spreading function demonstrates this
-      effect more clearly than the other functions, and for this reason
-      should be used with caution.
-
-      The following values (defined in the
-      AST\_PAR include file)
-      may be assigned to the
-      SPREAD
-      parameter. See the
-      AST\_RESAMPLE$<$X$>$
-      documentation for details of these schemes including the use of the
-      FSPREAD and PARAMS arguments:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NEAREST
-
-         \sstitem
-         AST\_\_LINEAR
-
-         \sstitem
-         AST\_\_SINC
-
-         \sstitem
-         AST\_\_SINCSINC
-
-         \sstitem
-         AST\_\_SINCCOS
-
-         \sstitem
-         AST\_\_SINCGAUSS
-
-         \sstitem
-         AST\_\_SOMBCOS
-
-      }
-      In addition, the following schemes can be used with
-      AST\_REBIN$<$X$>$ but not with AST\_RESAMPLE$<$X$>$:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_GAUSS: This scheme uses a kernel of the form exp(-k$*$x$*$x), with k
-         a positive constant determined by the full-width at half-maximum (FWHM).
-         The FWHM should be supplied in units of output pixels by means of the
-         PARAMS(2)
-         value and should be at least 0.1. The
-         PARAMS(1)
-         value should be used to specify at what point the Gaussian is truncated
-         to zero. This should be given as a number of output pixels on either
-         side of the central output point in each dimension (the nearest integer
-         value is used).
-      }
-   }
-   \sstdiytopic{
-      Control Flags
-   }{
-      The following flags are defined in the AST\_PAR include file and
-      may be used to provide additional control over the rebinning
-      process. Having selected a set of flags, you should supply the
-      sum of their values via the FLAGS argument:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_USEBAD: Indicates that there may be bad pixels in the
-         input array(s) which must be recognised by comparing with the
-         value given for BADVAL and propagated to the output array(s).
-         If this flag is not set, all input values are treated literally
-         and the BADVAL value is only used for flagging output array
-         values.
-
-         \sstitem
-         AST\_\_USEVAR: Indicates that variance information should be
-         processed in order to provide estimates of the statistical error
-         associated with the rebined values. If this flag is not set,
-         no variance processing will occur and the IN\_VAR and OUT\_VAR
-         arrays will not be used. (Note that this flag is only available
-         in the Fortran interface to AST.)
-      }
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Instances of missing data (bad pixels) in the output grid are
-      identified by occurrences of the BADVAL value in the OUT
-      array. These are produced if the sum of the weights of the
-      contributing input pixels is less than
-      WLIM.
-
-      An input pixel is considered bad (and is consequently ignored) if
-      its
-      data value is equal to BADVAL and the AST\_\_USEBAD flag is
-      set via the FLAGS argument.
-
-      In addition, associated output variance estimates (if
-      calculated) may be declared bad and flagged with the BADVAL
-      value in the OUT\_VAR array for similar reasons.
-   }
-}
-\sstroutine{
-   AST\_REBINSEQ$<$X$>$\sstlabel{AST_REBINSEQX}
-}{
-   Rebin a region of a sequence of data grids
-}{
-   \sstdescription{
-      This set of
-      routines is identical to \htmlref{AST\_REBIN$<$X$>$}{AST_REBINX}
-      except that the rebinned input data is added into the supplied
-      output arrays, rather than simply over-writing the contents of the
-      output arrays. Thus, by calling this
-      routine
-      repeatedly, a sequence of input arrays can be rebinned and accumulated
-      into a single output array, effectively forming a mosaic of the
-      input data arrays.
-
-      In addition, the weights associated with each output pixel are
-      returned. The weight of an output pixel indicates the number of input
-      pixels which have been accumulated in that output pixel. If the entire
-      value of an input pixel is assigned to a single output pixel, then the
-      weight of that output pixel is incremented by one. If some fraction of
-      the value of an input pixel is assigned to an output pixel, then the
-      weight of that output pixel is incremented by the fraction used.
-
-      The start of a new sequence is indicated by specifying the
-      AST\_\_REBININIT flag via the
-      FLAGS argument.
-      This causes the supplied arrays to be filled with zeros before the
-      rebinned input data is added into them. Subsequenct invocations
-      within the same sequence should omit the AST\_\_REBININIT flag.
-
-      The last call in a sequence is indicated by specifying the AST\_\_REBINEND
-      flag. This causes the output data and variance arrays to be normalised
-      before being returned. This normalisation consists of dividing the data
-      array by the weights array, and can eliminate artifacts which may be
-      introduced into the rebinned data as a consequence of aliasing between
-      the input and output grids. However, it can also result in small changes to
-      the total pixel value in any given area of the output array. In addition to
-      normalisation of the output data values, any output variances are also
-      appropriately normalised, and any output data values with weight less
-      than
-      WLIM are set to BADVAL.
-
-      Output variances can be generated in two ways; by rebinning the supplied
-      input variances with appropriate weights, or by finding the spread of
-      input data values contributing to each output pixel (see the AST\_\_GENVAR
-      and AST\_\_USEVAR flags).
-   }
-   \sstinvocation{
-      CALL AST\_REBINSEQ$<$X$>$( THIS, WLIM, NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
-                            SPREAD, PARAMS, FLAGS, TOL, MAXPIX, BADVAL,
-                            NDIM\_OUT, LBND\_OUT, UBND\_OUT, LBND, UBND, OUT,
-                            OUT\_VAR, WEIGHTS, NUSED, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to a \htmlref{Mapping}{Mapping}, whose forward transformation will be
-         used to transform the coordinates of pixels in the input
-         grid into the coordinate system of the output grid.
-
-         The number of input coordinates used by this Mapping (as
-         given by its \htmlref{Nin}{Nin} attribute) should match the number of input
-         grid dimensions given by the value of NDIM\_IN
-         below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
-         attribute) should match the number of output grid dimensions
-         given by NDIM\_OUT.
-      }
-      \sstsubsection{
-         WLIM = DOUBLE PRECISION (Given)
-      }{
-         This value is only used if the AST\_\_REBINEND flag is specified
-         via the
-         FLAGS argument.
-         It gives the required number of input pixel values which must
-         contribute to an output pixel (i.e. the output pixel weight) in
-         order for the output pixel value to be considered valid. If the sum
-         of the input pixel weights contributing to an output pixel is less
-         than the supplied
-         WLIM
-         value, then the output pixel value is returned set to the
-         supplied bad value. If the supplied value is less than 1.0E-10
-         then 1.0E-10 is used instead.
-      }
-      \sstsubsection{
-         NDIM\_IN = INTEGER (Given)
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         LBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND\_IN and UBND\_IN together define the shape
-         and size of the input grid, its extent along a particular
-         (J'th) dimension being UBND\_IN(J)-LBND\_IN(J)$+$1. They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         IN( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An array, with one element for each pixel in the
-         input grid, containing the input data to be rebined.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using AST\_REBINSEQR, the type of each array element
-         should be REAL).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An optional
-         second array with the same size and type as the
-         IN
-         array. If given, this should contain a set of non-negative values
-         which represent estimates of the statistical variance associated
-         with each element of the
-         IN
-         array.
-         If neither the AST\_\_USEVAR nor the AST\_\_VARWGT flag is set, no
-         input variance estimates are required and this
-         array
-         will not be used.
-         A dummy (e.g. one-element) array
-         may then be supplied.
-      }
-      \sstsubsection{
-         SPREAD = INTEGER (Given)
-      }{
-         This argument specifies the scheme to be used for dividing
-         each input data value up amongst the corresponding output pixels.
-         It may be used to select
-         from a set of pre-defined schemes by supplying one of the
-         values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
-         section in the description of the
-         AST\_REBIN$<$X$>$ routines.
-         If a value of zero is supplied, then the default linear spreading
-         scheme is used (equivalent to supplying the value AST\_\_LINEAR).
-      }
-      \sstsubsection{
-         PARAMS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An optional array which should contain
-         any additional parameter values required by the pixel
-         spreading scheme. If such parameters are required, this
-         will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}} section in the
-         description of the
-         AST\_REBIN$<$X$>$ routines.
-
-         If no additional parameters are required, this array is not
-         used. A dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         The sum of a set of flag values which may be used to
-         provide additional control over the rebinning operation. See
-         the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
-         options available.  If no flag values are to be set, a value
-         of zero should be given.
-      }
-      \sstsubsection{
-         TOL = DOUBLE PRECISION (Given)
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement in pixels in the output grid's
-         coordinate system.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-
-         If the value is too high, discontinuities between the linear
-         approximations used in adjacent panel will be higher, and may
-         cause the edges of the panel to be visible when viewing the output
-         image at high contrast. If this is a problem, reduce the
-         tolerance value used.
-      }
-      \sstsubsection{
-         MAXPIX = INTEGER (Given)
-      }{
-         A value which specifies an initial scale size (in pixels) for
-         the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the input grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire input region.
-
-         If a smaller value is used, the input region will first be
-         divided into sub-regions whose size does not exceed MAXPIX
-         pixels in any dimension. Only at this point will attempts at
-         approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 pixels can also be employed as a safeguard in
-         general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting TOL to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         BADVAL = $<$Xtype$>$ (Given)
-      }{
-         This argument should have the same type as the elements of
-         the IN array. It specifies the value used to flag missing
-         data (bad pixels) in the input and output arrays.
-
-         If the AST\_\_USEBAD flag is set via the FLAGS argument,
-         then this value is used to test for bad pixels in the IN
-         (and IN\_VAR) array(s).
-
-         In all cases, this value is also used to flag any output
-         elements in the OUT (and OUT\_VAR) array(s) for which
-         rebined values could not be obtained (see the {\tt{"}}Propagation
-         of Missing Data{\tt{"}} section below for details of the
-         circumstances under which this may occur).
-      }
-      \sstsubsection{
-         NDIM\_OUT = INTEGER (Given)
-      }{
-         The number of dimensions in the output grid. This should be
-         at least one. It need not necessarily be equal to the number
-         of dimensions in the input grid.
-      }
-      \sstsubsection{
-         LBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the output grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the output grid along each dimension.
-
-         Note that LBND\_OUT and UBND\_OUT together define the
-         shape, size and coordinate system of the output grid in the
-         same way as LBND\_IN and UBND\_IN define the shape, size
-         and coordinate system of the input grid.
-      }
-      \sstsubsection{
-         LBND( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the first pixel in the region
-         of the input grid which is to be included in the rebined output
-         array.
-      }
-      \sstsubsection{
-         UBND( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the last pixel in the region of
-         the input grid which is to be included in the rebined output
-         array.
-
-         Note that LBND and UBND together define the shape and
-         position of a (hyper-)rectangular region of the input grid
-         which is to be included in the rebined output array. This region
-         should lie wholly within the extent of the input grid (as
-         defined by the LBND\_IN and UBND\_IN arrays). Regions of
-         the input grid lying outside this region will not be used.
-      }
-      \sstsubsection{
-         OUT( $*$ ) = $<$Xtype$>$ (Given and Returned)
-      }{
-         An array, with one element for each pixel in the
-         output grid. The rebined data values will be added into the
-         original contents of this array. The numerical type of this array
-         should match that of the
-         IN array, and the data storage order should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         OUT\_VAR( $*$ ) = $<$Xtype$>$ (Given and Returned)
-      }{
-         A
-         array with the same type and size as the
-         OUT
-         array. This
-         array
-         will only be used if the AST\_\_USEVAR or AST\_\_GENVAR flag is set
-         via the FLAGS argument,
-         via the {\tt{"}}flags{\tt{"}} parameter,
-         in which case variance estimates for the rebined data values will
-         be added into the array. If neither the AST\_\_USEVAR flag nor the
-         AST\_\_GENVAR flag is set, no output variance estimates will be
-         calculated and this
-         array
-         will not be used. A
-         dummy (e.g. one-element) array
-         may then be supplied.
-      }
-      \sstsubsection{
-         WEIGHTS( $*$ ) = DOUBLE PRECISION (Given and Returned)
-      }{
-         An array
-         with one or two elements for each pixel in the output grid,
-         depending on whether or not the AST\_\_GENVAR flag has been supplied
-         via the
-         FLAGS parameter.
-         If AST\_\_GENVAR has not been specified then the array should have
-         one element for each output pixel, and it will be used to
-         accumulate the weight associated with each output pixel.
-         If AST\_\_GENVAR has been specified then the array should have
-         two elements for each output pixel. The first half of the array
-         is again used to accumulate the weight associated with each output
-         pixel, and the second half is used to accumulate the square of
-         the weights. In each half, the data storage order should be such that
-         the index of the first grid dimension varies most rapidly and that of
-         the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         NUSED = INTEGER (Given and Returned)
-      }{
-         The
-         number of input data values that have been added into the output
-         array so far. The supplied value is incremented on exit by the
-         number of input values used. The value is initially set to zero
-         if the AST\_\_REBININIT flag is set in
-         FLAGS.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate rebinning function, you should
-      replace $<$X$>$ in the generic function name AST\_REBINSEQ$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-      }
-      For example, AST\_REBIND would be used to process DOUBLE
-      PRECISION data, while AST\_REBINI would be used to process
-      integer data (stored in an INTEGER array), etc.
-
-      Note that, unlike
-      \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, the AST\_REBINSEQ$<$X$>$
-      set of functions does not yet support unsigned integer data types
-      or integers of different sizes.
-   }
-   \sstdiytopic{
-      Control Flags
-   }{
-      The following flags are defined in the AST\_PAR include file and
-      may be used to provide additional control over the rebinning
-      process. Having selected a set of flags, you should supply the
-      sum of their values via the FLAGS argument:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_REBININIT: Used to mark the first call in a sequence. It indicates
-         that the supplied
-         OUT, OUT\_VAR and WEIGHTS
-         arrays should be filled with zeros (thus over-writing any supplied
-         values) before adding the rebinned input data into them. This flag
-         should be used when rebinning the first input array in a sequence.
-
-         \sstitem
-         AST\_\_REBINEND: Used to mark the last call in a sequence. It causes
-         each value in the
-         OUT and OUT\_VAR
-         arrays to be divided by a normalisation factor before being
-         returned. The normalisation factor for each output data value is just the
-         corresponding value from the weights array. The normalisation factor
-         for each output variance value is the square of the data value
-         normalisation factor. It also causes output data values to be set
-         bad if the corresponding weight is less than the value supplied for
-         argument WLIM.
-         It also causes any temporary values stored in the output variance array
-         (see flag AST\_\_GENVAR below) to be converted into usable variance values.
-
-         \sstitem
-         AST\_\_USEBAD: Indicates that there may be bad pixels in the
-         input array(s) which must be recognised by comparing with the
-         value given for BADVAL and propagated to the output array(s).
-         If this flag is not set, all input values are treated literally
-         and the BADVAL value is only used for flagging output array
-         values.
-
-         \sstitem
-         AST\_\_USEVAR: Indicates that output variance estimates should be
-         created by rebinning the supplied input variance estimates. An
-         error will be reported if both this flag and the AST\_\_GENVAR flag
-         are supplied.
-
-         \sstitem
-         AST\_\_GENVAR: Indicates that output variance estimates should be
-         created based on the spread of input data values contributing to each
-         output pixel. An error will be reported if both this flag and the
-         AST\_\_USEVAR flag are supplied. If the AST\_\_GENVAR flag is specified,
-         the supplied output variance array is first used as a work array to
-         accumulate the temporary values needed to generate the output
-         variances. When the sequence ends (as indicated by the
-         AST\_\_REBINEND flag), the contents of the output variance array are
-         converted into the required variance estimates. If the generation of
-         such output variances is required, this flag should be used on every
-         invocation of this
-         routine
-         within a sequence, and any supplied input variances will have no effect
-         on the output variances (although input variances will still be used
-         to weight the input data if the AST\_\_VARWGT flag is also supplied).
-
-         \sstitem
-         AST\_\_VARWGT: Indicates that the input data should be weighted by
-         the reciprocal of the input variances. Otherwise, all input data are
-         given equal weight. If this flag is specified, the calculation of the
-         output variances (if any) is modified to take account of the
-         varying weights assigned to the input data values.
-      }
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Instances of missing data (bad pixels) in the output grid are
-      identified by occurrences of the BADVAL value in the OUT
-      array. These are only produced if the AST\_\_REBINEND flag is
-      specified and a pixel has zero weight.
-
-      An input pixel is considered bad (and is consequently ignored) if
-      its
-      data value is equal to BADVAL and the AST\_\_USEBAD flag is
-      set via the FLAGS argument.
-
-      In addition, associated output variance estimates (if
-      calculated) may be declared bad and flagged with the BADVAL
-      value in the OUT\_VAR array for similar reasons.
-   }
-}
-\sstroutine{
-   AST\_REMAPFRAME\sstlabel{AST_REMAPFRAME}
-}{
-   Modify a Frame's relationship to other Frames in a FrameSet
-}{
-   \sstdescription{
-      This routine modifies the relationship (i.e. \htmlref{Mapping}{Mapping}) between a
-      specified \htmlref{Frame}{Frame} in a \htmlref{FrameSet}{FrameSet} and the other Frames in that
-      FrameSet.
-
-      Typically, this might be required if the FrameSet has been used
-      to calibrate (say) an image, and that image is re-binned. The
-      Frame describing the image will then have undergone a coordinate
-      transformation, and this should be communicated to the associated
-      FrameSet using this routine.
-   }
-   \sstinvocation{
-      CALL AST\_REMAPFRAME( THIS, IFRAME, MAP, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         IFRAME = INTEGER (Given)
-      }{
-         The index within the FrameSet of the Frame to be modified.
-         This value should lie in the range from 1 to the number of
-         Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
-      }
-      \sstsubsection{
-         MAP = INTEGER (Given)
-      }{
-         Pointer to a Mapping whose forward transformation converts
-         coordinate values from the original coordinate system
-         described by the Frame to the new one, and whose inverse
-         transformation converts in the opposite direction.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         IFRAME argument to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         The relationship between the selected Frame and any other
-         Frame within the FrameSet will be modified by this routine,
-         but the relationship between all other Frames in the FrameSet
-         remains unchanged.
-
-         \sstitem
-         The number of input coordinate values accepted by the Mapping
-         (its \htmlref{Nin}{Nin} attribute) and the number of output coordinate values
-         generated (its \htmlref{Nout}{Nout} attribute) must be equal and must match the
-         number of axes in the Frame being modified.
-
-         \sstitem
-         If a simple change of axis order is required, then the
-         \htmlref{AST\_PERMAXES}{AST_PERMAXES} routine may provide a more straightforward method
-         of making the required changes to the FrameSet.
-
-         \sstitem
-         This routine cannot be used to change the number of Frame
-         axes. To achieve this, a new Frame must be added to the FrameSet
-         (\htmlref{AST\_ADDFRAME}{AST_ADDFRAME}) and the original one removed if necessary
-         (\htmlref{AST\_REMOVEFRAME}{AST_REMOVEFRAME}).
-      }
-   }
-}
-\sstroutine{
-   AST\_REMOVEFRAME\sstlabel{AST_REMOVEFRAME}
-}{
-   Remove a Frame from a FrameSet
-}{
-   \sstdescription{
-      This routine removes a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet}. All other Frames
-      in the FrameSet have their indices re-numbered from one (if
-      necessary), but are otherwise unchanged.
-   }
-   \sstinvocation{
-      CALL AST\_REMOVEFRAME( THIS, IFRAME, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         IFRAME = INTEGER (Given)
-      }{
-         The index within the FrameSet of the Frame to be removed.
-         This value should lie in the range from 1 to the number of
-         Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Removing a Frame from a FrameSet does not affect the
-         relationship between other Frames in the FrameSet, even if they
-         originally depended on the Frame being removed.
-
-         \sstitem
-         The number of Frames in a FrameSet cannot be reduced to zero.
-         An error will result if an attempt is made to remove the only
-         remaining Frame.
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         IFRAME argument to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         If a FrameSet's base or current Frame is removed, the \htmlref{Base}{Base} or
-         \htmlref{Current}{Current} attribute (respectively) of the FrameSet will have its
-         value cleared, so that another Frame will then assume its role
-         by default.
-
-         \sstitem
-         If any other Frame is removed, the base and current Frames
-         will remain the same. To ensure this, the Base and/or Current
-         attributes of the FrameSet will be changed, if necessary, to
-         reflect any change in the indices of these Frames.
-      }
-   }
-}
-\sstroutine{
-   AST\_REMOVEREGIONS\sstlabel{AST_REMOVEREGIONS}
-}{
-   Remove any Regions from a Mapping
-}{
-   \sstdescription{
-      This function searches the suppliedMapping (which may be a
-      compound \htmlref{Mapping}{Mapping} such as a \htmlref{CmpMap}{CmpMap}) for any component Mappings
-      that are instances of the AST \htmlref{Region}{Region} class. It then creates a new
-      Mapping from which all Regions have been removed. If a Region
-      cannot simply be removed (for instance, if it is a component of a
-      parallel CmpMap), then it is replaced with an equivalent \htmlref{UnitMap}{UnitMap}
-      in the returned Mapping.
-   }
-   \sstinvocation{
-      RESULT = AST\_REMOVEREGIONS( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the original Mapping.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         If the supplied Mapping is a CmpFrame, any component Frames that
-         are instances of the Region class are replaced by the equivalent
-         \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         If the supplied Mapping is a FrameSet, the returned Mapping
-         will be a copy of the supplied FrameSet in which Regions have
-         been removed from all the inter-Frame Mappings, and any Frames
-         which are instances of the Region class are repalced by the
-         equivalent Frame.
-      }
-      \sstsubsection{
-         Mapping
-      }{
-         This function applies to all Mappings.
-      }
-      \sstsubsection{
-         Region
-      }{
-         If the supplied Mapping is a Region, the returned Mapping will
-         be the equivalent Frame.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_REMOVEREGIONS = INTEGER
-      }{
-         A new pointer to the (possibly modified) Mapping.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function can safely be applied even to Mappings which
-         contain no Regions. If no Regions are found, it
-         behaves exactly like \htmlref{AST\_CLONE}{AST_CLONE} and returns a pointer to the
-         original Mapping.
-
-         \sstitem
-         The Mapping returned by this function may not be independent
-         of the original (even if some Regions were removed), and
-         modifying it may therefore result in indirect modification of
-         the original. If a completely independent result is required, a
-         copy should be made using \htmlref{AST\_COPY}{AST_COPY}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_RESAMPLE$<$X$>$\sstlabel{AST_RESAMPLEX}
-}{
-   Resample a region of a data grid
-}{
-   \sstdescription{
-      This is a set of functions for resampling gridded data (e.g. an
-      image) under the control of a geometrical transformation, which
-      is specified by a \htmlref{Mapping}{Mapping}.  The functions operate on a pair of
-      data grids (input and output), each of which may have any number
-      of dimensions. Resampling may be restricted to a specified
-      region of the output grid. An associated grid of error estimates
-      associated with the input data may also be supplied (in the form
-      of variance values), so as to produce error estimates for the
-      resampled output data. Propagation of missing data (bad pixels)
-      is supported.
-
-      You should use a resampling function which matches the numerical
-      type of the data you are processing by replacing $<$X$>$ in
-      the generic function name AST\_RESAMPLE$<$X$>$ by an appropriate 1- or
-      2-character type code. For example, if you are resampling data
-      with type REAL, you should use the function AST\_RESAMPLER (see
-      the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-
-      Resampling of the grid of input data is performed by
-      transforming the coordinates of the centre of each output grid
-      element (or pixel) into the coordinate system of the input grid.
-      Since the resulting coordinates will not, in general, coincide
-      with the centre of an input pixel, sub-pixel interpolation is
-      performed between the neighbouring input pixels. This produces a
-      resampled value which is then assigned to the output pixel. A
-      choice of sub-pixel interpolation schemes is provided, but you
-      may also implement your own.
-
-      This algorithm samples the input data value, it does not integrate
-      it. Thus total data value in the input image will not, in general,
-      be conserved. However, an option is provided (see the {\tt{"}}Control Flags{\tt{"}}
-      section below) which can produce approximate flux conservation by
-      scaling the output values using the ratio of the output pixel size
-      to the input pixel size. However, if accurate flux conservation is
-      important to you, consder using the
-      \htmlref{AST\_REBIN$<$X$>$}{AST_REBINX} or \htmlref{AST\_REBINSEQ$<$X$>$}{AST_REBINSEQX} family of routines
-      instead.
-
-      Output pixel coordinates are transformed into the coordinate
-      system of the input grid using the inverse transformation of the
-      Mapping which is supplied. This means that geometrical features
-      in the input data are subjected to the Mapping's forward
-      transformation as they are transferred from the input to the
-      output grid (although the Mapping's forward transformation is
-      not explicitly used).
-
-      In practice, transforming the coordinates of every pixel of a
-      large data grid can be time-consuming, especially if the Mapping
-      involves complicated functions, such as sky projections. To
-      improve performance, it is therefore possible to approximate
-      non-linear Mappings by a set of linear transformations which are
-      applied piece-wise to separate sub-regions of the data. This
-      approximation process is applied automatically by an adaptive
-      algorithm, under control of an accuracy criterion which
-      expresses the maximum tolerable geometrical distortion which may
-      be introduced, as a fraction of a pixel.
-
-      This algorithm first attempts to approximate the Mapping with a
-      linear transformation applied over the whole region of the
-      output grid which is being used. If this proves to be
-      insufficiently accurate, the output region is sub-divided into
-      two along its largest dimension and the process is repeated
-      within each of the resulting sub-regions. This process of
-      sub-division continues until a sufficiently good linear
-      approximation is found, or the region to which it is being
-      applied becomes too small (in which case the original Mapping is
-      used directly).
-   }
-   \sstinvocation{
-      RESULT = AST\_RESAMPLE$<$X$>$( THIS, NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
-                                INTERP, FINTERP, PARAMS, FLAGS,
-                                TOL, MAXPIX, BADVAL,
-                                NDIM\_OUT, LBND\_OUT, UBND\_OUT,
-                                LBND, UBND, OUT, OUT\_VAR, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to a Mapping, whose inverse transformation will be
-         used to transform the coordinates of pixels in the output
-         grid into the coordinate system of the input grid. This
-         yields the positions which are used to obtain resampled
-         values by sub-pixel interpolation within the input grid.
-
-         The number of input coordinates used by this Mapping (as
-         given by its \htmlref{Nin}{Nin} attribute) should match the number of input
-         grid dimensions given by the value of NDIM\_IN
-         below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
-         attribute) should match the number of output grid dimensions
-         given by NDIM\_OUT.
-      }
-      \sstsubsection{
-         NDIM\_IN = INTEGER (Given)
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         LBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND\_IN and UBND\_IN together define the shape
-         and size of the input grid, its extent along a particular
-         (J'th) dimension being UBND\_IN(J)-LBND\_IN(J)$+$1. They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         IN( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An array, with one element for each pixel in the
-         input grid, containing the input data to be resampled.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using AST\_RESAMPLER, the type of each array element
-         should be REAL).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An optional second array with the same size and type as the
-         IN array. If the AST\_\_USEVAR flag is set via the FLAGS
-         argument (below), this array should contain a set of
-         non-negative values which represent estimates of the
-         statistical variance associated with each element of the IN
-         array. Estimates of the variance of the resampled output data
-         will then be calculated.
-
-         If the AST\_\_USEVAR flag is not set, no input variance
-         estimates are required and this array will not be used. A
-         dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         INTERP = INTEGER (Given)
-      }{
-         This argument specifies the scheme to be used for sub-pixel
-         interpolation within the input grid. It may be used to select
-         from a set of pre-defined schemes by supplying one of the
-         values described in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
-         section below.  If a value of zero is supplied, then the
-         default linear interpolation scheme is used (equivalent to
-         supplying the value AST\_\_LINEAR).
-
-         Alternatively, you may supply a value which indicates that
-         you will provide your own routine to perform sub-pixel
-         interpolation by means of the FINTERP argument. Again, see
-         the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section below for
-         details.
-      }
-      \sstsubsection{
-         FINTERP = SUBROUTINE (Given)
-      }{
-         If the value given for the INTERP argument indicates that you
-         will provide your own routine for sub-pixel interpolation,
-         then the name of that routine should be given here (the name
-         should also appear in a Fortran EXTERNAL statement in the
-         routine which invokes AST\_RESAMPLE$<$X$>$). For details of the
-         interface which the routine should have (several are
-         possible, depending on the value of INTERP), see the
-         {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section below.
-
-         If the INTERP argument has any other value, corresponding to
-         one of the pre-defined interpolation schemes, then this
-         routine will not be used and you may supply the null routine
-         AST\_NULL here (note only one underscore).  No EXTERNAL
-         statement is required for this routine, so long as the AST\_PAR
-         include file has been used.
-      }
-      \sstsubsection{
-         PARAMS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An optional array which should contain
-         any additional parameter values required by the sub-pixel
-         interpolation scheme. If such parameters are required, this
-         will be noted in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
-         section below (you may also use this array to pass values
-         to your own interpolation routine).
-
-         If no additional parameters are required, this array is not
-         used. A dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         The sum of a set of flag values which may be used to
-         provide additional control over the resampling operation. See
-         the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
-         options available.  If no flag values are to be set, a value
-         of zero should be given.
-      }
-      \sstsubsection{
-         TOL = DOUBLE PRECISION (Given)
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement in pixels in the input grid's
-         coordinate system.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-      }
-      \sstsubsection{
-         MAXPIX = INTEGER (Given)
-      }{
-         A value which specifies an initial scale size (in pixels) for
-         the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the output grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire output region.
-
-         If a smaller value is used, the output region will first be
-         divided into sub-regions whose size does not exceed MAXPIX
-         pixels in any dimension. Only at this point will attempts at
-         approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 pixels can also be employed as a safeguard in
-         general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting TOL to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         BADVAL = $<$Xtype$>$ (Given)
-      }{
-         This argument should have the same type as the elements of
-         the IN array. It specifies the value used to flag missing
-         data (bad pixels) in the input and output arrays.
-
-         If the AST\_\_USEBAD flag is set via the FLAGS argument,
-         then this value is used to test for bad pixels in the IN
-         (and IN\_VAR) array(s).
-
-         Unless the AST\_\_NOBAD flag is set via the FLAGS argument,
-         this value is also used to flag any output
-         elements in the OUT (and OUT\_VAR) array(s) for which
-         resampled values could not be obtained (see the {\tt{"}}Propagation
-         of Missing Data{\tt{"}} section below for details of the
-         circumstances under which this may occur). The AST\_RESAMPLE$<$X$>$
-         function return value indicates whether any such values have
-         been produced. If the AST\_\_NOBAD flag is set. then output array
-         elements for which no resampled value could be obtained are
-         left set to the value they had on entry to this function.
-      }
-      \sstsubsection{
-         NDIM\_OUT = INTEGER (Given)
-      }{
-         The number of dimensions in the output grid. This should be
-         at least one. It need not necessarily be equal to the number
-         of dimensions in the input grid.
-      }
-      \sstsubsection{
-         LBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the output grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_OUT( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the output grid along each dimension.
-
-         Note that LBND\_OUT and UBND\_OUT together define the
-         shape, size and coordinate system of the output grid in the
-         same way as LBND\_IN and UBND\_IN define the shape, size
-         and coordinate system of the input grid.
-      }
-      \sstsubsection{
-         LBND( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the first pixel in the region
-         of the output grid for which a resampled value is to be
-         calculated.
-      }
-      \sstsubsection{
-         UBND( NDIM\_OUT ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the last pixel in the region of
-         the output grid for which a resampled value is to be
-         calculated.
-
-         Note that LBND and UBND together define the shape and
-         position of a (hyper-)rectangular region of the output grid
-         for which resampled values should be produced. This region
-         should lie wholly within the extent of the output grid (as
-         defined by the LBND\_OUT and UBND\_OUT arrays). Regions of
-         the output grid lying outside this region will not be
-         modified.
-      }
-      \sstsubsection{
-         OUT( $*$ ) = $<$Xtype$>$ (Returned)
-      }{
-         An array, with one element for each pixel in the
-         output grid, into which the resampled data values will be
-         returned. The numerical type of this array should match that
-         of the IN array, and the data storage order should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. normal Fortran array storage order).
-      }
-      \sstsubsection{
-         OUT\_VAR( $*$ ) = $<$Xtype$>$ (Returned)
-      }{
-         An optional array with the same type and size as the OUT
-         array. If the AST\_\_USEVAR flag is set via the FLAGS argument,
-         this array will be used to return variance estimates for the
-         resampled data values.
-
-         The output variance values will be calculated on the
-         assumption that errors on the input data values are
-         statistically independent and that their variance estimates
-         may simply be summed (with appropriate weighting factors)
-         when several input pixels contribute to an output data
-         value. If this assumption is not valid, then the output error
-         estimates may be biased. In addition, note that the
-         statistical errors on neighbouring output data values (as
-         well as the estimates of those errors) may often be
-         correlated, even if the above assumption about the input data
-         is correct, because of the sub-pixel interpolation schemes
-         employed.
-
-         If the AST\_\_USEVAR flag is not set, no output variance
-         estimates will be calculated and this array will not be
-         used. A dummy (e.g. one-element) array may then be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_RESAMPLE$<$X$>$ = INTEGER
-      }{
-         The number of output pixels for which no valid resampled value
-         could be obtained. Thus, in the absence of any error, a returned
-         value of zero indicates that all the required output pixels
-         received valid resampled data values (and variances). See the
-         BADVAL and FLAGS arguments.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate resampling function, you should
-      replace $<$X$>$ in the generic function name AST\_RESAMPLE$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: DOUBLE PRECISION
-
-         \sstitem
-         R: REAL
-
-         \sstitem
-         I: INTEGER
-
-         \sstitem
-         UI: INTEGER (treated as unsigned)
-
-         \sstitem
-         S: INTEGER$*$2 (short integer)
-
-         \sstitem
-         US: INTEGER$*$2 (short integer, treated as unsigned)
-
-         \sstitem
-         B: BYTE (treated as signed)
-
-         \sstitem
-         UB: BYTE (treated as unsigned)
-
-      }
-      For example, AST\_RESAMPLED would be used to process DOUBLE
-      PRECISION data, while AST\_RESAMPLES would be used to process
-      short integer data (stored in an INTEGER$*$2 array), etc.
-
-      For compatibility with other Starlink facilities, the codes W
-      and UW are provided as synonyms for S and US respectively (but
-      only in the Fortran interface to AST).
-   }
-   \sstdiytopic{
-      Sub-Pixel Interpolation Schemes
-   }{
-      There is no such thing as a perfect sub-pixel interpolation
-      scheme and, in practice, all resampling will result in some
-      degradation of gridded data.  A range of schemes is therefore
-      provided, from which you can choose the one which best suits
-      your needs.
-
-      In general, a balance must be struck between schemes which tend
-      to degrade sharp features in the data by smoothing them, and
-      those which attempt to preserve sharp features. The latter will
-      often tend to introduce unwanted oscillations, typically visible
-      as {\tt{"}}ringing{\tt{"}} around sharp features and edges, especially if the
-      data are under-sampled (i.e. if the sharpest features are less
-      than about two pixels across). In practice, a good interpolation
-      scheme is likely to be a compromise and may exhibit some aspects
-      of both these features.
-
-      For under-sampled data, some interpolation schemes may appear to
-      preserve data resolution because they transform single input
-      pixels into single output pixels, rather than spreading their
-      data between several output pixels. While this may look
-      better cosmetically, it can result in a geometrical shift of
-      sharp features in the data. You should beware of this if you
-      plan to use such features (e.g.) for image alignment.
-
-      The following are two easy-to-use sub-pixel interpolation
-      schemes which are generally applicable. They are selected by
-      supplying the appropriate value (defined in the AST\_PAR include
-      file) via the INTERP argument. In these cases, the FINTERP
-      and PARAMS arguments are not used:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NEAREST: This is the simplest possible scheme, in which
-         the value of the input pixel with the nearest centre to the
-         interpolation point is used. This is very quick to execute and
-         will preserve single-pixel features in the data, but may
-         displace them by up to half their width along each dimension. It
-         often gives a good cosmetic result, so is useful for quick-look
-         processing, but is unsuitable if accurate geometrical
-         transformation is required.
-
-         \sstitem
-         AST\_\_LINEAR: This is the default scheme, which uses linear
-         interpolation between the nearest neighbouring pixels in the
-         input grid (there are two neighbours in one dimension, four
-         neighbours in two dimensions, eight in three dimensions,
-         etc.). It is superior to the nearest-pixel scheme (above) in not
-         displacing features in the data, yet it still executes fairly
-         rapidly. It is generally a safe choice if you do not have any
-         particular reason to favour another scheme, since it cannot
-         introduce oscillations. However, it does introduce some spatial
-         smoothing which varies according to the distance of the
-         interpolation point from the neighbouring pixels. This can
-         degrade the shape of sharp features in the data in a
-         position-dependent way. It may also show in the output variance
-         grid (if used) as a pattern of stripes or fringes.
-
-      }
-      An alternative set of interpolation schemes is based on forming
-      the interpolated value from the weighted sum of a set of
-      surrounding pixel values (not necessarily just the nearest
-      neighbours). This approach has its origins in the theory of
-      digital filtering, in which interpolated values are obtained by
-      conceptually passing the sampled data (represented by a grid of
-      delta functions) through a linear filter which implements a
-      convolution. Because the convolution kernel is continuous, the
-      convolution yields a continuous function which may then be
-      evaluated at fractional pixel positions. The (possibly
-      multi-dimensional) kernel is usually regarded as {\tt{"}}separable{\tt{"}} and
-      formed from the product of a set of identical 1-dimensional
-      kernel functions, evaluated along each dimension. Different
-      interpolation schemes are then distinguished by the choice of
-      this 1-dimensional interpolation kernel. The number of
-      surrounding pixels which contribute to the result may also be
-      varied.
-
-      From a practical standpoint, it is useful to divide the weighted
-      sum of pixel values by the sum of the weights when determining
-      the interpolated value.  Strictly, this means that a true
-      convolution is no longer being performed. However, the
-      distinction is rarely important in practice because (for
-      slightly subtle reasons) the sum of weights is always
-      approximately constant for good interpolation kernels. The
-      advantage of this technique, which is used here, is that it can
-      easily accommodate missing data and tends to minimise unwanted
-      oscillations at the edges of the data grid.
-
-      In the following schemes, which are based on a 1-dimensional
-      interpolation kernel, the first element of the PARAMS array
-      should be used to specify how many pixels are to contribute to the
-      interpolated result on either side of the interpolation point in
-      each dimension (the nearest integer value is used). Execution time
-      increases rapidly with this number. Typically, a value of 2 is
-      appropriate and the minimum value used will be 1 (i.e. two pixels
-      altogether, one on either side of the interpolation point).
-      A value of zero or less may be given for PARAMS(1)
-      to indicate that a suitable number of pixels should be calculated
-      automatically.
-
-      In each of these cases, the FINTERP argument is not used:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_SINC: This scheme uses a sinc(pi$*$x) kernel, where x is the
-         pixel offset from the interpolation point and sinc(z)=sin(z)/z. This
-         sometimes features as an {\tt{"}}optimal{\tt{"}} interpolation kernel in books on
-         image processing. Its supposed optimality depends on the assumption
-         that the data are band-limited (i.e. have no spatial frequencies above
-         a certain value) and are adequately sampled. In practice, astronomical
-         data rarely meet these requirements. In addition, high spatial
-         frequencies are often present due (e.g.) to image defects and cosmic
-         ray events. Consequently, substantial ringing can be experienced with
-         this kernel. The kernel also decays slowly with distance, so that
-         many surrounding pixels are required, leading to poor performance.
-         Abruptly truncating it, by using only a few neighbouring pixels,
-         improves performance and may reduce ringing (if PARAMS(1) is set to
-         zero, then only two pixels will be used on either side). However, a
-         more gradual truncation, as implemented by other kernels, is generally
-         to be preferred. This kernel is provided mainly so that you can
-         convince yourself not to use it!
-
-         \sstitem
-         AST\_\_SINCSINC: This scheme uses an improved kernel, of the form
-         sinc(pi$*$x).sinc(k$*$pi$*$x), with k a constant, out to the point where
-         sinc(k$*$pi$*$x) goes to zero, and zero beyond. The second sinc() factor
-         provides an {\tt{"}}envelope{\tt{"}} which gradually rolls off the normal sinc(pi$*$x)
-         kernel at large offsets. The width of this envelope is specified by
-         giving the number of pixels offset at which it goes to zero by means
-         of the PARAMS(2) value, which should be at least 1.0 (in addition,
-         setting PARAMS(1) to zero will select the number of contributing
-         pixels so as to utilise the full width of the kernel, out to where it
-         reaches zero). The case given by PARAMS(1)=2, PARAMS(2)=2 is typically
-         a good choice and is sometimes known as the Lanczos kernel. This is a
-         valuable general-purpose interpolation scheme, intermediate in its
-         visual effect on images between the AST\_\_NEAREST and AST\_\_LINEAR
-         schemes. Although the kernel is slightly oscillatory, ringing is
-         adequately suppressed if the data are well sampled.
-
-         \sstitem
-         AST\_\_SINCCOS: This scheme uses a kernel of the form
-         sinc(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
-         cos(k$*$pi$*$x) goes to zero, and zero beyond. As above, the cos() factor
-         provides an envelope which gradually rolls off the sinc() kernel
-         at large offsets. The width of this envelope is specified by giving
-         the number of pixels offset at which it goes to zero by means
-         of the PARAMS(2) value, which should be at least 1.0 (in addition,
-         setting PARAMS(1) to zero will select the number of contributing
-         pixels so as to utilise the full width of the kernel, out to where it
-         reaches zero). This scheme gives similar results to the
-         AST\_\_SINCSINC scheme, which it resembles.
-
-         \sstitem
-         AST\_\_SINCGAUSS: This scheme uses a kernel of the form
-         sinc(pi$*$x).exp(-k$*$x$*$x), with k a positive constant. Here, the sinc()
-         kernel is rolled off using a Gaussian envelope which is specified by
-         giving its full-width at half-maximum (FWHM) by means of the PARAMS(2)
-         value, which should be at least 0.1 (in addition, setting PARAMS(1)
-         to zero will select the number of contributing pixels so as to utilise
-         the width of the kernel out to where the envelope declines to 1\% of its
-         maximum value). On astronomical images and spectra, good results are
-         often obtained by approximately matching the FWHM of the
-         envelope function, given by PARAMS(2), to the point spread function
-         of the input data. However, there does not seem to be any theoretical
-         reason for this.
-
-         \sstitem
-         AST\_\_SOMB: This scheme uses a somb(pi$*$x) kernel (a {\tt{"}}sombrero{\tt{"}}
-         function), where x is the pixel offset from the interpolation point
-         and somb(z)=2$*$J1(z)/z  (J1 is a Bessel function of the first kind of
-         order 1). It is similar to the AST\_\_SINC kernel, and has the same
-         parameter usage.
-
-         \sstitem
-         AST\_\_SOMBCOS: This scheme uses a kernel of the form
-         somb(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
-         cos(k$*$pi$*$x) goes to zero, and zero beyond. It is similar to the
-         AST\_\_SINCCOS kernel, and has the same parameter usage.
-
-      }
-      In addition, the following schemes are provided which are not based
-      on a 1-dimensional kernel:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_BLOCKAVE: This scheme simply takes an average of all the
-         pixels on the input grid in a cube centred on the interpolation
-         point.  The number of pixels in the cube is determined by the
-         value of the first element of the PARAMS array, which gives
-         the number of pixels in each dimension on either side of the
-         central point.  Hence a block of (2 $*$ PARAMS(1))$*$$*$NDIM\_IN
-         pixels in the input grid will be examined to determine the
-         value of the output pixel.  If the variance is not being used
-         (USEVAR = .FALSE.) then all valid pixels in this cube
-         will be averaged in to the result with equal weight.
-         If variances are being used, then each input pixel will be
-         weighted proportionally to the reciprocal of its variance; any
-         pixel without a valid variance will be discarded.  This scheme
-         is suitable where the output grid is much coarser than the
-         input grid; if the ratio of pixel sizes is R then a suitable
-         value of PARAMS(1) may be R/2.
-
-      }
-      Finally, supplying the following values for INTERP allows you to
-      implement your own sub-pixel interpolation scheme by means of
-      your own routine. You should supply the name of this routine via
-      the FINTERP argument:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_UKERN1: In this scheme, you supply a routine to evaluate
-         your own 1-dimensional interpolation kernel, which is then used
-         to perform sub-pixel interpolation (as described above). The
-         routine you supply should have the same interface as the
-         fictitious \htmlref{AST\_UKERN1}{AST_UKERN1} routine (q.v.).  In addition, a value
-         should be given via PARAMS(1) to specify the number of
-         neighbouring pixels which are to contribute to each interpolated
-         value (in the same way as for the pre-defined interpolation
-         schemes described above). Other elements of the PARAMS array
-         are available to pass values to your interpolation routine.
-
-         \sstitem
-         AST\_\_UINTERP: This is a completely general scheme, in which
-         your interpolation routine has access to all of the input
-         data. This allows you to implement any interpolation algorithm
-         you choose, which could (for example) be non-linear, or
-         adaptive. In this case, the AST\_RESAMPLE$<$X$>$ functions play no
-         role in the sub-pixel interpolation process and simply handle
-         the geometrical transformation of coordinates and other
-         housekeeping. The routine you supply should have the same
-         interface as the fictitious \htmlref{AST\_UINTERP}{AST_UINTERP} routine (q.v.). In this
-         case, the PARAMS argument is not used by AST\_RESAMPLE$<$X$>$, but
-         is available to pass values to your interpolation routine.
-      }
-   }
-   \sstdiytopic{
-      Control Flags
-   }{
-      The following flags are defined in the AST\_PAR include file and
-      may be used to provide additional control over the resampling
-      process. Having selected a set of flags, you should supply the
-      sum of their values via the FLAGS argument:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NOBAD: Indicates that any output array elements for which no
-         resampled value could be obtained should be left set to the value
-         they had on entry to this function. If this flag is not supplied,
-         such output array elements are set to the value supplied for
-         argument BADVAL. Note, this flag cannot be used in conjunction
-         with the AST\_\_CONSERVEFLUX flag (an error will be reported if both
-         flags are specified).
-
-         \sstitem
-         AST\_\_URESAMP1, 2, 3 \& 4: A set of four flags which are
-         reserved for your own use. They may be used to pass private
-         information to any sub-pixel interpolation routine which you
-         implement yourself. They are ignored by all the pre-defined
-         interpolation schemes.
-
-         \sstitem
-         AST\_\_USEBAD: Indicates that there may be bad pixels in the
-         input array(s) which must be recognised by comparing with the
-         value given for BADVAL and propagated to the output array(s).
-         If this flag is not set, all input values are treated literally
-         and the BADVAL value is only used for flagging output array
-         values.
-
-         \sstitem
-         AST\_\_USEVAR: Indicates that variance information should be
-         processed in order to provide estimates of the statistical error
-         associated with the resampled values. If this flag is not set,
-         no variance processing will occur and the IN\_VAR and OUT\_VAR
-         arrays will not be used. (Note that this flag is only available
-         in the Fortran interface to AST.)
-
-         \sstitem
-         AST\_\_CONSERVEFLUX: Indicates that the output pixel values should
-         be scaled in such a way as to preserve (approximately) the total data
-         value in a feature on the sky. Without this flag, each output pixel
-         value represents an instantaneous sample of the input data values at
-         the corresponding input position. This is appropriate if the input
-         data represents the spatial density of some quantity (e.g. surface
-         brightness in Janskys per square arc-second) because the output
-         pixel values will have the same normalisation and units as the
-         input pixel values. However, if the input data values represent
-         flux (or some other physical quantity) per pixel, then the
-         AST\_\_CONSERVEFLUX flag could be used. This causes each output
-         pixel value to be scaled by the ratio of the output pixel size to
-         the input pixel size.
-
-      }
-      This flag can only be used if the Mapping is succesfully approximated
-      by one or more linear transformations. Thus an error will be reported
-      if it used when the
-      TOL argument
-      is set to zero (which stops the use of linear approximations), or
-      if the Mapping is too non-linear to be approximated by a piece-wise
-      linear transformation. The ratio of output to input pixel size is
-      evaluated once for each panel of the piece-wise linear approximation to
-      the Mapping, and is assumed to be constant for all output pixels in the
-      panel. The scaling factors for adjacent panels will in general
-      differ slightly, and so the joints between panels may be visible when
-      viewing the output image at high contrast. If this is a problem,
-      reduce the value of the
-      TOL argument
-      until the difference between adjacent panels is sufficiently small
-      to be insignificant.
-
-      Note, this flag cannot be used in conjunction with the AST\_\_NOBAD
-      flag (an error will be reported if both flags are specified).
-
-      Flux conservation can only be approximate when using a resampling
-      algorithm. For accurate flux conservation use the
-      AST\_REBIN$<$X$>$ or AST\_REBINSEQ$<$X$>$ routine
-      instead.
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Unless the AST\_\_NOBAD flag is specified, instances of missing data
-      (bad pixels) in the output grid are
-      identified by occurrences of the BADVAL value in the OUT
-      array. These may be produced if any of the following happen:
-
-      \sstitemlist{
-
-         \sstitem
-         The input position (the transformed position of the output
-         pixel's centre) lies outside the boundary of the grid of input
-         pixels.
-
-         \sstitem
-         The input position lies inside the boundary of a bad input
-         pixel. In this context, an input pixel is considered bad if its
-         data value is equal to BADVAL and the AST\_\_USEBAD flag is
-         set via the FLAGS argument.
-         (Positions which have half-integral coordinate values, and
-         therefore lie on a pixel boundary, are regarded as lying within
-         the pixel with the larger, i.e. more positive, index.)
-
-         \sstitem
-         The set of neighbouring input pixels (excluding those which
-         are bad) is unsuitable for calculating an interpolated
-         value. Whether this is true may depend on the sub-pixel
-         interpolation scheme in use.
-
-         \sstitem
-         The interpolated value lies outside the range which can be
-         represented using the data type of the OUT array.
-
-      }
-      In addition, associated output variance estimates (if
-      calculated) may be declared bad and flagged with the BADVAL
-      value in the OUT\_VAR array under any of the following
-      circumstances:
-
-      \sstitemlist{
-
-         \sstitem
-         The associated resampled data value (in the OUT array) is bad.
-
-         \sstitem
-         The set of neighbouring input pixels which contributed to the
-         output data value do not all have valid variance estimates
-         associated with them. In this context, an input variance
-         estimate may be regarded as bad either because it has the value
-         BADVAL (and the AST\_\_USEBAD flag is set), or because it is
-         negative.
-
-         \sstitem
-         The set of neighbouring input pixels for which valid variance
-         values are available is unsuitable for calculating an overall
-         variance value. Whether this is true may depend on the sub-pixel
-         interpolation scheme in use.
-
-         \sstitem
-         The variance value lies outside the range which can be
-         represented using the data type of the OUT\_VAR array.
-
-      }
-      If the AST\_\_NOBAD flag is specified via
-      argument FLAGS,
-      then output array elements that would otherwise be set to
-      BADVAL
-      are instead left holding the value they had on entry to this
-      function. The number of such array elements is returned as
-      the function value.
-   }
-}
-\sstroutine{
-   AST\_RESOLVE\sstlabel{AST_RESOLVE}
-}{
-   Resolve a vector into two orthogonal components
-}{
-   \sstdescription{
-      This routine resolves a vector into two perpendicular components.
-      The vector from point 1 to point 2 is used as the basis vector.
-      The vector from point 1 to point 3 is resolved into components
-      parallel and perpendicular to this basis vector. The lengths of the
-      two components are returned, together with the position of closest
-      aproach of the basis vector to point 3.
-   }
-   \sstinvocation{
-      CALL AST\_RESOLVE( THIS, POINT1, POINT2, POINT3, POINT4, D1, D2,
-                        STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         POINT1( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This marks the start of the basis vector,
-         and of the vector to be resolved.
-      }
-      \sstsubsection{
-         POINT2( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute). This marks the end of the basis vector.
-      }
-      \sstsubsection{
-         POINT3( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array with one element for each Frame axis
-         (Naxes attribute). This marks the end of the vector to be
-         resolved.
-      }
-      \sstsubsection{
-         POINT4( $*$ ) = DOUBLE PRECISION (Returned)
-      }{
-         An array with one element for each Frame axis
-         in which the coordinates of the point of closest approach of the
-         basis vector to point 3 will be returned.
-      }
-      \sstsubsection{
-         D1 = DOUBLE PRECISION (Returned)
-      }{
-         The distance from
-         point 1 to point 4 (that is, the length of the component parallel
-         to the basis vector). Positive values are in the same sense as
-         movement from point 1 to point 2.
-      }
-      \sstsubsection{
-         D2 = DOUBLE PRECISION (Returned)
-      }{
-         The distance from
-         point 4 to point 3 (that is, the length of the component
-         perpendicular to the basis vector). The value is always positive.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Each vector used in this routine is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{AST\_DISTANCE}{AST_DISTANCE} function.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value, or if the required
-         output values are undefined.
-      }
-   }
-}
-\sstroutine{
-   AST\_RETAINFITS\sstlabel{AST_RETAINFITS}
-}{
-   Indicate that the current card in a FitsChan should be retained
-}{
-   \sstdescription{
-      This routine
-      stores a flag with the current card in the \htmlref{FitsChan}{FitsChan} indicating that
-      the card should not be removed from the FitsChan when an \htmlref{Object}{Object} is
-      read from the FitsChan using
-      \htmlref{AST\_READ}{AST_READ}.
-
-      Cards that have not been flagged in this way are removed when a
-      read operation completes succesfully, but only if the card was used
-      in the process of creating the returned AST Object. Any cards that
-      are irrelevant to the creation of the AST Object are retained whether
-      or not they are flagged.
-   }
-   \sstinvocation{
-      CALL AST\_RETAINFITS( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function returns without action if the FitsChan is
-         initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the \htmlref{Card}{Card}
-         attribute exceeds the number of cards in the FitsChan).
-
-         \sstitem
-         The current card is not changed by this function.
-      }
-   }
-}
-\sstroutine{
-   AST\_SAME\sstlabel{AST_SAME}
-}{
-   Test if two AST pointers refer to the same Object
-}{
-   \sstdescription{
-      This function returns a logical result to indicate
-      whether two pointers refer to the same \htmlref{Object}{Object}.
-   }
-   \sstinvocation{
-      RESULT = AST\_SAME( THIS, THAT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the first Object.
-      }
-      \sstsubsection{
-         THAT = INTEGER (Given)
-      }{
-         Pointer to the second Object.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SAME = LOGICAL
-      }{
-         .TRUE. if the two pointers refer to the same Object, otherwise
-         .FALSE.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Two independent Objects that happen to be identical are not
-         considered to be the same Object by this function.
-
-         \sstitem
-         A value of .FALSE. will be returned if this function is invoked
-         with STATUS set to an error value, or if it should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SELECTORMAP\sstlabel{AST_SELECTORMAP}
-}{
-   Create a SelectorMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SelectorMap}{SelectorMap} and optionally initialises
-      its attributes.
-
-      A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
-      a given input position.
-
-      A SelectorMap encapsulates a number of Regions that all have the same
-      number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
-      inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
-      spanned by one of the encapsulated Region. All SelectorMaps have only
-      a single output. SelectorMaps do not define an inverse transformation.
-
-      For each input position, the forward transformation of a SelectorMap
-      searches through the encapsulated Regions (in the order supplied when
-      the SelectorMap was created) until a Region is found which contains
-      the input position. The index associated with this Region is
-      returned as the SelectorMap output value (the index value is the
-      position of the Region within the list of Regions supplied when the
-      SelectorMap was created, starting at 1 for the first Region). If an
-      input position is not contained within any Region, a value of zero is
-      returned by the forward transformation.
-
-      If a compound Mapping contains a SelectorMap in series with its own
-      inverse, the combination of the two adjacent SelectorMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
-      In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-   }
-   \sstinvocation{
-      RESULT = AST\_SELECTORMAP( NREG, REGS, BADVAL, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NREG = INTEGER (Given)
-      }{
-         The number of supplied Regions.
-      }
-      \sstsubsection{
-         REGS( NREG ) = INTEGER (Given)
-      }{
-         An array of pointers to the Regions. All the supplied Regions must
-         relate to the same coordinate Frame. The number of axes in this
-         coordinate Frame defines the number of inputs for the SelectorMap.
-      }
-      \sstsubsection{
-         BADVAL = DOUBLE PRECISION (Given)
-      }{
-         The value to be returned by the forward transformation of the
-         SelectorMap for any input positions that have a bad (AST\_\_BAD)
-         value on any axis.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SelectorMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SELECTORMAP = INTEGER
-      }{
-         A pointer to the new SelectorMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Deep copies are taken of the supplied Regions. This means that
-         any subsequent changes made to the component Regions using the
-         supplied pointers will have no effect on the SelectorMap.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SET\sstlabel{AST_SET}
-}{
-   Set attribute values for an Object
-}{
-   \sstdescription{
-      This routine assigns a set of attribute values to an \htmlref{Object}{Object},
-      over-riding any previous values. The attributes and their new
-      values are specified via a character string, which should
-      contain a comma-separated list of the form:
-
-         {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
-      where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
-      to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
-      representation of the value to be assigned. This value will be
-      interpreted according to the attribute's data type.
-   }
-   \sstinvocation{
-      CALL AST\_SET( THIS, SETTINGS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         SETTINGS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing a comma-separated list of
-         attribute settings in the form described above.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         CALL AST\_SET( MAP, '\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0', STATUS )
-      }{
-         Sets the Report attribute for Object MAP to the value 1 and
-         the Zoom attribute to 25.0.
-      }
-      \sstexamplesubsection{
-         CALL AST\_SET( FRAME, 'Label( 1 ) =Offset from cluster axis', STATUS )
-      }{
-         Sets the Label(1) attribute for Object FRAME to a suitable
-         string.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         White space may also surround attribute values, where it will
-         generally be ignored (except for string-valued attributes where
-         it is significant and forms part of the value to be assigned).
-
-         \sstitem
-         It is not possible to include a comma in the value to be
-         assigned to an attribute using this routine. If such a value is
-         needed, then AST\_SETC should be used instead.
-
-         \sstitem
-         An error will result if an attempt is made to set a value for
-         a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   AST\_SET$<$X$>$\sstlabel{AST_SETX}
-}{
-   Set an attribute value for an Object
-}{
-   \sstdescription{
-      This is a family of routines which set a specified attribute
-      value for an \htmlref{Object}{Object} using one of several different data
-      types. The type is selected by replacing $<$X$>$ in the routine name
-      by C, D, I, L or R, to supply a value in Character, Double
-      precision, Integer, Logical or Real format, respectively.
-
-      If possible, the value you supply is converted to the type of
-      the attribute. If conversion is not possible, an error will
-      result.
-   }
-   \sstinvocation{
-      CALL AST\_SET$<$X$>$( THIS, ATTRIB, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the name of the attribute whose
-         value is to be set.
-      }
-      \sstsubsection{
-         VALUE = $<$X$>$type (Given)
-      }{
-         The value to be set for the attribute, in the data type corresponding
-         to $<$X$>$.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         These routines apply to all Objects.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         CALL AST\_SETC( PLOT, '\htmlref{Title}{Title}', CVALUE, STATUS )
-      }{
-         Sets the Title attribute value for Object PLOT to the contents
-         of the character variable CVALUE.
-      }
-      \sstexamplesubsection{
-         CALL AST\_SETL( FRAME, 'Preserve', .TRUE., STATUS );
-      }{
-         Sets the Preserve attribute value for Object FRAME to 1 (true).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         The logical value .FALSE. will translate to a numerical attribute
-         value of zero and logical .TRUE. will translate to one.
-
-         \sstitem
-         An error will result if an attempt is made to set a value for
-         a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   AST\_SETACTIVEUNIT\sstlabel{AST_SETACTIVEUNIT}
-}{
-   Specify how the Unit attribute should be used
-}{
-   \sstdescription{
-      This routine
-      sets the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}, which
-      controls how the Frame behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT})
-      to match another Frame. If the ActiveUnit flag is set in both
-      template and target Frames then the returned \htmlref{Mapping}{Mapping} takes into account
-      any differences in axis units. The default value for simple Frames is
-      zero, which preserves the behaviour of versions of AST prior to
-      version 2.0.
-
-      If the ActiveUnit flag of either Frame is
-      .FALSE.,
-      then the Mapping will ignore any difference in the Unit attributes of
-      corresponding template and target axes. In this mode, the Unit
-      attributes are purely descriptive commentary for the benefit of
-      human readers and do not influence the Mappings between Frames.
-      This is the behaviour which all Frames had in older version of AST,
-      prior to the introduction of this attribute.
-
-      If the ActiveUnit flag of both Frames is
-      .TRUE.,
-      then the Mapping from template to target will take account of any
-      difference in the axis Unit attributes, where-ever possible. For
-      instance, if corresponding target and template axes have Unit strings of
-      {\tt{"}}km{\tt{"}} and {\tt{"}}m{\tt{"}}, then the \htmlref{FrameSet}{FrameSet} class will use a \htmlref{ZoomMap}{ZoomMap} to connect
-      them which introduces a scaling of 1000. If no Mapping can be found
-      between the corresponding units string, then an error is reported.
-      In this mode, it is assumed that values of the Unit attribute conform
-      to the syntax for units strings described in the FITS WCS Paper I
-      {\tt{"}}Representations of world coordinates in FITS{\tt{"}} (Greisen \& Calabretta).
-      Particularly, any of the named unit symbols, functions, operators or
-      standard multiplier prefixes listed within that paper can be used within
-      a units string. A units string may contain symbols for unit which are
-      not listed in the FITS paper, but transformation to any other units
-      will then not be possible (except to units which depend only on the
-      same unknown units - thus {\tt{"}}flops{\tt{"}} can be transformed to {\tt{"}}Mflops{\tt{"}}
-      even though {\tt{"}}flops{\tt{"}} is not a standard FITS unit symbol).
-
-      A range of common non-standard variations of unit names and multiplier
-      prefixes are also allowed, such as adding an {\tt{"}}s{\tt{"}} to the end of Angstrom,
-      using a lower case {\tt{"}}a{\tt{"}} at the start of {\tt{"}}angstrom{\tt{"}}, {\tt{"}}micron{\tt{"}} instead of
-      {\tt{"}}um{\tt{"}}, {\tt{"}}sec{\tt{"}} instead of {\tt{"}}s{\tt{"}}, etc.
-
-      If the ActiveUnit flag is .TRUE., setting a new Unit value for an
-      axis may also change its Label and Symbol attributes. For instance, if
-      an axis has Unit {\tt{"}}Hz{\tt{"}} and Label {\tt{"}}frequency{\tt{"}}, then changing its Unit to
-      {\tt{"}}log(Hz){\tt{"}} will change its Label to {\tt{"}}log( frequency ){\tt{"}}. In addition,
-      the \htmlref{Axis}{Axis} Format attribute will be cleared when-ever a new value
-      is assigned to the Unit attribute.
-
-      Note, if a .TRUE. value is set for the ActiveUnit flag, then changing a
-      Unit value for the current Frame within a FrameSet will result in the
-      Frame being re-mapped (that is, the Mappings which define the
-      relationships between Frames within the FrameSet will be modified to
-      take into account the change in Units).
-   }
-   \sstinvocation{
-      CALL AST\_SETACTIVEUNIT( THIS, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         VALUE = LOGICAL (Given)
-      }{
-         The new value to use.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The ActiveUnit flag for a SkyFrame is always .FALSE. (any value
-         supplied using this routine is ignored).
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The ActiveUnit flag for a SpecFrame is always .TRUE. (any value
-         supplied using this routine is ignored).
-      }
-      \sstsubsection{
-         \htmlref{FluxFrame}{FluxFrame}
-      }{
-         The ActiveUnit flag for a FluxFrame is always .TRUE. (any value
-         supplied using this routine is ignored).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The default ActiveUnit flag for a CmpFrame is .TRUE. if both of the
-         component Frames are using active units, and .FALSE. otherwise. When
-         a new value is set for the ActiveUnit flag, the flag value
-         is propagated to the component Frames. This change will be
-         reflected through all references to the component Frames, not
-         just those encapsulated within the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{Region}{Region}:
-      }{
-         Regions always use active units if possible.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The ActiveUnit flag resembles a Frame attribute, except that it
-         cannot be tested or cleared, and it cannot be accessed using the
-         generic \htmlref{AST\_GET$<$X$>$}{AST_GETX} and \htmlref{AST\_SET$<$X$>$}{AST_SETX} routines.
-
-         \sstitem
-         The \htmlref{AST\_GETACTIVEUNIT}{AST_GETACTIVEUNIT} routine can be used to retrieve the current
-         value of the ActiveUnit flag.
-      }
-   }
-}
-\sstroutine{
-   AST\_SETFITS$<$X$>$\sstlabel{AST_SETFITSX}
-}{
-   Store a keyword value in a FitsChan
-}{
-   \sstdescription{
-      This is a family of routines which store values for named keywords
-      within a \htmlref{FitsChan}{FitsChan} at the current card position. The supplied keyword
-      value can either over-write an existing keyword value, or can be
-      inserted as a new header card into the FitsChan.
-
-      The keyword data type is selected by replacing $<$X$>$ in the routine name
-      by one of the following strings representing the recognised FITS data
-      types:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - Complex floating point values.
-
-         \sstitem
-         CI - Complex integer values.
-
-         \sstitem
-         F  - Floating point values.
-
-         \sstitem
-         I  - Integer values.
-
-         \sstitem
-         L  - Logical (i.e. boolean) values.
-
-         \sstitem
-         S  - String values.
-
-         \sstitem
-         CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
-                are encoded without an equals sign.
-
-      }
-      The data type of the {\tt{"}}value{\tt{"}} parameter depends on $<$X$>$ as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - DOUBLE PRECISION(2) (a 2 element array holding the real and
-                imaginary parts of the complex value).
-
-         \sstitem
-         CI - INTEGER(2) (a 2 element array holding the real and imaginary
-                parts of the complex value).
-
-         \sstitem
-         F  - DOUBLE PRECISION.
-
-         \sstitem
-         I  - INTEGER
-
-         \sstitem
-         L  - LOGICAL
-
-         \sstitem
-         S  - CHARACTER
-
-         \sstitem
-         CN - CHARACTER
-      }
-   }
-   \sstinvocation{
-      CALL AST\_SETFITS$<$X$>$( THIS, NAME, VALUE, COMMENT, OVERWRITE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         VALUE = $<$X$>$type (Given)
-      }{
-         The keyword value to store with the named keyword. The data type
-         of this parameter depends on $<$X$>$ as described above.
-      }
-      \sstsubsection{
-         COMMENT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A string
-         holding a comment to associated with the keyword.
-         If
-         a blank string is supplied, then any comment included in the string
-         supplied for the
-         NAME parameter is used instead. If NAME
-         contains no comment, then any existing comment in the card being
-         over-written is retained. Otherwise, no comment is stored with
-         the card.
-      }
-      \sstsubsection{
-         OVERWRITE = LOGICAL (Given)
-      }{
-         If .TRUE.,
-         the new card formed from the supplied keyword name, value and comment
-         string over-writes the current card, and the current card is
-         incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
-         .FALSE.,
-         the new card is inserted in front of the current card and the current
-         card is left unchanged. In either case, if the current card on entry
-         points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
-         the list.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The
-         routine \htmlref{AST\_SETFITSU}{AST_SETFITSU}
-         can be used to indicate that no value is associated with a keyword.
-
-         \sstitem
-         The
-         routine \htmlref{AST\_SETFITSCM}{AST_SETFITSCM}
-         can be used to store a pure comment card (i.e. a card with a blank
-         keyword).
-
-         \sstitem
-         To assign a new value for an existing keyword within a FitsChan,
-         first find the card describing the keyword using \htmlref{AST\_FINDFITS}{AST_FINDFITS}, and
-         then use one of the AST\_SETFITS$<$X$>$ family to over-write the old value.
-
-         \sstitem
-         If, on exit, there are no cards following the card written by
-         this routine, then the current card is left pointing at the
-         {\tt{"}}end-of-file{\tt{"}}.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-      }
-   }
-}
-\sstroutine{
-   AST\_SETFITSCM\sstlabel{AST_SETFITSCM}
-}{
-   Store a comment card in a FitsChan
-}{
-   \sstdescription{
-      This
-      routine
-      stores a comment card ( i.e. a card with no keyword name or equals
-      sign) within a \htmlref{FitsChan}{FitsChan} at the current card position. The new card
-      can either over-write an existing card, or can be inserted as a new
-      card into the FitsChan.
-   }
-   \sstinvocation{
-      CALL AST\_SETFITSCM( THIS, COMMENT, OVERWRITE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         COMMENT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A string
-         holding the text of the comment card.
-         If
-         a blank string is supplied, then a totally blank card is produced.
-      }
-      \sstsubsection{
-         OVERWRITE = LOGICAL (Given)
-      }{
-         If .TRUE.,
-         the new card over-writes the current card, and the current card is
-         incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
-         .FALSE.,
-         the new card is inserted in front of the current card and the current
-         card is left unchanged. In either case, if the current card on entry
-         points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
-         the list.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If, on exit, there are no cards following the card written by
-         this function, then the current card is left pointing at the
-         {\tt{"}}end-of-file{\tt{"}}.
-      }
-   }
-}
-\sstroutine{
-   AST\_SETFITSU\sstlabel{AST_SETFITSU}
-}{
-   Store an undefined keyword value in a FitsChan
-}{
-   \sstdescription{
-      This
-      routine
-      stores an undefined value for a named keyword within
-      a \htmlref{FitsChan}{FitsChan} at the current card position. The new undefined value
-      can either over-write an existing keyword value, or can be inserted
-      as a new header card into the FitsChan.
-   }
-   \sstinvocation{
-      CALL AST\_SETFITSU( THIS, NAME, COMMENT, OVERWRITE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         COMMENT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A string
-         holding a comment to associated with the keyword.
-         If
-         a blank string is supplied, then any comment included in the string
-         supplied for the
-         NAME parameter is used instead. If NAME
-         contains no comment, then any existing comment in the card being
-         over-written is retained. Otherwise, no comment is stored with
-         the card.
-      }
-      \sstsubsection{
-         OVERWRITE = LOGICAL (Given)
-      }{
-         If .TRUE.,
-         the new card formed from the supplied keyword name and comment
-         string over-writes the current card, and the current card is
-         incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
-         .FALSE.,
-         the new card is inserted in front of the current card and the current
-         card is left unchanged. In either case, if the current card on entry
-         points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
-         the list.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If, on exit, there are no cards following the card written by
-         this function, then the current card is left pointing at the
-         {\tt{"}}end-of-file{\tt{"}}.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-      }
-   }
-}
-\sstroutine{
-   AST\_SETREFPOS\sstlabel{AST_SETREFPOS}
-}{
-   Set the reference position in a specified celestial coordinate system
-}{
-   \sstdescription{
-      This routine
-      sets the reference position (see attributes \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}) using
-      axis values (in radians) supplied within the celestial coordinate
-      system represented by a supplied \htmlref{SkyFrame}{SkyFrame}.
-   }
-   \sstinvocation{
-      CALL AST\_SETREFPOS( THIS, FRM, LON, LAT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the \htmlref{SpecFrame}{SpecFrame}.
-      }
-      \sstsubsection{
-         FRM = INTEGER (Given)
-      }{
-         Pointer to the SkyFrame which defines the celestial coordinate
-         system in which the longitude and latitude values are supplied.
-         If AST\_\_NULL
-         is supplied, then the supplied longitude and latitude values are
-         assumed to be FK5 J2000 RA and Dec values.
-      }
-      \sstsubsection{
-         LON = DOUBLE PRECISION (Given)
-      }{
-         The longitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-      \sstsubsection{
-         LAT = DOUBLE PRECISION (Given)
-      }{
-         The latitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_SETUNC\sstlabel{AST_SETUNC}
-}{
-   Store uncertainty information in a Region
-}{
-   \sstdescription{
-      Each \htmlref{Region}{Region} (of any class) can have an {\tt{"}}uncertainty{\tt{"}} which specifies
-      the uncertainties associated with the boundary of the Region. This
-      information is supplied in the form of a second Region. The uncertainty
-      in any point on the boundary of a Region is found by shifting the
-      associated {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the boundary
-      point being considered. The area covered by the shifted uncertainty
-      Region then represents the uncertainty in the boundary position.
-      The uncertainty is assumed to be the same for all points.
-
-      The uncertainty is usually specified when the Region is created, but
-      this
-      routine
-      allows it to be changed at any time.
-   }
-   \sstinvocation{
-      CALL AST\_SETUNC( THIS, UNC, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region which is to be assigned a new uncertainty.
-      }
-      \sstsubsection{
-         UNC = INTEGER (Given)
-      }{
-         Pointer to the new uncertainty Region. This must be of a class for
-         which all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse},
-         etc.) or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions.
-         A deep copy of the supplied Region will be taken, so subsequent
-         changes to the uncertainty Region using the supplied pointer will
-         have no effect on the Region
-         THIS.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_SHIFTMAP\sstlabel{AST_SHIFTMAP}
-}{
-   Create a ShiftMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{ShiftMap}{ShiftMap} and optionally initialises its
-      attributes.
-
-      A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
-      specified constant value.
-   }
-   \sstinvocation{
-      RESULT = AST\_SHIFTMAP( NCOORD, SHIFT, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). The same number is applicable
-         to both input and output points.
-      }
-      \sstsubsection{
-         SHIFT( NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the values to be added on to the input
-         coordinates in order to create the output coordinates. A separate
-         value should be supplied for each coordinate.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new ShiftMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SHIFTMAP = INTEGER
-      }{
-         A pointer to the new ShiftMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_SHOW\sstlabel{AST_SHOW}
-}{
-   Display a textual representation of an Object on standard output
-}{
-   \sstdescription{
-      This routine displays a textual description of any AST \htmlref{Object}{Object}
-      on standard output. It is provided primarily as an aid to
-      debugging.
-   }
-   \sstinvocation{
-      CALL AST\_SHOW( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object to be displayed.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-}
-\sstroutine{
-   AST\_SHOWMESH\sstlabel{AST_SHOWMESH}
-}{
-   Display a mesh of points covering the surface of a Region
-}{
-   \sstdescription{
-      This routine
-      writes a table to standard output containing the axis values at a
-      mesh of points covering the surface of the supplied \htmlref{Region}{Region}. Each row
-      of output contains a tab-separated list of axis values, one for
-      each axis in the \htmlref{Frame}{Frame} encapsulated by the Region. The number of
-      points in the mesh is determined by the \htmlref{MeshSize}{MeshSize} attribute.
-
-      The table is preceeded by a given title string, and followed by a
-      single line containing the word {\tt{"}}ENDMESH{\tt{"}}.
-   }
-   \sstinvocation{
-      CALL AST\_SHOWMESH( THIS, FORMAT, TTL, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         FORMAT = LOGICAL (Given)
-      }{
-         A boolean value indicating if the displayed axis values should
-         be formatted according to the Format attribute associated with
-         the Frame's axis. Otherwise, they are displayed as simple
-         floating point values.
-      }
-      \sstsubsection{
-         TTL = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A title to display before displaying the first position.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-}
-\sstroutine{
-   AST\_SIMPLIFY\sstlabel{AST_SIMPLIFY}
-}{
-   Simplify a Mapping
-}{
-   \sstdescription{
-      This function simplifies a \htmlref{Mapping}{Mapping} (which may be a compound
-      Mapping such as a \htmlref{CmpMap}{CmpMap}) to eliminate redundant computational
-      steps, or to merge separate steps which can be performed more
-      efficiently in a single operation.
-
-      As a simple example, a Mapping which multiplied coordinates by
-      5, and then multiplied the result by 10, could be simplified to
-      a single step which multiplied by 50. Similarly, a Mapping which
-      multiplied by 5, and then divided by 5, could be reduced to a
-      simple copying operation.
-
-      This function should typically be applied to Mappings which have
-      undergone substantial processing or have been formed by merging
-      other Mappings. It is of potential benefit, for example, in
-      reducing execution time if applied before using a Mapping to
-      transform a large number of coordinates.
-   }
-   \sstinvocation{
-      RESULT = AST\_SIMPLIFY( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the original Mapping.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         This function applies to all Mappings.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         If the supplied Mapping is a FrameSet, the returned Mapping
-         will be a copy of the supplied FrameSet in which all the
-         inter-\htmlref{Frame}{Frame} Mappings have been simplified.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SIMPLIFY = INTEGER
-      }{
-         A new pointer to the (possibly simplified) Mapping.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function can safely be applied even to Mappings which
-         cannot be simplified. If no simplification is possible, it
-         behaves exactly like \htmlref{AST\_CLONE}{AST_CLONE} and returns a pointer to the
-         original Mapping.
-
-         \sstitem
-         The Mapping returned by this function may not be independent
-         of the original (even if simplification was possible), and
-         modifying it may therefore result in indirect modification of
-         the original. If a completely independent result is required, a
-         copy should be made using \htmlref{AST\_COPY}{AST_COPY}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SKYFRAME\sstlabel{AST_SKYFRAME}
-}{
-   Create a SkyFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SkyFrame}{SkyFrame} and optionally initialises
-      its attributes.
-
-      A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
-      celestial longitude/latitude coordinate systems. The particular
-      celestial coordinate system to be represented is specified by
-      setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
-      is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
-      an \htmlref{Epoch}{Epoch}.
-
-      For each of the supported celestial coordinate systems, a SkyFrame
-      can apply an optional shift of origin to create a coordinate system
-      representing offsets within the celestial coordinate system from some
-      specified point. This offset coordinate system can also be rotated to
-      define new longitude and latitude axes. See attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}
-      and SkyRefP
-
-      All the coordinate values used by a SkyFrame are in
-      radians. These may be formatted in more conventional ways for
-      display by using \htmlref{AST\_FORMAT}{AST_FORMAT}.
-   }
-   \sstinvocation{
-      RESULT = AST\_SKYFRAME( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SkyFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SKYFRAME = INTEGER
-      }{
-         A pointer to the new SkyFrame.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         FRAME = AST\_SKYFRAME( ' ', STATUS )
-      }{
-         Creates a SkyFrame to describe the default ICRS celestial
-         coordinate system.
-      }
-      \sstexamplesubsection{
-         FRAME = AST\_SKYFRAME( 'System = FK5, Equinox = J2005, Digits = 10', STATUS )
-      }{
-         Creates a SkyFrame to describe the FK5 celestial
-         coordinate system, with a mean Equinox of J2005.0.
-         Because especially accurate coordinates will be used,
-         additional precision (10 digits) has been requested. This will
-         be used when coordinate values are formatted for display.
-      }
-      \sstexamplesubsection{
-         FRAME = AST\_SKYFRAME( 'System = FK4, Equinox = 1955-SEP-2', STATUS )
-      }{
-         Creates a SkyFrame to describe the old FK4 celestial
-         coordinate system.  A default Epoch value (B1950.0) is used,
-         but the mean Equinox value is given explicitly as {\tt{"}}1955-SEP-2{\tt{"}}.
-      }
-      \sstexamplesubsection{
-         FRAME = AST\_SKYFRAME( 'System = GAPPT, Epoch = ' // DATE, STATUS )
-      }{
-         Creates a SkyFrame to describe the Geocentric Apparent
-         celestial coordinate system. The Epoch value, which specifies
-         the date of observation, is obtained from a date/time string
-         contained in the character variable DATE.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Currently, the default celestial coordinate system is
-         ICRS. However, this default may change in future as new
-         astrometric standards evolve. The intention is to track the most
-         modern appropriate standard. For this reason, you should use the
-         default only if this is what you intend (and can tolerate any
-         associated slight change in behaviour with future versions of
-         this function). If you intend to use the ICRS system
-         indefinitely, then you should specify it explicitly using an
-         OPTIONS value of {\tt{"}}System=ICRS{\tt{"}}.
-
-         \sstitem
-         Whichever celestial coordinate system is represented, it will
-         have two axes.  The first of these will be the longitude axis
-         and the second will be the latitude axis. This order can be
-         changed using \htmlref{AST\_PERMAXES}{AST_PERMAXES} if required.
-
-         \sstitem
-         When conversion between two SkyFrames is requested (as when
-         supplying SkyFrames \htmlref{AST\_CONVERT}{AST_CONVERT}),
-         account will be taken of the nature of the celestial coordinate
-         systems they represent, together with any qualifying mean Equinox or
-         Epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} attribute will also be taken into
-         account. The results will therefore fully reflect the
-         relationship between positions on the sky measured in the two
-         systems.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SLAADD\sstlabel{AST_SLAADD}
-}{
-   Add a celestial coordinate conversion to an SlaMap
-}{
-   \sstdescription{
-      This routine adds one of the standard celestial coordinate
-      system conversions provided by the SLALIB Positional Astronomy
-      Library (Starlink User Note SUN/67) to an existing \htmlref{SlaMap}{SlaMap}.
-
-      When an SlaMap is first created (using \htmlref{AST\_SLAMAP}{AST_SLAMAP}), it simply
-      performs a unit (null) \htmlref{Mapping}{Mapping}. By using AST\_SLAADD (repeatedly
-      if necessary), one or more coordinate conversion steps may then
-      be added, which the SlaMap will perform in sequence. This allows
-      multi-step conversions between a variety of celestial coordinate
-      systems to be assembled out of the building blocks provided by
-      SLALIB.
-
-      Normally, if an SlaMap's \htmlref{Invert}{Invert} attribute is zero (the default),
-      then its forward transformation is performed by carrying out
-      each of the individual coordinate conversions specified by
-      AST\_SLAADD in the order given (i.e. with the most recently added
-      conversion applied last).
-
-      This order is reversed if the SlaMap's Invert attribute is
-      non-zero (or if the inverse transformation is requested by any
-      other means) and each individual coordinate conversion is also
-      replaced by its own inverse. This process inverts the overall
-      effect of the SlaMap. In this case, the first conversion to be
-      applied would be the inverse of the one most recently added.
-   }
-   \sstinvocation{
-      CALL AST\_SLAADD( THIS, CVT, ARGS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the SlaMap.
-      }
-      \sstsubsection{
-         CVT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string which identifies the
-         celestial coordinate conversion to be added to the
-         SlaMap. See the {\tt{"}}SLALIB Conversions{\tt{"}} section for details of
-         those available.
-      }
-      \sstsubsection{
-         ARGS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing argument values for the celestial
-         coordinate conversion. The number of arguments required, and
-         hence the number of array elements used, depends on the
-         conversion specified (see the {\tt{"}}SLALIB Conversions{\tt{"}}
-         section). This array is ignored
-         if no arguments are needed.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         All coordinate values processed by an SlaMap are in
-         radians. The first coordinate is the celestial longitude and the
-         second coordinate is the celestial latitude.
-
-         \sstitem
-         When assembling a multi-stage conversion, it can sometimes be
-         difficult to determine the most economical conversion path. For
-         example, converting to the standard FK5 coordinate system as an
-         intermediate stage is often sensible in formulating the problem,
-         but may introduce unnecessary extra conversion steps. A solution
-         to this is to include all the steps which are (logically)
-         necessary, but then to use \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} to simplify the resulting
-         SlaMap. The simplification process will eliminate any steps
-         which turn out not to be needed.
-
-         \sstitem
-         This routine does not check to ensure that the sequence of
-         coordinate conversions added to an SlaMap is physically
-         meaningful.
-      }
-   }
-   \sstdiytopic{
-      SLALIB Conversions
-   }{
-      The following strings (which are case-insensitive) may be supplied
-      via the CVT argument to indicate which celestial coordinate
-      conversion is to be added to the SlaMap. Each string is derived
-      from the name of the SLALIB routine that performs the
-      conversion and the relevant documentation (SUN/67) should be
-      consulted for details.  Where arguments are needed by
-      the conversion, they are listed in parentheses. Values for
-      these arguments should be given, via the ARGS array, in the
-      order indicated. The argument names match the corresponding
-      SLALIB routine arguments and their values should be given using
-      exactly the same units, time scale, calendar, etc. as described
-      in SUN/67:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}ADDET{\tt{"}} (EQ): Add E-terms of aberration.
-
-         \sstitem
-         {\tt{"}}SUBET{\tt{"}} (EQ): Subtract E-terms of aberration.
-
-         \sstitem
-         {\tt{"}}PREBN{\tt{"}} (BEP0,BEP1): Apply Bessel-Newcomb pre-IAU 1976 (FK4)
-         precession model.
-
-         \sstitem
-         {\tt{"}}PREC{\tt{"}} (EP0,EP1): Apply IAU 1975 (FK5) precession model.
-
-         \sstitem
-         {\tt{"}}FK45Z{\tt{"}} (BEPOCH): Convert FK4 to FK5 (no proper motion or parallax).
-
-         \sstitem
-         {\tt{"}}FK54Z{\tt{"}} (BEPOCH): Convert FK5 to FK4 (no proper motion or parallax).
-
-         \sstitem
-         {\tt{"}}AMP{\tt{"}} (DATE,EQ): Convert geocentric apparent to mean place.
-
-         \sstitem
-         {\tt{"}}MAP{\tt{"}} (EQ,DATE): Convert mean place to geocentric apparent.
-
-         \sstitem
-         {\tt{"}}ECLEQ{\tt{"}} (DATE): Convert ecliptic coordinates to FK5 J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQECL{\tt{"}} (DATE): Convert equatorial FK5 J2000.0 to ecliptic coordinates.
-
-         \sstitem
-         {\tt{"}}GALEQ{\tt{"}}: Convert galactic coordinates to FK5 J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQGAL{\tt{"}}: Convert FK5 J2000.0 equatorial to galactic coordinates.
-
-         \sstitem
-         {\tt{"}}HFK5Z{\tt{"}} (JEPOCH): Convert ICRS coordinates to FK5 J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}FK5HZ{\tt{"}} (JEPOCH): Convert FK5 J2000.0 equatorial coordinates to ICRS.
-
-         \sstitem
-         {\tt{"}}GALSUP{\tt{"}}: Convert galactic to supergalactic coordinates.
-
-         \sstitem
-         {\tt{"}}SUPGAL{\tt{"}}: Convert supergalactic coordinates to galactic.
-
-         \sstitem
-         {\tt{"}}J2000H{\tt{"}}: Convert dynamical J2000.0 to ICRS.
-
-         \sstitem
-         {\tt{"}}HJ2000{\tt{"}}: Convert ICRS to dynamical J2000.0.
-
-         \sstitem
-         {\tt{"}}R2H{\tt{"}} (LAST): Convert RA to Hour Angle.
-
-         \sstitem
-         {\tt{"}}H2R{\tt{"}} (LAST): Convert Hour Angle to RA.
-
-      }
-      For example, to use the {\tt{"}}ADDET{\tt{"}} conversion, which takes a single
-      argument EQ, you should consult the documentation for the SLALIB
-      routine SLA\_ADDET. This describes the conversion in detail and
-      shows that EQ is the Besselian epoch of the mean equator and
-      equinox.
-      This value should then be supplied to AST\_SLAADD in ARGS(1).
-
-      In addition the following strings may be supplied for more complex
-      conversions which do not correspond to any one single SLALIB routine
-      (DIURAB is the magnitude of the diurnal aberration vector in units
-      of {\tt{"}}day/(2.PI){\tt{"}}, DATE is the Modified Julian Date of the observation,
-      and (OBSX,OBSY,OBZ) are the Heliocentric-Aries-Ecliptic cartesian
-      coordinates, in metres, of the observer):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}HPCEQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Cartesian coordinates to J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQHPC{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-
-         \sstitem
-         {\tt{"}}HPREQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQHPR{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-
-         \sstitem
-         {\tt{"}}HEEQ{\tt{"}} (DATE): Convert helio-ecliptic coordinates to J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQHE{\tt{"}} (DATE): Convert J2000.0 equatorial coordinates to helio-ecliptic.
-
-         \sstitem
-         {\tt{"}}H2E{\tt{"}} (LAT,DIRUAB): Convert horizon coordinates to equatorial.
-
-         \sstitem
-         {\tt{"}}E2H{\tt{"}} (LAT,DIURAB): Convert equatorial coordinates to horizon.
-
-      }
-      Note, the {\tt{"}}H2E{\tt{"}} and {\tt{"}}E2H{\tt{"}} conversions convert between topocentric
-      horizon coordinates (azimuth,elevation), and apparent local equatorial
-      coordinates (hour angle,declination). Thus, the effects of diurnal
-      aberration are taken into account in the conversions but the effects
-      of atmospheric refraction are not.
-   }
-}
-\sstroutine{
-   AST\_SLAMAP\sstlabel{AST_SLAMAP}
-}{
-   Create an SlaMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SlaMap}{SlaMap} and optionally initialises
-      its attributes.
-
-      An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard celestial
-      (longitude, latitude) coordinate systems.
-
-      When an SlaMap is first created, it simply performs a unit
-      (null) Mapping on a pair of coordinates. Using the \htmlref{AST\_SLAADD}{AST_SLAADD}
-      routine, a series of coordinate conversion steps may then be
-      added, selected from those provided by the SLALIB Positional
-      Astronomy Library (Starlink User Note SUN/67). This allows
-      multi-step conversions between a variety of celestial coordinate
-      systems to be assembled out of the building blocks provided by
-      SLALIB.
-
-      For details of the individual coordinate conversions available,
-      see the description of the AST\_SLAADD routine.
-   }
-   \sstinvocation{
-      RESULT = AST\_SLAMAP( FLAGS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         This argument is reserved for future use and should currently
-         always be set to zero.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SlaMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SLAMAP = INTEGER
-      }{
-         A pointer to the new SlaMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes (number of input and output
-         coordinates) for an SlaMap are both equal to 2. The first
-         coordinate is the celestial longitude and the second coordinate
-         is the celestial latitude. All coordinate values are in radians.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SPECADD\sstlabel{AST_SPECADD}
-}{
-   Add a spectral coordinate conversion to a SpecMap
-}{
-   \sstdescription{
-      This routine adds one of the standard spectral coordinate
-      system conversions listed below to an existing \htmlref{SpecMap}{SpecMap}.
-
-      When a SpecMap is first created (using \htmlref{AST\_SPECMAP}{AST_SPECMAP}), it simply
-      performs a unit (null) \htmlref{Mapping}{Mapping}. By using AST\_SPECADD (repeatedly
-      if necessary), one or more coordinate conversion steps may then
-      be added, which the SpecMap will perform in sequence. This allows
-      multi-step conversions between a variety of spectral coordinate
-      systems to be assembled out of the building blocks provided by
-      this class.
-
-      Normally, if a SpecMap's \htmlref{Invert}{Invert} attribute is zero (the default),
-      then its forward transformation is performed by carrying out
-      each of the individual coordinate conversions specified by
-      AST\_SPECADD in the order given (i.e. with the most recently added
-      conversion applied last).
-
-      This order is reversed if the SpecMap's Invert attribute is
-      non-zero (or if the inverse transformation is requested by any
-      other means) and each individual coordinate conversion is also
-      replaced by its own inverse. This process inverts the overall
-      effect of the SpecMap. In this case, the first conversion to be
-      applied would be the inverse of the one most recently added.
-   }
-   \sstinvocation{
-      CALL AST\_SPECADD( THIS, CVT, ARGS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the SpecMap.
-      }
-      \sstsubsection{
-         CVT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string which identifies the
-         spectral coordinate conversion to be added to the
-         SpecMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
-         those available.
-      }
-      \sstsubsection{
-         ARGS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing argument values for the spectral
-         coordinate conversion. The number of arguments required, and
-         hence the number of array elements used, depends on the
-         conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
-         section). This array is ignored
-         if no arguments are needed.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When assembling a multi-stage conversion, it can sometimes be
-         difficult to determine the most economical conversion path. For
-         example, when converting between reference frames, converting first
-         to the heliographic reference frame as an intermediate stage is often
-         sensible in formulating the problem, but may introduce unnecessary
-         extra conversion steps. A solution to this is to include all the steps
-         which are (logically) necessary, but then to use
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} to simplify the resulting
-         SpecMap. The simplification process will eliminate any steps
-         which turn out not to be needed.
-
-         \sstitem
-         This routine does not check to ensure that the sequence of
-         coordinate conversions added to a SpecMap is physically
-         meaningful.
-      }
-   }
-   \sstdiytopic{
-      Available Conversions
-   }{
-      The following strings (which are case-insensitive) may be supplied
-      via the CVT argument to indicate which spectral coordinate
-      conversion is to be added to the SpecMap. Where arguments are needed by
-      the conversion, they are listed in parentheses. Values for
-      these arguments should be given, via the ARGS array, in the
-      order indicated. Units and argument names are described at the end of
-      the list of conversions.
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}FRTOVL{\tt{"}} (RF): Convert frequency to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOFR{\tt{"}} (RF): Convert relativistic velocity to Frequency.
-
-         \sstitem
-         {\tt{"}}ENTOFR{\tt{"}}: Convert energy to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOEN{\tt{"}}: Convert frequency to energy.
-
-         \sstitem
-         {\tt{"}}WNTOFR{\tt{"}}: Convert wave number to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOWN{\tt{"}}: Convert frequency to wave number.
-
-         \sstitem
-         {\tt{"}}WVTOFR{\tt{"}}: Convert wavelength (vacuum) to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOWV{\tt{"}}: Convert frequency to wavelength (vacuum).
-
-         \sstitem
-         {\tt{"}}AWTOFR{\tt{"}}: Convert wavelength (air) to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOAW{\tt{"}}: Convert frequency to wavelength (air).
-
-         \sstitem
-         {\tt{"}}VRTOVL{\tt{"}}: Convert radio to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOVR{\tt{"}}: Convert relativistic to radio velocity.
-
-         \sstitem
-         {\tt{"}}VOTOVL{\tt{"}}: Convert optical to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOVO{\tt{"}}: Convert relativistic to optical velocity.
-
-         \sstitem
-         {\tt{"}}ZOTOVL{\tt{"}}: Convert redshift to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOZO{\tt{"}}: Convert relativistic velocity to redshift.
-
-         \sstitem
-         {\tt{"}}BTTOVL{\tt{"}}: Convert beta factor to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOBT{\tt{"}}: Convert relativistic velocity to beta factor.
-
-         \sstitem
-         {\tt{"}}USF2HL{\tt{"}} (VOFF,RA,DEC): Convert frequency from a user-defined
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2US{\tt{"}} (VOFF,RA,DEC): Convert frequency from heliocentric
-         reference frame to user-defined.
-
-         \sstitem
-         {\tt{"}}TPF2HL{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
-         topocentric reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2TP{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
-         heliocentric reference frame to topocentric.
-
-         \sstitem
-         {\tt{"}}GEF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from geocentric
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2GE{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
-         heliocentric reference frame to geocentric.
-
-         \sstitem
-         {\tt{"}}BYF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
-         barycentric reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2BY{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
-         heliocentric reference frame to barycentric.
-
-         \sstitem
-         {\tt{"}}LKF2HL{\tt{"}} (RA,DEC): Convert frequency from kinematic LSR
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2LK{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to kinematic LSR.
-
-         \sstitem
-         {\tt{"}}LDF2HL{\tt{"}} (RA,DEC): Convert frequency from dynamical LSR
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2LD{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to dynamical LSR.
-
-         \sstitem
-         {\tt{"}}LGF2HL{\tt{"}} (RA,DEC): Convert frequency from local group
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2LG{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to local group.
-
-         \sstitem
-         {\tt{"}}GLF2HL{\tt{"}} (RA,DEC): Convert frequency from galactic
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2GL{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to galactic.
-
-      }
-      The units for the values processed by the above conversions are as
-      follows:
-
-      \sstitemlist{
-
-         \sstitem
-         all velocities: metres per second (positive if the source receeds from
-           the observer).
-
-         \sstitem
-         frequency: Hertz.
-
-         \sstitem
-         all wavelengths: metres.
-
-         \sstitem
-         energy: Joules.
-
-         \sstitem
-         wave number: cycles per metre.
-
-      }
-      The arguments used in the above conversions are as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         RF: Rest frequency (Hz).
-
-         \sstitem
-         OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-
-         \sstitem
-         OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-
-         \sstitem
-         OBSLON: Longitude of observer (radians - positive eastwards).
-
-         \sstitem
-         EPOCH: \htmlref{Epoch}{Epoch} of observation (UT1 expressed as a Modified Julian Date).
-
-         \sstitem
-         RA: Right Ascension of source (radians, FK5 J2000).
-
-         \sstitem
-         DEC: Declination of source (radians, FK5 J2000).
-
-         \sstitem
-         VOFF: Velocity of the user-defined reference frame, towards the
-         position given by RA and DEC, measured in the heliocentric
-         reference frame.
-
-      }
-      If the SpecMap is 3-dimensional, source positions are provided by the
-      values supplied to inputs 2 and 3 of the SpecMap (which are simply
-      copied to outputs 2 and 3). Note, usable values are still required
-      for the RA and DEC arguments in order to define the {\tt{"}}user-defined{\tt{"}}
-      reference frame used by USF2HL and HLF2US. However, AST\_\_BAD can be
-      supplied for RA and DEC if the user-defined reference frame is not
-      required.
-   }
-}
-\sstroutine{
-   AST\_SPECFLUXFRAME\sstlabel{AST_SPECFLUXFRAME}
-}{
-   Create a SpecFluxFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SpecFluxFrame}{SpecFluxFrame} and optionally initialises
-      its attributes.
-
-      A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
-      2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
-      to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
-      spectral position and the second axis represents flux.
-   }
-   \sstinvocation{
-      RESULT = AST\_SPECFLUXFRAME( FRAME1, FRAME2, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FRAME1 = INTEGER (Given)
-      }{
-         Pointer to the SpecFrame. This will form the first axis in the
-         new SpecFluxFrame.
-      }
-      \sstsubsection{
-         FRAME2 = INTEGER (Given)
-      }{
-         Pointer to the FluxFrame. This will form the second axis in the
-         new SpecFluxFrame. The {\tt{"}}\htmlref{SpecVal}{SpecVal}{\tt{"}} attribute of this FluxFrame is
-         not used by the SpecFluxFrame class and so may be set to AST\_\_BAD
-         when the FluxFrame is created.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SpecFluxFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SPECFLUXFRAME = INTEGER
-      }{
-         A pointer to the new SpecFluxFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The supplied Frame pointers are stored directly, rather than
-         being used to create deep copies of the supplied Frames. This means
-         that any subsequent changes made to the Frames via the supplied
-         pointers will result in equivalent changes being visible in the
-         SpecFluxFrame.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_SPECFRAME\sstlabel{AST_SPECFRAME}
-}{
-   Create a SpecFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SpecFrame}{SpecFrame} and optionally initialises
-      its attributes.
-
-      A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions within
-      an electro-magnetic spectrum. The particular coordinate system to be
-      used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
-      default is wavelength) qualified, as necessary, by other attributes
-      such as the rest frequency, the standard of rest, the epoch of
-      observation, etc (see the description of the System attribute for
-      details).
-
-      By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
-      to represent offsets from a given spectral position, rather than absolute
-   }
-   \sstinvocation{
-      RESULT = AST\_SPECFRAME( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SpecFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SPECFRAME = INTEGER
-      }{
-         A pointer to the new SpecFrame.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         FRAME = AST\_SPECFRAME( ' ', STATUS )
-      }{
-         Creates a SpecFrame to describe the default wavelength spectral
-         coordinate system. The \htmlref{RestFreq}{RestFreq} attribute (rest frequency) is
-         unspecified, so it will not be possible to align this SpecFrame
-         with another SpecFrame on the basis of a velocity-based system. The
-         standard of rest is also unspecified. This means that alignment
-         will be possible with other SpecFrames, but no correction will be
-         made for Doppler shift caused by change of rest frame during the
-         alignment.
-      }
-      \sstexamplesubsection{
-         FRAME = AST\_SPECFRAME( 'System=VELO, RestFreq=1.0E15, \htmlref{StdOfRest}{StdOfRest}=LSRK', STATUS )
-      }{
-         Creates a SpecFrame describing a apparent radial velocity ({\tt{"}}VELO{\tt{"}}) axis
-         with rest frequency 1.0E15 Hz (about 3000 Angstroms), measured
-         in the kinematic Local Standard of Rest ({\tt{"}}LSRK{\tt{"}}). Since the
-         source position has not been specified (using attributes \htmlref{RefRA}{RefRA} and
-         \htmlref{RefDec}{RefDec}), it will only be possible to align this SpecFrame with
-         other SpecFrames which are also measured in the LSRK standard of
-         rest.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When conversion between two SpecFrames is requested (as when
-         supplying SpecFrames \htmlref{AST\_CONVERT}{AST_CONVERT}),
-         account will be taken of the nature of the spectral coordinate systems
-         they represent, together with any qualifying rest frequency, standard
-         of rest, epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}
-         attributes will also be taken into account. The results will therefore
-         fully reflect the relationship between positions measured in the two
-         systems. In addition, any difference in the Unit attributes of the two
-         systems will also be taken into account.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SPECMAP\sstlabel{AST_SPECMAP}
-}{
-   Create a SpecMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SpecMap}{SpecMap} and optionally initialises
-      its attributes.
-
-      An SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard spectral
-      coordinate systems. This includes conversions between frequency,
-      wavelength, and various forms of velocity, as well as conversions
-      between different standards of rest.
-
-      When a SpecMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{AST\_SPECADD}{AST_SPECADD} routine,
-      a series of coordinate conversion steps may then be added, selected
-      from the list of supported conversions. This allows multi-step
-      conversions between a variety of spectral coordinate systems to
-      be assembled out of the building blocks provided by this class.
-
-      For details of the individual coordinate conversions available,
-      see the description of the AST\_SPECADD routine.
-
-      Conversions are available to transform between standards of rest.
-      Such conversions need to know the source position as an RA and DEC.
-      This information can be supplied in the form of parameters for
-      the relevant conversions, in which case the SpecMap is 1-dimensional,
-      simply transforming the spectral axis values. This means that the
-      same source position will always be used by the SpecMap. However, this
-      may not be appropriate for an accurate description of a 3-D spectral
-      cube, where changes of spatial position can produce significant
-      changes in the Doppler shift introduced when transforming between
-      standards of rest. For this situation, a 3-dimensional SpecMap can
-      be created in which axes 2 and 3 correspond to the source RA and DEC
-      The SpecMap simply copies values for axes 2 and 3 from input to
-      output).
-   }
-   \sstinvocation{
-      RESULT = AST\_SPECMAP( NIN, FLAGS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NIN = INTEGER (Given)
-      }{
-         The number of inputs to the Mapping (this will also equal the
-         number of outputs). This value must be either 1 or 3. In either
-         case, the first input and output correspoindis the spectral axis.
-         For a 3-axis SpecMap, the second and third axes give the RA and
-         DEC (J2000 FK5) of the source. This positional information is
-         used by conversions which transform between standards of rest,
-         and replaces the {\tt{"}}RA{\tt{"}} and {\tt{"}}DEC{\tt{"}} arguments for the individual
-         conversions listed in description of the {\tt{"}}SpecAdd{\tt{"}}
-         routine.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         This argument is reserved for future use and should currently
-         always be set to zero.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SpecMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SPECMAP = INTEGER
-      }{
-         A pointer to the new SpecMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The nature and units of the coordinate values supplied for the
-         first input (i.e. the spectral input) of a SpecMap must be appropriate
-         to the first conversion step applied by the SpecMap. For instance, if
-         the first conversion step is {\tt{"}}FRTOVL{\tt{"}} (frequency to relativistic
-         velocity), then the coordinate values for the first input should
-         be frequency in units of Hz. Similarly, the nature and units of the
-         coordinate values returned by a SpecMap will be determined by the
-         last conversion step applied by the SpecMap. For instance, if the
-         last conversion step is {\tt{"}}VLTOVO{\tt{"}} (relativistic velocity to optical
-         velocity), then the coordinate values for the first output will be optical
-         velocity in units of metres per second. See the description of the
-         AST\_SPECADD routine for the units expected and returned by each
-         conversion.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_SPHMAP\sstlabel{AST_SPHMAP}
-}{
-   Create a SphMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SphMap}{SphMap} and optionally initialises
-      its attributes.
-
-      A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
-      3-dimensional Cartesian coordinate system into a 2-dimensional
-      spherical coordinate system (longitude and latitude on a unit
-      sphere centred at the origin). It works by regarding the input
-      coordinates as position vectors and finding their intersection
-      with the sphere surface. The inverse transformation always
-      produces points which are a unit distance from the origin
-      (i.e. unit vectors).
-   }
-   \sstinvocation{
-      RESULT = AST\_SPHMAP( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SphMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SPHMAP = INTEGER
-      }{
-         A pointer to the new SphMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The spherical coordinates are longitude (positive
-         anti-clockwise looking from the positive latitude pole) and
-         latitude. The Cartesian coordinates are right-handed, with the x
-         axis (axis 1) at zero longitude and latitude, and the z axis
-         (axis 3) at the positive latitude pole.
-
-         \sstitem
-         At either pole, the longitude is set to the value of the
-         \htmlref{PolarLong}{PolarLong} attribute.
-
-         \sstitem
-         If the Cartesian coordinates are all zero, then the longitude
-         and latitude are set to the value AST\_\_BAD.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_STCCATALOGENTRYLOCATION\sstlabel{AST_STCCATALOGENTRYLOCATION}
-}{
-   Create a StcCatalogEntryLocation
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} and optionally initialises its
-      attributes.
-
-      The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstinvocation{
-      RESULT = AST\_STCCATALOGENTRYLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         REGION = INTEGER (Given)
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         NCOORDS = INTEGER (Given)
-      }{
-         The length of the COORDS array. Supply zero if COORDS should be
-         ignored.
-      }
-      \sstsubsection{
-         COORDS( NCOORDS ) = INTEGER (Given)
-      }{
-         An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         REGION.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by REGION.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new StcCatalogEntryLocation. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_STCCATALOGENTRYLOCATION = INTEGER
-      }{
-         A pointer to the new StcCatalogEntryLocation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_STCOBSDATALOCATION\sstlabel{AST_STCOBSDATALOCATION}
-}{
-   Create a StcObsDataLocation
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcObsDataLocation}{StcObsDataLocation} and optionally initialises its
-      attributes.
-
-      The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstinvocation{
-      RESULT = AST\_STCOBSDATALOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         REGION = INTEGER (Given)
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         NCOORDS = INTEGER (Given)
-      }{
-         The length of the COORDS array. Supply zero if COORDS should be
-         ignored.
-      }
-      \sstsubsection{
-         COORDS( NCOORDS ) = INTEGER (Given)
-      }{
-         An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         REGION.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by REGION.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new StcObsDataLocation. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_STCOBSDATALOCATION = INTEGER
-      }{
-         A pointer to the new StcObsDataLocation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_STCRESOURCEPROFILE\sstlabel{AST_STCRESOURCEPROFILE}
-}{
-   Create a StcResourceProfile
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcResourceProfile}{StcResourceProfile} and optionally initialises its
-      attributes.
-
-      The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstinvocation{
-      RESULT = AST\_STCRESOURCEPROFILE( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         REGION = INTEGER (Given)
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         NCOORDS = INTEGER (Given)
-      }{
-         The length of the COORDS array. Supply zero if COORDS should be
-         ignored.
-      }
-      \sstsubsection{
-         COORDS( NCOORDS ) = INTEGER (Given)
-      }{
-         An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         REGION.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by REGION.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new StcResourceProfile. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_STCRESOURCEPROFILE = INTEGER
-      }{
-         A pointer to the new StcResourceProfile.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_STCSCHAN\sstlabel{AST_STCSCHAN}
-}{
-   Create an StcsChan
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcsChan}{StcsChan} and optionally initialises
-      its attributes.
-
-      A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
-      I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
-      \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
-      STC-S description of that Object, and reading from an StcsChan will
-      create a new Object from its STC-S description.
-
-      Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
-      by reading and writing the resulting text. These routines
-      should perform any conversions needed between external character
-      encodings and the internal ASCII encoding. If no such routines
-      are supplied, a Channel will read from standard input and write
-      to standard output.
-   }
-   \sstinvocation{
-      RESULT = AST\_STCSCHAN( SOURCE, SINK, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         SOURCE = SUBROUTINE (Given)
-      }{
-         A source routine, which is a subroutine which takes a single
-         integer error status argument.  This routine will be used by
-         the StcsChan to obtain lines of input text. On each
-         invocation, it should read the next input line from some
-         external data store, and then return the resulting text to
-         the AST library by calling \htmlref{AST\_PUTLINE}{AST_PUTLINE}. It should supply a
-         negative line length when there are no more lines to read.
-         If an error occurs, it should set its own error status
-         argument to an error value before returning.
-
-         If the null routine AST\_NULL is suppied as the SOURCE value,
-         the Channel will read from standard input instead.
-      }
-      \sstsubsection{
-         SINK = SUBROUTINE (Given)
-      }{
-         A sink routine, which is a subroutine which takes a single
-         integer error status argument.  This routine will be used by
-         the StcsChan to deliver lines of output text. On each
-         invocation, it should obtain the next output line from the
-         AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE}, and then deliver the
-         resulting text to some external data store.  If an error
-         occurs, it should set its own error status argument to an
-         error value before returning.
-
-         If the null routine AST\_NULL is suppied as the SINK value,
-         the Channel will write to standard output instead.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new StcsChan. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_STCSCHAN = INTEGER
-      }{
-         A pointer to the new StcsChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The names of the routines supplied for the SOURCE and SINK
-         arguments should appear in EXTERNAL statements in the Fortran
-         routine which invokes AST\_STCSCHAN. However, this is not generally
-         necessary for the null routine AST\_NULL (so long as the AST\_PAR
-         include file has been used).
-
-         \sstitem
-         If the external data source or sink uses a character encoding
-         other than ASCII, the supplied source and sink functions should
-         translate between the external character encoding and the internal
-         ASCII encoding used by AST.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-
-         \sstitem
-         Note that the null routine AST\_NULL (one underscore) is
-         different to AST\_\_NULL (two underscores), which is the null Object
-         pointer.
-      }
-   }
-}
-\sstroutine{
-   AST\_STCSEARCHLOCATION\sstlabel{AST_STCSEARCHLOCATION}
-}{
-   Create a StcSearchLocation
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcSearchLocation}{StcSearchLocation} and optionally initialises its
-      attributes.
-
-      The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of a VO query.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstinvocation{
-      RESULT = AST\_STCSEARCHLOCATION( REGION, NCOORDS, COORDS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         REGION = INTEGER (Given)
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         NCOORDS = INTEGER (Given)
-      }{
-         The length of the COORDS array. Supply zero if COORDS should be
-         ignored.
-      }
-      \sstsubsection{
-         COORDS( NCOORDS ) = INTEGER (Given)
-      }{
-         An array holding NCOORDS AstKeyMap pointers (if NCOORDS
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         REGION.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by REGION.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new StcSearchLocation. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_STCSEARCHLOCATION = INTEGER
-      }{
-         A pointer to the new StcSearchLocation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_STRIPESCAPES\sstlabel{AST_STRIPESCAPES}
-}{
-   Remove AST escape sequences from a string
-}{
-   \sstdescription{
-      This function removes AST escape sequences from a supplied string,
-      returning the resulting text as the function value. The behaviour
-      of this function can be controlled by invoking the
-      \htmlref{AST\_ESCAPES}{AST_ESCAPES} routine,
-      which can be used to supress or enable the removal of escape
-      sequences by this function.
-
-      AST escape sequences are used by the \htmlref{Plot}{Plot} class to modify the
-      appearance and position of sub-strings within a plotted text string.
-      See the {\tt{"}}\htmlref{Escape}{Escape}{\tt{"}} attribute for further information.
-   }
-   \sstinvocation{
-      RESULT = AST\_STRIPESCAPES( TEXT )
-   }
-   \sstarguments{
-      \sstsubsection{
-         TEXT
-      }{
-         The string to be checked.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_STRIPESCAPES = CHARACTER
-      }{
-         The modified string. If the AST\_ESCAPES routine
-         has been called indicating that escape sequences should not be
-         stripped, then the supplied string is returned without change.
-      }
-   }
-}
-\sstroutine{
-   AST\_SWITCHMAP\sstlabel{AST_SWITCHMAP}
-}{
-   Create a SwitchMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SwitchMap}{SwitchMap} and optionally initialises
-      its attributes.
-
-      A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
-      Mappings, each of which is used to transform positions within a
-      particular region of the input or output coordinate system of the
-      SwitchMap.
-
-      A SwitchMap can encapsulate any number of Mappings, but they must
-      all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
-      same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
-      inherits these same values for its Nin and Nout attributes. Each of
-      these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
-      referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
-      positions between the input and output coordinate space of the entire
-      SwitchMap, but only one Mapping will be used to transform any given
-      position. The selection of the appropriate route Mapping to use with
-      any given input position is made by another Mapping, called the
-      {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
-      Mappings in addition to its route Mappings; one for use with the
-      SwitchMap's forward transformation (called the {\tt{"}}forward selector
-      Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
-      (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
-      must have the same number of inputs as the route Mappings, but
-      should have only one output. Likewise, the inverse selector Mapping
-      must have the same number of outputs as the route Mappings, but
-      should have only one input.
-
-      When the SwitchMap is used to transform a position in the forward
-      direction (from input to output), each supplied input position is
-      first transformed by the forward transformation of the forward selector
-      Mapping. This produces a single output value for each input position
-      referred to as the selector value. The nearest integer to the selector
-      value is found, and is used to index the array of route Mappings (the
-      first supplied route Mapping has index 1, the second route Mapping has
-      index 2, etc). If the nearest integer to the selector value is less
-      than 1 or greater than the number of route Mappings, then the SwitchMap
-      output position is set to a value of AST\_\_BAD on every axis. Otherwise,
-      the forward transformation of the selected route Mapping is used to
-      transform the supplied input position to produce the SwitchMap output
-      position.
-
-      When the SwitchMap is used to transform a position in the inverse
-      direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
-      is first transformed by the inverse transformation of the inverse
-      selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
-      position. Again, the nearest integer to the selector value is found,
-      and is used to index the array of route Mappings. If this selector
-      index value is within the bounds of the array of route Mappings, then
-      the inverse transformation of the selected route Mapping is used to
-      transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
-      {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
-      of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
-      set to a value of AST\_\_BAD on every axis.
-
-      In practice, appropriate selector Mappings should be chosen to
-      associate a different route Mapping with each region of coordinate
-      space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
-      appropriate for this purpose.
-
-      If a compound Mapping contains a SwitchMap in series with its own
-      inverse, the combination of the two adjacent SwitchMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-   }
-   \sstinvocation{
-      RESULT = AST\_SWITCHMAP( FSMAP, ISMAP, NROUTE, ROUTEMAPS, OPTIONS,
-                              STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FSMAP = INTEGER (Given)
-      }{
-         Pointer to the forward selector Mapping. This must have a
-         defined forward transformation, but need not have a defined
-         inverse transformation. It must have one output, and the number of
-         inputs must match the number of inputs of each of the supplied
-         route Mappings.
-         AST\_\_NULL
-         may be supplied, in which case the SwitchMap will have an undefined
-         forward Mapping.
-      }
-      \sstsubsection{
-         ISMAP = INTEGER (Given)
-      }{
-         Pointer to the inverse selector Mapping. This must have a
-         defined inverse transformation, but need not have a defined
-         forward transformation. It must have one input, and the number of
-         outputs must match the number of outputs of each of the supplied
-         route Mappings.
-         AST\_\_NULL
-         may be supplied, in which case the SwitchMap will have an undefined
-         inverse Mapping.
-      }
-      \sstsubsection{
-         NROUTE = INTEGER (Given)
-      }{
-         The number of supplied route Mappings.
-      }
-      \sstsubsection{
-         ROUTEMAPS( NROUTE ) = INTEGER (Given)
-      }{
-         An array of pointers to the route Mappings. All the supplied
-         route Mappings must have common values for the Nin and Nout
-         attributes, and these values define the number of inputs and
-         outputs of the SwitchMap.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new SwitchMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_SWITCHMAP = INTEGER
-      }{
-         A pointer to the new SwitchMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         AST\_SWITCHMAP (the new SwitchMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a SwitchMap containing a copy of its
-         component Mappings is required, then a copy of the SwitchMap should
-         be made using \htmlref{AST\_COPY}{AST_COPY}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_TEST\sstlabel{AST_TEST}
-}{
-   Test if an Object attribute value is set
-}{
-   \sstdescription{
-      This function returns a logical result to indicate
-      whether a value has been explicitly set for one of an \htmlref{Object}{Object}'s
-      attributes.
-   }
-   \sstinvocation{
-      RESULT = AST\_TEST( THIS, ATTRIB, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         ATTRIB = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the name of the attribute to be
-         tested.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_TEST = LOGICAL
-      }{
-         .TRUE. if a value has previously been explicitly set for the
-         attribute (and hasn't been cleared), otherwise .FALSE..
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         A value of .FALSE. will be returned if this function is invoked
-         with STATUS set to an error value, or if it should fail for any reason.
-
-         \sstitem
-         A value of .FALSE. will also be returned if this function is used
-         to test a read-only attribute, although no error will result.
-      }
-   }
-}
-\sstroutine{
-   AST\_TESTFITS\sstlabel{AST_TESTFITS}
-}{
-   See if a named keyword has a defined value in a FitsChan
-}{
-   \sstdescription{
-      This function serches for a named keyword in a \htmlref{FitsChan}{FitsChan}. If found,
-      and if the keyword has a value associated with it, a
-      .TRUE.
-      value is returned. If the keyword is not found, or if it does not
-      have an associated value, a
-      .FALSE.
-      value is returned.
-   }
-   \sstinvocation{
-      RESULT = AST\_TESTFITS( THIS, NAME, THERE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         THERE = LOGICAL (Returned)
-      }{
-         A value of .TRUE. will be returned if the keyword was found in the
-         header, and .FALSE. otherwise.
-         This parameter allows a distinction to be made between the case
-         where a keyword is not present, and the case where a keyword is
-         present but has no associated value.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_TESTFITS = LOGICAL
-      }{
-         A value of zero
-         .FALSE.
-         is returned if the keyword was not found in the FitsChan or has
-         no associated value. Otherwise, a value of
-         .TRUE.
-         is returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The current card is left unchanged by this function.
-
-         \sstitem
-         The card following the current card is checked first. If this is
-         not the required card, then the rest of the FitsChan is searched,
-         starting with the first card added to the FitsChan. Therefore cards
-         should be accessed in the order they are stored in the FitsChan (if
-         possible) as this will minimise the time spent searching for cards.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-
-         \sstitem
-         .FALSE.
-         is returned as the function value if an error has already occurred,
-         or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_TEXT\sstlabel{AST_TEXT}
-}{
-   Draw a text string for a Plot
-}{
-   \sstdescription{
-      This function draws a string of text at a position specified in
-      the physical coordinate system of a \htmlref{Plot}{Plot}. The physical position
-      is transformed into graphical coordinates to determine where the
-      text should appear within the plotting area.
-   }
-   \sstinvocation{
-      CALL AST\_TEXT( THIS, TEXT, POS, UP, JUST, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         TEXT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the
-         text to be drawn. Trailing white space is ignored.
-      }
-      \sstsubsection{
-         POS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the point where the reference
-         position of the text string is to be placed.
-      }
-      \sstsubsection{
-         UP( $*$ ) = REAL (Given)
-      }{
-         An array holding the components of a vector in the {\tt{"}}up{\tt{"}}
-         direction of the text (in graphical coordinates). For
-         example, to get horizontal text, the vector [0.0,1.0] should
-         be supplied. For a basic Plot, 2 values should be supplied. For
-         a \htmlref{Plot3D}{Plot3D}, 3 values should be supplied, and the actual up vector
-         used is the projection of the supplied up vector onto the text plane
-         specified by the current value of the Plot3D's Norm attribute.
-      }
-      \sstsubsection{
-         JUST = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string identifying the
-         reference point for the text being drawn. The first character in
-         this string identifies the reference position in the {\tt{"}}up{\tt{"}} direction
-         and may be {\tt{"}}B{\tt{"}} (baseline), {\tt{"}}C{\tt{"}} (centre), {\tt{"}}T{\tt{"}} (top) or {\tt{"}}M{\tt{"}} (bottom).
-         The second character identifies the side-to-side reference position
-         and may be {\tt{"}}L{\tt{"}} (left), {\tt{"}}C{\tt{"}} (centre) or {\tt{"}}R{\tt{"}} (right ). The string is
-         case-insensitive, and only the first two characters are significant.
-
-         For example, a value of {\tt{"}}BL{\tt{"}} means that the left end of the
-         baseline of the original (un-rotated) text is to be drawn at the
-         position given by POS.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Plot3D class currently does not interpret graphical escape
-         sequences contained within text displayed using this method.
-
-         \sstitem
-         Text is not drawn at positions which have any coordinate equal
-         to the value AST\_\_BAD (or where the transformation into
-         graphical coordinates yields coordinates containing the value
-         AST\_\_BAD).
-
-         \sstitem
-         If the plotting position is clipped (see \htmlref{AST\_CLIP}{AST_CLIP}), then no
-         text is drawn.
-
-         \sstitem
-         An error results if the base \htmlref{Frame}{Frame} of the Plot is not
-         2-dimensional or (for a Plot3D) 3-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   AST\_TIMEADD\sstlabel{AST_TIMEADD}
-}{
-   Add a time coordinate conversion to a TimeMap
-}{
-   \sstdescription{
-      This routine adds one of the standard time coordinate
-      system conversions listed below to an existing \htmlref{TimeMap}{TimeMap}.
-
-      When a TimeMap is first created (using \htmlref{AST\_TIMEMAP}{AST_TIMEMAP}), it simply
-      performs a unit (null) \htmlref{Mapping}{Mapping}. By using AST\_TIMEADD (repeatedly
-      if necessary), one or more coordinate conversion steps may then
-      be added, which the TimeMap will perform in sequence. This allows
-      multi-step conversions between a variety of time coordinate
-      systems to be assembled out of the building blocks provided by
-      this class.
-
-      Normally, if a TimeMap's \htmlref{Invert}{Invert} attribute is zero (the default),
-      then its forward transformation is performed by carrying out
-      each of the individual coordinate conversions specified by
-      AST\_TIMEADD in the order given (i.e. with the most recently added
-      conversion applied last).
-
-      This order is reversed if the TimeMap's Invert attribute is
-      non-zero (or if the inverse transformation is requested by any
-      other means) and each individual coordinate conversion is also
-      replaced by its own inverse. This process inverts the overall
-      effect of the TimeMap. In this case, the first conversion to be
-      applied would be the inverse of the one most recently added.
-   }
-   \sstinvocation{
-      CALL AST\_TIMEADD( THIS, CVT, ARGS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the TimeMap.
-      }
-      \sstsubsection{
-         CVT = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string which identifies the
-         time coordinate conversion to be added to the
-         TimeMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
-         those available.
-      }
-      \sstsubsection{
-         ARGS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing argument values for the time
-         coordinate conversion. The number of arguments required, and
-         hence the number of array elements used, depends on the
-         conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
-         section). This array is ignored
-         if no arguments are needed.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When assembling a multi-stage conversion, it can sometimes be
-         difficult to determine the most economical conversion path. A solution
-         to this is to include all the steps which are (logically) necessary,
-         but then to use
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} to simplify the resulting
-         TimeMap. The simplification process will eliminate any steps
-         which turn out not to be needed.
-
-         \sstitem
-         This routine does not check to ensure that the sequence of
-         coordinate conversions added to a TimeMap is physically
-         meaningful.
-      }
-   }
-   \sstdiytopic{
-      Available Conversions
-   }{
-      The following strings (which are case-insensitive) may be supplied
-      via the CVT argument to indicate which time coordinate
-      conversion is to be added to the TimeMap. Where arguments are needed by
-      the conversion, they are listed in parentheses. Values for
-      these arguments should be given, via the ARGS array, in the
-      order indicated. Units and argument names are described at the end of
-      the list of conversions, and {\tt{"}}MJD{\tt{"}} means Modified Julian Date.
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}MJDTOMJD{\tt{"}}  (MJDOFF1,MJDOFF2): Convert MJD from one offset to another.
-
-         \sstitem
-         {\tt{"}}MJDTOJD{\tt{"}}  (MJDOFF,JDOFF): Convert MJD to Julian Date.
-
-         \sstitem
-         {\tt{"}}JDTOMJD{\tt{"}}  (JDOFF,MJDOFF): Convert Julian Date to MJD.
-
-         \sstitem
-         {\tt{"}}MJDTOBEP{\tt{"}} (MJDOFF,BEPOFF): Convert MJD to Besselian epoch.
-
-         \sstitem
-         {\tt{"}}BEPTOMJD{\tt{"}} (BEPOFF,MJDOFF): Convert Besselian epoch to MJD.
-
-         \sstitem
-         {\tt{"}}MJDTOJEP{\tt{"}} (MJDOFF,JEPOFF): Convert MJD to Julian epoch.
-
-         \sstitem
-         {\tt{"}}JEPTOMJD{\tt{"}} (JEPOFF,MJDOFF): Convert Julian epoch to MJD.
-
-         \sstitem
-         {\tt{"}}TAITOUTC{\tt{"}} (MJDOFF): Convert a TAI MJD to a UTC MJD.
-
-         \sstitem
-         {\tt{"}}UTCTOTAI{\tt{"}} (MJDOFF): Convert a UTC MJD to a TAI MJD.
-
-         \sstitem
-         {\tt{"}}TAITOTT{\tt{"}}  (MJDOFF): Convert a TAI MJD to a TT MJD.
-
-         \sstitem
-         {\tt{"}}TTTOTAI{\tt{"}}  (MJDOFF): Convert a TT MJD to a TAI MJD.
-
-         \sstitem
-         {\tt{"}}TTTOTDB{\tt{"}}  (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TT MJD to a TDB MJD.
-
-         \sstitem
-         {\tt{"}}TDBTOTT{\tt{"}}  (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TDB MJD to a TT MJD.
-
-         \sstitem
-         {\tt{"}}TTTOTCG{\tt{"}}  (MJDOFF): Convert a TT MJD to a TCG MJD.
-
-         \sstitem
-         {\tt{"}}TCGTOTT{\tt{"}}  (MJDOFF): Convert a TCG MJD to a TT MJD.
-
-         \sstitem
-         {\tt{"}}TDBTOTCB{\tt{"}} (MJDOFF): Convert a TDB MJD to a TCB MJD.
-
-         \sstitem
-         {\tt{"}}TCBTOTDB{\tt{"}} (MJDOFF): Convert a TCB MJD to a TDB MJD.
-
-         \sstitem
-         {\tt{"}}UTTOGMST{\tt{"}} (MJDOFF): Convert a UT MJD to a GMST MJD.
-
-         \sstitem
-         {\tt{"}}GMSTTOUT{\tt{"}} (MJDOFF): Convert a GMST MJD to a UT MJD.
-
-         \sstitem
-         {\tt{"}}GMSTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
-         \sstitem
-         {\tt{"}}LMSTTOGMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
-         \sstitem
-         {\tt{"}}LASTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
-         \sstitem
-         {\tt{"}}LMSTTOLAST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
-         \sstitem
-         {\tt{"}}UTTOUTC{\tt{"}} (DUT1): Convert a UT1 MJD to a UTC MJD.
-
-         \sstitem
-         {\tt{"}}UTCTOUT{\tt{"}} (DUT1): Convert a UTC MJD to a UT1 MJD.
-
-         \sstitem
-         {\tt{"}}LTTOUTC{\tt{"}} (LTOFF): Convert a Local Time MJD to a UTC MJD.
-
-         \sstitem
-         {\tt{"}}UTCTOLT{\tt{"}} (LTOFF): Convert a UTC MJD to a Local Time MJD.
-
-      }
-      The units for the values processed by the above conversions are as
-      follows:
-
-      \sstitemlist{
-
-         \sstitem
-         Julian epochs and offsets: Julian years
-
-         \sstitem
-         Besselian epochs and offsets: Tropical years
-
-         \sstitem
-         Modified Julian Dates and offsets: days
-
-         \sstitem
-         Julian Dates and offsets: days
-
-      }
-      The arguments used in the above conversions are the zero-points
-      used by the
-      AST\_TRANSFORM routine.
-      The axis values supplied and returned by
-      AST\_TRANSFORM
-      are offsets away from these zero-points:
-
-      \sstitemlist{
-
-         \sstitem
-         MJDOFF: The zero-point being used with MJD values.
-
-         \sstitem
-         JDOFF: The zero-point being used with Julian Date values.
-
-         \sstitem
-         BEPOFF: The zero-point being used with Besselian epoch values.
-
-         \sstitem
-         JEPOFF: The zero-point being used with Julian epoch values.
-
-         \sstitem
-         OBSLON: Observer longitude in radians ($+$ve westwards).
-
-         \sstitem
-         OBSLAT: Observer geodetic latitude (IAU 1975) in radians ($+$ve northwards).
-
-         \sstitem
-         OBSALT: Observer geodetic altitude (IAU 1975) in metres.
-
-         \sstitem
-         DUT1: The UT1-UTC value to use.
-
-         \sstitem
-         LTOFF: The offset between Local Time and UTC (in hours, positive
-         for time zones east of Greenwich).
-      }
-   }
-}
-\sstroutine{
-   AST\_TIMEFRAME\sstlabel{AST_TIMEFRAME}
-}{
-   Create a TimeFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{TimeFrame}{TimeFrame} and optionally initialises
-      its attributes.
-
-      A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions in
-      time.
-
-      A TimeFrame represents a moment in time as either an Modified Julian
-      Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-      as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
-      specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
-      representing time offsets from the specified zero point.
-
-      Even though JD and MJD are defined as being in units of days, the
-      TimeFrame class allows other units to be used (via the Unit attribute)
-      on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
-      hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
-      can be described in units other than the usual years. Besselian epoch
-      are always represented in units of (tropical) years.
-
-      The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
-      is, the physical proces used to define the rate of flow of time).
-      MJD, JD and Julian epoch can be used to represent a time in any
-      supported time scale. However, Besselian epoch may only be used with the
-      {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
-      includes universal time and siderial time. Strictly, these represent
-      angles rather than time scales, but are included in the list since
-      they are in common use and are often thought of as time scales.
-
-      When a time value is formatted it can be formated either as a simple
-      floating point value, or as a Gregorian date (see the Format
-      attribute).
-   }
-   \sstinvocation{
-      RESULT = AST\_TIMEFRAME( OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new TimeFrame. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_TIMEFRAME = INTEGER
-      }{
-         A pointer to the new TimeFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When conversion between two TimeFrames is requested (as when
-         supplying TimeFrames \htmlref{AST\_CONVERT}{AST_CONVERT}),
-         account will be taken of the nature of the time coordinate systems
-         they represent, together with any qualifying time scale, offset,
-         unit, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignTimeScale}{AlignTimeScale} attributes will also be
-         taken into account.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_TIMEMAP\sstlabel{AST_TIMEMAP}
-}{
-   Create a TimeMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{TimeMap}{TimeMap} and optionally initialises
-      its attributes.
-
-      A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
-      used to represent a sequence of conversions between standard time
-      coordinate systems.
-
-      When a TimeMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{AST\_TIMEADD}{AST_TIMEADD}
-      routine, a series of coordinate conversion steps may then be
-      added. This allows multi-step conversions between a variety of
-      time coordinate systems to be assembled out of a set of building
-      blocks.
-
-      For details of the individual coordinate conversions available,
-      see the description of the AST\_TIMEADD routine.
-   }
-   \sstinvocation{
-      RESULT = AST\_TIMEMAP( FLAGS, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         This argument is reserved for future use and should currently
-         always be set to zero.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new TimeMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine. If no initialisation is required, a blank
-         value may be supplied.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_TIMEMAP = INTEGER
-      }{
-         A pointer to the new TimeMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The nature and units of the coordinate values supplied for the
-         first input (i.e. the time input) of a TimeMap must be appropriate
-         to the first conversion step applied by the TimeMap. For instance, if
-         the first conversion step is {\tt{"}}MJDTOBEP{\tt{"}} (Modified Julian Date to
-         Besselian epoch) then the coordinate values for the first input should
-         be date in units of days. Similarly, the nature and units of the
-         coordinate values returned by a TimeMap will be determined by the
-         last conversion step applied by the TimeMap.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_TRAN1\sstlabel{AST_TRAN1}
-}{
-   Transform 1-dimensional coordinates
-}{
-   \sstdescription{
-      This routine applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in one dimension.
-   }
-   \sstinvocation{
-      CALL AST\_TRAN1( THIS, NPOINT, XIN, FORWARD, XOUT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         NPOINT = INTEGER (Given)
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         XIN( NPOINT ) = DOUBLE PRECISION (Given)
-      }{
-         An array of coordinate values for the input
-         (untransformed) points.
-      }
-      \sstsubsection{
-         FORWARD = LOGICAL (Given)
-      }{
-         A .TRUE. value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a .FALSE.
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-      }{
-         An array into which the
-         coordinates of the output (transformed) points will be written.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping supplied must have the value 1 for both its \htmlref{Nin}{Nin}
-         and \htmlref{Nout}{Nout} attributes.
-      }
-   }
-}
-\sstroutine{
-   AST\_TRAN2\sstlabel{AST_TRAN2}
-}{
-   Transform 2-dimensional coordinates
-}{
-   \sstdescription{
-      This routine applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in two dimensions.
-   }
-   \sstinvocation{
-      CALL AST\_TRAN2( THIS, NPOINT, XIN, YIN, FORWARD, XOUT, YOUT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         NPOINT = INTEGER (Given)
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         XIN( NPOINT ) = DOUBLE PRECISION (Given)
-      }{
-         An array of X-coordinate values for the input
-         (untransformed) points.
-      }
-      \sstsubsection{
-         YIN( NPOINT ) = DOUBLE PRECISION (Given)
-      }{
-         An array of Y-coordinate values for the input
-         (untransformed) points.
-      }
-      \sstsubsection{
-         FORWARD = LOGICAL (Given)
-      }{
-         A .TRUE. value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a .FALSE.
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         XOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-      }{
-         An array into which the
-         X-coordinates of the output (transformed) points will be written.
-      }
-      \sstsubsection{
-         YOUT( NPOINT ) = DOUBLE PRECISION (Returned)
-      }{
-         An array into which the
-         Y-coordinates of the output (transformed) points will be written.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping supplied must have the value 2 for both its \htmlref{Nin}{Nin}
-         and \htmlref{Nout}{Nout} attributes.
-      }
-   }
-}
-\sstroutine{
-   AST\_TRANGRID\sstlabel{AST_TRANGRID}
-}{
-   Transform a grid of positions
-}{
-   \sstdescription{
-      This function uses the supplied \htmlref{Mapping}{Mapping} to transforms a regular square
-      grid of points covering a specified box. It attempts to do this
-      quickly by first approximating the Mapping with a linear transformation
-      applied over the whole region of the input grid which is being used.
-      If this proves to be insufficiently accurate, the input region is
-      sub-divided into two along its largest dimension and the process is
-      repeated within each of the resulting sub-regions. This process of
-      sub-division continues until a sufficiently good linear approximation
-      is found, or the region to which it is being applied becomes too small
-      (in which case the original Mapping is used directly).
-   }
-   \sstinvocation{
-      CALL AST\_TRANGRID( THIS, NCOORD\_IN, LBND, UBND, TOL, MAXPIX,
-                         FORWARD, NCOORD\_OUT, OUTDIM, OUT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         NCOORD\_IN = INTEGER (Given)
-      }{
-         The number of coordinates being supplied for each box corner
-         (i.e. the number of dimensions of the space in which the
-         input points reside).
-      }
-      \sstsubsection{
-         LBND( NCOORD\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND( NCOORD\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND and UBND together define the shape
-         and size of the input grid, its extent along a particular
-         (J'th) dimension being UBND(J)-LBND(J)$+$1. They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         TOL = DOUBLE PRECISION (Given)
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement within the output coordinate system
-         of the Mapping.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-
-         If the value is too high, discontinuities between the linear
-         approximations used in adjacent panel will be higher. If this
-         is a problem, reduce the tolerance value used.
-      }
-      \sstsubsection{
-         MAXPIX = INTEGER (Given)
-      }{
-         A value which specifies an initial scale size (in input grid points)
-         for the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the input grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire input region.
-
-         If a smaller value is used, the input region will first be
-         divided into sub-regions whose size does not exceed MAXPIX
-         grid points in any dimension. Only at this point will attempts
-         at approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 grid points can also be employed as a safeguard
-         in general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting TOL to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         FORWARD = LOGICAL (Given)
-      }{
-         A .TRUE. value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a .FALSE.
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         NCOORD\_OUT = INTEGER (Given)
-      }{
-         The number of coordinates being generated by the Mapping for
-         each output point (i.e. the number of dimensions of the
-         space in which the output points reside). This need not be
-         the same as NCOORD\_IN.
-      }
-      \sstsubsection{
-         OUTDIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the OUT
-         array (which will contain the output coordinates). The value
-         given should not be less than the number of points in the grid.
-      }
-      \sstsubsection{
-         OUT( OUTDIM, NCOORD\_OUT ) = DOUBLE PRECISION (Returned)
-      }{
-         An array into which the coordinates of the output
-         (transformed) points will be written. These will be stored
-         such that the value of coordinate number COORD for output
-         point number POINT will be found in element OUT(POINT,COORD).
-         The points are ordered such that the first axis of the input
-         grid changes most rapidly. For example, if the input grid is
-         2-dimensional and extends from (2,-1) to (3,1), the output
-         points will be stored in the order (2,-1), (3, -1), (2,0), (3,0),
-         (2,1), (3,1).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the forward coordinate transformation is being applied, the
-         Mapping supplied must have the value of NCOORD\_IN for its \htmlref{Nin}{Nin}
-         attribute and the value of NCOORD\_OUT for its \htmlref{Nout}{Nout} attribute. If
-         the inverse transformation is being applied, these values should
-         be reversed.
-      }
-   }
-}
-\sstroutine{
-   AST\_TRANMAP\sstlabel{AST_TRANMAP}
-}{
-   Create a TranMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{TranMap}{TranMap} and optionally initialises
-      its attributes.
-
-      A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
-      a supplied Mapping with the inverse transformation of another
-      supplied Mapping, ignoring the un-used transformation in each
-      Mapping (indeed the un-used transformation need not exist).
-
-      When the forward transformation of the TranMap is referred to, the
-      transformation actually used is the forward transformation of the
-      first Mapping supplied when the TranMap was constructed. Likewise,
-      when the inverse transformation of the TranMap is referred to, the
-      transformation actually used is the inverse transformation of the
-      second Mapping supplied when the TranMap was constructed.
-   }
-   \sstinvocation{
-      RESULT = AST\_TRANMAP( MAP1, MAP2, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         MAP1 = INTEGER (Given)
-      }{
-         Pointer to the first component Mapping, which defines the
-         forward transformation.
-      }
-      \sstsubsection{
-         MAP2 = INTEGER (Given)
-      }{
-         Pointer to the second component Mapping, which defines the
-         inverse transformation.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new TranMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_TRANMAP = INTEGER
-      }{
-         A pointer to the new TranMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The number of output coordinates generated by the two Mappings
-         (their \htmlref{Nout}{Nout} attribute) must be equal, as must the number of input
-         coordinates accepted by each Mapping (their \htmlref{Nin}{Nin} attribute).
-
-         \sstitem
-         The forward transformation of the first Mapping must exist.
-
-         \sstitem
-         The inverse transformation of the second Mapping must exist.
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         AST\_TRANMAP (the new TranMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a TranMap containing a copy of its
-         component Mappings is required, then a copy of the TranMap should
-         be made using \htmlref{AST\_COPY}{AST_COPY}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_TRANN\sstlabel{AST_TRANN}
-}{
-   Transform N-dimensional coordinates
-}{
-   \sstdescription{
-      This routine applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in an arbitrary number of dimensions. It is the
-      appropriate routine to use if the coordinates are not purely 1-
-      or 2-dimensional and are stored in a single array (which they
-      need not fill completely).
-   }
-   \sstinvocation{
-      CALL AST\_TRANN( THIS, NPOINT,
-                      NCOORD\_IN, INDIM, IN,
-                      FORWARD, NCOORD\_OUT, OUTDIM, OUT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         NPOINT = INTEGER (Given)
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         NCOORD\_IN = INTEGER (Given)
-      }{
-         The number of coordinates being supplied for each input point
-         (i.e. the number of dimensions of the space in which the
-         input points reside).
-      }
-      \sstsubsection{
-         INDIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the IN
-         array (which contains the input coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than NPOINT.
-      }
-      \sstsubsection{
-         IN( INDIM, NCOORD\_IN ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the coordinates of the input
-         (untransformed) points. These should be stored such that the
-         value of coordinate number COORD for input point number POINT
-         is found in element IN(POINT,COORD).
-      }
-      \sstsubsection{
-         FORWARD = LOGICAL (Given)
-      }{
-         A .TRUE. value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a .FALSE.
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         NCOORD\_OUT = INTEGER (Given)
-      }{
-         The number of coordinates being generated by the Mapping for
-         each output point (i.e. the number of dimensions of the
-         space in which the output points reside). This need not be
-         the same as NCOORD\_IN.
-      }
-      \sstsubsection{
-         OUTDIM = INTEGER (Given)
-      }{
-         The number of elements along the first dimension of the OUT
-         array (which will contain the output coordinates). This value
-         is required so that the coordinate values can be correctly
-         located if they will not entirely fill this array. The value
-         given should not be less than NPOINT.
-      }
-      \sstsubsection{
-         OUT( OUTDIM, NCOORD\_OUT ) = DOUBLE PRECISION (Returned)
-      }{
-         An array into which the coordinates of the output
-         (transformed) points will be written. These will be stored
-         such that the value of coordinate number COORD for output
-         point number POINT will be found in element OUT(POINT,COORD).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the forward coordinate transformation is being applied, the
-         Mapping supplied must have the value of NCOORD\_IN for its \htmlref{Nin}{Nin}
-         attribute and the value of NCOORD\_OUT for its \htmlref{Nout}{Nout} attribute. If
-         the inverse transformation is being applied, these values should
-         be reversed.
-      }
-   }
-}
-\sstroutine{
-   AST\_TUNE\sstlabel{AST_TUNE}
-}{
-   Set or get an AST global tuning parameter
-}{
-   \sstdescription{
-      This function returns the current value of an AST global tuning
-      parameter, optionally storing a new value for the parameter.
-   }
-   \sstinvocation{
-      RESULT = AST\_TUNE( NAME, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NAME = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         The name of the tuning parameter (case-insensitive).
-      }
-      \sstsubsection{
-         VALUE = INTEGER (Given)
-      }{
-         The new value for the tuning parameter. If this is AST\_\_TUNULL,
-         the existing current value will be retained.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_TUNE = INTEGER
-      }{
-         be returned if no value has been set for the parameter.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine attempts to execute even if STATUS is set to an
-         error value
-         on entry, although no further error report will be
-         made if it subsequently fails under these circumstances.
-
-         \sstitem
-         All threads in a process share the same AST tuning parameters
-         values.
-      }
-   }
-   \sstdiylist{
-      Tuning Parameters
-   }{
-      \sstsubsection{
-         ObjectCaching
-      }{
-         A boolean flag which indicates what should happen
-         to the memory occupied by an AST \htmlref{Object}{Object} when the Object is deleted
-         (i.e. when its reference count falls to zero or it is deleted using
-         \htmlref{AST\_DELETE}{AST_DELETE}).
-         If this is zero, the memory is simply freed using the systems {\tt{"}}free{\tt{"}}
-         function. If it is non-zero, the memory is not freed. Instead a
-         pointer to it is stored in a pool of such pointers, all of which
-         refer to allocated but currently unused blocks of memory. This allows
-         AST to speed up subsequent Object creation by re-using previously
-         allocated memory blocks rather than allocating new memory using the
-         systems malloc function. The default value for this parameter is
-         zero. Setting it to a non-zero value will result in Object memory
-         being cached in future. Setting it back to zero causes any memory
-         blocks currently in the pool to be freed. Note, this tuning parameter
-         only controls the caching of memory used to store AST Objects. To
-         cache other memory blocks allocated by AST, use MemoryCaching.
-      }
-      \sstsubsection{
-         MemoryCaching
-      }{
-         A boolean flag similar to ObjectCaching except
-         that it controls caching of all memory blocks of less than 300 bytes
-         allocated by AST (whether for internal or external use), not just
-         memory used to store AST Objects.
-      }
-   }
-}
-\sstroutine{
-   AST\_UINTERP\sstlabel{AST_UINTERP}
-}{
-   Perform sub-pixel interpolation on a grid of data
-}{
-   \sstdescription{
-      This is a fictitious routine which does not actually
-      exist. Instead, this description constitutes a template so that
-      you may implement a routine with this interface for yourself
-      (and give it any name you wish). Such a routine
-      may be passed via the FINTERP argument of the \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}
-      functions (q.v.) in order to perform sub-pixel interpolation
-      during resampling of gridded data (you must also set the
-      INTERP argument of AST\_RESAMPLE$<$X$>$ to the value
-      AST\_\_UINTERP). This allows you to use your own interpolation
-      algorithm in addition to those which are pre-defined.
-
-      The routine interpolates an input grid of data (and,
-      optionally, processes associated statistical variance estimates)
-      at a specified set of points.
-   }
-   \sstinvocation{
-      CALL AST\_UINTERP( NDIM\_IN, LBND\_IN, UBND\_IN, IN, IN\_VAR,
-                        NPOINT, OFFSET, COORDS, PARAMS, FLAGS, BADVAL,
-                        OUT, OUT\_VAR, NBAD, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NDIM\_IN = INTEGER (Given)
-      }{
-         The number of dimensions in the input grid. This will be at
-         least one.
-      }
-      \sstsubsection{
-         LBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         UBND\_IN( NDIM\_IN ) = INTEGER (Given)
-      }{
-         An array
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that LBND\_IN and UBND\_IN together define the shape,
-         size and coordinate system of the input grid in the same
-         way as they do in AST\_RESAMPLE$<$X$>$.
-      }
-      \sstsubsection{
-         IN( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An array, with one element for each pixel in the
-         input grid, containing the input data. This will be the same
-         array as was passed to AST\_RESAMPLE$<$X$>$ via the IN argument.
-         The numerical type of this array should match that of the
-         data being processed.
-      }
-      \sstsubsection{
-         IN\_VAR( $*$ ) = $<$Xtype$>$ (Given)
-      }{
-         An optional second array with the same size and type as the
-         IN array. This will only be given if the AST\_\_USEVAR flag is
-         set via the FLAGS argument (below). If given, it will contain
-         the set of variance values associated with the input data and
-         will be the same array as was passed to AST\_RESAMPLE$<$X$>$ via
-         the IN\_VAR argument.
-
-         If the AST\_\_USEVAR flag is not set, then no variance values
-         are being processed. In this case, this array of variance
-         values may be a dummy (e.g. one-element) array and should not
-         be used.
-      }
-      \sstsubsection{
-         NPOINT = INTEGER (Given)
-      }{
-         The number of points at which the input grid is to be
-         interpolated. This will be at least one.
-      }
-      \sstsubsection{
-         OFFSET( NPOINT ) = INTEGER (Given)
-      }{
-         For each interpolation point, this array will contain the
-         offset from the start of the OUT (and OUT\_VAR) array(s) at
-         which the interpolated value (and its variance, if required)
-         should be stored. For example, the interpolated value for
-         point number POINT should be stored in OUT(1$+$OFFSET(POINT)).
-      }
-      \sstsubsection{
-         COORDS( NPOINT, NDIM\_IN ) = DOUBLE PRECISION (Given)
-      }{
-         A 2-dimensional array containing the coordinates of the
-         points at which interpolation should be performed. These will
-         be stored so that coordinate number COORD for interpolation
-         point number POINT is found in element COORDS(POINT,COORD).
-
-         If any interpolation point has any of its coordinates equal
-         to the value AST\_\_BAD (as defined in the AST\_PAR include
-         file), then the corresponding output data (and variance)
-         should either be set to the value given by BADVAL,
-         or left unchanged, depending on whether the AST\_\_NOBAD flag is
-         specified by FLAGS.
-      }
-      \sstsubsection{
-         PARAMS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         This will be the same array as was given via the
-         PARAMS argument of AST\_RESAMPLE$<$X$>$. You may use this to
-         pass any additional parameter values required by your
-         interpolation algorithm.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         This will be the same value as was given via the FLAGS
-         argument of AST\_RESAMPLE$<$X$>$. You may test this value to
-         provide additional control over the operation of your
-         resampling algorithm. Note that the special flag values
-         AST\_\_URESAMP1, 2, 3 \& 4 are reserved for you to use for your
-         own purposes and will not clash with other pre-defined flag
-         values (see AST\_RESAMPLE$<$X$>$).
-      }
-      \sstsubsection{
-         BADVAL = $<$Xtype$>$ (Given)
-      }{
-         This will be the same value as was given for the BADVAL
-         argument of AST\_RESAMPLE$<$X$>$, and will have the same numerical
-         type as the data being processed (i.e. as elements of the IN
-         array).  It should be used to test for bad pixels in the
-         input grid (but only if the AST\_\_USEBAD flag is set via the
-         FLAGS argument) and (unless the AST\_\_NOBAD flag is set in
-         FLAGS) for identifying bad output values in the OUT (and
-         OUT\_VAR) array(s).
-      }
-      \sstsubsection{
-         OUT( $*$ ) = $<$Xtype$>$ (Returned)
-      }{
-         An array with the same numerical type as the IN
-         array, into which the interpolated data values should be
-         returned.  Note that details of the storage order and number
-         of dimensions of this array are not required, since the
-         OFFSET array contains all necessary information about where
-         each returned value should be stored.
-
-         In general, not all elements of this array (or the OUT\_VAR
-         array below) may be used in any particular invocation of the
-         routine. Those which are not used should be returned
-         unchanged.
-      }
-      \sstsubsection{
-         OUT\_VAR( $*$ ) = $<$Xtype$>$ (Returned)
-      }{
-         An optional array with the same type and size as the OUT
-         array, into which variance estimates for the resampled values
-         should be returned. This array will only be given if the
-         AST\_\_USEVAR flag is set via the FLAGS argument.
-
-         If given, it is addressed in exactly the same way (via the
-         OFFSET array) as the OUT array. The values returned should be
-         estimates of the statistical variance of the corresponding
-         values in the OUT array, on the assumption that all errors in
-         input data values are statistically independent and that
-         their variance estimates may simply be summed (with
-         appropriate weighting factors).
-
-         If the AST\_\_USEVAR flag is not set, then variance values are
-         not being processed.  In this case, this array may be a dummy
-         (e.g. one-element) array and should not be used.
-      }
-      \sstsubsection{
-         NBAD = INTEGER (Returned)
-      }{
-         This should return the number of interpolation points at
-         which no valid interpolated value could be obtained.  The maximum
-         value that should be returned is NPOINT, and the minimum is
-         zero (indicating that all output values were successfully
-         obtained).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The data type $<$Xtype$>$ indicates the numerical type of the data
-         being processed, as for AST\_RESAMPLE$<$X$>$.
-
-         \sstitem
-         This routine will typically be invoked more than once for each
-         invocation of AST\_RESAMPLE$<$X$>$.
-
-         \sstitem
-         If an error occurs within this routine, it should set the
-         STATUS argument to an error value before returning. This will
-         cause an immediate return from AST\_RESAMPLE$<$X$>$. The error value
-         AST\_\_UINER is available for this purpose, but other values may also
-         be used (e.g. if you wish to distinguish different types of error).
-         The AST\_\_UINER error value is defined in the AST\_ERR include file.
-      }
-   }
-}
-\sstroutine{
-   AST\_UKERN1\sstlabel{AST_UKERN1}
-}{
-   1-dimensional sub-pixel interpolation kernel
-}{
-   \sstdescription{
-      This is a fictitious routine which does not actually
-      exist. Instead, this description constitutes a template so that
-      you may implement a routine with this interface for yourself
-      (and give it any name you wish). Such a routine
-      may be passed via the FINTERP argument of the \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}
-      functions (q.v.) in order to supply a 1-dimensional
-      interpolation kernel to the algorithm which performs sub-pixel
-      interpolation during resampling of gridded data (you must also
-      set the INTERP argument of AST\_RESAMPLE$<$X$>$ to the value
-      AST\_\_UKERN1). This allows you to use your own interpolation
-      kernel in addition to those which are pre-defined.
-
-      The routine calculates the value of a 1-dimensional sub-pixel
-      interpolation kernel. This determines how the weight given to
-      neighbouring pixels in calculating an interpolated value depends
-      on the pixel's offset from the interpolation point. In more than
-      one dimension, the weight assigned to a pixel is formed by
-      evaluating this 1-dimensional kernel using the offset along each
-      dimension in turn. The product of the returned values is then
-      used as the pixel weight.
-   }
-   \sstinvocation{
-      CALL AST\_UKERN1( OFFSET, PARAMS, FLAGS, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         OFFSET = DOUBLE PRECISION (Given)
-      }{
-         This will be the offset of the pixel from the interpolation
-         point, measured in pixels. This value may be positive or
-         negative, but for most practical interpolation schemes its
-         sign should be ignored.
-      }
-      \sstsubsection{
-         PARAMS( $*$ ) = DOUBLE PRECISION (Given)
-      }{
-         This will be the same array as was given via the
-         PARAMS argument of AST\_RESAMPLE$<$X$>$. You may use this to
-         pass any additional parameter values required by your kernel,
-         but note that PARAMS(1) will already have been used to specify
-         the number of neighbouring pixels which contribute to the
-         interpolated value.
-      }
-      \sstsubsection{
-         FLAGS = INTEGER (Given)
-      }{
-         This will be the same value as was given via the FLAGS
-         argument of AST\_RESAMPLE$<$X$>$. You may test this value to
-         provide additional control over the operation of your
-         routine. Note that the special flag values AST\_\_URESAMP1, 2,
-         3 \& 4 are reserved for you to use for your own purposes and
-         will not clash with other pre-defined flag
-         values (see AST\_RESAMPLE$<$X$>$).
-      }
-      \sstsubsection{
-         VALUE = DOUBLE PRECISION (Returned)
-      }{
-         The calculated kernel value,
-         which may be positive or negative.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Not all functions make good interpolation kernels. In general,
-         acceptable kernels tend to be symmetrical about zero, to have a
-         positive peak (usually unity) at zero, and to evaluate to zero
-         whenever the pixel offset has any other integral value (this
-         ensures that the interpolated values pass through the original
-         data). An interpolation kernel may or may not have regions with
-         negative values. You should consult a good book on image
-         processing for more details.
-
-         \sstitem
-         If an error occurs within this routine, it should set the
-         STATUS argument to an error value before returning. This will
-         cause an immediate return from AST\_RESAMPLE$<$X$>$. The error value
-         AST\_\_UK1ER is available for this purpose, but other values may also
-         be used (e.g. if you wish to distinguish different types of error).
-         The AST\_\_UK1ER error value is defined in the AST\_ERR include file.
-      }
-   }
-}
-\sstroutine{
-   AST\_UNFORMAT\sstlabel{AST_UNFORMAT}
-}{
-   Read a formatted coordinate value for a Frame axis
-}{
-   \sstdescription{
-      This function reads a formatted coordinate value (given as a
-      character string) for a \htmlref{Frame}{Frame} axis and returns the equivalent
-      numerical (double precision) value. It also returns the number
-      of characters read from the string.
-
-      The principle use of this function is in decoding user-supplied
-      input which contains formatted coordinate values. Free-format
-      input is supported as far as possible. If input is ambiguous, it
-      is interpreted with reference to the Frame's attributes (in
-      particular, the Format string associated with the Frame's
-      axis). This function is, in essence, the inverse of \htmlref{AST\_FORMAT}{AST_FORMAT}.
-   }
-   \sstinvocation{
-      RESULT = AST\_UNFORMAT( THIS, AXIS, STRING, VALUE, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         AXIS = INTEGER (Given)
-      }{
-         The number of the Frame axis for which a coordinate value is to
-         be read (axis numbering starts at 1 for the first axis).
-      }
-      \sstsubsection{
-         STRING = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing the formatted coordinate value.
-         This string may contain additional information following the
-         value to be read, in which case reading stops at the first
-         character which cannot be interpreted as part of the value.
-         Any white space before or after the value is discarded.
-      }
-      \sstsubsection{
-         VALUE = DOUBLE PRECISION (Returned)
-      }{
-         The coordinate value read.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames. See the {\tt{"}}Frame Input
-         Format{\tt{"}} section below for details of the input formats
-         accepted by a basic Frame.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the input format to be suitable
-         for representing angles and times, with the resulting
-         coordinate value returned in radians.  See the {\tt{"}}SkyFrame
-         Input Format{\tt{"}} section below for details of the formats
-         accepted.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The input formats accepted by a FrameSet are determined by
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_UNFORMAT = INTEGER
-      }{
-         The number of characters read from the string in order to
-         obtain the coordinate value. This will include any white
-         space which occurs before or after the value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero (and no coordinate value) will be
-         returned, without error, if the string supplied does not contain
-         a suitably formatted value.
-
-         \sstitem
-         Beware that it is possible for a formatting error part-way
-         through an input string to terminate input before it has been
-         completely read, but to yield a coordinate value that appears
-         valid. For example, if a user types {\tt{"}}1.5R6{\tt{"}} instead of {\tt{"}}1.5E6{\tt{"}},
-         the {\tt{"}}R{\tt{"}} will terminate input, giving an incorrect coordinate
-         value of 1.5. It is therefore most important to check the return
-         value of this function to ensure that the correct number of
-         characters have been read.
-
-         \sstitem
-         An error will result if a value is read which appears to have
-         the correct format, but which cannot be converted into a valid
-         coordinate value (for instance, because the value of one or more
-         of its fields is invalid).
-
-         \sstitem
-         The string {\tt{"}}$<$bad$>${\tt{"}} is recognised as a special case and will
-         yield the coordinate value AST\_\_BAD without error. The test for
-         this string is case-insensitive and also permits embedded white
-         space.
-
-         \sstitem
-         A function result of zero will be returned and no coordinate
-         value will be returned via the VALUE argument if this function
-         is invoked with the AST error status set, or if it should fail
-         for any reason.
-      }
-   }
-   \sstdiytopic{
-      Frame Input Format
-   }{
-      The input format accepted for a basic Frame axis is as follows:
-      \sstitemlist{
-
-         \sstitem
-         An optional sign, followed by:
-
-         \sstitem
-         A sequence of one or more digits possibly containing a decimal point,
-         followed by:
-
-         \sstitem
-         An optional exponent field.
-
-         \sstitem
-         The exponent field, if present, consists of {\tt{"}}E{\tt{"}} or {\tt{"}}e{\tt{"}}
-         followed by a possibly signed integer.
-
-      }
-      Examples of acceptable Frame input formats include:
-      \sstitemlist{
-
-         \sstitem
-         99
-
-         \sstitem
-         1.25
-
-         \sstitem
-         -1.6
-
-         \sstitem
-         1E8
-
-         \sstitem
-         -.99e-17
-
-         \sstitem
-         $<$bad$>$
-      }
-   }
-   \sstdiytopic{
-      SkyFrame Input Format
-   }{
-      The input format accepted for a SkyFrame axis is as follows:
-      \sstitemlist{
-
-         \sstitem
-         An optional sign, followed by between one and three fields
-         representing either degrees, arc-minutes, arc-seconds or hours,
-         minutes, seconds (e.g. {\tt{"}}-12 42 03{\tt{"}}).
-
-         \sstitem
-         Each field should consist of a sequence of one or more digits,
-         which may include leading zeros. At most one field may contain a
-         decimal point, in which case it is taken to be the final field
-         (e.g. decimal degrees might be given as {\tt{"}}124.707{\tt{"}}, while degrees
-         and decimal arc-minutes might be given as {\tt{"}}-13 33.8{\tt{"}}).
-
-         \sstitem
-         The first field given may take any value, allowing angles and
-         times outside the conventional ranges to be
-         represented. However, subsequent fields must have values of less
-         than 60 (e.g. {\tt{"}}720 45 31{\tt{"}} is valid, whereas {\tt{"}}11 45 61{\tt{"}} is not).
-
-         \sstitem
-         Fields may be separated by white space or by {\tt{"}}:{\tt{"}} (colon), but
-         the choice of separator must be used consistently throughout the
-         value. Additional white space may be present around fields and
-         separators (e.g. {\tt{"}}- 2: 04 : 7.1{\tt{"}}).
-
-         \sstitem
-         The following field identification characters may be used as
-         separators to replace either of those above (or may be appended
-         to the final field), in order to identify the field to which
-         they are appended: {\tt{"}}d{\tt{"}}---degrees; {\tt{"}}h{\tt{"}}---hours; {\tt{"}}m{\tt{"}}---minutes of
-         arc or time; {\tt{"}}s{\tt{"}}---seconds of arc or time; {\tt{"}}'{\tt{"}} (single
-         quote)---minutes of arc; {\tt{"}}{\tt{"}}{\tt{"}} (double quote)---seconds of arc.
-         Either lower or upper case may be used.  Fields must be given in
-         order of decreasing significance (e.g. {\tt{"}}-11D 3' 14.4{\tt{"}}{\tt{"}} or
-         {\tt{"}}22h14m11.2s{\tt{"}}).
-
-         \sstitem
-         The presence of any of the field identification characters
-         {\tt{"}}d{\tt{"}}, {\tt{"}}'{\tt{"}} (single quote) or {\tt{"}}{\tt{"}}{\tt{"}} (double quote) indicates that the
-         value is to be interpreted as an angle. Conversely, the presence
-         of {\tt{"}}h{\tt{"}} indicates that it is to be interpreted as a time (with 24
-         hours corresponding to 360 degrees). Incompatible angle/time
-         identification characters may not be mixed (e.g. {\tt{"}}10h14'3{\tt{"}}{\tt{"}} is
-         not valid).  The remaining field identification characters and
-         separators do not specify a preference for an angle or a time
-         and may be used with either.
-
-         \sstitem
-         If no preference for an angle or a time is expressed anywhere
-         within the value, it is interpreted as an angle if the Format
-         attribute string associated with the SkyFrame axis generates an
-         angle and as a time otherwise. This ensures that values produced
-         by AST\_FORMAT are correctly interpreted by AST\_UNFORMAT.
-
-         \sstitem
-         Fields may be omitted, in which case they default to zero. The
-         remaining fields may be identified by using appropriate field
-         identification characters (see above) and/or by adding extra
-         colon separators (e.g. {\tt{"}}-05m13s{\tt{"}} is equivalent to {\tt{"}}-:05:13{\tt{"}}). If
-         a field is not identified explicitly, it is assumed that
-         adjacent fields have been given, after taking account of any
-         extra separator characters (e.g. {\tt{"}}14:25.4s{\tt{"}} specifies minutes
-         and seconds, while {\tt{"}}14::25.4s{\tt{"}} specifies degrees and seconds).
-
-         \sstitem
-         If fields are omitted in such a way that the remaining ones
-         cannot be identified uniquely (e.g. {\tt{"}}01:02{\tt{"}}), then the first
-         field (either given explicitly or implied by an extra leading
-         colon separator) is taken to be the most significant field that
-         AST\_FORMAT would produce when formatting a value (using the
-         Format attribute associated with the SkyFrame axis).  By
-         default, this means that the first field will normally be
-         interpreted as degrees or hours. However, if this does not
-         result in consistent field identification, then the last field
-         (either given explicitly or implied by an extra trailing colon
-         separator) is taken to to be the least significant field that
-         AST\_FORMAT would produce.
-
-      }
-      This final convention is intended to ensure that values formatted
-      by AST\_FORMAT which contain less than three fields will be
-      correctly interpreted if read back using AST\_UNFORMAT, even if
-      they do not contain field identification characters.
-
-      Examples of acceptable SkyFrame input formats (with
-      interpretation in parentheses) include:
-      \sstitemlist{
-
-         \sstitem
-         -14d 13m 22.2s (-14d 13' 22.2{\tt{"}})
-
-         \sstitem
-         $+$ 12:34:56.7 (12d 34' 56.7{\tt{"}} or 12h 34m 56.7s)
-
-         \sstitem
-         001 : 02 : 03.4 (1d 02' 03.4{\tt{"}} or 1h 02m 03.4s)
-
-         \sstitem
-         22h 30 (22h 30m 00s)
-
-         \sstitem
-         136::10{\tt{"}} (136d 00' 10{\tt{"}} or 136h 00m 10s)
-
-         \sstitem
-         -14M 27S (-0d 14' 27{\tt{"}} or -0h 14m 27s)
-
-         \sstitem
-         -:14: (-0d 14' 00{\tt{"}} or -0h 14m 00s)
-
-         \sstitem
-         -::4.1 (-0d 00' 04.1{\tt{"}} or -0h 00m 04.1s)
-
-         \sstitem
-         .9{\tt{"}} (0d 00' 00.9{\tt{"}})
-
-         \sstitem
-         d12m (0d 12' 00{\tt{"}})
-
-         \sstitem
-         H 12:22.3s (0h 12m 22.3s)
-
-         \sstitem
-         $<$bad$>$ (AST\_\_BAD)
-
-      }
-      Where alternative interpretations are shown, the choice of angle or
-      time depends on the associated \htmlref{Format(axis)}{Formataxis} attribute.
-   }
-}
-\sstroutine{
-   AST\_UNITMAP\sstlabel{AST_UNITMAP}
-}{
-   Create a UnitMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{UnitMap}{UnitMap} and optionally initialises
-      its attributes.
-
-      A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
-      coordinates supplied to it. They are simply copied. This can be
-      useful if a Mapping is required (e.g. to pass to another
-      routine) but you do not want it to have any effect.
-   }
-   \sstinvocation{
-      RESULT = AST\_UNITMAP( NCOORD, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of input and output coordinates (these numbers are
-         necessarily the same).
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new UnitMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_UNITMAP = INTEGER
-      }{
-         A pointer to the new UnitMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_VERSION\sstlabel{AST_VERSION}
-}{
-   Return the version of the AST library being used
-}{
-   \sstdescription{
-      This function
-      returns an integer representing the version of the AST library
-      being used. The library version is formatted as a string such as
-      {\tt{"}}2.0-7{\tt{"}} which contains integers representing the {\tt{"}}major version{\tt{"}} (2),
-      the {\tt{"}}minor version{\tt{"}} (0) and the {\tt{"}}release{\tt{"}} (7). The integer returned
-      by this function combines all three integers together into a single
-      integer using the expresion:
-
-      (major version)$*$1E6 $+$ (minor version)$*$1E3 $+$ (release)
-   }
-   \sstinvocation{
-      RESULT = AST\_VERSION()
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Object}{Object}
-      }{
-         This routine applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_VERSION = INTEGER
-      }{
-         The major version, minor version and release numbers for the AST
-         library, encoded as a single integer.
-      }
-   }
-}
-\sstroutine{
-   AST\_WARNINGS\sstlabel{AST_WARNINGS}
-}{
-   Returns any warnings issued by the previous read or write operation
-}{
-   \sstdescription{
-      This function returns an AST \htmlref{KeyMap}{KeyMap} object holding the text of any
-      warnings issued as a result of the previous invocation of the
-      \htmlref{AST\_READ}{AST_READ} or \htmlref{AST\_WRITE}{AST_WRITE}
-      function on the \htmlref{Channel}{Channel}. If no warnings were issued, a
-      AST\_\_NULL
-      will be returned.
-
-      Such warnings are non-fatal and will not prevent the
-      read or write operation succeeding. However, the converted object
-      may not be identical to the original object in all respects.
-      Differences which would usually be deemed as insignificant in most
-      usual cases will generate a warning, whereas more significant
-      differences will generate an error.
-
-      The {\tt{"}}\htmlref{Strict}{Strict}{\tt{"}} attribute allows this warning facility to be switched
-      off, so that a fatal error is always reported for any conversion
-      error.
-   }
-   \sstinvocation{
-      RESULT = AST\_WARNINGS( THIS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Channel.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         The basic Channel class generates a warning when ever an
-         un-recognised item is encountered whilst reading an \htmlref{Object}{Object} from
-         an external data source. If Strict is zero (the default), then
-         unexpected items in the Object description are simply ignored,
-         and any remaining items are used to construct the returned
-         Object. If Strict is non-zero, an error will be reported and a
-         NULL Object pointer returned if any unexpected items are
-         encountered.
-
-         As AST continues to be developed, new attributes are added
-         occasionally to selected classes. If an older version of AST is
-         used to read external Object descriptions created by a more
-         recent version of AST, then the Channel class will, by default,
-         ignore the new attributes, using the remaining attributes to
-         construct the Object. This is usually a good thing. However,
-         since external Object descriptions are often stored in plain
-         text, it is possible to edit them using a text editor. This
-         gives rise to the possibility of genuine errors in the
-         description due to finger-slips, typos, or simple
-         mis-understanding. Such inappropriate attributes will be ignored
-         if Strict is left at its default zero value. This will cause the
-         mis-spelled attribute to revert to its default value,
-         potentially causing subtle changes in the behaviour of
-         application software. If such an effect is suspected, the Strict
-         attribute can be set non-zero, resulting in the erroneous
-         attribute being identified in an error message.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The returned KeyMap will contain warnings for all conditions
-         listed in the \htmlref{Warnings}{Warnings} attribute.
-      }
-      \sstsubsection{
-         \htmlref{XmlChan}{XmlChan}
-      }{
-         Reports conversion errors that result in what are usally
-         insignificant  changes.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_WARNINGS = INTEGER
-      }{
-         A pointer to the KeyMap holding the warning messages, or
-         AST\_\_NULL
-         if no warnings were issued during the previous read operation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned KeyMap uses keys of the form {\tt{"}}Warning\_1{\tt{"}},
-         {\tt{"}}Warning\_2{\tt{"}}, etc.
-
-         \sstitem
-         A value of
-         AST\_\_NULL will be returned if this function is invoked with STATUS
-         set to an error value,
-         or if it should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   AST\_WCSMAP\sstlabel{AST_WCSMAP}
-}{
-   Create a WcsMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{WcsMap}{WcsMap} and optionally initialises its
-      attributes.
-
-      A WcsMap is used to represent sky coordinate projections as
-      described in the (draft) FITS world coordinate system (FITS-WCS)
-      paper by E.W. Griesen and M. Calabretta (A \& A, in preparation).
-      This paper defines a set of functions, or sky projections, which
-      transform longitude-latitude pairs representing spherical
-      celestial coordinates into corresponding pairs of Cartesian
-      coordinates (and vice versa).
-
-      A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
-      sky projections and applies them to a specified pair of coordinates.
-      All the projections in the FITS-WCS paper are supported, plus the now
-      deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
-      is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
-      the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
-      plane{\tt{"}} coordinates.  These coordinates may, optionally, be embedded in
-      a space with more than two dimensions, the remaining coordinates being
-      copied unchanged. Note, however, that for consistency with other AST
-      facilities, a WcsMap handles coordinates that represent angles
-      in radians (rather than the degrees used by FITS-WCS).
-
-      The type of FITS-WCS projection to be used and the coordinates
-      (axes) to which it applies are specified when a WcsMap is first
-      created. The projection type may subsequently be determined
-      using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
-      may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
-      Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
-      associated with each axis. These specify the precise form of the
-      projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
-      the integer axis index (starting at 1), and m is an integer
-      {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
-      parameters required by each projection, and their meanings, are
-      dependent upon the projection type (most projections either do not
-      use any projection parameters, or use parameters 1 and 2 associated
-      with the latitude axis). Before creating a WcsMap you should consult
-      the FITS-WCS paper for details of which projection parameters are
-      required, and which have defaults. When creating the WcsMap, you must
-      explicitly set values for all those required projection parameters
-      which do not have defaults defined in this paper.
-   }
-   \sstinvocation{
-      RESULT = AST\_WCSMAP( NCOORD, TYPE, LONAX, LATAX, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). This must be at least 2. The
-         same number is applicable to both input and output points.
-      }
-      \sstsubsection{
-         TYPE = INTEGER (Given)
-      }{
-         The type of FITS-WCS projection to apply. This should be
-         given as a symbolic value such as AST\_\_TAN (for a tangent
-         plane projection), where the characters following the double
-         underscore give the projection type code (in upper case) as
-         used in the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword. You should consult the
-         FITS-WCS paper for a list of the available projections. The
-         additional code of AST\_\_TPN can be supplied which represents a
-         TAN projection with polynomial correction terms as defined in an
-         early draft of the FITS-WCS paper.
-      }
-      \sstsubsection{
-         LONAX = INTEGER (Given)
-      }{
-         The index of the longitude axis. This should lie in the range
-         1 to NCOORD.
-      }
-      \sstsubsection{
-         LATAX = INTEGER (Given)
-      }{
-         The index of the latitude axis. This should lie in the range
-         1 to NCOORD and be distinct from LONAX.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new WcsMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-
-         If the sky projection to be implemented requires projection
-         parameter values to be set, then this should normally be done
-         here via the PVi\_m attribute (see the {\tt{"}}Examples{\tt{"}}
-         section). Setting values for these parameters is mandatory if
-         they do not have default values (as defined in the FITS-WCS
-         paper).
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_WCSMAP = INTEGER
-      }{
-         A pointer to the new WcsMap.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         WCSMAP = AST\_WCSMAP( 2, AST\_\_MER, 1, 2, ' ', STATUS )
-      }{
-         Creates a WcsMap that implements a FITS-WCS Mercator
-         projection on pairs of coordinates, with coordinates 1 and 2
-         representing the longitude and latitude respectively. Note
-         that the FITS-WCS Mercator projection does not require any
-         projection parameters.
-      }
-      \sstexamplesubsection{
-         WCSMAP = AST\_WCSMAP( 3, AST\_\_COE, 2, 3, 'PV3\_1=40.0', STATUS )
-      }{
-         Creates a WcsMap that implements a FITS-WCS conical equal
-         area projection. The WcsMap acts on points in a 3-dimensional
-         space; coordinates 2 and 3 represent longitude and latitude
-         respectively, while the values of coordinate 1 are copied
-         unchanged.  \htmlref{Projection}{Projection} parameter 1 associatyed with the latitude
-         axis (corresponding to FITS keyword {\tt{"}}PV3\_1{\tt{"}}) is required and has
-         no default, so is set explicitly to 40.0 degrees. Projection
-         parameter 2 (corresponding to FITS keyword {\tt{"}}PV3\_2{\tt{"}}) is required
-         but has a default of zero, so need not be specified.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The forward transformation of a WcsMap converts between
-         FITS-WCS {\tt{"}}native spherical{\tt{"}} and {\tt{"}}relative physical{\tt{"}} coordinates,
-         while the inverse transformation converts in the opposite
-         direction. This arrangement may be reversed, if required, by
-         using \htmlref{AST\_INVERT}{AST_INVERT} or by setting the \htmlref{Invert}{Invert} attribute to a non-zero
-         value.
-
-         \sstitem
-         If any set of coordinates cannot be transformed (for example,
-         many projections do not cover the entire celestial sphere), then
-         a WcsMap will yield coordinate values of AST\_\_BAD.
-
-         \sstitem
-         The validity of any projection parameters given via the PVi\_m
-         parameter in the OPTIONS string is not checked by this
-         function. However, their validity is checked when the resulting
-         WcsMap is used to transform coordinates, and an error will
-         result if the projection parameters do not satisfy all the
-         required constraints (as defined in the FITS-WCS paper).
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_WINMAP\sstlabel{AST_WINMAP}
-}{
-   Create a WinMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{WinMap}{WinMap} and optionally initialises its
-      attributes.
-
-      A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
-      window in one coordinate system into a similar window in another
-      coordinate system by scaling and shifting each axis (the window
-      edges being parallel to the coordinate axes).
-
-      A WinMap is specified by giving the coordinates of two opposite
-      corners (A and B) of the window in both the input and output
-      coordinate systems.
-   }
-   \sstinvocation{
-      RESULT = AST\_WINMAP( NCOORD, INA, INB, OUTA, OUTB, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). The same number is applicable
-         to both input and output points.
-      }
-      \sstsubsection{
-         INA( NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the
-         coordinates of corner A of the window in the input coordinate
-         system.
-      }
-      \sstsubsection{
-         INB( NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the
-         coordinates of corner B of the window in the input coordinate
-         system.
-      }
-      \sstsubsection{
-         OUTA( NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the
-         coordinates of corner A of the window in the output coordinate
-         system.
-      }
-      \sstsubsection{
-         OUTB( NCOORD ) = DOUBLE PRECISION (Given)
-      }{
-         An array containing the
-         coordinates of corner B of the window in the output coordinate
-         system.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new WinMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_WINMAP = INTEGER
-      }{
-         A pointer to the new WinMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   AST\_WRITE\sstlabel{AST_WRITE}
-}{
-   Write an Object to a Channel
-}{
-   \sstdescription{
-      This function writes an \htmlref{Object}{Object} to a \htmlref{Channel}{Channel}, appending it to any
-      previous Objects written to that Channel.
-   }
-   \sstinvocation{
-      RESULT = AST\_WRITE( THIS, OBJECT, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         THIS = INTEGER (Given)
-      }{
-         Pointer to the Channel.
-      }
-      \sstsubsection{
-         OBJECT = INTEGER (Given)
-      }{
-         Pointer to the Object which is to be written.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_WRITE = INTEGER
-      }{
-         The number of Objects written to the Channel by this
-         invocation of AST\_WRITE (normally, this will be one).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with STATUS set to an error value, or if it should fail for any
-         reason.
-
-         \sstitem
-         Invoking this function will usually cause the sink function
-         associated with the channel to be called in order to transfer a
-         textual description of the supplied object to some external data
-         store. However, the \htmlref{FitsChan}{FitsChan} class behaves differently. Invoking
-         this function on a FitsChan causes new FITS header cards to be
-         added to an internal buffer (the sink function is not invoked).
-         This buffer is written out through the sink function only when the
-         FitsChan is deleted.
-      }
-   }
-}
-\sstroutine{
-   AST\_XMLCHAN\sstlabel{AST_XMLCHAN}
-}{
-   Create an XmlChan
-}{
-   \sstdescription{
-      This function creates a new \htmlref{XmlChan}{XmlChan} and optionally initialises
-      its attributes.
-
-      A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
-      operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
-      \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
-      XML description of that Object, and reading from an XmlChan will
-      create a new Object from its XML description.
-
-      Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
-      by reading and writing the resulting XML text. By default, however,
-      a Channel will read from standard input and write to standard
-      output.
-   }
-   \sstinvocation{
-      RESULT = AST\_XMLCHAN( SOURCE, SINK, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         SOURCE = SUBROUTINE (Given)
-      }{
-         A source routine, which is a subroutine which takes a single
-         integer error status argument.  This routine will be used by
-         the XmlChan to obtain lines of input text. On each
-         invocation, it should read the next input line from some
-         external XML data store, and then return the resulting text to
-         the AST library by calling \htmlref{AST\_PUTLINE}{AST_PUTLINE}. It should supply a
-         negative line length when there are no more lines to read.
-         If an error occurs, it should set its own error status
-         argument to an error value before returning.
-
-         If the null routine AST\_NULL is suppied as the SOURCE value,
-         the Channel will read from standard input instead.
-      }
-      \sstsubsection{
-         SINK = SUBROUTINE (Given)
-      }{
-         A sink routine, which is a subroutine which takes a single
-         integer error status argument.  This routine will be used by
-         the XmlChan to deliver lines of output text. On each
-         invocation, it should obtain the next output line from the
-         AST library by calling \htmlref{AST\_GETLINE}{AST_GETLINE}, and then deliver the
-         resulting text to some external XML data store.  If an error
-         occurs, it should set its own error status argument to an
-         error value before returning.
-
-         If the null routine AST\_NULL is suppied as the SINK value,
-         the Channel will write to standard output instead.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new XmlChan. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_XMLCHAN = INTEGER
-      }{
-         A pointer to the new XmlChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The names of the routines supplied for the SOURCE and SINK
-         arguments should appear in EXTERNAL statements in the Fortran
-         routine which invokes AST\_XMLCHAN. However, this is not generally
-         necessary for the null routine AST\_NULL (so long as the AST\_PAR
-         include file has been used).
-
-         \sstitem
-         If the external data source or sink uses a character encoding
-         other than ASCII, the supplied source and sink functions should
-         translate between the external character encoding and the internal
-         ASCII encoding used by AST.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-
-         \sstitem
-         Note that the null routine AST\_NULL (one underscore) is
-         different to AST\_\_NULL (two underscores), which is the null Object
-         pointer.
-      }
-   }
-}
-\sstroutine{
-   AST\_ZOOMMAP\sstlabel{AST_ZOOMMAP}
-}{
-   Create a ZoomMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{ZoomMap}{ZoomMap} and optionally initialises its
-      attributes.
-
-      A ZoomMap is a \htmlref{Mapping}{Mapping} which {\tt{"}}zooms{\tt{"}} a set of points about the
-      origin by multiplying all coordinate values by the same scale
-      factor (the inverse transformation is performed by dividing by
-      this scale factor).
-   }
-   \sstinvocation{
-      RESULT = AST\_ZOOMMAP( NCOORD, ZOOM, OPTIONS, STATUS )
-   }
-   \sstarguments{
-      \sstsubsection{
-         NCOORD = INTEGER (Given)
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). The same number is applicable
-         to both input and output points.
-      }
-      \sstsubsection{
-         ZOOM = DOUBLE PRECISION (Given)
-      }{
-         Initial scale factor by which coordinate values should be
-         multiplied (by the forward transformation) or divided (by the
-         inverse transformation). This factor may subsequently be
-         changed via the ZoomMap's \htmlref{Zoom}{Zoom} attribute. It may be positive
-         or negative, but should not be zero.
-      }
-      \sstsubsection{
-         OPTIONS = CHARACTER $*$ ( $*$ ) (Given)
-      }{
-         A character string containing an optional comma-separated
-         list of attribute assignments to be used for initialising the
-         new ZoomMap. The syntax used is identical to that for the
-         \htmlref{AST\_SET}{AST_SET} routine.
-      }
-      \sstsubsection{
-         STATUS = INTEGER (Given and Returned)
-      }{
-         The global status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         AST\_ZOOMMAP = INTEGER
-      }{
-         A pointer to the new ZoomMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with STATUS set to an error value, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:attributedescriptions}AST Attribute Descriptions}
-\small
-\sstroutine{
-   Abbrev(axis)\sstlabel{Abbrevaxis}
-}{
-   Abbreviate leading fields within numerical axis labels?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether matching leading fields should be removed from adjacent
-      numerical axis labels. It takes a separate value for each physical
-      axis of a \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}Abbrev(2)=0{\tt{"}}
-      specifies that matching leading fields should not be removed on
-      the second axis.
-
-      If the Abbrev value of a Plot is non-zero (the default), then
-      leading fields will be removed from adjacent axis labels if they
-      are equal.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}Abbrev{\tt{"}} instead of
-         {\tt{"}}Abbrev(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the Abbrev(1) value.
-      }
-   }
-}
-\sstroutine{
-   Adaptive\sstlabel{Adaptive}
-}{
-   Should the area adapt to changes in the coordinate system?
-}{
-   \sstdescription{
-      The coordinate system represented by a \htmlref{Region}{Region} may be changed by
-      assigning new values to attributes such as \htmlref{System}{System}, Unit, etc.
-      For instance, a Region representing an area on the sky in ICRS
-      coordinates may have its System attribute changed so that it
-      represents (say) Galactic coordinates instead of ICRS. This
-      attribute controls what happens when the coordinate system
-      represented by a Region is changed in this way.
-
-      If Adaptive is non-zero (the default), then area represented by the
-      Region adapts to the new coordinate system. That is, the numerical
-      values which define the area represented by the Region are changed
-      by mapping them from the old coordinate system into the new coordinate
-      system. Thus the Region continues to represent the same physical
-      area.
-
-      If Adaptive is zero, then area represented by the Region does not adapt
-      to the new coordinate system. That is, the numerical values which
-      define the area represented by the Region are left unchanged. Thus
-      the physical area represented by the Region will usually change.
-
-      As an example, consider a Region describe a range of wavelength from
-      2000 Angstrom to 4000 Angstrom. If the Unit attribute for the Region
-      is changed from Angstrom to {\tt{"}}nm{\tt{"}} (nanometre), what happens depends
-      on the setting of Adaptive. If Adaptive is non-zero, the \htmlref{Mapping}{Mapping}
-      from the old to the new coordinate system is found. In this case it
-      is a simple scaling by a factor of 0.1 (since 1 Angstrom is 0.1 nm).
-      This Mapping is then used to modify the numerical values within the
-      Region, changing 2000 to 200 and 4000 to 400. Thus the modified
-      region represents 200 nm to 400 nm, the same physical space as
-      the original 2000 Angstrom to 4000 Angstrom. However, if Adaptive
-      had been zero, then the numerical values would not have been changed,
-      resulting in the final Region representing 2000 nm to 4000 nm.
-
-      Setting Adaptive to zero can be necessary if you want correct
-      inaccurate attribute settings in an existing Region. For instance,
-      when creating a Region you may not know what \htmlref{Epoch}{Epoch} value to use, so
-      you would leave Epoch unset resulting in some default value being used.
-      If at some later point in the application, the correct Epoch value
-      is determined, you could assign the correct value to the Epoch
-      attribute. However, you would first need to set Adaptive temporarily
-      to zero, because otherwise the area represented by the Region would
-      be Mapped from the spurious default Epoch to the new correct Epoch,
-      which is not what is required.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignOffset\sstlabel{AlignOffset}
-}{
-   Align SkyFrames using the offset coordinate system?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{SkyFrame}{SkyFrame}
-      behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
-      SkyFrame. It determines the coordinate system in which the two
-      SkyFrames are aligned if a match occurs.
-
-      If the template and target SkyFrames both have defined offset coordinate
-      systems (i.e. the \htmlref{SkyRefIs}{SkyRefIs} attribute is set to either {\tt{"}}Origin{\tt{"}} or {\tt{"}}
-      Pole{\tt{"}}), and they both have a non-zero value for AlignOffset, then
-      alignment occurs within the offset coordinate systems (that is, a
-      \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames). If either
-      the template or target SkyFrame has zero (the default value) for
-      AlignOffset, or if either SkyFrame has SkyRefIs set to {\tt{"}}Ignored{\tt{"}}, then
-      alignment occurring within the coordinate system specified by the
-      \htmlref{AlignSystem}{AlignSystem} attribute.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignSideBand\sstlabel{AlignSideBand}
-}{
-   Should the SideBand attribute be taken into account when aligning
-   this \htmlref{DSBSpecFrame}{DSBSpecFrame} with another DSBSpecFrame?
-}{
-   \sstdescription{
-      This attribute controls how a DSBSpecFrame behaves when an attempt
-      is made to align it with another DSBSpecFrame using
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}.
-      If both DSBSpecFrames have a non-zero value for AlignSideBand, the
-      value of the \htmlref{SideBand}{SideBand} attribute in each DSBSpecFrame is used so that
-      alignment occurs between sidebands. That is, if one DSBSpecFrame
-      represents USB and the other represents LSB then
-      AST\_FINDFRAME and AST\_CONVERT
-      will recognise that the DSBSpecFrames represent different sidebands
-      and will take this into account when constructing the \htmlref{Mapping}{Mapping} that
-      maps positions in one DSBSpecFrame into the other. If AlignSideBand
-      in either DSBSpecFrame is set to zero, then the values of the SideBand
-      attributes are ignored. In the above example, this would result in a
-      frequency in the first DSBSpecFrame being mapped onto the same
-      frequency in the second DSBSpecFrame, even though those frequencies
-      refer to different sidebands. In other words, if either AlignSideBand
-      attribute is zero, then the two DSBSpecFrames aligns like basic
-      SpecFrames. The default value for AlignSideBand is zero.
-
-      When AST\_FINDFRAME or AST\_CONVERT
-      is used on two DSBSpecFrames (potentially describing different spectral
-      coordinate systems and/or sidebands), it returns a Mapping which can be
-      used to transform a position in one DSBSpecFrame into the corresponding
-      position in the other. The Mapping is made up of the following steps in
-      the indicated order:
-
-      \sstitemlist{
-
-         \sstitem
-         If both DSBSpecFrames have a value of 1 for the AlignSideBand
-         attribute, map values from the target's current sideband (given by its
-         SideBand attribute) to the observed sideband (whether USB or LSB). If
-         the target already represents the observed sideband, this step will
-         leave the values unchanged. If either of the two DSBSpecFrames have a
-         value of zero for its AlignSideBand attribute, then this step is omitted.
-
-         \sstitem
-         Map the values from the spectral system of the target to the spectral
-         system of the template. This Mapping takes into account all the
-         inherited \htmlref{SpecFrame}{SpecFrame} attributes such as \htmlref{System}{System}, \htmlref{StdOfRest}{StdOfRest}, Unit, etc.
-
-         \sstitem
-         If both DSBSpecFrames have a value of 1 for the AlignSideBand
-         attribute, map values from the result's observed sideband to the
-         result's current sideband (given by its SideBand attribute). If the
-         result already represents the observed sideband, this step will leave
-         the values unchanged. If either of the two DSBSpecFrames have a value
-         of zero for its AlignSideBand attribute, then this step is omitted.
-      }
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         DSBSpecFrame
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignSpecOffset\sstlabel{AlignSpecOffset}
-}{
-   Align SpecFrames using the offset coordinate system?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{SpecFrame}{SpecFrame}
-      behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
-      SpecFrame. It determines whether alignment occurs between the offset
-      values defined by the current value of the SpecOffset attribute, or
-      between the corresponding absolute spectral values.
-
-      The default value of zero results in the two SpecFrames being aligned
-      so that a given absolute spectral value in one is mapped to the same
-      absolute value in the other. A non-zero value results in the SpecFrames
-      being aligned so that a given offset value in one is mapped to the same
-      offset value in the other.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignStdOfRest\sstlabel{AlignStdOfRest}
-}{
-   Standard of rest to use when aligning SpecFrames
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{SpecFrame}{SpecFrame} behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
-      SpecFrame. It identifies the standard of rest in which alignment is
-      to occur. See the \htmlref{StdOfRest}{StdOfRest} attribute for a desription of the values
-      which may be assigned to this attribute. The default AlignStdOfRest
-      value is {\tt{"}}Helio{\tt{"}} (heliographic).
-
-      When AST\_FindFrame or AST\_CONVERT is used on two SpecFrames (potentially
-      describing different spectral coordinate systems), it returns a \htmlref{Mapping}{Mapping}
-      which can be used to transform a position in one SpecFrame into the
-      corresponding position in the other. The Mapping is made up of the
-      following steps in the indicated order:
-
-      \sstitemlist{
-
-         \sstitem
-         Map values from the system used by the target (wavelength,
-         apparent radial velocity, etc) to the system specified by the
-         \htmlref{AlignSystem}{AlignSystem} attribute, using the target's rest frequency if necessary.
-
-         \sstitem
-         Map these values from the target's standard of rest to the standard of
-         rest specified by the AlignStdOfRest attribute, using the \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat},
-         \htmlref{ObsLon}{ObsLon}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{RefDec}{RefDec} and \htmlref{RefRA}{RefRA} attributes of the target to define the
-         two standards of rest.
-
-         \sstitem
-         Map these values from the standard of rest specified by the
-         AlignStdOfRest attribute, to the template's standard of rest, using the
-         Epoch, ObsLat, ObsLon, ObsAlt, RefDec and RefRA attributes of the
-         template to define the two standards of rest.
-
-         \sstitem
-         Map these values from the system specified by the AlignSystem
-         attribute, to the system used by the template, using the template's
-         rest frequency if necessary.
-      }
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignSystem\sstlabel{AlignSystem}
-}{
-   Coordinate system in which to align the Frame
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
-      Frame. It identifies the coordinate system in which the two Frames
-      will be aligned by the match.
-
-      The values which may be assigned to this attribute, and its default
-      value, depend on the class of Frame and are described in the
-      {\tt{"}}Applicability{\tt{"}} section below. In general, the AlignSystem attribute
-      will accept any of the values which may be assigned to the \htmlref{System}{System}
-      attribute.
-
-      The \htmlref{Mapping}{Mapping} returned by astFindFrame or astConvert will use the
-      coordinate system specified by the AlignSystem attribute as an
-      intermediate coordinate system. The total returned Mapping will first
-      map positions from the first Frame into this intermediate coordinate
-      system, using the attributes of the first Frame. It will then map
-      these positions from the intermediate coordinate system into the
-      second Frame, using the attributes of the second Frame.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The AlignSystem attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
-         and may not be altered.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The AlignSystem attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
-         and may not be altered.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The AlignSystem attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The default AlignSystem attribute for a SkyFrame is {\tt{"}}ICRS{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The default AlignSystem attribute for a SpecFrame is {\tt{"}}Wave{\tt{"}}
-         (wavelength).
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The default AlignSystem attribute for a TimeFrame is {\tt{"}}MJD{\tt{"}}.
-      }
-   }
-}
-\sstroutine{
-   AlignTimeScale\sstlabel{AlignTimeScale}
-}{
-   Time scale to use when aligning TimeFrames
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{TimeFrame}{TimeFrame} behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}) as a template to match another (target)
-      TimeFrame. It identifies the time scale in which alignment is
-      to occur. See the \htmlref{TimeScale}{TimeScale} attribute for a desription of the values
-      which may be assigned to this attribute. The default AlignTimeScale
-      value depends on the current value of TimeScale: if TimeScale is
-      UT1, GMST, LMST or LAST, the default for AlignTimeScale is UT1, for all
-      other TimeScales the default is TAI.
-
-      When AST\_FindFrame or AST\_CONVERT is used on two TimeFrames (potentially
-      describing different time coordinate systems), it returns a \htmlref{Mapping}{Mapping}
-      which can be used to transform a position in one TimeFrame into the
-      corresponding position in the other. The Mapping is made up of the
-      following steps in the indicated order:
-
-      \sstitemlist{
-
-         \sstitem
-         Map values from the system used by the target (MJD, JD, etc) to the
-         system specified by the \htmlref{AlignSystem}{AlignSystem} attribute.
-
-         \sstitem
-         Map these values from the target's time scale to the time scale
-         specified by the AlignTimeScale attribute.
-
-         \sstitem
-         Map these values from the time scale specified by the AlignTimeScale
-         attribute, to the template's time scale.
-
-         \sstitem
-         Map these values from the system specified by the AlignSystem
-         attribute, to the system used by the template.
-      }
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         TimeFrame
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AllWarnings\sstlabel{AllWarnings}
-}{
-   A list of all currently available condition names
-}{
-   \sstdescription{
-      This read-only attribute is a space separated list of all the conditions
-      names recognized by the \htmlref{Warnings}{Warnings} attribute. The names are listed
-      below.
-   }
-   \sstattributetype{
-      String, read-only
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Conditions
-   }{
-      The following conditions are currently recognised (all are
-      case-insensitive):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}BadCel{\tt{"}}: This condition arises when reading a \htmlref{FrameSet}{FrameSet} from a
-         non-Native encoded FitsChan if an unknown celestial co-ordinate
-         system is specified by the CTYPE keywords.
-
-         \sstitem
-         {\tt{"}}BadCTYPE{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if an illegal algorithm code is specified
-         by a CTYPE keyword, and the illegal code can be converted to an
-         equivalent legal code.
-
-         \sstitem
-         {\tt{"}}BadLat{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if the latitude of the reference point
-         has an absolute value greater than 90 degrees. The actual absolute
-         value used is set to exactly 90 degrees in these cases.
-
-         \sstitem
-         {\tt{"}}BadMat{\tt{"}}: This condition arises if the matrix describing the
-         transformation from pixel offsets to intermediate world coordinates
-         cannot be inverted. This matrix describes the scaling, rotation, shear,
-         etc., applied to the pixel axes, and is specified by keywords such as
-         PCi\_j, CDi\_j, CROTA, etc. For example, the matrix will not be invertable
-         if any rows or columns consist entirely of zeros. The FITS-WCS Paper I
-         {\tt{"}}Representation of World Coordinates in FITS{\tt{"}} by Greisen \& Calabretta
-         requires that this matrix be invertable. Many operations (such as
-         grid plotting) will not be possible if the matrix cannot be inverted.
-
-         \sstitem
-         {\tt{"}}BadPV{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan. It is issued if a \htmlref{PVi\_m}{PVi_m} header is found
-         that refers to a projection parameter that is not used by the
-         projection type specified by CTYPE.
-
-         \sstitem
-         {\tt{"}}BadVal{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if it is not possible to convert the
-         value of a FITS keywords to the expected type. For instance, this
-         can occur if the FITS header contains a string value for a keyword
-         which should have a floating point value, or if the keyword has no
-         value at all (i.e. is a comment card).
-
-         \sstitem
-         {\tt{"}}Distortion{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if any of the CTYPE keywords specify an
-         unsupported distortion code using the {\tt{"}}4-3-3{\tt{"}} format specified in
-         FITS-WCS paper IV. Such distortion codes are ignored.
-
-         \sstitem
-         {\tt{"}}NoCTYPE{\tt{"}}: This condition arises if a default CTYPE value is used
-         within \htmlref{AST\_READ}{AST_READ}, due to no value being present in the supplied FitsChan.
-         This condition is only tested for when using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoEquinox{\tt{"}}: This condition arises if a default equinox value is used
-         within AST\_READ, due to no value being present in the supplied FitsChan.
-         This condition is only tested for when using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoRadesys{\tt{"}}: This condition arises if a default reference frame is
-         used for an equatorial co-ordinate system within AST\_READ, due to no
-         value being present in the supplied FitsChan. This condition is only
-         tested for when using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoLonpole{\tt{"}}: This condition arises if a default value is used for
-         the LONPOLE keyword within AST\_READ, due to no value being present
-         in the supplied FitsChan. This condition is only tested for when
-         using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoLatpole{\tt{"}}: This condition arises if a default value is used for
-         the LATPOLE keyword within AST\_READ, due to no value being present
-         in the supplied FitsChan. This condition is only tested for when
-         using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoMjd-obs{\tt{"}}: This condition arises if a default value is used for
-         the date of observation within AST\_READ, due to no value being present
-         in the supplied FitsChan. This condition is only tested for when using
-         non-Native encodings.
-
-         \sstitem
-         {\tt{"}}Tnx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
-         header containing an IRAF {\tt{"}}TNX{\tt{"}} projection which includes terms
-         not supproted by AST. Such terms are ignored and so the resulting
-         FrameSet may be inaccurate.
-
-         \sstitem
-         {\tt{"}}Zpx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
-         header containing an IRAF {\tt{"}}ZPX{\tt{"}} projection which includes {\tt{"}}lngcor{\tt{"}}
-         or {\tt{"}}latcor{\tt{"}} correction terms. These terms are not supported by AST
-         and are ignored. The resulting FrameSet may therefore be inaccurate.
-      }
-   }
-}
-\sstroutine{
-   AsTime(axis)\sstlabel{AsTimeaxis}
-}{
-   Format celestal coordinates as times?
-}{
-   \sstdescription{
-      This attribute specifies the default style of formatting to be
-      used (e.g. by \htmlref{AST\_FORMAT}{AST_FORMAT}) for the celestial coordinate values
-      described by a \htmlref{SkyFrame}{SkyFrame}. It takes a separate boolean value for
-      each SkyFrame axis so that, for instance, the setting
-      {\tt{"}}AsTime(2)=0{\tt{"}} specifies the default formatting style for
-      celestial latitude values.
-
-      If the AsTime attribute for a SkyFrame axis is zero, then
-      coordinates on that axis will be formatted as angles by default
-      (using degrees, minutes and seconds), otherwise they will be
-      formatted as times (using hours, minutes and seconds).
-
-      The default value of AsTime is chosen according to the sky
-      coordinate system being represented, as determined by the
-      SkyFrame's \htmlref{System}{System} attribute. This ensures, for example, that
-      right ascension values will be formatted as times by default,
-      following normal conventions.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The AsTime attribute operates by changing the default value of
-         the corresponding \htmlref{Format(axis)}{Formataxis} attribute. This, in turn, may
-         also affect the value of the \htmlref{Unit(axis)}{Unitaxis} attribute.
-
-         \sstitem
-         Only the default style of formatting is affected by the AsTime
-         value. If an explicit Format(axis) value is set, it will
-         over-ride any effect from the AsTime attribute.
-      }
-   }
-}
-\sstroutine{
-   Base\sstlabel{Base}
-}{
-   FrameSet base Frame index
-}{
-   \sstdescription{
-      This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
-      regarded as the {\tt{"}}base{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default is
-      the first Frame added to the FrameSet when it is created (this
-      Frame always has an index of 1).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FrameSet
-      }{
-         All FrameSets have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Inverting a FrameSet (inverting the boolean sense of its
-         \htmlref{Invert}{Invert} attribute, with the \htmlref{AST\_INVERT}{AST_INVERT} routine for example) will
-         interchange the values of its Base and \htmlref{Current}{Current} attributes.
-      }
-   }
-}
-\sstroutine{
-   Border\sstlabel{Border}
-}{
-   Draw a border around valid regions of a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether a border is drawn around regions corresponding to the
-      valid physical coordinates of a \htmlref{Plot}{Plot} (c.f. \htmlref{AST\_BORDER}{AST_BORDER}).
-
-      If the Border value of a Plot is non-zero, then this border will
-      be drawn as part of the grid. Otherwise, the border is not drawn
-      (although axis labels and tick marks will still appear, unless
-      other relevant Plot attributes indicate that they should
-      not). The default behaviour is to draw the border if tick marks
-      and numerical labels will be drawn around the edges of the
-      plotting area (see the \htmlref{Labelling}{Labelling} attribute), but to omit it
-      otherwise.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Bottom(axis)\sstlabel{Bottomaxis}
-}{
-   Lowest axis value to display
-}{
-   \sstdescription{
-      This attribute gives the lowest axis value to be displayed (for
-      instance, by the \htmlref{AST\_GRID}{AST_GRID} method).
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The default supplied by the Frame class is to display all axis
-         values, without any limit.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Bottom value to -90 degrees
-         for latitude axes, and 0 degrees for co-latitude axes. The
-         default for longitude axes is to display all axis values.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   Bounded\sstlabel{Bounded}
-}{
-   Is the Region bounded?
-}{
-   \sstdescription{
-      This is a read-only attribute indicating if the \htmlref{Region}{Region} is bounded.
-      A Region is bounded if it is contained entirely within some
-      finite-size bounding box.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-   }
-}
-\sstroutine{
-   CDMatrix\sstlabel{CDMatrix}
-}{
-   Use CDi\_j keywords to represent pixel scaling, rotation, etc?
-}{
-   \sstdescription{
-      This attribute is a boolean value which specifies how the linear
-      transformation from pixel coordinates to intermediate world
-      coordinates should be represented within a \htmlref{FitsChan}{FitsChan} when using
-      FITS-WCS encoding. This transformation describes the scaling,
-      rotation, shear, etc., of the pixel axes.
-
-      If the attribute has a non-zero value then the transformation is
-      represented by a set of CDi\_j keywords representing a square matrix
-      (where {\tt{"}}i{\tt{"}} is the index of an intermediate world coordinate axis
-      and {\tt{"}}j{\tt{"}} is the index of a pixel axis). If the attribute has a zero
-      value the transformation is represented by a set of PCi\_j keywords
-      (which also represent a square matrix) together with a corresponding
-      set of CDELTi keywords representing the axis scalings. See FITS-WCS
-      paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
-      M. Calabretta \& E.W. Greisen, for a complete description of these two
-      schemes.
-
-      The default value of the CDMatrix attribute is determined by the
-      contents of the FitsChan at the time the attribute is accessed. If
-      the FitsChan contains any CDi\_j keywords then the default value is
-      non-zero. Otherwise it is zero. Note, reading a \htmlref{FrameSet}{FrameSet} from a
-      FitsChan will in general consume any CDi\_j keywords present in the
-      FitsChan. Thus the default value for CDMatrix following a read will
-      usually be zero, even if the FitsChan originally contained some
-      CDi\_j keywords. This behaviour is similar to that of the \htmlref{Encoding}{Encoding}
-      attribute, the default value for which is determined by the contents
-      of the FitsChan at the time the attribute is accessed. If you wish
-      to retain the original value of the CDMatrix attribute (that is,
-      the value before reading the FrameSet) then you should enquire the
-      default value before doing the read, and then set that value
-      explicitly.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   CarLin\sstlabel{CarLin}
-}{
-   Ignore spherical rotations on CAR projections?
-}{
-   \sstdescription{
-      This attribute is a boolean value which specifies how FITS {\tt{"}}CAR{\tt{"}}
-      (plate carree, or {\tt{"}}Cartesian{\tt{"}}) projections should be treated when
-      reading a \htmlref{FrameSet}{FrameSet} from a foreign encoded FITS header. If zero (the
-      default), it is assumed that the CAR projection conforms to the
-      conventions described in the FITS world coordinate system (FITS-WCS)
-      paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
-      M. Calabretta \& E.W. Greisen. If CarLin is non-zero, then these
-      conventions are ignored, and it is assumed that the mapping from pixel
-      coordinates to celestial coordinates is a simple linear transformation
-      (hence the attribute name {\tt{"}}CarLin{\tt{"}}). This is appropriate for some older
-      FITS data which claims to have a {\tt{"}}CAR{\tt{"}} projection, but which in fact do
-      not conform to the conventions of the FITS-WCS paper. Furthermore, if
-      CarLin is non-zero, it is assumed that CDELT and CD keywords are
-      in units of degrees rather than radians (as required by the
-      FITS-WCS papers).
-
-      The FITS-WCS paper specifies that headers which include a CAR projection
-      represent a linear mapping from pixel coordinates to {\tt{"}}native spherical
-      coordinates{\tt{"}}, NOT celestial coordinates. An extra mapping is then
-      required from native spherical to celestial. This mapping is a 3D
-      rotation and so the overall \htmlref{Mapping}{Mapping} from pixel to celestial coordinates
-      is NOT linear. See the FITS-WCS papers for further details.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Card\sstlabel{Card}
-}{
-   Index of current FITS card in a FitsChan
-}{
-   \sstdescription{
-      This attribute gives the index of the {\tt{"}}current{\tt{"}} FITS header card
-      within a \htmlref{FitsChan}{FitsChan}, the first card having an index of 1. The
-      choice of current card affects the behaviour of routines that
-      access the contents of the FitsChan, such as \htmlref{AST\_DELFITS}{AST_DELFITS},
-      \htmlref{AST\_FINDFITS}{AST_FINDFITS} and \htmlref{AST\_PUTFITS}{AST_PUTFITS}.
-
-      A value assigned to Card will position the FitsChan at any
-      desired point, so that a particular card within it can be
-      accessed. Alternatively, the value of Card may be enquired in
-      order to determine the current position of a FitsChan.
-
-      The default value of Card is 1. This means that clearing
-      this attribute (using \htmlref{AST\_CLEAR}{AST_CLEAR}) effectively {\tt{"}}rewinds{\tt{"}} the
-      FitsChan, so that the first card is accessed next.  If Card is
-      set to a value which exceeds the total number of cards in the
-      FitsChan (as given by its \htmlref{Ncard}{Ncard} attribute), it is regarded as
-      pointing at the {\tt{"}}end-of-file{\tt{"}}. In this case, the value returned
-      in response to an enquiry is always one more than the number of
-      cards in the FitsChan.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Class\sstlabel{Class}
-}{
-   Object class name
-}{
-   \sstdescription{
-      This attribute gives the name of the class to which an \htmlref{Object}{Object}
-      belongs.
-   }
-   \sstattributetype{
-      Character string, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Clean\sstlabel{Clean}
-}{
-   Remove cards used whilst reading even if an error occurs?
-}{
-   \sstdescription{
-      This attribute indicates whether or not cards should be removed from
-      the \htmlref{FitsChan}{FitsChan} if an error occurs within
-      \htmlref{AST\_READ}{AST_READ}.
-      A succesful read on a FitsChan always results in the removal of
-      the cards which were involved in the description of the returned
-      \htmlref{Object}{Object}. However, in the event of an error during the read (for instance
-      if the cards in the FitsChan have illegal values, or if some required
-      cards are missing) no cards will be removed from the FitsChan if
-      the Clean attribute is zero (the default). If Clean is non-zero then
-      any cards which were used in the aborted attempt to read an object
-      will be removed.
-
-      This provides a means of {\tt{"}}cleaning{\tt{"}} a FitsChan of WCS related cards
-      which works even in the event of the cards not forming a legal WCS
-      description.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Clip\sstlabel{Clip}
-}{
-   Clip lines and/or markers at the Plot boundary?
-}{
-   \sstdescription{
-      This attribute controls whether curves and markers are clipped at the
-      boundary of the graphics box specified when the \htmlref{Plot}{Plot} was created. A
-      value of 3 implies both markers and curves are clipped at the Plot
-      boundary. A value of 2 implies markers are clipped, but not curves. A
-      value of 1 implies curves are clipped, but not markers. A value of
-      zero implies neither curves nor markers are clipped. The default
-      value is 1. Note, this attributes controls only the clipping
-      performed internally within AST. The underlying graphics system may
-      also apply clipping. In such cases, removing clipping using this
-      attribute does not guarantee that no clipping will be visible in the
-      final plot.
-
-      The \htmlref{AST\_CLIP}{AST_CLIP} routine
-      can be used to establish generalised clipping within arbitrary
-      regions of the Plot.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ClipOp\sstlabel{ClipOp}
-}{
-   Combine Plot clipping limits using a boolean OR?
-}{
-   \sstdescription{
-      This attribute controls how the clipping limits specified for
-      each axis of a \htmlref{Plot}{Plot} (using the \htmlref{AST\_CLIP}{AST_CLIP} routine) are
-      combined. This, in turn, determines which parts of the graphical
-      output will be visible.
-
-      If the ClipOp attribute of a Plot is zero (the default),
-      graphical output is visible only if it satisfies the clipping
-      limits on all the axes of the clipping \htmlref{Frame}{Frame} (a boolean
-      AND). Otherwise, if ClipOp is non-zero, output is visible if it
-      satisfies the clipping limits on one or more axes (a boolean
-      OR).
-
-      An important use of this attribute is to allow areas of a Plot
-      to be left clear (e.g. as a background for some text). To
-      achieve this, the lower and upper clipping bounds supplied to
-      AST\_CLIP should be reversed, and the ClipOp attribute of the
-      Plot should be set to a non-zero value.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Closed\sstlabel{Closed}
-}{
-   Should the boundary be considered to be inside the region?
-}{
-   \sstdescription{
-      This attribute controls whether points on the boundary of a \htmlref{Region}{Region}
-      are considered to be inside or outside the region. If the attribute
-      value is non-zero (the default), points on the boundary are considered
-      to be inside the region (that is, the Region is {\tt{"}}closed{\tt{"}}). However,
-      if the attribute value is zero, points on the bounary are considered
-      to be outside the region.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{PointList}{PointList}
-      }{
-         The value of the Closed attribute is ignored by PointList regions.
-         If the PointList region has not been negated, then it is always
-         assumed to be closed. If the PointList region has been negated, then
-         it is always assumed to be open. This is required since points
-         have zero volume and therefore consist entirely of boundary.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default Closed value for a CmpRegion is the Closed value of its
-         first component Region.
-      }
-      \sstsubsection{
-         \htmlref{Stc}{Stc}
-      }{
-         The default Closed value for an Stc is the Closed value of its
-         encapsulated Region.
-      }
-   }
-}
-\sstroutine{
-   Colour(element)\sstlabel{Colourelement}
-}{
-   Colour index for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the colour index used when drawing
-      each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Colour(title)=2{\tt{"}} causes the Plot title to be drawn
-      using colour index 2. The synonym {\tt{"}}Color{\tt{"}} may also be used.
-
-      The range of integer colour indices available and their
-      appearance is determined by the underlying graphics system. The
-      default behaviour is for all graphical elements to be drawn
-      using the default colour index supplied by this graphics system
-      (normally, this is likely to result in white plotting on a black
-      background, or vice versa).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Colour{\tt{"}} instead
-         of {\tt{"}}Colour(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
-         affect the attribute value of all graphical elements, while a
-         {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Colour(TextLab)
-         value.
-      }
-   }
-}
-\sstroutine{
-   Comment\sstlabel{Comment}
-}{
-   Include textual comments in output?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls whether textual
-      comments are to be included in the output generated by a
-      \htmlref{Channel}{Channel}. If included, they will describe what each item of
-      output represents.
-
-      If Comment is non-zero, then comments will be included. If
-      it is zero, comments will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         The default value is non-zero for a normal Channel.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The default value is non-zero for a FitsChan.
-      }
-      \sstsubsection{
-         \htmlref{XmlChan}{XmlChan}
-      }{
-         The default value is zero for an XmlChan.
-      }
-   }
-}
-\sstroutine{
-   Current\sstlabel{Current}
-}{
-   FrameSet current Frame index
-}{
-   \sstdescription{
-      This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
-      regarded as the {\tt{"}}current{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default
-      is the most recent Frame added to the FrameSet (this Frame
-      always has an index equal to the FrameSet's \htmlref{Nframe}{Nframe} attribute).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FrameSet
-      }{
-         All FrameSets have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Inverting a FrameSet (inverting the boolean sense of its
-         \htmlref{Invert}{Invert} attribute, with the \htmlref{AST\_INVERT}{AST_INVERT} routine for example) will
-         interchange the values of its \htmlref{Base}{Base} and Current attributes.
-      }
-   }
-}
-\sstroutine{
-   DSBCentre\sstlabel{DSBCentre}
-}{
-   The central position of interest in a dual sideband spectrum
-}{
-   \sstdescription{
-      This attribute specifies the central position of interest in a dual
-      sideband spectrum. Its sole use is to determine the local oscillator
-      frequency (the frequency which marks the boundary between the lower
-      and upper sidebands). See the description of the \htmlref{IF}{IF} (intermediate
-      frequency) attribute for details of how the local oscillator frequency
-      is calculated. The sideband containing this central position is
-      referred to as the {\tt{"}}observed{\tt{"}} sideband, and the other sideband as
-      the {\tt{"}}image{\tt{"}} sideband.
-
-      The value is accessed as a position in the spectral system
-      represented by the \htmlref{SpecFrame}{SpecFrame} attributes inherited by this class, but
-      is stored internally as topocentric frequency. Thus, if the \htmlref{System}{System}
-      attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} is set to {\tt{"}}VRAD{\tt{"}}, the Unit attribute
-      set to {\tt{"}}m/s{\tt{"}} and the \htmlref{StdOfRest}{StdOfRest} attribute set to {\tt{"}}LSRK{\tt{"}}, then values
-      for the DSBCentre attribute should be supplied as radio velocity in
-      units of {\tt{"}}m/s{\tt{"}} relative to the kinematic LSR (alternative units may
-      be used by appending a suitable units string to the end of the value).
-      This value is then converted to topocentric frequency and stored. If
-      (say) the Unit attribute is subsequently changed to {\tt{"}}km/s{\tt{"}} before
-      retrieving the current value of the DSBCentre attribute, the stored
-      topocentric frequency will be converted back to LSRK radio velocity,
-      this time in units of {\tt{"}}km/s{\tt{"}}, before being returned.
-
-      The default value for this attribute is 30 GHz.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         DSBSpecFrame
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Note
-   }{
-      \sstitemlist{
-
-         \sstitem
-         The attributes which define the transformation to or from topocentric
-         frequency should be assigned their correct values before accessing
-         this attribute. These potentially include System, Unit, StdOfRest,
-         \htmlref{ObsLon}{ObsLon}, \htmlref{ObsLat}{ObsLat}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec} and \htmlref{RestFreq}{RestFreq}.
-      }
-   }
-}
-\sstroutine{
-   DefB1950\sstlabel{DefB1950}
-}{
-   Use FK4 B1950 as defaults?
-}{
-   \sstdescription{
-      This attribute is a boolean value which specifies a default equinox
-      and reference frame to use when reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}
-      with a foreign (i.e. non-native) encoding. It is only used if the FITS
-      header contains RA and DEC axes but contains no information about the
-      reference frame or equinox. If this is the case, then values of FK4 and
-      B1950 are assumed if the DefB1950 attribute has a non-zero value and
-      ICRS is assumed if DefB1950 is zero. The default value for DefB1950
-      depends on the value of the \htmlref{Encoding}{Encoding} attribute: for FITS-WCS encoding
-      the default is zero, and for all other encodings it is one.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Digits/Digits(axis)\sstlabel{DigitsDigitsaxis}
-}{
-   Number of digits of precision
-}{
-   \sstdescription{
-      This attribute specifies how many digits of precision are
-      required by default when a coordinate value is formatted for a
-      \htmlref{Frame}{Frame} axis (e.g. using \htmlref{AST\_FORMAT}{AST_FORMAT}). Its value may be set either
-      for a Frame as a whole, or (by subscripting the attribute name
-      with the number of an axis) for each axis individually. Any
-      value set for an individual axis will over-ride the value for
-      the Frame as a whole.
-
-      Note that the Digits value acts only as a means of determining a
-      default Format string. Its effects are over-ridden if a Format
-      string is set explicitly for an axis. However, if the Format
-      attribute specifies the precision using the string {\tt{"}}.$*${\tt{"}}, then
-      the Digits attribute is used to determine the number of decimal
-      places to produce.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Digits value supplied by the Frame class is 7. If
-         a value less than 1 is supplied, then 1 is used instead.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Digits attribute of a FrameSet (or one of its axes) is
-         the same as that of its current Frame (as specified by the
-         \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         The default Digits value used by the Plot class when drawing
-         annotated axis labels is the smallest value which results in all
-         adjacent labels being distinct.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The Digits attribute is ignored when a TimeFrame formats a value
-         as a date and time string (see the Format attribute).
-      }
-   }
-}
-\sstroutine{
-   Direction(axis)\sstlabel{Directionaxis}
-}{
-   Display axis in conventional direction?
-}{
-   \sstdescription{
-      This attribute is a boolean value which suggests how the axes of
-      a \htmlref{Frame}{Frame} should be displayed (e.g.) in graphical output. By
-      default, it has the value one, indicating that they should be
-      shown in the conventional sense (increasing left to right for an
-      abscissa, and bottom to top for an ordinate). If set to zero,
-      this attribute indicates that the direction should be reversed,
-      as would often be done for an astronomical magnitude or a right
-      ascension axis.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Direction value supplied by the Frame class is 1,
-         indicating that all axes should be displayed in the
-         conventional direction.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Direction value to
-         suggest that certain axes (e.g. right ascension) should be
-         plotted in reverse when appropriate.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Direction attribute of a FrameSet axis is the same as
-         that of its current Frame (as specified by the \htmlref{Current}{Current}
-         attribute).
-      }
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         The Direction attribute of the base Frame in a Plot is set to
-         indicate the sense of the two graphics axes, as implied by the
-         graphics bounding box supplied when the Plot was created.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-
-         \sstitem
-         The Direction attribute does not directly affect the behaviour
-         of the AST library. Instead, it serves as a hint to applications
-         programs about the orientation in which they may wish to display
-         any data associated with the Frame. Applications are free to
-         ignore this hint if they wish.
-      }
-   }
-}
-\sstroutine{
-   Disco\sstlabel{Disco}
-}{
-   PcdMap pincushion/barrel distortion coefficient
-}{
-   \sstdescription{
-      This attribute specifies the pincushion/barrel distortion coefficient
-      used by a \htmlref{PcdMap}{PcdMap}. This coefficient is set when the PcdMap is created,
-      but may later be modified. If the attribute is cleared, its default
-      value is zero, which gives no distortion. For pincushion distortion,
-      the value should be positive. For barrel distortion, it should be
-      negative.
-
-      Note that the forward transformation of a PcdMap applies the
-      distortion specified by this attribute and the inverse
-      transformation removes this distortion. If the PcdMap is inverted
-      (e.g. using \htmlref{AST\_INVERT}{AST_INVERT}), then the forward transformation will
-      remove the distortion and the inverse transformation will apply
-      it. The distortion itself will still be given by the same value of
-      Disco.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         PcdMap
-      }{
-         All PcdMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Domain\sstlabel{Domain}
-}{
-   Coordinate system domain
-}{
-   \sstdescription{
-      This attribute contains a string which identifies the physical
-      domain of the coordinate system that a \htmlref{Frame}{Frame} describes.
-
-      The Domain attribute also controls how a Frame behaves when it is
-      used (by \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target)
-      Frame. It does this by specifying the Domain that the target
-      Frame should have in order to match the template. If the Domain
-      value in the template Frame is set, then only targets with the
-      same Domain value will be matched. If the template's Domain
-      value is not set, however, then the target's Domain will be
-      ignored.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Domain value supplied by the Frame class is an
-         empty string.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Domain value to be
-         {\tt{"}}SKY{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The CmpFrame class re-defines the default Domain value to be
-         of the form {\tt{"}}$<$dom1$>$-$<$dom2$>${\tt{"}}, where $<$dom1$>$ and $<$dom2$>$ are the
-         Domains of the two component Frames. If both these Domains are
-         blank, then the string {\tt{"}}CMP{\tt{"}} is used as the default Domain name.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Domain attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The SpecFrame class re-defines the default Domain value to be
-         {\tt{"}}SPECTRUM{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         The DSBSpecFrame class re-defines the default Domain value to be
-         {\tt{"}}DSBSPECTRUM{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{FluxFrame}{FluxFrame}
-      }{
-         The FluxFrame class re-defines the default Domain value to be
-         {\tt{"}}FLUX{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{SpecFluxFrame}{SpecFluxFrame}
-      }{
-         The FluxFrame class re-defines the default Domain value to be
-         {\tt{"}}SPECTRUM-FLUX{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Domain value to be
-         {\tt{"}}TIME{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         All Domain values are converted to upper case and white space
-         is removed before use.
-      }
-   }
-}
-\sstroutine{
-   DrawAxes(axis)\sstlabel{DrawAxesaxis}
-}{
-   Draw axes for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether curves representing coordinate axes should be drawn.
-      It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}DrawAxes(2)=0{\tt{"}}
-      specifies that no axis should be drawn for the second axis.
-
-      If drawn, these axis lines will pass through any tick marks
-      associated with numerical labels drawn to mark values on the
-      axes. The location of these tick marks and labels (and hence the
-      axis lines) is determined by the Plot's \htmlref{LabelAt(axis)}{LabelAtaxis} attribute.
-
-      If the DrawAxes value of a Plot is non-zero (the default), then
-      axis lines will be drawn, otherwise they will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Axis}{Axis} lines are drawn independently of any coordinate grid
-         lines (see the \htmlref{Grid}{Grid} attribute) so grid lines may be used to
-         substitute for axis lines if required.
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
-         attribute).  In this case, the value of the DrawAxes attribute
-         is ignored.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}DrawAxes{\tt{"}} instead of
-         {\tt{"}}DrawAxes(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the DrawAxes(1) value.
-      }
-   }
-}
-\sstroutine{
-   DrawTitle\sstlabel{DrawTitle}
-}{
-   Draw a title for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether a title is drawn.
-
-      If the DrawTitle value of a \htmlref{Plot}{Plot} is non-zero (the default), then
-      the title will be drawn, otherwise it will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes, assuming a value of
-         zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the title is obtained from the Plot's \htmlref{Title}{Title}
-         attribute.
-
-         \sstitem
-         The vertical placement of the title can be controlled using
-         the \htmlref{TitleGap}{TitleGap} attribute.
-      }
-   }
-}
-\sstroutine{
-   Dut1\sstlabel{Dut1}
-}{
-   The UT1-UTC correction
-}{
-   \sstdescription{
-      This attribute is used when calculating the Local Apparent Sidereal
-      Time corresponding to \htmlref{SkyFrame}{SkyFrame}'s \htmlref{Epoch}{Epoch} value (used when converting
-      positions to or from the {\tt{"}}AzEl{\tt{"}} system). It should be set to the
-      difference, in seconds, between the UT1 and UTC timescales at the
-      moment in time represented by the SkyFrame's Epoch attribute. The
-      value to use is unpredictable and depends on changes in the earth's
-      rotation speed. Values for UT1-UTC can be obtained from the
-      International Earth Rotation and Reference Systems Service
-      (IERS) at http://www.iers.org/.
-
-      Currently, the correction is always less than 1 second. This is
-      ensured by the occasional introduction of leap seconds into the UTC
-      timescale. Therefore no great error will usually result if no value
-      is assigned to this attribute (in which case a default value of
-      zero is used). However, it is possible that a decision may be taken
-      at some time in the future to abandon the introduction of leap
-      seconds, in which case the DUT correction could grow to significant
-      sizes.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         All Frames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Edge(axis)\sstlabel{Edgeaxis}
-}{
-   Which edges to label in a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      which edges of a \htmlref{Plot}{Plot} are used for displaying numerical and
-      descriptive axis labels. It takes a separate value for each
-      physical axis of the Plot so that, for instance, the setting
-      {\tt{"}}Edge(2)=left{\tt{"}} specifies which edge to use to display labels for
-      the second axis.
-
-      The values {\tt{"}}left{\tt{"}}, {\tt{"}}top{\tt{"}}, {\tt{"}}right{\tt{"}} and {\tt{"}}bottom{\tt{"}} (or any
-      abbreviation) can be supplied for this attribute. The default is
-      usually {\tt{"}}bottom{\tt{"}} for the first axis and {\tt{"}}left{\tt{"}} for the second
-      axis. However, if exterior labelling was requested (see the
-      \htmlref{Labelling}{Labelling} attribute) but cannot be produced using these default
-      Edge values, then the default values will be swapped if this
-      enables exterior labelling to be produced.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes. Instead it uses its
-         own \htmlref{RootCorner}{RootCorner} attribute to determine which edges of the 3D plot
-         to label.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In some circumstances, numerical labels will be drawn along
-         internal grid lines instead of at the edges of the plotting area
-         (see the Labelling attribute). In this case, the Edge attribute
-         only affects the placement of the descriptive labels (these are
-         drawn at the edges of the plotting area, rather than along the
-         axis lines).
-      }
-   }
-}
-\sstroutine{
-   Encoding\sstlabel{Encoding}
-}{
-   System for encoding Objects as FITS headers
-}{
-   \sstdescription{
-      This attribute specifies the encoding system to use when AST
-      Objects are stored as FITS header cards in a \htmlref{FitsChan}{FitsChan}. It
-      affects the behaviour of the \htmlref{AST\_WRITE}{AST_WRITE} and \htmlref{AST\_READ}{AST_READ} routines when
-      they are used to transfer any AST \htmlref{Object}{Object} to or from an external
-      representation consisting of FITS header cards (i.e. whenever a
-      write or read operation is performed using a FitsChan as the I/O
-      \htmlref{Channel}{Channel}).
-
-      There are several ways (conventions) by which coordinate system
-      information may be represented in the form of FITS headers and
-      the Encoding attribute is used to specify which of these should
-      be used. The encoding options available are outlined in the
-      {\tt{"}}Encodings Available{\tt{"}} section below, and in more detail in the
-      sections which follow.
-
-      Encoding systems differ in the range of possible Objects
-      (e.g. classes) they can represent, in the restrictions they
-      place on these Objects (e.g. compatibility with some
-      externally-defined coordinate system model) and in the number of
-      Objects that can be stored together in any particular set of
-      FITS header cards (e.g. multiple Objects, or only a single
-      Object). The choice of encoding also affects the range of
-      external applications which can potentially read and interpret
-      the FITS header cards produced.
-
-      The encoding options available are not necessarily mutually
-      exclusive, and it may sometimes be possible to store multiple
-      Objects (or the same Object several times) using different
-      encodings within the same set of FITS header cards. This
-      possibility increases the likelihood of other applications being
-      able to read and interpret the information.
-
-      By default, a FitsChan will attempt to determine which encoding
-      system is already in use, and will set the default Encoding
-      value accordingly (so that subsequent I/O operations adopt the
-      same conventions). It does this by looking for certain critical
-      FITS keywords which only occur in particular encodings. For
-      details of how this works, see the {\tt{"}}Choice of Default Encoding{\tt{"}}
-      section below. If you wish to ensure that a particular encoding
-      system is used, independently of any FITS cards already present,
-      you should set an explicit Encoding value yourself.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Encodings Available
-   }{
-      The Encoding attribute can take any of the following (case
-      insensitive) string values to select the corresponding encoding
-      system:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}DSS{\tt{"}}: Encodes coordinate system information in FITS header
-         cards using the convention developed at the Space Telescope
-         Science Institute (STScI) for the Digitised Sky Survey (DSS)
-         astrometric plate calibrations. The main advantages of this
-         encoding are that FITS images which use it are widely available
-         and it is understood by a number of important and
-         well-established astronomy applications. For further details,
-         see the section {\tt{"}}The DSS Encoding{\tt{"}} below.
-
-         \sstitem
-         {\tt{"}}FITS-WCS{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions described in the FITS
-         world coordinate system (FITS-WCS) papers by E.W. Greisen,
-         M. Calabretta, et al. The main advantages of this encoding are that
-         it should be understood by any FITS-WCS compliant application and
-         is likely to be adopted widely for FITS data in future. For further
-         details, see the section {\tt{"}}The FITS-WCS Encoding{\tt{"}} below.
-
-         \sstitem
-         {\tt{"}}FITS-PC{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions described in an earlier draft
-         of the FITS world coordinate system papers by E.W. Greisen and
-         M. Calabretta. This encoding uses a combination of CDELTi and
-         PCiiijjj keywords to describe the scale and rotation of the pixel
-         axes. This encoding is included to support existing data and
-         software which uses these now superceded conventions. In general,
-         the {\tt{"}}FITS-WCS{\tt{"}} encoding (which uses CDi\_j or PCi\_j keywords to
-         describe the scale and rotation) should be used in preference to
-         {\tt{"}}FITS-PC{\tt{"}}.
-
-         \sstitem
-         {\tt{"}}FITS-IRAF{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions described in the document
-         {\tt{"}}World Coordinate Systems Representations Within the FITS
-         Format{\tt{"}} by R.J. Hanisch and D.G. Wells, 1988.  This encoding is
-         currently employed by the IRAF data analysis facility, so its
-         use will facilitate data exchange with IRAF. Its main advantages
-         are that it is a stable convention which approximates to a
-         subset of the propsed FITS-WCS encoding (above). This makes it
-         suitable as an interim method for storing coordinate system
-         information in FITS headers until the FITS-WCS encoding becomes
-         stable. Since many datasets currently use the FITS-IRAF
-         encoding, conversion of data from FITS-IRAF to the final form of
-         FITS-WCS is likely to be well supported.
-
-         \sstitem
-         {\tt{"}}FITS-AIPS{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions originally introduced by the
-         AIPS data analysis facility. This is base on the use of CDELTi and
-         CROTAi keuwords to desribe the scale and rotation of each axis.
-         These conventions have been superceded but are still widely used.
-
-         \sstitem
-         {\tt{"}}FITS-AIPS$+$$+${\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions used by the AIPS$+$$+$ project.
-         This is an extension of FITS-AIPS which includes some of the
-         features of FITS-IRAF and FITS-PC.
-
-         \sstitem
-         {\tt{"}}FITS-CLASS{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions used by the CLASS project.
-         CLASS is a software package for reducing single-dish radio and
-         sub-mm spectroscopic data. See the section {\tt{"}}CLASS FITS format{\tt{"}} at
-         http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/.
-
-         \sstitem
-         {\tt{"}}NATIVE{\tt{"}}: Encodes AST Objects in FITS header cards using a
-         convention which is private to the AST library (but adheres to
-         the general FITS standard) and which uses FITS keywords that
-         will not clash with other encoding systems. The main advantages
-         of this are that any class of AST Object may be encoded, and any
-         (reasonable) number of Objects may be stored sequentially in the
-         same FITS header. This makes FITS headers an almost loss-less
-         communication path for passing AST Objects between applications
-         (although all such applications must, of course, make use of the
-         AST library to interpret the information). For further details,
-         see the section {\tt{"}}The NATIVE Encoding{\tt{"}} below.
-      }
-   }
-   \sstdiytopic{
-      Choice of Default Encoding
-   }{
-      If the Encoding attribute of a FitsChan is not set, the default
-      value it takes is determined by the presence of certain critical
-      FITS keywords within the FitsChan. The sequence of decisions
-      used to arrive at the default value is as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         If the FitsChan contains any keywords beginning with the
-         string {\tt{"}}BEGAST{\tt{"}}, then NATIVE encoding is used,
-
-         \sstitem
-         Otherwise, FITS-CLASS is used if the FitsChan contains a DELTAV
-         keyword and a keyword of the form VELO-xxx, where xxx indicates one
-         of the rest frames used by class (e.g. {\tt{"}}VELO-LSR{\tt{"}}).
-
-         \sstitem
-         Otherwise, if the FitsChan contains a CTYPE keyword which
-         represents a spectral axis using the conventions of the AIPS and
-         AIPS$+$$+$ projects (e.g. {\tt{"}}FELO-LSR{\tt{"}}, etc), then one of FITS-AIPS or
-         FITS-AIPS$+$$+$ encoding is used. FITS-AIPS$+$$+$ is used if any of the
-         keywords CDi\_j, PROJP, LONPOLE or LATPOLE are
-         found in the FitsChan. Otherwise FITS-AIPS is used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         {\tt{"}}PCiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
-         FITS-PC encoding is used,
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         {\tt{"}}CDiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
-         FITS-IRAF encoding is used,
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         {\tt{"}}CDi\_j{\tt{"}}, and at least one of RADECSYS, PROJPi, or CjVALi
-         where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then FITS-IRAF encoding is
-         used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains any keywords of the form
-         PROJPi, CjVALi or RADECSYS, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits,
-         then FITS-PC encoding is used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         CROTAi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-AIPS encoding is
-         used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         CRVALi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-WCS encoding is
-         used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains the {\tt{"}}PLTRAH{\tt{"}} keyword, then
-         DSS encoding is used,
-
-         \sstitem
-         Otherwise, if none of these conditions is met (as would be the
-         case when using an empty FitsChan), then NATIVE encoding is
-         used.
-
-      }
-      Except for the NATIVE and DSS encodings, all the above checks
-      also require that the header contains at least one CTYPE, CRPIX and
-      CRVAL keyword (otherwise the checking process continues to the next
-      case).
-
-      Setting an explicit value for the Encoding attribute always
-      over-rides this default behaviour.
-
-      Note that when writing information to a FitsChan, the choice of
-      encoding will depend greatly on the type of application you
-      expect to be reading the information in future. If you do not
-      know this, there may sometimes be an advantage in writing the
-      information several times, using a different encoding on each
-      occasion.
-   }
-   \sstdiytopic{
-      The DSS Encoding
-   }{
-      The DSS encoding uses FITS header cards to store a multi-term
-      polynomial which relates pixel positions on a digitised
-      photographic plate to celestial coordinates (right ascension and
-      declination). This encoding may only be used to store a single
-      AST Object in any set of FITS header cards, and that Object must
-      be a \htmlref{FrameSet}{FrameSet} which conforms to the STScI/DSS coordinate system
-      model (this means the \htmlref{Mapping}{Mapping} which relates its base and current
-      Frames must include either a \htmlref{DssMap}{DssMap} or a \htmlref{WcsMap}{WcsMap} with type
-      AST\_\_TAN or AST\_\_TPN).
-
-      When reading a DSS encoded Object (using AST\_READ), the FitsChan
-      concerned must initially be positioned at the first card (its
-      \htmlref{Card}{Card} attribute must equal 1) and the result of the read, if
-      successful, will always be a pointer to a FrameSet. The base
-      \htmlref{Frame}{Frame} of this FrameSet represents DSS pixel coordinates, and the
-      current Frame represents DSS celestial coordinates. Such a read
-      is always destructive and causes the FITS header cards required
-      for the construction of the FrameSet to be removed from the
-      FitsChan, which is then left positioned at the {\tt{"}}end-of-file{\tt{"}}. A
-      subsequent read using the same encoding will therefore not
-      return another FrameSet, even if the FitsChan is rewound.
-
-      When AST\_WRITE is used to store a FrameSet using DSS encoding,
-      an attempt is first made to simplify the FrameSet to see if it
-      conforms to the DSS model.  Specifically, the current Frame must
-      be a FK5 \htmlref{SkyFrame}{SkyFrame}; the projection must be a tangent plane
-      (gnomonic) projection with polynomial corrections conforming to
-      DSS requirements, and north must be parallel to the second base
-      Frame axis.
-
-      If the simplification process succeeds, a description of the
-      FrameSet is written to the FitsChan using appropriate DSS FITS
-      header cards. The base Frame of the FrameSet is used to form the
-      DSS pixel coordinate system and the current Frame gives the DSS
-      celestial coordinate system.  A successful write operation will
-      over-write any existing DSS encoded data in the FitsChan, but
-      will not affect other (non-DSS) header cards. If a destructive
-      read of a DSS encoded Object has previously occurred, then an
-      attempt will be made to store the FITS header cards back in
-      their original locations.
-
-      If an attempt to simplify a FrameSet to conform to the DSS model
-      fails (or if the Object supplied is not a FrameSet), then no
-      data will be written to the FitsChan and AST\_WRITE will return
-      zero. No error will result.
-   }
-   \sstdiytopic{
-      The FITS-WCS Encoding
-   }{
-      The FITS-WCS convention uses FITS header cards to describe the
-      relationship between pixels in an image (not necessarily
-      2-dimensional) and one or more related {\tt{"}}world coordinate systems{\tt{"}}.
-      The FITS-WCS encoding may only be used to store a single AST Object
-      in any set of FITS header cards, and that Object must be a FrameSet
-      which conforms to the FITS-WCS model (the FrameSet may, however,
-      contain multiple Frames which will be result in multiple FITS
-      {\tt{"}}alternate axis descriptions{\tt{"}}). Details of the use made by this
-      Encoding of the conventions described in the FITS-WCS papers are
-      given in the appendix {\tt{"}}FITS-WCS Coverage{\tt{"}} of this document. A few
-      main points are  described below.
-
-      The rotation and scaling of the intermediate world coordinate system
-      can be specified using either {\tt{"}}CDi\_j{\tt{"}} keywords, or {\tt{"}}PCi\_j{\tt{"}} together
-      with {\tt{"}}CDELTi{\tt{"}} keywords. When writing a FrameSet to a FitsChan, the
-      the value of the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan determines
-      which system is used.
-
-      In addition, this encoding supports the {\tt{"}}TAN with polynomial correction
-      terms{\tt{"}} projection which was included in a draft of the FITS-WCS paper,
-      but was not present in the final version. A {\tt{"}}TAN with polynomial
-      correction terms{\tt{"}} projection is represented using a WcsMap with type
-      AST\_\_TPN (rather than AST\_\_TAN which is used to represent simple
-      TAN projections). When reading a FITS header, a CTYPE keyword value
-      including a {\tt{"}}-TAN{\tt{"}} code results in an AST\_\_TPN projection if there are
-      any projection parameters (given by the \htmlref{PVi\_m}{PVi_m} keywords) associated with
-      the latitude axis, or if there are projection parameters associated
-      with the longitude axis for m greater than 4. When writing a
-      FrameSet to a FITS header, an AST\_\_TPN projection gives rise to a
-      CTYPE value including the normal {\tt{"}}-TAN{\tt{"}} code, but the projection
-      parameters are stored in keywords with names {\tt{"}}QVi\_m{\tt{"}}, instead of the
-      usual {\tt{"}}PVi\_m{\tt{"}}. Since these QV parameters are not part of the
-      FITS-WCS standard they will be ignored by other non-AST software,
-      resulting in the WCS being interpreted as a simple TAN projection
-      without any corrections. This should be seen as an interim solution
-      until such time as an agreed method for describing projection
-      distortions within FITS-WCS has been published.
-
-      AST extends the range of celestial coordinate sytstems which may be
-      described using this encoding by inclusion of the allowing the use of
-      {\tt{"}}AZ--{\tt{"}} and {\tt{"}}EL--{\tt{"}} as the coordinate specification within CTYPE
-      values. These form a longitude/latitude pair of axes which describe
-      azimuth and elevation. The geographic position of the observer
-      should be supplied using the OBSGEO-X/Y/Z keywords described in FITS-WCS
-      paper III. Currently, a simple model is used which includes diurnal
-      aberration, but ignores atmospheric refraction, polar motion, etc.
-      These may be added in a leter release.
-
-      When reading a FITS-WCS encoded Object (using AST\_READ), the FitsChan
-      concerned must initially be positioned at the first card (its
-      Card attribute must equal 1) and the result of the read, if
-      successful, will always be a pointer to a FrameSet. The base
-      Frame of this FrameSet represents FITS-WCS pixel coordinates,
-      and the current Frame represents the physical coordinate system
-      described by the FITS-WCS primary axis descriptions. If
-      secondary axis descriptions are also present, then the FrameSet
-      may contain additional (non-current) Frames which represent
-      these.  Such a read is always destructive and causes the FITS
-      header cards required for the construction of the FrameSet to be
-      removed from the FitsChan, which is then left positioned at the
-      {\tt{"}}end-of-file{\tt{"}}. A subsequent read using the same encoding will
-      therefore not return another FrameSet, even if the FitsChan is
-      rewound.
-
-      When AST\_WRITE is used to store a FrameSet using FITS-WCS
-      encoding, an attempt is first made to simplify the FrameSet to
-      see if it conforms to the FITS-WCS model. If this simplification
-      process succeeds (as it often should, as the model is reasonably
-      flexible), a description of the FrameSet is written to the
-      FitsChan using appropriate FITS header cards. The base Frame of
-      the FrameSet is used to form the FITS-WCS pixel coordinate
-      system and the current Frame gives the physical coordinate
-      system to be described by the FITS-WCS primary axis
-      descriptions.  Any additional Frames in the FrameSet may be used
-      to construct secondary axis descriptions, where appropriate.
-
-      A successful write operation will over-write any existing
-      FITS-WCS encoded data in the FitsChan, but will not affect other
-      (non-FITS-WCS) header cards. If a destructive read of a FITS-WCS
-      encoded Object has previously occurred, then an attempt will be
-      made to store the FITS header cards back in their original
-      locations. Otherwise, the new cards will be inserted following
-      any other FITS-WCS related header cards present or, failing
-      that, in front of the current card (as given by the Card
-      attribute).
-
-      If an attempt to simplify a FrameSet to conform to the FITS-WCS
-      model fails (or if the Object supplied is not a FrameSet), then
-      no data will be written to the FitsChan and AST\_WRITE will
-      return zero. No error will result.
-   }
-   \sstdiytopic{
-      The FITS-IRAF Encoding
-   }{
-      The FITS-IRAF encoding can, for most purposes, be considered as
-      a subset of the FITS-WCS encoding (above), although it differs
-      in the details of the FITS keywords used. It is used in exactly
-      the same way and has the same restrictions, but with the
-      addition of the following:
-
-      \sstitemlist{
-
-         \sstitem
-         The only celestial coordinate systems that may be represented
-         are equatorial, galactic and ecliptic,
-
-         \sstitem
-         Sky projections can be represented only if any associated
-         projection parameters are set to their default values.
-
-         \sstitem
-         Secondary axis descriptions are not supported, so when writing
-         a FrameSet to a FitsChan, only information from the base and
-         current Frames will be stored.
-
-      }
-      Note that this encoding is provided mainly as an interim measure to
-      provide a more stable alternative to the FITS-WCS encoding until the
-      FITS standard for encoding WCS information is finalised.  The name
-      {\tt{"}}FITS-IRAF{\tt{"}} indicates the general keyword conventions used and does
-      not imply that this encoding will necessarily support all features of
-      the WCS scheme used by IRAF software. Nevertheless, an attempt has
-      been made to support a few such features where they are known to be
-      used by important sources of data.
-
-      When writing a FrameSet using the FITS-IRAF encoding, axis rotations
-      are specified by a matrix of FITS keywords of the form {\tt{"}}CDi\_j{\tt{"}}, where
-      {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits. The alternative form {\tt{"}}CDiiijjj{\tt{"}}, which
-      is also in use, is recognised when reading an Object, but is never
-      written.
-
-      In addition, the experimental IRAF {\tt{"}}ZPX{\tt{"}} and {\tt{"}}TNX{\tt{"}} sky projections will
-      be accepted when reading, but will never be written (the corresponding
-      FITS {\tt{"}}ZPN{\tt{"}} or {\tt{"}}distorted TAN{\tt{"}} projection being used instead). However,
-      there are restrictions on the use of these experimental projections.
-      For {\tt{"}}ZPX{\tt{"}}, longitude and latitude correction surfaces (appearing as
-      {\tt{"}}lngcor{\tt{"}} or {\tt{"}}latcor{\tt{"}} terms in the IRAF-specific {\tt{"}}WAT{\tt{"}} keywords) are
-      not supported. For {\tt{"}}TNX{\tt{"}} projections, only cubic surfaces encoded as
-      simple polynomials with {\tt{"}}half cross-terms{\tt{"}} are supported. If an
-      un-usable {\tt{"}}TNX{\tt{"}} or {\tt{"}}ZPX{\tt{"}} projection is encountered while reading
-      from a FitsChan, a simpler form of TAN or ZPN projection is used
-      which ignores the unsupported features and may therefore be
-      inaccurate. If this happens, a warning message is added to the
-      contents of the FitsChan as a set of cards using the keyword {\tt{"}}ASTWARN{\tt{"}}.
-
-      You should not normally attempt to mix the foreign FITS encodings within
-      the same FitsChan, since there is a risk that keyword clashes may occur.
-   }
-   \sstdiytopic{
-      The FITS-PC Encoding
-   }{
-      The FITS-PC encoding can, for most purposes, be considered as
-      equivalent to the FITS-WCS encoding (above), although it differs
-      in the details of the FITS keywords used. It is used in exactly
-      the same way and has the same restrictions.
-   }
-   \sstdiytopic{
-      The FITS-AIPS Encoding
-   }{
-      The FITS-AIPS encoding can, for most purposes, be considered as
-      equivalent to the FITS-WCS encoding (above), although it differs
-      in the details of the FITS keywords used. It is used in exactly
-      the same way and has the same restrictions, but with the
-      addition of the following:
-
-      \sstitemlist{
-
-         \sstitem
-         The only celestial coordinate systems that may be represented
-         are equatorial, galactic and ecliptic,
-
-         \sstitem
-         Spectral axes can only be represented if they represent
-         frequency, radio velocity or optical velocity, and are linearly
-         sampled in frequency. In addition, the standard of rest
-         must be LSRK, LSRD, barycentric or geocentric.
-
-         \sstitem
-         Sky projections can be represented only if any associated
-         projection parameters are set to their default values.
-
-         \sstitem
-         The AIT, SFL and MER projections can only be written if the CRVAL
-         keywords are zero for both longitude and latitude axes.
-
-         \sstitem
-         Secondary axis descriptions are not supported, so when writing
-         a FrameSet to a FitsChan, only information from the base and
-         current Frames will be stored.
-
-         \sstitem
-         If there are more than 2 axes in the base and current Frames, any
-         rotation must be restricted to the celestial plane, and must involve
-         no shear.
-      }
-   }
-   \sstdiytopic{
-      The FITS-AIPS$+$$+$ Encoding
-   }{
-      The FITS-AIPS$+$$+$ encoding is based on the FITS-AIPS encoding, but
-      includes some features of the FITS-IRAF and FITS-PC encodings.
-      Specifically, any celestial projections supported by FITS-PC may be
-      used, including those which require parameterisation, and the axis
-      rotation and scaling may be specified using CDi\_j keywords. When
-      writing a FITS header, rotation will be specified using CROTA/CDELT
-      keywords if possible, otherwise CDi\_j keywords will be used instead.
-   }
-   \sstdiytopic{
-      The FITS-CLASS Encoding
-   }{
-      The FITS-CLASS encoding uses the conventions of the CLASS project.
-      These are described in the section {\tt{"}}Developer Manual{\tt{"}}/{\tt{"}}CLASS FITS
-      Format{\tt{"}} contained in the CLASS documentation at:
-
-      http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html.
-
-      This encoding is similar to FITS-AIPS with the following restrictions:
-
-      \sstitemlist{
-
-         \sstitem
-         When a \htmlref{SpecFrame}{SpecFrame} is created by reading a FITS-CLASS header, the
-           attributes describing the observer's position (\htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon} and
-           \htmlref{ObsAlt}{ObsAlt}) are left unset because the CLASS encoding does not specify
-           these values. Conversions to or from the topocentric standard of rest
-           will therefore be inaccurate (typically by up to about 0.5 km/s)
-           unless suitable values are assigned to these attributes after the
-           FrameSet has been created.
-
-         \sstitem
-         When writing a FrameSet to a FITS-CLASS header, the current Frame
-           in the FrameSet must have at least 3 WCS axes, of which one must be
-           a linear spectral axis. The spectral axis in the created header will
-           always describe frequency. If the spectral axis in the supplied
-           FrameSet refers to some other system (e.g. radio velocity, etc),
-           then it will be converted to frequency.
-
-         \sstitem
-         There must be a pair of celestial axes - either (RA,Dec) or
-           (GLON,GLAT). RA and Dec must be either FK4/B1950 or FK5/J2000.
-
-         \sstitem
-         A limited range of projection codes (TAN, ARC, STG, AIT, SFL, SIN)
-           can be used. For AIT and SFL, the reference point must be at the
-           origin of longitude and latitude. For SIN, the associated projection
-           parameters must both be zero.
-
-         \sstitem
-         No rotation of the celestial axes is allowed, unless the spatial
-           axes are degenerate (i.e. cover only a single pixel).
-
-         \sstitem
-         The frequency axis in the created header will always describe
-           frequency in the source rest frame. If the supplied FrameSet uses
-           some other standard of rest then suitable conversion will be applied.
-
-         \sstitem
-         The source velocity must be defined. In other words, the SpecFrame
-           attributes \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} must have been assigned values.
-
-         \sstitem
-         The frequency axis in a FITS-CLASS header does not represent
-           absolute frequency, but instead represents offsets from the rest
-           frequency in the standard of rest of the source.
-
-      }
-      When writing a FrameSet out using FITS-CLASS encoding, the current
-      Frame may be temporarily modified if this will allow the header
-      to be produced. If this is done, the associated pixel-$>$WCS Mapping
-      will also be modified to take account of the changes to the Frame.
-      The modifications performed include re-ordering axes (WCS axes, not
-      pixel axes), changing spectral coordinate system and standard of
-      rest, changing the celestial coordinate system and reference equinox,
-      and changing axis units.
-   }
-   \sstdiytopic{
-      The NATIVE Encoding
-   }{
-      The NATIVE encoding may be used to store a description of any
-      class of AST Object in the form of FITS header cards, and (for
-      most practical purposes) any number of these Object descriptions
-      may be stored within a single set of FITS cards. If multiple
-      Object descriptions are stored, they are written and read
-      sequentially. The NATIVE encoding makes use of unique FITS
-      keywords which are designed not to clash with keywords that have
-      already been used for other purposes (if a potential clash is
-      detected, an alternative keyword is constructed to avoid the
-      clash).
-
-      When reading a NATIVE encoded object from a FitsChan (using
-      AST\_READ), FITS header cards are read, starting at the current
-      card (as determined by the Card attribute), until the start of
-      the next Object description is found. This description is then
-      read and converted into an AST Object, for which a pointer is
-      returned. Such a read is always destructive and causes all the
-      FITS header cards involved in the Object description to be
-      removed from the FitsChan, which is left positioned at the
-      following card.
-
-      The Object returned may be of any class, depending on the
-      description that was read, and other AST routines may be used to
-      validate it (for example, by examining its \htmlref{Class}{Class} or \htmlref{ID}{ID} attribute
-      using AST\_GETC). If further NATIVE encoded Object descriptions
-      exist in the FitsChan, subsequent calls to AST\_READ will return
-      the Objects they describe in sequence (and destroy their
-      descriptions) until no more remain between the current card and
-      the {\tt{"}}end-of-file{\tt{"}}.
-
-      When AST\_WRITE is used to write an Object using NATIVE encoding,
-      a description of the Object is inserted immediately before the
-      current card (as determined by the Card attribute).  Multiple
-      Object descriptions may be written in this way and are stored
-      separately (and sequentially if the Card attribute is not
-      modified between the writes). A write operation using the NATIVE
-      encoding does not over-write previously written Object
-      descriptions. Note, however, that subsequent behaviour is
-      undefined if an Object description is written inside a
-      previously-written description, so this should be avoided.
-
-      When an Object is written to a FitsChan using NATIVE encoding,
-      AST\_WRITE should (barring errors) always transfer data and
-      return a value of 1.
-   }
-}
-\sstroutine{
-   Epoch\sstlabel{Epoch}
-}{
-   Epoch of observation
-}{
-   \sstdescription{
-      This attribute is used to qualify the coordinate systems described by
-      a \htmlref{Frame}{Frame}, by giving the moment in time when the coordinates are known
-      to be correct. Often, this will be the date of observation, and is
-      important in cases where coordinates systems move with respect to each
-      other over the course of time.
-
-      The Epoch attribute is stored as a Modified Julian Date, but
-      when setting its value it may be given in a variety of
-      formats. See the {\tt{"}}Input Formats{\tt{"}} section (below) for details.
-      Strictly, the Epoch value should be supplied in the TDB timescale,
-      but for some purposes (for instance, for converting sky positions
-      between different types of equatorial system) the timescale is not
-      significant, and UTC may be used.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute. The basic Frame class provides
-         a default of J2000.0 (Julian) but makes no use of the Epoch value.
-         This is because the Frame class does not distinguish between
-         different Cartesian coordinate systems (see the \htmlref{System}{System} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The default Epoch value for a CmpFrame is selected as follows;
-         if the Epoch attribute has been set in the first component Frame
-         then the Epoch value from the first component Frame is used as
-         the default for the CmpFrame. Otherwise, if the Epoch attribute has
-         been set in the second component Frame then the Epoch value from the
-         second component Frame is used as the default for the CmpFrame.
-         Otherwise, the default Epoch value from the first component
-         Frame is used as the default for the CmpFrame. When the Epoch
-         attribute of a CmpFrame is set or cleared, it is also set or
-         cleared in the two component Frames.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Epoch attribute of a FrameSet is the same as that of its current
-         Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The coordinates of sources within a SkyFrame can changed with time
-         for various reasons, including: (i) changing aberration of light
-         caused by the observer's velocity (e.g. due to the Earth's motion
-         around the Sun), (ii) changing gravitational deflection by the Sun
-         due to changes in the observer's position with time, (iii) fictitious
-         motion due to rotation of non-inertial coordinate systems (e.g. the
-         old FK4 system), and (iv) proper motion of the source itself (although
-         this last effect is not handled by the SkyFrame class because it
-         affects individual sources rather than the coordinate system as
-         a whole).
-
-         The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the
-         old FK4-based coordinate systems (see the System attribute) and
-         J2000.0 (Julian) for all others.
-
-         Care must be taken to distinguish the Epoch value, which relates to
-         motion (or apparent motion) of the source, from the superficially
-         similar \htmlref{Equinox}{Equinox} value. The latter is used to qualify a coordinate
-         system which is itself in motion in a (notionally) predictable way
-         as a result of being referred to a slowly moving reference plane
-         (e.g. the equator).
-
-         See the description of the System attribute for details of which
-         qualifying attributes apply to each celestial coordinate system.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         A TimeFrame describes a general time axis and so cannot be completely
-         characterised by a single Epoch value. For this reason the TimeFrame
-         class makes no use of the Epoch attribute. However, user code can
-         still make use of the attribute if necessary to represent a {\tt{"}}typical{\tt{"}}
-         time spanned by the TimeFrame. The default Epoch value for a TimeFrame
-         will be the TDB equivalent of the current value of the TimeFrame's
-         \htmlref{TimeOrigin}{TimeOrigin} attribute. If no value has been set for TimeOrigin,
-         then the default Epoch value is J2000.0.
-      }
-   }
-   \sstdiytopic{
-      Input Formats
-   }{
-      The formats accepted when setting an Epoch value are listed
-      below. They are all case-insensitive and are generally tolerant
-      of extra white space and alternative field delimiters:
-
-      \sstitemlist{
-
-         \sstitem
-         Besselian Epoch: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
-         \sstitem
-         Julian Epoch: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
-         \sstitem
-         Year: Decimal years, with or without decimal places ({\tt{"}}1996.8{\tt{"}}
-         for example).  Such values are interpreted as a Besselian epoch
-         (see above) if less than 1984.0 and as a Julian epoch otherwise.
-
-         \sstitem
-         Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
-         example).
-
-         \sstitem
-         Modified Julian Date: With or without decimal places
-         ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
-         \sstitem
-         Gregorian Calendar Date: With the month expressed either as an
-         integer or a 3-character abbreviation, and with optional decimal
-         places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
-         {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
-         given, the time refers to the start of the day (zero hours).
-
-         \sstitem
-         Gregorian Date and Time: Any calendar date (as above) but with
-         a fraction of a day expressed as hours, minutes and seconds
-         ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
-         separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
-      }
-   }
-   \sstdiytopic{
-      Output Format
-   }{
-      When enquiring Epoch values, the format used is the {\tt{"}}Year{\tt{"}}
-      format described under {\tt{"}}Input Formats{\tt{"}}. This is a value in
-      decimal years which will be a Besselian epoch if less than
-      1984.0 and a Julian epoch otherwise.  By omitting any character
-      prefix, this format allows the Epoch value to be obtained as
-      either a character string or a floating point value.
-   }
-}
-\sstroutine{
-   Equinox\sstlabel{Equinox}
-}{
-   Epoch of the mean equinox
-}{
-   \sstdescription{
-      This attribute is used to qualify those celestial coordinate
-      systems described by a \htmlref{SkyFrame}{SkyFrame} which are notionally based on
-      the ecliptic (the plane of the Earth's orbit around the Sun)
-      and/or the Earth's equator.
-
-      Both of these planes are in motion and their positions are
-      difficult to specify precisely. In practice, therefore, a model
-      ecliptic and/or equator are used instead. These, together with
-      the point on the sky that defines the coordinate origin (the
-      intersection of the two planes termed the {\tt{"}}mean equinox{\tt{"}}) move
-      with time according to some model which removes the more rapid
-      fluctuations. The SkyFrame class supports both the FK4 and
-      FK5 models.
-
-      The position of a fixed source expressed in any of these
-      coordinate systems will appear to change with time due to
-      movement of the coordinate system itself (rather than motion of
-      the source).  Such coordinate systems must therefore be
-      qualified by a moment in time (the {\tt{"}}epoch of the mean equinox{\tt{"}}
-      or {\tt{"}}equinox{\tt{"}} for short) which allows the position of the model
-      coordinate system on the sky to be determined. This is the role
-      of the Equinox attribute.
-
-      The Equinox attribute is stored as a Modified Julian Date, but
-      when setting or getting its value you may use the same formats
-      as for the \htmlref{Epoch}{Epoch} attribute (q.v.).
-
-      The default Equinox value is B1950.0 (Besselian) for the old
-      FK4-based coordinate systems (see the \htmlref{System}{System} attribute) and
-      J2000.0 (Julian) for all others.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Care must be taken to distinguish the Equinox value, which
-         relates to the definition of a time-dependent coordinate system
-         (based on solar system reference planes which are in motion),
-         from the superficially similar Epoch value. The latter is used
-         to qualify coordinate systems where the positions of sources
-         change with time (or appear to do so) for a variety of other
-         reasons, such as aberration of light caused by the observer's
-         motion, etc.
-
-         \sstitem
-         See the description of the System attribute for details of
-         which qualifying attributes apply to each celestial coordinate
-         system.
-      }
-   }
-}
-\sstroutine{
-   Escape\sstlabel{Escape}
-}{
-   Allow changes of character attributes within strings?
-}{
-   \sstdescription{
-      This attribute controls the appearance of text strings and numerical
-      labels drawn by the \htmlref{AST\_GRID}{AST_GRID} and (for the \htmlref{Plot}{Plot} class) \htmlref{AST\_TEXT}{AST_TEXT} routines,
-      by determining if any escape sequences contained within the strings
-      should be used to control the appearance of the text, or should
-      be printed literally. Note, the \htmlref{Plot3D}{Plot3D} class only interprets escape
-      sequences within the
-      AST\_GRID routine.
-
-      If the Escape value of a Plot is one (the default), then any
-      escape sequences in text strings produce the effects described
-      below when printed. Otherwise, they are printed literally.
-
-      See also the \htmlref{AST\_ESCAPES}{AST_ESCAPES} function.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Escape Sequences
-   }{
-      Escape sequences are introduced into the text string by a percent
-      {\tt{"}}\%{\tt{"}} character. Any unrecognised, illegal or incomplete escape sequences
-      are printed literally. The following escape sequences are
-      currently recognised ({\tt{"}}...{\tt{"}} represents a string of one or more
-      decimal digits):
-
-        \%\%      - Print a literal {\tt{"}}\%{\tt{"}} character.
-
-        \%$\wedge$...$+$  - Draw subsequent characters as super-scripts. The digits
-                  {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
-                  text to the base-line of the super-script text, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-        \%$\wedge$$+$     - Draw subsequent characters with the normal base-line.
-
-        \%v...$+$  - Draw subsequent characters as sub-scripts. The digits
-                  {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
-                  text to the base-line of the sub-script text, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-
-        \%v$+$     - Draw subsequent characters with the normal base-line
-                  (equivalent to \%$\wedge$$+$).
-
-        \%$>$...$+$  - Leave a gap before drawing subsequent characters.
-                  The digits {\tt{"}}...{\tt{"}} give the size of the gap, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-
-        \%$<$...$+$  - Move backwards before drawing subsequent characters.
-                  The digits {\tt{"}}...{\tt{"}} give the size of the movement, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-
-        \%s...$+$  - Change the Size attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Size as a fraction of the
-                  {\tt{"}}normal{\tt{"}} Size, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
-                  to 1.0;
-
-        \%s$+$     - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%w...$+$  - Change the Width attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new width as a fraction of the
-                  {\tt{"}}normal{\tt{"}} Width, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
-                  to 1.0;
-
-        \%w$+$     - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%f...$+$  - Change the Font attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Font value.
-
-        \%f$+$     - Reset the Font attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%c...$+$  - Change the Colour attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Colour value.
-
-        \%c$+$     - Reset the Colour attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%t...$+$  - Change the Style attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Style value.
-
-        \%t$+$     - Reset the Style attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%h$+$     - Remember the current horizontal position (see {\tt{"}}\%g$+${\tt{"}})
-
-        \%g$+$     - Go to the horizontal position of the previous {\tt{"}}\%h$+${\tt{"}} (if any).
-
-        \%-      - Push the current graphics attribute values onto the top of
-                  the stack (see {\tt{"}}\%$+${\tt{"}}).
-
-        \%$+$      - Pop attributes values of the top the stack (see {\tt{"}}\%-{\tt{"}}). If
-                  the stack is empty, {\tt{"}}normal{\tt{"}} attribute values are restored.
-   }
-}
-\sstroutine{
-   FillFactor\sstlabel{FillFactor}
-}{
-   Fraction of the Region which is of interest
-}{
-   \sstdescription{
-      This attribute indicates the fraction of the \htmlref{Region}{Region} which is of
-      interest. AST does not use this attribute internally for any purpose.
-      Typically, it could be used to indicate the fraction of the Region for
-      which data is available.
-
-      The supplied value must be in the range 0.0 to 1.0, and the default
-      value is 1.0 (except as noted below).
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default FillFactor for a CmpRegion is the FillFactor of its
-         first component Region.
-      }
-      \sstsubsection{
-         \htmlref{Prism}{Prism}
-      }{
-         The default FillFactor for a Prism is the product of the
-         FillFactors of its two component Regions.
-      }
-      \sstsubsection{
-         \htmlref{Stc}{Stc}
-      }{
-         The default FillFactor for an Stc is the FillFactor of its
-         encapsulated Region.
-      }
-   }
-}
-\sstroutine{
-   FitsDigits\sstlabel{FitsDigits}
-}{
-   Digits of precision for floating point FITS values
-}{
-   \sstdescription{
-      This attribute gives the number of significant decimal digits to
-      use when formatting floating point values for inclusion in the
-      FITS header cards within a \htmlref{FitsChan}{FitsChan}.
-
-      By default, a positive value is used which results in no loss of
-      information, assuming that the value is double precision.
-      Usually, this causes no problems.
-
-      However, to adhere strictly to the recommendations of the FITS
-      standard, the width of the formatted value (including sign,
-      decimal point and exponent) ought not to be more than 20
-      characters. If you are concerned about this, you should set
-      FitsDigits to a negative value, such as -15. In this case, the
-      absolute value ($+$15) indicates the maximum number of significant
-      digits to use, but the actual number used may be fewer than this
-      to ensure that the FITS recommendations are satisfied. When
-      using this approach, the resulting number of significant digits
-      may depend on the value being formatted and on the presence of
-      any sign, decimal point or exponent.
-
-      The value of this attribute is effective when FITS header cards
-      are output, either using
-      \htmlref{AST\_FINDFITS}{AST_FINDFITS} or by the action of the FitsChan's sink routine
-      when it is finally deleted.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Font(element)\sstlabel{Fontelement}
-}{
-   Character font for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the character font index used when
-      drawing each element of graphical output produced by a \htmlref{Plot}{Plot}. It
-      takes a separate value for each graphical element so that, for
-      instance, the setting {\tt{"}}Font(title)=2{\tt{"}} causes the Plot title to
-      be drawn using font number 2.
-
-      The range of integer font indices available and the appearance
-      of the resulting text is determined by the underlying graphics
-      system.  The default behaviour is for all graphical elements to
-      be drawn using the default font supplied by this graphics
-      system.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Font{\tt{"}} instead
-         of {\tt{"}}Font(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
-         affect the attribute value of all graphical elements, while a
-         {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Font(TextLab)
-         value.
-      }
-   }
-}
-\sstroutine{
-   Format(axis)\sstlabel{Formataxis}
-}{
-   Format specification for axis values
-}{
-   \sstdescription{
-      This attribute specifies the format to be used when displaying
-      coordinate values associated with a particular \htmlref{Frame}{Frame} axis
-      (i.e. to convert values from binary to character form). It is
-      interpreted by the \htmlref{AST\_FORMAT}{AST_FORMAT} function and determines the
-      formatting which it applies.
-
-      If no Format value is set for a Frame axis, a default value is
-      supplied instead. This is based on the value of the Digits, or
-      Digits(axis), attribute and is chosen so that it displays the
-      requested number of digits of precision.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The Frame class interprets this attribute as a format
-         specification string to be passed to the C {\tt{"}}printf{\tt{"}} function
-         (e.g. {\tt{"}}\%1.7G{\tt{"}}) in order to format a single coordinate value
-         (supplied as a double precision number).
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the syntax and default value of
-         the Format string to allow the formatting of sexagesimal
-         values as appropriate for the particular celestial coordinate
-         system being represented. The syntax of SkyFrame Format
-         strings is described (below) in the {\tt{"}}SkyFrame Formats{\tt{"}}
-         section.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Format attribute of a FrameSet axis is the same as that
-         of its current Frame (as specified by the \htmlref{Current}{Current}
-         attribute). Note that the syntax of the Format string is also
-         determined by the current Frame.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class extends the syntax of the Format string to
-         allow the formatting of TimeFrame axis values as Gregorian calendar
-         dates and times. The syntax of TimeFrame Format strings is described
-         (below) in the {\tt{"}}TimeFrame Formats{\tt{"}} section.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-   \sstdiytopic{
-      SkyFrame Formats
-   }{
-      The Format string supplied for a SkyFrame should contain zero or
-      more of the following characters. These may occur in any order,
-      but the following is recommended for clarity:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}$+${\tt{"}}: Indicates that a plus sign should be prefixed to positive
-         values. By default, no plus sign is used.
-
-         \sstitem
-         {\tt{"}}z{\tt{"}}: Indicates that leading zeros should be prefixed to the
-         value so that the first field is of constant width, as would be
-         required in a fixed-width table (leading zeros are always
-         prefixed to any fields that follow). By default, no leading
-         zeros are added.
-
-         \sstitem
-         {\tt{"}}i{\tt{"}}: Use the standard ISO field separator (a colon) between
-         fields. This is the default behaviour.
-
-         \sstitem
-         {\tt{"}}b{\tt{"}}: Use a blank to separate fields.
-
-         \sstitem
-         {\tt{"}}l{\tt{"}}: Use a letter ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} as appropriate) to
-         separate fields.
-
-         \sstitem
-         {\tt{"}}g{\tt{"}}: Use a letter and symbols to separate fields ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}},
-         etc, as appropriate), but include escape sequences in the formatted
-         value so that the \htmlref{Plot}{Plot} class will draw the separators as small
-         super-scripts.
-
-         \sstitem
-         {\tt{"}}d{\tt{"}}: Include a degrees field. Expressing the angle purely in
-         degrees is also the default if none of {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}}, {\tt{"}}s{\tt{"}} or {\tt{"}}t{\tt{"}} are
-         given.
-
-         \sstitem
-         {\tt{"}}h{\tt{"}}: Express the angle as a time and include an hours field
-         (where 24 hours correspond to 360 degrees). Expressing the angle
-         purely in hours is also the default if {\tt{"}}t{\tt{"}} is given without
-         either {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}}.
-
-         \sstitem
-         {\tt{"}}m{\tt{"}}: Include a minutes field. By default this is not included.
-
-         \sstitem
-         {\tt{"}}s{\tt{"}}: Include a seconds field. By default this is not included.
-         This request is ignored if {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is given, unless a minutes
-         field is also included.
-
-         \sstitem
-         {\tt{"}}t{\tt{"}}: Express the angle as a time (where 24 hours correspond to
-         360 degrees). This option is ignored if either {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is
-         given and is intended for use where the value is to be expressed
-         purely in minutes and/or seconds of time (with no hours
-         field). If {\tt{"}}t{\tt{"}} is given without {\tt{"}}d{\tt{"}}, {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} being
-         present, then it is equivalent to {\tt{"}}h{\tt{"}}.
-
-         \sstitem
-         {\tt{"}}.{\tt{"}}: Indicates that decimal places are to be given for the
-         final field in the formatted string (whichever field this
-         is). The {\tt{"}}.{\tt{"}} should be followed immediately by an unsigned
-         integer which gives the number of decimal places required, or by an
-         asterisk. If an asterisk is supplied, a default number of decimal
-         places is used which is based on the value of the Digits
-         attribute.
-
-      }
-      All of the above format specifiers are case-insensitive. If
-      several characters make conflicting requests (e.g. if both {\tt{"}}i{\tt{"}}
-      and {\tt{"}}b{\tt{"}} appear), then the character occurring last takes
-      precedence, except that {\tt{"}}d{\tt{"}} and {\tt{"}}h{\tt{"}} always override {\tt{"}}t{\tt{"}}.
-
-      If the format string starts with a percentage sign (\%), then the
-      whole format string is assumed to conform to the syntax defined by
-      the Frame class, and the axis values is formated as a decimal
-      radians value.
-   }
-   \sstdiytopic{
-      TimeFrame Formats
-   }{
-      The Format string supplied for a TimeFrame should either use the
-      syntax defined by the base Frame class (i.e. a C {\tt{"}}printf{\tt{"}} format
-      string), or the extended {\tt{"}}iso{\tt{"}} syntax described below (the default
-      value is inherited from the Frame class):
-
-      \sstitemlist{
-
-         \sstitem
-         C {\tt{"}}printf{\tt{"}} syntax: If the Format string is a C {\tt{"}}printf{\tt{"}} format
-         description such as {\tt{"}}\%1.7G{\tt{"}}, the TimeFrame axis value will be
-         formatted without change as a floating point value using this format.
-         The formatted string will thus represent an offset from the zero point
-         specified by the TimeFrame's \htmlref{TimeOrigin}{TimeOrigin} attribute, measured in
-         units given by the TimeFrame's Unit attribute.
-
-         \sstitem
-         {\tt{"}}iso{\tt{"}} syntax: This is used to format a TimeFrame axis value as a
-         Gregorian date followed by an optional time of day. If the Format
-         value commences with the string {\tt{"}}iso{\tt{"}} then the TimeFrame axis value
-         will be converted to an absolute MJD, including the addition of the
-         current TimeOrigin value, and then formatted as a Gregorian date
-         using the format {\tt{"}}yyyy-mm-dd{\tt{"}}. Optionally, the Format value may
-         include an integer precision following the {\tt{"}}iso{\tt{"}} specification (e.g.
-         {\tt{"}}iso.2{\tt{"}}), in which case the time of day will be appended to the
-         formatted date (if no time of day is included, the date field is
-         rounded to the nearest day). The integer value in the Format string
-         indicates the number of decimal places to use in the seconds field. For
-         instance, a Format value of {\tt{"}}iso.0{\tt{"}} produces a time of day of the form
-         {\tt{"}}hh:mm:ss{\tt{"}}, and a Format value of {\tt{"}}iso.2{\tt{"}} produces a time of day of the
-         form {\tt{"}}hh:mm:ss.ss{\tt{"}}. The date and time fields will be separated by a
-         space unless 'T' is appended to the end of string, in which case
-         the letter T (upper case) will be used as the separator. The value of
-         the Digits attribute is ignored when using this {\tt{"}}iso{\tt{"}} format.
-      }
-   }
-}
-\sstroutine{
-   Full\sstlabel{Full}
-}{
-   Set level of output detail
-}{
-   \sstdescription{
-      This attribute is a three-state flag and takes values of -1, 0
-      or $+$1.  It controls the amount of information included in the
-      output generated by a \htmlref{Channel}{Channel}.
-
-      If Full is zero, then a modest amount of
-      non-essential but useful information will be included in the
-      output. If Full is negative, all non-essential information will
-      be suppressed to minimise the amount of output, while if it is
-      positive, the output will include the maximum amount of detailed
-      information about the \htmlref{Object}{Object} being written.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         The default value is zero for a normal Channel.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The default value is zero for a FitsChan.
-      }
-      \sstsubsection{
-         \htmlref{XmlChan}{XmlChan}
-      }{
-         The default value is -1 for an XmlChan.
-      }
-      \sstsubsection{
-         \htmlref{StcsChan}{StcsChan}
-      }{
-         The default value is zero for an StcsChan. Set a positive value
-         to cause default values to be included in STC-S descriptions.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         All positive values supplied for this attribute are converted
-         to $+$1 and all negative values are converted to -1.
-      }
-   }
-}
-\sstroutine{
-   Gap(axis)\sstlabel{Gapaxis}
-}{
-   Interval between linearly spaced major axis values of a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      the linear interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
-      which (for example) major tick marks are drawn. It takes a separate
-      value for each physical axis of the Plot so that, for instance,
-      the setting {\tt{"}}Gap(2)=3.0{\tt{"}} specifies the difference between adjacent major
-      values along the second axis. The Gap attribute is only used when
-      the LogTicks attribute indicates that the spacing between major axis
-      values is to be linear. If major axis values are logarithmically spaced
-      then the gap is specified using attribute LogGap.
-
-      The Gap value supplied will usually be rounded to the nearest
-      {\tt{"}}nice{\tt{"}} value, suitable (e.g.) for generating axis labels, before
-      use. To avoid this {\tt{"}}nicing{\tt{"}} you should set an explicit format
-      for the axis using the \htmlref{Format(axis)}{Formataxis} or \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}
-      attribute. The default behaviour is for the Plot to generate its
-      own Gap value when required, based on the range of axis values
-      to be represented.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Gap value should use the same units as are used internally
-         for storing coordinate values on the corresponding axis. For
-         example, with a celestial coordinate system, the Gap value
-         should be in radians, not hours or degrees.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}Gap{\tt{"}} instead of {\tt{"}}Gap(2){\tt{"}}),
-         then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
-         value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
-         will use just the Gap(1) value.
-      }
-   }
-}
-\sstroutine{
-   Grf\sstlabel{Grf}
-}{
-   Use Grf routines registered through AST\_GRFSET?
-}{
-   \sstdescription{
-      This attribute selects the routines which are used to draw graphics by
-      the \htmlref{Plot}{Plot} class. If it is zero, then the routines in the graphics
-      interface selected at link-time are used (see the \htmlref{ast\_link}{ast_link} script).
-      Otherwise, routines registered using \htmlref{AST\_GRFSET}{AST_GRFSET} are used. In this
-      case, if a routine is needed which has not been registered,
-      then the routine in the graphics interface selected at link-time is
-      used.
-
-      The default is to use the graphics interface
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes, assuming a value of
-         zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The value of this attribute is not saved when the Plot is written
-         out through a \htmlref{Channel}{Channel} to an external data store. On re-loading such
-         a Plot using \htmlref{AST\_READ}{AST_READ}, the attribute will be cleared, resulting in the
-         graphics interface selected at link-time being used.
-      }
-   }
-}
-\sstroutine{
-   Grid\sstlabel{Grid}
-}{
-   Draw grid lines for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether grid lines (a grid of curves marking the {\tt{"}}major{\tt{"}} values
-      on each axis) are drawn across the plotting area.
-
-      If the Grid value of a \htmlref{Plot}{Plot} is non-zero, then grid lines will be
-      drawn. Otherwise, short tick marks on the axes are used to mark
-      the major axis values.  The default behaviour is to use tick
-      marks if the entire plotting area is filled by valid physical
-      coordinates, but to draw grid lines otherwise.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The spacing between major axis values, which determines the
-         spacing of grid lines, may be set using the \htmlref{Gap(axis)}{Gapaxis} attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismAlpha\sstlabel{GrismAlpha}
-}{
-   The angle of incidence of the incoming light on the grating surface
-}{
-   \sstdescription{
-      This attribute holds the angle between the incoming light and the
-      normal to the grating surface, in radians. The default value is 0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismEps\sstlabel{GrismEps}
-}{
-   The angle between the normal and the dispersion plane
-}{
-   \sstdescription{
-      This attribute holds the angle (in radians) between the normal to
-      the grating or exit prism face, and the dispersion plane. The
-      dispersion plane is the plane spanned by the incoming and outgoing
-      ray. The default value is 0.0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismG\sstlabel{GrismG}
-}{
-   The grating ruling density
-}{
-   \sstdescription{
-      This attribute holds the number of grating rulings per unit length.
-      The unit of length used should be consistent with the units used
-      for attributes \htmlref{GrismWaveR}{GrismWaveR} and \htmlref{GrismNRP}{GrismNRP}. The default value is 0.0.
-      (the appropriate value for a pure prism disperser with no grating).
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismM\sstlabel{GrismM}
-}{
-   The interference order
-}{
-   \sstdescription{
-      This attribute holds the interference order being considered.
-      The default value is 0.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismNR\sstlabel{GrismNR}
-}{
-   The refractive index at the reference wavelength
-}{
-   \sstdescription{
-      This attribute holds refractive index of the grism material at the
-      reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default
-      value is 1.0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismNRP\sstlabel{GrismNRP}
-}{
-   The rate of change of refractive index with wavelength
-}{
-   \sstdescription{
-      This attribute holds the rate of change of the refractive index of the
-      grism material with respect to wavelength at the reference wavelength
-      (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default value is 0.0 (the
-      appropriate value for a pure grating disperser with no prism). The
-      units of this attribute should be consistent with those of attributes
-      GrismWaveR and \htmlref{GrismG}{GrismG}.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismTheta\sstlabel{GrismTheta}
-}{
-   Angle between normal to detector plane and reference ray
-}{
-   \sstdescription{
-      This attribute gives the angle of incidence of light of the
-      reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}) onto the
-      detector. Specifically, it holds the angle (in radians) between
-      the normal to the detector plane and an incident ray at the reference
-      wavelength. The default value is 0.0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismWaveR\sstlabel{GrismWaveR}
-}{
-   The reference wavelength
-}{
-   \sstdescription{
-      This attribute holds reference wavelength. The default value is
-      5000 (Angstrom). The units of this attribute should be consistent with
-      those of attributes \htmlref{GrismNRP}{GrismNRP} and \htmlref{GrismG}{GrismG}.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ID\sstlabel{ID}
-}{
-   Object identification string
-}{
-   \sstdescription{
-      This attribute contains a string which may be used to identify
-      the \htmlref{Object}{Object} to which it is attached. There is no restriction on
-      the contents of this string, which is not used internally by the
-      AST library, and is simply returned without change when
-      required. The default value is an empty string.
-
-      An identification string can be valuable when, for example,
-      several Objects have been stored in a file (using \htmlref{AST\_WRITE}{AST_WRITE}) and
-      are later retrieved (using \htmlref{AST\_READ}{AST_READ}). Consistent use of the ID
-      attribute allows the retrieved Objects to be identified without
-      depending simply on the order in which they were stored.
-
-      This attribute may also be useful during debugging, to
-      distinguish similar Objects when using \htmlref{AST\_SHOW}{AST_SHOW} to display them.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Unlike most other attributes, the value of the ID attribute is
-         not transferred when an Object is copied. Instead, its value is
-         undefined (and therefore defaults to an empty string) in any
-         copy. However, it is retained in any external representation of
-         an Object produced by the AST\_WRITE routine.
-      }
-   }
-}
-\sstroutine{
-   IF\sstlabel{IF}
-}{
-   The intermediate frequency in a dual sideband spectrum
-}{
-   \sstdescription{
-      This attribute specifies the (topocentric) intermediate frequency in
-      a dual sideband spectrum. Its sole use is to determine the local
-      oscillator (LO) frequency (the frequency which marks the boundary
-      between the lower and upper sidebands). The LO frequency is
-      equal to the sum of the centre frequency and the intermediate
-      frequency. Here, the {\tt{"}}centre frequency{\tt{"}} is the topocentric
-      frequency in Hz corresponding to the current value of the \htmlref{DSBCentre}{DSBCentre}
-      attribute. The value of the IF attribute may be positive or
-      negative: a positive value results in the LO frequency being above
-      the central frequency, whilst a negative IF value results in the LO
-      frequency being below the central frequency. The sign of the IF
-      attribute value determines the default value for the \htmlref{SideBand}{SideBand}
-      attribute.
-
-      When setting a new value for this attribute, the units in which the
-      frequency value is supplied may be indicated by appending a suitable
-      string to the end of the formatted value. If the units are not
-      specified, then the supplied value is assumed to be in units of GHz.
-      For instance, the following strings all result in an IF of 4 GHz being
-      used: {\tt{"}}4.0{\tt{"}}, {\tt{"}}4.0 GHz{\tt{"}}, {\tt{"}}4.0E9 Hz{\tt{"}}, etc.
-
-      When getting the value of this attribute, the returned value is
-      always in units of GHz. The default value for this attribute is 4 GHz.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Ident\sstlabel{Ident}
-}{
-   Permanent Object identification string
-}{
-   \sstdescription{
-      This attribute is like the \htmlref{ID}{ID} attribute, in that it contains a
-      string which may be used to identify the \htmlref{Object}{Object} to which it is
-      attached. The only difference between ID and Ident is that Ident
-      is transferred when an Object is copied, but ID is not.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ImagFreq\sstlabel{ImagFreq}
-}{
-   The image sideband equivalent of the rest frequency
-}{
-   \sstdescription{
-      This is a read-only attribute giving the frequency which
-      corresponds to the rest frequency but is in the opposite sideband.
-
-      The value is calculated by first transforming the rest frequency
-      (given by the \htmlref{RestFreq}{RestFreq} attribute) from the standard of rest of the
-      source (given by the \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} attributes) to the
-      standard of rest of the observer (i.e. the topocentric standard of
-      rest). The resulting topocentric frequency is assumed to be in the
-      same sideband as the value given for the \htmlref{DSBCentre}{DSBCentre} attribute (the
-      {\tt{"}}observed{\tt{"}} sideband), and is transformed to the other sideband (the
-      {\tt{"}}image{\tt{"}} sideband). The new frequency is converted back to the standard
-      of rest of the source, and the resulting value is returned as the
-      attribute value, in units of GHz.
-   }
-   \sstattributetype{
-      Floating point, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   IntraFlag\sstlabel{IntraFlag}
-}{
-   IntraMap identification string
-}{
-   \sstdescription{
-      This attribute allows an \htmlref{IntraMap}{IntraMap} to be flagged so that it is
-      distinguishable from other IntraMaps. The transformation routine
-      associated with the IntraMap may then enquire the value of this
-      attribute and adapt the transformation it provides according to the
-      particular IntraMap involved.
-
-      Although this is a string attribute, it may often be useful to store
-      numerical values here, encoded as a character string, and to use these
-      as data within the transformation routine. Note, however, that this
-      mechanism is not suitable for transferring large amounts of data (more
-      than about 1000 characters) to an IntraMap. For that purpose, global
-      variables are recommended, although the IntraFlag value can be used to
-      supplement this approach. The default IntraFlag value is an empty
-      string.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         IntraMap
-      }{
-         All IntraMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A pair of IntraMaps whose transformations may potentially cancel
-         cannot be simplified to produce a \htmlref{UnitMap}{UnitMap} (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY})
-         unless they have the same IntraFlag values. The test for equality is
-         case-sensitive.
-      }
-   }
-}
-\sstroutine{
-   Invert\sstlabel{Invert}
-}{
-   Mapping inversion flag
-}{
-   \sstdescription{
-      This attribute controls which one of a \htmlref{Mapping}{Mapping}'s two possible
-      coordinate transformations is considered the {\tt{"}}forward{\tt{"}}
-      transformation (the other being the {\tt{"}}inverse{\tt{"}}
-      transformation). If the attribute value is zero (the default),
-      the Mapping's behaviour will be the same as when it was first
-      created. However, if it is non-zero, its two transformations
-      will be inter-changed, so that the Mapping displays the inverse
-      of its original behaviour.
-
-      Inverting the boolean sense of the Invert attribute will cause
-      the values of a Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes to be
-      interchanged. The values of its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
-      attributes will also be interchanged. This operation may be
-      performed with the \htmlref{AST\_INVERT}{AST_INVERT} routine.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{UnitMap}{UnitMap}
-      }{
-         The value of the Invert attribute has no effect on the
-         behaviour of a UnitMap.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         Inverting the boolean sense of the Invert attribute for a
-         FrameSet will cause its base and current Frames (and its \htmlref{Base}{Base}
-         and \htmlref{Current}{Current} attributes) to be interchanged. This, in turn,
-         may affect other properties and attributes of the FrameSet
-         (such as Nin, Nout, \htmlref{Naxes}{Naxes}, TranForward, TranInverse,
-         etc.). The Invert attribute of a FrameSet is not itself
-         affected by selecting a new base or current \htmlref{Frame}{Frame}.
-      }
-   }
-}
-\sstroutine{
-   Invisible\sstlabel{Invisible}
-}{
-   Draw graphics using invisible ink?
-}{
-   \sstdescription{
-      This attribute controls the appearance of all graphics produced by
-      \htmlref{Plot}{Plot} methods by determining whether graphics should be visible or
-      invisible.
-
-      If the Invisible value of a Plot is non-zero, then all the Plot
-      methods which normally generate graphical output do not do so (you
-      can think of them drawing with {\tt{"}}invisible ink{\tt{"}}). Such methods do,
-      however, continue to do all the calculations which would be needed to
-      produce the graphics. In particular, the bounding box enclosing the
-      graphics is still calculated and can be retrieved as normal using
-      \htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}. The default value is zero, resulting in all methods
-      drawing graphics as normal, using visible ink.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   IsLinear\sstlabel{IsLinear}
-}{
-   Is the Mapping linear?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} is an instance of a
-      class that always represents a linear transformation. Note, some
-      Mapping classes can represent linear or non-linear transformations
-      (the \htmlref{MathMap}{MathMap} class for instance). Such classes have a zero value for
-      the IsLinear attribute. Specific instances of such classes can be
-      tested for linearity using the
-      astLinearApprox function.
-      \htmlref{AST\_LINEARAPPROX}{AST_LINEARAPPROX} routine.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         The IsLinear value for a CmpMap is determined by the classes
-         of the encapsulated Mappings. For instance, a CmpMap that combines
-         a \htmlref{ZoomMap}{ZoomMap} and a \htmlref{ShiftMap}{ShiftMap} will have a non-zero value for its IsLinear
-         attribute, but a CmpMap that contains a MathMap will have a
-         value of zero for its IsLinear attribute.
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The IsLinear value for a Frame is 1 (since a Frame is equivalent
-         to a \htmlref{UnitMap}{UnitMap}).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The IsLinear value for a FrameSet is obtained from the Mapping
-         from the base Frame to the current Frame.
-      }
-   }
-}
-\sstroutine{
-   IsSimple\sstlabel{IsSimple}
-}{
-   Has the Mapping been simplified?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} has been simplified
-      by the
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-      method. If the IsSimple value is non-zero, then the Mapping has
-      been simplified and so there is nothing to be gained by simplifying
-      it again. Indeed, the
-      AST\_SIMPLIFY
-      method will immediately return the Mapping unchanged if the IsSimple
-      attribute indicates that the Mapping has already been simplified.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         All classes of Frame return zero for the IsSimple attribute.
-         This is because changes can be made to a Frame which affect the
-         Mapping represented by the Frame, and so there can be no
-         guarantee that the Mapping may not need re-simplifying. Most
-         non-Frame Mappings, on the other hand, are immutable and so when
-         they are simplified it is certain that they weill remain in a
-         simple state.
-      }
-   }
-}
-\sstroutine{
-   Iwc\sstlabel{Iwc}
-}{
-   Include a Frame representing FITS-WCS intermediate world coordinates?
-}{
-   \sstdescription{
-      This attribute is a boolean value which is used when a \htmlref{FrameSet}{FrameSet} is
-      read from a \htmlref{FitsChan}{FitsChan} with a foreign FITS encoding (e.g. FITS-WCS) using
-      \htmlref{AST\_READ}{AST_READ}.
-      If it has a non-zero value then the returned FrameSet will include
-      Frames representing {\tt{"}}intermediate world coordinates{\tt{"}} (IWC). These
-      Frames will have \htmlref{Domain}{Domain} name {\tt{"}}IWC{\tt{"}} for primary axis descriptions, and
-      {\tt{"}}IWCa{\tt{"}} for secondary axis descriptions, where {\tt{"}}a{\tt{"}} is replaced by
-      the single alternate axis description character, as used in the
-      FITS-WCS header. The default value for {\tt{"}}Iwc{\tt{"}} is zero.
-
-      FITS-WCS paper 1 defines IWC as a Cartesian coordinate system with one
-      axis for each WCS axis, and is the coordinate system produced by the
-      rotation matrix (represented by FITS keyword PCi\_j, CDi\_j, etc).
-      For instance, for a 2-D FITS-WCS header describing projected
-      celestial longitude and latitude, the intermediate world
-      coordinates represent offsets in degrees from the reference point
-      within the plane of projection.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   KeyError\sstlabel{KeyError}
-}{
-   Report an error when getting the value of a non-existant KeyMap entry?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how the
-      AST\_MAPGET...
-      functions behave if the requested key is not found in the \htmlref{KeyMap}{KeyMap}.
-      If KeyError is zero (the default), then these functions will return
-      .FALSE.
-      but no error will be reported. If KeyError is non-zero, then the
-      same values are returned but an error is also reported.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         KeyMap
-      }{
-         All KeyMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   LTOffset\sstlabel{LTOffset}
-}{
-   The offset from UTC to Local Time, in hours
-}{
-   \sstdescription{
-      This specifies the offset from UTC to Local Time, in hours (fractional
-      hours can be supplied). It is positive for time zones east of Greenwich.
-      AST uses the figure as given, without making any attempt to correct for
-      daylight saving. The default value is zero.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Label(axis)\sstlabel{Labelaxis}
-}{
-   Axis label
-}{
-   \sstdescription{
-      This attribute specifies a label to be attached to each axis of
-      a \htmlref{Frame}{Frame} when it is represented (e.g.) in graphical output.
-
-      If a Label value has not been set for a Frame axis, then a
-      suitable default is supplied.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default supplied by the Frame class is the string {\tt{"}}\htmlref{Axis}{Axis}
-         $<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for each successive axis.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Label value
-         (e.g. to {\tt{"}}Right ascension{\tt{"}} or {\tt{"}}Galactic latitude{\tt{"}}) as
-         appropriate for the particular celestial coordinate system
-         being represented.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Label value as
-         appropriate for the particular time system being represented.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Label attribute of a FrameSet axis is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Axis labels are intended purely for interpretation by human
-         readers and not by software.
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   LabelAt(axis)\sstlabel{LabelAtaxis}
-}{
-   Where to place numerical labels for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      where numerical axis labels and associated tick marks are
-      placed.  It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LabelAt(2)=10.0{\tt{"}}
-      specifies where the numerical labels and tick marks for the
-      second axis should be drawn.
-
-      For each axis, the LabelAt value gives the value on the other
-      axis at which numerical labels and tick marks should be placed
-      (remember that Plots suitable for use with AST\_GRID may only
-      have two axes).  For example, in a celestial (RA,Dec) coordinate
-      system, LabelAt(1) gives a Dec value which defines a line (of
-      constant Dec) along which the numerical RA labels and their
-      associated tick marks will be drawn. Similarly, LabelAt(2) gives
-      the RA value at which the Dec labels and ticks will be drawn.
-
-      The default bahaviour is for the Plot to generate its own
-      position for numerical labels and tick marks.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The LabelAt value should use the same units as are used
-         internally for storing coordinate values on the appropriate
-         axis. For example, with a celestial coordinate system, the
-         LabelAt value should be in radians, not hours or degrees.
-
-         \sstitem
-         Normally, the LabelAt value also determines where the lines
-         representing coordinate axes will be drawn, so that the tick
-         marks will lie on these lines (but also see the DrawAxes
-         attribute).
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
-         attribute).  In this case, the value of the LabelAt attribute is
-         ignored.
-      }
-   }
-}
-\sstroutine{
-   LabelUnits(axis)\sstlabel{LabelUnitsaxis}
-}{
-   Use axis unit descriptions in a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether the descriptive labels drawn for each axis of a \htmlref{Plot}{Plot}
-      should include a description of the units being used on the
-      axis.  It takes a separate value for each physical axis of a
-      Plot so that, for instance, the setting {\tt{"}}LabelUnits(2)=1{\tt{"}}
-      specifies that a unit description should be included in the
-      label for the second axis.
-
-      If the LabelUnits value of a Plot axis is non-zero, a unit
-      description will be included in the descriptive label for that
-      axis, otherwise it will be omitted.  The default behaviour is to
-      include a unit description unless the current \htmlref{Frame}{Frame} of the Plot
-      is a \htmlref{SkyFrame}{SkyFrame} representing equatorial, ecliptic, galactic or
-      supergalactic coordinates, in which case it is omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the unit description is obtained from the
-         Plot's \htmlref{Unit(axis)}{Unitaxis} attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LabelUnits{\tt{"}} instead of
-         {\tt{"}}LabelUnits(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the LabelUnits(1) value.
-
-         \sstitem
-         If the current Frame of the Plot is not a SkyFrame, but includes
-         axes which were extracted from a SkyFrame, then the default behaviour
-         is to include a unit description only for those axes which were not
-         extracted from a SkyFrame.
-      }
-   }
-}
-\sstroutine{
-   LabelUp(axis)\sstlabel{LabelUpaxis}
-}{
-   Draw numerical Plot labels upright?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether the numerical labels for each axis of a \htmlref{Plot}{Plot} should be
-      drawn upright or not. It takes a separate value for each
-      physical axis of a Plot so that, for instance, the setting
-      {\tt{"}}LabelUp(2)=1{\tt{"}} specifies that numerical labels for the second
-      axis should be drawn upright.
-
-      If the LabelUp value of a Plot axis is non-zero, it causes
-      numerical labels for that axis to be plotted upright (i.e. as
-      normal, horizontal text), otherwise labels are drawn parallel to
-      the axis to which they apply.
-
-      The default is to produce upright labels if the labels are placed
-      around the edge of the plot, and to produce labels that follow the
-      axes if the labels are placed within the interior of the plot (see
-      attribute \htmlref{Labelling}{Labelling}).
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn around the edges of the plotting area (see the Labelling
-         attribute).  In this case, the value of the LabelUp attribute is
-         ignored.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LabelUp{\tt{"}} instead of
-         {\tt{"}}LabelUp(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LabelUp(1) value.
-      }
-   }
-}
-\sstroutine{
-   Labelling\sstlabel{Labelling}
-}{
-   Label and tick placement option for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      the strategy for placing numerical labels and tick marks for a \htmlref{Plot}{Plot}.
-
-      If the Labelling value of a Plot is {\tt{"}}exterior{\tt{"}} (the default), then
-      numerical labels and their associated tick marks are placed
-      around the edges of the plotting area, if possible. If this is
-      not possible, or if the Labelling value is {\tt{"}}interior{\tt{"}}, then they
-      are placed along grid lines inside the plotting area.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The \htmlref{LabelAt(axis)}{LabelAtaxis} attribute may be used to determine the exact
-         placement of labels and tick marks that are drawn inside the
-         plotting area.
-      }
-   }
-}
-\sstroutine{
-   LatAxis\sstlabel{LatAxis}
-}{
-   Index of the latitude axis
-}{
-   \sstdescription{
-      This read-only attribute gives the index (1 or 2) of the latitude
-      axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
-      permutations).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ListSize\sstlabel{ListSize}
-}{
-   Number of points in a PointList
-}{
-   \sstdescription{
-      This is a read-only attribute giving the number of points in a
-      \htmlref{PointList}{PointList}. This value is determined when the PointList is created.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         PointList
-      }{
-         All PointLists have this attribute.
-      }
-   }
-}
-\sstroutine{
-   LogGap(axis)\sstlabel{LogGapaxis}
-}{
-   Interval between major axis values of a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      the logarithmic interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
-      which (for example) major tick marks are drawn. It takes a separate
-      value for each physical axis of the Plot so that, for instance,
-      the setting {\tt{"}}LogGap(2)=100.0{\tt{"}} specifies the ratio between adjacent major
-      values along the second axis. The LogGap attribute is only used when
-      the LogTicks attribute indicates that the spacing between major axis
-      values is to be logarithmic. If major axis values are linearly spaced
-      then the gap is specified using attribute Gap.
-
-      The LogGap value supplied will be rounded to the nearest power of 10.
-      The reciprocal of the supplied value may be used if this is necessary
-      to produce usable major axis values. If a zero or negative value is
-      supplied, an error will be reported when the grid is drawn. The default
-      behaviour is for the Plot to generate its own LogGap value when
-      required, based on the range of axis values to be represented.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The LogGap value is a ratio between axis values and is therefore
-         dimensionless.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogGap{\tt{"}} instead of {\tt{"}}LogGap(2){\tt{"}}),
-         then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
-         value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
-         will use just the LogGap(1) value.
-      }
-   }
-}
-\sstroutine{
-   LogLabel(axis)\sstlabel{LogLabelaxis}
-}{
-   Use exponential format for numerical axis labels?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether the numerical axis labels should be in normal decimal form
-      or should be represented as 10 raised to the appropriate power.
-      That is, an axis value of 1000.0 will be drawn as {\tt{"}}1000.0{\tt{"}} if
-      LogLabel is zero, but as {\tt{"}}10$\wedge$3{\tt{"}} if LogLabel is non-zero. If
-      graphical escape sequences are supported (see attribute \htmlref{Escape}{Escape}),
-      the power in such exponential labels will be drawn as a small
-      superscript instead of using a {\tt{"}}$\wedge${\tt{"}} character to represent
-      exponentiation.
-
-      The default is to produce exponential labels if the major tick
-      marks are logarithmically spaced (see the LogTicks attribute).
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogLabel{\tt{"}} instead of
-         {\tt{"}}LogLabel(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LogLabel(1) value.
-      }
-   }
-}
-\sstroutine{
-   LogPlot(axis)\sstlabel{LogPlotaxis}
-}{
-   Map the plot logarithmically onto the screen?
-}{
-   \sstdescription{
-      This attribute controls the appearance of all graphics produced by
-      the \htmlref{Plot}{Plot}, by determining whether the axes of the plotting surface
-      are mapped logarithmically or linearly onto the base \htmlref{Frame}{Frame} of the
-      \htmlref{FrameSet}{FrameSet} supplied when the Plot was constructed. It takes a separate
-      value for each axis of the graphics coordinate system (i.e. the
-      base Frame in the Plot) so that, for instance, the setting
-      {\tt{"}}LogPlot(2)=1{\tt{"}} specifies that the second axis of the graphics
-      coordinate system (usually the vertical axis) should be mapped
-      logarithmically onto the second axis of the base Frame of the
-      FrameSet supplied when the Plot was constructed.
-
-      If the LogPlot value of a Plot axis is non-zero, it causes that
-      axis to be mapped logarithmically, otherwise (the default) the axis
-      is mapped linearly.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The setting of the LogPlot attribute provides the default value
-         for the related LogTicks attribute. By selecting suitable values for
-         LogPlot and LogTicks, it is possible to have tick marks which are evenly
-         spaced in value but which are mapped logarithmically onto the screen
-         (and vice-versa).
-
-         \sstitem
-         An axis may only be mapped logarithmically if the visible part of
-         the axis does not include the value zero. The visible part of the
-         axis is that part which is mapped onto the plotting area, and is
-         measured within the base Frame of the FrameSet which was supplied when
-         the Plot was constructed. Any attempt to set LogPlot to a non-zero value
-         will be ignored (without error) if the visible part of the axis
-         includes the value zero
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogPlot{\tt{"}} instead of
-         {\tt{"}}LogPlot(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LogPlot(1) value.
-      }
-   }
-}
-\sstroutine{
-   LogTicks(axis)\sstlabel{LogTicksaxis}
-}{
-   Space the major tick marks logarithmically?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether the major tick marks should be spaced logarithmically or
-      linearly in axis value. It takes a separate value for each physical
-      axis of the \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LogTicks(2)=1{\tt{"}}
-      specifies that the major tick marks on the second axis should be
-      spaced logarithmically.
-
-      If the LogTicks value for a physical axis is non-zero, the major
-      tick marks on that axis will be spaced logarithmically (that is,
-      there will be a constant ratio between the axis values at adjacent
-      major tick marks). An error will be reported if the dynamic range of
-      the axis (the ratio of the largest to smallest displayed axis value)
-      is less than 10.0. If the LogTicks value is zero, the major tick marks
-      will be evenly spaced (that is, there will be a constant difference
-      between the axis values at adjacent major tick marks). The default is
-      to produce logarithmically spaced tick marks if the corresponding
-      LogPlot attribute is non-zero and the ratio of maximum axis value
-      to minimum axis value is 100 or more. If either of these conditions
-      is not met, the default is to produce linearly spaced tick marks.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The setting of the LogTicks attribute does not affect the mapping
-         of the plot onto the screen, which is controlled by attribute LogPlot.
-         By selecting suitable values for LogPlot and LogTicks, it is possible to
-         have tick marks which are evenly spaced in value but which are mapped
-         logarithmically onto the screen (and vica-versa).
-
-         \sstitem
-         An error will be reported when drawing an annotated axis grid if
-         the visible part of the physical axis includes the value zero.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogTicks{\tt{"}} instead of
-         {\tt{"}}LogTicks(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LogTicks(1) value.
-      }
-   }
-}
-\sstroutine{
-   LonAxis\sstlabel{LonAxis}
-}{
-   Index of the longitude axis
-}{
-   \sstdescription{
-      This read-only attribute gives the index (1 or 2) of the longitude
-      axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
-      permutations).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   LutInterp\sstlabel{LutInterp}
-}{
-   Look-up table interpolation method
-}{
-   \sstdescription{
-      This attribute indicates the method to be used when finding the
-      output value of a \htmlref{LutMap}{LutMap} for an input value part way between two
-      table entries. If it is set to 0 (the default) then linear
-      interpolation is used. Otherwise, nearest neighbour interpolation
-      is used.
-
-      Using nearest neighbour interpolation causes AST\_\_BAD to be returned
-      for any point which falls outside the bounds of the table. Linear
-      interpolation results in an extrapolated value being returned based
-      on the two end entries in the table.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         LutMap
-      }{
-         All LutMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   MajTickLen(axis)\sstlabel{MajTickLenaxis}
-}{
-   Length of major tick marks for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      the length of the major tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
-      It takes a separate value for each physical axis of the Plot so
-      that, for instance, the setting {\tt{"}}MajTickLen(2)=0{\tt{"}} specifies the
-      length of the major tick marks drawn on the second axis.
-
-      The MajTickLen value should be given as a fraction of the
-      minimum dimension of the plotting area. Negative values cause
-      major tick marks to be placed on the outside of the
-      corresponding grid line or axis (but subject to any clipping
-      imposed by the underlying graphics system), while positive
-      values cause them to be placed on the inside.
-
-      The default behaviour depends on whether a coordinate grid is
-      drawn inside the plotting area (see the \htmlref{Grid}{Grid} attribute). If so,
-      the default MajTickLen value is zero (so that major ticks are
-      not drawn), otherwise the default is $+$0.015.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}MajTickLen{\tt{"}} instead of
-         {\tt{"}}MajTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the MajTickLen(1) value.
-      }
-   }
-}
-\sstroutine{
-   MatchEnd\sstlabel{MatchEnd}
-}{
-   Match trailing axes?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
-      behaves when it is used (by \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match
-      another (target) Frame. It applies only in the case where a
-      match occurs between template and target Frames with different
-      numbers of axes.
-
-      If the MatchEnd value of the template Frame is zero, then the
-      axes which occur first in the target Frame will be matched and
-      any trailing axes (in either the target or template) will be
-      disregarded. If it is non-zero, the final axes in each Frame
-      will be matched and any un-matched leading axes will be
-      disregarded instead.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default MatchEnd value for a Frame is zero, so that
-         trailing axes are disregarded.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The MatchEnd attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-}
-\sstroutine{
-   MaxAxes\sstlabel{MaxAxes}
-}{
-   Maximum number of Frame axes to match
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target) Frame. It
-      specifies the maximum number of axes that the target Frame may
-      have in order to match the template.
-
-      Normally, this value will equal the number of Frame axes, so
-      that a template Frame will only match another Frame with the
-      same number of axes as itself. By setting a different value,
-      however, the matching process may be used to identify Frames
-      with specified numbers of axes.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default MaxAxes value for a Frame is equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The MaxAxes attribute of a CmpFrame defaults to a large number
-         (1000000) which is much larger than any likely number of axes in
-         a Frame. Combined with the \htmlref{MinAxes}{MinAxes} default of zero (for a
-         CmpFrame), this means that the default behaviour for a CmpFrame
-         is to match any target Frame that consists of a subset of the
-         axes in the template CmpFrame. To change this so that a CmpFrame
-         will only match Frames that have the same number of axes, you
-         should set the CmpFrame MaxAxes and MinAxes attributes to the
-         number of axes in the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The MaxAxes attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When setting a MaxAxes value, the value of the MinAxes
-         attribute may also be silently changed so that it remains
-         consistent with (i.e. does not exceed) the new value. The
-         default MaxAxes value may also be reduced to remain consistent
-         with the MinAxes value.
-
-         \sstitem
-         If a template Frame is used to match a target with a different
-         number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
-         to determine how the individual axes of each Frame should match.
-      }
-   }
-}
-\sstroutine{
-   MeshSize\sstlabel{MeshSize}
-}{
-   Number of points used to represent the boundary of a Region
-}{
-   \sstdescription{
-      This attribute controls how many points are used when creating a
-      mesh of points covering the boundary of a \htmlref{Region}{Region}. This mesh is used
-      primarily when testing for overlap with a second Region: each point in
-      the mesh is checked to see if it is inside or outside the second Region.
-      Thus, the reliability of the overlap check depends on the value assigned
-      to this attribute. If the value used is very low, it is possible for
-      overlaps to go unnoticed. High values produce more reliable results, but
-      can result in the overlap test being very slow. The default value is 200
-      for two dimensional Regions and 2000 for three or more dimensional
-      Regions (this attribute is not used for 1-dimensional regions since the
-      boundary of a simple 1-d Region can only ever have two points). A
-      value of five is used if the supplied value is less than five.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default MeshSize for a CmpRegion is the MeshSize of its
-         first component Region.
-      }
-      \sstsubsection{
-         \htmlref{Stc}{Stc}
-      }{
-         The default MeshSize for an Stc is the MeshSize of its
-         encapsulated Region.
-      }
-   }
-}
-\sstroutine{
-   MinAxes\sstlabel{MinAxes}
-}{
-   Minimum number of Frame axes to match
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target) Frame. It
-      specifies the minimum number of axes that the target Frame may
-      have in order to match the template.
-
-      Normally, this value will equal the number of Frame axes, so
-      that a template Frame will only match another Frame with the
-      same number of axes as itself. By setting a different value,
-      however, the matching process may be used to identify Frames
-      with specified numbers of axes.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default MinAxes value for a Frame is equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The MinAxes attribute of a CmpFrame defaults to zero. Combined
-         with the \htmlref{MaxAxes}{MaxAxes} default of 1000000 (for a CmpFrame), this means
-         that the default behaviour for a CmpFrame is to match any target
-         Frame that consists of a subset of the axes in the template
-         CmpFrame. To change this so that a CmpFrame will only match Frames
-         that have the same number of axes, you should set the CmpFrame
-         MinAxes and MaxAxes attributes to the number of axes in the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The MinAxes attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When setting a MinAxes value, the value of the MaxAxes
-         attribute may also be silently changed so that it remains
-         consistent with (i.e. is not less than) the new value. The
-         default MinAxes value may also be reduced to remain consistent
-         with the MaxAxes value.
-
-         \sstitem
-         If a template Frame is used to match a target with a different
-         number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
-         to determine how the individual axes of each Frame should match.
-      }
-   }
-}
-\sstroutine{
-   MinTick(axis)\sstlabel{MinTickaxis}
-}{
-   Density of minor tick marks for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      the density of minor tick marks which appear between the major
-      axis values of a \htmlref{Plot}{Plot}. It takes a separate value for each
-      physical axis of a Plot so that, for instance, the setting
-      {\tt{"}}MinTick(2)=2{\tt{"}} specifies the density of minor tick marks along
-      the second axis.
-
-      The value supplied should be the number of minor divisions
-      required between each pair of major axis values, this being one
-      more than the number of minor tick marks to be drawn.  By
-      default, a value is chosen that depends on the gap between major
-      axis values and the nature of the axis.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}MinTick{\tt{"}} instead of
-         {\tt{"}}MinTick(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the MinTick(1) value.
-      }
-   }
-}
-\sstroutine{
-   MinTickLen(axis)\sstlabel{MinTickLenaxis}
-}{
-   Length of minor tick marks for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      the length of the minor tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
-      It takes a separate value for each physical axis of the Plot so
-      that, for instance, the setting {\tt{"}}MinTickLen(2)=0{\tt{"}} specifies the
-      length of the minor tick marks drawn on the second axis.
-
-      The MinTickLen value should be given as a fraction of the
-      minimum dimension of the plotting area. Negative values cause
-      minor tick marks to be placed on the outside of the
-      corresponding grid line or axis (but subject to any clipping
-      imposed by the underlying graphics system), while positive
-      values cause them to be placed on the inside.
-
-      The default value is $+$0.007.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The number of minor tick marks drawn is determined by the
-         Plot's \htmlref{MinTick(axis)}{MinTickaxis} attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}MinTickLen{\tt{"}} instead of
-         {\tt{"}}MinTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the MinTickLen(1) value.
-      }
-   }
-}
-\sstroutine{
-   NatLat\sstlabel{NatLat}
-}{
-   Native latitude of the reference point of a FITS-WCS projection
-}{
-   \sstdescription{
-      This attribute gives the latitude of the reference point of the
-      FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
-      radians in the {\tt{"}}native spherical{\tt{"}} coordinate system. This value is
-      fixed for most projections, for instance it is PI/2 (90 degrees)
-      for all zenithal projections. For some projections (e.g. the conics)
-      the value is not fixed, but is specified by parameter one on the
-      latitude axis.
-
-      FITS-WCS paper II introduces the concept of a {\tt{"}}fiducial point{\tt{"}}
-      which is logical distinct from the projection reference point.
-      It is easy to confuse the use of these two points. The fiducial
-      point is the point which has celestial coordinates given by the
-      CRVAL FITS keywords. The native spherical coordinates for this point
-      default to the values of the NatLat and \htmlref{NatLon}{NatLon}, but these defaults
-      mey be over-ridden by values stored in the PVi\_j keywords. Put
-      another way, the CRVAL keywords will by default give the celestial
-      coordinates of the projection reference point, but may refer to
-      some other point if alternative native longitude and latitude values
-      are provided through the PVi\_j keywords.
-
-      The NatLat attribute is read-only.
-   }
-   \sstattributetype{
-      Floating point, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A default value of AST\_\_BAD is used if no latitude value is available.
-      }
-   }
-}
-\sstroutine{
-   NatLon\sstlabel{NatLon}
-}{
-   Native longitude of the reference point of a FITS-WCS projection
-}{
-   \sstdescription{
-      This attribute gives the longitude of the reference point of the
-      FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
-      radians in the {\tt{"}}native spherical{\tt{"}} coordinate system, and will
-      usually be zero. See the description of attribute \htmlref{NatLat}{NatLat} for further
-      information.
-
-      The NatLon attribute is read-only.
-   }
-   \sstattributetype{
-      Floating point, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Naxes\sstlabel{Naxes}
-}{
-   Number of Frame axes
-}{
-   \sstdescription{
-      This is a read-only attribute giving the number of axes in a
-      \htmlref{Frame}{Frame} (i.e. the number of dimensions of the coordinate space
-      which the Frame describes). This value is determined when the
-      Frame is created.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Naxes attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The Naxes attribute of a CmpFrame is equal to the sum of the
-         Naxes values of its two component Frames.
-      }
-   }
-}
-\sstroutine{
-   Ncard\sstlabel{Ncard}
-}{
-   Number of FITS header cards in a FitsChan
-}{
-   \sstdescription{
-      This attribute gives the total number of FITS header cards
-      stored in a \htmlref{FitsChan}{FitsChan}. It is updated as cards are added or
-      deleted.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   NegLon\sstlabel{NegLon}
-}{
-   Display negative longitude values?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how longitude values
-      are normalized for display by \htmlref{AST\_NORM}{AST_NORM}.
-
-      If the NegLon attribute is zero, then normalized
-      longitude values will be in the range zero to 2.pi. If NegLon is
-      non-zero, then normalized longitude values will be in the range -pi
-      to pi.
-
-      The default value depends on the current value of the \htmlref{SkyRefIs}{SkyRefIs}
-      attribute, If SkyRefIs has a value of {\tt{"}}Origin{\tt{"}}, then the default for
-      NegLon is one, otherwise the default is zero.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Negated\sstlabel{Negated}
-}{
-   Region negation flag
-}{
-   \sstdescription{
-      This attribute controls whether a \htmlref{Region}{Region} represents the {\tt{"}}inside{\tt{"}} or
-      the {\tt{"}}outside{\tt{"}} of the area which was supplied when the Region was
-      created. If the attribute value is zero (the default), the Region
-      represents the inside of the original area. However, if it is non-zero,
-      it represents the outside of the original area. The value of this
-      attribute may be toggled using the
-      \htmlref{AST\_NEGATE}{AST_NEGATE} routine.
-
-      Note, whether the boundary is considered to be inside the Region or
-      not is controlled by the \htmlref{Closed}{Closed} attribute. Changing the value of
-      the Negated attribute does not change the value of the Closed attribute.
-      Thus, if Region is closed, then the boundary of the Region will be
-      inside the Region, whatever the setting of the Negated attribute.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Nframe\sstlabel{Nframe}
-}{
-   Number of Frames in a FrameSet
-}{
-   \sstdescription{
-      This attrbute gives the number of Frames in a \htmlref{FrameSet}{FrameSet}. This
-      value will change as Frames are added or removed, but will
-      always be at least one.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FrameSet
-      }{
-         All FrameSets have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Nin\sstlabel{Nin}
-}{
-   Number of input coordinates for a Mapping
-}{
-   \sstdescription{
-      This attribute gives the number of coordinate values required to
-      specify an input point for a \htmlref{Mapping}{Mapping} (i.e. the number of
-      dimensions of the space in which the Mapping's input points
-      reside).
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         If a CmpMap's component Mappings are joined in series, then
-         its Nin attribute is equal to the Nin attribute of the first
-         component (or to the \htmlref{Nout}{Nout} attribute of the second component
-         if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
-         If a CmpMap's component Mappings are joined in parallel, then
-         its Nin attribute is given by the sum of the Nin attributes
-         of each component (or to the sum of their Nout attributes if
-         the CmpMap's Invert attribute is non-zero).
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The Nin attribute for a Frame is always equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Nin attribute of a FrameSet is equal to the number of
-         axes (Naxes attribute) of its base Frame (as specified by the
-         FrameSet's \htmlref{Base}{Base} attribute). The Nin attribute value may
-         therefore change if a new base Frame is selected.
-      }
-   }
-}
-\sstroutine{
-   Nobject\sstlabel{Nobject}
-}{
-   Number of Objects in class
-}{
-   \sstdescription{
-      This attribute gives the total number of Objects currently in
-      existence in the same class as the \htmlref{Object}{Object} whose attribute value
-      is requested. This count does not include Objects which belong
-      to derived (more specialised) classes.
-
-      This attribute is mainly intended for debugging. It can be used
-      to detect whether Objects which should have been deleted have,
-      in fact, been deleted.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Norm(axis)\sstlabel{Normaxis}
-}{
-   Specifies the plane upon which a Plot3D draws text and markers
-}{
-   \sstdescription{
-      This attribute controls the appearance of text and markers drawn
-      by a \htmlref{Plot3D}{Plot3D}. It specifies the orientation of the plane upon which
-      text and markers will be drawn by all subsequent invocations of the
-      \htmlref{AST\_TEXT}{AST_TEXT} and \htmlref{AST\_MARK}{AST_MARK} functions.
-
-      When setting or getting the Norm attribute, the attribute name must
-      be qualified by an axis index in the range 1 to 3. The 3 elements of
-      the Norm attribute are together interpreted as a vector in 3D graphics
-      coordinates that is normal to the plane upon which text and marks
-      should be drawn. When testing or clearing the attribute, the axis
-      index is optional. If no index is supplied, then clearing the Norm
-      attribute will clear all three elements, and testing the Norm attribute
-      will return a non-zero value if any of the three elements are set.
-
-      The default value is 1.0 for each of the 3 elements. The length of
-      the vector is insignificant, but an error will be reported when
-      attempting to draw text or markers if the vector has zero length.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         All Plot3Ds have this attribute.
-      }
-   }
-}
-\sstroutine{
-   NormUnit(axis)\sstlabel{NormUnitaxis}
-}{
-   Normalised Axis physical units
-}{
-   \sstdescription{
-      The value of this read-only attribute is derived from the current
-      value of the Unit attribute. It will represent an equivalent system
-      of units to the Unit attribute, but will potentially be simplified.
-      For instance, if Unit is set to {\tt{"}}s$*$(m/s){\tt{"}}, the NormUnit value will
-      be {\tt{"}}m{\tt{"}}. If no simplification can be performed, the value of the
-      NormUnit attribute will equal that of the Unit attribute.
-   }
-   \sstattributetype{
-      String, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         All Frames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   Nout\sstlabel{Nout}
-}{
-   Number of output coordinates for a Mapping
-}{
-   \sstdescription{
-      This attribute gives the number of coordinate values generated
-      by a \htmlref{Mapping}{Mapping} to specify each output point (i.e. the number of
-      dimensions of the space in which the Mapping's output points
-      reside).
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         If a CmpMap's component Mappings are joined in series, then
-         its Nout attribute is equal to the Nout attribute of the
-         second component (or to the \htmlref{Nin}{Nin} attribute of the first
-         component if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
-         If a CmpMap's component Mappings are joined in parallel, then
-         its Nout attribute is given by the sum of the Nout attributes
-         of each component (or to the sum of their Nin attributes if
-         the CmpMap's Invert attribute is non-zero).
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The Nout attribute for a Frame is always equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Nout attribute of a FrameSet is equal to the number of
-         FrameSet axes (Naxes attribute) which, in turn, is equal to
-         the Naxes attribute of the FrameSet's current Frame (as
-         specified by the \htmlref{Current}{Current} attribute). The Nout attribute value
-         may therefore change if a new current Frame is selected.
-      }
-   }
-}
-\sstroutine{
-   NumLab(axis)\sstlabel{NumLabaxis}
-}{
-   Draw numerical axis labels for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether labels should be drawn to represent the numerical values
-      along each axis of a \htmlref{Plot}{Plot}. It takes a separate value for each
-      physical axis of a Plot so that, for instance, the setting
-      {\tt{"}}NumLab(2)=1{\tt{"}} specifies that numerical labels should be drawn
-      for the second axis.
-
-      If the NumLab value of a Plot axis is non-zero (the default),
-      then numerical labels will be drawn for that axis, otherwise
-      they will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The drawing of associated descriptive axis labels for a Plot
-         (describing the quantity being plotted along each axis) is
-         controlled by the \htmlref{TextLab(axis)}{TextLabaxis} attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}NumLab{\tt{"}} instead of
-         {\tt{"}}NumLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the NumLab(1) value.
-      }
-   }
-}
-\sstroutine{
-   NumLabGap(axis)\sstlabel{NumLabGapaxis}
-}{
-   Spacing of numerical labels for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      where numerical axis labels are placed relative to the axes they
-      describe.  It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}NumLabGap(2)=-0.01{\tt{"}}
-      specifies where the numerical label for the second axis should
-      be drawn.
-
-      For each axis, the NumLabGap value gives the spacing between the
-      axis line (or edge of the plotting area, if appropriate) and the
-      nearest edge of the corresponding numerical axis
-      labels. Positive values cause the descriptive label to be placed
-      on the opposite side of the line to the default tick marks,
-      while negative values cause it to be placed on the same side.
-
-      The NumLabGap value should be given as a fraction of the minimum
-      dimension of the plotting area, the default value being $+$0.01.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}NumLabGap{\tt{"}} instead of
-         {\tt{"}}NumLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the NumLabGap(1) value.
-      }
-   }
-}
-\sstroutine{
-   ObjSize\sstlabel{ObjSize}
-}{
-   The in-memory size of the Object
-}{
-   \sstdescription{
-      This attribute gives the total number of bytes of memory used by
-      the \htmlref{Object}{Object}. This includes any Objects which are encapsulated within
-      the supplied Object.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ObsAlt\sstlabel{ObsAlt}
-}{
-   The geodetic altitude of the observer
-}{
-   \sstdescription{
-      This attribute specifies the geodetic altitude of the observer, in
-      metres, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
-      class makes no use of this attribute, but specialised subclasses of
-      Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
-      classes use it. The default value is zero.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
-         it defines the Doppler shift introduced by the observers diurnal
-         motion around the earths axis, which is needed when converting to
-         or from the topocentric standard of rest. The maximum velocity
-         error which can be caused by an incorrect value is 0.5 km/s. The
-         default value for the attribute is zero.
-      }
-      \sstsubsection{
-         TimeFrame
-      }{
-         Together with the ObsLon attribute, it is used when converting
-         between certain time scales (TDB, TCB, LMST, LAST)
-      }
-   }
-}
-\sstroutine{
-   ObsLat\sstlabel{ObsLat}
-}{
-   The geodetic latitude of the observer
-}{
-   \sstdescription{
-      This attribute specifies the geodetic latitude of the observer, in
-      degrees, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
-      class makes no use of this attribute, but specialised subclasses of
-      Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
-      classes use it. The default value is zero.
-
-      The value is stored internally in radians, but is converted to and
-      from a degrees string for access. Some example input formats are:
-      {\tt{"}}22:19:23.2{\tt{"}}, {\tt{"}}22 19 23.2{\tt{"}}, {\tt{"}}22:19.387{\tt{"}}, {\tt{"}}22.32311{\tt{"}}, {\tt{"}}N22.32311{\tt{"}},
-      {\tt{"}}-45.6{\tt{"}}, {\tt{"}}S45.6{\tt{"}}. As indicated, the sign of the latitude can
-      optionally be indicated using characters {\tt{"}}N{\tt{"}} and {\tt{"}}S{\tt{"}} in place of the
-      usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
-      format {\tt{"}}[s]dd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}N{\tt{"}} or {\tt{"}}S{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
-         it defines the Doppler shift introduced by the observers diurnal
-         motion around the earths axis, which is needed when converting to
-         or from the topocentric standard of rest. The maximum velocity
-         error which can be caused by an incorrect value is 0.5 km/s. The
-         default value for the attribute is zero.
-      }
-      \sstsubsection{
-         TimeFrame
-      }{
-         Together with the ObsLon attribute, it is used when converting
-         between certain time scales (TDB, TCB, LMST, LAST)
-      }
-   }
-}
-\sstroutine{
-   ObsLon\sstlabel{ObsLon}
-}{
-   The geodetic longitude of the observer
-}{
-   \sstdescription{
-      This attribute specifies the geodetic (or equivalently, geocentric)
-      longitude of the observer, in degrees, measured positive eastwards.
-      See also attribute \htmlref{ObsLat}{ObsLat}. The basic \htmlref{Frame}{Frame} class makes no use of this
-      attribute, but specialised subclasses of Frame may use it. For instance,
-      the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame} classes use it. The default value
-      is zero.
-
-      The value is stored internally in radians, but is converted to and
-      from a degrees string for access. Some example input formats are:
-      {\tt{"}}155:19:23.2{\tt{"}}, {\tt{"}}155 19 23.2{\tt{"}}, {\tt{"}}155:19.387{\tt{"}}, {\tt{"}}155.32311{\tt{"}}, {\tt{"}}E155.32311{\tt{"}},
-      {\tt{"}}-204.67689{\tt{"}}, {\tt{"}}W204.67689{\tt{"}}. As indicated, the sign of the longitude can
-      optionally be indicated using characters {\tt{"}}E{\tt{"}} and {\tt{"}}W{\tt{"}} in place of the
-      usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
-      format {\tt{"}}[s]ddd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}E{\tt{"}} or {\tt{"}}W{\tt{"}} and the
-      numerical value is chosen to be less than 180 degrees.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         Together with the ObsLon, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
-         it defines the Doppler shift introduced by the observers diurnal
-         motion around the earths axis, which is needed when converting to
-         or from the topocentric standard of rest. The maximum velocity
-         error which can be caused by an incorrect value is 0.5 km/s. The
-         default value for the attribute is zero.
-      }
-      \sstsubsection{
-         TimeFrame
-      }{
-         Together with the ObsLon attribute, it is used when converting
-         between certain time scales (TDB, TCB, LMST, LAST)
-      }
-   }
-}
-\sstroutine{
-   PVMax(i)\sstlabel{PVMaxi}
-}{
-   Maximum number of FITS-WCS projection parameters
-}{
-   \sstdescription{
-      This attribute specifies the largest legal index for a PV projection
-      parameter attached to a specified axis of the \htmlref{WcsMap}{WcsMap} (i.e. the
-      largest legal value for {\tt{"}}m{\tt{"}} when accessing the {\tt{"}}\htmlref{PVi\_m}{PVi_m}{\tt{"}} attribute).
-      The axis index is specified by i, and should be in the range 1 to 99.
-      The value for each axis is determined by the projection type specified
-      when the WcsMap
-      is first created using \htmlref{AST\_WCSMAP}{AST_WCSMAP} and cannot subsequently be
-      changed.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   PVi\_m\sstlabel{PVi_m}
-}{
-   FITS-WCS projection parameters
-}{
-   \sstdescription{
-      This attribute specifies the projection parameter values to be
-      used by a \htmlref{WcsMap}{WcsMap} when implementing a FITS-WCS sky projection.
-      Each PV attribute name should include two integers, i and m,
-      separated by an underscore. The axis index is specified
-      by i, and should be in the range 1 to 99. The parameter number
-      is specified by m, and should be in the range 0 to 99. For
-      example, {\tt{"}}PV2\_1=45.0{\tt{"}} would specify a value for projection
-      parameter 1 of axis 2 in a WcsMap.
-
-      These projection parameters correspond exactly to the values
-      stored using the FITS-WCS keywords {\tt{"}}PV1\_1{\tt{"}}, {\tt{"}}PV1\_2{\tt{"}}, etc. This
-      means that projection parameters which correspond to angles must
-      be given in degrees (despite the fact that the angular
-      coordinates and other attributes used by a WcsMap are in
-      radians).
-
-      The set of projection parameters used by a WcsMap depends on the
-      type of projection, which is determined by its \htmlref{WcsType}{WcsType}
-      parameter.  Most projections either do not require projection
-      parameters, or use parameters 1 and 2 associated with the latitude
-      axis. You should consult the FITS-WCS paper for details.
-
-      Some projection parameters have default values (as defined in
-      the FITS-WCS paper) which apply if no explicit value is given.
-      You may omit setting a value for these {\tt{"}}optional{\tt{"}} parameters and the
-      default will apply. Some projection parameters, however, have no
-      default and a value must be explicitly supplied.  This is most
-      conveniently
-      done using the OPTIONS argument of \htmlref{AST\_WCSMAP}{AST_WCSMAP} (q.v.) when a WcsMap
-      is first created. An error will result when a WcsMap is used to
-      transform coordinates if any of its required projection
-      parameters has not been set and lacks a default value.
-
-      A {\tt{"}}get{\tt{"}} operation for a parameter which has not been assigned a value
-      will return the default value defined in the FITS-WCS paper, or
-      AST\_\_BAD if the paper indicates that the parameter has no default.
-      A default value of zero is returned for parameters which are not
-      accessed by the projection.
-
-      Note, the FITS-WCS paper reserves parameters 1 and 2 on the longitude
-      axis to hold the native longitude and latitude of the fiducial
-      point of the projection, in degrees. The default values for these
-      parameters are determined by the projection type. The AST-specific
-      TPN projection does not use this convention - all projection
-      parameters for both axes are used to represent polynomical correction
-      terms, and the native longitude and latitude at the fiducial point may
-      not be changed from the default values of zero and 90 degrees.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the projection parameter values given for a WcsMap do not
-         satisfy all the required constraints (as defined in the FITS-WCS
-         paper), then an error will result when the WcsMap is used to
-         transform coordinates.
-      }
-   }
-}
-\sstroutine{
-   PcdCen(axis)\sstlabel{PcdCenaxis}
-}{
-   Centre coordinates of pincushion/barrel distortion
-}{
-   \sstdescription{
-      This attribute specifies the centre of the pincushion/barrel
-      distortion implemented by a \htmlref{PcdMap}{PcdMap}. It takes a separate value for
-      each axis of the PcdMap so that, for instance, the settings
-      {\tt{"}}PcdCen(1)=345.0,PcdCen(2)=-104.4{\tt{"}} specify that the pincushion
-      distortion is centred at positions of 345.0 and -104.4 on axes 1 and 2
-      respectively. This attribute is set when a PcdMap is created, but may
-      later be modified. If the attribute is cleared, the default value for
-      both axes is zero.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         PcdMap
-      }{
-         All PcdMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}PcdCen{\tt{"}} instead of
-         {\tt{"}}PcdCen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of both axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the PcdCen(1) value.
-      }
-   }
-}
-\sstroutine{
-   Permute\sstlabel{Permute}
-}{
-   Permute axis order?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
-      behaves when it is used (by \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match
-      another (target) Frame. It specifies whether the axis order of
-      the target Frame may be permuted in order to obtain a match.
-
-      If the template's Permute value is zero, it will match a target
-      only if it can do so without changing the order of its
-      axes. Otherwise, it will attempt to permute the target's axes as
-      necessary.
-
-      The default value is 1, so that axis permutation will be attempted.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute. However, the Frame class
-         effectively ignores this attribute and behaves as if it has
-         the value 1. This is because the axes of a basic Frame are
-         not distinguishable and will always match any other Frame
-         whatever their order.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         Unlike a basic Frame, the SkyFrame class makes use of this
-         attribute.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Permute attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-}
-\sstroutine{
-   PolarLong\sstlabel{PolarLong}
-}{
-   The longitude value to assign to either pole
-}{
-   \sstdescription{
-      This attribute holds the longitude value, in radians, to be
-      returned when a Cartesian position corresponding to either the north
-      or south pole is transformed into spherical coordinates. The
-      default value is zero.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SphMap}{SphMap}
-      }{
-         All SphMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   PreserveAxes\sstlabel{PreserveAxes}
-}{
-   Preserve axes?
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}) as a template to match another (target) Frame. It
-      determines which axes appear (and in what order) in the {\tt{"}}result{\tt{"}}
-      Frame produced.
-
-      If PreserveAxes is zero in the template Frame, then the result
-      Frame will have the same number (and order) of axes as the
-      template. If it is non-zero, however, the axes of the target
-      Frame will be preserved, so that the result Frame will have the
-      same number (and order) of axes as the target.
-
-      The default value is zero, so that target axes are not preserved
-      and the result Frame resembles the template.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The PreserveAxes attribute of a FrameSet is the same as that
-         of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-}
-\sstroutine{
-   ProjP(m)\sstlabel{ProjPm}
-}{
-   FITS-WCS projection parameters
-}{
-   \sstdescription{
-      This attribute provides aliases for the PV attributes, which
-      specifies the projection parameter values to be used by a \htmlref{WcsMap}{WcsMap}
-      when implementing a FITS-WCS sky projection. ProjP is retained for
-      compatibility with previous versions of FITS-WCS and AST. New
-      applications should use the PV attibute instead.
-
-      Attributes ProjP(0) to ProjP(9) correspond to attributes PV$<$axlat$>$\_0
-      to PV$<$axlat$>$\_9, where $<$axlat$>$ is replaced by the index of the
-      latitude axis (given by attribute WcsAxis(2)). See PV for further
-      details.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Projection\sstlabel{Projection}
-}{
-   Sky projection description
-}{
-   \sstdescription{
-      This attribute provides a place to store a description of the
-      type of sky projection used when a \htmlref{SkyFrame}{SkyFrame} is attached to a
-      2-dimensional object, such as an image or plotting surface. For
-      example, typical values might be {\tt{"}}orthographic{\tt{"}}, {\tt{"}}Hammer-Aitoff{\tt{"}}
-      or {\tt{"}}cylindrical equal area{\tt{"}}.
-
-      The Projection value is purely descriptive and does not affect
-      the celestial coordinate system represented by the SkyFrame in
-      any way. If it is set to a non-blank string, the description
-      provided may be used when forming the default value for the
-      SkyFrame's \htmlref{Title}{Title} attribute (so that typically it will appear in
-      graphical output, for instance). The default value is an empty
-      string.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RefCount\sstlabel{RefCount}
-}{
-   Count of active Object pointers
-}{
-   \sstdescription{
-      This attribute gives the number of active pointers associated
-      with an \htmlref{Object}{Object}. It is modified whenever pointers are created or
-      annulled (by \htmlref{AST\_CLONE}{AST_CLONE}, \htmlref{AST\_ANNUL}{AST_ANNUL} or \htmlref{AST\_END}{AST_END} for example). The count
-      includes the initial pointer issued when the Object was created.
-
-      If the reference count for an Object falls to zero as the result
-      of annulling a pointer to it, then the Object will be deleted.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RefDec\sstlabel{RefDec}
-}{
-   The declination of the reference point
-}{
-   \sstdescription{
-      This attribute specifies the FK5 J2000.0 declination of a reference
-      point on the sky. See the description of attribute \htmlref{RefRA}{RefRA} for details.
-      The default RefDec is {\tt{"}}0:0:0{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RefRA\sstlabel{RefRA}
-}{
-   The right ascension of the reference point
-}{
-   \sstdescription{
-      This attribute, together with the \htmlref{RefDec}{RefDec} attribute, specifies the FK5
-      J2000.0 coordinates of a reference point on the sky. For 1-dimensional
-      spectra, this should normally be the position of the source. For
-      spectral data with spatial coverage (spectral cubes, etc), this should
-      be close to centre of the spatial coverage. It is used to define the
-      correction for Doppler shift to be applied when using the
-      \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} or \htmlref{AST\_CONVERT}{AST_CONVERT}
-      method to convert between different standards of rest.
-
-      The \htmlref{SpecFrame}{SpecFrame} class assumes this velocity correction is spatially
-      invariant. If a single SpecFrame is used (for instance, as a
-      component of a \htmlref{CmpFrame}{CmpFrame}) to describe spectral values at different
-      points on the sky, then it is assumes that the doppler shift at any
-      spatial position is the same as at the reference position. The
-      maximum velocity error introduced by this assumption is of the order
-      of V$*$SIN(FOV), where FOV is the angular field of view, and V is the
-      relative velocity of the two standards of rest. As an example, when
-      correcting from the observers rest frame (i.e. the topocentric rest
-      frame) to the kinematic local standard of rest the maximum value of V
-      is about 20 km/s, so for 5 arc-minute field of view the maximum velocity
-      error introduced by the correction will be about 0.03 km/s. As another
-      example, the maximum error when correcting from the observers rest frame
-      to the local group is about 5 km/s over a 1 degree field of view.
-
-      The RefRA and RefDec attributes are stored internally in radians, but
-      are converted to and from a string for access. The format {\tt{"}}hh:mm:ss.ss{\tt{"}}
-      is used for RefRA, and {\tt{"}}dd:mm:ss.s{\tt{"}} is used for RefDec. The methods
-      \htmlref{AST\_SETREFPOS}{AST_SETREFPOS} and \htmlref{AST\_GETREFPOS}{AST_GETREFPOS} may be used to access the value of
-      these attributes directly as unformatted values in radians.
-
-      The default for RefRA is {\tt{"}}0:0:0{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RegionClass\sstlabel{RegionClass}
-}{
-   The AST class name of the Region encapsulated within an Stc
-}{
-   \sstdescription{
-      This is a read-only attribute giving the AST class name of the
-      \htmlref{Region}{Region} encapsulated within an \htmlref{Stc}{Stc} (that is, the class of the Region
-      which was supplied when the Stc was created).
-   }
-   \sstattributetype{
-      String, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Stc
-      }{
-         All Stc objects this attribute.
-      }
-   }
-}
-\sstroutine{
-   Report\sstlabel{Report}
-}{
-   Report transformed coordinates?
-}{
-   \sstdescription{
-      This attribute controls whether coordinate values are reported
-      whenever a \htmlref{Mapping}{Mapping} is used to transform a set of points. If its
-      value is zero (the default), no report is made. However, if it
-      is non-zero, the coordinates of each point are reported (both
-      before and after transformation) by writing them to standard
-      output.
-
-      This attribute is provided as an aid to debugging, and to avoid
-      having to report values explicitly in simple programs.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         When applied to a compound Mapping (CmpMap), only the Report
-         attribute of the CmpMap, and not those of its component
-         Mappings, is used.  Coordinate information is never reported
-         for the component Mappings individually, only for the
-         complete CmpMap.
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         When applied to any Frame, the formatting capabilities of the
-         Frame (as provided by the \htmlref{AST\_FORMAT}{AST_FORMAT} function) will be used to
-         format the reported coordinates.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         When applied to any FrameSet, the formatting capabilities of
-         the base and current Frames will be used (as above) to
-         individually format the input and output coordinates, as
-         appropriate. The Report attribute of a FrameSet is not itself
-         affected by selecting a new base or current Frame, but the
-         resulting formatting capabilities may be.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Unlike most other attributes, the value of the Report
-         attribute is not transferred when a Mapping is copied. Instead,
-         its value is undefined (and therefore defaults to zero) in any
-         copy. Similarly, it becomes undefined in any external
-         representation of a Mapping produced by the \htmlref{AST\_WRITE}{AST_WRITE} routine.
-      }
-   }
-}
-\sstroutine{
-   ReportLevel\sstlabel{ReportLevel}
-}{
-   Determines which read/write conditions are reported
-}{
-   \sstdescription{
-      This attribute determines which, if any, of the conditions that occur
-      whilst reading or writing an \htmlref{Object}{Object} should be reported. These
-      conditions will generate either a fatal error or a warning, as
-      determined by attribute \htmlref{Strict}{Strict}. ReportLevel can take any of the
-      following values:
-
-      0 - Do not report any conditions.
-
-      1 - \htmlref{Report}{Report} only conditions where significant information content has been
-      changed. For instance, an unsupported time-scale has been replaced by a
-      supported near-equivalent time-scale. Another example is if a basic
-      \htmlref{Channel}{Channel} unexpected encounters data items that may have been introduced
-      by later versions of AST.
-
-      2 - Report the above, and in addition report significant default
-      values. For instance, if no time-scale was specified when reading an
-      Object from an external data source, report the default time-scale
-      that is being used.
-
-      3 - Report the above, and in addition report any other potentially
-      interesting conditions that have no significant effect on the
-      conversion. For instance, report if a time-scale of {\tt{"}}TT{\tt{"}}
-      (terrestrial time) is used in place of {\tt{"}}ET{\tt{"}} (ephemeris time). This
-      change has no signficiant effect because ET is the predecessor of,
-      and is continuous with, TT. Synonyms such as {\tt{"}}IAT{\tt{"}} and {\tt{"}}TAI{\tt{"}} are
-      another example.
-
-      The default value is 1. Note, there are many other conditions that
-      can occur whilst reading or writing an Object that completely
-      prevent the conversion taking place. Such conditions will always
-      generate errors, irrespective of the ReportLevel and Strict attributes.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All the conditions selected by the FitsChan \htmlref{Warnings}{Warnings} attribute are
-         reported at level 1.
-      }
-   }
-}
-\sstroutine{
-   RestFreq\sstlabel{RestFreq}
-}{
-   The rest frequency
-}{
-   \sstdescription{
-      This attribute specifies the frequency corresponding to zero
-      velocity. It is used when converting between between velocity-based
-      coordinate systems and and other coordinate systems (such as frequency,
-      wavelength, energy, etc). The default value is 1.0E5 GHz.
-
-      When setting a new value for this attribute, the new value can be
-      supplied either directly as a frequency, or indirectly as a wavelength
-      or energy, in which case the supplied value is converted to a frequency
-      before being stored. The nature of the supplied value is indicated by
-      appending text to the end of the numerical value indicating the units in
-      which the value is supplied. If the units are not specified, then the
-      supplied value is assumed to be a frequency in units of GHz. If the
-      supplied unit is a unit of frequency, the supplied value is assumed to
-      be a frequency in the given units. If the supplied unit is a unit of
-      length, the supplied value is assumed to be a (vacuum) wavelength. If
-      the supplied unit is a unit of energy, the supplied value is assumed to
-      be an energy. For instance, the following strings all result in
-      a rest frequency of around 1.4E14 Hz being used: {\tt{"}}1.4E5{\tt{"}}, {\tt{"}}1.4E14 Hz{\tt{"}},
-      {\tt{"}}1.4E14 s$*$$*$-1{\tt{"}}, {\tt{"}}1.4E5 GHz{\tt{"}}, {\tt{"}}2.14E-6 m{\tt{"}}, {\tt{"}}21400 Angstrom{\tt{"}}, {\tt{"}}9.28E-20 J{\tt{"}},
-      {\tt{"}}9.28E-13 erg{\tt{"}}, {\tt{"}}0.58 eV{\tt{"}}, etc.
-
-      When getting the value of this attribute, the returned value is
-      always a frequency in units of GHz.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RootCorner\sstlabel{RootCorner}
-}{
-   Specifies which edges of the 3D box should be annotated
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      which edges of the cube enclosing the 3D graphics space are used
-      for displaying numerical and descriptive axis labels. The attribute
-      value identifies one of the eight corners of the cube within
-      which graphics are being drawn (i.e. the cube specified by the
-      GRAPHBOX argument when \htmlref{AST\_PLOT3D}{AST_PLOT3D}
-      was called tp create the \htmlref{Plot3D}{Plot3D}). \htmlref{Axis}{Axis} labels and tick marks will
-      be placed on the three cube edges that meet at the given corner.
-
-      The attribute value should consist of three character, each of
-      which must be either {\tt{"}}U{\tt{"}} or {\tt{"}}L{\tt{"}}. The first character in the string
-      specifies the position of the corner on the first graphics axis.
-      If the character is {\tt{"}}U{\tt{"}} then the corner is at the upper bound on the
-      first graphics axis. If it is {\tt{"}}L{\tt{"}}, then the corner is at the lower
-      bound on the first axis. Likewise, the second and third characters
-      in the string specify the location of the corner on the second and
-      third graphics axes.
-
-      For instance, corner {\tt{"}}LLL{\tt{"}} is the corner that is at the lower bound
-      on all three graphics axes, and corner {\tt{"}}ULU{\tt{"}} is at the upper bound
-      on axes 1 and 3 but at the lower bound on axis 2.
-
-      The default value is {\tt{"}}LLL{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot3D
-      }{
-         All Plot3Ds have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Seed\sstlabel{Seed}
-}{
-   Random number seed for a MathMap
-}{
-   \sstdescription{
-      This attribute, which may take any integer value, determines the
-      sequence of random numbers produced by the random number functions in
-      \htmlref{MathMap}{MathMap} expressions. It is set to an unpredictable default value when
-      a MathMap is created, so that by default each MathMap uses a different
-      set of random numbers.
-
-      If required, you may set this Seed attribute to a value of your
-      choosing in order to produce repeatable behaviour from the random
-      number functions. You may also enquire the Seed value (e.g. if an
-      initially unpredictable value has been used) and then use it to
-      reproduce the resulting sequence of random numbers, either from the
-      same MathMap or from another one.
-
-      Clearing the Seed attribute gives it a new unpredictable default
-      value.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         MathMap
-      }{
-         All MathMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SideBand\sstlabel{SideBand}
-}{
-   Indicates which sideband a dual sideband spectrum represents
-}{
-   \sstdescription{
-      This attribute indicates whether the \htmlref{DSBSpecFrame}{DSBSpecFrame} currently
-      represents its lower or upper sideband, or an offset from the local
-      oscillator frequency. When querying the current value, the returned
-      string is always one of {\tt{"}}usb{\tt{"}} (for upper sideband), {\tt{"}}lsb{\tt{"}} (for lower
-      sideband), or {\tt{"}}lo{\tt{"}} (for offset from the local oscillator frequency).
-      When setting a new value, any of the strings {\tt{"}}lsb{\tt{"}}, {\tt{"}}usb{\tt{"}}, {\tt{"}}observed{\tt{"}},
-      {\tt{"}}image{\tt{"}} or {\tt{"}}lo{\tt{"}} may be supplied (case insensitive). The {\tt{"}}observed{\tt{"}}
-      sideband is which ever sideband (upper or lower) contains the central
-      spectral position given by attribute \htmlref{DSBCentre}{DSBCentre}, and the {\tt{"}}image{\tt{"}}
-      sideband is the other sideband. It is the sign of the \htmlref{IF}{IF} attribute
-      which determines if the observed sideband is the upper or lower
-      sideband. The default value for SideBand is the observed sideband.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         DSBSpecFrame
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SimpFI\sstlabel{SimpFI}
-}{
-   Forward-inverse MathMap pairs simplify?
-}{
-   \sstdescription{
-      This attribute should be set to a non-zero value if applying a
-      \htmlref{MathMap}{MathMap}'s forward transformation, followed immediately by the matching
-      inverse transformation will always restore the original set of
-      coordinates. It indicates that AST may replace such a sequence of
-      operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
-      while simplifying a compound Mapping (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}).
-
-      By default, the SimpFI attribute is zero, so that AST will not perform
-      this simplification unless you have set SimpFI to indicate that it is
-      safe to do so.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         MathMap
-      }{
-         All MathMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For simplification to occur, the two MathMaps must be in series and
-         be identical (with textually identical transformation
-         functions). Functional equivalence is not sufficient.
-
-         \sstitem
-         The consent of both MathMaps is required before simplification can
-         take place. If either has a SimpFI value of zero, then simplification
-         will not occur.
-
-         \sstitem
-         The SimpFI attribute controls simplification only in the case where
-         a MathMap's forward transformation is followed by the matching inverse
-         transformation. It does not apply if an inverse transformation is
-         followed by a forward transformation. This latter case is controlled
-         by the \htmlref{SimpIF}{SimpIF} attribute.
-
-         \sstitem
-         The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
-         defined when the MathMap is created (corresponding to the FWD and
-         INV arguments of its constructor function). If the MathMap is
-         inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
-         SimpFI and SimpIF attributes will be interchanged.
-      }
-   }
-}
-\sstroutine{
-   SimpIF\sstlabel{SimpIF}
-}{
-   Inverse-forward MathMap pairs simplify?
-}{
-   \sstdescription{
-      This attribute should be set to a non-zero value if applying a
-      \htmlref{MathMap}{MathMap}'s inverse transformation, followed immediately by the matching
-      forward transformation will always restore the original set of
-      coordinates. It indicates that AST may replace such a sequence of
-      operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
-      while simplifying a compound Mapping (e.g. using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}).
-
-      By default, the SimpIF attribute is zero, so that AST will not perform
-      this simplification unless you have set SimpIF to indicate that it is
-      safe to do so.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         MathMap
-      }{
-         All MathMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For simplification to occur, the two MathMaps must be in series and
-         be identical (with textually identical transformation
-         functions). Functional equivalence is not sufficient.
-
-         \sstitem
-         The consent of both MathMaps is required before simplification can
-         take place. If either has a SimpIF value of zero, then simplification
-         will not occur.
-
-         \sstitem
-         The SimpIF attribute controls simplification only in the case where
-         a MathMap's inverse transformation is followed by the matching forward
-         transformation. It does not apply if a forward transformation is
-         followed by an inverse transformation. This latter case is controlled
-         by the \htmlref{SimpFI}{SimpFI} attribute.
-
-         \sstitem
-         The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
-         defined when the MathMap is created (corresponding to the FWD and
-         INV arguments of its constructor function). If the MathMap is
-         inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
-         SimpFI and SimpIF attributes will be interchanged.
-      }
-   }
-}
-\sstroutine{
-   Size(element)\sstlabel{Sizeelement}
-}{
-   Character size for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the character size used when drawing
-      each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Size(title)=2.0{\tt{"}} causes the Plot title to be drawn
-      using twice the default character size.
-
-      The range of character sizes available and the appearance of the
-      resulting text is determined by the underlying graphics system.
-      The default behaviour is for all graphical elements to be drawn
-      using the default character size supplied by this graphics
-      system.
-   }
-   \sstattributetype{
-      Floating Point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Size{\tt{"}} instead
-         of {\tt{"}}Size(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
-         affect the attribute value of all graphical elements, while a
-         {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Size(TextLab)
-         value.
-      }
-   }
-}
-\sstroutine{
-   SizeGuess\sstlabel{SizeGuess}
-}{
-   The expected size of the KeyMap
-}{
-   \sstdescription{
-      This is attribute gives an estimate of the number of entries that
-      will be stored in the \htmlref{KeyMap}{KeyMap}. It is used to tune the internal
-      properties of the KeyMap for speed and efficiency. A larger value
-      will result in faster access at the expense of increased memory
-      requirements. However if the SizeGuess value is much larger than
-      the actual size of the KeyMap, then there will be little, if any,
-      speed gained by making the SizeGuess even larger. The default value
-      is 300.
-
-      The value of this attribute can only be changed if the KeyMap is
-      empty. Its value can be set conveniently when creating the KeyMap.
-      An error will be reported if an attempt is made to set or clear the
-      attribute when the KeyMap contains any entries.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         KeyMap
-      }{
-         All KeyMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Skip\sstlabel{Skip}
-}{
-   Skip irrelevant data?
-}{
-   \sstdescription{
-      This is a boolean attribute which indicates whether the \htmlref{Object}{Object}
-      data being read through a \htmlref{Channel}{Channel} are inter-mixed with other,
-      irrelevant, external data.
-
-      If Skip is zero (the default), then the source of input data is
-      expected to contain descriptions of AST Objects and comments and
-      nothing else (if anything else is read, an error will
-      result). If Skip is non-zero, then any non-Object data
-      encountered between Objects will be ignored and simply skipped
-      over in order to reach the next Object.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The FitsChan class sets the default value of this attribute
-         to 1, so that all irrelevant FITS headers will normally be
-         ignored.
-      }
-   }
-}
-\sstroutine{
-   SkyRef(axis)\sstlabel{SkyRefaxis}
-}{
-   Position defining the offset coordinate system
-}{
-   \sstdescription{
-      This attribute allows a \htmlref{SkyFrame}{SkyFrame} to represent offsets, rather than
-      absolute axis values, within the coordinate system specified by the
-      \htmlref{System}{System} attribute. If supplied, SkyRef should be set to hold the
-      longitude and latitude of a point within the coordinate system
-      specified by the System attribute. The coordinate system represented
-      by the SkyFrame will then be rotated in order to put the specified
-      position at either the pole or the origin of the new coordinate system
-      (as indicated by the \htmlref{SkyRefIs}{SkyRefIs} attribute). The orientation of the
-      modified coordinate system is then controlled using the SkyRefP
-      attribute.
-
-      If an integer axis index is included in the attribute name (e.g.
-      {\tt{"}}SkyRef(1){\tt{"}}) then the attribute value should be supplied as a single
-      floating point axis value, in radians, when setting a value for the
-      attribute, and will be returned in the same form when getting the value
-      of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
-      or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
-      given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
-      If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRef{\tt{"}}) then
-      the attribute value should be supplied as a character string
-      containing two formatted axis values (an axis 1 value followed by a
-      comma, followed by an axis 2 value). The same form
-      will be used when getting the value of the attribute.
-
-      The default values for SkyRef are zero longitude and zero latitude.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the System attribute of the SkyFrame is changed, any position
-         given for SkyRef is transformed into the new System.
-
-         \sstitem
-         If a value has been assigned to SkyRef attribute, then
-         the default values for certain attributes are changed as follows:
-         the default axis Labels for the SkyFrame are modified by appending
-         {\tt{"}} offset{\tt{"}} to the end, the default axis Symbols for the SkyFrame are
-         modified by prepending the character {\tt{"}}D{\tt{"}} to the start, and the
-         default title is modified by replacing the projection information by the
-         origin information.
-      }
-   }
-   \sstdiytopic{
-      Aligning SkyFrames with Offset Coordinate Systems
-   }{
-      The offset coordinate system within a SkyFrame should normally be
-      considered as a superficial {\tt{"}}re-badging{\tt{"}} of the axes of the coordinate
-      system specified by the System attribute - it merely provides an
-      alternative numerical {\tt{"}}label{\tt{"}} for each position in the System coordinate
-      system. The SkyFrame retains full knowledge of the celestial coordinate
-      system on which the offset coordinate system is based (given by the
-      System attribute). For instance, the SkyFrame retains knowledge of the
-      way that one celestial coordinate system may {\tt{"}}drift{\tt{"}} with respect to
-      another over time. Normally, if you attempt to align two SkyFrames (e.g.
-      using the \htmlref{AST\_CONVERT}{AST_CONVERT} or \htmlref{AST\_FINDFRAME}{AST_FINDFRAME} routine),
-      the effect of any offset coordinate system defined in either SkyFrame
-      will be removed, resulting in alignment being performed in the
-      celestial coordinate system given by the \htmlref{AlignSystem}{AlignSystem} attribute.
-      However, by setting the \htmlref{AlignOffset}{AlignOffset} attribute ot a non-zero value, it
-      is possible to change this behaviour so that the effect of the offset
-      coordinate system is not removed when aligning two SkyFrames.
-   }
-}
-\sstroutine{
-   SkyRefIs\sstlabel{SkyRefIs}
-}{
-   Selects the nature of the offset coordinate system
-}{
-   \sstdescription{
-      This attribute controls how the values supplied for the SkyRef and
-      SkyRefP attributes are used. These three attributes together allow
-      a \htmlref{SkyFrame}{SkyFrame} to represent offsets relative to some specified origin
-      or pole within the coordinate system specified by the \htmlref{System}{System} attribute,
-      rather than absolute axis values. SkyRefIs can take one of the
-      case-insensitive values {\tt{"}}Origin{\tt{"}}, {\tt{"}}Pole{\tt{"}} or {\tt{"}}Ignored{\tt{"}}.
-
-      If SkyRefIs is set to {\tt{"}}Origin{\tt{"}}, then the coordinate system
-      represented by the SkyFrame is modified to put the origin of longitude
-      and latitude at the position specified by the SkyRef attribute.
-
-      If SkyRefIs is set to {\tt{"}}Pole{\tt{"}}, then the coordinate system represented
-      by the SkyFrame is modified to put the north pole at the position
-      specified by the SkyRef attribute.
-
-      If SkyRefIs is set to {\tt{"}}Ignored{\tt{"}} (the default), then any value set for the
-      SkyRef attribute is ignored, and the SkyFrame represents the coordinate
-      system specified by the System attribute directly without any rotation.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SkyRefP(axis)\sstlabel{SkyRefPaxis}
-}{
-   Position on primary meridian of offset coordinate system
-}{
-   \sstdescription{
-      This attribute is used to control the orientation of the offset
-      coordinate system defined by attributes SkyRef and \htmlref{SkyRefIs}{SkyRefIs}. If used,
-      it should be set to hold the longitude and latitude of a point within
-      the coordinate system specified by the \htmlref{System}{System} attribute. The offset
-      coordinate system represented by the \htmlref{SkyFrame}{SkyFrame} will then be rotated in
-      order to put the position supplied for SkyRefP on the zero longitude
-      meridian. This rotation is about an axis from the centre of the
-      celestial sphere to the point specified by the SkyRef attribute.
-      The default value for SkyRefP is usually the north pole (that is, a
-      latitude of $+$90 degrees in the coordinate system specified by the System
-      attribute). The exception to this is if the SkyRef attribute is
-      itself set to either the north or south pole. In these cases the
-      default for SkyRefP is the origin (that is, a (0,0) in the coordinate
-      system specified by the System attribute).
-
-      If an integer axis index is included in the attribute name (e.g.
-      {\tt{"}}SkyRefP(1){\tt{"}}) then the attribute value should be supplied as a single
-      floating point axis value, in radians, when setting a value for the
-      attribute, and will be returned in the same form when getting the value
-      of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
-      or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
-      given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
-      If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRefP{\tt{"}}) then
-      the attribute value should be supplied as a character string
-      containing two formatted axis values (an axis 1 value followed by a
-      comma, followed by an axis 2 value). The same form
-      will be used when getting the value of the attribute.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the position given by the SkyRef attribute defines the origin
-         of the offset coordinate system (that is, if the SkyRefIs attribute
-         is set to {\tt{"}}origin{\tt{"}}), then there will in general be two orientations
-         which will put the supplied SkyRefP position on the zero longitude
-         meridian. The orientation which is actually used is the one which
-         gives the SkyRefP position a positive latitude in the offset coordinate
-         system (the other possible orientation would give the SkyRefP position
-         a negative latitude).
-
-         \sstitem
-         An error will be reported if an attempt is made to use a
-         SkyRefP value which is co-incident with SkyRef or with the point
-         diametrically opposite to SkyRef on the celestial sphere. The
-         reporting of this error is deferred until the SkyRef and SkyRefP
-         attribute values are used within a calculation.
-
-         \sstitem
-         If the System attribute of the SkyFrame is changed, any position
-         given for SkyRefP is transformed into the new System.
-      }
-   }
-}
-\sstroutine{
-   SourceSys\sstlabel{SourceSys}
-}{
-   Spectral system in which the source velocity is stored
-}{
-   \sstdescription{
-      This attribute identifies the spectral system in which the
-      \htmlref{SourceVel}{SourceVel} attribute value (the source velocity) is supplied and
-      returned. It can be one of the following:
-
-      \sstitemlist{
-
-         \sstitem
-            {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
-         \sstitem
-            {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
-         \sstitem
-            {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
-         \sstitem
-            {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
-         \sstitem
-            {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
-      }
-      When setting a new value for the SourceVel attribute, the source
-      velocity should be supplied in the spectral system indicated
-      by this attribute. Likewise, when getting the value of the SourceVel
-      attribute, the velocity will be returned in this spectral system.
-
-      If the value of SourceSys is changed, the value stored for SourceVel
-      will be converted from the old to the new spectral systems.
-
-      The default value is {\tt{"}}VELO{\tt{"}} (apparent radial velocity).
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SourceVRF\sstlabel{SourceVRF}
-}{
-   Rest frame in which the source velocity is stored
-}{
-   \sstdescription{
-      This attribute identifies the rest frame in which the source
-      velocity or redshift is stored (the source velocity or redshift is
-      accessed using attribute \htmlref{SourceVel}{SourceVel}). When setting a new value for the
-      SourceVel attribute, the source velocity or redshift should be supplied
-      in the rest frame indicated by this attribute. Likewise, when getting
-      the value of the SourceVel attribute, the velocity or redshift will be
-      returned in this rest frame.
-
-      If the value of SourceVRF is changed, the value stored for SourceVel
-      will be converted from the old to the new rest frame.
-
-      The values which can be supplied are the same as for the \htmlref{StdOfRest}{StdOfRest}
-      attribute (except that SourceVRF cannot be set to {\tt{"}}Source{\tt{"}}). The
-      default value is {\tt{"}}Helio{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SourceVel\sstlabel{SourceVel}
-}{
-   The source velocity
-}{
-   \sstdescription{
-      This attribute (together with \htmlref{SourceSys}{SourceSys}, \htmlref{SourceVRF}{SourceVRF}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec})
-      defines the {\tt{"}}Source{\tt{"}} standard of rest (see attribute \htmlref{StdOfRest}{StdOfRest}). This is
-      a rest frame which is moving towards the position given by RefRA and
-      RefDec at a  velocity given by SourceVel. A positive value means
-      the source is moving away from the observer. When a new value is
-      assigned to this attribute, the supplied value is assumed to refer
-      to the spectral system specified by the SourceSys attribute. For
-      instance, the SourceVel value may be supplied as a radio velocity, a
-      redshift, a beta factor, etc. Similarly, when the current value of
-      the SourceVel attribute is obtained, the returned value will refer
-      to the spectral system specified by the SourceSys value. If the
-      SourceSys value is changed, any value previously stored for the SourceVel
-      attribute will be changed automatically from the old spectral system
-      to the new spectral system.
-
-      When setting a value for SourceVel, the value should be supplied in the
-      rest frame specified by the SourceVRF attribute. Likewise, when getting
-      the value of SourceVel, it will be returned in the rest frame specified
-      by the SourceVRF attribute.
-
-      The default SourceVel value is zero.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         It is important to set an appropriate value for SourceVRF and
-         SourceSys before setting a value for SourceVel. If a new value is later
-         set for SourceVRF or SourceSys, the value stored for SourceVel will
-         simultaneously be changed to the new standard of rest or spectral
-         system.
-      }
-   }
-}
-\sstroutine{
-   SpecOrigin\sstlabel{SpecOrigin}
-}{
-   The zero point for SpecFrame axis values
-}{
-   \sstdescription{
-      This specifies the origin from which all spectral values are measured.
-      The default value (zero) results in the \htmlref{SpecFrame}{SpecFrame} describing
-      absolute spectral values in the system given by the \htmlref{System}{System} attribute
-      (e.g. frequency, velocity, etc). If a SpecFrame is to be used to
-      describe offset from some origin, the SpecOrigin attribute
-      should be set to hold the required origin value. The SpecOrigin value
-      stored inside the SpecFrame structure is modified whenever SpecFrame
-      attribute values are changed so that it refers to the original spectral
-      position.
-
-      When setting a new value for this attribute, the supplied value is assumed
-      to be in the system, units and standard of rest described by the SpecFrame.
-      Likewise, when getting the value of this attribute, the value is returned
-      in the system, units and standard of rest described by the SpecFrame. If
-      any of these attributes are changed, then any previously stored SpecOrigin
-      value will also be changed so that refers to the new system, units or
-      standard of rest.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SpecVal\sstlabel{SpecVal}
-}{
-   The spectral position at which flux values are measured
-}{
-   \sstdescription{
-      This attribute specifies the spectral position (frequency, wavelength,
-      etc.), at which the values described by the \htmlref{FluxFrame}{FluxFrame} are measured.
-      It is used when determining the \htmlref{Mapping}{Mapping} between between FluxFrames.
-
-      The default value and spectral system used for this attribute are
-      both specified when the FluxFrame is created.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FluxFrame
-      }{
-         All FluxFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   StcsArea\sstlabel{StcsArea}
-}{
-   Return the CoordinateArea component when reading an STC-S document?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls what is returned
-      by the
-      \htmlref{AST\_READ}{AST_READ}
-      function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
-      If StcsArea is set non-zero (the default), then a \htmlref{Region}{Region}
-      representing the STC CoordinateArea will be returned by
-      AST\_READ.
-      If StcsArea is set to zero, then the STC CoordinateArea
-      will not be returned.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps} can be used to
-         specify other Objects to be returned by
-         AST\_READ.
-         If more than one of these attributes is set non-zero, then the
-         actual \htmlref{Object}{Object} returned by
-         AST\_READ
-         will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
-         case, the Region representing the STC CoordinateArea will be
-         stored in the returned KeyMap using the key {\tt{"}}AREA{\tt{"}}. If StcsArea
-         is the only attribute to be set non-zero, then the Object returned by
-         AST\_READ
-         will be the CoordinateArea Region itself.
-
-         \sstitem
-         The class of Region used to represent the CoordinateArea for each
-         STC-S sub-phrase is determined by the first word in the
-         sub-phrase (the {\tt{"}}sub-phrase identifier{\tt{"}}). The individual sub-phrase
-         Regions are combined into a single \htmlref{Prism}{Prism}, which is then simplified
-         using \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-         to form the returned region.
-
-         \sstitem
-         Sub-phrases that represent a single value ( that is, have
-         identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}} or {\tt{"}}Redshift{\tt{"}} ) are
-         considered to be be part of the STC CoordinateArea component.
-
-         \sstitem
-         The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
-         its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
-         start time is specified by the sub-phrase, then the stop time will be
-         used instead. If no stop time is specified by the sub-phrase, then
-         the single time value specified in the sub-phrase will be used
-         instead. Subsequently clearing the TimeOrigin attribute (or setting
-         its value to zero) will cause the TimeFrame to reprsent absolute times.
-
-         \sstitem
-         The \htmlref{Epoch}{Epoch} attribute for the returned Region is set in the same
-         way as the TimeOrigin attribute (see above).
-      }
-   }
-}
-\sstroutine{
-   StcsCoords\sstlabel{StcsCoords}
-}{
-   Return the Coordinates component when reading an STC-S document?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls what is returned
-      by the
-      \htmlref{AST\_READ}{AST_READ}
-      function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
-      If StcsCoords is set non-zero, then a \htmlref{PointList}{PointList}
-      representing the STC Coordinates will be returned by
-      AST\_READ.
-      If StcsCoords is set to zero (the default), then the STC
-      Coordinates will not be returned.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Other attributes such as \htmlref{StcsArea}{StcsArea} and \htmlref{StcsProps}{StcsProps} can be used to
-         specify other Objects to be returned by
-         AST\_READ.
-         If more than one of these attributes is set non-zero, then the
-         actual \htmlref{Object}{Object} returned by
-         AST\_READ
-         will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
-         case, the PointList representing the STC Coordinates will be
-         stored in the returned KeyMap using the key {\tt{"}}COORDS{\tt{"}}. If StcsCoords
-         is the only attribute to be set non-zero, then the Object returned by
-         AST\_READ
-         will be the Coordinates PointList itself.
-
-         \sstitem
-         The Coordinates component is specified by the additional axis
-         values embedded within the body of each STC-S sub-phrase that
-         represents an extended area. Sub-phrases that represent a single
-         value ( that is, have identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}}
-         or {\tt{"}}Redshift{\tt{"}} ) are not considered to be be part of the STC
-         Coordinates component.
-
-         \sstitem
-         If the STC-S documents does not contain a Coordinates component,
-         then a NULL object pointer
-         (AST\_\_NULL)
-         will be returned by
-         AST\_READ
-         if the Coordinates component is the only object being returned. If
-         other objects are also being returned (see attributes StcsProps and
-         StcsArea), then the returned KeyMap will contain a {\tt{"}}COORDS{\tt{"}} key
-         only if the Coordinates component is read succesfully.
-
-         \sstitem
-         The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
-         its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
-         start time is specified by the sub-phrase, then the stop time will be
-         used instead. If no stop time is specified by the sub-phrase, then
-         the single time value specified in the sub-phrase will be used
-         instead. Subsequently clearing the TimeOrigin attribute (or setting
-         its value to zero) will cause the TimeFrame to reprsent absolute times.
-
-         \sstitem
-         The \htmlref{Epoch}{Epoch} attribute for the returned \htmlref{Region}{Region} is set in the same
-         way as the TimeOrigin attribute (see above).
-      }
-   }
-}
-\sstroutine{
-   StcsIndent\sstlabel{StcsIndent}
-}{
-   Controls indentation and line splitting of output text
-}{
-   \sstdescription{
-      This attribute controls how the STC-S text is written out to the
-      sink function when writing an AST object to an \htmlref{StcsChan}{StcsChan}. If it is
-      zero (the default) the entire STC-S description is written out by a
-      single invocation of the sink function. The text supplied to the
-      sink function will not contain any linefeed characters, and each
-      pair of adjacent words will be separated by a single space. The
-      text may thus be arbitrarily large and the \htmlref{StcsLength}{StcsLength} attribute is
-      ignored.
-
-      If StcsIndent is non-zero, then the text is written out via
-      multiple calls to the sink function, each call corresponding to a
-      single {\tt{"}}line{\tt{"}} of text (although no line feed characters will be
-      inserted by AST). The complete STC-S description is broken into
-      lines so that:
-
-      \sstitemlist{
-
-         \sstitem
-         the line length specified by attribute StcsLength is not exceeded
-
-         \sstitem
-         each sub-phrase (time, space, etc.) starts on a new line
-
-         \sstitem
-         each argument in a compound spatial region starts on a new line
-
-      }
-      If this causes a sub-phrase to extend to two or more lines, then the
-      second and subsequent lines will be indented by three spaces compared
-      to the first line. In addition, lines within a compound spatial region
-      will have extra indentation to highlight the nesting produced by the
-      parentheses. Each new level of nesting will be indented by a further
-      three spaces.
-
-      Note, the default value of zero is unlikely to be appropriate when
-      an StcsChan is used within Fortran code. In this case, StcsIndent
-      should usually be set non-zero, and the StcsLength attribute set to
-      the size of the CHARACTER variable used to
-      receive the text returned by \htmlref{AST\_GETLINE}{AST_GETLINE} within the sink function.
-      This avoids the possibility of long lines being truncated invisibly
-      within AST\_GETLINE.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   StcsLength\sstlabel{StcsLength}
-}{
-   Controls output line length
-}{
-   \sstdescription{
-      This attribute specifies the maximum length to use when writing out
-      text through the sink function supplied when the \htmlref{StcsChan}{StcsChan} was created.
-      It is ignored if the \htmlref{StcsIndent}{StcsIndent} attribute is zero (in which case
-      the text supplied to the sink function can be of any length). The
-      default value is 70.
-
-      The number of characters in each string written out through the sink
-      function will not usually be greater than the value of this attribute
-      (but may be less). However, if any single word in the STC-S
-      description exceeds the specified length, then the word will be
-      written out as a single line.
-
-      Note, the default value of zero is unlikely to be appropriate when
-      an StcsChan is used within Fortran code. In this case, StcsLength
-      should usually be set to the size of the CHARACTER variable used to
-      receive the text returned by \htmlref{AST\_GETLINE}{AST_GETLINE} within the sink function.
-      In addition, the StcsIndent attribute should be set non-zero. This
-      avoids the possibility of long lines being truncated invisibly
-      within AST\_GETLINE.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   StcsProps\sstlabel{StcsProps}
-}{
-   Return all properties when reading an STC-S document?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls what is returned
-      by the
-      \htmlref{AST\_READ}{AST_READ}
-      function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
-      If StcsProps is set non-zero, then a \htmlref{KeyMap}{KeyMap} containing all the
-      properties read from the STC-S document will be returned by
-      AST\_READ.
-      If StcsProps is set to zero (the default), then the properties
-      will not be returned.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsArea}{StcsArea} can be used to
-         specify other Objects to be returned by
-         AST\_READ.
-         If more than one of these attributes is set non-zero, then the
-         actual \htmlref{Object}{Object} returned by
-         AST\_READ
-         will be a KeyMap containing the requested Objects. In this
-         case, the properties KeyMap will be stored in the returned KeyMap
-         using the key {\tt{"}}PROPS{\tt{"}}. If StcsProps is the only attribute to be
-         set non-zero, then the Object returned by
-         AST\_READ
-         will be the properties KeyMap itself.
-
-         \sstitem
-         The KeyMap containing the properties will have entries for one or
-         more of the following keys: {\tt{"}}TIME\_PROPS{\tt{"}}, {\tt{"}}SPACE\_PROPS{\tt{"}}, {\tt{"}}SPECTRAL\_PROPS{\tt{"}}
-         and {\tt{"}}REDSHIFT\_PROPS{\tt{"}}. Each of these entries will be another KeyMap
-         containing the properties of the corresponding STC-S sub-phrase.
-      }
-   }
-}
-\sstroutine{
-   StdOfRest\sstlabel{StdOfRest}
-}{
-   Standard of rest
-}{
-   \sstdescription{
-      This attribute identifies the standard of rest to which the spectral
-      axis values of a \htmlref{SpecFrame}{SpecFrame} refer, and may take any of the values
-      listed in the {\tt{"}}Standards of Rest{\tt{"}} section (below).
-
-      The default StdOfRest value is {\tt{"}}Helio{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Standards of Rest
-   }{
-      The SpecFrame class supports the following StdOfRest values (all are
-      case-insensitive):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}Topocentric{\tt{"}}, {\tt{"}}Topocent{\tt{"}} or {\tt{"}}Topo{\tt{"}}: The observers rest-frame (assumed
-         to be on the surface of the earth). Spectra recorded in this standard of
-         rest suffer a Doppler shift which varies over the course of a day
-         because of the rotation of the observer around the axis of the earth.
-         This standard of rest must be qualified using the \htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon},
-         \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes.
-
-         \sstitem
-         {\tt{"}}Geocentric{\tt{"}}, {\tt{"}}Geocentr{\tt{"}} or {\tt{"}}Geo{\tt{"}}: The rest-frame of the earth centre.
-         Spectra recorded in this standard of rest suffer a Doppler shift which
-         varies over the course of a year because of the rotation of the earth
-         around the Sun. This standard of rest must be qualified using the Epoch,
-         RefRA and RefDec attributes.
-
-         \sstitem
-         {\tt{"}}Barycentric{\tt{"}}, {\tt{"}}Barycent{\tt{"}} or {\tt{"}}Bary{\tt{"}}: The rest-frame of the solar-system
-         barycentre. Spectra recorded in this standard of rest suffer a Doppler
-         shift which depends both on the velocity of the Sun through the Local
-         Standard of Rest, and on the movement of the planets through the solar
-         system. This standard of rest must be qualified using the Epoch, RefRA
-         and RefDec attributes.
-
-         \sstitem
-         {\tt{"}}Heliocentric{\tt{"}}, {\tt{"}}Heliocen{\tt{"}} or {\tt{"}}Helio{\tt{"}}: The rest-frame of the Sun.
-         Spectra recorded in this standard of rest suffer a Doppler shift which
-         depends on the velocity of the Sun through the Local Standard of Rest.
-         This standard of rest must be qualified using the RefRA and RefDec
-         attributes.
-
-         \sstitem
-         {\tt{"}}LSRK{\tt{"}}, {\tt{"}}LSR{\tt{"}}: The rest-frame of the kinematical Local Standard of
-         Rest. Spectra recorded in this standard of rest suffer a Doppler shift
-         which depends on the velocity of the kinematical Local Standard of Rest
-         through the galaxy. This standard of rest must be qualified using the
-         RefRA and RefDec attributes.
-
-         \sstitem
-         {\tt{"}}LSRD{\tt{"}}: The rest-frame of the dynamical Local Standard of Rest. Spectra
-         recorded in this standard of rest suffer a Doppler shift which depends
-         on the velocity of the dynamical Local Standard of Rest through the
-         galaxy.  This standard of rest must be qualified using the RefRA and
-         RefDec attributes.
-
-         \sstitem
-         {\tt{"}}Galactic{\tt{"}}, {\tt{"}}Galactoc{\tt{"}} or {\tt{"}}Gal{\tt{"}}: The rest-frame of the galactic centre.
-         Spectra recorded in this standard of rest suffer a Doppler shift which
-         depends on the velocity of the galactic centre through the local group.
-         This standard of rest must be qualified using the RefRA and RefDec
-         attributes.
-
-         \sstitem
-         {\tt{"}}Local\_group{\tt{"}}, {\tt{"}}Localgrp{\tt{"}} or {\tt{"}}LG{\tt{"}}: The rest-frame of the local group.
-         This standard of rest must be qualified using the RefRA and RefDec
-         attributes.
-
-         \sstitem
-         {\tt{"}}Source{\tt{"}}, or {\tt{"}}src{\tt{"}}: The rest-frame of the source. This standard of
-         rest must be qualified using the RefRA, RefDec and \htmlref{SourceVel}{SourceVel} attributes.
-
-      }
-      Where more than one alternative \htmlref{System}{System} value is shown above, the
-      first of these will be returned when an enquiry is made.
-   }
-}
-\sstroutine{
-   Strict\sstlabel{Strict}
-}{
-   Report an error if any unexpeted data items are found?
-}{
-   \sstdescription{
-      This is a boolean attribute which indicates whether a warning
-      rather than an error should be issed for insignificant conversion
-      problems. If it is set non-zero, then fatal errors are issued
-      instead of warnings, resulting in the
-      inherited STATUS variable being set to an error value.
-      If Strict is zero (the default), then execution continues after minor
-      conversion problems, and a warning message is added to the \htmlref{Channel}{Channel}
-      structure. Such messages can be retrieved using the
-      \htmlref{AST\_WARNINGS}{AST_WARNINGS}
-      function.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This attribute was introduced in AST version 5.0. Prior to this
-         version of AST unexpected data items read by a basic Channel always
-         caused an error to be reported. So applications linked against
-         versions of AST prior to version 5.0 may not be able to read \htmlref{Object}{Object}
-         descriptions created by later versions of AST, if the Object's class
-         description has changed.
-      }
-   }
-}
-\sstroutine{
-   Style(element)\sstlabel{Styleelement}
-}{
-   Line style for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the line style used when drawing each
-      element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Style(border)=2{\tt{"}} causes the Plot border to be drawn
-      using line style 2 (which might result in, say, a dashed line).
-
-      The range of integer line styles available and their appearance
-      is determined by the underlying graphics system.  The default
-      behaviour is for all graphical elements to be drawn using the
-      default line style supplied by this graphics system (normally,
-      this is likely to give a solid line).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Style{\tt{"}} instead of
-         {\tt{"}}Style(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the Style(\htmlref{Border}{Border}) value.
-      }
-   }
-}
-\sstroutine{
-   Symbol(axis)\sstlabel{Symbolaxis}
-}{
-   Axis symbol
-}{
-   \sstdescription{
-      This attribute specifies a short-form symbol to be used to
-      represent coordinate values for a particular axis of a
-      \htmlref{Frame}{Frame}. This might be used (e.g.) in algebraic expressions where
-      a full description of the axis would be inappropriate. Examples
-      include {\tt{"}}RA{\tt{"}} and {\tt{"}}Dec{\tt{"}} (for Right Ascension and Declination).
-
-      If a Symbol value has not been set for a Frame axis, then a
-      suitable default is supplied.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Symbol value supplied by the Frame class is the
-         string {\tt{"}}$<$\htmlref{Domain}{Domain}$>$$<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for successive
-         axes, and $<$Domain$>$ is the value of the Frame's Domain
-         attribute (truncated if necessary so that the final string
-         does not exceed 15 characters). If no Domain value has been
-         set, {\tt{"}}x{\tt{"}} is used as the $<$Domain$>$ value in constructing this
-         default string.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Symbol value
-         (e.g. to {\tt{"}}RA{\tt{"}} or {\tt{"}}Dec{\tt{"}}) as appropriate for the particular
-         celestial coordinate system being represented.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Symbol value as
-         appropriate for the particular time system being represented.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Symbol attribute of a FrameSet axis is the same as that
-         of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   System\sstlabel{System}
-}{
-   Coordinate system used to describe positions within the domain
-}{
-   \sstdescription{
-      In general it is possible for positions within a given physical
-      domain to be described using one of several different coordinate
-      systems. For instance, the \htmlref{SkyFrame}{SkyFrame} class can use galactic
-      coordinates, equatorial coordinates, etc, to describe positions on
-      the sky. As another example, the \htmlref{SpecFrame}{SpecFrame} class can use frequency,
-      wavelength, velocity, etc, to describe a position within an
-      electromagnetic spectrum. The System attribute identifies the particular
-      coordinate system represented by a \htmlref{Frame}{Frame}. Each class of Frame
-      defines a set of acceptable values for this attribute, as listed
-      below (all are case insensitive). Where more than one alternative
-      System value is shown, the first of will be returned when an
-      enquiry is made.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The System attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
-         and may not be altered.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The System attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
-         and may not be altered. In addition, the CmpFrame class allows
-         the System attribute to be referenced for a component Frame by
-         including the index of an axis within the required component
-         Frame. For instance, {\tt{"}}System(3){\tt{"}} refers to the System attribute
-         of the component Frame which includes axis 3 of the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The System attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         SkyFrame
-      }{
-         The SkyFrame class supports the following System values and
-         associated celestial coordinate systems:
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}AZEL{\tt{"}}: Horizon coordinates. The longitude axis is azimuth
-            such that geographic north has an azimuth of zero and geographic
-            east has an azimuth of $+$PI/2 radians. The zenith has elevation
-            $+$PI/2. When converting to and from other celestial coordinate
-            systems, no corrections are applied for atmospheric refraction
-            or polar motion (however, a correction for diurnal aberattion is
-            applied). Note, unlike most other
-            celestial coordinate systems, this system is right handed. Also,
-            unlike other SkyFrame systems, the AzEl system is sensitive to
-            the timescale in which the \htmlref{Epoch}{Epoch} value is supplied. This is
-            because of the gross diurnal rotation which this system undergoes,
-            causing a small change in time to translate to a large rotation.
-            When converting to or from an AzEl system, the Epoch value for
-            both source and destination SkyFrames should be supplied in the
-            TDB timescale. The difference between TDB and TT is between 1
-            and 2 milliseconds, and so a TT value can usually be supplied in
-            place of a TDB value. The TT timescale is related to TAI via
-            TT = TAI $+$ 32.184 seconds.
-
-            \sstitem
-            {\tt{"}}ECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
-            ecliptic and mean equinox specified by the qualifying \htmlref{Equinox}{Equinox}
-            value.
-
-            \sstitem
-            {\tt{"}}FK4{\tt{"}}: The old FK4 (barycentric) equatorial coordinate system,
-            which should be qualified by an Equinox value. The underlying
-            model on which this is based is non-inertial and rotates slowly
-            with time, so for accurate work FK4 coordinate systems should
-            also be qualified by an Epoch value.
-
-            \sstitem
-            {\tt{"}}FK4-NO-E{\tt{"}} or {\tt{"}}FK4\_NO\_E{\tt{"}}: The old FK4 (barycentric) equatorial
-            system but without the {\tt{"}}E-terms of aberration{\tt{"}} (e.g. some radio
-            catalogues). This coordinate system should also be qualified by
-            both an Equinox and an Epoch value.
-
-            \sstitem
-            {\tt{"}}FK5{\tt{"}} or {\tt{"}}EQUATORIAL{\tt{"}}: The modern FK5 (barycentric) equatorial
-            coordinate system. This should be qualified by an Equinox value.
-
-            \sstitem
-            {\tt{"}}GALACTIC{\tt{"}}: Galactic coordinates (IAU 1958).
-
-            \sstitem
-            {\tt{"}}GAPPT{\tt{"}}, {\tt{"}}GEOCENTRIC{\tt{"}} or {\tt{"}}APPARENT{\tt{"}}: The geocentric apparent
-            equatorial coordinate system, which gives the apparent positions
-            of sources relative to the true plane of the Earth's equator and
-            the equinox (the coordinate origin) at a time specified by the
-            qualifying Epoch value. (Note that no Equinox is needed to
-            qualify this coordinate system because no model {\tt{"}}mean equinox{\tt{"}}
-            is involved.)  These coordinates give the apparent right
-            ascension and declination of a source for a specified date of
-            observation, and therefore form an approximate basis for
-            pointing a telescope. Note, however, that they are applicable to
-            a fictitious observer at the Earth's centre, and therefore
-            ignore such effects as atmospheric refraction and the (normally
-            much smaller) aberration of light due to the rotational velocity
-            of the Earth's surface.  Geocentric apparent coordinates are
-            derived from the standard FK5 (J2000.0) barycentric coordinates
-            by taking account of the gravitational deflection of light by
-            the Sun (usually small), the aberration of light caused by the
-            motion of the Earth's centre with respect to the barycentre
-            (larger), and the precession and nutation of the Earth's spin
-            axis (normally larger still).
-
-            \sstitem
-            {\tt{"}}HELIOECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
-            ecliptic and mean equinox of J2000.0, in which an offset is added to
-            the longitude value which results in the centre of the sun being at
-            zero longitude at the date given by the Epoch attribute. Attempts to
-            set a value for the Equinox attribute will be ignored, since this
-            system is always referred to J2000.0.
-
-            \sstitem
-            {\tt{"}}ICRS{\tt{"}}: The Internation Celestial Reference System, realised
-            through the Hipparcos catalogue. Whilst not an equatorial system
-            by definition, the ICRS is very close to the FK5 (J2000) system
-            and is usually treated as an equatorial system. The distinction
-            between ICRS and FK5 (J2000) only becomes important when accuracies
-            of 50 milli-arcseconds or better are required. ICRS need not be
-            qualified by an Equinox value.
-
-            \sstitem
-            {\tt{"}}J2000{\tt{"}}: An equatorial coordinate system based on the mean
-            dynamical equator and equinox of the J2000 epoch. The dynamical
-            equator and equinox differ slightly from those used by the FK5
-            model, and so a {\tt{"}}J2000{\tt{"}} SkyFrame will differ slightly from an
-            {\tt{"}}FK5(Equinox=J2000){\tt{"}} SkyFrame. The J2000 System need not be
-            qualified by an Equinox value
-
-            \sstitem
-            {\tt{"}}SUPERGALACTIC{\tt{"}}: De Vaucouleurs Supergalactic coordinates.
-
-            \sstitem
-            {\tt{"}}UNKNOWN{\tt{"}}: Any other general spherical coordinate system. No
-            \htmlref{Mapping}{Mapping} can be created between a pair of SkyFrames if either of the
-            SkyFrames has System set to {\tt{"}}Unknown{\tt{"}}.
-
-         }
-         Currently, the default System value is {\tt{"}}ICRS{\tt{"}}. However, this
-         default may change in future as new astrometric standards
-         evolve. The intention is to track the most modern appropriate
-         standard. For this reason, you should use the default only if
-         this is what you intend (and can tolerate any associated slight
-         change in future). If you intend to use the ICRS system
-         indefinitely, then you should specify it explicitly.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         The SpecFrame class supports the following System values and
-         associated spectral coordinate systems (the default is {\tt{"}}WAVE{\tt{"}} -
-         wavelength). They are all defined in FITS-WCS paper III:
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}FREQ{\tt{"}}: Frequency (GHz)
-
-            \sstitem
-            {\tt{"}}ENER{\tt{"}} or {\tt{"}}ENERGY{\tt{"}}: Energy (J)
-
-            \sstitem
-            {\tt{"}}WAVN{\tt{"}} or {\tt{"}}WAVENUM{\tt{"}}: Wave-number (1/m)
-
-            \sstitem
-            {\tt{"}}WAVE{\tt{"}} or {\tt{"}}WAVELEN{\tt{"}}: Vacuum wave-length (Angstrom)
-
-            \sstitem
-            {\tt{"}}AWAV{\tt{"}} or {\tt{"}}AIRWAVE{\tt{"}}: Wave-length in air (Angstrom)
-
-            \sstitem
-            {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
-            \sstitem
-            {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
-            \sstitem
-            {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
-            \sstitem
-            {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
-            \sstitem
-            {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
-         }
-         The default value for the Unit attribute for each system is shown
-         in parentheses. Note that the default value for the ActiveUnit flag
-         is .TRUE.
-         for a SpecFrame, meaning that changes to the Unit attribute for
-         a SpecFrame will result in the SpecFrame being re-mapped within
-         its enclosing FrameSet in order to reflect the change in units
-         (see \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} routine for further information).
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class supports the following System values and
-         associated coordinate systems (the default is {\tt{"}}MJD{\tt{"}}):
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}MJD{\tt{"}}: Modified Julian Date (d)
-
-            \sstitem
-            {\tt{"}}JD{\tt{"}}: Julian Date (d)
-
-            \sstitem
-            {\tt{"}}JEPOCH{\tt{"}}: Julian epoch (yr)
-
-            \sstitem
-            {\tt{"}}BEPOCH{\tt{"}}: Besselian (yr)
-
-         }
-         The default value for the Unit attribute for each system is shown
-         in parentheses. Strictly, these systems should not allow changes
-         to be made to the units. For instance, the usual definition of
-         {\tt{"}}MJD{\tt{"}} and {\tt{"}}JD{\tt{"}} include the statement that the values will be in
-         units of days. However, AST does allow the use of other units
-         with all the above supported systems (except BEPOCH), on the
-         understanding that conversion to the {\tt{"}}correct{\tt{"}} units involves
-         nothing more than a simple scaling (1 yr = 365.25 d, 1 d = 24 h,
-         1 h = 60 min, 1 min = 60 s). Besselian epoch values are defined
-         in terms of tropical years of 365.2422 days, rather than the
-         usual Julian year of 365.25 days. Therefore, to avoid any
-         confusion, the Unit attribute is automatically cleared to {\tt{"}}yr{\tt{"}} when
-         a System value of BEPOCH System is selected, and an error is
-         reported if any attempt is subsequently made to change the Unit
-         attribute.
-
-         Note that the default value for the ActiveUnit flag
-         is .TRUE.
-         for a TimeFrame, meaning that changes to the Unit attribute for
-         a TimeFrame will result in the TimeFrame being re-mapped within
-         its enclosing FrameSet in order to reflect the change in units
-         (see AST\_SETACTIVEUNIT routine for further information).
-      }
-      \sstsubsection{
-         \htmlref{FluxFrame}{FluxFrame}
-      }{
-         The FluxFrame class supports the following System values and
-         associated systems for measuring observed value:
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}FLXDN{\tt{"}}: Flux per unit frequency (W/m$\wedge$2/Hz)
-
-            \sstitem
-            {\tt{"}}FLXDNW{\tt{"}}: Flux per unit wavelength (W/m$\wedge$2/Angstrom)
-
-            \sstitem
-            {\tt{"}}SFCBR{\tt{"}}: Surface brightness in frequency units (W/m$\wedge$2/Hz/arcmin$*$$*$2)
-
-            \sstitem
-            {\tt{"}}SFCBRW{\tt{"}}: Surface brightness in wavelength units (W/m$\wedge$2/Angstrom/arcmin$*$$*$2)
-
-         }
-         The above lists specified the default units for each System. If an
-         explicit value is set for the Unit attribute but no value is set
-         for System, then the default System value is determined by the Unit
-         string (if the units are not appropriate for describing any of the
-         supported Systems then an error will be reported when an attempt is
-         made to access the System value). If no value has been specified for
-         either Unit or System, then System=FLXDN and Unit=W/m$\wedge$2/Hz are
-         used.
-      }
-   }
-}
-\sstroutine{
-   TextLab(axis)\sstlabel{TextLabaxis}
-}{
-   Draw descriptive axis labels for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether textual labels should be drawn to describe the quantity
-      being represented on each axis of a \htmlref{Plot}{Plot}. It takes a separate
-      value for each physical axis of a Plot so that, for instance,
-      the setting {\tt{"}}TextLab(2)=1{\tt{"}} specifies that descriptive labels
-      should be drawn for the second axis.
-
-      If the TextLab value of a Plot axis is non-zero, then
-      descriptive labels will be drawn for that axis, otherwise they
-      will be omitted. The default behaviour is to draw descriptive
-      labels if tick marks and numerical labels are being drawn around
-      the edges of the plotting area (see the \htmlref{Labelling}{Labelling} attribute),
-      but to omit them otherwise.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the descriptive labels is derived from the
-         Plot's \htmlref{Label(axis)}{Labelaxis} attribute, together with its \htmlref{Unit(axis)}{Unitaxis}
-         attribute if appropriate (see the \htmlref{LabelUnits(axis)}{LabelUnitsaxis} attribute).
-
-         \sstitem
-         The drawing of numerical axis labels for a Plot (which
-         indicate values on the axis) is controlled by the \htmlref{NumLab(axis)}{NumLabaxis}
-         attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}TextLab{\tt{"}} instead of
-         {\tt{"}}TextLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the TextLab(1) value.
-      }
-   }
-}
-\sstroutine{
-   TextLabGap(axis)\sstlabel{TextLabGapaxis}
-}{
-   Spacing of descriptive axis labels for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      where descriptive axis labels are placed relative to the axes they
-      describe.  It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}TextLabGap(2)=0.01{\tt{"}}
-      specifies where the descriptive label for the second axis should
-      be drawn.
-
-      For each axis, the TextLabGap value gives the spacing between the
-      descriptive label and the edge of a box enclosing all other parts
-      of the annotated grid (excluding other descriptive labels). The gap
-      is measured to the nearest edge of the label (i.e. the top or the
-      bottom). Positive values cause the descriptive label to be placed
-      outside the bounding box, while negative values cause it to be placed
-      inside.
-
-      The TextLabGap value should be given as a fraction of the minimum
-      dimension of the plotting area, the default value being $+$0.01.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If drawn, descriptive labels are always placed at the edges of
-         the plotting area, even although the corresponding numerical
-         labels may be drawn along axis lines in the interior of the
-         plotting area (see the \htmlref{Labelling}{Labelling} attribute).
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}TextLabGap{\tt{"}} instead of
-         {\tt{"}}TextLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the TextLabGap(1) value.
-      }
-   }
-}
-\sstroutine{
-   TickAll\sstlabel{TickAll}
-}{
-   Draw tick marks on all edges of a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      whether tick marks should be drawn on all edges of a \htmlref{Plot}{Plot}.
-
-      If the TickAll value of a Plot is non-zero (the default), then
-      tick marks will be drawn on all edges of the Plot. Otherwise,
-      they will be drawn only on those edges where the numerical and
-      descriptive axis labels are drawn (see the \htmlref{Edge(axis)}{Edgeaxis}
-      attribute).
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn along grid lines inside the plotting area, rather than
-         around its edges (see the \htmlref{Labelling}{Labelling} attribute).  In this case,
-         the value of the TickAll attribute is ignored.
-      }
-   }
-}
-\sstroutine{
-   TimeOrigin\sstlabel{TimeOrigin}
-}{
-   The zero point for TimeFrame axis values
-}{
-   \sstdescription{
-      This specifies the origin from which all time values are measured.
-      The default value (zero) results in the \htmlref{TimeFrame}{TimeFrame} describing
-      absolute time values in the system given by the \htmlref{System}{System} attribute
-      (e.g. MJD, Julian epoch, etc). If a TimeFrame is to be used to
-      describe elapsed time since some origin, the TimeOrigin attribute
-      should be set to hold the required origin value. The TimeOrigin value
-      stored inside the TimeFrame structure is modified whenever TimeFrame
-      attribute values are changed so that it refers to the original moment
-      in time.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         TimeFrame
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Input Formats
-   }{
-      The formats accepted when setting a TimeOrigin value are listed
-      below. They are all case-insensitive and are generally tolerant
-      of extra white space and alternative field delimiters:
-
-      \sstitemlist{
-
-         \sstitem
-         Besselian \htmlref{Epoch}{Epoch}: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
-         \sstitem
-         Julian Epoch: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
-         \sstitem
-         Units: An unqualified decimal value is interpreted as a value in
-         the system specified by the TimeFrame's System attribute, in the
-         units given by the TimeFrame's Unit attribute. Alternatively, an
-         appropriate unit string can be appended to the end of the floating
-         point value ({\tt{"}}123.4 d{\tt{"}} for example), in which case the supplied value
-         is scaled into the units specified by the Unit attribute.
-
-         \sstitem
-         Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
-         example).
-
-         \sstitem
-         Modified Julian Date: With or without decimal places
-         ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
-         \sstitem
-         Gregorian Calendar Date: With the month expressed either as an
-         integer or a 3-character abbreviation, and with optional decimal
-         places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
-         {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
-         given, the time refers to the start of the day (zero hours).
-
-         \sstitem
-         Gregorian Date and Time: Any calendar date (as above) but with
-         a fraction of a day expressed as hours, minutes and seconds
-         ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
-         separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
-      }
-   }
-   \sstdiytopic{
-      Output Format
-   }{
-      When enquiring TimeOrigin values, the returned formatted floating
-      point value represents a value in the TimeFrame's System, in the unit
-      specified by the TimeFrame's Unit attribute.
-   }
-}
-\sstroutine{
-   TimeScale\sstlabel{TimeScale}
-}{
-   Time scale
-}{
-   \sstdescription{
-      This attribute identifies the time scale to which the time axis values
-      of a \htmlref{TimeFrame}{TimeFrame} refer, and may take any of the values listed in the
-      {\tt{"}}Time Scales{\tt{"}} section (below).
-
-      The default TimeScale value depends on the current \htmlref{System}{System} value; if
-      the current TimeFrame system is {\tt{"}}Besselian epoch{\tt{"}} the default is
-      {\tt{"}}TT{\tt{"}}, otherwise it is {\tt{"}}TAI{\tt{"}}. Note, if the System attribute is set
-      so that the TimeFrame represents Besselian \htmlref{Epoch}{Epoch}, then an error
-      will be reported if an attempt is made to set the TimeScale to
-      anything other than TT.
-
-      Note, the supported time scales fall into two groups. The first group
-      containing  UT1, GMST, LAST and LMST define time in terms of the
-      orientation of the earth. The second group (containing all the remaining
-      time scales) define time in terms of an atomic process. Since the rate of
-      rotation of the earth varies in an unpredictable way, conversion between
-      two timescales in different groups relies on a value being supplied for
-      the \htmlref{Dut1}{Dut1} attribute (defined by the parent \htmlref{Frame}{Frame} class). This attribute
-      specifies the difference between the UT1 and UTC time scales, in seconds,
-      and defaults to zero. See the documentation for the Dut1 attribute for
-      further details.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         TimeFrame
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Time Scales
-   }{
-      The TimeFrame class supports the following TimeScale values (all are
-      case-insensitive):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}TAI{\tt{"}} - International Atomic Time
-
-         \sstitem
-         {\tt{"}}UTC{\tt{"}} - Coordinated Universal Time
-
-         \sstitem
-         {\tt{"}}UT1{\tt{"}} - Universal Time
-
-         \sstitem
-         {\tt{"}}GMST{\tt{"}} - Greenwich Mean Sidereal Time
-
-         \sstitem
-         {\tt{"}}LAST{\tt{"}} - Local Apparent Sidereal Time
-
-         \sstitem
-         {\tt{"}}LMST{\tt{"}} - Local Mean Sidereal Time
-
-         \sstitem
-         {\tt{"}}TT{\tt{"}} - Terrestrial Time
-
-         \sstitem
-         {\tt{"}}TDB{\tt{"}} - Barycentric Dynamical Time
-
-         \sstitem
-         {\tt{"}}TCB{\tt{"}} - Barycentric Coordinate Time
-
-         \sstitem
-         {\tt{"}}TCG{\tt{"}} - Geocentric Coordinate Time
-
-         \sstitem
-         {\tt{"}}LT{\tt{"}} - Local Time (the offset from UTC is given by attribute \htmlref{LTOffset}{LTOffset})
-
-      }
-      An very informative description of these and other time scales is
-      available at http://www.ucolick.org/$\sim$sla/leapsecs/timescales.html.
-   }
-   \sstdiytopic{
-      UTC \htmlref{Warnings}{Warnings}
-   }{
-      UTC should ideally be expressed using separate hours, minutes and
-      seconds fields (or at least in seconds for a given date) if leap seconds
-      are to be taken into account. Since the TimeFrame class represents
-      each moment in time using a single floating point number (the axis value)
-      there will be an ambiguity during a leap second. Thus an error of up to
-      1 second can result when using AST to convert a UTC time to another
-      time scale if the time occurs within a leap second. Leap seconds
-      occur at most twice a year, and are introduced to take account of
-      variation in the rotation of the earth. The most recent leap second
-      occurred on 1st January 1999. Although in the vast majority of cases
-      leap second ambiguities won't matter, there are potential problems in
-      on-line data acquisition systems and in critical applications involving
-      taking the difference between two times.
-   }
-}
-\sstroutine{
-   Title\sstlabel{Title}
-}{
-   Frame title
-}{
-   \sstdescription{
-      This attribute holds a string which is used as a title in (e.g.)
-      graphical output to describe the coordinate system which a \htmlref{Frame}{Frame}
-      represents. Examples might be {\tt{"}}Detector Coordinates{\tt{"}} or
-      {\tt{"}}Galactic Coordinates{\tt{"}}.
-
-      If a Title value has not been set for a Frame, then a suitable
-      default is supplied, depending on the class of the Frame.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default supplied by the Frame class is {\tt{"}}$<$n$>$-d coordinate
-         system{\tt{"}}, where $<$n$>$ is the number of Frame axes (\htmlref{Naxes}{Naxes}
-         attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The CmpFrame class re-defines the default Title value to be
-         {\tt{"}}$<$n$>$-d compound coordinate system{\tt{"}}, where $<$n$>$ is the number
-         of CmpFrame axes (Naxes attribute).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Title attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A Frame's Title is intended purely for interpretation by human
-         readers and not by software.
-      }
-   }
-}
-\sstroutine{
-   TitleGap\sstlabel{TitleGap}
-}{
-   Vertical spacing for a Plot title
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{AST\_GRID}{AST_GRID} routine) by determining
-      where the title of a \htmlref{Plot}{Plot} is drawn.
-
-      Its value gives the spacing between the bottom edge of the title
-      and the top edge of a bounding box containing all the other parts
-      of the annotated grid. Positive values cause the title to be
-      drawn outside the box, while negative values cause it to be drawn
-      inside.
-
-      The TitleGap value should be given as a fraction of the minimum
-      dimension of the plotting area, the default value being $+$0.05.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes since it does not draw
-         a \htmlref{Title}{Title}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the title is obtained from the Plot's Title
-         attribute.
-      }
-   }
-}
-\sstroutine{
-   Tol\sstlabel{Tol}
-}{
-   Plotting tolerance
-}{
-   \sstdescription{
-      This attribute specifies the plotting tolerance (or resolution)
-      to be used for the graphical output produced by a \htmlref{Plot}{Plot}.  Smaller
-      values will result in smoother and more accurate curves being
-      drawn, but may slow down the plotting process. Conversely,
-      larger values may speed up the plotting process in cases where
-      high resolution is not required.
-
-      The Tol value should be given as a fraction of the minimum
-      dimension of the plotting area, and should lie in the range
-      from 1.0E-7 to 1.0. By default, a value of 0.01 is used.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Top(axis)\sstlabel{Topaxis}
-}{
-   Highest axis value to display
-}{
-   \sstdescription{
-      This attribute gives the highest axis value to be displayed (for
-      instance, by the \htmlref{AST\_GRID}{AST_GRID} method).
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The default supplied by the Frame class is to display all axis
-         values, without any limit.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Top value to $+$90 degrees
-         for latitude axes, and 180 degrees for co-latitude axes. The
-         default for longitude axes is to display all axis values.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   TranForward\sstlabel{TranForward}
-}{
-   Forward transformation defined?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
-      coordinates in the {\tt{"}}forward{\tt{"}} direction (i.e. converting input
-      coordinates into output coordinates). If this attribute is
-      non-zero, the forward transformation is available. Otherwise, it
-      is not.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         The TranForward attribute value for a CmpMap is given by the
-         boolean AND of the value for each component Mapping.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The TranForward attribute of a FrameSet applies to the
-         transformation which converts between the FrameSet's base
-         \htmlref{Frame}{Frame} and its current Frame (as specified by the \htmlref{Base}{Base} and
-         \htmlref{Current}{Current} attributes). This value is given by the boolean AND
-         of the TranForward values which apply to each of the
-         individual sub-Mappings required to perform this conversion.
-         The TranForward attribute value for a FrameSet may therefore
-         change if a new Base or Current Frame is selected.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error will result if a Mapping with a TranForward value of
-         zero is used to transform coordinates in the forward direction.
-      }
-   }
-}
-\sstroutine{
-   TranInverse\sstlabel{TranInverse}
-}{
-   Inverse transformation defined?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
-      coordinates in the {\tt{"}}inverse{\tt{"}} direction (i.e. converting output
-      coordinates back into input coordinates). If this attribute is
-      non-zero, the inverse transformation is available. Otherwise, it
-      is not.
-   }
-   \sstattributetype{
-      Integer (boolean), readonly.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         The TranInverse attribute value for a CmpMap is given by the
-         boolean AND of the value for each component Mapping.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The TranInverse attribute of a FrameSet applies to the
-         transformation which converts between the FrameSet's current
-         \htmlref{Frame}{Frame} and its base Frame (as specified by the \htmlref{Current}{Current} and
-         \htmlref{Base}{Base} attributes). This value is given by the boolean AND of
-         the TranInverse values which apply to each of the individual
-         sub-Mappings required to perform this conversion.
-         The TranInverse attribute value for a FrameSet may therefore
-         change if a new Base or Current Frame is selected.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error will result if a Mapping with a TranInverse value of
-         zero is used to transform coordinates in the inverse direction.
-      }
-   }
-}
-\sstroutine{
-   Unit(axis)\sstlabel{Unitaxis}
-}{
-   Axis physical units
-}{
-   \sstdescription{
-      This attribute contains a textual representation of the physical
-      units used to represent coordinate values on a particular axis
-      of a \htmlref{Frame}{Frame}. The \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT} routine controls how the Unit values
-      are used.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default supplied by the Frame class is an empty string.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Unit value (e.g. to
-         {\tt{"}}hh:mm:ss.sss{\tt{"}}) to describe the character string returned by
-         the \htmlref{AST\_FORMAT}{AST_FORMAT} function when formatting coordinate values.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The SpecFrame class re-defines the default Unit value so that it
-         is appropriate for the current \htmlref{System}{System} value. See the System
-         attribute for details. An error will be reported if an attempt
-         is made to use an inappropriate Unit.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Unit value so that it
-         is appropriate for the current System value. See the System
-         attribute for details. An error will be reported if an attempt
-         is made to use an inappropriate Unit (e.g. {\tt{"}}km{\tt{"}}).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Unit attribute of a FrameSet axis is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   UnitRadius\sstlabel{UnitRadius}
-}{
-   SphMap input vectors lie on a unit sphere?
-}{
-   \sstdescription{
-      This is a boolean attribute which indicates whether the
-      3-dimensional vectors which are supplied as input to a \htmlref{SphMap}{SphMap}
-      are known to always have unit length, so that they lie on a unit
-      sphere centred on the origin.
-
-      If this condition is true (indicated by setting UnitRadius
-      non-zero), it implies that a \htmlref{CmpMap}{CmpMap} which is composed of a
-      SphMap applied in the forward direction followed by a similar
-      SphMap applied in the inverse direction may be simplified
-      (e.g. by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}) to become a \htmlref{UnitMap}{UnitMap}. This is because the
-      input and output vectors will both have unit length and will
-      therefore have the same coordinate values.
-
-      If UnitRadius is zero (the default), then although the output
-      vector produced by the CmpMap (above) will still have unit
-      length, the input vector may not have. This will, in general,
-      change the coordinate values, so it prevents the pair of SphMaps
-      being simplified.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SphMap
-      }{
-         All SphMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This attribute is intended mainly for use when SphMaps are
-         involved in a sequence of Mappings which project (e.g.) a
-         dataset on to the celestial sphere. By regarding the celestial
-         sphere as a unit sphere (and setting UnitRadius to be non-zero)
-         it becomes possible to cancel the SphMaps present, along with
-         associated sky projections, when two datasets are aligned using
-         celestial coordinates. This often considerably improves
-         performance.
-
-         \sstitem
-         Such a situations often arises when interpreting FITS data and
-         is handled automatically by the \htmlref{FitsChan}{FitsChan} class.
-
-         \sstitem
-         The value of the UnitRadius attribute is used only to control
-         the simplification of Mappings and has no effect on the value of
-         the coordinates transformed by a SphMap. The lengths of the
-         input 3-dimensional Cartesian vectors supplied are always
-         ignored, even if UnitRadius is non-zero.
-      }
-   }
-}
-\sstroutine{
-   UseDefs\sstlabel{UseDefs}
-}{
-   Use default values for unspecified attributes?
-}{
-   \sstdescription{
-      This attribute specifies whether default values should be used
-      internally for object attributes which have not been assigned a
-      value explicitly. If a non-zero value (the default) is supplied for
-      UseDefs, then default values will be used for attributes which have
-      not explicitly been assigned a value. If zero is supplied for UseDefs,
-      then an error will be reported if an attribute for which no explicit
-      value has been supplied is needed internally within AST.
-
-      Many attributes (including the UseDefs attribute itself) are unaffected
-      by the setting of the UseDefs attribute, and default values will always
-      be used without error for such attributes. The {\tt{"}}Applicability:{\tt{"}} section
-      below lists the attributes which are affected by the setting of UseDefs.
-
-      Note, UseDefs only affects access to attributes internally within
-      AST. The public accessor functions such as
-      AST\_GETC
-      is unaffected by the UseDefs attribute - default values will always
-      be returned if no value has been set. Application code should use the
-      \htmlref{AST\_TEST}{AST_TEST}
-      function if required to determine if a value has been set for an
-      attribute.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Object}{Object}
-      }{
-         All Objects have this attribute, but ignore its setting except
-         as described below for individual classes.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The default value of UseDefs for a FrameSet is redefined to be
-         the UseDefs value of its current \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The default value of UseDefs for a CmpFrame is redefined to be
-         the UseDefs value of its first component Frame.
-      }
-      \sstsubsection{
-         \htmlref{Region}{Region}
-      }{
-         The default value of UseDefs for a Region is redefined to be
-         the UseDefs value of its encapsulated Frame.
-      }
-      \sstsubsection{
-         Frame
-      }{
-         If UseDefs is zero, an error is reported when aligning Frames if the
-         \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat} or \htmlref{ObsLon}{ObsLon} attribute is required but has not been
-         assigned a value explicitly.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         If UseDefs is zero, an error is reported when aligning SkyFrames
-         if any of the following attributes are required but have not been
-         assigned a value explicitly: Epoch, \htmlref{Equinox}{Equinox}.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         If UseDefs is zero, an error is reported when aligning SpecFrames
-         if any of the following attributes are required but have not been
-         assigned a value explicitly: Epoch, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec}, \htmlref{RestFreq}{RestFreq},
-         \htmlref{SourceVel}{SourceVel}, \htmlref{StdOfRest}{StdOfRest}.
-      }
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         If UseDefs is zero, an error is reported when aligning DSBSpecFrames
-         or when accessing the \htmlref{ImagFreq}{ImagFreq} attribute if any of the following
-         attributes are required but have not been assigned a value explicitly:
-         Epoch, \htmlref{DSBCentre}{DSBCentre}, \htmlref{IF}{IF}.
-      }
-   }
-}
-\sstroutine{
-   Warnings\sstlabel{Warnings}
-}{
-   Controls the issuing of warnings about various conditions
-}{
-   \sstdescription{
-      This attribute controls the issuing of warnings about selected
-      conditions when an \htmlref{Object}{Object} or keyword is read from or written to a
-      \htmlref{FitsChan}{FitsChan}. The value supplied for the Warnings attribute should
-      consist of a space separated list of condition names (see the
-      \htmlref{AllWarnings}{AllWarnings} attribute for a list of the currently defined names).
-      Each name indicates a condition which should be reported. The default
-      value for Warnings is the string {\tt{"}}Tnx Zpx BadCel BadMat BadPV BadCTYPE{\tt{"}}.
-
-      The text of any warning will be stored within the FitsChan in the
-      form of one or more new header cards with keyword ASTWARN. If
-      required, applications can check the FitsChan for ASTWARN cards
-      (using \htmlref{AST\_FINDFITS}{AST_FINDFITS}) after the call to \htmlref{AST\_READ}{AST_READ} or \htmlref{AST\_WRITE}{AST_WRITE} has been
-      performed, and report the text of any such cards to the user. ASTWARN
-      cards will be propagated to any output header unless they are
-      deleted from the FitsChan using astDelFits.
-   }
-   \sstattributetype{
-      String
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      This attribute only controls the warnings that are to be stored as
-      a set of header cards in the FitsChan as described above. It has no
-      effect on the storage of warnings in the parent \htmlref{Channel}{Channel} structure.
-      All warnings are stored in the parent Channel structure, from where
-      they can be retrieved using the
-      \htmlref{AST\_WARNINGS}{AST_WARNINGS}
-      function.
-   }
-}
-\sstroutine{
-   WcsAxis(lonlat)\sstlabel{WcsAxislonlat}
-}{
-   FITS-WCS projection axes
-}{
-   \sstdescription{
-      This attribute gives the indices of the longitude and latitude
-      coordinates of the FITS-WCS projection within the coordinate
-      space used by a \htmlref{WcsMap}{WcsMap}. These indices are defined when the
-      WcsMap is first created using \htmlref{AST\_WCSMAP}{AST_WCSMAP} and cannot
-      subsequently be altered.
-
-      If {\tt{"}}lonlat{\tt{"}} is 1, the index of the longitude axis is
-      returned. Otherwise, if it is 2, the index of the latitude axis
-      is returned.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   WcsType\sstlabel{WcsType}
-}{
-   FITS-WCS projection type
-}{
-   \sstdescription{
-      This attribute specifies which type of FITS-WCS projection will
-      be performed by a \htmlref{WcsMap}{WcsMap}. The value is specified when a WcsMap
-      is first created using \htmlref{AST\_WCSMAP}{AST_WCSMAP} and cannot subsequently be
-      changed.
-
-      The values used are represented by symbolic constants with names of
-      the form {\tt{"}}AST\_\_XXX{\tt{"}}, where {\tt{"}}XXX{\tt{"}} is the (upper case) 3-character
-      code used by the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword to identify the
-      projection. For example, possible values are AST\_\_TAN (for the
-      tangent plane or gnomonic projection) and AST\_\_AIT (for the
-      Hammer-Aitoff projection). AST\_\_TPN is an exception in that it
-      is not part of the FITS-WCS standard (it represents a TAN
-      projection with polynomial correction terms as defined in an early
-      draft of the FITS-WCS paper).
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of available projections, see the FITS-WCS paper.
-      }
-   }
-}
-\sstroutine{
-   Width(element)\sstlabel{Widthelement}
-}{
-   Line width for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the line width used when drawing each
-      element of graphical output produced by a \htmlref{Plot}{Plot}.  It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Width(border)=2.0{\tt{"}} causes the Plot border to be
-      drawn using a line width of 2.0. A value of 1.0 results in a
-      line thickness which is approximately 0.0005 times the length of
-      the diagonal of the entire display surface.
-
-      The actual appearance of lines drawn with any particular width,
-      and the range of available widths, is determined by the
-      underlying graphics system.  The default behaviour is for all
-      graphical elements to be drawn using the default line width
-      supplied by this graphics system. This will not necessarily
-      correspond to a Width value of 1.0.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Width{\tt{"}} instead of
-         {\tt{"}}Width(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the Width(\htmlref{Border}{Border}) value.
-      }
-   }
-}
-\sstroutine{
-   XmlFormat\sstlabel{XmlFormat}
-}{
-   System for formatting Objects as XML
-}{
-   \sstdescription{
-      This attribute specifies the formatting system to use when AST
-      Objects are written out as XML through an \htmlref{XmlChan}{XmlChan}. It
-      affects the behaviour of the \htmlref{AST\_WRITE}{AST_WRITE} routine  when
-      they are used to transfer any AST \htmlref{Object}{Object} to or from an external
-      XML representation.
-
-      The XmlChan class allows AST objects to be represented in the form
-      of XML in several ways (conventions) and the XmlFormat attribute is
-      used to specify which of these should be used. The formatting options
-      available are outlined in the {\tt{"}}Formats Available{\tt{"}} section below.
-
-      By default, an XmlChan will attempt to determine which format system
-      is already in use, and will set the default XmlFormat value
-      accordingly (so that subsequent I/O operations adopt the same
-      conventions). It does this by looking for certain critical items
-      which only occur in particular formats. For details of how this
-      works, see the {\tt{"}}Choice of Default Format{\tt{"}} section below. If you wish
-      to ensure that a particular format system is used, independently of
-      any XML already read, you should set an explicit XmlFormat value
-      yourself.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         XmlChan
-      }{
-         All XmlChans have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Formats Available
-   }{
-      The XmlFormat attribute can take any of the following (case
-      insensitive) string values to select the corresponding formatting
-      system:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}NATIVE{\tt{"}}: This is a direct conversion to XML of the heirarchical
-         format used by a standard XML channel (and also by the NATIVE
-         encoding of a \htmlref{FitsChan}{FitsChan}).
-
-         \sstitem
-         {\tt{"}}QUOTED{\tt{"}}: This is the same as NATIVE format except that extra
-         information is included which allows client code to convert the
-         XML into a form which can be read by a standard AST \htmlref{Channel}{Channel}. This
-         extra information indicates which AST attribute values should be
-         enclosed in quotes before being passed to a Channel.
-
-         \sstitem
-         {\tt{"}}IVOA{\tt{"}}: This is a format that uses an early draft of the STC-X schema
-         developed by the International Virtual Observatory Alliance (IVOA -
-         see {\tt{"}}http://www.ivoa.net/{\tt{"}}) to describe coordinate systems, regions,
-         mappings, etc. Support is limited to V1.20 described at
-         {\tt{"}}http://www.ivoa.net/Documents/WD/STC/STC-20050225.html{\tt{"}}. Since the
-         version of STC-X finally adopted by the IVOA differs in several
-         significant respects from V1.20, this format is now mainly of
-         historical interest. Note, the alternative {\tt{"}}STC-S{\tt{"}} format (a
-         simpler non-XML encoding of the STC metadata) is supported by the
-         \htmlref{StcsChan}{StcsChan} class.
-      }
-   }
-   \sstdiytopic{
-      Choice of Default Format;
-   }{
-      If the XmlFormat attribute of an XmlChan is not set, the default
-      value it takes is determined by the presence of certain critical
-      items within the document most recently read using
-      \htmlref{AST\_READ}{AST_READ}.
-      The sequence of decision used to arrive at the default value is as
-      follows:
-
-      \sstitemlist{
-
-         \sstitem
-         If the previous document read contained any elements in any of the STC
-         namespaces ({\tt{"}}urn:nvo-stc{\tt{"}}, {\tt{"}}urn:nvo-coords{\tt{"}} or {\tt{"}}urn:nvo-region{\tt{"}}), then
-         the default value is IVOA.
-
-         \sstitem
-         If the previous document read contained any elements in the AST
-         namespace which had an associated XML attribute called {\tt{"}}quoted{\tt{"}}, then
-         the default value is QUOTED.
-
-         \sstitem
-         Otherwise, if none of these conditions is met (as would be the
-         case if no document had yet been read), then NATIVE format is
-         used.
-
-      }
-      Setting an explicit value for the XmlFormat attribute always
-      over-rides this default behaviour.
-   }
-   \sstdiytopic{
-      The IVOA Format
-   }{
-      The IVOA support caters only for certain parts of V1.20 of the
-      draft Space-Time Coordinate (STC) schema (see
-      http://www.ivoa.net/Documents/WD/STC/STC-20050225.html). Note, this
-      draft has now been superceded by an officially adopted version that
-      differs in several significant respects from V1.20. Consequently,
-      the {\tt{"}}IVOA{\tt{"}} XmlChan format is of historical interest only.
-
-      The following points should be noted when using an XmlChan to read
-      or write STC information (note, this list is currently incomplete):
-
-      \sstitemlist{
-
-         \sstitem
-         Objects can currently only be read using this format, not written.
-
-         \sstitem
-         The AST object generated by reading an $<$STCMetadata$>$ element will
-         be an instance of one of the AST {\tt{"}}\htmlref{Stc}{Stc}{\tt{"}} classes: \htmlref{StcResourceProfile}{StcResourceProfile},
-         \htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcObsDataLocation}{StcObsDataLocation}.
-
-         \sstitem
-         When reading an $<$STCMetadata$>$ element, the axes in the returned
-         AST Object will be in the order space, time, spectral, redshift,
-         irrespective of the order in which the axes occur in the $<$STCMetadata$>$
-         element. If the supplied $<$STCMetadata$>$ element does not contain all of
-         these axes, the returned AST Object will also omit them, but the
-         ordering of those axes which are present will be as stated above. If
-         the spatial frame represents a celestial coordinate system the
-         spatial axes will be in the order (longitude, latitude).
-
-         \sstitem
-         Until such time as the AST \htmlref{TimeFrame}{TimeFrame} is complete, a simple
-         1-dimensional \htmlref{Frame}{Frame} (with \htmlref{Domain}{Domain} set to TIME) will be used to
-         represent the STC $<$TimeFrame$>$ element. Consequently, most of the
-         information within a $<$TimeFrame$>$ element is currently ignored.
-
-         \sstitem
-         $<$SpaceFrame$>$ elements can only be read if they describe a celestial
-         longitude and latitude axes supported by the AST \htmlref{SkyFrame}{SkyFrame} class. The
-         space axes will be returned in the order (longitude, latitude).
-
-         \sstitem
-         Velocities associated with SpaceFrames cannot be read.
-
-         \sstitem
-         Any $<$GenericCoordFrame$>$ elements within an $<$AstroCoordSystem$>$ element
-         are currently ignored.
-
-         \sstitem
-         Any second or subsequent $<$AstroCoordSystem$>$ found within an
-         STCMetaData element is ignored.
-
-         \sstitem
-         Any second or subsequent $<$AstroCoordArea$>$ found within an
-         STCMetaData element is ignored.
-
-         \sstitem
-         Any $<$OffsetCenter$>$ found within a $<$SpaceFrame$>$ is ignored.
-
-         \sstitem
-         Any CoordFlavor element found within a $<$SpaceFrame$>$ is ignored.
-
-         \sstitem
-         $<$SpaceFrame$>$ elements can only be read if they refer to
-         one of the following space reference frames: ICRS, GALACTIC\_II,
-         SUPER\_GALACTIC, HEE, FK4, FK5, ECLIPTIC.
-
-         \sstitem
-         $<$SpaceFrame$>$ elements can only be read if the reference
-         position is TOPOCENTER. Also, any planetary ephemeris is ignored.
-
-         \sstitem
-         Regions: there is currently no support for STC regions of type
-         Sector, ConvexHull or SkyIndex.
-
-         \sstitem
-         The AST \htmlref{Region}{Region} read from a CoordInterval element is considered to
-         be open if either the lo\_include or the hi\_include attribute is
-         set to false.
-
-         \sstitem
-         $<$RegionFile$>$ elements are not supported.
-
-         \sstitem
-         Vertices within $<$\htmlref{Polygon}{Polygon}$>$ elements are always considered to be
-         joined using great circles (that is, $<$SmallCircle$>$ elements are
-         ignored).
-      }
-   }
-}
-\sstroutine{
-   XmlIndent\sstlabel{XmlIndent}
-}{
-   Controls output of indentation and line feeds
-}{
-   \sstdescription{
-      This attribute controls the appearance of the XML produced when an
-      AST object is written to an \htmlref{XmlChan}{XmlChan}. If it is non-zero, then extra
-      linefeed characters will be inserted as necessary to ensure that each
-      XML tag starts on a new line, and each tag will be indented to show
-      its depth in the containment hierarchy. If XmlIndent is zero (the
-      default), then no linefeeds or indentation strings will be added to
-      output text.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         XmlChan
-      }{
-         All XmlChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   XmlLength\sstlabel{XmlLength}
-}{
-   Controls output buffer length
-}{
-   \sstdescription{
-      This attribute specifies the maximum length to use when writing out
-      text through the sink function supplied when the \htmlref{XmlChan}{XmlChan} was created.
-
-      The number of characters in each string written out through the sink
-      function will not be greater than the value of this attribute (but
-      may be less). A value of zero (the default) means there is no limit -
-      each string can be of any length.
-
-      Note, the default value of zero is unlikely to be appropriate when
-      an XmlChan is used within Fortran code. In this case, XmlLength
-      should usually be set to the size of the CHARACTER variable used to
-      receive the text returned by \htmlref{AST\_GETLINE}{AST_GETLINE} within the sink function.
-      This avoids the possibility of long lines being truncated invisibly
-      within AST\_GETLINE.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         XmlChan
-      }{
-         All XmlChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   XmlPrefix\sstlabel{XmlPrefix}
-}{
-   The namespace prefix to use when writing
-}{
-   \sstdescription{
-      This attribute is a string which is to be used as the namespace
-      prefix for all XML elements created as a result of writing an AST
-      \htmlref{Object}{Object} out through an \htmlref{XmlChan}{XmlChan}. The URI associated with the namespace
-      prefix is given by the symbolic constant AST\_\_XMLNS defined in
-      AST\_PAR.
-      A definition of the namespace prefix is included in each top-level
-      element produced by the XmlChan.
-
-      The default value is a blank string which causes no prefix to be
-      used. In this case each top-level element will set the default
-      namespace to be the value of AST\_\_XMLNS.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Zoom\sstlabel{Zoom}
-}{
-   ZoomMap scale factor
-}{
-   \sstdescription{
-      This attribute holds the \htmlref{ZoomMap}{ZoomMap} scale factor, by which
-      coordinate values are multiplied (by the forward transformation)
-      or divided (by the inverse transformation). This factor is set
-      when a ZoomMap is created, but may later be modified. The
-      default value is unity.
-
-      Note that if a ZoomMap is inverted (e.g. by using \htmlref{AST\_INVERT}{AST_INVERT}),
-      then the reciprocal of this zoom factor will, in effect, be
-      used.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         ZoomMap
-      }{
-         All ZoomMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Zoom attribute may not be set to zero.
-      }
-   }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:classdescriptions}AST Class Descriptions}
-\small
-\sstroutine{
-   Axis\sstlabel{Axis}
-}{
-   Store axis information
-}{
-   \sstdescription{
-      The Axis class is used to store information associated with a
-      particular axis of a \htmlref{Frame}{Frame}. It is used internally by the AST
-      library and has no constructor function. You should encounter it
-      only within textual output (e.g. from \htmlref{AST\_WRITE}{AST_WRITE}).
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Axis class inherits from the \htmlref{Object}{Object} class.
-   }
-}
-\sstroutine{
-   Box\sstlabel{Box}
-}{
-   A box region with sides parallel to the axes of a Frame
-}{
-   \sstdescription{
-      The Box class implements a \htmlref{Region}{Region} which represents a box with sides
-      parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
-      range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
-      only real difference being that the Interval class allows some axis
-      limits to be unspecified. Note, a Box will only look like a box if
-      the Frame geometry is approximately flat. For instance, a Box centred
-      close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
-      (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
-      pole).
-   }
-   \sstconstructor{
-      \htmlref{AST\_BOX}{AST_BOX}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Box class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Box class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The Box class does not define any new routines beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   Channel\sstlabel{Channel}
-}{
-   Basic (textual) I/O channel
-}{
-   \sstdescription{
-      The Channel class implements low-level input/output for the AST
-      library.  Writing an \htmlref{Object}{Object} to a Channel will generate a textual
-      representation of that Object, and reading from a Channel will
-      create a new Object from its textual representation.
-
-      Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
-      by reading and writing the resulting text. By default, however,
-      a Channel will read from standard input and write to standard
-      output.
-   }
-   \sstconstructor{
-      \htmlref{AST\_CHANNEL}{AST_CHANNEL}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Channel class inherits from the Object class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Objects, every
-      Channel also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Comment}{Comment}: Include textual comments in output?
-
-         \sstitem
-         \htmlref{Full}{Full}: Set level of output detail
-
-         \sstitem
-         \htmlref{ReportLevel}{ReportLevel}: Selects the level of error reporting
-
-         \sstitem
-         \htmlref{Skip}{Skip}: Skip irrelevant data?
-
-         \sstitem
-         \htmlref{Strict}{Strict}: Generate errors instead of warnings?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Objects, the
-      following routines may also be applied to all Channels:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_WARNINGS}{AST_WARNINGS}: Return warnings from the previous read or write
-
-         \sstitem
-         \htmlref{AST\_READ}{AST_READ}: Read an Object from a Channel
-
-         \sstitem
-         \htmlref{AST\_WRITE}{AST_WRITE}: Write an Object to a Channel
-      }
-   }
-}
-\sstroutine{
-   Circle\sstlabel{Circle}
-}{
-   A circular or spherical region within a Frame
-}{
-   \sstdescription{
-      The Circle class implements a \htmlref{Region}{Region} which represents a circle or
-      sphere within a \htmlref{Frame}{Frame}.
-   }
-   \sstconstructor{
-      \htmlref{AST\_CIRCLE}{AST_CIRCLE}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Circle class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Circle class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Regions, the
-      following routines may also be applied to all Circles:
-   }
-}
-\sstroutine{
-   CmpFrame\sstlabel{CmpFrame}
-}{
-   Compound Frame
-}{
-   \sstdescription{
-      A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
-      (of any class) to be merged together to form a more complex
-      Frame. The axes of the two component Frames then appear together
-      in the resulting CmpFrame (those of the first Frame, followed by
-      those of the second Frame).
-
-      Since a CmpFrame is itself a Frame, it can be used as a
-      component in forming further CmpFrames. Frames of arbitrary
-      complexity may be built from simple individual Frames in this
-      way.
-
-      Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
-      Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
-      but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
-      (a sub-class of Frame), then the CmpFrame will use the Region as a
-      Mapping when transforming values for axes described by the Region.
-      Thus input axis values corresponding to positions which are outside the
-      Region will result in bad output axis values.
-   }
-   \sstconstructor{
-      \htmlref{AST\_CMPFRAME}{AST_CMPFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The CmpFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The CmpFrame class does not define any new attributes beyond
-      those which are applicable to all Frames. However, the attributes
-      of the component Frames can be accessed as if they were attributes
-      of the CmpFrame. For instance, if a CmpFrame contains a \htmlref{SpecFrame}{SpecFrame}
-      and a \htmlref{SkyFrame}{SkyFrame}, then the CmpFrame will recognise the {\tt{"}}\htmlref{Equinox}{Equinox}{\tt{"}}
-      attribute and forward access requests to the component SkyFrame.
-      Likewise, it will recognise the {\tt{"}}\htmlref{RestFreq}{RestFreq}{\tt{"}} attribute and forward
-      access requests to the component SpecFrame. An axis index can
-      optionally be appended to the end of any attribute name, in which
-      case the request to access the attribute will be forwarded to the
-      primary Frame defining the specified axis.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The CmpFrame class does not define any new routines beyond those
-      which are applicable to all Frames.
-   }
-}
-\sstroutine{
-   CmpMap\sstlabel{CmpMap}
-}{
-   Compound Mapping
-}{
-   \sstdescription{
-      A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
-      Mappings (of any class) to be connected together to form a more
-      complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
-      (where the first Mapping is used to transform the coordinates of
-      each point and the second mapping is then applied to the
-      result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
-      earlier coordinates for each point and the second Mapping
-      simultaneously transforms the later coordinates).
-
-      Since a CmpMap is itself a Mapping, it can be used as a
-      component in forming further CmpMaps. Mappings of arbitrary
-      complexity may be built from simple individual Mappings in this
-      way.
-   }
-   \sstconstructor{
-      \htmlref{AST\_CMPMAP}{AST_CMPMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The CmpMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The CmpMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The CmpMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   CmpRegion\sstlabel{CmpRegion}
-}{
-   A combination of two regions within a single Frame
-}{
-   \sstdescription{
-      A CmpRegion is a \htmlref{Region}{Region} which allows two component
-      Regions (of any class) to be combined to form a more complex
-      Region. This combination may be performed a boolean AND, OR
-      or XOR (exclusive OR) operator. If the AND operator is
-      used, then a position is inside the CmpRegion only if it is
-      inside both of its two component Regions. If the OR operator is
-      used, then a position is inside the CmpRegion if it is inside
-      either (or both) of its two component Regions. If the XOR operator
-      is used, then a position is inside the CmpRegion if it is inside
-      one but not both of its two component Regions. Other operators can
-      be formed by negating one or both component Regions before using
-      them to construct a new CmpRegion.
-
-      The two component Region need not refer to the same coordinate
-      \htmlref{Frame}{Frame}, but it must be possible for the
-      \htmlref{AST\_CONVERT}{AST_CONVERT}
-      function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
-      reported otherwise when the CmpRegion is created). For instance,
-      a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
-      with a Region defined within a Galactic SkyFrame. This is
-      acceptable because the SkyFrame class knows how to convert between
-      these two systems, and consequently the
-      AST\_CONVERT
-      function will also be able to convert between them. In such cases,
-      the second component Region will be mapped into the coordinate Frame
-      of the first component Region, and the Frame represented by the
-      CmpRegion as a whole will be the Frame of the first component Region.
-
-      Since a CmpRegion is itself a Region, it can be used as a
-      component in forming further CmpRegions. Regions of arbitrary
-      complexity may be built from simple individual Regions in this
-      way.
-   }
-   \sstconstructor{
-      \htmlref{AST\_CMPREGION}{AST_CMPREGION}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The CmpRegion class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The CmpRegion class does not define any new attributes beyond those
-      which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The CmpRegion class does not define any new routines beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   DSBSpecFrame\sstlabel{DSBSpecFrame}
-}{
-   Dual sideband spectral coordinate system description
-}{
-   \sstdescription{
-      A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
-      positions in a spectrum obtained using a dual sideband instrument.
-      Such an instrument produces a spectrum in which each point contains
-      contributions from two distinctly different frequencies, one from
-      the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
-      Corresponding LSB and USB frequencies are connected by the fact
-      that they are an equal distance on either side of a fixed central
-      frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
-      When quoting a position within such a spectrum, it is necessary to
-      indicate whether the quoted position is the USB position or the
-      corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
-      indication. Another option that the SideBand attribute provides is
-      to represent a spectral position by its topocentric offset from the
-      LO frequency.
-
-      In practice, the LO frequency is specified by giving the distance
-      from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
-      this central position is that of some interesting spectral feature.
-      The distance from this central position to the LO frequency is known
-      as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
-      be a signed value in order to indicate whether the LO frequency is
-      above or below the central position.
-   }
-   \sstconstructor{
-      \htmlref{AST\_DSBSPECFRAME}{AST_DSBSPECFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The DSBSpecFrame class inherits from the SpecFrame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all SpecFrames, every
-      DSBSpecFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignSideBand}{AlignSideBand}: Should alignment occur between sidebands?
-
-         \sstitem
-         \htmlref{DSBCentre}{DSBCentre}: The central position of interest.
-
-         \sstitem
-         \htmlref{IF}{IF}: The intermediate frequency used to define the LO frequency.
-
-         \sstitem
-         \htmlref{ImagFreq}{ImagFreq}: The image sideband equivalent of the rest frequency.
-
-         \sstitem
-         \htmlref{SideBand}{SideBand}: Indicates which sideband the DSBSpecFrame represents.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The DSBSpecFrame class does not define any new routines beyond those
-      which are applicable to all SpecFrames.
-   }
-}
-\sstroutine{
-   DssMap\sstlabel{DssMap}
-}{
-   Map points using a Digitised Sky Survey plate solution
-}{
-   \sstdescription{
-      The DssMap class implements a \htmlref{Mapping}{Mapping} which transforms between
-      2-dimensional pixel coordinates and an equatorial sky coordinate
-      system (right ascension and declination) using a Digitised Sky
-      Survey (DSS) astrometric plate solution.
-
-      The input coordinates are pixel numbers along the first and
-      second dimensions of an image, where the centre of the first
-      pixel is located at (1,1) and the spacing between pixel centres
-      is unity.
-
-      The output coordinates are right ascension and declination in
-      radians. The celestial coordinate system used (FK4, FK5, etc.)
-      is unspecified, and will usually be indicated by appropriate
-      keywords in a FITS header.
-   }
-   \sstconstructor{
-      The DssMap class does not have a constructor function.  A DssMap
-      is created only as a by-product of reading a \htmlref{FrameSet}{FrameSet} (using
-      \htmlref{AST\_READ}{AST_READ}) from a \htmlref{FitsChan}{FitsChan} which contains FITS header cards
-      describing a DSS plate solution, and whose \htmlref{Encoding}{Encoding} attribute is
-      set to {\tt{"}}DSS{\tt{"}}. The result of such a read, if successful, is a
-      FrameSet whose base and current Frames are related by a DssMap.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The DssMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The DssMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The DssMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Ellipse\sstlabel{Ellipse}
-}{
-   An elliptical region within a 2-dimensional Frame
-}{
-   \sstdescription{
-      The Ellipse class implements a \htmlref{Region}{Region} which represents a ellipse
-      within a 2-dimensional \htmlref{Frame}{Frame}.
-   }
-   \sstconstructor{
-      \htmlref{AST\_ELLIPSE}{AST_ELLIPSE}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Ellipse class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Ellipse class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Regions, the
-      following routines may also be applied to all Ellipses:
-   }
-}
-\sstroutine{
-   FitsChan\sstlabel{FitsChan}
-}{
-   I/O Channel using FITS header cards to represent Objects
-}{
-   \sstdescription{
-      A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
-      operations involving the use of FITS (Flexible Image Transport
-      \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
-      \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate a
-      description of that Object composed of FITS header cards, and
-      reading from a FitsChan will create a new Object from its FITS
-      header card description.
-
-      While a FitsChan is active, it represents a buffer which may
-      contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
-      FITS conventions. Any sequence of FITS-conforming header cards
-      may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
-      merely implied.  The cards may be accessed in any order by using
-      the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
-      card, to which subsequent operations apply. Searches
-      based on keyword may be performed (using \htmlref{AST\_FINDFITS}{AST_FINDFITS}), new
-      cards may be inserted (\htmlref{AST\_PUTFITS}{AST_PUTFITS}, \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}, \htmlref{AST\_SETFITS$<$X$>$}{AST_SETFITSX}) and
-      existing ones may be deleted (\htmlref{AST\_DELFITS}{AST_DELFITS}), extracted
-      (\htmlref{AST\_GETFITS$<$X$>$}{AST_GETFITSX}) or changed (AST\_SETFITS$<$X$>$).
-
-      When you create a FitsChan, you have the option of specifying
-      {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
-      stores by reading and writing FITS header cards. If you provide
-      a source function, it is used to fill the FitsChan with header cards
-      when it is accessed for the first time. If you do not provide a
-      source function, the FitsChan remains empty until you explicitly enter
-      data into it (e.g. using AST\_PUTFITS, AST\_PUTCARDS or AST\_WRITE). If you
-      provide a sink function, it is used to deliver any remaining
-      contents of a FitsChan to an external data store when the
-      FitsChan is deleted. If you do not provide a sink function, any
-      header cards remaining when the FitsChan is deleted will be
-      lost, so you should arrange to extract them first if necessary
-      (e.g. using AST\_FINDFITS or \htmlref{AST\_READ}{AST_READ}).
-
-      Coordinate system information may be described using FITS header
-      cards using several different conventions, termed
-      {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
-      FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
-      determines how the Object is converted to (or from) a
-      description involving FITS header cards. In general, different
-      encodings will result in different sets of header cards to
-      describe the same Object. Examples of encodings include the DSS
-      encoding (based on conventions used by the STScI Digitised Sky
-      Survey data), the FITS-WCS encoding (based on a proposed FITS
-      standard) and the NATIVE encoding (a near loss-less way of
-      storing AST Objects in FITS headers).
-
-      The available encodings differ in the range of Objects they can
-      represent, in the number of Object descriptions that can coexist
-      in the same FitsChan, and in their accessibility to other
-      (external) astronomy applications (see the Encoding attribute
-      for details). Encodings are not necessarily mutually exclusive
-      and it may sometimes be possible to describe the same Object in
-      several ways within a particular set of FITS header cards by
-      using several different encodings.
-
-      The detailed behaviour of AST\_READ and AST\_WRITE, when used with
-      a FitsChan, depends on the encoding in use. In general, however,
-      all successful use of AST\_READ is destructive, so that FITS header cards
-      are consumed in the process of reading an Object, and are
-      removed from the FitsChan (this deletion can be prevented for
-      specific cards by calling the
-      \htmlref{AST\_RETAINFITS}{AST_RETAINFITS} routine).
-      An unsuccessful call of
-      AST\_READ
-      (for instance, caused by the FitsChan not containing the necessary
-      FITS headers cards needed to create an Object) results in the
-      contents of the FitsChan being left unchanged.
-
-      If the encoding in use allows only a single Object description
-      to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-      encodings), then write operations using AST\_WRITE will
-      over-write any existing Object description using that
-      encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-      descriptions are written sequentially and may later be read
-      back in the same sequence.
-   }
-   \sstconstructor{
-      \htmlref{AST\_FITSCHAN}{AST_FITSCHAN}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The FitsChan class inherits from the Channel class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Channels, every
-      FitsChan also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AllWarnings}{AllWarnings}: A list of the available conditions
-
-         \sstitem
-         \htmlref{Card}{Card}: Index of current FITS card in a FitsChan
-
-         \sstitem
-         \htmlref{CarLin}{CarLin}: Ignore spherical rotations on CAR projections?
-
-         \sstitem
-         \htmlref{CDMatrix}{CDMatrix}: Use a CD matrix instead of a PC matrix?
-
-         \sstitem
-         \htmlref{Clean}{Clean}: Remove cards used whilst reading even if an error occurs?
-
-         \sstitem
-         \htmlref{DefB1950}{DefB1950}: Use FK4 B1950 as default equatorial coordinates?
-
-         \sstitem
-         \htmlref{Encoding}{Encoding}: System for encoding Objects as FITS headers
-
-         \sstitem
-         \htmlref{FitsDigits}{FitsDigits}: Digits of precision for floating-point FITS values
-
-         \sstitem
-         \htmlref{Iwc}{Iwc}: Add a \htmlref{Frame}{Frame} describing Intermediate World Coords?
-
-         \sstitem
-         \htmlref{Ncard}{Ncard}: Number of FITS header cards in a FitsChan
-
-         \sstitem
-         \htmlref{Warnings}{Warnings}: Produces warnings about selected conditions
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Channels, the
-      following routines may also be applied to all FitsChans:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_DELFITS}{AST_DELFITS}: Delete the current FITS card in a FitsChan
-
-         \sstitem
-         \htmlref{AST\_FINDFITS}{AST_FINDFITS}: Find a FITS card in a FitsChan by keyword
-
-         \sstitem
-         \htmlref{AST\_GETFITS$<$X$>$}{AST_GETFITSX}: Get a keyword value from a FitsChan
-
-         \sstitem
-         \htmlref{AST\_SETFITS$<$X$>$}{AST_SETFITSX}: Store a new keyword value in a FitsChan
-
-         \sstitem
-         \htmlref{AST\_PUTFITS}{AST_PUTFITS}: Store a FITS header card in a FitsChan
-
-         \sstitem
-         \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}: Stores a set of FITS header card in a FitsChan
-
-         \sstitem
-         \htmlref{AST\_RETAINFITS}{AST_RETAINFITS}: Ensure current card is retained in a FitsChan
-
-         \sstitem
-         \htmlref{AST\_TESTFITS}{AST_TESTFITS}: Test if a keyword has a defined value in a FitsChan
-      }
-   }
-}
-\sstroutine{
-   FluxFrame\sstlabel{FluxFrame}
-}{
-   Measured flux description
-}{
-   \sstdescription{
-      A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various systems used to represent the signal level in an
-      observation. The particular coordinate system to be used is specified
-      by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
-      other attributes such as the units, etc (see the description of the
-      System attribute for details).
-
-      All flux values are assumed to be measured at the same frequency or
-      wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
-      more appropriate for use with images rather than spectra.
-   }
-   \sstconstructor{
-      \htmlref{AST\_FLUXFRAME}{AST_FLUXFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The FluxFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      FluxFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{SpecVal}{SpecVal}: The spectral position at which the flux values are measured.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The FluxFrame class does not define any new routines beyond those
-      which are applicable to all Frames.
-   }
-}
-\sstroutine{
-   Frame\sstlabel{Frame}
-}{
-   Coordinate system description
-}{
-   \sstdescription{
-      This class is used to represent coordinate systems. It does this
-      in rather the same way that a frame around a graph describes the
-      coordinate space in which data are plotted. Consequently, a
-      Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
-      coordinate space, and contains axes which in turn hold
-      information such as Label and Units strings which are used for
-      labelling (e.g.) graphical output. In general, however, the
-      number of axes is not restricted to two.
-
-      Functions are available for converting Frame coordinate values
-      into a form suitable for display, and also for calculating
-      distances and offsets between positions within the Frame.
-
-      Frames may also contain knowledge of how to transform to and
-      from related coordinate systems.
-   }
-   \sstconstructor{
-      \htmlref{AST\_FRAME}{AST_FRAME}
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When used as a \htmlref{Mapping}{Mapping}, a Frame implements a unit (null)
-         transformation in both the forward and inverse directions
-         (equivalent to a \htmlref{UnitMap}{UnitMap}). The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attribute values are
-         both equal to the number of Frame axes.
-      }
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Frame class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      Frame also has the following attributes (if the Frame has only one
-      axis, the axis specifier can be omited from the following attribute
-      names):
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignSystem}{AlignSystem}: Coordinate system used to align Frames
-
-         \sstitem
-         \htmlref{Bottom(axis)}{Bottomaxis}: Lowest axis value to display
-
-         \sstitem
-         \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}: Number of digits of precision
-
-         \sstitem
-         \htmlref{Direction(axis)}{Directionaxis}: Display axis in conventional direction?
-
-         \sstitem
-         \htmlref{Domain}{Domain}: Coordinate system domain
-
-         \sstitem
-         \htmlref{Dut1}{Dut1}: Difference between the UT1 and UTC timescale
-
-         \sstitem
-         \htmlref{Epoch}{Epoch}: Epoch of observation
-
-         \sstitem
-         \htmlref{Format(axis)}{Formataxis}: Format specification for axis values
-
-         \sstitem
-         \htmlref{Label(axis)}{Labelaxis}: \htmlref{Axis}{Axis} label
-
-         \sstitem
-         \htmlref{MatchEnd}{MatchEnd}: Match trailing axes?
-
-         \sstitem
-         \htmlref{MaxAxes}{MaxAxes}: Maximum number of Frame axes to match
-
-         \sstitem
-         \htmlref{MinAxes}{MinAxes}: Minimum number of Frame axes to match
-
-         \sstitem
-         \htmlref{Naxes}{Naxes}: Number of Frame axes
-
-         \sstitem
-         \htmlref{NormUnit(axis)}{NormUnitaxis}: Normalised axis physical units
-
-         \sstitem
-         \htmlref{ObsAlt}{ObsAlt}: Geodetic altitude of observer
-
-         \sstitem
-         \htmlref{ObsLat}{ObsLat}: Geodetic latitude of observer
-
-         \sstitem
-         \htmlref{ObsLon}{ObsLon}: Geodetic longitude of observer
-
-         \sstitem
-         \htmlref{Permute}{Permute}: Permute axis order?
-
-         \sstitem
-         \htmlref{PreserveAxes}{PreserveAxes}: Preserve axes?
-
-         \sstitem
-         \htmlref{Symbol(axis)}{Symbolaxis}: Axis symbol
-
-         \sstitem
-         \htmlref{System}{System}: Coordinate system used to describe the domain
-
-         \sstitem
-         \htmlref{Title}{Title}: Frame title
-
-         \sstitem
-         \htmlref{Top(axis)}{Topaxis}: Highest axis value to display
-
-         \sstitem
-         \htmlref{Unit(axis)}{Unitaxis}: Axis physical units
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Mappings, the
-      following routines may also be applied to all Frames:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_ANGLE}{AST_ANGLE}: Find the angle subtended by two points at a third point
-
-         \sstitem
-         \htmlref{AST\_AXANGLE}{AST_AXANGLE}: Find the angle from an axis, to a line through two points
-
-         \sstitem
-         \htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE}: Calculate the distance between two axis values
-
-         \sstitem
-         \htmlref{AST\_AXOFFSET}{AST_AXOFFSET}: Calculate an offset along an axis
-
-         \sstitem
-         \htmlref{AST\_CONVERT}{AST_CONVERT}: Determine how to convert between two coordinate systems
-
-         \sstitem
-         \htmlref{AST\_DISTANCE}{AST_DISTANCE}: Calculate the distance between two points in a Frame
-
-         \sstitem
-         \htmlref{AST\_FINDFRAME}{AST_FINDFRAME}: Find a coordinate system with specified characteristics
-
-         \sstitem
-         \htmlref{AST\_FORMAT}{AST_FORMAT}: Format a coordinate value for a Frame axis
-
-         \sstitem
-         \htmlref{AST\_GETACTIVEUNIT}{AST_GETACTIVEUNIT}: Determines how the Unit attribute will be used
-
-         \sstitem
-         \htmlref{AST\_INTERSECT}{AST_INTERSECT}: Find the intersection between two geodesic curves
-
-         \sstitem
-         \htmlref{AST\_MATCHAXES}{AST_MATCHAXES}: Find any corresponding axes in two Frames
-
-         \sstitem
-         \htmlref{AST\_NORM}{AST_NORM}: Normalise a set of Frame coordinates
-
-         \sstitem
-         \htmlref{AST\_OFFSET}{AST_OFFSET}: Calculate an offset along a geodesic curve
-
-         \sstitem
-         \htmlref{AST\_OFFSET2}{AST_OFFSET2}: Calculate an offset along a geodesic curve in a 2D Frame
-
-         \sstitem
-         \htmlref{AST\_PERMAXES}{AST_PERMAXES}: Permute the order of a Frame's axes
-
-         \sstitem
-         \htmlref{AST\_PICKAXES}{AST_PICKAXES}: Create a new Frame by picking axes from an existing one
-
-         \sstitem
-         \htmlref{AST\_RESOLVE}{AST_RESOLVE}: Resolve a vector into two orthogonal components
-
-         \sstitem
-         \htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT}: Specify how the Unit attribute should be used
-
-         \sstitem
-         \htmlref{AST\_UNFORMAT}{AST_UNFORMAT}: Read a formatted coordinate value for a Frame axis
-      }
-   }
-}
-\sstroutine{
-   FrameSet\sstlabel{FrameSet}
-}{
-   Set of inter-related coordinate systems
-}{
-   \sstdescription{
-      A FrameSet consists of a set of one or more Frames (which
-      describe coordinate systems), connected together by Mappings
-      (which describe how the coordinate systems are inter-related). A
-      FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
-      of these Frames (i.e. to convert between any of the coordinate
-      systems which it describes).  The individual Frames are
-      identified within the FrameSet by an integer index, with Frames
-      being numbered consecutively from one as they are added to the
-      FrameSet.
-
-      Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
-      are allowed to be the same). Any of the Frames may be nominated
-      to hold these positions, and the choice is determined by the
-      values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
-      the indices of the relevant Frames.  By default, the first Frame
-      added to a FrameSet is its base Frame, and the last one added is
-      its current Frame.
-
-      The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
-      whatever the FrameSet is used to calibrate (e.g. the pixel
-      coordinates of an image) and the current Frame describes the
-      {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
-      (e.g. displayed, etc.). Any further Frames represent a library
-      of alternative coordinate systems, which may be selected by
-      making them current.
-
-      When a FrameSet is used in a context that requires a Frame,
-      (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
-      Frame is used. A FrameSet may therefore be used in place of its
-      current Frame in most situations.
-
-      When a FrameSet is used in a context that requires a Mapping,
-      the Mapping used is the one between its base Frame and its
-      current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
-      coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
-      Mapping, a FrameSet may also be inverted (see \htmlref{AST\_INVERT}{AST_INVERT}), which
-      has the effect of interchanging its base and current Frames and
-      hence of reversing the Mapping between them.
-
-      Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
-      Frame), either explicitly or as components within CmpFrames. In this
-      case the Mapping between a pair of Frames within a FrameSet will
-      include the effects of the clipping produced by any Regions included
-      in the path between the Frames.
-   }
-   \sstconstructor{
-      \htmlref{AST\_FRAMESET}{AST_FRAMESET}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The FrameSet class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      FrameSet also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Base}{Base}: FrameSet base Frame index
-
-         \sstitem
-         \htmlref{Current}{Current}: FrameSet current Frame index
-
-         \sstitem
-         \htmlref{Nframe}{Nframe}: Number of Frames in a FrameSet
-
-      }
-      Every FrameSet also inherits any further attributes that belong
-      to its current Frame, regardless of that Frame's class. (For
-      example, the \htmlref{Equinox}{Equinox} attribute, defined by the \htmlref{SkyFrame}{SkyFrame} class, is
-      inherited by any FrameSet which has a SkyFrame as its current
-      Frame.) The set of attributes belonging to a FrameSet may therefore
-      change when a new current Frame is selected.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Frames, the
-      following routines may also be applied to all FrameSets:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_ADDFRAME}{AST_ADDFRAME}: Add a Frame to a FrameSet to define a new coordinate
-         system
-
-         \sstitem
-         \htmlref{AST\_GETFRAME}{AST_GETFRAME}: Obtain a pointer to a specified Frame in a FrameSet
-
-         \sstitem
-         \htmlref{AST\_GETMAPPING}{AST_GETMAPPING}: Obtain a Mapping between two Frames in a FrameSet
-
-         \sstitem
-         \htmlref{AST\_REMAPFRAME}{AST_REMAPFRAME}: Modify a Frame's relationship to the other Frames in a
-         FrameSet
-
-         \sstitem
-         \htmlref{AST\_REMOVEFRAME}{AST_REMOVEFRAME}: Remove a Frame from a FrameSet
-      }
-   }
-}
-\sstroutine{
-   GrismMap\sstlabel{GrismMap}
-}{
-   Transform 1-dimensional coordinates using a grism dispersion equation
-}{
-   \sstdescription{
-      A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates using the spectral dispersion equation
-      described in FITS-WCS paper III {\tt{"}}Representation of spectral
-      coordinates in FITS{\tt{"}}. This describes the dispersion produced by
-      gratings, prisms and grisms.
-
-      When initially created, the forward transformation of a GrismMap
-      transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
-      values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
-      linearly related to position on the detector. It is defined in FITS-WCS
-      paper III as {\tt{"}}the offset on the detector from the point of intersection
-      of the camera axis, measured in units of the effective local length{\tt{"}}.
-      The units in which wavelength values are expected or returned is
-      determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
-      \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
-      also be used for the wavelength values.
-   }
-   \sstconstructor{
-      \htmlref{AST\_GRISMMAP}{AST_GRISMMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The GrismMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      GrismMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{GrismNR}{GrismNR}: The refractive index at the reference wavelength
-
-         \sstitem
-         \htmlref{GrismNRP}{GrismNRP}: Rate of change of refractive index with wavelength
-
-         \sstitem
-         \htmlref{GrismWaveR}{GrismWaveR}: The reference wavelength
-
-         \sstitem
-         \htmlref{GrismAlpha}{GrismAlpha}: The angle of incidence of the incoming light
-
-         \sstitem
-         \htmlref{GrismG}{GrismG}: The grating ruling density
-
-         \sstitem
-         \htmlref{GrismM}{GrismM}: The interference order
-
-         \sstitem
-         \htmlref{GrismEps}{GrismEps}: The angle between the normal and the dispersion plane
-
-         \sstitem
-         \htmlref{GrismTheta}{GrismTheta}: Angle between normal to detector plane and reference ray
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The GrismMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Interval\sstlabel{Interval}
-}{
-   A region representing an interval on one or more axes of a Frame
-}{
-   \sstdescription{
-      The Interval class implements a \htmlref{Region}{Region} which represents upper
-      and/or lower limits on one or more axes of a \htmlref{Frame}{Frame}. For a point to
-      be within the region represented by the Interval, the point must
-      satisfy all the restrictions placed on all the axes. The point is
-      outside the region if it fails to satisfy any one of the restrictions.
-      Each axis may have either an upper limit, a lower limit, both or
-      neither. If both limits are supplied but are in reverse order (so
-      that the lower limit is greater than the upper limit), then the
-      interval is an excluded interval, rather than an included interval.
-
-      Note, The Interval class makes no allowances for cyclic nature of
-      some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
-      should usually be used in these cases since this requires the user
-      to think about suitable upper and lower limits,
-   }
-   \sstconstructor{
-      \htmlref{AST\_INTERVAL}{AST_INTERVAL}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Interval class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Interval class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The Interval class does not define any new routines beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   IntraMap\sstlabel{IntraMap}
-}{
-   Map points using a private transformation routine
-}{
-   \sstdescription{
-      The IntraMap class provides a specialised form of \htmlref{Mapping}{Mapping} which
-      encapsulates a privately-defined coordinate transformation
-      routine (e.g. written in Fortran) so that it may be used like
-      any other AST Mapping. This allows you to create Mappings that
-      perform any conceivable coordinate transformation.
-
-      However, an IntraMap is intended for use within a single program
-      or a private suite of software, where all programs have access
-      to the same coordinate transformation functions (i.e. can be
-      linked against them). IntraMaps should not normally be stored in
-      datasets which may be exported for processing by other software,
-      since that software will not have the necessary transformation
-      functions available, resulting in an error.
-
-      You must register any coordinate transformation functions to be
-      used using \htmlref{AST\_INTRAREG}{AST_INTRAREG} before creating an IntraMap.
-   }
-   \sstconstructor{
-      \htmlref{AST\_INTRAMAP}{AST_INTRAMAP} (also see AST\_INTRAREG)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The IntraMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      IntraMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{IntraFlag}{IntraFlag}: IntraMap identification string
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The IntraMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   KeyMap\sstlabel{KeyMap}
-}{
-   Store a set of key/value pairs
-}{
-   \sstdescription{
-      The KeyMap class is used to store a set of values with associated keys
-      which identify the values. The keys are strings (case-sensitive,
-      trailing spaces are ignored), and the data type of the values can be
-      integer, floating point,
-      character string or AST \htmlref{Object}{Object} pointer. Each
-      value can be a scalar or a one-dimensional vector. A KeyMap is
-      conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
-      input into an output - the input is the key, and the output is the
-      value associated with the key. However, this is only a conceptual
-      similarity, and it should be noted that the KeyMap class inherits from
-      the Object class rather than the Mapping class. The methods of the
-      Mapping class cannot be used with a KeyMap.
-   }
-   \sstconstructor{
-      \htmlref{AST\_KEYMAP}{AST_KEYMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The KeyMap class inherits from the Object class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Objects, every
-      KeyMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{KeyError}{KeyError}: \htmlref{Report}{Report} an error if the requested key does not exist?
-
-         \sstitem
-         \htmlref{SizeGuess}{SizeGuess}: The expected size of the KeyMap.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Objects, the
-      following routines may also be applied to all KeyMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_MAPGET0$<$X$>$}{AST_MAPGET0X}: Get a named scalar entry from a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPGET1$<$X$>$}{AST_MAPGET1X}: Get a named vector entry from a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPGETELEM$<$X$>$}{AST_MAPGETELEMX}: Get an element of a named vector entry from a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPHASKEY}{AST_MAPHASKEY}: Does the KeyMap contain a named entry?
-
-         \sstitem
-         \htmlref{AST\_MAPKEY}{AST_MAPKEY}: Return the key name at a given index in the KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPLENC}{AST_MAPLENC}: Get the length of a named character entry in a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPLENGTH}{AST_MAPLENGTH}: Get the length of a named entry in a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPPUT0$<$X$>$}{AST_MAPPUT0X}: Add a new scalar entry to a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPPUT1$<$X$>$}{AST_MAPPUT1X}: Add a new vector entry to a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPREMOVE}{AST_MAPREMOVE}: Removed a named entry from a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPSIZE}{AST_MAPSIZE}: Get the number of entries in a KeyMap
-
-         \sstitem
-         \htmlref{AST\_MAPTYPE}{AST_MAPTYPE}: Return the data type of a named entry in a map.
-      }
-   }
-}
-\sstroutine{
-   LutMap\sstlabel{LutMap}
-}{
-   Transform 1-dimensional coordinates using a lookup table
-}{
-   \sstdescription{
-      A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates by using linear interpolation in a
-      lookup table.
-
-      Each input coordinate value is first scaled to give the index of
-      an entry in the table by subtracting a starting value (the input
-      coordinate corresponding to the first table entry) and dividing
-      by an increment (the difference in input coordinate value
-      between adjacent table entries).
-
-      The resulting index will usually contain a fractional part, so
-      the output coordinate value is then generated by interpolating
-      linearly between the appropriate entries in the table. If the
-      index lies outside the range of the table, linear extrapolation
-      is used based on the two nearest entries (i.e. the two entries
-      at the start or end of the table, as appropriate). If either of the
-      entries used for the interplation has a value of AST\_\_BAD, then the
-      interpolated value is returned as AST\_\_BAD.
-
-      If the lookup table entries increase or decrease monotonically (and
-      if the table contains no AST\_\_BAD values), then the inverse
-      transformation may also be performed.
-   }
-   \sstconstructor{
-      \htmlref{AST\_LUTMAP}{AST_LUTMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The LutMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      LutMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{LutInterp}{LutInterp}: The interpolation method to use between table entries.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The LutMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Mapping\sstlabel{Mapping}
-}{
-   Inter-relate two coordinate systems
-}{
-   \sstdescription{
-      This class provides the basic facilities for transforming a set
-      of coordinates (representing {\tt{"}}input{\tt{"}} points) to give a new set
-      of coordinates (representing {\tt{"}}output{\tt{"}} points).  It is used to
-      describe the relationship which exists between two different
-      coordinate systems and to implement operations which make use of
-      this (such as transforming coordinates and resampling grids of
-      data).  However, the Mapping class does not have a constructor
-      function of its own, as it is simply a container class for a
-      family of specialised Mappings which implement particular types
-      of coordinate transformation.
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Mapping class inherits from the \htmlref{Object}{Object} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Objects, every
-      Mapping also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Invert}{Invert}: Mapping inversion flag
-
-         \sstitem
-         \htmlref{IsLinear}{IsLinear}: Is the Mapping linear?
-
-         \sstitem
-         \htmlref{IsSimple}{IsSimple}: Has the Mapping been simplified?
-
-         \sstitem
-         \htmlref{Nin}{Nin}: Number of input coordinates for a Mapping
-
-         \sstitem
-         \htmlref{Nout}{Nout}: Number of output coordinates for a Mapping
-
-         \sstitem
-         \htmlref{Report}{Report}: Report transformed coordinates?
-
-         \sstitem
-         \htmlref{TranForward}{TranForward}: Forward transformation defined?
-
-         \sstitem
-         \htmlref{TranInverse}{TranInverse}: Inverse transformation defined?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Objects, the
-      following routines may also be applied to all Mappings:
-
-      \sstitemlist{
-
-         \sstitem
-         astRebinSeq$<$X$>$: Rebin a region of a sequence of data grids
-
-         \sstitem
-         \htmlref{AST\_DECOMPOSE}{AST_DECOMPOSE}: Decompose a Mapping into two component Mappings
-
-         \sstitem
-         \htmlref{AST\_TRANGRID}{AST_TRANGRID}: Transform a grid of positions
-
-         \sstitem
-         \htmlref{AST\_INVERT}{AST_INVERT}: Invert a Mapping
-
-         \sstitem
-         \htmlref{AST\_LINEARAPPROX}{AST_LINEARAPPROX}: Calculate a linear approximation to a Mapping
-
-         \sstitem
-         \htmlref{AST\_MAPBOX}{AST_MAPBOX}: Find a bounding box for a Mapping
-
-         \sstitem
-         \htmlref{AST\_MAPSPLIT}{AST_MAPSPLIT}: Split a Mapping up into parallel component Mappings
-
-         \sstitem
-         \htmlref{AST\_RATE}{AST_RATE}: Calculate the rate of change of a Mapping output
-
-         \sstitem
-         \htmlref{AST\_REBIN$<$X$>$}{AST_REBINX}: Rebin a region of a data grid
-
-         \sstitem
-         \htmlref{AST\_REBINSEQ$<$X$>$}{AST_REBINSEQX}: Rebin a region of a sequence of data grids
-
-         \sstitem
-         \htmlref{AST\_REMOVEREGIONS}{AST_REMOVEREGIONS}: Remove any Regions from a Mapping
-
-         \sstitem
-         \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}: Resample a region of a data grid
-
-         \sstitem
-         \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}: Simplify a Mapping
-
-         \sstitem
-         \htmlref{AST\_TRAN1}{AST_TRAN1}: Transform 1-dimensional coordinates
-
-         \sstitem
-         \htmlref{AST\_TRAN2}{AST_TRAN2}: Transform 2-dimensional coordinates
-
-         \sstitem
-         \htmlref{AST\_TRANN}{AST_TRANN}: Transform N-dimensional coordinates
-      }
-   }
-}
-\sstroutine{
-   MathMap\sstlabel{MathMap}
-}{
-   Transform coordinates using mathematical expressions
-}{
-   \sstdescription{
-      A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
-      and/or inverse transformation functions using arithmetic operations
-      and mathematical functions similar to those available in Fortran. The
-      MathMap interprets these functions at run-time, whenever its forward
-      or inverse transformation is required. Because the functions are not
-      compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
-      describe coordinate transformations in a transportable manner. A
-      MathMap therefore provides a flexible way of defining new types of
-      Mapping whose descriptions may be stored as part of a dataset and
-      interpreted by other programs.
-   }
-   \sstconstructor{
-      \htmlref{AST\_MATHMAP}{AST_MATHMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The MathMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      MathMap also has the following attributes:
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Seed}{Seed}: Random number seed
-
-         \sstitem
-         \htmlref{SimpFI}{SimpFI}: Forward-inverse MathMap pairs simplify?
-
-         \sstitem
-         \htmlref{SimpIF}{SimpIF}: Inverse-forward MathMap pairs simplify?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The MathMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   MatrixMap\sstlabel{MatrixMap}
-}{
-   Map coordinates by multiplying by a matrix
-}{
-   \sstdescription{
-      A MatrixMap is form of \htmlref{Mapping}{Mapping} which performs a general linear
-      transformation. Each set of input coordinates, regarded as a
-      column-vector, are pre-multiplied by a matrix (whose elements
-      are specified when the MatrixMap is created) to give a new
-      column-vector containing the output coordinates. If appropriate,
-      the inverse transformation may also be performed.
-   }
-   \sstconstructor{
-      \htmlref{AST\_MATRIXMAP}{AST_MATRIXMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The MatrixMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The MatrixMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The MatrixMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   NormMap\sstlabel{NormMap}
-}{
-   Normalise coordinates using a supplied Frame
-}{
-   \sstdescription{
-      The NormMap class implements a \htmlref{Mapping}{Mapping} which normalises coordinate
-      values using the
-      \htmlref{AST\_NORM}{AST_NORM} routine
-      of a supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
-      are both equal to the number of axes in the supplied Frame.
-
-      The forward and inverse transformation of a NormMap are both
-      defined but are identical (that is, they do not form a real inverse
-      pair in that the inverse transformation does not undo the
-      normalisation, instead it reapplies it). However, the
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-      function will replace neighbouring pairs of forward and inverse
-      NormMaps by a single \htmlref{UnitMap}{UnitMap}.
-   }
-   \sstconstructor{
-      \htmlref{AST\_NORMMAP}{AST_NORMMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The NormMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The \htmlref{MatrixMap}{MatrixMap} class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The NormMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   NullRegion\sstlabel{NullRegion}
-}{
-   A boundless region within a Frame
-}{
-   \sstdescription{
-      The NullRegion class implements a \htmlref{Region}{Region} with no bounds within a \htmlref{Frame}{Frame}.
-      If the \htmlref{Negated}{Negated} attribute of a NullRegion is false, the NullRegion
-      represents a Region containing no points. If the Negated attribute of
-      a NullRegion is true, the NullRegion represents an infinite Region
-      (that is, all points in the coordinate system are inside the NullRegion).
-   }
-   \sstconstructor{
-      \htmlref{AST\_NULLREGION}{AST_NULLREGION}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The NullRegion class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The NullRegion class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The NullRegion class does not define any new routines beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   Object\sstlabel{Object}
-}{
-   Base class for all AST Objects
-}{
-   \sstdescription{
-      This class is the base class from which all other classes in the
-      AST library are derived. It provides all the basic Object
-      behaviour and Object manipulation facilities required throughout
-      the library. There is no Object constructor, however, as Objects
-      on their own are not useful.
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Object base class does not inherit from any other class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      All Objects have the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Class}{Class}: Object class name
-
-         \sstitem
-         \htmlref{ID}{ID}: Object identification string
-
-         \sstitem
-         \htmlref{Ident}{Ident}: Permanent Object identification string
-
-         \sstitem
-         \htmlref{Nobject}{Nobject}: Number of Objects in class
-
-         \sstitem
-         \htmlref{ObjSize}{ObjSize}: The in-memory size of the Object in bytes
-
-         \sstitem
-         \htmlref{RefCount}{RefCount}: Count of active Object pointers
-
-         \sstitem
-         \htmlref{UseDefs}{UseDefs}: Allow use of default values for Object attributes?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The following routines may be applied to all Objects:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_ANNUL}{AST_ANNUL}: Annul a pointer to an Object
-
-         \sstitem
-         \htmlref{AST\_BEGIN}{AST_BEGIN}: Begin a new AST context
-
-         \sstitem
-         \htmlref{AST\_CLEAR}{AST_CLEAR}: Clear attribute values for an Object
-
-         \sstitem
-         \htmlref{AST\_CLONE}{AST_CLONE}: Clone a pointer to an Object
-
-         \sstitem
-         \htmlref{AST\_COPY}{AST_COPY}: Copy an Object
-
-         \sstitem
-         \htmlref{AST\_DELETE}{AST_DELETE}: Delete an Object
-
-         \sstitem
-         \htmlref{AST\_END}{AST_END}: End an AST context
-
-         \sstitem
-         \htmlref{AST\_ESCAPES}{AST_ESCAPES}: Control whether graphical escape sequences are removed
-
-         \sstitem
-         \htmlref{AST\_EXEMPT}{AST_EXEMPT}: Exempt an Object pointer from AST context handling
-
-         \sstitem
-         \htmlref{AST\_EXPORT}{AST_EXPORT}: Export an Object pointer to an outer context
-
-         \sstitem
-         \htmlref{AST\_GET$<$X$>$}{AST_GETX}: Get an attribute value for an Object
-
-         \sstitem
-         \htmlref{AST\_IMPORT}{AST_IMPORT}: Import an Object pointer to the current context
-
-         \sstitem
-         \htmlref{AST\_ISA$<$CLASS$>$}{AST_ISACLASS}: Test class membership
-
-         \sstitem
-         \htmlref{AST\_SAME}{AST_SAME}: Do two AST pointers refer to the same Object?
-
-         \sstitem
-         \htmlref{AST\_SET}{AST_SET}: Set attribute values for an Object
-
-         \sstitem
-         \htmlref{AST\_SET$<$X$>$}{AST_SETX}: Set an attribute value for an Object
-
-         \sstitem
-         \htmlref{AST\_SHOW}{AST_SHOW}: Display a textual representation of an Object on standard
-         output
-
-         \sstitem
-         \htmlref{AST\_TEST}{AST_TEST}: Test if an attribute value is set for an Object
-
-         \sstitem
-         \htmlref{AST\_TUNE}{AST_TUNE}: Set or get an AST tuning parameter
-
-         \sstitem
-         \htmlref{AST\_VERSION}{AST_VERSION}: Return the verson of the AST library being used.
-      }
-   }
-}
-\sstroutine{
-   PcdMap\sstlabel{PcdMap}
-}{
-   Apply 2-dimensional pincushion/barrel distortion
-}{
-   \sstdescription{
-      A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
-      positions to correct for the radial distortion introduced by some
-      cameras and telescopes. This can take the form either of pincushion
-      or barrel distortion, and is characterized by a single distortion
-      coefficient.
-
-      A PcdMap is specified by giving this distortion coefficient and the
-      coordinates of the centre of the radial distortion. The forward
-      transformation of a PcdMap applies the distortion:
-
-         RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
-      where R is the undistorted radial distance from the distortion
-      centre (specified by attribute PcdCen), RD is the radial distance
-      from the same centre in the presence of distortion, and C is the
-      distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
-      The inverse transformation of a PcdMap removes the distortion
-      produced by the forward transformation. The expression used to derive
-      R from RD is an approximate inverse of the expression above.
-   }
-   \sstconstructor{
-      \htmlref{AST\_PCDMAP}{AST_PCDMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PcdMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      PcdMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Disco}{Disco}: PcdMap pincushion/barrel distortion coefficient
-
-         \sstitem
-         \htmlref{PcdCen(axis)}{PcdCenaxis}: Centre coordinates of pincushion/barrel distortion
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PcdMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   PermMap\sstlabel{PermMap}
-}{
-   Coordinate permutation Mapping
-}{
-   \sstdescription{
-      A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
-      and possibly also changes the number of coordinates, between its
-      input and output.
-
-      In addition to permuting the coordinate order, a PermMap may
-      also assign constant values to coordinates. This is useful when
-      the number of coordinates is being increased as it allows fixed
-      values to be assigned to any new ones.
-   }
-   \sstconstructor{
-      \htmlref{AST\_PERMMAP}{AST_PERMMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PermMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The PermMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PermMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Plot\sstlabel{Plot}
-}{
-   Provide facilities for 2D graphical output
-}{
-   \sstdescription{
-      This class provides facilities for producing 2D graphical output.
-      A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
-      \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
-      associated with a rectangular plotting area in the underlying
-      graphics system. This plotting area is where graphical output
-      appears. It is defined when the Plot is created.
-
-      The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
-      system, which is the coordinate system in which plotting
-      operations are specified. The results of each plotting operation
-      are automatically transformed into graphical coordinates so as
-      to appear in the plotting area (subject to any clipping which
-      may be in effect).
-
-      Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
-      may often be non-linear, or even discontinuous, most plotting
-      does not result in simple straight lines. The basic plotting
-      element is therefore not a straight line, but a geodesic curve
-      (see \htmlref{AST\_CURVE}{AST_CURVE}, \htmlref{AST\_GENCURVE}{AST_GENCURVE} and \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}). A Plot also provides facilities
-      for drawing markers or symbols (\htmlref{AST\_MARK}{AST_MARK}), text (\htmlref{AST\_TEXT}{AST_TEXT}) and grid
-      lines (\htmlref{AST\_GRIDLINE}{AST_GRIDLINE}). It is also possible to draw curvilinear axes
-      with optional coordinate grids (\htmlref{AST\_GRID}{AST_GRID}).
-      A range of Plot attributes is available to allow precise control
-      over the appearance of graphical output produced by these
-      routines.
-
-      You may select different physical coordinate systems in which to
-      plot (including the native graphical coordinate system itself)
-      by selecting different Frames as the current Frame of a Plot,
-      using its \htmlref{Current}{Current} attribute.  You may also set up clipping (see
-      \htmlref{AST\_CLIP}{AST_CLIP}) to limit the extent of any plotting you perform, and
-      this may be done in any of the coordinate systems associated
-      with the Plot, not necessarily the one you are plotting in.
-
-      Like any FrameSet, a Plot may also be used as a Frame. In this
-      case, it behaves like its current Frame, which describes the
-      physical coordinate system.
-
-      When used as a Mapping, a Plot describes the inter-relation
-      between graphical coordinates (its base Frame) and physical
-      coordinates (its current Frame).  It differs from a normal
-      FrameSet, however, in that an attempt to transform points which
-      lie in clipped areas of the Plot will result in bad coordinate
-      values (AST\_\_BAD).
-   }
-   \sstconstructor{
-      \htmlref{AST\_PLOT}{AST_PLOT}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Plot class inherits from the FrameSet class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all FrameSets, every
-      Plot also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         Abbrev: Abbreviate leading fields?
-
-         \sstitem
-         \htmlref{Border}{Border}: Draw a border around valid regions of a Plot?
-
-         \sstitem
-         \htmlref{Clip}{Clip}: Clip lines and/or markers at the Plot boundary?
-
-         \sstitem
-         \htmlref{ClipOp}{ClipOp}: Combine Plot clipping limits using a boolean OR?
-
-         \sstitem
-         \htmlref{Colour(element)}{Colourelement}: Colour index for a Plot element
-
-         \sstitem
-         \htmlref{DrawAxes(axis)}{DrawAxesaxis}: Draw axes for a Plot?
-
-         \sstitem
-         \htmlref{DrawTitle}{DrawTitle}: Draw a title for a Plot?
-
-         \sstitem
-         \htmlref{Escape}{Escape}: Allow changes of character attributes within strings?
-
-         \sstitem
-         \htmlref{Edge(axis)}{Edgeaxis}: Which edges to label in a Plot
-
-         \sstitem
-         \htmlref{Font(element)}{Fontelement}: Character font for a Plot element
-
-         \sstitem
-         \htmlref{Gap(axis)}{Gapaxis}: \htmlref{Interval}{Interval} between linearly spaced major axis values
-
-         \sstitem
-         \htmlref{Grf}{Grf}: Select the graphics interface to use.
-
-         \sstitem
-         \htmlref{Grid}{Grid}: Draw grid lines for a Plot?
-
-         \sstitem
-         \htmlref{Invisible}{Invisible}: Draw graphics in invisible ink?
-
-         \sstitem
-         \htmlref{LabelAt(axis)}{LabelAtaxis}: Where to place numerical labels for a Plot
-
-         \sstitem
-         \htmlref{LabelUnits(axis)}{LabelUnitsaxis}: Use axis unit descriptions in a Plot?
-
-         \sstitem
-         \htmlref{LabelUp(axis)}{LabelUpaxis}: Draw numerical Plot labels upright?
-
-         \sstitem
-         \htmlref{Labelling}{Labelling}: Label and tick placement option for a Plot
-
-         \sstitem
-         \htmlref{LogGap(axis)}{LogGapaxis}: Interval between logarithmically spaced major axis values
-
-         \sstitem
-         \htmlref{LogPlot(axis)}{LogPlotaxis}: Map the plot onto the screen logarithmically?
-
-         \sstitem
-         \htmlref{LogTicks(axis)}{LogTicksaxis}: Space the major tick marks logarithmically?
-
-         \sstitem
-         \htmlref{MajTickLen(axis)}{MajTickLenaxis}: Length of major tick marks for a Plot
-
-         \sstitem
-         \htmlref{MinTickLen(axis)}{MinTickLenaxis}: Length of minor tick marks for a Plot
-
-         \sstitem
-         \htmlref{MinTick(axis)}{MinTickaxis}: Density of minor tick marks for a Plot
-
-         \sstitem
-         \htmlref{NumLab(axis)}{NumLabaxis}: Draw numerical axis labels for a Plot?
-
-         \sstitem
-         \htmlref{NumLabGap(axis)}{NumLabGapaxis}: Spacing of numerical axis labels for a Plot
-
-         \sstitem
-         \htmlref{Size(element)}{Sizeelement}: Character size for a Plot element
-
-         \sstitem
-         \htmlref{Style(element)}{Styleelement}: Line style for a Plot element
-
-         \sstitem
-         \htmlref{TextLab(axis)}{TextLabaxis}: Draw descriptive axis labels for a Plot?
-
-         \sstitem
-         \htmlref{TextLabGap(axis)}{TextLabGapaxis}: Spacing of descriptive axis labels for a Plot
-
-         \sstitem
-         \htmlref{TickAll}{TickAll}: Draw tick marks on all edges of a Plot?
-
-         \sstitem
-         \htmlref{TitleGap}{TitleGap}: Vertical spacing for a Plot title
-
-         \sstitem
-         \htmlref{Tol}{Tol}: Plotting tolerance
-
-         \sstitem
-         \htmlref{Width(element)}{Widthelement}: Line width for a Plot element
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all FrameSets, the
-      following routines may also be applied to all Plots:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_BORDER}{AST_BORDER}: Draw a border around valid regions of a Plot
-
-         \sstitem
-         \htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}: Returns a bounding box for previously drawn graphics
-
-         \sstitem
-         \htmlref{AST\_CLIP}{AST_CLIP}: Set up or remove clipping for a Plot
-
-         \sstitem
-         \htmlref{AST\_CURVE}{AST_CURVE}: Draw a geodesic curve
-
-         \sstitem
-         \htmlref{AST\_GENCURVE}{AST_GENCURVE}: Draw a generalized curve
-
-         \sstitem
-         \htmlref{AST\_GETGRFCONTEXT}{AST_GETGRFCONTEXT}: Get the graphics context for a Plot
-
-         \sstitem
-         \htmlref{AST\_GRFPOP}{AST_GRFPOP}: Retrieve previously saved graphics functions
-
-         \sstitem
-         \htmlref{AST\_GRFPUSH}{AST_GRFPUSH}: Save the current graphics functions
-
-         \sstitem
-         \htmlref{AST\_GRFSET}{AST_GRFSET}: Register a graphics routine for use by the Plot class
-
-         \sstitem
-         \htmlref{AST\_GRID}{AST_GRID}: Draw a set of labelled coordinate axes
-
-         \sstitem
-         \htmlref{AST\_GRIDLINE}{AST_GRIDLINE}: Draw a grid line (or axis) for a Plot
-
-         \sstitem
-         \htmlref{AST\_MARK}{AST_MARK}: Draw a set of markers for a Plot
-
-         \sstitem
-         \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}: Draw a series of connected geodesic curves
-
-         \sstitem
-         \htmlref{AST\_TEXT}{AST_TEXT}: Draw a text string for a Plot
-      }
-   }
-   \sstdiytopic{
-      Graphical Elements
-   }{
-      The colour index, character font, character size, line style and
-      line width used for plotting can be set independently for
-      various elements of the graphical output produced by a Plot.
-      The different graphical elements are identified by appending the
-      strings listed below as subscripts to the Plot attributes
-      Colour(element), Font(element), Size(element), Style(element)
-      and Width(element). These strings are case-insensitive and
-      unambiguous abbreviations may be used. Elements of the graphical
-      output which relate to individual axes can be referred to either
-      independently (e.g. {\tt{"}}(Grid1){\tt{"}} and {\tt{"}}(Grid2){\tt{"}} ) or together (e.g.
-      {\tt{"}}(Grid){\tt{"}}):
-
-      \sstitemlist{
-
-         \sstitem
-         Axes: \htmlref{Axis}{Axis} lines drawn through tick marks using AST\_GRID
-
-         \sstitem
-         Axis1: Axis line drawn through tick marks on axis 1 using AST\_GRID
-
-         \sstitem
-         Axis2: Axis line drawn through tick marks on axis 2 using AST\_GRID
-
-         \sstitem
-         Border: The Plot border drawn using AST\_BORDER or AST\_GRID
-
-         \sstitem
-         Curves: Geodesic curves drawn using AST\_CURVE, AST\_GENCURVE or AST\_POLYCURVE
-
-         \sstitem
-         Grid: Grid lines drawn using AST\_GRIDLINE or AST\_GRID
-
-         \sstitem
-         Grid1: Grid lines which cross axis 1, drawn using AST\_GRIDLINE or AST\_GRID
-
-         \sstitem
-         Grid2: Grid lines which cross axis 2, drawn using AST\_GRIDLINE or AST\_GRID
-
-         \sstitem
-         Markers: Graphical markers (symbols) drawn using AST\_MARK
-
-         \sstitem
-         NumLab: Numerical axis labels drawn using AST\_GRID
-
-         \sstitem
-         NumLab1: Numerical labels for axis 1 drawn using AST\_GRID
-
-         \sstitem
-         NumLab2: Numerical labels for axis 2 drawn using AST\_GRID
-
-         \sstitem
-         Strings: Text strings drawn using AST\_TEXT
-
-         \sstitem
-         TextLab: Descriptive axis labels drawn using AST\_GRID
-
-         \sstitem
-         TextLab1: Descriptive label for axis 1 drawn using AST\_GRID
-
-         \sstitem
-         TextLab2: Descriptive label for axis 2 drawn using AST\_GRID
-
-         \sstitem
-         Ticks: Tick marks (both major and minor) drawn using AST\_GRID
-
-         \sstitem
-         Ticks1: Tick marks (both major and minor) for axis 1 drawn using AST\_GRID
-
-         \sstitem
-         Ticks2: Tick marks (both major and minor) for axis 2 drawn using AST\_GRID
-
-         \sstitem
-         \htmlref{Title}{Title}: The Plot title drawn using AST\_GRID
-      }
-   }
-}
-\sstroutine{
-   Plot3D\sstlabel{Plot3D}
-}{
-   Provide facilities for 2D graphical output
-}{
-   \sstdescription{
-      A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
-      for producing 3D graphical output, including fully annotated 3D
-      coordinate grids. The base \htmlref{Frame}{Frame} in a Plot3D describes a 3-dimensional
-      {\tt{"}}graphical{\tt{"}} coordinate system. The axes of this coordinate system are
-      assumed to be right-handed (that is, if X appears horizontally to the
-      right and Y vertically upwards, then Z is out of the screen towards
-      the viewer), and are assumed to be equally scaled (that is, the same
-      units are used to measure positions on each of the 3 axes). The upper
-      and lower bounds of a volume within this graphical coordinate system
-      is specified when the Plot3D is created, and all subsequent graphics
-      are {\tt{"}}drawn{\tt{"}} in this volume.
-
-      The Plot3D class does not itself include any ability to draw on a
-      graphics device. Instead it calls upon function in an externally
-      supplied module (the {\tt{"}}grf3d{\tt{"}} module) to do the required drawing.
-      A module should be written that implements the functions of the
-      grf3d interface using the facilities of a specific graphics system
-      This module should then be linked into the application so that the
-      Plot3D class can use its functions (see the description of the
-      \htmlref{ast\_link}{ast_link} commands for details of how to do this). The grf3d interface
-      defines a few simple functions for drawing primitives such as straight
-      lines, markers and character strings. These functions all accept
-      positions in the 3D graphics coordinate system (the base Frame of the
-      Plot3D), and so the grf3d module must also manage the projection of
-      these 3D coordinates onto the 2D viewing surface, including the choice
-      of {\tt{"}}eye{\tt{"}}/{\tt{"}}camera{\tt{"}} position, direction of viewing, etc. The AST
-      library includes a sample implementation of the grf3d interface
-      based on the PGPLOT graphics system (see file grf3d\_pgplot.c). This
-      implementation also serves to document the grf3d interface itself and
-      should be consulted for details before writing a new implementation.
-
-      The current Frame of a Plot3D describes a {\tt{"}}physical{\tt{"}} 3-dimensional
-      coordinate system, which is the coordinate system in which plotting
-      operations are specified when invoking the methods of the Plot3D
-      class. The results of each plotting operation are automatically
-      transformed into 3D graphical coordinates before being plotted
-      using the facilities of the grf3d module linked into the application.
-
-      You may select different physical coordinate systems in which to
-      plot (including the native graphical coordinate system itself)
-      by selecting different Frames as the current Frame of a Plot3D,
-      using its \htmlref{Current}{Current} attribute.
-
-      Like any \htmlref{FrameSet}{FrameSet}, a Plot3D may also be used as a Frame. In this
-      case, it behaves like its current Frame, which describes the
-      physical coordinate system.
-
-      When used as a \htmlref{Mapping}{Mapping}, a Plot3D describes the inter-relation
-      between 3D graphical coordinates (its base Frame) and 3D physical
-      coordinates (its current Frame).
-
-      Although the Plot3D class inherits from the Plot class, several of
-      the facilities of the Plot class are not available in the Plot3D
-      class, and an error will be reported if any attempt is made to use
-      them. Specifically, the Plot3D class does not support clipping
-      using the
-      astClip function.
-      \htmlref{AST\_CLIP}{AST_CLIP} routine.
-      Nor does it support the specification of graphics primitive functions
-      at run-time using the
-      \htmlref{AST\_GRFSET}{AST_GRFSET}, \htmlref{AST\_GRFPOP}{AST_GRFPOP}, \htmlref{AST\_GRFPUSH}{AST_GRFPUSH}, and \htmlref{AST\_GETGRFCONTEXT}{AST_GETGRFCONTEXT} routines.
-   }
-   \sstconstructor{
-      \htmlref{AST\_PLOT3D}{AST_PLOT3D}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Plot3D class inherits from the Plot class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Plots, every
-      Plot3D also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         Norm: Normal vector defining the 2D plane used for text and markers
-
-         \sstitem
-         \htmlref{RootCorner}{RootCorner}: Specifies which edges of the 3D box should be annotated.
-
-      }
-      Some attributes of the Plot class refer to specific physical
-      coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic
-      Plot, the axis index must be 1 or 2, but for a Plot3D the axis index
-      can be 1, 2 or 3.
-
-      Certain Plot attributes are ignored by the Plot3D class (e.g. Edge,
-      \htmlref{DrawTitle}{DrawTitle}, \htmlref{TitleGap}{TitleGap}, etc). Consult the Plot attribute documentation
-      for details.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-       The Plot3D class does not define any new routines beyond those
-       which are applicable to all Plots. Note, however, that the
-       following methods inherited from the Plot class cannot be used with
-       a Plot3D and will report an error if called:
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}, AST\_CLIP, \htmlref{AST\_CURVE}{AST_CURVE}, \htmlref{AST\_GENCURVE}{AST_GENCURVE},
-         AST\_GETGRFCONTEXT, AST\_GRFPOP, AST\_GRFPUSH, AST\_GRFSET,
-         \htmlref{AST\_GRIDLINE}{AST_GRIDLINE}, \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}.
-      }
-   }
-}
-\sstroutine{
-   PointList\sstlabel{PointList}
-}{
-   A collection of points in a Frame
-}{
-   \sstdescription{
-      The PointList class implements a \htmlref{Region}{Region} which represents a collection
-      of points in a \htmlref{Frame}{Frame}.
-   }
-   \sstconstructor{
-      \htmlref{AST\_POINTLIST}{AST_POINTLIST}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PointList class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Regions, every
-      PointList also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{ListSize}{ListSize}: The number of positions stored in the PointList
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PointList class does not define any new routines beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   PolyMap\sstlabel{PolyMap}
-}{
-   Map coordinates using polynomial functions
-}{
-   \sstdescription{
-      A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
-      transformation.  Each output coordinate is a polynomial function of
-      all the input coordinates. The coefficients are specified separately
-      for each output coordinate. The forward and inverse transformations
-      are defined independantly by separate sets of coefficients.
-   }
-   \sstconstructor{
-      \htmlref{AST\_POLYMAP}{AST_POLYMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PolyMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The PolyMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PolyMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Polygon\sstlabel{Polygon}
-}{
-   A polygonal region within a 2-dimensional Frame
-}{
-   \sstdescription{
-      The Polygon class implements a polygonal area, defined by a
-      collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
-      are connected together by geodesic curves within the encapsulated Frame.
-      For instance, if the encapsulated Frame is a simple Frame then the
-      geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
-      the geodesics will be great circles. Note, the vertices must be
-      supplied in an order such that the inside of the polygon is to the
-      left of the boundary as the vertices are traversed. Supplying them
-      in the reverse order will effectively negate the polygon.
-
-      Within a SkyFrame, neighbouring vertices are always joined using the
-      shortest path. Thus if an edge of 180 degrees or more in length is
-      required, it should be split into section each of which is less
-      than 180 degrees. The closed path joining all the vertices in order
-      will divide the celestial sphere into two disjoint regions. The
-      inside of the polygon is the region which is circled in an
-      anti-clockwise manner (when viewed from the inside of the celestial
-      sphere) when moving through the list of vertices in the order in
-      which they were supplied when the Polygon was created (i.e. the
-      inside is to the left of the boundary when moving through the
-      vertices in the order supplied).
-   }
-   \sstconstructor{
-      \htmlref{AST\_POLYGON}{AST_POLYGON}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Polygon class inherits from the \htmlref{Region}{Region} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Polygon class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Regions, the
-      following routines may also be applied to all Polygons:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_DOWNSIZE}{AST_DOWNSIZE}: Reduce the number of vertices in a Polygon.
-
-         \sstitem
-         \htmlref{AST\_OUTLINE$<$X$>$}{AST_OUTLINEX}: Create a Polygon outlining values in a pixel array
-      }
-   }
-}
-\sstroutine{
-   Prism\sstlabel{Prism}
-}{
-   An extrusion of a region into higher dimensions
-}{
-   \sstdescription{
-      A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
-      into one or more orthogonal dimensions (specified by another Region).
-      If the Region to be extruded has N axes, and the Region defining the
-      extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
-      A point is inside the Prism if the first N axis values correspond to
-      a point inside the Region being extruded, and the remaining M axis
-      values correspond to a point inside the Region defining the extrusion.
-
-      As an example, a cylinder can be represented by extruding an existing
-      \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
-      Interval would have a single axis and would specify the upper and
-      lower limits of the cylinder along its length.
-   }
-   \sstconstructor{
-      \htmlref{AST\_PRISM}{AST_PRISM}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Prism class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Prism class does not define any new attributes beyond those
-      which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The Prism class does not define any new routines beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   RateMap\sstlabel{RateMap}
-}{
-   Mapping which represents differentiation
-}{
-   \sstdescription{
-      A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
-      Jacobian matrix of another Mapping. The Mapping for which the
-      Jacobian is required is specified when the new RateMap is created,
-      and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
-      The number of inputs to a RateMap is the same as the number of inputs
-      to its encapsulated Mapping. The number of outputs from a RateMap
-      is always one. This one output equals the rate of change of a
-      specified output of the encapsulated Mapping with respect to a
-      specified input of the encapsulated Mapping (the input and output
-      to use are specified when the RateMap is created).
-
-      A RateMap which has not been inverted does not define an inverse
-      transformation. If a RateMap has been inverted then it will define
-      an inverse transformation but not a forward transformation.
-   }
-   \sstconstructor{
-      \htmlref{AST\_RATEMAP}{AST_RATEMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The RateMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The RateMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The RateMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Region\sstlabel{Region}
-}{
-   Represents a region within a coordinate system
-}{
-   \sstdescription{
-      This class provides the basic facilities for describing a region within
-      a specified coordinate system. However, the Region class does not
-      have a constructor function of its own, as it is simply a container
-      class for a family of specialised sub-classes such as \htmlref{Circle}{Circle}, \htmlref{Box}{Box}, etc,
-      which implement Regions with particular shapes.
-
-      All sub-classes of Region require a \htmlref{Frame}{Frame} to be supplied when the Region
-      is created. This Frame describes the coordinate system in which the
-      Region is defined, and is referred to as the {\tt{"}}encapsulated Frame{\tt{"}} below.
-      Constructors will also typically required one or more positions to be
-      supplied which define the location and extent of the region. These
-      positions must be supplied within the encapsulated Frame.
-
-      The Region class inherits from the Frame class, and so a Region can be
-      supplied where-ever a Frame is expected. In these cases, supplying a
-      Region is equivalent to supplying a reference to its encapsulated Frame.
-      Thus all the methods of the Frame class can be used on the Region class.
-      For instance, the
-      \htmlref{AST\_FORMAT}{AST_FORMAT} routine
-      may be used on a Region to format an axis value.
-
-      In addition, since Frame inherits from \htmlref{Mapping}{Mapping}, a Region is also a sort
-      of Mapping. Transforming positions by supplying a Region to one of the
-      AST\_TRAN$<$X$>$ routines
-      is the way to determine if a given position is inside or outside the
-      Region. When used as a Mapping, most classes of Frame are equivalent to
-      a \htmlref{UnitMap}{UnitMap}. However, the Region class modifies this behaviour so that a
-      Region acts like a UnitMap only for input positions which are within the
-      area represented by the Region. Input positions which are outside the
-      area produce bad output values (i.e. the output values are equal to
-      AST\_\_BAD). This behaviour is the same for both the forward and the
-      inverse transformation. In this sense the {\tt{"}}inverse transformation{\tt{"}}
-      is not a true inverse of the forward transformation, since applying
-      the forward transformation to a point outside the Region, and then
-      applying the inverse transformation results, in a set of AST\_\_BAD axis
-      values rather than the original axis values. If required, the
-      \htmlref{AST\_REMOVEREGIONS}{AST_REMOVEREGIONS}
-      function can be used to remove the {\tt{"}}masking{\tt{"}} effect of any Regions
-      contained within a compound Mapping or \htmlref{FrameSet}{FrameSet}. It does this by
-      replacing each Region with a UnitMap or equivalent Frame (depending
-      on the context in which the Region is used).
-
-      If the coordinate system represented by the Region is changed (by
-      changing the values of one or more of the attribute which the Region
-      inherits from its encapsulated Frame), the area represented by
-      the Region is mapped into the new coordinate system. For instance, let's
-      say a Circle (a subclass of Region) is created, a \htmlref{SkyFrame}{SkyFrame} being
-      supplied to the constructor so that the Circle describes a circular
-      area on the sky in FK4 equatorial coordinates. Since Region inherits
-      from Frame, the Circle will have a \htmlref{System}{System} attribute and this attribute
-      will be set to {\tt{"}}FK4{\tt{"}}. If the System attribute of the Region is then
-      changed from FK4 to FK5, the circular area represented by the Region
-      will automatically be mapped from the FK4 system into the FK5 system.
-      In general, changing the coordinate system in this way may result in the
-      region changing shape - for instance, a circle may change into an
-      ellipse if the transformation from the old to the new coordinate system
-      is linear but with different scales on each axis. Thus the specific
-      class of a Region cannot be used as a guarantee of the shape in any
-      particular coordinate system. If the
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY} routine
-      is used on a Region, it will endeavour to return a new Region of
-      a sub-class which accurately describes the shape in the current
-      coordinate system of the Region (but this may not always be possible).
-
-      It is possible to negate an existing Region so that it represents all
-      areas of the encapsulated Frame except for the area specified when
-      the Region was created.
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Region class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      Region also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Adaptive}{Adaptive}: Should the area adapt to changes in the coordinate system?
-
-         \sstitem
-         \htmlref{Negated}{Negated}: Has the original region been negated?
-
-         \sstitem
-         \htmlref{Closed}{Closed}: Should the boundary be considered to be inside the region?
-
-         \sstitem
-         \htmlref{MeshSize}{MeshSize}: Number of points used to create a mesh covering the Region
-
-         \sstitem
-         \htmlref{FillFactor}{FillFactor}: Fraction of the Region which is of interest
-
-         \sstitem
-         \htmlref{Bounded}{Bounded}: Is the Region bounded?
-
-      }
-      Every Region also inherits any further attributes that belong
-      to the encapsulated Frame, regardless of that Frame's class. (For
-      example, the \htmlref{Equinox}{Equinox} attribute, defined by the SkyFrame class, is
-      inherited by any Region which represents a SkyFrame.)
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Frames, the
-      following routines may also be applied to all Regions:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_GETREGIONBOUNDS}{AST_GETREGIONBOUNDS}: Get the bounds of a Region
-
-         \sstitem
-         \htmlref{AST\_GETREGIONFRAME}{AST_GETREGIONFRAME}: Get a copy of the Frame represent by a Region
-
-         \sstitem
-         \htmlref{AST\_GETREGIONPOINTS}{AST_GETREGIONPOINTS}: Get the positions that define a Region
-
-         \sstitem
-         \htmlref{AST\_GETUNC}{AST_GETUNC}: Obtain uncertainty information from a Region
-
-         \sstitem
-         \htmlref{AST\_MAPREGION}{AST_MAPREGION}: Transform a Region into a new coordinate system
-
-         \sstitem
-         \htmlref{AST\_NEGATE}{AST_NEGATE}: Toggle the value of the Negated attribute
-
-         \sstitem
-         \htmlref{AST\_OVERLAP}{AST_OVERLAP}: Determines the nature of the overlap between two Regions
-
-         \sstitem
-         \htmlref{AST\_MASK$<$X$>$}{AST_MASKX}: Mask a region of a data grid
-
-         \sstitem
-         \htmlref{AST\_SETUNC}{AST_SETUNC}: Associate a new uncertainty with a Region
-
-         \sstitem
-         \htmlref{AST\_SHOWMESH}{AST_SHOWMESH}: Display a mesh of points on the surface of a Region
-      }
-   }
-}
-\sstroutine{
-   SelectorMap\sstlabel{SelectorMap}
-}{
-   A Mapping that locates positions within one of a set of alternate
-   Regions
-}{
-   \sstdescription{
-      A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
-      a given input position.
-
-      A SelectorMap encapsulates a number of Regions that all have the same
-      number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
-      inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
-      spanned by one of the encapsulated Region. All SelectorMaps have only
-      a single output. SelectorMaps do not define an inverse transformation.
-
-      For each input position, the forward transformation of a SelectorMap
-      searches through the encapsulated Regions (in the order supplied when
-      the SelectorMap was created) until a Region is found which contains
-      the input position. The index associated with this Region is
-      returned as the SelectorMap output value (the index value is the
-      position of the Region within the list of Regions supplied when the
-      SelectorMap was created, starting at 1 for the first Region). If an
-      input position is not contained within any Region, a value of zero is
-      returned by the forward transformation.
-
-      If a compound Mapping contains a SelectorMap in series with its own
-      inverse, the combination of the two adjacent SelectorMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
-      In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SELECTORMAP}{AST_SELECTORMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SelectorMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SelectorMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SelectorMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   ShiftMap\sstlabel{ShiftMap}
-}{
-   Add a constant value to each coordinate
-}{
-   \sstdescription{
-      A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
-      specified constant value.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SHIFTMAP}{AST_SHIFTMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The ShiftMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The ShiftMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The ShiftMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   SkyAxis\sstlabel{SkyAxis}
-}{
-   Store celestial axis information
-}{
-   \sstdescription{
-      The SkyAxis class is used to store information associated with a
-      particular axis of a \htmlref{SkyFrame}{SkyFrame}. It is used internally by the AST
-      library and has no constructor function. You should encounter it
-      only within textual output (e.g. from \htmlref{AST\_WRITE}{AST_WRITE}).
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SkyAxis class inherits from the \htmlref{Axis}{Axis} class.
-   }
-}
-\sstroutine{
-   SkyFrame\sstlabel{SkyFrame}
-}{
-   Celestial coordinate system description
-}{
-   \sstdescription{
-      A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
-      celestial longitude/latitude coordinate systems. The particular
-      celestial coordinate system to be represented is specified by
-      setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
-      is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
-      an \htmlref{Epoch}{Epoch}.
-
-      For each of the supported celestial coordinate systems, a SkyFrame
-      can apply an optional shift of origin to create a coordinate system
-      representing offsets within the celestial coordinate system from some
-      specified reference point. This offset coordinate system can also be
-      rotated to define new longitude and latitude axes. See attributes
-      SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
-      All the coordinate values used by a SkyFrame are in
-      radians. These may be formatted in more conventional ways for
-      display by using \htmlref{AST\_FORMAT}{AST_FORMAT}.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SKYFRAME}{AST_SKYFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SkyFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      SkyFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignOffset}{AlignOffset}: Align SkyFrames using the offset coordinate system?
-
-         \sstitem
-         \htmlref{AsTime(axis)}{AsTimeaxis}: Format celestial coordinates as times?
-
-         \sstitem
-         \htmlref{Equinox}{Equinox}: Epoch of the mean equinox
-
-         \sstitem
-         \htmlref{LatAxis}{LatAxis}: Index of the latitude axis
-
-         \sstitem
-         \htmlref{LonAxis}{LonAxis}: Index of the longitude axis
-
-         \sstitem
-         \htmlref{NegLon}{NegLon}: Display longitude values in the range [-pi,pi]?
-
-         \sstitem
-         \htmlref{Projection}{Projection}: Sky projection description.
-
-         \sstitem
-         SkyRef: Position defining location of the offset coordinate system
-
-         \sstitem
-         \htmlref{SkyRefIs}{SkyRefIs}: Selects the nature of the offset coordinate system
-
-         \sstitem
-         SkyRefP: Position defining orientation of the offset coordinate system
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SkyFrame class does not define any new routines beyond those
-      which are applicable to all Frames.
-   }
-}
-\sstroutine{
-   SlaMap\sstlabel{SlaMap}
-}{
-   Sequence of celestial coordinate conversions
-}{
-   \sstdescription{
-      An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard celestial
-      (longitude, latitude) coordinate systems.
-
-      When an SlaMap is first created, it simply performs a unit
-      (null) Mapping on a pair of coordinates. Using the \htmlref{AST\_SLAADD}{AST_SLAADD}
-      routine, a series of coordinate conversion steps may then be
-      added, selected from those provided by the SLALIB Positional
-      Astronomy Library (Starlink User Note SUN/67). This allows
-      multi-step conversions between a variety of celestial coordinate
-      systems to be assembled out of the building blocks provided by
-      SLALIB.
-
-      For details of the individual coordinate conversions available,
-      see the description of the AST\_SLAADD routine.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SLAMAP}{AST_SLAMAP} (also see AST\_SLAADD)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SlaMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SlaMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Mappings, the
-      following routine may also be applied to all SlaMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_SLAADD}{AST_SLAADD}: Add a celestial coordinate conversion to an SlaMap
-      }
-   }
-}
-\sstroutine{
-   SpecFluxFrame\sstlabel{SpecFluxFrame}
-}{
-   Compound spectrum/flux Frame
-}{
-   \sstdescription{
-      A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
-      2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
-      to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
-      spectral position and the second axis represents flux.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SPECFLUXFRAME}{AST_SPECFLUXFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SpecFluxFrame class inherits from the \htmlref{CmpFrame}{CmpFrame} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SpecFluxFrame class does not define any new attributes beyond
-      those which are applicable to all CmpFrames. However, the attributes
-      of the component Frames can be accessed as if they were attributes
-      of the SpecFluxFrame. For instance, the SpecFluxFrame will recognise
-      the {\tt{"}}\htmlref{StdOfRest}{StdOfRest}{\tt{"}} attribute and forward access requests to the component
-      SpecFrame. An axis index can optionally be appended to the end of any
-      attribute name, in which case the request to access the attribute will
-      be forwarded to the primary Frame defining the specified axis.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SpecFluxFrame class does not define any new routines beyond those
-      which are applicable to all CmpFrames.
-   }
-}
-\sstroutine{
-   SpecFrame\sstlabel{SpecFrame}
-}{
-   Spectral coordinate system description
-}{
-   \sstdescription{
-      A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions within
-      an electro-magnetic spectrum. The particular coordinate system to be
-      used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
-      default is wavelength) qualified, as necessary, by other attributes
-      such as the rest frequency, the standard of rest, the epoch of
-      observation, units, etc (see the description of the System attribute
-      for details).
-
-      By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
-      to represent offsets from a given spectral position, rather than absolute
-      spectral values.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SPECFRAME}{AST_SPECFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SpecFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      SpecFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignSpecOffset}{AlignSpecOffset}: Align SpecFrames using the offset coordinate system?
-
-         \sstitem
-         \htmlref{AlignStdOfRest}{AlignStdOfRest}: Standard of rest in which to align SpecFrames
-
-         \sstitem
-         \htmlref{RefDec}{RefDec}: Declination of the source (FK5 J2000)
-
-         \sstitem
-         \htmlref{RefRA}{RefRA}: Right ascension of the source (FK5 J2000)
-
-         \sstitem
-         \htmlref{RestFreq}{RestFreq}: Rest frequency
-
-         \sstitem
-         \htmlref{SourceSys}{SourceSys}: Source velocity spectral system
-
-         \sstitem
-         \htmlref{SourceVel}{SourceVel}: Source velocity
-
-         \sstitem
-         \htmlref{SourceVRF}{SourceVRF}: Source velocity rest frame
-
-         \sstitem
-         \htmlref{SpecOrigin}{SpecOrigin}: The zero point for SpecFrame axis values
-
-         \sstitem
-         \htmlref{StdOfRest}{StdOfRest}: Standard of rest
-
-      }
-      Several of the Frame attributes inherited by the SpecFrame class
-      refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
-      \htmlref{Label(axis)}{Labelaxis}, etc). Since a SpecFrame is strictly one-dimensional,
-      it allows these attributes to be specified without an axis index.
-      So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Frames, the
-      following routines may also be applied to all SpecFrames:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_SETREFPOS}{AST_SETREFPOS}: Set reference position in any celestial system
-
-         \sstitem
-         \htmlref{AST\_GETREFPOS}{AST_GETREFPOS}: Get reference position in any celestial system
-      }
-   }
-}
-\sstroutine{
-   SpecMap\sstlabel{SpecMap}
-}{
-   Sequence of spectral coordinate conversions
-}{
-   \sstdescription{
-      A SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard spectral
-      coordinate systems.
-
-      When an SpecMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{AST\_SPECADD}{AST_SPECADD}
-      routine, a series of coordinate conversion steps may then be
-      added. This allows multi-step conversions between a variety of
-      spectral coordinate systems to be assembled out of a set of building
-      blocks.
-
-      Conversions are available to transform between standards of rest.
-      Such conversions need to know the source position as an RA and DEC.
-      This information can be supplied in the form of parameters for
-      the relevant conversions, in which case the SpecMap is 1-dimensional,
-      simply transforming the spectral axis values. This means that the
-      same source position will always be used by the SpecMap. However, this
-      may not be appropriate for an accurate description of a 3-D spectral
-      cube, where changes of spatial position can produce significant
-      changes in the Doppler shift introduced when transforming between
-      standards of rest. For this situation, a 3-dimensional SpecMap can
-      be created in which axes 2 and 3 correspond to the source RA and DEC
-      The SpecMap simply copies values for axes 2 and 3 from input to
-      output), but modifies axis 1 values (the spectral axis) appropriately.
-
-      For details of the individual coordinate conversions available,
-      see the description of the AST\_SPECADD routine.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SPECMAP}{AST_SPECMAP} (also see AST\_SPECADD)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SpecMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SpecMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Mappings, the
-      following routine may also be applied to all SpecMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_SPECADD}{AST_SPECADD}: Add a spectral coordinate conversion to an SpecMap
-      }
-   }
-}
-\sstroutine{
-   SphMap\sstlabel{SphMap}
-}{
-   Map 3-d Cartesian to 2-d spherical coordinates
-}{
-   \sstdescription{
-      A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
-      3-dimensional Cartesian coordinate system into a 2-dimensional
-      spherical coordinate system (longitude and latitude on a unit
-      sphere centred at the origin). It works by regarding the input
-      coordinates as position vectors and finding their intersection
-      with the sphere surface. The inverse transformation always
-      produces points which are a unit distance from the origin
-      (i.e. unit vectors).
-   }
-   \sstconstructor{
-      \htmlref{AST\_SPHMAP}{AST_SPHMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SphMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      SphMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{UnitRadius}{UnitRadius}: SphMap input vectors lie on a unit sphere?
-
-         \sstitem
-         \htmlref{PolarLong}{PolarLong}: The longitude value to assign to either pole
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SphMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Stc\sstlabel{Stc}
-}{
-   Represents an instance of the IVOA STC class
-}{
-   \sstdescription{
-      The Stc class is an implementation of the IVOA STC class which forms
-      part of the IVOA Space-Time Coordinate Metadata system. See:
-
-      http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
-      The Stc class does not have a constructor function of its own, as it
-      is simply a container class for a family of specialised sub-classes
-      including \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcSearchLocation}{StcSearchLocation}
-      and \htmlref{StcObsDataLocation}{StcObsDataLocation}.
-   }
-   \sstconstructor{
-      AST\_STC
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Stc class inherits from the \htmlref{Region}{Region} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Regions, every
-      Stc also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{RegionClass}{RegionClass}: The class name of the encapsulated Region.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Regions, the
-      following routines may also be applied to all Stc's:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_GETSTCREGION}{AST_GETSTCREGION}: Get a pointer to the encapsulated Region
-
-         \sstitem
-         \htmlref{AST\_GETSTCCOORD}{AST_GETSTCCOORD}: Get information about an AstroCoords element
-
-         \sstitem
-         \htmlref{AST\_GETSTCNCOORD}{AST_GETSTCNCOORD}: Returns the number of AstroCoords elements in an Stc
-      }
-   }
-}
-\sstroutine{
-   StcCatalogEntryLocation\sstlabel{StcCatalogEntryLocation}
-}{
-   Correspond to the IVOA STCCatalogEntryLocation class
-}{
-   \sstdescription{
-      The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstconstructor{
-      \htmlref{AST\_STCCATALOGENTRYLOCATION}{AST_STCCATALOGENTRYLOCATION}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcCatalogEntryLocation class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcCatalogEntryLocation class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcCatalogEntryLocation class does not define any new routines beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcObsDataLocation\sstlabel{StcObsDataLocation}
-}{
-   Correspond to the IVOA ObsDataLocation class
-}{
-   \sstdescription{
-      The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coordinate space occupied by a particular observational dataset.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
-      An STC ObsDataLocation element specifies the extent of the
-      observation within a specified coordinate system, and also specifies
-      the observatory location within a second coordinate system.
-
-      The AST StcObsDataLocation class inherits from Stc, and therefore
-      an StcObsDataLocation can be used directly as an Stc. When used
-      in this way, the StcObsDataLocation describes the location of the
-      observation (not the observatory).
-
-      Eventually, this class will have a method for returning an Stc
-      describing the observatory location. However, AST currently does not
-      include any classes of \htmlref{Frame}{Frame} for describing terrestrial or solar
-      system positions. Therefore, the provision for returning observatory
-      location as an Stc is not yet available. However, for terrestrial
-      observations, the position of the observatory can still be recorded
-      using the \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} attributes of the Frame encapsulated
-      within the Stc representing the observation location (this assumes
-      the observatory is located at sea level).
-   }
-   \sstconstructor{
-      \htmlref{AST\_STCOBSDATALOCATION}{AST_STCOBSDATALOCATION}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcObsDataLocation class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcObsDataLocation class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcObsDataLocation class does not define any new routines beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcResourceProfile\sstlabel{StcResourceProfile}
-}{
-   Correspond to the IVOA STCResourceProfile class
-}{
-   \sstdescription{
-      The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstconstructor{
-      \htmlref{AST\_STCRESOURCEPROFILE}{AST_STCRESOURCEPROFILE}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcResourceProfile class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcResourceProfile class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcResourceProfile class does not define any new routines beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcSearchLocation\sstlabel{StcSearchLocation}
-}{
-   Correspond to the IVOA SearchLocation class
-}{
-   \sstdescription{
-      The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of a query.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstconstructor{
-      \htmlref{AST\_STCSEARCHLOCATION}{AST_STCSEARCHLOCATION}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcSearchLocation class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcSearchLocation class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcSearchLocation class does not define any new routines beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcsChan\sstlabel{StcsChan}
-}{
-   I/O Channel using STC-S to represent Objects
-}{
-   \sstdescription{
-      A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
-      I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
-      \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
-      STC-S description of that Object, and reading from an StcsChan will
-      create a new Object from its STC-S description.
-
-      When an STC-S description is read using
-      \htmlref{AST\_READ}{AST_READ},
-      the returned AST Object may be 1) a \htmlref{PointList}{PointList} describing the STC
-      AstroCoords (i.e. a single point of interest within the coordinate frame
-      described by the STC-S description), or 2) a \htmlref{Region}{Region} describing the STC
-      AstrCoordsArea (i.e. an area or volume of interest within the coordinate
-      frame described by the STC-S description), or 3) a \htmlref{KeyMap}{KeyMap}
-      containing the uninterpreted property values read form the STC-S
-      description, or 4) a KeyMap containing any combination of the first
-      3 options. The attributes \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
-      control which of the above is returned by
-      AST\_READ.
-
-      When an STC-S description is created from an AST Object using
-      AST\_WRITE,
-      the AST Object must be either a Region or a KeyMap. If it is a
-      Region, it is assumed to define the AstroCoordsArea or (if the
-      Region is a single point) the AstroCoords to write to the STC-S
-      description. If the Object is a KeyMap, it may contain an entry
-      with the key {\tt{"}}AREA{\tt{"}}, holding a Region to be used to define the
-      AstroCoordsArea. It may also contain an entry with the key {\tt{"}}COORDS{\tt{"}},
-      holding a Region (a PointList) to be used to create the
-      AstroCoords. It may also contain an entry with key {\tt{"}}PROPS{\tt{"}}, holding
-      a KeyMap that contains uninterpreted property values to be used as
-      defaults for any STC-S properties that are not determined by the
-      other supplied Regions. In addition, a KeyMap supplied to
-      AST\_WRITE
-      may itself hold the default STC-S properties (rather than defaults
-      being held in a secondary KeyMap, stored as the {\tt{"}}PROPS{\tt{"}} entry in the
-      supplied KeyMap).
-
-      The
-      AST\_READ and AST\_WRITE
-      functions work together so that any Object returned by
-      AST\_READ can immediately be re-written using AST\_WRITE.
-
-      Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
-      by reading and writing the resulting text. These routines
-      should perform any conversions needed between external character
-      encodings and the internal ASCII encoding. If no such routines
-      are supplied, a Channel will read from standard input and write
-      to standard output.
-
-      Support for STC-S is currently based on the IVOA document {\tt{"}}STC-S:
-      Space-Time Coordinate (STC) Metadata Linear String Implementation{\tt{"}},
-      version 1.30 (dated 5th December 2007), available at
-      http://www.ivoa.net/Documents/latest/STC-S.html. Note, this
-      document is a recommednation only and does not constitute an accepted
-      IVOA standard.
-
-      The full text of version 1.30 is supported by the StcsChan class,
-      with the following exceptions and provisos:
-
-      \sstitemlist{
-
-         \sstitem
-         When reading an STC-S phrase, case is ignored except when reading
-         units strings.
-
-         \sstitem
-         There is no support for multiple intervals specified within a
-         TimeInterval, PositionInterval, SpectralInterval or RedshiftInterval.
-
-         \sstitem
-         If the ET timescale is specified, TT is used instead.
-
-         \sstitem
-         If the TEB timescale is specified, TDB is used instead.
-
-         \sstitem
-         The LOCAL timescale is not supported.
-
-         \sstitem
-         The AST \htmlref{TimeFrame}{TimeFrame} and \htmlref{SkyFrame}{SkyFrame} classes do not currently allow a
-         reference position to be specified. Consequently, any $<$refpos$>$
-         specified within the Time or Space sub-phrase of an STC-S document
-         is ignored.
-
-         \sstitem
-         The Convex identifier for the space sub-phrase is not supported.
-
-         \sstitem
-         The GEO\_C and GEO\_D space frames are not supported.
-
-         \sstitem
-         The UNITSPHERE and SPHER3 space flavours are not supported.
-
-         \sstitem
-         If any Error values are supplied in a space sub-phrase, then the
-         number of values supplied should equal the number of spatial axes,
-         and the values are assumed to specify an error box (i.e. error
-         circles, ellipses, etc, are not supported).
-
-         \sstitem
-         The spectral and redshift sub-phrases do not support the
-         following $<$refpos$>$ values: LOCAL\_GROUP\_CENTER, UNKNOWNRefPos,
-         EMBARYCENTER, MOON, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS,
-         NEPTUNE, PLUTO.
-
-         \sstitem
-         Error values are supported but error ranges are not.
-
-         \sstitem
-         Resolution, PixSize and Size values are ignored.
-
-         \sstitem
-         Space velocity sub-phrases are ignored.
-      }
-   }
-   \sstconstructor{
-      \htmlref{AST\_STCSCHAN}{AST_STCSCHAN}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcsChan class inherits from the Channel class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Channels, every
-      StcsChan also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{StcsArea}{StcsArea}: Return the CoordinateArea component after reading an STC-S?
-
-         \sstitem
-         \htmlref{StcsCoords}{StcsCoords}: Return the Coordinates component after reading an STC-S?
-
-         \sstitem
-         \htmlref{StcsIndent}{StcsIndent}: Controls output of indentation and line feeds
-
-         \sstitem
-         \htmlref{StcsLength}{StcsLength}: Controls output buffer length
-
-         \sstitem
-         \htmlref{StcsProps}{StcsProps}: Return the STC-S properties after reading an STC-S?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcsChan class does not define any new routines beyond those
-      which are applicable to all Channels.
-   }
-}
-\sstroutine{
-   SwitchMap\sstlabel{SwitchMap}
-}{
-   A Mapping that encapsulates a set of alternate Mappings
-}{
-   \sstdescription{
-      A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
-      Mappings, each of which is used to transform positions within a
-      particular region of the input or output coordinate system of the
-      SwitchMap.
-
-      A SwitchMap can encapsulate any number of Mappings, but they must
-      all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
-      same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
-      inherits these same values for its Nin and Nout attributes. Each of
-      these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
-      referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
-      positions between the input and output coordinate space of the entire
-      SwitchMap, but only one Mapping will be used to transform any given
-      position. The selection of the appropriate route Mapping to use with
-      any given input position is made by another Mapping, called the
-      {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
-      Mappings in addition to its route Mappings; one for use with the
-      SwitchMap's forward transformation (called the {\tt{"}}forward selector
-      Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
-      (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
-      must have the same number of inputs as the route Mappings, but
-      should have only one output. Likewise, the inverse selector Mapping
-      must have the same number of outputs as the route Mappings, but
-      should have only one input.
-
-      When the SwitchMap is used to transform a position in the forward
-      direction (from input to output), each supplied input position is
-      first transformed by the forward transformation of the forward selector
-      Mapping. This produces a single output value for each input position
-      referred to as the selector value. The nearest integer to the selector
-      value is found, and is used to index the array of route Mappings (the
-      first supplied route Mapping has index 1, the second route Mapping has
-      index 2, etc). If the nearest integer to the selector value is less
-      than 1 or greater than the number of route Mappings, then the SwitchMap
-      output position is set to a value of AST\_\_BAD on every axis. Otherwise,
-      the forward transformation of the selected route Mapping is used to
-      transform the supplied input position to produce the SwitchMap output
-      position.
-
-      When the SwitchMap is used to transform a position in the inverse
-      direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
-      is first transformed by the inverse transformation of the inverse
-      selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
-      position. Again, the nearest integer to the selector value is found,
-      and is used to index the array of route Mappings. If this selector
-      index value is within the bounds of the array of route Mappings, then
-      the inverse transformation of the selected route Mapping is used to
-      transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
-      {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
-      of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
-      set to a value of AST\_\_BAD on every axis.
-
-      In practice, appropriate selector Mappings should be chosen to
-      associate a different route Mapping with each region of coordinate
-      space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
-      appropriate for this purpose.
-
-      If a compound Mapping contains a SwitchMap in series with its own
-      inverse, the combination of the two adjacent SwitchMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-   }
-   \sstconstructor{
-      \htmlref{AST\_SWITCHMAP}{AST_SWITCHMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SwitchMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SwitchMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SwitchMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   TimeFrame\sstlabel{TimeFrame}
-}{
-   Time coordinate system description
-}{
-   \sstdescription{
-      A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions in
-      time.
-
-      A TimeFrame represents a moment in time as either an Modified Julian
-      Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-      as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
-      specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
-      representing time offsets from the specified zero point.
-
-      Even though JD and MJD are defined as being in units of days, the
-      TimeFrame class allows other units to be used (via the Unit attribute)
-      on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
-      hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
-      can be described in units other than the usual years. Besselian epoch
-      are always represented in units of (tropical) years.
-
-      The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
-      is, the physical process used to define the rate of flow of time).
-      MJD, JD and Julian epoch can be used to represent a time in any
-      supported time scale. However, Besselian epoch may only be used with the
-      {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
-      includes universal time and siderial time. Strictly, these represent
-      angles rather than time scales, but are included in the list since
-      they are in common use and are often thought of as time scales.
-
-      When a time value is formatted it can be formated either as a simple
-      floating point value, or as a Gregorian date (see the Format
-      attribute).
-   }
-   \sstconstructor{
-      \htmlref{AST\_TIMEFRAME}{AST_TIMEFRAME}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The TimeFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      TimeFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignTimeScale}{AlignTimeScale}: Time scale in which to align TimeFrames
-
-         \sstitem
-         \htmlref{LTOffset}{LTOffset}: The offset of Local Time from UTC, in hours.
-
-         \sstitem
-         \htmlref{TimeOrigin}{TimeOrigin}: The zero point for TimeFrame axis values
-
-         \sstitem
-         \htmlref{TimeScale}{TimeScale}: The timescale used by the TimeFrame
-
-      }
-      Several of the Frame attributes inherited by the TimeFrame class
-      refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
-      \htmlref{Label(axis)}{Labelaxis}, etc). Since a TimeFrame is strictly one-dimensional,
-      it allows these attributes to be specified without an axis index.
-      So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Frames, the
-      following routines may also be applied to all TimeFrames:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_CURRENTTIME}{AST_CURRENTTIME}: Return the current system time
-      }
-   }
-}
-\sstroutine{
-   TimeMap\sstlabel{TimeMap}
-}{
-   Sequence of time coordinate conversions
-}{
-   \sstdescription{
-      A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
-      used to represent a sequence of conversions between standard time
-      coordinate systems.
-
-      When a TimeMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{AST\_TIMEADD}{AST_TIMEADD}
-      routine, a series of coordinate conversion steps may then be
-      added. This allows multi-step conversions between a variety of
-      time coordinate systems to be assembled out of a set of building
-      blocks.
-
-      For details of the individual coordinate conversions available,
-      see the description of the AST\_TIMEADD routine.
-   }
-   \sstconstructor{
-      \htmlref{AST\_TIMEMAP}{AST_TIMEMAP} (also see AST\_TIMEADD)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The TimeMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The TimeMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those routines applicable to all Mappings, the
-      following routine may also be applied to all TimeMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AST\_TIMEADD}{AST_TIMEADD}: Add a time coordinate conversion to an TimeMap
-      }
-   }
-}
-\sstroutine{
-   TranMap\sstlabel{TranMap}
-}{
-   Mapping with specified forward and inverse transformations
-}{
-   \sstdescription{
-      A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
-      a supplied Mapping with the inverse transformation of another
-      supplied Mapping, ignoring the un-used transformation in each
-      Mapping (indeed the un-used transformation need not exist).
-
-      When the forward transformation of the TranMap is referred to, the
-      transformation actually used is the forward transformation of the
-      first Mapping supplied when the TranMap was constructed. Likewise,
-      when the inverse transformation of the TranMap is referred to, the
-      transformation actually used is the inverse transformation of the
-      second Mapping supplied when the TranMap was constructed.
-   }
-   \sstconstructor{
-      \htmlref{AST\_TRANMAP}{AST_TRANMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The TranMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The TranMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The TranMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   UnitMap\sstlabel{UnitMap}
-}{
-   Unit (null) Mapping
-}{
-   \sstdescription{
-      A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
-      coordinates supplied to it. They are simply copied. This can be
-      useful if a Mapping is required (e.g. to pass to another
-      routine) but you do not want it to have any effect.
-      The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of a UnitMap are always equal and
-      are specified when it is created.
-   }
-   \sstconstructor{
-      \htmlref{AST\_UNITMAP}{AST_UNITMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The UnitMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The UnitMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The UnitMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   WcsMap\sstlabel{WcsMap}
-}{
-   Implement a FITS-WCS sky projection
-}{
-   \sstdescription{
-      This class is used to represent sky coordinate projections as
-      described in the FITS world coordinate system (FITS-WCS) paper II
-      {\tt{"}}Representations of Celestial Coordinates in FITS{\tt{"}} by M. Calabretta
-      and E.W. Griesen. This paper defines a set of functions, or sky
-      projections, which transform longitude-latitude pairs representing
-      spherical celestial coordinates into corresponding pairs of Cartesian
-      coordinates (and vice versa).
-
-      A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
-      sky projections and applies them to a specified pair of coordinates.
-      All the projections in the FITS-WCS paper are supported, plus the now
-      deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
-      is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
-      the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
-      plane{\tt{"}} coordinates (also called {\tt{"}}intermediate world coordinates{\tt{"}}.
-      These coordinates may, optionally, be embedded in a space with more
-      than two dimensions, the remaining coordinates being copied unchanged.
-      Note, however, that for consistency with other AST facilities, a
-      WcsMap handles coordinates that represent angles in radians (rather
-      than the degrees used by FITS-WCS).
-
-      The type of FITS-WCS projection to be used and the coordinates
-      (axes) to which it applies are specified when a WcsMap is first
-      created. The projection type may subsequently be determined
-      using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
-      may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
-      Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
-      associated with each axis. These specify the precise form of the
-      projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
-      the integer axis index (starting at 1), and m is an integer
-      {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
-      parameters required by each projection, and their meanings, are
-      dependent upon the projection type (most projections either do not
-      use any projection parameters, or use parameters 1 and 2 associated
-      with the latitude axis). Before creating a WcsMap you should consult
-      the FITS-WCS paper for details of which projection parameters are
-      required, and which have defaults. When creating the WcsMap, you must
-      explicitly set values for all those required projection parameters
-      which do not have defaults defined in this paper.
-   }
-   \sstconstructor{
-      \htmlref{AST\_WCSMAP}{AST_WCSMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The WcsMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      WcsMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{NatLat}{NatLat}: Native latitude of the reference point of a FITS-WCS projection
-
-         \sstitem
-         \htmlref{NatLon}{NatLon}: Native longitude of the reference point of a FITS-WCS projection
-
-         \sstitem
-         \htmlref{PVi\_m}{PVi_m}: FITS-WCS projection parameters
-
-         \sstitem
-         PVMax: Maximum number of FITS-WCS projection parameters
-
-         \sstitem
-         \htmlref{WcsAxis(lonlat)}{WcsAxislonlat}: FITS-WCS projection axes
-
-         \sstitem
-         \htmlref{WcsType}{WcsType}: FITS-WCS projection type
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The WcsMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   WinMap\sstlabel{WinMap}
-}{
-   Map one window on to another by scaling and shifting each axis
-}{
-   \sstdescription{
-      A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
-      window in one coordinate system into a similar window in another
-      coordinate system by scaling and shifting each axis (the window
-      edges being parallel to the coordinate axes).
-
-      A WinMap is specified by giving the coordinates of two opposite
-      corners (A and B) of the window in both the input and output
-      coordinate systems.
-   }
-   \sstconstructor{
-      \htmlref{AST\_WINMAP}{AST_WINMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The WinMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The WinMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The WinMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   XmlChan\sstlabel{XmlChan}
-}{
-   I/O Channel using XML to represent Objects
-}{
-   \sstdescription{
-      A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
-      operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
-      \htmlref{AST\_WRITE}{AST_WRITE}) will, if the Object is suitable, generate an
-      XML description of that Object, and reading from an XmlChan will
-      create a new Object from its XML description.
-
-      Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} routines which connect it to an external data store
-      by reading and writing the resulting XML text. These routines
-      should perform any conversions needed between external character
-      encodings and the internal ASCII encoding. If no such routines
-      are supplied, a Channel will read from standard input and write
-      to standard output.
-   }
-   \sstconstructor{
-      \htmlref{AST\_XMLCHAN}{AST_XMLCHAN}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The XmlChan class inherits from the Channel class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Channels, every
-      XmlChan also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{XmlFormat}{XmlFormat}: \htmlref{System}{System} for formatting Objects as XML
-
-         \sstitem
-         \htmlref{XmlIndent}{XmlIndent}: Controls output of indentation and line feeds
-
-         \sstitem
-         \htmlref{XmlLength}{XmlLength}: Controls output buffer length
-
-         \sstitem
-         \htmlref{XmlPrefix}{XmlPrefix}: The namespace prefix to use when writing
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The XmlChan class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   ZoomMap\sstlabel{ZoomMap}
-}{
-   Zoom coordinates about the origin
-}{
-   \sstdescription{
-      The ZoomMap class implements a \htmlref{Mapping}{Mapping} which performs a {\tt{"}}zoom{\tt{"}}
-      transformation by multiplying all coordinate values by the same
-      scale factor (the inverse transformation is performed by
-      dividing by this scale factor). The number of coordinate values
-      representing each point is unchanged.
-   }
-   \sstconstructor{
-      \htmlref{AST\_ZOOMMAP}{AST_ZOOMMAP}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The ZoomMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      ZoomMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Zoom}{Zoom}: ZoomMap scale factor
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The ZoomMap class does not define any new routines beyond those
-      which are applicable to all Mappings.
-   }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:commanddescriptions}UNIX Command Descriptions}
-The commands described here are provided for use from the UNIX shell
-to assist with developing software which uses AST. To use these
-commands, you should ensure that the directory
-``/star/bin''\footnote{Or the equivalent directory if AST is installed
-in a non-standard location.} is on your PATH.
-\small
-\sstroutine{
-   ast\_link\sstlabel{ast_link}
-}{
-   Link a program with the AST library
-}{
-   \sstdescription{
-      This command should be used when building programs which use the AST
-      library, in order to generate the correct arguments to allow the compiler
-      to link your program. The arguments generated are written to standard
-      output but may be substituted into the compiler command line in the
-      standard UNIX way using backward quotes (see below).
-
-      By default, it is assumed that you are building a stand-alone program
-      which does not produce graphical output. However, switches are provided
-      for linking other types of program.
-   }
-   \sstinvocation{
-      f77 program.f -L/star/lib `ast\_link [switches]` -o program
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         f77 display.f -L/star/lib `ast\_link -pgplot` -o display
-      }{
-         Compiles and links a Fortran program called ``display'' which uses
-         the standard version of PGPLOT for graphical output.
-      }
-      \sstexamplesubsection{
-         f77 plotit.f -L. -L/star/lib `ast\_link -grf` -lgrf -o plotit
-      }{
-         Compiles and links a Fortran program ``plotit''. The ``-grf''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by the current version of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-      \sstexamplesubsection{
-         f77 plotit.f -L. -L/star/lib `ast\_link -grf\_v2.0` -lgrf -o plotit
-      }{
-         Compiles and links a Fortran program ``plotit''. The ``-grf\_v2.0''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by version 2.0 of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-   }
-   \sstdiytopic{
-      Switches
-   }{
-      The following switches may optionally be given to this command to
-      modify its behaviour:
-
-      \sstitemlist{
-
-         \sstitem
-         ``-csla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-fsla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-ems'': Requests that the program be linked so that error messages
-         produced by the AST library are delivered via the Starlink EMS (Error
-         Message Service) library (Starlink \htmlref{System}{System} Note SSN/4). By default,
-         error messages are simply written to standard error.
-
-         \sstitem
-         ``-drama'': Requests that the program be linked so that error messages
-         produced by the AST library are delivered via the DRAMA Ers (Error
-         Reporting Service) library. By default, error messages are simply
-         written to standard error.
-
-         \sstitem
-         ``-grf'': Requests that no arguments be generated to specify which
-         2D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new graphics system yourself and wish to provide your own arguments for
-         linking with it. This switch differs from the other ``grf'' switches in
-         that it assumes that your graphics module implements the complete
-         interface required by the current version of AST. If future versions of
-         AST introduce new functions to the graphics interface, this switch will
-         cause ``unresolved symbol'' errors to occur during linking, warning you
-         that you need to implement new functions in your graphics module. To
-         avoid such errors, you can use one of the other, version-specific,
-         switches in place of the ``-grf'' switch, but these will cause run-time
-         errors to be reported if any AST function is invoked which requires
-         facilities not in the implemented interface.
-
-         \sstitem
-         ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-         It indicates that you want to link with your own graphics module
-         which implements the 2D graphics interface required by V2.0 of AST.
-
-         \sstitem
-         ``-grf\_v3.2'': Indicates that you want to link with your own
-         graphics module which implements the 2D graphics interface required by
-         V3.2 of AST.
-
-         \sstitem
-         ``-myerr'': Requests that no arguments be generated to specify how
-         error messages produced by the AST library should be delivered. You
-         should use this option only if you have implemented an interface to a
-         new error delivery system yourself and wish to provide your own
-         arguments for linking with it.
-
-         \sstitem
-         ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-         but is retained in order to allow applications to be linked with a
-         graphics module which implements the 2D interface used by AST V2.0. It
-         is equivalent to the ``-grf\_v2.0'' switch.
-
-         \sstitem
-         ``-pgp'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no 2D graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via
-         the standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no 2D graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-
-         \sstitem
-         ``-grf3d'': Requests that no arguments be generated to specify which
-         3D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new 3D graphics system yourself and wish to provide your own arguments
-         for linking with it.
-
-         \sstitem
-         ``-pgp3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no 3D graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via
-         the standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no 3D graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-      }
-   }
-   \sstdiytopic{
-      SLALIB
-   }{
-      The AST distribution includes a cut down subset of the C version of
-      the SLALIB library written by Pat Wallace. This subset contains only
-      the functions needed by the AST library. It is built as part of the
-      process of building AST and is distributed under GPL (and is thus
-      compatible with the AST license). Previous version of this script
-      allowed AST applications to be linked against external SLALIB
-      libraries (either Fortran or C) rather than the internal version.
-      The current version of this script does not provide this option,
-      and always uses the internal SLALIB library. However, for backward
-      compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
-      (previously used for selecting which version of SLALIB to use) to be
-      specified, but they will be ignored.
-   }
-}
-\sstroutine{
-   ast\_link\_adam\sstlabel{ast_link_adam}
-}{
-   Link an ADAM program with the AST library
-}{
-   \sstdescription{
-      This command should only be used when building Starlink ADAM programs
-      which use the AST library, in order to generate the correct arguments
-      to allow the ADAM ``alink'' command to link the program. The arguments
-      generated are written to standard output but may be substituted into
-      the ``alink'' command line in the standard UNIX way using backward
-      quotes (see below).
-
-      By default, it is assumed that you are building an ADAM program which
-      does not produce graphical output. However, switches are provided for
-      linking other types of program. This command should not be used when
-      building stand-alone (non-ADAM) programs. Use the ``\htmlref{ast\_link}{ast_link}'' command
-      instead.
-   }
-   \sstinvocation{
-      alink program.f -L/star/lib `ast\_link\_adam [switches]`
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         alink display.f -L/star/lib `ast\_link\_adam -pgplot`
-      }{
-         Compiles and links an ADAM Fortran program called ``display'' which
-         uses the standard version of PGPLOT for graphical output.
-      }
-      \sstexamplesubsection{
-         alink plotit.f -L. -L/star/lib `ast\_link\_adam -grf` -lgrf
-      }{
-         Compiles and links an ADAM Fortran program ``plotit''. The ``-grf''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by the current version of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-      \sstexamplesubsection{
-         alink plotit.f -L. -L/star/lib `ast\_link\_adam -grf\_v2.0` -lgrf
-      }{
-         Compiles and links an ADAM Fortran program ``plotit''. The ``-grf\_v2.0''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by version 2.0 of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-   }
-   \sstdiytopic{
-      Switches
-   }{
-      The following switches may optionally be given to this command to
-      modify its behaviour:
-
-      \sstitemlist{
-
-         \sstitem
-         ``-csla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-fsla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-grf'': Requests that no arguments be generated to specify which
-         2D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new graphics system yourself and wish to provide your own arguments for
-         linking with it. This switch differs from the other ``grf'' switches in
-         that it assumes that your graphics module implements the complete
-         interface required by the current version of AST. If future versions of
-         AST introduce new functions to the graphics interface, this switch will
-         cause ``unresolved symbol'' errors to occur during linking, warning you
-         that you need to implement new functions in your graphics module. To
-         avoid such errors, you can use one of the other, version-specific,
-         switches in place of the ``-grf'' switch, but these will cause run-time
-         errors to be reported if any AST function is invoked which requires
-         facilities not in the implemented interface.
-
-         \sstitem
-         ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-         It indicates that you want to link with your own graphics module which
-         implements the 2D graphics interface required by V2.0 of AST.
-
-         \sstitem
-         ``-grf\_v3.2'': Indicates that you want to link with your own graphics
-         module which implements the 2D graphics interface required by V3.2 of AST.
-
-         \sstitem
-         ``-myerr'': Requests that no arguments be generated to specify how
-         error messages produced by the AST library should be delivered. You
-         should use this option only if you have implemented an interface to a
-         new error delivery system yourself and wish to provide your own
-         arguments for linking with it. By default, error messages are delivered
-         in the standard ADAM way via the EMS Error Message Service (Starlink
-         \htmlref{System}{System} Note SSN/4).
-
-         \sstitem
-         ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-         but is retained in order to allow applications to be linked with a
-         graphics module which implements the interface used by AST V2.0. It is
-         equivalent to the ``-grf\_v2.0'' switch.
-
-         \sstitem
-         ``-pgp'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via the
-         standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-
-         \sstitem
-         ``-grf3d'': Requests that no arguments be generated to specify which
-         3D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new 3D graphics system yourself and wish to provide your own arguments
-         for linking with it.
-
-         \sstitem
-         ``-pgp3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no 3D graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via
-         the standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no 3D graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-      }
-   }
-   \sstdiytopic{
-      SLALIB
-   }{
-      The AST distribution includes a cut down subset of the C version of
-      the SLALIB library written by Pat Wallace. This subset contains only
-      the functions needed by the AST library. It is built as part of the
-      process of building AST and is distributed under GPL (and is thus
-      compatible with the AST license). Previous version of this script
-      allowed AST applications to be linked against external SLALIB
-      libraries (either Fortran or C) rather than the internal version.
-      The current version of this script does not provide this option,
-      and always uses the internal SLALIB library. However, for backward
-      compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
-      (previously used for selecting which version of SLALIB to use) to be
-      specified, but they will be ignored.
-   }
-}
-\normalsize
-
-\newpage
-\section{\xlabel{FitsWcsCoverage}\label{ss:fitswcscoverage}FITS-WCS Coverage}
-
-This appendix gives details of the \htmlref{FitsChan}{FitsChan} class
-implementation of the conventions described in the FITS-WCS papers
-available at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. These conventions are
-used only if the \htmlref{Encoding}{Encoding} attribute of the FitsChan
-has the value ``FITS-WCS'' (whether set explicitly or defaulted). It
-should always be possible for a \htmlref{FrameSet}{FrameSet} to be read
-(using the 
-\htmlref{AST\_READ}{AST_READ}
-function) from a FitsChan containing a header which conforms to these 
-conventions. However, only those FrameSets which are compatible with the
-FITS-WCS model can be \emph{written} to a FitsChan using the
-\htmlref{AST\_WRITE}{AST_WRITE}
-function. For instance, if the current \htmlref{Frame}{Frame} of a
-FrameSet is re-mapped using, say, an arbitrary \htmlref{MathMap}{MathMap}
-then the FrameSet will no longer be compatible with the FITS-WCS model,
-and so will not be written out successfully to a FitsChan.
-
-The following sub-sections describe the details of the implementation of
-each of the first four FITS-WCS papers. Here, the term ``pixel axes'' is
-used to refer to the FITS pixel coordinates (i.e. the centre of the 
-first image pixel has a value 1.0 on each pixel axis); the term ``IWC 
-axes'' is used to refer to the axes of the Intermediate World Coordinate 
-system; and the term ``WCS axes'' is used to refer to the axes of the final 
-physical coordinate system described by the CTYPE\emph{i} keywords.
-
-\subsection{Paper I - General Linear Coordinates}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, these conventions are used if the CTYPE\emph{i} keyword
-values within the FitsChan do not conform to the conventions described in
-later papers, in which case the axes are assumed to be linear. When
-writing a FrameSet to a FitsChan, these conventions are used for axes
-which are described by a simple \htmlref{Frame}{Frame} (\emph{i.e.} not a 
-\htmlref{SkyFrame}{SkyFrame}, \htmlref{SpecFrame}{SpecFrame}, \emph{etc.}).
-
-Table \ref{tab:fitspaper1} describes the use made by AST of each keyword
-defined by FITS-WCS paper I.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}} 
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{WCSAXES\emph{a}}{Ignored.}{Set to the number of axes in the WCS
-Frame - only written if different to NAXIS.}
-
-\fitskey{CRVAL\emph{ia}}{Used to create the pixel to WCS
-\htmlref{Mapping}{Mapping}.}{Always written (see ``Choice of Reference
-Point'' below).}
-
-\fitskey{CRPIX\emph{ja}}{Used to create the pixel to WCS Mapping.}{Always
-written (see ``Choice of Reference Point'' below).}
-
-\fitskey{CDELT\emph{ia}}{Used to create the pixel to WCS Mapping.}{Only
-written if the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan is 
-set to zero.}
-
-\fitskey{CROTA\emph{i}}{Used to create the pixel to WCS Mapping.}{Only
-written in FITS-AIPS and FITS-AIPS++ encodings.}
-
-\fitskey{CTYPE\emph{ia}}{Used to choose the class and attributes of the
-WCS Frame, and to create the pixel to WCS Mapping (note, ``STOKES'' and
-``COMPLEX'' axes are treated as unknown linear axes).}{Always written
-(see ``Use and Choice of CTYPE keywords'' below).}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attributes
-of the WCS Frame.}{Only written if the Units attribute of the WCS Frame
-has been set explicitly. If so, the Units value for each axis is used as
-the CUNIT value.}
-
-\fitskey{PC\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-zero.}
-
-\fitskey{CD\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-a non-zero value.}
-
-\fitskey{PV\emph{i\_ma}}{Ignored for linear axes.}{Not written if the axes
-are linear.}
-
-\fitskey{PS\emph{i\_ma}}{Ignored.}{Not used.}
-
-\fitskey{WCSNAME\emph{a}}{Used to set the \htmlref{Domain}{Domain} attribute
-of the WCS Frame.}{Only written if the Domain attribute of the WCS Frame
-has been set explicitly. If so, the Domain value is used as the WCSNAME
-value.}
-
-\fitskey{CRDER\emph{ia}}{Ignored.}{Not used.}
-
-\fitskey{CSYER\emph{ia}}{Ignored.}{Not used.}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper I keywords}
-\label{tab:fitspaper1}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a simple Frame to a \htmlref{FitsChan}{FitsChan},
-success depends on the \htmlref{Mapping}{Mapping} from pixel coordinates
-(the base Frame in the FrameSet) to the WCS Frame being linear. The write
-operation will fail if this is not the case.
-
-\subsubsection{Use and Choice of CTYPE\emph{i} keywords}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} the CTYPE\emph{i} values in the FitsChan are used to set the
-Symbol attributes of the corresponding WCS \htmlref{Frame}{Frame}. The Label attributes of the WCS Frame are set from 
-the CNAME\emph{i} keywords, if present in the header. Otherwise they are set
-from the CTYPE\emph{i} comments strings in the header, so long as each
-axis has a unique non-blank comment. Otherwise, the Label attributes are
-set to the CTYPE\emph{i} values. The above procedure is over-ridden if
-the axis types conform to the conventions described in paper II or III,
-as described below.
-
-When writing a FrameSet to a FitsChan, each CTYPE\emph{i} value is set to
-the value of the Symbol attribute of the corresponding axis in the Frame
-being written. If a value has been set explicitly for the axis Label
-attribute, it is used as the axis comment (except that any existing
-comments in the FitsChan take precedence if the keyword value has not
-changed). The above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which
-case the CTYPE\emph{i} value is derived from the \htmlref{System}{System}
-attribute of the Frame and the nature of the pixel to WCS \htmlref{Mapping}{Mapping}
-according to the conventions of papers II and III, as described below.
-
-\subsubsection{Choice of Reference Point}
-When writing a \htmlref{FrameSet}{FrameSet} to a
-\htmlref{FitsChan}{FitsChan}, the pixel coordinates of the 
-reference point for linear axes (i.e. the CRPIX\emph{j} values) are 
-chosen as follows:
-
-\begin{itemize}
-\item If the FrameSet is being written to a FitsChan which previously
-contained a set of axis descriptions with the same identifying letter, 
-then the previous CRVAL\emph{j}values are converted into the coordinate system 
-of the \htmlref{Frame}{Frame} being written (if possible). These values are then
-transformed into the pixel Frame, and the closest integer pixel values
-are used as the CRPIX keywords.
-\item If the above step could not be performed for any reason, the
-central pixel is used as the reference point. This requires the image 
-dimensions to be present in the FitsChan in the form of a set of
-NAXIS\emph{j} keyword values.
-\item If both the above two steps failed for any axis, then the pixel
-reference position is set to a value of 1.0 on the pixel axis.
-\end{itemize}
-
-The pixel to WCS \htmlref{Mapping}{Mapping} is then used to find the corresponding
-CRVAL\emph{j}values.
-
-Again, the above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which 
-case the conventions of papers II and III are used as described below.
-
-
-\subsubsection{Choice of Axis Ordering}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan}, WCS axis $i$ in the current
-\htmlref{Frame}{Frame} of the
-resulting FrameSet corresponds to axis $i$ in the FITS header.
-
-When writing a FrameSet to a FitsChan, the axis ordering for the FITS
-header is chosen to make the CD\emph{i\_j} or PC\emph{i\_j} matrix
-predominately diagonal. This means that the axis numbering in the FITS
-header will not necessarily be the same as that in the AST Frame.
-
-\subsubsection{Alternate Axis Descriptions}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} which contains alternate axis descriptions,
-each complete set of axis descriptions results in a single \htmlref{Frame}{Frame} being added 
-to the final FrameSet, connected via an appropriate 
-\htmlref{Mapping}{Mapping} to the base pixel Frame. The \htmlref{Ident}{Ident} attribute of the Frame is set to hold the single alphabetical 
-character which is used to identify the set of axis descriptions within 
-the FITS header (a single space is used for the primary axis descriptions).
-
-When writing a FrameSet to a FitsChan, it is assumed that the base Frame
-represents pixel coordinates, and the current Frame represents the
-primary axis descriptions. If there are any other Frames present in the
-FrameSet, an attempt is made to create a complete set of ``alternate''
-set of keywords describing each additional Frame. The first character in
-the Ident attribute of the Frame is used as the single character
-descriptor to be appended to the keyword, with the proviso that a given
-character can only be used once. If a second Frame is found with an Ident
-attribute which has already been used, its Ident attribute is ignored and
-the next free character is used instead. Note, failure to write a set of
-alternate axis descriptions does not result in failure of the entire
-write operation: the primary axis descriptions are still written,
-together with any other alternate axis descriptions which can be produced
-successfully.
-
-\subsection{Paper II - Celestial Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet}
-from a \htmlref{FitsChan}{FitsChan} containing appropriate CTYPE\emph{i} 
-values, and when writing a FrameSet in which the WCS \htmlref{Frame}{Frame}
-is a \htmlref{SkyFrame}{SkyFrame}.
-
-Table \ref{tab:fitspaper2} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper II. 
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}} 
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper II are supported (note, ``CUBEFACE'' axes are treated as
-unknown linear axes). In addition, "-HPX" (HEALPix) is supported.}{Determined by the \htmlref{System}{System} attribute 
-of the SkyFrame and the \htmlref{WcsType}{WcsType} attribute of the
-\htmlref{WcsMap}{WcsMap} within the FrameSet.}
-
-\fitskey{CUNIT\emph{ia}}{Ignored (assumed to be 'degrees').}{Not written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS \htmlref{Mapping}{Mapping} (values
-are stored as attributes of a WcsMap within this Mapping).}{Values are
-obtained from the WcsMap in the pixel to WCS Mapping.}
-
-\fitskey{LONPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a \htmlref{PVi\_m}{PVi_m} attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{LATPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a PV attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{RADESYS\emph{a}}{Used to set the attributes of the SkyFrame. All
-values supported except that ecliptic coordinates are currently always
-assumed to be FK5.}{Always written. Determined by the System attribute of
-the SkyFrame.}
-
-\fitskey{EQUINOX\emph{a}}{Used to set the \htmlref{Equinox}{Equinox} attribute 
-of the SkyFrame.}{Written if relevant. Determined by the Equinox attribute of
-the SkyFrame.}
-
-\fitskey{EPOCH}{Used to set the Equinox attribute of the SkyFrame.}{Only
-written if using FITS-AIPS and FITS-AIPS++ encodings. Determined by the Equinox attribute
-of the SkyFrame.}
-
-\fitskey{MJD-OBS}{Used to set the \htmlref{Epoch}{Epoch} attribute of the 
-SkyFrame. DATE-OBS is used if MJD-OBS is not present. A default value based on
-RADESYS and EQUINOX is used if used if DATE-OBS is not present
-either.}{Determined by the Epoch attribute of the SkyFrame. Only written
-if this attribute has been set to an explicit value (in which case
-DATE-OBS is also written).}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper II keywords}
-\label{tab:fitspaper2}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a \htmlref{SkyFrame}{SkyFrame} to a
-\htmlref{FitsChan}{FitsChan}, success depends on the following conditions 
-being met:
-
-\begin{enumerate}
-\item The \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame 
-in the FrameSet) to the WCS SkyFrame includes a \htmlref{WcsMap}{WcsMap}.
-\item The Mapping prior to the WcsMap (\emph{i.e.} from pixel to IWC) is linear. 
-\item The Mapping after the WcsMap (\emph{i.e.} from native spherical to
-celestial coordinates) is a spherical rotation for the
-celestial axes, and linear for any other axes.
-\end{enumerate}
-
-If any of the above conditions do not hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Choice of LONPOLE/LATPOLE}
-When writing a \htmlref{FrameSet}{FrameSet} to a \htmlref{FitsChan}{FitsChan}, 
-the choice of LONPOLE and LATPOLE values is determined as follows:
-
-\begin{enumerate}
-
-\item If the projection represented by the \htmlref{WcsMap}{WcsMap} is 
-azimuthal, then any values set for attributes ``PV\emph{i}\_3'' 
-and ``PV\emph{i}\_4'' (where ``\emph{i}'' is the index of the longitude axis) 
-within the WcsMap are used as the LONPOLE and LATPOLE values. Reading a 
-FrameSet from a FITS-WCS header
-results in the original LONPOLE and LATPOLE values being stored within a
-WcsMap within the FrameSet. Consequently, if a FrameSet is read from a
-FITS-WCS header and it is subsequently written out to a new FITS-WCS
-header, the original LONPOLE and LATPOLE values will usually be used in
-the new header (the exception being if the WcsMap has been explicitly
-modified before being written out again). Any extra rotation of the sky
-is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this is
-possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is azimuthal but no
-values have been set for the ``PV\emph{i}\_3'' and ``PV\emph{i}\_4''
-attributes within the WcsMap, then the default LONPOLE and LATPOLE values
-are used. This results in no LONPOLE or LATPOLE keywords being stored in
-the header since default values are never stored. Any extra rotation of
-the sky is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this
-is possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is not azimuthal,
-then the values of LONPOLE and LATPOLE are found by transforming the
-coordinates of the celestial north pole (\emph{i.e} longitude zero,
-latitude $+\pi/2$) into native spherical coordinates using the inverse of
-the \htmlref{Mapping}{Mapping} which follows the WcsMap.
-
-\end{enumerate}
-
-\subsubsection{User Defined Fiducial Points}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, projection parameters
-PV\emph{i}\_0, PV\emph{i}\_1 and PV\emph{i}\_2 (for longitude axis
-``\emph{i}'') are used to indicate a user-defined fiducial point as
-described in section 2.5 of paper II. This results in a shift of IWC
-origin being applied \emph{before} the \htmlref{WcsMap}{WcsMap} which converts 
-IWC into
-native spherical coordinates. The values of these projection parameters,
-if supplied, are stored as the corresponding \htmlref{PVi\_m}{PVi_m} attributes 
-of the WcsMap.
-
-When writing a FrameSet to a FitsChan, the PV attributes of the WcsMap
-determine the native coordinates of the fiducial point (the fixed
-defaults for each projection described in paper II are used if the PV
-attributes of the WcsMap have not been assigned a value). The
-corresponding celestial coordinates are used as the CRVAL\emph{i}
-keywords and the corresponding pixel coordinates as the CRPIX\emph{j}
-keywords.
-
-\subsubsection{Common Non-Standard Features}
-A collection of common non-standard features are supported when reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, in addition 
-to those embodied within the
-available encodings of the FitsChan class. These are translated into the
-equivalent standard features before being used to create a FrameSet.
-Note, the reverse operation is never performed: it is not possible to
-produce non-standard features when writing a FrameSet to a FitsChan
-(other than those embodied in the available encodings of the FitsChan
-class). The supported non-standard features include:
-
-\begin{itemize}
-\item EQUINOX keywords with string values equal to a date preceded
-by the letter B or J (\emph{e.g.} ``B1995.0''). 
-
-\item EQUINOX or EPOCH keywords with value zero  (these are converted to 
-B1950). 
-
-\item The IRAF ``ZPX'' projection is represented by a
-\htmlref{WcsMap}{WcsMap} with type of
-AST\_\_ZPN. \htmlref{Projection}{Projection} parameter values are read from any WAT\emph{i\_nnn}
-keywords, and corresponding \htmlref{PVi\_m}{PVi_m} attributes are set in the 
-WcsMap. The WAT\emph{i\_nnn} keywords may specify corrections to the basic 
-ZPN projection by including ``lngcor'' or ``latcor'' terms. There is no 
-direct equivalent in FITS-WCS to these terms and so they are ignored. If 
-these correction terms are found, ASTWARN keywords are added to the FitsChan 
-containing a warning message (but only if the \htmlref{Warnings}{Warnings}
-attribute of the FitsChan is set appropriately). 
-
-\item The IRAF ``TNX'' projection is represented by a WcsMap with type of
-AST\_\_TPN (a distorted TAN projection retained within the WcsMap class
-from an early draft of the FITS-WCS paper II). Projection parameter values
-are read from any WAT\emph{i\_nnn} keywords, and corresponding PV
-attributes are set in the WcsMap. If the TNX projection cannot be
-converted exactly into an AST\_\_TPN projection, ASTWARN keywords are
-added to the FitsChan containing a warning message (but only if the
-Warnings attribute of the FitsChan is set appropriately).
-
-\item ``QV'' parameters for TAN projections (as produced by 
-\htmladdnormallink{AUTOASTROM}{http://www.astro.gla.ac.uk/users/norman/star/autoastrom/} 
-are renamed to the equivalent ``PV'' parameters.
-
-\end{itemize}
-
-\subsection{Paper III - Spectral Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet} 
-from a \htmlref{FitsChan}{FitsChan} which includes appropriate 
-CTYPE\emph{i} values, and when writing a FrameSet in which
-the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame}.
-
-Table \ref{tab:fitspaper3} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper III. 
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}} 
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper III are supported, except for the ``-TAB''
-algorithm (the ``-LOG'' algorithm may also be applied to non-spectral linear 
-axes).}{Determined by the \htmlref{System}{System} attribute of the 
-SpecFrame and the nature of the pixel to SpecFrame
-\htmlref{Mapping}{Mapping}.}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attribute of 
-the SpecFrame (note, SpecFrames always have an ``active'' Units attribute
-(see astSetActiveUnit).}{Always written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS Mapping (values
-are stored as attributes of a \htmlref{GrismMap}{GrismMap}).}
-{Set from the attributes of the GrismMap, if present, and if set explicitly.}
-
-\fitskey{SPECSYS\emph{a}}{Used to set the \htmlref{StdOfRest}{StdOfRest}
-attribute of the SpecFrame (all systems are supported except CMBDIPOL).}
-{Set from the StdOfRest attribute of the SpecFrame, but only if it has been 
-set explicitly.}
-
-\fitskey{SSYSOBS\emph{a}}{Ignored.}{Never written.}
-
-\fitskey{OBSGEO-X/Y/Z}{Used to set the \htmlref{ObsLon}{ObsLon} and
-\htmlref{ObsLat}{ObsLat} attributes of the Frame (the observers
-height above sea level is ignored).}{Set from the ObsLon and ObsLat 
-attributes of the Frame, if they have been set explicitly (it is
-assumed that the observer is at sea level).}
-
-\fitskey{MJD-AVG}{Used to set the \htmlref{Epoch}{Epoch} attributes of
-the SpecFrame.}{Set from the Epoch attribute of the SpecFrame, if it has
-been set explicitly.}
-
-\fitskey{SSYSSRC\emph{a}}{Used to set the \htmlref{SourceVRF}{SourceVRF} attribute of the
-SpecFrame 
-(all systems are supported except CMBDIPOL).} {Set from the SourceVRF 
-attribute of the SpecFrame.}
-
-\fitskey{ZSOURCE\emph{a}}{Used to set the \htmlref{SourceVel}{SourceVel}
-attribute of the SpecFrame (the SourceVRF attribute
-is first set to the system indicated by the SSYSSRC keyword, and the 
-ZSOURCE value is then converted to an apparent radial velocity and stored
-as the SourceVel attribute).}
-{Set from the SourceVel attribute of
-the SpecFrame, if it has been set explicitly (the SourceVel value is
-first converted from apparent radial velocity to redshift).}
-
-\fitskey{VELOSYS\emph{a}}{Ignored.}{Set from the attributes of the
-SpecFrame that define the standard of rest and the observers position.}
-
-\fitskey{RESTFRQ\emph{a}}{Used to set the \htmlref{RestFreq}{RestFreq}
-attribute of the SpecFrame.}{Set from the RestFreq attribute of the
-SpecFrame, but only if the System attribute is not set to 
-``WAVE'', ``VOPT'', ``ZOPT'' or ``AWAV'', and only if RestFreq has been set 
-explicitly.}
-
-\fitskey{RESTWAV\emph{a}}{Used to set the RestFreq
-attribute of the SpecFrame (after conversion from wavelength to frequency).}
-{Set from the RestFreq attribute of the SpecFrame (after conversion), but only if the 
-System attribute is set to ``WAVE'', ``VOPT'', ``ZOPT'' or 
-``AWAV'', and only if RestFreq has been set explicitly.}
-
-\fitskey{CNAME\emph{ia}}{Used to set the Label attributes of 
-the WCS Frame keywords.}{Set from the Label attributes of the WCS Frame,
-if they have been set explicitly.}
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper III keywords}
-\label{tab:fitspaper3}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame} to a 
-\htmlref{FitsChan}{FitsChan}, the write operation is successful only if
-the \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame 
-in the FrameSet) to the SpecFrame satisfies one of the following conditions:
-
-\begin{enumerate}
-\item It is linear.
-\item It is logarithmic.
-\item It is linear if the SpecFrame were to be re-mapped into one of the
-other spectral systems supported by FITS-WCS paper III.
-\item It contains a \htmlref{GrismMap}{GrismMap}, and the Mapping before the GrismMap (from
-pixel coordinates to grism parameter) is linear, and the Mapping after the 
-GrismMap is either null or represents a change of spectral system from wavelength (air or
-vacuum) to one of the supported spectral systems.
-\end{enumerate}
-
-If none of the above conditions hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Common Non-Standard Features}
-The following non-standard features are supported when reading spectral
-axes from a \htmlref{FitsChan}{FitsChan}:
-
-\begin{itemize}
-\item Conversion of ``-WAV'', ``-FRQ'' and ``-VEL'' algorithm codes
-(specified in early drafts of paper III) to the corresponding 
-``-X2P'' form.
-\item Conversion of ``RESTFREQ'' to ``RESTFRQ''
-\end{itemize}
-
-\subsection{Paper IV - Coordinate Distortions}
-
-This paper proposes that an additional 4 character code be appended to
-the end of the CTYPE\emph{i} keyword to specify the nature of any
-distortion away from the basic algorithm described by the first 8
-characters of the CTYPE\emph{i} value. Currently AST ignores all such
-codes when reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} (except for the ``-SIP'' code
-defined by the SIRTF project - see below). This means that a FrameSet can
-still be read from such headers, but the \htmlref{Mapping}{Mapping} which 
-gives the WCS
-position associated with a given pixel position will reflect only the
-basic algorithm and will not include the effects of the distortion.
-
-If such a FrameSet is then written out to a FitsChan, the resulting 
-CTYPE\emph{i} keywords will include no distortion code.
-
-\subsubsection{The ``-SIP'' distortion code}
-
-The SIRTF project
-(\htmladdnormallink{http://sirtf.caltech.edu/SSC/}{http://sirtf.caltech.edu/SSC/})
-has developed its own system for encoding 2-dimensional image distortion
-within a FITS header, based on the proposals of paper IV. A description
-of this system is available in \htmladdnormallink
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}. In this
-system, the presence of distortion is indicated by appending the
-distortion code ``-SIP'' to the CTYPE\emph{i} keyword values for the
-celestial axes. The distortion takes the form of a polynomial function
-which is applied to the pixel coordinates, after subtraction of the
-CRPIX\emph{j} values.
-
-This system is a strictly 2 dimensional system. When reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} which 
-includes the ``-SIP'' distortion code, AST assumes that it
-is only applied to the first 2 WCS axes in a FITS header (i.e.
-CTYPE1 and CTYPE2). If the ``-SIP'' distortion code is attached to other
-axes, it will be ignored. The distortion itself is represented by a
-\htmlref{PolyMap}{PolyMap} within the resulting FrameSet.
-
-If a FrameSet is read from a FitsChan which includes ``-SIP''
-distortion, and an attempt is then made to write this FrameSet out to a
-FitsChan, the write operation will fail unless the distortion is
-insignificant (\emph{i.e.} is so small that the tests for linearity built
-into AST are passed). In this case, no distortion code will be appended to 
-the resulting CTYPE\emph{i} keyword values.
-
-\newpage
-\section{\xlabel{changes_and_new_features}\label{ss:changes}Changes and New Features}
-
-\subsection{Changes Introduced in V1.1}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.0 and V1.1 (not the most recent
-version):
-
-\begin{enumerate}
-
-\item A new ``How To\ldots'' section (\secref{ss:howto}) has been
-added to this document. It contains simple recipies for performing
-commonly-required operations using AST.
-
-\item A new \htmlref{AST\_UNFORMAT}{AST_UNFORMAT} function has been provided to read formatted
-coordinate values for the axes of a \htmlref{Frame}{Frame}
-(\secref{ss:unformattingaxisvalues}). In essence, this function is the
-inverse of \htmlref{AST\_FORMAT}{AST_FORMAT}. It may be used to decode user-supplied
-formatted values representing coordinates, turning them into numerical
-values for processing.  Celestial coordinates may also be read using
-this function (\secref{ss:unformattingskyaxisvalues}) and free-format
-input is supported.
-
-\item The Format attribute string used by a \htmlref{SkyFrame}{SkyFrame} when formatting
-celestial coordinate values now allows the degrees/hours field to be
-omitted, so that celestial coordinates may be given in ({\em{e.g.}})
-arc-minutes and/or arc-seconds
-(\secref{ss:formattingskyaxisvalues}). As a result, the degrees/hours
-field is no longer included by default.  A new ``t'' format specifier
-has been introduced (see the Format attribute) to allow minutes and/or
-seconds of time to be specified if required.
-
-\item A new routine \htmlref{AST\_MAPBOX}{AST_MAPBOX} has been introduced. This allows you
-to find the extent of a ``bounding box'' which just encloses another
-box after it has been transformed by a \htmlref{Mapping}{Mapping}. A typical use might be
-to calculate the size which an image would have if it were transformed
-by the Mapping.
-
-\item A new class of \htmlref{Object}{Object}, the \htmlref{IntraMap}{IntraMap}, has been introduced
-(\secref{ss:intramaps}). This is a specialised form of Mapping which
-encapsulates a privately-defined coordinate transformation routine
-({\em{e.g.}}\ written in Fortran) so that it may be used like any
-other AST Mapping. This allows you to create Mappings that perform any
-conceivable coordinate transformation.
-
-\item The internal integrity of a \htmlref{FrameSet}{FrameSet} is now automatically
-preserved whenever changes are made to any attributes which affect the
-current Frame (either by setting or clearing their values). This is
-accomplished by appropriately re-mapping the current Frame to account
-for any change to the coordinate system which it represents
-(\secref{ss:framesetintegrity}).
-
-\item The internal structure of a FrameSet is now automatically tidied
-to eliminate redundant nodes whenever any of its Frames is removed or
-re-mapped. Automatic simplification of any compound Mappings which
-result may also occur. The effect of this change is to prevent the
-accumulation of unnecessary structure in FrameSets which are
-repeatedly modified.
-
-\item Some improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
-\item The textual representation used for some Objects
-({\em{i.e.}}\ when they are written to a \htmlref{Channel}{Channel}) has changed
-slightly, but remains compatible with earlier versions of AST.
-
-
-\item A problem has been fixed which could result when using \htmlref{AST\_READ}{AST_READ}
-to read FITS headers in which the CDELT value is zero. Previously,
-this could produce a Mapping whose inverse transformation was not
-defined and this could unnecessarily restrict the use to which it
-could be put. The problem has been overcome by supplying a suitable
-small CDELT value for FITS axes which have only a single pixel.
-
-\item A bug has been fixed which could occasionally cause a \htmlref{MatrixMap}{MatrixMap}
-to be used with the wrong \htmlref{Invert}{Invert} attribute value when it forms part of
-a compound Mapping which is being simplified using AST\_SIMPLIFY.
-
-\item A bug has been fixed which could cause the AST\_\_BAD parameter
-to have an incorrect value on some platforms.
-
-\item A problem has been fixed which could prevent tick marks being
-drawn on a coordinate axis close to a singularity in the coordinate
-system.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.2}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.1 and V1.2 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new routine, \htmlref{AST\_POLYCURVE}{AST_POLYCURVE}, has been introduced to allow more
-efficient plotting of multiple geodesic curves
-(\secref{ss:plottinggeodesics}).
-
-\item A new set of functions, \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, has been
-introduced to perform resampling of gridded data such as images
-({\em{i.e.}}\ re-gridding) under the control of a geometrical
-transformation specified by a \htmlref{Mapping}{Mapping}.
-
-\item The command-line options ``$-$pgp'' and ``$-$pgplot'', which
-were previously synonymous when used with the ``\htmlref{ast\_link}{ast_link}'' and
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' commands, are no longer synonymous. The option
-``$-$pgp'' now causes linking with the Starlink version of PGPLOT
-(which uses GKS to generate its output), while ``$-$pgplot'' links
-with the standard (or ``native'') version of PGPLOT.
-
-\item The routine \htmlref{AST\_MAPBOX}{AST_MAPBOX} has been changed to execute more
-quickly, although this has been achieved at the cost of some loss of
-robustness when used with difficult Mappings.
-
-\item A new value of ``FITS-IRAF'' has been introduced for the
-\htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan}. This new encoding provides an
-interim solution to the problem of storing coordinate system
-information in FITS headers, until the proposed new FITS-WCS standard
-becomes stable.
-
-\item When a \htmlref{FrameSet}{FrameSet} is created from a set of FITS header cards (by
-reading from a FitsChan using a ``foreign'' encoding), the base \htmlref{Frame}{Frame}
-of the resulting FrameSet now has its \htmlref{Domain}{Domain} attribute set to
-``GRID''. This reflects the fact that this Frame represents FITS data
-grid coordinates (equivalent to FITS pixel coordinates---see
-\secref{ss:domainconventions}). Previously, this Domain value was not
-set.
-
-\item \htmlref{AST\_FINDFITS}{AST_FINDFITS} now ignores trailing spaces in its keyword template.
-
-\item \htmlref{AST\_PUTFITS}{AST_PUTFITS} now recognises ``D'' and ``d'' as valid exponent
-characters in floating point numbers.
-
-\item The FitsChan class is now more tolerant of common minor
-violations of the FITS standard.
-
-\item The FitsChan class now incorporates an improved test for the
-linearity of Mappings, allowing more reliable conversion of AST data
-into FITS (using ``foreign'' FITS encodings).
-
-\item Some further improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}.
-
-\item A new \htmlref{UnitRadius}{UnitRadius} attribute has been added to the \htmlref{SphMap}{SphMap}
-class. This allows improved simplification of compound Mappings
-(CmpMaps) involving SphMaps and typically improves performance when
-handling FITS world coordinate information.
-
-\item A \htmlref{MatrixMap}{MatrixMap} no longer propagates input coordinate values of
-AST\_\_BAD automatically to all output coordinates. If certain output
-coordinates do not depend on the affected input coordinate(s) because
-the relevant matrix elements are zero, then they may now remain valid.
-
-\item A minor bug has been corrected which could cause certain
-projections which involve half the celestial sphere to produce valid
-coordinates for the other (unprojected) half of the sphere as well.
-
-\item A bug has been fixed which could occasionally cause \htmlref{AST\_CONVERT}{AST_CONVERT}
-to think that conversion between a \htmlref{CmpFrame}{CmpFrame} and another Frame was
-possible when, in fact, it wasn't.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.3}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.2 and V1.3 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new set of functions, \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX}, has been introduced to
-provide	efficient resampling of gridded data, such as spectra and
-images, under the control of a geometrical transformation specified by
-a \htmlref{Mapping}{Mapping}. A variety of sub-pixel interpolation schemes are supported.
-
-\item A new class, \htmlref{PcdMap}{PcdMap}, has been introduced. This is a specialised
-form of Mapping which implements 2-dimensional pincushion or barrel
-distortion.
-
-\item A bug has been fixed which could cause a \htmlref{FitsChan}{FitsChan} to produce too
-many digits when formatting floating point values for inclusion in a
-FITS header if the numerical value was in the range -0.00099999\ldots
-to -0.0001.
-
-\item A bug has been fixed which could cause a FitsChan to lose the
-comment associated with a string value in a FITS header.
-
-\item A FitsChan now reports an error if it reads a FITS header which
-identifies a non-standard sky projection (previously, this was
-accepted without error and a Cartesian projection used instead).
-
-\item A bug has been fixed which could prevent conversion between the
-coordinate systems represented by two CmpFrames. This could only occur
-if the CmpFrames contained a relatively large number of nested Frames.
-
-%\item A bug has been fixed which could cause a program to crash if
-%FrameSets were nested inside each other (for example, if one \htmlref{FrameSet}{FrameSet}
-%had another FrameSet added to it for use as a \htmlref{Frame}{Frame} or Mapping). The
-%problem could only occur if the nested structure was loaded from a data
-%c+
-%file (using astRead).
-%c-
-%f+
-%file (using \htmlref{AST\_READ}{AST_READ}).
-%f-
-%
-\item Further improvements have been made to the simplification of
-compound Mappings, including fixes for several bugs which could cause
-indefinite looping or unwanted error messages.
-
-\item Some memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.4}
-
-The following describes the most significant changes which have occurred
-in the AST library between versions V1.3 and V1.4 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new \htmlref{MathMap}{MathMap} class has been introduced. This is a form of
-\htmlref{Mapping}{Mapping} that allows you to define coordinate transformations in a
-flexible and transportable way using arithmetic operations and
-mathematical functions similar to those available in Fortran.
-
-\item {\bf{WARNING---INCOMPATIBLE CHANGE.}} Transformation routines
-used with the \htmlref{IntraMap}{IntraMap} class (see, for example, \htmlref{AST\_INTRAREG}{AST_INTRAREG}) now
-require a THIS pointer as their first argument. {\bf{Existing
-implementations will not continue to work correctly with this version
-of AST unless this argument is added.}} There is no need for existing
-software to make use of this pointer, but it must be present.
-
-This change has been introduced so that transformation functions can gain
-access to IntraMap attributes.
-
-\item A new \htmlref{IntraFlag}{IntraFlag} attribute has been added to the IntraMap
-class. This allows the transformation routines used by IntraMaps to
-adapt to produce the required transformation on a per-IntraMap basis
-(\secref{ss:intraflag}).
-
-\item The \htmlref{Plot}{Plot} attributes MajTickLen and MinTickLen, which control the
-length of major and minor tick marks on coordinate axes, may now be
-subscripted using an axis number. This allows tick marks of different
-lengths to be used on each axis. It also allows tick marks to be
-suppressed on one axis only by setting the length to zero.
-
-\item The value of the Plot attribute NumLab, which controls the
-plotting of numerical labels on coordinate axes, no longer has any
-effect on whether labelling of a coordinate grid is interior or
-exterior (as controlled by the \htmlref{Labelling}{Labelling} attribute).
-
-\item The \htmlref{FitsChan}{FitsChan} class now provides some support for the
-IRAF-specific ``ZPX'' sky projection, which is converted transparently
-into the equivalent FITS ``ZPN'' projection (see the description of the
-\htmlref{Encoding}{Encoding} attribute for details).
-
-\item The FitsChan class now recognises the coordinate system ``ICRS''
-(International Celestial Reference \htmlref{System}{System}) as equivalent to
-``FK5''. This is an interim measure and full support for the
-(exceedingly small) difference between ICRS and FK5 will be added at a
-future release.
-
-Note that ``ICRS'' is not yet recognised as a coordinate system by other
-classes such as \htmlref{SkyFrame}{SkyFrame}, so this change only facilitates the
-importation of foreign data.
-
-\item A bug in the FitsChan class has been fixed which could result in
-longitude values being incorrect by 180 degrees when using cylindrical
-sky projections, such as the FITS ``CAR'' projection.
-
-\item A bug in the FitsChan class has been fixed which could result in
-the FITS sky projection parameters ProjP(0) to ProjP(9) being
-incorrectly named PROJP1 to PROJP10 when written out as FITS cards.
-
-\item A bug in the FitsChan class has been fixed which could cause
-confusion between the FITS-IRAF and FITS-WCS encoding schemes if both
-a CD matrix and a PC matrix are erroneously present in a FITS header.
-
-\item Some minor memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.4 and V1.5 (not the most
-recent version):
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified to support the latest draft
-FITS WCS standard, described in the two papers ``Representation of world
-coordinates in FITS'' (E.W.\,Greisen and M.\,Calabretta, dated 30th
-November, 1999), and ``Representation of celestial coordinates in FITS''
-(M.\,Calabretta and E.W.\,Greisen, dated 24th September, 1999). These are
-available at
-\htmladdnormallink{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}
-{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}.
-
-The FITS-WCS encoding now uses these updated conventions. The main
-changes are:
-
-\begin{itemize}
-\item Rotation and scaling of pixel axes is now represented by a matrix
-of {\tt CDj\_i} keywords instead of a combination of {\tt PCjjjiii} and
-{\tt CDELTj} keywords.
-\item \htmlref{Projection}{Projection} parameters are now associated with particular axes and
-are represented by {\tt \htmlref{PVi\_m}{PVi_m}} keywords instead of the {\tt PROJPm}
-keywords.
-\item The tangent plane projection (``TAN'') can now include optional 
-polynomial correction terms.
-\item An entire set of keywords must be supplied for each set of secondary 
-axis descriptions, and each such keyword must finish with a single
-character indicating which set it belongs to. This means that keywords
-which previously occupied eight characters have been shorten to seven to
-leave room for this extra character. Thus {\tt LONGPOLE} has become {\tt
-LONPOLE} and {\tt RADECSYS} has become {\tt RADESYS}.
-\end{itemize}
-
-\item Two new encodings have been added to the FitsChan class:
-\begin{description}
-
-\item [FITS-PC] This encoding uses the conventions of the now superseded
-FITS WCS paper by E.W.\,Greisen and M.\,Calabretta which used keywords
-{\tt CDELTj} and {\tt PCjjjiii} to describe axis scaling and rotation.
-These are the conventions which were used by the FITS-WCS encoding prior
-to version 1.5 of AST. This encoding is provided to allow existing data
-which use these conventions to be read. It should not in general be used
-to create new data.
-
-\item [FITS-AIPS] This encoding is based on the conventions described in the 
-document ``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen
-(revised 9th September, 1994 and available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z). This encoding uses {\tt CROTAi} and
-{\tt CDELTi} keywords to describe axis rotation and scaling.
-
-\end{description}
-
-\item The FitsChan class now provides some support for the IRAF-specific 
-``TNX'' sky projection, which is converted transparently into the
-equivalent FITS ``TAN'' projection (see the description of the \htmlref{Encoding}{Encoding}
-attribute for details).
-
-\item FrameSets originally read from a DSS encoded FITS header can now be
-written out using the FITS-WCS encoding (a TAN projection with correction
-terms will be used) in addition to the DSS encoding. The reverse is also
-possible: FrameSets originally read from a FITS-WCS encoded FITS header
-and which use a TAN projection can now be written out using the DSS
-encoding.
-
-\item The algorithm used by the FitsChan class to verify that a \htmlref{FrameSet}{FrameSet} 
-conforms to the FITS-WCS model has been improved so that FrameSets
-including more complex mixtures of parallel and serial Mappings
-can be written out using the FITS-WCS encoding.
-
-\item The FitsChan class has been changed so that long strings included in
-the description of an \htmlref{Object}{Object} can be saved and restored without truncation
-when using the NATIVE encoding. Previously, very long \htmlref{Frame}{Frame} titles,
-mathematical expressions, {\em etc.} were truncated if they exceeded the
-capacity of a single FITS header card. They are now split over several
-header cards so that they can be restored without truncation. Note, this
-facility is only available when using NATIVE encoding.
-
-\item The FitsChan class has a new attribute called \htmlref{Warnings}{Warnings} which
-can be used to select potentially dangerous conditions under which
-warnings should be issued. These conditions include (for instance)
-unsupported features within non-standard projections, missing keywords
-for which default values will be used, {\em etc}.
-
-\item The \htmlref{WcsMap}{WcsMap} class has been changed to support the changes made to the
-FITS-WCS encoding in the FitsChan class:
-\begin{itemize}
-\item Projection parameters are now associated with a particular axis and
-are specified using a new set of attributes called PVj\_m. Here, ``j'' is 
-the index of an axis of WcsMap, and ``m'' is the index of the projection 
-parameter.
-\item The old attributes ProjP(0) to ProjP(9) are still available but are
-now deprecated in favour of the new PVj\_m attributes. They are interpreted 
-as aliases for PV(axlat)\_0 to PV(axlat)\_9, where ``axlat'' is the index of 
-the latitude axis.
-\item The GLS projection projection has been renamed as SFL, but the 
-AST\_\_GLS type has been retained as an alias for AST\_\_SFL.
-\end{itemize}
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.5 and V1.6:
-
-\begin{enumerate}
-
-
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause groups 
-of tick marks to be skipped when using very small gaps.
-
-\item A bug has been fixed in the Plot class which could cause axes to be
-labeled outside the visible window, resulting in no axes being visible.
-
-\item The FITS-WCS encoding used by the \htmlref{FitsChan}{FitsChan} class now includes the
-WCSNAME keyword. When creating a \htmlref{FrameSet}{FrameSet} from FITS headers, the values of 
-the WCSNAME keywords are now used as the \htmlref{Domain}{Domain} names for the corresponding 
-Frames in the returned FrameSet. When writing a FrameSet to a FITS header
-the Domain names of each \htmlref{Frame}{Frame} are stored in WCSNAME keywords in the
-header. 
-
-\item The FITS-WCS encoding used by the FitsChan class now attempts to
-retain the identification letter associated with multiple axis
-descriptions. When reading a FrameSet from a FITS header, the identification 
-letter is stored in the \htmlref{Ident}{Ident} attribute for each Frame. When writing a
-FrameSet to a FITS header, the identification letter is read from the
-Ident attribute of each Frame. The letter to associate with each Frame
-can be changed by assigning a new value to the Frame's Ident attribute.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the 
-FitsChan class now create a \htmlref{SkyFrame}{SkyFrame} with the \htmlref{System}{System} attribute set to 
-``Unknown'' if the CTYPE keywords in the supplied header refers to an
-unknown celestial coordinate system. Previously, a Frame was used instead
-of a SkyFrame.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the 
-FitsChan class no longer report an error if the FITS header contains no
-CTYPE keywords. It is assumed that a missing CTYPE keyword implies that 
-the world coordinate system is linear and identically equal to
-``intermediate world coordinates''.
-
-\item The new value ``noctype'' is now recognized by the \htmlref{Warnings}{Warnings} attribute 
-of the FitsChan class. This value causes warnings to be issued if CTYPE
-keywords are missing from foreign encodings.
-
-\item A new attribute called \htmlref{AllWarnings}{AllWarnings} has been added to the FitsChan 
-class. This is a read-only, space separated list of all the known condition 
-names which can be specified in the Warnings attribute.
-
-\item The FitsChan class now attempts to assigns a \htmlref{Title}{Title} to each Frame in
-a FrameSet read using a foreign encoding. The Title is based on the Domain
-name of the Frame. If the Frame has no Domain name, the default Title
-supplied by the Frame class is retained.
-
-\item The FitsChan class uses the comments associated with CTYPE
-keywords as axis labels when reading a foreign encoding. This behaviour 
-has been modified so that the default labels provided by the Frame class
-are retained (instead of using the CTYPE comments) if any of the CTYPE 
-comments are identical.
-
-\item A new ``interpolation'' scheme identified by the symbolic constant
-AST\_\_BLOCKAVE has been added to the \htmlref{AST\_RESAMPLE$<$X$>$}{AST_RESAMPLEX} set of
-functions. The new scheme calculates each output pixel value by finding
-the mean of the input pixels in a box centred on the output pixel.
-
-\item The SkyFrame class can now be used to represent an arbitrary spherical
-coordinate system by setting its System attribute to ``Unknown''.
-
-\item The indices of the latitude and longitude axes of a SkyFrame can
-now be found using new read-only attributes \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis}. The
-effects of any axis permutation is taken into account.
-
-\item A new attribute called Ident has been added to the \htmlref{Object}{Object} class.
-This serves the same purpose as the existing \htmlref{ID}{ID} attribute, but (unlike ID)
-its value is transferred to the new Object when a copy is made.
-
-\item A bug has been fixed which could prevent complex CmpFrames
-behaving correctly (for instance, resulting in the failure of attempts 
-to find a \htmlref{Mapping}{Mapping} between a \htmlref{CmpFrame}{CmpFrame} and itself).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.7}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.6 and V1.7:
-
-\begin{enumerate}
-
-\item The \htmlref{Frame}{Frame} class has a new method called 
-\htmlref{AST\_ANGLE}{AST_ANGLE}
-which returns the angle subtended by two points at a third point within a
-2 or 3 dimensional Frame.
-
-\item The Frame class has a new method called 
-\htmlref{AST\_OFFSET2}{AST_OFFSET2}
-which calculates a position which is offset away from a given starting
-point by a specified distance along a geodesic curve which passes
-through the starting point at a given position angle. It can only be used
-with 2-dimensional Frames.
-
-\item The Frame class has a new method called 
-\htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE}
-which returns the increment between two supplied axis values. For
-axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$.
-
-\item The Frame class has a new method called 
-\htmlref{AST\_AXOFFSET}{AST_AXOFFSET}
-which returns an axis value a given increment away from a specified axis
-value. For axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$ (for latitude axes) or zero to $2\pi$ (for longitude
-axes).
-
-\item The \htmlref{Plot}{Plot} class has a new method called 
-\htmlref{AST\_GENCURVE}{AST_GENCURVE}
-which allows generalised user-defined curves to be drawn. The curve is
-defined by a user-supplied \htmlref{Mapping}{Mapping} which maps distance along the curve
-into the corresponding position in the current Frame of the Plot. The new
-method then maps these current Frame position into graphics coordinates,
-taking care of any non-linearities or discontinuities in the mapping.
-
-\item The Plot class has a new method called 
-\htmlref{AST\_GRFSET}{AST_GRFSET} 
-which allows the underlying primitive graphics functions to be selected
-at run-time. Previously, the functions used by the Plot class to produce
-graphics could only be selected at link-time, using the options of the
-\htmlref{ast\_link}{ast_link} command. The new Plot method allows an application to over-ride
-the functions established at link-time, by specifying alternative
-primitive graphics routines. In addition, the two new Plot methods
-\htmlref{AST\_GRFPUSH}{AST_GRFPUSH} and \htmlref{AST\_GRFPOP}{AST_GRFPOP}
-allow the current graphics routines to be saved and restore on a
-first-in-last-out stack, allowing temporary changes to be made to the set
-of registered graphics routines.
-
-\item The DrawAxes attribute of the Plot class can now be specified
-independantly for each axis, by appending the axis index to the
-end of the attribute name.
-
-\item A bug has been fixed in the Plot class which could result in axis
-labels being drawn on inappropriate edges of the plotting box when using
-``interior'' labelling.
-
-\item A bug has been fixed in the \htmlref{IntraMap}{IntraMap} class which could cause IntraMaps
-to be corrupted after transforming any points.
-
-\item Bugs have been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-inappropriate ordering of headers within a FitsChan when writing or
-reading objects using NATIVE encodings.  
-
-\item A bug has been fixed in the FitsChan class which could cause the
-celestial longitude of a pixel to be estimated incorrectly by 180 degrees
-if the reference point is at either the north or the south pole. 
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.7 and V1.8-2:
-
-\begin{enumerate}
-
-\item The \htmlref{SkyFrame}{SkyFrame} class has a new attribute called \htmlref{NegLon}{NegLon} which allows
-   longitude values to be displayed in the range $-\pi$ to $+\pi$, instead 
-   of the usual range zero to $2.\pi$.
-
-\item Some new 
-routines (\htmlref{AST\_ANGLE}{AST_ANGLE}, \htmlref{AST\_AXANGLE}{AST_AXANGLE}, \htmlref{AST\_RESOLVE}{AST_RESOLVE}, \htmlref{AST\_OFFSET2}{AST_OFFSET2}, \htmlref{AST\_AXOFFSET}{AST_AXOFFSET}, 
-\htmlref{AST\_AXDISTANCE}{AST_AXDISTANCE}) 
-have been added to the \htmlref{Frame}{Frame} class to allow navigation of the coordinate space 
-to be performed without needing to know the underlying geometry
-of the co-ordinate system (for instance, whether it is Cartesian or
-spherical). 
-
-Note, version 1.8-1 contained many of these facilities, but 
-some have been changed in version 1.8-2. Particularly, positions angles
-are now referred to the second Frame axis for {\em all} classes of Frames
-(including SkyFrames), and the 
-AST\_BEAR routine has been replaced by AST\_AXANGLE.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-3}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-2 and V1.8-3:
-
-\begin{enumerate}
-
-\item A new method called astDecompose has been added to the \htmlref{Mapping}{Mapping} class
-which enables pointers to be obtained to the component parts of \htmlref{CmpMap}{CmpMap} and 
-\htmlref{CmpFrame}{CmpFrame} objects.
-
-\item Functions within proj.c and wcstrig.c have been renamed to avoid name 
-clashes with functions in more recent versions of Mark Calabretta's wcslib 
-library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-4}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-3 and V1.8-4:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has a new attribute called \htmlref{DefB1950}{DefB1950} which can be 
-used to select the default reference frame and equinox to be used if
-a FitsChan with foreign encoding contains no indication of the
-reference frame or equinox.
-
-\item A bug has been fixed in the FitsChan class which could prevent
-astWrite from creating a set of FITS headers from an otherwise valid
-\htmlref{FrameSet}{FrameSet}, when when using FITS-AIPS encoding.
-
-\item A bug has been fixed in the FitsChan class which could cause
-astRead to mis-interpret the FITS CROTA keyword when using FITS-AIPS 
-encoding.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-5}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V1.8-4 and V1.8-5:
-
-\begin{enumerate}
-
-\item The \htmlref{Plot}{Plot} class defines new graphical elements Axis1, Axis2,
-Grid1, Grid2, NumLabs1, NumLabs2, TextLab1, TextLab2, Ticks1 and Ticks2.
-These allow graphical attributes (colour, width, etc) to be set for each
-axis individually. Previously, graphical attributes could only be set for
-both axes together, using graphical elements Axes, \htmlref{Grid}{Grid}, NumLabs,
-TextLabs and Ticks.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-5 and V1.8-7:
-
-\begin{enumerate}
-
-\item A new attribute called \htmlref{CarLin}{CarLin} has been added to the \htmlref{FitsChan}{FitsChan} class
-which controls the way CAR projections are handled when reading a
-\htmlref{FrameSet}{FrameSet} from a non-native FITS header. Some FITS writers use a CAR 
-projection to represent a simple linear transformation between pixel
-coordinates and celestial sky coordinates. This is not consistent with
-the definition of the CAR projection in the draft FITS-WCS standard, which
-requires the resultant \htmlref{Mapping}{Mapping} to include a 3D rotation from native
-spherical coordinates to celestial spherical coordinates, thus making the
-Mapping non-linear. Setting CarLin to 1 forces 
-\htmlref{AST\_READ}{AST_READ}
-to ignore the FITS-WCS standard and treat any CAR projections as simple 
-linear Mappings from pixel coordinates to celestial coordinates.
-
-\item A bug has been fixed which could result in axis Format attributes
-set by the user being ignored under certain circumstances.
-
-\item A bug in the way tick marks positions are selected in the \htmlref{Plot}{Plot} class
-has been fixed. This bug could result in extra ticks marks being displayed at 
-inappropriate positions. This bug manifested itself, for instance, if the 
-Mapping represented by the Plot was a simple Cartesian to Polar Mapping.
-In this example, the bug caused tick marks to be drawn at negative radius
-values.
-
-\item A bug has been fixed which could prevent attribute settings from
-being read correctly by 
-\htmlref{AST\_SET}{AST_SET},
-etc., on certain platforms (MacOS, for instance).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-8}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-7 and V1.8-8:
-
-\begin{enumerate}
-
-\item A bug has been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-problems when creating a \htmlref{FrameSet}{FrameSet} from a FITS header containing WCS
-information stored in the form of Digitised Digitised Sky Survey (DSS) 
-keywords. These problems only occurred for DSS fields in the southern
-hemisphere, and resulted in pixel positions being mapped to sky positions
-close to the corresponding {\em northern} hemispshere field.
-
-\item A new method called 
-\htmlref{AST\_BOUNDINGBOX}{AST_BOUNDINGBOX}
-has been added to the \htmlref{Plot}{Plot} class. This method returns the bounding box of
-the previous graphical output produced by a Plot method.
-
-\item A new attribute called \htmlref{Invisible}{Invisible} has been added to the Plot class
-which suppresses the graphical output normally produced by Plot methods.
-All the calculations needed to produce the normal output are still
-performed however, and so the bounding box returned by the new 
-AST\_BOUNDINGBOX
-method is still usable.
-
-\item Bugs have been fixed related to the appearance of graphical output 
-produced by the Plot class. These bugs were to do with the way in which 
-graphical elements relating to a specific axis (e.g. {\tt Colour(axis1)}, etc.) 
-interacted with the corresponding generic element (e.g. 
-{\tt Colour(axes)}, etc.).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-13}
-
-The following describes the most significant changes which occurred
-in the AST library between versions V1.8-8 and V1.8-13:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified so that LONPOLE keywords
-are only produced by \htmlref{AST\_WRITE}{AST_WRITE} when necessary. For zenithal projections such as 
-TAN, the LONPOLE keyword can always take its default value and so is
-not included in the FITS header produced by AST\_WRITE
-Previously, the unnecessary production of a LONPOLE keyword could prevent
-FrameSets being written out using encodings which do not support the
-LONPOLE keyword (such as FITS-IRAF).
-
-\item The FitsChan class has been modified to retain leading and trailing
-spaces within COMMENT cards.
-
-\item The FitsChan class has been modified to only use CTYPE comments as 
-axis labels if all non-celestial axes have unique non-blank comments
-(otherwise the CTYPE keyword values are used as labels).
-
-\item The FitsChan class has been modified so that it does not append a
-trailing ``Z'' character to the end of DATE-OBS keyword values.
-
-\item The FitsChan class has been modified to use latest list of FITS-WCS 
-projections, as described in the FITS-WCS paper II, ``Representations of
-celestial coordinates in FITS'' (Calabretta \& Greisen, draft dated 23
-April 2002). Support has been retained for the polynomial correction
-terms which previous drafts have allowed to be associated with TAN
-projections. 
-
-\item The \htmlref{WcsMap}{WcsMap} class has additional projection types of AST\_\_TPN
-(which implements a distorted TAN projection) and AST\_\_SZP. The AST\_\_TAN
-projection type now represents a simple TAN projection and has no 
-associated projection parameters. In addition, the usage of projection 
-parameters has been brought into line with the the FITS-WCS paper II. 
-
-\item The WcsMap class has been modified so that a ``get'' operation on a
-projection parameter attribute will return the default value defined in the
-FITS-WCS paper II if no value has been set for the attribute. Previously, a
-value of AST\_\_BAD was returned in such a situation.
-
-\item The \htmlref{Frame}{Frame} class has new attributes \htmlref{Top(axis)}{Topaxis} and \htmlref{Bottom(axis)}{Bottomaxis} which
-allow a ``plottable range'' to be specified for each Frame axis. The grid
-produced by the \htmlref{AST\_GRID}{AST_GRID} routine will not extend beyond these limits.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V2.0}
-
-Note, \htmlref{Frame}{Frame} descriptions created using AST V2.0 will not be readable by 
-applications linked with earlier versions of AST. This applies to Frame
-descriptions created using:
-\begin{itemize}
-\item the \htmlref{Channel}{Channel} class
-\item the \htmlref{FitsChan}{FitsChan} class if the NATIVE \htmlref{Encoding}{Encoding} is used
-\item the \htmlref{AST\_SHOW}{AST_SHOW} routine.
-\end{itemize}
-
-Applications must be re-linked with AST V2.0 in order to be able to read
-Frame descriptions created by AST v2.0.
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.8-13 and V2.0 (the
-current version):
-
-\begin{enumerate}
-
-\item The default value for the \htmlref{Domain}{Domain} attribute provided by the \htmlref{CmpFrame}{CmpFrame} 
-class has been changed from ``CMP'' to a string formed by concatenating
-the Domain attributes of the two component Frames, separated by a minus
-sign. If both component Domains are blank, then the old default of
-``CMP'' is retained for the CmpFrame Domain.
-
-\item The implementation of the 
-\htmlref{AST\_WRITE}{AST_WRITE} routine
-within the FitsChan class has been modified. It will now attempt to
-produce a set of FITS header cards to describe a \htmlref{FrameSet}{FrameSet} even if the
-number of axes in the \htmlref{Current}{Current} Frames is greater than the number in the
-\htmlref{Base}{Base} Frame (that is, if there are more WCS axes than pixel axes). This
-has always been possible with NATIVE encoding, but has not previously
-been possible for foreign encodings. The WCSAXES keyword is used to store
-the number of WCS axes in the FITS header.
-
-\item Another change to the 
-AST\_WRITE routine
-within the FitsChan class is that the ordering of ``foreign'' axes
-(\emph{i.e.} CTYPE keywords) is now chosen to make the CD (or PC) matrix
-as diagonal as possible - any element of axis transposition is removed by
-this re-ordering as recommended in FITS-WCS paper I. Previously the
-ordering was determined by the order of the axes in the Current Frame of
-the supplied FrameSet. This change does not affect NATIVE encoding.
-
-\item Support for spectral coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{SpecFrame}{SpecFrame} and \htmlref{SpecMap}{SpecMap}.
-The SpecFrame is a 1-dimensional Frame which can be used to describe
-positions within an electromagnetic spectrum in various systems
-(wavelength, frequency, various forms of velocity,~{\em{etc.}}) and referred
-to various standards of rest (topocentric, geocentric, heliocentric
-LSRK,~{\em{etc.}}). The SpecMap is a \htmlref{Mapping}{Mapping} which can transform spectral
-axis values between these various systems and standards of rest. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not yet able to read or write these new classes.
-
-\item Facilities have been added to the Frame class which allow
-differences in axis units to be taken into account when finding a Mapping
-between two Frames. In previous versions of AST, the Unit attribute was a
-purely descriptive item intended only for human readers - changing the
-value of Unit made no difference to the behaviour of the Frame. As of
-version 2.0, the Unit attribute can influence the nature of the Mappings
-between Frames. For instance, if the 
-AST\_FINDRAME or \htmlref{AST\_CONVERT}{AST_CONVERT}
-method is used to find the Mapping between an \htmlref{Axis}{Axis} with Unit set to ``m''
-and another Axis with Unit set to ``km'', then the method will return a 
-\htmlref{ZoomMap}{ZoomMap} which introduces a scaling factor of 0.001 between the two axes.
-These facilities assume that units are specified following the rules
-included in FITS-WCS paper I ({\em Representation of World
-Coordinates in FITS}, Greisen \& Calabretta).
-
-In order to minimise the risk of breaking existing software, the default 
-behaviour for simple Frames is to ignore the Unit attribute ({\em{i.e.}}
-to retain the previous behaviour). However, the new Frame method 
-\htmlref{AST\_SETACTIVEUNIT}{AST_SETACTIVEUNIT}
-may be used to ``activate'' (or deactivate) the new facilities within a 
-specific Frame. Note, the new SpecFrame class is different to the simple
-Frame class in that the new facilities for handling units are always active
-within a SpecFrame. 
- 
-\item The \htmlref{System}{System} and \htmlref{Epoch}{Epoch} attributes fo the \htmlref{SkyFrame}{SkyFrame} class have been
-moved to the parent Frame class. This enables all sub-classes of Frame
-(such as the new SpecFrame class) to share these attributes, and to provide
-suitable options for each class.
-
-\item The Frame class has a new attribute called \htmlref{AlignSystem}{AlignSystem}, which allows 
-control over the alignment process performed by the methods 
-\htmlref{AST\_FINDFRAME}{AST_FINDFRAME} and AST\_CONVERT.
-
-
-\item The CmpFrame class has been modified so that attributes of a 
-component Frame can be accessed without needing to extract the Frame first.
-To do this, append an axis index to the end of the attribute name. For
-instance, if a CmpFrame contains a SpecFrame and a SkyFrame (in that order), 
-then the \htmlref{StdOfRest}{StdOfRest} attribute of the SpecFrame can be referred to as the
-``StdOfRest(1)'' attribute of the CmpFrame. Likewise, the \htmlref{Equinox}{Equinox} attribute
-of the SkyFrame can be accessed as the ``Equinox(2)'' (or equivalently
-``Equinox(3)'') attribute of the CmpFrame. The ``System(1)'' attribute of the
-CmpFrame will refer to the System attribute of the SpecFrame, whereas the 
-``System(2)'' and ``System(3)'' attributes of the CmpFrame will refer to the
-System attribute of the SkyFrame (the ``System'' attribute without an axis
-specifier will refer to the System attribute of the CmpFrame as a whole,
-since System is an attribute of all Frames, and a CmpFrame is a Frame and
-so has its own System value which is independant of the System attributes
-of its component Frames).
-
-\item The algorithms used by the \htmlref{Plot}{Plot} class for determining when to omit
-overlapping axis labels, and the abbreviation of redundant leading fields 
-within sexagesimal axis labels, have been improved to avoid some anomolous
-behaviour in previous versions.
-
-\item The curve drawing algorithm used by the Plot class has been
-modified to reduce the chance of it ``missing'' small curve sections,
-such as may be produced if a grid line cuts across the plot very close to
-a corner. Previously, these missed sections could sometimes result in 
-axis labels being omitted.
-
-\item A new function
-(\htmlref{AST\_VERSION}{AST_VERSION})
-has been added to return the version of the AST library in use.
-
-\item Bugs have been fixed in the Plot class which caused serious problems
-when plotting high precision data. These problems could range from the
-omission of some tick marks to complete failure to produce a plot.
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.0}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V2.0 and V3.0:
-
-\begin{enumerate}
-
-\item Many changes have been made in the \htmlref{FitsChan}{FitsChan} class in order to bring
-the FITS-WCS encoding into line with the current versions of the FITS-WCS
-papers (see \htmladdnormallink{http://www.atnf.csiro.au/people/mcalabre/WCS/}
-{http://www.atnf.csiro.au/people/mcalabre/WCS/}):
-
-\begin{itemize}
-
-\item The rotation and scaling of the pixel axes may now be specified using
-either CD\emph{i\_j} keywords, or PC\emph{i\_j} and CDELTj keywords. A new attribute
-called \htmlref{CDMatrix}{CDMatrix} has been added to the FitsChan class to indicate which
-set of keywords should be used when writing a \htmlref{FrameSet}{FrameSet} to a FITS-WCS
-header.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB'' 
-algorithm code) is not supported.
-
-
-\item User-specified fiducial points for WCS projections are now
-supported by FitsChans which use FITS-WCS encoding. This use keywords
-PVi\_0, PVi\_1 and PVi\_2 for the longitude axis.
-
-\item  When reading a FITS-WCS header, a FitsChan will now use keywords PVi\_3 
-and PVi\_4 for the longitude axis (if present) in preference to any LONPOLE 
-and LATPOLE keywords which may be present. When writing a FITS-WCS header, 
-both forms are written out.
-
-\item The number of WCS axes is stored in the WCSAXES keyword if its value
-would be different to that of the NAXIS keyword.
-
-\item Helio-ecliptic coordinates are now supported by FitsChans which use 
-FITS-WCS encoding. This uses CTYPE codes ``HLON'' and ``HLAT''. The
-resulting \htmlref{SkyFrame}{SkyFrame} will have a \htmlref{System}{System} value of ``HELIOECLIPTIC'', and all
-the usual facilities, such as conversion to other celestial systems, are
-available.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB'' 
-algorithm code) is not supported.
-
-\item When reading a FITS-WCS header, a FitsChan will now ignore any
-distortion codes which are present in CTYPE keywords. Here, a ``distortion 
-code'' is the final group of four characters in a CTYPE value of the
-form ``xxxx-yyy-zzz'', as described in FITS-WCS paper IV. The exception
-to this is that the ``-SIP'' distortion code (as used by the SIRTF
-project - see 
-\htmladdnormallink{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}) is
-interpreted correctly and results in a \htmlref{PolyMap}{PolyMap} being used to represent
-the distortion in the resulting FrameSet. Note, ``-SIP'' distortion codes
-can only be read, not written. A FrameSet which uses a PolyMap will not
-in general be able to be written out to a FitsChan using any foreign
-encoding (although NATIVE encoding can of course be used).
-
-\item The \htmlref{Warnings}{Warnings} attribute of the FitsChan class now accepts values 
-``BadVal'' (which gives warnings about conversion errors when reading 
-FITS keyword values), ``Distortion'' (which gives warnings about
-unsupported distortion codes within CTYPE values), and ``BadMat'' (which
-gives a warning if the rotation/scaling matrix cannot be inverted).
-
-\item When writing a FrameSet to a FitsChan which uses a non-Native
-encoding, the comment associated with any card already in the FitsChan
-will be retained if the keyword value being written is the same as the
-keyword value already in the FitsChan.
-
-\item A FrameSet which uses the non-FITS projection type AST\_\_TPN (a TAN 
-projection with polynomial distortion terms) can now be written to a 
-FitsChan if the \htmlref{Encoding}{Encoding} attribute is set to FITS-WCS. The standard
-``-TAN'' code is used within the CTYPE values, and the distortion
-coefficients are encoded in keywords of the form `` QVi\_ma'', which are 
-directly analogous to the standard ``PVi\_ma'' projection parameter keywords.
-Thus a FITS reader which does not recognise the QV keywords will still
-be able to read the header, but the distortion will be ignored.
-
-\item The default value for \htmlref{DefB1950}{DefB1950} attribute now depends on the value
-of the Encoding attribute. 
-
-\item A new appendix has been added to SUN/210 and SUN/211 giving details
-of the implementation provided by the FitsChan class of the
-conventions contained in the first four FITS-WCS papers.
-\end{itemize}
-
-\item The SkyFrame class now supports two new coordinate systems ``ICRS''
-and ``HELIOECLIPTIC''. The default for the System attribute for SkyFrames 
-has been changed from ``FK5'' to ``ICRS''.
-
-\item The 
-\htmlref{AST\_RATE}{AST_RATE}
-function has been added which allows an estimate to be made of the rate of 
-change of a \htmlref{Mapping}{Mapping} output with respect to one of the Mapping inputs. 
-
-\item All attribute names for Frames of any class may now include an optional
-axis specifier. This includes those attributes which describe a property
-of the whole \htmlref{Frame}{Frame}. For instance, the \htmlref{Domain}{Domain} attribute may now be
-specified as ``Domain(1)'' in addition to the simpler ``Domain''. In cases
-such as this, where the attribute describes a property of the whole
-Frame, axis specifiers will usually be ignored. The exception is that a
-\htmlref{CmpFrame}{CmpFrame} will use the presence of an axis specifier to indicate that the
-attribute name relates to the primary Frame containing the specified
-axis, rather than to the CmpFrame as a whole.
-
-\item A new subclass of Mapping, the PolyMap, has been added which
-performs a general N-dimensional polynomial mapping.
-
-\item A new subclass of Mapping, the \htmlref{GrismMap}{GrismMap}, has been added which
-models the spectral dispersion produced by a grating, prism or grism.
-
-\item A new subclass of Mapping, the \htmlref{ShiftMap}{ShiftMap}, has been added which adds
-constant values onto all coordinates (this is equivalent to a \htmlref{WinMap}{WinMap}
-with unit scaling on all axes).
-
-\item Minor bugs have been fixed within the \htmlref{Plot}{Plot} class to do with the choice 
-and placement of numerical axis labels.
-
-\item The \htmlref{SphMap}{SphMap} class has a new attribute called \htmlref{PolarLong}{PolarLong} which gives the 
-longitude value to be returned when a Cartesian position corresponding to 
-either the north or south pole is transformed into spherical coordinates.
-
-\item The \htmlref{WcsMap}{WcsMap} class now assigns a longitude of zero to output
-celestial coordinates which have a latitude of plus or minus 90 degrees.
-
-\item The \htmlref{NatLat}{NatLat} and \htmlref{NatLon}{NatLon} attributes of the WcsMap class have been
-changed so that they now return the fixed native coordinates of the
-projection reference point, rather than the native coordinates of the
-user-defined fiducial point. 
-
-\item Notation has been changed in both the WcsMap and FitsChan classes to 
-reflect the convention used in the FITS-WCS papers that index ``i'' refers
-to a world coordinate axis, and index ``j'' refers to a pixel axis.
-
-\item Changes have been made to several Mapping classes in order to allow
-the 
-\htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-function to make simplifications in a \htmlref{CmpMap}{CmpMap} which previously were not
-possible.
-
-\item The \htmlref{SlaMap}{SlaMap} class has been extended by the addition of conversions
-between FK5 and ICRS coordinates, and between FK5 and helio-ecliptic coordinates.
-
-\item The \htmlref{SpecMap}{SpecMap} class has been changed to use the equation for the
-refractive index of air as given in the current version of FITS-WCS paper
-III. Also, the forward and inverse transformations between frequency and
-air-wavelength have been made more compatible by using an iterative
-procedure to calculate the inverse.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.0 and V3.1 (the
-current version):
-
-\begin{enumerate}
-\item Addition of a new class called \htmlref{XmlChan}{XmlChan} - a \htmlref{Channel}{Channel} which 
-reads and writes AST objects in the form of XML.
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause incorrect
-graphical attributes to be used for various parts of the plot if either
-axis has no tick marks (i.e. if both major and minor tick marks have zero
-length).
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.1 and V3.2:
-
-\begin{enumerate}
-
-\item A new
-routine \htmlref{AST\_PUTCARDS}{AST_PUTCARDS}
-has been added to the \htmlref{FitsChan}{FitsChan} class. This allows multiple concatenated header 
-cards to be stored in a FitsChan in a single call, providing an alternative to 
-the existing
-AST\_PUTCARDS routine.
-
-\item Some signficant changes have been made to the simplification of Mappings
- which should resultin a greater degree of simplication taking place.Some
- bugs have also been fixed which could result in an infinite loop being
- entered when attempting to simplify certain Mappings.
-
-\item The FitsChan class now translates the spectral algorithm codes 
-``-WAV'', ``-FRQ'' and ``-VEL'' (specified in early drafts of paper III) to 
-the corresponding ``-X2P'' form when reading a spectral axis description
-from a set of FITS header cards.
-
-\item A bug has been fixed in the FitsChan class which could cause 
-keywords associated with alternate axis descriptions to be mis-interpreted.
-
-\item The \htmlref{Plot}{Plot} class now provides facilities for modifying the appearance
-of sub-strings within text strings such as axis labels, titles, \emph{etc},
-by producing super-scripts, sub-scripts, changing the font colour, size, 
-\emph{etc}. See attribute \htmlref{Escape}{Escape}.
-
-\item The default value of the \htmlref{Tol}{Tol} attribute of the Plot class has been
-changed from 0.001 to 0.01. This should not usually cause any significant 
-visible change to the plot, but should make the plotting faster. You may
-need to set a lower value for Tol if you are producing a particularly
-large plot.
-
-\item The algorithm for finding the default value for the Gap attribute
-has been changed. This attribute specifies the gap between major axis
-values in an annotated grid drawn by the Plot class. The change in
-algorithm may cause the default value to be different to previous versions 
-in cirtain circumstances.
-
-\item Some bugs have been fixed in the Plot class which could cause the
-system to hang for a long time while drawing certain all-sky grids
-(notable some of the FITS Quad-cube projections).
-
-\item The \htmlref{SkyAxis}{SkyAxis} class has extended the Format attribute by the addition
-of the ``g'' option. this option is similar to the older ``l'' option in that 
-it results in characters (``h'', ``m'', ``s'', \emph{etc}) being used as 
-delimiters between the sexagesimal fields of the celestial position. The
-difference is that the ``g'' option includes graphics escape sequences
-in the returned formatted string which result in the field delimiter 
-characters being drawn as super-scripts when plotted as numerical axis values 
-by a Plot.
-
-\item The Plot class has been extended to include facilities for producing
-logarithmic axes. See attributes LogPlot, LogTicks, LogGap and LogLabel.
-
-\item New functions astGCap and astGScales have been added to the interface
-defined by file \verb+grf.h+. The \htmlref{ast\_link}{ast_link} command has been modified so
-that the \verb+-mygrf+ switch loads dummy versions of the new grf
-functions. This means that applications should continue to build without
-any change. However, the facilities for interpreting escape sequences
-within strings drawn by the Plot class will not be available unless the
-new grf functions are implemented. If you choose to implement them, you
-should modify your linking procedure to use the \verb+-grf+ switch in
-place of the older \verb+-mygrf+ switch. See the description of the ast\_link 
-command for details of the new switches. Also note that the astGQch
-function, whilst included in verb+grf.h+ in pervious versions of AST, was
-not actually called. As of this version of AST, calls are made to the 
-astGQch function, and so any bugs in the implementation of astGQch may
-cause spurious behaviour when plotting text strings.
-
-\item A new 'static' method called astEscapes has been added which is used 
-to control and enquire whether astGetC and astFormat will strip any graphical 
-escape sequences which may be present out of the returned value.
-
-\item New attribute \htmlref{XmlPrefix}{XmlPrefix} has been added to the \htmlref{XmlChan}{XmlChan} class. It
-allows XML written by the XmlChan class to include an explicit namespace
-prefix on each element.
-
-\item New attribute \htmlref{XmlFormat}{XmlFormat} has been added to the XmlChan class. It
-specifies the format in which AST objects should be written.
-
-\item A new class of \htmlref{Mapping}{Mapping}, the \htmlref{TranMap}{TranMap}, has been introduced. A TranMap
-takes its forward transformation from an existing Mapping, and its inverse
-transformation from another existing Mapping.
-
-\item A bug has been fixed in \htmlref{WcsMap}{WcsMap} which caused error reports to
-include erroneous axis numbers when referring to missing parameter values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.3}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.2 and V3.3:
-
-\begin{enumerate}
-
-\item Options have been added to the \htmlref{SkyFrame}{SkyFrame} class which allows the
-origin 
-of celestial coordinates to be moved to any specified point. See the new
-attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
-\item An option has been added to the \htmlref{FitsChan}{FitsChan} class which allows extra
-Frames representing cartesian projection plane coordinates (``intermediate 
-world coordinates'' in the parlance of FITS-WCS) to be created when
-reading 
-WCS information from a foreign FITS header. This option is controlled by
-a new attribute called \htmlref{Iwc}{Iwc}.
-
-\item The FitsChan class which been modified to interpret FITS-WCS CAR
-projection headers correctly if the longitude reference pixel (CRPIX) is 
-very large.
-
-\item The  FITS-AIPS++ encoding in the FitsChan class now recognised
-spectral axes if they conform to the AIPS convention in which the
-spectral axis is descirbed by a CTYPE keyword od the form "AAAA-BBB"
-where ``AAAA'' is one of FREQ, VELO or FELO, and ``BBB'' is one of LSR, LSD,
-HEL or OBS. Such spectral axes can be both read and written.
-
-\item The FitsChan class now has a FITS-AIPS++ encoding which represents
-WCS information using FITS header cards recognised by the AIPS++ project.
-Support for spectral axes is identical to the FITS-AIPS encoding.
-
-\item The organisation of the AST distribution and the commands for
-building it have been changed. Whereas AST used to be built and installed
-with \verb+./mk build; ./mk install+, it now builds using the more standard
-idiom \verb+./configure; make; make install+. The installation location is
-controlled by the \verb+--prefix+ argument to ./configure (as is usual
-for other packages which use this scheme).  Note that the INSTALL environment 
-variable now has a \emph{different} meaning to that which it had
-before, and it should generally be \emph{unset}. Also, there is no need to
-set the SYSTEM variable.
-
-\item Shared libraries are now installed in the same directory as the
-static libraries. In addition, links to sharable libraries are installed 
-with names which include version information, and ``libtool libraries'' 
-are also installed (see \htmladdnormallink{http://www.gnu.org/software/libtool/manual.html}{
-http://www.gnu.org/software/libtool/manual.html}).
-
-\item The \verb+ast_dev+ script has been removed. Instead, the location of
-the AST include files should be specified using the -I option when
-compiling.
-
-\item The names of the installed AST include files have been changed to
-upper case.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.4}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.3 and V3.4:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} class has a new method 
-(\htmlref{AST\_LINEARAPPROX}{AST_LINEARAPPROX})
-which calculates the co-efficients of a linear approximation to a Mapping.
-
-\item The Format attribute for simple Frames and SkyFrames has been extended.
-It has always been possible, in both classes, to specify a precision by
-including a dot in the Format value followed by an integer (\emph{e.g.}
-``\verb+dms.1+'' for a \htmlref{SkyFrame}{SkyFrame}, or ``\verb+%.10g+'' for a simple \htmlref{Frame}{Frame}).
-The precision can now also be specified using an asterisk in place of the
-integer (\emph{e.g.} ``\verb+dms.*+'' or ``\verb+%.*g+''). This causes the
-precision to be derived on the basis of the Digits attribute value.
-
-\item The \htmlref{Plot}{Plot} class has been changed so that the default value used for the
-Digits attribute is chosen to be the smallest value which results in no
-pair of adjacent labels being identical. For instance, if an annotated
-grid is being drawn describing a SkyFrame, and the Format(1) value is set
-to ``\verb+hms.*g+'' (the ``g'' causes field delimiters to be drawn as
-superscripts), and the Digits(1) value is unset, then the seconds field
-will have a number of decimal places which results in no pair of labels
-being identical.
-
-\item Addition of a new class classed \htmlref{DSBSpecFrame}{DSBSpecFrame}. This is a 
-sub-class of \htmlref{SpecFrame}{SpecFrame} which can be used to describe spectral axes
-associated with dual sideband spectral data.
-
-\item The \htmlref{FitsChan}{FitsChan} class will now read headers which use the old ``-GLS''
-projection code, converting them to the corresponding modern ``-SFL'' code,
-provided that the celestial axes are not rotated.
-
-\item The FitsChan class has a new \htmlref{Encoding}{Encoding}, ``FITS-CLASS'', which allows
-the reading and writing of FITS headers using the conventions of the CLASS 
-package - see 
-\htmladdnormallink{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.4 and V3.5:
-
-\begin{enumerate}
-
-\item AST now provides facilities for representing regions of various
-shapes within a coordinate system. The \htmlref{Region}{Region} class provides general
-facilities which are independent of the specific shape of region being
-used. Various sub-classes of Region are also now available which provide 
-means of creating Regions of specific shape. Facilities provided by the
-Region class include testing points to see if they are inside the
-Region, testing two Regions for overlap, transforming Regions from one
-coordinate system to another \emph{etc}.
-
-\item A new class of 1-dimensional \htmlref{Frame}{Frame} called \htmlref{FluxFrame}{FluxFrame} has been added which 
-can be used to describe various systems for describing ovserved value at a 
-single fixed spectral position. 
-
-\item A new class of 2-dimensional Frame called \htmlref{SpecFluxFrame}{SpecFluxFrame} has been added which 
-can be used to describe a 2-d frame spanned by a spectral position axis
-and and an observed value axis.
-
-\item A new class of \htmlref{Mapping}{Mapping} called \htmlref{RateMap}{RateMap} has been added. A RateMap encapsulates
-a previously created Mapping. The inputs of the RateMap correspond to the
-inputs of the encapsulated Mapping. All RateMaps have just a single
-output which correspond to the rate of change of a specified output of
-the encapsulated Mapping with respect to a specified input.
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a value of ``J2000'' for \htmlref{System}{System}.
-This system is an equatorial system based on the mean dynamical equator and
-equinox at J2000, and differs slightly from an FK5(J2000) system.
-
-\item A new class called \htmlref{KeyMap}{KeyMap} has been added. A KeyMap can be used to
-store a collection of vector or scalar values or Objects, indexed by a 
-character string rather than an integer.
-
-\item The parameter list for the 
-\htmlref{AST\_RATE}{AST_RATE}
-method of the Mapping class has been modified. It no longer returns a second 
-derivative estimate. Existing code which uses this method will need to be 
-changed.
-
-\item Methods 
-(AST\_SETFITS<X>)
-have been added to the \htmlref{FitsChan}{FitsChan} class to allow values for named
-keywords to be changed or added.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.6}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V3.5 and V3.6:
-
-\begin{enumerate}
-
-\item If the Format attribute associated with an axis of a \htmlref{SkyFrame}{SkyFrame}
-starts with a percent character (``\verb+%+''), then axis values are
-now formatted and unformatted as a decimal radians value, using the
-Format syntax of a simple \htmlref{Frame}{Frame}.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called \htmlref{Clip}{Clip} which controls the
-clipping performed by AST at the plot boundary.
-
-\item The keys used to label components of the \htmlref{PolyMap}{PolyMap} structure when a
-PolyMap is written out through a \htmlref{Channel}{Channel} have been changed. The new keys
-are shorter than the old keys and so can written succesfully to a \htmlref{FitsChan}{FitsChan}.
-The new PolyMap class always writes new styles keys but can read either
-old or new style keys. Consequently, PolyMap dumps written by this
-version of AST cannot be read by older versions of AST.
-
-\item A mimimal cut down subset of the C version of SLALIB is now
-included with the AST distribution and built as part of building AST.
-This means that it is no longer necessary to have SLALIB installed
-separately at your site. The SLALIB code included with AST is distrubuted
-under the GPL. The default behaviour of the \htmlref{ast\_link}{ast_link} script is now to
-link with this internal slalib subset. However, the ``-csla'' option can
-still be used to force linking with an external full C SLALIB library.
-A new option ``-fsla'' has been introduced which forces linking with the
-external full Fortran SLALIB library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.6 and V3.7:
-
-\begin{enumerate}
-
-\item Support for time coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{TimeFrame}{TimeFrame} and \htmlref{TimeMap}{TimeMap}.
-The TimeFrame is a 1-dimensional \htmlref{Frame}{Frame} which can be used to describe
-moments in time (either absolute or relative) in various systems (MJD, 
-Julian \htmlref{Epoch}{Epoch}, \emph{etc.}) and referred to various time scales (TAI, UTC, 
-UT1, GMST, \emph{etc}). The TimeMap is a \htmlref{Mapping}{Mapping} which can transform time
-values between these various systems and time scales. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not able to read or write these new classes.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.0}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V3.7 and V4.0:
-
-\begin{enumerate}
-
-\item Experimental support for reading IVOA Space-Time-Coordinates (STC-X)
-descriptions using the \htmlref{XmlChan}{XmlChan} class has been added. Support is included
-for a subset of V1.20 of the draft STC specification.
-
-\item A new set of methods (AST\_REBIN<X>/astRebin<X>) has been added to 
-the \htmlref{Mapping}{Mapping} class. These are flux-conserving alternatives to the existing
-AST\_RESAMPLE<X>/astResample<X> methods.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.1}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V4.0 and V4.1:
-
-\begin{enumerate}
-
-\item A new control flag has been added to the AST\_RESAMPLE<X>/astResample<X> 
-functions which produces approximate flux conservation.
-
-\item New constants AST\_\_SOMB and AST\_\_SOMBCOS have been added to 
-AST\_PAR. These specify kernels for AST\_RESAMPLE and AST\_REBIN
-based on the ``Sombrero'' function ( $2*J1(x)/x$ where $J1(x)$ is the 
-first order Bessel function of the first kind).
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a \htmlref{System}{System} value of AZEL corresponding
-to horizon (azimuth/elevation) coordinates.
-
-\item The \htmlref{FitsChan}{FitsChan} class allows the non-standard strings ``AZ--'' and
-``EL--'' to be used as axis types in FITS-WCS CTYPE keyword values.
-
-\item The \htmlref{Frame}{Frame} class now has attributes \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} to specify
-the geodetic longitude and latitude of the observer.
-
-\item The ClockLon and ClockLat attributes have been removed from the
-\htmlref{TimeFrame}{TimeFrame} class. Likewise, the GeoLon and GeoLat attributes have been 
-removed from the \htmlref{SpecFrame}{SpecFrame} class. Both classes now use the ObsLon and
-ObsLat attributes of the parent Frame class instead. However, the old
-attribute names can be used as synonyms for ObsLat and ObsLon. Also,
-dumps created using the old scheme can be read succesfully by AST V4.1
-and converted to the new form.
-
-\item A new 
-routine \htmlref{AST\_MAPSPLIT}{AST_MAPSPLIT}
-has been added to the \htmlref{Mapping}{Mapping} class. This splits a Mapping into two component 
-Mappings which, when combined in parallel, are equivalent to the original 
-Mapping.
-
-\item The default value for the \htmlref{SkyRefIs}{SkyRefIs} attribute has been changed from
-``Origin'' to ``Ignored''. This means that if you want to use a SkyFrame
-to represent offsets from some origin position, you must now set the
-SkyRefIs attribute explicitly to either ``Pole'' or ``Origin'', in
-addition to assigning the required origin position to the SkyRef attribute.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.2}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V4.1 and V4.2:
-
-\begin{enumerate}
-
-\item The \htmlref{SideBand}{SideBand} attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} class can now take the
-option ``LO'' in addition to ``USB'' and ``LSB''. The new option causes the
-DSBSpecFrame to represent the offset from the local oscillator frequency, 
-rather than either of the two sidebands.
-
-\item The \htmlref{FitsChan}{FitsChan} class has been changed so that it writes out a VELOSYS
-keyword when creating a FITS-WCS encoding (VELOSYS indicates the topocentric 
-apparent velocity of the standard of rest). FitsChan also strips out VELOSYS 
-keywords when reading a \htmlref{FrameSet}{FrameSet} from a FITS-WCS encoding.
-
-\item The FitsChan class has a new method called 
-\htmlref{AST\_RETAINFITS}{AST_RETAINFITS}
-that indicates that the current card in the FitsChan should not be
-stripped out of the FitsChan when an AST \htmlref{Object}{Object} is read from the FitsChan.
-Unless this method is used, all cards that were involved in the creation
-of the AST Object will be stripped from the FitsChan afte a read operation.
-
-\item A problem with unaligned memory access that could cause bus errors on 
-Solaris has been fixed.
-
-\item A new read-only attribute called \htmlref{ObjSize}{ObjSize} has been added to the base
-Object \htmlref{Class}{Class}. This gives the number of bytes of memory occupied by the
-Object. Note, this is the size of the internal in-memory representation of 
-the Object, not the size of the textual representation produced by
-writing the Object out through a \htmlref{Channel}{Channel}.
-
-\item A new function 
-\htmlref{AST\_TUNE}{AST_TUNE}
-has been added which can be used to get and set global AST tuning
-parameters. At the moment there are only two such parameter, both of
-which are concerned with memory management within AST.
-
-\item A new method called 
-\htmlref{AST\_TRANGRID}{AST_TRANGRID}
-has been added to the \htmlref{Mapping}{Mapping} class. This method creates a regular 
-grid of points covering a rectangular region within the input space of a
-Mapping, and then transforms this set of points into the output space of the
-Mapping, using a piecewise-continuous linear approximation to the Mapping
-if appropriate in order to achive higher speed.
-
-\item A new subclass of Mapping has been added called \htmlref{SwitchMap}{SwitchMap}. A
-SwitchMap represents several alternate Mappings, each of which is used to
-transforms input positions within a different region of the input
-coordinate space.
-
-\item A new subclass of Mapping has been added called \htmlref{SelectorMap}{SelectorMap}. A
-SelectorMap tests each input position to see if it falls within one of
-several Regions. If it does, the index of the \htmlref{Region}{Region} containing the
-input position is returned as the Mapping output.
-
-\item The behaviour of the
-\htmlref{AST\_CONVERT}{AST_CONVERT}
-method when trying to align a \htmlref{CmpFrame}{CmpFrame} with another \htmlref{Frame}{Frame} has been
-modified. If no conversion between positions in the Frame and CmpFrame 
-can be found, an attempt is now made to find a conversion between the
-Frame and one of two component Frames contained within the CmpFrame. Thus
-is should now be possible to align a \htmlref{SkyFrame}{SkyFrame} with a CmpFrame containing a
-SkyFrame and a \htmlref{SpecFrame}{SpecFrame} (for instance). The returned Mapping produces bad
-values for the extra axes (i.e. for the SpecFrame axis in the above example).
-
-\item The ``\htmlref{\htmlref{ast\_link}{ast_link}\_adam}{ast_link_adam}'' and ``ast\_link'' scripts now ignore the 
-\verb+-fsla+ and \verb+-csla+ options, and always link against the
-minimal cut-down version of SLALIB distributed as part of AST.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.3}
-
-The following describes the most significant changes which occurred in the 
-AST library between versions V4.2 and V4.3:
-
-\begin{enumerate}
-
-\item The 
-AST\_GETFITSS
-function now strips trailing white space from the returned string, if the 
-original string contains 8 or fewer characters
-
-\item The \htmlref{SpecFrame}{SpecFrame} class has a new attribute called \htmlref{SourceSys}{SourceSys} that specified
-whether the \htmlref{SourceVel}{SourceVel} attribute (which specifies the rest frame of the 
-source) should be accessed as an apparent radial velocity or a redshift.
-Note, any existing software that assumes that SourceVel always represents
-a velocity in km/s should be changed to allow for the possibility of
-SourceVel representing a redshift value.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.4}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V4.3 and V4.4:
-
-\begin{enumerate}
-
-\item The 
-\htmlref{AST\_FINDFRAME}{AST_FINDFRAME}
-function can now be used to search a \htmlref{CmpFrame}{CmpFrame} for an instance of a more
-specialised class of \htmlref{Frame}{Frame} (\htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame}, \htmlref{SpecFrame}{SpecFrame}, \htmlref{DSBSpecFrame}{DSBSpecFrame}
-or \htmlref{FluxFrame}{FluxFrame}). That is, if an instance of one of these classes is used as
-the ``template'' when calling 
-AST\_FINDFRAME,
-and the ``target'' being searched is a CmpFrame (or a \htmlref{FrameSet}{FrameSet} in which the 
-current Frame is a CmpFrame), then the component Frames within the CmpFrame 
-will be searched for an instance of the supplied template Frame, and, if 
-found, a suitable \htmlref{Mapping}{Mapping} (which will include a \htmlref{PermMap}{PermMap} to select the 
-required axes from the CmpFrame) will be returned by 
-AST\_FINDFRAME.
-Note, for this to work, the \htmlref{MaxAxes}{MaxAxes} and \htmlref{MinAxes}{MinAxes} attributes of the template 
-Frame must be set so that they cover a range that includes the number of axes 
-in the target CmpFrame.
-
-\item The SkyFrame, SpecFrame, DSBSpecFrame, TimeFrame and FluxFrame classes 
-now allow the MaxAxes and MinAxes attributes to be set freely to any value.
-In previous versions of AST, any attempt to change the value of MinAxes
-or MaxAxes was ignored, resulting in them always taking the default values.
-
-\item The DSBSpecFrame class has a new attribute called AlignSB that
-specifies whether or not to take account of the \htmlref{SideBand}{SideBand} attributes when
-aligning two DSBSpecFrames using 
-\htmlref{AST\_CONVERT}{AST_CONVERT}.
-
-\item The Frame class has a new attribute called \htmlref{Dut1}{Dut1} that can be used to
-store a value for the difference between the UT1 and UTC timescales at 
-the epoch referred to by the Frame. 
-
-\item The number of digits used to format the Frame attributes \htmlref{ObsLat}{ObsLat} and 
-\htmlref{ObsLon}{ObsLon} has been increased.
-
-\item The use of the SkyFrame attribute \htmlref{AlignOffset}{AlignOffset} has been changed. This
-attribute is used to control how two SkyFrames are aligned by 
-AST\_CONVERT.
-If the template and target SkyFrames both have a non-zero value for 
-AlignOffset, then alignment occurs between the offset coordinate systems 
-(that is, a \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames).
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called ForceExterior that can be
-used to force exterior (rather than interior) tick marks to be produced.
-By default, exterior ticks are only produced if this would result in 
-more than 3 tick marks being drawn.
-
-\item The TimeFrame class now supports conversion between angle based
-timescales such as UT1 and atomic based timescales such as UTC.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.5}
-
-The following describes the most significant changes that
-occurred in the AST library between versions V4.4 and V4.5:
-
-\begin{enumerate}
-
-
-
-\item All FITS-CLASS headers are now created with a frequency axis. If the
-\htmlref{FrameSet}{FrameSet} supplied to 
-\htmlref{AST\_WRITE}{AST_WRITE}
-contains a velocity axis (or any other form
-of spectral axis) it will be converted to an equivalent frequency axis
-before being used to create the FITS-CLASS header.
-
-\item The value stored in the FITS-CLASS keyword ``VELO-LSR'' has been changed
-from the velocity of the source to the velocity of the reference channel.
-
-\item Addition of a new method call 
-\htmlref{AST\_PURGEWCS}{AST_PURGEWCS}
-to the \htmlref{FitsChan}{FitsChan} 
-class. This method removes all WCS-related header cards from a FitsChan.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called GrfContext that can be used
-to comminicate context information between an application and any
-graphics functions registered with the Plot class via the 
-\htmlref{AST\_GRFSET}{AST_GRFSET} routine.
-\item Functions registered with the Plot class using 
-AST\_GRFSET
-now take a new additional integer parameter, ``grfcon''. The Plot class
-sets this parameter to the value of the Plot's GrfContext attribute before
-calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING 
-CODE THAT USES 
-AST\_GRFSET
-TO BE MODIFIED TO INCLUDE THE NEW PARAMETER.
-\item The 
-AST\_REBINSEQ routines
-now have an extra parameter that is used to record the total number of input 
-data values added into the output array. This is necessary to correct a 
-flaw in the calculation of output variances based on the spread of input 
-values. NOTE, THIS CHANGE WILL REQUIRE EXISTING CODE TO BE MODIFIED TO 
-INCLUDE THE NEW PARAMETER (CALLED "NUSED").
-\item Support has been added for the FITS-WCS ``HPX'' (HEALPix) projection.
-\item A new flag ``AST\_\_VARWGT'' can be supplied to 
-AST\_REBINSEQ.
-This causes the input data values to be weighted using the reciprocals of 
-the input variances (if supplied).
-
-\item The \htmlref{Frame}{Frame} class has a new read-only attribute called NormUnit that
-returns the normalised value of the Unit attribute for an axis. Here,
-``normalisation'' means cancelling redundant units, etc. So for instance, a
-Unit value of ``s*(m/s)'' would result in a NormUnit value of ``m''.
-
-\item A new 
-routine \htmlref{AST\_SHOWMESH}{AST_SHOWMESH}
-has been added to the \htmlref{Region}{Region} class. It displays a mesh of points covering
-the surface of a Region by writing out a table of axis values to standard
-output.
-
-\item The Plot class now honours the value of the LabelUp attribute even if
-numerical labels are placed around the edge of the Plot. Previously
-LabelUp was only used if the labels were drawn within the interior of 
-the plot. The LabelUp attribute controls whether numerical labels are 
-drawn horizontally or parallel to the axis they describe.
-
-\item A bug has been fixed that could segmentation violations when setting 
-attribute values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V4.5 and V4.6:
-
-\begin{enumerate}
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called 
-\htmlref{LTOffset}{LTOffset}.
-
-\item A new class called \htmlref{Plot3D}{Plot3D} has been added. The Plot3D class allows
-the creation of 3-dimensional annotated coordinate grids.
-
-\item A correction for diurnal aberration is now included when
-converting between AZEL and other celestial coordinate systems. The
-correction is based on the value of the \htmlref{ObsLat}{ObsLat} \htmlref{Frame}{Frame} attribute (the
-geodetic latitude of the observer).
-
-\item A bug has been fixed which caused the DUT1 attribute to be ignored
-by the \htmlref{SkyFrame}{SkyFrame} class when finding conversions between AZEL and other
-celestial coordinate systems.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.0}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V4.6 and V5.0:
-
-\begin{enumerate}
-
-
-\item The AST library is now thread-safe (assuming that the POSIX pthreads 
-library is available when AST is built). Many of the macros defined in
-the ast.h header file have changed. It is therefore necessary to
-re-compile all source code that includes ast.h.
-
-\item New methods astLock and astUnlock allow an AST \htmlref{Object}{Object} to be locked
-for exclusive use by a thread.
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called 
-\htmlref{LTOffset}{LTOffset}.
-
-\item The \htmlref{Channel}{Channel} class has a new attribute called \htmlref{Strict}{Strict} which controls
-whether or not to report an error if unexpected data items are found
-within an AST Object description read from an external data source. Note,
-the default behaviour is now not to report such errors. This differs from
-previous versions of AST which always reported an error is unexpected
-input items were encountered.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.1}
-
-The following describes the most significant changes which occurred in the 
-AST library between versions V5.0 and V5.1:
-
-\begin{enumerate}
-
-
-\item The \htmlref{Prism}{Prism} class has been modified so that any class of \htmlref{Region}{Region} can
-be used to define the extrusion axes. Previously, only a \htmlref{Box}{Box} or \htmlref{Interval}{Interval}
-could be used for this purpose.
-
-
-\item Improvements have been made to the way that Prisms are simplified
-when
-\htmlref{AST\_SIMPLIFY}{AST_SIMPLIFY}
-is called.  The changes mean that more types of Prism will now simplify
-into a simpler class of Region.
-
-\item The \htmlref{PointList}{PointList} class has a new method, 
-AST\_POINTS,
-that copies the axis values from the PointList into a supplied array. 
-
-\item The PointList class has a new (read-only) attribute, \htmlref{ListSize}{ListSize}, that 
-gives the number of points stored in the PointList.
-
-\item The handling of warnings within different classes of \htmlref{Channel}{Channel} has
-been rationalised. The XmlStrict attribute and 
-AST\_XMLWARNINGS
-function have been removed. The same functionality is now available via
-the existing \htmlref{Strict}{Strict} attribute (which has had its remit widened), a new
-attribute called \htmlref{ReportLevel}{ReportLevel}, and the new
-\htmlref{AST\_WARNINGS}{AST_WARNINGS}
-function. This new function can be used on any class of Channel. Teh
-\htmlref{FitsChan}{FitsChan} class retains its long standing ability to store warnings as
-header cards within the FitsChan, but it also now stores warnings in the
-parent Channel structure, from where they can be retrieved using the 
-AST\_WARNINGS
-function.
-
-\item A new function called 
-AST\_INTERCEPT
-has been added to the \htmlref{Frame}{Frame} class. This function finds the point of
-intersection beteeen two geodesic curves.
-
-\item A bug in the type-checking of Objects passed as arguments to constructor
-functions has been fixed. This bug could lead to applications crashing or
-showing strange behaviour if an inappropriate class of \htmlref{Object}{Object} was
-supplied as an argument to a constructor.
-
-\item The 
-\htmlref{AST\_PICKAXES}{AST_PICKAXES}
-function will now return a Region, if possible, when applied to a Region. If 
-this is not possible, a Frame will be returned as before.
-
-\item The default gap size between the ISO date/time labels used by the \htmlref{Plot}{Plot} 
-class when displaying an annotated axis described by a \htmlref{TimeFrame}{TimeFrame} has been
-changed. The changes are meant to improve the labelling of calendar time 
-axes that span intervals from a day to a few years.
-
-\item A new function called
-\htmlref{AST\_TESTFITS}{AST_TESTFITS}
-has been added to the FitsChan class. This function tests a FitsChan to
-see if it contains a defined value for specified FITS keyword.
-
-\item The AST\_\_UNDEF<X> parameters used to flag undefined FITS keyword values
-have been removed. Use the new 
-AST\_TESTFITS
-function instead.
-
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.2}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V5.1 and V5.2:
-
-\begin{enumerate}
-
-\item A new method called 
-\htmlref{AST\_SETFITSCM}{AST_SETFITSCM}
-has been added to the \htmlref{FitsChan}{FitsChan} class. It stores a pure comment card in a
-FitsChan (that is, a card with no keyword name or equals sign).
-
-\item A new attribute called \htmlref{ObsAlt}{ObsAlt} has been added to the \htmlref{Frame}{Frame} class. It
-records the geodetic altitude of the observer, in metres. It defaults to
-zero. It is used when converting times to or from the TDB timescale, or
-converting spectral positions to or from the topocentric rest frame, or
-converting sky positions to or from horizon coordinates. The FitsChan
-class will include its effect when creating a set of values for the 
-OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
-set of OBSGEO-X/Y/Z keyword values from a FITS header.
-
-\item The \htmlref{TimeMap}{TimeMap} conversions ``TTTOTDB'' and ``TDBTOTT'', and the \htmlref{SpecMap}{SpecMap}
-conversions ``TPF2HL'' and ``HLF2TP'', now have an additional argument - 
-the observer's geodetic altitude.
-
-\item The \htmlref{Polygon}{Polygon} class has been modified to make it consistent with the
-IVOA STC definition of a Polygon. Specifically, the inside of a polygon
-is now the area to the left of each edge as the vertices are traversed in 
-an anti-clockwise manner, as seen from the inside of the celestial sphere.
-Previously, AST used the anti-clockwise convention, but viewed from the
-outside of the celestial sphere instead of the inside. Any Polygon saved 
-using previous versions of AST will be identified and negated automatically 
-when read by AST V5.2.
-
-\item A new class of \htmlref{Channel}{Channel}, called \htmlref{StcsChan}{StcsChan}, has been added that allows
-conversion of suitable AST Objects to and from IVOA STC-S format.
-
-\item A new method called 
-\htmlref{AST\_REMOVEREGIONS}{AST_REMOVEREGIONS}
-has been added to the \htmlref{Mapping}{Mapping} class. It searches a (possibly compound)
-Mapping (or Frame) for any instances of the AST \htmlref{Region}{Region} class, and either 
-removes them, or replaces them with UnitMaps (or equivalent Frames). It
-can be used to remove the masking effects of Regions from a compound
-Mapping or Frame.
-
-\item A new method called 
-\htmlref{AST\_DOWNSIZE}{AST_DOWNSIZE}
-has been added to the Polygon class. It produces a new Polygon that
-contains a subset of the vertices in the supplied Polygon. The subset is
-chosen to retain the main features of the supplied Polygion, in so far 
-as that is possible, within specified constraints.
-
-\item A new constructor called 
-AST\_OUTLINE
-has been added to the Polygon class. Given a 2D data array, it identifies
-the boundary of a region within the array that holds pixels with
-specified values. It then creates a new Polygon to describe this boundary
-to a specified accuracy.
-
-\item A new set of methods, called 
-AST\_MAPGETELEM<X>
-has been added to the \htmlref{KeyMap}{KeyMap} class. They allow a single element of a vector
-valued entry to be returned.
-
-\item A new attribute called \htmlref{KeyError}{KeyError} has been added to the KeyMap \htmlref{Class}{Class}. It
-controls whether the 
-AST\_MAPGET...
-family of functions report an error if an entry with the requested key does 
-not exist in the KeyMap.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.3}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V5.2 and V5.3:
-
-\begin{enumerate}
-
-\item The details of how a \htmlref{Frame}{Frame} is aligned with another Frame by the
-\htmlref{AST\_FINDFRAME}{AST_FINDFRAME} and \htmlref{AST\_CONVERT}{AST_CONVERT}
-functions have been changed. The changes mean that a Frame can now be
-aligned with an instance of a sub-class of Frame, so long as the number
-of axes and the \htmlref{Domain}{Domain} values are consistent. For instance, a basic
-2-dimensional Frame with Domain ``SKY'' will now align succesfully with 
-a \htmlref{SkyFrame}{SkyFrame}, conversion between the two Frames being achieved using a
-\htmlref{UnitMap}{UnitMap}.
-
-
-\item Added method 
-\htmlref{AST\_MATCHAXES}{AST_MATCHAXES}
-to the Frame class. This method allows corresponding axes within two
-Frames to be identified.
-
-\item The 
-\htmlref{AST\_ADDFRAME}{AST_ADDFRAME}
-method can now be used to append one or more axes to all Frames in a \htmlref{FrameSet}{FrameSet}.
-\end{enumerate}
-
-\subsection{\xlabel{changes}\xlabel{list_of_most_recent_changes}Changes
-Introduced in V5.3-1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V5.3 and V5.3-1 (the
-current version):
-
-\begin{enumerate}
-
-\item The \htmlref{StcsChan}{StcsChan} class now ignores case when reading STC-S phrases (except
-that units strings are still case sensitive).
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-\end{document}
diff --git a/ast-5.3-1/sun210_figures/cmpframe.eps b/ast-5.3-1/sun210_figures/cmpframe.eps
deleted file mode 100644
index c5b6aaa..0000000
--- a/ast-5.3-1/sun210_figures/cmpframe.eps
+++ /dev/null
@@ -1,931 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/complex.eps b/ast-5.3-1/sun210_figures/complex.eps
deleted file mode 100644
index 2d8ccb0..0000000
--- a/ast-5.3-1/sun210_figures/complex.eps
+++ /dev/null
@@ -1,1572 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frames.eps b/ast-5.3-1/sun210_figures/frames.eps
deleted file mode 100644
index a9ae19f..0000000
--- a/ast-5.3-1/sun210_figures/frames.eps
+++ /dev/null
@@ -1,1095 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frameset.eps b/ast-5.3-1/sun210_figures/frameset.eps
deleted file mode 100644
index 6d44d25..0000000
--- a/ast-5.3-1/sun210_figures/frameset.eps
+++ /dev/null
@@ -1,2990 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fronta.eps b/ast-5.3-1/sun210_figures/fronta.eps
deleted file mode 100644
index 0369c80..0000000
--- a/ast-5.3-1/sun210_figures/fronta.eps
+++ /dev/null
@@ -1,6473 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:19
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-0 0 1 rg
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fronta_bw.eps b/ast-5.3-1/sun210_figures/fronta_bw.eps
deleted file mode 100644
index 73d133f..0000000
--- a/ast-5.3-1/sun210_figures/fronta_bw.eps
+++ /dev/null
@@ -1,6472 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontb.eps b/ast-5.3-1/sun210_figures/frontb.eps
deleted file mode 100644
index 8572584..0000000
--- a/ast-5.3-1/sun210_figures/frontb.eps
+++ /dev/null
@@ -1,21511 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 1 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-0 g
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-0 0 1 rg
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontb_bw.eps b/ast-5.3-1/sun210_figures/frontb_bw.eps
deleted file mode 100644
index f7883ed..0000000
--- a/ast-5.3-1/sun210_figures/frontb_bw.eps
+++ /dev/null
@@ -1,21509 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontc.eps b/ast-5.3-1/sun210_figures/frontc.eps
deleted file mode 100644
index 668c667..0000000
--- a/ast-5.3-1/sun210_figures/frontc.eps
+++ /dev/null
@@ -1,14114 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:28
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 1 0 rg
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/frontc_bw.eps b/ast-5.3-1/sun210_figures/frontc_bw.eps
deleted file mode 100644
index cf6e8d0..0000000
--- a/ast-5.3-1/sun210_figures/frontc_bw.eps
+++ /dev/null
@@ -1,14113 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsalign.eps b/ast-5.3-1/sun210_figures/fsalign.eps
deleted file mode 100644
index 197f293..0000000
--- a/ast-5.3-1/sun210_figures/fsalign.eps
+++ /dev/null
@@ -1,5444 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsconvert.eps b/ast-5.3-1/sun210_figures/fsconvert.eps
deleted file mode 100644
index cd0d973..0000000
--- a/ast-5.3-1/sun210_figures/fsconvert.eps
+++ /dev/null
@@ -1,1748 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsexample.eps b/ast-5.3-1/sun210_figures/fsexample.eps
deleted file mode 100644
index d9d5632..0000000
--- a/ast-5.3-1/sun210_figures/fsexample.eps
+++ /dev/null
@@ -1,1786 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsmerge.eps b/ast-5.3-1/sun210_figures/fsmerge.eps
deleted file mode 100644
index 6aa1bfd..0000000
--- a/ast-5.3-1/sun210_figures/fsmerge.eps
+++ /dev/null
@@ -1,5238 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/fsremap.eps b/ast-5.3-1/sun210_figures/fsremap.eps
deleted file mode 100644
index a3d572a..0000000
--- a/ast-5.3-1/sun210_figures/fsremap.eps
+++ /dev/null
@@ -1,2532 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/gridplot.eps b/ast-5.3-1/sun210_figures/gridplot.eps
deleted file mode 100644
index 8d10486..0000000
--- a/ast-5.3-1/sun210_figures/gridplot.eps
+++ /dev/null
@@ -1,16726 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:43
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-0 g
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-0 0 1 rg
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/gridplot_bw.eps b/ast-5.3-1/sun210_figures/gridplot_bw.eps
deleted file mode 100644
index f2a2dea..0000000
--- a/ast-5.3-1/sun210_figures/gridplot_bw.eps
+++ /dev/null
@@ -1,16724 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/mapping.eps b/ast-5.3-1/sun210_figures/mapping.eps
deleted file mode 100644
index 7a88895..0000000
--- a/ast-5.3-1/sun210_figures/mapping.eps
+++ /dev/null
@@ -1,1003 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/overgrid.eps b/ast-5.3-1/sun210_figures/overgrid.eps
deleted file mode 100644
index 9835925..0000000
--- a/ast-5.3-1/sun210_figures/overgrid.eps
+++ /dev/null
@@ -1,6080 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 17 141 489 645
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/12 18:39:31
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 false 3 colorimage
-a2c6>`PpfpiNfbp
-c-=MC\@ArS[FE^U^:q=q^:p>9U9:Z%U8"BIQ'I&WKp at pgMi3KQ3&gm<z*??.#zzz
-z!&uqt=BJ[*<E2"<3,rqXAnGY;OccH8UrLEodaHRneC<jOm-O**jlPU\hVS2.r5m(&kND$RcHcIi
-s8W-!s8W-!s8W-!s1>nTZEgd<Xf]7K]Y;+o_83t-`l>a,^:h4nZEgd8WMt]0Lm=6jZEgcYF`g\a<<rj9,pai;!!%"Y
-EBZQMzzzz!!$8/>_e)iK7edg&J8eoCMn$-Mi3M#['[`g_qs8,mHs;ecd1nAlL431
-q"XXJkii'Hs4#QJgY:K_s8W-!s8W-!s8W-!s8TI5[$[5JXf\^rSXl[VVnB[TX/i;0[^N$/V50o_['[3'
-P*1][MNX-c>?b<!6ULhR!!WW3!!!!j8P&m^z#mgn<!!!3-"onW'!!!"4BP<<^Mg9Sn'GM6k at q2F7Vk9TRQBmiY
-aiViRcI:7kjlPUdk2tdejkSYHmHs;thVQi7f%\s6s8W-!s8W-!s8W-!s8W+UM2 at CYP(%k/SXl=MW2QD`
-TpqO at ZEgclLkq:[P_Y$LI!g<RAnIX+ScA`j$k*P-4ZsPr('"=7()@Yczzzzz
-Bk_:9L5'kpFrMA>KS5#c['[0GZ_XCmf\"j*e'm%)g>:]CdF$A0mdB6"k2G:Xf%/F0hqul1df9 at Is8W-!s8W-!s8W-!
-N/W^HJUr&jG_q96MMd:dUSEBkJV8]0C2.L#D/E-I;#gRr"U,&Z.Ol&D&c_n3!s8W>'GLNIzz
-!!!6/#64`("9\i-z!/ZPhC2.L;KnUB^)2!Qo_83t!]"5Yk^UUe`e^`4?naYo0lK%$eo()A,gt^T9
-g"tTBe^`4Cp%A at bs8W-!s8W-!s8W-!s.>pUH[C*F?!UuOA6`AEBP;'S:/5M;BjG"M8P)JR!!!-)"?AJ&6psEC!!!TC
-&HDe2zzz"9\i.!<E9)!rr<$$O[>L?XISaCP at IrIt)rH;cAI,LUOY"Y-+qKaN3/lgrmma
-c-=N%n*fB"jm;@#s8W,lp%@_>mG[$_l07I4s8W-!s8W-!s8W-!s8S7FP&>/T;,L1Y6ps."4?5D^4Ztqb
-1c-^5.f]PL!!!!<)]MCA8iARc+!2RV/M-r&!"KJK&J5TTzz!!!!^4ZukJ=!&M+I=6O2R$`/EH$4 at SK7efC
-Q^?4OeC`F+lK[ZWb0&i-jl,1Wp at e4Bk2tacjQ#:\kND$olg*cukjn<8s8W-!s8W-!s8W-!s8W*S1,;Bk
-80]?(/1`=k)]JbWz'bqG`zz9he>E4?Q;29LVB=4$,Ml6pt$T<B)rtz!!!fO(Igk`
-91qoP9heAX:0_%/&eYh"F`i%XHa9r_X/i;?`PoU,^Y%2kcHa_]cd1b9k3;-pkih6ag=l#an+?8EiSibMgY:uWl2Ue`
-s8W-!s8W-!s8W-!.OlnS#mgS3zzzzzz!)ZTjF)uD at Df8-97oN>b8kM]_
-?XJ2.HiO-H%LrtM=''csI!'RSF`hh_LkpG+Hpg at jEH,uCG^-U&[&g at 1bKJ)Qbfnu%hpKj!aN2HajlPRa
-jR2I(lg*lqiSj1kmEX#&g"G'=j5^1>s8W-!s8W-!s8W-!rr<$!zzzzzz+!2Rn77Cs+
-C0Y"K2`EZZ5!ELfA;Z8%G'8%CBk_-iAP5ZhM2@(8H?s=@C4C__WMukUN/W47IZ9>HMMd:ZR at 1On\(THf
-[^NWpe^a!OlcI8jhr!>eq>':>l.atIbfn<&oCLu$in2o9k2th+s8W-!s8W-!s8W-!s8N'!zz
-zzz!!#AR6XF)*A7T4S>$>*5>!YG??=$rVDf:VpNLcW2Vl-G(AS%sEXGD[gZ*CQ_IX[EAOgqp2MMd:6
-F`j:IT");?ZEgdZbKIB(\)ui8n*f_rf%/I)fCAD$kih7)p\4">lh'iAq>'jChVQi7f'DYfs8W-!s8W-!
-s8W-!s8W*!!!#)B4(;Z.2`EYqzz<`W7=DJj]DG\Ll+JqAS_@:="iD1-h\It)s1Ocd&Z[CNiY
-T:_ag]Y();V8:!a]"5J%IX[cURr<4`H?sm[F`kgJaiMQEf%/F(f at T-Gjo>A\cd0r1p%@V8lK76kp\4FTp%@D,jS8NF
-p%A";io85-c2[hDs8W-!s8W-!s8W-!0ekCrBP;:$DJO$'4?P_^1G]CH$X[7J;,L1[7Rgfp at 8g*'H[C*a
-G^, at 5OdVW*UnjfiYHPUO]WA39]tM+j]"5Ja\p&@BBP;'tDf:YrNcoShS"#npdF#5(Z+drdp\4F7f\#`a
-n_DpTiSibNgt_,Wkk=`Dm-O*&kigdUg[aq+`5KUJg=lT,s8W-!s8W-!s8W-!s'B#<KS5#(H$Nq2A8Q1#EH,u*?XGfR
-3HK7_G'8%HDJk#VJTc3[H?smrN/XO,UU[hDZa7!=X/i\;[\BLj]"5J[['YL>KStbH>?b='St<!`X08_1
-]=Y\raN35phX'Uqs8W,alK[Eij6Z.!io8t]kig^Qg$S1om-O*,mdB9$kLnPAl07I4s8W-!s8W-!s8W-!
-s8T'tWL&s<JqAT%I!gs7NbE*>;GpD/Ci"9<G&q_G>?b<LDJk5bLLaq+MMd:dUSGN9]rnN at _o'BmX/i\;[aNUPWiE)*
-Za6$dR#6cYR[T\=TqT*1]=behgY:K<gt_>cmecnYmdBN8o^qhLp#=ujcHa_tk2uI6pupr*jQ,ClnaY8a
-fZ(qNs8W-!s8W-!s8W-!s8W+XN/W.3I#a5IQ^=&%P*23"R#Hu_I=6NeG'8b#MJ?m at 7RfkCUniZsKT1tN
-Q^=&U_SXdNe$HBe]Y(o#bKJ>^d^Q]pW2QYZPa&/HWMukr`l?$2]Y)"o^Zt+LjQ,Cflg*p(m,[6gkND%,rVccrs6f=C
-n*f`2lg*cukiq?rkih6RbKKqcs8W-!s8W-!s8W-!s8W-!Z*CQpO,oZqR%g=LR$a8GZ*AY&HYdM7K7ef>
-P*0QpC2.KuLPLY5I=8&mW5?Eg\[f8UZ*CL9YJ%W_\$ria_o'!o\?E*>Za7!/SXl.8R(U)Ef%/Ec]tNC`
-iV`WOn*f`*j5]e(o]G;ukih6okih*gjT#8[n*f`$h;.,Oj5T(Xg"G'Ys8W-!s8W-!s8W-!s8W-!s/DusSXl=*KnXMd
-EK#j8R at 0IG=]q2^R]39cU8"B=M2 at .KMlNeWXK8LpSt<O)\tc$qUnjg$^V@:g\BE(=daHRU]=ZA6cE++K
-USFTfYHPsc`n]A)dF$@th;.bsp%eFZjlPUcjlQ=6q>0sak2th+s8W&rrVHBekih6nkNDC*n`&Qfs8W-!
-s8W-!s8W-!s8W-!s8T.#X/rD(KnY5&FEE at rM1U>2 at q0#0O,p9>WK3+$R at 0JDX/iP3ZF[WYPa%E?[C*KQ\$riUg=k8l
-]"6;:dFHdt`5KU%[C)TtSr&;\X/i;'Xf]pqce-n&_o'CSk2u7*o&\upmHs<<qtoU at kiV$ioCMS>lg+TN
-s7Z0[naZ/(gY:lQk5YJ]s8W-!s8W-!s8W-!s8W+cQ^<YiN-9AfDf9Pu>?cl<LQdpcVl-GuZEgO3X-f9A
-USFTKPa%K"QBmi&U8"BST:a9Kb1+qjkih6^f at SL#e"WS2Y-+q(V59QHR$jA1bKJ)WdaHe#f\"j/]tM,-daIUQn*'!!
-lg*m.oCM>8m+^:Lr;?Kcp%@D,jRVm4lK[['n*g;Vs8W-!s8W-!s8W-!s8W-!V5:#fWMu/JQ'R`%TqS0]
-XK8M)XI>TH[C*EQ\[f,U[?m5HW2QYXP*2N4TsM)3]"5K*f\#$9h:L91[C*EP\@AH7Vpa#AV5:#cVP^5f
-VT-Wqgt^]5daICEl/^pdiSiban*fB"jo>A\o()A-h;.Memdfr>s8W-!s8UBicL(#ds8W-!s8W-!s8W-!s8W-!s8W-!
-s.c?a^:q=u_SX1,_QL&EP*2!G_o'F2`4s(%`l?$WiShMb^9tAVWiE(nU8#0-\@/iSdaHRpf%.dX`6lu[
-`l?$Cc-=qpfu:qLVP^6Hh;,rb_U?l\o()A9l08!<q!%&-kND$^g=kHAhu*EMp\4FJlg+QLroiS0e^`4,
-hVRGYkPtS^s8W-!s8W-!s8W-!s8W-!s8U[$f"&?%Unjg*`Pog8`O`Xlbfn;ZdaHe#f]2#Pe^`4*gt^B-e&]VOeC<"'
-gt^)rbK at uMhVR,:dF%FOn'B>+b0%l#TqT]Sbd"FXgt^]Eio9"Yj7Dm6j5]1emHs0&l1=N<p at e4WqtoaH
-m-jE3rr2onqYL'bqY9j\aN2H^io:"<s8W-!s8W-!s8W-!s8W-!s8W,;`5L-Re&]VOaN2H_j5\8'aku"5
-cd0qif\"[%e'umsaiVZB_o(6`gXXj)eC<"!f%/C%e^N!rlK[ZqjQ+nCf%&=$dF$@je'ljte\oDEkih7+q>&e"g\^mF
-k2tgnmHs&uk4SE?q"XXJkihC"m/-\Wj5]1_kNDmFs4c;_hr!>ks8W-!s8W-!s8W-!s8W-!s8W-!]tM,%
-b0&/\dbEO2j5]1[j5]7_jkAGBf\"ir`l?Z`f\+s2aiVZbj5\tOh9XEncd0r!jlP+Gf?MRbjQ,Cak2t:I
-fAkoObKJ)WdaI"/hV?oAlg*m0p%@\<m.'W9q>'jSmdBB*lM:8Okih6umdB,qj5T(XgY:K]rVbd:j/oGcs8W-!s8W-!
-s8W-!s8W-!s8W-!s2`:&eC<"2kND*ol.k(Llg*llgt]HN\_Z)tgt^]QmdB2ujkntQe^`3RYHQ^8gXXj)
-jQ,C>_o(-Zf\bTDnaZ/(gY:]GiV<3Cg=k9KmdB6"k4/!3q"XXLlK\0>pu:;mn*f`8naZ2 at o)JaikND$i
-jlQ.,o_SF\m-O*"jQ-@@s8W-!s8W-!s8W-!s8W-!s8W-!s8VBLlJ^^\eC<"Ap at dP,j5oCab0%likNCOOg#M,Qhr!>@
-eC;ppdc09G[C*F)k2u7*o%;UIa2c6ZiSj1kmHEcthr!>Ae^`jGkMtU_lg*lqiSj(elKRQtm-O*)lg+9<
-pA+O[rr2omq>'[To]YN&naZ/Eq"W\$h<jUsf\"jVs8W-!s8W-!s8W-!s8W-!s8W-!s8W,RgY9BR]["gJ
-naZ.qcd2C]pu12j`l?$Cc->J9kjIm,k2tgmm-N!Ac*=OYnaZ/Ao^qA2kiCgcgt^]5daGb>]Dqp2iSibXk2tdejlbgi
-lK[Zpj5^+:rV60_rVc]fp%?tif_>.7o()A-h;.Pgn+QJKqtp9IhVRqup!M17s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!o^qeKp%@1uhWEt_hr!>gqto7,hUpK5g=k9Oo((SkguIGTs8W,dmHrKUf%Ja0o^qe%cd1tE
-m,?p^k2tghkND7"mHs<.mdBN&io91ckktAVb0%l\g=kfUl0.?poCMS2hr!JSj7W*<r;?KhqYK"&gu%#Hm-O)if%0m$
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4Z2\l07Hmj5]OomIp8Io()A"daI"/hWjCkmdBMtgY;/amap(B
-kih6UcHb;'hSd at Ng"G'Rq"Wt4jlGL`mHs<4oCLeoh;$f at hr!>VlKZpMeb8_1lK[ZtkND:$mdp&AoCMSI
-p at e+LoBu&7s8W,np\4O\qX!S8p%A"Xs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8U?gc11>oc-=Mtl06O?ccs_Zh;-o2
-bfno!h=gR9mHs<0n*fi<o$5P+io8tam-Ma3`nT8&h;-oIj5]k,p>Y)ko^qe=kND3um.0`<lg*m3q"XRV
-p@@eFq"XXSnaZMRqu?]ro^qe?l07KulL431mdBNCs8V<Hkgn>9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W,UhVR)Eh;R>OdaHS#hVQr=g$.bccHa_kh;.D_lh0rDf%/F>mHr0Cc, at Q=j5]1Gcd1nAlK@?nkih7+q>'dZp\FX\
-j5]1al07a.nb)SJs8W,rqtpEns8Dopp at e4?j5]Usn+#r<q>'jRmHs?0md]i;o^qeUs8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!g"G'MoCM84lI+,/iSibQhr"8*q:=-Jm-O)jf at THYmf*4bf\"if]"5r&
-a6DjQmdBN*k2tmkkje35lg*m$l08$>q=4"FmdBMsg=ko[m/I"`l07I!m-Ns"ki_-lmdBN0m-Niqjmr!5lK[[7s8VHP
-m+0b=mHs<@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5W/"l07H`f%0-OlIXY>hVR,>e^aEgpZh&/
-q"XXas8V?Jl0 at R!aN2H>_SYa/maft?e'ldqeC='[o'>W-iSibip\3\,ipH.#oCMS1hVRP_lKRQtk2th#
-p\4LZq=!e at mHs<4oCM/.kM+bGg"G'Ys8V?Jl-e#.s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V3Bjk8>?hr!>X
-m-O**m+9k at m-O*4p at dn@mIp8In*f`+jQ,1ShTF!`jQ,CSf\"p3g?@balK[ZtkNDd at r:TaUp at e4Hm-OB:
-o_SF\o()ABo()8<n)rlsq"XXMlg*g"l2L\]s8W,emdB]<oCr"RkND$]g"HE*s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W,^kND3um+gCOj5]1`kihR,naGr8rVc]kqYKs\p\FX\mdBN0m-Mp=bL+_biSibdo((r*k55&Q
-r;?K`o((DafC/1sjlPU_iSjY0qWR/,lg*m1p at de:lKdd%daHS:p%@\<m-jE3lg*m,naY;cg&D!Mp at e4[
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!o()A+gY;,_mHX!%kih6nkND$kkPY8Ur;?K]n*fl>
-oChnOcd0r"k2tacjR;R+gt^]AhVRGYkP4iIp%A"Ur;>pJm-F!'io8tmq"XIPoD/4Xm-O**m-Ncmj6>gmlg*lujlQ+*
-oDSXdiSibXk2tdejlu$os8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s6An7n*f`8naZGNq:aQV
-q>'j_qYKF>kj7[&lg*m7r;?!Nm_?NOcd0r8r;>^>k5"iKo^qeCmHsW at p@S"LkND$lkihC"m.^8KlK[['
-n*fuDp=S$Mkih7%oCMeRq>^Kps8W,blg*]qk5+rNjlPUVf\$6(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8V]^oDejjjlPUsp%A at bs82]js8W-!s8W-!s7c9^gY:K2daH^tf&#9?oCMSBn*f#cgZ[kbo^qeOq>'^V
-p%S4Ts8W,\jlPXek5"iKlg*m'm-OZJr9ES4hVR,7cHb5#h#73Ml07I4s8U?gc0Xf`kND%.s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,hnaZ&8mcs*&q>'jPlg+9<p?(N"m-O*/naZ#6mHEcteC<!rdaI at Ckf:`a
-h;-o_q>&n(hZ*WUkND$unaZ2 at o)/F`q>'jNl08-Dr:fs[s8W,ko^qkNp?Lr.p at e4[s8VQVn,NFfoCMRs
-bKJo)irB&Ys8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih71s8VfdpAb0mrVc]iq"WRs
-gAh3Qs8W,^kNCXUgsjj'm-O**m-OB:o_/"Pj5]1op\3CqgAV!KlK[['n*fW0m-X3-r;?Kcp%A.Vq<I81p%A"Xs8V?J
-l1t/No^qeMp\4U`r;Zfsio8tcmdC,Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Tg
-o()AOs8V``o_\O_p%A"FmHsK8o)8Ocs8W,Le^a*UmdBN2mHs<$j5]h*p&+acrr2oVio9e0q=aOUp\4F[
-r;?Tps8;fmrVc]iq"XFNo&Jcjo^qeRr;>dBkjIm,mHs<4oCMVHo^;/8s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8VHPm,[6gs8W-!s8VQVn+QJKs8W,mp at e+LoB#)qlK[Zoio9Comd9E/jQ,CYhVS,*
-qWdA2rVc]Ykih6okhb1Qlg*m*n*g;Vs82]jp%A"TqtosTo&\upnaZ/8lg+TNs8;fmmHs<'k2u7*o)Jai
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Of\#NUlgF3/q"XX\qYKXJme?JMkih6nkND!ik2G:X
-oCMSGo^q;.k4\NBqtp9`p%A at bs5N%tb0%m,s8V9FkNM-ns8W,`l07m6p&"X`q>'jXoCN"^s7GsUkih6n
-kNDO2p&4jflg*ldeC=Nus8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih6sm-OWH
-qu?]rg"G'MoCMkVqt9XTlK[[-p%A%Pp?V&1p at e4AjlPgolf[Hon*f`5mdAuihuE`VlK[[7s8VZ\o(2JEoCMSQrr2fl
-qsNn?p at e4[s8V]^oCDJClK[['n*f>ujN#<]s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s6oFFnaZ/Bp%A1XqY0aYp%A"Ur;?9^p@@eFjlPUJbfoJAmJm4de^`4Ms8Vlhq"==Qo^qeJ
-o^q,$iS<5DnaZ/?o()h\s8W-!p\4FHl07g2oDJOalg*m9rr2<PmIB`:h;-oQlg+TNs8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VWZn`f<&qtp9Mio9e0q<-r(f at SX%dF%FOn*f`6n*f`6n*g;V
-s8W-!naZ/Ir;>gDl21AThVR,Rl07EqkiCgclK[["lK\!4oD\ago^qeUs8W&rrVHBel07HrkihX0oDJOa
-kih71s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,\jlP1Kg%"V&g"G'GmHs`Fq;L;k
-q"XXZq"XIPoD/4XiSibPhVS50rT<8)s8W,fn*g;Vs5rJ+o^qeQqto$uf_YI at p%A"<j5]OomJQn[s8W,h
-naZSVrVuotr;?K`o()28mJm4ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!gt^]Eio91ckk+N>o^qe?l08$>q>^Kpp\4F6f at TlqqW6i#o()ADo^qV at n,NFfg=k9[rr2<PmI0N4rr2ofo()DD
-oBbi1s8W,cm-OE<p%S4TmHs<2naZMRqqg2dp at e4+cd2Xks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s7lBanaZ/Ao^q;.k4J<<j5]2"s8V<Hkk"E;mdBNCs8VWZn_N$WjlPUm
-n*g;Vs8W-!iSibYkNDO2p&G'lqYL'dr;?<`p[n+Mp at e4CkNDR4pA"FXdF$A>r;?Kjr9!/(s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V]^oCV\IhVR,`p\4=Po_naes8W,cm-Ns"
-kkb/Pp\4F\rVbm at k55&Qo()AAnaZ8Do[VLBq"XXTo((o(jmhm2iSibdo()GFo^_SDo^qeIoCM>8m.BrB
-hr!>Xm-Ma3`rH)=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W*~>
-Q
-0.36 w
-1 J
-1 j
-1 0 0 rg
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-0 0 1 rg
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/overgrid_bw.eps b/ast-5.3-1/sun210_figures/overgrid_bw.eps
deleted file mode 100644
index 7046ecb..0000000
--- a/ast-5.3-1/sun210_figures/overgrid_bw.eps
+++ /dev/null
@@ -1,6001 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/parallel.eps b/ast-5.3-1/sun210_figures/parallel.eps
deleted file mode 100644
index 5baa971..0000000
--- a/ast-5.3-1/sun210_figures/parallel.eps
+++ /dev/null
@@ -1,988 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/series.eps b/ast-5.3-1/sun210_figures/series.eps
deleted file mode 100644
index be928fc..0000000
--- a/ast-5.3-1/sun210_figures/series.eps
+++ /dev/null
@@ -1,970 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun210_figures/simpexamp.eps b/ast-5.3-1/sun210_figures/simpexamp.eps
deleted file mode 100644
index 7f56ceb..0000000
--- a/ast-5.3-1/sun210_figures/simpexamp.eps
+++ /dev/null
@@ -1,1197 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211.htx_tar b/ast-5.3-1/sun211.htx_tar
deleted file mode 100644
index 3b18b86..0000000
Binary files a/ast-5.3-1/sun211.htx_tar and /dev/null differ
diff --git a/ast-5.3-1/sun211.ps b/ast-5.3-1/sun211.ps
deleted file mode 100644
index debe2b7..0000000
--- a/ast-5.3-1/sun211.ps
+++ /dev/null
@@ -1,140969 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software
-%%Title: sun211.dvi
-%%CreationDate: Fri Oct 30 12:47:04 2009
-%%Pages: 578
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMR10 CMCSC10 CMBX10 CMR12 CMBX12 CMSL10 CMTI10 CMR8
-%%+ CMSY10 CMTT10 CMR6 CMR9 CMSY8 CMMI10 CMMI9 CMSY9 CMMI7 CMMI8 CMTI9
-%%+ CMTT9 CMMI12 CMTT12 CMBXTI10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -f sun211
-%DVIPSParameters: dpi=600
-%DVIPSSource:  TeX output 2009.10.30:1247
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro 0 0
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
- at MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMBXTI10
-%!PS-AdobeFont-1.1: CMBXTI10 1.0
-%%CreationDate: 1991 Aug 18 17:46:30
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBXTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBXTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 105 /i put
-readonly def
-/FontBBox{-29 -250 1274 754}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF
-E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207
-BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3
-3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2
-F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707
-C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E
-BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632
-2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1
-879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D
-141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF
-63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46
-4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B
-FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD
-395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003
-82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1
-763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019
-165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E
-57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED
-E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5
-178DAA7C97C35EAFA47778CE03E863303582D8A99017F26A160DE09CAF559887
-BB7542DAE9D93635D7935E338FFFB7604DEF34DCD58044CED8179C3D5D153580
-B5DFF72BA41025750BC5AAABFCC548DBC3B40AA114A259480F7B979FC60C0A38
-A2A17337F124FC64D6D3B0AE140CD95202F8E25D2A5E87041F837647C29FD3F2
-81F74B7E43F45DA22971625A4876A4A0558D7D3CBDF61767A626695AD266B569
-0F406D8A4873FDB8B9ABE5EA5D5DEDC76A94A2204A79B3BA51C2725ADDDD581A
-103D8F830BB5AAD1B5FF4A270A2D96EFFC09E7DA49F15005486CA3455EAF0AF6
-CD8B3E7AFE65C2572276CB9A466F455B36EFC39717C2BF639972D09B4AD24800
-54315F0B9D482DF70DDDFAE6BA7232743157D0821906ABD931EFD1663FDE6221
-51E9F02CD62A034ED67DEA76CB859C879788F9A1831A1AC4D5D7EC5A09144481
-16CA2CAA7C229DE470982BFF4B7D3A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT12
-%!PS-AdobeFont-1.1: CMTT12 1.0
-%%CreationDate: 1991 Aug 20 16:45:46
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-1 -234 524 695}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
-C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
-3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
-426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
-D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
-E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
-6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
-A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
-0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
-85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
-F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
-C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
-12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
-048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
-0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
-741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
-9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
-306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
-CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
-1353CC1FC512D59DFF847ACCD058E2058E262194FA3370E876BBB803BCC86609
-B8BBDE432EAC6C13261A28739A53C16EFA6271A92A2CD064F081395ED8E128E7
-9067F11414984D2F7BA9E153FAE76ECE849AE1D73D30499ED90D3735941DA9CA
-1AEEC1D3B8A1592D1D8EB167E150D8197C341105DFCF09414CD7F36EDC918BF8
-453512B168390413C5F9731885E06EE7B378C923AEEA80B5C62ECD7274F23284
-B290609EE41FF287DAF03E405DCF3D03FB75E5EC6F1982F71566F7A843C3AAEC
-153355FA4FEEF24E0E5E86E54491E4C5FE16869EC47F14147126748F9A1E6F4E
-E9313BB550258FA93E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI12
-%!PS-AdobeFont-1.1: CMMI12 1.100
-%%CreationDate: 1996 Jul 27 08:57:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 60 /less put
-dup 62 /greater put
-readonly def
-/FontBBox{-30 -250 1026 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
-3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
-EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
-4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
-2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
-323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
-2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
-D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
-5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
-0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
-A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
-2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
-00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
-CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
-99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
-C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
-5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
-55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
-A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
-3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
-F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
-F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
-EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
-67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
-923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
-A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
-FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
-1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
-D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 34 /quotedblright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 62 /questiondown put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /emdash put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB73439CB0DD021D44A7C11BF295E81733
-4DFBA460FF3D654F9FB337E99E6D66FBA87A817EB9CA1536C84833870E3626DA
-55D48DE850D3E6F6B29DA0E7C9D681283586F208DB8D58042E3A7CE55BE84822
-C98237911453E479EAB65AFEBA3F61A763B40E74535BE56C9D8D06DDF9441741
-5C9D9D917439368736619717FAB4F06E2C329AE0BA411F3FD522D9C33AD8369B
-D7DCC9DF993778482F35F965973DE876FA19E109AA198A00658AB3F0D8E3DDD1
-08A573F2D525202AFC57E05D141E6C0BB811E1FE280EEA002B7A45BB363AD06C
-318D320D2C81AA5DCC842CEF66E7DF7670588CB39C9F42EE7763A3A17372432A
-173BDEF7ECCEA297CCDD76A835C36DCE9DB8F8CB66CC71B4920CF5BF055A5260
-5B41A5373BA6E4F63C85671D979EA5EC30D22163E6D206168A3827F465279870
-CA80E6632872F721BBCC622EE4214BF723551C846765495FA9921E11FE1A950A
-53150C3F5D8595958A47E0B16064CC3AFD65DA294FFD111153F4F233BC5468AE
-69585C16CFBFCA32C4B96C161F47B56661DF84FCD8ADD3EC086CFB6BB5179BC3
-A5469A1CFBC8620BC711F42D0D3139BCE4E38698D9C574450DB43B5A19FA6D54
-0368BA9F7A8DBF96DCD0B8968CD194264E6DD10A958846C278B8C2BAFE7AAF8B
-44C84C955F1A89A13E62A054BC76CABBBF6296DE00A79CD7C8C61C70F127618E
-9975B59A880685E126F57AD80F8F4D376E1B476BDFDAC868FB6AFAD9D694B561
-001623C4D9F55366D053B52F2B09EC08B81901AE0986C5350312E626006038AD
-AC15FE313FCEE1A2E61F8992AC00CA7BB7F997707EA377D37EA6FF35BFBC2866
-A572B31491F9B80445685DBA5E62F166E80589F768FC95BBC79158C23B2F1BD1
-25816F1486A64F76D99A638AC0DC101FDF390811B3C118C2D972B2E7587F6F24
-7F1DB2DD922D237A7D18FF08FD665355CFBBEE799D3BFF11CD94CFFDBA3E725E
-DCF4CDE4307E3B199D91893A365D04F43A5305BDD2538E28A0788E061F3A621A
-B4A04E5063B47F0109C1693A284FA43E8F1EA9B68145FF51C005D3FA40713BA8
-1879BFC3CAA881B9D885A0C1AA8BBEA7EF469AEFA06ECD3C26AABD535E9FBDC5
-CF858BFCD827A42CC5CCC4F1353A38204E89F80CAB3A5536F848EDDE1590A2A0
-EA53A5B5EE4BA2E44C0C4D37FF0C41E493FEDA6F034B72EE3B707AFEB7C95948
-628FF2D0AB46CE262FD48BE38A9EE135DD3B964F2AF6FFF727171FB2CFE03BD8
-F283FB6832C3E3F7CBB8BCAB0832CF2A8E614BBB3247CBFF413C62B66BA53CF6
-7389EECA675BFB2D7009025507988F15A89EA5E8FF18D4EFF6B7F9ED4839B6A4
-4DB456F527A910A57679CAFB925C92C2FD4006211445542DB24AF25F0A8294A0
-F1BA550A79E1DF637DA2BE0CBF54E3BC900DE2705FA5D39117C6D60A211DA570
-1767730698E8B894239BD9C1479A7699323FF448A4F09CBCD2043D643F79E5E2
-CE906E4CB48B87061E31ADC961CA1572AC8421BF39F7B411A9BC24ED53983C6F
-280083C9FDB651061980B7EE9E0BE46BAC8438B7132A178EF85333C42EC96662
-9492603E81D660C04F6E987221B84C126C873E07F3B98AE2A812AC2568AA2E8A
-72C259E99BAB20F278A375F62BBE150E0C31E5503977EC2E48851DB6ACF56291
-7751546B0A823DA0B180607D7E017E26DED254A742FC52B76DA76B749922A186
-E5289E8C05C6A9FAFBBD7636A099EBADF6E5E1F82280DDE4673C718D89139309
-780288A213ECC662AB646F272F2EEFED28C8423DFE4E8A3221F759C38D165583
-EF1402CACD01853182A20C5920BDB3E4A15B06A9E047D14CEC33397CC21CC60C
-CF9CF4590E3E1BAF10124B24938C06687474F6C62A824D7935380221649956FF
-88A63BFEB557BD68DF393A2E217C7AC2E311A5BF6A50CBA00E93CB093D28BBDA
-28E09307384AFD3A366F7207C59FFF6B714557C15537208AABE524C14DCF26DB
-63246401AA21F177D818F42C5BB582410C524971A226064657A2041A3DA2ED06
-32F94AE2EA8809142B01A1EC9BC2F523E666C586B385171FA974D457E21BD6B4
-CE7D97BC179F9152C1A608CEB6684F76369BF1CF68A51D367A90A723FA3C21A3
-93CE8F3EF2282C21BD2937BCDDC2C3C630E2DD7680E6DE9F785B60305B8D25EA
-724D36E8804D23D32D26231ADA92D9CFB30385E568CFE7F16162292FBE411AF6
-011471D6E8CBAF3BE10C9C97E5BCE6AD1D3A8A5836DE65B9DE2373B97CFFDC47
-49DCE584F79C8F2CE89AE45C411B57863F996C647DBFFEEC5BA53EF4C1E47150
-950C3380201D0E8B42417636D76233CC5A5993BA2CAFCC2B24079E8DCBE3854A
-CF739B22F069F3906CC35713393E35E478E2DCF24C79E4949634F80C0A4913BE
-8C147E4AB70874F6A10C29E5AA2AE8FA7C73A64503D3F02E0AE4908DCD680F79
-ACCFDE541BE5577C220B0788E583B6B457D63E1CC4F259BA014BB0AE799B03CF
-1A95A0FD44D418A096CC887E49B0C96E0A957CA809828BB6DB415F21BD74B9BF
-682906022563EDF64ABED6E71E417E07231F360BAD0FFF44DE7964C45117A266
-E7153658832787D16FF877084BBFF2CF3270A5F7ABBB3C6F3CC78FC5625362C5
-95C0B9E84437F1DD7816DEE4416F7503A13939074EC2C903CBF4F3B94894E0EB
-5FB5DF79ED323ADBDA74F03B91D1EFFE255BD7601643F717469291A7FA7C3D5D
-A3C493E9AC6120C44DB2134183EDEC41A13C9E9F509E117D6D291129AFC32A49
-820DD87A9BBD788B7CEAA564B0AC2467663F1880D25C07B6E48BE4697DA24DE1
-16008C5006656C73EB8ED8CD98CD5C94B273DDC62BBF8D5DD9E6BE69C29F32CD
-BD20BF7DDC2E7D3A6DE671E3768207CBA6B349305B425715A496A06FA9182937
-DA37B722A3EB307A903E0DAADC63460691EC785E9C70E95F97A36038D2313D3D
-AA9ABD56BF08D7693BC497332FDB06BCC30146498DD44B241D76D3825B05FE5E
-81D3DC62B89BEE1F84AD229F19066F04A921CA4F5762F4E7B33AF63E67AB139A
-D345F31EF338DBBB231734F7BCCAD965CE6197B30F1107F51B40C9B6A46180A3
-9BC594F71A2D1AADE24BA422A0622F183B45310BA8DDED8685B353D09E9A9F89
-15168CE022422321F41054D129F92C9F34B2AAEB39ED0450842EBA0E5815C9FB
-4E21DB19AC5C0038A9D189340084A196E3EED7D3A401D6CC6F0EA92C566BDA37
-B8AB0A856F303C08ED9321A064FC2D6082BEA44B489483C2564E7A8E03976832
-49277FBF853FC5EAEDBE07C81159EAA175E7B503E480D8289EF3F162BBB78D59
-996AA611E984F8DD863BCCEB62E87A6BF04CB920EEEC9526FB6A0AEC1D59C00A
-611D0442A2C1283D0A3574553521655C6408AA57DC0AE854F8EA25D0D6C8741E
-0FA9D1A1D69D376AB28F01045EC42CEA17E6FC874CB190E63818FD96FB0389DA
-A3ADF5CECAAEAA0DD0C993DC934510C7802EF5C98BC1853EADE10B7F07096BF4
-709D65195934D513D1602B20C11DB0A43959E70905D23C02F0E1A097F825EB31
-9818C5BB1C9FF73A4D02E454BE2C29624A642AAD8BFBF1D0BD71CF2A664DCAB4
-47A8AB55C97066E05C87734AE7B9268C5198D1638CC1BAD7C0BFB2CEB58E66C5
-2FBD7A493C19AB750DAD935320F954F24600FB4514F0CA5971CB9114855E94E6
-3E62193C6F8445CFEA9FA91FD727EC56341DB1F5B5C550E4B68D46B3FF212042
-883DBC856E01FB5EBA7871C6FB49A77C1F512328077A175B6CA33150895A38A5
-F40C2BB584A2D74A21E245C127A338632E6DFA0883FC7DC599A58B5D24F48897
-BED5C958FEC519C376C5ABD4594C5CA05726EEC267A673748884A832EAF19B27
-F84028DF17FCD6A2D95B8A15ACF6087C65F4ABAA19681D70E55AE1B2D702B731
-149FD6435A6F677BDC33D847F7948CE84207C21D9C68A05B764DBF5C3B51754B
-45EBD4302F0E594FEB2CDC8F0BB566D555F8671BAAE3DA7F189402B287F78DD1
-A44A047B195B708906E3A4C5A1AA953EFA64B86E292AD56AB7C75ADFE988AB05
-B900FBB56CB85161F44DE1F575768815C91B5A23770433D5B6A68DD41978257B
-7E616B289C52A670D5526E395BAA4D6E7ED660C8A2C7CBC3E04A806563335B28
-6505661F8F7E012DA1E68FAF6E6372FD7DB99059932AAE142B36A798E38F7704
-BA30BA424EA4D81AE67FA3598C95BFBB1386557F5C68E0D9C1024C2104303FCF
-E3A8362864B6F28CDF28B80F50619A7513F5E12B3093DB2BD592A87122EDD579
-12477A9C6536498376104C9D750C85630818EF7EB2C49CF25AC4750BAD67EF3B
-EEB0709BD43EDC14999541D455CD0A55DC4D9301A27251E512763288031217CC
-A1B65F4FB717326E6789FDCE63DDF1CDB3BEB36033C5702808142A1CCB0BF57E
-005668C47BEBE8A4BF45C86CEE87E485D543A438AE2E6E2BF5CFF511B534BAE6
-2C4B6672749E58A91C50A3D44AA0334B0F7946D27A0BB7ABE8632DBB09C7B25B
-3D6EEF34C7A9667ADE14845A7179D232259AD40E8124A8BF81F2B41F698DBDEB
-B44677E4266853E71F120A6DB801436777E0037180F140DD6B87DB2B2D1B5C26
-F326EA89A4B95CB0B82F764D65505BD050600A25C51BEAFB6CAE565A07BE6A8F
-A7EEE15F80E9CA72F831AED5BB95DCA6ECA8756726C3D8243B38239AA628BD34
-EF91B96065E09068992A212CDF87B6FD473517AEDF9854D4E62A705609DA3CE8
-70DBD37B5F69CF8A7E3F14110552E3AA563DEBB2434C85A09CBD8A4461F87ED5
-D1AF1C8EE4833EDA23C4FC46DEDA2CFC77D9366098D82409891F7D44D663DAC0
-9F0F410B59437E53EA25D5C33F7C6150F20D033EAD0BF2A567DE2B62D262865D
-98971AFD35ED018C674ED3EE2CD67EC831FBB4E0BC0CC8CC8A4CF942E80148F3
-0FF8F85E2C27643382BD1FC3B13DF57638B211AD367EB0BDC69E793D282D67AE
-7ED6564CFB28E05D672DD6C81E855C8782BB170142CA8372A4ABC48CAEA6CDFF
-DD690492536C5DFD67829E909CBD491DE71E4C57929FD05753E4F62B1E1D4D32
-79AC5ED666620DA726063323209A96A9D6CAA8B36A5254C3907F5C5390219A1C
-B1F8A5F2FFEDA7788886D5C751AB741F9353661BA51E7D222F66E2DD39A3C341
-FA55A29B5C030886EDA70A7FCE0AFC8E762D3DC5EAD05B1931802C4558177B9D
-740DE6DD7195BB4C8EE3C79ED98B11D23BFE16A449A03BF83BF1BDFF7AE1D11C
-76C6CEC837BF2CD744C2821653B9F38DEAA861086467B9666969BD5FCFE5C761
-4E4B5A73FF0D86D88CC483CCCE0EEFFEB2AE776DBF77A9189A2E0174C5CF8F8B
-C1649EE31A1B6E24DB11C42005B9F81C173976368B16BF672D5E3CBA440CE8CE
-E7ED30223601668EA4450312B2C17EBBF4F8B9B4B3CFA605B4C0CDACD87099C7
-887A6A25D452FE3DD7C7156A9701D8A36E89D693B6A50DE592463D9684BE1FAB
-FF20CB4441F69CCE1BBA19F2BEDC98491F9FA4DD8A82644F2EAF750A5C93A5D4
-1B0FB7C6D3CE2148D1893FABC36B36004BD896D925FC98EDE33CD621EC7A22A5
-7003D04DA7A4F5BFC17365E243F26EAB54D97D19FAA371A4FA318DA32BBC0F28
-ED366A6C724A75DDED9C47893EB789E88AAC4BCB4A355DFE4E4BC5D1B98E0EDE
-1ABC755D259E8DE4C96C17A73706C487BE862D11C9EAA08ABB90726688AFD379
-3CFBC5DDF7AAF4ADE0DAE96787FB3E53F2F440303AE4D884078C1839AE92E7E5
-E1BF0AA47DF2664055869A259CAD759C126D03ADC39CE7CD7FB2451B3AF68CC8
-3F889CF2272E2F77D86DB31F61ECD2530A2B34B5E1F0EEF287E0C1F59D161ED2
-2B66B8BFCB3E79B06B8F2E8FB1E7BE4542956CC5C53177495DD931873A1AB2EB
-6B3BE6F58A5194C48BFFDC203DAB8FB7F5F0DC54C7D6211F6CEB648468C06BA1
-02D5216A8492174F2149F316866D17CE74FC3B4D67D7A6C822B85E27A5F490E7
-C9F60CD5D17666A01033F8EEF4BAA32FB49C84BDB048CE4D9B4415AE6FB123DF
-A75E7EE6BD0EAB310FEFE047DDF882CC47B0353B91BADEA64B02D402E0EBA726
-AF110F0D26932F007A6B727255F1EC4330BDB50B313B6D3BE299B2279FA9CC88
-E8DD0FB3BC7D0C8987A6AFF652A80999D1576111F12BBB159FCE1C9E0984383C
-BC89903756261555CCAC6E72B1ECD7BCE53AD2F3708825ED6332B0A5BF607F21
-6A4FD49955B524F5C98F881793505088F3CF2F5FFF55482EAE6DC46E496FD872
-F8207879EA69CDDF0CB4BB181B4D9D951627BBCAFC802D77179F497CB56451C4
-CEEAF7E2E62F1649C8D27FD8D7723EE0FF348A9876F1CD06BFEAE48A76910208
-ED96039A5A1FA887C3724105A6EB2F096126331EA3F9E0DE04108DCB9A85EE5A
-268A415D2D59FE8B91C0936390CFC1FDBA90B83E132EE62F650D0E779903BD0C
-8BA546618343387FFAE571FB28F4786186C106AC03808BCB23BBE43754A967DB
-03E8AD6F2FC4FC5D4AE13BD744DD40E7034E0E255583056A4AD5D2759C569B98
-A92E3572CDFF0338D4663727FDF0A6B821B83E9C4FC9958692F09342DE095CC4
-AD1CFB33CADC5463CCCCDA68BA557CF8B288122AD9137B7C45BECF8003168014
-52E021F48A2AEA1DE7D28383FEA9252E8C9399E1E66989878DC9E8B0DBDE2597
-FFE15031D701D3515E1AD1F314D0063670E9004D853A7D6CD36003EA06FE7A2C
-FEBCD75652274CE0EBE3792C293744ACC51D95D71499B67B63941496582EF8B5
-04C08625F21AB3E43C01E96F574BBA160185474D2C5D8A6DEE24A44F83C33B98
-14B8D4561F50EABAD8B8BAB5FBF8503AF905996A1A7617D0D308E6DA9D0C32F8
-3E5AF9FBE4C8FEEE2E35ED2A89428AB1B99C7ACB593DCD20A36F99B81A488C6E
-758E86ECC98408F52CD49BE493FFD1EF56AFA24B1D89D1292593BED5F806B165
-F257369DD8BB7C627D1EC905959E0A0FB4656D14DD86C27DAB365F704851F2E3
-27176B0E9C109492D29DB73DEEF74D916BE2C0E8B4C9D2E28E6321EEF8D2352F
-E7DF3563FEE9492F39EC890B1C8919E2C7370F05DB3CF9CE5D39144E44864990
-42CF5B4AF252231D62811A217B14E8A0187189FBE036CF9092467F31806AA70B
-4D9B7774E3E2BA095019311B8ABBFC41744047F165966F57CEB77AD3B664C376
-0E16EC287FF0C53D9635D7A1A7DEC98D5DAD478C3B839F83A392AF4963FAA566
-4092D94331ED03142A7838E1362F5C237AA7E687D94F626F7AFF3AA7474A7DF6
-C403C5A958C0B5D226EF3054324EBA57CFCCDDB8A6FE6AAA113D7F832C1C3541
-A7DD13B35FF997485009FC9274877C59B62871D9C63EC6BCAA5FCD2D0D7B3DE1
-6A50197CCC3D607B5955A4BD89774AF4FFEF5AA4C8A27C342E3D7039A5DEF86E
-512CBA5ACA4FDDCBCBE05EF9C0A5BAE2C42C4B9D7F76D720F7EA8B96B2251EC6
-001EE61C7EFE9D00747AF01199B205B7F22A811CB91782AD46C26A6C536A91EF
-A41B7E0342D434DCF3AC731D19B45E2A95FDA82E587E4B128D119A5CD198FA6A
-C8FCCF566CBF9F4C99A44EC18161A1AA0CD1750DA5196F3804D002D213D0BEF0
-7B3CAA159145B4486E22F86C28B5727F48A53160287F9DC8671466FE8A2FF818
-3B059B24DF899AE1779047D0831B93B80EE5D203F92155A1BBA7D0E9F22845C8
-202BB45911133A30981B1E7F571DB87D1EA980F4BC3FED2FDF786292EA403204
-D63EAE635FC1E1467288AD6FB5C9ABBCC568F521F72A152129B089F397F9AB07
-643CD45528BFE327BE32B77791EAC63CF49D5B0F16DC9D13F1E7DDB44F6485E7
-F7E1D7B62DE956C2AAF2DF0091C169FF51D6124BF25D1477F9A0F5E7FF27D6E2
-96F33123FAD4C48CEE6A6839676B0CF9FBE026BF02ABA10845CA33990F147E14
-E7EDE92E07FCBAFF7BFB31826BED12BBD4323C1872873137372008E01C5D4DC7
-E316F129A91CEC18B085258DFF7EA65DE5A8E9B48B220AE66355AEFC5DFBF9CA
-30F35CE0DA9E056AEED94A567EC212C3831CC9CC6CB16FDFF0D9F4C021D19BB2
-35CA75B5722F39602CF965DEDCE1CC5C8EA8D2FFBA5BB5600431416EB8FED0FF
-0F4A53ADAC4E0B4B65BD90421A92C9C38AA6537D49C0F969D35AD4161C926D3F
-5B2BD863AA4D97882D6C2D9AEC0903FE5551918EE6295AC74533FC1AF0D222ED
-886A196AB9EFA0EAA67DA4C4AA276872A849EBBDDFBCA7FAA011B8ACA5E2EEC8
-F9E62CBFCAF692A1729A09E140ECA0B955B12CA1C466E2F2D8776F754BA9F9C5
-DA57140846FD9FBF7A3769D8E1B6AE09425097158AFD393AAFD7934832D9F797
-DC16CCF84C9075C1831AFAB238ECCBB6360AF12C91B4A81EC7CDC4A98B33D5D0
-8BC4A77F44DF777AC3EE8BA6FF3C8B9BE815A9FE0121EF4327C6E0F4DFF0F4C8
-2DE1BDACA16CCBA63F9369D4DF8FCF8865F54CA8BAA70E3EEBEC8FB2D96C51C9
-5D580E7CF08E1E25F96238825CC077B78B882D4DDD94DC0C1B2979138A4833E4
-DCBCB6324DD5B38B41062CD02B8B4EA090B2E91F36B368CA9FBD2487CA6AC117
-AFF8ED81CAB8DBA473671EE355024CC783DBB127AD578B7C0A418A28EAC41709
-A33FB215F3DC7516EE4C485117FC9780A42EBD0B8ED4B4BFC652B59225D66646
-AC8C5C4C85C70AD5CE24743CBF557959D1D1E7C1F7CE707DC33BD0322730012D
-235900BBDEE6EEFC35105BF6890A6DB96B570BE0F47BF680B9F9931ADD9E9885
-031C9D74CFE6BA384081A7877632C84C25909155A36CAE72A595CD010A18D689
-4C645D2DD6DCC7C163AC9BE6162D457FA40A8786D8242572184730496920E918
-0FEABB3A4DEB14B355BEB7A77E9E999DF48FCCF5040AA36DB7B3A0D77159EE53
-9DE84CEE53B945BD266812651E2EF0B0E9BB43AC3E4B094EBB9A2B8A658997FE
-A330EEBD3D82539AE025E94CD9FE26298A5C4899C07A5102D8E0D6C5A27733D9
-E1029192577F04FB2D820806B7ED83DC902B778C0EFA7D09AB6C0145BF4E4CF9
-83C3BCD08DD7CECC9FE8EF6DE320BA8E1C0353C24F6E4575A4209DA11501ED0E
-41D9D5CC653A9B1C6DD5AC35B6A81185B324DEE9238DF138E93ADB93E46EE1E2
-A8DFFBD867488E1A8D878BF72E9AA291F3B5C9EDCCEF338AF53A28DE9307B434
-481EA06AE42ADCDD7D98DC4921B0175B71E2C6E7D94F9428708EF232D49BB177
-6145FFAC1019C03644BA48095091F0CDDF25FF7C65BC30991EEB01863050B259
-DD945D98D1DC28FA89D7B8EA4D0644BFC06A60588F658310D908977B8621401A
-8B658067B8CD4B614DADF1A83C50E78563BE809C6A9F809819E6C332ED4E7A90
-421B28A240826A57690E29C165A3D49C86549CC0213C609A95E2BE178BD7C9BA
-2348288954AA57BCE267105D924A0489BE9F9F60306F844165AF4062D5348B34
-CD78D246F44443EA88F4B38B5F015C8450562709FCDD14511894C246FEBAC110
-FFB1EEEF6EF1C18005AD17B19BFAD62B40D116DF7E604913777DA73D580359A9
-4790ACA55E263B34A679803F1D1CC700BAFEEE33B3F31139F30487A72F89FEB9
-4680AE0F513E4A1866B095BFBE58013DF186757AED8C0B83203290B9FF343197
-D6D14D9D5F98AA56C1A43A9EB5FDC019F42019FC1DE869698EBCD34CEB62223F
-26ACFC9058D39851F62C071C5539C5F53F23CC5DFFB16DEB9D9620F7455CB458
-D616113D0C0B906F6764797147B9E05406AA0627B1803B1C830D612DF01CAF47
-AD8300C4F91D7CE48980FDB1E999BEDEBEF149BCF02F5D46C4EE1F91927FB419
-9A22DD8A76F03FC195A585A397AC559E532E68E4D2657B8CB8C0A19ABBEDFDA1
-8BDC0A2A756A869A6C6C28D687A9DD0DB9358C12129F644909E0206A57C662DA
-0437CA9D4A1EC28710822CA1F3334ECD33FD0314454A9E3F5474A9B42EE5B299
-7A3E73F856070BA286156F3065DAFC4811925B2736DE150982E38331E15171D6
-5B9718F0CB80ED2215117343051CD0FFDA7E78B5D866581248BEC1CA81F48B62
-255080A36E41258294FE74601153B5BECC7BF6F62664E556D3126BE1A9E4445E
-52518BFC1037F6B81A463F9C203E4AFD537303C2C260531290790813D5880C98
-0E41D1742BD9D2B13FFA77562E0E180763D6784238E84BD4A030630EF09A82F6
-3F49181433F795CE9A8364BDEE56E199C5409C8E55CD94302EA3D21799903854
-A4314C2B968F143CEAE31C78B818AB12590C4FDA6BA868A2D8B54B9DD772A882
-5D471C9D9A70B751AB204605FC656BFB5B3369949257AE76DE90FBD26E332EFF
-DE6D7335CC7DFF91FE5BD71A871F879060373A1B47E6C8C8F3FC9543498BD37B
-64DE85F7CBF4C28D38FE8387D94C0FD841BC8382347B48C6F0ED8A83E4910D96
-936A95F09DC8BB49D45C109318777B091ADB7A5168C567893652587387B16002
-AEFD628C94B3608E1B1B6C6C5249D36623BA467A34D65E00875D1542D96D8F79
-77F8F187CE9EC79B3AFC123A2FF77CDBA0E5D3CB9D084394AB8E047C4149DDC5
-BC700C6E3389C416E82AD9ABBBF2482F49A8AEB923231EE0599925E3D7B21A11
-04F7290653E2A93429D63242429E800391FA80D96AB55DF0E16B2CC9B9C4994E
-38341779F7821B867D09D32CEF97C5D6A01722ABD656BD44197028EE2525C772
-A3FC99625E0B01FF8522548EA89CE03A1C186D78335A1AED9B41CA28EE0491B9
-68CEA78450B007471EFA7474238B90E5F98684F542A81486A750E4432FABF50E
-D69B479FC61920A3CF9C34021D9D57ACF7D2E41CF06EA1A1B64A4F6A7B45AE8C
-392EABADED669B41C519EC2EF4DBA29BFF3316B670F751FE1A33C7062A712EB4
-D228D8B9FC06CB7FC258F25042BAFF2680957DE0AA966ACAC1B8FB98736D0544
-BF64E3D4085097461E3CC14AF43F74890B41DA81165DAFAA6687D2CCEFBD7F71
-043BB6F07199449AF2842B3DEFFB6CA5108BFBBB488C2BEF8EF2E7CD6F45F92D
-065E8967871A3799B492743C40BC4966E1B70698C516CA77D6FFD9DAE7441A12
-A3790D42D97B5D2B806333E7FA4B8BA2DFCAF02B9A3AECFC62349214CAB8105E
-02CDA3637FD30537BDACD9399630864D7B851F637C3DCAD155802E13EDF34437
-19FCD43E5706F34B7D48BAFD373083F3E9AB9A77254CBC818AD5CF4EB552D559
-5C4E22864B40C2A28A8FCA0EFBEF5BE72473A18644FFD1E3FEE0E70BBB3FD7A1
-0E53E4EDDE509044641222EE6B7CF9D9316BBAA8B28F40FAC504633FD973D77B
-BFB43CC80136B8F8120385A534743A5851794CD65F8FC92B699996D6A629DCED
-A490EE35F41B2D72897B540989280B875DFE2B1768A87A6373AD3AA76C32CDF2
-4FD544A95CB8A561D059DE149334C5E40B21F6FD2B8E41AA9866F3382450DD08
-285BE055145A2B89332B0930B3B352614038970E46D4FB9F5280A6B2D5641AC7
-AC55F2582F5AEFFBB40F0EFF5633D9F5FB9F166A146322BD592C3D85C91F3EF5
-F6002A4CDD5C95388EDB53DB8198B6E77A04AC91C1263F622452601CE5D564B1
-7F87D0D22E8604BB2AEB1D917AA35BAF6A7817E4D005FE09E0FEC38B0B15E766
-0134723DFD3FC5FAEF33E5F95FF678A9DA7C679FA75618746DCD53107722D7CC
-B4D796D6C38AFAB3C172DB597B055128CBCF4CFBE2B041EC6EE45FBE829A6784
-4779333BE530C3B6E55F7F36A4AD60905CFFA52152FE377D5193419F345620E9
-35C9FEC6AD70EA8AF73465A653834EE7AB03A90CEE0C1976B81CCEB03F04649A
-6AFCB48C9A06A4AA38C7D99D1A816CA1A345469E6D89C0D52C83158228A9B631
-4228A211199C7CE07C8EA59FFAA62AF7BE66A9CCDB552E0D1CA06D6E1E4A1562
-94816CFCC53366312B18130082653BB2F3DBD919A2F24A9FFF6D36300BB9F7B7
-FC33CD417D56B29817F2F3D10EA4664747103F31098E9733C833AFA21232EB77
-57FCF77624CE44D87D0A5E8406DB1D52137AA5BBD6BEC4063FCD55D3EF20632E
-89E3CB6317A9B152AFE3322DC213EAC76BE5DDF89EFC9C90BAFF999C90E64ABD
-A83F200AF2DDB9F15398219B426F4E078A3E0BFF41D3AA55CFE5433C452CB6C2
-1B32E373C9E69FB5A8A911DB8A55674BC6F13EB1F680EA63D5AE9B71623E81C4
-FF8B544E3AF0E8F8E5ABF6F191442C2928CFD3B9E55F21EFDAEB00899BC247B4
-B72757EF6D8979387EEC0F92A3732C17A04C43750293FD5225225E4F97012296
-641B7502603A97C041265436950FD7CDFBFFF7098B1DF56EB33AC8DF94726DDF
-EDD72E6C6AB96BDBB5A3D0F25EC05D29C8CFE715BDDE2F41BFF7582015B91E17
-0B711C95D88A59EFD1838F9D7E0D604C0C6F779EEB4980D658ADEAE4E3C4EEDD
-7C035ABBA4E94B5D46D746C519874072C8A0157F295D39FBC0EBC602AA0726ED
-F500BBA654E879DC49ABDA1E2CBDDD45EDE551235BEC251C5DC48545BDD33FC5
-A4CC39F4A1CFCCAA9AD5351FC83F64D152E829EE2103132AC17D92D0C415B0BB
-90914CCD36A792822F764B94D3294DEC6F1C04A95F83CC61D96D8E244951CF6F
-4B51EF691A7C0684F235274BCA4E877FAED403F5698EC74960C0C0249AABC887
-AF85166779548C356083CB43B6D72EAB07E29B13D9852DC752842DF687DAF86C
-6F1540624C1D147080035507CE0FEFD544E92298E32F3D3F3D4D092CE7DB3C08
-51F0C4E1689F793286DE7B88D879D33E1C11FACB49E57DCE865E7494A75687C1
-361D8EB050033EE7F45294B6F8DD99974E44EFE6AD22FA9F34F5BFD99D3EB6C5
-1E8E69846ABC8B8AF4447391AFA9FE4AEDC30F87A0957968769381C6A7D8777B
-A0BCBDB3784B22C5DC5CDD6E1140BDC225978AB41F0ECC3694FEC08AEA278853
-CBE034D003327CC57BD87075A61DC1993376EB76A2149CD154DE8B872F2118D8
-E4D57229AD9FCA8B10E737BC0261772C13E7CA92E57974A25490FFBB92D43400
-1DAE7E872991F3C24D0656462EB8E45A965E68E301433FCDC3606ECB0AD92866
-F9B5D259DF699EFFE8C4D659CC9326E0E6A4AD973CABA344EA51953734F61FEF
-414E16C0428EA32279A52B68D6AD9551B31FB3E21C6C2FA3DFC19390521B6951
-8B3FD17DEE0E00D0AF929E3897DF6DC0EA5189841113440E7CB54A99B7D0A94C
-B0FBB9503F9CC92244623C694D1272C6A50FAF778A40CB1F148ADE8EF9CBCB80
-DA6444E22107C2D4F9AFE72CB50E41C5BFC68BFB57809369EAA3D9137D9D7ED0
-18602FC89DF2D010C37D4CE736CE32332013027D57ADFC674C34447B91B6A5B7
-FE73EF494C3150B6D79BFD1D66CD28FC439116FCD50B01694CD4E6CA343FD748
-7FB195E900CFE5DF4E319ED97ABB3A9837ED5381D93F9E0564F07826B042B607
-63BF5320032D63EDF87AC3C9C06A1AAE107FCDFA1BCFF844AA54C0A540D815E6
-E2E577ABCC722EE29216AFFF975C2801CF9BD8B6A63A6CCF98ACD7993C5612B5
-71756DD5D103B4BA21913FAB18D9EF5FA83362E95E0AE4EC327C6858914B49DA
-7432194339667D0FA573BA83B3707E51B31C3ECB23681ED901668C5C3E9EE7AB
-9E593C76C0077C4FAD1BDA5268C6D38B96A72F4C45ED0CD52E413765E99B12B6
-46F81D368420DD177B8CFF97B363F2EE52B7E2D39A5FAB1276BDC9978393950E
-3F470B219CC27F0443C8B02D80CFB417F89339A04901C293D2CADD8E6E9CB150
-DDD6759CD37AAA46BDA5BAC7147DA5CF7AE5EA3DF8DA45150FAD48AFA729A513
-FAA2CFC349AF0E0735672AB45DC75CA6B72F0EBC60243C923A1F85E01C934E19
-7242E363929F6FE6E96722D6E0A0A87ABB44949E49AAD377A099E84C97A35F40
-67691B95C95D9D546A6938D993ED92F12C9D8BB8F533B55A7551C840D17A79EC
-DB42DE4DBBB1A5A2E9ACFB206D527B714A769D4C584DE13EFE87F21DB5694037
-219244E5FCE1A76393BE29F3C7B848CDC92DDCD006CC5A467FA7E20043E8B374
-6A57159B3C4DD12D458964D8681FA5A2EA1087561263930D28403099ADCDD9CB
-B55BA9D8B5A9986E4FDC67B07E11E8D5E697F50BFF36959CCACDD12865EE6A31
-301D3085EDC3DB796DBE6420208425B9861975401D0D57D4E684E60A1BE33D81
-38623A72C254C538C736F80EB9FA6690869639625AB3AE2AF1E0E307905FB0FE
-850647D6D86BCB243D7D59E4F6C2CF54FEFD1446F8EB10EFAC97A4DCC4513534
-B49D83099AAD8ABBDE0B25B1E51E223E005356155A226718CEB44887AE2ECD2A
-F3960898233EB3F42C3880F25785299854D827AC0C6AE152BAE929F0E9ED60B6
-DE7A8D4C3A543329C4F93781A94B53798ADFF5ACFD325A9AC23D9BBE5C6EFBC2
-8EDCF1D811A7FC48B5C37D265A85B7AD31D62B1AA9F1B015687DEBE083EB0958
-3EEC86D3549F9DA109BA1DD4CF20DD96C69CFE1BC3BE4143CD8B73C952773D9E
-8337E5D46EA8E525154BDA85880B819D62908DC9F320FAE41B0617A97FBEF261
-B7C4BEF6EC9ADEC4274E46C2C005A97C877A855BDE2451FA95E3337F4D26AFDD
-0BF46AA30A9AE939524A3B99C85E872DBA90E397D4979B3DFFEE6207C2B96463
-FCDC3A3B66B5029F4EA250B10AFCFA6355E02FF3AE52D1228C0097C53BBA65A1
-5B1E1F1FE93848268C4B8DB901F5CAE15478C79C77D910F019E25448ECE74BFA
-9C0B8137E42A9B54EB08178A66EFFF8FD9070EE1B3976D52DF6B4A5F44F6E8F1
-4B17465CBE09F66E5938EB91BE6FC073747952A1500C249388E5BD36AEC1DF5D
-94D309DC7E77C9F93CDB4ED309E79ADD1735A32D9E6115565DEB0F09DD499E91
-062DF0EB15712CD9328FFCCB56E08273BCFDECF4F0936F61761E42A128A6A08E
-DE6FB51C7FF86C16B1F0049F3B2B46E00459410D9F9BA4112FEF16FF57149A96
-505A5A0BCAAF7C9F990A103107604FFB894AD2974989645D9C77B733F048D0D1
-6ABD6BF44C002E9B49FCBE70FF5647AD46C0537AF41252B987A131403D2403B8
-D15D8F75189F4B64A34E16FC692E1BDA89ACF070888E615CAF284B651752A6E7
-9B55A190D521761ABADB6436420CA13F7786F86CC02C7A5DBD9F99EE0B4A4716
-C8F8A431C9D11339F4CB004D14B4E2F04761688DFC7FC95F209F31A0F20C6F81
-F43940D7B2D5868922527C2E6F4A5D6FC0435582E52CB5821E320DA9482A2DC9
-DA4C281A722C459B4FD21C61F96381ED5BA0CEFB5A607B2A6DC3B8A3E031E3BE
-045540A2C4BEF5C414338F82018ADBE1482F6DD971CF6254C0BD597A225ACA3D
-AF7E5379C3F6D06391CF77475EF74980EC3FF73086FB883ECF192096EB3B876E
-D703740DCB799C168B2FE61AB4B66F20467E794C2E90EAAF6E44FBF72D7CB9D1
-12BB005582D4DCC96A59DDD164B43C374C21DF3420EFCE01B46848F11D5C7859
-8DC80CE8B50E0950D07942FA406A27ECDFCC198309ABB3D32B1C38F50A69E547
-C11ADBE3198B08C55353F9876E0698DC0954936D443658C7A58D9ED61E7E26D8
-C958F383D878E13E364899DBB8F24C3D43F273063FA0CA60D189432E08DC7EF7
-E4D081130689F4C7C221FA3F33C0DEBC749D89038C06C9BD93309C4F2491DFD2
-A795C7A175A7C2172B013006CE7412185AAD48110ECA125C35D8CFD498BBF36B
-7D3AE40E3FD04728D49FF3B93037DD8D50FC871E3E7209D74C44C9234E7836BD
-B685098635D58FC5807BA56BC164AA5653D457CA473925DF4884CD0F036C377F
-CFE339583A4CDE7A15C1A036CE1505FB4BF20FC0C69CC6F9267AC8808D691D31
-23F6BC65D71CDA5366628163742208B7F91119DB801466873BF2ADE146EF419D
-3028C5EB2B19121A3FB25C30274C8CB82A7D32C262606A2D2FDA7CBECE4C3F7B
-C0983F718974FFC030D32298A34B433AB7B969192E98DE9DEE1D2B6886A585E6
-62889C020B6EB5061C51CB3755C4D983DDF3A356AB850C527D89953391519CD8
-51B70827AD2ACA61DCA97377A51C75D5450A4D4C2B94BF180E1762C38F3B4821
-06B3C67476DCBE27384B719472C9F40FE6BF9EA553A723692D912C09CF54F1CE
-BAB1527B34AAC07BF3A09EB8067587106D9FD1B05147EDF5111F88DFDEB9ED21
-9B046EB315292CC17A3777E174B5B805283A71E4A99A802A244F3C95575A8B1C
-A0F9A0C57EB6583C61210DD017FF9F3F590E65CADD852C851C5405FC981CAA63
-4459C7CD8550460EA1BA09F095A524B40DB09861E531CED2961FEC286EA8A0CB
-C714CDE3B97144054AD09F9458D1680D3C7DF12472815839A3B5735863C3F3A4
-95D770943FC0C15DBD147834A50865A54A8E16056F20541589F1E86679FA4E83
-E0962F15A86A12E785FA113CFBE1689E8CB8661D6ED5D6F75ACA2E1E7A8E2671
-4C961A0108F2C98372BE8C1952439CA554DB3881A25F0C8387E54E53F780A2AB
-2271530AD8E07C6FA3A56EFEF3DE7A57BF0DD75F7CD4778DA87E20333ACBACFC
-3A5E2A761C5B851197FC657AE47E152F9C468D7C79DB8C4A1BDEC998232BD19B
-66B64FE879E264C8A3599569E2FEA6822BC0576E3999EF8DB22B7E1D1965B4B6
-973A7DD93ACE840BE9F4726AF930E81C56A863CDA19AF12CF19BAB1E410496CC
-2212DF4E93E887E29547C316A19A22F6289E66973F56805E53D1DC89E2FFA164
-FB486468933182F9AA9ED55E7F3D9DBACB3975DBA562BD38B46ED505A256CE0B
-8006D11D1EA9C646FB9C845DB29BA0D9FCE9DCFA3C16F8106CABD18FACE7AF5D
-126663CF040260D0D48B477EC2056384238D5FD65493F74B0684692EADA452F8
-0972B8F1F223EEA87C677AEC06534CF615BE04303F8524FE7D7B48D146F7062B
-C91F3FC95A33F84F675AF3B94C09F390C221E4CC86072B4BB9D8F78A0C4A2E68
-3DBB42AC22FCAE2ACB30C3D912F6405EE4D2F4ED99CE37FBD3618B65816DE26C
-B4DFC6AC28FE6C1C1CFFAB3DE13FF6D4D09579DF216F9594957B9D4EFEFC2267
-DE7248E3BA4FF08165D85E1D1AF2942EDAD5C3C354D9047D128C649043AB8904
-959CF0342552319E1FFE4850E62C6DD1A38AE7ED8F4CCFB2708BE84B0C25F727
-FBA30F77064935D4CEEF3233A785D0F35303A4FFAD2FC318238927DB55881459
-E2A8DBABAC2C28E97F0E79A71D64DE67473DC29C8D28C7829022C2E8AB641D88
-ADA4FAE13C1A51F23F71AF94DC05D8A132697C74FD2B6CD8B9FFA0E540A7B645
-EFB8043C5DB7B350CFE981843F01AB27690F58DD55EA2B62D81284F4834D390A
-735B7FFB4EA13ABF47F934FE47125AE7E498E6A4674516C812D6FEBB88DFA717
-71CC9497E2C37D2628A582D80CE7304DF6F26569D1EB11164479130AD8709300
-FE437476C3D88006B8F7A1C44F3F77DEBCDAB5DBF3F53B183013AD9ECA9B00E3
-711B2DC7F79B9803B3AEEF824123421FE881214ED4F48D81D8D44058DAE2C582
-F3D2EA49BAF581CEE0A34E7FF56F05A07F2A8EE1D5B99EF02128FEE57CC9A2BD
-F92DDC2754E71AF91C40835154DF45882235E4B04100FFE7AF26B0AB52079A51
-8E5F087785B2DE417E33A7397586411A1E40440470E0CF263B7214E6AB8D6E16
-4A64A9EE9D0DA4DDD005C7719F35F4CADB5ED2521E799626AD4C248848D401FD
-73D1AE687608112AA25DC7110514F7989F73FCA253A953F1B3D819D1B84ACC1E
-6B622A24EDD9FB9C350E28E28BBB57CC86A45E0843A3CA3F4612A815FF72A7D2
-CE642998046A2C047DEE6E97EDB1EC2933A9D44AF1CDA32CC92476D9C64D8065
-2A6BC2B0FC40C6C5EAF67155B35F5298F7FC754AD63F72506080379A2908E450
-D8B2CAED1A9DB18D9F61CC0B3E2D4BE990B88D44A6AED9D5B1B6A5BFDB19D968
-FE55B9DC2704529E6C19EEAC7F09E4C2785ABAABABC2F5445080992CDD8566B3
-B2EA382A5B2DE296D2A18832DB49DEF116628C0DF5968F85DF61B72F1D454FE0
-4CC19EBA3359ED3E61D736237930CEF5AC3D1D0BE02172B99D369A3D88EA3CCC
-FB9D3ECB39B860744C66253D4FC465A327B2C0110C797C1E3CE7F3E46A7A6981
-3B57B414BFA08A3A5EEF88BC97B31F13B9E8A4D1956EE5879AA308900E46736F
-06260E2DA8A88ED930417D1631C96728B294DD4F610C7EA035911620ED8662F3
-B5697687935573104E5116CF74E982E1D34F0E8627686D73AA52AA7BD1281A78
-215AD585F5D42985654635F96D53D4A635EAC418D654E20E3B19DD8E6F0E5B21
-BD332D62A33DD2D72F31B04C34EAC133AB7E0680F6D7E5A7F12F758A452FD63F
-D5EEA7538F7CFED5BA55EE202FCEB568B9B4BA61B51EAC5D78B87E658721A436
-56DAB8B7E8EE28AC80E5F103723CBB9F29B0C175F13C65AC69F7BF068F2E0DF8
-F99D74411B7B24BA3A7149A9FC087E3165866B33F6C7E2F7BE6B85FAB60B5368
-A856E691DC067CC5FEE7CE5ECAED99F905CAFD46C50AB922548659AB438FAE6B
-6C3C09F957D530363119ABA2FAC5E0A8ABCD728A06228E0342C29922FB4F7CEC
-4664D5581B1CDC62E2AA473CF4361B6DC60F88C26522D9F75FD58AD0D0C34FC8
-9C28BBB97EC4F4CEC5A0BE8CEDF1B0985A7F8B8EC5AFD6C9F17A46438C2D1762
-F8A3FAE8F49CD26D0A25C51BABCEF6E207357C05D1D18A266EF6F50C37FD4293
-0DA3531FD742D1D3CECF63C68F51AA583CC1C7CAAA77A19B1A7696670A517870
-FDF8360B5248EF25F812C10CBA3C07129194429790DC4FEBF36713F24114E60E
-FF635C19611CCAB0D94DB829D2940EDCF2D2468C5B57BA1FC13D0F24FC6BB43B
-0965DD72060495EEC6D71AD9AB0B620AB900B23840D58DB3CF9F3813A0F45A65
-2FE351FE47669397BC9135AE929F6BEFB2A712DCC4FD4C09E6B32D8D6B4EE98B
-538346DDE105506B553954123773E7983E829A244897041F49BAFD433CA47C92
-12A2B7430435BB89285B59BBD896C14F3CE0B2B745ECF6699D1C8B420BE27F1E
-E04092AC219F01D93032296196F464DEDAEE3265F9E18433F3D28E7D051BFDA5
-452AA9CA782A0CD1BEB91F5C09D7B77C26F1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR12
-%!PS-AdobeFont-1.1: CMR12 1.0
-%%CreationDate: 1991 Aug 20 16:38:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-34 -251 988 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
-59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
-51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
-DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
-AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
-45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
-821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
-96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
-9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
-26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
-140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
-1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
-1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
-377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926
-2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E
-0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A
-4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA
-F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16
-FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2
-4E82E498FC1B42722014C6B17DD12335E62AA3A7E2B9C7696EFB68B5B0BD46FF
-DE521645629F982F465D160C3CF5FE8E5E713DCA6BB454201ABB90F5DA64546A
-7E81240DD20BA52A5641BE7F49591FB4DED72A9F0C5F0E3FEEA3993113FA3573
-AAD8BEA19E295ECD63AC355E493FF904A334CF3C4B2F05D35D1E97B0CADB8FBD
-BDF8BBB565CBD97D3306FCFED92678953C8A14C1CD1D6DF84F34EBB794BF485F
-6D7B029BE279807B4460876AD864CE225AAFAAC07CA5CE89CF435AA949F1B05A
-C3F5BDED3E57529B5F16B278085AD4B08420E86B5A7321E45CF85F66532E5F99
-E9B6C4BA221A4AAE20D6633E0A28B59501410FEEE3E6E473050F688F6032C498
-1F51813EC2625E622EE53A53BA4711B3A46DE390DF26532C4D5FB8F32B125E6D
-07D51A74BE2B345FEACBE3E38C83F63177BEB8F1DD0D928143BBA25AF8CD818B
-8D2AA54444BBCA253D1E3B2944FDE0B5E5ED2053E2CCFDD0D7D3BA97E0879FBA
-6B54E65C3AC870FEBD41E4CAF6CFA5C4D3A58F04576DDB0437B3368BE5EF99C9
-9BF5F0D1A08848AB4642F36D7BF6CACF7694143E15724C1010CDBB5D1BF57F15
-FD5E0FF847B73CF2A6FB1912B353A7736F8CE995842C679E03CB90936239069B
-F801580D8DAEB7F0F7B225DD674A8A9B5BFCEE110A8C0A8CD70A984CC3BF7B6D
-4E21D7B472117EC1F616012248491A5737717390CB8F3D4FEEF179F2D25D4FA6
-8D7053153BA613E1456A800C81D3E7DAB80B2302C29641C8A9A548941070CE3B
-B6573D1253F30ADB7850A2E0980EB519B25EFC55F48D6BAC3E8DED03B7797A87
-E1C4ABC2DBA3703E7CE14B9604840CAAACEF680EA1624570F525BB474A61F699
-37BE7789F0E3E70A2D4537D647E3D592C3609DCB8F8D69B368D373B907038276
-E7C2CB12EC56AC100DB087949E12700BF553003A71FCCEB42D1FBE1C9F54D7D9
-46D54369BF4910824A8ED43C201C7811D6CE6D4B9F80B9BFCCD73FBCB5A371AD
-8CA1C8DEFB68FA5B17C2A1E03CF1E32CD7CACCA8C2477FF7CD07B2A7076458C4
-2185D246390EA42ECB68A3D1B59C0C4D15D7E0C9200A30F397CDAB806E894BE9
-2B550A330484BFFD4E4295231D915DC167B0E6AE459649F2735AC9CD0CCBD75B
-B86FDF8946C6F16D781F877943CE5D7344105C5D6E68D0AEB0D916ED6F0FFB31
-F43EA0D0564FBADD08EE9C27575983A27DE5814610D0A6BE3059D598B872C568
-290A3BBA7E237F20FCC984897882104EAC09DC808B4D067BFC64AF5B9B568ABC
-36E1EE7BD8B802D290C4F1D4A502575289876EA466593D4A19448A9E58068F19
-A827AE46284B7528BE3ED2884D060F95934BDFC43EE060B3E528F05C4517451F
-62B548C21B7111CBCC4B7A586266181767A91463367013FD9858AD9BC51453B2
-441A1D5A4D3F329F5888691EA7EEE0286DD73E7E46BE13E4A1C73051D7D7AD71
-B535DD987127D09899F1512DFB1FFCCD5D4594113A6ECD85A750DA95C221CA70
-6209FD1C073146BC83DFA878355EEF3C29B3B2F6B4584C0B3BE4755DA9EC17A8
-C7BB7AB521E9A301F98ADE64EBFECF08BC19E7B725DE8EDE74DD39EB76105F57
-4F20B42A8A3597E74C5E4E074D1F11817C2A4164FD7CC0C417D0D438621E6993
-F3C6D14EB7FA2A0E7B6EEA91C93F867001F5EB967E072AF47D0980A089ABBD74
-B9334B6E67F0059735AA6217D46215F3B5B65B82B96A09ABC9F87633BAF0CE4F
-1B84D71A52F435652FA08FD405EADED5CB16701CD0731C0AE3DD381F911B7FA6
-897E0ADE8E7861C0BE67D21C92E64F0328FA9D6D4DBC3BAFA6D5B6E6A0A791FC
-26C58DED193F26C0FECE84C1D80BFEDC4111B9B5082ED49EBF0144CA693DB986
-036B42793DD45679C79D475610B876A875DE3237ACB8F5C14AE72A7D5A55A23C
-EBC9C00CC8C98F364B19A259166FFF2369A718DD82C77DE66D0703F706D90B3A
-495D7133178FA6214AF35E63F43E59D7BB251B1F58DCE5174C7FC79AEF610634
-617378A34EF5A8CC75E1E0BC8D9270AF839BDCDFEFDB5FC45AB5E1C5C6E128AF
-B045E23A7D55CBBC911CBACB0947864C29E8E204773E346B3C8A04AD94E1C4E1
-7401269A13ECFFC442CB36E7A813460E74084F4C9F8C5BE067320383AB4E16C6
-CD7FF582C88C97206F8F2177A348F973E37AC87B3BE6F62A7B7633D3861D3203
-57153A1DBCEA06F674D789355FC0785E08F98E9809261EF3CF61E30F3895FCB5
-C296EBD677C1A8546AD76071C1109609EE8EC174E095F0961610DDD78987FEA4
-AD5538F1334AFE06D03D2BB8D82F072A331F115432A1F19023FC1A1FC422EA48
-FB16178DDD19FF1F884DE84674A63E5DF7D8B5CB63234C64BE336CD71604897F
-9D257762EBC5B79E72DED0F38F36506876323C5C79632E965914FC71B73BD0AE
-FEF2EAADA74422BA83405124DBA5D3842A783CB7D541B0057C48384895A42963
-6A9AED15A5BACC748DD935FB252F035A3422F8D0F68510D210C2C0D7ED08B70C
-865029D3FF6FBA9D0770D15838963A386FD6C571EBFBCE7D08B5E73E07920D92
-A09422A17150D02946FF812964F826C12B647DF3135169C81469947580DDEAD3
-066A5F45B6AD472CAE5BBF9F2EED2344C7CBFD7238F73CE719DD3DC5016EBF43
-CB3CF9DEC26DC8089B6302C5A12B1C6B4F3B9EB64B9321BFBE26B15B6A146368
-9B44A744B6C20F48F937BB2D4DAE7E9BC037317C711F2EB7F7C4E3C60BB95060
-B51FBB7F421A64E2B297F24AD7D1F440EF97A4870C831B89C24E183D9D2FA4B7
-9EE818DDD83BE56D10DB8CE787489B9D9A7E3DB93EF4C5B699B8452C9C786478
-E19AC905DE7A99F2500BD0C70EA37B69C4EF579CCB400FC8C16CD5B7E6E4575A
-4895F8001BF11F7D68BF6AB30D278506327972C3B71A08EB3411BD9EF523BE6E
-7ED5C27E8426B2BFFAA95CE557F811BC73B322588BACB5E0BC39FEA701A3F85B
-8D4B5BF47D92F2B3A51C4176399467C2A4C1B862575B8B35090749653D42F361
-CF86B681738106DD501B213B397815E12D84F4A4C6B5A201D426E7601E462BBB
-C0394DC5AD7F137E7EC1403EC2DD427EDAE9143EAD0708E58175FFD5426A900A
-D9A5449EA5145E7DEBED3025394C1C1841EC747B578A2F4DFA92377ADE853440
-71BF551447CEA1982A8B1BD2C845B0FE8187C36941F05AC969BFF7D1F9DEC09F
-CA41DA45F2B7185B3CC34E3601056D23B8C02009BBCCA8424E6FBE82D7450118
-274631744274EA222ED81B7C750A5330B3B46BA0523D20BB647DE888BC644FBA
-768524875C9E7AC767450D19BEB6E593C6AE88585476DDD86EF228595F16C2C2
-8143B46702F15334D97FED2B63BC0E2A2F8755D3971152DB4914C58C52F153F8
-ACE0432436DC37C250CC8710DF036BE081B140DD94FF03F7233E95F9C47515B3
-DB85CCB6CC59853D1E61785F7F7FC782BF0080C3EE64677D64FDA7E0B2A94627
-8E60AEB33E825D1EBDB4117CB450B7FB79146234970E76A4EEBE643F58796184
-BFAB1AB32425FE23DF9779BE52B9C3206433691D5E5197249AD2D2D85CB32CF0
-B1846FF0CA7E78A4A189A7DA09535059A0A87BCC8CDFE85D8133596811E3B2E3
-A126FE300A786EB6708CDEED20C9CD659CFE2CE5C53CDCD569EF94BC1814A520
-1AA4682107B4882DD6E7544B148A6504F82EF0D8FC4782B7C8D736B8DA6E8ADC
-9BA1DBDF6A995E43D4A916D8D14AA0ED29E3FB8284CBEDFCD23DDAADF6ED6667
-B36CBB550070F4DC61D5E248FFB9A0E6D0C1E6E1AAFBEEF059F71F5CFA254A5D
-0302CDA18AACB55809E6581E3509B4132409F649BE9B3107FB31C6DEB92503BD
-F66622A52C00E2C7E3AFFBFA791B1B66799DD09D487A67823BB857F53458B89E
-E56C3A8D3A12E01542362D5803B132EF2BE214CD1212373B85D36BDA3784C79D
-D7E2136408C9061F7FB68B0EF736DD57703308C5F8B1054B21DA6469FA6C71FC
-D652EEE90E4B5AC1D8281217665BA38201EB10F6BBD7C4636D91C87F682625D1
-D5D406A50B70798483D28B2F3C41D31A21B20558A5CE9166FFD6AC2E5C3F6007
-0B77CDCCE8A4E95AED80B3630783DA99059CFC9B9AEE796EE541869B7002CB33
-EB08343F8F20748D2BA77CAFE553BED67C83499FC2B0FF7627339F98ECCC7617
-9ABC2A8D98EF2A2D7F5D2009232CACF2861D6BDD9171DD07A65CC62AE1BE3789
-D32297BB75D31E8BFA7D429CE2A9A147CE886DBFE16AD85F78367B551B740B3A
-D5B804A3D865036DA4A82A1D61D530DBDEEE8F5C8FACC760F24F323B6BA6252C
-0393DC194FF5D19D908DE3B925F5BAB82018F44D83936A5B4DC2C779C5062967
-EBD484293DAF2E6A7E480E03DFF9B56C696CC0CA9E684090F1A77F637EEA1A3B
-D6195268FA8D5A5E51BF4CDA3F39D866123F6347C34AFBD9E46CB6E97DBED3B4
-D358DFA53F44B6F35DF44BD3EA017DD8B10245747BDDEC602D4EFD23AB7004B9
-A1677614D3B3B091E79631EAB5C7CDF20C1BD436696C6E4322B43A5C1522CE7C
-D29D2F8EFA8CC976A598C1CED923CDD4B78213A5DC65BB830D1301F6D12A4D6B
-8FB9D60BCCD2FD29499C0018080AA0490CB5DEBDBE86951AAF7EF3E31207B300
-6CE237FDF45EE4E1CF4CE0D3938A0C47EDBF83F07405A4CC0D32982FD4A3742F
-4A5EAC235B55C532C47F2114EBB0C92BB8FAFD185786A921E1EB4FFB4D4EE0B0
-894A7A55870F146399EC6FCC52A6C77E452D754933002A73EECB16C3018A61F1
-D7131F94696B8D7B23327F64B2E961E08E6CFEE12D30896D281022E06C61A926
-3643335F9E1BA700ECE7E09749462C4742F8B3C3045356015CB19DA4F7A25BFB
-BF1E64A20D27E5F2BC9BD91BFAFE58E91DE8F6FF405837786E62F6432E3B3F25
-5915B787A30E4026896F9CCC4E59DF67E45FA3DF5282D78C2A1BE713404420F2
-978FD54762D992D3D6269FBAF5083A19130F306B8185B771D090C1A984187D6C
-F04A2968524652391F444B507F81C10DD7565C39DEFF14CF7E033751296D3F58
-D6039EFF7CCB5B83190C5876873460C75844B80E5814F00F4A139B4DC22051D0
-D652BB9935B87AD32BA32F7CC90378C58A75D851B0CDF67D02F8DC3A98055380
-D9EFDE44D3FE2A8C27D938767E15AB09102424C244C1457DB57733BA19102F2A
-321E083EDEE209BBD0ADCE44A060A9D74A649668644491AE48A55765D75D4198
-EE34BEC385D4EBCA91B1426A4C863E3599ED5A26225423B55B7691E9158DE18F
-71F29911F33E0922242400AF628DA72BFAEDB9E67AE2EFFA6F513C1130C86B92
-3CBCE096747EA85ADF5E9E1A9275263EB0CB3122529496EF7FD8936FC98F7249
-2C054AE2F03C7FC65DF5FF36564E6973BC0CDE0FCCB981A3A2F88F3FFFBA6334
-9F8FE3385E56C4A4CD12C87068357931F3C25C8E78A7A0A1F8916CFE202329F3
-ECCC48E37DA8DE5D4C7346284A3DF4CB92055F63DA790519801237CF0FE83B9F
-5FDF0B488EE9D0D39875D80DE7AD5E9B3659F839D77EF1389006DDDC0D193AEE
-EC5C35C4D5F4B49963EA9405527415DBC1EDA8536D868C98B4A1D377B06D416B
-DAA92A7B83D78C7137B6316769B0922B59FA96EEE68D6B53228769209B553EFC
-D7D477B0032905B417626E5BEAF5B99466F4DA885C86292E22759E6D10008A63
-6FC01EF558BF5C168AEC491B91A44E2599D0E8CE124524514CE7D85C8EE16474
-F43E92F8318E0D20C1E4F3C94C0BA253B45CE1B75A4C8CEE0E324512248B7572
-09DD7F4E530308A2597744DF5DDE0F595EFA43EA3CEC70A70D5ECC36BB4FCBB0
-2A6D7A7C23710D0BA83E715598CFDD164C8A27018AAD2031E07871CC90122069
-40E10CCD1D252E430B8A198249ACA2FF4EFEC8577A2D1D1B3060E93B522EE044
-D526B3F079748FCBE3F59DE3CBAEF62B71A9EB3B9A02119618A19A0ADD184E95
-5D4F294C857786058B76876391C2B10C02A98D9D9EBF24B17CEAE7E073872D32
-34F75BD0E32E5A6B696D11B922628D812457A0FC5AA599106A6CE8E000438542
-DF76234EBAEBAD4728776CFC0DD4465ED151DEE16B3119CE79C50317B62CCDA0
-FE257A37A8049F268EBFC5E24DD058287244545C2920A9ECC639424387B4D930
-F656BCF3C2EE676DA272287F73A06DAAFDD70F6648780729A9A86CCC785E4623
-BC7FD4BE2CC1EC5585560F2B072F100588177FB47135DEC09B529916B82C3AC5
-D9DE366E5E00C1E821E98AE9A1507097A9152E341D792B86ACAAFC8107E48D17
-19F19EBEAB35AE907B8D5D6A0F0CDA90B96B2BB04AAE2228AB4F873F4BCA8C79
-A9959D73748EF3EEBEAD0FC8276193776C69224184A38327242C84D7AEFAD013
-CFAD7C6C1DE05FD2A0527305E708FFD54E72F733BA384C77A220CCF6035BFC56
-5F8D16D0B9F28DB461D3F48DCEF034D02B089747BC195267B303342BF01AE140
-A5F30EED3F56C7AC702B948AEED75C93424CF3B47DAD20D7E75B7EBA25B9EB31
-42B7D65C1B387D907218F08E6C388E5DB4B29155D30075D72BE3F401940FDA76
-4B1A05414239963EC20CFBA89F4CDCD7BE2F2A33265DB21BAB5CC988CFD11BE1
-4B6527D0B4049AE582C403601460CDD138DC449AF7E8EC16FB9D1C7E3BB1CE44
-68E86BEE15D75A30B3276B15B60A2C8069DD092798283FAF212F7CA2CFECE02D
-99D1D7A83CC640BF879A427CA0264389F7312E6915F53FBB50106012B562C9D3
-FC58B5B7C7C91966F81544849B5CD23B1438A85DC89354B16FC59F672E5045EB
-2CD3E32C96CE19ADE35AD59307E217C92FF23C297502747D4FC1A6A51ADA74A0
-5A34DB9D9C25D44060E7C0FC1004FBBB2E5010EE0DC2BD7048F8C8160DAD7AF7
-453BCDFFF452D3DE7E09C407C36CB3F15C3796FE51308335DC65E4E1AFBF30B9
-7681AC7915968811290A2F4E49F5D0991641109C6E0C2E4750DED4B4144B79A2
-C7356F5F3BC4C0F1DEAFCAB163F8C26353F7D5AD14A81D9EA012E63CF02F93FB
-FF0911C638811D9BD6FF4CB49A9EA8BE82CF09160B63FC65ED85929903D48164
-2A18291E4BEF2958E43914F1753D2C7B2B3C97FA7EDED715F05B0D1DA8B9EBF1
-43F953AF5A9B3E719265AE8239CC4FFEA9FAADBD6E2DECB7D39B133CFFF75E97
-EA34FFA8AC12909E6E23B564037767A7F7D743C81CFBAC9F31A9EEEE5E51E3D6
-48CE6B0BE1E9A0D46F29160C2127298492DCBCB618B2D297F263284F159FA5FA
-F686ABA1081D814035CD803A1E7D335C075B901ED1160EA9B64ED9C1F9C65F94
-AAA11EEA0C8AF61A2AF4511AB16FC7E1411F5BCF3C393462E84A7F564D36D74A
-3896756E4D76E526B679AE3DCBC49F9072F7493EAD1CB21710A4CD84EA9F18E7
-86C5D3AC909427BEF1243719CC102EFC0A46F40297F6851E2DC480282D95F3DF
-0200B15548DEF8D57601ECC98081C733BA1C507D738F451B68A024CC0AE6A785
-F95A0831E2D37B479D2E0F309D60B1D164A30A133AF0CF3AE0FF4EFF1E99D5E9
-7209E1BA09A27F4E102A62E272D01BC5C55A6D6189C084817A3995D4CD2474CA
-8688FC90D0E04F19E5D3744FAF09FAAB2D6A266E197B4890B86021B58D04801B
-36AC9F21ADD711CE23E61DB4E79F47047C7A424353E5DA5121DCCB29AA452F67
-34ED8FC8127ABB32E9E480F9056ED43D347D9BDD41DCCDFABD99C6445838D18A
-FFBFCF8EB1DD227C2BEBC6BCE097298427CFCCDEEF55B3E37F50FF810406F07F
-E77C0D0F48C849741E07E8420AEEF23C43DC9343AF86FD44118865F1967E0F67
-EACD32981EDCCD8F8152C532611B1788A42D353359846210FC5EA61071AF8125
-88548B8F9627114AA123C599801DC839B0058B6D0BD341BDDC51BEE8C2CB245F
-CB17D4C74E289FEAAA947547F47FA369743CBB627C0ACDC7C8195CF5AD024E69
-A9CBC4BC143E2FC31248FA0CB3F702C237EE5C85F53AD2BC39DCFBD72DE6212B
-84300ADDAF562852DB28B4D054C2F308C7FE25ABAB90802A4594601712720FCF
-5C4D492CD39A883F5B5832DEB1E83589DC20BC388E4CEA03FA22AE1C2C09625A
-DFEE57135F86DAE3DB8BFECAEB731224204EE2B3ACD71752B850016C2F1D9F4F
-57311E02F83E68EED20BBBFDBB6972993BF23B7D560E2DB0B3BD1DAE0061F618
-7854A4A4A96376CF30B9332C056F4F754B19A82C2959575E540DF7513F6BE3DA
-D369AF7EFB6C9D5F40C1363E1699E14C55E18E25093588F5142CE60E110657EE
-BF62C0868FF5766F5F398886236F35FFD89E909F6AD0ACC0093E5609856D0189
-3CBD6783B5D6704AA2B06D3BFB14E146DB60590C1FC78BCE82158738A18E72BE
-F671564930F481E3B9058687B1DF14B01D6CF736EDBAEFBAC5A427EBFA03794B
-C493735817FCF7F6C341468F20D8F865257293A8FEFAD10A52DB6A18EFDC09A1
-5B0EE26B3720C08C1ECFBD7BC01C74C552F2D261547CFA65A3BFC2E071C97750
-7FF2D95C27C59AE3301BE516714E69F07CC086C627F6732A7D8497249203636B
-55B52E751E0FE3DF6CCFF815497C38AFA00B3211EA7DAD9110089B0DECD377C2
-B7F8446415B0632F2466373CEF97F89C76C80C592AF551EAC73D7CCDB46903D0
-BB9DBC86F6C2E441491685470B7FE8553CD7A3AC5A0D28E1B2C486744634DEC4
-BDE5B86B232656DA19781547E9A896B11A68E6322E964CC8A7EC22E3AF91B7E0
-9AF2549E220B6FA0B9649668424098AA75EA0A90B790546527B3C6C3DDF52FC2
-2DCB99AE44F020FBC5BDFBDA754A1AA32AA0C0CCFA53765EA45FDAED7DFF2CAB
-EEA13414047C09BD70D488DFB6650DEE63EC53A153877B13093105FE629104DC
-70C556A4F8D9971E7FB67A083B6438348F0A679085039EAC4563E143903EFAB3
-3E9342E8FDFC56BF234FCE1DBA8268A35B57E6D30E26AAF53B6A35F2FB35B48F
-D1395226C222E50E6652684D7BFBB4D7CE6AAB5E4923C8425625522CDF6CDCCF
-423B3B835BEE8E32F827B833AA64AA0769815A03A4F926172BAE556198902818
-4B7395C7E653D999A7E0FBEFC5D0E5635FED826A5D24FB3A9147A54D9CCC6E39
-3562F5F1706699EBBAED3550703B55B0FE102747DA9653643DCF1ED5848DF60F
-CD5F8F261D598321DB4A148C6DA6EA00702B562480A704C2E71CFCE4A2A97D29
-E368D265227430FDCA5F48A4A8D5EE7A213ADDB8FD90872DCB7AD2DCF4EBBE0F
-10BC9AE754BF1098BBE293CA8C20FF7B45B27EFB2FA82A726A4B52E73ADFD0AE
-B6BBD6E3EFA78C96FFF5BC387D9F74FA07AD078C6D38A0EEFCB53A0AEF128343
-5CE0C3372A7EC25228F1CEB24044999EB563663B97330C74831B8EF25A39546A
-DBE84A779B1581DD7E4F3D58618D335CA7ABEEEE71F140038A776AEF523EF986
-545870B820B253813F5013374C87F0AAE821FA11AC5FF0C27CD929FC49E2B413
-1EF3BB49A65BDEA4F6364D691CAD976BA5852A2BAE7072D0A315C6E283C90C81
-6EC7819FEBD0B48FB179B1FCC16B2936C5E9128F26071AEDE920730B0DFE7B08
-28E6434F92514D58B4407B4E5CE59CD2C14451C75BFA4EAF835C40D61DA09671
-F26A9809A6457991B669BFA034F5C6328566E45E4572B80236C4C4F0C1D40004
-663D56B2646D879FC0A4F1198D1C7AAC9DFF8BC35156F276BC8C4259A8DA5A9F
-9B69628937C9AE9101DF676798E823836A211D23610F8B02875FF0C5EC47A732
-5F1B24A455BA51AA19DB7CB18C650D379F5139C3EA3A60237E30B4EC509370EF
-AD5DBE08ABF432E4C4A6A438781FC2040A66CBDDE4B3FF4B3AD3775648122CBB
-6B1029E88C01E2E2EBD9CB0EC696403C0653D2B3002D75BBD38C6D24A9F8A059
-1A21918FC18BDD74698D5DC0790C8399D73605773A053D0D31B844325A56BA94
-AC5BF1E4C62FF6D9B08DB420DED281AAE8AF466197BF842267B322E2028A51A6
-08742198C5711B6F3CB0E475BEFF27E8DC250F8F6CDFB5247E1341F6989DDA09
-0B0698167E3E6F01D936FCE68946B2EB60D1EBC57FC1881F3F3B68860F68B4B0
-124BBF878D5D64E5F20916A1BC7F215DAD6D92D67455C73B558E764CF68CA362
-6A12B3B7F1C4E2B3314742B0FB19585B17EBC756E897BA54354AA72CACCCD09C
-8BDDDA8BDA19E2B9E991DAE922379FBCBCF29272E3659AC77CC99993E7C009B1
-139A2CD4C3DDE2F14DF18DDD8BD9C845B476457F0A4534D680E1CF8F859D53D3
-578F86FE28129D1D9C3740283CDF39B09DDE1EDE265B63A22B6EECC20FFC7939
-388ECABF3C4335E4BE47478A24FCF1D13706EF6233285474A94D03113B5DD48F
-B169C1BF47B7DDA9367EADC60B61519C6E479CCED471E0ADC6834A07749EE2B4
-2AB0320F80C869BBD118D41EDD8496CCB5AC28BAACDB9771A3142ABF3EF29AF1
-CCF29C30B3D9AE45AA7FFCCBF68BDFF0D18773A8365E32D9CFF55EA560E3DF40
-985264AE89531A74BD8E127E8B353D07C2A5D8C7E7D5F443AE233F259BCEF3C9
-8C9F7626408C61EFECFCF64F0524345E516730A9628675C693A7189389AC3F14
-3556EF670A601423FA640248BF387571839E87195BD9CB1271B1276F21AB4A70
-EB142FB25DA6F8EECDAD5B40C75684C95F07A800F41B847CFE6454415B161C59
-6C57B1C79E2284DA41FCD116E6F37EEC95656E197331DBCB9677A365D52D3855
-2FE611105DD2C2D8D27357171684AA286DB4F11D1C4109F1D7AC31ADBE66A556
-D4CB1DD177F0F9D88ED5535A28BDB3BCFAA1A90EF36486536C92EC1638C8FF6F
-0DD1A4D63DF29EB590E9123DAB85DF9AE58E81F7B196165375101E96B25841C7
-B030424C9D0A23FE788E7637840F044DBB8137CC1A6AEF537CF8702E78DA239A
-1F00310E500902F16E6D53003510A34340D31D9CC4716913AF10281A4CBE475C
-0FA814C3EB63FF5FA1B1C33F32A84AB17B80AFDBCBBB6BF1C2F5E24B6A6EBBFC
-820D2BE9AE6B7DB3FAE77BD22A903A6A8A967F8451A4841F07BA55CDD1CD4260
-738C01BA72F553480F89C041ACBB6B90E21AAB64971CBDBFDAAC24DA5052AE1D
-D34B6426C12EEB1947BE9353682AA9DFBC9E69FF5312A8B3861FFA27413981F5
-7228E1969A6F9ACCE2E67CF009B55D47DD2E46570F1B6765342E9843AC6F9F38
-AAB1F8EE5438D007C82A95DB32B8FBFAA09EBF452825F9A83E1EA5FDCFCBC8E5
-02D3087D8A269B9BA9C404AF6F19C66ED45F0A8F0E59548E4902D44BA97676BC
-B5EDE4C5DE24AFBD65FC54DA8559F027D931172DBADD9B7D5A8994E0132D0240
-3495795BBA09011D3CDF143935C9BA2DA28671035F8CB8F0D5A7B6E86694760A
-5B173969663DEDC41A4119990CF1A73501DEEBA0D03FF50610F67721720C2783
-6542027531583AFFDD9173BB0C8FAD6F5895013CE8AB40693B3F86781B7B28CE
-360F65B4B593C016EEAE0E54CEC7C40CB8312F1F295866AF63D2CDE358C2EF11
-8F1A14E012FDE3772321C11D084F8C353AD52A4F7836F75EE68C505F01AEFD8E
-E9F1779DC94F1915F54B1ACDF926C4D74DCC68943A7352DF79AEC6D16C78C03A
-B4F5907272CAD0E54D33FC9C638270A91EA38366F1FDD2822CB6F43CD4EB50C5
-2BEE60F9656BB085FD69BD6000E68018C4D899934F4F8B01C3AEFC2E46A5ADA7
-16B43E4E91141A5D61F92EBE058A62A251947FF96C3B6F49663F7EA2D6E01AA8
-1EED3CD01B5078FCAC48545883CA8368D36EDB44F63C24E31FCFC0ABF9B0FA70
-6FC0FF1E5AFD08D9AC8ADACEEF713CBDC92B89C25254DB9E22EBAC2EF83277E3
-B33B8F5FC784627B804C355D283CDC4AD4F36AF97BDA3F752EFDA08F8A945359
-ECFA936E3CB38180688BEBB439BC52BB7944D37F5461E1FFC444B1A65390665F
-1932899E0BF71B246DB15C3695C7CBF33B7F61E26E906F2736ABD99C29BD45C3
-9B4F1350450D27ED6D008ECDE1C358470DCAA7834A7CCD4FE0EAB64AA8BA5C74
-7E2CA44972638BB3830A7A272D6832A0ED4DB0A6AB1E79FFAC9FF7814C8A747C
-D58428B17B6C6AA690E62B7B44EAFE7DA6E71ADB7D1747DF69DD33604EACED7C
-F273FEE83513E1CDA863289126D79C2B469BDCB2325F8036A1535683F95FAAD7
-AE08E20D0761ED39CD40555B47C8DF045AB774552FE787274E8BDC6688987FB8
-CBBF9D7645D6B2DE4F57B18C53ACF4589FE68B41B917CF69B38A8ECC7760CDE9
-88273727D3D81EC0D1F3F7000197E38F4A5F9A2018527918B2BFC79B4D802487
-97FAA052C99CC8C8A7CA9CD061F5877153FED5772A4305DBB9F2FD576B62AD34
-62E0CC672DC969A5F13D6C1021D6B4C94CA51F44AEA8F125CEF3F8536D7811E9
-643F90A5E33A122224FC4D0F446A080BFB166ADBFE16CB13ADD19FF67ED6A858
-EC976E8782D113C73892B363B219D059D6B68940341C95E8BACB644D0AD16A0E
-2D78A74D4D6B350BB87B30071498397EF3B75C4D5013F4D7C82991BB489E4C21
-F7FBB09ADD951B5010801BFE6E511D9B90DA6EB84DD0C2C6A29812131E599200
-2B36410D88D779DCFFF8093F61075E9D03600B79DBA0CF038910A60BEFC25A15
-0335783812198B168136C9C164F9868B6C121AC2AE1060AF9C03BC6B4037C93D
-CA04B66C02445185FA6E98DCE8AD003F32676B8A63D9388720B2E1C1A6FDCE2C
-BC37BBEC2B343111056B50DD162B64DB4F33B66976958DE0DCCB6956E0ACF112
-DBC21763E905086D75ABBF7208064DEB26F87C283F7E3B65BD8EAC941063C158
-0FB6A76DE2E9D20F1E085652D0BE0DC0536177A0DEC6574B931CBCCC41D0FAEF
-2105AD7684D6D555018795BE42EB0BC5631568701AF7FA8A65D960C42EBED824
-AFE6E2A96668FB441B5D47CCECE2888ABA305EB4CA634DD2E53A49BC9902F9F7
-5F2B7E2F5CCFA7CDFC2ECF8FEC41FC61953F441A2AD85FE42F81C2B7FE067DF5
-A15D63FFF2F0A0DE91C6365A71930DC7ECB6791B5754BF0F4058EA8C8A76CCAD
-7DB11FBEA158903D6E3657F64BA5302D11476711A591ADC421683546CD7B8812
-80421693B42620C2668EB1D8F0B08E8CE974D9465597AA109101F88B342DF0C4
-DFA6374583119B847C8D9BBA9DC59B5564E83128E9043640315EF967D9A7C783
-A3F94B7FE4FC6FF5358C814FE291379F585639BC1A0DB5024F54BF22B02EEF96
-43C37B01C38F262F7060788468E7A1E83466DDDEF78E6777664A452070540FA4
-13EE30E3CE3B5F8A7756BA67083C873C03389A4700755C07CF8A89DCEDA11777
-DEAE579ED01F70DE0F99D07BB9363CC259577AF3FA3D5A673D02B5DB43652999
-22B9AA35C4D377D638E7F040C1539F0A17D37A9D059AA31911612144CBAD8012
-EA27564D7BCF5E321710C327B6D3F161F556297B08A8073EC36C9972803B0225
-12642EFF0D9C216A78AED534E0B832C2A4FAE052F36B0273085B52E4666EDC58
-F644455423F102C2161DCE7A3159479354AAE66ABDE281445B23B54346679263
-355A76EE144C76C12646F9C21E1072E8991FFA2F89E61819CCB21BBE45E66CA1
-D707F7D54FAEE1767C4AC6991AD01974878653E839E6D08E8537A31C256B7FC8
-56EC4D34713CE3A3BEE667E2148D6E854032E1E2A6386F154526B7C7F3670384
-EA2606823DACD84724A94124CE6EAFDFED2FC22754263466D47366EF9B7AE444
-20DF7FF8CF0BFDF952F627148045DEA4FB178507B4CCDEA0F668EA39FCE1FDCD
-89D9302F9737FE7CAA7F93804AF631D8C197BF4B3E81C07CEE4787C4A2736DF8
-2410E10044DB3272CDC28050FF12F9CCAC93F5BABE90CB83A126346FD9E3A121
-5AACF9847332CE1F8D77F5174333A781186CDD5D7A1C587B1AF60BC015D2EABA
-7F67037F662C3487190799D40C5EEA961D5B1F2ABFD628F544DC3A971D0CB4B9
-E78FDCC22DF4670619D3FE1D38F1BEA163575EB00BEED368058584D5E31A3D09
-C60A1917069AA83C7F35A31DBE215F3984659704F92313BD40AD6318808E0897
-7F4A347B29B3F3943EA38FF66026455C52C949DC4674DF291157129062852C64
-98F2D4EAC6995E1CD2F563C1F715313BEF0B5577E4596FD0C02FE29C7F4CDE55
-FBC1B2F7A735BAE6C5CBAFC9D03DDF7DD526F1B4527EBFDB12A06B2D209E462B
-762B2E5CA4B1ADDF98DD874F23381FA376B7F116CE7F1F4C1CF2F42840662EFB
-95BC5035CD6ECD95B4BED82DA1DD0689B4C7F18CEBB2D7C33E50BB856372053A
-1D153C1580F98C2D5E813700DFA8EADB0DFFBC6E9CE035AC579851D282A0C4AD
-B1B1FA1F6F1C694C87E550D1CDEAE83DF259F219D3C06A5DFE646EAAF1D74A41
-700CFDB8313D01B5251B43449516FDBCA68AD69748A20AA028A2F525BA111B12
-88EBA8C67E5B23B606D3C524B2B3A059AA7FD77282FA28C6F6DCA7635F828D74
-20490167EC98BDCEC5D753DE7834696ABA87624038D61B2AAB32578F38DEC9E4
-2751800EE57493C00E6AC97B92287ECA89B03253B3233D815A2B35A21AB9722D
-BB16F31EA9D73286460FB97853355DC4A1589B7025F7829E35B6A294651D020D
-87CAB97991EA91C5A09F4FFA042BA5E1E6C9968CF47EA0BF50D2F984F539C85A
-090B9C6B95EA1AB2F1699A14AC2161BC0A2529E5694F5EB58D908A9B15B0C8E8
-3186490485CBD543E3D5A8041D71BD1C607E50FEC13B4EFC28E98D7E90C53AEB
-120003830BED4EB3505CB0E371EF849813872FAD161399F62B410424B0CE1065
-2033BE50281EAB588C5D3CDCEAF1958DC79D4BDD15CD5FDA46DB0E9EDF9F000B
-909F83B5DAE35F2BDF66165F563E29EBB5686EBD7B0733D83A41763113139973
-301FE4E447B4F33A059D300A471D80EF3FB002107CD56304E4317C450870BFE7
-9035F1BEE06A30B220F25C1040B1E9AFDF20158B1345FE11816004B4F1983ABA
-AE34176148CAC1EAA36F0DB2425EBACE5600B6CFD12FFCCAA364B9E21547FF82
-34DA67D532ECE504CEAC691611AD0E167D8E6C651482B7AD2DB150994BD83B66
-F5C8E4E2501BDEA0F70A06709DB3A2D0A87842A99926EB690E3C66B0754ACA43
-4F523D9F2E2A0089C5C00AA4C455A4F70596B7F2BAABAA5EE63812082E4E8292
-5CCBAD15D10178D48DD38D1C6C4089354EBADE70BA4EB757D85EE21700C3B6DD
-752154C482E5936849F70A2E4C58DAA56CC9B70A0119109936D20DD94B883FC7
-001D087B21DFFD8115CFB6A898DCE84EB9D026BD12382DFD8029D04461134953
-E85949F652F4E1E601FC16906BD4261F019F84E0B5B3B4C8231F1CD44048F280
-7EAC075DDAF1BE658DBB219C05755F6CA8F460428213C6545C6FD631995B229B
-3944E2E11161C664CFF4B484A25C765FAA60394B233BC1F2E8EE1B74D0AAC8F0
-7692151F544D736C904EF1C3BFEC8B2F262E383EC2DA934522CE23961251E498
-CB545CAA9C018B0EDEEED5C33302A0C91EFFA8D2A71851C1703C6C1954953C9A
-EA6930040290F4834729408A243B7AB60FBEBA673F3A03D03E774902B9DB8796
-4FB336D899630CB361DA0A8DC4D6F736CF4FB120DCD06E045B2BCC205FBC9A6F
-7D9C33EDD182953404F3139207546D57286E5BA298AEDD2D8872C5269E9C67BF
-F1832FB403D5359B81CF1D0B873F0863D7BE051DE2B8C3C51E7CDBB802CD7EF0
-1D09E28597A7AECADA737CBA26B2B61325DD56CEA91948B9C21A6CE72669B213
-B1DEC2704E4E97C89C5BC2965FA770E4F12658DD6BD00931233C0FBB38D7A60B
-FE878B2516F363AC230CF3B07839017EF07C665F9A3BCEA9971D9B9531F2ADBC
-355CD844E0A8326288E2AEB99907F839514E204E0AFF8FB25CAAF2EB2E212EA6
-374A96F7DAC15E1A81E93303C9A541BDFB2FD67F1B242FA96DA7DC13CB1DA128
-63B06589B1E6C1AA5271CE6A9A87D7B655C79E6CFC8EC3D6CA372813A9C8497E
-94B670209ED95B38CD3BE3DB5F0A3D8AF723C6ACB1D05AC082E3321541D7FAB2
-4283A65D37A9AE6D6395680BC727678143AA14194B9A2E3E69AEFC177D791902
-8CE650CFA9464D949EAA4CA45E5F81897BF8BDD8921686531684C6BDFC18D46C
-C971826937B67E47B706135BC59ADCF6B603EDE35F91FA71A46AAFD337190DF8
-7DC21E2C9FA91FF575AE5840016C3D4904A5BE24FD41707E22427763F5599F02
-99C447524D9515E6EE09120A28929C51A515685A190D06BC4A3DB809AFAD8A20
-0D5C2BD3E212733BF8A8B9A44464CF9C2AAC58FD013DA91322CA69F3F29A9156
-7C008C33423A16EA20EBD8887B12011690746FE0A92A9E0E0D2BF9E74DDE037D
-1270A065E20037128C026138E3DA53625464EB51494FAC1FE05DCC6663D2D6A5
-A5F25FB3ED580BC79B064DE2B96B47026B65FB63192D85754453867553FE884E
-61DF54C3D1C4E69A65ED8DF4763D029A40AA9A61DEE2D6E0A2A89609A37DC289
-E38C8CAC6A7903C33D76F5118011F8F3B12FA280A896F8131C989ED182256B6B
-CA737EC6240CA28D8F20A44D479BAF7FD914CC736D8837F859B3E23E602ED53A
-EE217E8B959648AB522CEFD1AF09D4C2EE6091CB929216CA398F3F179DF036A6
-2E8F4A1FF27FCF3951F40C7A7FE8D3E397F8C2F6CAB99FF537BDD72A74E58B65
-27109EBDE9AA46D941A3B746BFBBEEE437D04D463D1AE698AE0850EE674510E0
-ADE5BBE05A239E96975371DF52B1991806D88C0FE32AC146F378C861AE63E79E
-86BE778BC24F56C676F72054F70D7F23A029875777C1CD834202CCF0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT9
-%!PS-AdobeFont-1.1: CMTT9 1.0
-%%CreationDate: 1991 Aug 20 16:46:24
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 95 /underscore put
-readonly def
-/FontBBox{-6 -233 542 698}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
-2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
-650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
-F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
-D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
-F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
-4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
-438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
-BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
-A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
-AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
-D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
-CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
-082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
-9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
-4BA1EBFAFDBEC531EA13DFBD6700E53818CE04D23886B8AE75DCC36BCD3189B1
-0D55FAE27D0D126E82AEF31D7B5DF27E58C30BB0867D6D7AC1DA9EFB8A2DF095
-B5B934A68EE122DA0A83B36C952431586B957990206194E89339048AA6EE4C53
-703763505ED57C494DD907D0EEA04F6B1D4C8F3BA778F4E7AA832AAB4D75F024
-61E91C6D25FD6823CB24FC863B44EAE226CBCD81DEE29413023C52E4C515FD30
-4E9CC58955D9F87CEFAFAD73F2027DC0BC9CA76F8C6A3F8704CA70B2392330C9
-DCCEA27BF45555C2D9BC3A0BB5F3D899BD27615BE02CF8EFC5E9CB9C92BBB681
-36AA6264983BE3C6F2545C48C416F14577DF9E6D63EC23246A67AE1A2EF21CA7
-F7FFABD5A306E2A2A78A8659D03CB34940DE84886EF41C8DDE72A41EF93C2801
-2E69B7CCCAF7AC2A85E68F823EDE2054CF9E1CDBF0B0FB41479706C30AE9854C
-89DB5F12A2A3523A255630D7ADB82BCAA224DDD4CCDA372A984265CE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTI9
-%!PS-AdobeFont-1.1: CMTI9 1.0
-%%CreationDate: 1991 Aug 18 21:08:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 97 /a put
-dup 101 /e put
-dup 105 /i put
-dup 118 /v put
-readonly def
-/FontBBox{-35 -250 1148 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
-4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
-DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
-F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
-8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
-03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
-211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
-E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
-D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
-6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
-0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
-1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
-298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
-C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
-433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6
-1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6
-1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16
-E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F
-9404F896CD850A7B3B3D71D485F5459E5A1D5C5BA2A6C6AAA7BC81847D4828E5
-60F546433B6D2E24A2D86D453E4AB77B152506F8F1667924DE76E180B2364426
-1F7032EE5011E95527B4F4FEDCF3402747E80F63C78935097C11F672F0B25AF9
-8EFA8D6630EF519CDE68BC41C28EBE6DFD11485D178EEEF59E10BD23F147A2A3
-4BF925E0799FD8A6409984959B2247A900288B6C01F714A37E646D9A26FD7304
-5F11C7F76E1E6245C363387A6CE7C4D864FFC29216AA33D0B209EFAAAC8A589F
-AFF549A9F9EB94F6A5B5C0F1F805C9ADA61BF970E62F565C84048FCF6B521D02
-C07B6EA4DEA977B78F1FBECC0456EE6B5C7282E9B2A6542C54078437241F2323
-6A8D684806535D67759684FB48E7F9C2CF887CC6C156A56D3381FE06E0798FA2
-BA2042448CC78EEEC8D9A310170C105BD1B14D14E40CD609AE90A3AA656A3733
-E492BA2E6B41D8F99AB678AE3004A5F25F7737798A3992C05E05A1EB0DB6E18B
-5CBC533933132DA50E70A3FA76A55F0F7AAC65E1BD7B938BE4BB0435E54EAB2B
-C339E381392F2586ECE2EAF21EC7739F98C774B94D7BDEA395DA286749024FB7
-80790BA6408114D47FEB5AD960B0DA2BA595DBAA3AE039B77026B696E1E79D36
-8E3CF024B830AEF788342C37AA60E4CC83602470332FEBE0DBD17538C0697BEF
-9AC5C518FBD909B24D8B6FAEF366D02A6C806536B51013F867BB1507EFFA0C49
-A4F1391793C918A09F579C720CAF7F40467CFDE27F71A3DBA09167271226E942
-7D9B5FBB3FAF471B2ADD37A4DA1F96A4BF415020FF93AB38EEE0FC319FF61D0E
-C558FAFBB42D326C701E8F85353C629C03AC71A9C18B14FBD353E3C85B2EE79C
-F6507A829F61272C1749DE0A502A0D81342D24F58A057CB0734785B758504779
-537C6D592F7AA483198E7D2E2841AF263E79E5E9AB20A45B99170A9F2EDF450F
-C1F2E83C22E02014E1A04470145E9D857295B0854A55AEC3D3C296D5BA5E66D6
-C07ECA217D95693D68042A9C17D51B98C144B4DB5B855BC12E3582615AE62A3D
-E2AD013682CFDD6D8DCDB2A9086BDFA58D0EA35B8F2B1CA04C61FC17996F6E89
-063F1A60DCDC03F391CE653610886ED15900F0EF5365AAF8F7929389838C6AA9
-02CF6DF8C4CB6DDA327883DAF58395CEB66453AD5C4E4B1FD14D1B6D9254B271
-0151343D14622E225B9C6F5B5A04A3FE39AC11D5EC0A0B7D32AFF978236BC9D6
-850027DA23A0A7F2C819AFC378171A0BA1F38187FEDC87485CAA529C10F5CA2F
-3F61A49997D481FC8CF011AECB4FA4A8DBFD4A3047245676BE0329090249BC28
-8D3CAF777B58
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124F41AD03466151F55D8DDD97A9E3D47CDF844D7B199E2E53FEED0890
-1B156E50130621D5F9BB1519F270FF5B3F56A55B51AB602AF4CCCB9CAB1DEF9A
-0A8039CCEFBD933FE2FD035B9F0C7E2C4E8FDD18D5A0EDB72A7A181A90C87B68
-BEEAEDB6B041D8B3825220522A5D732025A3C9A0ABF97B8E43D19770B89DFAE0
-6E0B9672C5343287C0CE34C0EEC861A0ADFB0CA6F981074DBDE03FF04497775D
-EFA85F1C5296FA028878BA0654325D9A49E63FE1213D15BC94931376628D3F4D
-13D498AFE975ABAAE6CE5238D6D1B7B3C512285FCB55DD32B0D2BD26F01005A3
-E250F857FBB82E6EA870746E82C150977F6D65834A676FB35B5A0C1B22669268
-15BE1BE02BDDF1755970184563F025842B60584A82EE68B28FEC42EC38ADE1FB
-A7D9846F9473F5B90A72A94CC37C34A6F8165188486270BDE4F77FB9C8D01E22
-44220F591515B4D1DDB2E580FF4A9DBC1551F2455E732433E4924E7832E961E1
-57EE9DE24438DBFFB02AC702B2AC1B5E21A9EB382B4215B3FFF438E133F1FAB4
-952E14834907E3891FD9ACC8BCB8D73182A0D9F833C52CCAA23D8F4CE0D53BFB
-3DF5DD2974F4202381DA84D7F4E60C0BB78D4A492F895A1009217B44D4818D19
-C8486FB1DBCE4EF9E22F86455AA1114974F33FBC805C349DF0543A23138BE750
-864E401F2F4B8A80273325E63456785824CBFFE96030ED13E5DF1BA39A14938C
-52C3C4F13A6601B29E69BB7A5433D5896F72C96FD7E8747F3335D60C20A6192C
-EED9FDF074D67FC602163DD30B24B0EAD4BE34F5B85ADC44DAF646A78FFB8B4A
-5411A3A7BA863127C03D731A3A993F6B3CCE260A43D07A51E436A5C34714E98C
-FB8759DF7A99F37929EE75134C309D057548D1E23D509C512FBF783DE0939C81
-11CBA018B1AF51CC8ECA958F8F8C08385FB259268E1833784BB2796EA77E321D
-31BEB0D65E5EACE1C79D40CEED3A73EEFB73E44D6C634124FA70C317948B87DB
-D8BF5FA6A300A967A8F440136700779E96AF75D6CDBD6E71A90D0B429A3BD20B
-9BCDC33BEAB7F7CE3D06EB1DFC56B8E817FFE644405D0E2EA5676EEC4CB4F962
-632CCD89545375F4E1EE85DA0B4AE1C54757708AC060B68F1980395351AFE413
-1E0A8C155E2D4609238DCED812CAAC20C7AEDF09B136C647DD677733F29F1E13
-C0E362D5E1D07E3F7EFB55490E67696C511CEA05C9C9E1040B0472E4B0A2A7C0
-4EBE71AF9F60FD39AA2034B7F7B0F75C06F59BC0CBF6E239C1AEF505A0A67E29
-A47F5B74ECC9E6E52D9E988EB41B9289364232AFEE31F71F85DD9691ED98B3BF
-AD066C4DE2572347712E09CFBF6A4BC13850B72134D3A03EF23D7658FA25E748
-6EF85C4F458CC8C8EC4D72B9829E1622CED93E125CF521F78D330B4C32066309
-FB9EE455364F4F22583D33FE288774FEFDEFEDAD58011AAFFC3F5F34140C1A53
-62C451127DB52FCA37A6EFBCC2402CF37C7816FD61ED4AD0F04EAA5C3BED6415
-2FC7BC9F5FF00AF26072912D8017A120B0CBD4CC38D34CBC1B01C96AD5584FA4
-9D021F0A12CA1FF0CEE32749AA57322DC4F900E7D1A64C0F14E8BAFC581AB654
-7F06764257AE3DEECB03897F756CD1AFF8CC2B8CF5DEDB84DE27FE65D647D203
-62684B6142B6D75A484E97DB661BECE0E09908573B3CCF706DD80082B87AA58E
-4BBB7F73F9BAB600C0D21F9473A4FB6A1DC61A701F183EB0821ABE76FC002BC2
-A8DF5A75200BE6426F50244E74401015AAACF80ACC9E61355CE6A37955350F3E
-EC1DD6E694E547672AC3F4C2E80AEC5971AF9922BF9EE9B0A0A8DF051236F70C
-73B5000528E555FF80F8824AA73F5523EF414793A1080485DF0905E131D8EEE9
-DA2791AB32AF692294246198ABFF9B7AE7BB57F073CB74F5B6B999F6E1A1592A
-F805CC0F87C988DFCFF7DF498FF6BB361A4A982BABACA25DEFBFA8371B54C183
-A0B9F374EFCD7C2E1BFD41830AF81AD91B15BF7CF57BF802AB1F774DC60B2779
-2449CB7FCAAE00485CECB1C61377EF970BBE0FCDBC93B9E600E42722C265EC9A
-54828FBE5F1EA9EBB42017DF66579AD5F64EC75AA9DFA190ECC9AD929241EBB8
-489EC89EC24757BBBC8FA446DD4B51D4C6ADB4857B0B2437348CCA65CB47CA94
-5C26C15E8939593B1530C37A97826373146DAC8D32875731AFF91FA6619BFC20
-043BF9E9314A6DBA5635F2C05E92FA7CE2C1BAA491A719677E3BA2713F756C36
-F9EBAE900749DB09BA993899823AC3102E9163B96A64416639EA9884759F83D3
-D22D0F64C947861873119C2FBBFF08090A877C5C47B27989EA08487ED73855C8
-90D2EA92B9011BA0E843499316F842CDA7D4ECEB0D1B81B37FA156C4E8F6EE39
-EDB83DCF81B06AA793EECDD2C8801F765BD560CCDD4F9EC2DCCE2FAF0CA2C3AA
-299E765058C6C4BB141B64AC4E158C55A749A9E3C8AB771B6FB44C22F3A9A83C
-48A7050514F1D2C15D42EC19954C5D68E91A22B7B62A4858E22FA22D599CC34C
-ACF7B65EFD2C1E64C090C382A18AA1D275A281D418644D1DCF95805FA1C955CD
-7C9151C1C0232EFA3690273D9AD60CA684FDDD6160894C35CB02A67241670CFE
-1B160FA1DE7BF0BF505202D0287AE5C238AB0F546F0D0B39D7EC8877C16C55AA
-484D949EE6D32888C7538F392FF5C538616853293B9548AC2183246FB243B858
-16B4187C05C2F643E6D5939D54680CE86E0896B8171555F73B60851772E8A50D
-C4FFC74058AFE1102CD69C49BC74BE5785CE0D894A1D7D5A983E6C2E024CFB13
-9D14C5742717170375C51F39416D104A4328DB5EC02D57C8E0AFB8E75B4CC935
-FE5456B73A46F4B006B72E4DCBA5A18F9B2FAE5E8AF54F713B57078E53349380
-8C4F3DA4632E01CA0ED79CE8FBA8106E5D0E8B9869D8DEE86314DF1C9D93C61D
-08F64A7B1B9808B214CF3B7AD23C07AEE94FBA86B95B64FDA62EFF64CE60D715
-715D6975D52594C876A11E6AAA93A50826A366D88C1013569F34732286C131B5
-BF03E4A1EFDF69F5650A6D6B49FE69B709CAB22AEE4FA1FE7DB4D6B0DBF24C1D
-89F3E0697A9B893550CD57FBB87CA933AD02BD2E7E7E232990755208670F6CEA
-8CC718F206C0C1FC6B83FEF75AEB04B08B60740517BA268366673662C9DFDBBE
-F69CBAB754C26E377BDE8F0BD2566264D2CE638E1F49F108D65D8BE857926D08
-4580719D64B5C19FA3F62E9A231EF6A78F5AC65E9486238018A179FA2DF2E472
-9348990402BEF7847F72C883F872269BA46DAD793A4CD4FECCB11198B5EC22BD
-68C81C4EF31D74D43709535E63536FEC23A58CE23924C49E335C65197A73B191
-D8378046BD327178AF86835C47C3D20C15F8521F07A37324FC83062E4258190B
-9B9E16C9736F346010755617B1338A44B3A95DC03D35A2389E5C502F9DF3F3A8
-4D15A67EC2C83D34C3196EA03C6CA5C727460F62FF071CD25A7CC9E1A2F8649B
-6E23FD3704938B7FA85662C39E751A481FF3F7AAF63FF57B7768B02BF2BDC52F
-A260AB5C9EC3D0F618A1FABCEC7678963EF168D3EA4B58D68F4D8489C9DC439B
-23D5504ED042B489DD905E67268AB37475FA87219758027D3C9AC133572B4917
-9E55D0420DF1B5C40442E6033BC3BB1D1B873EC81EBCC3F325B45793D5E167AD
-E6EBDF237EBC5C4602A4E19A76608BB2BEC6A6DFBD2CF3A78C221AB47B841295
-16B218A7DF4F2971D92F48A20AC60330065CEB69CB34702AF91AF9B0D50DE0DB
-91C36856ABBF6961D5740A0C585475C139BC23359255E6A08C5B565E88714BB7
-AC3DB3109C36753FE2D2E4801E859FF2B53E6CE9C523CB3A40EA019A4BDBC721
-C3ABDF17370DA8B61E3CC7E4B550F2D52F964A9AA3FEB4E117DED5B23DC70738
-227F013D89DC649B7FC167392A6763B05B4216B47B054606144ABA97FB2BA77C
-46EF77D5B7D4F5846CBBE247DEDE49C5177D851726E559B38A8362DE62E37A03
-F608F4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 2 /multiply put
-dup 3 /asteriskmath put
-dup 6 /plusminus put
-dup 15 /bullet put
-dup 24 /similar put
-dup 94 /logicaland put
-dup 102 /braceleft put
-dup 103 /braceright put
-dup 106 /bar put
-dup 110 /backslash put
-dup 112 /radical put
-dup 120 /section put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57034F27CF0B9E4BF1164D21A8A3D9366
-48317F1579A4E4772661250F737F41ADCF2ABEE72716CBDEC756B66AD35FDFB6
-E37BDDACA68370E604401BE303246CF0F7A46394A52B5E9D34B1E181AE500C2A
-F3CF1A8DD52495B2BE675556CDABF286CDFD02EF1D24B2F2CE63B11A19221CEF
-D0B52B0A53C65D98C14A6B98F8DCF790824C5B2FC5CD97222534B7BD36006B06
-74D1CB5E00DBDCE7E54CBE90BD412D97620C55633A99836457375F2BE6B04BDA
-6A78C178AD1DE0BE3A25A3DC23B990FC90EC9F5AF67A04EAE6235E400F90868C
-6A59C8F95773C7A708AFA871A725C220DA4D6D39D49C738D0777BBE3EBC0B640
-ADCFFDC87BC04759F0EDD89F7035AFC1FBC6CEFDCFD14C51665CEA4CD5DC3005
-D8EB97CE3B80883B7878D038815DF6E60938CBECD30B4D60B202F17ADF33CB94
-A15DAB53E9B28EEA4E4EA360CD89350708C859C80727E065C1CD03AF3FCFCE74
-4A33C7E2E1BA644C6143A67AD079DF51CDFD6B3E76B5B72C1320F1301FAF38F8
-FE3E47A022FD8C71195A0CD551220BE02D5AE98A9758958D3A42FE7FED28D5DF
-537A742B432694CED109EA13249DE6DCFE3E41B352EFF95D8D076EA90FB6E25D
-55693E0C4B6FACDCC4D9C0FB3CEA8D1975D3623B426BCD8DC87297D7091B4FF8
-508F3901D5963018989F10988BD719E38E8F94EC2061E3251DE3796459490032
-D4CD2E4EBA006B63FFD85D54D47B158CF64B236140F62C684789D78B3DD46D9F
-4EF1D4D0695DD344B523D3DBA993BEB7077301835D19EE7650106DB164A93327
-2EE8372C785CEDAFF37E3F8FC867BC2B419B5C0FA588EDB3D03857F24B3F9AEF
-82F411D4B36ECE1E4247F531BA917E29EFD92502D4E9AEDDEB4D641CEE2DEAB8
-43275720A51D80670DBF867F08D3355DD7256DBF1CCF7FF225750F1675C62E42
-641E60DD07FB58DC3E872997EA069F2BB182C20F89A85BB70C0FDDF00883B5F1
-DF84B9753509757501C87B38289C3E2BDDEAFEC8576EECDE90DAAE7B86A60E6B
-DC2F16CC833B1302CEEFF831543E3637CD0BCA08661187F7182A93FD87558E3F
-DD0EF15023D25C990A30BA289747CF98E395075B71D72CBD97D0181A7F6FBC76
-6B2946F2AAF06D223CE1971780166DFE8E2514F742D33CEB36A9AB20949F45B0
-01C64923934503898E9EF1B028228648622C43000B21E51E848E56BD0BA87182
-5CC6761CDCC594531F4FC36B8D663587C4DBD65E40680F5E7958C41301CB492F
-6EE0524879931C173F8D7D341ACB17E8F3400A78BEB162A8CCCD20199A440FCF
-DD2838C734D74D34A67B50414C7DACBC2940E8DBAF5D95B86A19C79B199713FA
-9706B06FA419CED1502B6CCAD866234D22F3AAD8482A48C3840FD713D795A8DF
-A5085B2DB23C5681AE0989F67503D526FBC1E85B5C7FF034408095A6DC57E36B
-074AD42041536A25EABB259CBC456D6267803ECD333DDE69FB193A7E797B6EE3
-D25B6B115734423F07E0E87D1B47EFF08EFA9C7545EFD6923F105F58DF2601BF
-47319F65FCEAB964F918B48A9A127998547C24B447ECBA1F3FDF5D162F66310F
-09EC87746B86D45A55CBFE9607DB2442E36D70E6011CF16A1A0B7CA4D93440E8
-61C3230419895D1DA86F74D36FEA20A1A25E69A759D07D3CD26328E427F490AB
-DC928BE161DCDB7B088873EE6F6F90F109AED1893F2058A8CED5910F52FAEFB9
-B13A7EEA288409A7B6030B05946F5DF5981F5F755D6F7F0642637E4155A14B8A
-B791F5C092705F971CAFE3DBD44E1224E87F5C57A081E6464CAA91A9A3D942CF
-E9AC66183A6B5A1988A4D46B6CF58568BB72A4DB7EAC43203F5D2FA148992E2A
-87DB68B45EF62046D4536B87B51275DF232F90D62941A697755790B14CD6921C
-7E43BDC21B81C3DFE73024E3EF407D8F141F9E84243E6A1F5131916B606C03C0
-DF4EF2902071E651A2B89647491D9D61AF6B9D3ECD3C9D607A18B5ADDFB3CB04
-4B1416370CF3EB9D44F2E11F121B5C6EADF4E09568AF9C894E8340253B0102CA
-8AC30A449452360A7DC314D932D36799FDC0E0CE9AE2DE6B132CC53A956E83D7
-73B9EB2879C68D2E8AA5EBE4DD2E24C20BE770E7E24FC914008928C450D348E7
-2EA5FFF1515414E818EF2BA2EC3831E567BB1C1AC7863391B1C3E857BF8CB15B
-4088ADAE3B8061EF7211EAFA3BB0364274274CB734A2222C34B34766A6D3D0C3
-F5C7BCD32A6724F4D762528BCCE9021924138469FA267848C2546EAE182043AB
-C2B551792B6B6E8BAC48A8CFE394C751071C98C5E69D3D4E6366078405D6124B
-12D1FD49982FCB434B640FB9E042053557D9634D20D2D86A45CAE192E5C33C9F
-24560F472586B9D7F886D5A6A39FF2973B4F508CBB92D239204A2F527BC18231
-0AFAADFE3B52EE58F12D148AF884444E58BA60C74C6B58DACB61A4B2E50B7527
-4AD570A7039E244848FB8FB192ADBA34599613C125F9BAA42AFE506962EA3D87
-4F9F331433266DD04B6D44E89B0FA33E9E2AC02BB8FC1C2AC44250872A046881
-17BBE950D17465352320C3586823B38390B46FE0F3F3CA845E18FC883B28290C
-948BBFC0C72FACD33192C650C9D04A352210C5B4D192482BCD0AC25CC3159C3B
-4CE0A5E090F46D2AB4B2B7A8B2530A44ABD95AD0CB87A5FA48DC033CE8FC3468
-6AE949072A4B99112DFBA74A8A4FFC4CEE9585208EAE9755E2B9D268104CBEB4
-E7E40644CC1FDCC1433353ABE19006B8BAC8D0154C16DA8D0350
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 15 /ffl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /exclamdown put
-dup 61 /equal put
-dup 62 /questiondown put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 124 /emdash put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
-0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
-B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
-AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
-97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
-FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
-20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
-0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
-F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
-3E6BB526D2D21FBD6D78E21A936F2E123C0F6EF41AA2266CF51B513EBF49D4D9
-2C0C93820A37010A4C8990B3D2551EEBA36E8B8DC122B1432A6BA9A8A674CA2D
-5F3DE1AEC33589A13F6DBEAFAF69B753BC0DA94017AD3D1CE981FF38A306FE6B
-A6A35630A7D636C1FCDB936F6BF93040C2E147714DEA74B7E32E97D4A9A10944
-1F389DAD067D206763C22156CACF1B820A6F71A5AEEB76D95A7BC008F0470EFF
-D7D7BAE7545D44A16A51FBE1975162DB333B696716F8978E6E9589A86B824A07
-95F6BDDC7A0FB3D7EF795BFE39EA4885E6E3173C865CAAF8A0BCF4EC66FA0B06
-A3E04E071686DD0C578DEC9EDFD2ECF8457E0BBB5591AF24A8ED3316CF401C81
-EC70E8F0D3BF4A21529B5E42A049AF60AD5B7DCC6E9908902410779460D7BA86
-5C9C6AEED7A598A024222D4131D025ECA5B3321E2E99BB5B451D663E5E06000E
-FF852435FA696BC421FB7B71F4AC3F060A4244F4405709FAE714D6AA3919B086
-308294FACD400EB49591DDADD04F5B5EA452CFA1356624091215D04D9D086929
-626217F6F167FD5FE4811A15068E576E95B795A7D58C9F45283714284A4F707D
-03DB209B0E863AED1651B06C0C5C5724AE78785F5E53B44DB3512023D9C9F099
-4D01D2A9E965FEDD523240FF4F6ED5767302E55364365B74AAE4A47543F4EFA1
-ACEBCA28D7A70F2404FD9AF6FDFBF9279708EEFD35C4F05D8AB48F2C2EED59E9
-975FE2FC27B882ADE0D3602126EAA1A8567D6BBAC36945795936D156B21F0EBE
-B708B9822A394DB88A3FBABE04BA4D3157ADCC999ED02CDD4D4E57F282D4BCA2
-DE43FF19C7AB7D0A90BC193D8027233258E4F3DB5E8609A92942B5CF2AB05522
-D20EE59212B62B3FF3B60B1D278EC27B3C7B04D1730650FEAD382077FCAE9A89
-5D47D5DDFEF1A22A8E2B92C298ABB82F425AC7752EA3934942FA9A8D024B7E2D
-8328DF72FC99DEF01738890882836514F59489829FB6229A1410C45CAA89F704
-1AE31F8AFA55EB7151BFD6F26FD8DB0BC0356DDB161352C10C138B32278107FD
-5EC219A1C326C0A7733A8A25BDF8D0E2E7EAA26AD43451E013F2F6E53CC3A85C
-AB5CBB66B461289E965B5C4A91CCA1708141D3E0E674227CF6EFCB763871BFF4
-CED6FFBD468E5933E2F6E50D358367A274A10B539A55FAB259A706268BAEC7C2
-6D370D735FFDC9FB7EEE0F879C5AD1918E86DAACB863EB75D154E237004940FD
-777C2F5EE1D2A5A2BF663D135EAD37177406926CD6A707DD72DD3FFDF715BAD2
-1C54896D52CD09B9BE943CAA320B1C907A38C853EB5C1978BCF50B0C1D1FE5FB
-3CA1A507FC68012012BF2B32C3910E3D367BC8E3E7AA7F88A9D9EE87D8FB888D
-47ECF9AB2285BFE6BCE7174188380EA574CD7D94C7AF0FA9BC2BB71B71D8C969
-3151A55E08CA30D5EA41A5CC07C0FA424F64FACB2DF3175DD6763C5A2F431C51
-72E6F0F7EDE3AE90008B6B5F03445EAC9F5882BF044036C2DD237344E5951BE3
-406A36374EB73760BDB5B8BD8E40E34D583FF4941720B2D85BD866FF355ABCC6
-B79DCDCBC7C71C1D979914B878DEBE9F3F51EA090244B766964FE238F087D15C
-119AEC68F80C1D2A286E8FA222D6B8325B093D427DA39E53667604C549D35C3F
-DFEACCC08E8D95473B1A00F5DB8278A0A913EBC3DF5070BCBADAD036EB4805BB
-812525D190B20A652871C797235A7A4817071CADB863BDB8BF991F04D6B0BE85
-8F55098A6C2D40E1F5F9BD3C2277234238964802085B6EA70EE966407FD5A7E5
-CE9F45A7E6DCEB62B7EF8D2AD41B8C224FCB696CE2299B1400B5ECB3BDC15D40
-300AC4BE7C849B6620C8EE25CC25A6FE361D2B63CFACE30E63EED2A5D2F8477A
-D204C249F4B7A35357EB2300C4B1F02F31805F3ACE290FBB94EEF97B44D53B7F
-C203A2EFDCE2009888E5958181FA213F977D3860458B7664FDF8A8A8FCACE950
-D1DB562F52478E88D98CE5DE997E27EE90065B812100A5E33273E54B556B584F
-0625E4CB1B002C5F8CFB7091F22192C613F10E2F0863D67218B3F0E753BB2558
-60A7D0D8B0BAB0BE51F2C94E0A1117237B04C33A9098F71FB52852C0CAC93432
-EE19DD3729C897CC7D082E045DDFFF3CF40C8805970D7E6F14AA3279A30B0F9D
-1664EE599779E1D796FA6A7D64A24930262536951EB3EC0D7ADFAFB2803EAF74
-FDD286B223985E16D560D430C4A9BC9D1E37B39DB1591769665E3E32704F2323
-ADE2F2D938B9D2B4F2162001E9ECEABB845D5ABB15C00511E966A0F9986A8024
-D67ED8F1913AD1EC129433065F781091ABBD6A93A0C6E8DF007BA681AB70099F
-624C796739A3D96095775A375907B4595E19C6E3535342940B3273F4D6339DB2
-F619E06E0B52B69F90166CC1DE866AB70C4024D6FB066E754030266461C5A71B
-840C61F1F6F5473A4182924B883A48A62FF2856FE82E8CE025163ADB2616EB55
-1CBEC3CCAA6A8A75B91926A7E68C2A01FB71C27D7ABBF20FEB4B9D3499E060DD
-DFC5A72CD19E87A8C1671FD9DB53FB66407EB01774CB4B7EBC99E9459459BBC0
-FE69CC2D4255BD09E16BF5219E4E896668B809837E8FA4AE3D2DFC959625A6DF
-EE8087E8968499703FC58B250386F5C6CF9F2DED9B306871A3BDF6EB76DE1025
-CAD398D3C3A7470C6217A9B6DD82A68302F4DC5A72394FA8E875C64CDDF20EF2
-AB3C62453827302B77FA2B876B9011E93DB24109ECDFB08BCCC67F76C22462B9
-4AE3041019379D0EADE8654D2DB8823272B9CFB2202A3A67DC4BE5D54B974DE7
-7562A042152A7DC1E5A453511423B288CEE8EACFE41D10B29A96B5252C058E8F
-B0BD004387BE048350C6C20D8B159A9F6A167AF8B22E4AB57AAF303AF9FAC676
-E7BD6BD032FE0C284A8CE180CFE24E22570F2C1D724C593ECD4C8B0A035BD821
-EB8E262F5F8011279454348966910FB9889D6CB47EAC0844648CD5DE4A9F6AD1
-A6BCEC860DEB1DDCFBDCA01C855AF0E73307D95B4E4B0ECFAE68754FDD1A5A4B
-F5408024CEE2FC6D85B38379498665D4B54043DE9D7B3B704669E766CB30FE6B
-6A3EA29F49647428ABDEA2C263EEACDDD333364533EE4D4BAF93E2B1A7841419
-B2B25DC22D5D0C62E1560347869270AFE440172B2BB963586CB61E969132D881
-1E39A33D5DAC923DEE8E85CDB33E227691A543398A25A3383D4BBB5E7D5365BC
-6B66FFD54819D9A064EF59020001D387E7035245CD0A9DA4681257A05238510A
-F224E2ABE340B1917931E2C4F1224DC694FC869F57425DC219D36046C500CEF0
-E5789E3E99C1F4F644300A1220D2A79865984BA7E636F02AD6B78BE64522BC90
-9D440158455096F784047E10ED44983B5B9D87CEE25522EC371B689F3E021B88
-20EA0E623FE4C91921D4BE6E14A138E733685D7D29E32992633C7221D3601C49
-8CAB875C554E969123882371A917DDF87813E4AE5221B2BA267895BBCE390CD1
-C2F16AC6092DED9CFB567D599036679BE1A6D104ACB7B80F8BE93E126FABB474
-9EE686FDED800D5595D679A3401E218BF3B84CD220CA0511DB3F66D7B5473FEA
-84C3F144608774780D3188CBDA1B1EC60184166441D727666DCEC83F24B1FA28
-1CC2C5D6C8C1ABEF666C6AF22BCD09AD37E69B147EAAC4F4A4321B4AC7FF5FEE
-DF286DFDDE34C7A45B5E0A6415D71B42A23F1E5A4C387F348F28CEFE59BA5D20
-BDF31B70F8431927EFD9048C00D36F23DDCFD84511F7A29B1009D3EE128C71F2
-38FED266DDCE9F1118C2B3E183376ECC1FFB884F0D83FB4D4D8DF734FD90859A
-A9A8DD1C0B56E14CF5E1E6E52B0FD1163A072E3EF47F87514043E4AA5912FB98
-21AE97568A3B363C70B67B6A28108D9AB3EF7B8C04C0C6B68E36166605B56636
-5165421C3162C595EBD857D407195205E7BD43DCCFDDB06AA4EC48F0F4F89839
-56E6AF97D6F7CFA9E35D71D30E44E6F83E9586BC51B85DD383F0720485433B1D
-7EDBF1506023C35AFA6FF14326B5CA6B858910E8FE8E1F88894A4C40F7D4011A
-A40E6157C68A71BA8665D5C345D6F1CC9759FEFCEE7F2B0AD72155339A39715A
-D5FD556C02C721C8011A1D9F2C7B43BAE0EF48D0617EAE4ADD901535985E87FC
-AADB22A11B7BA545796EE2C03AD7F6386EF2CA01BD32C9C23B6445484DE87A63
-46FFB9C7DB9FFDC4B295C924BF3A7A461695735A6E53BBBE8F261FC493A35C92
-183BFA79C39F8B6599934B0B000BE40E42A642D1C9197EF378EA199950C793B9
-7D4D4D2D95D295706268069B8AC3E214B1884D973DA7E3DE77FDE870071B9178
-9F45A79844A7C26FD4749402BAE986E0C29BDBFC5E392F8BF09EE13F3E9D211F
-F35CF5914B16B70079CC5B0C718152CCE2C6552591B66D5E22B4329E08247386
-95E6A4F30DC7E54247F7E69D6A402FBBD7ADB85C3DD65A489F1D00B3B3A6AE4D
-439261CCCF85B85FC9F5276BFB288A8314E51E8664CB5914DA4D24928C45BC54
-B60B2A6EA7E5F7C05669B0B5538B4B356BEBB60124CF64476AD5C4102EE16AD8
-D06682DFB2C8ADBC6D8B7A1A82E9F366D711B2424A450217DDBEC64B8BCA7222
-9459359E165E42BB4B1745CE01DCD011156DF98678F8AB2E4822D0EF1A540149
-B984E97ECEB831F1495C97B4FF65E66DC15F591A70C5FF3F8C5F2BCD4231D2CD
-3A1D944849A9BD0710F5E13189F1E5F1E0BC94C99A0AFE09B8A9BDA6DED9863C
-E52947195BDA1E631C16F135558E4C446015F5410A2997E5AA0730C0B8A64487
-1B7497CB014D51C82F066EB7AB47AD360C26B5FA080C467A6DF7391E176946FC
-228CB794B431923FFA2EC214CF7F578DD1A7A8C9C40B38D20919DD7CB02CEE44
-17DE17133B2BBF5B855F70B4E850BE893226DFD5F0A04D7F7C2EEBC35C796697
-8DC79636E04C8297F177760727E55C44545E19204DACB37A7C3A8EC7DBE1F798
-163A743BBA7C6B87912817A728F8F593C82DF49CF3305290C8D74AF4AF4BEDC5
-25605822EA42FDAC7047BA1120D32107F189274A629D5BCF63D28851D94123A7
-CFDF7BD9DDC51F523CE0FD4B113EFDE8CB8B7822176F4ED431C47FEC3BF39B58
-DB015462B45EE063055DC1A34212526A1D2A04CCBA8DFAE9A440334316FDD47D
-25B6FF2CCBC69FB9F119F5214063A8E36ED59F3EC0F889EF2245A29823DFDF10
-82B2447FE12A9456F841B782BF6A2A31C257ACDA4FC57C85D807F0B0FA3D090F
-59D64BDB56C4760D9253A690437DDFF16619536E9CB512F0B7778F824617E263
-2B154BFF29D72FDD274E5833AB81AB89FCF9E02CE9E403454B6F381D26A50DA7
-176249746F258DDBDF90336B21D0AD0C7D5F79D6DF256621E9C2CBBF7585B266
-3D0CE331B8175E9C6240D850A11B0BA0732A331CBE581DF02074A28303F648FA
-A9E549130B79503A433CD128B961A0F65FB4424860DFEBA4610B21BE418843CF
-C3A3571E8BF031D04301350A63546DC8FC5AFC0B91B14074F8F13183ABC0F7D9
-18A5FA6C69FDF3DBD843E6E8770B7D4D426938901DBA64537D5FBB7A99B44E76
-59F201A6AE8848BF459F3E37D4F41B495DDEDDED20E44D58815F5235782919F4
-DEFF1760A19B7EAE5D0416C52272B5E6A68E61CCAEB4112C08D6AEDAF80C158F
-F7F3602BF867D41C98A102940D8BDDF9683D8869D31FF86CABBEABACC9DF3E30
-4CA445291C3FF6E15CFC67F9F1E840D549FB47025B11EA27211BFE0392F5DED2
-C8A58BCAA99DE800148B160C2F05DD8A47BD25440C14D015202457F810A1420B
-798FA57D04A6B72B0A3B93F48C2EED262721ED3BE1AF9CDA8379D57515A38304
-A5331F353DB1C47BE82A264C2575E572ED00A7E0A5571A6B429D165D16C9F8B9
-C6AC7258E8E3BA5AF74CFA54A5DFD4C807C4111F7D8C9930226DEA13317607D2
-3F99F12FC5E9B2C85A13CD7B8AFCDC6DD6323DD6B2FCB462E2BF6A1A3A35FB08
-B59FD161A2FC7D925AB07DA792811FB23BC31DB40950AFEF5340F5681201F34F
-40252B3635E34F297E523649AACD48E9A2102AFDD5EB6E53C00D0520DD6311D3
-6292B5D6170B96CB7B9119D6156AF9DB7C1999F7865E6CBD0FFCC09D50F1D55E
-93AC2B7BA182CD223A53A0D431DC3A7CF3D9BD4E8C9EFF126275CC801E1A7490
-E0AE144E68364A72ED3C87367F5A93BE4E5E05FC2F5A1E37AB4C0E005574BDE1
-2F35B66FCF1C74FBA65836C2E726417E7D5CCCD2CA833F79EB1D7F2FFF3A4E07
-D054139DA553B24A508670446137080308E4D66FAAFC05285B7F18A76323AC3C
-93B843B7E442A42ECA4F1195BB81004ECC00A86F1A66C1419455DF96B5C18A7D
-E7CC0485B447F3641C240DBD7B6E29890A4CC7DB3E220F8F2FD51334B8799569
-125BB626B1B79AE14F11EFF50B8DBC8AA9046DB569EDB971E664154EA58E1DF9
-5961A86680A454DA8605E4604A83DE22D70870259E42A9A657874F7A36EBB93F
-524C271CE8307994D3EB3E09F2E9F139E4EDA7993C6FAC9D3E0ABF00F4F7AC14
-0406D7683F6084AAD3E0AD0C108EBCA94BDE4814CD025E92AB4A5E4A0D9B2A58
-262713C25212FD84C0D81AD012887B901738332622E09B03AE5304AB4D742E89
-D36D4CF255F53CDF9819AC4CF86B1DAD57681FE8491723651CFB54D3A7B4DBA6
-08746FD44272FF02A8F21ECE5DD433E380DB8125F4417188021036F1638CB6FA
-6D0A084B3A8482C21D47401154BE666EAB29052D669A853D2783BFC473C0789E
-E88381D399A773DE0449DE49FA847E5827D16F9BA6F63660F515328ECC3B438C
-A8BB639F045BD8537184F7A6A1072C101B3FD270811F0496F4A734A69B791F70
-5AC0E1B891EBAEA1FEA231B0A63A2738E74A4649DEF82A717E3C5B054D6CE868
-6ACA07DF4D4306921EDD1E8DE6E378E2F5F669E4BDBE3C58D44712BF76D16BB4
-E4C294CA329839F37839233B7C26FA6D34C259E741D805FE24CA60F53B6D0E10
-6E8065C4FCDDE9FAC42125CF8BEB5CA2A2E9F7DF8DCE38C314EE6FC50E532073
-61986E6D8AEA90F325561BB1080408F541E7034CB507B39230741179720EA9E7
-77BDB6F3A6A2AC629CB5E33EA55462BD33468B242AA1EBE01DDE66CB7B098DFC
-74C64598F12FC3E029C382AD73361F8262CAAAA3309402959E51D150D79D90D2
-21523F67CE1D3257725969F86D73EC7504D824001320918EA45D136BD0C06EB9
-2CDE3D6C4A28B4F69BA1631D5723FC3C6CE7221D0E1A6DAE5395C95C05D67325
-5520BE4B09909EEBCF8049D3C2236A7D9C55EFADF775FEE65D974794CCD7EA60
-E5265EF9A9629FF0F9C414B4441A614B15018CCCC1EBCE5A7D47C14681D78FFB
-FE2A40EF5B090A793AB09F0188B0F8E196C46C68D0111671612E4FC423668E31
-D75231A7C570D6CA6A7AB859978AA1DD206290E4D7650664077151F78FEE3B65
-F28D761C0501A811DF4E86C0ACD7670773688417F167A83A63E3DB9A493871EE
-C44BE19C0501F1A79596BA2CA1CB3224B478F5C03D7484DDAE9DE05C7FE6F085
-3296A235A5DCC97FE907016797CB4B8B59AA50E94EFAEDF43F2B48EB67648BDE
-37BB7382A2EE1D43E0CFBE632779701BF4FD4A072DD4FA8ADFF523705495FD4E
-4599C0602B97FDDAF610AB4ECEBD03D491D915E5A519C253CABFBAAFC8314FAB
-3AB59C80F5770F21717CB2AAD2C4568F62C7D391FB7218CC755CE494380ACA8F
-A2BD1E7150200EB9AE20C0FD1DB8F519A1F2C30D3A8D97B4EC6D30C83A127F35
-C3086603D75FC69E3F0149409D9329FA98471F2E904B7BE1F8402917CCD549E2
-3747A46341D6EF09935E2B9B92F9B92593F5B1A6573BDAC71D89B2E78750B142
-0976D0081689FE99830AE09E9584D407BB748030E33327702A5E4576396460FC
-6FE1D88D1DA9BD79EAD9BF3F3DE9BE3DCB6DD729E7A2BF90DE614A184847B494
-565EBBDB3022FD2FBB08004DEC355F32381F573588FA7DAA1D25D125E5E77F6D
-43DB95D150A3C4A26E36EAEFCBC9FF5E767E29D968E51AE7B86BE1D68F73FB28
-F4342DE9C788E56062FD0B3584EAB404447DBCF1FFA6E4C17D0BAC86ACF2F119
-B01CB95355DB97268519E5111A0B6D8E36C421439C603474965F0B19215745E7
-5220C074F4C51D472663769401AA8EE0B54FF7085E8AF8E177617D059DDDA2B6
-B1F0B37E1AE18C005337D3358185B3B8F2B74A6811B71CEF37328C8D63089AC5
-AE93CFD82B6A28AA57E69CCF7174D1AACDCC11BC6CE1EFD49333DE0BDFE29173
-D802A15C24F230A1258F02E3F1C026C9153F0B575B8EE9B06F40D1FB5C5BB8A6
-0D71FCF1F05C26971F650A2D3BA524D70EA611A1FE613D8B883DCF4B3803B188
-5136FCD635CB8B1453B24CB24A0C8E46EAF00099DFF9E9AA1A8CC442FE914BB3
-9AD671B186CDA7DD7EF4266A5A648EF0E4DAD721300961CB2E7381F857B54DE6
-E11E4BBA99AA1D18850CF0672BF24468156526012339C25C6AAAD1295254DFA7
-47F61A700E814D057BEB65AA6D18B43CF2E0844A8387FB93B000897E7311D55D
-BE9293D7B31256B68545ECEFF76840BDBD4E35142A42026608160C6899FFD1D5
-88F7FC49F77DBF435C7738872C06CB97212183A39D5D67B3F524EA1C3242B459
-EE7B175DD9BD5972249307F27757E2A9980F90803B74ACF4F3B907930F0250FC
-7E3A528ADDE0C8F82E8BE2FA7C9CCFA00D4D30E688A131AC6D62F6EE3B5FA20D
-3DFB5F10A39F34728DAEC6B454D69B7B6D6A60D075580CC6C3D046CBE098FBA2
-695DEDA9B5D297EE34543668BF35EF3866CB9183B00C531C0630E2F2673F1806
-BB4C2358CE221325B074A192DBAE357511650A565433789AF3226004D91E3F25
-4A2C42014069AD0D58B1451EFA5994687C26CF975A5B67CA079BE18F6B05096B
-7D6160BCECDD8E74C237E53DE77D702079C3FF031AD9FE88A948832311BC74F6
-67DA1B65A8A107667B15655D2361F9985E5EC1014EC95CE15F8B24CAE2D2B5DE
-72086CA75EBEFB374C2B7A673DDC128BC179254E9F3CEF1F77199C134402C0EC
-670A510C83566D9C9104488FBF56DCE4BDE25357CFCC3FAE2700844DDD42A928
-E607BAC3AC56F4D607897965947CA3250115546E59770E2D9BFA5E163BCA143F
-7122EEADC5E8DFCC6E2D2DB9E5A640C0414F49A147A469FB011BEFCC2B4294EC
-2E8491C5321F16FBC3C88BFE2005C7A95EBA8EED6103637065C63195A52EB679
-8D106E6A3ACDD0620A54C9F9B1CE3CF76EDA503C1EC64E26D2D0431F7CC17746
-743028B1F0C0CC8AFF6F89885783F9A3F0C192A555494069D23FF0CD910EE91B
-8C99F3575FDBB4129E7DA441D50B939BC396BE10767DAFA062CDA8D8A0EAE275
-0D41609B4CDB4E2FC5035EDCB847B671C6DDD07EB14C9C4D1A9F70EE09A22138
-33D39677A5E8B0A85C11C3BCE0FF707495F7CAFB2E773016FFEF03104377A529
-1A25D74D7D8573AB714431EBFF4FFA84062466A5BDD3973CDEF7D675981D4FF7
-B914889B997A03CB64F9B80E4881989B6D86DBD1D6405D72CE13100A802D8ED5
-CD5BF3210257FF538161C70D35D002C7E84FAF36384FFD6C1B882B673C78B691
-C8D263E92135374A9DF336200F008878533610709EB1CB413D5BF646673D5141
-6D6E59852BFD395B3043D3B91F3765961DEE1C48AFD9FE246F6F4EB19763C303
-2594E02C7F2666A8F396B96960D21CD46B75E9DDFB9A74B00ABCBAC2173D76A5
-7BFD860709B82DD07CEBD95440C90AE4BD999F56E4CC6C07692F95F58F358A96
-8D4694A04FE16A8DACFF0743C1875F3CBC0B64A3B85E07401906D740C06864E2
-20A69ADE0BD9282EA3B8A7447BB5DC5A718EFB229BEDB5B1E46C41DDE1AD5AD1
-7595BC33A1942020F594399645F450D8DCCFF6E74AC99CD04922B762F7BF5877
-050CEE87A64054FFD5C066193B18DAD221FB3300EF1A2019052CB62930A6C8E8
-DA103F126CD881F6C3686A01C20A0A64DA580BB3C1846E12D9A040973B087DAB
-343DE8DE1A519F9B1464ABE131DAA2C544DA34FF6CDC33D628F62668E851BCD4
-B6802CCFB8575DDAD5B98BC77E109F39CC8E0CE132D15BC4B8BC5F235BDB983F
-07A62A1EACDD5F943272B37E0E3B90B951D543F6275A1F79BA3118FC5ECDC0E4
-93091BE4CF8F1A13F5326AF096DA671C0E8BD9931631BF95690677AE506A5339
-AFC10502C2FC1D349B0D7015EC8C5FF0BD7FBF583FC92210B4ECAB6CA9D1ED1E
-B1F8313F67D707757BAE04F14983B88D55B27D9416DE24D59AFBD96F082BD4E8
-6A238ECC361783E79D3CAA12E03B4E0575A870B2AD4C0C9AC678A4878A532C03
-ED66CA0919BA19AD6185193A57D29200F2D60C320358DF9C779561F673CE94FB
-30BF804E1FAB52FE6B3B36621A5871058AB432187072C204ED630DFF588AF5A0
-190D6CBFAD7FFEC300D69553FC8C16415B4DDF6D997A73E111B27B54B576D2E0
-019CDE06FEED4293828FBCF9850136E5A7A3707635CD91D1E741811A1F3C2586
-87FEC52BA590B748A75A38D78482FFEE4CC6D556920EB94A96A1DAF029384DA1
-8EA8322D2E3247D05548A8AE74FA5DD42130B9AFB0354604BFF2852A2B21997B
-7BA7536C5A0BB9A6CD31C36145E186036613405F6BD7A4DFEB5E282E9072A50E
-6CFFCEF4DAF27D45A954084197AA9E33E4A4D4564722A524237E9BA18C7D7861
-7548074048E78BEEEFDE573490766116FE9A4ABCEBE168FA7B46186ACBB78541
-805EBF2A905CC697BCEA3E8D5FCD1F6F24A8C1DD040319760F48E02937893D53
-3BC6695AB5AD2D83A0719397650FFE37548BDF56BB79E1B5C89E820D82FDFB38
-E672A5BD180659309C430B26D432EE2194D580D75C153F7DB436CD6B6FC51A44
-A807416355190534C41E09B808CB53DD280CDFD64D19568E163373DB9150DA95
-6D28DF5EC39658DACF66093059DDC8E23681FFEFA705B56CA1665C66C693A016
-791FD4CFBD4F2F2CCC6D47980D4D348A4A960CE8E74AF3EF831525272B7768A9
-5B1DA74C4396A804D95555A2AE1B684DEA08795363692440E1B8770A62CD0BAD
-72B7E3DBB539BC6B036A445745EB8B269F54F20712B5F234F07AF70FB84A9B31
-8B830564452381C3155B268A9EB2996CC84A8D0C9290CD03553E54B4B02151E2
-54382494B2CDB7BE8A5C4286B4245D0546BDF0D397647FA7C71A15018847CF7E
-23F75E69A88A5B7565F359EBE689C07C47B5A50FCF5216219F067E858E48253B
-A9DA834F94950B1A5B5412B2C829C2E689D2C936EAC9F87A112303BAC082F9B9
-BC825C103C4F01DB005FD6D5B516F062B6CE7387331992C254980BB3E3335E9E
-D214CC6C77933CF5836C8669E9D24CDD9E5E4FC24A4EA46974DC184B262C6D41
-899B7536B71FA3D6C0203AC4AF8475BBC6DB1974870A79467F2851C0A06299A9
-C945EF0872382F429413679CE19F3884A7DF01692544D127A8F50FB74DFFF4FB
-676BFBF1FE4DB88E27406C0639E77C7D7B6CADE321636B10F87CDFDBE940CD78
-CA9EF58CDC8CB8AB946969554963ACC11FE7A028C245D4A210ADC9800B287EAE
-385FEA05BAD452559BA5516B7BE4BF14C02165204DB2DB770732FC00E75D2714
-0A28292288732177AAACA0CA5420E9613183E9D70C256C038FA83BC1E5AB57F8
-B4A1A814FF72DCAAE2E18E310FA2ADDAD57B4CF22B3E14421C7309C88E2D956D
-CA8FEE193B88372B59AF0FDB5CC97AD29CDD80D0247FA29BB3C5BEC1C44242BA
-A3F2F73CF01CDE620351E954DE496945E9E54E007F62E285D894596D59854724
-5545E7251C59182EB3DF455DBC3EEC88560CD1A75CBF0C2B2DBFA09192B26914
-75CBDAA5D5D709980ACFA795DF8C3790BF88DE1F6FCE263CDB4127E89E30D616
-E52F0791D4BE886E10099BC3F0ADD41FD636E40C863AE8A6F9283D5B7C27E7B0
-01F71F66E829476CB7440213DF68BEE5EADBB5D9DAAB4F0AEA3F025B5587FEC8
-A24D6B8F95E69CAD2B7226476750B74F013F1F0F5801128FA0D070DF2AE52C9B
-F8868B466125DC520DBA3A17CAC6C19836956CD6777A06FF4432E0D3A0EEF390
-CDAEDB2D807C67A43D893FB7BD18418A5A15CC476748FDC1DE5C6F4A8607314D
-A82612539E3EC6E15FB19F627E57DA83FB8058AEEC09E7B90E770B99D294B3D8
-E78D3774E6CD9B4E52DFBFFBC89AB73009163B34CC7850C2C9313D3955B29867
-8B1AB6ECAC1E3558964AD66F2EE1B0C41B26EA770298111F4BC19A795D841FFE
-86036CA074BFB85F80D0C5A586D4FB1238A8C60F93BAE298A5EAC26D55D38DA9
-92095801070CD6B5B0EEF6224CD2850AE725E42B672F54FD3C7B72449AA8107A
-1E5C9FC970933D74D2D6FD3FC03E2B56A8745B34CD50B6CD1E3559443271DA9B
-8548D5988296C476D0265120F5FE04FF15D05D1BB0D05DFC0161ABEA805CE619
-1E1A19C96BA1CFE126AF73E6401AC45D646CE1FF6EC73DF0852D4AF39636CCE4
-119F53A808BDB986EAFC8C8FBA94E2B6A73B8C6C2C518BA1E9626DAABF1075BA
-23AF7AD65C141635824C93052DA3ACFE7A4F78EE03D9705DDE497EE90A43A0B0
-5F3D8FB276C5EA974683F1C834EF0D08E371ADD62B15E6691F3BAAA17A3E7FE6
-077DEAC2686CD88C8E277D823F2B3ED4CE621B846C0A40968B5341D59320A10C
-8EABECD761FEA64809BFCAE24F28347AF5281C542637E22EB13FC4B462880202
-3F4CBBB97DCD885E582653A87691C5E3B07C99A2BA90EA830CD0434877C1298C
-706CF38C137B150A3D3BDD91FF67FE1EFFBC68915DE5EAECA6261AA5057738BD
-A15497D2D3B4B61B15B771215A629FE6A6223E39E19380819E43284F3E1D087D
-7CC6AEBB21FC0D3D329DE0FA37D1B3A3A0322A0B4926B3CFD7DFAD0EE18F973A
-91E08EBC9070475804F55E84634C30B0455CC5503A61246FEB234A833AC0C0EA
-E7DCA5A5ACE5B0EAEADC492807BE15781401D4FC3BA47E69B112808907BDF1F8
-D7E7FEFCCA01460429C3779305446E0B489643394196F0B74EFEFEF6EBD6CCA2
-787A82F89951C145BD3E84D0091DE3F2FF4B30DACF2A9B256CF2D17D51051227
-D2EEC4B81E29885973E8685E8F6D9DEFB03E58E77ECEE91E833D99BDB1292158
-D37A2202F805E3856A47CD89B3851AFD0C0230DA10DFF1A3D05AED5A093C56CB
-ACF6162C56F39C0171F8EAB7AFBF3476A9C26B5C25C1C2C329B3918F8AC39A25
-F0F873266BE95A35E98773525A70B9DDAD168A930703DE3E6DBBD851178D5908
-CC9A68B2966D12424EB01E04F1DD4F9720D984A1E7890989D126B4AB9AB72FBB
-D3D1A90E6DD97941C9D673976C9E3D63EE82D870B922E0A5282406BB2E4AEA6E
-348A88E24ECFD3F028574A0061C637BD6CE6CE53D161B760C437332DCEB939D7
-E7B820E4A35A462F9A48389111920C293DE0F129202F22C437778EE114A9913B
-5CF32F9DD78DA38783A240B39BAA0DEE1203EA69EC659DB8F6E772A710CDC28A
-9AFF9897CD3300045048C7B963A43A6ABA107EF492915B791181ABA49ED58EFB
-EF110116976DD0B0AB3FED5E685A2226ECA937B80DBFCB5DE0D5DAF85B77ECD5
-FA1714275C4A8BAC5A5A96979E85C5DF4950EEE8443F3A0A80803B661422A8C3
-8A74D380CCC0D3DA1D0E9DC31060751C7AD6C1748B33C1950C66EA7FD079499F
-FB290FBC6E17968CF20355D47ABC9211699101970493B7F315F2196413530AF5
-4DD48577F5E6B1D12A1B2E9F5DC804635A831EA65303FA9C2D0E1E31A7C1728F
-C546F15D734944F31BDCBF2313D9DCD40BD0C4DB3F69F686ACDA82DFC326F2AF
-8A08C0DFE1685B32EEBEB6C27FE6CDED95550A213F028A682DB03BC0985B1CF0
-40D144F8050D4FDE19BD00686FCE960E2500FA604023B02C0E315FD71D984E52
-CD16CEC7BC46388AA525F2CA06CC11C5321F6C563DFE38C947D8EFAEAC856DB1
-DBA53CFD1136BA8E408CEBEBB20D7C10EA2CFC9CB8EDEF4E34F411BDF74A7871
-37A4CB9D184C10C1798277EC9BBF272204ACA44673C5931F7BCC62DD693F22F2
-2318A90E11A3C29485C3BC88A995C9AD63259B327B613C91D05F2809099FFF99
-D8D596187B7C7DE7DCB5564578565340F9E3F5B3BBCE299D5FA3C66A4D08F5A3
-15C7862F452B43D6DFA9C4DAEEB2BDEB450A5556742928DDDA517A2AFDF0ED51
-8AB160FD0F8164E7E04DF89725860BC50B7DE75CD5B403724169A121F35CEF1D
-6DA72B2F0D908A56ED0AC64A05F927B24037BEC994D471DB81D6AAC668FCB9A9
-A56653914062F7D3FC78BE6B75880B543F66D2762876569913FD12768FFF146D
-3D24BBBC876DF6A53C75D70000C6F8B019CD762D6D2BC64EE7046D2BD1DBD891
-6399F5E7BD1B5CA301F05EA0C21F6BE7FAB614E82A74FCAAEA3D88FAD9AC3978
-CF58980E544F1430AE39BB1F1A8FAD760AAC08E077FD493FFC345B1CD0CD7559
-7C8AB30819492CD58821A743436B4907099EE5310560CED64BACCD834A969591
-329BDFD8D0A45BFCAA2FA61BF44A0ACCF02A88F7C1518EFE9F928A9BC986FB4A
-DDCF42339888846C0A958558E4A4D4930862995E0C457C44FDBA5AF54232EA09
-CCB32EF02DB3F25063B18D66E383ECBBF85A85EF111588746499DA03C9970D19
-51DA7140B40D36B912F74C56DCD1C78F66D59AC960E3F49F1ECDB9EB91998ACA
-240755AD792C3550D76875B2809A4C2F3E48FB05756EA4F3F667EA789318E4D7
-FAFF08731E38FFF69BFAEFEB46565DBA154719778EB6DCC9009167895CFAED3F
-2DA4A34253674F6E0869C657E06E84FA7CAB672148AC0B3211E1C2CF887CC6F1
-0A0E15FC84DD8D86E568B801FA921CB2D001BA12C560CDA46C0F0BCC7F5DF546
-3D4F5D20E44E185DADDE662E35E49169108062654454A40174B7C253689F7ABD
-7633A7CD423EEEA1A17F62C2EF2A44D2308AA4891A52785A6D4954ACB3E3BA3B
-254BC9114D465D8C85EBC2D288733DF4CEFD70EF64EB2E9A18AED697475EAAC4
-4A98A284AFDCF302A086BE220D465791BD0A7C200082FDD8CA24049815DD7476
-850C6D9DD70137BF5E639068D54DF998631798E11ADD52B4AF3A57E4BEC7408F
-DEAD4E652AB782B1B565473AD9693FEFD84A96AA95700254CE575E3A2BE6E360
-92C1C8D4BECC4F35A09D324F2CB2AA9ABBEB698672A9C024D1076DEC7E37B835
-5DA1936F0E70220FFC51173E563736002C715C886533B445FE7105DE8DB38655
-AD1C8CEC4A80EB75BEFC9A94281EE92478DF3B139FE0411CC169CB0C7FFDEFA7
-16E6609FC71D81D41320D79B45A74A4F209356EBD8B9414816D588107CCD5EAE
-F3766056AF8460426DED6AF02CE100550B2EF2EB26C8BD0E200399B921118EB7
-621526D87926638BA9D807EAC971279C873F4858F1923DAB733F03331887D5F9
-7F0A36FD5400989A589FDC5930B2D15FDEEF68188BCD9417DC2B342DE2919CEC
-2FBAD986F778FA02A83165A31DA9A57E3AD10441E66CDFD0C8263092CB9E649A
-9CC820CC956B81087F7243327D95C2865E5DB05DCF0F94C201E4881823DA13C0
-72C31B97BD861E56EB013341DBD550F4E26FB46E68B2979F07067115577C1C13
-E31AC637BC1DC4BCF192A305F228D00EE0DFA8D51983174A99B2906F453FC77A
-F60BDAE2A0DBD9FA830A1D3EC14640270B91581C302F10863BFC0BB296145F98
-9FD475AC909C05EB7E1298B1EF1B5FEFCA6A10F7291A3407736B94DD38482BFC
-BC3B8AC56E70B3B254A0158C9A8E514EBCD5FD7C4CA088C44936F3548D56451B
-6A8E4347D346C5D9B1339ED7628FB3F89444438A6F80B031BB7626139FADADAC
-FBDCA83F8646F347D140667748A838EDC1A5A8FB2C7F08800F815F04183769F2
-C9A8614A640631A7C61A7DECFB6DE6AAE5162BC566444D0A7E7D1D942007E3EA
-1B158FC1685A7CA3088C34E2E9373452D6E219922A4209D84EF43BDF17C9F261
-5562E28E480C3E6976D2B8F6C346E135083D0C4783EA0AB2F06ACB9C831F90C1
-FBD4D5EC84CB1290E3BE9EA183EE572E68F6E2A914E2A4E5BA2229F29DF6F4C7
-88E776969191017973271452055536701EB8F401C2FB25949DB4473D8A523697
-0F88A5268FC4B1508B790DD61DEAD35A42CCEF8656C7DB92FD0E8BA8F79F7F10
-C8B38FD1CE9F485A094E119D090A4B9A970DA1FE5EFBD0BA6524F5874FA8888A
-FBF530AA22371983BEA0D77B054629AE3B1D1FF5D066CA27EED993B5D2FC4F57
-CF2864A413098141464B56DB6E51F24812B862A31E76CC92960451C36CC00B13
-9F5920D9B9F39CE7EDAD22CDE7A27D234EBF39D91FCFDB87555847CFAD4EE711
-B6DF66F45079F9670A6E5617A2668C234C3057CD3A939FBC128B2114B1FB7AA9
-B63D96F47B2E30221253DCA306EBF64999D666EADE0D3C69BAFFFF35DB41BFA9
-55B54E16C578B1FCF8B383D33D5AFEBC9E2806E12D07493DF78B9C7EFD5B892E
-C8DBBAB6F168A65A785A6A30C500E5A8843514C6A7C8280281DA64D38B960190
-ADFC738837D2BAEEEBAC87A61E459D248ABA66B53745F294DD38B7A505F455DD
-4E2025457233763BADD741A6AF5EC610004DADEE3041E09513598D070C481DAA
-D624237D14F43E861DA1EDF8B2034D610BEFD4C01963AD11FA454B3F4946A0F0
-42B65722FD8F047C1391DF886F27382024403AF6E0E8F5BC7F7E0FA0AD851EC5
-8B4D415F531B5413EA9F060C24EBDCA30444406532F775B0A983E0346CF76872
-5A8FA9A2060757B8791BD90835D9AA27706E1A7A2853ED76BC7CF1E1D7E46F81
-C1042A6C577E8F8ECC4CBB1200E8BA8D2DDA863C0FB287B9885094E17A00836B
-1B3B32CE070892CF4BF0D40D40AA39135AC8CC7CF784E7C306BB248083D8911A
-5A10A67712F1230975578CA03A218ABEC6C76992E339338985C51D624CDE420D
-71E86ED65B2F63D02CE09AA13379EB2B04E64C351EB35037782A4FFA2F5F0154
-CA727CE0A21B90DE53AEC9F87D8FE94470A09FA1313AB0982584449F23388363
-CE4A9DBF75D85A1D1F5EDAD209A8D718FCA14CC99BF55ADB9B165135A47BEE9C
-AAD89CE551B6B91BAF61C685AE30604D3BFD35202914D5B70181299EBD921719
-9E019BDCD82F23D4545481AA010C85B8907DFA2E16CD174A1A77E4B6A9DADFAA
-2EFD4EF91904BA0DC5056449C4BAC3F8CD7275DD7D0B972ED1C5FE49EA6CB007
-21392E91904455353C3665F3152548C4D56B3BB4FACE1AC042AA2099DCC382B3
-AAB4A69DF065017C33BFB2B01D96FCACE327528EEB16DABF2C07F4E938B97D2B
-343240B185316FF749E0F8578E4B89B0496DB399E914266521AE9AA633CB7C56
-FE9F4E1288C1A72CB47764F52D869C9AD9763F672DEB14C6BC8731586361A210
-5DA7CA7C7861EB18AD2ADF5BEF65E752834F806DECC29EEC1EE81A2AF2689146
-BBCEC2180C4C662C8AAAA42A84F483E5B999DD6DFFF5A9A7D501AFD0C993256E
-66988935EECADF7DEDB64377D71956A56861C2050AB7AA808F3206C19516C233
-2640FDF04F402D508AD7A6EA00944F0AAC0E3AD50538C817877E29EF5ACA02A7
-63017E53A286BC31DA51D37ED506940AFABB3BC603DD96D67A342D4517DCA0AB
-F56F65EBCA3B3F4AED09CE3B8A8106CCDD7855709D9BA233A333519F78BD73F3
-C4B98FF9F681D12239D0526A6592721CD7302217D3E0F88E8DDE741C7D887CB3
-F8683808CD4D7D594E4F5A18984CFC74CFF31684526CF7D73112EF8AB3BECF9D
-AE3DA2359EE026B9EA5A762AD3D836212AFCE09B5856AEC23ED8670902AF7C61
-EA98D24DBB2C2045C186C008E569CF06D805BD845AF3E4F870E62CD4E93FD9BA
-DEE4065B16130D777547EA07484BD2A0003B52506D55A71AC6FBB422E14FE0A6
-631E9C0C6F6D003236BD5880315BCBA0F5CD09A267CC5D804258A2034155CFDC
-22D22F952FFCD7C1DB06C532775B794EC0FF59F9314BFB6FA11DE4CB94925ED4
-43B772E01BDBA2B578C4A0D88309A9D6A03D60B5B891B40AEE8E02650A706992
-E81EF07F071E21E7B3BA93F8F65111AFD9D3ECBC2437E25A2037FFBE7C18E66C
-1D374AFB3C0E17937EEEB6E5AE26A52E8C4A11464BA2D688B5FC145996A1DF12
-92A391A4E46BB4BDE8C4564745B2689BF4C5F9E722C50A96B80A376F79C7B7DF
-41DEDBEA2EBD898292CD0622217BB62B038118945B564A1ED87FC14A8841E1C3
-72A335EE1CC6BC4EFE24A44F41E7B32C55A0E313E1BCFD69EBA90A9FF5B8C13D
-6C2C4047D40696E784614EB6CB1BB7FB3D67FE03754D3BE29CD591D01F02B0F8
-B9D811E639297A869FA3CDFDFD1B460148535E30B1B9164B2A2BEFD13036B9E5
-460C68837FD00309214ABBDA2F6B7EBE0069228F5A1CAAF41120237B91EFABD4
-E9C8EC82D76771D8D638FB3140B9FB3BD7040733ABC350C75A9C92ABC8345851
-C661846452D72FD47DCBC0C53E4BB50E6B792B3E462E7F3F43346E38CC2FB2AB
-E3C456D0CD0FFE59EBC284FEB82919F5372298DE9B51B9756F8160272715E91F
-7D7249E3B66449E53DC5285A682B755F51DE544E4932FE019A12BA2DE8E39531
-1B3C526C1502E194CC0671003BCB29C303D4DC033A28942466687C41792EBB29
-1EFFCB4990361E8CBB554DBD6FB14BBDD6DD98E97C10EE1A74D758AE802BD9E8
-9687B528DA0CFDC755FF9EA8F994C88C5E111D457B0DBC7654E4794FC399BB8E
-7B8A7DA51208C746CABF4E4388FCB637D24A6EF93B1707D77E3859085A9E3608
-A85C792884AD60D4416E2F644C11E2C922863AC370B076FD7C5483382A5C2D05
-72BB563BFB485FE41BB8479469A592AF7622082DACEF884768B33072EA301531
-3A54F2374DCC03FB2DFD198A47CEC2AF9C8DF9EE11BBC660B26821A5CDA3E6EE
-79F281F38B622B2E3D1779B7D87A86AC56D6E95D278489F383B53934F0F41BAB
-0225840E0B5691BB5A799654F5F0BC86C4ADA541DAAB343D1001B384470AAAC2
-1726FBE4FC5D7F16E0C73B24ABD88AEFA5F4D993740A44FAE3C2E97650414B91
-FA91E1B5FF940B12A07B51222705712D3031F6A3C52966D9BC1E9A91B8A5CCBE
-E26F06D964FFF18725A018BBFBC3FA205A55AD02A41B57DCD1A67F8AD3EC55F7
-019A2C8B13879858A57A3AB376816E5A84C125BA649F82A3298598E3CFEAE75E
-1F7F54D1DE8C415B62FA025C6C3291CFB87DA982D6E50549C12A9C1000A71761
-5975BFAE48535C4908E42C4608E25DD5C00CBFCB5C982A1A260E4CDBB9537F3A
-AC24871DCB91CF0EF748ED8E2BED39BD923618D03ECC0095A1711DAA720558F1
-2F44AAFC7AEC0242F9146AD375763E17A8ED2C72326608D8074799C67BBE062D
-DF82439F0167E3C1AA9207B642D72C3AF151260C5112EADFF1A43B37104520AD
-9199C6DC3BFEDC0641CC0F677757789FCCE08CCDACB9C7713070557551A53D81
-1BF6B50545CBFA1ACA5E1AACC651440EAC6C2F39CECB884D6506E0BF7BAA9768
-13AA548329431C5DF5E31CAB04CBA084DDDD98F21CBE87BFB0F7813F9E061416
-E666E264A94A76F514418F3B43458AD066263391C2C8D21DE06AEBC67EA91615
-304EA84AD69785408D83C5ABB9706B17D2EF42E00E4ACD07443F27B784FFCE81
-68D4F0F3DEE3EC94AA2FA303EC31FE357267B2098DFC1C6468641FBAAC436196
-8C409BE2EBB7B1C9FD3CD0E6438A6E94D245596FB9E4568CFA945AD3500F7D6E
-20B074B38CF5BCE69A503934C671C81803BBEA06D8F360D441084D6288F9C0AB
-8305293CB8F342F3C589AFE082D4CA2B605BB131A401429271B1C80672A1F37D
-196F4333D9086B8954C5B5F8A16AAF68C76AC5C0B9CE65CA1BA715F0B053BF02
-EEC79406E2C5143A9AD69CA6E358AC636CFF2DF700E15E83CA0C6EEB77C3E62C
-080706926BE171E07ABD4BC16E2EA0D9DFF580C90D478A6F9829860753D47B85
-6D08505132D659E524C7DD22C60EE3000D2479ABAAD132F0E4FC239350FC53C0
-9F4725EC06512093F7A2E6F15DBFBD4A29D773B9901D15DB0EE6EA73692F55A2
-10FCD66B25694E77285161FAB2282DFDECDB983D19448048C0D3C11F9BA88E46
-A938048A1C07572142D341D29E3EE6D9C84D89E33B9588DE28DD8EF02495DA6C
-50C6F709CB5BF02D98A603DF91DCB72CC97EDCC976C6037B8882E19303764ED7
-D4D9A3C890102638A8A81873858E29377F82D99DAC7067DFDEEA9A41EFD041A7
-9006681BD107D26534D5025CFBC3AE5EAD6ED7CD73202FD0C19795290CF76984
-CFE283FDB44E9C1D4792CBE073332E3EB3ABC36B443875BBC38CCC07E6927D34
-BB7FA1AC8BADDDE59B179D5B69C1C25F2032963E50CCD2712A0823ACF0FBD85D
-04E516E396A00A08EE1EF678AD8BBDCDC843A19A11DFB2A696520136839DDFDD
-E4E3CAF21914FB51E6D29FCCC0917C4DABB5F09FC722432CB6B5FF4A7915BE9A
-79DA41680211BAEA2424D4E3877C1AF7948DB6DC599A9B76F8AA97A08BDE3A51
-50F0DF9F0C93A26D04B6F8621EC6FC12CBBE55772CA9E8F4924778E35C7A90C4
-DD23EA49A1917E29A57312ACAB38432466281F6BE8F8AE166FA6FB296D28ABD5
-3472889B9BD60EC474876B3BC2050093FE68777362F21A2B996A4EBC86DDB90B
-FF01BD9D9572ED8C874CD9B5D847598E77E97578F2B194B22E7E7B58490AD6F5
-DE58903DC4F4CF2E030696794EBBFBF26FAA5E987BA89CF48A7885F70BFF2E3A
-764BC941BA2CDC13D11CB7CDA4D75BDAEFAFBA74776A091A8B5C0813F5B866ED
-1112648840F5649F28672CD3871F12DADC5A9EF64661A598F58D1AACA6B454A0
-A8124E5DB346A8CAF10FE9FDF27E8236BB8CEEEFDE41403653493A70AD0526B8
-E4B27D6F336A204773399DEA3AC3764F8018433F24B742B361412157C459656A
-3F02E6D2ABA47257C2FFCB2E995BE54EA462C6AF4BDCDACF20B99EF84E7B7893
-6A41219E3887862B3B1A665D8B569A64643B9D46E9206483BF750F233A28C328
-61A574D884DAE594FD821E3C5088C0D426571F37602B05A4DD325588CABC8E9D
-537348D510B36730FC02819EA9D16C095F79CCAC6557D612461E06C125436B04
-EAF3818692A5027F849944EAC60A0B876E4F887AD355E1F053D9B7F3A3721809
-1C9B890F9F76FECAF2D0213972F5E854760FF0EB984971A83E912401B7E8A74A
-1DB586E582846B79C0EA8B86F2264E8A855A345BCD69E68BF402DD75D7B09D06
-AD39E0C3AABDD237F65ADE2A3EAF85EAE56443CBE532C2D350DDE786E23D2523
-95FFD6DD5DC45F833F9FB9A9BBC689BC4E895AB203E74CEF2D79E6EA56A5575F
-ACC1778A021BEB2A5434E841049529D075B689D6C2E100C26D749DFB422E9A29
-39706B5E1CCB15FE881CA79EC7F4FBF8DC894852A01535F217EBA1E5B426E73B
-F216ABD01DFE485D01B75B1F184B94886CC6D3BAC121D354D2728BC04A572B40
-C871448E60D68F282F9CB843757AEA34FE295D77EBF4B6B2D06E6A0906C86827
-B784EB962364120E9E05A266B4802B4DFFA1F4A0D2B4CB1EEC19B40EA8DC7C1A
-EFC27FF75A9D85BC7D644AD32A840608842DB95938B5193BAAC5B11FD4DBA606
-18ACB6BCEEB65D81F5CE26CAAB9BF5099B206E3806E6E7DD2CE0DF830BB7EEDC
-2599C356AB180E21ED848F8B67A2C6C4CDA2DC3E1275F4ED395867EA1C8401F2
-100DC886CC4055213C45B885ABDD5AA73137BC640FC907F08162D3A74F94FE2F
-1EF83DE6BE326DC4857F702E4E34A173766DD04E4FDEA70612A25B0FA009F296
-AEFDAD0CBA0B954D466E784D82C7646B96A7D056E66D1A0A53A496D57C725E12
-355B5BCA2C362B021B4AE1D9033615F8E371022082A7222F2E3BAE0102440DC8
-BFE7ECEF23016F00D49F5D70B1D0F2D682C6D721DF3CE151E4DB12A6FBE7893F
-4835FC32C4FCA08243A3346E4DE790EF3E59863B600209A0C29E849D15516491
-0EF1B77DAD20380F716CE5A4ADBEE9E6876880C47E0F705F6106ADBC22CE7E2A
-2F2250245853563691AAADE6D6EB426B33172FCEF257EA17D6895818A915D4E9
-D37C9ABDC474582F343D14D89EBEDCCB411A8D78A97BA9961A1C12833048FEFA
-A34D7EEBEBFA510383ADEAD76F173852D457248C5570D96FEC7373161DE42FA6
-FE4285C9B5FDD1096B64009EFF8552DF1BF3530315D75AC47B91BA5D18C121A7
-B23FA326CF66CE881AED6CC39250EF04B8CBB6D9BE41C30C54804105D623F035
-963CB66BDBB934D96E8C88FF31B44DD5E1DEADCF558F297024D1083D76FCD4D1
-FEB4D6E37E6BBFE61BC57B6C53EDD5E3062F4ED3A3E2F7FDC3D5E7683405660F
-B185997053FBB39536386B41CA82429613125A6FB9D97C0921278801B7A1A024
-6EBF6CC952EA47AB3BFE21FF39A242B601A8EFFDE9BD013079E94F38EC522D95
-A028FA8EE869EC6F205CD56E803E8B71D3027C95EDE133D1824A67E33E4EE943
-FCE174267837732A1FCB4F4E047AA340CA16D656D58A3C8CF00E543B4A651D40
-D19953915CC1573F92CBB861E4D66D782DB20EC203BC2E6B21F4F92A7CBEBDD7
-8F43CB3E8B6EF199DFFF945B8A492F9E1C6FBCF4E98387AB610CAFFD700AE3CE
-AECE6F8646724B74170764C548BD365F7E94F8CEA7A237490A88979A63D554A5
-CE853BD5AD24173E05FE407FBAAE3C064B99964D8DFA6EDBFB1C7AD1DA79AB85
-FE3B5B3D71414BD5A1FD3CEC3B4124E47B8FC3BD78D28AF2DBBFBDBC5F3C7EBD
-F2CE62BDCFDEE3B25B688D76707E8DEBA532F9F8391C6974BF0D57B4B6025F58
-B32971047F3CFF9C15E7AFEC953DFDA82B57DED07FCD9A6040ABDF23C3ED23DF
-52D32CF9094FC0F739DF0D2EA11A09100FEDDB5D4C0B3924CE259C7179412839
-4484B01A870A08B07CC7C8B586F2097828122D1FB186ED16B267E1B050CB7E36
-6F0D0F2BE0CC1A124C626251F6A4C44824E768E2AAB65C1FC0A1E06679DE0526
-60A1DD8DC114F2BA3C8BF6FB77426BD7AC50C136970FCEF17A77CB14ED54EEED
-0597BA5FFF3929570DFACC87C27EC2A9DB720527093BFB90F7595918C4A72F3B
-3252E9129299080EF38D56A67FBA6B9F057A47140BF2FF882355D0E9CC029B62
-B18097ACAB41ACB815A0FFD7C48BDA41E5239DEA54B528A2261768D0C2A9B03D
-EDB6D92B68050A989D73C4BC029769E9A64BDE03BFCF13C714DD04320BC41AFF
-200D33D9FE1CB42623EF64D3780162C65889386C5EB5172D3E8A95B25CEA017C
-F711E12A66644E4B66F3A139544C54B4F9020E330D4FF3B92084C2CA7D147746
-DD71DB602A89467CA9E138856AC428B3635C910F96AE34F5A0B513F5EB0ACA2C
-D2F6F7686F45736C4C812A80BDE034923ED067D117238C1FCF92CA6715BF244B
-04D7692A05
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 76 /L put
-dup 79 /O put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
-B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
-DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
-4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
-FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
-76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
-123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
-012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
-A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
-44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
-4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
-01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
-D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
-914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
-261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
-24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
-A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
-9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
-889787CDC2B7473D4BEE78E00E265ADB7C0CEA8499FFD6216BF93D037C46264E
-AC4CB4008BBFAA66772352E4EFEB86DB16C78779B78B6475094B9E88EF8696A4
-1F68154AA757BA4B2557DADA0652E1F8872DC24DB43F18EECEAF6BD4CB7283AC
-689599B06C56B323D3A159E8020FFAA681FFA5129E9F5F8636BB23939E0ED812
-E8F614F259F766DDC177A0A446B6C1DA735E428424C7A4D7E506656391F620DE
-75F0119BC4DE2AE1C435A6C95E3CB596E05E514DC9A63DB2B9B7C3270CBFE791
-5AEE48E27C863442D4FE5F04C98E04328DA2B0B36E6DA2A89ABF04268C434274
-8F7A738E6BC6A22D5A4B164885CF227E19B0911221545ED8F265FD01C52EAFDB
-DDBB1C44FCB24D04CA40C618808F55A57CD46DC13CDF0F656AD848C1DD44EE1A
-48B98E0EE1E18F3543EB349A9D397D06130E06FC6FB929270DD59646E4E7943F
-A071BCBECFB18D7825792B29CF15891F7B2C66E8663F206BBFF21EE4F4D93185
-B1D93162375AEF337AEE684A06D6B8774B60D3294B0757E3687FBF25370B19FC
-06427436C2A17F3DED1600B83DD5088119BE41C2E1B3D34EE3DC8FC3B5F44F7E
-30F5BB801976DBC5E227AF39C6CE8F36D3E60780EBDAAC01FD6D564D9529E767
-14446290E248E8AF181BB0A32EE9783E619F9D924B9093B879E667E1AECFED2A
-5A6CCFDA2918F1962B4CC2E432B1252179A67CD25C51129F2213801C4362F2D2
-95E940E08A7AE4CEDCF9CBFDF08B5952310A750A2E0876BD9933881E305439DA
-E90BD9FC5AC7B3B7FDBB209891C418DD34CE2C5A2BA8BE7D41758F797B810C7A
-E8D05491FA2533AFB5C853E32DE0A4B29DD8756436358554AAB440256760BA53
-09706EDFE9A0EB27CE296FA1389345BFD52EB891308518D0859928DB814CE2B1
-26E483A6AFDD9E4D5556FF630FB65254575DF8E72DA0AACE0F384C2953FCDD2A
-F029095274FEE0532611A0C5FF0FFC941B58B785E2B722D3E41E3F78741E0109
-F72F32A6E2AA8CCA6C9A0C3979A3CCCB59D63EBE1090CBAC1A40D6F3251235EB
-7356D2E5D7E2ACA608C651C7A4FEFBD2868F52B3DFAE49D39BFF63139D160A85
-C39081657327C22C3A931613C0DD5524D5EECF42FAF9254CB40ED96DF9F96554
-6B3CD165D762C9CDF3FF7CD10ECAF587D12EA668B893D40AEE0F9621398C792D
-40FD0F00D8A2E983019FFBD3B53B692736635BE31E4E16D28D2447F28A73F602
-B96C0744CF60E9BD111E2FF7BC6E683732D05AD405A758410B9EE62F39975E89
-D5833515981AF9D75A37F91FBA72B289ED766AD95E1C7682FC8891709BD3A921
-AFF13477A1FB29DC97E7F229FD2D4572EC85EF947A581EA3BBED9D6538E04EC3
-BC67B4D25AEC5EC8651538FC4E9875788FB08709DD4CBEF57B4C647A0181439C
-21F881B00ECB6452BD46C28F1642E48F3454FBFC87B7F494FC0713ACDD086D95
-A645A13D4AF3720CEB1FF7E28EEF4932F1DCB0F2E1BA5F151E7BE009FE61615D
-95C03441EA772ACFBE326FF905F472FAEA6273A7F037569029F4F6BED81E8EF4
-4A36F0352723435769BC03999083349B5799560280032DC84ED868F1295CA342
-9058E86432E55F40268615C9E2EAF8D698E87F98FE9197E9B1C6A9E4EEB772EC
-C0A7CFB8F790C917FA90D1AF0C4E1F9ABE9DB2380F7AED8E78C1FBE82E76E8B6
-D6237AD859C708BD33A6656B32076B2F1CD2EABFAC4C75A6DA5C69BFEB955040
-63FC2D9548F24EE128B8548565FF74D64C5C6431DD3A693FBCF1BA1CD9FBB95F
-28C97F598055D1D68FDAF79D3EEBFBA12531177C6E18041B478314D8A387891A
-1EEE740345096934257993037FE2CF6574FE9B7E6E5716E9F72F69BE58198311
-7DCEF3B8B1C409523F9B3BFB0D8922DA07EC5DAB9BD03221F553D51A32FBAF1C
-D35CB8AE05E3A93E91323D4EB655953001644487D6F505B449615593508A9766
-31835141CA10ECB75E747B930AC5C0A01D5B932A4C0FA7416E7A0E443B7E60BC
-6FDA8145EED76AF299492A07E6B521F2C54989978C363904A4C48D490A6A2676
-4FD816FFDEC0EDFD4E8F770A953ECF6A111DC0CA0DCCBA7180C8098AAD99BDF1
-D8B2E5140D2808ED4B0588E33158856F2259CC898AFBD5472F49937A73720CA6
-BBEB1E04EE34531C71D5BD41E69A718F0DED1990EF9C3241B29FE9137A950E71
-9B4B8EA3831163FDFBB27C0240F7A10E7BCCBDCD3D6B23ECBEA07620069C3497
-BEB7C63386890FEE54EE60B93B49860B9E67B299365EB5970D6539A105EF1300
-06B77B94688E0E5BA2E5965BC896600F80847B52C80D93344D348C905A4DE156
-1B5091616EE02B5C8F02507DABD7D773602E63E531A9E3EB8A5229262D9C03C1
-8D76CC23BFA16E6931BB95216090891790965A05317BC09D432F10A565838FCA
-AC1C0C5103CBF39ED79AB1EAF2B02C9CD197B49E9643EAD0C865B075C84BF6E2
-F71E10AFFB9F05E56CBEF06A61FB682C7CE803C57A49BD3654AB4326D06BDC53
-2C352F973DA2D82D257A793992DF20D7649EA76961E89CDEF7B07F5B060FD247
-10CCD26CD6B39F0C6EE988557AB7B14F4306F3869AA35AD7C8DC4562AA96F7FE
-217904CC6399ED6C69DF4A6A3B1DF2174B65275315F0F3DC8772AA416F6BC671
-83F649634B7EA172BE5B3D4F39D738BF23B89C8C0C49AE40ECE799024044F696
-80AB7E8B7BA18179B4051399F81B0FE5185C4BE06698AA4AF103853CEA607160
-6B9D6F7D90B9DA42E9644D20DAE6978BA4EDA80F2D146A41F28AE8B08F603B27
-82C9791DBAFED163DBD7F6CCB11A4CBF053FC850C0E932ADCE6AE96AABC6ED33
-29DFDFA6460BBC74D929090376C98ED514BCA0A8BDDDEFB9EF1D1CA91E555E03
-18430E70AE9AC15C7A403420C1274AA80370762EE20DC2FA0FF1B4D07D47780A
-851D8507CF22E1E4EB45AD4F0A52E259265809F5E52DA74E4C8B2A091A142D1E
-A98875CEE6B59219536FFC757FF99D0A6BE8F4A8155C0869156532E390EDFE3C
-A4ECB006E180C7652869EC62457785CEBF03B1A069F97CED823599C15DC60C5F
-9A31F856BD53428DE3BA000C584C95F69E624C78107E2D7540CE0DD1F5588057
-B51843FB65202233DFBEC04DA1E50088BC93C74E9A63E0C5B2BD655C46946F75
-3F173B2233D371C48510A5454554FD4DCE581E24C717910148FC8B09AFE86266
-5F36B88EE1968F1B80934F36AB16BB2B14446DE04393B9C421B088F235EA2672
-95B91992050520CD4B87530C03631C0E784FC40BE9E612F59E8532BE174D9EA3
-42078AA750E32C2C6B81492DCDFDF765AF01826DD0F87B37233F98C716C50709
-6EC70A29A7A50228A5C2A32EBE46FF8D829A186E2FB7EED0B7EC556BE99A4CC5
-A89BBBB64833CD4537CE067AA55FE88D9ACB18FCD9DBDD8C675FC60CD7B7B6E0
-58436002FA04F7D36CFD33EF7484F43EEFD9C129753E38F7EB81E87CB8DCF5B0
-292D90197007A8D86BA9183F6C65BEAA191D1F18D7FF60BA34136CD07405FE75
-C914878505C7C6674C8194ACEE7366914E288157DAE849067722EB9887ABBE38
-B972A6A9912928B6BFACA746A686C9D0C0DC396BCDAF8EED8A8BEFEBFEEF13D5
-94D2EB97F091E27F8105DEC2AB7CD83F753EE1DB8BD2C735A4F7B1EF0B9EE8FD
-3516277C41F83501F17E8F7146768F06129A47C8ED086CAED746F99039BFFC96
-732C4786BCBB294A04001C758FACB42A8BEAD3FB773EE7F9CAB43617B609D65F
-2977E2940349E9199401FF9679B17E2614C1AB13EF7A1088F251E3DC50945881
-2203556EA28F6D300C5F7914F61F94D5BEC53706B9712A1F56DA76F257ED0DE9
-FC1C4D3CAA09A530AB51F339E188D24E009B0D07571A3215A3E994C1AF64103E
-983A771E41987DF9FAADFFDAC86E94EEEDD2D7D27134A1A5EBB0DBEE6282
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 22 /mu put
-dup 25 /pi put
-dup 58 /period put
-dup 59 /comma put
-dup 60 /less put
-dup 61 /slash put
-dup 62 /greater put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 78 /N put
-dup 79 /O put
-dup 83 /S put
-dup 86 /V put
-dup 102 /f put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 109 /m put
-dup 115 /s put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676BD77D63B504843E6B9DB3EC18FCC62037E546FF3874549AABEDABC
-7C29E9200B309A37E5F90D7E629987616751F694BBDEBB9DDC5E1D1520FAD1AB
-6061A81FC25FCDE966D02085C3A53F84C246FBE8A58FA92886394F286FA58CED
-ED951A42DCE8BF447D61FE2F2FF6A4D1544543E3D6EBC020A26571EC0F04D6DC
-128C92BF1B54806E3F47D676D778940D71D25D5FBE66F42775D350FCB92E3E69
-C9AE83139BE00D5C85DE103E6E6AD38AEC32C8839AC3AFFB5EA29DB16661D893
-F489E5BEDA53FCE4252AD180FF42AC4F9091C8F454B3EB0AD8DD336A8296F4EF
-5D7F74D7A4A600AE4A43FECF40E57FA23B750214AA97C41202053493D48883E3
-670B0CD75CA74B4A36643C321AF87753D781FEB88B761CE87B1C8E36FAC7020F
-DA1A9ABDD370615B435BB5A3CC658F657DE25E83599A10ABAEBA0A9C6A7E8E99
-E20F2F16AEC10A06349705B3437EC0E9FA18ABA5763082DFB7C2EE4D13D56B24
-58ED6D93727F9A015F483B6E34DE2291E06AE67E4E700763FC9EFFB543D98DA4
-449F2314B1395F4479B977A0226455CD2210ECC972BA2D458AFA84A59127BBDB
-3882CD6E43210CC25E0B9DF80C0BC0811C2C1F232E79B33A44A955F8034814D8
-306E7204C4672D41BE3A3DA1099BAAFF3E1131580821E1A25C7E1D8D846CF37F
-0DEBB92482BB747B022E4CD9515FE413990A9E7A531E4FBD252D422A19C089CC
-543EA2C4E7AC6AF2B7CABE2E4A990850C0EF0BEF20E7A319C3E7ABFDA4F7DD69
-8183F34350A589BE48B20D2C93BDB7CBD3D174B6421A374BFE3C1D9529ABF99C
-DF892672C8D149F6A7D846989762812C669CF165B4BC219E782E3A717FF838AD
-19E15A7ABF0531B1C2AAE85E11C9261B8865766845CC6C2AAE190806FBA0A5D1
-0BDC9734DD842A4D2967E274BF8E46294331E4B9F3C1C5109DA6E84167EC9311
-CD1D7F035729214E9B0C8C2674B14E781F02646EE8858BE6897BC0EF37E95EF5
-641E71A2350007D85301FC811951821EDEE7AC62B228BA9EC6A71F2ABF9F7162
-4435A92685172C7F804B9492DBF6E541C4B582AA83902999F44AA7D12E4F0A2E
-E458BA2F4AD1E52901C4CAC25841C91510546CB2CCE5C7615AFA072981896657
-5EB6E6FC680DF3BAD9C3E115AEF48FAF1F9B8630F65ED6288714C81AD7E93045
-980C15BB7FF2D395EDF891179901CA7E35FE12CDA9E03F30CA527E8BF3BC2E3A
-9CDFA0ACD2BB2D6EAC1F271BC6C46724D59C9B95361077A23E5788BB47C98BDF
-2F6A0E803DE994C7D8ABCE1F0A90B5A041100B2E311903026E1186079ED84698
-C8370D1D53AE3CBBF6D419AE8138644349C3F9AE6ED7097766E0A01B3DCF3170
-44AD83B53C275ADFA86DB31474E6EDF918C01143286BC506D338A9E53DB6BBEB
-A2ECBF589A23968E493B3AED5475690AA6E76B093E24BBF2F7BF44C0B34D160F
-ABD237E27E9CCC922A9C332A460EAEDC3F536D10BC156323E2BB5C124BADAD07
-BE3C7BD414AEB7084BE22A4B61697C3475B1368970E63B4A2ACF2B8D13639EFD
-0FBB25F0E3E0698E45C04572CFDAE8247BD7AAB6CF0AA3DE2EE2900802B60ABE
-D384004E59CEC8F80EC8A27D4595A4FE311A1169F8191B7B47726D2868C5B409
-9FAA85C1749D0E51EF4832E3DAE72632E835396D6121BB78FB8A369EE9E49393
-DD2A76A5FA4EB8C193E0249B76995FD182439AF117A9F625CEDB749A71B6CE70
-BA428DCD1E8EBE20FD0B0608367B7C04E541C13A9171AE694EB655396AC0E39E
-1F8FFC45F178CE2E8EE5028B8BA6724927F8EEFCE517E42CD06BA66554E08083
-4A17DC0102781607668B2E8C3DB8A4F2279803C7BBCD60B8F589389C6B3B427C
-3CE8D655DDAC52CB0BEBAE00C776D5CD163B217E6FF27AEB2176919BA19FAEA5
-D49CA5AD218523C853375DE37DBB3608F05689600251369E7C02B9A626ED1D37
-87DBE2D65D38FA0AA6EDE4A7C66FF9BCD94B9FFFA414704D5C938675F1EBB1F6
-3F3E08B07E7C6D3B1A81BF920F02D8015D94B57DB694E61026D36BC3CB77B1A4
-77943FA55F1B832A9C72B07AF07B16262F696E2F5CD1FCB6D3866A2A6FCBAD34
-B3FBF40699E0352C66449BAF9D87DCA0F17F390A820285B4DA315F9436A8DD2F
-168A1A6757EB8B0C1628F1BAF805950DF41125D5074081B15410FDBDFA22E00E
-4825B1CC2D75E8ADC3ECDC89E23892EB0DE9D59231170BF3F9E45D175B203684
-F6FD58E0BAB317493FA9567EFF853085BE3EF14B66E95F582B01170CC4D6CFD0
-45090A6D96D98808FE3D388B4E1790C93BC88B8CB2A2CED40118CB2CA728DF3B
-85393866457EF436DD5548E35E0B5866E0403D8FF02E894A7A70A730CF245CB4
-AC7DB2B430C48DC56968BF2609A1CF08CC5CB2303D8B2D92A2BCC9278FBBCCBE
-54E6B76265C4E057566B658931AEC8B27C7E97C9FEE83012A644E5EA613F9AE7
-00CC8B7F4031F6FC83CBF8DFB27971032E56DF3B8E05D8B55C168A2099CDC4FF
-0A6906937376D1400E2A11B76B2E0C8127504EFF5D8812A2648695D72923E9D0
-BE231B8F6948F4FDD1D8C7D798073F44580C21EA66BCBB0D73AC156454D34907
-2D6C1830C2B97C0FBD8796545D7285C897442DD38E0E6EBED608DC787FAE717D
-23918786F642FA7534DAAD8D841D0DDDB048C4D9AA0007710D70F5376BE2C14A
-C7681A68E732B01C899614F3CBC2346566FB71F5F3D83B21C64CE02B4CC4AC9D
-C531E77C84F61722C493D7AAC08B4D0AF596C9381445CD34ED923483D687CA09
-001C76C4D2C5777F1EB1BFB6828F0BDE391C55ECB3393AE4E035EA9BA3E0015F
-5760BD49C1734F924160FEF926F171DF3F4413C2C2BCD47CA1134CF44B0EFBE1
-803A120820588DD5AFA577D126863843E49EF4BD6090651EBFAA29E4151F00F1
-DA63730AEBEFDEF5C574887F7DE4DA9EB571E9F1CDDCDC11890871064026D2D3
-F1B605A56C5ADCD8557993BD360E16D9C85EFE54438F232C023FCB84AED05215
-563D48BB23155C3EF1E6BDA95E46606ADA0162C19DEEF189645181F3BCB5A262
-EC91D182BCFAA6C11677A792A5B6C9DF910CA85FC6EB6EE08CC6D8632AC9EA70
-C67769456542E96635D83E65341AAE511D7025D9C9DF793E14540AB28E638E40
-BC4A8019EB7FF97B58211377C18E732B793819D55540A01D69344567C723B975
-9934F575977D1F288A8D645BCA5772615B56618C86D2ACAB57E8A32CD6BE9095
-7C0A9FE793028E9156E418B4619FF8D987580A79C37095F60F2E2F332CAD6D7D
-4AA75964FC7D060A0CB0E1E2D244233C176F3FA842B9B0D32B759B22C056CB6B
-940CEBE98E99A3F69D8BD0B8615AE0B27156456FC85F3C0B6E9BB4A72C469475
-A1AD2844B1F8FDECD621A9D7FD4E8E37D22DF2522B9BF389FC76B17CBD243C1D
-415ADD7D4A7A30FF556837574DB098CDA4DFAFC71625E03F20789A3C8A8B8882
-BB7AD3449D26A2D3CD08FDAEC6697EFB9C3381EE25494446DC7B0B5B9F129363
-CE0F3D0B817F9EDC2908A6D918F32330689F31785B701F0E5C98A0122FC581BD
-E71AA9D0940D4016A05C8662FDF1C65A4A22AD2AF4AFCBABAE5F8E0EE5F4640D
-1DC58133FE62D38D84C6F2DA83C10A32CAA0A2734B30227DE5E0E654E58CEA34
-F39A4E9433452559323B0D1EF7CBD9D524F48CC01554BE590EB283EB36E98DD6
-38004D516BD7C3C66AAEEB9D934834F618DA833D1E52CF2E8B1EB35C24BE9AE7
-58415CEE5FF8F25F897737D1EC5F9E20613FAEE5FF81780607F7B0B2E1424083
-6961EA7A8106AC710F2A021050DFE7022637B71895DD18AF1DC6ECB616D3CB82
-D1A1D297B68F5E55BA28EDEFB64620B95BE1221F192877DE691A19250A15FA5F
-07CC57D0F9CE9DB6042FF6F33BBB18E3318C3F0AE36E12EC57B0AB7FFA829AB9
-D1FFDC0FAA493A02A40624D40853920F349558A08FC832C83EAF8C04486F4908
-FE59359EAA8097118AFC9BEC2A8B4BB81C168172310A8F67A6AA9D297C45F3B0
-234544A739152D2B71B5E7E5A02625022D6B6F35014F07CE2F1879304D74891C
-CD3366967897749C3BC21D25CA5DDB6D25241980F453FE03B3CA2B26353F1341
-5B96207836015DE2403524E469A9FDB895F7EE37697E5075947027C3C55E914E
-4EF2B76EB8C0F7F4C43C2984E0E24CA103C64CCC93D2690E2DB4AE5078ADBC9A
-695F466082E09A2DC5B2E7F4B166490744C72DCA2617E7608C84328832BF7614
-DDDD369A04FF194BD3F1E44F68043EA5041C99D8559A908DD4243B5E7D3A2BE1
-DB5D560FEEA32E72E087FC688F04C84179EBE29353D65CC810FE2B2B47BF112E
-B2A63768FB38EDC4730398975FA1EAED7F51336F332A6D438C34B7CBF8346D8C
-FCC5392D1F7B1EB5B18632A9F92E6D92650559CF209C6266AEEFCAA1FC27265B
-9A32961A5AF55412F68318C1B082DD53AF70F77F8AD0AAF6ECD66BE4A60A59A2
-4FDBD7C0187A7E3568BA43D804FCE0B13D6CCBC26DE7D641085F47B53442124F
-76FCA95268291208FCA5E264C0D5E064D34831BD0184FD40D10F9ECF427AAB08
-F9DDD9249844C0921714687E5EE0A8B840E1D4F11783A70AC58CB32C0F55073B
-6C4025F515C08DEE9F066E73A805C1B31BD4B6C9CE63A23B34CF2391EDFD5B53
-3B524D7D5B9DEDFA2BFE15911AC09030E5E040A73F6EB4E28907E4924EE33E9D
-67B1282C226C1F3893E1B9A48F652E942B0073093B85524A1FAE3C0BD4357CEA
-48441B4FC4707DE9AC9F102EF340F949D4276CF8A2602310D90358D2FBDFA5A1
-E0AE476F3CEB84E6812231A2DA8B98283BD6E4D7BEB0A79ECC4666C3D25466A9
-6A0200083653C063AC8EA9E1DC92427BF04E19D107E002C4F03C1A4C6467C255
-CD8B8DF2E0A0D010BF7BE9D8A4F1BA862E5FFB7A4CB2CC2E065306341A02DE9A
-1F38478D47C38A07AEE89560670D44CC8C19DC25690145A4EE465B12604A8A96
-4CC01E2B5D8BE39B0AA5991B876A0619F6E3BB3F712293B5A7C785586DBB2204
-4C1A7763165AF3B057D61D10C391053ED6E0655C076C5E2B4F6F01A712C56AA0
-BF1E786DF7F8BE640C94EBA89DCB3B341C61C02DB5535EF2773BEB75D3D8753E
-D2F5893453AA90A829D4C3F3D66B0DC653F3587811E8B5F9E62E81D0C6DE4CA5
-38AA2BC800C838B7D0BDB0E679BBF5F6249F904485BF07B47BCA9B349ADDF151
-AD448E539A1EBBE6F9A7DC484F00EF663C1DD47B8EC13B53CF1604F594C0FDCF
-3739D23A0FEF264FE443D9D4EDDBA4BE0DC73A56B62AC633354F23CEEC0C7E76
-A4951DDDA23FD78563A6C3400E275BBC290C15C6B755679A86921E47CEBADB1A
-47C3DEC5644D0BA3CC6BFC1D204FFDF9D0573620DE5EE074833CE42D21A52147
-69B9262B85EF9D36FF0B37D3DDD67D79433BE3DC79CF95C6AAF3234837D86D9C
-B7CF7D18DB3899D57ED5736565B6E33496953C443000960655860625661E415A
-D09301BE581E6F2AF9EB34C045478CC3B703B8C6E31A60D8BF3698CF01C33641
-49517767897309D558F48E8284B5A954A3291155B752BFFBDF0F564152072378
-B4B7BDB965577C5BDD25C8CDB9CE4FD5A3B5D44A2765BDFEA71A1D506709CFBA
-A7066CFC5A1480E46D12CCCABE567214C83EE3E4F7FB010D594131E4ED9842C5
-06179CA41FD6637EB013AF1263EC14EDEC5EC9235501C54C2DC51F757CE1336F
-C5097BF6C5FF8AE522A9E4F94179F7426A846B37C50606454AF09C0ECB26A781
-EF074683986B10B9238CCC9B92973BF7105FCFAE3E5DE815F907395B0251D481
-D1BBAE5BFDD69470B77D078DEDFD90577FAA7CB18551E154B8489007C516C489
-B82D235086DC907121AE074202EE7EA12DC2F58ACFEDFDAFC024BD98DE725E10
-905BF7081EFFC29F697D495428AF568E303D813B1AAB432C1284DE7EFAE7C819
-62155860FB47412959690E95EDA37376891462D8FBC99533F032E654B88046C9
-31354A02F8E238A6470C451F2045132FB49FF35282BB1EF520D7BEEA0B37AA28
-146DE26218C80EB65CA25EF425A340DC5AE9066892EAA0969BB3986EE81EB7CC
-712814459F1A272C9F9F8801969D330135BA9FB83B167CEAB6EC1BC95F3546B3
-89AF2A2CFC8702866A9F78AD406C804401C327A0550F386F399BEF92C2B18DDF
-BAEDD788FEE1F4BC0BDF65743BD4EE56B0E91A7014C06CD1DEE074C0FC57BDC4
-41BE0F2CA1861F629F83BFDF53C5FCE7F6F13EB4E81A877ECEB34AEA48289ABF
-2DBC2C89624035B7335112D903D2AF5A0F9A78642C963B4A006165E44E4A8C65
-C94B90856ABF2658C6A6E7BE117A7380DC19B35DA4C4DC5FAFCA065CB10772FA
-97DC5D2BC9B02EB192855CF6346D2CBF56569B510A7CFC126BB3FD2B00D7ED86
-2C667F38E300894BD29E442A3E145F340A4E565422AEBA88CB10B571EC4F8D93
-CE7E56B0F12EFEECBDE78BAF8106894DCC9D00EA8A1E7243E7719278BAD83B4D
-D5B0A518BF385162CC3FC6DA8CFCEF4F3814A115EC0B9524FE587EF45EFE7916
-BAD6A1D40CFE8F0428DABD7DD4651B170CD8F9C6ADDE78A57B2835B39AA9412A
-0064F067D77D9E97BCCEE5A30FFDFC49591DE7DB034872A74F0D296AFDBCF69B
-0BDBCE3C8B502B665D8F786D265BD2A64AFA21364BD536920DD1644B0130D18E
-AB26CBE9D91C85BCA872FAF3DAA8749E9C5477E6BE78C6DE49F5E7E105385E1D
-7C2632D0F2DD0E9BE581947E27CBDA5716F38FB6AE65837E6AEE83959A5C63CB
-2D5B00E98189E14999F753C771AFECDCAA4A37882F9F724BE41EC797D13FF4E4
-A296888603851EA53FF59E5FC73EAC1D4E80B91AB149077527408B622EB5A55B
-042D6C7FF304158F56B85C02FC4697FB320AA0D721A7E0934557AADBBBB1A51E
-DA1297DB496716BFEF4D01DA8354BE929AF8644300B0202FEE0F7E609814E5EC
-ED8A68408949A9914AA90579B0DDA8CA648417983CCD59F9203A528091C0EDEC
-696FD08E4D84F336B1F64C480C29CB39B3F1A04A086618B23C04837A1EE3FB3D
-E9530E0FE6334867D9B5371CA88E41731A00590E510169B4FCD90767200B658D
-15C5FC3D43B8AA7DBC75E1B3D86F7B9885A66612AA4BF2FBE5913312B97D06AD
-2EB0E48F22D0C2C3E2EE6F8D1085F0DB844EFDD13C512EFC4F739C91199D78E0
-5CF3110CC73662A718FAEA5F8FAAE845D9F0FFD4EC5541217F1E2CCCC46A639B
-A28F3AAD94B4B6B613DC781ADCB970566D06888C24738248EFA261BC122E2B12
-A00282328D52
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY9
-%!PS-AdobeFont-1.1: CMSY9 1.0
-%%CreationDate: 1991 Aug 15 07:22:27
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 3 /asteriskmath put
-readonly def
-/FontBBox{-30 -958 1146 777}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
-65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
-D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
-77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
-15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
-491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
-1A06C514D91C4C937D4E642503392B1CD1BF5AF0BCA28EBD840AD76CC39AD7AA
-CF2C057D436A245217829DB786A3D592C0F5A073E44D137405B0D44F7D7356F1
-DFE3D933072E0CA836B5B72B1DDEB8FF86D5F9A2AFDEC789B2FBDAC307F2DBF7
-2B5BE20870A423F85DAC7075769E74EC93D759E9095E4C1FA2D5D8FCE0EB3586
-E193EE511DC1B950972544335EA5B46B3AF5B3FA5B7922DDAEFC5DB52B22CBCA
-7C8ACA790FBE3B57A89D10E84DA86BCA85AD169F0B7F8F93B228EF212069866B
-6D930B7FE660F87BB45A1DFF541F6B8926AFC7FA90E81B7628D4273B10474731
-4F5D42B1C5EEE258EF4C5255BAE05301CF5DA133FDD927D3065ADC77D0187C41
-7F0DC217781C1D37053C2D43C838597E76AB194348E78C59ED1AF4300B3885C2
-3408811AEC8C98E7E7E2E12CECEA0E666C993A48BE5CA6A23524B15433779571
-56CADB29D1963EB1AFE4EDDD12CC64264A6D12E624DC132B00CD3565784EC293
-83B0A827CD6D16BDDE351C14092435A687A98FC4599C6B712CD5809D8A8FB171
-BB2694D50BF5C52E068A58F907F702769A98ED6AA915DA9E56620FC819AF54A0
-30C2B7541C94336DC23F290F8A3C4B37E2C4513CACF349
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI9
-%!PS-AdobeFont-1.1: CMMI9 1.100
-%%CreationDate: 1996 Jul 23 07:53:55
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-29 -250 1075 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
-86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
-DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
-67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
-6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
-FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
-22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
-730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
-449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
-97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
-E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
-AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
-A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
-B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
-9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E
-759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3
-5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2
-BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680
-3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE
-2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA
-1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB
-431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588
-A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433
-30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7
-801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 14 /openbullet put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E93302530FA3F4BEF341997D4302A48384A
-CEFFC1559462EA5F60DC05245E8499D8E61397B2C094CEED1AF26EE15A837209
-ECE64FEF41ABE8DDA7BE1F351CF14E07BA8FD40CEFBFC3CE7B9D4912D6FE752D
-9CF163084E688DDCC4AA8920DB579C3683D160EFA6B40388374D5A3649B3C34C
-15DA4DE3AB03095AA746523B99CE6A49ECD5C69F7A4B8E9FCB76807B31D0FAB6
-D9247627402D29D82CA6688DCCAA9CF05CE9D363F1AD1BCDB7E888F07E35D4EA
-3C1B0A9C7C60CE8D1BD0E5B5E4200E6B549131874AE8FE573C1F57C1F020F041
-87F10CCEE6A4AD99BF08C3CD0AA51C97ECE3D78D121F56F0160334E923527791
-79A7DD4CAB8E8986E613DA9B9E1F235F7F2D1C458AD399FA743ABB240D367130
-DC3A912FEBEDA1644188E68ABD6B93EB50111B12D9D6BFC93AEF44588A310392
-171E75C2911C242B8E764603ADF21C9D12BDB1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
-38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
-D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
-EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
-A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
-F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
-4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
-6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
-A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
-E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
-1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
-452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
-8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
-5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
-DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
-BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
-741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
-E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
-E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
-D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
-C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
-FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B
-984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876D88C8C097384
-46D8D7E41CA1A8979F9B07EC3337E70CBBE3A377235B04C79BBBDB66CE1C1A41
-89DAB7CE91F2FC0CAF6DDAD09992D56F72299068192610EE3DE5DB7CF6366B4C
-D74F414484DCCDBA449BFAADA39D0F27574E604E31CB513B18E3821A33076151
-C2BCB6E957C77A0AECA48C587ABB5E8C7624D56B32F80BBCFDC874AAD6EA5119
-C9B06886F08CC7DE5400E0F52B07483FD4BAF26C1556CA27B259FF3DDF71131F
-DFC05D8B14C28F2073C460B5011B76D84F7917E919E50FEF563B5DEBC5CE6923
-ADB72392C98D03CD978D3FC207A52B91E267E7ED8BB4531E8BBAC113DA68765E
-E23FA502BC71CFB91E4FDCA39BDAEB7FEEC3588B1108CE4A1652B770375724A6
-508376586216289093485CDDBBE68956210B6FFF3953D097D66BA31D19CEF2A4
-35A33AE97547B81426E58F9FFECAB633C6433E86C32130665210F44F10F3A2F4
-EA31540D0BC08EA4DA2DDE3E8CAEBE52A3E8B037632B235D4ECE3CB797A5A939
-12C45C282783F675060040FFE2676A7ED903798EE3B86644EF30D3B461D4EC3A
-A1D2E95C02FF1531D93180F66A13E868C9E1FF1722FEF6C4F304921961D4A10A
-6AE943157B1B0E8871BEA71162E5246080618A96D5B23FFA8F420F2AC74BFB60
-BFA3BAC4AC3A320887D4090FA3EF7071D2E1DD5D70DB98A01B6D315271D10F2B
-3D9256D96FFE8D8BA0F4781B74490C63686397241640B08A08FBE7CC9B1FD0A8
-21CECF0F994CC97AB18411EC8745F5A6AF56010C22E73CFFCB45B82DB68E6552
-2E57A4C06B96C55031442EE1F53373C50E14657ED320D9ECD21ACB26D7535DEA
-D36F68D8479E0B28185EDC21207BFC130315E7341A85018CA22A251ED1BECD7B
-08A33D61A73E061B2B1B6B23FAFFE725F967F1713EB98446A9045AEAE23E725C
-ABF73E2B90F429D6EF62567ED4140AB5648EAACE7DDC8E61B456C36D377418D7
-4BBAD5754ADF5D3023EBF5E35886078B9553406EAD40A1328EF917A05730AF7B
-1D776901B4AEFC3444FD3FF04EFEC96FA9ABCBC841975993E6E829A1732D8E56
-CB51C433510AF8E81CD8693A9561AD2C3F9B9737C698FB07D42C089F720E36B2
-997B18E2BAD498424539316476532E3B730962F63C8BBCB9C6155FAEA379CB8B
-3A95089641FCAB3E3CCC1FE6A2BFA86A8E80668715BBCD87FD41463D2271C067
-0BC3563F0A9991AF367D47239E3B30AE63687B5983F04D7B3A68A6BBD596CC74
-E34D190493177F2C5D57EB151A22197C74DCAEB278D03129AE28C441D25EEF83
-25AA19FB56A6F5614BA4AE4884508BBA29AEEB8418964D839D5231D55FABAAB6
-6A7731EACC6B70DA88D43D3F1DB3C971829ACF8BD090F5721FD8157E49AF2D95
-DD212A2D658E89C5DF508E91CA4BF26B9C3ACBF92F637F3C598E5DD46C2C4FBE
-1C75401E91F45DC95B55E8D6439C370FD99A1202C594F74A8084E4A4194C5325
-640AF8E16E42990C1F5331C2E4A8D35D518FAB4A62F289EC5AA45C8957765E23
-496E9B789BE56BA9CE6E4BD0670CD575EEF4DB1874140113A644FCE48CA1071A
-E1F2E8EBAAD73FE1DCD945D333D7545E3B67D84273627648C4143CDDB212F39D
-CB5D07D28F0DB5BD4181C88ADA12427C09026042C29B52280C58FB927DD1987A
-5E533F9B98E952A09466CC16C58D5FF46F46E6240E71BAE56363C1DEF36F03C2
-0BEA962CC25C8FC129669F423DADB195CD443BFF34436B164CF9F7F77E68FD04
-321D66CBB12EC0E073E05DAA8321956CDC6835A179E551A17E863270FBD54C9C
-301538A8B74867F52C803ED1AE36A49A0042E08EB7A2FC1A05EA6CA8180E1B68
-D4E42800815D88E947314FC4C0812BC55ED286A5438D1CAC0D76955D05073E39
-B0A29F3D1868BE46334E032BDF1F825C506D0CF1B120BD7A6B7F519F2AF96415
-528A5AADC23501A324AB4B65AF5574BF2E28693AF57BEF1DF4A76496EB94980D
-CF8ACA0EB8F27E89329CC8986D9F3CA851F76A7E2E4411614A9E1A76DBC59B0D
-5DDAAF6F0EEE50B737529C66E5845A4AB11A4728772A74AD81123F08E1E44E83
-C153A19781087F236F1D4E52ACC568D425CED800D3A89F1841CCE5476AC42000
-8062216F082064C1B8ABF67D4219647B3207807050D0B1E22BFFB916A86784AA
-2EF8FC2CC1EF22E0799FFF30FE847AA426240A85BB130129151F7E939B6C2383
-4D8C93986BF721EE67DD384E9DEA2854E411D58ACC3EEEC8DB5C3AA9E28B81E4
-A80774B6917B6B5588C57C9C3F9E2C873FC662D37C071C654C7B56C3737B4F6D
-C355FDA1668072307F06679809920EE1C034A7A3246E8FC22CD520C8267C2F40
-A071FB5952366744B1DE6272830720A4CF2C5C2C346685D95A7B91D2E312E27B
-90E44516C60DBAEB762F6690FA4958EF94F3D9BB05D78FFB3BEEE286017067EB
-092076305E003A45CD8842973828041168C07E8021206951DE8AFB25948734EA
-2229CB113779B1765046864C30DCF3918FA162066C79C4FA6FAB60C47E3A5679
-2A16F337C752360BE1B1BC108CA9799526556CA746A7F0E18CFD027A465FAC65
-2B83244303F270E6740B7E6A2151C41B6550CA65B70BF8CEC6ED49F648354C61
-9E24B898C4A96679FED2402632908709CCDA01A017E8DB340185D8628D71B0DB
-B37D1331E65015E7CDDA64CF3FDC0255399A102964D65567332720ECFBC8366D
-E385D50C34790B2730E3F5358E09CF71D8D271CF150CC994B45C0E18ACD300AD
-997BE0F68584DADF60E550F2CA2F75B43601DE0352C940F51B250A361619360E
-93A3F1290B0D335E812AEAC0D3D9B684866E5BC09F11B4BC4B7D636C8033DABF
-E6B56A88620520EC7A1DE98BDBC1D8803D092A92E2107327ED0370E7B89F856F
-A5A94566D95A2989D193B45CA39B2A4C33567E9040EA628D85E445D7FCA4901B
-DE28B0AC8EB1398463F59ABAA46FBA2545AB9273AB04A93DBFF8DE51C91BFA77
-B9D66218E9565ECE3BCD32E1931D8E9BC2BB23AEB4D7D7BD5A009C9C5C1C55EF
-932E2572F67FA55449038A882BDF5449D244FF89F24A9A5809120A764EA418CD
-4C08EB2BB118C6E7F875D17962FE517B5F6FCD675FA82832FA72C9CC2431E061
-E255D3839FE3E0B3FDD2927804878C68431595F67366DA1EC6928044CD664C65
-3630DA8CDEF94C7260669A715B1EEB7CBDA1591906E2A0601F6E3FC3A91A6E4D
-657F8E859C1D60935978E72A22ADD109DFD1F7A2C26331437EDA4C522A5A4B5F
-E0E54F75D5BD112272FA9FB48F2E4860FDD52321D0C1A8DA36AC3149B763549A
-F3B0E49C5D364E58B4AAC201325393D8975A2F9FB8DB72465C9608EBDD9F4B23
-EB03683FE15B60871BCDE2455A9DF22A4B2972E2C1602602C0F2265F63F17DFE
-AEBFD4DED83076B793ABB6036FCC354A9FE2C1014BEB54D32DD08DACA47E7B87
-65D4140DB71FCF2CF189DC7B70B504BAB83776B497EB58D0EAF32CCFD5079432
-2AEC2E5256C81F2FFDC17DC177741778885A3C2699F904D21FDCCAECE1E0E2DB
-AEF3336D614B1406756469B3182E0F21F10A12B5BFB8FF6ED2356BAB9D3FCA57
-6861FF5072FB3A7289D6AED565E75F10FA793A42FD696157CED5BBD6A61589F6
-3229A3A1AB3793FD98CAF4E6B39E347C1DA8465FF967C333DBADF94291BD92C2
-80F8F21C406F272AF4B821AA97204AF92A92F0C03FC7CD786667BE7032D410F2
-B25B62F3D6A98210A5F8BB2C26AE8449B7C197063B20BC684E6449D109BAE866
-2C68070EDA01FEA511CEB43BA4094165BBAAB0BA77F7D64DB4AF46BFA519F57A
-C2BD812159A646E3E946D85C3C94C47DB8392A71A58E79A60B2B4963CA61D0DC
-97B96DCB06E85B7A2FAAC0C2F0AF36E0172050C2E202E26B26F0D94B848EE7EB
-17690B5D72D880527E9853BE88A144279CBA27F0C908899263B65C0816CB1EED
-6411E1FB2E6D8120EE75E7D94C873C8D0007C50E2F4578DEACF9F0482E9E40C8
-071348DE7399D5E44E59AA1E21A69E1684AF373EDDFA3ACC7629384F744E7DF3
-10369AEA079F0A3ABF1980D0ED4F972FE54795A11C063C9F15746A0011E951FD
-49AD218ACD96234313D894C9CCAB22FB53E5722923F2F616A5823BC79210D3A1
-AD5CF60094CECF4A55D6307F0F5695A747715E8780559BC502E3039F8805F23B
-285E62BA162D15345BD8BE8A2CA04A81C4D55C67498858FE5FCD1F228A44D32A
-F4F995D2AA2E8DAA278879D766F9A2CC4A176B6AB6DDC36204D5A6452A0FE4AB
-B80FCAA7F3A072904576E5544C2144D18521CB325D803C1D2ABBE5C6CF688214
-F2BB48DF31BB488017CA6519D26F63AE5AB99302182C6A99AC466BDA29D2315D
-3E0D1FB7F2E3C79D71A48917AE39979897C3878B1129BCE200C056F1801BB202
-7A50CE659B36C9B6BF2106CB5B8A26C50799E779C9A95267F25F08DD798F48D3
-9838441CFF0B736FD2A2E413329E96FF78536BF3347F4239353965923F22F8D3
-9CBFE87B0D9D260B8541C344A0E99332D9A85F84A26D27A0F74CC345E1452CA5
-73A9D146A40E8535F96A0407E4E7B0B1D03E2D63E570A9881D282F141772E719
-A995E748E5D88D8B455F4D667E92EBBBBC64EB49CC873FBB269732DF9C9BEEE4
-30FB2834F08B7705BDCD241E342CED1D18B2533DF92ED4D80E105DE1C27C789A
-0BD339F36C24AE263BB4D2099820249EC5FF177CB7E08BFA1E83255CE859DCBD
-965551F26338647768FAF43BE07ED7711CFABE41A7BB004112613DFDA7FF6D61
-9D17FADBBA60210DBBAC72373E78A7C6CE6074AB710A65D975468FA9C7D00EE1
-B12191CA5D875580BFDD86F60DF1647C753A4BC953C7F34FDDBA6611AD469D1E
-D4725F69889388529AA084DE6B3D2714BDE834CB37A3B4892D412C809CEC81CE
-048F4CE3E4E433DB68BED8C890E6C13036C97534C1FA56A88555A87D4A446A30
-520EBF4617A13EEBFD053AB8819DDE73207FD8D2C4D9F8499FB781362E1D5BB9
-CA12E3B3840E14B7695B7BEE7653A4DB36C356AB59C798BC46AE5789038212D5
-35518D660393DA347163596A0C40A39DA04E1C582AFD30443ACF7C30F34F7E43
-C71C957C2CC4C4D0F711A175DAB8C29751F7C9F0FFA01337C1E82D8B959128ED
-D4962A9A8D0C23B01A18292B92A776A2069E95F7698E8771D3A284022B07BCC8
-8F7A776C6887E5F58676605E5C041416B4CF7F882200E23CD114323A0D5BCFB8
-18D943E750435342346CC3629B79DC72E41A34ECE15FCBBC2E00027997A27078
-5A2E8C503A68354C434A05BF1991F346758440A4EA7A4BD90B625789051FBDCB
-3F1933719F4F51C63D79520545C333C6A524D9D78187833EE3C3C0B1BCC8B01B
-A19DB12CF3A219B1E6735BCB6EDB44C160C8B10F32CEE20E1BAD42B40343D19D
-6B63C9B46222A9D6DCE506B8C73A0F16EB95DBF15BEF3B0FA08A20386EF14D79
-F4F9A13C77A753C0EFEA6FC13A2394992350E63C203F21781E9F2CB01F7547C9
-32D166212FA768BF3CC2AEC3408175AD68F629B3861D75AA0D11BA4CD8190621
-E338A6550263468293C7F140CCE7CCDC691B249FA2030B232813430023260440
-49B0409A25C8C1D436AE028927AFF112F1AC472E3D34795397623D803A547204
-45ECFD5AD77B95E8ECD7741BABCBFBDC51B29E3A4B343F81DE6A4515A0E46099
-0B813F7547A76596D9F1687E929A7E0C7CE305EE56B7E75AE7C704ECB8CBCDFA
-6660BFA3741DA3CA8639C0D47D68E8B0EEDEEC4C9D09D44AFE6A4EF122CC592F
-97FD91C67B446E053C95F616835AD4FF3D06179946D9078EE65A2E3A757CAED6
-492724E99D32DF131C3C0B8DFB7299B0D3C211B1BDEE029ADC30EAE2F32997BC
-65073F6E7DC90E8060E7178BAFC1FA1C094261C5FFCE6B7275EC110E43AAFF85
-352100BF37DDAB85058CFE44EC6B6E71C69A228993EB7A190FF265A696A410E8
-57C12B901F031F3FF286C64CADBF24951E3CFF45D5CC64C331B950E9D95A9F67
-ED46F10ECD08FE64179E6FA2E67FF55C01F373E7F42D2AC5942011C12A146288
-2C4B363842F6F737DF6E734CFFF3F3E1438F123759DF6A2E82B87106BEC41FD7
-765C5291E8DBDD5F4EBC43D0810C0BAEDB90DD47B4242959037571D5B2F6145F
-8D7EE4BD931489D58F5C38BDD8502D60715C1A9351E51B5ECD4F41E07997A3F4
-D4686EF369E2C4F4BA5ACBAAE76DAD38B9FED23214399363A2606EADE0E42F28
-2009915C0277F0D8A2D9F9121A45FFCF5C9D6D47CE400338789577235C872F5B
-3771ED746C09A8D33811AD41963EDF751455F37D059EFCC2851606F8ECC9107A
-DCA01DD66B6EF9FCD4DB75A2B5EE89AC997250759DDCFD6B67487D48A9EB3A01
-E203B2B253F2E6FE92D7BDEE83FFCBDF6CAF0C7BDEEE52464A055F81BE7D4FC6
-CD9C444573752D927076A05E1195CB3BDFB3B2F71EA6FD2B57E2A2BFCBEEB1BC
-60DA7BAAA6F851AB1FFE65DCA5064F2482916FF54F3B6E38B69503FDC60389E7
-FB6E26AF8C41C032CAFB938648CDFBD105870D2B352355EC73002BDE35956636
-803B7D0854F0F1E56548C1A2A9CA105CC3944E72F76741C6AD909C731B6DF453
-61CCD6DF4BED5490D195C37C5FC237858B183B540192A986B859246EF31F9ED5
-450E0781D911740D313E8B01F7144C8B5815FF4AEE9F0D9CB9589589232EB3A9
-25595657BC3F23DE5F91AABDE7A6D8BC1DC2788E3249FEA1C153840A3D2B1B6B
-494DFF85D7D4EE6DE5A5BE0664EE9FCCB9EC5608749D3CD49C7C19FF9E7FC2A6
-0514CAC9BB8D5AE151F584D1795CADD4B25F79D2EBEA7DFB90206F9729C82F0B
-82D3C284B0F145BAA8FED9C6A4EA9AB71CB449342E33CD33DC2D62E86DB0F213
-5AA7E8DAF85DCA93707032F8690B5961E3365DE715370398FB908D6F3BF10A34
-A79FAC115F1A43981B3EB633DD8DA73B62DB33240E5458496B963CD88A3D9DC0
-CC7CFCA2AF97634110FF97217E0761A0892D75E9C5C01E3345221C40D7AED353
-4EA90A94D160D1AF994FBDEBC640A63AFCAF584F49C5FF09E2E8EA657B31FAC5
-C0E172F5A509F6CB3AA18CCBCB7902EBA04A0D8B8660D30915F7526DD3CFFB42
-CC6E0730487FE28BA66A7CFF85F1CA595470D3173E4793A74FC72191FB2B593A
-24F13A9F16BA0BEB93C2116AACA45DDC7FC9C6218D84D83F8849D9CE4BC2640D
-C95EA3A7C56D52E1CECCA26965EB25D41D2B2CA4B8949BFE8A02BA6153D9D2FD
-E54131397E8B404A8B03C1680E442DDD076F5947FBC6C09F1476390FE4F91B83
-D2BCD5AFBEFE99031DC16DF0394EC8B8D91ACAF3FA436CC620CCFD8C90FCE2B5
-20BD10FF411F1EEC8800485D35A068E3D28E6C25E7F0D0570579A62C31387DE0
-451A74D8B9AB950E8112833A0AD2403AD1D48FC7A881DAC12F6C5C3B59346145
-49F78188AC567A5CE08C1F100315EFCE8F9DFAD1710C529A50AD72678F865AE0
-B6D27D59754C150DAB8F3FE86A204B7E970A70CF6E695659062F0B4184A42B5F
-395B7F3ABEDF1E21BCD72D133B2A86F4643458ECBD33B63F9658EE64CAC7A01B
-87BAA8F1B42C13BE070B8D90B310B83F5B528A1E2C0F8B1F8540025EF7724295
-696584C4C3C410F12A84FBABD656E8F540A41ADA93F226175A38E1DCC910FF58
-FB972A5DE9F9390D2BCB441DA762E7F50EBE14E5CC26708333B7F76D68BF46DE
-FEAC4C08581B6760C61F92144ED42F09158B2C1C127EF5865EF0DE72E1EC2013
-D70CF96CAF8D0C2E6C06DC42B9A2B142E2E0242C86B9B69738478691E8DC483F
-F83BCC1F45891681A8024B3868889893ADFCA57B663E21A0555A04F7D17280BB
-A5F04B342D2CA4D0F03B5014749E20B0B717D80665C3F0CC9E77CF7018003D66
-811A8550145B350521A398E77B82BA7E35D0D38BA03AB031B16C7660E6BC65B6
-A3A936FFDC9123411B63BABA2F29C544E4CE7C36E6C8A08E694F96DD85A5A93E
-2E1888FC004C0747931AF8FA8E2038721D82A1F7AB642C70FB38E98D4573E565
-E718E67D6FBDC3DC92536D9EC9D3D046B24BB4D85F083C38DEBDB5F31C52EB2B
-92544CAC70DA0EBB6B2B3F9E5E393FF9054DC4105269AF32D6071F2F151E62AD
-EDFC9BB20EF0100B11D0E861B853032A315FDC79C7B4029CF95BE589BA6BD0E6
-02A9114C443482C4ABA199369894CDC94C8C19A2E701EE57AA35D56637D62001
-C9AA8B0C8439B3B92B92DD7152E3D429C65944AFEBB54DA64495245BB26F316D
-FD0589DF258684B04E336445195320EFD3520D4832B7D258582B463A8F1227BD
-BE63FB4B53B185BDACDDC6FBEB2B6FF20863BB073B0F6592011BB953F82CA6DC
-20AE5BD68CDBDE9564C17C656960DDC27597F9148B2720E9C468E78DCA267361
-64EDB978A82A5FF432779B61A2449578756EBA3842C52AB0004B64121011859B
-EF04639D7497D06BBF435CEC7FF5497B0EF5E44038C75FE36C6A5FE28E20F504
-AA9284DBC5C2DDC571FCB9864E86C6F8ACAB18F776B7B4C357FF8D48A4199E3D
-05BC874927E35F8CAD5BA4A25B4398B4C98AC36C98DD31331A022B2950AFE442
-C833BF4A939E15257AB2C3437931CA615E379844AD400A54E467C88DD30A0AA3
-663FC816C02FA267431D008696C05F3083A62C4AABE69CC908B311E7C38FD6C6
-0694F1C6230E9D2B0C6974781E123ED0DA18BDF865EA766405958E74DCF9C0E6
-E4E9B3DD649EFF9FCDAC0DF03E2F863D174741D2A31C58D57CE787D88F73DD93
-881388B1D559B863007DDC2F7BE8E1CFD31AC79611C119C81169BBB7DD4AD4CA
-4061C65CFA8AE47D1121008C98C5E746E814DB1B6544634A21A58865A1EBA793
-F4AE8F4791FA8A414A605A7AE75D280FDB30F3E278B8D5270817411ED8ED0846
-9812641F54A6F5081B45CAFEB9CCE76FB0A8A21325A53F6F3226294D970D9FED
-B33A4D51CA796C64608E768D3BDECDAB423C9194276F3082268E35159AC90501
-9BF85693972E26CF96E1DC32073FBCC9509BB98BD8A43E719959CAE57C35CC43
-7762EF32525262B267DF6C072ED4E2245377992627561725B26D3C94605B8D53
-A1EBDED4757F4CA6B62BB0B293FB808A868EF8CEFC1845C1CC7F563937D1F719
-5B8EB569AC9A735F1FC7A8FE5ED667A0C510323BB4C5686B04757DA0BA178E97
-456B60AD23F6D2D3671045B971BEEF38F56ABCE18A91EFCC35BDA27E32088952
-74C6961D6CC05699E2E4EB2A8D27E87D80EAA10CD4077A73E2930C3832486A23
-9A639DBBA1DD11EF8B806FEB46851E0353213E7620AD5C5CEF1C4843CCEB01BF
-68990B31DC56D3D7D70546DC834F6122450839BDCDEA82ED38DF136345F4ED65
-6D4D9D50CBC94BE7706CF26A67687A344B777AF93646D78A4E09C35F09AC478C
-EBFA7736388D51A897AFE53E0BD70A932F41A569B60FDE11047BE8F9D0E809DC
-D97FD5E3D197F13B350FD3AA21D6751B7FCDECDC359938557BDEF8CD8259A70B
-9667DA767F04FF8D020B37329E8F9C902A93CC5D1D646E406A2FEAA93C2ECC01
-AC50022B171B9B7828C828D7DC64DC3A39F36320333D8629D678C5D4A54C1AD8
-B30A75DC0276C4E8F3CA10AB8DF4558B74486A46C8F4CA22A5F34ED898A9E16F
-CA5857B5D2E35642FEE788E9DA04264000F25BA9EAF53120679D8A008C081643
-8126EC916AEBCDD0E73F120A9FA5D3E03B95DE747F5AFF9EC6FB0A1EA78B1BDB
-6602BBC54A5CAB04CCECAC3E3ACF00E9B9DF13F1BD765423B1E28ED17ADB0F95
-CA2ACF675BAC85CF32BFD37FA211E2F66CE01B93212D37FF32767FD204F5D8E9
-0B8F7BA9CC7C75F48E871C135E9E5A9740880DFA43EC9511EB4DCB9A5EA292CA
-57F5EE3F627565E888792209A1C445F1A4AB64272A1B9C88CF0607F3B3AB62BD
-579656E35320753E14D53E46D80083ED94ED924617FABA5E664C260BAF675A9D
-FCE50DAFC590F0142CE14102CF27DB7C3E7C4A9798C2E2AEA25DBDF79377DEE0
-BF67D5D2D75CFF77F00014DB64ABC0864B4E26FC022CDC213BE68A6D62FAF02B
-81648DFC72C0EB70812355EC1A1072090F0168239C72D6D2019A15028C1022AE
-35B3F09E38C6736B04FEE979907809F2AEB14D4E4868F16514BCF60ECD59B743
-3998F5CC7AD9DD6774F6B64B209C4D10F5495B2588528E77456D07B53E6D1FA3
-29F22DFC2F8BADE4FA88386F23A98B59952F07FFADD57D3E04508B6EB00925C4
-9E6BDEB71D4069E5655EDF508EAD542D5AC58409809EAC51CE15BBF36742D669
-3E81E19516B5D247F9912BA63C564DB3700BA46E99ED01F81877F508185A9EEE
-2D27925EC7BBFA5FB5B4982EC046E71E51579D36DF30698CE27F696F94055B35
-44AA5B4EB8E5E6A162A937A6103BB79C617927E4D3CAF9F325C7A1EAF6AAEC98
-4F6C2731CB40D53DACDA1FE054827BCC5DF1F7A514CEA95527A1AAB8E5285008
-6AC229AAC82365B39A5472D839D2D779B067B82B48A1F87934DE62B2BA96F19F
-C7BC5720497D8E48DCC6EB9FCAE294B3E876D17A10B54C702305E5DD53CD1B78
-D7445C62E4CCBB8783E1E3D3E21D4596E72ADA5FDC947034855B6906B904C034
-BF4400FF3EC9DC35B872E02AFD12BFDC2BF38009A176007F347C414198B43CE7
-797C13275ADD7523636D2211E5D26FFDC185DB3317324A88C9E83BEE22834150
-81D7CF4196BAEB1FA271FE3EDB53ABC9352F1BF39EB53D1C288EF274F9744059
-EE9DADCC9E5052F877E3D889E4B1B3EB276AD065E4087C0C96492D6D0A4BC8F0
-4D8A15031C178B27F1C02D81F72FC40803B05799BBC36664308438EF6C9E723C
-69C9B8AC696AD2EF4B2F6255C68C604718837F5122F5C09CE02A1E4D3A5FB03D
-58204759514E05A343898DA1157A70B4C1B13D98F62113DD0463261267D050F7
-4B04BA0F967F347E43FB760AE200FBD51ACC1A78C09392CE1403C49E3DA99466
-C3942360BE380A335EC2FABBB11F24CE383F02A0C4321B4122C13BE2674A6D70
-EC252CE45B0DC5ADEF1C17A4969EFBEDCFF16852A66C566DE66DF6AC4FC25CC7
-D23697B655B452BB27BC71B1D23315B1A0DA3B33C4F11E64FC716401BCA38483
-DC2C45C0F7EDAF1080BF31662FDA700554A992440949F991871EDCD463719C3B
-7A22B8A20FEEA5C206A3445AB9CEB524E45098B8C6A2E1A1E6FE3CE8781086C0
-D4C2FAFF2D8B0E40F1E3B6B157087B33874F3D62FEE705A8F2596AFBB7CA2D2D
-E5896AF28EDD47471E9ED0AE39E67563B56A9509B7D8AE7F7E982581DEC0E26A
-B9A23AEB4ACE2754528715C4EF1D2A6AA46E0EDC5672DDF7E1DD58327B6D7B6E
-F6B3D755EBE2B20B34CD10982BEAA4BCF4EBD051374C61875EA3AC80FCAF3771
-EC77E2D0CF51E997C568BD16752314848EB31CC2CFCE6E72579106DFEB0E7C2E
-35A1C3AC2280EE1CE0FC837D8BB8639FB984D1BEE2F40DB33D10A51115728734
-3F176382F86BD6F83384F063A678575A8F05B63EC3CE777F9994720C0D3D5FCA
-FA52E65193CAB9738F83E9F338B534D2FAEEC67D34D5D133B8962AC8E51D8D40
-7BD9D4FD46A91677B42F2768D212BA3415F049881A4722AC56A73BD2A1C7BCB8
-9BA879EA89FC2F5BA7F9C71052FDE13A05DAF6B387E0ABF1984C0C6F8116F7AA
-F66DE76334D68E7EED9EE460A0B2F903CC23DC2381073AA6576722B554947C54
-CD7443E802F872E2B1570735957D9B2BDB3A6BE0713985C046A4B97357DE0BC5
-DCB171A7BFCD964784237BACD7CE3FA998CCCB0174CF5E0D3B209631EC8C9BFE
-EA2D03E58D9BF4D50902191A362040BE5CD18CCD43B6D559E45E510F596AC859
-240CB589D13647B53168B1BDF0AB23E2A390B1693BE362B838E24DC01D058565
-3BE2EDA0257580611851739472752057370E97F8ADABF3E1E74088AAA88D2D36
-3302DF3A63EFBAF72AFF4AB3DD49A12A931E545A1EE70B109EB3756323CFFED0
-79CA240ED2F3D5666A617914539E5EA93F8E123F51756E1762363D3706BAE3B1
-0CD12C229BA7031D2407F0F76B5AFB7D4C206B1952A1A047DA72C4FA8A954D30
-D81AE44E5AD1A8AC1AB76791694F3EAD0402D3F75CEEA88C48D7B7CA24D96C1F
-10FC68FFFF9EDDA8422ADF62E47FF30C9A971C61FD6D2E51A8A983B25FA56A28
-0101E83DEA3951FEC9BDFCE9EC527EE67679A85BFB74B46084131FC69A533A4F
-50DCC52D946B08A523120C16801833C1243B92485BC2A756398C414D9D1D6020
-67A221FD3DA50BED126DE2D2947353308D4D2BAFC1EAF81AB6035D90B8DFBA26
-2C46C26DDC449776F4732E9A114A90E0B216D482E6742AE5F8FDB81AF2B8160D
-27766BCB915D0991EAA3D75F6C39F834EBCDC2F36D69B26D198A285E4848A6CB
-D5387067A5A653AB097093800CB307CD16E7F1B13A635D2D85157C03FDB0B026
-B5E8175360334142D5397013F692EE164E01491992399F758117A2D30BCB47F7
-2C15094710B9732745732F4A18975989AAA47A71987F2A38DF016685E58C593E
-B70A0B5E8245BDBE57D78D889A24A7BBB74B81F674B25267C85B94985360ADF7
-F218F9EDFD82051B88E9DD19CFF9CBEBBE83B2E67CB361EDBDD49A4D298772C1
-A854EE0122E7E972AA1DFB6E7770E1659E5AD403881B3A7818D62E44E874844C
-EBA18955674B4458074BC50140B4460421CDAD116900327CCEEA4B9CEE476422
-8A96274A8047ACBF8B44193B15161AB9BEB47739DBC8D0D97A920ECF282EDA69
-0E6509F16F844C903B26F48CDDC6BC6EA525E0D9358210F94F3E1900183E01BC
-B1EEEEA06991C3F1E0D61A68F12188D62DDF5644E62490BE5C39D3DCF34E3828
-C06DFCA8AC5120A809CE18529B9476E7B96CD317666F853590BE809D87B1AF33
-0AC00F6DE4E35569F93A2A563BA330075C5AF753877E2CA4CEE6286710893927
-20FA9C62FF089B07355035643F5EBBB1A5566FD32AF8D73BDB951E0B26EFB5F4
-DBF47B837B63EBE7ABAE0DED81C09E84F241F5BBD237D4D5C063AB4C38E0F327
-DA66C39BC570D28D5FAAD90CEAE125D61FB02399C6B2EBBB606104C602D072B6
-1622908FAB22056C98D055432571BE95BCC562F5FBE219F7A97963A7DEBFAB3D
-689152BB73D3D91014A4F4E51D649F9CA0F54775A2C41C48FA7C1C824A74427E
-A303DE21078CDB63E3E2FA2120A784F10469A3F8EB31952B7E2328348B56C31B
-F9646D6EB7AA5703CE8B32ACBE2CC9F6EFC90B407CD040ED217439F7930AD432
-8BB34794B625D30E307FF4707E939E9D1DA7E68856F553FA381AAC6B98DE984E
-44B64B445C3EEF23BAD16AC056CA177B1D146E8529DF18BDC9D26741D7FB9E9E
-89317E1B58B5E86756517552959C88B96CB58AC91EC4B66A7CEAF9B6D7860FFD
-27660675CBC1758382EF64B69806B58E85A91E26ED4C410B158B2BE9F1784234
-2280A60B162512DF95DA5F64D3973FB80B83AE89C0816699DB299DAF9743F316
-6721B2FD0475E225B9C187695345A9B1AD61076F2C7C43AEF08D3650FCC2A97A
-C689959579DFF25979A0801A52F3DAA3105C6B1696F73D7A3719802836985A24
-C600B3CE20AB98BF3D2C4D7361071FE24D1E1917C955546A94E82D08B430EF17
-8FAE58E767211DE394F873F4393EFA4C8920D98D55BFF9DDA9FF3089EE7EC6C4
-5B8661E0301C609845B53299228865689ABD2B16BDA53B1F5B176F1A17581965
-DDAB36225237CF4F7161D0FFBF33CD204AD4FB6C1149F8A98100A7CF7521B33B
-8E3FDE34E0E5F830C0BCBB24A8DFA47CDB2D19D695804AE3EE547A418C988969
-6ED259050E47F08D519382E4C77CA08F222FC59EFA752BCCB6C47AD088C968C7
-B30787A968967EEAB11B1AFC0201F211147B81AD6C8223AD6C031EAE5995A619
-11EE212A8E2DB52F5AB4B46FCCF6629B19F475CBC11C539047DEBF3AB0FE6B73
-619644DF9E30E227282D208CBB8CEA06B20E94FBA31590B1482177DD6C3E81AE
-67CDCBA1301B243D1B16BD0FF2E3280FC1D31FFC094E872E3449D79C93331C7E
-B8C88152ABA1221EF1BAEE1297FB6A95DAE8E180B05B88BF47C3164C5AA2E5E4
-B40A84739426A1E0703B429903C34F9D62036CBCDBA28AFC2EE33AD78B197580
-1CB7485FC6D812DD6C0BA74A738EE8356D4C353CE8FF67004BE92E355703576A
-4E09BDBAA1977DC1C06E273E4D86B4FD7501BFDE679729763C05E0C1DDA2AE94
-7758851E508CD591A9633276076A41E177320D321A5295BB33A126D59AD4DCE2
-4B0029402F1BDBBDD8E2E8EEA37E989F793CE3C5BDCCE8ABA7B5283CB983C71A
-C662D4AAA69A40CFDF69CB655A5CBE57057DBA0CB97CE3624FFE9C669CDF4256
-C2489FED8D68FC4EC7CC8E01BDB88A71F85FCB03FD2E1B3F71C708669B793B65
-90523E959B51F4CA8A4C4B529DCB4604694D398FB452C579D90363D2364B7C41
-522BA211AC389FAE45923D145D5B72A91BD204BCC0BA10910E58634987D987C9
-F152F54845E15DC8BC7E39B844107613F40CBBBF59159E677D1CB36738DE414D
-B43B26773BA899DC73BFB8E9C3D6602D8EC106A746D995E84B74EFE96E366BD4
-D61472143AA1E6D05D260C175EBC6059A712516BC9729C03BB3A77995B4BECA6
-4CD3DF4AEC651F96B95D20B0A14BC8083D40902EBF535C3B552DB8F26A10A211
-9DFE12049F31401E88149B94F8C68CBDFB6483F113CB13E30D27C967D9965C7D
-5BF3B2909001CD65C2C3E3CACD50A48C20C67AE26B3833A407784D072BE909FE
-A9453CADD7FFF67F87586BC11684DC93985E7789E7E494DC879B22C2C7E329B6
-34E5A2F05E567467302C63CB9F4CB8AC98CD579EB2AE6218DD4829979A5EDFED
-A2A7F8685E3316F75E0562E6340B7ADF3083B245E32E57C452753103F968D02F
-FD41AC768B514CC4EFAEE6E9CD3A9288A04F6B8D4A47FED10A4A5436C0BAC513
-0F632019C6987A22BE20185CA30B0A8A764D33B0563A7C045602C076C80064B2
-F1BDB61A86BD277E0BB50AB6F439FC05902DDD6EFC6726E89943E70FDE125510
-A451085298F282ECC4626DF8935207BF3691504D4CB89D8D00DD28A0720651E3
-395CF4400F1AF5FF4EA1CEB628A5238CD78DB023A46A8166BB4B4EAE43FE0D7C
-B47D63640A55486D3C2C4CAC3F5F44D263B21E31604907AD9CDCDA4F2424CE0D
-C999DEBB795262722396DCCAB8CDB893798548CDE0D56E019471563DE61A5727
-5C2A72C174D97D2C86CFC84BF3745473CB197B7581262A879FE7A17E1797BBDD
-B1E2B488D1585A88957A452C9025C18C40C272B38CB17275463C26A14F3B0CA6
-B68E420CBF82D61927541EBEAF1C46D719A743E012AB3328787FB98B635A4CDF
-CCB5A3F9CE5F87741897E07182CA87E35E6B38B6ED3DC91E5E70D6C37C9C986D
-FABA3F6B543DB34EAA5A69820E96D1D796466D00338634A109142BD36AE89D4D
-6C5E49ADBBD2FB3AA8DC63A2639D1F2A7013E095F5583C4A8F07F73CA91EA726
-F7D630A697D66DFF632E169C88B332B45BA095AAE2AD8EF438C1D9ED8FF34AE6
-31887A0245F8C84E1F2E72E131A6B761BB333AEB08EEE7747692B0693E5B36BB
-1BE5E990B8F35AC30EABDAD07A44E5AD52D73AF73E4D981C1F56F9AD50D0AC36
-1FBE1A42A1B89D02DAA2853AC0DFE185B10AA022FC3C1891ACD5A8FDE288290C
-36452B00E055127089BDC9513E3B44201938B4CAA3D41AB3DCF62FAFD5FF1294
-9886FFA5B85A5254A523A550872D2409FBD6539DFFA88B2A5641DC01EA84F74C
-53721AFA9580262BF7398CAFD1E4349910AA60705A2D81727CD01C1CF5FC2C2D
-8B4E5F323FDFCFCBB34ECC9AC82CB66D2EA316EBEA254B7BA915CB1E7FEDA372
-33448C96D74A02CD3B166308D1D39EE2703F8BE3460B0AAB8E000AA6BD781097
-A48851F97F38E6E7CC1A6EA26BC06D5F87215529E413F5902F96DA18BFB618C4
-CCE86976ABE2F675A5859D3137C26AC08D89A13CDBFFF35104B0FF06DB59BD26
-2B2ED9B072CF836AB3717D0CBFAD954DD7E4F8406423DDDFD15B56ACAF8CA0E9
-35474BE6D4239FF20857BE44608A119C13B7EA8475BBF8A7A9E95652614A3150
-FF662B54DF277F0D46D51CCEB9F8CC80622937685685DB92A9265CDA8FE40806
-EC30C412C637ADBDE1254A1FBC0C329F1C93D541350AFE445A59D2CB7A3C3FA5
-50317C3BF192D55D792058ABD2FB9EE404993BA88449163830CEECF5A979CB7A
-D1806A1621B2383B1CCC4881F53A94D4ADB5A05DA900ABB57B6BC3F8C6A7A707
-A86E0938F6C3ACA740B001CCBFDB71AEBD46038AD1B16A1B1F389C79A9ED0577
-7B1607F5C94A7310374BAB1102EF5E83C9587D93A1B7AAD8A4A5E26A6A414AA4
-4E512589AB794D3C1E83430A8C60DCD71688C5C63E16DD6D8FE678D4D550CA03
-140B11FEED7F4D046D6F558CF381C7E8A5ADD6648EF09C600152A880C9F607A1
-DCE0232AED1D1A4745371AAC5752C8459B10193AD4AE12E067FACDBD7DD4814B
-7936461CA58232116E4391DF10599E8C8E215DC324E33D50D1D5D431980B05C4
-F35467687B16B33A0F0E2B004448F695434560A0FEFF407982B5D5215D69F405
-5E67215A6D03977CE21F9DD9329DD0C62263A551E4B7775FA2A88BCA53408855
-FB4822582A6420C5D7012A1E97A1908EB3CC9B1294FA6149DF3440F5EC112D45
-AB231B82F20ADE7CC306F446BD1C6A22A8754A8106E1E371EBE0B128175CC7B3
-1A50256508C7A2861AE3194AF684CBBAD3AE15A84F26049BC6175689D5A0FB27
-F5BF346A2C50FE1EAC7F8824124EC0ED3745F172E8613282F4C678A07D215B40
-B9DCBDB21B1A2003B236F954234BEE60B9B97A81C3F57445A737BC7BD6530C5A
-F665245F912BACF72AE5A963DCB249F8CF75E3EB26946B6E22AED9017EEEFB5C
-6DDC1896D2D33EA619A067C126FD3B0D9C0DB3DFFDAB557DAF7F8FDFE8DEED04
-59E739BF3D25826E2AF5B4E8415E8E0468CC32DC8AED669DB288507B24E2D63A
-049AA1E4EA83F5FEBD36CC2D959E3A579CC1D9194D16BC693BAC3B622E64D76B
-7727C412A72F1EABDFA27D971035FDA8D95BD1F4BD11A2A5998A52A86844270A
-AA6F04085ADFA189197FF3AC99EB320635D9900399F03320C58E479894B5FCDD
-DCFA905EEDFA4F232481ED4ED48B8762BDC945A3A11883023831B5D26546966B
-DF3FABF8F91AA8E3105ED2A6118D34DC4F8860DD188852A74C7D248CBD53FF63
-FDE6C9BDFFCC1723CA1F689BF37EA377CC1F512D2E120318EBAD5E0ED3B1E40A
-2B799F9D39E3A826487D0B708EA5D6B8FC92D4C4FA4E4435148F54CA3E1E68BE
-F6000C34FF0EB9F4EDC44049780FC8100232C4B509D89AB263973386D09B7B84
-C56FAAD1311F0C7B2A81A33C8F843DE95E5FA5E5A0FAB56F0B07A28844223A21
-0676FFB6ED33E4BBC4007310796CFB2C51F3C37A3818B8C2321DF707DB42CBF6
-0CBC4AEBAE8534BBCC8AC20930F40CDDA867638A3658F8A5BAFD7BC9F14ED3F3
-38564B4EC809C61020CD409E252E6A35C02625311A21B3F47E7F4637BFF2BF5B
-076AA5161A372F36123E41DEACB8C1CFE3D0F6FC52DCAF6972469AF1A5A3EBB3
-61D66E3F0B73B97BA68E690B4453A9A56FFDBA1F9A63CFBFD47A3443ADDF148B
-2536106839CDF5815AA562596FBDEE9E346DC4F21DC16B8D12BA1F2622B1FE69
-9BF5BBE271BE0D50D36947F71B3DD190E3354957E39CF99827AC75280F6AB35D
-7AED2BE61D3378D9EAA6FB0F0BAACE580FDB7F017EE232742F539D630D78D5E2
-5929A5C43108DF515797225B3CA58F3690E55C84E2B2869CEB3860A9A8F2A2E7
-5B75FBF7D2ECFDB28F35840D962FBE5C5AEC404213C6C086845298897A89CC75
-8C06BBBAFD8BA8CF12CA66927526FED9640D8644E5FDAD711FE6D9AB9CA858DF
-24EA55990B874077C9D66675DCB68FBDF40EADB305E9806532DA6ACC2E94BA42
-B214A70ABBCBFFE8A0BF16A2AEB94D5D8DC122A7BC86FEFEC7C268F5B8911912
-F111E7CA37771946D13E9776F673E18A9DB0BF149610563B2A69B02C8B1D4BF7
-21FA88F72B4C8C6DCC2BD717D2B0B55293AB701C64C84B8C6ED1EBC07AD14C37
-D0488BC9D66EC5E18EE403E211125698EA30ACB2930020959EFC990AED384B49
-0DBA5E2DE533B7399D5FC694FF35744A22C2505419AB7006CA51D9F244841153
-8211CE32D92BDF813ED791D12EC5E1097DC87796ACE5091B4A80286CF8273E5D
-136DB706617D615F97506804231E5F21F479BFF4813A9FD69AB0956E755CE61A
-01E009ADAD283A44C76EDA88355FBAC73A5BCCB9E904FEFBF9770866580BF7B0
-51190577C8E95285D83045E14FC05821634B7DD6D5AE96A814BECCF44DA89663
-40E9E61A5D8CCD9B761D5752823618E6DD11B3D27D7BE61C5CBB1F04CB49E077
-7B10A337F949F882981E0DF0603521F158EB98AE444BECB940970A7FB3FD56FC
-557647B56036EC357385A0976ED46F9A96B8ED2A36D266A185B99C7C4E35CC6C
-46FBF936874CEB4DE2E197F0EC962896D5D394AC1573CDE20E59FEA8B9F40C4B
-1B57999320F7489A2A22BF65D5634964781830E0048198FECE91F7E3A2A373F2
-28D1F46216839BE18D503BA8B41CC5C03AD383F23D9D3F4F16F9E4ECC3E50C87
-11F90D12B2910EF83E2EC3372A07597A6FD768D44446F1297EB9F40091580483
-6D27C2294587D92505F5EAC1B6F788BB1B380D39BCBBAFEC59492D9220B498C1
-36037C1AE4E77680F346D1475290CB79424F8DCCAA37F0A23799FB9E04AB9751
-657A0A6FFDF042828B0DC798BFAB1CD41BA453F2FD90A68BB3CEED016206BB0F
-129D57FC361CCB600F1EA440F6B875ABACA3FA5DCDC663C5820EDCDC3FD254FE
-F4557E7448A85986B76D6B1344307D3AA3A934F3EDC3F56C0BF371B46C84B6D6
-35F30374956DFE8D3233FD28D588785050B2D29818B50EF6D8236291BC5C5997
-A8F654647EDAED0CDCE4DE467AFB4F4BC987FC9D833A8B730DA9BB15BAF04619
-A3FF3065C1B52E16BEB70256C63971FBF42AFC5D6584B9A45B8546CF1B4D0AB4
-C903FBAD1259CB5EC4BA87763F06ABDDE80D8CF75F5E867D6F4C44BB03FA620E
-D1F2F0DBC1F30EC2F0AE7C1E53A607E18B8D9505AB44CD1C267FCA572DC31D54
-3064ACB944AACFA2E18D46F5820084CE1E5710FC00F4B1DD43B1FB084C5CA5E7
-CAB661B2AEB2A44FA2E72B71F11E89CB0B2029A77BC15B4F668313951EB87156
-33CE96E3C2E6306DD38ECAEDF75C8610AA0DF4613976A47BE0B53540BB040C38
-7C30313F550BDA2A859E3B532C9E524635203E4AFB425455B31F53516007C65F
-6DCC85A7A3505963AA3B019EA98D53CC19D34596EBEA1C3994C07BC1F6AE4B32
-6C84027B1A5BF54FC444A3584760C8770726B25903719D1770179F48FE08C27B
-988B70D3C2CA38E5EDA3294AA6BD4AD4A8A55E2C8ABC4A3BE2945377EE635212
-C7F894AB2ED31F2D43D229337B42B151C92644C9703E9FEC0C4D43F897313864
-FA24946F4AC11657B8DABFC8003995A0474C0B8694050BCB781E20FC9B112A2F
-8CD205E30E0DCEB5FC0393F2D640CC4A8EC998311CBC492965BF3D9E5A392B0A
-5E1970360A7DE98F73BD8752A46279BAC099D2456579E18678AF1656754C7F0D
-38F4B3A63AD251C38E9864E3908669D07341DC64B193B175237635412A52D341
-44DEDB1B5E849148FF4C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR9
-%!PS-AdobeFont-1.1: CMR9 1.0
-%%CreationDate: 1991 Aug 20 16:39:59
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR9) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR9 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 58 /colon put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-39 -250 1036 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
-3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
-046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
-C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
-A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
-A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
-731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
-09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
-49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
-5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
-54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
-C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
-11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
-48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
-25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
-24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
-21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
-2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
-26168CF2ACAB48E4B0A6628DE7084F42076CB48636F1094890E895F5CEFF70E7
-E06BC0A2A7BB7E839A3C0B8AFF23D9C0447344336DD1228233C1E2E1854AEF44
-703C32AA0099886908E7BBACA5B0D474A382448944F763768B8E4C29803D3CCB
-4F7DD6768ABE27E0F33C82ACA2C1731960CEFCE1B972C88B145EEFBF0E498813
-97BF1F66935B22136A1A686A4A1A8FFAA4CA95EF05282D9F3939AFD86C020B34
-0AC1373F63A04136A900D331B9BDF5D5091851AC905AC374A31E597335EF0165
-FDE5F91FE810F1CCA3125DEF372385E4571087B0D89701F2FAF69B8E65770328
-1D7F7317E3CA8CF845D1821375D5F18844AD52E00B5C73A670E88E4C362D9040
-C805AC27C17237F7AF177F8945A5E613E60138177F5BA98FA2B6FF994A19AE5E
-384813F4452938BC214F07C01689F63DC45B1E493BD3CEED1488FA823D2ACCFD
-4931EC3B0882548257EEE2778CC0C3264E678D4B04A61C63BAA55822C680DDAE
-0268E96FC74F104DEDB5E83193890747845A68EA3C41ABBC7DB9246CF5DD41BA
-2F22C925631AAD3C1CA1698B5E1212A5941280BDF151CAE45E5A88B3F03D000A
-B47BE5C71F69D254B56A97B229383E8D80A1C1C4E3AA19DBF15DBD91894392A5
-853330042F1498EC981D4BBA1BDC694037E74C5395109433156F45B72B1FFB50
-00715301FDCD1B13F063A58E049D3D64C983EEA9791141B553F45A0BD0DF35A9
-0EC16ED0C2E8173B8B6961C3367001B8CEDE5B1159B4F1F1007B7C870CD90BAF
-EE299F9E85EA17A88F6717608CC0C7A246619E7DE4D5EB2E0188AADE5B5D261E
-B60E41597DB75A3449F93DFF41D278F3CB13FABE69C443AE86702E295CACE5D9
-36C7B59D68D31885CF5396F8DB9B1016A05791E707B1A58780399D4A39B2803A
-CCBE3DF81C67CD6892173F510AE0939E979453A0972FE2FFC34C99BCA2D4971A
-F915B205C97A7969F45AD89321FB48E0F87EEF04A42EB0C9E4B740D034D3FBBB
-194750165F9405FAA2DCF49559DBD132B21871907FA456F0009DA68F0A5B5AA2
-840893D3E7CB2646DF4DDCDF8E334C1C7A99E6BFFE9912B56C2B4ECE2B400A47
-74F57F2F18F238678B2273DC91FEF76EA7243E8A2E9DF0F8BAF59F5F8841CD3C
-19C51906868E104846ACAD5268669C87D2E75F5645807EDC7367A4DE8019C8F3
-9E160E3C12053B09C5CD351EB9A334BDC9CE007DB81D21AF32813FA6D3A79052
-110207CB1EF978C91104B9584F22962FBE66BDEC4035A39B2D36CE3B50F0763D
-5793E5681A054AC0580D3EEF4FBD5C97C38D2219B086C5D1167EBC368AA619A8
-81BA2CF4A9BD3D564D827B88F0C0CAE8865FA63D426903A83FFE33B201FA5C1F
-398C0C4F83BB92B69C8021C9DC3ABE3706BF553D7A0AAA10D66DCEAC6A266C2F
-2BE03CA2119623C866B40020110125C9A42598E04BBFAB235E2A3FCBD4D65E28
-57D30D0519C5A580DB28C5054CE78A7146186734056ED8034749A6D609E70FFF
-F984C11598338F4418ECD3E7456D11B254655A743B82362025D23989F9E432DF
-064493D92DCE72869DF1BD139652618C43EB63B98A442AC3A84CD1BF8A134CFC
-559A3DCF26FB9FD2850C8517F4A817C426DBF193353E250721C525D9C2D3075E
-EF8C32A34DAA0E6BEE1C9939D1027908D1ACFCAC83F331998C150281DC7D41C0
-0345AA65256E2C17377DD385B4E4DBBDAC1A00EDEBC473CF8BFD0854C5F22433
-C54DC433AFD880A79C2826253BE23F335B79119FA9F9C2C5111AB434433FBB17
-996F8716350CA8F804782A08544AD59D62A32571297DEAD60599D88019B9EAB2
-8E064E88101C1DC08500D98845EC50CF541AF447D4EE121099EBB0F260C7DABC
-07E4CC9B6DB06A67E82347714F9D7C7679B719B5B5F6CFC8326D8EAE1984455B
-F310C71FC6FCA69D5B8FA822BEC0840F950DF373EEDE3C16011FE191D768F607
-2DF1E34A7FBC1EA68A98B14163511ED06B024C3E8489BD545065E8E099385619
-6CB8719B35D08E199DB0430DA6D8676D2C88F7B040D8758BC64B8F1D486050B3
-0871D35EA9DADD7BCEC4B5A69167E75770F5D5A7ED63A98A509E39AB7D6F676F
-DAEF4BB780EB55975C091DA75708D258F1EBF93571713536D62CD842A74046A5
-A6F43BF167B0D152ADFD1DD719B86708F7650F0E88009EFE5E52B90124670A5B
-938AB5F7031155E55D0ECE4E0050299828CE6D3C41199554B6A37D6BF281BF78
-D528D0DF179AC7291CA631D5CF3E6C0B769E16AEA70DDF8967C362BFA26EBFD0
-8C6573E6F87676F67255791A6E7CEBFB9343CA59F70C02EEB6E91A41F67BF2E0
-4A97EB4FD2AA0805173ADBEC7A1CF095E3660B7F0D0316265F9D226360F9D58F
-5B159069EACD65F0BDC7541FF33A745B0A918E2FC44D0980B297AF55565B4B26
-E4172FC34D2056A6729444AD5EF2EDF1AC619DA67529DEFA394F5B3A9BD0F187
-54B2313E9557A034DA5E6CF77D9D5293E325E4FF4362912036772AD79639D646
-DB99E84CF2C7969CA1C8D236D3ACDD1544D2AFA99CE9B3F446782562FA872C12
-D3AFD4C3A3E6C2166FC3891BC31E5A4910342F0C89AFA7DE3DC0F574D87B0080
-9A79E90883ABE9686B0B1851B43D6E18841EDEA59CE564E94469AC87E2DD6B65
-FEBCA7CFF1F72A27E884269977563AB7160642C074192044247A69B5D0FA2925
-AD6DC6A604E1A764BA3E0215D40CA483DDC7FB728D9DA6CC23C0F9CF1127E485
-B7763C78CAC3A0513D203A16A8964E0CE606ECADB730FC5ECABE489341C3C4A3
-2BF8BC3C24C7FF34594D29A85985F83EFCC137D69D359BEC8C4D22BC1B984DC4
-EB2444C51CBB2C480F52DBDCE11106920355A2B8BC8E04F8E45FB6D1AAA7F2A9
-7F2BFF73AA997F721AFCA4E248E93B53E9D4580F94FC92AB66883017C20703AC
-10C48F7FCAF5C595949647D74387C0C6D01F2E3723AC24B14F856FAB896E23A7
-0C8F9DF01FD5CD5078CB6554371D3C0919D7DD1FDD1F2CF395FEEDEC0DEF42F3
-CAD38E207AB809A685486A7496D0492935326852AF1A86B26359969934760C15
-E030B7E3C407E72A5BAC5D133759D403E68548E860EAC60CC20C0B216D8DBEE1
-B98DF96AC49EBD6910311A636700DB404E0D997F0F613ADA9387AAB0A7D19A6E
-9D51F8F23A0C05BD992E616737510F0B83B5C940160EAB9C4614393697AD2662
-99CF061A94B528006F01B31952816C13D783DA3055D74C877A29C57D60BC2C32
-CE1AA0B5658F3A775D8CA6FA52D6E3CA94C0491C77E3A2470B7E72D01CC038E3
-DA20A49D6EB00CDDE59D73B368DC233CC74481B18EC4E79DFC77AD3216F6AAA0
-B91C0D2B070BF1CAF52321B7FA2E49A80D2CE8102A637A4E06E963E25F1BAF29
-34D57959CAE1035C1FB2DC04A7D576EBE0023BA2DFA47303AE521C6C4ED77AD9
-83A8E2A215C65B7AB6AAD43AA844499F63852A715452C996EE024B0BEFB15966
-1D83B892A847212B4DB72BBAD4FB47E4314ECF12D5A69192A4347B7282EF55BE
-21E7187E1AD486E3BAC7E82976387B2B3734A614A5C097211725D9F0CBA493C7
-79C1F8454448D31B6D3C809D749588A756198FE274BE651D3CB50584AFFBE298
-81BE55C1C465A5F9AB16E016D8B136D89ACB499AB6205A6872B2A5B399C61657
-437BA63635C374E84C4FEFE4FF1DBA40A62159D199429660958B1EBFDDC8826A
-4AF1BC1DD26B5F240BD521287E4DCF23E64AD55477E7A9EEAC5D2D9AC7AD0403
-1F43F20EC89FB09527C64D5DEAD3A2E9CBF038E4C39A5ADC2719128595EAA4BE
-2178179E3DC025E37297AB3E38C430A6BA6E1140857215479EF610F19FE9658D
-579E438CEC0CA2F48C205CBAEFAE4159C42CF0EF0907525159ED3A444EBBBFAA
-8AD1644AC799CC2CC5E69400AF06D27225BCF3BE1FBD957F62A63C1D17446D2D
-F8117243F2A3D072073C11B0C5699DD37DD76245E6C0FA2A489EBB403386A238
-57B31C27F17EFDA2A31EF0662A727A20D21C1625964B62FB7A327A968CBDCE13
-00903C172B2F69CE0F91D6C1F41B73E49251564395BCE6320FB433E280AA2529
-FABAF1BC995D1A6B49EC5DEF4F027C8A712C8EF26B0736FAF975182A3E46B2B6
-F02DB267D3767CA3500E7313E4320B4F707C477518A9FD058585501BFFEB5C40
-6288BE9F4726D4321D50477EE25762A408D01D87D2BF5FCB63FD0FE49A49ED5F
-9F6E1F12D5BE264BFE8863A4EEC42006D07619CD66C27876BEE37BE90079E58A
-AFE59504563274E53F23EFCD2C24DF04EC3258827CB7412E89BA2DBB7C326A4F
-9EC5AA6B9B7E16E585FFA4BCE927CFB01F22C678ACB5A1D57466FC3BA96927B0
-8D57F0BBB96D2FD2916742F1A537D1B24C5259FB1012FBFBAACB1D1A59EE7AA2
-4F07768509F921E6DFAC93B356758A43DE778243464B54E9565331877575A659
-1F5101F43A65ED82DB11A1095B25EBDFCFE49B0385D6C0E65BA4620041A9CDCE
-495972CCE9BDC42D46A60616DFFE01AD64DBCEF56A15A2603AB3FCE5894F8E70
-BC54BD6E8DE0266A488742BB6325473D8BF52378EC196DB2C60799078BED0276
-5503EC8DDE9D8D878BA76F1581A219898B21952A20ACA3D28A262FF74650FE3D
-FFCD7BA9FA7CA0D2705AC08A439CD3DA643D9C3A7E00F0C433C3E81EA249BE29
-8A9152C28390E9E5A5D88B9159C077F7AAA3C9B991E397E617D043A553DBA75D
-BA0C408D450CB67A01A9F287F38A236E21B20CE35B205655B7A03346DDDEC0CD
-F0B058A760E4AC6D194BDE01573EF464B2787AAF45429668C151075D4689D94E
-2F8F430AEBC04CB530E2D268F04AEE98B8B58F7C1A017C994B7CCB2A14A0DC5A
-F866ECF8BB6CD9C19E9AC782BADEADBF4D59FB01E6DB56B84A10ABF13AC0F4AB
-22741493820C6CBE2429CE0C4D00459AE847FB44D7AF99B06431DA16DF232203
-743FEE3BF96A5D92D4D7EA95CE353D888EA075A91575D077C8D63498E6B342BA
-F2AC5A263AE38A947DE744EE7F7494599CAB84452E7FDD9FD68E89E0A506ABA9
-63E43BF5890FB0A39E987D1141FE2575254DB1596F16130CF7F47F026BDB135D
-FB53D2975464888EF193A254AF0B6CDD766749ED54FF9F5F477C04D328DDDD0E
-9C70BE408F8747DA5679F26B1EDC4BE58DBE55E30DF64166925EB1E133141CCF
-A3D6C03A0C56F4D62AB1A34DBA137A668D664B5B95F393F5FE769315798B1CEF
-D79393913E0EB907652B674A7A61AE130A25712BA7542C2F3D636DF2909F53C3
-C218BC6CDE9D0AAE981DF0E23577C3A4772D1358D155FAFBE90B275482EA1366
-C61AD46ACC9858F6A8ED89970EF09763C3511E517EE78661A00BEA32A4204EAA
-9D57399E83369C3FD59F65E46E4970B9A32170C36D11A47C0B9608E162FB73DB
-4DCAF59DDAB8FBE2B89C913563C6D11A2F59B8F9D7DB8332B2DB21DB15737661
-51815792830E43BEC6F90DAFAD24D7B922DD98D7F4E6EA982D6E2DEE2885FF9F
-443D8E922FB3C1F063E537E46924652A287A01DC66450031F3A0C754488EAC96
-E17FBB1177E9569E80BE8B9D80AE2E5D7948DCF1FB400BCFF3633DCD24DEE533
-FEC773764EE7DF3C8486FEF2393D55A9CCC18FB0E492BAD1BE62FA50FDE99E4F
-3F4F2EEDA507CC21108E742C35EA9DB21CBF1E1576A5FE0EED8995870DBBB536
-DB8AE49968714715C74FE03CDE7D9882C6B4737BBD5020895FC2FBE5FE2DD6FE
-5008A40CAC68550B8E2B61DAF6E957299F00016810BCA138E8BDD80EE113119E
-B7CD864FD5DE84954AE5AFEB2C41655E3346F38609E841099048DDE6EBC67798
-5B489F5EBA5B244D2F4BB14B92C2B287156EE2EFEE5C18F52F804F44003A8EA9
-642427F56D0C65903783DCCA9666486C5CAD4E72F81E9A6941F1C69F437D0E4B
-429C8BA3935B1EB84D29BAAB13AFD268088E83143753BF5C37F7276E8F11B33A
-73AB8BD20EB6A855E546ECFDBA80095592EE3A270CFECD546AE7B705842096C0
-42270EE790AE74A37FE8E39C63178E49010E027A9C6884F30DE52FB14DF3A665
-A6CD4864E8570FA5C0F1568DAFFC86A5D2A7202DA35FC82841D16D68DBF73D14
-56C8E4128AA6E36D0AFAEEC107A045963984530D162AE04DAE44374DC276F5B7
-A910DB4A75C4961880AE82807D679A3AD9B29E1A9824B25470092D9A45BA09E8
-4727288B82D381ABB69EB8861DE16AF20800491EEF14B6DE8230AB2BC790408D
-0AB6D45CD480F9BDAA6100D8931A0E28F484D587B5692FBAD4ED9F786B165E38
-2B3BE4EDEC42579D1B3AF118EBB8A98103AAA6BF19896D3A0A868CBC3D0F79E2
-542F7BD648763440E59046D571BB6DBF8CEBB74DEC26660A2335EFFBCC0EBC54
-85102286C92E626F5877A5F5B28E1CF8843D95CB719F37858C6C96AEE20B2695
-59ACB93BA2042F735E2EA4D3ED7E1905DFEEA922A28DA310162893668D138F59
-FB26C94535E4C02D4B8F9AA302DF8F6AB3C00869E22EE9FB6AA9FC2AA8865118
-0DC18A9AD8E9B39D23DBEC650C600E3F43EFBB48D63210231B51B102D963989A
-0453291811F46C8D1669F7C091B02ABD0A171F8EE5D1F9DFABCC769865F28FB3
-A28F938782E7374DD9FBF8D911404C8FFDC7C42C808A735F9DC1F3D38E4C099A
-03E25202E6FC87380A46B20D6956E90F6452F90D941AE6FDDF41D45C24D75E0D
-67C59668A88BFDB9F30B2B1404090C883E1B1B630A5885FC65CD370AA1CC7B95
-FC4F837EA0E7B67CEA006DF98FBDCF45BBC2003EEB204ADC6A1E500DD9D31B59
-CDF4095747E5A836859E7E77F8905EA6BB2FCD9D9D02A3C2B675E35618EA114C
-0051FAD9C3DE14A5CB33BEFBB6F11A8F7BAB5F1C3E751D6346BCF3B0DA4C4099
-312806F671C299D302624A115FD4A4E275A16C06E0FCAF1892DFA3F5DAA58AEB
-0087CA02134E2F12B333AFD2630F73BD54B9ACE3350A0DF56FF1202D7E2EB5E7
-B22C4BA2A90AFA390273345D8C0BA734413432D7E6E7BDC97DA3220B873CFE3B
-92CD8721A2B1CFCEECD8298F9C0515F8C3A6DBE10F8CA1419E104BFE7D20896A
-3C7272BF4F27252CC0690932C822B46DA18D39A0EA2313858CBDD242F6C172F9
-404F391E4C026D0FB81563F097760138EED33F051BFC3D1B4F1398907B741ACC
-BA444550D2C35B218DC6DD94C43FFD48F126191DADC4BF0F4170ECA5CD3721BD
-D7CB53587564D54199FFF947F70FAB9924C57B28F8B48D611529CE6B583B6487
-2E73254334A8E0995C5875FEEF81051E7F2B41F65F285401F0D69B97B1A2E9CF
-D64820502BD65167B8E551079F5CCF614CA606181D256922A68A333714D1F38A
-63C38C0DA7F95F23639AF5AF168C5F652DA19CA98E0B583E89FAE67E6E6FFFDD
-15E7C65656E47573ABBA868FED73FAA2857A836273707010720470A1C22E0355
-8B7BBFDFE10108857B6648E844B02B226BB5B2ABBE56223E182BFA9E473D050C
-6649A80D34E4F03004C51A1D5D84986D21ECFC04AC9117D06AFADB75C221A9DE
-ED6D3E373EDE6A842BDC29E9CFF10F7BAADAA143862C3192C354E185AD8BEF02
-5A5C16B7239EC2B076EF6FD2036F0A3C046F9B74D0F8EFF918256A663F77B017
-866F7BAB29C5A58B453EDD952BA70EBEEF918C51B8BF9060325A1E9B6764CE2B
-6D8659190CE1D04BA903F829C18535356A5B941D757625982BDD258EBDEC96B3
-A928DF053C1098BBE7F2E18AC6A6CDD0D72D37753E31663A771F5B0588442EF0
-7314DC4561CD1A3469B6E447DE7AAB88EE97AB10CBBCF3FD7EFD5ECEB30595D8
-C23E9E66A7350FD77A6ED3AFBC0C50381A969A3625AA82EFF18E1A01D5E6260A
-9FEC7A62718AE28040F582E7887A98B889AD07A791C5CF02F7DB62FCF4DF995E
-C6CEEE9EA355A1F301356ED7C54068F3123999888ADF6D9305CC83CDEF9BA998
-762364AA1811F8B573D223FD1A1135EF7E4DC571277C5E35041EF23644BC3CD0
-06A3127093463748311D331E5F16FE71F99AA1498005A04222C70CB87FC73F5F
-127F8488DE4CF87A849C8E1AECD4E57692D813AD22D70BA386168B6CD6B8ECDA
-DE7C755D6783FBA582A618B36BC23CDE4F6627EFAD808AC53140AF61B8A15ED7
-32D501019C30806D4D7DD4BFE8778B78C820202DB731660F56B40E0B6D8C4325
-19DA10311C548074E33D9541E30FC4D7E62E9FD28CA556B66A5FD818A2C70AB8
-A3CEA5F161FEDB4717FC0C13E7BB612939EA7EF31CC7FD1867CF2BA77DA0643F
-DB1FB594E2F15E9673F1272FCCB5FEA47D3905EB04FD0DE37BEB4058E1B5DCC2
-5B668A6A56F3620F3441E4427E9FD0CA151FB49A8F140797CD6F35566AAD14DF
-5AF6595C0B9B03AC4EF286C1F71F33195C93DC4D3621AF0FFF908D420B52812C
-4EBFF06D74D8759051FD1C64B4385FCDBB2B97BDE22935504EBA49F1E798A52F
-52C3431D1F886E8D4F8CE7E32DCEED6D90A290AE4C97E394BE2E8FF760E05A9B
-446ED5DCCE90ACF14BC2EF7F4FF96DF6B8D9FAF2A20DAD9F95340D11BFF5C7F8
-648E188E5BC244765EF006D73F56B9BF9AD193D6AD3B3AB2418DD691F2FC2EEF
-4EAFF90DB1372B5525C0B1AEAF040378EF2F72AD7439ECECDE46427B26B63F75
-FC1B0498E1A1DE15BCFE365E276937A7D222D928D628A4428BC654DBB851AE00
-9594221B5008A0F915B2D893EB2D547475BD8FEE8414D14CFE2699F1E64C0001
-2AF3D495AC66890B02A0B9D17E572B498BA481A3A7E84D70EC6F0935AA02B5A8
-ACD89B33BEA21027FA6BD84BB9DF3F49A248C194AD631119E5978648B884122E
-DC8E2FE5C2912634889E262C360B2AE7D39DA68A18A5052876797EC39BB4C9CB
-ED25ED247BFB4602F3C1C1580C4A99EC21381A57C9E14D0B19631F5D051ED2F1
-385154080FEFDB6677A1F235082C0817831243CCE3F03A3378A061D46453BA02
-824F806EAA4987D6BC0EAE78E71A20599D16BB386C604D4C2B3FBABEAFE69E63
-9C63706D5952ACB1BDE14CDCC584C9638D09E1D347C5A452BA60726BA3E077AB
-5FB45E51262301BD1DF71287F17BABF4FC3317862CA1836753C7D8287F3B2E2C
-6E43B617734F9DAF3D5F046DC555E552F182F91201ABDFB437076173A5644171
-5F688976CD85685D846F2EFB282960413731F81E563E7AA2A449CD9DE75B5EA1
-AF6D4224D1F193FB1D96B3F3D92B2A19C3D328B0E1BEC1880EF0AC727BA52459
-D994EB6F2AEA637390D1570BAE2BCF4281FF170CF96C4734412FF76B0EBE2C1D
-F58DE09BE4010011A1DF2902B1F8135EACBCA5E4C52849FBB9A1978FBBC7060E
-4DD494673F174D2DFA5B4F141D4C92613493ED5086E4324AC3102EA8C8734A6F
-FC0BFD7D5831ADBCF1A406E08B08C25B9393C32B3E3948350A6CE9E5946B8D0E
-A3C1B99DDC633E443DDB64C272D31DD44944116514FCFA5CA98EC3600EEACC3C
-39750233A1F02F35FAC5C414C309DEDDFBA242C39E1164D28FDC901F7C0B5D96
-6E54B71201F47A2F4378190E1482BA54505E07CF45E8F9863F3053C8C2241B8F
-A91A73D32D279ABB187CF9D2C068E16F950F332686E4C4E76A8C36AEDE750134
-8FCC87A81958F820B4EC5DA79E0501268C2903E8C8DA20AEEF0F50E6E719C848
-63977D07A70F6AC8B6CA105BCEDAB2E92B948B73179145742E571FF296B18B55
-9099AE4C060493AE8D76010182E5FE139347BA614534122EB2A02663384D3CDE
-8062C48FBFBEEE038409130C895C73D12218E62F16E465B0AECD2619E335AF01
-25530592A6BABEA59E9F0466830C9E81FB152C5E5FA7ACEDB04BD8394A5717BB
-2F7A34958FF620B4B5A1CAB1206E8F4CE8BC1EB68EDB11B20FEEDECF51B61B4E
-55006E935BC1EA2498143161843BF8D7ADEBDE78D17EB5CD36795BA2A2673E55
-15AC21B6CB32C5D0720D841F682C4A680B2C0BAC7DCA01AD1595A900DC9B9F57
-17AA310057E327B3E1AFFEAEC20A22752951A7D29CF5A5A00A1971797992B2D7
-8EB7FCC6E09AFC5E66446FAB43E6A802889B7336E51ADDB2BA40CD4BB18233C7
-FB102B8268E775E47DC4990986CFC9637356676DFF0B687E55D3EC0A86263DF5
-0A0627145113B2CA4F5EF28825F86D2477854D8A0147E432CFFA00CC59FAA77A
-443FF8B8E23BAFF5F864E2F22F0ED2AE662D4319E25FE35EB12B8789C54A65BB
-13F7F9BF8EA39D720639C0EEC0703AC68A693CC5A6B1499F5C32FFA933AC5A1C
-F7DE81D214E6DF52E7C22D99AE2111A58A80BE12A452B5B63D2A41791009B311
-B964CBD97D9210AF0BD152594B4055931C3488EE743346C1BE271A622487EAF1
-9E6B388FF7DA8526FCAE939870F53DC6966957F8BD1AF7623DD6856AE9C6F347
-F5ACC8572D32B0280D9358C07188534990C79A88916AB3969B3FEDE10ECB0BF7
-720B02BD450C56562545FCE9119EA2C8AE3C91D2D18E663722C6ABA632568151
-EEE05ED6E12E54CAD1BF1B43C3419DD52BB30C63BA18FCB2B3A68254EF024237
-AD9E610648587B64AFD0DFD40B51D60CD98C8AA5D8D5C1B3E9F41FDE095C11A8
-8B0780629DA1AD69E98BD8F24A96DA77611A0D2F7E640998A261CD3240E1D741
-DACEFB1E51F8E9A66D31FA02941DCBD75E7DF48D084F9EA5B93A55A2F0928367
-B2CB7EC64E6C70DA90D0827A2705808125310B2AB558799ABCC844FF8F89F471
-9C63BF32D091BAED7E38862C27D584D12A99B4AEB89EFA27B67298E9B8A183CF
-F70980D781ED2EAE9BC850F8F7D86B7C40503E67CAE51D3C22DA5C3990323E93
-8FABDD894CACF1B6F1D490F3294AD64857E463670F3A5DDBE8B4F34DAFACDA36
-E3253B0FCA548104FB8322B74D0F696365A05313E93BE3B79DD5E080ACEFF496
-C52CEFE8C2B36563C59C1D10FF0CEF110D0222441C5AA2307F1E1796D326CC4C
-6C73C56F2B28B5A02E849508CF1F58CDF96CC3FB3FC2D9CA33FDB0204B955291
-4DE38A7E9D6DE062E2E23CA9ADCDB6ACCCB2C3E658AA65B36E38B9013CE929D2
-B22F51DCE809588824D9E733915226A1A08178879CE7949248E61AF2B8AB20FD
-B303A906DB910C21EB5A2887ED5F0B325EE953ABC7AF9811EDD167E966E147BD
-4E3C920772371DBF01BC40CCBC5BF0BA55EC9E98CB16D021A9B92A10912836A8
-D65EC4BB7FE0630C6031414F5A7D0F04C452CD2A3DD114BC229381C593DE6894
-6080AE0FD6516259A4A91A40CF116925F51BE60D414C28745EC9D6EE9760E6EE
-ACF93D86C1C56A441B4EBA3C424365F92899BABC2C0EE323EFE0713C55561404
-8F5B84203AE3FFEB363AB61691ECE399625B95B796310E649347B6CCABD90CD8
-AD7A6DE6ED1D01408DC4BBBFB885415665F8FF4984E7F5533EEF428E7D3FE0D7
-55801F46AC1A834091C5775C6B7A10124986AA058F0A515ECF5881DB78D2675E
-DE2C7D6C6DA489A2BB518D91488B71798832BA39BAAA80A0FE08C4C00BBF53B2
-861F849134C204D397A21F7A0D2F6E7B3DB8F2B66936A77BEC6F0D84A278BFBB
-88F2C445167EA37A3ADAC4DDAD2688C58F63886AD048FD6BEA1252D2DEE8DDE7
-0D380B4A90DF34B79F1B24318FC05E9231EEDEF8DC4C4A13428FB63C8BEC8821
-E6FEEE96C2AF6A594D27B2F9B87FA266CBD4DD04634E2B16139D92D0041E2E5E
-059464C4A2D183C8145756D25BFE00622471A6E4E79A1EFE6E58AFAF15EB10B9
-E635A5FB9C1CDBE10CB15C15E5D1C3812EA7B8F9E4A0B06242EFD54D1323A5B4
-66482B903A6148D92335B3FC3DE714CF6C7BF5C5DD1A719470D561795F2F58AC
-80ED946AEAA2AF8B6CC3615C201A8B7DA41E544DE91BE420EC9D3CFB7B58BCA5
-55FA73795BE48428076BF67CB8DC0EE6C1D36218062B715AA3C1D45D8AF07954
-8A3A7E6CB1C2E460802F54BD053EB48FCCF1609912CC773AF3486372593B8E58
-E9E6C93C141F4FEE16EE4BFA59B4EE5E3E124911F898011B62F45C80731AB829
-985A271D800992032ED66390931AA6CE59122866FC7C320FF73365E16F9AF3C2
-4AF57FC4AAB658558D70BDF1F7354B89F153C26AA8E76E17EC6F92607240FD12
-8F108645F95AC91F3F7B6F7DA5B64535A3B5AABE7A1D37743F9847AD56169FDA
-C8C9C1D1BC019503B9734BA04BB4DABE31B6055F870D6575CC62F6F729D21074
-87A4F362009576660C6431902FD4EA52D2765E2045DDF5C25675F9F1D4276983
-D452A46267520F5D7288277A31ECA2B4EE12B97CA3F76F7D0B9F3977E0672496
-8FA02CDA1F76B8FD199F2BC2616580D8839BE1288297E5808D66BD04321620ED
-21B26AF23EA4E2E64B373C7310246609596666F872D9BD7192DB67997E0D9A5E
-D595BDD5A5C1461BF226FF2D756675494143B47BC1512441E51C0017BC9C8274
-B44D77C9A1BC953BFA44C1A0F532CC27F9ECF7D6AB3E1FE1CCE494A8BDF5993B
-C420BC61A295CBA2FBC60AA33CB2EFBEEB1EDF34AC96FDD98566902158CC75E4
-9EA4C612810161854E09453D960D2A4F3C0FE4A5C8E59144B730537BB141CA7B
-22108604A901BC7DF4E55541122563B228947E3E7E6A2E328F2631D363F97AAB
-73D0025B184DA41863D857D9BC282D4EC74C2CD20794B2A4A78C455C309F60D2
-C568FF05CFC7D7DD9DA01BA393401808B25350FBF4CCE08491B3B788BF0F34CB
-0619887C7AD8EBA8441517C1469EC5C3018229564DEF0ADB0FDA1C8D407122A0
-EA4F4E742000FA882CDFF36E00EA1FB9A7E38AA948ACC43126EFF2E1C568C105
-3FC7D867E0578C9AD2478658C41FC1F0D642BF5ECE965A81954578A09B1BE241
-02DF288A6C803B123BCA21CD1E1888F0C1DA1980A443B6AA179AA55C2485DB25
-5A631FA18DA75F07B5598E94953D6EE1E3B25B4E32996DA72CD431DE9CC1341E
-B27A6E612ECF38033A9CD6C51F83FDCECD86E65ECED6F0A05546606A8D7C397E
-8B24A2F7B3995C54F609B6FEDD6E5F7BE8EEC9B37EE27B4474F5E21485CDA627
-7BDFA2D6AF6E971F71667F934B617DECBE77C7434025F366AAF4906F69570CD3
-B65CF130FDAA3BFBC3DFFE94CBC2C946CE94736B5C0F281F461FE4467FECC00E
-4CAA95306E610057596F7F85647F1EEF0646B4F39D96CE5D971796DBF470A6ED
-EA0D2BBB03142A46363F538C81CA2396A8645BD215A6129CEFD1022C50FFCE2E
-991109A32467378EF1879EE07089E0601AF9B16F7AF745BBE665D155E951E638
-9611AD8204091D1B52351DC7D825C4241D2C20FFF8C67B44A5996829DA7606BF
-22565BE752083976797486A18416865389C00EE6989EFA7A82E7F39A75F1EA60
-3996238BF10369624A0A64EC43EA4D98AEACFF189FF1EAC7FAE3F319DCF018FC
-D399C3A8503B65E63E374E7BA01471B3CF564F57E0B705FAB5EB0C33050816F4
-331A6161855A37F003CBB5F8DF3825C81597679340F18CA1F664AF09BB4D5539
-5FD33AB6CB19BBD3D2A60924E34F61E62FC9A4F3D8ED6C849F5864FBF2D9AE27
-16CAF59F292AEC85D322ACFED0E23721A4CD9920872C1B4263A01ECD58810CC4
-EACE1B0BB4A4915B57773D8CF68702EDF839E302488295EC2A43950395736F5B
-25ED769D15DCFB608426125CAF40406686209B84C64B9C730587CF192D16853F
-393AF1E56BB1E454B55C200B87F4DDDD5493B6FDB1AB600D3A3BC69D83A54C3C
-55F1425698F1F4CA2A36981C90B54184B265A1EFD4D1A1424BEC8C23E5360DE1
-B101DECFD25BF88F8771F1B0A3E8BA26AC0C9C81943C6B8850C28459BAF4819A
-9827ED4C97A163297574609A4C65D9FDBDA87B865DAB7DB40F2A1EADE14EA5FE
-0C6D96E36CF6367091B73D0B10497A68FEA1BDA2E1279DC3A5E3BE4C2B3E321C
-90438C00B93AE85D744B41E1C2F9D7CF1BB0FDECAE06F3AE506B8F947A92B9AB
-0857AE6987E1AE589BA8F14269CF275F551543F15A9A8E52BA033A28AD73F507
-1460F6546B9AF012EB52FE6FF79CD365858BCA117987CACC880456B0E0507563
-EF86886D9CE14B7870D31390EC3AB9CE3787609CC1E73AB3BC98B4E61A0CDD8D
-07D9AE7A7D9435AA849574B944822B2D55FDD3D4D3C34D78C7D499A26E9D7EEE
-BE7A196176B2BDBCDAD359A22B91DAF554ECD8D47B5C26AB4F6F4F7A9F824C17
-778E629872899AD52181054D639BC9259B08399356EE8C02CF0FE7A5556C8620
-19220458AD463FAEE4A5F5021B2EA3D4DADEE0083700F3256C5A82AADCDDCBA9
-52E0CC63695856F525A9C6F7153701F75A4AD61AF654258F79D542A7D97FAD66
-42F74697458A4F5707D1478D51E1D742B03264FFFF2D6271D821DDAEFD14FBFB
-D11677929240578993400895F323518F1B8E5D7C60A67E2AE4E782393415D477
-2BC6850FCF14583B0AE0CE6965D59A43E4F58CB9D762F91793C2477F02020B7E
-F8307AA26DE94537729BFA79D796FBC03C3ADE70F621F55A3B7A69E1DEDEE23D
-1E3F63D82934279E4DB990E049FDE9F8C267A68E0FA480801BE2A26929F3DB2A
-10BAD06C9D9B8CE02B43FC55FD0A6316254ED468F741E7395759A20841DBDE17
-4AB21CB72FF342FCEA6575AC296CA46319B8A9A93764CB7D3C77C3DACFFDD7B7
-8A5DD5AEA5998432570A33F65AA967FEF7F8137E6052AE628500014373B5290D
-46FD388981A8ED2A20D013014311BDCD68EE0581506471CDED6C329E6DCFB6BB
-DC7AC884051FC823615983DF039EB643280D351B8965D94633A6E4DFF8FA2F12
-CA651975568B9A3A07395436DF29D8A97C458A0E86C5BBA84D7212D6714AD79B
-7D778591C2BE6C3E88BA4E5388C7FC701F906B226FDE4238CAA5EFF4DF572D81
-B4AF9CCD374924A67F02D1A9E385395362DA99C838794380A1985BBA0F2B54A6
-3D3B7C56801B0EDBF283E46BC589A4931CA83BB358EFCF8019A20F2C8DD49F4B
-93BE8D823F2C6834C058263C5BFD03C77FBF3979776BDBE4AF1516583F90B9D7
-0C4624D4B54F7ECC9112C6A7DD233A0A47B2CBB828E88C62E8F6AD478F580BCD
-D0A8CF52E6797BEE5F0B067499D90E7B6ED5B0806FA5447453C2D5FBD8C27E2B
-096D2B0434954E0923FE4B25C75A7290570FEDF52E2AF39AA99531261F734CC0
-35A8E3E4389D43341AC6D9521ABC7F2D7C4512775DEC7F2FB86F59FCED236B51
-6FFB3D868F762DA6CB0645E75B28FFBB50DF060D498974149C5F5272A67644E2
-B4BF6720A55B25429C59D1659CF6F3319D5CA32505F7B16733FA0F8247FCFFC0
-BCA6B2C18A8C326F5CE96C37AEEFFEFA6DC668062691E645A4AE1817F81D7707
-3A82C1BC4D5C1105FE569704B54843BD516281F2B310180377A706CEE4E9D41C
-23D461031C71D86397D7DFDE8965F41CA3226FBE23E02FA95A10A7AAC5EBB5AF
-E0CC4CC81FBC8E949C10C8E95B8216BF179A897446D7F77D9748008C5896CB98
-AA5C395F934D9769019B9EF28D3F047BBBC42CC6878AF603A37BF818391533BC
-5E75028F0B08200950A6C534CBE9CB1CE9C6A1E594E5C2C53D21E7ED4C50285C
-C6D8EDDAE21B980FE488C265BB0527F17491246FEC9E64F59B0060CE7C78FDFE
-26BB1880CCB8F7FA4F01F5E318697A1C36622E6EF6609FA44164984D730375C5
-093A11B97FAE1C1550217E15CD94C58F641199AD6F91AF0E215E18D87750842D
-3AF4E3425B22736D3AD04E94C3E31FAB965D8880EB70CF21BEB13B21B533ED06
-FB16C732B1C073813BB0E5DBC81F4841FF049AA0BE805186E095DA7746690028
-FE8C23D443FBE964B06034A5C927C8BF5C00FCE579DCBF64664A08E1406B1960
-B49A9C253BE7E8A1D08C093FE5A35331C02C4B0292EDE031DD8AB82F5BDA7F57
-2CE752F97CE43F828A768C9499993326F68FF2EDB6D58C7E5A365A1A43BF47D0
-3CDA128583A3FFE7B5D05BC29249B0A1A19BFE4EFC52010742C70AA8A901A320
-822403AA573269366356772E3CA6D57627C05FEE370AA99F8208DB2E9BBA0DF3
-5A41C973E97927D16A110D8F775361DFCA3CC8B0E02C8FED2B7653B78E7CE4D1
-73B897D7FB96307681DCAD93B5DA96D071DB5E6A8BF7833CA3E0286D86ADF49D
-794CF631DB84A69000C1BB9144C23BE131108023FC32D44129689BE0911C44F8
-F27C08557BCE6E753F21B0D1B1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB65763C9AE4
-247C7C9B60444EFCA66AB8108DF1085D4F3D758CA672BC89FD250646AAFC9585
-F7F8583BEF48D4A97DCEAABEB778FDFC2AC2789D6F4E1F0D9237205E6210893F
-77BC26458D7CB35B844DE20BC63A4057AEDA379413FB28B0C7C9A6AAC97CEB9D
-5F712AB7B25A697092C13D2042A04EA2FB36836E425CB0C97A9F30C6758FD6F5
-2E4A4AFF054C14C7507A4D90B76F44A240D2709F26814A24C405E59D5109948F
-87A93BFABAFE124C8D58EDF774E060F599847C6DA5E7349BBD7791505BA1AA41
-C047310EA5BE5555F3908ABC457CF1E806AE9D9ED134577DA0DCAA9120B78425
-571445724A1D1BE4A49A88C16F64C3E73CE74A68CE9F413A0186BF50527E3378
-0BDC374D6775CD1A60D04A2936D6613D91023157B2277815D3EACBBD0F5EC49B
-E10FB601A820B3FBFDE967AE881960711947F2C00DF744E3E29D6783D3F10D95
-0140A5B62877AA3A89794368D3866910416393C21EB2C8D48B36A3175ED20B45
-D3389ECE0C0FD0B8219CC0FE131BCADF70835C1ECF5B3B45D25467E7035313D4
-C9D0DA39FEA7F03DD763174C09C7F59D83D484E2C8151DB2A52428C5EA3A0649
-0AE2EA79DE5DC679CF978D3CE71BA42811E1DE2CADA4FD5618AAB6CA11976402
-57E5F5448863B4B0123088E8B1C22853F731BA9797197646BD327D873769B322
-12479C1813D4DEB5E9C7CFE623DC65CC67B381FD18537BD381FE8B0EB0E65407
-D5C970329E61082E5BC69152FE91373CB3773CA987742586E6ED8C3016011724
-E3F5266ACC8161A3E60B779F99C62483289B8F5FAB2A65A2B3EF026F50521673
-94318A800C2BADBE0F256E2B0B1BB9DB90996B17E39E5732E0932EE71D94AFA8
-6B5B0E5DAE5C3DE55A167544D9F315D7DA1DC1DE8B00E14164B941F136801A81
-FDBA98CA9A96D881EE331F4B45FF396B54F7BDF32408863D62F39AABCB5B45DB
-5E1DFB417F9E79FA062244A32D847C0CE041A90A2375EA44ED95DFD6A7BE97A4
-69A896ACA2A8F3D1838AE43D8315F69DEA5DDFDB068CC94C5B0890474075E320
-A5EDFB9E13A5060BD2C45E855F51AEF305CA576A9785324F98652B3340F6858C
-0F936ACC0280DEBC3084E0C3BEA789D8E5CF803B7D72F2E96AD34D947DAFC787
-806C936F0F9D8C7C8C7AF64EBB2EBAD3A97DC56A775279BFE6FE5A17209A5DD7
-BA86A542B70E8AEEE4B53A6A7E389709156BD02E37648648A8C4E6366A255D4F
-B6D33EB9F9A7E96AEFA0E9D68268C3A5A1A8CEC390A244C6CB8F210C608F51B7
-769E52259B2EFBF44DE98ADA262AF6132C829EDE71A0883DC517E14DC0312DB3
-10899A3662CF88797DDE4BE8507121E7EE58D83F0761A5F9DFE463637560BE31
-EA5E7931C115F68D02EE832D60E974D5BB0F6025D28E24058E8E3CEE6B45156A
-70B4C4DB0C784FC5D4A95959C6C71C70233E3EBB696E813A2AE3CB830D6D07E7
-4F790752D9E8E6BD41C3EA514EFF1ACA2DD8D1111BE62A17120A17A6BF806CF0
-9E8FB18AFCBDBF67B15E4D45A3688E4A7108380FD6DE1491CDB932A7A8CBA1C1
-5D6770AEE80289FA6D6CF1460C151A78147DCFE4CF3A0A91BD7A14091CC7BA0B
-87F2E10493A80BC1E88A382088CA09806D7324018B3C832C984EAF9E801F08CB
-AB1EABE8C8A6E14AF293B5776C6F75CCDEA7F25431F902A1247CF5A101BAA8AF
-846E3366916058BAD88CD99BE5369D7CC3B143CDC0E48DA50BD130997962726E
-D50E227D7171951F42C60857453E6574084AFFC583423E902277E7F86BCC93F1
-C7A8CE812F89B20FD8FBED0005CFE83303F61369405336DF24CC15745443E9AD
-8B49D9F29798735EF6892E925C254400DA606C657DE585088692AE468276EEC8
-4544F24C068ADBAE403BB7D643AB02A289097A3E87E464D1E2DB0E7885AE8B96
-44C08FC42CE55281BC901F194CF9FC24755DB18845D8FFE03F70A9A2D70C7097
-46B7CA5F10AAE098D99DFEC165BA71A67381F49D1F09BEEC2C0348A290C1A1EF
-298DC0B5931CEE66FB6836A3C7A09CA9D8B37043478539426F6269EAC21F5ED5
-59AB35645218CDE8946FD4468608D539E0AFC73812F41C6AB6508CB796B50483
-C268C21A06BEA059D0EE331836A4E242E243439655BF0EEB18E45E6DF5BD75D3
-1B5E0112FF2080818146214D1A6F1CF66F2FAB4A4A975B99FE8282FB68D29032
-EA0AA51B2810F66E0B72A8CEC2BAA30E88AEA22B3A30EE6C66A1DF6D4273EF6A
-FA09EC1CA0BE4E156FBCD5029381E0368F42E466B2078639AE281C31F5B282C6
-6F621D7371113AB536EFC242766FAC1696D1902CC514E8444D8C977FEB555E82
-32C08EEEAF5A8820E4341EDCC6E98AB6F0EF6EA5F5CD18D1922FDD273C61ABA3
-1AE8EF4874E27B005CE5D1308EC915999E62E44638BCB9116A69A202392A8463
-CD263C86FDB8E0CF5E25CAFFD32F824F9475232A27862EF2723B84B35DBB0627
-37579F19E21253433D9BF96F4C8841331190F924CBAE983DFB9728B0B896879B
-DE3A0D087C1E16BC93D734757D327C31866CE6B15DD65EC169CC2B9C5FEEE538
-E5B8FFBFD3BE85FDFDFCA09EA4491C539D79D4F7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BADD50DF87A0
-8B6D1BA96CC415579DE9A26786F37C6F37C57E20559A06FBDDAFB7A0421BE3AF
-ED947D999B9B6FCFD973D2A9CFFB2C38CD1F4E83DE081288F2654E747F7E7BE5
-32FF02074DF581DB456CDD381D834EF577A7DC94FFABD35019230545DF24B281
-3C57DEDE6580DFF703681287F31B62A0DF73E0E08FE3E8D4F3BC58079DF85A2F
-9D66DE46A9D3F8F289BD78DD2641DF574F334704A570AC88AD21D0EDA5E7660A
-5ADE393595DB983117680F836913355EAA0C6DBBCED2E7568D988462897B5EB7
-F32692135C9C6ED6E12978DDA350CB2BA64D433A908E31F61761C23FBF18DD4F
-987FA6D14562DDEC9623FE5480255072140CE23ADDC4B0E867FA871B5D1CD62A
-0E07EB4CD8067A363DB0FA8E9A81109A1028A076A716CCEA3D569950E2683B60
-D0E5EB6611DA3DD784FE69E0425E19731170E3FD55E533C4D2D9932B5CC8CE59
-D641D0116334D2360F7A8681ADBB014895484FBDFD0B903E8E15DCB4C5207445
-1AD1EAFF6D9EF7EFD9883B95A6F179D2B108CCA419643B31658A4755658130FE
-E210089026EBFE95DF621F381F7236E4A407F8298A30E5F704C28A1C5F64FBC3
-9991B88BD657CEAD53805B2F61F2264DC7159572C18E5537886145C22574845A
-9A616E5D4C2613192073481EA165A94547E0337ECCEE93ADE0281A913C9B4045
-C3165427682AE888369D9BE2A3333232979FFEE701652CCD553F4909D0A99FC9
-C8C851B968ADBB92C8550384651FC30FD010251D792EBDF4BCE1E241AFEC6B67
-EDC73EECA0BA12DD9A22937CACC49F0AFD3CD7E032C248F70D2D338CBC6E9B34
-205C184BD86663C972E37D05E01137415E2F27F6AA774530FC05BB3DF616356D
-4FD973B3B74C43EBD83CAB8E9F72D1B4278350321E4894587B458BA313029168
-AC14916C7FD5788B4E4A675081CE6046FEA28ABAEFD1ED7C577BB74F66F5D8B2
-2F355DECC234EAB0DF594B9C9F11A3415DC4734AD1E43CB4311C8DB693F2ED84
-C70A36215C4D146DD4DF54FAF65B8C7A2B93498B4A74BE58B40778E4A881DC38
-D180B995251CC4A6AC8C8979536212CF023C0EDA692DDCE760D3A12C108DD40B
-C86B0A2300B94E7AD95EDEEA99AE3A034F21E98FBFA2E31621DB4BEF674CBFD3
-1FD6102118844C29CC3CEDB9A9BB2EA82C5E43934A7BBE72980855283C3BC562
-11292ECCF4805B390FC29C3A5C526D4B365ABAECCD0B5D4C71CEB495B455D836
-548AFE038A03F581390C5AD5814F6E395DAADB1B3E93BE91AEC7BF5CF9220A6A
-91DFED453CB4013B89FBE39B32CEBFD4BF498FDB985407ABBBA84784FBA1EB9A
-41B2B9BEE5865DDC8658920D96B6C26BAD0A67EC5940E5C34A8069B1D31695B2
-C7095A0A5C74A733436960E3F1FFEF9DAB3CFB3842F2BAC3D6498652D3CCD618
-8336FDED8A3FBC5A0B01013E06B10208B94A5BACD939B91A9251F8EFCD0A8970
-A7D19A1CED133D1BD4A1FCC33C0F11E3490B80DDF8471C1BD826ADC77894C7D4
-E69C826EAB793FA6C1C942E9FBFC416213A66B19710A34239758CF055D6C4E31
-39DF5B49A21E433E299C6E03E290CB2BAD44EED9D20C0B39FF6B0AC8D1D8D1CC
-28196F69A3FE2FD78A65DE47387363CB633080D42048FA14A7656346EE34F2B7
-2472024F755C094803EF3AF917C4D7FC183DFCF1D72D73B3BE40BBDF63E621D5
-A07A6FF8C5C5D1946FB877AF00585D260CEC0051128927F0E68FF4743BC2C5C4
-7AE2F82CD28D717E155CD2B8E0880948EAE84A3CCE30B01E8445834FB3D3062E
-CD7E6E84C549D73F735141DCB74390924EF902F7E053BB7C65403B96B8AAA827
-EA8FFF133A6310BEF8EB5EC3F9FF7881EE687E31DCB5749B41933BBE086AADF0
-877FAA01AA390061EFD315FCC44BC099FB6EBAA35070B8A12BD44D474201D42F
-C0C0577AC0AE21FD682D9A50C71CBB8FD5DEFE37AA50B2D69EAB483FE64A7BE1
-920137441DB5EBCBE4D0A1CB7E06B31282DB73B910E33C628EC5267DCE7723FA
-456259380153BA68A817869C62F315C4BC750E47060A0B467455E72C872003E0
-F6E0C3B4023424950373514C099D10AB46348B0CFA3488269451B10CD072DD61
-1FABCA5E1A488917BA120F9207EF7F3E07B473497A77A0043925E52BA328C105
-6D8B680EB5C7648602BE3CAD4C37CD9617C17EA141AAD191CA7FCD23A6C473DE
-9F4B38D38E0909B3C5969F6B592E35ECC11618FE0B8A7DBC2D8A5585DCF4FD20
-47D07DBF38A9439CBD3D17FDE6AACE7C5D2F9F2881D6E3E92A4B51A42E4415AF
-E3784D7921DEEAF969C8BBDD1EB0499A88CEC7C4B098C32FB32C8B95E9C3FF6D
-97269D5D5A1098AC4AB4EAB8839C3AB34521A16203C42550373AEC6A18AFA4F7
-E15946EFB23467C26C09ECFC832B1084414F20D39123FA77522CCEAA63F11857
-D69CEEB988FE3B57C2A5781FC235F72248C628631D9C9BE8AE25E34FE8E3629D
-82EFEAF0BEAF6F237052E4B398AD1AA82CA20EBDC707C3DCBA9450AD2D8BF9BA
-220B4EC5CCA2E03F82555CA52232656942752E80C50A2A339AEAE834010819AD
-E40B332499E2E32DB9EDB7C65964CB10532FCFC0BDF028B0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 63 /question put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /emdash put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-31BADF9D4A8B8AB7F9551D56B767E0CB134C7A7C3AF4EFAE9BA8007917CA79E0
-8E7B8E95E6955777B6A216B9315B38CEC1C94E82D973C2C03C5E08BF0C4E7EA7
-F04072D0AC8A5CD7046C378382B2A09ADF5573A15AED11C1329E4D332C89025A
-23470B8FEC12FAD9E3D99DEBBC9BC9C20D63A8DEA6D6DF84E4E248C86801F209
-8738DAC9E96292B57F5B55C69231BA247C8BF5C6328935743FBC401C3616C58B
-2B8FB16101F7A710AD5AB745F4F5B77A20EE32D435BCC888FCE3CD9E648D10B9
-8CB5F28384EE11A3CF8DFEAE4D09327B09B26C49F5563CB82A48729EA20AE878
-AB0BA32FA28829138EE25BEEC9C1F5074B29A79CE7CB6F64367CD8A5A931511C
-0179B300ACFB5521324E57A14B97B31F6D1E1FEEAE39CC1345CFC12890C51ADB
-EE1427F2B3BBD0E8937215F1F066998ED86ABDFCF3E614E3354A1A0C54EEC159
-58F976928CEE343C8E91975A59F149E11D53E74B3E38BE9BF42B2A2BEDA73113
-416CA306CA631BE9A259F150ADD9A8EEA7640A9EAA0780F9F1175A80FD531E4C
-EC8A3849C674FFE4380C30E69095E841824E787B740C42E415762BC05150143C
-A11F8270C4875DB0530189CE6E04010FEECFF00D18F008112E0565F19F592378
-ECE719D216001ACCC47FEC09123F566E9F58D7275BCCC05ED6E19707A59A841D
-7C1E6C17603F069B5432D80ACB5FBB9EB8B210E1E58A4CCD7AC302271C3C3C58
-E64C0CBB2E96AC52ADF7C55EFA5492DEDDC73140781C09E8B7B2746B3F178A41
-94B1765A66441406D1F8839423AD7154F853F8F918258D5B9649DE7FB974E2B9
-7831752E86FA4D9B64A7262A4EC9C78FE4C9E14E39EFD4AE26383F6501B2373C
-6368A1F9A2278192F6FC9DE11DB537A94F45DD4C21C7905AC5A3B303B733C091
-28D3576F4EFC863A1E91F6AF21AF44C84B31CFF7A5BB63FF594222D6546CC0D7
-9DFEEAE8B7ECE67C0540278463D488CA27D7EC1BF8908D18D82358B4AF11C60A
-734E394AAA20FCF94AF2B881F805D8BCCA3FBD0749EF20A2C86CB8536A076972
-9CB1C2889E182297B45904FDB6BDCF07C112A827401BE9FE57E49F2C6E647DFA
-7787FD65AEE4903E99DE269E88A998874835D0ADF014612088FE2E5ECE53EA3D
-331F119199C612FF3F72EDC9F09538F4883E52E3DCA31F70E502F7275D3B1ADC
-FE3DA2D65153C4D3305E465C32A651D550B612D3126821FB211285EE2A0B97AD
-11D0F21B20EBCBBD81DE360B8061BF2FC5B2D321C270DB853FDF60F166F794F4
-FB9321D9BB4C392BDB46A037466FD0C461DFDE7D2AA8CCF75E9A79FD19ED8A08
-1B1FFE071F218323135310C62D29299DBDEF5F5C554BBA73D9381A5E3D7DEE6C
-D25AC81527B935FBBC1B04B21A5ED4FC59DE8B6C10FAB4D39D86D33348052CDA
-25E114345A8A05413D39531484087CBF92934AA3AC20A5A19B933463D077AB8C
-85892D23D1BA6B05AB4F4FDD4B61CAED6822A4BE00E79DE49ABA6A22F43CF7E4
-E7E81CDEAE3CFC1F6B197E2777573AD8BA0F8D6F1E31C4478AA60A5FFEFE2FB0
-C27A92049140B1E592FF36244F9CFFBB56D89B4523D024C4CE3EE14A78FDB029
-73246C71C68F1B063619ACA51CB3771E7385E272B4D85A447D07F1294B392768
-CDC97F2E94C67B701E459B0A3F1B0E8131F1207D9FCD34DA7753DBD7CA765231
-DFFB32CA1967A3BCBBC0BB8CA9C7A2BC450955CB208F76857680B4B0F25F0937
-1F5C27902673B5CC9212DA464C2E97C939A30B46FDE0D2AF64AA54B9159C6055
-ADECA637EB7CBB4990F8699D49671EB6715D45B61A87E7B36B6707F71D227CF9
-41C44FE089227A340403071F8AA30E5A1FC2D009C82BEB84E08A8874BDE42B15
-7C11D5585F4AC1C44EDBE20D421982E64E945117CB82FBBA913FBCA3E31D87C3
-6A1C4757572B57CDC478C6C87122E9F6C90FDB5F5F5D802F246C6C6E0B4162F1
-AE0ABB7CB31003CFCC7BCC27065F8BD6BD3E86C2E59B68597186B65A45A8CB5D
-4AADFABDDE456D8F7B6CD064233BCCD2D74D150FD322E788AEC94998080FCAFE
-17FA2532B24F21F58220F860BE6203C7D2DF1961E4747BC669D7E1F7CB7D0714
-56EB2A50B61FA8448514697FA3CD47A6D1979B71C9FF6AA2BA1DF92D286CB4EB
-1E87CD3FCC8C5BEA5D32864CB3116D567146408541DB66D4C9EB53E7126E9C28
-812DEF847D1B0038F97B6FE6D90482FE16CAB59BD919A6437D55CC2790CB0176
-548849B93785C3DF03A79AD2DE11449AECD437EDF63B9C1B4D5900DD81206712
-69AA9B81B7E80A3AEB8449D997E24E95B50ED4D024F803C1C9FE74F32D9B21CF
-C7F0A4902DCCC4809DB0EFEBFFC7E8765611EFA919E88AF7C9EF9D4CBEE4D67C
-35A1FC24A4C07FDF97DCC4F4289F3FC20816713AC68F64B556478DC61E9716A6
-AFAC0BEE693FD4B9CBF6A249EC4B158B7D976030A3E298377981C8362258B373
-309BBC7A29B18BE67E3BCD2CDD0F8DF937DAEAA3B84DD79F902D1A19BB74F8FD
-74B1F7C923F3BC4F5DE58FA8A81C0F7B4AC12AF2E340DC1E032A034A6CDB1E14
-7F476C09F68BEBFB34303AFBCA5DDE73FBBF612ED04870F4E25AF3AC09D4B009
-BC00CFC6B5F3A2743A46BBC511A4112BD332154FAF563EB6F2FDA470554B16A4
-4A30E15E39A579D3026A6E26615B858B6B925FF867553C9EDA802FC11826AFEE
-3315ABBE67B35DA3DC7E1B10252D693D79F9F11E42DD7A6B07E1C5CEE13DA56A
-F37234D87D877C7C59E9E9E3881AD9B43479CC6C3C1BD8387F0FE80A84EB429C
-84463767A8E88D8DB3818C27E940A5E6E99626AE04A11AC018C044736EF99D1E
-478FE9022F9B4C3EC7C23CA196F2E007DE9FB5EBCA32E917C6B6C025FF0B2D87
-440A3E5E5DCC03E9367C2EACE3D8BC58235DCBD67F3C1F09ACCEBC437864B009
-BB7B7A97B0FF1ACF52DD7DF665CE08C615C27FA89FE02CFA057A4D37DCEA4A90
-9F899B7D50DEF62DF60287F5D4E9AD34D38F766A32D8AE413A5EC79A7A1E06E0
-A3DFBF6EE3B89CF49E2608D21D5A9B4AEA6DCBD54B8BE7B7D3677D434F75AD32
-9D9519E3A1868CE2DBECAFEFD435ADBC249CDFCFCF0022D8B9BDD683A26BBD7B
-CCE0C46CB371ED46C072840D9DC759A2E3E5256E2FE0C02E9935C1F0AEECDA8E
-09270BFBCB58AEE312B48545D693A8D67FED462FB1884A9B8A359227F6B98B83
-EEE7638C4C4C49E6B2FD4A345B68BCEAD175FB38C840F24C040DDD23B7CB6C4A
-FE7F1CE9078424610B72BEBF01AC38C59C5B96994299BCBE87CB8EBD252858A1
-A97253A4215E4F2393E05742984773DE6FB721AAFC61416E3488C44302C3CE7A
-5D716482D69DFB85EF789C69CD59EB061A0C82B1E7DC26FF4C9E40CC829329D6
-77125D2D505FC762C4C2BA41D13CB6D4F24CF77FCB6EBA610F2206749F59D00F
-4BC072A8A2256FD9B622E29029A142E4B3A8E73E2A7ADF2892B22E8479F0786C
-63557B164B99F4C86B3855C7A705170DC455486E5E12327605EDC60ADD5577E1
-B6CC53EA84161587753DA9663809F4FD12A5746FF9FE8EF5C7F09D0B4055779B
-6965F1194CF69F654A842808CB9AFAB1690CF47137119F0497AED5F4DB2CB02A
-B76B1AACF790F8847763C93058D476D65D84E52B0D95004009347DC2EFE550D5
-7D0DE92F27958F573B1DFA14412F6FBE4FACAD0560C7084770525F9F3F9D8EA6
-51806A0E49E1E19BC368F9031E41035DFAAC8484F3051AA031FFBB746FFE9681
-44E75F9F41990ABF86AE793BAE3B12E37896613EC8EF0335042F71A2D548805C
-49AA2CC0769B5D6634EE35F06AEE51988D0262EEB97C956A4F0FBAA1C157A2FF
-CD6A7D43107C125DBA1E68B86E391B70945C5F07737D9EA027824EFA2A963D2A
-FA1F641E45411E17D1602D73B5997776EE540BC02237A3BCAB3CAC4B63EB8045
-61BA2F07B3EED152C747E1F90E26F2663DB63A7B0C534F1D96D08237C3A983ED
-14B9C0907ED5D79E675B924E095D59F177D4493FFC3141CD1EBB592118769AD6
-4BB6AA687F275E452C435772286982C8A0EFDADAA79367087E94A86566D1D646
-040EFBCA57B792FB4C709E6679F1550674AF3577902A402D2236BDF1A124862D
-0E6DEA0459AD2A12FA66115C89A530F4495321DBBFA5D500CC75BDF82695ECF8
-75072C11CE4F31D74E042F601CA1CD2916FAF3510121FF590E3EC5300CF36879
-590F6F7C1B3552B1700FBAEE412A7CE39E42730C51168F6E4F6CA1D60446F3E9
-353507DEA03DF4CAD9C4F674AD2EC37BF7F077E7BC2D87DA434FAA25D0E5986C
-0F1FAA70DD0DF742A1A386757CA112509986EAAE5839F95369B1EA8D629E2363
-A584EA90182886644878CEC168634A47DE9C41D1CED9D3D0B2E34CC9615F6CD9
-E201B929BBBE9FEDFD8380B42D7315690D69D0A7D0724A8F4C680B0539A51E22
-3FB87D014F3AD8A1595E8F7287157E94996254ED88618999A9B795AD9731968A
-214919A9DBC5B1CF965903CF2A8DFB9D4CC00F2C0AC0F0E59320ECC1734726BA
-1A4950FFFE0EAD01F5066371FC815A2743822002AB3A625872F5E0FD0BA6007E
-42967C96D8C33F40243C7831309B1D73FCB29E26C11BFFC8AF961C3092D344D4
-36FAC6A5B9D7AD8231A6F0C22A01A715942F8BCB92D0F3FE746EECF376775643
-C23260B5F405C944E7B96331B416877B045BF1B2CC6EF7466BC0120BE79AD225
-333064E57FABBC2A96B4CB91364D8BB70E26D7B20BBE883C8633EB86B25B0342
-095465D254CC33E4D16F438DEC851469D826F3B60B603B1C1EF8925EB54D8F52
-25B709CFC5D0AD62397043C35532740789914EE690D548B16ACD312A240F52CF
-520ECE0F4E4F2A88B93EDAA0DDFAC140BD4B8D28AC4E3968668B922F9E1382C1
-13C8BF2E83DCF712B7AF8F96CAF36F0EDCA6FBF2C53E556852D03C9FCB655A85
-A4BEF3F02045E80AA5CDC5DCD88D191816416640742A0A69B3530A1753384C7A
-5E0BE7DBA7337C3EAF3045362AE7EDD06A4BA28BD4D0ABFE1DD8A96B41206F50
-C3657DC73AFBD7CEF7C280A0E84704EE66AED813136A1B2135A2BACE670DEB2F
-00B89E8362E51939D6FE6E1994736FFE3701A3EEC6DE22D83A54E47AFD8D4BE6
-50731CACDBEAD7B353C7C70A457EB11BD829C318652AAA6E78B448A176684242
-E99CDDEA87CFB7FDE7596F727DF20AD60FA7DA1FAD59D07376BB905506144ECB
-AAABA35B6CA476A4E84717589CE538A34A9CE12A1023B06607461422EBD29198
-D66C3550BABC5CDA548D1D17053ABB1CDE8BAD0E79A5E5446526EB48F943EEBA
-B4CABBB898451495828869636E507D1ED10BF8A078AA1ED0C6F9982F2A12A42E
-940F6F934F5370109DBBEB6DA2221D1CA22322079A0B4CF3D3025B8BCEFE9079
-9B239382EBDB60B029496BC2061CD37DFDE0D7A7C17EAFBB7B5F2C0CCC905003
-8AF3BBF861E2D206272C3BF1D67F81CD2F7766521FCE432498950F9420BCEE04
-944C1DC45679D11D3F54C90B41F2598074343CC0B689D6A257E514944B533532
-83C3AD092BB709993B1912FFF47D416C842E08E9A090469A1104CC802F8740C4
-EDED557C1C140A2929BD11257A385E38FB5D8A5ABB10F452352E64B06299E919
-A0333C30478E204BEE26959C5E72C39FBFF797A570F2A3A6791CC6909EDFAFC5
-CC5AB8F2CCE1BF24F46919B5E84FA1DF9D5EBC0FCE8C23D4FAD6A1549EEAB1F7
-C27E348B8055B997D6E807219E117950A223F7C94B21EBDB8A151192C5E75814
-D9B6A0EEECE02989613C94DF7ACC834F31B53B3BF83F62D15E314092AC96ED9F
-A4B4965FF754F9799FA955486089AEAAF6A65BE8B0A966C34AF7D3E2EA1FD2F8
-26FE9153D82FAC104C1CDBD8DB3DEBED96531426922885005B83D39D401480C2
-5A38158B992389ABFF9567DAC10D4ED00CADE3B8B69FAB0E8B873EF9F2D74FD9
-7D597E9E0FDDFAA60E39B29406D4084319CF68D6E886F781646B5AAA62A3B7AA
-3AB27D7CCC90DF224CD7A5E44740D166F355AAEEDF53B4CBA34E119C6098FCE2
-AF5BF9DA76D2B08F224E1A77007673C78E139304A8BCE38C21B4A9FBA7426833
-EBAAC46A7E3667A17A6684E9C362652B98A5EAF06D040AAEB41D9032E65F1BCC
-108668B04A31E217DFF00BC97E48433D5B3D56415C8DE148ABBCBB6093626DA9
-BE2ED34B7121977FF1191F31A079CC3FD58DD86C9E707AFC21111C6FB65273A4
-109634BC4886C25D71C317634A495FF1743557145F737362B8FEEFED4C4F231E
-BED255AA4022CB77358B1D88E89A9431DC3D28D09DDC916481C16AF44AEB94D3
-A41098A4E76852B63D975A2EF73D38D3714B924BE7BF104AFC213540FD8F0C8A
-CA0E475EA259D0A9B8CAFA377E15547A22626C4AC321BEA264DBC2B90B1F1C9B
-2ECCF142072DE53D41DDDF33B034BBE0EAE3674691E3DD2B1C47E5AA4C14E45C
-EB17EDBBD4573242EE8EE20E0901719F45074BF0FB5BD802FCFB890053D04AFC
-6BC1F29F45364240967EC7C0282200F467248C24E0E84C98FE8A48E3FD5EEDBD
-AFDB87366166CB35EBA1B3B40237EBEB30D3763A8222F5CDAE38303961EBB670
-013034ED410DFAC76D35710542EB127425B72C6AF57124FE44B7403B1B6D0084
-581F93DBEBE7D745E249DDBBD9C66EFA92405B0D6F6C3C4426B608A74D5FD824
-5E2191B88559FF3516ED861C937979916A10E31ACA28BDB1DBC9723086080FA3
-9F51EAC77A2FFCB1B1DDFBE7A9F60D476981EF91C6BE3B44EBC73B10D956E489
-08E3D33B212F5DDF704C663256DE33CDE9F5B496AB777CCFAEAE98618A7549BF
-B99A2008A4307C56CA7EDE662EF177D6134AA3510BC65D07ABBB84E183379A92
-001F96403C36C1BBF8E29DC6D3D0A3D5FB2323FFDB226CDBF6611B5A47E19D42
-757D9A913CCD4F4789E4628942E658D56AC59219152109238C2D5BA83DCF1383
-7C246912923A1B2BE94C59FF0F90C9861F8B76240BDD9DB9690C7178419C82D4
-57927A378385B91F053F3AC241C76BF9A8B82D2AB54D9DCA2335632AACB70BE5
-42C95F45C9608229028D1B30EC9E33AA3A0032B4E27DE9F6805D57F72166BB90
-199FF1935E705DAFED58E479414809E027C175AA68594BBB995E3D4DE2F0E5CB
-DA0DCF4E5DD734FB68CD75DDCF76886CAA5F0159BCD80D026327D973716C1B0E
-ADD57B4DE3DE89E9E5BAECBC73B994C4115DBD51BDD69CC96C26589B56325811
-F2C90FF7F4101FC6AFB7D2D057D6D304A264C1705259BFE151F7CC218D152902
-B9882ABB86FE476460455F2BC4BA77DDAFE36A6E206C4EA4409F29AD197DE5F9
-ABE0F02C8673DF769F386CA30886C6746921F60F98645E317AB07589504BC94A
-1E294F5CBC6D79FEE377DDE16FE24783E7CAF22240508BC19D1B3CFE0396C1D4
-AE60A20FBDA130F26E97FF2D12766950273FE1E0F62D80303C483A3DA022DD75
-DF8B8F035CE89D82A17C063481C0D2AC84FC1F85B48DFC2EEFCED63E0AE6EEEC
-99733208427D4C8FB4BBFD9C16E189F989B0B05A1963179035D0AD785AFF8D6E
-01EB8B95A399DF925CABE4B7C6F8C3B731A8C22D6173D9AA89A86E6989548936
-86D3C16DBFB5A4F91606A7FCB87416D0E739FEC697A2A953DDAFEE08462ABF79
-830613ED1055D4ED0266F1A5CC4242D65A53A5FBDEA2190CBE622C1E206B131B
-DB052E9F330DF6496A6DB5F51C0A98FDBE422743D2E2F4556752040F34ECB36E
-25F94AFBEF1DBDC4E1C29CDC8795203ACFCA8D9E68FE7E2D717CD0F496112C53
-80F07B027A3F4B5953DD2FEE63FCE79D42E5975AC8D22514FF21F53C22F103DC
-9D8C89965A563F10B2DB53EAC3E39C7020C5F72F1A8C507CD08F6E25BA0925E1
-B4412FE92E479BED95C4238CFB5853FD8F9BF2F2EB852E8643AEA49E43D3D2EA
-4AC882D27F0813C946CD47E53904B6788F2398E6C90FB4C4E501F640E7D145F2
-D0F3AB87E46EBFDC939B36ED55F2E83545022AFEEEF8B779C48CB583BBBC7C7E
-A5979EB281FA976D3CE56634EFC2D97FDB2C0A8BF2205C3DFA151392E66AC6F0
-13A47B884B492DBC48EFA6AFDAF32C4C2005763D407105B55DF6CF42A0D3E5C6
-71F0C0A530D50D5199D6F63760DB8366D58DBA5BB566C057C36847F7939ACDF8
-6098ED2A20937FCE73B4B788F12CAC91B55E842929D1F460D38AED1A9EBEE9BC
-EFAE47FBC4CA390BA9BD9CBC6F2BE03A10EA823D8FB337024CDA44621C295569
-449D208C13028AD40AA3E03B100EB8A59F2475B64415782FCA8250B588CE96A2
-0FD879ECF199344EF77C01A22776FC5C2C7AFE5F3E6AC2C3B5AF10912463F866
-0DF436A0F34ADA506692932581008F562424907146EAE3A8CF5106DA0CB29FE6
-34FCB7337741A22D954B7D10DA847C5D21E0310AB853E8F10DFA0164B547A1F8
-021B19A1F68634884B5810E0EB61144A45D1ACE4A7C4F9A9169A672A0F90D489
-19D02C00A5F6D2DE248C814C76F3C77F731D9F5D6C609E1FF64B81675D1D5214
-A7ACAF5803777F32386DDE1662DABAD9283869E9319B3CDACCE58C8E9D9B5B65
-194D92B0DD888AEC7082E23E844D7640A8AF08C6B3E795E2FEEA7136FD137E56
-ACF3A63A3F035C93BDE3FD1F53514BCAE12217117B046FCAB732DD5B71808003
-9519FCA7B9AD901BA54A41BA0295F82DD8E72753C57D4DBB5DDD7BDDF8868288
-70CA2E1E6E760E09DBD6DFF409CE9F87F61C6D234412A50EFDA6B98D92546309
-517F52A1C9C1E398A3DB99B12B5F590A218A76540E2F36CCE555E12B18CBA2A9
-34323F8BC7A1DBFC9DDE24CC31CBE97E7839B47C61459619B00A36BCA49A649A
-1E2EBE5BF6BBA4DD5DBD847278FCFA3B4F22D9E64B361DF3AFD99164FAAA74DD
-C424107F05F524C338056F180D36D410F10B8CDA4DBB37AB79B049A2478C9DB0
-CD0E8C22C02B8CECA74751F2CB725DC729F9171A371503C47DD13464DB19EF0F
-858D75A0904CD81389E43F334C3AC8703BC2889846A1EBBE44604220E9175A68
-0FD28E44AEF1B85C0D48C1921F9F6D4AB8CE9F8AA8958D5FBCEC3389835B0264
-07ACA8D8CEDDC054CB4BEFC1446A6191C6C2DC7DA04975B4DC7AF4BE4FDB8C3D
-7DA8FEC73C63C65397A62C84488745DC5A1C38EAA9AB7216021A279B0D9F5D92
-6B2EBAE5F6C0F63EED02774276B007644D52A1D0B302376A2417F233A400D4D8
-68EE54370C4803FB5341BF408ADD4D8E1932E49087883F5D4E9D009D9B13D4E9
-6C050A465C6E789870455D1FA50D35315CFEFBF31EC8128B3A2614B440EA2165
-7368D99EE33CC2BD4372AEA8109DE68187B6DA97EC0BD3F1E3FB031634CE0D35
-7C9A050954392A93D64927606C832F846DD9420D0D30942AA563FD17AEB9C6A8
-DC903BB60D7D2F0256B6E5C94EA62619E4BCC4E8673F0F14BF127407EFC309A5
-394DED4EF75CEBF13946DA9521E5102418E43C1E8EDE80F1A7B95139F1E81397
-3780A64A77CFFEBEB21A80B6522B4920C65F484119F44934A5121CED9AF3BE8B
-8F6BFFF1180A5B9E49A74412D1B52D8D6D4E5078228DEAA5115A2D9A1F942728
-736CC424EC12DADEF264913EEEE06A7006D23CB4838B0A66858EF0973320BCAF
-627B49CE02556343ACC375E6FE55722B12C8992C290B422409BCB56EB4B7921C
-848A66F9E4D99074E531081DDB99FA83F7FF91EEED3074713E2DE2020550007B
-B63D13C431DCC1796E6C7CB2B7D550B180DE9CF10683842094C99EB0C4987AD3
-38F4DD665D41A5AD9FA72DE8108B2B99065D3C3AFDCF866DE4B5D37564B9407C
-142009B5E495AF0E0FE17FE8EB7F2F67D519528A243ED76D9CB40CC9E69F18D4
-FAA2FB53F1279F48EF60357CA3CB7BEB91F93B06DFCF7C9C121A92C9332B80E0
-6003D277A20E1091C83C4553B8A21245A1D4CFDF653F12B95F8D3E71B1FF9457
-12893834FF808EC2F0ECD53A90C3BC6F7C6C6E5D790AC5B44E64D4C50CAEE526
-83DB5FDD8DC8FD3272DE8098A7BBDD2564B002198E92CDFEF2D0B2F46B44B29C
-BE936CD65E95601067C630921E2274422A7E99A4D12AD1BFF3F28FE2B448FFBF
-FF569FD4D1A5EF0A248EF49AF37FC6DD16A7117C3B3FFE653272BCE3641514EC
-77FA28A9A2FCB9E1D030BB214D97DE21077C9169E28952A9393DC5786AE63281
-AA1C312F9CAED174D8A6232ACE2C22B84F06EC3E5AE4153DBDF43F30488B71A4
-65A783E993B0A449030EAEB1E4088109BE42B57D26B03CB45FF1F11AB70AD1B4
-FCE6F6BE803C9C67369B675BE1198D8500FD66B3CBFB22F7E389E09F53F1F06A
-CFCBE93EC97643C2D39D44D9D115B64A87F2C44657D3A5468F2FB0C622368C27
-3605D02B67C3980904A09FBD3EBD381F21D01AF28AE2F02E5E912CF53C9CCEFC
-7DFB478B06671508EC99F2B3821E04C38AF905B433940C483BC3CCC20A571FB4
-EA0EB10FFD32FE4C5BDB144A9809C6D6E978EBCBD5C1689CD63AAD418FF2EB00
-C07026C402691479BFCEC1C3C9D0EFA023544707BBF0C4F2581EC349C329C8F2
-EC1C185775803127892305355EADC87555C3A5C7C39B88E8D634F6678E66AB4F
-7D6868B5CCAC69AB2F780691329EB50A3A5D0D2D84D2D4340F52CCA827A459A9
-9E52E27FC011C98F02CC13CF1B034603530DA1C61BE456828FDE8F6BD179E3DF
-31D20CF6C2E5C43243E89572B1A13A688984B159B85BABCAA891AFD141E2B4C6
-8A4AB955D06C519844A2AA16F60116668AFABCCEB8026ECA6C5B8401EFE42C28
-26FF175448155F403E56406888563C4CAA16E6BEC75BCC5B1EE5A4F5228A5191
-7A4C66DC74ABC6B947907D770B3302F587295E48916E048A233951FFFAEB38C4
-51D2751FE8D76F8F151E85CBD1411EF20719AD02ABB67763FA408B50A5F161E6
-6FF6E0C7D66D02C7D69B58450C9AD117667A64756125CFDCF8C5E87ACF1BCA88
-F285F1110AED5C105EB4692269716750E611D22CC87659150BDBD816C7945C86
-4CF176404B422F4A332D996C525C81BA60695D7683268516CA298247CDFB8443
-5F59A4742C9947CC3E86452EDA5454650FDE9BD847FF514FC6866D701F504F88
-1EAFAD9864B88B4A94185C738B8CCC7DADFF2DCA7B37E797C632A6E36687410C
-9454EB6AFC522016430BCC3D8109D379B70DDCF9DF5308B6EBFDA5E0FE2DBC0E
-6155E392CA5B7F1DF8B212800AB68A34AF59A84780FB4DA396D1B81AA4D7D1E6
-2A985DAE36862E0F46F7ECCF55D5B5FDF849A3445FB41D260A6C36897ABEDC6F
-81DFE56F96DFF7227EFF86462CDDA3E49A191D07BB154D552341EC1126402062
-0DB07461B3B2021911B417FC2A89EDEE5D3993269DAC7A6DBCEB51468706B12E
-A450153DCAFEC64B75A4ABC010A8109D5A8B6B2126042B908588665A3E08735C
-08D18A82AF444557C62F0CC17161507A46A0C18394F475EEB1CC97477D784546
-1E89D671A4E2457A39F8BECA13B1C3C40C7CC063E38A31A1349C92A7DBC8CD39
-6222232C5CAAE2EEC4818676F8747BA35CCEB287909BFF3468636265206D43C6
-FE79F77DE145BEB6EA506645716B1B2C0EB9989707A04AB4E2A9343D0CC9D3A5
-A295E5337B61E9B20861FD534865E2C21EBE959F323659088E0B969DEAB332AA
-5DE5A8752C9B94B388893F2B4E31DF3092F28E4DC3B8BF395B9683A5200E9F5E
-71C3076DDF1BFB6E43B5F6CB723BF555667DEA7B9A721DD41CF7B4AB95FC6476
-C8F8C3E295227651F7114B9582D10D886F83CC18102FA95137673F99E2E57D78
-9FE74CE4D3195E251E6347066FDE3CFEBC2D853997E467739E2B012DD1F8EFCF
-81F5567AAF667748448E815A08A3ABCE31322D1E87AB3F81C3B7BE8A5C4FE989
-1FB99A0E8DF0D3623F0AC0CC6FEEAB56021F4178849451EBD965EACCF1BFFA89
-B8AB1D92AC2ED3C8780D99A204CAEFBC4B730A9F510299E78790886DC7773E88
-9E7D8B1CEF34CE0A77AED44AAA3E3047064AAFC787041B45AD23554A9C300C46
-7177FC5976757D567D43337D9218AFA47FA00856CD05A14940A3C8B8178C2D06
-ACCC1995E035B98100C89B97220490DF8DABDB77591D5ABD2AF5D10D7474391B
-4B9CC1FFC1B4D9D5C2CF01842D734A727AB551CC08D5C7C90BC2BD8E9A38DCF8
-7495E860AB1F8F81B66C38891CD29C05848A220BA1E0595EC503AF941D1FF94C
-7FA2A0F1FAFBA1A4ADC36A2B3F145C1328A9D0772824357EA2BC8433E42EFFB6
-3990C948397C3D68A11390DA02E774BCFE140E1030C659141C8BB01399F2BD00
-1B96A1CC69F77DF652F68260CEC5B7452C6ED6CCEAF4B120C345650AEFE91700
-C5459550F514380FAD5F0BBA2508C5EB5496363271FE69D649D89A37E9BD04B1
-01432B15DA2AB82CD45D1F086A598E51823E227A745E701C10D7536FD61523E9
-BDED60BBA0EB265F94EB050C045BDD437548EC12B2F46CCC6F543F224644521B
-C7860AF607CF90C134233DF6AA783280B26E5D3BFEB682D3FEEBA0D2665A8337
-475E92C4D98A3B1A3B02F02B17F5DCB550C23947DA98661DBE02A44D03568C9C
-D6B7B96C8BE08FF89DD682B519534D177597CE791172EABC384292E5A1A55078
-DEEA6F352521DE269B40E67D127190B03A1825A882ECC28EBCDF85C78EE0ECCB
-5B9E63DA9FE68A90FF751677EFEC3821BF5184633AFF49178845495A91EB364E
-B1BC1BF93B7A062F018D76D276D4DA317FAA08D4B9A390C8ED7BFB34B2D515F0
-7416402669F4E7E6C4FC90DCB3D0F473648A9C8B172AE87B02C037AA31AE6152
-B73600B468D174CF249E407DB07D0D6220F6065B0CE421267FE06ED007A771C3
-0402B2F981FED37CD212FE893F689AB6373B7EED4DE64B2E867326AF8FBA8AE3
-692EFED1BF9DF46951D5F513F9942679CE7E9A17C620987B975ADE400C9808F4
-35726DE4FAAA1C676B0C83C52E7A027EF9AEC383BC1EDFE71F2D29FBC0B20EAE
-911B7E114124552A44EABCE4EB77A6FA41F1C2BCC8D8A39E5C337B6622A7B57B
-91596504B001F60804921E7C32D38D89124DB7109FC2C4FDC9A25D23ED6B3D78
-255C0E155CFABD8EAF060E8235DE285B9D6055E41C9AB269063B65B2445A6C8F
-73F992135378DFC36CD17589D1157AE2C76C6180FAFFDFEE25541B63F13F170E
-034902C00D6F155D77D7FA27E2C2BA9B579225D032B5BAD19242C976DD0DE208
-2E68FFDACE8DB27CC964A3280452E7EA9E2BCB592D6D2C8D3B3D79F1C8BC3978
-3715E110955004751B83E460D40E7729103AFFD778CABD829CC3048E25510A11
-2DB1879A99BCC146EADF5329079E8F13753CD057CFAE3376E35D5115B0F239DA
-3E024673C3240379D923AD6BB2219772E80CB027CE53C89373EF7ACFE38EF9DB
-61F8BB731AEA052D586DB8258DA7B9920FED3E4C834CD5EBA4261C4072A94184
-59246717250A9A74AAC7899122CB890A0F713B16E2D86BE0AFDD1D4DAEDEC5D2
-ADFB093E29E56DD2A80774BC0F3046E90751D4C59033E34A6E952F617BDAB8DA
-8DB611F32B0B15C9D7D407CAB63A14F04BFDB5EFB63EBAC3A8B69C4E22F7BC02
-9AA197F929A547C293F2ED65ED10B6270300FEDFB21000B1971B7CE06BEEFF27
-66BC049704FBB0254F2742D78EE8290E8A5DD5281EA1597C945D21A231DCCC7E
-4FD43005C57CD36AE310789AAE39BC3CC1A7AC9BC008C291911699DE6E1C2DA0
-B61EA2C6BCEC2F9B547C025837D6B2C90C22F2F992644F803C1DB5591DFE1C9F
-3E92EF348ACE485C11D9A9B082DA6CF912FB5AF73AEA2DAE1BAC6397F21F230C
-92A59DC9EFF4902804E6BE7FB18077227774EC29CDA427091617D12B718BCD64
-9FC339926A2D87C6FAA103CE20078883FC7FE0D3C8E5239DEA54A2D302D788D3
-7AF944D9B59B7BF52648A4C931DD9AA381406672B7DA8F7FAF429692FAD2CD95
-519CD8130239484D4EA1F011588A81946BD7CB413E9379E8657982C714C3F1C4
-E4702EF88446BA8ED439B45693A4DBA81E1D12F51275434C5BC8239D4ED8AB38
-9C1D7903EF56F62E101209C1146EA97F7A9BE7BA458F6E90EEF62B9EE7F4B50B
-742A8E80E29EE926188A8AC8CF1A9B0B1C4613A50F9E5AEEFB3ACE2E1DB154E3
-9412698E054AD73B611F110770DB58470ABD8C6A9E253820FE83098CBB2B9621
-CB6D9CC62F97013A68D7F7F51DAFAF6123580EE28939A913766661A31CC33D41
-D30695DBEC32BC0E9CF9C1CC5A61A6D91228BB1C344EE0945EFE6F1E28AF9D60
-3286FF60A724CD3F2F328594DF427BE835C33BE6A410DAB31A2BFDD3CA0737F3
-72B2022A449B28847F41985FB2CC3ED5DDB440927FB8E6C7B43A476429674279
-A044F4225D1388B2BDE8577546F059FA7F995F43956C072B022CBF9BF329C202
-1685F7C63A7E231CAAFB68981DDD796B0ADA0AA83A1F4984D2D1823141865D70
-0641CB24250EBF0B8E62D60409268DDAD6516C0A6B388C4D2E1167ECDE17482C
-19A8594829DDBA8226E1CC0183D82160CCCB52BC2224C1A6DDF4396A7BB3B3D3
-A68E50C5203151E90F853843CE73DF045A9ACA162F72988DBAFBCEE6E1B1B895
-8DE44B802A52EA92286C9C768EF7C6D8232E2868F996DD98CB2F3408015A5BB0
-8F3A22DDDF5D3485CF883DD0477E80191808E76CB4AAD9A4C3478913BF17C5CD
-34365B7E440A9A0BE07A6CE91A0040719CFAC12ACD31A0611CC567107F1DE5BC
-CFB02E943F6B972C57D6F9F7B306E6ACF0D59AEB788E3B57B1E705E49239EA23
-5A9F11AD1260B80284F988AB7AF8FB0A699F1381BEC667BA8E9EDDC807560FC2
-65E08501EC786C946D5B0D324532F7EA2FB33EC0BB2E2EF84020A6975564DA27
-B679B54219E224E9A65E09B5C289E58BF748FE1D32D4D751484C252CC6FDF193
-0CA498DE4A747EC17678E1D1D4DDB6DE365E712822BAB428FC4D5CB0DD34CD8C
-D9AD902B5858BC574B8774E278E0D45E205E6829E4738D8120C1ACB8383347B5
-7B55D27CF1F8872E06017A7E62C7EB2BD0643587AF29FC3324EEC192196CBF33
-6FE4DD8CD83240F94CC7AC45832BAC58462AA469D195D987D741105B5861AC3B
-EDE19D35680553A33A3944917DAE1A38011E5352E235551D227174C29C4487A0
-5F64DE647D3160ACF30A4D78660C2C00ECCDEDC2AF695C1C7D3FCAA68172481A
-CC6D8DAE26E5AAA3F2B52C04513C4FDA5BD658939E90795BADC3CE44CAAFBAB7
-972D9880BBD9B910F33EC4B8CB86A850635E972A9414E319BB9B327C86532275
-4F7717C999070ED9E6A24EFD2B6494CCCED711EE769C835FA077018C6CE83355
-D5628CB19CF27A09AB5DE60F4D099D1703981407B116C1A736588E71104A11D0
-9695548F1A157D0BB890080F76DD12BA4FB8B8B67383EC9A8764CBED60BBB333
-96276BA0555697223E80ED9F9688788F840900808680C1865FD281F3DCBAD383
-12E920AC49826DA6E0A733374EAD25767DC8A32423505E32B277C8B41CA6898B
-B350E225F43F842262851CCB0BA893BFD81FB440C1E67CF0AD751F1482DEEB74
-F5B4E24FC1E4E4B9C907067DCBF66D2608813092E155F1B9F469CF29013382DE
-BB61D28137A91937BDB6821068814B22473CFFB5F97123ADCD6F39545F59120A
-ED18FBC3222B8A6C4780DA0398AE308FE654FEC978B646912B35EDC8939B7DCD
-F7995199261746C1C4A5A1F4CD031F2C2F15F6887CC0914D185913E3021C995C
-CBB112F46C3E08CF328BB928BFA4543E8BCAF867036BE24B894433754CA06242
-5C52429B475EC45E8611CF03332ABA62DAE7D8EE31E8F9B0690C0E367BF7B013
-940B8AC8D40FCF6D2D2499464AB0D2C16BB6DC0F53C87C115E37178E46E7DB8D
-AE16C117AD668CB7A5F558BCD58628B56CACBF6598CA8B2B90950D8C4B3BF3ED
-4E9F003631BB68B0354C98BDE0811DE1718B0563F02A68C555BE4B3CE2E54BE4
-CA04D230E5F18A7E63EFA5B5D6B3FB1210B6BCD12E9BE069376BE5FED9E60684
-78B73FE4D212044ACE582FD96AB6F1D651815CDB1F6EB6194A82E8840EBF574D
-E7425C4638ED7A79D04F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 53 /five put
-dup 58 /colon put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
-21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
-06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
-55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
-B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
-0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
-1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
-7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
-7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
-356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
-19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
-C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
-244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
-AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
-5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
-D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
-993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
-2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
-E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
-309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
-F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7
-E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66
-AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9
-17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3
-05965AA02B8A67AEB04D915DADC1B84A531A1D672AAA06E9F720BA88419A3183
-63D1F9A3BEF8CB2E23CD1F9C003BD7849F093D3B4C83C153A5A790C1F9E37948
-5799C02F004C61A6FFDEAA1F9AE884DDD40DEB1539CFE3C3BE03C7C33CB54D56
-2C2A0F467049797B56D407AA43EE6B8C3F978A7D945A80BF711C12D6BFFA3DED
-35FA8B22E68BBE4FEC5EF5705D30044C578A6F8113AD90DF6EB8C75B8CC7F74F
-CA551C3D4943F2E82A9FEC069BF6CB92D44DA5D5715D4E11DF8F0F44C9504509
-2104847DECF36C46182AA495C81E880C4B3B31654105A8B1117596CCD7B57420
-43C7EC42014311F62536A94E3AC36FA69C5CD12AD86D421943FD84B1FE313B56
-C52135435BBF0BDBBD42C4EAB939DE326B3EE850D20739DBDF95864B878232A3
-8CDE2C581228E40C9F2B38A70B5E538452F06C402DDCC8194FF07D468466588D
-189DC6A34F5AE97D662E14A879DA6066DFF2282C04425CD1B5E4D90A8144366F
-D56442D3914F2483BC63C43293401A1B92B68429E3DA46191B8A5729BA64A4C8
-11D18F857CCAA49EAB20A91B5716716AE921D4C0A197E77E65E1D4D5AABF13D8
-C05D460941502A9AB47BDD89CA3E6B582EE3CCA9B6BFE3B48208269053F0591F
-533FBD31B92B658F94219FB950E13FEC1008FBE66F39C5EFBC30608EB2B2A11B
-9791D2FBDD0C316D99F578E39C367BE576ECE3E0CD61468EC6D2544A94035BE1
-2890162C477F5E059C445BD45994913282F9F11AB090EF24AF388685B4871293
-E36A1DCF7E5398D626AD9A4A8559B084B995A62AE8A9B7B5DF602DB6A85C3398
-A6658B86546DEEEF6146143C36257E7760BBD96A72470FCF10C5B01F26B9B86E
-4FDDC09ED0FF824532BB3BBB49EE5B74029F05D41B178E184A368A4B1B781E05
-9B3B348A2DADC1FFBE38F0855722BED498D5217C05E96B38627F82736FCB8D6E
-59E20D47DDE56549E6982EEF065F78D065079400E0739191D137C64F892AD3AB
-CEAECB677905CCEC5F4481C0AB5B5C74DBF993ED88BD91D11BF65EAA9DEDA1A4
-3620A127D565E792DE8BBB741D3C268AF2D4A7F8EF075C8C39925076F6573923
-B8BB096262C7EC3CBDE660B450714AE762FC521A6E536A5C01DD4D4924DE1E9A
-EDDE18CB08BDD0C6CDB1152FB2FD0FF7EB169453375D6839307D89B14C6B8E62
-831C8556A4D8FEB34E1DD59CAB008D9A086F81E2DCD3CEDCC8301B10D156FAA5
-0D8784C19780F7B658A3A5A2FA999DA55DC0D5E185CCACC86F740A82B336E35B
-72E27CFA90FA8E3A727692838135C4E0D37CB242A37F8BF7C5750BDBDD4F3B80
-0D9FC29366FB3B3CD7F0BB1F29EF70577AB9F9A0432445CBB3A417B05B596C6B
-4FE97D1EF0F0946E777E57948C75828BD8A2A4BB5396623A56EAF8A2C509CA2C
-57C065E3322D49ADB129AD0F891FD0EEAF1F9038E7104869C4529A9FADBABBD3
-3722F039CAA9F1AC9EC6E7CCD1A3FDC26FC646AC8D3288AA5C332D3D1F0EE2DF
-79FE4F56DC98BAD583C6EF3FF7543FC0477054750076C42CA4A204F7BD84A5CD
-DBE98E2A645D3C930552F3DFC7137A2AB42748B6731D0805430E4583E8189887
-7F15C1CB2AC969E857CC5B6CF8270010761713F0EAE7D1A8E8D0A667B77289C2
-097DF758B42BACB5B7627DF6B65373D785C9A5D040E9CF0D1E479CCE31DC538C
-68C49AA43DF71AF4FEE494E841832AA7ED423F9B3251B72550A4D5B3D91BE1E6
-4FE2141070AD51F3090E2091E91398B293F353DC20975EFFD8FA6F03F13EFFC3
-5BD73D0BAC92EED1F842718FC1351E1E0781177C8560875002448F64171094F1
-DB49C1CC01AD89B1E2850ECA4510AE82472E771F80B033A569A54E741DAD2C98
-D10B02F34434CBDB3906B8E5EDE6A4CEA27BF5BE3E907C1DB5A8D2A43F3D64DE
-D01FDC8228C477407A37B794766B432151FB1284B39CA17BA8FB624F8774ADF1
-32364D99270F11F9EC9EE79B485EDEC9D8CF1AA6A18C8BEEAD8AA3094036B52A
-E9DDC96ADAFABCC1FBD1BDACFFE16CF84C4F7EEF0DB0DC261A9EEF467516E300
-9A75FE5924966DC75599BB8FCBA5B17C9287BD10BDF21909733B05BE2A252210
-E2428C5C94033DEE1EAA629FE975D2C85A3A395A94D90DF6594CED3E34819855
-79BEA9F3BA4DAB951AA2AA139510A1376F7E3AFD61AD7B1CFB835B4156D7580D
-4AB3F69C818657FCD2F80D3A211C87EA29EF06BC4BBD20FC3CCDF16490A29AAC
-42A412B25929C1791A32B627B24F0673E652FD25C2E615554A7249737D93FD73
-072E9CB361102633CB1CBA9D2F729D98A0FD5C2EFF04AD11BC4697CA6C7F537D
-12C6D4594AEF4D2A8DEC58B5CE59DFD1A328C43B0A8B3926EC1D0257E2103ECD
-4B99931B84B22EF16BCE9C9AC3A366A826016315677F91662EEF414966544677
-A54DEE08D6468607FC8D7BDF30F566D7BD3714D4480AA6480B0C1361AB2733A5
-94377CF3A49C80E9F7A783B6DC10F4AB0AFFD8FF246F5B31DE45AD7E79E4B365
-4DD45A7929B260E7FE3D0117DCD8BDCFEAA6C0567B946060EDC38399419A0ED8
-01DE1A3345CD2F7BF016A03E3DD0B608FA2F9F6C393ED5EDF75F0EA1DA3D9A4D
-A5B7426D39805C1C4E2D912368E8AF7BEFE1599B918343A105BD43BC72454E62
-0B42DD19F2FBFB6759D5996770D86C9E29CC910997A4513C4483CD6E6D168AF9
-C642825E0A92A8B9A762A544FFBCE7CE7E20322FA5376B488B738A2CB97223C1
-045FC1BF628382F93C93C4A989E224AF0AB255B43384BDFBB0251AB456343764
-2B706FB3713F52D5B2F8703D2E3ED423F2DB04F2DA1B32C8DA7ADA4B3B821304
-F6D387297E5C889CD9A577E7C6E15E991C643CF9E4EC6F4845BBF09FEA8B4203
-15D6AB38BF43F5F8D8348EC5BBD438B67AEB5EFD1E69816151099752BE986358
-B6619A28FA7E64E26DF40F3BEFFFA6F1637DC35BC303C3816EAA7147210E067B
-182CC3FCF4CA559DF3CC1B378534F56A77FE1AD96C91ED38133F64322299C66D
-7ED5480A4628040088D1D593B880A7FE2D5F1148C9982697D14C848921E6E80B
-66FC022C15B75271ABC2448FA1F970FE92AB870601F7EF423058AE75CA3F567D
-8EEFC277DD60A9F98C0C6CC3B087BCBF968627FA653A27A31CA3ACDBFB949FDC
-A37E637D72FEABE5DEC8B44B8B391192EEC59550E83DB4A1276837679A412E3C
-9705EA895DD6E69391B50AE036FF691FC151BD30FC310F8B5FB4AEF4658F1B57
-0FF9C61AE902E200BFCEC8617768E53E7AE447637869BCEA90077AFDA038C141
-61232C9DDB3C1366B126B8A73BEDD5D55A2C86C9D4860752AEED234EE0E09E3C
-A3E8A57504AD52081B83C5FEBD96A5EF9C44F632F136D8361B2A47889656C3BF
-EDA3DA7A3388B32688DCE391FD533EAC4D0EE4F3AEF88C4B0F67C5A2094E6CCA
-90892C6B42F18526B28358A18803B981EC5B7B0C6501096F6E98DD09B2743799
-054D9A8F2124F7D01E8E2D1ACD5F9031B659BAA496307720CF56C190B0373DDE
-40568DE8E3B0A292FE75EE1F75B9364FAF23E3B331190D7FA990AAB9CACC3BA2
-9DC6465E4A6E5C61273C9D2BC0C4066CC78A28E6DA8CFBFDF2215BB582E4D432
-27EBC4168C41752233B2206024F45BE5BBAC62C2F7C08210858E351CA53B1968
-4B342D7532F59C7A7B16D2851640E202054036BC4BE42FB656E8DF2BA6DB58AB
-3D327CA88195886BB2E27E20F7369AEA3B0E8D00BF503F26837F0794F468BC92
-E0E1846FF355540AD183A78EA48803DA87D1038357023039D3E022E2BACA4987
-09B3CC68C95F0F0199A4EDB259BC93FBA809B2AD7D073155BC59D010253D6271
-6ED2D4305135BBBD0D813F343A95CA1C895B9B0065605C2A249FF40C9B99A77D
-A3E572C6EDC3D279D6F87BE29D23AD6DECCE4B61EA5D84EAE0280231A4601E5B
-C0A87899AF034AED4A8472BA331F645CAF9723018081C577FAE27341F76B86AF
-DAD33653C43094932475B4A1ABE9175EEA91757EBEF5CC72E93A9B1B19DDD313
-4A7659D1A66A170C2E8B3FFD21F3580E475855EE55C77B88B7F5522511539754
-4F446B448883D25878F128B50EC3AC6BF66F903E0D34DCA8949F9BA384B53ECF
-FD8E63F8744685B6472B0E199FA345F918E7499E196AC9372036C2280945C8BB
-0BA3AA6859A74576C4DFFA12FB6309D4CDA1E7B9580285A85E6B9A1253962319
-711891CE9B624316C615B6D8058632C0024B78F4A503CDA9E16F046439113130
-80B0B8EF7DF44C846620C75C4FA4C00B5B5D31FD5901839A873D7FC479A3820F
-4A2405B91058F48C910A98918362D2DEC0F14F105CAA188CF411226808CBA599
-2F538973AF7A2F22A7AB27A6D9AB101F267BA63D7AD0085E6C596EAFAA92CBC7
-42E9A7E92482F1C75B7DB7DDB5B970D06A93A509FDDC729B9CA65AFDEB31660D
-86E735CC34714F38C9C26BD83DD67F777B3E9955DB2B4103C790DB4C38007859
-8557F7770520D40E70C2DBB4C39AAFF9C2EDBF8F8A8CC61069C04C0F6EED839B
-FD1A67501E5251A44C99435ACF9E0439C0FFA976B281C044AC92694F4D9E356A
-A6559171D6805B1700FE709BB995D5C4ABE67701482F1A1CD01279E44047DFA0
-199B75516635CF72D8392E306F90B2206557D982142F6F948A33E67F63806FA2
-8AF3B281AA4F1F2ADC9FBA41BB4DD12C6221535A9986D0A4DD01F905DEC55768
-6D0F4D1503EB5337229065C90BB1164D6F798FF010C9E462C94EE5CAD027DA90
-40EC569FB17FF6052CAF415CDC7A56D5C249A4BF3F2AE597910F65F4DF4DFD04
-80618EFD4D2D3811FC6CEA00F860DCB9B9217B7D7FEBCF9021B87ADAE185AF6F
-1F0E4442006F96FFD298D4C4536AB2DD638B0F77077F1141B4FE8DC82816EC7C
-105DA69518233DF23DAB07FACD2EE9FAD9D99B57922CE84278AE9503936E3D32
-2B1062EAFB3170D4E170C47A967FD2CC198ECFB822A1123D2E201ED1428CBA99
-9F2525A643AC0AEF1CF07E9F024DB058FA4B6433CD118DF1FE1F1DD6DBDA075A
-85F123D47577FE432B7CB2E0682E6F85334CBEABEAF12C0BECDDA0C76EF5491E
-26D6F92DE2A64DDE1A9C6485F1B3F2D3495FA84D58DE993E6D8A046E6B258588
-A461CC7A59478C00296A5BC560B8FEE758CBACA73AEE85F6FC4F38964E5E9B26
-401C0005768187B2640C2C994C9936382A0F1DA05720B855015E9B264EDEF3B8
-FAE24A08FDDA849CE3C24ED7595B1E683D0568B0B536A9428337D2D8F64A3289
-813ED299261A4932C41F86E8F8A39F91F94FCC633DBCEE9125CD8214937F1318
-41A2753D38A984E58FE917D88A415C3AF7EA2CCEF7E61F6F39C985EAA9C2B499
-A7440E84D85E2F0A2EA4079DF0457328E612F87CFAC3080D861F3DA636A0B03E
-DD74CFCFAEDE202B1F6C07CCE2EEFA23A849D807972E0FAB2C9D62BDA90A37F8
-2511F0DF42130103753DD7E2F1C38ABDCB8D1B2E03FCD57B203B62E0B07C2F15
-03BBEF5C805558831B0E20F7FEDA19E08DAE3F90B084258D0DCFFD4EA5567681
-56C7303C22DF26539C09422B95E231DE3EF87BFFB0989951F42387B5BD13585F
-C147240807229724EA2C014790D65EFF9BDA018BFFB118E363D2B2A227F3A807
-D5F4F35CB4602BE765EAD02A6CF8E5AD1985B289FE798B245BB0D645B9A57BB8
-F649FBAC821816A5A3B6E5D62BD871200C7AFD61DD977657FECEC18F70C20BCB
-76C645BB5D63352077998D3BA6669D24865346965043E5487DC995051B0418DD
-DA06FB724347B51B96DA9C901C9B02B18DD7D24090E0EC2C20E4034B0E103863
-21752CCB19C1CD30FEF03D9854B5A5E3CCBBB015F71C1B4628D5FBB3E9222CE7
-ED14334052D222E7C9A80FF01D72349105C2E437EC559BAFE1492F2A60BB6B88
-58CE3070A121DCC8371E2155FE6B6FC5703E6F0206DC8899A5E2A9C63240DED6
-754A2CC9455791E28798002BD95735219BEAB462F710868023357D752E9B93C7
-A8546377B1C53158F214DE4FEBFBBC98FD465CF08CF70D2C5795F382C01FFFE2
-E0E4F908585F630C2783196D4B1B1882F9D80E472FECF6F16195E0C3827D808C
-73155EF1DF117088C6ABDBE3427B81649DDC0D08B02325306228FC8A6896EB2E
-850C87B0A98F2F3BA4B4B70517E42B162ABB22DDC7201A8E98A1806FC742EFCB
-2C980CAFD1DDDCD23BA5947EB56DC19819F1ED123053EA0ABB4B19886527F3D4
-0EB5D6EF3321438259A1A5888987D804F5A45D7F0D2A39E1D8E54E884360C407
-80CA559041F5AC88350829A25A35DB91011F5F07854247E5BD09DE183A43A599
-75B8A381AC752FD009B05E43FF7AF3D64FD4E1E3E58BE177C5B3DB2CEF18684D
-2915B205A95076151790A4EB5C375FCF33270BCB5FC068FB13AAB159A08AADC4
-1A42A5F603A1E3D062974091B5E37EA7B487059932367780B677D80C2601201E
-90AB3E35CC154D06D9AEA6AD8FFD21327FF4C22D0E62897E5246A304D1345EF3
-CEFB49D8354DC8B8ABB30467771E768BA46A7954EA6127193BB94B1DF2981853
-B4883ABAE331EC4D7588B296154700605575C649D48C5B15C887FE6D290929FC
-5BF11B15DA974E4536136B21A2C89D34C86CBA247620657DC75893BAB6F7F9FD
-A72AF57D53B7CFA122EE5F0BC1554CF8B0BF5A5C94132087C5BE0F02381FCE43
-FECF253A5D7313E8BBEEBC418A588AE65306F27CFB0F852EEED51E2CCF02F6BE
-1C06E8C0575CD36A9712D54320C44266241A3554198F0EB830CA48A843C38140
-56E6E13F86A6C37DC5045ABC9D453CD3C1A9876E87E5896BEB5FDE3A8E61FC7D
-27436A72D8BCADDA81F0538705EE1463D470F8D9E25CD186DD10ABE5290956AC
-6F3DF1F23764DBD104CA70422C9F31DA1A568FFB34750574FB2D3216EB96B773
-9BEFE7E455AC2E57D9D86F79CCA12D1973219650018BB3D32F46A17E7AE81D9C
-E021FD5176868329BFC033204CB93C84C6C77237CD65513B0F9221F3B474BC72
-B9754376DD45C87FD87BAA895C4E8D789EE7F56FFDD54BE622DAA72E65C3F1DE
-642453BA57161EBF837055347CE8A0749AA5AE5B1DF01C60987DADD3B2F8A334
-2564DF7F6CA6444292E2696C9D18D58DA38EC015EBCC62F45D5AF69CFCFB6017
-AB9CD079C571B24F6C3B28F028D2DDE13C3D81679C954A5CB1452BCB1D841FAB
-93F6237B9FBF2787AF369AD77AB4E316A93EDCD10C0B7BD70DA6F777100B6C20
-0452C1AA759EAB3368557DB8283C7E31B488B623D267355E57BC6C20AB54983C
-48F9A7E48BE64FCCC78FAA027D1BA2A851FC8068697BBC177F178E02BAA3CB88
-EAFDF6B5B008EE76911424BA7E8EA2B3978CC2A40E6E5D7D42F832BAE6C41C7A
-BC05AA2B877F5A2FA28B98B8F0390228F7281F75DB984A4F3B4343EEA2D5C4FB
-3642A0FE69A37E099F05B1E0579772F0BABECECF9477ACEE42A4CE66C189FB8F
-2C27078353CC2DA831B50135D18ADE3C64F2969D362A71C09E97291FE1E5012D
-DDCCAA835C16BCAC47F24C3729066F2F61F8DDB46A69941E0A56B0E49644D6F4
-7DA9D51A362152CEDB349680C8E6E3EC16111C133AD90E6D0D0F70E87F21F0CB
-388389C0D94D9FA57E7D32C907D77B1D3DD1AB9BB9212B97B3F27AA99DD6EF47
-FD8D13660D1C96F10457EEA4F24EDFC1FF46D0B1EF5BDB8A2E993A54E10AA59F
-5492C962FA89462DC7DACE0E126EAB9D1604DE20EABD3C776168A995B5FE95DE
-BC8FD018BB4CFB1E45ABDE4D0AE13AC4427585DA4698DDD40ED922A4EDA2A857
-F2A4CD3CB1E2990BC733118AF61817A5A7189B1ADFC188D255E6DFF1D9AC517E
-9D89A5A4DC745DE13AC6880CAFAD86E26516D4399FA94491B62776D30B830032
-14A5090CEB39363B0FC91CBC76CF031794990C6823A8833DD323CFD93EC39618
-C0495EFC97D150794299509C865D37311579AA722F73A044EA9E33B0A393EF1F
-0160FA1D86549F255C0F123850AE1DAD749D3C0656C48C708F89D51D5E5A1707
-A91A22361017884A87C0422B824C7262237C11BDEE0D0F81E9C9481D98DF5BB6
-707F084C0ABF02249A62DFB067FA0E47184423ACF4FB6E96AA9DE89DE2F999DB
-BB492377427B152971471BA28574A07E39759F82D03D378843A71472CF2D9282
-A06DADE6DED489F80C7C11B3BDEE2ED7168E009A9B076C6192170F6B5068EC11
-3BF227F90DBFC59AB45499DB8F793E07398D04FA5C968BA9A70BCA76C67741CB
-574C35C13217D92444EFCC36A8116030DB08EBAFCA2D09923D9D0607BEE377E7
-A4011C552A79FDA336A7A40776AF0FA62418AE04696625A4E125177450919F4D
-477705E429989BB3E5BF0BAEFAB7A26B7B7A3A3444EC6E7A4F120F0950764403
-CA3D291F956728C19CCA09ECCEC7F52B5371445D5BCFBF4705A29E4EF4409C66
-5266031B54B09EBE288B7DDE6F33B34B5576B30BC8FB8EC9B9B6F448EBF96FCF
-0E1450B5EDD24D37B13FA57580533DE4D6DEDBF1D3033EA9FB9646BC445C23D9
-877D0EC27A5C3CBC4B70DC75556FB067BF53B505ED5E4DEF0B17B452455C3B31
-F5794B6C4B1C6F9722F5A23DE0159AC9A249C5CC0A6261677EDF386A428E3DCA
-C5EB5490DF67D135537681A427EA5145A2412EB8BF587E3F8A5A27B2EA8AE357
-7380662C22E4B917834ED0992440DCC98E0E6563F0F9351F1EA1DCBB0C7CF358
-A579E617AF83AF0E55F8BADBC0AF9BFD6407C255997EE38A0F851FC65A400296
-A891C3F7E59523FFD362FD725217EFD131B27B113D059512A3D3410376BC276D
-3D2B5E3CB92EB41D9A95126547ED25A3CADF508B36B8B98704980A66F04F4BA2
-A00429ACD555DE1B47A4F508B1BF985951C3D5097D1D411D8643E5D060A72525
-3670342121FBB0E287F63A64C00A9D4E09F82D5635B4D2A126B218289F8C94CB
-A5D6563C99BC2EDF150644DBA1809435FEFE4076987F9024F2B5847AB7A53616
-17082F6FA8A7974371431987DAF519328655173E5C622DD3A806F07E9A954267
-18F575A9A0EBBB5910A8DBE810D6A7A4BE756A261D6E148B626DAEA5BE156A92
-704FC56424D0A3DF187C6FE2C7D8E36CD9BB39BF603C3BC86BB107F728A8BA75
-D4847F67D435380CC252F25D4FB1EE51B3A558110A1CB869D1D3EB4E4D433F19
-8D5E44995C178FC0CE624377DDB3D3081237412885F3E621E26989147E4BD51A
-25A1BECD4D5AA7F7C4844B523162B8A6B4F9A756055E8E93A91E501DE568FF51
-BB697A2B8014C56401E479D6927133FF767D7E47C90BEDC5C10647234FF73294
-CEA62D3DF3D860B30BD1DAF07AB71B2C050A79D9A3C244A2E9FEA6A39A79DBAE
-9376742B3C103CC420A7B95D30E992BC2B4B4771CA8D26BB909D656DDA661960
-621157D89D1942CB49530C187D9251BBEC7AC5FFF012090196AC474B5F2F4608
-EC43E3C0805B0B1279963C206E7CAA09EBAADBC5B4F2BD6D0E80BAC7D348C5E4
-D778B082FAB1D7521CE35CE99C44346DA3F0D57F4071DCB73EDF4F8FE3F3A4C1
-76B8196A9C8725C7730564727375388AE12FD27535CC0480763D5C59B8BC2391
-01F6977E8EE36ECE7A2BE64D47F7FD6E0A9A5DA9175C7C9EF4A46673DBC4F8C5
-2B0EEAD552132BA6A064237061CC6F29DE10DB1A800EF33D45EDEE7AE6F8CFBD
-56CDEDD0C4895E72D4074A1CB8DEC529E1BDF21CD4A70216012D0FE95FF258CF
-32649C9853154D18F8997481409FDC38D1F2FD0644DB0016EEF689924831A809
-46AC416D0A658D346D77C2410C1A3141AB5D5FD22424769C6CA73CA93A3CED15
-D4A11761DD47854325E5F636C1089B5F39F352E812617196E3C9E268AEF94722
-988F9582A40DAAE15E3FAD1D4F9FBEBC4AEC3BA444A3A6823FB701D2534F53F4
-A3C3C69EE88349CFBF9F58A9D8D1DE1070A27CFA23752D260D1EBD8F1985299A
-31AE5C701856B7C4E5B83F13DB88945F2F53019CEB666DF7B29AAF156D8AF851
-8E0BA3410AFF970EA4300DB62DF6D323EF9B9F7FB4B59B3AB242199439613EAE
-4DAC517A4EB3F56993DF75A0EB1FBE491C50BD275F5DE105BA0275DA53706675
-D6F10B82E5E0E8BD6FBE52E497EE90D4399995241BE0300AA6E251DB081B7B21
-EB7C33B7B7A2BE5BF2B3EE597782AC09412C8028E152463D3EABE456A392F0B2
-80FA35D01BF7936741CC2F8287A7EE23A155F9B1937C764CBDA5927EC5FAE6E5
-6F3C48981220E11A777253AAF382DB5637A243D3E83A5D3853BD87D83203EB3A
-ADE95F0413692DDB6240FD858DFBD66EC1EA1D95CB8066B5A26EC0F6D38630DE
-64A1038EFBFE794DF0145D45B2E6BE46AA4B08E917B486193666AC3F966A13B2
-9F98C10CB104834E75E9DE8F51B18B48292FB1C7BB5167FE2E3B6ACDA2A1DE48
-F928FCEC6EFCB7629C250C30057DAB2380E5694BD4A6C30C90D7D77E1F8B5E84
-51471338DCA6E93CE3A4F08716E8594F3892AC22A6236224843CDC9D9885A523
-6B21A90D7742D7DC612BBA313DFEAFC5E97265D1B34218B6F05CD14AA08E4181
-0657CC147984600E11DC9138B2A830442BA6D65AFF07483FA6191FD343856DA3
-DF8A85BDAA81ACA55D8C698FC2C4DABAE3F1228D43395B81B2736EF8D70E35FA
-0B9E9E4D784E60207421FF079F25E3AC579265783BAEB950C2ABEA38581B150E
-24889433640AE0960D4F1BEA54232C4BD31AAA6914094C1BFF4156B24857A344
-50A82AE7EFE8BF55E4BA03725D91827A25DAB25768AC40C65DA0DB13DE588344
-09125F1982E7F986CDD0F81B82A18EC5B8BF5E630994E7C41E85FA106CBEBADA
-673F9A42352A1065DAD3427360F27070AB58BED9F281335D6293E23440D5E9A9
-C0A2CF28F2C83B01AF7E09218944031BCB6EE075A3B4C3A31B38EAF9EC16023B
-E3202D4BABFE6D8BD17C29A3D8466AB7C7AFEB8A6A16D6510E01B126F5DAC30E
-0A12BC4B201A63FEE4640694D763A4954E49D59733DCAB6BF05D1980E7B742A3
-DFE7F446EF7BD2F3B4950D3BC6C4EB078CE6F082315B4BDABCDA92DD1455AB92
-A53D42D549E3A3E7439164AA1A8B3E827546C01C7CBFBA8C89446FFB437FBEC7
-7669666AA379B3C1D0D4EF7F4867004130B766EC0FA4A2627B9A4C96D871104F
-B892D91243D9A2F384C9F371A411778C6717D55D2A9AB67BF295C1A5A534A216
-A8682B78D33734FC0AD49A531E7ED6C0107DBFD63EA1E0C7C16AB232DC2F50AC
-D1DECA610A64AA7B49F4581CD5D9B8ED2E30D2DCF867B65D143EA8A245D96260
-1AC0DFAA3032FDB6986446333946528A28D8481C62875D2C580936D7E11D3689
-1D290F57AE163C8498A0E1EAC69983033DC8D34FFC92A5528CE84A61DA44FEFC
-5F377CF8BBDC16FC660A4D35500FDCC516CC9A3DF17E55DAAC5DD65935F0D510
-F4B20B070C7620BD4DEF7A9409D6ECB67969B1FE1393B5471DF049527E804E54
-CC95CC41068C7445D197C304F1400651D32E469C74361217A35AD1C1A1A2894C
-1AFD9DFF97B0D33FC2BCEE7D6B7C7A486C0F1AA80FFEAF3134A1E4BB4FC465E5
-40DBFA6E74FE7B2BB5670B09004E2502FB9BFBB231448615C21C9E58D9CE71F9
-7E6DE7732E1006B66CF2E8C7CE545452380555E11DDE58F113B5AF1806719604
-318EDAC8101C0E34293159C07D8F5E15EA9EEED412AD84B8F73812F255248534
-3A38625FBF1E5025017EEFAEAC2FD6F6504372309F1BE2E2F9F654FC83C6C6F3
-D0BF4C6808A707CCCFFFFC097F064015DF36EB95E5C487DE9ACFA010BF6CD88E
-719E68A6B4ACFC0AA63F5DDA8A57CD0E6641CAC62EF1B4CE1B480FA9F1980EEC
-8160FF7C804E452A0D15C5345A986E20F96CD073E1D37264096361D37795AB90
-47FBAE19AA1ED324163F53C97B6220FAC96636B4F1C27724486CED57096E3B28
-ACB88D2F49EF88D9F47BB9DD0C92D844782F47476F184A8ED69F520C39CE4BC2
-D66EB026F87B44D05FC91239E8D7221837323F341A95B2C557234BA4B8647EB8
-690D981F1DF9154ED842557A9A3A14DE392CA75F2EDAFA3165CD28C0951546C7
-E7D6A87CB80E83C437E753F146F68B1BB3CA3A5653B091DF73D1B4A41EB91DA7
-672F1D5314BE3D9354B5DDD6C3FA992F9B0BF5D212D710E9F66E8C07CC260DB1
-012B51EDCEAFFED316AAD1863D1697DC5661B0D76613BA8D74232A357DD2B9BF
-088F37199FC7AEF824D7B7A0237AB9F4821E7DCBAA840AEC1F81C2E14A3B5CA2
-0EACF0C8382CCE5C7F52EBC7D3CA6C4094FBC42CE531DD8E5576476B71264706
-0143F48159C35E073756FAD833886382BC1AA047E0B55A0F7B14F0A656F428BE
-0C83B01CA685069D94FAB75E8AD28AB73C59AAF1EA0F0B6E0D9DDD008E141118
-DF7D013EA4A488BE6B5BFE2E5C7DBDE394AE3B66FE73E513BEC5C56ED4470526
-C4DDE2DCFDE9E96DBA302EB117046238AAA68650F8E1900AC0CC7CD6A5EF5B7A
-D60F756DE517AB0D249B09174C34DE85ABC09B5F212CCDF819DE9F0B6F1292E0
-1B438E058CA1BE808C860D0C8F45316CE312FE45E5294243B1639212E31A92B8
-3681C4C6FE25CDDE91987B85E5A34BC2B3DAEDD9494490C1FEBE8D61139596FF
-8BFB1F171AEA1A91C82B47D7C396EB6234262CE313069C6328ADC95127288D2B
-2A6496986858E9BC25292EE31AAC170FD7FED360F5CB266E1A7ED9E85E87487F
-C40BCCAABF016EE19EBBA8D7B00E5F73D33CA501B0373491CAB5A6D2531C60E5
-CF6AE0387426494CFE6748E3CAA74E2B6123684E5A9C708D9E79CBA5FB63FC92
-B8F11D9D1AC10C6333CF853E104A1179928A38B5566EF95B703A4D5B0878012E
-08052DD899553D9F4887773BE33B3019170417526E8F11AC0D11A957831968EF
-84CE690BAB6A8C6741CF3540F327FE013B1F0B9FFDF431E96339F941A1DAA2C3
-57DCA60BA6CC6D948B9CECA09CC2EBB4171F2ECA88FCE01F0CE9F743D9E17E89
-199EC67A6AB71FB899A2DE399A83C9720B7A9131FB2A32CA25DB37675F3F6352
-A4D39CC5F3A411775D78672DDBE76441AC525870BF533AEF5FE1D7C9D136F8E6
-122DE44680F76E4EB87810C70A6355CC74670E1804B10B8541826999CB63F7FB
-3732128868C1971EDE846EB7726168BF6E4D9F8C8FF45D3C74823287B33CC5A8
-E146415FC6EF9798B35658352DFE317F10C67436E876674F83ECCE85E2CA38C2
-F435B3B6B1994A73775EF7F056F8EEBA1CB60C5A4C5A17A062B5BCED07EF0073
-203788287ECC6523EEFDD70C3D69DB26280B5932267C1758E314A093357AB0BB
-74CC1281E90959C79734FBEB04CEAD6D03C85B1F111F10BB89D9D154913C8BE4
-86C383F2DCC1ACD79222580EE891869FC9F288CD5840D36DF9B50D6515198089
-9B4E44FA4D2F92B0BFAB3B095C18D79BC38F5131B88C1B6DE1CF90C4A7133A55
-F4BC6190D356ACCECF35F504E9ED5E7679A0CE846E299A0821C42E1D344DC018
-0A074E9C38F6AEB34FC7FFB2685073A8CDBDB8576866AD84813F1FFB4C1657E6
-B27A669C645D4960BA252A555D9F8774CCB4EBE145C3EAF785F5B4328B1670E1
-A27DDF13E5257DFDB97A8BD75ACD26AA324B9E2AF3A2FAE7D2E20441D59D78E5
-0B3FF2D90145884D33C0C4C6FA7B07E8ADBF32E636AD699F1586DAB75BDAD114
-80B00F6D96BB112A64FEB073C651E7A54AFA5666295E3179435CE871FE45A906
-0EF117813E55C9D0F716A61F46F48C9FCD9CCA446477A4F4AE6E34F77E13034E
-1E80E83237820AA3CB4D6C3F0C7033140F389386924005DF3BC08702DCF7E072
-EDA8692CBED27EFFC6A365B7908828CAC19651C86C08383E8ECF45902D85BF24
-857DDFE8CFF6495223BC6245347A516A628881E87ED11957805B5435491D2147
-148098A905877B20ECCCFE1A80C3E9F04E5D9512E789D0FB60327FCF7C74B462
-D1C3873CF8CCFB713BAB3D08B3EAF68CF0DA090EBAE9A3EE7659A20A5993AE78
-76BFFFBF4F96BC28A5EA9AFA514402C80DA323CCDE2765183B87698FE7997D04
-8E2A3993E344349924B23FA178E0C604E13A0276370D0949BDCFCD302D831D19
-AE32CEB29A16953557F0E7982BA774A30E85298787CCDCF89F4ED3849016587F
-91F62D3138D5C238353294ED99EA55D83A2241C09EE00DB63B597639992B15D0
-7CA5B74FC7E65181FAA3F39FF4A78B1C1D6CC2F4062FA3466487B03667E6A244
-0ACBFE403198F43AAB19690ED73D2B0BE6ED61E42787B7830872D9B80878E087
-67BE4A91CE08006CA2EEC1893D7E30732ADF900E3282B2AE84DB20E7B25F621B
-77176D1AB3019ECED5229999615FE3D8A30C5341343BFE93D6A85A395B63D8C2
-8CA3EB8B7602E511921AEC7FA35DCFA0845E0A0DA99DD50FB7DFFA1750182684
-E5C26FEE93C35DE33D3555526ADEB2B20D39748EE16FA99DD01E5749246E3A4D
-62EEA42F323713CEEE14BFCD9E9E122BA152DBCCA98D1D4512F597661856EBDC
-0DBC186DC4FDC6E9112338C39BE0A604091C4E55E0DB5905B2F8F2BEC9BFE646
-A7A356675DB630712A158E07D525C83150CAF0A7460E917E86412253EC0C92AA
-C7E5E6D54DF49AD33BA0C413FA4824EDE1288258F4E4C45409C99B73649F47BB
-834F8E56350237BF9EC5388EA2D4F280EB42C80E5377C0EF572E2168545FE075
-E8E0B5F06DB414464C871757E40FC6085F307A1473615DDE96D3BBF3D3706724
-BF40240B970D2953C066BC931E4E59A6805CC892577485D16C2A0BF2A1567F57
-95D2071FD145376A53218F1A6B8CE7C52BB2AB54A6D677D589B0E8096083F38A
-671A9CE4C451E8D2029199CFE05A72C6B45FA185394436C95D7CCBD8B658332F
-974DCAFB83B77069193B965FCB7B715A12ACABD422ECCD5935A2EE5BEC7A223B
-754746709D2050120924C6560E5B3CE6AD7D93181C35A8850D1821C7D03580A0
-659E608A3192D2917DE0A6951ABEE01A380E60BAC18E40FDAC03B37E2DF7056F
-984A519B316DFF48766B61E40B90EE810F53951931CACE6E243DFCF7480AD026
-D9EB9E6A94AC117A41948553333397B0290F3C1546CF324A3C83921514DFB4AB
-52931E24A3DF165201F30B3CD0B885FD87CAEABD6A110FDC2E2EF2B092305C25
-7E6A3D0811DCF3C83BBA251CC58C4DF88FFF00E01FED721083EBA8DB25186BA3
-487F4A4DD6F46A6071C55BBF0D593E1FD7483DC1412CC5EF900120
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSL10
-%!PS-AdobeFont-1.1: CMSL10 1.0
-%%CreationDate: 1991 Aug 20 16:40:20
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSL10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -9.46 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSL10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 124 /emdash put
-readonly def
-/FontBBox{-62 -250 1123 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142
-08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C
-30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF
-C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A
-BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78
-5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D
-43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1
-374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23
-DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4
-B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83
-63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B
-89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A
-5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2
-C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5
-7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B
-EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850
-4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5
-7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40
-30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9
-2E080C10DE923C1A027CA718A83ACB879C37A1B7CBABAA34E7937C1CEC2CBF6F
-55FF0EC9D84EF9670F6B75F605D946C6642F4A54FE50609FD98028BDAC593852
-9980F55F4F16B3F60671472AB434358E6017B225DF2A5B12409320E0C35B9A38
-4A50E8ED725B6E3E92AAAE89FD3C8AB816B3DB2EF4718708DF5DDF5E371F3D63
-3A89D3CE54BD42854F3B204DBAE32DB7F96832C130AC7123FA18C3FFE146EF43
-0872D6B4F52EC27E21C5F4CC79C5090886058F43745C1B8AE1F19CC1A8E7066A
-E67A1E788EAB8DF286DB392D09A53A2DA05E2F09107D17624C8F335267F3EDAB
-632638B61AC51C1240FF13B07E160731EA4C70BF5480DE7E251561DAF06B6310
-D8011A705D5ABD4B28606D48F1A865E1A1CB3AF6BF59B12C48BA3C67A423E17B
-67D206A43CCCF17F0DC7AEB99C5282C227228445B66B8AAE255F94FC094CC8ED
-C6CBFB45E6E46767A1C0A1B877E9D69E737668DFA576999E17CB7E6E1E283995
-B92EB2A388DCAC2FC528474A5A0EB35BA90AA31326EA3FD40283F7192EA6F6BB
-356B8859169931FA48A0869B087BF79312DB8BDCD01F2E343CD6CE6A44752ABD
-BA7CDCDB638701B39B32D0AEE57C7D7223EBA1DB6BCDC6A07FDCA3C38BB429B6
-8F896712AD2574E6144792A529329B849FC2EF9CD9E422A9112C5CB05D1BD513
-DF307B79C7CCA39AE8902F94A4B643C15EAAB8853C01433FEDA20C165F127D46
-AAAA0A27FCC3BDA9681E103C2C8F539D13A817A39219340DE466A37ACE5D4643
-5B0C287A3E6E74F1C1A9BA9F64D0FC9CEA533F4B40C1FEDEE115F8B63552BB86
-585724A76957329E714DCFC9D9D6AFC5AFC2506F258CEE8B152654BE66BA7A5E
-8DCED21DF5A18A17056F5A4E1F00C9D4301C287C5CB8C07EBD49C261D85F6A00
-656FDB9B68F88A096952465893457C6650AA403AC5A2CE22F8AD80AF8712C461
-491754BD849328CD16266C6066E8B147017A334787DA8A02D5E7F70F508968FD
-4038BA55FF1B9B7A12353C1A67397A4F09420857E4869273C913681978911F06
-D06A2211D42026B879FC77C80D31C8DA9C020977B54F17C0FCCCDD46E3F144B7
-F24304B4B385FF15EB1F110A451CDFA3E9D41400AE753D816E0F500A89065C97
-F3C48C0F90F51A70D49A65B71B6E7640BA3B665288506E6EB6B25FB1AE0FE86D
-F15A534D6B0A23612E459ED8D892C6355C67F19F208590D75E4CA2531C7D54BF
-C4BD0D02A620B9345803700184E4BAE6B9AECFA5EB96EB00E3A3103E4F484852
-95A27E80CF42791FEDA2ED2CAAFD9F76BC2DA372555CE32B2FBDC0CC11CED6B5
-6AB508C3A20A613F88BCF7EEF1A3A7E33AAFBD197E29278E47365DB7B2B8A7D4
-4F6F630CE19A5949F1F92DED59EE20B3DECC899659933389D2B20CF40E1564C9
-0B53010BBC619AFA62D13869F31DCDAFAAF267C5262912F8A21AB7EF4E4B401B
-03BD37D730E5DD696536567E7D8BF7328147EB420D67D18B792D4691AFEF9961
-40D78AC041963D98E0F32EE060209019962A0DA3BC9469DECC10323A4CF6DCFE
-AD848FF62C482CB64F36B4A0EB963A41C804E9FC06D678DB1B59580C16E048D3
-344045A303766BB43BCD2097C985FF769C0E0C3879DA69B56CDCE591F27BC78E
-9E5F5D6DB443B46FF0711E85BDDBF21A920BEB5CD8F75CABEF91F738F6F2C913
-A8C49CA9D9AC71CD79C6A5250C0AA9B04DF78D8696D76D2FF99F0E611F92B213
-89FF8528EAE70B60F6B82F7A3FB6E67501A82BB9B81EDC10079A6C5C0FA02CCD
-667A6B415D328AFAFBBF1CEF5BAC0092B6580322336098ED9793B7C2DEB1B12F
-D552351140F6D79473A7C8B51AEFC5682A77BCB3E8678E6A0E77A8454C467254
-E17992583317D59702E6E26FA44BBAB82BB9CAA058C1238B216F3A986DAF2671
-E0C17FD8A986252E4331FB348AD3943F87E86A427B65C39350C7C517668C1EA2
-C1F42968770EB096611780EFFEF9A6860745171BDC91ACD1704446774E5835F2
-7AC02728DA6452F2E861DE0DA25121B08578C3E35E1919BE49D1747D3060953D
-05960730E1658AFBDF5C99B479F89250CF2D538F30492703BBF0C42FEB05D632
-2DB9E4331066EE7308A159B2EA26D7EB8F6E0508F13998BB2303EDCFBF3D2CA0
-EDCEEBA69D99024ED24FDACDDF40A8CFA996A3EECD1DA81FA2F59A8AA8738139
-8A38A5A5FEBDB5CFE4D2D0E6B2BBBFC7048C7AF2F687117BE7E2E33F669DD417
-2CD985DF7D107E733BD9E09AA3F02FD8C99E8AEA4DD70E4DCDB7B82BB3F11CD7
-3C7866D16AF28A3636199A712C0DDC782AD9645866443F5135D8F51C7EE9C2F6
-FD6B9E19A73262D87ACF76DCEB741564E625FDB342CD1F3FA743290D280A5FAA
-05321A4A8399A20046253FA44F875A27367BEEEF2446E2F15967BDDBFBD95450
-512767C8C5779FE85B0C7097CD5D96B69928DA71F3F76D3F4CFD87F827787250
-46E208572A2DAECFC675F69545A463016947F4811C924CBC4B0634E2C001DABA
-CCD4C5DADA558D5421FBDBF8C1C1962E2C0D452DC7A1285C47A4E5CB2DB8D965
-3A16D26BD7C00485C2F17E71369782CA97F1DE49EEC68ED369BB6B9DB1FBDA0A
-4381FE3380B3D68B76F74775CF67FE417546F70EC1D14B2BD1A526EF7FC3C564
-0B955593FF952D2BF090DFBD9290284A2D556D1CD03B5E0E06EF9C48B19ED270
-A01E5DA6CC1B54ADC019D0203D1D769CAE457B5576D9485D7A3BE3F8CA9B7D82
-D08C0D3EBDE7C7ECFF5B31F29848A3DA2009EF053EF7D13A39FA938143BB61D9
-976E9CB791301D076DCF4A5F6E6775B72E662F24EBFAD725B571DB8DBF10A281
-9AC2BDD417106F82850B4FB626C671E71A85491937CE26994B4AE3029B73AF4A
-CEB1E5C27DFBBDA4378786E94826AB2771EE06E56293C58A80136E07D2F6CF5F
-FE275792BCB97C0E4C2A2ED563C841F621BF46F21DEABF69DED06F1647A64ACA
-F31105F6473F239272DF6FF325D8EA93D85679710DF2B3F9D06DE851D7F6D991
-4FAA2C121E8529DBE00CAF32AFA5E39976FE1ED499E7E3AF28801144A0505631
-5301019D5D9C4281D143BE3DCB8F318B5E7613A27D84C66E10104CEA0E25009D
-C9A933476FF02EEE929135B5507878E0275EE14150B4ABB3034915F0D489BD71
-1B3412F39BAE4F3DD3B657EC5D5DDB1AC9F431D3295709653CFCCFE2A4442169
-63596742AD51AD2A21783C21D791DF0269845435F9C3EC91C7444842C0093BC7
-AFF99C782CF7CA23E953CB769780F252466F9BFF5D2B2453E1020E5B49882BAF
-8B68CC2E80E02E700B01815D122A5D271DABB62BFD3C106F6875145104C1C965
-F05DE045332318DB753D8E8276B3C0840D0A9AE3DE793BD9E109AA0D18981C2B
-514F0160799454B94CC2E0E169A6FD483EE46EE5F9CCFB4699411B5CCBDD78C1
-866A15C4B598271C5E2B5013DC6899022B09609C6E497AB1DC236FDF35875F78
-BC99EADC04BBCED190C3A74E59B93F6366256E9E7EA827AE2AF88CB0FACE7BBB
-88C13857598FDF7FAA299AD58F48048F45556233DE5281F4F41515846D766E75
-D85C52F12EC1794234C42F9F0C8DE08E7E80DF76F62BED9230BAAE750B3ED684
-6CC18938753F6D46827B6C375C4AC361A4916C9E4F05D047481F85FCDB6A4CDD
-89912B2948387E8668BE9338DA652452B328C2EBD7A35482671096BB2B6D038C
-C7FB1398759B8396D192C874319DABB76AC95180B7BA1134CCF7CC6901BC75B8
-D13DFB39DCD47A16AFDF933E80A3C18EA76C14579916A17E541F7134AEA52517
-177C622FBF40F7C75060AA4CC058C0BD0AC655D2E818E87AC8C0C0401BCCFC67
-055FD15D025BD403E0106B7D8DE2013E8D3DE96BB1F024E63D0022E59E751665
-6D149F842E7CF2B498AB9F053C60DD220584FF16B9C20C1C8B42FCF6C31E772C
-54C7C63A166F6689B852579723FD25D5AC7CC1CE1B20C34704C226F3459605BF
-83C20E2ADF663E4765EB3C8C05B0B879EC8BC6313FEEB0B2E868807C3C7DA43B
-8348622F780166CFA8B089BA110A43F77CA8C09A3D6FEA31E32052F55173C866
-78A25FE37B3C52DDA874CE9FCC6C94EC2176A8F6908A9D89133BEFD95E79810A
-578FC0A51DD6F2446080129216D1CD462D0C8B5FA8DC9EBB6A3F34246615E5BE
-50E484ACCE9B9E0957CEF1642FC3E14C80BC14BCABADB61EE3E6CD2BB79C4AFD
-675C414F98C0620C7A91E75E2295BD0AB286DECD52F676290D6B5BEA296517F7
-81F6EC5F682C7B6FDD416AC585F2A041906AE1F3A356E97CB9373E8108390708
-184026DD80D0711ACD30510CD81266940A74E9CB78665AC0E15403E499236DE8
-C963042D39AFFCB1C39D72D7CFF89A1A218AF997F1A3B04BF1A9424A7BE78C9D
-ACA267C62C6C3EF01CC9E7710739F8DDA90046E9A4C0411C748F2551AEBBC466
-C93BBC6B9D874153DE5D7BC25F2F0545A223D767CB239772F3AA96593CA5CE9F
-5664DBBE8560E777E2941C9FCD22F65E9E8E556F09B477CE454FD7D1662971EE
-CDE4C5899DD76B0285235AFEF6B1BCD8CB58DCD2E908F41EC8FC56DD66CF1D78
-3EABDAB5A518D272BF1360CDF6D484FB782384908062D29B350EC29847E7081F
-B77F61F8ABF351A7C4B5946F96FFCF73FF1C2FA58D89812CA2C12EB60D0BC9EF
-2B33C65DCCA72054DA8A839FD8E7E3EE98B4A8C5C9B5C3FC9B054A07E7421265
-C06272337BF86115D904851A12A393A46E1EC3B2F7FC9559AB55A25CBD8EA075
-4A97DD79EE3E83C4A586A28A705CF1E0D7470953B163DA693E053CE99F7FA480
-1CE3234047C8D21F9C82CBB504BED56BEFEF93BA2351D9406EC42881CA864CC8
-193B05F6FB0B0FAD790B2B6FD58F05B7269FC9D6534BB9EF6B75DD0E3B9378A7
-C4A97FB7CC1BCBACBBEFBD7FF7DBDF0D6FFF65D299B95790AB84BFCBD6306726
-053253440030C5A5147D1DF6351A6D5D8E18F42124437296DEC1D09532CBAD9D
-97E38C375FC2C71B986C1EF54DB4FB0E2BBE04AC563363D06457A84D567F3335
-A007E37DEDEF877BDD62A39CB156AB379A31B8ED5E3993680BF0AF077BC895FE
-254DE9953A69EE824E49E008B38ABCC20DE80BD6934CE0404FBB2CBE0ED28DB0
-EBBD6D28DC35C8C88CF2FF4491D2F5B0F83B26F85D3692853AD6BEA5785B5981
-6C7E5A4F301BAEC672A34A9DB0D80855FFC4D865CCE845C58D5950E424AF2AF3
-0850269ED7C0C52A6DE92C1935BDB6C02681972D98F99869A30EFF9DDA144FBE
-04C8FE264FB8942304163BAE396DE1BC2B137C35F742C21D465CFDE2B6AB9DA2
-C89935BA16E133C3A81757702A0C490519C413D230A5D33F0AC84CDFB8D7EF40
-120515EF383BE74AFE6A214E056DC98DC560600C9B0A57568AF650E0D2F80FC3
-137992C3C6ACFBABD14A81235CEE0A9BD743E1512D790D11F28FE3D07886AF22
-47BFBE157DC9AFEB5A09D40403643D04256EEA85C39AC1CE909365199CC85BED
-80D5D5ABDCB25506D7EB4B52CD412436896C1DEEC661E48BE16F388BDB4D2673
-D8A9C1242A1B058737CDA19648DFD72134BCF7F6E292381C331269F3947D3A59
-AD9A34B6368FE4CF2D973429FA6F527BB228BF2E37F31E58AF5FFD45A94F7CAC
-DB81642D723C01F3AD25A278D87B27D6A6F32FD56BDA371BAA9B5F864130FE6D
-DF8D73B516F6E20FFAC81ACB0150F5ECC080E0C46A5B5D501FB867D3F0499847
-6E59F2CE715189E81C5E1228DEFF7F5DC760F4D1DDACE3F7149DAF9CBE68ACF9
-C8DA12628C07F29B21D82C7C724CE95A50F95D3D3A86591876A6DA0E36310E0C
-AEA133442C07A4EA0397A69F83BBBB1A4B4E6B8F7BCAA71D8ED9A538A380AF5B
-E8335A514D114A7111D3288610B653468AD721417F01FFE0CA457F4A7E65A4CD
-9158C6E574002D163986F9C4DF3265C1555FBCAE3B40280B7F40E63560CAE3F4
-1737235740D9002F5B2E6F58B5920B99C777788219FAA488A2ED5F8CF4D3811D
-10A321C377C17227460E5091E3D01C185323F3B0839643CC4D9FB150A5EAC0D7
-45DE4919AEAABFEDE466357CF075839B6ED866E89631C7DED2E8292523D28988
-687163F4F69FDF1273237F4C2E5D595190609D39791A11856005E3B56CB30F60
-5C76EDA611F38033850306EFDBFD10111AB4453E529AAAD3D8048A1A60690176
-FD981EE99D52604DA1DDEFD29498FD859CC1AC117D42F62506B5040B8A27D8B3
-63C8257A0D5CBD3FFC332C9A77E9E7640515238FBC96A6A57CA3BDC1BB050D66
-3CE205F1913749357AA9F399DDDD96496CE317762A837E4D60A67F8700C74BD9
-8B38ADC85914B35B6CDBA018C26417ACF4BA101193F158A68947193849A2C3DA
-F5138DDE7937368DBB65FD8A3EC9590B13699A8264F6625CE6660F2B05E18345
-5EBF0D9115A4988036F19451558F7222C478D97E3F06C64B0AF3E6D2637DBFAA
-DA0AE10A3AE1BD15E14DC9FE955ABD16CBDFBE410BC9305A47EFB7551D351A68
-E1E85B5CFDC3E83AD0273E235930D2216CA1A0E2F83F357C70BDA79FB07DDA67
-5FA022F626710D053110EF8FC5A37B14523F7595F2D8B191647F797E3A32F02A
-38EEA80C6DB62EDB165E46A3CF1093E7A840665D3B86632456C4BD58F8F9332A
-5E1C52853F0AF418DD658F6975A8B4A1702FB64FA40AA051B57F2C42B51CF787
-9FE35AC98D25DE3482E5A2B2130C72366187D255EA710256370ED0F188EEA243
-A2B153A52ACFFB3762288DB525E9F1BB08A5EC5C6CB032F78F7CB5D266912B1E
-8967E58AE8FEA5C2798EA3DD31308ACA66A7BC017E888205ECEE59D6D1935419
-B3DFC4BCA4669E983D0A8C40EF8D705D9363678C76712678590DF98741EA2BF1
-01F15D7D47DA60A42FEF198FB18B8EFD1A31BC3ABB57C1D9B1A2D64D9D76D131
-6A0A150D2C0CF681C082A3FD08B2DBF51B64C2523132A1259762FB6F47A524FD
-75B87250DA15D1BE3AC05D3A79A20D19CFBFAD5D9BBD0D6E71E839DD432F48D3
-311AB858F4107EDB50726F9F8A189CA84F7F125CE2DFBB874CF444D2DD165B15
-2E3D6AB03CBB7D9CBE28CA101A6593E0921C052E6DC54D03DE4800128E644C25
-87B781D64B22503B5061D69636D37C237F1B62D568DD42BC69C2D77FD3F78B5E
-07E8284D5B0D4D15F1E8CF70305E8E46DA1CB42EBDADFC8D65E69BD4A46F4F0B
-D6EFB732DD1C6240C7BCE44C99B3BE7254A188F26478CDF12D6EE24F1C2D83F3
-92EAFEADBEEF7E86D30B5D50A978885638A0D1B834D513D554E84F388BBAEF0E
-F4ED0F75065D6F1F9058E581DA7096EFB1900384C0E04236368DC5FF2FAF84EA
-9355CA0AFE2E8DDC76A8B90CE195CB4CC48477471A07F297D0B5DD32AA437DC7
-31A37347F7355516310C073F51B8576EC2F9030F09F6F45075A392C5CB18B650
-509CBCCAD37CFE6AFE232A7A6D21881D667F51420353CF8A7BB09D4B00E23CD2
-AC61DD527F4BD79240650D6BF9EA53A86803E112DAFBFB0BCE3BE6FB117F2B47
-B1B3CF1D90D2BE58A35BB06FC628E5064DC76F01FCFF96FD6076FCEC26A0478A
-3CA8E1891C9BF8D9AC4449A65FF1C7F361BAC8ADA1E32B5AE6DBD18EF4AEF32C
-8F84381E21D7FB6C391BF6386432134EC79A716B2CD4324DAF57B985BFD7FB87
-57CFAC69CCEB4F98137AE626EE1E653C59F697323D62849C0926C2504D60AEBB
-97A5BD2A183EA77695A269A79BAC47697438A71F2E364CB61C0413645F16C57B
-A1593782C0BBEB60653ECA519B0BB5605D25E0040CA4A11C9C2FC2F5E82C0DB3
-EFE49D9203FEFEAEFAD79FB4FAC4595B92DECF7822C56DA3AEF822544EDF1B43
-BA5FC0DFD98490B8C6665BCC871175F24DE30FE67F847EB924B63F12B3DE39BF
-5A33FAAE2E785BC8BA5F8809626260B159EE3624BE39D64D3E1AAC8C762D50A2
-508324FADFE19C54CFDA9BA61BC327B5842BF4FE3D54E5F3ABEF21684B9ABB9D
-EC3E1C5E023F073406D8B4C7AFC103E196EDA2E5A142B80B06DFD09DE99842F2
-DC550FC37307BDB5DCC5E1E80866E49CC170F0A082F4357A94542A5F5FAEAD6A
-A795FDDA3017B981DEBB2F0267CE26BB78BB498385E94B39010B93B23958AE7B
-45386A3E35E9BEC3BE3D2C197A6B7B6BE23E602052B7C58AA264F0EF1D779F04
-5D2E19819BE201F16A8FA515828FEFAFA0CD72C2B4B47ACD10ED87B3D39EF7B9
-2DD0EDA1DDD44699AA11196E48822F11AA7CBCD57B9AAC4E0657B56BAA02B230
-4D1113B8BE0AA09057CB4097B45CE2F2F6709C282586289B30657BDD19C2754B
-23526268EF8B616FF68E39031E5E052630E1B5CA5E7EC5D363ABF0DC0324A3D0
-BB4E888019425A07611FC6ECC14E3D9F13685E241C3C26B295CE8132961E4BCE
-6B570992D73CB110300280AF27DFF5230EBFAB54A1F7A30914C479B720DFAE23
-1E060B4EE82BA4747404BF340AAF3DB62494327A2C342382C053163B4C8CEB73
-BEFB0A64B4BE72F0215037D6848D1F2B2165F569C8B7E2A471068BD9B39F6433
-7FD7F82FB80348AAED8860C5336714017BBD40C465E2CD116D509F5FB570EA1D
-5A28918BDDC6AC918643F79472945930542DA0F3FCE0ED0172E5D7AC01E7C2BE
-C88CEDE2FF908B90E2D0F17409D1BC4429BEAED8FEB64D192C5619536AFA72F4
-88B197C2EC5C3F4E86C4D7063E831800B098C771572344EDC9F6F031C5B535FB
-306C9834BA9D932DA6323C717C9676B13D203D71CA476B98C25B9D0FE5FB1D58
-38190C49E189E207CF980004999C7EB603495836707FF66118D306C4CF690BF8
-2253BBADBBCBC5CF2764D2015D1A8DBB3742238EDFC0015C9BDB5CDB996BD1D4
-6818EFFD831A363AA81C641F502294E56EE5717B297B6CA1A50ED60D8B1CFFB6
-29151463169D30AEB685AC120F6F703B10037398B20B4A19421F5D5E2F2196AD
-A9324CD03D0311278AC5316A25779960046BBF8AFA27A90897E9C93BE55E8E19
-EEE5A9B49983527A21161E1EF849AEDBEB4AA0D16100A82A0C17F747DEB26C63
-529BC7C019524B772959361267CAF66A753C57599A1484DC5DC5B7B8619F9CA8
-3EF20A88BFEAD2D55DF0B9114D8E3F77FBAA8B3E6A9216D1A5C03FE4A2E29571
-A187662A0E75A997128C51FE310CE2563647CE8F7E78D3366B725129063CF456
-4C46451A40D1D01402F1BD9E3ED8CEF26D74AF047A9B8F066E935BEFBD7B74B3
-4F896E5E3F86F6D1B76F0D3C4638751EEFBAE65F116007EC04C6D54F7C66534B
-63368C667BA9DA44E132E6E6750266F0563149E955823D3323FB1D88602C1DAF
-91ABF0CC1CE35D50C204387E622BB33A6F867E65BDB0C79346298AA472CD7894
-4F0F2C997D41CB47C8F485AC5D6D60CAE106A1F70EAC706A065660BE5EB56CFE
-2D0F55C144EDA227D692F99FC92CFCC619B48D774FA5815770720EC9BD945291
-6E992BC1A0DA54D9D37BA4AF917FC2AA55F9361148EF665C3BA2A8455B493423
-BC75A0831E138F085CFB6FE00D4AAA8CE338B8431749A3BF2F9D022E57E34D73
-AB02D498DD1465AFB511B7CE8FC1106FA5AD1254DDDE19F4919D2EC534C499DB
-A5BBE3174AEE7CDB1E0E312E7B3FD2495CAF5E674124515B1179D8E45601FEAE
-B144DB54CE59D6D12D5B5222F365323035373B7F8EEB42924383E6BE093187C8
-47E9F72BC50AA6C43B33E4BE133479AD6E5F9B0684200552AA37D4E5B9D7747A
-8D94B165F5A1DEF256FBA55097BD0F3FD1D7DAB79B2FBA873B1A0ED3BA3698BB
-81EF45AFA1BC17A88E31F8B58618393EB50CB66DCB053D400889B289390513C1
-E65684F9BA2ADF1ABB9186BF3A1F3E6269CEC1AEFED4523B102F440296A6669F
-0004898DD5ED4D136C84CFA893F051217E551D9BB109DC066495FC3D9E21E29C
-61622A8F661164D4572970785027DAC03A03D250EA5A0FE9F0C51F8B116F1984
-68A29ECE9960D050553E874FD559460CE7D3CFD2E8063BEA191F742A881CD532
-2907C967810EA6B4AC72708D62914E0061A51815D321BE8B2CC28A5F1220D46C
-D4CA5E82C7F7E265A204B650B38D17768565CFA0D90DA917B1FED14F8F6D46AD
-E7EDB249CA57EF69995EB897D855170DB24EB306DF5B4C1413605F791C44407A
-22D53D19404B0DAB66CF1071ED8EF6F57A35EEC83CBAADD9584ADD74801ACDC6
-9D7079A183739B7DAEAD055FE8CF8E9981529941002CA30A12C3ED013709A59C
-DFD3FBCA7244393CC27485B72A5D656B74AF298DB699E109D4FFE01D77779CB5
-1DBF65578E675480661D853200C3D666E7854C8EB197AF183C7E719394964212
-0F469E87697D0048F3842431BF10D19361C6F3C0D244335001CB401DA457C734
-5FC96047D1A45669D9FBE9BAF45820F3FE522BF150D53526900D8DF705DF1461
-2AF52B9F9C1CA9FAE4BB64CD641EC8889EDA72B5A50C878D43D3D2E8763C42B5
-D2F151D54B72279AEDC3AA8A5C094CE5AC9CCC6A9982FBA1A8095F8EBA2E6170
-AAF51DE96629DC4E891405F93472CD4AD45D854BA69A672C29BFEE6471D2C667
-0BEA37060BD4790EF53535F68AF9B5C51610C6C803FD9777EEE7F31433C640F0
-4592B5A05BD05AC815AC3F4E7098F7FEA00BD30542EBA0BDC61BE489E11D6F3E
-0A6C9296D0AE9BD7A4A11CDA7CCAB031D76E09B41BA530F761F34A6652B2E404
-49A9DFF71AD0E6A333CAC5D24C95A0F66D4FFFF006E56602D5E911875BCF96C1
-A19ECB6C7BFCB001CA81037386BA7857D60F9A28D2A9ADA240069754F0EA4CF5
-6068BE5772A74D9A0BEC5F1B0C44747476DDD6A68301F2A58A961910DB6D205D
-370F9ABC897FF767C18F1F7D78ADEE0807AC1C4B66AF7DE68BB568233D044A0A
-089E6C8A420129616FE5456B2143AC62725097A19628F3967CD677659FC655B6
-DD22ADC822A5B1FF2761832804158F6BFAD3AA6877DA79C29C3F438E616C1FCF
-C5027493EB503FB22846E6EC21041E47F5F37929A70D384181032D7F9A8EC6BF
-9C77A34E4D5FC83450B3784B77DC7F46507FAD4C59BA798CD9873AC22577B6A6
-9932394D57086C6A2DFFB221D1C65E1FFD8061C035A4B1B5B02CD0230927158C
-07BB76F5B953BF530BB5E9B29ADC1B5C3AAB365FD0D781FB1E3B4A5DBF837ECD
-93E21C5D8B67492C7B424079F9B62F12B9CD58497F38C90BDFA280940A503067
-08BE0093B29A33C68B18AF820BE01657795ED7A06C2580AC06F0493C59AE9177
-EA75CE1AF552894FB296AF2903B323BA15BF4762733563EF6ECE4F2A2A8636EA
-6AB535F95C2F98BB0C3C5509E23A1DC04E0AEF5B91BA3F2BAD1C6C1DC5BCBEC3
-A83674D19785AB8924E9867F0E489EB962BF5F8E3B6170B5690D4C6A1BE521E8
-B09A5BCE219FAEC1418CD14BEA725AA688D6FF28F0211BC4EBB14D1013BAC8B5
-A7F28FD4E0B33CD7E051F8CC27DAC79530A3478C79B43F7B3155F97C10FC84A9
-C4BE63BCC37C7E3CEB7C14717163E902CD957017C0B023E71D04A29E3C424CAF
-2A1EEEB4C7C79842F062E7E668F7AC6F3CCAB7D34FF0B8DFC135348B32F3D040
-0BDC235FF4C0B533116C4A311A4EBE4D93A2DEAA5EE14FF43DB3A1E343B3F04D
-D0D43938DFEBD69A44719AD6A9DF4A53F6B857E96810865950484EAC676C7E24
-34C8ADCD142084E2297C1C32A9388DE6B832926DBEC25957590B05730987C00A
-42E08E3FF9A3A465F2E219E75954582684C15F65A6DF071401E7E58C40CD3AE7
-DCBADE6D8FCA3301D68F0E81C1EBD1E69ED4F2F5DCBBF17656047E887E08BC2A
-1D896E062D59FA6CEEBC56B6723E49F839CDEA7899264A2D1BF7E48ECCEE1EED
-7C86D5BD5CB5D8CFDF3ECE4939A22D2A9032BA745AF2DF5C7F91FE4D866E6324
-518D8C7999C2FDA6779F144462029EFDBC0EA5E201C207C107D39BF611663E41
-5AEC0B37E3092EC37846DB737A84A05A6B88E6654E691939554CBB03563E96A0
-01B8371D4DEE25312E2B0EB90086FC494E179DBC70AC525395231F93B49B04BF
-B93C99D8D3049A9DCE647695761ADABDBC5240337114A90488C6C4B1E209DAA9
-55EB3BC0C965993AC8E2C8D0D0A7E97FA118917B448E0D1A608DA5629ADBBC45
-11519016D530903DDAA1DE7B4282759FB4E41899D94130C3E583695557070AD8
-B9510DEE22EADB8E1D0DC22B85453705F0B6F59B9C30CD2EA845CEB084EF92AF
-D028CD99A8B08FE2CC63AD9EA8779E32FF927A1301BA3E0F77A3D862FE399CB8
-2AFE428564823C894330521CC2FD8462313B06CE2610FB6F033B19B6D50EC0B0
-45B412D291A2C92FB5E0A1B9DFE1C257B18987A793005FA591A3A99A389C5637
-77BD5CA585E4DB46553ABD1A9E6C49648025BFA974221AF71989924191676321
-D8BC0C2FDA627B626E36A6C30ABA8590C560D58A9B278D4BC8FAB9D0680CE874
-BB5C07D5E617EFB06804791F0A5344600711BC9D16D5A75D59597A0EAC2D3007
-429F6D11D53D97187B01DB88944A261B256B74D5BCAFFA4DB3FB8C7B66ADC500
-D97B4A98ADB6A60B375FE6CD4DE92D151827BCFCA63D2271E6319FDCBC91B8A3
-D987FA7614F56AF51467B9D860BF5913AD6D6DD981C41D588066A20556DEBB00
-C37611BA36EA8BDE29C45ABE9CA964D9380AA1B156440A7A9F3D1219430222F1
-E5DED04055F3138849FFE0D2D23CF2A4C16B4373E69E5A9515D52EFE92121CF8
-FE49A53A387AFF37CB668BCADE61593AEE3CCD78A2E40AC7F7AD53FAF0B334EE
-2CE9474C43A8F745E8EB9139C65EBB14CAAE13903F62A33A65D5E29AD45C8A7E
-7589127E9CFA74CAE15C1988CB6D150F5976331FC153CC13610B804C66FDEAA2
-6318A3E31C5E92326CC475289F66B82EA76F1BB29C3152EF979B025DBF8BE049
-128D23C49A094B3C70DF0A6E9C3C5F98774A6DA798013469C92EC09A30751399
-D6544A4ABD87F4750AB1DDF787F46D98E3311B1640F7D7F10BCC77C462A3AFBB
-CAD3CB3954CF53D0A3690CCE3A07AE8653F0DEA5BA711C69D61B58A6F2877E3D
-4C7D4A1D8F797C497318A26E43AB8E4581DCDEF81AA5A470712B421042D59778
-EDFE7A3BC148B5040C8734227B33544D0DF33318351021C1100BA913B3C4A2D0
-799EE051C71F2DE24C59D5BDF818AD5905C0B61AF8008EFFA5CF52473A62F6D9
-86B787A2788837A0D7779D16DEC55F3B83D248B9389407C22B1F4A674B5A14C0
-BD2D691BD9525EC94C2931007C797BCC8E9C4E27345ED46DB4F9BC60C31B3345
-74F21A6D13B857CD9D4B59C8206D6250DDCCE60EA76E688B86DC8C9F2A72C866
-D8CDF56410550C2591E4697ABE86D74A51E0DE671849C5AF50E70636BDDBEC1E
-DDCD74409CB6190338912FFD8BA79880298E54DBA7B2CA3791AEE581901F71F5
-CA2A7E9514C8AC4E789C917D10C18787B2644C5EAC961A9CFC4071554664BBBB
-03F93F9FB8AE1BE31DB2DB66AEDDC36AA2A9417B255937FDD57ED74B5E4E90DD
-CB2EED5E680C87E7D354717B885A7052FF9AA413F79BABCB8BB6CE03939C3D77
-1A11BD9B5B11B28F4AC99A7ED0E9E2AF18589C443D8D7ABC72203ABA0A9A1E56
-5E522ADE675AA4EC12D3797E7E330E3B09C0B69FD3EF30349DEE4F5FCF789994
-11A76A12B413127BA6F03434009E01ABB3DD7AE3AD6C134354D438E169EEAEA3
-5CBE2DB693D6C20C62411B7DCAE4E26B3BAD191B8A9562FE2FB6DF4714DC311F
-E7428D8C9B0D09EAA42F49871513215F10C0B330C75CD71D65273D23D31B1C2C
-05FD731F173504C089AC663533A6C9FABCF602B231A24D5C08396F4EA21D1D8A
-E1213851CC95C91D7626389BB6EAAFDB55B1874F4B23AC40291B69C3BA3536BB
-734C64108A748246661743EB227F8B8BDCB43130C62E327B9A6EE3DEF4431568
-3E082203E4D04910527688E8D8E4C077346C447D827F8EE789023A87BD779495
-7B7F6D86B236BEBFFC90C3BAB159C980BB6630920CA0118043EE85E090EBEA58
-2C95405D8505CD00F6C42E29B543D2AA364E2302560AB9C8F1A888928B11BAFC
-C6841EC5C10B8A89876A92E07EF5C12DB5086F2BCFE425AC1AAD76F7664EC108
-A46C8AABC878C60E66A64335EE4D2CAAF9DE00665D26C3DAD514AFDB9ACDE18B
-77A39416BF26F7E60EFEB4AE20CA3B28FCB2C6052161F3514D7F1C0DD328B598
-62DC3F1F458789DAA88742023271F4C7D8ED4329206624F006B5B8017BA7E853
-8AB2C2E904B11CA6598D971A758CD79BBE09442A22603B8682CC5E2B58FEF657
-B271CCAA51DA95AC0E25E09640813F66F4B7CA1A51BC85E7C60607BE329B634A
-5EC93D93CAC6748B5BDFED18534624A16A04665F44527CB0F95B890196E610AE
-A09A630071E64A7B69F18CAAEC39B093537D2A422766EFE1843B111458483E79
-2B7D8867A42CABBAE2B58E3E6142D2359D038322C1E35E7464888ADD2D2CFE1B
-1C7477BBD81979AAFFFA85038646641D3C5F5B6342031E0F5995A64B83A4DD26
-78433393C9287492BF46FECE53E7AE61D113CDDE8FC4945FD1624C2AE6BBFF96
-5ECE8C0E15DD49894A26A11AD3A509C51E206ACA05A75FAC6D85C4F8F390CA44
-9085E037A3BC1BAC41CF8E02D6007BDB231C78E7853DF2C78B807E59AB6B8F44
-0048F8D44445A6208A41B6C3B2967893ADD900B156724E0AE2B41A26956A99AD
-7E19606708FED04F40460A10439565D7BA4D0B45B4BC6AE343B0ED8422066D6C
-BB7434D6C7AF7F830433F6A70B5044C798F211DC4AE846547C9B273C7ABE3FF0
-4651ABC02DD582603A1404894BAB9DE851F26F44A2F9C794AB433930ED76E008
-8C1255DF316C0C34C7D72709A6A05F0BE2401A305FF999866ED55E662B2ED511
-70897916716FE9EBC6D2F2EC21E7E2DC418742CFEC20C5BA43A72E61B416266B
-16E69B84E384931A7523B02EC41EDCC072F52D8F4E8C9DFF3EED5F287728BF2B
-9427FEBB9CAC80A4BB2EBDC351FD8B3CA28227D9CE812DA6A787EBD0E777AE81
-1A972CB469082AF0DB6FF728E875539CE2204F50C46914877E9F6134F0052635
-5CA45E21C580FBCD0E490F7EF4A968E4C6FD0328285C59A418094967C8DCC3E1
-E1EA2F3B89D05BFFFAB5F79E67EE8AD276076E21B3F5288D2198933B8D6104C0
-70A5B68C9276789BBEFFC6FD3C7A49FFC36F623093A4B017413CC2A0FE7A5EFD
-43B0CDD3FB76D430BDCD5E30636B9C960B95C283C7A68E703CC31AB9E75D7143
-5D0C3F0D80FDE3A90867F09A42BCF7CE30329196142F3800DA8D1A0EF8C1CD5E
-6B7920DB08E81CCED0E852960769A28FAB9D1FB1BE2FBF8F26F339C70025E1E2
-E0B6A9ED330ECE80A5591B27D3307A6CC51DCCCA59613D84FF0971F0AB0741C6
-8A0481459B57CE8D02B906C78E0C13E8F4F98996B55F00F2FBA6C499870037E0
-C46E571A1AAE29D1471F372B406CB2BE78A8C5F6DFD46338146C3A4BFC0F0B2F
-98E8821E0A15647F5D65A178F13D24A698DCEDA7994B17452C67988CBDB916C3
-B037EEE02A9E1B0E7FEC3343ED4CFC33A71CF42ED5CC9E0B85A039CF686171B0
-05F1F59AB4802DE0C70D21B5390FDE1378A4EF3441CA4F9A172AC20FC56B1D9C
-1188244115F0E78254F467E3DFDF3537B382A3B27012887C24E7F1E5ADB02E80
-51C25DBF73B67D0F7FD4EDC1A8BBC8FB7DB2D053AB8B03B30003CC944A146C92
-35795A0BBEF00CC4CEB3A6E51605E0624C7D4E3CE20D9236C33B6C25D96A9560
-4C22EFA98BE24F406C4378C7908AEFCA99D6DC390B1722C53F8D81E6F82C9201
-90694663A3EEE97BB2BC1EA61402B51CBD2DB98BA67DA3CD2C7702DEA81B08E1
-37E15954CF7207567F499507AD6F6441B314E9765663E7B97AB054E5E43FF2E8
-3E55A2BC69B3E329944FBB6A89712F01705355D381971423A8D92AA0F6148122
-79FF6656EAF11DA79AE2ED7CD20CF6C2E5D27CA1A303D26BBFC61B7EED09C267
-AF069F6222AEE8021C055D3925F416A1E87C0D5B5712D368F9197304A3BC0179
-302F7786BF0D917578AF8FF0D0BC8D2622CB00835EE45BFF1A5BABAD64F816E2
-2B019077AF25AF84B110EEBD9F67AA72EF46586F81AD2B0D3778A040D98FA801
-4749531D612DA3B2EB3F15637BB67CBBF510562CA91F5ADDEA8D224105F17041
-DF41FAEC591B36FD5D8E9B1E17B550A139E97101A15C053B8132DD223768DD65
-BCC3E81DBB4AC7562DA15A54597495A5CBB4EC11AC13D1F323305874D4973C34
-9ACE4DE9DF1C1CEC32F6E365930A25B4BD8050066DB87B455C7703D35D3ED5D6
-E4724D69901889BA61A6DC19D9F4F8C3EE4A08D3A5D6D0EC554151275C6C2C9E
-6A97505763BDA178E443A34C2F58C9D0DC25E14785454F0F1FF04C285A92799B
-755FD7A129BD019F68E921A5BDADB28C6ADEC0492F49FF143C836320F5BE027D
-57399677A4E1FCBDC530B03342B476ACA7756E432B05A9E0D19A56FD8CA10C6F
-E10DD88922D75A80DDFFE0047A18CBDE683B22EFBA43B9947FAD6F587BE6A39C
-CFB57B06BE4606B63F8BEE2FBD4BD609FF22843283A486293EB28BFA6AAC988F
-CD5E44A37550CAD6EE9CDE2B11DC2801D07E15D69B58254B43F9E0052C16202C
-FD06FC09DB828A5D662B9FF0A65CBACCA5891BF58E0165B962FE988E5416B01D
-F164CCDD712E451C98B13F4906F91C5D32D90A18A8690A983DE1A16C9A0D0ECE
-CFA7FFD4A70E49510AD7AC05F96905035257FC3A6523D9AFD759741B8F6831F3
-C6986EF4F7E345971DCDE1614E4A6BD6EBE7FB188AFA5F68C73BD8BAE5B080D1
-C8FCFEC5F37BFCE83C83FFE6A28A5A92B467484D5F0E62BA7C1F01F8BE99B963
-1D218C617192829A1CBE4595EEBDBE6C003DF6D2BEC6F7093418F57611FC145E
-F899F25C06203399147E68AD2555FE4AA55D10A74FA21BD1B49B0F8AF69687AB
-82E1B221017ED55B6066D8E5DB67EB34112BF819A9CD0B4889E5EC0CBC29E8DB
-CF1F2144477A21770EAC0A168A0721A5ACD02C8DD52AFFED2D1DC5261D1D31DB
-6A71B466A1E5F0A8B5E7139E6D5A3DAA07D3FDCB5A67FCAB59485237998219EA
-76CF0FCC3FAE0EBE7CEEFB87681B8F767957B3EC013A0FD3865301C00080C402
-16A1EE30488674F4B0C73E974861FDF1C36C01EB39B0EEACC1192BE4D0BC7277
-83D24F76655473BFE2BB37A16ECBB6CDD7049A40585F3A3E6D83E5F2D477D53F
-A61F1896CFB7F9C5F6D6AF66FAE1A930D5B7F1481BDC25B3E90CFEADACD3FA3E
-CC22D0B14D4B7A2D1B20C975847279B907A4D0379184AEF964A6956AC6675E9D
-540DB1E69980BA8E33BF379C3FA2943473E60E8204A50C037E30684460EA326B
-3D2789A8C5521FCE733EB527DABD96A52661401C91229B5EBD90EC2DF899B25C
-7A8FF9703C39B67DF148B753907C4C4BBF79FF317E6E22749CE3BE573992B1DB
-E0D45B61C080EA167DEEA544532421F7CA78AB1C6AE9EB16DA18A166619BF863
-90D4F9BCA5F533E484D4FED76B7A9E7FE259EBCF583936A02E3DE997BEFE1ED8
-1953B7A5F9295967B18AE5AE8C00F8AF334F376693094B30ADFA1389A74CA2BB
-87E621C6025E5C6BADE40F5AC6F6DBF055987E5C5C87660163C3692150A50A1F
-82971F7690B05041B4139753BB90AB544CBBE2BA33FDF9F7FA515464C6013C8F
-865AA1D8353A47799C63F558D4F21FFD59BF4723AA77365000A9F4BBED286E4B
-FDD01B60C88019E2
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMCSC10
-%!PS-AdobeFont-1.1: CMCSC10 1.0
-%%CreationDate: 1991 Aug 18 17:46:49
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMCSC10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMCSC10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 65 /A put
-dup 76 /L put
-dup 82 /R put
-dup 97 /a put
-dup 98 /b put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 104 /h put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{14 -250 1077 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
-900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
-87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
-076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
-9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
-FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
-B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
-CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
-40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
-C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
-7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
-FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
-81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
-5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
-CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
-0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
-E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
-22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
-1D1941E73310943FA782532ABCCC88593FD63E7E2CECF6665C04DB48D641ABD3
-AE1BB468638681E96394B9E7BED1D13E534B897DB90EA6EC706BAAE06BE2FEFF
-1DFA5258113E9B4CD2D36655973864574E0E8D6291E48A8C62203F679B7ED838
-6F7CBD523C2943ECA994CACE63DBE3C3FC80F475ABF6BD5EDEADE08D828E6B26
-6FE55D18EDED9A2A7B353AB7B1DA738F4F262AF743F8907DEB78362173D5EBEE
-5238175D5CA0BF9CE9B82399D771C12720F18B9B7CFF85D5D20332904A71D4B7
-A174C77F5B8D1E632967E3516A260178E07A1EE092EDD6F348B25AF1F69EC753
-802EE12BAA4E755785F548A7C2B2C1EE4ACCF84E5831BB0D1A1BC7B7E4508C0F
-0156F9BE0189BCDC40D7B2DE6CE5724B03352DDB93E97B862600D0FB9FA3C583
-38C84108D1934D8716E3ED3B064C8CD28FF3E24D6ACE036C592F4F2D010C4A68
-5B338B4380B4F24DF440965836B17F7B46592D24CD8668DE3CD9A027BA1A70FC
-750C51D36FD3B39911A01B48BE87DAE7BC1633C44247502286405A1F13B7717B
-7569ADDBACCEA4AE3E88D1CF3F78060DBD2B7695693902385DDF1B30A71098B6
-7B5CEC9A2FA61779BE27421DFA3B18DDA2E7F038CDB3605EA355E954932EB9ED
-4B7AECF7F33286C2E2B54698563BEC0D14DFBD313802D808B4C69761C1002C64
-8F6E75DBA7A7B0DFDB5B0CBCE27F108C1A8C0989ABA3A290EBA4782CBF8E270E
-A291213DD16D0151D6A493AD2CB1C0EDDAF839A78796B388AD27A8E7CADCB17C
-BF01E25B36A4D9600FD7F8355A7366CAB1E923D60DDE0CDA5813FEC7679E9DE9
-CEE9010A637BF09CA29D4C59E8E43BAF97ABB82E54326D7E2D6246A0B2CE2042
-7B81376AD1FA3552FAB451C905DDDEB8BAEF44EE76EE4D1A9BE715C3FD317028
-EAE42497E8419F83E3278849D441621DBF8A491F66A24AE49B9972C46B2F6C2B
-4463F73E15CEFD43E46B9517E9E1C886404FB41345556A2998516C00B700D053
-0DDCD51F0EC27CB43C84561624757505CF959521FBB7F47051FDF60E1E36247E
-0819273C424165F053C831293B50615EBF3FD01E784431DA1C4DCBFE8A04C5DC
-CCF0F23A51C77291A124A2DD1A167BCA8F3B8FD5B0FAB4546A417C6C63FD265E
-9E9BBEA99A37D3707C99AE85BD75A35EB8B3F97C1052D63337D5FCD7A2E3C133
-A137B80D4ECAF904A35E094996CB722EA00E197C660D915788EF61335C97A1D8
-C8442C42F6076C051F17BD4308154C99ED66D4BDE1D5D3ADA4507B415B4F58C6
-83C155A9DD0C95A97BE9B14BBBD6791E11E170AAB2C2E638EBD33EA7CFE35A5B
-06223215D2A6C806EAE888D600DA4112A09E691FF7AF08F8A00B4FC6E1B0F4EB
-D34E84A1409C474865229BBF39376D62289A2C35F3EF2FE2B4604D7ADAF0755F
-EBA9038FA2C3B6EB6C7F8B343EFF9AE0068EFBB24949CBB8BEC157451D14F86E
-91785EE29B3BE2B1479740090BB4A450CCB1143C5F9271992A90D05E64A31B64
-4745DCB13B4A3EE25939DCBE342F18E625419FA82B5A718780F8B8E86E26DAB3
-9A8F0065CFDE2405DDA7EFCF75D538848C296ED7CF5F03153420D27311003FD2
-F29236C4DCAD83E7C72BE250DF3443CF105C3083275C29673F686B9BCCB41F78
-8491ECC2F9AF90276705BF08F1C0AE18B57EF6C29427C77D11848F6ED88A5FE0
-025DF6383C2B49CDA9C7D20A649F3CA5493B1BE4FAA0BC6A9EABE0EB7AC19A35
-88E0AD4871314D5D202CB25584FFA236ADF1C2DA02566FC44B36926661312276
-8EA1E55BC08807F595E89DE0E3791D27EC975D11159DBD41EDF5D99CF092A991
-268001084E09138095AC768D063804BDE078AD9DFF074207139AC26D23B90AD0
-A571490214CDEC8F090B8A4497A1697DE589C5DF782B56C4083007D697A2B602
-13725A6D4105588509D27A6550F40A379E53B1CAD8050FBC2F77875266498046
-243ADCA1F4860B4EEAB4BAE088BC2AB990508F7F48326214D62975639F9FAE67
-72D82F304C10479AEED5594BFA5E3234C17EED3D7FA1BD2C0C3ABF5CBDC18BED
-6A4F1B3A210BB8281EA848BD5CEDEB93CB4BDCB917C85DE151C92A398E228446
-EB9516265C34437ED5745139AF4B422054D118D0C8BB168C4DDBF152A9BAA3B2
-E3A7B515E35323418B1267E25AB312CC57ADF2BC879B4961F4D331228A6319FB
-E39117D6BE6989C594C3516F7B485BA19C95FBC6C5D2D8123D88705981E02DDC
-8DE2D08FCA03A4DA14CDD45D52209A5F7EFE19043122FF2575C4A10BAEB015C2
-041D4DCFA024373DD96021210ABF2CE0447AE374AB39BBC2523767B5D4D32EB2
-DB0DD9B1EEFFE16B2819182F0335F984740A60BDFBFDAF8BD036640F360B8D0A
-723DF3A2395DC347051BA8260D3DE173F9DCFD0E9C69D88E3BDFB0CF73E2D0E1
-8BE0BCD8933EF4D2DF9F57F3EC894782C366F5F95CFFADD7844585F2F4E7FC0B
-29FBF43D5476A1D8710523A2DF19832A73E5B7D40CA8A476C3E41FD3B5A34366
-F3DC42231743D5AD92BED6AB872F0548B81F0F83A40F1CE45F1A1A7104C1B033
-731CC0B5A96252924415CED4A8FFAD8D5DB42F21F2AC183832551102603C1C8A
-6332ACC319838B9EE080768CB09DE60C6D4007399C6130577FC8925367B73DE5
-0E5D0DA7ABAF518C58FFE632640B039932010B0B621B9D04E7BEA1492034522F
-A80BCBDB6A0B7BC89968F02371164E29F3B62766128AEDABD73FC685F72A6717
-6C77026662A2CE8BF0E7B728107DD61C38C15E3CFB2A79CF957CF3A3AB312E87
-FB7EB8F1FF8605CD0B451BB28BDCD3B145177E5C799D1EA3DC8E24BCD4BCE3D1
-302199DC6EC1B0BEFB8E7AFC228BD5F5E7F05E2B93F33E903724E07212F3B96E
-3E31D8C164B464443C08CD41C51F30A6F310E76E550ACB045B6F530BC73B6C4E
-BDB8785CCC20D84393D447D68415BE0779C72156CECD2A4AB616FBE8B3840A58
-36CA343E3EFA85B98A0AA0FFEDD3921D1D0CDC3AF250B91778C0EB8CDBF2027D
-DD9FEB89105658120513D5BE01DBEE3D8CB662AC0F44BE0E5A1C6A4FC1CD9A07
-C0206B77F84CA48997EEC2002AF7D36A4DB872FDB1BA65BE82B39CC6ABFE9C10
-3163442E2E24C18C4C441915A94911FF5A150BEFD2F88D6CE3AAFDDAE115B64E
-F1DBD90A742149CC8DDE50E3DA10444215015A812DB478CFABD4064265CC61B3
-9B5C9A4DE0BF464DCBC38E736483C2DDE7654F3E2BB7015C3C78A68854DFA1B3
-6700839203AB93FB4A56F3441454B1DF79E79E398084FC7A63CBFAB6628D5504
-725A43221C9F6EEA584F93C12126188E0F74A78D95E390AC27FEE9ABF06B934B
-2542AFEA0B6E648FA461F4D65B5187E326C128155445AA7C065AB7AD2311E16E
-3A5D4614859CF78A6948145405D449A62279F83629085B71782A00969254BD1F
-BED9862FFEBC63103C1A8C4F64A1D1700C7909D81D5199B88ED79A907C503EF4
-E7E46AC957CB4330D39B823C793AE592F0DF06EE26E7FC5CF024E4E3EDE1AA4B
-93AE4C205D93D15DBE10083471AC5F58B3F4A18CA9D4093F4B21CB0D8DC48F1E
-0EE8F82C333E6B6CBA64E915EDD88CAFCD71945F93DBC713F0D6237132615F4A
-C50DA1A760D3D2579A3E3BF1BA9B0D24C0D96669DF652E4F09397509C5CDE8DB
-545806D74D722A2AE74031B3079CEBE922619E4BA181868B2F304DCA9DE05366
-C21BA5AD769FB898DEF6DE248004F4999EBCB8A6EE38FDEB09509BE08E8BDE17
-DD914E47D0418C7A4F66B69AEFF1DF30E85474AF9837908F40239335925AC35A
-88CE8914667AD0185919F0B57D18B2550942C9A89DA77E4EBB86383729239E60
-97809CCE0800D0EFFBCD0912ED69F514F7B3F2DF77F64E9B1012833B84519444
-85BAB11C62D9DD4E6B0306D27E40D90F630431F9F737B7F384F9BC084FB6EC35
-97556AACA6E7F5B9246102C2150212DEA5F6B2D82BBA992960DC158CDC9A5893
-1AE8BB3BCB7DD2C3E33B3F3764259ECDE6DD310BDCC309AA5997B95D0785538A
-94A6370DAD984AF104E6F40E23DB1D13CB10E1749D44C695A3F91D3F2902304C
-7D1615C7846F3580
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-TeXDict begin 39139632 55387786 1000 600 600 (sun211.dvi)
- at start /Fa 150[32 105[{}1 90.9091 /CMBXTI10 rf /Fb 160[62
-95[{}1 119.552 /CMTT12 rf /Fc 193[91 1[91 60[{}2 119.552
-/CMMI12 rf /Fd 133[42 50 50 69 50 53 37 38 39 50 53 48
-53 80 27 50 29 27 53 48 29 44 53 42 53 46 6[58 1[72 99
-72 73 66 53 72 72 65 72 75 91 57 75 1[36 75 75 60 63
-73 69 68 72 5[27 27 5[48 48 48 48 48 1[27 32 3[37 37
-26[53 53 56 11[{}64 83.022 /CMBX10 rf /Fe 133[52 62 62
-85 62 65 46 46 46 62 65 59 65 98 33 62 36 33 65 59 36
-52 65 52 65 59 6[72 1[88 120 88 88 85 65 86 1[80 91 88
-107 73 91 1[42 88 92 76 80 89 85 83 88 1[55 5[59 3[59
-59 59 59 59 59 59 1[39 33 2[46 46 33 24[98 65 65 68 11[{}67
-119.552 /CMR12 rf /Ff 160[39 95[{}1 74.7198 /CMTT9 rf
-/Fg 137[35 12[24 3[35 3[39 50[24 46[{}5 74.7198 /CMTI9
-rf /Fh 138[41 25 33 32 3[43 1[21 2[24 2[34 33 1[31 30
-37 17[54 2[48 17[20 58[{}15 66.4176 /CMMI8 rf /Fi 145[42
-3[23 2[42 42 7[55 69[65 8[42 11[42 2[65{}9 83.022 /CMSY10
-rf /Fj 131[83 42 37 44 44 60 44 46 32 33 33 44 46 42
-46 69 23 44 25 23 46 42 25 37 46 37 46 42 3[23 42 23
-51 62 62 85 62 62 60 46 61 65 57 65 62 76 52 65 43 30
-62 65 54 57 63 60 59 62 1[39 1[65 1[23 23 42 42 42 42
-42 42 42 42 42 42 42 23 28 23 65 1[32 32 23 65 69 42
-1[42 23 18[69 46 46 48 11[{}88 83.022 /CMR10 rf /Fk 138[39
-25 31 31 3[41 1[21 2[23 2[32 31 1[30 29 36 17[50 2[46
-76[{}14 58.1154 /CMMI7 rf /Fl 153[41 39[65 1[65 1[23
-58[{}4 83.022 /CMMI10 rf /Fm 252[38 2[60{}2 74.7198 /CMSY9
-rf /Fn 197[21 58[{}1 74.7198 /CMMI9 rf /Fo 133[42 45
-52 4[43 5[80 1[47 1[31 52 1[45 15[53 2[56 3[69 73 3[50
-40 76 71 58 7[71 45 71 25 25 32[52 2[55 22[{}25 90.9091
-/CMMI10 rf /Fp 241[35 13[55{}2 66.4176 /CMSY8 rf /Fq
-133[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 48
-48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 2[48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 34[{}83
-90.9091 /CMTT10 rf /Fr 133[34 41 41 55 41 43 30 30 30
-41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38 4[38
-1[47 1[58 79 1[58 55 43 57 1[52 60 58 70 48 60 1[28 58
-60 50 1[59 55 54 58 1[36 4[21 1[38 38 38 38 1[38 38 38
-38 38 21 26 21 60 1[30 30 21 4[38 21 20[43 45 11[{}70
-74.7198 /CMR9 rf /Fs 198[30 30 30 30 30 30 30 30 30 30
-48[{}10 49.8132 /CMR6 rf /Ft 130[44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 1[44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-1[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 1[44 44 44 33[{}90 83.022
-/CMTT10 rf /Fu 135[40 7[76 8[45 45 86[45 8[71 2[45 71
-1[71{}9 90.9091 /CMSY10 rf /Fv 198[35 35 35 35 35 35
-35 35 35 35 48[{}10 66.4176 /CMR8 rf /Fw 131[112 1[50
-59 59 81 59 62 44 44 46 1[62 56 62 93 31 59 34 31 62
-56 34 51 62 50 62 54 4[58 3[85 116 85 86 78 62 84 84
-77 84 88 106 67 2[42 88 88 70 74 86 81 80 85 1[53 5[56
-56 56 56 56 56 56 56 56 56 56 31 37 31 2[44 44 5[58 21[62
-65 11[{}69 99.6264 /CMBX12 rf /Fx 134[44 42 60 42 49
-30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42
-42 46 6[56 2[91 1[68 65 51 66 2[70 68 82 3[35 1[70 59
-62 1[65 8[28 4[46 2[46 46 46 46 28 33 28 2[37 37 27[51
-56 11[{}52 90.9091 /CMTI10 rf /Fy 131[91 2[48 48 66 48
-51 35 36 36 1[51 45 51 76 25 48 28 25 51 45 28 40 51
-40 51 45 7[68 68 93 68 68 66 51 67 1[62 71 68 83 57 71
-47 33 68 71 59 62 69 66 64 68 7[45 45 45 45 45 45 45
-45 45 45 45 25 30 25 2[35 35 27[51 53 11[{}67 90.9091
-/CMSL10 rf /Fz 133[60 71 71 97 71 75 52 53 55 71 75 67
-75 112 37 71 41 37 75 67 41 61 75 60 75 65 6[82 102 102
-139 102 103 94 75 100 1[92 101 105 128 81 105 1[50 105
-106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67 67
-67 67 37 45 3[52 52 27[75 78 11[{}67 119.552 /CMBX12
-rf /FA 169[122 32[81 1[81 4[45 46[{}4 143.462 /CMBX12
-rf /FB 134[123 3[129 90 92 95 2[116 129 194 65 2[65 1[116
-71 106 129 1[129 113 9[240 175 1[162 129 2[159 3[140
-3[182 183 3[168 1[175 23[90 90 65 39[{}29 206.559 /CMBX12
-rf /FC 134[51 51 1[51 54 38 38 38 1[54 49 54 81 27 51
-30 27 54 1[30 43 54 43 54 49 11[73 1[54 72 1[66 1[73
-89 8[75 70 69 73 10[49 3[49 49 2[27 33 6[76 25[54 12[{}39
-99.6264 /CMR12 rf /FD 131[105 2[55 55 76 55 58 41 41
-43 55 58 52 58 87 29 55 32 29 58 52 32 48 58 46 58 51
-4[55 2[79 79 108 79 80 73 58 78 1[71 79 82 99 63 82 1[40
-82 82 66 69 80 76 74 79 2[49 1[32 1[29 52 52 52 52 52
-52 52 52 52 52 52 29 35 29 81 1[41 41 5[55 21[58 61 11[{}73
-90.9091 /CMBX10 rf /FE 134[56 3[56 54 1[55 1[51 58 56
-1[47 3[56 1[49 51 57 1[53 56 14[73 5[62 10[74 65[{}17
-90.9091 /CMCSC10 rf /FF 131[91 45 40 48 48 66 48 51 35
-36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51
-45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71
-68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 43 71
-25 25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 71
-45 35 35 25 71 76 2[45 25 17[76 76 51 51 53 11[{}92 90.9091
-/CMR10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 0 351 a FF(CCLR)m(C)29 b(/)i FE(R)m(utherf)n(ord)
-h(Appleton)h(Labora)-6 b(tor)g(y)1176 b FD(SUN/211.26)0
-464 y FC(P)m(article)34 b(Ph)m(ysics)h(&)d(Astronom)m(y)i(Researc)m(h)g
-(Council)0 577 y(Starlink)f(Pro)5 b(ject)0 690 y(Starlink)33
-b(User)h(Note)e(211.26)2455 927 y FF(R.F.)f(W)-8 b(arren-Smith)31
-b(&)f(D.S.)h(Berry)3039 1040 y(30th)g(Octob)s(er)g(2009)p
-0 1183 3780 12 v 1657 1504 a FB(AST)702 1754 y(A)78 b(Library)e(for)h
-(Handling)520 2003 y(W)-19 b(orld)77 b(Co)6 b(ordinate)78
-b(Systems)1192 2252 y(in)f(Astronom)-6 b(y)1726 2618
-y FA(V5.3)826 2931 y FB(Programmer's)76 b(Guide)1297
-3134 y(\(C)i(V)-19 b(ersion\))245 3396 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 245 3396 a @beginspecial
-20 @llx 100 @lly 530 @urx 631 @ury 1275 @rwi @setspecial
-%%BeginDocument: sun211_figures/fronta_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 1307 3396 a
- currentpoint grestore moveto
- 1307 3396 a 1596 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 1596
-3396 a @beginspecial 30 @llx 189 @lly 477 @urx 603 @ury
-1117 @rwi @setspecial
-%%BeginDocument: sun211_figures/frontb_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2527 3396 a
- currentpoint grestore moveto
- 2527 3396 a 2703 3396 a
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 2703
-3396 a @beginspecial 22 @llx 206 @lly 490 @urx 605 @ury
-1170 @rwi @setspecial
-%%BeginDocument: sun211_figures/frontc_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 3678 3396 a
- currentpoint grestore moveto
- 3678 3396 a 1633 4700 a Fz(Abstract)0
-4962 y FF(The)40 b(AST)g(library)h(pro)m(vides)f(a)h(comprehensiv)m(e)h
-(range)f(of)g(facilities)i(for)d(attac)m(hing)j(w)m(orld)e(co)s
-(ordinate)0 5075 y(systems)c(to)h(astronomical)h(data,)h(for)d
-(retrieving)h(and)f(in)m(terpreting)h(that)g(information)f(in)g(a)h(v)
--5 b(ariet)m(y)38 b(of)0 5188 y(formats,)31 b(including)f(FITS-W)m(CS,)
-g(and)g(for)g(generating)i(graphical)f(output)f(based)g(on)g(it.)0
-5351 y(This)38 b(programmer's)g(man)m(ual)h(should)f(b)s(e)g(of)g(in)m
-(terest)i(to)g(an)m(y)m(one)f(writing)g(astronomical)h(applications)0
-5464 y(whic)m(h)g(need)h(to)h(manipulate)f(co)s(ordinate)g(system)g
-(data,)j(esp)s(ecially)e(celestial)i(or)d(sp)s(ectral)g(co)s(ordinate)0
-5576 y(systems.)g(AST)29 b(is)i(p)s(ortable)f(and)g(en)m(vironmen)m
-(t-indep)s(enden)m(t.)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 52 a FF(ii)3245 b Fy(SUN/211.26)0
-5670 y FF(Cop)m(yrigh)m(t)31 b(\(C\))g(2009)h(Science)f(&)f(T)-8
-b(ec)m(hnology)32 b(F)-8 b(acilities)34 b(Council)p eop
-end
-%%Page: 3 3
-TeXDict begin 3 2 bop 0 52 a Fy(CONTENTS)3186 b FF(iii)0
-351 y Fz(Con)l(ten)l(ts)0 556 y FD(1)84 b(In)m(tro)s(duction)3015
-b(1)136 669 y FF(1.1)94 b(What)32 b(Problems)e(Do)s(es)h(AST)e(T)-8
-b(ac)m(kle?)54 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(1)136 782 y(1.2)94 b(Other)30 b(Design)i(Ob)5 b(jectiv)m(es)44
-b(.)i(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(2)136 895 y(1.3)94 b(What)32 b(Do)s(es)e(\\AST")h(Stand)f(F)-8
-b(or?)81 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151
-b(4)0 1100 y FD(2)84 b(Ov)m(erview)35 b(of)g(AST)f(Concepts)2343
-b(5)136 1213 y FF(2.1)94 b(Relationships)31 b(Bet)m(w)m(een)i(Co)s
-(ordinate)d(Systems)79 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136 1326
-y(2.2)94 b(Mappings)31 b(Av)-5 b(ailable)95 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(5)136
-1439 y(2.3)94 b(Comp)s(ound)29 b(Mappings)c(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(6)136 1552
-y(2.4)94 b(Represen)m(ting)31 b(Co)s(ordinate)g(Systems)k(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(7)136 1665 y(2.5)94
-b(Net)m(w)m(orks)32 b(of)f(Co)s(ordinate)f(Systems)77
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)151 b(9)136 1778
-y(2.6)94 b(Input/Output)29 b(F)-8 b(acilities)85 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(11)136 1891 y(2.7)94 b(Pro)s(ducing)30 b(Graphical)h(Output)80
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(12)0
-2096 y FD(3)84 b(Ho)m(w)35 b(T)-9 b(o.)18 b(.)f(.)3059
-b(15)136 2209 y FF(3.1)94 b(.)16 b(.)f(.)h(Obtain)30
-b(and)g(Install)g(AST)91 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(15)136 2322 y(3.2)94 b(.)16 b(.)f(.)h(Structure)29
-b(an)h(AST)g(Program)92 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(15)136 2435 y(3.3)94 b(.)16 b(.)f(.)h(Build)30 b(an)g(AST)g(Program)
-38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(15)136 2548 y(3.4)94 b(.)16 b(.)f(.)h(Read)30 b(a)h(W)m(CS)f
-(Calibration)h(from)f(a)h(Dataset)55 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(16)136 2661 y(3.5)94 b(.)16 b(.)f(.)h(V)-8 b(alidate)32
-b(W)m(CS)f(Information)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(17)136 2774 y(3.6)94 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(AST)f(Data)92 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(17)136 2888 y(3.7)94 b(.)16 b(.)f(.)h(Con)m(v)m(ert)31
-b(Bet)m(w)m(een)h(Pixel)f(and)f(W)-8 b(orld)31 b(Co)s(ordinates)93
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3001 y(3.8)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Celestial)i(Co)s(ordinate)f(System)69
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(18)136 3114 y(3.9)94 b(.)16 b(.)f(.)h(T)-8 b(est)31
-b(if)f(a)h(W)m(CS)f(is)h(a)f(Sp)s(ectral)h(Co)s(ordinate)f(System)82
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(19)136 3227 y(3.10)49 b(.)16 b(.)f(.)h(F)-8 b(ormat)31
-b(Co)s(ordinates)g(for)f(Displa)m(y)60 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3340 y(3.11)49 b(.)16 b(.)f(.)h(Displa)m(y)31
-b(Co)s(ordinates)g(as)f(they)h(are)f(T)-8 b(ransformed)84
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(19)136 3453 y(3.12)49 b(.)16 b(.)f(.)h(Read)30
-b(Co)s(ordinates)h(En)m(tered)f(b)m(y)g(a)h(User)69 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(20)136 3566 y(3.13)49 b(.)16
-b(.)f(.)h(Create)31 b(a)g(New)f(W)m(CS)h(Calibration)63
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(21)136 3679
-y(3.14)49 b(.)16 b(.)f(.)h(Mo)s(dify)30 b(a)h(W)m(CS)f(Calibration)36
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(23)136
-3792 y(3.15)49 b(.)16 b(.)f(.)h(W)-8 b(rite)31 b(a)g(Mo)s(di\014ed)f(W)
-m(CS)g(Calibration)h(to)h(a)e(Dataset)44 b(.)h(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(25)136 3905
-y(3.16)49 b(.)16 b(.)f(.)h(Displa)m(y)31 b(a)g(Graphical)g(Co)s
-(ordinate)g(Grid)56 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(27)136
-4018 y(3.17)49 b(.)16 b(.)f(.)h(Switc)m(h)30 b(to)h(Plot)g(a)g
-(Di\013eren)m(t)h(Celestial)g(Co)s(ordinate)f(Grid)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(29)136 4131 y(3.18)49 b(.)16 b(.)f(.)h(Giv)m(e)31 b(a)g(User)g(Con)m
-(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h(Plot)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(30)0 4336 y FD(4)84 b(An)35 b(AST)g(Ob)6 b(ject)34
-b(Primer)2457 b(33)136 4449 y FF(4.1)94 b(AST)30 b(Ob)5
-b(jects)76 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136 4562 y(4.2)94 b(Ob)5
-b(ject)31 b(Creation)g(and)f(P)m(oin)m(ters)57 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(33)136
-4675 y(4.3)94 b(The)30 b(Ob)5 b(ject)31 b(Hierarc)m(h)m(y)79
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(34)136 4788 y(4.4)94 b(Displa)m(ying)32 b(Ob)5 b(jects)54
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(35)136 4901 y(4.5)94 b(Getting)32 b(A)m(ttribute)g(V)-8
-b(alues)25 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(35)136 5015 y(4.6)94 b(Setting)32 b(A)m(ttribute)f(V)-8
-b(alues)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(36)136 5128 y(4.7)94 b(T)-8 b(esting,)32 b(Clearing)f(and)f
-(Defaulting)h(A)m(ttributes)57 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(38)136
-5241 y(4.8)94 b(T)-8 b(ransforming)30 b(Co)s(ordinates)52
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(39)136 5354 y(4.9)94 b(Managing)32 b(Ob)5 b(ject)31
-b(P)m(oin)m(ters)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(40)136 5467 y(4.10)49 b(AST)30 b(P)m(oin)m(ter)i(Con)m
-(texts|Begin)g(and)e(End)80 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(41)136 5580 y(4.11)49 b(Exp)s(orting,)31 b(Imp)s(orting)e(and)h
-(Exempting)g(AST)g(P)m(oin)m(ters)87 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(41)136 5693
-y(4.12)49 b(AST)30 b(Ob)5 b(jects)30 b(within)g(Multi-threaded)h
-(Applications)51 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(42)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 0 52 a FF(iv)3190 b Fy(CONTENTS)345
-351 y FF(4.12.1)61 b(Lo)s(c)m(king)32 b(AST)d(Ob)5 b(jects)31
-b(for)f(Exclusiv)m(e)h(Use)69 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(42)345 464
-y(4.12.2)61 b(AST)30 b(P)m(oin)m(ter)i(Con)m(texts)54
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(43)136
-577 y(4.13)49 b(Cop)m(ying)31 b(Ob)5 b(jects)73 b(.)46
-b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(43)136 690 y(4.14)49 b(C)30 b(P)m(oin)m(ter)i(T)m(yp)s(es)81
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)106 b(44)136 804 y(4.15)49 b(Error)30 b(Detection)43
-b(.)i(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(45)136 917 y(4.16)49 b(Sharing)30 b(the)h(Error)e(Status)
-k(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(47)0 1121 y FD(5)84 b(In)m(ter-Relating)35 b(Co)s(ordinate)f(Systems)
-h(\(Mappings\))1377 b(49)136 1234 y FF(5.1)94 b(The)30
-b(Mapping)h(Class)h(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)106 b(49)136 1347 y(5.2)94 b(The)30
-b(Mapping)h(Mo)s(del)64 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(50)136 1461 y(5.3)94 b(Input)29
-b(and)h(Output)f(Co)s(ordinate)i(Num)m(b)s(ers)76 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(50)136 1574 y(5.4)94 b(F)-8
-b(orw)m(ard)31 b(and)f(In)m(v)m(erse)h(T)-8 b(ransformations)24
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(50)136 1687 y(5.5)94
-b(In)m(v)m(erting)32 b(Mappings)g(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(51)136 1800
-y(5.6)94 b(Finding)31 b(the)f(Rate)i(of)e(Change)g(of)h(a)g(Mapping)f
-(Output)83 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)106 b(51)136 1913 y(5.7)94 b(Rep)s(orting)31
-b(Co)s(ordinate)f(T)-8 b(ransformations)38 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(51)136 2026 y(5.8)94 b(Handling)31 b(Missing)g(\(Bad\))g(Co)s
-(ordinate)g(V)-8 b(alues)84 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(52)136
-2139 y(5.9)94 b(Example|the)31 b(UnitMap)68 b(.)46 b(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(52)136 2252
-y(5.10)49 b(Example|the)31 b(P)m(ermMap)36 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(53)0 2457 y FD(6)84
-b(Comp)s(ound)36 b(Mappings)f(\(CmpMaps\))1968 b(57)136
-2570 y FF(6.1)94 b(Com)m(bining)31 b(Mappings)f(in)g(Series)90
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(57)136
-2683 y(6.2)94 b(Com)m(bining)31 b(Mappings)f(in)g(P)m(arallel)89
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(58)136
-2796 y(6.3)94 b(The)30 b(Comp)s(onen)m(t)g(Mappings)e(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(58)136 2909 y(6.4)94 b(Creating)31 b(More)h(Complex)e(Mappings)67
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(59)136 3022
-y(6.5)94 b(Example|T)-8 b(ransforming)30 b(Bet)m(w)m(een)j(Tw)m(o)d
-(Calibrated)h(Images)73 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(59)136 3135 y(6.6)94 b(Ov)m(er-Complex)31
-b(Comp)s(ound)d(Mappings)58 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(60)136 3248 y(6.7)94 b(Simplifying)30 b(Comp)s(ound)e(Mappings)41
-b(.)k(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(60)0 3453
-y FD(7)84 b(Represen)m(ting)36 b(Co)s(ordinate)e(Systems)i(\(F)-9
-b(rames\))1543 b(63)136 3566 y FF(7.1)94 b(The)30 b(F)-8
-b(rame)32 b(Mo)s(del)24 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(63)136 3679 y(7.2)94
-b(Creating)31 b(a)g(F)-8 b(rame)40 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(63)136
-3792 y(7.3)94 b(Using)31 b(a)g(F)-8 b(rame)31 b(as)g(a)f(Mapping)84
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(63)136
-3905 y(7.4)94 b(F)-8 b(rame)32 b(Axis)e(A)m(ttributes)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(64)136 4018 y(7.5)94 b(F)-8 b(rame)32 b(A)m(ttributes)49
-b(.)d(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(65)136 4131 y(7.6)94 b(F)-8 b(ormatting)33
-b(Axis)d(V)-8 b(alues)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)106 b(67)136 4244 y(7.7)94 b(Normalising)32
-b(F)-8 b(rame)31 b(Co)s(ordinates)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(68)136 4358 y(7.8)94 b(Reading)31 b(F)-8
-b(ormatted)32 b(Axis)f(V)-8 b(alues)38 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)106 b(68)136 4471 y(7.9)94 b(P)m(erm)m(uting)31
-b(F)-8 b(rame)32 b(Axes)g(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(72)136 4584 y(7.10)49 b(Selecting)32
-b(F)-8 b(rame)32 b(Axes)24 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)106 b(72)136 4697 y(7.11)49 b(Calculating)32
-b(Distances,)g(Angles)f(and)f(O\013sets)65 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(73)136 4810 y(7.12)49 b(The)30 b(Domain)h(A)m(ttribute)48
-b(.)e(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(75)136 4923 y(7.13)49 b(Con)m(v)m(en)m(tions)32 b(for)e(Domain)h
-(Names)42 b(.)k(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(77)136 5036 y(7.14)49 b(The)30 b(Unit)h(A)m(ttribute)39
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)106 b(78)345 5149 y(7.14.1)61 b(The)30 b(Syn)m(tax)h(for)f(Unit)h
-(Strings)i(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(79)345
-5262 y(7.14.2)61 b(Side-e\013ects)32 b(of)f(Changing)f(the)g(Unit)h
-(attribute)86 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)106 b(80)0 5467 y FD(8)84 b(Celestial)34
-b(Co)s(ordinate)h(Systems)g(\(SkyF)-9 b(rames\))1584
-b(83)136 5580 y FF(8.1)94 b(The)30 b(SkyF)-8 b(rame)31
-b(Mo)s(del)90 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(83)136 5693 y(8.2)94 b(Creating)31 b(a)g(SkyF)-8
-b(rame)35 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)106 b(83)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop 0 52 a Fy(CONTENTS)3214 b FF(v)136
-351 y(8.3)94 b(Sp)s(ecifying)30 b(a)h(P)m(articular)h(Celestial)g(Co)s
-(ordinate)e(System)83 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(83)136 465 y(8.4)94 b(A)m(ttributes)32
-b(whic)m(h)e(Qualify)g(Celestial)i(Co)s(ordinate)f(Systems)k(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(84)136 579 y(8.5)94 b(Using)31 b(Default)h(SkyF)-8
-b(rame)30 b(A)m(ttributes)g(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(85)136 692 y(8.6)94 b(F)-8 b(ormatting)33 b(Celestial)f(Co)s
-(ordinates)51 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(86)136 806 y(8.7)94 b(Reading)31 b(F)-8 b(ormatted)32
-b(Celestial)g(Co)s(ordinates)80 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(88)136 920 y(8.8)94 b(Represen)m(ting)31 b(O\013sets)g(from)f(a)h(Sp)
-s(eci\014ed)e(Sky)h(P)m(osition)65 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(90)0 1128 y
-FD(9)84 b(Sp)s(ectral)35 b(Co)s(ordinate)g(Systems)g(\(Sp)s(ecF)-9
-b(rames\))1553 b(93)136 1242 y FF(9.1)94 b(The)30 b(Sp)s(ecF)-8
-b(rame)31 b(Mo)s(del)52 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)106 b(93)136 1355 y(9.2)94 b(Creating)31
-b(a)g(Sp)s(ecF)-8 b(rame)67 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)106 b(93)136 1469 y(9.3)94 b(Sp)s(ecifying)30
-b(a)h(P)m(articular)h(Sp)s(ectral)e(Co)s(ordinate)g(System)c(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(93)136 1583 y(9.4)94 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Sp)s
-(ectral)g(Co)s(ordinate)h(Systems)48 b(.)e(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(94)136 1696 y(9.5)94
-b(Using)31 b(Default)h(Sp)s(ecF)-8 b(rame)30 b(A)m(ttributes)63
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(95)136 1810 y(9.6)94
-b(Creating)31 b(Sp)s(ectral)g(Cub)s(es)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(96)136 1924 y(9.7)94
-b(Handling)31 b(Dual-Sideband)f(Sp)s(ectra)67 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106 b(97)0 2132 y
-FD(10)32 b(Time)j(Systems)g(\(TimeF)-9 b(rames\))2215
-b(99)136 2246 y FF(10.1)49 b(The)30 b(TimeF)-8 b(rame)32
-b(Mo)s(del)d(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)106 b(99)136 2359 y(10.2)49 b(Creating)31 b(a)g(TimeF)-8
-b(rame)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-106 b(99)136 2473 y(10.3)49 b(Sp)s(ecifying)30 b(a)h(P)m(articular)h
-(Time)e(System)51 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)106
-b(99)136 2587 y(10.4)49 b(A)m(ttributes)32 b(whic)m(h)e(Qualify)g(Time)
-g(Co)s(ordinate)h(Systems)26 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(100)0 2795 y FD(11)32
-b(Comp)s(ound)k(F)-9 b(rames)35 b(\(CmpF)-9 b(rames\))1957
-b(101)136 2908 y FF(11.1)49 b(Creating)31 b(a)g(CmpF)-8
-b(rame)59 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(101)136 3022 y(11.2)49 b(The)30 b(A)m(ttributes)h(of)g(a)g
-(CmpF)-8 b(rame)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(101)0 3230 y FD(12)32 b(An)j(In)m(tro)s(duction)h(to)e(Co)s(ordinate)
-h(System)g(Con)m(v)m(ersions)1118 b(103)136 3344 y FF(12.1)49
-b(Con)m(v)m(erting)32 b(b)s(et)m(w)m(een)f(Celestial)h(Co)s(ordinate)f
-(Systems)d(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)60 b(103)136 3458 y(12.2)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Sp)s(ectral)f(Co)s(ordinate)h(Systems)41
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(105)136 3571 y(12.3)49 b(Con)m(v)m(erting)32
-b(b)s(et)m(w)m(een)f(Time)f(Co)s(ordinate)h(Systems)89
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(107)136 3685 y(12.4)49 b(Handling)31 b(SkyF)-8
-b(rame)31 b(Axis)f(P)m(erm)m(utations)h(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(107)136 3799 y(12.5)49 b(Con)m(v)m(erting)32 b(Bet)m(w)m(een)g(F)-8
-b(rames)49 b(.)c(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)136 3912 y(12.6)49 b(The)30 b(Choice)h(of)g(Alignmen)m(t)g
-(System)56 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(108)0 4120 y FD(13)32 b(Co)s(ordinate)j(System)g(Net)m(w)m(orks)g
-(\(F)-9 b(rameSets\))1553 b(111)136 4234 y FF(13.1)49
-b(The)30 b(F)-8 b(rameSet)32 b(Mo)s(del)40 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(111)136
-4348 y(13.2)49 b(Creating)31 b(a)g(F)-8 b(rameSet)56
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(112)136 4462 y(13.3)49 b(Adding)30 b(New)h(F)-8 b(rames)31
-b(to)g(a)g(F)-8 b(rameSet)43 b(.)j(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(112)136 4575 y(13.4)49 b(The)30 b(Base)i(and)e(Curren)m(t)f(F)-8
-b(rames)27 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(113)136 4689 y(13.5)49 b(Referring)31 b(to)g(the)f(Base)i(and)e
-(Curren)m(t)f(F)-8 b(rames)43 b(.)j(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(114)136
-4803 y(13.6)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)d
-(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(115)136
-4916 y(13.7)49 b(Extracting)32 b(a)f(Mapping)f(from)g(a)h(F)-8
-b(rameSet)81 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(115)136 5030
-y(13.8)49 b(Using)31 b(a)g(F)-8 b(rameSet)31 b(as)g(a)g(F)-8
-b(rame)60 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(116)136 5144 y(13.9)49 b(Extracting)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)42 b(.)k(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(117)136 5258 y(13.10)t(Remo)m(ving)32 b(a)f(F)-8 b(rame)31
-b(from)f(a)h(F)-8 b(rameSet)70 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(117)0 5466 y FD(14)32 b(Higher)j(Lev)m(el)g(Op)s(erations)g(on)g(F)-9
-b(rameSets)1708 b(119)136 5579 y FF(14.1)49 b(Creating)31
-b(F)-8 b(rameSets)32 b(with)e(astCon)m(v)m(ert)62 b(.)46
-b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(119)136 5693 y(14.2)49
-b(Con)m(v)m(erting)32 b(b)s(et)m(w)m(een)f(F)-8 b(rameSet)31
-b(Co)s(ordinate)g(Systems)63 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(120)p eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop 0 52 a FF(vi)3190 b Fy(CONTENTS)136
-351 y FF(14.3)49 b(Example|Registering)32 b(Tw)m(o)f(Images)50
-b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(122)136 464 y(14.4)49
-b(Re-De\014ning)31 b(a)g(F)-8 b(rameSet)32 b(Co)s(ordinate)e(System)59
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)60 b(124)136 577 y(14.5)49 b(Example|Binning)31
-b(an)f(Image)87 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(125)136 690 y(14.6)49 b(Main)m(taining)33 b(the)d(In)m(tegrit)m(y)i
-(of)f(F)-8 b(rameSets)32 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(126)136 804 y(14.7)49 b(Merging)32 b(F)-8 b(rameSets)42
-b(.)k(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(127)0 1008 y FD(15)32 b(Sa)m(ving)k(and)f(Restoring)g(Ob)6
-b(jects)35 b(\(Channels\))1585 b(131)136 1121 y FF(15.1)49
-b(The)30 b(Channel)g(Mo)s(del)87 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(131)136 1234 y(15.2)49
-b(Creating)31 b(a)g(Channel)f(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(131)136 1347 y(15.3)49
-b(W)-8 b(riting)32 b(Ob)5 b(jects)30 b(to)i(a)e(Channel)47
-b(.)f(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(132)136
-1461 y(15.4)49 b(Reading)31 b(Ob)5 b(jects)31 b(from)f(a)g(Channel)64
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(132)136
-1574 y(15.5)49 b(Sa)m(ving)31 b(and)f(Restoring)h(Multiple)g(Ob)5
-b(jects)34 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(133)136 1687
-y(15.6)49 b(V)-8 b(alidating)33 b(Input)77 b(.)46 b(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(133)136
-1800 y(15.7)49 b(Storing)31 b(an)f(ID)h(String)f(with)g(an)g(Ob)5
-b(ject)62 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(133)136
-1913 y(15.8)49 b(The)30 b(T)-8 b(extual)32 b(Output)d(F)-8
-b(ormat)31 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(134)136 2026 y(15.9)49 b(Con)m(trolling)32 b(the)f(Amoun)m(t)f(of)h
-(Output)59 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(135)136
-2139 y(15.10)t(Con)m(trolling)32 b(Commen)m(ting)k(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(137)136 2252 y(15.11)t(Editing)31 b(T)-8 b(extual)31
-b(Output)69 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(138)136 2365 y(15.12)t(Mixing)32 b(Ob)5 b(jects)30
-b(with)g(other)h(T)-8 b(ext)33 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(139)136 2478 y(15.13)t(Reading)31 b(Ob)5 b(jects)31
-b(from)f(Files)71 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(139)136 2591 y(15.14)t(W)-8 b(riting)32 b(Ob)5 b(jects)30
-b(to)i(Files)54 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(140)136 2704 y(15.15)t(Reading)31 b(and)f(W)-8
-b(riting)32 b(Ob)5 b(jects)30 b(to)h(other)g(Places)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(141)0 2909 y FD(16)32 b(Storing)k(AST)e(Ob)6
-b(jects)35 b(in)g(FITS)f(Headers)h(\(FitsChans\))1146
-b(143)136 3022 y FF(16.1)49 b(The)30 b(Nativ)m(e)j(FITS)c(Enco)s(ding)
-74 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(143)136 3135 y(16.2)49 b(The)30 b(FitsChan)h(Mo)s(del)47
-b(.)e(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(143)136 3248 y(16.3)49 b(Creating)31 b(a)g(FitsChan)62
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(144)136 3361 y(16.4)49 b(Addressing)30 b(Cards)f(in)h(a)h(FitsChan)93
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(145)136
-3474 y(16.5)49 b(W)-8 b(riting)32 b(Nativ)m(e)g(Ob)5
-b(jects)31 b(to)g(a)g(FitsChan)71 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(146)136 3588 y(16.6)49 b(Extracting)32 b(Individual)d(Cards)h(from)g
-(a)g(FitsChan)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(146)136 3701 y(16.7)49
-b(The)30 b(Nativ)m(e)j(FitsChan)d(Output)f(F)-8 b(ormat)29
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(147)136 3814 y(16.8)49
-b(Adding)30 b(Individual)g(Cards)f(to)i(a)g(FitsChan)83
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(148)136 3927 y(16.9)49 b(Adding)30
-b(Concatenated)i(Cards)d(to)i(a)g(FitsChan)84 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)60 b(149)136 4040 y(16.10)t(Reading)31 b(Nativ)m(e)i(Ob)5
-b(jects)30 b(F)-8 b(rom)31 b(a)g(FitsChan)63 b(.)46 b(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(149)136 4153 y(16.11)t(Sa)m(ving)31 b(and)f(Restoring)h(Multiple)g
-(Ob)5 b(jects)31 b(in)f(a)h(FitsChan)89 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(150)136 4266 y(16.12)t(Mixing)32
-b(Nativ)m(e)g(Ob)5 b(jects)30 b(with)g(Other)g(FITS)g(Cards)62
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)60 b(150)136 4379 y(16.13)t(Finding)31 b(and)e(Changing)h
-(Cards)g(in)g(a)h(FitsChan)62 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(150)136
-4492 y(16.14)t(Source)31 b(and)e(Sink)h(F)-8 b(unctions)31
-b(for)f(FitsChans)23 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(151)0
-4697 y FD(17)32 b(Using)k(F)-9 b(oreign)36 b(FITS)e(Enco)s(dings)2079
-b(153)136 4810 y FF(17.1)49 b(The)30 b(F)-8 b(oreign)32
-b(FITS)e(Enco)s(dings)73 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(153)136 4923 y(17.2)49 b(Limitations)32 b(of)f(F)-8
-b(oreign)31 b(Enco)s(dings)51 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(154)136 5036 y(17.3)49 b(Iden)m(tifying)31 b(F)-8
-b(oreign)32 b(Enco)s(dings)d(on)i(Input)86 b(.)46 b(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(155)136 5149 y(17.4)49 b(Reading)31 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)67
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(157)136 5262 y(17.5)49 b(Remo)m(ving)32 b(W)m(CS)e(Information)h
-(from)e(FITS)h(Headers|the)h(Destructiv)m(e)h(Read)62
-b(.)46 b(.)g(.)f(.)h(.)60 b(158)136 5375 y(17.6)49 b(Propagating)32
-b(W)m(CS)e(Information)h(through)e(Data)j(Pro)s(cessing)f(Steps)90
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(159)136
-5488 y(17.7)49 b(W)-8 b(riting)32 b(F)-8 b(oreign)32
-b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)50 b(.)c(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(160)0
-5693 y FD(18)32 b(Storing)k(AST)e(Ob)6 b(jects)35 b(as)g(XML)g
-(\(XmlChan\))1565 b(163)p eop end
-%%Page: 7 7
-TeXDict begin 7 6 bop 0 52 a Fy(CONTENTS)3163 b FF(vii)136
-351 y(18.1)49 b(Reading)31 b(IV)m(O)m(A)g(Space-Time-Co)s(ordinates)h
-(XML)e(\(STC-X\))h(Descriptions)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)60
-b(164)0 563 y FD(19)32 b(Reading)k(and)f(writing)f(STC-S)g
-(descriptions)i(\(StcsChans\))1047 b(167)0 775 y(20)32
-b(Creating)j(Y)-9 b(our)35 b(Own)f(Priv)-6 b(ate)35 b(Mappings)h(\(In)m
-(traMaps\))1139 b(169)136 889 y FF(20.1)49 b(The)30 b(Need)h(for)f
-(Extensibilit)m(y)j(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(169)136 1004 y(20.2)49 b(The)30 b(In)m(traMap)h(Mo)s(del)39
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(169)136 1118 y(20.3)49 b(Limitations)32 b(of)f(In)m(traMaps)89
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(169)136 1233 y(20.4)49 b(W)-8 b(riting)32 b(a)f(T)-8
-b(ransformation)30 b(F)-8 b(unction)44 b(.)i(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(170)136 1347 y(20.5)49 b(Registering)32 b(a)f(T)-8
-b(ransformation)30 b(F)-8 b(unction)43 b(.)i(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(171)136 1462 y(20.6)49 b(Creating)31 b(an)g(In)m(traMap)73
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(172)136 1576 y(20.7)49 b(Restricted)32 b(Implemen)m(tations)f(of)g(T)
--8 b(ransformation)30 b(F)-8 b(unctions)34 b(.)46 b(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(173)136 1691 y(20.8)49
-b(V)-8 b(ariable)32 b(Num)m(b)s(ers)d(of)i(Co)s(ordinates)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(173)136 1806
-y(20.9)49 b(Adapting)31 b(a)g(T)-8 b(ransformation)30
-b(F)-8 b(unction)31 b(to)g(Individual)f(In)m(traMaps)48
-b(.)e(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(174)136
-1920 y(20.10)t(Simplifying)30 b(In)m(traMaps)58 b(.)46
-b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(175)136 2035 y(20.11)t(W)-8 b(riting)32 b(and)e(Reading)h(In)m
-(traMaps)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(176)136 2149 y(20.12)t(Managing)32 b(T)-8 b(ransformation)31
-b(F)-8 b(unctions)31 b(in)f(Libraries)73 b(.)46 b(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(177)0
-2361 y FD(21)32 b(Pro)s(ducing)37 b(Graphical)e(Output)f(\(Plots\))1813
-b(179)136 2475 y FF(21.1)49 b(The)30 b(Plot)i(Mo)s(del)j(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(179)136 2590 y(21.2)49 b(Plotting)32 b(Sym)m(b)s(ols)51
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(179)136 2704 y(21.3)49 b(Plotting)32 b(Geo)s(desic)g(Curv)m
-(es)80 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(180)136 2819 y(21.4)49 b(Plotting)32 b(Curv)m(es)e(P)m(arallel)i(to)f
-(Axes)81 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(181)136 2933 y(21.5)49 b(Plotting)32 b(Generalized)g(Curv)m(es)38
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(181)136 3048 y(21.6)49 b(Clipping)d(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(181)136 3162 y(21.7)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(Mapping)24
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(182)136 3277 y(21.8)49 b(Using)31 b(a)g(Plot)g(as)g(a)f(F)-8
-b(rame)56 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-60 b(182)136 3391 y(21.9)49 b(Regions)32 b(of)e(V)-8
-b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)67 b(.)45 b(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)60 b(183)136 3506 y(21.10)t(Plotting)32 b(Borders)75
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)60 b(183)136 3620 y(21.11)t(Plotting)32 b(T)-8
-b(ext)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(184)136 3735 y(21.12)t(Plotting)32
-b(a)f(Grid)54 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(184)136 3850 y(21.13)t(Con)m(trolling)32
-b(the)f(App)s(earance)f(of)g(Sub-strings)43 b(.)j(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(184)136 3964 y(21.14)t(Pro)s(ducing)30 b(Logarithmic)h(Axes)91
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(185)136
-4079 y(21.15)t(Cho)s(osing)30 b(a)h(Graphics)f(P)m(ac)m(k)-5
-b(age)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(186)0 4290 y FD(22)32 b(Compiling)k(and)e(Linking)i(Soft)m(w)m(are)e
-(that)g(Uses)i(AST)1290 b(187)136 4405 y FF(22.1)49 b(Accessing)32
-b(the)f(\\ast.h")g(Header)g(File)h(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)60 b(187)136 4519 y(22.2)49 b(Linking)31 b(with)f(AST)f(F)-8
-b(acilities)62 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(187)136 4634 y(22.3)49 b(Building)31 b(AD)m(AM)h(Applications)f(that)
-g(Use)g(AST)e(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(188)0 4846 y FD(A)d(The)35
-b(AST)g(Class)f(Hierarc)m(h)m(y)2307 b(189)0 5058 y(B)62
-b(AST)35 b(F)-9 b(unction)36 b(Descriptions)2241 b(191)0
-5269 y(C)60 b(AST)35 b(A)m(ttribute)f(Descriptions)2207
-b(389)0 5481 y(D)56 b(AST)35 b(Class)g(Descriptions)2403
-b(485)0 5693 y(E)67 b(UNIX)35 b(Command)g(Descriptions)2101
-b(527)p eop end
-%%Page: 8 8
-TeXDict begin 8 7 bop 0 52 a FF(viii)3140 b Fy(CONTENTS)0
-351 y FD(F)70 b(FITS-W)m(CS)34 b(Co)m(v)m(erage)2523
-b(531)136 465 y FF(F.1)80 b(P)m(ap)s(er)31 b(I)f(-)g(General)i(Linear)e
-(Co)s(ordinates)c(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(531)345
-579 y(F.1.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(531)345 693 y(F.1.2)92 b(Use)31
-b(and)f(Choice)h(of)f(CTYPE)p Fx(i)39 b FF(k)m(eyw)m(ords)71
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)60 b(531)345 807 y(F.1.3)92 b(Choice)31 b(of)g(Reference)g
-(P)m(oin)m(t)57 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(533)345 922 y(F.1.4)92 b(Choice)31 b(of)g(Axis)f(Ordering)49
-b(.)d(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(533)345
-1036 y(F.1.5)92 b(Alternate)32 b(Axis)f(Descriptions)50
-b(.)c(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(533)136 1150
-y(F.2)80 b(P)m(ap)s(er)31 b(I)s(I)e(-)i(Celestial)h(Co)s(ordinates)h(.)
-46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(534)345
-1264 y(F.2.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(534)345 1378 y(F.2.2)92 b(Choice)31
-b(of)g(LONPOLE/LA)-8 b(TPOLE)36 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(534)345 1492 y(F.2.3)92 b(User)31 b(De\014ned)f(Fiducial)h(P)m(oin)m
-(ts)82 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(536)345 1606
-y(F.2.4)92 b(Common)30 b(Non-Standard)g(F)-8 b(eatures)54
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)60 b(536)136 1720 y(F.3)80 b(P)m(ap)s(er)31
-b(I)s(I)s(I)d(-)j(Sp)s(ectral)f(Co)s(ordinates)82 b(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(537)345 1834
-y(F.3.1)92 b(Requiremen)m(ts)31 b(for)f(a)h(Successful)f(W)-8
-b(rite)32 b(Op)s(eration)61 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)60 b(537)345 1948 y(F.3.2)92 b(Common)30
-b(Non-Standard)g(F)-8 b(eatures)54 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(537)136 2062 y(F.4)80 b(P)m(ap)s(er)31 b(IV)f(-)h(Co)s(ordinate)f
-(Distortions)78 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(539)345 2176 y(F.4.1)92 b(The)30 b(\\-SIP")h(distortion)g(co)s(de)76
-b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(539)0 2386 y
-FD(G)54 b(Changes)35 b(and)g(New)f(F)-9 b(eatures)2239
-b(540)136 2500 y FF(G.1)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.1)
-47 b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(540)136 2614 y(G.2)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(541)136 2728 y(G.3)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(542)136 2842 y(G.4)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(543)136 2956 y(G.5)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(544)136 3070 y(G.6)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(545)136 3184 y(G.7)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(547)136 3298 y(G.8)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-2)
-42 b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(548)136
-3412 y(G.9)68 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-3)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(548)136
-3526 y(G.10)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-4)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(549)136
-3640 y(G.11)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-5)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(549)136
-3754 y(G.12)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-7)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(549)136
-3868 y(G.13)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-8)42
-b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(550)136
-3982 y(G.14)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V1.8-13)68
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(550)136
-4096 y(G.15)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V2.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(551)136 4210 y(G.16)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(553)136 4324 y(G.17)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(555)136 4438 y(G.18)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(556)136 4553 y(G.19)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(557)136 4667 y(G.20)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(558)136 4781 y(G.21)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(559)136 4895 y(G.22)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(560)136 5009 y(G.23)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V3.7)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(560)136 5123 y(G.24)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(560)136 5237 y(G.25)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(561)136 5351 y(G.26)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(561)136 5465 y(G.27)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(562)136 5579 y(G.28)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.4)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(563)136 5693 y(G.29)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.5)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(564)p eop end
-%%Page: 9 9
-TeXDict begin 9 8 bop 0 52 a Fy(SUN/211.26)3224 b FF(ix)136
-351 y(G.30)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V4.6)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(565)136 464 y(G.31)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.0)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(565)136 577 y(G.32)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.1)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(565)136 690 y(G.33)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.2)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(566)136 803 y(G.34)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3)47
-b(.)e(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60
-b(567)136 916 y(G.35)23 b(Changes)31 b(In)m(tro)s(duced)e(in)h(V5.3-1)
-42 b(.)k(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)60 b(568)p
-eop end
-%%Page: 10 10
-TeXDict begin 10 9 bop 0 52 a FF(x)3247 b Fy(SUN/211.26)p
-eop end
-%%Page: 1 11
-TeXDict begin 1 10 bop 3734 52 a FF(1)p 945 709 1890
-12 v 1755 898 a Fz(AST)1202 1047 y(A)45 b(Library)g(for)g(Handling)1097
-1196 y(W)-11 b(orld)45 b(Co)t(ordinate)h(Systems)1486
-1346 y(in)f(Astronom)l(y)1753 1592 y(V5.3)p 945 1783
-V 1111 2176 a Fx(This)33 b(is)g(the)g(C)f(version)h(of)g(this)g(do)-5
-b(cument.)985 2289 y(F)e(or)33 b(the)g(F)-7 b(ortr)i(an)35
-b(version,)e(ple)-5 b(ase)34 b(se)-5 b(e)33 b(SUN/210.)0
-2865 y Fz(1)135 b(In)l(tro)t(duction)0 3112 y FF(W)-8
-b(elcome)30 b(to)d(the)h(AST)e(library)-8 b(.)40 b(If)26
-b(y)m(ou)i(are)f(writing)g(soft)m(w)m(are)i(for)e(astronom)m(y)h(and)e
-(need)h(to)h(use)f(celestial)0 3225 y(co)s(ordinates)k(\()p
-Fx(e.g.)g FF(RA)f(and)g(Dec\),)i(sp)s(ectral)f(co)s(ordinates)h(\()p
-Fx(e.g.)e FF(w)m(a)m(v)m(elength,)j(frequency)-8 b(,)31
-b Fx(etc.)p FF(\),)g(or)f(other)0 3338 y(co)s(ordinate)i(system)f
-(information,)g(then)g(this)g(library)f(should)g(b)s(e)h(of)g(in)m
-(terest.)43 b(It)31 b(pro)m(vides)g(solutions)h(for)0
-3450 y(most)i(of)f(the)h(problems)e(y)m(ou)i(will)g(meet)g(and)e(allo)m
-(ws)j(y)m(ou)f(to)g(write)f(robust)g(and)f(\015exible)i(soft)m(w)m
-(are.)51 b(It)33 b(is)0 3563 y(able)e(to)g(read)f(and)g(write)h(W)m(CS)
-f(information)h(in)f(a)h(v)-5 b(ariet)m(y)31 b(of)g(formats,)g
-(including)f(FITS-W)m(CS.)0 3848 y Fw(1.1)112 b(What)38
-b(Problems)g(Do)s(es)f(AST)h(T)-9 b(ac)m(kle?)0 4064
-y FF(Here)43 b(are)h(some)f(of)g(the)g(main)g(problems)f(y)m(ou)h(ma)m
-(y)h(face)g(when)e(handling)g(w)m(orld)h(co)s(ordinate)g(system)0
-4177 y(\(W)m(CS\))31 b(information)g(and)f(the)g(solutions)h(that)g
-(AST)f(pro)m(vides:)0 4416 y FD(1.)47 b(The)34 b(V)-9
-b(ariet)m(y)35 b(of)g(Co)s(ordinate)g(Systems)227 4529
-y FF(Astronomers)29 b(use)g(a)g(wide)g(range)g(of)g(di\013ering)g(co)s
-(ordinate)h(systems)f(to)h(describ)s(e)e(p)s(ositions)h(within)227
-4642 y(a)24 b(v)-5 b(ariet)m(y)25 b(of)e(ph)m(ysical)h(domains.)39
-b(F)-8 b(or)24 b(instance,)h(there)f(are)g(a)g(large)g(n)m(um)m(b)s(er)
-e(of)i(celestial)i(co)s(ordinate)227 4755 y(systems)35
-b(in)g(use)f(within)h(astronom)m(y)h(to)f(describ)s(e)f(p)s(ositions)h
-(on)g(the)g(sky)-8 b(.)55 b(Understanding)34 b(these,)227
-4868 y(and)24 b(kno)m(wing)h(ho)m(w)f(to)h(con)m(v)m(ert)h(co)s
-(ordinates)f(b)s(et)m(w)m(een)g(them,)h(can)f(require)f(considerable)h
-(exp)s(ertise.)227 4981 y(It)34 b(can)g(also)g(b)s(e)f(di\016cult)h(to)
-g(decide)g(whic)m(h)f(of)h(them)f(y)m(our)h(soft)m(w)m(are)h(should)e
-(supp)s(ort.)48 b(The)33 b(same)227 5094 y(applies)25
-b(to)h(co)s(ordinate)g(systems)f(describing)f(other)h(domains,)h(suc)m
-(h)f(as)g(p)s(osition)g(within)g(an)f(electro-)227 5207
-y(magnetic)32 b(sp)s(ectrum.)227 5354 y FD(Solution.)69
-b FF(AST)39 b(has)h(built-in)f(kno)m(wledge)i(of)f(man)m(y)f(co)s
-(ordinate)i(systems)f(and)f(allo)m(ws)i(y)m(ou)f(to)227
-5467 y(con)m(v)m(ert)30 b(freely)e(b)s(et)m(w)m(een)h(them)f(without)g
-(sp)s(ecialist)h(kno)m(wledge.)41 b(This)28 b(a)m(v)m(oids)h(the)f
-(need)g(to)h(em)m(b)s(ed)227 5580 y(details)43 b(of)e(sp)s(eci\014c)g
-(co)s(ordinate)h(systems)f(in)g(y)m(our)g(soft)m(w)m(are.)75
-b(Y)-8 b(ou)42 b(also)g(b)s(ene\014t)f(automatically)227
-5693 y(when)30 b(new)g(co)s(ordinate)h(systems)f(are)h(added)f(to)h
-(AST.)p eop end
-%%Page: 2 12
-TeXDict begin 2 11 bop 0 52 a FF(2)2856 b Fy(1)91 b(INTR)m(ODUCTION)0
-351 y FD(2.)47 b(Storing)35 b(and)g(Retrieving)g(W)m(CS)g(Information)
-227 464 y FF(Storing)44 b(co)s(ordinate)h(system)f(information)g(in)f
-(astronomical)j(datasets)f(and)e(retrieving)h(it)g(later)227
-577 y(can)35 b(presen)m(t)g(a)g(considerable)g(c)m(hallenge.)56
-b(T)m(ypically)-8 b(,)37 b(it)f(requires)e(kno)m(wledge)h(of)g(rather)g
-(complex)227 690 y(con)m(v)m(en)m(tions)f(\()p Fx(e.g.)d
-FF(FITS\))g(whic)m(h)h(are)g(lo)m(w-lev)m(el,)j(often)d(mis-in)m
-(terpreted)g(and)f(ma)m(y)h(b)s(e)f(sub)5 b(ject)32 b(to)227
-803 y(c)m(hange.)66 b(Exc)m(hanging)39 b(information)g(with)f(other)g
-(soft)m(w)m(are)i(systems)e(is)h(further)e(complicated)j(b)m(y)227
-916 y(the)31 b(n)m(um)m(b)s(er)e(of)h(di\013eren)m(t)h(con)m(v)m(en)m
-(tions)i(in)d(use.)227 1085 y FD(Solution.)48 b FF(AST)32
-b(com)m(bines)h(a)f(unifying)g(high-lev)m(el)i(description)f(of)g(W)m
-(CS)f(information)h(with)f(the)227 1198 y(abilit)m(y)k(to)f(sa)m(v)m(e)
-i(and)c(restore)j(this)e(using)g(a)h(v)-5 b(ariet)m(y)36
-b(of)f(formats.)53 b(Details)36 b(of)f(the)g(formats,)h(whic)m(h)227
-1310 y(include)29 b(FITS,)f(are)h(handled)e(in)m(ternally)j(b)m(y)e
-(AST.)g(This)g(frees)h(y)m(ou)g(from)f(the)h(need)f(to)h(understand)227
-1423 y(them)k(or)g(em)m(b)s(ed)g(the)g(details)h(in)f(y)m(our)g(soft)m
-(w)m(are.)50 b(Again,)35 b(y)m(ou)e(b)s(ene\014t)f(automatically)k
-(when)c(new)227 1536 y(formats)f(are)g(added)e(to)i(AST.)0
-1761 y FD(3.)47 b(Generating)35 b(Graphical)g(Output)227
-1874 y FF(Pro)s(ducing)40 b(graphical)h(displa)m(ys)g(in)m(v)m(olving)h
-(curvilinear)e(co)s(ordinate)i(systems,)h(suc)m(h)d(as)h(celestial)227
-1987 y(co)s(ordinate)i(grids,)j(can)c(b)s(e)g(complicated.)78
-b(P)m(articular)44 b(di\016culties)f(arise)f(when)g(handling)f(large)
-227 2100 y(areas)35 b(of)e(sky)-8 b(,)35 b(the)f(p)s(olar)f(regions)h
-(and)f(discon)m(tin)m(uous)h(\()p Fx(e.g.)f FF(segmen)m(ted\))i(sky)e
-(pro)5 b(jections.)51 b(Ev)m(en)227 2213 y(just)30 b(n)m(um)m(b)s
-(ering)f(and)h(lab)s(elling)h(curvilinear)g(axes)g(is)f(rarely)h
-(straigh)m(tforw)m(ard.)227 2382 y FD(Solution.)73 b
-FF(AST)40 b(pro)m(vides)h(plotting)h(facilities)h(esp)s(ecially)f
-(designed)f(for)g(use)g(with)f(curvilinear)227 2495 y(co)s(ordinate)35
-b(systems.)49 b(These)33 b(include)h(the)f(plotting)i(of)e(axes)h(and)f
-(complete)i(lab)s(elled)f(co)s(ordinate)227 2607 y(grids.)65
-b(A)39 b(large)h(n)m(um)m(b)s(er)d(of)i(options)g(are)g(pro)m(vided)f
-(for)h(tailoring)h(the)e(output)h(to)g(y)m(our)g(sp)s(eci\014c)227
-2720 y(needs.)0 2945 y FD(4.)47 b(Aligning)35 b(Data)g(from)g
-(Di\013eren)m(t)g(Sources)227 3058 y FF(One)h(of)g(the)h(main)f(uses)f
-(of)i(co)s(ordinate)g(systems)f(is)g(to)h(facilitate)i(the)d(in)m
-(ter-comparison)h(of)g(data)227 3171 y(from)29 b(di\013eren)m(t)g
-(sources.)40 b(A)29 b(t)m(ypical)h(use)f(migh)m(t)g(b)s(e)g(to)g(plot)g
-(\(sa)m(y\))i(radio)e(con)m(tours)g(o)m(v)m(er)h(an)f(optical)227
-3284 y(image.)61 b(In)37 b(practice,)j(ho)m(w)m(ev)m(er,)g(di\013eren)m
-(t)d(celestial)i(co)s(ordinate)f(systems)f(ma)m(y)g(ha)m(v)m(e)h(b)s
-(een)e(used,)227 3397 y(making)31 b(accurate)h(alignmen)m(t)g(far)e
-(from)g(simple.)227 3566 y FD(Solution)h FF(AST)f(pro)m(vides)h(a)g
-(one-step)g(metho)s(d)g(of)f(aligning)i(datasets,)g(searc)m(hing)g(for)
-e(all)i(p)s(ossible)227 3679 y(in)m(termediate)39 b(co)s(ordinate)g
-(systems.)62 b(This)37 b(mak)m(es)h(it)g(simple)g(to)g(directly)h(in)m
-(ter-relate)g(the)f(pixel)227 3792 y(co)s(ordinates)31
-b(of)g(di\013eren)m(t)g(datasets.)0 4016 y FD(5.)47 b(Handling)35
-b(Di\013eren)m(t)g(T)m(yp)s(es)g(of)g(Co)s(ordinate)f(System)227
-4129 y FF(Not)44 b(all)g(co)s(ordinate)g(systems)e(used)h(in)f
-(astronom)m(y)i(are)f(celestial)j(ones,)g(so)d(if)g(y)m(ou)g(are)g
-(writing)227 4242 y(general-purp)s(ose)35 b(soft)m(w)m(are)h(suc)m(h)f
-(as)g(\(sa)m(y\))h(a)g(displa)m(y)f(to)s(ol,)i(y)m(ou)f(ma)m(y)f(also)h
-(need)f(to)g(handle)g(axes)227 4355 y(represen)m(ting)43
-b(w)m(a)m(v)m(elength,)48 b(distance,)e(time)d(or)f(whatev)m(er)h(else)
-h(comes)f(along.)77 b(Ob)m(viously)-8 b(,)46 b(y)m(ou)227
-4468 y(w)m(ould)30 b(prefer)g(not)h(to)g(handle)f(eac)m(h)h(one)g(as)g
-(a)f(sp)s(ecial)h(case.)227 4637 y FD(Solution)h FF(AST)f(uses)g(the)g
-(same)h(\015exible)f(high-lev)m(el)j(mo)s(del)d(to)h(describ)s(e)e(all)
-j(t)m(yp)s(es)e(of)h(co)s(ordinate)227 4750 y(system.)48
-b(This)32 b(allo)m(ws)i(y)m(ou)f(to)g(write)g(soft)m(w)m(are)h(that)g
-(handles)e(di\013eren)m(t)h(kinds)f(of)g(co)s(ordinate)i(axis)227
-4863 y(without)d(in)m(tro)s(ducing)f(sp)s(ecial)h(cases.)0
-5218 y Fw(1.2)112 b(Other)38 b(Design)g(Ob)6 b(jectiv)m(es)0
-5467 y FF(As)43 b(w)m(ell)i(as)f(its)f(scien)m(ti\014c)i(ob)5
-b(jectiv)m(es,)49 b(the)44 b(AST)e(library's)i(design)f(includes)g(a)h
-(n)m(um)m(b)s(er)e(of)i(tec)m(hnical)0 5580 y(criteria)c(in)m(tended)e
-(to)h(mak)m(e)g(it)g(applicable)h(to)f(as)g(wide)f(a)h(range)f(of)h
-(pro)5 b(jects)39 b(as)f(p)s(ossible.)65 b(The)38 b(main)0
-5693 y(considerations)31 b(are)g(describ)s(ed)e(here:)p
-eop end
-%%Page: 3 13
-TeXDict begin 3 12 bop 0 52 a Fy(1.2)92 b(Other)30 b(Design)h(Ob)5
-b(jectiv)m(es)2551 b FF(3)111 351 y(1.)46 b FD(Minim)m(um)36
-b(Soft)m(w)m(are)e(Dep)s(endencies.)41 b FF(The)30 b(AST)f(library)h
-(dep)s(ends)f(on)h(no)g(other)g(other)h(soft-)227 464
-y(w)m(are)411 431 y Fv(1)451 464 y FF(.)111 680 y(2.)46
-b FD(En)m(vironmen)m(t)d(Indep)s(endence.)61 b FF(AST)37
-b(is)g(designed)g(so)g(that)h(it)g(can)f(op)s(erate)h(in)f(a)h(v)-5
-b(ariet)m(y)38 b(of)227 793 y(\\programming)31 b(en)m(vironmen)m(ts")g
-(and)f(is)g(not)h(tied)g(to)g(an)m(y)g(particular)g(one.)41
-b(T)-8 b(o)31 b(allo)m(w)g(this,)g(it)g(uses)227 906
-y(simple,)g(\015exible)f(in)m(terfaces)i(to)f(obtain)g(the)g(follo)m
-(wing)h(services:)336 1154 y Fu(\017)46 b FD(Data)37
-b(Storage.)45 b FF(Data)34 b(I/O)e(op)s(erations)h(are)f(based)g(on)g
-(text)h(and/or)f(FITS)g(headers.)45 b(This)427 1267 y(mak)m(es)24
-b(it)g(easy)g(to)g(in)m(terface)h(to)e(a)h(wide)f(v)-5
-b(ariet)m(y)25 b(of)e(astronomical)i(data)f(formats)f(in)g(a)g(mac)m
-(hine-)427 1380 y(indep)s(enden)m(t)29 b(w)m(a)m(y)-8
-b(.)336 1541 y Fu(\017)46 b FD(Graphics.)74 b FF(Graphical)42
-b(output)f(is)g(pro)s(duced)f Fx(via)h FF(a)h(simple)f(generic)h
-(graphics)g(in)m(terface,)427 1653 y(whic)m(h)48 b(ma)m(y)h(easily)h(b)
-s(e)d(re-implemen)m(ted)i(o)m(v)m(er)h(di\013eren)m(t)f(graphics)f
-(systems.)94 b(AST)48 b(pro-)427 1766 y(vides)32 b(a)g(default)g
-(implemen)m(tation)h(based)f(on)f(the)h(widely-used)g(PGPLOT)f
-(graphics)g(system)427 1879 y(\(SUN/15\).)336 2040 y
-Fu(\017)46 b FD(Error)39 b(Handling.)52 b FF(Error)33
-b(messages)i(are)f(written)h(to)f(standard)f(error)h(b)m(y)g(default,)h
-(but)f(go)427 2153 y(through)k(a)i(simple)e(generic)i(in)m(terface)h
-(similar)e(to)g(that)h(used)e(for)g(graphics)h(\(ab)s(o)m(v)m(e\).)68
-b(This)427 2265 y(p)s(ermits)33 b(error)h(message)h(deliv)m(ery)f
-Fx(via)g FF(other)g(routes)g(when)f(necessary)h(\()p
-Fx(e.g.)51 b FF(in)33 b(a)i(graphical)427 2378 y(in)m(terface\).)111
-2627 y(3.)46 b FD(Multiple)h(Language)f(Supp)s(ort.)70
-b FF(AST)39 b(has)h(b)s(een)g(designed)g(to)h(b)s(e)e(called)j(from)d
-(more)i(than)227 2739 y(one)33 b(language.)50 b(Both)33
-b(C)f(and)g(F)-8 b(ortran)34 b(in)m(terfaces)g(are)f(a)m(v)-5
-b(ailable)35 b(\(see)f(SUN/210)g(for)f(the)g(F)-8 b(ortran)227
-2852 y(v)m(ersion\))31 b(and)f(use)g(from)g(C++)g(is)g(also)h(straigh)m
-(tforw)m(ard)g(if)g(the)f(C)g(in)m(terface)i(is)f(included)e(using:)427
-3087 y Ft(extern)41 b("C")i({)427 3187 y(#include)e("ast.h")427
-3286 y(})227 3535 y FF(A)d(JNI)g(in)m(terface)i(\(kno)m(wn)e(as)g
-(\\JNIAST")g(-)g(see)h(h)m(ttp://www.starlink.ac.uk/jniast/\))i(has)d
-(also)227 3648 y(b)s(een)30 b(dev)m(elop)s(ed)h(b)m(y)f(Starlink)g
-(whic)m(h)g(allo)m(ws)i(AST)e(to)h(b)s(e)e(used)h(from)g(Ja)m(v)-5
-b(a.)111 3864 y(4.)46 b FD(Ob)6 b(ject)44 b(Orien)m(ted)g(Design.)66
-b FF(AST)38 b(uses)g(\\ob)5 b(ject)40 b(orien)m(ted")g(tec)m(hniques)f
-(in)m(ternally)h(in)e(order)227 3977 y(to)h(pro)m(vide)f(a)g
-(\015exible)h(and)e(easily-extended)i(programming)f(mo)s(del.)63
-b(A)38 b(fairly)h(traditional)g(call-)227 4090 y(ing)f(in)m(terface)h
-(is)e(pro)m(vided,)i(ho)m(w)m(ev)m(er,)i(so)d(that)g(the)f(library's)h
-(facilities)h(are)f(easily)h(accessible)g(to)227 4202
-y(programmers)30 b(using)g(C)g(and)g(F)-8 b(ortran.)111
-4419 y(5.)46 b FD(P)m(ortabilit)m(y)-9 b(.)52 b FF(AST)33
-b(is)h(implemen)m(ted)h(en)m(tirely)g(in)e(ANSI)h(standard)f(C)h(and,)g
-(when)f(called)i Fx(via)f FF(its)227 4531 y(C)c(in)m(terface,)i(mak)m
-(es)g(no)e(explicit)i(use)e(of)g(an)m(y)h(mac)m(hine-dep)s(enden)m(t)f
-(facilities.)227 4696 y(The)42 b(F)-8 b(ortran)43 b(in)m(terface)g(is,)
-j(una)m(v)m(oidably)-8 b(,)46 b(mac)m(hine)d(dep)s(enden)m(t.)75
-b(Ho)m(w)m(ev)m(er,)48 b(the)42 b(p)s(oten)m(tial)i(for)227
-4809 y(problems)34 b(has)f(b)s(een)h(minimised)f(b)m(y)h(encapsulating)
-h(the)f(in)m(terface)i(la)m(y)m(er)g(in)d(a)i(compact)g(set)g(of)f(C)
-227 4922 y(macros)f(whic)m(h)g(facilitate)i(its)e(transfer)f(to)i
-(other)f(platforms.)47 b(No)33 b(F)-8 b(ortran)34 b(compiler)f(is)f
-(needed)h(to)227 5035 y(build)d(the)g(library)-8 b(.)227
-5199 y(Curren)m(tly)g(,)33 b(AST)f(is)h(supp)s(orted)d(b)m(y)j
-(Starlink)f(on)h(PC)f(Lin)m(ux,)g(Sun)f(Solaris)i(and)f(T)-8
-b(ru64)33 b(Unix)f(\(for-)227 5312 y(merly)f(DEC)f(UNIX\))h(platforms.)
-p 0 5425 1512 4 v 104 5479 a Fs(1)138 5510 y Fr(It)26
-b(no)n(w)g(comes)h(with)f(a)h(minimal)g(cut-do)n(wn)e(v)n(ersion)h(of)h
-(the)f(widely-a)n(v)l(ailable)h(SLALIB)e(p)r(ositional)j(astronom)n(y)e
-(library)0 5602 y(\(SUN/67\),)h(including)f(just)h(those)g(functions)g
-(needed)e(b)n(y)h(AST,)g(and)g(the)g(previous)h(dep)r(endency)e(on)h
-(SLALIB)g(is)h(no)g(longer)0 5693 y(presen)n(t)p eop
-end
-%%Page: 4 14
-TeXDict begin 4 13 bop 0 52 a FF(4)2856 b Fy(1)91 b(INTR)m(ODUCTION)0
-351 y Fw(1.3)112 b(What)38 b(Do)s(es)g(\\AST")f(Stand)h(F)-9
-b(or?)0 573 y FF(The)20 b(library)h(name)g(\\AST")g(stands)f(for)h
-(\\AST)-8 b(rometry)21 b(Library".)37 b(The)20 b(name)h(arose)h(when)d
-(it)j(w)m(as)f(though)m(t)0 686 y(that)36 b(kno)m(wledge)g(of)f
-(\\astrometry")h(\()p Fx(i.e.)f FF(celestial)j(co)s(ordinate)d
-(systems\))h(w)m(ould)e(form)h(the)g(bulk)f(of)h(the)0
-799 y(library)-8 b(.)40 b(In)27 b(fact,)i(it)f(turns)e(out)i(that)g
-(astrometry)h(forms)e(only)g(a)h(minor)f(comp)s(onen)m(t,)i(but)e(the)h
-(name)f(AST)0 911 y(has)j(stuc)m(k.)p eop end
-%%Page: 5 15
-TeXDict begin 5 14 bop 3734 52 a FF(5)0 351 y Fz(2)135
-b(Ov)l(erview)46 b(of)f(AST)f(Concepts)0 605 y FF(This)37
-b(section)i(presen)m(ts)f(a)g(brief)f(o)m(v)m(erview)i(of)f(AST)f
-(concepts.)64 b(It)38 b(is)g(in)m(tended)f(as)h(a)g(basic)g(orien)m
-(tation)0 718 y(course)31 b(b)s(efore)f(y)m(ou)g(mo)m(v)m(e)i(on)e(to)h
-(the)g(more)g(tec)m(hnical)h(considerations)f(in)f(subsequen)m(t)g
-(sections.)0 1015 y Fw(2.1)112 b(Relationships)39 b(Bet)m(w)m(een)e(Co)
-s(ordinate)h(Systems)0 1237 y FF(The)33 b(relationships)h(b)s(et)m(w)m
-(een)g(co)s(ordinate)h(systems)f(are)g(represen)m(ted)f(in)h(AST)f(b)m
-(y)g(Ob)5 b(jects)34 b(called)h(Map-)0 1350 y(pings.)j(A)24
-b(Mapping)f(do)s(es)h(not)g(represen)m(t)f(a)i(co)s(ordinate)f(system)g
-(itself,)i(but)d(merely)h(the)g(pro)s(cess)f(b)m(y)h(whic)m(h)0
-1463 y(y)m(ou)31 b(mo)m(v)m(e)h(from)d(one)i(co)s(ordinate)g(system)g
-(to)g(another)g(related)g(one.)0 1627 y(A)43 b(con)m(v)m(enien)m(t)h
-(picture)f(of)f(a)h(Mapping)g(is)f(as)h(a)g(\\blac)m(k)h(b)s(o)m(x")f
-(\(Figure)g(1\))g(in)m(to)h(whic)m(h)e(y)m(ou)h(can)f(feed)0
-1740 y(sets)f(of)g(co)s(ordinates.)144 b(F)-8 b(or)42
-b(eac)m(h)g(set)f(y)m(ou)g(feed)g(in,)i(the)e(Mapping)g(returns)e(a)i
-(corresp)s(onding)f(set)h(of)744 2867 y @beginspecial
-118 @llx 85 @lly 511 @urx 258 @ury 2751 @rwi @setspecial
-%%BeginDocument: sun211_figures/mapping.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 379 3063 a(Figure)31 b(1:)41 b(A)30 b(Mapping)h(view)m(ed)
-g(as)f(a)h(\\blac)m(k)h(b)s(o)m(x")f(for)f(transforming)g(co)s
-(ordinates.)0 3376 y(transformed)d(co)s(ordinates.)41
-b(Since)28 b(eac)m(h)i(set)f(of)f(co)s(ordinates)h(represen)m(ts)f(a)h
-(p)s(oin)m(t)f(in)g(a)h(co)s(ordinate)g(space,)0 3489
-y(the)f(Mapping)f(acts)h(to)g(in)m(ter-relate)i(corresp)s(onding)d(p)s
-(ositions)g(in)g(the)h(t)m(w)m(o)g(spaces,)h(although)f(what)f(these)0
-3602 y(spaces)h(represen)m(t)g(is)f(unsp)s(eci\014ed.)38
-b(Notice)30 b(that)e(a)g(Mapping)g(need)f(not)h(ha)m(v)m(e)h(the)e
-(same)h(n)m(um)m(b)s(er)f(of)g(input)0 3715 y(and)h(output)h(co)s
-(ordinates.)41 b(That)29 b(is,)g(the)g(t)m(w)m(o)h(co)s(ordinate)g
-(spaces)f(whic)m(h)g(it)g(in)m(ter-relates)i(need)e(not)g(ha)m(v)m(e)0
-3828 y(the)i(same)f(n)m(um)m(b)s(er)f(of)i(dimensions.)0
-3991 y(In)38 b(man)m(y)h(cases,)k(the)c(transformation)g(can,)j(in)c
-(principle,)j(b)s(e)e(p)s(erformed)e(in)i(either)g(direction:)59
-b(either)0 4104 y(from)35 b(the)h Fx(input)g FF(co)s(ordinate)h(space)f
-(to)h(the)f Fx(output,)h FF(or)f Fx(vic)-5 b(e)37 b(versa.)57
-b FF(The)36 b(\014rst)f(of)h(these)g(is)g(termed)f(the)0
-4217 y Fx(forwar)-5 b(d)33 b FF(transformation)e(and)e(the)i(other)g
-(the)f Fx(inverse)g FF(transformation.)0 4381 y FD(F)-9
-b(urther)35 b(reading:)40 b FF(F)-8 b(or)32 b(a)e(more)h(complete)h
-(discussion)d(of)i(Mappings,)f(see)h Fu(x)p FF(5.)0 4677
-y Fw(2.2)112 b(Mappings)40 b(Av)-6 b(ailable)0 4900 y
-FF(The)35 b(basic)h(concept)h(of)f(a)g(Mapping)g(\()p
-Fu(x)p FF(2.1\))i(is)e(rather)f(generic)i(and)e(ob)m(viously)h(it)h(is)
-f(necessary)g(to)g(ha)m(v)m(e)0 5013 y(sp)s(eci\014c)31
-b(Mappings)g(that)g(implemen)m(t)h(sp)s(eci\014c)e(relationships)i(b)s
-(et)m(w)m(een)f(co)s(ordinate)h(systems.)42 b(AST)31
-b(pro-)0 5126 y(vides)26 b(a)h(range)g(of)f(these,)i(to)g(p)s(erform)d
-(transformations)h(suc)m(h)g(as)h(the)g(follo)m(wing)g(and,)g(where)f
-(appropriate,)0 5239 y(their)k(in)m(v)m(erses:)136 5504
-y Fu(\017)46 b FF(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)-5
-b(arious)30 b(celestial)j(co)s(ordinate)f(systems)e(\(the)h(SlaMap\).)
-136 5693 y Fu(\017)46 b FF(Con)m(v)m(ersions)31 b(b)s(et)m(w)m(een)g(v)
--5 b(arious)30 b(sp)s(ectral)h(co)s(ordinate)g(systems)g(\(the)g(Sp)s
-(ecMap)f(and)f(GrismMap\).)p eop end
-%%Page: 6 16
-TeXDict begin 6 15 bop 0 52 a FF(6)2171 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)854 1039 y @beginspecial
-44 @llx 119 @lly 541 @urx 306 @ury 2485 @rwi @setspecial
-%%BeginDocument: sun211_figures/series.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1235 a FF(Figure)36 b(2:)52 b(A)35 b(CmpMap)g(\(comp)s
-(ound)f(Mapping\))i(comp)s(osed)g(of)f(t)m(w)m(o)i(comp)s(onen)m(t)f
-(Mappings)f(joined)h(in)0 1348 y(series.)j(The)25 b(output)g(co)s
-(ordinates)g(of)h(the)f(\014rst)f(Mapping)h(feed)g(in)m(to)i(the)e
-(input)f(co)s(ordinates)i(of)f(the)g(second)0 1461 y(one,)31
-b(so)g(that)g(the)f(whole)h(en)m(tit)m(y)h(b)s(eha)m(v)m(es)f(lik)m(e)g
-(a)g(single)g(Mapping.)136 1838 y Fu(\017)46 b FF(Con)m(v)m(ersions)31
-b(b)s(et)m(w)m(een)g(v)-5 b(arious)30 b(time)i(systems)e(\(the)h
-(TimeMap\).)136 2030 y Fu(\017)46 b FF(Con)m(v)m(ersion)31
-b(b)s(et)m(w)m(een)f(2-dimensional)h(spherical)f(celestial)i(co)s
-(ordinates)f(\(longitude)g(and)e(latitude\))227 2143
-y(and)h(a)h(3-dimensional)g(v)m(ectorial)i(p)s(ositions)d(\(the)h
-(SphMap\).)136 2336 y Fu(\017)46 b FF(V)-8 b(arious)26
-b(pro)5 b(jections)25 b(of)g(the)h(celestial)h(sphere)d(on)h(to)h
-(2-dimensional)f(co)s(ordinate)h(spaces|)p Fx(i.e.)f
-FF(map)227 2449 y(pro)5 b(jections)31 b(\(the)g(DssMap)g(and)f
-(WcsMap\).)136 2641 y Fu(\017)46 b FF(P)m(erm)m(utation,)32
-b(in)m(tro)s(duction)f(and)f(elimination)h(of)g(co)s(ordinates)g(\(the)
-g(P)m(ermMap\).)136 2833 y Fu(\017)46 b FF(V)-8 b(arious)21
-b(linear)g(co)s(ordinate)g(transformations)f(\(the)h(MatrixMap,)j
-(WinMap,)f(ShiftMap)d(and)g(Zo)s(omMap\).)136 3026 y
-Fu(\017)46 b FF(General)32 b(N-dimensional)f(p)s(olynomial)f
-(transformations)h(\(the)g(P)m(olyMap\).)136 3218 y Fu(\017)46
-b FF(Lo)s(okup)30 b(tables)h(\(the)g(LutMap\).)136 3411
-y Fu(\017)46 b FF(General-purp)s(ose)24 b(transformations)h(expressed)f
-(using)f(arithmetic)j(op)s(erations)f(and)e(functions)h(sim-)227
-3524 y(ilar)31 b(to)g(those)g(a)m(v)-5 b(ailable)33 b(in)d(C)g(\(the)h
-(MathMap\).)136 3716 y Fu(\017)46 b FF(T)-8 b(ransformations)30
-b(for)f(in)m(ternal)h(use)f(within)g(a)h(program,)f(based)g(on)g(priv)
--5 b(ate)30 b(transformation)g(func-)227 3829 y(tions)h(whic)m(h)f(y)m
-(ou)h(write)f(y)m(ourself)h(in)f(C)g(\(the)h(In)m(traMap\).)0
-4098 y FD(F)-9 b(urther)34 b(reading:)41 b FF(F)-8 b(or)30
-b(a)g(more)g(complete)h(description)f(of)g(eac)m(h)h(of)f(the)g
-(Mappings)g(men)m(tioned)g(ab)s(o)m(v)m(e,)0 4211 y(see)42
-b(its)h(en)m(try)f(in)f(App)s(endix)g(D.)75 b(In)41 b(addition,)46
-b(see)c(the)g(discussion)f(of)h(the)h(P)m(ermMap)f(in)f
-Fu(x)p FF(5.10,)47 b(the)0 4324 y(UnitMap)28 b(in)f Fu(x)p
-FF(5.9)i(and)e(the)g(In)m(traMap)h(in)f Fu(x)p FF(20.)41
-b(The)27 b(Zo)s(omMap)g(is)h(used)e(as)i(an)f(example)h(throughout)f
-Fu(x)p FF(4.)0 4625 y Fw(2.3)112 b(Comp)s(ound)39 b(Mappings)0
-4850 y FF(The)27 b(Mappings)f(describ)s(ed)g(in)h Fu(x)p
-FF(2.2)i(pro)m(vide)e(a)g(set)h(of)f(basic)h(building)e(blo)s(c)m(ks)h
-(from)g(whic)m(h)g(more)g(complex)0 4963 y(Mappings)f(ma)m(y)h(b)s(e)e
-(constructed.)40 b(The)25 b(k)m(ey)i(to)g(doing)f(this)g(is)g(a)h(t)m
-(yp)s(e)f(of)g(Mapping)g(called)i(a)e(CmpMap,)g(or)0
-5076 y(comp)s(ound)k(Mapping.)42 b(A)31 b(CmpMap's)f(role)i(is,)f(in)g
-(principle,)g(v)m(ery)g(simple:)42 b(it)32 b(allo)m(ws)g(an)m(y)f
-(other)h(pair)e(of)0 5189 y(Mappings)c(to)h(b)s(e)e(joined)h(together)h
-(in)m(to)g(a)f(single)h(en)m(tit)m(y)h(whic)m(h)e(b)s(eha)m(v)m(es)g
-(as)g(if)g(it)h(w)m(ere)f(a)h(single)f(Mapping.)0 5302
-y(A)k(CmpMap)g(is)g(therefore)h(a)g(con)m(tainer)h(for)e(another)g
-(pair)h(of)f(Mappings.)0 5467 y(A)c(pair)h(of)f(Mappings)g(ma)m(y)h(b)s
-(e)f(com)m(bined)g(using)g(a)h(CmpMap)f(in)g(either)g(of)h(t)m(w)m(o)h
-(w)m(a)m(ys.)40 b(The)26 b(\014rst)f(of)i(these,)0 5580
-y Fx(in)g(series,)e FF(is)f(illustrated)g(in)g(Figure)g(2.)116
-b(Here,)26 b(the)e(transformations)g(implemen)m(ted)g(b)m(y)g(eac)m(h)h
-(comp)s(onen)m(t)0 5693 y(Mapping)i(are)g(p)s(erformed)e(one)h(after)i
-(the)e(other,)i(with)e(the)h(output)f(from)h(the)f(\014rst)g(Mapping)h
-(feeding)f(in)m(to)p eop end
-%%Page: 7 17
-TeXDict begin 7 16 bop 0 52 a Fy(2.4)92 b(Represen)m(ting)31
-b(Co)s(ordinate)f(Systems)2188 b FF(7)918 1916 y @beginspecial
-152 @llx 155 @lly 463 @urx 420 @ury 2332 @rwi @setspecial
-%%BeginDocument: sun211_figures/parallel.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2112 a(Figure)30 b(3:)41 b(A)30 b(CmpMap)g(comp)s(osed)f
-(of)h(t)m(w)m(o)i(Mappings)e(joined)f(in)h(parallel.)42
-b(Eac)m(h)30 b(comp)s(onen)m(t)h(Mapping)0 2225 y(acts)g(on)g(a)f
-(complemen)m(tary)i(subset)e(of)g(the)h(input)e(and)h(output)g(co)s
-(ordinates.)0 2604 y(the)g(second.)41 b(The)29 b(second)h(w)m(a)m(y)-8
-b(,)32 b Fx(in)g(p)-5 b(ar)g(al)5 b(lel,)33 b FF(is)d(sho)m(wn)f(in)h
-(Figure)g(3.)82 b(In)29 b(this)h(case,)h(eac)m(h)h(Mapping)d(acts)0
-2717 y(on)h(a)h(complemen)m(tary)h(subset)d(of)i(the)g(input)e(and)h
-(output)g(co)s(ordinates.)2572 2684 y Fv(2)0 2884 y FF(The)c(CmpMap)g
-(forms)g(the)h(k)m(ey)g(to)h(building)e(arbitrarily)h(complex)g
-(Mappings)g(b)s(ecause)f(it)i(is)e(itself)i(a)f(form)0
-2997 y(of)39 b(Mapping.)64 b(This)38 b(means)g(that)h(a)g(CmpMap)e(ma)m
-(y)i(con)m(tain)h(other)e(CmpMaps)g(as)g(comp)s(onen)m(ts)h(\()p
-Fx(e.g.)0 3110 y FF(Figure)d(4\).)58 b(This)34 b(nesting)i(of)g
-(CmpMaps)f(can)h(b)s(e)f(rep)s(eated)h(inde\014nitely)-8
-b(,)37 b(so)f(that)g(complex)h(Mappings)0 3223 y(ma)m(y)f(b)s(e)f
-(built)g(in)g(a)h(hierarc)m(hical)g(manner)f(out)g(of)h(simp)s(er)e
-(ones.)56 b(This)34 b(giv)m(es)j(AST)e(great)h(\015exibilit)m(y)h(in)0
-3336 y(the)31 b(co)s(ordinate)g(transformations)f(it)h(can)g(describ)s
-(e.)0 3503 y FD(F)-9 b(urther)28 b(reading:)38 b FF(F)-8
-b(or)26 b(a)f(more)g(complete)h(description)f(of)g(CmpMaps,)g(see)g
-Fu(x)p FF(6.)40 b(Also)25 b(see)g(the)g(CmpMap)0 3616
-y(en)m(try)31 b(in)f(App)s(endix)e(D.)0 3925 y Fw(2.4)112
-b(Represen)m(ting)38 b(Co)s(ordinate)g(Systems)0 4153
-y FF(While)45 b(Mappings)f(\()p Fu(x)p FF(2.1\))i(represen)m(t)e(the)h
-(relationships)f(b)s(et)m(w)m(een)h(co)s(ordinate)g(systems)f(in)g
-(AST,)f(the)0 4266 y(co)s(ordinate)32 b(systems)f(themselv)m(es)h(are)g
-(represen)m(ted)f(b)m(y)g(Ob)5 b(jects)31 b(called)h(F)-8
-b(rames)32 b(\(Figure)g(5\).)86 b(A)32 b(F)-8 b(rame)0
-4379 y(is)41 b(similar)g(in)f(concept)i(to)f(the)g(frame)g(y)m(ou)g
-(migh)m(t)g(dra)m(w)g(around)e(a)i(graph.)71 b(It)41
-b(con)m(tains)h(information)0 4492 y(ab)s(out)32 b(the)h(lab)s(els)g
-(whic)m(h)g(app)s(ear)f(on)h(the)g(axes,)h(the)f(axis)g(units,)g(a)g
-(title,)i(kno)m(wledge)f(of)f(ho)m(w)g(to)g(format)0
-4605 y(the)43 b(co)s(ordinate)i(v)-5 b(alues)43 b(on)g(eac)m(h)i(axis,)
-i Fx(etc.)79 b FF(An)43 b(AST)f(F)-8 b(rame)45 b(is)e(not,)k(ho)m(w)m
-(ev)m(er,)h(restricted)c(to)g(t)m(w)m(o)0 4718 y(dimensions)30
-b(and)f(ma)m(y)i(ha)m(v)m(e)h(an)m(y)f(n)m(um)m(b)s(er)e(of)h(axes.)0
-4885 y(A)37 b(basic)h(F)-8 b(rame)38 b(ma)m(y)g(b)s(e)f(used)f(to)i
-(represen)m(t)g(a)f(Cartesian)h(co)s(ordinate)g(system)g(b)m(y)f
-(setting)h(v)-5 b(alues)38 b(for)0 4998 y(its)d Fx(attributes)g
-FF(\(all)h(AST)e(Ob)5 b(jects)34 b(ha)m(v)m(e)i(v)-5
-b(alues)35 b(asso)s(ciated)h(with)e(them)h(called)g(attributes,)i(whic)
-m(h)d(ma)m(y)0 5111 y(b)s(e)e(set)h(and)e(enquired\).)46
-b(Usually)-8 b(,)34 b(this)f(w)m(ould)f(in)m(v)m(olv)m(e)i(setting)g
-(appropriate)e(axis)h(lab)s(els)f(and)g(units,)h(for)0
-5224 y(example.)41 b(F)-8 b(unctions)30 b(are)h(pro)m(vided)e(for)g
-(use)h(with)f(F)-8 b(rames)31 b(to)f(p)s(erform)e(op)s(erations)i(suc)m
-(h)g(as)g(formatting)0 5337 y(co)s(ordinate)h(v)-5 b(alues)31
-b(as)g(text,)g(calculating)i(distances)e(b)s(et)m(w)m(een)g(p)s(oin)m
-(ts,)f(in)m(terc)m(hanging)i(axes,)f Fx(etc.)p 0 5425
-1512 4 v 104 5479 a Fs(2)138 5510 y Fr(A)k(pair)h(of)h(Mappings)f(can)g
-(b)r(e)g(com)n(bined)f(in)h(a)g(third)f(w)n(a)n(y)h(using)g(a)g(T)-6
-b(ranMap.)65 b(A)35 b(T)-6 b(ranMap)36 b(allo)n(ws)i(the)d(forw)n(ard)0
-5602 y(transformation)d(of)f(one)f(Mapping)h(to)f(b)r(e)g(com)n(bined)g
-(with)g(the)g(in)n(v)n(erse)g(transformation)i(of)f(another)f(to)g(pro)
-r(duce)g(a)g(single)0 5693 y(Mapping.)p eop end
-%%Page: 8 18
-TeXDict begin 8 17 bop 0 52 a FF(8)2171 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)557 2242 y @beginspecial
-38 @llx 119 @lly 571 @urx 462 @ury 3198 @rwi @setspecial
-%%BeginDocument: sun211_figures/complex.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2438 a FF(Figure)h(4:)41 b(CmpMaps)28
-b(\(comp)s(ound)h(Mappings\))h(ma)m(y)g(b)s(e)f(nested)g(in)g(order)g
-(to)i(construct)f(complex)g(Map-)0 2551 y(pings)g(out)g(of)h(simpler)f
-(building)g(blo)s(c)m(ks.)1012 4887 y @beginspecial 141
- at llx 322 @lly 422 @urx 581 @ury 2107 @rwi @setspecial
-%%BeginDocument: sun211_figures/frames.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 5083 a(Figure)49 b(5:)77 b(\(a\))50 b(A)f(basic)f(F)-8
-b(rame)50 b(is)e(used)g(to)h(represen)m(t)g(a)g(Cartesian)g(co)s
-(ordinate)g(system,)k(here)c(2-)0 5196 y(dimensional.)78
-b(\(b\))43 b(A)g(SkyF)-8 b(rame)44 b(represen)m(ts)e(a)i(\(spherical\))
-f(celestial)j(co)s(ordinate)e(system.)78 b(\(c\))44 b(The)0
-5309 y(axis)31 b(order)f(of)g(an)m(y)h(F)-8 b(rame)31
-b(ma)m(y)g(b)s(e)f(p)s(erm)m(uted)f(to)i(matc)m(h)h(the)e(co)s
-(ordinate)h(space)g(it)g(describ)s(es.)p eop end
-%%Page: 9 19
-TeXDict begin 9 18 bop 0 52 a Fy(2.5)92 b(Net)m(w)m(orks)32
-b(of)e(Co)s(ordinate)h(Systems)2229 b FF(9)1291 1620
-y @beginspecial 215 @llx 202 @lly 384 @urx 394 @ury 1436
- at rwi @setspecial
-%%BeginDocument: sun211_figures/cmpframe.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1816 a(Figure)39 b(6:)57 b(A)39 b(CmpF)-8
-b(rame)38 b(\(comp)s(ound)f(F)-8 b(rame\))40 b(formed)e(b)m(y)g(com)m
-(bining)h(t)m(w)m(o)h(simpler)e(F)-8 b(rames.)65 b(Note)0
-1929 y(ho)m(w)29 b(the)g(sp)s(ecial)g(relationship)g(whic)m(h)f(exists)
-h(b)s(et)m(w)m(een)h(the)f(RA)f(and)g(Dec)i(axes)f(is)g(preserv)m(ed)f
-(within)h(this)0 2042 y(data)35 b(structure.)53 b(As)34
-b(with)h(comp)s(ound)e(Mappings)h(\(Figure)h(4\),)i(CmpF)-8
-b(rames)34 b(ma)m(y)h(b)s(e)f(nested)h(in)f(order)0 2155
-y(to)d(build)e(more)i(complex)g(F)-8 b(rames.)0 2531
-y(There)35 b(are)g(sev)m(eral)i(more)e(sp)s(ecialised)h(forms)f(of)g(F)
--8 b(rame,)38 b(whic)m(h)d(pro)m(vide)g(the)h(additional)g
-(functionalit)m(y)0 2644 y(required)j(when)f(handling)h(co)s(ordinates)
-h(within)f(some)h(sp)s(eci\014c)f(ph)m(ysical)i(domain.)68
-b(This)38 b(ranges)i(from)0 2757 y(tasks)33 b(suc)m(h)g(as)g
-(formatting)h(axis)f(v)-5 b(alues,)34 b(to)g(complex)f(tasks)h(suc)m(h)
-e(as)h(determining)g(the)g(transformation)0 2870 y(b)s(et)m(w)m(een)43
-b(an)m(y)g(pair)f(of)h(related)h(co)s(ordinate)f(systems.)77
-b(F)-8 b(or)44 b(instance,)i(the)d(SkyF)-8 b(rame)43
-b(\(Figure)g(5b,c\),)0 2983 y(represen)m(ts)33 b(celestial)j(co)s
-(ordinate)e(systems,)h(the)e(Sp)s(ecF)-8 b(rame)34 b(represen)m(ts)f
-(sp)s(ectral)h(co)s(ordinate)g(systems,)0 3096 y(and)42
-b(the)i(TimeF)-8 b(rame)44 b(represen)m(ts)f(time)h(co)s(ordinate)f
-(systems.)79 b(All)44 b(these)f(pro)m(vide)h(a)f(wide)g(range)g(of)0
-3209 y(di\013eren)m(t)f(systems)f(for)g(describing)g(p)s(ositions)g
-(within)g(their)g(asso)s(ciated)i(ph)m(ysical)e(domain,)j(and)d(these)0
-3321 y(ma)m(y)31 b(b)s(e)f(selected)i(b)m(y)e(setting)h(appropriate)g
-(attributes.)0 3486 y(As)c(with)h(comp)s(ound)e(Mappings)h(\()p
-Fu(x)p FF(2.3\),)j(it)e(is)g(p)s(ossible)f(to)h(merge)g(t)m(w)m(o)h(F)
--8 b(rames)28 b(together)h(to)f(form)f(a)h(com-)0 3599
-y(p)s(ound)f(F)-8 b(rame,)30 b(or)f(CmpF)-8 b(rame,)30
-b(in)e(whic)m(h)h(b)s(oth)f(sets)i(of)f(axes)h(are)f(com)m(bined.)41
-b(One)28 b(could,)i(for)f(example,)0 3712 y(ha)m(v)m(e)j(celestial)i
-(co)s(ordinates)e(on)f(t)m(w)m(o)i(axes)f(and)e(an)h(unrelated)h(co)s
-(ordinate)g(\(w)m(a)m(v)m(elength,)i(p)s(erhaps\))c(on)h(a)0
-3825 y(third)c(\(Figure)h(6\).)41 b(Kno)m(wledge)28 b(of)g(the)g
-(relationships)g(b)s(et)m(w)m(een)g(the)g(axes)g(is)g(preserv)m(ed)f
-(in)m(ternally)i(b)m(y)e(the)0 3938 y(pro)s(cess)j(of)g(constructing)h
-(the)g(CmpF)-8 b(rame)30 b(whic)m(h)g(represen)m(ts)h(them.)0
-4102 y FD(F)-9 b(urther)31 b(reading:)39 b FF(F)-8 b(or)28
-b(a)g(more)f(complete)i(description)e(of)h(F)-8 b(rames)28
-b(see)g Fu(x)p FF(7,)h(for)e(SkyF)-8 b(rames)27 b(see)h
-Fu(x)p FF(8)g(and)0 4215 y(for)h(Sp)s(ecF)-8 b(rames)29
-b(see)h Fu(x)p FF(9.)41 b(Also)29 b(see)h(the)f(F)-8
-b(rame,)31 b(SkyF)-8 b(rame,)29 b(Sp)s(ecF)-8 b(rame,)30
-b(TimeF)-8 b(rame)30 b(and)f(CmpF)-8 b(rame)0 4328 y(en)m(tries)31
-b(in)f(App)s(endix)f(D.)0 4627 y Fw(2.5)112 b(Net)m(w)m(orks)37
-b(of)h(Co)s(ordinate)g(Systems)0 4851 y FF(Mappings)h(and)f(F)-8
-b(rames)40 b(ma)m(y)f(b)s(e)f(connected)i(together)h(to)e(form)g(net)m
-(w)m(orks)g(called)h(F)-8 b(rameSets,)43 b(whic)m(h)0
-4964 y(are)c(used)f(to)i(represen)m(t)f(sets)g(of)g(in)m(ter-related)i
-(co)s(ordinate)e(systems)g(\(Figure)h(7\).)133 b(A)39
-b(F)-8 b(rameSet)40 b(ma)m(y)0 5077 y(b)s(e)33 b(extended)h(b)m(y)f
-(adding)h(a)g(new)f(F)-8 b(rame)35 b(to)f(it,)i(together)f(with)e(an)h
-(asso)s(ciated)h(Mapping)f(whic)m(h)f(relates)0 5190
-y(the)h(new)e(co)s(ordinate)j(system)e(to)h(one)g(whic)m(h)f(is)g
-(already)h(presen)m(t.)50 b(This)33 b(pro)s(cess)f(ensures)h(that)h
-(there)f(is)0 5303 y(alw)m(a)m(ys)e(exactly)h(one)e(path,)f
-Fx(via)h FF(Mappings,)g(b)s(et)m(w)m(een)g(an)m(y)g(pair)g(of)f(F)-8
-b(rames.)42 b(A)29 b(function)h(is)f(pro)m(vided)h(for)0
-5416 y(iden)m(tifying)h(this)f(path)g(and)g(returning)g(the)g(complete)
-i(Mapping.)0 5580 y(One)42 b(of)h(the)f(F)-8 b(rames)44
-b(in)e(a)h(F)-8 b(rameSet)43 b(is)g(termed)f(its)h Fx(b)-5
-b(ase)43 b FF(F)-8 b(rame.)78 b(This)42 b(underlies)f(the)i(F)-8
-b(rameSet's)0 5693 y(purp)s(ose,)38 b(whic)m(h)g(is)f(to)i(calibrate)g
-(datasets)g(and)e(other)h(en)m(tities)i(b)m(y)d(attac)m(hing)j(co)s
-(ordinate)f(systems)f(to)p eop end
-%%Page: 10 20
-TeXDict begin 10 19 bop 0 52 a FF(10)2126 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)612 4135 y @beginspecial
-107 @llx 108 @lly 516 @urx 547 @ury 3067 @rwi @setspecial
-%%BeginDocument: sun211_figures/frameset.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4331 a FF(Figure)35 b(7:)50 b(A)34 b(F)-8
-b(rameSet)36 b(is)f(a)g(net)m(w)m(ork)g(of)g(F)-8 b(rames)35
-b(in)m(ter-connected)h(b)m(y)f(Mappings)f(suc)m(h)g(that)i(there)e(is)0
-4444 y(exactly)e(one)f(con)m(v)m(ersion)g(path,)g Fx(via)f
-FF(Mappings,)h(b)s(et)m(w)m(een)g(an)m(y)f(pair)h(of)f(F)-8
-b(rames.)p eop end
-%%Page: 11 21
-TeXDict begin 11 20 bop 0 52 a Fy(2.6)92 b(Input/Output)28
-b(F)-8 b(acilities)2547 b FF(11)0 351 y(them.)43 b(In)30
-b(this)h(con)m(text,)j(the)d(base)g(F)-8 b(rame)32 b(represen)m(ts)f
-(the)h(\\nativ)m(e")h(co)s(ordinate)f(system)f(\(for)h(example,)0
-464 y(the)43 b(pixel)h(co)s(ordinates)g(of)f(an)g(image\).)81
-b(Similarly)-8 b(,)48 b(one)43 b(F)-8 b(rame)44 b(is)f(termed)h(the)f
-Fx(curr)-5 b(ent)44 b FF(F)-8 b(rame)44 b(and)0 577 y(represen)m(ts)39
-b(the)g(\\curren)m(tly-selected")j(co)s(ordinates.)68
-b(It)39 b(migh)m(t,)k(t)m(ypically)-8 b(,)43 b(b)s(e)c(a)g(celestial)j
-(or)d(sp)s(ectral)0 690 y(co)s(ordinate)30 b(system)g(and)f(w)m(ould)g
-(b)s(e)g(used)g(during)f(in)m(teractions)j(with)f(a)f(user,)h(as)f
-(when)g(plotting)h(axes)h(on)0 803 y(a)h(graph)f(or)g(pro)s(ducing)g(a)
-h(table)g(of)g(results.)44 b(Other)31 b(F)-8 b(rames)32
-b(within)f(the)h(F)-8 b(rameSet)32 b(represen)m(t)g(a)g(library)0
-916 y(of)f(alternativ)m(e)h(co)s(ordinate)g(systems)e(whic)m(h)g(a)h
-(soft)m(w)m(are)h(user)d(can)i(select)h(b)m(y)e(making)h(them)f(curren)
-m(t.)0 1063 y FD(F)-9 b(urther)41 b(reading:)52 b FF(F)-8
-b(or)37 b(a)f(more)h(complete)g(description)f(of)g(F)-8
-b(rameSets,)39 b(see)e Fu(x)p FF(13)g(and)e Fu(x)p FF(14.)59
-b(Also)37 b(see)0 1176 y(the)31 b(F)-8 b(rameSet)31 b(en)m(try)g(in)f
-(App)s(endix)e(D.)0 1447 y Fw(2.6)112 b(Input/Output)38
-b(F)-9 b(acilities)0 1653 y FF(AST)44 b(allo)m(ws)h(y)m(ou)g(to)g(con)m
-(v)m(ert)h(an)m(y)f(kind)e(of)i(Ob)5 b(ject)44 b(in)m(to)h(a)g(stream)g
-(of)f(text)h(whic)m(h)g(con)m(tains)g(a)g(full)0 1766
-y(description)32 b(of)g(that)h(Ob)5 b(ject.)45 b(This)31
-b(text)i(ma)m(y)g(b)s(e)e(written)h(out)g(b)m(y)g(one)g(program)g(and)f
-(read)h(bac)m(k)h(in)f(b)m(y)0 1879 y(another,)f(th)m(us)f(allo)m(wing)
-i(the)e(original)i(Ob)5 b(ject)31 b(to)g(b)s(e)e(reconstructed.)0
-2027 y(The)35 b(\014lter)h(whic)m(h)g(con)m(v)m(erts)h(Ob)5
-b(jects)35 b(in)m(to)i(text)g(and)e(bac)m(k)i(again)f(is)g(itself)h(a)f
-(kind)f(of)h(Ob)5 b(ject,)37 b(called)g(a)0 2139 y(Channel.)i(A)26
-b(Channel)g(pro)m(vides)g(a)h(n)m(um)m(b)s(er)e(of)h(options)h(for)f
-(con)m(trolling)i(the)f(information)g(con)m(ten)m(t)h(of)e(the)0
-2252 y(text,)k(suc)m(h)e(as)h(the)f(addition)h(of)f(commen)m(ts)i(for)e
-(h)m(uman)f(in)m(terpretation.)42 b(It)28 b(is)h(also)g(p)s(ossible)f
-(to)h(in)m(tercept)0 2365 y(the)e(text)i(b)s(eing)e(pro)s(cessed)f(b)m
-(y)i(a)f(Channel)g(so)g(that)h(it)g(ma)m(y)g(b)s(e)e(redirected)i
-(to/from)g(an)m(y)g(c)m(hosen)g(external)0 2478 y(data)j(store,)g(suc)m
-(h)f(as)h(a)g(text)g(\014le,)g(an)f(astronomical)i(dataset,)g(or)f(a)f
-(net)m(w)m(ork)h(connection.)0 2626 y(The)42 b(text)i(format)f(used)e
-(b)m(y)i(the)g(basic)g(Channel)e(class)j(is)e(p)s(eculiar)h(to)g(the)g
-(AST)f(library)g(-)h(no)f(other)0 2739 y(soft)m(w)m(are)28
-b(will)f(understand)e(it.)40 b(Ho)m(w)m(ev)m(er,)30 b(more)d(sp)s
-(ecialised)h(forms)e(of)h(Channel)f(are)h(pro)m(vided)f(whic)m(h)h(use)
-0 2852 y(text)k(formats)g(more)f(widely)h(understo)s(o)s(d.)0
-2999 y(T)-8 b(o)37 b(further)f(facilitate)k(the)d(storage)h(of)g(co)s
-(ordinate)f(system)g(information)h(in)e(astronomical)j(datasets,)h(a)0
-3112 y(more)d(sp)s(ecialised)g(form)f(of)h(Channel)e(called)j(a)f
-(FitsChan)f(is)h(pro)m(vided.)59 b(Instead)36 b(of)h(using)f
-(free-format)0 3225 y(text,)46 b(a)c(FitsChan)g(con)m(v)m(erts)h(AST)e
-(Ob)5 b(jects)42 b(to)g(and)g(from)f(FITS)g(header)h(cards.)74
-b(It)42 b(also)h(allo)m(ws)g(the)0 3338 y(information)36
-b(to)g(b)s(e)f(enco)s(ded)h(in)f(the)h(FITS)f(cards)h(in)f(a)h(n)m(um)m
-(b)s(er)e(of)i(w)m(a)m(ys)h(\(called)g Fx(enc)-5 b(o)g(dings)p
-FF(\),)39 b(so)d(that)0 3451 y(W)m(CS)30 b(information)h(from)f(a)h(v)
--5 b(ariet)m(y)31 b(of)g(sources)f(can)h(b)s(e)f(handled.)0
-3598 y(Another)41 b(sub-class)g(of)g(Channel,)i(called)f(XmlChan,)h(is)
-f(a)f(sp)s(ecialised)h(form)e(of)h(Channel)f(that)i(stores)0
-3711 y(the)g(text)g(in)f(the)h(form)f(of)h(XML)g(markup.)73
-b(Curren)m(tly)-8 b(,)44 b(t)m(w)m(o)f(markup)d(formats)i(are)g(pro)m
-(vided)f(b)m(y)g(the)0 3824 y(XmlChan)35 b(class,)i(one)f(is)f(closely)
-i(related)f(to)g(the)g(text)g(format)g(pro)s(duced)e(b)m(y)h(the)g
-(basic)h(Channel)f(class)0 3937 y(\(curren)m(tly)-8 b(,)34
-b(no)f(sc)m(hema)g(or)f(DTD)h(is)g(a)m(v)-5 b(ailable)35
-b(describing)d(this)h(format\).)48 b(The)32 b(other)g(is)h(a)g(subset)f
-(of)h(an)0 4050 y(early)j(draft)e(of)h(the)h(IV)m(O)m(A)f
-(Space-Time-Co)s(ordinates)h(XML)g(\(STC-X\))f(sc)m(hema)g(\(V1.20\))j
-(describ)s(ed)c(at)0 4163 y(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/WD/STC/STC-200502)q(25)q(.h)m(tml)2605 4130 y Fv(3)2644
-4163 y FF(.)40 b(The)29 b(v)m(ersion)g(of)g(STC-X)f(that)0
-4276 y(has)k(b)s(een)f(adopted)h(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e
-(in)h(sev)m(eral)h(signi\014can)m(t)g(resp)s(ects)f(from)f(V1.20,)k
-(and)c(therefore)0 4389 y(this)f(XmlChan)g(format)h(is)f(of)h
-(historical)g(in)m(terest)h(only)-8 b(.)0 4536 y(Finally)g(,)37
-b(the)e(StcsChan)f(class)i(pro)m(vides)e(facilities)j(for)e(reading)f
-(and)h(writing)f(IV)m(O)m(A)i(STC-S)d(region)i(de-)0
-4649 y(scriptions.)48 b(STC-S)31 b(\(see)67 b(h)m(ttp://www.iv)m
-(oa.net/Do)s(cumen)m(ts/latest/STC-S.h)m(tml\))38 b(is)33
-b(a)g(linear)g(string)0 4762 y(syn)m(tax)e(that)g(allo)m(ws)h(simple)e
-(sp)s(eci\014cation)h(of)g(STC)e(metadata.)42 b(AST)30
-b(supp)s(orts)e(a)j(subset)f(of)g(the)h(STC-S)0 4875
-y(sp)s(eci\014cation,)f(allo)m(wing)h(an)e(STC-S)f(description)h(of)g
-(a)h(region)f(within)g(an)g(AST-supp)s(orted)e(astronomical)0
-4988 y(co)s(ordinate)k(system)g(to)g(b)s(e)f(con)m(v)m(erted)h(in)m(to)
-h(an)e(equiv)-5 b(alen)m(t)32 b(AST)e(Region)h(ob)5 b(ject,)31
-b(and)f(vice-v)m(ersa.)0 5135 y FD(F)-9 b(urther)35 b(reading:)40
-b FF(F)-8 b(or)31 b(a)g(more)g(complete)g(description)g(of)f(Channels)g
-(see)g Fu(x)p FF(15)i(and)e(for)g(FitsChans)g(see)0 5248
-y Fu(x)p FF(16)e(and)e Fu(x)p FF(17.)41 b(Also)27 b(see)h(the)f
-(Channel)f(and)g(FitsChan)h(en)m(tries)g(in)g(App)s(endix)e(D)i(and)f
-(the)h(Enco)s(ding)f(en)m(try)0 5361 y(in)k(App)s(endix)f(C.)p
-0 5425 1512 4 v 104 5479 a Fs(3)138 5510 y Fr(XML)19
-b(do)r(cumen)n(ts)g(whic)n(h)g(use)g(only)g(the)g(subset)g(of)g(the)g
-(STC)h(sc)n(hema)f(supp)r(orted)g(b)n(y)f(AST)g(can)i(b)r(e)e(read)i(b)
-n(y)e(the)g(XmlChan)0 5602 y(class)31 b(to)f(pro)r(duce)f(corresp)r
-(onding)i(AST)e(ob)t(jects)i(\(sub)r(classes)g(of)g(the)e(Stc)g
-(class\).)48 b(Ho)n(w)n(ev)n(er,)31 b(the)e(rev)n(erse)h(is)g(not)g(p)r
-(ossible.)0 5693 y(That)c(is,)h(AST)e(ob)t(jects)i(can)e(not)h(curren)n
-(tly)f(b)r(e)g(written)h(out)g(in)g(the)f(form)h(of)h(STC)f(do)r(cumen)
-n(ts.)p eop end
-%%Page: 12 22
-TeXDict begin 12 21 bop 0 52 a FF(12)2126 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)720 260 y
- gsave currentpoint currentpoint translate -90 neg rotate neg exch neg exch translate
- 720 260 a @beginspecial
-97 @llx 220 @lly 409 @urx 571 @ury 2496 @rwi @setspecial
-%%BeginDocument: sun211_figures/gridplot_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 2800 260 a
- currentpoint grestore moveto
- 2800 260 a 0 2494 a FF(Figure)41
-b(8:)62 b(A)41 b(lab)s(elled)h(co)s(ordinate)g(grid)e(for)h(an)g
-(all-sky)g(zenithal)h(equal)g(area)g(pro)5 b(jection)41
-b(in)g(ecliptic)0 2607 y(co)s(ordinates.)g(This)30 b(w)m(as)h(comp)s
-(osed)f(and)g(dra)m(wn)f Fx(via)i FF(a)f(Plot)i(using)e(a)g(single)h
-(function)f(call.)0 2997 y Fw(2.7)112 b(Pro)s(ducing)38
-b(Graphical)h(Output)0 3240 y FF(Graphical)24 b(output)e(is)i(supp)s
-(orted)d(b)m(y)i(a)g(sp)s(ecialised)h(form)f(of)g(F)-8
-b(rameSet)24 b(called)g(a)g(Plot,)h(whose)e(base)h(F)-8
-b(rame)0 3353 y(corresp)s(onds)28 b(with)g(the)h(nativ)m(e)i(co)s
-(ordinates)e(of)g(the)h(underlying)d(graphics)i(system.)41
-b(Plotting)30 b(op)s(erations)0 3466 y(are)f(sp)s(eci\014ed)e(in)h
-Fx(physic)-5 b(al)33 b(c)-5 b(o)g(or)g(dinates)32 b FF(whic)m(h)c
-(corresp)s(ond)f(with)h(the)g(Plot's)i(curren)m(t)e(F)-8
-b(rame.)41 b(T)m(ypically)-8 b(,)0 3579 y(this)30 b(migh)m(t)h(b)s(e)f
-(a)h(celestial)i(co)s(ordinate)e(system.)0 3757 y(Op)s(erations,)43
-b(suc)m(h)d(as)h(dra)m(wing)g(lines,)i(are)e(automatically)j
-(transformed)c(from)g(ph)m(ysical)h(to)h(graphical)0
-3870 y(co)s(ordinates)30 b(b)s(efore)f(plotting,)h(using)f(an)g
-(adaptiv)m(e)i(algorithm)f(whic)m(h)f(ensures)f(smo)s(oth)h(curv)m(es)g
-(\(b)s(ecause)0 3983 y(the)44 b(transformation)f(is)h(usually)f
-(non-linear\).)80 b(\\Missing")45 b(co)s(ordinates)f(\()p
-Fx(e.g.)f FF(graphical)h(co)s(ordinates)0 4096 y(whic)m(h)31
-b(do)g(not)g(pro)5 b(ject)31 b(on)g(to)h(the)f(celestial)i(sphere\),)e
-(discon)m(tin)m(uities)i(and)d(generalised)i(clipping)f(are)h(all)0
-4209 y(consisten)m(tly)37 b(handled.)56 b(It)36 b(is)g(p)s(ossible,)h
-(for)e(example,)j(to)f(plot)f(in)g(equatorial)h(co)s(ordinates)g(and)e
-(clip)h(in)0 4321 y(galactic)30 b(co)s(ordinates.)41
-b(The)27 b(usual)g(plotting)h(op)s(erations)g(are)g(pro)m(vided)f
-(\(text,)i(mark)m(ers\),)g(but)d(a)i(geo)s(desic)0 4434
-y(curv)m(e)i(replaces)g(the)f(primitiv)m(e)h(straigh)m(t)g(line)g
-(elemen)m(t.)42 b(There)29 b(is)g(also)h(a)g(separate)g(function)f(for)
-g(dra)m(wing)0 4547 y(axis)i(lines,)g(since)f(these)h(are)g(normally)g
-(not)f(geo)s(desics.)0 4725 y(In)c(addition)h(to)h(dra)m(wing)e(co)s
-(ordinate)i(grids)e(o)m(v)m(er)i(an)f(area)g(of)g(the)g(sky)-8
-b(,)28 b(another)f(common)g(use)g(of)g(the)g(Plot)0 4838
-y(class)j(is)g(to)g(pro)s(duce)e(line)i(plots)g(suc)m(h)f(as)h(\015ux)f
-(against)h(w)m(a)m(v)m(elength,)j(displacemen)m(t)d(again)h(time,)f
-Fx(etc)p FF(.)41 b(F)-8 b(or)0 4951 y(these)33 b(situations)g(the)f
-(curren)m(t)g(F)-8 b(rame)34 b(of)e(the)g(Plot)i(w)m(ould)e(b)s(e)f(a)i
-(comp)s(ound)e(F)-8 b(rame)33 b(\(CmpF)-8 b(rame\))33
-b(con-)0 5064 y(taining)d(a)h(pair)e(of)h(1-dimensional)h(F)-8
-b(rames)30 b(-)g(the)g(\014rst)f(represen)m(ting)h(the)g(X)g(axis)g
-(quan)m(tit)m(y)i(\(w)m(a)m(v)m(elength,)0 5177 y(time,)g(etc\),)i(and)
-c(the)i(second)f(represen)m(ting)h(the)f(Y)h(axis)f(quan)m(tit)m(y)i
-(\(\015ux,)e(displacemen)m(t,)i(etc\).)45 b(The)31 b(Plot)0
-5289 y(class)g(includes)f(an)g(option)h(for)f(axes)h(to)g(b)s(e)f
-(plotted)h(logarithmically)-8 b(.)0 5467 y(P)m(erhaps)36
-b(the)h(most)f(useful)g(graphics)g(function)h(a)m(v)-5
-b(ailable)38 b(is)f(for)f(dra)m(wing)g(fully)g(annotated)i(co)s
-(ordinate)0 5580 y(grids)d(\()p Fx(e.g.)f FF(Figure)i(8\).)109
-b(This)35 b(uses)f(a)h(general)h(algorithm)g(whic)m(h)f(do)s(es)g(not)g
-(dep)s(end)e(on)i(kno)m(wledge)h(of)0 5693 y(the)d(co)s(ordinates)g(b)s
-(eing)g(represen)m(ted,)g(so)g(can)g(also)h(handle)e
-(programmer-de\014ned)g(co)s(ordinate)h(systems.)p eop
-end
-%%Page: 13 23
-TeXDict begin 13 22 bop 0 52 a Fy(2.7)92 b(Pro)s(ducing)29
-b(Graphical)j(Output)2329 b FF(13)0 351 y(Grids)39 b(for)h(all-sky)g
-(pro)5 b(jections,)43 b(including)c(p)s(olar)h(regions,)j(can)c(b)s(e)h
-(dra)m(wn)e(and)h(most)h(asp)s(ects)g(of)g(the)0 464
-y(output)30 b(\(colour,)i(line)e(st)m(yle,)i Fx(etc.)p
-FF(\))41 b(can)30 b(b)s(e)g(adjusted)g(b)m(y)g(setting)h(appropriate)g
-(Plot)g(attributes.)0 627 y FD(F)-9 b(urther)47 b(reading:)61
-b FF(F)-8 b(or)42 b(a)f(more)g(complete)h(description)f(of)g(Plots)g
-(and)g(ho)m(w)f(to)i(pro)s(duce)e(graphical)0 740 y(output,)30
-b(see)h Fu(x)p FF(21.)42 b(Also)31 b(see)g(the)g(Plot)g(en)m(try)g(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 14 24
-TeXDict begin 14 23 bop 0 52 a FF(14)2126 b Fy(2)92 b(O)m(VER)-10
-b(VIEW)30 b(OF)h(AST)e(CONCEPTS)p eop end
-%%Page: 15 25
-TeXDict begin 15 24 bop 3689 52 a FF(15)0 351 y Fz(3)135
-b(Ho)l(w)45 b(T)-11 b(o.)23 b(.)g(.)0 604 y FF(F)-8 b(or)29
-b(those)g(of)f(y)m(ou)g(with)g(a)h(plane)f(to)h(catc)m(h,)h(this)f
-(section)g(pro)m(vides)f(some)h(instan)m(t)g(templates)g(and)f(recip)s
-(es)0 717 y(for)22 b(p)s(erforming)f(the)i(most)f(commonly-required)h
-(op)s(erations)f(using)g(AST,)g(but)f(without)h(going)i(in)m(to)f
-(detail.)0 830 y(The)35 b(examples)h(giv)m(en)g(\(sort)g(of)7
-b(\))36 b(follo)m(w)g(on)f(from)g(eac)m(h)i(other,)g(so)e(y)m(ou)h
-(should)e(b)s(e)h(able)g(to)h(construct)g(a)0 943 y(v)-5
-b(ariet)m(y)30 b(of)f(programs)f(b)m(y)g(piecing)i(them)e(together.)42
-b(Note)30 b(that)f(some)g(of)f(them)h(app)s(ear)f(longer)h(than)f(they)
-0 1056 y(actually)h(are,)f(b)s(ecause)f(w)m(e)h(ha)m(v)m(e)g(included)f
-(plen)m(t)m(y)g(of)h(commen)m(ts)g(and)e(a)i(few)f(options)g(that)h(y)m
-(ou)f(probably)0 1169 y(w)m(on't)k(need.)0 1332 y(If)g(an)m(y)g(of)g
-(this)g(material)h(has)f(y)m(ou)g(completely)i(ba\017ed,)e(then)g(y)m
-(ou)g(ma)m(y)h(w)m(an)m(t)g(to)f(read)g(the)g(in)m(tro)s(duction)0
-1445 y(to)36 b(AST)f(programming)g(concepts)i(in)e Fu(x)p
-FF(4)h(\014rst.)55 b(Otherwise,)37 b(references)f(to)g(more)g(detailed)
-g(reading)g(are)0 1558 y(giv)m(en)31 b(after)g(eac)m(h)h(example,)f
-(just)f(in)g(case)h(they)g(don't)f(quite)h(do)f(what)h(y)m(ou)f(w)m(an)
-m(t.)0 1852 y Fw(3.1)112 b(.)19 b(.)g(.)g(Obtain)38 b(and)g(Install)g
-(AST)0 2074 y FF(The)h(AST)g(library)g(is)h(a)m(v)-5
-b(ailable)42 b(b)s(oth)c(as)i(a)g(stand-alone)h(pac)m(k)-5
-b(age)41 b(and)e(also)i(as)f(part)f(of)h(the)g(Starlink)0
-2186 y(Soft)m(w)m(are)26 b(Collection)763 2153 y Fv(4)804
-2186 y FF(.)39 b(If)24 b(y)m(our)h(site)g(has)f(the)h(Starlink)g(Soft)m
-(w)m(are)g(Collection)i(installed)e(then)g(AST)e(should)0
-2299 y(already)31 b(b)s(e)f(a)m(v)-5 b(ailable.)0 2462
-y(If)30 b(not,)h(y)m(ou)f(can)h(do)m(wnload)g(the)f(AST)g(library)g(b)m
-(y)g(itself)h(from)f(h)m(ttp://www.starlink.ac.uk/ast/.)0
-2756 y Fw(3.2)112 b(.)19 b(.)g(.)g(Structure)37 b(an)h(AST)f(Program)0
-2978 y FF(An)30 b(AST)g(program)g(normally)g(has)g(the)h(follo)m(wing)h
-(structure:)227 3228 y Ft(/*)43 b(Include)e(the)h(interface)e(to)j(the)
-f(AST)g(library.)f(*/)227 3328 y(#include)g("ast.h")227
-3527 y(/*)i(Main)f(program)f(\(or)h(could)g(be)g(any)h(function\).)c
-(*/)227 3627 y(main)j(\(\))h({)358 3726 y(<normal)e(C)i(declarations)c
-(and)j(statements>)227 3925 y(/*)h(Enclose)e(the)h(parts)g(which)f(use)
-h(AST)h(between)d(the)j(astBegin)d(and)i(astEnd)g(macros.)e(*/)358
-4025 y(astBegin;)358 4125 y(<C)j(statements)c(which)j(use)g(AST>)358
-4224 y(astEnd;)358 4424 y(<maybe)f(more)h(C)h(statements>)227
-4523 y(})0 4786 y FF(The)c(use)h(of)g(astBegin)i(and)d(astEnd)h(is)g
-(optional,)j(but)d(has)f(the)i(e\013ect)g(of)f(tidying)g(up)f(after)i
-(y)m(ou)f(ha)m(v)m(e)0 4899 y(\014nished)25 b(using)h(AST,)h(so)g(is)f
-(normally)h(recommended.)40 b(F)-8 b(or)27 b(more)g(details)h(of)f
-(this,)g(see)g Fu(x)p FF(4.10.)42 b(F)-8 b(or)27 b(details)0
-5012 y(of)k(ho)m(w)f(to)h(access)h(the)e(\\ast.h")i(header)e(\014le,)h
-(see)g Fu(x)p FF(22.1.)0 5306 y Fw(3.3)112 b(.)19 b(.)g(.)g(Build)38
-b(an)g(AST)f(Program)0 5528 y FF(T)-8 b(o)31 b(build)e(a)i(simple)f
-(AST)g(program)g(that)h(do)s(esn't)f(use)g(graphics,)h(use:)p
-0 5607 1512 4 v 104 5661 a Fs(4)138 5693 y Fr(The)26
-b(Starlink)g(Soft)n(w)n(are)g(Collection)i(can)e(b)r(e)f(do)n(wnloaded)
-i(from)f(h)n(ttp://www.starlink.ac.uk/Do)n(wnload/.)p
-eop end
-%%Page: 16 26
-TeXDict begin 16 25 bop 0 52 a FF(16)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(cc)43 b(program.c)d(-L/star/lib)f
-(-I/star/include)e(`ast_link`)j(-o)j(program)0 658 y
-FF(T)-8 b(o)31 b(build)e(a)i(program)f(whic)m(h)g(uses)g(PGPLOT)g(for)g
-(graphics,)g(use:)227 952 y Ft(cc)43 b(program.c)d(-L/star/lib)f
-(`ast_link)h(-pgplot`)g(-o)j(program)0 1259 y FF(F)-8
-b(or)23 b(more)g(details)h(ab)s(out)e(accessing)j(the)e(\\ast.h")g
-(header)g(\014le,)i(see)e Fu(x)p FF(22.1.)40 b(F)-8 b(or)23
-b(more)g(details)h(ab)s(out)e(linking)0 1372 y(programs,)30
-b(see)h Fu(x)p FF(22.2)i(and)c(the)i(description)f(of)h(the)f(\\ast)p
-Fq(_)p FF(link")i(command)e(in)g(App)s(endix)f(E.)0 1715
-y Fw(3.4)112 b(.)19 b(.)g(.)g(Read)38 b(a)f(W)m(CS)h(Calibration)g
-(from)g(a)g(Dataset)0 1959 y FF(Precisely)27 b(ho)m(w)e(y)m(ou)h
-(extract)h(w)m(orld)f(co)s(ordinate)g(system)g(\(W)m(CS\))h
-(information)f(from)f(a)h(dataset)h(ob)m(viously)0 2072
-y(dep)s(ends)36 b(on)i(what)h(t)m(yp)s(e)f(of)g(dataset)i(it)e(is.)65
-b(Usually)-8 b(,)41 b(ho)m(w)m(ev)m(er,)h(y)m(ou)c(should)f(b)s(e)h
-(able)h(to)g(obtain)f(a)h(set)0 2185 y(of)33 b(FITS)f(header)h(cards)g
-(whic)m(h)f(con)m(tain)j(the)e(W)m(CS)g(information)g(\(and)f(probably)
-h(m)m(uc)m(h)g(more)g(b)s(esides\).)0 2298 y(Supp)s(ose)g(that)i
-(\\cards")h(is)e(a)i(p)s(oin)m(ter)e(to)i(a)f(string)g(con)m(taining)h
-(a)f(complete)h(set)f(of)g(concatenated)i(FITS)0 2410
-y(header)23 b(cards)h(\(suc)m(h)f(as)h(pro)s(duced)e(b)m(y)h(the)h
-(CFITSIO)d(function)j(\014ts)p Fq(_)p FF(hdr2str\).)37
-b(Then)22 b(pro)s(ceed)h(as)h(follo)m(ws:)227 2704 y
-Ft(fitsfile)41 b(*fptr;)227 2804 y(AstFitsChan)e(*fitschan;)227
-2903 y(AstFrameSet)g(*wcsinfo;)227 3003 y(char)j(*header;)227
-3103 y(int)h(nkeys,)e(status;)227 3302 y(...)227 3501
-y(/*)i(Obtain)e(all)h(the)h(cards)e(in)i(the)f(header)g(concatenated)c
-(into)k(a)h(single)e(dynamically)358 3601 y(allocated)f
-(null-terminated)d(character)j(string.)h(Note,)g(we)i(do)g(not)f
-(exclude)358 3700 y(any)g(cards)g(since)f(we)i(may)g(later)e(modify)g
-(the)h(WCS)h(information)c(within)i(the)358 3800 y(header)g(and)h
-(consequently)d(want)j(to)h(write)e(the)i(entire)e(header)g(out)h
-(again.)f(*/)358 3900 y(if\()h(fits_hdr2str\()d(fptr,)i(0,)i(NULL,)e
-(0,)i(&header,)d(&nkeys,)h(&status)g(\))i(\))663 3999
-y(printf\(")d(Error)i(getting)f(header\\n"\);)358 4099
-y(...)227 4298 y(/*)i(Header)e(obtained)f(succesfully...)e(*/)358
-4398 y(})43 b(else)f({)227 4597 y(/*)h(Create)e(a)i(FitsChan)e(and)h
-(fill)g(it)h(with)f(FITS)f(header)h(cards.)f(*/)489 4697
-y(fitschan)f(=)j(astFitsChan\()c(NULL,)i(NULL,)h("")h(\);)489
-4796 y(astPutCards\()38 b(fitschan,)i(header)h(\);)227
-4996 y(/*)i(Free)f(the)g(memory)f(holding)g(the)h(concatenated)d
-(header)i(cards.)g(*/)489 5095 y(header)g(=)i(free\()f(header)f(\);)227
-5295 y(/*)i(Read)f(WCS)g(information)d(from)j(the)h(FitsChan.)c(*/)489
-5394 y(wcsinfo)h(=)k(astRead\()c(fitschan)g(\);)489 5593
-y(...)p eop end
-%%Page: 17 27
-TeXDict begin 17 26 bop 0 52 a Fy(3.5)92 b(.)15 b(.)h(.)f(V)-8
-b(alidate)33 b(W)m(CS)d(Information)2295 b FF(17)0 351
-y(The)29 b(result)g(should)g(b)s(e)g(a)g(p)s(oin)m(ter,)h(\\w)m
-(csinfo",)h(to)g(a)e(F)-8 b(rameSet)31 b(whic)m(h)e(con)m(tains)i(the)e
-(W)m(CS)h(information.)0 464 y(This)c(p)s(oin)m(ter)h(can)g(no)m(w)g(b)
-s(e)f(used)g(to)i(p)s(erform)d(man)m(y)i(useful)g(tasks,)h(some)f(of)g
-(whic)m(h)g(are)g(illustrated)h(in)e(the)0 577 y(follo)m(wing)32
-b(recip)s(es.)0 741 y(Some)j(datasets)i(whic)m(h)e(do)g(not)h(easily)h
-(yield)e(FITS)g(header)g(cards)g(ma)m(y)h(require)f(a)h(di\013eren)m(t)
-g(approac)m(h,)0 854 y(p)s(ossibly)d(in)m(v)m(olving)i(use)f(of)f(a)i
-(Channel)d(or)i(XmlChan)f(\()p Fu(x)p FF(15\))j(rather)d(than)h(a)g
-(FitsChan.)51 b(In)33 b(the)h(case)g(of)0 967 y(the)26
-b(Starlink)g(NDF)h(data)f(format,)i(for)d(example,)j(all)f(the)f(ab)s
-(o)m(v)m(e)h(ma)m(y)g(b)s(e)e(replaced)i(b)m(y)e(a)i(single)f(call)i
-(to)e(the)0 1080 y(function)k(ndfGt)m(w)m(cs|see)h(SUN/33.)42
-b(The)30 b(whole)h(pro)s(cess)e(can)i(probably)f(b)s(e)f(encapsulated)i
-(in)f(a)h(similar)0 1192 y(w)m(a)m(y)g(for)f(most)h(data)g(systems,)g
-(whether)f(they)g(use)g(FITS)g(header)g(cards)g(or)h(not.)0
-1356 y(F)-8 b(or)26 b(more)g(details)h(ab)s(out)e(reading)h(W)m(CS)f
-(information)h(from)f(datasets,)j(see)e Fu(x)p FF(17.3)i(and)d
-Fu(x)p FF(17.4.)41 b(F)-8 b(or)26 b(a)g(more)0 1469 y(general)37
-b(description)f(of)g(FitsChans)f(and)h(their)f(use)h(with)g(FITS)f
-(header)g(cards,)j(see)e Fu(x)p FF(16)h(and)e Fu(x)p
-FF(17.)59 b(F)-8 b(or)0 1582 y(more)31 b(details)g(ab)s(out)f(F)-8
-b(rameSets,)32 b(see)f Fu(x)p FF(13)g(and)f Fu(x)p FF(14.)0
-1879 y Fw(3.5)112 b(.)19 b(.)g(.)g(V)-9 b(alidate)38
-b(W)m(CS)f(Information)0 2102 y FF(Once)d(y)m(ou)h(ha)m(v)m(e)h(read)e
-(W)m(CS)g(information)h(from)f(a)h(dataset,)i(as)d(in)g
-Fu(x)p FF(3.4,)j(y)m(ou)e(ma)m(y)g(wish)f(to)h(c)m(hec)m(k)h(that)0
-2215 y(y)m(ou)c(ha)m(v)m(e)h(b)s(een)e(successful.)45
-b(The)31 b(follo)m(wing)j(will)e(detect)h(and)e(classify)i(the)f
-(things)f(that)i(migh)m(t)f(p)s(ossibly)0 2327 y(go)f(wrong:)227
-2580 y Ft(#include)41 b(<string.h>)227 2779 y(...)227
-2978 y(if)i(\()g(!astOK)e(\))i({)358 3078 y(<an)f(error)g(occurred)e
-(\(a)j(message)e(will)h(have)f(been)h(issued\)>)227 3177
-y(})h(else)f(if)h(\()g(wcsinfo)e(==)i(AST__NULL)d(\))j({)358
-3277 y(<there)e(was)h(no)h(WCS)g(information)c(present>)227
-3377 y(})k(else)f(if)h(\()g(strcmp\()e(astGetC\()f(wcsinfo,)h("Class")f
-(\),)j("FrameSet")c(\))44 b(\))f({)358 3476 y(<something)c(unexpected)h
-(was)i(read)g(\(i.e.)g(not)g(a)h(FrameSet\)>)227 3576
-y(})g(else)f({)358 3675 y(<WCS)g(information)d(was)j(read)g(OK>)227
-3775 y(})0 4040 y FF(F)-8 b(or)31 b(more)g(information)g(ab)s(out)g
-(detecting)h(errors)e(in)h(AST)e(functions,)i(see)g Fu(x)p
-FF(4.15.)44 b(F)-8 b(or)31 b(details)h(of)f(ho)m(w)g(to)0
-4153 y(v)-5 b(alidate)32 b(input)d(data)i(read)g(b)m(y)f(AST,)g(see)h
-Fu(x)p FF(15.6)h(and)e Fu(x)p FF(17.4.)0 4450 y Fw(3.6)112
-b(.)19 b(.)g(.)g(Displa)m(y)38 b(AST)f(Data)0 4673 y
-FF(If)g(y)m(ou)h(ha)m(v)m(e)h(a)f(p)s(oin)m(ter)f(to)i(an)m(y)f(AST)e
-(Ob)5 b(ject,)40 b(y)m(ou)e(can)g(displa)m(y)g(the)g(data)g(stored)g
-(in)f(that)h(Ob)5 b(ject)38 b(in)0 4786 y(textual)32
-b(form)e(as)g(follo)m(ws:)227 5038 y Ft(astShow\()41
-b(wcsinfo)f(\);)0 5303 y FF(Here,)28 b(w)m(e)f(ha)m(v)m(e)h(used)e(a)h
-(p)s(oin)m(ter)f(to)i(the)e(F)-8 b(rameSet)28 b(whic)m(h)f(w)m(e)g
-(read)f(earlier)i(\()p Fu(x)p FF(3.4\).)41 b(The)26 b(result)h(is)f
-(written)0 5416 y(to)31 b(the)g(program's)f(standard)f(output)h
-(stream.)42 b(This)29 b(can)i(b)s(e)f(v)m(ery)g(useful)g(during)f
-(debugging.)0 5580 y(F)-8 b(or)30 b(more)g(details)g(ab)s(out)f(using)g
-(astSho)m(w,)h(see)g Fu(x)p FF(4.4.)42 b(F)-8 b(or)30
-b(information)g(ab)s(out)f(in)m(terpreting)h(the)g(output,)0
-5693 y(also)h(see)g Fu(x)p FF(15.8.)p eop end
-%%Page: 18 28
-TeXDict begin 18 27 bop 0 52 a FF(18)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y Fw(3.7)112 b(.)19 b(.)g(.)g(Con)m(v)m(ert)37
-b(Bet)m(w)m(een)g(Pixel)g(and)i(W)-9 b(orld)37 b(Co)s(ordinates)0
-568 y FF(Y)-8 b(ou)39 b(ma)m(y)h(use)f(a)g(p)s(oin)m(ter)g(to)h(a)f(F)
--8 b(rameSet,)43 b(suc)m(h)38 b(as)i(w)m(e)f(read)g(in)g
-Fu(x)p FF(3.4,)k(to)c(transform)g(a)g(set)g(of)h(p)s(oin)m(ts)0
-681 y(b)s(et)m(w)m(een)h(the)f(pixel)h(co)s(ordinates)g(of)f(an)g
-(image)i(and)d(the)i(asso)s(ciated)h(w)m(orld)e(co)s(ordinates.)71
-b(If)39 b(y)m(ou)i(are)0 794 y(w)m(orking)31 b(in)f(t)m(w)m(o)h
-(dimensions,)f(pro)s(ceed)g(as)h(follo)m(ws:)227 1023
-y Ft(double)41 b(xpixel[)g(N)i(],)g(ypixel[)e(N)i(];)227
-1123 y(double)e(xworld[)g(N)i(],)g(yworld[)e(N)i(];)227
-1322 y(...)227 1521 y(astTran2\()d(wcsinfo,)g(N,)j(xpixel,)e(ypixel,)g
-(1,)h(xworld,)f(yworld)g(\);)0 1764 y FF(Here,)30 b(N)e(is)g(the)h(n)m
-(um)m(b)s(er)e(of)i(p)s(oin)m(ts)f(to)h(b)s(e)f(transformed,)g
-(\\xpixel")h(and)f(\\ypixel")i(hold)e(the)g(pixel)h(co)s(ordi-)0
-1877 y(nates,)g(and)e(\\xw)m(orld")i(and)e(\\yw)m(orld")i(receiv)m(e)g
-(the)f(returned)f(w)m(orld)g(co)s(ordinates.)2923 1844
-y Fv(5)3003 1877 y FF(T)-8 b(o)29 b(transform)e(in)g(the)0
-1990 y(opp)s(osite)k(direction,)h(in)m(terc)m(hange)h(the)e(t)m(w)m(o)h
-(pairs)e(of)i(arra)m(ys)f(\(so)g(that)h(the)f(w)m(orld)g(co)s
-(ordinates)g(are)g(giv)m(en)0 2103 y(as)g(input\))e(and)h(c)m(hange)i
-(the)e(\014fth)g(argumen)m(t)g(of)h(astT)-8 b(ran2)31
-b(to)g(zero.)0 2260 y(T)-8 b(o)33 b(transform)e(p)s(oin)m(ts)h(in)g
-(one)g(dimension,)g(use)g(astT)-8 b(ran1.)47 b(In)31
-b(an)m(y)h(other)h(n)m(um)m(b)s(er)d(of)j(dimensions)e(\(or)h(if)0
-2373 y(the)d(n)m(um)m(b)s(er)f(of)g(dimensions)h(is)f(initially)j
-(unkno)m(wn\),)d(use)g(astT)-8 b(ranN)30 b(or)f(astT)-8
-b(ranP)g(.)29 b(These)g(functions)f(are)0 2486 y(describ)s(ed)h(in)h
-(App)s(endix)f(B.)0 2644 y(F)-8 b(or)30 b(more)f(information)h(ab)s
-(out)f(transforming)g(co)s(ordinates,)h(see)g Fu(x)p
-FF(4.8)h(and)d Fu(x)p FF(13.6.)43 b(F)-8 b(or)30 b(details)g(of)f(ho)m
-(w)h(to)0 2757 y(handle)g(missing)g(co)s(ordinates,)i(see)e
-Fu(x)p FF(5.8.)0 3043 y Fw(3.8)112 b(.)19 b(.)g(.)g(T)-9
-b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Celestial)g(Co)s(ordinate)g
-(System)0 3260 y FF(The)25 b(w)m(orld)g(co)s(ordinate)h(system)f(\(W)m
-(CS\))h(curren)m(tly)f(asso)s(ciated)i(with)e(an)g(image)h(ma)m(y)g
-(often)g(b)s(e)e(a)i(celestial)0 3372 y(co)s(ordinate)42
-b(system,)i(but)d(this)g(need)f(not)i(necessarily)g(b)s(e)e(the)i
-(case.)74 b(F)-8 b(or)42 b(instance,)i(instead)e(of)f(righ)m(t)0
-3485 y(ascension)31 b(and)f(declination,)j(an)d(image)i(migh)m(t)g(ha)m
-(v)m(e)g(a)f(W)m(CS)f(with)h(axes)g(represen)m(ting)g(w)m(a)m(v)m
-(elength)i(and)0 3598 y(slit)e(p)s(osition,)g(or)f(ma)m(yb)s(e)h(just)e
-(plain)i(old)f(pixels.)0 3756 y(If)43 b(y)m(ou)h(ha)m(v)m(e)h(obtained)
-e(a)h(W)m(CS)g(calibration)h(for)e(an)g(image,)49 b(as)43
-b(in)h Fu(x)p FF(3.4,)k(in)43 b(the)h(form)f(of)h(a)f(p)s(oin)m(ter)0
-3869 y(\\w)m(csinfo")29 b(to)g(a)g(F)-8 b(rameSet,)30
-b(then)d(y)m(ou)i(ma)m(y)g(determine)f(if)g(the)g(curren)m(t)g(co)s
-(ordinate)h(system)f(is)g(a)h(celestial)0 3982 y(one)i(or)f(not,)h(as)g
-(follo)m(ws:)227 4211 y Ft(AstFrame)41 b(*frame;)227
-4311 y(int)i(issky;)227 4510 y(...)227 4709 y(/*)g(Obtain)e(a)i
-(pointer)e(to)i(the)f(current)f(Frame)g(and)i(determine)d(if)i(it)h(is)
-g(a)358 4809 y(SkyFrame.)d(*/)227 4909 y(frame)i(=)h(astGetFrame\()c
-(wcsinfo,)h(AST__CURRENT)e(\);)227 5008 y(issky)k(=)h(astIsASkyFrame\()
-37 b(frame)42 b(\);)227 5108 y(frame)g(=)h(astAnnul\()d(frame)h(\);)0
-5351 y FF(This)30 b(will)g(set)h(\\issky")g(to)g(1)g(if)g(the)f(W)m(CS)
-g(is)h(a)g(celestial)i(co)s(ordinate)e(system,)g(and)e(to)i(zero)h
-(otherwise.)p 0 5425 1512 4 v 104 5479 a Fs(5)138 5510
-y Fr(By)c(pixel)g(co)r(ordinates,)j(w)n(e)e(mean)f(a)h(co)r(ordinate)g
-(system)f(in)g(whic)n(h)h(the)e(\014rst)h(pixel)h(in)f(the)g(image)h
-(is)g(cen)n(tred)e(on)i(\(1,1\))0 5602 y(and)c(eac)n(h)g(pixel)g(is)g
-(a)h(unit)e(square.)35 b(Note)25 b(that)f(the)h(w)n(orld)h(co)r
-(ordinates)g(will)g(not)f(necessarily)i(b)r(e)e(celestial)h(co)r
-(ordinates,)h(but)0 5693 y(if)f(they)f(are,)i(then)e(they)g(will)i(b)r
-(e)e(in)h(radians.)p eop end
-%%Page: 19 29
-TeXDict begin 19 28 bop 0 52 a Fy(3.9)92 b(.)15 b(.)h(.)f(T)-8
-b(est)31 b(if)g(a)f(W)m(CS)h(is)f(a)h(Sp)s(ectral)f(Co)s(ordinate)h
-(System)1482 b FF(19)0 351 y Fw(3.9)112 b(.)19 b(.)g(.)g(T)-9
-b(est)37 b(if)g(a)h(W)m(CS)f(is)h(a)g(Sp)s(ectral)g(Co)s(ordinate)g
-(System)0 576 y FF(T)-8 b(esting)26 b(for)f(a)g(sp)s(ectral)g(co)s
-(ordinate)h(system)f(is)g(basically)i(the)e(same)g(as)h(testing)g(for)f
-(a)g(celestial)j(co)s(ordinate)0 689 y(system)43 b(\(see)g(the)g
-(previous)f(section\).)78 b(The)42 b(one)h(di\013erence)g(is)g(that)g
-(y)m(ou)g(use)f(the)h(astIsASp)s(ecF)-8 b(rame)0 802
-y(function)30 b(in)g(place)h(of)g(the)g(astIsASkyF)-8
-b(rame)31 b(function.)0 1102 y Fw(3.10)112 b(.)19 b(.)g(.)g(F)-9
-b(ormat)38 b(Co)s(ordinates)g(for)f(Displa)m(y)0 1326
-y FF(Once)44 b(y)m(ou)g(ha)m(v)m(e)h(con)m(v)m(erted)h(pixel)e(co)s
-(ordinates)g(in)m(to)h(w)m(orld)f(co)s(ordinates)h(\()p
-Fu(x)p FF(3.7\),)k(y)m(ou)c(ma)m(y)f(w)m(an)m(t)h(to)0
-1439 y(format)35 b(them)g(as)g(text)g(b)s(efore)g(displa)m(ying)g
-(them.)54 b(T)m(ypically)-8 b(,)37 b(this)e(w)m(ould)f(con)m(v)m(ert)j
-(from)d(\(sa)m(y\))i(radians)0 1552 y(in)m(to)i(something)f(more)g
-(comprehensible.)60 b(Using)37 b(the)g(F)-8 b(rameSet)38
-b(p)s(oin)m(ter)e(\\w)m(csinfo")i(obtained)f(in)g Fu(x)p
-FF(3.4)0 1665 y(and)30 b(a)h(pair)f(of)g(w)m(orld)g(co)s(ordinates)i
-(\\xw")e(and)g(\\yw")h(\()p Fx(e.g.)f FF(see)h Fu(x)p
-FF(3.7\),)h(y)m(ou)f(could)g(pro)s(ceed)f(as)g(follo)m(ws:)227
-1921 y Ft(#include)41 b(<stdio.h>)227 2020 y(const)h(char)g(*xtext,)e
-(*ytext;)227 2120 y(double)h(xw,)i(yw;)227 2319 y(...)227
-2518 y(xtext)f(=)h(astFormat\()c(wcsinfo,)i(1,)h(xw)h(\);)227
-2618 y(ytext)f(=)h(astFormat\()c(wcsinfo,)i(2,)h(yw)h(\);)227
-2817 y(\(void\))e(printf\()g("Position)f(=)j(\045s,)f(\045s\\n",)g
-(xtext,)f(ytext)g(\);)0 3086 y FF(Here,)31 b(the)g(second)f(argumen)m
-(t)h(to)g(astF)-8 b(ormat)32 b(is)f(the)f(axis)h(n)m(um)m(b)s(er.)0
-3251 y(With)d(celestial)i(co)s(ordinates,)e(this)g(will)f(usually)g
-(result)g(in)g(sexagesimal)j(notation,)f(suc)m(h)e(as)g(\\12:34:56.7".)
-0 3364 y(Ho)m(w)m(ev)m(er,)e(the)c(same)h(metho)s(d)e(ma)m(y)i(b)s(e)e
-(applied)h(to)h(an)m(y)f(t)m(yp)s(e)g(of)g(co)s(ordinates)h(and)f
-(appropriate)g(formatting)0 3476 y(will)31 b(b)s(e)e(emplo)m(y)m(ed.)0
-3641 y(F)-8 b(or)36 b(more)g(information)g(ab)s(out)f(formatting)h(co)s
-(ordinate)g(v)-5 b(alues)36 b(and)f(ho)m(w)g(to)i(con)m(trol)f(the)g
-(st)m(yle)h(of)e(for-)0 3754 y(matting)27 b(used,)f(see)h
-Fu(x)p FF(7.6)g(and)e Fu(x)p FF(8.6.)41 b(If)25 b(necessary)-8
-b(,)28 b(also)f(see)f Fu(x)p FF(7.7)i(for)d(details)i(of)f(ho)m(w)g(to)
-g(\\normalise")i(a)e(set)0 3867 y(of)31 b(co)s(ordinates)g(so)g(that)g
-(they)f(lie)i(within)e(the)g(standard)g(range)h(\()p
-Fx(e.g.)f FF(0)h(to)g(24)g(hours)f(for)g(righ)m(t)h(ascension)0
-3980 y(and)f Fu(\006)p FF(90)338 3947 y Fp(\016)408 3980
-y FF(for)g(declination\).)0 4280 y Fw(3.11)112 b(.)19
-b(.)g(.)g(Displa)m(y)38 b(Co)s(ordinates)h(as)f(they)f(are)h(T)-9
-b(ransformed)0 4505 y FF(In)41 b(addition)h(to)g(formatting)g(co)s
-(ordinates)g(as)g(part)g(of)f(a)h(program's)g(output,)i(y)m(ou)e(ma)m
-(y)g(also)g(w)m(an)m(t)h(to)0 4618 y(examine)35 b(co)s(ordinate)f(v)-5
-b(alues)34 b(while)g(debugging)g(y)m(our)g(program.)51
-b(T)-8 b(o)34 b(sa)m(v)m(e)i(time,)f(y)m(ou)f(can)g(\\ea)m(v)m(esdrop")
-0 4731 y(on)e(the)g(co)s(ordinate)h(v)-5 b(alues)33 b(b)s(eing)f(pro)s
-(cessed)f(ev)m(ery)i(time)g(they)f(are)h(transformed.)45
-b(F)-8 b(or)33 b(example,)g(when)0 4844 y(using)23 b(the)h(F)-8
-b(rameSet)24 b(p)s(oin)m(ter)g(\\w)m(csinfo")g(obtained)g(in)f
-Fu(x)p FF(3.4)i(to)f(transform)f(co)s(ordinates)h(\()p
-Fu(x)p FF(3.7\),)k(y)m(ou)23 b(could)0 4956 y(insp)s(ect)30
-b(the)h(co)s(ordinate)g(v)-5 b(alues)31 b(as)f(follo)m(ws:)227
-5212 y Ft(astSet\()41 b(wcsinfo,)f("Report=1")g(\);)227
-5311 y(astTran2\()g(wcsinfo,)g(N,)j(xpixel,)e(ypixel,)g(1,)h(xworld,)f
-(yworld)g(\);)0 5580 y FF(By)32 b(setting)h(the)f(F)-8
-b(rameSet's)33 b(Rep)s(ort)e(attribute)h(to)h(1,)f(co)s(ordinate)h
-(transformations)f(are)g(automatically)0 5693 y(displa)m(y)m(ed)f(on)f
-(the)h(program's)f(standard)g(output)g(stream,)h(appropriately)f
-(formatted,)h(for)g(example:)p eop end
-%%Page: 20 30
-TeXDict begin 20 29 bop 0 52 a FF(20)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Fq(\(42.1087,)46 b(20.2717\))f(-->)i
-(\(2:06:03.0,)e(34:22:39\))227 464 y(\(43.0197,)h(21.1705\))f(-->)i
-(\(2:08:20.6,)e(35:31:24\))227 577 y(\(43.9295,)h(22.0716\))f(-->)i
-(\(2:10:38.1,)e(36:40:09\))227 690 y(\(44.8382,)h(22.9753\))f(-->)i
-(\(2:12:55.6,)e(37:48:55\))227 803 y(\(45.7459,)h(23.8814\))f(-->)i
-(\(2:15:13.1,)e(38:57:40\))227 916 y(\(46.6528,)h(24.7901\))f(-->)i
-(\(2:17:30.6,)e(40:06:25\))227 1029 y(\(47.5589,)h(25.7013\))f(-->)i
-(\(2:19:48.1,)e(41:15:11\))227 1142 y(\(48.4644,)h(26.6149\))f(-->)i
-(\(2:22:05.6,)e(42:23:56\))227 1255 y(\(49.3695,)h(27.5311\))f(-->)i
-(\(2:24:23.1,)e(43:32:41\))227 1367 y(\(50.2742,)h(28.4499\))f(-->)i
-(\(2:26:40.6,)e(44:41:27\))0 1619 y FF(F)-8 b(or)38 b(a)f(complete)h
-(description)f(of)g(the)g(Rep)s(ort)f(attribute,)k(see)d(its)g(en)m
-(try)g(in)g(App)s(endix)e(C.)59 b(F)-8 b(or)38 b(further)0
-1732 y(details)31 b(of)g(ho)m(w)f(to)h(set)g(and)f(enquire)g(attribute)
-h(v)-5 b(alues,)31 b(see)g Fu(x)p FF(4.6)h(and)e Fu(x)p
-FF(4.5.)0 2021 y Fw(3.12)112 b(.)19 b(.)g(.)g(Read)38
-b(Co)s(ordinates)g(En)m(tered)f(b)m(y)h(a)f(User)0 2240
-y FF(In)c(addition)g(to)h(writing)g(out)f(co)s(ordinate)h(v)-5
-b(alues)34 b(generated)g(b)m(y)g(y)m(our)f(program)g(\()p
-Fu(x)p FF(3.10\),)k(y)m(ou)d(ma)m(y)g(also)0 2353 y(need)c(to)h(accept)
-h(co)s(ordinates)f(en)m(tered)g(b)m(y)f(a)h(user,)f(or)g(p)s(erhaps)f
-(read)h(from)g(a)h(\014le.)41 b(In)29 b(this)i(case,)g(y)m(ou)g(will)0
-2466 y(probably)g(w)m(an)m(t)i(to)g(allo)m(w)g(\\free-format")h(input,)
-d(so)h(that)h(the)f(user)f(has)h(some)g(\015exibilit)m(y)h(in)f(the)g
-(format)0 2578 y(that)f(can)g(b)s(e)e(used.)40 b(Y)-8
-b(ou)31 b(will)g(probably)e(also)j(w)m(an)m(t)f(to)g(detect)h(an)m(y)f
-(t)m(yping)f(errors.)0 2738 y(Let's)f(assume)g(that)g(y)m(ou)g(w)m(an)m
-(t)h(to)f(read)g(a)g(n)m(um)m(b)s(er)e(of)i(lines)g(of)g(text,)h(eac)m
-(h)g(con)m(taining)h(the)d(w)m(orld)h(co)s(ordi-)0 2851
-y(nates)g(of)g(a)g(single)g(p)s(oin)m(t,)g(and)f(to)h(split)g(eac)m(h)g
-(line)g(in)m(to)h(individual)d(n)m(umerical)i(co)s(ordinate)h(v)-5
-b(alues.)40 b(Using)0 2964 y(the)31 b(F)-8 b(rameSet)31
-b(p)s(oin)m(ter)g(\\w)m(csinfo")g(obtained)g(earlier)g(\()p
-Fu(x)p FF(3.4\),)i(y)m(ou)e(could)f(pro)s(ceed)g(as)h(follo)m(ws:)227
-3202 y Ft(#include)41 b(<stdio.h>)227 3302 y(char)h(*t;)227
-3402 y(char)g(text[)g(MAXCHARS)e(+)j(2)g(];)227 3501
-y(double)e(coord[)g(10)i(];)227 3601 y(int)g(iaxis,)e(n,)h(naxes;)227
-3800 y(...)227 3999 y(/*)h(Obtain)e(the)h(number)g(of)g(coordinate)e
-(axes)i(\(if)g(not)g(already)f(known\).)g(*/)227 4099
-y(naxes)h(=)h(astGetI\()d(wcsinfo,)h("Naxes")f(\);)227
-4298 y(/*)j(Loop)f(to)h(read)f(each)g(line)g(of)g(input)g(text,)f(in)i
-(this)f(case)g(from)g(the)358 4398 y(standard)e(input)i(stream)f
-(\(your)g(programming)e(environment)h(will)h(probably)358
-4497 y(provide)g(a)i(better)e(way)h(of)h(reading)e(text)h(than)g
-(this\).)f(Set)h(the)g(pointer)358 4597 y("t")g(to)h(the)f(start)g(of)h
-(each)f(line)g(read.)f(*/)227 4697 y(while)h(\()h(t)g(=)g(fgets\()e
-(text,)h(MAXCHARS)e(+)j(2,)g(stdin)f(\))h(\))g({)227
-4896 y(/*)g(Attempt)e(to)h(read)g(a)i(coordinate)39 b(for)j(each)g
-(axis.)g(*/)358 4996 y(for)g(\()i(iaxis)d(=)i(1;)g(iaxis)f(<=)g(naxes;)
-f(iaxis++)g(\))i({)489 5095 y(n)g(=)g(astUnformat\()c(wcsinfo,)h
-(iaxis,)h(t,)i(&coord[)e(iaxis)g(-)i(1)g(])h(\);)227
-5295 y(/*)f(If)g(nothing)d(was)j(read)f(and)g(this)g(is)h(not)f(the)g
-(first)g(axis)g(or)h(the)358 5394 y(end-of-string,)38
-b(try)k(stepping)e(over)i(a)i(separator)39 b(and)k(reading)d(again.)i
-(*/)358 5494 y(if)h(\()g(!n)g(&&)f(\()i(iaxis)d(>)i(1)h(\))f(&&)f(*t)h
-(\))489 5593 y(n)g(=)g(astUnformat\()c(wcsinfo,)h(iaxis,)h(++t,)h
-(&coord[)f(iaxis)g(-)i(1)h(])f(\);)p eop end
-%%Page: 21 31
-TeXDict begin 21 30 bop 0 52 a Fy(3.13)93 b(.)15 b(.)g(.)h(Create)31
-b(a)g(New)f(W)m(CS)h(Calibration)2055 b FF(21)227 351
-y Ft(/*)43 b(Quit)f(if)h(nothing)d(was)j(read,)e(otherwise)f(move)i(on)
-h(to)g(the)f(next)g(coordinate.)d(*/)489 451 y(if)k(\()g(!n)f(\))i
-(break;)489 551 y(t)f(+=)g(n;)358 650 y(})227 849 y(/*)g(Test)f(for)g
-(the)h(possible)d(errors)h(that)h(may)g(occur...)f(*/)227
-1049 y(/*)i(Error)f(detected)e(by)j(AST)f(\(a)h(message)d(will)i(have)g
-(been)g(issued\).)e(*/)358 1148 y(if)j(\()g(!astOK)e(\))i({)489
-1248 y(break;)227 1447 y(/*)g(Error)f(in)g(input)g(data)g(at)h
-(character)c(t[n].)j(*/)358 1547 y(})h(else)f(if)h(\()g(*t)g(||)g(!n)f
-(\))i({)489 1646 y(<handle)c(the)j(error,)e(or)i(report)e(your)h(own)g
-(message)f(here>)489 1746 y(break;)358 1945 y(})i(else)f({)489
-2045 y(<coordinates)c(were)k(read)g(OK>)358 2145 y(})227
-2244 y(})0 2486 y FF(This)24 b(algorithm)i(has)f(the)g(adv)-5
-b(an)m(tage)27 b(of)e(accepting)i(free-format)f(input)e(in)g(whatev)m
-(er)i(st)m(yle)g(is)f(appropriate)0 2599 y(for)i(the)h(w)m(orld)g(co)s
-(ordinates)g(in)f(use)h(\(under)e(the)i(con)m(trol)h(of)f(the)g(F)-8
-b(rameSet)29 b(whose)e(p)s(oin)m(ter)h(y)m(ou)g(pro)m(vide\).)0
-2712 y(F)-8 b(or)23 b(example,)i(w)m(a)m(v)m(elength)f(v)-5
-b(alues)23 b(migh)m(t)f(b)s(e)g(read)g(as)g(\015oating)h(p)s(oin)m(t)g
-(n)m(um)m(b)s(ers)d(\()p Fx(e.g.)i FF(\\1.047")j(or)d(\\4787"\),)0
-2825 y(whereas)33 b(celestial)j(p)s(ositions)e(could)f(b)s(e)g(giv)m
-(en)i(in)e(sexagesimal)i(format)f(\()p Fx(e.g.)f FF(\\12:34:56")38
-b(or)33 b(\\12)i(34.5"\))0 2938 y(and)d(w)m(ould)h(b)s(e)f(con)m(v)m
-(erted)i(in)m(to)g(radians.)48 b(Individual)32 b(co)s(ordinate)h(v)-5
-b(alues)34 b(ma)m(y)f(b)s(e)f(separated)i(b)m(y)e(white)0
-3051 y(space)f(and/or)f(an)m(y)h(non-am)m(biguous)f(separator)h(c)m
-(haracter,)h(suc)m(h)e(as)h(a)g(comma.)0 3209 y(F)-8
-b(or)39 b(more)f(information)g(on)g(reading)g(co)s(ordinate)h(v)-5
-b(alues)38 b(using)g(the)g(astUnformat)g(function,)i(see)f
-Fu(x)p FF(7.8.)0 3322 y(F)-8 b(or)35 b(details)g(of)g(ho)m(w)f
-(sexagesimal)j(formats)d(are)h(handled,)g(and)e(the)i(forms)f(of)g
-(input)g(that)h(ma)m(y)g(b)s(e)e(used)0 3434 y(for)d(celestial)j(co)s
-(ordinates,)e(see)g Fu(x)p FF(8.7.)0 3720 y Fw(3.13)112
-b(.)19 b(.)g(.)g(Create)37 b(a)h(New)f(W)m(CS)g(Calibration)0
-3937 y FF(This)29 b(section)h(describ)s(es)f(ho)m(w)g(to)h(add)f(a)h(W)
-m(CS)f(calibration)i(to)f(a)g(data)g(set)g(whic)m(h)f(y)m(ou)g(are)h
-(creating)h(from)0 4050 y(scratc)m(h,)h(rather)e(than)g(mo)s(difying)g
-(an)g(existing)h(data)g(set.)0 4207 y(In)d(most)g(common)h(cases,)h
-(the)e(simplest)g(w)m(a)m(y)i(to)f(create)g(a)g(new)f(W)m(CS)g
-(calibration)i(from)e(scratc)m(h)h(is)f(prob-)0 4320
-y(ably)i(to)h(create)h(a)e(set)h(of)f(strings)g(describing)g(the)g
-(required)g(calibration)h(in)f(terms)g(of)g(the)h(k)m(eyw)m(ords)f
-(used)0 4433 y(b)m(y)k(the)g(FITS)g(W)m(CS)g(standard,)g(and)g(then)g
-(con)m(v)m(ert)h(these)g(strings)f(in)m(to)h(an)f(AST)f(F)-8
-b(rameSet)36 b(describing)0 4546 y(the)d(calibration.)48
-b(This)32 b(F)-8 b(rameSet)33 b(can)g(then)f(b)s(e)g(used)g(for)g(man)m
-(y)h(other)f(purp)s(oses,)g(or)g(simply)g(stored)h(in)0
-4659 y(the)e(data)g(set.)0 4817 y(The)h(full)h(FITS-W)m(CS)g(standard)f
-(is)h(quite)g(in)m(v)m(olv)m(ed,)j(curren)m(tly)d(running)e(to)i(four)g
-(separate)h(pap)s(ers,)e(but)0 4929 y(the)42 b(basic)g(k)m(ernel)g(is)g
-(quite)g(simple,)j(in)m(v)m(olving)e(the)f(follo)m(wing)i(k)m(eyw)m
-(ords)e(\(all)h(of)f(whic)m(h)f(end)g(with)h(an)0 5042
-y(in)m(teger)32 b(axis)f(index,)f(indicated)h(b)s(elo)m(w)f(b)m(y)h
-Fo(<)25 b(i)g(>)p FF(\):)0 5285 y FD(CRPIX<i>)227 5398
-y FF(hold)30 b(the)h(pixel)g(co)s(ordinates)g(at)g(a)g(reference)f(p)s
-(oin)m(t)0 5580 y FD(CR)-12 b(V)g(AL<i>)227 5693 y FF(hold)30
-b(the)h(corresp)s(onding)e(W)m(CS)i(co)s(ordinates)g(at)g(the)f
-(reference)h(p)s(oin)m(t)p eop end
-%%Page: 22 32
-TeXDict begin 22 31 bop 0 52 a FF(22)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)0 351 y FD(CTYPE<i>)227 464 y FF(name)33
-b(the)f(quan)m(tit)m(y)h(represen)m(ted)f(b)m(y)h(the)f(W)m(CS)g(axes,)
-i(together)f(with)f(the)h(pro)5 b(jection)32 b(algorithm)227
-577 y(used)e(to)h(con)m(v)m(ert)h(the)e(scaled)i(and)d(rotated)j(pixel)
-f(co)s(ordinates)g(to)g(W)m(CS)f(co)s(ordinates.)0 774
-y FD(CD<i>)p Fq(_)p FD(<j>)227 887 y FF(a)i(set)g(of)f(k)m(eyw)m(ords)h
-(whic)m(h)e(sp)s(ecify)h(the)h(elemen)m(ts)g(of)g(a)f(matrix.)44
-b(This)30 b(matrix)i(scales)g(pixel)g(o\013sets)227 1000
-y(from)41 b(the)f(reference)i(p)s(oin)m(t)e(in)m(to)i(the)f(o\013sets)h
-(required)e(as)h(input)e(b)m(y)i(the)g(pro)5 b(jection)41
-b(algorithm)227 1113 y(sp)s(eci\014ed)e(b)m(y)g(the)h(CTYPE)e(k)m(eyw)m
-(ords.)68 b(This)39 b(matrix)g(sp)s(eci\014es)g(the)h(scale)g(and)f
-(rotation)i(of)e(the)227 1226 y(image.)63 b(If)36 b(there)i(is)f(no)g
-(rotation)h(the)g(o\013-diagonal)h(elemen)m(ts)g(of)e(the)g(matrix)h
-(\()p Fx(e.g.)60 b FF(CD1)p Fq(_)p FF(2)38 b(and)227
-1339 y(CD2)p Fq(_)p FF(1\))32 b(can)e(b)s(e)g(omitted.)0
-1616 y(As)37 b(an)h(example)g(consider)f(the)h(common)g(case)g(of)g(a)g
-(simple)f(2D)i(image)g(of)e(the)h(sky)f(in)g(whic)m(h)h(north)e(is)0
-1729 y(parallel)f(to)f(the)g(second)g(pixel)g(axis)g(and)f(east)i
-(parallel)f(to)h(the)f(\(negativ)m(e\))i(\014rst)d(pixel)h(axis.)51
-b(The)33 b(image)0 1841 y(scale)27 b(is)f(1.2)h(arc-seconds)f(p)s(er)f
-(pixel)h(on)f(b)s(oth)g(axes,)j(and)d(the)h(image)h(is)f(presumed)e(to)
-i(ha)m(v)m(e)h(b)s(een)e(obtained)0 1954 y(with)35 b(a)h(tangen)m(t)g
-(plane)f(pro)5 b(jection.)56 b(F)-8 b(urthermore,)37
-b(it)f(is)f(kno)m(wn)g(that)g(pixel)h(co)s(ordinates)g(\(100.5,98.4\))0
-2067 y(corresp)s(ond)31 b(to)j(an)e(RA)h(of)f(11:00:10)k(and)c(a)h
-(Dec.)48 b(of)33 b(-23:26:02.)51 b(A)33 b(suitable)g(set)g(of)f(FITS-W)
-m(CS)h(header)0 2180 y(cards)d(could)h(b)s(e:)227 2444
-y Ft(CTYPE1)85 b(=)43 b('RA---TAN')301 b(/)43 b(Axis)f(1)h(represents)d
-(RA)j(with)f(a)h(tan)f(projection)227 2543 y(CTYPE2)85
-b(=)43 b('DEC--TAN')301 b(/)43 b(Axis)f(2)h(represents)d(Dec)i(with)g
-(a)h(tan)g(projection)227 2643 y(CRPIX1)85 b(=)43 b(100.5)521
-b(/)43 b(Pixel)f(coordinates)d(of)k(reference)c(point)227
-2743 y(CRPIX2)85 b(=)43 b(98.4)565 b(/)43 b(Pixel)f(coordinates)d(of)k
-(reference)c(point)227 2842 y(CRVAL1)85 b(=)43 b(165.04167)345
-b(/)43 b(Degrees)e(equivalent)e(of)k("11:00:10")d(hours)227
-2942 y(CRVAL2)85 b(=)43 b(-23.433889)301 b(/)43 b(Decimal)e(equivalent)
-e(of)k("-23:26:02")c(degrees)227 3041 y(CD1_1)129 b(=)43
-b(-0.0003333333)169 b(/)43 b(Decimal)e(degrees)g(equivalent)e(of)k
-(-1.2)f(arc-seconds)227 3141 y(CD2_2)129 b(=)43 b(0.0003333333)213
-b(/)43 b(Decimal)e(degrees)g(equivalent)e(of)k(1.2)f(arc-seconds)0
-3418 y FF(Notes:)136 3667 y Fu(\017)k FF(a)37 b(FITS)f(header)g(card)h
-(b)s(egins)f(with)g(the)g(k)m(eyw)m(ord)h(name)g(starting)g(at)g
-(column)g(1,)h(has)f(an)f(equals)227 3780 y(sign)31 b(in)f(column)g(9,)
-h(and)f(the)g(k)m(eyw)m(ord)h(v)-5 b(alue)31 b(in)f(columns)g(11)h(to)g
-(80.)136 3978 y Fu(\017)46 b FF(string)31 b(v)-5 b(alues)30
-b(m)m(ust)h(b)s(e)e(enclosed)i(in)f(single)h(quotes.)136
-4175 y Fu(\017)46 b FF(celestial)33 b(longitude)e(and)f(latitude)h(m)m
-(ust)g(b)s(oth)e(b)s(e)h(sp)s(eci\014ed)g(in)g(decimal)h(degrees.)136
-4372 y Fu(\017)46 b FF(the)28 b(CD1)p Fq(_)p FF(1)g(v)-5
-b(alue)29 b(is)e(negativ)m(e)j(to)f(indicate)f(that)h(RA)e(increases)i
-(as)e(the)h(\014rst)f(pixel)h(axis)g(decreases.)136 4569
-y Fu(\017)46 b FF(the)31 b(\(RA,Dec\))h(co)s(ordinates)g(will)e(b)s(e)g
-(tak)m(en)h(as)g(ICRS)e(co)s(ordinates.)42 b(F)-8 b(or)31
-b(FK5)g(y)m(ou)f(should)g(add:)427 4781 y Ft(RADESYS)41
-b(=)i('FK5')427 4880 y(EQUINOX)e(=)i(2005.6)227 5105
-y FF(The)38 b(EQUINO)m(X)f(v)-5 b(alue)39 b(defaults)e(to)i(J2000.0)h
-(if)d(omitted.)64 b(FK4)38 b(can)g(also)h(b)s(e)e(used)g(in)h(place)g
-(of)227 5218 y(FK5,)31 b(in)f(whic)m(h)g(case)i(EQUINO)m(X)e(defaults)h
-(to)g(B1950.0.)0 5467 y(Once)21 b(y)m(ou)g(ha)m(v)m(e)h(created)g
-(these)f(FITS-W)m(CS)g(header)f(card)h(strings,)i(y)m(ou)e(should)f
-(store)h(them)g(in)f(a)i(FitsChan)0 5580 y(and)33 b(then)g(read)g(the)h
-(corresp)s(onding)e(F)-8 b(rameSet)34 b(from)f(the)h(FitsChan.)49
-b(Ho)m(w)35 b(to)f(do)f(this)g(is)h(describ)s(ed)e(in)0
-5693 y Fu(x)p FF(3.4.)p eop end
-%%Page: 23 33
-TeXDict begin 23 32 bop 0 52 a Fy(3.14)93 b(.)15 b(.)g(.)h(Mo)s(dify)30
-b(a)h(W)m(CS)f(Calibration)2240 b FF(23)0 351 y(Ha)m(ving)32
-b(created)g(the)f(W)m(CS)f(calibration,)j(y)m(ou)e(ma)m(y)g(w)m(an)m(t)
-h(to)f(store)g(it)h(in)e(a)h(data)h(\014le.)41 b(Ho)m(w)32
-b(to)f(do)g(this)f(is)0 464 y(describ)s(ed)f(in)h Fu(x)p
-FF(3.15\).)768 431 y Fv(6)0 627 y FF(If)39 b(the)h(required)f(W)m(CS)h
-(calibration)h(cannot)g(b)s(e)e(describ)s(ed)g(as)h(a)g(set)g(of)g
-(FITS-W)m(CS)g(headers,)i(then)d(a)0 740 y(di\013eren)m(t)f(approac)m
-(h)f(is)g(necessary)-8 b(.)61 b(In)37 b(this)g(case,)j(y)m(ou)d(should)
-f(\014rst)g(create)j(a)e(F)-8 b(rame)38 b(describing)f(pixel)0
-853 y(co)s(ordinates,)42 b(and)c(store)h(this)g(F)-8
-b(rame)39 b(in)g(a)g(new)f(F)-8 b(rameSet.)67 b(Y)-8
-b(ou)39 b(should)f(then)g(create)i(a)f(new)g(F)-8 b(rame)0
-966 y(describing)33 b(the)h(w)m(orld)f(co)s(ordinate)h(system.)50
-b(This)33 b(F)-8 b(rame)34 b(ma)m(y)g(b)s(e)f(a)h(sp)s(eci\014c)f(sub)s
-(class)g(of)g(F)-8 b(rame)35 b(suc)m(h)0 1079 y(as)c(a)f(SkyF)-8
-b(rame)31 b(for)f(celestial)j(co)s(ordinates,)e(a)g(Sp)s(ecF)-8
-b(rame)31 b(for)f(sp)s(ectral)g(co)s(ordinates,)i(a)e(Timeframe)h(for)0
-1192 y(time)40 b(co)s(ordinates,)j(or)d(a)g(CmpF)-8 b(rame)39
-b(for)h(a)g(com)m(bination)h(of)f(di\013eren)m(t)g(co)s(ordinates.)69
-b(Y)-8 b(ou)40 b(also)h(need)0 1305 y(to)35 b(create)g(a)g(suitable)f
-(Mapping)g(whic)m(h)g(transforms)f(pixel)h(co)s(ordinates)h(in)m(to)g
-(w)m(orld)f(co)s(ordinates.)52 b(AST)0 1418 y(pro)m(vides)32
-b(man)m(y)f(di\013eren)m(t)i(t)m(yp)s(es)e(of)h(Mappings,)g(all)h(of)f
-(whic)m(h)f(can)h(b)s(e)f(com)m(bined)h(together)h(in)f(arbitrary)0
-1531 y(fashions)c(to)g(create)i(more)e(complicated)h(Mappings.)40
-b(The)27 b(W)m(CS)h(F)-8 b(rame)29 b(should)e(then)h(b)s(e)f(added)g
-(in)m(to)i(the)0 1643 y(F)-8 b(rameSet,)32 b(using)e(the)g(Mapping)h
-(to)g(connect)g(the)g(W)m(CS)f(F)-8 b(rame)31 b(with)f(the)h(pixel)g(F)
--8 b(rame.)0 1938 y Fw(3.14)112 b(.)19 b(.)g(.)g(Mo)s(dify)38
-b(a)g(W)m(CS)f(Calibration)0 2160 y FF(The)c(usual)g(reason)g(for)h
-(wishing)e(to)j(mo)s(dify)d(the)i(W)m(CS)f(calibration)i(asso)s(ciated)
-g(with)e(a)h(dataset)g(is)g(that)0 2273 y(the)24 b(data)g(ha)m(v)m(e)h
-(b)s(een)e(geometrically)k(transformed)22 b(in)i(some)g(w)m(a)m(y)h
-(\(here,)g(w)m(e)f(will)g(assume)g(a)g(2-dimensional)0
-2386 y(image)36 b(dataset\).)54 b(This)33 b(causes)i(the)f(image)i
-(features)e(\(stars,)i(galaxies,)i Fx(etc.)p FF(\))52
-b(to)35 b(mo)m(v)m(e)h(with)d(resp)s(ect)i(to)0 2499
-y(the)29 b(grid)g(of)g(pixels)g(whic)m(h)f(they)h(o)s(ccup)m(y)-8
-b(,)30 b(so)g(that)f(an)m(y)g(co)s(ordinate)h(systems)f(previously)f
-(asso)s(ciated)j(with)0 2611 y(the)g(image)g(b)s(ecome)g(in)m(v)-5
-b(alid.)0 2775 y(T)d(o)34 b(correct)g(for)f(this,)g(it)h(is)f
-(necessary)g(to)h(set)g(up)e(a)h(Mapping)g(whic)m(h)g(expresses)g(the)g
-(p)s(ositions)g(of)g(image)0 2887 y(features)e(in)f(the)g(new)g(data)h
-(grid)f(in)g(terms)h(of)f(their)h(p)s(ositions)f(in)g(the)g(old)h
-(grid.)40 b(In)30 b(b)s(oth)g(cases,)h(the)g(grid)0 3000
-y(co)s(ordinates)f(w)m(e)g(use)g(will)f(ha)m(v)m(e)i(the)f(\014rst)f
-(pixel)h(cen)m(tred)g(at)g(\(1,1\))h(with)f(eac)m(h)g(pixel)g(b)s(eing)
-f(a)h(unit)f(square.)0 3163 y(AST)j(allo)m(ws)h(y)m(ou)g(to)g(correct)g
-(for)f(an)m(y)h(t)m(yp)s(e)f(of)h(geometrical)i(transformation)e(in)f
-(this)g(w)m(a)m(y)-8 b(,)34 b(so)f(long)g(as)f(a)0 3276
-y(suitable)c(Mapping)g(to)g(describ)s(e)f(it)i(can)f(b)s(e)f
-(constructed.)40 b(F)-8 b(or)28 b(purp)s(oses)e(of)i(illustration,)h(w)
-m(e)g(will)f(assume)0 3389 y(here)k(that)h(the)f(new)g(image)h(co)s
-(ordinates)g(\\xnew")g(and)e(\\ynew")i(can)f(b)s(e)g(expressed)g(in)f
-(terms)i(of)f(the)g(old)0 3502 y(co)s(ordinates)f(\\xold")g(and)f(\\y)m
-(old")i(as)f(follo)m(ws:)227 3752 y Ft(double)41 b(xnew,)h(xold,)f
-(ynew,)h(yold;)227 3852 y(double)f(m[)i(4)g(],)g(z[)g(2)g(];)227
-4051 y(...)227 4250 y(xnew)f(=)h(xold)f(*)h(m[)g(0)g(])h(+)f(yold)f(*)h
-(m[)g(1)g(])g(+)g(z[)g(0)g(];)227 4350 y(ynew)f(=)h(xold)f(*)h(m[)g(2)g
-(])h(+)f(yold)f(*)h(m[)g(3)g(])g(+)g(z[)g(1)g(];)0 4613
-y FF(where)27 b(\\m")g(is)h(a)f(2)p Fu(\002)p FF(2)h(transformation)f
-(matrix)h(and)e(\\z")j(represen)m(ts)e(a)g(shift)g(of)g(origin.)40
-b(This)27 b(is)g(therefore)0 4726 y(a)i(general)h(linear)f(co)s
-(ordinate)h(transformation)f(whic)m(h)g(can)g(represen)m(t)g
-(displacemen)m(t,)i(rotation,)f(magni\014-)0 4839 y(cation)i(and)d
-(shear.)0 5002 y(In)d(AST,)h(it)g(can)g(b)s(e)f(represen)m(ted)h(b)m(y)
-g(concatenating)i(t)m(w)m(o)g(Mappings.)39 b(The)26 b(\014rst)g(is)h(a)
-h(MatrixMap,)h(whic)m(h)0 5115 y(implemen)m(ts)i(the)f(matrix)h(m)m
-(ultiplication.)42 b(The)30 b(second)g(is)g(a)h(WinMap,)g(whic)m(h)f
-(linearly)h(transforms)e(one)0 5228 y(co)s(ordinate)i(windo)m(w)f(on)g
-(to)h(another,)f(but)g(will)g(b)s(e)g(used)f(here)h(simply)g(to)h
-(implemen)m(t)f(the)h(shift)f(of)g(origin)0 5341 y(\(alternativ)m(ely)
--8 b(,)37 b(a)c(ShiftMap)f(could)g(ha)m(v)m(e)i(b)s(een)e(used)g(in)g
-(place)i(of)e(a)h(WinMap\).)48 b(These)33 b(Mappings)f(ma)m(y)0
-5454 y(b)s(e)e(constructed)g(and)g(concatenated)j(as)d(follo)m(ws:)p
-0 5516 1512 4 v 104 5570 a Fs(6)138 5602 y Fr(If)23 b(y)n(ou)g(are)h
-(writing)g(the)e(W)n(CS)h(calibration)i(to)e(a)h(FITS)f(\014le)g(y)n
-(ou)f(ob)n(viously)h(ha)n(v)n(e)g(the)g(c)n(hoice)g(of)h(storing)g(the)
-f(FITS-W)n(CS)0 5693 y(cards)j(directly)-6 b(.)p eop
-end
-%%Page: 24 34
-TeXDict begin 24 33 bop 0 52 a FF(24)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(AstCmpMap)40 b(*newmap;)227
-451 y(AstMatrixMap)f(*matrixmap;)227 551 y(AstWinMap)h(*winmap;)227
-750 y(...)227 949 y(/*)j(The)f(MatrixMap)e(may)j(be)f(constructed)d
-(directly)i(from)h(the)g(matrix)f("m".)h(*/)227 1049
-y(matrixmap)e(=)j(astMatrixMap\()c(2,)j(2,)h(0,)g(m,)g("")f(\);)227
-1248 y(/*)h(For)f(the)h(WinMap,)d(we)j(set)g(up)f(the)h(coordinates)c
-(of)j(the)h(corners)d(of)j(a)g(unit)358 1348 y(square)e(\(window\))f
-(and)j(then)f(the)g(same)g(square)f(shifted)g(by)i(the)f(required)358
-1447 y(amount.)f(*/)227 1547 y({)358 1646 y(double)g(ina[])h(=)h({)g
-(0.0,)f(0.0)g(};)358 1746 y(double)f(inb[])h(=)h({)g(1.0,)f(1.0)g(};)
-358 1846 y(double)f(outa[])g(=)i({)305 b(z[)43 b(0)g(],)304
-b(z[)43 b(1)g(])g(};)358 1945 y(double)e(outb[])g(=)i({)h(1.0)e(+)h(z[)
-g(0)g(],)g(1.0)f(+)h(z[)g(1)g(])g(};)227 2145 y(/*)g(The)f(WinMap)f
-(will)h(then)g(implement)e(this)i(shift.)f(*/)358 2244
-y(winmap)g(=)i(astWinMap\()d(2,)j(ina,)e(inb,)h(outa,)g(outb,)f("")i
-(\);)227 2344 y(})227 2543 y(/*)g(Join)f(the)g(two)h(Mappings)d
-(together,)g(so)j(that)e(they)h(are)h(applied)d(one)j(after)358
-2643 y(the)f(other.)f(*/)227 2742 y(newmap)g(=)j(astCmpMap\()39
-b(matrixmap,)g(winmap,)i(1,)i("")g(\);)0 2959 y FF(Y)-8
-b(ou)33 b(migh)m(t,)i(of)e(course,)h(create)h(an)m(y)e(other)g(form)g
-(of)g(Mapping)g(dep)s(ending)e(on)i(the)g(t)m(yp)s(e)h(of)f
-(geometrical)0 3072 y(transformation)g(in)m(v)m(olv)m(ed.)51
-b(F)-8 b(or)33 b(an)g(o)m(v)m(erview)i(of)e(the)g(Mappings)g(pro)m
-(vided)g(b)m(y)g(AST,)f(see)i Fu(x)p FF(2.2,)h(and)e(for)0
-3184 y(a)g(description)g(of)f(the)h(capabilities)i(of)e(eac)m(h)g
-(class)h(of)f(Mapping,)g(see)g(its)g(en)m(try)g(in)f(App)s(endix)f(D.)
-48 b(F)-8 b(or)34 b(an)0 3297 y(o)m(v)m(erview)e(of)f(ho)m(w)f
-(individual)g(Mappings)g(ma)m(y)h(b)s(e)f(com)m(bined,)g(see)h
-Fu(x)p FF(2.3)h(\()p Fu(x)p FF(6)g(giv)m(es)f(more)g(details\).)0
-3449 y(Assuming)21 b(y)m(ou)h(ha)m(v)m(e)h(obtained)e(a)h(W)m(CS)g
-(calibration)h(for)e(y)m(our)h(original)h(image)f(in)g(the)f(form)g(of)
-h(a)g(p)s(oin)m(ter)g(to)0 3562 y(a)k(F)-8 b(rameSet,)28
-b(\\w)m(csinfo1")f(\()p Fu(x)p FF(3.4\),)i(the)d(Mapping)g(created)g
-(ab)s(o)m(v)m(e)h(ma)m(y)f(b)s(e)f(used)g(to)i(pro)s(duce)d(a)i
-(calibration)0 3674 y(for)k(the)h(new)f(image)h(as)g(follo)m(ws:)227
-3878 y Ft(AstFrameSet)39 b(*wcsinfo1,)h(*wcsinfo2;)227
-4077 y(...)227 4276 y(/*)j(If)g(necessary,)c(make)j(a)h(copy)f(of)h
-(the)f(WCS)h(calibration,)38 b(since)k(we)h(are)358 4376
-y(about)f(to)g(alter)g(it.)g(*/)227 4475 y(wcsinfo2)f(=)i(astCopy\()d
-(wcsinfo1)g(\);)227 4675 y(/*)j(Re-map)e(the)h(base)g(Frame)g(so)h
-(that)f(it)g(refers)f(to)i(the)g(new)f(data)g(grid)358
-4774 y(instead)f(of)h(the)h(old)f(one.)g(*/)227 4874
-y(astRemapFrame\()c(wcsinfo2,)i(AST__BASE,)f(newmap)i(\);)0
-5090 y FF(This)28 b(will)h(pro)s(duce)f(a)h(p)s(oin)m(ter,)g(\\w)m
-(csinfo2",)i(to)f(a)f(new)f(F)-8 b(rameSet)30 b(in)f(whic)m(h)f(all)i
-(the)f(co)s(ordinate)g(systems)0 5203 y(asso)s(ciated)34
-b(with)e(y)m(our)g(original)i(image)f(are)g(mo)s(di\014ed)e(so)i(that)g
-(they)g(are)f(correctly)i(registered)f(with)f(the)0 5316
-y(new)e(image)h(instead.)0 5467 y(F)-8 b(or)26 b(more)e(information)h
-(ab)s(out)g(re-mapping)f(the)h(F)-8 b(rames)26 b(within)e(a)h(F)-8
-b(rameSet,)28 b(see)d Fu(x)p FF(14.4.)41 b(Also)25 b(see)h
-Fu(x)p FF(14.5)0 5580 y(for)35 b(a)g(similar)g(example)g(to)h(the)f(ab)
-s(o)m(v)m(e,)i(applicable)f(to)f(the)g(case)h(of)f(reducing)f(the)h
-(size)h(of)f(an)g(image)h(b)m(y)0 5693 y(binning.)p eop
-end
-%%Page: 25 35
-TeXDict begin 25 34 bop 0 52 a Fy(3.15)93 b(.)15 b(.)g(.)h(W)-8
-b(rite)32 b(a)e(Mo)s(di\014ed)g(W)m(CS)g(Calibration)h(to)h(a)e
-(Dataset)1399 b FF(25)0 351 y Fw(3.15)112 b(.)19 b(.)g(.)g(W)-9
-b(rite)36 b(a)i(Mo)s(di\014ed)h(W)m(CS)e(Calibration)i(to)e(a)h
-(Dataset)0 576 y FF(If)g(y)m(ou)h(ha)m(v)m(e)g(mo)s(di\014ed)f(the)g(W)
-m(CS)h(calibration)g(asso)s(ciated)h(with)e(a)h(dataset,)j(suc)m(h)c
-(as)h(in)f(the)h(example)0 688 y(ab)s(o)m(v)m(e)32 b(\()p
-Fu(x)p FF(3.14\),)h(then)d(y)m(ou)h(will)f(need)g(to)i(write)e(the)h
-(mo)s(di\014ed)e(v)m(ersion)i(out)f(along)i(with)e(an)m(y)h(new)e
-(data.)0 853 y(In)c(the)h(same)g(w)m(a)m(y)h(as)f(when)f(reading)h(a)g
-(W)m(CS)g(calibration)h(\()p Fu(x)p FF(3.4\),)i(ho)m(w)d(y)m(ou)g(do)g
-(this)g(will)g(dep)s(end)e(on)i(y)m(our)0 966 y(data)k(system,)g(but)f
-(w)m(e)h(will)g(assume)f(that)h(y)m(ou)g(wish)e(to)j(generate)f(a)g
-(set)g(of)g(FITS)f(header)g(cards)g(that)h(can)0 1079
-y(b)s(e)35 b(stored)i(with)e(the)h(data.)59 b(Y)-8 b(ou)36
-b(should)f(usually)h(mak)m(e)h(preparations)f(for)g(doing)g(this)g
-(when)f(y)m(ou)h(\014rst)0 1192 y(read)f(the)g(W)m(CS)g(calibration)h
-(from)f(y)m(our)f(input)g(dataset)j(b)m(y)d(mo)s(difying)h(the)g
-(example)g(giv)m(en)h(in)f Fu(x)p FF(3.4)h(as)0 1305
-y(follo)m(ws:)227 1560 y Ft(AstFitsChan)j(*fitschan1;)227
-1659 y(AstFrameSet)g(*wcsinfo1;)227 1759 y(const)j(char)g(*encode;)227
-1958 y(...)227 2157 y(/*)h(Create)e(an)i(input)e(FitsChan)g(and)h(fill)
-g(it)h(with)f(FITS)g(header)f(cards.)g(Note,)358 2257
-y(if)i(you)f(have)g(all)g(the)h(header)e(cards)g(in)i(a)g(single)e
-(string,)g(use)h(astPutCards)d(in)358 2357 y(place)j(of)g(astPutFits.)d
-(*/)227 2456 y(fitschan1)h(=)j(astFitsChan\()c(NULL,)i(NULL,)h("")h
-(\);)227 2556 y(for)g(\()g(icard)e(=)i(0;)g(icard)f(<)h(ncard;)e
-(icard++)g(\))i(astPutFits\()c(fitschan1,)g(cards[)i(icard)h(],)h(0)g
-(\);)227 2755 y(/*)g(Note)f(which)f(encoding)g(has)h(been)g(used)g(for)
-g(the)h(WCS)f(information.)d(*/)227 2855 y(encode)i(=)j(astGetC\()c
-(fitschan1,)f("Encoding")h(\);)227 3054 y(/*)j(Rewind)e(the)h(input)g
-(FitsChan)e(and)j(read)f(the)g(WCS)g(information)d(from)j(it.)h(*/)227
-3154 y(astClear\()d(fitschan1,)g("Card")h(\);)227 3253
-y(wcsinfo1)g(=)i(astRead\()d(fitschan1)g(\);)0 3521 y
-FF(Note)33 b(ho)m(w)e(w)m(e)h(ha)m(v)m(e)h(added)e(an)g(enquiry)g(to)h
-(determine)g(ho)m(w)f(the)h(W)m(CS)g(information)f(is)h(enco)s(ded)f
-(in)g(the)0 3634 y(input)f(FITS)g(cards,)h(storing)g(a)h(p)s(oin)m(ter)
-e(to)i(the)f(resulting)g(string)g(in)g(the)g(\\enco)s(de")h(v)-5
-b(ariable.)43 b(This)30 b(m)m(ust)0 3747 y(b)s(e)g(done)g
-FD(b)s(efore)g FF(actually)i(reading)f(the)f(W)m(CS)h(calibration.)0
-3912 y Fx(\()p FD(N.B.)g Fx(If)f(you)h(wil)5 b(l)31 b(b)-5
-b(e)31 b(making)g(extensive)f(use)h(of)g(astGetC)g(in)g(your)g(pr)-5
-b(o)g(gr)g(am,)34 b(then)d(you)g(should)h(al)5 b(lo)-5
-b(c)g(ate)0 4025 y(a)28 b(bu\013er)f(and)i(make)f(a)g(c)-5
-b(opy)29 b(of)f(this)g(string,)h(b)-5 b(e)g(c)g(ause)29
-b(the)f(p)-5 b(ointer)29 b(r)-5 b(eturne)g(d)29 b(by)f(astGetC)h(wil)5
-b(l)28 b(only)g(r)-5 b(emain)0 4138 y(valid)32 b(for)g(50)g(invo)-5
-b(c)g(ations)33 b(of)f(the)f(function,)h(and)g(you)g(wil)5
-b(l)31 b(ne)-5 b(e)g(d)33 b(to)e(use)g(the)h(Enc)-5 b(o)g(ding)32
-b(value)g(again)f(later)0 4251 y(on.\))0 4415 y FF(Once)40
-b(y)m(ou)h(ha)m(v)m(e)h(pro)s(duced)d(a)i(mo)s(di\014ed)e(W)m(CS)h
-(calibration)i(for)f(the)f(output)g(dataset)i(\()p Fx(e.g.)e
-Fu(x)p FF(3.14\),)46 b(in)0 4528 y(the)33 b(form)f(of)h(a)g(F)-8
-b(rameSet)34 b(iden)m(ti\014ed)f(b)m(y)f(the)h(p)s(oin)m(ter)g(\\w)m
-(csinfo2",)i(y)m(ou)e(can)g(pro)s(duce)e(a)i(new)g(FitsChan)0
-4641 y(con)m(taining)f(the)e(output)g(FITS)g(header)g(cards)g(as)h
-(follo)m(ws:)227 4896 y Ft(AstFitsChan)39 b(*fitschan2;)227
-4996 y(AstFrameSet)g(*wcsinfo2;)227 5195 y(...)227 5394
-y(/*)k(Make)f(a)h(copy)f(of)h(the)f(input)g(FitsChan,)e(AFTER)h(the)h
-(WCS)h(information)c(has)358 5494 y(been)j(read)g(from)g(it.)g(This)g
-(will)g(propagate)e(all)i(the)h(input)e(FITS)h(header)358
-5593 y(cards,)f(apart)h(from)g(those)f(describing)f(the)i(input)f(WCS)i
-(calibration.)38 b(*/)227 5693 y(fitschan2)i(=)j(astCopy\()e(fitschan1)
-e(\);)p eop end
-%%Page: 26 36
-TeXDict begin 26 35 bop 0 52 a FF(26)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 451 y Ft(/*)43 b(If)g(necessary,)c(make)j
-(modifications)c(to)43 b(the)f(cards)g(in)h("fitschan2")358
-551 y(\(e.g.)f(you)g(might)f(need)h(to)h(change)e(NAXIS1,)g(NAXIS2,)g
-(etc.,)g(to)i(account)e(for)358 650 y(a)i(change)e(in)i(image)f
-(size\).)f(You)h(probably)e(only)i(need)g(to)h(do)g(this)f(if)g(your)
-358 750 y(data)g(system)f(does)h(not)g(provide)f(these)h(facilities)d
-(itself.)i(*/)227 849 y(<details)g(not)h(shown)f(-)j(see)e(below>)227
-1049 y(/*)h(Alternatively,)38 b(if)43 b(your)f(data)f(system)h(handles)
-e(the)j(propagation)c(of)j(FITS)358 1148 y(header)f(cards)h(to)g(the)h
-(output)e(dataset)g(for)h(you,)g(then)g(simply)f(create)g(an)358
-1248 y(empty)h(FitsChan)e(to)j(contain)d(the)j(output)e(WCS)h
-(information)d(alone.)227 1348 y(fitschan2)h(=)j(astFitsChan\()c(NULL,)
-i(NULL,)h("")h(\);)227 1447 y(*/)227 1646 y(/*)g(Rewind)e(the)h(new)h
-(FitsChan)d(\(if)i(necessary\))e(and)i(attempt)f(to)i(write)e(the)358
-1746 y(output)g(WCS)h(information)e(to)i(it)h(using)f(the)g(same)g
-(encoding)e(method)h(as)i(the)358 1846 y(input)f(dataset.)e(*/)227
-1945 y(astSet\()h(fitschan2,)e("Card=1,)i(Encoding=\045s",)d(encode)j
-(\);)227 2045 y(if)i(\()g(!astWrite\()d(fitschan2,)f(wcsinfo2)h(\))k
-(\))f({)227 2244 y(/*)g(If)g(this)f(didn't)f(work)h(\(the)g(WCS)g
-(FrameSet)e(has)j(become)e(too)h(complex\),)e(then)358
-2344 y(use)i(the)h(native)e(AST)h(encoding)e(instead.)h(*/)358
-2443 y(astSet\()g(fitschan2,)e("Encoding=NATIVE")e(\);)358
-2543 y(\(void\))k(astWrite\()f(fitschan2,)f(wcsinfo2)i(\);)227
-2643 y(})0 2891 y FF(F)-8 b(or)40 b(details)f(of)g(ho)m(w)g(to)g(mo)s
-(dify)f(the)h(con)m(ten)m(ts)i(of)e(the)g(output)f(FitsChan)h(in)f
-(other)h(w)m(a)m(ys,)j(suc)m(h)d(as)g(b)m(y)0 3004 y(adding,)30
-b(o)m(v)m(er-writing)i(or)f(deleting)g(header)f(cards,)h(see)g
-Fu(x)p FF(16.4,)h Fu(x)p FF(16.9,)h Fu(x)p FF(16.8)f(and)e
-Fu(x)p FF(16.13.)0 3164 y(Once)38 b(y)m(ou)h(ha)m(v)m(e)g(assem)m(bled)
-g(the)f(output)g(FITS)g(cards,)i(y)m(ou)f(ma)m(y)f(retriev)m(e)i(them)e
-(from)g(the)h(FitsChan)0 3276 y(that)31 b(con)m(tains)h(them)e(as)g
-(follo)m(ws:)227 3512 y Ft(#include)41 b(<stdio.h>)227
-3611 y(char)h(card[)g(81)g(];)227 3811 y(...)227 4010
-y(astClear\()e(fitschan2,)g("Card")h(\);)227 4110 y(while)h(\()h
-(astFindFits\()c(fitschan2,)g("\045f",)j(card,)f(1)i(\))g(\))h
-(\(void\))d(printf\()f("\045s\\n",)h(card)h(\);)0 4358
-y FF(Here,)28 b(w)m(e)e(ha)m(v)m(e)h(simply)f(written)g(eac)m(h)h(card)
-f(to)g(the)g(standard)g(output)f(stream,)j(but)d(y)m(ou)h(w)m(ould)g
-(ob)m(viously)0 4471 y(replace)31 b(this)g(with)f(a)g(function)g(in)m
-(v)m(o)s(cation)j(to)e(store)g(the)g(cards)f(in)g(y)m(our)g(output)g
-(dataset.)0 4630 y(F)-8 b(or)44 b(data)f(systems)g(that)g(do)g(not)g
-(use)g(FITS)f(header)g(cards,)k(a)e(di\013eren)m(t)f(approac)m(h)g(ma)m
-(y)g(b)s(e)g(needed,)0 4743 y(p)s(ossibly)33 b(in)m(v)m(olving)i(use)f
-(of)f(a)i(Channel)d(or)i(XmlChan)f(\()p Fu(x)p FF(15\))j(rather)d(than)
-h(a)g(FitsChan.)51 b(In)33 b(the)h(case)g(of)0 4856 y(the)h(Starlink)h
-(NDF)g(data)g(format,)h(for)e(example,)i(all)g(of)e(the)h(ab)s(o)m(v)m
-(e)g(ma)m(y)g(b)s(e)f(replaced)g(b)m(y)h(a)f(single)h(call)0
-4969 y(to)e(the)f(function)g(ndfPt)m(w)m(cs|see)g(SUN/33.)50
-b(The)33 b(whole)g(pro)s(cess)g(can)g(probably)f(b)s(e)h(encapsulated)g
-(in)g(a)0 5082 y(similar)e(w)m(a)m(y)g(for)f(most)h(data)g(systems,)g
-(whether)e(they)i(use)f(FITS)g(header)g(cards)g(or)g(not.)0
-5241 y(F)-8 b(or)46 b(an)f(o)m(v)m(erview)i(of)f(ho)m(w)f(to)h
-(propagate)h(W)m(CS)e(information)h(through)e(data)i(pro)s(cessing)g
-(steps,)j(see)0 5354 y Fu(x)p FF(17.6.)42 b(F)-8 b(or)29
-b(more)f(information)g(ab)s(out)g(writing)g(W)m(CS)g(information)g(to)h
-(FitsChans,)f(see)h Fu(x)p FF(16.5)h(and)d Fu(x)p FF(17.7.)0
-5467 y(F)-8 b(or)40 b(information)g(ab)s(out)f(the)h(options)f(for)h
-(enco)s(ding)f(W)m(CS)g(information)h(in)f(FITS)g(header)g(cards,)j
-(see)0 5580 y Fu(x)p FF(16.1,)k Fu(x)p FF(17.1,)f(and)40
-b(the)h(description)g(of)g(the)g(Enco)s(ding)f(attribute)i(in)f(App)s
-(endix)e(C.)71 b(F)-8 b(or)42 b(a)f(complete)0 5693 y(understanding)24
-b(of)i(FitsChans)g(and)f(their)h(use)g(with)g(FITS)f(header)h(cards,)g
-(y)m(ou)h(should)e(read)g Fu(x)p FF(16)j(and)d Fu(x)p
-FF(17.)p eop end
-%%Page: 27 37
-TeXDict begin 27 36 bop 0 52 a Fy(3.16)93 b(.)15 b(.)g(.)h(Displa)m(y)
-31 b(a)g(Graphical)g(Co)s(ordinate)g(Grid)1836 b FF(27)507
-3235 y @beginspecial 15 @llx 138 @lly 489 @urx 648 @ury
-3318 @rwi @setspecial
-%%BeginDocument: sun211_figures/overgrid_bw.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 263 3431 a(Figure)31 b(9:)41 b(An)30 b(example)h(of)g(a)g
-(displa)m(y)m(ed)g(image)g(with)f(a)h(co)s(ordinate)g(grid)f(plotted)i
-(o)m(v)m(er)f(it.)0 3789 y Fw(3.16)112 b(.)19 b(.)g(.)g(Displa)m(y)38
-b(a)g(Graphical)h(Co)s(ordinate)f(Grid)0 4002 y FF(A)i(common)g
-(requiremen)m(t)g(when)f(displa)m(ying)h(image)h(data)f(is)g(to)h(plot)
-f(an)g(asso)s(ciated)h(co)s(ordinate)g(grid)0 4115 y(\()p
-Fx(e.g.)27 b FF(Figure)h(9\))h(o)m(v)m(er)f(the)g(displa)m(y)m(ed)g
-(image.)81 b(The)27 b(use)g(of)h(AST)e(in)i(suc)m(h)f(circumstances)h
-(is)g(indep)s(enden)m(t)0 4228 y(of)33 b(the)g(underlying)e(graphics)i
-(system,)h(so)f(starting)g(up)f(the)h(graphics)f(system,)i(setting)g
-(up)e(a)h(co)s(ordinate)0 4341 y(system,)j(displa)m(ying)f(the)g
-(image,)i(and)d(closing)h(do)m(wn)g(afterw)m(ards)f(can)h(all)g(b)s(e)f
-(done)h(using)f(the)g(graphics)0 4454 y(functions)c(y)m(ou)h(w)m(ould)f
-(normally)g(use.)0 4608 y(Ho)m(w)m(ev)m(er,)44 b(displa)m(ying)39
-b(an)h(image)g(at)g(a)g(precise)f(lo)s(cation)i(can)f(b)s(e)e(a)i
-(little)h(\014ddly)d(with)h(some)g(graphics)0 4721 y(systems,)29
-b(and)f(ob)m(viously)h(the)g(grid)f(dra)m(wn)g(b)m(y)g(AST)g(will)h
-(not)g(b)s(e)f(accurately)i(registered)f(with)f(the)h(image)0
-4834 y(unless)c(this)h(is)g(done)f(correctly)-8 b(.)41
-b(In)25 b(the)h(follo)m(wing)i(template,)g(w)m(e)e(therefore)h
-(illustrate)g(b)s(oth)e(steps,)h(basing)0 4947 y(the)k(image)i(displa)m
-(y)e(on)g(the)h(C)f(in)m(terface)h(to)g(the)g(PGPLOT)e(graphics)h(pac)m
-(k)-5 b(age.)2850 4914 y Fv(7)2932 4947 y FF(Plotting)32
-b(a)f(co)s(ordinate)0 5060 y(grid)41 b(with)g(AST)g(then)g(b)s(ecomes)h
-(a)f(relativ)m(ely)j(minor)d(part)g(of)h(what)f(is)g(almost)i(a)f
-(complete)g(graphics)0 5173 y(program.)0 5327 y(Once)36
-b(again,)j(w)m(e)e(assume)f(that)h(a)g(p)s(oin)m(ter,)h(\\w)m(csinfo",)
-h(to)e(a)g(suitable)g(F)-8 b(rameSet)37 b(asso)s(ciated)h(with)e(the)0
-5440 y(image)c(has)e(already)h(b)s(een)e(obtained)i(\()p
-Fu(x)p FF(3.4\).)p 0 5516 1512 4 v 104 5570 a Fs(7)138
-5602 y Fr(An)37 b(in)n(terface)i(is)g(pro)n(vided)e(with)h(AST)g(that)g
-(allo)n(ws)i(it)e(to)g(use)g(PGPLOT)h(\(SUN/15\))f(for)g(its)h
-(graphics,)j(although)0 5693 y(in)n(terfaces)27 b(to)f(other)g
-(graphics)g(systems)g(ma)n(y)f(also)i(b)r(e)f(written.)p
-eop end
-%%Page: 28 38
-TeXDict begin 28 37 bop 0 52 a FF(28)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(#include)41 b("cpgplot.h")227
-451 y(AstPlot)g(*plot;)227 551 y(const)h(float)f(*data;)227
-650 y(float)h(hi,)g(lo,)g(scale,)g(x1,)g(x2,)g(xleft,)f(xright,)g
-(xscale;)227 750 y(float)h(y1,)g(y2,)g(ybottom,)f(yscale,)f(ytop;)227
-849 y(int)j(nx,)f(ny;)227 1049 y(...)227 1248 y(/*)h(Access)e(the)h
-(image)g(data,)g(which)f(we)i(assume)e(has)h(dimension)e(sizes)i("nx")g
-(and)358 1348 y("ny",)g(and)g(will)g(be)h(accessed)d(via)i(the)h
-("data")e(pointer.)84 b(Also)41 b(derive)358 1447 y(limits)g(for)h
-(scaling)f(it,)i(which)e(we)i(assign)e(to)i(the)f(variables)e("hi")i
-(and)358 1547 y("lo".)g(*/)227 1646 y(<this)g(stage)f(depends)g(on)i
-(your)f(data)g(system,)e(so)j(is)g(not)f(shown>)227 1846
-y(/*)h(Open)f(PGPLOT)f(using)h(the)g(device)f(given)h(by)g(environment)
-d(variable)358 1945 y(PGPLOT_DEV)g(and)k(check)e(for)i(success.)d(*/)
-227 2045 y(if\()j(cpgbeg\()d(0,)j(")g(",)g(1,)g(1)g(\))g(==)g(1)g(\))g
-({)227 2244 y(/*)g(Clear)f(the)g(screen)f(and)h(ensure)f(equal)h
-(scales)f(on)i(both)f(axes.)f(*/)358 2344 y(cpgpage\(\);)358
-2443 y(cpgwnad\()f(0.0f,)i(1.0f,)f(0.0f,)h(1.0f)g(\);)227
-2643 y(/*)h(Obtain)e(the)h(extent)g(of)g(the)h(plotting)d(area)i(\(not)
-g(strictly)e(necessary)g(for)358 2742 y(PGPLOT,)h(but)h(possibly)e(for)
-j(other)e(graphics)f(systems\).)g(From)i(this,)g(derive)358
-2842 y(the)g(display)f(scale)h(in)g(graphics)f(units)g(per)h(pixel)g
-(so)h(that)f(the)g(image)358 2942 y(will)g(fit)g(within)f(the)i
-(display)d(area.)i(*/)358 3041 y(cpgqwin\()e(&x1,)i(&x2,)g(&y1,)g(&y2)g
-(\);)358 3141 y(xscale)f(=)i(\()g(x2)g(-)g(x1)g(\))g(/)h(nx;)358
-3240 y(yscale)d(=)i(\()g(y2)g(-)g(y1)g(\))g(/)h(ny;)358
-3340 y(scale)e(=)h(\()g(xscale)e(<)i(yscale)e(\))i(?)h(xscale)d(:)i
-(yscale;)227 3539 y(/*)g(Calculate)d(the)i(extent)f(of)i(the)f(area)g
-(in)h(graphics)d(units)i(that)g(the)g(image)358 3639
-y(will)g(occupy,)f(so)h(as)h(to)g(centre)e(it)i(within)e(the)h(display)
-f(area.)g(*/)358 3739 y(xleft)129 b(=)43 b(0.5f)f(*)h(\()g(x1)g(+)g(x2)
-g(-)g(nx)g(*)g(scale)e(\);)358 3838 y(xright)85 b(=)43
-b(0.5f)f(*)h(\()g(x1)g(+)g(x2)g(+)g(nx)g(*)g(scale)e(\);)358
-3938 y(ybottom)g(=)i(0.5f)f(*)h(\()g(y1)g(+)g(y2)g(-)g(ny)g(*)g(scale)e
-(\);)358 4037 y(ytop)173 b(=)43 b(0.5f)f(*)h(\()g(y1)g(+)g(y2)g(+)g(ny)
-g(*)g(scale)e(\);)227 4237 y(/*)i(Set)f(up)h(a)g(PGPLOT)e(coordinate)f
-(transformation)e(matrix)j(and)h(display)f(the)358 4336
-y(image)h(data)f(as)i(a)g(grey)f(scale)g(map)g(\(these)f(details)g(are)
-h(specific)f(to)358 4436 y(PGPLOT\).)f(*/)358 4536 y({)489
-4635 y(float)h(tr[])h(=)h({)h(xleft)d(-)i(0.5f)f(*)h(scale,)e(scale,)h
-(0.0f,)1143 4735 y(ybottom)e(-)j(0.5f)f(*)i(scale,)d(0.0f,)g(scale)h
-(};)489 4834 y(cpggray\()e(data,)i(nx,)g(ny,)g(1,)h(nx,)f(1,)h(ny,)f
-(hi,)h(lo,)f(tr)h(\);)358 4934 y(})227 5133 y(/*)g(BEGINNING)d(OF)j
-(AST)f(BIT)g(*/)227 5233 y(/*)h(================)o(===)o(=)37
-b(*/)227 5333 y(/*)43 b(Store)f(the)g(locations)e(of)j(the)f(bottom)f
-(left)h(and)g(top)h(right)e(corners)g(of)i(the)358 5432
-y(region)e(used)h(to)h(display)e(the)h(image,)f(in)i(graphics)d
-(coordinates.)f(*/)358 5532 y({)489 5631 y(float)i(gbox[])g(=)j({)f
-(xleft,)e(ybottom,)f(xright,)h(ytop)h(};)p eop end
-%%Page: 29 39
-TeXDict begin 29 38 bop 0 52 a Fy(3.17)93 b(.)15 b(.)g(.)h(Switc)m(h)30
-b(to)h(Plot)h(a)e(Di\013eren)m(t)i(Celestial)g(Co)s(ordinate)f(Grid)
-1232 b FF(29)227 451 y Ft(/*)43 b(Similarly,)c(store)j(the)g(locations)
-e(of)j(the)f(image's)f(bottom)g(left)h(and)g(top)358
-551 y(right)g(corners,)e(in)j(pixel)e(coordinates)e(--)k(with)f(the)g
-(first)g(pixel)f(centred)358 650 y(at)i(\(1,1\).)e(*/)489
-750 y(double)g(pbox[])g(=)i({)g(0.5,)f(0.5,)g(nx)h(+)g(0.5,)f(ny)h(+)g
-(0.5)f(};)227 949 y(/*)h(Create)e(a)i(Plot,)f(based)f(on)i(the)f
-(FrameSet)f(associated)e(with)j(the)358 1049 y(image.)f(This)h
-(attaches)e(the)j(Plot)f(to)g(the)h(graphics)d(surface)h(so)h(that)g
-(it)358 1148 y(matches)f(the)h(displayed)e(image.)h(Specify)g(that)h(a)
-h(complete)d(set)i(of)h(grid)358 1248 y(lines)f(should)f(be)h(drawn)g
-(\(rather)f(than)h(just)f(coordinate)f(axes\).)h(*/)489
-1348 y(plot)h(=)h(astPlot\()d(wcsinfo,)g(gbox,)i(pbox,)f("Grid=1")g
-(\);)358 1447 y(})227 1646 y(/*)i(Optionally,)c(we)k(can)f(now)h(set)f
-(other)f(Plot)h(attributes)e(to)j(control)d(the)358 1746
-y(appearance)f(of)k(the)g(grid.)e(The)h(values)g(assigned)e(here)i(use)
-g(the)358 1846 y(colour/font)d(indices)i(defined)f(by)j(the)g
-(underlying)c(graphics)h(system.)h(*/)358 1945 y(astSet\()g(plot,)g
-("Colour\(grid\)=2,)c(Font\(textlab\)=3")g(\);)227 2145
-y(/*)43 b(Use)f(the)h(Plot)f(to)g(draw)g(the)h(coordinate)c(grid.)j(*/)
-358 2244 y(astGrid\()e(plot)i(\);)358 2443 y(<maybe)f(some)h(more)g
-(AST)g(graphics)f(here>)227 2643 y(/*)i(Annul)f(the)g(Plot)g(when)g
-(finished)e(\(or)i(use)h(the)f(astBegin/astEnd)37 b(technique)358
-2742 y(shown)42 b(earlier\).)d(*/)358 2842 y(plot)j(=)h(astAnnul\()d
-(plot)i(\);)227 3041 y(/*)h(END)f(OF)h(AST)f(BIT)h(*/)227
-3141 y(/*)g(==============)38 b(*/)227 3340 y(/*)43 b(Close)f(down)f
-(the)i(graphics)d(system.)h(*/)358 3440 y(cpgend\(\);)227
-3539 y(})0 3779 y FF(Note)27 b(that)g(once)g(y)m(ou)f(ha)m(v)m(e)h(set)
-g(up)d(a)j(Plot)g(whic)m(h)e(is)h(aligned)h(with)f(a)g(displa)m(y)m(ed)
-h(image,)h(y)m(ou)e(ma)m(y)h(also)g(use)0 3892 y(it)36
-b(to)g(generate)h(further)d(graphical)i(output)e(of)i(y)m(our)f(o)m
-(wn,)i(sp)s(eci\014ed)d(in)h(the)h(image's)g(w)m(orld)g(co)s(ordinate)0
-4005 y(system)h(\(suc)m(h)f(as)h(mark)m(ers)g(to)g(represen)m(t)g
-(astronomical)h(ob)5 b(jects,)39 b(annotation,)h Fx(etc.)p
-FF(\).)59 b(There)36 b(is)h(also)g(a)0 4118 y(range)32
-b(of)g(Plot)h(attributes)f(whic)m(h)g(giv)m(es)h(con)m(trol)g(o)m(v)m
-(er)g(most)f(asp)s(ects)g(of)g(the)g(output's)g(app)s(earance.)45
-b(F)-8 b(or)0 4231 y(details)31 b(of)g(the)f(facilities)j(a)m(v)-5
-b(ailable,)33 b(see)e Fu(x)p FF(21)h(and)d(the)i(description)f(of)h
-(the)f(Plot)i(class)f(in)f(App)s(endix)f(D.)0 4388 y(F)-8
-b(or)24 b(details)h(of)f(ho)m(w)g(to)g(build)f(a)h(graphics)g(program)f
-(whic)m(h)h(uses)f(PGPLOT,)g(see)h Fu(x)p FF(3.3)h(and)f(the)f
-(description)0 4501 y(of)31 b(the)f(ast)p Fq(_)p FF(link)h(command)f
-(in)g(App)s(endix)f(E.)0 4785 y Fw(3.17)112 b(.)19 b(.)g(.)g(Switc)m(h)
-37 b(to)g(Plot)g(a)h(Di\013eren)m(t)f(Celestial)h(Co)s(ordinate)h(Grid)
-0 5001 y FF(Once)32 b(y)m(ou)f(ha)m(v)m(e)i(set)f(up)f(a)h(Plot)g(to)h
-(dra)m(w)e(a)h(co)s(ordinate)g(grid)g(\()p Fu(x)p FF(3.16\),)i(it)e(is)
-g(a)g(simple)g(matter)g(to)g(c)m(hange)0 5114 y(things)39
-b(so)g(that)h(the)g(grid)e(represen)m(ts)i(a)f(di\013eren)m(t)h
-(celestial)h(co)s(ordinate)f(system.)68 b(F)-8 b(or)40
-b(example,)i(after)0 5227 y(creating)32 b(the)e(Plot)i(with)e(astPlot,)
-i(y)m(ou)e(could)h(use:)227 5453 y Ft(astSet\()41 b(plot,)g
-("System=Galactic")c(\);)0 5693 y FF(or:)p eop end
-%%Page: 30 40
-TeXDict begin 30 39 bop 0 52 a FF(30)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)227 351 y Ft(astSet\()41 b(plot,)g("System=FK5,)e
-(Equinox=J2010")f(\);)0 616 y FF(and)43 b(an)m(y)i(axes)g(and/or)f
-(grid)f(dra)m(wn)h(subsequen)m(tly)f(w)m(ould)h(represen)m(t)g(the)g
-(new)g(celestial)j(co)s(ordinate)0 729 y(system)37 b(y)m(ou)g(sp)s
-(eci\014ed.)60 b(Note,)40 b(ho)m(w)m(ev)m(er,)h(that)c(this)g(will)g
-(only)g(w)m(ork)h(if)e(the)i(original)g(grid)e(represen)m(ted)0
-842 y(celestial)g(co)s(ordinates)e(of)g(some)g(kind)f(\(see)h
-Fu(x)p FF(3.8)h(for)f(ho)m(w)f(to)i(determine)e(if)h(this)f(is)h(the)g
-(case)3314 809 y Fv(8)3354 842 y FF(\).)51 b(If)33 b(it)h(did)0
-955 y(not,)d(y)m(ou)g(will)f(get)i(an)e(error)g(message.)0
-1128 y(F)-8 b(or)37 b(more)g(information)f(ab)s(out)h(the)f(celestial)j
-(co)s(ordinate)e(systems)g(a)m(v)-5 b(ailable,)40 b(see)d(the)g
-(descriptions)f(of)0 1241 y(the)31 b(System,)f(Equino)m(x)g(and)g(Ep)s
-(o)s(c)m(h)g(attributes)h(in)f(App)s(endix)e(C.)0 1571
-y Fw(3.18)112 b(.)19 b(.)g(.)g(Giv)m(e)38 b(a)f(User)h(Con)m(trol)f(Ov)
-m(er)h(the)f(App)s(earance)i(of)e(a)h(Plot)0 1809 y FF(The)21
-b(idea)h(of)g(using)f(a)h(Plot's)g(attributes)g(to)h(con)m(trol)f(the)g
-(app)s(earance)g(of)g(the)f(graphical)i(output)e(it)h(pro)s(duces)0
-1922 y(\()p Fu(x)p FF(3.16)36 b(and)c Fu(x)p FF(3.17\))k(can)e(easily)g
-(b)s(e)f(extended)g(to)h(allo)m(w)h(the)f(user)e(of)i(a)f(program)h
-(complete)g(con)m(trol)h(o)m(v)m(er)0 2035 y(suc)m(h)30
-b(matters.)0 2208 y(F)-8 b(or)39 b(instance,)i(if)d(the)g(\014le)g
-(\\plot.con\014g")i(con)m(tains)f(a)g(series)f(of)g(plotting)h(options)
-g(in)f(the)g(form)f(of)i(Plot)0 2321 y(attribute)c(assignmen)m(ts)f
-(\(see)h(b)s(elo)m(w)f(for)g(an)g(example\),)i(then)e(w)m(e)g(could)g
-(create)h(a)g(Plot)g(and)e(implemen)m(t)0 2434 y(these)e(assignmen)m
-(ts)g(b)s(efore)f(pro)s(ducing)f(the)h(graphical)i(output)e(as)g(follo)
-m(ws:)227 2716 y Ft(#include)41 b(<stdio.h>)227 2816
-y(#define)g(MAXCHARS)f(120)227 2915 y(FILE)i(*stream;)227
-3015 y(char)g(line[)g(MAXCHARS)e(+)j(2)g(];)227 3115
-y(int)g(base;)227 3314 y(...)227 3513 y(/*)g(Create)e(a)i(Plot)f(and)h
-(define)e(the)h(default)f(appearance)e(of)k(the)f(graphical)358
-3613 y(output)f(it)i(will)f(produce.)e(*/)227 3712 y(plot)i(=)h
-(astPlot\()e(wcsinfo,)f(gbox,)h(pbox,)925 3812 y("Grid=1,)f
-(Colour\(grid\)=2,)d(Font\(textlab\)=3")g(\);)227 4011
-y(/*)43 b(Obtain)e(the)h(value)g(of)h(any)f(Plot)g(attributes)d(we)k
-(want)f(to)h(preserve.)d(*/)227 4111 y(base)i(=)h(astGetI\()e(plot,)g
-("Base")g(\);)227 4310 y(/*)i(Open)f(the)g(plot)g(configuration)c
-(file,)k(if)h(it)f(exists.)f(Read)h(each)g(line)g(of)358
-4410 y(text)g(and)g(use)h(it)f(to)h(set)g(new)f(Plot)g(attribute)e
-(values.)g(Close)i(the)g(file)358 4509 y(when)g(done.)f(*/)227
-4609 y(if)i(\()g(stream)e(=)i(fopen\()f("plot.config",)37
-b("r")43 b(\))g(\))g({)358 4709 y(while)f(\()h(fgets\()e(line,)g
-(MAXCHARS)g(+)i(2,)g(stream)e(\))i(\))g(astSet\()e(plot,)g("\045s",)h
-(line)g(\);)358 4808 y(close\()f(stream)g(\);)227 4908
-y(})227 5107 y(/*)i(Restore)e(any)h(attribute)e(values)h(we)i(are)f
-(preserving.)d(*/)227 5207 y(astSetI\()i(plot,)g("Base",)g(base)h(\);)
-227 5406 y(/*)h(Produce)e(the)h(graphical)e(output)h(\(e.g.\).)g(*/)227
-5506 y(astGrid\()g(plot)g(\);)p 0 5607 1512 4 v 104 5661
-a Fs(8)138 5693 y Fr(Note)26 b(that)f(the)h(metho)r(ds)f(applied)h(to)g
-(a)g(F)-6 b(rameSet)26 b(ma)n(y)f(b)r(e)g(used)h(equally)f(w)n(ell)i
-(with)f(a)g(Plot.)p eop end
-%%Page: 31 41
-TeXDict begin 31 40 bop 0 52 a Fy(3.18)93 b(.)15 b(.)g(.)h(Giv)m(e)31
-b(a)g(User)g(Con)m(trol)g(Ov)m(er)f(the)h(App)s(earance)f(of)g(a)h
-(Plot)1260 b FF(31)0 351 y(Notice)41 b(that)f(w)m(e)f(tak)m(e)i(care)f
-(that)f(the)h(Plot's)g(Base)g(attribute)f(is)h(preserv)m(ed)e(so)i
-(that)f(the)g(user)g(cannot)0 464 y(c)m(hange)31 b(it.)41
-b(This)29 b(is)h(b)s(ecause)g(graphical)h(output)e(will)i(not)f(b)s(e)f
-(pro)s(duced)g(successfully)g(if)h(the)g(base)h(F)-8
-b(rame)0 577 y(do)s(es)30 b(not)h(describ)s(e)e(the)i(plotting)g
-(surface)g(to)g(whic)m(h)f(w)m(e)h(attac)m(hed)h(the)f(Plot)g(when)e(w)
-m(e)i(created)g(it.)0 740 y(The)21 b(arrangemen)m(t)i(sho)m(wn)d(ab)s
-(o)m(v)m(e)j(allo)m(ws)g(the)f(con)m(ten)m(ts)h(of)f(the)g
-(\\plot.con\014g")h(\014le)f(to)g(con)m(trol)h(most)f(asp)s(ects)0
-853 y(of)33 b(the)f(graphical)i(output)e(pro)s(duced)f(\(including)h
-(the)h(co)s(ordinate)g(system)g(used;)g(the)f(colour,)i(line)f(st)m
-(yle,)0 966 y(thic)m(kness)22 b(and)f(fon)m(t)i(used)e(for)g(eac)m(h)i
-(comp)s(onen)m(t;)i(the)d(p)s(ositioning)g(of)g(axes)g(and)g(tic)m(k)h
-(marks;)h(the)e(precision,)0 1079 y(format)31 b(and)e(p)s(ositioning)i
-(of)g(lab)s(els;)f Fx(etc.)p FF(\))41 b Fx(via)30 b FF(assignmen)m(ts)h
-(of)g(the)g(form:)227 1328 y Ft(System=Galactic,)37 b(Equinox)k(=)i
-(2001)227 1427 y(Border)e(=)j(1,)e(Colour\()f(border)g(\))i(=)g(1)227
-1527 y(Colour\()e(grid)h(\))h(=)g(2)227 1626 y(DrawAxes)e(=)i(1)227
-1726 y(Colour\()e(axes)h(\))h(=)g(3)227 1826 y(Digits)e(=)j(8)227
-1925 y(Labelling)c(=)j(Interior)0 2188 y FF(F)-8 b(or)32
-b(a)g(more)f(sophisticated)h(in)m(terface,)i(y)m(ou)d(could)h(ob)m
-(viously)g(p)s(erform)d(pre-pro)s(cessing)i(on)g(this)g(input|)0
-2301 y(for)38 b(example,)j(to)d(translate)h(w)m(ords)f(lik)m(e)h
-(\\red",)i(\\green")e(and)e(\\blue")i(in)m(to)g(colour)f(indices,)i(to)
-f(p)s(ermit)0 2414 y(commen)m(ts)31 b(and)f(blank)g(lines,)h
-Fx(etc.)0 2576 y FF(F)-8 b(or)30 b(a)g(full)f(list)h(of)f(the)h
-(attributes)g(that)g(ma)m(y)g(b)s(e)e(used)h(to)h(con)m(trol)h(the)e
-(app)s(earance)h(of)f(graphical)i(output,)0 2689 y(see)24
-b(the)f(description)g(of)g(the)h(Plot)g(class)g(in)e(App)s(endix)g(D.)
-38 b(F)-8 b(or)24 b(a)g(complete)g(description)g(of)f(eac)m(h)h
-(individual)0 2802 y(attribute)31 b(\()p Fx(e.g.)f FF(those)h(ab)s(o)m
-(v)m(e\),)h(see)f(the)g(attribute's)g(en)m(try)g(in)f(App)s(endix)e(C.)
-p eop end
-%%Page: 32 42
-TeXDict begin 32 41 bop 0 52 a FF(32)3035 b Fy(3)92 b(HO)m(W)31
-b(TO.)15 b(.)g(.)p eop end
-%%Page: 33 43
-TeXDict begin 33 42 bop 3689 52 a FF(33)0 351 y Fz(4)135
-b(An)44 b(AST)g(Ob)7 b(ject)45 b(Primer)0 599 y FF(The)38
-b(AST)h(library)f(deals)i(throughout)e(with)h(en)m(tities)i(called)f
-(Ob)5 b(jects)39 b(and)f(a)i(basic)f(understanding)e(of)0
-712 y(ho)m(w)j(to)i(handle)e(these)g(is)h(needed)f(b)s(efore)g(y)m(ou)h
-(can)f(use)h(the)f(library)g(e\013ectiv)m(ely)-8 b(.)74
-b(If)40 b(y)m(ou)h(are)g(already)0 825 y(familiar)26
-b(with)f(an)h(ob)5 b(ject-orien)m(ted)27 b(language,)h(suc)m(h)d(as)h
-(C++,)g(few)f(of)h(the)f(concepts)i(should)d(seem)i(new)f(to)0
-938 y(y)m(ou.)41 b(Be)30 b(a)m(w)m(are,)h(ho)m(w)m(ev)m(er,)g(that)f
-(AST)f(is)g(designed)g(to)h(b)s(e)f(used)f Fx(via)i FF(fairly)f(con)m
-(v)m(en)m(tional)j(C)d(and)g(F)-8 b(ortran)0 1051 y(in)m(terfaces,)32
-b(so)f(some)f(things)h(ha)m(v)m(e)g(to)g(b)s(e)f(done)g(a)h(little)h
-(di\013eren)m(tly)-8 b(.)0 1209 y(If)24 b(y)m(ou)h(are)g(not)g(already)
-g(familiar)h(with)e(ob)5 b(ject-orien)m(ted)27 b(programming,)e(then)g
-(don't)f(w)m(orry|w)m(e)h(will)g(not)0 1322 y(emphasise)33
-b(this)g(asp)s(ect)h(more)f(than)g(is)g(necessary)h(and)f(will)g(not)h
-(assume)f(an)m(y)g(bac)m(kground)g(kno)m(wledge.)0 1435
-y(Instead,)f(this)f(section)i(concen)m(trates)g(on)f(presen)m(ting)g
-(all)g(the)g(fundamen)m(tal)f(information)h(y)m(ou)g(will)f(need,)0
-1548 y(explaining)22 b(ho)m(w)f(AST)g(Ob)5 b(jects)22
-b(b)s(eha)m(v)m(e)g(and)e(ho)m(w)i(to)g(manipulate)g(them)f(from)g(con)
-m(v)m(en)m(tional)k(C)c(programs.)0 1706 y(If)40 b(y)m(ou)h(lik)m(e)g
-(to)g(read)g(do)s(cumen)m(ts)f(from)g(co)m(v)m(er)i(to)f(co)m(v)m(er,)k
-(then)40 b(y)m(ou)g(can)h(consider)f(this)g(section)i(as)f(an)0
-1819 y(in)m(tro)s(duction)32 b(to)h(the)f(programming)g(tec)m(hniques)h
-(used)e(in)h(the)g(rest)g(of)h(the)f(do)s(cumen)m(t.)46
-b(Otherwise,)32 b(y)m(ou)0 1931 y(ma)m(y)f(prefer)f(to)h(skim)f
-(through)g(it)g(on)h(a)f(\014rst)g(reading)h(and)e(return)h(to)h(it)g
-(later)g(as)g(reference)f(material.)0 2218 y Fw(4.1)112
-b(AST)38 b(Ob)6 b(jects)0 2434 y FF(An)37 b(AST)h(Ob)5
-b(ject)37 b(is)h(an)g(en)m(tit)m(y)i(whic)m(h)d(is)h(used)f(to)i(store)
-f(information)g(and)f(Ob)5 b(jects)38 b(come)h(in)e(v)-5
-b(arious)0 2547 y(kinds,)34 b(called)h Fx(classes,)h
-FF(according)e(to)h(the)f(sort)g(of)g(information)g(they)h(hold.)50
-b(Throughout)33 b(this)h(section,)0 2660 y(w)m(e)i(will)g(mak)m(e)g
-(use)g(of)f(a)h(simple)g(Ob)5 b(ject)35 b(b)s(elonging)h(to)g(the)g
-(\\Zo)s(omMap")g(class)h(to)f(illustrate)h(man)m(y)e(of)0
-2773 y(the)c(basic)f(concepts.)0 2931 y(A)i(Zo)s(omMap)g(is)g(an)g(Ob)5
-b(ject)32 b(that)g(con)m(tains)i(a)e(recip)s(e)g(for)g(con)m(v)m
-(erting)h(co)s(ordinates)g(b)s(et)m(w)m(een)f(t)m(w)m(o)i(h)m(yp)s(o-)0
-3044 y(thetical)e(co)s(ordinate)g(systems.)40 b(It)31
-b(do)s(es)f(this)g(b)m(y)g(m)m(ultiplying)h(all)h(the)e(co)s(ordinate)h
-(v)-5 b(alues)31 b(b)m(y)f(a)h(constan)m(t)0 3157 y(called)40
-b(the)f Fx(Zo)-5 b(om)41 b(factor.)66 b FF(A)39 b(Zo)s(omMap)g(is)f(a)h
-(v)m(ery)g(simple)g(Ob)5 b(ject)39 b(whic)m(h)f(exists)h(mainly)g(for)f
-(use)h(in)0 3270 y(examples.)h(It)27 b(allo)m(ws)i(us)d(to)i
-(illustrate)g(the)f(w)m(a)m(ys)h(in)f(whic)m(h)g(Ob)5
-b(jects)27 b(are)g(manipulated)g(and)g(to)h(in)m(tro)s(duce)0
-3383 y(the)38 b(concept)h(of)e(a)i(Mapping|a)f(recip)s(e)f(for)h(con)m
-(v)m(erting)h(co)s(ordinates|whic)m(h)f(is)g(fundamen)m(tal)g(to)g(the)
-0 3496 y(w)m(a)m(y)31 b(the)g(AST)f(library)g(w)m(orks.)0
-3782 y Fw(4.2)112 b(Ob)6 b(ject)38 b(Creation)g(and)g(P)m(oin)m(ters)0
-3999 y FF(Let)31 b(us)f(\014rst)f(consider)h(ho)m(w)h(to)g(create)h(a)f
-(Zo)s(omMap.)40 b(This)30 b(is)g(done)h(v)m(ery)f(simply)g(as)h(follo)m
-(ws:)227 4229 y Ft(#include)41 b("ast.h")227 4329 y(AstZoomMap)f
-(*zoommap;)227 4528 y(...)227 4727 y(zoommap)h(=)i(astZoomMap\()c(2,)k
-(5.0,)f("")h(\))0 4970 y FF(The)g(\014rst)f(step)h(is)h(to)g(include)f
-(the)g(header)g(\014le)g(\\ast.h")i(whic)m(h)e(declares)h(the)f(in)m
-(terface)i(to)f(the)f(AST)0 5083 y(library)-8 b(.)52
-b(W)-8 b(e)36 b(then)d(declare)j(a)e(p)s(oin)m(ter)g(of)h(t)m(yp)s(e)f
-(AstZo)s(omMap)p Fu(\003)h FF(to)g(receiv)m(e)h(the)e(result)h(and)e
-(in)m(v)m(ok)m(e)j(the)0 5196 y(function)31 b(astZo)s(omMap)h(to)g
-(create)h(the)e(Zo)s(omMap.)44 b(The)30 b(pattern)i(is)f(the)h(same)f
-(for)g(all)h(other)g(classes)g(of)0 5309 y(AST)d(Ob)5
-b(ject|y)m(ou)30 b(simply)g(pre\014x)e(\\ast")k(to)e(the)g(class)h
-(name)e(to)i(obtain)f(the)g(function)g(that)g(creates)h(the)0
-5422 y(Ob)5 b(ject)31 b(and)e(pre\014x)h(\\Ast")h(to)g(obtain)g(the)g
-(t)m(yp)s(e)f(of)h(the)f(returned)g(p)s(oin)m(ter.)0
-5580 y(These)23 b(functions)g(are)h(called)h Fx(c)-5
-b(onstructor)28 b(functions,)d FF(or)f(simply)f Fx(c)-5
-b(onstructors)26 b FF(\(y)m(ou)e(can)g(\014nd)e(an)h(individ-)0
-5693 y(ual)g(description)g(of)h(all)f(AST)g(functions)f(in)h(App)s
-(endix)f(B\))h(and)g(the)g(argumen)m(ts)g(passed)g(to)h(the)f
-(constructor)p eop end
-%%Page: 34 44
-TeXDict begin 34 43 bop 0 52 a FF(34)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(are)25 b(used)f(to)h(initialise)h
-(the)f(new)f(Ob)5 b(ject.)39 b(In)24 b(this)g(case,)j(w)m(e)e(sp)s
-(ecify)f(2)h(as)g(the)g(n)m(um)m(b)s(er)e(of)h(co)s(ordinates)i(\()p
-Fx(i.e.)0 464 y FF(w)m(e)31 b(are)f(going)i(to)e(w)m(ork)h(in)f(a)g
-(2-dimensional)h(space\))g(and)f(5.0)h(as)g(the)f(Zo)s(om)g(factor)h
-(to)g(b)s(e)f(applied.)40 b(Note)0 577 y(that)c(this)g(is)g(a)g(C)g
-(double)f(v)-5 b(alue.)58 b(W)-8 b(e)37 b(will)f(return)f(to)i(the)f
-(\014nal)f(argumen)m(t,)j(an)e(empt)m(y)g(string,)i(shortly)0
-690 y(\()p Fu(x)p FF(4.6\).)0 847 y(The)30 b(v)-5 b(alue)31
-b(returned)f(b)m(y)g(the)h(constructor)g(is)g(termed)f(an)h
-Fx(Obje)-5 b(ct)32 b(p)-5 b(ointer)32 b FF(or,)f(in)f(this)h(case,)h(a)
-f Fx(Zo)-5 b(omMap)0 960 y(p)g(ointer)29 b FF(and)e(is)g(used)f(to)i
-(refer)f(to)h(the)g(Ob)5 b(ject.)40 b(Y)-8 b(ou)27 b(p)s(erform)f(all)j
-(subsequen)m(t)d(op)s(erations)i(on)f(the)g(Ob)5 b(ject)0
-1073 y(b)m(y)30 b(passing)g(this)h(p)s(oin)m(ter)f(to)h(other)g(AST)e
-(functions.)0 1357 y Fw(4.3)112 b(The)38 b(Ob)6 b(ject)38
-b(Hierarc)m(h)m(y)0 1573 y FF(No)m(w)d(that)g(w)m(e)g(ha)m(v)m(e)h
-(created)f(our)f(\014rst)f(Zo)s(omMap,)j(let)f(us)f(examine)h(ho)m(w)g
-(it)f(relates)i(to)f(other)g(kinds)e(of)0 1686 y(Ob)5
-b(ject)31 b(b)s(efore)e(in)m(v)m(estigating)34 b(what)c(w)m(e)h(can)g
-(do)f(with)g(it.)0 1843 y(W)-8 b(e)28 b(ha)m(v)m(e)f(so)g(far)f
-(indicated)h(that)h(a)e(Zo)s(omMap)h(is)f(a)h(kind)f(of)h(Ob)5
-b(ject)26 b(and)g(ha)m(v)m(e)i(also)f(men)m(tioned)g(that)g(it)g(is)0
-1956 y(a)g(kind)f(of)h(Mapping)g(as)g(w)m(ell.)41 b(These)26
-b(statemen)m(ts)j(can)e(b)s(e)f(represen)m(ted)h(v)m(ery)g(simply)g
-(using)f(the)h(follo)m(wing)0 2068 y(hierarc)m(h)m(y:)227
-2294 y Ft(Object)358 2394 y(Mapping)489 2493 y(ZoomMap)0
-2732 y FF(whic)m(h)34 b(is)g(a)h(w)m(a)m(y)g(of)g(stating)g(that)g(a)g
-(Zo)s(omMap)f(is)g(a)h(sp)s(ecial)g(class)g(of)f(Mapping,)h(while)g(a)f
-(Mapping,)i(in)0 2845 y(turn,)g(is)g(a)g(sp)s(ecial)g(class)g(of)g(Ob)5
-b(ject.)56 b(This)35 b(is)h(exactly)h(lik)m(e)g(sa)m(ying)f(that)g(an)g
-(Oak)f(is)h(a)g(sp)s(ecial)g(form)f(of)0 2958 y(T)-8
-b(ree,)30 b(while)g(a)f(T)-8 b(ree,)31 b(in)e(turn,)g(is)g(a)h(sp)s
-(ecial)g(form)f(of)g(Plan)m(t.)41 b(This)29 b(ma)m(y)h(seem)g(almost)g
-(trivial,)h(but)e(b)s(efore)0 3071 y(y)m(ou)e(turn)f(to)h(read)g
-(something)g(less)g(dull,)g(b)s(e)f(assured)g(that)i(it)f(is)g(a)g(v)m
-(ery)g(imp)s(ortan)m(t)g(idea)g(to)h(k)m(eep)f(in)g(mind)0
-3184 y(in)j(what)g(follo)m(ws.)0 3341 y(If)i(w)m(e)i(lo)s(ok)f(at)g
-(some)h(of)f(the)g(other)g(Ob)5 b(jects)32 b(used)g(b)m(y)h(the)g(AST)f
-(library)-8 b(,)34 b(w)m(e)f(can)g(see)g(ho)m(w)g(these)g(are)h(all)0
-3454 y(related)d(in)f(a)h(similar)g(w)m(a)m(y)g(\(don't)g(w)m(orry)f
-(ab)s(out)g(what)g(they)h(do)f(at)h(this)g(stage\):)227
-3679 y Ft(Object)358 3779 y(Mapping)489 3878 y(Frame)620
-3978 y(FrameSet)750 4078 y(Plot)489 4177 y(UnitMap)489
-4277 y(ZoomMap)358 4377 y(Channel)489 4476 y(FitsChan)489
-4576 y(XmlChan)0 4815 y FF(Notice)c(that)e(there)g(are)h(sev)m(eral)g
-(di\013eren)m(t)f(t)m(yp)s(es)g(of)g(Mapping)g(a)m(v)-5
-b(ailable)27 b(\()p Fx(i.e.)e FF(there)g(are)g(classes)h(of)f(Ob)5
-b(ject)0 4928 y(inden)m(ted)26 b(b)s(eneath)g(the)g(\\Mapping")h
-(heading\))g(and,)f(in)g(addition,)i(other)e(t)m(yp)s(es)g(of)g(Ob)5
-b(ject)27 b(whic)m(h)f(are)g(not)0 5041 y(Mappings|Channels)j(for)h
-(instance)h(\(whic)m(h)g(are)g(at)g(the)f(same)h(hierarc)m(hical)h(lev)
-m(el)g(as)f(Mappings\).)0 5197 y(The)d(most)g(sp)s(ecialised)h(Ob)5
-b(ject)28 b(w)m(e)h(ha)m(v)m(e)h(sho)m(wn)d(here)h(is)h(the)f(Plot)h
-(\(whic)m(h)f(w)m(e)h(will)g(not)f(discuss)f(in)h(detail)0
-5310 y(un)m(til)h Fu(x)p FF(21\).)42 b(As)29 b(y)m(ou)g(can)g(see,)h(a)
-f(Plot)h(is)e(a)i(F)-8 b(rameSet.)16 b(.)g(.)44 b(and)28
-b(a)h(F)-8 b(rame.)17 b(.)e(.)44 b(and)28 b(a)h(Mapping.)16
-b(.)f(.)44 b(and,)29 b(lik)m(e)0 5423 y(ev)m(erything)i(else,)h
-(ultimately)g(an)e(Ob)5 b(ject.)0 5580 y(What)30 b(this)f(means)g(is)h
-(that)g(y)m(ou)f(can)h(use)f(a)g(Plot)i(not)e(only)h(for)f(its)g(o)m
-(wn)h(sp)s(ecialised)g(b)s(eha)m(viour,)f(but)g(also)0
-5693 y(whenev)m(er)34 b(an)m(y)g(of)g(these)g(other)g(less-sp)s
-(ecialised)h(classes)g(of)f(Ob)5 b(ject)34 b(is)g(called)h(for.)51
-b(The)33 b(general)i(rule)e(is)p eop end
-%%Page: 35 45
-TeXDict begin 35 44 bop 0 52 a Fy(4.4)92 b(Displa)m(ying)32
-b(Ob)5 b(jects)2727 b FF(35)0 351 y(that)32 b(an)f(Ob)5
-b(ject)31 b(of)h(a)f(particular)h(class)g(ma)m(y)g(substitute)f(for)g
-(an)m(y)h(of)f(the)g(classes)i(app)s(earing)e(ab)s(o)m(v)m(e)h(it)g(in)
-0 464 y(this)d(hierarc)m(h)m(y)-8 b(.)42 b(The)29 b(Ob)5
-b(ject)30 b(is)f(then)h(said)f(to)i Fx(inherit)f FF(the)g(b)s(eha)m
-(viour)f(of)h(these)g(higher)f(classes.)41 b(W)-8 b(e)31
-b(can)0 577 y(therefore)g(use)f(our)g(Zo)s(omMap)g(whenev)m(er)g(a)h
-(Zo)s(omMap,)g(a)f(Mapping)h(or)f(an)g(Ob)5 b(ject)31
-b(is)f(called)i(for.)0 744 y(Sometimes,)41 b(this)d(can)h(lead)f(to)h
-(some)g(sp)s(ectacular)g(short-cuts)f(b)m(y)g(a)m(v)m(oiding)i(the)e
-(need)g(to)h(break)f(large)0 856 y(Ob)5 b(jects)43 b(do)m(wn)f(in)g
-(order)h(to)g(access)h(their)f(comp)s(onen)m(ts.)78 b(With)43
-b(some)g(practice)h(and)e(a)h(little)i(lateral)0 969
-y(thinking)30 b(y)m(ou)h(should)e(so)s(on)h(b)s(e)g(able)h(to)g(sp)s
-(ot)f(opp)s(ortunities)g(for)g(this.)0 1136 y(Y)-8 b(ou)34
-b(can)g(\014nd)d(the)j(full)f Fx(class)j(hier)-5 b(ar)g(chy)p
-FF(,)37 b(as)c(this)h(is)f(called,)j(for)d(the)g(AST)g(library)g(in)g
-(App)s(endix)f(A)h(and)0 1249 y(y)m(ou)d(ma)m(y)h(need)f(to)h(refer)f
-(to)h(it)f(o)s(ccasionally)j(un)m(til)d(y)m(ou)h(are)f(familiar)h(with)
-f(the)g(classes)h(y)m(ou)g(need)f(to)h(use.)0 1554 y
-Fw(4.4)112 b(Displa)m(ying)39 b(Ob)6 b(jects)0 1781 y
-FF(Let)32 b(us)f(no)m(w)h(return)e(to)j(the)f(Zo)s(omMap)f(that)i(w)m
-(e)f(created)h(earlier)f(\()p Fu(x)p FF(4.2\))i(and)d(examine)h(what)g
-(it's)g(made)0 1894 y(of.)51 b(There)33 b(is)h(a)g(function)f(for)h
-(doing)g(this,)g(called)h(astSho)m(w,)g(whic)m(h)f(is)g(pro)m(vided)f
-(mainly)h(for)f(lo)s(oking)i(at)0 2007 y(Ob)5 b(jects)30
-b(while)h(y)m(ou)f(are)h(debugging)g(programs.)0 2173
-y(If)d(y)m(ou)g(consult)h(the)f(description)h(of)f(astSho)m(w)h(in)f
-(App)s(endix)e(B,)j(y)m(ou)g(will)g(\014nd)d(that)j(it)g(tak)m(es)h(a)e
-(p)s(oin)m(ter)h(to)0 2286 y(an)35 b(Ob)5 b(ject)35 b(\(of)g(t)m(yp)s
-(e)g(AstOb)5 b(ject)p Fu(\003)p FF(\))36 b(as)f(its)g(argumen)m(t.)54
-b(Although)35 b(w)m(e)h(ha)m(v)m(e)g(only)f(a)g(Zo)s(omMap)f(p)s(oin)m
-(ter)0 2399 y(a)m(v)-5 b(ailable,)34 b(this)d(is)g(not)g(a)h(problem.)
-42 b(If)30 b(y)m(ou)i(refer)f(to)g(the)h(brief)e(class)i(hierarc)m(h)m
-(y)g(describ)s(ed)e(ab)s(o)m(v)m(e)i(\()p Fu(x)p FF(4.3\),)0
-2512 y(y)m(ou)e(will)f(see)h(that)g(a)g(Zo)s(omMap)f(is)g(an)h(Ob)5
-b(ject,)30 b(alb)s(eit)g(a)f(sp)s(ecialised)h(one,)g(so)g(it)g
-(inherits)f(the)g(prop)s(erties)0 2625 y(of)e(all)g(Ob)5
-b(jects)27 b(and)f(can)g(b)s(e)g(substituted)g(wherev)m(er)h(an)f(Ob)5
-b(ject)27 b(is)g(required.)38 b(W)-8 b(e)28 b(can)f(therefore)g(pass)f
-(our)0 2738 y(Zo)s(omMap)k(p)s(oin)m(ter)h(directly)g(to)g(astSho)m(w,)
-g(as)f(follo)m(ws:)227 2998 y Ft(astShow\()41 b(zoommap)f(\);)0
-3272 y FF(The)k(output)h(from)f(this)h(will)g(app)s(ear)f(on)h(the)f
-(standard)g(output)h(stream)g(and)f(should)g(lo)s(ok)h(lik)m(e)h(the)0
-3384 y(follo)m(wing:)227 3645 y Ft(Begin)c(ZoomMap)358
-3744 y(Nin)g(=)i(2)227 3844 y(IsA)f(Mapping)358 3944
-y(Zoom)f(=)h(5)227 4043 y(End)g(ZoomMap)0 4317 y FF(Here,)e(the)e
-(\\Begin")i(and)d(\\End")g(lines)h(mark)f(the)h(b)s(eginning)e(and)h
-(end)g(of)h(the)g(Zo)s(omMap,)i(while)d(the)0 4429 y(v)-5
-b(alues)34 b(2)g(and)f(5)h(are)h(simply)e(the)h(v)-5
-b(alues)34 b(w)m(e)g(supplied)f(to)h(initialise)i(it)e(\()p
-Fu(x)p FF(4.2\).)53 b(These)33 b(ha)m(v)m(e)i(b)s(een)e(giv)m(en)0
-4542 y(simple)d(names)h(to)g(mak)m(e)g(them)f(easy)h(to)h(refer)e(to.)0
-4709 y(The)38 b(line)h(in)g(the)f(middle)h(whic)m(h)f(sa)m(ys)h(\\IsA)g
-(Mapping")g(is)g(a)g(dividing)g(line)g(b)s(et)m(w)m(een)g(the)g(t)m(w)m
-(o)h(v)-5 b(alues.)0 4822 y(It)36 b(indicates)h(that)g(the)f(\\Nin")h
-(v)-5 b(alue)36 b(is)g(a)g(prop)s(ert)m(y)g(shared)f(b)m(y)h(all)h
-(Mappings,)g(so)g(the)f(Zo)s(omMap)g(has)0 4935 y(inherited)k(this)g
-(from)g(its)h Fx(p)-5 b(ar)g(ent)44 b(class)d FF(\(Mapping\).)71
-b(The)40 b(\\Zo)s(om")h(v)-5 b(alue,)44 b(ho)m(w)m(ev)m(er,)g(is)d(sp)s
-(eci\014c)f(to)h(a)0 5048 y(Zo)s(omMap)30 b(and)g(isn't)h(shared)e(b)m
-(y)i(other)f(kinds)g(of)g(Mappings.)0 5353 y Fw(4.5)112
-b(Getting)37 b(A)m(ttribute)g(V)-9 b(alues)0 5580 y FF(W)h(e)31
-b(sa)m(w)f(ab)s(o)m(v)m(e)h(\()p Fu(x)p FF(4.4\))h(ho)m(w)e(to)h
-(displa)m(y)f(the)g(in)m(ternal)g(v)-5 b(alues)30 b(of)g(an)g(Ob)5
-b(ject,)31 b(but)e(what)g(ab)s(out)h(accessing)0 5693
-y(these)c(v)-5 b(alues)26 b(from)e(a)i(program?)39 b(Not)26
-b(all)g(in)m(ternal)g(Ob)5 b(ject)26 b(v)-5 b(alues)26
-b(are)f(accessible)i(in)e(this)h(w)m(a)m(y)-8 b(,)28
-b(but)c(man)m(y)p eop end
-%%Page: 36 46
-TeXDict begin 36 45 bop 0 52 a FF(36)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(are.)50 b(Those)33
-b(that)g(are,)i(are)f(called)g Fx(attributes)p FF(.)50
-b(A)33 b(description)h(of)f(all)h(the)f(attributes)h(used)f(b)m(y)g
-(the)g(AST)0 464 y(library)d(can)h(b)s(e)e(found)g(in)h(App)s(endix)f
-(C.)0 624 y(A)m(ttributes)e(come)h(in)e(sev)m(eral)h(data)h(t)m(yp)s
-(es)e(\(c)m(haracter)i(string,)g(in)m(teger,)h(b)s(o)s(olean)d(and)g
-(\015oating)h(p)s(oin)m(t\))g(and)0 737 y(there)32 b(is)g(a)g(standard)
-f(w)m(a)m(y)h(of)g(obtaining)h(their)f(v)-5 b(alues.)45
-b(As)31 b(an)h(example,)h(consider)f(obtaining)g(the)g(v)-5
-b(alue)0 850 y(of)31 b(the)f(Nin)g(attribute)h(for)g(the)f(Zo)s(omMap)g
-(created)i(earlier.)42 b(This)29 b(could)i(b)s(e)e(done)h(as)h(follo)m
-(ws:)227 1090 y Ft(int)43 b(nin;)227 1289 y(...)227 1488
-y(nin)g(=)g(astGetI\()d(zoommap,)g("Nin")i(\);)0 1741
-y FF(Here,)23 b(the)e(function)f(astGetI)i(is)e(used)g(to)h(extract)h
-(the)e(attribute)h(v)-5 b(alue)21 b(b)m(y)f(giving)i(it)f(the)f(Zo)s
-(omMap)g(p)s(oin)m(ter)0 1854 y(and)38 b(the)h(attribute)g(name)f
-(\(attribute)i(names)e(are)h(not)g(case)h(sensitiv)m(e,)i(but)c(w)m(e)h
-(ha)m(v)m(e)g(used)f(consisten)m(t)0 1966 y(capitalisation)31
-b(in)d(this)g(do)s(cumen)m(t)g(in)f(order)h(to)h(iden)m(tify)f(them\).)
-41 b(Remem)m(b)s(er)27 b(to)i(use)f(the)g(\\ast.h")i(header)0
-2079 y(\014le)g(to)i(include)e(the)g(function)g(protot)m(yp)s(e.)0
-2240 y(If)22 b(w)m(e)h(had)g(w)m(an)m(ted)g(the)g(v)-5
-b(alue)23 b(of)g(the)g(Zo)s(om)f(attribute,)k(w)m(e)d(w)m(ould)f
-(probably)g(ha)m(v)m(e)i(used)e(astGetD)j(instead,)0
-2353 y(this)30 b(b)s(eing)g(a)h(double)f(v)m(ersion)h(of)f(the)h(same)g
-(function,)f(for)g(example:)227 2592 y Ft(double)41 b(zoom;)227
-2791 y(...)227 2990 y(zoom)h(=)h(astGetD\()e(zoommap,)f("Zoom")h(\);)0
-3243 y FF(Ho)m(w)m(ev)m(er,)i(w)m(e)c(could)f(equally)h(w)m(ell)h(ha)m
-(v)m(e)f(read)g(the)f(Nin)h(v)-5 b(alue)39 b(as)f(double,)j(or)d(the)h
-(Zo)s(om)f(v)-5 b(alue)39 b(as)g(an)0 3356 y(in)m(teger,)32
-b(or)e(whatev)m(er)i(w)m(e)e(w)m(an)m(ted.)0 3516 y(The)41
-b(data)h(t)m(yp)s(e)g(y)m(ou)g(w)m(an)m(t)g(returned)f(is)h(sp)s
-(eci\014ed)e(simply)i(b)m(y)f(replacing)h(the)g(\014nal)f(c)m(haracter)
-j(of)d(the)0 3629 y(astGetX)h(function)d(name)h(with)g(C)f(\(c)m
-(haracter)j(string\),)h(D)d(\(double\),)j(F)d(\(\015oat\),)k(I)39
-b(\(in)m(t\))i(or)f(L)g(\(long\).)0 3742 y(If)d(p)s(ossible,)h(the)f(v)
--5 b(alue)38 b(is)f(con)m(v)m(erted)h(to)g(the)f(t)m(yp)s(e)g(y)m(ou)g
-(w)m(an)m(t.)62 b(If)36 b(not,)j(an)e(error)g(message)h(will)f(result.)
-0 3855 y(Note)c(that)f(all)g(\015oating)g(p)s(oin)m(t)f(v)-5
-b(alues)32 b(are)g(stored)f(in)m(ternally)i(as)e(double,)h(and)e(all)j
-(in)m(teger)f(v)-5 b(alues)32 b(as)g(in)m(t.)0 3968 y(Bo)s(olean)g(v)-5
-b(alues)30 b(are)h(also)h(stored)e(as)h(in)m(tegers,)h(but)d(only)i
-(tak)m(e)h(the)e(v)-5 b(alues)31 b(1)g(and)e(0)i(\(for)g(true/false\).)
-0 4257 y Fw(4.6)112 b(Setting)38 b(A)m(ttribute)e(V)-9
-b(alues)0 4476 y FF(Some)37 b(attribute)h(v)-5 b(alues)38
-b(are)f(read-only)h(and)e(cannot)i(b)s(e)f(altered)h(after)f(an)g(Ob)5
-b(ject)38 b(has)f(b)s(een)f(created.)0 4589 y(The)23
-b(Nin)h(attribute)h(of)f(a)h(Zo)s(omMap)f(\(describing)g(the)g(n)m(um)m
-(b)s(er)e(of)j(co)s(ordinates\))g(is)f(lik)m(e)h(this.)39
-b(It)24 b(is)g(de\014ned)0 4702 y(when)29 b(the)i(Zo)s(omMap)f(is)h
-(created,)g(but)f(cannot)h(then)f(b)s(e)g(altered.)0
-4862 y(Other)g(attributes,)i(ho)m(w)m(ev)m(er,)g(can)f(b)s(e)f(mo)s
-(di\014ed)g(whenev)m(er)g(y)m(ou)h(w)m(an)m(t.)43 b(A)31
-b(Zo)s(omMap's)f(Zo)s(om)h(attribute)0 4975 y(is)f(lik)m(e)i(this.)41
-b(If)30 b(w)m(e)g(w)m(an)m(ted)i(to)f(c)m(hange)g(it,)g(this)g(could)f
-(b)s(e)g(done)g(simply)g(as)g(follo)m(ws:)227 5215 y
-Ft(astSetD\()41 b(zoommap,)f("Zoom",)h(99.6)g(\);)0 5467
-y FF(whic)m(h)35 b(sets)i(the)f(v)-5 b(alue)36 b(to)g(99.6.)59
-b(As)35 b(when)g(getting)j(an)d(attribute)i(v)-5 b(alue)36
-b(\()p Fu(x)p FF(4.5\),)k(y)m(ou)c(ha)m(v)m(e)h(a)f(c)m(hoice)h(of)0
-5580 y(whic)m(h)d(data)i(t)m(yp)s(e)e(y)m(ou)h(will)g(use)g(to)g
-(supply)e(the)i(new)f(v)-5 b(alue.)54 b(F)-8 b(or)35
-b(instance,)i(y)m(ou)e(could)f(use)h(an)f(in)m(teger)0
-5693 y(v)-5 b(alue,)31 b(as)g(in:)p eop end
-%%Page: 37 47
-TeXDict begin 37 46 bop 0 52 a Fy(4.6)92 b(Setting)31
-b(A)m(ttribute)g(V)-8 b(alues)2508 b FF(37)227 351 y
-Ft(astSetI\()41 b(zoommap,)f("Zoom",)h(99)h(\);)0 609
-y FF(and)31 b(the)h(necessary)h(data)f(con)m(v)m(ersion)i(w)m(ould)d(o)
-s(ccur.)45 b(Y)-8 b(ou)33 b(sp)s(ecify)e(the)i(data)f(t)m(yp)s(e)g(y)m
-(ou)h(w)m(an)m(t)f(to)h(supply)0 722 y(simply)c(b)m(y)h(replacing)h
-(the)f(\014nal)g(c)m(haracter)h(of)f(the)g(astSetX)h(function)f(name)g
-(with)g(C)f(\(c)m(haracter)j(string\),)0 835 y(D)k(\(double\),)h(F)e
-(\(\015oat\),)j(I)d(\(in)m(t\))i(or)e(L)g(\(long\).)57
-b(Setting)36 b(a)f(b)s(o)s(olean)h(attribute)g(to)g(an)m(y)f(non-zero)h
-(in)m(teger)0 948 y(causes)31 b(it)g(to)g(tak)m(e)h(the)e(v)-5
-b(alue)31 b(1.)0 1110 y(An)40 b(alternativ)m(e)j(w)m(a)m(y)f(of)e
-(setting)i(attribute)f(v)-5 b(alues)41 b(for)g(Ob)5 b(jects)40
-b(is)h(to)g(use)f(the)h(astSet)g(function)g(\()p Fx(i.e.)0
-1222 y FF(with)31 b(no)f(\014nal)h(c)m(haracter)h(sp)s(ecifying)f(a)g
-(data)h(t)m(yp)s(e\).)42 b(In)30 b(this)h(case,)h(y)m(ou)g(supply)d
-(the)i(attribute)h(v)-5 b(alues)31 b(in)0 1335 y(a)36
-b(c)m(haracter)h(string.)55 b(The)35 b(big)g(adv)-5 b(an)m(tage)37
-b(of)f(this)f(metho)s(d)g(is)g(that)h(y)m(ou)f(can)h(assign)f(v)-5
-b(alues)36 b(to)g(sev)m(eral)0 1448 y(attributes)31 b(at)h(once,)f
-(separating)h(them)e(with)h(commas.)42 b(This)30 b(also)h(reads)g(more)
-f(naturally)h(in)g(programs.)0 1561 y(F)-8 b(or)31 b(example:)227
-1806 y Ft(astSet\()41 b(zoommap,)f("Zoom=99.6,)f(Report=1")h(\);)0
-2064 y FF(w)m(ould)j(set)g(v)-5 b(alues)43 b(for)g(b)s(oth)f(the)h(Zo)s
-(om)g(attribute)g(and)g(the)g(Rep)s(ort)f(attribute)i(\(ab)s(out)f
-(whic)m(h)f(more)0 2177 y(shortly|)p Fu(x)p FF(4.8\).)80
-b(Y)-8 b(ou)43 b(don't)g(really)g(ha)m(v)m(e)h(to)g(w)m(orry)e(ab)s
-(out)g(data)i(t)m(yp)s(es)f(with)f(this)h(metho)s(d,)i(as)e(an)m(y)0
-2290 y(c)m(haracter)32 b(represen)m(tation)f(will)g(do.)0
-2451 y(Another)k(attractiv)m(e)k(feature)c(of)h(astSet)g(is)f(that)h(y)
-m(ou)g(can)f(build)g(the)g(c)m(haracter)i(string)e(whic)m(h)g(con)m
-(tains)0 2564 y(the)d(attribute)g(settings)h(in)e(the)g(same)h(w)m(a)m
-(y)h(as)f(when)e(using)h(the)h(C)f(run)f(time)i(library)g(\\prin)m(tf)7
-b(")32 b(function.)0 2677 y(This)e(is)g(most)h(useful)e(when)h(the)g(v)
--5 b(alues)31 b(y)m(ou)g(w)m(an)m(t)g(to)g(set)g(are)g(held)f(in)g
-(other)g(v)-5 b(ariables.)42 b(F)-8 b(or)31 b(example:)227
-2922 y Ft(double)41 b(zoom)h(=)h(99.6;)227 3021 y(int)g(report)e(=)i
-(1;)227 3221 y(...)227 3420 y(astSet\()e(zoommap,)f("Zoom=\045g,)g
-(Report=\045d",)f(zoom,)j(report)f(\);)0 3678 y FF(w)m(ould)27
-b(replace)i(the)e(\\\045")h(con)m(v)m(ersion)h(sp)s(eci\014cations)f(b)
-m(y)f(the)h(v)-5 b(alues)28 b(supplied)e(as)i(additional)g(argumen)m
-(ts.)0 3791 y(An)m(y)j(n)m(um)m(b)s(er)e(of)i(additional)g(argumen)m
-(ts)g(ma)m(y)h(b)s(e)e(supplied)f(and)h(the)h(formatting)h(rules)e(are)
-h(exactly)h(the)0 3904 y(same)25 b(as)g(for)f(the)h(C)f(\\prin)m(tf)7
-b(")25 b(family)g(of)g(functions.)39 b(This)23 b(is)i(a)g(v)m(ery)g
-(\015exible)g(tec)m(hnique,)i(but)d(do)s(es)g(con)m(tain)0
-4016 y(one)31 b(pitfall:)227 4274 y FD(Pitfall.)39 b
-FF(The)26 b(default)g(precision)g(used)g(b)m(y)f(\\prin)m(tf)7
-b(")27 b(\(and)f(astSet\))h(for)f(\015oating)h(p)s(oin)m(t)f(v)-5
-b(alues)227 4387 y(is)41 b(only)g(6)g(decimal)g(digits,)j(corresp)s
-(onding)c(appro)m(ximately)h(to)h(\015oat)f(on)f(most)h(mac)m(hines,)
-227 4500 y(whereas)e(the)h(AST)f(library)f(stores)i(suc)m(h)f(v)-5
-b(alues)40 b(in)m(ternally)g(as)g(doubles.)67 b(Y)-8
-b(ou)39 b(should)g(b)s(e)227 4613 y(careful)i(to)h(sp)s(ecify)e(a)h
-(larger)h(precision)f(\(suc)m(h)f(as)h(DBL)p Fq(_)p FF(DIG,)h(as)f
-(de\014ned)f(in)g Fo(<)p FF(\015oat.h)p Fo(>)p FF(\))227
-4726 y(when)30 b(necessary)-8 b(.)41 b(F)-8 b(or)31 b(example:)427
-4924 y Ft(#include)41 b(<float.h>)427 5123 y(...)427
-5322 y(astSet\()g(zoommap,)f("Zoom=\045.*g",)f(DBL_DIG,)h(double_value)
-f(\);)0 5580 y FF(Substituted)c(strings)h(ma)m(y)h(con)m(tain)h(commas)
-f(and)e(this)h(is)h(a)f(useful)g(w)m(a)m(y)h(of)f(assigning)h(suc)m(h)f
-(strings)g(as)0 5693 y(attribute)30 b(v)-5 b(alues)29
-b(without)g(the)g(comma)g(b)s(eing)g(in)m(terpreted)g(as)g(an)g
-(assignmen)m(t)h(separator,)g(for)f(example:)p eop end
-%%Page: 38 48
-TeXDict begin 38 47 bop 0 52 a FF(38)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)227 351 y Ft(astSet\()41 b(object,)g
-("Attribute=\045s",)c("A)43 b(string,)d(containing)g(a)j(comma")e(\);)0
-591 y FF(This)31 b(is)h(equiv)-5 b(alen)m(t)33 b(to)g(using)f(astSetC)g
-(and)f(one)i(of)f(these)g(t)m(w)m(o)h(metho)s(ds)f(should)f(alw)m(a)m
-(ys)i(b)s(e)e(used)g(when)0 704 y(assigning)26 b(string)g(attribute)h
-(v)-5 b(alues)26 b(whic)m(h)g(migh)m(t)h(p)s(oten)m(tially)g(con)m
-(tain)h(a)e(comma)h(\()p Fx(e.g.)e FF(strings)h(obtained)0
-817 y(from)32 b(an)g(external)i(source\).)47 b(Ho)m(w)m(ev)m(er,)36
-b(y)m(ou)c(should)g(not)h(attempt)g(to)h(use)e(astSet)h(to)g
-(substitute)g(strings)0 930 y(that)g(con)m(tain)g(newline)f(c)m
-(haracters,)i(since)e(these)h(are)f(used)f(in)m(ternally)i(as)f
-(separators)h(b)s(et)m(w)m(een)f(adjacen)m(t)0 1043 y(attribute)f
-(assignmen)m(ts.)0 1200 y(Finally)-8 b(,)38 b(a)e(v)m(ery)g(con)m(v)m
-(enien)m(t)h(w)m(a)m(y)f(of)g(setting)g(attribute)g(v)-5
-b(alues)36 b(is)f(to)h(do)g(so)f(at)h(the)g(same)g(time)g(as)f(y)m(ou)0
-1313 y(create)25 b(an)f(Ob)5 b(ject.)39 b(Ev)m(ery)24
-b(Ob)5 b(ject)24 b(constructor)g(function)f(has)h(a)g(\014nal)f(c)m
-(haracter)j(string)e(argumen)m(t)g(whic)m(h)0 1426 y(allo)m(ws)g(y)m
-(ou)f(to)h(do)f(this.)38 b(Although)23 b(y)m(ou)g(can)h(simply)e
-(supply)f(an)i(empt)m(y)h(string,)g(it)g(is)f(an)f(ideal)i(opp)s
-(ortunit)m(y)0 1539 y(to)h(initialise)h(the)e(Ob)5 b(ject)24
-b(to)h(ha)m(v)m(e)g(just)f(the)g(attributes)h(y)m(ou)f(w)m(an)m(t.)40
-b(F)-8 b(or)24 b(example,)j(w)m(e)d(migh)m(t)h(ha)m(v)m(e)g(created)0
-1652 y(our)30 b(original)h(Zo)s(omMap)g(with:)227 1879
-y Ft(zoommap)41 b(=)i(astZoomMap\()c(2,)k(5.0,)f("Report=1")d(\);)0
-2119 y FF(and)33 b(it)h(w)m(ould)g(then)f(start)i(life)f(with)g(its)g
-(Rep)s(ort)f(attribute)i(set)f(to)g(1.)52 b(The)33 b(\\prin)m(tf)7
-b("-st)m(yle)36 b(substitution)0 2232 y(describ)s(ed)29
-b(ab)s(o)m(v)m(e)j(ma)m(y)f(also)g(b)s(e)f(used)f(here.)0
-2517 y Fw(4.7)112 b(T)-9 b(esting,)38 b(Clearing)g(and)g(Defaulting)h
-(A)m(ttributes)0 2733 y FF(Y)-8 b(ou)35 b(can)g(use)f(the)h(astGetX)h
-(family)f(of)f(functions)g(\()p Fu(x)p FF(4.5\))j(to)e(get)h(a)f(v)-5
-b(alue)35 b(for)f(an)m(y)h(Ob)5 b(ject)35 b(attribute)g(at)0
-2846 y(an)m(y)c(time,)h(regardless)f(of)g(whether)f(a)h(v)-5
-b(alue)31 b(has)g(previously)f(b)s(een)g(set)h(for)g(it.)42
-b(If)30 b(no)h(v)-5 b(alue)31 b(has)g(b)s(een)f(set,)0
-2959 y(the)h(AST)e(library)h(will)h(generate)h(a)f(suitable)f(default)h
-(v)-5 b(alue.)0 3116 y(Often,)47 b(the)c(default)h(v)-5
-b(alue)44 b(of)f(an)h(attribute)g(will)g(not)f(simply)g(b)s(e)g
-(trivial)i(\(zero)f(or)g(blank\))f(but)g(ma)m(y)0 3229
-y(in)m(v)m(olv)m(e)h(considerable)e(pro)s(cessing)f(to)i(calculate.)76
-b(Wherev)m(er)43 b(p)s(ossible,)h(defaults)d(are)h(designed)g(to)g(b)s
-(e)0 3342 y(real-life,)c(sensible)d(v)-5 b(alues)36 b(that)f(con)m(v)m
-(ey)i(information)e(ab)s(out)g(the)h(state)g(of)f(the)h(Ob)5
-b(ject.)55 b(In)34 b(particular,)0 3455 y(they)24 b(ma)m(y)h(often)f(b)
-s(e)f(based)h(on)f(the)i(v)-5 b(alues)24 b(of)g(other)g(attributes,)i
-(so)e(their)g(v)-5 b(alues)24 b(ma)m(y)h(c)m(hange)g(in)e(resp)s(onse)0
-3568 y(to)31 b(c)m(hanges)h(in)e(these)h(other)g(attributes.)41
-b(The)30 b(Zo)s(omMap)h(class)g(that)g(w)m(e)g(ha)m(v)m(e)h(studied)d
-(so)i(far)f(is)h(a)g(little)0 3681 y(to)s(o)g(simple)f(to)i(sho)m(w)e
-(this)g(b)s(eha)m(viour,)g(but)g(w)m(e)h(will)g(meet)g(it)g(later)g
-(on.)0 3838 y(An)h(attribute)i(that)f(returns)f(a)h(default)g(v)-5
-b(alue)33 b(in)g(this)g(w)m(a)m(y)g(is)g(said)g(to)h(b)s(e)e
-Fx(un-set.)47 b FF(Con)m(v)m(ersely)-8 b(,)35 b(once)f(an)0
-3951 y(explicit)d(v)-5 b(alue)30 b(has)g(b)s(een)e(assigned)i(to)h(an)e
-(attribute,)i(it)f(b)s(ecomes)g Fx(set)g FF(and)f(will)h(alw)m(a)m(ys)h
-(return)e(precisely)0 4064 y(that)i(v)-5 b(alue,)31 b(nev)m(er)g(a)g
-(default.)0 4221 y(The)41 b(distinction)i(b)s(et)m(w)m(een)f(set)h(and)
-e(un-set)h(attributes)g(is)g(imp)s(ortan)m(t)g(and)f(a\013ects)j(the)e
-(b)s(eha)m(viour)f(of)0 4334 y(sev)m(eral)36 b(k)m(ey)g(routines)f(in)g
-(the)g(AST)f(library)-8 b(.)55 b(Y)-8 b(ou)36 b(can)f(test)h(if)f(an)g
-(attribute)g(is)g(set)h(using)f(the)g(function)0 4447
-y(astT)-8 b(est,)32 b(whic)m(h)e(returns)f(a)i(b)s(o)s(olean)f(\(in)m
-(teger\))j(result,)d(as)h(in:)227 4673 y Ft(if)43 b(\()g(astTest\()d
-(zoommap,)h("Report")f(\))j(\))g({)358 4773 y(<the)f(Report)f
-(attribute)f(is)j(set>)227 4873 y(})0 5113 y FF(Once)31
-b(an)h(attribute)g(is)f(set,)i(y)m(ou)e(can)h(return)e(it)i(to)g(its)g
-(un-set)f(state)i(using)e(astClear.)45 b(The)31 b(e\013ect)h(is)g(as)f
-(if)0 5226 y(it)g(had)f(nev)m(er)g(b)s(een)g(set)h(in)f(the)h(\014rst)e
-(place.)42 b(F)-8 b(or)31 b(example:)227 5453 y Ft(astClear\()40
-b(zoommap,)g("Report")h(\);)0 5693 y FF(w)m(ould)30 b(ensure)g(that)h
-(the)f(default)h(v)-5 b(alue)31 b(of)f(the)h(Rep)s(ort)f(attribute)h
-(is)f(used)g(subsequen)m(tly)-8 b(.)p eop end
-%%Page: 39 49
-TeXDict begin 39 48 bop 0 52 a Fy(4.8)92 b(T)-8 b(ransforming)30
-b(Co)s(ordinates)2442 b FF(39)0 351 y Fw(4.8)112 b(T)-9
-b(ransforming)39 b(Co)s(ordinates)0 567 y FF(W)-8 b(e)28
-b(no)m(w)g(ha)m(v)m(e)g(the)f(necessary)h(apparatus)f(to)h(start)g
-(using)e(our)h(Zo)s(omMap)g(to)h(sho)m(w)f(what)g(it)h(is)f(really)h
-(for.)0 679 y(Here,)h(w)m(e)e(will)g(also)h(encoun)m(ter)g(a)g(routine)
-f(that)g(is)g(a)h(little)h(more)e(fussy)f(ab)s(out)h(the)g(t)m(yp)s(e)g
-(of)g(p)s(oin)m(ter)h(it)f(will)0 792 y(accept.)0 949
-y(The)33 b(purp)s(ose)g(of)h(a)g(Zo)s(omMap)g(is)g(to)h(m)m(ultiply)f
-(co)s(ordinates)h(b)m(y)f(a)g(constan)m(t)h(zo)s(om)g(factor.)52
-b(T)-8 b(o)35 b(witness)0 1062 y(this)30 b(in)g(action,)i(w)m(e)f(will)
-g(\014rst)e(set)i(the)g(Rep)s(ort)f(attribute)h(for)f(our)g(Zo)s(omMap)
-g(to)i(a)e(non-zero)h(v)-5 b(alue:)227 1286 y Ft(astSet\()41
-b(zoommap,)f("Report=1")g(\);)0 1524 y FF(This)32 b(b)s(o)s(olean)h
-(\(in)m(teger\))i(attribute,)f(whic)m(h)e(is)h(presen)m(t)g(in)f(all)i
-(Mappings)f(\(and)f(a)h(Zo)s(omMap)g(is)g(a)g(Map-)0
-1637 y(ping\),)28 b(causes)f(the)g(automatic)h(displa)m(y)f(of)g(all)g
-(co)s(ordinate)h(v)-5 b(alues)27 b(that)g(the)g(Mapping)g(con)m(v)m
-(erts.)41 b(It)27 b(is)f(not)0 1750 y(a)32 b(go)s(o)s(d)f(idea)h(to)g
-(lea)m(v)m(e)h(this)f(feature)f(turned)g(on)g(in)g(a)h(\014nished)d
-(program,)j(but)e(it)i(can)g(sa)m(v)m(e)h(a)f(lot)g(of)f(w)m(ork)0
-1863 y(during)e(debugging.)0 2019 y(Our)37 b(next)i(step)g(is)f(to)h
-(set)g(up)f(some)h(co)s(ordinates)g(for)f(the)h(Zo)s(omMap)g(to)g(w)m
-(ork)f(on,)j(using)d(t)m(w)m(o)i(arra)m(ys)0 2132 y(\\xin")f(and)f
-(\\yin",)k(and)c(t)m(w)m(o)i(arra)m(ys)f(to)h(receiv)m(e)g(the)f
-(transformed)f(co)s(ordinates,)k(\\xout")e(and)e(\\y)m(out".)0
-2245 y(Note)32 b(that)f(these)f(are)h(arra)m(ys)g(of)g(double,)f(as)g
-(are)h(all)g(co)s(ordinate)h(data)f(pro)s(cessed)e(b)m(y)i(the)f(AST)g
-(library:)227 2470 y Ft(double)41 b(xin[)h(10)h(])g(=)g({)h(0.0,)e
-(1.0,)f(2.0,)h(3.0,)g(4.0,)g(5.0,)g(6.0,)g(7.0,)g(8.0,)g(9.0)g(};)227
-2569 y(double)f(yin[)h(10)h(])g(=)g({)h(0.0,)e(2.0,)f(4.0,)h(6.0,)g
-(8.0,)g(10.0,)g(12.0,)f(14.0,)h(16.0,)f(18.0)h(};)227
-2669 y(double)f(xout[)h(10)h(];)227 2768 y(double)e(yout[)h(10)h(];)0
-3006 y FF(W)-8 b(e)38 b(will)g(no)m(w)f(use)g(the)g(function)g(astT)-8
-b(ran2)38 b(to)g(transform)f(the)g(input)f(co)s(ordinates.)62
-b(This)36 b(is)i(the)f(most)0 3119 y(commonly-used)32
-b(\(2-dimensional\))i(co)s(ordinate)g(transformation)e(function.)46
-b(If)32 b(y)m(ou)h(lo)s(ok)g(at)g(its)g(descrip-)0 3232
-y(tion)g(in)g(App)s(endix)e(B,)i(y)m(ou)h(will)f(see)g(that)g(it)g
-(requires)g(a)g(p)s(oin)m(ter)f(to)i(a)f(Mapping,)g(so)g(w)m(e)h
-(cannot)f(supply)0 3345 y(just)g(an)m(y)h(old)f(Ob)5
-b(ject)34 b(p)s(oin)m(ter,)g(as)g(w)m(e)g(could)f(with)g(the)h
-(functions)f(discussed)f(previously)-8 b(.)50 b(If)33
-b(w)m(e)h(passed)0 3458 y(it)d(a)g(p)s(oin)m(ter)f(to)h(an)f
-(inappropriate)h(Ob)5 b(ject,)30 b(an)h(error)f(message)h(w)m(ould)f
-(result.)0 3614 y(F)-8 b(ortunately)g(,)25 b(a)c(Zo)s(omMap)g(is)g(a)g
-(Mapping)g(\(App)s(endix)e(A\),)k(so)f(w)m(e)f(can)g(use)f(it)i(with)e
-(astT)-8 b(ran2)22 b(to)f(transform)0 3727 y(our)30 b(co)s(ordinates,)h
-(as)g(follo)m(ws:)227 3952 y Ft(astTran2\()40 b(zoommap,)g(10,)j(xin,)f
-(yin,)g(1,)g(xout,)g(yout)g(\);)0 4190 y FF(Here,)26
-b(10)e(is)g(the)g(n)m(um)m(b)s(er)e(of)i(p)s(oin)m(ts)f(w)m(e)h(w)m(an)
-m(t)h(to)f(transform)f(and)g(the)h(\014fth)f(argumen)m(t)h(v)-5
-b(alue)24 b(of)g(1)g(indicates)0 4302 y(that)31 b(w)m(e)g(w)m(an)m(t)g
-(to)g(transform)f(in)g(the)g Fx(forwar)-5 b(d)33 b FF(direction)e
-(\(from)g(input)e(to)i(output\).)0 4459 y(Because)e(our)d(Zo)s(omMap's)
-h(Rep)s(ort)g(attribute)h(is)f(set)h(to)g(1,)h(this)e(will)g(cause)h
-(the)f(e\013ects)i(of)e(the)g(Zo)s(omMap)0 4572 y(on)j(the)h(co)s
-(ordinates)g(to)g(b)s(e)f(displa)m(y)m(ed)h(on)f(the)h(standard)e
-(output)h(stream:)227 4796 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227
-4896 y(\(1,)h(2\))f(-->)h(\(5,)f(10\))227 4996 y(\(2,)h(4\))f(-->)h
-(\(10,)f(20\))227 5095 y(\(3,)h(6\))f(-->)h(\(15,)f(30\))227
-5195 y(\(4,)h(8\))f(-->)h(\(20,)f(40\))227 5295 y(\(5,)h(10\))f(-->)g
-(\(25,)g(50\))227 5394 y(\(6,)h(12\))f(-->)g(\(30,)g(60\))227
-5494 y(\(7,)h(14\))f(-->)g(\(35,)g(70\))227 5593 y(\(8,)h(16\))f(-->)g
-(\(40,)g(80\))227 5693 y(\(9,)h(18\))f(-->)g(\(45,)g(90\))p
-eop end
-%%Page: 40 50
-TeXDict begin 40 49 bop 0 52 a FF(40)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(This)h(sho)m(ws)g(the)g(co)s
-(ordinate)i(v)-5 b(alues)32 b(of)f(eac)m(h)i(p)s(oin)m(t)e(b)s(oth)g(b)
-s(efore)g(and)g(after)h(the)f(Zo)s(omMap)h(is)f(applied.)0
-464 y(Y)-8 b(ou)33 b(can)h(see)f(that)h(eac)m(h)g(co)s(ordinate)f(v)-5
-b(alue)34 b(has)e(b)s(een)h(m)m(ultiplied)g(b)m(y)g(the)g(factor)h(5)f
-(determined)f(b)m(y)h(the)0 577 y(Zo)s(om)i(attribute)g(v)-5
-b(alue.)55 b(The)35 b(transformed)f(co)s(ordinates)i(are)f(no)m(w)g
-(stored)g(in)g(the)g(\\xout")h(and)f(\\y)m(out")0 690
-y(arra)m(ys.)0 852 y(If)c(w)m(e)h(w)m(an)m(ted)h(to)f(transform)f(in)g
-(the)h(opp)s(osite)g(direction,)h(w)m(e)f(need)f(simply)h(c)m(hange)g
-(the)g(\014fth)f(argumen)m(t)0 965 y(of)f(astT)-8 b(ran2)31
-b(from)f(1)h(to)f(0.)41 b(W)-8 b(e)32 b(can)e(also)h(feed)g(the)f
-(output)g(co)s(ordinates)h(from)e(the)i(ab)s(o)m(v)m(e)g(bac)m(k)g(in)m
-(to)g(the)0 1078 y(function:)227 1326 y Ft(astTran2\()40
-b(zoommap,)g(10,)j(xout,)e(yout,)h(0,)h(xin,)e(yin)i(\);)0
-1586 y FF(The)30 b(output)g(w)m(ould)g(then)g(lo)s(ok)h(lik)m(e:)227
-1834 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))227 1934 y(\(5,)h(10\))f
-(-->)g(\(1,)h(2\))227 2033 y(\(10,)f(20\))h(-->)f(\(2,)g(4\))227
-2133 y(\(15,)g(30\))h(-->)f(\(3,)g(6\))227 2232 y(\(20,)g(40\))h(-->)f
-(\(4,)g(8\))227 2332 y(\(25,)g(50\))h(-->)f(\(5,)g(10\))227
-2432 y(\(30,)g(60\))h(-->)f(\(6,)g(12\))227 2531 y(\(35,)g(70\))h(-->)f
-(\(7,)g(14\))227 2631 y(\(40,)g(80\))h(-->)f(\(8,)g(16\))227
-2731 y(\(45,)g(90\))h(-->)f(\(9,)g(18\))0 2991 y FF(This)35
-b(is)h(termed)f(the)h Fx(inverse)g FF(transformation)g(\(w)m(e)h(ha)m
-(v)m(e)g(con)m(v)m(erted)g(from)e(output)g(to)i(input\))e(and)g(y)m(ou)
-0 3104 y(can)c(see)g(that)g(the)f(original)i(co)s(ordinates)f(ha)m(v)m
-(e)g(b)s(een)f(reco)m(v)m(ered)i(b)m(y)e(dividing)g(b)m(y)h(the)f(Zo)s
-(om)g(factor.)0 3397 y Fw(4.9)112 b(Managing)40 b(Ob)6
-b(ject)37 b(P)m(oin)m(ters)0 3618 y FF(So)30 b(far,)f(w)m(e)i(ha)m(v)m
-(e)f(lo)s(ok)m(ed)h(at)g(creating)g(Ob)5 b(jects)29 b(and)g(using)h
-(them)f(in)h(v)-5 b(arious)29 b(simple)h(w)m(a)m(ys)g(but)f(ha)m(v)m(e)
-i(not)0 3731 y(y)m(et)h(considered)e(ho)m(w)g(to)h(get)h(rid)d(of)i
-(them)f(again.)0 3893 y(Ev)m(ery)22 b(Ob)5 b(ject)22
-b(consumes)g(v)-5 b(arious)21 b(computer)h(resources)g(\(principally)g
-(memory\))g(and)g(should)e(b)s(e)i(disp)s(osed)0 4006
-y(of)35 b(when)g(it)h(is)f(no)g(longer)h(required,)g(so)g(as)f(to)h
-(free)g(up)e(these)i(resources.)56 b(One)34 b(w)m(a)m(y)j(of)e(doing)h
-(this)f(\(not)0 4119 y(necessarily)26 b(the)f(b)s(est|)p
-Fu(x)p FF(4.10\))i(is)e(to)h Fx(annul)g FF(eac)m(h)g(Ob)5
-b(ject)25 b(p)s(oin)m(ter)g(once)h(y)m(ou)f(ha)m(v)m(e)i(\014nished)c
-(with)i(it,)i(using)0 4232 y(astAnn)m(ul.)41 b(F)-8 b(or)31
-b(example:)227 4480 y Ft(zoommap)41 b(=)i(astAnnul\()d(zoommap)h(\);)0
-4740 y FF(This)32 b(indicates)h(that)g(y)m(ou)f(ha)m(v)m(e)i
-(\014nished)d(with)h(the)g(p)s(oin)m(ter.)47 b(Since)32
-b(astAnn)m(ul)g(alw)m(a)m(ys)i(returns)d(the)i(n)m(ull)0
-4853 y(v)-5 b(alue)41 b(AST)p Fq(__)p FF(NULL)f(\(as)h(de\014ned)f(in)g
-(\\ast.h"\),)45 b(the)c(recommended)f(w)m(a)m(y)i(of)f(using)f(it,)45
-b(as)40 b(here,)k(is)d(to)0 4966 y(assign)33 b(the)g(returned)f(v)-5
-b(alue)33 b(to)g(the)g(p)s(oin)m(ter)g(b)s(eing)f(ann)m(ulled.)48
-b(This)32 b(ensures)g(that)h(an)m(y)g(attempt)h(to)g(use)0
-5079 y(the)d(p)s(oin)m(ter)f(again)h(will)g(generate)h(an)e(error)g
-(message.)0 5241 y(In)36 b(general,)41 b(this)c(pro)s(cess)g(ma)m(y)g
-(not)h(delete)g(the)g(Ob)5 b(ject,)39 b(b)s(ecause)e(there)h(ma)m(y)f
-(still)i(b)s(e)d(other)i(p)s(oin)m(ters)0 5354 y(asso)s(ciated)26
-b(with)f(it.)39 b(Ho)m(w)m(ev)m(er,)28 b(eac)m(h)e(Ob)5
-b(ject)25 b(main)m(tains)h(a)f(coun)m(t)h(of)f(the)g(n)m(um)m(b)s(er)e
-(of)i(p)s(oin)m(ters)g(asso)s(ciated)0 5467 y(with)42
-b(it)h(and)e(will)i(b)s(e)e(deleted)i(if)g(y)m(ou)f(ann)m(ul)g(the)g
-(\014nal)g(p)s(oin)m(ter.)77 b(Using)42 b(astAnn)m(ul)g(consisten)m
-(tly)i(will)0 5580 y(therefore)36 b(ensure)e(that)i(all)g(Ob)5
-b(jects)35 b(are)g(disp)s(osed)f(of)i(at)g(the)f(correct)h(time.)56
-b(Y)-8 b(ou)36 b(can)f(determine)g(ho)m(w)0 5693 y(man)m(y)30
-b(p)s(oin)m(ters)h(are)f(asso)s(ciated)i(with)e(an)h(Ob)5
-b(ject)30 b(b)m(y)g(examining)h(its)g(\(read-only\))h(RefCoun)m(t)e
-(attribute.)p eop end
-%%Page: 41 51
-TeXDict begin 41 50 bop 0 52 a Fy(4.10)93 b(AST)29 b(P)m(oin)m(ter)j
-(Con)m(texts|Begin)g(and)e(End)1860 b FF(41)0 351 y Fw(4.10)112
-b(AST)38 b(P)m(oin)m(ter)e(Con)m(texts|Begin)i(and)g(End)0
-568 y FF(The)30 b(use)g(of)g(astAnn)m(ul)h(\()p Fu(x)p
-FF(4.9\))h(is)f(not)f(completely)j(fo)s(olpro)s(of,)d(ho)m(w)m(ev)m
-(er.)42 b(Consider)30 b(the)g(follo)m(wing:)227 798 y
-Ft(astShow\()41 b(astZoomMap\()e(2,)j(5.0,)g("")h(\))g(\);)0
-1041 y FF(This)29 b(creates)i(a)f(Zo)s(omMap)g(and)f(displa)m(ys)h(it)g
-(on)g(standard)f(output)g(\()p Fu(x)p FF(4.4\).)43 b(Using)30
-b(function)g(in)m(v)m(o)s(cations)0 1154 y(as)37 b(argumen)m(ts)f(to)h
-(other)g(functions)f(in)g(this)g(w)m(a)m(y)h(is)g(v)m(ery)g(con)m(v)m
-(enien)m(t)h(b)s(ecause)e(it)h(a)m(v)m(oids)h(the)f(need)f(for)0
-1267 y(in)m(termediate)g(p)s(oin)m(ter)d(v)-5 b(ariables.)52
-b(Ho)m(w)m(ev)m(er,)37 b(the)d(p)s(oin)m(ter)g(generated)h(b)m(y)f
-(astZo)s(omMap)g(is)g(still)h(activ)m(e,)0 1380 y(and)29
-b(since)h(w)m(e)g(ha)m(v)m(e)h(not)e(stored)h(its)g(v)-5
-b(alue,)30 b(w)m(e)g(cannot)g(use)g(astAnn)m(ul)f(to)h(ann)m(ul)g(it.)
-41 b(The)29 b(Zo)s(omMap)g(will)0 1493 y(therefore)i(sta)m(y)g(around)f
-(un)m(til)g(the)h(end)f(of)g(the)h(program.)0 1651 y(A)h(simple)h(w)m
-(a)m(y)g(to)g(a)m(v)m(oid)h(this)e(problem)g(is)g(to)h(enclose)h(all)f
-(use)f(of)g(AST)g(functions)g(b)s(et)m(w)m(een)h(in)m(v)m(o)s(cations)0
-1764 y(of)e(astBegin)h(and)d(astEnd,)h(for)h(example:)227
-1994 y Ft(astBegin;)227 2093 y(astShow\()41 b(astZoomMap\()e(2,)j(5.0,)
-g("")h(\))g(\);)227 2193 y(astEnd;)0 2436 y FF(When)30
-b(the)h(expansion)f(of)g(astEnd)g(\(whic)m(h)h(is)f(a)h(macro\))g
-(executes,)h(ev)m(ery)f(Ob)5 b(ject)30 b(p)s(oin)m(ter)h(created)g
-(since)0 2549 y(the)44 b(previous)e(use)h(of)h(astBegin)h(\(also)f(a)g
-(macro\))g(is)g(automatically)i(ann)m(ulled)d(and)g(an)m(y)g(Ob)5
-b(jects)44 b(left)0 2662 y(without)37 b(p)s(oin)m(ters)f(are)i
-(deleted.)60 b(This)36 b(pro)m(vides)h(a)g(simple)g(solution)g(to)h
-(managing)f(Ob)5 b(jects)37 b(and)f(their)0 2775 y(p)s(oin)m(ters,)30
-b(and)e(allo)m(ws)j(y)m(ou)f(to)g(create)g(Ob)5 b(jects)30
-b(v)m(ery)f(freely)h(without)f(needing)g(to)h(k)m(eep)g(detailed)h
-(trac)m(k)f(of)0 2888 y(eac)m(h)d(one.)39 b(Because)27
-b(this)e(is)h(so)f(con)m(v)m(enien)m(t,)k(w)m(e)d(implicitly)g(assume)g
-(that)g(astBegin)h(and)e(astEnd)f(are)i(used)0 3001 y(in)35
-b(most)i(of)e(the)h(examples)h(giv)m(en)f(in)g(this)f(do)s(cumen)m(t.)
-57 b(P)m(oin)m(ter)37 b(managemen)m(t)g(is)f(not)g(generally)h(sho)m
-(wn)0 3114 y(explicitly)32 b(unless)e(it)h(is)f(particularly)h(relev)-5
-b(an)m(t)32 b(to)f(the)f(p)s(oin)m(t)h(b)s(eing)f(illustrated.)0
-3272 y(If)24 b(necessary)-8 b(,)27 b(astBegin)f(and)e(astEnd)g(ma)m(y)h
-(b)s(e)e(nested,)j(lik)m(e)g(blo)s(c)m(ks)f(delimited)g(b)m(y)f(\\)p
-Fu(f)p FF(.)17 b(.)e(.)g Fu(g)p FF(")26 b(in)e(C,)g(to)h(de\014ne)0
-3385 y(a)j(series)f(of)h(AST)e(p)s(oin)m(ter)h(con)m(texts.)42
-b(Eac)m(h)28 b(use)f(of)g(astEnd)g(will)g(then)g(ann)m(ul)g(only)g
-(those)h(Ob)5 b(ject)28 b(p)s(oin)m(ters)0 3498 y(created)j(since)g
-(the)g(matc)m(hing)g(use)f(of)h(astBegin.)0 3784 y Fw(4.11)112
-b(Exp)s(orting,)38 b(Imp)s(orting)f(and)i(Exempting)f(AST)f(P)m(oin)m
-(ters)0 4000 y FF(The)30 b(astExp)s(ort)h(function)g(allo)m(ws)h(y)m
-(ou)g(to)f(exp)s(ort)g(particular)g(p)s(oin)m(ters)g(from)g(one)g(AST)f
-(con)m(text)j(\()p Fu(x)p FF(4.10\))0 4113 y(to)e(the)g(next)f(outer)h
-(one,)g(as)f(follo)m(ws:)227 4343 y Ft(astExport\()40
-b(zoommap)g(\);)0 4587 y FF(This)f(w)m(ould)g(iden)m(tify)h(the)g(p)s
-(oin)m(ter)f(stored)h(in)f(\\zo)s(ommap")i(as)f(b)s(eing)f(required)g
-(after)h(the)g(end)f(of)g(the)0 4700 y(curren)m(t)34
-b(AST)f(con)m(text.)52 b(It)34 b(causes)g(an)m(y)g(p)s(oin)m(ters)g
-(nominated)g(in)f(this)h(w)m(a)m(y)h(to)f(surviv)m(e)g(the)g(next)g
-(use)f(of)0 4813 y(astEnd)c(\(but)g(only)g(one)h(suc)m(h)e(use\))i
-(unscathed,)f(so)g(that)h(they)g(are)f(a)m(v)-5 b(ailable)32
-b(to)e(the)f(next)h(outer)f(con)m(text.)0 4925 y(This)f(facilit)m(y)k
-(is)d(not)g(needed)g(often,)h(but)f(is)g(in)m(v)-5 b(aluable)30
-b(when)e(the)h(purp)s(ose)f(of)h(y)m(our)g(astBegin.)17
-b(.)f(.)f(astEnd)0 5038 y(blo)s(c)m(k)33 b(is)g(basically)h(to)g
-(generate)g(an)f(Ob)5 b(ject)33 b(p)s(oin)m(ter.)48 b(Without)33
-b(this,)h(there)f(is)g(no)g(w)m(a)m(y)g(of)g(getting)i(that)0
-5151 y(p)s(oin)m(ter)30 b(out.)0 5309 y(The)37 b(astImp)s(ort)h
-(routine)g(can)g(b)s(e)f(used)g(in)h(a)g(similar)g(manner)f(to)i(imp)s
-(ort)e(a)h(p)s(oin)m(ter)g(in)m(to)h(the)f(curren)m(t)0
-5422 y(con)m(text,)32 b(so)f(that)g(it)g(is)f(deleted)i(when)d(the)h
-(curren)m(t)h(con)m(text)h(is)e(closed)h(using)f(astEnd.)0
-5580 y(Sometimes,)36 b(y)m(ou)e(ma)m(y)g(also)h(w)m(an)m(t)f(to)h
-(exempt)f(a)g(p)s(oin)m(ter)g(from)f(all)i(the)f(e\013ects)h(of)f(AST)f
-(con)m(texts.)53 b(Y)-8 b(ou)0 5693 y(should)33 b(not)h(need)g(to)g(do)
-g(this)g(often,)h(but)e(it)h(will)h(pro)m(v)m(e)f(essen)m(tial)i(if)e
-(y)m(ou)g(ev)m(er)g(need)g(to)h(write)f(a)g(library)p
-eop end
-%%Page: 42 52
-TeXDict begin 42 51 bop 0 52 a FF(42)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(of)35 b(functions)f(that)h(stores)g
-(AST)f(p)s(oin)m(ters)g(as)h(part)f(of)h(its)g(o)m(wn)g(in)m(ternal)g
-(data.)54 b(Without)35 b(some)g(form)f(of)0 464 y(exemption,)28
-b(the)f(caller)h(of)f(y)m(our)g(routines)f(could)h(cause)g(the)g(p)s
-(oin)m(ters)g(y)m(ou)g(ha)m(v)m(e)g(stored)g(to)h(b)s(e)e(ann)m(ulled|)
-0 577 y(th)m(us)40 b(corrupting)h(y)m(our)g(in)m(ternal)g(data|simply)g
-(b)m(y)g(using)g(astEnd.)71 b(T)-8 b(o)42 b(a)m(v)m(oid)g(this,)i(y)m
-(ou)d(should)f(use)0 690 y(astExempt)31 b(on)f(eac)m(h)i(p)s(oin)m(ter)
-e(that)h(y)m(ou)g(store,)g(for)f(example:)227 926 y Ft(astExempt\()40
-b(zoommap)g(\);)0 1176 y FF(This)27 b(will)g(prev)m(en)m(t)h(the)g(p)s
-(oin)m(ter)f(b)s(eing)g(a\013ected)i(b)m(y)e(an)m(y)h(subsequen)m(t)e
-(use)h(of)h(astEnd.)39 b(Of)27 b(course,)h(it)g(then)0
-1288 y(b)s(ecomes)e(y)m(our)f(resp)s(onsibilit)m(y)h(to)g(ann)m(ul)f
-(this)g(p)s(oin)m(ter)h(\(using)f(astAnn)m(ul\))h(when)e(it)i(is)g(no)f
-(longer)h(required.)0 1577 y Fw(4.12)112 b(AST)38 b(Ob)6
-b(jects)38 b(within)f(Multi-threaded)i(Applications)0
-1795 y FF(When)26 b(the)g(AST)f(library)h(is)g(built)g(from)f(source,)j
-(the)e(build)f(pro)s(cess)h(c)m(hec)m(ks)h(to)g(see)g(if)f(the)g(POSIX)
-f(threads)0 1908 y(library)34 b(\(\\)p Fq(pthreads)p
-FF("\))f(is)h(a)m(v)-5 b(ailable.)54 b(If)33 b(so,)j(appropriate)e
-Fq(pthreads)e FF(calls)j(are)f(inserted)g(in)m(to)h(the)f(AST)0
-2021 y(source)f(co)s(de)f(to)i(ensure)d(that)i(AST)f(is)h(thread-safe,)
-g(and)f(the)h(AST)p Fq(__)p FF(THREADSAFE)e(macro)i(\(de\014ned)0
-2134 y(in)f(the)g(\\ast.h")h(header)f(\014le\))h(is)f(set)h(to)f(\\)p
-Fq(1)p FF(".)47 b(If)31 b(the)i Fq(pthreads)c FF(library)j(cannot)h(b)s
-(e)e(found)g(when)g(AST)g(is)0 2247 y(built,)c(a)f(w)m(orking)g(v)m
-(ersion)g(of)g(the)g(AST)f(library)g(will)h(still)g(b)s(e)f(created,)j
-(but)d(it)i(will)f(not)f(b)s(e)g(thread-safe.)40 b(In)0
-2360 y(this)32 b(case)h(the)f(AST)p Fq(__)p FF(THREADSAFE)f(macro)i
-(will)f(b)s(e)g(set)g(to)h(\\)p Fq(0)p FF(")g(in)e(ast.h.)46
-b(The)32 b(rest)g(of)g(this)g(section)0 2473 y(assumes)e(that)h(the)g
-(thread-safe)f(v)m(ersion)h(of)g(AST)e(is)i(b)s(eing)f(used.)0
-2632 y(Note,)g(some)f(AST)e(functions)h(call)h(externally)g(sp)s
-(eci\014ed)e(functions)h(\()p Fx(e.g.)39 b FF(the)29
-b(source)f(and)f(sink)h(functions)0 2745 y(used)36 b(b)m(y)i(the)f
-(Channel)f(class)i(or)g(the)f(graphics)g(primitiv)m(es)h(functions)f
-(used)f(b)m(y)h(the)h(Plot)g(class\).)62 b(AST)0 2858
-y(do)s(es)36 b(not)h(kno)m(w)g(whether)f(suc)m(h)h(functions)f(are)h
-(thread-safe)h(or)e(not.)61 b(F)-8 b(or)37 b(this)g(reason,)i(in)m(v)m
-(o)s(cations)f(of)0 2971 y(these)g(functions)g(within)f(a)h(m)m
-(ulti-threaded)g(en)m(vironmen)m(t)h(are)f(serialised)g(using)g(a)g(m)m
-(utex)g(in)f(order)h(to)0 3084 y(a)m(v)m(oid)32 b(t)m(w)m(o)g(or)e
-(more)h(threads)e(executing)j(an)e(external)i(function)e(sim)m
-(ultaneously)-8 b(.)0 3243 y(If)37 b(an)g(application)h(uses)f(more)g
-(than)g(one)h(thread,)h(the)e(p)s(ossibilit)m(y)h(arises)f(that)h(an)f
-(Ob)5 b(ject)37 b(created)i(b)m(y)0 3356 y(one)27 b(thread)g(ma)m(y)g
-(b)s(e)f(accessed)i(b)m(y)f(another)g(thread,)g(p)s(oten)m(tially)i
-(sim)m(ultaneously)-8 b(.)41 b(If)26 b(an)m(y)h(of)g(the)g(threads)0
-3469 y(mo)s(di\014es)h(an)m(y)h(asp)s(ect)g(of)g(the)g(Ob)5
-b(ject,)30 b(this)f(could)g(lead)g(to)g(serious)g(problems)f(within)h
-(the)g(other)g(threads.)0 3582 y(F)-8 b(or)36 b(this)f(reason,)i(some)f
-(restrictions)g(are)g(placed)g(on)f(ho)m(w)h(Ob)5 b(jects)35
-b(can)h(b)s(e)e(used)h(in)g(a)h(m)m(ulti-threaded)0 3695
-y(application.)0 3980 y FD(4.12.1)106 b(Lo)s(c)m(king)36
-b(AST)e(Ob)6 b(jects)35 b(for)g(Exclusiv)m(e)h(Use)0
-4198 y FF(The)c(basic)h(restriction)g(is)g(that)g(a)g(thread)f(can)h
-(only)g(access)h(Ob)5 b(jects)32 b(that)h(it)g(has)g(previously)f(lo)s
-(c)m(k)m(ed)i(for)0 4311 y(its)29 b(o)m(wn)f(exclusiv)m(e)i(use.)39
-b(If)28 b(a)h(thread)f(attempts)h(to)g(access)h(an)m(y)f(Ob)5
-b(ject)28 b(that)h(it)g(has)f(not)g(lo)s(c)m(k)m(ed,)j(an)d(error)0
-4424 y(is)i(rep)s(orted.)0 4584 y(The)24 b(astAnn)m(ul)g(function)f(is)
-h(the)g(one)h(exception)g(to)g(this)f(restriction.)39
-b(P)m(oin)m(ters)25 b(for)f(Ob)5 b(jects)24 b(not)g(curren)m(tly)0
-4697 y(lo)s(c)m(k)m(ed)41 b(b)m(y)e(the)h(calling)h(thread)e(can)h(b)s
-(e)e(ann)m(ulled)i(succesfully)f(using)g(astAnn)m(ul.)68
-b(This)39 b(means)g(that)h(a)0 4809 y(thread)26 b(that)i(has)e
-(\014nished)f(with)i(an)f(Ob)5 b(ject)27 b(p)s(oin)m(ter)g(can)g(unlo)s
-(c)m(k)f(the)h(Ob)5 b(ject)27 b(b)m(y)g(passing)f(the)h(p)s(oin)m(ter)g
-(to)0 4922 y(astUnlo)s(c)m(k)e(\(so)g(that)g(other)f(threads)g(can)g
-(use)g(the)g(Ob)5 b(ject)24 b(via)h(their)f(o)m(wn)g(cloned)g(p)s(oin)m
-(ters\),)i(and)d(can)i(then)0 5035 y(ann)m(ul)30 b(the)h(p)s(oin)m(ter)
-f(using)g(astAnn)m(ul.)41 b(Note,)32 b(ho)m(w)m(ev)m(er,)g(that)f(an)f
-(error)g(will)h(b)s(e)f(rep)s(orted)g(b)m(y)g(astAnn)m(ul)g(if)0
-5148 y(the)h(supplied)e(p)s(oin)m(ter)h(has)g(b)s(een)g(lo)s(c)m(k)m
-(ed)i(b)m(y)e(another)g(thread)h(using)e(astLo)s(c)m(k.)0
-5308 y(When)i(an)g(Ob)5 b(ject)31 b(is)g(created,)h(it)g(is)f
-(initially)h(lo)s(c)m(k)m(ed)h(b)m(y)e(the)g(calling)h(thread.)43
-b(Therefore)31 b(a)g(thread)g(do)s(es)0 5421 y(not)g(need)f(to)h(lo)s
-(c)m(k)g(an)g(Ob)5 b(ject)30 b(explicitly)i(if)e(it)h(w)m(as)g(created)
-g(in)f(the)h(same)g(thread.)0 5580 y(If)f(the)g(Ob)5
-b(ject)31 b(p)s(oin)m(ter)f(is)g(then)g(passed)g(to)h(another)f
-(thread,)h(the)f(\014rst)f(thread)h(m)m(ust)h(unlo)s(c)m(k)f(the)g(Ob)5
-b(ject)0 5693 y(using)30 b(astUnlo)s(c)m(k)i(and)d(the)i(second)f
-(thread)h(m)m(ust)f(then)g(lo)s(c)m(k)h(it)g(using)f(astLo)s(c)m(k.)p
-eop end
-%%Page: 43 53
-TeXDict begin 43 52 bop 0 52 a Fy(4.13)93 b(Cop)m(ying)30
-b(Ob)5 b(jects)2772 b FF(43)0 351 y(If)32 b(a)h(thread)f(attempts)i(to)
-f(lo)s(c)m(k)h(an)e(Ob)5 b(ject)33 b(that)g(is)f(already)h(lo)s(c)m(k)m
-(ed)h(b)m(y)f(another)f(thread,)i(it)f(can)f(c)m(ho)s(ose)0
-464 y(to)f(rep)s(ort)f(an)g(error)g(immediately)i(or)e(to)h(w)m(ait)h
-(un)m(til)e(the)h(Ob)5 b(ject)30 b(is)h(a)m(v)-5 b(ailable.)0
-649 y(The)32 b(astThread)g(function)g(can)h(b)s(e)f(used)g(to)h
-(determine)g(whether)f(an)g(Ob)5 b(ject)33 b(is)f(lo)s(c)m(k)m(ed)i(b)m
-(y)e(the)h(running)0 761 y(thread,)d(lo)s(c)m(k)m(ed)i(b)m(y)e(another)
-h(thread,)f(or)h(unlo)s(c)m(k)m(ed.)0 946 y(If)c(t)m(w)m(o)h(or)g(more)
-f(threads)g(need)g(sim)m(ultaneous)h(access)g(to)g(an)f(Ob)5
-b(ject,)29 b(a)e(deep)g(cop)m(y)h(of)g(the)f(Ob)5 b(ject)27
-b(should)0 1059 y(b)s(e)37 b(tak)m(en)h(for)f(eac)m(h)h(thread,)h
-(using)e(astCop)m(y)-8 b(,)41 b(and)36 b(then)h(the)h(copies)g(should)e
-(b)s(e)h(unlo)s(c)m(k)m(ed)g(and)g(passed)0 1172 y(to)f(the)f(othe)h
-(threads,)g(whic)m(h)f(should)g(then)g(lo)s(c)m(k)h(them.)55
-b(Note,)38 b(if)d(a)h(thread)f(mo)s(di\014es)f(the)h(Ob)5
-b(ject,)37 b(the)0 1285 y(mo)s(di\014cation)26 b(will)h(ha)m(v)m(e)g
-(no)f(e\013ect)i(on)e(the)g(other)h(threads,)g(b)s(ecause)f(the)g(Ob)5
-b(ject)26 b(copies)h(are)g(indep)s(enden)m(t)0 1397 y(of)k(eac)m(h)g
-(other.)0 1760 y FD(4.12.2)106 b(AST)34 b(P)m(oin)m(ter)i(Con)m(texts)0
-2013 y FF(Eac)m(h)22 b(thread)g(main)m(tains)g(its)h(o)m(wn)e(set)i(of)
-f(nested)f(AST)g(con)m(texts,)26 b(so)c(when)f(astEnd)g(is)h(called,)j
-(only)c(Ob)5 b(jects)0 2126 y(that)31 b(are)g(lo)s(c)m(k)m(ed)h(b)m(y)e
-(the)g(curren)m(t)h(thread)f(will)g(b)s(e)g(ann)m(ulled.)0
-2311 y(If)i(an)f(Ob)5 b(ject)33 b(is)f(unlo)s(c)m(k)m(ed)g(b)m(y)g(a)g
-(thread)g(using)g(astUnlo)s(c)m(k,)i(it)e(is)g(exempted)g(from)g(con)m
-(text)i(handling)d(so)0 2423 y(that)i(subsequen)m(t)f(in)m(v)m(o)s
-(cations)j(of)e(astEnd)f(will)h(not)g(cause)h(it)f(to)h(b)s(e)e(ann)m
-(ulled)g(\(this)h(is)g(similar)g(to)h(using)0 2536 y(astExempt)i(on)g
-(the)g(Ob)5 b(ject\).)57 b(When)36 b(the)g(Ob)5 b(ject)36
-b(is)f(subsequen)m(tly)h(lo)s(c)m(k)m(ed)h(b)m(y)e(another)h(thread)g
-(using)0 2649 y(astLo)s(c)m(k,)c(it)f(will)g(b)s(e)e(imp)s(orted)h(in)m
-(to)h(the)g(con)m(text)h(that)f(w)m(as)g(activ)m(e)h(when)e(astLo)s(c)m
-(k)h(w)m(as)g(called.)0 3015 y Fw(4.13)112 b(Cop)m(ying)38
-b(Ob)6 b(jects)0 3268 y FF(The)22 b(AST)g(library)g(mak)m(es)i
-(extensiv)m(e)g(use)f(of)f(p)s(oin)m(ters,)j(not)e(only)g(for)f
-(accessing)i(Ob)5 b(jects)23 b(directly)-8 b(,)26 b(but)c(also)0
-3381 y(as)31 b(a)g(means)g(of)g(storing)h(Ob)5 b(jects)30
-b(inside)h(other)g(Ob)5 b(jects)31 b(\(a)h(n)m(um)m(b)s(er)d(of)i
-(classes)h(of)f(Ob)5 b(ject)31 b(are)h(designed)0 3494
-y(to)j(hold)e(collections)k(of)d(other)g(Ob)5 b(jects\).)52
-b(Rather)34 b(than)g(cop)m(y)h(an)f(Ob)5 b(ject)34 b(in)g(its)g(en)m
-(tiret)m(y)-8 b(,)37 b(a)e(p)s(oin)m(ter)f(to)0 3607
-y(the)d(in)m(terior)g(Ob)5 b(ject)30 b(is)h(simply)f(stored)g(in)g(the)
-h(enclosing)g(Ob)5 b(ject.)0 3791 y(This)30 b(means)g(that)h(Ob)5
-b(jects)30 b(ma)m(y)h(frequen)m(tly)f(not)h(b)s(e)f(completely)i(indep)
-s(enden)m(t)d(of)h(eac)m(h)i(other)e(b)s(ecause,)0 3904
-y(for)d(instance,)i(they)e(b)s(oth)g(con)m(tain)i(p)s(oin)m(ters)e(to)h
-(the)f(same)h(sub-Ob)5 b(ject.)39 b(In)27 b(this)g(situation,)i(c)m
-(hanging)f(one)0 4017 y(Ob)5 b(ject)31 b(\(sa)m(y)g(assigning)g(an)f
-(attribute)h(v)-5 b(alue\))31 b(ma)m(y)g(a\013ect)h(the)f(other)f(one)h
-Fx(via)g FF(the)f(common)h(Ob)5 b(ject.)0 4202 y(It)32
-b(is)f(di\016cult)g(to)i(describ)s(e)e(all)h(cases)g(where)f(this)h(ma)
-m(y)g(happ)s(en,)e(so)i(y)m(ou)f(should)g(alw)m(a)m(ys)i(b)s(e)e(alert)
-h(to)g(the)0 4315 y(p)s(ossibilit)m(y)-8 b(.)40 b(F)-8
-b(ortunately)g(,)27 b(there)e(is)f(a)h(simple)f(solution.)39
-b(If)24 b(y)m(ou)g(require)g(t)m(w)m(o)i(Ob)5 b(jects)24
-b(to)h(b)s(e)e(indep)s(enden)m(t,)0 4427 y(then)30 b(simply)g(use)g
-(astCop)m(y)h(to)g(mak)m(e)h(a)e(cop)m(y)h(of)g(one,)g
-Fx(e.g:)227 4741 y Ft(AstZoomMap)40 b(*zoommap1,)f(*zoommap2;)227
-4941 y(...)227 5140 y(zoommap2)i(=)i(astCopy\()d(zoommap1)g(\);)0
-5467 y FF(This)30 b(pro)s(cess)h(will)h(create)h(a)f(true)f(cop)m(y)h
-(of)f(an)m(y)h(Ob)5 b(ject)31 b(and)g(return)f(a)i(p)s(oin)m(ter)f(to)h
-(the)g(cop)m(y)-8 b(.)44 b(This)31 b(cop)m(y)0 5580 y(will)25
-b(not)g(con)m(tain)h(an)m(y)f(p)s(oin)m(ters)f(to)h(an)m(y)g(comp)s
-(onen)m(t)g(of)g(the)g(original)h(Ob)5 b(ject)24 b(\(ev)m(erything)i
-(is)f(duplicated\),)0 5693 y(so)g(y)m(ou)g(can)h(then)e(mo)s(dify)g(it)
-i(safely)-8 b(,)27 b(without)e(fear)g(of)g(a\013ecting)i(either)e(the)h
-(original)g(or)f(an)m(y)g(other)g(Ob)5 b(ject.)p eop
-end
-%%Page: 44 54
-TeXDict begin 44 53 bop 0 52 a FF(44)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y Fw(4.14)112 b(C)38 b(P)m(oin)m(ter)e(T)
-m(yp)s(es)0 580 y FF(A)m(t)h(this)e(p)s(oin)m(t)h(it)g(is)g(necessary)g
-(to)h(confess)f(to)g(a)g(small)h(amoun)m(t)f(of)g(deception.)57
-b(So)36 b(far,)h(w)m(e)f(ha)m(v)m(e)h(b)s(een)0 693 y(passing)32
-b(Ob)5 b(ject)33 b(p)s(oin)m(ters)f(to)h(AST)f(functions)g(in)g(order)g
-(to)h(p)s(erform)e(op)s(erations)h(on)h(those)f(Ob)5
-b(jects.)47 b(In)0 806 y(fact,)37 b(ho)m(w)m(ev)m(er,)h(what)d(w)m(e)g
-(w)m(ere)h(using)e(w)m(ere)i(not)f(true)g(C)f(functions)h(at)g(all,)j
-(but)c(merely)h(macros)h(whic)m(h)0 919 y(in)m(v)m(ok)m(e)28
-b(a)f(related)g(set)g(of)f(hidden)f(functions)g(with)h(essen)m(tially)i
-(the)f(same)f(argumen)m(ts.)40 b(In)25 b(practical)j(terms,)0
-1032 y(this)h(mak)m(es)h(v)m(ery)f(little)i(di\013erence)e(to)h(ho)m(w)
-f(y)m(ou)g(use)g(the)g(functions,)g(as)h(w)m(e)f(will)h(con)m(tin)m(ue)
-g(to)g(call)g(them.)3740 999 y Fv(9)0 1200 y FF(The)k(reason)i(for)e
-(this)h(deception)h(has)f(to)g(do)g(with)g(the)g(rules)g(for)f(data)i
-(t)m(yping)f(in)g(C.)g(Recall)i(that)e(most)0 1313 y(AST)26
-b(functions)h(can)g(b)s(e)g(used)f(to)i(pro)s(cess)e(Ob)5
-b(jects)27 b(from)g(a)g(range)h(of)f(di\013eren)m(t)g(classes)i(\()p
-Fu(x)p FF(4.3\).)41 b(In)27 b(C,)g(this)0 1426 y(means)e(passing)g
-(di\013eren)m(t)g(p)s(oin)m(ter)g(t)m(yp)s(es)g(to)h(the)f(same)g
-(function)g(and)f(most)i(C)e(compilers)i(will)f(not)g(p)s(ermit)0
-1539 y(this)f(\(at)h(least,)h(not)e(without)g(grum)m(bling\))g(b)s
-(ecause)g(it)g(usually)g(indicates)h(a)f(programming)g(error.)38
-b(In)23 b(AST,)0 1651 y(ho)m(w)m(ev)m(er,)29 b(it)f(is)g(p)s(erfectly)f
-(safe)h(if)f(done)g(prop)s(erly)-8 b(.)39 b(Some)27 b(w)m(a)m(y)h(is)f
-(therefore)h(needed)f(of)g(circum)m(v)m(en)m(ting)i(the)0
-1764 y(normal)h(compiler)h(c)m(hec)m(king.)0 1932 y(The)e(normal)g(w)m
-(a)m(y)h(of)g(doing)f(this)g(in)g(C)g(is)g(with)g(a)h(cast.)41
-b(This)29 b(approac)m(h)g(quic)m(kly)h(b)s(ecomes)g(cum)m(b)s(ersome,)0
-2045 y(ho)m(w)m(ev)m(er,)35 b(so)f(w)m(e)f(ha)m(v)m(e)i(adopted)e(the)g
-(strategy)i(of)e(wrapping)f(eac)m(h)j(function)d(in)h(a)h(macro)f(whic)
-m(h)g(applies)0 2158 y(the)i(appropriate)g(cast)h(for)e(y)m(ou.)54
-b(This)34 b(means)h(that)g(y)m(ou)g(can)h(pass)e(p)s(oin)m(ters)h(of)f
-(an)m(y)i(t)m(yp)s(e)f(to)g(an)m(y)g(AST)0 2271 y(function.)40
-b(F)-8 b(or)32 b(example,)f(in)f(passing)g(a)h(Zo)s(omMap)f(p)s(oin)m
-(ter)h(to)g(astSho)m(w:)227 2535 y Ft(AstZoomMap)40 b(*zoommap;)227
-2735 y(...)227 2934 y(zoommap)h(=)i(astZoomMap\()c(2,)k(5.0,)f("")h
-(\);)227 3034 y(astShow\()e(zoommap)f(\);)0 3311 y FF(w)m(e)g(are)h
-(exploiting)g(this)f(mec)m(hanism)g(to)h(a)m(v)m(oid)g(a)f(compiler)h
-(w)m(arning,)h(b)s(ecause)e(the)g(notional)h(t)m(yp)s(e)f(of)0
-3424 y(astSho)m(w's)31 b(parameter)g(is)f(AstOb)5 b(ject)p
-Fu(\003)31 b FF(\(not)g(AstZo)s(omMap)p Fu(\003)p FF(\).)0
-3592 y(W)-8 b(e)30 b(m)m(ust)f(still)g(guard)g(against)h(programming)e
-(errors,)h(ho)m(w)m(ev)m(er,)i(so)e(ev)m(ery)g(p)s(oin)m(ter's)g(t)m
-(yp)s(e)g(is)g(c)m(hec)m(k)m(ed)i(b)m(y)0 3705 y(the)36
-b(enclosing)g(macro)g(immediately)h(b)s(efore)e(an)m(y)h(AST)f
-(function)g(executes.)57 b(This)35 b(allo)m(ws)i(p)s(oin)m(ter)e(mis-)0
-3818 y(matc)m(hes)c(\(in)g(the)f(more)h(lib)s(eral)f(AST)g(sense|)p
-Fx(i.e.)f FF(taking)i(accoun)m(t)h(of)f(the)f(class)h(hierarc)m(h)m(y)
--8 b(,)32 b(rather)e(than)0 3931 y(the)j(stricter)h(C)e(sense\))h(to)h
-(b)s(e)e(detected)i(at)g(run-time)e(and)g(a)i(suitable)f(error)g
-(message)h(will)f(b)s(e)f(rep)s(orted.)0 4044 y(This)e(message)h
-(should)e(also)j(iden)m(tify)f(the)f(line)h(where)f(the)g(error)g(o)s
-(ccurs.)0 4212 y(A)38 b(similar)f(strategy)i(is)f(used)e(when)h(p)s
-(oin)m(ters)g(are)h(returned)e(b)m(y)i(AST)e(functions)h(\()p
-Fx(i.e.)g FF(as)h(the)g(function)0 4325 y(result\).)i(In)28
-b(this)g(case)h(the)g(p)s(oin)m(ter)f(is)g(cast)h(to)g(v)m(oid)p
-Fu(\003)p FF(,)h(although)f(w)m(e)g(retain)f(the)h(notional)g(p)s(oin)m
-(ter)f(t)m(yp)s(e)h(in)0 4438 y(the)k(function's)g(do)s(cumen)m(tation)
-h(\()p Fx(e.g.)f FF(App)s(endix)f(B\).)49 b(This)33 b(allo)m(ws)h(y)m
-(ou)g(to)g(assign)f(function)g(results)g(to)0 4550 y(p)s(oin)m(ter)f(v)
--5 b(ariables)33 b(without)f(using)f(an)h(explicit)i(cast.)47
-b(F)-8 b(or)32 b(example,)i(the)e(astRead)h(function)f(returns)f(an)0
-4663 y(Ob)5 b(ject)31 b(p)s(oin)m(ter,)f(but)g(migh)m(t)h(b)s(e)f(used)
-f(to)i(read)g(\(sa)m(y\))g(a)g(Zo)s(omMap)f(as)h(follo)m(ws:)227
-4928 y Ft(AstChannel)40 b(*channel;)227 5027 y(AstZoomMap)g(*zoommap;)
-227 5227 y(...)227 5426 y(zoommap)h(=)i(astRead\()d(channel)h(\);)p
-0 5516 1512 4 v 104 5570 a Fs(9)138 5602 y Fr(Ab)r(out)26
-b(the)f(only)i(di\013erence)f(is)h(that)e(y)n(ou)h(cannot)g(store)h(a)g
-(p)r(oin)n(ter)f(to)g(an)g(AST)g(\\function")h(in)g(a)f(v)l(ariable)h
-(and)f(use)g(the)0 5693 y(v)l(ariable's)h(v)l(alue)e(to)h(in)n(v)n(ok)n
-(e)f(that)g(function)h(again)h(later.)p eop end
-%%Page: 45 55
-TeXDict begin 45 54 bop 0 52 a Fy(4.15)93 b(Error)29
-b(Detection)2812 b FF(45)0 351 y(Strictly)-8 b(,)44 b(there)c(is)f(a)i
-(C)e(p)s(oin)m(ter)h(mis-matc)m(h)h(here,)h(but)d(it)i(is)f(ignored)f
-(b)s(ecause)h(the)g(op)s(eration)h(mak)m(es)0 464 y(p)s(erfect)30
-b(sense)h(to)g(AST.)0 625 y FD(There)47 b(is)h(an)f(imp)s(ortan)m(t)h
-(exception)g(to)f(this,)k(ho)m(w)m(ev)m(er,)g(in)c(that)g(constructor)i
-(functions)0 738 y(alw)m(a)m(ys)30 b(return)g(strongly-t)m(yp)s(ed)h(p)
-s(oin)m(ters.)39 b FF(What)27 b(w)m(e)g(mean)g(b)m(y)f(this)g(is)h
-(that)g(the)f(returned)f(p)s(oin)m(ter)0 850 y(is)38
-b(nev)m(er)h(implicitly)g(cast)g(to)g(v)m(oid)p Fu(\003)p
-FF(.)65 b(Y)-8 b(ou)39 b(m)m(ust)f(therefore)h(matc)m(h)g(p)s(oin)m
-(ter)f(t)m(yp)s(es)g(when)f(y)m(ou)i(initially)0 963
-y(create)32 b(an)e(Ob)5 b(ject)31 b(using)f(its)g(constructor,)h(suc)m
-(h)f(as)h(in)f(the)h(follo)m(wing:)227 1204 y Ft(AstZoomMap)40
-b(*zoommap;)227 1403 y(...)227 1602 y(zoommap)h(=)i(astZoomMap\()c(2,)k
-(5.0,)f("")h(\);)0 1855 y FF(If)34 b(the)g(v)-5 b(ariable)35
-b(receiving)g(the)g(p)s(oin)m(ter)f(is)g(of)g(a)h(di\013eren)m(t)f(t)m
-(yp)s(e,)i(an)e(appropriate)g(cast)h(should)e(b)s(e)h(used,)0
-1968 y(as)d(in:)227 2209 y Ft(AstMapping)40 b(*mapping;)227
-2408 y(...)227 2607 y(mapping)h(=)i(\(AstMapping)c(*\))k(astZoomMap\()c
-(2,)k(5.0,)f("")g(\);)0 2860 y FF(This)25 b(is)h(an)g(encouragemen)m(t)
-h(for)f(y)m(ou)g(to)g(declare)h(y)m(our)f(p)s(oin)m(ter)g(t)m(yp)s(es)g
-(consisten)m(tly)-8 b(,)29 b(since)d(this)f(is)h(of)g(great)0
-2973 y(b)s(ene\014t)k(to)h(an)m(y)m(one)g(trying)g(to)g(understand)d(y)
-m(our)j(soft)m(w)m(are.)0 3134 y(Finally)-8 b(,)36 b(w)m(e)e(should)f
-(also)i(mak)m(e)f(one)g(more)g(small)g(confession|AST)g(p)s(oin)m(ters)
-f(are)h(not)g(really)h(p)s(oin)m(ters)0 3247 y(at)28
-b(all.)41 b(Although)27 b(they)g(b)s(eha)m(v)m(e)h(lik)m(e)h(p)s(oin)m
-(ters,)f(the)f(actual)i(\\v)-5 b(alues")28 b(stored)f(are)h(not)f(the)h
-(addresses)e(of)i(C)0 3360 y(data)j(structures.)40 b(This)30
-b(means)g(that)h(y)m(ou)g(cannot)g(de-reference)g(an)g(AST)e(p)s(oin)m
-(ter)i(to)g(examine)g(the)g(data)0 3473 y(within)i(\(although)i(y)m(ou)
-g(can)f(use)g(astSho)m(w)g(instead|)p Fu(x)p FF(4.4\).)54
-b(This)33 b(is)h(necessary)g(so)h(that)f(AST)g(p)s(oin)m(ters)0
-3585 y(can)d(b)s(e)e(made)i(unique)e(ev)m(en)i(although)g(sev)m(eral)h
-(of)e(them)h(migh)m(t)g(reference)g(the)f(same)h(Ob)5
-b(ject.)0 3875 y Fw(4.15)112 b(Error)37 b(Detection)0
-4095 y FF(If)31 b(an)g(error)g(o)s(ccurs)g(in)g(an)g(AST)g(function)g
-(\(for)g(example,)h(if)g(y)m(ou)f(supply)f(an)h(in)m(v)-5
-b(alid)32 b(argumen)m(t,)g(suc)m(h)f(as)0 4208 y(a)h(p)s(oin)m(ter)f
-(to)i(the)e(wrong)g(class)i(of)e(Ob)5 b(ject\),)33 b(an)e(error)g
-(message)i(will)f(b)s(e)f(written)g(to)h(the)g(standard)f(error)0
-4320 y(stream)g(and)f(the)g(function)g(will)h(immediately)h(return.)0
-4481 y(T)-8 b(o)35 b(indicate)g(than)f(an)f(error)h(has)g(o)s(ccurred,)
-h(an)f(AST)f Fx(err)-5 b(or)37 b(status)f FF(v)-5 b(alue)34
-b(is)g(used.)51 b(This)34 b(in)m(teger)h(v)-5 b(alue)0
-4594 y(is)34 b(stored)g(in)m(ternally)h(b)m(y)f(AST)f(and)g(is)h
-(initially)h(clear)g(\()p Fx(i.e.)f FF(set)g(to)h(zero)2584
-4561 y Fv(10)2693 4594 y FF(to)g(indicate)g(no)f(error\).)51
-b(If)34 b(an)0 4707 y(error)f(o)s(ccurs,)h(it)f(b)s(ecomes)h(set)f(to)h
-(a)g(di\013eren)m(t)f Fx(err)-5 b(or)37 b(value)p FF(,)d(whic)m(h)f
-(allo)m(ws)h(y)m(ou)g(to)g(detect)g(the)g(error,)f(as)0
-4820 y(follo)m(ws:)227 5060 y Ft(zoommap)41 b(=)i(astZoomMap\()c(2,)k
-(5.0,)f("Title=My)e(ZoomMap")g(\);)227 5159 y(if)j(\()g(!astOK)e(\))i
-({)358 5259 y(<an)f(error)g(has)g(occurred>)227 5359
-y(})p 0 5425 1512 4 v 73 5479 a Fs(10)138 5510 y Fr(W)-6
-b(e)26 b(will)i(assume)f(throughout)f(that)g(the)g(\\OK")g(v)l(alue)g
-(is)h(zero,)h(as)f(it)f(curren)n(tly)g(is.)37 b(Ho)n(w)n(ev)n(er,)26
-b(a)h(di\013eren)n(t)f(v)l(alue)g(could,)0 5602 y(in)k(principle,)i(b)r
-(e)e(used)f(if)i(the)f(en)n(vironmen)n(t)f(in)h(whic)n(h)g(AST)g(is)g
-(running)g(requires)g(it.)48 b(This)31 b(is)f(wh)n(y)g(a)g(simple)h(in)
-n(terface)g(is)0 5693 y(pro)n(vided)25 b(to)h(isolate)h(y)n(ou)e(from)i
-(the)e(actual)h(v)l(alue)g(of)g(the)g(error)g(status.)p
-eop end
-%%Page: 46 56
-TeXDict begin 46 55 bop 0 52 a FF(46)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)0 351 y FF(The)j(macro)h(astOK)g(is)g(used)f
-(to)h(test)h(whether)e(the)g(AST)g(error)h(status)g(is)f(still)i(OK.)e
-(In)g(this)h(example)g(it)0 464 y(w)m(ould)e(not)h(b)s(e,)f(b)s(ecause)
-h(w)m(e)g(ha)m(v)m(e)g(attempted)h(to)f(set)g(a)g(v)-5
-b(alue)33 b(for)f(the)h(Title)g(attribute)g(of)g(a)f(Zo)s(omMap)0
-577 y(and)c(a)h(Zo)s(omMap)f(do)s(es)g(not)h(ha)m(v)m(e)h(suc)m(h)e(an)
-g(attribute.)41 b(The)28 b(actual)i(v)-5 b(alue)28 b(of)h(the)g(AST)e
-(error)h(status)h(can)0 690 y(b)s(e)h(obtained)g(using)g(the)h
-(astStatus)g(macro,)g(as)g(follo)m(ws:)227 948 y Ft(int)43
-b(status;)227 1148 y(...)227 1446 y(status)e(=)j(astStatus;)0
-1718 y FF(A)36 b(consequence)g(of)g(the)g(AST)f(error)g(status)h(b)s
-(eing)f(set)i(is)e(that)i(almost)f(all)h(AST)e(functions)g(will)h
-(subse-)0 1831 y(quen)m(tly)e(cease)h(to)f(function)g(and)f(will)h
-(instead)g(simply)f(return)f(without)i(action.)52 b(This)32
-b(means)i(that)g(y)m(ou)0 1944 y(do)f(not)h(need)f(to)h(use)f(astOK)h
-(to)g(c)m(hec)m(k)h(for)e(errors)g(v)m(ery)h(frequen)m(tly)-8
-b(.)50 b(Instead,)34 b(y)m(ou)g(can)g(usually)f(simply)0
-2057 y(in)m(v)m(ok)m(e)f(a)f(succession)g(of)g(AST)f(functions.)40
-b(If)31 b(an)f(error)g(o)s(ccurs)g(in)g(an)m(y)h(of)g(them,)g(the)f
-(follo)m(wing)i(ones)f(will)0 2170 y(do)f(nothing)h(and)e(y)m(ou)i(can)
-g(c)m(hec)m(k)h(for)e(the)g(error)g(at)h(the)g(end,)f(for)g(example:)
-227 2428 y Ft(astFunctionA\()38 b(...)43 b(\);)227 2527
-y(astFunctionB\()38 b(...)43 b(\);)227 2627 y(astFunctionC\()38
-b(...)43 b(\);)227 2727 y(if)g(\()g(!astOK)e(\))i({)358
-2826 y(<an)f(error)g(has)g(occurred>)227 2926 y(})0 3198
-y FF(There)c(are,)j(ho)m(w)m(ev)m(er,)h(a)c(few)g(functions)g(whic)m(h)
-g(do)g(not)h(adhere)f(to)h(this)f(general)h(rule)f(and)g(whic)m(h)g
-(will)0 3310 y(attempt)46 b(to)f(execute)h(if)e(the)h(AST)e(error)h
-(status)h(is)g(set.)83 b(These)44 b(functions,)k(suc)m(h)c(as)h(astAnn)
-m(ul,)j(are)0 3423 y(concerned)30 b(with)h(cleaning)g(up)e(and)h(reco)m
-(v)m(ering)j(resources.)40 b(F)-8 b(or)31 b(example,)h(in)e(the)g
-(follo)m(wing:)227 3682 y Ft(zoommap)41 b(=)i(astZoomMap\()c(2,)k(5.0,)
-f("")h(\);)227 3881 y(astFunctionX\()38 b(...)43 b(\);)227
-3980 y(astFunctionY\()38 b(...)43 b(\);)227 4080 y(astFunctionZ\()38
-b(...)43 b(\);)227 4279 y(zoommap)e(=)i(astAnnul\()d(zoommap)h(\);)227
-4379 y(if)i(\()g(!astOK)e(\))i({)358 4479 y(<an)f(error)g(has)g
-(occurred>)227 4578 y(})0 4850 y FF(astAnn)m(ul)30 b(will)h(execute)g
-(normally)g(in)f(order)f(to)i(reco)m(v)m(er)h(the)e(resources)h(asso)s
-(ciated)g(with)f(the)g(Zo)s(omMap)0 4963 y(that)37 b(w)m(as)f(created)h
-(earlier,)h(regardless)f(of)f(whether)f(an)h(error)g(has)f(o)s(ccurred)
-h(in)f(an)m(y)h(of)h(the)f(in)m(termedi-)0 5076 y(ate)42
-b(functions.)71 b(F)-8 b(unctions)42 b(whic)m(h)e(b)s(eha)m(v)m(e)i(in)
-e(this)h(w)m(a)m(y)h(are)f(noted)g(in)f(the)h(relev)-5
-b(an)m(t)42 b(descriptions)f(in)0 5188 y(App)s(endix)29
-b(B.)0 5354 y(If)39 b(a)g(serious)g(error)g(o)s(ccurs,)i(y)m(ou)f(will)
-f(probably)f(w)m(an)m(t)i(to)g(ab)s(ort)f(y)m(our)g(program,)j(but)c
-(sometimes)i(y)m(ou)0 5467 y(ma)m(y)31 b(w)m(an)m(t)g(to)g(reco)m(v)m
-(er)i(and)c(carry)i(on.)41 b(Because)31 b(v)m(ery)g(few)f(AST)g
-(functions)g(will)h(execute)g(once)h(the)e(AST)0 5580
-y(error)f(status)h(has)f(b)s(een)f(set,)i(y)m(ou)g(m)m(ust)f(\014rst)g
-(clear)h(this)f(status)h(b)m(y)f(using)g(the)h(astClearStatus)g(macro,)
-g(as)0 5693 y(follo)m(ws:)p eop end
-%%Page: 47 57
-TeXDict begin 47 56 bop 0 52 a Fy(4.16)93 b(Sharing)29
-b(the)i(Error)e(Status)2449 b FF(47)227 351 y Ft(astClearStatus;)0
-614 y FF(This)28 b(will)h(restore)h(the)f(AST)f(error)h(status)g(to)g
-(its)h(OK)e(v)-5 b(alue,)30 b(so)f(that)g(AST)g(functions)f(execute)i
-(normally)0 727 y(again.)0 889 y(Occasionally)-8 b(,)29
-b(y)m(ou)c(ma)m(y)g(also)h(need)f(to)h(set)f(the)g(AST)g(error)f
-(status)h(to)h(an)f(explicit)h(error)f(v)-5 b(alue)25
-b(\(see)h Fu(x)p FF(15.14)0 1002 y(for)j(an)f(example\).)41
-b(This)28 b(is)h(done)g(using)f(astSetStatus)i(and)e(can)h(b)s(e)f
-(used)g(to)i(comm)m(unicate)g(to)g(AST)e(that)0 1115
-y(an)i(error)g(has)g(o)s(ccurred)g(in)g(some)h(other)g(item)g(of)f
-(soft)m(w)m(are,)i(for)e(example:)227 1364 y Ft(int)43
-b(new_status;)227 1563 y(...)227 1763 y(astSetStatus\()38
-b(new_status)i(\);)0 2025 y FF(The)27 b(e\013ect)j(is)d(that)i(most)f
-(AST)f(routines)h(will)g(subsequen)m(tly)f(return)g(without)g(action,)j
-(just)d(as)h(if)g(an)g(error)0 2138 y(had)i(o)s(ccurred)f(within)h(the)
-h(AST)f(library)f(itself.)0 2431 y Fw(4.16)112 b(Sharing)39
-b(the)e(Error)g(Status)0 2653 y FF(In)30 b(some)g(soft)m(w)m(are,)j(it)
-d(is)h(usual)f(to)h(main)m(tain)g(a)g(single)g(in)m(teger)h(error)e
-(status)h(v)-5 b(ariable)31 b(whic)m(h)f(is)g(accessed)0
-2765 y(b)m(y)d(eac)m(h)i(function)e(as)g(it)h(executes.)41
-b(If)27 b(an)g(error)g(o)s(ccurs,)h(this)f(status)g(v)-5
-b(ariable)29 b(is)e(set)h(and)e(other)i(functions)0 2878
-y(can)j(detect)g(this)g(and)e(tak)m(e)j(appropriate)f(action.)0
-3041 y(If)h(y)m(ou)h(use)f(AST)g(in)g(suc)m(h)g(a)h(situation,)h(it)f
-(can)f(b)s(e)g(a)m(wkw)m(ard)h(to)g(ha)m(v)m(e)h(a)f(separate)g(in)m
-(ternal)g(error)f(status)0 3154 y(used)23 b(b)m(y)g(AST)f(functions)h
-(alone.)40 b(T)-8 b(o)23 b(remedy)g(this,)i(AST)e(is)g(capable)h(of)g
-(sharing)f(the)g(error)g(status)h(v)-5 b(ariable)0 3267
-y(used)26 b(b)m(y)h(an)m(y)g(other)g(soft)m(w)m(are,)j(so)d(long)g(as)g
-(they)h(use)e(the)h(same)h(con)m(v)m(en)m(tions)g(\()p
-Fx(i.e.)f FF(a)g(C)g(in)m(t)g(with)g(the)g(same)0 3380
-y(\\OK")40 b(v)-5 b(alue\).)69 b(T)-8 b(o)40 b(enable)g(this)f(facilit)
-m(y)-8 b(,)45 b(y)m(ou)40 b(should)f(pass)g(the)h(address)e(of)i(y)m
-(our)f(status)h(v)-5 b(ariable)41 b(to)0 3493 y(astW)-8
-b(atc)m(h,)33 b(as)e(follo)m(ws:)227 3742 y Ft(int)43
-b(my_status;)227 3841 y(int)g(*old_address;)227 4041
-y(...)227 4240 y(old_address)c(=)k(astWatch\()d(&my_status)g(\);)0
-4502 y FF(Henceforth,)g(instead)f(of)f(using)f(its)h(o)m(wn)g(in)m
-(ternal)h(error)e(status)h(v)-5 b(ariable,)41 b(AST)c(will)h(use)g(the)
-g(one)g(y)m(ou)0 4615 y(supply)-8 b(,)31 b(so)h(that)g(it)g(can)g
-(detect)h(errors)e(\015agged)i(b)m(y)e(other)h(parts)f(of)h(y)m(our)g
-(soft)m(w)m(are.)46 b(The)31 b(address)f(of)i(the)0 4728
-y(original)e(error)e(status)h(v)-5 b(ariable)30 b(is)f(returned)f(b)m
-(y)g(astW)-8 b(atc)m(h,)32 b(so)d(y)m(ou)g(can)g(restore)h(the)f
-(original)h(b)s(eha)m(viour)0 4841 y(later)h(if)g(necessary)-8
-b(.)0 5004 y(Note)32 b(that)f(this)f(facilit)m(y)i(is)f(not)f(a)m(v)-5
-b(ailable)33 b Fx(via)e FF(the)f(F)-8 b(ortran)31 b(in)m(terface)h(to)f
-(the)g(AST)f(library)-8 b(.)p eop end
-%%Page: 48 58
-TeXDict begin 48 57 bop 0 52 a FF(48)2393 b Fy(4)91 b(AN)31
-b(AST)e(OBJECT)h(PRIMER)p eop end
-%%Page: 49 59
-TeXDict begin 49 58 bop 3689 52 a FF(49)0 351 y Fz(5)135
-b(In)l(ter-Relating)47 b(Co)t(ordinate)f(Systems)g(\(Mappings\))0
-627 y FF(In)37 b Fu(x)p FF(4)i(w)m(e)g(used)e(the)h(Zo)s(omMap)g(as)h
-(an)e(example)i(of)f(a)h(Mapping.)64 b(W)-8 b(e)39 b(sa)m(w)f(ho)m(w)g
-(it)h(could)f(b)s(e)f(used)h(to)0 740 y(transform)32
-b(co)s(ordinates)h(from)f(its)g(input)g(to)h(its)f(output)g(and)g(bac)m
-(k)h(again)g(\()p Fu(x)p FF(4.8\).)49 b(W)-8 b(e)34 b(also)f(sa)m(w)g
-(ho)m(w)f(its)0 853 y(b)s(eha)m(viour)37 b(could)g(b)s(e)f(con)m
-(trolled)j(b)m(y)e(setting)h(v)-5 b(arious)38 b(attributes,)h(suc)m(h)e
-(as)g(the)h(Zo)s(om)f(factor)h(and)e(the)0 966 y(Rep)s(ort)30
-b(attribute)h(that)g(made)g(it)f(displa)m(y)h(co)s(ordinate)g(v)-5
-b(alues)31 b(as)g(it)g(transformed)e(them.)0 1144 y(In)c(this)g
-(section,)j(w)m(e)e(will)f(lo)s(ok)h(at)g(Mappings)f(a)h(bit)g(more)f
-(thoroughly)h(and)e(explore)i(the)g(b)s(eha)m(viour)f(whic)m(h)0
-1257 y(is)37 b(common)h(to)g(all)g(the)f(Mappings)g(pro)m(vided)g(b)m
-(y)g(AST.)g(This)f(is)h(go)s(o)s(d)g(bac)m(kground)g(for)g(what)g
-(follo)m(ws,)0 1370 y(b)s(ecause)42 b(man)m(y)h(of)f(the)h(Ob)5
-b(jects)42 b(w)m(e)h(discuss)e(later)j(will)e(also)i(turn)d(out)i(to)g
-(b)s(e)e(Mappings)h(in)g(v)-5 b(arious)0 1483 y(disguises.)0
-1829 y Fw(5.1)112 b(The)38 b(Mapping)h(Class)0 2073 y
-FF(Before)28 b(w)m(e)g(start,)h(it)f(is)f(w)m(orth)h(taking)g(a)g(quic)
-m(k)g(lo)s(ok)g(at)g(the)g(Mapping)f(class)h(as)g(a)f(whole)h(and)f
-(some)h(of)f(the)0 2186 y(sub-classes)k(it)f(con)m(tains:)370
-2495 y Fq(Mapping)514 2608 y(CmpMap)514 2721 y(DssMap)514
-2834 y(GrismMap)514 2947 y(IntraMap)514 3060 y(LutMap)514
-3173 y(MathMap)514 3286 y(MatrixMap)514 3399 y(PermMap)514
-3512 y(PolyMap)514 3625 y(SlaMap)514 3737 y(SpecMap)514
-3850 y(TimeMap)514 3963 y(UnitMap)514 4076 y(WcsMap)514
-4189 y(ZoomMap)514 4415 y(Frame)657 4528 y(<various)45
-b(types)i(of)g(Frame>)0 4837 y FF(The)29 b(F)-8 b(rame)30
-b(sub-class)f(has)g(b)s(een)g(separated)h(out)f(here)g(b)s(ecause)h(it)
-g(is)f(co)m(v)m(ered)i(in)e(detail)h(in)f Fu(x)p FF(7.)41
-b(W)-8 b(e)31 b(start)0 4950 y(b)m(y)f(lo)s(oking)h(at)h(the)e(paren)m
-(t)h(class,)g(Mapping.)0 5128 y(AST)21 b(do)s(es)h(not)h(pro)m(vide)f
-(a)h(function)f(to)h(create)g(a)g(basic)g(Mapping)f(\()p
-Fx(i.e.)g FF(the)g(astMapping)h(constructor)g(do)s(es)0
-5241 y(not)j(exist\).)40 b(This)24 b(is)i(b)s(ecause)f(the)g(Mapping)h
-(class)g(itself)g(is)f(\\virtual")i(and)e(basic)g(Mappings)g(are)h(of)g
-(no)f(use)0 5354 y(in)e(themselv)m(es.)40 b(The)23 b(Mapping)g(class)h
-(serv)m(es)g(simply)f(to)i(con)m(tain)f(the)g(v)-5 b(arious)24
-b(sp)s(ecialised)g(Mappings)f(that)0 5467 y(exist.)41
-b(Ho)m(w)m(ev)m(er,)31 b(it)e(pro)m(vides)f(more)g(than)g(just)g(a)g
-(con)m(v)m(enien)m(t)j(heading)d(for)g(them)g(b)s(ecause)h(it)f(b)s
-(esto)m(ws)h(all)0 5580 y(classes)j(of)f(Mapping)g(with)f(common)h
-(prop)s(erties)g(\()p Fx(e.g.)f FF(attributes\))i(and)e(b)s(eha)m
-(viour.)42 b(By)31 b(examining)g(the)0 5693 y(Mapping)d(class,)i(w)m(e)
-f(are)g(therefore)g(examining)g(the)f(things)h(that)g(all)g(other)g
-(Mappings)f(ha)m(v)m(e)i(in)e(common.)p eop end
-%%Page: 50 60
-TeXDict begin 50 59 bop 0 52 a FF(50)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.2)112 b(The)38 b(Mapping)h(Mo)s(del)0 578
-y FF(The)32 b(concept)i(of)f(a)g(Mapping)g(w)m(as)g(illustrated)h(in)e
-(Figure)h(1.)49 b(It)33 b(is)g(a)g(blac)m(k)h(b)s(o)m(x)e(whic)m(h)h(y)
-m(ou)g(can)g(supply)0 691 y(with)d(a)h(set)g(of)g(co)s(ordinate)g(v)-5
-b(alues)31 b(in)g(return)e(for)h(a)h(set)h(of)e(transformed)g(co)s
-(ordinates.)42 b(The)30 b(t)m(w)m(o)i(sets)f(are)0 804
-y(termed)c Fx(input)g FF(and)f Fx(output)i FF(co)s(ordinates.)40
-b(Y)-8 b(ou)28 b(can)f(also)h(go)g(bac)m(k)f(the)g(other)g(w)m(a)m(y)h
-(and)f(transform)f(output)0 917 y(co)s(ordinates)31 b(bac)m(k)g(in)m
-(to)h(input)d(co)s(ordinates,)i(as)g(w)m(e)g(sa)m(w)g(in)f
-Fu(x)p FF(4.8.)0 1224 y Fw(5.3)112 b(Input)38 b(and)g(Output)g(Co)s
-(ordinate)g(Num)m(b)s(ers)0 1451 y FF(In)30 b(general,)h(the)g(n)m(um)m
-(b)s(er)e(of)h(co)s(ordinates)h(y)m(ou)g(feed)f(in)m(to)h(a)g(Mapping)f
-(to)h(represen)m(t)g(a)f(single)h(p)s(oin)m(t)g(need)0
-1564 y(not)38 b(b)s(e)f(the)h(same)g(as)g(the)g(n)m(um)m(b)s(er)f(that)
-h(comes)h(out.)63 b(Often)37 b(these)h(n)m(um)m(b)s(ers)f(will)h(b)s(e)
-f(the)h(same,)i(and)0 1677 y(often)32 b(they)h(will)f(b)s(oth)f(equal)i
-(2)f(\(b)s(ecause)g(2-dimensional)h(co)s(ordinate)g(systems)f(are)g
-(common\),)h(but)f(this)0 1790 y(needn't)e(necessarily)i(b)s(e)d(the)i
-(case.)0 1956 y(The)42 b(n)m(um)m(b)s(er)g(of)g(co)s(ordinates)i
-(required)e(to)h(sp)s(ecify)f(an)h(input)f(p)s(oin)m(t)g(is)h(represen)
-m(ted)g(b)m(y)f(the)h(in)m(teger)0 2069 y(attribute)26
-b(Nin)f(and)g(the)g(n)m(um)m(b)s(er)f(required)h(to)h(sp)s(ecify)f(an)g
-(output)g(p)s(oin)m(t)g(is)h(represen)m(ted)f(b)m(y)g(Nout.)40
-b(These)0 2182 y(are)j(read-only)f(attributes)h(common)f(to)h(all)g
-(Mappings.)76 b(Generally)-8 b(,)47 b(their)42 b(v)-5
-b(alues)43 b(are)f(\014xed)g(when)f(a)0 2295 y(Mapping)30
-b(is)h(created.)0 2462 y(In)20 b Fu(x)p FF(4.2,)25 b(w)m(e)d(sa)m(w)f
-(ho)m(w)g(the)g(Nin)g(attribute)h(for)f(a)g(Zo)s(omMap)h(w)m(as)f
-(initialised)h(b)m(y)f(the)h(call)g(to)g(the)f(constructor)0
-2575 y(function)36 b(astZo)s(omMap)i(whic)m(h)e(created)i(it.)60
-b(In)36 b(this)h(case,)i(the)e(Nout)g(attribute)h(w)m(as)f(not)g
-(needed)f(and)0 2687 y(it)i(implicitly)g(to)s(ok)g(the)g(same)f(v)-5
-b(alue)38 b(as)g(Nin,)h(but)d(w)m(e)i(could)f(ha)m(v)m(e)i(enquired)d
-(ab)s(out)h(its)h(v)-5 b(alue)37 b(had)g(w)m(e)0 2800
-y(w)m(an)m(ted,)31 b(as)g(follo)m(ws:)227 3061 y Ft(#include)41
-b("ast.h")227 3161 y(AstZoomMap)f(*zoommap;)227 3260
-y(int)j(nout;)227 3460 y(...)227 3659 y(nout)f(=)h(astGetI\()e
-(zoommap,)f("Nout")h(\);)0 3965 y Fw(5.4)112 b(F)-9 b(orw)m(ard)38
-b(and)g(In)m(v)m(erse)g(T)-9 b(ransformations)0 4193
-y FF(W)h(e)37 b(stated)g(earlier)f(that)h(a)f(Mapping)g(ma)m(y)g(b)s(e)
-f(used)g(to)i(transform)e(co)s(ordinates)h(either)h(from)e(input)g(to)0
-4306 y(output,)30 b(or)h Fx(vic)-5 b(e)32 b(versa.)41
-b FF(These)30 b(are)h(termed)f(its)h Fx(forwar)-5 b(d)33
-b FF(and)c Fx(inverse)i FF(transformations.)0 4472 y(This)f(statemen)m
-(t)i(w)m(as)f(not)g(quite)f(accurate,)j(ho)m(w)m(ev)m(er,)f(b)s(ecause)
-e(in)h(general)g(Mappings)f(are)h(only)g FD(p)s(oten-)0
-4585 y(tially)j FF(capable)h(of)f(w)m(orking)h(in)e(b)s(oth)h
-(directions.)52 b(In)34 b(practice,)i(co)s(ordinate)f(transformation)g
-(ma)m(y)f(only)0 4698 y(b)s(e)i(feasible)i(in)e(one)h(direction)h(or)f
-(the)g(other)g(b)s(ecause)g(some)g(functions)f(are)h(not)g(easily)h(in)
-m(v)m(erted)g(\(they)0 4811 y(ma)m(y)29 b(b)s(e)g(m)m(ulti-v)-5
-b(alued,)30 b(for)e(instance\).)42 b(Allo)m(w)m(ance)31
-b(m)m(ust)e(b)s(e)f(made)h(for)f(this,)i(so)f(eac)m(h)h(Mapping)f(has)f
-(t)m(w)m(o)0 4924 y(read-only)36 b(b)s(o)s(olean)g(\(in)m(teger\))i
-(attributes,)g(T)-8 b(ranF)g(orw)m(ard)36 b(and)g(T)-8
-b(ranIn)m(v)m(erse,)37 b(whic)m(h)f(indicate)h(whether)0
-5037 y(eac)m(h)32 b(transformation)e(is)h(a)m(v)-5 b(ailable.)0
-5203 y(A)29 b(transformation)h(is)f(a)m(v)-5 b(ailable)31
-b(if)e(the)g(corresp)s(onding)f(attribute)i(is)f(non-zero,)h(otherwise)
-g(it)g(is)f(not.)3604 5170 y Fv(11)3719 5203 y FF(If)0
-5316 y(y)m(ou)f(enquire)f(ab)s(out)h(the)f(v)-5 b(alue)28
-b(of)g(these)g(attributes,)h(a)f(v)-5 b(alue)28 b(of)g(0)g(or)g(1)g(is)
-g(returned.)38 b(A)m(ttempting)29 b(to)g(use)0 5429 y(a)i(Mapping)f(to)
-h(apply)f(a)h(transformation)g(whic)m(h)f(is)g(not)h(a)m(v)-5
-b(ailable)33 b(will)d(result)h(in)f(an)g(error.)p 0 5516
-1512 4 v 73 5570 a Fs(11)138 5602 y Fr(Most)23 b(of)g(the)e(Mappings)i
-(pro)n(vided)e(b)n(y)g(the)g(AST)h(library)g(w)n(ork)g(in)g(b)r(oth)g
-(directions,)i(although)e(the)f(LutMap)h(can)g(b)r(eha)n(v)n(e)0
-5693 y(otherwise.)p eop end
-%%Page: 51 61
-TeXDict begin 51 60 bop 0 52 a Fy(5.5)92 b(In)m(v)m(erting)31
-b(Mappings)2706 b FF(51)0 351 y Fw(5.5)112 b(In)m(v)m(erting)38
-b(Mappings)0 580 y FF(An)28 b(imp)s(ortan)m(t)g(attribute,)i(common)f
-(to)g(all)g(Mappings,)g(is)f(the)g(In)m(v)m(ert)h(\015ag.)41
-b(This)27 b(is)h(a)h(b)s(o)s(olean)f(\(in)m(teger\))0
-693 y(attribute)37 b(that)h(can)f(b)s(e)f(assigned)h(a)g(new)f(v)-5
-b(alue)38 b(at)f(an)m(y)g(time.)61 b(If)36 b(it)h(is)g(non-zero,)i(it)f
-(has)e(the)h(e\013ect)h(of)0 806 y(in)m(terc)m(hanging)33
-b(the)e(Mapping's)g(input)f(and)g(output)h(co)s(ordinates)h(and)e(the)h
-(Mapping)g(is)h(then)e(said)h(to)h(b)s(e)0 918 y Fx(inverte)-5
-b(d.)41 b FF(By)31 b(default,)g(the)f(In)m(v)m(ert)h(attribute)g(is)g
-(zero.)0 1086 y(There)41 b(is)g(no)g(magic)h(in)f(this.)72
-b(There)41 b(is)g(no)g(fancy)g(arithmetic)h(in)m(v)m(olv)m(ed)h(in)e
-(in)m(v)m(erting)h(mathematical)0 1199 y(functions,)32
-b(for)f(instance.)45 b(The)31 b(In)m(v)m(ert)i(\015ag)e(is)h(simply)f
-(a)h(switc)m(h)g(that)h(in)m(terc)m(hanges)g(a)f(Mapping's)f(input)0
-1312 y(and)37 b(output)g(p)s(orts.)61 b(If)37 b(it)h(is)g(non-zero,)i
-(the)d(Mapping's)h(Nin)f(and)g(Nout)h(attributes)g(are)g(sw)m(app)s
-(ed,)g(its)0 1425 y(T)-8 b(ranF)g(orw)m(ard)28 b(and)g(T)-8
-b(ranIn)m(v)m(erse)28 b(attributes)h(are)g(sw)m(app)s(ed,)f(and)f(when)
-g(y)m(ou)i(ask)g(for)f(what)g(w)m(as)g(once)h(the)0 1538
-y(forw)m(ard)h(transformation)h(y)m(ou)g(get)h(the)f(in)m(v)m(erse)h
-(transformation)f(instead)g(\(and)f Fx(vic)-5 b(e)33
-b(versa)p FF(\).)43 b(When)30 b(y)m(ou)0 1650 y(return)f(the)i(In)m(v)m
-(ert)g(attribute)g(to)g(zero,)g(or)g(clear)g(it,)g(the)g(Mapping)f
-(returns)f(to)i(its)g(original)h(b)s(eha)m(viour.)0 1818
-y(Often,)e(the)f(actual)i(v)-5 b(alue)30 b(of)g(the)f(In)m(v)m(ert)h
-(attribute)h(is)e(unimp)s(ortan)m(t)g(and)g(y)m(ou)h(simply)f(wish)f
-(to)j(in)m(v)m(ert)f(its)0 1931 y(b)s(o)s(olean)i(sense,)i(so)e(that)h
-(what)g(w)m(as)f(the)h(Mapping's)f(input)g(b)s(ecomes)h(its)f(output)g
-(and)g Fx(vic)-5 b(e)34 b(versa.)47 b FF(This)0 2044
-y(is)30 b(most)h(easily)h(accomplished)f(using)f(astIn)m(v)m(ert,)h(as)
-g(follo)m(ws:)227 2307 y Ft(AstMapping)40 b(*mapping;)227
-2506 y(...)227 2706 y(astInvert\()g(mapping)g(\);)0 2982
-y FF(If)31 b(the)h(Mapping)f(y)m(ou)h(ha)m(v)m(e)h(happ)s(ens)d(to)i(b)
-s(e)f(the)h(wrong)f(w)m(a)m(y)h(around,)f(astIn)m(v)m(ert)i(allo)m(ws)g
-(y)m(ou)f(to)g(correct)0 3095 y(the)f(problem.)0 3404
-y Fw(5.6)112 b(Finding)39 b(the)f(Rate)f(of)g(Change)i(of)f(a)f
-(Mapping)i(Output)0 3633 y FF(The)25 b(astRate)j(function)d(can)h(b)s
-(e)f(used)g(to)h(\014nd)e(the)i(rate)h(of)f(c)m(hange)g(of)g(an)m(y)g
-(Mapping)g(output)f(with)g(resp)s(ect)0 3746 y(to)39
-b(an)m(y)f(Mapping)g(input,)h(at)g(a)f(giv)m(en)h(input)e(p)s(osition.)
-64 b(The)37 b(metho)s(d)h(used)f(pro)s(duces)f(go)s(o)s(d)i(accuracy)0
-3859 y(\(t)m(ypically)d(a)f(relativ)m(e)h(error)e(of)g(10E-10)i(or)e
-(less\))h(but)e(ma)m(y)i(require)e(the)i(Mapping)f(to)g(b)s(e)g(ev)-5
-b(aluated)34 b(100)0 3972 y(or)c(more)h(times.)41 b(An)30
-b(estimate)i(of)f(the)f(second)h(deriv)-5 b(ativ)m(e)32
-b(is)e(also)h(pro)s(duced)e(b)m(y)h(this)h(function.)0
-4281 y Fw(5.7)112 b(Rep)s(orting)38 b(Co)s(ordinate)g(T)-9
-b(ransformations)0 4509 y FF(W)h(e)24 b(ha)m(v)m(e)g(already)g(seen)e
-(\()p Fu(x)p FF(4.8\))k(ho)m(w)c(the)h(b)s(o)s(olean)g(\(in)m(teger\))i
-(Rep)s(ort)e(attribute)g(of)g(a)h(Mapping)e(w)m(orks.)39
-b(If)22 b(it)0 4622 y(is)g(non-zero,)j(the)d(op)s(eration)g(of)g
-(transforming)g(a)g(set)h(of)f(co)s(ordinates)h(will)f(result)g(in)g(a)
-g(rep)s(ort)g(b)s(eing)f(written)0 4735 y(to)31 b(standard)f(output.)42
-b(This)29 b(will)i(displa)m(y)g(the)g(co)s(ordinate)h(v)-5
-b(alues)31 b(b)s(efore)f(and)g(after)h(transformation.)42
-b(It)0 4848 y(can)35 b(sa)m(v)m(e)h(considerable)f(time)g(during)e
-(program)h(dev)m(elopmen)m(t)i(b)m(y)e(eliminating)i(the)e(need)h(to)g
-(add)e(lo)s(ops)0 4961 y(and)d(output)g(statemen)m(ts)i(to)f(y)m(our)f
-(program.)0 5128 y(In)35 b(a)i(\014nished)d(program,)k(ho)m(w)m(ev)m
-(er,)h(y)m(ou)d(should)f(b)s(e)g(careful)i(that)f(the)g(Rep)s(ort)g
-(attribute)h(is)f(not)g(set)h(to)0 5241 y(a)e(non-zero)h(v)-5
-b(alue)36 b(unless)e(y)m(ou)h(w)m(an)m(t)h(to)g(see)g(the)f(output)g
-(\(there)g(ma)m(y)h(often)g(b)s(e)e(rather)h(a)g(lot)h(of)g(this!\).)0
-5354 y(T)-8 b(o)32 b(help)g(prev)m(en)m(t)g(un)m(w)m(an)m(ted)g(output)
-f(b)s(eing)h(pro)s(duced)e(b)m(y)i(acciden)m(t,)i(the)e(Rep)s(ort)f
-(attribute)i(is)e(un)m(usual)0 5467 y(in)i(that)h(its)f(v)-5
-b(alue)34 b(is)f(not)g(preserv)m(ed)g(when)f(a)i(Mapping)f(is)g(copied)
-h(using)e(astCop)m(y)i(\()p Fu(x)p FF(4.13\).)52 b(Instead,)34
-b(it)0 5580 y(rev)m(erts)d(to)g(its)g(default)g(of)f(zero)h(\()p
-Fx(i.e.)f FF(un-set\))h(in)f(the)h(cop)m(y)-8 b(.)42
-b(It)30 b(also)i(rev)m(erts)f(to)g(zero)g(when)e(a)i(Mapping)f(is)0
-5693 y(written)g(out,)h Fx(e.g.)f FF(to)h(a)g(\014le)f(using)g(a)h
-(Channel)f(\()p Fu(x)p FF(15\).)p eop end
-%%Page: 52 62
-TeXDict begin 52 61 bop 0 52 a FF(52)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))0
-351 y Fw(5.8)112 b(Handling)39 b(Missing)g(\(Bad\))e(Co)s(ordinate)h(V)
--9 b(alues)0 589 y FF(Ev)m(en)27 b(when)e(co)s(ordinates)i(can,)h(in)e
-(principle,)h(b)s(e)f(transformed)g(in)g(either)h(direction)g(b)m(y)f
-(a)h(Mapping,)g(there)0 701 y(ma)m(y)39 b(still)g(b)s(e)f(instances)h
-(where)f(sp)s(eci\014c)g(co)s(ordinate)i(v)-5 b(alues)39
-b(cannot)g(b)s(e)f(handled.)64 b(F)-8 b(or)39 b(example,)i(the)0
-814 y(Mapping)33 b(ma)m(y)h(b)s(e)f(mathematically)j(in)m(tractable)f
-(\()p Fx(e.g.)e FF(singular\))h(in)f(certain)h(places,)h(or)e(it)h(ma)m
-(y)g(map)f(a)0 927 y(subset)f(of)g(one)h(space)g(on)f(to)h(another,)h
-(so)f(that)g(some)f(p)s(oin)m(ts)h(in)f(one)g(space)h(are)g(not)g
-(represen)m(ted)f(in)g(the)0 1040 y(other.)43 b(Sky)31
-b(pro)5 b(jections)32 b(often)f(sho)m(w)g(this)g(b)s(eha)m(viour,)g
-(since)h(it)g(is)f(quite)g(common)h(to)g(pro)5 b(ject)31
-b(only)h(half)0 1153 y(of)38 b(the)f(celestial)j(sphere)d(on)g(to)h(t)m
-(w)m(o)h(dimensions,)f(omitting)h(p)s(oin)m(ts)e(on)g(the)h(opp)s
-(osite)g(side)f(of)g(the)h(sky)-8 b(.)0 1266 y(There)30
-b(are)h(man)m(y)f(other)h(examples.)0 1439 y(T)-8 b(o)36
-b(indicate)h(when)e(co)s(ordinates)h(cannot)h(b)s(e)e(transformed,)i
-(for)e(whatev)m(er)i(reason,)g(AST)f(substitutes)f(a)0
-1552 y(sp)s(ecial)24 b(output)f(co)s(ordinate)h(v)-5
-b(alue)23 b(giv)m(en)h(b)m(y)f(the)h(macro)f(AST)p Fq(__)p
-FF(BAD)g(\(as)h(de\014ned)e(in)h(the)g(\\ast.h")i(header)0
-1665 y(\014le\).)45 b(Before)33 b(making)f(use)f(of)h(co)s(ordinates)h
-(generated)f(b)m(y)g(an)m(y)g(of)g(the)g(AST)f(transformation)h
-(functions,)0 1778 y(therefore,)f(y)m(ou)g(ma)m(y)g(need)f(to)h(c)m
-(hec)m(k)h(for)e(the)h(presence)f(of)h(this)f(v)-5 b(alue.)0
-1952 y(Because)39 b(co)s(ordinates)f(with)f(the)g(v)-5
-b(alue)38 b(AST)p Fq(__)p FF(BAD)f(can)h(b)s(e)f(generated)h(in)f(this)
-h(w)m(a)m(y)-8 b(,)40 b(all)f(other)e(AST)0 2065 y(functions)c(are)h
-(also)g(capable)g(of)f(recognising)i(this)e(v)-5 b(alue)34
-b(and)f(handling)f(it)i(appropriately)-8 b(.)50 b(The)33
-b(co)s(ordi-)0 2178 y(nate)c(transformation)h(functions)e(do)h(this)f
-(b)m(y)h(propagating)h(an)m(y)f(missing)g(input)e(co)s(ordinate)j
-(information)0 2290 y(through)c(to)i(their)f(output.)40
-b(This)26 b(means)h(that)h(if)f(y)m(ou)g(supply)f(co)s(ordinates)i
-(with)f(the)g(v)-5 b(alue)27 b(AST)p Fq(__)p FF(BAD,)0
-2403 y(the)d(returned)f(co)s(ordinates)i(are)f(also)h(lik)m(ely)h(to)f
-(con)m(tain)g(this)f(v)-5 b(alue.)39 b(Here,)26 b(for)e(example,)i(is)e
-(what)g(happ)s(ens)0 2516 y(if)30 b(y)m(ou)h(use)f(a)h(Zo)s(omMap)f
-(\(with)h(Zo)s(om)f(factor)h(5\))g(to)g(transform)f(suc)m(h)g(a)h(set)g
-(of)f(co)s(ordinates:)227 2798 y Ft(\(0,)43 b(0\))f(-->)h(\(0,)f(0\))
-227 2897 y(\(<bad>,)f(2\))i(-->)f(\(<bad>,)f(10\))227
-2997 y(\(2,)i(4\))f(-->)h(\(10,)f(20\))227 3097 y(\(3,)h(6\))f(-->)h
-(\(15,)f(30\))227 3196 y(\(4,)h(<bad>\))e(-->)h(\(20,)g(<bad>\))227
-3296 y(\(5,)h(10\))f(-->)g(\(25,)g(50\))227 3395 y(\(<bad>,)f(<bad>\))g
-(-->)h(\(<bad>,)f(<bad>\))227 3495 y(\(7,)i(14\))f(-->)g(\(35,)g(70\))
-227 3595 y(\(8,)h(16\))f(-->)g(\(40,)g(80\))227 3694
-y(\(9,)h(18\))f(-->)g(\(45,)g(90\))0 3989 y FF(The)37
-b(AST)p Fq(__)p FF(BAD)h(v)-5 b(alue)39 b(is)f(represen)m(ted)g(b)m(y)g
-(the)g(string)g(\\)p Fo(<)p FF(bad)p Fo(>)p FF(".)63
-b(This)37 b(is)h(a)h(case)g(of)f(\\garbage)i(in,)0 4102
-y(garbage)32 b(out")f(but)e(at)i(least)h(it's)f(consisten)m(t)h
-(garbage)f(that)g(y)m(ou)g(can)g(recognise!)0 4275 y(Note)22
-b(ho)m(w)f(the)g(presence)f(of)h(the)g(AST)p Fq(__)p
-FF(BAD)f(v)-5 b(alue)22 b(in)e(one)h(input)f(dimension)g(do)s(es)g(not)
-h(necessarily)h(result)0 4388 y(in)32 b(the)h(loss)f(of)h(information)g
-(for)f(all)h(output)f(dimensions.)46 b(Sometimes,)34
-b(suc)m(h)e(loss)h(will)f(b)s(e)g(una)m(v)m(oidable,)0
-4501 y(but)21 b(in)h(general)g(an)g(attempt)h(is)f(made)g(to)g(preserv)
-m(e)g(information)g(as)g(far)g(as)g(p)s(ossible.)37 b(The)22
-b(exact)h(b)s(eha)m(viour)0 4614 y(will)31 b(dep)s(end)d(on)j(the)f
-(Mapping)h(in)m(v)m(olv)m(ed.)0 4944 y Fw(5.9)112 b(Example|the)39
-b(UnitMap)0 5181 y FF(The)31 b(UnitMap)i(is)f(the)g(simplest)g(of)g
-(Mappings.)45 b(It)32 b(is)g(a)g(n)m(ull)g(Mapping.)46
-b(Its)31 b(purp)s(ose)g(is)h(simply)f(to)i(cop)m(y)0
-5294 y(co)s(ordinate)e(v)-5 b(alues,)31 b(unaltered,)g(from)f(its)g
-(input)g(to)h(its)g(output)f(and)f Fx(vic)-5 b(e)33 b(versa.)0
-5467 y FF(A)j(UnitMap)g(has)g(no)f(additional)i(attributes)g(b)s(ey)m
-(ond)e(those)h(of)g(a)g(basic)g(Mapping.)57 b(Its)36
-b(Nin)g(and)f(Nout)0 5580 y(attributes)e(are)g(alw)m(a)m(ys)h(equal)g
-(and)e(are)h(sp)s(eci\014ed)f(b)m(y)g(the)h(\014rst)f(argumen)m(t)h
-(supplied)e(to)j(its)f(constructor.)0 5693 y(F)-8 b(or)31
-b(example:)p eop end
-%%Page: 53 63
-TeXDict begin 53 62 bop 0 52 a Fy(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FF(53)227 351 y Ft(AstUnitMap)40
-b(*unitmap;)227 551 y(...)227 750 y(unitmap)h(=)i(astUnitMap\()c(2,)k
-("")g(\);)0 1002 y FF(will)28 b(create)h(a)f(UnitMap)f(that)i(copies)f
-(2-dimensional)g(co)s(ordinates.)41 b(In)m(v)m(erting)28
-b(a)g(UnitMap)f(has)h(no)f(e\013ect)0 1115 y(b)s(ey)m(ond)j(c)m
-(hanging)h(the)g(v)-5 b(alue)30 b(of)h(its)g(In)m(v)m(ert)g(attribute.)
-0 1276 y(The)i(main)g(use)g(of)h(a)f(UnitMap)h(is)g(to)g(allo)m(w)h(a)e
-(Mapping)h(to)g(b)s(e)f(supplied)f(when)g(one)i(is)f(required)g(\(as)h
-(an)0 1388 y(argumen)m(t)d(to)g(a)g(function,)f(for)g(example\))i(but)d
-(y)m(ou)i(wish)f(it)g(to)i(lea)m(v)m(e)g(co)s(ordinate)g(v)-5
-b(alues)30 b(unc)m(hanged.)0 1678 y Fw(5.10)112 b(Example|the)39
-b(P)m(ermMap)0 1897 y FF(The)28 b(P)m(ermMap)g(is)h(a)f(rather)g(more)h
-(complicated)h(Mapping)e(than)g(w)m(e)h(ha)m(v)m(e)g(met)g(previously)
--8 b(.)40 b(Its)28 b(purp)s(ose)0 2010 y(is)34 b(to)g(c)m(hange)h(the)f
-(order,)h(or)f(n)m(um)m(b)s(er,)f(of)h(co)s(ordinates.)52
-b(It)34 b(is)g(also)h(able)f(to)h(substitute)e(\014xed)h(v)-5
-b(alues)34 b(for)0 2123 y(co)s(ordinates.)0 2283 y(T)-8
-b(o)41 b(illustrate)g(its)g(action,)j(supp)s(ose)39 b(our)g(input)h(co)
-s(ordinates)h(are)f(denoted)h(b)m(y)f(\()p Fo(x)2992
-2297 y Fv(1)3031 2283 y Fo(;)15 b(x)3123 2297 y Fv(2)3163
-2283 y Fo(;)g(x)3255 2297 y Fv(3)3295 2283 y Fo(;)g(x)3387
-2297 y Fv(4)3427 2283 y FF(\))40 b(in)g(a)h(4-)0 2396
-y(dimensional)27 b(space)h(and)e(supp)s(ose)g(our)g(output)h(co)s
-(ordinates)h(are)f(to)h(b)s(e)e(\()p Fo(x)2645 2410 y
-Fv(4)2685 2396 y Fo(;)15 b(x)2777 2410 y Fv(1)2817 2396
-y Fo(;)g(x)2909 2410 y Fv(2)2948 2396 y Fo(;)g(x)3040
-2410 y Fv(3)3080 2396 y FF(\).)40 b(Our)26 b(P)m(ermMap,)0
-2509 y(therefore,)31 b(should)e(rotate)j(the)f(co)s(ordinate)g(v)-5
-b(alues)31 b(b)m(y)f(one)h(p)s(osition.)0 2669 y(T)-8
-b(o)26 b(create)h(suc)m(h)e(a)h(P)m(ermMap,)h(w)m(e)f(\014rst)e(set)i
-(up)f(t)m(w)m(o)i(in)m(teger)f(arra)m(ys.)40 b(One)25
-b(of)g(these,)j(\\outp)s(erm",)e(con)m(trols)0 2782 y(the)21
-b(selection)i(of)e(input)f(co)s(ordinates)i(for)f(use)g(in)g(the)g
-(output)g(and)f(the)h(other,)j(\\inp)s(erm",)e(con)m(trols)h(selection)
-0 2895 y(of)31 b(output)f(co)s(ordinates)h(for)f(use)g(in)g(the)g
-(input:)227 3134 y Ft(int)43 b(outperm[)d(4)j(])g(=)g({)h(4,)e(1,)h(2,)
-g(3)g(};)227 3234 y(int)g(inperm[)d(4)j(])h(=)f({)g(2,)g(3,)g(4,)f(1)h
-(};)0 3487 y FF(Note)32 b(that)e(the)h(n)m(um)m(b)s(ers)d(w)m(e)j
-(store)g(in)f(these)h(arra)m(ys)f(are)h(the)f(indices)g(of)h(the)f(co)s
-(ordinates)h(that)g(w)m(e)g(w)m(an)m(t)0 3599 y(to)36
-b(select.)57 b(W)-8 b(e)36 b(ha)m(v)m(e)h(c)m(hosen)e(these)h(so)f
-(that)h(the)g(forw)m(ard)e(and)h(in)m(v)m(erse)h(transformations)f
-(will)h(p)s(erform)0 3712 y(complemen)m(tary)c(p)s(erm)m(utations)e(on)
-g(the)h(co)s(ordinates.)0 3873 y(The)f(P)m(ermMap)h(is)f(then)g
-(created)h(b)m(y)g(passing)f(these)h(arra)m(ys)g(to)g(its)f
-(constructor,)h(as)g(follo)m(ws:)227 4112 y Ft(AstPermMap)40
-b(*permmap;)227 4311 y(...)227 4510 y(permmap)h(=)i(astPermMap\()c(4,)k
-(inperm,)e(4,)h(outperm,)f(NULL,)g("")i(\);)0 4763 y
-FF(Note)32 b(that)f(w)m(e)h(sp)s(ecify)e(the)h(n)m(um)m(b)s(er)f(of)g
-(input)g(and)g(output)h(co)s(ordinates)g(separately)-8
-b(,)33 b(but)d(set)i(b)s(oth)e(to)h(4)0 4876 y(in)24
-b(this)h(example.)39 b(The)25 b(resulting)f(P)m(ermMap)i(w)m(ould)e(ha)
-m(v)m(e)i(the)f(follo)m(wing)h(e\013ect)g(when)e(used)g(to)h(transform)
-0 4989 y(co)s(ordinates:)227 5241 y Fq(Forward:)370 5354
-y(\(1,)47 b(2,)h(3,)f(4\))g(-->)g(\(4,)g(1,)g(2,)g(3\))370
-5467 y(\(2,)g(4,)h(6,)f(8\))g(-->)g(\(8,)g(2,)g(4,)g(6\))370
-5580 y(\(3,)g(6,)h(9,)f(12\))g(-->)g(\(12,)f(3,)h(6,)h(9\))370
-5693 y(\(4,)f(8,)h(12,)e(16\))h(-->)g(\(16,)g(4,)g(8,)g(12\))p
-eop end
-%%Page: 54 64
-TeXDict begin 54 63 bop 0 52 a FF(54)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))370
-351 y Fq(\(5,)47 b(10,)g(15,)g(20\))g(-->)g(\(20,)g(5,)g(10,)g(15\))227
-577 y(Inverse:)370 690 y(\(4,)g(1,)h(2,)f(3\))g(-->)g(\(1,)g(2,)g(3,)g
-(4\))370 803 y(\(8,)g(2,)h(4,)f(6\))g(-->)g(\(2,)g(4,)g(6,)g(8\))370
-916 y(\(12,)g(3,)g(6,)g(9\))h(-->)f(\(3,)f(6,)i(9,)f(12\))370
-1029 y(\(16,)g(4,)g(8,)g(12\))g(-->)g(\(4,)g(8,)g(12,)g(16\))370
-1142 y(\(20,)g(5,)g(10,)g(15\))g(-->)g(\(5,)g(10,)g(15,)g(20\))0
-1437 y FF(If)42 b(the)g(n)m(um)m(b)s(er)f(of)h(input)f(and)h(output)g
-(co)s(ordinates)h(are)f(unequal)g(so,)j(also,)i(will)42
-b(b)s(e)g(the)g(size)h(of)f(the)0 1550 y(\\outp)s(erm")25
-b(and)f(\\inp)s(erm")g(arra)m(ys.)39 b(This)24 b(means,)i(ho)m(w)m(ev)m
-(er,)i(that)d(w)m(e)g(cannot)h(\014ll)e(them)h(with)g(co)s(ordinate)0
-1663 y(indices)i(so)h(that)f(they)g(p)s(erform)f(complemen)m(tary)i(p)s
-(erm)m(utations,)g(b)s(ecause)f(one)h(transformation)f(will)h(lose)0
-1776 y(information)i(\(discard)g(a)g(co)s(ordinate\))g(that)h(the)f
-(other)f(cannot)i(reco)m(v)m(er.)42 b(T)-8 b(o)30 b(giv)m(e)h(an)f
-(example,)h(consider)0 1889 y(the)g(follo)m(wing:)227
-2171 y Ft(int)43 b(outperm[)d(3)j(])g(=)g({)h(4,)e(3,)h(2)g(};)227
-2271 y(int)g(inperm[)d(4)j(])h(=)f({)g(-1,)f(3,)h(2,)g(1)g(};)227
-2370 y(double)e(con[)h(1)h(])h(=)f({)g(99.004)e(};)0
-2666 y FF(In)g(this)h(case,)k(the)d(forw)m(ard)e(transformation)h(will)
-h(c)m(hange)g(\()p Fo(x)2274 2680 y Fv(1)2313 2666 y
-Fo(;)15 b(x)2405 2680 y Fv(2)2445 2666 y Fo(;)g(x)2537
-2680 y Fv(3)2577 2666 y Fo(;)g(x)2669 2680 y Fv(4)2709
-2666 y FF(\))42 b(in)m(to)h(\()p Fo(x)3069 2680 y Fv(4)3109
-2666 y Fo(;)15 b(x)3201 2680 y Fv(3)3241 2666 y Fo(;)g(x)3333
-2680 y Fv(2)3372 2666 y FF(\))43 b(and)e(will)0 2779
-y(discard)31 b Fo(x)367 2793 y Fv(1)406 2779 y FF(.)43
-b(The)30 b(in)m(v)m(erse)i(transformation)g(restores)f(the)h(original)g
-(co)s(ordinate)g(order,)f(but)f(has)h(no)g(v)-5 b(alue)0
-2892 y(to)31 b(assign)g(to)g(the)f(\014rst)g(co)s(ordinate.)42
-b(In)29 b(this)i(case,)g(the)g(n)m(um)m(b)s(er)e(en)m(tered)i(in)f(the)
-g(\\inp)s(erm")g(arra)m(y)h(is)g Fu(\000)p FF(1.)0 3065
-y(This)36 b(negativ)m(e)i(v)-5 b(alue)37 b(indicates)h(that)f(the)g(co)
-s(ordinate)g(v)-5 b(alue)37 b(should)e(b)s(e)h(obtained)h(b)m(y)f
-(addressing)g(the)0 3178 y(\014rst)26 b(elemen)m(t)i(of)f(the)g(\\con")
-h(arra)m(y)f(\()p Fx(i.e.)g FF(elemen)m(t)h(zero\).)41
-b(This)25 b(arra)m(y)-8 b(,)29 b(ignored)e(in)f(the)h(previous)g
-(example,)0 3291 y(ma)m(y)k(then)f(b)s(e)g(used)f(to)i(supply)e(a)i(v)
--5 b(alue)31 b(for)f(the)h(missing)f(co)s(ordinate.)0
-3465 y(The)g(constructor)h(function:)227 3747 y Ft(permmap)41
-b(=)i(astPermMap\()c(4,)k(inperm,)e(3,)h(outperm,)f(con,)h("")g(\);)0
-4043 y FF(will)31 b(then)f(create)i(a)e(P)m(ermMap)h(with)f(the)h
-(follo)m(wing)h(e\013ect)g(when)d(used)h(to)h(transform)e(co)s
-(ordinates:)227 4338 y Fq(Forward:)370 4451 y(\(1,)47
-b(2,)h(3,)f(4\))g(-->)g(\(4,)g(3,)g(2\))370 4564 y(\(2,)g(4,)h(6,)f
-(8\))g(-->)g(\(8,)g(6,)g(4\))370 4677 y(\(3,)g(6,)h(9,)f(12\))g(-->)g
-(\(12,)f(9,)h(6\))370 4790 y(\(4,)g(8,)h(12,)e(16\))h(-->)g(\(16,)g
-(12,)g(8\))370 4903 y(\(5,)g(10,)g(15,)g(20\))g(-->)g(\(20,)g(15,)g
-(10\))227 5128 y(Inverse:)370 5241 y(\(4,)g(3,)h(2\))f(-->)g(\(99.004,)
-e(2,)i(3,)h(4\))370 5354 y(\(8,)f(6,)h(4\))f(-->)g(\(99.004,)e(4,)i(6,)
-h(8\))370 5467 y(\(12,)f(9,)g(6\))g(-->)g(\(99.004,)f(6,)h(9,)g(12\))
-370 5580 y(\(16,)g(12,)g(8\))g(-->)g(\(99.004,)f(8,)h(12,)g(16\))370
-5693 y(\(20,)g(15,)g(10\))g(-->)g(\(99.004,)e(10,)i(15,)g(20\))p
-eop end
-%%Page: 55 65
-TeXDict begin 55 64 bop 0 52 a Fy(5.10)93 b(Example|the)30
-b(P)m(ermMap)2452 b FF(55)0 351 y(The)32 b(\\con")h(arra)m(y)g(ma)m(y)f
-(con)m(tain)i(more)e(than)g(one)h(v)-5 b(alue)32 b(if)g(necessary)h
-(and)f(ma)m(y)g(b)s(e)g(addressed)f(b)m(y)h(b)s(oth)0
-464 y(the)k(\\inp)s(erm")f(and)g(\\outp)s(erm")h(arra)m(ys)g(using)g
-(co)s(ordinate)g(indices)g Fu(\000)p FF(1,)i Fu(\000)p
-FF(2,)f Fu(\000)p FF(3,)f Fx(etc.)g FF(to)g(refer)g(to)g(the)0
-577 y(\014rst,)30 b(second,)h(third,)e Fx(etc.)h FF(elemen)m(ts.)0
-740 y(If)25 b(there)h(is)g(no)g(suitable)g(replacemen)m(t)h(v)-5
-b(alue)27 b(that)f(can)g(b)s(e)f(supplied)g Fx(via)g
-FF(the)h(\\con")h(arra)m(y)-8 b(,)28 b(a)e(v)-5 b(alue)27
-b(of)f(zero)0 853 y(ma)m(y)i(b)s(e)f(en)m(tered)h(in)m(to)h(the)f
-(\\outp)s(erm")f(and/or)h(\\inp)s(erm")f(arra)m(ys.)40
-b(This)27 b(causes)h(the)g(v)-5 b(alue)28 b(AST)p Fq(__)p
-FF(BAD)0 966 y(to)34 b(b)s(e)f(used)g(for)g(the)h(a\013ected)h(co)s
-(ordinate)g(\(as)f(de\014ned)e(in)h(the)h(\\ast.h")h(header)e
-(\014le\),)i(th)m(us)f(indicating)g(a)0 1079 y(missing)c(co)s(ordinate)
-h(v)-5 b(alue)31 b(\()p Fu(x)p FF(5.8\).)0 1241 y(The)k(principle)g
-(use)f(for)h(a)h(P)m(ermMap)g(lies)g(in)e(matc)m(hing)j(a)e(co)s
-(ordinate)h(system)g(to)g(a)f(data)h(arra)m(y)g(where)0
-1354 y(there)25 b(is)f(a)h(c)m(hoice)h(of)f(storage)h(order)e(for)g
-(the)h(data.)39 b(P)m(ermMaps)25 b(are)g(also)g(useful)f(for)g
-(discarding)g(un)m(w)m(an)m(ted)0 1467 y(co)s(ordinates)34
-b(so)f(as)g(to)h(reduce)f(the)g(n)m(um)m(b)s(er)f(of)h(dimensions,)h
-(suc)m(h)f(as)g(when)f(selecting)j(a)e(\\slice")i(from)e(a)0
-1580 y(m)m(ulti-dimensional)e(arra)m(y)-8 b(.)p eop end
-%%Page: 56 66
-TeXDict begin 56 65 bop 0 52 a FF(56)1020 b Fy(5)92 b(INTER-RELA)-8
-b(TING)30 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(MAPPINGS\))p
-eop end
-%%Page: 57 67
-TeXDict begin 57 66 bop 3689 52 a FF(57)0 351 y Fz(6)135
-b(Comp)t(ound)44 b(Mappings)h(\(CmpMaps\))0 602 y FF(W)-8
-b(e)45 b(no)m(w)g(turn)e(to)i(a)g(rather)f(sp)s(ecial)h(form)e(of)i
-(Mapping,)j(the)c(CmpMap.)82 b(The)43 b(Mappings)i(w)m(e)f(ha)m(v)m(e)0
-715 y(considered)h(so)g(far)f(ha)m(v)m(e)i(b)s(een)e(atomic,)50
-b(in)45 b(the)f(sense)h(that)g(they)g(p)s(erform)f(pre-de\014ned)f
-(elemen)m(tary)0 828 y(transformations.)k(A)32 b(CmpMap,)h(ho)m(w)m(ev)
-m(er,)h(is)e(a)h(comp)s(ound)e(Mapping.)47 b(In)31 b(essence,)j(it)f
-(is)g(a)f(framew)m(ork)0 941 y(for)h(con)m(taining)h(other)f(Mappings)g
-(and)f(its)i(purp)s(ose)d(is)i(to)g(allo)m(w)i(those)e(Mappings)g(to)g
-(w)m(ork)g(together)i(in)0 1053 y(v)-5 b(arious)34 b(com)m(binations)h
-(while)g(app)s(earing)e(as)i(a)f(single)h(Ob)5 b(ject.)52
-b(A)35 b(CmpMap's)e(b)s(eha)m(viour)h(is)g(therefore)0
-1166 y(not)d(pre-de\014ned,)e(but)g(is)i(determined)f(b)m(y)g(the)h
-(other)f(Mappings)h(it)f(con)m(tains.)0 1456 y Fw(6.1)112
-b(Com)m(bining)39 b(Mappings)g(in)f(Series)0 1676 y FF(Consider)f(a)h
-(simple)g(example)g(based)g(on)f(t)m(w)m(o)i(2-dimensional)g(co)s
-(ordinate)g(systems.)62 b(Supp)s(ose)36 b(that)j(to)0
-1789 y(con)m(v)m(ert)28 b(from)e(one)g(to)h(the)f(other)h(w)m(e)g(m)m
-(ust)f(sw)m(ap)g(the)g(co)s(ordinate)h(order)f(and)g(m)m(ultiply)g(b)s
-(oth)g(co)s(ordinates)0 1902 y(b)m(y)i(5,)i(so)e(that)i(the)e(co)s
-(ordinates)h(\()p Fo(x)1251 1916 y Fv(1)1291 1902 y Fo(;)15
-b(x)1383 1916 y Fv(2)1423 1902 y FF(\))29 b(transform)e(in)m(to)j(\(5)p
-Fo(x)2217 1916 y Fv(2)2257 1902 y Fo(;)15 b FF(5)p Fo(x)2394
-1916 y Fv(1)2434 1902 y FF(\).)41 b(This)27 b(can)i(b)s(e)f(done)g(in)g
-(t)m(w)m(o)i(stages:)111 2155 y(1.)46 b(Apply)30 b(a)h(P)m(ermMap)f(\()
-p Fu(x)p FF(5.10\))j(to)f(sw)m(ap)e(the)g(co)s(ordinate)i(order.)111
-2341 y(2.)46 b(Apply)30 b(a)h(Zo)s(omMap)f(\()p Fu(x)p
-FF(4.8\))j(to)e(m)m(ultiply)f(b)s(oth)g(co)s(ordinate)h(v)-5
-b(alues)31 b(b)m(y)f(the)h(constan)m(t)g(5.)0 2594 y(The)44
-b(P)m(ermMap)h(and)f(Zo)s(omMap)h(are)g(then)g(said)f(to)i(op)s(erate)f
-Fx(in)h(series,)i FF(b)s(ecause)d(they)g(are)g(applied)0
-2707 y(sequen)m(tially)32 b(\()p Fx(c.f.)f FF(Figure)g(2\).)43
-b(W)-8 b(e)32 b(can)f(create)h(a)g(CmpMap)d(that)j(applies)f(these)g
-(Mappings)g(in)f(series)h(as)0 2820 y(follo)m(ws:)227
-3060 y Ft(#include)41 b("ast.h")227 3160 y(AstCmpMap)f(*cmpmap;)227
-3260 y(AstPermMap)g(*permmap;)227 3359 y(AstZoomMap)g(*zoommap;)227
-3559 y(...)227 3758 y(/*)j(Create)e(the)h(individual)e(Mappings.)g(*/)
-227 3857 y({)358 3957 y(int)i(inperm[)f(2)i(])g(=)h({)f(2,)g(1)g(};)358
-4057 y(int)f(outperm[)f(2)i(])g(=)g({)g(2,)g(1)g(};)358
-4156 y(permmap)e(=)i(astPermMap\()c(2,)k(inperm,)d(2,)j(outperm,)d
-(NULL,)i("")h(\);)227 4256 y(})227 4356 y(zoommap)e(=)i(astZoomMap\()c
-(2,)k(5.0,)f("")h(\))227 4555 y(/*)g(Combine)e(them)h(in)g(series.)f
-(*/)227 4654 y(cmpmap)g(=)j(astCmpMap\()39 b(permmap,)h(zoommap,)h(1,)h
-("")h(\);)227 4854 y(/*)g(Annul)f(the)g(individual)d(Mapping)i
-(pointers.)f(*/)227 4953 y(permmap)h(=)i(astAnnul\()d(permmap)h(\);)227
-5053 y(zoommap)g(=)i(astAnnul\()d(zoommap)h(\);)0 5307
-y FF(Here,)31 b(the)g(third)e(argumen)m(t)i(\(1\))h(of)e(the)h
-(constructor)f(function)g(astCmpMap)h(indicates)g(\\in)f(series".)0
-5467 y(When)e(used)f(to)i(transform)e(co)s(ordinates)i(in)f(the)g(forw)
-m(ard)f(direction,)j(the)e(resulting)g(CmpMap)f(will)i(apply)0
-5580 y(the)i(\014rst)f(comp)s(onen)m(t)i(Mapping)f(\(the)g(P)m
-(ermMap\))h(and)e(then)h(the)g(second)g(one)g(\(the)h(Zo)s(omMap\).)43
-b(When)0 5693 y(transforming)29 b(in)g(the)g(in)m(v)m(erse)h
-(direction,)h(it)e(will)h(apply)f(the)g(second)g(one)h(\(in)f(the)h(in)
-m(v)m(erse)g(direction\))g(and)p eop end
-%%Page: 58 68
-TeXDict begin 58 67 bop 0 52 a FF(58)1891 b Fy(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FF(then)40 b(the)g(\014rst)f(one)h
-(\(also)h(in)f(the)g(in)m(v)m(erse)h(direction\).)70
-b(In)40 b(general,)j(although)e(not)f(in)f(this)h(particular)0
-464 y(example,)c(the)e(order)f(in)h(whic)m(h)g(the)g(t)m(w)m(o)h(comp)s
-(onen)m(t)f(Mappings)g(are)g(supplied)f(is)h(signi\014can)m(t.)52
-b(Clearly)-8 b(,)0 577 y(also,)37 b(the)d(Nout)h(attribute)h(\(n)m(um)m
-(b)s(er)d(of)i(output)f(co)s(ordinates\))i(for)e(the)h(\014rst)e
-(Mapping)i(m)m(ust)f(equal)h(the)0 690 y(Nin)30 b(attribute)h(\(n)m(um)
-m(b)s(er)f(of)g(input)g(co)s(ordinates\))h(for)f(the)h(second)f(one.)0
-984 y Fw(6.2)112 b(Com)m(bining)39 b(Mappings)g(in)f(P)m(arallel)0
-1205 y FF(Connecting)21 b(t)m(w)m(o)i(Mappings)e(in)f(series)h(\()p
-Fu(x)p FF(6.1\))j(is)d(not)g(the)g(only)g(w)m(a)m(y)h(of)f(com)m
-(bining)h(them.)37 b(The)21 b(alternativ)m(e,)0 1318
-y Fx(in)27 b(p)-5 b(ar)g(al)5 b(lel,)27 b FF(in)m(v)m(olv)m(es)f
-(applying)e(the)g(t)m(w)m(o)h(Mappings)f(at)h(once)g(but)e(on)h
-(di\013eren)m(t)g(subsets)f(of)h(the)h(co)s(ordinate)0
-1431 y(v)-5 b(alues.)0 1594 y(Consider,)40 b(for)f(example,)j(a)d(set)h
-(of)f(3-dimensional)h(co)s(ordinates)f(and)g(supp)s(ose)e(w)m(e)i(wish)
-g(to)g(transform)0 1707 y(them)d(b)m(y)h(sw)m(apping)f(the)g(\014rst)g
-(t)m(w)m(o)i(co)s(ordinate)f(v)-5 b(alues)36 b(and)g(m)m(ultiplying)h
-(the)g(\014nal)f(one)g(b)m(y)h(5,)h(so)f(that)0 1820
-y(\()p Fo(x)87 1834 y Fv(1)127 1820 y Fo(;)15 b(x)219
-1834 y Fv(2)259 1820 y Fo(;)g(x)351 1834 y Fv(3)390 1820
-y FF(\))29 b(transforms)e(in)m(to)i(\()p Fo(x)1174 1834
-y Fv(2)1214 1820 y Fo(;)15 b(x)1306 1834 y Fv(1)1346
-1820 y Fo(;)g FF(5)p Fo(x)1483 1834 y Fv(3)1523 1820
-y FF(\).)40 b(Again,)30 b(w)m(e)e(can)h(p)s(erform)e(eac)m(h)i(of)f
-(these)h(steps)f(individually)0 1932 y(using)34 b(exactly)j(the)d(same)
-i(P)m(ermMap)f(and)f(Zo)s(omMap)g(as)h(used)f(earlier)i(\()p
-Fu(x)p FF(6.1\).)55 b(In)34 b(this)h(case,)i(ho)m(w)m(ev)m(er,)0
-2045 y(these)31 b(individual)f(Mappings)g(are)h(applied)f(in)g
-(parallel)h(\()p Fx(c.f.)f FF(Figure)h(3\).)0 2208 y(Creating)g(a)g
-(CmpMap)e(for)h(this)h(purp)s(ose)d(is)j(also)g(v)m(ery)g(simple:)227
-2457 y Ft(cmpmap)41 b(=)j(astCmpMap\()39 b(permmap,)h(zoommap,)h(0,)h
-("")h(\);)0 2720 y FF(The)24 b(only)g(di\013erence)h(is)f(that)h(the)f
-(third)f(argumen)m(t)i(of)f(astCmpMap)g(is)g(no)m(w)g(zero,)j(meaning)d
-(\\in)h(parallel".)0 2883 y(As)j(b)s(efore,)g(the)g(order)f(in)g(whic)m
-(h)h(the)g(t)m(w)m(o)h(comp)s(onen)m(t)f(Mappings)f(are)h(supplied)f
-(is)g(signi\014can)m(t.)41 b(The)27 b(\014rst)0 2996
-y(one)j(acts)g(on)g(the)f(lo)m(w)m(er-n)m(um)m(b)s(ered)h(input)f(co)s
-(ordinate)h(v)-5 b(alues)30 b(\(ho)m(w)m(ev)m(er)h(man)m(y)e(it)h
-(needs\))g(and)f(pro)s(duces)0 3109 y(the)d(lo)m(w)m(er-n)m(um)m(b)s
-(ered)g(output)f(co)s(ordinates,)i(while)f(the)g(second)f(Mapping)h
-(acts)h(on)e(the)h(higher-n)m(um)m(b)s(ered)0 3222 y(input)f(co)s
-(ordinates)i(\(ho)m(w)m(ev)m(er)h(man)m(y)e(remain\))h(and)f(generates)
-h(the)g(remaining)f(higher-n)m(um)m(b)s(ered)f(output)0
-3335 y(co)s(ordinates.)48 b(When)32 b(the)h(CmpMap)e(transforms)h(co)s
-(ordinates)h(in)f(the)h(in)m(v)m(erse)g(direction,)h(b)s(oth)e(comp)s
-(o-)0 3447 y(nen)m(t)f(Mappings)f(are)g(applied)h(to)g(the)f(same)h(co)
-s(ordinates,)g(but)f(in)g(the)h(in)m(v)m(erse)g(direction.)0
-3610 y(Note)j(that)f(the)g(Nin)f(and)g(Nout)h(attributes)h(of)e(the)h
-(comp)s(onen)m(t)g(Mappings)f(\()p Fx(i.e.)h FF(the)g(n)m(um)m(b)s(ers)
-e(of)h(input)0 3723 y(and)e(output)g(co)s(ordinates\))h(will)g(sum)e
-(to)i(giv)m(e)h(the)f(Nin)f(and)g(Nout)h(attributes)g(of)f(the)h(o)m(v)
-m(erall)h(CmpMap.)0 4017 y Fw(6.3)112 b(The)38 b(Comp)s(onen)m(t)g
-(Mappings)0 4238 y FF(A)24 b(CmpMap)f(do)s(es)g(not)h(store)g(copies)h
-(of)f(its)g(comp)s(onen)m(t)g(Mappings,)h(but)e(simply)g(holds)g(p)s
-(oin)m(ters)h(to)g(them.)0 4351 y(In)e(the)h(example)g(ab)s(o)m(v)m(e)h
-(\()p Fu(x)p FF(6.1\),)j(w)m(e)c(w)m(ere)g(free)g(to)g(ann)m(ul)g(the)g
-(individual)f(Mapping)g(p)s(oin)m(ters)h(after)g(creating)0
-4464 y(the)j(CmpMap)e(b)s(ecause)i(the)f(p)s(oin)m(ters)h(held)f(in)m
-(ternally)h(b)m(y)f(the)h(CmpMap)f(increased)g(the)h(reference)g(coun)m
-(t)0 4577 y(\(RefCoun)m(t)46 b(attribute\))g(of)g(eac)m(h)h(comp)s
-(onen)m(t)e(Mapping)h(b)m(y)f(one.)87 b(The)45 b(individual)f(comp)s
-(onen)m(ts)i(are)0 4690 y(therefore)33 b(not)g(deleted)g(b)m(y)g
-(astAnn)m(ul,)g(but)f(retained)h(un)m(til)g(the)g(CmpMap)f(itself)h(is)
-g(deleted)g(and)f(ann)m(uls)0 4803 y(the)39 b(p)s(oin)m(ters)h(it)f
-(holds.)67 b(Consisten)m(t)40 b(use)f(of)h(astAnn)m(ul)f(\()p
-Fu(x)p FF(4.9\))j(and/or)d(p)s(oin)m(ter)g(con)m(texts)i(\()p
-Fu(x)p FF(4.10\))h(will)0 4916 y(therefore)31 b(ensure)e(that)i(all)h
-(Ob)5 b(jects)30 b(are)h(deleted)g(at)g(the)g(appropriate)f(time.)0
-5079 y(Note)f(that)f(access)h(to)f(a)g(CmpMap's)e(comp)s(onen)m(t)i
-(Mappings)f(is)h(not)f(generally)i(a)m(v)-5 b(ailable)30
-b(unless)d(p)s(oin)m(ters)0 5191 y(to)22 b(them)f(are)h(retained)g
-(when)e(the)h(CmpMap)g(is)g(created.)39 b(If)21 b(suc)m(h)g(p)s(oin)m
-(ters)g(are)g(retained,)j(then)d(subsequen)m(t)0 5304
-y(mo)s(di\014cations)35 b(to)g(the)f(individual)g(comp)s(onen)m(ts)h
-(can)g(b)s(e)e(used)h(to)h(indirectly)g(mo)s(dify)f(the)g(b)s(eha)m
-(viour)g(of)0 5417 y(the)d(o)m(v)m(erall)h(CmpMap.)0
-5580 y(There)22 b(is)h(an)g(imp)s(ortan)m(t)g(exception)h(to)g(this,)g
-(ho)m(w)m(ev)m(er,)i(b)s(ecause)d(a)g(CmpMap)f(retains)h(a)h(cop)m(y)f
-(of)g(the)g(initial)0 5693 y(In)m(v)m(ert)33 b(\015ag)f(settings)h(of)g
-(eac)m(h)g(of)f(its)h(comp)s(onen)m(ts)f(and)g(uses)g(these)g(in)g
-(order)g(to)h(ignore)g(an)m(y)f(subsequen)m(t)p eop end
-%%Page: 59 69
-TeXDict begin 59 68 bop 0 52 a Fy(6.4)92 b(Creating)31
-b(More)g(Complex)f(Mappings)2105 b FF(59)0 351 y(external)33
-b(c)m(hanges.)47 b(This)31 b(means)h(that)h(y)m(ou)f(ma)m(y)h(in)m(v)m
-(ert)g(either)f(comp)s(onen)m(t)h(Mapping)f(b)s(efore)f(inserting)0
-464 y(it)d(in)m(to)g(a)f(CmpMap)f(and)h(need)g(not)g(w)m(orry)g(if)g(y)
-m(ou)g(un-in)m(v)m(ert)h(it)f(again)h(later.)41 b(The)27
-b(CmpMap's)f(b)s(eha)m(viour)0 577 y(will)31 b(not)f(b)s(e)g
-(a\013ected)i(b)m(y)e(the)h(later)g(action.)0 866 y Fw(6.4)112
-b(Creating)38 b(More)g(Complex)g(Mappings)0 1084 y FF(Because)33
-b(a)f(CmpMap)f(is)h(itself)h(a)f(Mapping,)g(an)m(y)h(existing)f(CmpMap)
-f(can)i(substitute)e(\()p Fu(x)p FF(4.3\))j(as)e(a)h(com-)0
-1197 y(p)s(onen)m(t)40 b(Mapping)h(when)f(constructing)h(a)g(new)g
-(CmpMap)f(using)g(astCmpMap.)72 b(This)39 b(has)i(the)g(e\013ect)0
-1310 y(of)h(nesting)f(one)h(CmpMap)f(inside)g(another)g(and)g(op)s(ens)
-g(up)f(man)m(y)i(new)f(p)s(ossibilities.)74 b(F)-8 b(or)43
-b(example,)0 1423 y(com)m(bining)31 b(three)f(Mappings)h(in)f(series)g
-(can)h(b)s(e)f(accomplished)h(as)f(follo)m(ws:)227 1659
-y Ft(AstMapping)40 b(*map1,)h(*map2,)g(*map3;)227 1858
-y(...)227 2057 y(cmpmap)g(=)j(astCmpMap\()39 b(map1,)j(astCmpMap\()d
-(map2,)i(map3,)h(1,)h("")g(\),)f(1,)h("")g(\);)0 2307
-y FF(The)26 b(w)m(a)m(y)h(in)e(whic)m(h)h(the)g(individual)g(comp)s
-(onen)m(t)g(Mappings)g(are)h(group)s(ed)e(within)g(the)h(nested)g
-(CmpMaps)0 2419 y(is)k(not)h(usually)f(imp)s(ortan)m(t.)0
-2579 y(A)d(similar)h(tec)m(hnique)g(can)g(b)s(e)f(used)f(to)i(com)m
-(bine)g(m)m(ultiple)g(Mappings)g(in)f(parallel)h(and,)g(of)f(course,)i
-(mixed)0 2692 y(series)k(and)g(parallel)h(com)m(binations)g(are)g(also)
-g(p)s(ossible)f(\(Figure)g(4\).)50 b(There)33 b(is)g(no)g(built-in)g
-(limit)h(to)f(ho)m(w)0 2805 y(man)m(y)23 b(CmpMaps)f(ma)m(y)i(b)s(e)e
-(nested)h(in)g(this)g(w)m(a)m(y)-8 b(,)26 b(so)d(this)g(mec)m(hanism)h
-(pro)m(vides)f(an)g(inde\014nitely)g(extensible)0 2918
-y(metho)s(d)30 b(of)g(building)g(complex)h(Mappings)f(out)h(of)f(the)h
-(elemen)m(tal)h(building)e(blo)s(c)m(ks)h(pro)m(vided)f(b)m(y)g(AST.)0
-3077 y(In)i(practice,)i(y)m(ou)f(migh)m(t)h(not)e(need)h(to)g
-(construct)g(suc)m(h)f(complex)h(CmpMaps)f(y)m(ourself)h(v)m(ery)g
-(frequen)m(tly)-8 b(,)0 3190 y(but)27 b(they)h(will)g(often)g(b)s(e)e
-(returned)h(b)m(y)g(AST)g(routines.)40 b(Nested)28 b(CmpMaps)f
-(underlie)f(the)i(library's)g(en)m(tire)0 3303 y(abilit)m(y)k(to)f
-(represen)m(t)f(a)h(wide)f(range)h(of)g(di\013eren)m(t)f(co)s(ordinate)
-i(transformations.)0 3591 y Fw(6.5)112 b(Example|T)-9
-b(ransforming)40 b(Bet)m(w)m(een)d(Tw)m(o)g(Calibrated)i(Images)0
-3810 y FF(Consider,)27 b(as)f(a)h(practical)i(example)e(of)f(CmpMaps,)h
-(t)m(w)m(o)h(images)f(of)g(the)g(sky)-8 b(.)39 b(Supp)s(ose)25
-b(that)i(for)g(eac)m(h)g(im-)0 3923 y(age)h(w)m(e)g(ha)m(v)m(e)h(a)e
-(Mapping)g(whic)m(h)g(con)m(v)m(erts)i(from)e(pixel)g(co)s(ordinates)h
-(to)g(a)f(standard)g(celestial)j(co)s(ordinate)0 4035
-y(system,)38 b(sa)m(y)e(FK5)h(\(J2000.0\).)60 b(If)36
-b(w)m(e)g(wish)f(to)i(in)m(ter-compare)g(these)g(images,)h(w)m(e)f(can)
-f(do)g(so)g(b)m(y)g(using)0 4148 y(this)c(celestial)j(co)s(ordinate)f
-(system)f(to)g(align)g(them.)47 b(That)33 b(is,)g(w)m(e)g(\014rst)f
-(con)m(v)m(ert)i(from)e(pixel)h(co)s(ordinates)0 4261
-y(in)i(the)h(\014rst)f(image)h(in)m(to)h(FK5)f(co)s(ordinates)g(and)f
-(w)m(e)h(then)f(con)m(v)m(ert)i(from)e(FK5)h(co)s(ordinates)h(in)m(to)f
-(pixel)0 4374 y(co)s(ordinates)31 b(in)f(the)h(second)f(image.)0
-4534 y(If)35 b(\\mapa")h(and)f(\\mapb")g(are)h(p)s(oin)m(ters)f(to)h
-(our)f(t)m(w)m(o)i(original)f(Mappings,)h(w)m(e)e(could)h(form)f(a)g
-(CmpMap)0 4647 y(whic)m(h)29 b(transforms)g(directly)i(b)s(et)m(w)m
-(een)f(the)g(pixel)g(co)s(ordinates)g(of)g(the)g(\014rst)f(and)g
-(second)g(images)i(b)m(y)f(com-)0 4760 y(bining)g(these)h(Mappings,)f
-(as)h(follo)m(ws:)227 4996 y Ft(AstCmpMap)40 b(*alignmap;)227
-5095 y(AstMapping)g(*mapa,)h(*mapb;)227 5295 y(...)227
-5494 y(astInvert\()f(mapb)i(\);)227 5593 y(alignmap)f(=)i(astCmpMap\()c
-(mapa,)j(mapb,)f(1,)i("")g(\);)227 5693 y(astInvert\()d(mapb)i(\);)p
-eop end
-%%Page: 60 70
-TeXDict begin 60 69 bop 0 52 a FF(60)1891 b Fy(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))0 351 y FF(Here,)47 b(w)m(e)d(ha)m(v)m(e)g
-(used)e(astIn)m(v)m(ert)i(\()p Fu(x)p FF(5.5\))i(to)d(in)m(v)m(ert)h
-(\\mapb")g(b)s(efore)e(inserting)h(it)h(in)m(to)g(the)f(CmpMap)0
-464 y(b)s(ecause,)g(as)e(supplied,)h(it)e(con)m(v)m(erted)i(in)e(the)h
-(wrong)f(direction.)71 b(Afterw)m(ards,)43 b(w)m(e)e(in)m(v)m(ert)g(it)
-g(again)h(to)0 577 y(return)26 b(it)i(to)f(its)h(original)g(state.)41
-b(The)27 b(CmpMap,)g(ho)m(w)m(ev)m(er,)i(will)f(ignore)f(this)g
-(subsequen)m(t)g(c)m(hange)h(\()p Fu(x)p FF(6.3\).)0
-744 y(The)d(forw)m(ard)f(transformation)i(of)f(the)g(resulting)g
-(CmpMap)g(will)g(no)m(w)g(transform)g(from)f(pixel)i(co)s(ordinates)0
-857 y(in)j(the)g(\014rst)g(image)h(to)g(pixel)g(co)s(ordinates)f(in)g
-(the)h(second)f(image,)i(while)e(its)h(in)m(v)m(erse)g(transformation)f
-(will)0 970 y(con)m(v)m(ert)j(in)e(the)h(opp)s(osite)f(direction.)0
-1276 y Fw(6.6)112 b(Ov)m(er-Complex)39 b(Comp)s(ound)g(Mappings)0
-1503 y FF(While)h(a)f(CmpMap)f(pro)m(vides)h(a)g(v)m(ery)g(\015exible)h
-(w)m(a)m(y)f(of)g(constructing)h(arbitrarily)f(complex)h(Mappings)0
-1616 y(\()p Fu(x)p FF(6.4\),)34 b(it)e(unfortunately)f(also)h(pro)m
-(vides)g(an)f(opp)s(ortunit)m(y)g(for)g(represen)m(ting)h(simple)f
-(Mappings)g(in)h(com-)0 1729 y(plex)d(w)m(a)m(ys.)41
-b(Sometimes,)30 b(unnecessary)e(complexit)m(y)j(can)e(b)s(e)f
-(di\016cult)h(to)g(a)m(v)m(oid)h(but)f(can)g(obscure)f(imp)s(or-)0
-1842 y(tan)m(t)j(simpli\014cations.)0 2009 y(Consider)46
-b(the)g(example)h(ab)s(o)m(v)m(e)h(\()p Fu(x)p FF(6.5\),)53
-b(in)46 b(whic)m(h)g(w)m(e)h(in)m(ter-related)h(t)m(w)m(o)g(images)f
-(of)g(the)f(sky)h Fx(via)f FF(a)0 2122 y(CmpMap.)38 b(If)26
-b(the)g(t)m(w)m(o)h(images)g(turned)e(out)h(to)h(b)s(e)e(simply)h
-(o\013set)h(from)e(eac)m(h)i(other)g(b)m(y)e(a)i(shift)e(along)i(eac)m
-(h)0 2234 y(pixel)g(axis,)h(then)e(this)h(approac)m(h)g(w)m(ould)f
-(align)h(them)g(correctly)-8 b(,)29 b(but)d(it)h(w)m(ould)g(b)s(e)f
-(ine\016cien)m(t.)40 b(This)26 b(is)h(b)s(e-)0 2347 y(cause)c(it)g(w)m
-(ould)f(in)m(tro)s(duce)g(unnecessary)g(and)g(exp)s(ensiv)m(e)g
-(transformations)h(to)g(and)f(from)g(an)g(in)m(termediate)0
-2460 y(celestial)33 b(co)s(ordinate)e(system,)g(whereas)f(a)h(simple)f
-(shift)g(of)h(pixel)f(origin)h(w)m(ould)f(su\016ce.)0
-2627 y(Recognising)41 b(that)f(a)f(simpler)g(and)g(more)h(e\016cien)m
-(t)h(solution)e(exists)h(ob)m(viously)g(requires)f(a)h(little)h(more)0
-2740 y(than)34 b(simply)g(joining)h(t)m(w)m(o)h(Mappings)f(end-to-end.)
-53 b(W)-8 b(e)36 b(m)m(ust)e(also)i(determine)f(whether)f(the)g
-(resulting)0 2853 y(CmpMap)c(is)h(more)g(complex)h(than)f(it)h(needs)e
-(to)i(b)s(e,)f Fx(i.e.)f FF(con)m(tains)i(redundan)m(t)e(information.)
-43 b(If)31 b(it)g(is,)h(w)m(e)0 2966 y(then)e(need)g(a)h(w)m(a)m(y)g
-(to)g(simplify)f(it.)0 3132 y(The)41 b(problem)g(is)g(not)h(alw)m(a)m
-(ys)h(just)e(one)g(of)h(e\016ciency)-8 b(,)46 b(ho)m(w)m(ev)m(er.)75
-b(Sometimes)42 b(w)m(e)g(ma)m(y)g(also)h(need)e(to)0
-3245 y(kno)m(w)c(something)g(ab)s(out)f(the)h(actual)h(form)f(a)g
-(Mapping)f(tak)m(es|)p Fx(i.e.)i FF(the)f(nature)f(of)h(the)g(op)s
-(erations)g(it)0 3358 y(p)s(erforms.)i(Unnecessary)29
-b(complexit)m(y)h(can)f(obscure)g(this,)g(but)f(suc)m(h)h(complexit)m
-(y)h(can)g(easily)g(accum)m(ulate)0 3471 y(during)f(normal)h(data)i
-(pro)s(cessing.)0 3638 y(F)-8 b(or)35 b(example,)i(a)e(Mapping)f(that)h
-(transforms)f(pixel)h(co)s(ordinates)g(in)m(to)h(p)s(ositions)e(on)h
-(the)g(sky)f(migh)m(t)h(b)s(e)0 3751 y(rep)s(eatedly)29
-b(mo)s(di\014ed)e(as)i(c)m(hanges)g(are)g(made)g(to)g(the)g(shap)s(e)e
-(and)h(size)i(of)e(the)h(image.)41 b(T)m(ypically)-8
-b(,)31 b(on)d(eac)m(h)0 3864 y(o)s(ccasion,)e(another)d(Mapping)g(will)
-h(b)s(e)e(concatenated)j(to)f(re\015ect)g(what)f(has)f(happ)s(ened)g
-(to)h(the)h(image.)39 b(This)0 3976 y(could)26 b(so)s(on)g(mak)m(e)h
-(it)f(di\016cult)g(to)g(discern)g(the)g(o)m(v)m(erall)i(nature)e(of)g
-(the)g(transformation)g(from)g(the)g(complex)0 4089 y(CmpMap)37
-b(that)h(accum)m(ulates.)65 b(If)37 b(only)h(shifts)f(of)h(origin)g(w)m
-(ere)h(in)m(v)m(olv)m(ed)g(on)f(eac)m(h)h(o)s(ccasion,)i(ho)m(w)m(ev)m
-(er,)0 4202 y(they)31 b(could)f(b)s(e)g(com)m(bined)g(in)m(to)i(a)e
-(single)h(shift)f(whic)m(h)h(could)f(b)s(e)g(represen)m(ted)g(m)m(uc)m
-(h)g(more)h(simply)-8 b(.)0 4369 y(Supp)s(ose)37 b(w)m(e)j(no)m(w)f(w)m
-(an)m(ted)h(to)g(represen)m(t)f(our)g(image's)h(celestial)i(co)s
-(ordinate)e(calibration)h(using)d(FITS)0 4482 y(con)m(v)m(en)m(tions)h
-(\()p Fu(x)p FF(17\).)64 b(This)36 b(requires)h(AST)g(to)h(determine)f
-(whether)g(the)g(Mapping)h(whic)m(h)f(relates)h(pixel)0
-4595 y(co)s(ordinate)33 b(to)g(sky)f(p)s(ositions)g(conforms)g(to)g
-(the)h(FITS)e(mo)s(del)h(\(for)g(example,)i(whether)d(it)i(is)f(equiv)
--5 b(alen)m(t)0 4708 y(to)31 b(applying)f(a)h(single)g(set)f(of)h
-(shifts)e(and)h(scale)i(factors)f(follo)m(w)m(ed)g(b)m(y)g(a)f(map)g
-(pro)5 b(jection\).)42 b(Clearly)-8 b(,)31 b(there)0
-4821 y(is)f(an)h(imp)s(ortan)m(t)f(use)g(here)h(for)f(some)g(means)h
-(of)f(simplifying)g(the)h(in)m(ternal)g(structure)f(of)h(a)f(CmpMap.)0
-5127 y Fw(6.7)112 b(Simplifying)40 b(Comp)s(ound)f(Mappings)0
-5354 y FF(The)28 b(abilit)m(y)h(to)g(simplify)f(comp)s(ound)f(Mappings)
-h(is)g(pro)m(vided)g(b)m(y)g(the)h(astSimplify)f(function.)40
-b(This)27 b(func-)0 5467 y(tion)h(encapsulates)h(a)g(n)m(um)m(b)s(er)d
-(of)i(heuristics)g(for)g(con)m(v)m(erting)i(Mappings,)e(or)g(com)m
-(binations)i(of)e(Mappings)0 5580 y(within)e(a)g(CmpMap,)h(in)m(to)g
-(simpler,)g(equiv)-5 b(alen)m(t)27 b(ones.)40 b(When)26
-b(applied)g(to)h(a)g(CmpMap,)f(astSimplify)g(tries)0
-5693 y(to)41 b(reduce)f(the)g(n)m(um)m(b)s(er)f(of)h(individual)f
-(Mappings)h(within)g(it)g(b)m(y)g(merging)h(neigh)m(b)s(ouring)e(comp)s
-(onen)m(t)p eop end
-%%Page: 61 71
-TeXDict begin 61 70 bop 0 52 a Fy(6.7)92 b(Simplifying)30
-b(Comp)s(ound)e(Mappings)2148 b FF(61)592 1403 y @beginspecial
-43 @llx 353 @lly 522 @urx 564 @ury 3113 @rwi @setspecial
-%%BeginDocument: sun211_figures/simpexamp.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1599 a(Figure)38 b(10:)56 b(An)37 b(o)m(v)m(er-complex)j
-(comp)s(ound)c(Mapping,)k(consisting)e(of)g(P)m(ermMaps,)i(Zo)s(omMaps)
-d(and)g(a)0 1712 y(UnitMap,)28 b(whic)m(h)e(can)g(b)s(e)g(simpli\014ed)
-f(to)i(b)s(ecome)f(a)h(single)g(UnitMap.)40 b(The)25
-b(enclosing)i(nested)f(CmpMaps)0 1825 y(ha)m(v)m(e)32
-b(b)s(een)d(omitted)j(for)e(clarit)m(y)-8 b(.)0 2188
-y(Mappings)33 b(together.)51 b(It)34 b(will)f(do)h(this)f(with)g(b)s
-(oth)f(series)i(and)f(parallel)h(com)m(binations)h(of)e(Mappings,)h(or)
-0 2301 y(b)s(oth,)c(and)g(will)g(handle)g(CmpMaps)g(nested)g(to)h(an)m
-(y)g(depth)e(\()p Fu(x)p FF(6.4\).)0 2458 y(T)-8 b(o)29
-b(illustrate)h(ho)m(w)f(astSimplify)f(w)m(orks,)i(consider)e(the)h(com)
-m(bination)h(of)f(Mappings)g(sho)m(wn)f(in)g(Figure)h(10.)40
-2570 y(If)h(this)h(w)m(ere)f(con)m(tained)i(in)e(a)h(CmpMap,)f(it)h
-(could)f(b)s(e)g(simpli\014ed)f(as)i(follo)m(ws:)227
-2796 y Ft(AstMapping)40 b(*simpler;)227 2996 y(...)227
-3195 y(simpler)h(=)i(astSimplify\()c(cmpmap)i(\);)0 3434
-y FF(In)34 b(this)g(case,)j(the)d(result)g(w)m(ould)g(b)s(e)g(a)h
-(simple)f(3-dimensional)h(UnitMap)g(\(the)g(iden)m(tit)m(y)h
-(Mapping\).)53 b(T)-8 b(o)0 3547 y(reac)m(h)31 b(this)f(conclusion,)i
-(astSimplify)e(will)h(ha)m(v)m(e)g(made)g(a)f(n)m(um)m(b)s(er)f(of)i
-(deductions,)f(roughly)g(as)h(follo)m(ws:)111 3786 y(1.)46
-b(The)37 b(t)m(w)m(o)h(2-dimensional)g(Zo)s(omMaps)f(in)g(series)g(are)
-h(equiv)-5 b(alen)m(t)38 b(to)g(a)g(single)f(Zo)s(omMap)g(with)g(a)227
-3899 y(com)m(bined)31 b(Zo)s(om)f(factor)h(of)g(unit)m(y)-8
-b(.)41 b(This,)30 b(in)g(turn,)f(is)i(equiv)-5 b(alen)m(t)32
-b(to)f(a)f(2-dimensional)i(UnitMap.)111 4081 y(2.)46
-b(This)32 b(UnitMap)h(in)f(parallel)i(with)e(the)g(other)h
-(1-dimensional)g(UnitMap)g(is)g(equiv)-5 b(alen)m(t)34
-b(to)f(a)g(single)227 4194 y(3-dimensional)d(UnitMap.)40
-b(This)28 b(UnitMap,)i(sandwic)m(hed)e(b)s(et)m(w)m(een)h(an)m(y)g
-(other)g(pair)g(of)f(Mappings,)227 4307 y(can)j(then)f(b)s(e)g
-(eliminated.)111 4489 y(3.)46 b(The)h(remaining)g(t)m(w)m(o)h(P)m
-(ermMaps)f(in)f(series)h(are)h(equiv)-5 b(alen)m(t)48
-b(to)f(a)h(single)f(3-dimensional)h(P)m(er-)227 4602
-y(mMap.)e(When)32 b(these)h(are)f(com)m(bined,)h(the)g(resulting)f(P)m
-(ermMap)g(is)g(found)f(to)i(b)s(e)f(equiv)-5 b(alen)m(t)33
-b(to)g(a)227 4715 y(3-dimensional)f(UnitMap.)0 4954 y(This)27
-b(example)i(is)f(a)g(little)i(con)m(triv)m(ed,)g(but)d(illustrates)i
-(ho)m(w)f(astSimplify)f(can)i(deal)f(with)g(ev)m(en)g(quite)h(com-)0
-5067 y(plicated)36 b(comp)s(ound)e(Mappings)h(through)f(a)i(series)g
-(of)f(incremen)m(tal)h(simpli\014cations.)56 b(Where)36
-b(p)s(ossible,)0 5180 y(this)26 b(will)h(result)f(in)g(either)h(a)g
-(simpler)f(comp)s(ound)f(Mapping)h(or,)i(if)e(feasible,)i(an)e(atomic)i
-(\(non-comp)s(ound\))0 5293 y(Mapping,)35 b(as)f(here.)51
-b(If)33 b(no)h(simpli\014cation)g(is)g(p)s(ossible,)h(astSimplify)f
-(will)g(just)f(return)g(a)h(p)s(oin)m(ter)g(to)g(the)0
-5405 y(original)e(Mapping.)0 5562 y(Although)25 b(astSimplify)f(cannot)
-h(iden)m(tify)g(ev)m(ery)g(simpli\014cation)h(that)f(is)f
-(theoretically)k(p)s(ossible,)d(su\016cien)m(t)0 5675
-y(rules)30 b(are)h(included)e(to)i(deal)g(with)f(the)h(most)g(common)f
-(and)g(imp)s(ortan)m(t)h(cases.)p eop end
-%%Page: 62 72
-TeXDict begin 62 71 bop 0 52 a FF(62)1891 b Fy(6)91 b(COMPOUND)31
-b(MAPPINGS)f(\(CMPMAPS\))p eop end
-%%Page: 63 73
-TeXDict begin 63 72 bop 3689 52 a FF(63)0 351 y Fz(7)135
-b(Represen)l(ting)46 b(Co)t(ordinate)g(Systems)g(\(F)-11
-b(rames\))0 591 y FF(An)32 b(AST)f(F)-8 b(rame)33 b(is)f(an)f(Ob)5
-b(ject)32 b(that)h(is)f(used)f(to)i(represen)m(t)f(a)g(co)s(ordinate)h
-(system.)45 b(Con)m(trast)33 b(this)f(with)0 704 y(a)c(Mapping)g(\()p
-Fu(x)p FF(5\),)j(whic)m(h)d(is)g(used)f(to)i(describ)s(e)e(ho)m(w)h(to)
-h(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(co)s(ordinate)g(systems.)40
-b(The)27 b(t)m(w)m(o)0 817 y(concepts)k(are)g(complemen)m(tary)h(and)d
-(w)m(e)i(will)g(see)g(ho)m(w)f(they)h(w)m(ork)f(together)i(in)e
-Fu(x)p FF(13.)0 967 y(In)d(this)h(section)g(w)m(e)g(will)g(discuss)f
-(only)h(basic)g(F)-8 b(rames,)29 b(whic)m(h)f(represen)m(t)g(Cartesian)
-g(co)s(ordinate)g(systems.)0 1080 y(More)34 b(sp)s(ecialised)f(t)m(yp)s
-(es)g(of)g(F)-8 b(rame)34 b(\()p Fx(e.g.)f FF(the)g(SkyF)-8
-b(rame,)34 b(whic)m(h)e(represen)m(ts)h(celestial)j(co)s(ordinate)e
-(sys-)0 1193 y(tems,)i(and)e(the)h(Sp)s(ecF)-8 b(rame,)36
-b(whic)m(h)f(represen)m(ts)f(sp)s(ectral)h(co)s(ordinate)g(systems\))g
-(are)g(co)m(v)m(ered)i(later)e(\()p Fu(x)p FF(8)0 1306
-y(and)24 b Fu(x)p FF(9\))h(and,)g(naturally)-8 b(,)27
-b(inherit)d(the)g(prop)s(erties)g(and)g(b)s(eha)m(viour)g(of)g(the)h
-(simple)f(F)-8 b(rames)25 b(discussed)e(here.)0 1580
-y Fw(7.1)112 b(The)38 b(F)-9 b(rame)38 b(Mo)s(del)0 1789
-y FF(The)30 b(b)s(est)f(w)m(a)m(y)i(to)g(think)f(ab)s(out)g(a)g(F)-8
-b(rame)32 b(is)e(lik)m(e)h(the)g(frame)f(that)g(y)m(ou)h(w)m(ould)f
-(plot)g(around)g(a)g(graph.)40 b(In)0 1902 y(t)m(w)m(o)34
-b(dimensions,)f(y)m(ou)g(w)m(ould)g(ha)m(v)m(e)h(an)e(\\)p
-Fo(x)p FF(")i(and)e(a)h(\\)p Fo(y)s FF(")g(axis,)h(a)g(title)g(on)e
-(the)h(graph)g(and)f(lab)s(els)h(on)f(the)0 2015 y(axes,)g(together)h
-(with)e(an)g(indication)h(of)g(the)f(ph)m(ysical)h(units)f(b)s(eing)g
-(plotted.)44 b(The)30 b(v)-5 b(alues)32 b(mark)m(ed)f(along)0
-2128 y(eac)m(h)37 b(axis)f(w)m(ould)g(b)s(e)f(formatted)h(in)f(a)h(h)m
-(uman-readable)g(w)m(a)m(y)-8 b(.)58 b(The)35 b(frame)h(around)f(a)h
-(graph)f(therefore)0 2240 y(de\014nes)e(a)h(co)s(ordinate)h(space)g
-(within)e(whic)m(h)h(y)m(ou)g(can)h(lo)s(cate)g(p)s(oin)m(ts,)g(dra)m
-(w)f(lines,)h(calculate)i(distances,)0 2353 y Fx(etc.)0
-2503 y FF(An)30 b(AST)h(F)-8 b(rame)31 b(w)m(orks)g(in)g(m)m(uc)m(h)f
-(the)h(same)h(w)m(a)m(y)-8 b(,)32 b(em)m(b)s(o)s(dying)e(all)i(of)f
-(these)g(concepts)h(and)e(a)h(few)g(more.)0 2616 y(It)f(also)h(allo)m
-(ws)g(an)m(y)f(n)m(um)m(b)s(er)f(of)h(axes,)h(whic)m(h)e(means)h(that)h
-(a)f(F)-8 b(rame)31 b(can)f(represen)m(t)g(co)s(ordinate)g(systems)0
-2729 y(with)g(an)m(y)h(n)m(um)m(b)s(er)e(of)h(dimensions.)40
-b(Y)-8 b(ou)31 b(sp)s(ecify)f(ho)m(w)h(man)m(y)f(when)g(y)m(ou)g
-(create)i(it.)0 2879 y(Remem)m(b)s(er)25 b(that)h(the)f(basic)h(F)-8
-b(rame)26 b(w)m(e)g(are)g(considering)f(here)g(is)h(completely)h
-(general.)40 b(It)25 b(kno)m(ws)g(nothing)0 2992 y(of)e(celestial)i(co)
-s(ordinates,)g(for)e(example,)i(and)d(all)h(its)g(axes)h(are)f(equiv)-5
-b(alen)m(t.)39 b(It)23 b(can)g(b)s(e)f(adapted)h(to)g(describ)s(e)0
-3105 y(an)m(y)30 b(general)g(purp)s(ose)e(Cartesian)h(co)s(ordinate)i
-(system)e(b)m(y)g(setting)i(its)e(attributes,)i(suc)m(h)e(as)g(its)h
-(Title)g(and)0 3218 y(axis)h(Lab)s(els,)f Fx(etc.)g FF(to)h
-(appropriate)g(v)-5 b(alues.)0 3492 y Fw(7.2)112 b(Creating)38
-b(a)g(F)-9 b(rame)0 3701 y FF(Creating)31 b(a)g(F)-8
-b(rame)31 b(is)f(straigh)m(tforw)m(ard)i(and)d(follo)m(ws)j(the)e
-(usual)g(pattern:)227 3899 y Ft(#include)41 b("ast.h")227
-3999 y(astFrame)g(*frame;)227 4198 y(...)227 4397 y(frame)h(=)h
-(astFrame\()d(2,)j("")f(\);)0 4608 y FF(The)28 b(\014rst)g(argumen)m(t)
-h(of)g(the)g(astF)-8 b(rame)30 b(constructor)f(function)f(sp)s
-(eci\014es)h(the)f(n)m(um)m(b)s(er)g(of)h(axes)g(whic)m(h)f(the)0
-4721 y(F)-8 b(rame)31 b(should)f(ha)m(v)m(e.)0 4996 y
-Fw(7.3)112 b(Using)38 b(a)g(F)-9 b(rame)39 b(as)f(a)f(Mapping)0
-5204 y FF(W)-8 b(e)38 b(should)d(brie\015y)h(p)s(oin)m(t)g(out)h(that)g
-(the)f(F)-8 b(rame)38 b(w)m(e)f(created)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FF(7.2\))g(is)f(also)g(a)g(Mapping)f(\()p Fu(x)p
-FF(5.1\))0 5317 y(and)30 b(therefore)h(inherits)f(the)g(prop)s(erties)g
-(and)g(b)s(eha)m(viour)g(common)g(to)h(other)g(Mappings.)0
-5467 y(One)i(w)m(a)m(y)h(to)g(see)g(this)f(is)g(to)h(set)g(the)f(F)-8
-b(rame's)34 b(Rep)s(ort)f(attribute)h(\(inherited)f(from)g(the)g
-(Mapping)g(class\))0 5580 y(to)i(a)g(non-zero)f(v)-5
-b(alue)35 b(and)f(pass)g(the)g(F)-8 b(rame)35 b(p)s(oin)m(ter)f(to)h(a)
-g(co)s(ordinate)g(transformation)g(function,)g(suc)m(h)0
-5693 y(as)c(astT)-8 b(ran2.)p eop end
-%%Page: 64 74
-TeXDict begin 64 73 bop 0 52 a FF(64)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y Ft(double)41 b(xin[)h(5)h(])h(=)f({)g(0.0,)f(1.0,)g(2.0,)g(3.0,)g
-(4.0,)g(5.0)g(};)227 451 y(double)f(yin[)h(5)h(])h(=)f({)g(0.0,)f(2.0,)
-g(4.0,)g(6.0,)g(8.0,)g(10.0)g(};)227 551 y(double)f(xout[)h(5)h(];)227
-650 y(double)e(yout[)h(5)h(];)227 849 y(...)227 1049
-y(astSet\()e(frame,)g("Report=1")f(\);)227 1148 y(astTran2\()g(frame,)h
-(5,)i(xin,)f(yin,)g(1,)h(xout,)e(yout)h(\);)0 1445 y
-FF(The)30 b(resulting)g(output)g(migh)m(t)h(then)g(lo)s(ok)f(lik)m(e)i
-(this:)227 1742 y Fq(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227
-1855 y(\(2,)g(4\))g(-->)g(\(2,)g(4\))227 1968 y(\(3,)g(6\))g(-->)g
-(\(3,)g(6\))227 2081 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227
-2194 y(\(5,)g(10\))g(-->)g(\(5,)g(10\))0 2491 y FF(This)39
-b(is)h(not)g(v)m(ery)g(exciting)h(b)s(ecause)e(a)i(F)-8
-b(rame)40 b(implemen)m(ts)g(an)g(iden)m(tit)m(y)h(transformation)f
-(just)f(lik)m(e)i(a)0 2604 y(UnitMap)c(\()p Fu(x)p FF(5.9\).)60
-b(Ho)m(w)m(ev)m(er,)40 b(it)d(illustrates)g(that)g(a)f(F)-8
-b(rame)37 b(can)g(b)s(e)e(used)h(as)g(a)h(Mapping)f(and)f(that)i(its)0
-2717 y(Nin)30 b(and)g(Nout)h(attributes)g(are)g(b)s(oth)e(equal)i(to)g
-(the)g(n)m(um)m(b)s(er)e(of)h(F)-8 b(rame)32 b(axes.)0
-2891 y(When)d(w)m(e)i(consider)e(more)h(sp)s(ecialised)g(F)-8
-b(rames)31 b(\()p Fx(e.g.)e Fu(x)p FF(13\),)j(w)m(e)e(will)g(see)h
-(that)f(using)f(them)h(as)g(Mappings)0 3004 y(can)h(b)s(e)e(v)m(ery)i
-(useful)f(indeed.)0 3336 y Fw(7.4)112 b(F)-9 b(rame)39
-b(Axis)e(A)m(ttributes)0 3575 y FF(F)-8 b(rames)36 b(ha)m(v)m(e)h(a)e
-(n)m(um)m(b)s(er)f(of)i(attributes)g(whic)m(h)f(can)g(tak)m(e)i(m)m
-(ultiple)f(v)-5 b(alues,)37 b(one)f(for)f(eac)m(h)i(axis.)56
-b(These)0 3688 y(separate)42 b(v)-5 b(alues)42 b(are)g(iden)m(ti\014ed)
-g(b)m(y)f(app)s(ending)f(the)i(axis)g(n)m(um)m(b)s(er)e(in)h(paren)m
-(theses)h(to)g(the)g(attribute)0 3801 y(name.)76 b(F)-8
-b(or)43 b(example,)j(the)c(Lab)s(el\(1\))h(attribute)g(is)f(a)h(c)m
-(haracter)g(string)f(con)m(taining)i(the)e(lab)s(el)h(whic)m(h)0
-3913 y(app)s(ears)30 b(on)g(the)g(\014rst)g(axis.)0 4088
-y(Axis)k(attributes)h(are)g(accessed)g(in)f(the)g(same)h(w)m(a)m(y)g
-(as)f(all)h(other)g(attributes)f(\()p Fu(x)p FF(4.5,)k
-Fu(x)p FF(4.6)d(and)f Fu(x)p FF(4.7\).)54 b(F)-8 b(or)0
-4201 y(example,)31 b(the)g(Lab)s(el)f(on)g(the)h(second)f(axis)h(migh)m
-(t)g(b)s(e)f(obtained)h(as)f(follo)m(ws:)227 4484 y Ft(const)42
-b(char)g(*label;)227 4684 y(...)227 4883 y(label)g(=)h(astGetC\()d
-(frame,)h("Label\(2\)")f(\);)0 5180 y FF(Other)d(attribute)i(access)g
-(functions)e(\(astSetX,)i(astT)-8 b(est)39 b(and)e(astClear\))i(ma)m(y)
-f(also)h(b)s(e)e(applied)h(to)g(axis)0 5293 y(attributes)31
-b(in)f(the)h(same)f(w)m(a)m(y)-8 b(.)0 5467 y(If)27 b(the)h(axis)g(n)m
-(um)m(b)s(er)f(is)g(stored)h(in)f(a)h(program)g(v)-5
-b(ariable,)29 b(then)e(its)i(v)-5 b(alue)28 b(m)m(ust)f(b)s(e)g
-(formatted)i(to)f(generate)0 5580 y(a)43 b(suitable)h(attribute)f(name)
-g(b)s(efore)g(using)f(this)h(to)h(access)g(the)f(attribute)h(itself.)79
-b(F)-8 b(or)43 b(example,)k(the)0 5693 y(follo)m(wing)32
-b(will)f(prin)m(t)f(out)g(the)h(Lab)s(el)f(v)-5 b(alue)31
-b(for)f(eac)m(h)i(axis)e(of)h(a)g(F)-8 b(rame:)p eop
-end
-%%Page: 65 75
-TeXDict begin 65 74 bop 0 52 a Fy(7.5)92 b(F)-8 b(rame)31
-b(A)m(ttributes)2794 b FF(65)227 351 y Ft(#include)41
-b(<stdio.h>)227 451 y(char)h(name[)g(18)g(];)227 551
-y(int)h(iaxis,)e(naxes;)227 750 y(...)227 949 y(naxes)h(=)h(astGetI\()d
-(frame,)h("Naxes")g(\);)227 1049 y(for)i(\()g(iaxis)e(=)i(1;)g(iaxis)f
-(<=)h(naxes;)e(iaxis++)f(\))j({)358 1148 y(\(void\))e(sprintf\()f
-(name,)i("Label\(\045d\)",)d(iaxis)i(\);)358 1248 y(label)h(=)h
-(astGetC\()d(frame,)h(name)h(\);)358 1348 y(\(void\))f(printf\()g
-("Label)g(\0452d:)h(\045s\\n",)f(iaxis,)g(label)h(\);)227
-1447 y(})0 1730 y FF(Note)32 b(the)e(use)g(of)h(the)f(Naxes)i
-(attribute)f(to)g(determine)f(the)h(n)m(um)m(b)s(er)e(of)h(F)-8
-b(rame)32 b(axes.)0 1899 y(The)e(output)g(from)g(this)g(migh)m(t)h(lo)s
-(ok)g(lik)m(e)h(the)e(follo)m(wing:)227 2182 y Fq(Label)94
-b(1:)48 b(Axis)e(1)227 2295 y(Label)94 b(2:)48 b(Axis)e(2)0
-2577 y FF(In)25 b(this)h(case,)i(the)e(F)-8 b(rame's)26
-b(default)g(axis)h(Lab)s(els)e(ha)m(v)m(e)i(b)s(een)e(rev)m(ealed)i(as)
-f(rather)g(un-exciting.)40 b(Normally)-8 b(,)0 2690 y(y)m(ou)22
-b(w)m(ould)f(set)g(m)m(uc)m(h)h(more)f(useful)g(v)-5
-b(alues,)23 b(t)m(ypically)g(when)e(y)m(ou)g(create)i(the)f(F)-8
-b(rame|p)s(erhaps)20 b(something)0 2803 y(lik)m(e:)227
-3073 y Ft(frame)42 b(=)h(astFrame\()d(2,)j("Label\(1\)=Offse)o(t)38
-b(from)j(centre)h(of)g(field,")1143 3172 y("Unit\(1\))e(=mm,")1143
-3272 y("Label\(2\)=Trans)o(mis)o(si)o(on)d(coefficient,")1143
-3371 y("Unit\(2\))j(=\045")i(\);)0 3654 y FF(Here,)28
-b(w)m(e)e(ha)m(v)m(e)h(also)g(set)f(the)g(\(c)m(haracter)i(string\))e
-(Unit)g(attribute)h(for)f(eac)m(h)h(axis)f(to)h(describ)s(e)e(the)h(ph)
-m(ysical)0 3767 y(units)31 b(represen)m(ted)g(on)h(that)g(axis.)44
-b(All)32 b(the)g(attribute)g(assignmen)m(ts)g(ha)m(v)m(e)h(b)s(een)e
-(com)m(bined)g(in)m(to)i(a)f(single)0 3880 y(string,)f(separated)f(b)m
-(y)h(commas.)0 4196 y Fw(7.5)112 b(F)-9 b(rame)39 b(A)m(ttributes)0
-4427 y FF(W)-8 b(e)37 b(will)g(no)m(w)f(brie\015y)g(outline)g(the)h(v)
--5 b(arious)36 b(attributes)h(asso)s(ciated)h(with)d(a)i(F)-8
-b(rame)37 b(\(this)g(is,)h(of)e(course,)0 4540 y(in)e(addition)g(to)h
-(those)g(inherited)f(from)f(the)i(Mapping)f(class\).)53
-b(W)-8 b(e)35 b(will)g(not)f(delv)m(e)h(to)s(o)g(deeply)f(in)m(to)h
-(the)0 4653 y(details)22 b(of)g(eac)m(h)g(attribute,)i(for)d(whic)m(h)g
-(y)m(ou)h(should)e(consult)i(the)f(appropriate)h(description)f(in)g
-(App)s(endix)f(C.)0 4766 y(Instead,)30 b(w)m(e)h(aim)g(simply)f(to)h
-(sk)m(etc)m(h)h(the)e(range)h(of)g(facilities)h(a)m(v)-5
-b(ailable:)227 5049 y FD(Naxes)427 5161 y FF(A)31 b(read-only)g(in)m
-(teger)g(giving)g(the)g(n)m(um)m(b)s(er)e(of)i(F)-8 b(rame)31
-b(axes.)227 5314 y FD(Title)427 5427 y FF(A)g(string)f(describing)g
-(the)h(co)s(ordinate)g(system)f(whic)m(h)h(the)f(F)-8
-b(rame)31 b(represen)m(ts.)227 5580 y FD(Lab)s(el\(axis\))427
-5693 y FF(A)g(lab)s(el)f(string)h(for)f(eac)m(h)h(axis.)p
-eop end
-%%Page: 66 76
-TeXDict begin 66 75 bop 0 52 a FF(66)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y FD(Unit\(axis\))427 464 y FF(A)g(string)g(describing)g(the)g(ph)m
-(ysical)h(units)e(on)h(eac)m(h)h(axis.)41 b(Y)-8 b(ou)29
-b(can)g(c)m(ho)s(ose)h(whether)e(to)427 577 y(mak)m(e)34
-b(this)f(attribute)h(\\activ)m(e")i(or)d(\\passiv)m(e")h(\(using)f
-(astSetActiv)m(eUnit)j(\).)49 b(If)33 b(activ)m(e,)427
-690 y(its)42 b(v)-5 b(alue)41 b(will)h(b)s(e)f(tak)m(en)h(in)m(to)g
-(accoun)m(t)h(when)d(\014nding)g(the)h(Mapping)g(b)s(et)m(w)m(een)h(t)m
-(w)m(o)427 803 y(F)-8 b(rames)36 b(\()p Fx(e.g.)55 b
-FF(a)36 b(scaling)g(of)f(0.001)i(w)m(ould)e(b)s(e)g(used)f(to)i
-(connect)h(t)m(w)m(o)f(axis)g(with)f(units)427 916 y(of)c(\\km")g(and)g
-(\\m"\).)42 b(If)30 b(passiv)m(e,)i(its)f(v)-5 b(alue)32
-b(is)e(ignored.)42 b(Its)31 b(use)f(is)h(describ)s(ed)f(in)g(more)427
-1029 y(detail)i(in)e Fu(x)p FF(7.14.)227 1160 y FD(Sym)m(b)s
-(ol\(axis\))427 1273 y FF(A)j(string)f(con)m(taining)i(a)f(\\short)f
-(form")h(sym)m(b)s(ol)f(\()p Fx(e.g.)g FF(lik)m(e)h(\\X")h(or)e(\\Y"\))
-i(used)d(to)i(rep-)427 1386 y(resen)m(t)e(the)g(quan)m(tit)m(y)g
-(plotted)h(on)e(eac)m(h)h(axis.)227 1517 y FD(Digits/Digits\(axis\))427
-1630 y FF(The)g(preferred)f(n)m(um)m(b)s(er)h(of)g(digits)h(of)g
-(precision)f(to)i(b)s(e)d(used)h(when)g(formatting)h(v)-5
-b(alues)427 1743 y(for)30 b(displa)m(y)h(on)f(eac)m(h)i(axis.)227
-1875 y FD(F)-9 b(ormat\(axis\))427 1987 y FF(A)45 b(string)g(con)m
-(taining)h(a)g Fx(format)h(sp)-5 b(e)g(ci\014er)46 b
-FF(whic)m(h)f(determines)f(exactly)j(ho)m(w)e(v)-5 b(alues)427
-2100 y(should)40 b(b)s(e)h(formatted)g(for)g(displa)m(y)g(on)g(eac)m(h)
-h(axis)g(\()p Fu(x)p FF(7.6\).)75 b(If)40 b(this)h(attribute)h(is)f
-(un-)427 2213 y(set,)f(the)d(formatting)i(is)e(based)g(on)g(the)g
-(Digits)i(v)-5 b(alue,)40 b(otherwise)d(the)h(F)-8 b(ormat)38
-b(string)427 2326 y(o)m(v)m(er-rides)32 b(the)e(Digits)i(v)-5
-b(alue.)227 2458 y FD(Direction\(axis\))427 2570 y FF(A)35
-b(b)s(o)s(olean)g(\(in)m(teger\))i(v)-5 b(alue)36 b(whic)m(h)e
-(indicates)i(in)f(whic)m(h)f(direction)i(eac)m(h)g(axis)f(should)427
-2683 y(b)s(e)27 b(plotted.)40 b(If)27 b(it)h(is)f(non-zero)h(\(the)g
-(default\),)h(the)e(axis)h(should)e(b)s(e)h(plotted)h(in)f(the)h(con-)
-427 2796 y(v)m(en)m(tional)34 b(direction|)p Fx(i.e.)e
-FF(increasing)g(to)h(the)e(righ)m(t)i(for)e(the)h(abscissa)g(and)g
-(increasing)427 2909 y(up)m(w)m(ards)37 b(for)g(the)g(ordinate.)62
-b(If)37 b(it)h(is)g(zero,)i(the)d(axis)h(should)e(b)s(e)h(plotted)h(in)
-f(rev)m(erse.)427 3022 y(This)d(attribute)h(is)f(pro)m(vided)h(as)f(a)h
-(hin)m(t)f(only)h(and)f(programs)g(are)h(free)f(to)h(ignore)g(it)g(if)
-427 3135 y(they)c(wish.)227 3266 y FD(Domain)427 3379
-y FF(A)37 b(c)m(haracter)i(string)d(whic)m(h)h(iden)m(ti\014es)g(the)g
-Fx(physic)-5 b(al)41 b(domain)d FF(to)g(whic)m(h)e(the)h(F)-8
-b(rame's)427 3492 y(co)s(ordinate)31 b(system)g(applies.)41
-b(The)30 b(primary)f(purp)s(ose)f(of)j(this)f(attribute)h(is)g(to)g
-(prev)m(en)m(t)427 3605 y(un)m(w)m(an)m(ted)24 b(con)m(v)m(ersions)h
-(from)e(o)s(ccurring)g(b)s(et)m(w)m(een)i(co)s(ordinate)f(systems)g
-(whic)m(h)f(are)h(not)427 3718 y(related.)42 b(Its)30
-b(use)g(is)h(describ)s(ed)e(in)h(more)h(detail)g(in)f
-Fu(x)p FF(7.12.)227 3849 y FD(System)427 3962 y FF(A)37
-b(c)m(haracter)h(string)f(whic)m(h)f(iden)m(ti\014es)h(the)g(sp)s
-(eci\014c)f(co)s(ordinate)h(system)g(used)f(to)h(de-)427
-4075 y(scrib)s(e)f(p)s(ositions)h(within)f(the)h(ph)m(ysical)g(domain)f
-(represen)m(ted)h(b)m(y)f(the)h(F)-8 b(rame.)60 b(F)-8
-b(or)38 b(a)427 4188 y(simple)21 b(F)-8 b(rame,)23 b(this)e(attribute)g
-(curren)m(tly)g(has)f(a)h(\014xed)f(v)-5 b(alue)21 b(of)f
-(\\Cartesian",)k(but)c(could)427 4301 y(in)30 b(principle)f(b)s(e)h
-(extended)g(to)g(include)g(options)g(suc)m(h)g(as)g(\\P)m(olar",)i
-(\\Cylindrical",)f Fx(etc)p FF(.)427 4414 y(More)26 b(sp)s(ecialised)f
-(F)-8 b(rames)25 b(suc)m(h)f(as)h(the)g(SkyF)-8 b(rame,)26
-b(TimeF)-8 b(rame)26 b(and)e(Sp)s(ecF)-8 b(rame,)26 b(re-)427
-4527 y(de\014ne)j(the)g(allo)m(w)m(ed)i(v)-5 b(alues)29
-b(to)h(b)s(e)e(appropriate)i(to)f(the)h(domain)f(whic)m(h)f(they)i
-(describ)s(e.)427 4640 y(F)-8 b(or)35 b(instance,)i(the)d(SkyF)-8
-b(rame)35 b(allo)m(ws)h(v)-5 b(alues)35 b(suc)m(h)f(as)h(\\FK4")g(and)f
-(\\Galactic",)40 b(and)427 4753 y(the)31 b(Sp)s(ecF)-8
-b(rame)30 b(allo)m(ws)i(v)-5 b(alues)31 b(suc)m(h)f(as)h(\\frequency")f
-(and)g(\\w)m(a)m(v)m(elength".)227 4884 y FD(Ep)s(o)s(c)m(h)427
-4997 y FF(This)d(v)-5 b(alue)28 b(is)g(used)e(to)j(qualify)e(a)h(co)s
-(ordinate)h(system)e(b)m(y)h(giving)g(the)g(momen)m(t)g(in)f(time)427
-5110 y(when)i(the)i(co)s(ordinates)g(are)f(correct.)42
-b(Usually)-8 b(,)31 b(this)g(will)f(b)s(e)g(the)g(date)h(of)f(observ)-5
-b(ation.)427 5223 y(The)37 b(Ep)s(o)s(c)m(h)f(v)-5 b(alue)37
-b(is)g(imp)s(ortan)m(t)g(in)g(cases)g(where)g(co)s(ordinates)g(systems)
-g(mo)m(v)m(e)h(with)427 5336 y(resp)s(ect)f(to)g(eac)m(h)g(other)g(o)m
-(v)m(er)g(time.)60 b(An)36 b(example)h(of)f(t)m(w)m(o)i(suc)m(h)e(co)s
-(ordinate)h(systems)427 5449 y(are)31 b(the)g(FK4)f(and)g(FK5)h
-(celestial)i(co)s(ordinate)e(systems.)227 5580 y FD(ObsLon)427
-5693 y FF(Sp)s(eci\014es)40 b(the)g(longitude)h(of)g(the)f(observ)m(er)
-h(\(assumed)f(to)h(b)s(e)f(on)g(the)g(surface)h(of)f(the)p
-eop end
-%%Page: 67 77
-TeXDict begin 67 76 bop 0 52 a Fy(7.6)92 b(F)-8 b(ormatting)32
-b(Axis)f(V)-8 b(alues)2541 b FF(67)427 351 y(earth\).)77
-b(The)41 b(basic)i(F)-8 b(rame)43 b(class)g(do)s(es)e(not)i(use)e(this)
-h(v)-5 b(alue,)46 b(but)41 b(sp)s(ecialised)i(sub-)427
-464 y(classes)32 b(ma)m(y)-8 b(.)45 b(F)-8 b(or)32 b(instance,)g(the)f
-(Sp)s(ecF)-8 b(rame)32 b(class)g(uses)e(it)i(to)g(calculate)i(the)d
-(relativ)m(e)427 577 y(v)m(elo)s(cit)m(y)26 b(of)e(the)f(observ)m(er)h
-(and)f(the)g(cen)m(tre)i(of)f(the)f(earth)h(for)f(use)g(in)g(con)m(v)m
-(erting)j(b)s(et)m(w)m(een)427 690 y(standards)k(of)g(rest.)227
-837 y FD(ObsLat)427 950 y FF(Sp)s(eci\014es)g(the)h(latitude)g(of)f
-(the)h(observ)m(er.)41 b(Use)31 b(in)f(conjunction)g(with)g(ObsLon.)0
-1215 y(There)i(are)h(also)g(some)g(further)f(F)-8 b(rame)33
-b(attributes,)h(not)f(describ)s(ed)e(ab)s(o)m(v)m(e,)k(whic)m(h)d(are)h
-(imp)s(ortan)m(t)f(when)0 1328 y(F)-8 b(rames)37 b(are)g(used)e(as)i
-(templates)h(to)f(searc)m(h)g(for)f(other)g(F)-8 b(rames.)60
-b(Their)35 b(use)h(go)s(es)h(b)s(ey)m(ond)f(the)g(presen)m(t)0
-1441 y(discussion.)0 1737 y Fw(7.6)112 b(F)-9 b(ormatting)38
-b(Axis)g(V)-9 b(alues)0 1960 y FF(The)23 b(co)s(ordinate)h(v)-5
-b(alues)24 b(asso)s(ciated)h(with)e(eac)m(h)i(axis)f(of)g(a)g(F)-8
-b(rame)24 b(are)g(stored)g(\()p Fx(e.g.)f FF(within)g(y)m(our)g
-(program\))0 2072 y(as)37 b(double)f(v)-5 b(alues.)59
-b(The)36 b(F)-8 b(rame)38 b(class)f(therefore)g(pro)m(vides)f(a)h
-(function,)h(astF)-8 b(ormat,)41 b(to)c(con)m(v)m(ert)h(these)0
-2185 y(v)-5 b(alues)31 b(in)m(to)g(formatted)g(strings)f(for)g(displa)m
-(y:)227 2437 y Ft(const)42 b(char)g(*string)227 2537
-y(double)f(value;)227 2736 y(...)227 2935 y(string)g(=)j(astFormat\()39
-b(frame,)i(iaxis,)g(value)h(\);)0 3200 y FF(Here,)33
-b(the)e(astF)-8 b(ormat)34 b(function)d(is)h(passed)f(a)h(F)-8
-b(rame)33 b(p)s(oin)m(ter,)f(the)g(n)m(um)m(b)s(er)e(of)i(an)f(axis)h
-(\(\\iaxis"\))i(and)d(a)0 3313 y(double)j(precision)g(v)-5
-b(alue)34 b(to)h(format)f(\(\\v)-5 b(alue"\).)54 b(It)34
-b(returns)e(a)j(p)s(oin)m(ter)f(to)g(c)m(haracter)i(string)e(con)m
-(taining)0 3426 y(the)d(formatted)g(v)-5 b(alue.)0 3590
-y(By)32 b(default,)g(the)g(formatting)g(applied)f(will)h(b)s(e)f
-(determined)g(b)m(y)h(the)f(F)-8 b(rame's)33 b(Digits)g(attribute)f
-(and)f(will)0 3703 y(normally)36 b(displa)m(y)g(results)g(with)g(sev)m
-(en)g(digits)h(of)f(precision)g(\(corresp)s(onding)g(appro)m(ximately)h
-(to)g(the)f(C)0 3815 y(\\\015oat")g(data)f(t)m(yp)s(e)f(on)g(man)m(y)g
-(mac)m(hines\).)53 b(Setting)35 b(a)f(di\013eren)m(t)h(Digits)g(v)-5
-b(alue,)36 b(ho)m(w)m(ev)m(er,)h(allo)m(ws)e(y)m(ou)g(to)0
-3928 y(adjust)27 b(the)h(precision)g(as)g(necessary)g(to)h(suit)e(the)h
-(accuracy)h(of)f(the)g(co)s(ordinate)h(data)f(y)m(ou)g(are)g(pro)s
-(cessing.)0 4041 y(If)39 b(\014ner)g(con)m(trol)i(is)e(needed,)j(it)e
-(is)g(also)g(p)s(ossible)f(to)h(set)h(a)e(Digits)j(v)-5
-b(alue)40 b(for)f(eac)m(h)i(individual)e(axis)h(b)m(y)0
-4154 y(app)s(ending)27 b(an)i(axis)g(n)m(um)m(b)s(er)e(to)j(the)f
-(attribute)g(name)g(\()p Fx(e.g.)f FF(\\Digits\(2\)"\).)44
-b(If)29 b(this)f(is)h(done,)g(it)g(o)m(v)m(er-rides)0
-4267 y(the)i(e\013ect)g(of)g(the)g(F)-8 b(rame's)31 b(main)f(Digits)i
-(v)-5 b(alue)31 b(for)f(that)h(axis.)0 4431 y(Ev)m(en)25
-b(\014ner)f(con)m(trol)j(is)e(p)s(ossible)f(b)m(y)h(setting)h(the)f
-(\(c)m(haracter)i(string\))f(F)-8 b(ormat)26 b(attribute)g(for)e(a)i(F)
--8 b(rame)26 b(axis.)0 4544 y(The)i(string)g(giv)m(en)h(should)f(con)m
-(tain)i(a)e(C)g Fx(format)33 b(sp)-5 b(e)g(ci\014er)29
-b FF(whic)m(h)f(explicitly)i(determines)e(ho)m(w)h(the)f(v)-5
-b(alues)0 4656 y(on)26 b(that)h(axis)g(should)f(b)s(e)g(formatted.)40
-b(This)25 b(will)i(o)m(v)m(er-ride)h(the)f(e\013ects)h(of)e(an)m(y)h
-(Digits)h(v)-5 b(alue)3260 4623 y Fv(12)3335 4656 y FF(.)40
-b(An)m(y)26 b(v)-5 b(alid)0 4769 y(\\prin)m(tf)7 b(")31
-b(format)f(sp)s(eci\014er)g(ma)m(y)h(b)s(e)f(used)g(so)g(long)h(as)g
-(it)g(consumes)f(exactly)i(one)e(double)g(v)-5 b(alue.)0
-4933 y(When)27 b(setting)h(F)-8 b(ormat)28 b(v)-5 b(alues,)28
-b(remem)m(b)s(er)e(that)i(the)f(\\\045")g(whic)m(h)g(app)s(ears)f(in)g
-(the)h(format)h(sp)s(eci\014er)e(ma)m(y)0 5046 y(need)d(to)h(b)s(e)e
-(doubled)g(to)i(\\\045\045")f(if)g(y)m(ou)g(are)h(using)e(a)i(function)
-f(\(suc)m(h)g(as)g(astSet\))h(whic)m(h)f(in)m(terprets)g(\\prin)m(tf)7
-b(")0 5159 y(format)31 b(sp)s(eci\014ers)e(itself.)0
-5322 y(It)34 b(is)f(recommended)g(that)h(y)m(ou)g(use)f(astF)-8
-b(ormat)36 b(whenev)m(er)d(y)m(ou)h(displa)m(y)f(formatted)i(co)s
-(ordinate)f(v)-5 b(alues,)0 5435 y(ev)m(en)26 b(although)f(y)m(ou)g
-(could)g(format)g(them)g(y)m(ourself)g(using)f(\\sprin)m(tf)7
-b(".)39 b(This)24 b(is)h(b)s(ecause)g(it)h(puts)e(the)h(F)-8
-b(rame)p 0 5516 1512 4 v 73 5570 a Fs(12)138 5602 y Fr(The)25
-b(exception)g(to)g(this)g(rule)g(is)h(that)e(if)i(the)e(F)-6
-b(ormat)26 b(v)l(alue)e(includes)h(a)g(precision)h(of)g(\\)p
-Fn(:)p Fm(\003)p Fr(",)h(then)d(Digits)i(will)g(b)r(e)f(used)f(to)0
-5693 y(determine)i(the)f(actual)h(precision)h(used.)p
-eop end
-%%Page: 68 78
-TeXDict begin 68 77 bop 0 52 a FF(68)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(in)34 b(con)m(trol)i(of)e(formatting.)53 b(When)35
-b(y)m(ou)f(start)h(to)g(handle)f(more)g(elab)s(orate)i(F)-8
-b(rames)35 b(\(represen)m(ting,)h(sa)m(y)-8 b(,)0 464
-y(celestial)32 b(co)s(ordinates\),)f(y)m(ou)f(will)g(need)g(di\013eren)
-m(t)g(formatting)h(metho)s(ds.)39 b(This)29 b(approac)m(h)h(deliv)m
-(ers)h(them)0 577 y(without)f(an)m(y)h(c)m(hange)h(to)f(y)m(our)f(soft)
-m(w)m(are.)0 742 y(Y)-8 b(ou)32 b(should)e(also)j(consider)e(regularly)
-h(using)f(the)h(astNorm)g(function,)g(describ)s(ed)e(b)s(elo)m(w)i(\()p
-Fu(x)p FF(7.7\),)i(for)d(an)m(y)0 855 y(v)-5 b(alues)31
-b(that)g(will)f(b)s(e)g(made)h(visible)f(to)h(the)g(user)f(of)g(y)m
-(our)h(soft)m(w)m(are.)0 1155 y Fw(7.7)112 b(Normalising)39
-b(F)-9 b(rame)38 b(Co)s(ordinates)0 1380 y FF(The)c(function)h(astNorm)
-h(is)f(pro)m(vided)f(to)i(cop)s(e)f(with)g(the)g(fact)h(that)f(some)h
-(co)s(ordinate)f(systems)g(do)g(not)0 1493 y(extend)43
-b(inde\014nitely)g(in)f(all)i(directions.)79 b(Some)43
-b(ma)m(y)g(ha)m(v)m(e)h(b)s(oundaries,)h(outside)e(whic)m(h)g(co)s
-(ordinates)0 1606 y(are)34 b(meaningless,)i(while)e(others)f(wrap)g
-(around)g(on)h(themselv)m(es,)i(so)e(that)g(after)h(a)f(certain)h
-(distance)f(y)m(ou)0 1719 y(return)25 b(to)j(the)e(b)s(eginning)g
-(again)h(\(co)s(ordinate)h(systems)e(based)g(on)h(circles)g(and)f
-(spheres,)h(for)f(instance\).)40 b(A)0 1831 y(basic)29
-b(F)-8 b(rame)30 b(has)e(no)h(suc)m(h)f(complications,)j(but)d(other)h
-(more)g(sp)s(ecialised)h(F)-8 b(rames)29 b(\(suc)m(h)g(as)g(SkyF)-8
-b(rames,)0 1944 y(represen)m(ting)31 b(the)f(celestial)j(sphere|)p
-Fu(x)p FF(8\))e(do.)0 2109 y(The)43 b(role)i(pla)m(y)m(ed)f(b)m(y)g
-(astNorm)g(is)g(to)g Fx(normalise)i FF(an)m(y)e(arbitrary)f(set)i(of)f
-(co)s(ordinates)g(b)m(y)g(con)m(v)m(erting)0 2222 y(them)d(in)m(to)i(a)
-f(set)g(whic)m(h)f(is)h(\\within)f(b)s(ounds",)i(in)m(terpreted)f
-(according)g(to)h(the)e(particular)h(F)-8 b(rame)43 b(in)0
-2335 y(question.)74 b(F)-8 b(or)42 b(example,)j(on)c(the)g(celestial)j
-(sphere,)f(a)f(righ)m(t)g(ascension)g(v)-5 b(alue)41
-b(of)h(24)g(hours)e(or)h(more)0 2448 y(can)30 b(ha)m(v)m(e)i(a)e
-(suitable)h(m)m(ultiple)g(of)f(24)h(hours)e(subtracted)h(without)g
-(a\013ecting)i(its)e(meaning)g(and)g(astNorm)0 2561 y(w)m(ould)i(p)s
-(erform)e(this)i(task.)46 b(Similarly)-8 b(,)34 b(negativ)m(e)g(v)-5
-b(alues)32 b(of)g(righ)m(t)h(ascension)f(w)m(ould)g(ha)m(v)m(e)h(a)g(m)
-m(ultiple)f(of)0 2674 y(24)26 b(hours)f(added,)h(so)f(that)h(the)g
-(result)f(lies)i(in)e(the)g(range)h(zero)g(to)h(24)f(hours.)38
-b(The)25 b(co)s(ordinates)h(in)f(question)0 2787 y(are)31
-b(mo)s(di\014ed)e(in)h(place)h(b)m(y)g(astNorm,)g(as)f(follo)m(ws:)227
-3042 y Ft(double)41 b(point[)g(2)j(];)227 3241 y(...)227
-3441 y(astNorm\()d(frame,)g(point)g(\);)0 3709 y FF(If)31
-b(the)h(co)s(ordinates)g(supplied)e(are)i(initially)h(OK,)e(as)g(they)h
-(w)m(ould)f(alw)m(a)m(ys)i(b)s(e)e(with)g(a)h(basic)g(F)-8
-b(rame,)33 b(then)0 3822 y(they)e(are)f(returned)g(unc)m(hanged.)0
-3987 y(Because)42 b(the)e(main)g(purp)s(ose)f(of)i(astNorm)g(is)f(to)h
-(con)m(v)m(ert)h(co)s(ordinates)f(in)m(to)g(the)g(preferred)e(range)i
-(for)0 4100 y(h)m(uman)32 b(consumption,)h(its)g(use)f(is)h(almost)g
-(alw)m(a)m(ys)h(appropriate)f(immediately)h(b)s(efore)e(formatting)i
-(co)s(or-)0 4213 y(dinate)27 b(v)-5 b(alues)28 b(for)e(displa)m(y)h
-(using)g(astF)-8 b(ormat)29 b(\()p Fu(x)p FF(7.6\).)41
-b(Ev)m(en)27 b(if)g(the)g(F)-8 b(rame)28 b(in)f(question)g(do)s(es)g
-(not)g(restrict)0 4326 y(the)i(range)g(of)g(co)s(ordinates,)h(so)g
-(that)f(astNorm)h(do)s(es)e(nothing,)i(using)e(it)h(will)h(allo)m(w)g
-(y)m(ou)f(to)h(pro)s(cess)e(other)0 4439 y(more)j(sp)s(ecialised)g(F)-8
-b(rames,)31 b(where)f(normalisation)h(is)g(imp)s(ortan)m(t,)f(without)h
-(c)m(hanging)g(y)m(our)f(soft)m(w)m(are.)0 4739 y Fw(7.8)112
-b(Reading)39 b(F)-9 b(ormatted)37 b(Axis)h(V)-9 b(alues)0
-4964 y FF(The)41 b(pro)s(cess)h(of)g(con)m(v)m(erting)i(a)e(formatted)g
-(co)s(ordinate)h(v)-5 b(alue)42 b(for)g(a)g(F)-8 b(rame)43
-b(axis,)j(suc)m(h)41 b(as)h(migh)m(t)h(b)s(e)0 5077 y(pro)s(duced)e(b)m
-(y)h(astF)-8 b(ormat)45 b(\()p Fu(x)p FF(7.6\),)j(bac)m(k)43
-b(in)m(to)h(a)f(n)m(umerical)g(\(double\))f(v)-5 b(alue)43
-b(ready)g(for)f(pro)s(cessing)g(is)0 5189 y(p)s(erformed)c(b)m(y)i
-(astUnformat.)69 b(Ho)m(w)m(ev)m(er,)44 b(although)c(this)g(pro)s(cess)
-f(is)h(essen)m(tially)i(the)d(in)m(v)m(erse)i(of)f(that)0
-5302 y(p)s(erformed)26 b(b)m(y)h(astF)-8 b(ormat,)31
-b(there)d(are)f(a)h(n)m(um)m(b)s(er)f(of)g(additional)i(di\016culties)f
-(that)g(m)m(ust)f(b)s(e)g(addressed)g(in)0 5415 y(practice.)0
-5580 y(The)c(main)g(use)g(for)g(astUnformat)i(is)e(in)g(reading)h
-(formatted)g(co)s(ordinate)g(v)-5 b(alues)23 b(whic)m(h)h(ha)m(v)m(e)g
-(b)s(een)f(en)m(tered)0 5693 y(b)m(y)28 b(the)h(user)f(of)g(a)h
-(program,)g(or)f(read)h(from)f(a)h(\014le.)40 b(As)28
-b(suc)m(h,)h(w)m(e)g(can)g(rarely)f(assume)h(that)g(the)f(v)-5
-b(alues)29 b(are)p eop end
-%%Page: 69 79
-TeXDict begin 69 78 bop 0 52 a Fy(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FF(69)0
-351 y(neatly)35 b(formatted)f(in)f(the)h(w)m(a)m(y)h(that)f(astF)-8
-b(ormat)36 b(w)m(ould)e(pro)s(duce.)49 b(Instead,)35
-b(it)f(is)g(usually)g(desirable)g(to)0 464 y(allo)m(w)i(considerable)g
-(\015exibilit)m(y)g(in)e(the)h(form)f(of)h(input)f(that)i(can)f(b)s(e)f
-(accommo)s(dated,)j(so)f(as)f(to)g(p)s(ermit)0 577 y(\\free-format")28
-b(data)g(input)e(b)m(y)g(the)h(user.)39 b(In)26 b(addition,)i(w)m(e)f
-(ma)m(y)g(need)g(to)g(extract)h(individual)f(co)s(ordinate)0
-690 y(v)-5 b(alues)31 b(em)m(b)s(edded)e(in)h(other)h(textual)g(data.)0
-866 y(Underlying)f(these)g(requiremen)m(ts)h(is)f(the)g(ro)s(ot)h
-(di\016cult)m(y)f(that)h(the)g(textual)g(format)g(used)e(to)i(represen)
-m(t)f(a)0 979 y(co)s(ordinate)g(v)-5 b(alue)29 b(will)g(dep)s(end)f(on)
-g(the)i(class)f(of)g(F)-8 b(rame)30 b(w)m(e)g(are)f(considering.)40
-b(F)-8 b(or)30 b(example,)g(for)f(a)g(basic)0 1091 y(F)-8
-b(rame,)42 b(astUnformat)d(ma)m(y)g(ha)m(v)m(e)h(to)f(read)f(a)h(v)-5
-b(alue)39 b(lik)m(e)h(\\1.25e-6",)45 b(whereas)38 b(for)g(a)h(more)g
-(sp)s(ecialised)0 1204 y(F)-8 b(rame)31 b(represen)m(ting)g(celestial)i
-(co)s(ordinates)e(it)g(ma)m(y)g(ha)m(v)m(e)g(to)h(handle)d(a)i(v)-5
-b(alue)31 b(lik)m(e)h(\\-07d)f(49m)g(13s".)42 b(Of)0
-1317 y(course,)31 b(the)f(format)h(migh)m(t)g(also)g(dep)s(end)e(on)h
-(whic)m(h)h(axis)f(is)h(b)s(eing)f(considered.)0 1493
-y(Ideally)-8 b(,)47 b(w)m(e)42 b(w)m(ould)g(lik)m(e)i(to)f(write)f
-(soft)m(w)m(are)i(that)f(can)f(handle)g(an)m(y)h(kind)e(of)i(F)-8
-b(rame.)77 b(Ho)m(w)m(ev)m(er,)48 b(this)0 1606 y(mak)m(es)39
-b(it)f(a)g(little)i(more)e(di\016cult)f(to)i(analyse)f(textual)h(input)
-e(data)i(to)f(extract)h(individual)f(co)s(ordinate)0
-1719 y(v)-5 b(alues,)29 b(since)g(w)m(e)g(cannot)g(mak)m(e)g
-(assumptions)e(ab)s(out)h(ho)m(w)h(the)f(v)-5 b(alues)29
-b(are)f(formatted.)41 b(It)29 b(w)m(ould)f(not)g(b)s(e)0
-1832 y(safe,)39 b(for)d(example,)j(simply)c(to)j(assume)e(that)h(the)f
-(v)-5 b(alues)37 b(b)s(eing)f(read)g(are)h(separated)g(b)m(y)f(white)h
-(space.)0 1945 y(This)h(is)i(not)f(just)g(b)s(ecause)g(they)h(migh)m(t)
-g(b)s(e)e(separated)i(b)m(y)f(some)h(other)f(c)m(haracter,)44
-b(but)38 b(also)i(b)s(ecause)0 2058 y(celestial)c(co)s(ordinate)e(v)-5
-b(alues)34 b(migh)m(t)g(themselv)m(es)h(con)m(tain)g(spaces.)51
-b(In)32 b(fact,)k(to)e(b)s(e)f(completely)i(safe,)g(w)m(e)0
-2170 y(cannot)i(mak)m(e)h(an)m(y)f(assumptions)g(ab)s(out)f(ho)m(w)h(a)
-g(formatted)h(co)s(ordinate)f(v)-5 b(alue)38 b(is)f(separated)g(from)f
-(the)0 2283 y(surrounding)28 b(text,)k(except)f(that)g(it)g(should)e(b)
-s(e)h(separated)h(in)f(some)h(w)m(a)m(y)g(whic)m(h)f(is)h(not)f(am)m
-(biguous.)0 2459 y(This)g(is)g(the)h(v)m(ery)f(basic)h(assumption)f(up)
-s(on)f(whic)m(h)h(astUnformat)h(w)m(orks.)41 b(It)30
-b(is)g(in)m(v)m(ok)m(ed)i(as)f(follo)m(ws:)227 2747 y
-Ft(int)43 b(n;)227 2946 y(...)227 3145 y(n)g(=)h(astUnformat\()38
-b(frame,)j(iaxis,)g(string,)g(&value)g(\);)0 3447 y FF(It)32
-b(is)f(supplied)g(with)g(a)h(F)-8 b(rame)32 b(p)s(oin)m(ter)g
-(\(\\frame"\),)i(the)d(n)m(um)m(b)s(er)g(of)g(an)h(axis)g(\(\\iaxis"\))
-i(and)d(a)h(c)m(haracter)0 3559 y(string)c(to)h(b)s(e)f(read)g
-(\(\\string"\).)42 b(If)28 b(it)h(succeeds)f(in)g(reading)h(a)f(v)-5
-b(alue,)30 b(astUnformat)f(returns)e(the)h(resulting)0
-3672 y(co)s(ordinate)37 b(to)g(the)g(address)f(supplied)f
-Fx(via)h FF(the)h(\014nal)f(argumen)m(t)h(\(\\&v)-5 b(alue"\).)61
-b(The)36 b(returned)f(function)0 3785 y(v)-5 b(alue)31
-b(indicates)g(ho)m(w)g(man)m(y)f(c)m(haracters)i(w)m(ere)f(read)f(from)
-g(the)g(string)h(in)f(order)g(to)h(obtain)g(this)f(result.)0
-3961 y(The)g(string)g(is)h(read)f(as)h(follo)m(ws:)111
-4262 y(1.)46 b(An)m(y)31 b(white)f(space)h(at)g(the)g(start)g(is)f
-(skipp)s(ed)f(o)m(v)m(er.)111 4476 y(2.)46 b(F)-8 b(urther)22
-b(c)m(haracters)i(are)e(considered,)i(one)f(at)f(a)h(time,)i(un)m(til)d
-(the)g(next)h(c)m(haracter)h(no)e(longer)g(matc)m(hes)227
-4589 y(an)m(y)35 b(of)g(the)f(acceptable)j(forms)d(of)g(input)g(\(giv)m
-(en)h(the)g(c)m(haracters)h(that)f(precede)g(it\).)53
-b(The)34 b(longest)227 4701 y(sequence)d(of)g(c)m(haracters)g(whic)m(h)
-g(matc)m(hes)g(is)f(then)h(considered)f(\\read".)111
-4915 y(3.)46 b(If)29 b(a)g(suitable)h(sequence)f(of)g(c)m(haracters)i
-(w)m(as)e(read)g(successfully)-8 b(,)30 b(it)g(is)f(con)m(v)m(erted)h
-(in)m(to)g(a)g(co)s(ordinate)227 5028 y(v)-5 b(alue)29
-b(whic)m(h)e(is)h(returned.)38 b(An)m(y)28 b(white)g(space)g(follo)m
-(wing)i(this)d(sequence)i(is)e(then)h(skipp)s(ed)e(o)m(v)m(er)j(and)227
-5141 y(the)i(total)h(n)m(um)m(b)s(er)d(of)i(c)m(haracters)g(consumed)f
-(is)h(returned)e(as)h(the)h(function)f(v)-5 b(alue.)111
-5354 y(4.)46 b(If)38 b(the)g(sequence)g(of)g(c)m(haracters)h(read)f(is)
-g(empt)m(y)-8 b(,)41 b(or)d(insu\016cien)m(t)g(to)h(de\014ne)e(a)h(co)s
-(ordinate)h(v)-5 b(alue,)227 5467 y(then)38 b(the)g(string)f(do)s(es)h
-(not)g(con)m(tain)h(a)f(v)-5 b(alue)38 b(to)h(read.)63
-b(In)37 b(this)g(case,)k(the)d(read)g(is)g(ab)s(orted)f(and)227
-5580 y(astUnformat)28 b(returns)e(a)h(function)f(v)-5
-b(alue)28 b(of)f(zero)h(and)e(no)h(co)s(ordinate)g(v)-5
-b(alue.)40 b(Ho)m(w)m(ev)m(er,)30 b(it)e(returns)227
-5693 y(without)j(error.)p eop end
-%%Page: 70 80
-TeXDict begin 70 79 bop 0 52 a FF(70)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(Note)43 b(that)f(failing)h(to)f(read)g(a)g(co)s(ordinate)g(v)-5
-b(alue)42 b(do)s(es)g(not)g(constitute)h(an)e(error,)k(at)d(least)h(so)
-f(far)f(as)0 464 y(astUnformat)22 b(is)g(concerned.)38
-b(Ho)m(w)m(ev)m(er,)25 b(an)c(error)g(can)h(o)s(ccur)f(if)h(the)g
-(sequence)f(of)h(c)m(haracters)h(read)e(app)s(ears)0
-577 y(to)32 b(ha)m(v)m(e)h(the)f(correct)g(form)g(but)e(cannot)j(b)s(e)
-d(con)m(v)m(erted)j(in)m(to)g(a)f(v)-5 b(alid)32 b(co)s(ordinate)g(v)-5
-b(alue.)45 b(T)m(ypically)-8 b(,)34 b(this)0 690 y(will)c(b)s(e)g(b)s
-(ecause)g(it)g(violates)i(some)e(constrain)m(t,)i(suc)m(h)d(as)i(a)f
-(limit)h(on)f(the)g(v)-5 b(alue)30 b(of)g(one)g(of)h(its)f(\014elds.)40
-b(The)0 803 y(resulting)30 b(error)g(message)i(will)f(giv)m(e)h
-(details.)0 962 y(F)-8 b(or)32 b(an)m(y)f(giv)m(en)i(F)-8
-b(rame)32 b(axis,)g(astUnformat)g(do)s(es)e(not)i(necessarily)g(alw)m
-(a)m(ys)h(use)e(the)g(same)g(algorithm)i(for)0 1075 y(con)m(v)m(erting)
-40 b(the)f(sequence)g(of)f(c)m(haracters)i(it)f(reads)f(in)m(to)h(a)g
-(co)s(ordinate)g(v)-5 b(alue.)66 b(This)37 b(is)i(b)s(ecause)f(some)0
-1187 y(forms)c(of)h(input)f(\(particularly)i(free-format)g(input\))e
-(can)i(b)s(e)e(am)m(biguous)h(and)g(migh)m(t)g(b)s(e)g(in)m(terpreted)g
-(in)0 1300 y(sev)m(eral)e(w)m(a)m(ys)e(dep)s(ending)f(on)h(the)h(con)m
-(text.)44 b(F)-8 b(or)32 b(example,)h(the)e(celestial)j(longitude)d
-(\\12:34:56.7")36 b(could)0 1413 y(represen)m(t)26 b(an)g(angle)h(in)f
-(degrees)h(or)f(a)h(righ)m(t)f(ascension)h(in)f(hours.)38
-b(T)-8 b(o)27 b(decide)f(whic)m(h)g(to)h(use,)g(astUnformat)0
-1526 y(ma)m(y)43 b(examine)g(the)f(F)-8 b(rame's)44 b(attributes)e
-(and,)j(in)d(particular,)k(the)c(appropriate)h(F)-8 b(ormat\(axis\))44
-b(string)0 1639 y(whic)m(h)38 b(is)g(used)g(b)m(y)g(astF)-8
-b(ormat)41 b(when)c(formatting)i(co)s(ordinate)g(v)-5
-b(alues)39 b(\()p Fu(x)p FF(7.6\).)67 b(This)37 b(is)i(done)f(in)g
-(order)0 1752 y(that)i(astF)-8 b(ormat)41 b(and)e(astUnformat)h(should)
-e(complemen)m(t)j(eac)m(h)f(other|so)g(that)g(formatting)g(a)g(v)-5
-b(alue)0 1865 y(and)30 b(then)g(un-formatting)g(it)h(will)g(yield)g
-(the)f(original)i(v)-5 b(alue,)31 b(sub)5 b(ject)30 b(to)h(an)m(y)g
-(rounding)e(error.)0 2024 y(T)-8 b(o)31 b(giv)m(e)h(a)f(simple)f(\(but)
-g(crucially)i(incomplete!\))42 b(example,)32 b(consider)e(reading)h(a)g
-(v)-5 b(alue)31 b(for)f(the)g(axis)h(of)g(a)0 2137 y(basic)g(F)-8
-b(rame,)31 b(as)g(follo)m(ws:)227 2370 y Ft(n)43 b(=)h(astUnformat\()38
-b(frame,)j(iaxis,)g(")j(1.5e6)128 b(-99.0",)41 b(&value)g(\);)0
-2616 y FF(astUnformat)27 b(will)f(skip)f(o)m(v)m(er)i(the)f(initial)h
-(space)g(in)e(the)h(string)g(supplied)f(and)g(then)g(examine)i(eac)m(h)
-g(succes-)0 2729 y(siv)m(e)33 b(c)m(haracter.)49 b(It)33
-b(will)f(accept)i(the)f(sequence)g(\\1.5e6")i(as)e(input,)f(but)g
-(reject)h(the)g(space)g(whic)m(h)f(follo)m(ws)0 2842
-y(b)s(ecause)d(it)h(do)s(es)f(not)h(form)f(part)g(of)g(the)h(format)f
-(of)h(a)g(\015oating)g(p)s(oin)m(t)f(n)m(um)m(b)s(er.)39
-b(It)30 b(will)f(then)g(con)m(v)m(ert)i(the)0 2955 y(c)m(haracters)25
-b(\\1.5e6")i(in)m(to)e(a)f(co)s(ordinate)g(v)-5 b(alue)24
-b(and)g(skip)f(o)m(v)m(er)i(the)f(three)g(spaces)g(whic)m(h)f(follo)m
-(w)i(them.)39 b(The)0 3068 y(returned)32 b(function)g(v)-5
-b(alue)33 b(will)g(therefore)h(b)s(e)e(9,)i(equal)f(to)h(the)f(total)h
-(n)m(um)m(b)s(er)e(of)h(c)m(haracters)h(consumed.)0 3181
-y(This)k(result)h(ma)m(y)h(b)s(e)e(used)g(to)i(address)e(the)h(string)g
-(during)f(a)h(subsequen)m(t)f(read,)j(so)f(as)f(to)g(commence)0
-3293 y(reading)30 b(at)i(the)e(start)h(of)g(\\-99.0".)0
-3452 y(Most)43 b(imp)s(ortan)m(tly)-8 b(,)46 b(ho)m(w)m(ev)m(er,)h
-(note)c(that)g(if)f(the)g(user)g(of)g(a)h(program)f(mistak)m(enly)h(en)
-m(ters)g(the)f(string)0 3565 y(\\)34 b(1.5r6.)17 b(.)e(.)h(")51
-b(instead)34 b(of)f(\\)i(1.5e6.)17 b(.)e(.)h(",)35 b(a)f(co)s(ordinate)
-h(v)-5 b(alue)34 b(of)g(1.5)h(and)e(a)h(function)f(result)h(of)g(4)g
-(will)g(b)s(e)0 3678 y(returned,)28 b(b)s(ecause)h(the)g(\\r")g(w)m
-(ould)f(prematurely)h(terminate)h(the)f(attempt)g(to)h(read)f(the)f(v)
--5 b(alue.)41 b(Because)0 3791 y(this)30 b(sort)g(of)g(mistak)m(e)h(do)
-s(es)e(not)h(automatically)j(result)d(in)f(an)h(error)f(but)g(can)h
-(pro)s(duce)f(incorrect)h(results,)0 3904 y(it)c(is)g
-FD(vital)f FF(to)i(c)m(hec)m(k)g(the)f(returned)e(function)i(v)-5
-b(alue)26 b(to)h(ensure)d(that)j(the)f(exp)s(ected)g(n)m(um)m(b)s(er)e
-(of)i(c)m(haracters)0 4017 y(ha)m(v)m(e)44 b(b)s(een)d(read.)645
-3984 y Fv(13)797 4017 y FF(F)-8 b(or)43 b(example,)k(if)42
-b(the)h(string)f(is)h(exp)s(ected)g(to)g(con)m(tain)h(exactly)g(one)f
-(v)-5 b(alue,)46 b(and)0 4130 y(nothing)30 b(else,)i(then)e(the)g
-(follo)m(wing)i(w)m(ould)e(su\016ce:)227 4363 y Ft(n)43
-b(=)h(astUnformat\()38 b(frame,)j(iaxis,)g(string,)g(&value)g(\);)227
-4462 y(if)i(\()g(astOK)f(\))h({)358 4562 y(if)g(\()g(string[)e(n)i(])g
-(||)g(!n)g(\))g({)489 4662 y(<error)e(in)i(input)e(data>)358
-4761 y(})i(else)f({)489 4861 y(<value)f(read)h(correctly>)358
-4961 y(})227 5060 y(})0 5307 y FF(If)37 b(astUnformat)i(do)s(es)e(not)i
-(detect)g(an)e(error)h(itself,)j(w)m(e)d(c)m(hec)m(k)h(that)g(it)f(has)
-g(read)g(to)g(the)g(end-of-string)0 5419 y(and)27 b(consumed)g(at)i
-(least)g(one)f(c)m(haracter)h(\(whic)m(h)f(traps)f(the)h(case)h(of)f(a)
-g(zero-length)h(input)e(string\).)40 b(If)28 b(this)0
-5532 y(rev)m(eals)k(an)e(error,)g(the)h(v)-5 b(alue)31
-b(of)f(\\n")h(indicates)g(where)f(it)h(o)s(ccurred.)p
-0 5607 1512 4 v 73 5661 a Fs(13)138 5693 y Fr(An)n(y)n(one)25
-b(who)h(seriously)g(uses)g(the)g(C)g(run)f(time)h(library)g(\\scanf)6
-b(")27 b(function)e(will)j(kno)n(w)d(ab)r(out)h(the)f(need)g(for)i
-(this)f(c)n(hec)n(k!)p eop end
-%%Page: 71 81
-TeXDict begin 71 80 bop 0 52 a Fy(7.8)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Axis)e(V)-8 b(alues)2217 b FF(71)0
-351 y(Another)22 b(common)g(requiremen)m(t)g(is)g(to)g(obtain)h(a)f(p)s
-(osition)g(b)m(y)g(reading)g(a)g(list)g(of)g(co)s(ordinates)h(from)e(a)
-h(string)0 464 y(whic)m(h)30 b(con)m(tains)i(one)f(v)-5
-b(alue)32 b(for)e(eac)m(h)i(axis)f(of)g(a)g(F)-8 b(rame.)43
-b(W)-8 b(e)32 b(assume)e(that)i(the)e(v)-5 b(alues)31
-b(are)h(separated)f(in)0 577 y(some)26 b(unam)m(biguous)f(manner,)i(p)s
-(erhaps)d(using)h(white)h(space)h(and/or)e(some)i(unsp)s(eci\014ed)d
-(single-c)m(haracter)0 690 y(separator.)49 b(The)33 b(c)m(hoice)i(of)e
-(separator)h(is)f(up)f(to)i(the)f(data)h(supplier,)f(who)f(m)m(ust)h(c)
-m(ho)s(ose)h(it)g(so)f(as)g(not)h(to)0 803 y(con\015ict)c(with)g(the)g
-(format)g(of)g(the)f(co)s(ordinate)i(v)-5 b(alues,)30
-b(but)f(our)h(soft)m(w)m(are)h(do)s(es)e(not)h(need)f(to)i(kno)m(w)f
-(what)0 916 y(it)h(is.)41 b(The)30 b(follo)m(wing)h(is)g(a)g(template)g
-(algorithm)h(for)e(reading)g(data)h(in)f(this)h(form:)227
-1143 y Ft(const)42 b(char)g(*s;)227 1243 y(double)f(values[)g(10)i(];)
-227 1442 y(...)227 1642 y(/*)g(Initialise)c(a)44 b(string)d(pointer.)f
-(*/)227 1741 y(s)j(=)h(string;)227 1940 y(/*)f(Obtain)e(the)h(number)g
-(of)g(Frame)g(axes)g(and)g(loop)g(through)f(them.)g(*/)227
-2040 y(naxes)h(=)h(astGetI\()d(frame,)h("Naxes")g(\);)227
-2140 y(for)i(\()g(iaxis)e(=)i(1;)g(iaxis)f(<=)h(naxes;)e(iaxis++)f(\))j
-({)227 2339 y(/*)g(Attempt)e(to)h(read)g(a)i(value)d(for)h(this)g
-(axis.)g(*/)358 2439 y(n)h(=)g(astUnformat\()c(frame,)i(iaxis,)g(s,)i
-(&values[)d(iaxis)i(-)h(1)g(])g(\);)227 2638 y(/*)g(If)g(nothing)d(was)
-j(read)f(and)g(this)g(is)h(not)f(the)g(first)g(axis)g(or)h(the)358
-2738 y(end-of-string,)38 b(try)k(stepping)e(over)i(a)i(separator)39
-b(and)k(reading)d(again.)i(*/)358 2837 y(if)h(\()g(!n)g(&&)f(\()i
-(iaxis)d(>)i(1)h(\))f(&&)f(*s)h(\))489 2937 y(n)g(=)g(astUnformat\()c
-(frame,)i(iaxis,)g(++s,)h(&values[)e(iaxis)i(-)h(1)g(])g(\);)227
-3136 y(/*)g(Quit)f(if)h(nothing)d(was)j(read,)e(otherwise)f(move)i(on)h
-(to)g(the)f(next)g(value.)f(*/)358 3236 y(if)i(\()g(!n)g(\))g(break;)
-358 3335 y(s)g(+=)g(n;)227 3435 y(})227 3634 y(/*)g(Check)f(for)g
-(possible)e(errors.)h(*/)227 3734 y(if)i(\()g(astOK)f(\))h({)358
-3833 y(if)g(\()g(*s)g(||)f(!n)h(\))g({)489 3933 y(<error)e(in)i(input)e
-(data>)358 4033 y(})i(else)f({)489 4132 y(<values)e(read)i(correctly>)
-358 4232 y(})227 4332 y(})0 4572 y FF(In)30 b(this)g(case,)i(\\s")f
-(will)f(p)s(oin)m(t)h(to)g(the)f(lo)s(cation)i(of)f(an)m(y)g(input)e
-(error.)0 4730 y(Note)i(that)f(this)g(algorithm)g(is)g(insensitiv)m(e)h
-(to)f(the)g(precise)g(format)g(of)f(the)h(data)g(and)f(will)h
-(therefore)g(w)m(ork)0 4843 y(with)35 b(an)m(y)h(class)g(of)g(F)-8
-b(rame)36 b(and)f(an)m(y)g(reasonably)h(unam)m(biguous)f(input)f(data.)
-57 b(F)-8 b(or)36 b(example,)h(here)f(is)f(a)0 4956 y(range)c(of)f
-(suitable)h(input)f(data)h(for)f(a)h(3-dimensional)g(basic)g(F)-8
-b(rame:)227 5183 y Ft(1)43 b(2.5)g(3)227 5283 y(3.1,3.2,3.3)227
-5383 y(1.5,)f(2.6,)g(-9.9e2)227 5482 y(-1.1+0.4-1.8)402
-5582 y(.1/.2/.3)271 5681 y(44.0)g(;)h(55.1)f(-14)p eop
-end
-%%Page: 72 82
-TeXDict begin 72 81 bop 0 52 a FF(72)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-Fw(7.9)112 b(P)m(erm)m(uting)38 b(F)-9 b(rame)38 b(Axes)0
-573 y FF(Once)29 b(a)g(F)-8 b(rame)30 b(has)f(b)s(een)f(created,)i(it)g
-(is)f(not)g(p)s(ossible)f(to)i(c)m(hange)g(the)f(n)m(um)m(b)s(er)f(of)h
-(axes)g(it)h(con)m(tains,)g(but)0 686 y(it)k(is)g(p)s(ossible)g(to)h(c)
-m(hange)g(the)f(order)f(in)h(whic)m(h)f(these)i(axes)f(o)s(ccur.)51
-b(T)-8 b(o)35 b(do)f(so,)h(an)f(in)m(teger)h Fx(p)-5
-b(ermutation)0 799 y(arr)g(ay)32 b FF(is)f(\014lled)f(with)g(the)h(n)m
-(um)m(b)s(ers)e(of)h(the)h(axes)g(so)f(as)h(to)g(sp)s(ecify)f(the)h
-(new)e(order,)i Fx(e.g:)227 1048 y Ft(int)43 b(perm[)e(2)i(])g(=)h({)f
-(2,)g(1)g(};)0 1311 y FF(In)21 b(this)g(case,)j(the)d(axes)h(of)g(a)f
-(2-dimensional)h(F)-8 b(rame)23 b(could)e(b)s(e)g(in)m(terc)m(hanged)h
-(b)m(y)f(passing)g(this)g(p)s(erm)m(utation)0 1424 y(arra)m(y)36
-b(to)g(the)g(astP)m(ermAxes)h(function.)56 b(That)35
-b(is,)j(an)d(\()p Fo(x)2058 1438 y Fv(1)2098 1424 y Fo(;)15
-b(x)2190 1438 y Fv(2)2230 1424 y FF(\))35 b(co)s(ordinate)i(system)f(w)
-m(ould)f(b)s(e)g(c)m(hanged)0 1537 y(in)m(to)c(an)g(\()p
-Fo(x)398 1551 y Fv(2)437 1537 y Fo(;)15 b(x)529 1551
-y Fv(1)569 1537 y FF(\))31 b(co)s(ordinate)g(system)g(b)m(y:)227
-1786 y Ft(astPermAxes\()39 b(frame,)i(perm)h(\);)0 2049
-y FF(If)36 b(the)h(axes)g(are)g(p)s(erm)m(uted)e(more)i(than)f(once,)j
-(the)e(e\013ects)h(are)f(cum)m(ulativ)m(e.)60 b(Y)-8
-b(ou)37 b(are,)i(of)e(course,)h(not)0 2162 y(restricted)31
-b(to)g(F)-8 b(rames)31 b(with)f(only)h(t)m(w)m(o)h(axes.)0
-2455 y Fw(7.10)112 b(Selecting)38 b(F)-9 b(rame)38 b(Axes)0
-2677 y FF(An)31 b(alternativ)m(e)j(to)f(c)m(hanging)g(the)e(n)m(um)m(b)
-s(er)g(of)h(F)-8 b(rame)32 b(axes,)h(whic)m(h)f(is)f(not)h(allo)m(w)m
-(ed,)i(is)e(to)h(create)g(a)f(new)0 2790 y(F)-8 b(rame)34
-b(b)m(y)f(selecting)i(axes)f(from)e(an)h(existing)h(one.)50
-b(The)32 b(metho)s(d)h(of)g(doing)g(this)g(is)g(v)m(ery)h(similar)f(to)
-h(the)0 2903 y(w)m(a)m(y)g(astP)m(ermAxes)g(is)f(used)g(\()p
-Fu(x)p FF(7.9\),)j(in)d(that)g(w)m(e)h(supply)e(an)h(in)m(teger)h(arra)
-m(y)g(\014lled)f(with)f(the)i(n)m(um)m(b)s(ers)d(of)0
-3016 y(the)f(axes)h(w)m(e)f(w)m(an)m(t,)h(in)f(their)g(new)f(order.)40
-b(In)29 b(this)h(case,)i(ho)m(w)m(ev)m(er,)f(the)f(n)m(um)m(b)s(er)f
-(of)h(arra)m(y)g(elemen)m(ts)i(need)0 3128 y(not)f(equal)g(the)f(n)m
-(um)m(b)s(er)f(of)i(F)-8 b(rame)31 b(axes.)0 3291 y(F)-8
-b(or)26 b(example,)i(w)m(e)e(could)g(select)h(axes)f(3)g(and)f(2)h
-(\(in)g(that)g(order\))f(from)g(a)h(3-dimensional)h(F)-8
-b(rame)26 b(as)g(follo)m(ws:)227 3541 y Ft(astFrame)41
-b(*frame1,)f(*frame2;)227 3640 y(astMapping)g(*mapping;)227
-3740 y(int)j(pick[)e(2)i(])g(=)h({)f(3,)g(2)g(};)227
-3939 y(...)227 4138 y(frame2)e(=)j(astPickAxes\()38 b(frame1,)j(2,)i
-(pick,)e(&mapping)f(\);)0 4401 y FF(This)22 b(w)m(ould)g(return)g(a)h
-(p)s(oin)m(ter)f(to)i(a)f(2-dimensional)g(F)-8 b(rame)24
-b(\(\\frame2"\))g(whic)m(h)f(con)m(tains)g(the)g(information)0
-4514 y(asso)s(ciated)35 b(with)f(axes)g(3)g(and)f(2,)i(in)e(that)i
-(order,)f(from)f(the)h(original)h(F)-8 b(rame)34 b(\(\\frame1"\).)53
-b(The)33 b(original)0 4627 y(F)-8 b(rame)35 b(is)g(not)f(altered)i(b)m
-(y)e(this)g(pro)s(cess.)53 b(Bew)m(are,)37 b(ho)m(w)m(ev)m(er,)g(that)e
-(the)f(axis)h(information)g(ma)m(y)g(still)g(b)s(e)0
-4740 y(shared)29 b(b)m(y)h(b)s(oth)f(F)-8 b(rames,)31
-b(so)f(if)g(y)m(ou)g(wish)f(to)i(alter)g(either)f(of)g(them)g(indep)s
-(enden)m(tly)f(y)m(ou)h(ma)m(y)h(\014rst)e(need)0 4853
-y(to)i(use)f(astCop)m(y)h(\()p Fu(x)p FF(4.13\))i(to)e(mak)m(e)h(an)e
-(indep)s(enden)m(t)f(cop)m(y)-8 b(.)0 5016 y(In)28 b(addition)h(to)h
-(the)f(new)f(F)-8 b(rame)30 b(p)s(oin)m(ter,)f(astPic)m(kAxes)i(will)f
-(also)f(return)f(a)h(p)s(oin)m(ter)g(to)h(a)f(new)g(Mapping)0
-5128 y Fx(via)35 b FF(its)h(fourth)e(argumen)m(t)h(\(y)m(ou)h(ma)m(y)g
-(supply)d(a)j(NULL)f(p)s(oin)m(ter)g(as)g(an)g(argumen)m(t)h(if)f(y)m
-(ou)g(do)g(not)h(w)m(an)m(t)0 5241 y(this)44 b(Mapping\).)84
-b(This)43 b(Mapping)i(will)f(in)m(ter-relate)j(the)e(t)m(w)m(o)h(F)-8
-b(rames.)83 b(By)45 b(this)g(w)m(e)f(mean)h(that)g(its)0
-5354 y(forw)m(ard)28 b(transformation)h(will)g(con)m(v)m(ert)i(co)s
-(ordinates)e(originally)i(in)d(the)h(co)s(ordinate)h(system)e(represen)
-m(ted)0 5467 y(b)m(y)i(\\frame1")i(in)m(to)f(that)g(represen)m(ted)g(b)
-m(y)f(\\frame2",)i(while)e(its)h(in)m(v)m(erse)g(transformation)g(will)
-g(con)m(v)m(ert)h(in)0 5580 y(the)h(opp)s(osite)h(direction.)50
-b(In)32 b(this)h(particular)h(case,)h(the)e(Mapping)h(w)m(ould)f(b)s(e)
-f(a)i(P)m(ermMap)f(\()p Fu(x)p FF(5.10\))j(and)0 5693
-y(w)m(ould)30 b(implemen)m(t)h(the)g(follo)m(wing)h(transformations:)p
-eop end
-%%Page: 73 83
-TeXDict begin 73 82 bop 0 52 a Fy(7.11)93 b(Calculating)31
-b(Distances,)h(Angles)f(and)f(O\013sets)1774 b FF(73)227
-351 y Fq(Forward:)370 464 y(\(1,)47 b(2,)h(3\))f(-->)g(\(3,)g(2\))370
-577 y(\(2,)g(4,)h(6\))f(-->)g(\(6,)g(4\))370 690 y(\(3,)g(6,)h(9\))f
-(-->)g(\(9,)g(6\))370 803 y(\(4,)g(8,)h(12\))e(-->)h(\(12,)g(8\))370
-916 y(\(5,)g(10,)g(15\))g(-->)g(\(15,)g(10\))227 1142
-y(Inverse:)370 1255 y(\(3,)g(2\))h(-->)e(\(<bad>,)g(2,)h(3\))370
-1367 y(\(6,)g(4\))h(-->)e(\(<bad>,)g(4,)h(6\))370 1480
-y(\(9,)g(6\))h(-->)e(\(<bad>,)g(6,)h(9\))370 1593 y(\(12,)g(8\))g(-->)g
-(\(<bad>,)f(8,)h(12\))370 1706 y(\(15,)g(10\))g(-->)g(\(<bad>,)f(10,)h
-(15\))0 1968 y FF(This)35 b(is)h(our)g(\014rst)f(in)m(tro)s(duction)h
-(to)h(the)f(idea)h(of)f(in)m(ter-relating)i(pairs)e(of)g(F)-8
-b(rames)37 b Fx(via)f FF(a)h(Mapping,)g(but)0 2081 y(this)30
-b(will)h(assume)f(a)h(cen)m(tral)h(role)f(later)g(on.)0
-2243 y(Note)k(that)g(when)e(using)g(astPic)m(kAxes,)k(it)e(is)f(also)h
-(p)s(ossible)e(to)i(request)f(more)g(axes)h(than)e(there)h(w)m(ere)h
-(in)0 2356 y(the)f(original)g(F)-8 b(rame.)51 b(This)32
-b(will)i(in)m(v)m(olv)m(e)i(selecting)f(axes)f(from)f(the)h(original)g
-(F)-8 b(rame)34 b(that)g(do)g(not)f(exist.)0 2469 y(T)-8
-b(o)33 b(do)g(this,)h(the)f(corresp)s(onding)f(axis)i(n)m(um)m(b)s(er)e
-(\(in)h(the)g(\\pic)m(k")h(arra)m(y\))g(should)e(b)s(e)h(set)g(to)h
-(zero)g(and)e(the)0 2582 y(e\013ect)f(is)e(to)h(in)m(tro)s(duce)f(an)g
-(additional)h(new)f(axis)h(whic)m(h)f(is)g(not)g(deriv)m(ed)h(from)e
-(the)i(original)g(F)-8 b(rame.)41 b(This)0 2695 y(axis)30
-b(will)g(ha)m(v)m(e)g(default)g(v)-5 b(alues)30 b(for)f(all)h(its)g
-(attributes.)41 b(Y)-8 b(ou)30 b(will)g(need)f(to)h(do)g(this)f(b)s
-(ecause)g(astPic)m(kAxes)0 2808 y(do)s(es)h(not)h(allo)m(w)h(y)m(ou)e
-(to)h(select)h(an)m(y)f(of)g(the)f(original)i(axes)f(more)f(than)g
-(once.)2733 2775 y Fv(14)0 3101 y Fw(7.11)112 b(Calculating)39
-b(Distances,)f(Angles)g(and)g(O\013sets)0 3322 y FF(Some)33
-b(complemen)m(tary)g(functions)f(are)h(pro)m(vided)f(for)h(use)f(with)g
-(F)-8 b(rames)33 b(to)h(allo)m(w)g(y)m(ou)f(to)g(p)s(erform)e(geo-)0
-3435 y(metric)g(op)s(erations)g(without)f(needing)h(to)g(kno)m(w)f(the)
-h(nature)f(of)h(the)f(co)s(ordinate)i(system)e(represen)m(ted)h(b)m(y)0
-3548 y(the)g(F)-8 b(rame.)0 3710 y(F)g(unctions)28 b(can)f(b)s(e)f
-(used)g(to)i(\014nd)d(the)j(distance)f(b)s(et)m(w)m(een)h(t)m(w)m(o)g
-(p)s(oin)m(ts,)g(and)e(to)i(o\013set)g(a)g(sp)s(eci\014ed)e(distance)0
-3823 y(along)33 b(a)f(line)h(joining)f(t)m(w)m(o)h(p)s(oin)m(ts,)f
-Fx(etc.)45 b FF(In)31 b(essence,)j(these)e(de\014ne)f(the)h(metric)h
-(of)f(the)g(co)s(ordinate)h(space)0 3936 y(whic)m(h)d(the)h(F)-8
-b(rame)31 b(represen)m(ts.)41 b(In)29 b(the)i(case)g(of)g(a)g(basic)f
-(F)-8 b(rame,)32 b(this)e(is)h(a)f(Cartesian)h(metric.)0
-4099 y(The)37 b(\014rst)f(of)h(these)h(functions,)h(astDistance,)i
-(returns)36 b(a)i(double)e(distance)i(v)-5 b(alue)38
-b(when)e(supplied)g(with)0 4212 y(the)31 b(F)-8 b(rame)31
-b(co)s(ordinates)g(of)f(t)m(w)m(o)i(p)s(oin)m(ts.)41
-b(F)-8 b(or)31 b(example:)227 4460 y Ft(double)41 b(dist;)227
-4560 y(double)g(point1[)g(2)i(])g(=)h({)f(0.0,)f(0.0)g(};)227
-4659 y(double)f(point2[)g(2)i(])g(=)h({)f(1.0,)f(1.0)g(};)227
-4858 y(...)227 5058 y(dist)g(=)h(astDistance\()c(frame,)i(point1,)g
-(point2)g(\);)0 5319 y FF(This)29 b(calculates)i(the)f(distance)g(b)s
-(et)m(w)m(een)g(the)g(origin)g(\(0,0\))h(and)e(a)h(p)s(oin)m(t)f(at)h
-(p)s(osition)g(\(1,1\).)42 b(In)29 b(this)g(case,)0 5432
-y(the)j(result,)h(as)f(y)m(ou)g(w)m(ould)g(exp)s(ect,)h(is)1400
-5368 y Fu(p)1476 5432 y FF(2.)46 b(Ho)m(w)m(ev)m(er,)34
-b(this)e(is)g(only)g(true)g(for)g(the)g(Cartesian)h(co)s(ordinate)p
-0 5516 1512 4 v 73 5570 a Fs(14)138 5602 y Fr(It)g(will)i(probably)e
-(not)h(b)r(e)f(ob)n(vious)h(wh)n(y)f(this)g(restriction)i(is)f
-(necessary)-6 b(,)36 b(but)c(consider)j(creating)f(a)g(F)-6
-b(rame)34 b(with)f(one)0 5693 y(longitude)26 b(axis)g(and)g(t)n(w)n(o)g
-(latitude)f(axes.)35 b(Whic)n(h)25 b(latitude)h(axis)h(should)e(b)r(e)h
-(asso)r(ciated)h(with)f(the)g(longitude)g(axis?)p eop
-end
-%%Page: 74 84
-TeXDict begin 74 83 bop 0 52 a FF(74)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(system)44 b(whic)m(h)g(a)h(basic)f(F)-8 b(rame)45
-b(represen)m(ts.)82 b(In)44 b(general,)k(astDistance)f(will)d
-(calculate)j(the)d(geo)s(desic)0 464 y(distance)35 b(b)s(et)m(w)m(een)f
-(the)g(t)m(w)m(o)h(p)s(oin)m(ts,)g(so)f(that)h(with)e(a)h(more)g(sp)s
-(ecialised)h(F)-8 b(rame)35 b(\(suc)m(h)e(as)i(a)f(SkyF)-8
-b(rame,)0 577 y(represen)m(ting)31 b(the)f(celestial)j(sphere\))d(a)h
-(great-circle)i(distance)e(migh)m(t)g(b)s(e)f(returned.)0
-747 y(The)40 b(astO\013set)h(function)f(is)g(really)i(the)e(in)m(v)m
-(erse)h(of)g(astDistance.)72 b(Giv)m(en)42 b(t)m(w)m(o)f(p)s(oin)m(ts)f
-(in)g(a)h(F)-8 b(rame,)44 b(it)0 860 y(calculates)29
-b(the)d(co)s(ordinates)h(of)g(a)g(third)e(p)s(oin)m(t)i(whic)m(h)f(is)g
-(o\013set)i(a)f(sp)s(eci\014ed)e(distance)i(a)m(w)m(a)m(y)i(from)d(the)
-g(\014rst)0 973 y(p)s(oin)m(t)k(along)i(the)e(geo)s(desic)i(joining)e
-(it)h(to)g(the)g(second)f(one.)41 b(F)-8 b(or)32 b(example:)227
-1243 y Ft(double)41 b(point1[)g(2)i(])g(=)h({)f(0.0,)f(0.0)g(};)227
-1343 y(double)f(point2[)g(2)i(])g(=)h({)f(1.0,)f(1.0)g(};)227
-1443 y(double)f(point3[)g(2)i(];)227 1642 y(...)227 1841
-y(astOffset\()d(frame,)h(point1.)g(point2,)f(0.5,)i(point3)f(\);)0
-2125 y FF(This)28 b(w)m(ould)h(\014ll)h(the)f(\\p)s(oin)m(t3")i(arra)m
-(y)e(with)g(the)h(co)s(ordinates)g(of)f(a)h(p)s(oin)m(t)f(whic)m(h)g
-(is)g(o\013set)i(0.5)f(units)f(a)m(w)m(a)m(y)0 2238 y(from)35
-b(the)h(origin)g(\(0,0\))i(in)e(the)f(direction)i(of)f(the)g(p)s
-(osition)g(\(1,1\).)58 b(Again,)39 b(this)c(is)h(a)g(simple)g(result)g
-(in)f(a)0 2351 y(Cartesian)j(F)-8 b(rame,)40 b(as)e(v)-5
-b(arying)38 b(the)f(o\013set)i(will)f(trace)g(out)g(a)g(straigh)m(t)g
-(line.)63 b(On)36 b(the)i(celestial)i(sphere,)0 2464
-y(ho)m(w)m(ev)m(er)32 b(\()p Fx(e.g.)e FF(using)g(a)g(SkyF)-8
-b(rame\),)32 b(it)f(w)m(ould)f(trace)h(out)g(a)g(great)g(circle.)0
-2633 y(The)h(functions)h(astAxDistance)i(and)e(astAxO\013set)h(are)f
-(similar)g(to)h(astDistance)h(and)e(astO\013set,)h(except)0
-2746 y(that)39 b(the)f(curv)m(es)g(whic)m(h)f(they)h(use)g(as)g
-(\\straigh)m(t)i(lines")e(are)h(not)f(geo)s(desics,)j(but)c(curv)m(es)h
-(parallel)h(to)g(a)0 2859 y(sp)s(eci\014ed)e(axis)528
-2826 y Fv(15)604 2859 y FF(.)64 b(One)38 b(reason)g(for)g(using)g
-(these)g(functions)g(is)g(to)h(deal)g(with)f(the)g(cyclic)i(am)m
-(biguit)m(y)f(of)0 2972 y(longitude)31 b(and)f(latitude)h(axes.)0
-3142 y(The)j(astO\013set2)i(function)f(is)f(similar)h(to)h
-(astO\013set,)h(but)d(instead)h(of)f(using)g(the)h(geo)s(desic)h(whic)m
-(h)f(passes)0 3255 y(through)e(t)m(w)m(o)i(p)s(ositions,)f(it)g(uses)f
-(the)h(geo)s(desic)g(whic)m(h)g(passes)f(at)h(a)g(giv)m(en)g(p)s
-(osition)g(angle)g(through)f(the)0 3368 y(starting)e(p)s(osition.)0
-3538 y(P)m(osition)40 b(angles)g(are)g(alw)m(a)m(ys)g(measured)f(from)f
-(the)h(p)s(ositiv)m(e)h(direction)g(of)f(the)g(second)g(F)-8
-b(rame)40 b(axis)g(to)0 3651 y(the)g(required)f(line,)k(with)d(p)s
-(ositiv)m(e)h(angles)g(b)s(eing)e(in)h(the)g(same)g(sense)g(as)h
-(rotation)g(from)e(the)h(p)s(ositiv)m(e)0 3763 y(direction)g(of)f(the)h
-(second)f(axis)h(to)g(the)f(p)s(ositiv)m(e)h(direction)g(of)g(the)f
-(\014rst)f(F)-8 b(rame)41 b(axis.)67 b(This)39 b(de\014nition)0
-3876 y(applies)27 b(to)h(all)g(classes)g(of)f(F)-8 b(rame,)29
-b(including)e(SkyF)-8 b(rame.)40 b(The)27 b(default)g(ordering)g(of)g
-(axes)h(in)f(a)g(SkyF)-8 b(rame)0 3989 y(mak)m(es)35
-b(the)f(second)g(axis)g(equiv)-5 b(alen)m(t)36 b(to)e(north,)h(and)e
-(so)h(the)h(de\014nition)e(of)h(p)s(osition)g(angle)h(giv)m(en)g(ab)s
-(o)m(v)m(e)0 4102 y(corresp)s(onds)30 b(to)h(the)h(normal)f
-(astronomical)h(usage,)g(\\from)f(north,)g(through)f(east".)44
-b(Ho)m(w)m(ev)m(er,)34 b(it)d(should)0 4215 y(b)s(e)j(remem)m(b)s(ered)
-g(that)i(it)f(is)g(p)s(ossible)f(to)i(p)s(erm)m(ute)e(the)h(axes)h(of)f
-(a)g(SkyF)-8 b(rame)35 b(\(or)g(indeed)g(an)m(y)g(F)-8
-b(rame\),)0 4328 y(so)32 b(that)h(north)e(b)s(ecomes)h(axis)g(1.)46
-b(In)31 b(this)h(case,)h(an)f(AST)f(\\p)s(osition)h(angle")i(w)m(ould)d
-(b)s(e)h(the)g(angle)g(\\from)0 4441 y(east,)c(through)d(north".)39
-b(Alw)m(a)m(ys)27 b(tak)m(e)g(the)f(axis)g(ordering)f(in)m(to)i(accoun)
-m(t)g(when)e(deriving)g(an)h(astronomical)0 4554 y(p)s(osition)k(angle)
-i(from)e(an)g(AST)g(p)s(osition)g(angle.)0 4724 y(Within)35
-b(a)f(Cartesian)h(co)s(ordinate)h(system,)f(the)g(p)s(osition)f(angle)i
-(of)e(a)h(geo)s(desic)h(\()p Fx(i.e.)e FF(a)h(straigh)m(t)g(line\))g
-(is)0 4837 y(constan)m(t)40 b(along)g(its)g(en)m(tire)f(length,)j(but)c
-(this)h(is)g(not)g(necessarily)h(true)f(of)g(other)g(co)s(ordinate)h
-(systems.)0 4950 y(Within)e(a)f(spherical)h(co)s(ordinate)g(system,)i
-(for)d(instance,)j(the)d(p)s(osition)h(angle)g(of)g(a)f(geo)s(desic)i
-(will)f(v)-5 b(ary)0 5062 y(along)40 b(its)e(length)h(\(except)h(for)e
-(the)h(sp)s(ecial)g(cases)g(of)g(a)g(meridian)f(and)g(the)g(equator\).)
-66 b(In)38 b(addition)h(to)0 5175 y(returning)32 b(the)h(required)e
-(o\013set)j(p)s(osition,)g(the)e(astO\013set2)j(function)d(returns)f
-(the)i(p)s(osition)g(angle)g(of)g(the)0 5288 y(geo)s(desic)39
-b(at)f(the)g(o\013set)g(p)s(osition.)63 b(This)37 b(is)g(useful)g(if)h
-(y)m(ou)g(w)m(an)m(t)g(to)g(trace)h(out)f(a)g(path)f(whic)m(h)g(in)m(v)
-m(olv)m(es)0 5401 y(turning)h(through)h(sp)s(eci\014ed)g(angles.)68
-b(F)-8 b(or)40 b(instance,)j(tracing)d(out)g(a)f(rectangle)j(in)d(whic)
-m(h)g(eac)m(h)h(side)f(is)0 5514 y(a)h(geo)s(desic)g(in)m(v)m(olv)m(es)
-h(turning)e(through)f(90)i(degrees)g(at)g(the)g(corners.)67
-b(T)-8 b(o)39 b(do)h(this,)h(use)e(astO\013set2)i(to)p
-0 5607 1512 4 v 73 5661 a Fs(15)138 5693 y Fr(F)-6 b(or)26
-b(instance,)g(a)g(line)h(of)f(constan)n(t)g(Declination)g(is)g(not)g(a)
-g(geo)r(desic)p eop end
-%%Page: 75 85
-TeXDict begin 75 84 bop 0 52 a Fy(7.12)93 b(The)29 b(Domain)j(A)m
-(ttribute)2534 b FF(75)0 351 y(calculate)36 b(the)f(p)s(osition)f(of)g
-(eac)m(h)h(corner,)h(and)d(then)h(add)f(\(or)i(subtract\))f(90)h
-(degrees)g(from)e(the)h(p)s(osition)0 464 y(angle)d(returned)f(b)m(y)g
-(astO\013set2.)0 627 y(The)20 b(astAngle)j(function)d(calculates)k(the)
-d(angle)h(subtended)d(b)m(y)i(t)m(w)m(o)h(p)s(oin)m(ts,)h(at)f(a)f
-(third)g(p)s(oin)m(t.)37 b(If)21 b(used)f(with)0 740
-y(a)32 b(2-dimensional)g(F)-8 b(rame)33 b(the)f(returned)e(angle)j(is)e
-(signed)h(to)g(indicate)h(the)e(sense)h(of)g(rotation)h(\(clo)s(c)m
-(kwise)0 853 y(or)27 b(an)m(ti-clo)s(c)m(kwise\))j(in)d(taking)g(the)g
-(\\shortest)h(route")g(from)e(the)h(\014rst)f(p)s(oin)m(t)h(to)g(the)h
-(second.)39 b(If)26 b(the)i(F)-8 b(rame)0 966 y(has)30
-b(more)h(than)f(2)h(axes,)g(the)f(result)h(is)f(un-signed)g(and)f(is)i
-(alw)m(a)m(ys)h(in)e(the)g(range)h(zero)g(to)g Fo(\031)s
-FF(.)0 1129 y(The)24 b(astAxAngle)h(function)f(is)h(similar)f(to)h
-(astAngle,)i(but)d(the)g(\\reference)h(direction",)i(from)d(whic)m(h)g
-(angles)0 1242 y(are)31 b(measured,)f(is)g(a)h(sp)s(eci\014ed)f(axis.)0
-1404 y(The)39 b(astResolv)m(e)j(function)d(resolv)m(es)i(a)f(giv)m(en)g
-(displacemen)m(t)h(within)e(a)g(F)-8 b(rame)41 b(in)m(to)f(t)m(w)m(o)h
-(comp)s(onen)m(ts,)0 1517 y(parallel)31 b(and)f(p)s(erp)s(endicular)f
-(to)i(a)f(giv)m(en)i(reference)f(direction.)0 1680 y(The)k(displacemen)
-m(t)h(is)g(sp)s(eci\014ed)e(b)m(y)i(t)m(w)m(o)g(p)s(ositions)g(within)f
-(the)g(F)-8 b(rame;)39 b(the)d(starting)g(and)f(ending)g(p)s(o-)0
-1793 y(sitions.)61 b(The)36 b(reference)h(direction)h(is)f(de\014ned)f
-(b)m(y)g(the)h(geo)s(desic)i(curv)m(e)e(passing)f(through)h(the)g
-(starting)0 1906 y(p)s(osition)23 b(and)f(a)g(third)g(sp)s(eci\014ed)g
-(p)s(osition.)38 b(The)22 b(lengths)h(of)g(the)f(t)m(w)m(o)i(comp)s
-(onen)m(ts)f(are)g(returned,)g(together)0 2019 y(with)30
-b(the)h(p)s(osition)f(on)g(the)h(reference)g(geo)s(desic)g(whic)m(h)f
-(is)h(closest)h(to)f(the)f(third)g(supplied)f(p)s(oin)m(t.)0
-2313 y Fw(7.12)112 b(The)38 b(Domain)h(A)m(ttribute)0
-2534 y FF(The)26 b(Domain)i(attribute)f(is)g(one)g(of)g(the)g(most)g
-(imp)s(ortan)m(t)g(prop)s(erties)f(of)h(a)g(F)-8 b(rame,)28
-b(although)g(the)e(concept)0 2647 y(it)j(expresses)e(can)i(sometimes)g
-(seem)f(a)g(little)i(subtle.)40 b(W)-8 b(e)29 b(will)f(in)m(tro)s(duce)
-g(it)h(here,)f(but)g(its)g(true)g(v)-5 b(alue)28 b(will)0
-2760 y(probably)i(not)g(b)s(ecome)h(apparen)m(t)g(un)m(til)f(later)i
-(\()p Fu(x)p FF(14.2\).)0 2923 y(T)-8 b(o)32 b(understand)e(the)h(need)
-h(for)f(the)g(Domain)i(attribute,)g(consider)e(using)g(di\013eren)m(t)h
-(F)-8 b(rames)32 b(to)g(represen)m(t)0 3036 y(the)f(follo)m(wing)g
-(di\013eren)m(t)g(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(a)g
-(CCD)h(image:)111 3299 y(1.)46 b(A)31 b(co)s(ordinate)g(system)f(based)
-h(on)f(pixel)g(n)m(um)m(b)s(ers.)111 3487 y(2.)46 b(P)m(ositions)32
-b(on)e(the)h(CCD)f(c)m(hip,)g(measured)g(in)g Fo(\026)p
-FF(m.)111 3675 y(3.)46 b(P)m(ositions)32 b(in)e(the)h(fo)s(cal)g(plane)
-f(of)h(the)f(telescop)s(e,)i(measured)e(in)g(mm.)111
-3862 y(4.)46 b(A)31 b(celestial)i(co)s(ordinate)e(system,)g(measured)e
-(in)i(radians.)0 4125 y(If)h(w)m(e)g(had)g(t)m(w)m(o)i(suc)m(h)d(CCD)h
-(images,)i(w)m(e)f(migh)m(t)g(legitimately)i(w)m(an)m(t)e(to)g(align)g
-(them)f(pixel-for-pixel)i(\()p Fx(i.e.)0 4238 y FF(using)41
-b(the)i(co)s(ordinate)f(system)h(based)e(on)h(pixel)g(n)m(um)m(b)s
-(ers\))f(in)h(order)f(to,)46 b(sa)m(y)-8 b(,)46 b(divide)c(b)m(y)g(a)g
-(\015at-\014eld)0 4351 y(exp)s(osure.)d(W)-8 b(e)31 b(migh)m(t)f
-(similarly)f(consider)g(aligning)h(them)g(using)e(an)m(y)i(of)f(the)g
-(other)h(co)s(ordinate)f(systems)0 4464 y(so)f(as)f(to)i(ac)m(hiev)m(e)
-h(di\013eren)m(t)e(results.)39 b(F)-8 b(or)28 b(example,)h(w)m(e)f
-(migh)m(t)h(consider)e(merging)h(separate)g(images)h(from)0
-4577 y(a)i(CCD)f(mosaic)h(b)m(y)g(using)e(fo)s(cal)j(plane)e(p)s
-(ositions.)0 4740 y(It)g(w)m(ould)f(ob)m(viously)h(not)g(b)s(e)f
-(legitimate,)k(ho)m(w)m(ev)m(er,)e(to)g(directly)f(compare)g(p)s
-(ositions)g(in)f(one)h(image)h(mea-)0 4853 y(sured)e(in)g(pixels)h
-(with)g(p)s(ositions)f(in)h(the)g(other)g(measured)f(in)h(mm,)f(nor)h
-(to)g(equate)h(c)m(hip)f(p)s(ositions)g(in)f Fo(\026)p
-FF(m)0 4966 y(with)39 b(sky)f(co)s(ordinates)i(in)e(radians.)66
-b(If)38 b(w)m(e)i(w)m(an)m(ted)f(to)h(in)m(ter-compare)g(these)f(co)s
-(ordinates,)j(w)m(e)e(w)m(ould)0 5078 y(need)26 b(to)h(do)f(it)h
-(indirectly)-8 b(,)28 b(using)e(other)h(information)f(based)g(on)h(the)
-f(exp)s(erimen)m(tal)h(set-up.)39 b(F)-8 b(or)28 b(instance,)0
-5191 y(w)m(e)k(migh)m(t)h(need)f(to)g(kno)m(w)g(the)h(size)f(of)g(the)h
-(pixels)f(expressed)f(in)h(mm)f(and)g(the)i(orien)m(tation)h(of)e(the)g
-(CCD)0 5304 y(c)m(hip)e(in)h(the)f(fo)s(cal)h(plane.)0
-5467 y(Note)24 b(that)g(it)f(is)g(not)h(simply)e(the)h(di\013erence)h
-(in)e(ph)m(ysical)i(units)e(whic)m(h)h(prev)m(en)m(ts)g(certain)h(co)s
-(ordinates)g(from)0 5580 y(b)s(eing)36 b(directly)i(in)m(ter-compared)f
-(\(b)s(ecause)g(the)g(appropriate)g(unit)f(scaling)i(factors)f(could)g
-(b)s(e)f(included)0 5693 y(without)28 b(an)m(y)g(additional)h
-(information\).)41 b(Neither)28 b(is)h(it)f(the)g(fact)h(that)g
-(di\013eren)m(t)f(co)s(ordinate)h(systems)f(are)p eop
-end
-%%Page: 76 86
-TeXDict begin 76 85 bop 0 52 a FF(76)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))0 351 y
-FF(in)36 b(use)g(\(b)s(ecause)g(w)m(e)h(could)f(legitimately)j(in)m
-(ter-compare)f(t)m(w)m(o)f(di\013eren)m(t)g(celestial)h(co)s(ordinate)f
-(systems)0 464 y(without)e(an)m(y)g(extra)g(information\).)55
-b(Instead,)36 b(it)f(is)g(the)g(di\013eren)m(t)g(nature)g(of)g(the)g
-(co)s(ordinate)h(spaces)f(to)0 577 y(whic)m(h)30 b(these)h(co)s
-(ordinate)g(systems)g(ha)m(v)m(e)g(b)s(een)f(applied.)0
-733 y(W)-8 b(e)45 b(normally)f(express)g(this)f(b)m(y)h(sa)m(ying)h
-(that)f(the)g(co)s(ordinate)h(systems)f(apply)g(to)g(di\013eren)m(t)h
-Fx(physic)-5 b(al)0 846 y(domains)p FF(.)87 b(Although)45
-b(w)m(e)h(ma)m(y)f(establish)h Fx(ad)h(ho)-5 b(c)46 b
-FF(relationships)g(b)s(et)m(w)m(een)f(co)s(ordinates)h(in)f(di\013eren)
-m(t)0 959 y(ph)m(ysical)34 b(domains,)g(they)g(are)g(not)f(in)m
-(trinsically)i(related)f(to)g(eac)m(h)h(other)f(and)f(w)m(e)g(need)h
-(to)g(supply)e(extra)0 1072 y(information)f(b)s(efore)f(w)m(e)g(can)h
-(con)m(v)m(ert)h(co)s(ordinates)f(b)s(et)m(w)m(een)g(them.)0
-1227 y(In)22 b(AST,)g(the)g(role)h(of)g(the)g(\(c)m(haracter)h
-(string\))f(Domain)g(attribute)g(is)g(to)g(assign)f(F)-8
-b(rames)24 b(to)f(their)f(resp)s(ectiv)m(e)0 1340 y(ph)m(ysical)31
-b(domains.)40 b(The)30 b(w)m(a)m(y)i(it)f(op)s(erates)f(is)h(as)f
-(follo)m(ws:)136 1574 y Fu(\017)46 b FF(Co)s(ordinate)27
-b(systems)g(whic)m(h)g(apply)f(to)i(the)f(same)g(ph)m(ysical)h(domain)e
-(\()p Fx(i.e.)h FF(whose)g(F)-8 b(rames)27 b(ha)m(v)m(e)h(the)227
-1687 y(same)j(Domain)g(v)-5 b(alue\))31 b(can)g(b)s(e)f(directly)h(in)m
-(ter-compared.)227 1834 y(If)e(the)h(domain)f(has)g(sev)m(eral)h(co)s
-(ordinate)h(systems)e(asso)s(ciated)i(with)e(it)g(\()p
-Fx(e.g.)g FF(the)h(celestial)i(sphere\),)227 1947 y(then)h(a)h(co)s
-(ordinate)g(con)m(v)m(ersion)g(ma)m(y)g(b)s(e)e(in)m(v)m(olv)m(ed.)51
-b(Otherwise,)34 b(co)s(ordinate)g(v)-5 b(alues)33 b(ma)m(y)h(simply)227
-2060 y(b)s(e)c(equated.)136 2241 y Fu(\017)46 b FF(Co)s(ordinate)40
-b(systems)f(whic)m(h)h(apply)f(to)h(di\013eren)m(t)g(ph)m(ysical)g
-(domains)f(\()p Fx(i.e.)h FF(whose)f(F)-8 b(rames)40
-b(ha)m(v)m(e)227 2353 y(di\013eren)m(t)31 b(Domain)g(v)-5
-b(alues\))31 b(cannot)g(b)s(e)f(directly)h(in)m(ter-compared.)227
-2500 y(If)39 b(an)m(y)g(relationship)g(do)s(es)g(exist)g(b)s(et)m(w)m
-(een)h(suc)m(h)e(co)s(ordinate)i(systems|and)e(it)i(need)f(not|then)227
-2613 y(additional)j(information)g(m)m(ust)f(b)s(e)g(supplied)f(in)h
-(order)f(to)i(establish)g(the)f(relationship)h(b)s(et)m(w)m(een)227
-2726 y(them)36 b(in)g(an)m(y)h(particular)f(case.)60
-b(W)-8 b(e)37 b(will)g(see)f(later)i(\()p Fu(x)p FF(13\))g(ho)m(w)e(to)
-h(establish)f(suc)m(h)g(relationships)227 2839 y(b)s(et)m(w)m(een)31
-b(F)-8 b(rames)31 b(in)f(di\013eren)m(t)h(domains.)0
-3073 y(With)g(the)g(basic)g(F)-8 b(rames)32 b(w)m(e)f(are)g
-(considering)g(here,)g(eac)m(h)h(ph)m(ysical)g(domain)e(only)h(has)g(a)
-g(single)g(\(Carte-)0 3186 y(sian\))k(co)s(ordinate)g(system)g(asso)s
-(ciated)h(with)e(it,)i(so)f(that)g(if)f(t)m(w)m(o)i(suc)m(h)e(F)-8
-b(rames)35 b(ha)m(v)m(e)h(the)f(same)g(Domain)0 3299
-y(v)-5 b(alue,)36 b(their)f(co)s(ordinate)h(systems)e(will)h(b)s(e)f
-(iden)m(tical)j(and)d(ma)m(y)h(simply)f(b)s(e)g(equated.)54
-b(With)35 b(more)g(sp)s(e-)0 3412 y(cialised)30 b(F)-8
-b(rames,)31 b(ho)m(w)m(ev)m(er,)f(more)g(than)e(one)i(co)s(ordinate)f
-(system)g(ma)m(y)h(apply)f(to)g(eac)m(h)h(domain.)41
-b(In)28 b(suc)m(h)0 3525 y(cases,)k(a)e(co)s(ordinate)i(con)m(v)m
-(ersion)f(ma)m(y)g(need)f(to)h(b)s(e)f(p)s(erformed.)0
-3681 y(When)i(a)h(basic)g(F)-8 b(rame)34 b(is)e(created,)j(its)e
-(Domain)g(attribute)g(defaults)g(to)g(an)g(empt)m(y)g(string.)47
-b(This)32 b(means)0 3793 y(that)38 b(all)h(suc)m(h)e(F)-8
-b(rames)38 b(b)s(elong)g(to)g(the)g(same)g(\(n)m(ull\))g(domain)g(b)m
-(y)f(default)h(and)f(therefore)h(describ)s(e)f(the)0
-3906 y(same)d(unsp)s(eci\014ed)f(ph)m(ysical)i(co)s(ordinate)f(space.)
-53 b(In)33 b(order)h(to)h(assign)f(a)h(F)-8 b(rame)35
-b(to)f(a)h(di\013eren)m(t)f(domain,)0 4019 y(y)m(ou)h(simply)g(need)f
-(to)i(set)f(its)g(Domain)h(v)-5 b(alue.)54 b(This)34
-b(is)h(normally)g(most)g(con)m(v)m(enien)m(tly)j(done)c(when)g(it)h(is)
-0 4132 y(created,)d(as)e(follo)m(ws:)227 4353 y Ft(frame1)41
-b(=)j(astFrame\()39 b(2,)k("Domain=CCD_CHIP,)o(")1186
-4453 y("Unit\(1\)=micron,")1186 4552 y("Unit\(2\)=micron")37
-b(\);)227 4652 y(frame2)k(=)j(astFrame\()39 b(2,)k("Domain=FOCAL_PLA)o
-(NE)o(,")1186 4752 y("Unit\(1\)=mm,")1186 4851 y("Unit\(2\)=mm")c(\);)0
-5086 y FF(Here,)44 b(w)m(e)d(ha)m(v)m(e)h(created)g(t)m(w)m(o)g(F)-8
-b(rames)41 b(in)f(di\013eren)m(t)i(ph)m(ysical)f(domains.)71
-b(Although)41 b(their)g(co)s(ordinate)0 5199 y(v)-5 b(alues)30
-b(all)h(ha)m(v)m(e)h(units)d(of)h(length,)h(they)g(cannot)f(b)s(e)g
-(directly)h(in)m(ter-compared)g(\(b)s(ecause)f(their)g(axes)h(ma)m(y)0
-5311 y(b)s(e)f(rotated)h(with)f(resp)s(ect)h(to)g(eac)m(h)g(other,)g
-(for)f(instance\).)0 5467 y(All)j(Domain)h(v)-5 b(alues)33
-b(are)h(automatically)h(con)m(v)m(erted)g(to)e(upp)s(er)e(case)j(and)e
-(white)h(space)h(is)e(remo)m(v)m(ed,)j(but)0 5580 y(there)h(are)g(no)g
-(other)g(restrictions)g(on)g(the)g(names)g(y)m(ou)g(ma)m(y)g(use)f(to)i
-(lab)s(el)f(di\013eren)m(t)g(ph)m(ysical)g(domains.)0
-5693 y(F)-8 b(rom)31 b(a)g(practical)h(p)s(oin)m(t)e(of)h(view,)f(ho)m
-(w)m(ev)m(er,)i(it)f(is)g(w)m(orth)f(follo)m(wing)i(a)f(few)f(con)m(v)m
-(en)m(tions)i(\()p Fu(x)p FF(7.13\).)p eop end
-%%Page: 77 87
-TeXDict begin 77 86 bop 0 52 a Fy(7.13)93 b(Con)m(v)m(en)m(tions)31
-b(for)f(Domain)h(Names)2175 b FF(77)0 351 y Fw(7.13)112
-b(Con)m(v)m(en)m(tions)38 b(for)g(Domain)g(Names)0 583
-y FF(When)31 b(c)m(ho)s(osing)g(a)h(v)-5 b(alue)31 b(for)g(the)g
-(Domain)h(attribute)f(of)g(a)g(F)-8 b(rame,)33 b(it)e(ob)m(viously)h
-(mak)m(es)f(sense)g(to)h(a)m(v)m(oid)0 696 y(generic)d(names)g(whic)m
-(h)f(migh)m(t)h(clash)g(with)f(those)h(used)e(for)i(similar)f(\(but)g
-(subtly)g(di\013eren)m(t!\))41 b(purp)s(oses)27 b(b)m(y)0
-809 y(other)i(programmers.)40 b(If)28 b(y)m(ou)h(are)h(dev)m(eloping)g
-(soft)m(w)m(are)g(for)e(an)h(instrumen)m(t,)g(for)g(example,)h(and)e(w)
-m(an)m(t)i(to)0 922 y(iden)m(tify)25 b(an)f(instrumen)m(tal)h(co)s
-(ordinate)g(system,)h(then)e(it)h(is)g(sensible)f(to)h(add)f(a)h
-(distinguishing)f(pre\014x.)38 b(F)-8 b(or)0 1035 y(instance,)25
-b(y)m(ou)f(migh)m(t)f(use)g Fo(<)p FF(INST)p Fo(>)p Fq(_)p
-FF(F)m(OCAL)p Fq(_)p FF(PLANE,)e(where)i Fo(<)p FF(INST)p
-Fo(>)f FF(\()p Fx(e.g.)g FF(an)h(acron)m(ym\))h(iden)m(ti\014es)0
-1148 y(y)m(our)30 b(instrumen)m(t.)0 1317 y(F)-8 b(or)37
-b(some)g(purp)s(oses,)g(ho)m(w)m(ev)m(er,)j(a)d(standard)e(c)m(hoice)k
-(of)e(Domain)g(name)g(is)f(desirable)h(so)g(that)g(di\013eren)m(t)0
-1430 y(items)29 b(of)g(soft)m(w)m(are)h(can)e(comm)m(unicate.)42
-b(F)-8 b(or)29 b(this)g(purp)s(ose,)e(the)i(follo)m(wing)h(Domain)f
-(names)f(are)h(reserv)m(ed)0 1543 y(b)m(y)h(AST)g(and)g(the)g(use)g
-(recommended)g(b)s(elo)m(w)h(should)e(b)s(e)h(carefully)h(observ)m(ed:)
-227 1826 y FD(GRAPHICS)427 1939 y FF(Iden)m(ti\014es)25
-b(the)g(co)s(ordinate)g(space)g(used)f(b)m(y)g(an)h(underlying)e
-(computer)i(graphics)f(system)427 2052 y(to)f(sp)s(ecify)e(plotting)i
-(op)s(erations.)38 b(T)m(ypically)-8 b(,)25 b(when)c(p)s(erforming)f
-(graphical)j(op)s(erations,)427 2165 y(AST)29 b(is)h(used)g(to)g
-(de\014ne)g(additional)g(co)s(ordinate)h(systems)f(whic)m(h)g(are)g
-(related)h(to)g(these)427 2278 y(\\nativ)m(e")g(graphical)e(co)s
-(ordinates.)41 b(Plotting)30 b(ma)m(y)f(b)s(e)f(carried)g(out)h(in)f
-(an)m(y)h(of)f(these)h(co-)427 2391 y(ordinate)g(systems,)f(but)f(the)h
-(GRAPHICS)f(domain)h(iden)m(ti\014es)g(the)g(nativ)m(e)h(co)s
-(ordinates)427 2504 y(through)h(whic)m(h)g(AST)g(comm)m(unicates)i
-(with)e(the)g(underlying)g(graphics)g(system.)227 2657
-y FD(GRID)427 2770 y FF(Iden)m(ti\014es)35 b(the)f(instan)m(taneous)i
-Fx(data)i(grid)c FF(used)g(to)h(store)g(and)f(handle)g(data,)j
-(together)427 2883 y(with)f(an)f(asso)s(ciated)i(co)s(ordinate)g
-(system.)56 b(In)35 b(this)h(co)s(ordinate)g(system,)i(the)d(\014rst)g
-(el-)427 2996 y(emen)m(t)f(stored)f(in)g(an)g(arra)m(y)h(of)f(data)h
-(alw)m(a)m(ys)h(has)d(a)i(co)s(ordinate)g(v)-5 b(alue)34
-b(of)f(unit)m(y)g(at)h(its)427 3109 y(cen)m(tre)e(and)d(all)j(elemen)m
-(ts)f(ha)m(v)m(e)h(unit)e(exten)m(t.)42 b(This)30 b(applies)g(to)h(all)
-h(dimensions.)427 3242 y(If)h(data)g(are)g(copied)g(or)g(transformed)f
-(to)i(a)f(new)f(data)h(grid)g(\(b)m(y)g(whatev)m(er)g(means\),)h(or)427
-3354 y(a)29 b(subset)e(of)i(the)f(original)h(grid)f(is)h(extracted,)h
-(then)e(the)g(same)h(rules)e(apply)h(to)h(the)f(cop)m(y)427
-3467 y(or)f(subset.)40 b(Its)27 b(\014rst)f(elemen)m(t)j(therefore)e
-(has)g(GRID)h(co)s(ordinate)g(v)-5 b(alues)27 b(of)h(unit)m(y)f(at)h
-(its)427 3580 y(cen)m(tre.)62 b(Note)38 b(that)f(this)g(means)g(that)g
-(GRID)g(co)s(ordinates)h(remain)f(attac)m(hed)h(to)g(the)427
-3693 y(\014rst)c(elemen)m(t)i(of)f(the)f(data)h(grid)g(and)f(not)g(to)i
-(its)e(data)i(con)m(ten)m(t)g(\()p Fx(e.g.)e FF(the)h(features)f(in)427
-3806 y(an)d(image\).)227 3959 y FD(PIXEL)427 4072 y FF(Iden)m(ti\014es)
-42 b(an)f(arra)m(y)h(of)f(pixels)h(and)e(an)h(asso)s(ciated)i
-Fx(pixel-b)-5 b(ase)g(d)43 b FF(co)s(ordinate)f(system)427
-4185 y(whic)m(h)37 b(is)g(related)g(to)h(the)f(GRID)g(co)s(ordinate)h
-(system)f(\(ab)s(o)m(v)m(e\))h(simply)f(b)m(y)f(a)i(shift)e(of)427
-4298 y(origin)30 b(along)g(eac)m(h)g(axis.)41 b(This)29
-b(shift)g(ma)m(y)g(b)s(e)g(in)m(tegral,)i(fractional,)g(p)s(ositiv)m
-(e,)g(negativ)m(e)427 4411 y(or)g(zero.)41 b(The)30 b(data)h(elemen)m
-(ts)h(retain)f(their)f(unit)g(exten)m(t)i(along)f(eac)m(h)h(axis.)427
-4544 y(Because)g(the)f(amoun)m(t)f(of)h(shift)f(is)h(unsp)s(eci\014ed,)
-e(the)h(PIXEL)g(domain)g(is)h(distinct)g(from)427 4657
-y(the)g(GRID)h(domain.)42 b(The)30 b(relationship)h(b)s(et)m(w)m(een)h
-(them)f(con)m(tains)h(a)f(degree)g(of)h(uncer-)427 4770
-y(tain)m(t)m(y)-8 b(,)36 b(suc)m(h)c(as)g(t)m(ypically)i(arises)f(from)
-f(the)h(di\013eren)m(t)f(con)m(v)m(en)m(tions)j(used)c(b)m(y)i
-(di\013eren)m(t)427 4883 y(soft)m(w)m(are)j(systems.)51
-b(F)-8 b(or)35 b(instance,)h(in)e(some)g(soft)m(w)m(are)h(the)g
-(\014rst)e(pixel)h(is)g(regarded)g(as)427 4995 y(b)s(eing)21
-b(cen)m(tred)h(at)h(\(1,1\),)i(while)d(in)f(other)g(soft)m(w)m(are)i
-(it)f(is)g(at)g(\(0.5,0.5\).)41 b(In)21 b(addition,)j(some)427
-5108 y(soft)m(w)m(are)31 b(pac)m(k)-5 b(ages)31 b(implemen)m(t)f(a)f
-(\\pixel)h(origin")h(whic)m(h)d(allo)m(ws)j(pixel)f(co)s(ordinates)f
-(to)427 5221 y(start)i(at)g(an)g(arbitrary)f(v)-5 b(alue.)427
-5354 y(The)41 b(GRID)h(domain)g(\(whic)m(h)g(corresp)s(onds)e(with)h
-(the)h(pixel-n)m(um)m(b)s(ering)f(con)m(v)m(en)m(tion)427
-5467 y(used)20 b(b)m(y)h(FITS\))g(is)f(a)i(sp)s(ecial)f(case)h(of)f
-(the)g(PIXEL)f(domain)h(and)f(a)m(v)m(oids)j(this)d(uncertain)m(t)m(y)
--8 b(.)427 5580 y(In)35 b(general,)j(additional)f(information)f(is)g
-(required)e(in)i(order)f(to)h(con)m(v)m(ert)h(from)f(one)f(to)427
-5693 y(the)c(other.)p eop end
-%%Page: 78 88
-TeXDict begin 78 87 bop 0 52 a FF(78)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))227 351
-y FD(SKY)427 464 y FF(Iden)m(ti\014es)d(the)g(domain)f(whic)m(h)h(con)m
-(tains)h(all)f(equiv)-5 b(alen)m(t)27 b(celestial)h(co)s(ordinate)f
-(systems.)427 577 y(Because)33 b(these)e(are)g(represen)m(ted)g(in)g
-(AST)f(b)m(y)h(SkyF)-8 b(rames)31 b(\()p Fu(x)p FF(8\),)i(it)e(should)f
-(b)s(e)g(no)h(sur-)427 690 y(prise)d(that)g(the)g(default)g(Domain)g(v)
--5 b(alue)29 b(for)e(a)h(SkyF)-8 b(rame)28 b(is)g(SKY.)g(Since)f(there)
-h(is)g(only)427 803 y(one)j(sky)-8 b(,)31 b(y)m(ou)f(probably)g(w)m
-(on't)h(need)f(to)h(c)m(hange)h(this)e(v)m(ery)h(often.)227
-954 y FD(SPECTR)m(UM)427 1066 y FF(Iden)m(ti\014es)22
-b(the)g(domain)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f(an)g
-(electro-magnetic)k(sp)s(ec-)427 1179 y(trum.)52 b(The)34
-b(AST)g(Sp)s(ecF)-8 b(rame)35 b(\()p Fu(x)p FF(9\))h(class)f(describ)s
-(es)e(p)s(ositions)i(within)f(this)g(domain,)427 1292
-y(allo)m(wing)42 b(a)f(wide)f(range)h(of)f(di\013eren)m(t)h(co)s
-(ordinate)g(systems)f(to)h(b)s(e)f(used)g(\(frequency)-8
-b(,)427 1405 y(w)m(a)m(v)m(elength,)33 b Fx(etc)p FF(\).)41
-b(The)30 b(default)g(Domain)i(v)-5 b(alue)31 b(for)f(a)g(Sp)s(ecF)-8
-b(rame)31 b(is)f(SPECTR)m(UM.)227 1556 y FD(TIME)427
-1669 y FF(Iden)m(ti\014es)g(the)g(domain)f(used)g(to)h(describ)s(e)g
-(momen)m(ts)g(in)f(time.)41 b(The)29 b(AST)g(TimeF)-8
-b(rame)427 1782 y(class)32 b(describ)s(es)f(p)s(ositions)g(within)g
-(this)g(domain,)g(allo)m(wing)i(a)f(wide)f(range)g(of)h(di\013eren)m(t)
-427 1895 y(co)s(ordinate)g(systems)e(and)g(timescales)i(to)g(b)s(e)d
-(used.)41 b(The)30 b(default)g(Domain)i(v)-5 b(alue)31
-b(for)f(a)427 2008 y(TimeF)-8 b(rame)32 b(is)e(TIME.)0
-2283 y(Although)h(w)m(e)h(ha)m(v)m(e)h(dra)m(wn)d(a)i(necessary)g
-(distinction)g(here)f(b)s(et)m(w)m(een)h(the)f(GRID)h(and)f(PIXEL)f
-(domains,)0 2396 y(w)m(e)35 b(will)g(con)m(tin)m(ue)g(to)h(refer)e(in)g
-(general)h(terms)g(to)g(image)g(\\pixels")h(and)e(\\pixel)h(co)s
-(ordinates")h(whenev)m(er)0 2509 y(this)30 b(distinction)g(is)g(not)g
-(imp)s(ortan)m(t.)40 b(This)29 b(should)g(not)h(b)s(e)f(tak)m(en)i(to)f
-(imply)g(that)g(the)g(GRID)g(con)m(v)m(en)m(tion)0 2622
-y(for)42 b(n)m(um)m(b)s(ering)f(pixels)h(is)g(excluded|in)f(fact,)46
-b(it)d(is)f(usually)f(to)i(b)s(e)e(preferred)g(\(at)i(the)f(lev)m(el)i
-(of)e(data)0 2735 y(handling)30 b(b)s(eing)g(discussed)f(in)h(this)g
-(do)s(cumen)m(t\))h(and)f(w)m(e)h(recommend)f(it.)0 3044
-y Fw(7.14)112 b(The)38 b(Unit)g(A)m(ttribute)0 3272 y
-FF(Eac)m(h)44 b(axis)g(of)f(a)h(F)-8 b(rame)44 b(has)f(a)h(Unit)f
-(attribute)h(whic)m(h)g(holds)e(the)i(ph)m(ysical)g(units)e(used)h(to)h
-(describ)s(e)0 3385 y(p)s(ositions)36 b(on)f(the)h(axis.)57
-b(The)36 b(index)f(of)h(the)g(axis)g(to)g(whic)m(h)g(the)g(attribute)g
-(refers)f(should)g(normally)h(b)s(e)0 3498 y(placed)j(in)f(paren)m
-(theses)h(follo)m(wing)h(the)f(attribute)h(name)e(\(\\Unit\(2\)")k(for)
-c(instance\).)67 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(the)0
-3610 y(F)-8 b(rame)31 b(has)f(only)h(a)g(single)g(axis,)g(then)f(the)g
-(axis)h(index)f(can)h(b)s(e)f(omitted.)0 3778 y(In)f(v)m(ersions)h(of)g
-(AST)f(prior)g(to)i(v)m(ersion)f(2.0,)h(the)f(Unit)g(attribute)g(w)m
-(as)g(nothing)g(more)g(than)f(a)i(descriptiv)m(e)0 3891
-y(string)g(in)m(tended)g(purely)g(for)g(h)m(uman)g(readers|no)g(part)g
-(of)g(the)h(AST)e(system)i(used)e(the)i(Unit)f(string)h(for)0
-4004 y(an)m(y)h(purp)s(ose)e(\(other)i(than)g(inclusion)f(in)g(axis)i
-(lab)s(els)e(pro)s(duced)f(b)m(y)i(the)g(Plot)g(class\).)49
-b(In)32 b(particular,)i(no)0 4116 y(accoun)m(t)f(w)m(as)f(tak)m(en)g
-(of)g(the)f(Unit)h(attribute)g(when)e(\014nding)g(the)i(Mapping)f(b)s
-(et)m(w)m(een)h(t)m(w)m(o)h(F)-8 b(rames.)45 b(Th)m(us)0
-4229 y(if)28 b(the)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(a)g(pair)g
-(of)g(1-dimensional)g(F)-8 b(rames)29 b(represen)m(ting)f(v)m(elo)s
-(cit)m(y)i(w)m(as)e(found)f(\(using)0 4342 y(astCon)m(v)m(ert)33
-b(\))g(the)f(returned)f(Mapping)h(w)m(ould)f(alw)m(a)m(ys)j(b)s(e)d(a)i
-(UnitMap,)g(ev)m(en)f(if)g(the)h(Unit)f(attributes)g(of)0
-4455 y(the)e(t)m(w)m(o)h(F)-8 b(rames)31 b(w)m(ere)f(\\km/h")g(and)f
-(\\m/s".)42 b(This)29 b(b)s(eha)m(viour)g(is)h(referred)f(to)h(b)s(elo)
-m(w)g(as)g(a)h Fx(p)-5 b(assive)37 b FF(Unit)0 4568 y(attribute.)0
-4735 y(As)h(of)f(AST)g(v)m(ersion)h(2.0,)j(a)d(facilit)m(y)h(exists)g
-(whic)m(h)e(allo)m(ws)i(the)f(Unit)f(attribute)i(to)f(b)s(e)f
-Fx(active)7 b FF(;)41 b(that)d(is,)0 4848 y(di\013erences)30
-b(in)g(the)g(Unit)g(attribute)h(ma)m(y)f(b)s(e)f(tak)m(en)i(in)m(to)g
-(accoun)m(t)g(when)e(\014nding)g(the)h(Mapping)g(b)s(et)m(w)m(een)0
-4961 y(t)m(w)m(o)40 b(F)-8 b(rames.)68 b(In)39 b(order)f(to)i(minimise)
-f(the)g(risk)g(of)h(breaking)f(older)g(soft)m(w)m(are,)k(the)c
-Fx(default)49 b FF(b)s(eha)m(viour)0 5074 y(of)36 b(simple)g(F)-8
-b(rames)36 b(and)f(SkyF)-8 b(rames)36 b(is)g(unc)m(hanged)f(from)g
-(previous)h(v)m(ersions)g(\()p Fx(i.e.)56 b FF(they)36
-b(ha)m(v)m(e)h(passiv)m(e)0 5187 y(Unit)26 b(attributes\).)40
-b(Ho)m(w)m(ev)m(er,)29 b(the)d(new)f(functions)g(astSetActiv)m(eUnit)k
-(and)d(astGetActiv)m(eUnit)j(allo)m(w)f(this)0 5300 y(default)g(b)s
-(eha)m(viour)f(to)h(b)s(e)f(c)m(hanged.)40 b(The)27 b(Sp)s(ecF)-8
-b(rame)28 b(and)f(TimeF)-8 b(rame)28 b(classes)g Fx(always)37
-b FF(ha)m(v)m(e)29 b(an)e(activ)m(e)0 5413 y(Unit)k(attribute)g
-(\(attempts)g(to)g(c)m(hange)h(this)e(are)h(ignored\).)0
-5580 y(F)-8 b(or)24 b(instance,)h(consider)e(the)h(ab)s(o)m(v)m(e)g
-(example)g(of)f(t)m(w)m(o)i(1-dimensional)f(F)-8 b(rames)24
-b(describing)e(v)m(elo)s(cit)m(y)-8 b(.)42 b(These)0
-5693 y(F)-8 b(rames)31 b(can)g(b)s(e)f(created)h(as)g(follo)m(ws:)p
-eop end
-%%Page: 79 89
-TeXDict begin 79 88 bop 0 52 a Fy(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FF(79)227 351 y Ft(AstFrame)41 b(*frame1,)f(*frame2;)
-227 451 y(frame1)h(=)j(astFrame\()39 b(1,)k("Domain=VELOCITY,)o(Un)o
-(it)o(=km)o(/h)o(")38 b(\);)227 551 y(frame2)j(=)j(astFrame\()39
-b(1,)k("Domain=VELOCITY,)o(Un)o(it)o(=m/)o(s")37 b(\);)0
-760 y FF(By)g(default,)i(these)f(F)-8 b(rames)37 b(ha)m(v)m(e)i(passiv)
-m(e)e(Unit)g(attributes,)j(and)c(so)h(an)g(attempt)h(to)g(\014nd)d(a)j
-(Mapping)0 873 y(b)s(et)m(w)m(een)c(them)f(w)m(ould)h(ignore)g(the)f
-(di\013erence)h(in)f(their)h(Unit)f(attributes)h(and)f(return)f(a)i
-(unit)f(Mapping.)0 986 y(T)-8 b(o)29 b(a)m(v)m(oid)i(this,)e(w)m(e)h
-(indicate)g(that)f(w)m(e)g(w)m(an)m(t)h(these)g(F)-8
-b(rames)29 b(to)h(ha)m(v)m(e)g Fx(active)36 b FF(Unit)29
-b(attributes,)h(as)f(follo)m(ws:)227 1182 y Ft(astSetActiveUnit\()37
-b(frame1,)k(1)i(\);)227 1282 y(astSetActiveUnit\()37
-b(frame2,)k(1)i(\);)0 1491 y FF(If)30 b(w)m(e)h(then)f(\014nd)f(the)h
-(Mapping)h(b)s(et)m(w)m(een)g(them)f(as)g(follo)m(ws:)227
-1687 y Ft(AstFrameSet)39 b(*cvt;)227 1787 y(...)227 1886
-y(cvt)k(=)g(astConvert\()c(frame1,)i(frame2,)f("")j(\);)0
-2096 y FF(the)32 b(Mapping)g(con)m(tained)h(within)f(the)g(F)-8
-b(rameSet)33 b(returned)e(b)m(y)g(astCon)m(v)m(ert)j(will)e(b)s(e)f(a)i
-(one-dimensional)0 2209 y(Zo)s(omMap)g(whic)m(h)g(simply)f(scales)j
-(its)e(input)f(\(a)i(v)m(elo)s(cit)m(y)i(in)d Fo(k)s(m=h)p
-FF(\))h(b)m(y)f(a)g(factor)h(of)g(0.278)h(to)e(create)i(its)0
-2322 y(output)30 b(\(a)h(v)m(elo)s(cit)m(y)i(in)d Fo(m=s)p
-FF(\).)0 2471 y(In)45 b(fact)h(w)m(e)g(need)f(not)h(ha)m(v)m(e)h(set)f
-(the)g(Unit)g(attribute)g(activ)m(e)i(in)d(\\frame1")i(since)e(the)h(b)
-s(eha)m(viour)f(of)0 2584 y(astCon)m(v)m(ert)32 b(is)e(determined)g(b)m
-(y)h(its)f(\\to")i(F)-8 b(rame)32 b(\(the)f(second)f(F)-8
-b(rame)31 b(parameter\).)0 2854 y FD(7.14.1)106 b(The)34
-b(Syn)m(tax)h(for)g(Unit)g(Strings)0 3063 y FF(Con)m(v)m(ersion)28
-b(b)s(et)m(w)m(een)g(units)e(systems)h(relies)h(on)f(the)h(use)e(of)i
-(a)f(sp)s(eci\014c)g(syn)m(tax)h(for)f(the)g(Unit)h(attribute.)40
-b(If)0 3176 y(the)32 b(v)-5 b(alue)32 b(of)g(the)g(Unit)g(attribute)g
-(do)s(es)g(not)g(conform)g(to)g(this)g(syn)m(tax,)h(then)e(an)h(error)f
-(will)h(b)s(e)f(rep)s(orted)0 3288 y(if)k(an)g(attempt)h(is)f(made)g
-(to)g(use)g(it)h(to)f(determine)g(an)g(in)m(ter-unit)h(Mapping)e
-(\(this)i(will)f(nev)m(er)g(happ)s(en)e(if)0 3401 y(the)e(Unit)f
-(attribute)h(is)g Fx(p)-5 b(assive)7 b FF(\).)0 3551
-y(The)20 b(adopted)h(syn)m(tax)g(is)f(that)i(describ)s(ed)d(in)h
-(FITS-W)m(CS)g(pap)s(er)g(I)g("Represen)m(tation)i(of)f(W)-8
-b(orld)21 b(Co)s(ordinate)0 3664 y(in)35 b(FITS")g(b)m(y)g(Greisen)h(&)
-f(Calabretta.)57 b(W)-8 b(e)37 b(distinguish)d(here)h(b)s(et)m(w)m(een)
-h(\\basic")h(units)e(and)f(\\deriv)m(ed")0 3777 y(units:)43
-b(deriv)m(ed)32 b(units)f(are)h(de\014ned)f(in)h(terms)f(of)h(other)g
-(units)g(\(either)g(deriv)m(ed)g(or)g(basic\),)h(whereas)f(basic)0
-3890 y(units)40 b(ha)m(v)m(e)h(no)f(suc)m(h)g(de\014nitions.)69
-b(Deriv)m(ed)41 b(units)f(ma)m(y)h(b)s(e)e(represen)m(ted)h(b)m(y)g
-(their)h(o)m(wn)f Fx(symb)-5 b(ol)51 b FF(\()p Fx(e.g.)0
-4003 y FF(\\Jy"|the)23 b(Jansky\))g(or)f(b)m(y)h(a)f
-Fx(mathematic)-5 b(al)29 b(expr)-5 b(ession)31 b FF(whic)m(h)22
-b(com)m(bines)h(other)g(sym)m(b)s(ols)f(and)g(constan)m(ts)0
-4115 y(to)37 b(form)f(a)h(de\014nition)g(of)f(the)h(unit)f(\()p
-Fx(e.g.)59 b FF(\\km/s"|kilometres)39 b(p)s(er)c(second\).)60
-b(Unit)37 b(sym)m(b)s(ols)f(ma)m(y)h(b)s(e)0 4228 y(pre\014xed)29
-b(b)m(y)h(a)h(string)g(represen)m(ting)f(a)h(standard)f(m)m(ultiple)h
-(or)f(sub-m)m(ultiple.)0 4378 y(In)j(addition)h(to)h(the)f(unit)g(sym)m
-(b)s(ols)f(listed)i(in)f(FITS-W)m(CS)f(P)m(ap)s(er)h(I,)g(an)m(y)g
-(other)g(arbitrary)g(unit)g(sym)m(b)s(ol)0 4491 y(ma)m(y)41
-b(b)s(e)e(used,)j(with)d(the)i(pro)m(viso)f(that)h(it)f(will)g(not)h(b)
-s(e)e(p)s(ossible)g(to)i(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(F)-8
-b(rames)41 b(using)0 4604 y(suc)m(h)31 b(units.)41 b(The)31
-b(exception)h(to)g(this)f(is)g(if)g(b)s(oth)f(F)-8 b(rames)31
-b(refer)g(to)h(the)f(same)g(unkno)m(wn)f(unit)g(string.)43
-b(F)-8 b(or)0 4717 y(instance,)44 b(an)c(axis)h(with)f(unkno)m(wn)f
-(unit)h(sym)m(b)s(ol)h("\015op")f Fx(c)-5 b(ould)51 b
-FF(b)s(e)40 b(con)m(v)m(erted)i(to)f(an)g(axis)g(with)f(unit)0
-4829 y("M\015op")31 b(\(Mega-\015op\).)0 4979 y(Unit)37
-b(sym)m(b)s(ols)g(\(optionally)i(pre\014xed)d(with)g(a)i(m)m(ultiple)g
-(or)f(sub-m)m(ultiple\))g(can)g(b)s(e)g(com)m(bined)g(together)0
-5092 y(using)i(a)h(limited)h(range)f(of)g(mathematical)i(op)s(erators)e
-(and)f(functions,)j(to)e(pro)s(duce)f(new)g(units.)68
-b(Suc)m(h)0 5205 y(expressions)39 b(ma)m(y)i(also)f(con)m(tain)h(paren)
-m(theses)f(and)f(n)m(umerical)h(constan)m(ts)h(\(these)f(ma)m(y)h
-(optionally)g(use)0 5318 y(\\scien)m(ti\014c")33 b(notation)e
-(including)f(an)g(\\E")i(c)m(haracter)g(to)f(represen)m(t)f(the)h(p)s
-(o)m(w)m(er)f(of)h(10\).)0 5467 y(The)g(follo)m(wing)j(tables)e(list)h
-(the)f(sym)m(b)s(ols)f(for)h(the)g(basic)g(and)f(deriv)m(ed)h(units)f
-(whic)m(h)h(ma)m(y)g(b)s(e)g(included)f(in)0 5580 y(a)e(units)f
-(string,)i(the)f(standard)f(pre\014xes)g(for)g(m)m(ultiples)h(and)g
-(sub-m)m(ultiples,)g(and)f(the)h(strings)f(whic)m(h)h(ma)m(y)0
-5693 y(b)s(e)h(used)f(to)i(represen)m(t)g(mathematical)i(op)s(erators)d
-(and)g(functions.)p eop end
-%%Page: 80 90
-TeXDict begin 80 89 bop 0 52 a FF(80)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))p 977 263
-1827 4 v 975 376 4 113 v 1654 342 a FC(Basic)k(units)p
-2801 376 V 977 379 1827 4 v 975 492 4 113 v 1258 459
-a FF(Quan)m(tit)m(y)p 1894 492 V 1894 492 V 332 w(Sym)m(b)s(ol)p
-2289 492 V 99 w(F)-8 b(ull)31 b(Name)p 2801 492 V 977
-496 1827 4 v 975 609 4 113 v 1026 575 a(length)p 1894
-609 V 672 w(m)p 2289 609 V 319 w(metre)p 2801 609 V 975
-722 V 1026 688 a(mass)p 1894 722 V 726 w(g)p 2289 722
-V 350 w(gram)p 2801 722 V 975 834 V 1026 801 a(time)p
-1894 834 V 743 w(s)p 2289 834 V 359 w(second)p 2801 834
-V 975 947 V 1026 913 a(plane)g(angle)p 1894 947 V 470
-w(rad)p 2289 947 V 263 w(radian)p 2801 947 V 975 1060
-V 1026 1026 a(solid)g(angle)p 1894 1060 V 500 w(sr)p
-2289 1060 V 323 w(steradian)p 2801 1060 V 975 1173 V
-1026 1139 a(temp)s(erature)p 1894 1173 V 431 w(K)p 2289
-1173 V 324 w(Kelvin)p 2801 1173 V 975 1286 V 1026 1252
-a(electric)i(curren)m(t)p 1894 1286 V 319 w(A)p 2289
-1286 V 327 w(Amp)s(ere)p 2801 1286 V 975 1399 V 1026
-1365 a(amoun)m(t)e(of)g(substance)p 1894 1399 V 99 w(mol)p
-2289 1399 V 249 w(mole)p 2801 1399 V 975 1512 V 1026
-1478 a(luminous)f(in)m(tensit)m(y)p 1894 1512 V 189 w(cd)p
-2289 1512 V 304 w(candela)p 2801 1512 V 977 1515 1827
-4 v 0 1872 a FD(7.14.2)106 b(Side-e\013ects)35 b(of)g(Changing)g(the)f
-(Unit)h(attribute)0 2094 y FF(If)c(an)g(Axis)h(has)f(an)g(activ)m(e)j
-(Unit)e(attribute,)g(c)m(hanging)h(its)f(v)-5 b(alue)31
-b(\(either)i(b)m(y)e(setting)i(a)e(new)g(v)-5 b(alue)32
-b(or)g(b)m(y)0 2207 y(clearing)h(it)g(so)f(that)g(the)g(default)g(v)-5
-b(alue)33 b(is)e(re-instated\))j(ma)m(y)e(cause)h(the)f(Lab)s(el)f(and)
-h(Sym)m(b)s(ol)f(attributes)0 2319 y(to)45 b(b)s(e)f(c)m(hanged)h
-(accordingly)-8 b(.)84 b(F)-8 b(or)45 b(instance,)k(if)44
-b(an)h(Axis)f(has)g(Unit,)49 b(Lab)s(el)44 b(and)g(Sym)m(b)s(ol)f(of)i
-(\\Hz",)0 2432 y(\\F)-8 b(requency")31 b(and)d(\\n)m(u",)i(then)f(c)m
-(hanging)h(its)g(Unit)f(attribute)h(to)g(\\log\(Hz\)")j(will)c(cause)h
-(AST)e(to)i(c)m(hange)0 2545 y(its)i(Lab)s(el)g(and)f(Sym)m(b)s(ol)g
-(to)h(\\log\(F)-8 b(requency\)")35 b(and)c(\\Log\(n)m(u\)".)47
-b(These)31 b(c)m(hanges)i(are)f(only)g(made)g(if)f(the)0
-2658 y(Unit)h(attribute)h(is)g(activ)m(e,)i(and)c(a)i(Mapping)f(can)h
-(b)s(e)e(found)g(from)h(the)g(old)h(units)e(to)i(the)g(new)f(units.)45
-b(On)0 2771 y(the)39 b(other)g(hand,)h(c)m(hanging)g(the)f(Unit)g(from)
-f(\\Hz")i(to)g(\\MHz")h(w)m(ould)d(not)h(cause)h(an)m(y)f(c)m(hange)h
-(to)f(the)0 2884 y(Lab)s(el)30 b(or)h(Sym)m(b)s(ol)e(attributes.)p
-eop end
-%%Page: 81 91
-TeXDict begin 81 90 bop 0 52 a Fy(7.14)93 b(The)29 b(Unit)i(A)m
-(ttribute)2667 b FF(81)p 0 272 3999 4 v -2 384 4 113
-v 1712 351 a FC(Deriv)m(ed)34 b(units)p 3996 384 V 0
-388 3999 4 v -2 501 4 113 v 298 467 a FF(Quan)m(tit)m(y)p
-949 501 V 949 501 V 396 w(Sym)m(b)s(ol)p 1441 501 V 432
-w(F)-8 b(ull)31 b(Name)p 2522 501 V 875 w(De\014nition)p
-3996 501 V 0 504 3999 4 v -2 617 4 113 v 50 583 a(area)p
-949 617 V 785 w(barn)p 1441 617 V 309 w(barn)p 2522 617
-V 897 w(1.0E-28)i(m**2)p 3996 617 V -2 730 V 50 696 a(area)p
-949 730 V 785 w(pix)p 1441 730 V 368 w(pixel)p 2522 730
-V 3996 730 V -2 843 V 50 809 a(area)p 949 843 V 785 w(pixel)p
-1441 843 V 303 w(pixel)p 2522 843 V 3996 843 V -2 956
-V 50 922 a(electric)f(capacitance)p 949 956 V 181 w(F)p
-1441 956 V 433 w(F)-8 b(arad)p 2522 956 V 852 w(C/V)p
-3996 956 V -2 1069 V 50 1035 a(electric)32 b(c)m(harge)p
-949 1069 V 384 w(C)p 1441 1069 V 426 w(Coulom)m(b)p 2522
-1069 V 724 w(A)f(s)p 3996 1069 V -2 1181 V 50 1148 a(electric)h
-(conductance)p 949 1181 V 149 w(S)p 1441 1181 V 441 w(Siemens)p
-2522 1181 V 761 w(A/V)p 3996 1181 V -2 1294 V 50 1261
-a(electric)g(p)s(oten)m(tial)p 949 1294 V 286 w(V)p 1441
-1294 V 424 w(V)-8 b(olt)p 2522 1294 V 915 w(J/C)p 3996
-1294 V -2 1407 V 50 1373 a(electric)32 b(resistance)p
-949 1407 V 254 w(Ohm)p 1441 1407 V 294 w(Ohm)p 2522 1407
-V 882 w(V/A)p 3996 1407 V -2 1520 V 50 1486 a(energy)p
-949 1520 V 691 w(J)p 1441 1520 V 445 w(Joule)p 2522 1520
-V 872 w(N)f(m)p 3996 1520 V -2 1633 V 50 1599 a(energy)p
-949 1633 V 691 w(Ry)p 1441 1633 V 377 w(Rydb)s(erg)p
-2522 1633 V 739 w(13.605692)j(eV)p 3996 1633 V -2 1746
-V 50 1712 a(energy)p 949 1746 V 691 w(eV)p 1441 1746
-V 384 w(electron-V)-8 b(olt)p 2522 1746 V 573 w(1.60217733E-19)36
-b(J)p 3996 1746 V -2 1859 V 50 1825 a(energy)p 949 1859
-V 691 w(erg)p 1441 1859 V 371 w(erg)p 2522 1859 V 959
-w(1.0E-7)c(J)p 3996 1859 V -2 1972 V 50 1938 a(ev)m(en)m(ts)p
-949 1972 V 707 w(coun)m(t)p 1441 1972 V 273 w(coun)m(t)p
-2522 1972 V 3996 1972 V -2 2085 V 50 2051 a(ev)m(en)m(ts)p
-949 2085 V 707 w(ct)p 1441 2085 V 417 w(coun)m(t)p 2522
-2085 V 3996 2085 V -2 2198 V 50 2164 a(ev)m(en)m(ts)p
-949 2198 V 707 w(ph)p 1441 2198 V 390 w(photon)p 2522
-2198 V 3996 2198 V -2 2311 V 50 2277 a(ev)m(en)m(ts)p
-949 2311 V 707 w(photon)p 1441 2311 V 214 w(photon)p
-2522 2311 V 3996 2311 V -2 2423 V 50 2390 a(\015ux)d(densit)m(y)p
-949 2423 V 489 w(Jy)p 1441 2423 V 397 w(Jansky)p 2522
-2423 V 805 w(1.0E-26)k(W)d(/m**2)i(/Hz)p 3996 2423 V
--2 2536 V 50 2503 a(\015ux)d(densit)m(y)p 949 2536 V
-489 w(R)p 1441 2536 V 425 w(Ra)m(yleigh)p 2522 2536 V
-737 w(1.0E10/\(4*PI\))34 b(photon.m**-2)e(/s/sr)p 3996
-2536 V -2 2649 V 50 2615 a(\015ux)d(densit)m(y)p 949
-2649 V 489 w(mag)p 1441 2649 V 326 w(magnitude)p 2522
-2649 V 3996 2649 V -2 2762 V 50 2728 a(force)p 949 2762
-V 762 w(N)p 1441 2762 V 424 w(Newton)p 2522 2762 V 775
-w(kg)i(m/s**2)p 3996 2762 V -2 2875 V 50 2841 a(frequency)p
-949 2875 V 569 w(Hz)p 1441 2875 V 384 w(Hertz)p 2522
-2875 V 861 w(1/s)p 3996 2875 V -2 2988 V 50 2954 a(illuminance)p
-949 2988 V 497 w(lx)p 1441 2988 V 419 w(lux)p 2522 2988
-V 956 w(lm/m**2)p 3996 2988 V -2 3101 V 50 3067 a(inductance)p
-949 3101 V 522 w(H)p 1441 3101 V 424 w(Henry)p 2522 3101
-V 837 w(Wb/A)p 3996 3101 V -2 3214 V 50 3180 a(length)p
-949 3214 V 704 w(A)m(U)p 1441 3214 V 359 w(astronomical)h(unit)p
-2522 3214 V 382 w(1.49598E11)i(m)p 3996 3214 V -2 3327
-V 50 3293 a(length)p 949 3327 V 704 w(Angstrom)p 1441
-3327 V 100 w(Angstrom)p 2522 3327 V 688 w(1.0E-10)f(m)p
-3996 3327 V -2 3440 V 50 3406 a(length)p 949 3440 V 704
-w(lyr)p 1441 3440 V 383 w(ligh)m(t)e(y)m(ear)p 2522 3440
-V 705 w(9.460730E15)k(m)p 3996 3440 V -2 3553 V 50 3519
-a(length)p 949 3553 V 704 w(p)s(c)p 1441 3553 V 398 w(parsec)p
-2522 3553 V 832 w(3.0867E16)f(m)p 3996 3553 V -2 3665
-V 50 3632 a(length)p 949 3665 V 704 w(solRad)p 1441 3665
-V 223 w(solar)d(radius)p 2522 3665 V 618 w(6.9599E8)i(m)p
-3996 3665 V -2 3778 V 50 3745 a(luminosit)m(y)p 949 3778
-V 537 w(solLum)p 1441 3778 V 202 w(solar)e(luminosit)m(y)p
-2522 3778 V 448 w(3.8268E26)j(W)p 3996 3778 V -2 3891
-V 50 3857 a(luminous)29 b(\015ux)p 949 3891 V 412 w(lm)p
-1441 3891 V 391 w(lumen)p 2522 3891 V 837 w(cd)h(sr)p
-3996 3891 V -2 4004 V 50 3970 a(magnetic)i(\014eld)p
-949 4004 V 395 w(G)p 1441 4004 V 421 w(Gauss)p 2522 4004
-V 841 w(1.0E-4)g(T)p 3996 4004 V -2 4117 V 50 4083 a(magnetic)g(\015ux)
-p 949 4117 V 412 w(Wb)p 1441 4117 V 348 w(W)-8 b(eb)s(er)p
-2522 4117 V 825 w(V)31 b(s)p 3996 4117 V -2 4230 V 50
-4196 a(mass)p 949 4230 V 758 w(solMass)p 1441 4230 V
-186 w(solar)g(mass)p 2522 4230 V 669 w(1.9891E30)j(kg)p
-3996 4230 V -2 4343 V 50 4309 a(mass)p 949 4343 V 758
-w(u)p 1441 4343 V 441 w(uni\014ed)29 b(atomic)j(mass)e(unit)p
-2522 4343 V 99 w(1.6605387E-27)35 b(kg)p 3996 4343 V
--2 4456 V 50 4422 a(magnetic)d(\015ux)d(densit)m(y)p
-949 4456 V 100 w(T)p 1441 4456 V 426 w(T)-8 b(esla)p
-2522 4456 V 876 w(Wb/m**2)p 3996 4456 V -2 4569 V 50
-4535 a(plane)30 b(angle)p 949 4569 V 503 w(arcmin)p 1441
-4569 V 219 w(arc-min)m(ute)p 2522 4569 V 654 w(1/60)i(deg)p
-3996 4569 V -2 4682 V 50 4648 a(plane)e(angle)p 949 4682
-V 503 w(arcsec)p 1441 4682 V 255 w(arc-second)p 2522
-4682 V 666 w(1/3600)j(deg)p 3996 4682 V -2 4795 V 50
-4761 a(plane)d(angle)p 949 4795 V 503 w(mas)p 1441 4795
-V 335 w(milli-arcsecond)p 2522 4795 V 490 w(1/3600000)35
-b(deg)p 3996 4795 V -2 4908 V 50 4874 a(plane)30 b(angle)p
-949 4908 V 503 w(deg)p 1441 4908 V 356 w(degree)p 2522
-4908 V 828 w(pi/180)i(rad)p 3996 4908 V -2 5020 V 50
-4987 a(p)s(o)m(w)m(er)p 949 5020 V 716 w(W)p 1441 5020
-V 399 w(W)-8 b(att)p 2522 5020 V 880 w(J/s)p 3996 5020
-V -2 5133 V 50 5099 a(pressure,)29 b(stress)p 949 5133
-V 352 w(P)m(a)p 1441 5133 V 388 w(P)m(ascal)p 2522 5133
-V 830 w(N/m**2)p 3996 5133 V -2 5246 V 50 5212 a(time)p
-949 5246 V 775 w(a)p 1441 5246 V 447 w(y)m(ear)p 2522
-5246 V 914 w(31557600)34 b(s)p 3996 5246 V -2 5359 V
-50 5325 a(time)p 949 5359 V 775 w(d)p 1441 5359 V 441
-w(da)m(y)p 2522 5359 V 939 w(86400)f(s)p 3996 5359 V
--2 5472 V 50 5438 a(time)p 949 5472 V 775 w(h)p 1441
-5472 V 441 w(hour)p 2522 5472 V 897 w(3600)f(s)p 3996
-5472 V -2 5585 V 50 5551 a(time)p 949 5585 V 775 w(yr)p
-1441 5585 V 408 w(y)m(ear)p 2522 5585 V 914 w(31557600)i(s)p
-3996 5585 V -2 5698 V 50 5664 a(time)p 949 5698 V 775
-w(min)p 1441 5698 V 340 w(min)m(ute)p 2522 5698 V 805
-w(60)d(s)p 3996 5698 V -2 5811 V 949 5811 V 1001 5777
-a(D)p 1441 5811 V 423 w(Deb)m(y)m(e)p 2522 5811 V 838
-w(1.0E-29/3)j(C.m)p 3996 5811 V 0 5814 3999 4 v eop end
-%%Page: 82 92
-TeXDict begin 82 91 bop 0 52 a FF(82)1200 b Fy(7)92 b(REPRESENTING)29
-b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(FRAMES\))p 617 871
-2546 4 v 615 984 4 113 v 1083 950 a FC(Pre\014xes)35
-b(for)d(m)m(ultiples)i(&)f(sub-m)m(ultiples)p 3161 984
-V 617 987 2546 4 v 615 1100 4 113 v 667 1066 a FF(Sub-m)m(ultiple)99
-b(Name)i(Pre\014x)p 1888 1100 V 1888 1100 V 99 w(Sub-m)m(ultiple)e
-(Name)h(Pre\014x)p 3161 1100 V 617 1103 2546 4 v 615
-1216 4 113 v 667 1183 a(10)757 1150 y Fp(\000)p Fv(1)1274
-1183 y FF(deci)174 b(d)p 1888 1216 V 285 w(10)517 b(deca)153
-b(da)p 3161 1216 V 615 1329 V 667 1295 a(10)757 1262
-y Fp(\000)p Fv(2)1274 1295 y FF(cen)m(ti)142 b(c)p 1888
-1329 V 296 w(10)2030 1262 y Fv(2)2547 1295 y FF(hecto)118
-b(h)p 3161 1329 V 615 1442 V 667 1408 a(10)757 1375 y
-Fp(\000)p Fv(3)1274 1408 y FF(milli)154 b(m)p 1888 1442
-V 260 w(10)2030 1375 y Fv(3)2547 1408 y FF(kilo)186 b(k)p
-3161 1442 V 615 1555 V 667 1521 a(10)757 1488 y Fp(\000)p
-Fv(6)1274 1521 y FF(micro)108 b(u)p 1888 1555 V 285 w(10)2030
-1488 y Fv(6)2547 1521 y FF(mega)123 b(M)p 3161 1555 V
-615 1668 V 667 1634 a(10)757 1601 y Fp(\000)p Fv(9)1274
-1634 y FF(nano)138 b(n)p 1888 1668 V 285 w(10)2030 1601
-y Fv(9)2547 1634 y FF(giga)169 b(G)p 3161 1668 V 615
-1781 V 667 1747 a(10)757 1714 y Fp(\000)p Fv(12)1274
-1747 y FF(pico)g(p)p 1888 1781 V 285 w(10)2030 1714 y
-Fv(12)2547 1747 y FF(tera)k(T)p 3161 1781 V 615 1894
-V 667 1860 a(10)757 1827 y Fp(\000)p Fv(15)1274 1860
-y FF(fem)m(to)109 b(f)p 1888 1894 V 308 w(10)2030 1827
-y Fv(15)2547 1860 y FF(p)s(eta)155 b(P)p 3161 1894 V
-615 2007 V 667 1973 a(10)757 1940 y Fp(\000)p Fv(18)1274
-1973 y FF(atto)170 b(a)p 1888 2007 V 291 w(10)2030 1940
-y Fv(18)2547 1973 y FF(exa)196 b(E)p 3161 2007 V 615
-2120 V 667 2086 a(10)757 2053 y Fp(\000)p Fv(21)1274
-2086 y FF(zepto)119 b(z)p 1888 2120 V 296 w(10)2030 2053
-y Fv(21)2547 2086 y FF(zetta)134 b(Z)p 3161 2120 V 615
-2233 V 667 2199 a(10)757 2166 y Fp(\000)p Fv(24)1274
-2199 y FF(y)m(o)s(cto)117 b(y)p 1888 2233 V 288 w(10)2030
-2166 y Fv(24)2547 2199 y FF(y)m(otta)124 b(Y)p 3161 2233
-V 617 2236 2546 4 v 590 3621 2601 4 v 588 3734 4 113
-v 1116 3700 a FC(Mathematical)33 b(op)s(erators)f(&)h(functions)p
-3188 3734 V 590 3737 2601 4 v 588 3850 4 113 v 746 3816
-a FF(String)p 1143 3850 V 1143 3850 V 1008 w(Meaning)p
-3188 3850 V 590 3853 2601 4 v 588 3966 4 113 v 639 3932
-a(sym1)e(sym2)p 1143 3966 V 115 w(m)m(ultiplication)h(\(a)f(space\))p
-3188 3966 V 588 4079 V 639 4045 a(sym1*sym2)p 1143 4079
-V 101 w(m)m(ultiplication)h(\(an)f(asterisk\))p 3188
-4079 V 588 4192 V 639 4158 a(sym1.sym2)p 1143 4192 V
-121 w(m)m(ultiplication)h(\(a)f(dot\))p 3188 4192 V 588
-4305 V 639 4271 a(sym1/sym2)p 1143 4305 V 101 w(division)p
-3188 4305 V 588 4418 V 639 4384 a(sym1**y)p 1143 4418
-V 213 w(exp)s(onen)m(tiation)g(\()p Fo(y)j FF(m)m(ust)c(b)s(e)g(a)g(n)m
-(umerical)h(constan)m(t\))p 3188 4418 V 588 4531 V 639
-4497 a(sym1)p Fq(^)p FF(y)p 1143 4531 V 255 w(exp)s(onen)m(tiation)g
-(\()p Fo(y)j FF(m)m(ust)c(b)s(e)g(a)g(n)m(umerical)h(constan)m(t\))p
-3188 4531 V 588 4644 V 639 4610 a(log\(sym1\))p 1143
-4644 V 166 w(common)f(logarithm)p 3188 4644 V 588 4756
-V 639 4723 a(ln\(sym1\))p 1143 4756 V 205 w(natural)g(logarithm)p
-3188 4756 V 588 4869 V 639 4836 a(exp\(sym1\))p 1143
-4869 V 142 w(exp)s(onen)m(tial)p 3188 4869 V 588 4982
-V 639 4948 a(sqrt\(sym1\))p 1143 4982 V 126 w(square)g(ro)s(ot)p
-3188 4982 V 590 4986 2601 4 v eop end
-%%Page: 83 93
-TeXDict begin 83 92 bop 3689 52 a FF(83)0 351 y Fz(8)135
-b(Celestial)47 b(Co)t(ordinate)f(Systems)g(\(SkyF)-11
-b(rames\))0 593 y FF(A)45 b(F)-8 b(rame)47 b(whic)m(h)e(is)g(sp)s
-(ecialised)h(for)f(represen)m(ting)g(co)s(ordinate)h(systems)g(on)f
-(the)g(celestial)j(sphere)c(is)0 706 y(ob)m(viously)30
-b(of)g(great)g(imp)s(ortance)g(in)f(astronom)m(y)-8 b(.)42
-b(The)29 b(SkyF)-8 b(rame)30 b(is)f(suc)m(h)g(a)h(F)-8
-b(rame.)41 b(In)29 b(this)g(section)i(w)m(e)0 819 y(examine)e(the)f
-(additional)h(prop)s(erties)f(and)g(b)s(eha)m(viour)f(of)i(a)f(SkyF)-8
-b(rame)29 b(that)g(distinguish)e(it)i(from)e(a)i(basic)0
-932 y(F)-8 b(rame)31 b(\()p Fu(x)p FF(7\).)0 1209 y Fw(8.1)112
-b(The)38 b(SkyF)-9 b(rame)39 b(Mo)s(del)0 1420 y FF(A)28
-b(SkyF)-8 b(rame)27 b(is,)i(of)e(course,)i(a)f(F)-8 b(rame)28
-b(\()p Fu(x)p FF(7\))h(and)e(also)h(a)g(Mapping)f(\()p
-Fu(x)p FF(5\),)j(so)e(it)g(inherits)f(all)h(the)g(prop)s(erties)0
-1533 y(and)d(b)s(eha)m(viour)h(of)g(these)h(t)m(w)m(o)g(ancestral)g
-(classes.)41 b(When)25 b(used)h(as)g(a)g(Mapping,)h(a)g(SkyF)-8
-b(rame)26 b(implemen)m(ts)0 1646 y(a)41 b(unit)g(transformation,)j
-(exactly)f(lik)m(e)f(a)g(basic)f(F)-8 b(rame)42 b(\()p
-Fu(x)p FF(7.3\))h(or)e(a)h(UnitMap,)i(so)d(this)g(asp)s(ect)h(of)f(its)
-0 1758 y(b)s(eha)m(viour)30 b(is)g(not)h(of)g(great)g(imp)s(ortance.)0
-1910 y(When)k(used)g(as)h(a)g(F)-8 b(rame,)39 b(ho)m(w)m(ev)m(er,)f(a)f
-(SkyF)-8 b(rame)36 b(represen)m(ts)f(a)h(2-dimensional)h
-Fx(spheric)-5 b(al)38 b FF(co)s(ordinate)0 2023 y(system,)31
-b(in)g(whic)m(h)f(the)h(shortest)g(distance)g(b)s(et)m(w)m(een)h(t)m(w)
-m(o)g(p)s(oin)m(ts)e(is)h(a)g(great)h(circle.)43 b(A)31
-b(SkyF)-8 b(rame)31 b(there-)0 2136 y(fore)41 b(alw)m(a)m(ys)h(has)e
-(exactly)i(t)m(w)m(o)g(axes)g(whic)m(h)e(represen)m(t)g(the)h
-(longitude)g(and)f(latitude)i(of)f(a)g(co)s(ordinate)0
-2249 y(system)31 b(residing)f(on)g(the)h(celestial)i(sphere.)41
-b(Man)m(y)31 b(suc)m(h)f(co)s(ordinate)i(systems)e(can)h(b)s(e)f
-(represen)m(ted)h(b)m(y)f(a)0 2362 y(SkyF)-8 b(rame,)31
-b(as)g(w)m(e)f(will)h(see)g(shortly)-8 b(.)0 2514 y(A)32
-b(SkyF)-8 b(rame)32 b(can)f(represen)m(t)h(an)m(y)g(of)g(the)f
-(commonly)i(used)d(celestial)k(co)s(ordinate)f(systems.)44
-b(Optionally)-8 b(,)0 2627 y(the)29 b(origin)g(of)g(the)g
-(longitude/latitude)i(system)e(can)g(b)s(e)f(mo)m(v)m(ed)i(to)g(an)m(y)
-f(sp)s(eci\014ed)f(p)s(oin)m(t)h(in)f(the)h(standard)0
-2740 y(celestial)k(system,)e(allo)m(wing)h(a)f(SkyF)-8
-b(rame)30 b(to)h(represen)m(t)g(o\013sets)g(from)f(a)h(sp)s(eci\014ed)e
-(sky)i(p)s(osition.)0 2891 y(When)c(it)g(is)h(\014rst)e(created,)j(a)e
-(SkyF)-8 b(rame's)28 b(axes)g(are)f(alw)m(a)m(ys)i(in)e(the)g(order)f
-(\(longitude,)j(latitude\))f(but)f(this)0 3004 y(can)d(b)s(e)g(c)m
-(hanged,)i(if)e(required,)h(b)m(y)f(using)g(the)g(astP)m(ermAxes)h
-(function)f(\()p Fu(x)p FF(7.9\).)41 b(The)23 b(order)h(of)g(the)g
-(axes)h(can)0 3117 y(b)s(e)h(determined)h(at)g(an)m(y)g(time)h(using)e
-(the)h(LatAxis)h(and)e(LonAxis)h(attributes.)40 b(A)27
-b(SkyF)-8 b(rame's)28 b(co)s(ordinate)0 3230 y(v)-5 b(alues)31
-b(are)g(alw)m(a)m(ys)h(stored)f(as)g(angles)h(in)e(\(double)h
-(precision\))g(radians,)g(regardless)g(of)g(the)g(setting)g(of)g(the)0
-3343 y(Unit)g(attribute.)0 3620 y Fw(8.2)112 b(Creating)38
-b(a)g(SkyF)-9 b(rame)0 3831 y FF(The)20 b(SkyF)-8 b(rame)21
-b(constructor)g(function)f(is)h(particularly)g(simple)f(and)g(a)h(SkyF)
--8 b(rame)21 b(with)f(default)h(attributes)0 3944 y(is)30
-b(created)i(as)e(follo)m(ws:)227 4149 y Ft(#include)41
-b("ast.h")227 4249 y(AstSkyFrame)e(*skyframe;)227 4448
-y(...)227 4648 y(skyframe)i(=)i(astSkyFrame\()38 b("")43
-b(\);)0 4866 y FF(Suc)m(h)33 b(a)h(SkyF)-8 b(rame)35
-b(w)m(ould)e(represen)m(t)h(the)g(default)g(celestial)j(co)s(ordinate)d
-(system)g(whic)m(h,)h(at)f(presen)m(t,)h(is)0 4979 y(the)c(ICRS)e
-(system)h(\(the)h(default)g(w)m(as)g("FK5\(J2000\)")i(in)e(v)m(ersions)
-f(of)h(AST)e(prior)h(to)h(3.0\).)0 5257 y Fw(8.3)112
-b(Sp)s(ecifying)39 b(a)f(P)m(articular)f(Celestial)i(Co)s(ordinate)f
-(System)0 5467 y FF(F)-8 b(or)41 b(man)m(y)g(purp)s(oses,)h(the)e(ICRS)
-g(co)s(ordinate)h(system)g(is)g(p)s(erfectly)f(adequate.)73
-b(In)40 b(order)g(to)h(supp)s(ort)0 5580 y(con)m(v)m(ersion)27
-b(b)s(et)m(w)m(een)e(a)h(v)-5 b(ariet)m(y)27 b(of)e(celestial)j(co)s
-(ordinate)e(systems,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)e(can)f(create)i
-(SkyF)-8 b(rames)0 5693 y(that)31 b(represen)m(t)f(an)m(y)h(of)g
-(these.)p eop end
-%%Page: 84 94
-TeXDict begin 84 93 bop 0 52 a FF(84)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FF(Selection)48 b(of)f(a)g(particular)h(co)s(ordinate)f(system)g(is)g
-(p)s(erformed)e(simply)i(b)m(y)f(setting)i(a)f(v)-5 b(alue)48
-b(for)e(the)0 464 y(SkyF)-8 b(rame's)23 b(\(c)m(haracter)h(string\))e
-(System)g(attribute.)39 b(This)21 b(setting)j(is)e(most)h(con)m(v)m
-(enien)m(tly)h(done)e(when)f(the)0 577 y(SkyF)-8 b(rame)31
-b(is)f(created.)42 b(F)-8 b(or)31 b(example,)h(a)e(SkyF)-8
-b(rame)31 b(represen)m(ting)g(the)f(old)h(FK4)g(\(B1950.0\))j(co)s
-(ordinate)0 690 y(system)d(w)m(ould)f(b)s(e)f(created)j(b)m(y:)227
-935 y Ft(skyframe)41 b(=)i(astSkyFrame\()38 b("System=FK4")h(\);)0
-1194 y FF(Note)48 b(that)g(sp)s(ecifying)f(\\System=FK4")h(also)g(c)m
-(hanges)g(the)f(asso)s(ciated)h(equino)m(x)g(\(from)f(J2000.0)i(to)0
-1307 y(B1950.0\).)76 b(This)41 b(is)g(b)s(ecause)g(the)g(default)h(v)-5
-b(alue)42 b(of)f(the)g(SkyF)-8 b(rame's)42 b(Equino)m(x)f(attribute)h
-(\()p Fu(x)p FF(8.4\))h(de-)0 1420 y(p)s(ends)29 b(on)h(the)g(System)h
-(attribute)g(setting.)0 1582 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)
-e(System)h(v)-5 b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)
-f(not)h(usually)f(needed.)40 b(The)29 b(v)-5 b(alues)0
-1694 y(supp)s(orted)40 b(are)h(set)h(out)g(in)f(the)h(attribute's)g
-(description)f(in)g(App)s(endix)f(C)h(and)g(include)g(a)h(v)-5
-b(ariet)m(y)42 b(of)0 1807 y(equatorial)32 b(co)s(ordinate)f(systems,)g
-(together)h(with)e(ecliptic)i(and)e(galactic)j(co)s(ordinates.)0
-1969 y(General)43 b(spherical)g(co)s(ordinates)g(are)g(supp)s(orted)e
-(b)m(y)h(sp)s(ecifying)g(\\System=unkno)m(wn".)76 b(Y)-8
-b(ou)43 b(should)0 2082 y(note,)32 b(though,)g(that)g(no)f(Mapping)g
-(can)h(b)s(e)f(created)h(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f
-(\\unkno)m(wn")f(co)s(ordinates)h(and)0 2195 y(an)m(y)f(of)f(the)h
-(other)f(celestial)j(co)s(ordinate)f(systems)e(\(see)h
-Fu(x)p FF(12)h(\).)0 2487 y Fw(8.4)112 b(A)m(ttributes)37
-b(whic)m(h)g(Qualify)i(Celestial)g(Co)s(ordinate)f(Systems)0
-2707 y FF(Man)m(y)30 b(celestial)h(co)s(ordinate)f(systems)f(ha)m(v)m
-(e)i(some)e(additional)h(free)f(parameters)h(whic)m(h)e(serv)m(e)i(to)g
-(iden)m(tify)0 2820 y(a)f(particular)f(co)s(ordinate)h(system)g(from)f
-(amongst)h(a)f(broader)g(class)h(of)f(related)i(co)s(ordinate)f
-(systems.)40 b(F)-8 b(or)0 2933 y(example,)24 b(the)e(FK5)h
-(\(J2010.0\))h(system)e(is)g(distinguished)f(from)g(the)h(FK5)h
-(\(J2000.0\))h(system)e(b)m(y)g(a)g(di\013eren)m(t)0
-3046 y(equino)m(x|and)34 b(the)g(co)s(ordinates)g(of)g(a)h(\014xed)e
-(astronomical)i(source)f(w)m(ould)g(ha)m(v)m(e)h(di\013eren)m(t)f(v)-5
-b(alues)34 b(when)0 3159 y(expressed)c(in)g(these)h(t)m(w)m(o)g
-(systems.)0 3321 y(In)26 b(AST,)f(these)i(free)g(parameters)f(are)h
-(represen)m(ted)f(b)m(y)h(additional)g(SkyF)-8 b(rame)27
-b(attributes,)h(eac)m(h)f(of)g(whic)m(h)0 3434 y(has)j(a)g(default)g
-(appropriate)g(to)g(\()p Fx(i.e.)g FF(de\014ned)e(b)m(y\))i(the)g
-(setting)h(of)f(the)g(main)g(System)g(attribute.)41 b(Eac)m(h)30
-b(of)0 3547 y(these)c Fx(qualifying)i(attributes)e FF(ma)m(y)-8
-b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d(assigned)h(an)f(explicit)i(v)-5
-b(alue)26 b(so)f(as)h(to)g(select)h(a)f(particular)0
-3660 y(co)s(ordinate)38 b(system.)62 b(Note,)41 b(it)d(is)f(usually)g
-(b)s(est)g(to)h(assign)g(explicit)h(v)-5 b(alues)37 b(whenev)m(er)h(p)s
-(ossible)f(rather)0 3772 y(than)28 b(relying)i(on)e(defaults.)40
-b(A)m(ttribute)30 b(should)e(only)h(b)s(e)f(left)h(at)g(their)g
-(default)g(v)-5 b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0
-3885 y(what)e(v)-5 b(alue)27 b(is)g(used.)39 b(In)26
-b(certain)i(circumstances)g(\(particularly)-8 b(,)29
-b(when)d(aligning)i(t)m(w)m(o)g(F)-8 b(rames\),)29 b(a)e(default)0
-3998 y(v)-5 b(alue)37 b(for)g(an)g(attribute)h(ma)m(y)f(b)s(e)g
-(replaced)g(b)m(y)g(the)g(v)-5 b(alue)37 b(from)g(another)g(similar)g
-(F)-8 b(rame.)62 b(Suc)m(h)36 b(v)-5 b(alue)0 4111 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-4224 y(relying)31 b(on)f(the)h(default.)0 4386 y(The)f(main)g(SkyF)-8
-b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f(attribute)
-h(are:)227 4645 y FD(Ep)s(o)s(c)m(h)427 4757 y FF(This)i(attribute)h
-(is)g(inherited)f(from)g(the)h(F)-8 b(rame)34 b(class.)51
-b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)427
-4870 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 4983
-y(ally)32 b(the)e(date)h(of)g(observ)-5 b(ation\).)227
-5128 y FD(Equino)m(x)427 5241 y FF(This)39 b(v)-5 b(alue)40
-b(is)f(used)f(to)i(qualify)g(celestial)i(co)s(ordinate)e(systems)f
-(that)h(are)g(notionally)427 5354 y(based)27 b(on)g(the)g(Earth's)g
-(equator)h(and/or)f(the)h(ecliptic)h(\(the)e(plane)g(of)h(the)f
-(Earth's)g(orbit)427 5467 y(around)36 b(the)g(Sun\).)58
-b(The)36 b(p)s(osition)h(of)f(either)h(of)g(these)g(planes)f(is)h
-(di\016cult)f(to)i(sp)s(ecify)427 5580 y(precisely)-8
-b(,)30 b(so)e(in)g(practice)i(a)e(mo)s(del)g Fx(me)-5
-b(an)29 b FF(equator)g(and/or)f(ecliptic)i(are)e(used)g(instead.)427
-5693 y(These,)41 b(together)g(with)d(the)i(p)s(oin)m(t)f(on)f(the)h
-(sky)g(that)h(de\014nes)e(the)h(co)s(ordinate)h(origin)p
-eop end
-%%Page: 85 95
-TeXDict begin 85 94 bop 0 52 a Fy(8.5)92 b(Using)31 b(Default)g(SkyF)-8
-b(rame)31 b(A)m(ttributes)2067 b FF(85)427 351 y(\(termed)42
-b(the)g Fx(me)-5 b(an)45 b(e)-5 b(quinox)p FF(\))42 b(mo)m(v)m(e)h
-(with)f(time)g(according)h(to)g(some)f(mo)s(del)f(whic)m(h)427
-464 y(smo)s(othes)33 b(out)g(the)h(more)f(rapid)f(\015uctuations.)48
-b(The)33 b(SkyF)-8 b(rame)33 b(class)h(supp)s(orts)d(b)s(oth)427
-577 y(the)g(old)f(FK4)h(mo)s(del)f(and)g(the)h(new)m(er)f(FK5)h(one.)
-427 706 y(Co)s(ordinates)c(expressed)f(in)g(an)m(y)h(of)g(these)g
-(systems)f(v)-5 b(ary)27 b(with)f(time)h(due)f(to)h(mo)m(v)m(emen)m(t)
-427 819 y(\(b)m(y)33 b(de\014nition\))g(of)g(the)g(co)s(ordinate)g
-(system)g(itself,)h(and)f(m)m(ust)f(therefore)h(b)s(e)f(quali\014ed)427
-932 y(b)m(y)i(a)h(momen)m(t)g(in)e(time)i(\(the)g Fx(ep)-5
-b(o)g(ch)38 b(of)e(the)g(me)-5 b(an)37 b(e)-5 b(quinox,)36
-b FF(or)e(\\equino)m(x")h(for)f(short\))427 1045 y(whic)m(h)c(sp)s
-(eci\014es)f(the)g(p)s(osition)h(of)g(the)f(mo)s(del)h(co)s(ordinate)g
-(system)g(on)f(the)h(sky)-8 b(.)40 b(This)29 b(is)427
-1158 y(the)i(role)g(of)f(the)h(Equino)m(x)f(attribute.)427
-1287 y(Note)i(that)f(it)h(is)e(quite)h(v)-5 b(alid)31
-b(and)f(common)h(to)h(relate)g(the)f(p)s(osition)f(of)h(a)g(source)g
-(to)g(an)427 1400 y(equino)m(x)36 b(other)g(than)f(the)g(date)h(of)g
-(observ)-5 b(ation.)56 b(Usually)36 b(a)f(standard)g(equino)m(x)h(suc)m
-(h)427 1513 y(as)27 b(J2000.0)i(is)d(used,)h(meaning)g(that)g(the)g(co)
-s(ordinates)g(are)g(referred)f(to)h(axes)g(de\014ned)e(b)m(y)427
-1626 y(where)32 b(the)h(mo)s(del)f(mean)h(equator)g(and)f(ecliptic)i(w)
-m(ould)e(lie)h(on)g(the)f(sky)h(at)g(the)g(Julian)427
-1739 y(ep)s(o)s(c)m(h)d(J2000.0.)0 1999 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-2112 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 2225 y(attribute)41 b(\(also)h(in)f(App)s(endix)e(C\).)
-71 b(F)-8 b(or)41 b(the)g(in)m(terested)h(reader,)h(an)e(excellen)m(t)i
-(o)m(v)m(erview)f(of)f(celestial)0 2338 y(co)s(ordinate)31
-b(systems)g(can)f(also)i(b)s(e)d(found)g(in)h(the)h(do)s(cumen)m
-(tation)g(for)f(the)h(SLALIB)f(library)g(\(SUN/67\).)0
-2500 y(The)c(v)-5 b(alue)28 b(of)f(these)g(qualifying)g(attributes)h
-(is)f(most)g(con)m(v)m(enien)m(tly)i(set)f(at)f(the)h(same)f(time)g(as)
-h(the)f(System)0 2613 y(v)-5 b(alue,)31 b Fx(e.g.)f FF(when)f(a)i(SkyF)
--8 b(rame)31 b(is)f(created.)42 b(F)-8 b(or)31 b(instance:)227
-2860 y Ft(skyframe)41 b(=)i(astSkyFrame\()38 b("System=Ecliptic,)f
-(Equinox=J2005.5")g(\);)0 3120 y FF(w)m(ould)22 b(create)h(a)g(SkyF)-8
-b(rame)22 b(represen)m(ting)g(an)g(ecliptic)i(co)s(ordinate)f(system)f
-(referred)f(to)i(the)f(mean)g(equino)m(x)0 3233 y(and)30
-b(ecliptic)i(of)e(Julian)g(ep)s(o)s(c)m(h)h(J2005.5.)0
-3396 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 3509 y(the)28 b(main)g(System)g(v)-5
-b(alue.)41 b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g
-(but)e(are)h(not)h(used)e(unless)h(the)g(System)g(v)-5
-b(alue)28 b(is)0 3621 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h
-(relev)-5 b(an)m(t.)0 3914 y Fw(8.5)112 b(Using)38 b(Default)h(SkyF)-9
-b(rame)38 b(A)m(ttributes)0 4135 y FF(The)43 b(default)i(v)-5
-b(alues)44 b(supplied)f(for)g(man)m(y)h(SkyF)-8 b(rame)45
-b(attributes)f(will)g(dep)s(end)f(on)h(the)g(v)-5 b(alue)44
-b(of)g(the)0 4248 y(SkyF)-8 b(rame's)29 b(System)f(attribute.)41
-b(In)28 b(practice,)i(this)f(means)f(that)h(there)g(is)g(usually)f
-(little)i(need)f(to)g(sp)s(ecify)0 4361 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-4474 y(illustrated)31 b(b)m(y)f(using)g(astSho)m(w)h(to)g(examine)g(a)g
-(SkyF)-8 b(rame,)31 b(as)f(follo)m(ws:)227 4721 y Ft(astShow\()41
-b(astSkyFrame\()d("System=FK4-NO-E,)f(Epoch=1958")i(\))k(\);)0
-4981 y FF(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g(lik)m(e)
-h(the)e(follo)m(wing:)275 5241 y Fq(Begin)46 b(SkyFrame)428
-b(#)47 b(Description)e(of)i(celestial)e(coordinate)g(system)227
-5354 y(#)143 b(Title)47 b(=)g("FK4)g(equatorial)e(coordinates;)f(no)j
-(E-terms;)f(mean)g(equinox)g(B1950.0;)227 5467 y(epoch)h(B1958.0")141
-b(#)47 b(Title)f(of)i(coordinate)d(system)418 5580 y(Naxes)i(=)g(2)143
-b(#)47 b(Number)f(of)i(coordinate)d(axes)227 5693 y(#)143
-b(Domain)46 b(=)i("SKY")285 b(#)47 b(Coordinate)e(system)h(domain)p
-eop end
-%%Page: 86 96
-TeXDict begin 86 95 bop 0 52 a FF(86)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))418 351
-y Fq(Epoch)47 b(=)g(1958)381 b(#)47 b(Besselian)e(epoch)i(of)g
-(observation)227 464 y(#)143 b(Lbl1)47 b(=)g("Right)f(ascension")189
-b(#)47 b(Label)f(for)h(axis)g(1)227 577 y(#)143 b(Lbl2)47
-b(=)g("Declination")379 b(#)47 b(Label)f(for)h(axis)g(2)418
-690 y(System)f(=)i("FK4-NO-E")427 b(#)47 b(Coordinate)e(system)h(type)
-227 803 y(#)143 b(Uni1)47 b(=)g("hh:mm:ss.s")427 b(#)47
-b(Units)f(for)h(axis)g(1)227 916 y(#)143 b(Uni2)47 b(=)g("ddd:mm:ss")93
-b(#)47 b(Units)g(for)f(axis)h(2)227 1029 y(#)143 b(Dir1)47
-b(=)g(0)191 b(#)47 b(Plot)g(axis)g(1)g(in)g(reverse)f(direction)227
-1142 y(#)143 b(Bot2)47 b(=)g(-1.5707963267949)235 b(#)47
-b(Lowest)f(legal)g(axis)h(value)227 1255 y(#)143 b(Top2)47
-b(=)g(1.5707963267949)283 b(#)47 b(Highest)f(legal)g(axis)h(value)418
-1367 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561 1480
-y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)561
-1593 y(End)i(SkyAxis)418 1706 y(Ax2)g(=)334 b(#)47 b(Axis)g(number)f(2)
-561 1819 y(Begin)h(SkyAxis)189 b(#)47 b(Celestial)e(coordinate)g(axis)
-561 1932 y(End)i(SkyAxis)275 2045 y(IsA)g(Frame)285 b(#)47
-b(Coordinate)e(system)h(description)227 2158 y(#)143
-b(Eqnox)47 b(=)g(1950)381 b(#)47 b(Besselian)e(epoch)i(of)g(mean)g
-(equinox)275 2271 y(End)g(SkyFrame)0 2502 y FF(Note)40
-b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h(\\)p
-Fq(#)p FF(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g(the)g
-(line\))h(for)0 2615 y(attributes)32 b(suc)m(h)g(as)g(the)g(Title,)h
-(axis)f(Lab)s(els)g(and)f(F)-8 b(ormat)33 b(sp)s(eci\014ers)e(are)h
-(all)h(set)f(to)g(v)-5 b(alues)32 b(appropriate)0 2728
-y(for)e(the)h(particular)f(equatorial)i(co)s(ordinate)g(system)e(that)h
-(the)g(SkyF)-8 b(rame)30 b(represen)m(ts.)0 2883 y(This)c(means,)i(for)
-f(example,)i(that)e(if)h(w)m(e)f(w)m(ere)h(to)g(use)e(this)h(SkyF)-8
-b(rame)28 b(to)g(format)f(a)h(righ)m(t)f(ascension)h(v)-5
-b(alue)0 2996 y(stored)26 b(in)f(radians)g(using)g(astF)-8
-b(ormat)27 b(\()p Fu(x)p FF(7.6\),)i(it)d(w)m(ould)f(automatically)k
-(result)c(in)g(a)h(string)f(in)g(sexagesimal)0 3109 y(notation)33
-b(\(suc)m(h)e(as)g(\\12:14:35.7"\))37 b(suitable)32 b(for)f(displa)m(y)
--8 b(.)44 b(If)31 b(w)m(e)h(c)m(hanged)g(the)f(v)-5 b(alue)32
-b(of)f(the)h(SkyF)-8 b(rame's)0 3222 y(Digits)27 b(attribute)g(\(whic)m
-(h)f(is)g(inherited)f(from)h(the)g(F)-8 b(rame)26 b(class\),)i(the)e(n)
-m(um)m(b)s(er)f(of)h(digits)g(app)s(earing)g(w)m(ould)0
-3335 y(also)31 b(c)m(hange)h(accordingly)-8 b(.)0 3490
-y(These)24 b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i(for)f(a)g
-(System)g(v)-5 b(alue)25 b(of)f(\\FK4-NO-E",)j(but)c(if)h(a)h
-(di\013eren)m(t)g(System)0 3603 y(v)-5 b(alue)31 b(w)m(ere)g(set,)g
-(the)g(defaults)g(w)m(ould)f(b)s(e)g(corresp)s(ondingly)g(di\013eren)m
-(t.)42 b(F)-8 b(or)31 b(example,)h(ecliptic)g(longitude)0
-3716 y(is)39 b(traditionally)h(expressed)f(in)f(degrees,)k(so)d
-(setting)h(\\System=ecliptic")h(w)m(ould)d(result)h(in)g(co)s(ordinate)
-0 3829 y(v)-5 b(alues)31 b(b)s(eing)f(formatted)h(as)f(degrees)h(b)m(y)
-f(default.)0 3984 y(Of)35 b(course,)j(if)e(y)m(ou)h(do)f(not)g(lik)m(e)
-h(an)m(y)g(of)f(these)h(defaults,)g(y)m(ou)g(ma)m(y)f(alw)m(a)m(ys)i(o)
-m(v)m(er-ride)f(them)f(b)m(y)g(setting)0 4097 y(explicit)c(attribute)f
-(v)-5 b(alues)31 b(y)m(ourself.)0 4379 y Fw(8.6)112 b(F)-9
-b(ormatting)38 b(Celestial)g(Co)s(ordinates)0 4593 y
-FF(SkyF)-8 b(rames)39 b(use)f(astF)-8 b(ormat)41 b(for)d(formatting)h
-(co)s(ordinate)h(v)-5 b(alues)39 b(in)f(the)h(same)g(w)m(a)m(y)g(as)g
-(other)g(F)-8 b(rames)0 4705 y(\()p Fu(x)p FF(7.6\).)61
-b(Ho)m(w)m(ev)m(er,)40 b(they)d(o\013er)g(a)f(di\013eren)m(t)h(set)g
-(of)g(formatting)g(options)g(more)f(appropriate)h(to)g(celestial)0
-4818 y(co)s(ordinates.)0 4973 y(The)e(Digits)i(attribute)g(of)e(a)i
-(SkyF)-8 b(rame)36 b(b)s(eha)m(v)m(es)g(in)f(essen)m(tially)j(the)e
-(same)g(w)m(a)m(y)g(as)g(for)f(a)h(basic)h(F)-8 b(rame)0
-5086 y(\()p Fu(x)p FF(7.6\),)28 b(so)d(the)g(precision)f(with)h(whic)m
-(h)f(celestial)j(co)s(ordinates)e(are)g(displa)m(y)m(ed)g(can)g(also)h
-(b)s(e)e(adjusted)f(in)i(this)0 5199 y(w)m(a)m(y)-8 b(.)50
-b(Ho)m(w)m(ev)m(er,)35 b(the)e(range)h(of)f(format)g(sp)s(eci\014ers)f
-(that)h(can)g(b)s(e)g(giv)m(en)g(for)g(the)g(F)-8 b(ormat\(axis\))35
-b(attribute,)0 5312 y(and)30 b(the)g(default)h(format)g(resulting)f
-(from)g(an)m(y)h(particular)f(Digits)i(v)-5 b(alue,)31
-b(is)g(di\013eren)m(t.)0 5467 y(The)f(syn)m(tax)h(of)f(SkyF)-8
-b(rame)31 b(format)g(sp)s(eci\014ers)e(is)i(detailed)g(under)e(the)h
-(description)h(of)f(the)h(F)-8 b(ormat\(axis\))0 5580
-y(attribute)31 b(in)f(App)s(endix)e(C.)40 b(Brie\015y)-8
-b(,)31 b(ho)m(w)m(ev)m(er,)h(it)e(allo)m(ws)i(celestial)g(co)s
-(ordinates)f(to)g(b)s(e)e(expressed)h(either)0 5693 y(as)h(angles)g(or)
-f(times)h(and)f(to)h(include)f(one)h(or)f(more)h(of)f(the)h(\014elds:)p
-eop end
-%%Page: 87 97
-TeXDict begin 87 96 bop 0 52 a Fy(8.6)92 b(F)-8 b(ormatting)32
-b(Celestial)h(Co)s(ordinates)2158 b FF(87)336 351 y Fu(\017)46
-b FF(degrees)31 b(or)g(hours)336 500 y Fu(\017)46 b FF(arc-min)m(utes)
-31 b(or)g(min)m(utes)336 649 y Fu(\017)46 b FF(arc-seconds)31
-b(or)g(seconds)0 920 y(with)h(a)h(sp)s(eci\014ed)e(n)m(um)m(b)s(er)h
-(of)g(decimal)h(places)h(for)e(the)g(\014nal)g(\014eld.)47
-b(A)32 b(range)h(of)f(\014eld)g(separators)h(is)g(also)0
-1033 y(a)m(v)-5 b(ailable,)33 b(as)e(the)f(follo)m(wing)i(examples)f
-(sho)m(w:)p 811 1221 2158 4 v 809 1334 4 113 v 861 1300
-a FD(F)-9 b(ormat)35 b(Sp)s(eci\014er)p 1667 1334 V 100
-w(Example)g(F)-9 b(ormatted)34 b(V)-9 b(alue)p 2967 1334
-V 811 1337 2158 4 v 811 1354 V 809 1467 4 113 v 861 1433
-a Fq(d)p 1667 1467 V 809 w(219)p 2967 1467 V 809 1579
-V 861 1546 a(d.3)p 1667 1579 V 713 w(219.123)p 2967 1579
-V 809 1692 V 861 1659 a(dm)p 1667 1692 V 761 w(219:05)p
-2967 1692 V 809 1805 V 861 1771 a(dm.2)p 1667 1805 V
-665 w(219:05.44)p 2967 1805 V 809 1918 V 861 1884 a(dms)p
-1667 1918 V 713 w(219:05:42)p 2967 1918 V 809 2031 V
-861 1997 a(hms.1)p 1667 2031 V 617 w(15:44:13.8)p 2967
-2031 V 809 2144 V 861 2110 a(bdms.2)p 1667 2144 V 569
-w(219)47 b(05)g(42.81)p 2967 2144 V 809 2257 V 861 2223
-a(lhms.3)p 1667 2257 V 569 w(15h44m13.88s)p 2967 2257
-V 809 2370 V 861 2336 a(+zlhms)p 1667 2370 V 569 w(+06h10m44s)p
-2967 2370 V 809 2483 V 861 2449 a(ms.1)p 1667 2483 V
-665 w(13145:42.8)p 2967 2483 V 809 2596 V 861 2562 a(lmst.3)p
-1667 2596 V 569 w(876m22.854s)p 2967 2596 V 809 2709
-V 861 2675 a(s.2)p 1667 2709 V 713 w(788742.81)p 2967
-2709 V 811 2712 2158 4 v 0 2942 a FF(Note)32 b(the)e(follo)m(wing)i(k)m
-(ey)f(p)s(oin)m(ts:)136 3213 y Fu(\017)46 b FF(The)f(required)f
-(\014elds)g(are)i(sp)s(eci\014ed)e(using)h(c)m(haracters)h(c)m(hosen)g
-(from)e(either)i(\\dms")f(or)f(\\hms")227 3326 y(according)36
-b(to)f(whether)e(the)i(v)-5 b(alue)35 b(is)f(to)h(b)s(e)f(formatted)h
-(as)f(an)g(angle)i(\(in)e(degrees\))h(or)g(a)f(time)h(\(in)227
-3438 y(hours\).)136 3632 y Fu(\017)46 b FF(If)38 b(no)g(degrees)g(or)g
-(hours)f(\014eld)h(is)g(required,)i(the)e(distinction)g(b)s(et)m(w)m
-(een)h(angle)g(and)f(time)g(ma)m(y)h(b)s(e)227 3745 y(made)31
-b(b)m(y)f(including)g(\\t")h(to)h(request)e(time.)136
-3938 y Fu(\017)46 b FF(The)35 b(n)m(um)m(b)s(er)g(of)g(decimal)i
-(places)f(\(for)g(the)g(\014nal)f(\014eld\))g(is)h(indicated)g(using)f
-(\\)p Fq(.)p FF(")57 b(follo)m(w)m(ed)37 b(b)m(y)f(an)227
-4051 y(in)m(teger.)k(An)23 b(asterisk)i(can)e(b)s(e)g(used)g(in)g
-(place)i(of)f(an)f(in)m(teger,)k(in)c(whic)m(h)g(case)i(the)f(n)m(um)m
-(b)s(er)e(of)h(decimal)227 4164 y(places)34 b(is)g(c)m(hosen)f(so)h
-(that)g(the)f(total)i(n)m(um)m(b)s(er)d(of)h(digits)h(in)f(the)h
-(formatted)g(v)-5 b(alue)33 b(is)h(equal)f(to)h(the)227
-4277 y(v)-5 b(alue)31 b(of)g(the)f(Digits)i(attribute.)136
-4470 y Fu(\017)46 b FF(\\b")31 b(causes)f(\014elds)g(to)g(b)s(e)g
-(separated)g(b)m(y)g(blanks,)g(while)g(\\l")h(causes)g(them)f(to)g(b)s
-(e)g(separated)g(b)m(y)g(the)227 4583 y(appropriate)h(letters)g(\(the)g
-(default)g(b)s(eing)f(a)g(colon\).)136 4777 y Fu(\017)46
-b FF(\\z")32 b(causes)f(padding)e(with)h(leading)h(zeros.)136
-4970 y Fu(\017)46 b FF(\\+")41 b(cause)g(a)g(plus)f(sign)g(to)i(b)s(e)d
-(pre\014xed)h(to)h(p)s(ositiv)m(e)h(v)-5 b(alues)40 b(\(negativ)m(e)j
-(v)-5 b(alues)41 b(alw)m(a)m(ys)h(ha)m(v)m(e)g(a)227
-5083 y(min)m(us)30 b(sign\).)0 5354 y(The)42 b(formatting)i(p)s
-(erformed)d(b)m(y)h(a)h(SkyF)-8 b(rame)43 b(is)f(also)i(in\015uenced)d
-(b)m(y)i(the)g(AsTime\(axis\))g(attribute,)0 5467 y(whic)m(h)31
-b(has)f(a)h(b)s(o)s(olean)g(\(in)m(teger\))i(v)-5 b(alue)32
-b(for)e(eac)m(h)i(SkyF)-8 b(rame)32 b(axis.)42 b(It)31
-b(determines)g(whether)f(the)h(default)0 5580 y(format)d(sp)s
-(eci\014er)g(for)f(an)h(axis)g(will)h(presen)m(t)f(v)-5
-b(alues)28 b(as)g(angles)h(\()p Fx(e.g.)f FF(in)f(degrees\))i(if)f(it)g
-(is)g(zero,)i(or)e(as)g(times)0 5693 y(\()p Fx(e.g.)i
-FF(in)g(hours\))g(if)g(it)h(is)f(non-zero.)p eop end
-%%Page: 88 98
-TeXDict begin 88 97 bop 0 52 a FF(88)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FF(The)44 b(default)h(AsTime)g(v)-5 b(alue)45 b(dep)s(ends)e(on)h
-(the)h(celestial)i(co)s(ordinate)f(system)f(whic)m(h)f(the)h(SkyF)-8
-b(rame)0 464 y(represen)m(ts)45 b(whic)m(h,)k(in)44 b(turn,)k(dep)s
-(ends)43 b(on)i(its)h(System)e(attribute)i(v)-5 b(alue.)85
-b(F)-8 b(or)46 b(example,)k(equatorial)0 577 y(longitude)34
-b(v)-5 b(alues)34 b(\(righ)m(t)h(ascension\))f(are)g(normally)g
-(expressed)f(in)h(hours,)f(whereas)h(ecliptic)h(longitudes)0
-690 y(are)c(normally)f(expressed)g(in)g(degrees,)h(so)g(their)f
-(default)h(AsTime)f(v)-5 b(alues)31 b(will)g(re\015ect)g(this)f
-(di\013erence.)0 847 y(The)h(v)-5 b(alue)32 b(of)g(the)g(AsTime)f
-(attribute)i(ma)m(y)f(b)s(e)f(set)h(explicitly)h(to)g(o)m(v)m(er-ride)g
-(these)f(defaults)f(if)h(required,)0 960 y(with)e(the)g(formatting)h
-(precision)g(b)s(eing)f(determined)g(b)m(y)g(the)g
-(Digits/Digits\(axis\))35 b(v)-5 b(alue.)41 b(Alternativ)m(ely)-8
-b(,)0 1073 y(the)37 b(F)-8 b(ormat\(axis\))40 b(attribute)e(ma)m(y)g(b)
-s(e)e(set)i(explicitly)h(to)f(sp)s(ecify)f(b)s(oth)f(the)i(format)f
-(and)g(precision)g(re-)0 1186 y(quired.)63 b(Setting)39
-b(an)f(explicit)i(F)-8 b(ormat)39 b(v)-5 b(alue)39 b(alw)m(a)m(ys)h(o)m
-(v)m(er-rides)f(the)g(e\013ects)g(of)f(b)s(oth)g(the)g(Digits)i(and)0
-1299 y(AsTime)d(attributes)g(\(unless)g(the)g(F)-8 b(ormat)38
-b(v)-5 b(alue)38 b(do)s(es)e(not)h(sp)s(ecify)g(the)g(required)f(n)m
-(um)m(b)s(er)f(of)i(decimal)0 1412 y(places,)31 b(in)f(whic)m(h)h(case)
-g(Digits)h(is)e(used)g(to)h(determine)g(the)f(default)h(n)m(um)m(b)s
-(er)e(of)h(decimal)i(places\))0 1697 y Fw(8.7)112 b(Reading)39
-b(F)-9 b(ormatted)37 b(Celestial)i(Co)s(ordinates)0 1913
-y FF(The)f(pro)s(cess)g(of)g(con)m(v)m(erting)j(formatted)d(celestial)j
-(co)s(ordinates,)h(suc)m(h)c(as)g(migh)m(t)i(b)s(e)d(pro)s(duced)g(b)m
-(y)h(the)0 2026 y(astF)-8 b(ormat)47 b(function)d(\()p
-Fu(x)p FF(8.6\),)51 b(in)m(to)46 b(n)m(umerical)f(\(double\))g(co)s
-(ordinate)g(v)-5 b(alues)45 b(is)g(p)s(erformed)e(b)m(y)i(using)0
-2139 y(astUnformat)29 b(\()p Fu(x)p FF(7.8\))i(and)d(passing)h(it)g(a)g
-(p)s(oin)m(ter)f(to)i(a)f(SkyF)-8 b(rame.)40 b(The)28
-b(use)h(of)f(a)h(SkyF)-8 b(rame)29 b(means)g(that)0 2252
-y(the)k(range)h(of)f(input)f(formats)i(accepted)g(is)f(appropriate)g
-(to)h(p)s(ositions)f(on)g(the)h(sky)f(expressed)f(as)i(angles)0
-2365 y(and/or)c(times,)h(while)g(the)f(returned)g(v)-5
-b(alue)30 b(is)h(in)f(radians.)0 2523 y(The)g(follo)m(wing)i(describ)s
-(es)d(the)i(forms)f(of)g(celestial)j(co)s(ordinate)e(whic)m(h)f(are)h
-(supp)s(orted:)136 2764 y Fu(\017)46 b FF(Y)-8 b(ou)36
-b(ma)m(y)g(supply)e(an)h(optional)h(sign,)h(follo)m(w)m(ed)g(b)m(y)e(b)
-s(et)m(w)m(een)h(one)f(and)g(three)g(\014elds)g(represen)m(ting)227
-2877 y(either)c(degrees,)g(arc-min)m(utes,)h(arc-seconds)f(or)f(hours,)
-g(min)m(utes,)g(seconds)h(\()p Fx(e.g.)f FF(\\)p Fu(\000)p
-FF(12)h(42)g(03"\).)136 3059 y Fu(\017)46 b FF(Eac)m(h)35
-b(\014eld)e(should)g(consist)h(of)g(a)g(sequence)g(of)g(one)g(or)f
-(more)h(digits,)i(whic)m(h)d(ma)m(y)h(include)g(leading)227
-3172 y(zeros.)46 b(A)m(t)33 b(most)g(one)f(\014eld)g(ma)m(y)g(con)m
-(tain)h(a)g(decimal)g(p)s(oin)m(t,)f(in)g(whic)m(h)g(case)h(it)f(is)g
-(tak)m(en)h(to)g(b)s(e)e(the)227 3285 y(\014nal)37 b(\014eld)f(\()p
-Fx(e.g.)g FF(decimal)i(degrees)f(migh)m(t)g(b)s(e)f(giv)m(en)i(as)e
-(\\124.707",)43 b(while)36 b(degrees)h(and)f(decimal)227
-3398 y(arc-min)m(utes)31 b(migh)m(t)h(b)s(e)d(giv)m(en)j(as)e(\\)p
-Fu(\000)p FF(13)i(33.8"\).)136 3580 y Fu(\017)46 b FF(The)23
-b(\014rst)g(\014eld)g(giv)m(en)h(ma)m(y)g(tak)m(e)h(an)m(y)f(v)-5
-b(alue,)25 b(allo)m(wing)g(angles)g(and)d(times)i(outside)g(the)g(con)m
-(v)m(en)m(tional)227 3693 y(ranges)i(to)h(b)s(e)e(represen)m(ted.)39
-b(Ho)m(w)m(ev)m(er,)29 b(subsequen)m(t)c(\014elds)h(m)m(ust)f(ha)m(v)m
-(e)i(v)-5 b(alues)26 b(of)g(less)h(than)e(60)i(\()p Fx(e.g.)227
-3806 y FF(\\720)32 b(45)g(31")f(is)g(v)-5 b(alid,)31
-b(whereas)f(\\11)h(45)h(61")f(is)g(not\).)136 3988 y
-Fu(\017)46 b FF(Fields)26 b(ma)m(y)g(b)s(e)e(separated)h(b)m(y)g(white)
-h(space)f(or)g(b)m(y)g(\\:")39 b(\(colon\),)28 b(but)d(the)g(c)m(hoice)
-i(of)e(separator)h(m)m(ust)227 4101 y(b)s(e)h(used)g(consisten)m(tly)h
-(throughout)f(the)h(v)-5 b(alue.)40 b(Additional)28 b(white)g(space)f
-(ma)m(y)h(b)s(e)f(presen)m(t)g(around)227 4214 y(\014elds)j(and)g
-(separators)h(\()p Fx(e.g.)f FF(\\)p Fu(\000)g FF(2:)h(04)g(:)g
-(7.1"\).)136 4396 y Fu(\017)46 b FF(The)39 b(follo)m(wing)h(\014eld)e
-(iden)m(ti\014cation)j(c)m(haracters)f(ma)m(y)f(b)s(e)f(used)g(as)h
-(separators)h(to)f(replace)h(those)227 4509 y(ab)s(o)m(v)m(e)32
-b(\(or)f(ma)m(y)g(b)s(e)f(app)s(ended)f(to)i(the)g(\014nal)f
-(\014eld\),)h(in)f(order)g(to)i(iden)m(tify)f(the)f(\014eld)h(to)g
-(whic)m(h)f(they)227 4622 y(are)h(app)s(ended:)477 4819
-y(d)124 b({)101 b(degrees)477 4932 y(h)124 b({)101 b(hours)477
-5044 y(m)e({)i(min)m(utes)30 b(\(of)h(arc)g(or)f(time\))477
-5157 y(s)139 b({)101 b(seconds)30 b(\(of)h(arc)g(or)f(time\))477
-5270 y Fq(')127 b FF({)101 b(arc-min)m(utes)477 5383
-y Fq(")127 b FF({)101 b(arc-seconds)227 5580 y(Either)42
-b(lo)m(w)m(er)h(or)f(upp)s(er)e(case)j(ma)m(y)g(b)s(e)e(used.)75
-b(Fields)42 b(m)m(ust)g(b)s(e)f(giv)m(en)i(in)f(order)g(of)g
-(decreasing)227 5693 y(signi\014cance)32 b(\()p Fx(e.g.)e
-FF(\\)p Fu(\000)p FF(11D)h(3)p Fq(')g FF(14.4)p Fq(")p
-FF(")h(or)e(\\22h14m11.2s"\).)p eop end
-%%Page: 89 99
-TeXDict begin 89 98 bop 0 52 a Fy(8.7)92 b(Reading)31
-b(F)-8 b(ormatted)32 b(Celestial)g(Co)s(ordinates)1834
-b FF(89)136 351 y Fu(\017)46 b FF(The)30 b(presence)h(of)f(certain)i
-(\014eld)e(iden)m(ti\014cation)i(c)m(haracters)g(indicates)f(whether)f
-(the)g(v)-5 b(alue)31 b(is)g(to)g(b)s(e)227 464 y(in)m(terpreted)d(as)g
-(an)f(angle)h(or)g(a)g(time)g(\(with)f(24)i(hours)d(corresp)s(onding)g
-(to)i(360)h(degrees\),)g(as)f(follo)m(ws:)477 679 y(d)99
-b({)h(angle)477 792 y Fq(')i FF({)e(angle)477 905 y Fq(")i
-FF({)e(angle)477 1018 y(h)f({)h(time)227 1233 y(Incompatible)36
-b(angle/time)i(iden)m(ti\014cation)f(c)m(haracters)g(ma)m(y)f(not)g(b)s
-(e)e(mixed)i(\()p Fx(e.g.)f FF(\\10h14)p Fq(')p FF(3)p
-Fq(")p FF(")i(is)227 1346 y(not)e(v)-5 b(alid\).)56 b(The)34
-b(remaining)h(\014eld)g(iden)m(ti\014cation)h(c)m(haracters)h(and)d
-(separators)h(do)g(not)g(sp)s(ecify)g(a)227 1459 y(preference)c(for)f
-(an)g(angle)h(or)g(a)f(time)i(and)d(ma)m(y)i(b)s(e)f(used)g(with)g
-(either.)136 1651 y Fu(\017)46 b FF(If)38 b(no)h(preference)g(for)f(an)
-h(angle)g(or)g(a)g(time)h(is)e(expressed)g(an)m(ywhere)h(within)f(the)h
-(v)-5 b(alue,)42 b(then)c(it)227 1764 y(is)i(in)m(terpreted)g(as)h(an)e
-(angle)i(if)f(the)g(F)-8 b(ormat)42 b(attribute)e(string)g(asso)s
-(ciated)h(with)f(the)g(SkyF)-8 b(rame)227 1877 y(axis)38
-b(generates)g(an)f(angle)h(and)e(as)h(a)h(time)f(otherwise.)61
-b(This)36 b(ensures)g(that)i(v)-5 b(alues)37 b(pro)s(duced)f(b)m(y)227
-1990 y(astF)-8 b(ormat)33 b(\()p Fu(x)p FF(8.6\))f(are)f(correctly)h
-(in)m(terpreted)e(b)m(y)h(astUnformat.)136 2181 y Fu(\017)46
-b FF(Fields)c(ma)m(y)h(b)s(e)e(omitted,)k(in)d(whic)m(h)f(case)i(they)e
-(default)h(to)h(zero.)75 b(The)41 b(remaining)h(\014elds)f(ma)m(y)227
-2294 y(b)s(e)g(iden)m(ti\014ed)h(b)m(y)g(using)f(appropriate)h(\014eld)
-f(iden)m(ti\014cation)j(c)m(haracters)f(\(see)g(ab)s(o)m(v)m(e\))g
-(and/or)f(b)m(y)227 2407 y(adding)36 b(extra)g(colon)h(separators)g
-(\(e.g.)59 b(\\)p Fu(\000)p FF(05m13s")37 b(is)f(equiv)-5
-b(alen)m(t)38 b(to)f(\\)p Fu(\000)p FF(:05:13"\).)60
-b(If)36 b(a)g(\014eld)f(is)227 2520 y(not)j(iden)m(ti\014ed)f
-(explicitly)-8 b(,)41 b(it)c(is)g(assumed)g(that)g(adjacen)m(t)i
-(\014elds)d(ha)m(v)m(e)j(b)s(een)d(giv)m(en,)k(after)e(taking)227
-2633 y(accoun)m(t)32 b(of)f(an)m(y)f(extra)h(separator)g(c)m
-(haracters.)43 b(F)-8 b(or)31 b(example:)477 2843 y(10d)242
-b({)100 b(degrees)477 2956 y(10d12)152 b({)100 b(degrees)31
-b(and)e(arc-min)m(utes)477 3069 y(11:14)p Fq(")130 b
-FF({)100 b(arc-min)m(utes)31 b(and)f(arc-seconds)477
-3182 y(9h13s)161 b({)100 b(hours)29 b(and)h(seconds)g(of)g(time)477
-3295 y(:45:33)153 b({)100 b(min)m(utes)30 b(and)g(seconds)g(\(of)h(arc)
-g(or)f(time\))477 3408 y(:55:)243 b({)100 b(min)m(utes)30
-b(\(of)h(arc)g(or)f(time\))477 3520 y(::13)243 b({)100
-b(seconds)30 b(\(of)h(arc)g(or)f(time\))477 3633 y Fu(\000)p
-FF(6::2.5)102 b({)e(degrees/hours)30 b(and)g(seconds)g(\(of)h(arc)g(or)
-f(time\))477 3746 y(07m14)127 b({)100 b(min)m(utes)30
-b(and)g(seconds)g(\(of)h(arc)g(or)f(time\))477 3859 y
-Fu(\000)p FF(8:14)p Fq(')104 b FF({)c(degrees)31 b(and)e(arc-min)m
-(utes)477 3972 y Fu(\000)p FF(h3:14)101 b({)f(min)m(utes)30
-b(and)g(seconds)g(of)h(time)477 4085 y(h:2.1)192 b({)100
-b(seconds)30 b(of)g(time)136 4295 y Fu(\017)46 b FF(If)32
-b(\014elds)g(are)h(omitted)g(in)f(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(the)
-g(remaining)f(ones)h(cannot)g(b)s(e)f(iden)m(ti\014ed)g(uniquely)227
-4408 y(\(e.g.)56 b(\\01:02"\),)39 b(then)c(the)g(\014rst)f(\014eld)h
-(\(either)h(giv)m(en)f(explicitly)i(or)e(implied)g(b)m(y)f(an)h(extra)h
-(leading)227 4521 y(colon)i(separator\))g(is)f(tak)m(en)g(to)h(b)s(e)e
-(the)h(most)g(signi\014can)m(t)h(\014eld)e(that)h(astF)-8
-b(ormat)39 b(w)m(ould)e(pro)s(duce)227 4634 y(when)28
-b(formatting)i(a)f(v)-5 b(alue)29 b(\(using)g(the)g(F)-8
-b(ormat)30 b(attribute)f(asso)s(ciated)i(with)d(the)h(SkyF)-8
-b(rame)29 b(axis\).)227 4747 y(By)f(default,)g(this)g(means)f(that)h
-(the)f(\014rst)g(\014eld)g(will)h(normally)f(b)s(e)g(in)m(terpreted)g
-(as)h(degrees)g(or)f(hours.)227 4860 y(Ho)m(w)m(ev)m(er,)32
-b(if)d(this)h(do)s(es)e(not)i(result)f(in)g(consisten)m(t)i(\014eld)e
-(iden)m(ti\014cation,)i(then)e(the)h(last)g(\014eld)f(\(either)227
-4973 y(giv)m(en)i(explicitly)g(or)e(implied)g(b)m(y)g(an)h(extra)g
-(trailing)g(colon)h(separator\))f(is)f(tak)m(en)i(to)f(to)g(b)s(e)f
-(the)g(least)227 5086 y(signi\014can)m(t)j(\014eld)e(that)h(astF)-8
-b(ormat)32 b(w)m(ould)e(pro)s(duce.)0 5354 y(This)k(\014nal)g(con)m(v)m
-(en)m(tion)j(is)e(in)m(tended)f(to)h(ensure)f(that)h(v)-5
-b(alues)35 b(formatted)h(b)m(y)e(astF)-8 b(ormat)37 b(whic)m(h)d(con)m
-(tain)0 5467 y(less)f(than)g(three)g(\014elds)f(will)h(b)s(e)g
-(correctly)h(in)m(terpreted)f(if)g(read)g(bac)m(k)g(using)f
-(astUnformat,)j(ev)m(en)e(if)g(they)0 5580 y(do)42 b(not)h(con)m(tain)h
-(\014eld)e(iden)m(ti\014cation)h(c)m(haracters.)79 b(Ho)m(w)m(ev)m(er,)
-47 b(it)c(also)g(a\013ects)h(other)f(forms)f(of)g(input.)0
-5693 y(F)-8 b(or)34 b(example,)h(if)f(the)f(F)-8 b(ormat\(axis\))36
-b(string)d(w)m(ere)h(set)g(to)g(\\mst.1")h(\(pro)s(ducing)e(t)m(w)m(o)h
-(\014elds)f(represen)m(ting)p eop end
-%%Page: 90 100
-TeXDict begin 90 99 bop 0 52 a FF(90)1229 b Fy(8)91 b(CELESTIAL)29
-b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))0 351
-y FF(min)m(utes)38 b(and)e(seconds)i(of)f(time\),)k(then)c(formatted)h
-(input)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(b)m(y)f(astUnformat)h(as)0
-464 y(follo)m(ws:)277 691 y(12)31 b(13)123 b({)100 b(min)m(utes)31
-b(and)f(seconds)277 804 y(12)244 b({)100 b(min)m(utes)277
-917 y(:13)219 b({)100 b(seconds)277 1030 y Fu(\000)p
-FF(18:)148 b({)100 b(min)m(utes)277 1142 y(12.8)174 b({)100
-b(min)m(utes)277 1255 y(1)31 b(2)g(3)137 b({)100 b(hours,)30
-b(min)m(utes)g(and)g(seconds)277 1481 y(4)p Fq(')241
-b FF({)100 b(arc-min)m(utes)277 1594 y(60::)p Fq(")146
-b FF({)100 b(degrees)277 1707 y Fu(\000)p FF(23:)p Fq(")g
-FF({)g(arc-min)m(utes)277 1820 y Fu(\000)p FF(33h)122
-b({)100 b(hours)0 2070 y(\(in)36 b(the)h(last)g(four)f(cases,)i
-(explicit)g(\014eld)e(iden)m(ti\014cation)i(has)e(b)s(een)f(giv)m(en)j
-(whic)m(h)e(o)m(v)m(errides)h(the)f(implicit)0 2183 y(iden)m
-(ti\014cation\).)0 2343 y(Alternativ)m(ely)-8 b(,)32
-b(if)d(the)g(F)-8 b(ormat\(axis\))32 b(string)c(w)m(ere)i(set)f(to)h
-(\\s.3")g(\(pro)s(ducing)e(only)h(an)g(arc-seconds)g(\014eld\),)0
-2456 y(then)h(formatted)h(input)e(w)m(ould)i(b)s(e)e(in)m(terpreted)i
-(b)m(y)f(astUnformat)h(as)g(follo)m(ws:)277 2700 y(12.8)152
-b({)100 b(arc-seconds)277 2813 y(12)31 b(13)101 b({)f(arc-min)m(utes)31
-b(and)f(arc-seconds)277 2926 y(:12)197 b({)100 b(arc-seconds)277
-3039 y(13:)197 b({)100 b(arc-min)m(utes)277 3152 y(1)31
-b(2)g(3)115 b({)100 b(degrees,)31 b(arc-min)m(utes)g(and)f(arc-seconds)
-0 3396 y(In)h(general,)i(if)f(y)m(ou)g(are)g(preparing)e(formatted)j
-(input)d(data)j(con)m(taining)g(celestial)h(co)s(ordinates)e(and)f
-(wish)0 3509 y(to)26 b(omit)g(certain)g(\014elds,)g(then)f(y)m(ou)h
-(are)g(advised)f(to)h(iden)m(tify)g(clearly)h(those)e(that)h(y)m(ou)g
-(do)f(pro)m(vide)h(b)m(y)f(using)0 3622 y(the)30 b(appropriate)g
-(\014eld)g(iden)m(ti\014cation)i(c)m(haracters)f(and/or)f(extra)h
-(colon)g(separators.)41 b(This)30 b(prev)m(en)m(ts)g(y)m(ou)0
-3735 y(dep)s(ending)38 b(on)i(the)g(implicit)h(\014eld)f(iden)m
-(ti\014cation)h(describ)s(ed)e(ab)s(o)m(v)m(e)i(whic)m(h,)i(in)c(turn,)
-j(dep)s(ends)c(on)i(an)0 3848 y(appropriate)30 b(F)-8
-b(ormat\(axis\))33 b(string)e(ha)m(ving)g(b)s(een)e(set.)0
-4008 y(When)j(writing)f(soft)m(w)m(are,)j(it)e(is)g(also)h(a)f(go)s(o)s
-(d)g(idea)g(to)g(set)h(the)f(F)-8 b(ormat\(axis\))34
-b(string)e(so)g(that)g(data)g(input)0 4121 y(will)37
-b(b)s(e)e(as)i(simple)f(as)h(p)s(ossible)e(for)h(the)h(user.)58
-b(Unless)36 b(some)h(sp)s(ecial)f(e\013ect)i(is)f(desired,)g(this)f
-(normally)0 4234 y(means)28 b(that)h(it)f(should)f(con)m(tain)i(\\d")g
-(or)f(\\h")g(to)h(ensure)e(that)i(the)f(\014rst)f(\014eld)h(en)m(tered)
-g(b)m(y)g(the)g(user)g(will)g(b)s(e)0 4347 y(in)m(terpreted)g(as)g
-(degrees)g(or)g(hours,)f(unless)g(otherwise)h(iden)m(ti\014ed.)40
-b(This)27 b(is)g(the)h(normal)g(b)s(eha)m(viour)f(unless)0
-4460 y(an)j(explicit)i(F)-8 b(ormat\(axis\))33 b(v)-5
-b(alue)31 b(has)f(b)s(een)g(set)g(to)i(o)m(v)m(erride)f(the)g(default.)
-0 4749 y Fw(8.8)112 b(Represen)m(ting)38 b(O\013sets)g(from)g(a)g(Sp)s
-(eci\014ed)h(Sky)f(P)m(osition)0 4968 y FF(A)e(SkyF)-8
-b(rame)37 b(can)f(b)s(e)f(mo)s(di\014ed)g(so)i(that)f(its)h(longitude)f
-(and)g(latitude)h(axes)g(are)f(referred)f(to)i(an)f(origin)0
-5081 y(at)c(an)m(y)g(sp)s(eci\014ed)e(sky)i(p)s(osition.)43
-b(Suc)m(h)31 b(a)h(co)s(ordinate)g(system)f(is)h(referred)e(to)i(as)g
-(an)f(\\o\013set")j(co)s(ordinate)0 5194 y(sy)m(etem.)54
-b(First,)36 b(the)e(System)g(attribute)h(should)f(b)s(e)f(set)i(to)g
-(represen)m(t)g(the)f(celestial)j(co)s(ordinate)e(system)0
-5307 y(in)40 b(whic)m(h)g(the)g(origin)h(is)f(to)h(b)s(e)f(sp)s
-(eci\014ed.)69 b(Then)40 b(the)g(SkyRef)g(attribute)h(should)e(b)s(e)h
-(set)g(to)h(hold)f(the)0 5420 y(co)s(ordinates)31 b(of)g(the)f(origin)h
-(within)f(the)g(selected)i(celestial)h(co)s(ordinate)e(system.)0
-5580 y(By)21 b(default,)i(\\north")f(in)e(the)h(new)g(o\013set)h(co)s
-(ordinate)f(system)g(is)g(parallel)h(to)g(north)e(in)h(the)g(original)h
-(celestial)0 5693 y(co)s(ordinate)38 b(system.)60 b(Ho)m(w)m(ev)m(er,)
-40 b(the)d(direction)h(of)f(north)f(in)g(the)h(o\013set)h(system)f(can)
-g(b)s(e)f(con)m(trolled)j(b)m(y)p eop end
-%%Page: 91 101
-TeXDict begin 91 100 bop 0 52 a Fy(8.8)92 b(Represen)m(ting)31
-b(O\013sets)g(from)e(a)i(Sp)s(eci\014ed)f(Sky)f(P)m(osition)1466
-b FF(91)0 351 y(assigning)43 b(a)g(v)-5 b(alue)43 b(to)h(the)f(SkyRefP)
-f(attribute.)78 b(This)42 b(attribute)h(should)f(b)s(e)g(assigned)h
-(the)g(celestial)0 464 y(co)s(ordinates)29 b(of)g(a)g(p)s(oin)m(t)g
-(whic)m(h)f(is)h(on)f(the)h(zero)h(longitude)f(meridian)f(and)g(whic)m
-(h)h(has)f(non-zero)h(latitude.)0 627 y(By)36 b(default,)i(the)e(p)s
-(osition)f(giv)m(en)i(b)m(y)f(the)g(SkyRef)f(attribute)h(is)g(used)f
-(as)h(the)g(origin)g(of)g(the)g(new)f(longi-)0 740 y(tude/latitude)26
-b(system,)g(but)e(an)h(option)g(exists)g(to)h(use)e(it)h(as)g(the)g
-(north)f(p)s(ole)h(of)f(the)h(system)g(instead.)39 b(This)0
-853 y(option)25 b(is)f(con)m(trolled)h(b)m(y)g(the)f(SkyRefIs)f
-(attribute.)40 b(The)23 b(c)m(hoice)j(of)e(v)-5 b(alue)25
-b(for)f(SkyRefIs)f(dep)s(ends)g(on)h(what)0 966 y(sort)31
-b(of)h(o\013set)g(co)s(ordinate)g(system)f(y)m(ou)h(w)m(an)m(t.)44
-b(Setting)31 b(SkyRefIs)g(to)h(\\Origin")f(\(the)h(default\))g(pro)s
-(duces)0 1079 y(an)39 b(o\013set)i(co)s(ordinate)g(system)e(whic)m(h)h
-(is)f(appro)m(ximately)i(Cartesian)f(close)h(to)f(the)g(sp)s(eci\014ed)
-f(p)s(osition.)0 1191 y(Setting)33 b(SkyRefIs)f(to)h(\\P)m(ole")i(pro)s
-(duces)c(an)h(o\013set)h(co)s(ordinate)h(system)e(whic)m(h)g(is)h
-(appro)m(ximately)g(P)m(olar)0 1304 y(close)f(to)f(the)f(sp)s
-(eci\014ed)g(p)s(osition.)p eop end
-%%Page: 92 102
-TeXDict begin 92 101 bop 0 52 a FF(92)1229 b Fy(8)91
-b(CELESTIAL)29 b(COORDINA)-8 b(TE)29 b(SYSTEMS)g(\(SKYFRAMES\))p
-eop end
-%%Page: 93 103
-TeXDict begin 93 102 bop 3689 52 a FF(93)0 351 y Fz(9)135
-b(Sp)t(ectral)45 b(Co)t(ordinate)h(Systems)f(\(Sp)t(ecF)-11
-b(rames\))0 596 y FF(The)35 b(Sp)s(ecF)-8 b(rame)35 b(is)h(a)f(F)-8
-b(rame)37 b(whic)m(h)e(is)g(sp)s(ecialised)h(for)f(represen)m(ting)h
-(co)s(ordinate)g(systems)f(whic)m(h)g(de-)0 709 y(scrib)s(e)24
-b(a)i(p)s(osition)f(within)f(an)h(electro-magnetic)k(sp)s(ectrum.)37
-b(In)25 b(this)f(section)i(w)m(e)g(examine)f(the)h(additional)0
-821 y(prop)s(erties)k(and)g(b)s(eha)m(viour)g(of)g(a)h(Sp)s(ecF)-8
-b(rame)30 b(that)h(distinguish)f(it)h(from)f(a)h(basic)f(F)-8
-b(rame)32 b(\()p Fu(x)p FF(7\).)0 1102 y Fw(9.1)112 b(The)38
-b(Sp)s(ecF)-9 b(rame)39 b(Mo)s(del)0 1315 y FF(As)30
-b(for)g(a)g(SkyF)-8 b(rame,)31 b(a)g(Sp)s(ecF)-8 b(rame)30
-b(is)g(a)g(F)-8 b(rame)31 b(\()p Fu(x)p FF(7\))h(and)d(also)i(a)g
-(Mapping)f(\()p Fu(x)p FF(5\),)i(so)e(it)h(inherits)e(all)i(the)0
-1428 y(prop)s(erties)c(and)f(b)s(eha)m(viour)h(of)h(these)g(t)m(w)m(o)g
-(ancestral)h(classes.)41 b(When)27 b(used)f(as)i(a)f(Mapping,)h(a)g(Sp)
-s(ecF)-8 b(rame)0 1541 y(implemen)m(ts)26 b(a)f(unit)g(transformation,)
-h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8 b(rame)26 b(\()p
-Fu(x)p FF(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)s(ect)0
-1654 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g(imp)s
-(ortance.)0 1809 y(When)25 b(used)f(as)i(a)f(F)-8 b(rame,)28
-b(ho)m(w)m(ev)m(er,)g(a)d(Sp)s(ecF)-8 b(rame)26 b(represen)m(ts)f(a)g
-(wide)g(range)h(of)f(di\013eren)m(t)h(1-dimensional)0
-1921 y(co)s(ordinate)42 b(system)f(whic)m(h)g(can)g(b)s(e)g(used)f(to)i
-(describ)s(e)f(p)s(ositions)g(within)f(a)i(sp)s(ectrum.)72
-b(The)40 b(options)0 2034 y(a)m(v)-5 b(ailable)33 b(largely)f(mirror)e
-(those)h(describ)s(ed)e(in)i(the)f(FITS-W)m(CS)h(pap)s(er)e(I)s(I)s(I)g
-Fx(R)-5 b(epr)g(esentations)36 b(of)d(sp)-5 b(e)g(ctr)g(al)0
-2147 y(c)g(o)g(or)g(dinates)36 b(in)c(FITS)42 b FF(\(Greisen,)31
-b(V)-8 b(aldes,)32 b(Calabretta)g(&)e(Allen\).)0 2428
-y Fw(9.2)112 b(Creating)38 b(a)g(Sp)s(ecF)-9 b(rame)0
-2641 y FF(The)37 b(Sp)s(ecF)-8 b(rame)38 b(constructor)f(function)h(is)
-f(particularly)h(simple)f(and)g(a)h(Sp)s(ecF)-8 b(rame)38
-b(with)f(default)g(at-)0 2754 y(tributes)30 b(is)h(created)g(as)g
-(follo)m(ws:)227 2970 y Ft(#include)41 b("ast.h")227
-3069 y(AstSpecFrame)e(*specframe;)227 3269 y(...)227
-3468 y(specframe)h(=)j(astSpecFrame\()c("")j(\);)0 3697
-y FF(Suc)m(h)37 b(a)i(Sp)s(ecF)-8 b(rame)38 b(w)m(ould)g(represen)m(t)g
-(the)h(default)f(co)s(ordinate)h(system)f(whic)m(h)g(is)g(helio)s(cen)m
-(tric)i(w)m(a)m(v)m(e-)0 3810 y(length)28 b(in)g(metres)g(\(i.e.)41
-b(w)m(a)m(v)m(elength)30 b(corrected)f(to)f(tak)m(e)i(in)m(to)e(accoun)
-m(t)i(the)d(Doppler)h(shift)g(caused)g(b)m(y)f(the)0
-3923 y(v)m(elo)s(cit)m(y)33 b(of)d(the)h(observ)m(er)g(around)e(the)h
-(sun\).)0 4204 y Fw(9.3)112 b(Sp)s(ecifying)39 b(a)f(P)m(articular)f
-(Sp)s(ectral)h(Co)s(ordinate)g(System)0 4417 y FF(Selection)48
-b(of)f(a)g(particular)h(co)s(ordinate)f(system)g(is)g(p)s(erformed)e
-(simply)i(b)m(y)f(setting)i(a)f(v)-5 b(alue)48 b(for)e(the)0
-4530 y(Sp)s(ecF)-8 b(rame's)33 b(\(c)m(haracter)h(string\))f(System)f
-(attribute.)47 b(This)32 b(setting)h(is)g(most)g(con)m(v)m(enien)m(tly)
-h(done)e(when)0 4643 y(the)d(Sp)s(ecF)-8 b(rame)28 b(is)h(created.)41
-b(F)-8 b(or)29 b(example,)h(a)e(Sp)s(ecF)-8 b(rame)29
-b(represen)m(ting)g(Energy)f(w)m(ould)g(b)s(e)g(created)h(b)m(y:)227
-4858 y Ft(specframe)40 b(=)j(astSpecFrame\()c("System=Energy")e(\);)0
-5087 y FF(Note)24 b(that)f(sp)s(ecifying)f(\\System=Energy")g(also)i(c)
-m(hanges)f(the)f(asso)s(ciated)i(Unit)f(\(from)f(metres)h(to)g
-(Joules\).)0 5200 y(This)40 b(is)h(b)s(ecause)g(the)g(default)g(v)-5
-b(alue)42 b(of)f(the)g(Sp)s(ecF)-8 b(rame's)42 b(Unit)f(attribute)h
-(dep)s(ends)d(on)h(the)i(System)0 5313 y(attribute)31
-b(setting.)0 5467 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h
-(v)-5 b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h
-(usually)f(needed.)40 b(The)29 b(v)-5 b(alues)0 5580
-y(supp)s(orted)40 b(are)h(set)h(out)g(in)f(the)h(attribute's)g
-(description)f(in)g(App)s(endix)f(C)h(and)g(include)g(a)h(v)-5
-b(ariet)m(y)42 b(of)0 5693 y(v)m(elo)s(cit)m(y)33 b(systems,)d
-(together)i(with)e(frequency)-8 b(,)31 b(w)m(a)m(v)m(elength,)i(energy)
--8 b(,)31 b(w)m(a)m(v)m(e-n)m(um)m(b)s(er,)h Fx(etc)p
-FF(.)p eop end
-%%Page: 94 104
-TeXDict begin 94 103 bop 0 52 a FF(94)1201 b Fy(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))0
-351 y Fw(9.4)112 b(A)m(ttributes)37 b(whic)m(h)g(Qualify)i(Sp)s(ectral)
-f(Co)s(ordinate)g(Systems)0 597 y FF(Man)m(y)30 b(sp)s(ectral)f(co)s
-(ordinate)i(systems)e(ha)m(v)m(e)h(some)g(additional)g(free)g
-(parameters)f(whic)m(h)g(serv)m(e)h(to)g(iden)m(tify)0
-710 y(a)f(particular)f(co)s(ordinate)h(system)g(from)f(amongst)h(a)f
-(broader)g(class)h(of)f(related)i(co)s(ordinate)f(systems.)40
-b(F)-8 b(or)0 823 y(example,)37 b(the)e(v)m(elo)s(cit)m(y)i(systems)e
-(are)g(all)g(parameterised)h(b)m(y)e(a)h(rest)g(frequency|the)g
-(frequency)f(whic)m(h)0 936 y(de\014nes)41 b(zero)i(v)m(elo)s(cit)m(y)
--8 b(,)48 b(and)42 b(all)h(co)s(ordinate)g(systems)f(are)g(quali\014ed)
-g(b)m(y)g(a)g(`standard)g(of)g(rest")h(whic)m(h)0 1049
-y(indicates)31 b(the)g(rest)f(frame)h(to)g(whic)m(h)f(the)g(v)-5
-b(alues)31 b(refer.)0 1228 y(In)23 b(AST,)g(these)g(free)h(parameters)g
-(are)f(represen)m(ted)h(b)m(y)f(additional)h(Sp)s(ecF)-8
-b(rame)24 b(attributes,)i(eac)m(h)e(of)g(whic)m(h)0 1341
-y(has)30 b(a)g(default)g(appropriate)g(to)g(\()p Fx(i.e.)g
-FF(de\014ned)e(b)m(y\))i(the)g(setting)h(of)f(the)g(main)g(System)g
-(attribute.)41 b(Eac)m(h)30 b(of)0 1454 y(these)c Fx(qualifying)i
-(attributes)e FF(ma)m(y)-8 b(,)28 b(ho)m(w)m(ev)m(er,)g(b)s(e)d
-(assigned)h(an)f(explicit)i(v)-5 b(alue)26 b(so)f(as)h(to)g(select)h(a)
-f(particular)0 1566 y(co)s(ordinate)38 b(system.)62 b(Note,)41
-b(it)d(is)f(usually)g(b)s(est)g(to)h(assign)g(explicit)h(v)-5
-b(alues)37 b(whenev)m(er)h(p)s(ossible)f(rather)0 1679
-y(than)28 b(relying)i(on)e(defaults.)40 b(A)m(ttribute)30
-b(should)e(only)h(b)s(e)f(left)h(at)g(their)g(default)g(v)-5
-b(alue)29 b(if)g(y)m(ou)g(\\don't)g(care")0 1792 y(what)e(v)-5
-b(alue)27 b(is)g(used.)39 b(In)26 b(certain)i(circumstances)g
-(\(particularly)-8 b(,)29 b(when)d(aligning)i(t)m(w)m(o)g(F)-8
-b(rames\),)29 b(a)e(default)0 1905 y(v)-5 b(alue)37 b(for)g(an)g
-(attribute)h(ma)m(y)f(b)s(e)g(replaced)g(b)m(y)g(the)g(v)-5
-b(alue)37 b(from)g(another)g(similar)g(F)-8 b(rame.)62
-b(Suc)m(h)36 b(v)-5 b(alue)0 2018 y(replacemen)m(t)28
-b(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h(an)f(explicit)h
-(v)-5 b(alue)27 b(to)g(the)g(attribute,)h(rather)e(than)g(simply)0
-2131 y(relying)31 b(on)f(the)h(default.)0 2310 y(The)f(main)g(Sp)s(ecF)
--8 b(rame)31 b(attributes)g(whic)m(h)f(qualify)g(the)h(System)f
-(attribute)h(are:)227 2622 y FD(Ep)s(o)s(c)m(h)427 2735
-y FF(This)i(attribute)h(is)g(inherited)f(from)g(the)h(F)-8
-b(rame)34 b(class.)51 b(It)34 b(giv)m(es)g(the)g(momen)m(t)g(in)f(time)
-427 2848 y(when)27 b(the)h(co)s(ordinates)h(are)f(correct)h(for)e(the)h
-(astronomical)i(source)e(under)e(study)h(\(usu-)427 2961
-y(ally)f(the)f(date)h(of)f(observ)-5 b(ation\).)40 b(It)26
-b(is)f(needed)f(in)h(order)g(to)h(calculate)h(the)e(Doppler)h(shift)427
-3074 y(pro)s(duced)g(b)m(y)h(the)h(v)m(elo)s(cit)m(y)i(of)d(the)h
-(observ)m(er)f(relativ)m(e)j(to)e(the)g(cen)m(tre)g(of)g(the)f(earth,)i
-(and)427 3186 y(of)i(the)f(earth)h(relativ)m(e)h(to)g(the)e(sun.)227
-3349 y FD(StdOfRest)427 3462 y FF(This)25 b(sp)s(eci\014es)g(the)g
-(rest)h(frame)f(in)g(whic)m(h)g(the)h(co)s(ordinates)g(are)g(correct.)
-40 b(T)-8 b(ransforming)427 3575 y(b)s(et)m(w)m(een)29
-b(di\013eren)m(t)g(standards)f(of)g(rest)h(in)m(v)m(olv)m(es)h(taking)g
-(accoun)m(t)g(of)e(the)h(Doppler)g(shift)427 3688 y(in)m(tro)s(duced)h
-(b)m(y)g(the)h(relativ)m(e)h(motion)f(of)g(the)g(t)m(w)m(o)g(standards)
-f(of)g(rest.)227 3850 y FD(RestF)-9 b(req)427 3963 y
-FF(Sp)s(eci\014es)26 b(the)g(frequency)g(whic)m(h)f(corresp)s(ond)g(to)
-i(zero)g(v)m(elo)s(cit)m(y)-8 b(.)42 b(When)26 b(setting)h(a)g(v)-5
-b(alue)427 4076 y(for)42 b(this)g(attribute,)47 b(the)42
-b(v)-5 b(alue)43 b(ma)m(y)g(b)s(e)e(supplied)g(as)i(a)g(w)m(a)m(v)m
-(elength)h(\(including)e(an)427 4189 y(indication)34
-b(of)f(the)h(units)e(b)s(eing)h(used,)g(\\nm")g(\\Angstrom",)i
-Fx(etc.)p FF(\),)f(whic)m(h)f(will)h(b)s(e)e(au-)427
-4302 y(tomatically)i(b)s(e)29 b(con)m(v)m(erted)j(to)f(a)g(frequency)-8
-b(.)227 4465 y FD(RefRA)427 4577 y FF(Sp)s(eci\014es)42
-b(the)h(RA)g(\(FK5)g(J2000\))h(of)f(the)g(source.)78
-b(This)41 b(is)i(used)f(when)f(con)m(v)m(erting)427 4690
-y(b)s(et)m(w)m(een)28 b(standards)d(of)i(rest.)40 b(It)27
-b(sp)s(eci\014es)f(the)h(direction)h(along)f(whic)m(h)g(the)g(comp)s
-(onen)m(t)427 4803 y(of)k(the)f(relativ)m(e)j(v)m(elo)s(cit)m(y)g(of)d
-(the)h(t)m(w)m(o)h(standards)d(of)h(rest)h(is)f(tak)m(en.)227
-4966 y FD(RefDec)427 5079 y FF(Sp)s(eci\014es)24 b(the)h(Dec)g(\(FK5)g
-(J2000\))i(of)d(the)h(source.)39 b(Used)24 b(in)g(conjunction)h(with)f
-(REFRA.)227 5241 y FD(SourceV)-9 b(el)427 5354 y FF(This)32
-b(de\014nes)g(the)i(\\source")g(standard)e(of)h(rest.)48
-b(This)32 b(is)h(a)h(rest)f(frame)g(whic)m(h)f(is)h(mo)m(v-)427
-5467 y(ing)38 b(to)m(w)m(ards)g(the)g(p)s(osition)f(giv)m(en)i(b)m(y)e
-(RefRA)g(and)g(RefDec,)k(at)d(a)g(v)m(elo)s(cit)m(y)i(giv)m(en)e(b)m(y)
-427 5580 y(SourceV)-8 b(el.)52 b(The)33 b(v)m(elo)s(cit)m(y)j(is)e
-(stored)g(in)m(ternally)h(as)f(a)g(helio)s(cen)m(tric)h(v)m(elo)s(cit)m
-(y)-8 b(,)38 b(but)33 b(can)427 5693 y(b)s(e)d(giv)m(en)h(in)f(an)m(y)h
-(of)g(the)f(other)h(supp)s(orted)d(standards)i(of)g(rest.)p
-eop end
-%%Page: 95 105
-TeXDict begin 95 104 bop 0 52 a Fy(9.5)92 b(Using)31
-b(Default)g(Sp)s(ecF)-8 b(rame)31 b(A)m(ttributes)2029
-b FF(95)0 351 y(F)-8 b(or)32 b(further)d(details)j(of)f(these)h
-(attributes)f(y)m(ou)h(should)e(consult)h(their)g(descriptions)g(in)f
-(App)s(endix)g(C)g(and)0 464 y(for)g(details)i(of)e(the)h(System)f
-(settings)i(for)e(whic)m(h)g(they)h(are)g(relev)-5 b(an)m(t,)32
-b(see)f(the)g(description)f(of)h(the)g(System)0 577 y(attribute)g
-(\(also)h(in)e(App)s(endix)e(C\).)0 736 y(Note)38 b(that)f(it)h(do)s
-(es)e(no)h(harm)f(to)h(assign)g(v)-5 b(alues)37 b(to)h(qualifying)f
-(attributes)g(whic)m(h)g(are)g(not)g(relev)-5 b(an)m(t)38
-b(to)0 849 y(the)28 b(main)g(System)g(v)-5 b(alue.)41
-b(An)m(y)28 b(suc)m(h)g(v)-5 b(alues)28 b(are)h(stored,)g(but)e(are)h
-(not)h(used)e(unless)h(the)g(System)g(v)-5 b(alue)28
-b(is)0 962 y(later)j(set)g(so)g(that)g(they)f(b)s(ecome)h(relev)-5
-b(an)m(t.)0 1250 y Fw(9.5)112 b(Using)38 b(Default)h(Sp)s(ecF)-9
-b(rame)38 b(A)m(ttributes)0 1467 y FF(The)j(default)g(v)-5
-b(alues)42 b(supplied)e(for)h(man)m(y)g(Sp)s(ecF)-8 b(rame)42
-b(attributes)f(will)h(dep)s(end)e(on)h(the)g(v)-5 b(alue)42
-b(of)f(the)0 1580 y(Sp)s(ecF)-8 b(rame's)26 b(System)f(attribute.)40
-b(In)25 b(practice,)j(this)e(means)f(that)i(there)f(is)f(usually)h
-(little)h(need)e(to)i(sp)s(ecify)0 1693 y(man)m(y)44
-b(of)g(these)g(attributes)g(explicitly)h(unless)e(y)m(ou)h(ha)m(v)m(e)h
-(some)f(sp)s(ecial)g(requiremen)m(t.)81 b(This)43 b(can)h(b)s(e)0
-1806 y(illustrated)31 b(b)m(y)f(using)g(astSho)m(w)h(to)g(examine)g(a)g
-(Sp)s(ecF)-8 b(rame,)31 b(as)f(follo)m(ws:)227 2040 y
-Ft(astShow\()41 b(astSpecFrame\()d("System=Vopt,)g(RestFreq=250)h(GHz")
-j(\))h(\);)0 2287 y FF(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s
-(ok)g(lik)m(e)h(the)e(follo)m(wing:)275 2534 y Fq(Begin)46
-b(SpecFrame)380 b(#)47 b(Description)e(of)i(spectral)f(coordinate)f
-(system)227 2647 y(#)143 b(Title)47 b(=)g("Optical)f(velocity,)f(rest)h
-(frequency)g(=)h(250)g(GHz")333 b(#)48 b(Title)227 2760
-y(of)f(coordinate)e(system)418 2873 y(Naxes)i(=)g(1)143
-b(#)47 b(Number)f(of)i(coordinate)d(axes)227 2986 y(#)143
-b(Domain)46 b(=)i("SPECTRUM")427 b(#)47 b(Coordinate)e(system)h(domain)
-227 3099 y(#)143 b(Epoch)47 b(=)g(2000)381 b(#)47 b(Julian)f(epoch)h
-(of)g(observation)227 3212 y(#)143 b(Lbl1)47 b(=)g("Optical)f
-(velocity")93 b(#)47 b(Label)g(for)g(axis)f(1)418 3325
-y(System)g(=)i("VOPT")237 b(#)47 b(Coordinate)e(system)h(type)227
-3438 y(#)143 b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)h
-(1)418 3550 y(Ax1)g(=)334 b(#)47 b(Axis)g(number)f(1)561
-3663 y(Begin)h(Axis)333 b(#)47 b(Coordinate)e(axis)561
-3776 y(End)i(Axis)275 3889 y(IsA)g(Frame)285 b(#)47 b(Coordinate)e
-(system)h(description)227 4002 y(#)143 b(SoR)47 b(=)h("Heliocentric")
-378 b(#)47 b(Standard)f(of)h(rest)418 4115 y(RstFrq)f(=)i(250000000000)
-331 b(#)47 b(Rest)g(frequency)e(\(Hz\))275 4228 y(End)i(SpecFrame)0
-4475 y FF(Note)40 b(that)f(the)g(defaults)g(\(indicated)h(b)m(y)e(the)h
-(\\)p Fq(#)p FF(")h(commen)m(t)f(c)m(haracter)i(at)e(the)g(start)g(of)g
-(the)g(line\))h(for)0 4588 y(attributes)30 b(suc)m(h)g(as)g(the)g
-(Title,)h(axis)g(Lab)s(els)e(and)g(Unit)h(sp)s(eci\014ers)g(are)g(all)h
-(set)f(to)h(v)-5 b(alues)30 b(appropriate)g(for)0 4701
-y(the)h(particular)f(v)m(elo)s(cit)m(y)j(system)e(that)g(the)f(Sp)s
-(ecF)-8 b(rame)31 b(represen)m(ts.)0 4860 y(These)25
-b(c)m(hoices)i(w)m(ould)e(b)s(e)f(appropriate)i(for)e(a)i(System)f(v)-5
-b(alue)26 b(of)f(\\V)-8 b(opt",)28 b(but)d(if)g(a)g(di\013eren)m(t)h
-(System)f(v)-5 b(alue)0 4973 y(w)m(ere)32 b(set,)g(the)g(defaults)f(w)m
-(ould)g(b)s(e)g(corresp)s(ondingly)f(di\013eren)m(t.)44
-b(F)-8 b(or)32 b(example,)h(b)m(y)e(default)h(frequency)e(is)0
-5086 y(measured)j(in)g(units)h(of)f(GHz,)j(not)e Fo(k)s(m=s)p
-FF(,)h(so)f(setting)g(\\System=freq")g(w)m(ould)g(c)m(hange)h(the)e
-(appropriate)0 5199 y(line)e(ab)s(o)m(v)m(e)g(from:)227
-5446 y Fq(#)143 b(Uni1)47 b(=)g("km/s")333 b(#)47 b(Units)g(for)f(axis)
-h(1)0 5693 y FF(to)p eop end
-%%Page: 96 106
-TeXDict begin 96 105 bop 0 52 a FF(96)1201 b Fy(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))227
-351 y Fq(#)143 b(Uni1)47 b(=)g("GHz")381 b(#)47 b(Units)g(for)f(axis)h
-(1)0 617 y FF(Of)35 b(course,)j(if)e(y)m(ou)h(do)f(not)g(lik)m(e)h(an)m
-(y)g(of)f(these)h(defaults,)g(y)m(ou)g(ma)m(y)f(alw)m(a)m(ys)i(o)m(v)m
-(er-ride)f(them)f(b)m(y)g(setting)0 730 y(explicit)41
-b(attribute)f(v)-5 b(alues)40 b(y)m(ourself.)68 b(F)-8
-b(or)40 b(instance,)j(y)m(ou)c(ma)m(y)h(c)m(ho)s(ose)h(to)f(ha)m(v)m(e)
-h(y)m(our)e(frequency)g(axis)0 842 y(expressed)30 b(in)g(\\kHz")i
-(rather)e(than)g(\\GHz".)43 b(T)-8 b(o)30 b(do)h(this)f(simply)g(set)h
-(the)f(attribute)h(v)-5 b(alue)31 b(as)g(follo)m(ws:)227
-1094 y Ft(astSetC\()41 b(specframe,)e("Unit",)i("kHz")g(\);)0
-1360 y FF(No)26 b(error)g(will)g(b)s(e)f(rep)s(orted)g(if)g(y)m(ou)h
-(acciden)m(tally)j(set)d(an)g(inappropriate)f(Unit)h(v)-5
-b(alue)26 b(\(sa)m(y)h("J")f(-)g(Joules\)|)0 1473 y(after)e(all,)j(AST)
-c(cannot)i(tell)g(what)f(y)m(ou)g(are)g(ab)s(out)g(to)h(do,)g(and)f(y)m
-(ou)g Fx(may)33 b FF(b)s(e)23 b(ab)s(out)h(to)g(c)m(hange)i(the)e
-(System)0 1586 y(v)-5 b(alue)21 b(to)g(\\Energy".)38
-b(Ho)m(w)m(ev)m(er,)25 b(an)20 b(error)g Fx(wil)5 b(l)30
-b FF(b)s(e)20 b(rep)s(orted)g(if)g(y)m(ou)h(attempt)g(to)g(\014nd)e(a)i
-(con)m(v)m(ersion)h(b)s(et)m(w)m(een)0 1699 y(t)m(w)m(o)32
-b(Sp)s(ecF)-8 b(rames)31 b(\(for)g(instance)g(using)f(astCon)m(v)m(ert)
-j(\))e(if)f(either)h(Sp)s(ecF)-8 b(rame)31 b(has)g(a)g(Unit)g(v)-5
-b(alue)31 b(whic)m(h)f(is)0 1811 y(inappropriate)g(for)g(its)h(System)f
-(v)-5 b(alue.)0 1975 y(Sp)s(ecF)d(rame)33 b(attributes,)i(lik)m(e)f
-(all)g(other)g(attributes,)h(all)f(ha)m(v)m(e)g(default)f(v)-5
-b(alue.)50 b(Ho)m(w)m(ev)m(er,)36 b(b)s(e)c(a)m(w)m(are)j(that)0
-2088 y(for)d(some)h(attributes)h(these)f(default)g(v)-5
-b(alues)32 b(can)h(nev)m(er)g(b)s(e)f(more)h(than)f(\\a)i(legal)g(n)m
-(umerical)g(v)-5 b(alue")33 b(and)0 2201 y(ha)m(v)m(e)h(no)e
-(astronomical)i(signi\014cance.)47 b(F)-8 b(or)34 b(instance,)f(the)g
-(RefRA)f(and)g(RefDec)i(attributes)f(\(whic)m(h)f(giv)m(e)0
-2314 y(the)39 b(source)g(p)s(osition\))g(b)s(oth)f(ha)m(v)m(e)i(a)f
-(default)g(v)-5 b(alue)39 b(of)f(zero.)67 b(So)38 b(unless)g(y)m(our)h
-(source)g(happ)s(ens)e(to)i(b)s(e)0 2427 y(at)d(that)g(p)s(oin)m(t)f
-(\(highly)h(unlik)m(ely!\))57 b(y)m(ou)35 b(will)h(need)f(to)h(set)g
-(new)f(v)-5 b(alues.)56 b(Lik)m(ewise,)38 b(the)d(RestF)-8
-b(req)37 b(\(rest)0 2540 y(frequency\))k(attribute)h(has)f(an)g
-(arbitrary)g(default)g(v)-5 b(alue)41 b(of)h(1.0E5)g(GHz.)74
-b(Some)41 b(op)s(erations)h(are)f(not)0 2653 y(a\013ected)31
-b(b)m(y)e(inappropriate)f(v)-5 b(alues)30 b(for)f(these)g(attributes)h
-(\(for)f(instance,)i(con)m(v)m(erting)f(from)f(frequency)g(to)0
-2766 y(w)m(a)m(v)m(elength,)41 b(c)m(hanging)c(axis)g(units,)h
-Fx(etc)5 b FF(\),)39 b(but)c(some)i(are.)60 b(F)-8 b(or)37
-b(instance,)j(con)m(v)m(erting)e(from)e(frequency)0 2878
-y(to)29 b(v)m(elo)s(cit)m(y)h(requires)d(a)i(correct)g(rest)f
-(frequency)-8 b(,)28 b(mo)m(ving)h(b)s(et)m(w)m(een)g(di\013eren)m(t)f
-(standards)f(of)h(rest)g(requires)0 2991 y(a)40 b(correct)g(source)g(p)
-s(osition.)67 b(The)39 b(moral)h(is,)i(alw)m(a)m(ys)f(set)f(explicit)g
-(v)-5 b(alues)40 b(for)f(as)h(man)m(y)f(attributes)h(as)0
-3104 y(p)s(ossible.)0 3401 y Fw(9.6)112 b(Creating)38
-b(Sp)s(ectral)g(Cub)s(es)0 3624 y FF(Y)-8 b(ou)25 b(can)g(use)g(a)g(Sp)
-s(ecF)-8 b(rame)25 b(to)g(describ)s(e)f(the)h(sp)s(ectral)g(axis)g(in)f
-(a)h(data)h(cub)s(e)e(con)m(taining)i(t)m(w)m(o)g(spatial)g(axes)0
-3737 y(and)36 b(a)h(sp)s(ectral)g(axis.)59 b(T)-8 b(o)37
-b(do)g(this)f(y)m(ou)h(w)m(ould)f(create)i(an)f(appropriate)f(Sp)s(ecF)
--8 b(rame,)39 b(together)f(with)e(a)0 3850 y(2-dimensional)30
-b(F)-8 b(rame)31 b(\(often)f(a)g(SkyF)-8 b(rame\))30
-b(to)g(describ)s(e)f(the)h(spatial)g(axes.)41 b(Y)-8
-b(ou)30 b(w)m(ould)g(then)f(com)m(bine)0 3962 y(these)i(t)m(w)m(o)h(F)
--8 b(rames)31 b(together)h(in)m(to)f(a)g(single)g(CmpF)-8
-b(rame.)227 4215 y Ft(AstSkyFrame)39 b(*skyframe;)227
-4314 y(AstSpecFrame)g(*specframe;)227 4414 y(AstCmpFrame)g(*cmpframe;)
-227 4513 y(...)227 4613 y(skyframe)i(=)i(astSkyFrame\()38
-b("Epoch=J2002")h(\);)227 4713 y(specframe)h(=)j(astSpecFrame\()c
-("System=Freq,St)o(dO)o(fRe)o(st)o(=LS)o(RK)o(")f(\);)227
-4812 y(cmpframe)j(=)i(astCmpFrame\()38 b(skyframe,)i(specframe,)g("")i
-(\);)0 5078 y FF(In)30 b(the)g(resulting)h(CmpF)-8 b(rame,)30
-b(axis)h(1)f(will)h(b)s(e)f(RA,)g(axis)h(2)g(will)g(b)s(e)e(Dec)j(and)d
-(axis)i(3)g(will)g(b)s(e)e(F)-8 b(requency)g(.)0 5191
-y(If)30 b(this)g(is)h(not)f(the)h(order)f(y)m(ou)g(w)m(an)m(t,)i(y)m
-(ou)f(can)f(p)s(erm)m(ute)g(the)h(axes)g(using)f(astP)m(ermAxes.)0
-5354 y(There)36 b(is)g(one)g(p)s(oten)m(tial)i(problem)e(with)f(this)h
-(approac)m(h)h(if)f(y)m(ou)h(are)f(in)m(terested)h(in)f(un)m(usually)g
-(high)f(ac-)0 5467 y(curacy)-8 b(.)53 b(Con)m(v)m(ersion)34
-b(b)s(et)m(w)m(een)h(di\013eren)m(t)f(standards)g(of)g(rest)g(in)m(v)m
-(olv)m(es)i(taking)f(accoun)m(t)h(of)e(the)g(Doppler)0
-5580 y(shift)j(caused)g(b)m(y)f(the)i(relativ)m(e)h(motion)e(of)g(the)g
-(t)m(w)m(o)i(standards)d(of)h(rest.)60 b(A)m(t)38 b(some)g(p)s(oin)m(t)
-f(this)f(in)m(v)m(olv)m(es)0 5693 y(\014nding)26 b(the)h(comp)s(onen)m
-(t)g(of)h(the)f(relativ)m(e)i(v)m(elo)s(cit)m(y)h(in)d(the)g(direction)
-h(of)f(in)m(terest.)41 b(F)-8 b(or)28 b(a)f(Sp)s(ecF)-8
-b(rame,)29 b(this)p eop end
-%%Page: 97 107
-TeXDict begin 97 106 bop 0 52 a Fy(9.7)92 b(Handling)30
-b(Dual-Sideband)g(Sp)s(ectra)2175 b FF(97)0 351 y(direction)29
-b(is)f(alw)m(a)m(ys)i(giv)m(en)g(b)m(y)e(the)g(RefRA)h(and)f(RefDec)h
-(attributes,)h(ev)m(en)f(if)f(the)h(Sp)s(ecF)-8 b(rame)28
-b(is)h(em)m(b)s(ed-)0 464 y(ded)j(within)g(a)h(CmpF)-8
-b(rame)32 b(as)h(ab)s(o)m(v)m(e.)49 b(It)33 b(w)m(ould)f(b)s(e)g(more)h
-(appropriate)f(if)h(this)f(\\direction)i(of)f(in)m(terest")0
-577 y(w)m(as)c(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alues)29
-b(passed)g(in)m(to)g(the)g(CmpF)-8 b(rame)29 b(on)g(the)g(RA)g(and)f
-(DEC)h(axes,)h(allo)m(wing)g(eac)m(h)0 690 y(pixel)h(within)f(a)g(data)
-h(cub)s(e)f(to)h(ha)m(v)m(e)h(a)e(sligh)m(tly)i(di\013eren)m(t)f
-(correction)h(for)e(Doppler)g(shift.)0 866 y(Unfortunately)-8
-b(,)37 b(the)d(Sp)s(ecF)-8 b(rame)35 b(class)h(cannot)f(do)f(this)h
-(\(since)g(it)g(is)g(purely)e(a)i(1-dimensional)h(F)-8
-b(rame\),)0 979 y(and)26 b(so)h(some)g(small)g(degree)g(of)g(error)f
-(will)h(b)s(e)f(in)m(tro)s(duced)g(when)g(con)m(v)m(erting)i(b)s(et)m
-(w)m(een)g(standards)d(of)i(rest,)0 1092 y(the)32 b(size)h(of)f(the)g
-(error)f(v)-5 b(arying)32 b(from)f(pixel)h(to)h(pixel.)45
-b(It)32 b(is)g(hop)s(ed)f(that)h(at)h(some)f(p)s(oin)m(t)g(in)f(the)h
-(future)f(a)0 1204 y(sub-class)g(of)g(CmpF)-8 b(rame)30
-b(\(a)i(Sp)s(ecCub)s(eF)-8 b(rame\))30 b(will)h(b)s(e)f(added)g(to)i
-(AST)e(whic)m(h)g(allo)m(ws)i(for)f(this)f(spatial)0
-1317 y(v)-5 b(ariation)32 b(in)e(Doppler)g(shift.)0 1493
-y(The)40 b(maxim)m(um)g(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s(duced)f
-(b)m(y)i(this)f(problem)f(is)i(of)f(the)h(order)f(of)g
-Fo(V)47 b Fu(\003)27 b Fo(S)5 b(I)i(N)j FF(\()p Fo(F)j(O)s(V)21
-b FF(\),)0 1606 y(where)33 b Fo(F)13 b(O)s(V)53 b FF(is)33
-b(the)g(angular)h(\014eld)e(of)i(view,)g(and)e Fo(V)54
-b FF(is)33 b(the)g(relativ)m(e)i(v)m(elo)s(cit)m(y)h(of)d(the)h(t)m(w)m
-(o)g(standards)e(of)0 1719 y(rest.)56 b(As)35 b(an)g(example,)i(when)e
-(correcting)h(from)f(the)h(observ)m(ers)f(rest)h(frame)f(\(i.e.)56
-b(the)36 b(top)s(o)s(cen)m(tric)g(rest)0 1832 y(frame\))f(to)h(the)f
-(kinematic)h(lo)s(cal)h(standard)d(of)h(rest)g(the)g(maxim)m(um)g(v)-5
-b(alue)35 b(of)g Fo(V)55 b FF(is)35 b(ab)s(out)g(20)h
-Fo(k)s(m=s)p FF(,)g(so)0 1945 y(for)c(5)h(arc-min)m(ute)g(\014eld)f(of)
-h(view)f(the)h(maxim)m(um)f(v)m(elo)s(cit)m(y)j(error)d(in)m(tro)s
-(duced)g(b)m(y)g(the)h(correction)g(will)g(b)s(e)0 2058
-y(ab)s(out)c(0.03)j Fo(k)s(m=s)p FF(.)40 b(As)30 b(another)g(example,)h
-(the)f(maxim)m(um)f(error)g(when)g(correcting)i(from)e(the)h(observ)m
-(ers)0 2171 y(rest)h(frame)f(to)h(the)g(lo)s(cal)g(group)f(is)g(ab)s
-(out)g(5)h Fo(k)s(m=s)g FF(o)m(v)m(er)g(a)g(1)g(degree)g(\014eld)f(of)g
-(view.)0 2508 y Fw(9.7)112 b(Handling)39 b(Dual-Sideband)h(Sp)s(ectra)0
-2748 y FF(Dual)32 b(sideband)d(sup)s(er-hetero)s(dyne)h(receiv)m(ers)i
-(pro)s(duce)e(sp)s(ectra)h(in)f(whic)m(h)h(eac)m(h)h(c)m(hannel)g(con)m
-(tains)g(con-)0 2861 y(tributions)27 b(from)g(t)m(w)m(o)i(di\013eren)m
-(t)f(frequencies,)g(referred)f(to)h(as)f(the)h(\\upp)s(er)e(sideband)g
-(frequency")h(and)g(the)0 2974 y(\\lo)m(w)m(er)i(sideband)d
-(frequency".)40 b(In)26 b(the)i(rest)f(frame)h(of)f(the)h(observ)m(er)f
-(\(top)s(o)s(cen)m(tric\),)j(these)e(are)g(related)g(to)0
-3087 y(eac)m(h)k(other)e(as)h(follo)m(ws:)1544 3494 y
-Fl(f)1585 3506 y Fk(lsb)1694 3494 y Fj(=)23 b(2)p Fl(:f)1888
-3506 y Fk(LO)2007 3494 y Fi(\000)18 b Fl(f)2131 3506
-y Fk(usb)3446 3494 y Fj(\(1\))0 3796 y FF(where)34 b
-Fo(f)312 3810 y Fh(LO)454 3796 y FF(is)h(a)g(\014xed)e(frequency)i(kno)
-m(wn)f(as)h(the)f(\\lo)s(cal)j(oscillator)g(frequency".)53
-b(In)34 b(other)h(w)m(ords,)g(the)0 3909 y(lo)s(cal)30
-b(oscillator)g(frequency)e(is)g(alw)m(a)m(ys)i(mid-w)m(a)m(y)f(b)s(et)m
-(w)m(een)g(an)m(y)g(pair)f(of)g(corresp)s(onding)f(upp)s(er)g(and)g(lo)
-m(w)m(er)0 4022 y(sideband)37 b(frequencies)822 3989
-y Fv(16)897 4022 y FF(.)63 b(If)38 b(y)m(ou)g(w)m(an)m(t)h(to)f
-(describ)s(e)g(the)g(sp)s(ectral)g(axis)h(of)f(suc)m(h)f(a)i(sp)s
-(ectrum)e(using)g(a)0 4135 y(Sp)s(ecF)-8 b(rame)31 b(y)m(ou)h(m)m(ust)f
-(c)m(ho)s(ose)h(whether)f(y)m(ou)g(w)m(an)m(t)h(the)g(Sp)s(ecF)-8
-b(rame)31 b(to)h(describ)s(e)f Fo(f)3029 4150 y Fh(l)q(sb)3148
-4135 y FF(or)h Fo(f)3306 4150 y Fh(usb)3444 4135 y FF(-)f(a)h(basic)0
-4247 y(Sp)s(ecF)-8 b(rame)42 b(cannot)g(describ)s(e)f(b)s(oth)f
-(sidebands)g(sim)m(ultaneously)-8 b(.)76 b(Ho)m(w)m(ev)m(er,)46
-b(there)c(is)f(a)h(sub-class)f(of)0 4360 y(Sp)s(ecF)-8
-b(rame,)31 b(called)g(DSBSp)s(ecF)-8 b(rame,)32 b(whic)m(h)e(o)m(v)m
-(ercomes)i(this)f(di\016cult)m(y)-8 b(.)0 4536 y(A)33
-b(DSBSp)s(ecF)-8 b(rame)33 b(has)f(a)h(SideBand)f(attribute)h(whic)m(h)
-f(indicates)i(if)e(the)h(DSBSp)s(ecF)-8 b(rame)33 b(is)f(curren)m(tly)0
-4649 y(b)s(eing)26 b(used)f(to)i(describ)s(e)e(the)h(upp)s(er)f(or)h
-(lo)m(w)m(er)h(sideband)e(sp)s(ectral)h(axis.)40 b(The)26
-b(v)-5 b(alue)26 b(of)g(this)g(attribute)h(can)0 4762
-y(b)s(e)33 b(c)m(hanged)i(at)f(an)m(y)g(time.)52 b(If)33
-b(y)m(ou)h(use)g(the)g(astCon)m(v)m(ert)h(function)e(to)i(\014nd)d(the)
-i(Mapping)g(b)s(et)m(w)m(een)g(t)m(w)m(o)0 4875 y(DSBSp)s(ecF)-8
-b(rames,)31 b(the)f(setting)h(for)f(the)g(t)m(w)m(o)i(SideBand)d
-(attributes)i(will)f(b)s(e)g(tak)m(en)h(in)m(to)g(accoun)m(t.)42
-b(Th)m(us,)0 4988 y(if)30 b(y)m(ou)h(tak)m(e)h(a)f(cop)m(y)h(of)e(a)h
-(DSBSp)s(ecF)-8 b(rame,)31 b(toggle)i(its)e(SideBand)f(attribute,)i
-(and)e(then)g(use)g(astCon)m(v)m(ert)0 5101 y(to)i(\014nd)f(a)h
-(Mapping)f(from)h(the)g(original)g(to)h(the)f(mo)s(di\014ed)e(cop)m(y)
--8 b(,)34 b(the)e(resulting)g(Mapping)f(will)h(b)s(e)f(of)h(the)0
-5214 y(form)e(of)g(equation)i(1)e(\(if)h(the)g(DSBSp)s(ecF)-8
-b(rame)31 b(has)f(its)h(StdOfRest)e(attribute)i(set)g(to)g(\\T)-8
-b(op)s(o)s(cen)m(tric"\).)0 5389 y(In)28 b(general,)j(when)d(\014nding)
-g(a)i(Mapping)f(b)s(et)m(w)m(een)h(t)m(w)m(o)g(arbitrary)f(DSBSp)s(ecF)
--8 b(rames,)30 b(the)g(total)h(Mapping)0 5502 y(is)f(made)h(of)f(of)h
-(three)f(parts)h(in)f(series:)p 0 5607 1512 4 v 73 5661
-a Fs(16)138 5693 y Fr(Note,)c(this)g(simple)g(relationship)h(only)f
-(applies)g(if)g(all)h(frequencies)f(are)g(top)r(o)r(cen)n(tric.)p
-eop end
-%%Page: 98 108
-TeXDict begin 98 107 bop 0 52 a FF(98)1201 b Fy(9)91
-b(SPECTRAL)29 b(COORDINA)-8 b(TE)30 b(SYSTEMS)f(\(SPECFRAMES\))111
-351 y FF(1.)46 b(A)38 b(Mapping)f(whic)m(h)g(con)m(v)m(erts)h(the)g
-(\014rst)e(DSBSp)s(ecF)-8 b(rame)38 b(in)m(to)g(its)f(upp)s(er)f
-(sideband)g(represen)m(ta-)227 464 y(tion.)41 b(If)30
-b(the)g(DSBSp)s(ecF)-8 b(rame)30 b(already)h(represen)m(ts)f(its)g(upp)
-s(er)e(sideband,)h(this)h(Mapping)g(will)g(b)s(e)f(a)227
-577 y(UnitMap.)111 765 y(2.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m
-(erts)i(from)e(the)h(\014rst)f(to)i(the)f(second)f(DSBSp)s(ecF)-8
-b(rame,)27 b(treating)f(them)f(as)f(if)227 878 y(they)30
-b(w)m(ere)h(b)s(oth)e(basic)h(Sp)s(ecF)-8 b(rames.)41
-b(This)29 b(tak)m(es)i(accoun)m(t)h(of)e(an)m(y)g(di\013erence)g(in)g
-(units,)f(standard)227 991 y(of)i(rest,)g(system,)f Fx(etc)36
-b FF(b)s(et)m(w)m(een)31 b(the)f(t)m(w)m(o)i(DSBSp)s(ecF)-8
-b(rames.)111 1178 y(3.)46 b(A)25 b(Mapping)g(whic)m(h)f(con)m(v)m(erts)
-j(the)e(second)f(DSBSp)s(ecF)-8 b(rame)26 b(from)e(its)h(upp)s(er)e
-(sideband)h(represen)m(ta-)227 1291 y(tion)g(to)h(its)e(curren)m(t)h
-(sideband.)37 b(If)23 b(the)h(DSBSp)s(ecF)-8 b(rame)24
-b(curren)m(tly)f(represen)m(ts)h(its)g(upp)s(er)d(sideband,)227
-1404 y(this)31 b(Mapping)f(will)h(b)s(e)e(a)i(UnitMap.)0
-1666 y(If)h(an)h(attempt)h(is)f(made)f(to)i(\014nd)d(the)i(Mapping)g(b)
-s(et)m(w)m(een)g(a)g(DSBSp)s(ecF)-8 b(rame)34 b(and)e(a)h(basic)g(Sp)s
-(ecF)-8 b(rame,)0 1779 y(then)34 b(the)g(DSBSp)s(ecF)-8
-b(rame)34 b(will)g(b)s(e)g(treated)h(lik)m(e)g(a)f(basic)g(Sp)s(ecF)-8
-b(rame.)52 b(In)33 b(other)h(w)m(ords,)h(the)f(returned)0
-1892 y(Mapping)42 b(will)g(not)h(b)s(e)e(a\013ected)i(b)m(y)f(the)g
-(setting)i(of)e(the)g(SideBand)f(attribute)i(\(or)f(an)m(y)h(of)f(the)g
-(other)0 2005 y(attributes)31 b(sp)s(eci\014c)f(to)h(the)g(DSBSp)s(ecF)
--8 b(rame)31 b(class\).)0 2168 y(In)41 b(practice,)46
-b(the)c(lo)s(cal)h(oscillator)h(frequency)e(for)f(a)h(dual)g(sideband)e
-(instrumen)m(t)i(ma)m(y)g(not)g(b)s(e)f(easily)0 2281
-y(a)m(v)-5 b(ailable)31 b(to)f(an)f(observ)m(er.)40 b(Instead,)30
-b(it)f(is)g(common)g(practice)h(to)g(sp)s(ecify)f(the)g(sp)s(ectral)g
-(p)s(osition)g(of)g(some)0 2394 y(cen)m(tral)k(feature)g(in)f(the)g
-(observ)-5 b(ation)33 b(\(commonly)g(the)f(cen)m(tre)h(of)f(the)h
-(instrumen)m(t)e(passband\),)h(together)0 2507 y(with)23
-b(an)g(\\in)m(termediate)i(frequency".)39 b(T)-8 b(ogether,)26
-b(these)e(t)m(w)m(o)g(v)-5 b(alues)24 b(allo)m(w)g(the)g(lo)s(cal)g
-(oscillator)i(frequency)0 2619 y(to)21 b(b)s(e)f(determined.)37
-b(The)20 b(in)m(termediate)i(frequency)d(is)i(the)f(di\013erence)h(b)s
-(et)m(w)m(een)g(the)f(top)s(o)s(cen)m(tric)i(frequency)0
-2732 y(at)31 b(the)g(cen)m(tral)g(sp)s(ectral)g(p)s(osition)g(and)e
-(the)i(top)s(o)s(cen)m(tric)g(frequency)f(of)h(the)f(lo)s(cal)i
-(oscillator.)43 b(So:)1528 3081 y Fl(f)1569 3093 y Fk(LO)1693
-3081 y Fj(=)23 b Fl(f)1822 3093 y Fk(centr)r(al)2062
-3081 y Fj(+)18 b Fl(f)2186 3093 y Fk(if)3446 3081 y Fj(\(2\))0
-3343 y FF(The)29 b(DSBSp)s(ecF)-8 b(rame)30 b(class)h(uses)e(the)h
-(DSBCen)m(tre)g(attribute)g(to)g(sp)s(ecify)g(the)g(cen)m(tral)g(sp)s
-(ectral)g(p)s(osition)0 3456 y(\()p Fo(f)80 3471 y Fh(centr)r(al)309
-3456 y FF(\),)43 b(and)d(the)h(IF)g(attribute)g(to)g(sp)s(ecify)f(the)h
-(in)m(termediate)h(frequency)e(\()p Fo(f)2932 3471 y
-Fh(if)3001 3456 y FF(\).)72 b(The)40 b(DSBCen)m(tre)0
-3569 y(v)-5 b(alue)35 b(is)f(giv)m(en)h(and)f(returned)f(in)h(the)g(sp)
-s(ectral)h(system)f(describ)s(ed)f(b)m(y)i(the)f(DSBSp)s(ecF)-8
-b(rame)35 b(\(th)m(us)f(y)m(ou)0 3682 y(do)k(not)g(need)f(to)h
-(calculate)j(the)c(corresp)s(onding)g(top)s(o)s(cen)m(tric)i(frequency)
-e(y)m(ourself)h(-)g(this)g(will)g(b)s(e)f(done)0 3795
-y(automatically)28 b(b)m(y)e(the)g(DSBSp)s(ecF)-8 b(rame)26
-b(when)f(y)m(ou)h(assign)f(a)h(new)g(v)-5 b(alue)26 b(to)g(the)g
-(DSBCen)m(tre)g(attribute\).)0 3908 y(The)j(v)-5 b(alue)30
-b(assigned)f(to)i(the)e(IF)h(attribute)g(should)e(alw)m(a)m(ys)j(b)s(e)
-e(a)h(top)s(o)s(cen)m(tric)g(frequency)f(in)g(units)g(of)h(Hz,)0
-4021 y(ho)m(w)m(ev)m(er)38 b(a)f(negativ)m(e)h(v)-5 b(alue)37
-b(ma)m(y)g(b)s(e)f(giv)m(en)h(to)g(indicate)h(that)f(the)f(DSBCen)m
-(tre)h(v)-5 b(alue)37 b(is)g(in)f(the)g(upp)s(er)0 4134
-y(sideband)g(\(that)j(is,)h(if)d Fo(I)7 b(F)50 b(<)37
-b FF(0)h(then)f Fo(f)1447 4149 y Fh(centr)r(al)1713 4134
-y Fo(>)g(f)1866 4148 y Fh(LO)1973 4134 y FF(\).)63 b(A)37
-b(p)s(ositiv)m(e)i(v)-5 b(alue)38 b(for)f(IF)h(indicates)g(that)g(the)0
-4247 y(DSBCen)m(tre)31 b(v)-5 b(alue)31 b(is)f(in)g(the)h(lo)m(w)m(er)h
-(sideband)d(\(that)i(is,)g(if)f Fo(I)7 b(F)39 b(>)25
-b FF(0)30 b(then)g Fo(f)2685 4262 y Fh(centr)r(al)2939
-4247 y Fo(<)25 b(f)3080 4261 y Fh(LO)3187 4247 y FF(\).)p
-eop end
-%%Page: 99 109
-TeXDict begin 99 108 bop 3689 52 a FF(99)0 351 y Fz(10)135
-b(Time)45 b(Systems)h(\(TimeF)-11 b(rames\))0 608 y FF(The)23
-b(TimeF)-8 b(rame)25 b(is)f(a)h(F)-8 b(rame)25 b(whic)m(h)e(is)h(sp)s
-(ecialised)h(for)f(represen)m(ting)g(momen)m(ts)g(in)g(time.)39
-b(In)23 b(this)h(section)0 721 y(w)m(e)31 b(examine)g(the)g(additional)
-h(prop)s(erties)e(and)f(b)s(eha)m(viour)i(of)f(a)h(TimeF)-8
-b(rame)32 b(that)f(distinguish)f(it)h(from)f(a)0 834
-y(basic)h(F)-8 b(rame)31 b(\()p Fu(x)p FF(7\).)0 1136
-y Fw(10.1)112 b(The)38 b(TimeF)-9 b(rame)39 b(Mo)s(del)0
-1362 y FF(As)29 b(for)f(a)i(SkyF)-8 b(rame,)29 b(a)h(TimeF)-8
-b(rame)29 b(is)g(a)h(F)-8 b(rame)29 b(\()p Fu(x)p FF(7\))i(and)d(also)i
-(a)f(Mapping)g(\()p Fu(x)p FF(5\),)i(so)e(it)g(inherits)g(all)g(the)0
-1474 y(prop)s(erties)c(and)g(b)s(eha)m(viour)g(of)h(these)g(t)m(w)m(o)h
-(ancestral)g(classes.)40 b(When)25 b(used)g(as)h(a)g(Mapping,)g(a)g
-(TimeF)-8 b(rame)0 1587 y(implemen)m(ts)26 b(a)f(unit)g
-(transformation,)h(exactly)h(lik)m(e)g(a)e(basic)h(F)-8
-b(rame)26 b(\()p Fu(x)p FF(7.3\))h(or)e(a)h(UnitMap,)h(so)e(this)g(asp)
-s(ect)0 1700 y(of)31 b(its)f(b)s(eha)m(viour)g(is)h(not)f(of)h(great)g
-(imp)s(ortance.)0 1866 y(When)23 b(used)g(as)h(a)g(F)-8
-b(rame,)26 b(ho)m(w)m(ev)m(er,)g(a)e(TimeF)-8 b(rame)25
-b(represen)m(ts)e(a)h(wide)f(range)h(of)g(di\013eren)m(t)g
-(1-dimensional)0 1979 y(co)s(ordinate)30 b(system)f(whic)m(h)f(can)h(b)
-s(e)g(used)f(to)h(describ)s(e)g(momen)m(ts)g(in)f(time.)41
-b(Absolute)30 b(times)f(and)f(relativ)m(e)0 2091 y(\(i.e.)41
-b(elapsed\))28 b(times)g(are)g(supp)s(orted)e(\(attribute)i
-(TimeOrigin\),)g(as)g(are)g(a)g(range)g(of)f(di\013eren)m(t)h(time)g
-(scales)0 2204 y(\(attribute)39 b(TimeScale\).)65 b(An)37
-b(absolute)i(or)f(relativ)m(e)i(v)-5 b(alue)38 b(in)f(an)m(y)i(time)f
-(scale)h(can)g(b)s(e)e(represen)m(ted)h(in)0 2317 y(di\013eren)m(t)23
-b(forms)e(suc)m(h)h(as)g(Mo)s(di\014ed)g(Julian)g(Date,)k(Julian)21
-b(Ep)s(o)s(c)m(h,)j Fx(etc)j FF(\(attribute)c(System\).)38
-b(AST)22 b(extends)0 2430 y(the)30 b(de\014nition)f(of)g(these)h
-(systems)g(to)g(allo)m(w)h(them)e(to)h(b)s(e)f(used)g(with)g(an)m(y)g
-(unit)g(of)h(time)g(\(attribute)h(Unit\).)0 2543 y(The)i(TimeF)-8
-b(rame)35 b(class)g(also)g(allo)m(ws)g(times)g(to)g(formatted)f(as)g
-(either)h(a)f(simple)g(\015oating)h(p)s(oin)m(t)f(v)-5
-b(alue)34 b(or)0 2656 y(as)d(a)f(Gregorian)i(date)f(and)f(time)h(of)f
-(da)m(y)h(\(attribute)g(F)-8 b(ormat\).)0 2958 y Fw(10.2)112
-b(Creating)38 b(a)g(TimeF)-9 b(rame)0 3184 y FF(The)33
-b(TimeF)-8 b(rame)35 b(constructor)f(function)f(is)h(particularly)g
-(simple)g(and)f(a)h(TimeF)-8 b(rame)34 b(with)g(default)f(at-)0
-3297 y(tributes)d(is)h(created)g(as)g(follo)m(ws:)227
-3554 y Ft(#include)41 b("ast.h")227 3653 y(AstTimeFrame)e(*timeframe;)
-227 3853 y(...)227 4052 y(timeframe)h(=)j(astTimeFrame\()c("")j(\);)0
-4322 y FF(Suc)m(h)25 b(a)g(TimeF)-8 b(rame)27 b(w)m(ould)e(represen)m
-(t)g(the)h(default)f(co)s(ordinate)h(system)g(whic)m(h)f(is)g(Mo)s
-(di\014ed)g(Julian)g(Date)0 4435 y(\(with)30 b(the)h(usual)f(units)g
-(of)g(da)m(ys\))h(in)f(the)h(In)m(ternational)g(A)m(tomic)i(Time)d(\(T)
--8 b(AI\))31 b(time)g(scale.)0 4738 y Fw(10.3)112 b(Sp)s(ecifying)39
-b(a)f(P)m(articular)f(Time)h(System)0 4963 y FF(By)28
-b(setting)g(the)g(System)f(attribute)h(appropriately)-8
-b(,)29 b(the)f(TimeF)-8 b(rame)28 b(can)g(represen)m(t)f(Julian)h
-(Date,)h(Mo)s(d-)0 5076 y(i\014ed)37 b(Julian)h(Date,)k(Julian)37
-b(Ep)s(o)s(c)m(h)g(or)h(Besselian)h(Ep)s(o)s(c)m(h)e(\(the)i(time)f
-(scale)h(is)f(sp)s(eci\014ed)f(b)m(y)h(a)g(separate)0
-5189 y(attribute)31 b(called)h(TimeScale\).)0 5354 y(Selection)d(of)f
-(a)h(particular)f(co)s(ordinate)h(system)f(is)f(p)s(erformed)g(simply)g
-(b)m(y)h(setting)h(a)f(v)-5 b(alue)28 b(for)g(the)g(Time-)0
-5467 y(F)-8 b(rame's)35 b(\(c)m(haracter)h(string\))f(System)f
-(attribute.)53 b(This)33 b(setting)j(is)e(most)g(con)m(v)m(enien)m(tly)
-j(done)d(when)f(the)0 5580 y(TimeF)-8 b(rame)31 b(is)f(created.)42
-b(F)-8 b(or)30 b(example,)h(a)g(TimeF)-8 b(rame)30 b(represen)m(ting)h
-(Julian)e(Ep)s(o)s(c)m(h)g(w)m(ould)h(b)s(e)f(created)0
-5693 y(b)m(y:)p eop end
-%%Page: 100 110
-TeXDict begin 100 109 bop 0 52 a FF(100)2023 b Fy(10)92
-b(TIME)30 b(SYSTEMS)f(\(TIMEFRAMES\))227 351 y Ft(timeframe)40
-b(=)j(astTimeFrame\()c("System=JEPOCH")e(\);)0 614 y
-FF(Note)e(that)f(sp)s(ecifying)g(\\System=JEPOCH")f(also)i(c)m(hanges)g
-(the)f(asso)s(ciated)h(default)f(Unit)g(\(from)f(da)m(ys)0
-727 y(to)g(y)m(ears\).)46 b(This)31 b(is)h(b)s(ecause)g(the)h(default)f
-(v)-5 b(alue)32 b(of)g(the)g(TimeF)-8 b(rame's)33 b(Unit)g(attribute)f
-(dep)s(ends)e(on)i(the)0 839 y(System)e(attribute)h(setting.)0
-1002 y(Y)-8 b(ou)30 b(ma)m(y)g(c)m(hange)h(the)e(System)h(v)-5
-b(alue)30 b(at)g(an)m(y)g(time,)g(although)g(this)g(is)f(not)h(usually)
-f(needed.)40 b(The)29 b(v)-5 b(alues)0 1115 y(supp)s(orted)29
-b(are)h(set)h(out)g(in)f(the)g(attribute's)i(description)e(in)g(App)s
-(endix)f(C.)0 1408 y Fw(10.4)112 b(A)m(ttributes)37 b(whic)m(h)g
-(Qualify)i(Time)f(Co)s(ordinate)h(Systems)0 1630 y FF(Time)f(co)s
-(ordinate)i(systems)e(require)g(some)h(additional)g(free)f(parameters)h
-(to)g(iden)m(tify)g(a)g(particular)f(co-)0 1743 y(ordinate)c(system)g
-(from)f(amongst)i(a)f(broader)f(class)h(of)g(related)h(co)s(ordinate)f
-(systems.)51 b(F)-8 b(or)34 b(example,)i(all)0 1856 y(TimeF)-8
-b(rames)29 b(are)f(quali\014ed)g(b)m(y)g(the)g(time)h(scale)g(\(that)h
-(is,)e(the)h(ph)m(ysical)f(pro)s(cess)g(used)f(to)i(de\014ne)e(the)h
-(\015o)m(w)0 1968 y(of)j(time\),)g(and)f(some)h(require)f(the)g(p)s
-(osition)h(of)f(the)h(observ)m(er's)g(clo)s(c)m(k.)0
-2131 y(In)42 b(AST,)g(these)h(free)f(parameters)h(are)g(represen)m(ted)
-f(b)m(y)h(additional)g(TimeF)-8 b(rame)43 b(attributes,)k(eac)m(h)c(of)
-0 2244 y(whic)m(h)35 b(has)g(a)g(default)g(appropriate)h(to)f(\()p
-Fx(i.e.)g FF(de\014ned)f(b)m(y\))i(the)f(setting)h(of)f(the)h(main)f
-(System)f(attribute.)0 2357 y(Eac)m(h)e(of)g(these)g
-Fx(qualifying)h(attributes)g FF(ma)m(y)-8 b(,)33 b(ho)m(w)m(ev)m(er,)g
-(b)s(e)e(assigned)h(an)f(explicit)i(v)-5 b(alue)32 b(so)g(as)g(to)g
-(select)h(a)0 2470 y(particular)27 b(co)s(ordinate)h(system.)40
-b(Note,)29 b(it)f(is)f(usually)g(b)s(est)g(to)h(assign)f(explicit)h(v)
--5 b(alues)28 b(whenev)m(er)f(p)s(ossible)0 2583 y(rather)f(than)g
-(relying)h(on)f(defaults.)40 b(A)m(ttribute)27 b(should)f(only)g(b)s(e)
-g(left)h(at)g(their)f(default)h(v)-5 b(alue)27 b(if)f(y)m(ou)h(\\don't)
-0 2696 y(care")33 b(what)f(v)-5 b(alue)33 b(is)f(used.)45
-b(In)32 b(certain)h(circumstances)f(\(particularly)-8
-b(,)34 b(when)e(aligning)h(t)m(w)m(o)g(F)-8 b(rames\),)34
-b(a)0 2809 y(default)f(v)-5 b(alue)33 b(for)g(an)f(attribute)i(ma)m(y)f
-(b)s(e)g(replaced)g(b)m(y)f(the)h(v)-5 b(alue)34 b(from)e(another)h
-(similar)g(F)-8 b(rame.)49 b(Suc)m(h)0 2922 y(v)-5 b(alue)31
-b(replacemen)m(t)h(can)e(b)s(e)g(prev)m(en)m(ted)h(b)m(y)f(assigning)h
-(an)f(explicit)i(v)-5 b(alue)31 b(to)g(the)f(attribute,)i(rather)e
-(than)0 3034 y(simply)g(relying)h(on)f(the)g(default.)0
-3197 y(The)g(main)g(TimeF)-8 b(rame)32 b(attributes)e(whic)m(h)h
-(qualify)f(the)h(System)f(attribute)h(are:)227 3460 y
-FD(TimeScale)427 3572 y FF(This)f(sp)s(eci\014es)g(the)g(time)i(scale.)
-227 3719 y FD(L)-9 b(TO\013set)427 3831 y FF(This)32
-b(sp)s(eci\014es)g(the)h(o\013set)g(from)f(Lo)s(cal)h(Time)g(to)g(UTC)f
-(in)g(hours)f(\(time)j(zones)f(east)g(of)427 3944 y(Green)m(wic)m(h)c
-(ha)m(v)m(e)f(p)s(ositiv)m(e)h(v)-5 b(alues\).)40 b(Note,)30
-b(AST)c(uses)h(the)h(v)-5 b(alue)27 b(as)h(supplied)e(without)427
-4057 y(making)31 b(an)m(y)g(correction)g(for)g(da)m(yligh)m(t)h(sa)m
-(ving.)227 4203 y FD(TimeOrigin)427 4316 y FF(This)h(sp)s(eci\014es)g
-(the)g(zero)h(p)s(oin)m(t)g(from)e(whic)m(h)h(time)h(v)-5
-b(alues)34 b(are)g(measured,)f(within)g(the)427 4429
-y(system)39 b(sp)s(eci\014ed)e(b)m(y)h(the)h(System)f(attribute.)65
-b(Th)m(us,)39 b(a)g(v)-5 b(alue)39 b(ofzero)g(\(the)g(default\))427
-4542 y(indicates)g(that)g(time)g(v)-5 b(alues)38 b(represen)m(t)h
-(absolute)g(times.)64 b(Non-zero)40 b(v)-5 b(alues)38
-b(ma)m(y)h(b)s(e)427 4655 y(used)26 b(to)g(indicate)i(that)e(the)h
-(TimeF)-8 b(rame)27 b(represen)m(ts)f(elapsed)g(time)h(since)g(the)f
-(sp)s(eci\014ed)427 4768 y(origin.)0 5030 y(F)-8 b(or)32
-b(further)d(details)j(of)f(these)h(attributes)f(y)m(ou)h(should)e
-(consult)h(their)g(descriptions)g(in)f(App)s(endix)g(C)g(and)0
-5143 y(for)g(details)i(of)e(the)h(System)f(settings)i(for)e(whic)m(h)g
-(they)h(are)g(relev)-5 b(an)m(t,)32 b(see)f(the)g(description)f(of)h
-(the)g(System)0 5256 y(attribute)g(\(also)h(in)e(App)s(endix)e(C\).)0
-5419 y(Note)38 b(that)f(it)h(do)s(es)e(no)h(harm)f(to)h(assign)g(v)-5
-b(alues)37 b(to)h(qualifying)f(attributes)g(whic)m(h)g(are)g(not)g
-(relev)-5 b(an)m(t)38 b(to)0 5532 y(the)c(main)f(System)g(or)g
-(TimeScale)i(v)-5 b(alue.)50 b(An)m(y)34 b(suc)m(h)f(v)-5
-b(alues)33 b(are)h(stored,)h(but)e(are)g(not)h(used)f(unless)f(the)0
-5645 y(System)e(and/or)g(TimeScale)i(v)-5 b(alue)31 b(is)f(later)h(set)
-g(so)g(that)g(they)g(b)s(ecome)f(relev)-5 b(an)m(t.)p
-eop end
-%%Page: 101 111
-TeXDict begin 101 110 bop 3643 52 a FF(101)0 351 y Fz(11)135
-b(Comp)t(ound)44 b(F)-11 b(rames)45 b(\(CmpF)-11 b(rames\))0
-610 y FF(W)j(e)29 b(no)m(w)f(turn)f(to)i(a)f(rather)g(sp)s(ecial)g
-(form)g(of)g(Mapping,)h(the)f(CmpF)-8 b(rame.)39 b(The)28
-b(F)-8 b(rames)29 b(w)m(e)f(ha)m(v)m(e)h(consid-)0 723
-y(ered)k(so)h(far)f(ha)m(v)m(e)h(b)s(een)e(atomic,)k(in)d(the)h(sense)f
-(that)h(they)f(represen)m(t)g(pre-de\014ned)f(elemen)m(tary)j(ph)m
-(ysical)0 836 y(domains.)53 b(A)35 b(CmpF)-8 b(rame,)36
-b(ho)m(w)m(ev)m(er,)i(is)c(a)h(comp)s(ound)f(F)-8 b(rame.)54
-b(In)34 b(essence,)j(it)e(is)g(a)g(structure)f(for)h(con-)0
-949 y(taining)45 b(other)f(F)-8 b(rames)45 b(and)e(its)h(purp)s(ose)e
-(is)i(to)h(allo)m(w)h(those)e(F)-8 b(rames)45 b(to)f(w)m(ork)g
-(together)i(in)d(v)-5 b(arious)0 1062 y(com)m(binations)41
-b(while)f(app)s(earing)f(as)i(a)f(single)g(Ob)5 b(ject.)70
-b(A)40 b(CmpF)-8 b(rame's)39 b(b)s(eha)m(viour)h(is)g(therefore)g(not)0
-1175 y(pre-de\014ned,)29 b(but)h(is)g(determined)g(b)m(y)h(the)f(other)
-h(F)-8 b(rames)31 b(it)g(con)m(tains)g(\(its)g(\\comp)s(onen)m(t")h(F)
--8 b(rames\).)0 1342 y(As)44 b(with)f(comp)s(ound)f(Mappings,)48
-b(comp)s(ound)42 b(F)-8 b(rames)44 b(can)g(b)s(e)f(nested)h(within)f
-(eac)m(h)i(other,)j(forming)0 1455 y(arbitrarily)31 b(complex)g(F)-8
-b(rames.)0 1762 y Fw(11.1)112 b(Creating)38 b(a)g(CmpF)-9
-b(rame)0 1990 y FF(A)31 b(v)m(ery)h(common)g(use)f(for)g(a)g(CmpF)-8
-b(rame)32 b(within)e(astronom)m(y)i(is)g(to)g(represen)m(t)f(a)h(\\sp)s
-(ectral)g(cub)s(e".)43 b(This)0 2103 y(is)34 b(a)h(3-dimensional)h(F)-8
-b(rame)35 b(in)f(whic)m(h)g(one)h(of)f(the)h(axes)g(represen)m(ts)f(p)s
-(osition)h(within)f(a)h(sp)s(ectrum,)f(and)0 2216 y(the)40
-b(other)h(t)m(w)m(o)h(axes)e(represen)m(t)h(p)s(osition)f(on)g(the)h
-(sky)f(\(or)g(some)h(other)f(spatial)i(domain)e(suc)m(h)g(as)g(the)0
-2329 y(fo)s(cal)32 b(plane)g(of)g(a)f(telescop)s(e\).)46
-b(As)32 b(an)f(example,)i(w)m(e)f(create)h(suc)m(h)e(a)h(CmpF)-8
-b(rame)32 b(in)f(whic)m(h)g(axes)h(1)g(and)f(2)0 2442
-y(represen)m(t)e(Righ)m(t)h(Ascension)g(and)e(Declination)k(\(ICRS\),)d
-(and)f(axis)i(3)g(represen)m(ts)f(w)m(a)m(v)m(elength)i(\(these)f(are)0
-2555 y(the)h(default)f(co)s(ordinate)h(Systems)f(represen)m(ted)h(b)m
-(y)f(a)h(SkyF)-8 b(rame)30 b(and)g(a)h(Sp)s(ecF)-8 b(rame)31
-b(resp)s(ectiv)m(ely\):)227 2817 y Ft(AstSkyFrame)39
-b(*skyframe;)227 2916 y(AstSpecFrame)g(*specframe;)227
-3016 y(AstCmpFrame)g(*cmpframe;)227 3116 y(...)227 3215
-y(skyframe)i(=)i(astSkyFrame\()38 b("")43 b(\);)227 3315
-y(specframe)d(=)j(astSpecFrame\()c("")j(\);)227 3414
-y(cmpframe)f(=)i(astCmpFrame\()38 b(skyframe,)i(specframe,)g("")i(\);)0
-3690 y FF(If)27 b(it)g(w)m(as)h(desired)e(to)i(mak)m(e)g(RA)f(and)g
-(Dec)h(corresp)s(ond)e(to)i(axes)f(1)h(and)e(3,)i(with)f(axis)h(2)f(b)s
-(eing)g(the)g(sp)s(ectral)0 3803 y(axis,)k(then)f(the)h(axes)g(of)f
-(the)h(CmpF)-8 b(rame)30 b(created)h(ab)s(o)m(v)m(e)h(w)m(ould)e(need)g
-(to)h(b)s(e)f(p)s(erm)m(uted)g(as)g(follo)m(ws:)227 4064
-y Ft(int)43 b(perm[)e(3)i(];)227 4164 y(...)227 4363
-y(perm[)f(0)h(])g(=)g(0;)227 4463 y(perm[)f(1)h(])g(=)g(2;)227
-4563 y(perm[)f(2)h(])g(=)g(1;)227 4662 y(astPermAxes\()c(cmpframe,)h
-(perm)i(\);)0 4970 y Fw(11.2)112 b(The)38 b(A)m(ttributes)e(of)i(a)g
-(CmpF)-9 b(rame)0 5198 y FF(A)45 b(CmpF)-8 b(rame)44
-b Fx(is)h(a)52 b FF(F)-8 b(rame)45 b(and)f(so)h(has)f(all)h(the)g
-(attributes)g(of)g(a)f(F)-8 b(rame.)84 b(The)44 b(default)h(v)-5
-b(alue)45 b(for)0 5311 y(the)e(Domain)g(attribute)g(for)g(a)g(CmpF)-8
-b(rame)42 b(is)g(formed)g(b)m(y)h(concatenating)i(the)e(Domains)g(of)f
-(the)h(t)m(w)m(o)0 5423 y(comp)s(onen)m(t)25 b(F)-8 b(rames,)27
-b(separated)f(b)m(y)f(a)g(min)m(us)f(sign)h(\(\\-"\).)2048
-5390 y Fv(17)2164 5423 y FF(The)f(\(\014xed\))h(v)-5
-b(alue)26 b(for)f(its)g(System)g(attribute)p 0 5516 1512
-4 v 73 5570 a Fs(17)138 5602 y Fr(If)32 b(b)r(oth)f(comp)r(onen)n(t)g
-(F)-6 b(rames)32 b(ha)n(v)n(e)e(blank)h(Domains,)j(then)c(the)h
-(default)h(Domain)g(for)g(the)f(CmpF)-6 b(rame)31 b(is)h(the)f(string)0
-5693 y(\\CMP".)p eop end
-%%Page: 102 112
-TeXDict begin 102 111 bop 0 52 a FF(102)1782 b Fy(11)92
-b(COMPOUND)30 b(FRAMES)h(\(CMPFRAMES\))0 351 y FF(is)f(\\Comp)s(ound".)
-645 318 y Fv(18)759 351 y FF(A)h(CmpF)-8 b(rame)30 b(has)g(no)g
-(further)f(attributes)i(o)m(v)m(er)g(and)f(ab)s(o)m(v)m(e)h(those)g
-(common)g(to)g(all)0 464 y(F)-8 b(rames.)74 b(Ho)m(w)m(ev)m(er,)46
-b(attributes)c(of)g(the)f(t)m(w)m(o)i(comp)s(onen)m(t)e(F)-8
-b(rames)42 b(can)g(b)s(e)e(accessed)j(as)e(if)h(they)f(w)m(ere)0
-577 y(attributes)31 b(of)f(the)h(CmpF)-8 b(rame,)31 b(as)f(describ)s
-(ed)f(b)s(elo)m(w.)0 740 y(F)-8 b(rame)28 b(attributes)g(whic)m(h)g
-(are)f(sp)s(eci\014c)h(to)g(individual)f(axes)h(\(suc)m(h)f(as)h(Lab)s
-(el\(2\),)h(F)-8 b(ormat\(1\),)31 b Fx(etc)5 b FF(\))28
-b(simply)0 853 y(mirror)40 b(the)h(corresp)s(onding)f(axes)h(of)h(the)f
-(relev)-5 b(an)m(t)42 b(comp)s(onen)m(t)f(F)-8 b(rame.)73
-b(That)41 b(is,)j(if)c(the)h(\\Lab)s(el\(2\)")0 966 y(attribute)h(of)g
-(a)f(CmpF)-8 b(rame)41 b(is)h(accessed,)j(the)d(CmpF)-8
-b(rame)41 b(will)h(forw)m(ard)f(the)g(access)i(request)e(to)h(the)0
-1079 y(comp)s(onen)m(t)c(F)-8 b(rame)39 b(whic)m(h)f(con)m(tains)h
-(axis)g(2.)64 b(Th)m(us,)40 b(default)e(v)-5 b(alues)38
-b(for)g(axis)h(attributes)f(will)h(b)s(e)e(the)0 1191
-y(same)31 b(as)f(those)h(pro)m(vided)f(b)m(y)h(the)f(comp)s(onen)m(t)h
-(F)-8 b(rames.)0 1354 y(An)44 b(axis)g(index)g(can)g(optionally)i(b)s
-(e)d(app)s(ended)f(to)j(the)g(name)f(of)g(F)-8 b(rames)45
-b(attributes)f(whic)m(h)g(do)g(not)0 1467 y(normally)36
-b(ha)m(v)m(e)h(suc)m(h)e(an)h(index)f(\(System,)i(Domain,)h(Ep)s(o)s(c)
-m(h,)f(Title,)h Fx(etc)5 b FF(\).)57 b(If)35 b(this)h(is)f(done,)i(the)
-f(access)0 1580 y(request)e(is)f(forw)m(arded)g(to)h(the)g(comp)s(onen)
-m(t)g(F)-8 b(rame)34 b(con)m(taining)h(the)f(indicated)g(axis.)51
-b(F)-8 b(or)34 b(instance,)i(if)d(a)0 1693 y(CmpF)-8
-b(rame)35 b(con)m(tains)i(a)f(Sp)s(ecF)-8 b(rame)36 b(and)f(a)h(SkyF)-8
-b(rame)36 b(in)f(that)h(order,)h(and)e(the)g(axes)i(ha)m(v)m(e)f(not)g
-(b)s(een)0 1806 y(p)s(erm)m(uted,)31 b(then)g(getting)i(the)f(v)-5
-b(alue)31 b(of)h(attribute)g(\\System")g(will)g(return)e(\\Comp)s
-(ound")g(as)i(men)m(tioned)0 1919 y(ab)s(o)m(v)m(e)38
-b(\(that)g(is,)i(the)d(System)g(v)-5 b(alue)37 b(of)h(the)f(CmpF)-8
-b(rame)37 b(as)g(a)h(whole\),)i(whereas)d(getting)h(the)g(v)-5
-b(alue)37 b(of)0 2032 y(attribute)29 b(\\System\(1\)")h(will)f(return)e
-(\\Sp)s(ectral"\(that)j(is,)f(the)f(System)g(v)-5 b(alue)29
-b(of)g(the)f(comp)s(onen)m(t)h(F)-8 b(rame)0 2145 y(con)m(taining)32
-b(axis)f(1)g(|)f(the)g(Sp)s(ecF)-8 b(rame\).)0 2307 y(This)31
-b(tec)m(hnique)i(is)f(not)g(limited)g(to)h(attributes)f(common)h(to)f
-(all)h(F)-8 b(rames.)46 b(F)-8 b(or)33 b(instance,)g(the)f(SkyF)-8
-b(rame)0 2420 y(class)31 b(de\014nes)f(an)h(attribute)g(called)h
-(Equino)m(x)e(whic)m(h)g(is)h(not)g(held)f(b)m(y)h(other)f(classes)i
-(of)f(F)-8 b(rames.)42 b(T)-8 b(o)31 b(set)g(a)0 2533
-y(v)-5 b(alue)29 b(for)g(the)f(Equino)m(x)h(attribute)g(of)g(the)g
-(SkyF)-8 b(rame)29 b(con)m(tained)h(within)e(the)h(ab)s(o)m(v)m(e)h
-(CmpF)-8 b(rame,)29 b(assign)0 2646 y(the)37 b(v)-5 b(alue)38
-b(to)g(the)f(\\Equino)m(x\(2\)")j(attribute)e(of)f(the)g(CmpF)-8
-b(rame.)62 b(Since)37 b(the)g(SkyF)-8 b(rame)38 b(de\014nes)e(b)s(oth)0
-2759 y(axes)e(2)h(and)e(3)h(of)g(the)g(CmpF)-8 b(rame,)35
-b(w)m(e)f(could)g(equiv)-5 b(alen)m(tly)35 b(ha)m(v)m(e)g(set)f(a)h(v)
--5 b(alue)34 b(for)f(\\Equino)m(x\(3\)")j(since)0 2872
-y(this)30 b(w)m(ould)g(also)i(result)e(in)g(the)h(attribute)g(access)g
-(b)s(eing)f(forw)m(arded)g(to)h(the)g(SkyF)-8 b(rame.)0
-3035 y(Finally)g(,)48 b(if)43 b(an)f(attribute)i(is)f(not)g
-(quali\014ed)g(b)m(y)g(a)g(axis)h(index,)h(attempts)f(will)g(b)s(e)e
-(made)h(to)h(access)g(it)0 3147 y(using)31 b(eac)m(h)h(of)f(the)h(CmpF)
--8 b(rame)31 b(axes)h(in)e(turn.)42 b(Using)32 b(the)f(ab)s(o)m(v)m(e)i
-(example)e(of)h(the)f(sp)s(ectral)h(cub)s(e,)e(if)i(an)0
-3260 y(attempt)25 b(w)m(as)g(made)f(to)h(get)h(the)e(v)-5
-b(alue)25 b(of)f(attribute)h(\\Equino)m(x")h(\(with)e(no)g(axis)h
-(index\),)g(eac)m(h)h(axis)f(in)f(turn)0 3373 y(w)m(ould)30
-b(b)s(e)f(used.)40 b(Since)30 b(axis)h(1)f(is)g(con)m(tained)h(within)f
-(a)g(Sp)s(ecF)-8 b(rame,)31 b(the)f(\014rst)f(attempt)j(w)m(ould)d
-(fail)i(since)0 3486 y(the)i(Sp)s(ecF)-8 b(rame)34 b(class)g(do)s(es)e
-(not)i(ha)m(v)m(e)g(an)f(Equino)m(x)g(attribute.)50 b(Ho)m(w)m(ev)m
-(er,)36 b(the)d(second)g(attempt)i(w)m(ould)0 3599 y(succeed)e(b)s
-(ecause)f(axis)h(2)g(is)g(con)m(tained)g(within)f(a)h(SkyF)-8
-b(rame)33 b(whic)m(h)f Fx(do)-5 b(es)41 b FF(ha)m(v)m(e)34
-b(an)e(Equino)m(x)g(attribute.)0 3712 y(Th)m(us)h(the)i(returned)e
-(attribute)i(v)-5 b(alue)35 b(w)m(ould)f(b)s(e)f(that)i(obtained)g
-(from)f(the)g(SkyF)-8 b(rame)35 b(con)m(taining)h(axis)0
-3825 y(2.)k(When)27 b(getting)i(or)f(testing)g(an)g(attribute)g(v)-5
-b(alue,)28 b(the)g(returned)e(v)-5 b(alue)28 b(is)f(determined)g(b)m(y)
-h(the)f Fx(\014rst)37 b FF(axis)0 3938 y(whic)m(h)32
-b(recognises)i(the)f(attribute.)48 b(When)33 b(setting)g(an)g
-(attribute)g(v)-5 b(alue,)34 b Fx(al)5 b(l)43 b FF(axes)33
-b(whic)m(h)f(recognises)i(the)0 4051 y(attribute)g(ha)m(v)m(e)g(the)g
-(attribute)g(v)-5 b(alue)33 b(set)h(to)g(the)g(giv)m(en)g(v)-5
-b(alue.)50 b(Lik)m(ewise,)35 b(when)d(clearing)j(an)e(attribute)0
-4164 y(v)-5 b(alue,)31 b(all)g(axes)g(whic)m(h)f(recognises)i(the)f
-(attribute)g(ha)m(v)m(e)g(the)g(attribute)g(v)-5 b(alue)31
-b(cleared.)p 0 5607 1512 4 v 73 5661 a Fs(18)138 5693
-y Fr(An)n(y)24 b(attempt)i(to)g(c)n(hange)g(the)f(System)g(v)l(alue)g
-(of)i(a)f(CmpF)-6 b(rame)26 b(is)g(ignored.)p eop end
-%%Page: 103 113
-TeXDict begin 103 112 bop 3643 52 a FF(103)0 351 y Fz(12)135
-b(An)44 b(In)l(tro)t(duction)h(to)g(Co)t(ordinate)h(System)g(Con)l(v)l
-(ersions)0 616 y FF(In)20 b(this)i(section,)i(w)m(e)e(start)f(to)h(lo)s
-(ok)g(at)g(tec)m(hniques)g(for)f(con)m(v)m(erting)i(b)s(et)m(w)m(een)f
-(di\013eren)m(t)f(co)s(ordinate)h(systems.)0 729 y(A)m(t)37
-b(this)f(stage,)j(the)e(to)s(ols)g(w)m(e)f(ha)m(v)m(e)i(a)m(v)-5
-b(ailable)38 b(are)f(F)-8 b(rames)36 b(\()p Fu(x)p FF(7\),)k(SkyF)-8
-b(rames)36 b(\()p Fu(x)p FF(8\),)j(Sp)s(ecF)-8 b(rames)37
-b(\()p Fu(x)p FF(9\),)0 842 y(TimeF)-8 b(rames)22 b(\()p
-Fu(x)p FF(10\))h(and)d(v)-5 b(arious)21 b(Mappings)g(\()p
-Fu(x)p FF(5\).)39 b(These)21 b(are)g(su\016cien)m(t)h(to)g(allo)m(w)g
-(us)f(to)g(b)s(egin)g(examining)0 955 y(the)31 b(problem,)f(but)f(more)
-i(sophisticated)g(approac)m(hes)g(will)g(also)g(emerge)h(later)f(\()p
-Fu(x)p FF(14.2\).)0 1276 y Fw(12.1)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(Celestial)g(Co)s(ordinate)g(Systems)0
-1510 y FF(W)-8 b(e)39 b(b)s(egin)e(b)m(y)h(examining)g(ho)m(w)g(to)h
-(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(t)m(w)m(o)g(celestial)h(co)s
-(ordinate)f(systems)e(represen)m(ted)0 1623 y(b)m(y)32
-b(SkyF)-8 b(rames,)33 b(as)g(this)f(is)g(b)s(oth)g(an)g(illuminating)h
-(and)e(practical)j(example.)47 b(Consider)31 b(the)i(problem)e(of)0
-1736 y(con)m(v)m(erting)h(celestial)h(co)s(ordinates)e(b)s(et)m(w)m
-(een:)111 2023 y(1.)46 b(The)24 b(old)h(FK4)g(system,)h(with)e(no)h(E)f
-(terms,)i(a)f(Besselian)h(ep)s(o)s(c)m(h)e(of)h(1958.0)i(and)d(a)h
-(Besselian)h(equino)m(x)227 2136 y(of)31 b(1960.0.)111
-2340 y(2.)46 b(An)40 b(ecliptic)i(co)s(ordinate)g(system)e(based)g(on)g
-(the)h(mean)f(equino)m(x)h(and)f(ecliptic)i(of)f(Julian)f(ep)s(o)s(c)m
-(h)227 2453 y(2010.5.)0 2740 y(This)24 b(example)h(is)f(arbitrary)g
-(but)g(not)h(completely)h(unrealistic.)39 b(Unless)25
-b(y)m(ou)f(already)h(ha)m(v)m(e)h(exp)s(ertise)f(with)0
-2853 y(suc)m(h)30 b(con)m(v)m(ersions,)i(y)m(ou)f(are)f(unlik)m(ely)h
-(to)g(\014nd)e(it)i(straigh)m(tforw)m(ard.)0 3024 y(Using)43
-b(AST,)g(w)m(e)h(b)s(egin)e(b)m(y)h(creating)i(t)m(w)m(o)f(SkyF)-8
-b(rames)44 b(to)g(represen)m(t)f(these)h(co)s(ordinate)g(systems,)i(as)
-0 3137 y(follo)m(ws:)227 3411 y Ft(#include)41 b("ast.h")227
-3511 y(AstSkyFrame)e(*skyframe1,)g(*skyframe2;)227 3710
-y(...)227 3910 y(skyframe1)h(=)j(astSkyFrame\()c("System=FK4-NO-E)o(,)e
-(Epoch=B1958,)i(Equinox=B1960")f(\);)227 4009 y(skyframe2)i(=)j
-(astSkyFrame\()c("System=Ecliptic)o(,)e(Equinox=J2010.5")g(\);)0
-4297 y FF(Note)30 b(ho)m(w)f(sp)s(ecifying)f(the)h(co)s(ordinate)h
-(systems)f(consists)g(simply)f(of)h(initialising)h(the)f(attributes)g
-(of)g(eac)m(h)0 4409 y(SkyF)-8 b(rame)27 b(appropriately)-8
-b(.)40 b(The)26 b(next)h(step)f(is)h(to)g(\014nd)e(a)i(w)m(a)m(y)g(of)g
-(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(these)g(SkyF)-8
-b(rames.)0 4522 y(This)30 b(is)g(done)g(using)g(astCon)m(v)m(ert,)i(as)
-f(follo)m(ws:)227 4796 y Ft(AstFrameSet)39 b(*cvt;)227
-4996 y(...)227 5195 y(cvt)k(=)g(astConvert\()c(skyframe1,)g(skyframe2,)
-h("")i(\);)227 5295 y(if)h(\()g(cvt)g(==)f(AST__NULL)e(\))j({)358
-5394 y(<conversion)c(is)k(not)f(possible>)227 5494 y(})h(else)f({)358
-5593 y(<conversion)d(is)k(possible>)227 5693 y(})p eop
-end
-%%Page: 104 114
-TeXDict begin 104 113 bop 0 52 a FF(104)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FF(The)h(third)f(argumen)m(t)i(of)g
-(astCon)m(v)m(ert)h(is)e(not)h(used)e(here)h(and)g(should)g(b)s(e)f(an)
-i(empt)m(y)f(string.)0 511 y(astCon)m(v)m(ert)45 b(will)e(return)f(a)h
-(n)m(ull)g(result,)j(AST)p Fq(__)p FF(NULL)c(\(as)i(de\014ned)e(in)g
-(the)i(\\ast.h")g(header)f(\014le\),)j(if)0 624 y(con)m(v)m(ersion)32
-b(is)f(not)g(p)s(ossible.)42 b(In)31 b(this)f(example,)i(con)m(v)m
-(ersion)h(is)e(p)s(ossible,)g(so)g(it)g(will)h(return)d(a)j(p)s(oin)m
-(ter)f(to)0 736 y(a)g(new)f(Ob)5 b(ject)30 b(that)h(describ)s(es)f(the)
-g(con)m(v)m(ersion.)0 896 y(The)g(Ob)5 b(ject)31 b(returned)f(is)h
-(called)h(a)f(F)-8 b(rameSet.)43 b(W)-8 b(e)32 b(ha)m(v)m(e)h(not)e
-(discussed)f(F)-8 b(rameSets)31 b(y)m(et)h(\()p Fu(x)p
-FF(13\),)i(but)c(for)0 1009 y(the)25 b(presen)m(t)h(purp)s(oses)d(w)m
-(e)j(can)f(consider)h(them)f(simply)g(as)g(Ob)5 b(jects)25
-b(that)h(can)g(b)s(eha)m(v)m(e)g(b)s(oth)e(as)i(Mappings)0
-1122 y(and)k(as)g(F)-8 b(rames.)42 b(It)30 b(is)g(the)g(F)-8
-b(rameSet's)32 b(b)s(eha)m(viour)e(as)g(a)h(Mapping)f(in)g(whic)m(h)g
-(w)m(e)g(are)h(mainly)f(in)m(terested)0 1235 y(here,)d(b)s(ecause)g
-(the)f(Mapping)h(it)g(implemen)m(ts)g(is)f(the)h(one)f(w)m(e)h
-(require|)p Fx(i.e.)f FF(it)h(con)m(v)m(erts)g(b)s(et)m(w)m(een)h(the)e
-(t)m(w)m(o)0 1347 y(celestial)33 b(co)s(ordinate)e(systems)g(\()p
-Fu(x)p FF(14.1\).)0 1507 y(F)-8 b(or)32 b(example,)h(if)f(\\alpha1")g
-(and)f(\\delta1")j(are)e(t)m(w)m(o)h(arra)m(ys)f(con)m(taining)h(the)f
-(longitude)g(and)f(latitude,)i(in)0 1620 y(radians,)24
-b(of)e(N)h(p)s(oin)m(ts)f(on)h(the)f(sky)h(in)f(the)g(original)i(co)s
-(ordinate)f(system)g(\(corresp)s(onding)f(to)h(\\skyframe1"\),)0
-1733 y(then)32 b(they)h(could)g(b)s(e)e(con)m(v)m(erted)k(in)m(to)e
-(the)g(new)f(co)s(ordinate)h(system)g(\(represen)m(ted)g(b)m(y)f
-(\\skyframe2"\))i(as)0 1846 y(follo)m(ws:)227 2081 y
-Ft(#define)41 b(N)i(10)227 2181 y(double)e(alpha1[)g(N)i(],)g(delta1[)e
-(N)i(];)227 2280 y(double)e(alpha2[)g(N)i(],)g(delta2[)e(N)i(];)227
-2480 y(...)227 2679 y(astTran2\()d(cvt,)i(N,)h(alpha1,)e(delta1,)f(1,)j
-(alpha2,)e(delta2)g(\);)0 2928 y FF(The)32 b(new)h(co)s(ordinates)g
-(are)h(returned)e Fx(via)h FF(the)g(\\alpha2")h(and)e(\\delta2")k(arra)
-m(ys.)48 b(T)-8 b(o)34 b(transform)e(co)s(ordi-)0 3041
-y(nates)c(in)f(the)g(opp)s(osite)h(direction,)h(w)m(e)e(simply)g(in)m
-(v)m(ert)i(the)e(5th)h(\(b)s(o)s(olean)f(in)m(t\))i(argumen)m(t)e(to)h
-(astT)-8 b(ran2,)29 b(as)0 3154 y(follo)m(ws:)227 3389
-y Ft(astTran2\()40 b(cvt,)i(N,)h(alpha2,)e(delta2,)f(0,)j(alpha1,)e
-(delta1)g(\);)0 3638 y FF(The)33 b(F)-8 b(rameSet)34
-b(returned)f(b)m(y)g(astCon)m(v)m(ert)i(also)f(con)m(tains)g
-(information)g(ab)s(out)f(the)h(SkyF)-8 b(rames)33 b(used)g(in)0
-3751 y(the)k(con)m(v)m(ersion)h(\()p Fu(x)p FF(14.1\).)64
-b(As)36 b(w)m(e)i(men)m(tioned)f(ab)s(o)m(v)m(e,)j(a)e(F)-8
-b(rameSet)38 b(ma)m(y)g(b)s(e)e(used)g(as)h(a)h(F)-8
-b(rame)37 b(and)g(in)0 3864 y(this)30 b(case)h(it)f(b)s(eha)m(v)m(es)g
-(lik)m(e)h(the)f(\\destination")i(F)-8 b(rame)31 b(used)e(in)g(the)h
-(con)m(v)m(ersion)h(\()p Fx(i.e.)f FF(lik)m(e)h(\\skyframe2"\).)0
-3977 y(W)-8 b(e)33 b(could)g(therefore)f(use)g(the)h(\\cvt")h(F)-8
-b(rameSet)33 b(to)g(calculate)i(the)d(distance)h(b)s(et)m(w)m(een)g(t)m
-(w)m(o)g(p)s(oin)m(ts)f(\(with)0 4090 y(co)s(ordinates)f(in)f
-(radians\))g(in)g(the)h(destination)g(co)s(ordinate)g(system,)g(using)f
-(astDistance:)227 4325 y Ft(double)41 b(distance,)f(point1[)h(2)i(],)g
-(point2[)e(2)i(];)227 4524 y(...)227 4724 y(distance)e(=)i
-(astDistance\()38 b(cvt,)k(point1,)f(point2)g(\);)0 4973
-y FF(and)30 b(the)g(result)h(w)m(ould)f(b)s(e)g(the)g(same)h(as)f(if)h
-(the)f(\\skyframe2")i(SkyF)-8 b(rame)31 b(had)e(b)s(een)h(used.)0
-5132 y(Another)35 b(w)m(a)m(y)i(to)f(see)g(ho)m(w)f(the)h(F)-8
-b(rameSet)37 b(pro)s(duced)c(b)m(y)j(astCon)m(v)m(ert)h(retains)e
-(information)h(ab)s(out)f(the)0 5245 y(co)s(ordinate)29
-b(systems)g(in)m(v)m(olv)m(ed)h(is)f(to)g(set)g(its)g(Rep)s(ort)f
-(attribute)i(\(inherited)e(from)g(the)h(Mapping)g(class\))g(so)0
-5358 y(that)i(it)g(displa)m(ys)f(the)h(co)s(ordinates)g(b)s(efore)f
-(and)g(after)h(con)m(v)m(ersion)g(\()p Fu(x)p FF(4.8\):)227
-5593 y Ft(astSet\()41 b(cvt,)h("Report=1")d(\);)227 5693
-y(astTran2\()h(cvt,)i(N,)h(alpha1,)e(delta1,)f(1,)j(alpha2,)e(delta2)g
-(\);)p eop end
-%%Page: 105 115
-TeXDict begin 105 114 bop 0 52 a Fy(12.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Sp)s(ectral)f(Co)s(ordinate)h(Systems)1421
-b FF(105)0 351 y(The)30 b(output)g(from)g(this)g(migh)m(t)h(lo)s(ok)g
-(lik)m(e)h(the)e(follo)m(wing:)227 618 y Fq(\(2:06:03.0,)45
-b(34:22:39\))g(-->)i(\(42.1087,)e(20.2717\))227 731 y(\(2:08:20.6,)g
-(35:31:24\))g(-->)i(\(43.0197,)e(21.1705\))227 844 y(\(2:10:38.1,)g
-(36:40:09\))g(-->)i(\(43.9295,)e(22.0716\))227 957 y(\(2:12:55.6,)g
-(37:48:55\))g(-->)i(\(44.8382,)e(22.9753\))227 1070 y(\(2:15:13.1,)g
-(38:57:40\))g(-->)i(\(45.7459,)e(23.8814\))227 1183 y(\(2:17:30.6,)g
-(40:06:25\))g(-->)i(\(46.6528,)e(24.7901\))227 1296 y(\(2:19:48.1,)g
-(41:15:11\))g(-->)i(\(47.5589,)e(25.7013\))227 1409 y(\(2:22:05.6,)g
-(42:23:56\))g(-->)i(\(48.4644,)e(26.6149\))227 1522 y(\(2:24:23.1,)g
-(43:32:41\))g(-->)i(\(49.3695,)e(27.5311\))227 1635 y(\(2:26:40.6,)g
-(44:41:27\))g(-->)i(\(50.2742,)e(28.4499\))0 1902 y FF(Here,)i(w)m(e)d
-(see)g(that)g(the)g(input)e(FK4)i(equatorial)h(co)s(ordinate)f(v)-5
-b(alues)44 b(\(giv)m(en)g(in)f(radians\))h(ha)m(v)m(e)g(b)s(een)0
-2015 y(formatted)24 b(automatically)i(in)e(sexagesimal)h(notation)g
-(using)e(the)h(con)m(v)m(en)m(tional)i(hours)c(for)i(righ)m(t)g
-(ascension)0 2128 y(and)35 b(degrees)i(for)f(declination.)58
-b(Con)m(v)m(ersely)-8 b(,)39 b(the)d(output)g(ecliptic)i(co)s
-(ordinates)e(are)h(sho)m(wn)e(in)g(decimal)0 2241 y(degrees,)25
-b(as)f(is)f(con)m(v)m(en)m(tional)j(for)d(ecliptic)i(co)s(ordinates.)39
-b(Both)24 b(are)f(displa)m(y)m(ed)h(using)f(the)g(default)g(precision)0
-2354 y(of)31 b(7)f(digits.)421 2321 y Fv(19)0 2518 y
-FF(In)j(fact,)j(the)e(\\cvt")i(F)-8 b(rameSet)35 b(has)f(access)h(to)g
-(all)f(the)g(information)h(in)e(the)h(original)i(SkyF)-8
-b(rames)34 b(whic)m(h)0 2631 y(w)m(ere)g(passed)f(to)h(astCon)m(v)m
-(ert.)51 b(If)33 b(y)m(ou)g(had)g(set)h(a)g(new)e(Digits)j(attribute)f
-(v)-5 b(alue)34 b(for)f(either)h(of)f(these,)i(the)0
-2744 y(formatting)f(ab)s(o)m(v)m(e)g(w)m(ould)f(re\015ect)h(the)f
-(di\013eren)m(t)h(precision)f(y)m(ou)h(requested)f(b)m(y)g(displa)m
-(ying)h(a)f(greater)h(or)0 2857 y(smaller)d(n)m(um)m(b)s(er)e(of)h
-(digits.)0 3155 y Fw(12.2)112 b(Con)m(v)m(erting)38 b(b)s(et)m(w)m(een)
-g(Sp)s(ectral)f(Co)s(ordinate)i(Systems)0 3379 y FF(The)44
-b(principles)h(describ)s(ed)e(in)i(the)g(previous)f(section)i(for)f
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(celestial)j(co)s(ordinate)0
-3492 y(systems)21 b(also)h(apply)f(to)h(the)f(task)h(of)f(con)m(v)m
-(erting)i(b)s(et)m(w)m(een)f(sp)s(ectral)g(co)s(ordinate)g(systems.)37
-b(As)21 b(an)h(example,)0 3605 y(let's)28 b(lo)s(ok)f(at)h(ho)m(w)f(w)m
-(e)g(migh)m(t)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)g(frequency)e
-(measured)g(in)h Fo(GH)7 b(z)31 b FF(as)c(measured)g(in)f(the)h(rest)0
-3718 y(frame)22 b(of)g(the)g(telescop)s(e,)j(and)c(radio)h(v)m(elo)s
-(cit)m(y)i(measured)d(in)h Fo(k)s(m=s)g FF(measured)f(with)g(resp)s
-(ect)h(the)g(kinematic)0 3831 y(Lo)s(cal)31 b(Standard)e(of)i(Rest.)0
-3995 y(First)i(w)m(e)g(create)h(a)f(default)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(then)h(set)g(its)g(attributes)g(to)g(describ)s(e)g
-(the)f(required)g(radio)0 4108 y(v)m(elo)s(cit)m(y)d(system)e(\(this)g
-(is)g(sligh)m(tly)h(more)f(con)m(v)m(enien)m(t,)j(giv)m(en)e(the)f
-(relativ)m(ely)i(large)f(n)m(um)m(b)s(er)e(of)h(attributes,)0
-4221 y(than)g(sp)s(ecifying)f(the)i(attribute)f(v)-5
-b(alues)28 b(in)e(a)i(single)f(string)g(suc)m(h)g(as)g(w)m(ould)g(b)s
-(e)f(passed)g(to)i(the)f(Sp)s(ecF)-8 b(rame)0 4334 y(constructor\).)49
-b(W)-8 b(e)34 b(then)f(tak)m(e)h(a)f(cop)m(y)h(of)f(this)g(Sp)s(ecF)-8
-b(rame,)34 b(and)e(c)m(hange)i(the)f(attribute)h(v)-5
-b(alues)33 b(so)g(that)0 4447 y(the)d(cop)m(y)g(describ)s(es)f(the)h
-(original)h(frequency)e(system)h(\(mo)s(difying)f(a)i(cop)m(y)-8
-b(,)31 b(rather)e(than)h(creating)h(a)f(new)0 4560 y(Sp)s(ecF)-8
-b(rame)32 b(from)g(scratc)m(h,)h(a)m(v)m(oids)h(the)e(need)g(to)h(sp)s
-(ecify)e(the)h(ep)s(o)s(c)m(h,)h(reference)f(p)s(osition,)h
-Fx(etc)k FF(a)32 b(second)0 4673 y(time)f(since)g(they)f(are)h(all)g
-(inherited)f(b)m(y)h(the)f(cop)m(y\):)227 4927 y Ft(#include)41
-b("ast.h")227 5026 y(AstSpecFrame)e(*specframe1,)g(*specframe2;)227
-5225 y(...)227 5425 y(specframe1)h(=)j(astSpecFrame\()38
-b("")43 b(\);)227 5524 y(astSet\()e(specframe1,)e("System=vradio")e
-(\);)p 0 5607 1512 4 v 73 5661 a Fs(19)138 5693 y Fr(The)26
-b(leading)h(digit)f(is)g(zero)g(and)g(is)g(therefore)g(not)g(seen)g(in)
-f(this)h(particular)h(example.)p eop end
-%%Page: 106 116
-TeXDict begin 106 115 bop 0 52 a FF(106)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)227 351 y Ft(astSet\()41 b(specframe1,)e
-("Unit=km/s")g(\);)227 451 y(astSet\()i(specframe1,)e("Epoch=1996-Oct-)
-o(2)f(12:13:56.985")g(\);)227 551 y(astSet\()j(specframe1,)e
-("ObsLon=W155:28:)o(18")e(\);)227 650 y(astSet\()k(specframe1,)e
-("ObsLat=N19:49:3)o(4")e(\);)227 750 y(astSet\()k(specframe1,)e
-("RefRA=18:14:50.)o(6")e(\);)227 849 y(astSet\()k(specframe1,)e
-("RefDec=-4:40:49)o(")f(\);)227 949 y(astSet\()j(specframe1,)e
-("RestFreq=230.53)o(8)f(GHz")j(\);)227 1049 y(astSet\()g(specframe1,)e
-("StdOfRest=LSRK")e(\);)227 1248 y(specframe2)j(=)j(astCopy\()d
-(specframe1)g(\);)227 1348 y(astSet\()h(specframe1,)e("System=freq")f
-(\);)227 1447 y(astSet\()j(specframe1,)e("Unit=GHz")g(\);)227
-1547 y(astSet\()i(specframe1,)e("StdOfRest=Topoc)o(ent)o(ri)o(c")e(\);)
-0 1854 y FF(Note,)44 b(the)c(fact)h(that)f(a)h(Sp)s(ecF)-8
-b(rame)40 b(has)g(only)g(a)g(single)g(axis)h(means)f(that)g(w)m(e)h(w)m
-(ere)f(able)g(to)h(refer)f(to)0 1967 y(the)33 b(Unit)g(attribute)h
-(without)f(an)f(axis)i(index.)47 b(The)33 b(other)g(attributes)g(are:)
-46 b(the)33 b(time)h(of)f(of)g(observ)-5 b(ation)0 2080
-y(\(Ep)s(o)s(c)m(h\),)43 b(the)d(geographical)i(p)s(osition)e(of)h(the)
-f(telescop)s(e)i(\(ObsLat)e(&)g(ObsLon\),)h(the)g(p)s(osition)f(of)g
-(the)0 2193 y(source)c(on)f(the)h(sky)f(\(RefRA)h(&)f(RefDec\),)k(the)c
-(rest)h(frequency)f(\(RestF)-8 b(req\))37 b(and)e(the)h(standard)f(of)g
-(rest)0 2306 y(\(StdOfRest\).)0 2455 y(The)24 b(next)h(step)g(is)f(to)i
-(\014nd)d(a)i(w)m(a)m(y)g(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)g
-(these)f(Sp)s(ecF)-8 b(rames.)39 b(W)-8 b(e)26 b(use)e(exactly)i(the)f
-(same)0 2568 y(co)s(de)30 b(that)h(w)m(e)f(did)f(in)h(the)g(previous)f
-(section)j(where)d(w)m(e)h(w)m(ere)h(con)m(v)m(erting)h(b)s(et)m(w)m
-(een)e(celestial)j(co)s(ordinate)0 2681 y(systems:)227
-2875 y Ft(AstFrameSet)39 b(*cvt;)227 3074 y(...)227 3274
-y(cvt)k(=)g(astConvert\()c(specframe1,)g(specframe2,)g("")k(\);)227
-3373 y(if)g(\()g(cvt)g(==)f(AST__NULL)e(\))j({)358 3473
-y(<conversion)c(is)k(not)f(possible>)227 3572 y(})h(else)f({)358
-3672 y(<conversion)d(is)k(possible>)227 3772 y(})0 3979
-y FF(A)29 b(b)s(efore,)h(this)f(will)h(giv)m(e)h(us)d(a)i(F)-8
-b(rameSet)30 b(\(assuming)g(con)m(v)m(ersion)g(is)g(p)s(ossible,)f
-(whic)m(h)g(should)f(alw)m(a)m(ys)j(b)s(e)0 4092 y(the)36
-b(case)i(for)d(our)h(example\),)j(and)c(w)m(e)i(can)f(use)g(the)h(F)-8
-b(rameSet)37 b(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)e(the)h(t)m(w)m(o)
-g(sp)s(ectral)0 4205 y(co)s(ordinate)31 b(systems.)40
-b(W)-8 b(e)32 b(use)d(astT)-8 b(ran1)31 b(in)f(place)h(of)f(astT)-8
-b(ran2)31 b(since)f(a)g(Sp)s(ecF)-8 b(rame)31 b(has)f(only)g(one)g
-(axis)0 4318 y(\(unlik)m(e)h(a)g(SkyF)-8 b(rame)31 b(whic)m(h)f(has)g
-(t)m(w)m(o\).)0 4467 y(F)-8 b(or)44 b(example,)k(if)43
-b(\\frq")h(is)f(an)h(arra)m(y)g(con)m(taining)h(the)e(observ)m(ed)h
-(frequency)-8 b(,)47 b(in)c(GHz,)48 b(of)c(N)f(sp)s(ectral)0
-4580 y(c)m(hannels)f(\(describ)s(e)g(b)m(y)g(\\sp)s(ecframe1"\),)47
-b(then)41 b(they)i(could)f(b)s(e)f(con)m(v)m(erted)j(in)m(to)f(the)f
-(new)g(co)s(ordinate)0 4693 y(system)31 b(\(represen)m(ted)f(b)m(y)g
-(\\sp)s(ecframe2"\))i(as)f(follo)m(ws:)227 4888 y Ft(#define)41
-b(N)i(10)227 4987 y(double)e(frq[)h(N)h(];)227 5087 y(double)e(vel[)h
-(N)h(];)227 5286 y(...)227 5485 y(astTran1\()d(cvt,)i(N,)h(frq,)f(1,)h
-(vel)f(\);)0 5693 y FF(The)30 b(radio)g(v)m(elo)s(cit)m(y)j(v)-5
-b(alues)31 b(are)g(returned)e(in)h(the)h(\\v)m(el")h(arra)m(y)-8
-b(.)p eop end
-%%Page: 107 117
-TeXDict begin 107 116 bop 0 52 a Fy(12.3)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(Time)f(Co)s(ordinate)h(Systems)1540
-b FF(107)0 351 y Fw(12.3)112 b(Con)m(v)m(erting)38 b(b)s(et)m(w)m(een)g
-(Time)g(Co)s(ordinate)g(Systems)0 571 y FF(All)d(the)f(principles)f
-(outlined)h(in)g(the)g(previous)f(section)i(ab)s(out)f(aligning)h(sp)s
-(ectral)f(co)s(cordinate)h(systems)0 684 y(\(Sp)s(ecF)-8
-b(rames\))26 b(can)g(b)s(e)f(applied)g(directly)i(to)f(the)g(problem)e
-(of)i(aligning)h(time)f(co)s(ordinate)g(systems)g(\(Time-)0
-797 y(F)-8 b(rames\).)0 1088 y Fw(12.4)112 b(Handling)39
-b(SkyF)-9 b(rame)39 b(Axis)e(P)m(erm)m(utations)0 1307
-y FF(W)-8 b(e)25 b(can)e(illustrate)i(an)e(imp)s(ortan)m(t)h(p)s(oin)m
-(t)f(if)g(w)m(e)h(sw)m(ap)g(the)f(axis)h(order)f(of)g(either)h(SkyF)-8
-b(rame)24 b(in)f(the)h(example)0 1420 y(ab)s(o)m(v)m(e)33
-b(\()p Fu(x)p FF(12.1\))h(b)s(efore)d(iden)m(tifying)h(the)f(con)m(v)m
-(ersion.)45 b(Let's)32 b(assume)f(w)m(e)h(use)f(astP)m(ermAxes)i(\()p
-Fu(x)p FF(7.9\))g(to)g(do)0 1533 y(this)d(to)h(the)g(second)f(SkyF)-8
-b(rame,)31 b(b)s(efore)f(applying)h(astCon)m(v)m(ert,)h(as)e(follo)m
-(ws:)227 1776 y Ft(int)43 b(perm[)e(2)i(])g(=)h({)f(2,)g(1)g(};)227
-1975 y(...)227 2174 y(astPermAxes\()c(skyframe2,)g(perm)j(\);)227
-2274 y(cvt)h(=)g(astConvert\()c(skyframe1,)g(skyframe2,)h("")i(\);)0
-2530 y FF(No)m(w,)31 b(the)g(destination)g(SkyF)-8 b(rame)31
-b(system)f(no)h(longer)g(represen)m(ts)f(the)g(co)s(ordinate)i(system:)
-227 2785 y(\(ecliptic)h(longitude,)e(ecliptic)h(latitude\))0
-3041 y(but)e(instead)g(represen)m(ts)h(the)f(transp)s(osed)f(system:)
-227 3297 y(\(ecliptic)k(latitude,)e(ecliptic)i(longitude\))0
-3553 y(As)39 b(a)h(consequence,)j(when)38 b(w)m(e)i(use)f(the)h(F)-8
-b(rameSet)40 b(returned)f(b)m(y)g(astCon)m(v)m(ert)i(to)f(apply)f(a)h
-(co)s(ordinate)0 3666 y(transformation,)31 b(w)m(e)g(obtain)g
-(something)f(lik)m(e)i(the)f(follo)m(wing:)227 3921 y
-Fq(\(2:06:03.0,)45 b(34:22:39\))g(-->)i(\(20.2717,)e(42.1087\))227
-4034 y(\(2:08:20.6,)g(35:31:24\))g(-->)i(\(21.1705,)e(43.0197\))227
-4147 y(\(2:10:38.1,)g(36:40:09\))g(-->)i(\(22.0716,)e(43.9295\))227
-4260 y(\(2:12:55.6,)g(37:48:55\))g(-->)i(\(22.9753,)e(44.8382\))227
-4373 y(\(2:15:13.1,)g(38:57:40\))g(-->)i(\(23.8814,)e(45.7459\))227
-4486 y(\(2:17:30.6,)g(40:06:25\))g(-->)i(\(24.7901,)e(46.6528\))227
-4599 y(\(2:19:48.1,)g(41:15:11\))g(-->)i(\(25.7013,)e(47.5589\))227
-4712 y(\(2:22:05.6,)g(42:23:56\))g(-->)i(\(26.6149,)e(48.4644\))227
-4825 y(\(2:24:23.1,)g(43:32:41\))g(-->)i(\(27.5311,)e(49.3695\))227
-4937 y(\(2:26:40.6,)g(44:41:27\))g(-->)i(\(28.4499,)e(50.2742\))0
-5193 y FF(When)29 b(compared)h(to)g(the)f(original)i(\()p
-Fu(x)p FF(12.1\),)i(the)c(output)g(co)s(ordinate)h(order)f(has)h(b)s
-(een)e(sw)m(app)s(ed)g(to)j(com-)0 5306 y(p)s(ensate)f(for)g(the)h
-(di\013eren)m(t)g(destination)g(SkyF)-8 b(rame)31 b(axis)g(order.)0
-5467 y(In)j(all,)i(there)f(are)g(four)e(p)s(ossible)h(axis)h(com)m
-(binations,)i(corresp)s(onding)c(to)i(t)m(w)m(o)h(p)s(ossible)e(axis)h
-(orders)f(for)0 5580 y(eac)m(h)j(of)g(the)f(source)h(and)f(destination)
-h(SkyF)-8 b(rames,)38 b(and)e(astCon)m(v)m(ert)i(will)e(con)m(v)m(ert)i
-(correctly)g(b)s(et)m(w)m(een)0 5693 y(an)m(y)c(of)g(these.)52
-b(The)33 b(p)s(oin)m(t)h(to)g(note)h(is)e(that)i(a)f(SkyF)-8
-b(rame)34 b(con)m(tains)h(kno)m(wledge)g(ab)s(out)f(ho)m(w)f(to)i(con)m
-(v)m(ert)p eop end
-%%Page: 108 118
-TeXDict begin 108 117 bop 0 52 a FF(108)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)0 351 y FF(to)35 b(and)e(from)g(other)h(SkyF)-8
-b(rames.)52 b(Since)34 b(its)g(t)m(w)m(o)h(axes)g(\(longitude)g(and)e
-(latitude\))i(are)f(distinguishable,)0 464 y(the)d(con)m(v)m(ersion)g
-(is)g(able)g(to)g(tak)m(e)h(accoun)m(t)g(of)e(the)h(axis)f(order.)0
-629 y(If)j(y)m(ou)h(need)f(to)h(iden)m(tify)g(the)g(axes)g(of)f(a)h
-(SkyF)-8 b(rame)34 b(explicitly)-8 b(,)36 b(taking)f(in)m(to)f(accoun)m
-(t)h(an)m(y)f(axis)f(p)s(erm)m(u-)0 742 y(tations,)e(the)f(LatAxis)h
-(and)e(LonAxis)h(attributes)g(can)g(b)s(e)f(used.)40
-b(These)29 b(are)h(read-only)g(attributes)h(whic)m(h)0
-855 y(giv)m(e)h(the)e(indices)h(of)f(the)h(latitude)g(and)f(longitude)h
-(axes)g(resp)s(ectiv)m(ely)-8 b(.)0 1154 y Fw(12.5)112
-b(Con)m(v)m(erting)38 b(Bet)m(w)m(een)f(F)-9 b(rames)0
-1378 y FF(Ha)m(ving)39 b(seen)f(ho)m(w)h(clev)m(er)g(SkyF)-8
-b(rames)38 b(are)h(\()p Fu(x)p FF(12.1)h(and)e Fu(x)p
-FF(12.4\),)k(w)m(e)d(will)f(next)g(examine)h(ho)m(w)f(dum)m(b)f(a)0
-1491 y(basic)28 b(F)-8 b(rame)29 b(can)f(b)s(e)f(in)h(comparison.)40
-b(F)-8 b(or)28 b(example,)i(if)d(w)m(e)i(create)g(t)m(w)m(o)g
-(2-dimensional)g(F)-8 b(rames)29 b(and)e(use)0 1604 y(astCon)m(v)m(ert)
-32 b(to)f(deriv)m(e)g(a)g(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(them,)g
-(as)g(follo)m(ws:)227 1858 y Ft(AstFrame)41 b(*frame1,)f(*frame2;)227
-2058 y(...)227 2257 y(frame1)h(=)j(astFrame\()39 b(2,)k("")g(\);)227
-2357 y(frame2)e(=)j(astFrame\()39 b(2,)k("")g(\);)227
-2456 y(cvt)g(=)g(astConvert\()c(frame1,)i(frame2,)f("")j(\);)0
-2724 y FF(then)30 b(the)h(co)s(ordinate)g(transformation)g(whic)m(h)f
-(the)g(\\cvt")i(F)-8 b(rameSet)32 b(p)s(erforms)d(will)h(b)s(e)g(as)h
-(follo)m(ws:)227 2992 y Fq(\(1,)47 b(2\))g(-->)g(\(1,)g(2\))227
-3105 y(\(2,)g(4\))g(-->)g(\(2,)g(4\))227 3218 y(\(3,)g(6\))g(-->)g
-(\(3,)g(6\))227 3331 y(\(4,)g(8\))g(-->)g(\(4,)g(8\))227
-3443 y(\(5,)g(10\))g(-->)g(\(5,)g(10\))0 3711 y FF(This)31
-b(is)i(an)f(iden)m(tit)m(y)i(transformation,)f(exactly)h(the)e(same)h
-(as)g(a)f(UnitMap)h(\()p Fu(x)p FF(5.9\).)49 b(Ev)m(en)32
-b(if)g(w)m(e)h(p)s(erm)m(ute)0 3824 y(the)i(axis)h(order)e(of)h(our)g
-(F)-8 b(rames,)37 b(as)e(w)m(e)h(did)e(ab)s(o)m(v)m(e)i(\()p
-Fu(x)p FF(12.4\),)j(w)m(e)d(will)f(fare)g(no)g(b)s(etter.)55
-b(The)34 b(con)m(v)m(ersion)0 3937 y(b)s(et)m(w)m(een)d(our)f(t)m(w)m
-(o)i(basic)e(F)-8 b(rames)32 b(will)e(alw)m(a)m(ys)i(b)s(e)e(an)g(iden)
-m(tit)m(y)i(transformation.)0 4102 y(The)k(reason)h(for)f(this)h(is)f
-(that,)j(unlik)m(e)e(a)g(SkyF)-8 b(rame,)39 b(all)e(basic)g(F)-8
-b(rames)37 b(start)g(life)h(the)e(same)h(and)f(ha)m(v)m(e)0
-4215 y(axes)h(that)f(are)g(indistinguishable.)57 b(Therefore,)38
-b(p)s(erm)m(uting)d(their)h(axes)g(do)s(esn't)g(mak)m(e)h(them)f(lo)s
-(ok)g(an)m(y)0 4327 y(di\013eren)m(t|they)31 b(still)g(represen)m(t)g
-(the)f(same)h(co)s(ordinate)g(system.)0 4627 y Fw(12.6)112
-b(The)38 b(Choice)g(of)f(Alignmen)m(t)h(System)0 4851
-y FF(In)25 b(practice,)j(when)c(AST)h(is)g(ask)m(ed)h(to)g(\014nd)e(a)i
-(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames)26 b(describing)f(t)m(w)m(o)i(di\013eren)m(t)0
-4964 y(co)s(ordinate)40 b(systems)g(on)f(a)h(giv)m(en)g(ph)m(ysical)g
-(domain,)i(it)e(uses)f(an)g(in)m(termediate)i(\\alignmen)m(t")h
-(system.)0 5077 y(Th)m(us,)28 b(when)g(\014nding)g(a)h(con)m(v)m
-(ersion)h(from)e(system)h(A)g(to)h(system)f(B,)g(AST)f(\014rst)g
-(\014nds)f(the)i(Mapping)g(from)0 5190 y(system)g(A)f(to)i(some)e
-(alignmen)m(t)i(system,)g(system)e(C,)h(and)f(then)g(\014nds)f(the)h
-(Mapping)h(from)f(this)g(system)h(C)0 5303 y(to)j(the)g(required)f
-(system)g(B.)i(It)e(\014nally)h(concatenates)i(these)e(t)m(w)m(o)g
-(Mappings)g(to)g(get)h(the)e(Mapping)h(from)0 5416 y(system)f(A)f(to)h
-(system)g(B.)0 5580 y(One)23 b(adv)-5 b(an)m(tage)26
-b(of)e(this)f(is)h(that)g(it)g(cuts)g(do)m(wn)f(the)h(n)m(um)m(b)s(er)e
-(of)i(con)m(v)m(ersion)h(algorithms)f(required.)38 b(If)23
-b(there)0 5693 y(are)31 b Fo(N)41 b FF(di\013eren)m(t)32
-b(Systems)e(whic)m(h)h(ma)m(y)h(b)s(e)e(used)g(to)i(describ)s(e)e(p)s
-(ositions)h(within)g(the)g(Domain,)h(then)f(this)p eop
-end
-%%Page: 109 119
-TeXDict begin 109 118 bop 0 52 a Fy(12.6)93 b(The)29
-b(Choice)i(of)g(Alignmen)m(t)g(System)2072 b FF(109)0
-351 y(approac)m(h)35 b(requires)e(ab)s(out)i(2)23 b Fu(\003)g
-Fo(N)44 b FF(con)m(v)m(ersion)36 b(algorithms)f(to)g(b)s(e)f(written.)
-53 b(The)33 b(alternativ)m(e)k(approac)m(h)0 464 y(of)29
-b(going)i(directly)f(from)e(system)i(A)f(to)h(system)f(B)h(w)m(ould)f
-(require)g(ab)s(out)g Fo(N)e Fu(\003)19 b Fo(N)39 b FF(con)m(v)m
-(ersion)30 b(algorithms.)0 627 y(In)c(addition,)i(the)g(use)e(of)h(an)g
-(in)m(termediate)i(alignmen)m(t)f(system)f(highligh)m(ts)h(the)f
-(nature)g(of)g(the)g(con)m(v)m(ersion)0 740 y(pro)s(cess.)57
-b(What)37 b(do)f(w)m(e)h(mean)f(b)m(y)g(sa)m(ying)h(that)f(a)h(Mapping)
-f(\\con)m(v)m(erts)i(a)e(p)s(osition)g(in)g(one)h(co)s(ordinate)0
-853 y(system)e(in)m(to)h(the)f(corresp)s(onding)f(p)s(osition)h(in)g
-(another"?)54 b(In)35 b(practice,)i(it)f(means)e(that)i(the)f(input)f
-(and)0 966 y(output)h(co)s(ordinates)i(corresp)s(ond)d(to)j(the)f(same)
-g(co)s(ordinates)g Fx(in)i(some)g(thir)-5 b(d)39 b(c)-5
-b(o)g(or)g(dinate)40 b(system)p FF(.)58 b(The)0 1079
-y(c)m(hoice)31 b(of)e(this)f(third)g(co)s(ordinate)i(system,)g(the)f
-(\\alignmen)m(t")i(system,)e(can)g(completely)i(alter)f(the)f(nature)0
-1191 y(of)38 b(the)g(Mapping.)62 b(The)37 b(F)-8 b(rame)39
-b(class)f(has)g(an)f(attribute)i(called)f(AlignSystem)h(whic)m(h)e(can)
-h(b)s(e)f(used)g(to)0 1304 y(sp)s(ecify)30 b(the)h(alignmen)m(t)g
-(system.)0 1467 y(As)i(an)g(example,)i(consider)e(the)g(case)h(of)f
-(aligning)h(t)m(w)m(o)h(sp)s(ectra)e(calibrated)h(in)f(radio)g(v)m(elo)
-s(cit)m(y)-8 b(,)37 b(but)32 b(eac)m(h)0 1580 y(with)26
-b(a)g(di\013eren)m(t)g(rest)g(frequency)g(\(eac)m(h)h(sp)s(ectrum)e
-(will)h(b)s(e)g(describ)s(ed)e(b)m(y)i(a)g(Sp)s(ecF)-8
-b(rame\).)40 b(Since)26 b(the)g(rest)0 1693 y(frequencies)h(di\013er,)g
-(a)g(giv)m(en)h(v)m(elo)s(cit)m(y)h(will)e(corresp)s(ond)f(to)i
-(di\013eren)m(t)f(frequencies)g(in)f(the)h(t)m(w)m(o)h(sp)s(ectra.)40
-b(So)0 1806 y(when)34 b(w)m(e)i(come)g(to)g(\\align")h(these)f(t)m(w)m
-(o)g(sp)s(ectra)g(\(that)g(is,)g(\014nd)e(a)i(Mapping)f(whic)m(h)g(con)
-m(v)m(erts)i(p)s(ositions)0 1919 y(in)d(one)h(Sp)s(ecF)-8
-b(rame)34 b(to)h(the)g(corresp)s(onding)e(p)s(ositions)i(in)f(the)g
-(other\),)j(w)m(e)d(ha)m(v)m(e)i(the)f(c)m(hoice)h(of)e(aligning)0
-2032 y(the)d(frequencies)g(or)g(aligning)h(the)f(v)m(elo)s(cities.)44
-b(Di\013eren)m(t)32 b(Mappings)f(will)g(b)s(e)f(required)g(to)i
-(describ)s(e)e(these)0 2145 y(t)m(w)m(o)i(forms)f(of)g(alignmen)m(t.)45
-b(If)30 b(w)m(e)i(set)g(AlignSystem)f(to)h(\\F)-8 b(req")33
-b(then)e(the)g(returned)f(Mapping)h(will)h(align)0 2257
-y(the)e(frequencies)h(describ)s(ed)e(b)m(y)h(the)g(t)m(w)m(o)h(Sp)s
-(ecF)-8 b(rames.)41 b(On)30 b(the)g(other)g(hand,)g(if)g(w)m(e)g(set)h
-(AlignSystem)g(to)0 2370 y(\\V)-8 b(radio")32 b(then)e(the)h(returned)e
-(Mapping)h(will)h(align)g(the)g(v)m(elo)s(cities.)0 2533
-y(Some)e(c)m(hoices)i(of)e(alignmen)m(t)i(system)e(are)h(redundan)m(t.)
-39 b(F)-8 b(or)29 b(instance,)i(in)e(the)g(ab)s(o)m(v)m(e)h(example,)h
-(c)m(hanging)0 2646 y(the)i(alignmen)m(t)i(system)e(from)g(frequency)g
-(to)h(w)m(a)m(v)m(elength)h(has)e(no)g(e\013ect)i(on)e(the)g(returned)f
-(Mapping:)46 b(if)0 2759 y(t)m(w)m(o)27 b(sp)s(ectra)f(are)g(aligned)g
-(in)g(frequency)f(they)h(will)g(also)h(b)s(e)e(aligned)h(in)g(w)m(a)m
-(v)m(elength)i(\(assuming)d(the)h(sp)s(eed)0 2872 y(of)31
-b(ligh)m(t)g(do)s(esn't)f(c)m(hange\).)0 3035 y(The)d(default)g(v)-5
-b(alue)28 b(for)f(AlignSystem)h(dep)s(ends)e(on)h(the)g(class)h(of)g(F)
--8 b(rame.)40 b(F)-8 b(or)29 b(a)e(Sp)s(ecF)-8 b(rame,)29
-b(the)e(default)0 3147 y(is)41 b(w)m(a)m(v)m(elength)j(\(or)e(equiv)-5
-b(alen)m(tly)d(,)46 b(frequency\))c(since)f(this)g(is)h(the)f(system)h
-(in)f(whic)m(h)g(observ)-5 b(ations)42 b(are)0 3260 y(usually)34
-b(made.)53 b(The)34 b(Sp)s(ecF)-8 b(rame)34 b(class)h(also)h(has)e(an)g
-(attribute)h(called)h(AlignStdOfRest)e(whic)m(h)g(allo)m(ws)0
-3373 y(the)j(standard)g(of)g(rest)h(of)f(the)h(alignmen)m(t)g(system)g
-(to)g(b)s(e)e(sp)s(eci\014ed.)61 b(Similarly)-8 b(,)40
-b(the)d(TimeF)-8 b(rame)39 b(class)0 3486 y(has)31 b(an)h(attribute)h
-(called)g(AlignTimeScale)g(whic)m(h)e(allo)m(ws)i(the)f(time)h(scale)g
-(of)f(the)g(alignmen)m(t)h(system)f(to)0 3599 y(b)s(e)d(sp)s
-(eci\014ed.)40 b(Curren)m(tly)-8 b(,)30 b(the)g(SkyF)-8
-b(rame)31 b(uses)e(ICRS)g(as)h(the)g(default)g(for)g(AlignSystem,)h
-(since)f(this)g(is)g(a)0 3712 y(close)i(appro)m(ximation)f(to)g(an)f
-(inertial)i(frame)e(of)h(rest.)p eop end
-%%Page: 110 120
-TeXDict begin 110 119 bop 0 52 a FF(110)609 b Fy(12)92
-b(AN)31 b(INTR)m(ODUCTION)e(TO)h(COORDINA)-8 b(TE)30
-b(SYSTEM)f(CONVERSIONS)p eop end
-%%Page: 111 121
-TeXDict begin 111 120 bop 3643 52 a FF(111)0 351 y Fz(13)135
-b(Co)t(ordinate)46 b(System)f(Net)l(w)l(orks)i(\(F)-11
-b(rameSets\))0 591 y FF(W)j(e)41 b(sa)m(w)g(in)f Fu(x)p
-FF(12)h(ho)m(w)g(astCon)m(v)m(ert)h(could)e(b)s(e)f(used)h(to)h(\014nd)
-e(a)h(Mapping)g(that)h(in)m(ter-relates)i(a)d(pair)g(of)0
-704 y(co)s(ordinate)f(systems)g(represen)m(ted)f(b)m(y)h(F)-8
-b(rames.)66 b(There)38 b(is)g(a)h(limitation)h(to)g(this,)g(ho)m(w)m
-(ev)m(er,)j(in)38 b(that)h(it)0 817 y(can)h(only)f(b)s(e)g(applied)g
-(to)h(co)s(ordinate)g(systems)g(that)g(are)f(in)m(ter-related)i(b)m(y)f
-(suitable)g(con)m(v)m(en)m(tions.)69 b(In)0 930 y(the)38
-b(case)h(of)f(celestial)j(co)s(ordinates,)g(the)d(relev)-5
-b(an)m(t)39 b(con)m(v)m(en)m(tions)h(are)e(standards)f(set)i(out)f(b)m
-(y)g(the)g(In)m(ter-)0 1043 y(national)c(Astronomical)g(Union,)f(and)f
-(others,)h(that)g(de\014ne)f(what)g(these)h(co)s(ordinate)h(systems)e
-(mean.)47 b(In)0 1156 y(practice,)28 b(ho)m(w)m(ev)m(er,)h(the)c
-(relationships)h(b)s(et)m(w)m(een)h(man)m(y)f(other)g(co)s(ordinate)g
-(systems)g(are)g(also)h(of)f(practical)0 1269 y(imp)s(ortance.)0
-1418 y(Consider,)k(for)h(example,)h(the)f(fo)s(cal)h(plane)f(of)g(a)g
-(telescop)s(e)i(up)s(on)c(whic)m(h)i(an)f(image)j(of)e(the)g(sky)f(is)h
-(falling.)0 1531 y(W)-8 b(e)29 b(could)f(measure)g(p)s(ositions)g(in)f
-(this)h(fo)s(cal)h(plane)f(in)g(millimetres)h(or,)f(if)g(there)g(w)m
-(ere)h(a)f(detector)h(system)0 1644 y(suc)m(h)i(as)g(a)g(CCD)g(presen)m
-(t,)g(w)m(e)h(could)f(coun)m(t)g(pixels.)43 b(W)-8 b(e)32
-b(could)f(also)h(use)f(celestial)j(co)s(ordinates)d(of)g(man)m(y)0
-1757 y(di\013eren)m(t)h(kinds.)43 b(All)32 b(of)g(these)f(systems)h
-(are)g(equiv)-5 b(alen)m(t)33 b(in)e(their)g(e\013ectiv)m(eness)j(at)e
-(sp)s(ecifying)g(p)s(ositions)0 1870 y(in)e(the)h(fo)s(cal)g(plane,)f
-(but)g(some)h(are)g(more)f(con)m(v)m(enien)m(t)j(than)d(others)g(for)g
-(particular)h(purp)s(oses.)0 2020 y(Although)38 b(w)m(e)g(could,)h(in)f
-(principle,)h(con)m(v)m(ert)g(b)s(et)m(w)m(een)f(all)h(of)f(these)g(fo)
-s(cal)g(plane)g(co)s(ordinate)g(systems,)0 2133 y(there)27
-b(is)h(no)f(pre-de\014ned)f(con)m(v)m(en)m(tion)j(for)e(doing)h(so.)40
-b(This)26 b(is)h(b)s(ecause)h(the)f(con)m(v)m(ersions)i(required)d(dep)
-s(end)0 2246 y(on)37 b(where)f(the)h(telescop)s(e)h(is)f(p)s(oin)m
-(ting)g(and)f(ho)m(w)h(the)g(CCD)f(is)h(moun)m(ted)f(in)h(the)g(fo)s
-(cal)g(plane.)60 b(Clearly)-8 b(,)0 2358 y(kno)m(wledge)31
-b(ab)s(out)e(this)g(cannot)h(b)s(e)f(built)h(in)m(to)g(the)g(AST)f
-(library)g(and)g(m)m(ust)g(b)s(e)g(supplied)f(in)h(some)h(other)0
-2471 y(w)m(a)m(y)-8 b(.)41 b(Note)27 b(that)g(this)g(is)f(exactly)i
-(the)e(same)h(problem)f(as)g(w)m(e)h(met)g(in)f Fu(x)p
-FF(7.12)i(when)d(discussing)h(the)h(Domain)0 2584 y(attribute|)p
-Fx(i.e.)36 b FF(co)s(ordinate)h(systems)f(that)g(apply)g(to)h
-(di\013eren)m(t)f(ph)m(ysical)h(domains)e(require)h(that)h(extra)0
-2697 y(information)31 b(b)s(e)e(supplied)h(b)s(efore)f(w)m(e)i(can)g
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(them.)0 2847 y(What)f(w)m(e)f
-(need,)g(therefore,)h(is)f(a)g(general)h(w)m(a)m(y)g(to)f(describ)s(e)g
-(ho)m(w)g(co)s(ordinate)g(systems)g(are)g(in)m(ter-related,)0
-2960 y(so)h(that)h(when)f(there)g(is)g(no)g(con)m(v)m(en)m(tion)j
-(already)e(in)e(place,)j(w)m(e)f(can)f(de\014ne)g(our)f(o)m(wn.)41
-b(W)-8 b(e)31 b(can)g(then)f(lo)s(ok)0 3073 y(forw)m(ard)37
-b(to)g(con)m(v)m(erting,)k(sa)m(y)-8 b(,)40 b(from)d(pixels)g(in)m(to)h
-(galactic)i(co)s(ordinates)e(and)e Fx(vic)-5 b(e)38 b(versa.)61
-b FF(In)37 b(AST,)f(the)0 3186 y(F)-8 b(rameSet)32 b(class)f(pro)m
-(vides)f(this)g(capabilit)m(y)-8 b(.)0 3460 y Fw(13.1)112
-b(The)38 b(F)-9 b(rameSet)38 b(Mo)s(del)0 3668 y FF(Consider)29
-b(a)h(co)s(ordinate)h(system)f(\(call)i(it)f(n)m(um)m(b)s(er)d(1\))j
-(whic)m(h)f(is)g(represen)m(ted)f(b)m(y)h(a)h(F)-8 b(rame)31
-b(of)f(some)g(kind.)0 3781 y(No)m(w)f(consider)g(a)g(Mapping)g(whic)m
-(h,)g(when)f(applied)g(to)i(the)f(co)s(ordinates)g(in)g(system)g(1)g
-(yields)g(co)s(ordinates)0 3894 y(in)h(another)h(system,)f(n)m(um)m(b)s
-(er)f(2.)42 b(The)29 b(Mapping)i(therefore)g(in)m(ter-relates)h(co)s
-(ordinate)f(systems)g(1)f(and)g(2.)0 4044 y(No)m(w)j(consider)f(a)h
-(second)f(Mapping)g(whic)m(h)g(in)m(ter-relates)j(system)d(1)h(and)e(a)
-i(further)e(co)s(ordinate)i(system,)0 4157 y(n)m(um)m(b)s(er)c(3.)41
-b(If)30 b(w)m(e)h(w)m(an)m(ted)g(to)g(con)m(v)m(ert)h(co)s(ordinates)f
-(b)s(et)m(w)m(een)g(systems)g(2)f(and)g(3,)h(w)m(e)g(could)f(do)h(so)f
-(b)m(y:)111 4368 y(1.)46 b(Applying)30 b(our)g(\014rst)g(Mapping)g(in)g
-(rev)m(erse,)h(so)g(as)g(to)g(con)m(v)m(ert)h(b)s(et)m(w)m(een)f
-(systems)f(2)h(and)f(1.)111 4542 y(2.)46 b(Applying)30
-b(the)h(second)f(Mapping,)h(as)f(giv)m(en,)i(to)f(con)m(v)m(ert)h(b)s
-(et)m(w)m(een)f(systems)f(1)h(and)f(3.)0 4753 y(W)-8
-b(e)24 b(are)f(not)g(limited)h(to)f(three)g(co)s(ordinate)h(systems,)h
-(of)e(course.)38 b(In)22 b(fact,)k(w)m(e)d(could)g(con)m(tin)m(ue)h(to)
-g(in)m(tro)s(duce)0 4866 y(an)m(y)32 b(n)m(um)m(b)s(er)e(of)i(further)e
-(co)s(ordinate)i(systems,)g(so)g(long)g(as)f(w)m(e)h(ha)m(v)m(e)h(a)f
-(suitable)g(Mapping)f(for)h(eac)m(h)g(one)0 4979 y(whic)m(h)f(relates)i
-(it)g(to)f(one)g(of)g(the)g(F)-8 b(rames)32 b(already)g(presen)m(t.)45
-b(Con)m(tin)m(uing)32 b(in)g(this)f(w)m(a)m(y)-8 b(,)34
-b(w)m(e)e(can)g(build)f(up)0 5092 y(a)i(net)m(w)m(ork)g(in)f(whic)m(h)g
-(F)-8 b(rames)33 b(are)g(in)m(ter-related)h(b)m(y)f(Mappings)f(in)g
-(suc)m(h)g(a)h(w)m(a)m(y)g(that)g(there)g(is)f(alw)m(a)m(ys)i(a)0
-5204 y(w)m(a)m(y)d(of)g(con)m(v)m(erting)h(b)s(et)m(w)m(een)f(an)m(y)g
-(pair)f(of)g(co)s(ordinate)i(systems.)0 5354 y(The)38
-b(F)-8 b(rameSet)41 b(\(Figure)e(7\))h(encapsulates)g(these)f(ideas.)67
-b(It)39 b(is)g(a)h(net)m(w)m(ork)f(comp)s(osed)g(of)g(F)-8
-b(rames)40 b(and)0 5467 y(asso)s(ciated)27 b(Mappings,)g(in)e(whic)m(h)
-h(there)g(is)f(alw)m(a)m(ys)j(exactly)f(one)f(path,)h
-Fx(via)f FF(Mappings,)g(b)s(et)m(w)m(een)h(an)m(y)f(pair)0
-5580 y(of)f(F)-8 b(rames.)40 b(Since)25 b(w)m(e)h(assem)m(ble)g(F)-8
-b(rameSets)26 b(ourselv)m(es,)h(they)e(can)g(b)s(e)g(used)f(to)i
-(represen)m(t)f(an)m(y)h(co)s(ordinate)0 5693 y(systems)k(w)m(e)h(c)m
-(ho)s(ose)h(and)d(to)i(set)g(up)f(the)g(particular)h(relationships)g(b)
-s(et)m(w)m(een)g(them)f(that)h(w)m(e)g(w)m(an)m(t.)p
-eop end
-%%Page: 112 122
-TeXDict begin 112 121 bop 0 52 a FF(112)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y Fw(13.2)112 b(Creating)38 b(a)g(F)-9 b(rameSet)0
-581 y FF(Before)37 b(w)m(e)f(can)h(create)g(a)f(F)-8
-b(rameSet,)39 b(w)m(e)e(m)m(ust)e(ha)m(v)m(e)j(a)e(F)-8
-b(rame)37 b(of)f(some)g(kind)f(to)i(put)e(in)m(to)i(it,)h(so)e(let's)0
-693 y(create)c(a)f(simple)f(one:)227 959 y Ft(#include)41
-b("ast.h")227 1058 y(AstFrame)g(*frame1;)227 1258 y(...)227
-1457 y(frame1)g(=)j(astFrame\()39 b(2,)k("Domain=A")d(\);)0
-1735 y FF(W)-8 b(e)25 b(ha)m(v)m(e)f(set)g(this)g(F)-8
-b(rame's)24 b(Domain)h(attribute)f(\()p Fu(x)p FF(7.12\))i(to)e(A)g(so)
-g(that)g(it)g(will)g(b)s(e)f(distinct)h(from)f(the)g(others)0
-1848 y(w)m(e)31 b(will)g(b)s(e)e(using.)41 b(W)-8 b(e)31
-b(can)g(no)m(w)f(create)i(a)f(new)f(F)-8 b(rameSet)31
-b(con)m(taining)h(just)e(this)g(F)-8 b(rame,)32 b(as)e(follo)m(ws:)227
-2113 y Ft(AstFrameSet)39 b(*frameset;)227 2312 y(...)227
-2512 y(frameset)i(=)i(astFrameSet\()38 b(frame1,)j("")i(\);)0
-2790 y FF(So)30 b(far,)h(ho)m(w)m(ev)m(er,)h(this)e(F)-8
-b(rame)31 b(isn't)g(related)g(to)g(an)m(y)g(others.)0
-3101 y Fw(13.3)112 b(Adding)38 b(New)f(F)-9 b(rames)39
-b(to)e(a)h(F)-9 b(rameSet)0 3331 y FF(W)h(e)40 b(can)f(no)m(w)g(add)f
-(further)g(F)-8 b(rames)40 b(to)f(the)g(F)-8 b(rameSet)41
-b(created)e(ab)s(o)m(v)m(e)i(\()p Fu(x)p FF(13.2\).)69
-b(T)-8 b(o)39 b(do)g(so,)i(w)m(e)f(m)m(ust)0 3444 y(supply)33
-b(a)j(new)e(F)-8 b(rame)36 b(and)e(an)h(asso)s(ciated)h(Mapping)f(that)
-g(relates)i(it)e(to)h(an)m(y)f(of)g(the)g(F)-8 b(rames)36
-b(that)f(are)0 3557 y(already)c(presen)m(t)g(\(there)g(is)g(only)f(one)
-h(presen)m(t)g(so)g(far\).)41 b(T)-8 b(o)31 b(k)m(eep)h(the)f(example)g
-(simple,)g(w)m(e)g(will)g(just)f(use)0 3669 y(a)h(Zo)s(omMap)f(that)h
-(m)m(ultiplies)g(co)s(ordinates)g(b)m(y)g(10.)41 b(The)30
-b(required)g(Ob)5 b(jects)30 b(are)h(created)g(as)g(follo)m(ws:)227
-3935 y Ft(AstFrame)41 b(*frame2;)227 4034 y(AstMapping)f(*mapping12;)
-227 4233 y(...)227 4433 y(frame2)h(=)j(astFrame\()39
-b(2,)k("Domain=B")d(\);)227 4532 y(mapping12)g(=)j(astZoomMap\()c(2,)k
-(10.0,)f("")g(\);)0 4811 y FF(T)-8 b(o)31 b(add)f(the)g(new)g(F)-8
-b(rame)31 b(in)m(to)h(our)e(F)-8 b(rameSet,)31 b(w)m(e)g(use)f(the)h
-(astAddF)-8 b(rame)31 b(function:)227 5076 y Ft(astAddFrame\()39
-b(frameset,)h(1,)j(mapping12,)c(frame2)i(\);)0 5354 y
-FF(Whenev)m(er)36 b(a)g(F)-8 b(rame)37 b(is)e(added)g(to)i(a)f(F)-8
-b(rameSet,)38 b(it)e(is)g(assigned)g(an)f(in)m(teger)i(index.)56
-b(This)35 b(index)g(starts)0 5467 y(with)f(1)i(for)e(the)h(initial)h(F)
--8 b(rame)36 b(used)e(to)h(create)h(the)f(F)-8 b(rameSet)36
-b(\()p Fu(x)p FF(13.2\))i(and)c(incremen)m(ts)h(b)m(y)g(one)g(ev)m(ery)
-0 5580 y(time)f(a)f(new)f(F)-8 b(rame)34 b(is)f(added.)48
-b(This)32 b(index)h(is)g(the)g(primary)f(w)m(a)m(y)i(of)f(iden)m
-(tifying)h(the)f(F)-8 b(rames)34 b(within)e(a)0 5693
-y(F)-8 b(rameSet.)p eop end
-%%Page: 113 123
-TeXDict begin 113 122 bop 0 52 a Fy(13.4)93 b(The)29
-b(Base)j(and)e(Curren)m(t)f(F)-8 b(rames)2185 b FF(113)917
-1810 y @beginspecial 114 @llx 303 @lly 503 @urx 613 @ury
-2334 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsexample.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 2006 a(Figure)24 b(11:)38 b(An)23 b(example)i(F)-8
-b(rameSet,)26 b(in)d(whic)m(h)g(F)-8 b(rames)25 b(2)f(and)f(3)h(are)f
-(related)i(to)f(F)-8 b(rame)25 b(1)f(b)m(y)f(m)m(ultiplying)0
-2119 y(its)29 b(co)s(ordinates)g(b)m(y)f(factors)h(of)f(10)h(and)f(5)g
-(resp)s(ectiv)m(ely)-8 b(.)42 b(The)28 b(F)-8 b(rameSet's)29
-b(Base)h(attribute)f(has)f(the)g(v)-5 b(alue)0 2232 y(1)31
-b(and)e(its)i(Curren)m(t)f(attribute)h(has)f(the)g(v)-5
-b(alue)31 b(3.)41 b(The)30 b(transformation)h(p)s(erformed)d(when)i
-(the)g(F)-8 b(rameSet)0 2345 y(is)30 b(used)g(as)h(a)f(Mapping)h(\()p
-Fx(i.e.)f FF(from)g(its)g(base)h(to)g(its)g(curren)m(t)f(F)-8
-b(rame\))32 b(is)e(sho)m(wn)g(in)g(b)s(old.)0 2731 y(When)35
-b(a)h(F)-8 b(rame)37 b(is)e(added,)i(w)m(e)f(also)g(ha)m(v)m(e)h(to)f
-(sp)s(ecify)f(whic)m(h)h(of)f(the)h(existing)h(ones)e(the)h(new)f(F)-8
-b(rame)36 b(is)0 2844 y(related)h(to.)57 b(Here,)38 b(w)m(e)e(c)m(hose)
-h(n)m(um)m(b)s(er)d(1,)k(the)d(only)h(one)g(presen)m(t)g(so)g(far,)h
-(and)e(the)h(new)f(one)h(w)m(e)g(added)0 2957 y(b)s(ecame)31
-b(n)m(um)m(b)s(er)e(2.)0 3126 y(Note)g(that)f(a)f(F)-8
-b(rameSet)29 b(do)s(es)e(not)g(mak)m(e)i(copies)f(of)f(the)h(F)-8
-b(rames)28 b(and)e(Mappings)i(that)g(y)m(ou)f(insert)g(in)m(to)i(it.)0
-3239 y(Instead,)j(it)h(holds)e(p)s(oin)m(ters)h(to)h(them.)45
-b(This)31 b(means)h(that)g(if)g(y)m(ou)g(retain)h(the)f(original)h(p)s
-(oin)m(ters)e(to)i(these)0 3352 y(Ob)5 b(jects)38 b(and)f(alter)h
-(them,)i(y)m(ou)e(will)g(indirectly)g(b)s(e)f(altering)h(the)g(F)-8
-b(rameSet's)39 b(con)m(ten)m(ts.)64 b(Y)-8 b(ou)38 b(can,)i(of)0
-3465 y(course,)29 b(alw)m(a)m(ys)h(use)e(astCop)m(y)h(\()p
-Fu(x)p FF(4.13\))j(to)d(mak)m(e)g(a)g(separate)g(cop)m(y)h(of)e(an)m(y)
-h(Ob)5 b(ject)29 b(if)f(y)m(ou)h(need)f(to)h(ensure)0
-3578 y(its)i(indep)s(endence.)0 3747 y(W)-8 b(e)41 b(could)e(also)i
-(add)e(a)h(third)e(F)-8 b(rame)41 b(in)m(to)f(our)f(F)-8
-b(rameSet,)44 b(this)39 b(time)h(de\014ning)f(a)h(co)s(ordinate)g
-(system)0 3860 y(whic)m(h)30 b(is)h(reac)m(hed)g(b)m(y)f(m)m
-(ultiplying)h(the)f(original)i(co)s(ordinates)f(\(of)g(\\frame1"\))h(b)
-m(y)e(5:)227 4129 y Ft(astAddFrame\()39 b(frameset,)h(1,)j
-(astZoomMap\()c(2,)j(5.0,)g("")h(\),)g(astFrame\()d(2,)i("Domain=C")e
-(\))j(\);)0 4412 y FF(Here,)30 b(w)m(e)f(ha)m(v)m(e)g(a)m(v)m(oided)h
-(storing)f(unnecessary)f(p)s(oin)m(ter)g(v)-5 b(alues)29
-b(b)m(y)f(using)g(function)g(in)m(v)m(o)s(cations)j(directly)0
-4525 y(as)d(argumen)m(ts)g(for)f(astAddF)-8 b(rame.)41
-b(This)27 b(assumes)g(that)h(w)m(e)h(are)f(using)f(astBegin)i(and)e
-(astEnd)g(\()p Fu(x)p FF(4.10\))k(to)0 4638 y(ensure)f(that)h(Ob)5
-b(jects)30 b(are)h(correctly)g(deleted)h(when)d(no)h(longer)h
-(required.)0 4807 y(Our)38 b(example)i(F)-8 b(rameSet)41
-b(no)m(w)f(con)m(tains)g(three)g(F)-8 b(rames)40 b(and)f(t)m(w)m(o)i
-(Mappings)f(with)f(the)h(arrangemen)m(t)0 4920 y(sho)m(wn)30
-b(in)g(Figure)h(11.)41 b(The)30 b(total)i(n)m(um)m(b)s(er)d(of)i(F)-8
-b(rames)31 b(is)f(giv)m(en)i(b)m(y)e(its)h(read-only)g(Nframe)f
-(attribute.)0 5236 y Fw(13.4)112 b(The)38 b(Base)g(and)g(Curren)m(t)f
-(F)-9 b(rames)0 5467 y FF(A)m(t)31 b(all)h(times,)f(one)g(of)f(the)h(F)
--8 b(rames)31 b(in)f(a)h(F)-8 b(rameSet)32 b(is)e(designated)h(to)g(b)s
-(e)f(its)h Fx(b)-5 b(ase)31 b FF(F)-8 b(rame)31 b(and)f(one)h(to)g(b)s
-(e)0 5580 y(its)g Fx(curr)-5 b(ent)30 b FF(F)-8 b(rame)32
-b(\(Figure)f(11\).)41 b(These)30 b(F)-8 b(rames)31 b(are)g(iden)m
-(ti\014ed)f(b)m(y)g(t)m(w)m(o)i(in)m(teger)f(F)-8 b(rameSet)32
-b(attributes,)0 5693 y(Base)f(and)f(Curren)m(t,)g(whic)m(h)g(hold)g
-(the)h(indices)f(of)h(the)f(nominated)h(F)-8 b(rames)31
-b(within)f(the)g(F)-8 b(rameSet.)p eop end
-%%Page: 114 124
-TeXDict begin 114 123 bop 0 52 a FF(114)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FF(The)35 b(existence)h(of)f(the)h(base)f(and)f(curren)m(t)h(F)-8
-b(rames)36 b(re\015ects)f(an)g(imp)s(ortan)m(t)h(application)g(of)f(F)
--8 b(rameSets,)0 464 y(whic)m(h)25 b(is)h(to)h(attac)m(h)g(co)s
-(ordinate)g(systems)f(to)g(en)m(tities)i(suc)m(h)d(as)h(data)g(arra)m
-(ys,)i(data)e(\014les,)h(plotting)g(surfaces)0 577 y(\(for)g
-(graphics\),)h Fx(etc.)39 b FF(In)26 b(this)h(con)m(text,)j(the)d(base)
-g(F)-8 b(rame)28 b(represen)m(ts)e(the)h(\\nativ)m(e")j(co)s(ordinate)d
-(system)g(of)0 690 y(the)i(attac)m(hed)j(en)m(tit)m(y|for)e(example,)h
-(the)e(pixel)h(co)s(ordinates)g(of)f(an)h(image)g(or)g(the)f(in)m
-(trinsic)h(co)s(ordinates)0 803 y(of)35 b(a)h(plotting)g(surface.)55
-b(The)34 b(other)i(F)-8 b(rames)36 b(within)e(the)i(F)-8
-b(rameSet)36 b(represen)m(t)f(alternativ)m(e)j(co)s(ordinate)0
-916 y(systems)g(whic)m(h)h(ma)m(y)g(also)g(b)s(e)f(used)f(to)j(refer)e
-(to)h(p)s(ositions)f(within)g(that)h(en)m(tit)m(y)-8
-b(.)67 b(The)38 b(curren)m(t)h(F)-8 b(rame)0 1029 y(represen)m(ts)32
-b(the)f(particular)h(co)s(ordinate)h(system)f(whic)m(h)f(is)h(curren)m
-(tly)f(selected)j(for)d(use.)44 b(F)-8 b(or)33 b(instance,)f(if)0
-1142 y(an)c(image)h(w)m(ere)g(b)s(eing)f(displa)m(y)m(ed,)h(y)m(ou)f(w)
-m(ould)g(aim)h(to)g(lab)s(el)f(it)h(with)f(co)s(ordinates)g(corresp)s
-(onding)f(to)i(the)0 1255 y(curren)m(t)h(F)-8 b(rame.)42
-b(In)30 b(order)g(to)h(see)h(a)e(di\013eren)m(t)h(co)s(ordinate)h
-(system,)f(a)g(soft)m(w)m(are)h(user)d(w)m(ould)i(arrange)g(for)0
-1367 y(a)g(di\013eren)m(t)g(F)-8 b(rame)31 b(to)g(b)s(e)f(made)g
-(curren)m(t.)0 1548 y(The)j(c)m(hoice)j(of)e(base)g(and)g(curren)m(t)f
-(F)-8 b(rames)35 b(ma)m(y)g(b)s(e)e(c)m(hanged)i(at)f(an)m(y)g(time,)i
-(simply)e(b)m(y)g(assigning)g(new)0 1661 y(v)-5 b(alues)36
-b(to)g(the)f(F)-8 b(rameSet's)37 b(Base)f(and)e(Curren)m(t)h
-(attributes.)56 b(F)-8 b(or)36 b(example,)h(to)f(mak)m(e)g(the)g(F)-8
-b(rame)36 b(with)0 1774 y(index)30 b(3)h(b)s(ecome)f(the)h(curren)m(t)f
-(F)-8 b(rame,)32 b(y)m(ou)e(could)h(use:)227 2077 y Ft(astSetI\()41
-b(frameset,)e("Current",)h(3)j(\);)0 2394 y FF(Y)-8 b(ou)31
-b(can)g(nominate)g(the)f(same)h(F)-8 b(rame)31 b(to)g(b)s(e)f(b)s(oth)g
-(the)g(base)h(and)f(curren)m(t)g(F)-8 b(rame)31 b(if)f(y)m(ou)h(wish.)0
-2575 y(By)e(default)f(\()p Fx(i.e.)h FF(if)f(the)h(Base)g(or)g(Curren)m
-(t)e(attribute)j(is)e(un-set\),)i(the)e(\014rst)g(F)-8
-b(rame)29 b(added)f(to)h(a)g(F)-8 b(rameSet)0 2688 y(b)s(ecomes)32
-b(its)f(base)h(F)-8 b(rame)32 b(and)f(the)g(last)h(one)g(added)f(b)s
-(ecomes)g(its)h(curren)m(t)f(F)-8 b(rame.)2999 2655 y
-Fv(20)3118 2688 y FF(Whenev)m(er)32 b(a)g(new)0 2801
-y(F)-8 b(rame)26 b(is)f(added)f(to)i(a)g(F)-8 b(rameSet,)27
-b(the)f(Curren)m(t)e(attribute)h(is)h(mo)s(di\014ed)d(so)j(that)f(the)h
-(new)e(F)-8 b(rame)26 b(b)s(ecomes)0 2914 y(the)31 b(curren)m(t)f(one.)
-41 b(This)29 b(b)s(eha)m(viour)h(is)h(re\015ected)g(in)f(the)g(state)i
-(of)e(the)h(example)g(F)-8 b(rameSet)32 b(in)e(Figure)h(11.)0
-3268 y Fw(13.5)112 b(Referring)38 b(to)f(the)g(Base)h(and)g(Curren)m(t)
-f(F)-9 b(rames)0 3516 y FF(It)33 b(is)f(often)h(necessary)g(to)h(refer)
-e(to)h(the)g(base)g(and)f(curren)m(t)g(F)-8 b(rames)33
-b(\()p Fu(x)p FF(13.4\))j(within)c(a)h(F)-8 b(rameSet,)34
-b(but)e(it)0 3629 y(can)27 b(b)s(e)e(cum)m(b)s(ersome)h(ha)m(ving)h(to)
-g(obtain)g(their)f(indices)h(from)e(the)i(Base)g(and)f(Curren)m(t)f
-(attributes)i(on)f(eac)m(h)0 3742 y(o)s(ccasion.)41 b(T)-8
-b(o)29 b(mak)m(e)h(this)e(easier,)i(t)m(w)m(o)g(macros,)f(AST)p
-Fq(__)p FF(BASE)e(and)h(AST)p Fq(__)p FF(CURRENT,)f(are)i(de\014ned)e
-(in)0 3854 y(the)i(\\ast.h")g(header)f(\014le)h(and)f(ma)m(y)g(b)s(e)g
-(used)g(to)h(represen)m(t)f(the)h(indices)f(of)h(the)f(base)h(and)f
-(curren)m(t)g(F)-8 b(rames)0 3967 y(resp)s(ectiv)m(ely)g(.)42
-b(They)30 b(ma)m(y)h(b)s(e)f(used)g(whenev)m(er)g(a)h(F)-8
-b(rame)31 b(index)f(is)g(required.)0 4148 y(F)-8 b(or)34
-b(example,)h(when)d(adding)g(a)i(new)e(F)-8 b(rame)34
-b(to)g(a)g(F)-8 b(rameSet)34 b(\()p Fu(x)p FF(13.3\),)j(y)m(ou)c(could)
-g(use)g(the)g(follo)m(wing)i(to)0 4261 y(indicate)25
-b(that)g(the)g(new)e(F)-8 b(rame)26 b(is)e(related)h(to)g(the)g
-(existing)g(curren)m(t)f(F)-8 b(rame,)27 b(whatev)m(er)e(its)f(index)g
-(happ)s(ens)0 4374 y(to)31 b(b)s(e:)227 4677 y Ft(AstFrame)41
-b(*frame;)227 4777 y(AstMapping)f(*mapping;)227 4976
-y(...)227 5176 y(astAddFrame\()f(frameset,)h(AST__CURRENT,)e(mapping,)i
-(frame)i(\);)0 5492 y FF(Of)30 b(course,)h(the)f(F)-8
-b(rame)31 b(y)m(ou)g(added)f(w)m(ould)g(then)g(b)s(ecome)h(the)f(new)g
-(curren)m(t)g(F)-8 b(rame.)p 0 5607 1512 4 v 73 5661
-a Fs(20)138 5693 y Fr(Although)25 b(this)h(is)g(rev)n(ersed)g(if)g(the)
-g(F)-6 b(rameSet's)26 b(In)n(v)n(ert)e(attribute)i(is)g(non-zero.)p
-eop end
-%%Page: 115 125
-TeXDict begin 115 124 bop 0 52 a Fy(13.6)93 b(Using)30
-b(a)h(F)-8 b(rameSet)31 b(as)g(a)g(Mapping)2115 b FF(115)0
-351 y Fw(13.6)112 b(Using)38 b(a)g(F)-9 b(rameSet)39
-b(as)f(a)f(Mapping)0 584 y FF(The)d(F)-8 b(rameSet)36
-b(class)g(inherits)e(prop)s(erties)g(and)g(b)s(eha)m(viour)h(from)f
-(the)h(F)-8 b(rame)36 b(class)f(\()p Fu(x)p FF(7\))h(and,)g(in)e(turn,)
-0 697 y(from)c(the)g(Mapping)h(class)g(\()p Fu(x)p FF(5\).)42
-b(Its)30 b(b)s(eha)m(viour)g(when)g(used)f(as)i(a)g(Mapping)f(is)g
-(particularly)h(imp)s(ortan)m(t.)0 868 y(Consider,)c(for)f(instance,)j
-(passing)d(a)h(F)-8 b(rameSet)28 b(p)s(oin)m(ter)f(to)h(a)f(co)s
-(ordinate)g(transformation)g(function)g(suc)m(h)0 981
-y(as)k(astT)-8 b(ran2:)227 1254 y Ft(#define)41 b(N)i(10)227
-1354 y(double)e(xin[)h(N)h(],)g(yin[)f(N)h(],)g(xout[)f(N)h(],)g(yout[)
-e(N)i(];)227 1553 y(...)227 1752 y(astTran2\()d(frameset,)g(N,)j(xin,)f
-(yin,)g(1,)g(xout,)g(yout)g(\);)0 2039 y FF(The)33 b(co)s(ordinate)i
-(transformation)f(applied)g(b)m(y)g(this)g(F)-8 b(rameSet)35
-b(w)m(ould)e(b)s(e)h(the)g(one)g(whic)m(h)f(con)m(v)m(erts)j(b)s(e-)0
-2151 y(t)m(w)m(een)22 b(its)f(base)f(and)g(curren)m(t)g(F)-8
-b(rames.)39 b(Using)20 b(the)h(F)-8 b(rameSet)22 b(in)e(Figure)h(11,)i
-(for)e(example,)i(the)e(co)s(ordinates)0 2264 y(w)m(ould)34
-b(b)s(e)g(m)m(ultiplied)h(b)m(y)f(a)h(factor)h(of)e(5.)54
-b(If)34 b(w)m(e)h(instead)f(requested)h(the)f(F)-8 b(rameSet's)36
-b(in)m(v)m(erse)g(transfor-)0 2377 y(mation,)k(w)m(e)d(w)m(ould)g(b)s
-(e)f(transforming)h(from)f(its)i(curren)m(t)f(F)-8 b(rame)38
-b(to)f(its)h(base)f(F)-8 b(rame,)40 b(so)d(our)g(example)0
-2490 y(F)-8 b(rameSet)32 b(w)m(ould)e(then)g(m)m(ultiply)g(b)m(y)h(a)f
-(factor)i(of)e(0.2.)0 2661 y(Whenev)m(er)25 b(the)g(c)m(hoice)i(of)d
-(base)h(and)f(curren)m(t)h(F)-8 b(rames)25 b(c)m(hanges,)i(the)e
-(transformations)g(whic)m(h)f(a)h(F)-8 b(rameSet)0 2774
-y(p)s(erforms)38 b(when)g(used)g(as)h(a)h(Mapping)f(also)h(c)m(hange)g
-(to)g(re\015ect)g(this.)67 b(The)39 b(Nin)g(and)f(Nout)i(attributes)0
-2887 y(ma)m(y)e(also)g(c)m(hange)g(in)f(consequence,)i(b)s(ecause)e
-(they)h(are)f(determined)g(b)m(y)g(the)g(n)m(um)m(b)s(ers)f(of)h(axes)h
-(in)e(the)0 3000 y(F)-8 b(rameSet's)28 b(base)g(and)e(curren)m(t)h(F)-8
-b(rames)28 b(resp)s(ectiv)m(ely)-8 b(.)41 b(These)27
-b(n)m(um)m(b)s(ers)f(need)h(not)g(necessarily)h(b)s(e)f(equal,)0
-3113 y(of)k(course.)0 3283 y(Lik)m(e)e(an)m(y)f(Mapping,)h(a)g(F)-8
-b(rameSet)29 b(ma)m(y)f(also)h(b)s(e)f(in)m(v)m(erted)h(b)m(y)f(c)m
-(hanging)h(the)f(b)s(o)s(olean)g(sense)g(of)g(its)h(In)m(v)m(ert)0
-3396 y(attribute,)k Fx(e.g.)e FF(using)h(astIn)m(v)m(ert)h(\()p
-Fu(x)p FF(5.5\).)48 b(If)31 b(this)h(is)g(happ)s(ens,)e(the)j(v)-5
-b(alues)32 b(of)g(the)g(F)-8 b(rameSet's)33 b(Base)g(and)0
-3509 y(Curren)m(t)j(attributes)i(are)f(in)m(terc)m(hanged,)j(along)e
-(with)f(its)g(Nin)g(and)f(Nout)i(attributes,)h(so)e(that)h(its)f(base)0
-3622 y(and)26 b(curren)m(t)g(F)-8 b(rames)27 b(sw)m(ap)f(places.)40
-b(When)26 b(used)g(as)g(a)h(Mapping,)g(the)g(F)-8 b(rameSet)27
-b(will)g(therefore)g(p)s(erform)0 3735 y(the)k(in)m(v)m(erse)g
-(transformation)g(to)g(that)g(whic)m(h)f(it)h(p)s(erformed)d
-(previously)-8 b(.)0 3906 y(T)g(o)31 b(summarise,)f(a)h(F)-8
-b(rameSet)31 b(ma)m(y)g(b)s(e)f(used)f(exactly)j(lik)m(e)g(an)m(y)f
-(other)f(Mapping)h(whic)m(h)f(in)m(ter-relates)i(the)0
-4018 y(co)s(ordinate)f(systems)g(describ)s(ed)e(b)m(y)h(its)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames.)0 4339 y Fw(13.7)112
-b(Extracting)37 b(a)h(Mapping)h(from)f(a)g(F)-9 b(rameSet)0
-4572 y FF(Although)29 b(it)g(is)f(v)m(ery)h(con)m(v)m(enien)m(t)i(to)e
-(use)g(a)f(F)-8 b(rameSet)30 b(when)e(a)h(Mapping)f(is)h(required)e(\()
-p Fu(x)p FF(13.6\),)32 b(a)d(F)-8 b(rame-)0 4685 y(Set)35
-b(necessarily)g(con)m(tains)h(additional)f(information)g(and)f
-(sometimes)h(this)g(migh)m(t)g(cause)g(ine\016ciency)g(or)0
-4798 y(confusion.)43 b(F)-8 b(or)32 b(example,)g(if)f(y)m(ou)h(w)m(an)m
-(ted)g(to)g(use)f(a)g(Mapping)h(con)m(tained)g(in)f(one)h(F)-8
-b(rameSet)32 b(and)f(insert)0 4911 y(it)g(in)m(to)g(another,)g(it)g(w)m
-(ould)f(probably)g(not)h(b)s(e)e(e\016cien)m(t)j(to)f(insert)g(the)f
-(whole)h(of)g(the)f(\014rst)g(F)-8 b(rameSet)31 b(in)m(to)0
-5023 y(the)g(second)f(one,)h(although)g(it)g(w)m(ould)f(w)m(ork.)0
-5194 y(In)25 b(suc)m(h)g(a)i(situation,)g(the)f(astGetMapping)i
-(function)d(allo)m(ws)i(y)m(ou)f(to)h(extract)g(a)f(Mapping)g(from)f(a)
-h(F)-8 b(rame-)0 5307 y(Set.)39 b(Y)-8 b(ou)26 b(do)f(this)g(b)m(y)g
-(sp)s(ecifying)g(the)h(t)m(w)m(o)g(F)-8 b(rames)26 b(whic)m(h)f(the)h
-(Mapping)f(should)f(in)m(ter-relate)k(using)c(their)0
-5420 y(indices)30 b(within)g(the)h(F)-8 b(rameSet.)42
-b(F)-8 b(or)31 b(example:)227 5693 y Ft(map)43 b(=)g(astGetMapping\()38
-b(frameset,)h(2,)k(3)g(\);)p eop end
-%%Page: 116 126
-TeXDict begin 116 125 bop 0 52 a FF(116)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))0
-351 y FF(w)m(ould)h(return)f(a)i(p)s(oin)m(ter)f(to)h(a)f(Mapping)g
-(that)h(con)m(v)m(erted)h(b)s(et)m(w)m(een)e(F)-8 b(rames)32
-b(2)g(and)e(3)i(in)f(the)g(F)-8 b(rameSet.)0 464 y(Its)33
-b(in)m(v)m(erse)h(transformation)f(w)m(ould)g(then)g(con)m(v)m(ert)h
-(in)f(the)g(opp)s(osite)h(direction,)g Fx(i.e.)f FF(b)s(et)m(w)m(een)g
-(F)-8 b(rames)34 b(3)0 577 y(and)27 b(2.)40 b(Note)29
-b(that)f(this)f(Mapping)g(migh)m(t)i(not)e(b)s(e)g(indep)s(enden)m(t)f
-(of)i(the)f(Mappings)h(con)m(tained)g(within)f(the)0
-690 y(F)-8 b(rameSet|)p Fx(i.e.)31 b FF(they)h(ma)m(y)f(share)g(sub-Ob)
-5 b(jects|so)30 b(astCop)m(y)i(should)d(b)s(e)i(used)f(to)h(mak)m(e)h
-(a)g(cop)m(y)f(if)g(y)m(ou)0 803 y(need)f(to)h(guaran)m(tee)h(indep)s
-(endence)d(\()p Fu(x)p FF(4.13\).)0 957 y(V)-8 b(ery)25
-b(often,)i(the)e(Mapping)f(returned)g(b)m(y)h(astGetMapping)h(will)f(b)
-s(e)f(a)h(comp)s(ound)f(Mapping,)i(or)e(CmpMap)0 1070
-y(\()p Fu(x)p FF(6\).)42 b(This)27 b(re\015ects)i(the)g(fact)g(that)g
-(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(the)f(t)m(w)m(o)i(F)-8
-b(rames)29 b(ma)m(y)g(need)f(to)h(b)s(e)f(done)g Fx(via)h
-FF(an)0 1183 y(in)m(termediate)e(co)s(ordinate)f(system)g(so)g(that)g
-(sev)m(eral)h(stages)g(ma)m(y)f(b)s(e)e(in)m(v)m(olv)m(ed.)41
-b(Y)-8 b(ou)26 b(can,)h(ho)m(w)m(ev)m(er,)h(easily)0
-1296 y(simplify)i(this)g(Mapping)g(\(where)h(this)f(is)g(p)s(ossible\))
-g(b)m(y)h(using)f(the)g(astSimplify)g(function)g(\()p
-Fu(x)p FF(6.7\))j(and)d(this)0 1409 y(is)g(recommended)g(if)h(y)m(ou)f
-(plan)g(to)i(use)e(it)h(for)f(transforming)g(a)g(large)i(amoun)m(t)f
-(of)f(data.)0 1689 y Fw(13.8)112 b(Using)38 b(a)g(F)-9
-b(rameSet)39 b(as)f(a)f(F)-9 b(rame)0 1902 y FF(A)42
-b(F)-8 b(rameSet)43 b(can)f(also)h(b)s(e)f(used)f(as)h(a)g(F)-8
-b(rame,)46 b(in)c(whic)m(h)g(capacit)m(y)i(it)e(almost)h(alw)m(a)m(ys)h
-(b)s(eha)m(v)m(es)e(as)g(if)0 2015 y(its)35 b(curren)m(t)g(F)-8
-b(rame)36 b(had)e(b)s(een)g(used)g(instead.)54 b(F)-8
-b(or)36 b(example,)h(if)e(y)m(ou)g(request)g(the)g(Title)h(attribute)f
-(of)g(a)0 2128 y(F)-8 b(rameSet)32 b(using:)227 2343
-y Ft(const)42 b(char)g(*title;)227 2542 y(...)227 2741
-y(title)g(=)h(astGetC\()d(frameset,)g("Title")h(\);)0
-2969 y FF(the)25 b(result)f(will)h(b)s(e)f(the)g(Title)i(of)e(the)h
-(curren)m(t)f(F)-8 b(rame,)27 b(or)d(a)h(suitable)g(default)g(if)f(the)
-h(curren)m(t)f(F)-8 b(rame's)26 b(Title)0 3082 y(attribute)36
-b(is)f(un-set.)56 b(The)35 b(same)h(also)g(applies)f(to)i(other)e
-(attribute)h(op)s(erations|)p Fx(i.e.)f FF(setting,)j(clearing)0
-3195 y(and)d(testing)i(attributes.)57 b(Most)37 b(attributes)f(shared)f
-(b)m(y)h(b)s(oth)f(F)-8 b(rames)36 b(and)f(F)-8 b(rameSets)37
-b(b)s(eha)m(v)m(e)f(in)g(this)0 3308 y(w)m(a)m(y)-8 b(,)32
-b(suc)m(h)e(as)h(Naxes,)g(Lab)s(el\(axis\),)h(F)-8 b(ormat\(axis\),)33
-b Fx(etc.)40 b FF(There)30 b(are,)h(ho)m(w)m(ev)m(er,)h(a)f(few)f
-(exceptions:)227 3536 y FD(Class)427 3648 y FF(Has)h(the)g(v)-5
-b(alue)30 b(\\F)-8 b(rameSet".)227 3786 y FD(ID)427 3899
-y FF(Iden)m(ti\014es)31 b(the)f(particular)h(F)-8 b(rameSet)31
-b(\(not)g(its)g(curren)m(t)f(F)-8 b(rame\).)227 4036
-y FD(Nin)427 4149 y FF(Equals)30 b(the)h(n)m(um)m(b)s(er)e(of)i(axes)g
-(in)f(the)g(F)-8 b(rameSet's)32 b(base)e(F)-8 b(rame.)227
-4287 y FD(In)m(v)m(ert)427 4400 y FF(Is)30 b(indep)s(enden)m(t)f(of)i
-(an)m(y)g(of)f(the)h(Ob)5 b(jects)30 b(within)g(the)h(F)-8
-b(rameSet.)227 4537 y FD(Nob)6 b(ject)427 4650 y FF(Coun)m(ts)30
-b(the)h(n)m(um)m(b)s(er)e(of)i(activ)m(e)h(F)-8 b(rameSets.)227
-4788 y FD(RefCoun)m(t)427 4901 y FF(Coun)m(ts)21 b(the)g(n)m(um)m(b)s
-(er)f(of)h(activ)m(e)i(p)s(oin)m(ters)e(to)g(the)g(F)-8
-b(rameSet)22 b(\(not)g(to)g(its)f(curren)m(t)g(F)-8 b(rame\).)0
-5128 y(Note)28 b(that)f(the)g(set)g(of)f(attributes)i(p)s(ossessed)d(b)
-m(y)i(a)g(F)-8 b(rameSet)27 b(can)g(v)-5 b(ary)d(,)28
-b(dep)s(ending)d(on)h(the)h(nature)f(of)h(its)0 5241
-y(curren)m(t)33 b(F)-8 b(rame.)51 b(F)-8 b(or)34 b(example,)h(if)f(the)
-f(curren)m(t)g(F)-8 b(rame)35 b(is)e(a)h(SkyF)-8 b(rame)34
-b(\()p Fu(x)p FF(8\),)i(then)d(the)h(F)-8 b(rameSet)34
-b(will)0 5354 y(acquire)h(an)g(Equino)m(x)f(attribute)i(from)e(it)h
-(whic)m(h)g(can)g(b)s(e)f(set,)i(enquired,)f Fx(etc.)53
-b FF(Ho)m(w)m(ev)m(er,)38 b(if)d(the)g(curren)m(t)0 5467
-y(F)-8 b(rame)39 b(is)g(c)m(hanged)g(to)g(b)s(e)e(a)i(basic)g(F)-8
-b(rame,)41 b(whic)m(h)d(do)s(es)h(not)f(ha)m(v)m(e)i(an)e(Equino)m(x)g
-(attribute,)k(then)c(this)0 5580 y(attribute)30 b(will)f(b)s(e)f(absen)
-m(t)h(from)g(the)g(F)-8 b(rameSet)30 b(as)f(w)m(ell.)41
-b(An)m(y)29 b(attempt)h(to)g(reference)f(it)h(will)f(then)g(result)0
-5693 y(in)h(an)g(error.)p eop end
-%%Page: 117 127
-TeXDict begin 117 126 bop 0 52 a Fy(13.9)93 b(Extracting)31
-b(a)g(F)-8 b(rame)31 b(from)f(a)h(F)-8 b(rameSet)1917
-b FF(117)0 351 y Fw(13.9)112 b(Extracting)37 b(a)h(F)-9
-b(rame)38 b(from)g(a)g(F)-9 b(rameSet)0 573 y FF(Although)21
-b(a)h(F)-8 b(rameSet)22 b(ma)m(y)f(b)s(e)g(used)f(in)h(place)h(of)f
-(its)g(curren)m(t)g(F)-8 b(rame)22 b(in)f(most)g(situations,)j(it)d(is)
-g(sometimes)0 686 y(con)m(v)m(enien)m(t)31 b(to)e(ha)m(v)m(e)h(direct)f
-(access)h(to)g(a)f(sp)s(eci\014ed)f(F)-8 b(rame)30 b(within)e(it.)41
-b(This)28 b(ma)m(y)h(b)s(e)f(obtained)h(using)f(the)0
-799 y(astGetF)-8 b(rame)33 b(function,)d(as)h(follo)m(ws:)227
-1048 y Ft(frame)42 b(=)h(astGetFrame\()c(frameset,)g(AST__BASE)h(\);)0
-1310 y FF(This)29 b(w)m(ould)g(return)g(a)g(p)s(oin)m(ter)h(\(not)g(a)g
-(cop)m(y\))h(to)f(the)g(base)f(F)-8 b(rame)31 b(within)e(the)h(F)-8
-b(rameSet.)41 b(Note)31 b(the)f(use)0 1423 y(of)c(AST)p
-Fq(__)p FF(BASE)f(\()p Fu(x)p FF(13.5\))k(as)d(shorthand)f(for)h(the)g
-(v)-5 b(alue)26 b(of)h(the)f(F)-8 b(rameSet's)27 b(Base)g(attribute,)h
-(whic)m(h)e(giv)m(es)0 1536 y(the)31 b(base)f(F)-8 b(rame's)31
-b(index.)0 1829 y Fw(13.10)112 b(Remo)m(ving)38 b(a)g(F)-9
-b(rame)39 b(from)e(a)h(F)-9 b(rameSet)0 2050 y FF(Remo)m(ving)33
-b(a)f(F)-8 b(rame)32 b(from)f(a)h(F)-8 b(rameSet)33 b(is)e(straigh)m
-(tforw)m(ard)h(and)f(is)h(p)s(erformed)e(using)h(the)h(astRemo)m(v)m
-(e-)0 2163 y(F)-8 b(rame)26 b(function.)39 b(Y)-8 b(ou)25
-b(iden)m(tify)h(the)f(F)-8 b(rame)26 b(y)m(ou)f(wish)f(to)i(remo)m(v)m
-(e)h(in)d(the)h(usual)g(w)m(a)m(y)-8 b(,)28 b(b)m(y)d(giving)g(its)h
-(index)0 2276 y(within)k(the)g(F)-8 b(rameSet.)42 b(F)-8
-b(or)31 b(example,)h(the)e(follo)m(wing)i(w)m(ould)e(remo)m(v)m(e)i
-(the)f(F)-8 b(rame)31 b(with)f(index)g(1:)227 2525 y
-Ft(astRemoveFrame\()38 b(frameset,)i(1)j(\);)0 2788 y
-FF(The)35 b(only)g(restriction)h(is)g(that)g(y)m(ou)f(cannot)h(remo)m
-(v)m(e)h(the)f(last)g(remaining)f(F)-8 b(rame)36 b(b)s(ecause)g(a)f(F)
--8 b(rameSet)0 2901 y(m)m(ust)35 b(alw)m(a)m(ys)h(con)m(tain)g(at)f
-(least)h(one)f(F)-8 b(rame.)55 b(When)35 b(a)g(F)-8 b(rame)35
-b(is)g(remo)m(v)m(ed,)i(the)e(F)-8 b(rames)36 b(whic)m(h)e(follo)m(w)0
-3013 y(it)43 b(are)f(re-n)m(um)m(b)s(ered)f(\()p Fx(i.e.)h
-FF(their)g(indices)g(are)h(reduced)e(b)m(y)h(one\))h(so)f(as)g(to)h
-(preserv)m(e)g(the)f(sequence)g(of)0 3126 y(consecutiv)m(e)32
-b(F)-8 b(rame)32 b(indices.)40 b(The)30 b(F)-8 b(rameSet's)32
-b(Nframe)e(attribute)i(is)e(also)h(decremen)m(ted.)0
-3289 y(If)f(appropriate,)h(astRemo)m(v)m(eF)-8 b(rame)34
-b(will)d(mo)s(dify)f(the)g(F)-8 b(rameSet's)32 b(Base)g(and/or)e
-(Curren)m(t)g(attributes)h(so)0 3402 y(that)25 b(they)g(con)m(tin)m(ue)
-h(to)g(iden)m(tify)f(the)g(same)g(F)-8 b(rames)26 b(as)f(previously)-8
-b(.)39 b(If)24 b(either)h(the)g(base)g(or)g(curren)m(t)g(F)-8
-b(rame)0 3515 y(is)37 b(remo)m(v)m(ed,)j(ho)m(w)m(ev)m(er,)h(the)c
-(corresp)s(onding)f(attribute)i(will)g(b)s(ecome)f(un-set,)i(so)f(that)
-g(it)f(rev)m(erts)h(to)g(its)0 3628 y(default)31 b(v)-5
-b(alue)30 b(\()p Fu(x)p FF(13.4\))j(and)d(therefore)h(iden)m(ti\014es)g
-(an)f(alternativ)m(e)j(F)-8 b(rame.)0 3791 y(Note)38
-b(that)e(it)h(is)f(quite)h(p)s(ermissible)f(to)h(remo)m(v)m(e)g(an)m(y)
-g(F)-8 b(rame)37 b(from)f(a)g(F)-8 b(rameSet,)40 b(ev)m(en)d(although)f
-(other)0 3903 y(F)-8 b(rames)33 b(ma)m(y)g(app)s(ear)f(to)i(dep)s(end)c
-(on)j(it.)47 b(F)-8 b(or)34 b(example,)g(in)e(Figure)h(11,)h(if)f(F)-8
-b(rame)33 b(1)g(w)m(ere)g(remo)m(v)m(ed,)h(the)0 4016
-y(correct)h(relationship)f(b)s(et)m(w)m(een)g(F)-8 b(rames)35
-b(2)f(and)f(3)h(w)m(ould)f(still)i(b)s(e)e(preserv)m(ed,)i(although)f
-(they)g(w)m(ould)f(b)s(e)0 4129 y(re-n)m(um)m(b)s(ered)c(as)i(F)-8
-b(rames)31 b(1)g(and)f(2.)p eop end
-%%Page: 118 128
-TeXDict begin 118 127 bop 0 52 a FF(118)1175 b Fy(13)92
-b(COORDINA)-8 b(TE)30 b(SYSTEM)f(NETW)m(ORKS)h(\(FRAMESETS\))p
-eop end
-%%Page: 119 129
-TeXDict begin 119 128 bop 3643 52 a FF(119)0 351 y Fz(14)135
-b(Higher)46 b(Lev)l(el)g(Op)t(erations)f(on)g(F)-11 b(rameSets)0
-610 y Fw(14.1)112 b(Creating)38 b(F)-9 b(rameSets)39
-b(with)e(astCon)m(v)m(ert)0 834 y FF(Before)44 b(considering)e(the)h
-(imp)s(ortan)m(t)g(sub)5 b(ject)42 b(of)h(using)f(F)-8
-b(rameSets)44 b(to)f(con)m(v)m(ert)h(b)s(et)m(w)m(een)g(co)s(ordinate)0
-947 y(systems)c(\()p Fu(x)p FF(14.2\),)45 b(let)c(us)e(return)g
-(brie\015y)g(to)i(reconsider)f(the)g(output)g(generated)g(b)m(y)g
-(astCon)m(v)m(ert.)71 b(W)-8 b(e)0 1060 y(used)37 b(this)g(function)g
-(earlier)h(\()p Fu(x)p FF(12\),)j(when)36 b(con)m(v)m(erting)k(b)s(et)m
-(w)m(een)e(the)f(co)s(ordinate)h(systems)f(represen)m(ted)0
-1173 y(b)m(y)28 b(v)-5 b(arious)28 b(kinds)e(of)i(F)-8
-b(rame,)30 b(and)d(indicated)i(that)f(it)g(returns)f(a)h(F)-8
-b(rameSet)29 b(to)g(represen)m(t)f(the)g(co)s(ordinate)0
-1286 y(con)m(v)m(ersion)k(it)f(iden)m(ti\014es.)41 b(W)-8
-b(e)31 b(are)g(no)m(w)f(in)h(a)f(p)s(osition)h(to)g(examine)g(the)g
-(structure)e(of)i(this)f(F)-8 b(rameSet.)0 1451 y(T)g(ak)m(e)36
-b(our)d(earlier)i(example)g(\()p Fu(x)p FF(12.1\))i(of)d(con)m(v)m
-(erting)i(b)s(et)m(w)m(een)f(the)g(celestial)h(co)s(ordinate)f(systems)
-g(repre-)0 1564 y(sen)m(ted)c(b)m(y)f(t)m(w)m(o)i(SkyF)-8
-b(rames:)227 1818 y Ft(#include)41 b("ast.h")227 1918
-y(AstFrameSet)e(*cvt;)227 2018 y(AstSkyFrame)g(*skyframe1,)g
-(*skyframe2;)227 2217 y(...)227 2416 y(skyframe1)h(=)j(astSkyFrame\()c
-("System=FK4-NO-E)o(,)e(Epoch=B1958,)i(Equinox=B1960")f(\);)227
-2516 y(skyframe2)i(=)j(astSkyFrame\()c("System=Ecliptic)o(,)e
-(Equinox=J2010.5")g(\);)227 2715 y(cvt)43 b(=)g(astConvert\()c
-(skyframe1,)g(skyframe2,)h("")i(\);)0 2983 y FF(This)d(will)i(pro)s
-(duce)e(a)i(p)s(oin)m(ter,)i(\\cvt",)i(to)c(the)f(F)-8
-b(rameSet)42 b(sho)m(wn)d(in)h(Figure)h(12.)142 b(As)40
-b(can)g(b)s(e)g(seen,)717 4115 y @beginspecial 95 @llx
-389 @lly 528 @urx 576 @ury 2814 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsconvert.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4311 a(Figure)30 b(12:)41 b(The)30 b(F)-8
-b(rameSet)30 b(pro)s(duced)e(when)h(astCon)m(v)m(ert)i(is)f(used)f(to)h
-(con)m(v)m(ert)h(b)s(et)m(w)m(een)g(the)f(co)s(ordinate)0
-4424 y(systems)j(represen)m(ted)g(b)m(y)g(t)m(w)m(o)i(SkyF)-8
-b(rames.)49 b(The)33 b(source)h(SkyF)-8 b(rame)33 b(b)s(ecomes)h(the)f
-(base)g(F)-8 b(rame,)35 b(while)0 4537 y(the)28 b(destination)h(SkyF)-8
-b(rame)28 b(b)s(ecomes)g(the)g(curren)m(t)g(F)-8 b(rame.)41
-b(The)27 b(Mapping)h(b)s(et)m(w)m(een)g(them)g(implemen)m(ts)0
-4650 y(the)j(required)e(con)m(v)m(ersion.)0 4964 y(this)h(F)-8
-b(rameSet)32 b(con)m(tains)g(just)e(t)m(w)m(o)i(F)-8
-b(rames.)42 b(The)30 b(source)g(F)-8 b(rame)32 b(supplied)d(to)i
-(astCon)m(v)m(ert)h(b)s(ecomes)f(its)0 5077 y(base)e(F)-8
-b(rame,)30 b(while)f(the)g(destination)g(F)-8 b(rame)30
-b(b)s(ecomes)f(its)g(curren)m(t)f(F)-8 b(rame.)41 b(\(The)29
-b(F)-8 b(rameSet,)30 b(of)f(course,)0 5190 y(simply)g(holds)f(p)s(oin)m
-(ters)h(to)h(these)g(F)-8 b(rames,)30 b(rather)g(than)e(making)i
-(copies.\))41 b(The)29 b(Mapping)g(whic)m(h)g(relates)0
-5303 y(the)i(base)f(F)-8 b(rame)31 b(to)g(the)g(curren)m(t)f(F)-8
-b(rame)32 b(is)e(the)g(one)h(whic)m(h)f(implemen)m(ts)h(the)g(required)
-e(con)m(v)m(ersion.)0 5467 y(As)21 b(w)m(e)g(noted)g(earlier)h(\()p
-Fu(x)p FF(12.1\),)k(the)21 b(F)-8 b(rameSet)22 b(returned)e(b)m(y)h
-(astCon)m(v)m(ert)h(ma)m(y)f(b)s(e)g(used)f(b)s(oth)g(as)h(a)h(Mapping)
-0 5580 y(and)29 b(as)h(a)f(F)-8 b(rame)31 b(to)f(p)s(erform)e(most)i
-(of)f(the)h(functions)f(y)m(ou)h(are)g(lik)m(ely)h(to)f(need.)40
-b(Ho)m(w)m(ev)m(er,)32 b(the)e(Mapping)0 5693 y(ma)m(y)h(b)s(e)f
-(extracted)h(for)g(use)f(on)g(its)h(o)m(wn)f(if)g(necessary)-8
-b(,)32 b(using)e(astGetMapping)i(\()p Fu(x)p FF(13.7\),)h(for)d
-(example:)p eop end
-%%Page: 120 130
-TeXDict begin 120 129 bop 0 52 a FF(120)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)227
-351 y Ft(AstMapping)40 b(*mapping;)227 551 y(...)227
-750 y(mapping)h(=)i(astGetMapping\()38 b(cvt,)k(AST__BASE,)d
-(AST__CURRENT)g(\);)0 1036 y Fw(14.2)112 b(Con)m(v)m(erting)38
-b(b)s(et)m(w)m(een)g(F)-9 b(rameSet)38 b(Co)s(ordinate)g(Systems)0
-1253 y FF(W)-8 b(e)33 b(no)m(w)f(consider)f(the)h(pro)s(cess)f(of)h
-(con)m(v)m(erting)i(b)s(et)m(w)m(een)e(the)g(co)s(ordinate)g(systems)g
-(represen)m(ted)g(b)m(y)f(t)m(w)m(o)0 1366 y(F)-8 b(rameSets.)41
-b(This)27 b(is)g(a)h(most)g(imp)s(ortan)m(t)f(op)s(eration,)i(as)f(a)g
-(subsequen)m(t)f(example)h(\()p Fu(x)p FF(14.3\))i(will)e(sho)m(w,)g
-(and)0 1479 y(is)f(illustrated)h(in)f(Figure)h(13.)80
-b(Recalling)29 b(\()p Fu(x)p FF(13.8\))g(that)f(a)g(F)-8
-b(rameSet)28 b(will)g(b)s(eha)m(v)m(e)g(lik)m(e)g(its)g(curren)m(t)f(F)
--8 b(rame)0 1592 y(when)31 b(necessary)-8 b(,)34 b(con)m(v)m(ersion)g
-(b)s(et)m(w)m(een)f(t)m(w)m(o)h(F)-8 b(rameSets)33 b(is)g(p)s(erformed)
-e(using)g(astCon)m(v)m(ert)j(\()p Fu(x)p FF(12.1\),)i(but)0
-1705 y(supplying)28 b(p)s(oin)m(ters)i(to)g(F)-8 b(rameSets)31
-b(instead)f(of)g(F)-8 b(rames.)41 b(The)29 b(e\013ect)i(of)f(this)g(is)
-f(to)i(con)m(v)m(ert)g(b)s(et)m(w)m(een)f(the)0 1818
-y(co)s(ordinate)h(systems)g(represen)m(ted)f(b)m(y)g(the)h(curren)m(t)f
-(F)-8 b(rames)31 b(of)g(eac)m(h)g(F)-8 b(rameSet:)227
-2049 y Ft(AstFrameSet)39 b(*frameseta,)g(*framesetb;)227
-2248 y(...)227 2447 y(cvt)k(=)g(astConvert\()c(frameseta,)g(framesetb,)
-h("SKY")h(\);)0 2691 y FF(When)28 b(using)g(F)-8 b(rameSets,)31
-b(w)m(e)e(are)f(presen)m(ted)h(with)f(considerably)h(more)f(con)m(v)m
-(ersion)i(options)f(than)f(when)0 2804 y(using)36 b(F)-8
-b(rames)36 b(alone.)59 b(This)35 b(is)h(b)s(ecause)g(eac)m(h)h(curren)m
-(t)f(F)-8 b(rame)37 b(is)f(related)h(to)g(all)g(the)f(other)g(F)-8
-b(rames)37 b(in)0 2917 y(its)d(resp)s(ectiv)m(e)g(F)-8
-b(rameSet.)50 b(Therefore,)34 b(if)f(w)m(e)g(can)h(establish)f(a)h
-(link)f(b)s(et)m(w)m(een)h(an)m(y)f(pair)g(of)g(F)-8
-b(rames,)35 b(one)0 3030 y(from)c(eac)m(h)i(F)-8 b(rameSet,)34
-b(w)m(e)e(can)g(form)f(a)h(complete)h(con)m(v)m(ersion)g(path)f(b)s(et)
-m(w)m(een)g(the)g(t)m(w)m(o)h(curren)m(t)f(F)-8 b(rames)0
-3143 y(\(Figure)31 b(13\).)0 3301 y(This)39 b(expanded)f(range)i(of)g
-(options)g(is,)i(of)e(course,)i(precisely)e(the)g(in)m(ten)m(tion.)69
-b(By)40 b(connecting)h(F)-8 b(rames)0 3414 y(together)43
-b(within)d(a)h(F)-8 b(rameSet,)46 b(w)m(e)41 b(ha)m(v)m(e)h(extended)f
-(the)h(range)f(of)g(co)s(ordinate)h(systems)f(that)h(can)f(b)s(e)0
-3527 y(reac)m(hed)g(from)e(an)m(y)i(one)f(of)g(them.)70
-b(W)-8 b(e)42 b(are)e(therefore)h(no)f(longer)g(restricted)h(to)g(con)m
-(v)m(erting)h(b)s(et)m(w)m(een)0 3640 y(F)-8 b(rames)31
-b(with)f(the)g(same)g(Domain)h(v)-5 b(alue)30 b(\()p
-Fu(x)p FF(7.12\),)j(but)d(can)g(go)h Fx(via)f FF(a)g(range)h(of)f(in)m
-(termediate)i(co)s(ordinate)0 3753 y(systems)d(in)f(order)h(to)g(mak)m
-(e)h(the)f(connection)h(w)m(e)f(require.)40 b(T)-8 b(ransformation)29
-b(b)s(et)m(w)m(een)g(di\013eren)m(t)h(domains)0 3866
-y(has)c(therefore)h(b)s(ecome)g(p)s(ossible)f(b)s(ecause,)i(in)e(assem)
-m(bling)h(the)g(F)-8 b(rameSets,)29 b(w)m(e)e(pro)m(vided)f(the)h
-(additional)0 3979 y(information)k(needed)f(to)h(in)m(ter-relate)h
-(them.)0 4137 y(It)25 b(is)g(imp)s(ortan)m(t)h(to)f(appreciate,)j(ho)m
-(w)m(ev)m(er,)g(that)d(the)h(c)m(hoice)h(of)e(\\missing)g(link")h(is)f
-(crucial)h(in)f(determining)0 4250 y(the)j(con)m(v)m(ersion)h(that)f
-(results.)39 b(Although)28 b(eac)m(h)h(F)-8 b(rameSet)29
-b(ma)m(y)f(b)s(e)f(p)s(erfectly)g(self-consisten)m(t)j(in)m(ternally)-8
-b(,)0 4363 y(this)36 b(do)s(es)g(not)h(mean)f(that)h(all)h(con)m(v)m
-(ersion)f(paths)f(through)g(the)h(com)m(bined)f(net)m(w)m(ork)h(of)g
-(Mappings)f(are)0 4475 y(equiv)-5 b(alen)m(t.)53 b(Quite)35
-b(the)f(con)m(trary)h(in)e(fact:)49 b(ev)m(erything)35
-b(dep)s(ends)e(on)h(where)f(the)h(in)m(ter-connecting)j(link)0
-4588 y(b)s(et)m(w)m(een)43 b(the)g(t)m(w)m(o)h(F)-8 b(rameSets)43
-b(is)g(made.)77 b(In)42 b(practice,)47 b(there)c(ma)m(y)g(b)s(e)f(a)g
-(large)i(n)m(um)m(b)s(er)d(of)i(p)s(ossible)0 4701 y(pairings)30
-b(of)h(F)-8 b(rames)31 b(and)e(hence)i(of)f(p)s(ossible)g(links.)41
-b(Other)29 b(factors)j(m)m(ust)e(therefore)g(b)s(e)g(used)g(to)h
-(restrict)0 4814 y(the)g(c)m(hoice.)42 b(These)30 b(are:)111
-5058 y(1.)46 b(Not)g(ev)m(ery)g(p)s(ossible)e(pairing)h(of)h(F)-8
-b(rames)45 b(is)g(legitimate.)88 b(F)-8 b(or)45 b(example,)50
-b(y)m(ou)45 b(cannot)h(con)m(v)m(ert)227 5171 y(directly)30
-b(b)s(et)m(w)m(een)h(a)e(basic)h(F)-8 b(rame)31 b(and)e(a)g(SkyF)-8
-b(rame)30 b(whic)m(h)f(b)s(elong)h(to)g(di\013eren)m(t)g(classes,)h(so)
-f(suc)m(h)227 5284 y(pairings)g(will)h(b)s(e)f(ignored.)111
-5467 y(2.)46 b(In)24 b(a)h(similar)g(w)m(a)m(y)-8 b(,)27
-b(y)m(ou)e(cannot)g(con)m(v)m(ert)i(directly)e(b)s(et)m(w)m(een)g(F)-8
-b(rames)25 b(with)g(di\013eren)m(t)g(Domain)g(v)-5 b(alues)227
-5580 y(\()p Fu(x)p FF(7.12\).)66 b(If)38 b(the)g(Domain)g(attribute)h
-(is)f(used)f(consisten)m(tly)j(\(t)m(ypically)g(only)e(one)g(F)-8
-b(rame)39 b(in)e(eac)m(h)227 5693 y(F)-8 b(rameSet)32
-b(will)f(ha)m(v)m(e)g(a)g(particular)g(Domain)g(v)-5
-b(alue\),)31 b(then)f(this)h(further)e(restricts)i(the)f(c)m(hoice.)p
-eop end
-%%Page: 121 131
-TeXDict begin 121 130 bop 0 52 a Fy(14.2)93 b(Con)m(v)m(erting)31
-b(b)s(et)m(w)m(een)g(F)-8 b(rameSet)32 b(Co)s(ordinate)e(Systems)1372
-b FF(121)565 4227 y @beginspecial 36 @llx 91 @lly 566
- at urx 744 @ury 3180 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsalign.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4422 a(Figure)38 b(13:)57 b(Con)m(v)m(ersion)38
-b(b)s(et)m(w)m(een)h(t)m(w)m(o)g(F)-8 b(rameSets)39 b(is)e(p)s
-(erformed)g(b)m(y)g(establishing)i(a)f(link)g(b)s(et)m(w)m(een)g(a)0
-4535 y(pair)e(of)g(F)-8 b(rames,)38 b(one)e(from)f(eac)m(h)i(F)-8
-b(rameSet.)59 b(If)35 b(con)m(v)m(ersion)i(b)s(et)m(w)m(een)g(these)f
-(t)m(w)m(o)h(F)-8 b(rames)37 b(is)f(p)s(ossible,)0 4648
-y(then)26 b(a)g(route)g(for)g(con)m(v)m(erting)i(b)s(et)m(w)m(een)e
-(the)h(curren)m(t)e(F)-8 b(rames)27 b(of)f(b)s(oth)g(F)-8
-b(rameSets)27 b(can)f(also)h(b)s(e)e(found.)38 b(In)0
-4761 y(practice,)33 b(there)f(ma)m(y)f(b)s(e)g(man)m(y)h(w)m(a)m(ys)g
-(of)f(pairing)g(F)-8 b(rames)32 b(to)g(\014nd)e(the)i(\\missing)f
-(link",)h(so)g(the)f(F)-8 b(rames')0 4874 y(Domain)31
-b(attribute)g(ma)m(y)g(b)s(e)f(used)g(to)h(narro)m(w)f(the)g(c)m
-(hoice.)p eop end
-%%Page: 122 132
-TeXDict begin 122 131 bop 0 52 a FF(122)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)111
-351 y FF(3.)46 b(The)34 b(third)g(argumen)m(t)g(of)h(astCon)m(v)m(ert)h
-(ma)m(y)f(then)f(b)s(e)f(used)h(to)h(sp)s(ecify)f(explicitly)i(whic)m
-(h)e(Domain)227 464 y(v)-5 b(alue)41 b(the)g(paired)f(F)-8
-b(rames)42 b(should)d(ha)m(v)m(e.)73 b(Y)-8 b(ou)41 b(ma)m(y)g(also)h
-(supply)d(a)i(comma-separated)h(list)f(of)227 577 y(preferences)30
-b(here)h(\(see)g(b)s(elo)m(w\).)111 769 y(4.)46 b(If)24
-b(the)h(ab)s(o)m(v)m(e)h(steps)e(fail)h(to)g(uniquely)f(iden)m(tify)h
-(the)f(link,)i(then)e(the)h(\014rst)f(suitable)h(pairing)f(of)h(F)-8
-b(rames)227 882 y(is)29 b(used,)f(so)h(that)g(an)m(y)g(am)m(biguit)m(y)
-h(is)f(resolv)m(ed)h(b)m(y)e(the)h(order)f(in)g(whic)m(h)h(F)-8
-b(rames)29 b(are)g(considered)g(for)227 995 y(pairing)37
-b(\(see)g(the)g(description)f(of)h(the)g(astCon)m(v)m(ert)h(function)e
-(in)g(App)s(endix)f(B)i(for)f(details)i(of)e(the)227
-1108 y(searc)m(h)31 b(order\).)771 1075 y Fv(21)0 1376
-y FF(In)e(the)i(example)f(ab)s(o)m(v)m(e)i(w)m(e)e(supplied)f(the)h
-(string)g(\\SKY")h(as)f(the)g(third)f(argumen)m(t)i(of)f(astCon)m(v)m
-(ert.)42 b(This)0 1489 y(constitutes)23 b(a)f(request)g(that)g(a)g
-(pair)f(of)h(F)-8 b(rames)23 b(with)e(the)h(Domain)g(v)-5
-b(alue)23 b(SKY)e(\()p Fx(i.e.)g FF(represen)m(ting)h(celestial)0
-1602 y(co)s(ordinate)33 b(systems\))f(should)f(b)s(e)h(used)f(to)h(in)m
-(ter-relate)j(the)d(t)m(w)m(o)h(F)-8 b(rameSets.)47 b(Note)33
-b(that)g(this)f(do)s(es)f(not)0 1715 y(sp)s(ecify)25
-b(whic)m(h)h(celestial)i(co)s(ordinate)f(system)f(to)g(use,)h(but)e(is)
-h(a)g(general)h(request)f(that)g(the)g(t)m(w)m(o)h(F)-8
-b(rameSets)0 1828 y(b)s(e)30 b(in)m(ter-related)i(using)e(co)s
-(ordinates)h(on)f(the)h(celestial)i(sphere.)0 1992 y(Of)28
-b(course,)i(it)f(ma)m(y)g(b)s(e)f(that)i(this)e(request)h(cannot)g(b)s
-(e)f(met)h(b)s(ecause)g(there)g(ma)m(y)g(not)g(b)s(e)f(a)i(celestial)h
-(co)s(or-)0 2105 y(dinate)d(system)g(in)g(b)s(oth)f(F)-8
-b(rameSets.)41 b(If)28 b(this)f(is)h(lik)m(ely)i(to)e(happ)s(en,)f(w)m
-(e)i(can)f(supply)e(a)j(list)f(of)g(preferences,)0 2218
-y(or)i(a)h Fx(domain)j(se)-5 b(ar)g(ch)35 b(p)-5 b(ath,)32
-b FF(as)e(the)h(third)f(argumen)m(t)g(to)h(astCon)m(v)m(ert,)i(suc)m(h)
-d(as)g(the)h(follo)m(wing:)227 2473 y Ft(cvt)43 b(=)g(astConvert\()c
-(frameseta,)g(framesetb,)h("SKY,PIXEL,GRID,)o(")d(\);)0
-2742 y FF(No)m(w,)49 b(if)44 b(the)g(t)m(w)m(o)i(F)-8
-b(rameSets)45 b(cannot)g(b)s(e)f(in)m(ter-related)i(using)e(the)g(SKY)g
-(domain,)j(astCon)m(v)m(ert)f(will)0 2855 y(attempt)36
-b(to)f(use)f(the)h(PIXEL)f(domain)h(instead.)54 b(If)34
-b(this)g(also)i(fails,)g(it)g(will)f(try)f(the)h(GRID)g(domain.)53
-b(A)0 2968 y(blank)33 b(\014eld)g(in)g(the)g(domain)h(searc)m(h)g(path)
-f(\(here)g(indicated)h(b)m(y)f(the)h(\014nal)f(comma\))h(allo)m(ws)h
-(an)m(y)f(Domain)0 3081 y(v)-5 b(alue)31 b(to)g(b)s(e)f(used.)40
-b(This)29 b(can)i(b)s(e)f(emplo)m(y)m(ed)h(as)g(a)f(last)i(resort)e
-(when)g(all)h(else)g(has)f(failed.)0 3245 y(If)d(astCon)m(v)m(ert)j
-(succeeds)e(in)g(iden)m(tifying)g(a)h(con)m(v)m(ersion,)h(it)e(will)g
-(return)f(a)i(p)s(oin)m(ter)f(to)g(a)h(F)-8 b(rameSet)29
-b(\()p Fu(x)p FF(14.1\))0 3358 y(in)36 b(whic)m(h)g(the)g(source)g(and)
-g(destination)h(F)-8 b(rames)36 b(are)h(in)m(ter-connected)h(b)m(y)e
-(the)g(required)f(Mapping.)58 b(In)0 3471 y(this)35 b(case,)i(of)e
-(course,)h(these)g(F)-8 b(rames)35 b(will)g(b)s(e)f(the)h(curren)m(t)g
-(F)-8 b(rames)36 b(of)f(the)g(t)m(w)m(o)h(F)-8 b(rameSets,)37
-b(but)d(in)h(all)0 3584 y(other)c(resp)s(ects)f(the)g(returned)g(F)-8
-b(rameSet)31 b(is)g(the)f(same)h(as)g(when)e(con)m(v)m(erting)j(b)s(et)
-m(w)m(een)f(F)-8 b(rames.)0 3749 y(V)g(ery)30 b(imp)s(ortan)m(tly)-8
-b(,)32 b(ho)m(w)m(ev)m(er,)f(astCon)m(v)m(ert)h(ma)m(y)e(mo)s(dify)f
-(the)h(F)-8 b(rameSets)31 b(y)m(ou)g(are)f(con)m(v)m(erting)i(b)s(et)m
-(w)m(een.)0 3862 y(It)41 b(do)s(es)g(this,)i(in)e(order)f(to)i
-(indicate)g(whic)m(h)e(pairing)h(of)g(F)-8 b(rames)42
-b(w)m(as)f(used)f(to)i(in)m(ter-relate)h(them,)h(b)m(y)0
-3975 y(c)m(hanging)34 b(the)f(Base)h(attribute)f(for)g(eac)m(h)h(F)-8
-b(rameSet)34 b(so)f(that)h(the)f(F)-8 b(rame)34 b(used)e(in)g(the)h
-(pairing)g(b)s(ecomes)0 4088 y(its)e(base)f(F)-8 b(rame)32
-b(\()p Fu(x)p FF(13.4\).)0 4252 y(Finally)-8 b(,)31 b(note)e(that)h
-(astCon)m(v)m(ert)g(ma)m(y)g(also)g(b)s(e)e(used)g(to)i(con)m(v)m(ert)g
-(b)s(et)m(w)m(een)g(a)f(F)-8 b(rameSet)30 b(and)f(a)g(F)-8
-b(rame,)30 b(or)0 4365 y Fx(vic)-5 b(e)38 b(versa.)58
-b FF(If)36 b(a)g(p)s(oin)m(ter)g(to)h(a)g(F)-8 b(rame)37
-b(is)f(supplied)f(for)h(either)h(the)f(\014rst)g(or)g(second)g(argumen)
-m(t,)i(it)f(will)0 4478 y(b)s(eha)m(v)m(e)31 b(lik)m(e)h(a)e(F)-8
-b(rameSet)32 b(con)m(taining)g(only)e(a)h(single)g(F)-8
-b(rame.)0 4778 y Fw(14.3)112 b(Example|Registering)39
-b(Tw)m(o)e(Images)0 5003 y FF(Consider)26 b(t)m(w)m(o)j(images)f(whic)m
-(h)f(ha)m(v)m(e)h(b)s(een)e(calibrated)j(b)m(y)e(attac)m(hing)i(F)-8
-b(rameSets)28 b(to)g(them,)g(suc)m(h)f(that)g(the)0 5116
-y(base)33 b(F)-8 b(rame)33 b(of)g(eac)m(h)h(F)-8 b(rameSet)34
-b(corresp)s(onds)d(to)i(the)g(ra)m(w)g(data)g(grid)f(co)s(ordinates)i
-(of)e(eac)m(h)i(image)g(\(the)0 5229 y(GRID)i(domain)f(of)h
-Fu(x)p FF(7.13\).)58 b(Supp)s(ose,)35 b(also,)j(that)e(these)g(F)-8
-b(rameSets)36 b(con)m(tain)h(an)e(unkno)m(wn)f(n)m(um)m(b)s(er)g(of)0
-5342 y(other)26 b(F)-8 b(rames,)28 b(represen)m(ting)e(alternativ)m(e)i
-(w)m(orld)d(co)s(ordinate)i(systems.)39 b(What)27 b(w)m(e)f(wish)f(to)h
-(do)g(is)g(register)p 0 5425 1512 4 v 73 5479 a Fs(21)138
-5510 y Fr(If)d(y)n(ou)f(\014nd)f(that)i(ho)n(w)g(this)f(am)n(biguit)n
-(y)h(is)g(resolv)n(ed)g(actually)g(mak)n(es)g(a)f(di\013erence)h(to)g
-(the)f(con)n(v)n(ersion)h(that)f(results,)i(then)0 5602
-y(y)n(ou)30 b(ha)n(v)n(e)g(probably)h(constructed)f(a)i(F)-6
-b(rameSet)30 b(whic)n(h)h(lac)n(ks)h(in)n(ternal)f(self-consistency)-6
-b(.)50 b(F)-6 b(or)31 b(example,)i(y)n(ou)d(migh)n(t)h(ha)n(v)n(e)0
-5693 y(t)n(w)n(o)26 b(F)-6 b(rames)26 b(represen)n(ting)g
-(indistinguishable)h(co)r(ordinate)g(systems)f(but)e(in)n(ter-related)i
-(b)n(y)f(a)h(non-n)n(ull)f(Mapping.)p eop end
-%%Page: 123 133
-TeXDict begin 123 132 bop 0 52 a Fy(14.3)93 b(Example|Registering)31
-b(Tw)m(o)g(Images)1996 b FF(123)0 351 y(these)34 b(t)m(w)m(o)h(images,)
-g(suc)m(h)e(that)h(w)m(e)g(can)g(transform)f(from)g(a)h(p)s(osition)f
-(in)g(the)h(data)g(grid)f(of)h(one)g(in)m(to)g(the)0
-464 y(corresp)s(onding)e(p)s(osition)h(in)g(the)h(data)g(grid)f(of)g
-(the)g(other.)50 b(This)32 b(is)i(a)f(v)m(ery)h(practical)h(example)e
-(b)s(ecause)0 577 y(images)e(will)g(t)m(ypically)h(b)s(e)e(calibrated)i
-(using)e(F)-8 b(rameSets)31 b(in)f(precisely)h(this)f(w)m(a)m(y)-8
-b(.)0 730 y(The)33 b(\014rst)f(step)h(will)g(probably)g(in)m(v)m(olv)m
-(e)i(making)e(a)h(cop)m(y)g(of)f(b)s(oth)f(F)-8 b(rameSets)34
-b(\(using)f(astCop)m(y|)p Fu(x)p FF(4.13\),)0 843 y(since)e(w)m(e)g
-(will)g(b)s(e)e(mo)s(difying)h(them.)41 b(Let)31 b(\\frameseta")i(and)d
-(\\framesetb")h(b)s(e)f(p)s(oin)m(ters)g(to)h(these)g(copies.)0
-956 y(Since)42 b(w)m(e)h(w)m(an)m(t)g(to)g(con)m(v)m(ert)h(b)s(et)m(w)m
-(een)f(the)f(base)h(F)-8 b(rames)43 b(of)f(these)h(F)-8
-b(rameSets)43 b(\()p Fx(i.e.)f FF(their)h(data)g(grid)0
-1069 y(co)s(ordinates\),)36 b(the)e(next)g(step)g(is)f(to)i(mak)m(e)g
-(these)f(F)-8 b(rames)34 b(curren)m(t.)51 b(This)33 b(is)h(simply)f
-(done)h(b)m(y)f(in)m(v)m(erting)0 1181 y(b)s(oth)d(F)-8
-b(rameSets,)32 b(whic)m(h)f(in)m(terc)m(hanges)h(their)f(base)g(and)f
-(curren)m(t)h(F)-8 b(rames.)43 b(astIn)m(v)m(ert)32 b(will)f(p)s
-(erform)f(this)0 1294 y(task:)227 1504 y Ft(astInvert\()40
-b(frameseta)g(\);)227 1603 y(astInvert\()g(framesetb)g(\);)0
-1826 y FF(T)-8 b(o)28 b(iden)m(tify)h(the)f(required)f(con)m(v)m
-(ersion,)j(w)m(e)f(no)m(w)f(use)f(astCon)m(v)m(ert,)j(supplying)d(a)i
-(suitable)f(domain)g(searc)m(h)0 1939 y(path)i(with)g(whic)m(h)g(w)m(e)
-h(w)m(ould)f(lik)m(e)i(our)e(t)m(w)m(o)i(images)f(to)g(b)s(e)f
-(registered:)227 2148 y Ft(cvt)43 b(=)g(astConvert\()c(frameseta,)g
-(framesetb,)h("SKY,PIXEL,GRID")d(\);)227 2248 y(if)43
-b(\()g(cvt)g(==)f(AST__NULL)e(\))j({)358 2347 y(<no)f(conversion)e(was)
-i(possible>)227 2447 y(})h(else)f({)358 2546 y(<conversion)d(was)j
-(possible>)227 2646 y(})0 2869 y FF(The)30 b(e\013ects)i(of)e(this)g
-(are:)111 3091 y(1.)46 b(astCon)m(v)m(ert)d(\014rst)e(attempts)i(to)f
-(register)h(the)f(t)m(w)m(o)h(images)f(on)g(the)g(celestial)i(sphere)d
-(\()p Fx(i.e.)g FF(using)227 3204 y(the)33 b(SKY)f(domain\).)47
-b(T)-8 b(o)32 b(do)h(this,)g(it)g(searc)m(hes)g(for)f(a)h(celestial)i
-(co)s(ordinate)e(system,)g(although)g(not)227 3317 y(necessarily)f(the)
-g(same)g(one,)g(attac)m(hed)h(to)f(eac)m(h)g(image.)45
-b(If)31 b(it)h(\014nds)e(a)h(suitable)h(pair)f(of)h(co)s(ordinate)227
-3430 y(systems,)f(it)g(then)f(registers)h(the)g(images)g(b)m(y)f(matc)m
-(hing)i(corresp)s(onding)d(p)s(ositions)h(on)h(the)f(sky)-8
-b(.)111 3607 y(2.)46 b(If)33 b(this)f(fails,)j(astCon)m(v)m(ert)f(next)
-f(tries)g(to)h(matc)m(h)f(p)s(ositions)g(in)g(the)g(PIXEL)f(domain)h
-(\()p Fu(x)p FF(7.12\).)51 b(If)32 b(it)227 3720 y(succeeds,)27
-b(the)f(t)m(w)m(o)g(images)h(will)f(then)f(b)s(e)f(registered)j(so)e
-(that)h(their)f(corresp)s(onding)g(pixel)h(p)s(ositions)227
-3833 y(corresp)s(ond.)38 b(If)24 b(the)h(PIXEL)f(domain)g(is)h
-(o\013set)g(from)f(the)h(data)g(grid)f(\(as)h(t)m(ypically)i(happ)s
-(ens)c(in)h(data)227 3946 y(reduction)i(systems)g(whic)m(h)f(implemen)m
-(t)i(a)f(\\pixel)g(origin"\),)j(then)c(this)h(will)g(b)s(e)f(correctly)
-i(accoun)m(ted)227 4059 y(for.)111 4237 y(3.)46 b(If)26
-b(this)h(also)h(fails,)g(the)f(GRID)g(domain)f(is)h(\014nally)f(used.)
-39 b(This)26 b(will)h(result)f(in)h(image)g(registration)i(b)m(y)227
-4350 y(matc)m(hing)36 b(corresp)s(onding)d(p)s(oin)m(ts)i(in)f(the)h
-(data)g(grids)f(used)g(b)m(y)h(b)s(oth)f(images.)54 b(This)34
-b(means)g(they)227 4463 y(will)d(b)s(e)f(aligned)h(so)f(that)h(the)g
-(\014rst)f(elemen)m(t)h(their)g(data)g(arra)m(ys)g(corresp)s(ond.)111
-4640 y(4.)46 b(If)27 b(all)i(of)e(the)h(ab)s(o)m(v)m(e)g(fail,)h
-(astCon)m(v)m(ert)g(will)f(return)f(the)g(v)-5 b(alue)28
-b(AST)p Fq(__)p FF(NULL.)e(Otherwise)i(a)f(p)s(oin)m(ter)227
-4753 y(to)k(a)g(F)-8 b(rameSet)32 b(will)e(b)s(e)g(returned.)0
-4976 y(The)35 b(resulting)g(\\cvt")i(F)-8 b(rameSet)36
-b(ma)m(y)g(then)f(b)s(e)g(used)f(directly)i(\()p Fu(x)p
-FF(12.1\))i(to)e(con)m(v)m(ert)h(b)s(et)m(w)m(een)f(p)s(ositions)0
-5089 y(in)f(the)h(data)g(grid)g(of)f(the)h(\014rst)f(image)i(and)e
-(corresp)s(onding)g(p)s(ositions)g(in)g(the)h(data)g(grid)g(of)g(the)f
-(second)0 5202 y(image.)0 5354 y(T)-8 b(o)30 b(determine)f(whic)m(h)h
-(domain)f(w)m(as)h(used)e(to)i(ac)m(hiev)m(e)i(registration,)f(w)m(e)f
-(can)g(use)f(the)h(fact)g(that)g(the)f(Base)0 5467 y(attribute)40
-b(of)g(eac)m(h)h(F)-8 b(rameSet)41 b(is)f(set)g(b)m(y)g(astCon)m(v)m
-(ert)h(to)g(indicate)g(whic)m(h)e(in)m(termediate)i(F)-8
-b(rames)41 b(w)m(ere)0 5580 y(used.)72 b(W)-8 b(e)43
-b(can)e(therefore)h(simply)e(in)m(v)m(ert)i(either)g(F)-8
-b(rameSet)42 b(\(to)h(mak)m(e)f(its)f(base)h(F)-8 b(rame)42
-b(b)s(ecome)f(the)0 5693 y(curren)m(t)30 b(one\))h(and)f(then)g
-(enquire)g(the)h(Domain)g(v)-5 b(alue:)p eop end
-%%Page: 124 134
-TeXDict begin 124 133 bop 0 52 a FF(124)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)227
-351 y Ft(const)42 b(char)g(*domain;)227 551 y(...)227
-750 y(astInvert\()e(frameseta)g(\);)227 849 y(domain)h(=)j(astGetC\()c
-(frameseta,)f("Domain")i(\);)0 1073 y FF(If)30 b(con)m(v)m(ersion)i(w)m
-(as)e(successful,)h(the)f(result)h(will)f(b)s(e)g(one)h(of)f(the)h
-(strings)f(\\SKY",)h(\\PIXEL")f(or)h(\\GRID".)0 1352
-y Fw(14.4)112 b(Re-De\014ning)39 b(a)f(F)-9 b(rameSet)38
-b(Co)s(ordinate)g(System)0 1564 y FF(As)44 b(discussed)f(earlier)h(\()p
-Fu(x)p FF(13.4\),)51 b(an)43 b(imp)s(ortan)m(t)h(application)i(of)e(a)g
-(F)-8 b(rameSet)45 b(is)f(to)g(allo)m(w)i(co)s(ordinate)0
-1677 y(system)40 b(information)g(to)g(b)s(e)f(attac)m(hed)i(to)g(en)m
-(tities)g(suc)m(h)e(as)h(images)h(in)e(order)g(to)i(calibrate)g(them.)
-68 b(In)0 1790 y(addition,)33 b(one)f(of)g(the)g(main)f(ob)5
-b(jectiv)m(es)34 b(of)e(AST)f(is)h(to)h(simplify)e(the)h(propagation)h
-(of)f(suc)m(h)f(information)0 1903 y(through)i(successiv)m(e)i(stages)g
-(of)f(data)h(pro)s(cessing,)f(so)g(that)h(it)f(remains)f(consisten)m(t)
-j(with)d(the)h(asso)s(ciated)0 2016 y(image)e(data.)0
-2169 y(In)k(suc)m(h)h(a)h(situation,)i(the)d(F)-8 b(rameSet's)38
-b(base)g(F)-8 b(rame)38 b(w)m(ould)e(corresp)s(ond)g(with)h(the)g
-(image's)i(data)f(grid)0 2282 y(co)s(ordinates)k(and)e(its)h(other)g(F)
--8 b(rames)42 b(\(if)f(an)m(y\))h(with)f(the)g(v)-5 b(arious)41
-b(alternativ)m(e)i(w)m(orld)e(co)s(ordinate)h(sys-)0
-2395 y(tems)37 b(asso)s(ciated)h(with)f(the)g(image.)61
-b(If)36 b(the)h(data)g(pro)s(cessing)g(b)s(eing)f(p)s(erformed)f(do)s
-(es)h(not)h(c)m(hange)h(the)0 2508 y(relationship)31
-b(b)s(et)m(w)m(een)h(the)f(image's)i(data)e(grid)g(co)s(ordinates)h
-(and)e(an)m(y)h(of)h(the)f(asso)s(ciated)h(w)m(orld)f(co)s(ordi-)0
-2621 y(nate)g(systems,)g(then)f(propagation)i(of)e(the)h(W)m(CS)g
-(information)g(is)f(straigh)m(tforw)m(ard)h(and)f(simply)g(in)m(v)m
-(olv)m(es)0 2734 y(cop)m(ying)h(the)g(F)-8 b(rameSet)31
-b(asso)s(ciated)h(with)e(the)h(image.)0 2887 y(If)e(an)m(y)i(of)f
-(these)g(relationships)g(c)m(hange,)h(ho)m(w)m(ev)m(er,)h(then)d
-(corresp)s(onding)g(c)m(hanges)i(m)m(ust)f(b)s(e)f(made)h(to)g(the)0
-3000 y(w)m(a)m(y)j(F)-8 b(rames)33 b(within)e(the)h(F)-8
-b(rameSet)33 b(are)f(in)m(ter-related.)48 b(By)32 b(far)f(the)h(most)h
-(common)f(case)h(o)s(ccurs)e(when)0 3112 y(the)i(image)g(undergo)s(es)f
-(some)h(geometrical)i(transformation)e(resulting)f(in)h(\\re-gridding")
-g(on)f(to)h(another)0 3225 y(data)e(grid,)f(but)g(the)h(same)f
-(principles)g(can)h(b)s(e)f(applied)g(to)h(an)m(y)g(re-de\014nition)f
-(of)h(a)f(co)s(ordinate)i(system.)0 3378 y(T)-8 b(o)34
-b(pursue)d(the)i(re-gridding)g(example,)i(w)m(e)e(w)m(ould)g(need)g(to)
-h(mo)s(dify)e(our)h(F)-8 b(rameSet)34 b(to)g(accoun)m(t)g(for)f(the)0
-3491 y(fact)27 b(that)f(the)g(image's)h(data)f(grid)g(co)s(ordinate)g
-(system)g(\(corresp)s(onding)f(to)h(the)g(F)-8 b(rameSet's)27
-b(base)f(F)-8 b(rame\))0 3604 y(has)30 b(c)m(hanged.)41
-b(Lo)s(oking)31 b(at)g(the)g(steps)f(needed)g(in)g(detail,)i(w)m(e)f
-(migh)m(t)g(pro)s(ceed)f(as)h(follo)m(ws:)111 3828 y(1.)46
-b(Create)34 b(a)f(Mapping)g(whic)m(h)g(represen)m(ts)g(the)g
-(relationship)g(b)s(et)m(w)m(een)h(the)f(original)h(data)g(grid)f(co)s
-(or-)227 3941 y(dinate)e(system)g(and)e(the)i(new)f(one.)111
-4119 y(2.)46 b(Obtain)37 b(a)h(F)-8 b(rame)38 b(to)h(represen)m(t)e
-(the)g(new)g(data)h(grid)g(co)s(ordinate)g(system)f(\(w)m(e)h(could)g
-(re-use)f(the)227 4232 y(original)32 b(base)e(F)-8 b(rame)32
-b(here,)e(using)g(astGetF)-8 b(rame)33 b(to)e(obtain)g(a)g(p)s(oin)m
-(ter)f(to)h(it\).)111 4410 y(3.)46 b(Add)e(the)g(new)g(F)-8
-b(rame)45 b(to)g(the)f(F)-8 b(rameSet,)49 b(related)c(to)g(the)g
-(original)g(base)f(F)-8 b(rame)45 b(b)m(y)g(the)f(new)227
-4523 y(Mapping.)39 b(This)24 b(F)-8 b(rame)26 b(no)m(w)e(represen)m(ts)
-h(the)g(new)f(data)h(grid)g(co)s(ordinate)g(system)g(and)f(is)h
-(correctly)227 4636 y(related)32 b(to)f(all)g(the)f(other)h(F)-8
-b(rames)31 b(presen)m(t.)1788 4603 y Fv(22)111 4814 y
-FF(4.)46 b(Remo)m(v)m(e)32 b(the)f(original)h(base)e(F)-8
-b(rame)31 b(\(represen)m(ting)g(the)g(old)f(data)i(grid)e(co)s
-(ordinate)h(system\).)111 4992 y(5.)46 b(Mak)m(e)32 b(the)f(new)f(F)-8
-b(rame)31 b(the)g(base)f(F)-8 b(rame)31 b(and)f(restore)h(the)g
-(original)g(curren)m(t)f(F)-8 b(rame.)0 5216 y(The)28
-b(e\013ect)j(of)e(these)h(steps)f(is)g(to)g(c)m(hange)h(the)g
-(relationship)f(b)s(et)m(w)m(een)h(the)f(base)g(F)-8
-b(rame)30 b(and)e(all)i(the)f(other)0 5329 y(F)-8 b(rames)33
-b(presen)m(t.)48 b(It)33 b(is)f(as)h(if)g(a)g(new)f(Mapping)h(has)f(b)s
-(een)g(in)m(terp)s(osed)g(b)s(et)m(w)m(een)i(the)f(F)-8
-b(rame)33 b(w)m(e)g(w)m(an)m(t)h(to)0 5442 y(alter)d(and)f(all)h(the)g
-(other)g(F)-8 b(rames)31 b(within)f(the)g(F)-8 b(rameSet)32
-b(\(Figure)f(14\).)p 0 5516 1512 4 v 73 5570 a Fs(22)138
-5602 y Fr(This)d(is)g(b)r(ecause)f(an)n(y)g(transformation)i(to)e(or)h
-(from)g(this)f(new)g(F)-6 b(rame)28 b(m)n(ust)f(go)h
-Fg(via)f Fr(the)f(base)i(F)-6 b(rame)27 b(represen)n(ting)h(the)0
-5693 y(original)f(data)f(grid)g(co)r(ordinate)h(system,)f(whic)n(h)g(w)
-n(e)g(assume)g(w)n(as)h(correctly)f(related)h(to)e(all)i(the)e(other)h
-(F)-6 b(rames)26 b(presen)n(t.)p eop end
-%%Page: 125 135
-TeXDict begin 125 134 bop 0 52 a Fy(14.5)93 b(Example|Binning)30
-b(an)g(Image)2245 b FF(125)780 1770 y @beginspecial 107
- at llx 245 @lly 551 @urx 547 @ury 2664 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsremap.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 1966 a(Figure)28 b(14:)40 b(The)26 b(e\013ect)j(of)e
-(astRemapF)-8 b(rame)29 b(is)e(to)h(in)m(terp)s(ose)f(a)h(Mapping)f(b)s
-(et)m(w)m(een)h(a)f(nominated)h(F)-8 b(rame)0 2079 y(within)25
-b(a)h(F)-8 b(rameSet)27 b(and)f(the)g(remaining)g(con)m(ten)m(ts)h(of)f
-(the)g(F)-8 b(rameSet.)40 b(This)25 b(e\013ectiv)m(ely)k
-(\\re-de\014nes")d(the)0 2192 y(co)s(ordinate)34 b(system)g(represen)m
-(ted)f(b)m(y)g(the)g(a\013ected)i(F)-8 b(rame.)51 b(It)33
-b(ma)m(y)h(b)s(e)f(used)f(to)i(comp)s(ensate)g(\(sa)m(y\))h(for)0
-2305 y(geometrical)c(c)m(hanges)e(made)f(to)g(an)g(asso)s(ciated)i
-(image.)41 b(The)27 b(in)m(ter-relationships)j(b)s(et)m(w)m(een)e(all)h
-(the)f(other)0 2418 y(F)-8 b(rames)31 b(within)f(the)h(F)-8
-b(rameSet)31 b(remain)f(unc)m(hanged.)0 2793 y(P)m(erforming)j(the)g
-(steps)g(ab)s(o)m(v)m(e)h(is)f(rather)f(length)m(y)-8
-b(,)35 b(ho)m(w)m(ev)m(er,)h(so)d(the)g(astRemapF)-8
-b(rame)34 b(function)f(is)g(pro-)0 2906 y(vided)28 b(to)i(p)s(erform)d
-(all)j(of)f(these)g(op)s(erations)g(in)g(one)g(go.)41
-b(A)29 b(practical)h(example)g(of)f(its)g(use)g(is)f(giv)m(en)i(b)s
-(elo)m(w)0 3019 y(\()p Fu(x)p FF(14.5\).)0 3315 y Fw(14.5)112
-b(Example|Binning)40 b(an)e(Image)0 3538 y FF(As)f(an)g(example)h(of)g
-(using)f(astRemapF)-8 b(rame,)41 b(consider)c(a)g(case)i(where)e(the)g
-(pixels)g(of)h(a)g(2-dimensional)0 3651 y(image)26 b(ha)m(v)m(e)g(b)s
-(een)d(binned)h(2)p Fu(\002)p FF(2,)i(so)f(as)g(to)g(reduce)f(the)h
-(image)h(size)f(b)m(y)g(a)g(factor)g(of)g(t)m(w)m(o)h(in)e(eac)m(h)i
-(dimension.)0 3764 y(W)-8 b(e)38 b(m)m(ust)e(no)m(w)g(mo)s(dify)g(the)g
-(asso)s(ciated)i(F)-8 b(rameSet)38 b(to)f(re\015ect)g(this)f(c)m(hange)
-h(to)g(the)g(image.)60 b(Muc)m(h)36 b(the)0 3877 y(same)31
-b(pro)s(cess)f(w)m(ould)g(b)s(e)g(needed)g(for)g(an)m(y)g(other)h
-(geometrical)i(c)m(hange)f(the)e(image)i(migh)m(t)f(undergo.)0
-4040 y(W)-8 b(e)34 b(\014rst)f(set)g(up)f(a)i(Mapping)f(\(a)g(WinMap)h
-(in)f(this)g(case\))h(whic)m(h)f(relates)h(the)f(data)h(grid)f(co)s
-(ordinates)h(in)0 4153 y(the)d(original)g(image)h(to)f(those)g(in)f
-(the)g(new)g(one:)227 4405 y Ft(AstWinMap)40 b(*winmap;)227
-4505 y(double)h(ina[)h(2)h(])h(=)f({)g(0.5,)f(0.5)g(};)227
-4604 y(double)f(inb[)h(2)h(])h(=)f({)g(2.5,)f(2.5)g(};)227
-4704 y(double)f(outa[)h(2)h(])g(=)g({)h(0.5,)e(0.5)g(};)227
-4804 y(double)f(outb[)h(2)h(])g(=)g({)h(1.5,)e(1.5)g(};)227
-5003 y(...)227 5202 y(winmap)f(=)j(astWinMap\()39 b(2,)k(ina,)f(inb,)g
-(outa,)f(outb,)h("")g(\);)0 5467 y FF(Here,)j(w)m(e)d(ha)m(v)m(e)h
-(simply)f(set)g(up)f(arra)m(ys)h(con)m(taining)h(the)f(data)g(grid)g
-(co)s(ordinates)g(of)g(the)g(b)s(ottom)g(left)0 5580
-y(and)d(top)h(righ)m(t)g(corners)g(of)f(the)h(\014rst)f(elemen)m(t)i
-(in)f(the)g(output)f(image)i(\(\\outa")g(and)f(\\outb"\))g(and)f(the)0
-5693 y(corresp)s(onding)f(co)s(ordinates)i(in)f(the)g(input)f(image)j
-(\(\\ina")f(and)f(\\in)m(b"\).)68 b(astWinMap)40 b(then)f(creates)h(a)p
-eop end
-%%Page: 126 136
-TeXDict begin 126 135 bop 0 52 a FF(126)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)0
-351 y FF(WinMap)i(whic)m(h)g(p)s(erforms)f(the)h(required)f
-(transformation.)47 b(W)-8 b(e)33 b(do)f(not)g(need)g(to)h(kno)m(w)f
-(the)g(size)h(of)f(the)0 464 y(image.)0 619 y(W)-8 b(e)30
-b(can)e(then)g(pass)g(this)g(WinMap)h(to)g(astRemapF)-8
-b(rame.)42 b(This)27 b(mo)s(di\014es)h(the)g(relationship)h(b)s(et)m(w)
-m(een)g(our)0 732 y(F)-8 b(rameSet's)25 b(base)g(F)-8
-b(rame)25 b(and)e(the)h(other)h(F)-8 b(rames)24 b(in)g(the)g(F)-8
-b(rameSet,)27 b(so)d(that)h(the)f(base)h(F)-8 b(rame)25
-b(represen)m(ts)0 845 y(the)31 b(data)g(grid)f(co)s(ordinate)h(system)f
-(of)h(the)g(new)e(image)j(rather)e(than)g(the)h(old)g(one:)227
-1062 y Ft(AstFrameSet)39 b(*frameset;)227 1261 y(...)227
-1460 y(astRemapFrame\()f(frameset,)i(AST__BASE,)f(winmap)i(\);)0
-1690 y FF(An)m(y)34 b(other)g(co)s(ordinate)g(systems)g(describ)s(ed)e
-(b)m(y)i(the)g(F)-8 b(rameSet,)36 b(no)d(matter)i(ho)m(w)f(man)m(y)f
-(of)h(these)g(there)0 1803 y(migh)m(t)d(b)s(e,)f(are)h(no)m(w)f
-(correctly)i(asso)s(ciated)g(with)e(the)g(new)g(image.)0
-2085 y Fw(14.6)112 b(Main)m(taining)40 b(the)d(In)m(tegrit)m(y)g(of)g
-(F)-9 b(rameSets)0 2298 y FF(When)35 b(constructing)i(a)e(F)-8
-b(rameSet,)39 b(y)m(ou)d(are)g(pro)m(vided)f(with)g(a)h(framew)m(ork)g
-(in)m(to)g(whic)m(h)g(y)m(ou)g(can)g(place)0 2411 y(an)m(y)f(com)m
-(bination)g(of)f(F)-8 b(rames)35 b(and)f(Mappings)g(that)h(y)m(ou)f
-(wish.)52 b(There)33 b(are)i(relativ)m(ely)h(few)e(constrain)m(ts)0
-2524 y(on)d(this)f(pro)s(cess)h(and)f(no)g(c)m(hec)m(ks)i(are)g(p)s
-(erformed)d(to)i(see)h(whether)e(the)h(F)-8 b(rameSet)31
-b(y)m(ou)g(construct)h(mak)m(es)0 2637 y(ph)m(ysical)24
-b(sense.)39 b(It)23 b(is)h(quite)g(p)s(ossible,)h(for)e(example,)j(to)f
-(construct)f(a)g(F)-8 b(rameSet)25 b(con)m(taining)g(t)m(w)m(o)g(iden)m
-(tical)0 2750 y(SkyF)-8 b(rames)32 b(whic)m(h)g(are)g(in)m(ter-related)
-h(b)m(y)f(a)g(non-unit)f(Mapping.)45 b(AST)31 b(will)h(not)g(ob)5
-b(ject)33 b(if)f(y)m(ou)g(do)f(this,)0 2862 y(but)f(it)h(mak)m(es)h(no)
-f(sense,)g(b)s(ecause)f(applying)h(a)g(non-unit)f(Mapping)h(to)g(an)m
-(y)g(set)h(of)e(celestial)k(co)s(ordinates)0 2975 y(cannot)d(yield)f(p)
-s(ositions)h(that)g(are)f(still)h(in)f(the)h(original)g(co)s(ordinate)g
-(system.)41 b(If)30 b(y)m(ou)h(use)f(suc)m(h)g(a)g(F)-8
-b(rame-)0 3088 y(Set)36 b(to)g(p)s(erform)e(co)s(ordinate)i(con)m(v)m
-(ersions,)j(y)m(ou)c(are)h(lik)m(ely)h(to)g(get)f(unpredictable)f
-(results)h(b)s(ecause)f(the)0 3201 y(information)c(in)f(the)g(F)-8
-b(rameSet)32 b(is)e(corrupt.)0 3356 y(It)35 b(is,)i(of)e(course,)i(y)m
-(our)e(resp)s(onsibilit)m(y)g(as)g(a)g(programmer)g(to)h(ensure)e(the)h
-(v)-5 b(alidit)m(y)37 b(of)e(an)m(y)g(information)0 3469
-y(whic)m(h)43 b(y)m(ou)g(insert)g(in)m(to)h(a)f(F)-8
-b(rameSet.)80 b(Normally)-8 b(,)47 b(this)c(is)g(straigh)m(tforw)m(ard)
-h(and)e(simply)h(consists)g(of)0 3582 y(form)m(ulating)28
-b(y)m(our)f(problem)g(correctly)i(\(a)f(diagram)g(can)f(often)h(help)f
-(to)h(clarify)g(ho)m(w)f(co)s(ordinate)h(systems)0 3695
-y(are)23 b(in)m(ter-related\))h(and)d(writing)h(the)h(appropriate)f
-(bug-free)g(co)s(de)g(to)h(construct)g(the)f(F)-8 b(rameSet.)39
-b(Ho)m(w)m(ev)m(er,)0 3808 y(once)31 b(y)m(ou)g(start)g(to)g(mo)s(dify)
-e(an)i(existing)g(F)-8 b(rameSet,)32 b(there)e(are)h(new)f(opp)s
-(ortunities)g(for)g(corrupting)g(it!)0 3962 y(Consider,)d(for)g
-(example,)h(a)g(F)-8 b(rameSet)28 b(whose)f(curren)m(t)f(F)-8
-b(rame)28 b(is)f(a)g(SkyF)-8 b(rame.)40 b(W)-8 b(e)29
-b(can)e(set)g(a)h(new)e(v)-5 b(alue)0 4075 y(for)30 b(this)g(SkyF)-8
-b(rame's)31 b(Equino)m(x)g(attribute)g(simply)f(b)m(y)g(using)g(astSet)
-h(on)f(the)h(F)-8 b(rameSet,)32 b(as)e(follo)m(ws:)227
-4292 y Ft(astSet\()41 b(frameset,)f("Equinox=J2010")d(\);)0
-4522 y FF(The)i(e\013ect)i(of)e(this)g(will)h(b)s(e)f(to)h(c)m(hange)g
-(the)g(celestial)h(co)s(ordinate)g(system)e(whic)m(h)g(the)g(curren)m
-(t)h(F)-8 b(rame)0 4635 y(represen)m(ts.)65 b(Y)-8 b(ou)39
-b(can)g(see,)j(ho)m(w)m(ev)m(er,)g(that)d(this)g(has)f(the)h(p)s(oten)m
-(tial)h(to)f(mak)m(e)h(the)e(F)-8 b(rameSet)40 b(corrupt)0
-4748 y(unless)28 b(corresp)s(onding)g(c)m(hanges)h(are)g(also)h(made)e
-(to)i(the)f(Mapping)f(whic)m(h)g(relates)i(this)f(SkyF)-8
-b(rame)29 b(to)g(the)0 4861 y(other)k(F)-8 b(rames)33
-b(within)f(the)h(F)-8 b(rameSet.)49 b(In)32 b(fact,)i(it)f(is)g(a)g
-(general)h(rule)e(that)h(an)m(y)g(c)m(hange)h(to)f(a)g(F)-8
-b(rameSet)0 4974 y(whic)m(h)27 b(a\013ects)i(its)e(curren)m(t)g(F)-8
-b(rame)28 b(can)g(p)s(oten)m(tially)h(require)d(corresp)s(onding)h(c)m
-(hanges)h(to)g(the)f(F)-8 b(rameSet's)0 5087 y(Mappings)30
-b(in)g(order)g(to)h(main)m(tain)h(its)e(o)m(v)m(erall)j(in)m(tegrit)m
-(y)-8 b(.)0 5241 y(F)g(ortunately)g(,)40 b(once)c(y)m(ou)g(ha)m(v)m(e)i
-(stored)e(v)-5 b(alid)36 b(information)g(in)g(a)g(F)-8
-b(rameSet,)39 b(AST)c(will)h(lo)s(ok)h(after)f(these)0
-5354 y(details)i(for)e(y)m(ou)h(automatically)-8 b(,)42
-b(so)37 b(that)g(the)g(F)-8 b(rameSet's)38 b(in)m(tegrit)m(y)h(is)d
-(main)m(tained.)61 b(In)36 b(the)h(example)0 5467 y(ab)s(o)m(v)m(e,)f
-(it)e(w)m(ould)f(do)g(this)g(b)m(y)h(appropriately)f(re-mapping)g(the)h
-(curren)m(t)f(F)-8 b(rame)34 b(\(as)g(if)g(astRemapF)-8
-b(rame)0 5580 y(had)32 b(b)s(een)g(used|)p Fu(x)p FF(14.4\))i(in)f
-(resp)s(onse)e(to)j(the)f(use)f(of)h(astSet.)48 b(One)32
-b(w)m(a)m(y)i(of)f(illustrating)h(this)e(pro)s(cess)g(is)0
-5693 y(as)f(follo)m(ws:)p eop end
-%%Page: 127 137
-TeXDict begin 127 136 bop 0 52 a Fy(14.7)93 b(Merging)31
-b(F)-8 b(rameSets)2624 b FF(127)227 351 y Ft(AstSkyFrame)39
-b(*skyframe;)227 551 y(...)227 750 y(skyframe)i(=)i(astSkyFrame\()38
-b("")43 b(\);)227 849 y(frameSet)e(=)i(astFrameSet\()38
-b(skyframe)j(\);)227 949 y(astAddFrame\()e(frameset,)h(1,)j
-(astUnitMap\()c(2,)j("")h(\),)g(skyframe)d(\);)0 1172
-y FF(This)27 b(constructs)g(a)h(trivial)h(F)-8 b(rameSet)29
-b(whose)e(base)g(and)g(curren)m(t)h(F)-8 b(rames)28 b(are)g(b)s(oth)f
-(the)g(same)h(SkyF)-8 b(rame)0 1284 y(connected)29 b(b)m(y)f(a)h
-(UnitMap.)41 b(Y)-8 b(ou)29 b(can)f(think)g(of)h(this)f(as)h(a)f(\\pip)
-s(e")h(connecting)g(t)m(w)m(o)h(co)s(ordinate)f(systems.)0
-1397 y(A)m(t)c(presen)m(t,)g(these)g(t)m(w)m(o)g(systems)f(represen)m
-(t)g(iden)m(tical)i(ICRS)c(co)s(ordinates,)27 b(so)d(the)g(F)-8
-b(rameSet)25 b(implemen)m(ts)0 1510 y(a)g(unit)g(Mapping.)38
-b(W)-8 b(e)27 b(can)e(c)m(hange)h(the)f(co)s(ordinate)g(system)h(on)e
-(the)h(curren)m(t)g(end)f(of)h(this)g(pip)s(e)f(as)h(follo)m(ws:)227
-1719 y Ft(astSet\()41 b(frameset,)f("System=Ecliptic)o(,)d
-(Equinox=J2010")h(\);)0 1942 y FF(and)h(the)g(Mapping)g(whic)m(h)g(the)
-g(F)-8 b(rameSet)41 b(implemen)m(ts)e(w)m(ould)g(c)m(hange)i
-(accordingly)-8 b(.)68 b(T)-8 b(o)40 b(c)m(hange)g(the)0
-2055 y(co)s(ordinate)31 b(system)g(on)f(the)h(base)f(end)g(of)g(the)h
-(pip)s(e,)f(w)m(e)g(migh)m(t)i(use:)227 2264 y Ft(astInvert\()40
-b(frameset)g(\);)227 2364 y(astSet\()h(frameset,)f("System=Galactic)o
-(")d(\);)227 2463 y(astInvert\()j(frameset)g(\);)0 2686
-y FF(The)30 b(F)-8 b(rameSet)31 b(w)m(ould)g(then)f(con)m(v)m(ert)i(b)s
-(et)m(w)m(een)f(galactic)i(and)d(ecliptic)i(co)s(ordinates.)0
-2839 y(Note)37 b(that)f(astSet)g(is)f(not)h(the)f(only)h(function)f
-(whic)m(h)g(has)g(this)g(e\013ect:)52 b(astClear)37 b(b)s(eha)m(v)m(es)
-e(similarly)-8 b(,)38 b(as)0 2951 y(also)f(do)s(es)e(astP)m(ermAxes)i
-(\()p Fu(x)p FF(7.9\).)59 b(If)35 b(y)m(ou)h(need)f(to)i(circum)m(v)m
-(en)m(t)g(this)f(mec)m(hanism)g(for)f(an)m(y)h(reason,)i(this)0
-3064 y(can)29 b(b)s(e)g(done)f(b)m(y)h(going)h(b)s(ehind)d(the)i
-(scenes)h(and)e(obtaining)h(a)h(p)s(oin)m(ter)f(directly)g(to)h(the)f
-(F)-8 b(rame)30 b(y)m(ou)f(wish)0 3177 y(to)i(mo)s(dify)-8
-b(.)40 b(Consider)30 b(the)h(follo)m(wing,)h(for)e(example:)227
-3386 y Ft(skyframe)41 b(=)i(astGetFrame\()38 b(frameset,)i
-(AST__CURRENT)f(\);)227 3486 y(astSet\()i(skyframe,)f("Equinox=J2010")d
-(\);)227 3586 y(skyframe)k(=)i(astAnnul\()d(skyframe)g(\);)0
-3808 y FF(Here,)30 b(astSet)h(is)e(applied)h(to)g(the)g(SkyF)-8
-b(rame)30 b(p)s(oin)m(ter)f(rather)h(than)f(the)h(F)-8
-b(rameSet)30 b(p)s(oin)m(ter,)g(so)g(the)g(usual)0 3921
-y(c)m(hec)m(ks)f(on)f(F)-8 b(rameSet)29 b(in)m(tegrit)m(y)h(do)e(not)g
-(o)s(ccur.)40 b(The)27 b(SkyF)-8 b(rame's)29 b(Equino)m(x)f(attribute)g
-(will)h(therefore)f(b)s(e)0 4034 y(mo)s(di\014ed)f(without)i(an)m(y)g
-(corresp)s(onding)e(c)m(hange)j(to)f(the)f(F)-8 b(rameSet's)30
-b(Mappings.)40 b(In)28 b(this)g(case)i(y)m(ou)f(m)m(ust)0
-4147 y(tak)m(e)h(resp)s(onsibilit)m(y)f(y)m(ourself)g(for)f(main)m
-(taining)i(the)f(F)-8 b(rameSet's)30 b(in)m(tegrit)m(y)-8
-b(,)31 b(p)s(erhaps)c(through)h(appropri-)0 4260 y(ate)k(use)e(of)g
-(astRemapF)-8 b(rame.)0 4538 y Fw(14.7)112 b(Merging)38
-b(F)-9 b(rameSets)0 4750 y FF(As)33 b(w)m(ell)h(as)f(adding)f
-(individual)h(F)-8 b(rames)33 b(to)h(a)f(F)-8 b(rameSet)34
-b(\()p Fu(x)p FF(13.3\),)j(it)c(is)g(also)h(p)s(ossible)e(to)i(add)e
-(complete)0 4863 y(sets)43 b(of)g(in)m(ter-related)h(F)-8
-b(rames)44 b(whic)m(h)e(are)h(con)m(tained)h(within)e(another)h(F)-8
-b(rameSet.)78 b(This,)45 b(of)e(course,)0 4976 y(corresp)s(onds)29
-b(to)i(the)g(pro)s(cess)f(of)g(merging)h(t)m(w)m(o)h(F)-8
-b(rameSets)31 b(\(Figure)g(15\).)0 5128 y(This)40 b(pro)s(cess)h(is)g
-(p)s(erformed)e(b)m(y)i(adding)g(one)g(F)-8 b(rameSet)42
-b(to)g(another)f(using)g(astAddF)-8 b(rame,)45 b(in)40
-b(m)m(uc)m(h)0 5241 y(the)d(same)g(manner)e(as)i(when)e(adding)h(a)h
-(new)f(F)-8 b(rame)38 b(to)f(an)f(existing)i(F)-8 b(rameSet)37
-b(\()p Fu(x)p FF(13.3\).)62 b(It)36 b(is)h(simply)0 5354
-y(a)h(matter)g(of)f(pro)m(viding)h(a)f(F)-8 b(rameSet)39
-b(p)s(oin)m(ter,)g(instead)f(of)f(a)h(F)-8 b(rame)38
-b(p)s(oin)m(ter,)i(for)d(the)g(4th)h(argumen)m(t.)0 5467
-y(In)31 b(p)s(erforming)f(the)i(merger)g(y)m(ou)g(m)m(ust,)g(as)g
-(usual,)f(supply)f(a)i(Mapping,)g(but)f(in)h(this)f(case)i(the)f
-(Mapping)0 5580 y(should)40 b(relate)j(the)f(curren)m(t)f(F)-8
-b(rame)42 b(of)f(the)h(F)-8 b(rameSet)43 b(b)s(eing)d(added)h(to)h(one)
-g(of)f(the)h(F)-8 b(rames)42 b(already)0 5693 y(presen)m(t.)f(F)-8
-b(or)31 b(example,)g(y)m(ou)g(migh)m(t)g(p)s(erform)e(the)i(merger)f
-(sho)m(wn)g(in)g(Figure)h(15)g(as)g(follo)m(ws:)p eop
-end
-%%Page: 128 138
-TeXDict begin 128 137 bop 0 52 a FF(128)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)695
-4148 y @beginspecial 57 @llx 88 @lly 535 @urx 732 @ury
-2868 @rwi @setspecial
-%%BeginDocument: sun211_figures/fsmerge.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
-
-%%EndDocument
- @endspecial 0 4344 a FF(Figure)39 b(15:)59 b(Tw)m(o)39
-b(F)-8 b(rameSets)40 b(in)e(the)h(pro)s(cess)g(of)g(b)s(eing)f(merged)h
-(using)f(astAddF)-8 b(rame.)67 b(F)-8 b(rameSet)40 b(B)0
-4456 y(is)f(b)s(eing)f(added)h(to)g(F)-8 b(rameSet)40
-b(A)f(b)m(y)g(supplying)f(a)h(new)g(Mapping)f(whic)m(h)h(in)m
-(ter-relates)i(a)e(nominated)0 4569 y(F)-8 b(rame)32
-b(in)e(A)h(\(here)g(n)m(um)m(b)s(er)f(1\))h(and)g(the)g(curren)m(t)f(F)
--8 b(rame)32 b(of)f(B.)g(In)f(the)h(merged)g(F)-8 b(rameSet,)33
-b(the)e(F)-8 b(rames)0 4682 y(con)m(tributed)25 b(b)m(y)h(B)f(will)h(b)
-s(e)e(re-n)m(um)m(b)s(ered)h(to)g(b)s(ecome)h(F)-8 b(rames)26
-b(4,)h(5)f(and)e(6.)40 b(The)24 b(base)i(F)-8 b(rame)26
-b(will)g(remain)0 4795 y(unc)m(hanged,)i(but)f(the)h(curren)m(t)g(F)-8
-b(rame)28 b(of)g(B)g(b)s(ecomes)g(the)g(new)f(curren)m(t)h(F)-8
-b(rame.)41 b(Note)29 b(that)f(F)-8 b(rameSet)29 b(B)0
-4908 y(itself)i(is)g(not)f(altered)i(b)m(y)e(this)g(pro)s(cess.)p
-eop end
-%%Page: 129 139
-TeXDict begin 129 138 bop 0 52 a Fy(14.7)93 b(Merging)31
-b(F)-8 b(rameSets)2624 b FF(129)227 351 y Ft(AstMapping)40
-b(*mapping;)227 551 y(...)227 750 y(astAddFrame\()f(frameseta,)g(1,)k
-(mapping,)d(framesetb)g(\);)0 1012 y FF(The)j(F)-8 b(rames)44
-b(acquired)f(b)m(y)g(\\frameseta")i(from)e(the)h(F)-8
-b(rameSet)44 b(b)s(eing)f(added)g(\(\\framesetb"\))i(are)e(re-)0
-1125 y(n)m(um)m(b)s(ered)31 b(so)h(that)g(they)g(retain)h(their)f
-(original)h(order)f(and)f(follo)m(w)i(on)f(consecutiv)m(ely)i(after)f
-(the)f(F)-8 b(rames)0 1238 y(that)39 b(w)m(ere)f(already)g(presen)m(t,)
-j(whose)c(indices)h(remain)g(unc)m(hanged.)63 b(The)38
-b(base)g(F)-8 b(rame)38 b(of)h(\\frameseta")0 1351 y(remains)31
-b(unc)m(hanged,)g(but)f(the)h(curren)m(t)f(F)-8 b(rame)32
-b(of)f(\\framesetb")h(b)s(ecomes)f(its)h(new)e(curren)m(t)h(F)-8
-b(rame.)43 b(All)0 1464 y(the)30 b(in)m(ter-relationships)i(b)s(et)m(w)
-m(een)e(F)-8 b(rames)31 b(in)f(b)s(oth)g(F)-8 b(rameSets)31
-b(remain)f(in)g(place)h(and)e(are)i(preserv)m(ed)f(in)0
-1577 y(the)h(merged)f(F)-8 b(rameSet.)0 1739 y(Note)41
-b(that)f(while)f(this)g(pro)s(cess)g(mo)s(di\014es)g(the)g(\014rst)g(F)
--8 b(rameSet)41 b(\(\\frameseta"\),)j(it)c(lea)m(v)m(es)i(the)d
-(original)0 1852 y(con)m(ten)m(ts)32 b(of)f(the)f(one)h(b)s(eing)f
-(added)f(\(\\framesetb"\))k(unc)m(hanged.)p eop end
-%%Page: 130 140
-TeXDict begin 130 139 bop 0 52 a FF(130)1350 b Fy(14)92
-b(HIGHER)30 b(LEVEL)g(OPERA)-8 b(TIONS)29 b(ON)h(FRAMESETS)p
-eop end
-%%Page: 131 141
-TeXDict begin 131 140 bop 3643 52 a FF(131)0 351 y Fz(15)135
-b(Sa)l(ving)45 b(and)g(Restoring)i(Ob)7 b(jects)45 b(\(Channels\))0
-593 y FF(F)-8 b(acilities)31 b(are)c(pro)m(vided)g(b)m(y)h(the)f(AST)g
-(library)g(for)g(p)s(erforming)f(input)h(and)f(output)h(\(I/O\))h(with)
-g(an)m(y)f(kind)0 706 y(of)35 b(Ob)5 b(ject.)53 b(This)34
-b(means)g(it)i(is)e(p)s(ossible)g(to)i(write)e(an)m(y)h(Ob)5
-b(ject)35 b(in)m(to)h(v)-5 b(arious)34 b(external)i(represen)m(tations)
-0 819 y(for)29 b(storage,)i(and)e(then)g(to)h(read)f(these)h(represen)m
-(tations)g(bac)m(k)g(in,)g(so)g(as)f(to)h(restore)g(the)g(original)g
-(Ob)5 b(ject.)0 932 y(T)m(ypically)-8 b(,)32 b(an)e(Ob)5
-b(ject)31 b(w)m(ould)f(b)s(e)g(written)g(b)m(y)h(one)f(program)g(and)g
-(read)g(bac)m(k)i(in)e(b)m(y)g(another.)0 1083 y(W)-8
-b(e)34 b(refer)e(to)h(\\external)g(represen)m(tations")h(in)e(the)h
-(plural)f(b)s(ecause)g(AST)g(is)g(designed)g(to)h(function)g(inde-)0
-1196 y(p)s(enden)m(tly)27 b(of)h(an)m(y)f(particular)h(data)g(storage)i
-(system.)39 b(This)27 b(means)h(that)g(Ob)5 b(jects)27
-b(ma)m(y)h(need)g(con)m(v)m(erting)0 1309 y(in)m(to)41
-b(a)g(n)m(um)m(b)s(er)e(of)i(di\013eren)m(t)f(external)i(represen)m
-(tations)f(in)f(order)g(to)h(b)s(e)f(compatible)h(with)f(\(sa)m(y\))i
-(the)0 1422 y(astronomical)32 b(data)f(storage)h(system)f(in)f(whic)m
-(h)g(they)g(will)h(reside.)0 1574 y(In)f(this)g(section,)i(w)m(e)f
-(discuss)e(the)i(basic)g(I/O)f(facilities)i(whic)m(h)f(supp)s(ort)d
-(external)j(represen)m(tations)h(based)0 1687 y(on)37
-b(a)g(textual)h(format)f(referred)f(to)i(as)f(the)g(AST)f(\\nativ)m(e)j
-(format".)61 b(These)36 b(are)h(implemen)m(ted)h(using)e(a)0
-1800 y(new)29 b(kind)f(of)h(Ob)5 b(ject|a)30 b(Channel.)39
-b(W)-8 b(e)31 b(will)e(examine)h(later)g(ho)m(w)f(to)h(use)f(other)g
-(represen)m(tations,)i(based)0 1913 y(on)g(an)f(XML)h(format)h(or)e(on)
-h(the)g(use)g(of)g(FITS)f(headers,)g(for)h(storing)g(Ob)5
-b(jects.)42 b(These)31 b(are)g(implemen)m(ted)0 2025
-y(using)f(more)g(sp)s(ecialised)h(forms)f(of)h(Channel)e(called)j
-(XmlChan)d(\()p Fu(x)p FF(18\))k(and)d(FitsChan)g(\()p
-Fu(x)p FF(16\).)0 2303 y Fw(15.1)112 b(The)38 b(Channel)h(Mo)s(del)0
-2513 y FF(The)22 b(b)s(est)h(w)m(a)m(y)h(to)g(start)f(thinking)g(ab)s
-(out)g(a)g(Channel)f(is)h(lik)m(e)i(a)e(C)g(\014le)g(stream,)i(and)d
-(to)i(think)f(of)g(the)g(pro)s(cess)0 2626 y(of)28 b(creating)h(a)f
-(Channel)f(as)h(that)g(of)g(op)s(ening)f(a)h(\014le)f(and)h(obtaining)g
-(a)g(FILE)f(p)s(oin)m(ter.)40 b(Subsequen)m(tly)-8 b(,)28
-b(y)m(ou)0 2739 y(can)j(read)f(and)g(write)g(Ob)5 b(jects)31
-b Fx(via)f FF(the)h(Channel.)0 2890 y(This)41 b(analogy)i(is)f(not)h
-(quite)f(p)s(erfect,)j(ho)m(w)m(ev)m(er,)h(b)s(ecause)c(a)g(Channel)f
-(has,)k(in)d(principle,)i(t)m(w)m(o)g(\\\014les")0 3003
-y(attac)m(hed)37 b(to)e(it.)54 b(One)34 b(is)h(used)f(when)g(reading,)i
-(and)e(the)h(other)g(when)e(writing.)54 b(These)35 b(are)g(termed)f
-(the)0 3116 y(Channel's)29 b Fx(sour)-5 b(c)g(e)32 b
-FF(and)d Fx(sink)h FF(resp)s(ectiv)m(ely)-8 b(.)43 b(In)29
-b(practice,)j(the)e(source)h(and)e(sink)h(ma)m(y)h(b)s(oth)e(b)s(e)g
-(the)i(same,)0 3229 y(in)d(whic)m(h)g(case)i(the)f(analogy)h(with)e
-(the)h(C)f(\014le)g(stream)h(is)g(correct,)h(but)e(this)g(need)h(not)f
-(alw)m(a)m(ys)j(b)s(e)c(so.)41 b(It)28 b(is)0 3342 y(not)j(necessarily)
-g(so)g(with)f(the)g(basic)h(Channel,)f(as)g(w)m(e)h(will)g(no)m(w)f
-(see)h(\()p Fu(x)p FF(15.2\).)0 3619 y Fw(15.2)112 b(Creating)38
-b(a)g(Channel)0 3830 y FF(The)25 b(pro)s(cess)h(of)g(creating)i(a)e
-(Channel)f(is)h(straigh)m(tforw)m(ard.)40 b(As)26 b(y)m(ou)h(migh)m(t)f
-(exp)s(ect,)i(it)e(uses)g(the)g(construc-)0 3942 y(tor)31
-b(function)f(astChannel:)227 4147 y Ft(#include)41 b("ast.h")227
-4247 y(AstChannel)f(*channel;)227 4446 y(...)227 4646
-y(channel)h(=)i(astChannel\()c(NULL,)j(NULL,)f("")i(\);)0
-4864 y FF(The)35 b(\014rst)f(t)m(w)m(o)j(argumen)m(ts)e(to)h
-(astChannel)g(sp)s(ecify)e(the)i(external)g(source)f(and)g(sink)g(that)
-h(the)f(Channel)0 4977 y(is)f(to)g(use.)50 b(There)34
-b(argumen)m(ts)g(are)g(p)s(oin)m(ters)f(to)i(C)e(functions)g(and)g(w)m
-(e)h(will)g(examine)h(their)f(use)f(in)g(more)0 5090
-y(detail)f(later)f(\()p Fu(x)p FF(15.13)i(and)d Fu(x)p
-FF(15.14\).)0 5241 y(In)42 b(this)i(v)m(ery)f(simple)g(example)h(w)m(e)
-g(ha)m(v)m(e)g(supplied)e(NULL)h(p)s(oin)m(ters)g(for)g(b)s(oth)g(the)g
-(source)g(and)g(sink)0 5354 y(functions.)65 b(This)38
-b(requests)h(the)g(default)g(b)s(eha)m(viour,)h(whic)m(h)f(means)f
-(that)i(textual)g(input)d(will)i(b)s(e)g(read)0 5467
-y(from)32 b(the)h(program's)g(standard)e(input)h(stream)h(\(t)m
-(ypically)-8 b(,)36 b(this)d(means)f(y)m(our)h(k)m(eyb)s(oard\))g
-(while)f(textual)0 5580 y(output)h(will)h(go)g(to)g(the)g(standard)f
-(output)g(stream)h(\(t)m(ypically)h(app)s(earing)e(on)h(y)m(our)f
-(screen\).)51 b(On)32 b(UNIX)0 5693 y(systems,)f(of)f(course,)h(either)
-g(of)f(these)h(streams)g(can)f(easily)i(b)s(e)e(redirected)g(to)i
-(\014les.)p eop end
-%%Page: 132 142
-TeXDict begin 132 141 bop 0 52 a FF(132)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y Fw(15.3)112 b(W)-9 b(riting)37 b(Ob)6 b(jects)38
-b(to)f(a)h(Channel)0 596 y FF(The)d(pro)s(cess)g(of)g(sa)m(ving)i(Ob)5
-b(jects)35 b(is)g(v)m(ery)h(straigh)m(tforw)m(ard.)57
-b(Y)-8 b(ou)36 b(can)f(simply)g(write)h(an)m(y)f(Ob)5
-b(ject)36 b(to)g(a)0 709 y(Channel)30 b(using)f(the)i(astW)-8
-b(rite)32 b(function,)f(as)f(follo)m(ws:)227 1006 y Ft(int)43
-b(nobj;)227 1105 y(AstObject)d(*object;)227 1305 y(...)227
-1504 y(nobj)i(=)h(astWrite\()d(channel,)h(object)g(\);)0
-1814 y FF(The)33 b(e\013ect)i(of)f(this)f(will)h(b)s(e)e(to)j(pro)s
-(duce)d(a)i(textual)g(description)g(of)g(the)f(Ob)5 b(ject)34
-b(whic)m(h)f(will)h(app)s(ear,)g(b)m(y)0 1927 y(default,)c(on)e(y)m
-(our)h(program's)g(standard)f(output)g(stream.)41 b(An)m(y)29
-b(class)g(of)g(Ob)5 b(ject)29 b(ma)m(y)h(b)s(e)e(con)m(v)m(erted)i(in)m
-(to)0 2040 y(text)h(in)f(this)h(w)m(a)m(y)-8 b(.)0 2218
-y(astW)g(rite)31 b(returns)d(a)h(coun)m(t)h(of)f(the)g(n)m(um)m(b)s(er)
-f(of)h(Ob)5 b(jects)29 b(written.)40 b(Usually)-8 b(,)31
-b(this)d(will)i(b)s(e)e(one,)i(unless)e(the)0 2331 y(Ob)5
-b(ject)34 b(supplied)e(cannot)j(b)s(e)e(represen)m(ted.)51
-b(With)34 b(a)g(basic)h(Channel)e(all)h(Ob)5 b(jects)34
-b(can)g(b)s(e)f(represen)m(ted,)0 2444 y(so)40 b(a)g(v)-5
-b(alue)40 b(of)g(one)g(will)g(alw)m(a)m(ys)h(b)s(e)e(returned)g(unless)
-g(there)h(has)f(b)s(een)g(an)h(error.)68 b(W)-8 b(e)41
-b(will)f(see)g(later,)0 2557 y(ho)m(w)m(ev)m(er,)31 b(that)f(more)f(sp)
-s(ecialised)h(forms)f(of)g(Channel)g(ma)m(y)h(imp)s(ose)f(restrictions)
-h(on)f(the)g(kind)g(of)g(Ob)5 b(ject)0 2670 y(y)m(ou)31
-b(can)g(write)g(\()p Fu(x)p FF(17.2\).)45 b(In)30 b(suc)m(h)h(cases,)h
-(astW)-8 b(rite)33 b(ma)m(y)e(return)f(zero)h(to)h(indicate)g(that)f
-(the)g(Ob)5 b(ject)31 b(w)m(as)0 2783 y(not)g(acceptable.)0
-3129 y Fw(15.4)112 b(Reading)39 b(Ob)6 b(jects)38 b(from)f(a)h(Channel)
-0 3374 y FF(Before)31 b(discussing)f(the)h(format)g(of)f(the)h(output)f
-(pro)s(duced)f(ab)s(o)m(v)m(e)j(\()p Fu(x)p FF(15.3\),)h(let)f(us)d
-(consider)i(ho)m(w)f(to)i(read)0 3487 y(it)40 b(bac)m(k,)i(so)d(as)h
-(to)g(reconstruct)f(the)g(original)i(Ob)5 b(ject.)67
-b(Naturally)-8 b(,)43 b(w)m(e)c(w)m(ould)g(\014rst)g(need)g(to)h(sa)m
-(v)m(e)g(the)0 3600 y(output)30 b(in)h(a)g(\014le.)41
-b(On)30 b(UNIX)h(systems,)g(w)m(e)g(can)g(do)g(that)g(simply)g(b)m(y)f
-(redirecting)h(standard)f(output)h(to)g(a)0 3713 y(\014le)f(using)g(a)h
-(shell)g(command)f(lik)m(e:)227 4010 y Ft(program1)41
-b(>file)0 4320 y FF(Within)32 b(a)g(subsequen)m(t)e(program,)i(w)m(e)g
-(can)g(read)f(this)h(Ob)5 b(ject)32 b(bac)m(k)g(in)f(b)m(y)g(using)g
-(the)h(astRead)h(function,)0 4432 y(ha)m(ving)e(\014rst)f(created)h(a)g
-(suitable)g(Channel:)227 4729 y Ft(object)41 b(=)j(astRead\()c(channel)
-h(\);)0 5039 y FF(By)25 b(default,)i(this)e(function)g(will)h(read)f
-(from)f(the)i(standard)e(input)g(stream)i(\(the)g(default)f(source)h
-(for)e(a)i(basic)0 5152 y(Channel\),)32 b(so)g(w)m(e)g(w)m(ould)g(need)
-g(to)g(ensure)f(that)i(our)e(second)h(program)g(reads)f(its)i(input)d
-(from)i(the)g(\014le)g(in)0 5265 y(whic)m(h)25 b(the)h(Ob)5
-b(ject)26 b(description)f(is)h(stored.)39 b(On)24 b(UNIX)i(systems,)h
-(w)m(e)f(could)f(again)i(use)e(a)h(shell)g(redirection)0
-5378 y(command)k(suc)m(h)g(as:)227 5675 y Ft(program2)41
-b(<file)p eop end
-%%Page: 133 143
-TeXDict begin 133 142 bop 0 52 a Fy(15.5)93 b(Sa)m(ving)30
-b(and)g(Restoring)h(Multiple)g(Ob)5 b(jects)1838 b FF(133)0
-351 y Fw(15.5)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)0 564 y FF(I/O)27 b(op)s(erations)h(p)s(erformed)d(on)i(a)h
-(basic)g(Channel)e(are)i(sequen)m(tial.)41 b(This)26
-b(means)h(that)h(if)f(y)m(ou)h(write)f(more)0 677 y(than)h(one)h(Ob)5
-b(ject)28 b(to)h(a)g(Channel,)f(eac)m(h)h(new)f(Ob)5
-b(ject's)29 b(textual)g(description)g(is)f(simply)g(app)s(ended)e(to)j
-(the)0 790 y(previous)38 b(one.)64 b(Y)-8 b(ou)39 b(can)g(store)g(an)m
-(y)f(n)m(um)m(b)s(er)f(of)i(Ob)5 b(jects)38 b(in)g(this)g(w)m(a)m(y)-8
-b(,)42 b(sub)5 b(ject)38 b(only)g(to)h(the)g(storage)0
-903 y(space)31 b(y)m(ou)g(ha)m(v)m(e)g(a)m(v)-5 b(ailable.)0
-1057 y(After)29 b(y)m(ou)h(read)f(an)g(Ob)5 b(ject)29
-b(bac)m(k)h(from)f(a)g(basic)h(Channel,)f(the)g(Channel)f(is)i(\\p)s
-(ositioned")g(at)f(the)h(end)e(of)0 1170 y(that)h(Ob)5
-b(ject's)29 b(textual)h(description.)40 b(If)29 b(y)m(ou)g(then)f(p)s
-(erform)f(another)i(read,)h(y)m(ou)f(will)g(read)f(the)h(next)g(Ob-)0
-1283 y(ject's)i(textual)h(description)e(and)f(therefore)i(retriev)m(e)h
-(the)e(next)g(Ob)5 b(ject.)41 b(This)29 b(pro)s(cess)h(ma)m(y)h(b)s(e)e
-(rep)s(eated)0 1396 y(to)k(read)g(eac)m(h)h(Ob)5 b(ject)33
-b(in)f(turn.)47 b(When)33 b(there)f(are)i(no)e(more)h(Ob)5
-b(jects)33 b(to)g(b)s(e)f(read,)i(astRead)f(will)h(return)0
-1509 y(the)d(v)-5 b(alue)30 b(AST)p Fq(__)p FF(NULL)g(to)h(indicate)g
-(an)f Fx(end-of-\014le.)0 1790 y Fw(15.6)112 b(V)-9 b(alidating)39
-b(Input)0 2003 y FF(The)29 b(p)s(oin)m(ter)h(returned)f(b)m(y)h
-(astRead)h(\()p Fu(x)p FF(15.4\))h(could)e(iden)m(tify)h(an)m(y)f
-(class)h(of)f(Ob)5 b(ject|this)30 b(is)g(determined)0
-2116 y(en)m(tirely)35 b(b)m(y)g(the)f(external)h(data)g(b)s(eing)f
-(read.)52 b(If)34 b(it)h(is)f(necessary)g(to)h(test)h(for)e(a)g
-(particular)h(class)g(\(sa)m(y)g(a)0 2229 y(F)-8 b(rame\),)28
-b(this)e(ma)m(y)h(b)s(e)e(done)h(as)g(follo)m(ws)i(using)d(the)h
-(appropriate)g(mem)m(b)s(er)g(of)g(the)g(astIsA)p Fo(<)p
-FF(Class)p Fo(>)g FF(family)0 2342 y(of)31 b(functions:)227
-2558 y Ft(int)43 b(ok;)227 2757 y(...)227 2956 y(ok)g(=)g
-(astIsAFrame\()c(object)i(\);)0 3185 y FF(Note,)33 b(ho)m(w)m(ev)m(er,)
-f(that)g(this)f(will)g(accept)h(an)m(y)g(F)-8 b(rame,)32
-b(so)f(w)m(ould)g(b)s(e)f(equally)i(happ)m(y)e(with)h(a)g(basic)h(F)-8
-b(rame)0 3298 y(or)30 b(a)f(SkyF)-8 b(rame.)41 b(An)30
-b(alternativ)m(e)i(v)-5 b(alidation)30 b(strategy)h(w)m(ould)f(b)s(e)f
-(to)h(obtain)g(the)g(v)-5 b(alue)30 b(of)f(the)h(Ob)5
-b(ject's)0 3411 y(Class)30 b(attribute)h(and)f(then)g(test)i(this)e(c)m
-(haracter)i(string,)e(as)h(follo)m(ws:)227 3627 y Ft(#include)41
-b(<string.h>)227 3826 y(...)227 4025 y(ok)i(=)g(!strcmp\()d(astGetC\()h
-(object,)f("Class")h(\),)i("Frame")e(\);)0 4254 y FF(This)30
-b(w)m(ould)g(only)g(accept)i(a)f(basic)g(F)-8 b(rame)31
-b(and)f(w)m(ould)g(reject)h(a)g(SkyF)-8 b(rame.)0 4535
-y Fw(15.7)112 b(Storing)38 b(an)g(ID)f(String)g(with)h(an)g(Ob)6
-b(ject)0 4748 y FF(Occasionally)-8 b(,)33 b(y)m(ou)e(ma)m(y)g(w)m(an)m
-(t)h(to)f(store)g(a)g(n)m(um)m(b)s(er)f(of)g(Ob)5 b(jects)31
-b(and)f(later)h(retriev)m(e)h(them)f(and)f(use)g(eac)m(h)0
-4861 y(for)g(a)g(di\013eren)m(t)g(purp)s(ose.)39 b(If)29
-b(the)h(Ob)5 b(jects)30 b(are)g(of)g(the)g(same)h(class,)g(y)m(ou)f
-(cannot)g(use)g(the)g(Class)g(attribute)0 4974 y(to)39
-b(distinguish)e(them)g(when)g(y)m(ou)h(read)g(them)g(bac)m(k)h(\()p
-Fx(c.f.)e Fu(x)p FF(15.6\).)65 b(Although)38 b(relying)h(on)e(the)h
-(order)g(in)0 5087 y(whic)m(h)e(they)g(are)h(stored)g(is)f(a)h(p)s
-(ossible)e(solution,)k(this)d(b)s(ecomes)h(complicated)h(if)e(some)h
-(of)f(the)g(Ob)5 b(jects)0 5200 y(are)27 b(optional)h(and)e(ma)m(y)i
-(not)f(alw)m(a)m(ys)h(b)s(e)e(presen)m(t.)40 b(It)27
-b(also)h(mak)m(es)f(extending)g(y)m(our)g(data)h(format)f(in)f(future)0
-5313 y(more)31 b(di\016cult.)0 5467 y(T)-8 b(o)30 b(help)f(with)f
-(this,)i(ev)m(ery)g(AST)f(Ob)5 b(ject)29 b(has)g(an)g(ID)g(attribute)h
-(and)f(an)g(Iden)m(t)g(attribute,)i(b)s(oth)d(of)i(whic)m(h)0
-5580 y(allo)m(ws)e(y)m(ou,)f(in)f(e\013ect,)j(to)e(attac)m(h)h(a)f
-(textual)g(iden)m(ti\014cation)h(lab)s(el)f(to)g(it.)40
-b(Y)-8 b(ou)27 b(simply)e(set)i(the)g(ID)f(or)g(Iden)m(t)0
-5693 y(attribute)31 b(b)s(efore)f(writing)g(the)h(Ob)5
-b(ject:)p eop end
-%%Page: 134 144
-TeXDict begin 134 143 bop 0 52 a FF(134)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))227
-351 y Ft(astSet\()41 b(object,)g("ID=Calibration)o(")d(\);)227
-451 y(nobj)k(=)h(astWrite\()d(channel,)h(object)g(\);)0
-689 y FF(Y)-8 b(ou)31 b(can)g(then)f(test)h(its)g(v)-5
-b(alue)30 b(after)h(y)m(ou)g(read)f(the)h(Ob)5 b(ject)30
-b(bac)m(k:)227 914 y Ft(object)41 b(=)j(astRead\()c(channel)h(\);)227
-1013 y(if)i(\()g(!strcmp\()d(astGetC\()h(object,)f("ID")i(\),)h
-("Calibration")38 b(\))44 b(\))f({)358 1113 y(<the)f(Calibration)d
-(Object)i(has)h(been)g(read>)227 1213 y(})h(else)f({)358
-1312 y(<some)g(other)f(Object)g(has)i(been)e(read>)227
-1412 y(})0 1650 y FF(The)30 b(only)h(di\013erence)g(b)s(et)m(w)m(een)h
-(the)f(ID)g(and)f(Iden)m(t)h(attributes)g(is)g(that)g(the)g(ID)g
-(attribute)h(is)f(unique)f(to)h(a)0 1763 y(particular)22
-b(Ob)5 b(ject)23 b(and)e(is)h(lost)h(if,)h(for)e(example,)j(y)m(ou)d
-(mak)m(e)h(a)g(cop)m(y)g(of)f(the)g(Ob)5 b(ject.)39 b(The)21
-b(Iden)m(t)h(attrubute,)0 1876 y(on)34 b(the)g(other)g(hand,)g(is)g
-(transferred)f(to)i(the)f(new)f(Ob)5 b(ject)34 b(when)f(a)h(cop)m(y)h
-(is)f(made.)51 b(Consequen)m(tly)-8 b(,)36 b(it)e(is)0
-1989 y(safest)d(to)g(set)g(the)g(v)-5 b(alue)30 b(of)h(the)g(ID)f
-(attribute)h(immediately)h(b)s(efore)e(y)m(ou)h(p)s(erform)e(the)h
-(write.)0 2273 y Fw(15.8)112 b(The)38 b(T)-9 b(extual)38
-b(Output)f(F)-9 b(ormat)0 2488 y FF(Let)30 b(us)f(no)m(w)g(examine)i
-(the)e(format)h(of)g(the)g(textual)h(output)e(pro)s(duced)f(b)m(y)h
-(writing)h(an)f(Ob)5 b(ject)30 b(to)g(a)g(basic)0 2601
-y(Channel)35 b(\()p Fu(x)p FF(15.3\).)60 b(T)-8 b(o)37
-b(giv)m(e)g(a)g(concrete)g(example,)i(supp)s(ose)34 b(the)i(Ob)5
-b(ject)36 b(in)g(question)g(is)g(a)h(SkyF)-8 b(rame,)0
-2714 y(written)30 b(out)h(as)g(follo)m(ws:)227 2939 y
-Ft(AstSkyFrame)39 b(*skyframe;)227 3138 y(...)227 3337
-y(nobj)j(=)h(astWrite\()d(channel,)h(skyframe)f(\);)0
-3575 y FF(The)30 b(output)g(should)f(then)h(lo)s(ok)h(lik)m(e)h(the)f
-(follo)m(wing:)271 3800 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-3900 y(#)131 b(Title)41 b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43
-b(E-terms,)d(Mean)i(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84
-b(#)43 b(Title)e(of)i(coordinate)d(system)402 3999 y(Naxes)h(=)i(2)87
-b(#)43 b(Number)e(of)i(coordinate)d(axes)227 4099 y(#)131
-b(Domain)41 b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-4199 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 4298 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)227
-4398 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82 b(#)43 b(Units)f(for)g
-(axis)g(1)227 4497 y(#)131 b(Uni2)42 b(=)h("ddd:mm:ss")82
-b(#)44 b(Units)d(for)h(axis)g(2)227 4597 y(#)131 b(Dir1)42
-b(=)h(0)86 b(#)44 b(Plot)e(axis)g(1)h(in)f(reverse)f(direction)f
-(\(hint\))402 4697 y(Ax1)i(=)87 b(#)43 b(Axis)f(number)f(1)532
-4796 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)532
-4896 y(End)j(SkyAxis)402 4996 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)
-532 5095 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)
-532 5195 y(End)j(SkyAxis)271 5295 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 5394 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-5494 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)227 5593 y(#)131 b(Eqnox)41 b(=)i(1950)86
-b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)271
-5693 y(End)g(SkyFrame)p eop end
-%%Page: 135 145
-TeXDict begin 135 144 bop 0 52 a Fy(15.9)93 b(Con)m(trolling)31
-b(the)g(Amoun)m(t)f(of)h(Output)2005 b FF(135)0 351 y(Y)-8
-b(ou)36 b(will)f(notice)i(that)f(this)f(output)g(is)g(designed)g(b)s
-(oth)g(for)g(a)h(h)m(uman)e(reader,)j(in)e(that)g(it)h(is)g(formatted,)
-0 464 y(and)i(also)h(to)g(b)s(e)e(read)h(bac)m(k)h(b)m(y)g(a)f
-(computer)g(in)g(order)g(to)h(reconstruct)g(the)f(SkyF)-8
-b(rame.)65 b(In)37 b(fact,)42 b(this)0 577 y(is)c(precisely)g(the)f(w)m
-(a)m(y)i(that)f(astSho)m(w)g(w)m(orks)f(\()p Fu(x)p FF(4.4\),)42
-b(this)37 b(function)h(b)s(eing)f(roughly)g(equiv)-5
-b(alen)m(t)39 b(to)f(the)0 690 y(follo)m(wing)32 b(use)e(of)g(a)h
-(Channel:)227 889 y Ft(channel)41 b(=)i(astChannel\()c(NULL,)j(NULL,)f
-("")i(\);)227 988 y(\(void\))e(astWrite\()f(channel,)h(object)g(\);)227
-1088 y(channel)g(=)i(astAnnul\()d(channel)h(\);)0 1300
-y FF(Some)34 b(lines)f(of)h(the)g(output)f(start)h(with)f(a)h(\\)p
-Fq(#)p FF(")g(commen)m(t)h(c)m(haracter,)h(whic)m(h)d(turns)f(the)i
-(rest)g(of)f(the)h(line)0 1413 y(in)m(to)40 b(a)f(commen)m(t.)66
-b(These)39 b(lines)g(will)g(b)s(e)f(ignored)g(when)g(read)h(bac)m(k)g
-(in)f(b)m(y)h(astRead.)66 b(They)39 b(t)m(ypically)0
-1526 y(con)m(tain)33 b(default)f(v)-5 b(alues,)33 b(or)f(v)-5
-b(alues)32 b(that)g(can)h(b)s(e)e(deriv)m(ed)h(in)f(some)h(w)m(a)m(y)h
-(from)f(the)g(other)g(data)g(presen)m(t,)0 1639 y(so)c(that)g(they)g
-(do)g(not)f(actually)j(need)d(to)i(b)s(e)e(stored)g(in)h(order)f(to)h
-(reconstruct)g(the)g(original)h(Ob)5 b(ject.)40 b(They)0
-1752 y(are)25 b(pro)m(vided)f(purely)f(for)h(h)m(uman)g(information.)39
-b(The)24 b(same)g(commen)m(t)i(c)m(haracter)g(is)e(also)h(used)f(to)h
-(app)s(end)0 1865 y(explanatory)31 b(commen)m(ts)h(to)f(most)f(output)g
-(lines.)0 2015 y(It)36 b(is)f(not)h(sensible)f(to)h(attempt)h(a)e
-(complete)i(description)f(of)f(this)g(output)g(format)h(b)s(ecause)g
-(ev)m(ery)g(class)0 2128 y(of)e(Ob)5 b(ject)34 b(is)g(p)s(oten)m
-(tially)i(di\013eren)m(t)f(and)e(eac)m(h)i(can)f(de\014ne)g(ho)m(w)g
-(its)g(o)m(wn)g(data)h(should)e(b)s(e)g(represen)m(ted.)0
-2241 y(Ho)m(w)m(ev)m(er,)27 b(there)d(are)g(some)g(basic)g(rules,)g
-(whic)m(h)g(mean)f(that)h(the)g(follo)m(wing)h(common)f(features)g
-(will)g(usually)0 2354 y(b)s(e)30 b(presen)m(t:)111 2566
-y(1.)46 b(Eac)m(h)37 b(Ob)5 b(ject)36 b(is)g(delimited)g(b)m(y)g(matc)m
-(hing)h(\\Begin")g(and)f(\\End")f(lines,)j(whic)m(h)d(also)i(iden)m
-(tify)f(the)227 2679 y(class)31 b(of)g(Ob)5 b(ject)30
-b(in)m(v)m(olv)m(ed.)111 2854 y(2.)46 b(Within)22 b(eac)m(h)i(Ob)5
-b(ject)22 b(description,)i(data)e(v)-5 b(alues)23 b(are)f(represen)m
-(ted)g(b)m(y)g(a)g(simple)g(\\k)m(eyw)m(ord)h(=)f(v)-5
-b(alue")227 2967 y(syn)m(tax,)31 b(with)g(one)f(v)-5
-b(alue)31 b(to)g(a)g(line.)111 3142 y(3.)46 b(Lines)30
-b(b)s(eginning)f(\\IsA")i(are)f(used)f(to)i(mark)f(the)g(divisions)g(b)
-s(et)m(w)m(een)g(data)h(b)s(elonging)f(to)h(di\013eren)m(t)227
-3255 y(lev)m(els)41 b(in)e(the)g(class)h(hierarc)m(h)m(y)g(\(App)s
-(endix)e(A\).)67 b(Th)m(us,)41 b(\\IsA)e(F)-8 b(rame")41
-b(marks)e(the)g(end)f(of)i(data)227 3368 y(asso)s(ciated)34
-b(with)f(the)g(F)-8 b(rame)33 b(class)h(and)e(the)h(start)g(of)g(data)g
-(asso)s(ciated)h(with)f(some)g(deriv)m(ed)g(class)227
-3481 y(\(a)d(SkyF)-8 b(rame)29 b(in)g(the)g(ab)s(o)m(v)m(e)h
-(example\).)41 b(\\IsA")30 b(lines)f(ma)m(y)g(b)s(e)f(omitted)i(if)f
-(asso)s(ciated)i(data)e(v)-5 b(alues)227 3594 y(are)31
-b(absen)m(t)g(and)f(no)g(confusion)g(arises.)111 3769
-y(4.)46 b(Ob)5 b(jects)27 b(ma)m(y)g(con)m(tain)h(other)e(Ob)5
-b(jects)27 b(as)g(data.)40 b(This)26 b(is)g(indicated)h(b)m(y)g(an)f
-(absen)m(t)h(v)-5 b(alue,)28 b(with)e(the)227 3882 y(description)31
-b(of)f(the)h(data)g(Ob)5 b(ject)30 b(follo)m(wing)i(on)e(subsequen)m(t)
-g(lines.)111 4057 y(5.)46 b(Inden)m(tation)31 b(is)g(used)e(to)i
-(clarify)g(the)g(o)m(v)m(erall)i(structure.)0 4269 y(Bey)m(ond)j(these)
-g(general)g(principles,)h(the)f(b)s(est)f(guide)g(to)h(what)g(a)f
-(particular)h(line)g(of)g(output)f(represen)m(ts)0 4382
-y(will)f(generally)h(b)s(e)e(the)h(commen)m(t)h(whic)m(h)f(accompanies)
-h(it)g(together)g(with)e(a)i(general)f(kno)m(wledge)h(of)f(the)0
-4495 y(class)d(of)g(Ob)5 b(ject)30 b(b)s(eing)g(describ)s(ed.)0
-4769 y Fw(15.9)112 b(Con)m(trolling)38 b(the)f(Amoun)m(t)h(of)f(Output)
-0 4978 y FF(It)42 b(is)f(not)h(alw)m(a)m(ys)h(necessary)f(for)g(the)g
-(output)f(from)g(astW)-8 b(rite)44 b(\()p Fu(x)p FF(15.3\))g(to)e(b)s
-(e)f(h)m(uman-readable,)k(so)d(a)0 5091 y(Channel)30
-b(has)g(attributes)h(that)g(allo)m(w)g(the)g(amoun)m(t)g(of)f(detail)i
-(in)e(the)h(output)f(to)h(b)s(e)e(con)m(trolled.)0 5241
-y(The)41 b(\014rst)g(of)h(these)g(is)g(the)f(in)m(teger)i(attribute)g
-(F)-8 b(ull,)45 b(whic)m(h)d(con)m(trols)g(the)g(exten)m(t)h(to)g(whic)
-m(h)e(optional,)0 5354 y(commen)m(ted)g(out,)j(output)c(lines)h(are)g
-(pro)s(duced.)69 b(By)41 b(default,)j(F)-8 b(ull)41 b(is)f(zero,)k(and)
-c(this)h(results)f(in)g(the)0 5467 y(standard)21 b(st)m(yle)i(of)e
-(output)g(\()p Fu(x)p FF(15.8\))k(where)c(default)g(v)-5
-b(alues)22 b(that)g(ma)m(y)h(b)s(e)d(helpful)h(to)h(h)m(umans)f(are)h
-(included.)0 5580 y(T)-8 b(o)28 b(suppress)e(these)j(optional)g(lines,)
-f(F)-8 b(ull)29 b(should)e(b)s(e)g(set)i(to)f Fu(\000)p
-FF(1.)40 b(This)27 b(is)h(most)h(con)m(v)m(enien)m(tly)h(done)d(when)0
-5693 y(the)k(Channel)e(is)i(created,)g(so)g(that:)p eop
-end
-%%Page: 136 146
-TeXDict begin 136 145 bop 0 52 a FF(136)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))227
-351 y Ft(channel)41 b(=)i(astChannel\()c(NULL,)j(NULL,)f("Full=-1")f
-(\);)227 451 y(\(void\))h(astWrite\()f(channel,)h(skyframe)f(\);)227
-551 y(channel)h(=)i(astAnnul\()d(channel)h(\);)0 812
-y FF(w)m(ould)30 b(result)g(in)g(output)g(con)m(taining)i(only)f(the)f
-(essen)m(tial)j(information,)e(suc)m(h)f(as:)271 1059
-y Ft(Begin)41 b(SkyFrame)84 b(#)43 b(Description)c(of)k(celestial)d
-(coordinate)g(system)402 1159 y(Naxes)h(=)i(2)87 b(#)43
-b(Number)e(of)i(coordinate)d(axes)402 1259 y(Ax1)i(=)87
-b(#)43 b(Axis)f(number)f(1)532 1358 y(Begin)h(SkyAxis)84
-b(#)43 b(Celestial)d(coordinate)g(axis)532 1458 y(End)j(SkyAxis)402
-1558 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)532 1657
-y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)532
-1757 y(End)j(SkyAxis)271 1857 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 1956 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-2056 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)271 2155 y(End)f(SkyFrame)0 2417 y FF(In)30
-b(con)m(trast,)j(setting)f(F)-8 b(ull)31 b(to)h(+1)f(will)g(result)f
-(in)h(additional)h(output)e(lines)h(whic)m(h)g(will)g(rev)m(eal)h(ev)m
-(ery)g(last)0 2529 y(detail)38 b(of)g(the)f(Ob)5 b(ject's)37
-b(construction.)62 b(Often)37 b(this)g(will)g(b)s(e)g(rather)g(more)g
-(than)g(y)m(ou)g(w)m(an)m(t,)j(esp)s(ecially)0 2642 y(for)30
-b(more)g(complex)g(Ob)5 b(jects,)30 b(but)g(it)g(can)g(sometimes)h
-(help)e(when)g(debugging)h(programs.)40 b(This)29 b(is)h(ho)m(w)g(a)0
-2755 y(SkyF)-8 b(rame)31 b(app)s(ears)e(at)i(this)g(lev)m(el)h(of)e
-(detail:)271 3003 y Ft(Begin)41 b(SkyFrame)84 b(#)43
-b(Description)c(of)k(celestial)d(coordinate)g(system)227
-3103 y(#)131 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)e(of)i(active)e
-(Object)g(pointers)227 3202 y(#)131 b(Nobj)42 b(=)h(1)86
-b(#)44 b(Count)d(of)i(active)e(Objects)g(in)h(same)g(class)271
-3302 y(IsA)g(Object)85 b(#)43 b(Astrometry)d(Object)227
-3402 y(#)131 b(Nin)42 b(=)h(2)87 b(#)43 b(Number)e(of)i(input)e
-(coordinates)227 3501 y(#)131 b(Nout)42 b(=)h(2)86 b(#)44
-b(Number)d(of)i(output)e(coordinates)227 3601 y(#)131
-b(Invert)41 b(=)i(0)87 b(#)43 b(Mapping)e(not)h(inverted)227
-3700 y(#)131 b(Fwd)42 b(=)h(1)87 b(#)43 b(Forward)e(transformation)d
-(defined)227 3800 y(#)131 b(Inv)42 b(=)h(1)87 b(#)43
-b(Inverse)e(transformation)d(defined)227 3900 y(#)131
-b(Report)41 b(=)i(0)87 b(#)43 b(Don't)e(report)g(coordinate)f
-(transformations)271 3999 y(IsA)i(Mapping)84 b(#)44 b(Mapping)c
-(between)h(coordinate)e(systems)227 4099 y(#)131 b(Title)41
-b(=)i("FK4)f(Equatorial)e(Coordinates,)e(no)43 b(E-terms,)d(Mean)i
-(Equinox)f(B1950.0,)f(Epoch)i(B1958.0")84 b(#)43 b(Title)e(of)i
-(coordinate)d(system)402 4199 y(Naxes)h(=)i(2)87 b(#)43
-b(Number)e(of)i(coordinate)d(axes)227 4298 y(#)131 b(Domain)41
-b(=)i("SKY")85 b(#)43 b(Coordinate)d(system)h(domain)227
-4398 y(#)131 b(Lbl1)42 b(=)h("Right)e(Ascension")83 b(#)43
-b(Label)f(for)g(axis)g(1)227 4497 y(#)131 b(Lbl2)42 b(=)h
-("Declination")82 b(#)43 b(Label)e(for)i(axis)e(2)227
-4597 y(#)131 b(Sym1)42 b(=)h("RA")85 b(#)43 b(Symbol)f(for)g(axis)g(1)
-227 4697 y(#)131 b(Sym2)42 b(=)h("Dec")85 b(#)43 b(Symbol)e(for)h(axis)
-g(2)227 4796 y(#)131 b(Uni1)42 b(=)h("hh:mm:ss.s")82
-b(#)43 b(Units)f(for)g(axis)g(1)227 4896 y(#)131 b(Uni2)42
-b(=)h("ddd:mm:ss")82 b(#)44 b(Units)d(for)h(axis)g(2)227
-4996 y(#)131 b(Dig1)42 b(=)h(7)86 b(#)44 b(Individual)39
-b(precision)h(for)i(axis)g(1)227 5095 y(#)131 b(Dig2)42
-b(=)h(7)86 b(#)44 b(Individual)39 b(precision)h(for)i(axis)g(2)227
-5195 y(#)131 b(Digits)41 b(=)i(7)87 b(#)43 b(Default)e(formatting)e
-(precision)227 5295 y(#)131 b(Fmt1)42 b(=)h("hms.1")84
-b(#)43 b(Format)e(specifier)f(for)i(axis)g(1)227 5394
-y(#)131 b(Fmt2)42 b(=)h("dms")85 b(#)43 b(Format)e(specifier)f(for)i
-(axis)g(2)227 5494 y(#)131 b(Dir1)42 b(=)h(0)86 b(#)44
-b(Plot)e(axis)g(1)h(in)f(reverse)f(direction)f(\(hint\))227
-5593 y(#)131 b(Dir2)42 b(=)h(1)86 b(#)44 b(Plot)e(axis)g(2)h(in)f
-(conventional)d(direction)h(\(hint\))227 5693 y(#)131
-b(Presrv)41 b(=)i(0)87 b(#)43 b(Don't)e(preserve)g(target)g(axes)p
-eop end
-%%Page: 137 147
-TeXDict begin 137 146 bop 0 52 a Fy(15.10)93 b(Con)m(trolling)32
-b(Commen)m(ting)2360 b FF(137)227 351 y Ft(#)131 b(Permut)41
-b(=)i(1)87 b(#)43 b(Axes)f(may)g(be)h(permuted)d(to)j(match)227
-451 y(#)131 b(MinAx)41 b(=)i(2)87 b(#)43 b(Minimum)e(number)g(of)i
-(axes)f(to)g(match)227 551 y(#)131 b(MaxAx)41 b(=)i(2)87
-b(#)43 b(Maximum)e(number)g(of)i(axes)f(to)g(match)227
-650 y(#)131 b(MchEnd)41 b(=)i(0)87 b(#)43 b(Match)e(initial)g(target)g
-(axes)227 750 y(#)131 b(Prm1)42 b(=)h(1)86 b(#)44 b(Axis)e(1)h(not)f
-(permuted)227 849 y(#)131 b(Prm2)42 b(=)h(2)86 b(#)44
-b(Axis)e(2)h(not)f(permuted)402 949 y(Ax1)g(=)87 b(#)43
-b(Axis)f(number)f(1)532 1049 y(Begin)h(SkyAxis)84 b(#)43
-b(Celestial)d(coordinate)g(axis)227 1148 y(#)392 b(RefCnt)41
-b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e(Object)g(pointers)227
-1248 y(#)392 b(Nobj)42 b(=)h(2)87 b(#)43 b(Count)f(of)g(active)g
-(Objects)e(in)j(same)f(class)532 1348 y(IsA)h(Object)84
-b(#)44 b(Astrometry)39 b(Object)227 1447 y(#)392 b(Label)42
-b(=)h("Angle)e(on)i(Sky")85 b(#)43 b(Axis)f(Label)227
-1547 y(#)392 b(Symbol)41 b(=)i("delta")85 b(#)43 b(Axis)f(symbol)227
-1646 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83 b(#)43 b(Axis)f(units)227
-1746 y(#)392 b(Digits)41 b(=)i(7)87 b(#)43 b(Default)e(formatting)e
-(precision)227 1846 y(#)392 b(Format)41 b(=)i("dms")86
-b(#)43 b(Format)e(specifier)227 1945 y(#)392 b(Dirn)42
-b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38 b(direction)532
-2045 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-2145 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-2244 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 2344 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-2443 y(End)h(SkyAxis)402 2543 y(Ax2)f(=)87 b(#)43 b(Axis)f(number)f(2)
-532 2643 y(Begin)h(SkyAxis)84 b(#)43 b(Celestial)d(coordinate)g(axis)
-227 2742 y(#)392 b(RefCnt)41 b(=)i(1)87 b(#)43 b(Count)f(of)h(active)e
-(Object)g(pointers)227 2842 y(#)392 b(Nobj)42 b(=)h(2)87
-b(#)43 b(Count)f(of)g(active)g(Objects)e(in)j(same)f(class)532
-2942 y(IsA)h(Object)84 b(#)44 b(Astrometry)39 b(Object)227
-3041 y(#)392 b(Label)42 b(=)h("Angle)e(on)i(Sky")85 b(#)43
-b(Axis)f(Label)227 3141 y(#)392 b(Symbol)41 b(=)i("delta")85
-b(#)43 b(Axis)f(symbol)227 3240 y(#)392 b(Unit)42 b(=)h("ddd:mm:ss")83
-b(#)43 b(Axis)f(units)227 3340 y(#)392 b(Digits)41 b(=)i(7)87
-b(#)43 b(Default)e(formatting)e(precision)227 3440 y(#)392
-b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-3539 y(#)392 b(Dirn)42 b(=)h(1)87 b(#)43 b(Plot)f(in)h(conventional)38
-b(direction)532 3639 y(IsA)43 b(Axis)85 b(#)43 b(Coordinate)d(axis)227
-3739 y(#)392 b(Format)41 b(=)i("dms")86 b(#)43 b(Format)e(specifier)227
-3838 y(#)392 b(IsLat)42 b(=)h(0)87 b(#)43 b(Longitude)d(axis)i(\(not)f
-(latitude\))227 3938 y(#)392 b(AsTime)41 b(=)i(0)87 b(#)43
-b(Display)e(values)g(as)i(angles)e(\(not)h(times\))532
-4037 y(End)h(SkyAxis)271 4137 y(IsA)f(Frame)85 b(#)43
-b(Coordinate)d(system)h(description)402 4237 y(System)g(=)i("FK4-NO-E")
-83 b(#)43 b(Celestial)d(coordinate)f(system)j(type)402
-4336 y(Epoch)f(=)i(1958)86 b(#)43 b(Besselian)d(epoch)h(of)i
-(observation)227 4436 y(#)131 b(Eqnox)41 b(=)i(1950)86
-b(#)43 b(Besselian)d(epoch)h(of)i(mean)f(equinox)271
-4536 y(End)g(SkyFrame)0 4819 y Fw(15.10)112 b(Con)m(trolling)38
-b(Commen)m(ting)0 5033 y FF(Another)g(w)m(a)m(y)g(of)g(con)m(trolling)i
-(output)e(from)f(a)h(Channel)f(is)h Fx(via)g FF(the)g(b)s(o)s(olean)f
-(\(in)m(teger\))j(Commen)m(t)e(at-)0 5146 y(tribute,)32
-b(whic)m(h)e(con)m(trols)j(whether)e(commen)m(ts)h(are)f(app)s(ended)f
-(to)i(describ)s(e)e(the)i(purp)s(ose)d(of)i(eac)m(h)i(v)-5
-b(alue.)0 5259 y(Commen)m(t)33 b(has)g(the)h(v)-5 b(alue)33
-b(1)h(b)m(y)f(default)g(but,)h(if)f(set)h(to)g(zero,)h(will)e(suppress)
-e(these)j(commen)m(ts.)50 b(This)32 b(is)0 5372 y(normally)f
-(appropriate)f(only)g(if)h(y)m(ou)g(wish)e(to)i(minimise)g(the)f(amoun)
-m(t)h(of)f(output,)h(for)f(example:)227 5593 y Ft(astSet\()41
-b(channel,)f("Full=-1,)g(Comment=0")g(\);)227 5693 y(nobj)i(=)h
-(astWrite\()d(channel,)h(skyframe)f(\);)p eop end
-%%Page: 138 148
-TeXDict begin 138 147 bop 0 52 a FF(138)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))0
-351 y FF(migh)m(t)i(result)f(in)g(the)h(follo)m(wing)h(more)e(compact)i
-(output:)271 656 y Ft(Begin)41 b(SkyFrame)402 756 y(Naxes)g(=)i(2)402
-855 y(Ax1)f(=)532 955 y(Begin)g(SkyAxis)532 1055 y(End)h(SkyAxis)402
-1154 y(Ax2)f(=)532 1254 y(Begin)g(SkyAxis)532 1353 y(End)h(SkyAxis)271
-1453 y(IsA)f(Frame)402 1553 y(System)f(=)i("FK4-NO-E")402
-1652 y(Epoch)e(=)i(1958)271 1752 y(End)f(SkyFrame)0 2108
-y Fw(15.11)112 b(Editing)38 b(T)-9 b(extual)37 b(Output)0
-2356 y FF(The)h(safest)h(advice)g(ab)s(out)f(editing)i(the)e(textual)i
-(output)e(from)g(astW)-8 b(rite)40 b(\(or)f(astSho)m(w\))g(is)f
-(\\don't!"|)0 2469 y(unless)30 b(y)m(ou)g(kno)m(w)h(what)f(y)m(ou)h
-(are)g(doing.)0 2651 y(Ha)m(ving)36 b(giv)m(en)h(that)e(w)m(arning,)i
-(ho)m(w)m(ev)m(er,)h(it)e(is)f(sometimes)h(p)s(ossible)f(to)h(mak)m(e)g
-(c)m(hanges)g(to)g(the)g(text,)h(or)0 2763 y(ev)m(en)24
-b(to)g(write)f(en)m(tire)h(Ob)5 b(ject)23 b(descriptions)g(from)g
-(scratc)m(h,)j(and)c(to)i(read)f(the)h(results)f(bac)m(k)g(in)g(to)h
-(construct)0 2876 y(new)34 b(Ob)5 b(jects.)52 b(Normally)-8
-b(,)37 b(simple)e(c)m(hanges)g(to)g(n)m(umerical)g(v)-5
-b(alues)35 b(are)f(safest,)j(but)c(b)s(e)h(a)m(w)m(are)i(that)f(this)0
-2989 y(is)j(a)h(bac)m(k)g(do)s(or)e(metho)s(d)h(of)g(creating)i(Ob)5
-b(jects,)40 b(so)e(y)m(ou)h(are)f(on)h(y)m(our)f(o)m(wn!)64
-b(There)37 b(are)i(a)f(n)m(um)m(b)s(er)f(of)0 3102 y(p)s(oten)m(tial)32
-b(pitfalls.)41 b(In)30 b(particular:)136 3420 y Fu(\017)46
-b FF(astRead)28 b(is)e(in)m(tended)h(for)f(retrieving)h(data)h(written)
-e(b)m(y)h(astW)-8 b(rite)28 b(and)e(not)h(for)f(reading)h(data)g(input)
-227 3533 y(b)m(y)40 b(h)m(umans.)68 b(As)40 b(suc)m(h,)j(the)d(data)g
-(v)-5 b(alidation)42 b(pro)m(vided)d(is)h(v)m(ery)g(limited)h(and)e(is)
-h(certainly)h(not)227 3646 y(fo)s(olpro)s(of.)e(This)24
-b(mak)m(es)i(it)f(quite)g(easy)h(to)f(construct)g(Ob)5
-b(jects)25 b(that)h(are)f(in)m(ternally)h(inconsisten)m(t)g(b)m(y)227
-3759 y(this)k(means.)40 b(In)29 b(con)m(trast,)j(the)e(normal)f
-(programming)h(in)m(terface)h(incorp)s(orates)f(n)m(umerous)f(c)m(hec)m
-(ks)227 3872 y(designed)35 b(to)h(mak)m(e)g(it)g(imp)s(ossible)e(to)i
-(construct)f(in)m(v)-5 b(alid)36 b(Ob)5 b(jects.)55 b(Y)-8
-b(ou)35 b(should)f(not)i(necessarily)227 3985 y(think)43
-b(y)m(ou)g(ha)m(v)m(e)h(found)d(a)i(bug)g(if)f(y)m(our)h(c)m(hanges)h
-(to)g(an)e(Ob)5 b(ject's)43 b(textual)h(description)f(fail)h(to)227
-4098 y(pro)s(duce)29 b(the)i(results)f(y)m(ou)h(exp)s(ected!)136
-4322 y Fu(\017)46 b FF(In)24 b(man)m(y)i(instances)f(the)g(names)g
-(asso)s(ciated)h(with)f(v)-5 b(alues)25 b(in)g(textual)h(output)f(will)
-g(corresp)s(ond)f(with)227 4435 y(Ob)5 b(ject)31 b(attributes.)43
-b(Sometimes,)32 b(ho)m(w)m(ev)m(er,)g(these)g(names)e(ma)m(y)i
-(di\013er)e(from)h(the)g(attribute)g(name.)227 4548 y(This)f(is)h
-(mainly)f(b)s(ecause)h(of)g(length)f(restrictions)i(imp)s(osed)e(b)m(y)
-g(other)h(common)g(external)g(formats,)227 4661 y(suc)m(h)f(as)h(FITS)f
-(headers.)40 b(Some)30 b(of)h(the)f(names)h(used)e(do)i(not)f(corresp)s
-(ond)f(with)h(attributes)h(at)g(all.)136 4886 y Fu(\017)46
-b FF(It)39 b(is)g(safest)g(to)g(c)m(hange)h(single)f(n)m(umerical)g(or)
-g(string)f(v)-5 b(alues.)66 b(Bew)m(are)40 b(of)f(c)m(hanging)g(the)g
-(size)g(or)227 4999 y(shap)s(e)34 b(of)h(Ob)5 b(jects)35
-b(\()p Fx(e.g.)f FF(the)h(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(a)h(F)-8
-b(rame\).)55 b(Often,)36 b(these)f(v)-5 b(alues)35 b(m)m(ust)g(matc)m
-(h)227 5112 y(others)30 b(stored)g(elsewhere)g(within)f(the)h(Ob)5
-b(ject)30 b(and)f(c)m(hanging)i(them)e(in)h(a)g(haphazard)f(fashion)g
-(will)227 5225 y(not)i(pro)s(duce)e(useful)h(results.)136
-5450 y Fu(\017)46 b FF(Be)33 b(w)m(ary)g(ab)s(out)f(un-commen)m(ting)h
-(default)f(v)-5 b(alues.)47 b(Sometimes)33 b(this)g(will)f(w)m(ork,)i
-(but)d(often)i(these)227 5562 y(v)-5 b(alues)30 b(are)g(deriv)m(ed)g
-(from)f(other)h(Ob)5 b(jects)30 b(stored)f(more)h(deeply)g(in)f(the)h
-(structure)f(and)g(the)h(prop)s(er)227 5675 y(place)i(to)f(insert)f(a)h
-(new)f(v)-5 b(alue)30 b(is)h(not)f(where)g(the)h(default)f(itself)i
-(app)s(ears.)p eop end
-%%Page: 139 149
-TeXDict begin 139 148 bop 0 52 a Fy(15.12)93 b(Mixing)31
-b(Ob)5 b(jects)30 b(with)g(other)h(T)-8 b(ext)2075 b
-FF(139)0 351 y Fw(15.12)112 b(Mixing)39 b(Ob)6 b(jects)38
-b(with)f(other)g(T)-9 b(ext)0 592 y FF(By)30 b(default,)g(when)e(y)m
-(ou)i(use)f(astRead)i(to)f(read)g(from)f(a)g(basic)h(Channel)f(\()p
-Fu(x)p FF(15.4\),)k(it)d(is)f(assumed)g(that)h(y)m(ou)0
-705 y(are)h(reading)g(a)g(stream)g(of)g(text)h(con)m(taining)g(only)f
-(AST)f(Ob)5 b(jects,)31 b(whic)m(h)f(follo)m(w)i(eac)m(h)g(other)f
-(end-to-end.)0 818 y(If)h(an)m(y)h(extraneous)h(input)d(data)j(are)f
-(encoun)m(tered)g(whic)m(h)f(do)h(not)g(app)s(ear)f(to)i(form)e(part)g
-(of)h(the)g(textual)0 931 y(description)24 b(of)f(an)h(Ob)5
-b(ject,)25 b(then)f(an)f(error)g(will)h(result.)39 b(In)23
-b(particular,)i(the)f(\014rst)f(input)g(line)h(m)m(ust)f(iden)m(tify)0
-1044 y(the)31 b(start)f(of)h(an)f(Ob)5 b(ject)31 b(description,)f(so)h
-(y)m(ou)g(cannot)g(start)g(reading)f(half)g(w)m(a)m(y)i(through)e(an)g
-(Ob)5 b(ject.)0 1220 y(Sometimes,)43 b(ho)m(w)m(ev)m(er,)g(y)m(ou)d(ma)
-m(y)g(w)m(an)m(t)h(to)f(store)g(AST)f(Ob)5 b(ject)40
-b(descriptions)f(in)m(termixed)h(with)f(other)0 1333
-y(textual)e(data.)57 b(Y)-8 b(ou)36 b(can)g(do)f(this)h(b)m(y)f
-(setting)i(the)e(Channel's)g(b)s(o)s(olean)h(\(in)m(teger\))i(Skip)c
-(attribute)j(to)f(1.)0 1446 y(This)g(will)i(cause)f(ev)m(ery)h(read)f
-(to)h(skip)f(o)m(v)m(er)h(extraneous)g(data)f(un)m(til)h(the)f(start)h
-(of)f(a)g(new)g(AST)f(Ob)5 b(ject)0 1558 y(description,)28
-b(if)e(an)m(y)-8 b(,)29 b(is)e(found.)38 b(So)27 b(long)g(as)g(y)m(our)
-g(other)g(data)g(do)g(not)g(mimic)g(the)g(app)s(earance)g(of)g(an)f
-(AST)0 1671 y(Ob)5 b(ject)31 b(description,)f(the)h(t)m(w)m(o)g(sets)g
-(of)g(data)g(can)f(co-exist.)0 1847 y(F)-8 b(or)41 b(example,)j(b)m(y)d
-(setting)h(Skip)d(to)j(1,)h(the)e(follo)m(wing)h(complete)g(C)e
-(program)h(will)g(read)f(all)h(the)g(AST)0 1960 y(Ob)5
-b(jects)44 b(whose)f(descriptions)g(app)s(ear)g(in)g(the)h(source)g(of)
-f(this)h(do)s(cumen)m(t,)j(ignoring)d(the)f(other)h(text.)0
-2073 y(astSho)m(w)31 b(is)f(used)g(to)h(displa)m(y)f(those)h(found:)227
-2362 y Ft(#include)41 b("ast.h")227 2461 y(main\(\))g({)358
-2561 y(AstChannel)e(*channel;)358 2661 y(AstObject)h(*object;)358
-2860 y(channel)h(=)i(astChannel\()c(NULL,)i(NULL,)h("Skip=1")e(\);)358
-2960 y(while)i(\()h(\()g(object)e(=)i(astRead\()d(channel)h(\))i(\))g
-(!=)g(AST__NULL)d(\))j({)489 3059 y(astShow\()d(object)h(\);)489
-3159 y(object)g(=)i(astAnnul\()d(object)h(\);)358 3258
-y(})358 3358 y(channel)g(=)i(astAnnul\()d(channel)g(\);)227
-3458 y(})0 3795 y Fw(15.13)112 b(Reading)39 b(Ob)6 b(jects)38
-b(from)g(Files)0 4036 y FF(Th)m(us)d(far,)i(w)m(e)g(ha)m(v)m(e)g(only)f
-(considered)g(the)g(default)g(b)s(eha)m(viour)g(of)g(a)g(Channel)f(in)h
-(reading)g(and)f(writing)0 4149 y(Ob)5 b(jects)30 b(through)e(a)i
-(program's)g(standard)f(input)f(and)h(output)h(streams.)40
-b(W)-8 b(e)31 b(will)f(no)m(w)g(consider)f(ho)m(w)h(to)0
-4262 y(access)i(Ob)5 b(jects)30 b(stored)h(in)f(\014les)g(more)g
-(directly)-8 b(.)0 4438 y(Because)37 b(the)g(AST)e(library)g(is)i
-(designed)e(to)i(b)s(e)f(used)f(from)g(more)h(than)g(one)h(language,)i
-(it)d(has)g(to)h(b)s(e)e(a)0 4551 y(little)g(careful)e(ab)s(out)f
-(reading)h(and)g(writing)f(to)i(\014les.)48 b(This)32
-b(is)h(due)f(to)i(the)f(incompatibilities)i(that)e(often)0
-4664 y(exist)27 b(b)s(et)m(w)m(een)g(the)g(\014le)g(I/O)f(facilities)j
-(pro)m(vided)d(b)m(y)g(di\013eren)m(t)h(languages.)41
-b(F)-8 b(ortunately)g(,)30 b(this)c(ties)h(in)f(w)m(ell)0
-4777 y(with)31 b(the)g(principle)f(that)i(AST)e(should)g(also)i(b)s(e)e
-(indep)s(enden)m(t)g(of)h(an)m(y)h(particular)f(data)h(storage)g
-(system,)0 4890 y(whic)m(h)e(w)m(e)h(men)m(tion)g(again)g(in)f
-Fu(x)p FF(15.15.)0 5065 y(What)38 b(this)f(means)g(in)g(practice)h(is)f
-(that)h(y)m(ou)f(m)m(ust)g(pro)m(vide)g(some)h(simple)f(C)g(functions)f
-(that)i(p)s(erform)0 5178 y(the)h(actual)h(transfer)e(of)h(data)g(to)h
-(and)e(from)g(\014les)h(and)f(similar)h(external)g(data)h(stores.)66
-b(The)38 b(functions)0 5291 y(y)m(ou)29 b(pro)m(vide)f(are)g(supplied)f
-(as)i(the)f(source)h(and/or)f(sink)f(function)h(argumen)m(ts)h(to)g
-(astChannel)f(when)f(y)m(ou)0 5404 y(create)32 b(a)f(Channel)e(\()p
-Fu(x)p FF(15.2\).)44 b(An)30 b(example)h(is)f(the)h(b)s(est)f(w)m(a)m
-(y)h(to)g(illustrate)h(this.)0 5580 y(Consider)38 b(the)h(follo)m(wing)
-h(simple)e(function)g(called)i(Source.)65 b(It)39 b(reads)f(a)h(single)
-h(line)e(of)h(text)h(from)e(a)h(C)0 5693 y(input)29 b(stream)i(and)f
-(returns)f(a)i(p)s(oin)m(ter)f(to)h(it,)g(or)g(NULL)f(if)g(there)h(is)f
-(no)h(more)f(input:)p eop end
-%%Page: 140 150
-TeXDict begin 140 149 bop 0 52 a FF(140)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))227
-351 y Ft(#include)41 b(<stdio.h>)227 451 y(#define)g(LEN)h(200)227
-551 y(static)f(FILE)h(*input_stream;)227 750 y(const)g(char)g
-(*Source\()e(void)i(\))h({)358 849 y(static)e(char)h(buffer[)f(LEN)h(+)
-h(2)g(];)358 949 y(return)e(fgets\()g(buffer,)g(LEN)h(+)h(2,)g
-(input_stream)c(\);)227 1049 y(})0 1304 y FF(Note)28
-b(that)e(the)h(input)e(stream)i(is)f(a)g(static)i(v)-5
-b(ariable)27 b(whic)m(h)f(w)m(e)h(will)f(also)h(access)h(from)e(our)f
-(main)h(program.)0 1416 y(This)k(migh)m(t)h(lo)s(ok)g(something)f(lik)m
-(e)i(this)e(\(omitting)i(error)e(c)m(hec)m(king)j(for)d(brevit)m(y\):)
-227 1658 y Ft(/*)43 b(Open)f(the)g(input)g(file.)f(*/)227
-1758 y(input_stream)e(=)k(fopen\()e("infile.ast",)d("r")43
-b(\);)227 1957 y(/*)g(Create)e(a)i(Channel)e(and)h(read)g(an)h(Object)e
-(from)h(it.)g(*/)227 2057 y(channel)f(=)i(astChannel\()c(Source,)i
-(NULL,)g("")i(\);)227 2156 y(object)e(=)j(astRead\()c(channel)h(\);)227
-2355 y(...)227 2555 y(/*)i(Annul)f(the)g(Channel)f(and)h(close)f(the)i
-(file)f(when)g(done.)f(*/)227 2654 y(channel)g(=)i(astAnnul\()d
-(channel)h(\);)227 2754 y(\(void\))g(fclose\()g(input_stream)e(\);)0
-3009 y FF(Here,)d(w)m(e)e(\014rst)f(op)s(en)g(the)h(required)f(input)g
-(\014le,)i(sa)m(ving)g(the)f(resulting)g(FILE)g(p)s(oin)m(ter.)51
-b(W)-8 b(e)35 b(then)f(pass)f(a)0 3122 y(p)s(oin)m(ter)23
-b(to)h(our)f(Source)g(function)g(as)g(the)h(\014rst)e(argumen)m(t)i(to)
-g(astChannel)f(when)f(creating)j(a)e(new)g(Channel.)0
-3235 y(When)29 b(w)m(e)g(read)g(an)g(Ob)5 b(ject)29 b(from)g(this)g
-(Channel)f(with)h(astRead,)h(the)f(Source)g(function)g(will)g(b)s(e)g
-(called)h(to)0 3348 y(obtain)j(the)h(textual)g(data)g(from)e(the)h
-(\014le,)i(the)e(end-of-\014le)g(b)s(eing)g(detected)h(when)e(this)h
-(function)g(returns)0 3460 y(NULL.)0 3751 y Fw(15.14)112
-b(W)-9 b(riting)37 b(Ob)6 b(jects)38 b(to)f(Files)0 3971
-y FF(W)-8 b(e)42 b(can)f(also)h(write)f(a)h(Sink)e(function,)j(that)f
-(writes)f(a)g(line)h(of)f(output)f(text)i(to)g(a)f(\014le,)j(and)d(use)
-f(it)i(in)0 4083 y(basically)32 b(the)e(same)h(w)m(a)m(y)g(as)g(the)g
-(Source)f(function)g(in)g(the)g(previous)g(section)i(\()p
-Fu(x)p FF(15.13\):)227 4325 y Ft(static)41 b(FILE)h(*output_stream;)227
-4524 y(void)g(Sink\()g(const)f(char)h(*line)g(\))h({)358
-4624 y(\(void\))e(fprintf\()f(output_stream,)e("\045s\\n",)j(line)h
-(\);)227 4724 y(})0 4978 y FF(Note)32 b(that)f(w)m(e)g(m)m(ust)f
-(supply)f(the)h(\014nal)g(newline)h(c)m(haracter)h(ourselv)m(es.)0
-5139 y(In)41 b(this)i(case,)j(our)c(main)g(program)g(w)m(ould)g(supply)
-e(a)j(p)s(oin)m(ter)f(to)h(this)f(Sink)g(function)g(as)g(the)g(second)0
-5252 y(argumen)m(t)31 b(to)g(astChannel,)f(as)h(follo)m(ws:)227
-5494 y Ft(/*)43 b(Open)f(the)g(output)f(file.)h(*/)227
-5593 y(output_stream)c(=)44 b(fopen\()d("outfile.ast",)d("w")k(\);)p
-eop end
-%%Page: 141 151
-TeXDict begin 141 150 bop 0 52 a Fy(15.15)93 b(Reading)31
-b(and)f(W)-8 b(riting)31 b(Ob)5 b(jects)30 b(to)i(other)e(Places)1547
-b FF(141)227 351 y Ft(/*)43 b(Create)e(a)i(Channel)e(and)h(write)g(an)h
-(Object)e(to)h(it.)h(*/)227 451 y(channel)e(=)i(astChannel\()c(Source,)
-i(Sink,)g("")i(\);)227 551 y(nobj)f(=)h(astWrite\()d(channel,)h(object)
-g(\);)358 750 y(...)227 949 y(/*)i(Annul)f(the)g(Channel)f(and)h(close)
-f(the)i(file)f(when)g(done.)f(*/)227 1049 y(channel)g(=)i(astAnnul\()d
-(channel)h(\);)227 1148 y(\(void\))g(fclose\()g(output_stream)d(\);)0
-1411 y FF(Note)33 b(that)g(w)m(e)g(can)f(sp)s(ecify)g(a)g(source)g
-(and/or)g(a)h(sink)e(function)h(for)g(the)g(Channel,)g(and)g(that)g
-(these)h(ma)m(y)0 1524 y(use)f(either)h(the)f(same)h(\014le,)g(or)f
-(di\013eren)m(t)g(\014les)h(according)g(to)g(whether)e(w)m(e)i(are)f
-(reading)h(or)f(writing.)46 b(AST)0 1636 y(has)31 b(no)h(kno)m(wledge)g
-(of)g(the)f(underlying)g(\014le)g(system,)h(nor)f(of)h(\014le)g(p)s
-(ositioning.)44 b(It)31 b(just)g(reads)h(and)e(writes)0
-1749 y(sequen)m(tially)-8 b(.)42 b(If)27 b(y)m(ou)h(wish,)f(for)g
-(example,)i(to)f(rep)s(osition)g(a)g(\014le)f(at)h(the)g(b)s(eginning)f
-(in)g(b)s(et)m(w)m(een)h(reads)f(and)0 1862 y(writes,)i(then)f(this)g
-(can)g(b)s(e)g(done)f(directly)i(\(and)f(completely)i(indep)s(enden)m
-(tly)d(of)h(AST\))g(using)g(standard)f(C)0 1975 y(functions.)0
-2138 y(If)h(an)g(error)g(o)s(ccurs)g(in)g(y)m(our)h(source)f(or)h(sink)
-f(function,)h(y)m(ou)f(can)h(comm)m(unicate)h(this)e(to)i(the)e(AST)g
-(library)0 2251 y(b)m(y)k(setting)h(its)f(error)g(status)g(to)h(an)m(y)
-g(error)e(v)-5 b(alue)33 b(using)e(astSetStatus)i(\()p
-Fu(x)p FF(4.15\).)49 b(This)31 b(will)h(immediately)0
-2364 y(terminate)f(the)g(read)f(or)h(write)f(op)s(eration.)0
-2657 y Fw(15.15)112 b(Reading)39 b(and)f(W)-9 b(riting)37
-b(Ob)6 b(jects)38 b(to)f(other)g(Places)0 2878 y FF(It)44
-b(should)f(b)s(e)g(ob)m(vious)h(from)f(the)h(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FF(15.13)i(and)c Fu(x)p FF(15.14\))j(that)f(a)f(Channel's)f
-(source)h(and)f(sink)0 2991 y(functions)28 b(pro)m(vide)g(a)g
-(\015exible)h(means)f(of)g(in)m(tercepting)h(textual)g(data)g(that)g
-(describ)s(es)e(AST)h(Ob)5 b(jects)28 b(as)g(it)0 3104
-y(\015o)m(ws)i(in)f(and)g(out)h(of)g(y)m(our)g(program.)40
-b(In)29 b(fact,)i(y)m(ou)f(migh)m(t)h(lik)m(e)g(to)f(regard)g(a)g
-(Channel)f(simply)g(as)h(a)g(\014lter)0 3217 y(for)g(con)m(v)m(erting)i
-(AST)d(Ob)5 b(jects)30 b(to)g(and)g(from)f(a)i(stream)f(of)g(text)h
-(whic)m(h)f(is)g(then)f(handled)h(b)m(y)f(y)m(our)h(source)0
-3330 y(and)g(sink)g(functions,)g(where)g(the)g(real)h(I/O)g(o)s(ccurs.)
-0 3493 y(This)36 b(giv)m(es)i(y)m(ou)f(the)g(abilit)m(y)i(to)e(store)g
-(AST)g(Ob)5 b(jects)36 b(in)h(virtually)g(an)m(y)g(data)h(system,)h(so)
-e(long)g(as)g(y)m(ou)0 3606 y(can)42 b(con)m(v)m(ert)h(a)f(stream)g(of)
-f(text)i(in)m(to)f(something)g(that)g(can)g(b)s(e)f(stored)g(\(it)i
-(need)e(no)g(longer)h(b)s(e)f(text\))0 3719 y(and)32
-b(retriev)m(e)i(it)f(again.)48 b(There)32 b(is)g(generally)i(no)e(need)
-g(to)h(retain)g(commen)m(ts.)48 b(Other)32 b(p)s(ossibilities,)i(suc)m
-(h)0 3831 y(as)39 b(in)m(ter-pro)s(cess)h(and)e(net)m(w)m(ork)i(comm)m
-(unication,)j(could)c(also)h(b)s(e)f(implemen)m(ted)g
-Fx(via)g FF(source)g(and)g(sink)0 3944 y(functions)30
-b(in)g(basically)i(the)e(same)h(w)m(a)m(y)-8 b(.)p eop
-end
-%%Page: 142 152
-TeXDict begin 142 151 bop 0 52 a FF(142)1228 b Fy(15)92
-b(SA)-10 b(VING)30 b(AND)h(RESTORING)e(OBJECTS)g(\(CHANNELS\))p
-eop end
-%%Page: 143 153
-TeXDict begin 143 152 bop 3643 52 a FF(143)0 351 y Fz(16)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(in)f(FITS)e(Headers)j
-(\(FitsChans\))0 597 y FF(A)39 b(FITS)f(header)h(is)g(a)h(sequence)f
-(of)g(80-c)m(haracter)j(strings,)f(formatted)f(according)g(to)g
-(particular)f(rules)0 710 y(de\014ned)32 b(b)m(y)g(the)h(Flexible)h
-(Image)g(T)-8 b(ransp)s(ort)31 b(System)i(\(FITS\).)g(FITS)2515
-677 y Fv(23)2622 710 y FF(is)f(a)h(widely-used)g(standard)f(for)0
-823 y(data)g(in)m(terc)m(hange)i(in)d(astronom)m(y)i(and)e(has)g(also)i
-(b)s(een)e(adopted)h(as)g(a)g(data)g(pro)s(cessing)g(format)g(in)f
-(some)0 936 y(astronomical)h(data)f(reduction)f(systems.)41
-b(The)29 b(individual)h(80-c)m(haracter)j(strings)d(in)g(a)h(FITS)e
-(header)h(are)0 1049 y(usually)g(called)i Fx(c)-5 b(ar)g(ds)32
-b FF(or)e Fx(he)-5 b(ader)35 b(c)-5 b(ar)g(ds)32 b FF(\(for)e(en)m
-(tirely)i(anac)m(hronistic)g(reasons\).)0 1205 y(A)23
-b(sequence)h(of)f(FITS)g(cards)g(app)s(ears)f(as)i(a)g(header)f(at)h
-(the)f(start)h(of)f(ev)m(ery)h(FITS)f(data)h(\014le,)h(and)d(sometimes)
-0 1318 y(also)38 b(at)h(other)f(p)s(oin)m(ts)f(within)g(it,)j(and)d(is)
-g(used)g(to)h(pro)m(vide)g(ancillary)h(information)f(whic)m(h)f
-(quali\014es)g(or)0 1431 y(describ)s(es)c(the)h(main)g(arra)m(y)g(of)g
-(data)h(stored)f(in)f(the)h(\014le.)51 b(As)34 b(suc)m(h,)h(FITS)e
-(headers)g(are)i(prime)e(territory)0 1544 y(for)d(storing)h
-(information)g(ab)s(out)f(the)g(co)s(ordinate)h(systems)g(asso)s
-(ciated)h(with)e(data)h(held)f(in)g(FITS)g(\014les.)0
-1700 y(In)25 b(this)h(section,)i(w)m(e)f(will)f(examine)h(ho)m(w)f(to)h
-(store)f(information)h(in)e(FITS)h(headers)f(directly)i(in)f(the)g
-(form)f(of)0 1813 y(AST)h(Ob)5 b(jects|a)26 b(pro)s(cess)g(whic)m(h)h
-(is)f(supp)s(orted)f(b)m(y)h(a)h(sp)s(ecialised)g(class)g(of)f(Channel)
-g(called)i(a)e(FitsChan.)0 1926 y(Our)43 b(discussion)h(here)g(will)h
-(turn)e(out)h(to)h(b)s(e)f(a)h(transitional)g(step)g(that)f(emphasises)
-g(the)h(similarities)0 2038 y(b)s(et)m(w)m(een)39 b(a)f(FitsChan)g(and)
-g(a)g(Channel)g(\()p Fu(x)p FF(15\).)66 b(A)m(t)39 b(the)f(same)h
-(time,)i(it)e(will)f(prepare)g(us)f(for)h(the)g(next)0
-2151 y(section)30 b(\()p Fu(x)p FF(17\),)h(where)d(w)m(e)h(will)g
-(examine)g(ho)m(w)g(to)g(use)g(a)g(FitsChan)f(to)h(tac)m(kle)i(some)e
-(of)g(the)g(more)f(di\016cult)0 2264 y(problems)i(that)h(FITS)e
-(headers)h(can)h(presen)m(t.)0 2548 y Fw(16.1)112 b(The)38
-b(Nativ)m(e)f(FITS)h(Enco)s(ding)0 2762 y FF(As)43 b(it)h(turns)e(out,)
-48 b(w)m(e)43 b(are)h(not)g(the)f(\014rst)g(to)h(ha)m(v)m(e)h(though)m
-(t)f(of)f(storing)h(W)m(CS)f(information)h(in)f(FITS)0
-2875 y(headers.)59 b(In)36 b(fact,)j(the)e(original)h(FITS)d(standard)h
-(\(1981)j(vin)m(tage\))g(de\014ned)c(a)i(set)g(of)g(header)f(k)m(eyw)m
-(ords)0 2988 y(for)31 b(this)f(purp)s(ose)f(whic)m(h)i(ha)m(v)m(e)h(b)s
-(een)e(widely)h(used,)f(although)i(they)f(ha)m(v)m(e)h(pro)m(v)m(ed)f
-(to)s(o)g(limited)h(for)e(man)m(y)0 3101 y(practical)i(purp)s(oses.)0
-3257 y(A)m(t)43 b(the)g(time)g(of)f(writing,)k(a)c(n)m(um)m(b)s(er)f
-(of)i(di\013eren)m(t)g(w)m(a)m(ys)g(of)f(using)g(FITS)g(headers)g(for)g
-(storing)g(W)m(CS)0 3370 y(information)30 b(are)g(in)f(use,)h(most)g
-(\(although)g(not)g(all\))h(based)e(on)h(the)f(original)i(standard.)40
-b(W)-8 b(e)30 b(will)g(refer)g(to)0 3483 y(these)j(alternativ)m(e)h(w)m
-(a)m(ys)f(of)f(storing)h(the)f(information)g(as)h(FITS)e
-Fx(enc)-5 b(o)g(dings)33 b FF(but)f(will)g(defer)g(a)g(discussion)0
-3596 y(of)f(their)f(adv)-5 b(an)m(tages)32 b(and)e(limitations)i(un)m
-(til)f(the)f(next)h(section)g(\()p Fu(x)p FF(17\).)0
-3752 y(Here,)d(w)m(e)f(will)f(examine)h(ho)m(w)g(to)g(store)f(AST)g(Ob)
-5 b(jects)26 b(directly)h(in)f(FITS)g(headers.)39 b(In)25
-b(e\013ect,)k(this)d(de\014nes)0 3865 y(a)38 b(new)g(enco)s(ding,)i
-(whic)m(h)d(w)m(e)i(will)f(term)g(the)g Fx(native)h(enc)-5
-b(o)g(ding.)64 b FF(This)38 b(is)f(a)i(sp)s(ecial)f(kind)f(of)h(enco)s
-(ding,)0 3978 y(b)s(ecause)d(not)f(only)h(do)s(es)f(it)h(allo)m(w)h(us)
-e(to)h(asso)s(ciate)i(con)m(v)m(en)m(tional)g(W)m(CS)e(calibration)h
-(information)f(with)0 4091 y(FITS)k(data,)k(but)c(it)i(also)f(allo)m
-(ws)i(an)m(y)e(other)g(information)g(that)g(can)h(b)s(e)e(expressed)g
-(in)g(terms)h(of)g(AST)0 4204 y(Ob)5 b(jects)38 b(to)h(b)s(e)f(stored)g
-(as)g(w)m(ell.)65 b(In)38 b(fact,)j(the)d(nativ)m(e)i(enco)s(ding)e
-(pro)m(vides)g(us)g(with)f(facilities)k(roughly)0 4316
-y(analogous)35 b(to)f(those)f(of)h(the)f(Channel)g(\()p
-Fu(x)p FF(15\)|)p Fx(i.e.)h FF(a)g(lossless)g(w)m(a)m(y)g(of)g
-(transferring)e(AST)h(Ob)5 b(jects)33 b(from)0 4429 y(program)d(to)h
-(program|but)f(based)g(on)g(FITS)g(headers)g(instead)g(of)h
-(free-format)g(text.)0 4713 y Fw(16.2)112 b(The)38 b(FitsChan)h(Mo)s
-(del)0 4927 y FF(I/O)h(b)s(et)m(w)m(een)h(AST)f(Ob)5
-b(jects)40 b(and)f(FITS)h(headers)g(is)g(supp)s(orted)e(b)m(y)j(a)f(sp)
-s(ecialised)h(form)f(of)g(Channel)0 5040 y(called)28
-b(a)f(FitsChan.)40 b(A)27 b(FitsChan)g(con)m(tains)h(a)f(bu\013er)f
-(whic)m(h)g(ma)m(y)i(hold)e(an)m(y)i(n)m(um)m(b)s(er,)e(including)h
-(zero,)h(of)0 5153 y(FITS)k(header)g(cards.)48 b(This)32
-b(bu\013er)g(forms)g(a)h(w)m(orkspace)g(in)g(whic)m(h)f(y)m(ou)h(can)g
-(assem)m(ble)h(FITS)e(cards)g(and)0 5266 y(manipulate)f(them)f(b)s
-(efore)g(writing)g(them)h(out)f(to)h(a)g(FITS)f(\014le.)0
-5422 y(By)37 b(default,)i(when)d(a)i(FitsChan)f(is)g(\014rst)f
-(created,)k(it)d(con)m(tains)i(no)d(cards)h(and)g(there)g(are)g(four)f
-(w)m(a)m(ys)i(of)0 5535 y(inserting)30 b(cards)h(in)m(to)g(it:)p
-0 5607 1512 4 v 73 5661 a Fs(23)138 5693 y Fr(h)n
-(ttp://\014ts.gsfc.nasa.go)n(v/)p eop end
-%%Page: 144 154
-TeXDict begin 144 153 bop 0 52 a FF(144)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FF(1.)46 b(Y)-8 b(ou)31 b(ma)m(y)g(add)f(cards)g(y)m(ourself,)h
-(one)g(at)g(a)f(time,)i(using)e(astPutFits)h(\()p Fu(x)p
-FF(16.8\).)111 531 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)f(add)f(cards)h(y)m
-(ourself,)h(supplying)e(all)i(cards)e(concatenated)j(in)m(to)f(a)f
-(single)h(string,)g(using)227 644 y(astPutCards)30 b(\()p
-Fu(x)p FF(16.9\).)111 824 y(3.)46 b(Y)-8 b(ou)26 b(ma)m(y)f(write)g(an)
-g(AST)f(Ob)5 b(ject)25 b(to)g(the)g(FitsChan)g(\(using)g(astW)-8
-b(rite\),)28 b(whic)m(h)d(will)g(ha)m(v)m(e)h(the)f(e\013ect)227
-937 y(of)31 b(creating)h(new)d(cards)i(within)e(the)i(FitsChan)f(whic)m
-(h)g(describ)s(e)g(the)h(Ob)5 b(ject)30 b(\()p Fu(x)p
-FF(16.5\).)111 1117 y(4.)46 b(Y)-8 b(ou)40 b(ma)m(y)g(sp)s(ecify)e(a)i
-(source)f(function)g(whic)m(h)g(reads)g(data)h(from)f(some)g(external)h
-(store)g(of)f(FITS)227 1230 y(cards,)27 b(just)f(lik)m(e)i(the)f
-(source)f(asso)s(ciated)i(with)e(a)h(basic)g(Channel)e(\()p
-Fu(x)p FF(15.13\).)43 b(If)26 b(y)m(ou)h(supply)e(a)h(source)227
-1343 y(function,)37 b(it)e(will)h(b)s(e)e(called)i(when)f(the)g
-(FitsChan)g(is)g(created)h(in)f(order)g(to)h(\014ll)f(it)g(with)g(an)g
-(initial)227 1456 y(set)c(of)g(cards)f(\()p Fu(x)p FF(16.14\).)0
-1688 y(There)g(are)h(also)g(three)g(w)m(a)m(ys)g(of)f(remo)m(ving)h
-(cards)g(from)f(a)g(FitsChan:)111 1920 y(1.)46 b(Y)-8
-b(ou)31 b(ma)m(y)g(delete)h(cards)e(y)m(ourself,)h(one)f(at)i(a)e
-(time,)i(using)d(astDelFits)k(\()p Fu(x)p FF(16.13\).)111
-2100 y(2.)46 b(Y)-8 b(ou)38 b(ma)m(y)h(read)e(an)h(AST)f(Ob)5
-b(ject)37 b(from)g(the)h(FitsChan)g(\(using)f(astRead\),)k(whic)m(h)c
-(will)h(ha)m(v)m(e)h(the)227 2213 y(e\013ect)32 b(of)f(remo)m(ving)g
-(those)g(cards)f(from)g(the)g(FitsChan)h(whic)m(h)f(describ)s(e)f(the)i
-(Ob)5 b(ject)31 b(\()p Fu(x)p FF(16.10\).)111 2393 y(3.)46
-b(Y)-8 b(ou)33 b(ma)m(y)f(sp)s(ecify)f(a)i(sink)e(function)h(whic)m(h)f
-(writes)h(data)g(to)h(some)f(external)h(store)f(of)g(FITS)f(cards,)227
-2506 y(just)f(lik)m(e)i(the)f(sink)f(asso)s(ciated)i(with)e(a)h(basic)g
-(Channel)f(\()p Fu(x)p FF(15.14\).)44 b(If)30 b(y)m(ou)h(supply)e(a)i
-(sink)g(function,)227 2619 y(it)j(will)f(b)s(e)g(called)h(when)e(the)i
-(FitsChan)f(is)g(deleted)h(in)f(order)f(to)i(write)g(out)f(an)m(y)h
-(FITS)e(cards)h(that)227 2732 y(remain)e(in)f(it)h(\()p
-Fu(x)p FF(16.14\).)0 2964 y(Note,)42 b(in)c(particular,)j(that)e
-(reading)f(an)h(AST)e(Ob)5 b(ject)39 b(from)f(a)h(FitsChan)f(is)g
-Fx(destructive.)65 b FF(That)38 b(is,)j(it)0 3077 y(deletes)31
-b(the)g(FITS)f(cards)g(that)h(describ)s(e)f(the)g(Ob)5
-b(ject.)41 b(The)30 b(reason)g(for)h(this)f(is)g(explained)h(in)f
-Fu(x)p FF(17.5.)0 3232 y(In)25 b(addition)h(to)h(the)f(ab)s(o)m(v)m(e,)
-i(y)m(ou)f(ma)m(y)f(also)h(read)f(individual)f(cards)h(from)f(a)h
-(FitsChan)g(using)g(the)g(function)0 3345 y(astFindFits)j(\(whic)m(h)f
-(is)g(not)h(destructiv)m(e\).)41 b(This)28 b(is)g(the)g(main)g(means)g
-(of)g(writing)g(out)h(FITS)e(cards)h(if)g(y)m(ou)0 3458
-y(ha)m(v)m(e)i(not)f(supplied)f(a)h(sink)f(function.)40
-b(astFindFits)30 b(also)f(pro)m(vides)g(a)g(means)g(of)g(searc)m(hing)h
-(for)e(particular)0 3571 y(FITS)i(cards)h(\(b)m(y)g(k)m(eyw)m(ord,)h
-(for)f(example\))h(and)e(there)i(are)f(other)g(facilities)i(for)e(o)m
-(v)m(erwriting)i(cards)d(when)0 3684 y(required)g(\()p
-Fu(x)p FF(16.13\).)0 3966 y Fw(16.3)112 b(Creating)38
-b(a)g(FitsChan)0 4180 y FF(The)30 b(FitsChan)g(constructor)h(function,)
-f(astFitsChan,)h(is)g(straigh)m(tforw)m(ard)g(to)g(use:)227
-4398 y Ft(#include)41 b("ast.h")227 4498 y(AstFitsChan)e(*fitschan;)227
-4697 y(...)227 4896 y(fitschan)i(=)i(astFitsChan\()38
-b(NULL,)k(NULL,)f("Encoding=NATIVE")c(\);)0 5128 y FF(Here,)i(w)m(e)e
-(ha)m(v)m(e)g(omitted)h(an)m(y)f(source)f(or)h(sink)f(functions)g(b)m
-(y)g(supplying)g(NULL)g(p)s(oin)m(ters)g(for)h(the)f(\014rst)0
-5241 y(t)m(w)m(o)g(argumen)m(ts.)55 b(W)-8 b(e)36 b(ha)m(v)m(e)g(also)g
-(initialised)g(the)f(FitsChan's)g(Enco)s(ding)f(attribute)h(to)h(NA)-8
-b(TIVE.)35 b(This)0 5354 y(indicates)30 b(that)f(w)m(e)g(will)g(b)s(e)f
-(using)g(the)h(nativ)m(e)h(enco)s(ding)e(\()p Fu(x)p
-FF(16.1\))k(to)d(store)g(and)f(retriev)m(e)i(Ob)5 b(jects.)40
-b(If)29 b(this)0 5467 y(w)m(as)g(left)g(unsp)s(eci\014ed,)e(the)h
-(default)h(w)m(ould)f(dep)s(end)e(on)i(the)h(FitsChan's)f(con)m(ten)m
-(ts.)42 b(An)28 b(attempt)h(is)f(made)0 5580 y(to)36
-b(use)f(whatev)m(er)h(enco)s(ding)g(app)s(ears)e(to)i(ha)m(v)m(e)h(b)s
-(een)e(used)f(previously)-8 b(.)56 b(F)-8 b(or)36 b(an)g(empt)m(y)g
-(FitsChan,)g(the)0 5693 y(default)31 b(is)f(NA)-8 b(TIVE,)31
-b(but)f(it)g(do)s(es)g(no)h(harm)e(to)i(b)s(e)f(sure.)p
-eop end
-%%Page: 145 155
-TeXDict begin 145 154 bop 0 52 a Fy(16.4)93 b(Addressing)29
-b(Cards)g(in)h(a)h(FitsChan)2109 b FF(145)0 351 y Fw(16.4)112
-b(Addressing)39 b(Cards)f(in)f(a)h(FitsChan)0 601 y FF(Because)e(a)f
-(FitsChan)g(con)m(tains)h(an)f(ordered)f(sequence)h(of)g(header)f
-(cards,)i(a)f(mec)m(hanism)g(is)g(needed)g(for)0 714
-y(addressing)d(them.)46 b(This)31 b(allo)m(ws)j(y)m(ou)f(to)g(sp)s
-(ecify)f(where)f(new)h(cards)g(are)h(to)g(b)s(e)e(added,)i(for)f
-(example,)h(or)0 827 y(whic)m(h)d(card)g(is)h(to)g(b)s(e)f(deleted.)0
-1009 y(This)e(role)h(is)g(\014lled)f(b)m(y)g(the)h(FitsChan's)g(in)m
-(teger)h(Card)d(attribute,)j(whic)m(h)f(giv)m(es)g(the)g(index)f(of)h
-(the)g Fx(curr)-5 b(ent)0 1122 y(c)g(ar)g(d)37 b FF(in)d(the)h
-(FitsChan.)54 b(Y)-8 b(ou)36 b(can)f(nominate)g(an)m(y)h(card)f(y)m(ou)
-g(lik)m(e)h(to)g(b)s(e)e(curren)m(t,)i(simply)e(b)m(y)h(setting)h(a)0
-1235 y(new)30 b(v)-5 b(alue)31 b(for)f(the)g(Card)g(attribute,)h(for)f
-(example:)227 1542 y Ft(int)43 b(icard;)227 1741 y(...)227
-1940 y(astSetI\()e(fitschan,)e("Card",)i(icard)h(\))0
-2261 y FF(where)25 b(\\icard")i(con)m(tains)g(the)f(index)g(of)g(the)g
-(card)g(on)g(whic)m(h)f(y)m(ou)h(wish)f(to)i(op)s(erate)g(next.)39
-b(Some)26 b(functions)0 2374 y(will)36 b(up)s(date)g(the)g(Card)f
-(attribute)i(as)f(a)h(means)f(of)g(adv)-5 b(ancing)37
-b(through)e(the)h(sequence)h(of)f(cards,)h(when)0 2487
-y(reading)30 b(them)h(for)f(example,)h(or)g(to)g(indicate)g(whic)m(h)f
-(card)h(matc)m(hes)g(a)g(searc)m(h)g(criterion.)0 2669
-y(The)d(default)h(v)-5 b(alue)30 b(for)e(Card)g(is)h(one,)h(whic)m(h)f
-(is)g(the)g(index)f(of)h(the)g(\014rst)f(card.)41 b(This)28
-b(means)g(that)i(y)m(ou)f(can)0 2782 y(\\rewind")h(a)h(FitsChan)f(to)h
-(access)h(its)f(\014rst)e(card)i(b)m(y)f(clearing)h(the)g(Card)f
-(attribute:)227 3089 y Ft(astClear\()40 b(fitschan,)g("Card")h(\);)0
-3409 y FF(The)e(total)j(n)m(um)m(b)s(er)c(of)i(cards)f(in)g(a)h
-(FitsChan)g(is)g(giv)m(en)g(b)m(y)g(the)g(in)m(teger)h(Ncard)e
-(attribute.)70 b(This)38 b(is)i(a)0 3522 y(read-only)28
-b(attribute)h(whose)f(v)-5 b(alue)28 b(is)g(automatically)j(up)s(dated)
-c(as)h(y)m(ou)g(add)f(or)h(remo)m(v)m(e)i(cards.)39 b(It)29
-b(means)0 3635 y(y)m(ou)i(can)f(address)g(all)h(the)g(cards)f(in)g
-(sequence)h(using)f(a)g(lo)s(op)h(suc)m(h)f(as)g(the)h(follo)m(wing:)
-227 3942 y Ft(int)43 b(ncard;)227 4141 y(...)227 4340
-y(ncard)f(=)h(astGetI\()d(fitschan,)g("Ncard")h(\);)227
-4440 y(for)i(\()g(icard)e(=)i(1;)g(icard)f(<=)h(ncard;)e(icard++)f(\))j
-({)358 4540 y(astSetI\()d(fitschan,)g("Card",)h(icard)g(\);)358
-4639 y(<access)g(the)h(current)f(card>)227 4739 y(})0
-5059 y FF(Ho)m(w)m(ev)m(er,)d(it)d(is)g(usually)g(p)s(ossible)f(to)h
-(write)g(sligh)m(tly)h(tidier)f(lo)s(ops)g(based)f(on)h(the)g
-(astFindFits)h(function)0 5172 y(describ)s(ed)29 b(later)j(\()p
-Fu(x)p FF(16.6)g(and)e Fu(x)p FF(16.13\).)0 5354 y(If)k(y)m(ou)h(set)g
-(the)g(Card)f(attribute)h(to)g(a)g(v)-5 b(alue)35 b(larger)h(than)e
-(Ncard,)i(the)f(FitsChan)f(is)h(regarded)f(as)h(b)s(eing)0
-5467 y(p)s(ositioned)h(at)g(its)g Fx(end-of-\014le.)55
-b FF(In)35 b(this)h(case)g(there)g(is)g(no)f(curren)m(t)g(card)h(and)f
-(an)g(attempt)i(to)f(obtain)g(a)0 5580 y(v)-5 b(alue)26
-b(for)g(the)g(Card)f(attribute)i(will)f(alw)m(a)m(ys)h(return)e(the)h
-(v)-5 b(alue)27 b(Ncard)f(+)f(1.)40 b(When)25 b(a)i(FitsChan)e(is)h
-(empt)m(y)-8 b(,)0 5693 y(it)31 b(is)f(alw)m(a)m(ys)i(at)f(the)g
-(end-of-\014le.)p eop end
-%%Page: 146 156
-TeXDict begin 146 155 bop 0 52 a FF(146)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y Fw(16.5)112 b(W)-9 b(riting)37 b(Nativ)m(e)g(Ob)6
-b(jects)38 b(to)f(a)h(FitsChan)0 571 y FF(Ha)m(ving)d(created)g(an)e
-(empt)m(y)i(FitsChan)e(\()p Fu(x)p FF(16.3\),)38 b(y)m(ou)c(can)g
-(write)g(an)m(y)g(AST)f(Ob)5 b(ject)34 b(to)g(it)h(in)e(the)h(nativ)m
-(e)0 684 y(enco)s(ding)c(using)g(the)h(astW)-8 b(rite)32
-b(function.)41 b(Let)30 b(us)g(assume)g(w)m(e)h(are)g(writing)f(a)h
-(SkyF)-8 b(rame,)3225 651 y Fv(24)3331 684 y FF(as)30
-b(follo)m(ws:)227 927 y Ft(AstSkyFrame)39 b(*skyframe;)227
-1027 y(int)k(nobj;)227 1226 y(...)227 1426 y(nobj)f(=)h(astWrite\()d
-(fitschan,)g(skyframe)g(\);)0 1682 y FF(Since)22 b(w)m(e)h(ha)m(v)m(e)g
-(selected)h(the)e(nativ)m(e)h(enco)s(ding)f(\()p Fu(x)p
-FF(16.1\),)27 b(there)22 b(are)h(no)f(restrictions)h(on)f(the)g(class)h
-(of)f(Ob)5 b(ject)0 1795 y(w)m(e)30 b(ma)m(y)f(write,)h(so)g(astW)-8
-b(rite)31 b(should)d(alw)m(a)m(ys)j(return)d(a)i(v)-5
-b(alue)29 b(of)h(one,)g(unless)e(an)h(error)g(o)s(ccurs.)40
-b(Unlik)m(e)30 b(a)0 1908 y(basic)e(Channel)f(\()p Fu(x)p
-FF(15.3\),)k(this)d(write)g(op)s(eration)g(will)h(not)f(pro)s(duce)e
-(an)m(y)i(output)g(from)f(our)g(program.)40 b(The)0 2021
-y(FITS)30 b(headers)g(pro)s(duced)e(are)j(simply)f(stored)h(inside)f
-(the)g(FitsChan.)0 2182 y(After)38 b(this)f(write)g(op)s(eration,)j
-(the)d(Ncard)h(attribute)g(will)f(b)s(e)g(up)s(dated)f(to)i(re\015ect)g
-(the)g(n)m(um)m(b)s(er)e(of)h(new)0 2295 y(cards)f(added)f(to)h(the)g
-(FitsChan)g(and)f(the)h(Card)f(attribute)i(will)f(p)s(oin)m(t)g(at)g
-(the)g(card)g(immediately)h(after)0 2408 y(the)g(last)g(one)g(written.)
-59 b(Since)37 b(our)f(FitsChan)h(w)m(as)g(initially)h(empt)m(y)-8
-b(,)39 b(the)e(Card)e(attribute)j(will,)g(in)f(this)0
-2521 y(example,)31 b(p)s(oin)m(t)g(at)g(the)f(end-of-\014le)h(\()p
-Fu(x)p FF(16.4\).)0 2682 y(The)41 b(FITS)f(standard)h(imp)s(oses)f(a)i
-(limit)g(of)f(68)h(c)m(haracters)h(on)e(the)g(length)h(of)f(strings)g
-(whic)m(h)g(ma)m(y)h(b)s(e)0 2795 y(stored)33 b(in)g(a)g(single)g
-(header)g(card.)48 b(Sometimes,)35 b(a)e(description)g(of)g(an)g(AST)f
-(Ob)5 b(ject)33 b(in)m(v)m(olv)m(es)i(the)e(use)f(of)0
-2908 y(strings)c(whic)m(h)f(exceed)i(this)f(limit)g(\()p
-Fx(e.g.)g FF(a)g(F)-8 b(rame)28 b(title)i(can)e(b)s(e)f(of)h(arbitrary)
-f(length\).)41 b(If)27 b(this)h(o)s(ccurs,)g(the)0 3021
-y(long)j(string)g(will)f(b)s(e)g(split)h(o)m(v)m(er)h(t)m(w)m(o)g(or)e
-(more)h(header)f(cards.)41 b(Eac)m(h)31 b(\\con)m(tin)m(uation")i(card)
-e(will)g(ha)m(v)m(e)g(the)0 3134 y(k)m(eyw)m(ord)d Fq(CONTINUE)e
-FF(in)i(columns)f(1)h(to)h(8,)g(and)e(will)i(con)m(tain)g(a)f(space)h
-(in)e(column)h(9)g(\(instead)h(of)f(the)g(usual)0 3247
-y(equals)h(sign\).)40 b(An)29 b(amp)s(ersand)e(\(\\)p
-Fq(&)p FF("\))i(is)g(app)s(ended)e(to)i(the)g(end)f(of)g(eac)m(h)i(of)f
-(the)g(strings)f(\(except)i(the)f(last)0 3360 y(one\))i(to)g(indicate)h
-(that)f(the)f(string)g(is)h(con)m(tin)m(ued)g(on)f(the)h(next)f(card.)0
-3521 y(Note,)42 b(this)d(splitting)h(of)f(long)g(strings)g(o)m(v)m(er)h
-(sev)m(eral)g(cards)e(only)h(o)s(ccurs)g(when)f(writing)g(AST)g(Ob)5
-b(jects)0 3634 y(to)37 b(a)f(FitsChan)f(using)h(the)g(astW)-8
-b(rite)38 b(function)d(and)h(the)g Fx(native)g FF(enco)s(ding.)57
-b(If)35 b(a)h(long)h(string)e(is)h(stored)0 3747 y(in)j(a)g(FitsChan)g
-(using)g(\(for)g(instance\))h(the)f(astPutFits)h(or)f(astPutCards)f
-(function,)k(it)d(will)h(simply)e(b)s(e)0 3860 y(truncated.)0
-4151 y Fw(16.6)112 b(Extracting)37 b(Individual)i(Cards)f(from)g(a)g
-(FitsChan)0 4371 y FF(T)-8 b(o)37 b(examine)h(the)e(con)m(ten)m(ts)j
-(of)e(the)g(FitsChan)f(after)i(writing)e(the)h(SkyF)-8
-b(rame)37 b(ab)s(o)m(v)m(e)h(\()p Fu(x)p FF(16.5\),)j(w)m(e)d(m)m(ust)0
-4484 y(write)d(a)h(simple)e(lo)s(op)i(to)f(extract)i(eac)m(h)f(card)f
-(in)f(turn)g(and)h(prin)m(t)f(it)i(out.)54 b(W)-8 b(e)37
-b(m)m(ust)d(also)i(remem)m(b)s(er)f(to)0 4597 y(rewind)29
-b(the)i(FitsChan)f(\014rst,)g Fx(e.g.)g FF(using)f(astClear.)42
-b(The)30 b(follo)m(wing)i(lo)s(op)e(w)m(ould)h(do:)227
-4840 y Ft(#include)41 b(<stdio.h>)227 4940 y(char)h(card[)g(81)g(];)227
-5139 y(...)227 5338 y(astClear\()e(fitschan,)g("Card")h(\);)227
-5438 y(while)h(\()h(astFindFits\()c(fitschan,)g("\045f",)j(card,)f(1)j
-(\))f(\))g(\(void\))e(printf\()g("\045s\\n",)f(card)i(\);)p
-0 5516 1512 4 v 73 5570 a Fs(24)138 5602 y Fr(More)27
-b(probably)-6 b(,)26 b(y)n(ou)g(w)n(ould)g(w)n(an)n(t)h(to)f(write)h(a)
-g(F)-6 b(rameSet,)26 b(but)g(for)h(purp)r(oses)f(of)h(illustration)h(a)
-e(SkyF)-6 b(rame)25 b(con)n(tains)i(a)0 5693 y(more)f(manageable)h
-(amoun)n(t)f(of)g(data.)p eop end
-%%Page: 147 157
-TeXDict begin 147 156 bop 0 52 a Fy(16.7)93 b(The)29
-b(Nativ)m(e)k(FitsChan)d(Output)f(F)-8 b(ormat)1904 b
-FF(147)0 351 y(Here,)43 b(w)m(e)e(ha)m(v)m(e)g(used)e(the)h
-(astFindFits)h(function)f(to)g(\014nd)f(a)h(FITS)f(card)h(b)m(y)g(k)m
-(eyw)m(ord.)70 b(It)40 b(is)g(giv)m(en)h(a)0 464 y(k)m(eyw)m(ord)e
-(template)h(of)f(\\\045f)7 b(",)42 b(whic)m(h)c(matc)m(hes)i(an)m(y)f
-(FITS)f(k)m(eyw)m(ord,)k(so)d(it)g(alw)m(a)m(ys)i(\014nds)c(the)i
-(curren)m(t)0 577 y(card,)44 b(whic)m(h)d(it)h(returns.)72
-b(Its)41 b(fourth)f(argumen)m(t)i(is)f(set)h(to)g(1,)i(to)e(indicate)g
-(that)g(the)f(Card)g(attribute)0 690 y(should)27 b(b)s(e)g(incremen)m
-(ted)h(afterw)m(ards)g(so)g(that)g(the)g(follo)m(wing)i(card)d(will)h
-(b)s(e)g(found)e(the)i(next)g(time)g(around)0 803 y(the)j(lo)s(op.)40
-b(astFindFits)32 b(returns)d(zero)i(when)e(it)i(reac)m(hes)h(the)e
-(end-of-\014le)h(and)f(this)g(terminates)h(the)g(lo)s(op.)0
-961 y(If)37 b(w)m(e)g(w)m(ere)h(storing)f(the)g(FITS)g(headers)f(in)h
-(an)g(output)g(FITS)f(\014le)h(instead)h(of)f(prin)m(ting)g(them)g
-(out,)i(w)m(e)0 1074 y(migh)m(t)h(use)f(a)h(lo)s(op)g(lik)m(e)h(this)e
-(but)g(replace)h(\\prin)m(tf)7 b(")40 b(with)g(a)f(suitable)h(data)h
-(storage)g(op)s(eration.)68 b(This)0 1187 y(w)m(ould)30
-b(only)h(b)s(e)e(necessary)i(if)f(w)m(e)h(had)f(not)h(pro)m(vided)f(a)g
-(sink)g(function)g(for)h(the)f(FitsChan)g(\()p Fu(x)p
-FF(16.14\).)0 1474 y Fw(16.7)112 b(The)38 b(Nativ)m(e)f(FitsChan)i
-(Output)f(F)-9 b(ormat)0 1692 y FF(If)39 b(w)m(e)g(prin)m(t)g(out)g
-(the)g(FITS)g(header)g(cards)f(describing)h(the)g(SkyF)-8
-b(rame)40 b(w)m(e)f(wrote)h(earlier)g(\()p Fu(x)p FF(16.5\),)k(w)m(e)0
-1805 y(should)29 b(obtain)i(something)g(lik)m(e)h(the)e(follo)m(wing:)
-227 2037 y Ft(COMMENT)41 b(AST)h(+++++++++++++++++)o(++)o(+++)o(++)o
-(+++)o(++)o(++)o(+++)o(++)o(+++)o(++)o(+++)o(++)o(++)o(+++)o(++)o(+++)o
-(++)o(++)o(+++)o(+)37 b(AST)227 2137 y(COMMENT)k(AST)522
-b(Beginning)40 b(of)i(AST)h(data)f(for)g(SkyFrame)e(object)564
-b(AST)227 2236 y(COMMENT)41 b(AST)h(.................)o(..)o(...)o(..)o
-(...)o(..)o(..)o(...)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(..)o(...)o(.)37 b(AST)227 2336 y(BEGAST_A=)j('SkyFrame')475
-b(/)44 b(Description)39 b(of)j(celestial)e(coordinate)g(system)227
-2435 y(NAXES_A)h(=)871 b(2)43 b(/)h(Number)d(of)h(coordinate)e(axes)227
-2535 y(AX1_A)129 b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(1)227
-2635 y(BEGAST_B=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 2734 y(ENDAST_A=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 2834 y(AX2_A)129
-b(=)43 b(')348 b(')479 b(/)44 b(Axis)e(number)f(2)227
-2934 y(BEGAST_C=)f('SkyAxis)g(')479 b(/)44 b(Celestial)39
-b(coordinate)h(axis)227 3033 y(ENDAST_B=)g('SkyAxis)g(')479
-b(/)44 b(End)e(of)h(object)e(definition)227 3133 y(ISA_A)129
-b(=)43 b('Frame)128 b(')479 b(/)44 b(Coordinate)39 b(system)i
-(description)227 3232 y(SYSTEM_A=)f('FK4-NO-E')475 b(/)44
-b(Celestial)39 b(coordinate)h(system)h(type)227 3332
-y(EPOCH_A)g(=)653 b(1958.0)41 b(/)j(Besselian)39 b(epoch)j(of)h
-(observation)227 3432 y(ENDAST_C=)d('SkyFrame')475 b(/)44
-b(End)e(of)h(object)e(definition)227 3531 y(COMMENT)g(AST)h
-(.................)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(..)o(...)o
-(..)o(...)o(..)o(..)o(...)o(..)o(...)o(..)o(..)o(...)o(.)37
-b(AST)227 3631 y(COMMENT)k(AST)653 b(End)42 b(of)h(AST)f(data)g(for)g
-(SkyFrame)f(object)694 b(AST)227 3731 y(COMMENT)41 b(AST)h
-(-----------------)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(--)o(---)o
-(--)o(---)o(--)o(--)o(---)o(--)o(---)o(--)o(--)o(---)o(-)37
-b(AST)0 3976 y FF(As)i(y)m(ou)h(can)f(see,)j(this)d(resem)m(bles)h(the)
-f(information)g(that)h(w)m(ould)f(b)s(e)f(written)i(to)f(a)h(basic)f
-(Channel)g(to)0 4089 y(describ)s(e)26 b(the)h(same)g(SkyF)-8
-b(rame)27 b(\()p Fu(x)p FF(15.8\),)j(except)e(that)f(it)g(has)g(b)s
-(een)e(formatted)j(in)m(to)f(80-c)m(haracter)j(header)0
-4202 y(cards)g(according)h(to)h(FITS)d(con)m(v)m(en)m(tions.)0
-4361 y(There)h(are)h(also)g(a)g(n)m(um)m(b)s(er)e(of)h(other)h
-(di\013erences)g(w)m(orth)f(noting:)111 4606 y(1.)46
-b(There)33 b(is)h(no)f(unnecessary)g(information)g(ab)s(out)g(default)h
-(v)-5 b(alues)34 b(pro)m(vided)f(for)g(the)g(b)s(ene\014t)g(of)g(the)
-227 4719 y(h)m(uman)40 b(reader.)73 b(This)40 b(is)h(b)s(ecause)g(the)g
-(F)-8 b(ull)42 b(attribute)f(for)g(a)g(FitsChan)g(defaults)g(to)h
-Fu(\000)p FF(1,)i(th)m(us)227 4832 y(suppressing)32 b(this)h
-(information)g(\()p Fx(c.f.)g Fu(x)p FF(15.9\).)51 b(Y)-8
-b(ou)34 b(can)f(restore)h(the)f(information)h(if)f(y)m(ou)g(wish)g(b)m
-(y)227 4945 y(setting)i(F)-8 b(ull)35 b(to)g(0)f(or)g(+1,)h(in)f(whic)m
-(h)g(case)h(additional)g(COMMENT)e(cards)h(will)g(b)s(e)g(generated)h
-(to)227 5058 y(hold)30 b(it.)111 5241 y(2.)46 b(The)24
-b(information)g(is)g(not)g(inden)m(ted,)i(b)s(ecause)e(FITS)f(do)s(es)g
-(not)i(allo)m(w)g(this.)39 b(Ho)m(w)m(ev)m(er,)27 b(if)d(y)m(ou)g(c)m
-(hange)227 5354 y(the)32 b(F)-8 b(ull)33 b(attribute)f(to)h(0)f(or)g
-(+1,)h(commen)m(ts)g(will)f(b)s(e)f(included)g(that)i(are)f(in)m
-(tended)g(to)g(help)g(break)227 5467 y(up)f(the)i(sequence)f(of)h
-(headers)e(and)h(highligh)m(t)h(its)g(structure.)45 b(This)32
-b(will)g(probably)g(only)g(b)s(e)f(of)i(use)227 5580
-y(if)d(y)m(ou)g(are)h(attempting)g(to)g(trac)m(k)g(do)m(wn)e(a)i
-(problem)e(b)m(y)h(examining)g(the)h(FITS)e(cards)g(pro)s(duced)g(in)
-227 5693 y(detail.)p eop end
-%%Page: 148 158
-TeXDict begin 148 157 bop 0 52 a FF(148)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))111
-351 y FF(3.)46 b(The)32 b(FITS)g(k)m(eyw)m(ords)g(whic)m(h)h(app)s(ear)
-e(to)i(the)g(left)g(of)f(the)h(\\=")g(signs)f(ha)m(v)m(e)i(additional)f
-(c)m(haracters)227 464 y(\(\\)p Fq(_)p FF(A",)27 b(\\)p
-Fq(_)p FF(B",)f Fx(etc.)p FF(\))38 b(app)s(ended)24 b(to)h(them.)39
-b(This)24 b(is)h(done)g(in)g(order)f(to)i(mak)m(e)g(eac)m(h)g(k)m(eyw)m
-(ord)f(unique.)0 759 y(This)d(last)i(p)s(oin)m(t)f(is)h(w)m(orth)f
-(further)e(commen)m(t)k(and)d(is)h(necessary)h(b)s(ecause)f(the)g(FITS)
-g(standard)f(only)h(allo)m(ws)0 872 y(for)28 b(certain)h(k)m(eyw)m
-(ords)f(\(suc)m(h)g(as)g(COMMENT)g(and)f(HISTOR)-8 b(Y\))28
-b(to)h(app)s(ear)e(more)h(than)g(once.)40 b(astW)-8 b(rite)0
-985 y(therefore)32 b(app)s(ends)e(an)h(arbitrary)g(sequence)h(of)g(t)m
-(w)m(o)g(c)m(haracters)h(to)f(eac)m(h)h(new)e(k)m(eyw)m(ord)h(it)g
-(generates)h(in)0 1098 y(order)d(to)h(ensure)f(that)h(it)f(do)s(es)h
-(not)f(duplicate)h(an)m(y)g(already)g(presen)m(t)f(in)g(the)h
-(FitsChan.)0 1272 y(The)24 b(main)g(risk)g(from)f(not)i(follo)m(wing)h
-(this)e(con)m(v)m(en)m(tion)i(is)e(that)h(some)g(soft)m(w)m(are)h(migh)
-m(t)f(ignore)f(\(sa)m(y\))i(all)f(but)0 1385 y(the)k(last)h(o)s
-(ccurrence)f(of)g(a)g(k)m(eyw)m(ord)g(b)s(efore)g(passing)f(the)h(FITS)
-f(headers)h(on.)40 b(Suc)m(h)28 b(an)h(ev)m(en)m(t)h(is)f(unlik)m(ely)
--8 b(,)0 1498 y(but)27 b(w)m(ould)g(ob)m(viously)h(destro)m(y)g(the)g
-(information)g(presen)m(t,)g(so)g(astW)-8 b(rite)30 b(enforces)e(the)f
-(uniqueness)g(of)g(the)0 1610 y(k)m(eyw)m(ords)k(it)g(uses.)40
-b(The)30 b(extra)h(c)m(haracters)h(added)d(are)i(ignored)g(when)e(the)i
-(information)f(is)h(read)f(bac)m(k.)0 1784 y(As)44 b(with)g(a)g(basic)h
-(Channel,)h(y)m(ou)f(can)f(also)h(suppress)d(the)i(commen)m(ts)h(pro)s
-(duced)e(in)g(a)i(FitsChan)f(b)m(y)0 1897 y(setting)35
-b(the)e(b)s(o)s(olean)h(\(in)m(teger\))i(Commen)m(t)e(attribute)g(to)g
-(zero)h(\()p Fu(x)p FF(15.10\).)53 b(Ho)m(w)m(ev)m(er,)37
-b(FITS)c(headers)g(are)0 2010 y(traditionally)f(generously)f(commen)m
-(ted,)g(so)g(this)f(is)h(not)f(recommended.)0 2340 y
-Fw(16.8)112 b(Adding)38 b(Individual)i(Cards)e(to)f(a)g(FitsChan)0
-2578 y FF(T)-8 b(o)31 b(insert)g(individual)f(cards)g(in)m(to)i(a)f
-(FitsChan,)g(prior)f(to)h(reading)g(them)f(bac)m(k)i(as)e(Ob)5
-b(jects)31 b(for)g(example,)0 2690 y(y)m(ou)37 b(should)f(use)h(the)g
-(astPutFits)h(function.)61 b(Y)-8 b(ou)37 b(can)h(insert)f(a)g(card)g
-(in)g(fron)m(t)g(of)g(the)g(curren)m(t)g(one)g(as)0 2803
-y(follo)m(ws:)227 3085 y Ft(astPutFits\()i(fitschan,)h(card,)i(0)h(\);)
-0 3380 y FF(where)c(the)h(third)e(argumen)m(t)i(of)g(zero)g(indicates)g
-(that)g(the)g(curren)m(t)f(card)h(should)e(not)i(b)s(e)f(o)m(v)m
-(erwritten.)0 3493 y(Note)32 b(that)f(facilities)h(are)f(not)g(pro)m
-(vided)f(b)m(y)g(AST)g(for)g(formatting)h(the)f(card)h(con)m(ten)m(ts.)
-0 3667 y(After)41 b(inserting)g(a)h(card,)i(the)d(FitsChan's)g(Card)f
-(attribute)i(p)s(oin)m(ts)f(at)h(the)f(original)h(Card,)h(or)e(at)h
-(the)0 3780 y(end-of-\014le)k(if)f(the)h(FitsChan)g(w)m(as)g
-(originally)g(empt)m(y)-8 b(.)88 b(En)m(tering)45 b(a)h(sequence)g(of)g
-(cards)f(is)h(therefore)0 3893 y(straigh)m(tforw)m(ard.)79
-b(If)43 b(\\cards")g(is)g(an)g(arra)m(y)h(of)f(p)s(oin)m(ters)g(to)g
-(strings)g(con)m(taining)i(FITS)d(header)h(cards)0 4006
-y(and)32 b(\\ncards")h(is)g(the)g(n)m(um)m(b)s(er)e(of)i(cards,)g(then)
-g(a)g(lo)s(op)f(suc)m(h)h(as)g(the)g(follo)m(wing)h(will)f(insert)f
-(the)h(cards)g(in)0 4119 y(sequence)e(in)m(to)g(a)g(FitsChan:)227
-4401 y Ft(#define)41 b(MAXCARD)g(100)227 4500 y(char)h(*cards[)f
-(MAXCARD)g(];)227 4600 y(int)i(ncard;)227 4799 y(...)227
-4998 y(for)g(\()g(icard)e(=)i(0;)g(icard)f(<)h(ncard;)e(icard++)g(\))i
-(astPutFits\()c(fitschan,)h(cards[)h(icard)g(],)i(0)g(\);)0
-5294 y FF(The)30 b(string)f(con)m(taining)j(a)e(card)g(need)g(not)g(b)s
-(e)g(n)m(ull)g(terminated)g(if)g(it)h(is)f(at)g(least)i(80)f(c)m
-(haracters)g(long)g(\(w)m(e)0 5406 y(ha)m(v)m(e)h(not)e(allo)s(cated)j
-(space)e(for)f(the)g(strings)g(themselv)m(es)i(in)e(this)g(brief)g
-(example\).)0 5580 y(Note)37 b(that)f(astPutFits)h(enforces)f(the)g(v)
--5 b(alidit)m(y)37 b(of)f(a)g(FitsChan)g(b)m(y)g(rejecting)h(an)m(y)f
-(cards)f(whic)m(h)h(do)f(not)0 5693 y(adhere)30 b(to)h(the)g(FITS)e
-(standard.)40 b(If)30 b(an)m(y)h(suc)m(h)f(cards)g(are)h(detected,)h
-(an)e(error)g(will)h(result.)p eop end
-%%Page: 149 159
-TeXDict begin 149 158 bop 0 52 a Fy(16.9)93 b(Adding)29
-b(Concatenated)j(Cards)d(to)i(a)g(FitsChan)1676 b FF(149)0
-351 y Fw(16.9)112 b(Adding)38 b(Concatenated)h(Cards)f(to)f(a)h
-(FitsChan)0 563 y FF(If)f(y)m(ou)h(ha)m(v)m(e)h(all)f(y)m(our)g(cards)f
-(concatenated)j(together)f(in)m(to)g(a)f(single)g(long)g(string,)i(eac)
-m(h)f(o)s(ccup)m(ying)f(80)0 676 y(c)m(haracters)45 b(\(with)f(no)g
-(delimiters\),)k(y)m(ou)d(can)f(insert)g(them)g(in)m(to)g(a)h(FitsChan)
-e(in)h(a)g(single)h(call)g(using)0 789 y(astPutCards.)53
-b(This)34 b(call)i(\014rst)e(empties)h(the)g(supplied)e(FitsChan)i(of)g
-(an)m(y)g(existing)h(cards,)f(then)g(inserts)0 902 y(the)30
-b(new)g(cards,)g(and)f(\014nally)h(rewinds)f(the)h(FitsChan)g(so)g
-(that)h(a)f(subsequen)m(t)g(call)h(to)g(astRead)g(will)f(start)0
-1014 y(reading)37 b(from)g(the)h(\014rst)e(supplied)g(card.)61
-b(The)37 b(astPutCards)f(function)h(uses)g(astPutFits)i(in)m(ternally)f
-(to)0 1127 y(in)m(terpret)31 b(and)f(store)h(eac)m(h)g(individual)f
-(card,)g(and)g(so)h(the)f(ca)m(v)m(eats)j(in)e Fu(x)p
-FF(16.8)h(should)d(b)s(e)h(read.)0 1280 y(F)-8 b(or)39
-b(instance,)j(if)d(y)m(ou)g(are)g(using)f(the)h(CFITSIO)e(library)h
-(for)h(access)h(to)f(FITS)f(\014les,)j(y)m(ou)e(can)g(use)f(the)0
-1393 y(CFITSIO)29 b(\014ts)p Fq(_)p FF(hdr2str)f(function)j(to)g
-(obtain)f(a)h(string)g(suitable)f(for)h(passing)f(to)h(astPutCards:)227
-1802 y Ft(if\()43 b(!fits_hdr2str\()37 b(fptr,)42 b(0,)h(NULL,)e(0,)i
-(&header,)d(&nkeys,)h(&status)g(\))i(\))358 1901 y(fitschan)d(=)j
-(astFitsChan\()c(NULL,)j(NULL,)f("")i(\);)358 2001 y(astPutCards\()c
-(fitschan,)h(header)h(\);)358 2101 y(header)g(=)i(free\()f(header)f
-(\);)358 2200 y(wcsinfo)g(=)i(astRead\()d(fitschan)g(\);)358
-2399 y(...)227 2499 y(})0 2778 y Fw(16.10)112 b(Reading)39
-b(Nativ)m(e)e(Ob)6 b(jects)38 b(F)-9 b(rom)38 b(a)g(FitsChan)0
-2989 y FF(Once)d(y)m(ou)g(ha)m(v)m(e)h(stored)f(a)g(FITS)g(header)f
-(description)h(of)g(an)g(Ob)5 b(ject)35 b(in)g(a)g(FitsChan)g(using)f
-(the)h(nativ)m(e)0 3102 y(enco)s(ding)j(\()p Fu(x)p FF(16.5\),)k(y)m
-(ou)d(can)f(read)g(it)g(bac)m(k)h(using)e(astRead)i(in)e(m)m(uc)m(h)h
-(the)g(same)g(w)m(a)m(y)h(as)f(with)g(a)g(basic)0 3215
-y(Channel)29 b(\()p Fu(x)p FF(15.4\).)44 b(Similar)30
-b(commen)m(ts)h(ab)s(out)f(v)-5 b(alidating)31 b(the)g(Ob)5
-b(ject)30 b(y)m(ou)h(read)f(also)h(apply)f(\()p Fu(x)p
-FF(15.6\).)43 b(If)0 3328 y(y)m(ou)31 b(ha)m(v)m(e)g(just)f(written)h
-(to)g(the)f(FitsChan,)h(y)m(ou)f(m)m(ust)h(remem)m(b)s(er)e(to)j
-(rewind)d(it)i(\014rst:)227 3537 y Ft(AstObject)40 b(*object;)227
-3737 y(...)227 3936 y(astClear\()g(fitschan,)g("Card")h(\);)227
-4036 y(object)g(=)j(astRead\()c(fitschan)g(\);)0 4258
-y FF(An)35 b(imp)s(ortan)m(t)g(feature)h(of)g(a)f(FitsChan)h(is)f(that)
-h(read)f(op)s(erations)h(are)f(destructiv)m(e.)57 b(This)35
-b(means)g(that)0 4371 y(if)40 b(an)g(Ob)5 b(ject)40 b(description)g(is)
-f(found,)j(it)e(will)g(b)s(e)g(consumed)f(b)m(y)h(astRead)g(whic)m(h)g
-(will)g(remo)m(v)m(e)h(all)g(the)0 4484 y(cards)32 b(in)m(v)m(olv)m
-(ed,)i(including)d(asso)s(ciated)j(COMMENT)d(cards,)i(from)e(the)h
-(FitsChan.)46 b(Th)m(us,)31 b(if)h(y)m(ou)g(write)0 4597
-y(an)f(Ob)5 b(ject)32 b(to)g(a)g(FitsChan,)g(rewind,)f(and)g(read)h
-(the)g(same)g(Ob)5 b(ject)31 b(bac)m(k,)i(y)m(ou)f(should)f(end)f(up)h
-(with)g(the)0 4710 y(original)41 b(FitsChan)e(con)m(ten)m(ts.)71
-b(If)39 b(y)m(ou)h(need)g(to)g(circum)m(v)m(en)m(t)h(this)f(b)s(eha)m
-(viour)f(for)h(an)m(y)g(reason,)i(it)e(is)g(a)0 4823
-y(simple)32 b(matter)i(to)f(mak)m(e)h(a)f(cop)m(y)g(of)f(a)h(FitsChan)g
-(using)f(astCop)m(y)h(\()p Fu(x)p FF(4.13\).)50 b(If)32
-b(y)m(ou)h(then)f(read)g(from)g(the)0 4936 y(cop)m(y)-8
-b(,)32 b(the)e(original)i(FitsChan)e(will)h(remain)f(un)m(touc)m(hed.)0
-5089 y(After)f(a)g(read)f(completes,)j(the)e(FitsChan's)f(Card)g
-(attribute)i(iden)m(ti\014es)f(the)g(card)f(immediately)i(follo)m(wing)
-0 5201 y(the)h(last)g(card)f(read,)h(or)f(the)h(end-of-\014le)f(of)h
-(there)f(are)h(no)f(more)h(cards.)0 5354 y(Since)f(the)h
-Fx(native)g FF(enco)s(ding)f(is)h(b)s(eing)f(used,)g(an)m(y)h(long)g
-(strings)f(in)m(v)m(olv)m(ed)i(in)f(the)f(ob)5 b(ject)32
-b(description)e(will)0 5467 y(ha)m(v)m(e)j(b)s(een)f(split)g(in)m(to)h
-(t)m(w)m(o)h(or)e(more)g(adjacen)m(t)i(con)m(tuation)g(cards)e(when)f
-(the)h(Ob)5 b(ject)33 b(w)m(as)f(stored)g(in)g(the)0
-5580 y(header)37 b(using)f(function)g(astW)-8 b(rite.)62
-b(The)37 b(astRead)g(function)g(rev)m(erses)g(this)g(pro)s(cess)f(b)m
-(y)h(concatenating)0 5693 y(an)m(y)31 b(suc)m(h)f(adjacen)m(t)h(con)m
-(tin)m(uation)i(cards)d(to)h(re-create)h(the)f(original)g(long)g
-(string.)p eop end
-%%Page: 150 160
-TeXDict begin 150 159 bop 0 52 a FF(150)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))0
-351 y Fw(16.11)112 b(Sa)m(ving)39 b(and)f(Restoring)f(Multiple)i(Ob)6
-b(jects)38 b(in)g(a)f(FitsChan)0 570 y FF(When)32 b(using)f(the)h
-(nativ)m(e)h(FITS)e(enco)s(ding,)i(m)m(ultiple)f(Ob)5
-b(jects)32 b(ma)m(y)g(b)s(e)g(stored)f(and)h(all)g(I/O)g(op)s(erations)
-0 683 y(are)40 b(sequen)m(tial.)68 b(This)39 b(means)g(that)h(y)m(ou)f
-(can)h(simply)f(write)g(a)h(sequence)f(of)h(Ob)5 b(jects)39
-b(to)h(a)f(FitsChan.)0 796 y(After)32 b(eac)m(h)h(write)g(op)s
-(eration,)g(the)f(Card)f(attribute)i(will)f(b)s(e)f(up)s(dated)g(so)h
-(that)h(the)f(next)g(write)g(app)s(ends)0 909 y(the)f(next)f(Ob)5
-b(ject)31 b(description)f(to)h(the)g(previous)f(one.)0
-1069 y(If)g(y)m(ou)g(then)g(rewind)f(the)h(FitsChan,)h(y)m(ou)f(can)h
-(read)f(the)g(Ob)5 b(jects)30 b(bac)m(k)h(in)f(the)h(original)g(order.)
-40 b(Reading)0 1182 y(them)21 b(bac)m(k)g(will,)i(of)e(course,)i(remo)m
-(v)m(e)f(their)f(descriptions)g(from)f(the)h(FitsChan)f(\()p
-Fu(x)p FF(16.10\))k(but)c(the)h(b)s(eha)m(viour)0 1295
-y(of)31 b(the)f(Card)g(attribute)h(is)f(suc)m(h)g(that)h(successiv)m(e)
-h(reads)e(will)h(simply)f(return)f(eac)m(h)i(Ob)5 b(ject)31
-b(in)f(sequence.)0 1454 y(The)d(only)h(thing)f(that)h(ma)m(y)g(require)
-f(care,)i(giv)m(en)g(that)f(a)g(FitsChan)f(can)h(alw)m(a)m(ys)h(b)s(e)e
-(addressed)f(randomly)0 1567 y(b)m(y)38 b(setting)i(its)f(Card)e
-(attribute,)k(is)e(to)g(a)m(v)m(oid)h(writing)e(one)h(Ob)5
-b(ject)38 b(on)h(top)f(of)h(another.)65 b(F)-8 b(or)39
-b(ob)m(vious)0 1680 y(reasons,)32 b(the)g(Ob)5 b(ject)31
-b(descriptions)h(in)f(a)h(FitsChan)f(m)m(ust)h(remain)f(separate)i(if)e
-(they)h(are)g(to)g(mak)m(e)g(sense)0 1793 y(when)d(read)i(bac)m(k.)0
-2082 y Fw(16.12)112 b(Mixing)39 b(Nativ)m(e)e(Ob)6 b(jects)38
-b(with)f(Other)h(FITS)g(Cards)0 2301 y FF(Of)f(course,)j(an)m(y)d(real)
-i(FITS)d(header)i(will)f(con)m(tain)i(other)f(information)g(b)s(esides)
-f(AST)f(Ob)5 b(jects,)40 b(if)d(only)0 2414 y(the)32
-b(mandatory)g(FITS)g(cards)g(that)g(m)m(ust)g(accompan)m(y)i(all)f
-(FITS)e(data.)47 b(When)32 b(FITS)f(headers)h(are)h(read)0
-2527 y(in)g(from)f(a)h(real)h(dataset,)h(therefore,)f(an)m(y)f(nativ)m
-(e)i(AST)d(Ob)5 b(ject)33 b(descriptions)g(will)g(b)s(e)f(in)m
-(ter-mixed)i(with)0 2640 y(man)m(y)c(other)h(cards.)0
-2800 y(Because)j(this)f(is)g(the)g(normal)g(state)h(of)f(a\013airs,)h
-(the)f(b)s(o)s(olean)g(\(in)m(teger\))i(Skip)d(attribute)i(for)e(a)i
-(FitsChan)0 2913 y(defaults)j(to)h(one.)62 b(This)37
-b(means)g(that)h(when)e(y)m(ou)i(read)f(an)g(Ob)5 b(ject)38
-b(F)-8 b(rom)38 b(a)f(FitsChan,)j(an)m(y)d(irrelev)-5
-b(an)m(t)0 3026 y(cards)28 b(will)h(simply)f(b)s(e)g(skipp)s(ed)f(o)m
-(v)m(er)i(un)m(til)g(the)g(start)g(of)f(the)h(next)f(Ob)5
-b(ject)29 b(description,)g(if)f(an)m(y)-8 b(,)30 b(is)f(found.)0
-3139 y(If)c(y)m(ou)i(start)f(reading)g(part)g(w)m(a)m(y)h(through)e(an)
-h(Ob)5 b(ject)26 b(description,)h(no)f(error)f(will)h(result.)40
-b(The)25 b(remainder)0 3252 y(of)31 b(the)f(description)h(will)f
-(simply)g(b)s(e)g(skipp)s(ed.)0 3412 y(Setting)38 b(Skip)e(to)h(zero)h
-(will)f(c)m(hange)h(this)f(b)s(eha)m(viour)g(to)g(resem)m(ble)h(that)f
-(of)g(a)h(basic)f(Channel)f(\()p Fu(x)p FF(15.12\),)0
-3524 y(where)30 b(extraneous)h(data)g(are)g(not)f(p)s(ermitted)g(b)m(y)
-g(default,)h(but)f(this)g(will)h(probably)e(rarely)i(b)s(e)f(useful.)0
-3814 y Fw(16.13)112 b(Finding)39 b(and)g(Changing)f(Cards)h(in)e(a)h
-(FitsChan)0 4032 y FF(Y)-8 b(ou)30 b(can)g(searc)m(h)g(for,)f(and)g
-(retriev)m(e,)i(particular)f(cards)f(in)g(a)h(FitsChan)g(b)m(y)f(k)m
-(eyw)m(ord,)h(using)f(the)h(function)0 4145 y(astFindFits.)59
-b(This)36 b(p)s(erforms)e(a)j(searc)m(h,)h(starting)f(at)g(the)g
-(curren)m(t)f(card,)h(un)m(til)g(it)f(\014nds)f(a)i(card)f(whose)0
-4258 y(k)m(eyw)m(ord)31 b(matc)m(hes)g(the)g(template)h(y)m(ou)e
-(supply)-8 b(,)30 b(or)g(the)h(end-of-\014le)g(is)f(reac)m(hed.)0
-4418 y(If)41 b(a)h(suitable)g(card)g(is)f(found,)j(astFindFits)f
-(optionally)g(returns)d(the)i(card's)f(con)m(ten)m(ts)j(and)d(then)g
-(sets)0 4531 y(the)c(FitsChan's)g(Card)f(attribute)h(either)h(to)f
-(iden)m(tify)h(the)f(card)f(found,)i(or)f(the)g(one)g(follo)m(wing)h
-(it.)61 b(The)0 4644 y(w)m(a)m(y)34 b(y)m(ou)g(w)m(an)m(t)g(the)g(Card)
-e(attribute)i(to)g(b)s(e)f(set)h(is)f(indicated)h(b)m(y)f(the)h
-(\014nal)f(b)s(o)s(olean)g(\(in)m(t\))i(argumen)m(t)f(to)0
-4757 y(astFindFits.)44 b(A)31 b(v)-5 b(alue)31 b(of)g(one)h(is)f
-(returned)f(to)h(indicate)h(success.)43 b(If)31 b(a)g(suitable)h(card)f
-(cannot)g(b)s(e)g(found,)0 4870 y(astFindFits)f(returns)d(a)i(v)-5
-b(alue)29 b(of)g(zero)g(to)g(indicate)h(failure)f(and)f(sets)g(the)h
-(FitsChan's)g(Card)e(attribute)j(to)0 4983 y(the)h(end-of-\014le.)0
-5143 y(Requesting)j(that)f(the)h(Card)e(attribute)i(b)s(e)e(set)i(to)g
-(indicate)g(the)g(card)f(that)g(astFindFits)i(\014nds)c(is)i(useful)0
-5256 y(if)d(y)m(ou)h(w)m(an)m(t)g(to)g(replace)h(that)f(card)f(with)g
-(a)h(new)f(one,)h(as)f(in)g(this)h(example:)227 5494
-y Ft(char)42 b(newcard[)e(81)j(];)227 5693 y(...)p eop
-end
-%%Page: 151 161
-TeXDict begin 151 160 bop 0 52 a Fy(16.14)93 b(Source)30
-b(and)g(Sink)f(F)-8 b(unctions)31 b(for)g(FitsChans)1711
-b FF(151)227 451 y Ft(\(void\))41 b(astFindFits\()e(fitschan,)h
-("AIRMASS",)f(NULL,)j(0)h(\);)227 551 y(astPutFits\()c(fitschan,)h
-(newcard,)g(1)k(\);)0 813 y FF(Here,)26 b(astFindFits)f(is)g(used)e(to)
-i(searc)m(h)g(for)f(a)h(card)f(with)g(the)g(k)m(eyw)m(ord)h(AIRMASS,)f
-(with)g(a)g(NULL)g(p)s(oin)m(ter)0 926 y(b)s(eing)31
-b(giv)m(en)i(to)g(indicate)g(that)f(w)m(e)g(do)g(not)g(w)m(an)m(t)h
-(the)f(card's)f(con)m(ten)m(ts)j(returned.)44 b(If)31
-b(the)h(card)g(is)g(found,)0 1039 y(astPutFits)g(then)e(o)m(v)m
-(erwrites)h(it)g(with)f(a)h(new)f(card.)41 b(Otherwise,)30
-b(the)h(Card)e(attribute)i(ends)f(up)f(p)s(oin)m(ting)0
-1152 y(at)i(the)g(end-of-\014le)f(and)g(the)h(new)f(card)g(is)g(simply)
-g(app)s(ended)f(to)i(the)f(end)g(of)h(the)f(FitsChan.)0
-1314 y(A)25 b(similar)h(approac)m(h)f(can)h(b)s(e)e(used)g(to)i(delete)
-h(selected)f(cards)f(from)g(a)g(FitsChan)g(using)g(astDelFits,)k(whic)m
-(h)0 1427 y(deletes)i(the)g(curren)m(t)f(card:)227 1676
-y Ft(if)43 b(\()g(astFindFits\()c(fitschan,)h("BSCALE",)g(NULL,)h(0)i
-(\))g(\))h(astDelFits\()39 b(fitschan)h(\);)0 1939 y
-FF(This)30 b(deletes)h(the)g(\014rst)e(card,)i(if)f(an)m(y)-8
-b(,)32 b(with)e(the)g(BSCALE)g(k)m(eyw)m(ord.)0 2101
-y(Requesting)38 b(that)h(astFindFits)f(incremen)m(ts)h(the)f(Card)e
-(attribute)j(to)f(iden)m(tify)g(the)g(card)g(follo)m(wing)h(the)0
-2214 y(one)27 b(found)f(is)g(more)h(useful)f(when)g(writing)h(lo)s
-(ops.)39 b(F)-8 b(or)28 b(example,)g(the)f(follo)m(wing)i(lo)s(op)d
-(extracts)j(eac)m(h)f(card)0 2327 y(whose)i(k)m(eyw)m(ord)h(matc)m(hes)
-h(the)e(template)i(\\CD\0456d")f(\(that)g(is,)g(\\CD")g(follo)m(w)m(ed)
-h(b)m(y)e(six)h(decimal)g(digits\):)227 2576 y Ft(while)42
-b(\()h(astFindFits\()c(fitschan,)g("CD\0456d",)i(card,)g(1)i(\))h({)358
-2676 y(<process)c(the)j(card's)e(contents>)227 2776 y(})0
-3038 y FF(F)-8 b(or)31 b(further)e(details)j(of)e(k)m(eyw)m(ord)h
-(templates,)h(see)f(the)f(description)h(of)f(astFindFits)i(in)e(App)s
-(endix)e(B.)0 3331 y Fw(16.14)112 b(Source)38 b(and)g(Sink)h(F)-9
-b(unctions)38 b(for)f(FitsChans)0 3553 y FF(The)24 b(use)g(of)g(source)
-g(and)g(sink)g(functions)f(with)h(a)h(FitsChan)f(is)g(optional.)40
-b(This)23 b(is)i(b)s(ecause)f(y)m(ou)g(can)h(alw)m(a)m(ys)0
-3665 y(arrange)k(to)g(explicitly)h(\014ll)e(a)g(FitsChan)h(with)f(FITS)
-f(cards)h(\()p Fu(x)p FF(16.8)j(and)c Fu(x)p FF(16.9\))k(and)d(y)m(ou)g
-(can)h(also)g(extract)0 3778 y(an)m(y)i(cards)f(that)h(remain)f(and)g
-(write)g(them)h(out)f(y)m(ourself)h(\()p Fu(x)p FF(16.6\))i(b)s(efore)d
-(y)m(ou)h(delete)g(the)g(FitsChan.)0 3941 y(If)24 b(y)m(ou)g(c)m(ho)s
-(ose)h(to)f(use)g(these)h(functions,)g(ho)m(w)m(ev)m(er,)h(they)f(b)s
-(eha)m(v)m(e)f(in)g(a)g(v)m(ery)h(similar)f(manner)f(to)i(those)f(used)
-0 4054 y(b)m(y)30 b(a)h(Channel)f(\()p Fu(x)p FF(15.13)j(and)d
-Fu(x)p FF(15.14\).)43 b(Y)-8 b(ou)31 b(supply)e(p)s(oin)m(ters)h(to)i
-(these)f(functions,)f(as)g(argumen)m(ts)h(to)g(the)0
-4167 y(constructor)e(function)e(astFitsChan)i(when)e(y)m(ou)i(create)h
-(the)e(FitsChan)g(\()p Fu(x)p FF(16.3\).)43 b(The)27
-b(source)i(function)e(is)0 4280 y(in)m(v)m(ok)m(ed)34
-b(implicitly)g(at)f(this)g(p)s(oin)m(t)f(to)i(\014ll)e(the)h(FitsChan)f
-(with)h(FITS)f(cards)g(and)g(the)h(FitsChan)f(is)h(then)0
-4393 y(rew)m(ound,)40 b(so)e(that)h(the)g(\014rst)e(card)i(b)s(ecomes)f
-(curren)m(t.)65 b(The)37 b(sink)h(function)g(is)h(automatically)i(in)m
-(v)m(ok)m(ed)0 4506 y(later,)32 b(when)d(the)i(FitsChan)f(is)g
-(deleted,)i(in)e(order)g(to)h(write)f(out)h(an)m(y)g(cards)f(that)h
-(remain)f(in)g(it.)0 4668 y(The)43 b(only)h(real)h(di\013erence)f(b)s
-(et)m(w)m(een)g(the)g(source)g(and)g(sink)f(functions)g(for)h(a)g
-(FitsChan)g(and)f(a)h(basic)0 4781 y(Channel)34 b(is)h(that)g(FITS)g
-(cards)f(are)h(limited)h(in)f(length)g(to)g(80)h(c)m(haracters,)i(so)d
-(the)g(c)m(hoice)i(of)e(bu\013er)f(size)0 4894 y(is)f(simpli\014ed.)48
-b(The)33 b(\\Source")h(and)f(\\Sink")g(functions)f(in)h
-Fu(x)p FF(15.13)j(and)c Fu(x)p FF(15.14)k(could)d(therefore)h(b)s(e)e
-(used)0 5007 y(to)j(access)g(FITS)e(headers)g(stored)h(in)g(text)h
-(\014les)f(simply)f(b)m(y)h(c)m(hanging)h(LEN)e(to)i(b)s(e)e(80.)52
-b(If)34 b(y)m(ou)g(w)m(ere)g(not)0 5120 y(accessing)29
-b(a)f(text)h(\014le,)f(ho)m(w)m(ev)m(er,)i(appropriate)e(c)m(hanges)g
-(to)h(the)f(I/O)f(statemen)m(ts)i(w)m(ould)f(b)s(e)f(needed)g(since)0
-5233 y(the)h(separating)h(newline)f(c)m(haracters)h(w)m(ould)f(b)s(e)f
-(absen)m(t.)41 b(The)27 b(details)i(ob)m(viously)g(dep)s(end)d(on)i
-(the)g(format)0 5346 y(of)j(the)f(\014le)h(y)m(ou)f(are)h(handling,)f
-(whic)m(h)g(need)g(not)h(necessarily)g(b)s(e)f(a)h(true)f(FITS)f
-(\014le.)p eop end
-%%Page: 152 162
-TeXDict begin 152 161 bop 0 52 a FF(152)889 b Fy(16)92
-b(STORING)29 b(AST)h(OBJECTS)f(IN)h(FITS)g(HEADERS)g(\(FITSCHANS\))p
-eop end
-%%Page: 153 163
-TeXDict begin 153 162 bop 3643 52 a FF(153)0 351 y Fz(17)135
-b(Using)46 b(F)-11 b(oreign)45 b(FITS)e(Enco)t(dings)0
-609 y FF(W)-8 b(e)38 b(sa)m(w)f(in)f(the)h(previous)f(section)i(\()p
-Fu(x)p FF(16\))g(ho)m(w)f(to)g(store)h(and)e(retriev)m(e)i(an)m(y)f
-(kind)e(of)i(AST)f(Ob)5 b(ject)37 b(in)f(a)0 722 y(FITS)27
-b(header)h(b)m(y)f(using)g(a)i(FitsChan.)39 b(T)-8 b(o)28
-b(ac)m(hiev)m(e)j(this,)d(w)m(e)g(set)g(the)g(FitsChan's)g(Enco)s(ding)
-f(attribute)i(to)0 835 y(NA)-8 b(TIVE.)29 b(Ho)m(w)m(ev)m(er,)j(the)d
-(Ob)5 b(jects)29 b(w)m(e)g(wrote)g(could)g(then)g(only)g(b)s(e)f(read)h
-(bac)m(k)g(b)m(y)g(other)g(programs)g(that)0 948 y(use)h(AST.)0
-1114 y(In)g(practice,)i(w)m(e)f(will)f(also)i(encoun)m(ter)f(FITS)e
-(headers)h(con)m(taining)i(W)m(CS)f(information)f(written)h(b)m(y)f
-(other)0 1227 y(soft)m(w)m(are)37 b(systems.)58 b(W)-8
-b(e)37 b(will)f(probably)f(also)i(need)f(to)g(write)g(FITS)g(headers)f
-(in)h(a)g(format)g(that)h(can)f(b)s(e)0 1340 y(understo)s(o)s(d)25
-b(b)m(y)i(these)g(systems.)40 b(Indeed,)27 b(this)g(in)m(terc)m(hange)h
-(of)g(data)f(is)g(one)g(of)h(the)f(main)g(reasons)g(for)f(the)0
-1452 y(existence)32 b(of)e(FITS,)g(so)h(in)f(this)g(section)i(w)m(e)f
-(will)f(examine)h(ho)m(w)g(to)g(accommo)s(date)h(these)f(requiremen)m
-(ts.)0 1757 y Fw(17.1)112 b(The)38 b(F)-9 b(oreign)38
-b(FITS)g(Enco)s(dings)0 1983 y FF(As)30 b(men)m(tioned)g(previously)f
-(\()p Fu(x)p FF(16.1\),)k(there)d(are)g(a)g(n)m(um)m(b)s(er)e(of)i(con)
-m(v)m(en)m(tions)h(curren)m(tly)f(in)f(use)h(for)f(storing)0
-2096 y(W)m(CS)g(information)g(in)g(FITS)f(headers,)h(whic)m(h)f(w)m(e)i
-(call)g Fx(enc)-5 b(o)g(dings.)41 b FF(Here,)30 b(w)m(e)f(are)g
-(concerned)g(with)g(those)0 2209 y(enco)s(dings)h(de\014ned)f(b)m(y)i
-(soft)m(w)m(are)g(systems)g(other)f(than)h(AST,)e(whic)m(h)i(w)m(e)f
-(term)h Fx(for)-5 b(eign)33 b(enc)-5 b(o)g(dings.)0 2375
-y FF(Curren)m(tly)d(,)31 b(AST)f(supp)s(orts)e(six)j(foreign)g(enco)s
-(dings,)g(whic)m(h)f(ma)m(y)i(b)s(e)e(selected)i(b)m(y)e(setting)i(the)
-f(Enco)s(ding)0 2488 y(attribute)g(of)g(a)f(FitsChan)h(to)g(one)f(of)h
-(the)f(follo)m(wing)i(\(c)m(haracter)h(string\))d(v)-5
-b(alues:)227 2761 y FD(DSS)427 2873 y FF(This)34 b(enco)s(ding)g
-(stores)h(W)m(CS)f(information)h(using)e(the)i(con)m(v)m(en)m(tion)h
-(dev)m(elop)s(ed)f(at)g(the)427 2986 y(Space)42 b(T)-8
-b(elescop)s(e)43 b(Science)f(Institute)g(for)g(the)f(Digitised)j(Sky)d
-(Surv)m(ey)g(\(DSS\))g(astro-)427 3099 y(metric)h(plate)h
-(calibrations.)75 b(DSS)41 b(images)i(whic)m(h)e(use)g(this)h(con)m(v)m
-(en)m(tion)h(are)f(widely)427 3212 y(a)m(v)-5 b(ailable)38
-b(and)d(it)g(is)h(understo)s(o)s(d)d(b)m(y)i(a)h(n)m(um)m(b)s(er)e(of)h
-(imp)s(ortan)m(t)h(and)f(w)m(ell-established)427 3325
-y(astronom)m(y)c(applications.)427 3456 y(Ho)m(w)m(ev)m(er,)46
-b(the)41 b(calibration)h(mo)s(del)f(used)f(\(based)h(on)f(a)h(p)s
-(olynomial)g(\014t\))g(is)g(not)g(eas-)427 3569 y(ily)e(applicable)g
-(to)g(other)f(t)m(yp)s(es)g(of)h(data)g(and)e(creating)j(the)e(p)s
-(olynomial)g(co)s(e\016cien)m(ts)427 3682 y(needed)e(to)h(calibrate)h
-(y)m(our)f(o)m(wn)f(images)i(can)e(pro)m(v)m(e)i(di\016cult.)58
-b(F)-8 b(or)37 b(this)g(reason,)h(the)427 3795 y(DSS)33
-b(enco)s(ding)g(is)g(probably)f(b)s(est)h(view)m(ed)h(as)f(a)h
-(\\read-only")g(format.)50 b(It)33 b(is)g(p)s(ossible,)427
-3908 y(ho)m(w)m(ev)m(er,)h(to)e(read)g(in)f(W)m(CS)h(information)g
-(using)f(this)g(enco)s(ding)h(and)f(then)g(to)i(write)f(it)427
-4021 y(bac)m(k)f(out)g(again,)h(so)e(long)h(as)g(only)f(minor)g(c)m
-(hanges)i(ha)m(v)m(e)f(b)s(een)f(made.)227 4170 y FD(FITS-W)m(CS)427
-4283 y FF(This)35 b(enco)s(ding)g(is)h(v)m(ery)g(imp)s(ortan)m(t)g(b)s
-(ecause)f(it)h(is)g(based)f(on)g(a)h(new)f(FITS)g(standard)427
-4396 y(whic)m(h)27 b(should,)f(for)h(the)f(\014rst)g(time,)i(address)e
-(the)h(problem)f(of)h(celestial)i(co)s(ordinate)e(sys-)427
-4509 y(tems)c(in)f(a)h(prop)s(er)f(manner,)h(b)m(y)g(considerably)f
-(extending)h(the)g(original)h(FITS)e(standard.)427 4640
-y(The)48 b(con)m(v)m(en)m(tions)i(used)d(are)h(describ)s(ed)f(in)h(a)g
-(series)h(of)f(pap)s(ers)f(b)m(y)h(E.W.)16 b(Greisen,)427
-4753 y(M.)g(Calabretta,)48 b Fx(et.)77 b(al.)p FF(,)47
-b(often)d(referred)e(to)i(as)g(the)f(\\FITS-W)m(CS)g(pap)s(ers".)79
-b(They)427 4866 y(are)30 b(describ)s(ed)f(at)h(h)m
-(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p Fq(_)p FF(w)m(cs.h)m(tml.)46
-b(No)m(w)30 b(that)g(the)g(\014rst)f(t)m(w)m(o)427 4979
-y(pap)s(ers)j(in)g(this)g(series)h(ha)m(v)m(e)h(b)s(een)e(agreed,)i
-(this)f(enco)s(ding)f(should)g(b)s(e)g(understo)s(o)s(d)e(b)m(y)427
-5092 y(an)m(y)41 b(FITS-W)m(CS)f(complian)m(t)i(soft)m(w)m(are)g(and)e
-(it)h(is)g(lik)m(ely)h(to)f(b)s(e)f(adopted)h(widely)f(for)427
-5205 y(FITS)31 b(data)i(in)e(future.)44 b(F)-8 b(or)32
-b(details)h(of)f(the)g(co)m(v)m(erage)j(of)d(these)g(con)m(v)m(en)m
-(tions)i(pro)m(vided)427 5318 y(b)m(y)d(the)f(FitsChan)g(class,)i(see)f
-(App)s(endix)d(F.)227 5467 y FD(FITS-IRAF)427 5580 y
-FF(This)34 b(enco)s(ding)h(is)f(based)g(on)h(the)g(con)m(v)m(en)m
-(tions)h(describ)s(ed)e(in)g(the)h(do)s(cumen)m(t)f(\\W)-8
-b(orld)427 5693 y(Co)s(ordinate)23 b(Systems)g(Represen)m(tations)h
-(Within)f(the)h(FITS)e(F)-8 b(ormat")25 b(b)m(y)e(R.J.)g(Hanisc)m(h)p
-eop end
-%%Page: 154 164
-TeXDict begin 154 163 bop 0 52 a FF(154)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)427 351 y
-FF(and)25 b(D.G.)h(W)-8 b(ells,)27 b(1988.)1283 318 y
-Fv(25)1399 351 y FF(It)e(is)g(emplo)m(y)m(ed)h(b)m(y)f(the)g(IRAF)g
-(data)g(analysis)h(facilit)m(y)-8 b(,)29 b(so)c(its)427
-464 y(use)i(will)g(facilitate)j(data)d(exc)m(hange)h(with)f(IRAF.)g
-(This)f(enco)s(ding)h(is)g(in)f(e\013ect)i(a)f(sub-set)427
-577 y(of)k(the)f(curren)m(t)h(FITS-W)m(CS)f(enco)s(ding.)227
-731 y FD(FITS-PC)427 844 y FF(This)j(enco)s(ding)g(is)h(based)f(on)g(a)
-h(previous)f(v)m(ersion)g(of)h(the)g(prop)s(osed)e(new)h(FITS)f(W)m(CS)
-427 957 y(standard)26 b(whic)m(h)h(used)f Fq(PCjjjjiii)e
-FF(and)i Fq(CDELTj)f FF(k)m(eyw)m(ords)i(to)g(describ)s(e)g(axis)g
-(rotation)427 1070 y(and)f(scaling.)41 b(V)-8 b(ersions)26
-b(of)h(AST)f(prior)f(to)i(V1.5)h(used)e(this)g(sc)m(heme)h(for)f(the)h
-(FITS-W)m(CS)427 1183 y(enco)s(ding.)51 b(As)34 b(of)g(V1.5,)i(FITS-W)m
-(CS)e(uses)f Fq(CDi_j)f FF(k)m(eyw)m(ords)i(instead.)2997
-1150 y Fv(26)3123 1183 y FF(The)g(FITS-)427 1296 y(PC)j(enco)s(ding)g
-(is)g(included)f(in)g(AST)h(V1.5)h(only)f(to)h(allo)m(w)g(FITS-W)m(CS)e
-(data)i(created)427 1408 y(with)33 b(previous)f(v)m(ersions)h(to)h(b)s
-(e)e(read.)48 b(It)33 b(should)f(not,)i(in)e(general,)j(b)s(e)d(used)g
-(to)i(create)427 1521 y(new)c(data)h(sets.)227 1675 y
-FD(FITS-AIPS)427 1788 y FF(This)38 b(enco)s(ding)h(is)g(based)g(on)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)d(in)g(the)i(do)s(cumen)m(t)
-e(\\Non-)427 1901 y(linear)23 b(Co)s(ordinate)e(Systems)h(in)f(AIPS")h
-(b)m(y)g(Eric)g(W.)g(Greisen)g(\(revised)g(9th)h(Septem)m(b)s(er,)427
-2014 y(1994\).)667 1981 y Fv(27)790 2014 y FF(It)33 b(is)f(curren)m
-(tly)g(emplo)m(y)m(ed)h(b)m(y)f(the)h(AIPS)e(data)i(analysis)g(facilit)
-m(y)-8 b(,)35 b(so)e(its)f(use)427 2127 y(will)26 b(facilitate)i(data)e
-(exc)m(hange)h(with)e(AIPS.)f(This)h(enco)s(ding)g(uses)g
-Fq(CROTAi)e FF(and)i Fq(CDELTi)427 2240 y FF(k)m(eyw)m(ords)31
-b(to)g(describ)s(e)f(axis)h(rotation)g(and)f(scaling.)227
-2394 y FD(FITS-AIPS++)427 2507 y FF(Enco)s(des)c(co)s(ordinate)g
-(system)g(information)g(in)g(FITS)f(header)h(cards)f(using)h(the)g(con)
-m(v)m(en-)427 2620 y(tions)34 b(used)e(b)m(y)h(the)g(AIPS++)f(pro)5
-b(ject.)49 b(This)32 b(is)i(an)f(extension)g(of)g(FITS-AIPS)f(whic)m(h)
-427 2732 y(includes)e(some)h(of)g(the)f(features)h(of)f(FITS-PC)g(and)g
-(FITS-IRAF.)0 3018 y(F)-8 b(or)40 b(more)g(detail)g(ab)s(out)f(the)h
-(ab)s(o)m(v)m(e)g(enco)s(dings,)i(see)e(the)f(description)h(of)f(the)h
-(Enco)s(ding)f(attribute)h(in)0 3131 y(App)s(endix)29
-b(C.)0 3451 y Fw(17.2)112 b(Limitations)39 b(of)f(F)-9
-b(oreign)38 b(Enco)s(dings)0 3684 y FF(The)27 b(foreign)i(enco)s(dings)
-e(a)m(v)-5 b(ailable)30 b(for)e(storing)g(W)m(CS)g(information)g(in)g
-(FITS)f(headers)g(ha)m(v)m(e)j(a)e(n)m(um)m(b)s(er)e(of)0
-3796 y(limitations)k(when)d(compared)h(with)g(the)g(nativ)m(e)h(enco)s
-(ding)f(of)h(AST)e(Ob)5 b(jects)28 b(\()p Fu(x)p FF(16\).)42
-b(The)28 b(main)g(ones)g(are:)111 4082 y(1.)46 b(Only)36
-b(one)h(class)g(of)g(AST)f(Ob)5 b(ject,)38 b(the)f(F)-8
-b(rameSet,)40 b(ma)m(y)d(b)s(e)f(represen)m(ted)g(using)g(a)h(foreign)g
-(FITS)227 4195 y(enco)s(ding.)k(This)29 b(should)h(not)g(come)h(as)g(a)
-g(surprise,)e(b)s(ecause)h(the)h(purp)s(ose)d(of)j(storing)f(W)m(CS)h
-(infor-)227 4308 y(mation)38 b(in)e(FITS)g(headers)h(is)f(to)i(attac)m
-(h)h(co)s(ordinate)e(systems)g(to)g(an)g(asso)s(ciated)h(arra)m(y)g(of)
-f(data.)227 4421 y(Since)d(the)h(F)-8 b(rameSet)35 b(is)f(the)h(AST)e
-(Ob)5 b(ject)34 b(designed)g(for)g(the)h(same)f(purp)s(ose)f(\()p
-Fu(x)p FF(13.4\),)38 b(there)c(is)g(a)227 4534 y(natural)d(corresp)s
-(ondence.)227 4692 y(The)g(w)m(a)m(y)i(in)f(whic)m(h)f(a)h(F)-8
-b(rameSet)33 b(is)f(translated)g(to)h(and)e(from)g(the)h(foreign)g
-(enco)s(ding)g(also)g(follo)m(ws)227 4805 y(from)27 b(this)g(corresp)s
-(ondence.)40 b(The)27 b(F)-8 b(rameSet's)28 b(base)g(F)-8
-b(rame)28 b(iden)m(ti\014es)g(the)g(data)g(grid)f(co)s(ordinates)227
-4918 y(of)41 b(the)g(asso)s(ciated)h(FITS)d(data.)72
-b(These)41 b(are)f(the)h(same)g(as)g(FITS)f(pixel)h(co)s(ordinates,)j
-(in)c(whic)m(h)227 5031 y(the)32 b(\014rst)f(pixel)g(\(in)h(2)g
-(dimensions\))f(has)g(co)s(ordinates)h(\(1,1\))h(at)g(its)e(cen)m(tre.)
-45 b(Similarly)-8 b(,)33 b(the)f(curren)m(t)227 5144
-y(F)-8 b(rame)37 b(of)f(the)g(F)-8 b(rameSet)37 b(iden)m(ti\014es)f
-(the)g(FITS)f(w)m(orld)h(co)s(ordinate)h(system)f(asso)s(ciated)h(with)
-e(the)227 5256 y(data.)p 0 5334 1512 4 v 73 5387 a Fs(25)138
-5419 y Fr(Av)l(ailable)26 b(b)n(y)f(ftp)h(from)g(\014ts.cv.nrao.edu)g
-(/\014ts/do)r(cumen)n(ts/w)n(cs/w)n(cs88.ps.Z)73 5479
-y Fs(26)138 5510 y Fr(There)e(are)h(man)n(y)e(other)g(di\013erences)i
-(b)r(et)n(w)n(een)e(the)h(previous)f(and)h(the)f(curren)n(t)g(FITS-W)n
-(CS)g(enco)r(dings.)35 b(The)24 b(k)n(eyw)n(ords)0 5602
-y(to)i(describ)r(e)g(axis)g(rotation)h(and)e(scaling)i(is)f(used)g
-(purely)f(as)h(a)g(lab)r(el)h(to)f(iden)n(tify)f(the)g(sc)n(heme.)73
-5661 y Fs(27)138 5693 y Fr(Av)l(ailable)h(b)n(y)f(ftp)h(from)g
-(\014ts.cv.nrao.edu)g(/\014ts/do)r(cumen)n(ts/w)n(cs/aips27.ps.Z)p
-eop end
-%%Page: 155 165
-TeXDict begin 155 164 bop 0 52 a Fy(17.3)93 b(Iden)m(tifying)30
-b(F)-8 b(oreign)32 b(Enco)s(dings)e(on)g(Input)1820 b
-FF(155)111 351 y(2.)46 b(Y)-8 b(ou)36 b(ma)m(y)h(store)f(a)g(represen)m
-(tation)h(of)f(only)f(a)h(single)h(F)-8 b(rameSet)37
-b(in)e(an)m(y)h(individual)f(set)h(of)g(FITS)227 464
-y(header)f(cards)g(\()p Fx(i.e.)g FF(in)g(a)h(single)f(FitsChan\))h(at)
-g(one)f(time.)56 b(If)35 b(y)m(ou)g(attempt)i(to)f(store)f(more)h(than)
-227 577 y(one,)42 b(y)m(ou)d(ma)m(y)g(o)m(v)m(er-write)h(the)f
-(previous)f(one)h(or)g(generate)h(an)f(in)m(v)-5 b(alid)39
-b(represen)m(tation)h(of)f(y)m(our)227 690 y(W)m(CS)31
-b(information.)227 843 y(This)f(is)g(mainly)h(a)f(consequence)h(of)g
-(the)g(use)f(of)g(\014xed)g(FITS)f(k)m(eyw)m(ords)i(b)m(y)f(foreign)h
-(enco)s(dings)f(and)227 956 y(the)h(fact)g(that)g(y)m(ou)g(cannot,)g
-(in)f(general,)i(ha)m(v)m(e)f(m)m(ultiple)g(FITS)f(cards)g(with)g(the)h
-(same)g(k)m(eyw)m(ord.)111 1148 y(3.)46 b(In)36 b(general,)j(it)e(will)
-g(not)g(b)s(e)f(p)s(ossible)g(to)h(store)g(ev)m(ery)g(p)s(ossible)f(F)
--8 b(rameSet)38 b(that)f(y)m(ou)g(migh)m(t)g(con-)227
-1261 y(struct.)67 b(Dep)s(ending)39 b(on)g(the)g(enco)s(ding,)i(only)f
-(certain)g(F)-8 b(rameSets)40 b(that)f(conform)g(to)h(particular)227
-1374 y(restrictions)i(can)e(b)s(e)g(represen)m(ted)h(and,)h(ev)m(en)g
-(then,)h(some)d(of)h(their)g(information)f(ma)m(y)h(b)s(e)f(lost.)227
-1487 y(See)h(the)g(description)f(of)h(the)g(Enco)s(ding)f(attribute)h
-(in)f(App)s(endix)f(C)h(for)g(more)h(details)g(of)g(these)227
-1600 y(limitations.)0 1869 y(It)26 b(should)g(b)s(e)f(understo)s(o)s(d)
-g(that)h(using)g(foreign)h(enco)s(dings)f(to)h(read)f(and)f(write)i
-(information)f(held)g(in)g(AST)0 1982 y(Ob)5 b(jects)24
-b(is)f(essen)m(tially)j(a)e(pro)s(cess)f(of)h(con)m(v)m(erting)h(the)f
-(data)g(format.)39 b(As)24 b(suc)m(h,)h(it)f(p)s(oten)m(tially)h
-(su\013ers)e(from)0 2095 y(the)k(same)h(problems)e(faced)h(b)m(y)g(all)
-h(suc)m(h)f(pro)s(cesses,)h Fx(i.e.)e FF(di\013erences)h(b)s(et)m(w)m
-(een)h(the)f(AST)g(data)g(mo)s(del)g(and)0 2208 y(that)j(of)g(the)g
-(foreign)g(enco)s(ding)f(ma)m(y)h(cause)g(some)g(information)g(to)g(b)s
-(e)f(lost.)42 b(Because)30 b(the)g(AST)f(mo)s(del)g(is)0
-2321 y(extremely)h(\015exible,)f(ho)m(w)m(ev)m(er,)i(an)m(y)d(data)i
-(loss)f(can)f(largely)i(b)s(e)e(eliminated)i(when)d(reading.)41
-b(Instead,)29 b(this)0 2434 y(e\013ect)37 b(manifests)e(itself)h(in)f
-(the)h(form)f(of)g(the)h(ab)s(o)m(v)m(e)g(enco)s(ding-dep)s(enden)m(t)f
-(restrictions)h(on)f(the)h(kind)e(of)0 2547 y(AST)c(Ob)5
-b(jects)30 b(whic)m(h)g(ma)m(y)h(b)s(e)f(written.)0 2712
-y(One)d(of)g(the)g(aims)h(of)f(the)g(AST)g(library)-8
-b(,)28 b(of)f(course,)h(is)f(to)h(insulate)g(y)m(ou)f(from)g(the)g
-(details)h(of)g(these)f(foreign)0 2825 y(enco)s(dings)35
-b(and)f(the)i(restrictions)f(they)h(imp)s(ose.)54 b(W)-8
-b(e)36 b(will)g(see)f(shortly)-8 b(,)37 b(therefore,)g(ho)m(w)e(AST)f
-(pro)m(vides)0 2938 y(a)d(mec)m(hanism)h(for)e(determining)h(whether)g
-(y)m(our)g(W)m(CS)g(information)g(satis\014es)g(the)h(necessary)f
-(conditions)0 3051 y(and)f(allo)m(ws)h(y)m(ou)g(to)g(mak)m(e)h(an)e
-(automatic)i(c)m(hoice)g(of)f(whic)m(h)f(enco)s(ding)g(to)h(use.)0
-3352 y Fw(17.3)112 b(Iden)m(tifying)39 b(F)-9 b(oreign)37
-b(Enco)s(dings)h(on)g(Input)0 3577 y FF(Let)28 b(us)f(no)m(w)h(examine)
-g(the)g(practicalities)i(of)e(extracting)h(W)m(CS)f(information)g(from)
-f(a)h(set)g(of)g(FITS)f(header)0 3690 y(cards)c(whic)m(h)g(ha)m(v)m(e)i
-(b)s(een)d(written)i(b)m(y)f(some)g(other)h(soft)m(w)m(are)h(system.)38
-b(W)-8 b(e)25 b(will)e(pretend)g(that)h(our)f(program)0
-3803 y(do)s(es)32 b(not)g(kno)m(w)h(whic)m(h)f(enco)s(ding)g(has)g(b)s
-(een)f(used)h(for)g(the)g(W)m(CS)h(information)f(and)g(m)m(ust)g(disco)
-m(v)m(er)i(this)0 3916 y(for)e(itself.)48 b(In)32 b(order)g(to)h(ha)m
-(v)m(e)h(a)f(concrete)h(example,)g(ho)m(w)m(ev)m(er,)g(w)m(e)f(will)g
-(use)f(the)h(follo)m(wing)h(set)f(of)f(cards.)0 4029
-y(These)k(use)g(the)h(FITS-AIPS)e(enco)s(ding)h(and)g(con)m(tain)h(a)g
-(t)m(ypical)h(mix)e(of)h(other)f(FITS)g(cards)g(whic)m(h)g(are)0
-4142 y(irrelev)-5 b(an)m(t)32 b(to)f(the)f(W)m(CS)h(information)f(in)g
-(whic)m(h)g(w)m(e)h(are)g(in)m(terested:)227 4398 y Ft(SIMPLE)85
-b(=)871 b(T)43 b(/)h(Written)c(by)j(IDL:)86 b(30-Jul-1997)39
-b(05:35:42.00)227 4497 y(BITPIX)85 b(=)784 b(-32)42 b(/)i(Bits)e(per)g
-(pixel.)227 4597 y(NAXIS)129 b(=)871 b(2)43 b(/)h(Number)d(of)h
-(dimensions)227 4697 y(NAXIS1)85 b(=)784 b(300)42 b(/)i(Length)d(of)h
-(x)i(axis.)227 4796 y(NAXIS2)85 b(=)784 b(300)42 b(/)i(Length)d(of)h(y)
-i(axis.)227 4896 y(CTYPE1)85 b(=)43 b('GLON-ZEA')475
-b(/)44 b(X-axis)d(type)227 4996 y(CTYPE2)85 b(=)43 b('GLAT-ZEA')475
-b(/)44 b(Y-axis)d(type)227 5095 y(CRVAL1)85 b(=)479 b(-149.56866)39
-b(/)44 b(Reference)39 b(pixel)j(value)227 5195 y(CRVAL2)85
-b(=)479 b(-19.758201)39 b(/)44 b(Reference)39 b(pixel)j(value)227
-5295 y(CRPIX1)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5394 y(CRPIX2)85 b(=)610 b(150.500)40 b(/)k(Reference)39
-b(pixel)227 5494 y(CDELT1)85 b(=)566 b(-1.20000)40 b(/)k(Degrees/pixel)
-227 5593 y(CDELT2)85 b(=)610 b(1.20000)40 b(/)k(Degrees/pixel)227
-5693 y(CROTA1)85 b(=)610 b(0.00000)40 b(/)k(Rotation)c(in)j(degrees.)p
-eop end
-%%Page: 156 166
-TeXDict begin 156 165 bop 0 52 a FF(156)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)227 351 y
-Ft(SURVEY)85 b(=)43 b('COBE)f(DIRBE')227 451 y(BUNITS)85
-b(=)43 b('MJy/sr)84 b(')479 b(/)227 551 y(ORIGIN)85 b(=)43
-b('CDAC)172 b(')479 b(/)44 b(Cosmology)39 b(Data)j(Analysis)f(Center)
-227 650 y(TELESCOP=)f('COBE)172 b(')479 b(/)44 b(COsmic)d(Background)e
-(Explorer)h(satellite)227 750 y(INSTRUME=)g('DIRBE)128
-b(')479 b(/)44 b(COBE)e(instrument)d([DIRBE,)i(DMR,)h(FIRAS])227
-849 y(PIXRESOL=)868 b(9)43 b(/)h(Quad)e(tree)f(pixel)h(resolution)d
-([6,)k(9])227 949 y(DATE)173 b(=)43 b('27/09/94')475
-b(/)44 b(FITS)e(file)f(creation)g(date)h(\(dd/mm/yy\))227
-1049 y(DATE-MAP=)e('16/09/94')475 b(/)44 b(Date)e(of)g(original)f(file)
-h(creation)e(\(dd/mm/yy\))227 1148 y(COMMENT)215 b(COBE)42
-b(specific)f(keywords)227 1248 y(DATE-BEG=)f('08/12/89')475
-b(/)44 b(date)e(of)g(initial)f(data)h(represented)d(\(dd/mm/yy\))227
-1348 y(DATE-END=)h('25/09/90')475 b(/)44 b(date)e(of)g(final)g(data)g
-(represented)126 b(\(dd/mm/yy\))0 1607 y FF(The)35 b(\014rst)g(step)g
-(is)h(to)g(create)h(a)f(FitsChan)f(and)g(insert)h(these)g(cards)f(in)m
-(to)h(it.)57 b(If)35 b(\\cards")h(is)g(an)f(arra)m(y)h(of)0
-1720 y(p)s(oin)m(ters)28 b(to)h(c)m(haracter)h(strings)e(holding)g(the)
-g(header)g(cards)g(and)g(\\ncards")g(is)g(the)h(n)m(um)m(b)s(er)e(of)h
-(cards,)h(this)0 1833 y(could)h(b)s(e)g(done)g(as)h(follo)m(ws:)227
-2079 y Ft(#include)41 b("ast.h")227 2179 y(#define)g(MAXCARD)g(100)227
-2279 y(AstFitsChan)e(*fitschan;)227 2378 y(char)j(*cards[)f(MAXCARD)g
-(];)227 2478 y(int)i(icard,)e(ncard;)227 2677 y(...)227
-2876 y(fitschan)g(=)i(astFitsChan\()38 b(NULL,)k(NULL,)f("")i(\);)227
-2976 y(for)g(\()g(icard)e(=)i(0;)g(icard)f(<)h(ncard;)e(icard++)g(\))i
-(astPutFits\()c(fitschan,)h(cards[)h(icard)g(],)i(0)g(\);)0
-3236 y FF(Note)25 b(that)g(w)m(e)g(ha)m(v)m(e)g(not)g(initialised)g
-(the)f(Enco)s(ding)g(attribute)h(of)f(the)g(FitsChan)g(as)h(w)m(e)f
-(did)g(in)f Fu(x)p FF(16.3)j(when)0 3349 y(w)m(e)37 b(w)m(an)m(ted)f
-(to)h(use)f(the)g(nativ)m(e)i(enco)s(ding.)57 b(This)36
-b(is)g(b)s(ecause)g(w)m(e)h(are)f(pretending)g(not)g(to)h(kno)m(w)f
-(whic)m(h)0 3461 y(enco)s(ding)29 b(to)i(use)e(and)g(w)m(an)m(t)h(AST)f
-(to)h(determine)g(this)f(for)h(us.)39 b(By)30 b(lea)m(ving)h(the)f
-(Enco)s(ding)f(attribute)h(un-)0 3574 y(set,)k(its)g(default)f(v)-5
-b(alue)33 b(will)g(adjust)f(to)i(whic)m(hev)m(er)g(enco)s(ding)e(AST)g
-(considers)h(to)h(b)s(e)e(most)h(appropriate,)0 3687
-y(according)40 b(to)g(the)f(FITS)f(header)h(cards)f(presen)m(t.)67
-b(F)-8 b(or)40 b(details)g(of)f(ho)m(w)g(this)g(c)m(hoice)h(is)f(made,)
-j(see)d(the)0 3800 y(description)30 b(of)h(the)g(Enco)s(ding)e
-(attribute)i(in)f(App)s(endix)f(C.)0 3962 y(This)38 b(approac)m(h)i
-(has)f(the)g(ob)m(vious)h(adv)-5 b(an)m(tages)40 b(of)g(making)f(our)g
-(program)g(simpler)f(and)h(more)g(\015exible)0 4075 y(and)34
-b(of)g(freeing)g(us)g(from)g(ha)m(ving)g(to)h(kno)m(w)g(ab)s(out)e(the)
-i(di\013eren)m(t)f(enco)s(dings)g(a)m(v)-5 b(ailable.)55
-b(As)34 b(a)h(b)s(on)m(us,)f(it)0 4188 y(also)e(means)e(that)h(the)g
-(program)f(will)h(b)s(e)f(able)h(to)h(read)e(an)m(y)h(new)f(enco)s
-(dings)h(that)g(AST)f(ma)m(y)h(supp)s(ort)e(in)0 4301
-y(future,)h(without)g(needing)g(to)i(b)s(e)d(c)m(hanged.)0
-4463 y(A)m(t)40 b(this)g(p)s(oin)m(t,)i(w)m(e)e(could)g(enquire)f(the)g
-(default)h(v)-5 b(alue)40 b(of)g(the)g(Enco)s(ding)e(attribute,)43
-b(whic)m(h)d(indicates)0 4576 y(whic)m(h)30 b(enco)s(ding)g(AST)g(in)m
-(tends)g(to)h(use,)g(as)f(follo)m(ws:)227 4822 y Ft(const)42
-b(char)g(*encode;)227 5022 y(...)227 5320 y(encode)f(=)j(astGetC\()c
-(fitschan,)g("Encoding")f(\);)0 5580 y FF(The)32 b(result)g(of)h(this)f
-(enquiry)f(w)m(ould)h(b)s(e)g(the)h(string)f(\\FITS-AIPS".)g(Note)i
-(that)f(w)m(e)g(could)f(also)h(ha)m(v)m(e)h(set)0 5693
-y(the)d(FitsChan's)f(Enco)s(ding)g(attribute)h(explicitly)-8
-b(,)32 b(suc)m(h)e(as)h(when)e(creating)j(it:)p eop end
-%%Page: 157 167
-TeXDict begin 157 166 bop 0 52 a Fy(17.4)93 b(Reading)30
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)h(from)f(a)g(FITS)g(Header)
-1164 b FF(157)227 351 y Ft(fitschan)41 b(=)i(astFitsChan\()38
-b(NULL,)k(NULL,)f("Encoding=FITS-AI)o(PS")c(\);)0 615
-y FF(If)g(w)m(e)i(tried)f(to)g(read)g(information)g(using)g(this)f
-(enco)s(ding)h(\()p Fu(x)p FF(17.4\),)43 b(but)37 b(failed,)k(w)m(e)d
-(could)g(then)f(c)m(hange)0 728 y(the)30 b(enco)s(ding)f(and)g(try)g
-(again.)41 b(This)29 b(w)m(ould)g(allo)m(w)i(our)e(program)g(to)h(tak)m
-(e)h(con)m(trol)g(of)e(ho)m(w)h(the)f(optim)m(um)0 841
-y(c)m(hoice)k(of)e(enco)s(ding)h(is)f(arriv)m(ed)g(at.)44
-b(Ho)m(w)m(ev)m(er,)34 b(it)e(w)m(ould)f(also)h(in)m(v)m(olv)m(e)h
-(using)e(explicit)i(kno)m(wledge)f(of)f(the)0 954 y(enco)s(dings)f(a)m
-(v)-5 b(ailable)33 b(and)d(this)g(is)g(b)s(est)g(a)m(v)m(oided)i(if)e
-(p)s(ossible.)0 1249 y Fw(17.4)112 b(Reading)39 b(F)-9
-b(oreign)37 b(W)m(CS)h(Information)g(from)g(a)g(FITS)f(Header)0
-1471 y FF(Ha)m(ving)f(stored)f(a)h(set)f(of)h(FITS)e(header)h(cards)f
-(in)h(a)g(FitsChan)g(and)g(determined)f(ho)m(w)h(the)h(W)m(CS)f(infor-)
-0 1584 y(mation)k(is)f(enco)s(ded)f(\()p Fu(x)p FF(17.3\),)43
-b(the)38 b(next)g(step)h(is)f(to)g(read)g(an)g(AST)f(Ob)5
-b(ject)38 b(from)g(the)g(FitsChan)g(using)0 1697 y(astRead.)j(W)-8
-b(e)30 b(m)m(ust)e(also)h(remem)m(b)s(er)f(to)h(rewind)f(the)g
-(FitsChan)g(\014rst,)h(if)f(necessary)-8 b(,)30 b(suc)m(h)e(as)h(b)m(y)
-f(clearing)0 1810 y(its)j(Card)e(attribute,)j(whic)m(h)e(defaults)g(to)
-h(1:)227 2060 y Ft(AstObject)40 b(*wcsinfo;)227 2260
-y(...)227 2459 y(astClear\()g(fitschan,)g("Card")h(\);)227
-2559 y(wcsinfo)g(=)i(astRead\()d(fitschan)h(\);)0 2822
-y FF(If)30 b(the)h(p)s(oin)m(ter)f(returned)f(b)m(y)i(astRead)g(is)f
-(not)h(equal)g(to)g(AST)p Fq(__)p FF(NULL,)f(then)g(an)g(Ob)5
-b(ject)31 b(has)f(b)s(een)g(read)0 2935 y(successfully)-8
-b(.)41 b(Otherwise,)29 b(there)g(w)m(as)g(either)h(no)f(information)g
-(to)g(read)g(or)g(the)g(c)m(hoice)i(of)e(FITS)g(enco)s(ding)0
-3048 y(\()p Fu(x)p FF(17.3\))k(w)m(as)e(inappropriate.)0
-3212 y(A)m(t)37 b(this)f(p)s(oin)m(t)f(y)m(ou)i(migh)m(t)f(lik)m(e)h
-(to)g(indulge)f(in)f(a)i(little)g(data)g(v)-5 b(alidation)37
-b(along)g(the)f(lines)g(describ)s(ed)f(in)0 3324 y Fu(x)p
-FF(15.6,)e(for)d(example:)227 3575 y Ft(if)43 b(\()g(!strcmp\()d
-(astGetC\()h(wcsinfo,)f("Class")h(\),)h("FrameSet")e(\))j(\))g({)358
-3675 y(<the)f(Object)f(is)i(a)g(FrameSet,)d(so)j(use)f(it>)227
-3774 y(})h(else)f({)358 3874 y(<something)d(unexpected)h(was)i(read>)
-227 3974 y(})0 4237 y FF(If)26 b(a)h(foreign)f(enco)s(ding)h(has)f
-(de\014nitely)g(b)s(een)g(used,)h(then)f(the)g(Ob)5 b(ject)27
-b(will)g(automatically)i(b)s(e)d(a)g(F)-8 b(rameSet)0
-4350 y(\()p Fu(x)p FF(17.2\),)35 b(so)d(this)f(stage)j(can)d(b)s(e)h
-(omitted.)45 b(Ho)m(w)m(ev)m(er,)34 b(if)e(the)g(nativ)m(e)h(enco)s
-(ding)f(\()p Fu(x)p FF(16.1\))i(migh)m(t)e(ha)m(v)m(e)h(b)s(een)0
-4463 y(emplo)m(y)m(ed,)h(whic)m(h)d(is)h(a)g(p)s(ossibilit)m(y)h(if)f
-(y)m(ou)g(accept)h(the)f(FitsChan's)g(default)g(Enco)s(ding)g(v)-5
-b(alue,)33 b(then)e(an)m(y)0 4576 y(class)g(of)g(Ob)5
-b(ject)30 b(migh)m(t)h(ha)m(v)m(e)h(b)s(een)e(read)g(and)g(a)g(quic)m
-(k)h(c)m(hec)m(k)h(w)m(ould)e(b)s(e)g(w)m(orth)m(while.)0
-4739 y(If)36 b(y)m(ou)i(used)e(astSho)m(w)h(\()p Fu(x)p
-FF(4.4\))i(to)e(examine)h(the)f(F)-8 b(rameSet)38 b(whic)m(h)e(results)
-h(from)f(reading)h(our)g(example)0 4852 y(FITS)29 b(header)g(\()p
-Fu(x)p FF(17.3\),)k(y)m(ou)d(w)m(ould)g(\014nd)e(that)i(its)g(base)g(F)
--8 b(rame)31 b(describ)s(es)e(the)h(image's)h(pixel)f(co)s(ordinate)0
-4965 y(system)i(and)f(that)h(its)g(curren)m(t)g(F)-8
-b(rame)32 b(is)g(a)g(SkyF)-8 b(rame)32 b(represen)m(ting)g(galactic)i
-(co)s(ordinates.)46 b(These)31 b(t)m(w)m(o)0 5078 y(F)-8
-b(rames)34 b(are)f(in)m(ter-related)i(b)m(y)d(a)i(Mapping)f(\(actually)
-h(a)g(CmpMap\))e(whic)m(h)h(incorp)s(orates)g(the)g(e\013ects)h(of)0
-5191 y(v)-5 b(arious)32 b(rotations,)h(scalings)f(and)f(a)h(\\zenithal)
-h(equal)f(area")h(sky)e(pro)5 b(jection,)33 b(so)f(that)g(eac)m(h)h
-(pixel)f(of)f(the)0 5304 y(FITS)f(image)h(is)g(mapp)s(ed)e(on)h(to)h(a)
-g(corresp)s(onding)e(sky)h(p)s(osition)h(in)f(galactic)j(co)s
-(ordinates.)0 5467 y(Because)f(this)f(F)-8 b(rameSet)31
-b(ma)m(y)h(b)s(e)e(used)g(b)s(oth)g(as)g(a)h(Mapping)g(\()p
-Fu(x)p FF(13.6\))i(and)d(as)h(a)g(F)-8 b(rame)32 b(\()p
-Fu(x)p FF(13.8\),)i(it)d(ma)m(y)0 5580 y(b)s(e)d(emplo)m(y)m(ed)j
-(directly)e(to)h(p)s(erform)e(man)m(y)h(useful)f(op)s(erations)i
-(without)f(an)m(y)g(need)g(to)h(decomp)s(ose)f(it)g(in)m(to)0
-5693 y(its)i(comp)s(onen)m(t)f(parts.)41 b(These)30 b(include:)p
-eop end
-%%Page: 158 168
-TeXDict begin 158 167 bop 0 52 a FF(158)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)136 351 y
-Fu(\017)46 b FF(T)-8 b(ransforming)32 b(data)h(grid)f(\(FITS)f(pixel\))
-i(co)s(ordinates)g(in)m(to)g(galactic)j(co)s(ordinates)c(and)g
-Fx(vic)-5 b(e)34 b(versa)227 464 y FF(\()p Fu(x)p FF(13.6\).)136
-641 y Fu(\017)46 b FF(F)-8 b(ormatting)35 b(co)s(ordinate)e(v)-5
-b(alues)33 b(\(either)h(pixel)f(or)f(galactic)k(co)s(ordinates\))e
-(ready)e(for)h(displa)m(y)g(to)g(a)227 754 y(user)d(\()p
-Fu(x)p FF(7.6)i(and)e Fu(x)p FF(7.7\).)136 932 y Fu(\017)46
-b FF(Enquiring)38 b(ab)s(out)g(axis)h(lab)s(els)f(\(or)h(other)f(axis)h
-(information|)p Fu(x)p FF(7.5\))i(whic)m(h)d(migh)m(t)h(b)s(e)f(used,)i
-(for)227 1045 y(example,)32 b(to)f(lab)s(el)f(columns)g(of)h(co)s
-(ordinates)g(in)f(a)h(table)g(\()p Fu(x)p FF(7.4\).)136
-1222 y Fu(\017)46 b FF(Aligning)31 b(the)e(image)i(with)e(another)h
-(image)h(from)e(whic)m(h)g(a)h(similar)f(F)-8 b(rameSet)31
-b(has)e(b)s(een)g(obtained)227 1335 y(\()p Fu(x)p FF(14.3\).)136
-1512 y Fu(\017)46 b FF(Creating)40 b(a)g(Plot)h(\()p
-Fu(x)p FF(21\),)j(whic)m(h)39 b(can)h(b)s(e)e(used)h(to)h(o)m(v)m(erla)
-m(y)i(a)e(v)-5 b(ariet)m(y)41 b(of)f(graphical)g(information)227
-1625 y(\(including)31 b(a)f(co)s(ordinate)i(grid|Figure)e(8\))h(on)g
-(the)f(displa)m(y)m(ed)h(image.)136 1802 y Fu(\017)46
-b FF(Generating)30 b(a)g(new)e(F)-8 b(rameSet)30 b(whic)m(h)e
-(re\015ects)i(an)m(y)f(geometrical)i(pro)s(cessing)e(y)m(ou)g(p)s
-(erform)f(on)g(the)227 1915 y(asso)s(ciated)41 b(image)g(data)f(\()p
-Fu(x)p FF(14.5\).)71 b(This)39 b(new)g(F)-8 b(rameSet)41
-b(could)f(then)f(b)s(e)g(written)h(out)f(as)h(FITS)227
-2028 y(headers)30 b(to)h(describ)s(e)f(the)h(mo)s(di\014ed)e(image)j
-(\()p Fu(x)p FF(17.7\).)0 2249 y(If)22 b(the)h(F)-8 b(rameSet)23
-b(con)m(tains)h(other)f(F)-8 b(rames)23 b(\(apart)g(from)f(the)h(base)f
-(and)g(curren)m(t)g(F)-8 b(rames\),)26 b(then)c(y)m(ou)h(w)m(ould)0
-2362 y(also)31 b(ha)m(v)m(e)h(access)g(to)f(information)f(ab)s(out)g
-(other)h(co)s(ordinate)g(systems)g(asso)s(ciated)h(with)e(the)g(image.)
-0 2640 y Fw(17.5)112 b(Remo)m(ving)26 b(W)m(CS)g(Information)g(from)g
-(FITS)g(Headers|the)g(Destructiv)m(e)f(Read)0 2851 y
-FF(It)d(is)f(instructiv)m(e)i(at)f(this)g(p)s(oin)m(t)f(to)h(examine)h
-(the)e(con)m(ten)m(ts)j(of)e(a)f(FitsChan)h(after)g(w)m(e)g(ha)m(v)m(e)
-h(read)e(a)h(F)-8 b(rameSet)0 2964 y(from)30 b(it)h(\()p
-Fu(x)p FF(17.4\).)43 b(The)30 b(follo)m(wing)i(w)m(ould)e(rewind)f(our)
-h(FitsChan)g(and)g(displa)m(y)h(its)g(con)m(ten)m(ts:)227
-3172 y Ft(#include)41 b(<stdio.h>)227 3272 y(char)h(card[)g(81)g(];)227
-3471 y(...)227 3670 y(astClear\()e(fitschan,)g("Card")h(\);)227
-3770 y(while)h(\()h(astFindFits\()c(fitschan,)g("\045f",)j(card,)f(1)j
-(\))f(\))g(\(void\))e(printf\()g("\045s\\n",)f(card)i(\);)0
-3991 y FF(The)30 b(output,)g(if)g(w)m(e)h(started)g(with)f(the)h
-(example)g(FITS)e(header)i(in)f Fu(x)p FF(17.3,)i(migh)m(t)f(lo)s(ok)g
-(lik)m(e)h(this:)227 4199 y Ft(SIMPLE)85 b(=)871 b(T)43
-b(/)87 b(Written)41 b(by)i(IDL:)85 b(30-Jul-1997)39 b(05:35:42.00)227
-4298 y(BITPIX)85 b(=)784 b(-32)42 b(/)87 b(Bits)42 b(per)g(pixel.)227
-4398 y(NAXIS)129 b(=)871 b(2)43 b(/)87 b(Number)41 b(of)i(dimensions)
-227 4497 y(NAXIS1)85 b(=)784 b(300)42 b(/)87 b(Length)41
-b(of)i(x)g(axis.)227 4597 y(NAXIS2)85 b(=)784 b(300)42
-b(/)87 b(Length)41 b(of)i(y)g(axis.)227 4697 y(SURVEY)85
-b(=)43 b('COBE)f(DIRBE')227 4796 y(BUNITS)85 b(=)43 b('MJy/sr)84
-b(')227 4896 y(ORIGIN)h(=)43 b('CDAC)172 b(')479 b(/)87
-b(Cosmology)40 b(Data)i(Analysis)e(Center)227 4996 y(TELESCOP=)g('COBE)
-172 b(')479 b(/)87 b(COsmic)41 b(Background)f(Explorer)g(satellite)227
-5095 y(INSTRUME=)g('DIRBE)128 b(')479 b(/)87 b(COBE)42
-b(instrument)e([DIRBE,)g(DMR,)i(FIRAS])227 5195 y(PIXRESOL=)868
-b(9)43 b(/)87 b(Quad)42 b(tree)g(pixel)g(resolution)d([6,)j(9])227
-5295 y(DATE)173 b(=)43 b('27/09/94')475 b(/)87 b(FITS)42
-b(file)g(creation)e(date)i(\(dd/mm/yy\))227 5394 y(DATE-MAP=)e
-('16/09/94')475 b(/)87 b(Date)42 b(of)h(original)d(file)i(creation)e
-(\(dd/mm/yy\))227 5494 y(COMMENT)215 b(COBE)42 b(specific)f(keywords)
-227 5593 y(DATE-BEG=)f('08/12/89')475 b(/)87 b(date)42
-b(of)h(initial)e(data)h(represented)d(\(dd/mm/yy\))227
-5693 y(DATE-END=)h('25/09/90')475 b(/)87 b(date)42 b(of)h(final)e(data)
-h(represented)127 b(\(dd/mm/yy\))p eop end
-%%Page: 159 169
-TeXDict begin 159 168 bop 0 52 a Fy(17.6)93 b(Propagating)31
-b(W)m(CS)g(Information)f(through)g(Data)i(Pro)s(cessing)e(Steps)904
-b FF(159)0 351 y(Comparing)42 b(this)f(with)h(the)g(original,)k(y)m(ou)
-d(can)f(see)g(that)h(all)g(the)f(FITS)f(cards)h(that)g(represen)m(t)g
-(W)m(CS)0 464 y(information)36 b(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed.)
-59 b(They)35 b(ha)m(v)m(e)i(e\013ectiv)m(ely)i(b)s(een)d(\\suc)m(k)m
-(ed)h(out")f(of)g(the)h(FitsChan)f(b)m(y)0 577 y(the)g(destructiv)m(e)g
-(read)g(that)g(astRead)g(p)s(erforms)e(and)h(con)m(v)m(erted)i(in)m(to)
-f(an)g(equiv)-5 b(alen)m(t)37 b(F)-8 b(rameSet.)57 b(AST)0
-690 y(remem)m(b)s(ers)36 b(where)f(they)i(w)m(ere)g(stored,)h(ho)m(w)m
-(ev)m(er,)h(so)e(that)g(if)f(w)m(e)h(later)g(write)g(W)m(CS)f
-(information)h(bac)m(k)0 803 y(in)m(to)28 b(the)f(FitsChan)g(\()p
-Fu(x)p FF(17.7\))i(they)e(will,)i(as)e(far)f(as)i(p)s(ossible,)f(go)h
-(bac)m(k)f(in)m(to)h(their)f(original)h(lo)s(cations.)41
-b(This)0 916 y(helps)30 b(to)h(preserv)m(e)f(the)h(o)m(v)m(erall)i(la)m
-(y)m(out)f(of)e(the)h(FITS)f(header.)0 1081 y(Y)-8 b(ou)28
-b(can)f(no)m(w)h(see)f(wh)m(y)g(astRead)h(p)s(erforms)e(destructiv)m(e)
-i(reads.)40 b(It)27 b(is)g(a)h(mec)m(hanism)f(for)g(remo)m(ving)h(W)m
-(CS)0 1194 y(information)i(from)g(a)g(FITS)f(header)g(while)h
-(insulating)g(y)m(ou,)h(as)f(a)g(programmer,)g(from)f(the)h(details)h
-(of)f(the)0 1306 y(enco)s(ding)c(b)s(eing)f(used.)38
-b(It)26 b(means)g(y)m(ou)g(can)g(ensure)f(that)h(all)g(relev)-5
-b(an)m(t)27 b(header)f(cards)f(ha)m(v)m(e)i(b)s(een)e(remo)m(v)m(ed,)0
-1419 y(giving)k(y)m(ou)g(a)g(clean)h(slate,)h(without)d(ha)m(ving)h(to)
-h(kno)m(w)e(whic)m(h)h(FITS)f(k)m(eyw)m(ords)h(an)m(y)g(particular)g
-(enco)s(ding)0 1532 y(uses.)0 1697 y(Clearing)d(this)g(W)m(CS)f
-(information)h(out)g(of)g(a)g(FITS)f(header)h(is)g(particularly)g(imp)s
-(ortan)m(t)g(when)e(considering)0 1810 y(ho)m(w)35 b(to)h(write)f(new)f
-(W)m(CS)h(information)g(bac)m(k)h(after)g(pro)s(cessing)e(\()p
-Fu(x)p FF(17.7\).)57 b(If)35 b(an)m(y)g(relev)-5 b(an)m(t)36
-b(FITS)f(cards)0 1923 y(are)25 b(left)h(o)m(v)m(er)h(from)d(the)h
-(input)f(dataset)j(and)d(\014nd)g(their)h(w)m(a)m(y)h(in)m(to)g(the)f
-(new)g(pro)s(cessed)f(header,)i(they)f(could)0 2036 y(in)m(terfere)38
-b(with)f(the)h(new)f(information)h(b)s(eing)f(written.)2003
-2003 y Fv(28)2140 2036 y FF(The)g(destructiv)m(e)h(read)g(mec)m(hanism)
-f(ensures)0 2149 y(that)31 b(this)f(do)s(esn't)g(happ)s(en.)0
-2449 y Fw(17.6)112 b(Propagating)38 b(W)m(CS)g(Information)g(through)g
-(Data)f(Pro)s(cessing)h(Steps)0 2673 y FF(One)43 b(of)h(the)g(purp)s
-(oses)e(of)i(AST)f(is)h(to)g(mak)m(e)h(it)f(feasible)h(to)f(propagate)h
-(W)m(CS)f(information)g(through)0 2786 y(successiv)m(e)d(stages)g(of)f
-(data)h(pro)s(cessing,)h(so)e(that)h(it)f(remains)g(consisten)m(t)h
-(with)f(the)g(asso)s(ciated)h(image)0 2899 y(data.)46
-b(As)32 b(far)g(as)g(p)s(ossible,)h(this)e(should)g(happ)s(en)g
-(regardless)h(of)g(the)g(FITS)g(enco)s(ding)g(used)f(to)i(store)f(the)0
-3012 y(original)g(W)m(CS)e(information.)0 3177 y(If)36
-b(the)h(data)h(pro)s(cessing)f(b)s(eing)f(p)s(erformed)g(do)s(es)g(not)
-h(c)m(hange)h(the)f(relationship)g(b)s(et)m(w)m(een)h(image)g(pixel)0
-3290 y(and)d(w)m(orld)g(co)s(ordinates)h(\(whatev)m(er)h(these)f(ma)m
-(y)g(b)s(e\),)g(then)g(propagation)g(of)g(the)f(W)m(CS)h(information)f
-(is)0 3403 y(straigh)m(tforw)m(ard.)42 b(Y)-8 b(ou)30
-b(can)h(simply)f(cop)m(y)h(the)g(FITS)e(header)h(from)g(input)g(to)h
-(output.)0 3567 y(If)k(this)h(relationship)g(c)m(hanges,)i(ho)m(w)m(ev)
-m(er,)g(then)e(the)f(W)m(CS)h(information)g(m)m(ust)f(b)s(e)g(pro)s
-(cessed)g(alongside)0 3680 y(the)d(image)h(data)f(and)f(a)h(new)f(FITS)
-g(header)g(generated)h(to)h(represen)m(t)e(it.)45 b(In)31
-b(this)g(case,)j(the)d(sequence)h(of)0 3793 y(op)s(erations)f(within)f
-(y)m(our)g(program)g(w)m(ould)g(probably)g(b)s(e)f(as)i(follo)m(ws:)111
-4062 y(1.)46 b(Read)c(the)f(image)i(data)e(and)g(asso)s(ciated)i(FITS)d
-(header)h(from)g(the)g(input)g(dataset,)k(putting)c(the)227
-4175 y(header)30 b(cards)h(in)m(to)g(a)g(FitsChan)f(\()p
-Fu(x)p FF(17.3\).)111 4366 y(2.)46 b(Read)c(an)f(AST)f(Ob)5
-b(ject,)45 b(a)c(F)-8 b(rameSet,)46 b(from)40 b(the)i(FitsChan)f(\(t)m
-(ypically)i(using)e(a)h(foreign)f(FITS)227 4479 y(enco)s(ding|)p
-Fu(x)p FF(17.4\).)111 4671 y(3.)46 b(Pro)s(cess)31 b(the)f(image)i
-(data)f(and)f(mo)s(dify)f(the)i(F)-8 b(rameSet)31 b(accordingly)h(\()p
-Fx(e.g.)e Fu(x)p FF(14.5\).)111 4863 y(4.)46 b(W)-8 b(rite)32
-b(the)f(F)-8 b(rameSet)31 b(bac)m(k)g(in)m(to)h(the)e(FitsChan)g(\()p
-Fu(x)p FF(17.7\).)111 5055 y(5.)46 b(P)m(erform)31 b(an)m(y)f(other)h
-(mo)s(di\014cation)g(of)f(FITS)g(header)g(cards)g(y)m(our)g(program)h
-(ma)m(y)g(require.)111 5246 y(6.)46 b(W)-8 b(rite)35
-b(the)e(FitsChan)h(con)m(ten)m(ts)h(\()p Fx(i.e.)e FF(pro)s(cessed)f
-(header)i(cards\))f(and)g(image)h(data)g(to)g(the)g(output)227
-5359 y(dataset.)p 0 5425 1512 4 v 73 5479 a Fs(28)138
-5510 y Fr(This)27 b(can)g(happ)r(en)f(if)h(a)g(particular)g(k)n(eyw)n
-(ord)f(is)i(presen)n(t)e(in)g(the)g(input)g(header)h(but)e(is)j(not)e
-(used)g(in)h(the)f(output)f(header)0 5602 y(\(whether)30
-b(particular)g(k)n(eyw)n(ords)g(are)g(used)f(can)h(dep)r(end)f(on)h
-(the)f(W)n(CS)h(information)h(b)r(eing)f(stored\).)47
-b(In)29 b(suc)n(h)h(a)g(case,)i(the)0 5693 y(original)27
-b(v)l(alue)f(w)n(ould)g(not)f(b)r(e)h(o)n(v)n(er-written)f(b)n(y)g(a)h
-(new)g(output)f(v)l(alue,)g(so)i(w)n(ould)f(remain)g(erroneously)g
-(presen)n(t.)p eop end
-%%Page: 160 170
-TeXDict begin 160 169 bop 0 52 a FF(160)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)0 351 y FF(In)e(stage)j
-(\(2\),)g(the)e(original)i(W)m(CS)e(information)g(will)h(b)s(e)e(remo)m
-(v)m(ed)j(from)d(the)i(FitsChan)f(b)m(y)g(a)g(destructiv)m(e)0
-464 y(read.)62 b(Later,)40 b(in)e(stage)h(\(4\),)h(new)d(W)m(CS)h
-(information)g(is)f(written)h(to)g(replace)h(it.)63 b(This)37
-b(is)g(the)h(pro)s(cess)0 577 y(whic)m(h)30 b(w)m(e)h(consider)f(next)h
-(\()p Fu(x)p FF(17.7\).)0 875 y Fw(17.7)112 b(W)-9 b(riting)37
-b(F)-9 b(oreign)38 b(W)m(CS)f(Information)h(to)f(a)h(FITS)g(Header)0
-1099 y FF(Before)g(w)m(e)f(can)g(write)f(pro)s(cessed)g(W)m(CS)h
-(information)g(held)f(in)h(a)g(F)-8 b(rameSet)37 b(bac)m(k)h(in)m(to)f
-(a)g(FitsChan)g(in)0 1212 y(preparation)i(for)g(output,)h(w)m(e)g(m)m
-(ust)f(select)h(the)f(FITS)f(enco)s(ding)h(to)h(use.)66
-b(Unfortunately)-8 b(,)42 b(w)m(e)d(cannot)0 1325 y(simply)26
-b(dep)s(end)g(on)h(the)g(default)g(v)-5 b(alue)27 b(of)g(the)h(Enco)s
-(ding)e(attribute,)i(as)g(w)m(e)f(did)f(when)g(reading)h(the)g(input)0
-1438 y(information)34 b(\()p Fu(x)p FF(17.3\),)k(b)s(ecause)33
-b(the)h(destructiv)m(e)h(action)g(of)f(reading)g(the)g(W)m(CS)g(data)h
-(\()p Fu(x)p FF(17.5\))h(will)e(ha)m(v)m(e)0 1551 y(altered)28
-b(the)f(FitsChan's)g(con)m(ten)m(ts.)41 b(This,)27 b(in)g(turn,)f(will)
-i(ha)m(v)m(e)g(c)m(hanged)f(the)g(c)m(hoice)i(of)e(default)g(enco)s
-(ding,)0 1664 y(probably)j(causing)g(it)h(to)g(rev)m(ert)g(to)h(NA)-8
-b(TIVE.)0 1828 y(W)g(e)31 b(will)g(return)e(to)h(the)h(question)f(of)g
-(the)g(optim)m(um)g(c)m(hoice)i(of)f(enco)s(ding)f(b)s(elo)m(w.)40
-b(F)-8 b(or)31 b(no)m(w,)g(let's)g(assume)0 1941 y(that)40
-b(w)m(e)g(w)m(an)m(t)g(to)h(use)e(the)g(same)h(enco)s(ding)g(for)f
-(output)g(as)h(w)m(e)g(used)f(for)g(input.)67 b(Since)39
-b(w)m(e)h(enquired)0 2054 y(what)32 b(that)h(w)m(as)f(b)s(efore)g(w)m
-(e)g(read)g(the)g(input)f(W)m(CS)h(data)h(from)f(the)g(FitsChan)g(\()p
-Fu(x)p FF(17.3\),)j(w)m(e)e(can)f(no)m(w)g(set)0 2166
-y(that)e(v)-5 b(alue)29 b(explicitly)-8 b(.)43 b(W)-8
-b(e)30 b(can)f(also)h(set)g(the)f(FitsChan's)h(Card)e(attribute)i(bac)m
-(k)g(to)f(1)h(at)g(the)f(same)h(time)0 2279 y(\(b)s(ecause)f(the)g
-(write)h(will)f(fail)g(if)g(the)h(FitsChan)e(is)h(not)h(rew)m(ound\).)
-39 b(astW)-8 b(rite)31 b(can)e(then)g(b)s(e)f(used)h(to)g(write)0
-2392 y(the)i(output)f(W)m(CS)g(information)h(in)m(to)g(the)g(FitsChan:)
-227 2646 y Ft(int)43 b(nobj;)227 2845 y(...)227 3044
-y(astSet\()e(fitschan,)f("Card=1,)g(Encoding=\045s",)e(encode)j(\);)227
-3144 y(nobj)h(=)h(astWrite\()d(fitschan,)g(wcsinfo)h(\);)0
-3411 y FF(The)28 b(v)-5 b(alue)29 b(returned)e(b)m(y)i(astW)-8
-b(rite)30 b(\(assigned)f(to)g(\\nob)5 b(j"\))29 b(indicates)h(ho)m(w)e
-(man)m(y)h(Ob)5 b(jects)28 b(w)m(ere)h(written.)0 3524
-y(This)h(will)g(either)h(b)s(e)f(1)h(or)f(zero.)42 b(A)31
-b(v)-5 b(alue)31 b(of)f(zero)h(is)g(used)f(to)h(indicate)g(that)g(the)g
-(information)g(could)f(not)0 3637 y(b)s(e)g(enco)s(ded)g(in)g(the)g
-(form)g(y)m(ou)h(requested.)41 b(If)30 b(this)g(happ)s(ens,)f(nothing)h
-(will)h(ha)m(v)m(e)g(b)s(een)f(written.)0 3801 y(If)h(y)m(our)g(c)m
-(hoice)i(of)e(enco)s(ding)g(pro)m(v)m(es)h(inadequate,)g(the)f
-(probable)g(reason)g(is)h(that)f(the)h(c)m(hanges)g(y)m(ou)f(ha)m(v)m
-(e)0 3914 y(made)23 b(to)g(the)g(F)-8 b(rameSet)24 b(ha)m(v)m(e)g
-(caused)f(it)h(to)f(depart)g(from)f(the)h(data)h(mo)s(del)e(whic)m(h)h
-(the)g(enco)s(ding)g(assumes.)0 4027 y(AST)43 b(kno)m(ws)g(ab)s(out)h
-(the)g(data)g(mo)s(del)g(used)f(b)m(y)g(eac)m(h)i(enco)s(ding)f(and)f
-(will)h(attempt)h(to)f(simplify)f(the)0 4140 y(F)-8 b(rameSet)31
-b(y)m(ou)e(pro)m(vide)h(so)g(as)f(to)i(\014t)e(in)m(to)h(that)g(mo)s
-(del,)g(th)m(us)f(relieving)i(y)m(ou)f(of)f(the)h(need)f(to)h
-(understand)0 4252 y(the)38 b(details)h(and)f(limitations)i(of)e(eac)m
-(h)h(enco)s(ding)f(y)m(ourself.)65 b(When)37 b(this)h(attempt)i(fails,)
-g(ho)m(w)m(ev)m(er,)i(y)m(ou)0 4365 y(m)m(ust)30 b(consider)h(what)f
-(alternativ)m(e)j(enco)s(ding)d(to)h(use.)0 4530 y(Ideally)-8
-b(,)31 b(y)m(ou)e(w)m(ould)g(probably)g(w)m(an)m(t)h(to)g(try)f(a)g
-(sequence)h(of)f(alternativ)m(e)j(enco)s(dings,)d(using)g(an)g(approac)
-m(h)0 4642 y(suc)m(h)h(as)h(the)f(follo)m(wing:)227 4896
-y Ft(/*)43 b(1.)g(*/)227 4996 y(astSet\()e(fitschan,)f("Card=1,)g
-(Encoding=FITS-IR)o(AF")d(\);)227 5095 y(if)43 b(\()g(!astWrite\()d
-(fitschan,)g(wcsinfo)g(\))j(\))h({)227 5295 y(/*)f(2.)g(*/)358
-5394 y(astSetC\()d(fitschan,)g("Encoding",)f(encode)i(\);)358
-5494 y(if)i(\()g(!astWrite\()c(fitschan,)h(wcsinfo)h(\))i(\))g({)227
-5693 y(/*)g(3.)g(*/)p eop end
-%%Page: 161 171
-TeXDict begin 161 170 bop 0 52 a Fy(17.7)93 b(W)-8 b(riting)31
-b(F)-8 b(oreign)32 b(W)m(CS)e(Information)g(to)i(a)e(FITS)g(Header)1289
-b FF(161)489 351 y Ft(astSet\()40 b(fitschan,)g("Encoding=NATIVE")d
-(\);)489 451 y(\(void\))k(astWrite\()f(fitschan,)g(wcsinfo)g(\);)358
-551 y(})227 650 y(})0 912 y FF(That)30 b(is:)111 1175
-y(1.)46 b(Start)29 b(b)m(y)g(trying)g(the)f(FITS-W)m(CS)h(enco)s(ding,)
-g(on)g(the)g(grounds)e(that)i(FITS)f(should)g(pro)m(vide)h(a)g(uni-)227
-1288 y(v)m(ersal)g(in)m(terc)m(hange)g(standard)e(in)g(whic)m(h)h(all)g
-(W)m(CS)g(information)f(should)g(b)s(e)g(expressed)g(if)h(p)s(ossible.)
-111 1475 y(2.)46 b(If)35 b(that)h(fails,)h(then)d(try)h(the)h(original)
-g(enco)s(ding)f(used)f(for)h(the)g(input)f(W)m(CS)h(information,)i(on)e
-(the)227 1588 y(grounds)g(that)h(y)m(ou)f(are)h(at)h(least)f(not)g
-(making)g(the)f(information)h(an)m(y)g(harder)f(for)g(others)g(to)i
-(read)227 1701 y(than)30 b(it)h(originally)h(w)m(as.)111
-1889 y(3.)46 b(If)23 b(that)h(also)g(fails,)i(then)d(y)m(ou)g(are)h
-(probably)e(trying)i(to)g(store)g(fairly)f(complex)h(information)g(for)
-f(whic)m(h)227 2002 y(y)m(ou)36 b(need)g(the)g(nativ)m(e)h(enco)s
-(ding.)56 b(Only)35 b(other)h(AST)f(programs)h(will)g(then)f(b)s(e)g
-(able)i(to)f(read)g(this)227 2115 y(information,)i(but)d(these)h(are)g
-(probably)f(the)h(only)f(programs)h(that)g(will)g(b)s(e)f(able)h(to)g
-(do)g(an)m(ything)227 2228 y(sensible)31 b(with)f(it)h(an)m(yw)m(a)m(y)
--8 b(.)0 2490 y(An)36 b(alternativ)m(e)i(approac)m(h)f(migh)m(t)g(b)s
-(e)e(to)i(enco)s(de)f(the)h(W)m(CS)f(information)g(in)g(sev)m(eral)h(w)
-m(a)m(ys,)i(since)e(this)0 2603 y(giv)m(es)g(the)g(maxim)m(um)f(c)m
-(hance)h(that)f(other)h(soft)m(w)m(are)g(will)g(b)s(e)e(able)i(to)f
-(read)g(it.)59 b(This)35 b(approac)m(h)h(is)g(only)0
-2716 y(p)s(ossible)44 b(if)g(there)g(is)h(no)f(signi\014can)m(t)h
-(con\015ict)g(b)s(et)m(w)m(een)g(the)f(FITS)g(k)m(eyw)m(ords)g(used)f
-(b)m(y)i(the)f(di\013eren)m(t)0 2829 y(enco)s(dings)387
-2796 y Fv(29)462 2829 y FF(.)39 b(Adopting)27 b(this)g(approac)m(h)h(w)
-m(ould)e(simply)h(require)g(m)m(ultiple)g(calls)i(to)e(astW)-8
-b(rite,)30 b(rewinding)0 2942 y(the)h(FitsChan)f(and)g(c)m(hanging)h
-(its)g(Enco)s(ding)e(v)-5 b(alue)31 b(b)s(efore)f(eac)m(h)i(one.)0
-3104 y(Unfortunately)-8 b(,)26 b(ho)m(w)m(ev)m(er,)g(there)e(is)f(a)h
-(dra)m(wbac)m(k)g(to)g(duplicating)g(W)m(CS)f(information)h(in)f(the)h
-(FITS)f(header)0 3217 y(in)38 b(this)h(w)m(a)m(y)-8 b(,)42
-b(b)s(ecause)d(an)m(y)g(program)g(whic)m(h)f(mo)s(di\014es)g(one)h(v)m
-(ersion)g(of)g(this)g(information)g(and)f(simply)0 3330
-y(copies)27 b(the)f(remainder)f(of)h(the)h(header)e(will)i(risk)e(pro)s
-(ducing)g(t)m(w)m(o)i(inconsisten)m(t)g(sets)g(of)f(information.)39
-b(This)0 3443 y(could)34 b(ob)m(viously)h(b)s(e)e(confusing)h(to)g
-(subsequen)m(t)f(soft)m(w)m(are.)53 b(Whether)35 b(y)m(ou)f(consider)g
-(this)g(a)g(w)m(orth)m(while)0 3556 y(risk)c(probably)g(dep)s(ends)e
-(on)i(the)h(use)f(to)h(whic)m(h)f(y)m(ou)h(exp)s(ect)g(y)m(our)f(data)h
-(to)g(b)s(e)f(put.)p 0 5516 1512 4 v 73 5570 a Fs(29)138
-5602 y Fr(In)g(practice,)j(this)e(means)g(y)n(ou)f(should)g(a)n(v)n
-(oid)h(mixing)g(FITS-IRAF,)e(FITS-W)n(CS,)h(FITS-AIPS,)g(FITS-AIPS++)f
-(and)0 5693 y(FITS-PC)d(enco)r(dings)g(since)g(they)f(share)h(man)n(y)g
-(k)n(eyw)n(ords.)p eop end
-%%Page: 162 172
-TeXDict begin 162 171 bop 0 52 a FF(162)1885 b Fy(17)92
-b(USING)30 b(F)m(OREIGN)h(FITS)f(ENCODINGS)p eop end
-%%Page: 163 173
-TeXDict begin 163 172 bop 3643 52 a FF(163)0 351 y Fz(18)135
-b(Storing)45 b(AST)f(Ob)7 b(jects)46 b(as)f(XML)f(\(XmlChan\))0
-603 y FF(XML)208 570 y Fv(30)347 603 y FF(is)32 b(fast)h(b)s(ecoming)f
-(the)g(standard)g(format)g(for)g(passing)g(structured)f(data)i(around)e
-(the)h(in)m(ternet,)0 716 y(and)20 b(m)m(uc)m(h)h(general)h(purp)s(ose)
-d(soft)m(w)m(are)j(has)e(b)s(een)g(written)h(for)g(tasks)g(suc)m(h)f
-(as)h(the)g(parsing,)i(editing,)g(displa)m(y)0 829 y(and)29
-b(transformation)g(of)h(XML)f(data.)41 b(The)29 b(XmlChan)g(class)h
-(\(a)g(sp)s(ecialised)f(form)g(of)h(Channel\))e(pro)m(vides)0
-941 y(facilities)k(for)f(storing)f(AST)g(ob)5 b(jects)31
-b(externally)g(in)f(the)h(form)f(of)g(XML)h(do)s(cumen)m(ts,)f(th)m(us)
-g(allo)m(wing)i(suc)m(h)0 1054 y(soft)m(w)m(are)g(to)f(b)s(e)f(used.)0
-1216 y(The)40 b(primary)f(XML)h(format)h(used)e(b)m(y)h(the)h(XmlChan)e
-(class)i(is)g(a)f(fairly)h(close)g(transliteration)h(of)e(the)0
-1329 y(AST)27 b(nativ)m(e)j(format)e(pro)s(duced)f(b)m(y)h(the)g(basic)
-g(Channel)g(class.)40 b(Curren)m(tly)-8 b(,)29 b(there)f(is)g(no)g(DTD)
-h(or)f(sc)m(hema)0 1442 y(de\014ning)c(the)i(structure)f(of)g(data)i
-(pro)s(duced)c(in)i(this)h(format)f(b)m(y)h(an)f(XmlChan.)38
-b(The)25 b(follo)m(wing)i(is)e(a)h(nativ)m(e)0 1554 y(AST)i(represen)m
-(tation)i(of)f(a)g(simple)g(1-D)g(F)-8 b(rame)30 b(\(including)f
-(commen)m(ts)g(and)g(with)f(the)h(F)-8 b(ull)29 b(attribute)h(set)0
-1667 y(to)h(zero)g(so)g(that)g(some)g(default)f(attribute)h(v)-5
-b(alues)31 b(are)g(included)e(as)i(extra)g(commen)m(ts\):)271
-1911 y Ft(Begin)41 b(Frame)173 b(#)43 b(Coordinate)c(system)i
-(description)227 2011 y(#)131 b(Title)41 b(=)i("1-d)f(coordinate)e
-(system")215 b(#)43 b(Title)e(of)i(coordinate)d(system)402
-2110 y(Naxes)h(=)i(1)131 b(#)43 b(Number)e(of)i(coordinate)c(axes)402
-2210 y(Domain)i(=)i("SCREEN")127 b(#)44 b(Coordinate)39
-b(system)i(domain)227 2310 y(#)131 b(Lbl1)42 b(=)h("Axis)e(1")217
-b(#)44 b(Label)d(for)h(axis)g(1)227 2409 y(#)131 b(Uni1)42
-b(=)h("cm")390 b(#)44 b(Units)d(for)h(axis)g(1)402 2509
-y(Ax1)g(=)305 b(#)43 b(Axis)f(number)f(1)532 2609 y(Begin)h(Axis)303
-b(#)44 b(Coordinate)39 b(axis)663 2708 y(Unit)j(=)h("cm")129
-b(#)44 b(Axis)d(units)532 2808 y(End)i(Axis)271 2907
-y(End)f(Frame)0 3164 y FF(The)30 b(corresp)s(onding)f(XmlChan)h(output)
-g(w)m(ould)g(lo)s(ok)h(lik)m(e:)271 3408 y Ft(<Frame)41
-b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o(c.u)o(k/)o(as)o(t/x)o
-(ml)o(/")576 3508 y(desc="Coordinate)c(system)k(description">)402
-3608 y(<_attribute)e(name="Title")f(quoted="true")g(value="1-d)i
-(coordinate)f(system")925 3707 y(desc="Title)g(of)j(coordinate)e
-(system")h(default="true"/)o(>)402 3807 y(<_attribute)e(name="Naxes")f
-(value="1")i(desc="Number)f(of)k(coordinate)c(axes"/>)402
-3906 y(<_attribute)g(name="Domain")f(quoted="true")g(value="SCREEN")925
-4006 y(desc="Coordinat)o(e)g(system)j(domain"/>)402 4106
-y(<_attribute)e(name="Lbl1")g(quoted="true")f(value="Axis)h(1")925
-4205 y(desc="Label)g(for)j(axis)g(1")h(default="true"/>)402
-4305 y(<_attribute)c(name="Uni1")g(quoted="true")f(value="cm")925
-4405 y(desc="Units)h(for)j(axis)g(1")h(default="true"/>)402
-4504 y(<Axis)e(label="Ax1")e(desc="Coordinate)e(axis">)532
-4604 y(<!--Axis)k(number)g(1-->)532 4703 y(<_attribute)e(name="Unit")g
-(quoted="true")g(value="cm")g(desc="Axis)h(units"/>)402
-4803 y(</Axis>)271 4903 y(</Frame>)0 5160 y FF(Notes:)111
-5417 y(1.)46 b(The)27 b(AST)g(class)h(name)g(is)f(used)g(as)h(the)g
-(name)f(for)g(an)h(XML)f(elemen)m(t)i(whic)m(h)f(con)m(tain)h(a)e
-(description)227 5530 y(of)k(an)f(AST)g(ob)5 b(ject.)p
-0 5607 1512 4 v 73 5661 a Fs(30)138 5693 y Fr(h)n
-(ttp://www.w3.org/XML/)p eop end
-%%Page: 164 174
-TeXDict begin 164 173 bop 0 52 a FF(164)1399 b Fy(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))111
-351 y FF(2.)46 b(AST)39 b(attributes)h(are)g(describ)s(ed)f(b)m(y)g
-(XML)h(elemen)m(ts)h(with)e(the)h(name)f(\\)p Fq(_)p
-FF(attribute".)70 b(Unfortu-)227 464 y(nately)-8 b(,)32
-b(the)f(w)m(ord)f(\\attribute")i(is)e(also)i(used)d(b)m(y)h(XML)h(to)g
-(refer)f(to)h(a)g(\\name=v)-5 b(alue")32 b(pair)e(within)227
-577 y(an)36 b(elemen)m(t)h(start)f(tag.)58 b(So)36 b(for)f(instance,)j
-(the)e(\\Title")h(attribute)g(of)e(the)h(AST)f(F)-8 b(rame)37
-b(ob)5 b(ject)36 b(is)227 690 y(describ)s(ed)g(within)h(an)f(XML)i
-(elemen)m(t)g(with)f(name)g(\\)p Fq(_)p FF(attribute")h(in)f(whic)m(h)f
-(the)i(XML)f(attribute)227 803 y(\\name")c(has)e(the)g(v)-5
-b(alue)32 b(\\Title",)i(and)c(the)i(XML)g(attribute)g(\\v)-5
-b(alue")33 b(has)e(the)g(v)-5 b(alue)32 b(\\1-d)g(co)s(ordi-)227
-916 y(nate)g(system".)45 b(The)31 b(moral)h(is)g(alw)m(a)m(ys)h(to)f(b)
-s(e)f(clear)h(clear)h(ab)s(out)e(the)h(con)m(text)h(\(AST)e(or)h(XML\))
-g(in)227 1029 y(whic)m(h)e(the)h(w)m(ord)f Fx(attribute)38
-b FF(is)30 b(b)s(eing)g(used!)111 1215 y(3.)46 b(The)e(XML)h(includes)f
-(commen)m(ts)i(b)s(oth)e(as)g(XML)h(attributes)g(with)g(the)f(name)h
-(\\desc",)k(and)44 b(as)227 1328 y(separate)32 b(commen)m(t)f(tags.)111
-1514 y(4.)46 b(Elemen)m(ts)33 b(whic)m(h)e(describ)s(e)g(default)g(v)-5
-b(alues)32 b(are)g(iden)m(ti\014ed)f(b)m(y)h(the)f(fact)i(that)f(they)f
-(ha)m(v)m(e)i(an)e(XML)227 1627 y(attribute)f(called)h(\\default")g
-(set)f(to)g(the)g(v)-5 b(alue)30 b(\\true".)41 b(These)29
-b(elemen)m(ts)i(are)f(ignored)f(when)g(b)s(eing)227 1740
-y(read)i(bac)m(k)g(in)m(to)g(an)f(XmlChan.)111 1926 y(5.)46
-b(The)20 b(outer-most)h(XML)g(elemen)m(t)h(of)e(an)g(AST)g(ob)5
-b(ject)21 b(will)f(set)h(the)g(default)f(namespace)h(to)g
-Fq(http://www.starlink.ac.uk)o(/ast)o(/xm)o(l/)227 2039
-y FF(whic)m(h)30 b(will)h(b)s(e)f(inherited)g(b)m(y)g(all)h(nested)g
-(elemen)m(ts.)0 2295 y(The)j(XmlChan)g(class)h(c)m(hanges)g(the)g
-(default)g(v)-5 b(alue)35 b(for)f(the)h(Commen)m(t)f(and)g(F)-8
-b(ull)35 b(attributes)g(\(inherited)0 2408 y(from)k(the)g(base)h
-(Channel)e(class\))j(to)f(zero)g(and)e(-1,)43 b(resulting)c(in)g(terse)
-h(output)f(b)m(y)g(default.)68 b(With)39 b(the)0 2521
-y(default)31 b(v)-5 b(alues)30 b(for)g(these)h(attributes,)g(the)g(ab)s
-(o)m(v)m(e)h(XML)e(is)h(reduced)e(to)i(the)g(follo)m(wing:)271
-2764 y Ft(<Frame)41 b(xmlns="http://ww)o(w.s)o(ta)o(rl)o(ink)o(.a)o
-(c.u)o(k/)o(as)o(t/x)o(ml)o(/">)402 2863 y(<_attribute)e(name="Naxes")f
-(value="1"/>)402 2963 y(<_attribute)h(name="Domain")f(quoted="true")g
-(value="SCREEN"/>)402 3063 y(<Axis)j(label="Ax1">)532
-3162 y(<_attribute)e(name="Unit")g(quoted="true")g(value="cm"/>)402
-3262 y(</Axis>)271 3361 y(</Frame>)0 3618 y FF(The)30
-b(XmlChan)f(class)i(uses)f(the)h(Skip)e(attributes)i(v)m(ery)g
-(similarly)g(to)g(the)f(Channel)g(class.)41 b(If)30 b(Skip)f(is)i(zero)
-0 3731 y(\(the)f(default\))g(then)f(an)h(error)f(will)h(b)s(e)f(rep)s
-(orted)g(if)g(the)h(text)h(supplied)d(b)m(y)h(the)h(source)g(function)f
-(do)s(es)g(not)0 3844 y(b)s(egin)k(with)h(an)f(AST)g(Ob)5
-b(ject.)51 b(If)33 b(Skip)g(is)g(non-zero,)j(then)d(initial)i(text)f
-(is)g(skipp)s(ed)e(o)m(v)m(er)j(without)f(error)0 3956
-y(un)m(til)k(the)g(start)g(of)g(an)f(AST)g(ob)5 b(ject)39
-b(is)f(found.)61 b(this)37 b(allo)m(ws)j(an)d(AST)g(ob)5
-b(ject)39 b(to)f(b)s(e)f(lo)s(cated)i(within)e(a)0 4069
-y(larger)31 b(XML)g(do)s(cumen)m(t.)0 4360 y Fw(18.1)112
-b(Reading)39 b(IV)m(O)m(A)d(Space-Time-Co)s(ordinates)41
-b(XML)c(\(STC-X\))g(Descriptions)0 4580 y FF(The)29 b(XmlChan)g(class)i
-(also)f(pro)m(vides)g(supp)s(ort)e(for)h(reading)h(\(but)f(not)h
-(writing\))g(XML)g(do)s(cumen)m(ts)g(whic)m(h)0 4693
-y(use)39 b(a)h(restricted)g(subset)e(of)i(an)f(early)h(draft)e
-(\(V1.20\))k(of)e(the)f(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g(XML)0
-4806 y(\(STC-X\))23 b(system.)38 b(The)23 b(v)m(ersion)g(of)h(STC-X)e
-(\014nally)h(adopted)g(b)m(y)g(the)g(IV)m(O)m(A)h(di\013ers)e(in)h(sev)
-m(eral)i(signi\014can)m(t)0 4919 y(resp)s(ects)d(from)f(V1.20,)26
-b(and)21 b(so)i(the)f(STC-X)f(supp)s(ort)f(curren)m(tly)i(pro)m(vided)g
-(b)m(y)g(AST)f(is)h(mainly)g(of)g(historical)0 5032 y(in)m(terest.)42
-b(Note,)31 b(AST)e(also)h(supp)s(orts)e(the)h(alternativ)m(e)j
-(\\STC-S")d(linear)h(string)g(description)f(of)h(the)g(STC)0
-5145 y(mo)s(del)g(\(see)i Fu(x)p FF(19\).)0 5306 y(STC-X)19
-b(V1.20)j(is)f(do)s(cumen)m(ted)f(at)41 b(h)m(ttp://www.iv)m(oa.net/Do)
-s(cumen)m(ts/WD/STC/STC-200502)q(25)q(.h)m(tml,)0 5419
-y(and)23 b(the)h(curren)m(t)f(v)m(ersion)h(is)f(do)s(cumen)m(ted)g(at)
-48 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m(ts/latest/STC-X.h)m(tml.)0
-5580 y(When)38 b(an)f(STC-X)g(do)s(cumen)m(t)h(is)g(read)f(using)g(an)h
-(XmlChan,)h(the)f(read)g(op)s(eration)g(pro)s(duces)f(an)g(AST)0
-5693 y(Ob)5 b(ject)25 b(of)g(the)g(Stc)g(class,)i(whic)m(h)e(is)g
-(itself)h(a)f(sub)s(class)f(of)h(Region.)40 b(Sp)s(eci\014cally)-8
-b(,)27 b(eac)m(h)f(suc)m(h)f(Ob)5 b(ject)25 b(will)g(b)s(e)p
-eop end
-%%Page: 165 175
-TeXDict begin 165 174 bop 0 52 a Fy(18.1)93 b(Reading)30
-b(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)h(XML)e(\(STC-X\))h
-(Descriptions)658 b FF(165)0 351 y(an)29 b(instance)h(of)g(StcSearc)m
-(hLo)s(cation,)i(StcResourcePro\014le,)e(StcCatalogEn)m(tryLo)s(cation)
-j(or)d(StcObsDat-)0 464 y(aLo)s(cation.)49 b(See)32 b(the)h
-(description)g(of)f(the)h(XmlChan)f(class)h(and)f(the)g(XmlF)-8
-b(ormat)34 b(attribute)g(for)e(further)0 577 y(details.)p
-eop end
-%%Page: 166 176
-TeXDict begin 166 175 bop 0 52 a FF(166)1399 b Fy(18)92
-b(STORING)29 b(AST)h(OBJECTS)f(AS)h(XML)g(\(XMLCHAN\))p
-eop end
-%%Page: 167 177
-TeXDict begin 167 176 bop 3643 52 a FF(167)0 351 y Fz(19)135
-b(Reading)46 b(and)f(writing)g(STC-S)f(descriptions)i(\(StcsChans\))0
-604 y FF(The)22 b(StcsChan)f(class)i(pro)m(vides)g(facilities)h(for)e
-(reading)h(and)e(writing)i(IV)m(O)m(A)g(\\STC-S")e(descriptions.)38
-b(STC-)0 717 y(S)22 b(\(see)46 b(h)m(ttp://www.iv)m(oa.net/Do)s(cumen)m
-(ts/latest/)q(STC-S.h)m(tml\))28 b(is)23 b(a)g(linear)g(string)g(syn)m
-(tax)g(that)g(allo)m(ws)0 830 y(simple)42 b(sp)s(eci\014cation)g(of)g
-(the)g(STC)f(metadata)j(describing)d(a)h(region)h(in)e(an)h
-(astronomical)i(co)s(ordinate)0 943 y(system.)82 b(AST)43
-b(supp)s(orts)f(a)j(subset)e(of)h(the)g(STC-S)f(sp)s(eci\014cation,)48
-b(allo)m(wing)e(an)e(STC-S)e(description)0 1056 y(of)35
-b(a)h(region)g(within)f(an)g(AST-supp)s(orted)e(astronomical)k(co)s
-(ordinate)f(system)g(to)g(b)s(e)e(con)m(v)m(erted)j(in)m(to)g(an)0
-1169 y(equiv)-5 b(alen)m(t)29 b(AST)d(Region)i(ob)5 b(ject,)29
-b(and)d(vice-v)m(ersa.)42 b(F)-8 b(or)28 b(further)e(details,)j(see)f
-(the)f(full)g(description)g(of)g(the)0 1281 y(StcsChan)j(class)h(in)f
-(App)s(endix)e(D.)p eop end
-%%Page: 168 178
-TeXDict begin 168 177 bop 0 52 a FF(168)652 b Fy(19)92
-b(READING)31 b(AND)g(WRITING)g(STC-S)e(DESCRIPTIONS)f(\(STCSCHANS\))p
-eop end
-%%Page: 169 179
-TeXDict begin 169 178 bop 3643 52 a FF(169)0 351 y Fz(20)135
-b(Creating)46 b(Y)-11 b(our)44 b(Own)h(Priv)-7 b(ate)46
-b(Mappings)e(\(In)l(traMaps\))0 614 y Fw(20.1)112 b(The)38
-b(Need)g(for)f(Extensibilit)m(y)0 843 y FF(Ho)m(w)m(ev)m(er)28
-b(man)m(y)d(Mapping)h(classes)h(are)f(pro)m(vided)f(b)m(y)g(AST,)h(so)s
-(oner)f(or)h(later)g(y)m(ou)g(will)g(w)m(an)m(t)h(to)f(transform)0
-956 y(co)s(ordinates)34 b(in)f(some)h(w)m(a)m(y)g(that)g(has)f(not)h(b)
-s(een)e(foreseen.)50 b(Y)-8 b(ou)34 b(migh)m(t)g(w)m(an)m(t)h(to)f
-(plot)f(a)h(graph)f(in)g(some)0 1069 y(no)m(v)m(el)g(curvilinear)e(co)s
-(ordinate)h(system)f(\(p)s(erhaps)f(y)m(ou)h(already)h(ha)m(v)m(e)g(a)g
-(W)m(CS)f(system)g(in)g(y)m(our)g(soft)m(w)m(are)0 1182
-y(and)g(just)g(w)m(an)m(t)i(to)f(use)f(AST)g(for)h(its)g(graphical)g
-(capabilities\).)47 b(Alternativ)m(ely)-8 b(,)35 b(y)m(ou)d(migh)m(t)g
-(need)f(to)i(cali-)0 1295 y(brate)24 b(a)h(complex)g(dataset)g(\(lik)m
-(e)h(an)e(ob)5 b(jectiv)m(e)26 b(prism)d(plate\))i(where)e(eac)m(h)j(p)
-s(osition)e(m)m(ust)g(b)s(e)f(con)m(v)m(erted)j(to)0
-1408 y(w)m(orld)f(co)s(ordinates)g(with)g(reference)g(to)h(calibration)
-g(data)g(under)d(the)i(con)m(trol)h(of)f(an)g(elab)s(orate)h
-(algorithm.)0 1575 y(In)35 b(suc)m(h)h(cases,)j(it)d(is)g(clear)h(that)
-g(the)f(basic)g(pre-formed)g(comp)s(onen)m(ts)g(pro)m(vided)f(b)m(y)h
-(AST)g(for)f(building)0 1688 y(Mappings)30 b(are)h(just)e(not)i
-(enough.)40 b(What)31 b(y)m(ou)g(need)f(is)g(access)i(to)e(a)h
-(programming)f(language.)42 b(Ho)m(w)m(ev)m(er,)0 1801
-y(if)33 b(y)m(ou)f(write)h(y)m(our)g(o)m(wn)f(soft)m(w)m(are)i(to)g
-(transform)e(co)s(ordinate)h(v)-5 b(alues,)34 b(then)e(it)h(m)m(ust)g
-(b)s(e)e(made)i(a)m(v)-5 b(ailable)0 1914 y(in)42 b(the)h(form)f(of)h
-(an)f(AST)g(class)h(\(from)f(whic)m(h)h(y)m(ou)g(can)f(create)i(Ob)5
-b(jects\))43 b(b)s(efore)f(it)h(can)g(b)s(e)f(used)g(in)0
-2027 y(conjunction)30 b(with)g(other)h(AST)f(facilities.)0
-2194 y(A)m(t)39 b(this)f(p)s(oin)m(t)g(y)m(ou)g(migh)m(t)h(consider)f
-(writing)g(y)m(our)g(o)m(wn)g(AST)f(class,)k(but)c(this)h(is)g(not)h
-(recommended.)0 2307 y(Not)29 b(only)g(w)m(ould)f(the)h(in)m(ternal)g
-(con)m(v)m(en)m(tions)h(used)e(b)m(y)g(AST)g(tak)m(e)i(some)f(time)g
-(to)g(master,)g(but)f(y)m(ou)h(migh)m(t)0 2420 y(also)j(\014nd)d(y)m
-(ourself)i(ha)m(ving)h(to)f(c)m(hange)h(y)m(our)f(soft)m(w)m(are)h
-(whenev)m(er)f(a)g(new)g(v)m(ersion)g(of)g(AST)f(w)m(as)h(released.)0
-2533 y(F)-8 b(ortunately)g(,)33 b(there)d(is)h(a)f(m)m(uc)m(h)h(easier)
-g(route)g(pro)m(vided)f(b)m(y)g(the)h(In)m(traMap)f(class.)0
-2843 y Fw(20.2)112 b(The)38 b(In)m(traMap)g(Mo)s(del)0
-3071 y FF(T)-8 b(o)35 b(allo)m(w)h(y)m(ou)f(to)g(write)g(y)m(our)f(o)m
-(wn)h(Mappings,)h(AST)d(pro)m(vides)i(a)g(sp)s(ecial)g(kind)f(of)g
-(Mapping)h(called)h(an)0 3184 y(In)m(traMap.)k(An)26
-b(In)m(traMap)h(is)g(a)g(sort)g(of)g(\\wrapp)s(er")f(for)g(a)h(co)s
-(ordinate)h(transformation)f(function)f(written)0 3297
-y(in)34 b(C.)g(Y)-8 b(ou)34 b(write)g(this)g(function)g(y)m(ourself)g
-(and)g(then)f(register)i(it)g(with)e(AST.)h(This,)g(in)g(e\013ect,)j
-(creates)e(a)0 3410 y(new)23 b(class)h(from)f(whic)m(h)g(y)m(ou)h(can)g
-(create)h(Mappings)e(\()p Fx(i.e.)g FF(In)m(traMaps\))h(whic)m(h)f
-(will)h(transform)f(co)s(ordinates)0 3523 y(in)30 b(whatev)m(er)h(w)m
-(a)m(y)h(y)m(our)e(transformation)h(function)f(sp)s(eci\014es.)0
-3691 y(Because)38 b(In)m(traMaps)e(are)h(Mappings,)h(they)e(ma)m(y)h(b)
-s(e)f(used)f(in)h(the)h(same)f(w)m(a)m(y)i(as)e(an)m(y)h(other)f
-(Mapping.)0 3803 y(F)-8 b(or)29 b(instance,)h(they)f(ma)m(y)g(b)s(e)f
-(com)m(bined)h(in)f(series)h(or)g(parallel)h(with)e(other)h(Mappings)f
-(using)g(a)h(CmpMap)0 3916 y(\()p Fu(x)p FF(6\),)36 b(they)d(ma)m(y)h
-(b)s(e)e(in)m(v)m(erted)i(\()p Fu(x)p FF(5.5\),)i(y)m(ou)e(ma)m(y)f
-(enquire)g(ab)s(out)g(their)g(attributes)h(\()p Fu(x)p
-FF(4.5\),)i(they)d(ma)m(y)h(b)s(e)0 4029 y(inserted)26
-b(in)m(to)i(F)-8 b(rameSets)27 b(\()p Fu(x)p FF(13\),)j
-Fx(etc.)39 b FF(They)25 b(do,)j(ho)m(w)m(ev)m(er,)h(ha)m(v)m(e)e(some)g
-(imp)s(ortan)m(t)g(limitations)h(of)f(whic)m(h)0 4142
-y(y)m(ou)k(should)e(b)s(e)h(a)m(w)m(are)i(b)s(efore)e(w)m(e)g(go)i(on)e
-(to)h(consider)f(ho)m(w)h(to)g(create)h(them.)0 4452
-y Fw(20.3)112 b(Limitations)39 b(of)f(In)m(traMaps)0
-4680 y FF(By)c(no)m(w,)g(y)m(ou)g(migh)m(t)g(b)s(e)f(w)m(ondering)g(wh)
-m(y)g(an)m(y)h(other)g(kind)e(of)i(Mapping)f(is)h(required)f(at)h(all.)
-51 b(After)33 b(all,)0 4793 y(wh)m(y)41 b(not)g(simply)g(write)h(y)m
-(our)f(o)m(wn)g(co)s(ordinate)h(transformation)g(functions)f(in)g(C,)g
-(wrap)f(them)i(up)e(in)0 4906 y(In)m(traMaps)31 b(and)e(do)i(a)m(w)m(a)
-m(y)h(with)e(all)h(the)g(other)g(Mapping)f(classes)h(in)f(AST?)0
-5074 y(The)h(reason)h(is)g(not)g(to)s(o)h(hard)d(to)j(\014nd.)43
-b(An)m(y)32 b(transformation)g(function)g(y)m(ou)g(write)g(is)g
-(created)h(solely)g(b)m(y)0 5187 y(y)m(ou,)e(so)g(it)g(is)f(a)h(priv)-5
-b(ate)31 b(extension)g(whic)m(h)f(do)s(es)g(not)h(form)f(a)g(p)s
-(ermanen)m(t)g(part)g(of)h(AST.)f(If)g(y)m(ou)h(use)f(it)h(to)0
-5300 y(calibrate)d(some)g(data)f(and)f(then)h(pass)f(that)i(data)f(to)h
-(someone)f(else,)i(who)d(has)h(only)g(the)g(standard)f(v)m(ersion)0
-5413 y(of)31 b(AST,)e(then)i(they)f(will)h(not)f(b)s(e)g(able)h(to)g
-(in)m(terpret)g(it.)0 5580 y(Th)m(us,)38 b(while)g(an)f(In)m(traMap)h
-(is)f(\014ne)g(for)g(use)g(b)m(y)g(y)m(ou)h(and)f(y)m(our)g(collab)s
-(orators)i(\(who)e(w)m(e)h(assume)f(ha)m(v)m(e)0 5693
-y(access)h(to)g(the)f(same)g(transformation)g(functions\),)i(it)e(do)s
-(es)g(not)g(address)f(the)h(need)f(for)h(univ)m(ersal)g(data)p
-eop end
-%%Page: 170 180
-TeXDict begin 170 179 bop 0 52 a FF(170)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FF(exc)m(hange)g(lik)m(e)f(other)g
-(AST)f(Mappings)g(do.)40 b(This)27 b(is)h(where)g(the)h(\\In)m(tra")g
-(in)f(the)h(class)g(name)f(\\In)m(traMap")0 464 y(comes)j(from,)f
-(implying)h(priv)-5 b(ate)30 b(or)h(in)m(ternal)g(usage.)0
-626 y(F)-8 b(or)34 b(this)g(reason,)g(it)g(is)g(un)m(wise)f(to)h(store)
-g(In)m(traMaps)g(in)f(datasets,)i(unless)e(they)h(will)g(b)s(e)e(used)h
-(solely)i(for)0 739 y(comm)m(unication)25 b(b)s(et)m(w)m(een)f(collab)s
-(orating)i(items)e(of)f(soft)m(w)m(are)i(whic)m(h)f(share)f(con)m(v)m
-(en)m(tions)j(ab)s(out)d(their)h(use.)0 852 y(A)39 b(priv)-5
-b(ate)39 b(database)h(describing)e(co)s(ordinate)i(systems)e(on)h(a)g
-(graphics)g(device)h(migh)m(t)f(b)s(e)f(an)h(example)0
-965 y(where)i(In)m(traMaps)i(w)m(ould)e(b)s(e)g(suitable,)46
-b(b)s(ecause)c(the)g(data)g(w)m(ould)g(probably)f(nev)m(er)h(b)s(e)f
-(accessed)j(b)m(y)0 1078 y(an)m(y)m(one)i(else's)f(soft)m(w)m(are.)85
-b(Restricting)46 b(In)m(traMap)f(usage)g(to)g(within)f(a)h(single)g
-(program)f(\()p Fx(i.e.)83 b FF(nev)m(er)0 1191 y(writing)30
-b(it)h(out\))g(is,)g(of)f(course,)h(completely)h(safe.)0
-1353 y(If,)25 b(b)m(y)g(acciden)m(t,)i(an)d(In)m(traMap)h(should)e
-(happ)s(en)g(to)i(escap)s(e)g(as)g(part)f(of)g(a)h(dataset,)i(then)d
-(the)h(unsusp)s(ecting)0 1466 y(recipien)m(t)f(is)f(lik)m(ely)i(to)f
-(receiv)m(e)h(an)e(error)f(message)j(when)d(they)h(attempt)h(to)g(read)
-f(the)g(data.)39 b(Ho)m(w)m(ev)m(er,)27 b(AST)0 1579
-y(will)e(asso)s(ciate)j(details)e(of)f(the)g(In)m(traMap's)h
-(transformation)f(function)g(and)g(its)g(author)g(\(if)h(pro)m(vided\))
-f(with)0 1692 y(the)30 b(data,)h(so)f(that)g(the)g(recipien)m(t)h(can)f
-(mak)m(e)h(an)f(in)m(telligen)m(t)i(enquiry)d(to)i(obtain)f(the)g
-(necessary)g(soft)m(w)m(are)0 1805 y(if)g(this)h(pro)m(v)m(es)g(essen)m
-(tial.)0 2097 y Fw(20.4)112 b(W)-9 b(riting)37 b(a)h(T)-9
-b(ransformation)39 b(F)-9 b(unction)0 2318 y FF(The)27
-b(\014rst)f(stage)j(in)d(creating)j(an)e(In)m(traMap)h(is)f(to)h(write)
-f(the)g(co)s(ordinate)h(transformation)g(function.)39
-b(This)0 2431 y(should)e(ha)m(v)m(e)i(a)f(calling)i(in)m(terface)f(lik)
-m(e)h(the)e(astT)-8 b(ranP)38 b(function)g(pro)m(vided)f(b)m(y)h(AST)f
-(\()p Fx(q.v.)p FF(\).)64 b(Here)38 b(is)g(a)0 2544 y(simple)29
-b(example)h(of)f(a)h(suitable)f(transformation)h(function)f(whic)m(h)g
-(transforms)f(co)s(ordinates)i(b)m(y)f(squaring)0 2657
-y(them:)227 2903 y Ft(#include)41 b("ast.h")227 3003
-y(#include)g(<math.h>)227 3202 y(void)h(SqrTran\()e(AstMapping)g
-(*this,)h(int)h(npoint,)f(int)h(ncoord_in,)837 3302 y(const)g(double)f
-(*ptr_in[],)f(int)i(forward,)e(int)j(ncoord_out,)837
-3402 y(double)f(*ptr_out[])d(\))k({)358 3501 y(int)f(point,)f(coord;)
-358 3601 y(double)g(x;)227 3800 y(/*)i(Forward)e(transformation.)c(*/)
-358 3900 y(if)43 b(\()g(forward)e(\))i({)489 3999 y(for)f(\()h(point)f
-(=)h(0;)g(point)e(<)i(npoint;)e(point++)g(\))i({)620
-4099 y(for)f(\()h(coord)f(=)h(0;)g(coord)e(<)i(ncoord_in;)d(coord++)g
-(\))k({)750 4199 y(x)f(=)h(ptr_in[)c(coord)i(][)h(point)e(];)750
-4298 y(ptr_out[)g(coord)g(][)i(point)e(])j(=)f(\()g(x)g(==)g(AST__BAD)d
-(\))j(?)g(AST__BAD)e(:)i(x)g(*)g(x;)620 4398 y(})489
-4497 y(})227 4697 y(/*)g(Inverse)e(transformation.)c(*/)358
-4796 y(})43 b(else)f({)489 4896 y(for)g(\()h(point)f(=)h(0;)g(point)e
-(<)i(npoint;)e(point++)g(\))i({)620 4996 y(for)f(\()h(coord)f(=)h(0;)g
-(coord)e(<)i(ncoord_in;)d(coord++)g(\))k({)750 5095 y(x)f(=)h(ptr_in[)c
-(coord)i(][)h(point)e(];)750 5195 y(ptr_out[)g(coord)g(][)i(point)e(])j
-(=)881 5295 y(\()f(x)g(<)h(0.0)e(||)h(x)g(==)g(AST__BAD)d(\))j(?)g
-(AST__BAD)e(:)i(sqrt\()e(x)i(\);)620 5394 y(})489 5494
-y(})358 5593 y(})227 5693 y(})p eop end
-%%Page: 171 181
-TeXDict begin 171 180 bop 0 52 a Fy(20.5)93 b(Registering)31
-b(a)g(T)-8 b(ransformation)30 b(F)-8 b(unction)1847 b
-FF(171)0 351 y(As)31 b(y)m(ou)g(can)h(see,)g(the)f(function)g(comes)h
-(in)e(t)m(w)m(o)j(halv)m(es)f(whic)m(h)f(implemen)m(t)g(the)g(forw)m
-(ard)g(and)f(in)m(v)m(erse)i(co-)0 464 y(ordinate)c(transformations.)40
-b(The)28 b(n)m(um)m(b)s(er)f(of)h(p)s(oin)m(ts)f(to)i(b)s(e)e
-(transformed)g(\(\\np)s(oin)m(t"\))i(and)f(the)g(n)m(um)m(b)s(ers)0
-577 y(of)36 b(input)e(and)h(output)g(co)s(ordinates)h(p)s(er)e(p)s(oin)
-m(t)i(\(\\nco)s(ord)p Fq(_)p FF(in")f(and)g(\\nco)s(ord)p
-Fq(_)p FF(out"|in)g(this)h(case)g(b)s(oth)0 690 y(are)31
-b(assumed)g(equal\))h(are)f(passed)g(to)g(the)h(function.)42
-b(A)31 b(pair)g(of)g(lo)s(ops)g(then)g(accesses)h(all)g(the)g(co)s
-(ordinate)0 803 y(v)-5 b(alues.)55 b(Note)37 b(that)e(it)h(is)f
-(legitimate)j(to)e(omit)g(one)f(or)g(other)h(of)f(the)g(forw)m(ard/in)m
-(v)m(erse)h(transformations)0 916 y(and)31 b(simply)g(not)h(to)g
-(implemen)m(t)g(it,)h(if)e(it)h(will)g(not)g(b)s(e)f(required.)43
-b(It)32 b(is)f(also)i(p)s(ermissible)d(to)j(require)e(that)0
-1029 y(the)37 b(n)m(um)m(b)s(ers)e(of)i(input)e(and)h(output)h(co)s
-(ordinates)g(b)s(e)f(\014xed)g(\()p Fx(e.g.)g FF(at)h(2\),)i(or)e(to)g
-(write)g(the)g(function)f(so)0 1142 y(that)31 b(it)g(can)g(handle)e
-(arbitrary)i(dimensionalit)m(y)-8 b(,)32 b(as)e(here.)0
-1301 y(Before)e(using)f(an)g(incoming)g(co)s(ordinate,)i(the)e
-(function)g(m)m(ust)g(\014rst)f(c)m(hec)m(k)j(that)e(it)h(is)f(not)g
-(set)h(to)g(the)f(v)-5 b(alue)0 1414 y(AST)p Fq(__)p
-FF(BAD,)29 b(whic)m(h)f(indicates)i(missing)e(data)i(\()p
-Fu(x)p FF(5.8\).)42 b(If)28 b(it)i(is,)f(the)g(same)g(v)-5
-b(alue)29 b(is)g(also)h(assigned)f(to)g(an)m(y)0 1527
-y(a\013ected)j(output)e(co)s(ordinates.)41 b(The)30 b(v)-5
-b(alue)31 b(AST)p Fq(__)p FF(BAD)f(is)g(also)i(generated)f(if)f(an)m(y)
-h(co)s(ordinates)g(cannot)0 1640 y(b)s(e)k(transformed.)55
-b(In)35 b(this)h(example,)h(this)f(can)g(happ)s(en)d(with)j(the)f(in)m
-(v)m(erse)i(transformation)f(if)f(negativ)m(e)0 1753
-y(v)-5 b(alues)31 b(are)f(encoun)m(tered,)i(so)e(that)h(the)g(square)f
-(ro)s(ot)h(cannot)f(b)s(e)g(tak)m(en.)0 1913 y(There)i(are)h(v)m(ery)g
-(few)g(restrictions)g(on)g(what)g(a)g(co)s(ordinate)g(transformation)g
-(function)g(ma)m(y)g(do.)47 b(F)-8 b(or)34 b(ex-)0 2026
-y(ample,)d(it)g(ma)m(y)g(freely)f(p)s(erform)f(I/O)i(to)g(access)g(an)m
-(y)g(external)g(data)g(needed,)g(it)f(ma)m(y)h(in)m(v)m(ok)m(e)i(other)
-d(AST)0 2139 y(facilities)d(\(but)d(b)s(ew)m(are)h(of)g(un)m(w)m(an)m
-(ted)g(recursion\),)h Fx(etc.)38 b FF(T)m(ypically)-8
-b(,)28 b(y)m(ou)d(ma)m(y)g(also)h(w)m(an)m(t)g(to)f(pass)f(informa-)0
-2252 y(tion)32 b(to)h(it)f Fx(via)g FF(global)h(v)-5
-b(ariables.)46 b(Remem)m(b)s(er,)32 b(ho)m(w)m(ev)m(er,)h(that)g
-(whatev)m(er)f(facilities)i(the)e(transformation)0 2365
-y(function)e(requires)g(m)m(ust)g(b)s(e)g(a)m(v)-5 b(ailable)33
-b(in)d(ev)m(ery)h(program)f(whic)m(h)g(uses)g(it.)0 2525
-y(Generally)-8 b(,)32 b(it)f(is)f(not)g(a)h(go)s(o)s(d)f(idea)g(to)h
-(retain)g(con)m(text)h(information)e(within)g(a)g(transformation)h
-(function.)0 2637 y(That)39 b(is,)i(it)f(should)e(transform)g(eac)m(h)j
-(set)e(of)g(co)s(ordinates)h(as)f(a)h(single)g(p)s(oin)m(t)f(and)f
-(retain)i(no)f(memory)0 2750 y(of)34 b(the)g(p)s(oin)m(ts)g(it)h(has)f
-(transformed)f(b)s(efore.)51 b(This)34 b(is)g(in)f(order)h(to)h
-(conform)f(with)f(the)i(AST)e(mo)s(del)h(of)g(a)0 2863
-y(Mapping.)0 3023 y(If)42 b(an)f(error)h(o)s(ccurs)g(within)f(a)h
-(transformation)h(function,)i(it)d(should)f(use)h(the)g(astSetStatus)h
-(function)0 3136 y(\()p Fu(x)p FF(4.15\))d(to)f(set)f(the)f(AST)g
-(status)h(to)g(an)g(error)f(v)-5 b(alue)38 b(b)s(efore)f(returning.)62
-b(This)37 b(will)h(alert)g(AST)f(to)h(the)0 3249 y(error,)33
-b(causing)f(it)h(to)g(ab)s(ort)f(the)g(curren)m(t)g(op)s(eration.)47
-b(The)32 b(error)g(v)-5 b(alue)32 b(AST)p Fq(__)p FF(ITFER)f(is)h(a)m
-(v)-5 b(ailable)35 b(for)0 3362 y(this)e(purp)s(ose,)f(but)g(other)h(v)
--5 b(alues)34 b(ma)m(y)f(also)h(b)s(e)e(used)g(\()p Fx(e.g.)h
-FF(if)g(y)m(ou)g(wish)f(to)i(distinguish)e(di\013eren)m(t)h(t)m(yp)s
-(es)0 3475 y(of)e(error\).)0 3764 y Fw(20.5)112 b(Registering)38
-b(a)g(T)-9 b(ransformation)38 b(F)-9 b(unction)0 3982
-y FF(Ha)m(ving)25 b(written)f(y)m(our)f(co)s(ordinate)i(transformation)
-f(function,)h(the)e(next)h(step)g(is)g(to)g(register)g(it)h(with)e
-(AST.)0 4095 y(Registration)32 b(is)f(p)s(erformed)d(using)i(astIn)m
-(traReg,)j(as)d(follo)m(ws:)227 4333 y Ft(void)42 b(SqrTran\()e
-(AstMapping)g(*,)j(int,)f(int,)g(const)f(double)g(*[],)h(int,)g(int,)g
-(double)f(*[])h(\);)227 4532 y(const)g(char)g(*author,)e(*contact,)g
-(*purpose;)227 4731 y(...)227 4931 y(purpose)h(=)i("Square)e(each)h
-(coordinate)d(value";)227 5030 y(author)i(=)87 b("R.F.)42
-b(Warren-Smith)c(&)43 b(D.S.)f(Berry";)227 5130 y(contact)f(=)i
-("http://www.starl)o(in)o(k.)o(rl.)o(ac)o(.uk)o(/c)o(gi)o(-bi)o(n/)o
-(htx)o(se)o(rve)o(r/)o(su)o(n21)o(1.)o(htx)o(/?)o(xr)o(ef_)o(Sq)o(rTr)o
-(an)o(";)227 5329 y(astIntraReg\()c("SqrTran",)g(2,)k(2,)g(SqrTran,)d
-(0,)j(purpose,)d(author,)h(contact)g(\);)0 5580 y FF(Note)30
-b(that)g(y)m(ou)g(should)e(also)i(pro)m(vide)f(a)g(function)g(protot)m
-(yp)s(e)h(to)g(describ)s(e)e(the)h(transformation)h(function)0
-5693 y(\(the)h(implemen)m(tation)h(of)e(the)h(function)f(itself)h(w)m
-(ould)f(su\016ce,)h(of)f(course\).)p eop end
-%%Page: 172 182
-TeXDict begin 172 181 bop 0 52 a FF(172)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FF(The)22 b(\014rst)g(argumen)m(t)h
-(to)g(astIn)m(traReg)i(is)d(a)h(name)g(b)m(y)f(whic)m(h)h(the)g
-(transformation)f(function)h(will)g(b)s(e)f(kno)m(wn.)0
-464 y(This)34 b(will)h(b)s(e)g(used)f(when)g(w)m(e)h(come)h(to)f
-(create)i(an)e(In)m(traMap)g(and)f(is)h(case)h(sensitiv)m(e.)56
-b(W)-8 b(e)36 b(recommend)0 577 y(that)28 b(y)m(ou)g(use)g(the)f
-(actual)i(function)f(name)f(here)h(and)f(mak)m(e)h(this)g(su\016cien)m
-(tly)g(un)m(usual)f(that)h(it)g(is)g(unlik)m(ely)0 690
-y(to)j(clash)g(with)f(an)m(y)h(other)f(functions)g(in)g(most)h(p)s
-(eople's)f(soft)m(w)m(are.)0 853 y(The)i(next)h(t)m(w)m(o)h(argumen)m
-(ts)f(sp)s(ecify)f(the)h(n)m(um)m(b)s(er)e(of)i(input)f(and)g(output)g
-(co)s(ordinates)h(whic)m(h)g(the)f(trans-)0 965 y(formation)43
-b(function)g(will)g(handle.)77 b(These)43 b(corresp)s(ond)e(with)i(the)
-g(Nin)g(and)f(Nout)h(attributes)g(of)g(the)0 1078 y(In)m(traMap)c(w)m
-(e)h(will)f(create.)69 b(Here,)42 b(w)m(e)d(ha)m(v)m(e)h(set)g(them)f
-(b)s(oth)f(to)i(2,)i(whic)m(h)d(means)g(that)g(w)m(e)h(will)f(only)0
-1191 y(b)s(e)c(able)h(to)g(create)h(In)m(traMaps)e(with)h(2)f(input)g
-(and)g(2)g(output)g(co)s(ordinates)h(\(despite)g(the)g(fact)g(that)g
-(the)0 1304 y(transformation)g(function)f(can)h(actually)h(handle)e
-(other)h(dimensionalities\).)58 b(W)-8 b(e)36 b(will)g(see)g(later)h
-(\()p Fu(x)p FF(20.8\))0 1417 y(ho)m(w)30 b(to)i(remo)m(v)m(e)f(this)g
-(restriction.)0 1580 y(The)j(fourth)g(argumen)m(t)i(should)e(con)m
-(tain)i(a)f(set)g(of)h(\015ags)f(whic)m(h)f(describ)s(e)g(the)i
-(transformation)f(function)0 1693 y(in)f(a)i(little)g(more)f(detail.)55
-b(W)-8 b(e)36 b(will)g(return)d(to)j(this)f(shortly)f(\()p
-Fu(x)p FF(20.7)j(&)e Fu(x)p FF(20.10\).)57 b(F)-8 b(or)35
-b(no)m(w,)h(w)m(e)g(supply)d(a)0 1805 y(v)-5 b(alue)31
-b(of)f(zero.)0 1968 y(The)37 b(remaining)i(argumen)m(ts)f(are)g(c)m
-(haracter)i(strings)e(whic)m(h)f(do)s(cumen)m(t)h(the)g(transformation)
-h(function,)0 2081 y(mainly)f(for)f(the)h(b)s(ene\014t)f(of)h(an)m(y)m
-(one)g(who)g(is)f(unfortunate)g(enough)h(to)g(encoun)m(ter)g(a)g
-(reference)g(to)h(it)f(in)0 2194 y(their)c(data)h(whic)m(h)e(they)h
-(cannot)h(in)m(terpret.)52 b(As)34 b(explained)g(ab)s(o)m(v)m(e)h(\()p
-Fu(x)p FF(20.3\),)j(y)m(ou)c(should)f(try)h(and)f(a)m(v)m(oid)0
-2307 y(this,)e(but)e(acciden)m(ts)j(will)f(happ)s(en,)e(so)h(y)m(ou)h
-(should)f(alw)m(a)m(ys)h(pro)m(vide)g(strings)f(con)m(taining)i(the)f
-(follo)m(wing:)111 2568 y(1.)46 b(A)31 b(short)f(description)g(of)h
-(what)f(the)h(transformation)f(function)g(is)h(for.)111
-2756 y(2.)46 b(The)30 b(name)h(of)f(the)h(author.)111
-2943 y(3.)46 b(Con)m(tact)32 b(details,)g(suc)m(h)e(as)h(an)f(e-mail)i
-(or)e(WWW)h(address.)0 3205 y(The)h(idea)i(is)f(that)g(an)m(y)m(one)h
-(\014nding)e(an)h(In)m(traMap)g(in)g(their)g(data,)h(but)f(lac)m(king)h
-(the)f(necessary)h(transfor-)0 3318 y(mation)f(function,)f(should)f(b)s
-(e)h(able)g(to)h(con)m(tact)h(the)f(author)e(and)h(mak)m(e)h(a)f
-(sensible)g(enquiry)f(in)h(order)g(to)0 3430 y(obtain)j(it.)55
-b(If)35 b(y)m(ou)g(exp)s(ect)g(man)m(y)g(enquiries,)h(y)m(ou)f(ma)m(y)h
-(lik)m(e)g(to)f(set)h(up)e(a)h(W)-8 b(orld)35 b(Wide)h(W)-8
-b(eb)35 b(page)h(and)0 3543 y(use)c(that)i(instead)f(\(in)g(the)g
-(example)g(ab)s(o)m(v)m(e,)i(w)m(e)e(use)f(the)h(WWW)h(address)e(of)h
-(the)g(relev)-5 b(an)m(t)34 b(part)f(of)g(this)0 3656
-y(do)s(cumen)m(t\).)0 3949 y Fw(20.6)112 b(Creating)38
-b(an)g(In)m(traMap)0 4170 y FF(Once)30 b(a)h(transformation)g(function)
-f(has)g(b)s(een)g(registered,)h(creating)h(an)e(In)m(traMap)h(from)f
-(it)h(is)f(simple:)227 4419 y Ft(AstIntraMap)39 b(*intramap;)227
-4618 y(...)227 4817 y(intramap)i(=)i(astIntraMap\()38
-b("SqrTran",)i(2,)j(2,)f("")h(\);)0 5079 y FF(W)-8 b(e)28
-b(simply)d(use)i(the)f(astIn)m(traMap)i(constructor)e(function)g(and)g
-(pass)g(it)h(the)g(name)f(of)h(the)f(transformation)0
-5192 y(function)h(to)g(use.)39 b(This)27 b(name)g(is)f(the)i(same)f
-(\(case)h(sensitiv)m(e\))h(one)e(that)g(w)m(e)h(asso)s(ciated)g(with)f
-(the)g(function)0 5305 y(when)i(w)m(e)i(registered)g(it)g(using)f
-(astIn)m(traReg)i(\()p Fu(x)p FF(20.5\).)0 5467 y(Y)-8
-b(ou)28 b(can,)h(of)f(course,)h(register)f(an)m(y)g(n)m(um)m(b)s(er)f
-(of)h(transformation)g(functions)f(and)g(select)j(whic)m(h)d(one)h(to)h
-(use)0 5580 y(whenev)m(er)k(y)m(ou)g(create)h(an)e(In)m(traMap.)48
-b(Y)-8 b(ou)34 b(can)f(also)g(create)h(an)m(y)f(n)m(um)m(b)s(er)f(of)h
-(indep)s(enden)m(t)e(In)m(traMaps)0 5693 y(using)40 b(eac)m(h)h
-(transformation)g(function.)70 b(In)39 b(this)h(sense,)j(eac)m(h)f
-(transformation)e(function)g(y)m(ou)h(register)p eop
-end
-%%Page: 173 183
-TeXDict begin 173 182 bop 0 52 a Fy(20.7)93 b(Restricted)31
-b(Implemen)m(tations)g(of)g(T)-8 b(ransformation)30 b(F)-8
-b(unctions)1131 b FF(173)0 351 y(e\013ectiv)m(ely)37
-b(creates)e(a)f(new)f(\\sub-class")i(of)f(In)m(traMap,)h(from)e(whic)m
-(h)h(y)m(ou)g(can)g(create)h(Ob)5 b(jects)34 b(just)f(lik)m(e)0
-464 y(an)m(y)i(other)g(class.)53 b(Ho)m(w)m(ev)m(er,)38
-b(an)d(error)f(will)g(o)s(ccur)h(if)f(y)m(ou)h(attempt)h(to)f(use)f(a)h
-(transformation)g(function)0 577 y(that)c(has)f(not)h(y)m(et)g(b)s(een)
-f(registered.)0 736 y(The)j(second)h(and)f(third)g(argumen)m(ts)h(to)g
-(astIn)m(traMap)h(are)f(the)g(n)m(um)m(b)s(ers)e(of)i(input)f(and)g
-(output)g(co)s(ordi-)0 849 y(nates.)40 b(These)26 b(de\014ne)f(the)i
-(Nin)f(and)g(Nout)h(attributes)f(for)h(the)f(In)m(traMap)h(that)g(is)f
-(created)h(and)f(they)h(m)m(ust)0 962 y(matc)m(h)k(the)g(corresp)s
-(onding)e(n)m(um)m(b)s(ers)g(giv)m(en)i(when)f(the)g(transformation)h
-(function)f(w)m(as)h(registered.)0 1121 y(The)f(\014nal)h(argumen)m(t)g
-(is)f(the)h(usual)f(attribute)i(initialisation)h(string.)42
-b(Y)-8 b(ou)31 b(ma)m(y)g(set)g(attribute)h(v)-5 b(alues)31
-b(for)0 1234 y(an)f(In)m(traMap)h(in)f(exactly)i(the)f(same)g(w)m(a)m
-(y)g(as)g(for)f(an)m(y)g(other)h(Mapping)f(\()p Fu(x)p
-FF(4.6,)j(and)d(also)h(see)g Fu(x)p FF(20.9\).)0 1522
-y Fw(20.7)112 b(Restricted)37 b(Implemen)m(tations)i(of)f(T)-9
-b(ransformation)38 b(F)-9 b(unctions)0 1739 y FF(Y)h(ou)29
-b(ma)m(y)f(not)h(alw)m(a)m(ys)h(w)m(an)m(t)f(to)g(use)f(b)s(oth)f(the)h
-(forw)m(ard)g(and)g(in)m(v)m(erse)h(transformations)f(when)f(y)m(ou)i
-(create)0 1852 y(an)41 b(In)m(traMap,)k(so)c(it)h(is)f(p)s(ossible)g
-(to)h(omit)g(either)g(from)e(the)i(underlying)e(co)s(ordinate)i
-(transformation)0 1965 y(function.)e(Consider)30 b(the)h(follo)m(wing,)
-h(for)e(example:)227 2200 y Ft(void)42 b(Poly3Tran\()e(AstMapping)f
-(*this,)i(int)i(npoint,)d(int)j(ncoord_in,)925 2299 y(const)e(double)g
-(*ptr_in[],)f(int)i(forward,)e(int)j(ncoord_out,)925
-2399 y(double)e(*ptr_out[])e(\))k({)358 2499 y(double)e(x;)358
-2598 y(int)h(point;)227 2797 y(/*)h(Forward)e(transformation.)c(*/)358
-2897 y(for)42 b(\()i(point)d(=)i(0;)g(point)f(<)h(npoint;)d(point++)h
-(\))i({)489 2997 y(x)g(=)g(ptr_in[)e(0)i(][)g(point)e(];)489
-3096 y(ptr_out[)f(0)j(][)g(point)f(])h(=)g(\()g(x)g(==)g(AST__BAD)d(\))
-j(?)h(AST__BAD)c(:)620 3196 y(6.18)h(+)j(x)f(*)g(\()g(0.12)f(+)h(x)g(*)
-h(\()f(-0.003)e(+)i(x)g(*)g(0.0000101)d(\))j(\);)358
-3296 y(})227 3395 y(})0 3643 y FF(This)h(implemen)m(ts)h(a)h
-(1-dimensional)g(cubic)e(p)s(olynomial)i(transformation.)84
-b(Since)45 b(this)g(is)g(somewhat)0 3756 y(a)m(wkw)m(ard)e(to)g(in)m(v)
-m(ert,)k(ho)m(w)m(ev)m(er,)h(w)m(e)43 b(ha)m(v)m(e)h(only)f(implemen)m
-(ted)g(the)g(forw)m(ard)f(transformation.)78 b(When)0
-3869 y(registering)31 b(the)g(function,)f(this)h(is)f(indicated)h(via)g
-(the)g(\\\015ags")g(argumen)m(t)g(to)g(astIn)m(traReg,)h(as)f(follo)m
-(ws:)227 4103 y Ft(void)42 b(Poly3Tran\()e(AstMapping)f(*,)k(int,)f
-(int,)g(const)f(double)g(*[],)h(int,)g(int,)g(double)f(*[])i(\);)227
-4302 y(...)227 4501 y(astIntraReg\()c("Poly3Tran",)g(1,)j(1,)h
-(Poly3Tran,)c(AST__NOINV,)794 4601 y(purpose,)h(author,)h(contact)g
-(\);)0 4849 y FF(Here,)30 b(the)f(\014fth)f(argumen)m(t)h(has)f(b)s
-(een)g(set)i(to)f(the)g(\015ag)g(v)-5 b(alue)30 b(AST)p
-Fq(__)p FF(NOINV)d(to)j(indicate)f(the)g(lac)m(k)i(of)e(an)0
-4962 y(in)m(v)m(erse.)42 b(If)29 b(the)h(forw)m(ard)g(transformation)g
-(w)m(ere)h(absen)m(t,)g(w)m(e)f(w)m(ould)g(use)g(AST)p
-Fq(__)p FF(NOF)m(OR)f(instead.)41 b(Flag)0 5075 y(v)-5
-b(alues)31 b(for)f(this)g(argumen)m(t)h(ma)m(y)g(b)s(e)f(com)m(bined)g
-(using)g(a)h(bit)m(wise)g(OR)f(if)g(necessary)-8 b(.)0
-5362 y Fw(20.8)112 b(V)-9 b(ariable)38 b(Num)m(b)s(ers)g(of)g(Co)s
-(ordinates)0 5580 y FF(In)g(our)f(earlier)i(examples,)i(w)m(e)e(ha)m(v)
-m(e)h(used)d(a)i(\014xed)e(n)m(um)m(b)s(er)g(of)i(input)e(and)h(output)
-f(co)s(ordinates)i(when)0 5693 y(registering)33 b(a)f(co)s(ordinate)h
-(transformation)f(function.)45 b(It)32 b(is)g(not)g(necessary)g(to)h
-(imp)s(ose)e(this)h(restriction,)p eop end
-%%Page: 174 184
-TeXDict begin 174 183 bop 0 52 a FF(174)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))0 351 y FF(ho)m(w)m(ev)m(er,)f(if)e(the)f
-(transformation)h(function)g(can)g(cop)s(e)f(with)h(a)g(v)-5
-b(ariable)27 b(n)m(um)m(b)s(er)e(of)i(co)s(ordinates)h(\(as)f(with)0
-464 y(the)k(example)g(in)g Fu(x)p FF(20.4\).)44 b(W)-8
-b(e)32 b(indicate)f(the)g(acceptabilit)m(y)j(of)d(a)g(v)-5
-b(ariable)31 b(n)m(um)m(b)s(er)f(when)f(registering)j(the)0
-577 y(transformation)40 b(function)g(b)m(y)f(supplying)g(the)h(v)-5
-b(alue)40 b(AST)p Fq(__)p FF(ANY)f(for)h(the)g(n)m(um)m(b)s(er)f(of)h
-(input)f(and/or)0 690 y(output)30 b(co)s(ordinates,)h(as)g(follo)m(ws:)
-227 943 y Ft(astIntraReg\()39 b("SqrTran",)g(AST__ANY,)h(AST__ANY,)g
-(SqrTran,)g(0,)794 1043 y(purpose,)g(author,)h(contact)g(\);)0
-1310 y FF(The)h(result)g(is)g(that)h(an)f(In)m(traMap)h(ma)m(y)f(no)m
-(w)h(b)s(e)e(created)i(with)f(an)m(y)h(n)m(um)m(b)s(er)e(of)h(input)f
-(and)h(output)0 1423 y(co)s(ordinates.)f(F)-8 b(or)32
-b(example:)227 1676 y Ft(AstIntraMap)39 b(*intramap1,)g(*intramap2;)227
-1875 y(...)227 2074 y(intramap1)h(=)j(astIntraMap\()c("SqrTran",)g(1,)k
-(1,)g("")g(\);)227 2174 y(intramap2)d(=)j(astIntraMap\()c("SqrTran",)g
-(3,)k(3,)g("Invert=1")c(\);)0 2441 y FF(It)33 b(is)f(p)s(ossible)g(to)h
-(\014x)f(either)h(the)g(n)m(um)m(b)s(er)e(of)i(input)e(or)i(output)f
-(co)s(ordinates)h(\(b)m(y)g(supplying)e(an)h(explicit)0
-2554 y(n)m(um)m(b)s(er)39 b(to)i(astIn)m(traReg\),)k(but)40
-b(more)g(subtle)g(restrictions)h(on)g(the)f(n)m(um)m(b)s(er)f(of)h(co)s
-(ordinates,)k(suc)m(h)c(as)0 2666 y(requiring)30 b(that)h(Nin)f(and)g
-(Nout)h(b)s(e)e(equal,)j(are)e(not)h(supp)s(orted.)39
-b(This)29 b(means)i(that:)227 2920 y Ft(intramap)41 b(=)i
-(astIntraMap\()38 b("SqrTran",)i(1,)j(2,)f("")h(\);)0
-3186 y FF(will)d(b)s(e)f(accepted)i(without)f(error,)i(although)f(the)e
-(transformation)i(function)e(cannot)i(actually)g(handle)0
-3299 y(suc)m(h)32 b(a)g(com)m(bination)h(sensibly)-8
-b(.)46 b(If)31 b(this)h(is)g(imp)s(ortan)m(t,)h(it)f(w)m(ould)g(b)s(e)f
-(w)m(orth)h(adding)g(a)g(c)m(hec)m(k)i(within)d(the)0
-3412 y(transformation)g(function)f(itself,)h(so)g(that)g(the)f(error)g
-(w)m(ould)g(b)s(e)g(detected)i(when)d(it)i(came)g(to)h(b)s(e)d(used.)0
-3710 y Fw(20.9)112 b(Adapting)38 b(a)g(T)-9 b(ransformation)39
-b(F)-9 b(unction)38 b(to)f(Individual)i(In)m(traMaps)0
-3934 y FF(In)g(the)i(examples)f(giv)m(en)i(so)e(far,)j(our)c(co)s
-(ordinate)i(transformation)g(functions)e(ha)m(v)m(e)j(not)e(made)g(use)
-g(of)0 4047 y(the)33 b(\\this")g(p)s(oin)m(ter)f(passed)g(to)h(them)f
-(\(whic)m(h)g(iden)m(ti\014es)h(the)g(In)m(traMap)g(whose)f
-(transformation)g(w)m(e)h(are)0 4160 y(implemen)m(ting\).)68
-b(In)38 b(practice,)43 b(this)c(will)g(often)h(b)s(e)e(the)i(case.)67
-b(Ho)m(w)m(ev)m(er,)44 b(the)39 b(presence)g(of)g(the)h(\\this")0
-4273 y(p)s(oin)m(ter)31 b(allo)m(ws)h(the)f(transformation)h(function)e
-(to)i(in)m(v)m(ok)m(e)h(an)m(y)e(other)g(AST)f(function)h(on)g(the)g
-(In)m(traMap,)0 4386 y(and)37 b(this)g(p)s(ermits)f(enquiries)h(ab)s
-(out)f(its)i(attributes.)61 b(The)37 b(transformation)h(function's)e(b)
-s(eha)m(viour)h(can)0 4498 y(therefore)e(b)s(e)f(mo)s(di\014ed)g
-(according)i(to)f(an)m(y)g(attribute)h(v)-5 b(alues)35
-b(whic)m(h)f(are)i(set.)54 b(This)34 b(turns)f(out)i(to)h(b)s(e)e(a)0
-4611 y(useful)d(thing)h(to)g(do,)h(so)f(eac)m(h)g(In)m(traMap)h(has)e
-(a)h(sp)s(ecial)h(In)m(traFlag)g(attribute)g(reserv)m(ed)f(for)f
-(exactly)j(this)0 4724 y(purp)s(ose.)0 4888 y(Consider,)h(for)g
-(instance,)i(the)d(case)i(where)f(the)f(transformation)i(function)e
-(has)g(access)j(to)e(sev)m(eral)h(alter-)0 5001 y(nativ)m(e)d(sets)g
-(of)f(in)m(ternally-stored)i(data)f(whic)m(h)f(it)g(ma)m(y)h(apply)f
-(to)h(p)s(erform)d(its)j(transformation.)46 b(Rather)0
-5114 y(than)25 b(implemen)m(t)h(man)m(y)f(di\013eren)m(t)g(v)m(ersions)
-h(of)f(the)g(transformation)h(function,)g(y)m(ou)g(ma)m(y)f(switc)m(h)h
-(b)s(et)m(w)m(een)0 5227 y(them)h(b)m(y)f(setting)i(a)f(v)-5
-b(alue)27 b(for)f(the)h(In)m(traFlag)h(attribute)g(when)d(y)m(ou)i
-(create)i(an)d(instance)h(of)g(an)g(In)m(traMap,)0 5340
-y(for)j(example:)227 5593 y Ft(intramap1)40 b(=)j(astIntraMap\()c
-("MyTran",)h(2,)j(2,)f("IntraFlag=A")d(\);)227 5693 y(intramap2)h(=)j
-(astIntraMap\()c("MyTran",)h(2,)j(2,)f("IntraFlag=B")d(\);)p
-eop end
-%%Page: 175 185
-TeXDict begin 175 184 bop 0 52 a Fy(20.10)93 b(Simplifying)30
-b(In)m(traMaps)2453 b FF(175)0 351 y(The)40 b(transformation)h
-(function)f(ma)m(y)h(then)f(enquire)g(the)h(v)-5 b(alue)41
-b(of)g(the)f(In)m(traFlag)i(attribute)g(\()p Fx(e.g.)e
-FF(us-)0 464 y(ing)c(astGetC)h(and)e(passing)g(it)i(the)f(\\this")g(p)s
-(oin)m(ter\))g(and)f(use)h(whic)m(hev)m(er)g(dataset)h(is)f(required)e
-(for)i(that)0 577 y(particular)31 b(In)m(traMap.)0 736
-y(This)d(approac)m(h)h(is)f(particularly)h(useful)f(when)g(the)h(n)m
-(um)m(b)s(er)e(of)i(p)s(ossible)f(transformations)h(is)f(un)m(b)s
-(ounded)0 849 y(or)j(not)g(kno)m(wn)g(in)g(adv)-5 b(ance,)32
-b(in)e(whic)m(h)h(case)h(the)g(In)m(traFlag)g(attribute)g(ma)m(y)g(b)s
-(e)e(used)g(to)i(hold)f(n)m(umerical)0 962 y(v)-5 b(alues)33
-b(enco)s(ded)f(as)h(part)f(of)h(a)g(c)m(haracter)h(string)f
-(\(e\013ectiv)m(ely)j(using)c(them)g(as)h(data)g(for)g(the)f(In)m
-(traMap\).)0 1075 y(It)41 b(is)f(also)i(sup)s(erior)d(to)j(the)e(use)h
-(of)g(a)g(global)g(switc)m(h)h(for)e(comm)m(unication)i(\()p
-Fx(e.g.)e FF(setting)i(an)f(index)f(to)0 1188 y(select)29
-b(the)f(\\curren)m(t")g(data)g(b)s(efore)f(using)g(the)h(In)m
-(traMap\),)h(b)s(ecause)e(it)h(con)m(tin)m(ues)h(to)f(w)m(ork)g(when)e
-(sev)m(eral)0 1301 y(In)m(traMaps)35 b(are)g(em)m(b)s(edded)e(within)h
-(a)h(more)f(complex)h(comp)s(ound)e(Mapping,)j(when)d(y)m(ou)i(ma)m(y)g
-(ha)m(v)m(e)h(no)0 1414 y(con)m(trol)c(o)m(v)m(er)g(the)e(order)g(in)g
-(whic)m(h)g(they)h(are)f(used.)0 1701 y Fw(20.10)112
-b(Simplifying)40 b(In)m(traMaps)0 1919 y FF(A)28 b(notable)h(disadv)-5
-b(an)m(tage)29 b(of)f(In)m(traMaps)g(is)g(that)g(they)g(are)h(\\blac)m
-(k)g(b)s(o)m(xes")f(as)g(far)g(as)g(AST)f(is)h(concerned.)0
-2032 y(This)44 b(means)g(that)h(they)f(ha)m(v)m(e)i(limited)f(abilit)m
-(y)h(to)f(participate)h(in)e(the)g(simpli\014cation)h(of)g(comp)s(ound)
-0 2145 y(Mappings)33 b(p)s(erformed,)g Fx(e.g.)p FF(,)g(b)m(y)g
-(astSimplify)h(\()p Fu(x)p FF(6.7\),)i(b)s(ecause)d(AST)g(cannot)h(kno)
-m(w)f(ho)m(w)g(they)h(in)m(teract)0 2258 y(with)25 b(other)g(Mappings.)
-39 b(In)24 b(realit)m(y)-8 b(,)29 b(of)c(course,)i(they)e(will)h(often)
-f(implemen)m(t)h(suc)m(h)f(sp)s(ecialised)h(co)s(ordinate)0
-2371 y(transformations)31 b(that)g(the)f(simpli\014cation)h(p)s
-(ossibilities)g(will)g(b)s(e)f(rather)g(limited)h(an)m(yw)m(a)m(y)-8
-b(.)0 2530 y(One)25 b(imp)s(ortan)m(t)h(simpli\014cation,)h(ho)m(w)m
-(ev)m(er,)h(is)e(the)f(abilit)m(y)i(of)f(a)g(Mapping)f(to)h(cancel)h
-(with)e(its)h(o)m(wn)g(in)m(v)m(erse)0 2643 y(to)k(yield)g(a)g(unit)f
-(Mapping)g(\(a)i(UnitMap\).)41 b(This)29 b(is)g(imp)s(ortan)m(t)h(b)s
-(ecause)f(Mappings)h(are)g(frequen)m(tly)f(used)0 2756
-y(to)c(relate)h(a)f(dataset)g(to)h(some)e(external)i(standard)d(\(a)i
-(celestial)i(co)s(ordinate)f(system,)g(for)e(example\).)40
-b(When)0 2869 y(in)m(ter-relating)26 b(t)m(w)m(o)f(similar)f(datasets)h
-(calibrated)g(using)f(the)g(same)g(standard,)h(part)e(of)h(the)g
-(Mapping)g(often)0 2982 y(cancels,)29 b(b)s(ecause)d(it)h(is)f(applied)
-g(\014rst)g(in)g(one)g(direction)h(and)f(then)g(the)h(other,)g
-(e\013ectiv)m(ely)j(eliminating)d(the)0 3094 y(reference)h(to)g(the)f
-(standard.)39 b(This)26 b(is)i(often)f(a)h(useful)e(simpli\014cation)i
-(and)f(can)h(lead)f(to)h(greater)h(e\016ciency)-8 b(.)0
-3254 y(Man)m(y)23 b(transformations)f(ha)m(v)m(e)i(this)e(prop)s(ert)m
-(y)g(of)g(cancelling)i(with)e(their)g(o)m(wn)h(in)m(v)m(erse,)i(but)c
-(not)i(necessarily)0 3366 y(all.)42 b(Consider)29 b(the)i(follo)m(wing)
-h(transformation)e(function,)h(for)f(example:)227 3601
-y Ft(void)42 b(MaxTran\()e(AstMapping)g(*this,)h(int)h(npoint,)f(int)h
-(ncoord_in,)837 3700 y(const)g(double)f(*ptr_in[],)f(int)i(forward,)e
-(int)j(ncoord_out,)837 3800 y(double)f(*ptr_out[])d(\))k({)358
-3900 y(double)e(hi,)h(x;)358 3999 y(int)g(coord,)f(point;)227
-4199 y(/*)i(Forward)e(transformation.)c(*/)358 4298 y(if)43
-b(\()g(forward)e(\))i({)489 4398 y(for)f(\()h(point)f(=)h(0;)g(point)e
-(<)i(npoint;)e(point++)g(\))i({)620 4497 y(hi)f(=)h(AST__BAD;)620
-4597 y(for)f(\()h(coord)f(=)h(0;)g(coord)e(<)i(ncoord_in;)d(coord++)g
-(\))k({)750 4697 y(x)f(=)h(ptr_in[)c(coord)i(][)h(point)e(];)750
-4796 y(if)i(\()g(x)g(!=)g(AST__BAD)d(\))k({)881 4896
-y(if)f(\()g(x)g(>)g(hi)g(||)g(hi)g(==)f(AST__BAD)f(\))i(hi)g(=)g(x;)750
-4996 y(})620 5095 y(})620 5195 y(ptr_out[)d(0)j(][)g(point)e(])i(=)h
-(hi;)489 5295 y(})227 5494 y(/*)f(Inverse)e(transformation.)c(*/)358
-5593 y(})43 b(else)f({)489 5693 y(for)g(\()h(coord)f(=)h(0;)g(coord)e
-(<)i(ncoord_out;)c(coord++)i(\))i({)p eop end
-%%Page: 176 186
-TeXDict begin 176 185 bop 0 52 a FF(176)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))620 351 y Ft(for)42 b(\()h(point)f(=)h(0;)g
-(point)e(<)i(npoint;)e(point++)g(\))i({)750 451 y(ptr_out[)e(coord)g
-(][)i(point)e(])j(=)f(ptr_in[)d(0)k(][)e(point)g(];)620
-551 y(})489 650 y(})358 750 y(})227 849 y(})0 1090 y
-FF(This)d(function)g(tak)m(es)h(an)m(y)g(n)m(um)m(b)s(er)e(of)i(input)e
-(co)s(ordinates)i(and)f(returns)f(a)i(single)g(output)f(co)s(ordinate)0
-1202 y(whic)m(h)30 b(is)g(the)h(maxim)m(um)f(v)-5 b(alue)30
-b(of)h(the)f(input)f(co)s(ordinates.)42 b(Its)30 b(in)m(v)m(erse)h
-(\(actually)h(a)f(\\pseudo-in)m(v)m(erse"\))0 1315 y(sets)g(all)g(the)g
-(input)e(co)s(ordinates)i(to)g(the)g(v)-5 b(alue)31 b(of)f(the)h
-(output)f(co)s(ordinate.)2688 1282 y Fv(31)0 1473 y FF(If)e(this)h
-(function)f(is)h(applied)f(in)h(the)f(forw)m(ard)h(direction)g(and)f
-(then)g(in)h(the)g(in)m(v)m(erse)g(direction,)h(it)f(do)s(es)g
-FD(not)0 1585 y FF(in)38 b(general)h(restore)f(the)h(original)g(co)s
-(ordinate)g(v)-5 b(alues.)64 b(Ho)m(w)m(ev)m(er,)42 b(if)c(applied)g
-(in)g(the)g(in)m(v)m(erse)h(direction)0 1698 y(and)d(then)g(the)h(forw)
-m(ard)f(direction,)j(it)e(do)s(es.)59 b(Hence,)40 b(replacing)d(the)g
-(sequence)g(of)f(op)s(erations)h(with)g(an)0 1811 y(equiv)-5
-b(alen)m(t)32 b(UnitMap)f(is)f(p)s(ossible)g(in)g(the)h(latter)g(case,)
-h(but)e(not)g(in)g(the)h(former.)0 1968 y(T)-8 b(o)22
-b(distinguish)e(these)i(p)s(ossibilities,)i(t)m(w)m(o)e(\015ag)g(v)-5
-b(alues)21 b(are)h(pro)m(vided)f(for)g(use)g(with)g(astIn)m(traReg)h
-(to)g(indicate)0 2081 y(what)45 b(simpli\014cation)h(\(if)g(an)m(y\))g
-(is)f(p)s(ossible.)86 b(F)-8 b(or)46 b(example,)k(to)c(register)g(the)g
-(ab)s(o)m(v)m(e)g(transformation)0 2194 y(function,)30
-b(w)m(e)h(migh)m(t)g(use:)227 2421 y Ft(void)42 b(MaxTran\()e
-(AstMapping)g(*,)j(int,)f(int,)g(const)f(double)g(*[],)h(int,)g(int,)g
-(double)f(*[])h(\);)227 2620 y(...)227 2820 y(astIntraReg\()d
-("MaxTran",)g(AST__ANY,)h(1,)j(MaxTran,)d(AST__SIMPIF,)794
-2919 y(purpose,)g(author,)h(contact)g(\);)0 3159 y FF(Here,)30
-b(the)f(\015ag)g(v)-5 b(alue)30 b(AST)p Fq(__)p FF(SIMPIF)d(supplied)g
-(for)i(the)g(\014fth)f(argumen)m(t)h(indicates)h(that)g
-(simpli\014cation)0 3272 y(is)44 b(p)s(ossible)g(if)h(the)f
-(transformation)h(is)g(applied)f(in)g(the)h(in)m(v)m(erse)g(direction)g
-(follo)m(w)m(ed)h(b)m(y)e(the)h(forw)m(ard)0 3385 y(direction.)f(T)-8
-b(o)32 b(indicate)g(the)g(complemen)m(tary)g(case,)h(the)e(\015ag)h
-(AST)p Fq(__)p FF(SIMPFI)e(w)m(ould)h(b)s(e)f(used)h(instead.)0
-3498 y(If)h(b)s(oth)g(simpli\014cations)h(are)f(p)s(ossible)g(\(as)h
-(with)f(the)h(SqrT)-8 b(ran)31 b(function)h(in)g Fu(x)p
-FF(20.4\),)k(then)c(w)m(e)h(w)m(ould)f(use)0 3611 y(the)f(bit)m(wise)g
-(OR)f(of)g(b)s(oth)g(v)-5 b(alues.)0 3768 y(In)27 b(practice,)j(some)f
-(judgemen)m(t)f(is)g(usually)g(necessary)g(when)f(deciding)i(whether)e
-(to)i(allo)m(w)g(simpli\014cation.)0 3881 y(F)-8 b(or)26
-b(example,)h(seen)f(in)f(one)h(ligh)m(t)g(our)f(SqrT)-8
-b(ran)24 b(function)h(\()p Fu(x)p FF(20.4\))k(do)s(es)c(not)g(cancel)i
-(with)e(its)h(o)m(wn)f(in)m(v)m(erse,)0 3994 y(b)s(ecause)39
-b(squaring)g(a)h(co)s(ordinate)g(v)-5 b(alue)40 b(and)e(then)h(taking)i
-(its)e(square)g(ro)s(ot)h(can)f(c)m(hange)i(the)e(original)0
-4107 y(v)-5 b(alue,)36 b(if)d(this)h(w)m(as)h(negativ)m(e.)53
-b(Therefore,)35 b(replacing)g(this)e(com)m(bination)j(with)d(a)i
-(UnitMap)f(will)g(c)m(hange)0 4220 y(the)45 b(b)s(eha)m(viour)g(of)g(a)
-g(comp)s(ound)f(Mapping)g(and)h(should)f(not)h(b)s(e)f(allo)m(w)m(ed.)
-87 b(Seen)44 b(in)h(another)g(ligh)m(t,)0 4333 y(ho)m(w)m(ev)m(er,)33
-b(where)e(the)h(co)s(ordinates)g(b)s(eing)f(pro)s(cessed)g(are)g(in)m
-(trinsically)i(all)f(p)s(ositiv)m(e,)h(it)f(is)g(a)f(p)s(ermissible)0
-4446 y(and)f(probably)f(useful)h(simpli\014cation.)0
-4603 y(If)21 b(suc)m(h)h(distinctions)g(are)h(ev)m(er)f(imp)s(ortan)m
-(t)g(in)g(practice,)j(it)e(is)f(simple)f(to)i(register)g(the)f(same)g
-(transformation)0 4716 y(function)30 b(t)m(wice)i(with)e(di\013eren)m
-(t)g(\015ag)h(v)-5 b(alues)31 b(\(use)f(a)h(separate)g(name)f(for)g
-(eac)m(h\))i(and)e(then)g(use)g(whic)m(hev)m(er)0 4829
-y(is)g(appropriate)h(when)e(creating)j(an)e(In)m(traMap.)0
-5114 y Fw(20.11)112 b(W)-9 b(riting)37 b(and)h(Reading)h(In)m(traMaps)0
-5330 y FF(It)i(is)h(most)f(imp)s(ortan)m(t)g(to)h(realise)h(that)f
-(when)e(y)m(ou)h(write)h(an)f(In)m(traMap)g(to)h(a)g(Channel)e(\()p
-Fu(x)p FF(15.3\),)47 b(the)0 5443 y(transformation)31
-b(function)f(whic)m(h)h(it)g(uses)f(is)h(not)g(stored)g(with)f(it.)43
-b(T)-8 b(o)31 b(do)f(so)h(is)g(imp)s(ossible,)g(b)s(ecause)f(the)p
-0 5516 1512 4 v 73 5570 a Fs(31)138 5602 y Fr(Remem)n(b)r(er)18
-b(that)h(\\ptr)p Ff(_)p Fr(in")g(iden)n(ti\014es)f(the)g(original)i
-(\\output")f(co)r(ordinates)h(when)e(applying)g(the)g(in)n(v)n(erse)h
-(transformation)0 5693 y(and)25 b(\\ptr)p Ff(_)p Fr(out")h(iden)n
-(ti\014es)g(the)f(original)j(\\input")d(co)r(ordinates.)p
-eop end
-%%Page: 177 187
-TeXDict begin 177 186 bop 0 52 a Fy(20.12)93 b(Managing)32
-b(T)-8 b(ransformation)30 b(F)-8 b(unctions)31 b(in)f(Libraries)1408
-b FF(177)0 351 y(function)28 b(has)f(b)s(een)h(compiled)g(and)f(loaded)
-i(in)m(to)g(memory)f(ready)f(for)h(execution)h(b)s(efore)f(AST)f(gets)i
-(to)g(see)0 464 y(it.)41 b(Ho)m(w)m(ev)m(er,)32 b(AST)d(do)s(es)g
-(store)h(the)g(name)f(asso)s(ciated)i(with)f(the)f(transformation)h
-(function)g(and)e(v)-5 b(arious)0 577 y(details)31 b(ab)s(out)f(the)h
-(In)m(traMap)g(itself.)0 743 y(This)i(means)h(that)h(an)m(y)f(program)g
-(attempting)h(to)g(read)f(the)g(In)m(traMap)h(\()p Fu(x)p
-FF(15.4\))h(cannot)f(mak)m(e)g(use)f(of)g(it)0 856 y(unless)27
-b(it)h(also)g(has)f(indep)s(enden)m(t)f(access)j(to)f(the)f(original)i
-(transformation)e(function.)40 b(If)27 b(it)h(do)s(es)f(not)g(ha)m(v)m
-(e)0 969 y(access)40 b(to)g(this)f(function,)i(an)d(error)h(will)g(o)s
-(ccur)g(at)g(the)h(p)s(oin)m(t)e(where)h(the)g(In)m(traMap)g(is)g(read)
-g(and)f(the)0 1081 y(asso)s(ciated)g(error)f(message)h(will)f(direct)g
-(the)g(user)f(to)i(the)f(author)f(of)h(the)g(transformation)g(function)
-g(for)0 1194 y(more)31 b(information.)0 1360 y(Ho)m(w)m(ev)m(er,)39
-b(if)d(the)g(necessary)g(transformation)g(function)g(is)g(a)m(v)-5
-b(ailable,)40 b(and)35 b(has)g(b)s(een)g(registered)i(b)s(efore)0
-1473 y(the)30 b(read)g(op)s(eration)h(tak)m(es)h(place,)f(then)f(AST)f
-(is)i(able)f(to)h(re-create)h(the)f(original)g(In)m(traMap)g(and)e
-(will)i(do)0 1586 y(so.)63 b(Registration)40 b(of)e(the)g
-(transformation)g(function)g(m)m(ust,)h(of)f(course,)i(use)e(the)g
-(same)g(name)g(\(and,)i(in)0 1699 y(fact,)29 b(b)s(e)d(iden)m(tical)j
-(in)d(most)h(particulars\))h(as)f(w)m(as)g(used)f(in)h(the)g(original)h
-(program)f(whic)m(h)f(wrote)h(the)h(data.)0 1865 y(This)i(means)h(that)
-h(a)g(set)g(of)f(co-op)s(erating)i(programs)e(whic)m(h)f(all)j(ha)m(v)m
-(e)f(access)g(to)g(the)g(same)f(set)h(of)f(trans-)0 1977
-y(formation)i(functions)f(and)g(register)i(them)e(in)g(iden)m(tical)j
-(fashion)d(\(see)i Fu(x)p FF(20.12)h(for)d(ho)m(w)h(this)f(can)h(b)s
-(est)f(b)s(e)0 2090 y(ac)m(hiev)m(ed\))j(can)e(freely)g(exc)m(hange)i
-(data)e(that)h(con)m(tain)g(In)m(traMaps.)49 b(The)32
-b(need)h(to)g(a)m(v)m(oid)i(exp)s(orting)e(suc)m(h)0
-2203 y(data)e(to)g(unsusp)s(ecting)e(third)h(parties)g(\()p
-Fu(x)p FF(20.3\))j(m)m(ust,)e(ho)m(w)m(ev)m(er,)h(b)s(e)e(re-iterated.)
-0 2506 y Fw(20.12)112 b(Managing)40 b(T)-9 b(ransformation)38
-b(F)-9 b(unctions)38 b(in)g(Libraries)0 2732 y FF(If)j(y)m(ou)i(are)f
-(dev)m(eloping)h(a)f(large)h(suite)f(of)g(data)h(reduction)f(soft)m(w)m
-(are,)k(y)m(ou)d(ma)m(y)f(ha)m(v)m(e)h(a)f(need)g(to)h(use)0
-2845 y(In)m(traMaps)27 b(at)f(v)-5 b(arious)27 b(p)s(oin)m(ts)f(within)
-f(it.)40 b(V)-8 b(ery)27 b(probably)f(this)g(will)g(o)s(ccur)g(in)g
-(unrelated)g(mo)s(dules)g(whic)m(h)0 2958 y(are)e(compiled)g
-(separately)h(and)e(then)g(stored)h(in)f(a)h(library)-8
-b(.)39 b(Since)23 b(the)h(transformation)g(functions)f(required)0
-3071 y(m)m(ust)34 b(b)s(e)g(registered)h(b)s(efore)f(they)g(can)h(b)s
-(e)e(used,)i(this)f(mak)m(es)h(it)g(di\016cult)f(to)h(decide)g(where)f
-(to)h(p)s(erform)0 3184 y(this)g(registration,)i(esp)s(ecially)g(since)
-e(an)m(y)g(particular)g(data)h(reduction)e(program)h(ma)m(y)g(use)g(an)
-g(arbitrary)0 3297 y(subset)30 b(of)g(the)h(mo)s(dules)e(in)i(y)m(our)f
-(library)-8 b(.)0 3462 y(T)g(o)32 b(assist)g(with)f(this)g(problem,)g
-(AST)f(allo)m(ws)j(y)m(ou)f(to)g(p)s(erform)d(the)j(same)g
-(registration)g(of)g(a)f(transforma-)0 3575 y(tion)36
-b(function)f(an)m(y)h(n)m(um)m(b)s(er)e(of)h(times,)j(so)e(long)g(as)f
-(it)h(is)g(p)s(erformed)d(using)i(an)h(iden)m(tical)h(in)m(v)m(o)s
-(cation)g(of)0 3688 y(astIn)m(traReg)f(on)d(eac)m(h)i(o)s(ccasion)h(\()
-p Fx(i.e.)d FF(all)i(of)f(its)g(argumen)m(ts)h(m)m(ust)f(b)s(e)f(iden)m
-(tical\).)53 b(This)33 b(means)h(y)m(ou)h(do)0 3801 y(not)e(ha)m(v)m(e)
-h(to)g(k)m(eep)f(trac)m(k)h(of)f(whether)f(a)i(particular)f(function)f
-(has)h(already)g(b)s(een)f(registered)i(but)e(could,)0
-3914 y(in)i(fact,)j(register)f(it)f(on)f(eac)m(h)i(o)s(ccasion)g
-(immediately)g(b)s(efore)e(it)h(is)f(required)g(\(wherev)m(er)h(that)g
-(ma)m(y)g(b)s(e\).)0 4027 y(In)26 b(order)h(that)h(all)g(registrations)
-g(are)g(iden)m(tical,)i(ho)m(w)m(ev)m(er,)f(it)f(is)f(recommended)g
-(that)g(y)m(ou)h(group)e(them)i(all)0 4140 y(together)k(in)m(to)f(a)g
-(single)g(function,)f(p)s(erhaps)f(as)i(follo)m(ws:)227
-4398 y Ft(void)42 b(MyTrans\()e(void)i(\))i({)358 4597
-y(...)358 4796 y(astIntraReg\()39 b("MaxTran",)g(AST__ANY,)h(1,)j
-(MaxTran,)d(AST__SIMPIF,)925 4896 y(purpose,)g(author,)h(contact)f(\);)
-358 5095 y(...)358 5295 y(astIntraReg\()f("Poly3Tran",)f(1,)43
-b(1,)g(Poly3Tran,)c(AST__NOINV,)925 5394 y(purpose,)h(author,)h
-(contact)f(\);)358 5593 y(...)p eop end
-%%Page: 178 188
-TeXDict begin 178 187 bop 0 52 a FF(178)772 b Fy(20)92
-b(CREA)-8 b(TING)30 b(YOUR)h(O)m(WN)g(PRIV)-10 b(A)i(TE)30
-b(MAPPINGS)g(\(INTRAMAPS\))358 351 y Ft(astIntraReg\()39
-b("SqrTran",)g(2,)k(2,)g(SqrTran,)d(0,)925 451 y(purpose,)g(author,)h
-(contact)f(\);)227 551 y(})0 813 y FF(Y)-8 b(ou)22 b(can)f(then)g
-(simply)g(in)m(v)m(ok)m(e)i(this)e(function)g(wherev)m(er)g(necessary)
--8 b(.)39 b(It)21 b(is,)i(in)e(fact,)k(particularly)c(imp)s(ortan)m(t)0
-926 y(to)j(register)g(all)g(relev)-5 b(an)m(t)24 b(transformation)g
-(functions)f(in)g(this)g(w)m(a)m(y)h(b)s(efore)f(y)m(ou)g(attempt)h(to)
-g(read)f(an)g(Ob)5 b(ject)0 1039 y(that)28 b(migh)m(t)g(b)s(e)f(\(or)h
-(con)m(tain\))h(an)e(In)m(traMap)h(\()p Fu(x)p FF(20.11\).)43
-b(This)26 b(is)i(b)s(ecause)f(y)m(ou)h(ma)m(y)g(not)f(kno)m(w)h(in)f
-(adv)-5 b(ance)0 1152 y(whic)m(h)31 b(of)g(these)h(transformation)g
-(functions)e(the)i(In)m(traMap)f(will)h(use,)f(so)h(they)f(m)m(ust)g
-(all)i(b)s(e)d(a)m(v)-5 b(ailable)34 b(in)0 1265 y(order)c(to)h(a)m(v)m
-(oid)h(an)e(error.)p eop end
-%%Page: 179 189
-TeXDict begin 179 188 bop 3643 52 a FF(179)0 351 y Fz(21)135
-b(Pro)t(ducing)44 b(Graphical)h(Output)g(\(Plots\))0
-605 y FF(Graphical)29 b(output)f(from)g(AST)f(is)i(p)s(erformed)d
-(though)i(an)g(Ob)5 b(ject)29 b(called)g(a)g(Plot,)h(whic)m(h)e(is)g(a)
-h(sp)s(ecialised)0 718 y(form)e(of)h(F)-8 b(rameSet.)41
-b(A)28 b(Plot)h(do)s(es)e(not)h(represen)m(t)g(the)g(graphical)g(con)m
-(ten)m(t)i(itself,)f(but)e(is)h(a)g(route)g(through)0
-831 y(whic)m(h)22 b(plotting)i(op)s(erations,)h(suc)m(h)d(as)h(dra)m
-(wing)f(lines)h(and)f(curv)m(es,)j(are)e(con)m(v)m(ey)m(ed)h(on)f(to)g
-(a)g(plotting)h(surface)0 944 y(to)31 b(app)s(ear)f(as)g(visible)h
-(graphics.)0 1239 y Fw(21.1)112 b(The)38 b(Plot)f(Mo)s(del)0
-1462 y FF(When)20 b(a)h(Plot)h(is)f(created,)j(it)d(is)g(initialised)g
-(b)m(y)g(pro)m(viding)g(a)g(F)-8 b(rameSet)21 b(whose)g(base)g(F)-8
-b(rame)21 b(\(as)h(sp)s(eci\014ed)e(b)m(y)0 1575 y(its)30
-b(Base)g(attribute\))g(is)g(mapp)s(ed)e(linearly)i(or)f
-(logarithmically)j(\(as)e(sp)s(eci\014ed)e(b)m(y)h(the)h(LogPlot)h
-(attribues\))0 1688 y(on)41 b(to)i(a)f Fx(plotting)i(ar)-5
-b(e)g(a.)75 b FF(This)41 b(is)g(a)h(rectangular)h(region)f(in)f(the)h
-(graphical)g(co)s(ordinate)h(space)f(of)f(the)0 1801
-y(underlying)35 b(graphics)i(system)g(and)e(b)s(ecomes)i(the)g(new)f
-(base)h(F)-8 b(rame)37 b(of)g(the)f(Plot.)60 b(In)36
-b(e\013ect,)k(the)d(Plot)0 1913 y(b)s(ecomes)32 b(attac)m(hed)h(to)g
-(the)f(plotting)h(surface,)f(in)f(rather)h(the)g(same)g(w)m(a)m(y)g
-(that)h(a)f(basic)g(F)-8 b(rameSet)33 b(migh)m(t)0 2026
-y(b)s(e)d(attac)m(hed)i(to)f(\(sa)m(y\))h(an)e(image.)0
-2190 y(The)23 b(curren)m(t)g(F)-8 b(rame)25 b(of)e(the)h(Plot)g
-(\(deriv)m(ed)g(from)f(the)h(curren)m(t)f(F)-8 b(rame)24
-b(of)g(the)g(F)-8 b(rameSet)24 b(supplied\))f(is)g(used)0
-2303 y(to)35 b(represen)m(t)f(a)h Fx(physic)-5 b(al)37
-b(c)-5 b(o)g(or)g(dinate)39 b(system.)53 b FF(This)33
-b(is)h(the)h(system)f(in)g(whic)m(h)f(plotting)j(op)s(erations)e(are)0
-2416 y(p)s(erformed)24 b(b)m(y)h(y)m(our)g(program.)39
-b(Ev)m(ery)25 b(plotting)h(op)s(eration)g(is)f(then)g(transformed)g
-(through)f(the)i(Mapping)0 2529 y(whic)m(h)e(in)m(ter-relates)i(the)e
-(Plot's)h(curren)m(t)f(and)g(base)g(F)-8 b(rames)25 b(in)f(order)f(to)i
-(app)s(ear)f(on)g(the)g(plotting)h(surface.)0 2692 y(An)39
-b(example)h(ma)m(y)g(help)f(here.)68 b(Supp)s(ose)37
-b(w)m(e)j(start)g(with)f(a)h(F)-8 b(rameSet)40 b(whose)f(base)h(F)-8
-b(rame)40 b(describ)s(es)0 2805 y(the)f(pixel)h(co)s(ordinates)f(of)h
-(an)e(image)j(and)d(whose)h(curren)m(t)g(F)-8 b(rame)40
-b(describ)s(es)e(a)i(celestial)h(\(equatorial\))0 2918
-y(co)s(ordinate)30 b(system.)40 b(Let)29 b(us)f(assume)h(that)g(these)h
-(t)m(w)m(o)g(F)-8 b(rames)29 b(are)h(in)m(ter-related)g(b)m(y)f(a)g
-(Mapping)g(within)0 3031 y(the)i(F)-8 b(rameSet)31 b(whic)m(h)f
-(represen)m(ts)h(a)f(particular)h(sky)f(pro)5 b(jection.)0
-3194 y(When)41 b(a)g(Plot)h(is)e(created)i(from)f(this)g(F)-8
-b(rameSet,)44 b(w)m(e)e(sp)s(ecify)e(ho)m(w)h(the)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)0 3307 y(F)-8 b(rame\))34 b(maps)e(on)h(to)g
-(the)g(plotting)h(surface.)48 b(This)32 b(simply)g(corresp)s(onds)g(to)
-h(telling)h(the)f(Plot)h(where)e(w)m(e)0 3420 y(ha)m(v)m(e)f
-(previously)e(plotted)h(the)f(image)i(data.)41 b(If)29
-b(w)m(e)g(no)m(w)h(use)f(the)g(Plot)h(to)g(plot)g(a)g(line)f(with)g
-(latitude)i(zero)0 3533 y(in)j(our)g(ph)m(ysical)h(co)s(ordinate)g
-(system,)g(as)g(giv)m(en)g(b)m(y)f(the)h(curren)m(t)f(F)-8
-b(rame,)36 b(this)e(line)h(w)m(ould)f(app)s(ear)g(as)g(a)0
-3646 y(curv)m(e)d(\(the)g(equator\))g(on)f(the)h(plotting)g(surface,)g
-(correctly)h(registered)f(with)f(the)g(image.)0 3809
-y(There)35 b(are)i(a)f(n)m(um)m(b)s(er)e(of)i(plotting)h(functions)e
-(pro)m(vided,)j(whic)m(h)d(all)i(w)m(ork)f(in)f(a)h(similar)h(w)m(a)m
-(y)-8 b(.)58 b(Plotting)0 3922 y(op)s(erations)31 b(are)g(transformed)f
-(through)g(the)h(Mapping)f(whic)m(h)h(the)g(Plot)g(represen)m(ts)g(b)s
-(efore)f(they)h(app)s(ear)0 4035 y(on)k(the)f(plotting)i(surface.)940
-4002 y Fv(32)1068 4035 y FF(It)f(is)g(p)s(ossible)f(to)h(dra)m(w)g(sym)
-m(b)s(ols,)g(lines,)h(axes,)h(en)m(tire)f(grids)e(and)g(more)h(in)0
-4148 y(this)30 b(w)m(a)m(y)-8 b(.)0 4443 y Fw(21.2)112
-b(Plotting)37 b(Sym)m(b)s(ols)0 4666 y FF(The)c(simplest)h(form)g(of)f
-(plotting)i(is)f(to)h(dra)m(w)e(sym)m(b)s(ols)g(\(termed)h
-Fx(markers)p FF(\))i(at)e(a)g(set)h(of)f(p)s(oin)m(ts.)50
-b(This)33 b(is)0 4779 y(p)s(erformed)h(b)m(y)h(astMark,)j(whic)m(h)e
-(is)f(supplied)f(with)i(a)g(set)g(of)f(ph)m(ysical)i(co)s(ordinates)f
-(at)g(whic)m(h)f(to)i(place)0 4892 y(the)31 b(mark)m(ers:)227
-5143 y Ft(#include)41 b("ast.h")227 5243 y(#define)g(NCOORD)g(2)227
-5342 y(#define)g(NMARK)g(10)227 5442 y(double)g(in[)i(NCOORD)e(][)i
-(NMARK)e(];)p 0 5516 1512 4 v 73 5570 a Fs(32)138 5602
-y Fr(Lik)n(e)28 b(an)n(y)g(F)-6 b(rameSet,)29 b(a)g(Plot)g(can)f(b)r(e)
-h(used)f(as)g(a)h(Mapping.)43 b(In)28 b(this)g(case)h(it)g(is)f(the)g
-(in)n(v)n(erse)h(transformation)h(whic)n(h)e(is)0 5693
-y(used)d(when)h(plotting)g(\()p Fg(i.e.)e Fr(that)i(whic)n(h)f
-(transforms)j(b)r(et)n(w)n(een)d(the)g(curren)n(t)g(and)h(base)g(F)-6
-b(rames\).)p eop end
-%%Page: 180 190
-TeXDict begin 180 189 bop 0 52 a FF(180)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))227
-351 y Ft(int)43 b(type;)227 551 y(...)227 750 y(astMark\()e(plot,)g
-(NMARK,)g(NCOORD,)g(NMARK,)g(in,)h(type)g(\);)0 1008
-y FF(Here,)g(NMARK)d(sp)s(eci\014es)g(ho)m(w)f(man)m(y)h(mark)m(ers)g
-(to)h(plot)g(and)e(NCOORD)g(sp)s(eci\014es)h(ho)m(w)g(man)m(y)g(co)s
-(or-)0 1121 y(dinates)f(are)f(b)s(eing)g(supplied)f(for)h(eac)m(h)h(p)s
-(oin)m(t.)1686 1088 y Fv(33)1823 1121 y FF(The)e(arra)m(y)i(\\in")g
-(supplies)e(the)i(co)s(ordinates)g(and)e(the)0 1233 y(in)m(teger)c(\\t)
-m(yp)s(e")f(sp)s(eci\014es)f(whic)m(h)g(t)m(yp)s(e)h(of)f(mark)m(er)h
-(to)g(plot.)0 1525 y Fw(21.3)112 b(Plotting)37 b(Geo)s(desic)h(Curv)m
-(es)0 1745 y FF(There)25 b(is)g(no)g(Plot)h(routine)f(to)h(dra)m(w)f(a)
-g(straigh)m(t)i(line,)g(b)s(ecause)e(an)m(y)g(straigh)m(t)i(line)e(in)g
-(ph)m(ysical)h(co)s(ordinates)0 1858 y(can)38 b(p)s(oten)m(tially)h
-(turn)d(in)m(to)i(a)g(curv)m(e)f(in)h(graphical)g(co)s(ordinates.)62
-b(W)-8 b(e)38 b(therefore)g(start)g(b)m(y)f(considering)0
-1971 y(ho)m(w)24 b(to)h(dra)m(w)f(geo)s(desic)h(curv)m(es.)39
-b(These)24 b(are)g(curv)m(es)h(whic)m(h)f(trace)h(the)f(path)g(of)h
-(shortest)f(distance)h(b)s(et)m(w)m(een)0 2084 y(t)m(w)m(o)32
-b(p)s(oin)m(ts)e(in)g(ph)m(ysical)h(co)s(ordinates)g(and)f(are)h(the)f
-(basic)h(dra)m(wing)f(elemen)m(t)i(in)e(a)h(Plot.)0 2246
-y(In)h(man)m(y)h(instances,)h(the)f(geo)s(desic)h(will,)g(in)e(fact,)i
-(b)s(e)f(a)g(straigh)m(t)h(line,)f(but)g(this)f(dep)s(ends)f(on)i(the)f
-(Plot's)0 2359 y(curren)m(t)i(F)-8 b(rame.)55 b(If)34
-b(this)h(represen)m(ts)g(a)g(celestial)i(co)s(ordinate)e(system,)i(for)
-d(instance,)j(it)e(will)g(b)s(e)f(a)h(great)0 2472 y(circle)i
-(\(corresp)s(onding)e(with)g(the)h(b)s(eha)m(viour)f(of)h(the)g
-(astDistance)i(function)d(whic)m(h)g(de\014nes)g(the)h(metric)0
-2585 y(of)i(the)g(ph)m(ysical)h(co)s(ordinate)f(space\).)64
-b(The)38 b(geo)s(desic)h(will,)h(of)e(course,)i(b)s(e)e(transformed)f
-(in)m(to)h(graphics)0 2697 y(co)s(ordinates)31 b(b)s(efore)f(b)s(eing)g
-(plotted.)41 b(A)31 b(geo)s(desic)h(curv)m(e)e(is)h(plotted)g(using)f
-(astCurv)m(e)g(as)h(follo)m(ws:)227 2942 y Ft(double)41
-b(start[)g(NCOORD)h(],)g(finish[)f(NCOORD)g(];)227 3141
-y(...)227 3341 y(astCurve\()f(plot,)i(start,)f(finish)g(\);)0
-3598 y FF(Here,)g(\\start")e(and)f(\\\014nish")g(are)g(arra)m(ys)h(con)
-m(taining)g(the)g(starting)g(and)e(\014nishing)g(co)s(ordinates)i(of)f
-(the)0 3711 y(curv)m(e.)i(The)28 b(astO\013set)h(and)f(astDistance)i
-(functions)e(can)h(often)f(b)s(e)g(useful)f(for)h(computing)h(these)g
-(\()p Fu(x)p FF(7.11\).)0 3873 y(If)34 b(y)m(ou)h(need)f(to)h(dra)m(w)f
-(a)g(series)h(of)g(curv)m(es)f(end-to-end)h(\(when)e(dra)m(wing)h(a)h
-(con)m(tour)g(line,)h(for)e(example\),)0 3986 y(then)23
-b(a)h(more)g(e\016cien)m(t)h(alternativ)m(e)h(is)e(to)g(use)g(astP)m
-(olyCurv)m(e.)39 b(This)23 b(has)g(the)h(same)g(e\013ect)h(as)f(a)g
-(sequence)g(of)0 4099 y(in)m(v)m(o)s(cations)g(of)e(astCurv)m(e,)j(but)
-c(allo)m(ws)i(y)m(ou)g(to)g(supply)d(a)j(whole)f(set)h(of)f(p)s(oin)m
-(ts)g(at)h(one)g(time.)38 b(astP)m(olyCurv)m(e)0 4212
-y(then)30 b(joins)g(them,)h(in)f(sequence,)h(using)f(geo)s(desic)h
-(curv)m(es:)227 4456 y Ft(#define)41 b(NPOINT)g(100)227
-4556 y(double)g(coords[)g(NCOORD)g(][)i(NPOINT)e(];)227
-4755 y(...)227 4954 y(astPolyCurve\()d(plot,)k(NPOINT,)f(NCOORD,)f
-(NPOINT,)h(coords)g(\);)0 5212 y FF(Here,)35 b(NPOINT)e(sp)s(eci\014es)
-g(ho)m(w)h(man)m(y)g(p)s(oin)m(ts)f(are)h(to)g(b)s(e)f(joined)h(and)e
-(NCOORD)i(sp)s(eci\014es)f(ho)m(w)g(man)m(y)0 5325 y(co)s(ordinates)i
-(are)h(b)s(eing)e(supplied)f(for)i(eac)m(h)h(p)s(oin)m(t.)53
-b(The)35 b(arra)m(y)g(\\co)s(ords")g(supplies)f(the)h(co)s(ordinates)g
-(of)0 5438 y(the)c(p)s(oin)m(ts)f(in)g(the)g(Plot's)i(ph)m(ysical)f(co)
-s(ordinate)g(system.)p 0 5516 1512 4 v 73 5570 a Fs(33)138
-5602 y Fr(Remem)n(b)r(er,)c(the)f(ph)n(ysical)h(co)r(ordinate)g(space)g
-(need)f(not)h(necessarily)h(b)r(e)e(2-dimensional,)i(ev)n(en)e(if)h
-(the)f(plotting)h(surface)0 5693 y(is.)p eop end
-%%Page: 181 191
-TeXDict begin 181 190 bop 0 52 a Fy(21.4)93 b(Plotting)31
-b(Curv)m(es)f(P)m(arallel)i(to)g(Axes)2096 b FF(181)0
-351 y Fw(21.4)112 b(Plotting)37 b(Curv)m(es)h(P)m(arallel)g(to)f(Axes)0
-578 y FF(As)31 b(there)g(is)h(no)f(Plot)h(function)f(to)g(dra)m(w)g(a)h
-(\\straigh)m(t)h(line",)f(dra)m(wing)f(axes)h(and)e(grid)h(lines)h(to)f
-(represen)m(t)0 691 y(co)s(ordinate)g(systems)g(requires)f(a)h(sligh)m
-(tly)g(di\013eren)m(t)g(approac)m(h.)42 b(The)30 b(problem)f(is)i(that)
-g(for)f(some)h(co)s(ordi-)0 804 y(nate)24 b(systems,)h(these)f(grid)f
-(lines)h(will)g(not)g(b)s(e)e(geo)s(desics,)27 b(so)c(astCurv)m(e)h
-(and)f(astP)m(olyCurv)m(e)i(\()p Fu(x)p FF(21.3\))h(cannot)0
-917 y(easily)33 b(b)s(e)e(used)g(\(y)m(ou)h(w)m(ould)g(ha)m(v)m(e)h(to)
-f(resort)g(to)h(appro)m(ximating)f(grid)g(lines)g(b)m(y)f(man)m(y)h
-(small)h(elemen)m(ts\).)0 1030 y(Lines)26 b(of)h(constan)m(t)h
-(celestial)h(latitude)f(pro)m(vide)f(an)f(example)i(of)f(this,)g(with)f
-(the)h(exception)h(of)f(the)g(equator)0 1143 y(whic)m(h)j(is)h(a)f(geo)
-s(desic.)0 1309 y(The)g(astGridLine)h(function)f(allo)m(ws)h(these)g
-(curv)m(es)g(to)g(b)s(e)f(dra)m(wn,)f(as)i(follo)m(ws:)227
-1569 y Ft(int)43 b(axis;)227 1668 y(double)e(length;)227
-1867 y(...)227 2067 y(astGridLine\()e(plot,)i(axis,)h(start,)f(length)g
-(\);)0 2340 y FF(Here,)36 b(\\axis")f(sp)s(eci\014es)e(whic)m(h)h(ph)m
-(ysical)h(co)s(ordinate)f(axis)h(w)m(e)f(wish)f(to)i(dra)m(w)e
-(parallel)i(to.)53 b(The)33 b(\\start")0 2453 y(arra)m(y)j(con)m(tains)
-h(the)e(co)s(ordinates)h(of)g(the)f(start)h(of)g(the)g(curv)m(e)f(and)g
-(\\length")i(sp)s(eci\014es)e(the)h(distance)g(to)0 2566
-y(dra)m(w)30 b(along)h(the)g(axis)g(in)f(ph)m(ysical)h(co)s(ordinate)g
-(space.)0 2871 y Fw(21.5)112 b(Plotting)37 b(Generalized)i(Curv)m(es)0
-3098 y FF(W)-8 b(e)29 b(ha)m(v)m(e)h(seen)e(ho)m(w)h(geo)s(desic)g
-(curv)m(es)g(and)e(grid)h(lines)h(can)f(b)s(e)g(dra)m(wn.)39
-b(The)28 b(Plot)h(class)g(includes)f(another)0 3210 y(metho)s(d,)44
-b(astGenCurv)m(e,)h(whic)m(h)d(allo)m(ws)h(curv)m(es)f(of)f
-Fx(any)i FF(form)e(to)h(b)s(e)f(dra)m(wn.)74 b(The)41
-b(caller)i(supplies)e(a)0 3323 y(Mapping)f(whic)m(h)f(maps)h(o\013set)h
-(along)g(the)f(curv)m(e)1788 3290 y Fv(34)1902 3323 y
-FF(in)m(to)h(the)f(corresp)s(onding)f(p)s(osition)h(in)g(the)g(curren)m
-(t)0 3436 y(F)-8 b(rame)44 b(of)f(the)g(Plot.)78 b(astGenCurv)m(e,)47
-b(then)42 b(tak)m(es)j(care)e(of)g(Mapping)g(these)g(p)s(ositions)g(in)
-m(to)g(graphics)0 3549 y(co)s(ordinates.)71 b(The)39
-b(c)m(hoice)j(of)f(exactly)g(whic)m(h)f(p)s(ositions)g(along)h(the)g
-(curv)m(e)f(are)h(to)g(b)s(e)e(used)g(to)i(de\014ne)0
-3662 y(the)30 b(curv)m(e)g(is)g(also)g(made)g(b)m(y)g(astGenCurv)m(e,)h
-(using)e(an)g(adaptiv)m(e)i(algorithm)g(whic)m(h)f(concen)m(trates)i(p)
-s(oin)m(ts)0 3775 y(around)d(areas)i(where)f(the)h(curv)m(e)g(is)f(b)s
-(ending)f(sharply)g(or)i(is)f(discon)m(tin)m(uous)h(in)f(graphics)g(co)
-s(ordinates.)0 3941 y(The)c(In)m(traMap)g(class)h(ma)m(y)f(b)s(e)g(of)g
-(particular)g(use)g(in)g(this)g(con)m(text)i(since)e(it)h(allo)m(ws)g
-(y)m(ou)f(to)h(co)s(de)f(y)m(our)g(o)m(wn)0 4054 y(Mappings)k(to)h(do)g
-(an)m(y)f(transformation)h(y)m(ou)g(c)m(ho)s(ose.)0 4359
-y Fw(21.6)112 b(Clipping)0 4586 y FF(Lik)m(e)24 b(man)m(y)g(graphics)f
-(systems,)i(a)e(Plot)i(allo)m(ws)f(y)m(ou)g(to)g Fx(clip)g
-FF(the)f(graphics)g(y)m(ou)h(pro)s(duce.)37 b(This)23
-b(means)g(that)0 4699 y(plotting)36 b(is)e(restricted)i(to)f(certain)h
-(regions)f(of)g(the)g(plotting)g(surface)g(so)g(that)g(an)m(ything)g
-(dra)m(wn)f(outside)0 4812 y(these)40 b(regions)g(will)g(not)g(app)s
-(ear.)69 b(All)40 b(Plots)h(automatically)h(clip)e(at)h(the)f(edges)g
-(of)g(the)g(plotting)h(area)0 4925 y(sp)s(eci\014ed)36
-b(when)g(the)h(Plot)g(is)g(created.)61 b(This)36 b(means)h(that)g
-(graphics)g(are)g(ultimately)h(restricted)g(to)f(the)0
-5038 y(rectangular)31 b(region)g(of)g(plotting)g(space)g(to)g(whic)m(h)
-f(y)m(ou)h(ha)m(v)m(e)h(attac)m(hed)g(the)e(Plot.)0 5204
-y(In)g(addition)i(to)g(this,)f(y)m(ou)h(ma)m(y)g(also)g(sp)s(ecify)f
-(lo)m(w)m(er)h(and)f(upp)s(er)e(limits)j(on)f(eac)m(h)h(axis)g(at)f
-(whic)m(h)g(clipping)0 5317 y(should)23 b(o)s(ccur.)38
-b(This)23 b(p)s(ermits)g(y)m(ou)h(to)g(further)f(restrict)h(the)g
-(plotting)h(region.)39 b(Moreo)m(v)m(er,)27 b(y)m(ou)d(ma)m(y)h(attac)m
-(h)0 5430 y(these)33 b(clipping)f(limits)h(to)g Fx(any)g
-FF(of)f(the)g(F)-8 b(rames)33 b(in)f(the)h(Plot.)47 b(This)31
-b(allo)m(ws)j(y)m(ou)e(to)h(place)h(restrictions)f(on)p
-0 5516 1512 4 v 73 5570 a Fs(34)138 5602 y Fr(normalized)27
-b(so)f(that)f(the)g(start)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(0.0)g(and)f(the)g(end)g(of)h(the)f(curv)n(e)g(is)h(at)f(o\013set)h
-(1.0)g(-)f(o\013set)h(need)0 5693 y(not)g(b)r(e)f(linearly)h(related)h
-(to)f(distance.)p eop end
-%%Page: 182 192
-TeXDict begin 182 191 bop 0 52 a FF(182)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y FF(where)e(plotting)h(will)g(tak)m(e)h(place)f(in)f(either)h(the)
-f(ph)m(ysical)h(co)s(ordinate)h(system,)f(the)f(graphical)i(co)s
-(ordinate)0 464 y(system,)i(or)f(in)g(an)m(y)h(other)g(co)s(ordinate)g
-(system)f(whic)m(h)g(is)h(describ)s(ed)e(b)m(y)h(a)h(F)-8
-b(rame)31 b(within)f(the)h(Plot.)0 625 y(F)-8 b(or)33
-b(example,)h(y)m(ou)f(could)g(plot)g(using)f(equatorial)i(co)s
-(ordinates)f(and)f(set)h(up)f(clipping)g(limits)h(in)f(galactic)0
-737 y(co)s(ordinates.)48 b(In)31 b(general,)j(y)m(ou)f(could)g(set)g
-(up)e(arbitrary)h(clipping)h(regions)f(b)m(y)h(adding)f(a)g(new)g(F)-8
-b(rame)34 b(to)0 850 y(a)k(Plot)h(\(in)f(whic)m(h)g(clipping)g(will)g
-(b)s(e)f(p)s(erformed\))g(and)g(in)m(ter-relating)j(this)e(to)h(the)f
-(other)g(F)-8 b(rames)38 b(in)g(a)0 963 y(suitable)31
-b(w)m(a)m(y)-8 b(.)0 1124 y(Clipping)30 b(limits)h(are)f(de\014ned)g
-(using)f(the)i(astClip)g(function,)f(as)h(follo)m(ws:)227
-1363 y Ft(#define)41 b(NAXES)g(2)227 1463 y(int)i(iframe;)227
-1563 y(double)e(lbnd[)h(NAXES)f(],)i(ubnd[)f(NAXES)f(];)227
-1762 y(...)227 1861 y(astClip\()g(plot,)g(iframe,)g(lbnd,)g(ubnd\);)0
-2114 y FF(Here,)30 b(the)e(\\iframe")i(v)-5 b(alue)28
-b(giv)m(es)i(the)f(index)f(of)g(the)h(F)-8 b(rame)29
-b(within)f(the)h(Plot)g(to)g(whic)m(h)f(clipping)h(is)f(to)h(b)s(e)0
-2227 y(applied,)g(while)f(\\lbnd")g(and)g(\\ubnd")f(giv)m(e)i(the)g
-(limits)g(on)f(eac)m(h)h(axis)g(of)g(the)f(selected)i(F)-8
-b(rame)29 b(\(NAXES)f(is)0 2340 y(the)j(n)m(um)m(b)s(er)e(of)h(axes)h
-(in)f(this)g(F)-8 b(rame\).)0 2501 y(Y)g(ou)31 b(can)g(remo)m(v)m(e)g
-(clipping)g(b)m(y)f(giving)h(a)g(v)-5 b(alue)31 b(of)f(AST)p
-Fq(__)p FF(NOFRAME)g(for)g(\\iframe".)0 2790 y Fw(21.7)112
-b(Using)38 b(a)g(Plot)f(as)h(a)g(Mapping)0 3009 y FF(All)e(Plots)g(are)
-g(also)h(Mappings)e(\(just)g(lik)m(e)i(the)f(F)-8 b(rameSets)36
-b(from)f(whic)m(h)h(they)f(are)h(deriv)m(ed\),)i(so)d(can)h(b)s(e)0
-3122 y(used)30 b(to)h(transform)e(co)s(ordinates.)0 3283
-y(Lik)m(e)g(F)-8 b(rameSets,)30 b(the)e(forw)m(ard)g(transformation)g
-(of)h(a)f(Plot)h(will)g(con)m(v)m(ert)g(co)s(ordinates)g(b)s(et)m(w)m
-(een)g(the)f(base)0 3396 y(and)33 b(curren)m(t)g(F)-8
-b(rames)34 b(\()p Fx(i.e.)f FF(b)s(et)m(w)m(een)h(graphical)h(and)d(ph)
-m(ysical)i(co)s(ordinates\).)51 b(This)33 b(w)m(ould)g(b)s(e)g(useful)f
-(if)0 3508 y(y)m(ou)26 b(w)m(ere)f(\(sa)m(y\))i(reading)f(a)f(cursor)g
-(p)s(osition)g(in)g(graphical)i(co)s(ordinates)f(and)e(needed)h(to)h
-(con)m(v)m(ert)h(this)e(in)m(to)0 3621 y(ph)m(ysical)31
-b(co)s(ordinates)g(for)f(displa)m(y)-8 b(.)0 3782 y(Con)m(v)m(ersely)g
-(,)36 b(a)e(Plot's)h(in)m(v)m(erse)f(transformation)g(con)m(v)m(erts)h
-(b)s(et)m(w)m(een)f(its)g(curren)m(t)g(and)f(base)g(F)-8
-b(rames)35 b(\()p Fx(i.e.)0 3895 y FF(from)h(ph)m(ysical)h(co)s
-(ordinates)g(to)g(graphical)h(co)s(ordinates\).)60 b(This)35
-b(transformation)i(is)g(applied)f(automat-)0 4008 y(ically)k(whenev)m
-(er)f(plotting)h(op)s(erations)g(are)f(carried)g(out)g(b)m(y)g(AST)f
-(functions.)66 b(It)39 b(ma)m(y)h(also)g(b)s(e)e(useful)0
-4120 y(to)d(apply)f(it)h(directly)-8 b(,)37 b(ho)m(w)m(ev)m(er,)g(if)e
-(y)m(ou)f(wish)g(to)h(p)s(erform)e(additional)j(plotting)f(op)s
-(erations)g(\()p Fx(e.g.)f FF(those)0 4233 y(pro)m(vided)c(b)m(y)g(the)
-h(nativ)m(e)h(graphics)e(system\))h(at)g(p)s(ositions)f(sp)s(eci\014ed)
-g(in)g(ph)m(ysical)h(co)s(ordinates.)0 4394 y(There)f(is,)h(ho)m(w)m
-(ev)m(er,)h(one)f(imp)s(ortan)m(t)g(di\013erence)g(b)s(et)m(w)m(een)g
-(using)g(a)g(F)-8 b(rameSet)31 b(and)f(a)h(Plot)h(to)f(transform)0
-4507 y(co)s(ordinates,)40 b(and)d(this)g(is)g(that)h(clipping)f(ma)m(y)
-h(b)s(e)f(applied)g(b)m(y)g(a)h(Plot)g(\(if)f(it)h(has)f(b)s(een)g
-(enabled)g(using)0 4620 y(astClip|)p Fu(x)p FF(21.6\).)k(An)m(y)24
-b(p)s(oin)m(t)f(whic)m(h)g(lies)i(within)d(the)i(clipp)s(ed)f(region)h
-(of)g(a)g(Plot)g(will,)h(when)e(transformed,)0 4733 y(yield)41
-b(co)s(ordinates)g(with)f(the)h(v)-5 b(alue)41 b(AST)p
-Fq(__)p FF(BAD.)f(If)g(y)m(ou)h(wish)f(to)h(a)m(v)m(oid)h(this)e
-(clipping,)k(y)m(ou)c(should)0 4845 y(extract)31 b(the)e(relev)-5
-b(an)m(t)31 b(Mapping)e(from)g(the)g(Plot)h(\(using)f(astGetMapping\))i
-(and)e(use)g(this,)g(instead)h(of)f(the)0 4958 y(Plot,)i(to)h
-(transform)d(the)i(co)s(ordinates.)0 5248 y Fw(21.8)112
-b(Using)38 b(a)g(Plot)f(as)h(a)g(F)-9 b(rame)0 5467 y
-FF(Ev)m(ery)39 b(Plot)g(is)f(also)i(a)e(F)-8 b(rame,)42
-b(so)c(can)h(b)s(e)f(used)f(to)i(obtain)g(the)g(v)-5
-b(alues)38 b(of)h(F)-8 b(rame)39 b(attributes)g(suc)m(h)f(as)0
-5580 y(a)k(Title,)j(axis)d(Lab)s(els,)i(axis)e(Units,)j
-Fx(etc.,)e FF(whic)m(h)e(are)h(t)m(ypically)i(used)c(when)h(displa)m
-(ying)g(data)i(and/or)0 5693 y(co)s(ordinates.)k(These)32
-b(attributes)h(are,)h(as)e(for)h(an)m(y)f(F)-8 b(rameSet,)35
-b(deriv)m(ed)d(from)g(the)g(curren)m(t)g(F)-8 b(rame)34
-b(of)e(the)p eop end
-%%Page: 183 193
-TeXDict begin 183 192 bop 0 52 a Fy(21.9)93 b(Regions)31
-b(of)f(V)-8 b(alid)32 b(Ph)m(ysical)f(Co)s(ordinates)1871
-b FF(183)0 351 y(Plot)29 b(\()p Fu(x)p FF(13.8\).)43
-b(They)28 b(are)h(also)g(used)f(automatically)j(when)c(using)h(the)h
-(Plot)g(to)g(plot)g(co)s(ordinate)g(axes)g(and)0 464
-y(co)s(ordinate)i(grids)f(\()p Fx(e.g.)g FF(for)g(lab)s(elling)i(them|)
-p Fu(x)p FF(21.12\).)0 641 y(Because)22 b(the)e(curren)m(t)g(F)-8
-b(rame)21 b(of)g(a)g(Plot)g(represen)m(ts)f(ph)m(ysical)h(co)s
-(ordinates,)i(an)m(y)e(F)-8 b(rame)21 b(op)s(eration)g(applied)0
-753 y(to)32 b(the)g(Plot)h(will)f(e\013ectiv)m(ely)j(b)s(e)c(w)m
-(orking)h(in)f(this)h(co)s(ordinate)h(system.)45 b(F)-8
-b(or)32 b(example,)h(the)f(astDistance)0 866 y(and)j(astO\013set)i
-(functions)f(will)g(compute)g(distances)g(and)g(o\013sets)h(in)e(ph)m
-(ysical)i(co)s(ordinate)f(space,)i(while)0 979 y(astF)-8
-b(ormat)32 b(and)e(astNorm)h(will)g(format)g(ph)m(ysical)g(co)s
-(ordinates)g(in)f(an)g(appropriate)g(w)m(a)m(y)i(for)e(displa)m(y)-8
-b(.)0 1318 y Fw(21.9)112 b(Regions)38 b(of)g(V)-9 b(alid)37
-b(Ph)m(ysical)h(Co)s(ordinates)0 1560 y FF(When)23 b(p)s(oin)m(ts)g(in)
-g(ph)m(ysical)h(co)s(ordinate)g(space)g(are)f(transformed)g(b)m(y)g(a)g
-(Plot)h(in)m(to)h(graphics)e(co)s(ordinates)h(for)0 1673
-y(plotting,)30 b(they)f(ma)m(y)f(not)h(alw)m(a)m(ys)h(yield)f(v)-5
-b(alid)28 b(co)s(ordinates,)i(irresp)s(ectiv)m(e)f(of)g(an)m(y)f
-(clipping)h(b)s(eing)f(applied)0 1785 y(\()p Fu(x)p FF(21.6\).)60
-b(T)-8 b(o)37 b(indicate)g(this,)g(the)f(resulting)g(co)s(ordinate)h(v)
--5 b(alues)36 b(will)h(b)s(e)e(set)h(to)h(the)f(v)-5
-b(alue)37 b(AST)p Fq(__)p FF(BAD)0 1898 y(\()p Fu(x)p
-FF(5.8\).)0 2075 y(There)g(are)h(a)g(n)m(um)m(b)s(er)f(of)h(reasons)f
-(wh)m(y)h(this)f(ma)m(y)i(o)s(ccur,)g(but)e(t)m(ypically)j(it)e(will)g
-(b)s(e)f(b)s(ecause)h(ph)m(ysical)0 2188 y(co)s(ordinates)22
-b(only)g(map)f(on)g(to)i(a)f(subset)f(of)g(the)h(graphics)g(co)s
-(ordinate)g(space.)38 b(This)21 b(situation)h(is)g(commonly)0
-2301 y(encoun)m(tered)j(with)f(all-sky)i(pro)5 b(jections)25
-b(where,)h(t)m(ypically)-8 b(,)28 b(the)d(celestial)i(sphere)d(app)s
-(ears,)h(when)e(plotted,)0 2413 y(as)37 b(a)h(distorted)f(shap)s(e)f
-(\()p Fx(e.g.)h FF(an)g(ellipse\))h(whic)m(h)f(do)s(es)g(not)g(en)m
-(tirely)h(\014ll)f(the)g(graphics)g(space.)62 b(In)36
-b(some)0 2526 y(cases,)c(there)e(ma)m(y)h(ev)m(en)g(b)s(e)f(m)m
-(ultiple)h(regions)g(of)f(v)-5 b(alid)31 b(and)f(in)m(v)-5
-b(alid)31 b(ph)m(ysical)g(co)s(ordinates.)0 2703 y(When)43
-b(plotting)h(is)e(p)s(erformed)g Fx(via)h FF(a)g(Plot,)k(graphical)d
-(output)e(will)h(only)g(app)s(ear)f(in)h(the)g(regions)g(of)0
-2816 y(v)-5 b(alid)28 b(ph)m(ysical)g(co)s(ordinates.)41
-b(Nothing)28 b(will)g(app)s(ear)f(where)g(in)m(v)-5 b(alid)28
-b(co)s(ordinates)h(o)s(ccur.)39 b(Suc)m(h)27 b(output)g(is)0
-2928 y(e\013ectiv)m(ely)36 b(clipp)s(ed.)48 b(If)33 b(y)m(ou)g(wish)f
-(to)i(plot)g(in)e(these)i(areas,)g(y)m(ou)g(m)m(ust)f(c)m(hange)h(co)s
-(ordinate)g(system)f(and)0 3041 y(use,)d(sa)m(y)-8 b(,)32
-b(graphical)f(co)s(ordinates)g(to)g(address)f(the)h(plotting)g(surface)
-f(directly)-8 b(.)0 3380 y Fw(21.10)112 b(Plotting)37
-b(Borders)0 3622 y FF(The)27 b(astBorder)h(function)f(is)g(pro)m(vided)
-g(to)h(dra)m(w)f(a)h(\(line\))g(b)s(order)e(around)g(y)m(our)i
-(graphical)g(output.)39 b(With)0 3735 y(most)26 b(graphics)f(systems,)h
-(this)f(w)m(ould)g(simply)g(b)s(e)f(a)i(rectangular)g(b)s(o)m(x)f
-(around)f(the)h(plotting)i(area.)39 b(With)26 b(a)0 3848
-y(Plot,)h(ho)m(w)m(ev)m(er,)g(this)e(b)s(oundary)e(follo)m(ws)j(the)f
-(edge)g(of)g(eac)m(h)h(region)f(con)m(taining)h(v)-5
-b(alid,)27 b(unclipp)s(ed)c(ph)m(ysical)0 3961 y(co)s(ordinates)31
-b(\()p Fu(x)p FF(21.9\).)0 4137 y(This)i(means,)i(for)e(example,)j
-(that)e(if)g(y)m(ou)g(w)m(ere)g(plotting)h(an)e(all-sky)i(pro)5
-b(jection,)35 b(this)f(b)s(oundary)e(w)m(ould)0 4250
-y(outline)41 b(the)f(p)s(erimeter)f(of)h(the)h(celestial)h(sphere)d
-(when)g(pro)5 b(jected)40 b(on)g(to)h(y)m(our)f(plotting)h(surface.)69
-b(Of)0 4363 y(course,)49 b(if)c(there)g(is)g(no)f(clipping)h(and)f(all)
-i(ph)m(ysical)g(co)s(ordinates)f(are)g(v)-5 b(alid,)49
-b(then)c(y)m(ou)g(will)g(get)h(the)0 4476 y(traditional)32
-b(rectangular)f(b)s(o)m(x.)41 b(astBorder)31 b(requires)f(only)g(a)h(p)
-s(oin)m(ter)f(to)h(the)g(Plot:)227 4766 y Ft(int)43 b(holes;)227
-4965 y(...)227 5164 y(holes)f(=)h(astBorder\()c(plot)j(\);)0
-5467 y FF(It)24 b(returns)f(a)h(b)s(o)s(olean)h(\(in)m(teger\))h(v)-5
-b(alue)24 b(to)h(indicate)g(if)f(an)m(y)h(in)m(v)-5 b(alid)24
-b(or)g(clipp)s(ed)g(ph)m(ysical)g(co)s(ordinates)h(w)m(ere)0
-5580 y(found)g(within)g(the)h(plotting)i(area.)40 b(If)25
-b(they)h(w)m(ere,)i(it)f(will)f(dra)m(w)g(around)f(the)h(v)-5
-b(alid)26 b(unclipp)s(ed)f(regions)h(and)0 5693 y(return)j(a)i(v)-5
-b(alue)31 b(of)f(one.)41 b(Otherwise,)31 b(it)g(will)f(dra)m(w)g(a)h
-(simple)f(rectangular)i(b)s(order)d(and)g(return)h(zero.)p
-eop end
-%%Page: 184 194
-TeXDict begin 184 193 bop 0 52 a FF(184)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))0
-351 y Fw(21.11)112 b(Plotting)37 b(T)-9 b(ext)0 573 y
-FF(Using)33 b(a)f(Plot)i(to)f(dra)m(w)f(text)i(in)m(v)m(olv)m(es)g
-(supplying)d(a)i(string)f(of)h(text)h(to)f(b)s(e)f(displa)m(y)m(ed)h
-(and)e(a)i(p)s(osition)g(in)0 686 y(ph)m(ysical)39 b(co)s(ordinates)g
-(where)f(the)g(text)h(is)g(to)g(app)s(ear.)63 b(The)38
-b(p)s(osition)h(is)f(transformed)f(in)m(to)j(graphical)0
-799 y(co)s(ordinates)45 b(to)h(determine)e(where)g(the)h(text)h(should)
-d(app)s(ear)h(on)h(the)g(plotting)g(surface.)84 b(Y)-8
-b(ou)45 b(m)m(ust)0 911 y(also)33 b(pro)m(vide)g(a)g(2-elemen)m(t)h
-(\\up")e(v)m(ector)i(whic)m(h)e(giv)m(es)i(the)f(up)m(w)m(ard)e
-(direction)i(of)g(the)f(text)i(in)e(graphical)0 1024
-y(co)s(ordinates.)41 b(This)30 b(allo)m(ws)i(text)f(to)g(b)s(e)f(dra)m
-(wn)f(at)j(an)m(y)e(angle.)0 1187 y(Plotting)i(is)e(p)s(erformed)f(b)m
-(y)h(astT)-8 b(ext,)32 b(for)f(example:)227 1436 y Ft(char)42
-b(text[)g(21)g(];)227 1536 y(double)f(pos[)h(NCOORD)f(];)227
-1635 y(float)h(up[)g(2)h(])g(=)h({)f(0.0f,)e(1.0f)h(};)227
-1835 y(...)227 2034 y(astText\()f(plot,)g(text,)h(pos,)g(up,)g("TL")g
-(\);)0 2296 y FF(Here,)28 b(\\text")g(con)m(tains)g(the)e(string)g(to)h
-(b)s(e)f(dra)m(wn,)h(\\p)s(os")f(is)g(an)h(arra)m(y)f(of)h(ph)m(ysical)
-g(co)s(ordinates)g(and)f(\\up")0 2409 y(sp)s(eci\014es)e(the)h(up)m(w)m
-(ard)e(v)m(ector.)41 b(In)23 b(this)i(case,)i(the)d(text)i(will)f(b)s
-(e)e(dra)m(wn)h(horizon)m(tally)-8 b(.)41 b(The)24 b(\014nal)g(argumen)
-m(t)0 2522 y(sp)s(eci\014es)k(the)h(text)h(justi\014cation,)g(here)f
-(indicating)g(that)h(the)f(top)g(left)g(corner)g(of)g(the)g(text)g
-(should)f(app)s(ear)0 2635 y(at)j(the)g(p)s(osition)f(giv)m(en.)0
-2798 y(F)-8 b(urther)38 b(con)m(trol)i(o)m(v)m(er)f(the)g(app)s
-(earance)f(of)g(the)h(text)g(is)f(p)s(ossible)g(b)m(y)g(setting)i(v)-5
-b(alues)38 b(for)g(v)-5 b(arious)39 b(Plot)0 2910 y(attributes,)k(for)c
-(example)i(Colour,)h(F)-8 b(on)m(t)41 b(and)e(Size.)69
-b(Sub-strings)38 b(within)h(the)h(displa)m(y)m(ed)g(text)h(can)f(b)s(e)
-0 3023 y(giv)m(en)24 b(di\013eren)m(t)f(app)s(earances,)i(or)e(turned)f
-(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)h(b)m(y)f(the)g
-(inclusion)g(of)g(escap)s(e)0 3136 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FF(21.13\))j(within)29 b(the)i(supplied)e(text)i(string.)0
-3429 y Fw(21.12)112 b(Plotting)37 b(a)h(Grid)0 3651 y
-FF(The)33 b(most)h(comprehensiv)m(e)h(plotting)f(function)g(a)m(v)-5
-b(ailable)36 b(is)e(astGrid,)h(whic)m(h)e(can)i(b)s(e)e(used)g(to)h
-(dra)m(w)g(la-)0 3764 y(b)s(elled)21 b(co)s(ordinate)h(axes)g(and,)h
-(optionally)-8 b(,)25 b(to)d(o)m(v)m(erla)m(y)i(co)s(ordinate)e(grids)f
-(on)g(the)h(plotting)g(area)g(\(Figure)g(8\).)0 3877
-y(The)30 b(routine)g(is)h(straigh)m(tforw)m(ard)g(to)g(use,)f(simply)g
-(requiring)g(a)h(p)s(oin)m(ter)f(to)h(the)g(Plot:)227
-4126 y Ft(astGrid\()41 b(plot)g(\);)0 4388 y FF(It)31
-b(will)f(dra)m(w)g(b)s(oth)g(linear)h(and)f(curvilinear)h(axes)g(and)f
-(grids,)g(as)h(required)e(b)m(y)i(the)f(particular)h(Plot.)42
-b(The)0 4501 y(app)s(earance)f(of)f(the)h(output)f(can)g(b)s(e)g(mo)s
-(di\014ed)f(in)h(a)h(wide)f(v)-5 b(ariet)m(y)42 b(of)e(w)m(a)m(ys)i(b)m
-(y)e(setting)h(v)-5 b(arious)41 b(Plot)0 4614 y(attributes.)63
-b(The)37 b(Lab)s(el)g(attributes)h(of)g(the)f(curren)m(t)h(F)-8
-b(rame)38 b(are)g(displa)m(y)m(ed)g(as)g(the)f(axis)h(lab)s(els)g(in)f
-(the)0 4727 y(grid,)42 b(and)d(the)h(Title)h(attribute)f(as)g(the)g
-(plot)g(title.)71 b(Sub-strings)38 b(within)i(these)g(strings)f(can)h
-(b)s(e)f(giv)m(en)0 4840 y(di\013eren)m(t)j(app)s(earances,)j(or)d
-(turned)f(in)m(to)i(sup)s(er-scripts)d(or)i(sub-scripts,)i(b)m(y)e(the)
-g(inclusion)g(of)g(escap)s(e)0 4953 y(sequences)31 b(\(see)g(section)g
-Fu(x)p FF(21.13\))j(within)29 b(the)i(Lab)s(el)f(attributes.)0
-5246 y Fw(21.13)112 b(Con)m(trolling)38 b(the)f(App)s(earance)i(of)f
-(Sub-strings)0 5467 y FF(Normally)-8 b(,)33 b(eac)m(h)f(string)f(of)g
-(c)m(haracters)h(displa)m(y)m(ed)g(using)e(a)h(Plot)h(will)f(b)s(e)g
-(plotted)g(so)h(that)f(all)h(c)m(haracters)0 5580 y(in)40
-b(the)g(string)f(ha)m(v)m(e)i(the)f(same)h(fon)m(t)f(size,)j(colour,)g
-Fx(etc.,)f FF(sp)s(eci\014ed)d(b)m(y)h(the)g(appropriate)g(attributes)g
-(of)0 5693 y(the)h(Plot.)75 b(Ho)m(w)m(ev)m(er,)46 b(it)c(is)f(p)s
-(ossible)g(to)h(include)f Fx(esc)-5 b(ap)g(e)44 b(se)-5
-b(quenc)g(es)48 b FF(within)41 b(the)h(text)g(to)g(mo)s(dify)e(the)p
-eop end
-%%Page: 185 195
-TeXDict begin 185 194 bop 0 52 a Fy(21.14)93 b(Pro)s(ducing)29
-b(Logarithmic)j(Axes)2203 b FF(185)0 351 y(app)s(earance)29
-b(of)f(sub-strings.)39 b(Escap)s(e)28 b(sequences)h(can)g(b)s(e)f(used)
-f(to)i(c)m(hange,)h(colour,)g(fon)m(t,)g(size,)f(width,)g(to)0
-464 y(in)m(tro)s(duce)k(extra)h(horizon)m(tal)h(space)e(b)s(et)m(w)m
-(een)h(c)m(haracters,)h(and)e(to)h(c)m(hange)g(the)f(base)g(line)h(of)f
-(c)m(haracters)0 577 y(\(th)m(us)22 b(allo)m(wing)h(sup)s(er-scripts)d
-(and)h(sub-scripts)g(to)h(b)s(e)f(created\).)39 b(See)22
-b(the)g(en)m(try)g(for)f(the)h(Escap)s(e)g(attribute)0
-690 y(in)30 b(App)s(endix)f(C)h(for)g(details.)0 855
-y(As)j(an)f(example,)i(if)f(the)g(c)m(haracter)h(string)e(\\)p
-Fq(10\\\045^50)p FF(\045s70+0.5+")h(is)g(plotted,)h(it)f(will)g(b)s(e)f
-(displa)m(y)m(ed)h(as)0 968 y(\\10)135 935 y Fv(0)p Fh(:)p
-Fv(5)231 968 y FF(")f(-)h(that)f(is,)h(with)f(a)g(sup)s(er-scripted)f
-(exp)s(onen)m(t.)46 b(The)32 b(exp)s(onen)m(t)g(text)h(will)g(b)s(e)e
-(70\045)i(of)f(the)g(size)h(of)0 1081 y(normal)d(text)g(\(as)g
-(determined)f(b)m(y)h(the)g(Size)g(attribute\),)h(and)e(its)h(baseline)
-g(will)g(b)s(e)e(raised)i(b)m(y)f(50\045)i(of)e(the)0
-1194 y(heigh)m(t)i(of)g(a)g(normal)f(c)m(haracter.)0
-1359 y(Suc)m(h)c(escap)s(e)h(sequences)f(can)h(b)s(e)f(used)f(in)i(the)
-f(strings)g(assigned)h(to)g(textual)h(attributes)f(of)g(the)f(Plot)h
-(\(suc)m(h)0 1472 y(as)k(the)f(axis)h(Lab)s(els\),)g(and)f(ma)m(y)g
-(also)i(b)s(e)e(included)f(in)h(strings)g(plotted)i(using)d(astT)-8
-b(ext.)0 1637 y(The)40 b(F)-8 b(ormat)42 b(attribute)f(for)f(the)h
-(SkyAxis)f(class)h(includes)f(the)h(\\g")g(option)g(whic)m(h)f(will)h
-(cause)g(escap)s(e)0 1750 y(sequences)30 b(to)g(b)s(e)f(included)g
-(when)g(formatting)h(celestial)i(p)s(ositions)e(so)g(that)g(sup)s
-(er-script)e(c)m(haracters)j(are)0 1863 y(used)f(as)g(delimiters)h(for)
-f(the)h(v)-5 b(arious)30 b(\014elds)g(\(a)h(sup)s(er-script)e(\\h")i
-(for)f(hours,)f(\\m")i(for)g(min)m(utes,)f Fx(etc)5 b
-FF(\).)0 2028 y(Note,)46 b(the)c(facilit)m(y)i(for)e(in)m(terpreting)g
-(escap)s(e)h(sequences)f(is)g(only)f(a)m(v)-5 b(ailable)45
-b(if)c(the)h(graphics)g(wrapp)s(er)0 2141 y(functions)24
-b(whic)m(h)f(pro)m(vide)h(the)g(in)m(terface)i(to)f(the)f(underlying)f
-(graphics)h(system)g(supp)s(ort)e(all)j(the)f(functions)0
-2254 y(included)k(in)h(the)h Fq(grf.h)d FF(\014le)i(as)h(of)f(AST)g
-(V3.2.)41 b(Older)29 b(grf)g(in)m(terfaces)h(ma)m(y)g(need)f(to)h(b)s
-(e)e(extended)h(b)m(y)g(the)0 2367 y(addition)i(of)f(new)g(functions)g
-(b)s(efore)g(escap)s(e)h(sequences)f(can)h(b)s(e)f(in)m(terpretted.)0
-2668 y Fw(21.14)112 b(Pro)s(ducing)38 b(Logarithmic)g(Axes)0
-2893 y FF(In)23 b(certain)j(situations)e(y)m(ou)h(ma)m(y)g(wish)e(for)h
-(one)h(or)f(b)s(oth)f(of)i(the)f(plotted)h(axes)g(to)g(b)s(e)e(displa)m
-(y)m(ed)i(logarithmi-)0 3006 y(cally)30 b(rather)e(than)g(linearly)-8
-b(.)42 b(F)-8 b(or)29 b(instance,)h(y)m(ou)e(ma)m(y)i(wish)d(to)j(do)e
-(this)g(when)g(using)g(a)h(Plot)g(to)g(represen)m(t)0
-3119 y(a)j(sp)s(ectrum)e(of,)j(sa)m(y)-8 b(,)33 b(\015ux)d(against)j
-(frequency)-8 b(.)44 b(In)31 b(this)g(case,)i(y)m(ou)f(can)g(cause)g
-(the)g(frequency)f(axis)h(to)g(b)s(e)0 3232 y(dra)m(wn)27
-b(logarithmically)j(simply)e(b)m(y)f(setting)i(the)f(b)s(o)s(olean)g
-(LogPlot)h(attribute)g(for)e(the)h(frequency)f(axis)i(to)0
-3345 y(a)i(non-zero)g(v)-5 b(alue.)41 b(This)29 b(causes)i(sev)m(eral)h
-(things)e(to)h(happ)s(en:)111 3614 y(1.)46 b(The)21 b(Mapping)f(b)s(et)
-m(w)m(een)i(the)e(base)h(F)-8 b(rame)22 b(of)f(the)g(Plot)g(\(whic)m(h)
-g(represen)m(ts)g(the)g(underlying)e(graphics)227 3727
-y(w)m(orld)26 b(co)s(ordinate)h(system\))g(and)f(the)g(base)g(F)-8
-b(rame)27 b(of)g(the)f(F)-8 b(rameSet)28 b(supplied)c(when)i(the)g
-(Plot)h(w)m(as)227 3840 y(created,)32 b(is)e(mo)s(di\014ed.)39
-b(By)30 b(default,)h(this)f(mapping)f(is)h(linear)g(on)g(b)s(oth)g
-(axes,)h(but)e(setting)i(LogPlot)227 3953 y(non-zero)37
-b(for)e(an)h(axis)g(causes)g(the)g(Mapping)g(to)h(b)s(e)e(mo)s
-(di\014ed)f(so)j(that)f(it)g(is)g(logarithmic)i(on)d(the)227
-4066 y(sp)s(eci\014ed)26 b(axis.)39 b(This)26 b(is)g(only)g(p)s
-(ossible)f(if)h(the)h(displa)m(y)m(ed)f(section)i(of)e(the)g(axis)g(do)
-s(es)g(not)g(include)g(the)227 4179 y(v)-5 b(alue)31
-b(zero)g(\(otherwise)g(the)g(attempt)g(to)g(set)g(a)f(new)g(v)-5
-b(alue)31 b(for)f(LogPlot)i(is)e(ignored,and)g(it)h(retains)227
-4292 y(its)g(default)g(v)-5 b(alue)30 b(of)h(zero\).)111
-4484 y(2.)46 b(The)38 b(ma)5 b(jor)38 b(tic)m(k)h(marks)f(dra)m(wn)f
-(as)h(part)g(of)g(the)h(annotated)f(co)s(ordinate)h(grid)f(are)h
-(spaced)f(loga-)227 4597 y(rithmically)d(rather)f(than)g(linearly)-8
-b(.)53 b(That)34 b(is,)i(ma)5 b(jor)34 b(axis)h(v)-5
-b(alues)34 b(are)h(c)m(hosen)f(so)h(that)g(there)f(is)g(a)227
-4710 y(constan)m(t)d(ratio)g(b)s(et)m(w)m(een)f(adjacen)m(t)g(tic)m(k)h
-(mark)e(v)-5 b(alues.)41 b(This)29 b(ratio)h(is)g(constrained)g(to)g(b)
-s(e)f(a)g(p)s(o)m(w)m(er)227 4823 y(of)g(ten.)40 b(The)28
-b(minor)g(tic)m(k)i(marks)e(are)g(dra)m(wn)g(at)h(linearly)g
-(distributed)e(p)s(oin)m(ts)i(b)s(et)m(w)m(een)g(the)f(adjoin-)227
-4936 y(ing)f(ma)5 b(jor)26 b(tic)m(k)i(v)-5 b(alues.)39
-b(Th)m(us)25 b(if)i(a)f(pair)g(of)h(adjacen)m(t)g(ma)5
-b(jor)26 b(tic)m(k)i(v)-5 b(alues)26 b(are)h(dra)m(wn)e(at)i(axis)g(v)
--5 b(alues)227 5049 y(10.0)39 b(and)d(100.0,)41 b(minor)36
-b(tic)m(ks)i(will)f(b)s(e)f(placed)i(at)f(20.0,)j(30.0,)h(40.0,)f
-(50.0,)g(60.0,)g(70.0,)h(80.0)d(and)227 5162 y(90.0)32
-b(\(note)g(only)e(8)h(minor)f(tic)m(k)h(marks)f(are)h(dra)m(wn\).)111
-5354 y(3.)46 b(If)25 b(p)s(ossible,)i(n)m(umerical)f(axis)g(lab)s(els)g
-(are)g(sho)m(wn)f(as)h(p)s(o)m(w)m(ers)f(of)h(ten.)39
-b(This)25 b(dep)s(ends)f(on)h(the)h(facilities)227 5467
-y(implemen)m(ted)38 b(b)m(y)f(the)g(graphics)g(wrapp)s(er)f(functions)g
-(\(see)i(the)g(next)f(section\).)63 b(Extra)37 b(functions)227
-5580 y(w)m(ere)32 b(in)m(tro)s(duced)g(to)g(this)g(set)g(of)g(wrapp)s
-(er)e(functions)h(at)h(AST)f(V3.2)i(whic)m(h)f(enable)g(sup)s
-(er-scripts)227 5693 y(and)42 b(sub-scripts)f(to)h(b)s(e)g(pro)s
-(duced.)74 b(Some)42 b(older)g(wrapp)s(ers)e(ma)m(y)i(not)h(y)m(et)g
-(ha)m(v)m(e)g(implemen)m(ted)p eop end
-%%Page: 186 196
-TeXDict begin 186 195 bop 0 52 a FF(186)1463 b Fy(21)92
-b(PR)m(ODUCING)30 b(GRAPHICAL)h(OUTPUT)e(\(PLOTS\))227
-351 y FF(these)f(functiosn)f(and)f(this)h(will)h(result)f(in)f(axis)i
-(lab)s(els)f(b)s(eing)g(dra)m(wn)f(in)h(usual)g(scien)m(ti\014c)h(or)f
-(decimal)227 464 y(notation.)0 727 y(Whilst)35 b(the)g(LogPlot)i
-(attribute)e(can)g(b)s(e)g(used)f(to)h(con)m(trol)i(all)e(three)g(of)g
-(the)g(ab)s(o)m(v)m(e)h(facilities,)j(it)c(is)g(p)s(os-)0
-839 y(sible)h(to)h(con)m(trol)h(them)e(individually)g(as)g(w)m(ell.)59
-b(The)35 b(LogTic)m(ks)j(and)d(LogLab)s(el)i(attributes)g(con)m(trol)g
-(the)0 952 y(b)s(eha)m(viour)d(sp)s(eci\014ed)f(in)g(items)i(2)f(and)f
-(3)i(ab)s(o)m(v)m(e,)h(but)d(the)h(default)g(v)-5 b(alues)35
-b(for)e(these)i(attributes)f(dep)s(end)0 1065 y(on)f(the)h(setting)h
-(of)f(the)g(LogPlot)h(attribute.)51 b(This)33 b(means)g(that)h(setting)
-h(LogPlot)g(non-zero)g(will)e(swicth)0 1178 y(all)39
-b(three)g(facilites)i(on,)f(so)f(long)g(as)g(zero)g(v)-5
-b(alues)39 b(ha)m(v)m(e)h(not)f(b)s(een)f(assigned)g(explicitly)i(to)g
-(LogTic)m(ks)f(or)0 1291 y(LogLab)s(el.)0 1584 y Fw(21.15)112
-b(Cho)s(osing)39 b(a)f(Graphics)g(P)m(ac)m(k)-6 b(age)0
-1806 y FF(The)34 b(Plot)i(class)g(itself)g(do)s(es)f(not)g(include)g
-(an)m(y)g(co)s(de)g(for)g(actually)h(dra)m(wing)f(on)g(a)g(graphics)g
-(device.)56 b(In-)0 1919 y(stead,)32 b(it)g(requires)f(a)g(set)h(of)f
-(functions)g(to)h(b)s(e)f(pro)m(vided)f(whic)m(h)h(it)h(uses)f(to)h
-(dra)m(w)e(the)i(required)e(graphics.)0 2032 y(These)39
-b(include)g(functions)f(to)i(dra)m(w)e(a)i(straigh)m(t)g(line,)i(dra)m
-(w)c(a)i(text)g(string,)h Fx(etc)p FF(.)67 b(Y)-8 b(ou)39
-b(ma)m(y)h(c)m(ho)s(ose)g(to)0 2144 y(pro)m(vide)h(functions)f(from)g
-(y)m(our)g(fa)m(v)m(orite)j(graphics)e(pac)m(k)-5 b(age,)45
-b(or)40 b(y)m(ou)h(can)g(ev)m(en)g(write)g(y)m(our)g(o)m(wn!)71
-b(T)-8 b(o)0 2257 y(accomo)s(date)43 b(v)-5 b(ariations)42
-b(in)f(the)g(calling)h(in)m(terfaces)h(of)e(di\013eren)m(t)g(graphics)g
-(pac)m(k)-5 b(ages,)46 b(AST)40 b(de\014nes)g(a)0 2370
-y(standard)g(in)m(terface)i(for)f(these)g(routines.)72
-b(If)40 b(this)h(in)m(terface)h(di\013ers)f(from)f(the)h(in)m(terface)h
-(pro)m(vided)f(b)m(y)0 2483 y(y)m(our)27 b(graphics)g(pac)m(k)-5
-b(age)29 b(\(whic)m(h)f(in)e(general)j(it)e(will\),)i(then)e(y)m(ou)g
-(m)m(ust)g(write)h(a)f(set)h(of)f Fx(wr)-5 b(app)g(er)33
-b(functions)p FF(,)0 2596 y(whic)m(h)e(pro)m(vide)g(the)g(in)m(terface)
-h(exp)s(ected)f(b)m(y)g(AST)f(but)g(whic)m(h)h(then)g(call)h(functions)
-e(from)h(y)m(our)f(graphics)0 2709 y(pac)m(k)-5 b(age)36
-b(to)e(pro)m(vide)g(the)g(required)f(functionalit)m(y)-8
-b(.)52 b(AST)33 b(comes)i(with)e(wrapp)s(er)f(functions)h(suitable)i
-(for)0 2822 y(the)c(PGPLOT)e(graphics)h(pac)m(k)-5 b(age)33
-b(\(see)e(SUN/15\).)0 2985 y(There)f(are)h(t)m(w)m(o)g(w)m(a)m(ys)h(of)
-e(indicating)h(whic)m(h)f(wrapp)s(er)f(functions)h(are)h(to)g(b)s(e)f
-(used)f(b)m(y)h(the)h(Plot)g(class:)111 3222 y(1.)46
-b(A)33 b(\014le)g(con)m(taining)i(C)d(functions)h(with)f(pre-de\014ned)
-g(names)h(can)g(b)s(e)f(written)h(and)f(link)m(ed)i(with)e(the)227
-3335 y(application)42 b(using)e(options)h(of)g(the)g(ast)p
-Fq(_)p FF(link)f(command.)71 b(\(see)42 b Fu(x)p FF(3.3)g(and)e(App)s
-(endix)f(E\).)71 b(AST)227 3448 y(is)37 b(distributed)f(with)g(suc)m(h)
-h(a)g(\014le)f(\(called)j Fq(grf_pgplot.c)p FF(\))33
-b(whic)m(h)k(calls)h(PGPLOT)d(functions)i(to)227 3561
-y(implemen)m(t)30 b(the)f(required)g(functionalit)m(y)-8
-b(.)42 b(This)28 b(\014le)i(can)f(b)s(e)g(used)f(as)h(a)h(template)g
-(for)f(writing)h(y)m(our)227 3674 y(o)m(wn.)111 3861
-y(2.)46 b(The)24 b(astGrfSet)g(metho)s(d)g(of)g(the)g(Plot)h(class)g
-(can)f(b)s(e)f(used)h(to)g(\\register")i(wrapp)s(er)c(functions)i(at)h
-(run-)227 3974 y(time.)41 b(This)26 b(allo)m(ws)i(an)g(application)g
-(to)g(switc)m(h)g(b)s(et)m(w)m(een)f(graphics)g(systems)h(if)f
-(required.)39 b(Graphics)227 4087 y(functions)f(registered)g(in)g(this)
-g(w)m(a)m(y)g(do)g(not)g(need)g(to)g(ha)m(v)m(e)h(the)g(pre-de\014ned)d
-(names)i(used)f(in)g(the)227 4200 y(link-time)32 b(metho)s(d)d(describ)
-s(ed)h(ab)s(o)m(v)m(e.)0 4438 y(F)-8 b(or)33 b(details)g(of)g(the)f(in)
-m(terfaces)i(of)f(the)f(wrapp)s(er)f(routines,)i(see)g(either)f(the)h
-Fq(grf_pgplot.c)c FF(\014le)j(included)0 4550 y(in)e(the)h(AST)e
-(source)i(distribution,)f(or)g(the)h(reference)g(do)s(cumen)m(tation)g
-(for)f(the)g(astGrfSet)h(metho)s(d.)p eop end
-%%Page: 187 197
-TeXDict begin 187 196 bop 3643 52 a FF(187)0 351 y Fz(22)135
-b(Compiling)46 b(and)f(Linking)g(Soft)l(w)l(are)h(that)g(Uses)f(AST)0
-603 y FF(A)28 b(small)h(n)m(um)m(b)s(er)d(of)i(UNIX)h(commands)e(are)i
-(pro)m(vided)e(b)m(y)h(AST)f(to)i(assist)g(with)e(the)i(pro)s(cess)e
-(of)h(building)0 716 y(soft)m(w)m(are.)58 b(A)36 b(description)g(of)g
-(these)g(can)g(b)s(e)f(found)f(in)i(App)s(endix)e(E)h(and)h(their)f
-(use)h(is)g(discussed)e(here.)0 828 y(Note)c(that)g(in)f(order)f(to)i
-(access)h(these)e(commands,)g(the)h(appropriate)f(directory)g
-(\(normally)h(\\/star/bin"\))0 941 y(should)f(b)s(e)h(on)g(y)m(our)h(P)
--8 b(A)g(TH.)1019 908 y Fv(35)0 1233 y Fw(22.1)112 b(Accessing)38
-b(the)f(\\ast.h")h(Header)g(File)0 1453 y FF(The)26 b(\\ast.h")i
-(header)f(\014le)g(de\014nes)f(the)h(external)g(in)m(terface)i(to)e
-(the)g(AST)f(library)-8 b(,)28 b(including)e(all)i(constan)m(ts,)0
-1566 y(function)k(protot)m(yp)s(es,)i(macros,)g Fx(etc.)p
-FF(.)46 b(This)32 b(\014le)g(should)g(b)s(e)g(lo)s(cated)h(using)f(the)
-h(usual)f(compiler)h(options)0 1678 y(for)d(\014nding)f(C)h(include)g
-(\014les,)h(for)f(instance:)227 1922 y Ft(cc)43 b(prog.c)e
-(-I/star/include)d(-o)k(prog)0 2179 y FF(This)30 b(is)g(preferable)g
-(to)h(sp)s(ecifying)g(the)f(\014le's)h(absolute)g(name)f(within)g(y)m
-(our)g(soft)m(w)m(are.)0 2470 y Fw(22.2)112 b(Linking)39
-b(with)e(AST)h(F)-9 b(acilities)0 2690 y FF(C)40 b(programs)f(whic)m(h)
-h(use)g(AST)f(facilities)k(ma)m(y)d(b)s(e)g(link)m(ed)g(b)m(y)g
-(including)g(execution)h(of)f(the)h(command)0 2803 y(\\ast)p
-Fq(_)p FF(link")33 b(on)f(the)g(compiler)h(command)e(line.)46
-b(Th)m(us,)31 b(to)i(compile)g(and)e(link)h(a)h(program)e(called)i
-(\\prog",)0 2916 y(the)e(follo)m(wing)g(migh)m(t)h(b)s(e)d(used:)227
-3160 y Ft(cc)43 b(prog.c)e(-L/star/lib)e(`ast_link`)h(-o)i(prog)0
-3416 y FF(Note)27 b(the)f(use)g(of)g(bac)m(kw)m(ard)g(quote)h(c)m
-(haracters,)i(whic)m(h)c(cause)i(the)f(\\ast)p Fq(_)p
-FF(link")h(command)f(to)g(b)s(e)g(executed)0 3529 y(and)g(its)h(result)
-g(substituted)f(in)m(to)i(the)e(compiler)i(command.)39
-b(An)26 b(alternativ)m(e)j(is)e(to)g(sa)m(v)m(e)i(the)e(output)f(from)0
-3642 y(\\ast)p Fq(_)p FF(link")32 b(in)f(\(sa)m(y\))i(a)e(shell)h(v)-5
-b(ariable)31 b(and)g(use)g(this)g(instead.)43 b(Y)-8
-b(ou)32 b(ma)m(y)f(\014nd)f(this)h(a)h(little)h(faster)e(if)g(y)m(ou)0
-3755 y(are)g(building)e(soft)m(w)m(are)j(rep)s(eatedly)f(during)e(dev)m
-(elopmen)m(t.)0 3917 y(Programs)43 b(whic)m(h)g(use)g(AST)f(can)i(also)
-g(b)s(e)e(link)m(ed)i(in)e(a)i(n)m(um)m(b)s(er)e(of)h(other)g(w)m(a)m
-(ys,)48 b(dep)s(ending)41 b(on)i(the)0 4029 y(facilities)35
-b(they)f(require.)48 b(In)32 b(the)i(example)g(ab)s(o)m(v)m(e,)h(w)m(e)
-e(ha)m(v)m(e)i(used)d(the)h(default)g(metho)s(d)g(whic)m(h)g(assumes)0
-4142 y(that)39 b(the)g(program)f(will)h(not)g(b)s(e)f(generating)i
-(graphical)f(output,)i(so)e(that)g(no)f(graphics)h(libraries)g(need)0
-4255 y(b)s(e)d(link)m(ed.)59 b(If)35 b(y)m(ou)i(need)f(other)h
-(facilities,)j(then)c(v)-5 b(arious)36 b(switc)m(hes)h(can)g(b)s(e)f
-(applied)g(to)h(the)f(\\ast)p Fq(_)p FF(link")0 4368
-y(command)30 b(in)g(order)g(to)h(con)m(trol)h(the)f(linking)f(pro)s
-(cess.)0 4530 y(F)-8 b(or)29 b(example,)h(if)e(y)m(ou)h(w)m(ere)f(pro)s
-(ducing)f(graphical)i(output)f(using)g(the)g(PGPLOT)g(graphics)g(pac)m
-(k)-5 b(age,)31 b(y)m(ou)0 4642 y(could)e(link)g(with)g(the)g
-(AST/PGPLOT)f(in)m(terface)j(b)m(y)d(using)h(the)g(\\)p
-Fu(\000)p FF(pgplot")h(switc)m(h)g(with)e(\\ast)p Fq(_)p
-FF(link",)j(as)0 4755 y(follo)m(ws:)292 4722 y Fv(36)227
-4999 y Ft(cc)43 b(prog.c)e(-L/star/lib)e(`ast_link)h(-pgplot`)g(-o)j
-(prog)0 5256 y FF(See)31 b(the)f(\\ast)p Fq(_)p FF(link")i(command)e
-(description)g(in)g(App)s(endix)f(E)h(for)g(details)i(of)e(the)h
-(options)g(a)m(v)-5 b(ailable.)p 0 5334 1512 4 v 73 5387
-a Fs(35)138 5419 y Fr(If)33 b(y)n(ou)g(ha)n(v)n(e)f(not)h(installed)h
-(AST)e(in)h(the)g(usual)g(lo)r(cation,)j(then)d(substitute)f(the)h
-(appropriate)g(directory)g(in)g(place)h(of)0 5510 y(\\/star")27
-b(wherev)n(er)f(it)g(o)r(ccurs.)73 5570 y Fs(36)138 5602
-y Fr(Use)20 b(the)f(\\)p Fm(\000)p Fr(pgp")g(option)h(instead)g(if)g(y)
-n(ou)f(wish)h(to)f(use)h(the)f(Starlink)g(v)n(ersion)g(of)i(PGPLOT)f
-(whic)n(h)f(uses)h(GKS)f(to)h(generate)0 5693 y(its)26
-b(output.)p eop end
-%%Page: 188 198
-TeXDict begin 188 197 bop 0 52 a FF(188)929 b Fy(22)91
-b(COMPILING)30 b(AND)h(LINKING)g(SOFTW)-10 b(ARE)29 b(THA)-8
-b(T)31 b(USES)e(AST)0 351 y Fw(22.3)112 b(Building)39
-b(AD)m(AM)d(Applications)j(that)e(Use)h(AST)0 573 y FF(Users)32
-b(of)h(Starlink's)g(AD)m(AM)h(programming)e(en)m(vironmen)m(t)h
-(\(SG/4\))h(on)f(UNIX)g(should)e(use)h(the)h(\\alink")0
-686 y(command)j(\(SUN/144\))i(to)f(compile)g(and)e(link)h(applications)
-h(and)e(can)h(access)i(the)e(AST)f(library)h(b)m(y)f(in-)0
-799 y(cluding)30 b(execution)i(of)e(the)h(command)f(\\ast)p
-Fq(_)p FF(link)p Fq(_)p FF(adam")h(on)g(the)f(command)g(line,)h(as)g
-(follo)m(ws:)227 1048 y Ft(alink)42 b(adamprog.c)d(`ast_link_adam`)0
-1310 y FF(Note)32 b(the)e(use)g(of)h(bac)m(kw)m(ard)g(quote)g(c)m
-(haracters.)0 1473 y(By)e(default,)g(AST)f(error)g(messages)i(pro)s
-(duced)d(b)m(y)h(applications)i(built)f(in)f(this)h(w)m(a)m(y)g(will)g
-(b)s(e)f(deliv)m(ered)h Fx(via)0 1586 y FF(the)34 b(Starlink)g(EMS)f
-(Error)g(Message)i(Service)f(\(SSN/4\))h(so)f(that)g(error)g(handling)f
-(b)m(y)g(AST)g(is)h(consisten)m(t)0 1698 y(with)c(the)h
-Fx(inherite)-5 b(d)33 b(status)f FF(error)e(handling)g(normally)g(used)
-g(in)g(Starlink)g(soft)m(w)m(are.)0 1861 y(Switc)m(hes)43
-b(ma)m(y)h(b)s(e)e(giv)m(en)i(to)f(the)g(\\ast)p Fq(_)p
-FF(link)p Fq(_)p FF(adam")h(command)f(\(in)g(a)g(similar)g(w)m(a)m(y)h
-(to)f(\\ast)p Fq(_)p FF(link"|)0 1974 y Fu(x)p FF(22.2\))36
-b(in)d(order)h(to)g(link)g(with)f(additional)i(AST-related)f
-(facilities,)j(suc)m(h)c(as)h(a)g(graphics)g(in)m(terface.)52
-b(See)0 2087 y(the)31 b(\\ast)p Fq(_)p FF(link)p Fq(_)p
-FF(adam")g(command)f(description)h(in)f(App)s(endix)e(E)j(for)f
-(details)h(of)g(the)f(options)h(a)m(v)-5 b(ailable.)p
-eop end
-%%Page: 189 199
-TeXDict begin 189 198 bop 3643 52 a FF(189)0 351 y Fz(A)134
-b(The)45 b(AST)e(Class)j(Hierarc)l(h)l(y)0 619 y FF(The)29
-b(follo)m(wing)j(table)e(sho)m(ws)g(the)g(hierarc)m(h)m(y)g(of)g
-(classes)h(in)e(the)h(AST)f(library)-8 b(.)41 b(F)-8
-b(or)30 b(a)h(description)e(of)h(eac)m(h)0 732 y(class,)h(y)m(ou)g
-(should)e(consult)i(App)s(endix)e(D.)0 1011 y Ft(Object)564
-b(-)43 b(Base)f(class)g(for)g(all)g(AST)h(Objects)131
-1110 y(Axis)521 b(-)43 b(Store)f(axis)g(information)262
-1210 y(SkyAxis)258 b(-)43 b(Store)f(celestial)e(axis)i(information)131
-1309 y(Channel)389 b(-)43 b(Basic)f(\(textual\))e(I/O)i(channel)262
-1409 y(FitsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(FITS)g(header)f
-(cards)262 1509 y(XmlChan)258 b(-)43 b(I/O)g(Channel)d(using)i(XML)262
-1608 y(StcsChan)214 b(-)43 b(I/O)g(Channel)d(using)i(IVOA)g(STC-S)f
-(descriptions)131 1708 y(KeyMap)433 b(-)43 b(Store)f(a)h(set)f(of)h
-(key/value)d(pairs)131 1808 y(Mapping)389 b(-)43 b(Inter-relate)c(two)j
-(coordinate)e(systems)262 1907 y(CmpMap)302 b(-)43 b(Compound)e
-(Mapping)262 2007 y(DssMap)302 b(-)43 b(Map)g(points)e(using)g
-(Digitised)f(Sky)i(Survey)g(plate)f(solution)262 2106
-y(Frame)346 b(-)43 b(Coordinate)d(system)h(description)392
-2206 y(CmpFrame)84 b(-)43 b(Compound)e(Frame)523 2306
-y(SpecFluxFrame)d(-)43 b(Observed)e(value)g(versus)g(spectral)g
-(position)392 2405 y(FluxFrame)f(-)j(Observed)e(value)g(at)i(a)g(given)
-f(fixed)f(spectral)f(position)392 2505 y(FrameSet)84
-b(-)43 b(Set)g(of)f(inter-related)d(coordinate)g(systems)523
-2605 y(Plot)129 b(-)43 b(Provide)e(facilities)e(for)k(graphical)d
-(output)392 2704 y(Region)172 b(-)43 b(Specify)e(areas)h(within)f(a)i
-(coordinate)c(system)523 2804 y(Box)173 b(-)43 b(A)g(box)g(region)e
-(with)h(sides)f(parallel)g(to)h(the)h(axes)f(of)g(a)i(Frame)523
-2903 y(Circle)d(-)i(A)g(circular)e(or)i(spherical)c(region)i(within)h
-(a)h(Frame)523 3003 y(CmpRegion)83 b(-)44 b(A)f(combination)c(of)k(two)
-f(regions)f(within)g(a)i(single)e(Frame)523 3103 y(Ellipse)171
-b(-)44 b(An)e(elliptical)e(region)h(within)g(a)i(2-dimensional)38
-b(Frame)523 3202 y(Interval)127 b(-)44 b(Intervals)c(on)i(one)h(or)f
-(more)g(axes)g(of)h(a)g(Frame.)523 3302 y(NullRegion)c(-)44
-b(A)f(boundless)d(region)h(within)g(a)i(Frame)523 3402
-y(PointList)83 b(-)44 b(A)f(collection)c(of)k(points)e(in)i(a)g(Frame)
-523 3501 y(Polygon)171 b(-)44 b(A)f(polygonal)d(region)h(within)g(a)i
-(2-dimensional)38 b(Frame)523 3601 y(Prism)85 b(-)43
-b(An)g(extrusion)d(of)j(a)g(Region)e(into)h(orthogonal)d(dimensions)523
-3700 y(Stc)173 b(-)43 b(Represents)d(an)j(generic)d(instance)g(of)j(an)
-g(IVOA)f(STC-X)f(description)654 3800 y(StcResourceProfi)o(le)c(-)43
-b(Represents)d(an)i(an)h(IVOA)f(STC-X)g(ResourceProfile)654
-3900 y(StcSearchLocatio)o(n)81 b(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(SearchLocation)654 3999 y(StcCatalogEntryL)o(oc)o(ati)o(on)37
-b(-)43 b(Represents)c(an)k(an)g(IVOA)f(STC-X)f(CatalogEntryLocat)o(ion)
-654 4099 y(StcObsDataLocati)o(on)c(-)43 b(Represents)d(an)i(an)h(IVOA)f
-(STC-X)g(ObsDataLocation)392 4199 y(SkyFrame)84 b(-)43
-b(Celestial)d(coordinate)g(system)h(description)392 4298
-y(SpecFrame)f(-)j(Spectral)e(coordinate)e(system)i(description)523
-4398 y(DSBSpecFrame)e(-)k(Dual)f(sideband)e(spectral)g(coordinate)g
-(system)h(description)392 4497 y(TimeFrame)f(-)j(Time)f(coordinate)e
-(system)h(description)262 4597 y(GrismMap)214 b(-)43
-b(Models)e(the)i(spectral)d(dispersion)f(produced)i(by)i(a)g(grism)262
-4697 y(IntraMap)214 b(-)43 b(Map)g(points)e(using)g(a)i(private)e
-(transformation)d(function)262 4796 y(LutMap)302 b(-)43
-b(Transform)d(1-dimensional)e(coordinates)h(using)j(a)h(lookup)e(table)
-262 4896 y(MathMap)258 b(-)43 b(Transform)d(coordinates)f(using)j
-(mathematical)c(expressions)262 4996 y(MatrixMap)170
-b(-)43 b(Map)g(positions)d(by)i(multiplying)d(them)j(by)h(a)g(matrix)
-262 5095 y(NormMap)258 b(-)43 b(Normalise)d(coordinates)f(using)j(a)h
-(supplied)d(Frame)262 5195 y(PcdMap)302 b(-)43 b(Apply)f(2-dimensional)
-c(pincushion/barre)o(l)g(distortion)262 5295 y(PermMap)258
-b(-)43 b(Coordinate)d(permutation)f(Mapping)262 5394
-y(PolyMap)258 b(-)43 b(General)e(N-dimensional)d(polynomial)i(Mapping)
-262 5494 y(RateMap)258 b(-)43 b(Calculates)d(an)j(element)d(of)j(a)g
-(Mapping's)d(Jacobian)g(matrix)262 5593 y(SelectorMap)82
-b(-)43 b(Locates)e(positions)f(within)h(a)i(set)f(of)h(Regions)262
-5693 y(ShiftMap)214 b(-)43 b(Shifts)e(each)h(axis)g(by)h(a)g(constant)d
-(amount)p eop end
-%%Page: 190 200
-TeXDict begin 190 199 bop 0 52 a FF(190)2158 b Fy(A)92
-b(THE)30 b(AST)f(CLASS)g(HIERAR)m(CHY)262 351 y Ft(SlaMap)302
-b(-)43 b(Sequence)e(of)h(celestial)e(coordinate)g(conversions)262
-451 y(SpecMap)258 b(-)43 b(Sequence)e(of)h(spectral)f(coordinate)e
-(conversions)262 551 y(SphMap)302 b(-)43 b(Map)g(3-d)f(Cartesian)e(to)j
-(2-d)f(spherical)e(coordinates)262 650 y(SwitchMap)170
-b(-)43 b(Encapuslates)c(a)k(set)f(of)h(alternate)d(Mappings)262
-750 y(TimeMap)258 b(-)43 b(Sequence)e(of)h(time)g(coordinate)e
-(conversions)262 849 y(TranMap)258 b(-)43 b(Combine)e(fwd.)h(and)g
-(inv.)g(transformations)c(from)k(two)g(Mappings)262 949
-y(UnitMap)258 b(-)43 b(Unit)f(\(null\))f(Mapping)262
-1049 y(WcsMap)302 b(-)43 b(Implement)d(a)j(FITS-WCS)e(sky)h(projection)
-262 1148 y(WinMap)302 b(-)43 b(Match)f(windows)f(by)h(scaling)f(and)h
-(shifting)f(each)h(axis)262 1248 y(ZoomMap)258 b(-)43
-b(Zoom)f(coordinates)d(about)j(the)g(origin)p eop end
-%%Page: 191 201
-TeXDict begin 191 200 bop 3643 52 a FF(191)0 351 y Fz(B)134
-b(AST)44 b(F)-11 b(unction)44 b(Descriptions)p 0 578
-3780 12 v 0 709 a(astSet)1023 710 y Fe(Set)38 b(attribute)f(v)-7
-b(alues)38 b(for)g(an)h(Ob)7 b(ject)3420 709 y Fz(astSet)0
-873 y Fd(Description:)44 b Fj(This)39 b(function)h(assigns)d(a)i(set)g
-(of)g(attribute)g(v)-5 b(alues)39 b(to)g(an)f(Ob)5 b(ject,)42
-b(o)n(v)n(er-riding)36 b(an)n(y)j(previous)227 972 y(v)-5
-b(alues.)68 b(The)38 b(attributes)f(and)h(their)g(new)g(v)-5
-b(alues)37 b(are)g(sp)r(eci\014ed)i(via)e(a)g(c)n(haracter)f(string,)k
-(whic)n(h)e(should)227 1072 y(con)n(tain)27 b(a)g(comma-separated)f
-(list)h(of)h(the)g(form:)227 1190 y Ft(")p Fj(attribute)p
-Ft(_)p Fj(1)f(=)g(v)-5 b(alue)p Ft(_)p Fj(1,)27 b(attribute)p
-Ft(_)p Fj(2)f(=)i(v)-5 b(alue)p Ft(_)p Fj(2,)26 b(...)37
-b Ft(")227 1308 y Fj(where)22 b Ft(")p Fj(attribute)p
-Ft(_)p Fj(n)p Ft(")g Fj(sp)r(eci\014es)g(an)h(attribute)f(name,)i(and)e
-(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f(of)h(eac)n(h)e
-Ft(")p Fj(=)p Ft(")h Fj(sign)g(should)227 1408 y(b)r(e)36
-b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h(the)h(v)-5
-b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35 b(v)-5
-b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227 1507 y(according)26
-b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)227 1626
-y(The)d(string)e(supplied)i(ma)n(y)f(also)f(con)n(tain)h
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)f(format)h(sp)r(eci\014ers,)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(signs)g(in)g(the)
-227 1725 y(usual)g(w)n(a)n(y)-7 b(.)35 b(If)24 b(presen)n(t,)f(these)h
-(will)f(b)r(e)h(substituted)h(b)n(y)e(v)-5 b(alues)23
-b(supplied)h(as)e(additional)h(optional)g(argumen)n(ts)227
-1825 y(\(using)28 b(the)g(normal)e Ft(")p Fj(prin)n(tf)p
-Ft(")h Fj(rules\))h(b)r(efore)f(the)h(string)f(is)g(used.)0
-1961 y Fd(Synopsis:)121 b Ft(void)42 b(astSet\()e(AstObject)g
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(settings,)d(...)86
-b(\))0 2098 y Fd(P)m(arameters:)259 2222 y(this)427 2321
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 2441
-y Fd(settings)427 2541 y Fj(P)n(oin)n(ter)27 b(to)i(a)g(n)n
-(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g(a)g
-(comma-separated)f(list)i(of)f(attribute)427 2640 y(settings)g(in)f
-(the)h(form)g(describ)r(ed)f(ab)r(o)n(v)n(e.)259 2760
-y Fd(...)427 2860 y Fj(Optional)k(additional)g(argumen)n(ts)f(whic)n(h)
-h(supply)h(v)-5 b(alues)31 b(to)g(b)r(e)h(substituted)g(for)f(an)n(y)g
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)427 2960 y(format)c(sp)r
-(eci\014ers)g(that)h(app)r(ear)f(in)h(the)g Ft(")p Fj(settings)p
-Ft(")e Fj(string.)0 3109 y Fd(Class)31 b(Applicabilit)m(y:)259
-3232 y(Ob)5 b(ject)427 3332 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 3481 y Fd(Examples:)227 3606 y
-Fq(astSet\()46 b(map,)h Ft(")p Fq(Report)e(=)j(1,)f(Zoom)g(=)g(25.0)p
-Ft(")f Fq(\);)427 3704 y Fj(Sets)28 b(the)g(Rep)r(ort)f(attribute)h
-(for)f(Ob)5 b(ject)28 b Ft(")p Fj(map)p Ft(")e Fj(to)i(the)g(v)-5
-b(alue)27 b(1)g(and)h(the)g(Zo)r(om)f(attribute)h(to)f(25.0.)227
-3825 y Fq(astSet\()46 b(frame,)g Ft(")p Fq(Label\()g(\045d)h(\))g
-(=Offset)f(along)h(axis)f(\045d)p Ft(")p Fq(,)h(axis,)f(axis)h(\);)427
-3924 y Fj(Sets)25 b(the)g(Lab)r(el\(axis\))f(attribute)h(for)g(Ob)5
-b(ject)24 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(a)g(suitable)h(string,)g
-(where)f(the)h(axis)f(n)n(um)n(b)r(er)427 4023 y(is)k(obtained)f(from)g
-Ft(")p Fj(axis)p Ft(")p Fj(,)f(a)i(v)-5 b(ariable)26
-b(of)i(t)n(yp)r(e)f(in)n(t.)227 4144 y Fq(astSet\()46
-b(frame,)g Ft(")p Fq(Title)g(=\045s)p Ft(")p Fq(,)g(mystring)g(\);)427
-4243 y Fj(Sets)28 b(the)g(Title)g(attribute)g(for)f(Ob)5
-b(ject)27 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(the)h(con)n(ten)n(ts)f(of)
-g(the)h(string)f Ft(")p Fj(m)n(ystring)p Ft(")p Fj(.)0
-4392 y Fd(Notes:)340 4662 y Fi(\017)45 b Fj(A)n(ttribute)28
-b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h
-(surrounded)e(b)n(y)i(white)g(space.)340 4782 y Fi(\017)45
-b Fj(White)33 b(space)e(ma)n(y)f(also)h(surround)g(attribute)g(v)-5
-b(alues,)33 b(where)e(it)h(will)g(generally)e(b)r(e)i(ignored)e
-(\(except)427 4881 y(for)24 b(string-v)-5 b(alued)23
-b(attributes)i(where)e(it)i(is)f(signi\014can)n(t)g(and)g(forms)g(part)
-f(of)i(the)f(v)-5 b(alue)25 b(to)f(b)r(e)g(assigned\).)340
-5001 y Fi(\017)45 b Fj(It)32 b(is)g(not)g(p)r(ossible)g(to)f(include)i
-(a)e(comma)g(directly)h(in)g(the)g(v)-5 b(alue)32 b(assigned)f(to)g(an)
-h(attribute)g(via)f(the)427 5101 y Ft(")p Fj(settings)p
-Ft(")j Fj(string.)56 b(T)-7 b(o)34 b(ac)n(hiev)n(e)f(this,)k(y)n(ou)d
-(should)g(use)g Ft(")p Fj(\045s)p Ft(")g Fj(format)f(and)i(supply)f
-(the)h(v)-5 b(alue)34 b(as)g(a)427 5201 y(separate)26
-b(additional)h(argumen)n(t)g(to)g(astSet)h(\(or)f(use)g(the)h(astSetC)g
-(function)g(instead\).)340 5321 y Fi(\017)45 b Fj(The)39
-b(same)g(pro)r(cedure)f(ma)n(y)g(b)r(e)h(adopted)g(if)g
-Ft(")p Fj(\045)p Ft(")g Fj(signs)f(are)g(to)h(b)r(e)g(included)h(and)e
-(are)g(not)h(to)g(b)r(e)427 5420 y(in)n(terpreted)28
-b(as)f(format)h(sp)r(eci\014ers)g(\(alternativ)n(ely)-7
-b(,)27 b(the)h Ft(")p Fj(prin)n(tf)p Ft(")g Fj(con)n(v)n(en)n(tion)f
-(of)h(writing)g Ft(")p Fj(\045\045)p Ft(")f Fj(ma)n(y)427
-5520 y(b)r(e)h(used\).)340 5640 y Fi(\017)45 b Fj(An)28
-b(error)e(will)i(result)f(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)
-f(v)-5 b(alue)27 b(for)g(a)h(read-only)e(attribute.)p
-eop end
-%%Page: 192 202
-TeXDict begin 192 201 bop 0 52 a FF(192)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astAddF)-11 b(rame)311 b Fe(Add)38 b(a)h(F)-10
-b(rame)38 b(to)g(a)h(F)-10 b(rameSet)38 b(to)1089 583
-y(de\014ne)h(a)g(new)g(co)s(ordinate)d(system)2991 483
-y Fz(astAddF)-11 b(rame)0 773 y Fd(Description:)44 b
-Fj(This)24 b(function)h(adds)f(a)g(new)g(F)-7 b(rame)23
-b(and)h(an)g(asso)r(ciated)f(Mapping)h(to)g(a)g(F)-7
-b(rameSet)23 b(so)h(as)f(to)h(de\014ne)227 873 y(a)33
-b(new)g(co)r(ordinate)f(system,)i(deriv)n(ed)e(from)h(one)g(whic)n(h)g
-(already)e(exists)i(within)h(the)f(F)-7 b(rameSet.)53
-b(The)34 b(new)227 972 y(F)-7 b(rame)27 b(then)h(b)r(ecomes)g(the)g(F)
--7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame.)227 1098
-y(This)29 b(function)g(ma)n(y)f(also)g(b)r(e)h(used)f(to)h(merge)e(t)n
-(w)n(o)h(F)-7 b(rameSets,)29 b(or)e(to)i(app)r(end)g(extra)f(axes)f(to)
-i(ev)n(ery)e(F)-7 b(rame)227 1197 y(in)28 b(a)f(F)-7
-b(rameSet.)0 1348 y Fd(Synopsis:)121 b Ft(void)42 b(astAddFrame\()c
-(AstFrameSet)h Fi(\003)p Ft(this,)i(int)i(iframe,)e(AstMapping)e
-Fi(\003)p Ft(map,)i(AstFrame)g Fi(\003)p Ft(frame)227
-1448 y(\))0 1599 y Fd(P)m(arameters:)259 1737 y(this)427
-1836 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rameSet.)259
-1970 y Fd(iframe)427 2070 y Fj(The)35 b(index)g(of)g(the)g(F)-7
-b(rame)34 b(within)i(the)f(F)-7 b(rameSet)34 b(whic)n(h)h(describ)r(es)
-f(the)h(co)r(ordinate)f(system)g(up)r(on)427 2169 y(whic)n(h)d(the)f
-(new)h(one)f(is)g(to)g(b)r(e)h(based.)45 b(This)30 b(v)-5
-b(alue)31 b(should)f(lie)g(in)h(the)g(range)e(from)h(1)g(to)g(the)h(n)n
-(um)n(b)r(er)427 2269 y(of)36 b(F)-7 b(rames)35 b(already)g(in)h(the)g
-(F)-7 b(rameSet)36 b(\(as)f(giv)n(en)g(b)n(y)h(its)g(Nframe)f
-(attribute\).)62 b(As)36 b(a)g(sp)r(ecial)f(case,)427
-2369 y(AST)p Ft(__)p Fj(ALLFRAMES)25 b(ma)n(y)g(b)r(e)g(supplied,)h(in)
-f(whic)n(h)g(case)g(the)g(axes)f(de\014ned)i(b)n(y)e(the)i(supplied)f
-(F)-7 b(rame)427 2468 y(are)27 b(app)r(ended)h(to)f(ev)n(ery)g(F)-7
-b(rame)27 b(in)g(the)h(F)-7 b(rameSet)28 b(\(see)f(the)h(Notes)g
-(section)f(for)g(details\).)259 2602 y Fd(map)427 2701
-y Fj(P)n(oin)n(ter)33 b(to)g(a)h(Mapping)g(whic)n(h)g(describ)r(es)f
-(ho)n(w)g(to)h(con)n(v)n(ert)f(co)r(ordinates)f(from)i(the)g(old)g(co)r
-(ordinate)427 2801 y(system)20 b(\(describ)r(ed)h(b)n(y)f(the)h(F)-7
-b(rame)20 b(with)h(index)f Ft(")p Fj(iframe)p Ft(")p
-Fj(\))g(in)n(to)g(co)r(ordinates)f(in)i(the)g(new)f(system.)35
-b(The)427 2901 y(Mapping's)21 b(forw)n(ard)e(transformation)g(should)i
-(p)r(erform)g(this)g(con)n(v)n(ersion,)f(and)h(its)g(in)n(v)n(erse)f
-(transforma-)427 3000 y(tion)28 b(should)g(con)n(v)n(ert)e(in)j(the)f
-(opp)r(osite)g(direction.)37 b(The)28 b(supplied)g(Mapping)g(is)g
-(ignored)f(if)h(parameter)427 3100 y Ft(")p Fj(iframe)p
-Ft(")p Fj(is)e(equal)i(to)f(AST)p Ft(__)p Fj(ALLFRAMES.)259
-3234 y Fd(frame)427 3333 y Fj(P)n(oin)n(ter)k(to)i(a)f(F)-7
-b(rame)32 b(that)h(describ)r(es)e(the)i(new)g(co)r(ordinate)e(system.)
-52 b(An)n(y)32 b(class)g(of)g(F)-7 b(rame)32 b(ma)n(y)g(b)r(e)427
-3433 y(supplied)c(\(including)g(Regions)f(and)g(F)-7
-b(rameSets\).)427 3549 y(This)29 b(function)h(ma)n(y)e(also)h(b)r(e)g
-(used)g(to)g(merge)f(t)n(w)n(o)h(F)-7 b(rameSets)28 b(b)n(y)h
-(supplying)g(a)g(p)r(oin)n(ter)g(to)g(a)f(second)427
-3649 y(F)-7 b(rameSet)28 b(for)f(this)h(parameter)e(\(see)h(the)h
-(Notes)g(section)f(for)g(details\).)0 3813 y Fd(Notes:)340
-4097 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)30 b(of)h(AST)p
-Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p Fj(CURRENT)h(ma)n(y)f(b)r(e)h(giv)
-n(en)g(for)f(the)h Ft(")p Fj(iframe)p Ft(")f Fj(parameter)g(to)427
-4196 y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n
-(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 4330
-y Fi(\017)45 b Fj(This)25 b(function)g(sets)g(the)g(v)-5
-b(alue)25 b(of)f(the)h(Curren)n(t)f(attribute)h(for)f(the)i(F)-7
-b(rameSet)24 b(so)g(that)h(the)g(new)g(F)-7 b(rame)427
-4429 y(subsequen)n(tly)27 b(b)r(ecomes)h(the)g(curren)n(t)e(F)-7
-b(rame.)340 4563 y Fi(\017)45 b Fj(The)26 b(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinate)e(v)-5 b(alues)25 b(accepted)g(b)n(y)g(the)g
-(supplied)h(Mapping)f(\(its)g(Nin)h(attribute\))427 4663
-y(m)n(ust)e(matc)n(h)f(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(in)i(the)g
-(F)-7 b(rame)22 b(iden)n(ti\014ed)i(b)n(y)f(the)h Ft(")p
-Fj(iframe)p Ft(")e Fj(parameter.)34 b(Similarly)-7 b(,)427
-4762 y(the)25 b(n)n(um)n(b)r(er)g(of)f(output)h(co)r(ordinate)f(v)-5
-b(alues)24 b(generated)g(b)n(y)g(this)h(Mapping)f(\(its)h(Nout)g
-(attribute\))g(m)n(ust)427 4862 y(matc)n(h)j(the)g(n)n(um)n(b)r(er)f
-(of)h(axes)e(in)i(the)g(new)g(F)-7 b(rame.)340 4996 y
-Fi(\017)45 b Fj(As)23 b(a)e(sp)r(ecial)h(case,)h(if)f(a)g(p)r(oin)n
-(ter)g(to)g(a)f(F)-7 b(rameSet)22 b(is)g(giv)n(en)g(for)f(the)i
-Ft(")p Fj(frame)p Ft(")e Fj(parameter,)h(this)g(is)g(treated)427
-5095 y(as)j(a)h(request)f(to)g(merge)g(a)g(pair)g(of)h(F)-7
-b(rameSets.)36 b(This)26 b(is)f(done)h(b)n(y)f(app)r(ending)h(all)f
-(the)h(new)g(F)-7 b(rames)25 b(\(in)427 5195 y(the)31
-b Ft(")p Fj(frame)p Ft(")e Fj(F)-7 b(rameSet\))30 b(to)g(the)g
-(original)f(F)-7 b(rameSet,)31 b(while)f(preserving)f(their)h(order)e
-(and)i(retaining)427 5295 y(all)h(the)g(in)n(ter-relationships)d
-(\(i.e.)47 b(Mappings\))30 b(b)r(et)n(w)n(een)h(them.)46
-b(The)31 b(t)n(w)n(o)f(sets)g(of)h(F)-7 b(rames)30 b(are)f(in)n(ter-)
-427 5394 y(related)35 b(within)h(the)g(merged)f(F)-7
-b(rameSet)35 b(b)n(y)g(using)g(the)h(Mapping)f(supplied.)61
-b(This)36 b(should)f(con)n(v)n(ert)427 5494 y(b)r(et)n(w)n(een)29
-b(the)h(F)-7 b(rame)29 b(iden)n(ti\014ed)g(b)n(y)g(the)h
-Ft(")p Fj(iframe)p Ft(")e Fj(parameter)g(\(in)i(the)f(original)f(F)-7
-b(rameSet\))29 b(and)g(the)427 5593 y(curren)n(t)23 b(F)-7
-b(rame)23 b(of)h(the)g Ft(")p Fj(frame)p Ft(")e Fj(F)-7
-b(rameSet.)36 b(This)23 b(latter)h(F)-7 b(rame)23 b(b)r(ecomes)g(the)h
-(curren)n(t)f(F)-7 b(rame)23 b(in)h(the)427 5693 y(merged)j(F)-7
-b(rameSet.)p eop end
-%%Page: 193 203
-TeXDict begin 193 202 bop 3643 52 a FF(193)340 351 y
-Fi(\017)45 b Fj(As)22 b(another)e(sp)r(ecial)i(case,)f(if)h(a)f(v)-5
-b(alue)22 b(of)f(AST)p Ft(__)p Fj(ALLFRAMES)h(is)f(supplied)h(for)f
-(parameter)f Ft(")p Fj(iframe)p Ft(")p Fj(,)427 451 y(then)33
-b(the)g(supplied)g(Mapping)f(is)g(ignored,)h(and)f(the)h(axes)e
-(de\014ned)i(b)n(y)f(the)h(supplied)g(F)-7 b(rame)32
-b(are)f(ap-)427 551 y(p)r(ended)c(to)e(eac)n(h)g(F)-7
-b(rame)25 b(in)h(the)g(F)-7 b(rameSet.)36 b(In)26 b(detail,)g(eac)n(h)e
-(F)-7 b(rame)25 b(in)h(the)g(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n(y)
-427 650 y(a)30 b(CmpF)-7 b(rame)30 b(con)n(taining)f(the)h(original)e
-(F)-7 b(rame)30 b(and)g(the)g(F)-7 b(rame)29 b(sp)r(eci\014ed)i(b)n(y)e
-(parameter)g Ft(")p Fj(frame)p Ft(")p Fj(.)427 750 y(In)d(addition,)g
-(eac)n(h)f(Mapping)g(in)h(the)f(F)-7 b(rameSet)26 b(is)f(replaced)g(b)n
-(y)g(a)g(CmpMap)h(con)n(taining)e(the)i(original)427
-849 y(Mapping)32 b(and)g(a)g(UnitMap)g(in)g(parallel.)50
-b(The)32 b(Nin)g(and)g(Nout)g(attributes)g(of)g(the)h(UnitMap)g(are)e
-(set)427 949 y(equal)g(to)g(the)h(n)n(um)n(b)r(er)f(of)g(axes)g(in)g
-(the)h(supplied)g(F)-7 b(rame.)47 b(Eac)n(h)30 b(new)i(CmpMap)f(is)g
-(simpli\014ed)h(using)427 1049 y(astSimplify)c(b)r(efore)g(b)r(eing)f
-(stored)g(in)h(the)g(F)-7 b(rameSet.)p 0 1304 3780 12
-v 0 1435 a Fz(astAngle)164 b Fe(Calculate)37 b(the)h(angle)g(subtended)
-h(b)m(y)f(t)m(w)m(o)f(p)s(oin)m(ts)h(at)1561 1550 y(a)h(third)f(p)s
-(oin)m(t)3267 1435 y Fz(astAngle)0 1794 y Fd(Description:)44
-b Fj(This)26 b(function)g(\014nds)g(the)g(angle)f(at)h(p)r(oin)n(t)f(B)
-h(b)r(et)n(w)n(een)g(the)g(line)f(joining)h(p)r(oin)n(ts)g(A)g(and)f
-(B,)h(and)f(the)227 1894 y(line)31 b(joining)g(p)r(oin)n(ts)f(C)h(and)g
-(B.)f(These)h(lines)f(will)h(in)g(fact)g(b)r(e)g(geo)r(desic)f(curv)n
-(es)f(appropriate)g(to)i(the)g(F)-7 b(rame)227 1994 y(in)28
-b(use.)37 b(F)-7 b(or)27 b(instance,)g(in)h(SkyF)-7 b(rame,)27
-b(they)h(will)g(b)r(e)g(great)e(circles.)0 2199 y Fd(Synopsis:)121
-b Ft(double)41 b(astAngle\()f(AstFrame)g Fi(\003)p Ft(this,)h(const)h
-(double)f(a[],)h(const)f(double)g(b[],)h(const)g(double)227
-2298 y(c[])h(\))0 2504 y Fd(P)m(arameters:)259 2696 y(this)427
-2795 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259
-2956 y Fd(a)427 3056 y Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)
-e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h
-(attribute\))g(con)n(taining)f(the)427 3155 y(co)r(ordinates)c(of)i
-(the)g(\014rst)f(p)r(oin)n(t.)259 3316 y Fd(b)427 3416
-y Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e
-(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 3515 y(co)r(ordinates)c(of)i(the)g(second)f(p)r(oin)
-n(t.)259 3676 y Fd(c)427 3776 y Fj(An)32 b(arra)n(y)c(of)j(double,)h
-(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31
-b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)427
-3875 y(co)r(ordinates)c(of)i(the)g(third)g(p)r(oin)n(t.)0
-4093 y Fd(Returned)k(V)-8 b(alue:)259 4285 y(astAngle)427
-4385 y Fj(The)29 b(angle)e(in)i(radians,)e(from)h(the)g(line)h(AB)f(to)
-g(the)h(line)f(CB.)g(If)h(the)g(F)-7 b(rame)27 b(is)i(2-dimensional,)e
-(it)h(will)427 4484 y(b)r(e)33 b(in)f(the)h(range)e($)p
-Fi(n)p Fj(pm)h Fi(n)p Fj(pi$,)h(and)f(p)r(ositiv)n(e)g(rotation)f(is)h
-(in)g(the)h(same)f(sense)g(as)f(rotation)g(from)h(the)427
-4584 y(p)r(ositiv)n(e)d(direction)g(of)g(axis)f(2)h(to)g(the)h(p)r
-(ositiv)n(e)e(direction)h(of)g(axis)g(1.)41 b(If)30 b(the)f(F)-7
-b(rame)29 b(has)f(more)h(than)g(2)427 4683 y(axes,)e(a)g(p)r(ositiv)n
-(e)g(v)-5 b(alue)28 b(will)g(alw)n(a)n(ys)d(b)r(e)j(returned)f(in)h
-(the)g(range)f(zero)f(to)i($)p Fi(n)p Fj(pi$.)0 4901
-y Fd(Notes:)340 5239 y Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)26
-b(of)h(AST)p Ft(__)p Fj(BAD)f(will)h(also)e(b)r(e)i(returned)f(if)h(p)r
-(oin)n(ts)f(A)h(and)f(B)g(are)g(co-inciden)n(t,)g(or)f(if)i(p)r(oin)n
-(ts)g(B)427 5339 y(and)h(C)f(are)g(co-inciden)n(t.)340
-5500 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)31 b(of)g(AST)p
-Ft(__)p Fj(BAD)h(will)f(also)f(b)r(e)i(returned)f(if)h(this)f(function)
-h(is)g(in)n(v)n(ok)n(ed)d(with)j(the)g(AST)g(error)427
-5599 y(status)c(set,)f(or)g(if)h(it)g(should)g(fail)f(for)g(an)n(y)g
-(reason.)p eop end
-%%Page: 194 204
-TeXDict begin 194 203 bop 0 52 a FF(194)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astAnn)l(ul)607 b Fe(Ann)m(ul)38 b(a)h(p)s(oin)m(ter)e(to)h
-(an)h(Ob)7 b(ject)605 b Fz(astAnn)l(ul)0 665 y Fd(Description:)44
-b Fj(This)31 b(function)f(ann)n(uls)g(a)g(p)r(oin)n(ter)g(to)g(an)g(Ob)
-5 b(ject)30 b(so)g(that)h(it)f(is)g(no)g(longer)f(recognised)g(as)h(a)g
-(v)-5 b(alid)227 765 y(p)r(oin)n(ter)37 b(b)n(y)h(the)g(AST)g(library)
--7 b(.)66 b(An)n(y)37 b(resources)f(asso)r(ciated)g(with)i(the)g(p)r
-(oin)n(ter)f(are)g(released)f(and)i(made)227 864 y(a)n(v)-5
-b(ailable)27 b(for)g(re-use.)227 987 y(This)33 b(function)h(also)e
-(decremen)n(ts)h(the)g(Ob)5 b(ject's)33 b(RefCoun)n(t)g(attribute)h(b)n
-(y)f(one.)53 b(If)33 b(this)h(attribute)f(reac)n(hes)227
-1087 y(zero)27 b(\(whic)n(h)h(happ)r(ens)f(when)h(the)g(last)f(p)r(oin)
-n(ter)g(to)h(the)g(Ob)5 b(ject)27 b(is)h(ann)n(ulled\),)g(then)g(the)g
-(Ob)5 b(ject)27 b(is)h(deleted.)0 1233 y Fd(Synopsis:)121
-b Ft(AstObject)40 b Fi(\003)p Ft(astAnnul\()f(AstObject)h
-Fi(\003)p Ft(this)h(\))0 1379 y Fd(P)m(arameters:)259
-1513 y(this)427 1612 y Fj(The)28 b(Ob)5 b(ject)27 b(p)r(oin)n(ter)h(to)
-f(b)r(e)h(ann)n(ulled.)0 1771 y Fd(Class)j(Applicabilit)m(y:)259
-1904 y(Ob)5 b(ject)427 2004 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 2162 y Fd(Returned)32 b(V)-8 b(alue:)259
-2295 y(astAnn)m(ul\(\))427 2395 y Fj(A)28 b(n)n(ull)g(Ob)5
-b(ject)27 b(p)r(oin)n(ter)h(\(AST)p Ft(__)p Fj(NULL\))g(is)f(alw)n(a)n
-(ys)f(returned.)0 2554 y Fd(Notes:)340 2833 y Fi(\017)45
-b Fj(This)27 b(function)h(will)f(attempt)h(to)f(ann)n(ul)g(the)h(p)r
-(oin)n(ter)e(ev)n(en)h(if)h(the)f(Ob)5 b(ject)27 b(is)g(not)g(curren)n
-(tly)g(lo)r(c)n(k)n(ed)f(b)n(y)427 2932 y(the)i(calling)f(thread)g
-(\(see)h(astLo)r(c)n(k\).)340 3062 y Fi(\017)45 b Fj(This)38
-b(function)g(attempts)g(to)g(execute)g(ev)n(en)f(if)h(the)g(AST)g
-(error)e(status)i(is)f(set)h(on)f(en)n(try)-7 b(,)40
-b(although)427 3162 y(no)34 b(further)f(error)f(rep)r(ort)h(will)h(b)r
-(e)g(made)g(if)g(it)g(subsequen)n(tly)f(fails)h(under)f(these)h
-(circumstances.)54 b(In)427 3261 y(particular,)27 b(it)i(will)f(fail)g
-(if)h(the)f(p)r(oin)n(ter)g(suppled)g(is)g(not)g(v)-5
-b(alid,)28 b(but)h(this)f(will)g(only)g(b)r(e)g(rep)r(orted)g(if)g(the)
-427 3361 y(error)e(status)h(is)h(clear)e(on)i(en)n(try)-7
-b(.)p 0 3554 V 0 3685 a Fz(astAxAngle)163 b Fe(Returns)38
-b(the)h(angle)f(from)f(an)h(axis,)g(to)g(a)h(line)1402
-3800 y(through)e(t)m(w)m(o)g(p)s(oin)m(ts)3094 3685 y
-Fz(astAxAngle)0 3982 y Fd(Description:)44 b Fj(This)32
-b(function)h(\014nds)g(the)f(angle,)h(as)e(seen)h(from)g(p)r(oin)n(t)g
-(A,)h(b)r(et)n(w)n(een)f(the)g(p)r(ositiv)n(e)g(direction)g(of)g(a)227
-4082 y(sp)r(eci\014ed)c(axis,)f(and)g(the)h(geo)r(desic)f(curv)n(e)g
-(joining)g(p)r(oin)n(t)h(A)g(to)f(p)r(oin)n(t)h(B.)0
-4228 y Fd(Synopsis:)121 b Ft(double)41 b(astAxAngle\()e(AstFrame)h
-Fi(\003)p Ft(this,)h(const)h(double)f(a[],)h(const)f(double)g(b[],)h
-(int)h(axis)227 4328 y(\))0 4474 y Fd(P)m(arameters:)259
-4607 y(this)427 4707 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4836 y Fd(a)427 4936 y Fj(An)32 b(arra)n(y)c(of)j(double,)h
-(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31
-b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)427
-5035 y(co)r(ordinates)c(of)i(the)g(\014rst)f(p)r(oin)n(t.)259
-5165 y Fd(b)427 5265 y Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)
-e(elemen)n(t)i(for)e(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h
-(attribute\))g(con)n(taining)f(the)427 5364 y(co)r(ordinates)c(of)i
-(the)g(second)f(p)r(oin)n(t.)259 5494 y Fd(axis)427 5593
-y Fj(The)d(n)n(um)n(b)r(er)g(of)f(the)h(F)-7 b(rame)24
-b(axis)f(from)g(whic)n(h)h(the)g(angle)f(is)g(to)h(b)r(e)g(measured)f
-(\(axis)g(n)n(um)n(b)r(ering)g(starts)427 5693 y(at)28
-b(1)f(for)g(the)h(\014rst)f(axis\).)p eop end
-%%Page: 195 205
-TeXDict begin 195 204 bop 3643 52 a FF(195)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 522 y(astAxAngle)427 622 y Fj(The)29
-b(angle)g(in)g(radians,)f(from)h(the)g(p)r(ositiv)n(e)g(direction)f(of)
-h(the)h(sp)r(eci\014ed)f(axis,)g(to)g(the)g(line)g(AB.)h(If)f(the)427
-722 y(F)-7 b(rame)28 b(is)g(2-dimensional,)g(it)g(will)h(b)r(e)g(in)f
-(the)h(range)e([-PI/2,+PI/2],)e(and)j(p)r(ositiv)n(e)g(rotation)f(is)i
-(in)f(the)427 821 y(same)j(sense)f(as)g(rotation)g(from)g(the)i(p)r
-(ositiv)n(e)e(direction)g(of)h(axis)f(2)h(to)f(the)i(p)r(ositiv)n(e)e
-(direction)h(of)f(axis)427 921 y(1.)43 b(If)30 b(the)g(F)-7
-b(rame)30 b(has)f(more)g(than)h(2)f(axes,)g(a)h(p)r(ositiv)n(e)f(v)-5
-b(alue)30 b(will)g(alw)n(a)n(ys)d(b)r(e)k(returned)e(in)h(the)g(range)
-427 1021 y(zero)d(to)g(PI.)0 1217 y Fd(Notes:)340 1534
-y Fi(\017)45 b Fj(The)26 b(geo)r(desic)e(curv)n(e)h(used)g(b)n(y)g
-(this)h(function)g(is)f(the)h(path)f(of)h(shortest)e(distance)i(b)r(et)
-n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427 1634 y(as)i(de\014ned)h(b)n
-(y)f(the)h(astDistance)g(function.)340 1784 y Fi(\017)45
-b Fj(This)19 b(function)g(will)g(return)f Ft(")p Fj(bad)p
-Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18 b(\(AST)p Ft(__)p
-Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r(ordinates)427
-1884 y(has)27 b(this)h(v)-5 b(alue,)28 b(or)e(if)j(the)f(require)e(p)r
-(osition)h(angle)g(is)h(unde\014ned.)p 0 2118 3780 12
-v 0 2249 a Fz(astAxDistance)256 b Fe(Find)39 b(the)g(distance)e(b)s(et)
-m(w)m(een)h(t)m(w)m(o)1616 2349 y(axis)g(v)-7 b(alues)2929
-2249 y Fz(astAxDistance)0 2549 y Fd(Description:)44 b
-Fj(This)32 b(function)h(returns)e(a)h(signed)f(v)-5 b(alue)32
-b(represen)n(ting)e(the)j(axis)e(incremen)n(t)h(from)f(axis)g(v)-5
-b(alue)32 b(v1)227 2649 y(to)c(axis)f(v)-5 b(alue)27
-b(v2.)227 2791 y(F)-7 b(or)24 b(a)g(simple)h(F)-7 b(rame,)25
-b(this)g(is)f(a)h(trivial)f(op)r(eration)f(returning)h(the)h
-(di\013erence)g(b)r(et)n(w)n(een)f(the)h(t)n(w)n(o)f(axis)g(v)-5
-b(alues.)227 2891 y(But)28 b(for)f(other)g(deriv)n(ed)g(classes)f(of)i
-(F)-7 b(rame)27 b(\(suc)n(h)h(as)e(a)i(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 3075 y Fd(Synopsis:)121
-b Ft(double)41 b(astAxDistance\()d(AstFrame)i Fi(\003)p
-Ft(this,)h(int)h(axis,)g(double)f(v1,)h(double)f(v2)i(\))0
-3259 y Fd(P)m(arameters:)259 3430 y(this)427 3530 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 3680 y Fd(axis)427 3779
-y Fj(The)28 b(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h(the)g(supplied)
-g(v)-5 b(alues)27 b(refer.)36 b(The)28 b(\014rst)f(axis)g(has)g(index)h
-(1.)259 3930 y Fd(v1)427 4029 y Fj(The)g(\014rst)f(axis)g(v)-5
-b(alue.)259 4179 y Fd(v2)427 4279 y Fj(The)28 b(second)f(axis)g(v)-5
-b(alue.)0 4476 y Fd(Returned)32 b(V)-8 b(alue:)259 4647
-y(astAxDistance)427 4746 y Fj(The)28 b(distance)f(from)h(the)f(\014rst)
-h(to)f(the)h(second)f(axis)g(v)-5 b(alue.)0 4943 y Fd(Notes:)340
-5260 y Fi(\017)45 b Fj(This)33 b(function)g(will)f(return)g(a)g
-Ft(")p Fj(bad)p Ft(")f Fj(result)h(v)-5 b(alue)33 b(\(AST)p
-Ft(__)p Fj(BAD\))g(if)f(an)n(y)g(of)g(the)h(input)g(v)-5
-b(alues)32 b(has)427 5360 y(this)c(v)-5 b(alue.)340 5510
-y Fi(\017)45 b Fj(A)27 b Ft(")p Fj(bad)p Ft(")e Fj(v)-5
-b(alue)26 b(will)g(also)f(b)r(e)i(returned)e(if)i(this)f(function)h(is)
-f(in)n(v)n(ok)n(ed)f(with)h(the)h(AST)f(error)f(status)h(set,)427
-5610 y(or)h(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)p
-eop end
-%%Page: 196 206
-TeXDict begin 196 205 bop 0 52 a FF(196)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astAxO\013set)209 b Fe(Add)39 b(an)g(incremen)m(t)e(on)m(to)
-g(a)i(supplied)f(axis)1758 598 y(v)-7 b(alue)3090 483
-y Fz(astAxO\013set)0 769 y Fd(Description:)44 b Fj(This)39
-b(function)g(returns)f(an)g(axis)g(v)-5 b(alue)39 b(formed)f(b)n(y)g
-(adding)h(a)f(signed)g(axis)g(incremen)n(t)g(on)n(to)g(a)227
-868 y(supplied)28 b(axis)f(v)-5 b(alue.)227 996 y(F)e(or)29
-b(a)h(simple)g(F)-7 b(rame,)29 b(this)i(is)e(a)h(trivial)f(op)r
-(eration)f(returning)h(the)i(sum)e(of)h(the)g(t)n(w)n(o)f(supplied)h(v)
--5 b(alues.)43 b(But)227 1095 y(for)27 b(other)g(deriv)n(ed)g(classes)f
-(of)i(F)-7 b(rame)27 b(\(suc)n(h)h(as)f(a)g(SkyF)-7 b(rame\))27
-b(this)h(is)f(not)h(the)g(case.)0 1250 y Fd(Synopsis:)121
-b Ft(double)41 b(astAxOffset\()e(AstFrame)h Fi(\003)p
-Ft(this,)h(int)h(axis,)g(double)f(v1,)h(double)f(dist)h(\))0
-1405 y Fd(P)m(arameters:)259 1547 y(this)427 1647 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 1782 y Fd(axis)427 1882
-y Fj(The)28 b(index)g(of)f(the)h(axis)f(to)g(whic)n(h)h(the)g(supplied)
-g(v)-5 b(alues)27 b(refer.)36 b(The)28 b(\014rst)f(axis)g(has)g(index)h
-(1.)259 2018 y Fd(v1)427 2117 y Fj(The)g(original)e(axis)h(v)-5
-b(alue.)259 2253 y Fd(dist)427 2353 y Fj(The)28 b(axis)f(incremen)n(t)g
-(to)h(add)f(to)g(the)h(original)e(axis)h(v)-5 b(alue.)0
-2520 y Fd(Returned)32 b(V)-8 b(alue:)259 2662 y(astAxO\013set)427
-2762 y Fj(The)28 b(incremen)n(ted)f(axis)g(v)-5 b(alue.)0
-2929 y Fd(Notes:)340 3217 y Fi(\017)45 b Fj(This)33 b(function)g(will)f
-(return)g(a)g Ft(")p Fj(bad)p Ft(")f Fj(result)h(v)-5
-b(alue)33 b(\(AST)p Ft(__)p Fj(BAD\))g(if)f(an)n(y)g(of)g(the)h(input)g
-(v)-5 b(alues)32 b(has)427 3317 y(this)c(v)-5 b(alue.)340
-3452 y Fi(\017)45 b Fj(A)27 b Ft(")p Fj(bad)p Ft(")e
-Fj(v)-5 b(alue)26 b(will)g(also)f(b)r(e)i(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)f(with)h(the)h(AST)f(error)f(status)h
-(set,)427 3552 y(or)h(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 3757 V 0 3889 a Fz(astBegin)1229 3887 y Fe(Begin)38
-b(a)g(new)h(AST)f(con)m(text)3272 3889 y Fz(astBegin)0
-4083 y Fd(Description:)44 b Fj(This)27 b(macro)e(in)n(v)n(ok)n(es)f(a)i
-(function)h(to)f(b)r(egin)g(a)g(new)h(AST)f(con)n(text.)36
-b(An)n(y)27 b(Ob)5 b(ject)26 b(p)r(oin)n(ters)f(created)227
-4183 y(within)32 b(this)f(con)n(text)f(will)h(b)r(e)g(ann)n(ulled)f
-(when)h(it)g(is)f(later)g(ended)h(using)g(astEnd)f(\(just)h(as)f(if)h
-(astAnn)n(ul)g(had)227 4282 y(b)r(een)38 b(in)n(v)n(ok)n(ed\),)h
-(unless)e(they)g(ha)n(v)n(e)g(\014rst)g(b)r(een)g(exp)r(orted)g(using)g
-(astExp)r(ort)f(or)h(rendered)f(exempt)i(using)227 4382
-y(astExempt.)58 b(If)35 b(ann)n(ulling)f(a)g(p)r(oin)n(ter)h(causes)e
-(an)i(Ob)5 b(ject's)34 b(RefCoun)n(t)h(attribute)g(to)f(fall)h(to)g
-(zero)e(\(whic)n(h)227 4481 y(happ)r(ens)28 b(when)g(the)g(last)f(p)r
-(oin)n(ter)g(to)h(it)g(is)f(ann)n(ulled\),)h(then)g(the)g(Ob)5
-b(ject)27 b(will)h(b)r(e)g(deleted.)0 4636 y Fd(Synopsis:)121
-b Ft(void)42 b(astBegin)0 4792 y Fd(Class)31 b(Applicabilit)m(y:)259
-4933 y(Ob)5 b(ject)427 5033 y Fj(This)28 b(macro)e(applies)h(to)h(all)f
-(Ob)5 b(jects.)0 5201 y Fd(Notes:)340 5489 y Fi(\017)45
-b Fj(astBegin)27 b(attempts)h(to)f(execute)h(ev)n(en)f(if)h(the)g(AST)g
-(error)e(status)h(is)h(set)f(on)g(en)n(try)-7 b(.)340
-5624 y Fi(\017)45 b Fj(Con)n(texts)27 b(delimited)i(b)n(y)e(astBegin)g
-(and)g(astEnd)g(ma)n(y)g(b)r(e)h(nested)g(to)f(an)n(y)g(depth.)p
-eop end
-%%Page: 197 207
-TeXDict begin 197 206 bop 3643 52 a FF(197)p 0 351 3780
-12 v 0 483 a Fz(astBorder)156 b Fe(Dra)m(w)38 b(a)g(b)s(order)g(around)
-g(v)-7 b(alid)38 b(regions)f(of)i(a)f(Plot)154 b Fz(astBorder)0
-678 y Fd(Description:)44 b Fj(This)32 b(function)h(dra)n(ws)e(a)h
-(\(line\))h(b)r(order)e(around)g(regions)g(of)h(the)g(plotting)h(area)d
-(of)i(a)g(Plot)g(whic)n(h)227 778 y(corresp)r(ond)d(to)h(v)-5
-b(alid,)30 b(unclipp)r(ed)h(ph)n(ysical)f(co)r(ordinates.)42
-b(F)-7 b(or)30 b(example,)g(when)g(plotting)g(using)g(an)g(all-sky)227
-878 y(map)g(pro)5 b(jection,)29 b(this)h(function)g(could)f(b)r(e)h
-(used)g(to)f(dra)n(w)g(the)h(b)r(oundary)f(of)g(the)h(celestial)f
-(sphere)g(when)h(it)227 977 y(is)e(pro)5 b(jected)27
-b(on)g(to)g(the)h(plotting)g(surface.)227 1103 y(If)k(the)g(en)n(tire)f
-(plotting)g(area)f(con)n(tains)h(v)-5 b(alid,)32 b(unclipp)r(ed)g(ph)n
-(ysical)f(co)r(ordinates,)g(then)h(the)g(b)r(oundary)e(will)227
-1202 y(just)e(b)r(e)g(a)g(rectangular)d(b)r(o)n(x)i(around)g(the)h
-(edges)f(of)g(the)h(plotting)g(area.)227 1328 y(If)19
-b(the)g(Plot)f(is)h(a)f(Plot3D,)g(this)h(metho)r(d)g(is)f(applied)h
-(individually)g(to)f(eac)n(h)g(of)g(the)h(three)g(2D)f(Plots)g
-(encapsulated)227 1427 y(within)23 b(the)g(Plot3D)f(\(eac)n(h)f(of)i
-(these)f(Plots)f(corresp)r(onds)g(to)h(a)g(single)g(2D)g(plane)g(in)h
-(the)f(3D)h(graphics)d(system\).)227 1527 y(In)36 b(addition,)i(if)e
-(the)g(en)n(tire)f(plotting)h(v)n(olume)e(has)i(v)-5
-b(alid)35 b(co)r(ordinates)f(in)i(the)g(3D)g(curren)n(t)f(F)-7
-b(rame)35 b(of)g(the)227 1627 y(Plot3D,)g(then)i(additional)e(lines)g
-(are)g(dra)n(wn)g(along)f(the)i(edges)f(of)h(the)g(3D)f(plotting)h(v)n
-(olume)f(so)g(that)h(the)227 1726 y(en)n(tire)27 b(plotting)h(v)n
-(olume)f(is)h(enclosed)e(within)j(a)e(cub)r(oid)h(grid.)0
-1878 y Fd(Synopsis:)121 b Ft(int)42 b(astBorder\()e(AstPlot)g
-Fi(\003)p Ft(this)i(\))0 2029 y Fd(P)m(arameters:)259
-2167 y(this)427 2267 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)0
-2431 y Fd(Returned)k(V)-8 b(alue:)259 2569 y(astBorder\(\))427
-2669 y Fj(Zero)36 b(is)i(returned)f(if)h(the)f(plotting)h(space)e(is)i
-(completely)f(\014lled)h(b)n(y)f(v)-5 b(alid,)40 b(unclipp)r(ed)e(ph)n
-(ysical)e(co-)427 2768 y(ordinates)e(\(so)g(that)h(only)f(a)h
-(rectangular)d(b)r(o)n(x)j(w)n(as)e(dra)n(wn)h(around)g(the)h(edge\).)
-58 b(Otherwise,)35 b(one)g(is)427 2868 y(returned.)0
-3032 y Fd(Notes:)340 3316 y Fi(\017)45 b Fj(A)29 b(v)-5
-b(alue)29 b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h(this)g(function)
-g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d(status)j(set,)f
-(or)427 3416 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)340
-3549 y Fi(\017)45 b Fj(An)23 b(error)e(results)h(if)i(either)e(the)h
-(curren)n(t)f(F)-7 b(rame)22 b(or)g(the)h(base)f(F)-7
-b(rame)23 b(of)f(the)h(Plot)g(is)f(not)h(2-dimensional)427
-3649 y(or)k(\(for)g(a)h(Plot3D\))f(3-dimensional.)340
-3783 y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(base)f(and)h(curren)n(t)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3882 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranF)g(orw)n(ard)25
-b(attribute)j(is)g(zero\).)p 0 4084 V 0 4215 a Fz(astBoundingBo)l(x)234
-b Fe(Return)39 b(a)f(b)s(ounding)g(b)s(o)m(x)g(for)1221
-4330 y(previously)f(dra)m(wn)g(graphics)2812 4215 y Fz(astBoundingBo)l
-(x)0 4521 y Fd(Description:)44 b Fj(This)27 b(function)f(returns)g(the)
-h(b)r(ounds)f(of)g(a)g(b)r(o)n(x)g(whic)n(h)g(just)h(encompasess)d(the)
-j(graphics)e(pro)r(duced)227 4620 y(b)n(y)c(the)g(previous)f(call)h(to)
-g(an)n(y)f(of)h(the)h(Plot)e(metho)r(ds)h(whic)n(h)g(pro)r(duce)g
-(graphical)f(output.)35 b(If)21 b(no)g(suc)n(h)g(previous)227
-4720 y(call)26 b(has)f(y)n(et)g(b)r(een)i(made,)f(or)e(if)j(the)f(call)
-f(failed)h(for)f(an)n(y)g(reason,)g(then)h(the)g(b)r(ounding)g(b)r(o)n
-(x)g(returned)f(b)n(y)g(this)227 4819 y(function)j(is)g(unde\014ned.)0
-4971 y Fd(Synopsis:)121 b Ft(void)42 b(astBoundingBox\()37
-b(AstPlot)k Fi(\003)p Ft(this,)g(float)g(lbnd[2],)g(float)g(ubnd[2])g
-(\))0 5122 y Fd(P)m(arameters:)259 5260 y(this)427 5360
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 5494 y Fd(lbnd)427
-5593 y Fj(A)e(t)n(w)n(o)f(elemen)n(t)g(arra)n(y)e(in)j(whic)n(h)f(is)g
-(returned)g(the)h(lo)n(w)n(er)e(limits)i(of)f(the)h(b)r(ounding)f(b)r
-(o)n(x)g(on)g(eac)n(h)g(of)g(the)427 5693 y(t)n(w)n(o)i(axes)g(of)g
-(the)h(graphics)e(co)r(ordinate)h(system)g(\(the)h(base)f(F)-7
-b(rame)28 b(of)f(the)h(Plot\).)p eop end
-%%Page: 198 208
-TeXDict begin 198 207 bop 0 52 a FF(198)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(ubnd)427
-451 y Fj(A)j(t)n(w)n(o)f(elemen)n(t)g(arra)n(y)e(in)j(whic)n(h)f(is)h
-(returned)f(the)h(upp)r(er)f(limits)h(of)g(the)f(b)r(ounding)h(b)r(o)n
-(x)f(on)g(eac)n(h)g(of)427 551 y(the)c(t)n(w)n(o)f(axes)g(of)g(the)h
-(graphics)e(co)r(ordinate)h(system)g(\(the)h(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot\).)0 723 y Fd(Notes:)340
-1017 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-0 1227 3780 12 v 0 1357 a Fz(astBo)l(x)1152 b Fe(Create)38
-b(a)g(Bo)m(x)1151 b Fz(astBo)l(x)0 1534 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(Bo)n(x)g(and)g
-(optionally)g(initialises)g(its)h(attributes.)227 1664
-y(The)35 b(Bo)n(x)f(class)g(implemen)n(ts)i(a)e(Region)g(whic)n(h)h
-(represen)n(ts)f(a)g(b)r(o)n(x)h(with)g(sides)g(parallel)f(to)h(the)g
-(axes)f(of)h(a)227 1764 y(F)-7 b(rame)36 b(\(i.e.)64
-b(an)36 b(area)f(whic)n(h)i(encloses)e(a)h(giv)n(en)g(range)f(of)h(v)-5
-b(alues)37 b(on)f(eac)n(h)f(axis\).)63 b(A)37 b(Bo)n(x)f(is)g(similar)g
-(to)227 1863 y(an)h(In)n(terv)-5 b(al,)40 b(the)d(only)g(real)g
-(di\013erence)g(b)r(eing)g(that)h(the)g(In)n(terv)-5
-b(al)36 b(class)h(allo)n(ws)f(some)h(axis)f(limits)i(to)f(b)r(e)227
-1963 y(unsp)r(eci\014ed.)g(Note,)26 b(a)e(Bo)n(x)h(will)g(only)g(lo)r
-(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7 b(rame)25
-b(geometry)f(is)h(appro)n(ximately)e(\015at.)36 b(F)-7
-b(or)227 2062 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f(to)h
-(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)f
-(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-2162 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-2322 y Fd(Synopsis:)121 b Ft(AstBox)41 b Fi(\003)p Ft(astBox\()f
-(AstFrame)g Fi(\003)p Ft(frame,)h(int)h(form,)g(const)f(double)h
-(point1[],)d(const)j(double)227 2422 y(point2[],)e(AstRegion)g
-Fi(\003)p Ft(unc,)h(const)h(char)g Fi(\003)p Ft(options,)e(...)86
-b(\))0 2582 y Fd(P)m(arameters:)259 2730 y(frame)427
-2829 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-2929 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3028 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3167 y Fd(form)427 3266
-y Fj(Indicates)k(ho)n(w)g(the)g(b)r(o)n(x)g(is)g(describ)r(ed)f(b)n(y)h
-(the)h(remaining)e(parameters.)48 b(A)33 b(v)-5 b(alue)32
-b(of)g(zero)f(indicates)427 3366 y(that)d(the)g(b)r(o)n(x)f(is)h(sp)r
-(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)g(p)r(osition)h(and)f(a)h(corner)e
-(p)r(osition.)36 b(A)28 b(v)-5 b(alue)28 b(of)g(one)f(indicates)427
-3466 y(that)h(the)g(b)r(o)n(x)f(is)h(sp)r(eci\014ed)g(b)n(y)f(a)g(t)n
-(w)n(o)g(opp)r(osite)g(corner)f(p)r(ositions.)259 3604
-y Fd(p)s(oin)m(t1)427 3703 y Fj(An)35 b(arra)n(y)d(of)i(double,)i(with)
-e(one)g(elemen)n(t)g(for)g(eac)n(h)f(F)-7 b(rame)34 b(axis)f(\(Naxes)h
-(attribute\).)57 b(If)35 b Ft(")p Fj(form)p Ft(")e Fj(is)427
-3803 y(zero,)i(this)f(arra)n(y)e(should)h(con)n(tain)h(the)g(co)r
-(ordinates)f(at)g(the)i(cen)n(tre)e(of)h(the)g(b)r(o)n(x.)56
-b(If)34 b Ft(")p Fj(form)p Ft(")f Fj(is)h(one,)427 3903
-y(it)f(should)f(con)n(tain)f(the)i(co)r(ordinates)d(at)i(the)h(corner)e
-(of)h(the)g(b)r(o)n(x)g(whic)n(h)g(is)g(diagonally)e(opp)r(osite)i(the)
-427 4002 y(corner)26 b(sp)r(eci\014ed)i(b)n(y)g Ft(")p
-Fj(p)r(oin)n(t2)p Ft(")p Fj(.)259 4141 y Fd(p)s(oin)m(t2)427
-4240 y Fj(An)k(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)
-e(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 4340 y(co)r(ordinates)c(at)i(an)n(y)f(corner)f(of)h
-(the)h(b)r(o)n(x.)259 4478 y Fd(unc)427 4578 y Fj(An)33
-b(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h
-(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g(with)427
-4677 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g(created.)54
-b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h(on)f(the)h
-(b)r(oundary)f(of)427 4777 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f
-(shifting)h(the)f(supplied)h Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-4877 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4976 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-5076 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 5195 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-5295 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 5394 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-5494 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 5593 y(nativ)n(ely)-7 b(,)24
-b(a)g(NULL)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)h(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)h(used)427 5693 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g
-(1.0E-6)f(of)h(the)h(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)p
-eop end
-%%Page: 199 209
-TeXDict begin 199 208 bop 3643 52 a FF(199)427 351 y
-Fj(The)23 b(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 451 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 551 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 650 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 750 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 892 y Fd(options)427 992 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1092 y(assignmen)n(ts)f
-(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(Bo)n(x.)38
-b(The)29 b(syn)n(tax)e(used)i(is)f(iden)n(tical)g(to)g(that)h(for)427
-1191 y(the)h(astSet)f(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)f(sp)r(eci\014ers)h(iden)n
-(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")f Fj(sym)n(b)r(ols)g(in)427
-1291 y(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1433 y Fd(...)427
-1533 y Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n
-(tains)f Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f
-(an)f(optional)g(list)h(of)f(additional)427 1633 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1732 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1832 y Fj(function\).)0
-2013 y Fd(Returned)32 b(V)-8 b(alue:)259 2169 y(astBo)m(x\(\))427
-2269 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Bo)n(x.)0
-2450 y Fd(Notes:)340 2752 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2851 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 3033 y Fd(Status)33
-b(Handling)n(:)227 3179 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3278 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3378 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3597 3780 12 v 0 3728 a Fz(astChannel)786 b Fe(Create)37
-b(a)i(Channel)783 b Fz(astChannel)0 3913 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(Channel)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 4048
-y(A)22 b(Channel)g(implemen)n(ts)g(lo)n(w-lev)n(el)e(input/output)i
-(for)f(the)i(AST)f(library)-7 b(.)33 b(W)-7 b(riting)22
-b(an)f(Ob)5 b(ject)22 b(to)f(a)h(Channel)227 4147 y(\(using)i(astW)-7
-b(rite\))25 b(will)f(generate)f(a)h(textual)h(represen)n(tation)d(of)i
-(that)h(Ob)5 b(ject,)25 b(and)f(reading)f(from)h(a)g(Channel)227
-4247 y(\(using)k(astRead\))f(will)h(create)e(a)i(new)f(Ob)5
-b(ject)28 b(from)f(its)h(textual)f(represen)n(tation.)227
-4381 y(Normally)-7 b(,)20 b(when)f(y)n(ou)g(use)f(a)h(Channel,)i(y)n
-(ou)d(should)h(pro)n(vide)f Ft(")p Fj(source)p Ft(")f
-Fj(and)h Ft(")p Fj(sink)p Ft(")g Fj(functions)i(whic)n(h)f(connect)227
-4481 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 4580 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-4749 y Fd(Synopsis:)121 b Ft(AstChannel)39 b Fi(\003)p
-Ft(astChannel\()g(const)i(char)h Fi(\003)p Ft(\()p Fi(\003)g
-Ft(source\)\()f(void)h(\),)g(void)g(\()p Fi(\003)h Ft(sink\)\()e(const)
-227 4849 y(char)h Fi(\003)h Ft(\),)g(const)f(char)g Fi(\003)p
-Ft(options,)d(...)86 b(\))0 5018 y Fd(P)m(arameters:)259
-5173 y(source)427 5273 y Fj(P)n(oin)n(ter)17 b(to)h(a)g(source)g
-(function)h(that)g(tak)n(es)e(no)h(argumen)n(ts)f(and)i(returns)e(a)h
-(p)r(oin)n(ter)h(to)f(a)g(n)n(ull-terminated)427 5373
-y(string.)60 b(This)35 b(function)h(will)g(b)r(e)g(used)f(b)n(y)g(the)h
-(Channel)f(to)h(obtain)f(lines)g(of)g(input)i(text.)60
-b(On)35 b(eac)n(h)427 5472 y(in)n(v)n(o)r(cation,)f(it)g(should)f
-(return)h(a)f(p)r(oin)n(ter)g(to)g(the)h(next)g(input)h(line)e(read)g
-(from)g(some)g(external)g(data)427 5572 y(store,)27 b(and)g(a)h(NULL)g
-(p)r(oin)n(ter)f(when)h(there)f(are)g(no)g(more)g(lines)g(to)h(read.)
-427 5693 y(If)g Ft(")p Fj(source)p Ft(")e Fj(is)h(NULL,)h(the)g
-(Channel)g(will)g(read)e(from)i(standard)e(input)j(instead.)p
-eop end
-%%Page: 200 210
-TeXDict begin 200 209 bop 0 52 a FF(200)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(sink)427
-451 y Fj(P)n(oin)n(ter)22 b(to)g(a)h(sink)g(function)g(that)h(tak)n(es)
-e(a)g(p)r(oin)n(ter)h(to)f(a)h(n)n(ull-terminated)g(string)f(as)g(an)h
-(argumen)n(t)f(and)427 551 y(returns)30 b(v)n(oid.)44
-b(This)30 b(function)h(will)f(b)r(e)h(used)f(b)n(y)g(the)g(Channel)g
-(to)g(deliv)n(er)g(lines)g(of)g(output)h(text.)45 b(On)427
-650 y(eac)n(h)31 b(in)n(v)n(o)r(cation,)h(it)h(should)f(deliv)n(er)f
-(the)h(con)n(ten)n(ts)f(of)h(the)h(string)e(supplied)i(to)e(some)h
-(external)f(data)427 750 y(store.)427 861 y(If)d Ft(")p
-Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(Channel)g(will)g(write)f(to)h
-(standard)e(output)i(instead.)259 984 y Fd(options)427
-1083 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-1183 y(assignmen)n(ts)d(to)i(b)r(e)g(used)f(for)g(initialising)g(the)h
-(new)g(Channel.)36 b(The)26 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f
-(to)g(that)427 1283 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1382 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1505
-y Fd(...)427 1605 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1704 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1804 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1904 y Fj(function\).)0 2056
-y Fd(Returned)32 b(V)-8 b(alue:)259 2182 y(astChannel\(\))427
-2282 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Channel.)0
-2433 y Fd(Notes:)340 2706 y Fi(\017)45 b Fj(Application)35
-b(co)r(de)g(can)g(pass)f(arbitrary)f(data)i(\(suc)n(h)g(as)g(\014le)g
-(descriptors,)g(etc\))h(to)f(source)f(and)h(sink)427
-2806 y(functions)27 b(using)e(the)i(astPutChannelData)e(function.)36
-b(The)27 b(source)d(or)h(sink)h(function)h(should)e(use)h(the)427
-2905 y(astChannelData)h(macro)f(to)i(retriev)n(e)e(this)i(data.)340
-3028 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-3128 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 3307 3780 12 v 0 3439 a Fz(astChannelData)
-1388 3437 y Fe(Return)39 b(a)f(p)s(oin)m(ter)f(to)1112
-3552 y(user-supplied)h(data)f(stored)h(with)1630 3666
-y(a)g(Channel)2837 3439 y Fz(astChannelData)0 3812 y
-Fd(Description:)44 b Fj(This)31 b(macro)f(is)g(in)n(tended)h(to)g(b)r
-(e)g(used)g(within)g(the)g(source)f(or)g(sink)g(functions)h(asso)r
-(ciated)f(with)h(a)227 3912 y(Channel.)49 b(It)32 b(returns)f(an)n(y)g
-(p)r(oin)n(ter)g(previously)f(stored)h(in)h(the)g(Channel)f(\(that)h
-(is,)h(the)f(Channel)f(that)h(has)227 4011 y(in)n(v)n(ok)n(ed)26
-b(the)i(source)f(or)f(sink)i(function\))g(using)g(astPutChannelData.)
-227 4131 y(This)j(mec)n(hanism)f(is)g(a)g(thread-safe)f(alternativ)n(e)
-g(to)i(passing)e(\014le)i(descriptors,)f(etc,)h(via)f(static)g(global)g
-(v)-5 b(ari-)227 4230 y(ables.)0 4370 y Fd(Synopsis:)121
-b Ft(void)42 b Fi(\003)p Ft(astChannelData)0 4509 y Fd(Class)31
-b(Applicabilit)m(y:)259 4636 y(Channel)427 4735 y Fj(This)d(macro)e
-(applies)h(to)h(all)f(Channels.)0 4887 y Fd(Returned)32
-b(V)-8 b(alue:)259 5013 y(astChannelData)427 5113 y Fj(The)27
-b(p)r(oin)n(ter)f(previously)f(stored)g(with)i(the)g(Channel)f(using)g
-(astPutChannelData.)36 b(A)26 b(NULL)h(p)r(oin)n(ter)427
-5213 y(will)h(b)r(e)g(returned)f(if)h(no)g(suc)n(h)f(p)r(oin)n(ter)g
-(has)g(b)r(een)h(stored)f(with)h(the)g(Channel.)0 5365
-y Fd(Notes:)340 5637 y Fi(\017)45 b Fj(This)28 b(routine)f(is)h(not)f
-(a)n(v)-5 b(ailable)26 b(in)i(the)g(F)-7 b(ortran)27
-b(77)f(in)n(terface)h(to)h(the)g(AST)g(library)-7 b(.)p
-eop end
-%%Page: 201 211
-TeXDict begin 201 210 bop 3643 52 a FF(201)p 0 351 3780
-12 v 0 483 a Fz(astCircle)986 b Fe(Create)37 b(a)i(Circle)982
-b Fz(astCircle)0 643 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Circle)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 767 y(A)g(Circle)f(is)h(a)f
-(Region)g(whic)n(h)g(represen)n(ts)g(a)g(circle)g(or)f(sphere)h(within)
-i(the)f(supplied)g(F)-7 b(rame.)0 914 y Fd(Synopsis:)121
-b Ft(AstCircle)40 b Fi(\003)p Ft(astCircle\()f(AstFrame)h
-Fi(\003)p Ft(frame,)h(int)h(form,)f(const)h(double)f(centre[],)f(const)
-227 1013 y(double)h(point[],)g(AstRegion)f Fi(\003)p
-Ft(unc,)h(const)g(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 1160 y Fd(P)m(arameters:)259 1294 y(frame)427
-1394 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-1493 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 1593 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 1723 y Fd(form)427 1823
-y Fj(Indicates)g(ho)n(w)g(the)h(circle)f(is)g(describ)r(ed)h(b)n(y)f
-(the)h(remaining)e(parameters.)38 b(A)29 b(v)-5 b(alue)28
-b(of)g(zero)g(indicates)427 1922 y(that)h(the)f(circle)f(is)h(sp)r
-(eci\014ed)h(b)n(y)e(a)h(cen)n(tre)f(p)r(osition)h(and)g(a)g(p)r
-(osition)g(on)f(the)i(circumference.)37 b(A)29 b(v)-5
-b(alue)427 2022 y(of)28 b(one)f(indicates)g(that)h(the)g(circle)f(is)h
-(sp)r(eci\014ed)g(b)n(y)f(a)g(cen)n(tre)g(p)r(osition)h(and)f(a)g
-(scalar)f(radius.)259 2152 y Fd(cen)m(tre)427 2252 y
-Fj(An)32 b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e
-(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 2352 y(co)r(ordinates)c(at)i(the)g(cen)n(tre)f(of)g
-(the)h(circle)f(or)g(sphere.)259 2482 y Fd(p)s(oin)m(t)427
-2582 y Fj(If)35 b Ft(")p Fj(form)p Ft(")e Fj(is)h(zero,)g(then)h(this)f
-(arra)n(y)e(should)i(ha)n(v)n(e)f(one)g(elemen)n(t)i(for)e(eac)n(h)h(F)
--7 b(rame)33 b(axis)g(\(Naxes)h(at-)427 2681 y(tribute\),)e(and)e
-(should)g(b)r(e)h(supplied)f(holding)g(the)h(co)r(ordinates)e(at)h(a)g
-(p)r(oin)n(t)g(on)g(the)h(circumference)f(of)427 2781
-y(the)k(circle)e(or)g(sphere.)53 b(If)34 b Ft(")p Fj(form)p
-Ft(")e Fj(is)h(one,)h(then)f(this)h(arra)n(y)c(should)j(ha)n(v)n(e)f
-(one)h(elemen)n(t)g(only)g(whic)n(h)427 2880 y(should)h(b)r(e)g
-(supplied)g(holding)f(the)h(scalar)e(radius)h(of)h(the)g(circle)f(or)g
-(sphere,)i(as)e(a)g(geo)r(desic)g(distance)427 2980 y(within)c(the)f(F)
--7 b(rame.)259 3110 y Fd(unc)427 3210 y Fj(An)33 b(optional)e(p)r(oin)n
-(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h
-(uncertain)n(ties)e(asso)r(ciated)g(with)427 3310 y(the)f(b)r(oundary)f
-(of)g(the)h(Circle)f(b)r(eing)g(created.)41 b(The)30
-b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g(on)g(the)h(b)r
-(oundary)f(of)427 3409 y(the)g(Circle)e(is)h(found)g(b)n(y)f(shifting)i
-(the)f(supplied)g Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e
-Fj(Region)i(so)f(that)h(it)g(is)g(cen)n(tred)f(at)h(the)427
-3509 y(b)r(oundary)i(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 3608 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-3708 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 3823 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-3923 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4022 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4122 y(uncertain)n(t)n(y)c(Region)f(using)h(the)h(supplied)f(p)r(oin)n
-(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)g(on)g(the)h(created)e
-(Circle.)45 b(Al-)427 4222 y(ternativ)n(ely)-7 b(,)30
-b(a)g(NULL)g(Ob)5 b(ject)30 b(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)i
-(supplied,)g(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)427 4321 y(used)f(equiv)-5 b(alen)n(t)27 b(to)h(a)f(b)r(o)n(x)g
-(1.0E-6)e(of)j(the)g(size)f(of)h(the)g(Circle)f(b)r(eing)h(created.)427
-4436 y(The)23 b(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 4536 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 4635 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 4735 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 4835 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 4965 y Fd(options)427 5065 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 5164 y(assignmen)n(ts)j
-(to)g(b)r(e)i(used)e(for)h(initialising)f(the)h(new)g(Circle.)49
-b(The)32 b(syn)n(tax)f(used)g(is)h(iden)n(tical)g(to)f(that)427
-5264 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-5363 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 5494
-y Fd(...)427 5593 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5693 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)p eop end
-%%Page: 202 212
-TeXDict begin 202 211 bop 0 52 a FF(202)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 451 y Fj(function\).)0 616 y
-Fd(Returned)32 b(V)-8 b(alue:)259 755 y(astCircle\(\))427
-855 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Circle.)0
-1020 y Fd(Notes:)340 1306 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1405 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1608 3780 12 v 0 1739
-a Fz(astCircleP)l(ars)172 b Fe(Returns)39 b(the)f(geometric)f
-(parameters)f(of)1659 1854 y(an)i(Circle)2999 1739 y
-Fz(astCircleP)l(ars)0 2023 y Fd(Description:)44 b Fj(This)28
-b(function)g(returns)f(the)h(geometric)e(parameters)g(describing)h(the)
-h(supplied)g(Circle.)0 2175 y Fd(Synopsis:)121 b Ft(void)42
-b(astCirclePars\()c(AstCircle)h Fi(\003)p Ft(this,)i(double)h
-Fi(\003)p Ft(centre,)e(double)h Fi(\003)p Ft(radius,)f(double)h
-Fi(\003)p Ft(p1)227 2275 y(\))0 2427 y Fd(P)m(arameters:)259
-2567 y(this)427 2666 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2801 y Fd(cen)m(tre)427 2900 y Fj(P)n(oin)n(ter)23 b(to)h(an)f(arra)n
-(y)f(in)i(whic)n(h)g(to)g(return)g(the)g(co)r(ordinates)f(of)h(the)g
-(Circle)g(cen)n(tre.)35 b(The)24 b(length)g(of)g(this)427
-3000 y(arra)n(y)i(should)h(b)r(e)h(no)f(less)g(than)h(the)g(n)n(um)n(b)
-r(er)f(of)h(axes)f(in)g(the)h(asso)r(ciated)f(co)r(ordinate)f(system.)
-259 3134 y Fd(radius)427 3234 y Fj(Returned)c(holding)f(the)h(radius)f
-(of)g(the)h(Circle,)g(as)f(an)g(geo)r(desic)g(distance)g(in)h(the)g
-(asso)r(ciated)e(co)r(ordinate)427 3334 y(system.)259
-3468 y Fd(p1)427 3568 y Fj(P)n(oin)n(ter)25 b(to)h(an)g(arra)n(y)e(in)j
-(whic)n(h)f(to)h(return)f(the)g(co)r(ordinates)f(of)i(a)f(p)r(oin)n(t)g
-(on)g(the)h(circumference)f(of)g(the)427 3667 y(Circle.)39
-b(The)28 b(length)g(of)h(this)f(arra)n(y)e(should)i(b)r(e)h(no)f(less)g
-(than)g(the)h(n)n(um)n(b)r(er)f(of)g(axes)g(in)g(the)h(asso)r(ciated)
-427 3767 y(co)r(ordinate)37 b(system.)66 b(A)38 b(NULL)f(p)r(oin)n(ter)
-h(can)f(b)r(e)g(supplied)h(if)g(the)g(circumference)f(p)r(osition)g(is)
-h(not)427 3867 y(needed.)0 4032 y Fd(Notes:)340 4317
-y Fi(\017)45 b Fj(If)24 b(the)g(co)r(ordinate)e(system)h(represen)n
-(ted)f(b)n(y)h(the)g(Circle)g(has)g(b)r(een)g(c)n(hanged)f(since)h(it)h
-(w)n(as)e(\014rst)h(created,)427 4417 y(the)c(returned)f(parameters)f
-(refer)h(to)h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g(system,)i
-(rather)d(than)i(the)g(original)427 4516 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-4616 y(system)38 b(is)h(non-linear,)h(the)f(shap)r(e)f(represen)n(ted)f
-(b)n(y)h(the)h(supplied)g(Circle)f(ob)5 b(ject)38 b(ma)n(y)g(not)g(b)r
-(e)h(an)427 4716 y(accurate)27 b(circle.)p 0 4918 V 0
-5050 a Fz(astClear)483 b Fe(Clear)37 b(attribute)f(v)-7
-b(alues)39 b(for)e(an)i(Ob)7 b(ject)480 b Fz(astClear)0
-5242 y Fd(Description:)44 b Fj(This)36 b(function)g(clears)f(the)h(v)-5
-b(alues)36 b(of)f(a)h(sp)r(eci\014ed)g(set)f(of)h(attributes)g(for)f
-(an)h(Ob)5 b(ject.)61 b(Clearing)227 5341 y(an)30 b(attribute)h
-(cancels)f(an)n(y)f(v)-5 b(alue)30 b(that)h(has)f(previously)f(b)r(een)
-i(explicitly)g(set)f(for)g(it,)h(so)f(that)h(the)g(standard)227
-5441 y(default)d(attribute)f(v)-5 b(alue)28 b(will)f(subsequen)n(tly)g
-(b)r(e)h(used)f(instead.)37 b(This)27 b(also)f(causes)g(the)i(astT)-7
-b(est)27 b(function)h(to)227 5540 y(return)f(the)h(v)-5
-b(alue)28 b(zero)e(for)h(the)h(attribute,)g(indicating)g(that)g(no)f(v)
--5 b(alue)27 b(has)g(b)r(een)h(set.)0 5693 y Fd(Synopsis:)121
-b Ft(void)42 b(astClear\()e(AstObject)g Fi(\003)p Ft(this,)h(const)g
-(char)h Fi(\003)p Ft(attrib)f(\))p eop end
-%%Page: 203 213
-TeXDict begin 203 212 bop 3643 52 a FF(203)0 351 y Fd(P)m(arameters:)
-259 483 y(this)427 583 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)259 711 y Fd(attrib)427 810 y Fj(P)n(oin)n(ter)23
-b(to)i(a)g(n)n(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g
-(a)g(comma-separated)f(list)i(of)g(the)g(names)427 910
-y(of)j(the)g(attributes)f(to)h(b)r(e)g(cleared.)0 1067
-y Fd(Class)j(Applicabilit)m(y:)259 1199 y(Ob)5 b(ject)427
-1298 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 1456 y Fd(Notes:)340 1733 y Fi(\017)45 b Fj(A)n(ttribute)28
-b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h
-(surrounded)e(b)n(y)i(white)g(space.)340 1862 y Fi(\017)45
-b Fj(It)28 b(do)r(es)f(no)h(harm)f(to)g(clear)g(an)g(attribute)h(whose)
-f(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set.)340 1990
-y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h(an)g(attempt)g
-(is)f(made)h(to)f(clear)g(the)h(v)-5 b(alue)27 b(of)h(a)f(read-only)f
-(attribute.)p 0 2179 3780 12 v 0 2311 a Fz(astClearStatus)341
-b Fe(Clear)37 b(the)i(AST)f(error)f(status)338 b Fz(astClearStatus)0
-2467 y Fd(Description:)44 b Fj(This)23 b(macro)f(resets)h(the)g(AST)h
-(error)d(status)i(to)g(an)g(OK)f(v)-5 b(alue,)24 b(indicating)f(that)h
-(an)f(error)e(condition)227 2567 y(\(if)29 b(an)n(y\))e(has)g(b)r(een)h
-(cleared.)0 2712 y Fd(Synopsis:)121 b Ft(void)42 b(astClearStatus)0
-2856 y Fd(Notes:)340 3134 y Fi(\017)j Fj(If)37 b(the)f(AST)g(error)e
-(status)i(is)g(set)g(to)g(an)f(error)f(v)-5 b(alue)36
-b(\(after)g(an)g(error\),)g(most)g(AST)g(functions)g(will)427
-3234 y(not)28 b(execute)g(and)f(will)h(simply)g(return)f(without)i
-(action.)36 b(Using)28 b(astClearStatus)e(will)i(restore)f(normal)427
-3333 y(b)r(eha)n(viour.)p 0 3523 V 0 3655 a Fz(astClip)549
-b Fe(Set)39 b(up)g(or)f(remo)m(v)m(e)f(clipping)g(for)h(a)h(Plot)546
-b Fz(astClip)0 3834 y Fd(Description:)44 b Fj(This)25
-b(function)h(de\014nes)f(regions)f(of)h(a)f(Plot)h(whic)n(h)g(are)f(to)
-h(b)r(e)h(clipp)r(ed.)36 b(An)n(y)25 b(subsequen)n(t)g(graphical)227
-3934 y(output)h(created)f(using)g(the)g(Plot)g(will)g(then)h(b)r(e)g
-(visible)f(only)g(within)h(the)g(unclipp)r(ed)g(regions)e(of)h(the)h
-(plotting)227 4034 y(area.)36 b(See)27 b(also)g(the)h(Clip)g
-(attribute.)0 4178 y Fd(Synopsis:)121 b Ft(void)42 b(astClip\()e
-(AstPlot)h Fi(\003)p Ft(this,)g(int)h(iframe,)f(const)g(double)g
-(lbnd[],)g(const)h(double)f(ubnd[])227 4278 y(\))0 4423
-y Fd(P)m(arameters:)259 4554 y(this)427 4654 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 4782 y Fd(iframe)427 4882 y Fj(The)h(index)g(of)
-g(the)h(F)-7 b(rame)28 b(within)i(the)f(Plot)f(to)h(whic)n(h)g(the)g
-(clipping)g(limits)h(supplied)f(in)g Ft(")p Fj(lbnd)p
-Ft(")g Fj(and)427 4981 y Ft(")p Fj(ubnd)p Ft(")h Fj(\(b)r(elo)n(w\))f
-(refer.)42 b(Clipping)30 b(ma)n(y)f(b)r(e)h(applied)f(to)g(an)n(y)g(of)
-h(the)g(co)r(ordinate)e(systems)h(asso)r(ciated)427 5081
-y(with)24 b(a)g(Plot)f(\(as)g(de\014ned)h(b)n(y)f(the)h(F)-7
-b(rames)23 b(it)h(con)n(tains\),)g(so)f(this)h(index)f(ma)n(y)g(tak)n
-(e)g(an)n(y)g(v)-5 b(alue)23 b(from)h(1)f(to)427 5181
-y(the)31 b(n)n(um)n(b)r(er)e(of)h(F)-7 b(rames)30 b(in)g(the)g(Plot)g
-(\(Nframe)g(attribute\).)45 b(In)30 b(addition,)g(the)h(v)-5
-b(alues)29 b(AST)p Ft(__)p Fj(BASE)427 5280 y(and)f(AST)p
-Ft(__)p Fj(CURRENT)f(ma)n(y)g(b)r(e)h(used)g(to)f(sp)r(ecify)h(the)g
-(base)f(and)g(curren)n(t)g(F)-7 b(rames)27 b(resp)r(ectiv)n(ely)-7
-b(.)427 5394 y(F)g(or)32 b(example,)i(a)f(v)-5 b(alue)32
-b(of)h(AST)p Ft(__)p Fj(CURRENT)g(causes)e(clipping)i(to)g(b)r(e)g(p)r
-(erformed)f(in)i(ph)n(ysical)d(co-)427 5494 y(ordinates,)g(while)g(a)g
-(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fj(BASE)f(w)n(ould)h(clip)g(in)g
-(graphical)f(co)r(ordinates.)45 b(Clipping)31 b(ma)n(y)427
-5593 y(also)24 b(b)r(e)h(remo)n(v)n(ed)e(completely)h(b)n(y)g(giving)g
-(a)g(v)-5 b(alue)25 b(of)f(AST)p Ft(__)p Fj(NOFRAME.)g(In)h(this)g
-(case)f(an)n(y)g(clipping)427 5693 y(b)r(ounds)k(supplied)g(\(b)r(elo)n
-(w\))g(are)e(ignored.)p eop end
-%%Page: 204 214
-TeXDict begin 204 213 bop 0 52 a FF(204)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(lbnd)427
-451 y Fj(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)g(for)f(eac)n(h)g
-(axis)g(of)h(the)g(clipping)g(F)-7 b(rame)41 b(\(iden)n(ti\014ed)i(b)n
-(y)e(the)i(index)427 551 y Ft(")p Fj(iframe)p Ft(")p
-Fj(\).)68 b(This)38 b(should)g(con)n(tain)f(the)i(lo)n(w)n(er)d(b)r
-(ound,)41 b(on)d(eac)n(h)f(axis,)j(of)e(the)h(region)e(whic)n(h)h(is)g
-(to)427 650 y(remain)27 b(visible)h(\(unclipp)r(ed\).)259
-781 y Fd(ubnd)427 880 y Fj(An)43 b(arra)n(y)c(with)j(one)g(elemen)n(t)g
-(for)f(eac)n(h)g(axis)g(of)h(the)g(clipping)g(F)-7 b(rame)41
-b(\(iden)n(ti\014ed)i(b)n(y)e(the)i(index)427 980 y Ft(")p
-Fj(iframe)p Ft(")p Fj(\).)64 b(This)37 b(should)g(con)n(tain)f(the)h
-(upp)r(er)g(b)r(ound,)j(on)d(eac)n(h)f(axis,)i(of)f(the)g(region)f
-(whic)n(h)h(is)g(to)427 1079 y(remain)27 b(visible)h(\(unclipp)r(ed\).)
-0 1239 y Fd(Notes:)340 1519 y Fi(\017)45 b Fj(Only)19
-b(one)g(clipping)h(F)-7 b(rame)18 b(ma)n(y)h(b)r(e)h(activ)n(e)e(at)h
-(a)g(time.)35 b(This)19 b(function)h(will)g(deactiv)-5
-b(ate)19 b(an)n(y)f(previously-)427 1619 y(established)28
-b(clipping)f(F)-7 b(rame)27 b(b)r(efore)h(setting)f(up)h(new)g
-(clipping)f(limits.)340 1749 y Fi(\017)45 b Fj(The)29
-b(clipping)g(pro)r(duced)f(b)n(y)h(this)g(function)g(is)g(in)g
-(addition)g(to)g(that)g(sp)r(eci\014ed)g(b)n(y)f(the)h(Clip)g
-(attribute)427 1849 y(whic)n(h)40 b(o)r(ccurs)f(at)g(the)h(edges)f(of)h
-(the)g(plotting)g(area)e(established)h(when)h(the)g(Plot)f(is)h
-(created)f(\(see)427 1948 y(astPlot\).)d(The)28 b(underlying)f
-(graphics)f(system)i(ma)n(y)f(also)f(imp)r(ose)i(further)f(clipping.)
-340 2079 y Fi(\017)45 b Fj(When)25 b(testing)f(a)f(graphical)g(p)r
-(osition)h(for)f(clipping,)i(it)f(is)g(\014rst)g(transformed)f(in)n(to)
-h(the)g(clipping)g(F)-7 b(rame.)427 2178 y(The)33 b(resulting)f(co)r
-(ordinate)g(on)g(eac)n(h)g(axis)g(is)h(then)g(c)n(hec)n(k)n(ed)f
-(against)f(the)j(clipping)e(limits)i(\(giv)n(en)e(b)n(y)427
-2278 y Ft(")p Fj(lbnd)p Ft(")i Fj(and)g Ft(")p Fj(ubnd)p
-Ft(")p Fj(\).)56 b(By)34 b(default,)i(a)e(p)r(osition)f(is)h(clipp)r
-(ed)h(if)g(an)n(y)e(co)r(ordinate)g(lies)h(outside)g(these)427
-2378 y(limits.)i(Ho)n(w)n(ev)n(er,)22 b(if)h(a)f(non-zero)f(v)-5
-b(alue)22 b(is)h(assigned)e(to)h(the)h(Plot's)f(ClipOp)h(attribute,)h
-(then)f(a)f(p)r(osition)427 2477 y(is)28 b(only)f(clipp)r(ed)h(if)g
-(the)g(co)r(ordinates)e(on)i(all)f(axes)g(lie)g(outside)h(their)f
-(clipping)h(limits.)340 2608 y Fi(\017)45 b Fj(If)28
-b(the)f(lo)n(w)n(er)f(clipping)h(limit)h(exceeds)e(the)i(upp)r(er)f
-(limit)h(for)e(an)n(y)h(axis,)f(then)i(the)f(sense)g(of)g(clipping)g
-(for)427 2707 y(that)k(axis)f(is)g(rev)n(ersed)f(\(so)h(that)h(co)r
-(ordinate)e(v)-5 b(alues)30 b(lying)h(b)r(et)n(w)n(een)f(the)h(limits)g
-(are)f(clipp)r(ed)h(instead)427 2807 y(of)k(those)g(lying)g(outside)g
-(the)g(limits\).)61 b(T)-7 b(o)34 b(pro)r(duce)h(a)g
-Ft(")p Fj(hole)p Ft(")f Fj(in)h(a)g(co)r(ordinate)f(space)g(\(that)i
-(is,)h(an)427 2907 y(in)n(ternal)24 b(region)g(where)g(nothing)h(is)f
-(plotted\),)i(y)n(ou)e(should)h(supply)g(all)f(the)h(b)r(ounds)g(in)g
-(rev)n(ersed)e(order,)427 3006 y(and)28 b(set)f(the)h(ClipOp)g
-(attribute)g(for)f(the)h(Plot)f(to)g(a)g(non-zero)f(v)-5
-b(alue.)340 3137 y Fi(\017)45 b Fj(Either)25 b(clipping)h(limit)g(ma)n
-(y)f(b)r(e)h(set)f(to)h(the)g(v)-5 b(alue)25 b(AST)p
-Ft(__)p Fj(BAD,)h(whic)n(h)f(is)h(equiv)-5 b(alen)n(t)25
-b(to)g(setting)h(it)g(to)427 3236 y(in\014nit)n(y)i(\(or)f(min)n(us)h
-(in\014nit)n(y)g(for)f(a)g(lo)n(w)n(er)f(b)r(ound\))i(so)f(that)h(it)g
-(is)g(not)f(used.)340 3367 y Fi(\017)45 b Fj(If)29 b(a)e(graphical)f(p)
-r(osition)i(results)f(in)h(an)n(y)f(bad)h(co)r(ordinate)f(v)-5
-b(alues)27 b(\(AST)p Ft(__)p Fj(BAD\))i(when)f(transformed)427
-3466 y(in)n(to)i(the)h(clipping)f(F)-7 b(rame,)31 b(then)g(it)g(is)f
-(treated)g(\(for)g(the)h(purp)r(oses)e(of)h(pro)r(ducing)g(graphical)f
-(output\))427 3566 y(as)e(if)h(it)g(w)n(ere)f(clipp)r(ed.)340
-3696 y Fi(\017)45 b Fj(When)34 b(a)f(Plot)g(is)h(used)f(as)g(a)g
-(Mapping)h(to)f(transform)f(p)r(oin)n(ts)i(\(e.g.)54
-b(using)33 b(astT)-7 b(ran2\),)34 b(an)n(y)f(clipp)r(ed)427
-3796 y(output)28 b(p)r(oin)n(ts)g(are)f(assigned)f(co)r(ordinate)g(v)-5
-b(alues)28 b(of)f(AST)p Ft(__)p Fj(BAD.)340 3926 y Fi(\017)45
-b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-0 4121 3780 12 v 0 4252 a Fz(astClone)968 4259 y Fe(Clone)38
-b(\(duplicate\))e(an)i(Ob)7 b(ject)38 b(p)s(oin)m(ter)3271
-4252 y Fz(astClone)0 4450 y Fd(Description:)44 b Fj(This)34
-b(function)g(returns)f(a)g(duplicate)h(p)r(oin)n(ter)f(to)h(an)f
-(existing)g(Ob)5 b(ject.)55 b(It)34 b(also)e(incremen)n(ts)h(the)227
-4549 y(Ob)5 b(ject's)28 b(RefCoun)n(t)f(attribute)h(to)g(k)n(eep)f
-(trac)n(k)f(of)i(ho)n(w)f(man)n(y)g(p)r(oin)n(ters)f(ha)n(v)n(e)h(b)r
-(een)h(issued.)227 4673 y(Note)40 b(that)g(this)g(function)g(is)f(NOT)h
-(equiv)-5 b(alen)n(t)39 b(to)g(an)g(assignmen)n(t)g(statemen)n(t,)k(as)
-38 b(in)i(general)e(the)i(t)n(w)n(o)227 4772 y(p)r(oin)n(ters)27
-b(will)h(not)g(ha)n(v)n(e)e(the)i(same)f(v)-5 b(alue.)0
-4919 y Fd(Synopsis:)121 b Ft(AstObject)40 b Fi(\003)p
-Ft(astClone\()f(AstObject)h Fi(\003)p Ft(this)h(\))0
-5066 y Fd(P)m(arameters:)259 5200 y(this)427 5300 y Fj(Original)26
-b(p)r(oin)n(ter)i(to)f(the)h(Ob)5 b(ject.)0 5459 y Fd(Class)31
-b(Applicabilit)m(y:)259 5593 y(Ob)5 b(ject)427 5693 y
-Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5 b(jects.)p
-eop end
-%%Page: 205 215
-TeXDict begin 205 214 bop 3643 52 a FF(205)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 487 y(astClone\(\))427 586 y Fj(A)28
-b(duplicate)g(p)r(oin)n(ter)f(to)h(the)g(same)f(Ob)5
-b(ject.)0 748 y Fd(Notes:)340 1029 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1129 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1326 3780 12 v 0 1457 a Fz(astCmpF)-11 b(rame)548
-b Fe(Create)37 b(a)h(CmpF)-10 b(rame)546 b Fz(astCmpF)-11
-b(rame)0 1644 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f
-(a)g(new)g(CmpF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 1768 y(A)40 b(CmpF)-7 b(rame)38 b(is)h(a)f(comp)r
-(ound)h(F)-7 b(rame)39 b(whic)n(h)g(allo)n(ws)e(t)n(w)n(o)h(comp)r
-(onen)n(t)h(F)-7 b(rames)38 b(\(of)h(an)n(y)f(class\))g(to)h(b)r(e)227
-1868 y(merged)34 b(together)h(to)f(form)h(a)g(more)f(complex)g(F)-7
-b(rame.)59 b(The)35 b(axes)f(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)h
-(F)-7 b(rames)34 b(then)227 1968 y(app)r(ear)i(together)g(in)h(the)g
-(resulting)f(CmpF)-7 b(rame)36 b(\(those)h(of)f(the)h(\014rst)g(F)-7
-b(rame,)38 b(follo)n(w)n(ed)e(b)n(y)g(those)h(of)f(the)227
-2067 y(second)27 b(F)-7 b(rame\).)227 2191 y(Since)24
-b(a)f(CmpF)-7 b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24
-b(it)g(can)f(b)r(e)g(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f
-(further)g(CmpF)-7 b(rames.)227 2291 y(F)g(rames)27 b(of)h(arbitrary)d
-(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h
-(F)-7 b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 2415
-y(Also)39 b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)
--7 b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 2515 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 2614 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 2714
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 2814 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)0
-2962 y Fd(Synopsis:)121 b Ft(AstCmpFrame)39 b Fi(\003)p
-Ft(astCmpFrame\()f(AstFrame)i Fi(\003)p Ft(frame1,)h(AstFrame)f
-Fi(\003)p Ft(frame2,)g(const)h(char)h Fi(\003)p Ft(options,)227
-3062 y(...)86 b(\))0 3210 y Fd(P)m(arameters:)259 3346
-y(frame1)427 3446 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r
-(onen)n(t)g(F)-7 b(rame.)259 3578 y Fd(frame2)427 3677
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(second)f(comp)r(onen)n(t)g(F)-7
-b(rame.)259 3809 y Fd(options)427 3909 y Fj(P)n(oin)n(ter)27
-b(to)h(a)g(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)
-g(comma-separated)e(list)i(of)g(attribute)427 4008 y(assignmen)n(ts)i
-(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(CmpF)-7
-b(rame.)48 b(The)31 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)427
-4108 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-4208 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4340 y Fd(...)427 4439 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4539 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4639 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4738 y Fj(function\).)0
-4899 y Fd(Returned)32 b(V)-8 b(alue:)259 5035 y(astCmpF)g(rame\(\))427
-5135 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpF)-7
-b(rame.)0 5296 y Fd(Notes:)340 5577 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 5677 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 206 216
-TeXDict begin 206 215 bop 0 52 a FF(206)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)-2 351 y Fd(Status)j(Handling)n(:)
-227 497 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-697 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 895 3780
-12 v 0 1026 a Fz(astCmpMap)691 b Fe(Create)38 b(a)g(CmpMap)690
-b Fz(astCmpMap)0 1214 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(CmpMap)h(and)f(optionally)g
-(initialises)h(its)f(attributes.)227 1339 y(A)k(CmpMap)g(is)g(a)f(comp)
-r(ound)h(Mapping)f(whic)n(h)h(allo)n(ws)e(t)n(w)n(o)h(comp)r(onen)n(t)h
-(Mappings)f(\(of)h(an)n(y)f(class\))g(to)g(b)r(e)227
-1438 y(connected)h(together)e(to)h(form)g(a)g(more)g(complex)g
-(Mapping.)45 b(This)30 b(connection)g(ma)n(y)g(either)g(b)r(e)h
-Ft(")p Fj(in)f(series)p Ft(")227 1538 y Fj(\(where)21
-b(the)g(\014rst)g(Mapping)f(is)h(used)g(to)g(transform)f(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)i(and)e(the)i(second)e(mapping)
-227 1638 y(is)g(then)g(applied)f(to)g(the)h(result\),)h(or)e
-Ft(")p Fj(in)g(parallel)p Ft(")f Fj(\(where)h(one)g(Mapping)g
-(transforms)f(the)i(earlier)e(co)r(ordinates)227 1737
-y(for)27 b(eac)n(h)g(p)r(oin)n(t)h(and)f(the)h(second)f(Mapping)h(sim)n
-(ultaneously)e(transforms)g(the)i(later)f(co)r(ordinates\).)227
-1862 y(Since)f(a)f(CmpMap)g(is)h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r
-(e)h(used)f(as)g(a)g(comp)r(onen)n(t)g(in)h(forming)e(further)i
-(CmpMaps.)227 1961 y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n
-(y)g(b)r(e)h(built)h(from)e(simple)h(individual)f(Mappings)g(in)h(this)
-g(w)n(a)n(y)-7 b(.)0 2110 y Fd(Synopsis:)121 b Ft(AstCmpMap)40
-b Fi(\003)p Ft(astCmpMap\()f(AstMapping)g Fi(\003)p Ft(map1,)i
-(AstMapping)f Fi(\003)p Ft(map2,)h(int)h(series,)f(const)g(char)227
-2210 y Fi(\003)p Ft(options,)f(...)86 b(\))0 2359 y Fd(P)m(arameters:)
-259 2495 y(map1)427 2595 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f
-(comp)r(onen)n(t)g(Mapping.)259 2727 y Fd(map2)427 2827
-y Fj(P)n(oin)n(ter)f(to)i(the)g(second)f(comp)r(onen)n(t)g(Mapping.)259
-2960 y Fd(series)427 3059 y Fj(If)22 b(a)f(non-zero)e(v)-5
-b(alue)21 b(is)g(giv)n(en)f(for)h(this)h(parameter,)f(the)g(t)n(w)n(o)f
-(comp)r(onen)n(t)h(Mappings)g(will)g(b)r(e)h(connected)427
-3159 y(in)28 b(series.)36 b(A)28 b(zero)e(v)-5 b(alue)28
-b(requests)f(that)g(they)h(are)f(connected)g(in)h(parallel.)259
-3292 y Fd(options)427 3391 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3491 y(assignmen)n(ts)23
-b(to)g(b)r(e)h(used)g(for)f(initialising)h(the)g(new)g(CmpMap.)35
-b(The)24 b(syn)n(tax)f(used)h(is)f(iden)n(tical)h(to)f(that)427
-3590 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3690 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3823
-y Fd(...)427 3922 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4022 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4121 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4221 y Fj(function\).)0 4383
-y Fd(Returned)32 b(V)-8 b(alue:)259 4519 y(astCmpMap\(\))427
-4618 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpMap.)0
-4780 y Fd(Notes:)340 5062 y Fi(\017)45 b Fj(If)37 b(the)g(comp)r(onen)n
-(t)g(Mappings)f(are)g(connected)g(in)h(series,)h(then)f(using)g(the)g
-(resulting)f(CmpMap)h(to)427 5162 y(transform)g(co)r(ordinates)g(will)i
-(cause)e(the)i(\014rst)f(Mapping)g(to)g(b)r(e)g(applied,)j(follo)n(w)n
-(ed)d(b)n(y)g(the)g(second)427 5262 y(Mapping.)e(If)26
-b(the)h(in)n(v)n(erse)d(CmpMap)i(transformation)e(is)i(requested,)f
-(the)i(t)n(w)n(o)e(comp)r(onen)n(t)g(Mappings)427 5361
-y(will)j(b)r(e)g(applied)g(in)g(b)r(oth)g(the)g(rev)n(erse)d(order)h
-(and)i(the)g(rev)n(erse)e(direction.)340 5494 y Fi(\017)45
-b Fj(When)27 b(connecting)f(t)n(w)n(o)g(comp)r(onen)n(t)g(Mappings)f
-(in)i(series,)e(the)i(n)n(um)n(b)r(er)f(of)h(output)f(co)r(ordinates)f
-(gen-)427 5593 y(erated)h(b)n(y)g(the)g(\014rst)g(Mapping)g(\(its)h
-(Nout)f(attribute\))h(m)n(ust)f(equal)f(the)i(n)n(um)n(b)r(er)f(of)g
-(input)h(co)r(ordinates)427 5693 y(accepted)h(b)n(y)f(the)h(second)f
-(Mapping)g(\(its)h(Nin)g(attribute\).)p eop end
-%%Page: 207 217
-TeXDict begin 207 216 bop 3643 52 a FF(207)340 351 y
-Fi(\017)45 b Fj(If)19 b(the)g(comp)r(onen)n(t)g(Mappings)f(of)h(a)f
-(CmpMap)h(are)e(connected)i(in)g(parallel,)g(then)h(the)f(\014rst)f
-(Mapping)g(will)427 451 y(b)r(e)28 b(used)f(to)g(transform)g(the)g
-(earlier)f(input)i(co)r(ordinates)e(for)h(eac)n(h)f(p)r(oin)n(t)i
-(\(and)f(to)g(pro)r(duce)g(the)h(earlier)427 551 y(output)34
-b(co)r(ordinates\))e(and)g(the)i(second)e(Mapping)h(will)g(b)r(e)h
-(used)e(sim)n(ultaneously)h(to)f(transform)g(the)427
-650 y(remaining)f(input)i(co)r(ordinates)e(\(to)h(pro)r(duce)g(the)h
-(remaining)e(output)h(co)r(ordinates)f(for)h(eac)n(h)f(p)r(oin)n(t\).)
-427 750 y(If)37 b(the)g(in)n(v)n(erse)e(transformation)f(is)j
-(requested,)g(eac)n(h)f(Mapping)g(will)h(still)f(b)r(e)h(applied)f(to)g
-(the)h(same)427 849 y(co)r(ordinates,)27 b(but)h(in)g(the)g(rev)n(erse)
-d(direction.)340 991 y Fi(\017)45 b Fj(When)27 b(connecting)e(t)n(w)n
-(o)g(comp)r(onen)n(t)g(Mappings)g(in)h(parallel,)f(there)h(is)f(no)h
-(restriction)e(on)i(the)g(n)n(um)n(b)r(er)427 1091 y(of)i(input)g(and)g
-(output)g(co)r(ordinates)e(for)h(eac)n(h)g(Mapping.)340
-1233 y Fi(\017)45 b Fj(Note)19 b(that)f(the)h(comp)r(onen)n(t)f
-(Mappings)g(supplied)h(are)e(not)h(copied)g(b)n(y)h(astCmpMap)f(\(the)h
-(new)f(CmpMap)427 1332 y(simply)31 b(retains)f(a)g(reference)f(to)i
-(them\).)46 b(They)31 b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)g
-(for)f(other)f(purp)r(oses,)i(but)427 1432 y(should)21
-b(not)g(b)r(e)g(deleted.)35 b(If)22 b(a)e(CmpMap)h(con)n(taining)f(a)h
-(cop)n(y)f(of)h(its)g(comp)r(onen)n(t)f(Mappings)h(is)g(required,)427
-1531 y(then)28 b(a)g(cop)n(y)e(of)i(the)g(CmpMap)f(should)h(b)r(e)g
-(made)f(using)h(astCop)n(y)-7 b(.)340 1673 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1773 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1990 3780 12 v 0 2122 a Fz(astCmpRegion)1352
-2120 y Fe(Create)38 b(a)g(CmpRegion)2917 2122 y Fz(astCmpRegion)0
-2328 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(CmpRegion)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-2462 y(A)i(CmpRegion)f(is)h(a)f(Region)g(whic)n(h)g(allo)n(ws)g(t)n(w)n
-(o)f(comp)r(onen)n(t)i(Regions)e(\(of)i(an)n(y)f(class\))g(to)g(b)r(e)h
-(com)n(bined)g(to)227 2561 y(form)g(a)f(more)f(complex)i(Region.)42
-b(This)29 b(com)n(bination)g(ma)n(y)g(b)r(e)h(p)r(erformed)f(a)g(b)r(o)
-r(olean)g(AND,)i(OR)e(or)g(X)n(OR)227 2661 y(\(exclusiv)n(e)j(OR\))h
-(op)r(erator.)49 b(If)33 b(the)g(AND)g(op)r(erator)e(is)h(used,)i(then)
-f(a)f(p)r(osition)g(is)h(inside)f(the)h(CmpRegion)227
-2761 y(only)28 b(if)g(it)g(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n
-(o)f(comp)r(onen)n(t)g(Regions.)37 b(If)28 b(the)g(OR)g(op)r(erator)e
-(is)h(used,)h(then)g(a)g(p)r(osition)227 2860 y(is)g(inside)h(the)g
-(CmpRegion)f(if)g(it)h(is)f(inside)h(either)f(\(or)g(b)r(oth\))h(of)f
-(its)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Regions.)38 b(If)29
-b(the)g(X)n(OR)227 2960 y(op)r(erator)24 b(is)i(used,)g(then)h(a)e(p)r
-(osition)h(is)g(inside)g(the)g(CmpRegion)f(if)i(it)f(is)g(inside)f(one)
-h(but)g(not)g(b)r(oth)h(of)e(its)h(t)n(w)n(o)227 3060
-y(comp)r(onen)n(t)j(Regions.)41 b(Other)28 b(op)r(erators)g(can)g(b)r
-(e)i(formed)f(b)n(y)g(negating)f(one)h(or)f(b)r(oth)i(comp)r(onen)n(t)f
-(Regions)227 3159 y(b)r(efore)f(using)f(them)h(to)f(construct)h(a)f
-(new)g(CmpRegion.)227 3293 y(The)i(t)n(w)n(o)e(comp)r(onen)n(t)h
-(Region)g(need)g(not)h(refer)e(to)h(the)h(same)f(co)r(ordinate)f(F)-7
-b(rame,)28 b(but)h(it)g(m)n(ust)f(b)r(e)h(p)r(ossible)227
-3392 y(for)39 b(the)h(astCon)n(v)n(ert)e(function)i(to)f(determine)h(a)
-f(Mapping)g(b)r(et)n(w)n(een)h(them)g(\(an)f(error)f(will)h(b)r(e)h
-(rep)r(orted)227 3492 y(otherwise)33 b(when)g(the)h(CmpRegion)f(is)g
-(created\).)54 b(F)-7 b(or)33 b(instance,)i(a)e(CmpRegion)g(ma)n(y)f
-(com)n(bine)h(a)g(Region)227 3592 y(de\014ned)k(within)f(an)g(ICRS)g
-(SkyF)-7 b(rame)36 b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g
-(Galactic)f(SkyF)-7 b(rame.)62 b(This)36 b(is)227 3691
-y(acceptable)i(b)r(ecause)g(the)g(SkyF)-7 b(rame)38 b(class)f(kno)n(ws)
-g(ho)n(w)h(to)g(con)n(v)n(ert)e(b)r(et)n(w)n(een)j(these)f(t)n(w)n(o)f
-(systems,)k(and)227 3791 y(consequen)n(tly)33 b(the)i(astCon)n(v)n(ert)
-d(function)j(will)f(also)f(b)r(e)h(able)g(to)g(con)n(v)n(ert)f(b)r(et)n
-(w)n(een)h(them.)57 b(In)34 b(suc)n(h)g(cases,)227 3890
-y(the)f(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h(mapp)r(ed)f
-(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32 b(of)h(the)g(\014rst)g
-(comp)r(onen)n(t)227 3990 y(Region,)g(and)g(the)f(F)-7
-b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h(whole)g
-(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-4090 y(comp)r(onen)n(t)28 b(Region.)227 4223 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-4323 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 4490 y Fd(Synopsis:)121 b Ft(AstCmpRegion)38
-b Fi(\003)p Ft(astCmpRegion\()g(AstRegion)i Fi(\003)p
-Ft(region1,)g(AstRegion)g Fi(\003)p Ft(region2,)f(int)k(oper,)227
-4590 y(const)f(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 4757 y Fd(P)m(arameters:)259 4911 y(region1)427
-5011 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(Region.)259 5153 y Fd(region2)427 5252 y Fj(P)n(oin)n(ter)20
-b(to)h(the)g(second)g(comp)r(onen)n(t)f(Region.)34 b(This)21
-b(Region)g(will)g(b)r(e)h(transformed)d(in)n(to)i(the)h(co)r(ordinate)
-427 5352 y(F)-7 b(rame)27 b(of)h(the)g(\014rst)f(region)g(b)r(efore)g
-(use.)37 b(An)28 b(error)d(will)j(b)r(e)g(rep)r(orted)f(if)h(this)g(is)
-f(not)h(p)r(ossible.)259 5494 y Fd(op)s(er)427 5593 y
-Fj(The)38 b(b)r(o)r(olean)f(op)r(erator)f(with)i(whic)n(h)g(to)f(com)n
-(bine)h(the)g(t)n(w)n(o)f(Regions.)66 b(This)37 b(m)n(ust)h(b)r(e)g
-(one)g(of)f(the)427 5693 y(sym)n(b)r(olic)27 b(constan)n(ts)g(AST)p
-Ft(__)p Fj(AND,)h(AST)p Ft(__)p Fj(OR)f(or)g(AST)p Ft(__)p
-Fj(X)n(OR.)p eop end
-%%Page: 208 218
-TeXDict begin 208 217 bop 0 52 a FF(208)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(options)427
-451 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-551 y(assignmen)n(ts)36 b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)
-g(new)g(CmpRegion.)64 b(The)37 b(syn)n(tax)f(used)h(is)g(iden)n(tical)
-427 650 y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-750 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 895 y Fd(...)427 995 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 1095 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 1194 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1294 y Fj(function\).)0
-1481 y Fd(Returned)32 b(V)-8 b(alue:)259 1643 y(astCmpRegion\(\))427
-1743 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(CmpRegion.)0
-1931 y Fd(Notes:)340 2239 y Fi(\017)45 b Fj(If)35 b(one)f(of)g(the)h
-(supplied)g(Regions)e(has)h(an)g(asso)r(ciated)f(uncertain)n(t)n(y)-7
-b(,)35 b(that)g(uncertain)n(t)n(y)e(will)i(also)e(b)r(e)427
-2338 y(used)h(for)f(the)h(returned)f(CmpRegion.)55 b(If)34
-b(b)r(oth)g(supplied)g(Regions)e(ha)n(v)n(e)h(asso)r(ciated)f
-(uncertain)n(ties,)427 2438 y(the)c(uncertain)n(t)n(y)f(asso)r(ciated)f
-(with)i(the)g(\014rst)g(Region)f(will)g(b)r(e)h(used)g(for)f(the)h
-(returned)f(CmpRegion.)340 2584 y Fi(\017)45 b Fj(Deep)22
-b(copies)f(are)f(tak)n(en)h(of)g(the)h(supplied)g(Regions.)33
-b(This)22 b(means)f(that)g(an)n(y)g(subsequen)n(t)g(c)n(hanges)f(made)
-427 2683 y(to)26 b(the)g(comp)r(onen)n(t)g(Regions)f(using)g(the)i
-(supplied)f(p)r(oin)n(ters)f(will)h(ha)n(v)n(e)f(no)h(e\013ect)g(on)g
-(the)g(CmpRegion.)340 2829 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2929 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3153 3780 12 v 0 3284
-a Fz(astCon)l(v)l(ert)887 3285 y Fe(Determine)38 b(ho)m(w)g(to)g(con)m
-(v)m(ert)f(b)s(et)m(w)m(een)h(t)m(w)m(o)1404 3385 y(co)s(ordinate)f
-(systems)3138 3284 y Fz(astCon)l(v)l(ert)0 3599 y Fd(Description:)44
-b Fj(This)29 b(function)h(compares)d(t)n(w)n(o)h(F)-7
-b(rames)28 b(and)h(determines)f(whether)h(it)g(is)g(p)r(ossible)f(to)h
-(con)n(v)n(ert)f(b)r(e-)227 3699 y(t)n(w)n(een)c(the)h(co)r(ordinate)e
-(systems)g(whic)n(h)h(they)h(represen)n(t.)34 b(If)25
-b(con)n(v)n(ersion)d(is)i(p)r(ossible,)g(it)h(returns)e(a)h(F)-7
-b(rameSet)227 3799 y(whic)n(h)34 b(describ)r(es)f(the)h(con)n(v)n
-(ersion)d(and)j(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(\(as)f(a)g
-(Mapping\))h(to)f(transform)g(co)r(ordinate)227 3898
-y(v)-5 b(alues)27 b(in)h(either)g(direction.)227 4035
-y(The)38 b(same)g(function)g(ma)n(y)g(also)e(b)r(e)j(used)f(to)g
-(determine)g(ho)n(w)f(to)h(con)n(v)n(ert)f(b)r(et)n(w)n(een)g(t)n(w)n
-(o)h(F)-7 b(rameSets)37 b(\(or)227 4135 y(b)r(et)n(w)n(een)23
-b(a)g(F)-7 b(rame)22 b(and)h(a)f(F)-7 b(rameSet,)24 b(or)e(vice)g(v)n
-(ersa\).)34 b(This)23 b(mo)r(de)g(is)g(in)n(tended)g(for)f(use)h(when)g
-(\(for)g(example\))227 4235 y(t)n(w)n(o)j(images)f(ha)n(v)n(e)g(b)r
-(een)i(calibrated)e(b)n(y)h(attac)n(hing)g(a)g(F)-7 b(rameSet)26
-b(to)g(eac)n(h.)35 b(astCon)n(v)n(ert)25 b(migh)n(t)h(then)h(b)r(e)g
-(used)227 4334 y(to)g(searc)n(h)e(for)h(a)g(celestial)g(co)r(ordinate)f
-(system)i(that)f(b)r(oth)h(images)f(ha)n(v)n(e)f(in)i(common,)f(and)h
-(the)g(result)f(could)227 4434 y(then)36 b(b)r(e)f(used)g(to)g(con)n(v)
-n(ert)f(b)r(et)n(w)n(een)h(the)g(pixel)g(co)r(ordinates)f(of)h(b)r(oth)
-g(images)f({)h(ha)n(ving)f(e\013ectiv)n(ely)h(used)227
-4534 y(their)28 b(celestial)f(co)r(ordinate)f(systems)h(to)h(align)f
-(them.)227 4671 y(When)33 b(using)f(F)-7 b(rameSets,)33
-b(there)f(ma)n(y)f(b)r(e)i(more)e(than)h(one)g(p)r(ossible)g(in)n
-(termediate)f(co)r(ordinate)g(system)h(in)227 4771 y(whic)n(h)j(to)g(p)
-r(erform)f(the)h(con)n(v)n(ersion)e(\(for)h(instance,)j(t)n(w)n(o)d(F)
--7 b(rameSets)34 b(migh)n(t)h(b)r(oth)g(ha)n(v)n(e)f(celestial)g(co)r
-(ordi-)227 4870 y(nates,)27 b(detector)g(co)r(ordinates,)g(pixel)g(co)r
-(ordinates,)f(etc.\).)38 b(A)27 b(comma-separated)e(list)j(of)g(co)r
-(ordinate)e(system)227 4970 y(domains)e(ma)n(y)g(therefore)g(b)r(e)h
-(giv)n(en)f(whic)n(h)g(de\014nes)h(a)f(priorit)n(y)g(order)f(to)h(use)h
-(when)g(selecting)f(the)h(in)n(termedi-)227 5069 y(ate)c(co)r(ordinate)
-e(system.)34 b(The)21 b(path)g(used)f(for)g(con)n(v)n(ersion)f(m)n(ust)
-h(go)g(via)g(an)g(in)n(termediate)g(co)r(ordinate)g(system)227
-5169 y(whose)k(Domain)h(attribute)f(matc)n(hes)g(one)h(of)f(the)h
-(domains)f(giv)n(en.)35 b(If)25 b(con)n(v)n(ersion)d(cannot)j(b)r(e)g
-(ac)n(hiev)n(ed)e(using)227 5269 y(the)28 b(\014rst)g(domain,)f(the)h
-(next)g(one)f(is)g(considered,)g(and)g(so)g(on,)h(un)n(til)g(success)e
-(is)i(ac)n(hiev)n(ed.)0 5444 y Fd(Synopsis:)121 b Ft(AstFrameSet)39
-b Fi(\003)p Ft(astConvert\()f(AstFrame)j Fi(\003)p Ft(from,)g(AstFrame)
-f Fi(\003)p Ft(to,)i(const)f(char)h Fi(\003)p Ft(domainlist)227
-5543 y(\))0 5718 y Fd(P)m(arameters:)p eop end
-%%Page: 209 219
-TeXDict begin 209 218 bop 3643 52 a FF(209)259 351 y
-Fd(from)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(F)-7
-b(rame)27 b(whic)n(h)h(represen)n(ts)f(the)i Ft(")p Fj(source)p
-Ft(")d Fj(co)r(ordinate)h(system.)38 b(This)28 b(is)g(the)h(co)r
-(ordinate)427 551 y(system)f(in)f(whic)n(h)h(y)n(ou)f(already)f(ha)n(v)
-n(e)g(co)r(ordinates)h(a)n(v)-5 b(ailable.)427 668 y(If)26
-b(a)g(F)-7 b(rameSet)25 b(is)h(giv)n(en,)f(its)h(curren)n(t)f(F)-7
-b(rame)25 b(\(as)g(determined)h(b)n(y)f(its)h(Curren)n(t)f(attribute\))
-h(is)g(tak)n(en)f(to)427 767 y(describ)r(e)32 b(the)g(source)f(co)r
-(ordinate)g(system.)50 b(Note)32 b(that)g(the)h(Base)e(attribute)h(of)g
-(this)h(F)-7 b(rameSet)31 b(ma)n(y)427 867 y(b)r(e)d(mo)r(di\014ed)f(b)
-n(y)g(this)g(function)g(to)g(indicate)g(whic)n(h)g(in)n(termediate)f
-(co)r(ordinate)g(system)h(w)n(as)f(used)h(\(see)427 967
-y(under)h Ft(")p Fj(F)-7 b(rameSets)p Ft(")26 b Fj(in)i(the)g
-Ft(")p Fj(Applicabilit)n(y)p Ft(")f Fj(section)g(for)g(details\).)259
-1101 y Fd(to)427 1201 y Fj(P)n(oin)n(ter)h(to)i(a)f(F)-7
-b(rame)29 b(whic)n(h)h(represen)n(ts)e(the)i Ft(")p Fj(destination)p
-Ft(")f Fj(co)r(ordinate)g(system.)43 b(This)29 b(is)h(the)g(co)r(or-)
-427 1300 y(dinate)e(system)f(in)n(to)h(whic)n(h)f(y)n(ou)g(wish)h(to)f
-(con)n(v)n(ert)f(y)n(our)h(co)r(ordinates.)427 1417 y(If)33
-b(a)f(F)-7 b(rameSet)32 b(is)g(giv)n(en,)h(its)f(curren)n(t)f(F)-7
-b(rame)32 b(\(as)g(determined)g(b)n(y)g(its)h(Curren)n(t)e(attribute\))
-i(is)f(tak)n(en)427 1517 y(to)25 b(describ)r(e)g(the)h(destination)f
-(co)r(ordinate)f(system.)35 b(Note)26 b(that)f(the)h(Base)e(attribute)h
-(of)g(this)h(F)-7 b(rameSet)427 1617 y(ma)n(y)25 b(b)r(e)i(mo)r
-(di\014ed)f(b)n(y)g(this)g(function)g(to)g(indicate)g(whic)n(h)g(in)n
-(termediate)f(co)r(ordinate)g(system)h(w)n(as)f(used)427
-1716 y(\(see)j(under)f Ft(")p Fj(F)-7 b(rameSets)p Ft(")27
-b Fj(in)g(the)h Ft(")p Fj(Applicabilit)n(y)p Ft(")f Fj(section)h(for)f
-(details\).)259 1851 y Fd(domainlist)427 1951 y Fj(P)n(oin)n(ter)36
-b(to)i(a)f(n)n(ull-terminated)g(c)n(haracter)e(string)i(con)n(taining)g
-(a)g(comma-separated)e(list)j(of)f(F)-7 b(rame)427 2050
-y(domains.)35 b(This)22 b(ma)n(y)g(b)r(e)h(used)f(to)g(de\014ne)h(a)f
-(priorit)n(y)f(order)g(for)h(the)h(di\013eren)n(t)g(in)n(termediate)f
-(co)r(ordinate)427 2150 y(systems)27 b(that)h(migh)n(t)g(b)r(e)g(used)f
-(to)h(p)r(erform)f(the)h(con)n(v)n(ersion.)427 2267 y(The)39
-b(function)g(will)f(\014rst)g(try)g(to)g(obtain)g(a)g(con)n(v)n(ersion)
-e(b)n(y)i(making)g(use)g(only)g(of)g(an)g(in)n(termediate)427
-2367 y(co)r(ordinate)h(system)g(whose)g(Domain)h(attribute)g(matc)n
-(hes)f(the)h(\014rst)g(domain)f(in)h(this)g(list.)74
-b(If)40 b(this)427 2466 y(fails,)32 b(the)g(second)f(domain)g(in)g(the)
-h(list)g(will)f(b)r(e)h(used,)g(and)g(so)e(on,)i(un)n(til)g(con)n(v)n
-(ersion)d(is)i(ac)n(hiev)n(ed.)47 b(A)427 2566 y(blank)26
-b(domain)g(\(e.g.)36 b(t)n(w)n(o)25 b(consecutiv)n(e)g(commas\))g
-(indicates)h(that)g(all)g(co)r(ordinate)f(systems)g(should)h(b)r(e)427
-2665 y(considered,)h(regardless)e(of)j(their)f(domains.)427
-2783 y(This)37 b(list)h(is)f(case-insensitiv)n(e)f(and)h(all)g(white)g
-(space)g(is)g(ignored.)65 b(If)37 b(y)n(ou)g(do)g(not)g(wish)g(to)g
-(restrict)427 2882 y(the)30 b(domain)f(in)h(this)f(w)n(a)n(y)-7
-b(,)29 b(y)n(ou)f(should)h(supply)h(an)f(empt)n(y)g(string.)42
-b(This)29 b(is)g(normally)g(appropriate)e(if)427 2982
-y(either)i(of)g(the)h(source)e(or)g(destination)h(co)r(ordinate)f
-(systems)h(are)f(describ)r(ed)h(b)n(y)g(F)-7 b(rames)28
-b(\(rather)g(than)427 3081 y(F)-7 b(rameSets\),)35 b(since)e(there)g
-(is)g(then)h(usually)f(only)g(one)g(p)r(ossible)g(c)n(hoice)g(of)g(in)n
-(termediate)g(co)r(ordinate)427 3181 y(system.)0 3346
-y Fd(Class)e(Applicabilit)m(y:)259 3486 y(DSBSp)s(ecF)-8
-b(rame)427 3586 y Fj(If)24 b(the)g(AlignSideBand)g(attribute)g(is)f
-(non-zero,)g(alignmen)n(t)g(o)r(ccurs)g(in)h(the)g(upp)r(er)f(sideband)
-h(expressed)427 3686 y(within)30 b(the)f(sp)r(ectral)f(system)g(and)h
-(standard)e(of)i(rest)f(giv)n(en)g(b)n(y)g(attributes)h(AlignSystem)f
-(and)h(Align-)427 3785 y(StdOfRest.)58 b(If)35 b(AlignSideBand)f(is)g
-(zero,)i(the)e(t)n(w)n(o)g(DSBSp)r(ecF)-7 b(rames)34
-b(are)g(aligned)f(as)h(if)h(they)g(w)n(ere)427 3885 y(simple)28
-b(Sp)r(ecF)-7 b(rames)27 b(\(i.e.)37 b(the)28 b(SideBand)g(is)f
-(ignored\).)259 4020 y Fd(F)-8 b(rame)427 4119 y Fj(This)26
-b(function)f(applies)g(to)g(all)g(F)-7 b(rames.)36 b(Alignmen)n(t)25
-b(o)r(ccurs)g(within)h(the)f(co)r(ordinate)f(system)h(giv)n(en)g(b)n(y)
-427 4219 y(attribute)j(AlignSystem.)259 4353 y Fd(F)-8
-b(rameSet)427 4453 y Fj(If)31 b(either)g(of)f(the)h Ft(")p
-Fj(from)p Ft(")f Fj(or)f Ft(")p Fj(to)p Ft(")h Fj(parameters)f(is)h(a)h
-(p)r(oin)n(ter)f(to)g(a)g(F)-7 b(rameSet,)32 b(then)f(astCon)n(v)n(ert)
-d(will)427 4553 y(attempt)d(to)f(con)n(v)n(ert)f(from)h(the)h(co)r
-(ordinate)e(system)h(describ)r(ed)g(b)n(y)g(the)h(curren)n(t)e(F)-7
-b(rame)24 b(of)g(the)h Ft(")p Fj(from)p Ft(")427 4652
-y Fj(F)-7 b(rameSet)28 b(to)f(that)h(describ)r(ed)f(b)n(y)h(the)g
-(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g Ft(")p Fj(to)p
-Ft(")f Fj(F)-7 b(rameSet.)427 4769 y(T)g(o)34 b(ac)n(hiev)n(e)g(this,)i
-(it)f(will)g(consider)f(all)g(of)g(the)h(F)-7 b(rames)34
-b(within)h(eac)n(h)f(F)-7 b(rameSet)35 b(as)e(a)i(p)r(ossible)f(w)n(a)n
-(y)427 4869 y(of)g(reac)n(hing)e(an)i(in)n(termediate)f(co)r(ordinate)g
-(system)g(that)h(can)g(b)r(e)g(used)g(for)f(the)h(con)n(v)n(ersion.)53
-b(There)427 4969 y(is)30 b(then)h(the)g(p)r(ossibilit)n(y)f(that)h
-(more)e(than)i(one)e(con)n(v)n(ersion)f(path)j(ma)n(y)f(exist)g(and,)h
-(unless)f(the)g(c)n(hoice)427 5068 y(is)36 b(su\016cien)n(tly)g
-(restricted)f(b)n(y)h(the)g Ft(")p Fj(domainlist)p Ft(")f
-Fj(string,)i(the)f(sequence)f(in)i(whic)n(h)e(the)i(F)-7
-b(rames)35 b(are)427 5168 y(considered)j(can)h(b)r(e)h(imp)r(ortan)n
-(t.)71 b(In)39 b(this)h(case,)h(the)f(searc)n(h)d(for)i(a)g(con)n(v)n
-(ersion)e(path)i(pro)r(ceeds)f(as)427 5268 y(follo)n(ws:)510
-5376 y Fi(\017)45 b Fj(Eac)n(h)27 b(\014eld)h(in)f(the)h
-Ft(")p Fj(domainlist)p Ft(")f Fj(string)g(is)g(considered)g(in)h(turn.)
-510 5494 y Fi(\017)45 b Fj(The)26 b(F)-7 b(rames)24 b(within)i(eac)n(h)
-f(F)-7 b(rameSet)25 b(are)f(considered)h(in)g(a)g(sp)r(eci\014c)h
-(order:)34 b(\(1\))26 b(the)f(base)g(F)-7 b(rame)597
-5593 y(is)28 b(alw)n(a)n(ys)d(considered)i(\014rst,)g(\(2\))h(after)f
-(this)h(come)f(all)h(the)g(other)f(F)-7 b(rames)26 b(in)i(F)-7
-b(rame-index)27 b(order)597 5693 y(\(but)h(omitting)f(the)g(base)g(and)
-f(curren)n(t)g(F)-7 b(rames\),)27 b(\(3\))g(the)g(curren)n(t)f(F)-7
-b(rame)27 b(is)g(alw)n(a)n(ys)e(considered)p eop end
-%%Page: 210 220
-TeXDict begin 210 219 bop 0 52 a FF(210)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)597 351 y Fj(last.)35
-b(Ho)n(w)n(ev)n(er,)22 b(if)i(either)f(F)-7 b(rameSet's)23
-b(In)n(v)n(ert)f(attribute)h(is)h(set)f(to)g(a)f(non-zero)g(v)-5
-b(alue)23 b(\(so)g(that)g(the)597 451 y(F)-7 b(rameSet)30
-b(is)h(in)n(v)n(erted\),)f(then)h(its)g(F)-7 b(rames)30
-b(are)f(considered)h(in)g(rev)n(erse)f(order.)44 b(\(Note)31
-b(that)f(this)597 551 y(still)h(means)e(that)h(the)h(base)e(F)-7
-b(rame)29 b(is)h(considered)f(\014rst)h(and)g(the)g(curren)n(t)f(F)-7
-b(rame)30 b(last,)g(b)r(ecause)597 650 y(the)e(In)n(v)n(ert)f(v)-5
-b(alue)27 b(will)h(also)f(cause)g(these)g(F)-7 b(rames)27
-b(to)h(sw)n(ap)e(places.\))510 772 y Fi(\017)45 b Fj(All)34
-b(source)d(F)-7 b(rames)33 b(are)f(\014rst)g(considered)g(\(in)i(the)f
-(appropriate)e(order\))h(for)h(con)n(v)n(ersion)d(to)j(the)597
-872 y(\014rst)26 b(destination)g(F)-7 b(rame.)36 b(If)27
-b(no)e(suitable)h(in)n(termediate)g(co)r(ordinate)f(system)h(emerges,)f
-(they)i(are)597 971 y(then)d(considered)e(again)g(for)g(con)n(v)n
-(ersion)f(to)h(the)i(second)e(destination)h(F)-7 b(rame)22
-b(\(in)i(the)f(appropriate)597 1071 y(order\),)k(and)g(so)g(on.)510
-1193 y Fi(\017)45 b Fj(Generally)-7 b(,)26 b(the)h(\014rst)f(suitable)g
-(in)n(termediate)h(co)r(ordinate)e(system)h(found)h(is)f(used.)36
-b(Ho)n(w)n(ev)n(er,)25 b(the)597 1293 y(o)n(v)n(erall)32
-b(Mapping)i(b)r(et)n(w)n(een)h(the)f(source)g(and)g(destination)g(co)r
-(ordinate)f(systems)h(is)g(also)f(exam-)597 1392 y(ined.)51
-b(Preference)31 b(is)h(giv)n(en)f(to)h(cases)f(where)h(b)r(oth)g(the)h
-(forw)n(ard)d(and)i(in)n(v)n(erse)f(transformations)597
-1492 y(are)g(de\014ned)g(\(as)g(indicated)g(b)n(y)g(the)h(T)-7
-b(ranF)g(orw)n(ard)29 b(and)i(T)-7 b(ranIn)n(v)n(erse)29
-b(attributes\).)48 b(If)31 b(only)g(one)597 1592 y(transformation)26
-b(is)i(de\014ned,)g(the)g(forw)n(ard)e(one)h(is)g(preferred.)510
-1714 y Fi(\017)45 b Fj(If)32 b(the)f(domain)g(of)g(the)h(in)n
-(termediate)e(co)r(ordinate)g(system)h(matc)n(hes)g(the)g(curren)n(t)g
-Ft(")p Fj(domainlist)p Ft(")597 1813 y Fj(\014eld,)21
-b(the)e(con)n(v)n(ersion)d(path)i(is)h(accepted.)33 b(Otherwise,)20
-b(the)f(next)f Ft(")p Fj(domainlist)p Ft(")g Fj(\014eld)g(is)h
-(considered)597 1913 y(and)28 b(the)g(pro)r(cess)e(rep)r(eated.)427
-2057 y(If)33 b(con)n(v)n(ersion)c(is)j(p)r(ossible,)g(the)h(Base)d
-(attributes)i(of)g(the)g(t)n(w)n(o)f(F)-7 b(rameSets)31
-b(will)h(b)r(e)h(mo)r(di\014ed)f(on)f(exit)427 2157 y(to)h(iden)n(tify)
-g(the)g(F)-7 b(rames)31 b(used)g(to)h(access)e(the)i(in)n(termediate)f
-(co)r(ordinate)f(system)i(whic)n(h)f(w)n(as)g(\014nally)427
-2257 y(accepted.)427 2379 y(Note)26 b(that)f(it)h(is)f(p)r(ossible)g
-(to)h(force)e(a)h(particular)f(F)-7 b(rame)25 b(within)h(a)f(F)-7
-b(rameSet)25 b(to)h(b)r(e)g(used)f(as)g(the)g(basis)427
-2478 y(for)32 b(the)g(in)n(termediate)g(co)r(ordinate)f(system,)i(if)f
-(it)h(is)f(suitable,)h(b)n(y)f(\(a\))g(fo)r(cussing)g(atten)n(tion)g
-(on)f(it)i(b)n(y)427 2578 y(sp)r(ecifying)28 b(its)g(domain)g(in)g(the)
-g Ft(")p Fj(domainlist)p Ft(")f Fj(string,)g(or)g(\(b\))h(making)g(it)g
-(the)g(base)f(F)-7 b(rame,)28 b(since)f(this)427 2677
-y(is)h(alw)n(a)n(ys)d(considered)i(\014rst.)259 2822
-y Fd(Sp)s(ecF)-8 b(rame)427 2922 y Fj(Alignmen)n(t)28
-b(o)r(ccurs)e(within)i(the)g(sp)r(ectral)f(system)g(and)g(standard)g
-(of)g(rest)g(giv)n(en)f(b)n(y)i(attributes)f(Align-)427
-3021 y(System)h(and)f(AlignStdOfRest.)259 3166 y Fd(TimeF)-8
-b(rame)427 3265 y Fj(Alignmen)n(t)24 b(o)r(ccurs)e(within)h(the)h(time)
-f(system)g(and)g(time)g(scale)g(giv)n(en)f(b)n(y)h(attributes)g
-(AlignSystem)g(and)427 3365 y(AlignTimeScale.)0 3550
-y Fd(Returned)32 b(V)-8 b(alue:)259 3710 y(astCon)m(v)m(ert\(\))427
-3809 y Fj(If)21 b(the)g(requested)e(co)r(ordinate)g(con)n(v)n(ersion)f
-(is)j(p)r(ossible,)g(the)g(function)g(returns)e(a)h(p)r(oin)n(ter)g(to)
-g(a)g(F)-7 b(rameSet)427 3909 y(whic)n(h)28 b(describ)r(es)f(the)h(con)
-n(v)n(ersion.)36 b(Otherwise,)27 b(a)g(n)n(ull)h(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fj(NULL\))h(is)g(returned)
-427 4008 y(without)g(error.)427 4130 y(If)37 b(a)g(F)-7
-b(rameSet)36 b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)
--7 b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f
-(F)-7 b(rame\))427 4230 y(will)32 b(describ)r(e)f(the)h(source)e(co)r
-(ordinate)h(system,)h(corresp)r(onding)d(to)j(the)g Ft(")p
-Fj(from)p Ft(")e Fj(parameter.)47 b(F)-7 b(rame)427 4330
-y(n)n(um)n(b)r(er)27 b(2)g(\(its)g(curren)n(t)f(F)-7
-b(rame\))27 b(will)g(describ)r(e)g(the)g(destination)g(co)r(ordinate)f
-(system,)h(corresp)r(onding)427 4429 y(to)j(the)g Ft(")p
-Fj(to)p Ft(")e Fj(parameter.)42 b(The)29 b(Mapping)h(whic)n(h)f(in)n
-(ter-relates)f(these)i(t)n(w)n(o)e(F)-7 b(rames)29 b(will)h(p)r(erform)
-f(the)427 4529 y(required)e(con)n(v)n(ersion)e(b)r(et)n(w)n(een)j
-(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)g(systems.)427
-4651 y(Note)h(that)h(a)f(F)-7 b(rameSet)28 b(ma)n(y)f(b)r(e)i(used)f(b)
-r(oth)g(as)g(a)g(Mapping)f(and)h(as)g(a)g(F)-7 b(rame.)38
-b(If)28 b(the)h(result)f(is)g(used)427 4751 y(as)g(a)g(Mapping)g
-(\(e.g.)40 b(with)29 b(astT)-7 b(ran2\),)27 b(then)i(it)g(pro)n(vides)e
-(a)h(means)g(of)g(con)n(v)n(erting)f(co)r(ordinates)g(from)427
-4850 y(the)34 b(source)e(to)i(the)g(destination)f(co)r(ordinate)f
-(system)i(\(or)f(vice)g(v)n(ersa)f(if)i(its)f(in)n(v)n(erse)f
-(transformation)427 4950 y(is)g(selected\).)50 b(If)33
-b(it)f(is)g(used)g(as)f(a)h(F)-7 b(rame,)33 b(its)f(attributes)g(will)g
-(describ)r(e)g(the)g(destination)g(co)r(ordinate)427
-5049 y(system.)0 5235 y Fd(Examples:)227 5398 y Fq(cvt)47
-b(=)h(astConvert\()c(a,)k(b,)f Ft("")g Fq(\);)427 5494
-y Fj(A)n(ttempts)32 b(to)e(con)n(v)n(ert)f(b)r(et)n(w)n(een)i(the)f(co)
-r(ordinate)g(systems)g(represen)n(ted)f(b)n(y)h Ft(")p
-Fj(a)p Ft(")g Fj(and)g Ft(")p Fj(b)p Ft(")g Fj(\(assumed)427
-5593 y(to)25 b(b)r(e)g(F)-7 b(rames\).)35 b(If)26 b(successful,)f(a)f
-(F)-7 b(rameSet)24 b(is)h(returned)f(via)g(the)i Ft(")p
-Fj(cvt)p Ft(")e Fj(p)r(oin)n(ter)g(whic)n(h)h(ma)n(y)f(b)r(e)h(used)427
-5693 y(to)j(apply)f(the)h(con)n(v)n(ersion)d(to)j(sets)f(of)h(co)r
-(ordinates)e(\(e.g.)37 b(using)27 b(astT)-7 b(ran2\).)p
-eop end
-%%Page: 211 221
-TeXDict begin 211 220 bop 3643 52 a FF(211)227 352 y
-Fq(cvt)47 b(=)h(astConvert\()c(astSkyFrame\()p Ft("")p
-Fq(\),)f(astSkyFrame\()p Ft(")p Fq(Equinox=2005)o Ft(")p
-Fq(\),)e Ft("")47 b Fq(\);)427 451 y Fj(Creates)23 b(a)g(F)-7
-b(rameSet)23 b(whic)n(h)g(describ)r(es)g(precession)f(in)i(the)g
-(default)g(FK5)f(celestial)g(co)r(ordinate)f(system)427
-551 y(b)r(et)n(w)n(een)k(equino)n(xes)e(J2000)f(\(also)h(the)i
-(default\))g(and)g(J2005.)33 b(The)26 b(returned)f Ft(")p
-Fj(cvt)p Ft(")f Fj(p)r(oin)n(ter)h(ma)n(y)g(then)427
-650 y(b)r(e)h(passed)f(to)g(astT)-7 b(ran2)24 b(to)h(apply)g(this)h
-(precession)e(correction)f(to)j(an)n(y)e(n)n(um)n(b)r(er)h(of)h(co)r
-(ordinate)e(v)-5 b(alues)427 750 y(giv)n(en)27 b(in)h(radians.)427
-867 y(Note)h(that)h(the)f(returned)f(F)-7 b(rameSet)29
-b(also)f(con)n(tains)g(information)g(ab)r(out)h(ho)n(w)g(to)f(format)h
-(co)r(ordinate)427 967 y(v)-5 b(alues.)47 b(This)30 b(means)h(that)g
-(setting)g(its)g(Rep)r(ort)f(attribute)h(to)g(1)g(is)f(a)h(simple)g(w)n
-(a)n(y)e(to)i(obtain)g(prin)n(ted)427 1067 y(output)j(\(formatted)f(in)
-g(sexagesimal)e(notation\))i(to)g(sho)n(w)f(the)i(co)r(ordinate)e(v)-5
-b(alues)32 b(b)r(efore)h(and)g(after)427 1166 y(con)n(v)n(ersion.)227
-1303 y Fq(cvt)47 b(=)h(astConvert\()c(a,)k(b,)f Ft(")p
-Fq(sky,detector,)p Ft(")c Fq(\);)427 1401 y Fj(A)n(ttempts)34
-b(to)f(con)n(v)n(ert)f(b)r(et)n(w)n(een)h(the)g(co)r(ordinate)f
-(systems)g(represen)n(ted)g(b)n(y)h(the)g(curren)n(t)f(F)-7
-b(rames)33 b(of)427 1501 y Ft(")p Fj(a)p Ft(")21 b Fj(and)i
-Ft(")p Fj(b)p Ft(")f Fj(\(no)n(w)g(assumed)g(to)g(b)r(e)h(F)-7
-b(rameSets\),)23 b(via)f(the)h(in)n(termediate)f Ft(")p
-Fj(SKY)p Ft(")g Fj(co)r(ordinate)f(system.)427 1600 y(This,)28
-b(b)n(y)g(default,)g(is)g(the)g(Domain)g(asso)r(ciated)e(with)i(a)g
-(celestial)f(co)r(ordinate)g(system)g(represen)n(ted)g(b)n(y)427
-1700 y(a)g(SkyF)-7 b(rame.)427 1818 y(If)21 b(this)h(fails)e(\(for)h
-(example,)g(b)r(ecause)g(either)f(F)-7 b(rameSet)21 b(lac)n(ks)e
-(celestial)i(co)r(ordinate)e(information\),)j(then)427
-1917 y(the)27 b(user-de\014ned)g Ft(")p Fj(DETECTOR)p
-Ft(")e Fj(co)r(ordinate)g(system)i(is)f(used)h(instead.)37
-b(If)27 b(this)g(also)f(fails,)h(then)g(all)427 2017
-y(other)g(p)r(ossible)h(w)n(a)n(ys)e(of)h(ac)n(hieving)g(con)n(v)n
-(ersion)e(are)h(considered)h(b)r(efore)g(giving)g(up.)427
-2134 y(The)d(returned)f(p)r(oin)n(ter)h Ft(")p Fj(cvt)p
-Ft(")f Fj(indicates)g(whether)h(con)n(v)n(ersion)d(w)n(as)i(p)r
-(ossible)g(and)h(will)g(ha)n(v)n(e)f(the)h(v)-5 b(alue)427
-2234 y(AST)p Ft(__)p Fj(NULL)32 b(if)h(it)f(w)n(as)f(not.)50
-b(If)32 b(con)n(v)n(ersion)e(w)n(as)g(p)r(ossible,)j
-Ft(")p Fj(cvt)p Ft(")e Fj(will)h(p)r(oin)n(t)h(at)e(a)h(new)g(F)-7
-b(rameSet)427 2334 y(describing)27 b(the)h(con)n(v)n(ersion.)427
-2451 y(The)38 b(Base)e(attributes)h(of)h(the)f(t)n(w)n(o)g(F)-7
-b(rameSets)37 b(will)g(b)r(e)h(set)f(b)n(y)g(astCon)n(v)n(ert)f(to)h
-(indicate)g(whic)n(h)h(of)427 2551 y(their)f(F)-7 b(rames)37
-b(w)n(as)f(used)h(for)g(the)g(in)n(termediate)g(co)r(ordinate)f
-(system.)65 b(This)37 b(means)g(that)h(y)n(ou)e(can)427
-2650 y(subsequen)n(tly)22 b(determine)g(whic)n(h)h(co)r(ordinate)e
-(system)h(w)n(as)f(used)h(b)n(y)g(enquiring)g(the)g(Domain)g(attribute)
-427 2750 y(of)28 b(either)f(base)g(F)-7 b(rame.)0 2917
-y Fd(Notes:)340 3204 y Fi(\017)45 b Fj(The)40 b(Mapping)f(represen)n
-(ted)f(b)n(y)h(the)h(returned)f(F)-7 b(rameSet)40 b(results)f(in)g
-(alignmen)n(t)g(taking)g(place)g(in)427 3304 y(the)d(co)r(ordinate)f
-(system)g(sp)r(eci\014ed)h(b)n(y)f(the)h(AlignSystem)g(attribute)g(of)f
-(the)i Ft(")p Fj(to)p Ft(")d Fj(F)-7 b(rame.)61 b(See)35
-b(the)427 3404 y(description)27 b(of)h(the)g(AlignSystem)g(attribute)f
-(for)g(further)h(details.)340 3539 y Fi(\017)45 b Fj(When)d(aligning)e
-(\(sa)n(y\))g(t)n(w)n(o)h(images,)i(whic)n(h)e(ha)n(v)n(e)f(b)r(een)h
-(calibrated)f(b)n(y)h(attac)n(hing)f(F)-7 b(rameSets)41
-b(to)427 3639 y(them,)26 b(it)e(is)h(usually)e(necessary)g(to)h(con)n
-(v)n(ert)f(b)r(et)n(w)n(een)h(the)h(base)e(F)-7 b(rames)24
-b(\(represen)n(ting)f Ft(")p Fj(nativ)n(e)p Ft(")g Fj(pixel)427
-3738 y(co)r(ordinates\))f(of)g(b)r(oth)i(F)-7 b(rameSets.)34
-b(This)23 b(ma)n(y)f(b)r(e)h(ac)n(hiev)n(ed)f(b)n(y)g(in)n(v)n(erting)g
-(the)h(F)-7 b(rameSets)22 b(\(e.g.)35 b(using)427 3838
-y(astIn)n(v)n(ert\))27 b(so)g(as)g(to)g(in)n(terc)n(hange)f(their)i
-(base)f(and)g(curren)n(t)g(F)-7 b(rames)27 b(b)r(efore)g(using)g
-(astCon)n(v)n(ert.)340 3973 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4073 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4277 3780 12 v 0 4408
-a Fz(astCop)l(y)1482 4409 y Fe(Cop)m(y)37 b(an)i(Ob)7
-b(ject)3302 4408 y Fz(astCop)l(y)0 4603 y Fd(Description:)44
-b Fj(This)38 b(function)h(creates)d(a)i(cop)n(y)f(of)h(an)f(Ob)5
-b(ject)38 b(and)g(returns)f(a)h(p)r(oin)n(ter)f(to)h(the)g(resulting)g
-(new)227 4703 y(Ob)5 b(ject.)62 b(It)36 b(mak)n(es)f(a)h
-Ft(")p Fj(deep)p Ft(")f Fj(cop)n(y)-7 b(,)38 b(whic)n(h)d(con)n(tains)h
-(no)f(references)g(to)h(an)n(y)f(other)g(Ob)5 b(ject)36
-b(\(i.e.)63 b(if)36 b(the)227 4802 y(original)29 b(Ob)5
-b(ject)31 b(con)n(tains)f(references)g(to)g(other)g(Ob)5
-b(jects,)32 b(then)f(the)g(actual)f(data)h(are)e(copied,)j(not)f
-(simply)227 4902 y(the)d(references\).)36 b(This)27 b(means)f(that)i
-(mo)r(di\014cations)e(ma)n(y)h(safely)f(b)r(e)i(made)f(to)f(the)i(cop)n
-(y)e(without)i(indirectly)227 5001 y(a\013ecting)g(an)n(y)e(other)h(Ob)
-5 b(ject.)0 5156 y Fd(Synopsis:)121 b Ft(AstObject)40
-b Fi(\003)p Ft(astCopy\()g(const)h(AstObject)f Fi(\003)p
-Ft(this)h(\))0 5310 y Fd(P)m(arameters:)259 5452 y(this)427
-5552 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27
-b(to)h(b)r(e)g(copied.)0 5718 y Fd(Class)j(Applicabilit)m(y:)p
-eop end
-%%Page: 212 222
-TeXDict begin 212 221 bop 0 52 a FF(212)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(Ob)5
-b(ject)427 451 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 613 y Fd(Returned)32 b(V)-8 b(alue:)259 749
-y(astCop)m(y\(\))427 849 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(new)f(Ob)5
-b(ject.)0 1011 y Fd(Notes:)340 1294 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1393 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1593 3780 12 v 0 1725 a Fz(astCurren)l(tTime)272
-b Fe(Return)38 b(the)h(curren)m(t)e(system)1776 1835
-y(time)2838 1725 y Fz(astCurren)l(tTime)0 2001 y Fd(Description:)44
-b Fj(This)33 b(function)g(returns)e(the)i(curren)n(t)f(system)g(time,)i
-(represen)n(ted)d(in)i(the)f(form)g(sp)r(eci\014ed)h(b)n(y)f(the)227
-2101 y(supplied)i(TimeF)-7 b(rame.)53 b(That)34 b(is,)g(the)g(returned)
-f(\015oating)f(p)r(oin)n(t)i(v)-5 b(alue)33 b(should)g(b)r(e)h(in)n
-(terpreted)e(using)h(the)227 2200 y(attribute)d(v)-5
-b(alues)28 b(of)h(the)h(TimeF)-7 b(rame.)41 b(This)29
-b(includes)g(System,)h(TimeOrigin,)e(L)-7 b(TO\013set,)30
-b(TimeScale,)f(and)227 2300 y(Unit.)0 2450 y Fd(Synopsis:)121
-b Ft(double)41 b(astCurrentTime\()c(AstTimeFrame)i Fi(\003)p
-Ft(this)i(\))0 2599 y Fd(P)m(arameters:)259 2736 y(this)427
-2835 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(TimeF)-7 b(rame.)0
-2997 y Fd(Returned)32 b(V)-8 b(alue:)259 3134 y(astCurren)m(tTime\(\))
-427 3234 y Fj(A)28 b(TimeF)-7 b(rame)27 b(axis)g(v)-5
-b(alue)28 b(represen)n(ting)e(the)i(curren)n(t)e(system)i(time.)0
-3396 y Fd(Notes:)340 3678 y Fi(\017)45 b Fj(V)-7 b(alues)29
-b(of)g(AST)p Ft(__)p Fj(BAD)g(will)g(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(AST)h(error)d(status)
-427 3778 y(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)340 3911 y Fi(\017)45 b Fj(It)33 b(is)f(assumes)f(that)i(the)g
-(system)f(time)g(\(returned)h(b)n(y)f(the)g(C)h(time\(\))g(function\))g
-(follo)n(ws)e(the)i(POSIX)427 4010 y(standard,)24 b(represen)n(ting)e
-(a)h(con)n(tin)n(uous)f(monotonic)h(increasing)f(coun)n(t)h(of)g(SI)h
-(seconds)f(since)g(the)h(ep)r(o)r(c)n(h)427 4110 y(00:00:00)j(UTC)k(1)e
-(Jan)n(uary)f(1970)g(AD)j(\(equiv)-5 b(alen)n(t)30 b(to)g(T)-7
-b(AI)30 b(with)g(a)g(constan)n(t)f(o\013set\).)44 b(Resolution)30
-b(is)427 4210 y(one)d(second.)340 4343 y Fi(\017)45 b
-Fj(An)24 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(TimeF)-7
-b(rame)23 b(has)g(a)g(TimeScale)h(v)-5 b(alue)23 b(whic)n(h)h(cannot)f
-(b)r(e)h(con)n(v)n(erted)427 4442 y(to)k(T)-7 b(AI)28
-b(\(e.g.)36 b Ft(")p Fj(angular)p Ft(")26 b Fj(systems)h(suc)n(h)g(as)g
-(UT1,)g(GMST,)h(LMST)g(and)g(LAST\).)340 4575 y Fi(\017)45
-b Fj(An)n(y)28 b(inaccuracy)e(in)i(the)g(system)f(clo)r(c)n(k)g(will)h
-(b)r(e)g(re\015ected)f(in)h(the)g(v)-5 b(alue)27 b(returned)h(b)n(y)f
-(this)h(function.)p 0 4775 V 0 4905 a Fz(astCurv)l(e)1318
-4906 y Fe(Dra)m(w)38 b(a)g(geo)s(desic)g(curv)m(e)3253
-4905 y Fz(astCurv)l(e)0 5095 y Fd(Description:)44 b Fj(This)21
-b(function)h(dra)n(ws)e(a)h(geo)r(desic)f(curv)n(e)g(b)r(et)n(w)n(een)h
-(t)n(w)n(o)g(p)r(oin)n(ts)g(in)g(the)h(ph)n(ysical)e(co)r(ordinate)g
-(system)227 5195 y(of)30 b(a)g(Plot.)43 b(The)30 b(curv)n(e)f(dra)n(wn)
-g(is)h(the)g(path)g(of)g(shortest)f(distance)h(joining)g(the)g(t)n(w)n
-(o)f(p)r(oin)n(ts)h(\(as)g(de\014ned)g(b)n(y)227 5295
-y(the)g(astDistance)e(function)i(for)e(the)h(curren)n(t)f(F)-7
-b(rame)29 b(of)g(the)g(Plot\).)40 b(F)-7 b(or)29 b(example,)g(if)g(the)
-g(curren)n(t)f(F)-7 b(rame)29 b(is)227 5394 y(a)g(basic)f(F)-7
-b(rame,)28 b(then)i(the)f(curv)n(e)f(joining)g(the)h(t)n(w)n(o)f(p)r
-(oin)n(ts)h(will)g(b)r(e)g(a)f(straigh)n(t)g(line)h(in)g(ph)n(ysical)f
-(co)r(ordinate)227 5494 y(space.)34 b(If)23 b(the)f(curren)n(t)f(F)-7
-b(rame)21 b(is)h(more)f(sp)r(ecialised)g(and)h(describ)r(es,)g(for)g
-(instance,)g(a)g(sky)f(co)r(ordinate)g(system,)227 5593
-y(then)32 b(the)f(geo)r(desic)g(curv)n(e)f(w)n(ould)g(b)r(e)i(a)f
-(great)e(circle)i(in)g(ph)n(ysical)g(co)r(ordinate)e(space)i(passing)f
-(through)g(the)227 5693 y(t)n(w)n(o)d(sky)g(p)r(ositions)g(giv)n(en.)p
-eop end
-%%Page: 213 223
-TeXDict begin 213 222 bop 3643 52 a FF(213)227 351 y
-Fj(Note)27 b(that)g(the)g(geo)r(desic)f(curv)n(e)g(is)h(transformed)e
-(in)n(to)i(graphical)e(co)r(ordinate)h(space)g(for)g(plotting,)h(so)f
-(that)h(a)227 451 y(straigh)n(t)20 b(line)h(in)g(ph)n(ysical)e(co)r
-(ordinates)h(ma)n(y)g(result)g(in)h(a)f(curv)n(ed)g(line)h(b)r(eing)g
-(dra)n(wn)e(if)j(the)f(Mapping)f(in)n(v)n(olv)n(ed)227
-551 y(is)29 b(non-linear.)40 b(An)n(y)29 b(discon)n(tin)n(uities)g(in)g
-(the)h(Mapping)e(b)r(et)n(w)n(een)h(ph)n(ysical)g(and)f(graphical)g(co)
-r(ordinates)g(are)227 650 y(catered)f(for,)g(as)g(is)h(an)n(y)e
-(clipping)i(established)f(using)h(astClip.)227 783 y(If)c(y)n(ou)f
-(need)h(to)g(dra)n(w)e(man)n(y)h(geo)r(desic)g(curv)n(es)g(end-to-end,)
-h(then)g(the)g(astP)n(olyCurv)n(e)d(function)j(is)g(equiv)-5
-b(alen)n(t)227 883 y(to)28 b(rep)r(eatedly)f(using)g(astCurv)n(e,)f
-(but)j(will)e(usually)h(b)r(e)g(more)e(e\016cien)n(t.)227
-1015 y(If)i(y)n(ou)f(need)h(to)f(dra)n(w)g(curv)n(es)f(whic)n(h)i(are)e
-(not)i(geo)r(desics,)e(see)i(astGenCurv)n(e)e(or)h(astGridLine.)0
-1182 y Fd(Synopsis:)121 b Ft(void)42 b(astCurve\()e(AstPlot)g
-Fi(\003)p Ft(this,)h(const)h(double)f(start[],)f(const)i(double)f
-(finish[])f(\))0 1348 y Fd(P)m(arameters:)259 1501 y(this)427
-1600 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259 1741
-y Fd(start)427 1841 y Fj(An)j(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)
-n(t)h(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n
-(ysical)d(co)r(ordinates)h(of)g(the)427 1941 y(\014rst)e(p)r(oin)n(t)f
-(on)h(the)g(geo)r(desic)e(curv)n(e.)259 2082 y Fd(\014nish)427
-2181 y Fj(An)31 b(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f
-(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 2281 y(second)d(p)r(oin)n(t)h(on)f(the)h(geo)
-r(desic)f(curv)n(e.)0 2460 y Fd(Notes:)340 2759 y Fi(\017)45
-b Fj(No)33 b(curv)n(e)f(is)h(dra)n(wn)g(if)g(either)g(of)g(the)h
-Ft(")p Fj(start)p Ft(")e Fj(or)g Ft(")p Fj(\014nish)p
-Ft(")g Fj(arra)n(ys)f(con)n(tains)h(an)n(y)g(co)r(ordinates)g(with)427
-2858 y(the)c(v)-5 b(alue)28 b(AST)p Ft(__)p Fj(BAD.)340
-2999 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340
-3141 y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3240 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 3456 3780 12 v 0 3587
-a Fz(astDSBSp)t(ecF)-11 b(rame)169 b Fe(Create)37 b(a)i(DSBSp)s(ecF)-10
-b(rame)169 b Fz(astDSBSp)t(ecF)-11 b(rame)0 3792 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(DSBSp)r(ecF)-7
-b(rame)28 b(and)g(optionally)e(initialises)i(its)f(attributes.)227
-3925 y(A)37 b(DSBSp)r(ecF)-7 b(rame)37 b(is)f(a)g(sp)r(ecialised)g
-(form)g(of)h(Sp)r(ecF)-7 b(rame)36 b(whic)n(h)h(represen)n(ts)e(p)r
-(ositions)h(in)g(a)g(sp)r(ectrum)227 4025 y(obtained)f(using)g(a)f
-(dual)h(sideband)g(instrumen)n(t.)60 b(Suc)n(h)35 b(an)g(instrumen)n(t)
-g(pro)r(duces)f(a)h(sp)r(ectrum)g(in)h(whic)n(h)227 4124
-y(eac)n(h)f(p)r(oin)n(t)h(con)n(tains)e(con)n(tributions)h(from)g(t)n
-(w)n(o)g(distinctly)h(di\013eren)n(t)f(frequencies,)i(one)f(from)f(the)
-h Ft(")p Fj(lo)n(w)n(er)227 4224 y(side)41 b(band)p Ft(")f
-Fj(\(LSB\))h(and)f(one)g(from)h(the)g Ft(")p Fj(upp)r(er)f(side)g(band)
-p Ft(")g Fj(\(USB\).)i(Corresp)r(onding)d(LSB)h(and)g(USB)227
-4324 y(frequencies)d(are)f(connected)h(b)n(y)g(the)g(fact)h(that)f
-(they)g(are)g(an)f(equal)h(distance)g(on)g(either)g(side)g(of)g(a)g
-(\014xed)227 4423 y(cen)n(tral)27 b(frequency)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(Lo)r(cal)e(Oscillator)p Ft(")g Fj(\(LO\))i(frequency)-7
-b(.)227 4556 y(When)33 b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g
-(a)f(sp)r(ectrum,)i(it)g(is)e(necessary)f(to)i(indicate)g(whether)g
-(the)g(quoted)227 4656 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)
-g(or)f(the)i(corresp)r(onding)d(LSB)i(p)r(osition.)36
-b(The)27 b(SideBand)g(attribute)g(pro)n(vides)227 4755
-y(this)36 b(indication.)60 b(Another)35 b(option)g(that)h(the)f
-(SideBand)g(attribute)h(pro)n(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r
-(ectral)227 4855 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)
-f(o\013set)g(from)h(the)g(LO)f(frequency)-7 b(.)227 4988
-y(In)32 b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n
-(y)g(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)
-227 5087 y Ft(")p Fj(cen)n(tral)p Ft(")37 b Fj(sp)r(ectral)h(p)r
-(osition.)69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h
-(that)f(of)h(some)f(in)n(teresting)f(sp)r(ectral)227
-5187 y(feature.)f(The)23 b(distance)h(from)f(this)h(cen)n(tral)f(p)r
-(osition)g(to)h(the)g(LO)f(frequency)g(is)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(in)n(termediate)227 5287 y(frequency)p Ft(")k
-Fj(\(IF\).)h(The)g(v)-5 b(alue)28 b(supplied)h(for)f(IF)h(can)f(b)r(e)h
-(a)f(signed)g(v)-5 b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f
-(the)227 5386 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n
-(w)g(the)h(cen)n(tral)f(p)r(osition.)0 5552 y Fd(Synopsis:)121
-b Ft(AstDSBSpecFrame)37 b Fi(\003)p Ft(astDSBSpecFrame\()g(const)k
-(char)h Fi(\003)p Ft(options,)e(...)86 b(\))0 5718 y
-Fd(P)m(arameters:)p eop end
-%%Page: 214 224
-TeXDict begin 214 223 bop 0 52 a FF(214)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(options)427
-451 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-551 y(assignmen)n(ts)f(to)g(b)r(e)h(used)g(for)f(initialising)g(the)h
-(new)g(DSBSp)r(ecF)-7 b(rame.)37 b(The)28 b(syn)n(tax)f(used)g(is)h
-(iden)n(tical)427 650 y(to)h(that)h(for)f(the)g(astSet)g(function)h
-(and)f(ma)n(y)g(include)g Ft(")p Fj(prin)n(tf)p Ft(")g
-Fj(format)g(sp)r(eci\014ers)f(iden)n(ti\014ed)i(b)n(y)f
-Ft(")p Fj(\045)p Ft(")427 750 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 889 y Fd(...)427 989 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1089 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1188 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1288 y Fj(function\).)0
-1463 y Fd(Returned)32 b(V)-8 b(alue:)259 1613 y(astDSBSp)s(ecF)g
-(rame\(\))427 1713 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(DSBSp)r
-(ecF)-7 b(rame.)0 1888 y Fd(Notes:)340 2184 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2284 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 2497 3780 12 v 0 2627 a Fz(astDecomp)t(ose)246
-b Fe(Decomp)s(ose)39 b(a)f(Mapping)g(in)m(to)f(t)m(w)m(o)1342
-2740 y(comp)s(onen)m(t)g(Mappings)2945 2627 y Fz(astDecomp)t(ose)0
-2943 y Fd(Description:)44 b Fj(This)33 b(function)h(returns)e(p)r(oin)n
-(ters)g(to)h(t)n(w)n(o)f(Mappings)g(whic)n(h,)j(when)e(applied)g
-(either)f(in)i(series)d(or)227 3042 y(parallel,)c(are)f(equiv)-5
-b(alen)n(t)28 b(to)f(the)h(supplied)g(Mapping.)227 3174
-y(Since)h(the)g(F)-7 b(rame)28 b(class)f(inherits)i(from)f(the)h
-(Mapping)f(class,)g(F)-7 b(rames)27 b(can)h(b)r(e)h(considered)f(as)f
-(sp)r(ecial)i(t)n(yp)r(es)227 3273 y(of)f(Mappings)f(and)g(so)g(this)h
-(metho)r(d)g(can)f(b)r(e)h(used)g(to)f(decomp)r(ose)g(either)h(CmpMaps)
-f(or)g(CmpF)-7 b(rames.)0 3436 y Fd(Synopsis:)121 b Ft(void)42
-b(astDecompose\()c(AstMapping)h Fi(\003)p Ft(this,)i(AstMapping)f
-Fi(\003\003)p Ft(map1,)g(AstMapping)g Fi(\003\003)p Ft(map2,)g(int)227
-3536 y Fi(\003)p Ft(series,)g(int)j Fi(\003)p Ft(invert1,)d(int)i
-Fi(\003)p Ft(invert2)e(\))0 3699 y Fd(P)m(arameters:)259
-3849 y(this)427 3948 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259
-4088 y Fd(map1)427 4188 y Fj(Address)f(of)h(a)f(lo)r(cation)g(to)h
-(receiv)n(e)e(a)h(p)r(oin)n(ter)g(to)h(\014rst)f(comp)r(onen)n(t)g
-(Mapping.)259 4327 y Fd(map2)427 4427 y Fj(Address)g(of)h(a)f(lo)r
-(cation)g(to)h(receiv)n(e)e(a)h(p)r(oin)n(ter)g(to)h(second)f(comp)r
-(onen)n(t)g(Mapping.)259 4566 y Fd(series)427 4666 y
-Fj(Address)33 b(of)h(a)f(lo)r(cation)g(to)h(receiv)n(e)e(a)h(v)-5
-b(alue)34 b(indicating)f(if)i(the)f(comp)r(onen)n(t)f(Mappings)g(are)g
-(applied)427 4766 y(in)38 b(series)e(or)h(parallel.)65
-b(A)38 b(non-zero)e(v)-5 b(alue)37 b(means)g(that)h(the)f(supplied)h
-(Mapping)f(is)h(equiv)-5 b(alen)n(t)37 b(to)427 4865
-y(applying)26 b(map1)g(follo)n(w)n(ed)g(b)n(y)g(map2)g(in)h(series.)35
-b(A)27 b(zero)e(v)-5 b(alue)27 b(means)f(that)h(the)g(supplied)g
-(Mapping)f(is)427 4965 y(equiv)-5 b(alen)n(t)29 b(to)g(applying)f(map1)
-g(to)h(the)g(lo)n(w)n(er)f(n)n(um)n(b)r(ered)g(axes)g(and)h(map2)g(to)f
-(the)i(higher)e(n)n(um)n(b)r(ered)427 5065 y(axes,)f(in)h(parallel.)259
-5204 y Fd(in)m(v)m(ert1)427 5304 y Fj(The)g(v)-5 b(alue)27
-b(of)h(the)g(In)n(v)n(ert)f(attribute)g(to)h(b)r(e)g(used)f(with)i
-(map1.)259 5443 y Fd(in)m(v)m(ert2)427 5543 y Fj(The)f(v)-5
-b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g(to)h(b)r(e)g(used)f
-(with)i(map2.)0 5718 y Fd(Class)i(Applicabilit)m(y:)p
-eop end
-%%Page: 215 225
-TeXDict begin 215 224 bop 3643 52 a FF(215)259 351 y
-Fd(CmpMap)427 451 y Fj(If)22 b(the)g(supplied)g(Mapping)g(is)f(a)g
-(CmpMap,)i(then)f(map1)f(and)h(map2)f(will)h(b)r(e)g(returned)f
-(holding)g(p)r(oin)n(ters)427 551 y(to)31 b(the)g(comp)r(onen)n(t)g
-(Mappings)f(used)h(to)g(create)f(the)h(CmpMap,)h(either)f(in)g(series)f
-(or)g(parallel.)46 b(Note,)427 650 y(c)n(hanging)19 b(the)i(In)n(v)n
-(ert)e(attribute)h(of)h(either)f(of)g(the)g(comp)r(onen)n(t)g(Mappings)
-g(using)g(the)g(returned)g(p)r(oin)n(ters)427 750 y(will)31
-b(ha)n(v)n(e)e(no)g(e\013ect)i(on)f(the)g(supplied)h(CmpMap.)44
-b(This)30 b(is)g(b)r(ecause)g(the)g(CmpMap)h(remem)n(b)r(ers)e(and)427
-849 y(uses)f(the)h(original)e(settings)i(of)f(the)h(In)n(v)n(ert)f
-(attributes)g(\(that)i(is,)e(the)h(v)-5 b(alues)29 b(of)f(the)h(In)n(v)
-n(ert)f(attributes)427 949 y(when)37 b(the)g(CmpMap)g(w)n(as)e(\014rst)
-h(created\).)64 b(These)36 b(are)f(the)i(In)n(v)n(ert)f(v)-5
-b(alues)36 b(whic)n(h)h(are)e(returned)h(in)427 1049
-y(in)n(v)n(ert1)27 b(and)g(in)n(v)n(ert2.)259 1182 y
-Fd(T)-8 b(ranMap)427 1281 y Fj(If)22 b(the)h(supplied)f(Mapping)f(is)h
-(a)f(T)-7 b(ranMap,)22 b(then)g(map1)g(and)f(map2)g(will)h(b)r(e)h
-(returned)e(holding)g(p)r(oin)n(ters)427 1381 y(to)28
-b(the)h(forw)n(ard)d(and)i(in)n(v)n(erse)f(Mappings)g(represen)n(ted)g
-(b)n(y)h(the)g(T)-7 b(ranMap)27 b(\(zero)h(will)g(b)r(e)g(returned)g
-(for)427 1481 y(series\).)46 b(Note,)32 b(c)n(hanging)d(the)j(In)n(v)n
-(ert)d(attribute)i(of)g(either)g(of)g(the)g(comp)r(onen)n(t)g(Mappings)
-f(using)g(the)427 1580 y(returned)25 b(p)r(oin)n(ters)g(will)h(ha)n(v)n
-(e)e(no)h(e\013ect)h(on)f(the)g(supplied)h(T)-7 b(ranMap.)35
-b(This)26 b(is)f(b)r(ecause)g(the)h(T)-7 b(ranMap)427
-1680 y(remem)n(b)r(ers)31 b(and)g(uses)h(the)g(original)e(settings)h
-(of)h(the)f(In)n(v)n(ert)g(attributes)h(\(that)g(is,)g(the)g(v)-5
-b(alues)32 b(of)f(the)427 1779 y(In)n(v)n(ert)23 b(attributes)h(when)g
-(the)h(T)-7 b(ranMap)23 b(w)n(as)f(\014rst)i(created\).)35
-b(These)24 b(are)f(the)h(In)n(v)n(ert)f(v)-5 b(alues)24
-b(whic)n(h)g(are)427 1879 y(returned)j(in)h(in)n(v)n(ert1)f(and)g(in)n
-(v)n(ert2.)259 2012 y Fd(Mapping)427 2112 y Fj(F)-7 b(or)31
-b(an)n(y)g(class)f(of)i(Mapping)f(other)g(than)g(a)g(CmpMap,)i(map1)e
-(will)h(b)r(e)f(returned)g(holding)h(a)f(clone)g(of)427
-2211 y(the)f(supplied)g(Mapping)g(p)r(oin)n(ter,)g(and)f(map2)g(will)h
-(b)r(e)g(returned)g(holding)f(a)g(NULL)h(p)r(oin)n(ter.)43
-b(In)n(v)n(ert1)427 2311 y(will)30 b(b)r(e)g(returned)g(holding)f(the)h
-(curren)n(t)f(v)-5 b(alue)29 b(of)h(the)g(In)n(v)n(ert)f(attribute)h
-(for)f(the)h(supplied)g(Mapping,)427 2411 y(and)e(in)n(v)n(ert2)e(will)
-i(b)r(e)g(returned)f(holding)g(zero.)259 2544 y Fd(CmpF)-8
-b(rame)427 2643 y Fj(If)40 b(the)g(supplied)f(Mapping)g(is)h(a)e(CmpF)
--7 b(rame,)42 b(then)e(map1)f(and)g(map2)g(will)g(b)r(e)h(returned)f
-(holding)427 2743 y(p)r(oin)n(ters)33 b(to)g(the)h(comp)r(onen)n(t)f(F)
--7 b(rames)32 b(used)i(to)f(create)f(the)i(CmpF)-7 b(rame.)54
-b(The)33 b(comp)r(onen)n(t)g(F)-7 b(rames)427 2843 y(are)27
-b(considered)f(to)i(b)r(e)g(in)g(applied)f(in)h(parallel.)259
-2976 y Fd(F)-8 b(rame)427 3075 y Fj(F)h(or)24 b(an)n(y)g(class)g(of)g
-(F)-7 b(rame)24 b(other)g(than)h(a)f(CmpF)-7 b(rame,)25
-b(map1)f(will)h(b)r(e)g(returned)f(holding)g(a)h(clone)f(of)g(the)427
-3175 y(supplied)k(F)-7 b(rame)27 b(p)r(oin)n(ter,)h(and)f(map2)g(will)h
-(b)r(e)g(returned)f(holding)g(a)g(NULL)h(p)r(oin)n(ter.)0
-3337 y Fd(Notes:)340 3620 y Fi(\017)45 b Fj(The)32 b(returned)f(In)n(v)
-n(ert)g(v)-5 b(alues)31 b(should)g(b)r(e)h(used)g(in)g(preference)f(to)
-g(the)h(curren)n(t)f(v)-5 b(alues)31 b(of)h(the)g(In)n(v)n(ert)427
-3720 y(attribute)g(in)h(map1)e(and)h(map2.)49 b(This)32
-b(is)g(b)r(ecause)g(the)g(attributes)g(ma)n(y)f(ha)n(v)n(e)g(c)n
-(hanged)g(v)-5 b(alue)32 b(since)427 3820 y(the)c(Mappings)f(w)n(ere)g
-(com)n(bined.)340 3953 y Fi(\017)45 b Fj(An)n(y)28 b(c)n(hanges)f(made)
-h(to)g(the)g(comp)r(onen)n(t)g(Mappings)f(using)h(the)g(returned)g(p)r
-(oin)n(ters)f(will)h(b)r(e)h(re\015ected)427 4052 y(in)f(the)g
-(supplied)g(Mapping.)p 0 4252 3780 12 v 0 4384 a Fz(astDelFits)169
-b Fe(Delete)38 b(the)h(curren)m(t)e(FITS)j(card)e(in)g(a)h(FitsChan)166
-b Fz(astDelFits)0 4550 y Fd(Description:)44 b Fj(This)30
-b(function)g(deletes)g(the)g(curren)n(t)f(FITS)h(card)f(from)h(a)f
-(FitsChan.)44 b(The)29 b(curren)n(t)g(card)g(ma)n(y)g(b)r(e)227
-4649 y(selected)e(using)g(the)h(Card)e(attribute)i(\(if)g(its)f(index)g
-(is)g(kno)n(wn\))g(or)f(b)n(y)h(using)g(astFindFits)h(\(if)g(only)f
-(the)g(FITS)227 4749 y(k)n(eyw)n(ord)f(is)h(kno)n(wn\).)227
-4874 y(After)h(deletion,)g(the)g(follo)n(wing)f(card)f(b)r(ecomes)h
-(the)h(curren)n(t)f(card.)0 5024 y Fd(Synopsis:)121 b
-Ft(void)42 b(astDelFits\()d(AstFitsChan)g Fi(\003)p Ft(this)i(\))0
-5174 y Fd(P)m(arameters:)259 5310 y(this)427 5410 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)0 5572 y Fd(Notes:)p eop end
-%%Page: 216 226
-TeXDict begin 216 225 bop 0 52 a FF(216)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(This)23 b(function)f(returns)g(without)h(action)e(if)i(the)g
-(FitsChan)f(is)h(initially)f(p)r(ositioned)g(at)g(the)h
-Ft(")p Fj(end-of-\014le)p Ft(")427 451 y Fj(\(i.e.)38
-b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan\).)340 586 y Fi(\017)45
-b Fj(If)36 b(there)f(are)f(no)h(subsequen)n(t)f(cards)g(in)i(the)f
-(FitsChan,)i(then)f(the)f(Card)g(attribute)g(is)g(left)h(p)r(oin)n
-(ting)427 686 y(at)e(the)g Ft(")p Fj(end-of-\014le)p
-Ft(")e Fj(after)h(deletion)h(\(i.e.)55 b(is)33 b(set)h(to)f(one)g(more)
-g(than)g(the)h(n)n(um)n(b)r(er)g(of)f(cards)f(in)i(the)427
-785 y(FitsChan\).)p 0 989 3780 12 v 0 1121 a Fz(astDelete)908
-b Fe(Delete)39 b(an)f(Ob)7 b(ject)905 b Fz(astDelete)0
-1314 y Fd(Description:)44 b Fj(This)25 b(function)f(deletes)h(an)f(Ob)5
-b(ject,)25 b(freeing)e(all)h(resources)f(asso)r(ciated)g(with)h(it)h
-(and)f(rendering)f(an)n(y)227 1414 y(remaining)k(p)r(oin)n(ters)g(to)g
-(the)h(Ob)5 b(ject)28 b(in)n(v)-5 b(alid.)227 1541 y(Note)28
-b(that)h(deletion)f(is)g(unconditional,)g(regardless)e(of)i(whether)g
-(other)g(p)r(oin)n(ters)f(to)h(the)h(Ob)5 b(ject)28 b(are)f(still)h(in)
-227 1640 y(use)d(\(p)r(ossibly)f(within)i(other)e(Ob)5
-b(jects\).)36 b(A)25 b(safer)f(approac)n(h)f(is)h(to)h(defer)g
-(deletion,)g(un)n(til)g(all)g(references)e(to)i(an)227
-1740 y(Ob)5 b(ject)21 b(ha)n(v)n(e)f(expired,)h(b)n(y)g(using)g
-(astBegin/astEnd)d(\(together)j(with)g(astClone)f(and)h(astAnn)n(ul)g
-(if)g(necessary\).)0 1894 y Fd(Synopsis:)121 b Ft(AstObject)40
-b Fi(\003)p Ft(astDelete\()f(AstObject)h Fi(\003)p Ft(this)h(\))0
-2048 y Fd(P)m(arameters:)259 2189 y(this)427 2289 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g(deleted.)0
-2455 y Fd(Class)j(Applicabilit)m(y:)259 2596 y(Ob)5 b(ject)427
-2696 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 2862 y Fd(Returned)32 b(V)-8 b(alue:)259 3003
-y(astDelete\(\))427 3103 y Fj(A)28 b(n)n(ull)g(Ob)5 b(ject)27
-b(p)r(oin)n(ter)h(\(AST)p Ft(__)p Fj(NULL\))g(is)f(alw)n(a)n(ys)f
-(returned.)0 3269 y Fd(Notes:)340 3556 y Fi(\017)45 b
-Fj(This)30 b(function)h(attempts)f(to)g(execute)g(ev)n(en)g(if)g(the)g
-(AST)h(error)d(status)i(is)g(set)g(on)f(en)n(try)-7 b(,)31
-b(although)e(no)427 3656 y(further)f(error)d(rep)r(ort)i(will)h(b)r(e)g
-(made)f(if)i(it)f(subsequen)n(tly)f(fails)g(under)h(these)f
-(circumstances.)p 0 3860 V 0 3992 a Fz(astDistance)308
-b Fe(Calculate)36 b(the)j(distance)f(b)s(et)m(w)m(een)g(t)m(w)m(o)1437
-4091 y(p)s(oin)m(ts)f(in)i(a)g(F)-10 b(rame)3102 3992
-y Fz(astDistance)0 4285 y Fd(Description:)44 b Fj(This)30
-b(function)h(\014nds)f(the)g(distance)g(b)r(et)n(w)n(een)g(t)n(w)n(o)f
-(p)r(oin)n(ts)h(whose)f(F)-7 b(rame)30 b(co)r(ordinates)e(are)h(giv)n
-(en.)227 4384 y(The)f(distance)f(calculated)g(is)h(that)g(along)e(the)i
-(geo)r(desic)f(curv)n(e)f(that)i(joins)g(the)g(t)n(w)n(o)e(p)r(oin)n
-(ts.)227 4511 y(F)-7 b(or)34 b(example,)h(in)f(a)f(basic)h(F)-7
-b(rame,)35 b(the)f(distance)f(calculated)h(will)g(b)r(e)g(the)g
-(Cartesian)f(distance)h(along)e(the)227 4611 y(straigh)n(t)k(line)h
-(joining)g(the)h(t)n(w)n(o)e(p)r(oin)n(ts.)65 b(F)-7
-b(or)37 b(a)f(more)g(sp)r(ecialised)h(F)-7 b(rame)36
-b(describing)h(a)f(sky)h(co)r(ordinate)227 4710 y(system,)25
-b(ho)n(w)n(ev)n(er,)f(it)h(w)n(ould)f(b)r(e)i(the)f(distance)f(along)g
-(the)h(great)f(circle)g(passing)g(through)g(t)n(w)n(o)g(sky)g(p)r
-(ositions.)0 4864 y Fd(Synopsis:)121 b Ft(double)41 b(astDistance\()e
-(AstFrame)h Fi(\003)p Ft(this,)h(const)g(double)h(point1[],)d(const)j
-(double)f(point2[])227 4964 y(\))0 5118 y Fd(P)m(arameters:)259
-5259 y(this)427 5359 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 5494 y Fd(p)s(oin)m(t1)427 5593 y Fj(An)32
-b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g
-(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)
-427 5693 y(co)r(ordinates)c(of)i(the)g(\014rst)f(p)r(oin)n(t.)p
-eop end
-%%Page: 217 227
-TeXDict begin 217 226 bop 3643 52 a FF(217)259 351 y
-Fd(p)s(oin)m(t2)427 451 y Fj(An)30 b(arra)n(y)e(of)h(double,)h(with)g
-(one)g(elemen)n(t)f(for)g(eac)n(h)g(F)-7 b(rame)29 b(axis)g(con)n
-(taining)g(the)h(co)r(ordinates)e(of)h(the)427 551 y(second)e(p)r(oin)n
-(t.)0 749 y Fd(Returned)32 b(V)-8 b(alue:)259 921 y(astDistance)427
-1021 y Fj(The)28 b(distance)f(b)r(et)n(w)n(een)h(the)g(t)n(w)n(o)f(p)r
-(oin)n(ts.)0 1219 y Fd(Notes:)340 1538 y Fi(\017)45 b
-Fj(This)30 b(function)g(will)f(return)g(a)g Ft(")p Fj(bad)p
-Ft(")g Fj(result)g(v)-5 b(alue)29 b(\(AST)p Ft(__)p Fj(BAD\))h(if)g(an)
-n(y)f(of)g(the)h(input)g(co)r(ordinates)427 1638 y(has)d(this)h(v)-5
-b(alue.)340 1788 y Fi(\017)45 b Fj(A)27 b Ft(")p Fj(bad)p
-Ft(")e Fj(v)-5 b(alue)26 b(will)g(also)f(b)r(e)i(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)f(with)h(the)h(AST)f(error)f(status)h
-(set,)427 1888 y(or)h(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 2124 3780 12 v 0 2255 a Fz(astDo)l(wnsize)275 b Fe(Reduce)40
-b(the)e(n)m(um)m(b)s(er)g(of)h(v)m(ertices)e(in)i(a)1684
-2355 y(P)m(olygon)3059 2255 y Fz(astDo)l(wnsize)0 2580
-y Fd(Description:)44 b Fj(This)26 b(function)h(returns)e(a)g(p)r(oin)n
-(ter)h(to)g(a)f(new)h(P)n(olygon)e(that)i(con)n(tains)f(a)g(subset)h
-(of)g(the)h(v)n(ertices)d(in)227 2680 y(the)k(supplied)f(P)n(olygon.)35
-b(The)27 b(subset)g(is)g(c)n(hosen)f(so)g(that)i(the)f(returned)g(P)n
-(olygon)e(is)h(a)h(go)r(o)r(d)f(appro)n(ximation)227
-2779 y(to)g(the)h(supplied)f(P)n(olygon,)e(within)j(the)f(limits)h(sp)r
-(eci\014ed)f(b)n(y)g(the)g(supplied)g(parameter)f(v)-5
-b(alues.)36 b(That)26 b(is,)g(the)227 2879 y(densit)n(y)g(of)g(p)r(oin)
-n(ts)f(in)h(the)g(returned)g(P)n(olygon)d(is)j(greater)e(at)i(p)r(oin)n
-(ts)f(where)g(the)i(curv)-5 b(ature)25 b(of)g(the)h(b)r(oundary)227
-2979 y(of)i(the)g(supplied)g(P)n(olygon)d(is)j(greater.)0
-3164 y Fd(Synopsis:)121 b Ft(AstPolygon)39 b Fi(\003)p
-Ft(astDownsize\()f(AstPolygon)i Fi(\003)p Ft(this,)h(double)g(maxerr,)g
-(int)h(maxvert)f(\))0 3350 y Fd(P)m(arameters:)259 3523
-y(this)427 3622 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(P)n(olygon.)259
-3773 y Fd(maxerr)427 3873 y Fj(The)22 b(maxim)n(um)g(allo)n(w)n(ed)e
-(discrepancy)g(b)r(et)n(w)n(een)i(the)g(supplied)g(and)g(returned)f(P)n
-(olygons,)g(expressed)f(as)427 3972 y(a)k(geo)r(desic)f(distance)h
-(within)g(the)h(P)n(olygon's)c(co)r(ordinate)i(frame.)36
-b(If)24 b(this)g(is)g(zero)f(or)g(less,)i(the)f(returned)427
-4072 y(P)n(olygon)i(will)h(ha)n(v)n(e)g(the)h(n)n(um)n(b)r(er)f(of)h(v)
-n(ertices)e(sp)r(eci\014ed)i(b)n(y)f(maxv)n(ert.)259
-4223 y Fd(maxv)m(ert)427 4323 y Fj(The)36 b(maxim)n(um)f(allo)n(w)n(ed)
-f(n)n(um)n(b)r(er)h(of)h(v)n(ertices)e(in)i(the)f(returned)g(P)n
-(olygon.)59 b(If)35 b(this)h(is)f(less)g(than)h(3,)427
-4422 y(the)c(n)n(um)n(b)r(er)e(of)h(v)n(ertices)f(in)h(the)g(returned)g
-(P)n(olygon)d(will)k(b)r(e)f(the)g(minim)n(um)h(needed)f(to)g(ac)n
-(hiev)n(e)e(the)427 4522 y(maxim)n(um)f(discrepancy)e(sp)r(eci\014ed)i
-(b)n(y)f(maxerr.)0 4720 y Fd(Returned)32 b(V)-8 b(alue:)259
-4893 y(astDo)m(wnsize\(\))427 4992 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(new)f(P)n(olygon.)0 5191 y Fd(Notes:)340
-5509 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5609 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p eop end
-%%Page: 218 228
-TeXDict begin 218 227 bop 0 52 a FF(218)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astEllipse)924 b Fe(Create)37 b(a)i(Ellipse)920
-b Fz(astEllipse)0 668 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Ellipse)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 792 y(A)g(Ellipse)f(is)h(a)f
-(Region)g(whic)n(h)g(represen)n(ts)g(a)g(elliptical)g(area)g(within)h
-(the)g(supplied)g(2-dimensional)e(F)-7 b(rame.)0 939
-y Fd(Synopsis:)121 b Ft(AstEllipse)39 b Fi(\003)p Ft(astEllipse\()g
-(AstFrame)h Fi(\003)p Ft(frame,)h(int)h(form,)g(const)f(double)g
-(centre[2],)f(const)227 1039 y(double)h(point1[2],)f(const)h(double)g
-(point2[2],)f(AstRegion)g Fi(\003)p Ft(unc,)h(const)h(char)g
-Fi(\003)p Ft(options,)d(...)227 1138 y(\))0 1286 y Fd(P)m(arameters:)
-259 1420 y(frame)427 1520 y Fj(A)30 b(p)r(oin)n(ter)f(to)g(the)g(F)-7
-b(rame)29 b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42
-b(It)30 b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41
-b(A)29 b(deep)427 1620 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)
-h(F)-7 b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h
-(c)n(hanges)f(made)h(to)g(the)427 1719 y(F)-7 b(rame)27
-b(using)h(the)g(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h
-(e\013ect)h(the)g(Region.)259 1850 y Fd(form)427 1950
-y Fj(Indicates)e(ho)n(w)g(the)g(ellipse)g(is)h(describ)r(ed)f(b)n(y)f
-(the)i(remaining)e(parameters.)35 b(A)26 b(v)-5 b(alue)27
-b(of)f(zero)f(indicates)427 2050 y(that)32 b(the)g(ellipse)g(is)f(sp)r
-(eci\014ed)h(b)n(y)g(a)f(cen)n(tre)g(p)r(osition)h(and)f(t)n(w)n(o)g(p)
-r(ositions)g(on)h(the)g(circumference.)48 b(A)427 2149
-y(v)-5 b(alue)25 b(of)g(one)g(indicates)g(that)g(the)h(ellipse)f(is)g
-(sp)r(eci\014ed)g(b)n(y)g(its)g(cen)n(tre)g(p)r(osition,)g(the)h
-(half-lengths)e(of)h(its)427 2249 y(t)n(w)n(o)i(axes,)g(and)g(the)h
-(orien)n(tation)e(of)i(its)g(\014rst)f(axis.)259 2380
-y Fd(cen)m(tre)427 2479 y Fj(An)h(arra)n(y)e(of)h(2)g(doubles,)h(con)n
-(taining)e(the)i(co)r(ordinates)e(at)i(the)g(cen)n(tre)f(of)g(the)h
-(ellipse.)259 2610 y Fd(p)s(oin)m(t1)427 2710 y Fj(An)h(arra)n(y)e(of)h
-(2)h(doubles.)39 b(If)30 b Ft(")p Fj(form)p Ft(")d Fj(is)i(zero,)f
-(this)h(arra)n(y)d(should)i(con)n(tain)g(the)h(co)r(ordinates)f(of)g
-(one)h(of)427 2810 y(the)e(four)e(p)r(oin)n(ts)h(where)g(an)g(axis)f
-(of)h(the)g(ellipse)g(crosses)f(the)h(circumference)g(of)g(the)g
-(ellipse.)36 b(If)27 b Ft(")p Fj(form)p Ft(")427 2909
-y Fj(is)i(one,)h(it)f(should)g(con)n(tain)g(the)h(lengths)f(of)g
-(semi-ma)5 b(jor)27 b(and)i(semi-minor)g(axes)f(of)h(the)h(ellipse,)f
-(giv)n(en)427 3009 y(as)e(geo)r(desic)g(distances)g(within)h(the)g(F)-7
-b(rame.)259 3140 y Fd(p)s(oin)m(t2)427 3239 y Fj(An)25
-b(arra)n(y)c(of)j(2)f(doubles.)35 b(If)24 b Ft(")p Fj(form)p
-Ft(")f Fj(is)h(zero,)f(this)h(arra)n(y)e(should)h(con)n(taining)g(the)h
-(co)r(ordinates)f(at)g(some)427 3339 y(other)28 b(p)r(oin)n(t)g(on)g
-(the)h(circumference)f(of)g(the)g(ellipse,)h(distinct)g(from)f
-Ft(")p Fj(p)r(oin)n(t1)p Ft(")p Fj(.)37 b(If)29 b Ft(")p
-Fj(form)p Ft(")e Fj(is)h(one,)g(the)427 3439 y(\014rst)23
-b(elemen)n(t)g(of)g(this)h(arra)n(y)c(should)j(hold)g(the)h(angle)e(b)r
-(et)n(w)n(een)h(the)h(second)e(axis)g(of)h(the)h(F)-7
-b(rame)22 b(and)h(the)427 3538 y(\014rst)31 b(ellipse)g(axis)g(\(i.e.)
-47 b(the)32 b(ellipse)f(axis)f(whic)n(h)h(is)g(sp)r(eci\014ed)h
-(\014rst)e(in)i(the)f Ft(")p Fj(p)r(oin)n(t1)p Ft(")f
-Fj(arra)n(y\),)g(and)h(the)427 3638 y(second)f(elemen)n(t)g(will)h(b)r
-(e)f(ignored.)44 b(The)30 b(angle)f(should)h(b)r(e)h(giv)n(en)e(in)i
-(radians,)e(measured)h(p)r(ositiv)n(e)f(in)427 3737 y(the)23
-b(same)g(sense)f(as)g(rotation)f(from)i(the)g(p)r(ositiv)n(e)f
-(direction)g(of)h(the)g(second)f(F)-7 b(rame)22 b(axis)g(to)h(the)g(p)r
-(ositiv)n(e)427 3837 y(direction)k(of)h(the)g(\014rst)f(F)-7
-b(rame)27 b(axis.)259 3968 y Fd(unc)427 4068 y Fj(An)33
-b(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f(whic)n(h)h
-(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g(with)427
-4167 y(the)j(b)r(oundary)f(of)g(the)h(Bo)n(x)f(b)r(eing)g(created.)54
-b(The)34 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)h(on)f(the)h
-(b)r(oundary)f(of)427 4267 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f
-(shifting)h(the)f(supplied)h Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f(cen)n(tred)g(at)g(the)427
-4367 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)g(considered.)44
-b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)n
-(t)n(y)f(Region)g(then)427 4466 y(represen)n(ts)g(the)i(uncertain)n(t)n
-(y)f(in)g(the)h(b)r(oundary)f(p)r(osition.)48 b(The)31
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)h(the)427
-4566 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427 4681 y(If)38
-b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e
-(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n(tro-)427
-4781 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h
-(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n
-(tro-symetric)f(comp)r(onen)n(t)427 4880 y(Regions.)57
-b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f(will)g(b)r(e)h
-(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)427
-4980 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 5080 y(nativ)n(ely)-7 b(,)24
-b(a)g(NULL)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)h(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)h(used)427 5179 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g
-(1.0E-6)f(of)h(the)h(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)427
-5295 y(The)c(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 5394 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 5494 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 5593 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 5693 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)p
-eop end
-%%Page: 219 229
-TeXDict begin 219 228 bop 3643 52 a FF(219)259 351 y
-Fd(options)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 551 y(assignmen)n(ts)h(to)h(b)r(e)g(used)h(for)e
-(initialising)h(the)g(new)g(Ellipse.)44 b(The)30 b(syn)n(tax)g(used)g
-(is)g(iden)n(tical)f(to)h(that)427 650 y(for)c(the)h(astSet)g(function)
-g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f
-Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 750 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 884 y Fd(...)427 983 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1083 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1182 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1282 y Fj(function\).)0
-1446 y Fd(Returned)32 b(V)-8 b(alue:)259 1584 y(astEllipse\(\))427
-1684 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Ellipse.)0
-1848 y Fd(Notes:)340 2132 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2232 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2433 3780 12 v 0 2564
-a Fz(astEllipseP)l(ars)198 b Fe(Returns)38 b(the)h(geometric)d
-(parameters)1572 2679 y(of)i(an)h(Ellipse)2958 2564 y
-Fz(astEllipseP)l(ars)0 2870 y Fd(Description:)44 b Fj(This)28
-b(function)g(returns)f(the)h(geometric)e(parameters)g(describing)h(the)
-h(supplied)g(ellipse.)0 3021 y Fd(Synopsis:)121 b Ft(void)42
-b(astEllipsePars\()37 b(AstEllipse)j Fi(\003)p Ft(this,)h(double)g
-(centre[2],)e(double)i Fi(\003)p Ft(a,)i(double)e Fi(\003)p
-Ft(b,)227 3121 y(double)g Fi(\003)p Ft(angle,)g(double)g(p1[2],)g
-(double)g(p2[2])h(\))0 3272 y Fd(P)m(arameters:)259 3410
-y(this)427 3510 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-3644 y Fd(cen)m(tre)427 3743 y Fj(The)g(co)r(ordinates)e(of)i(the)g
-(Ellipse)f(cen)n(tre)g(are)f(returned)i(in)f(this)h(arra)n(ys.)259
-3877 y Fd(a)427 3977 y Fj(Returned)g(holding)f(the)h(half-length)g(of)f
-(the)h(\014rst)g(axis)e(of)i(the)g(ellipse.)259 4111
-y Fd(b)427 4210 y Fj(Returned)g(holding)f(the)h(half-length)g(of)f(the)
-h(second)f(axis)g(of)g(the)h(ellipse.)259 4344 y Fd(angle)427
-4444 y Fj(If)38 b(the)f(co)r(ordinate)f(system)h(in)g(whic)n(h)g(the)h
-(Ellipse)f(is)g(de\014ned)g(has)g(axes)f(\(X,Y\),)i(then)g
-Ft(")p Fi(\003)p Fj(angle)p Ft(")d Fj(is)427 4543 y(returned)d(holding)
-g(the)g(angle)f(from)h(the)h(p)r(ositiv)n(e)e(direction)h(of)g(the)h(Y)
-f(axis)f(to)h(the)h(\014rst)f(axis)f(of)h(the)427 4643
-y(ellipse,)22 b(in)f(radians.)33 b(P)n(ositiv)n(e)19
-b(rotation)g(is)h(in)h(the)g(same)e(sense)h(as)g(rotation)f(from)h(the)
-h(p)r(ositiv)n(e)f(direction)427 4743 y(of)28 b(Y)g(to)f(the)h(p)r
-(ositiv)n(e)f(direction)h(of)f(X.)259 4876 y Fd(p1)427
-4976 y Fj(An)34 b(arra)n(y)c(in)j(whic)n(h)g(to)g(return)f(the)h(co)r
-(ordinates)f(at)g(one)h(of)g(the)g(t)n(w)n(o)f(ends)h(of)g(the)g
-(\014rst)f(axis)g(of)h(the)427 5076 y(ellipse.)k(A)28
-b(NULL)g(p)r(oin)n(ter)f(can)g(b)r(e)h(supplied)g(if)g(these)g(co)r
-(ordinates)e(are)h(not)g(needed.)259 5209 y Fd(p2)427
-5309 y Fj(An)h(arra)n(y)e(in)i(whic)n(h)g(to)f(return)h(the)g(co)r
-(ordinates)e(at)i(one)f(of)h(the)g(t)n(w)n(o)f(ends)h(of)f(the)h
-(second)g(axis)f(of)g(the)427 5409 y(ellipse.)37 b(A)28
-b(NULL)g(p)r(oin)n(ter)f(can)g(b)r(e)h(supplied)g(if)g(these)g(co)r
-(ordinates)e(are)h(not)g(needed.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 220 230
-TeXDict begin 220 229 bop 0 52 a FF(220)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)22 b(the)g(co)r(ordinate)e(system)h(represen)n(ted)f(b)n(y)h
-(the)h(Ellipse)e(has)h(b)r(een)h(c)n(hanged)e(since)h(it)h(w)n(as)e
-(\014rst)h(created,)427 451 y(the)e(returned)f(parameters)f(refer)h(to)
-h(the)g(new)f(\(c)n(hanged\))g(co)r(ordinate)g(system,)i(rather)d(than)
-i(the)g(original)427 551 y(co)r(ordinate)27 b(system.)37
-b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g(transformation)f(from)
-g(original)f(to)i(new)g(co)r(ordinate)427 650 y(system)36
-b(is)h(non-linear,)g(the)g(shap)r(e)f(represen)n(ted)f(b)n(y)h(the)h
-(supplied)g(Ellipse)f(ob)5 b(ject)36 b(ma)n(y)g(not)g(b)r(e)h(an)427
-750 y(accurate)27 b(ellipse.)340 883 y Fi(\017)45 b Fj(V)-7
-b(alues)20 b(of)h(AST)p Ft(__)p Fj(BAD)f(are)f(returned)h(for)g(the)h
-(parameters)e(without)h(error)f(if)i(the)f(ellipse)h(is)f(degenerate)
-427 983 y(or)27 b(unde\014ned.)p 0 1184 3780 12 v 0 1316
-a Fz(astEnd)949 b Fe(End)39 b(an)g(AST)f(con)m(text)947
-b Fz(astEnd)0 1483 y Fd(Description:)44 b Fj(This)28
-b(macro)f(in)n(v)n(ok)n(es)f(a)h(function)i(to)e(end)h(an)g(AST)g(con)n
-(text)g(whic)n(h)f(w)n(as)g(b)r(egun)h(with)h(a)e(matc)n(hing)227
-1582 y(in)n(v)n(o)r(cation)c(of)i(astBegin.)35 b(An)n(y)24
-b(Ob)5 b(ject)25 b(p)r(oin)n(ters)e(created)h(within)h(this)g(con)n
-(text)f(will)h(b)r(e)g(ann)n(ulled)f(\(just)h(as)f(if)227
-1682 y(astAnn)n(ul)g(had)f(b)r(een)h(in)n(v)n(ok)n(ed\))e(and)i(will)g
-(cease)e(to)h(b)r(e)h(v)-5 b(alid)24 b(afterw)n(ards,)f(unless)g(they)h
-(ha)n(v)n(e)e(previously)g(b)r(een)227 1782 y(exp)r(orted)31
-b(using)g(astExp)r(ort)e(or)i(rendered)f(exempt)h(using)g(astExempt.)47
-b(If)31 b(ann)n(ulling)g(a)f(p)r(oin)n(ter)h(causes)f(an)227
-1881 y(Ob)5 b(ject's)24 b(RefCoun)n(t)h(attribute)f(to)h(fall)f(to)g
-(zero)g(\(whic)n(h)g(happ)r(ens)h(when)f(the)h(last)f(p)r(oin)n(ter)g
-(to)g(it)h(is)f(ann)n(ulled\),)227 1981 y(then)k(the)g(Ob)5
-b(ject)28 b(will)g(b)r(e)g(deleted.)0 2132 y Fd(Synopsis:)121
-b Ft(void)42 b(astEnd)0 2283 y Fd(Class)31 b(Applicabilit)m(y:)259
-2421 y(Ob)5 b(ject)427 2521 y Fj(This)28 b(macro)e(applies)h(to)h(all)f
-(Ob)5 b(jects.)0 2684 y Fd(Notes:)340 2968 y Fi(\017)45
-b Fj(astEnd)27 b(attempts)h(to)g(execute)f(ev)n(en)g(if)h(the)g(AST)g
-(error)e(status)h(is)h(set.)340 3102 y Fi(\017)45 b Fj(Con)n(texts)27
-b(delimited)i(b)n(y)e(astBegin)g(and)g(astEnd)g(ma)n(y)g(b)r(e)h
-(nested)g(to)f(an)n(y)g(depth.)p 0 3303 V 0 3434 a Fz(astEscap)t(es)
-1034 3435 y Fe(Con)m(trol)36 b(whether)i(graphical)e(escap)s(e)1054
-3549 y(sequences)k(are)e(included)g(in)h(strings)3149
-3434 y Fz(astEscap)t(es)0 3740 y Fd(Description:)44 b
-Fj(The)39 b(Plot)g(class)f(de\014nes)g(a)h(set)g(of)g(escap)r(e)f
-(sequences)g(whic)n(h)h(can)f(b)r(e)i(included)f(within)h(a)e(text)227
-3839 y(string)29 b(in)g(order)f(to)h(con)n(trol)f(the)h(app)r(earance)f
-(of)h(sub-strings)f(within)h(the)h(text.)42 b(See)29
-b(the)g(Escap)r(e)f(attribute)227 3939 y(for)j(a)g(description)f(of)h
-(these)g(escap)r(e)g(sequences.)46 b(It)32 b(is)f(usually)f
-(inappropriate)g(for)g(AST)i(to)f(return)g(strings)227
-4039 y(con)n(taining)i(suc)n(h)h(escap)r(e)f(sequences)h(when)g(called)
-g(b)n(y)f(application)h(co)r(de.)56 b(F)-7 b(or)33 b(instance,)j(an)d
-(application)227 4138 y(whic)n(h)22 b(displa)n(ys)e(the)i(v)-5
-b(alue)22 b(of)f(the)h(Title)g(attribute)g(of)f(a)g(F)-7
-b(rame)21 b(usually)g(do)r(es)g(not)h(w)n(an)n(t)f(the)h(displa)n(y)n
-(ed)e(string)227 4238 y(to)25 b(include)g(p)r(oten)n(tially)g(long)f
-(escap)r(e)g(sequences)g(whic)n(h)h(a)g(h)n(uman)f(read)g(w)n(ould)h
-(ha)n(v)n(e)e(di\016culy)i(in)n(terpreting.)227 4337
-y(Therefore)37 b(the)h(default)g(b)r(eha)n(viour)f(is)h(for)f(AST)h(to)
-g(strip)g(out)g(suc)n(h)f(escap)r(e)g(sequences)g(when)h(called)g(b)n
-(y)227 4437 y(application)27 b(co)r(de.)37 b(This)27
-b(default)i(b)r(eha)n(viour)d(can)h(b)r(e)h(c)n(hanged)f(using)g(this)h
-(function.)0 4588 y Fd(Synopsis:)121 b Ft(int)42 b(astEscapes\()d(int)k
-(new_value)c(\))0 4739 y Fd(P)m(arameters:)259 4877 y(new)p
-Ft(_)p Fd(v)-5 b(alue)427 4977 y Fj(A)29 b(\015ag)f(whic)n(h)h
-(indicates)f(if)h(escap)r(es)f(sequences)g(should)g(b)r(e)h(included)g
-(in)g(returned)f(strings.)39 b(If)29 b(zero)f(is)427
-5076 y(supplied,)c(escap)r(e)e(sequences)f(will)h(b)r(e)h(stripp)r(ed)f
-(out)h(of)f(all)g(strings)f(returned)h(b)n(y)g(an)n(y)f(AST)i
-(function.)35 b(If)427 5176 y(a)20 b(p)r(ositiv)n(e)g(v)-5
-b(alue)20 b(is)g(supplied,)j(then)d(an)n(y)g(escap)r(e)g(sequences)f
-(will)i(b)r(e)g(retained)e(in)i(the)g(v)-5 b(alue)20
-b(returned)g(to)427 5276 y(the)k(caller.)34 b(If)24 b(a)e(negativ)n(e)g
-(v)-5 b(alue)23 b(is)g(supplied,)i(the)e(curren)n(t)f(v)-5
-b(alue)23 b(of)g(the)h(\015ag)e(will)i(b)r(e)f(left)h(unc)n(hanged.)0
-5439 y Fd(Class)31 b(Applicabilit)m(y:)259 5577 y(Ob)5
-b(ject)427 5677 y Fj(This)28 b(macro)e(applies)h(to)h(all)f(Ob)5
-b(jects.)p eop end
-%%Page: 221 231
-TeXDict begin 221 230 bop 3643 52 a FF(221)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 487 y(astEscap)s(es)427 586 y Fj(The)28
-b(v)-5 b(alue)27 b(of)h(the)g(\015ag)f(on)g(en)n(try)g(to)h(this)f
-(function.)0 747 y Fd(Notes:)340 1029 y Fi(\017)45 b
-Fj(This)32 b(function)h(also)e(con)n(trols)g(whether)h(the)g
-(astStripEscap)r(es)f(function)i(remo)n(v)n(es)d(escap)r(e)h(sequences)
-427 1129 y(from)d(the)g(supplied)f(string,)g(or)g(returns)g(the)h
-(supplied)g(string)f(without)h(c)n(hange.)340 1261 y
-Fi(\017)45 b Fj(This)28 b(function)g(attempts)g(to)f(execute)h(ev)n(en)
-f(if)h(an)f(error)f(has)h(already)f(o)r(ccurred.)p 0
-1458 3780 12 v 0 1589 a Fz(astExempt)936 1590 y Fe(Exempt)38
-b(an)g(Ob)7 b(ject)38 b(p)s(oin)m(ter)g(from)f(AST)1461
-1704 y(con)m(text)g(handling)3149 1589 y Fz(astExempt)0
-1891 y Fd(Description:)44 b Fj(This)26 b(function)g(exempts)g(an)g(Ob)5
-b(ject)25 b(p)r(oin)n(ter)h(from)f(AST)h(con)n(text)g(handling,)f(as)h
-(implemen)n(ted)g(b)n(y)227 1991 y(astBegin)d(and)g(astEnd.)35
-b(This)24 b(means)f(that)h(the)g(p)r(oin)n(ter)f(will)h(not)g(b)r(e)g
-(a\013ected)f(when)h(astEnd)f(is)h(in)n(v)n(ok)n(ed)e(and)227
-2091 y(will)28 b(remain)f(activ)n(e)g(un)n(til)h(the)g(end)g(of)f(the)h
-(program,)e(or)h(un)n(til)h(explicitly)f(ann)n(ulled)h(using)f(astAnn)n
-(ul.)227 2215 y(If)j(p)r(ossible,)g(y)n(ou)f(should)g(a)n(v)n(oid)f
-(using)h(this)h(function)g(when)g(writing)f(applications.)42
-b(It)30 b(is)f(pro)n(vided)g(mainly)227 2314 y(for)23
-b(dev)n(elop)r(ers)f(of)h(other)f(libraries,)h(who)g(ma)n(y)f(wish)h
-(to)g(retain)g(references)f(to)h(AST)g(Ob)5 b(jects)23
-b(in)h(in)n(ternal)e(data)227 2414 y(structures,)27 b(and)h(who)f
-(therefore)g(need)g(to)h(a)n(v)n(oid)e(the)i(e\013ects)g(of)f(astBegin)
-g(and)g(astEnd.)0 2562 y Fd(Synopsis:)121 b Ft(void)42
-b(astExempt\()d(AstObject)h Fi(\003)p Ft(this)i(\))0
-2711 y Fd(P)m(arameters:)259 2847 y(this)427 2946 y Fj(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h(exempted)g(from)g(con)n(text)f
-(handling.)0 3107 y Fd(Class)k(Applicabilit)m(y:)259
-3243 y(Ob)5 b(ject)427 3342 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)p 0 3540 V 0 3670 a Fz(astExp)t(ort)735
-3671 y Fe(Exp)s(ort)33 b(an)h(Ob)7 b(ject)34 b(p)s(oin)m(ter)f(to)h(an)
-g(outer)f(con)m(text)3197 3670 y Fz(astExp)t(ort)0 3858
-y Fd(Description:)44 b Fj(This)31 b(function)h(exp)r(orts)e(an)g(Ob)5
-b(ject)31 b(p)r(oin)n(ter)g(from)f(the)h(curren)n(t)f(AST)i(con)n(text)
-e(in)n(to)h(the)g(con)n(text)227 3958 y(that)i(encloses)e(the)i(curren)
-n(t)f(one.)51 b(This)33 b(means)f(that)g(the)h(p)r(oin)n(ter)f(will)h
-(no)f(longer)f(b)r(e)i(ann)n(ulled)g(when)f(the)227 4058
-y(curren)n(t)27 b(con)n(text)g(is)h(ended)g(\(with)g(astEnd\),)f(but)h
-(only)g(when)f(the)h(next)g(outer)f(con)n(text)g(\(if)i(an)n(y\))e
-(ends.)0 4206 y Fd(Synopsis:)121 b Ft(void)42 b(astExport\()d
-(AstObject)h Fi(\003)p Ft(this)i(\))0 4355 y Fd(P)m(arameters:)259
-4490 y(this)427 4590 y Fj(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h
-(exp)r(orted.)0 4751 y Fd(Class)j(Applicabilit)m(y:)259
-4886 y(Ob)5 b(ject)427 4986 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 5147 y Fd(Notes:)340 5429 y Fi(\017)45
-b Fj(It)21 b(is)f(only)g(sensible)h(to)f(apply)g(this)h(function)g(to)f
-(p)r(oin)n(ters)g(that)g(ha)n(v)n(e)g(b)r(een)g(created)g(within)h
-(\(or)f(exp)r(orted)427 5528 y(to\))26 b(the)g(curren)n(t)f(con)n(text)
-h(and)f(ha)n(v)n(e)g(not)g(b)r(een)i(rendered)e(exempt)h(using)f
-(astExempt.)36 b(Applying)26 b(it)g(to)427 5628 y(an)i(unsuitable)f(Ob)
-5 b(ject)28 b(p)r(oin)n(ter)f(has)g(no)g(e\013ect.)p
-eop end
-%%Page: 222 232
-TeXDict begin 222 231 bop 0 52 a FF(222)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astFindFits)314 b Fe(Find)39 b(a)g(FITS)g(card)f(in)h(a)f
-(FitsChan)g(b)m(y)1678 598 y(k)m(eyw)m(ord)3110 483 y
-Fz(astFindFits)0 769 y Fd(Description:)44 b Fj(This)33
-b(function)f(searc)n(hes)f(for)g(a)h(card)g(in)g(a)g(FitsChan)g(b)n(y)g
-(k)n(eyw)n(ord.)49 b(The)32 b(searc)n(h)f(commences)h(at)227
-869 y(the)k(curren)n(t)e(card)g(\(iden)n(ti\014ed)i(b)n(y)f(the)g(Card)
-f(attribute\))i(and)f(ends)g(when)g(a)f(card)h(is)g(found)g(whose)f
-(FITS)227 968 y(k)n(eyw)n(ord)25 b(matc)n(hes)h(the)g(template)h
-(supplied,)g(or)f(when)g(the)h(last)f(card)g(in)g(the)h(FitsChan)f(has)
-g(b)r(een)h(searc)n(hed.)227 1088 y(If)33 b(the)f(searc)n(h)e(is)i
-(successful)g(\(i.e.)50 b(a)32 b(card)f(is)h(found)g(whic)n(h)g(matc)n
-(hes)g(the)g(template\),)i(the)e(con)n(ten)n(ts)f(of)h(the)227
-1188 y(card)h(are)g(\(optionally\))h(returned)f(and)h(the)g(Card)g
-(attribute)g(is)f(adjusted)i(to)e(iden)n(tify)i(the)f(card)f(found)h
-(or,)227 1288 y(if)d(required,)f(the)g(one)g(follo)n(wing)f(it.)45
-b(If)31 b(the)f(searc)n(h)f(is)h(not)g(successful,)h(the)f(function)h
-(returns)e(zero)g(and)h(the)227 1387 y(Card)d(attribute)h(is)f(set)h
-(to)f(the)h Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)0 1528
-y Fd(Synopsis:)121 b Ft(int)42 b(astFindFits\()d(AstFitsChan)g
-Fi(\003)p Ft(this,)i(const)g(char)h Fi(\003)p Ft(name,)f(char)h(card[)g
-(81)h(],)f(int)h(inc)227 1628 y(\))0 1768 y Fd(P)m(arameters:)259
-1896 y(this)427 1996 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2120 y Fd(name)427 2219 y Fj(P)n(oin)n(ter)34 b(to)h(a)g(n)n
-(ull-terminated)g(c)n(haracter)e(string)i(con)n(taining)f(a)h(template)
-g(for)g(the)h(k)n(eyw)n(ord)d(to)i(b)r(e)427 2319 y(found.)66
-b(In)37 b(the)g(simplest)h(case,)g(this)g(should)e(simply)h(b)r(e)h
-(the)f(k)n(eyw)n(ord)f(name)g(\(the)i(searc)n(h)e(is)g(case)427
-2419 y(insensitiv)n(e)31 b(and)f(trailing)g(spaces)g(are)f(ignored\).)
-46 b(Ho)n(w)n(ev)n(er,)29 b(this)i(template)g(ma)n(y)f(also)g(con)n
-(tain)g Ft(")p Fj(\014eld)427 2518 y(sp)r(eci\014ers)p
-Ft(")21 b Fj(whic)n(h)g(are)f(capable)g(of)i(matc)n(hing)e(a)h(range)f
-(of)h(c)n(haracters)e(\(see)j(the)f Ft(")p Fj(Keyw)n(ord)e(T)-7
-b(emplates)p Ft(")427 2618 y Fj(section)30 b(for)g(details\).)46
-b(In)31 b(this)g(case,)f(the)h(\014rst)f(card)g(with)h(a)f(k)n(eyw)n
-(ord)f(whic)n(h)h(matc)n(hes)g(the)h(template)427 2717
-y(will)38 b(b)r(e)f(found.)66 b(T)-7 b(o)36 b(\014nd)i(the)f(next)g
-(FITS)h(card)e(regardless)e(of)j(its)h(k)n(eyw)n(ord,)f(y)n(ou)g
-(should)f(use)h(the)427 2817 y(template)28 b Ft(")p Fj(\045f)p
-Ft(")p Fj(.)259 2941 y Fd(card)427 3041 y Fj(An)i(arra)n(y)d(of)i(at)g
-(least)g(81)f(c)n(haracters)f(\(to)j(allo)n(w)e(ro)r(om)g(for)h(a)f
-(terminating)h(n)n(ull\))h(in)f(whic)n(h)h(the)f(FITS)427
-3140 y(card)j(whic)n(h)g(is)g(found)g(will)h(b)r(e)f(returned.)50
-b(If)33 b(the)f(searc)n(h)f(is)h(not)g(successful)g(\(or)g(a)f(NULL)i
-(p)r(oin)n(ter)f(is)427 3240 y(giv)n(en\),)27 b(a)h(card)e(will)i(not)g
-(b)r(e)g(returned.)259 3364 y Fd(inc)427 3464 y Fj(If)j(this)f(v)-5
-b(alue)29 b(is)h(zero)f(\(and)h(the)g(searc)n(h)e(is)i(successful\),)g
-(the)h(FitsChan's)e(Card)g(attribute)h(will)g(b)r(e)h(set)427
-3563 y(to)26 b(the)f(index)h(of)f(the)h(card)e(that)i(w)n(as)e(found.)
-37 b(If)26 b(it)f(is)h(non-zero,)e(ho)n(w)n(ev)n(er,)g(the)h(Card)g
-(attribute)h(will)f(b)r(e)427 3663 y(incremen)n(ted)j(to)f(iden)n(tify)
-h(the)g(card)f(whic)n(h)g(follo)n(ws)g(the)h(one)f(found.)0
-3816 y Fd(Returned)32 b(V)-8 b(alue:)259 3944 y(astFindFits\(\))427
-4044 y Fj(One)28 b(if)g(the)g(searc)n(h)e(w)n(as)g(successful,)i
-(otherwise)e(zero.)0 4197 y Fd(Examples:)227 4328 y Fq(result)46
-b(=)i(astFindFits\()c(fitschan,)i Ft(")p Fq(\045f)p Ft(")p
-Fq(,)g(card,)g(1)h(\);)427 4424 y Fj(Returns)26 b(the)g(curren)n(t)g
-(card)f(in)h(a)f(FitsChan)h(and)g(adv)-5 b(ances)25 b(the)i(Card)e
-(attribute)h(to)g(iden)n(tify)g(the)g(card)427 4524 y(that)i(follo)n
-(ws)f(\(the)h Ft(")p Fj(\045f)p Ft(")f Fj(template)h(matc)n(hes)f(an)n
-(y)g(k)n(eyw)n(ord\).)227 4652 y Fq(result)46 b(=)i(astFindFits\()c
-(fitschan,)i Ft(")p Fq(BITPIX)p Ft(")p Fq(,)f(card,)h(1)h(\);)427
-4747 y Fj(Searc)n(hes)34 b(a)h(FitsChan)g(for)f(a)h(FITS)g(card)g(with)
-g(the)h Ft(")p Fj(BITPIX)p Ft(")e Fj(k)n(eyw)n(ord)f(and)i(returns)f
-(that)h(card.)427 4847 y(The)28 b(Card)f(attribute)g(is)h(then)g
-(incremen)n(ted)f(to)h(iden)n(tify)g(the)g(card)f(that)h(follo)n(ws)e
-(it.)227 4975 y Fq(result)46 b(=)i(astFindFits\()c(fitschan,)i
-Ft(")p Fq(COMMENT)p Ft(")p Fq(,)e(NULL,)j(0)g(\);)427
-5071 y Fj(Sets)32 b(the)h(Card)e(attribute)h(of)g(a)f(FitsChan)h(to)g
-(iden)n(tify)g(the)h(next)f(COMMENT)f(card)g(\(if)i(an)n(y\).)50
-b(The)427 5170 y(card)27 b(itself)h(is)g(not)f(returned.)227
-5299 y Fq(result)46 b(=)i(astFindFits\()c(fitschan,)i
-Ft(")p Fq(CRVAL\0451d)p Ft(")p Fq(,)e(card,)i(1)i(\);)427
-5394 y Fj(Searc)n(hes)28 b(a)h(FitsChan)g(for)g(the)h(next)g(card)e
-(with)i(a)f(k)n(eyw)n(ord)e(of)i(the)h(form)f Ft(")p
-Fj(CR)-9 b(V)g(ALi)p Ft(")29 b Fj(\(for)g(example,)427
-5494 y(an)n(y)k(of)h(the)f(k)n(eyw)n(ords)f Ft(")p Fj(CR)-9
-b(V)g(AL1)p Ft(")p Fj(,)34 b Ft(")p Fj(CR)-9 b(V)g(AL2)p
-Ft(")32 b Fj(or)h Ft(")p Fj(CR)-9 b(V)g(AL3)p Ft(")32
-b Fj(w)n(ould)h(b)r(e)h(matc)n(hed\).)55 b(The)33 b(card)427
-5593 y(found)22 b(\(if)g(an)n(y\))e(is)h(returned,)i(and)e(the)g(Card)f
-(attribute)i(is)f(then)g(incremen)n(ted)g(to)g(iden)n(tify)h(the)g
-(follo)n(wing)427 5693 y(card)27 b(\(ready)g(to)g(searc)n(h)f(for)h
-(another)g(k)n(eyw)n(ord)f(with)i(the)g(same)f(form,)g(p)r(erhaps\).)p
-eop end
-%%Page: 223 233
-TeXDict begin 223 232 bop 3643 52 a FF(223)0 351 y Fd(Notes:)340
-681 y Fi(\017)45 b Fj(The)23 b(searc)n(h)f(alw)n(a)n(ys)f(starts)i
-(with)g(the)h(curren)n(t)e(card,)h(as)g(iden)n(ti\014ed)g(b)n(y)g(the)h
-(Card)e(attribute.)35 b(T)-7 b(o)23 b(ensure)427 781
-y(y)n(ou)i(searc)n(h)g(the)h(en)n(tire)g(con)n(ten)n(ts)f(of)h(a)f
-(FitsChan,)i(y)n(ou)e(should)h(\014rst)f(clear)g(the)h(Card)g
-(attribute)g(\(using)427 880 y(astClear\).)36 b(This)28
-b(e\013ectiv)n(ely)f Ft(")p Fj(rewinds)p Ft(")f Fj(the)i(FitsChan.)340
-1037 y Fi(\017)45 b Fj(If)24 b(a)g(searc)n(h)e(is)i(unsuccessful,)g
-(the)g(Card)f(attribute)h(is)g(set)f(to)h(the)g Ft(")p
-Fj(end-of-\014le)p Ft(")f Fj(\(i.e.)36 b(to)23 b(one)h(more)e(than)427
-1136 y(the)28 b(n)n(um)n(b)r(er)g(of)f(cards)g(in)g(the)h(FitsChan\).)
-38 b(No)27 b(error)f(o)r(ccurs.)340 1293 y Fi(\017)45
-b Fj(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h
-(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d
-(status)j(set,)f(or)427 1392 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e
-(reason.)-2 1601 y Fd(Keyw)m(ord)33 b(T)-8 b(emplates)n(:)227
-1747 y Fj(The)32 b(templates)f(used)h(to)f(matc)n(h)g(FITS)h(k)n(eyw)n
-(ords)d(are)i(normally)f(comp)r(osed)h(of)h(literal)e(c)n(haracters,)h
-(whic)n(h)227 1847 y(m)n(ust)f(matc)n(h)g(the)h(k)n(eyw)n(ord)d
-(exactly)h(\(apart)h(from)f(case\).)44 b(Ho)n(w)n(ev)n(er,)29
-b(a)h(template)g(ma)n(y)f(also)g(con)n(tain)h Ft(")p
-Fj(\014eld)227 1947 y(sp)r(eci\014ers)p Ft(")25 b Fj(whic)n(h)h(can)g
-(matc)n(h)f(a)h(range)f(of)h(p)r(ossible)f(c)n(haracters.)34
-b(This)26 b(allo)n(ws)f(y)n(ou)g(to)h(searc)n(h)e(for)i(k)n(eyw)n(ords)
-227 2046 y(that)36 b(con)n(tain)f(\(for)g(example\))g(n)n(um)n(b)r
-(ers,)i(where)e(the)h(digits)f(comprising)f(the)i(n)n(um)n(b)r(er)f
-(are)f(not)i(kno)n(wn)e(in)227 2146 y(adv)-5 b(ance.)227
-2294 y(A)30 b(\014eld)g(sp)r(eci\014er)g(starts)f(with)h(a)f
-Ft(")p Fj(\045)p Ft(")h Fj(c)n(haracter.)41 b(This)30
-b(is)f(follo)n(w)n(ed)g(b)n(y)h(an)f(optional)g(single)h(digit)f(\(0)h
-(to)g(9\))227 2394 y(sp)r(ecifying)c(a)f(\014eld)i(width.)37
-b(Finally)-7 b(,)26 b(there)f(is)h(a)f(single)h(c)n(haracter)e(whic)n
-(h)h(sp)r(eci\014es)h(the)g(t)n(yp)r(e)g(of)g(c)n(haracter)e(to)227
-2493 y(b)r(e)k(matc)n(hed,)g(as)f(follo)n(ws:)340 2825
-y Fi(\017)45 b Ft(")p Fj(c)p Ft(")p Fj(:)36 b(matc)n(hes)27
-b(all)h(upp)r(er)f(case)g(letters,)340 2981 y Fi(\017)45
-b Ft(")p Fj(d)p Ft(")p Fj(:)37 b(matc)n(hes)27 b(all)g(decimal)g
-(digits,)340 3138 y Fi(\017)45 b Ft(")p Fj(f)p Ft(")p
-Fj(:)39 b(matc)n(hes)29 b(all)f(c)n(haracters)f(whic)n(h)i(are)f(p)r
-(ermitted)h(within)h(a)e(FITS)h(k)n(eyw)n(ord)e(\(upp)r(er)j(case)e
-(letters,)427 3237 y(digits,)g(underscores)e(and)h(h)n(yphens\).)227
-3446 y(If)e(the)g(\014eld)f(width)h(is)g(omitted,)g(the)g(\014eld)f(sp)
-r(eci\014er)g(matc)n(hes)g(one)g(or)g(more)f(c)n(haracters.)34
-b(If)24 b(the)h(\014eld)g(width)g(is)227 3546 y(zero,)k(it)g(matc)n
-(hes)g(zero)f(or)g(more)g(c)n(haracters.)39 b(Otherwise,)28
-b(it)i(matc)n(hes)e(exactly)h(the)g(n)n(um)n(b)r(er)g(of)g(c)n
-(haracters)227 3646 y(sp)r(eci\014ed.)37 b(In)28 b(addition)g(to)f
-(this:)340 3977 y Fi(\017)45 b Fj(The)c(template)g Ft(")p
-Fj(\045f)p Ft(")f Fj(will)h(matc)n(h)g(a)f(blank)g(FITS)h(k)n(eyw)n
-(ord)e(consisting)h(of)h(8)f(spaces)g(\(as)g(w)n(ell)g(as)427
-4077 y(matc)n(hing)27 b(all)h(other)f(k)n(eyw)n(ords\).)340
-4233 y Fi(\017)45 b Fj(A)28 b(template)g(consisting)f(of)g(8)h(spaces)e
-(will)i(matc)n(h)f(a)h(blank)f(k)n(eyw)n(ord)f(\(only\).)227
-4442 y(F)-7 b(or)27 b(example:)340 4774 y Fi(\017)45
-b Fj(The)28 b(template)g Ft(")p Fj(BitPix)p Ft(")e Fj(will)i(matc)n(h)f
-(the)h(k)n(eyw)n(ord)e Ft(")p Fj(BITPIX)p Ft(")g Fj(only)-7
-b(.)340 4930 y Fi(\017)45 b Fj(The)27 b(template)g Ft(")p
-Fj(crpix\0451d)p Ft(")f Fj(will)h(matc)n(h)f(k)n(eyw)n(ords)f
-(consisting)h(of)h Ft(")p Fj(CRPIX)p Ft(")f Fj(follo)n(w)n(ed)g(b)n(y)g
-(one)h(deci-)427 5030 y(mal)h(digit.)340 5186 y Fi(\017)45
-b Fj(The)26 b(template)f Ft(")p Fj(P\045c)p Ft(")f Fj(will)i(matc)n(h)e
-(an)n(y)h(k)n(eyw)n(ord)e(starting)i(with)g Ft(")p Fj(P)p
-Ft(")f Fj(and)h(follo)n(w)n(ed)f(b)n(y)h(one)g(or)f(more)427
-5286 y(letters.)340 5442 y Fi(\017)45 b Fj(The)28 b(template)g
-Ft(")p Fj(E\0450f)p Ft(")e Fj(will)i(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)
-f(b)r(eginning)i(with)g Ft(")p Fj(E)p Ft(")p Fj(.)340
-5599 y Fi(\017)45 b Fj(The)28 b(template)g Ft(")p Fj(\045f)p
-Ft(")f Fj(will)h(matc)n(h)f(an)n(y)g(k)n(eyw)n(ord)f(at)h(all)h
-(\(including)g(a)f(blank)g(one\).)p eop end
-%%Page: 224 234
-TeXDict begin 224 233 bop 0 52 a FF(224)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astFindF)-11 b(rame)297 b Fe(Find)39 b(a)g(co)s(ordinate)d
-(system)j(with)1290 598 y(sp)s(eci\014ed)h(c)m(haracteristics)2970
-483 y Fz(astFindF)-11 b(rame)0 795 y Fd(Description:)44
-b Fj(This)24 b(function)h(uses)e(a)h Ft(")p Fj(template)p
-Ft(")g Fj(F)-7 b(rame)23 b(to)h(searc)n(h)e(another)h(F)-7
-b(rame)24 b(\(or)f(F)-7 b(rameSet\))24 b(to)g(iden)n(tify)227
-895 y(a)33 b(co)r(ordinate)f(system)i(whic)n(h)f(has)g(a)g(sp)r
-(eci\014ed)g(set)h(of)f(c)n(haracteristics.)52 b(If)33
-b(a)g(suitable)h(co)r(ordinate)e(system)227 994 y(can)23
-b(b)r(e)h(found,)h(the)f(function)g(returns)e(a)i(p)r(oin)n(ter)f(to)g
-(a)g(F)-7 b(rameSet)23 b(whic)n(h)h(describ)r(es)e(the)i(required)f(co)
-r(ordinate)227 1094 y(system)28 b(and)f(ho)n(w)g(to)g(con)n(v)n(ert)g
-(co)r(ordinates)f(to)h(and)h(from)f(it.)227 1221 y(This)41
-b(function)f(is)h(pro)n(vided)e(to)h(help)h(answ)n(er)d(general)h
-(questions)h(ab)r(out)g(co)r(ordinate)f(systems,)k(suc)n(h)d(as)227
-1320 y(t)n(ypically)f(arise)f(when)h(co)r(ordinate)f(information)h(is)g
-(imp)r(orted)g(in)n(to)g(a)f(program)f(as)i(part)g(of)g(an)f(initially)
-227 1420 y(unkno)n(wn)27 b(dataset.)37 b(F)-7 b(or)27
-b(example:)340 1560 y Fi(\017)45 b Fj(Is)28 b(there)f(a)g(w)n(a)n(v)n
-(elength)f(scale?)340 1695 y Fi(\017)45 b Fj(Is)28 b(there)f(a)g
-(2-dimensional)g(co)r(ordinate)f(system?)340 1830 y Fi(\017)45
-b Fj(Is)28 b(there)f(a)g(celestial)g(co)r(ordinate)g(system?)340
-1965 y Fi(\017)45 b Fj(Can)28 b(I)f(plot)h(the)g(data)f(in)h(ecliptic)g
-(co)r(ordinates?)227 2131 y(Y)-7 b(ou)30 b(can)g(also)f(use)g(this)i
-(function)f(as)f(a)h(means)f(of)h(reconciling)f(a)g(user's)g
-(preference)h(for)f(a)h(particular)e(co)r(or-)227 2231
-y(dinate)k(system)f(\(for)h(example,)g(what)f(t)n(yp)r(e)h(of)g(axes)e
-(to)i(dra)n(w\))e(with)i(what)g(is)f(actually)g(p)r(ossible)g(giv)n(en)
-g(the)227 2330 y(co)r(ordinate)c(information)g(a)n(v)-5
-b(ailable.)227 2457 y(T)e(o)40 b(p)r(erform)f(a)h(searc)n(h,)h(y)n(ou)f
-(supply)g(a)f Ft(")p Fj(target)p Ft(")f Fj(F)-7 b(rame)40
-b(\(or)f(F)-7 b(rameSet\))40 b(whic)n(h)g(represen)n(ts)e(the)j(set)f
-(of)227 2557 y(co)r(ordinate)30 b(systems)g(to)g(b)r(e)i(searc)n(hed.)
-44 b(If)31 b(a)f(basic)g(F)-7 b(rame)31 b(is)f(giv)n(en)g(as)g(the)h
-(target,)g(this)g(set)f(of)h(co)r(ordinate)227 2656 y(systems)h
-(consists)g(of)h(the)g(one)f(describ)r(ed)h(b)n(y)f(this)h(F)-7
-b(rame,)33 b(plus)g(all)f(other)g Ft(")p Fj(virtual)p
-Ft(")g Fj(co)r(ordinate)f(systems)227 2756 y(whic)n(h)c(can)g(p)r(oten)
-n(tially)f(b)r(e)i(reac)n(hed)d(from)i(it)g(b)n(y)g(applying)f
-(built-in)i(con)n(v)n(ersions)c(\(for)j(example,)f(an)n(y)g(of)h(the)
-227 2855 y(celestial)19 b(co)r(ordinate)g(con)n(v)n(ersions)e(kno)n(wn)
-i(to)h(the)g(AST)g(library)e(w)n(ould)i(constitute)g(a)f
-Ft(")p Fj(built-in)p Ft(")h Fj(con)n(v)n(ersion\).)227
-2955 y(If)32 b(a)f(F)-7 b(rameSet)31 b(is)g(giv)n(en)g(as)f(the)i
-(target,)f(the)h(set)f(of)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h
-(searc)n(hed)d(consists)i(of)g(the)227 3055 y(union)d(of)f(those)h
-(represen)n(ted)e(b)n(y)h(all)h(the)g(individual)f(F)-7
-b(rames)27 b(within)i(it.)227 3181 y(T)-7 b(o)26 b(select)g(from)f
-(this)i(large)d(set)i(of)g(p)r(ossible)g(co)r(ordinate)f(systems,)h(y)n
-(ou)f(supply)h(a)g Ft(")p Fj(template)p Ft(")f Fj(F)-7
-b(rame)26 b(whic)n(h)227 3281 y(is)k(an)g(instance)g(of)h(the)f(t)n(yp)
-r(e)h(of)f(F)-7 b(rame)30 b(y)n(ou)f(are)g(lo)r(oking)h(for.)44
-b(E\013ectiv)n(ely)-7 b(,)31 b(y)n(ou)e(then)i(ask)e(the)i(function)g
-(to)227 3381 y Ft(")p Fj(\014nd)d(a)f(co)r(ordinate)g(system)g(that)h
-(lo)r(oks)e(lik)n(e)i(this)p Ft(")p Fj(.)227 3507 y(Y)-7
-b(ou)24 b(can)e(mak)n(e)h(y)n(our)f(request)h(more)f(or)g(less)h(sp)r
-(eci\014c)h(b)n(y)f(setting)g(attribute)g(v)-5 b(alues)23
-b(for)g(the)g(template)h(F)-7 b(rame.)227 3607 y(If)28
-b(a)f(particular)e(attribute)j(is)f(set)g(in)g(the)h(template,)g(then)f
-(the)h(function)f(will)h(only)f(\014nd)g(co)r(ordinate)f(systems)227
-3706 y(whic)n(h)35 b(ha)n(v)n(e)f(exactly)g(the)i(same)e(v)-5
-b(alue)35 b(for)g(that)g(attribute.)59 b(If)36 b(y)n(ou)e(lea)n(v)n(e)g
-(a)g(template)h(attribute)h(un-set,)227 3806 y(ho)n(w)n(ev)n(er,)30
-b(then)h(the)g(function)g(has)f(discretion)g(ab)r(out)h(the)g(v)-5
-b(alue)30 b(the)i(attribute)e(should)h(ha)n(v)n(e)e(in)i(an)n(y)f(co)r
-(or-)227 3906 y(dinate)h(system)e(it)i(\014nds.)45 b(The)30
-b(attribute)g(will)h(then)f(tak)n(e)g(its)g(v)-5 b(alue)30
-b(from)g(one)g(of)g(the)g(actual)g(\(rather)f(than)227
-4005 y(virtual\))d(co)r(ordinate)f(systems)h(in)h(the)f(target.)36
-b(If)26 b(the)h(target)e(is)h(a)g(F)-7 b(rameSet,)27
-b(its)f(Curren)n(t)f(attribute)i(will)f(b)r(e)227 4105
-y(mo)r(di\014ed)i(to)g(indicate)f(whic)n(h)h(of)f(its)h(F)-7
-b(rames)27 b(w)n(as)g(used)g(for)g(this)h(purp)r(ose.)227
-4231 y(The)34 b(result)g(of)f(this)h(pro)r(cess)f(is)h(a)f(co)r
-(ordinate)g(system)g(represen)n(ted)g(b)n(y)g(a)h(h)n(ybrid)f(F)-7
-b(rame)33 b(whic)n(h)h(acquires)227 4331 y(some)28 b(attributes)h(from)
-f(the)h(template)g(\(but)h(only)e(if)h(they)g(w)n(ere)e(set\))i(and)g
-(the)g(remainder)e(from)h(the)h(target.)227 4431 y(This)34
-b(represen)n(ts)f(the)h Ft(")p Fj(b)r(est)g(compromise)p
-Ft(")f Fj(b)r(et)n(w)n(een)h(what)g(y)n(ou)f(ask)n(ed)g(for)g(and)h
-(what)g(w)n(as)f(a)n(v)-5 b(ailable.)55 b(A)227 4530
-y(Mapping)31 b(is)g(then)g(generated)f(whic)n(h)h(con)n(v)n(erts)e
-(from)i(the)g(target)g(co)r(ordinate)e(system)i(to)g(this)g(h)n(ybrid)g
-(one,)227 4630 y(and)d(the)g(returned)f(F)-7 b(rameSet)27
-b(encapsulates)g(all)g(of)h(this)g(information.)0 4784
-y Fd(Synopsis:)121 b Ft(AstFrameSet)39 b Fi(\003)p Ft(astFindFrame\()f
-(AstFrame)i Fi(\003)p Ft(target,)g(AstFrame)g Fi(\003)p
-Ft(template,)g(const)h(char)h Fi(\003)p Ft(domainlist)227
-4883 y(\))0 5037 y Fd(P)m(arameters:)259 5177 y(target)427
-5277 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(target)e(F)-7
-b(rame)27 b(\(or)g(F)-7 b(rameSet\).)427 5394 y(Note)37
-b(that)g(if)g(a)g(F)-7 b(rameSet)36 b(is)h(supplied)g(\(and)g(a)f
-(suitable)h(co)r(ordinate)e(system)i(is)f(found\),)k(then)d(its)427
-5494 y(Curren)n(t)h(attribute)h(will)f(b)r(e)h(mo)r(di\014ed)g(to)f
-(indicate)h(whic)n(h)f(F)-7 b(rame)38 b(w)n(as)g(used)g(to)g(obtain)g
-(attribute)427 5593 y(v)-5 b(alues)31 b(whic)n(h)g(w)n(ere)g(not)g(sp)r
-(eci\014ed)h(b)n(y)e(the)i(template.)48 b(This)32 b(F)-7
-b(rame)30 b(will,)j(in)e(some)g(sense,)h(represen)n(t)427
-5693 y(the)c Ft(")p Fj(closest)p Ft(")e Fj(non-virtual)h(co)r(ordinate)
-f(system)i(to)f(the)h(one)f(y)n(ou)g(requested.)p eop
-end
-%%Page: 225 235
-TeXDict begin 225 234 bop 3643 52 a FF(225)259 351 y
-Fd(template)427 451 y Fj(P)n(oin)n(ter)29 b(to)h(the)h(template)g(F)-7
-b(rame,)31 b(whic)n(h)f(should)g(b)r(e)h(an)f(instance)h(of)f(the)h(t)n
-(yp)r(e)g(of)f(F)-7 b(rame)30 b(y)n(ou)g(wish)427 551
-y(to)e(\014nd.)38 b(If)28 b(y)n(ou)f(w)n(an)n(ted)h(to)f(\014nd)i(a)e
-(F)-7 b(rame)27 b(describing)g(a)h(celestial)f(co)r(ordinate)g(system,)
-h(for)f(example,)427 650 y(then)h(y)n(ou)f(migh)n(t)h(use)f(a)g(SkyF)-7
-b(rame)27 b(here.)37 b(See)27 b(the)h Ft(")p Fj(Examples)p
-Ft(")e Fj(section)h(for)g(more)g(ideas.)259 778 y Fd(domainlist)427
-877 y Fj(P)n(oin)n(ter)36 b(to)i(a)f(n)n(ull-terminated)g(c)n(haracter)
-e(string)i(con)n(taining)g(a)g(comma-separated)e(list)j(of)f(F)-7
-b(rame)427 977 y(domains.)36 b(This)28 b(ma)n(y)e(b)r(e)i(used)g(to)f
-(establish)g(a)g(priorit)n(y)f(order)g(for)h(the)h(di\013eren)n(t)f(t)n
-(yp)r(es)g(of)h(co)r(ordinate)427 1077 y(system)g(that)g(migh)n(t)f(b)r
-(e)h(found.)427 1190 y(The)23 b(function)g(will)g(\014rst)f(try)g(to)h
-(\014nd)g(a)f(suitable)h(co)r(ordinate)e(system)h(whose)g(Domain)h
-(attribute)f(equals)427 1290 y(the)31 b(\014rst)g(domain)f(in)h(this)g
-(list.)47 b(If)31 b(this)g(fails,)h(the)f(second)f(domain)h(in)g(the)g
-(list)g(will)g(b)r(e)g(used,)h(and)e(so)427 1389 y(on,)e(un)n(til)h(a)e
-(result)h(is)g(obtained.)38 b(A)28 b(blank)g(domain)g(\(e.g.)38
-b(t)n(w)n(o)27 b(consecutiv)n(e)g(commas\))g(indicates)h(that)427
-1489 y(an)n(y)f(co)r(ordinate)g(system)g(is)g(acceptable)g(\(sub)5
-b(ject)28 b(to)g(the)g(template\))g(regardless)d(of)j(its)f(domain.)427
-1603 y(This)i(list)h(is)f(case-insensitiv)n(e)f(and)h(all)g(white)g
-(space)g(is)g(ignored.)40 b(If)30 b(y)n(ou)e(do)h(not)g(wish)h(to)f
-(restrict)f(the)427 1702 y(domain)f(in)h(this)g(w)n(a)n(y)-7
-b(,)27 b(y)n(ou)g(should)g(supply)h(an)f(empt)n(y)h(string.)0
-1859 y Fd(Class)j(Applicabilit)m(y:)259 1990 y(F)-8 b(rame)427
-2089 y Fj(This)28 b(function)g(applies)f(to)h(all)f(F)-7
-b(rames.)259 2217 y Fd(F)f(rameSet)427 2317 y Fj(If)31
-b(the)f(target)f(is)h(a)g(F)-7 b(rameSet,)30 b(the)g(p)r(ossibilit)n(y)
-g(exists)g(that)g(sev)n(eral)e(of)i(the)g(F)-7 b(rames)30
-b(within)g(it)h(migh)n(t)427 2416 y(b)r(e)f(matc)n(hed)f(b)n(y)g(the)g
-(template.)42 b(Unless)29 b(the)h(c)n(hoice)e(is)i(su\016cien)n(tly)f
-(restricted)f(b)n(y)h(the)h Ft(")p Fj(domainlist)p Ft(")427
-2516 y Fj(string,)e(the)h(sequence)e(in)i(whic)n(h)f(F)-7
-b(rames)27 b(are)h(searc)n(hed)e(can)i(then)h(b)r(ecome)f(imp)r(ortan)n
-(t.)38 b(In)29 b(this)f(case,)427 2615 y(the)g(searc)n(h)e(pro)r(ceeds)
-h(as)g(follo)n(ws:)510 2717 y Fi(\017)45 b Fj(Eac)n(h)27
-b(\014eld)h(in)f(the)h Ft(")p Fj(domainlist)p Ft(")f
-Fj(string)g(is)g(considered)g(in)h(turn.)510 2831 y Fi(\017)45
-b Fj(An)29 b(attempt)g(is)g(made)f(to)h(matc)n(h)f(the)h(template)g(to)
-f(eac)n(h)g(of)g(the)h(target's)e(F)-7 b(rames)28 b(in)h(the)g(order:)
-597 2931 y(\(1\))35 b(the)g(curren)n(t)f(F)-7 b(rame,)36
-b(\(2\))f(the)h(base)e(F)-7 b(rame,)36 b(\(3\))f(eac)n(h)f(remaining)g
-(F)-7 b(rame)34 b(in)h(the)g(order)f(of)597 3030 y(b)r(eing)28
-b(added)f(to)h(the)g(target)f(F)-7 b(rameSet.)510 3144
-y Fi(\017)45 b Fj(Generally)-7 b(,)41 b(the)d(\014rst)g(matc)n(h)h
-(found)f(is)g(used.)70 b(Ho)n(w)n(ev)n(er,)39 b(the)f(Mapping)g(b)r(et)
-n(w)n(een)h(the)g(target)597 3243 y(co)r(ordinate)23
-b(system)h(and)g(the)g(resulting)g(F)-7 b(rame)23 b(is)h(also)f
-(examined.)35 b(Preference)23 b(is)h(giv)n(en)f(to)h(cases)597
-3343 y(where)37 b(b)r(oth)g(the)h(forw)n(ard)d(and)i(in)n(v)n(erse)f
-(transformations)f(are)h(de\014ned)h(\(as)g(indicated)g(b)n(y)g(the)597
-3443 y(T)-7 b(ranF)g(orw)n(ard)36 b(and)h(T)-7 b(ranIn)n(v)n(erse)36
-b(attributes\).)68 b(If)38 b(only)g(one)f(transformation)g(is)g
-(de\014ned,)k(the)597 3542 y(forw)n(ard)26 b(one)h(is)h(preferred.)510
-3656 y Fi(\017)45 b Fj(If)37 b(a)g(matc)n(h)f(is)h(found)g(and)f(the)h
-(domain)g(of)f(the)h(resulting)g(F)-7 b(rame)36 b(also)f(matc)n(hes)h
-(the)h(curren)n(t)597 3756 y Ft(")p Fj(domainlist)p Ft(")32
-b Fj(\014eld,)h(it)g(is)f(accepted.)51 b(Otherwise,)33
-b(the)g(next)f Ft(")p Fj(domainlist)p Ft(")g Fj(\014eld)g(is)h
-(considered)597 3855 y(and)28 b(the)g(pro)r(cess)e(rep)r(eated.)427
-3983 y(If)g(a)f(suitable)g(co)r(ordinate)f(system)i(is)f(found,)h(the)g
-(Curren)n(t)e(attribute)i(of)f(the)h(target)e(F)-7 b(rameSet)26
-b(will)f(b)r(e)427 4082 y(mo)r(di\014ed)e(on)g(exit)g(to)f(iden)n(tify)
-h(the)g(F)-7 b(rame)23 b(whose)f(matc)n(h)g(with)h(the)g(target)f(w)n
-(as)g(ev)n(en)n(tually)g(accepted.)0 4239 y Fd(Returned)32
-b(V)-8 b(alue:)259 4370 y(astFindF)g(rame\(\))427 4470
-y Fj(If)32 b(the)g(searc)n(h)e(is)i(successful,)g(the)g(function)g
-(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(F)-7 b(rameSet)31
-b(whic)n(h)h(con)n(tains)e(the)427 4569 y(F)-7 b(rame)37
-b(found)g(and)g(a)f(description)h(of)g(ho)n(w)f(to)h(con)n(v)n(ert)e
-(to)i(\(and)g(from\))g(the)h(co)r(ordinate)d(system)i(it)427
-4669 y(represen)n(ts.)f(Otherwise,)26 b(a)i(n)n(ull)f(Ob)5
-b(ject)28 b(p)r(oin)n(ter)f(\(AST)p Ft(__)p Fj(NULL\))h(is)g(returned)f
-(without)h(error.)427 4782 y(If)37 b(a)g(F)-7 b(rameSet)36
-b(is)h(returned,)h(it)f(will)g(con)n(tain)f(t)n(w)n(o)g(F)-7
-b(rames.)64 b(F)-7 b(rame)36 b(n)n(um)n(b)r(er)g(1)h(\(its)g(base)f(F)
--7 b(rame\))427 4882 y(represen)n(ts)36 b(the)i(target)f(co)r(ordinate)
-f(system)h(and)h(will)f(b)r(e)h(the)g(same)f(as)g(the)g(\(base)h(F)-7
-b(rame)37 b(of)g(the\))427 4982 y(target.)64 b(F)-7 b(rame)36
-b(n)n(um)n(b)r(er)h(2)f(\(its)h(curren)n(t)f(F)-7 b(rame\))37
-b(will)g(b)r(e)g(a)f(F)-7 b(rame)36 b(represen)n(ting)g(the)h(co)r
-(ordinate)427 5081 y(system)e(whic)n(h)g(the)g(function)h(found.)59
-b(The)35 b(Mapping)g(whic)n(h)g(in)n(ter-relates)e(these)i(t)n(w)n(o)f
-(F)-7 b(rames)34 b(will)427 5181 y(describ)r(e)28 b(ho)n(w)e(to)i(con)n
-(v)n(ert)e(b)r(et)n(w)n(een)i(their)f(resp)r(ectiv)n(e)g(co)r(ordinate)
-f(systems.)427 5295 y(Note)i(that)h(a)f(F)-7 b(rameSet)28
-b(ma)n(y)f(b)r(e)i(used)f(b)r(oth)g(as)g(a)g(Mapping)f(and)h(as)g(a)g
-(F)-7 b(rame.)38 b(If)28 b(the)h(result)f(is)g(used)427
-5394 y(as)g(a)g(Mapping)g(\(e.g.)40 b(with)29 b(astT)-7
-b(ran2\),)27 b(then)i(it)g(pro)n(vides)e(a)h(means)g(of)g(con)n(v)n
-(erting)f(co)r(ordinates)g(from)427 5494 y(the)h(target)e(co)r
-(ordinate)g(system)h(in)n(to)g(the)h(new)f(co)r(ordinate)f(system)i
-(that)f(w)n(as)f(found)i(\(and)f(vice)g(v)n(ersa)427
-5593 y(if)j(its)f(in)n(v)n(erse)e(transformation)g(is)i(selected\).)41
-b(If)29 b(it)h(is)f(used)f(as)h(a)f(F)-7 b(rame,)29 b(its)g(attributes)
-g(will)g(describ)r(e)427 5693 y(the)f(new)g(co)r(ordinate)e(system.)p
-eop end
-%%Page: 226 236
-TeXDict begin 226 235 bop 0 52 a FF(226)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Examples:)227
-489 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astFrame\()f(3,)i
-Ft("")g Fq(\),)g Ft("")g Fq(\);)427 588 y Fj(Searc)n(hes)31
-b(for)h(a)f(3-dimensional)g(co)r(ordinate)g(system)h(in)h(the)g(target)
-e(F)-7 b(rame)32 b(\(or)f(F)-7 b(rameSet\).)51 b(No)32
-b(at-)427 688 y(tributes)j(ha)n(v)n(e)e(b)r(een)h(set)g(in)h(the)f
-(template)h(F)-7 b(rame)34 b(\(created)f(b)n(y)h(astF)-7
-b(rame\),)36 b(so)d(no)h(restriction)f(has)427 787 y(b)r(een)27
-b(placed)g(on)f(the)i(required)e(co)r(ordinate)f(system,)i(other)f
-(than)h(that)g(it)g(should)g(ha)n(v)n(e)e(3)i(dimensions.)427
-887 y(The)h(\014rst)f(suitable)h(F)-7 b(rame)27 b(found)h(will)g(b)r(e)
-g(returned)f(as)g(part)g(of)g(the)h Ft(")p Fj(result)p
-Ft(")f Fj(F)-7 b(rameSet.)227 1021 y Fq(result)46 b(=)i(astFindFrame\()
-c(target,)i(astSkyFrame\()e Ft("")j Fq(\),)g Ft("")g
-Fq(\);)427 1120 y Fj(Searc)n(hes)32 b(for)h(a)g(celestial)f(co)r
-(ordinate)g(system)h(in)h(the)f(target)g(F)-7 b(rame)32
-b(\(or)h(F)-7 b(rameSet\).)54 b(The)33 b(t)n(yp)r(e)h(of)427
-1219 y(celestial)28 b(co)r(ordinate)e(system)i(is)g(unsp)r(eci\014ed,)g
-(so)f(astFindF)-7 b(rame)27 b(will)i(return)e(the)h(\014rst)g(one)f
-(found)h(as)427 1319 y(part)f(of)f(the)h Ft(")p Fj(result)p
-Ft(")f Fj(F)-7 b(rameSet.)36 b(If)28 b(the)f(target)e(is)i(a)f(F)-7
-b(rameSet,)27 b(then)g(its)g(Curren)n(t)f(attribute)h(will)g(b)r(e)427
-1418 y(up)r(dated)h(to)g(iden)n(tify)g(the)g(F)-7 b(rame)27
-b(that)h(w)n(as)f(used.)427 1535 y(If)40 b(no)f(celestial)g(co)r
-(ordinate)f(system)h(can)g(b)r(e)g(found,)k(a)c(v)-5
-b(alue)39 b(of)g(AST)p Ft(__)p Fj(NULL)g(will)g(b)r(e)h(returned)427
-1635 y(without)28 b(error.)227 1769 y Fq(result)46 b(=)i
-(astFindFrame\()c(target,)i(astSkyFrame\()e Ft(")p Fq(MaxAxes=100)p
-Ft(")g Fq(\),)j Ft("")g Fq(\);)427 1867 y Fj(This)39
-b(is)f(lik)n(e)g(the)h(last)g(example,)i(except)d(that)h(in)g(the)g(ev)
-n(en)n(t)f(of)g(the)h(target)f(b)r(eing)h(a)f(CmpF)-7
-b(rame,)427 1967 y(the)31 b(comp)r(onen)n(t)f(F)-7 b(rames)29
-b(encapsulated)g(b)n(y)h(the)g(CmpF)-7 b(rame)30 b(will)h(b)r(e)f
-(searc)n(hed)f(for)g(a)h(SkyF)-7 b(rame.)43 b(If)427
-2067 y(found,)29 b(the)g(returned)f(Mapping)g(will)g(included)h(a)f(P)n
-(ermMap)f(whic)n(h)h(selects)g(the)g(required)g(axes)f(from)427
-2166 y(the)h(target)f(CmpF)-7 b(rame.)427 2283 y(This)31
-b(is)g(acomplished)f(b)n(y)g(setting)h(the)g(MaxAxes)f(attribute)h(of)f
-(the)h(template)g(SkyF)-7 b(rame)30 b(to)h(a)f(large)427
-2382 y(n)n(um)n(b)r(er)h(\(larger)e(than)i(or)f(equal)g(to)h(the)g(n)n
-(um)n(b)r(er)g(of)g(axes)e(in)i(the)h(target)e(CmpF)-7
-b(rame\).)46 b(This)31 b(allo)n(ws)427 2482 y(the)d(SkyF)-7
-b(rame)27 b(to)h(b)r(e)g(used)f(as)g(a)g(matc)n(h)h(for)f(F)-7
-b(rames)26 b(con)n(taining)h(from)g(2)h(to)f(100)f(axes.)227
-2616 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astSkyFrame\()e
-Ft(")p Fq(System=FK5)p Ft(")g Fq(\),)k Ft("")e Fq(\);)427
-2715 y Fj(Searc)n(hes)25 b(for)g(an)h(equatorial)e(\(FK5\))i(co)r
-(ordinate)f(system)g(in)i(the)f(target.)35 b(The)26 b(Equino)n(x)f(v)-5
-b(alue)26 b(for)f(the)427 2814 y(co)r(ordinate)k(system)h(has)g(not)h
-(b)r(een)f(sp)r(eci\014ed,)i(so)d(will)i(b)r(e)f(obtained)g(from)g(the)
-h(target.)44 b(If)31 b(the)g(target)427 2914 y(is)26
-b(a)f(F)-7 b(rameSet,)25 b(its)h(Curren)n(t)f(attribute)g(will)h(b)r(e)
-g(up)r(dated)g(to)f(indicate)h(whic)n(h)f(SkyF)-7 b(rame)25
-b(w)n(as)f(used)i(to)427 3013 y(obtain)i(this)f(v)-5
-b(alue.)227 3148 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i
-(astFrame\()f(2,)i Ft("")g Fq(\),)g Ft(")p Fq(sky,pixel,)p
-Ft(")d Fq(\);)427 3246 y Fj(Searc)n(hes)29 b(for)g(a)h(2-dimensional)e
-(co)r(ordinate)h(system)h(in)g(the)h(target.)43 b(Initially)-7
-b(,)30 b(a)g(searc)n(h)e(is)i(made)g(for)427 3346 y(a)j(suitable)h(co)r
-(ordinate)e(system)h(whose)g(Domain)g(attribute)g(has)g(the)h(v)-5
-b(alue)33 b Ft(")p Fj(SKY)p Ft(")p Fj(.)54 b(If)33 b(this)h(searc)n(h)
-427 3446 y(fails,)g(a)f(searc)n(h)e(is)i(then)g(made)g(for)g(one)f
-(with)h(the)h(domain)e Ft(")p Fj(PIXEL)p Ft(")p Fj(.)51
-b(If)34 b(this)f(also)f(fails,)i(then)f(an)n(y)427 3545
-y(2-dimensional)27 b(co)r(ordinate)f(system)h(is)h(returned)f(as)g
-(part)g(of)h(the)g Ft(")p Fj(result)p Ft(")e Fj(F)-7
-b(rameSet.)427 3662 y(Only)26 b(if)h(no)g(2-dimensional)e(co)r
-(ordinate)g(systems)h(can)g(b)r(e)h(reac)n(hed)e(b)n(y)h(applying)g
-(built-in)h(con)n(v)n(ersions)427 3761 y(to)h(an)n(y)f(of)g(the)h(F)-7
-b(rames)27 b(in)h(the)g(target)e(will)i(a)f(v)-5 b(alue)28
-b(of)f(AST)p Ft(__)p Fj(NULL)h(b)r(e)g(returned.)227
-3882 y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astFrame\()f(1,)i
-Ft(")p Fq(Domain=WAVELENGTH)p Ft(")c Fq(\),)k Ft("")227
-3982 y Fq(\);)427 4060 y Fj(Searc)n(hes)18 b(for)h(an)n(y)g
-(1-dimensional)f(co)r(ordinate)h(system)g(in)h(the)g(target)f(whic)n(h)
-g(has)g(the)h(domain)f Ft(")p Fj(W)-9 b(A)g(VE-)427 4160
-y(LENGTH)p Ft(")p Fj(.)227 4294 y Fq(result)46 b(=)i(astFindFrame\()c
-(target,)i(astFrame\()f(1,)i Ft("")g Fq(\),)g Ft(")p
-Fq(wavelength)p Ft(")d Fq(\);)427 4393 y Fj(This)29 b(example)f(has)g
-(exactly)h(the)g(same)f(e\013ect)h(as)f(that)h(ab)r(o)n(v)n(e.)39
-b(It)29 b(illustrates)f(the)h(equiv)-5 b(alence)29 b(of)f(the)427
-4493 y(template's)g(Domain)f(attribute)h(and)g(the)g(\014elds)f(in)h
-(the)g Ft(")p Fj(domainlist)p Ft(")f Fj(string.)227 4627
-y Fq(result)46 b(=)i(astFindFrame\()c(target,)i(astFrame\()f(1,)i
-Ft(")p Fq(MaxAxes=3)p Ft(")e Fq(\),)i Ft("")g Fq(\);)427
-4725 y Fj(This)31 b(is)f(a)g(more)g(adv)-5 b(anced)30
-b(example)g(whic)n(h)h(will)f(searc)n(h)f(for)h(an)n(y)g(co)r(ordinate)
-g(system)g(in)h(the)g(target)427 4825 y(ha)n(ving)j(1,)j(2)e(or)f(3)h
-(dimensions.)59 b(The)35 b(F)-7 b(rame)35 b(returned)f(\(as)h(part)g
-(of)g(the)g Ft(")p Fj(result)p Ft(")f Fj(F)-7 b(rameSet\))35
-b(will)427 4925 y(alw)n(a)n(ys)30 b(b)r(e)j(1-dimensional,)f(but)g
-(will)h(b)r(e)f(related)g(to)f(the)i(co)r(ordinate)e(system)h(that)g(w)
-n(as)f(found)h(b)n(y)g(a)427 5024 y(suitable)c(Mapping)f(\(e.g.)37
-b(a)27 b(P)n(ermMap\))f(whic)n(h)i(simply)g(extracts)e(the)i(\014rst)g
-(axis.)427 5141 y(If)h(w)n(e)e(had)h(w)n(an)n(ted)f(a)h(F)-7
-b(rame)27 b(represen)n(ting)f(the)j(actual)e(\(1,)h(2)f(or)g
-(3-dimensional\))g(co)r(ordinate)g(system)427 5240 y(found,)h(w)n(e)f
-(could)h(set)f(the)h(Preserv)n(eAxes)d(attribute)j(to)g(a)f(non-zero)f
-(v)-5 b(alue)27 b(in)h(the)g(template.)227 5374 y Fq(result)46
-b(=)i(astFindFrame\()c(target,)i(astSkyFrame\()e Ft(")p
-Fq(Permute=0)p Ft(")h Fq(\),)i Ft("")g Fq(\);)427 5473
-y Fj(Searc)n(hes)39 b(for)h(an)n(y)g(celestial)g(co)r(ordinate)f
-(system)h(in)h(the)g(target,)h(but)f(only)f(\014nds)h(one)f(if)h(its)g
-(axes)427 5573 y(are)35 b(in)i(the)f(con)n(v)n(en)n(tional)e
-(\(longitude,latitude\))j(order)e(and)g(ha)n(v)n(e)g(not)h(b)r(een)h(p)
-r(erm)n(uted)f(\(e.g.)62 b(with)427 5672 y(astP)n(ermAxes\).)p
-eop end
-%%Page: 227 237
-TeXDict begin 227 236 bop 3643 52 a FF(227)0 351 y Fd(Notes:)340
-634 y Fi(\017)45 b Fj(The)28 b(Mapping)f(represen)n(ted)g(b)n(y)g(the)h
-(returned)f(F)-7 b(rameSet)27 b(results)g(in)h(alignmen)n(t)f(taking)g
-(place)g(in)h(the)427 733 y(co)r(ordinate)g(system)h(sp)r(eci\014ed)g
-(b)n(y)g(the)g(AlignSystem)g(attribute)g(of)g(the)g Ft(")p
-Fj(template)p Ft(")g Fj(F)-7 b(rame.)40 b(See)29 b(the)427
-833 y(description)e(of)h(the)g(AlignSystem)g(attribute)f(for)g(further)
-h(details.)340 966 y Fi(\017)45 b Fj(Bew)n(are)24 b(of)h(setting)g(the)
-g(Domain)g(attribute)g(of)h(the)f(template)g(and)g(then)h(using)f(a)f
-Ft(")p Fj(domainlist)p Ft(")g Fj(string)427 1065 y(whic)n(h)k(do)r(es)f
-(not)h(include)g(the)g(template's)g(domain)f(\(or)g(a)h(blank)f
-(\014eld\).)38 b(If)28 b(y)n(ou)f(do)g(so,)g(no)h(co)r(ordinate)427
-1165 y(system)g(will)f(b)r(e)h(found.)340 1298 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1397 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 1559 y Fd(More)32 b(on)f(Using)h(T)-8 b(emplates)n(:)227
-1705 y Fj(A)29 b(F)-7 b(rame)27 b(\(describing)g(a)h(co)r(ordinate)f
-(system\))h(will)g(b)r(e)g(found)h(b)n(y)e(this)i(function)f(if)h
-(\(a\))f(it)g(is)g Ft(")p Fj(matc)n(hed)p Ft(")f Fj(b)n(y)227
-1805 y(the)34 b(template)f(y)n(ou)f(supply)-7 b(,)34
-b(and)f(\(b\))h(the)f(v)-5 b(alue)33 b(of)g(its)g(Domain)f(attribute)i
-(app)r(ears)d(in)i(the)h Ft(")p Fj(domainlist)p Ft(")227
-1904 y Fj(string)f(\(except)h(that)f(a)g(blank)g(\014eld)h(in)f(this)h
-(string)e(p)r(ermits)i(an)n(y)f(domain\).)53 b(A)34 b(successful)f
-(matc)n(h)g(b)n(y)g(the)227 2004 y(template)28 b(dep)r(ends)g(on)g(a)f
-(n)n(um)n(b)r(er)g(of)h(criteria,)e(as)h(outlined)h(b)r(elo)n(w:)340
-2140 y Fi(\017)45 b Fj(In)26 b(general,)f(a)h(template)g(will)g(only)g
-(matc)n(h)g(another)f(F)-7 b(rame)25 b(whic)n(h)h(b)r(elongs)f(to)h
-(the)h(same)e(class)g(as)g(the)427 2240 y(template,)35
-b(or)d(to)h(a)f(deriv)n(ed)g(\(more)g(sp)r(ecialised\))h(class.)52
-b(F)-7 b(or)32 b(example,)i(a)e(SkyF)-7 b(rame)32 b(template)h(will)427
-2340 y(matc)n(h)h(an)n(y)f(other)g(SkyF)-7 b(rame,)34
-b(but)h(will)f(not)g(matc)n(h)f(a)g(basic)h(F)-7 b(rame.)54
-b(Con)n(v)n(ersely)-7 b(,)34 b(a)f(basic)g(F)-7 b(rame)427
-2439 y(template)28 b(will)g(matc)n(h)f(an)n(y)g(class)g(of)g(F)-7
-b(rame.)340 2572 y Fi(\017)45 b Fj(The)26 b(exception)e(to)h(this)h(is)
-f(that)h(a)e(F)-7 b(rame)25 b(of)g(an)n(y)g(class)f(can)h(b)r(e)g(used)
-g(to)g(matc)n(h)g(a)g(CmpF)-7 b(rame,)26 b(if)f(that)427
-2671 y(CmpF)-7 b(rame)27 b(con)n(tains)e(a)h(F)-7 b(rame)26
-b(of)h(the)g(same)f(class)f(as)h(the)h(template.)37 b(Note)27
-b(ho)n(w)n(ev)n(er,)d(the)j(MaxAxes)427 2771 y(and)j(MinAxes)h
-(attributes)f(of)h(the)f(template)h(m)n(ust)g(b)r(e)f(set)h(to)f
-(suitable)g(v)-5 b(alues)30 b(to)h(allo)n(w)e(it)i(to)f(matc)n(h)427
-2871 y(the)e(CmpF)-7 b(rame.)36 b(That)27 b(is,)g(the)g(MinAxes)g
-(attribute)g(m)n(ust)g(b)r(e)h(less)e(than)h(or)f(equal)h(to)g(the)g(n)
-n(um)n(b)r(er)g(of)427 2970 y(axes)g(in)i(the)f(target,)g(and)f(the)i
-(MaxAxes)e(attribute)i(m)n(ust)f(b)r(e)g(greater)e(than)j(or)e(equal)g
-(to)h(the)h(n)n(um)n(b)r(er)427 3070 y(of)f(axes)e(in)i(the)g(target.)
-340 3203 y Fi(\017)45 b Fj(If)40 b(using)g(a)f(CmpF)-7
-b(rame)40 b(as)f(a)g(template)h(frame,)i(the)f(MinAxes)e(and)h(MaxAxes)
-f(for)g(the)h(template)427 3302 y(are)33 b(determined)g(b)n(y)h(the)f
-(MinAxes)h(and)f(MaxAxes)g(v)-5 b(alues)33 b(of)g(the)h(comp)r(onen)n
-(t)f(F)-7 b(rames)33 b(within)h(the)427 3402 y(template.)48
-b(So)30 b(if)i(y)n(ou)e(w)n(an)n(t)g(a)h(template)g(CmpF)-7
-b(rame)31 b(to)g(b)r(e)g(able)g(to)g(matc)n(h)g(F)-7
-b(rames)30 b(with)h(di\013eren)n(t)427 3502 y(n)n(um)n(b)r(ers)19
-b(of)g(axes,)h(then)f(y)n(ou)g(m)n(ust)g(set)g(the)g(MaxAxes)g(and/or)e
-(MinAxes)i(attributes)g(in)g(the)h(comp)r(onen)n(t)427
-3601 y(template)28 b(F)-7 b(rames,)27 b(b)r(efore)g(com)n(bining)g
-(them)i(together)d(in)n(to)i(the)g(template)f(CmpF)-7
-b(rame.)340 3734 y Fi(\017)45 b Fj(If)32 b(a)e(template)i(has)e(a)h(v)
--5 b(alue)30 b(set)h(for)g(an)n(y)f(of)h(its)g(main)g(attributes,)h
-(then)f(it)h(will)f(only)g(matc)n(h)f(F)-7 b(rames)427
-3834 y(whic)n(h)23 b(ha)n(v)n(e)e(an)h(iden)n(tical)g(v)-5
-b(alue)22 b(for)g(that)h(attribute)g(\(or)e(whic)n(h)i(can)f(b)r(e)h
-(transformed,)f(using)g(a)g(built-in)427 3933 y(con)n(v)n(ersion,)30
-b(so)g(that)h(they)g(ha)n(v)n(e)f(the)h(required)f(v)-5
-b(alue)31 b(for)f(that)h(attribute\).)48 b(If)31 b(an)n(y)f(attribute)h
-(in)g(the)427 4033 y(template)d(is)f(un-set,)g(ho)n(w)n(ev)n(er,)e
-(then)i(F)-7 b(rames)27 b(are)f(matc)n(hed)g(regardless)f(of)i(the)g(v)
--5 b(alue)27 b(they)g(ma)n(y)g(ha)n(v)n(e)427 4132 y(for)37
-b(that)h(attribute.)66 b(Y)-7 b(ou)37 b(ma)n(y)g(therefore)f(mak)n(e)g
-(a)h(template)h(more)e(or)h(less)g(sp)r(eci\014c)g(b)n(y)g(c)n(ho)r
-(osing)427 4232 y(the)h(attributes)f(for)g(whic)n(h)g(y)n(ou)g(set)g(v)
--5 b(alues.)65 b(This)38 b(requiremen)n(t)e(do)r(es)h(not)g(apply)g(to)
-g('descriptiv)n(e')427 4332 y(attributes)28 b(suc)n(h)f(as)g(titles,)h
-(lab)r(els,)g(sym)n(b)r(ols,)e(etc.)340 4464 y Fi(\017)45
-b Fj(An)22 b(imp)r(ortan)n(t)g(application)f(of)g(this)h(principle)g
-(in)n(v)n(olv)n(es)e(the)i(Domain)g(attribute.)35 b(Setting)22
-b(the)g(Domain)427 4564 y(attribute)j(of)g(the)h(template)f(has)f(the)i
-(e\013ect)f(of)g(restricting)f(the)i(searc)n(h)d(to)i(a)f(particular)g
-(t)n(yp)r(e)h(of)g(F)-7 b(rame)427 4664 y(\(with)24 b(the)g(domain)e(y)
-n(ou)g(sp)r(ecify\).)36 b(Con)n(v)n(ersely)-7 b(,)22
-b(if)i(the)f(Domain)g(attribute)g(is)g(not)g(set)g(in)h(the)f
-(template,)427 4763 y(then)h(the)f(domain)g(of)f(the)i(F)-7
-b(rame)22 b(found)h(is)g(not)g(relev)-5 b(an)n(t,)23
-b(so)g(all)f(F)-7 b(rames)22 b(are)g(searc)n(hed.)34
-b(Note)23 b(that)g(the)427 4863 y Ft(")p Fj(domainlist)p
-Ft(")h Fj(string)g(pro)n(vides)g(an)g(alternativ)n(e)g(w)n(a)n(y)g(of)h
-(restricting)f(the)h(searc)n(h)e(in)i(the)h(same)e(manner,)427
-4963 y(but)30 b(is)e(a)h(more)f(con)n(v)n(enien)n(t)f(in)n(terface)h
-(if)i(y)n(ou)e(wish)g(to)h(searc)n(h)e(automatically)h(for)g(another)g
-(domain)g(if)427 5062 y(the)g(\014rst)g(searc)n(h)e(fails.)340
-5195 y Fi(\017)45 b Fj(Normally)-7 b(,)29 b(a)g(template)h(will)f(only)
-g(matc)n(h)g(a)g(F)-7 b(rame)29 b(whic)n(h)g(has)g(the)g(same)g(n)n(um)
-n(b)r(er)g(of)g(axes)f(as)h(itself.)427 5295 y(Ho)n(w)n(ev)n(er,)i(for)
-g(some)g(classes)f(of)h(template,)i(this)f(default)f(b)r(eha)n(viour)g
-(ma)n(y)f(b)r(e)i(c)n(hanged)f(b)n(y)g(means)g(of)427
-5394 y(the)f(MinAxes,)g(MaxAxes)e(and)h(Matc)n(hEnd)g(attributes.)42
-b(In)29 b(addition,)h(the)f(b)r(eha)n(viour)f(of)h(a)g(template)427
-5494 y(ma)n(y)38 b(b)r(e)h(in\015uenced)g(b)n(y)f(its)h(P)n(erm)n(ute)e
-(and)i(Preserv)n(eAxes)d(attributes,)41 b(whic)n(h)e(con)n(trol)e
-(whether)h(it)427 5593 y(matc)n(hes)30 b(F)-7 b(rames)30
-b(whose)g(axes)f(ha)n(v)n(e)h(b)r(een)g(p)r(erm)n(uted,)i(and)e
-(whether)h(this)g(p)r(erm)n(utation)f(is)g(retained)427
-5693 y(in)k(the)f(F)-7 b(rame)33 b(whic)n(h)g(is)h(returned)e(\(as)h
-(opp)r(osed)g(to)g(returning)g(the)g(axes)g(in)g(the)h(order)e(sp)r
-(eci\014ed)h(in)p eop end
-%%Page: 228 238
-TeXDict begin 228 237 bop 0 52 a FF(228)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(the)h(template,)h(whic)
-n(h)f(is)f(the)h(default)g(b)r(eha)n(viour\).)45 b(Y)-7
-b(ou)31 b(should)g(consult)f(the)h(descriptions)f(of)h(these)427
-451 y(attributes)d(for)f(details)g(of)h(this)g(more)e(adv)-5
-b(anced)28 b(use)f(of)h(templates.)p 0 656 3780 12 v
-0 788 a Fz(astFitsChan)707 b Fe(Create)37 b(a)h(FitsChan)705
-b Fz(astFitsChan)0 959 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(FitsChan)h(and)f(optionally)g
-(initialises)h(its)f(attributes.)227 1087 y(A)33 b(FitsChan)e(is)h(a)g
-(sp)r(ecialised)f(form)h(of)g(Channel)f(whic)n(h)h(supp)r(orts)g(I/O)f
-(op)r(erations)f(in)n(v)n(olving)h(the)h(use)g(of)227
-1186 y(FITS)g(\(Flexible)h(Image)e(T)-7 b(ransp)r(ort)30
-b(System\))i(header)f(cards.)49 b(W)-7 b(riting)32 b(an)f(Ob)5
-b(ject)32 b(to)f(a)h(FitsChan)g(\(using)227 1286 y(astW)-7
-b(rite\))31 b(will,)h(if)g(the)f(Ob)5 b(ject)31 b(is)g(suitable,)h
-(generate)d(a)i(description)f(of)h(that)g(Ob)5 b(ject)31
-b(comp)r(osed)f(of)h(FITS)227 1386 y(header)h(cards,)i(and)e(reading)g
-(from)h(a)f(FitsChan)i(will)f(create)f(a)g(new)h(Ob)5
-b(ject)33 b(from)g(its)g(FITS)g(header)f(card)227 1485
-y(description.)227 1613 y(While)k(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f
-(represen)n(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f
-(or)h(more)g(80-c)n(haracter)227 1712 y Ft(")p Fj(header)29
-b(cards)p Ft(")f Fj(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-1812 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fj(END)p Ft(")e Fj(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 1912
-y(accessed)g(in)g(an)n(y)g(order)f(b)n(y)h(using)g(the)h(FitsChan's)f
-(in)n(teger)g(Card)g(attribute,)g(whic)n(h)h(iden)n(ti\014es)f(a)g
-Ft(")p Fj(curren)n(t)p Ft(")227 2011 y Fj(card,)g(to)h(whic)n(h)f
-(subsequen)n(t)h(op)r(erations)e(apply)-7 b(.)37 b(Searc)n(hes)26
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(erformed)g(\(using)
-227 2111 y(astFindFits\),)k(new)e(cards)f(ma)n(y)g(b)r(e)i(inserted)f
-(\(astPutFits,)h(astPutCards,)e(astSetFits)p Fl(<)p Fj(X)p
-Fl(>)p Fj(\))h(and)g(existing)227 2210 y(ones)d(ma)n(y)g(b)r(e)h
-(deleted)g(\(astDelFits\))h(or)d(c)n(hanged)h(\(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\).)227 2338 y(When)37 b(y)n(ou)f(create)g(a)g
-(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g(the)h(option)f(of)h(sp)r(ecifying)g
-Ft(")p Fj(source)p Ft(")d Fj(and)j Ft(")p Fj(sink)p Ft(")e
-Fj(functions)227 2437 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f
-(data)h(stores)f(b)n(y)h(reading)f(and)h(writing)g(FITS)g(header)g
-(cards.)35 b(If)26 b(y)n(ou)g(pro)n(vide)227 2537 y(a)h(source)f
-(function,)j(it)e(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h
-(header)f(cards)f(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-2637 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 2736 y(en)n(ter)25 b(data)g(in)n(to)h(it)g(\(e.g.)36
-b(using)25 b(astPutCards,)f(astPutFits)i(or)e(astW)-7
-b(rite\).)36 b(If)26 b(y)n(ou)f(pro)n(vide)f(a)i(sink)f(function,)227
-2836 y(it)38 b(is)f(used)g(to)h(deliv)n(er)e(an)n(y)h(remaining)f(con)n
-(ten)n(ts)h(of)g(a)g(FitsChan)g(to)g(an)g(external)g(data)f(store)h
-(when)g(the)227 2936 y(FitsChan)30 b(is)f(deleted.)44
-b(If)30 b(y)n(ou)e(do)i(not)f(pro)n(vide)g(a)g(sink)g(function,)i(an)n
-(y)e(header)f(cards)h(remaining)f(when)i(the)227 3035
-y(FitsChan)25 b(is)f(deleted)h(will)g(b)r(e)g(lost,)g(so)f(y)n(ou)f
-(should)i(arrange)d(to)i(extract)g(them)h(\014rst)f(if)i(necessary)c
-(\(e.g.)36 b(using)227 3135 y(astFindFits)28 b(or)f(astRead\).)227
-3262 y(Co)r(ordinate)i(system)g(information)g(ma)n(y)g(b)r(e)h(describ)
-r(ed)g(using)f(FITS)h(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)
-n(t)227 3362 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p
-Fj(enco)r(dings)p Ft(")p Fj(.)39 b(When)29 b(an)g(AST)g(Ob)5
-b(ject)29 b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)
-227 3462 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r
-(ding)f(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5
-b(ject)22 b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227
-3561 y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 3661 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-3760 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 3860 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 3960 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 4087 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 4187 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 4286 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-4386 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 4486 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)227 4613 y(The)38
-b(detailed)f(b)r(eha)n(viour)g(of)g(astRead)g(and)g(astW)-7
-b(rite,)40 b(when)e(used)f(with)h(a)f(FitsChan,)j(dep)r(ends)e(on)f
-(the)227 4713 y(enco)r(ding)28 b(in)h(use.)39 b(In)29
-b(general,)e(ho)n(w)n(ev)n(er,)f(all)i(use)h(of)f(astRead)g(is)g
-(destructiv)n(e,)g(so)g(that)g(FITS)h(header)f(cards)227
-4812 y(are)20 b(consumed)g(in)g(the)h(pro)r(cess)e(of)h(reading)g(an)g
-(Ob)5 b(ject,)21 b(and)f(are)g(remo)n(v)n(ed)f(from)h(the)g(FitsChan)h
-(\(this)g(deletion)227 4912 y(can)27 b(b)r(e)h(prev)n(en)n(ted)f(for)g
-(sp)r(eci\014c)h(cards)f(b)n(y)g(calling)g(the)h(astRetainFits)f
-(function\).)227 5040 y(If)i(the)f(enco)r(ding)f(in)h(use)g(allo)n(ws)f
-(only)g(a)h(single)f(Ob)5 b(ject)28 b(description)f(to)h(b)r(e)g
-(stored)f(in)h(a)g(FitsChan)g(\(e.g.)37 b(the)227 5139
-y(DSS,)27 b(FITS-W)n(CS)f(and)f(FITS-IRAF)i(enco)r(dings\),)f(then)g
-(write)g(op)r(erations)e(using)h(astW)-7 b(rite)26 b(will)g(o)n(v)n
-(er-write)227 5239 y(an)n(y)37 b(existing)h(Ob)5 b(ject)37
-b(description)g(using)h(that)g(enco)r(ding.)66 b(Otherwise)37
-b(\(e.g.)67 b(the)39 b(NA)-7 b(TIVE)38 b(enco)r(ding\),)227
-5338 y(m)n(ultiple)i(Ob)5 b(ject)39 b(descriptions)g(are)f(written)i
-(sequen)n(tially)e(and)h(ma)n(y)g(later)f(b)r(e)i(read)f(bac)n(k)f(in)i
-(the)f(same)227 5438 y(sequence.)0 5593 y Fd(Synopsis:)121
-b Ft(AstFitsChan)39 b Fi(\003)p Ft(astFitsChan\()f(const)k(char)f
-Fi(\003)p Ft(\()p Fi(\003)i Ft(source\)\()d(void)i(\),)h(void)f(\()p
-Fi(\003)g Ft(sink\)\()f(const)227 5693 y(char)h Fi(\003)h
-Ft(\),)g(const)f(char)g Fi(\003)p Ft(options,)d(...)86
-b(\))p eop end
-%%Page: 229 239
-TeXDict begin 229 238 bop 3643 52 a FF(229)0 351 y Fd(P)m(arameters:)
-259 479 y(source)427 578 y Fj(P)n(oin)n(ter)40 b(to)h(a)f(source)g
-(function)i(whic)n(h)f(tak)n(es)f(no)h(argumen)n(ts)f(and)g(returns)h
-(a)f(p)r(oin)n(ter)h(to)g(a)g(n)n(ull-)427 678 y(terminated)29
-b(string.)41 b(This)29 b(function)h(will)f(b)r(e)h(used)f(b)n(y)g(the)g
-(FitsChan)g(to)g(obtain)g(input)h(FITS)f(header)427 778
-y(cards.)61 b(On)35 b(eac)n(h)h(in)n(v)n(o)r(cation,)g(it)g(should)g
-(read)f(the)h(next)g(input)h(card)e(from)h(some)f(external)g(source)427
-877 y(\(suc)n(h)30 b(as)f(a)h(FITS)g(\014le\),)h(and)f(return)f(a)h(p)r
-(oin)n(ter)f(to)h(the)g(\(n)n(ull-terminated\))g(con)n(ten)n(ts)f(of)h
-(the)g(card.)43 b(It)427 977 y(should)28 b(return)f(a)g(NULL)h(p)r(oin)
-n(ter)f(when)h(there)f(are)g(no)g(more)g(cards)f(to)i(b)r(e)g(read.)427
-1089 y(If)k Ft(")p Fj(source)p Ft(")d Fj(is)j(NULL,)g(the)f(FitsChan)h
-(will)g(remain)e(empt)n(y)i(un)n(til)g(cards)e(are)g(explicitly)i
-(stored)f(in)g(it)427 1188 y(\(e.g.)37 b(using)27 b(astPutCards)f(or)h
-(astPutFits\).)259 1312 y Fd(sink)427 1412 y Fj(P)n(oin)n(ter)32
-b(to)h(a)g(sink)h(function)g(that)f(tak)n(es)g(a)g(p)r(oin)n(ter)g(to)g
-(a)g(n)n(ull-terminated)g(string)g(as)g(an)g(argumen)n(t)427
-1511 y(and)h(returns)g(v)n(oid.)56 b(This)34 b(function)g(will)h(b)r(e)
-f(used)h(b)n(y)e(the)i(FitsChan)f(to)g(deliv)n(er)g(an)n(y)f(FITS)h
-(header)427 1611 y(cards)24 b(it)i(con)n(tains)e(when)i(it)f(is)g
-(\014nally)g(deleted.)37 b(On)25 b(eac)n(h)f(in)n(v)n(o)r(cation,)h(it)
-g(should)g(deliv)n(er)g(the)g(con)n(ten)n(ts)427 1710
-y(of)k(the)f(c)n(haracter)e(string)i(passed)f(to)i(it)f(as)g(a)g(FITS)g
-(header)g(card)f(to)h(some)g(external)g(data)f(store)h(\(suc)n(h)427
-1810 y(as)f(a)g(FITS)h(\014le\).)427 1922 y(If)g Ft(")p
-Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(con)n(ten)n(ts)f(of)h(the)g
-(FitsChan)g(will)f(not)h(b)r(e)g(written)g(out)f(when)h(it)g(is)g
-(deleted.)259 2046 y Fd(options)427 2145 y Fj(P)n(oin)n(ter)f(to)h(a)g
-(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 2245 y(assignmen)n(ts)23
-b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(FitsChan.)36
-b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-2345 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-2444 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 2568
-y Fd(...)427 2668 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2767 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2867 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2966 y Fj(function\).)0 3119
-y Fd(Returned)32 b(V)-8 b(alue:)259 3247 y(astFitsChan\(\))427
-3346 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(FitsChan.)0
-3499 y Fd(Notes:)340 3773 y Fi(\017)45 b Fj(No)23 b(FITS)g
-Ft(")p Fj(END)p Ft(")g Fj(card)f(will)h(b)r(e)g(written)h(via)e(the)h
-(sink)g(function.)36 b(Y)-7 b(ou)23 b(should)g(add)f(this)i(card)e(y)n
-(ourself)427 3872 y(after)28 b(the)g(FitsChan)f(has)g(b)r(een)h
-(deleted.)340 3996 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4096 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 4249 y Fd(Status)33
-b(Handling)n(:)227 4395 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 4494 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 4594 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 4775 3780 12 v 0 4907 a Fz(astFluxF)-11 b(rame)569
-b Fe(Create)38 b(a)g(FluxF)-10 b(rame)568 b Fz(astFluxF)-11
-b(rame)0 5054 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f
-(a)g(new)g(FluxF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 5174 y(A)c(FluxF)-7 b(rame)22 b(is)h(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)e(F)-7 b(rame)23
-b(whic)n(h)g(represen)n(ts)e(v)-5 b(arious)22 b(systems)h(used)227
-5274 y(to)36 b(represen)n(t)f(the)h(signal)f(lev)n(el)g(in)i(an)e
-(observ)-5 b(ation.)61 b(The)36 b(particular)e(co)r(ordinate)h(system)h
-(to)g(b)r(e)g(used)g(is)227 5374 y(sp)r(eci\014ed)31
-b(b)n(y)f(setting)h(the)g(FluxF)-7 b(rame's)30 b(System)h(attribute)g
-(quali\014ed,)g(as)f(necessary)-7 b(,)29 b(b)n(y)i(other)f(attributes)
-227 5473 y(suc)n(h)e(as)e(the)i(units,)h(etc)e(\(see)h(the)g
-(description)f(of)g(the)h(System)g(attribute)g(for)f(details\).)227
-5593 y(All)i(\015ux)f(v)-5 b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h
-(measured)e(at)h(the)h(same)e(frequency)h(or)f(w)n(a)n(v)n(elength)f
-(\(as)i(giv)n(en)f(b)n(y)h(the)227 5693 y(Sp)r(ecV)-7
-b(al)28 b(attribute\).)38 b(Th)n(us)27 b(this)h(class)e(is)i(more)f
-(appropriate)f(for)h(use)g(with)h(images)f(rather)f(than)i(sp)r(ectra.)
-p eop end
-%%Page: 230 240
-TeXDict begin 230 239 bop 0 52 a FF(230)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Synopsis:)121
-b Ft(AstFluxFrame)38 b Fi(\003)p Ft(astFluxFrame\()g(double)j(specval,)
-g(AstSpecFrame)d Fi(\003)p Ft(specfrm,)i(const)i(char)227
-451 y Fi(\003)p Ft(options,)e(...)86 b(\))0 598 y Fd(P)m(arameters:)259
-732 y(sp)s(ecv)-5 b(al)427 831 y Fj(The)37 b(sp)r(ectral)e(v)-5
-b(alue)36 b(to)g(whic)n(h)g(the)h(\015ux)f(v)-5 b(alues)36
-b(refer,)i(giv)n(en)d(in)i(the)f(sp)r(ectral)g(co)r(ordinate)f(system)
-427 931 y(sp)r(eci\014ed)28 b(b)n(y)e Ft(")p Fj(sp)r(ecfrm)p
-Ft(")p Fj(.)36 b(The)28 b(v)-5 b(alue)27 b(supplied)g(for)g(the)g
-Ft(")p Fj(sp)r(ecv)-5 b(al)p Ft(")26 b Fj(parameter)g(b)r(ecomes)h(the)
-g(default)427 1030 y(v)-5 b(alue)39 b(for)f(the)h(Sp)r(ecV)-7
-b(al)39 b(attribute.)71 b(A)39 b(v)-5 b(alue)38 b(of)h(AST)p
-Ft(__)p Fj(BAD)g(ma)n(y)f(b)r(e)h(supplied)g(if)g(the)g(sp)r(ectral)427
-1130 y(p)r(osition)27 b(is)h(unkno)n(wn,)e(but)i(this)g(ma)n(y)e
-(result)h(in)h(it)g(not)f(b)r(eing)g(p)r(ossible)g(for)g(the)h(astCon)n
-(v)n(ert)d(function)427 1230 y(to)j(determine)f(a)h(Mapping)f(b)r(et)n
-(w)n(een)g(the)h(new)g(FluxF)-7 b(rame)27 b(and)h(some)f(other)g(FluxF)
--7 b(rame.)259 1360 y Fd(sp)s(ecfrm)427 1460 y Fj(A)30
-b(p)r(oin)n(ter)g(to)f(a)g(Sp)r(ecF)-7 b(rame)30 b(describing)f(the)h
-(sp)r(ectral)f(co)r(ordinate)f(system)i(in)g(whic)n(h)g(the)g
-Ft(")p Fj(sp)r(ecv)-5 b(al)p Ft(")427 1559 y Fj(parameter)32
-b(is)g(giv)n(en.)52 b(A)34 b(deep)f(cop)n(y)f(of)h(this)g(ob)5
-b(ject)33 b(is)f(tak)n(en,)i(so)e(an)n(y)g(subsequen)n(t)h(c)n(hanges)e
-(to)i(the)427 1659 y(Sp)r(ecF)-7 b(rame)32 b(using)g(the)g(supplied)g
-(p)r(oin)n(ter)g(will)g(ha)n(v)n(e)f(no)h(e\013ect)g(on)g(the)g(new)g
-(FluxF)-7 b(rame.)50 b(A)32 b(NULL)427 1758 y(p)r(oin)n(ter)27
-b(can)h(b)r(e)g(supplied)g(if)g(AST)p Ft(__)p Fj(BAD)f(is)h(supplied)g
-(for)f Ft(")p Fj(sp)r(ecv)-5 b(al)p Ft(")p Fj(.)259 1889
-y Fd(options)427 1988 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 2088 y(assignmen)n(ts)19
-b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(FluxF)-7
-b(rame.)34 b(The)20 b(syn)n(tax)e(used)i(is)g(iden)n(tical)g(to)f(that)
-427 2188 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-2287 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 2418 y Fd(...)427 2517 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 2617 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 2716 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 2816 y Fj(function\).)0
-2975 y Fd(Returned)32 b(V)-8 b(alue:)259 3109 y(astFluxF)g(rame\(\))427
-3209 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(FluxF)-7
-b(rame.)0 3368 y Fd(Notes:)340 3648 y Fi(\017)45 b Fj(When)34
-b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)i(t)n(w)n(o)g(FluxF)-7
-b(rames)32 b(is)h(requested)g(\(as)g(when)g(supplying)g(FluxF)-7
-b(rames)33 b(to)427 3748 y(astCon)n(v)n(ert\),)21 b(accoun)n(t)g(will)g
-(b)r(e)h(tak)n(en)e(of)i(the)f(nature)g(of)g(the)h(\015ux)f(co)r
-(ordinate)g(systems)f(they)i(represen)n(t,)427 3847 y(together)40
-b(with)h(an)n(y)f(qualifying)g(attribute)h(v)-5 b(alues,)43
-b(including)e(the)g(AlignSystem)g(attribute.)76 b(The)427
-3947 y(results)39 b(will)h(therefore)e(fully)i(re\015ect)f(the)g
-(relationship)g(b)r(et)n(w)n(een)g(p)r(ositions)g(measured)f(in)i(the)f
-(t)n(w)n(o)427 4047 y(systems.)55 b(In)33 b(addition,)i(an)n(y)e
-(di\013erence)h(in)g(the)g(Unit)g(attributes)f(of)h(the)g(t)n(w)n(o)f
-(systems)g(will)h(also)e(b)r(e)427 4146 y(tak)n(en)27
-b(in)n(to)h(accoun)n(t.)340 4276 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 4376 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 4570 3780 12 v 0 4701 a Fz(astF)-11 b(ormat)779
-4702 y Fe(F)h(ormat)37 b(a)i(co)s(ordinate)d(v)-7 b(alue)39
-b(for)f(a)g(F)-10 b(rame)39 b(axis)3184 4701 y Fz(astF)-11
-b(ormat)0 4867 y Fd(Description:)44 b Fj(This)32 b(function)g(returns)g
-(a)f(p)r(oin)n(ter)g(to)h(a)f(string)g(con)n(taining)g(the)h(formatted)
-g(\(c)n(haracter\))e(v)n(ersion)227 4967 y(of)38 b(a)g(co)r(ordinate)f
-(v)-5 b(alue)38 b(for)g(a)g(F)-7 b(rame)37 b(axis.)68
-b(The)39 b(formatting)e(applied)h(is)g(determined)h(b)n(y)f(the)g(F)-7
-b(rame's)227 5066 y(attributes)36 b(and,)h(in)e(particular,)h(b)n(y)f
-(an)n(y)g(F)-7 b(ormat)35 b(attribute)g(string)g(that)g(has)g(b)r(een)h
-(set)f(for)g(the)h(axis.)59 b(A)227 5166 y(suitable)28
-b(default)g(format)f(\(based)g(on)h(the)g(Digits)f(attribute)h(v)-5
-b(alue\))28 b(will)g(b)r(e)g(applied)f(if)h(necessary)-7
-b(.)0 5313 y Fd(Synopsis:)121 b Ft(const)41 b(char)h
-Fi(\003)p Ft(astFormat\()d(AstFrame)i Fi(\003)p Ft(this,)g(int)h(axis,)
-f(double)h(value)f(\))0 5460 y Fd(P)m(arameters:)259
-5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)p eop end
-%%Page: 231 241
-TeXDict begin 231 240 bop 3643 52 a FF(231)259 351 y
-Fd(axis)427 451 y Fj(The)23 b(n)n(um)n(b)r(er)g(of)f(the)h(F)-7
-b(rame)22 b(axis)g(for)h(whic)n(h)f(formatting)g(is)h(to)g(b)r(e)g(p)r
-(erformed)f(\(axis)g(n)n(um)n(b)r(ering)g(starts)427
-551 y(at)28 b(1)f(for)g(the)h(\014rst)f(axis\).)259 680
-y Fd(v)-5 b(alue)427 779 y Fj(The)28 b(co)r(ordinate)e(v)-5
-b(alue)28 b(to)f(b)r(e)h(formatted.)0 937 y Fd(Returned)k(V)-8
-b(alue:)259 1070 y(astF)g(ormat\(\))427 1169 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(a)f(n)n(ull-terminated)g(string)g(con)n(taining)
-g(the)h(formatted)f(v)-5 b(alue.)0 1327 y Fd(Notes:)340
-1606 y Fi(\017)45 b Fj(The)36 b(returned)g(p)r(oin)n(ter)g(is)g(guaran)
-n(teed)e(to)i(remain)g(v)-5 b(alid)36 b(and)g(the)g(string)g(to)g(whic)
-n(h)g(it)g(p)r(oin)n(ts)g(will)427 1706 y(not)c(b)r(e)g(o)n(v)n
-(er-written)e(for)i(a)f(total)h(of)g(50)f(successiv)n(e)f(in)n(v)n(o)r
-(cations)g(of)i(this)g(function.)51 b(After)32 b(this,)h(the)427
-1805 y(memory)27 b(con)n(taining)f(the)i(string)f(ma)n(y)f(b)r(e)i
-(re-used,)e(so)h(a)g(cop)n(y)f(of)i(the)f(string)g(should)g(b)r(e)h
-(made)f(if)h(it)g(is)427 1905 y(needed)g(for)f(longer)f(than)i(this.)
-340 2034 y Fi(\017)45 b Fj(A)23 b(formatted)g(v)-5 b(alue)23
-b(ma)n(y)f(b)r(e)h(con)n(v)n(erted)e(bac)n(k)h(in)n(to)h(a)f(n)n
-(umerical)g(\(double\))h(v)-5 b(alue)23 b(using)f(astUnformat.)340
-2163 y Fi(\017)45 b Fj(A)26 b(NULL)g(p)r(oin)n(ter)e(will)i(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)h(in)n(v)n(ok)n(ed)d(with)j(the)g
-(AST)f(error)f(status)h(set,)g(or)427 2263 y(if)j(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)p 0 2454 3780 12 v 0 2585 a Fz(astF)-11
-b(rame)1492 2584 y Fe(Create)37 b(a)i(F)-10 b(rame)3242
-2585 y Fz(astF)f(rame)0 2743 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(F)-7 b(rame)27 b(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 2865 y(A)c(F)-7
-b(rame)24 b(is)f(used)h(to)g(represen)n(t)e(a)i(co)r(ordinate)e
-(system.)35 b(It)25 b(do)r(es)e(this)h(in)g(rather)f(the)h(same)f(w)n
-(a)n(y)g(that)h(a)f(frame)227 2965 y(around)29 b(a)g(graph)f(describ)r
-(es)h(the)h(co)r(ordinate)e(space)h(in)h(whic)n(h)f(data)g(are)g
-(plotted.)43 b(Consequen)n(tly)-7 b(,)29 b(a)g(F)-7 b(rame)227
-3065 y(has)34 b(a)f(Title)i(\(string\))f(attribute,)i(whic)n(h)e
-(describ)r(es)f(the)h(co)r(ordinate)f(space,)i(and)f(con)n(tains)f
-(axes)g(whic)n(h)h(in)227 3164 y(turn)26 b(hold)g(information)f(suc)n
-(h)h(as)f(Lab)r(el)g(and)h(Units)h(strings)d(whic)n(h)i(are)f(used)h
-(for)f(lab)r(elling)h(\(e.g.\))36 b(graphical)227 3264
-y(output.)i(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e(the)j(n)n(um)n(b)r
-(er)g(of)f(axes)g(is)g(not)h(restricted)f(to)g(t)n(w)n(o.)227
-3386 y(F)-7 b(unctions)24 b(are)f(a)n(v)-5 b(ailable)23
-b(for)g(con)n(v)n(erting)f(F)-7 b(rame)24 b(co)r(ordinate)e(v)-5
-b(alues)24 b(in)n(to)g(a)f(form)h(suitable)f(for)h(displa)n(y)-7
-b(,)24 b(and)227 3486 y(also)j(for)g(calculating)g(distances)g(and)g
-(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f(within)h(the)g(F)-7
-b(rame.)227 3609 y(F)g(rames)27 b(ma)n(y)g(also)f(con)n(tain)h(kno)n
-(wledge)g(of)g(ho)n(w)g(to)h(transform)e(to)i(and)f(from)g(related)g
-(co)r(ordinate)g(systems.)0 3754 y Fd(Synopsis:)121 b
-Ft(AstFrame)40 b Fi(\003)p Ft(astFrame\()g(int)i(naxes,)f(const)g(char)
-h Fi(\003)p Ft(options,)e(...)86 b(\))0 3900 y Fd(P)m(arameters:)259
-4032 y(naxes)427 4132 y Fj(The)27 b(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)26 b(axes)g(\(i.e.)37 b(the)27 b(n)n(um)n(b)r(er)f(of)h
-(dimensions)f(of)g(the)h(co)r(ordinate)f(space)g(whic)n(h)g(the)427
-4232 y(F)-7 b(rame)27 b(describ)r(es\).)259 4361 y Fd(options)427
-4460 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-4560 y(assignmen)n(ts)i(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g
-(new)g(F)-7 b(rame.)46 b(The)31 b(syn)n(tax)f(used)h(is)g(iden)n(tical)
-g(to)f(that)427 4660 y(for)c(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4759 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 4888 y Fd(...)427 4988 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 5087 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5187 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5287 y Fj(function\).)0
-5445 y Fd(Returned)32 b(V)-8 b(alue:)259 5577 y(astF)g(rame\(\))427
-5677 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(F)-7
-b(rame.)p eop end
-%%Page: 232 242
-TeXDict begin 232 241 bop 0 52 a FF(232)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Examples:)227
-494 y Fq(frame)47 b(=)g(astFrame\()e(2,)j Ft(")p Fq(Title=Energy)c
-(Spectrum:)93 b(Plot)46 b(\045d)p Ft(")p Fq(,)h(n)g(\);)427
-593 y Fj(Creates)31 b(a)g(new)h(2-dimensional)e(F)-7
-b(rame)31 b(and)h(initialises)f(its)h(Title)g(attribute)g(to)g(the)g
-(string)f Ft(")p Fj(Energy)427 692 y(Sp)r(ectrum:)38
-b(Plot)27 b Fl(<)p Fj(n)p Fl(>)p Ft(")p Fj(,)f(where)h
-Fl(<)p Fj(n)p Fl(>)g Fj(tak)n(es)g(the)h(v)-5 b(alue)27
-b(of)h(the)g(in)n(t)g(v)-5 b(ariable)26 b Ft(")p Fj(n)p
-Ft(")p Fj(.)227 829 y Fq(frame)47 b(=)g(astFrame\()e(2,)j
-Ft(")p Fq(Label\(1\)=Energy,)42 b(Label\(2\)=Response)p
-Ft(")h Fq(\);)427 927 y Fj(Creates)26 b(a)g(new)h(2-dimensional)e(F)-7
-b(rame)26 b(and)g(initialises)h(its)f(axis)g(Lab)r(el)h(attributes)f
-(to)h(suitable)f(string)427 1027 y(v)-5 b(alues.)0 1194
-y Fd(Notes:)340 1482 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1582 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1786 3780 12 v 0 1917
-a Fz(astF)-11 b(rameSet)1411 1916 y Fe(Create)37 b(a)i(F)-10
-b(rameSet)3053 1917 y Fz(astF)f(rameSet)0 2088 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(F)-7 b(rameSet)28
-b(and)f(optionally)g(initialises)g(its)h(attributes.)227
-2215 y(A)23 b(F)-7 b(rameSet)23 b(consists)e(of)i(a)f(set)h(of)f(one)h
-(or)e(more)h(F)-7 b(rames)22 b(\(whic)n(h)h(describ)r(e)f(co)r
-(ordinate)f(systems\),)j(connected)227 2315 y(together)j(b)n(y)g
-(Mappings)f(\(whic)n(h)i(describ)r(e)e(ho)n(w)h(the)h(co)r(ordinate)e
-(systems)g(are)h(in)n(ter-related\).)35 b(A)28 b(F)-7
-b(rameSet)227 2414 y(mak)n(es)28 b(it)i(p)r(ossible)e(to)h(obtain)g(a)f
-(Mapping)h(b)r(et)n(w)n(een)g(an)n(y)f(pair)g(of)h(these)g(F)-7
-b(rames)28 b(\(i.e.)41 b(to)29 b(con)n(v)n(ert)f(b)r(et)n(w)n(een)227
-2514 y(an)n(y)e(of)g(the)g(co)r(ordinate)f(systems)h(whic)n(h)g(it)g
-(describ)r(es\).)36 b(The)26 b(individual)h(F)-7 b(rames)25
-b(are)g(iden)n(ti\014ed)h(within)h(the)227 2613 y(F)-7
-b(rameSet)34 b(b)n(y)g(an)f(in)n(teger)g(index,)j(with)e(F)-7
-b(rames)34 b(b)r(eing)g(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)h
-(one)f(as)g(they)i(are)227 2713 y(added)28 b(to)f(the)h(F)-7
-b(rameSet.)227 2840 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fj(base)p Ft(")e Fj(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fj(curren)n(t)p Ft(")e Fj(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-2940 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 3039 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 3139 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 3239 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 3366
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fj(nativ)n(e)p Ft(")e Fj(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 3466
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fj(apparen)n(t)p Ft(")227 3565 y Fj(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 3665 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 3792 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 3892 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 3991 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 4118 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-4218 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fj(nativ)n(e)p Ft(")227 4318 y Fj(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fj(apparen)n(t)p Ft(")f Fj(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 4417 y(in)n(v)n(erted)h(\(see)
-g(astIn)n(v)n(ert\),)i(whic)n(h)f(has)e(the)i(e\013ect)g(of)g(in)n
-(terc)n(hanging)e(its)h(base)g(and)g(curren)n(t)g(F)-7
-b(rames)36 b(and)227 4517 y(hence)28 b(of)f(rev)n(ersing)f(the)i
-(Mapping)f(b)r(et)n(w)n(een)h(them.)227 4644 y(Regions)33
-b(ma)n(y)f(b)r(e)i(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33
-b(\(since)g(a)g(Region)g(is)g(a)g(t)n(yp)r(e)h(of)f(F)-7
-b(rame\),)35 b(either)e(explicitly)g(or)227 4744 y(as)e(comp)r(onen)n
-(ts)g(within)h(CmpF)-7 b(rames.)48 b(In)31 b(this)h(case)e(the)i
-(Mapping)f(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(F)-7 b(rames)31
-b(within)h(a)227 4843 y(F)-7 b(rameSet)35 b(will)g(include)g(the)h
-(e\013ects)f(of)g(the)g(clipping)g(pro)r(duced)g(b)n(y)f(an)n(y)h
-(Regions)f(included)h(in)g(the)g(path)227 4943 y(b)r(et)n(w)n(een)28
-b(the)g(F)-7 b(rames.)0 5098 y Fd(Synopsis:)121 b Ft(AstFrameSet)39
-b Fi(\003)p Ft(astFrameSet\()f(AstFrame)i Fi(\003)p Ft(frame,)h(const)g
-(char)h Fi(\003)p Ft(options,)e(...)86 b(\))0 5252 y
-Fd(P)m(arameters:)259 5394 y(frame)427 5494 y Fj(P)n(oin)n(ter)36
-b(to)h(the)g(\014rst)g(F)-7 b(rame)37 b(to)f(b)r(e)i(inserted)f(in)n
-(to)g(the)g(F)-7 b(rameSet.)65 b(This)37 b(initially)g(b)r(ecomes)g(b)r
-(oth)427 5593 y(the)g(base)f(and)h(the)g(curren)n(t)f(F)-7
-b(rame.)63 b(\(F)-7 b(urther)37 b(F)-7 b(rames)36 b(ma)n(y)g(b)r(e)h
-(added)g(using)f(the)h(astAddF)-7 b(rame)427 5693 y(function.\))p
-eop end
-%%Page: 233 243
-TeXDict begin 233 242 bop 3643 52 a FF(233)259 351 y
-Fd(options)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 551 y(assignmen)n(ts)22 b(to)i(b)r(e)g(used)f(for)g
-(initialising)g(the)h(new)g(F)-7 b(rameSet.)35 b(The)23
-b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)g(that)427
-650 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 882 y Fd(...)427 981 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1081 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1181 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1280 y Fj(function\).)0
-1441 y Fd(Returned)32 b(V)-8 b(alue:)259 1577 y(astF)g(rameSet\(\))427
-1677 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(F)-7
-b(rameSet.)0 1838 y Fd(Notes:)340 2119 y Fi(\017)45 b
-Fj(If)20 b(a)e(p)r(oin)n(ter)h(to)g(an)f(existing)h(F)-7
-b(rameSet)18 b(is)h(giv)n(en)f(for)h(the)g Ft(")p Fj(frame)p
-Ft(")f Fj(parameter,)h(then)h(the)f(new)g(F)-7 b(rameSet)427
-2219 y(will)28 b(\(as)f(a)g(sp)r(ecial)g(case\))g(b)r(e)h(initialised)f
-(to)g(con)n(tain)g(the)h(same)f(F)-7 b(rames)26 b(and)h(Mappings,)g
-(and)h(to)f(ha)n(v)n(e)427 2319 y(the)h(same)f(attribute)g(v)-5
-b(alues,)27 b(as)g(the)g(one)g(supplied.)37 b(This)27
-b(pro)r(cess)f(is)i(similar)e(to)h(making)g(a)f(cop)n(y)h(of)g(a)427
-2418 y(F)-7 b(rameSet)27 b(\(see)h(astCop)n(y\),)e(except)h(that)h(the)
-g(F)-7 b(rames)26 b(and)h(Mappings)g(con)n(tained)g(in)g(the)h
-(original)e(are)427 2518 y(not)i(themselv)n(es)f(copied,)g(but)h(are)f
-(shared)g(b)n(y)g(b)r(oth)h(F)-7 b(rameSets.)340 2650
-y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2750
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 2947 3780 12 v 0 3078 a Fz(astGenCurv)l(e)1245
-3079 y Fe(Dra)m(w)38 b(a)g(generalized)f(curv)m(e)3012
-3078 y Fz(astGenCurv)l(e)0 3266 y Fd(Description:)44
-b Fj(This)29 b(function)f(dra)n(ws)f(a)h(general)f(user-de\014ned)h
-(curv)n(e)f(de\014ned)i(b)n(y)f(the)g(supplied)h(Mapping.)39
-b(Note)227 3366 y(that)25 b(the)g(curv)n(e)f(is)g(transformed)g(in)n
-(to)g(graphical)f(co)r(ordinate)h(space)g(for)g(plotting,)h(so)f(that)h
-(a)f(straigh)n(t)f(line)i(in)227 3465 y(ph)n(ysical)f(co)r(ordinates)f
-(ma)n(y)g(result)h(in)h(a)f(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e
-(if)i(the)g(Mapping)f(in)n(v)n(olv)n(ed)f(is)h(non-linear.)227
-3565 y(An)n(y)j(discon)n(tin)n(uities)f(in)h(the)f(Mapping)h(b)r(et)n
-(w)n(een)f(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(are)g
-(catered)h(for,)g(as)227 3665 y(is)i(an)n(y)f(clipping)g(established)g
-(using)h(astClip.)227 3789 y(If)37 b(y)n(ou)e(need)g(to)h(dra)n(w)f
-(simple)h(straigh)n(t)e(lines)i(\(geo)r(desics\),)h(astCurv)n(e)e(or)g
-(astP)n(olyCurv)n(e)e(will)j(usually)f(b)r(e)227 3888
-y(easier)27 b(to)g(use)g(and)h(faster.)0 4037 y Fd(Synopsis:)121
-b Ft(void)42 b(astGenCurve\()c(AstPlot)j Fi(\003)p Ft(this,)g
-(astMapping)f Fi(\003)p Ft(map)h(\))0 4186 y Fd(P)m(arameters:)259
-4321 y(this)427 4421 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-4553 y Fd(map)427 4652 y Fj(P)n(oin)n(ter)21 b(to)h(a)g(Mapping.)35
-b(This)22 b(Mapping)g(should)g(ha)n(v)n(e)f(1)h(input)i(co)r(ordinate)d
-(represen)n(ting)g(o\013set)h(along)427 4752 y(the)31
-b(required)d(curv)n(e,)i(normalized)f(so)g(that)h(the)g(start)g(of)f
-(the)i(curv)n(e)e(is)g(at)h(o\013set)g(0.0,)g(and)f(the)i(end)f(of)427
-4852 y(the)j(curv)n(e)f(is)g(at)h(o\013set)g(1.0.)51
-b(Note,)34 b(this)f(o\013set)f(do)r(es)h(not)f(need)h(to)g(b)r(e)g
-(linearly)e(related)h(to)h(distance)427 4951 y(along)c(the)h(curv)n(e.)
-42 b(The)30 b(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates)f(should)g
-(equal)g(the)h(n)n(um)n(b)r(er)g(of)f(axes)g(in)h(the)427
-5051 y(curren)n(t)e(F)-7 b(rame)28 b(of)h(the)g(Plot.)39
-b(The)29 b(Mapping)f(should)g(map)h(a)f(sp)r(eci\014ed)h(o\013set)f
-(along)g(the)h(curv)n(e,)f(in)n(to)427 5151 y(the)h(corresp)r(onding)e
-(co)r(ordinates)g(in)i(the)h(curren)n(t)d(F)-7 b(rame)29
-b(of)f(the)h(Plot.)40 b(The)29 b(in)n(v)n(erse)e(transformation)427
-5250 y(need)h(not)g(b)r(e)g(de\014ned.)0 5411 y Fd(Notes:)340
-5693 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7
-b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)p
-eop end
-%%Page: 234 244
-TeXDict begin 234 243 bop 0 52 a FF(234)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g(transformation)f(b)r
-(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)-7
-b(rames)28 b(of)h(the)g(Plot)427 451 y(is)f(not)f(de\014ned)h(\(i.e.)38
-b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26 b(attribute)h(is)h
-(zero\).)p 0 677 3780 12 v 0 808 a Fz(astGet)p Fc(<)p
-Fz(X)p Fc(>)951 809 y Fe(Get)39 b(an)f(attribute)f(v)-7
-b(alue)38 b(for)g(an)g(Ob)7 b(ject)3106 808 y Fz(astGet)p
-Fc(<)p Fz(X)p Fc(>)0 1025 y Fd(Description:)44 b Fj(This)29
-b(is)f(a)g(family)g(of)h(functions)f(whic)n(h)h(return)f(a)f(sp)r
-(eci\014ed)i(attribute)g(v)-5 b(alue)28 b(for)g(an)g(Ob)5
-b(ject)28 b(using)227 1124 y(one)j(of)g(sev)n(eral)f(di\013eren)n(t)h
-(data)g(t)n(yp)r(es.)47 b(The)32 b(t)n(yp)r(e)f(is)g(selected)g(b)n(y)g
-(replacing)f Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(function)g(name)227
-1224 y(b)n(y)27 b(C,)f(D,)h(F,)g(I)g(or)f(L,)g(to)h(obtain)f(a)g
-(result)h(in)g(const)f(c)n(har)p Fi(\003)f Fj(\(i.e.)37
-b(string\),)26 b(double,)h(\015oat,)f(in)n(t,)h(or)f(long)g(format,)227
-1324 y(resp)r(ectiv)n(ely)-7 b(.)227 1462 y(If)30 b(p)r(ossible,)f(the)
-h(attribute)g(v)-5 b(alue)29 b(is)g(con)n(v)n(erted)f(to)h(the)g(t)n
-(yp)r(e)h(y)n(ou)e(request.)42 b(If)29 b(con)n(v)n(ersion)e(is)j(not)f
-(p)r(ossible,)227 1561 y(an)f(error)d(will)j(result.)0
-1738 y Fd(Synopsis:)121 b Fl(<)p Ft(X)p Fl(>)p Ft(type)41
-b(astGet)p Fl(<)p Ft(X)p Fl(>)p Ft(\()e(AstObject)h Fi(\003)p
-Ft(this,)h(const)g(char)h Fi(\003)p Ft(attrib)f(\))0
-1914 y Fd(P)m(arameters:)259 2078 y(this)427 2177 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject.)259 2324 y Fd(attrib)427 2423
-y Fj(P)n(oin)n(ter)31 b(to)i(a)f(n)n(ull-terminated)g(string)g(con)n
-(taining)f(the)i(name)g(of)f(the)h(attribute)g(whose)f(v)-5
-b(alue)32 b(is)g(re-)427 2523 y(quired.)0 2712 y Fd(Class)f
-(Applicabilit)m(y:)259 2875 y(Ob)5 b(ject)427 2975 y
-Fj(These)28 b(functions)f(apply)h(to)f(all)h(Ob)5 b(jects.)0
-3164 y Fd(Returned)32 b(V)-8 b(alue:)259 3327 y(astGet)p
-Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427 3427 y Fj(The)32 b(attribute)f(v)-5
-b(alue,)33 b(in)e(the)h(data)f(t)n(yp)r(e)h(corresp)r(onding)d(to)i
-Fl(<)p Fj(X)p Fl(>)g Fj(\(or,)h(in)g(the)g(case)e(of)i(astGetC,)f(a)427
-3527 y(p)r(oin)n(ter)c(to)h(a)f(constan)n(t)g(n)n(ull-terminated)g(c)n
-(haracter)f(string)h(con)n(taining)f(this)i(v)-5 b(alue\).)0
-3716 y Fd(Examples:)227 3879 y Fq(printf\()46 b Ft(")p
-Fq(RefCount)f(=)j(\045d)p Fi(n)p Fq(n)p Ft(")p Fq(,)d(astGetI\()h(z,)h
-Ft(")p Fq(RefCount)p Ft(")e Fq(\))i(\);)427 3979 y Fj(Prin)n(ts)27
-b(the)h(RefCoun)n(t)g(attribute)f(v)-5 b(alue)28 b(for)f(Ob)5
-b(ject)27 b Ft(")p Fj(z)p Ft(")g Fj(as)g(an)g(in)n(t.)227
-4129 y Fq(title)47 b(=)g(astGetC\()f(axis,)g Ft(")p Fq(Title)p
-Ft(")g Fq(\);)427 4225 y Fj(Obtains)41 b(a)f(p)r(oin)n(ter)g(to)h(a)f
-(n)n(ull-terminated)h(c)n(haracter)e(string)h(con)n(taining)f(the)j
-(Title)f(attribute)g(of)427 4324 y(Ob)5 b(ject)28 b Ft(")p
-Fj(axis)p Ft(")p Fj(.)0 4513 y Fd(Notes:)340 4823 y Fi(\017)45
-b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f(sensitiv)n(e)g(and)g
-(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g(space.)340
-4969 y Fi(\017)45 b Fj(An)31 b(appropriate)e Ft(")p Fj(n)n(ull)p
-Ft(")h Fj(v)-5 b(alue)30 b(will)h(b)r(e)g(returned)f(if)h(this)f
-(function)h(is)g(in)n(v)n(ok)n(ed)e(with)i(the)g(AST)g(error)427
-5069 y(status)g(set,)g(or)f(if)h(it)h(should)e(fail)h(for)f(an)n(y)g
-(reason.)45 b(This)30 b(n)n(ull)h(v)-5 b(alue)31 b(is)f(zero)g(for)g(n)
-n(umeric)g(v)-5 b(alues)31 b(and)427 5168 y(NULL)d(for)f(p)r(oin)n(ter)
-h(v)-5 b(alues.)340 5315 y Fi(\017)45 b Fj(The)34 b(p)r(oin)n(ter)f
-(returned)g(b)n(y)h(astGetC)f(is)h(guaran)n(teed)e(to)h(remain)g(v)-5
-b(alid)34 b(and)f(the)h(string)f(to)h(whic)n(h)f(it)427
-5414 y(p)r(oin)n(ts)27 b(will)h(not)f(b)r(e)h(o)n(v)n(er-written)d(for)
-i(a)g(total)g(of)g(50)f(successiv)n(e)g(in)n(v)n(o)r(cations)g(of)h
-(this)h(function.)37 b(After)427 5514 y(this,)h(the)e(memory)f(con)n
-(taining)f(the)i(string)f(ma)n(y)g(b)r(e)h(re-used,)h(so)e(a)g(cop)n(y)
-g(of)g(the)h(string)f(should)g(b)r(e)427 5614 y(made)28
-b(if)g(it)g(is)f(needed)h(for)f(longer)f(than)i(this.)p
-eop end
-%%Page: 235 245
-TeXDict begin 235 244 bop 3643 52 a FF(235)p 0 351 3780
-12 v 0 483 a Fz(astGetActiv)l(eUnit)208 b Fe(Determines)38
-b(ho)m(w)g(the)g(Unit)1338 583 y(attribute)f(will)g(b)s(e)i(used)2742
-483 y Fz(astGetActiv)l(eUnit)0 743 y Fd(Description:)44
-b Fj(This)d(function)h(returns)e(the)i(curren)n(t)e(v)-5
-b(alue)40 b(of)h(the)h(Activ)n(eUnit)g(\015ag)e(for)g(a)h(F)-7
-b(rame.)76 b(See)41 b(the)227 842 y(description)27 b(of)h(the)g
-(astSetActiv)n(eUnit)g(function)g(for)f(a)g(description)g(of)h(the)g
-(Activ)n(eUnit)g(\015ag.)0 989 y Fd(Synopsis:)121 b Ft(int)42
-b(astGetActiveUnit\()37 b(AstFrame)j Fi(\003)p Ft(this)h(\))0
-1135 y Fd(P)m(arameters:)259 1269 y(this)427 1369 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)0 1528 y Fd(Returned)32 b(V)-8
-b(alue:)259 1661 y(astGetActiv)m(eUnit)427 1761 y Fj(The)28
-b(curren)n(t)f(v)-5 b(alue)27 b(of)h(the)g(Activ)n(eUnit)g(\015ag.)0
-1920 y Fd(Notes:)340 2200 y Fi(\017)45 b Fj(A)30 b(zero)f(v)-5
-b(alue)29 b(will)h(b)r(e)g(returned)f(if)h(this)g(function)g(is)g(in)n
-(v)n(ok)n(ed)e(with)i(the)g(AST)g(error)e(status)h(set,)h(or)f(if)427
-2300 y(it)f(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 2493 V 0 2625 a Fz(astGetFits)p Fc(<)p Fz(X)p Fc(>)276
-b Fe(Get)38 b(a)h(named)f(k)m(eyw)m(ord)f(v)-7 b(alue)1466
-2739 y(from)37 b(a)i(FitsChan)2878 2625 y Fz(astGetFits)p
-Fc(<)p Fz(X)p Fc(>)0 2899 y Fd(Description:)44 b Fj(This)21
-b(is)f(a)g(family)g(of)g(functions)h(whic)n(h)f(gets)g(a)g(v)-5
-b(alue)20 b(for)g(a)g(named)g(k)n(eyw)n(ord)f(from)h(a)g(FitsChan)g
-(using)227 2999 y(one)33 b(of)f(sev)n(eral)f(di\013eren)n(t)i(data)f(t)
-n(yp)r(es.)53 b(The)32 b(data)h(t)n(yp)r(e)f(of)h(the)g(returned)g(v)-5
-b(alue)32 b(is)h(selected)f(b)n(y)h(replacing)227 3099
-y Fl(<)p Fj(X)p Fl(>)c Fj(in)h(the)g(function)g(name)f(b)n(y)h(one)f
-(of)g(the)h(follo)n(wing)f(strings)f(represen)n(ting)g(the)i
-(recognised)e(FITS)i(data)227 3198 y(t)n(yp)r(es:)227
-3321 y(The)f(data)e(t)n(yp)r(e)i(of)f(the)h(returned)f(v)-5
-b(alue)28 b(is)g(selected)g(b)n(y)g(replacing)g Fl(<)p
-Fj(X)p Fl(>)f Fj(in)i(the)g(function)g(name)f(b)n(y)g(one)g(of)227
-3421 y(the)g(follo)n(wing)f(strings)f(represen)n(ting)h(the)h
-(recognised)d(FITS)j(data)g(t)n(yp)r(es:)340 3678 y Fi(\017)45
-b Fj(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 3808 y Fi(\017)45 b Fj(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 3938 y Fi(\017)45 b Fj(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 4068 y Fi(\017)45 b Fj(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 4198 y Fi(\017)45
-b Fj(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)340 4328 y Fi(\017)45 b Fj(S)28 b(-)f(String)h(v)-5
-b(alues.)340 4458 y Fi(\017)45 b Fj(CN)32 b(-)g(A)g Ft(")p
-Fj(CONTINUE)p Ft(")e Fj(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n
-(e)g(string)g(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-4558 y(an)d(equals)e(sign.)227 4717 y(The)i(data)f(t)n(yp)r(e)h(of)f
-(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(parameter)f(dep)r(ends)i
-(on)f Fl(<)p Fj(X)p Fl(>)h Fj(as)e(follo)n(ws:)340 4974
-y Fi(\017)45 b Fj(CF)29 b(-)f Ft(")p Fj(double)g Fi(\003)p
-Ft(")f Fj(\(a)i(p)r(oin)n(ter)f(to)g(a)g(2)g(elemen)n(t)g(arra)n(y)e
-(to)j(hold)f(the)h(real)e(and)h(imaginary)f(parts)h(of)g(the)427
-5073 y(complex)f(v)-5 b(alue\).)340 5203 y Fi(\017)45
-b Fj(CI)37 b(-)g Ft(")p Fj(in)n(t)g Fi(\003)p Ft(")f
-Fj(\(a)h(p)r(oin)n(ter)g(to)g(a)f(2)h(elemen)n(t)g(arra)n(y)e(to)i
-(hold)g(the)g(real)g(and)f(imaginary)g(parts)g(of)h(the)427
-5303 y(complex)27 b(v)-5 b(alue\).)340 5433 y Fi(\017)45
-b Fj(F)28 b(-)f Ft(")p Fj(double)h Fi(\003)p Ft(")p Fj(.)340
-5563 y Fi(\017)45 b Fj(I)28 b(-)f Ft(")p Fj(in)n(t)h
-Fi(\003)p Ft(")p Fj(.)340 5693 y Fi(\017)45 b Fj(L)28
-b(-)f Ft(")p Fj(in)n(t)h Fi(\003)p Ft(")p Fj(.)p eop
-end
-%%Page: 236 246
-TeXDict begin 236 245 bop 0 52 a FF(236)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(S)20 b(-)f Ft(")p Fj(c)n(har)e Fi(\003\003)p Ft(")h
-Fj(\(a)h(p)r(oin)n(ter)g(to)g(a)g(static)g Ft(")p Fj(c)n(har)p
-Ft(")e Fj(arra)n(y)g(is)i(returned)g(at)g(the)h(lo)r(cation)f(giv)n(en)
-f(b)n(y)h(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")427 451
-y Fj(parameter,)29 b(Note,)h(the)g(stored)f(string)g(ma)n(y)g(c)n
-(hange)f(on)h(subsequen)n(t)h(in)n(v)n(o)r(cations)e(of)h(astGetFitsS)h
-(so)427 551 y(a)d(p)r(ermanen)n(t)h(cop)n(y)f(should)g(b)r(e)h(tak)n
-(en)f(of)g(the)h(string)f(if)h(necessary\).)340 710 y
-Fi(\017)45 b Fj(CN)28 b(-)g(Lik)n(e)p Ft(")p Fj(S)p Ft(")p
-Fj(.)0 925 y Fd(Synopsis:)121 b Ft(int)42 b(astGetFits)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstFitsChan)h Fi(\003)p
-Ft(this,)i(const)h(char)f Fi(\003)p Ft(name,)h Fl(<)p
-Ft(X)p Fl(>)p Ft(type)e Fi(\003)p Ft(value)h(\))0 1128
-y Fd(P)m(arameters:)259 1317 y(this)427 1417 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 1576 y Fd(name)427 1676 y
-Fj(P)n(oin)n(ter)f(to)i(a)f(n)n(ull-terminated)h(c)n(haracter)d(string)
-i(con)n(taining)g(the)h(FITS)g(k)n(eyw)n(ord)e(name.)40
-b(This)28 b(ma)n(y)427 1776 y(b)r(e)i(a)f(complete)g(FITS)h(header)f
-(card,)g(in)g(whic)n(h)h(case)e(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g
-(extracted)g(from)g(it.)43 b(No)427 1875 y(more)27 b(than)h(80)e(c)n
-(haracters)g(are)g(read)h(from)g(this)h(string.)259 2035
-y Fd(v)-5 b(alue)427 2134 y Fj(A)39 b(p)r(oin)n(ter)g(to)f(a)h
-(bu\013er)f(to)h(receiv)n(e)f(the)h(k)n(eyw)n(ord)d(v)-5
-b(alue.)71 b(The)38 b(data)h(t)n(yp)r(e)f(dep)r(ends)i(on)e
-Fl(<)p Fj(X)p Fl(>)g Fj(as)427 2234 y(describ)r(ed)28
-b(ab)r(o)n(v)n(e.)0 2449 y Fd(Returned)k(V)-8 b(alue:)259
-2639 y(astGetFits)p Fl(<)p Fd(X)p Fl(><)p Fd(X)p Fl(>)p
-Fd(\(\))427 2738 y Fj(A)21 b(v)-5 b(alue)20 b(of)g(zero)g(is)g
-(returned)g(if)h(the)f(k)n(eyw)n(ord)f(w)n(as)g(not)i(found)f(in)h(the)
-g(FitsChan)f(\(no)g(error)f(is)h(rep)r(orted\).)427 2838
-y(Otherwise,)27 b(a)g(v)-5 b(alue)28 b(of)f(one)g(is)h(returned.)0
-3053 y Fd(Notes:)340 3389 y Fi(\017)45 b Fj(The)27 b(card)e(follo)n
-(wing)h(the)h(curren)n(t)e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37
-b(If)27 b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-3488 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 3588 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 3687 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 3847 y Fi(\017)45
-b Fj(If)28 b(the)f(requested)f(card)g(is)h(found,)h(it)f(b)r(ecomes)g
-(the)g(curren)n(t)f(card,)g(otherwise)h(the)g(curren)n(t)f(card)g(is)h
-(left)427 3947 y(p)r(oin)n(ting)h(at)f(the)h Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(.)340 4106 y Fi(\017)45 b Fj(If)34 b(the)f(stored)f(k)n(eyw)n
-(ord)f(v)-5 b(alue)33 b(is)f(not)h(of)g(the)g(requested)f(t)n(yp)r(e,)j
-(it)e(is)g(con)n(v)n(erted)e(in)n(to)i(the)g(requested)427
-4206 y(t)n(yp)r(e.)340 4365 y Fi(\017)45 b Fj(If)33 b(the)f(k)n(eyw)n
-(ord)f(is)h(found)g(in)g(the)h(FitsChan,)g(but)g(has)f(no)f(asso)r
-(ciated)g(v)-5 b(alue,)33 b(an)f(error)e(is)i(rep)r(orted.)427
-4465 y(If)e(necessary)-7 b(,)27 b(the)i(astT)-7 b(estFits)29
-b(function)h(can)e(b)r(e)h(used)g(to)g(determine)g(if)g(the)g(k)n(eyw)n
-(ord)e(has)i(a)f(de\014ned)427 4564 y(v)-5 b(alue)28
-b(in)g(the)g(FitsChan)f(prior)g(to)g(calling)g(this)h(function.)340
-4724 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(k)n(eyw)n(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g
-(requiremen)n(ts.)340 4883 y Fi(\017)45 b Fj(Zero)340
-5043 y Fi(\017)g Fj(.F)-9 b(ALSE.)26 b(is)g(returned)g(as)f(the)i
-(function)f(v)-5 b(alue)26 b(if)h(an)f(error)e(has)h(already)g(o)r
-(ccurred,)g(or)g(if)i(this)f(function)427 5142 y(should)i(fail)f(for)g
-(an)n(y)g(reason.)340 5302 y Fi(\017)45 b Fj(The)34 b(FITS)g(standard)e
-(sa)n(ys)g(that)i(string)f(k)n(eyw)n(ord)e(v)-5 b(alues)33
-b(should)h(b)r(e)f(padded)h(with)g(trailing)f(spaces)427
-5401 y(if)f(they)f(are)f(shorter)g(than)h(8)g(c)n(haracters.)45
-b(F)-7 b(or)30 b(this)h(reason,)g(trailing)f(spaces)g(are)g(remo)n(v)n
-(ed)g(from)g(the)427 5501 y(string)f(returned)h(b)n(y)f(astGetFitsS)i
-(if)f(the)g(original)f(string)g(\(including)h(an)n(y)f(trailing)g
-(spaces\))h(con)n(tains)427 5600 y(8)d(or)g(few)n(er)g(c)n(haracters.)
-35 b(T)-7 b(railing)26 b(spaces)h(are)g(not)g(remo)n(v)n(ed)f(from)h
-(longer)g(strings.)p eop end
-%%Page: 237 247
-TeXDict begin 237 246 bop 3643 52 a FF(237)p 0 351 3780
-12 v 0 482 a Fz(astGetF)-11 b(rame)925 483 y Fe(Obtain)37
-b(a)i(p)s(oin)m(ter)e(to)h(a)h(sp)s(eci\014ed)g(F)-10
-b(rame)1531 596 y(in)39 b(a)f(F)-10 b(rameSet)3022 482
-y Fz(astGetF)f(rame)0 800 y Fd(Description:)44 b Fj(This)28
-b(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)h(F)
--7 b(rame)27 b(in)h(a)f(F)-7 b(rameSet.)0 988 y Fd(Synopsis:)121
-b Ft(AstFrame)40 b Fi(\003)p Ft(astGetFrame\()e(AstFrameSet)h
-Fi(\003)p Ft(this,)i(int)i(iframe)e(\))0 1175 y Fd(P)m(arameters:)259
-1350 y(this)427 1449 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rameSet.)259 1601 y Fd(iframe)427 1701 y Fj(The)35
-b(index)g(of)f(the)h(required)f(F)-7 b(rame)34 b(within)h(the)g(F)-7
-b(rameSet.)58 b(This)35 b(v)-5 b(alue)34 b(should)g(lie)h(in)g(the)g
-(range)427 1801 y(from)28 b(1)f(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)g(giv)n(en)g(b)n(y)g
-(its)h(Nframe)g(attribute\).)0 2001 y Fd(Returned)k(V)-8
-b(alue:)259 2175 y(astGetF)g(rame\(\))427 2275 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(requested)f(F)-7 b(rame.)0
-2475 y Fd(Notes:)340 2796 y Fi(\017)45 b Fj(A)32 b(v)-5
-b(alue)30 b(of)h(AST)p Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p
-Fj(CURRENT)h(ma)n(y)f(b)r(e)h(giv)n(en)g(for)f(the)h
-Ft(")p Fj(iframe)p Ft(")f Fj(parameter)g(to)427 2895
-y(sp)r(ecify)e(the)g(base)f(F)-7 b(rame)27 b(or)g(the)h(curren)n(t)f(F)
--7 b(rame)27 b(resp)r(ectiv)n(ely)-7 b(.)340 3047 y Fi(\017)45
-b Fj(This)28 b(function)g(incremen)n(ts)f(the)h(RefCoun)n(t)g
-(attribute)g(of)f(the)h(selected)g(F)-7 b(rame)27 b(b)n(y)g(one.)340
-3199 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-3299 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 3536 V 0 3668 a Fz(astGetGrfCon)l(text)183
-b Fe(Return)38 b(the)h(KeyMap)g(that)1216 3782 y(describ)s(es)e(a)f
-(Plot's)f(graphics)1701 3882 y(con)m(text)2715 3668 y
-Fz(astGetGrfCon)l(text)0 4086 y Fd(Description:)44 b
-Fj(This)20 b(function)g(returns)f(a)h(reference)f(to)g(a)g(KeyMap)g
-(that)h(will)g(b)r(e)g(passed)f(to)h(an)n(y)f(dra)n(wing)f(functions)
-227 4185 y(registered)24 b(using)g(astGrfSet.)36 b(This)25
-b(KeyMap)f(can)h(b)r(e)g(used)g(b)n(y)f(an)h(application)f(to)h(pass)f
-(information)g(to)h(the)227 4285 y(dra)n(wing)i(functions)h(ab)r(out)g
-(the)g(con)n(text)g(in)g(whic)n(h)g(they)g(are)f(b)r(eing)h(called.)38
-b(The)28 b(con)n(ten)n(ts)f(of)h(the)h(KeyMap)227 4385
-y(are)e(nev)n(er)f(accessed)h(b)n(yt)g(the)h(Plot)g(class)e(itself.)0
-4572 y Fd(Synopsis:)121 b Ft(AstKeyMap)40 b Fi(\003)p
-Ft(astGetGrfConte)o(xt\()d(AstPlot)j Fi(\003)p Ft(this)i(\))0
-4760 y Fd(P)m(arameters:)259 4934 y(this)427 5034 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)0 5234 y Fd(Returned)k(V)-8 b(alue:)259
-5409 y(astGetGrfCon)m(text\(\))427 5508 y Fj(A)31 b(p)r(oin)n(ter)f(to)
-h(the)g(graphics)e(con)n(text)h(KeyMap.)45 b(The)31 b(returned)f(p)r
-(oin)n(ter)h(should)f(b)r(e)h(ann)n(ulled)f(when)427
-5608 y(it)e(is)g(no)f(longer)f(needed.)p eop end
-%%Page: 238 248
-TeXDict begin 238 247 bop 0 52 a FF(238)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astGetMapping)153 b Fe(Obtain)36 b(a)h(Mapping)f(that)g(con)
-m(v)m(erts)1253 598 y(b)s(et)m(w)m(een)i(t)m(w)m(o)f(F)-10
-b(rames)38 b(in)h(a)1648 697 y(F)-10 b(rameSet)2868 483
-y Fz(astGetMapping)0 861 y Fd(Description:)44 b Fj(This)31
-b(function)h(returns)e(a)h(p)r(oin)n(ter)f(to)h(a)g(Mapping)g(that)g
-(will)g(con)n(v)n(ert)f(co)r(ordinates)f(b)r(et)n(w)n(een)i(the)227
-961 y(co)r(ordinate)c(systems)g(represen)n(ted)f(b)n(y)i(t)n(w)n(o)e(F)
--7 b(rames)27 b(in)h(a)f(F)-7 b(rameSet.)0 1109 y Fd(Synopsis:)121
-b Ft(AstMapping)39 b Fi(\003)p Ft(astGetMapping\()f(AstFrameSet)h
-Fi(\003)p Ft(this,)i(int)h(iframe1,)e(int)j(iframe2)d(\))0
-1258 y Fd(P)m(arameters:)259 1394 y(this)427 1493 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 1625 y Fd(iframe1)427
-1725 y Fj(The)31 b(index)g(of)g(the)h(\014rst)e(F)-7
-b(rame)31 b(in)g(the)g(F)-7 b(rameSet.)47 b(This)31 b(F)-7
-b(rame)30 b(describ)r(es)h(the)g(co)r(ordinate)f(system)427
-1824 y(for)d(the)h Ft(")p Fj(input)p Ft(")g Fj(end)g(of)f(the)h
-(Mapping.)259 1956 y Fd(iframe2)427 2056 y Fj(The)d(index)f(of)h(the)f
-(second)g(F)-7 b(rame)24 b(in)h(the)f(F)-7 b(rameSet.)36
-b(This)24 b(F)-7 b(rame)24 b(describ)r(es)g(the)h(co)r(ordinate)e
-(system)427 2156 y(for)k(the)h Ft(")p Fj(output)p Ft(")g
-Fj(end)f(of)h(the)g(Mapping.)0 2317 y Fd(Returned)k(V)-8
-b(alue:)259 2452 y(astGetMapping\(\))427 2552 y Fj(P)n(oin)n(ter)30
-b(to)h(a)f(Mapping)h(whose)g(forw)n(ard)e(transformation)g(con)n(v)n
-(erts)h(co)r(ordinates)f(from)i(the)h(\014rst)e(co-)427
-2652 y(ordinate)25 b(system)h(to)f(the)h(second)f(one,)h(and)g(whose)f
-(in)n(v)n(erse)f(transformation)g(con)n(v)n(erts)g(co)r(ordinates)g(in)
-427 2751 y(the)k(opp)r(osite)f(direction.)0 2912 y Fd(Notes:)340
-3194 y Fi(\017)45 b Fj(The)23 b(returned)g(Mapping)f(will)h(include)h
-(the)f(clipping)g(e\013ect)g(of)g(an)n(y)f(Regions)g(whic)n(h)h(o)r
-(ccur)g(on)f(the)h(path)427 3294 y(b)r(et)n(w)n(een)28
-b(the)g(t)n(w)n(o)f(supplied)h(F)-7 b(rames)26 b(\(this)j(includes)e
-(the)h(t)n(w)n(o)f(supplied)h(F)-7 b(rames)27 b(themselv)n(es\).)340
-3426 y Fi(\017)45 b Fj(The)33 b(v)-5 b(alues)33 b(giv)n(en)g(for)f(the)
-i Ft(")p Fj(iframe1)p Ft(")d Fj(and)i Ft(")p Fj(iframe2)p
-Ft(")f Fj(parameters)f(should)i(lie)g(in)h(the)f(range)f(from)427
-3525 y(1)g(to)f(the)h(n)n(um)n(b)r(er)g(of)g(F)-7 b(rames)31
-b(in)h(the)g(F)-7 b(rameSet)32 b(\(as)f(giv)n(en)g(b)n(y)g(its)h
-(Nframe)g(attribute\).)50 b(A)32 b(v)-5 b(alue)32 b(of)427
-3625 y(AST)p Ft(__)p Fj(BASE)25 b(or)g(AST)p Ft(__)p
-Fj(CURRENT)g(ma)n(y)g(also)g(b)r(e)h(giv)n(en)e(to)i(iden)n(tify)g(the)
-g(F)-7 b(rameSet's)25 b(base)g(F)-7 b(rame)427 3725 y(or)30
-b(curren)n(t)f(F)-7 b(rame)29 b(resp)r(ectiv)n(ely)-7
-b(.)44 b(It)31 b(is)f(p)r(ermissible)g(for)f(b)r(oth)i(these)f
-(parameters)f(to)h(ha)n(v)n(e)f(the)h(same)427 3824 y(v)-5
-b(alue,)28 b(in)g(whic)n(h)f(case)g(a)g(unit)h(Mapping)g(\(UnitMap\))g
-(is)g(returned.)340 3956 y Fi(\017)45 b Fj(It)36 b(should)f(alw)n(a)n
-(ys)e(b)r(e)j(p)r(ossible)e(to)h(generate)f(the)i(Mapping)f(requested,)
-h(but)g(this)f(do)r(es)g(necessarily)427 4056 y(guaran)n(tee)d(that)j
-(it)f(will)g(b)r(e)g(able)g(to)g(p)r(erform)f(the)i(required)e(co)r
-(ordinate)f(con)n(v)n(ersion.)54 b(If)34 b(necessary)-7
-b(,)427 4155 y(the)26 b(T)-7 b(ranF)g(orw)n(ard)22 b(and)j(T)-7
-b(ranIn)n(v)n(erse)23 b(attributes)h(of)h(the)h(returned)e(Mapping)h
-(should)g(b)r(e)g(insp)r(ected)h(to)427 4255 y(determine)i(if)g(the)g
-(required)f(transformation)f(is)h(a)n(v)-5 b(ailable.)340
-4387 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-4487 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 4684 V 0 4816 a Fz(astGetRefP)l(os)225
-b Fe(Return)38 b(the)h(reference)f(p)s(osition)f(in)h(a)970
-4931 y(sp)s(eci\014ed)h(celestial)e(co)s(ordinate)f(system)2978
-4816 y Fz(astGetRefP)l(os)0 5122 y Fd(Description:)44
-b Fj(This)30 b(function)g(returns)f(the)h(reference)f(p)r(osition)g
-(\(sp)r(eci\014ed)i(b)n(y)e(attributes)h(RefRA)g(and)g(RefDec\))227
-5222 y(con)n(v)n(erted)k(to)g(the)i(celestial)e(co)r(ordinate)g(system)
-g(represen)n(ted)g(b)n(y)h(a)f(supplied)h(SkyF)-7 b(rame.)58
-b(The)35 b(celestial)227 5322 y(longitude)28 b(and)f(latitude)h(v)-5
-b(alues)27 b(are)g(returned)g(in)h(radians.)0 5470 y
-Fd(Synopsis:)121 b Ft(void)42 b(astGetRefPos\()c(AstSpecFrame)h
-Fi(\003)p Ft(this,)i(AstSkyFrame)e Fi(\003)p Ft(frm,)i(double)g
-Fi(\003)p Ft(lon,)h(double)227 5570 y Fi(\003)p Ft(lat)g(\))0
-5718 y Fd(P)m(arameters:)p eop end
-%%Page: 239 249
-TeXDict begin 239 248 bop 3643 52 a FF(239)259 351 y
-Fd(this)427 451 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)259 593 y Fd(frm)427 692 y Fj(P)n(oin)n(ter)34
-b(to)h(the)h(SkyF)-7 b(rame)34 b(whic)n(h)h(de\014nes)g(the)h(required)
-e(celestial)h(co)r(ordinate)f(system.)60 b(If)35 b(NULL)427
-792 y(is)c(supplied,)h(then)g(the)f(longitude)g(and)g(latitude)g(v)-5
-b(alues)31 b(are)f(returned)h(as)f(FK5)g(J2000)f(RA)i(and)g(Dec)427
-892 y(v)-5 b(alues.)259 1033 y Fd(lon)427 1133 y Fj(A)25
-b(p)r(oin)n(ter)f(to)g(a)g(double)g(in)h(whic)n(h)f(to)g(store)f(the)i
-(longitude)f(of)g(the)h(reference)e(p)r(oin)n(t,)j(in)e(the)h(co)r
-(ordinate)427 1233 y(system)j(represen)n(ted)e(b)n(y)h(the)h(supplied)g
-(SkyF)-7 b(rame)27 b(\(radians\).)259 1375 y Fd(lat)427
-1474 y Fj(A)h(p)r(oin)n(ter)f(to)h(a)f(double)h(in)f(whic)n(h)h(to)f
-(store)g(the)h(latitude)g(of)f(the)h(reference)f(p)r(oin)n(t,)h(in)g
-(the)g(co)r(ordinate)427 1574 y(system)g(represen)n(ted)e(b)n(y)h(the)h
-(supplied)g(SkyF)-7 b(rame)27 b(\(radians\).)0 1754 y
-Fd(Notes:)340 2054 y Fi(\017)45 b Fj(V)-7 b(alues)29
-b(of)g(AST)p Ft(__)p Fj(BAD)g(will)g(b)r(e)h(returned)e(if)i(this)f
-(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(AST)h(error)d(status)
-427 2154 y(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 2371 3780 12 v 0 2503 a Fz(astGetRegionBounds)349
-b Fe(Returns)39 b(the)1472 2603 y(b)s(ounding)f(b)s(o)m(x)g(of)1713
-2716 y(Region)2541 2503 y Fz(astGetRegionBounds)0 2923
-y Fd(Description:)44 b Fj(This)36 b(function)g(returns)f(the)i(upp)r
-(er)f(and)f(lo)n(w)n(er)f(limits)j(of)e(a)h(b)r(o)n(x)f(whic)n(h)h
-(just)g(encompasses)e(the)227 3022 y(supplied)40 b(Region.)72
-b(The)40 b(limits)f(are)g(returned)g(as)g(axis)g(v)-5
-b(alues)39 b(within)h(the)g(F)-7 b(rame)39 b(represen)n(ted)f(b)n(y)h
-(the)227 3122 y(Region.)g(The)29 b(v)-5 b(alue)29 b(of)f(the)h(Negated)
-f(attribute)h(is)g(ignored)e(\(i.e.)40 b(it)29 b(is)g(assumed)f(that)h
-(the)g(Region)f(has)g(not)227 3222 y(b)r(een)g(negated\).)0
-3389 y Fd(Synopsis:)121 b Ft(void)42 b(astGetRegionBoun)o(ds)o(\()c
-(AstRegion)h Fi(\003)p Ft(this,)i(double)h Fi(\003)p
-Ft(lbnd,)f(double)g Fi(\003)p Ft(ubnd)g(\))0 3557 y Fd(P)m(arameters:)
-259 3711 y(this)427 3811 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-3953 y Fd(lbnd)427 4052 y Fj(P)n(oin)n(ter)22 b(to)h(an)g(arra)n(y)d
-(in)k(whic)n(h)f(to)g(return)f(the)i(lo)n(w)n(er)d(axis)i(b)r(ounds)g
-(co)n(v)n(ered)e(b)n(y)i(the)h(Region.)34 b(It)24 b(should)427
-4152 y(ha)n(v)n(e)h(at)h(least)g(as)f(man)n(y)g(elemen)n(ts)h(as)g
-(there)f(are)g(axes)g(in)i(the)f(Region.)36 b(If)26 b(an)g(axis)f(has)h
-(no)f(lo)n(w)n(er)g(limit,)427 4251 y(the)j(returned)f(v)-5
-b(alue)28 b(will)g(b)r(e)g(the)g(largest)e(p)r(ossible)h(negativ)n(e)g
-(v)-5 b(alue.)259 4393 y Fd(ubnd)427 4493 y Fj(P)n(oin)n(ter)20
-b(to)i(an)g(arra)n(y)d(in)j(whic)n(h)g(to)g(return)f(the)i(upp)r(er)f
-(axis)f(b)r(ounds)h(co)n(v)n(ered)e(b)n(y)h(the)h(Region.)35
-b(It)22 b(should)427 4593 y(ha)n(v)n(e)i(at)h(least)f(as)g(man)n(y)h
-(elemen)n(ts)f(as)h(there)f(are)g(axes)g(in)h(the)h(Region.)35
-b(If)25 b(an)g(axis)f(has)g(no)h(upp)r(er)g(limit,)427
-4692 y(the)j(returned)f(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g(largest)e
-(p)r(ossible)h(p)r(ositiv)n(e)g(v)-5 b(alue.)0 4872 y
-Fd(Notes:)340 5173 y Fi(\017)45 b Fj(The)24 b(v)-5 b(alue)23
-b(of)h(the)g(Negated)f(attribute)h(is)g(ignored)e(\(i.e.)36
-b(it)24 b(is)g(assumed)f(that)h(the)g(Region)e(has)i(not)f(b)r(een)427
-5272 y(negated\).)340 5414 y Fi(\017)45 b Fj(If)25 b(an)e(axis)h(has)f
-(no)h(exten)n(t)g(on)g(an)f(axis)h(then)g(the)g(lo)n(w)n(er)f(limit)i
-(will)f(b)r(e)g(returned)g(larger)e(than)i(the)g(upp)r(er)427
-5514 y(limit.)39 b(Note,)28 b(this)g(is)g(di\013eren)n(t)g(to)g(an)g
-(axis)f(whic)n(h)h(has)g(a)f(constan)n(t)g(v)-5 b(alue)28
-b(\(in)h(whic)n(h)f(case)f(b)r(oth)h(lo)n(w)n(er)427
-5613 y(and)g(upp)r(er)f(limit)i(will)f(b)r(e)g(returned)f(set)g(to)h
-(the)g(constan)n(t)f(v)-5 b(alue\).)p eop end
-%%Page: 240 250
-TeXDict begin 240 249 bop 0 52 a FF(240)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astGetRegionF)-11 b(rame)226 b Fe(Obtain)38
-b(a)g(p)s(oin)m(ter)f(to)1460 598 y(the)i(encapsulated)1499
-712 y(F)-10 b(rame)38 b(within)f(a)1713 812 y(Region)2614
-483 y Fz(astGetRegionF)-11 b(rame)0 981 y Fd(Description:)44
-b Fj(This)28 b(function)g(returns)f(a)g(p)r(oin)n(ter)g(to)h(the)g(F)-7
-b(rame)27 b(represen)n(ted)f(b)n(y)i(a)f(Region.)0 1121
-y Fd(Synopsis:)121 b Ft(AstFrame)40 b Fi(\003)p Ft(astGetRegionFra)o
-(me\()d(AstRegion)j Fi(\003)p Ft(this)h(\))0 1261 y Fd(P)m(arameters:)
-259 1388 y(this)427 1487 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)0
-1640 y Fd(Returned)k(V)-8 b(alue:)259 1766 y(astGetRegionF)g(rame\(\))
-427 1866 y Fj(A)37 b(p)r(oin)n(ter)f(to)h(a)f(deep)g(cop)n(y)g(of)g
-(the)h(F)-7 b(rame)36 b(represen)n(ted)g(b)n(y)g(the)h(Region.)63
-b(Using)36 b(this)h(p)r(oin)n(ter)f(to)427 1966 y(mo)r(dify)31
-b(the)f(F)-7 b(rame)29 b(will)h(ha)n(v)n(e)f(no)h(e\013ect)g(on)g(the)g
-(Region.)43 b(T)-7 b(o)30 b(mo)r(dify)g(the)g(Region,)g(use)g(the)g
-(Region)427 2065 y(p)r(oin)n(ter)d(directly)-7 b(.)0
-2218 y Fd(Notes:)340 2491 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2590 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2770 V 0 2902 a Fz(astGetRegionP)l
-(oin)l(ts)176 b Fe(Returns)39 b(the)f(p)s(ositions)1360
-3016 y(that)f(de\014ne)j(the)e(giv)m(en)1713 3130 y(Region)2612
-2902 y Fz(astGetRegionP)l(oin)l(ts)0 3299 y Fd(Description:)44
-b Fj(This)30 b(function)g(returns)e(the)i(axis)f(v)-5
-b(alues)29 b(at)g(the)h(p)r(oin)n(ts)f(that)h(de\014ne)f(the)h
-(supplied)g(Region.)42 b(The)227 3399 y(particular)25
-b(meaning)h(of)h(these)g(p)r(oin)n(ts)f(will)h(dep)r(end)g(on)f(the)h
-(t)n(yp)r(e)g(of)f(class)g(supplied,)h(as)f(listed)h(b)r(elo)n(w)f
-(under)227 3499 y Ft(")p Fj(Applicabilit)n(y:)p Ft(")p
-Fj(.)0 3638 y Fd(Synopsis:)121 b Ft(void)42 b(astGetRegionPoin)o(ts)o
-(\()c(AstRegion)h Fi(\003)p Ft(this,)i(int)i(maxpoint,)d(int)i
-(maxcoord,)e(int)i Fi(\003)p Ft(npoint,)227 3738 y(double)f
-Fi(\003)p Ft(points)g(\))0 3878 y Fd(P)m(arameters:)259
-4005 y(this)427 4104 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-4227 y Fd(maxp)s(oin)m(t)427 4327 y Fj(If)33 b(zero,)e(the)i(n)n(um)n
-(b)r(er)e(of)h(p)r(oin)n(ts)g(needed)g(to)g(de\014ne)g(the)g(Region)f
-(is)h(returned)f(in)h Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p
-Ft(")p Fj(,)g(but)h(no)427 4427 y(axis)26 b(v)-5 b(alues)26
-b(are)f(returned)h(and)h(all)f(other)g(parameters)e(are)i(ignored.)35
-b(If)27 b(not)f(zero,)g(the)h(supplied)g(v)-5 b(alue)427
-4526 y(should)31 b(b)r(e)g(the)g(length)g(of)g(the)g(second)f
-(dimension)h(of)g(the)g Ft(")p Fj(p)r(oin)n(ts)p Ft(")f
-Fj(arra)n(y)-7 b(.)44 b(An)31 b(error)e(is)i(rep)r(orted)f(if)427
-4626 y(the)e(n)n(um)n(b)r(er)g(of)f(p)r(oin)n(ts)h(needed)f(to)h
-(de\014ne)g(the)g(Region)f(exceeds)g(this)g(n)n(um)n(b)r(er.)259
-4749 y Fd(maxco)s(ord)427 4849 y Fj(The)f(length)f(of)g(the)h(\014rst)f
-(dimension)h(of)f(the)h Ft(")p Fj(p)r(oin)n(ts)p Ft(")e
-Fj(arra)n(y)-7 b(.)34 b(An)26 b(error)d(is)i(rep)r(orted)g(if)h(the)g
-(n)n(um)n(b)r(er)f(of)427 4948 y(axes)i(in)h(the)g(supplied)g(Region)f
-(exceeds)g(this)g(n)n(um)n(b)r(er.)259 5072 y Fd(np)s(oin)m(t)427
-5171 y Fj(A)h(p)r(oin)n(ter)f(to)h(an)f(in)n(teger)g(in)h(whic)n(h)f
-(to)h(return)f(the)h(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(de\014ning)h
-(the)g(Region.)259 5295 y Fd(p)s(oin)m(ts)427 5394 y
-Fj(The)i(address)f(of)h(the)h(\014rst)f(elemen)n(t)g(in)h(a)e
-(2-dimensional)g(arra)n(y)f(of)i(shap)r(e)g Ft(")p Fj([maxco)r
-(ord][maxp)r(oin)n(t])p Ft(")p Fj(,)427 5494 y(in)h(whic)n(h)f(to)g
-(return)g(the)h(co)r(ordinate)e(v)-5 b(alues)30 b(at)g(the)h(p)r
-(ositions)f(that)g(de\014ne)h(the)f(Region.)45 b(These)30
-b(are)427 5593 y(stored)e(suc)n(h)h(that)g(the)g(v)-5
-b(alue)29 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)g Ft(")p
-Fj(co)r(ord)p Ft(")f Fj(for)i(p)r(oin)n(t)g(n)n(um)n(b)r(er)f
-Ft(")p Fj(p)r(oin)n(t)p Ft(")h Fj(is)f(found)427 5693
-y(in)g(elemen)n(t)g Ft(")p Fj(p)r(oin)n(ts[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)p eop end
-%%Page: 241 251
-TeXDict begin 241 250 bop 3643 52 a FF(241)0 351 y Fd(Class)31
-b(Applicabilit)m(y:)259 486 y(Region)427 586 y Fj(All)d(Regions)f(ha)n
-(v)n(e)f(this)i(attribute.)259 718 y Fd(Bo)m(x)427 817
-y Fj(The)g(\014rst)f(returned)g(p)r(osition)h(is)f(the)h(Bo)n(x)f(cen)n
-(tre,)g(and)g(the)h(second)f(is)h(a)f(Bo)n(x)f(corner.)259
-949 y Fd(Circle)427 1049 y Fj(The)c(\014rst)f(returned)g(p)r(osition)g
-(is)g(the)h(Circle)e(cen)n(tre,)i(and)g(the)f(second)g(is)g(a)g(p)r
-(oin)n(t)g(on)g(the)h(circumference.)259 1180 y Fd(CmpRegion)427
-1280 y Fj(Returns)28 b(a)g(v)-5 b(alue)28 b(of)g(zero)f(for)h
-Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p Ft(")f Fj(and)h(lea)n(v)n(es)f(the)h
-(supplied)h(arra)n(y)d(con)n(ten)n(ts)h(unc)n(hanged.)38
-b(T)-7 b(o)427 1379 y(\014nd)25 b(the)f(p)r(oin)n(ts)g(de\014ning)f(a)h
-(CmpRegion,)g(use)g(this)g(metho)r(d)g(on)g(the)g(comp)r(onen)n(t)g
-(Regions,)f(whic)n(h)h(can)427 1479 y(b)r(e)k(accessed)f(b)n(y)g(in)n
-(v)n(oking)f(astDecomp)r(ose)h(on)g(the)h(CmpRegion.)259
-1611 y Fd(Ellipse)427 1710 y Fj(The)h(\014rst)g(returned)f(p)r(osition)
-h(is)g(the)g(Ellipse)g(cen)n(tre.)40 b(The)29 b(second)f(is)h(the)g
-(end)g(of)g(one)g(of)f(the)i(axes)e(of)427 1810 y(the)k(ellipse.)48
-b(The)31 b(third)g(is)g(some)g(other)g(p)r(oin)n(t)g(on)g(the)h
-(circumference)e(of)h(the)h(ellipse,)g(distinct)g(from)427
-1910 y(the)c(second)f(p)r(oin)n(t.)259 2041 y Fd(In)m(terv)-5
-b(al)427 2141 y Fj(The)30 b(\014rst)g(p)r(oin)n(t)g(corresp)r(onds)e
-(to)i(the)g(lo)n(w)n(er)f(b)r(ounds)h(p)r(osition,)g(and)g(the)g
-(second)f(p)r(oin)n(t)i(corresp)r(onds)427 2240 y(to)k(the)f(upp)r(er)h
-(b)r(ounds)f(p)r(osition.)57 b(These)34 b(are)g(rev)n(ersed)e(to)j
-(indicate)f(an)g(extcluded)h(in)n(terv)-5 b(al)34 b(rather)427
-2340 y(than)28 b(an)f(included)h(in)n(terv)-5 b(al.)37
-b(See)27 b(the)h(In)n(terv)-5 b(al)27 b(constructor)f(for)h(more)g
-(information.)259 2472 y Fd(NullRegion)427 2571 y Fj(Returns)h(a)f(v)-5
-b(alue)27 b(of)h(zero)e(for)i Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p
-Ft(")e Fj(and)i(lea)n(v)n(es)e(the)i(supplied)f(arra)n(y)f(con)n(ten)n
-(ts)h(unc)n(hanged.)259 2703 y Fd(P)m(oin)m(tList)427
-2803 y Fj(The)h(p)r(ositions)f(returned)g(are)g(those)g(that)h(w)n(ere)
-f(supplied)h(when)f(the)h(P)n(oin)n(tList)f(w)n(as)f(constructed.)259
-2934 y Fd(P)m(olygon)427 3034 y Fj(The)36 b(p)r(ositions)f(returned)g
-(are)f(the)i(v)n(ertex)f(p)r(ositions)g(that)g(w)n(ere)g(supplied)h
-(when)f(the)h(P)n(olygon)e(w)n(as)427 3133 y(constructed.)259
-3265 y Fd(Prism)427 3365 y Fj(Returns)28 b(a)g(v)-5 b(alue)28
-b(of)g(zero)f(for)h Ft(")p Fi(\003)p Fj(np)r(oin)n(t)p
-Ft(")f Fj(and)h(lea)n(v)n(es)f(the)h(supplied)h(arra)n(y)d(con)n(ten)n
-(ts)h(unc)n(hanged.)38 b(T)-7 b(o)427 3464 y(\014nd)31
-b(the)g(p)r(oin)n(ts)g(de\014ning)g(a)f(Prism,)g(use)h(this)g(metho)r
-(d)g(on)f(the)h(comp)r(onen)n(t)g(Regions,)f(whic)n(h)h(can)f(b)r(e)427
-3564 y(accessed)d(b)n(y)g(in)n(v)n(oking)f(astDecomp)r(ose)h(on)g(the)h
-(CmpRegion.)0 3725 y Fd(Notes:)340 4006 y Fi(\017)45
-b Fj(If)21 b(the)h(co)r(ordinate)d(system)i(represen)n(ted)e(b)n(y)h
-(the)i(Region)e(has)g(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f
-(\014rst)g(created,)427 4105 y(the)h(returned)f(axis)f(v)-5
-b(alues)20 b(refer)g(to)g(the)g(new)h(\(c)n(hanged\))e(co)r(ordinate)g
-(system,)j(rather)d(than)i(the)f(original)427 4205 y(co)r(ordinate)27
-b(system.)37 b(Note)28 b(ho)n(w)n(ev)n(er)e(that)i(if)g(the)g
-(transformation)f(from)g(original)f(to)i(new)g(co)r(ordinate)427
-4305 y(system)j(is)f(non-linear,)g(the)h(shap)r(e)f(within)i(the)f(new)
-f(co)r(ordinate)g(system)g(ma)n(y)g(b)r(e)h(distorted,)g(and)f(so)427
-4404 y(ma)n(y)d(not)h(matc)n(h)f(that)h(implied)g(b)n(y)g(the)f(name)h
-(of)f(the)h(Region)f(sub)r(class)g(\(Circle,)h(Bo)n(x,)e(etc\).)p
-0 4601 3780 12 v 0 4733 a Fz(astGetStcCo)t(ord)203 b
-Fe(Return)39 b(information)c(ab)s(out)j(an)1107 4832
-y(AstroCo)s(ords)e(elemen)m(t)h(stored)h(in)1727 4932
-y(an)h(Stc)2838 4733 y Fz(astGetStcCo)t(ord)0 5095 y
-Fd(Description:)44 b Fj(When)29 b(an)n(y)d(sub-class)h(of)g(Stc)h(is)g
-(created,)f(the)h(constructor)e(function)i(allo)n(ws)f(one)g(or)g(more)
-g(Astro-)227 5195 y(Co)r(ords)j(elemen)n(ts)g(to)h(b)r(e)g(stored)e
-(within)j(the)f(Stc.)46 b(This)31 b(function)g(allo)n(ws)e(an)n(y)h
-(one)g(of)h(these)g(AstroCo)r(ords)227 5295 y(elemen)n(ts)37
-b(to)h(b)r(e)f(retriev)n(ed.)65 b(The)37 b(format)g(of)g(the)h
-(returned)f(information)g(is)g(the)h(same)e(as)h(that)g(used)h(to)227
-5394 y(pass)e(the)h(original)e(information)h(to)g(the)h(Stc)g
-(constructor.)62 b(That)36 b(is,)j(the)e(information)f(is)g(returned)g
-(in)h(a)227 5494 y(KeyMap)29 b(structure)g(con)n(taining)g(elemen)n(ts)
-g(with)i(one)e(or)g(more)g(of)g(the)h(k)n(eys)f(giv)n(en)g(b)n(y)g(sym)
-n(b)r(olic)h(constan)n(ts)227 5593 y(AST)p Ft(__)p Fj(STCNAME,)40
-b(AST)p Ft(__)p Fj(STCV)-9 b(ALUE,)40 b(AST)p Ft(__)p
-Fj(STCERR)n(OR,)e(AST)p Ft(__)p Fj(STCRES,)i(AST)p Ft(__)p
-Fj(STCSIZE)227 5693 y(and)28 b(AST)p Ft(__)p Fj(STCPIXSZ.)p
-eop end
-%%Page: 242 252
-TeXDict begin 242 251 bop 0 52 a FF(242)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(If)23
-b(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)g(the)h(Stc)g
-(has)f(b)r(een)h(c)n(hanged)f(since)g(it)h(w)n(as)f(created)f(\(for)i
-(instance,)227 451 y(b)n(y)h(c)n(hanging)f(its)i(System)g(attribute\),)
-g(then)g(the)g(sizes)f(and)g(p)r(ositions)g(in)h(the)g(returned)f
-(KeyMap)f(will)i(re\015ect)227 551 y(the)j(c)n(hange)f(in)h(co)r
-(ordinate)e(system.)0 703 y Fd(Synopsis:)121 b Ft(AstKeyMap)40
-b Fi(\003)p Ft(astGetStcCoord)o(\()e(AstStc)j Fi(\003)p
-Ft(this,)g(int)h(icoord)f(\))0 856 y Fd(P)m(arameters:)259
-995 y(this)427 1095 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)259
-1229 y Fd(ico)s(ord)427 1329 y Fj(The)35 b(index)g(of)g(the)g(AstroCo)r
-(ords)e(elemen)n(t)j(required.)57 b(The)35 b(\014rst)g(has)f(index)i
-(one.)58 b(The)35 b(n)n(um)n(b)r(er)g(of)427 1428 y(AstroCo)r(ords)26
-b(elemen)n(ts)h(in)h(the)g(Stc)g(can)f(b)r(e)h(found)g(using)g
-(function)g(astGetStcNco)r(ord.)0 1593 y Fd(Returned)k(V)-8
-b(alue:)259 1733 y(astGetStcCo)s(ord\(\))427 1832 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(a)f(new)h(KeyMap)e(con)n(taining)h(the)h
-(required)f(information.)0 1997 y Fd(Notes:)340 2283
-y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2383
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 2585 3780 12 v 0 2717 a Fz(astGetStcNCo)t(ord)284
-b Fe(Return)38 b(the)h(n)m(um)m(b)s(er)f(of)1328 2816
-y(AstroCo)s(ords)e(elemen)m(ts)1483 2916 y(stored)i(in)g(an)h(Stc)2732
-2717 y Fz(astGetStcNCo)t(ord)0 3085 y Fd(Description:)44
-b Fj(This)28 b(function)g(returns)f(the)h(n)n(um)n(b)r(er)f(of)h
-(AstroCo)r(ords)e(elemen)n(ts)h(stored)g(in)h(an)f(Stc.)0
-3237 y Fd(Synopsis:)121 b Ft(int)42 b(astGetStcNCoord\()37
-b(AstStc)k Fi(\003)p Ft(this)h(\))0 3390 y Fd(P)m(arameters:)259
-3529 y(this)427 3629 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)0
-3794 y Fd(Returned)k(V)-8 b(alue:)259 3933 y(astGetStcNCo)s(ord\(\))427
-4033 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(AstroCo)r(ords)e(elemen)n(ts)
-h(stored)g(in)h(the)g(Stc.)0 4198 y Fd(Notes:)340 4484
-y Fi(\017)45 b Fj(Zero)26 b(will)g(b)r(e)h(returned)f(if)h(this)g
-(function)g(is)g(in)n(v)n(ok)n(ed)e(with)i(the)g(AST)g(error)d(status)i
-(set,)h(or)f(if)h(it)g(should)427 4583 y(fail)h(for)f(an)n(y)g(reason.)
-p 0 4786 V 0 4917 a Fz(astGetStcRegion)375 b Fe(Obtain)38
-b(a)g(cop)m(y)h(of)f(the)1137 5032 y(encapsulated)e(Region)g(within)f
-(a)1808 5145 y(Stc)2794 4917 y Fz(astGetStcRegion)0 5314
-y Fd(Description:)44 b Fj(This)30 b(function)g(returns)f(a)h(p)r(oin)n
-(ter)f(to)h(a)f(deep)h(cop)n(y)f(of)g(the)h(Region)f(supplied)h(when)g
-(the)h(Stc)f(w)n(as)227 5413 y(created.)0 5566 y Fd(Synopsis:)121
-b Ft(AstRegion)40 b Fi(\003)p Ft(astGetStcRegio)o(n\()d(AstStc)k
-Fi(\003)p Ft(this)h(\))0 5718 y Fd(P)m(arameters:)p eop
-end
-%%Page: 243 253
-TeXDict begin 243 252 bop 3643 52 a FF(243)259 351 y
-Fd(this)427 451 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Stc.)0
-611 y Fd(Returned)k(V)-8 b(alue:)259 745 y(astGetStcRegion\(\))427
-845 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(a)f(deep)h(cop)n(y)f(of)g(the)h
-(Region)f(encapsulated)g(within)h(the)g(supplied)g(Stc.)0
-1005 y Fd(Notes:)340 1285 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1385 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1580 3780 12 v 0 1711
-a Fz(astGetUnc)896 1712 y Fe(Obtain)38 b(uncertain)m(t)m(y)e
-(information)f(from)j(a)1713 1825 y(Region)3152 1711
-y Fz(astGetUnc)0 2010 y Fd(Description:)44 b Fj(This)24
-b(function)h(returns)e(a)h(Region)f(whic)n(h)h(represen)n(ts)e(the)j
-(uncertain)n(t)n(y)e(asso)r(ciated)g(with)h(p)r(ositions)227
-2109 y(within)32 b(the)f(supplied)g(Region.)46 b(See)31
-b(astSetUnc)g(for)f(more)g(information)g(ab)r(out)h(Region)f(uncertain)
-n(ties)g(and)227 2209 y(their)e(use.)0 2356 y Fd(Synopsis:)121
-b Ft(AstRegion)40 b Fi(\003)p Ft(astGetUnc\()f(AstRegion)h
-Fi(\003)p Ft(this,)h(int)h(def)g(\))0 2504 y Fd(P)m(arameters:)259
-2638 y(this)427 2738 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region.)259
-2869 y Fd(def)427 2968 y Fj(Con)n(trols)i(what)i(is)f(returned)g(if)h
-(no)f(uncertain)n(t)n(y)g(information)g(has)f(b)r(een)i(asso)r(ciated)e
-(explicitly)i(with)427 3068 y(the)24 b(supplied)f(Region.)35
-b(If)24 b(a)e(non-zero)g(v)-5 b(alue)23 b(is)g(supplied,)h(then)g(the)f
-(default)h(uncertain)n(t)n(y)e(Region)h(used)427 3168
-y(in)n(ternally)f(within)i(AST)g(is)e(returned)h(\(see)g
-Ft(")p Fj(Applicabilit)n(y)p Ft(")f Fj(b)r(elo)n(w\).)35
-b(If)24 b(zero)e(is)g(supplied,)j(then)e(NULL)427 3267
-y(will)28 b(b)r(e)g(returned)f(\(without)i(error\).)0
-3427 y Fd(Class)i(Applicabilit)m(y:)259 3561 y(CmpRegion)427
-3661 y Fj(The)f(default)g(uncertain)n(t)n(y)f(for)g(a)h(CmpRegion)f(is)
-g(tak)n(en)h(from)f(one)g(of)h(the)g(t)n(w)n(o)f(comp)r(onen)n(t)g
-(Regions.)427 3761 y(If)35 b(the)f(\014rst)g(comp)r(onen)n(t)f(Region)h
-(has)f(a)g(non-default)h(uncertain)n(t)n(y)-7 b(,)35
-b(then)f(it)h(is)f(used)g(as)f(the)h(default)427 3860
-y(uncertain)n(t)n(y)g(for)g(the)h(paren)n(t)f(CmpRegion.)58
-b(Otherwise,)35 b(if)g(the)h(second)e(comp)r(onen)n(t)g(Region)g(has)g
-(a)427 3960 y(non-default)25 b(uncertain)n(t)n(y)-7 b(,)25
-b(then)g(it)h(is)e(used)h(as)f(the)i(default)f(uncertain)n(t)n(y)f(for)
-h(the)g(paren)n(t)f(CmpRegion.)427 4060 y(If)g(neither)f(of)g(the)g
-(comp)r(onen)n(t)g(Regions)f(has)g(non-default)h(uncertain)n(t)n(y)-7
-b(,)23 b(then)h(the)f(default)g(uncertain)n(t)n(y)427
-4159 y(for)k(the)h(CmpRegion)f(is)h(1.0E-6)d(of)j(the)g(b)r(ounding)g
-(b)r(o)n(x)f(of)g(the)h(CmpRegion.)259 4290 y Fd(Prism)427
-4390 y Fj(The)j(default)g(uncertain)n(t)n(y)f(for)g(a)h(Prism)e(is)i
-(formed)f(b)n(y)h(com)n(bining)f(the)h(uncertain)n(ties)f(from)g(the)h
-(t)n(w)n(o)427 4489 y(comp)r(onen)n(t)24 b(Regions.)35
-b(If)25 b(a)f(comp)r(onen)n(t)g(Region)g(do)r(es)g(not)g(ha)n(v)n(e)f
-(a)h(non-default)g(uncertain)n(t)n(y)-7 b(,)25 b(then)f(its)427
-4589 y(default)k(uncertain)n(t)n(y)f(will)h(b)r(e)g(used)f(to)h(form)f
-(the)h(default)g(uncertain)n(t)n(y)f(of)g(the)h(paren)n(t)f(Prism.)259
-4720 y Fd(Region)427 4819 y Fj(F)-7 b(or)37 b(other)g(classes)f(of)h
-(Region,)i(the)f(default)f(uncertain)n(t)n(y)g(is)g(1.0E-6)e(of)i(the)h
-(b)r(ounding)f(b)r(o)n(x)g(of)g(the)427 4919 y(Region.)f(If)28
-b(the)f(b)r(ounding)h(b)r(o)n(x)e(has)h(zero)f(width)i(on)f(an)n(y)f
-(axis,)g(then)i(the)g(uncertain)n(t)n(y)e(will)h(b)r(e)h(1.0E-6)427
-5019 y(of)g(the)g(axis)f(v)-5 b(alue.)0 5178 y Fd(Returned)32
-b(V)-8 b(alue:)259 5313 y(astGetUnc\(\))427 5413 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(a)f(Region)g(describing)g(the)h(uncertain)n(t)n
-(y)e(in)i(the)g(supplied)g(Region.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 244 254
-TeXDict begin 244 253 bop 0 52 a FF(244)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)29 b(uncertain)n(t)n(y)f(information)g(is)h(asso)r(ciated)e
-(with)i(a)f(Region,)g(and)h(the)g(co)r(ordinate)e(system)i(describ)r
-(ed)427 451 y(b)n(y)c(the)g(Region)f(is)g(subsequen)n(tly)g(c)n(hanged)
-g(\(e.g.)36 b(b)n(y)24 b(c)n(hanging)f(the)i(v)-5 b(alue)25
-b(of)f(its)h(System)g(attribute,)g(or)427 551 y(using)c(the)g
-(astMapRegion)f(function\),)j(then)f(the)f(uncertain)n(t)n(y)f
-(information)g(returned)h(b)n(y)g(this)g(function)427
-650 y(will)j(b)r(e)h(mo)r(di\014ed)f(so)f(that)h(it)h(refers)e(to)g
-(the)i(co)r(ordinate)d(system)i(curren)n(tly)f(describ)r(ed)g(b)n(y)h
-(the)g(supplied)427 750 y(Region.)340 895 y Fi(\017)45
-b Fj(A)26 b(n)n(ull)f(Ob)5 b(ject)24 b(p)r(oin)n(ter)h(\(NULL\))h(will)
-f(b)r(e)g(returned)g(if)g(this)h(function)f(is)g(in)n(v)n(ok)n(ed)e
-(with)j(the)f(AST)h(error)427 994 y(status)i(set,)f(or)g(if)h(it)g
-(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 1217 3780
-12 v 0 1349 a Fz(astGrfP)l(op)173 b Fe(Restore)38 b(previously)f(sa)m
-(v)m(ed)h(graphics)g(functions)1518 1464 y(used)h(b)m(y)g(a)f(Plot)3177
-1349 y Fz(astGrfP)l(op)0 1676 y Fd(Description:)44 b
-Fj(This)34 b(function)g(restores)d(a)i(snapshot)g(of)g(the)h(graphics)e
-(functions)i(stored)e(previously)g(b)n(y)h(calling)227
-1776 y(astGrfPush.)51 b(The)33 b(restored)e(graphics)g(functions)i(b)r
-(ecome)g(the)g(curren)n(t)e(graphics)g(functions)i(used)g(b)n(y)f(the)
-227 1875 y(Plot.)227 2012 y(The)26 b(astGrfPush)f(and)h(astGrfP)n(op)e
-(functions)i(are)f(in)n(tended)i(for)e(situations)g(where)h(it)g(is)g
-(necessary)e(to)h(mak)n(e)227 2112 y(temp)r(orary)j(c)n(hanges)g(to)h
-(the)g(graphics)f(functions)h(used)g(b)n(y)g(the)g(Plot.)41
-b(The)29 b(curren)n(t)f(functions)h(should)g(\014rst)227
-2211 y(b)r(e)35 b(sa)n(v)n(ed)e(b)n(y)g(calling)h(astGrfPush.)56
-b(New)34 b(functions)g(should)g(then)h(b)r(e)g(registered)d(using)i
-(astGrfSet.)57 b(The)227 2311 y(required)36 b(graphics)f(should)i(then)
-g(b)r(e)g(pro)r(duced.)64 b(Finally)-7 b(,)39 b(astGrfP)n(op)c(should)i
-(b)r(e)g(called)f(to)h(restore)e(the)227 2410 y(original)26
-b(graphics)g(functions.)0 2584 y Fd(Synopsis:)121 b Ft(void)42
-b(astGrfPop\()d(AstPlot)i Fi(\003)p Ft(this)g(\))0 2757
-y Fd(P)m(arameters:)259 2917 y(this)427 3017 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)0 3203 y Fd(Notes:)340 3509 y Fi(\017)45
-b Fj(This)24 b(function)f(returns)g(without)h(action)e(if)i(there)f
-(are)f(no)h(snapshots)g(to)g(restore.)34 b(No)23 b(error)e(is)i(rep)r
-(orted)427 3609 y(in)28 b(this)g(case.)p 0 3832 V 0 3963
-a Fz(astGrfPush)186 b Fe(Sa)m(v)m(e)38 b(the)h(curren)m(t)e(graphics)g
-(functions)h(used)1652 4078 y(b)m(y)g(a)h(Plot)3113 3963
-y Fz(astGrfPush)0 4291 y Fd(Description:)44 b Fj(This)34
-b(function)h(tak)n(es)e(a)h(snapshot)f(of)h(the)g(graphics)f(functions)
-h(whic)n(h)g(are)f(curren)n(tly)g(registered)227 4390
-y(with)h(the)g(supplied)f(Plot,)i(and)e(sa)n(v)n(es)e(the)j(snapshot)e
-(on)h(a)g(\014rst-in-last-out)f(stac)n(k)g(within)i(the)g(Plot.)54
-b(The)227 4490 y(snapshot)27 b(can)g(b)r(e)h(restored)f(later)f(using)i
-(function)g(astGrfP)n(op.)227 4626 y(The)e(astGrfPush)f(and)h(astGrfP)n
-(op)e(functions)i(are)f(in)n(tended)i(for)e(situations)g(where)h(it)g
-(is)g(necessary)e(to)h(mak)n(e)227 4726 y(temp)r(orary)j(c)n(hanges)g
-(to)h(the)g(graphics)f(functions)h(used)g(b)n(y)g(the)g(Plot.)41
-b(The)29 b(curren)n(t)f(functions)h(should)g(\014rst)227
-4826 y(b)r(e)35 b(sa)n(v)n(ed)e(b)n(y)g(calling)h(astGrfPush.)56
-b(New)34 b(functions)g(should)g(then)h(b)r(e)g(registered)d(using)i
-(astGrfSet.)57 b(The)227 4925 y(required)36 b(graphics)f(should)i(then)
-g(b)r(e)g(pro)r(duced.)64 b(Finally)-7 b(,)39 b(astGrfP)n(op)c(should)i
-(b)r(e)g(called)f(to)h(restore)e(the)227 5025 y(original)26
-b(graphics)g(functions.)0 5198 y Fd(Synopsis:)121 b Ft(void)42
-b(astGrfPush\()d(AstPlot)i Fi(\003)p Ft(this)g(\))0 5371
-y Fd(P)m(arameters:)259 5532 y(this)427 5631 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)p eop end
-%%Page: 245 255
-TeXDict begin 245 254 bop 3643 52 a FF(245)p 0 351 3780
-12 v 0 483 a Fz(astGrfSet)163 b Fe(Register)38 b(a)g(graphics)g
-(function)f(for)h(use)h(b)m(y)g(a)f(Plot)161 b Fz(astGrfSet)0
-681 y Fd(Description:)44 b Fj(This)25 b(function)g(can)f(b)r(e)g(used)h
-(to)f(select)g(the)h(underlying)f(graphics)f(functions)h(to)h(b)r(e)f
-(used)h(when)f(the)227 781 y(supplied)i(Plot)e(pro)r(duces)h(graphical)
-e(output.)37 b(If)25 b(this)h(function)f(is)g(not)g(called)g(prior)f
-(to)h(pro)r(ducing)f(graphical)227 880 y(output,)j(then)e(the)h
-(underlying)f(graphics)f(functions)h(selected)h(at)f(link-time)g
-(\(using)g(the)h(ast)p Ft(_)p Fj(link)f(command\))227
-980 y(will)30 b(b)r(e)g(used.)44 b(T)-7 b(o)29 b(use)g(alternativ)n(e)g
-(graphics)f(functions,)j(call)e(this)h(function)g(b)r(efore)g(the)g
-(graphical)e(output)227 1080 y(is)i(created,)h(sp)r(ecifying)f(the)h
-(graphics)e(functions)h(to)g(b)r(e)h(used.)45 b(This)30
-b(will)h(register)e(the)i(function)f(for)g(future)227
-1179 y(use,)e(but)g(the)g(function)g(will)g(not)g(actually)e(b)r(e)j
-(used)e(un)n(til)h(the)g(Grf)g(attribute)g(is)f(giv)n(en)g(a)g
-(non-zero)f(v)-5 b(alue.)0 1338 y Fd(Synopsis:)121 b
-Ft(void)42 b(astGrfSet\()d(AstPlot)i Fi(\003)p Ft(this,)g(const)g(char)
-h Fi(\003)p Ft(name,)f(AstGrfFun)f(fun)j(\))0 1497 y
-Fd(P)m(arameters:)259 1643 y(this)427 1743 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 1880 y Fd(name)427 1980 y Fj(A)g(name)f
-(indicating)g(the)h(graphics)d(function)j(to)f(b)r(e)h(replaced.)36
-b(V)-7 b(arious)26 b(graphics)g(functions)h(are)g(used)427
-2079 y(b)n(y)d(the)h(Plot)f(class,)g(and)h(an)n(y)e(com)n(bination)h
-(of)g(them)h(ma)n(y)f(b)r(e)h(supplied)f(b)n(y)h(calling)e(this)i
-(function)g(once)427 2179 y(for)f(eac)n(h)g(function)g(to)h(b)r(e)f
-(replaced.)35 b(If)25 b(an)n(y)e(of)i(the)f(graphics)f(functions)i(are)
-e(not)h(replaced)g(in)g(this)h(w)n(a)n(y)-7 b(,)427 2279
-y(the)26 b(corresp)r(onding)d(functions)i(in)h(the)f(graphics)f(in)n
-(terface)g(selected)h(at)g(link-time)h(\(using)f(the)g(ast)p
-Ft(_)p Fj(link)427 2378 y(command\))j(are)e(used.)37
-b(The)28 b(allo)n(w)n(ed)e(names)h(are:)510 2608 y Fi(\017)45
-b Fj(A)n(ttr)28 b(-)f(Enquire)g(or)g(set)g(a)h(graphics)e(attribute)h
-(v)-5 b(alue)510 2727 y Fi(\017)45 b Fj(Cap)28 b(-)f(Inquire)g(a)g
-(capabilit)n(y)510 2846 y Fi(\017)45 b Fj(Flush)28 b(-)g(Flush)f(all)h
-(p)r(ending)g(graphics)e(to)h(the)h(output)g(device)510
-2965 y Fi(\017)45 b Fj(Line)28 b(-)f(Dra)n(w)g(a)g(p)r(olyline)h
-(\(i.e.)37 b(a)27 b(set)h(of)f(connected)h(lines\))510
-3083 y Fi(\017)45 b Fj(Mark)27 b(-)g(Dra)n(w)g(a)g(set)h(of)f(mark)n
-(ers)510 3202 y Fi(\017)45 b Fj(Qc)n(h)27 b(-)h(Return)f(the)h(c)n
-(haracter)e(heigh)n(t)h(in)h(w)n(orld)f(co)r(ordinates)510
-3320 y Fi(\017)45 b Fj(Scales)27 b(-)h(Get)g(the)g(axis)e(scales)510
-3439 y Fi(\017)45 b Fj(T)-7 b(ext)28 b(-)f(Dra)n(w)g(a)g(c)n(haracter)f
-(string)510 3558 y Fi(\017)45 b Fj(TxExt)27 b(-)h(Get)g(the)g(exten)n
-(t)f(of)h(a)f(c)n(haracter)f(string)427 3695 y(The)k(string)g(is)g
-(case)f(insensitiv)n(e.)44 b(F)-7 b(or)30 b(details)f(of)h(the)h(in)n
-(terface)e(required)g(for)h(eac)n(h,)g(see)g(the)g(sections)427
-3795 y(b)r(elo)n(w.)259 3932 y Fd(fun)427 4032 y Fj(A)37
-b(P)n(oin)n(ter)e(to)i(the)g(function)g(to)f(b)r(e)h(used)g(to)f(pro)n
-(vide)g(the)g(functionalit)n(y)h(indicated)g(b)n(y)f(parameter)427
-4132 y(name.)h(The)26 b(in)n(terface)g(for)g(eac)n(h)g(function)i(is)e
-(describ)r(ed)g(b)r(elo)n(w,)h(but)g(the)g(function)h(p)r(oin)n(ter)e
-(should)g(b)r(e)427 4231 y(cast)h(to)h(a)f(t)n(yp)r(e)h(of)f(AstGrfF)-7
-b(un)29 b(when)f(calling)f(astGrfSet.)427 4350 y(Once)34
-b(a)g(function)h(has)e(b)r(een)i(pro)n(vided,)g(a)f(n)n(ull)g(p)r(oin)n
-(ter)g(can)g(b)r(e)g(supplied)h(in)f(a)g(subsequen)n(t)g(call)g(to)427
-4449 y(astGrfSet)22 b(to)f(reset)g(the)h(function)g(to)g(the)f(corresp)
-r(onding)f(function)i(in)g(the)g(graphics)e(in)n(terface)h(selected)427
-4549 y(at)28 b(link-time.)-2 4720 y Fd(F)-8 b(unction)32
-b(In)m(terfaces)n(:)227 4866 y Fj(All)i(the)f(functions)g(listed)g(b)r
-(elo)n(w)g(\(except)g(for)g Ft(")p Fj(Cap)p Ft(")p Fj(\))f(should)g
-(return)h(an)f(in)n(teger)g(v)-5 b(alue)33 b(of)g(0)g(if)g(an)g(error)
-227 4966 y(o)r(ccurs,)43 b(and)d(1)f(otherwise.)74 b(All)40
-b(x)g(and)g(y)g(v)-5 b(alues)40 b(refer)f(to)h Ft(")p
-Fj(graphics)e(cordinates)p Ft(")h Fj(as)g(de\014ned)h(b)n(y)g(the)227
-5066 y(graph)n(b)r(o)n(x)26 b(parameter)g(of)i(the)g(astPlot)e(call)h
-(whic)n(h)h(created)f(the)h(Plot.)227 5195 y(The)i(\014rst)f(parameter)
-f(\()p Ft(")p Fj(grfcon)p Ft(")p Fj(\))g(for)h(eac)n(h)g(function)h(is)
-g(an)f(AST)h(KeyMap)e(p)r(oin)n(ter)i(that)f(can)g(b)r(e)h(used)g(b)n
-(y)227 5295 y(the)24 b(called)f(function)h(to)f(establish)g(the)h(con)n
-(text)e(in)i(whic)n(h)f(it)h(is)f(b)r(eing)h(called.)35
-b(The)23 b(con)n(ten)n(ts)g(of)g(the)h(KeyMap)227 5394
-y(are)h(determined)i(b)n(y)f(the)g(calling)g(application,)f(whic)n(h)h
-(should)g(obtain)g(a)g(p)r(oin)n(ter)g(to)g(the)g(KeyMap)f(using)h(the)
-227 5494 y(astGetGrfCon)n(text)34 b(function,)j(and)d(then)h(store)f
-(an)n(y)g(necessary)e(information)i(in)h(the)g(KeyMap)e(using)h(the)227
-5593 y(metho)r(ds)e(of)f(the)h(KeyMap)e(class.)47 b(Note,)33
-b(the)f(functions)f(listed)h(b)r(elo)n(w)f(should)g(nev)n(er)f(ann)n
-(ul)h(or)g(delete)g(the)227 5693 y(supplied)d(KeyMap)f(p)r(oin)n(ter.)p
-eop end
-%%Page: 246 256
-TeXDict begin 246 255 bop 0 52 a FF(246)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)-2 351 y Fd(A)m(ttr)n(:)227
-497 y Fj(The)38 b Ft(")p Fj(A)n(ttr)p Ft(")e Fj(function)i(returns)e
-(the)i(curren)n(t)e(v)-5 b(alue)37 b(of)h(a)e(sp)r(eci\014ed)i
-(graphics)e(attribute,)j(and)e(optionally)227 597 y(establishes)23
-b(a)h(new)g(v)-5 b(alue.)35 b(The)24 b(supplied)h(v)-5
-b(alue)23 b(is)h(con)n(v)n(erted)f(to)g(an)h(in)n(teger)f(v)-5
-b(alue)24 b(if)g(necessary)e(b)r(efore)i(use.)227 697
-y(It)k(requires)e(the)i(follo)n(wing)f(in)n(terface:)227
-827 y(in)n(t)h(A)n(ttr\()g(AstOb)5 b(ject)28 b Fi(\003)p
-Fj(grfcon,)e(in)n(t)i(attr,)f(double)h(v)-5 b(alue,)27
-b(double)h Fi(\003)p Fj(old)p Ft(_)p Fj(v)-5 b(alue,)26
-b(in)n(t)i(prim)g(\))340 1107 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 1246 y Fi(\017)45 b Fj(attr)39
-b(-)f(An)h(in)n(teger)f(v)-5 b(alue)39 b(iden)n(tifying)g(the)g
-(required)f(attribute.)70 b(The)39 b(follo)n(wing)f(sym)n(b)r(olic)g(v)
--5 b(alues)427 1345 y(are)27 b(de\014ned)i(in)g(grf.h:)37
-b(GRF)p Ft(__)p Fj(STYLE)28 b(\(Line)h(st)n(yle\),)f(GRF)p
-Ft(__)p Fj(WIDTH)h(\(Line)f(width\),)i(GRF)p Ft(__)p
-Fj(SIZE)427 1445 y(\(Character)f(and)i(mark)n(er)d(size)j(scale)e
-(factor\),)i(GRF)p Ft(__)p Fj(F)n(ONT)f(\(Character)f(fon)n(t\),)j(GRF)
-p Ft(__)p Fj(COLOUR)427 1544 y(\(Colour)27 b(index\).)340
-1683 y Fi(\017)45 b Fj(v)-5 b(alue)28 b(-)f(A)h(new)g(v)-5
-b(alue)27 b(to)h(store)e(for)h(the)h(attribute.)37 b(If)28
-b(this)g(is)g(AST)p Ft(__)p Fj(BAD)f(no)h(v)-5 b(alue)27
-b(is)h(stored.)340 1822 y Fi(\017)45 b Fj(old)p Ft(_)p
-Fj(v)-5 b(alue)26 b(-)h(A)g(p)r(oin)n(ter)g(to)g(a)f(double)h(in)g
-(whic)n(h)g(to)g(return)f(the)i(attribute)f(v)-5 b(alue.)36
-b(If)28 b(this)f(is)g(NULL,)g(no)427 1922 y(v)-5 b(alue)28
-b(is)f(returned.)340 2061 y Fi(\017)45 b Fj(prim)30 b(-)f(The)g(sort)g
-(of)g(graphics)f(primitiv)n(e)h(to)g(b)r(e)h(dra)n(wn)e(with)i(the)g
-(new)f(attribute.)42 b(Iden)n(ti\014ed)30 b(b)n(y)f(the)427
-2161 y(follo)n(wing)e(v)-5 b(alues)27 b(de\014ned)h(in)g(grf.h:)36
-b(GRF)p Ft(__)p Fj(LINE,)27 b(GRF)p Ft(__)p Fj(MARK,)h(GRF)p
-Ft(__)p Fj(TEXT.)-2 2335 y Fd(Cap)n(:)227 2481 y Fj(The)e
-Ft(")p Fj(Cap)p Ft(")e Fj(function)i(is)g(called)f(to)g(determine)h(if)
-g(the)g(grf)f(mo)r(dule)g(has)g(a)g(giv)n(en)g(capabilit)n(y)-7
-b(,)25 b(as)g(indicated)h(b)n(y)227 2580 y(the)i Ft(")p
-Fj(cap)p Ft(")f Fj(argumen)n(t:)227 2711 y(in)n(t)h(Cap\()g(AstOb)5
-b(ject)27 b Fi(\003)p Fj(grfcon,)g(in)n(t)g(cap,)h(in)n(t)g(v)-5
-b(alue)27 b(\))340 2990 y Fi(\017)45 b Fj(grfcon)27 b(-)g(A)h(KeyMap)f
-(con)n(taining)f(information)h(passed)g(from)g(the)h(calling)f
-(application.)340 3129 y Fi(\017)45 b Fj(cap)24 b(-)f(The)h(capabilit)n
-(y)f(b)r(eing)h(inquired)g(ab)r(out.)36 b(This)24 b(will)g(b)r(e)g(one)
-f(of)h(the)h(follo)n(wing)d(constan)n(ts)h(de\014ned)427
-3229 y(in)28 b(grf.h:)227 3403 y(GRF)p Ft(__)p Fj(SCALES:)33
-b(This)g(function)h(should)f(return)g(a)f(non-zero)g(v)-5
-b(alue)33 b(if)h(the)f Ft(")p Fj(Scales)p Ft(")f Fj(function)h(is)h
-(imple-)227 3503 y(men)n(ted,)28 b(and)g(zero)e(otherwise.)36
-b(The)28 b(supplied)g Ft(")p Fj(v)-5 b(alue)p Ft(")26
-b Fj(argumen)n(t)h(should)g(b)r(e)h(ignored.)227 3634
-y(GRF)p Ft(__)p Fj(MJUST:)c(This)g(function)g(should)g(return)f(a)h
-(non-zero)e(v)-5 b(alue)23 b(if)i(the)f Ft(")p Fj(T)-7
-b(ext)p Ft(")23 b Fj(and)h Ft(")p Fj(TxExt)p Ft(")e Fj(functions)227
-3733 y(recognise)35 b Ft(")p Fj(M)p Ft(")i Fj(as)f(a)g(c)n(haracter)f
-(in)i(the)h(justi\014cation)f(string.)64 b(If)37 b(the)h(\014rst)e(c)n
-(haracter)f(of)i(a)f(justi\014cation)227 3833 y(string)d(is)h
-Ft(")p Fj(M)p Ft(")p Fj(,)g(then)g(the)g(text)g(should)f(b)r(e)h
-(justi\014ed)g(with)g(the)g(giv)n(en)f(reference)g(p)r(oin)n(t)g(at)h
-(the)g(b)r(ottom)g(of)227 3932 y(the)f(b)r(ounding)f(b)r(o)n(x.)51
-b(This)33 b(is)f(di\013eren)n(t)g(to)h Ft(")p Fj(B)p
-Ft(")e Fj(justi\014cation,)j(whic)n(h)e(requests)g(that)g(the)h
-(reference)e(p)r(oin)n(t)227 4032 y(b)r(e)k(put)g(on)f(the)h(baseline)e
-(of)i(the)f(text,)j(since)d(some)g(c)n(haracters)e(hang)h(do)n(wn)h(b)r
-(elo)n(w)g(the)h(baseline.)56 b(If)35 b(the)227 4132
-y Ft(")p Fj(T)-7 b(ext)p Ft(")25 b Fj(or)g Ft(")p Fj(TxExt)p
-Ft(")g Fj(function)h(cannot)g(di\013eren)n(tiate)g(b)r(et)n(w)n(een)f
-Ft(")p Fj(M)p Ft(")h Fj(and)f Ft(")p Fj(B)p Ft(")p Fj(,)h(then)g(this)g
-(function)h(should)227 4231 y(return)f(zero,)f(in)i(whic)n(h)f(case)f
-Ft(")p Fj(M)p Ft(")g Fj(justi\014cation)i(will)f(nev)n(er)f(b)r(e)i
-(requested)e(b)n(y)h(Plot.)36 b(The)26 b(supplied)h Ft(")p
-Fj(v)-5 b(alue)p Ft(")227 4331 y Fj(argumen)n(t)27 b(should)g(b)r(e)h
-(ignored.)227 4462 y(GRF)p Ft(__)p Fj(ESC:)22 b(This)g(function)h
-(should)e(return)h(a)g(non-zero)e(v)-5 b(alue)22 b(if)h(the)f
-Ft(")p Fj(T)-7 b(ext)p Ft(")22 b Fj(and)g Ft(")p Fj(TxExt)p
-Ft(")f Fj(functions)h(can)227 4561 y(recognise)f(and)h(in)n(terpret)f
-(graphics)g(escap)r(e)g(sequences)h(within)h(the)f(supplied)g(string)g
-(\(see)g(attribute)g(Escap)r(e\).)227 4661 y(Zero)g(should)i(b)r(e)f
-(returned)g(if)h(escap)r(e)f(sequences)g(cannot)g(b)r(e)h(in)n
-(terpreted)e(\(in)i(whic)n(h)g(case)e(the)i(Plot)f(class)f(will)227
-4760 y(in)n(terpret)30 b(them)h(itself)g(if)f(needed\).)46
-b(The)30 b(supplied)g Ft(")p Fj(v)-5 b(alue)p Ft(")30
-b Fj(argumen)n(t)f(should)h(b)r(e)h(ignored)e(only)g(if)i(escap)r(e)227
-4860 y(sequences)h(cannot)g(b)r(e)h(in)n(terpreted)g(b)n(y)f
-Ft(")p Fj(T)-7 b(ext)p Ft(")32 b Fj(and)h Ft(")p Fj(TxExt)p
-Ft(")p Fj(.)50 b(Otherwise,)34 b Ft(")p Fj(v)-5 b(alue)p
-Ft(")31 b Fj(indicates)i(whether)227 4960 y Ft(")p Fj(T)-7
-b(ext)p Ft(")27 b Fj(and)g Ft(")p Fj(TxExt)p Ft(")f Fj(should)h(in)n
-(terpret)g(escap)r(e)g(sequences)f(in)i(subsequen)n(t)f(calls.)36
-b(If)28 b Ft(")p Fj(v)-5 b(alue)p Ft(")26 b Fj(is)h(non-zero)227
-5059 y(then)j(escap)r(e)f(sequences)g(should)g(b)r(e)h(in)n(terpreted)f
-(b)n(y)h Ft(")p Fj(T)-7 b(ext)p Ft(")28 b Fj(and)i Ft(")p
-Fj(TxExt)p Ft(")p Fj(.)41 b(Otherwise,)29 b(they)h(should)f(b)r(e)227
-5159 y(dra)n(wn)e(as)g(literal)g(text.)340 5438 y Fi(\017)45
-b Fj(v)-5 b(alue)28 b(-)f(The)h(use)f(of)h(this)g(parameter)e(dep)r
-(ends)i(on)f(the)h(v)-5 b(alue)28 b(of)f Ft(")p Fj(cap)p
-Ft(")f Fj(as)h(describ)r(ed)h(ab)r(o)n(v)n(e.)340 5577
-y Fi(\017)45 b Fj(Returned)26 b(F)-7 b(unction)26 b(V)-7
-b(alue:)36 b(The)25 b(v)-5 b(alue)25 b(returned)g(b)n(y)h(the)f
-(function)h(dep)r(ends)g(on)f(the)h(v)-5 b(alue)25 b(of)h
-Ft(")p Fj(cap)p Ft(")427 5677 y Fj(as)h(describ)r(ed)h(ab)r(o)n(v)n(e.)
-35 b(Zero)26 b(should)i(b)r(e)g(returned)f(if)h(the)g(supplied)g
-(capabilit)n(y)f(is)g(not)h(recognised.)p eop end
-%%Page: 247 257
-TeXDict begin 247 256 bop 3643 52 a FF(247)-2 351 y Fd(Flush)n(:)227
-497 y Fj(The)19 b Ft(")p Fj(Flush)p Ft(")g Fj(function)g(ensures)f
-(that)i(the)f(displa)n(y)f(device)h(is)g(up-to-date,)h(b)n(y)f
-(\015ushing)g(an)n(y)f(p)r(ending)h(graphics)227 597
-y(to)28 b(the)g(output)g(device.)37 b(It)27 b(requires)g(the)h(follo)n
-(wing)e(in)n(terface:)227 720 y(in)n(t)i(Flush\()g(AstOb)5
-b(ject)28 b Fi(\003)p Fj(grfcon)e(\))340 975 y Fi(\017)45
-b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)
-g(from)g(the)h(calling)f(application.)-2 1133 y Fd(Line)n(:)227
-1279 y Fj(The)h Ft(")p Fj(Line)p Ft(")e Fj(function)i(displa)n(ys)e
-(lines)i(joining)f(the)h(giv)n(en)e(p)r(ositions)h(and)g(requires)f
-(the)i(follo)n(wing)e(in)n(terface:)227 1402 y(in)n(t)i(Line\()g(AstOb)
-5 b(ject)28 b Fi(\003)p Fj(grfcon,)e(in)n(t)i(n,)g(const)f(\015oat)g
-Fi(\003)p Fj(x,)g(const)g(\015oat)g Fi(\003)p Fj(y)g(\))340
-1657 y Fi(\017)45 b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n(taining)f
-(information)h(passed)g(from)g(the)h(calling)f(application.)340
-1786 y Fi(\017)45 b Fj(n)28 b(-)f(The)h(n)n(um)n(b)r(er)f(of)h(p)r
-(ositions)f(to)h(b)r(e)g(joined)f(together.)340 1916
-y Fi(\017)45 b Fj(x)28 b(-)f(A)h(p)r(oin)n(ter)f(to)h(an)f(arra)n(y)e
-(holding)i(the)h Ft(")p Fj(n)p Ft(")f Fj(x)h(v)-5 b(alues.)340
-2045 y Fi(\017)45 b Fj(y)28 b(-)f(A)h(p)r(oin)n(ter)f(to)h(an)f(arra)n
-(y)e(holding)i(the)h Ft(")p Fj(n)p Ft(")f Fj(y)h(v)-5
-b(alues.)-2 2203 y Fd(Mark)n(:)227 2349 y Fj(The)28 b
-Ft(")p Fj(Mark)p Ft(")e Fj(function)i(displa)n(ys)e(mark)n(ers)g(at)h
-(the)h(giv)n(en)f(p)r(ositions.)37 b(It)28 b(requires)e(the)i(follo)n
-(wing)e(in)n(terface:)227 2472 y(in)n(t)i(Mark\()f(AstOb)5
-b(ject)28 b Fi(\003)p Fj(grfcon,)e(in)n(t)i(n,)g(const)f(\015oat)g
-Fi(\003)p Fj(x,)g(const)g(\015oat)g Fi(\003)p Fj(y)-7
-b(,)28 b(in)n(t)f(t)n(yp)r(e)h(\))340 2727 y Fi(\017)45
-b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)
-g(from)g(the)h(calling)f(application.)340 2856 y Fi(\017)45
-b Fj(n)28 b(-)f(The)h(n)n(um)n(b)r(er)f(of)h(p)r(ositions)f(to)h(b)r(e)
-g(mark)n(ed.)340 2985 y Fi(\017)45 b Fj(x)28 b(-)f(A)h(p)r(oin)n(ter)f
-(to)h(an)f(arra)n(y)e(holding)i(the)h Ft(")p Fj(n)p Ft(")f
-Fj(x)h(v)-5 b(alues.)340 3114 y Fi(\017)45 b Fj(y)28
-b(-)f(A)h(p)r(oin)n(ter)f(to)h(an)f(arra)n(y)e(holding)i(the)h
-Ft(")p Fj(n)p Ft(")f Fj(y)h(v)-5 b(alues.)340 3244 y
-Fi(\017)45 b Fj(t)n(yp)r(e)28 b(-)f(An)h(in)n(teger)f(whic)n(h)h(can)f
-(b)r(e)h(used)f(to)h(indicate)g(the)g(t)n(yp)r(e)f(of)h(mark)n(er)e
-(sym)n(b)r(ol)h(required.)-2 3402 y Fd(Qc)m(h)n(:)227
-3548 y Fj(The)e Ft(")p Fj(Qc)n(h)p Ft(")e Fj(function)j(returns)e(the)h
-(heigh)n(ts)f(of)h(c)n(haracters)d(dra)n(wn)i(v)n(ertically)f(and)i
-(horizon)n(tally)e(in)i(graphics)227 3647 y(co)r(ordinates.)36
-b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n(terface:)227
-3770 y(in)n(t)i(Qc)n(h\()f(AstOb)5 b(ject)28 b Fi(\003)p
-Fj(grfcon,)e(\015oat)h Fi(\003)p Fj(c)n(h)n(v,)g(\015oat)g
-Fi(\003)p Fj(c)n(hh)g(\))340 4026 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 4155 y Fi(\017)45 b Fj(c)n(h)n(v)26
-b(-)g(A)h(p)r(oin)n(ter)f(to)h(the)g(\015oat)f(whic)n(h)g(is)h(to)f
-(receiv)n(e)f(the)i(heigh)n(t)f(of)h(c)n(haracters)d(dra)n(wn)i(with)h
-(a)f(v)n(ertical)427 4254 y(baseline.)37 b(This)27 b(will)h(b)r(e)g(an)
-f(incremen)n(t)h(in)g(the)g(X)g(axis.)340 4383 y Fi(\017)45
-b Fj(c)n(hh)21 b(-)g(A)g(p)r(oin)n(ter)g(to)g(the)g(\015oat)g(whic)n(h)
-g(is)g(to)f(receiv)n(e)g(the)i(heigh)n(t)e(of)h(c)n(haracters)e(dra)n
-(wn)h(with)i(a)e(horizon)n(tal)427 4483 y(baseline.)37
-b(This)27 b(will)h(b)r(e)g(an)f(incremen)n(t)h(in)g(the)g(Y)g(axis.)-2
-4641 y Fd(Scales)n(:)227 4787 y Fj(The)h Ft(")p Fj(Scales)p
-Ft(")e Fj(function)i(returns)f(t)n(w)n(o)f(v)-5 b(alues)28
-b(\(one)h(for)f(eac)n(h)f(axis\))h(whic)n(h)h(scale)e(incremen)n(ts)h
-(on)h(the)g(corre-)227 4887 y(sp)r(onding)h(axis)f(in)n(to)g(a)h
-Ft(")p Fj(normal)p Ft(")d Fj(co)r(ordinate)i(system)g(in)h(whic)n(h:)42
-b(1\))29 b(the)h(axes)f(ha)n(v)n(e)g(equal)g(scale)g(in)h(terms)227
-4987 y(of)k(\(for)f(instance\))g(millimetres)g(p)r(er)h(unit)g
-(distance,)g(2\))g(X)f(v)-5 b(alues)33 b(increase)f(from)h(left)h(to)g
-(righ)n(t,)g(and)f(3\))g(Y)227 5086 y(v)-5 b(alues)27
-b(increase)g(from)g(b)r(ottom)h(to)f(top.)37 b(It)28
-b(requires)f(the)g(follo)n(wing)g(in)n(terface:)227 5209
-y(in)n(t)h(Scales\()f(AstOb)5 b(ject)28 b Fi(\003)p Fj(grfcon,)e
-(\015oat)h Fi(\003)p Fj(alpha,)g(\015oat)g Fi(\003)p
-Fj(b)r(eta)g(\))340 5464 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 5593 y Fi(\017)45 b Fj(alpha)36
-b(-)f(A)i(p)r(oin)n(ter)e(to)h(the)h(\015oat)e(whic)n(h)h(is)g(to)g
-(receiv)n(e)f(the)h(scale)f(for)h(the)g(X)h(axis)e(\(i.e.)62
-b(Xnorm)36 b(=)427 5693 y(alpha)p Fi(\003)p Fj(Xw)n(orld\).)p
-eop end
-%%Page: 248 258
-TeXDict begin 248 257 bop 0 52 a FF(248)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(b)r(eta)38 b(-)g(A)g(p)r(oin)n(ter)g(to)f(the)i(\015oat)e(whic)n
-(h)h(is)g(to)f(receiv)n(e)g(the)h(scale)f(for)h(the)g(Y)g(axis)f
-(\(i.e.)68 b(Ynorm)38 b(=)427 451 y(b)r(eta)p Fi(\003)p
-Fj(Yw)n(orld\).)-2 624 y Fd(T)-8 b(ext)n(:)227 770 y
-Fj(The)31 b Ft(")p Fj(T)-7 b(ext)p Ft(")30 b Fj(function)h(displa)n(ys)
-e(a)h(c)n(haracter)f(string)h(at)g(a)g(giv)n(en)g(p)r(osition)g(using)h
-(a)f(sp)r(eci\014ed)g(justi\014cation)227 870 y(and)e(up-v)n(ector.)35
-b(It)28 b(requires)e(the)i(follo)n(wing)f(in)n(terface:)227
-1000 y(in)n(t)f(T)-7 b(ext\()25 b(AstOb)5 b(ject)25 b
-Fi(\003)p Fj(grfcon,)f(const)h(c)n(har)f Fi(\003)p Fj(text,)h(\015oat)g
-(x,)g(\015oat)g(y)-7 b(,)25 b(const)g(c)n(har)f Fi(\003)p
-Fj(just,)h(\015oat)g(up)n(x,)g(\015oat)g(up)n(y)227 1100
-y(\))340 1377 y Fi(\017)45 b Fj(grfcon)27 b(-)g(A)h(KeyMap)f(con)n
-(taining)f(information)h(passed)g(from)g(the)h(calling)f(application.)
-340 1516 y Fi(\017)45 b Fj(text)28 b(-)g(P)n(oin)n(ter)e(to)h(a)g(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(to)g(b)r(e)h(displa)n(y)n
-(ed.)340 1654 y Fi(\017)45 b Fj(x)28 b(-)f(The)h(reference)e(x)i(co)r
-(ordinate.)340 1793 y Fi(\017)45 b Fj(y)28 b(-)f(The)h(reference)e(y)i
-(co)r(ordinate.)340 1931 y Fi(\017)45 b Fj(just)35 b(-)f(A)h(c)n
-(haracter)d(string)i(whic)n(h)g(sp)r(eci\014es)h(the)f(lo)r(cation)g
-(within)h(the)g(text)g(string)e(whic)n(h)i(is)f(to)g(b)r(e)427
-2031 y(placed)22 b(at)f(the)i(reference)d(p)r(osition)i(giv)n(en)f(b)n
-(y)h(x)f(and)h(y)-7 b(.)35 b(The)22 b(\014rst)f(c)n(haracter)f(ma)n(y)h
-(b)r(e)h('T')g(for)f Ft(")p Fj(top)p Ft(")p Fj(,)h('C')427
-2131 y(for)j Ft(")p Fj(cen)n(tre)p Ft(")p Fj(,)f(or)h('B')g(for)g
-Ft(")p Fj(b)r(ottom)p Ft(")p Fj(,)g(and)g(sp)r(eci\014es)g(the)h(v)n
-(ertical)e(lo)r(cation)h(of)g(the)g(reference)g(p)r(osition.)427
-2230 y(Note,)31 b Ft(")p Fj(b)r(ottom)p Ft(")e Fj(corresp)r(onds)f(to)i
-(the)h(base-line)e(of)h(normal)f(text.)44 b(Some)30 b(c)n(haracters)d
-(\(eg)j Ft(")p Fj(y)p Ft(")p Fj(,)g Ft(")p Fj(g)p Ft(")p
-Fj(,)427 2330 y Ft(")p Fj(p)p Ft(")p Fj(,)35 b(etc\))f(descend)f(b)r
-(elo)n(w)h(the)g(base-line.)54 b(The)33 b(second)g(c)n(haracter)f(ma)n
-(y)h(b)r(e)h('L')f(for)g Ft(")p Fj(left)p Ft(")p Fj(,)i('C')f(for)427
-2430 y Ft(")p Fj(cen)n(tre)p Ft(")p Fj(,)26 b(or)h('R')h(for)f
-Ft(")p Fj(righ)n(t)p Ft(")p Fj(,)f(and)h(sp)r(eci\014es)g(the)h
-(horizon)n(tal)e(lo)r(cation)h(of)g(the)h(reference)f(p)r(osition.)36
-b(If)427 2529 y(the)28 b(string)f(has)g(less)g(than)h(2)f(c)n
-(haracters)f(then)i('C')f(is)h(used)f(for)h(the)g(missing)f(c)n
-(haracters.)340 2668 y Fi(\017)45 b Fj(up)n(x)29 b(-)f(The)g(x)h(comp)r
-(onen)n(t)f(of)g(the)h(up-v)n(ector)e(for)h(the)h(text.)39
-b(If)29 b(necessary)e(the)i(supplied)g(v)-5 b(alue)28
-b(should)427 2767 y(b)r(e)h(negated)f(to)h(ensure)f(that)h(p)r(ositiv)n
-(e)f(v)-5 b(alues)28 b(alw)n(a)n(ys)f(refer)h(to)h(displacemen)n(ts)f
-(from)g(left)h(to)g(righ)n(t)f(on)427 2867 y(the)g(screen.)340
-3005 y Fi(\017)45 b Fj(up)n(y)29 b(-)f(The)g(y)h(comp)r(onen)n(t)f(of)g
-(the)h(up-v)n(ector)e(for)h(the)h(text.)39 b(If)29 b(necessary)e(the)i
-(supplied)g(v)-5 b(alue)28 b(should)427 3105 y(b)r(e)j(negated)f(to)g
-(ensure)f(that)i(p)r(ositiv)n(e)f(v)-5 b(alues)29 b(alw)n(a)n(ys)g
-(refer)g(to)h(displacemen)n(ts)g(from)g(b)r(ottom)g(to)h(top)427
-3205 y(on)d(the)g(screen.)-2 3378 y Fd(TxExt)n(:)227
-3524 y Fj(The)35 b Ft(")p Fj(TxExt)p Ft(")e Fj(function)i(returns)f
-(the)h(corners)e(of)i(a)f(b)r(o)n(x)g(whic)n(h)h(w)n(ould)f(enclose)g
-(the)h(supplied)g(c)n(haracter)227 3624 y(string)25 b(if)i(it)f(w)n
-(ere)f(displa)n(y)n(ed)g(using)g(the)h(T)-7 b(ext)26
-b(function)g(describ)r(ed)g(ab)r(o)n(v)n(e.)35 b(The)26
-b(returned)f(b)r(o)n(x)g(includes)h(an)n(y)227 3723 y(leading)h(or)g
-(trailing)g(spaces.)36 b(It)28 b(requires)e(the)i(follo)n(wing)e(in)n
-(terface:)227 3853 y(in)n(t)31 b(TxExt\()f(AstOb)5 b(ject)31
-b Fi(\003)p Fj(grfcon,)f(const)g(c)n(har)f Fi(\003)p
-Fj(text,)i(\015oat)f(x,)h(\015oat)f(y)-7 b(,)31 b(const)f(c)n(har)g
-Fi(\003)p Fj(just,)h(\015oat)f(up)n(x,)h(\015oat)227
-3953 y(up)n(y)-7 b(,)28 b(\015oat)f Fi(\003)p Fj(xb,)g(\015oat)g
-Fi(\003)p Fj(yb)g(\))340 4231 y Fi(\017)45 b Fj(grfcon)27
-b(-)g(A)h(KeyMap)f(con)n(taining)f(information)h(passed)g(from)g(the)h
-(calling)f(application.)340 4369 y Fi(\017)45 b Fj(text)28
-b(-)g(P)n(oin)n(ter)e(to)h(a)g(n)n(ull-terminated)h(c)n(haracter)d
-(string)i(to)g(b)r(e)h(displa)n(y)n(ed.)340 4508 y Fi(\017)45
-b Fj(x)28 b(-)f(The)h(reference)e(x)i(co)r(ordinate.)340
-4646 y Fi(\017)45 b Fj(y)28 b(-)f(The)h(reference)e(y)i(co)r(ordinate.)
-340 4785 y Fi(\017)45 b Fj(just)35 b(-)f(A)h(c)n(haracter)d(string)i
-(whic)n(h)g(sp)r(eci\014es)h(the)f(lo)r(cation)g(within)h(the)g(text)g
-(string)e(whic)n(h)i(is)f(to)g(b)r(e)427 4884 y(placed)28
-b(at)f(the)h(reference)f(p)r(osition)g(giv)n(en)g(b)n(y)g(x)h(and)f(y)
--7 b(.)37 b(See)28 b Ft(")p Fj(T)-7 b(ext)p Ft(")26 b
-Fj(ab)r(o)n(v)n(e.)340 5023 y Fi(\017)45 b Fj(up)n(x)28
-b(-)f(The)h(x)f(comp)r(onen)n(t)h(of)f(the)h(up-v)n(ector)e(for)h(the)h
-(text.)38 b(See)27 b Ft(")p Fj(T)-7 b(ext)p Ft(")27 b
-Fj(ab)r(o)n(v)n(e.)340 5161 y Fi(\017)45 b Fj(up)n(y)28
-b(-)f(The)h(y)f(comp)r(onen)n(t)h(of)f(the)h(up-v)n(ector)e(for)h(the)h
-(text.)38 b(See)27 b Ft(")p Fj(T)-7 b(ext)p Ft(")27 b
-Fj(ab)r(o)n(v)n(e.)340 5300 y Fi(\017)45 b Fj(xb)23 b(-)e(An)i(arra)n
-(y)d(of)i(4)g(elemen)n(ts)g(in)h(whic)n(h)f(to)g(return)g(the)g(x)g(co)
-r(ordinate)f(of)i(eac)n(h)e(corner)g(of)h(the)h(b)r(ounding)427
-5399 y(b)r(o)n(x.)340 5538 y Fi(\017)45 b Fj(yb)23 b(-)e(An)i(arra)n(y)
-d(of)i(4)g(elemen)n(ts)g(in)h(whic)n(h)f(to)g(return)g(the)g(y)g(co)r
-(ordinate)f(of)i(eac)n(h)e(corner)g(of)h(the)h(b)r(ounding)427
-5638 y(b)r(o)n(x.)p eop end
-%%Page: 249 259
-TeXDict begin 249 258 bop 3643 52 a FF(249)p 0 351 3780
-12 v 0 483 a Fz(astGrid)470 b Fe(Dra)m(w)38 b(a)g(set)h(of)f(lab)s
-(elled)g(co)s(ordinate)e(axes)469 b Fz(astGrid)0 660
-y Fd(Description:)44 b Fj(This)27 b(function)h(dra)n(ws)d(a)i(complete)
-g(annotated)f(set)h(of)g(co)r(ordinate)e(axes)h(for)h(a)f(Plot)h(with)g
-(\(option-)227 760 y(ally\))34 b(a)g(co)r(ordinate)f(grid)h(sup)r
-(erimp)r(osed.)57 b(Details)34 b(of)g(the)h(axes)e(and)h(grid)g(can)g
-(b)r(e)h(con)n(trolled)e(b)n(y)h(setting)227 859 y(v)-5
-b(alues)27 b(for)h(the)g(v)-5 b(arious)26 b(attributes)h(de\014ned)h(b)
-n(y)g(the)g(Plot)f(class)f(\(q.v.\).)0 1015 y Fd(Synopsis:)121
-b Ft(void)42 b(astGrid\()e(AstPlot)h Fi(\003)p Ft(this)g(\))0
-1172 y Fd(P)m(arameters:)259 1315 y(this)427 1415 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)0 1583 y Fd(Notes:)340 1873 y Fi(\017)45
-b Fj(If)28 b(the)h(supplied)f(Plot)f(is)h(a)f(Plot3D,)g(the)i(axes)d
-(will)i(b)r(e)h(annotated)e(using)g(three)h(2-dimensional)e(Plots,)427
-1972 y(one)i(for)f(eac)n(h)g(2D)g(plane)h(in)g(the)g(3D)f(curren)n(t)g
-(co)r(ordinate)g(system.)37 b(The)27 b(plots)h(will)g(b)r(e)g
-Ft(")p Fj(pasted)p Ft(")e Fj(on)n(to)427 2072 y(3)h(faces)g(of)g(the)h
-(cub)r(oid)f(graphics)f(v)n(olume)h(sp)r(eci\014ed)g(when)h(the)g
-(Plot3D)e(w)n(as)g(constructed.)37 b(The)27 b(faces)427
-2172 y(to)h(b)r(e)g(used)f(can)h(b)r(e)g(con)n(trolled)e(b)n(y)h(the)h
-Ft(")p Fj(Ro)r(otCorner)p Ft(")d Fj(attribute.)340 2308
-y Fi(\017)45 b Fj(An)23 b(error)e(results)h(if)i(either)e(the)h(curren)
-n(t)f(F)-7 b(rame)22 b(or)g(the)h(base)f(F)-7 b(rame)23
-b(of)f(the)h(Plot)g(is)f(not)h(2-dimensional)427 2407
-y(or)k(\(for)g(a)h(Plot3D\))f(3-dimensional.)340 2544
-y Fi(\017)45 b Fj(An)24 b(error)e(also)h(results)g(if)h(the)g
-(transformation)e(b)r(et)n(w)n(een)h(the)h(base)f(and)h(curren)n(t)e(F)
--7 b(rames)23 b(of)h(the)g(Plot)f(is)427 2643 y(not)k(de\014ned)g(in)g
-(either)g(direction)g(\(i.e.)37 b(the)27 b(Plot's)f(T)-7
-b(ranF)g(orw)n(ard)24 b(or)i(T)-7 b(ranIn)n(v)n(erse)25
-b(attribute)i(is)f(zero\).)p 0 2849 V 0 2981 a Fz(astGridLine)971
-2988 y Fe(Dra)m(w)38 b(a)g(grid)g(line)g(\(or)g(axis\))f(for)h(a)g
-(Plot)3082 2981 y Fz(astGridLine)0 3190 y Fd(Description:)44
-b Fj(This)30 b(function)g(dra)n(ws)f(a)g(curv)n(e)f(in)i(the)g(ph)n
-(ysical)f(co)r(ordinate)g(system)g(of)h(a)f(Plot)g(b)n(y)h(v)-5
-b(arying)28 b(only)227 3290 y(one)j(of)h(the)g(co)r(ordinates)e(along)g
-(the)i(length)f(of)h(the)g(curv)n(e.)47 b(It)32 b(is)f(in)n(tended)h
-(for)f(dra)n(wing)f(co)r(ordinate)g(axes,)227 3389 y(co)r(ordinate)38
-b(grids,)j(and)d(tic)n(k)h(marks)e(on)i(axes)f(\(but)h(note)g(that)g
-(these)g(are)f(also)f(a)n(v)-5 b(ailable)38 b(via)g(the)h(more)227
-3489 y(comprehensiv)n(e)26 b(astGrid)i(function\).)227
-3617 y(The)35 b(curv)n(e)e(is)i(transformed)e(in)n(to)h(graphical)f(co)
-r(ordinate)h(space)f(for)h(plotting,)j(so)c(that)i(a)f(straigh)n(t)g
-(line)g(in)227 3716 y(ph)n(ysical)24 b(co)r(ordinates)f(ma)n(y)g
-(result)h(in)h(a)f(curv)n(ed)g(line)g(b)r(eing)h(dra)n(wn)e(if)i(the)g
-(Mapping)f(in)n(v)n(olv)n(ed)f(is)h(non-linear.)227 3816
-y(An)n(y)j(discon)n(tin)n(uities)f(in)h(the)f(Mapping)h(b)r(et)n(w)n
-(een)f(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(are)g(catered)h
-(for,)g(as)227 3916 y(is)i(an)n(y)f(clipping)g(established)g(using)h
-(astClip.)0 4072 y Fd(Synopsis:)121 b Ft(void)42 b(astGridLine\()c
-(AstPlot)j Fi(\003)p Ft(this,)g(int)h(axis,)g(const)g(double)f
-(start[],)f(double)h(length)227 4172 y(\))0 4328 y Fd(P)m(arameters:)
-259 4471 y(this)427 4571 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-4707 y Fd(axis)427 4807 y Fj(The)j(index)g(of)f(the)h(Plot)f(axis)g
-(whose)g(ph)n(ysical)g(co)r(ordinate)f(v)-5 b(alue)31
-b(is)f(to)h(b)r(e)g(v)-5 b(aried)30 b(along)f(the)j(length)427
-4906 y(of)26 b(the)h(curv)n(e)e(\(all)h(other)f(co)r(ordinates)g(will)h
-(remain)f(\014xed\).)37 b(This)26 b(v)-5 b(alue)26 b(should)g(lie)g(in)
-g(the)g(range)f(from)427 5006 y(1)i(to)h(the)g(n)n(um)n(b)r(er)f(of)h
-(Plot)f(axes)f(\(Naxes)i(attribute\).)259 5142 y Fd(start)427
-5242 y Fj(An)j(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)f
-(eac)n(h)g(axis)g(of)h(the)g(Plot,)g(giving)e(the)j(ph)n(ysical)d(co)r
-(ordinates)h(of)g(the)427 5341 y(start)d(of)h(the)g(curv)n(e.)259
-5478 y Fd(length)427 5577 y Fj(The)c(length)h(of)f(curv)n(e)f(to)h(b)r
-(e)h(dra)n(wn,)e(giv)n(en)h(as)f(an)h(incremen)n(t)g(along)f(the)h
-(selected)g(ph)n(ysical)g(axis.)35 b(This)427 5677 y(ma)n(y)27
-b(b)r(e)h(p)r(ositiv)n(e)f(or)g(negativ)n(e.)p eop end
-%%Page: 250 260
-TeXDict begin 250 259 bop 0 52 a FF(250)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-684 y Fi(\017)45 b Fj(No)28 b(curv)n(e)g(is)g(dra)n(wn)f(if)i(the)f
-Ft(")p Fj(start)p Ft(")f Fj(arra)n(y)f(con)n(tains)h(an)n(y)g(co)r
-(ordinates)g(with)i(the)f(v)-5 b(alue)28 b(AST)p Ft(__)p
-Fj(BAD,)427 784 y(nor)f(if)h Ft(")p Fj(length)p Ft(")f
-Fj(has)g(this)h(v)-5 b(alue.)340 942 y Fi(\017)45 b Fj(An)28
-b(error)e(results)h(if)h(the)g(base)f(F)-7 b(rame)27
-b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340 1100
-y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 1200 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 1449 3780 12 v 0 1581
-a Fz(astGrismMap)1380 1580 y Fe(Create)37 b(a)i(GrismMap)2978
-1581 y Fz(astGrismMap)0 1820 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(GrismMap)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 1970 y(A)j(GrismMap)g(is)f(a)h(sp)
-r(ecialised)f(form)h(of)f(Mapping)h(whic)n(h)g(transforms)e
-(1-dimensional)h(co)r(ordinates)f(using)227 2069 y(the)39
-b(sp)r(ectral)f(disp)r(ersion)g(equation)f(describ)r(ed)i(in)f(FITS-W)n
-(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p Fj(Represen)n(tation)e(of)h(sp)r
-(ectral)227 2169 y(co)r(ordinates)26 b(in)i(FITS)p Ft(")p
-Fj(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r(ersion)f(pro)r(duced)g
-(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227 2319
-y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d(transformation)g
-(of)i(a)g(GrismMap)f(transforms)g(input)h Ft(")p Fj(grism)f(param-)227
-2418 y(eter)p Ft(")k Fj(v)-5 b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)
-n(elength)d(v)-5 b(alues.)36 b(The)25 b Ft(")p Fj(grism)f(parameter)p
-Ft(")f Fj(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2518 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fj(the)h(o\013set)227 2618 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 2717 y(lo)r(cal)f(length)p Ft(")p
-Fj(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 2817 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 2917 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 3116 y Fd(Synopsis:)121 b
-Ft(AstGrismMap)39 b Fi(\003)p Ft(astGrismMap\()f(const)k(char)f
-Fi(\003)p Ft(options,)f(...)86 b(\))0 3316 y Fd(P)m(arameters:)259
-3503 y(options)427 3603 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3702 y(assignmen)n(ts)j
-(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(GrismMap.)51
-b(The)32 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)427
-3802 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-3902 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4060 y Fd(...)427 4159 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4259 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4359 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4458 y Fj(function\).)0
-4671 y Fd(Returned)32 b(V)-8 b(alue:)259 4857 y(astGrismMap\(\))427
-4957 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(GrismMap.)0
-5169 y Fd(Notes:)340 5502 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5602 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 251 261
-TeXDict begin 251 260 bop 3643 52 a FF(251)p 0 351 3780
-12 v 0 482 a Fz(astImp)t(ort)859 483 y Fe(Imp)s(ort)38
-b(an)g(Ob)7 b(ject)38 b(p)s(oin)m(ter)f(to)h(the)h(curren)m(t)1701
-583 y(con)m(text)3194 482 y Fz(astImp)t(ort)0 746 y Fd(Description:)44
-b Fj(This)20 b(function)g(imp)r(orts)g(an)f(Ob)5 b(ject)19
-b(p)r(oin)n(ter)h(that)g(w)n(as)e(created)h(in)h(a)f(higher)g(or)g(lo)n
-(w)n(er)f(lev)n(el)h(con)n(text,)227 846 y(in)n(to)36
-b(the)h(curren)n(t)f(AST)h(con)n(text.)63 b(This)36 b(means)g(that)h
-(the)g(p)r(oin)n(ter)f(will)h(b)r(e)g(ann)n(ulled)f(when)h(the)f
-(curren)n(t)227 945 y(con)n(text)27 b(is)h(ended)g(\(with)g(astEnd\).)0
-1094 y Fd(Synopsis:)121 b Ft(void)42 b(astImport\()d(AstObject)h
-Fi(\003)p Ft(this)i(\))0 1242 y Fd(P)m(arameters:)259
-1377 y(this)427 1477 y Fj(Ob)5 b(ject)28 b(p)r(oin)n(ter)f(to)g(b)r(e)h
-(imp)r(orted.)0 1638 y Fd(Class)j(Applicabilit)m(y:)259
-1773 y(Ob)5 b(ject)427 1873 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)p 0 2070 V 0 2201 a Fz(astIn)l(tersect)910
-2202 y Fe(Find)39 b(the)f(p)s(oin)m(t)g(of)g(in)m(tersection)f(b)s(et)m
-(w)m(een)1390 2316 y(t)m(w)m(o)g(geo)s(desic)h(curv)m(es)3093
-2201 y Fz(astIn)l(tersect)0 2503 y Fd(Description:)44
-b Fj(This)23 b(function)h(\014nds)f(the)g(co)r(ordinate)e(v)-5
-b(alues)23 b(at)g(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f(b)r(et)n
-(w)n(een)h(t)n(w)n(o)f(geo)r(desic)227 2603 y(curv)n(es.)35
-b(Eac)n(h)25 b(curv)n(e)g(is)g(sp)r(eci\014ed)h(b)n(y)g(t)n(w)n(o)f(p)r
-(oin)n(ts)g(on)h(the)g(curv)n(e.)35 b(It)26 b(can)g(only)f(b)r(e)h
-(used)g(with)g(2-dimensional)227 2702 y(F)-7 b(rames.)227
-2826 y(F)g(or)24 b(example,)h(in)g(a)f(basic)g(F)-7 b(rame,)25
-b(it)g(will)g(\014nd)g(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)e(b)r
-(et)n(w)n(een)i(t)n(w)n(o)f(straigh)n(t)f(lines.)36 b(But)227
-2926 y(for)27 b(a)h(SkyF)-7 b(rame)26 b(it)i(will)g(\014nd)g(an)g(in)n
-(tersection)e(of)i(t)n(w)n(o)f(great)f(circles.)0 3074
-y Fd(Synopsis:)121 b Ft(void)42 b(astIntersect\()c(AstFrame)i
-Fi(\003)p Ft(this,)h(const)h(double)f(a1[2],)g(const)h(double)f(a2[2],)
-g(const)227 3174 y(double)g(b1[2],)g(const)h(double)f(b2[2],)g(double)g
-(cross[2])g(\))0 3322 y Fd(P)m(arameters:)259 3458 y(this)427
-3557 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7 b(rame.)259
-3689 y Fd(a1)427 3789 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d
-(one)g(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g
-(attribute\).)57 b(This)35 b(should)427 3888 y(con)n(tain)27
-b(the)h(co)r(ordinates)e(of)i(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h
-(\014rst)g(geo)r(desic)e(curv)n(e.)259 4020 y Fd(a2)427
-4120 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 4219 y(con)n(tain)e(the)g(co)r(ordinates)f(of)h
-(a)f(second)h(p)r(oin)n(t)g(on)f(the)i(\014rst)f(geo)r(desic)f(curv)n
-(e.)52 b(It)33 b(should)g(not)g(b)r(e)g(co-)427 4319
-y(inciden)n(t)28 b(with)g(the)g(\014rst)g(p)r(oin)n(t.)259
-4451 y Fd(b1)427 4550 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d
-(one)g(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g
-(attribute\).)57 b(This)35 b(should)427 4650 y(con)n(tain)27
-b(the)h(co)r(ordinates)e(of)i(the)g(\014rst)f(p)r(oin)n(t)h(on)f(the)h
-(second)f(geo)r(desic)g(curv)n(e.)259 4782 y Fd(b2)427
-4881 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 4981 y(con)n(tain)g(the)h(co)r(ordinates)e(of)i
-(a)f(second)g(p)r(oin)n(t)g(on)g(the)h(second)f(geo)r(desic)g(curv)n
-(e.)60 b(It)35 b(should)h(not)f(b)r(e)427 5081 y(co-inciden)n(t)27
-b(with)h(the)g(\014rst)g(p)r(oin)n(t.)259 5212 y Fd(cross)427
-5312 y Fj(An)34 b(arra)n(y)e(of)i(double,)h(with)f(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(F)-7 b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r
-(ordinates)f(of)g(the)427 5412 y(required)27 b(in)n(tersection)g(will)h
-(b)r(e)g(returned.)0 5572 y Fd(Notes:)p eop end
-%%Page: 252 262
-TeXDict begin 252 261 bop 0 52 a FF(252)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(F)-7 b(or)19 b(SkyF)-7 b(rames)19 b(eac)n(h)g(curv)n(e)f(will)i(b)
-r(e)g(a)g(great)e(circle,)j(and)e(in)h(general)e(eac)n(h)h(pair)g(of)h
-(curv)n(es)e(will)i(in)n(tersect)427 451 y(at)33 b(t)n(w)n(o)f
-(diametrically)f(opp)r(osite)i(p)r(oin)n(ts)f(on)h(the)g(sky)-7
-b(.)51 b(The)33 b(returned)f(p)r(osition)g(is)h(the)g(one)f(whic)n(h)h
-(is)427 551 y(closest)27 b(to)h(p)r(oin)n(t)f Ft(")p
-Fj(a1)p Ft(")p Fj(.)340 690 y Fi(\017)45 b Fj(This)19
-b(function)g(will)g(return)f Ft(")p Fj(bad)p Ft(")g Fj(co)r(ordinate)g
-(v)-5 b(alues)18 b(\(AST)p Ft(__)p Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i
-(input)f(co)r(ordinates)427 790 y(has)j(this)h(v)-5 b(alue,)23
-b(or)f(if)h(the)g(t)n(w)n(o)f(p)r(oin)n(ts)g(de\014ning)g(either)h(geo)
-r(desic)e(are)h(co-inciden)n(t,)h(or)e(if)i(the)g(t)n(w)n(o)f(curv)n
-(es)427 889 y(do)28 b(not)f(in)n(tersect.)340 1029 y
-Fi(\017)45 b Fj(The)26 b(geo)r(desic)e(curv)n(e)h(used)g(b)n(y)g(this)h
-(function)g(is)f(the)h(path)f(of)h(shortest)e(distance)i(b)r(et)n(w)n
-(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427 1129 y(as)i(de\014ned)h(b)n(y)f
-(the)h(astDistance)g(function.)340 1269 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(F)-7
-b(rame)27 b(is)g(not)h(2-dimensional.)p 0 1482 3780 12
-v 0 1613 a Fz(astIn)l(terv)-7 b(al)831 b Fe(Create)37
-b(a)h(In)m(terv)-7 b(al)828 b Fz(astIn)l(terv)-7 b(al)0
-1793 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(In)n(terv)-5 b(al)27 b(and)h(optionally)e(initialises)i(its)g
-(attributes.)227 1924 y(A)e(In)n(terv)-5 b(al)25 b(is)g(a)g(Region)f
-(whic)n(h)i(represen)n(ts)e(upp)r(er)h(and/or)f(lo)n(w)n(er)g(limits)h
-(on)h(one)e(or)h(more)f(axes)h(of)g(a)g(F)-7 b(rame.)227
-2024 y(F)g(or)37 b(a)g(p)r(oin)n(t)g(to)g(b)r(e)h(within)g(the)g
-(region)e(represen)n(ted)g(b)n(y)h(the)h(In)n(terv)-5
-b(al,)39 b(the)e(p)r(oin)n(t)h(m)n(ust)f(satisfy)g(all)g(the)227
-2123 y(restrictions)29 b(placed)h(on)g(all)g(the)h(axes.)44
-b(The)30 b(p)r(oin)n(t)h(is)f(outside)g(the)h(region)e(if)h(it)h(fails)
-f(to)g(satisfy)g(an)n(y)g(one)g(of)227 2223 y(the)f(restrictions.)39
-b(Eac)n(h)27 b(axis)h(ma)n(y)f(ha)n(v)n(e)h(either)g(an)g(upp)r(er)h
-(limit,)h(a)e(lo)n(w)n(er)f(limit,)i(b)r(oth)g(or)f(neither.)39
-b(If)29 b(b)r(oth)227 2323 y(limits)c(are)e(supplied)h(but)g(are)f(in)i
-(rev)n(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)e(limit)j(is)f
-(greater)e(than)i(the)g(upp)r(er)h(limit\),)227 2422
-y(then)j(the)g(in)n(terv)-5 b(al)27 b(is)h(an)f(excluded)h(in)n(terv)-5
-b(al,)27 b(rather)f(than)i(an)f(included)i(in)n(terv)-5
-b(al.)227 2554 y(A)n(t)28 b(least)f(one)h(axis)e(limit)j(m)n(ust)e(b)r
-(e)h(supplied.)227 2685 y(Note,)33 b(The)e(In)n(terv)-5
-b(al)31 b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g
-(nature)g(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-2785 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 2884 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-3047 y Fd(Synopsis:)121 b Ft(AstInterval)39 b Fi(\003)p
-Ft(astInterval\()f(AstFrame)i Fi(\003)p Ft(frame,)h(const)g(double)h
-(lbnd[],)e(const)i(double)227 3147 y(ubnd[],)f(AstRegion)f
-Fi(\003)p Ft(unc,)h(const)h(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 3310 y Fd(P)m(arameters:)259 3461 y(frame)427
-3560 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3660 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3759 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3899 y Fd(lbnd)427 3999
-y Fj(An)k(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)i(for)e
-(eac)n(h)g(F)-7 b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n
-(taining)f(the)427 4098 y(lo)n(w)n(er)f(limits)h(on)g(eac)n(h)f(axis.)
-43 b(Set)31 b(a)e(v)-5 b(alue)30 b(to)g(AST)p Ft(__)p
-Fj(BAD)g(to)g(indicate)g(that)g(the)h(axis)e(has)g(no)h(lo)n(w)n(er)427
-4198 y(limit.)259 4338 y Fd(ubnd)427 4437 y Fj(An)i(arra)n(y)c(of)j
-(double,)h(with)g(one)e(elemen)n(t)i(for)e(eac)n(h)g(F)-7
-b(rame)31 b(axis)f(\(Naxes)h(attribute\))g(con)n(taining)f(the)427
-4537 y(upp)r(er)e(limits)h(on)e(eac)n(h)g(axis.)37 b(Set)28
-b(a)f(v)-5 b(alue)28 b(to)g(AST)p Ft(__)p Fj(BAD)g(to)f(indicate)h
-(that)g(the)h(axis)e(has)g(no)g(upp)r(er)427 4637 y(limit.)259
-4776 y Fd(unc)427 4876 y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)
-g(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n
-(ties)e(asso)r(ciated)g(with)427 4976 y(the)j(b)r(oundary)f(of)g(the)h
-(Bo)n(x)f(b)r(eing)g(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i
-(an)n(y)f(p)r(oin)n(t)h(on)f(the)h(b)r(oundary)f(of)427
-5075 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f(shifting)h(the)f(supplied)h
-Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f
-(cen)n(tred)g(at)g(the)427 5175 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)
-g(considered.)44 b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)427 5274
-y(represen)n(ts)g(the)i(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)f(p)
-r(osition.)48 b(The)31 b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)
-h(the)427 5374 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427
-5494 y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g
-(b)r(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)
-n(tro-)427 5593 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 5693
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-p eop end
-%%Page: 253 263
-TeXDict begin 253 262 bop 3643 52 a FF(253)427 351 y
-Fj(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r(oin)n
-(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g(Bo)n
-(x.)38 b(Alter-)427 451 y(nativ)n(ely)-7 b(,)24 b(a)g(NULL)g(Ob)5
-b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g(supplied,)h(in)f(whic)n(h)
-g(case)f(a)g(default)i(uncertain)n(t)n(y)e(is)h(used)427
-551 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g(1.0E-6)f(of)h(the)h
-(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)427 670
-y(The)c(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 770 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 869 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 969 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 1069 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 1208 y Fd(options)427 1307 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1407 y(assignmen)n(ts)f
-(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(In)n(terv)-5
-b(al.)37 b(The)28 b(syn)n(tax)e(used)i(is)g(iden)n(tical)g(to)f(that)
-427 1507 y(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1606 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1746
-y Fd(...)427 1845 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1945 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2045 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2144 y Fj(function\).)0 2319
-y Fd(Returned)32 b(V)-8 b(alue:)259 2469 y(astIn)m(terv)j(al\(\))427
-2568 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(In)n(terv)-5
-b(al.)0 2743 y Fd(Notes:)340 3039 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 3138 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 3313 y Fd(Status)33 b(Handling)n(:)227 3459
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-3559 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-3659 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 3871 3780
-12 v 0 4002 a Fz(astIn)l(traMap)1378 4001 y Fe(Create)37
-b(an)h(In)m(traMap)3047 4002 y Fz(astIn)l(traMap)0 4203
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g(In)n
-(traMap)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-4334 y(An)k(In)n(traMap)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g
-(Mapping)g(whic)n(h)g(encapsulates)f(a)h(priv)-5 b(ately-de\014ned)31
-b(co)r(ordinate)227 4434 y(transformation)e(function)i(\(e.g.)44
-b(written)31 b(in)f(C\))h(so)e(that)i(it)f(ma)n(y)g(b)r(e)g(used)g(lik)
-n(e)g(an)n(y)g(other)f(AST)i(Mapping.)227 4534 y(This)d(allo)n(ws)e(y)n
-(ou)h(to)g(create)g(Mappings)g(that)h(p)r(erform)f(an)n(y)g(conceiv)-5
-b(able)27 b(co)r(ordinate)f(transformation.)227 4665
-y(Ho)n(w)n(ev)n(er,)k(an)h(In)n(traMap)g(is)g(in)n(tended)g(for)g(use)g
-(within)h(a)f(single)f(program)g(or)g(a)h(priv)-5 b(ate)31
-b(suite)g(of)g(soft)n(w)n(are,)227 4764 y(where)24 b(all)g(programs)d
-(ha)n(v)n(e)i(access)g(to)h(the)g(same)g(co)r(ordinate)f
-(transformation)f(functions)j(\(i.e.)36 b(can)23 b(b)r(e)i(link)n(ed)
-227 4864 y(against)40 b(them\).)76 b(In)n(traMaps)39
-b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g(datasets)g(whic)n(h)g
-(ma)n(y)g(b)r(e)h(exp)r(orted)227 4964 y(for)34 b(pro)r(cessing)f(b)n
-(y)h(other)g(soft)n(w)n(are,)g(since)g(that)h(soft)n(w)n(are)e(will)h
-(not)h(ha)n(v)n(e)e(the)i(necessary)d(transformation)227
-5063 y(functions)c(a)n(v)-5 b(ailable,)27 b(resulting)g(in)g(an)h
-(error.)227 5194 y(Y)-7 b(ou)36 b(m)n(ust)f(register)f(an)n(y)h(co)r
-(ordinate)f(transformation)g(functions)i(to)f(b)r(e)h(used)f(using)g
-(astIn)n(traReg)f(b)r(efore)227 5294 y(creating)27 b(an)g(In)n(traMap.)
-0 5456 y Fd(Synopsis:)121 b Ft(AstIntraMap)39 b Fi(\003)p
-Ft(astIntraMap\()f(const)k(char)f Fi(\003)p Ft(name,)h(int)g(nin,)g
-(int)g(nout,)g(const)f(char)h Fi(\003)p Ft(options,)227
-5556 y(...)86 b(\))0 5718 y Fd(P)m(arameters:)p eop end
-%%Page: 254 264
-TeXDict begin 254 263 bop 0 52 a FF(254)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(name)427
-451 y Fj(P)n(oin)n(ter)k(to)i(a)f(n)n(ull-terminated)g(string)g(con)n
-(taining)f(the)i(name)f(of)h(the)g(transformation)e(function)i(to)427
-551 y(use)h(\(whic)n(h)h(should)f(previously)e(ha)n(v)n(e)h(b)r(een)i
-(registered)e(using)g(astIn)n(traReg\).)64 b(This)38
-b(name)e(is)h(case)427 650 y(sensitiv)n(e.)g(All)28 b(white)g(space)e
-(will)i(b)r(e)g(remo)n(v)n(ed)e(b)r(efore)i(use.)259
-782 y Fd(nin)427 882 y Fj(The)d(n)n(um)n(b)r(er)f(of)g(input)h(co)r
-(ordinates.)34 b(This)24 b(m)n(ust)h(b)r(e)f(compatible)g(with)h(the)g
-(n)n(um)n(b)r(er)f(of)g(input)h(co)r(ordi-)427 981 y(nates)f(accepted)g
-(b)n(y)g(the)h(transformation)e(function)h(\(as)g(sp)r(eci\014ed)h
-(when)f(this)h(function)g(w)n(as)e(registered)427 1081
-y(using)28 b(astIn)n(traReg\).)259 1213 y Fd(nout)427
-1312 y Fj(The)37 b(n)n(um)n(b)r(er)f(of)g(output)h(co)r(ordinates.)63
-b(This)36 b(m)n(ust)h(b)r(e)f(compatible)h(with)g(the)f(n)n(um)n(b)r
-(er)h(of)f(output)427 1412 y(co)r(ordinates)f(pro)r(duced)h(b)n(y)g
-(the)g(transformation)f(function)i(\(as)f(sp)r(eci\014ed)g(when)g(this)
-h(function)g(w)n(as)427 1512 y(registered)26 b(using)i(astIn)n
-(traReg\).)259 1643 y Fd(options)427 1743 y Fj(P)n(oin)n(ter)f(to)h(a)g
-(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1843 y(assignmen)n(ts)22
-b(to)i(b)r(e)f(used)h(for)f(initialising)g(the)h(new)f(In)n(traMap.)34
-b(The)24 b(syn)n(tax)e(used)i(is)f(iden)n(tical)g(to)g(that)427
-1942 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-2042 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 2174
-y Fd(...)427 2273 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2373 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2473 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2572 y Fj(function\).)0 2733
-y Fd(Returned)32 b(V)-8 b(alue:)259 2869 y(astIn)m(traMap\(\))427
-2968 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(In)n(traMap.)0
-3129 y Fd(Notes:)340 3411 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 3510 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 3707 3780 12 v 0 3838
-a Fz(astIn)l(traReg)914 3839 y Fe(Register)38 b(a)g(transformation)d
-(function)i(for)1384 3954 y(use)i(b)m(y)g(an)f(In)m(traMap)3086
-3838 y Fz(astIn)l(traReg)0 4140 y Fd(Description:)44
-b Fj(This)30 b(function)h(registers)e(a)g(priv)-5 b(ately-de\014ned)30
-b(co)r(ordinate)f(transformation)f(function)j(written)f(in)227
-4240 y(C)h(so)g(that)g(it)h(ma)n(y)e(b)r(e)i(used)f(to)g(create)f(an)h
-(In)n(traMap.)47 b(An)31 b(In)n(traMap)g(is)g(a)f(sp)r(ecialised)h
-(form)g(of)g(Mapping)227 4340 y(whic)n(h)23 b(encapsulates)f(the)h(C)f
-(function)i(so)e(that)g(it)i(ma)n(y)d(b)r(e)j(used)e(lik)n(e)g(an)n(y)g
-(other)g(AST)h(Mapping.)35 b(This)23 b(allo)n(ws)227
-4439 y(y)n(ou)k(to)h(create)e(Mappings)h(that)h(p)r(erform)f(an)n(y)g
-(conceiv)-5 b(able)27 b(co)r(ordinate)f(transformation.)227
-4563 y(Registration)36 b(of)g(relev)-5 b(an)n(t)36 b(transformation)f
-(functions)i(is)f(required)g(b)r(efore)g(using)g(the)h(astIn)n(traMap)e
-(con-)227 4663 y(structor)24 b(function)g(to)h(create)e(an)h(In)n
-(traMap)f(or)g(reading)h(an)g(external)f(represen)n(tation)g(of)h(an)g
-(In)n(traMap)f(from)227 4763 y(a)k(Channel.)0 4911 y
-Fd(Synopsis:)121 b Ft(astIntraReg\()38 b(const)k(char)g
-Fi(\003)p Ft(name,)f(int)h(nin,)g(int)h(nout,)e(void)h(\()p
-Fi(\003)h Ft(tran\)\()e(AstMapping)e Fi(\003)p Ft(,)227
-5011 y(int,)j(int,)g(const)g(double)f Fi(\003)p Ft([],)h(int,)g(int,)f
-(double)h Fi(\003)p Ft([])g(\),)h(unsigned)d(int)i(flags,)f(const)h
-(char)227 5110 y Fi(\003)p Ft(purpose,)e(const)i(char)g
-Fi(\003)p Ft(author,)e(const)h(char)h Fi(\003)p Ft(contact)e(\))0
-5259 y Fd(P)m(arameters:)259 5394 y(name)427 5494 y Fj(P)n(oin)n(ter)22
-b(to)i(a)f(n)n(ull-terminated)h(string)f(con)n(taining)g(a)g(unique)h
-(name)g(to)g(b)r(e)g(asso)r(ciated)e(with)i(the)h(trans-)427
-5593 y(formation)30 b(function)i(in)f(order)f(to)h(iden)n(tify)g(it.)48
-b(This)31 b(name)g(is)g(case)f(sensitiv)n(e.)46 b(All)32
-b(white)f(space)f(will)427 5693 y(b)r(e)e(remo)n(v)n(ed)e(b)r(efore)i
-(use.)p eop end
-%%Page: 255 265
-TeXDict begin 255 264 bop 3643 52 a FF(255)259 351 y
-Fd(nin)427 451 y Fj(The)31 b(n)n(um)n(b)r(er)f(of)g(input)h(co)r
-(ordinates)e(accepted)h(b)n(y)g(the)h(transformation)e(function)i
-(\(i.e.)45 b(the)31 b(n)n(um)n(b)r(er)427 551 y(of)c(dimensions)g(of)g
-(the)g(space)f(in)h(whic)n(h)g(the)h(input)f(p)r(oin)n(ts)g(reside\).)
-37 b(A)27 b(v)-5 b(alue)27 b(of)g(AST)p Ft(__)p Fj(ANY)g(ma)n(y)f(b)r
-(e)427 650 y(giv)n(en)h(if)h(the)g(function)g(is)g(able)f(to)h(accommo)
-r(date)e(a)h(v)-5 b(ariable)27 b(n)n(um)n(b)r(er)g(of)h(input)g(co)r
-(ordinates.)259 794 y Fd(nout)427 893 y Fj(The)d(n)n(um)n(b)r(er)f(of)h
-(output)g(co)r(ordinates)e(pro)r(duced)i(b)n(y)f(the)h(transformation)e
-(function)j(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)427
-993 y(of)31 b(dimensions)f(of)h(the)g(space)f(in)h(whic)n(h)f(the)h
-(output)h(p)r(oin)n(ts)e(reside\).)46 b(A)31 b(v)-5 b(alue)31
-b(of)f(AST)p Ft(__)p Fj(ANY)h(ma)n(y)427 1092 y(b)r(e)d(giv)n(en)f(if)h
-(the)g(function)g(is)g(able)f(to)h(pro)r(duce)f(a)g(v)-5
-b(ariable)26 b(n)n(um)n(b)r(er)i(of)f(output)h(co)r(ordinates.)259
-1236 y Fd(tran)427 1336 y Fj(P)n(oin)n(ter)e(to)i(the)f(transformation)
-f(function)i(to)g(b)r(e)g(registered.)35 b(This)28 b(function)g(should)
-f(p)r(erform)g(what-)427 1435 y(ev)n(er)40 b(co)r(ordinate)g
-(transformations)f(are)h(required)h(and)g(should)f(ha)n(v)n(e)g(an)h
-(in)n(terface)g(lik)n(e)f(astT)-7 b(ranP)427 1535 y(\(q.v.\).)259
-1678 y Fd(\015ags)427 1778 y Fj(This)31 b(v)-5 b(alue)31
-b(ma)n(y)f(b)r(e)i(used)f(to)f(supply)h(a)g(set)g(of)g(\015ags)f(whic)n
-(h)h(describ)r(e)f(the)i(transformation)d(function)427
-1878 y(and)j(whic)n(h)h(ma)n(y)e(a\013ect)i(the)g(b)r(eha)n(viour)e(of)
-h(an)n(y)g(In)n(traMap)f(whic)n(h)h(uses)g(it.)52 b(Often,)34
-b(a)e(v)-5 b(alue)32 b(of)h(zero)427 1977 y(will)e(b)r(e)f(giv)n(en)g
-(here,)g(but)h(y)n(ou)e(ma)n(y)h(also)f(supply)h(the)h(bit)n(wise)f(OR)
-g(of)g(a)f(set)i(of)f(\015ags)f(as)g(describ)r(ed)h(in)427
-2077 y(the)e Ft(")p Fj(T)-7 b(ransformation)26 b(Flags)p
-Ft(")g Fj(section)h(\(b)r(elo)n(w\).)259 2220 y Fd(purp)s(ose)427
-2320 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)g(con)n
-(taining)f(a)h(short)f(\(one)h(line\))h(textual)g(commen)n(t)f(to)g
-(describ)r(e)427 2420 y(the)j(purp)r(ose)f(of)h(the)g(transformation)e
-(function.)259 2563 y Fd(author)427 2663 y Fj(P)n(oin)n(ter)h(to)i(a)g
-(n)n(ull-terminated)f(string)g(con)n(taining)g(the)h(name)g(of)g(the)g
-(author)f(of)h(the)g(transformation)427 2762 y(function.)259
-2906 y Fd(con)m(tact)427 3005 y Fj(P)n(oin)n(ter)35 b(to)i(a)f(n)n
-(ull-terminated)g(string)g(con)n(taining)g(con)n(tact)g(details)g(for)g
-(the)h(author)f(of)h(the)g(trans-)427 3105 y(formation)h(function)h
-(\(e.g.)69 b(an)38 b(e-mail)g(or)f(WWW)i(address\).)68
-b(If)39 b(an)n(y)f(In)n(traMap)f(whic)n(h)h(uses)g(this)427
-3205 y(transformation)33 b(function)i(is)f(exp)r(orted)f(as)h(part)g
-(of)g(a)f(dataset)h(to)g(an)g(external)f(user)h(who)g(do)r(es)g(not)427
-3304 y(ha)n(v)n(e)28 b(access)g(to)h(the)h(function,)g(then)g(these)f
-(con)n(tact)g(details)g(should)g(allo)n(w)f(them)h(to)g(obtain)g(the)h
-(nec-)427 3404 y(essary)c(co)r(de.)0 3587 y Fd(Notes:)340
-3891 y Fi(\017)45 b Fj(Bew)n(are)27 b(that)i(an)f(external)f(represen)n
-(tation)g(of)h(an)g(In)n(traMap)f(\(created)h(b)n(y)g(writing)g(it)g
-(to)h(a)e(Channel\))427 3991 y(will)e(not)f(include)h(the)f(co)r
-(ordinate)f(transformation)g(function)h(whic)n(h)h(it)f(uses,)h(so)e
-(will)i(only)f(refer)f(to)h(the)427 4090 y(function)j(b)n(y)e(its)h
-(name)g(\(as)f(assigned)g(using)g(astIn)n(traReg\).)35
-b(Consequen)n(tly)-7 b(,)25 b(the)i(external)e(represen)n(ta-)427
-4190 y(tion)h(cannot)g(b)r(e)g(utilised)h(b)n(y)f(another)f(program)f
-(unless)h(that)i(program)d(has)h(also)g(registered)g(the)h(same)427
-4289 y(transformation)g(function)i(with)f(the)h(same)e(name)h(using)g
-(an)g(iden)n(tical)g(in)n(v)n(o)r(cation)f(of)h(astIn)n(traReg.)35
-b(If)427 4389 y(no)24 b(suc)n(h)g(registration)e(has)i(b)r(een)g(p)r
-(erformed,)g(then)h(attempting)f(to)g(read)g(the)g(external)f(represen)
-n(tation)427 4489 y(will)28 b(result)f(in)h(an)g(error.)340
-4632 y Fi(\017)45 b Fj(Y)-7 b(ou)36 b(ma)n(y)f(use)g(astIn)n(traReg)f
-(to)i(register)e(a)h(transformation)f(function)j(with)f(the)g(same)f
-(name)g(more)427 4732 y(than)30 b(once,)f(but)h(only)f(if)h(the)g
-(argumen)n(ts)e(supplied)h(are)g(iden)n(tical)g(on)g(eac)n(h)g(o)r
-(ccasion)f(\(i.e)h(there)h(is)f(no)427 4831 y(w)n(a)n(y)e(of)h(c)n
-(hanging)e(things)i(once)f(a)g(function)i(has)e(b)r(een)h(successfully)
-f(registered)g(under)g(a)h(giv)n(en)f(name,)427 4931
-y(and)32 b(attempting)h(to)e(do)h(so)g(will)g(result)g(in)g(an)g
-(error\).)48 b(This)32 b(feature)g(simply)g(allo)n(ws)f(registration)f
-(to)427 5031 y(b)r(e)25 b(p)r(erformed)e(indep)r(enden)n(tly)-7
-b(,)26 b(but)f(consisten)n(tly)-7 b(,)24 b(at)g(sev)n(eral)e(places)i
-(within)h(y)n(our)d(program,)h(without)427 5130 y(ha)n(ving)k(to)g(c)n
-(hec)n(k)g(whether)g(it)h(has)g(already)e(b)r(een)i(done.)340
-5274 y Fi(\017)45 b Fj(If)30 b(an)f(error)e(o)r(ccurs)i(in)g(the)h
-(transformation)e(function,)i(this)f(ma)n(y)g(b)r(e)h(indicated)f(b)n
-(y)g(setting)h(the)f(AST)427 5373 y(error)h(status)i(to)f(an)h(error)e
-(v)-5 b(alue)31 b(\(using)h(astSetStatus\))g(b)r(efore)g(it)g(returns.)
-49 b(This)31 b(will)h(immediately)427 5473 y(terminate)k(the)h(curren)n
-(t)f(AST)g(op)r(eration.)62 b(The)37 b(error)d(v)-5 b(alue)37
-b(AST)p Ft(__)p Fj(ITFER)e(is)h(a)n(v)-5 b(ailable)35
-b(for)h(this)427 5573 y(purp)r(ose,)27 b(but)h(other)f(v)-5
-b(alues)28 b(ma)n(y)e(also)h(b)r(e)h(used)f(\(e.g.)37
-b(if)28 b(y)n(ou)f(wish)g(to)h(distinguish)f(di\013eren)n(t)h(t)n(yp)r
-(es)g(of)427 5672 y(error\).)p eop end
-%%Page: 256 266
-TeXDict begin 256 265 bop 0 52 a FF(256)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)-2 351 y Fd(T)-8 b(ransformation)33
-b(Flags)n(:)227 497 y Fj(The)19 b(follo)n(wing)f(\015ags)f(are)h
-(de\014ned)h(in)g(the)g(\\ast.h")f(header)g(\014le)g(and)h(allo)n(w)f
-(y)n(ou)g(to)g(pro)n(vide)g(further)g(information)227
-597 y(ab)r(out)27 b(the)g(nature)f(of)h(the)g(transformation)e
-(function.)37 b(Ha)n(ving)26 b(selected)g(the)h(set)g(of)f(\015ags)g
-(whic)n(h)h(apply)-7 b(,)26 b(y)n(ou)227 697 y(should)i(supply)f(the)h
-(bit)n(wise)g(OR)f(of)h(their)f(v)-5 b(alues)27 b(as)g(the)h
-(\\\015ags")e(argumen)n(t)h(to)g(astIn)n(traReg.)340
-968 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(NOFWD:)38 b(If)g(this)f(\015ag)g
-(is)g(set,)i(it)f(indicates)f(that)h(the)f(transformation)f(function)i
-(do)r(es)f(not)427 1068 y(implemen)n(t)24 b(a)f(forw)n(ard)e(co)r
-(ordinate)h(transformation.)33 b(In)24 b(this)f(case,)g(an)n(y)f(In)n
-(traMap)g(whic)n(h)h(uses)g(it)g(will)427 1167 y(ha)n(v)n(e)i(a)g(T)-7
-b(ranF)g(orw)n(ard)22 b(attribute)k(v)-5 b(alue)25 b(of)h(zero)e(and)h
-(the)h(transformation)e(function)i(itself)g(will)g(not)f(b)r(e)427
-1267 y(in)n(v)n(ok)n(ed)i(with)j(its)e(\\forw)n(ard")e(argumen)n(t)i
-(set)g(to)h(a)f(non-zero)f(v)-5 b(alue.)40 b(By)28 b(default,)i(it)f
-(is)f(assumed)g(that)427 1367 y(a)f(forw)n(ard)f(transformation)g(is)i
-(pro)n(vided.)340 1503 y Fi(\017)45 b Fj(AST)p Ft(__)p
-Fj(NOINV:)c(If)h(this)f(\015ag)f(is)h(set,)j(it)d(indicates)g(that)g
-(the)g(transformation)f(function)h(do)r(es)g(not)427
-1603 y(implemen)n(t)34 b(an)g(in)n(v)n(erse)e(co)r(ordinate)g
-(transformation.)53 b(In)34 b(this)g(case,)g(an)n(y)f(In)n(traMap)g
-(whic)n(h)g(uses)g(it)427 1702 y(will)26 b(ha)n(v)n(e)e(a)h(T)-7
-b(ranIn)n(v)n(erse)24 b(attribute)h(v)-5 b(alue)26 b(of)f(zero)g(and)g
-(the)h(transformation)e(function)i(itself)g(will)g(not)427
-1802 y(b)r(e)g(in)n(v)n(ok)n(ed)d(with)i(its)h(\\forw)n(ard")c(argumen)
-n(t)i(set)h(to)f(zero.)35 b(By)25 b(default,)h(it)f(is)g(assumed)f
-(that)h(an)g(in)n(v)n(erse)427 1901 y(transformation)h(is)i(pro)n
-(vided.)340 2038 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SIMPFI:)24
-b(Y)-7 b(ou)25 b(ma)n(y)e(set)i(this)g(\015ag)e(if)i(applying)f(the)h
-(transformation)e(function's)h(forw)n(ard)f(co)r(or-)427
-2137 y(dinate)k(transformation,)f(follo)n(w)n(ed)g(immediately)i(b)n(y)
-e(the)i(matc)n(hing)f(in)n(v)n(erse)e(transformation,)h(should)427
-2237 y(alw)n(a)n(ys)j(restore)f(the)j(original)e(set)h(of)g(co)r
-(ordinates.)44 b(It)30 b(indicates)g(that)h(AST)g(ma)n(y)e(replace)g
-(suc)n(h)h(a)g(se-)427 2337 y(quence)19 b(of)h(op)r(erations)e(b)n(y)h
-(an)g(iden)n(tit)n(y)g(Mapping)g(\(a)g(UnitMap\))i(if)e(it)h(is)f
-(encoun)n(tered)g(while)g(simplifying)427 2436 y(a)26
-b(comp)r(ound)g(Mapping)g(\(e.g.)37 b(using)26 b(astSimplify\).)37
-b(It)26 b(is)g(not)h(necessary)d(that)j(b)r(oth)g(transformations)427
-2536 y(ha)n(v)n(e)g(actually)g(b)r(een)h(implemen)n(ted.)340
-2672 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SIMPIF:)27 b(Y)-7
-b(ou)27 b(ma)n(y)f(set)h(this)g(\015ag)f(if)i(applying)e(the)h
-(transformation)e(function's)j(in)n(v)n(erse)d(co)r(or-)427
-2772 y(dinate)f(transformation,)f(follo)n(w)n(ed)g(immediately)g(b)n(y)
-h(the)g(matc)n(hing)f(forw)n(ard)f(transformation,)h(should)427
-2872 y(alw)n(a)n(ys)29 b(restore)f(the)j(original)e(set)h(of)g(co)r
-(ordinates.)44 b(It)30 b(indicates)g(that)h(AST)g(ma)n(y)e(replace)g
-(suc)n(h)h(a)g(se-)427 2971 y(quence)19 b(of)h(op)r(erations)e(b)n(y)h
-(an)g(iden)n(tit)n(y)g(Mapping)g(\(a)g(UnitMap\))i(if)e(it)h(is)f
-(encoun)n(tered)g(while)g(simplifying)427 3071 y(a)26
-b(comp)r(ound)g(Mapping)g(\(e.g.)37 b(using)26 b(astSimplify\).)37
-b(It)26 b(is)g(not)h(necessary)d(that)j(b)r(oth)g(transformations)427
-3170 y(ha)n(v)n(e)g(actually)g(b)r(een)h(implemen)n(ted.)p
-0 3377 3780 12 v 0 3507 a Fz(astIn)l(v)l(ert)917 b Fe(In)m(v)m(ert)37
-b(a)i(Mapping)914 b Fz(astIn)l(v)l(ert)0 3703 y Fd(Description:)44
-b Fj(This)28 b(function)g(in)n(v)n(erts)e(a)i(Mapping)f(b)n(y)g(rev)n
-(ersing)e(the)j(b)r(o)r(olean)f(sense)g(of)h(its)g(In)n(v)n(ert)e
-(attribute.)37 b(If)227 3803 y(this)d(attribute)g(is)f(zero)g(\(the)h
-(default\),)i(the)e(Mapping)f(will)h(transform)e(co)r(ordinates)g(in)i
-(the)g(w)n(a)n(y)e(sp)r(eci\014ed)227 3902 y(when)f(it)h(w)n(as)e
-(created.)46 b(If)31 b(it)g(is)g(non-zero,)f(the)h(input)h(and)f
-(output)g(co)r(ordinates)f(will)h(b)r(e)g(in)n(ter-c)n(hanged)e(so)227
-4002 y(that)24 b(the)f(direction)g(of)g(the)g(Mapping)g(is)g(rev)n
-(ersed.)34 b(This)23 b(will)g(cause)g(it)g(to)g(displa)n(y)g(the)g(in)n
-(v)n(erse)f(of)h(its)g(original)227 4101 y(b)r(eha)n(viour.)0
-4258 y Fd(Synopsis:)121 b Ft(void)42 b(astInvert\()d(AstMapping)h
-Fi(\003)p Ft(this)h(\))0 4414 y Fd(P)m(arameters:)259
-4558 y(this)427 4657 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)p
-0 4864 V 0 4995 a Fz(astIsA)p Fc(<)p Fz(Class)p Fc(>)175
-b Fe(T)-10 b(est)38 b(mem)m(b)s(ership)g(of)g(a)g(class)h(b)m(y)f(an)
-1716 5110 y(Ob)7 b(ject)2916 4995 y Fz(astIsA)p Fc(<)p
-Fz(Class)p Fc(>)0 5306 y Fd(Description:)44 b Fj(This)26
-b(is)f(a)g(family)g(of)g(functions)h(whic)n(h)f(test)g(whether)h(an)f
-(Ob)5 b(ject)25 b(is)g(a)g(mem)n(b)r(er)g(of)g(the)h(class)e(called)227
-5406 y Fl(<)p Fj(Class)p Fl(>)p Fj(,)i(or)h(of)g(an)n(y)g(class)g
-(deriv)n(ed)g(from)g(it.)0 5562 y Fd(Synopsis:)121 b
-Ft(int)42 b(astIsA)p Fl(<)p Ft(Class)p Fl(>)p Ft(\()c(const)j(Ast)p
-Fl(<)p Ft(Class)p Fl(>)f Fi(\003)p Ft(this)h(\))0 5718
-y Fd(P)m(arameters:)p eop end
-%%Page: 257 267
-TeXDict begin 257 266 bop 3643 52 a FF(257)259 351 y
-Fd(this)427 451 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)0 614 y Fd(Class)31 b(Applicabilit)m(y:)259 751
-y(Ob)5 b(ject)427 851 y Fj(These)28 b(functions)f(apply)h(to)f(all)h
-(Ob)5 b(jects.)0 1013 y Fd(Returned)32 b(V)-8 b(alue:)259
-1151 y(astIsA)p Fl(<)p Fd(Class)p Fl(>)p Fd(\(\))427
-1250 y Fj(One)21 b(if)h(the)g(Ob)5 b(ject)22 b(b)r(elongs)f(to)g(the)h
-(class)e(called)h Fl(<)p Fj(Class)p Fl(>)f Fj(\(or)h(to)h(a)f(class)f
-(deriv)n(ed)h(from)g(it\),)j(otherwise)427 1350 y(zero.)0
-1513 y Fd(Examples:)227 1651 y Fq(member)46 b(=)i(astIsAFrame\()c(obj)j
-(\);)427 1750 y Fj(T)-7 b(ests)31 b(whether)f(Ob)5 b(ject)31
-b Ft(")p Fj(ob)5 b(j)p Ft(")30 b Fj(is)g(a)g(mem)n(b)r(er)h(of)g(the)g
-(F)-7 b(rame)30 b(class,)h(or)e(of)i(an)n(y)f(class)g(deriv)n(ed)g
-(from)g(a)427 1850 y(F)-7 b(rame.)0 2012 y Fd(Notes:)340
-2296 y Fi(\017)45 b Fj(Ev)n(ery)31 b(AST)i(class)e(pro)n(vides)g(a)h
-(function)h(\(astIsA)p Fl(<)p Fj(Class)p Fl(>)p Fj(\))e(of)h(this)h
-(form,)g(where)f Fl(<)p Fj(Class)p Fl(>)f Fj(should)427
-2395 y(b)r(e)d(replaced)f(b)n(y)g(the)h(class)f(name.)340
-2529 y Fi(\017)45 b Fj(This)30 b(function)h(attempts)f(to)g(execute)g
-(ev)n(en)g(if)g(the)g(AST)h(error)d(status)i(is)g(set)g(on)f(en)n(try)
--7 b(,)31 b(although)e(no)427 2628 y(further)f(error)d(rep)r(ort)i
-(will)h(b)r(e)g(made)f(if)i(it)f(subsequen)n(tly)f(fails)g(under)h
-(these)f(circumstances.)340 2762 y Fi(\017)45 b Fj(A)31
-b(v)-5 b(alue)31 b(of)g(zero)f(will)h(b)r(e)g(returned)g(if)g(this)g
-(function)h(should)e(fail)h(for)g(an)n(y)f(reason.)45
-b(In)31 b(particular,)f(it)427 2861 y(will)e(fail)g(if)g(the)g(p)r(oin)
-n(ter)f(supplied)h(do)r(es)f(not)h(iden)n(tify)g(an)f(Ob)5
-b(ject)28 b(of)f(an)n(y)g(sort.)p 0 3061 3780 12 v 0
-3192 a Fz(astKeyMap)760 b Fe(Create)37 b(a)h(KeyMap)758
-b Fz(astKeyMap)0 3382 y Fd(Description:)44 b Fj(This)19
-b(function)g(creates)f(a)g(new)h(empt)n(y)g(KeyMap)e(and)i(optionally)f
-(initialises)g(its)h(attributes.)34 b(En)n(tries)227
-3481 y(can)27 b(then)i(b)r(e)f(added)f(to)h(the)f(KeyMap)g(using)g(the)
-h(astMapPut0)p Fl(<)p Fj(X)p Fl(>)e Fj(and)i(astMapPut1)p
-Fl(<)p Fj(X)p Fl(>)d Fj(functions.)227 3606 y(The)30
-b(KeyMap)f(class)g(is)h(used)g(to)g(store)f(a)g(set)h(of)g(v)-5
-b(alues)29 b(with)i(asso)r(ciated)d(k)n(eys)h(whic)n(h)h(iden)n(tify)h
-(the)f(v)-5 b(alues.)227 3706 y(The)32 b(k)n(eys)e(are)g(strings)g
-(\(case-sensitiv)n(e,)h(trailing)f(spaces)g(are)g(ignored\),)i(and)f
-(the)g(data)g(t)n(yp)r(e)g(of)g(the)h(v)-5 b(alues)227
-3806 y(can)27 b(b)r(e)h(in)n(teger,)f(\015oating)f(p)r(oin)n(t,)i(c)n
-(haracter)d(string)i(or)g(AST)g(Ob)5 b(ject)28 b(p)r(oin)n(ter.)36
-b(Eac)n(h)26 b(v)-5 b(alue)27 b(can)g(b)r(e)h(a)f(scalar)227
-3905 y(or)j(a)g(one-dimensional)g(v)n(ector.)44 b(A)31
-b(KeyMap)f(is)h(conceptually)f(similar)f(to)i(a)f(Mapping)g(in)h(that)g
-(a)g(KeyMap)227 4005 y(transforms)e(an)h(input)h(in)n(to)f(an)g(output)
-h(-)f(the)g(input)h(is)g(the)f(k)n(ey)-7 b(,)31 b(and)f(the)g(output)h
-(is)f(the)h(v)-5 b(alue)30 b(asso)r(ciated)227 4105 y(with)22
-b(the)h(k)n(ey)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)21 b(this)h(is)f(only)h(a)
-f(conceptual)g(similarit)n(y)-7 b(,)22 b(and)g(it)g(should)g(b)r(e)g
-(noted)f(that)h(the)h(KeyMap)227 4204 y(class)28 b(inherits)h(from)g
-(the)g(Ob)5 b(ject)29 b(class)f(rather)g(than)h(the)h(Mapping)e(class.)
-40 b(The)29 b(metho)r(ds)h(of)f(the)g(Mapping)227 4304
-y(class)e(cannot)g(b)r(e)h(used)g(with)g(a)f(KeyMap.)0
-4454 y Fd(Synopsis:)121 b Ft(AstKeyMap)40 b Fi(\003)p
-Ft(astKeyMap\()f(const)i(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 4605 y Fd(P)m(arameters:)259 4742 y(options)427
-4842 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)g(string)f
-(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 4941 y(assignmen)n(ts)d(to)g(b)r(e)i(used)e(for)h
-(initialising)f(the)i(new)e(KeyMap.)36 b(The)26 b(syn)n(tax)f(used)g
-(is)h(iden)n(tical)g(to)f(that)427 5041 y(for)h(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 5140 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 5274 y Fd(...)427 5373 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 5473 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5573 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5672 y Fj(function\).)p
-eop end
-%%Page: 258 268
-TeXDict begin 258 267 bop 0 52 a FF(258)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Returned)i(V)-8
-b(alue:)259 482 y(astKeyMap\(\))427 582 y Fj(A)28 b(p)r(oin)n(ter)f(to)
-h(the)g(new)g(KeyMap.)0 739 y Fd(Notes:)340 1016 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1116 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 1272 y Fd(Status)33 b(Handling)n(:)227 1418
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-1518 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1617 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1806 3780
-12 v 0 1938 a Fz(astLinearAppro)l(x)515 b Fe(Obtain)37
-b(a)i(linear)1138 2037 y(appro)m(ximation)34 b(to)j(a)h(Mapping,)1540
-2152 y(if)h(appropriate)2794 1938 y Fz(astLinearAppro)l(x)0
-2330 y Fd(Description:)44 b Fj(This)38 b(function)g(tests)g(the)f(forw)
-n(ard)f(co)r(ordinate)h(transformation)e(implemen)n(ted)k(b)n(y)e(a)g
-(Mapping)227 2430 y(o)n(v)n(er)28 b(a)i(giv)n(en)f(range)f(of)i(input)g
-(co)r(ordinates.)42 b(If)30 b(the)h(transformation)d(is)h(found)h(to)g
-(b)r(e)g(linear)f(to)h(a)f(sp)r(eci\014ed)227 2530 y(lev)n(el)g(of)h
-(accuracy)-7 b(,)29 b(then)h(an)f(arra)n(y)e(of)j(\014t)g(co)r
-(e\016cien)n(ts)f(is)h(returned.)42 b(These)30 b(ma)n(y)f(b)r(e)h(used)
-f(to)h(implemen)n(t)g(a)227 2629 y(linear)23 b(appro)n(ximation)e(to)i
-(the)h(Mapping's)e(forw)n(ard)g(transformation)f(within)j(the)g(sp)r
-(eci\014ed)f(range)f(of)h(output)227 2729 y(co)r(ordinates.)36
-b(If)28 b(the)g(transformation)e(is)h(not)h(su\016cien)n(tly)f(linear,)
-g(no)h(co)r(e\016cien)n(ts)f(are)f(returned.)0 2873 y
-Fd(Synopsis:)121 b Ft(int)42 b(astLinearApprox\()37 b(AstMapping)j
-Fi(\003)p Ft(this,)h(const)g(double)g Fi(\003)p Ft(lbnd,)g(const)h
-(double)f Fi(\003)p Ft(ubnd,)227 2973 y(double)g(tol,)h(double)f
-Fi(\003)p Ft(fit)h(\))0 3117 y Fd(P)m(arameters:)259
-3248 y(this)427 3348 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259
-3475 y Fd(lbnd)427 3575 y Fj(P)n(oin)n(ter)d(to)h(an)f(arra)n(y)f(of)i
-(doubles)g(con)n(taining)f(the)h(lo)n(w)n(er)f(b)r(ounds)h(of)g(a)g(b)r
-(o)n(x)f(de\014ned)i(within)f(the)h(input)427 3674 y(co)r(ordinate)k
-(system)h(of)g(the)g(Mapping.)50 b(The)32 b(n)n(um)n(b)r(er)f(of)h
-(elemen)n(ts)g(in)g(this)g(arra)n(y)e(should)i(equal)f(the)427
-3774 y(v)-5 b(alue)25 b(of)f(the)h(Mapping's)f(Nin)h(attribute.)36
-b(This)25 b(b)r(o)n(x)f(should)g(sp)r(ecify)h(the)g(region)e(o)n(v)n
-(er)g(whic)n(h)h(linearit)n(y)427 3874 y(is)k(required.)259
-4001 y Fd(ubnd)427 4101 y Fj(P)n(oin)n(ter)f(to)h(an)g(arra)n(y)e(of)j
-(doubles)f(con)n(taining)f(the)i(upp)r(er)f(b)r(ounds)h(of)f(the)h(b)r
-(o)n(x)f(sp)r(ecifying)g(the)h(region)427 4200 y(o)n(v)n(er)d(whic)n(h)
-i(linearit)n(y)e(is)i(required.)259 4328 y Fd(tol)427
-4428 y Fj(The)d(maxim)n(um)f(p)r(ermitted)i(deviation)e(from)g
-(linearit)n(y)-7 b(,)24 b(expressed)g(as)g(a)g(p)r(ositiv)n(e)g
-(Cartesian)f(displace-)427 4527 y(men)n(t)30 b(in)f(the)h(output)g(co)r
-(ordinate)e(space)h(of)g(the)h(Mapping.)42 b(If)29 b(a)g(linear)g
-(\014t)h(to)f(the)h(forw)n(ard)d(transfor-)427 4627 y(mation)j(of)f
-(the)h(Mapping)g(deviates)f(from)g(the)h(true)g(transformation)e(b)n(y)
-h(more)g(than)h(this)g(amoun)n(t)f(at)427 4727 y(an)n(y)e(p)r(oin)n(t)h
-(whic)n(h)f(is)h(tested,)g(then)g(no)f(\014t)h(co)r(e\016cien)n(ts)g
-(will)f(b)r(e)h(returned.)259 4854 y Fd(\014t)427 4954
-y Fj(P)n(oin)n(ter)23 b(to)i(an)g(arra)n(y)d(of)j(doubles)f(in)i(whic)n
-(h)e(to)h(return)f(the)i(co-e\016cien)n(ts)d(of)i(the)g(linear)f(appro)
-n(ximation)427 5053 y(to)40 b(the)g(sp)r(eci\014ed)f(transformation.)72
-b(This)39 b(arra)n(y)e(should)j(ha)n(v)n(e)e(at)h(least)h
-Ft(")p Fj(\()f(Nin)h(+)f(1)h(\))g Fi(\003)f Fj(Nout)p
-Ft(")p Fj(,)427 5153 y(elemen)n(ts.)45 b(The)31 b(\014rst)f(Nout)g
-(elemen)n(ts)h(hold)f(the)g(constan)n(t)g(o\013sets)g(for)g(the)h
-(transformation)d(outputs.)427 5253 y(The)k(remaining)f(elemen)n(ts)h
-(hold)g(the)h(gradien)n(ts.)48 b(So)32 b(if)g(the)h(Mapping)e(has)h(2)f
-(inputs)i(and)f(3)f(outputs)427 5352 y(the)d(linear)f(appro)n(ximation)
-f(to)h(the)h(forw)n(ard)e(transformation)g(is:)427 5466
-y(X)p Ft(_)p Fj(out)i(=)f(\014t[0])h(+)f(\014t[3])p Fi(\003)p
-Fj(X)p Ft(_)p Fj(in)g(+)g(\014t[4])p Fi(\003)p Fj(Y)p
-Ft(_)p Fj(in)427 5579 y(Y)p Ft(_)p Fj(out)h(=)f(\014t[1])h(+)f
-(\014t[5])p Fi(\003)p Fj(X)p Ft(_)p Fj(in)g(+)g(\014t[6])p
-Fi(\003)p Fj(Y)p Ft(_)p Fj(in)427 5693 y(Z)p Ft(_)p Fj(out)g(=)g
-(\014t[2])h(+)f(\014t[7])p Fi(\003)p Fj(X)p Ft(_)p Fj(in)h(+)f
-(\014t[8])p Fi(\003)p Fj(Y)p Ft(_)p Fj(in)p eop end
-%%Page: 259 269
-TeXDict begin 259 268 bop 3643 52 a FF(259)0 351 y Fd(Returned)32
-b(V)-8 b(alue:)259 472 y(astLinearAppro)m(x\(\))427 572
-y Fj(If)33 b(the)f(forw)n(ard)f(transformation)f(is)i(su\016cien)n(tly)
-g(linear,)h(a)e(non-zero)g(v)-5 b(alue)32 b(is)g(returned.)49
-b(Otherwise)427 672 y(zero)27 b(is)g(returned)g(and)h(the)g(\014t)g
-(co-e\016cien)n(ts)e(are)h(set)h(to)f(AST)p Ft(__)p Fj(BAD.)0
-818 y Fd(Notes:)340 1085 y Fi(\017)45 b Fj(This)31 b(function)g(\014ts)
-g(the)g(Mapping's)g(forw)n(ard)e(transformation.)44 b(T)-7
-b(o)31 b(\014t)g(the)g(in)n(v)n(erse)e(transformation,)427
-1185 y(the)f(Mapping)f(should)h(b)r(e)g(in)n(v)n(erted)f(using)g(astIn)
-n(v)n(ert)f(b)r(efore)h(in)n(v)n(oking)g(this)g(function.)340
-1302 y Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r
-(e)g(returned)g(if)g(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j
-(the)f(global)f(error)f(status)h(set,)h(or)427 1402 y(if)i(it)g(should)
-g(fail)f(for)h(an)n(y)e(reason.)p 0 1571 3780 12 v 0
-1702 a Fz(astLo)t(c)l(k)239 b Fe(Lo)s(c)m(k)39 b(an)g(Ob)7
-b(ject)37 b(for)h(exclusiv)m(e)g(use)h(b)m(y)g(the)f(calling)1724
-1817 y(thread)3330 1702 y Fz(astLo)t(c)l(k)0 1952 y Fd(Description:)44
-b Fj(The)35 b(thread-safe)e(public)i(in)n(terface)e(to)h(AST)h(is)f
-(designed)g(so)g(that)g(an)g(error)f(is)h(rep)r(orted)g(if)g(an)n(y)227
-2052 y(thread)27 b(attempts)h(to)f(use)g(an)h(Ob)5 b(ject)27
-b(that)g(it)h(has)f(not)g(previously)g(lo)r(c)n(k)n(ed)f(for)h(its)h(o)
-n(wn)e(exclusiv)n(e)h(use)g(using)227 2151 y(this)34
-b(function.)56 b(When)34 b(an)f(Ob)5 b(ject)34 b(is)f(created,)i(it)f
-(is)f(initially)h(lo)r(c)n(k)n(ed)f(b)n(y)g(the)h(thread)f(that)h
-(creates)f(it,)i(so)227 2251 y(newly)27 b(created)g(ob)5
-b(jects)26 b(do)h(not)h(need)f(to)g(b)r(e)g(explicitly)h(lo)r(c)n(k)n
-(ed.)36 b(Ho)n(w)n(ev)n(er,)25 b(if)j(an)f(Ob)5 b(ject)27
-b(p)r(oin)n(ter)f(is)h(passed)227 2350 y(to)k(another)f(thread,)h(the)g
-(original)e(thread)i(m)n(ust)f(\014rst)h(unlo)r(c)n(k)f(it)h(\(using)g
-(astUnlo)r(c)n(k\))g(and)f(the)h(new)g(thread)227 2450
-y(m)n(ust)d(then)g(lo)r(c)n(k)f(it)h(\(using)g(astLo)r(c)n(k\))e(b)r
-(efore)i(the)g(new)f(thread)g(can)h(use)f(the)h(Ob)5
-b(ject.)227 2567 y(The)20 b Ft(")p Fj(w)n(ait)p Ft(")e
-Fj(parameter)g(determines)i(what)f(happ)r(ens)h(if)g(the)g(supplied)g
-(Ob)5 b(ject)19 b(is)h(curen)n(tly)f(lo)r(c)n(k)n(ed)f(b)n(y)i(another)
-227 2667 y(thread)27 b(when)h(this)g(function)g(is)g(in)n(v)n(ok)n(ed.)
-0 2801 y Fd(Synopsis:)121 b Ft(void)42 b(astLock\()e(AstObject)g
-Fi(\003)p Ft(this,)h(int)h(wait)g(\))0 2935 y Fd(P)m(arameters:)259
-3056 y(this)427 3155 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject)27 b(to)h(b)r(e)g(lo)r(c)n(k)n(ed.)259 3273 y
-Fd(w)m(ait)427 3373 y Fj(If)35 b(the)g(Ob)5 b(ject)34
-b(is)g(curen)n(tly)g(lo)r(c)n(k)n(ed)f(b)n(y)h(another)g(thread)f(then)
-i(this)g(function)g(will)f(either)g(rep)r(ort)g(an)427
-3472 y(error)c(or)g(blo)r(c)n(k.)47 b(If)32 b(a)e(non-zero)g(v)-5
-b(alue)31 b(is)g(supplied)h(for)e Ft(")p Fj(w)n(ait)p
-Ft(")p Fj(,)h(the)h(calling)e(thread)h(w)n(aits)g(un)n(til)g(the)427
-3572 y(ob)5 b(ject)36 b(is)g(a)n(v)-5 b(ailable)35 b(for)h(it)g(to)g
-(use.)62 b(Otherwise,)38 b(an)e(error)e(is)i(rep)r(orted)f(and)h(the)h
-(function)f(returns)427 3671 y(immediately)28 b(without)g(lo)r(c)n
-(king)f(the)h(Ob)5 b(ject.)0 3818 y Fd(Class)31 b(Applicabilit)m(y:)259
-3939 y(Ob)5 b(ject)427 4039 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 4185 y Fd(Notes:)340 4452 y Fi(\017)45
-b Fj(The)28 b(astAnn)n(ul)g(function)h(is)f(exceptional)f(in)i(that)f
-(it)h(can)e(b)r(e)i(used)f(on)g(p)r(oin)n(ters)f(for)h(Ob)5
-b(jects)27 b(that)i(are)427 4552 y(not)f(curren)n(tly)e(lo)r(c)n(k)n
-(ed)h(b)n(y)g(the)h(calling)f(thread.)37 b(All)28 b(other)f(AST)h
-(functions)g(will)g(rep)r(ort)e(an)i(error.)340 4670
-y Fi(\017)45 b Fj(The)28 b(Lo)r(c)n(k)n(ed)e(ob)5 b(ject)28
-b(will)g(b)r(elong)f(to)g(the)h(curren)n(t)f(AST)h(con)n(text.)340
-4787 y Fi(\017)45 b Fj(This)28 b(function)g(returns)f(without)h(action)
-f(if)h(the)g(Ob)5 b(ject)28 b(is)f(already)f(lo)r(c)n(k)n(ed)h(b)n(y)g
-(the)h(calling)f(thread.)340 4905 y Fi(\017)45 b Fj(If)32
-b(sim)n(ultaneous)f(use)h(of)g(the)g(same)f(ob)5 b(ject)32
-b(is)f(required)g(b)n(y)g(t)n(w)n(o)g(or)g(more)g(threads,)h(astCop)n
-(y)f(should)427 5004 y(b)r(e)e(used)f(to)h(to)f(pro)r(duce)g(a)g(deep)g
-(cop)n(y)f(of)i(the)g(Ob)5 b(ject)28 b(for)f(eac)n(h)h(thread.)39
-b(Eac)n(h)27 b(cop)n(y)g(should)h(then)h(b)r(e)427 5104
-y(unlo)r(c)n(k)n(ed)j(b)n(y)h(the)g(paren)n(t)f(thread)g(\(i.e.)53
-b(the)33 b(thread)f(that)h(created)f(the)h(cop)n(y\),)g(and)g(then)g
-(lo)r(c)n(k)n(ed)f(b)n(y)427 5203 y(the)c(c)n(hild)g(thread)f(\(i.e.)37
-b(the)28 b(thread)f(that)h(w)n(an)n(ts)f(to)g(use)h(the)g(cop)n(y\).)
-340 5321 y Fi(\017)45 b Fj(This)28 b(function)g(is)f(only)h(a)n(v)-5
-b(ailable)26 b(in)i(the)g(C)f(in)n(terface.)340 5439
-y Fi(\017)45 b Fj(This)23 b(function)g(returns)g(without)g(action)f(if)
-h(the)h(AST)f(library)e(has)i(b)r(een)g(built)g(without)h(POSIX)e
-(thread)427 5538 y(supp)r(ort)35 b(\(i.e.)60 b(the)35
-b Ft(")p Fj(-with-pthreads)p Ft(")e Fj(option)i(w)n(as)f(not)h(sp)r
-(eci\014ed)g(when)h(running)e(the)i Ft(")p Fj(con\014gure)p
-Ft(")427 5638 y Fj(script\).)p eop end
-%%Page: 260 270
-TeXDict begin 260 269 bop 0 52 a FF(260)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 482 a Fz(astLutMap)799 b Fe(Create)37 b(a)i(LutMap)798
-b Fz(astLutMap)0 667 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(LutMap)h(and)g(optionally)e
-(initialises)i(its)f(attributes.)227 790 y(A)i(LutMap)g(is)g(a)f(sp)r
-(ecialised)h(form)f(of)h(Mapping)f(whic)n(h)h(transforms)f
-(1-dimensional)f(co)r(ordinates)g(b)n(y)i(using)227 890
-y(linear)d(in)n(terp)r(olation)g(in)h(a)g(lo)r(okup)f(table.)37
-b(Eac)n(h)25 b(input)j(co)r(ordinate)e(v)-5 b(alue)26
-b(is)h(\014rst)g(scaled)f(to)g(giv)n(e)g(the)i(index)227
-990 y(of)e(an)g(en)n(try)f(in)i(the)f(table)g(b)n(y)g(subtracting)f(a)h
-(starting)f(v)-5 b(alue)26 b(\(the)h(input)f(co)r(ordinate)f(corresp)r
-(onding)f(to)i(the)227 1089 y(\014rst)31 b(table)g(en)n(try\))f(and)h
-(dividing)g(b)n(y)f(an)h(incremen)n(t)f(\(the)i(di\013erence)f(in)g
-(input)g(co)r(ordinate)f(v)-5 b(alue)31 b(b)r(et)n(w)n(een)227
-1189 y(adjacen)n(t)c(table)h(en)n(tries\).)227 1312 y(The)j(resulting)g
-(index)g(will)g(usually)g(con)n(tain)f(a)h(fractional)f(part,)i(so)e
-(the)i(output)f(co)r(ordinate)f(v)-5 b(alue)31 b(is)g(then)227
-1412 y(generated)f(b)n(y)g(in)n(terp)r(olating)f(linearly)h(b)r(et)n(w)
-n(een)g(the)h(appropriate)d(en)n(tries)i(in)h(the)f(table.)46
-b(If)31 b(the)f(index)h(lies)227 1512 y(outside)h(the)h(range)e(of)h
-(the)h(table,)g(linear)e(extrap)r(olation)g(is)h(used)h(based)e(on)h
-(the)h(t)n(w)n(o)e(nearest)h(en)n(tries)f(\(i.e.)227
-1611 y(the)d(t)n(w)n(o)f(en)n(tries)g(at)g(the)h(start)f(or)g(end)h(of)
-g(the)g(table,)f(as)g(appropriate\).)227 1735 y(If)e(the)g(lo)r(okup)e
-(table)i(en)n(tries)e(increase)g(or)h(decrease)f(monotonically)-7
-b(,)23 b(then)i(the)g(in)n(v)n(erse)e(transformation)f(ma)n(y)227
-1835 y(also)27 b(b)r(e)h(p)r(erformed.)0 1982 y Fd(Synopsis:)121
-b Ft(AstLutMap)40 b Fi(\003)p Ft(astLutMap\()f(int)j(nlut,)g(const)f
-(double)g(lut[],)g(double)g(start,)g(double)h(inc,)227
-2082 y(const)g(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 2229 y Fd(P)m(arameters:)259 2364 y(nlut)427 2463
-y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g(lo)r(okup)
-f(table.)37 b(This)27 b(v)-5 b(alue)28 b(m)n(ust)f(b)r(e)h(at)g(least)f
-(2.)259 2594 y Fd(lut)427 2694 y Fj(An)h(arra)n(y)e(con)n(taining)g
-(the)i Ft(")p Fj(nlut)p Ft(")g Fj(lo)r(okup)f(table)g(en)n(tries.)259
-2825 y Fd(start)427 2924 y Fj(The)h(input)g(co)r(ordinate)f(v)-5
-b(alue)27 b(whic)n(h)h(corresp)r(onds)d(to)j(the)g(\014rst)f(lo)r(okup)
-g(table)h(en)n(try)-7 b(.)259 3055 y Fd(inc)427 3155
-y Fj(The)24 b(lo)r(okup)g(table)f(spacing)g(\(the)i(incremen)n(t)f(in)g
-(input)g(co)r(ordinate)f(v)-5 b(alue)24 b(b)r(et)n(w)n(een)g(successiv)
-n(e)e(lo)r(okup)427 3254 y(table)28 b(en)n(tries\).)36
-b(This)28 b(v)-5 b(alue)27 b(ma)n(y)g(b)r(e)h(p)r(ositiv)n(e)f(or)g
-(negativ)n(e,)g(but)h(m)n(ust)g(not)f(b)r(e)h(zero.)259
-3385 y Fd(options)427 3485 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3584 y(assignmen)n(ts)e
-(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(LutMap.)37
-b(The)26 b(syn)n(tax)g(used)h(is)g(iden)n(tical)g(to)f(that)427
-3684 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3784 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3915
-y Fd(...)427 4014 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4114 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4213 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4313 y Fj(function\).)0 4473
-y Fd(Returned)32 b(V)-8 b(alue:)259 4607 y(astLutMap\(\))427
-4707 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(LutMap.)0
-4867 y Fd(Notes:)340 5147 y Fi(\017)45 b Fj(If)38 b(the)f(en)n(tries)f
-(in)h(the)h(lo)r(okup)e(table)h(either)g(increase)e(or)h(decrease)g
-(monotonically)-7 b(,)38 b(then)f(the)h(new)427 5247
-y(LutMap's)25 b(T)-7 b(ranIn)n(v)n(erse)23 b(attribute)j(will)f(ha)n(v)
-n(e)f(a)h(v)-5 b(alue)25 b(of)g(one,)g(indicating)g(that)h(the)g(in)n
-(v)n(erse)d(transfor-)427 5347 y(mation)j(can)g(b)r(e)h(p)r(erformed.)
-36 b(Otherwise,)25 b(it)i(will)g(ha)n(v)n(e)e(a)g(v)-5
-b(alue)27 b(of)f(zero,)f(so)h(that)g(an)n(y)g(attempt)h(to)f(use)427
-5446 y(the)i(in)n(v)n(erse)e(transformation)g(will)i(result)f(in)h(an)g
-(error.)340 5577 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5677 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 261 271
-TeXDict begin 261 270 bop 3643 52 a FF(261)-2 351 y Fd(Status)33
-b(Handling)n(:)227 497 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 597 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-697 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 891 3780
-12 v 0 1022 a Fz(astMapBo)l(x)967 1023 y Fe(Find)39 b(a)g(b)s(ounding)f
-(b)s(o)m(x)g(for)g(a)g(Mapping)3111 1022 y Fz(astMapBo)l(x)0
-1207 y Fd(Description:)44 b Fj(This)23 b(function)h(allo)n(ws)e(y)n(ou)
-g(to)h(\014nd)g(the)h Ft(")p Fj(b)r(ounding)e(b)r(o)n(x)p
-Ft(")h Fj(whic)n(h)g(just)g(encloses)f(another)g(b)r(o)n(x)h(after)227
-1307 y(it)38 b(has)e(b)r(een)i(transformed)e(b)n(y)h(a)g(Mapping)f
-(\(using)h(either)g(its)h(forw)n(ard)d(or)h(in)n(v)n(erse)g
-(transformation\).)64 b(A)227 1407 y(t)n(ypical)27 b(use)h(migh)n(t)f
-(b)r(e)h(to)g(calculate)f(the)h(size)f(of)h(an)f(image)g(after)g(b)r
-(eing)h(transformed)e(b)n(y)h(a)h(Mapping.)227 1530 y(The)f(function)h
-(w)n(orks)d(on)h(one)h(dimension)g(at)f(a)h(time.)37
-b(When)28 b(supplied)f(with)g(the)g(lo)n(w)n(er)f(and)g(upp)r(er)h(b)r
-(ounds)227 1630 y(of)39 b(a)f(rectangular)e(region)h(\(b)r(o)n(x\))i
-(of)f(input)i(co)r(ordinate)d(space,)k(it)d(\014nds)h(the)g(lo)n(w)n
-(est)e(and)i(highest)f(v)-5 b(alues)227 1729 y(tak)n(en)29
-b(b)n(y)g(a)g(nominated)g(output)h(co)r(ordinate)e(within)j(that)e
-(region.)41 b(Optionally)-7 b(,)29 b(it)h(also)e(returns)h(the)h(input)
-227 1829 y(co)r(ordinates)d(where)h(these)g(b)r(ounding)g(v)-5
-b(alues)28 b(are)f(attained.)39 b(It)28 b(should)g(b)r(e)h(used)f(rep)r
-(eatedly)f(to)h(obtain)g(the)227 1928 y(exten)n(t)g(of)g(the)f(b)r
-(ounding)h(b)r(o)n(x)f(in)h(more)f(than)h(one)f(dimension.)0
-2076 y Fd(Synopsis:)121 b Ft(void)42 b(astMapBox\()d(AstMapping)h
-Fi(\003)p Ft(this,)h(const)g(double)g(lbnd_in[],)f(const)h(double)g
-(ubnd_in[],)227 2175 y(int)i(forward,)d(int)i(coord_out,)e(double)h
-Fi(\003)p Ft(lbnd_out,)e(double)i Fi(\003)p Ft(ubnd_out,)f(double)h
-(xl[],)g(double)227 2275 y(xu[])h(\);)0 2422 y Fd(P)m(arameters:)259
-2556 y(this)427 2656 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping.)259
-2786 y Fd(lbnd)p Ft(_)p Fd(in)427 2886 y Fj(P)n(oin)n(ter)33
-b(to)h(an)g(arra)n(y)e(of)i(double,)i(with)e(one)g(elemen)n(t)g(for)g
-(eac)n(h)f(Mapping)h(input)h(co)r(ordinate.)56 b(This)427
-2986 y(should)28 b(con)n(tain)f(the)h(lo)n(w)n(er)e(b)r(ound)i(of)f
-(the)h(input)g(b)r(o)n(x)g(in)f(eac)n(h)g(input)i(dimension.)259
-3116 y Fd(ubnd)p Ft(_)p Fd(in)427 3216 y Fj(P)n(oin)n(ter)k(to)h(an)g
-(arra)n(y)e(of)i(double,)i(with)e(one)g(elemen)n(t)g(for)g(eac)n(h)f
-(Mapping)h(input)h(co)r(ordinate.)56 b(This)427 3316
-y(should)28 b(con)n(tain)f(the)h(upp)r(er)f(b)r(ound)h(of)g(the)g
-(input)g(b)r(o)n(x)f(in)h(eac)n(h)f(input)h(dimension.)427
-3431 y(Note)22 b(that)g(it)g(is)f(p)r(ermissible)g(for)g(the)h(upp)r
-(er)g(b)r(ound)g(to)f(b)r(e)h(less)f(than)h(the)g(corresp)r(onding)d
-(lo)n(w)n(er)h(b)r(ound,)427 3530 y(as)27 b(the)h(v)-5
-b(alues)27 b(will)h(simply)g(b)r(e)g(sw)n(app)r(ed)f(b)r(efore)g(use.)
-259 3661 y Fd(forw)m(ard)427 3760 y Fj(If)c(this)g(v)-5
-b(alue)22 b(is)g(non-zero,)g(then)h(the)g(Mapping's)e(forw)n(ard)g
-(transformation)g(will)h(b)r(e)h(used)g(to)f(transform)427
-3860 y(the)28 b(input)h(b)r(o)n(x.)36 b(Otherwise,)27
-b(its)h(in)n(v)n(erse)e(transformation)g(will)i(b)r(e)g(used.)427
-3975 y(\(If)35 b(the)g(in)n(v)n(erse)e(transformation)g(is)h(selected,)
-i(then)f(references)f(to)g Ft(")p Fj(input)p Ft(")g Fj(and)h
-Ft(")p Fj(output)p Ft(")f Fj(co)r(ordi-)427 4075 y(nates)e(in)g(this)f
-(description)h(should)f(b)r(e)h(transp)r(osed.)48 b(F)-7
-b(or)31 b(example,)i(the)f(size)f(of)h(the)g Ft(")p Fj(lbnd)p
-Ft(_)p Fj(in)p Ft(")f Fj(and)427 4174 y Ft(")p Fj(ubnd)p
-Ft(_)p Fj(in)p Ft(")23 b Fj(arra)n(ys)e(should)i(matc)n(h)g(the)h(n)n
-(um)n(b)r(er)f(of)g(output)h(co)r(ordinates,)f(as)g(giv)n(en)f(b)n(y)h
-(the)h(Mapping's)427 4274 y(Nout)35 b(attribute.)59 b(Similarly)-7
-b(,)36 b(the)g Ft(")p Fj(co)r(ord)p Ft(_)p Fj(out)p Ft(")c
-Fj(parameter,)j(b)r(elo)n(w,)i(should)d(nominate)h(one)f(of)h(the)427
-4374 y(Mapping's)27 b(input)i(co)r(ordinates.\))259 4504
-y Fd(co)s(ord)p Ft(_)p Fd(out)427 4604 y Fj(The)d(index)f(of)h(the)f
-(output)h(co)r(ordinate)f(for)g(whic)n(h)g(the)h(lo)n(w)n(er)e(and)h
-(upp)r(er)g(b)r(ounds)h(are)e(required.)36 b(This)427
-4704 y(v)-5 b(alue)27 b(should)f(b)r(e)i(at)e(least)h(one,)f(and)h(no)f
-(larger)f(than)i(the)g(n)n(um)n(b)r(er)g(of)f(Mapping)h(output)g(co)r
-(ordinates.)259 4834 y Fd(lbnd)p Ft(_)p Fd(out)427 4934
-y Fj(P)n(oin)n(ter)39 b(to)g(a)h(double)g(in)g(whic)n(h)g(to)g(return)g
-(the)g(lo)n(w)n(est)f(v)-5 b(alue)40 b(tak)n(en)f(b)n(y)h(the)g
-(nominated)g(output)427 5033 y(co)r(ordinate)27 b(within)h(the)g(sp)r
-(eci\014ed)g(region)e(of)i(input)g(co)r(ordinate)e(space.)259
-5164 y Fd(ubnd)p Ft(_)p Fd(out)427 5264 y Fj(P)n(oin)n(ter)36
-b(to)i(a)f(double)g(in)h(whic)n(h)f(to)h(return)f(the)h(highest)f(v)-5
-b(alue)38 b(tak)n(en)e(b)n(y)i(the)g(nominated)f(output)427
-5363 y(co)r(ordinate)27 b(within)h(the)g(sp)r(eci\014ed)g(region)e(of)i
-(input)g(co)r(ordinate)e(space.)259 5494 y Fd(xl)427
-5593 y Fj(An)j(optional)e(p)r(oin)n(ter)g(to)h(an)g(arra)n(y)d(of)j
-(double,)g(with)h(one)e(elemen)n(t)h(for)g(eac)n(h)f(Mapping)g(input)i
-(co)r(ordi-)427 5693 y(nate.)44 b(If)30 b(giv)n(en,)g(this)g(arra)n(y)d
-(will)k(b)r(e)f(\014lled)g(with)g(the)h(co)r(ordinates)d(of)i(an)f
-(input)i(p)r(oin)n(t)f(\(although)g(not)p eop end
-%%Page: 262 272
-TeXDict begin 262 271 bop 0 52 a FF(262)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(necessarily)22
-b(a)i(unique)g(one\))g(for)f(whic)n(h)h(the)g(nominated)f(output)i(co)r
-(ordinate)d(attains)i(the)g(lo)n(w)n(er)e(b)r(ound)427
-451 y(v)-5 b(alue)28 b(returned)f(in)h Ft(")p Fi(\003)p
-Fj(lbnd)p Ft(_)p Fj(out)p Ft(")p Fj(.)427 570 y(If)g(these)g(co)r
-(ordinates)e(are)h(not)g(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(ma)n(y)
-g(b)r(e)h(supplied.)259 709 y Fd(xu)427 808 y Fj(An)33
-b(optional)f(p)r(oin)n(ter)g(to)g(an)g(arra)n(y)f(of)h(double,)i(with)f
-(one)f(elemen)n(t)g(for)g(eac)n(h)g(Mapping)g(input)h(co)r(or-)427
-908 y(dinate.)58 b(If)35 b(giv)n(en,)h(this)e(arra)n(y)f(will)h(b)r(e)h
-(\014lled)g(with)g(the)g(co)r(ordinates)e(of)i(an)f(input)h(p)r(oin)n
-(t)g(\(although)427 1008 y(not)c(necessarily)e(a)h(unique)h(one\))f
-(for)g(whic)n(h)h(the)f(nominated)h(output)g(co)r(ordinate)e(attains)i
-(the)f(upp)r(er)427 1107 y(b)r(ound)e(v)-5 b(alue)28
-b(returned)f(in)h Ft(")p Fi(\003)p Fj(ubnd)p Ft(_)p Fj(out)p
-Ft(")p Fj(.)427 1226 y(If)g(these)g(co)r(ordinates)e(are)h(not)g
-(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)h(supplied.)0
-1400 y Fd(Notes:)340 1694 y Fi(\017)45 b Fj(An)n(y)20
-b(input)g(p)r(oin)n(ts)g(whic)n(h)f(are)g(transformed)f(b)n(y)h(the)h
-(Mapping)f(to)h(giv)n(e)e(output)j(co)r(ordinates)d(con)n(taining)427
-1794 y(the)j(v)-5 b(alue)20 b(AST)p Ft(__)p Fj(BAD)g(are)f(regarded)g
-(as)g(in)n(v)-5 b(alid)20 b(and)g(are)f(ignored.)34 b(They)20
-b(will)g(mak)n(e)f(no)h(con)n(tribution)427 1894 y(to)h(determining)g
-(the)g(output)h(b)r(ounds,)g(ev)n(en)f(although)f(the)h(nominated)g
-(output)h(co)r(ordinate)d(migh)n(t)i(still)427 1993 y(ha)n(v)n(e)27
-b(a)g(v)-5 b(alid)28 b(v)-5 b(alue)27 b(at)g(suc)n(h)h(p)r(oin)n(ts.)
-340 2132 y Fi(\017)45 b Fj(An)36 b(error)d(will)i(o)r(ccur)g(if)g(the)h
-(required)e(output)h(b)r(ounds)g(cannot)g(b)r(e)h(found.)59
-b(T)n(ypically)-7 b(,)36 b(this)g(migh)n(t)427 2232 y(happ)r(en)25
-b(if)g(all)f(the)h(input)g(p)r(oin)n(ts)f(whic)n(h)g(the)h(function)g
-(considers)e(turn)i(out)f(to)g(b)r(e)h(in)n(v)-5 b(alid)24
-b(\(see)h(ab)r(o)n(v)n(e\).)427 2331 y(The)36 b(n)n(um)n(b)r(er)g(of)g
-(p)r(oin)n(ts)g(considered)f(b)r(efore)g(generating)g(suc)n(h)h(an)f
-(error)f(is)i(quite)g(large,)h(so)e(this)i(is)427 2431
-y(unlik)n(ely)30 b(to)g(o)r(ccur)f(b)n(y)g(acciden)n(t)h(unless)f(v)-5
-b(alid)30 b(p)r(oin)n(ts)g(are)f(restricted)g(to)h(a)f(v)n(ery)g(small)
-h(subset)f(of)h(the)427 2530 y(input)f(co)r(ordinate)d(space.)340
-2669 y Fi(\017)45 b Fj(The)37 b(v)-5 b(alues)37 b(returned)f(via)g
-Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p Ft(")p Fj(,)j Ft(")p
-Fj(ubnd)p Ft(_)p Fj(out)p Ft(")p Fj(,)f Ft(")p Fj(xl)p
-Ft(")e Fj(and)h Ft(")p Fj(xu)p Ft(")f Fj(will)h(b)r(e)g(set)g(to)g(the)
-g(v)-5 b(alue)427 2769 y(AST)p Ft(__)p Fj(BAD)29 b(if)g(this)g
-(function)h(should)e(fail)h(for)f(an)n(y)g(reason.)39
-b(Their)29 b(initial)g(v)-5 b(alues)28 b(on)g(en)n(try)h(will)g(not)427
-2868 y(b)r(e)f(altered)f(if)h(the)g(function)h(is)e(in)n(v)n(ok)n(ed)f
-(with)i(the)g(AST)g(error)e(status)h(set.)p 0 3079 3780
-12 v 0 3210 a Fz(astMapGet0)p Fc(<)p Fz(X)p Fc(>)1242
-3211 y Fe(Get)38 b(a)h(scalar)e(v)-7 b(alue)39 b(from)e(a)1672
-3311 y(KeyMap)2771 3210 y Fz(astMapGet0)p Fc(<)p Fz(X)p
-Fc(>)0 3511 y Fd(Description:)44 b Fj(This)25 b(is)g(a)f(set)h(of)g
-(functions)g(for)f(retrieving)g(a)g(scalar)f(v)-5 b(alue)25
-b(from)g(a)f(KeyMap.)35 b(Y)-7 b(ou)25 b(should)g(replace)227
-3611 y Fl(<)p Fj(X)p Fl(>)g Fj(in)h(the)g(generic)e(function)i(name)g
-(astMapGet0)p Fl(<)p Fj(X)p Fl(>)e Fj(b)n(y)h(an)g(appropriate)f(1-c)n
-(haracter)f(t)n(yp)r(e)i(co)r(de)h(\(see)227 3711 y(the)g
-Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fj(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)g(appropriate)d(to)j(eac)n(h)f(supp)r(orted)g
-(data)g(t)n(yp)r(e\).)37 b(The)227 3810 y(stored)h(v)-5
-b(alue)38 b(is)g(con)n(v)n(erted)f(to)h(the)h(data)e(t)n(yp)r(e)i
-(indiced)f(b)n(y)g Fl(<)p Fj(X)p Fl(>)g Fj(b)r(efore)g(b)r(eing)g
-(returned)g(\(an)g(error)f(is)227 3910 y(rep)r(orted)27
-b(if)h(it)g(is)g(not)f(p)r(ossible)h(to)f(con)n(v)n(ert)f(the)i(stored)
-f(v)-5 b(alue)27 b(to)h(the)g(requested)f(data)g(t)n(yp)r(e\).)0
-4071 y Fd(Synopsis:)121 b Ft(int)42 b(astMapGet0)p Fl(<)p
-Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)i Fi(\003)p Ft(this,)h(const)g(char)h
-Fi(\003)p Ft(key,)g Fl(<)p Ft(X)p Fl(>)p Ft(type)e Fi(\003)p
-Ft(value)h(\);)0 4232 y Fd(P)m(arameters:)259 4380 y(this)427
-4480 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259 4619
-y Fd(k)m(ey)427 4718 y Fj(The)g(c)n(haracter)d(string)i(iden)n(tifying)
-h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)259 4857
-y Fd(v)-5 b(alue)427 4957 y Fj(A)37 b(p)r(oin)n(ter)f(to)g(a)g
-(bu\013er)g(in)h(whic)n(h)f(to)g(return)g(the)g(requested)g(v)-5
-b(alue.)63 b(If)37 b(the)f(requested)g(k)n(ey)f(is)i(not)427
-5056 y(found,)e(then)e(the)g(con)n(ten)n(ts)f(of)h(the)g(bu\013er)g(on)
-f(en)n(try)g(to)h(this)g(function)g(will)g(b)r(e)g(unc)n(hanged)f(on)g
-(exit.)427 5156 y(F)-7 b(or)26 b(p)r(oin)n(ter)g(t)n(yp)r(es)h(\()p
-Ft(")p Fj(A)p Ft(")f Fj(and)h Ft(")p Fj(C)p Ft(")p Fj(\),)f(the)h
-(bu\013er)g(should)f(b)r(e)h(a)f(suitable)h(p)r(oin)n(ter,)f(and)g(the)
-h(address)f(of)427 5255 y(this)i(p)r(oin)n(ter)f(should)h(b)r(e)g
-(supplied)g(as)f(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")26
-b Fj(parameter.)0 5429 y Fd(Returned)32 b(V)-8 b(alue:)259
-5577 y(astMapGet0)p Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427
-5677 y Fj(a)27 b(non-zero)f(v)-5 b(alue)28 b(if)g(the)g(requested)f(k)n
-(ey)g(name)g(w)n(as)g(found,)h(and)f(is)h(set)f(to)h(zero)e(otherwise.)
-p eop end
-%%Page: 263 273
-TeXDict begin 263 272 bop 3643 52 a FF(263)0 351 y Fd(Notes:)340
-639 y Fi(\017)45 b Fj(No)31 b(error)e(is)h(rep)r(orted)g(if)i(the)f
-(requested)f(k)n(ey)g(cannot)g(b)r(e)h(found)g(in)g(the)g(giv)n(en)f
-(KeyMap,)h(but)g(a)g(zero)427 739 y(v)-5 b(alue)25 b(will)g(b)r(e)g
-(returned)f(as)h(the)g(function)g(v)-5 b(alue.)36 b(The)25
-b(supplied)g(bu\013er)g(will)g(b)r(e)g(returned)f(unc)n(hanged.)340
-875 y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g
-(and)g(white)h(space)f(is)h(considered)e(signi\014can)n(t.)340
-1010 y Fi(\017)45 b Fj(If)28 b(the)g(stored)f(v)-5 b(alue)28
-b(is)f(a)g(v)n(ector)f(v)-5 b(alue,)28 b(then)g(the)g(\014rst)f(v)-5
-b(alue)28 b(in)g(the)g(v)n(ector)e(will)i(b)r(e)g(returned.)340
-1146 y Fi(\017)45 b Fj(A)32 b(string)e(p)r(oin)n(ter)h(returned)g(b)n
-(y)g(astMapGet0C)f(is)h(guaran)n(teed)f(to)h(remain)f(v)-5
-b(alid)32 b(and)f(the)g(string)g(to)427 1245 y(whic)n(h)22
-b(it)f(p)r(oin)n(ts)h(will)f(not)h(b)r(e)g(o)n(v)n(er-written)d(for)i
-(a)g(total)g(of)h(50)e(successiv)n(e)g(in)n(v)n(o)r(cations)g(of)h
-(this)h(function.)427 1345 y(After)30 b(this,)g(the)g(memory)e(con)n
-(taining)g(the)i(string)f(ma)n(y)f(b)r(e)i(re-used,)f(so)f(a)h(cop)n(y)
-f(of)i(the)f(string)g(should)427 1445 y(b)r(e)f(made)g(if)g(it)g(is)f
-(needed)h(for)f(longer)f(than)i(this.)340 1580 y Fi(\017)45
-b Fj(If)30 b(the)f(returned)g(v)-5 b(alue)29 b(is)g(an)g(AST)g(Ob)5
-b(ject)29 b(p)r(oin)n(ter,)g(the)h(Ob)5 b(ject's)29 b(reference)f(coun)
-n(t)h(is)g(incremen)n(ted)427 1680 y(b)n(y)f(this)h(call.)39
-b(An)n(y)29 b(subsequen)n(t)f(c)n(hanges)f(made)h(to)g(the)h(Ob)5
-b(ject)29 b(using)f(the)g(returned)g(p)r(oin)n(ter)h(will)f(b)r(e)427
-1779 y(re\015ected)35 b(in)g(an)n(y)f(an)n(y)g(other)g(activ)n(e)g(p)r
-(oin)n(ters)g(for)g(the)h(Ob)5 b(ject.)58 b(The)35 b(returned)f(p)r
-(oin)n(ter)h(should)f(b)r(e)427 1879 y(ann)n(ulled)28
-b(using)f(astAnn)n(ul)h(when)f(it)h(is)g(no)f(longer)f(needed.)-2
-2046 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 2193
-y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n(ou)c
-(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapGet0)p Fl(<)p Fj(X)p Fl(>)227
-2292 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-2392 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 2534
-y Fi(\017)45 b Fj(F:)28 b(\015oat)340 2669 y Fi(\017)45
-b Fj(D:)28 b(double)340 2805 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 2941 y Fi(\017)45 b Fj(C:)28 b Ft(")p Fj(const)p
-Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f(c)n(haracter)f
-(string)340 3076 y Fi(\017)45 b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5
-b(ject)340 3212 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p
-Fj(v)n(oid)f Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)227 3379
-y(F)-7 b(or)29 b(example,)g(astMapGet0D)g(w)n(ould)g(b)r(e)g(used)h(to)
-f(get)g(a)g Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alue,)30
-b(while)f(astMapGet0I)f(w)n(ould)h(b)r(e)227 3479 y(used)f(to)f(get)h
-(an)f Ft(")p Fj(in)n(t)p Ft(")p Fj(,)g(etc.)p 0 3684
-3780 12 v 0 3814 a Fz(astMapGet1)p Fc(<)p Fz(X)p Fc(>)1233
-3815 y Fe(Get)38 b(a)g(v)m(ector)g(v)-7 b(alue)38 b(from)f(a)1672
-3915 y(KeyMap)2771 3814 y Fz(astMapGet1)p Fc(<)p Fz(X)p
-Fc(>)0 4109 y Fd(Description:)44 b Fj(This)24 b(is)g(a)g(set)g(of)g
-(functions)g(for)f(retrieving)g(a)g(v)n(ector)g(v)-5
-b(alue)24 b(from)g(a)f(KeyMap.)35 b(Y)-7 b(ou)24 b(should)g(replace)227
-4209 y Fl(<)p Fj(X)p Fl(>)h Fj(in)h(the)g(generic)e(function)i(name)g
-(astMapGet1)p Fl(<)p Fj(X)p Fl(>)e Fj(b)n(y)h(an)g(appropriate)f(1-c)n
-(haracter)f(t)n(yp)r(e)i(co)r(de)h(\(see)227 4309 y(the)39
-b Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")f Fj(section)h(b)r(elo)
-n(w)g(for)g(the)h(co)r(de)f(appropriate)e(to)j(eac)n(h)e(supp)r(orted)h
-(data)g(t)n(yp)r(e\).)227 4408 y(The)33 b(stored)f(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)g(to)g(the)i(data)e(t)n(yp)r(e)h
-(indiced)g(b)n(y)g Fl(<)p Fj(X)p Fl(>)f Fj(b)r(efore)g(b)r(eing)h
-(returned)g(\(an)g(error)227 4508 y(is)c(rep)r(orted)g(if)h(it)f(is)h
-(not)f(p)r(ossible)g(to)g(con)n(v)n(ert)f(the)h(stored)g(v)-5
-b(alue)29 b(to)g(the)h(requested)e(data)h(t)n(yp)r(e\).)42
-b(Note,)30 b(the)227 4607 y(astMapGet1C)j(function)i(has)f(an)f(extra)g
-(parameter)g Ft(")p Fj(l)p Ft(")g Fj(whic)n(h)h(sp)r(eci\014es)g(the)g
-(maxim)n(um)g(length)g(of)g(eac)n(h)227 4707 y(string)27
-b(to)h(b)r(e)g(stored)e(in)i(the)g Ft(")p Fj(v)-5 b(alue)p
-Ft(")27 b Fj(bu\013er)h(\(see)f(the)h Ft(")p Fj(astMapGet1C)p
-Ft(")e Fj(section)h(b)r(elo)n(w\).)0 4862 y Fd(Synopsis:)121
-b Ft(int)42 b(astMapGet1)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)i
-Fi(\003)p Ft(this,)h(const)g(char)h Fi(\003)p Ft(key,)g(int)g(mxval,)f
-(int)i Fi(\003)p Ft(nval,)e Fl(<)p Ft(X)p Fl(>)p Ft(type)227
-4962 y Fi(\003)p Ft(value)g(\))i(int)g(astMapGet1C\()38
-b(AstKeyMap)i Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p
-Ft(key,)f(int)i(l,)f(int)h(mxval,)e(int)h Fi(\003)p Ft(nval,)227
-5061 y(const)g(char)g Fi(\003)p Ft(value)f(\))0 5216
-y Fd(P)m(arameters:)259 5358 y(this)427 5458 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5593 y Fd(k)m(ey)427 5693 y
-Fj(The)g(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(v)-5
-b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36 b(T)-7 b(railing)26
-b(spaces)h(are)g(ignored.)p eop end
-%%Page: 264 274
-TeXDict begin 264 273 bop 0 52 a FF(264)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(mxv)-5
-b(al)427 451 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)h
-(the)g Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(arra)n(y)-7
-b(.)259 591 y Fd(n)m(v)i(al)427 690 y Fj(The)24 b(address)f(of)h(an)f
-(in)n(teger)g(in)h(whic)n(h)g(to)g(put)g(the)g(n)n(um)n(b)r(er)g(of)g
-(elemen)n(ts)g(stored)f(in)h(the)g Ft(")p Fj(v)-5 b(alue)p
-Ft(")23 b Fj(arra)n(y)-7 b(.)427 790 y(An)n(y)28 b(un)n(used)f(elemen)n
-(ts)h(of)f(the)h(arra)n(y)e(are)g(left)i(unc)n(hanged.)259
-930 y Fd(v)-5 b(alue)427 1029 y Fj(A)34 b(p)r(oin)n(ter)f(to)g(an)g
-(arra)n(y)d(in)k(whic)n(h)f(to)g(return)g(the)g(requested)g(v)-5
-b(alues.)53 b(If)34 b(the)f(requested)g(k)n(ey)g(is)g(not)427
-1129 y(found,)28 b(then)g(the)g(con)n(ten)n(ts)f(of)h(the)g(bu\013er)g
-(on)f(en)n(try)g(to)g(this)h(function)g(will)g(b)r(e)g(unc)n(hanged)f
-(on)g(exit.)0 1304 y Fd(Returned)32 b(V)-8 b(alue:)259
-1455 y(astMapGet1)p Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427
-1554 y Fj(a)27 b(non-zero)f(v)-5 b(alue)28 b(if)g(the)g(requested)f(k)n
-(ey)g(name)g(w)n(as)g(found,)h(and)f(is)h(set)f(to)h(zero)e(otherwise.)
-0 1730 y Fd(Notes:)340 2026 y Fi(\017)45 b Fj(No)31 b(error)e(is)h(rep)
-r(orted)g(if)i(the)f(requested)f(k)n(ey)g(cannot)g(b)r(e)h(found)g(in)g
-(the)g(giv)n(en)f(KeyMap,)h(but)g(a)g(zero)427 2126 y(v)-5
-b(alue)26 b(will)h(b)r(e)g(returned)f(as)f(the)i(function)g(v)-5
-b(alue.)36 b(The)27 b(supplied)f(arra)n(y)e(will)j(b)r(e)f(returned)g
-(unc)n(hanged.)340 2266 y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g
-(sensitiv)n(e,)g(and)g(white)h(space)f(is)h(considered)e(signi\014can)n
-(t.)340 2405 y Fi(\017)45 b Fj(If)26 b(the)f(stored)g(v)-5
-b(alue)25 b(is)g(a)g(scalar)e(v)-5 b(alue,)26 b(then)f(the)h(v)-5
-b(alue)25 b(will)h(b)r(e)f(returned)g(in)g(the)h(\014rst)f(elemen)n(t)g
-(of)g(the)427 2505 y(supplied)j(arra)n(y)-7 b(,)26 b(and)h
-Ft(")p Fj(n)n(v)-5 b(al)p Ft(")26 b Fj(will)i(b)r(e)g(returned)f(set)h
-(to)g(1.)-2 2681 y Fd(astMapGet1C)n(:)227 2827 y Fj(The)d
-Ft(")p Fj(v)-5 b(alue)p Ft(")24 b Fj(bu\013er)h(supplied)g(to)f(the)h
-(astMapGet1C)f(function)h(should)g(b)r(e)g(a)f(p)r(oin)n(ter)h(to)f(a)g
-(c)n(haracter)f(arra)n(y)227 2926 y(with)29 b Ft(")p
-Fj(mxv)-5 b(al)p Fi(\003)p Fj(l)p Ft(")28 b Fj(elemen)n(ts,)g(where)g
-Ft(")p Fj(l)p Ft(")g Fj(is)h(the)g(maxim)n(um)f(length)h(of)f(a)g
-(string)g(to)h(b)r(e)g(returned.)39 b(The)29 b(v)-5 b(alue)227
-3026 y(of)25 b Ft(")p Fj(l)p Ft(")f Fj(should)g(b)r(e)h(supplied)h(as)e
-(an)g(extra)g(parameter)f(follo)n(wing)h Ft(")p Fj(k)n(ey)p
-Ft(")f Fj(when)i(in)n(v)n(oking)e(astMapGet1C,)h(and)227
-3125 y(should)k(include)g(space)e(for)i(a)f(terminating)g(n)n(ull)h(c)n
-(haracter.)-2 3289 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227
-3435 y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n
-(ou)c(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapGet1)p Fl(<)p Fj(X)p Fl(>)227
-3534 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-3634 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 3784
-y Fi(\017)45 b Fj(D:)28 b(double)340 3924 y Fi(\017)45
-b Fj(F:)28 b(\015oat)340 4064 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 4203 y Fi(\017)45 b Fj(C:)28 b Ft(")p Fj(const)p
-Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f(c)n(haracter)f
-(string)340 4343 y Fi(\017)45 b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5
-b(ject)340 4483 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p
-Fj(v)n(oid)f Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)227 4658
-y(F)-7 b(or)32 b(example,)h(astMapGet1D)e(w)n(ould)h(b)r(e)g(used)g(to)
-g(get)g Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alues,)33
-b(while)f(astMapGet1I)g(w)n(ould)f(b)r(e)227 4758 y(used)26
-b(to)f(get)g Ft(")p Fj(in)n(t)p Ft(")g Fj(v)-5 b(alues,)25
-b(etc.)37 b(F)-7 b(or)24 b(D)i(or)f(I,)g(the)h(supplied)g
-Ft(")p Fj(v)-5 b(alue)p Ft(")24 b Fj(parameter)g(should)h(b)r(e)h(a)f
-(p)r(oin)n(ter)g(to)g(an)227 4858 y(arra)n(y)f(of)j(doubles)f(or)g(in)n
-(ts,)h(with)g Ft(")p Fj(mxv)-5 b(al)p Ft(")25 b Fj(elemen)n(ts.)37
-b(F)-7 b(or)26 b(C,)g(the)h(supplied)g Ft(")p Fj(v)-5
-b(alue)p Ft(")26 b Fj(parameter)f(should)h(b)r(e)227
-4957 y(a)32 b(p)r(oin)n(ter)f(to)h(a)f(c)n(haracter)f(string)h(with)h
-Ft(")p Fj(mxv)-5 b(al)p Fi(\003)p Fj(l)p Ft(")30 b Fj(elemen)n(ts.)50
-b(F)-7 b(or)31 b(A,)h(the)g(supplied)g Ft(")p Fj(v)-5
-b(alue)p Ft(")31 b Fj(parameter)227 5057 y(should)d(b)r(e)g(a)f(p)r
-(oin)n(ter)g(to)g(an)h(arra)n(y)d(of)j(AstOb)5 b(ject)27
-b(p)r(oin)n(ters.)p 0 5270 3780 12 v 0 5402 a Fz(astMapGetElem)p
-Fc(<)p Fz(X)p Fc(>)344 b Fe(Get)39 b(a)f(single)1402
-5516 y(elemen)m(t)f(of)i(a)f(v)m(ector)1571 5616 y(v)-7
-b(alue)39 b(from)e(a)1672 5715 y(KeyMap)2539 5402 y Fz(astMapGetElem)p
-Fc(<)p Fz(X)p Fc(>)p eop end
-%%Page: 265 275
-TeXDict begin 265 274 bop 3643 52 a FF(265)0 351 y Fd(Description:)44
-b Fj(This)26 b(is)g(a)f(set)h(of)f(functions)h(for)f(retrieving)g(a)g
-(single)g(elemen)n(t)h(of)g(a)f(v)n(ector)f(v)-5 b(alue)26
-b(from)f(a)g(KeyMap.)227 451 y(Y)-7 b(ou)35 b(should)g(replace)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(generic)e(function)h(name)g
-(astMapGetElem)p Fl(<)p Fj(X)p Fl(>)f Fj(b)n(y)h(an)f(appropriate)227
-551 y(1-c)n(haracter)25 b(t)n(yp)r(e)i(co)r(de)g(\(see)g(the)h
-Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")f Fj(section)h(b)r(elo)n
-(w)g(for)g(the)h(co)r(de)f(appropriate)e(to)i(eac)n(h)227
-650 y(supp)r(orted)d(data)f(t)n(yp)r(e\).)36 b(The)24
-b(stored)f(v)-5 b(alue)23 b(is)h(con)n(v)n(erted)e(to)i(the)g(data)f(t)
-n(yp)r(e)h(indiced)g(b)n(y)g Fl(<)p Fj(X)p Fl(>)f Fj(b)r(efore)h(b)r
-(eing)227 750 y(returned)36 b(\(an)h(error)e(is)h(rep)r(orted)g(if)h
-(it)g(is)f(not)h(p)r(ossible)f(to)h(con)n(v)n(ert)e(the)i(stored)e(v)-5
-b(alue)37 b(to)f(the)h(requested)227 849 y(data)31 b(t)n(yp)r(e\).)48
-b(Note,)32 b(the)g(astMapGetElemC)e(function)i(has)f(an)g(extra)f
-(parameter)g Ft(")p Fj(l)p Ft(")g Fj(whic)n(h)h(sp)r(eci\014es)g(the)
-227 949 y(maxim)n(um)38 b(length)g(of)h(the)f(string)f(to)h(b)r(e)h
-(stored)e(in)i(the)f Ft(")p Fj(v)-5 b(alue)p Ft(")37
-b Fj(bu\013er)i(\(see)f(the)g Ft(")p Fj(astMapGetElemC)p
-Ft(")227 1049 y Fj(section)27 b(b)r(elo)n(w\).)0 1201
-y Fd(Synopsis:)121 b Ft(int)42 b(astMapGetElem)p Fl(<)p
-Ft(X)p Fl(>)p Ft(\()37 b(AstKeyMap)j Fi(\003)p Ft(this,)h(const)g(char)
-h Fi(\003)p Ft(key,)g(int)g(elem,)f Fl(<)p Ft(X)p Fl(>)p
-Ft(type)g Fi(\003)p Ft(value)227 1300 y(\))i(int)g(astMapGetElemC\()37
-b(AstKeyMap)j Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p
-Ft(key,)f(int)h(l,)h(int)f(elem,)g(const)f(char)227 1400
-y Fi(\003)p Ft(value)g(\))0 1552 y Fd(P)m(arameters:)259
-1691 y(this)427 1790 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-1924 y Fd(k)m(ey)427 2024 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)259 2158
-y Fd(elem)427 2258 y Fj(The)k(index)g(of)g(the)h(required)d(v)n(ector)h
-(elemen)n(t,)i(starting)e(at)h(zero.)46 b(An)31 b(error)e(will)i(b)r(e)
-h(rep)r(orted)e(if)h(the)427 2357 y(v)-5 b(alue)28 b(is)f(outside)h
-(the)g(range)e(of)h(the)h(v)n(ector.)259 2492 y Fd(v)-5
-b(alue)427 2591 y Fj(A)23 b(p)r(oin)n(ter)f(to)g(a)g(bu\013er)g(in)h
-(whic)n(h)f(to)h(return)e(the)i(requested)f(v)-5 b(alue.)35
-b(If)23 b(the)f(requested)g(k)n(ey)g(is)g(not)g(found,)427
-2691 y(then)28 b(the)g(con)n(ten)n(ts)f(of)h(the)g(bu\013er)g(on)f(en)n
-(try)g(to)g(this)h(function)g(will)g(b)r(e)g(unc)n(hanged)f(on)g(exit.)
-0 2855 y Fd(Returned)32 b(V)-8 b(alue:)259 2994 y(astMapGetElem)p
-Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427 3094 y Fj(a)27 b(non-zero)f(v)-5
-b(alue)28 b(if)g(the)g(requested)f(k)n(ey)g(name)g(w)n(as)g(found,)h
-(and)f(is)h(set)f(to)h(zero)e(otherwise.)0 3258 y Fd(Notes:)340
-3543 y Fi(\017)45 b Fj(No)31 b(error)e(is)h(rep)r(orted)g(if)i(the)f
-(requested)f(k)n(ey)g(cannot)g(b)r(e)h(found)g(in)g(the)g(giv)n(en)f
-(KeyMap,)h(but)g(a)g(zero)427 3643 y(v)-5 b(alue)28 b(will)g(b)r(e)g
-(returned)f(as)g(the)h(function)g(v)-5 b(alue.)340 3777
-y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g(and)g
-(white)h(space)f(is)h(considered)e(signi\014can)n(t.)-2
-3941 y Fd(astMapGetElemC)n(:)227 4087 y Fj(The)k Ft(")p
-Fj(v)-5 b(alue)p Ft(")29 b Fj(bu\013er)h(supplied)g(to)f(the)h
-(astMapGetElemC)f(function)i(should)e(b)r(e)h(a)g(p)r(oin)n(ter)f(to)g
-(a)h(c)n(haracter)227 4187 y(arra)n(y)25 b(with)i Ft(")p
-Fj(l)p Ft(")f Fj(elemen)n(ts,)h(where)f Ft(")p Fj(l)p
-Ft(")g Fj(is)g(the)h(maxim)n(um)g(length)g(of)f(the)h(string)f(to)h(b)r
-(e)g(returned.)36 b(The)27 b(v)-5 b(alue)227 4287 y(of)26
-b Ft(")p Fj(l)p Ft(")f Fj(should)h(b)r(e)g(supplied)g(as)f(an)h(extra)f
-(parameter)f(follo)n(wing)h Ft(")p Fj(k)n(ey)p Ft(")f
-Fj(when)i(in)n(v)n(oking)e(astMapGetElemC,)227 4386 y(and)k(should)f
-(include)h(space)f(for)g(a)g(terminating)g(n)n(ull)h(c)n(haracter.)-2
-4538 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 4684
-y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n(ou)c
-(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapGetElem)p Fl(<)p Fj(X)p Fl(>)227
-4784 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-4884 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5023
-y Fi(\017)45 b Fj(D:)28 b(double)340 5157 y Fi(\017)45
-b Fj(F:)28 b(\015oat)340 5291 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 5425 y Fi(\017)45 b Fj(C:)28 b Ft(")p Fj(const)p
-Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f(c)n(haracter)f
-(string)340 5559 y Fi(\017)45 b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5
-b(ject)340 5693 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p
-Fj(v)n(oid)f Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)p eop
-end
-%%Page: 266 276
-TeXDict begin 266 275 bop 0 52 a FF(266)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(F)-7
-b(or)35 b(example,)h(astMapGetElemD)e(w)n(ould)h(b)r(e)g(used)g(to)g
-(get)f(a)h Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alue,)36
-b(while)f(astMapGetElemI)227 451 y(w)n(ould)d(b)r(e)h(used)f(to)g(get)g
-(an)g Ft(")p Fj(in)n(t)p Ft(")g Fj(v)-5 b(alue,)33 b(etc.)51
-b(F)-7 b(or)32 b(D)g(or)g(I,)g(the)h(supplied)f Ft(")p
-Fj(v)-5 b(alue)p Ft(")31 b Fj(parameter)g(should)h(b)r(e)227
-551 y(a)37 b(p)r(oin)n(ter)g(to)g(a)g(double)g(or)g(in)n(t.)66
-b(F)-7 b(or)37 b(C,)g(the)h(supplied)f Ft(")p Fj(v)-5
-b(alue)p Ft(")37 b Fj(parameter)e(should)i(b)r(e)h(a)f(p)r(oin)n(ter)g
-(to)g(a)227 650 y(c)n(haracter)27 b(string)h(with)h Ft(")p
-Fj(l)p Ft(")f Fj(elemen)n(ts.)40 b(F)-7 b(or)28 b(A,)h(the)g(supplied)g
-Ft(")p Fj(v)-5 b(alue)p Ft(")28 b Fj(parameter)f(should)h(b)r(e)h(a)f
-(p)r(oin)n(ter)h(to)227 750 y(an)f(AstOb)5 b(ject)27
-b(p)r(oin)n(ter.)p 0 958 3780 12 v 0 1088 a Fz(astMapHasKey)1111
-1089 y Fe(Chec)m(k)38 b(if)g(an)h(en)m(try)f(with)f(a)i(giv)m(en)1288
-1204 y(k)m(ey)f(exists)g(in)h(a)f(KeyMap)2880 1088 y
-Fz(astMapHasKey)0 1401 y Fd(Description:)44 b Fj(This)33
-b(function)h(returns)f(a)f(\015ag)h(indicating)f(if)i(the)g(KeyMap)e
-(con)n(tains)g(an)h(en)n(try)f(with)i(the)f(giv)n(en)227
-1501 y(k)n(ey)-7 b(.)0 1659 y Fd(Synopsis:)121 b Ft(int)42
-b(astMapHasKey\()c(AstKeyMap)i Fi(\003)p Ft(this,)h(const)h(char)g
-Fi(\003)p Ft(key)g(\))0 1817 y Fd(P)m(arameters:)259
-1962 y(this)427 2061 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-2199 y Fd(k)m(ey)427 2298 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)0 2469 y Fd(Returned)32 b(V)-8
-b(alue:)259 2614 y(astMapHasKey\(\))427 2713 y Fj(Non-zero)26
-b(if)i(the)g(k)n(ey)f(w)n(as)g(found,)h(and)f(zero)g(otherwise.)0
-2884 y Fd(Notes:)340 3175 y Fi(\017)45 b Fj(A)29 b(function)g(v)-5
-b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)i(an)f(error)e
-(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f(function)427
-3274 y(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 3482
-V 0 3613 a Fz(astMapKey)875 3614 y Fe(Get)38 b(the)h(k)m(ey)f(at)g(a)h
-(giv)m(en)f(index)g(within)f(the)1672 3727 y(KeyMap)3103
-3613 y Fz(astMapKey)0 3925 y Fd(Description:)44 b Fj(This)31
-b(function)g(returns)e(a)h(string)g(holding)g(the)h(k)n(ey)f(for)g(the)
-g(en)n(try)g(with)h(the)g(giv)n(en)e(index)i(within)227
-4024 y(the)d(KeyMap.)227 4153 y(This)k(function)f(is)h(in)n(tended)f
-(primarily)g(as)f(a)h(means)g(of)g(iterating)g(round)g(all)g(the)h
-(elemen)n(ts)f(in)h(a)e(KeyMap.)227 4253 y(F)-7 b(or)24
-b(this)h(purp)r(ose,)g(the)g(n)n(um)n(b)r(er)f(of)g(en)n(tries)g(in)h
-(the)g(KeyMap)e(should)i(\014rst)f(b)r(e)h(found)g(using)f(astMapSize)g
-(and)227 4352 y(this)i(function)g(should)f(then)h(b)r(e)f(called)g(in)h
-(a)f(lo)r(op,)g(with)h(the)g(index)f(v)-5 b(alue)25 b(going)f(from)h
-(zero)g(to)g(one)g(less)f(than)227 4452 y(the)29 b(size)e(of)i(the)f
-(KeyMap.)37 b(The)29 b(index)f(asso)r(ciated)e(with)j(a)f(giv)n(en)f
-(en)n(try)g(is)h(not,)h(in)f(general,)f(related)g(to)h(the)227
-4551 y(order)d(in)h(whic)n(h)g(the)h(en)n(tries)e(are)g(added)h(to)g
-(the)h(KeyMap,)e(and)h(ma)n(y)f(c)n(hange)g(if)i(other)e(en)n(tries)h
-(are)f(added)h(to)227 4651 y(or)h(remo)n(v)n(ed)f(from)h(the)h(KeyMap.)
-0 4809 y Fd(Synopsis:)121 b Ft(const)41 b(char)h Fi(\003)p
-Ft(astMapKey\()d(AstKeyMap)h Fi(\003)p Ft(this,)h(int)i(index)e(\))0
-4967 y Fd(P)m(arameters:)259 5112 y(this)427 5212 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5349 y Fd(index)427 5448 y Fj(The)g(index)g
-(in)n(to)g(the)g(KeyMap.)37 b(The)28 b(\014rst)g(en)n(try)f(has)g
-(index)i(zero,)d(and)i(the)h(last)e(has)g(index)i Ft(")p
-Fj(size-1)p Ft(")p Fj(,)427 5548 y(where)e Ft(")p Fj(size)p
-Ft(")g Fj(is)g(the)h(v)-5 b(alue)28 b(returned)f(b)n(y)g(the)h
-(astMapSize)f(function.)0 5718 y Fd(Returned)32 b(V)-8
-b(alue:)p eop end
-%%Page: 267 277
-TeXDict begin 267 276 bop 3643 52 a FF(267)259 351 y
-Fd(astMapKey\(\))427 451 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(a)f(n)n
-(ull-terminated)g(string)g(con)n(taining)g(the)h(k)n(ey)-7
-b(.)0 609 y Fd(Notes:)340 887 y Fi(\017)45 b Fj(The)36
-b(returned)g(p)r(oin)n(ter)g(is)g(guaran)n(teed)e(to)i(remain)g(v)-5
-b(alid)36 b(and)g(the)g(string)g(to)g(whic)n(h)g(it)g(p)r(oin)n(ts)g
-(will)427 987 y(not)c(b)r(e)g(o)n(v)n(er-written)e(for)i(a)f(total)h
-(of)g(50)f(successiv)n(e)f(in)n(v)n(o)r(cations)g(of)i(this)g
-(function.)51 b(After)32 b(this,)h(the)427 1086 y(memory)27
-b(con)n(taining)f(the)i(string)f(ma)n(y)f(b)r(e)i(re-used,)e(so)h(a)g
-(cop)n(y)f(of)i(the)f(string)g(should)g(b)r(e)h(made)f(if)h(it)g(is)427
-1186 y(needed)g(for)f(longer)f(than)i(this.)340 1315
-y Fi(\017)45 b Fj(A)26 b(NULL)g(p)r(oin)n(ter)e(will)i(b)r(e)f
-(returned)g(if)h(this)g(function)f(is)h(in)n(v)n(ok)n(ed)d(with)j(the)g
-(AST)f(error)f(status)h(set,)g(or)427 1414 y(if)j(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)p 0 1605 3780 12 v 0 1736 a Fz(astMapLenC)1019
-1737 y Fe(Get)39 b(the)f(n)m(um)m(b)s(er)g(of)h(c)m(haracters)d(in)j(a)
-1147 1837 y(c)m(haracter)d(en)m(try)i(in)h(a)f(KeyMap)3027
-1736 y Fz(astMapLenC)0 2017 y Fd(Description:)44 b Fj(This)26
-b(function)g(returns)f(the)h(minim)n(um)g(length)f(whic)n(h)h(a)f(c)n
-(haracter)e(v)-5 b(ariable)25 b(whic)n(h)g(m)n(ust)h(ha)n(v)n(e)e(in)
-227 2117 y(order)i(to)i(b)r(e)g(able)f(to)g(store)g(a)g(sp)r(eci\014ed)
-g(en)n(try)g(in)h(the)g(supplied)g(KeyMap.)36 b(If)27
-b(the)h(named)g(en)n(try)f(is)g(a)g(v)n(ector)227 2217
-y(en)n(try)-7 b(,)27 b(then)i(the)f(returned)f(v)-5 b(alue)27
-b(is)h(the)g(length)f(of)h(the)g(longest)f(elemen)n(t)g(of)h(the)g(v)n
-(ector)e(v)-5 b(alue.)0 2362 y Fd(Synopsis:)121 b Ft(int)42
-b(astMapLenC\()d(AstKeyMap)h Fi(\003)p Ft(this,)h(const)h(char)g
-Fi(\003)p Ft(key)f(\))0 2507 y Fd(P)m(arameters:)259
-2640 y(this)427 2739 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-2868 y Fd(k)m(ey)427 2968 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)0 3125 y Fd(Returned)32 b(V)-8
-b(alue:)259 3258 y(astMapLenC\(\))427 3357 y Fj(The)35
-b(length)g(\(i.e.)59 b(n)n(um)n(b)r(er)35 b(of)g(c)n(haracters\))e(of)h
-(the)i(longest)e(formatted)g(v)-5 b(alue)35 b(asso)r(ciated)f(with)h
-(the)427 3457 y(named)28 b(en)n(try)-7 b(.)36 b(This)28
-b(do)r(es)f(not)h(include)g(the)g(trailing)e(n)n(ull)i(c)n(haracter.)0
-3615 y Fd(Notes:)340 3893 y Fi(\017)45 b Fj(A)21 b(function)g(v)-5
-b(alue)21 b(of)f(zero)f(will)i(b)r(e)g(returned)f(without)h(error)e(if)
-i(the)g(named)f(en)n(try)g(cannot)g(b)r(e)h(formatted)427
-3993 y(as)27 b(a)g(c)n(haracter)f(string.)340 4122 y
-Fi(\017)45 b Fj(A)29 b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h
-(b)r(e)h(returned)e(if)i(an)f(error)e(has)i(already)e(o)r(ccurred,)i
-(or)f(if)i(this)f(function)427 4221 y(should)g(fail)f(for)g(an)n(y)g
-(reason.)p 0 4412 V 0 4544 a Fz(astMapLength)190 b Fe(Get)38
-b(the)h(v)m(ector)e(length)h(of)g(an)h(en)m(try)1555
-4657 y(in)f(a)h(KeyMap)2930 4544 y Fz(astMapLength)0
-4842 y Fd(Description:)44 b Fj(This)23 b(function)f(returns)g(the)g(v)n
-(ector)f(length)h(of)h(a)e(named)h(en)n(try)g(in)g(a)g(KeyMap,)h
-(\(that)f(is,)i(ho)n(w)d(man)n(y)227 4942 y(v)-5 b(alues)27
-b(are)g(asso)r(ciated)f(with)i(the)g(en)n(try\).)0 5087
-y Fd(Synopsis:)121 b Ft(int)42 b(astMapLength\()c(AstKeyMap)i
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(key)g(\))0
-5233 y Fd(P)m(arameters:)259 5365 y(this)427 5465 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap.)259 5593 y Fd(k)m(ey)427 5693 y
-Fj(The)g(c)n(haracter)d(string)i(iden)n(tifying)h(the)g(KeyMap)f(en)n
-(try)-7 b(.)36 b(T)-7 b(railing)27 b(spaces)f(are)h(ignored.)p
-eop end
-%%Page: 268 278
-TeXDict begin 268 277 bop 0 52 a FF(268)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Returned)i(V)-8
-b(alue:)259 492 y(astMapLength\(\))427 592 y Fj(The)31
-b(length)h(of)f(the)g(en)n(try)-7 b(.)47 b(One)31 b(for)f(a)h(scalar,)g
-(greater)e(than)i(one)g(for)f(a)h(v)n(ector.)46 b(A)32
-b(v)-5 b(alue)31 b(of)g(zero)f(is)427 691 y(returned)d(if)i(the)f
-(KeyMap)e(do)r(es)h(not)h(con)n(tain)f(the)h(named)f(en)n(try)-7
-b(.)0 857 y Fd(Notes:)340 1144 y Fi(\017)45 b Fj(A)29
-b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)
-i(an)f(error)e(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f
-(function)427 1244 y(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 1447 3780 12 v 0 1578 a Fz(astMapPut0)p Fc(<)p Fz(X)p
-Fc(>)1294 1579 y Fe(Add)39 b(a)g(scalar)e(v)-7 b(alue)39
-b(to)f(a)1672 1678 y(KeyMap)2771 1578 y Fz(astMapPut0)p
-Fc(<)p Fz(X)p Fc(>)0 1871 y Fd(Description:)44 b Fj(This)24
-b(is)g(a)f(set)h(of)f(functions)h(for)g(adding)f(scalar)f(v)-5
-b(alues)23 b(to)h(a)f(KeyMap.)35 b(Y)-7 b(ou)24 b(should)f(use)h(a)f
-(function)227 1971 y(whic)n(h)i(matc)n(hes)g(the)h(data)f(t)n(yp)r(e)g
-(of)g(the)h(data)f(y)n(ou)f(wish)h(to)h(add)f(to)g(the)h(KeyMap)e(b)n
-(y)h(replacing)f Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)227
-2071 y(generic)30 b(function)h(name)g(astMapPut0)p Fl(<)p
-Fj(X)p Fl(>)e Fj(b)n(y)h(an)h(appropriate)e(1-c)n(haracter)f(t)n(yp)r
-(e)j(co)r(de)f(\(see)h(the)g Ft(")p Fj(Data)227 2170
-y(T)n(yp)r(e)d(Co)r(des)p Ft(")f Fj(section)g(b)r(elo)n(w)g(for)g(the)h
-(co)r(de)f(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r
-(e\).)0 2324 y Fd(Synopsis:)121 b Ft(void)42 b(astMapPut0)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)h Fi(\003)p Ft(this,)i(const)h
-(char)g Fi(\003)p Ft(key,)f Fl(<)p Ft(X)p Fl(>)p Ft(type)g(value,)g
-(const)227 2424 y(char)h Fi(\003)p Ft(comment)e(\);)0
-2577 y Fd(P)m(arameters:)259 2718 y(this)427 2817 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(KeyMap)e(in)i(whic)n(h)g(to)f(store)g(the)h(supplied)g(v)
--5 b(alue.)259 2952 y Fd(k)m(ey)427 3052 y Fj(A)27 b(c)n(haracter)e
-(string)h(to)h(b)r(e)g(stored)f(with)i(the)f(v)-5 b(alue,)27
-b(whic)n(h)g(can)f(later)g(b)r(e)i(used)e(to)h(iden)n(tify)g(the)h(v)-5
-b(alue.)427 3152 y(T)e(railing)27 b(spaces)f(are)h(ignored.)259
-3287 y Fd(v)-5 b(alue)427 3386 y Fj(The)29 b(v)-5 b(alue)28
-b(to)g(b)r(e)h(stored.)38 b(The)28 b(data)g(t)n(yp)r(e)h(of)f(this)h(v)
--5 b(alue)28 b(should)g(matc)n(h)g(the)h(1-c)n(haracter)c(t)n(yp)r(e)k
-(co)r(de)427 3486 y(app)r(ended)j(to)g(the)g(function)g(name)g(\(e.g.)
-49 b(if)32 b(y)n(ou)f(are)g(using)g(astMapPut0A,)g(the)h(t)n(yp)r(e)g
-(of)g(this)g(v)-5 b(alue)427 3586 y(should)28 b(b)r(e)g
-Ft(")p Fj(p)r(oin)n(ter)e(to)i(AstOb)5 b(ject)p Ft(")p
-Fj(\).)259 3720 y Fd(commen)m(t)427 3820 y Fj(A)27 b(p)r(oin)n(ter)e
-(to)h(a)f(n)n(ull-terminated)h(commen)n(t)g(string)f(to)h(b)r(e)g
-(stored)f(with)i(the)f(v)-5 b(alue.)36 b(A)27 b(NULL)f(p)r(oin)n(ter)
-427 3920 y(ma)n(y)h(b)r(e)h(supplied,)g(in)g(whic)n(h)g(case)e(no)i
-(commen)n(t)f(is)h(stored.)0 4086 y Fd(Notes:)340 4373
-y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g(and)g
-(white)h(space)f(is)h(considered)e(signi\014can)n(t.)340
-4507 y Fi(\017)45 b Fj(If)27 b(the)f(supplied)h(k)n(ey)e(is)h(already)f
-(in)h(use)g(in)h(the)f(KeyMap,)g(the)g(new)h(v)-5 b(alue)26
-b(will)g(replace)f(the)i(old)f(v)-5 b(alue.)340 4642
-y Fi(\017)45 b Fj(If)36 b(the)g(stored)e(v)-5 b(alue)35
-b(is)g(an)g(AST)h(Ob)5 b(ject)35 b(p)r(oin)n(ter,)i(the)e(Ob)5
-b(ject's)35 b(reference)g(coun)n(t)g(is)g(incremen)n(ted)427
-4742 y(b)n(y)28 b(this)h(call.)39 b(An)n(y)29 b(subsequen)n(t)f(c)n
-(hanges)f(made)h(to)g(the)h(Ob)5 b(ject)29 b(using)f(the)g(returned)g
-(p)r(oin)n(ter)h(will)f(b)r(e)427 4842 y(re\015ected)h(in)h(an)n(y)e
-(an)n(y)h(other)g(activ)n(e)f(p)r(oin)n(ters)h(for)g(the)h(Ob)5
-b(ject,)29 b(including)h(an)n(y)e(obtained)h(later)g(using)427
-4941 y(astMapget0A.)f(The)i(reference)e(coun)n(t)h(for)f(the)i(Ob)5
-b(ject)29 b(will)g(b)r(e)h(decremen)n(ted)f(when)g(the)g(KeyMap)g(is)
-427 5041 y(destro)n(y)n(ed,)d(or)h(the)h(en)n(try)f(is)g(remo)n(v)n(ed)
-g(or)f(o)n(v)n(er-written)g(with)i(a)f(di\013eren)n(t)h(p)r(oin)n(ter.)
--2 5207 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227
-5353 y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n
-(ou)c(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapPut0)p Fl(<)p Fj(X)p Fl(>)227
-5453 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-5552 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5693
-y Fi(\017)45 b Fj(D:)28 b(double)p eop end
-%%Page: 269 279
-TeXDict begin 269 278 bop 3643 52 a FF(269)340 351 y
-Fi(\017)45 b Fj(F:)28 b(\015oat)340 482 y Fi(\017)45
-b Fj(I:)28 b(in)n(t)340 613 y Fi(\017)45 b Fj(C:)28 b
-Ft(")p Fj(const)p Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h(terminated)f
-(c)n(haracter)f(string)340 744 y Fi(\017)45 b Fj(A:)28
-b(P)n(oin)n(ter)e(to)i(AstOb)5 b(ject)340 875 y Fi(\017)45
-b Fj(P:)28 b(Generic)f Ft(")p Fj(v)n(oid)f Fi(\003)p
-Ft(")h Fj(p)r(oin)n(ter)227 1035 y(F)-7 b(or)24 b(example,)h
-(astMapPut0D)f(w)n(ould)g(b)r(e)g(used)h(to)f(store)g(a)g
-Ft(")p Fj(double)p Ft(")f Fj(v)-5 b(alue,)25 b(while)g(astMapPut0I)e(w)
-n(ould)h(b)r(e)227 1135 y(used)k(to)f(store)g(an)g Ft(")p
-Fj(in)n(t)p Ft(")p Fj(,)g(etc.)227 1259 y(Note)i(that)h(KeyMaps)e(con)n
-(taining)g(generic)g Ft(")p Fj(v)n(oid)g Fi(\003)p Ft(")g
-Fj(p)r(oin)n(ters)h(cannot)g(b)r(e)g(written)g(out)h(using)e(astSho)n
-(w)g(or)227 1358 y(astW)-7 b(rite.)37 b(An)28 b(error)e(will)h(b)r(e)h
-(rep)r(orted)f(if)h(this)g(is)g(attempted.)p 0 1554 3780
-12 v 0 1684 a Fz(astMapPut1)p Fc(<)p Fz(X)p Fc(>)1285
-1685 y Fe(Add)39 b(a)f(v)m(ector)g(v)-7 b(alue)38 b(to)g(a)1672
-1785 y(KeyMap)2771 1684 y Fz(astMapPut1)p Fc(<)p Fz(X)p
-Fc(>)0 1970 y Fd(Description:)44 b Fj(This)23 b(is)g(a)g(set)f(of)h
-(functions)h(for)e(adding)g(v)n(ector)g(v)-5 b(alues)22
-b(to)h(a)g(KeyMap.)34 b(Y)-7 b(ou)23 b(should)g(use)g(a)f(function)227
-2070 y(whic)n(h)j(matc)n(hes)g(the)h(data)f(t)n(yp)r(e)g(of)g(the)h
-(data)f(y)n(ou)f(wish)h(to)h(add)f(to)g(the)h(KeyMap)e(b)n(y)h
-(replacing)f Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)227 2170
-y(generic)30 b(function)h(name)g(astMapPut1)p Fl(<)p
-Fj(X)p Fl(>)e Fj(b)n(y)h(an)h(appropriate)e(1-c)n(haracter)f(t)n(yp)r
-(e)j(co)r(de)f(\(see)h(the)g Ft(")p Fj(Data)227 2269
-y(T)n(yp)r(e)d(Co)r(des)p Ft(")f Fj(section)g(b)r(elo)n(w)g(for)g(the)h
-(co)r(de)f(appropriate)f(to)i(eac)n(h)f(supp)r(orted)g(data)g(t)n(yp)r
-(e\).)0 2417 y Fd(Synopsis:)121 b Ft(void)42 b(astMapPut1)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstKeyMap)h Fi(\003)p Ft(this,)i(const)h
-(char)g Fi(\003)p Ft(key,)f(int)i(size,)e(const)h Fl(<)p
-Ft(X)p Fl(>)p Ft(type)227 2516 y(value[],)f(const)g(char)h
-Fi(\003)p Ft(comment)e(\);)0 2664 y Fd(P)m(arameters:)259
-2799 y(this)427 2898 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap)e(in)i
-(whic)n(h)g(to)f(store)g(the)h(supplied)g(v)-5 b(alues.)259
-3029 y Fd(k)m(ey)427 3129 y Fj(A)24 b(c)n(haracter)c(string)j(to)g(b)r
-(e)g(stored)f(with)h(the)h(v)-5 b(alues,)23 b(whic)n(h)g(can)g(later)f
-(b)r(e)h(used)g(to)g(iden)n(tify)h(the)f(v)-5 b(alues.)427
-3228 y(T)e(railing)27 b(spaces)f(are)h(ignored.)259 3359
-y Fd(size)427 3459 y Fj(The)h(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)f(in)h
-(the)g(supplied)g(arra)n(y)d(of)j(v)-5 b(alues.)259 3590
-y Fd(v)g(alue)427 3690 y Fj(The)31 b(arra)n(y)c(of)k(v)-5
-b(alues)29 b(to)h(b)r(e)h(stored.)44 b(The)30 b(data)g(t)n(yp)r(e)g(of)
-g(this)h(v)-5 b(alue)30 b(should)g(matc)n(h)g(the)g(1-c)n(haracter)427
-3789 y(t)n(yp)r(e)i(co)r(de)g(app)r(ended)f(to)h(the)g(function)g(name)
-g(\(e.g.)48 b(if)32 b(y)n(ou)f(are)g(using)g(astMapPut1A,)g(the)h(t)n
-(yp)r(e)g(of)427 3889 y(this)c(v)-5 b(alue)28 b(should)f(b)r(e)h
-Ft(")p Fj(arra)n(y)d(of)i(p)r(oin)n(ters)g(to)h(AstOb)5
-b(ject)p Ft(")p Fj(\).)259 4020 y Fd(commen)m(t)427 4120
-y Fj(A)24 b(p)r(oin)n(ter)g(to)f(a)g(n)n(ull-terminated)h(commen)n(t)f
-(string)g(to)h(b)r(e)g(stored)f(with)h(the)g(v)-5 b(alues.)35
-b(A)24 b(NULL)g(p)r(oin)n(ter)427 4219 y(ma)n(y)j(b)r(e)h(supplied,)g
-(in)g(whic)n(h)g(case)e(no)i(commen)n(t)f(is)h(stored.)0
-4379 y Fd(Notes:)340 4660 y Fi(\017)45 b Fj(If)23 b(the)g(supplied)g(k)
-n(ey)f(is)g(already)f(in)i(use)f(in)h(the)g(KeyMap,)f(the)h(new)g(v)-5
-b(alues)22 b(will)g(replace)g(the)h(old)f(v)-5 b(alues.)340
-4791 y Fi(\017)45 b Fj(Key)27 b(names)g(are)g(case)g(sensitiv)n(e,)g
-(and)g(white)h(space)f(is)h(considered)e(signi\014can)n(t.)-2
-4951 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227 5097
-y Fj(T)-7 b(o)18 b(select)h(the)f(appropriate)f(function,)k(y)n(ou)c
-(should)h(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)g(the)h(generic)e
-(function)i(name)g(astMapPut1)p Fl(<)p Fj(X)p Fl(>)227
-5197 y Fj(with)35 b(a)f(1-c)n(haracter)e(data)h(t)n(yp)r(e)i(co)r(de,)h
-(so)e(as)f(to)i(matc)n(h)f(the)h(data)e(t)n(yp)r(e)i
-Fl(<)p Fj(X)p Fl(>)p Fj(t)n(yp)r(e)f(of)g(the)h(data)f(y)n(ou)g(are)227
-5296 y(pro)r(cessing,)26 b(as)h(follo)n(ws:)340 5431
-y Fi(\017)45 b Fj(D:)28 b(double)340 5562 y Fi(\017)45
-b Fj(F:)28 b(\015oat)340 5693 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)p eop end
-%%Page: 270 280
-TeXDict begin 270 279 bop 0 52 a FF(270)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(C:)28 b Ft(")p Fj(const)p Ft(")e Fj(p)r(oin)n(ter)i(to)f(n)n(ull)h
-(terminated)f(c)n(haracter)f(string)340 484 y Fi(\017)45
-b Fj(A:)28 b(P)n(oin)n(ter)e(to)i(AstOb)5 b(ject)340
-617 y Fi(\017)45 b Fj(P:)28 b(Generic)f Ft(")p Fj(v)n(oid)f
-Fi(\003)p Ft(")h Fj(p)r(oin)n(ter)227 779 y(F)-7 b(or)27
-b(example,)g(astMapPut1D)f(w)n(ould)h(b)r(e)g(used)g(to)g(store)f
-Ft(")p Fj(double)p Ft(")g Fj(v)-5 b(alues,)27 b(while)h(astMapPut1I)e
-(w)n(ould)g(b)r(e)227 879 y(used)i(to)f(store)g Ft(")p
-Fj(in)n(t)p Ft(")p Fj(,)g(etc.)227 1004 y(Note)i(that)h(KeyMaps)e(con)n
-(taining)g(generic)g Ft(")p Fj(v)n(oid)g Fi(\003)p Ft(")g
-Fj(p)r(oin)n(ters)h(cannot)g(b)r(e)g(written)g(out)h(using)e(astSho)n
-(w)g(or)227 1103 y(astW)-7 b(rite.)37 b(An)28 b(error)e(will)h(b)r(e)h
-(rep)r(orted)f(if)h(this)g(is)g(attempted.)p 0 1303 3780
-12 v 0 1435 a Fz(astMapRegion)249 b Fe(T)-10 b(ransform)36
-b(a)j(Region)e(in)m(to)h(a)g(new)1129 1548 y(F)-10 b(rame)39
-b(using)f(a)h(giv)m(en)e(Mapping)2933 1435 y Fz(astMapRegion)0
-1737 y Fd(Description:)44 b Fj(This)34 b(function)g(returns)f(a)g(p)r
-(oin)n(ter)g(to)h(a)f(new)h(Region)f(whic)n(h)g(corresp)r(onds)f(to)h
-(supplied)h(Region)227 1836 y(describ)r(ed)i(b)n(y)g(some)g(other)f(sp)
-r(eci\014ed)i(co)r(ordinate)e(system.)62 b(A)37 b(Mapping)e(is)h
-(supplied)h(whic)n(h)f(transforms)227 1936 y(p)r(ositions)30
-b(b)r(et)n(w)n(een)g(the)g(old)g(and)g(new)g(co)r(ordinate)e(systems.)
-44 b(The)30 b(new)g(Region)f(ma)n(y)h(not)g(b)r(e)g(of)g(the)g(same)227
-2036 y(class)d(as)g(the)h(original)e(region.)0 2185 y
-Fd(Synopsis:)121 b Ft(AstRegion)40 b Fi(\003)p Ft(astMapRegion\()d
-(AstRegion)j Fi(\003)p Ft(this,)h(AstMapping)f Fi(\003)p
-Ft(map,)h(AstFrame)f Fi(\003)p Ft(frame)i(\))0 2335 y
-Fd(P)m(arameters:)259 2472 y(this)427 2571 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)259 2704 y Fd(map)427 2804 y Fj(P)n(oin)n(ter)d
-(to)i(a)f(Mapping)g(whic)n(h)h(transforms)e(p)r(ositions)h(from)h(the)g
-(co)r(ordinate)e(system)h(represen)n(ted)g(b)n(y)427
-2904 y(the)32 b(supplied)g(Region)f(to)g(the)h(co)r(ordinate)e(system)h
-(sp)r(eci\014ed)h(b)n(y)f Ft(")p Fj(frame)p Ft(")p Fj(.)47
-b(The)31 b(supplied)h(Mapping)427 3003 y(should)k(de\014ne)f(b)r(oth)h
-(forw)n(ard)e(and)i(in)n(v)n(erse)e(transformations,)h(and)h(these)f
-(transformations)f(should)427 3103 y(form)20 b(a)g(gen)n(uine)g(in)n(v)
-n(erse)f(pair.)33 b(That)21 b(is,)g(transforming)e(a)h(p)r(osition)g
-(using)g(the)h(forw)n(ard)d(transformation)427 3203 y(and)29
-b(then)g(using)f(the)h(in)n(v)n(erse)e(transformation)g(should)h(pro)r
-(duce)h(the)g(original)e(input)i(p)r(osition.)40 b(Some)427
-3302 y(Mapping)31 b(classes)e(\(suc)n(h)i(as)f(P)n(ermMap,)g(MathMap,)i
-(SphMap\))f(can)g(result)f(in)h(Mappings)f(for)h(whic)n(h)427
-3402 y(this)d(is)g(not)f(true.)259 3535 y Fd(frame)427
-3634 y Fj(P)n(oin)n(ter)f(to)i(a)f(F)-7 b(rame)27 b(describing)g(the)h
-(co)r(ordinate)e(system)h(in)h(whic)n(h)g(the)g(new)f(Region)g(is)h
-(required.)0 3797 y Fd(Returned)k(V)-8 b(alue:)259 3933
-y(astMapRegion\(\))427 4033 y Fj(A)26 b(p)r(oin)n(ter)e(to)h(a)f(new)h
-(Region.)36 b(This)24 b(Region)h(will)g(represen)n(t)e(the)j(area)d
-(within)j(the)f(co)r(ordinate)f(system)427 4133 y(sp)r(eci\014ed)k(b)n
-(y)f Ft(")p Fj(frame)p Ft(")g Fj(whic)n(h)g(corresp)r(onds)f(to)h(the)h
-(supplied)g(Region.)0 4295 y Fd(Notes:)340 4578 y Fi(\017)45
-b Fj(The)24 b(uncertain)n(t)n(y)f(asso)r(ciated)f(with)i(the)h
-(supplied)f(Region)f(is)g(mo)r(di\014ed)h(using)g(the)g(supplied)g
-(Mapping.)340 4710 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4810 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 5010 V 0 5140 a Fz(astMapRemo)l(v)l
-(e)1079 5141 y Fe(Remo)m(v)m(ed)38 b(a)g(named)h(en)m(try)e(from)h(a)
-1672 5255 y(KeyMap)2875 5140 y Fz(astMapRemo)l(v)l(e)0
-5444 y Fd(Description:)44 b Fj(This)33 b(function)g(remo)n(v)n(es)e(a)h
-(named)h(en)n(try)f(from)g(a)h(KeyMap.)51 b(It)33 b(returns)f(without)h
-(action)f(if)h(the)227 5543 y(KeyMap)27 b(do)r(es)g(not)h(con)n(tain)f
-(the)h(sp)r(eci\014ed)g(k)n(ey)-7 b(.)0 5693 y Fd(Synopsis:)121
-b Ft(void)42 b(astMapRemove\()c(AstKeyMap)i Fi(\003)p
-Ft(this,)h(const)g(char)h Fi(\003)p Ft(key)g(\))p eop
-end
-%%Page: 271 281
-TeXDict begin 271 280 bop 3643 52 a FF(271)0 351 y Fd(P)m(arameters:)
-259 503 y(this)427 602 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-743 y Fd(k)m(ey)427 842 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(v)-5 b(alue)28 b(to)f(b)r(e)h(retriev)n(ed.)36
-b(T)-7 b(railing)26 b(spaces)h(are)g(ignored.)p 0 1057
-3780 12 v 0 1188 a Fz(astMapSize)202 b Fe(Get)38 b(the)h(n)m(um)m(b)s
-(er)f(of)g(en)m(tries)g(in)g(a)h(KeyMap)201 b Fz(astMapSize)0
-1392 y Fd(Description:)44 b Fj(This)28 b(function)g(returns)f(the)h(n)n
-(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(a)f(KeyMap.)0 1556
-y Fd(Synopsis:)121 b Ft(int)42 b(astMapSize\()d(AstKeyMap)h
-Fi(\003)p Ft(this)i(\))0 1721 y Fd(P)m(arameters:)259
-1872 y(this)427 1972 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)0
-2149 y Fd(Returned)k(V)-8 b(alue:)259 2300 y(astMapSize\(\))427
-2400 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)h(the)g
-(KeyMap.)0 2577 y Fd(Notes:)340 2874 y Fi(\017)45 b Fj(A)29
-b(function)g(v)-5 b(alue)28 b(of)g(zero)f(will)h(b)r(e)h(returned)e(if)
-i(an)f(error)e(has)i(already)e(o)r(ccurred,)i(or)f(if)i(this)f
-(function)427 2974 y(should)g(fail)f(for)g(an)n(y)g(reason.)p
-0 3188 V 0 3320 a Fz(astMapSplit)350 b Fe(Split)38 b(a)g(Mapping)g(up)h
-(in)m(to)e(parallel)1342 3433 y(comp)s(onen)m(t)g(Mappings)3065
-3320 y Fz(astMapSplit)0 3637 y Fd(Description:)44 b Fj(This)33
-b(function)f(creates)f(a)h(new)g(Mapping)g(whic)n(h)h(connects)e(sp)r
-(eci\014ed)i(inputs)g(within)f(a)g(supplied)227 3737
-y(Mapping)19 b(to)g(the)h(corresp)r(onding)d(outputs)j(of)f(the)h
-(supplied)g(Mapping.)33 b(This)20 b(is)f(only)g(p)r(ossible)g(if)h(the)
-f(sp)r(eci\014ed)227 3836 y(inputs)32 b(corresp)r(ond)e(to)h(some)g
-(subset)g(of)h(the)f(Mapping)g(outputs.)49 b(That)31
-b(is,)h(there)g(m)n(ust)f(exist)g(a)g(subset)h(of)227
-3936 y(the)25 b(Mapping)f(outputs)h(for)f(whic)n(h)h(eac)n(h)e(output)j
-(dep)r(ends)f(only)f(on)g(the)h(selected)f(Mapping)g(inputs,)i(and)f
-(not)227 4035 y(on)32 b(an)n(y)e(of)i(the)g(inputs)g(whic)n(h)f(ha)n(v)
-n(e)g(not)g(b)r(een)h(selected.)49 b(Also,)32 b(an)n(y)f(output)h(whic)
-n(h)g(is)f(not)h(in)g(this)g(subset)227 4135 y(m)n(ust)h(not)g(dep)r
-(end)h(on)f(an)n(y)f(of)h(the)g(selected)g(inputs.)53
-b(If)34 b(these)f(conditions)f(are)g(not)h(met)g(b)n(y)g(the)g
-(supplied)227 4235 y(Mapping,)28 b(then)g(a)f(NULL)h(Mapping)f(p)r(oin)
-n(ter)g(is)h(returned.)0 4399 y Fd(Synopsis:)121 b Ft(void)42
-b(astMapSplit\()c(AstMapping)i Fi(\003)p Ft(this,)h(int)h(nin,)g(const)
-g(int)g Fi(\003)p Ft(in,)g(int)g Fi(\003)p Ft(out,)g(AstMapping)227
-4499 y Fi(\003\003)p Ft(map)g(\))0 4663 y Fd(P)m(arameters:)259
-4815 y(this)427 4914 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(split.)259 5055 y Fd(nin)427 5154 y Fj(The)g(n)n(um)n(b)r(er)f
-(of)h(inputs)g(to)f(pic)n(k)h(from)f Ft(")p Fj(this)p
-Ft(")p Fj(.)259 5295 y Fd(in)427 5394 y Fj(P)n(oin)n(ter)20
-b(to)h(an)g(arra)n(y)d(holding)j(the)h(indices)f(within)h(the)f
-(supplied)h(Mapping)e(of)h(the)h(inputs)g(whic)n(h)f(are)f(to)427
-5494 y(b)r(e)26 b(pic)n(k)n(ed)f(from)g(the)h(Mapping.)35
-b(This)26 b(arra)n(y)d(should)i(ha)n(v)n(e)f Ft(")p Fj(nin)p
-Ft(")h Fj(elemen)n(ts.)36 b(If)26 b Ft(")p Fj(Nin)p Ft(")f
-Fj(is)g(the)h(n)n(um)n(b)r(er)427 5593 y(of)k(inputs)g(of)g(the)g
-(supplied)g(Mapping,)g(then)g(eac)n(h)f(elemen)n(t)h(should)g(ha)n(v)n
-(e)e(a)h(v)-5 b(alue)30 b(in)g(the)g(range)e(1)i(to)427
-5693 y(Nin.)p eop end
-%%Page: 272 282
-TeXDict begin 272 281 bop 0 52 a FF(272)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(out)427
-451 y Fj(P)n(oin)n(ter)i(to)h(an)g(arra)n(y)e(in)j(whic)n(h)f(to)g
-(return)g(the)h(indices)f(of)h(the)g(outputs)f(of)h(the)f(supplied)h
-(Mapping)427 551 y(whic)n(h)j(are)f(fed)h(b)n(y)g(the)g(pic)n(k)n(ed)f
-(inputs.)66 b(A)37 b(v)-5 b(alue)37 b(of)f(one)h(is)g(used)f(to)h
-(refer)f(to)h(the)g(\014rst)g(Mapping)427 650 y(output.)59
-b(The)35 b(supplied)g(arra)n(y)d(should)j(ha)n(v)n(e)e(a)i(length)f(at)
-h(least)f(equal)g(to)h(the)g(n)n(um)n(b)r(er)g(of)f(outputs)427
-750 y(in)g(the)h(supplied)f(Mapping.)55 b(The)34 b(n)n(um)n(b)r(er)f
-(of)h(v)-5 b(alues)34 b(stored)f(in)h(the)g(arra)n(y)d(on)j(exit)g
-(will)g(equal)f(the)427 849 y(n)n(um)n(b)r(er)g(of)f(outputs)h(in)g
-(the)g(returned)f(Mapping.)51 b(The)33 b(i'th)g(elemen)n(t)g(in)g(the)g
-(returned)f(arra)n(y)e(holds)427 949 y(the)e(index)g(within)g(the)g
-(supplied)g(Mapping)f(whic)n(h)g(corresp)r(onds)f(to)i(the)f(i'th)i
-(output)f(of)f(the)h(returned)427 1049 y(Mapping.)259
-1180 y Fd(map)427 1280 y Fj(Address)h(of)h(a)f(lo)r(cation)g(at)g(whic)
-n(h)h(to)f(return)g(a)g(p)r(oin)n(ter)h(to)f(the)h(returned)f(Mapping.)
-42 b(This)30 b(Mapping)427 1380 y(will)c(ha)n(v)n(e)f
-Ft(")p Fj(nin)p Ft(")h Fj(inputs)g(\(the)h(n)n(um)n(b)r(er)f(of)g
-(outputs)g(ma)n(y)f(b)r(e)i(di\013eren)n(t)f(to)g Ft(")p
-Fj(nin)p Ft(")p Fj(\).)36 b(NULL)26 b(is)g(returned)427
-1479 y(if)h(the)f(supplied)h(Mapping)f(has)f(no)h(subset)g(of)g
-(outputs)h(whic)n(h)f(dep)r(end)h(only)e(on)h(the)h(selected)f(inputs.)
-0 1640 y Fd(Notes:)340 1922 y Fi(\017)45 b Fj(If)29 b(this)g(function)g
-(is)f(in)n(v)n(ok)n(ed)f(with)i(the)g(global)e(error)g(status)h(set,)h
-(or)e(if)i(it)g(should)f(fail)h(for)f(an)n(y)f(reason,)427
-2021 y(then)h(a)g(NULL)g(v)-5 b(alue)27 b(will)h(b)r(e)g(returned)f
-(for)g(the)h Ft(")p Fj(map)p Ft(")f Fj(p)r(oin)n(ter.)p
-0 2218 3780 12 v 0 2349 a Fz(astMapT)l(yp)t(e)1011 2350
-y Fe(Get)39 b(the)f(data)g(t)m(yp)s(e)g(of)h(an)f(en)m(try)g(in)h(a)
-1672 2463 y(KeyMap)3041 2349 y Fz(astMapT)l(yp)t(e)0
-2650 y Fd(Description:)44 b Fj(This)34 b(function)g(returns)f(a)g(v)-5
-b(alue)33 b(indicating)h(the)g(data)f(t)n(yp)r(e)g(of)h(a)f(named)h(en)
-n(try)f(in)g(a)g(KeyMap.)227 2749 y(This)28 b(is)f(the)h(data)f(t)n(yp)
-r(e)h(whic)n(h)g(w)n(as)e(used)i(when)g(the)g(en)n(try)f(w)n(as)f
-(added)i(to)f(the)h(KeyMap.)0 2898 y Fd(Synopsis:)121
-b Ft(int)42 b(astMapType\()d(AstKeyMap)h Fi(\003)p Ft(this,)h(const)h
-(char)g Fi(\003)p Ft(key)f(\))0 3046 y Fd(P)m(arameters:)259
-3181 y(this)427 3281 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(KeyMap.)259
-3413 y Fd(k)m(ey)427 3512 y Fj(The)g(c)n(haracter)d(string)i(iden)n
-(tifying)h(the)g(KeyMap)f(en)n(try)-7 b(.)36 b(T)-7 b(railing)27
-b(spaces)f(are)h(ignored.)0 3673 y Fd(Returned)32 b(V)-8
-b(alue:)259 3809 y(astMapT)m(yp)s(e\(\))427 3908 y Fj(One)28
-b(of)f(AST)p Ft(__)p Fj(INTTYPE)g(\(for)g(in)n(teger\),)h(AST)p
-Ft(__)p Fj(DOUBLETYPE)e(\(for)h(double)h(precision)e(\015oating)427
-4008 y(p)r(oin)n(t\),)i(AST)p Ft(__)p Fj(FLO)n(A)-7 b(TTYPE)25
-b(\(for)i(single)f(precision)g(\015oating)g(p)r(oin)n(t\),)i(AST)p
-Ft(__)p Fj(STRINGTYPE)e(\(for)427 4107 y(c)n(haracter)i(string\))h(or)f
-(AST)p Ft(__)p Fj(OBJECTTYPE)f(\(for)i(AST)h(Ob)5 b(ject)29
-b(p)r(oin)n(ter\).)42 b(AST)p Ft(__)p Fj(BADTYPE)29 b(is)427
-4207 y(returned)e(if)i(the)f(supplied)f(k)n(ey)g(is)h(not)f(found)h(in)
-g(the)g(KeyMap.)0 4368 y Fd(Notes:)340 4649 y Fi(\017)45
-b Fj(A)26 b(function)g(v)-5 b(alue)26 b(of)f(AST)p Ft(__)p
-Fj(BADTYPE)g(will)h(b)r(e)g(returned)f(if)h(an)f(error)f(has)h(already)
-f(o)r(ccurred,)g(or)h(if)427 4749 y(this)j(function)g(should)g(fail)f
-(for)g(an)n(y)g(reason.)p 0 4946 V 0 5078 a Fz(astMark)569
-b Fe(Dra)m(w)38 b(a)h(set)f(of)h(mark)m(ers)e(for)g(a)i(Plot)567
-b Fz(astMark)0 5246 y Fd(Description:)44 b Fj(This)d(function)g(dra)n
-(ws)e(a)h(set)h(of)f(mark)n(ers)f(\(sym)n(b)r(ols\))h(at)h(p)r
-(ositions)f(sp)r(eci\014ed)h(in)g(the)f(ph)n(ysical)227
-5345 y(co)r(ordinate)22 b(system)g(of)g(a)h(Plot.)34
-b(The)23 b(p)r(ositions)f(are)f(transformed)h(in)n(to)g(graphical)f(co)
-r(ordinates)g(to)i(determine)227 5445 y(where)k(the)h(mark)n(ers)e
-(should)h(app)r(ear)g(within)h(the)g(plotting)g(area.)0
-5593 y Fd(Synopsis:)121 b Ft(void)42 b(astMark\()e(AstPlot)h
-Fi(\003)p Ft(this,)g(int)h(nmark,)f(int)i(ncoord,)d(int)j(indim,)e
-(const)g(double)g Fi(\003)p Ft(in,)227 5693 y(int)i(type)f(\))p
-eop end
-%%Page: 273 283
-TeXDict begin 273 282 bop 3643 52 a FF(273)0 351 y Fd(P)m(arameters:)
-259 506 y(this)427 605 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Plot.)259
-747 y Fd(nmark)427 847 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(mark)n(ers)d
-(to)j(dra)n(w.)36 b(This)27 b(ma)n(y)g(b)r(e)h(zero,)f(in)g(whic)n(h)h
-(case)f(nothing)g(will)h(b)r(e)g(dra)n(wn.)259 988 y
-Fd(nco)s(ord)427 1088 y Fj(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r
-(ordinates)e(b)r(eing)i(supplied)g(for)f(eac)n(h)g(mark)f(\(i.e.)65
-b(the)37 b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427
-1188 y(curren)n(t)27 b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n
-(en)f(b)n(y)i(its)f(Naxes)g(attribute\).)259 1329 y Fd(indim)427
-1429 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)g(along)e(the)i
-(second)f(dimension)h(of)f(the)h Ft(")p Fj(in)p Ft(")f
-Fj(arra)n(y)f(\(whic)n(h)i(con)n(tains)e(the)427 1529
-y(mark)n(er)h(co)r(ordinates\).)54 b(This)33 b(v)-5 b(alue)34
-b(is)f(required)g(so)g(that)g(the)h(co)r(ordinate)f(v)-5
-b(alues)33 b(can)g(b)r(e)h(correctly)427 1628 y(lo)r(cated)21
-b(if)h(they)g(do)f(not)g(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)33 b(The)21 b(v)-5 b(alue)21 b(giv)n(en)g(should)g(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(nmark)p Ft(")p Fj(.)259 1770
-y Fd(in)427 1870 y Fj(The)32 b(address)f(of)g(the)h(\014rst)g(elemen)n
-(t)g(of)f(a)h(2-dimensional)e(arra)n(y)f(of)j(shap)r(e)g
-Ft(")p Fj([nco)r(ord][indim])p Ft(")e Fj(giving)427 1969
-y(the)24 b(ph)n(ysical)d(co)r(ordinates)h(of)h(the)g(p)r(oin)n(ts)g
-(where)f(mark)n(ers)f(are)h(to)g(b)r(e)i(dra)n(wn.)34
-b(These)23 b(should)f(b)r(e)h(stored)427 2069 y(suc)n(h)31
-b(that)h(the)f(v)-5 b(alue)31 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)g(input)i(mark)f(n)n(um)n(b)r(er)g
-Ft(")p Fj(mark)p Ft(")e Fj(is)i(found)427 2168 y(in)d(elemen)n(t)g
-Ft(")p Fj(in[co)r(ord][mark])p Ft(")p Fj(.)259 2310 y
-Fd(t)m(yp)s(e)427 2410 y Fj(A)e(v)-5 b(alue)25 b(sp)r(ecifying)h(the)g
-(t)n(yp)r(e)f(\(e.g.)36 b(shap)r(e\))26 b(of)f(mark)n(er)f(to)h(b)r(e)h
-(dra)n(wn.)35 b(The)26 b(set)f(of)h(v)-5 b(alues)25 b(whic)n(h)g(ma)n
-(y)427 2509 y(b)r(e)j(used)g(\(and)g(the)g(shap)r(es)f(that)h(will)f
-(result\))h(is)f(determined)h(b)n(y)g(the)g(underlying)f(graphics)f
-(system.)0 2689 y Fd(Notes:)340 2990 y Fi(\017)45 b Fj(Mark)n(ers)21
-b(are)g(not)i(dra)n(wn)f(at)g(p)r(ositions)g(whic)n(h)h(ha)n(v)n(e)e
-(an)n(y)h(co)r(ordinate)f(equal)i(to)f(the)h(v)-5 b(alue)23
-b(AST)p Ft(__)p Fj(BAD)427 3089 y(\(or)38 b(where)g(the)g
-(transformation)f(in)n(to)h(graphical)e(co)r(ordinates)h(yields)h(co)r
-(ordinates)f(con)n(taining)g(the)427 3189 y(v)-5 b(alue)28
-b(AST)p Ft(__)p Fj(BAD\).)340 3331 y Fi(\017)45 b Fj(If)28
-b(an)n(y)f(mark)n(er)f(p)r(osition)h(is)h(clipp)r(ed)g(\(see)g
-(astClip\),)f(then)h(the)g(en)n(tire)g(mark)n(er)d(is)j(not)g(dra)n
-(wn.)340 3472 y Fi(\017)45 b Fj(An)28 b(error)e(results)h(if)h(the)g
-(base)f(F)-7 b(rame)27 b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)
-340 3614 y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3714 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 3931 3780 12 v 0 4062
-a Fz(astMask)p Fc(<)p Fz(X)p Fc(>)388 b Fe(Mask)39 b(a)g(region)e(of)h
-(a)h(data)e(grid)387 b Fz(astMask)p Fc(<)p Fz(X)p Fc(>)0
-4274 y Fd(Description:)44 b Fj(This)34 b(is)f(a)g(set)g(of)g(functions)
-h(for)e(masking)h(out)g(regions)f(within)i(gridded)e(data)h(\(e.g.)54
-b(an)33 b(image\).)227 4373 y(The)g(functions)h(mo)r(di\014es)f(a)f
-(giv)n(en)h(data)f(grid)h(b)n(y)f(assigning)g(a)g(sp)r(eci\014ed)i(v)-5
-b(alue)33 b(to)f(all)h(samples)g(whic)n(h)g(are)227 4473
-y(inside)28 b(\(or)f(outside)g(if)h Ft(")p Fj(inside)p
-Ft(")f Fj(is)h(zero\))f(the)h(sp)r(eci\014ed)f(Region.)227
-4606 y(Y)-7 b(ou)21 b(should)g(use)f(a)h(masking)f(function)h(whic)n(h)
-g(matc)n(hes)f(the)h(n)n(umerical)f(t)n(yp)r(e)h(of)g(the)g(data)f(y)n
-(ou)g(are)g(pro)r(cessing)227 4706 y(b)n(y)27 b(replacing)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(generic)e(function)h(name)g(astMask)
-p Fl(<)p Fj(X)p Fl(>)f Fj(b)n(y)h(an)f(appropriate)g(1-)g(or)g(2-c)n
-(haracter)227 4806 y(t)n(yp)r(e)32 b(co)r(de.)50 b(F)-7
-b(or)31 b(example,)i(if)f(y)n(ou)f(are)g(masking)g(data)g(with)i(t)n
-(yp)r(e)f Ft(")p Fj(\015oat)p Ft(")p Fj(,)f(y)n(ou)g(should)h(use)g
-(the)g(function)227 4905 y(astMaskF)25 b(\(see)h(the)h
-Ft(")p Fj(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")g Fj(section)f(b)r(elo)n
-(w)h(for)g(the)g(co)r(des)g(appropriate)e(to)i(other)f(n)n(umerical)227
-5005 y(t)n(yp)r(es\).)0 5172 y Fd(Synopsis:)121 b Ft(int)42
-b(astMask)p Fl(<)p Ft(X)p Fl(>)p Ft(\()d(AstRegion)h
-Fi(\003)p Ft(this,)h(AstMapping)f Fi(\003)p Ft(map,)h(int)h(inside,)f
-(int)h(ndim,)g(const)227 5272 y(int)h(lbnd[],)d(const)i(int)g(ubnd[],)f
-Fl(<)p Ft(Xtype)p Fl(>)g Ft(in[],)g Fl(<)p Ft(Xtype)p
-Fl(>)g Ft(val)h(\))0 5439 y Fd(P)m(arameters:)259 5593
-y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(a)f(Region.)p
-eop end
-%%Page: 274 284
-TeXDict begin 274 283 bop 0 52 a FF(274)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(map)427
-451 y Fj(P)n(oin)n(ter)g(to)h(a)g(Mapping.)47 b(The)31
-b(forw)n(ard)f(transformation)f(should)i(map)g(p)r(ositions)g(in)g(the)
-h(co)r(ordinate)427 551 y(system)g(of)h(the)g(supplied)f(Region)g(in)n
-(to)g(pixel)h(co)r(ordinates)e(as)h(de\014ned)g(b)n(y)h(the)f
-Ft(")p Fj(lbnd)p Ft(")h Fj(and)f Ft(")p Fj(ubnd)p Ft(")427
-650 y Fj(parameters.)i(A)24 b(NULL)g(p)r(oin)n(ter)f(can)g(b)r(e)h
-(supplied)g(if)g(the)g(co)r(ordinate)f(system)g(of)g(the)h(supplied)g
-(Region)427 750 y(corresp)r(onds)i(to)h(pixel)h(co)r(ordinates.)36
-b(This)27 b(is)h(equiv)-5 b(alen)n(t)27 b(to)g(supplying)h(a)f
-(UnitMap.)427 869 y(The)37 b(n)n(um)n(b)r(er)g(of)g(inputs)g(for)f
-(this)i(Mapping)e(\(as)h(giv)n(en)f(b)n(y)g(its)h(Nin)h(attribute\))f
-(should)g(matc)n(h)f(the)427 968 y(n)n(um)n(b)r(er)28
-b(of)f(axes)g(in)g(the)h(supplied)g(Region)f(\(as)g(giv)n(en)g(b)n(y)g
-(the)h(Naxes)f(attribute)h(of)f(the)h(Region\).)37 b(The)427
-1068 y(n)n(um)n(b)r(er)23 b(of)f(outputs)h(for)f(the)h(Mapping)f(\(as)g
-(giv)n(en)g(b)n(y)h(its)f(Nout)h(attribute\))g(should)g(matc)n(h)f(the)
-h(n)n(um)n(b)r(er)427 1167 y(of)28 b(grid)f(dimensions)g(giv)n(en)g(b)n
-(y)g(the)h(v)-5 b(alue)28 b(of)f Ft(")p Fj(ndim)p Ft(")g
-Fj(b)r(elo)n(w.)259 1305 y Fd(inside)427 1405 y Fj(A)c(b)r(o)r(olean)f
-(v)-5 b(alue)23 b(whic)n(h)g(indicates)f(whic)n(h)h(pixel)g(are)e(to)i
-(b)r(e)g(mask)n(ed.)34 b(If)24 b(a)e(non-zero)f(v)-5
-b(alue)23 b(is)f(supplied,)427 1504 y(then)32 b(all)g(grid)f(pixels)g
-(with)i(cen)n(tres)d(inside)i(the)g(supplied)g(Region)f(are)g(assigned)
-f(the)i(v)-5 b(alue)32 b(giv)n(en)f(b)n(y)427 1604 y
-Ft(")p Fj(v)-5 b(al)p Ft(")p Fj(,)33 b(and)f(all)h(other)f(pixels)g
-(are)g(left)h(unc)n(hanged.)51 b(If)33 b(zero)e(is)h(supplied,)j(then)e
-(all)f(grid)g(pixels)g(with)427 1704 y(cen)n(tres)g(not)h(inside)f(the)
-h(supplied)g(Region)f(are)g(assigned)f(the)i(v)-5 b(alue)32
-b(giv)n(en)g(b)n(y)h Ft(")p Fj(v)-5 b(al)p Ft(")p Fj(,)32
-b(and)h(all)f(other)427 1803 y(pixels)i(are)e(left)j(unc)n(hanged.)54
-b(Note,)35 b(the)f(Negated)f(attribute)h(of)f(the)h(Region)f(is)h(used)
-f(to)h(determine)427 1903 y(whic)n(h)26 b(pixel)g(are)e(inside)i(the)g
-(Region)f(and)h(whic)n(h)f(are)g(outside.)36 b(So)26
-b(the)g(inside)g(of)f(a)g(Region)h(whic)n(h)f(has)427
-2003 y(not)j(b)r(een)g(negated)f(is)g(the)h(same)f(as)g(the)h(outside)g
-(of)f(the)h(corresp)r(onding)e(negated)h(Region.)427
-2121 y(F)-7 b(or)31 b(t)n(yp)r(es)g(of)h(Region)e(suc)n(h)h(as)g(P)n
-(oin)n(tList)g(whic)n(h)g(ha)n(v)n(e)f(zero)g(v)n(olume,)i(pixel)g(cen)
-n(tres)e(will)i(rarely)e(fall)427 2221 y(exactly)25 b(within)h(the)g
-(Region.)36 b(F)-7 b(or)25 b(this)h(reason,)e(the)i(inclusion)f
-(criterion)g(is)g(c)n(hanged)g(for)g(zero-v)n(olume)427
-2321 y(Regions)32 b(so)h(that)g(pixels)g(are)f(included)h(\(or)f
-(excluded\))i(if)f(an)n(y)f(part)h(of)g(the)g(Region)g(passes)e
-(through)427 2420 y(the)f(pixel.)43 b(F)-7 b(or)29 b(a)g(P)n(oin)n
-(tList,)g(this)h(means)g(that)f(pixels)h(are)e(included)i(\(or)f
-(excluded\))h(if)h(they)e(con)n(tain)427 2520 y(at)f(least)f(one)g(of)h
-(the)g(p)r(oin)n(ts)f(listed)h(in)g(the)g(P)n(oin)n(tList.)259
-2658 y Fd(ndim)427 2757 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(dimensions)f
-(in)h(the)g(input)g(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f
-(one.)259 2895 y Fd(lbnd)427 2995 y Fj(P)n(oin)n(ter)19
-b(to)i(an)f(arra)n(y)f(of)h(in)n(tegers,)h(with)g Ft(")p
-Fj(ndim)p Ft(")g Fj(elemen)n(ts,)h(con)n(taining)d(the)i(co)r
-(ordinates)f(of)g(the)h(cen)n(tre)427 3094 y(of)28 b(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-3232 y Fd(ubnd)427 3332 y Fj(P)n(oin)n(ter)19 b(to)i(an)f(arra)n(y)f
-(of)h(in)n(tegers,)h(with)g Ft(")p Fj(ndim)p Ft(")g Fj(elemen)n(ts,)h
-(con)n(taining)d(the)i(co)r(ordinates)f(of)g(the)h(cen)n(tre)427
-3432 y(of)28 b(the)g(last)f(pixel)h(in)g(the)g(input)g(grid)f(along)f
-(eac)n(h)h(dimension.)427 3550 y(Note)f(that)h Ft(")p
-Fj(lbnd)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(")g Fj(together)f
-(de\014ne)h(the)h(shap)r(e)f(and)g(size)g(of)g(the)g(input)h(grid,)f
-(its)h(exten)n(t)427 3650 y(along)36 b(a)g(particular)f(\(j'th\))j
-(dimension)e(b)r(eing)g(ubnd[j]-lbnd[j]+1)i(\(assuming)d(the)i(index)g
-Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)427 3749 y(zero-based\).)69
-b(They)39 b(also)e(de\014ne)j(the)f(input)g(grid's)f(co)r(ordinate)g
-(system,)j(eac)n(h)d(pixel)h(ha)n(ving)f(unit)427 3849
-y(exten)n(t)28 b(along)e(eac)n(h)h(dimension)h(with)g(in)n(tegral)e(co)
-r(ordinate)h(v)-5 b(alues)27 b(at)g(its)h(cen)n(tre.)259
-3987 y Fd(in)427 4087 y Fj(P)n(oin)n(ter)j(to)i(an)f(arra)n(y)-7
-b(,)32 b(with)h(one)g(elemen)n(t)g(for)f(eac)n(h)g(pixel)g(in)h(the)g
-(input)h(grid,)f(con)n(taining)f(the)h(data)427 4186
-y(to)k(b)r(e)f(mask)n(ed.)63 b(The)37 b(n)n(umerical)e(t)n(yp)r(e)i(of)
-f(this)h(arra)n(y)d(should)i(matc)n(h)h(the)g(1-)e(or)h(2-c)n(haracter)
-d(t)n(yp)r(e)427 4286 y(co)r(de)28 b(app)r(ended)g(to)g(the)g(function)
-h(name)e(\(e.g.)38 b(if)28 b(y)n(ou)f(are)g(using)h(astMaskF,)f(the)h
-(t)n(yp)r(e)g(of)g(eac)n(h)f(arra)n(y)427 4385 y(elemen)n(t)h(should)f
-(b)r(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 4504 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-4604 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g
-(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 4703 y(indexing)28
-b(is)f(used\).)427 4822 y(On)e(exit,)g(the)h(samples)e(sp)r(eci\014ed)h
-(b)n(y)f Ft(")p Fj(inside)p Ft(")g Fj(are)g(set)h(to)f(the)i(v)-5
-b(alue)24 b(of)h Ft(")p Fj(v)-5 b(al)p Ft(")p Fj(.)35
-b(All)25 b(other)f(samples)h(are)427 4922 y(left)k(unc)n(hanged.)259
-5060 y Fd(v)-5 b(al)427 5159 y Fj(This)29 b(argumen)n(t)f(should)h(ha)n
-(v)n(e)e(the)j(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h(the)g
-Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29 b(sp)r(eci\014es)g
-(the)427 5259 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(the)h(mask)n(ed)e
-(data)h(\(see)h Ft(")p Fj(inside)p Ft(")p Fj(\).)0 5431
-y Fd(Returned)k(V)-8 b(alue:)259 5577 y(astMask)p Fl(<)p
-Fd(X)p Fl(>)p Fd(\(\))427 5677 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h
-(pixels)f(to)h(whic)n(h)f(a)g(v)-5 b(alue)28 b(of)f Ft(")p
-Fj(badv)-5 b(al)p Ft(")27 b Fj(has)g(b)r(een)h(assigned.)p
-eop end
-%%Page: 275 285
-TeXDict begin 275 284 bop 3643 52 a FF(275)0 351 y Fd(Notes:)340
-631 y Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r(e)
-g(returned)g(if)g(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)
-f(global)f(error)f(status)h(set,)h(or)427 731 y(if)i(it)g(should)g
-(fail)f(for)h(an)n(y)e(reason.)-2 890 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s
-(des)n(:)227 1036 y Fj(T)-7 b(o)26 b(select)g(the)g(appropriate)e
-(masking)h(function,)i(y)n(ou)e(should)h(replace)f Fl(<)p
-Fj(X)p Fl(>)h Fj(in)g(the)g(generic)f(function)i(name)227
-1136 y(astMask)p Fl(<)p Fj(X)p Fl(>)22 b Fj(with)i(a)f(1-)g(or)g(2-c)n
-(haracter)d(data)j(t)n(yp)r(e)h(co)r(de,)g(so)f(as)g(to)g(matc)n(h)h
-(the)g(n)n(umerical)e(t)n(yp)r(e)i Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)227 1236 y Fj(of)k(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h
-(as)f(follo)n(ws:)340 1369 y Fi(\017)45 b Fj(D:)28 b(double)340
-1500 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 1630 y Fi(\017)45
-b Fj(L:)28 b(long)f(in)n(t)340 1760 y Fi(\017)45 b Fj(UL:)28
-b(unsigned)g(long)e(in)n(t)340 1891 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 2021 y Fi(\017)45 b Fj(UI:)28 b(unsigned)g(in)n(t)340
-2151 y Fi(\017)45 b Fj(S:)28 b(short)f(in)n(t)340 2282
-y Fi(\017)45 b Fj(US:)28 b(unsigned)g(short)f(in)n(t)340
-2412 y Fi(\017)45 b Fj(B:)28 b(b)n(yte)f(\(signed)h(c)n(har\))340
-2542 y Fi(\017)45 b Fj(UB:)28 b(unsigned)f(b)n(yte)h(\(unsigned)g(c)n
-(har\))227 2702 y(F)-7 b(or)31 b(example,)h(astMaskD)e(w)n(ould)h(b)r
-(e)g(used)h(to)f(pro)r(cess)f Ft(")p Fj(double)p Ft(")g
-Fj(data,)i(while)f(astMaskS)f(w)n(ould)h(b)r(e)h(used)227
-2801 y(to)c(pro)r(cess)e Ft(")p Fj(short)h(in)n(t)p Ft(")g
-Fj(data,)g(etc.)p 0 2995 3780 12 v 0 3127 a Fz(astMatc)l(hAxes)254
-b Fe(Find)39 b(an)m(y)f(corresp)s(onding)f(axes)h(in)1596
-3240 y(t)m(w)m(o)f(F)-10 b(rames)2946 3127 y Fz(astMatc)l(hAxes)0
-3401 y Fd(Description:)44 b Fj(This)c(function)h(lo)r(oks)e(for)g
-(corresp)r(onding)f(axes)h(within)i(t)n(w)n(o)e(supplied)h(F)-7
-b(rames.)74 b(An)40 b(arra)n(y)e(of)227 3501 y(in)n(tegers)f(is)i
-(returned)f(that)g(con)n(tains)g(an)g(elemen)n(t)g(for)g(eac)n(h)f
-(axis)h(in)g(the)h(second)f(supplied)h(F)-7 b(rame.)68
-b(An)227 3600 y(elemen)n(t)36 b(in)h(this)f(arra)n(y)d(will)j(b)r(e)h
-(set)f(to)g(zero)e(if)j(the)f(asso)r(ciated)f(axis)g(within)h(the)h
-(second)e(F)-7 b(rame)36 b(has)f(no)227 3700 y(corresp)r(onding)j(axis)
-h(within)i(the)f(\014rst)g(F)-7 b(rame.)73 b(Otherwise,)43
-b(it)d(will)g(b)r(e)g(set)g(to)g(the)g(index)g(\(a)g(non-zero)227
-3799 y(p)r(ositiv)n(e)27 b(in)n(teger\))g(of)h(the)g(corresp)r(onding)e
-(axis)g(within)j(the)f(\014rst)f(supplied)h(F)-7 b(rame.)0
-3946 y Fd(Synopsis:)121 b Ft(void)42 b(astMatchAxes\()c(AstFrame)i
-Fi(\003)p Ft(frm1,)h(AstFrame)g Fi(\003)p Ft(frm2,)g(int)h
-Fi(\003)p Ft(axes)f(\))0 4093 y Fd(P)m(arameters:)259
-4227 y(frm1)427 4327 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(F)-7
-b(rame.)259 4457 y Fd(frm2)427 4557 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(second)f(F)-7 b(rame.)259 4687 y Fd(axes)427
-4787 y Fj(P)n(oin)n(ter)24 b(to)h(an)g(in)n(teger)g(arra)n(y)e(in)i
-(whic)n(h)g(to)h(return)e(the)i(indices)f(of)h(the)f(axes)g(\(within)h
-(the)g(\014rst)f(F)-7 b(rame\))427 4886 y(that)38 b(corresp)r(ond)f(to)
-g(eac)n(h)g(axis)g(within)i(the)f(second)f(F)-7 b(rame.)68
-b(Axis)37 b(indices)h(start)g(at)f(1.)68 b(A)38 b(v)-5
-b(alue)427 4986 y(of)34 b(zero)e(will)i(b)r(e)g(stored)f(in)h(the)f
-(returned)h(arra)n(y)d(for)i(eac)n(h)g(axis)f(in)i(the)g(second)f(F)-7
-b(rame)33 b(that)h(has)f(no)427 5086 y(corresp)r(onding)26
-b(axis)h(in)h(the)g(\014rst)f(F)-7 b(rame.)427 5201 y(The)26
-b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)h(in)f(this)h(arra)n(y)d(m)n(ust)j
-(b)r(e)g(greater)d(than)j(or)e(equal)h(to)g(the)h(n)n(um)n(b)r(er)f(of)
-h(axes)e(in)427 5300 y(the)k(second)f(F)-7 b(rame.)0
-5459 y Fd(Class)31 b(Applicabilit)m(y:)259 5593 y(F)-8
-b(rame)427 5693 y Fj(This)28 b(function)g(applies)f(to)h(all)f(F)-7
-b(rames.)p eop end
-%%Page: 276 286
-TeXDict begin 276 285 bop 0 52 a FF(276)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-654 y Fi(\017)45 b Fj(Corresp)r(onding)32 b(axes)h(are)g(iden)n
-(ti\014ed)i(b)n(y)f(the)g(fact)g(that)g(a)g(Mapping)g(can)f(b)r(e)i
-(found)f(b)r(et)n(w)n(een)g(them)427 754 y(using)25 b(astFindF)-7
-b(rame)25 b(or)g(astCon)n(v)n(ert.)34 b(Th)n(us,)26 b
-Ft(")p Fj(corresp)r(onding)d(axes)p Ft(")h Fj(are)g(not)i(necessarily)e
-(iden)n(tical.)427 853 y(F)-7 b(or)24 b(instance,)g(SkyF)-7
-b(rame)23 b(axes)g(in)h(t)n(w)n(o)f(F)-7 b(rames)23 b(will)h(matc)n(h)g
-(ev)n(en)f(if)i(they)f(describ)r(e)f(di\013eren)n(t)h(celestial)427
-953 y(co)r(ordinate)j(systems)p 0 1173 3780 12 v 0 1304
-a Fz(astMathMap)641 b Fe(Create)37 b(a)i(MathMap)639
-b Fz(astMathMap)0 1514 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(MathMap)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 1648 y(A)f(MathMap)f(is)h(a)f
-(Mapping)g(whic)n(h)h(allo)n(ws)e(y)n(ou)h(to)g(sp)r(ecify)h(a)f(set)g
-(of)h(forw)n(ard)e(and/or)g(in)n(v)n(erse)g(transforma-)227
-1748 y(tion)33 b(functions)g(using)f(arithmetic)h(op)r(erations)e(and)h
-(mathematical)g(functions)h(similar)f(to)h(those)f(a)n(v)-5
-b(ailable)227 1848 y(in)28 b(C.)g(The)f(MathMap)g(in)n(terprets)g
-(these)h(functions)f(at)h(run-time,)f(whenev)n(er)g(its)g(forw)n(ard)f
-(or)h(in)n(v)n(erse)f(trans-)227 1947 y(formation)38
-b(is)h(required.)68 b(Because)38 b(the)h(functions)g(are)e(not)i
-(compiled)g(in)f(the)h(normal)f(sense)g(\(unlik)n(e)h(an)227
-2047 y(In)n(traMap\),)32 b(they)g(ma)n(y)f(b)r(e)h(used)g(to)f(describ)
-r(e)g(co)r(ordinate)g(transformations)f(in)i(a)f(transp)r(ortable)f
-(manner.)227 2146 y(A)25 b(MathMap)g(therefore)f(pro)n(vides)f(a)i
-(\015exible)f(w)n(a)n(y)g(of)h(de\014ning)g(new)f(t)n(yp)r(es)h(of)g
-(Mapping)f(whose)g(descriptions)227 2246 y(ma)n(y)j(b)r(e)h(stored)f
-(as)g(part)g(of)h(a)f(dataset)g(and)g(in)n(terpreted)g(b)n(y)h(other)f
-(programs.)0 2416 y Fd(Synopsis:)121 b Ft(AstMathMap)39
-b Fi(\003)p Ft(astMathMap\()g(int)j(nin,)g(int)g(nout,)g(int)g(nfwd,)g
-(const)f(char)h Fi(\003)p Ft(fwd[],)f(int)h(ninv,)227
-2516 y(const)g(char)g Fi(\003)p Ft(inv[],)e(const)i(char)g
-Fi(\003)p Ft(options,)e(...)86 b(\))0 2685 y Fd(P)m(arameters:)259
-2842 y(nin)427 2942 y Fj(Num)n(b)r(er)28 b(of)f(input)i(v)-5
-b(ariables)26 b(for)h(the)h(MathMap.)36 b(This)28 b(determines)f(the)h
-(v)-5 b(alue)27 b(of)h(its)f(Nin)h(attribute.)259 3085
-y Fd(nout)427 3185 y Fj(Num)n(b)r(er)20 b(of)g(output)h(v)-5
-b(ariables)18 b(for)h(the)i(MathMap.)34 b(This)20 b(determines)f(the)i
-(v)-5 b(alue)19 b(of)h(its)g(Nout)g(attribute.)259 3328
-y Fd(nfwd)427 3427 y Fj(The)26 b(n)n(um)n(b)r(er)f(of)h(forw)n(ard)e
-(transformation)g(functions)i(b)r(eing)g(supplied.)37
-b(This)25 b(m)n(ust)h(b)r(e)g(at)g(least)f(equal)427
-3527 y(to)35 b Ft(")p Fj(nout)p Ft(")p Fj(,)g(but)g(ma)n(y)f(b)r(e)h
-(increased)f(to)g(accommo)r(date)f(an)n(y)h(additional)g(expressions)f
-(whic)n(h)h(de\014ne)427 3626 y(in)n(termediate)23 b(v)-5
-b(ariables)21 b(for)i(the)g(forw)n(ard)e(transformation)g(\(see)i(the)g
-Ft(")p Fj(Calculating)f(In)n(termediate)g(V)-7 b(al-)427
-3726 y(ues)p Ft(")27 b Fj(section)h(b)r(elo)n(w\).)259
-3869 y Fd(fwd)427 3969 y Fj(An)36 b(arra)n(y)c(\(with)k
-Ft(")p Fj(nfwd)p Ft(")f Fj(elemen)n(ts\))g(of)g(p)r(oin)n(ters)f(to)h
-(n)n(ull)g(terminated)g(strings)f(whic)n(h)h(con)n(tain)f(the)427
-4068 y(expressions)22 b(de\014ning)i(the)g(forw)n(ard)e
-(transformation.)34 b(The)24 b(syn)n(tax)f(of)g(these)h(expressions)e
-(is)i(describ)r(ed)427 4168 y(b)r(elo)n(w.)259 4311 y
-Fd(nin)m(v)427 4411 y Fj(The)k(n)n(um)n(b)r(er)g(of)g(in)n(v)n(erse)f
-(transformation)f(functions)i(b)r(eing)h(supplied.)38
-b(This)28 b(m)n(ust)g(b)r(e)h(at)f(least)f(equal)427
-4510 y(to)21 b Ft(")p Fj(nin)p Ft(")p Fj(,)h(but)f(ma)n(y)f(b)r(e)h
-(increased)e(to)i(accommo)r(date)f(an)n(y)g(additional)g(expressions)f
-(whic)n(h)h(de\014ne)h(in)n(ter-)427 4610 y(mediate)30
-b(v)-5 b(ariables)28 b(for)h(the)h(in)n(v)n(erse)e(transformation)g
-(\(see)h(the)h Ft(")p Fj(Calculating)e(In)n(termediate)h(V)-7
-b(alues)p Ft(")427 4710 y Fj(section)27 b(b)r(elo)n(w\).)259
-4853 y Fd(in)m(v)427 4952 y Fj(An)37 b(arra)n(y)d(\(with)k
-Ft(")p Fj(nin)n(v)p Ft(")d Fj(elemen)n(ts\))i(of)g(p)r(oin)n(ters)f(to)
-g(n)n(ull)h(terminated)f(strings)g(whic)n(h)g(con)n(tain)g(the)427
-5052 y(expressions)25 b(de\014ning)i(the)g(in)n(v)n(erse)e
-(transformation.)35 b(The)27 b(syn)n(tax)e(of)i(these)f(expressions)f
-(is)i(describ)r(ed)427 5151 y(b)r(elo)n(w.)259 5295 y
-Fd(options)427 5394 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g
-(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 5494 y(assignmen)n(ts)21 b(to)h(b)r(e)h(used)f(for)g
-(initialising)g(the)h(new)f(MathMap.)35 b(The)22 b(syn)n(tax)g(used)g
-(is)g(iden)n(tical)g(to)g(that)427 5593 y(for)k(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 5693 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)35 b(If)28 b(no)g(initialisation)f(is)g(required,)g
-(a)g(zero-length)f(string)h(ma)n(y)g(b)r(e)h(supplied.)p
-eop end
-%%Page: 277 287
-TeXDict begin 277 286 bop 3643 52 a FF(277)259 351 y
-Fd(...)427 451 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 551 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 650 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 750 y Fj(function\).)0 923 y
-Fd(Returned)32 b(V)-8 b(alue:)259 1071 y(astMathMap\(\))427
-1171 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(MathMap.)0
-1344 y Fd(Notes:)340 1638 y Fi(\017)45 b Fj(The)e(sequence)f(of)h(n)n
-(um)n(b)r(ers)f(pro)r(duced)g(b)n(y)h(the)g(random)f(n)n(um)n(b)r(er)g
-(functions)h(a)n(v)-5 b(ailable)42 b(within)h(a)427 1737
-y(MathMap)c(is)h(normally)e(unpredictable)h(and)g(di\013eren)n(t)h(for)
-f(eac)n(h)f(MathMap.)72 b(Ho)n(w)n(ev)n(er,)41 b(this)f(b)r(e-)427
-1837 y(ha)n(viour)26 b(ma)n(y)h(b)r(e)h(con)n(trolled)f(b)n(y)g(means)g
-(of)h(the)g(MathMap's)f(Seed)g(attribute.)340 1976 y
-Fi(\017)45 b Fj(Normally)-7 b(,)28 b(comp)r(ound)g(Mappings)f
-(\(CmpMaps\))i(whic)n(h)f(in)n(v)n(olv)n(e)f(MathMaps)g(will)i(not)f(b)
-r(e)g(sub)5 b(ject)29 b(to)427 2075 y(simpli\014cation)34
-b(\(e.g.)56 b(using)34 b(astSimplify\))h(b)r(ecause)e(AST)i(cannot)e
-(kno)n(w)g(ho)n(w)h(di\013eren)n(t)g(MathMaps)427 2175
-y(will)f(in)n(teract.)52 b(Ho)n(w)n(ev)n(er,)32 b(in)h(the)h(sp)r
-(ecial)e(case)g(where)g(a)h(MathMap)f(o)r(ccurs)g(in)h(series)f(with)h
-(its)g(o)n(wn)427 2274 y(in)n(v)n(erse,)21 b(then)h(simpli\014cation)g
-(ma)n(y)e(b)r(e)i(p)r(ossible.)34 b(Whether)22 b(simpli\014cation)f(do)
-r(es,)i(in)e(fact,)i(o)r(ccur)e(under)427 2374 y(these)28
-b(circumstances)e(is)i(con)n(trolled)e(b)n(y)i(the)g(MathMap's)f
-(SimpFI)h(and)g(SimpIF)g(attributes.)340 2513 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2612 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 2786 y Fd(De\014ning)32 b(T)-8 b(ransformation)32
-b(F)-8 b(unctions)n(:)227 2932 y Fj(A)24 b(MathMap's)g(transformation)e
-(functions)i(are)e(supplied)j(as)e(a)g(set)h(of)f(expressions)f(in)i
-(an)g(arra)n(y)d(of)j(c)n(haracter)227 3031 y(strings.)34
-b(Normally)19 b(y)n(ou)g(w)n(ould)g(supply)h(the)g(same)g(n)n(um)n(b)r
-(er)f(of)h(expressions)e(for)i(the)g(forw)n(ard)e(transformation,)227
-3131 y(via)27 b(the)h Ft(")p Fj(fwd)p Ft(")f Fj(parameter,)f(as)h
-(there)g(are)g(output)h(v)-5 b(ariables)26 b(\(giv)n(en)h(b)n(y)g(the)h
-(MathMap's)f(Nout)h(attribute\).)227 3231 y(F)-7 b(or)27
-b(instance,)h(if)g(Nout)g(is)f(2)g(y)n(ou)g(migh)n(t)h(use:)340
-3378 y Fi(\017)45 b Ft(")p Fj(r)27 b(=)g(sqrt\()h(x)f
-Fi(\003)g Fj(x)h(+)f(y)h Fi(\003)f Fj(y)g(\))p Ft(")340
-3517 y Fi(\017)45 b Ft(")p Fj(theta)28 b(=)f(atan2\()g(y)-7
-b(,)27 b(x)h(\))p Ft(")227 3690 y Fj(whic)n(h)21 b(de\014nes)f(a)g
-(transformation)f(from)h(Cartesian)f(to)i(p)r(olar)e(co)r(ordinates.)33
-b(Here,)22 b(the)f(v)-5 b(ariables)19 b(that)i(app)r(ear)227
-3790 y(on)28 b(the)g(left)g(of)g(eac)n(h)f(expression)f(\()p
-Ft(")p Fj(r)p Ft(")h Fj(and)h Ft(")p Fj(theta)p Ft(")p
-Fj(\))f(pro)n(vide)g(names)g(for)g(the)i(output)f(v)-5
-b(ariables)26 b(and)i(those)227 3889 y(that)g(app)r(ear)f(on)g(the)h
-(righ)n(t)f(\()p Ft(")p Fj(x)p Ft(")g Fj(and)g Ft(")p
-Fj(y)p Ft(")p Fj(\))g(are)g(references)f(to)i(input)g(v)-5
-b(ariables.)227 4020 y(T)e(o)25 b(complemen)n(t)g(this,)h(y)n(ou)e(m)n
-(ust)i(also)e(supply)h(expressions)e(for)i(the)g(in)n(v)n(erse)f
-(transformation)g(via)g(the)i Ft(")p Fj(in)n(v)p Ft(")227
-4119 y Fj(parameter.)57 b(In)35 b(this)g(case,)g(the)g(n)n(um)n(b)r(er)
-g(of)f(expressions)f(giv)n(en)h(w)n(ould)g(normally)g(matc)n(h)g(the)h
-(n)n(um)n(b)r(er)g(of)227 4219 y(MathMap)28 b(input)g(co)r(ordinates)e
-(\(giv)n(en)h(b)n(y)h(the)g(Nin)g(attribute\).)37 b(If)28
-b(Nin)g(is)g(2,)f(y)n(ou)g(migh)n(t)g(use:)340 4367 y
-Fi(\017)45 b Ft(")p Fj(x)27 b(=)h(r)f Fi(\003)g Fj(cos\()g(theta)h(\))p
-Ft(")340 4505 y Fi(\017)45 b Ft(")p Fj(y)27 b(=)h(r)f
-Fi(\003)g Fj(sin\()h(theta)g(\))p Ft(")227 4679 y Fj(whic)n(h)f
-(expresses)e(the)i(transformation)e(from)i(p)r(olar)f(to)g(Cartesian)g
-(co)r(ordinates.)35 b(Note)26 b(that)h(here)g(the)g(input)227
-4778 y(v)-5 b(ariables)31 b(\()p Ft(")p Fj(x)p Ft(")h
-Fj(and)g Ft(")p Fj(y)p Ft(")p Fj(\))g(are)f(named)i(on)f(the)h(left)g
-(of)f(eac)n(h)f(expression,)i(and)f(the)h(output)f(v)-5
-b(ariables)32 b(\()p Ft(")p Fj(r)p Ft(")227 4878 y Fj(and)c
-Ft(")p Fj(theta)p Ft(")p Fj(\))f(are)g(referenced)f(on)i(the)g(righ)n
-(t.)227 5008 y(Normally)-7 b(,)25 b(y)n(ou)e(cannot)i(refer)f(to)g(a)g
-(v)-5 b(ariable)24 b(on)g(the)h(righ)n(t)f(of)h(an)f(expression)f
-(unless)h(it)i(is)e(named)h(on)f(the)h(left)227 5108
-y(of)j(an)g(expression)f(in)i(the)f(complemen)n(tary)f(set)h(of)h
-(functions.)39 b(Therefore)27 b(b)r(oth)h(sets)g(of)g(functions)h
-(\(forw)n(ard)227 5207 y(and)d(in)n(v)n(erse\))e(m)n(ust)i(b)r(e)g
-(form)n(ulated)f(using)g(the)i(same)e(consisten)n(t)g(set)g(of)h(v)-5
-b(ariable)25 b(names.)35 b(This)26 b(means)f(that)227
-5307 y(if)35 b(y)n(ou)f(wish)h(to)f(lea)n(v)n(e)g(one)g(of)g(the)h
-(transformations)e(unde\014ned,)k(y)n(ou)d(m)n(ust)h(supply)g(dumm)n(y)
-f(expressions)227 5407 y(whic)n(h)28 b(simply)f(name)h(eac)n(h)f(of)g
-(the)h(output)g(\(or)f(input\))i(v)-5 b(ariables.)36
-b(F)-7 b(or)27 b(example,)g(y)n(ou)g(migh)n(t)g(use:)340
-5554 y Fi(\017)45 b Ft(")p Fj(x)p Ft(")340 5693 y Fi(\017)g
-Ft(")p Fj(y)p Ft(")p eop end
-%%Page: 278 288
-TeXDict begin 278 287 bop 0 52 a FF(278)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(for)22
-b(the)h(in)n(v)n(erse)d(transformation)h(ab)r(o)n(v)n(e,)h(whic)n(h)g
-(serv)n(es)f(to)h(name)g(the)g(input)h(v)-5 b(ariables)21
-b(but)i(without)g(de\014ning)227 451 y(an)28 b(in)n(v)n(erse)e
-(transformation.)-2 612 y Fd(Calculating)32 b(In)m(termediate)g(V)-8
-b(alues)n(:)227 758 y Fj(It)23 b(is)g(sometimes)g(useful)g(to)g
-(calculate)f(in)n(termediate)g(v)-5 b(alues)23 b(and)g(then)g(to)g(use)
-f(these)h(in)g(the)h(\014nal)e(expressions)227 858 y(for)28
-b(the)g(output)h(\(or)e(input\))i(v)-5 b(ariables.)37
-b(This)27 b(ma)n(y)h(b)r(e)g(done)g(b)n(y)f(supplying)h(additional)g
-(expressions)e(for)h(the)227 957 y(forw)n(ard)e(\(or)i(in)n(v)n(erse\))
-e(transformation)h(functions.)36 b(F)-7 b(or)27 b(instance,)g(the)g
-(follo)n(wing)f(arra)n(y)e(of)j(\014v)n(e)f(expressions)227
-1057 y(describ)r(es)h(2-dimensional)g(pin-cushion)g(distortion:)340
-1205 y Fi(\017)45 b Ft(")p Fj(r)27 b(=)g(sqrt\()h(xin)f
-Fi(\003)g Fj(xin)h(+)f(yin)h Fi(\003)f Fj(yin)h(\))p
-Ft(")340 1344 y Fi(\017)45 b Ft(")p Fj(rout)27 b(=)g(r)g
-Fi(\003)h Fj(\()g(1)f(+)g(0.1)g Fi(\003)g Fj(r)g Fi(\003)g
-Fj(r)g(\))p Ft(")340 1483 y Fi(\017)45 b Ft(")p Fj(theta)28
-b(=)f(atan2\()g(yin,)h(xin)f(\))p Ft(")340 1621 y Fi(\017)45
-b Ft(")p Fj(xout)27 b(=)h(rout)f Fi(\003)g Fj(cos\()g(theta)h(\))p
-Ft(")340 1760 y Fi(\017)45 b Ft(")p Fj(y)n(out)27 b(=)g(rout)g
-Fi(\003)h Fj(sin\()f(theta)h(\))p Ft(")227 1934 y Fj(Here,)35
-b(w)n(e)e(\014rst)h(calculate)f(three)g(in)n(termediate)h(results)f(\()
-p Ft(")p Fj(r)p Ft(")p Fj(,)h Ft(")p Fj(rout)p Ft(")f
-Fj(and)g Ft(")p Fj(theta)p Ft(")p Fj(\))g(and)h(then)g(use)g(these)227
-2033 y(to)e(calculate)f(the)i(\014nal)f(results)f(\()p
-Ft(")p Fj(xout)p Ft(")g Fj(and)h Ft(")p Fj(y)n(out)p
-Ft(")p Fj(\).)49 b(The)32 b(MathMap)g(kno)n(ws)e(that)j(only)e(the)i
-(\014nal)e(t)n(w)n(o)227 2133 y(results)f(constitute)g(v)-5
-b(alues)30 b(for)f(the)i(output)f(v)-5 b(ariables)29
-b(b)r(ecause)h(its)g(Nout)g(attribute)g(is)g(set)g(to)g(2.)44
-b(Y)-7 b(ou)30 b(ma)n(y)227 2233 y(de\014ne)i(as)g(man)n(y)f(in)n
-(termediate)g(v)-5 b(ariables)31 b(in)h(this)g(w)n(a)n(y)f(as)g(y)n(ou)
-g(c)n(ho)r(ose.)49 b(Ha)n(ving)31 b(de\014ned)h(a)f(v)-5
-b(ariable,)32 b(y)n(ou)227 2332 y(ma)n(y)27 b(then)h(refer)f(to)h(it)g
-(on)f(the)h(righ)n(t)f(of)g(an)n(y)g(subsequen)n(t)g(expressions.)227
-2463 y(Note)36 b(that)g(when)g(de\014ning)g(the)g(in)n(v)n(erse)e
-(transformation)g(y)n(ou)h(ma)n(y)g(only)g(refer)g(to)h(the)g(output)g
-(v)-5 b(ariables)227 2562 y Ft(")p Fj(xout)p Ft(")34
-b Fj(and)h Ft(")p Fj(y)n(out)p Ft(")p Fj(.)58 b(The)35
-b(in)n(termediate)f(v)-5 b(ariables)34 b Ft(")p Fj(r)p
-Ft(")p Fj(,)h Ft(")p Fj(rout)p Ft(")f Fj(and)h Ft(")p
-Fj(theta)p Ft(")f Fj(\(ab)r(o)n(v)n(e\))g(are)g(priv)-5
-b(ate)35 b(to)227 2662 y(the)28 b(forw)n(ard)d(transformation)g(and)i
-(ma)n(y)f(not)h(b)r(e)g(referenced)g(b)n(y)f(the)i(in)n(v)n(erse)d
-(transformation.)35 b(The)27 b(in)n(v)n(erse)227 2762
-y(transformation)f(ma)n(y)-7 b(,)27 b(ho)n(w)n(ev)n(er,)f(de\014ne)i
-(its)f(o)n(wn)g(priv)-5 b(ate)28 b(in)n(termediate)f(v)-5
-b(ariables.)-2 2923 y Fd(Expression)31 b(Syn)m(tax)n(:)227
-3069 y Fj(The)39 b(expressions)d(giv)n(en)i(for)g(the)h(forw)n(ard)d
-(and)j(in)n(v)n(erse)e(transformations)f(closely)i(follo)n(w)f(the)i
-(syn)n(tax)f(of)227 3169 y(the)c(C)f(programming)e(language)g(\(with)j
-(some)f(extensions)f(for)h(compatibilit)n(y)g(with)h(F)-7
-b(ortran\).)52 b(They)33 b(ma)n(y)227 3268 y(con)n(tain)c(references)g
-(to)g(v)-5 b(ariables)29 b(and)g(literal)h(constan)n(ts,)f(together)g
-(with)h(arithmetic,)g(b)r(o)r(olean,)g(relational)227
-3368 y(and)23 b(bit)n(wise)g(op)r(erators,)e(and)i(function)g(in)n(v)n
-(o)r(cations.)34 b(A)23 b(set)g(of)g(sym)n(b)r(olic)f(constan)n(ts)g
-(is)g(also)g(a)n(v)-5 b(ailable.)34 b(Eac)n(h)227 3467
-y(of)g(these)f(is)h(describ)r(ed)f(in)h(detail)g(b)r(elo)n(w.)54
-b(P)n(aren)n(theses)32 b(ma)n(y)h(b)r(e)h(used)f(to)h(o)n(v)n(er-ride)d
-(the)j(normal)e(order)h(of)227 3567 y(ev)-5 b(aluation.)41
-b(There)28 b(is)h(no)g(built-in)g(limit)h(to)f(the)g(length)g(of)g
-(expressions)e(and)i(they)g(are)f(insensitiv)n(e)h(to)f(case)227
-3667 y(or)f(the)h(presence)f(of)g(additional)g(white)h(space.)-2
-3828 y Fd(V)-8 b(ariables)n(:)227 3974 y Fj(V)h(ariable)26
-b(names)h(m)n(ust)f(b)r(egin)h(with)h(an)e(alphab)r(etic)h(c)n
-(haracter)e(and)h(ma)n(y)g(con)n(tain)h(only)f(alphab)r(etic)h(c)n
-(harac-)227 4074 y(ters,)j(digits,)g(and)f(the)h(underscore)e(c)n
-(haracter)f Ft("_")p Fj(.)42 b(There)29 b(is)g(no)g(built-in)h(limit)g
-(to)g(the)g(length)f(of)h(v)-5 b(ariable)227 4173 y(names.)-2
-4335 y Fd(Literal)32 b(Constan)m(ts)n(:)227 4481 y Fj(Literal)g
-(constan)n(ts,)h(suc)n(h)g(as)e Ft(")p Fj(0)p Ft(")p
-Fj(,)i Ft(")p Fj(1)p Ft(")p Fj(,)g Ft(")p Fj(0.007)p
-Ft(")d Fj(or)i Ft(")p Fj(2.505e-16)p Ft(")c Fj(ma)n(y)k(app)r(ear)g(in)
-h(expressions,)f(with)h(the)227 4580 y(decimal)28 b(p)r(oin)n(t)g(and)f
-(exp)r(onen)n(t)g(b)r(eing)h(optional)f(\(a)h Ft(")p
-Fj(D)p Ft(")f Fj(ma)n(y)g(also)f(b)r(e)i(used)g(as)f(an)g(exp)r(onen)n
-(t)h(c)n(haracter)d(for)227 4680 y(compatibilit)n(y)j(with)g(F)-7
-b(ortran\).)36 b(A)28 b(unary)e(min)n(us)i Ft(")p Fj(-)p
-Ft(")f Fj(ma)n(y)f(b)r(e)i(used)g(as)f(a)g(pre\014x.)-2
-4841 y Fd(Arithmetic)32 b(Precision)n(:)227 4987 y Fj(All)c(arithmetic)
-g(is)f(\015oating)g(p)r(oin)n(t,)h(p)r(erformed)f(in)h(double)f
-(precision.)-2 5148 y Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-5295 y Fj(Unless)i(indicated)g(otherwise,)h(if)f(an)n(y)f(argumen)n(t)g
-(of)h(a)g(function)g(or)g(op)r(erator)e(has)h(the)i(v)-5
-b(alue)32 b(AST)p Ft(__)p Fj(BAD)227 5394 y(\(indicating)38
-b(missing)f(data\),)j(then)e(the)g(result)f(of)g(that)h(function)g(or)e
-(op)r(eration)h(is)g(also)g(AST)p Ft(__)p Fj(BAD,)g(so)227
-5494 y(that)k(suc)n(h)e(v)-5 b(alues)40 b(are)f(propagated)f
-(automatically)h(through)g(all)h(op)r(erations)f(p)r(erformed)g(b)n(y)h
-(MathMap)227 5593 y(transformations.)35 b(The)26 b(sp)r(ecial)h(v)-5
-b(alue)26 b(AST)p Ft(__)p Fj(BAD)g(can)h(b)r(e)f(represen)n(ted)g(in)g
-(expressions)f(b)n(y)h(the)h(sym)n(b)r(olic)227 5693
-y(constan)n(t)g Ft(")p Fl(<)p Fj(bad)p Fl(>)p Ft(")p
-Fj(.)p eop end
-%%Page: 279 289
-TeXDict begin 279 288 bop 3643 52 a FF(279)227 351 y
-Fj(A)33 b Fl(<)p Fj(bad)p Fl(>)f Fj(result)g(\(i.e.)52
-b(equal)32 b(to)h(AST)p Ft(__)p Fj(BAD\))g(is)f(also)g(pro)r(duced)g
-(in)h(resp)r(onse)f(to)g(an)n(y)g(n)n(umerical)g(error)227
-451 y(\(suc)n(h)f(as)f(division)h(b)n(y)g(zero)e(or)h(n)n(umerical)g(o)
-n(v)n(er\015o)n(w\),)g(or)g(if)h(an)g(in)n(v)-5 b(alid)31
-b(argumen)n(t)f(v)-5 b(alue)31 b(is)f(pro)n(vided)g(to)h(a)227
-551 y(function)d(or)f(op)r(erator.)-2 699 y Fd(Arithmetic)32
-b(Op)s(erators)n(:)227 845 y Fj(The)c(follo)n(wing)e(arithmetic)i(op)r
-(erators)e(are)g(a)n(v)-5 b(ailable:)340 981 y Fi(\017)45
-b Fj(x1)27 b(+)h(x2:)36 b(Sum)28 b(of)f Ft(")p Fj(x1)p
-Ft(")g Fj(and)g Ft(")p Fj(x2)p Ft(")p Fj(.)340 1113 y
-Fi(\017)45 b Fj(x1)27 b(-)h(x2:)36 b(Di\013erence)28
-b(of)f Ft(")p Fj(x1)p Ft(")f Fj(and)i Ft(")p Fj(x2)p
-Ft(")p Fj(.)340 1245 y Fi(\017)45 b Fj(x1)27 b Fi(\003)g
-Fj(x2:)37 b(Pro)r(duct)27 b(of)g Ft(")p Fj(x1)p Ft(")f
-Fj(and)i Ft(")p Fj(x1)p Ft(")p Fj(.)340 1377 y Fi(\017)45
-b Fj(x1)27 b(/)g(x2:)37 b(Ratio)27 b(of)g Ft(")p Fj(x1)p
-Ft(")g Fj(and)g Ft(")p Fj(x2)p Ft(")p Fj(.)340 1509 y
-Fi(\017)45 b Fj(x1)27 b Fi(\003\003)g Fj(x2:)36 b Ft(")p
-Fj(x1)p Ft(")26 b Fj(raised)h(to)g(the)h(p)r(o)n(w)n(er)f(of)g
-Ft(")p Fj(x2)p Ft(")p Fj(.)340 1642 y Fi(\017)45 b Fj(+)28
-b(x:)36 b(Unary)27 b(plus,)h(has)f(no)g(e\013ect)h(on)g(its)g(argumen)n
-(t.)340 1774 y Fi(\017)45 b Fj(-)28 b(x:)36 b(Unary)27
-b(min)n(us,)h(negates)f(its)g(argumen)n(t.)-2 1935 y
-Fd(Bo)s(olean)k(Op)s(erators)n(:)227 2081 y Fj(Bo)r(olean)c(v)-5
-b(alues)27 b(are)g(represen)n(ted)f(using)h(zero)g(to)h(indicate)f
-(false)h(and)f(non-zero)f(to)i(indicate)f(true.)37 b(In)28
-b(addi-)227 2181 y(tion,)22 b(the)f(v)-5 b(alue)21 b(AST)p
-Ft(__)p Fj(BAD)f(is)h(tak)n(en)f(to)g(mean)g Ft(")p Fj(unkno)n(wn)p
-Ft(")p Fj(.)34 b(The)20 b(v)-5 b(alues)20 b(returned)g(b)n(y)h(b)r(o)r
-(olean)f(op)r(erators)227 2280 y(ma)n(y)33 b(therefore)g(b)r(e)h(0,)g
-(1)g(or)e(AST)p Ft(__)p Fj(BAD.)i(Where)f(appropriate,)h
-Ft(")p Fj(tri-state)p Ft(")e Fj(logic)g(is)i(implemen)n(ted.)55
-b(F)-7 b(or)227 2380 y(example,)29 b Ft(")p Fj(a)p Fi(jj)p
-Fj(b)p Ft(")f Fj(ma)n(y)g(ev)-5 b(aluate)28 b(to)g(1)h(if)g
-Ft(")p Fj(a)p Ft(")e Fj(is)i(non-zero,)e(ev)n(en)i(if)g
-Ft(")p Fj(b)p Ft(")f Fj(has)g(the)h(v)-5 b(alue)29 b(AST)p
-Ft(__)p Fj(BAD.)g(This)227 2479 y(is)g(b)r(ecause)f(the)h(result)f(of)h
-(the)g(op)r(eration)f(w)n(ould)g(not)h(b)r(e)g(a\013ected)f(b)n(y)h
-(the)g(v)-5 b(alue)28 b(of)h Ft(")p Fj(b)p Ft(")p Fj(,)f(so)g(long)g
-(as)g Ft(")p Fj(a)p Ft(")g Fj(is)227 2579 y(non-zero.)227
-2703 y(The)g(follo)n(wing)e(b)r(o)r(olean)h(op)r(erators)f(are)h(a)n(v)
--5 b(ailable:)340 2839 y Fi(\017)45 b Fj(x1)34 b(&&)g(x2:)50
-b(Bo)r(olean)33 b(AND)i(b)r(et)n(w)n(een)g Ft(")p Fj(x1)p
-Ft(")e Fj(and)h Ft(")p Fj(x2)p Ft(")p Fj(,)h(returning)f(1)g(if)g(b)r
-(oth)h Ft(")p Fj(x1)p Ft(")e Fj(and)i Ft(")p Fj(x2)p
-Ft(")e Fj(are)427 2938 y(non-zero,)c(and)g(0)g(otherwise.)42
-b(This)30 b(op)r(erator)e(implemen)n(ts)i(tri-state)f(logic.)42
-b(\(The)30 b(synon)n(ym)e Ft(")p Fj(.and.)p Ft(")427
-3038 y Fj(is)g(also)e(pro)n(vided)h(for)g(compatibilit)n(y)g(with)h(F)
--7 b(ortran.\))340 3170 y Fi(\017)45 b Fj(x1)32 b Fi(jj)h
-Fj(x2:)47 b(Bo)r(olean)32 b(OR)g(b)r(et)n(w)n(een)h Ft(")p
-Fj(x1)p Ft(")e Fj(and)i Ft(")p Fj(x2)p Ft(")p Fj(,)g(returning)f(1)g
-(if)h(either)g Ft(")p Fj(x1)p Ft(")e Fj(or)h Ft(")p Fj(x2)p
-Ft(")f Fj(are)h(non-)427 3270 y(zero,)27 b(and)h(0)f(otherwise.)36
-b(This)28 b(op)r(erator)e(implemen)n(ts)i(tri-state)f(logic.)36
-b(\(The)28 b(synon)n(ym)f Ft(")p Fj(.or.)p Ft(")f Fj(is)i(also)427
-3369 y(pro)n(vided)f(for)g(compatibilit)n(y)g(with)h(F)-7
-b(ortran.\))340 3502 y Fi(\017)45 b Fj(x1)23 b Fi(^^)h
-Fj(x2:)34 b(Bo)r(olean)23 b(exclusiv)n(e)f(OR)h(\(X)n(OR\))h(b)r(et)n
-(w)n(een)f Ft(")p Fj(x1)p Ft(")f Fj(and)i Ft(")p Fj(x2)p
-Ft(")p Fj(,)e(returning)h(1)g(if)h(exactly)f(one)g(of)427
-3601 y Ft(")p Fj(x1)p Ft(")17 b Fj(and)h Ft(")p Fj(x2)p
-Ft(")f Fj(is)i(non-zero,)f(and)h(0)f(otherwise.)33 b(T)-7
-b(ri-state)17 b(logic)h(is)g(not)g(used)h(with)f(this)h(op)r(erator.)32
-b(\(The)427 3701 y(synon)n(yms)22 b Ft(")p Fj(.neqv.)p
-Ft(")g Fj(and)g Ft(")p Fj(.xor.)p Ft(")f Fj(are)h(also)g(pro)n(vided)f
-(for)i(compatibilit)n(y)f(with)i(F)-7 b(ortran,)22 b(although)g(the)427
-3800 y(second)27 b(of)h(these)f(is)h(not)g(standard.\))340
-3933 y Fi(\017)45 b Fj(x1)38 b(.eqv.)67 b(x2:)57 b(This)38
-b(is)f(pro)n(vided)g(only)h(for)f(compatibilit)n(y)h(with)g(F)-7
-b(ortran)37 b(and)h(tests)f(whether)h(the)427 4032 y(b)r(o)r(olean)26
-b(states)f(of)h Ft(")p Fj(x1)p Ft(")e Fj(and)i Ft(")p
-Fj(x2)p Ft(")e Fj(\(i.e.)37 b(true/false\))25 b(are)g(equal.)36
-b(It)26 b(is)g(the)g(negativ)n(e)e(of)i(the)h(exclusiv)n(e)427
-4132 y(OR)h(\(X)n(OR\))g(function.)37 b(T)-7 b(ri-state)27
-b(logic)f(is)i(not)f(used)h(with)g(this)g(op)r(erator.)340
-4264 y Fi(\017)45 b Fj(!)35 b(x:)f(Bo)r(olean)20 b(unary)h(NOT)g(op)r
-(eration,)h(returning)e(1)h(if)h Ft(")p Fj(x)p Ft(")f
-Fj(is)g(zero,)h(and)f(0)g(otherwise.)34 b(\(The)22 b(synon)n(ym)427
-4364 y Ft(")p Fj(.not.)p Ft(")27 b Fj(is)h(also)e(pro)n(vided)h(for)g
-(compatibilit)n(y)g(with)h(F)-7 b(ortran.\))-2 4525 y
-Fd(Relational)31 b(Op)s(erators)n(:)227 4671 y Fj(Relational)22
-b(op)r(erators)e(return)i(the)g(b)r(o)r(olean)g(result)g(\(0)g(or)f
-(1\))h(of)g(comparing)f(the)i(v)-5 b(alues)21 b(of)i(t)n(w)n(o)e
-(\015oating)g(p)r(oin)n(t)227 4770 y(v)-5 b(alues)30
-b(for)g(equalit)n(y)g(or)f(inequalit)n(y)-7 b(.)45 b(The)31
-b(v)-5 b(alue)30 b(AST)p Ft(__)p Fj(BAD)h(ma)n(y)e(also)h(b)r(e)h
-(returned)e(if)i(either)g(argumen)n(t)227 4870 y(is)d
-Fl(<)p Fj(bad)p Fl(>)p Fj(.)227 4994 y(The)g(follo)n(wing)e(relational)
-h(op)r(erators)e(are)i(a)n(v)-5 b(ailable:)340 5130 y
-Fi(\017)45 b Fj(x1)c(==)g(x2:)64 b(T)-7 b(ests)41 b(whether)g
-Ft(")p Fj(x1)p Ft(")f Fj(equals)h Ft(")p Fj(x1)p Ft(")p
-Fj(.)76 b(\(The)42 b(synon)n(ym)f Ft(")p Fj(.eq.)p Ft(")f
-Fj(is)h(also)g(pro)n(vided)f(for)427 5230 y(compatibilit)n(y)28
-b(with)g(F)-7 b(ortran.\))340 5362 y Fi(\017)45 b Fj(x1)29
-b(!=)g(x2:)39 b(T)-7 b(ests)29 b(whether)g Ft(")p Fj(x1)p
-Ft(")f Fj(is)h(unequal)g(to)g Ft(")p Fj(x2)p Ft(")p Fj(.)40
-b(\(The)29 b(synon)n(ym)f Ft(")p Fj(.ne.)p Ft(")h Fj(is)g(also)f(pro)n
-(vided)g(for)427 5461 y(compatibilit)n(y)g(with)g(F)-7
-b(ortran.\))340 5593 y Fi(\017)45 b Fj(x1)27 b Fl(>)g
-Fj(x2:)37 b(T)-7 b(ests)27 b(whether)g Ft(")p Fj(x1)p
-Ft(")f Fj(is)i(greater)e(than)h Ft(")p Fj(x2)p Ft(")p
-Fj(.)36 b(\(The)28 b(synon)n(ym)e Ft(")p Fj(.gt.)p Ft(")h
-Fj(is)g(also)g(pro)n(vided)f(for)427 5693 y(compatibilit)n(y)i(with)g
-(F)-7 b(ortran.\))p eop end
-%%Page: 280 290
-TeXDict begin 280 289 bop 0 52 a FF(280)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(x1)26 b Fl(>)p Fj(=)f(x2:)36 b(T)-7 b(ests)25 b(whether)h
-Ft(")p Fj(x1)p Ft(")f Fj(is)h(greater)e(than)j(or)e(equal)g(to)h
-Ft(")p Fj(x2)p Ft(")p Fj(.)35 b(\(The)27 b(synon)n(ym)e
-Ft(")p Fj(.ge.)p Ft(")g Fj(is)h(also)427 451 y(pro)n(vided)h(for)g
-(compatibilit)n(y)g(with)h(F)-7 b(ortran.\))340 586 y
-Fi(\017)45 b Fj(x1)35 b Fl(<)g Fj(x2:)52 b(T)-7 b(ests)35
-b(whether)g Ft(")p Fj(x1)p Ft(")f Fj(is)h(less)g(than)g
-Ft(")p Fj(x2)p Ft(")p Fj(.)59 b(\(The)35 b(synon)n(ym)g
-Ft(")p Fj(.lt.)p Ft(")g Fj(is)g(also)f(pro)n(vided)g(for)427
-685 y(compatibilit)n(y)28 b(with)g(F)-7 b(ortran.\))340
-820 y Fi(\017)45 b Fj(x1)33 b Fl(<)p Fj(=)g(x2:)49 b(T)-7
-b(ests)34 b(whether)f Ft(")p Fj(x1)p Ft(")g Fj(is)g(less)g(than)h(or)f
-(equal)g(to)h Ft(")p Fj(x2)p Ft(")p Fj(.)54 b(\(The)34
-b(synon)n(ym)f Ft(")p Fj(.le.)p Ft(")g Fj(is)h(also)427
-919 y(pro)n(vided)27 b(for)g(compatibilit)n(y)g(with)h(F)-7
-b(ortran.\))227 1085 y(Note)33 b(that)f(relational)f(op)r(erators)f
-(cannot)i(usefully)g(b)r(e)h(used)f(to)g(compare)f(v)-5
-b(alues)32 b(with)h(the)g Fl(<)p Fj(bad)p Fl(>)e Fj(v)-5
-b(alue)227 1184 y(\(represen)n(ting)29 b(missing)g(data\),)h(b)r
-(ecause)f(the)h(result)f(is)h(alw)n(a)n(ys)d Fl(<)p Fj(bad)p
-Fl(>)p Fj(.)42 b(The)30 b(isbad\(\))g(function)g(should)f(b)r(e)227
-1284 y(used)f(instead.)-2 1437 y Fd(Bit)m(wise)j(Op)s(erators)n(:)227
-1583 y Fj(The)39 b(bit)n(wise)g(op)r(erators)d(pro)n(vided)i(b)n(y)h(C)
-f(are)g(often)h(useful)g(when)g(op)r(erating)f(on)g(ra)n(w)g(data)g
-(\(e.g.)70 b(from)227 1683 y(instrumen)n(ts\),)36 b(so)e(they)g(are)f
-(also)g(pro)n(vided)g(for)h(use)g(in)g(MathMap)g(expressions.)55
-b(In)34 b(this)h(case,)g(ho)n(w)n(ev)n(er,)227 1782 y(the)c(v)-5
-b(alues)31 b(on)f(whic)n(h)h(they)f(op)r(erate)g(are)g(\015oating)g(p)r
-(oin)n(t)h(v)-5 b(alues)30 b(rather)f(than)i(pure)g(in)n(tegers.)45
-b(In)30 b(order)g(to)227 1882 y(pro)r(duce)24 b(results)f(whic)n(h)h
-(matc)n(h)g(the)h(pure)f(in)n(teger)f(case,)h(the)g(op)r(erands)f(are)g
-(regarded)g(as)g(\014xed)h(p)r(oin)n(t)g(binary)227 1982
-y(n)n(um)n(b)r(ers)32 b(\(i.e.)52 b(with)33 b(the)g(binary)e(equiv)-5
-b(alen)n(t)32 b(of)h(a)f(decimal)g(p)r(oin)n(t\))h(with)g(negativ)n(e)e
-(n)n(um)n(b)r(ers)h(represen)n(ted)227 2081 y(using)c(t)n(w)n
-(os-complemen)n(t)e(notation.)38 b(F)-7 b(or)27 b(in)n(teger)g(v)-5
-b(alues,)28 b(the)g(resulting)f(bit)i(pattern)e(corresp)r(onds)g(to)g
-(that)227 2181 y(of)e(the)g(equiv)-5 b(alen)n(t)24 b(signed)g(in)n
-(teger)g(\(digits)g(to)h(the)f(righ)n(t)g(of)h(the)g(p)r(oin)n(t)f(b)r
-(eing)h(zero\).)35 b(Op)r(erations)23 b(on)h(the)h(bits)227
-2281 y(represen)n(ting)h(the)i(fractional)f(part)g(are)g(also)f(p)r
-(ossible,)h(ho)n(w)n(ev)n(er.)227 2407 y(The)h(follo)n(wing)e(bit)n
-(wise)i(op)r(erators)e(are)g(a)n(v)-5 b(ailable:)340
-2547 y Fi(\017)45 b Fj(x1)30 b Fl(>>)f Fj(x2:)42 b(Righ)n(t)n(w)n(ard)
-28 b(bit)j(shift.)45 b(The)31 b(in)n(teger)e(v)-5 b(alue)30
-b(of)g Ft(")p Fj(x2)p Ft(")f Fj(is)h(tak)n(en)f(\(rounding)h(to)n(w)n
-(ards)e(zero\))427 2646 y(and)21 b(the)g(bits)g(represen)n(ting)e
-Ft(")p Fj(x1)p Ft(")g Fj(are)g(then)i(shifted)h(this)f(n)n(um)n(b)r(er)
-f(of)g(places)g(to)h(the)g(righ)n(t)f(\(or)f(to)i(the)g(left)427
-2746 y(if)26 b(the)f(n)n(um)n(b)r(er)g(of)g(places)f(is)h(negativ)n
-(e\).)35 b(This)25 b(is)g(equiv)-5 b(alen)n(t)24 b(to)h(dividing)g
-Ft(")p Fj(x1)p Ft(")f Fj(b)n(y)g(the)i(corresp)r(onding)427
-2846 y(p)r(o)n(w)n(er)h(of)g(2.)340 2980 y Fi(\017)45
-b Fj(x1)32 b Fl(<<)f Fj(x2:)45 b(Left)n(w)n(ard)31 b(bit)h(shift.)51
-b(The)32 b(in)n(teger)f(v)-5 b(alue)32 b(of)g Ft(")p
-Fj(x2)p Ft(")f Fj(is)g(tak)n(en)h(\(rounding)f(to)n(w)n(ards)f(zero\),)
-427 3080 y(and)i(the)g(bits)h(represen)n(ting)d Ft(")p
-Fj(x1)p Ft(")h Fj(are)g(then)h(shifted)h(this)f(n)n(um)n(b)r(er)g(of)g
-(places)f(to)h(the)g(left)h(\(or)e(to)h(the)427 3180
-y(righ)n(t)37 b(if)i(the)f(n)n(um)n(b)r(er)f(of)h(places)f(is)h
-(negativ)n(e\).)66 b(This)38 b(is)f(equiv)-5 b(alen)n(t)38
-b(to)g(m)n(ultiplying)f Ft(")p Fj(x1)p Ft(")g Fj(b)n(y)g(the)427
-3279 y(corresp)r(onding)26 b(p)r(o)n(w)n(er)g(of)i(2.)340
-3414 y Fi(\017)45 b Fj(x1)28 b(&)h(x2:)39 b(Bit)n(wise)28
-b(AND)i(b)r(et)n(w)n(een)f(the)g(bits)g(of)g Ft(")p Fj(x1)p
-Ft(")e Fj(and)i(those)f(of)h Ft(")p Fj(x2)p Ft(")e Fj(\(equiv)-5
-b(alen)n(t)29 b(to)g(a)f(b)r(o)r(olean)427 3513 y(AND)h(applied)e(at)h
-(eac)n(h)f(bit)h(p)r(osition)f(in)h(turn\).)340 3648
-y Fi(\017)45 b Fj(x1)26 b Fi(j)g Fj(x2:)35 b(Bit)n(wise)26
-b(OR)g(b)r(et)n(w)n(een)g(the)g(bits)g(of)g Ft(")p Fj(x1)p
-Ft(")f Fj(and)h(those)f(of)h Ft(")p Fj(x2)p Ft(")f Fj(\(equiv)-5
-b(alen)n(t)26 b(to)g(a)f(b)r(o)r(olean)h(OR)427 3748
-y(applied)i(at)f(eac)n(h)g(bit)h(p)r(osition)g(in)g(turn\).)340
-3882 y Fi(\017)45 b Fj(x1)24 b Fi(^)g Fj(x2:)35 b(Bit)n(wise)24
-b(exclusiv)n(e)f(OR)h(\(X)n(OR\))g(b)r(et)n(w)n(een)g(the)h(bits)f(of)g
-Ft(")p Fj(x1)p Ft(")f Fj(and)h(those)g(of)g Ft(")p Fj(x2)p
-Ft(")f Fj(\(equiv)-5 b(alen)n(t)427 3982 y(to)28 b(a)f(b)r(o)r(olean)g
-(X)n(OR)g(applied)h(at)f(eac)n(h)g(bit)h(p)r(osition)g(in)g(turn\).)227
-4147 y(Note)f(that)g(no)g(bit)g(in)n(v)n(ersion)f(op)r(erator)f(\()p
-Ft(")p Fi(\030)p Ft(")h Fj(in)h(C\))g(is)g(pro)n(vided.)36
-b(This)27 b(is)f(b)r(ecause)h(in)n(v)n(erting)f(the)h(bits)g(of)g(a)227
-4247 y(t)n(w)n(os-complemen)n(t)g(\014xed)i(p)r(oin)n(t)g(binary)f(n)n
-(um)n(b)r(er)g(is)h(equiv)-5 b(alen)n(t)28 b(to)h(simply)g(negating)e
-(it.)41 b(This)28 b(di\013ers)h(from)227 4347 y(the)d(pure)g(in)n
-(teger)f(case)f(b)r(ecause)i(bits)g(to)f(the)h(righ)n(t)f(of)h(the)g
-(binary)f(p)r(oin)n(t)h(are)f(also)f(in)n(v)n(erted.)36
-b(T)-7 b(o)25 b(in)n(v)n(ert)g(only)227 4446 y(those)e(bits)h(to)f(the)
-h(left)f(of)h(the)f(binary)g(p)r(oin)n(t,)h(use)f(a)g(bit)n(wise)g
-(exclusiv)n(e)g(OR)g(with)h(the)f(v)-5 b(alue)23 b(-1)g(\(i.e.)36
-b Ft(")p Fj(x)p Fi(^)p Fj(-1)p Ft(")p Fj(\).)-2 4599
-y Fd(F)-8 b(unctions)n(:)227 4745 y Fj(The)28 b(follo)n(wing)e
-(functions)i(are)f(a)n(v)-5 b(ailable:)340 4885 y Fi(\017)45
-b Fj(abs\(x\):)37 b(Absolute)28 b(v)-5 b(alue)27 b(of)h
-Ft(")p Fj(x)p Ft(")e Fj(\(sign)i(remo)n(v)-5 b(al\),)26
-b(same)h(as)g(fabs\(x\).)340 5020 y Fi(\017)45 b Fj(acos\(x\):)36
-b(In)n(v)n(erse)26 b(cosine)h(of)h Ft(")p Fj(x)p Ft(")p
-Fj(,)f(in)g(radians.)340 5155 y Fi(\017)45 b Fj(acosd\(x\):)36
-b(In)n(v)n(erse)26 b(cosine)h(of)h Ft(")p Fj(x)p Ft(")p
-Fj(,)f(in)h(degrees.)340 5289 y Fi(\017)45 b Fj(acosh\(x\):)36
-b(In)n(v)n(erse)26 b(h)n(yp)r(erb)r(olic)i(cosine)e(of)i
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5424 y Fi(\017)45 b Fj(acoth\(x\):)37
-b(In)n(v)n(erse)26 b(h)n(yp)r(erb)r(olic)h(cotangen)n(t)g(of)g
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5558 y Fi(\017)45 b Fj(acsc)n(h\(x\):)36
-b(In)n(v)n(erse)27 b(h)n(yp)r(erb)r(olic)g(cosecan)n(t)f(of)h
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5693 y Fi(\017)45 b Fj(ain)n(t\(x\):)37
-b(In)n(teger)27 b(part)g(of)h Ft(")p Fj(x)p Ft(")e Fj(\(round)i(to)n(w)
-n(ards)d(zero\),)i(same)g(as)g(in)n(t\(x\).)p eop end
-%%Page: 281 291
-TeXDict begin 281 290 bop 3643 52 a FF(281)340 351 y
-Fi(\017)45 b Fj(asec)n(h\(x\):)36 b(In)n(v)n(erse)27
-b(h)n(yp)r(erb)r(olic)g(secan)n(t)f(of)i Ft(")p Fj(x)p
-Ft(")p Fj(.)340 482 y Fi(\017)45 b Fj(asin\(x\):)37 b(In)n(v)n(erse)26
-b(sine)i(of)f Ft(")p Fj(x)p Ft(")p Fj(,)g(in)h(radians.)340
-613 y Fi(\017)45 b Fj(asind\(x\):)37 b(In)n(v)n(erse)26
-b(sine)i(of)f Ft(")p Fj(x)p Ft(")p Fj(,)g(in)h(degrees.)340
-744 y Fi(\017)45 b Fj(asinh\(x\):)37 b(In)n(v)n(erse)26
-b(h)n(yp)r(erb)r(olic)h(sine)h(of)f Ft(")p Fj(x)p Ft(")p
-Fj(.)340 875 y Fi(\017)45 b Fj(atan\(x\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)h Ft(")p Fj(x)p Ft(")p Fj(,)e(in)i(radians.)340
-1007 y Fi(\017)45 b Fj(atand\(x\):)37 b(In)n(v)n(erse)26
-b(tangen)n(t)h(of)h Ft(")p Fj(x)p Ft(")p Fj(,)f(in)g(degrees.)340
-1138 y Fi(\017)45 b Fj(atanh\(x\):)37 b(In)n(v)n(erse)26
-b(h)n(yp)r(erb)r(olic)h(tangen)n(t)g(of)h Ft(")p Fj(x)p
-Ft(")p Fj(.)340 1269 y Fi(\017)45 b Fj(atan2\(x1,)27
-b(x2\):)36 b(In)n(v)n(erse)26 b(tangen)n(t)h(of)h Ft(")p
-Fj(x1/x2)p Ft(")p Fj(,)d(in)j(radians.)340 1400 y Fi(\017)45
-b Fj(atan2d\(x1,)27 b(x2\):)36 b(In)n(v)n(erse)26 b(tangen)n(t)h(of)h
-Ft(")p Fj(x1/x2)p Ft(")p Fj(,)d(in)j(degrees.)340 1531
-y Fi(\017)45 b Fj(ceil\(x\):)38 b(Smallest)27 b(in)n(teger)g(v)-5
-b(alue)27 b(not)h(less)f(then)h Ft(")p Fj(x)p Ft(")f
-Fj(\(round)g(to)n(w)n(ards)f(plus)i(in\014nit)n(y\).)340
-1662 y Fi(\017)45 b Fj(cos\(x\):)37 b(Cosine)27 b(of)g
-Ft(")p Fj(x)p Ft(")g Fj(in)h(radians.)340 1793 y Fi(\017)45
-b Fj(cosd\(x\):)37 b(Cosine)27 b(of)g Ft(")p Fj(x)p Ft(")g
-Fj(in)h(degrees.)340 1924 y Fi(\017)45 b Fj(cosh\(x\):)37
-b(Hyp)r(erb)r(olic)27 b(cosine)g(of)h Ft(")p Fj(x)p Ft(")p
-Fj(.)340 2055 y Fi(\017)45 b Fj(coth\(x\):)37 b(Hyp)r(erb)r(olic)28
-b(cotangen)n(t)f(of)g Ft(")p Fj(x)p Ft(")p Fj(.)340 2186
-y Fi(\017)45 b Fj(csc)n(h\(x\):)37 b(Hyp)r(erb)r(olic)28
-b(cosecan)n(t)e(of)h Ft(")p Fj(x)p Ft(")p Fj(.)340 2317
-y Fi(\017)45 b Fj(dim\(x1,)28 b(x2\):)37 b(Returns)27
-b Ft(")p Fj(x1-x2)p Ft(")e Fj(if)j Ft(")p Fj(x1)p Ft(")f
-Fj(is)g(greater)f(than)i Ft(")p Fj(x2)p Ft(")p Fj(,)e(otherwise)g(0.)
-340 2448 y Fi(\017)45 b Fj(exp\(x\):)37 b(Exp)r(onen)n(tial)27
-b(function)h(of)g Ft(")p Fj(x)p Ft(")p Fj(.)340 2579
-y Fi(\017)45 b Fj(fabs\(x\):)37 b(Absolute)28 b(v)-5
-b(alue)28 b(of)f Ft(")p Fj(x)p Ft(")g Fj(\(sign)g(remo)n(v)-5
-b(al\),)27 b(same)g(as)g(abs\(x\).)340 2710 y Fi(\017)45
-b Fj(\015o)r(or\(x\):)37 b(Largest)26 b(in)n(teger)g(not)i(greater)e
-(than)h Ft(")p Fj(x)p Ft(")g Fj(\(round)g(to)n(w)n(ards)f(min)n(us)i
-(in\014nit)n(y\).)340 2841 y Fi(\017)45 b Fj(fmo)r(d\(x1,)28
-b(x2\):)37 b(Remainder)27 b(when)h Ft(")p Fj(x1)p Ft(")e
-Fj(is)h(divided)h(b)n(y)f Ft(")p Fj(x2)p Ft(")p Fj(,)g(same)g(as)g(mo)r
-(d\(x1,)g(x2\).)340 2972 y Fi(\017)45 b Fj(gauss\(x1,)30
-b(x2\):)42 b(Random)29 b(sample)h(from)g(a)g(Gaussian)f(distribution)i
-(with)g(mean)f Ft(")p Fj(x1)p Ft(")e Fj(and)j(standard)427
-3072 y(deviation)c Ft(")p Fj(x2)p Ft(")p Fj(.)340 3203
-y Fi(\017)45 b Fj(in)n(t\(x\):)38 b(In)n(teger)26 b(part)h(of)h
-Ft(")p Fj(x)p Ft(")f Fj(\(round)g(to)n(w)n(ards)f(zero\),)h(same)g(as)g
-(ain)n(t\(x\).)340 3334 y Fi(\017)45 b Fj(isbad\(x\):)37
-b(Returns)28 b(1)f(if)h Ft(")p Fj(x)p Ft(")f Fj(has)g(the)h
-Fl(<)p Fj(bad)p Fl(>)e Fj(v)-5 b(alue)28 b(\(AST)p Ft(__)p
-Fj(BAD\),)g(otherwise)f(0.)340 3465 y Fi(\017)45 b Fj(log\(x\):)37
-b(Natural)27 b(logarithm)f(of)i Ft(")p Fj(x)p Ft(")p
-Fj(.)340 3596 y Fi(\017)45 b Fj(log10\(x\):)36 b(Logarithm)26
-b(of)i Ft(")p Fj(x)p Ft(")e Fj(to)i(base)f(10.)340 3727
-y Fi(\017)45 b Fj(max\(x1,)27 b(x2,)g(...\):)38 b(Maxim)n(um)27
-b(of)h(t)n(w)n(o)e(or)h(more)g(v)-5 b(alues.)340 3858
-y Fi(\017)45 b Fj(min\(x1,)28 b(x2,)f(...\):)37 b(Minim)n(um)29
-b(of)e(t)n(w)n(o)g(or)g(more)g(v)-5 b(alues.)340 3989
-y Fi(\017)45 b Fj(mo)r(d\(x1,)28 b(x2\):)36 b(Remainder)27
-b(when)h Ft(")p Fj(x1)p Ft(")e Fj(is)i(divided)g(b)n(y)f
-Ft(")p Fj(x2)p Ft(")p Fj(,)f(same)h(as)g(fmo)r(d\(x1,)h(x2\).)340
-4120 y Fi(\017)45 b Fj(nin)n(t\(x\):)38 b(Nearest)27
-b(in)n(teger)f(to)i Ft(")p Fj(x)p Ft(")f Fj(\(round)g(to)g(nearest\).)
-340 4251 y Fi(\017)45 b Fj(p)r(oisson\(x\):)37 b(Random)27
-b(in)n(teger-v)-5 b(alued)26 b(sample)h(from)h(a)f(P)n(oisson)e
-(distribution)j(with)g(mean)g Ft(")p Fj(x)p Ft(")p Fj(.)340
-4382 y Fi(\017)45 b Fj(p)r(o)n(w\(x1,)27 b(x2\):)37 b
-Ft(")p Fj(x1)p Ft(")26 b Fj(raised)h(to)g(the)h(p)r(o)n(w)n(er)e(of)i
-Ft(")p Fj(x2)p Ft(")p Fj(.)340 4514 y Fi(\017)45 b Fj(qif\(x1,)28
-b(x2,)f(x3\):)37 b(Returns)27 b Ft(")p Fj(x2)p Ft(")f
-Fj(if)i Ft(")p Fj(x1)p Ft(")e Fj(is)i(true,)f(and)h Ft(")p
-Fj(x3)p Ft(")e Fj(otherwise.)340 4645 y Fi(\017)45 b
-Fj(rand\(x1,)21 b(x2\):)33 b(Random)19 b(sample)h(from)g(a)f(uniform)h
-(distribution)g(in)h(the)f(range)f Ft(")p Fj(x1)p Ft(")f
-Fj(to)i Ft(")p Fj(x2)p Ft(")f Fj(inclusiv)n(e.)340 4776
-y Fi(\017)45 b Fj(sec)n(h\(x\):)37 b(Hyp)r(erb)r(olic)28
-b(secan)n(t)e(of)i Ft(")p Fj(x)p Ft(")p Fj(.)340 4907
-y Fi(\017)45 b Fj(sign\(x1,)27 b(x2\):)37 b(Absolute)27
-b(v)-5 b(alue)28 b(of)f Ft(")p Fj(x1)p Ft(")g Fj(with)h(the)g(sign)f
-(of)g Ft(")p Fj(x2)p Ft(")f Fj(\(transfer)h(of)h(sign\).)340
-5038 y Fi(\017)45 b Fj(sin\(x\):)38 b(Sine)27 b(of)h
-Ft(")p Fj(x)p Ft(")f Fj(in)h(radians.)340 5169 y Fi(\017)45
-b Fj(sinc\(x\):)37 b(Sinc)28 b(function)h(of)e Ft(")p
-Fj(x)p Ft(")g Fj([=)g Ft(")p Fj(sin\(x\)/x)p Ft(")p Fj(].)340
-5300 y Fi(\017)45 b Fj(sind\(x\):)38 b(Sine)28 b(of)f
-Ft(")p Fj(x)p Ft(")g Fj(in)h(degrees.)340 5431 y Fi(\017)45
-b Fj(sinh\(x\):)38 b(Hyp)r(erb)r(olic)27 b(sine)h(of)f
-Ft(")p Fj(x)p Ft(")p Fj(.)340 5562 y Fi(\017)45 b Fj(sqr\(x\):)37
-b(Square)26 b(of)i Ft(")p Fj(x)p Ft(")f Fj(\(=)g Ft(")p
-Fj(x)p Fi(\003)p Fj(x)p Ft(")p Fj(\).)340 5693 y Fi(\017)45
-b Fj(sqrt\(x\):)37 b(Square)27 b(ro)r(ot)f(of)i Ft(")p
-Fj(x)p Ft(")p Fj(.)p eop end
-%%Page: 282 292
-TeXDict begin 282 291 bop 0 52 a FF(282)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(tan\(x\):)38 b(T)-7 b(angen)n(t)26 b(of)i Ft(")p
-Fj(x)p Ft(")f Fj(in)g(radians.)340 485 y Fi(\017)45 b
-Fj(tand\(x\):)38 b(T)-7 b(angen)n(t)27 b(of)g Ft(")p
-Fj(x)p Ft(")g Fj(in)h(degrees.)340 619 y Fi(\017)45 b
-Fj(tanh\(x\):)38 b(Hyp)r(erb)r(olic)27 b(tangen)n(t)g(of)h
-Ft(")p Fj(x)p Ft(")p Fj(.)-2 783 y Fd(Sym)m(b)s(olic)j(Constan)m(ts)n
-(:)227 929 y Fj(The)c(follo)n(wing)e(sym)n(b)r(olic)h(constan)n(ts)g
-(are)g(a)n(v)-5 b(ailable)25 b(\(the)i(enclosing)f Ft(")p
-Fl(<>)p Ft(")f Fj(brac)n(k)n(ets)f(m)n(ust)j(b)r(e)g(included\):)340
-1068 y Fi(\017)45 b Fl(<)p Fj(bad)p Fl(>)p Fj(:)51 b(The)35
-b Ft(")p Fj(bad)p Ft(")e Fj(v)-5 b(alue)35 b(\(AST)p
-Ft(__)p Fj(BAD\))h(used)f(to)f(\015ag)g(missing)h(data.)58
-b(Note)35 b(that)g(y)n(ou)f(cannot)427 1168 y(usefully)28
-b(compare)f(v)-5 b(alues)27 b(with)i(this)f(constan)n(t)f(b)r(ecause)g
-(the)i(result)e(is)h(alw)n(a)n(ys)e Fl(<)p Fj(bad)p Fl(>)p
-Fj(.)36 b(The)28 b(isbad\(\))427 1267 y(function)g(should)g(b)r(e)g
-(used)f(instead.)340 1401 y Fi(\017)45 b Fl(<)p Fj(dig)p
-Fl(>)p Fj(:)36 b(Num)n(b)r(er)28 b(of)f(decimal)h(digits)f(of)h
-(precision)e(a)n(v)-5 b(ailable)27 b(in)h(a)f(\015oating)g(p)r(oin)n(t)
-g(\(double\))h(v)-5 b(alue.)340 1535 y Fi(\017)45 b Fl(<)p
-Fj(e)p Fl(>)p Fj(:)36 b(Base)27 b(of)g(natural)g(logarithms.)340
-1669 y Fi(\017)45 b Fl(<)p Fj(epsilon)p Fl(>)p Fj(:)35
-b(Smallest)24 b(p)r(ositiv)n(e)h(n)n(um)n(b)r(er)f(suc)n(h)h(that)g
-(1.0+)p Fl(<)p Fj(epsilon)p Fl(>)d Fj(is)j(distinguishable)g(from)f
-(unit)n(y)-7 b(.)340 1803 y Fi(\017)45 b Fl(<)p Fj(man)n(t)p
-Ft(_)p Fj(dig)p Fl(>)p Fj(:)37 b(The)29 b(n)n(um)n(b)r(er)f(of)g(base)g
-Fl(<)p Fj(radix)p Fl(>)f Fj(digits)h(stored)g(in)g(the)h(man)n(tissa)e
-(of)i(a)f(\015oating)f(p)r(oin)n(t)427 1903 y(\(double\))h(v)-5
-b(alue.)340 2036 y Fi(\017)45 b Fl(<)p Fj(max)p Fl(>)p
-Fj(:)36 b(Maxim)n(um)27 b(represen)n(table)f(\015oating)h(p)r(oin)n(t)h
-(\(double\))g(v)-5 b(alue.)340 2170 y Fi(\017)45 b Fl(<)p
-Fj(max)p Ft(_)p Fj(10)p Ft(_)p Fj(exp)p Fl(>)p Fj(:)37
-b(Maxim)n(um)28 b(in)n(teger)h(suc)n(h)f(that)h(10)g(raised)f(to)g
-(that)i(p)r(o)n(w)n(er)d(can)i(b)r(e)g(represen)n(ted)f(as)427
-2270 y(a)f(\015oating)g(p)r(oin)n(t)h(\(double\))g(v)-5
-b(alue.)340 2404 y Fi(\017)45 b Fl(<)p Fj(max)p Ft(_)p
-Fj(exp)p Fl(>)p Fj(:)56 b(Maxim)n(um)38 b(in)n(teger)f(suc)n(h)g(that)h
-Fl(<)p Fj(radix)p Fl(>)f Fj(raised)f(to)i(that)h(p)r(o)n(w)n(er)d(min)n
-(us)i(1)g(can)f(b)r(e)427 2504 y(represen)n(ted)27 b(as)g(a)g
-(\015oating)g(p)r(oin)n(t)g(\(double\))h(v)-5 b(alue.)340
-2637 y Fi(\017)45 b Fl(<)p Fj(min)p Fl(>)p Fj(:)h(Smallest)32
-b(p)r(ositiv)n(e)f(n)n(um)n(b)r(er)h(whic)n(h)g(can)g(b)r(e)g(represen)
-n(ted)f(as)h(a)f(normalised)g(\015oating)g(p)r(oin)n(t)427
-2737 y(\(double\))d(v)-5 b(alue.)340 2871 y Fi(\017)45
-b Fl(<)p Fj(min)p Ft(_)p Fj(10)p Ft(_)p Fj(exp)p Fl(>)p
-Fj(:)39 b(Minim)n(um)30 b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h
-(10)f(raised)f(to)i(that)f(p)r(o)n(w)n(er)g(can)g(b)r(e)h(repre-)427
-2971 y(sen)n(ted)e(as)f(a)g(normalised)f(\015oating)h(p)r(oin)n(t)h
-(\(double\))g(v)-5 b(alue.)340 3105 y Fi(\017)45 b Fl(<)p
-Fj(min)p Ft(_)p Fj(exp)p Fl(>)p Fj(:)35 b(Minim)n(um)25
-b(negativ)n(e)e(in)n(teger)h(suc)n(h)g(that)h Fl(<)p
-Fj(radix)p Fl(>)e Fj(raised)h(to)g(that)h(p)r(o)n(w)n(er)e(min)n(us)i
-(1)f(can)427 3204 y(b)r(e)k(represen)n(ted)f(as)g(a)g(normalised)f
-(\015oating)h(p)r(oin)n(t)h(\(double\))g(v)-5 b(alue.)340
-3338 y Fi(\017)45 b Fl(<)p Fj(pi)p Fl(>)p Fj(:)37 b(Ratio)27
-b(of)g(the)h(circumference)f(of)h(a)f(circle)g(to)g(its)h(diameter.)340
-3472 y Fi(\017)45 b Fl(<)p Fj(radix)p Fl(>)p Fj(:)35
-b(The)26 b(radix)g(\(n)n(um)n(b)r(er)h(base\))f(used)g(to)h(represen)n
-(t)e(the)i(man)n(tissa)e(of)i(\015oating)e(p)r(oin)n(t)i(\(double\))427
-3572 y(v)-5 b(alues.)340 3706 y Fi(\017)45 b Fl(<)p Fj(rounds)p
-Fl(>)p Fj(:)35 b(The)26 b(mo)r(de)g(used)g(for)f(rounding)g(\015oating)
-g(p)r(oin)n(t)h(results)g(after)f(addition.)37 b(P)n(ossible)24
-b(v)-5 b(alues)427 3805 y(include:)49 b(-1)32 b(\(indeterminate\),)k(0)
-d(\(to)n(w)n(ard)f(zero\),)h(1)g(\(to)h(nearest\),)g(2)f(\(to)n(w)n
-(ard)f(plus)h(in\014nit)n(y\))h(and)f(3)427 3905 y(\(to)n(w)n(ard)27
-b(min)n(us)g(in\014nit)n(y\).)38 b(Other)27 b(v)-5 b(alues)27
-b(indicate)h(mac)n(hine-dep)r(enden)n(t)f(b)r(eha)n(viour.)-2
-4069 y Fd(Ev)-5 b(aluation)32 b(Precedence)g(and)h(Asso)s(ciativit)m(y)
-n(:)227 4215 y Fj(Items)28 b(app)r(earing)e(in)i(expressions)e(are)h
-(ev)-5 b(aluated)27 b(in)h(the)g(follo)n(wing)e(order)h(\(highest)g
-(precedence)g(\014rst\):)340 4354 y Fi(\017)45 b Fj(Constan)n(ts)27
-b(and)g(v)-5 b(ariables)340 4488 y Fi(\017)45 b Fj(F)-7
-b(unction)28 b(argumen)n(ts)f(and)g(paren)n(thesised)f(expressions)340
-4622 y Fi(\017)45 b Fj(F)-7 b(unction)28 b(in)n(v)n(o)r(cations)340
-4755 y Fi(\017)45 b Fj(Unary)27 b(+)g(-)h(!)37 b(.not.)340
-4889 y Fi(\017)45 b(\003\003)340 5023 y(\017)g(\003)27
-b Fj(/)340 5157 y Fi(\017)45 b Fj(+)28 b(-)340 5291 y
-Fi(\017)45 b Fl(<<)27 b(>>)340 5425 y Fi(\017)45 b Fl(<)28
-b Fj(.lt.)37 b Fl(<)p Fj(=)27 b(.le.)37 b Fl(>)27 b Fj(.gt.)37
-b Fl(>)p Fj(=)27 b(.ge.)340 5559 y Fi(\017)45 b Fj(==)27
-b(.eq.)37 b(!=)27 b(.ne.)340 5693 y Fi(\017)45 b Fj(&)p
-eop end
-%%Page: 283 293
-TeXDict begin 283 292 bop 3643 52 a FF(283)340 351 y
-Fi(\017)45 b(^)340 484 y(\017)g(j)340 616 y(\017)g Fj(&&)27
-b(.and.)340 749 y Fi(\017)45 b(^^)340 882 y(\017)g(jj)28
-b Fj(.or)340 1014 y Fi(\017)45 b Fj(.eqv.)37 b(.neqv.)g(.xor.)227
-1176 y(All)j(op)r(erators)e(asso)r(ciate)g(from)i(left-to-righ)n(t,)h
-(except)f(for)f(unary)g(+,)j(unary)d(-,)k(!,)f(.not.)73
-b(and)40 b Fi(\003\003)f Fj(whic)n(h)227 1276 y(asso)r(ciate)26
-b(from)i(righ)n(t-to-left.)p 0 1474 3780 12 v 0 1606
-a Fz(astMatrixMap)1361 1605 y Fe(Create)38 b(a)g(MatrixMap)2933
-1606 y Fz(astMatrixMap)0 1795 y Fd(Description:)44 b
-Fj(This)28 b(function)g(creates)f(a)g(new)g(MatrixMap)g(and)h
-(optionally)e(initialises)i(its)f(attributes.)227 1919
-y(A)32 b(MatrixMap)e(is)h(a)f(form)h(of)g(Mapping)g(whic)n(h)g(p)r
-(erforms)f(a)g(general)g(linear)g(transformation.)46
-b(Eac)n(h)30 b(set)h(of)227 2019 y(input)j(co)r(ordinates,)g(regarded)d
-(as)i(a)g(column-v)n(ector,)g(are)f(pre-m)n(ultiplied)h(b)n(y)g(a)g
-(matrix)g(\(whose)g(elemen)n(ts)227 2118 y(are)c(sp)r(eci\014ed)h(when)
-g(the)g(MatrixMap)f(is)g(created\))g(to)h(giv)n(e)e(a)i(new)f(column-v)
-n(ector)f(con)n(taining)h(the)h(output)227 2218 y(co)r(ordinates.)36
-b(If)28 b(appropriate,)e(the)i(in)n(v)n(erse)e(transformation)g(ma)n(y)
-h(also)f(b)r(e)i(p)r(erformed.)0 2367 y Fd(Synopsis:)121
-b Ft(AstMatrixMap)38 b Fi(\003)p Ft(astMatrixMap\()g(int)43
-b(nin,)e(int)i(nout,)e(int)i(form,)e(const)h(double)f(matrix[],)227
-2467 y(const)h(char)g Fi(\003)p Ft(options,)e(...)85
-b(\))0 2616 y Fd(P)m(arameters:)259 2752 y(nin)427 2852
-y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates,)e(whic)n
-(h)i(determines)f(the)h(n)n(um)n(b)r(er)g(of)f(columns)h(in)f(the)h
-(matrix.)259 2984 y Fd(nout)427 3084 y Fj(The)g(n)n(um)n(b)r(er)f(of)h
-(output)g(co)r(ordinates,)e(whic)n(h)i(determines)f(the)h(n)n(um)n(b)r
-(er)f(of)h(ro)n(ws)e(in)i(the)g(matrix.)259 3217 y Fd(form)427
-3316 y Fj(An)g(in)n(teger)f(whic)n(h)h(indicates)f(the)h(form)f(in)h
-(whic)n(h)g(the)g(matrix)f(elemen)n(ts)g(will)h(b)r(e)g(supplied.)427
-3432 y(A)g(v)-5 b(alue)27 b(of)g(zero)f(indicates)h(that)h(a)f(full)h
-Ft(")p Fj(nout)p Ft(")e Fj(x)h Ft(")p Fj(nin)p Ft(")g
-Fj(matrix)g(of)g(v)-5 b(alues)27 b(will)g(b)r(e)h(supplied)g(via)e(the)
-427 3532 y Ft(")p Fj(matrix)p Ft(")33 b Fj(parameter)g(\(b)r(elo)n
-(w\).)56 b(In)34 b(this)g(case,)h(the)g(elemen)n(ts)f(should)f(b)r(e)i
-(giv)n(en)e(in)h(ro)n(w)f(order)g(\(the)427 3632 y(elemen)n(ts)28
-b(of)f(the)h(\014rst)g(ro)n(w,)e(follo)n(w)n(ed)h(b)n(y)g(the)h(elemen)
-n(ts)f(of)h(the)g(second)f(ro)n(w,)f(etc.\).)427 3748
-y(A)34 b(v)-5 b(alue)34 b(of)g(1)f(indicates)g(that)h(only)f(the)i
-(diagonal)d(elemen)n(ts)h(of)h(the)g(matrix)f(will)h(b)r(e)g(supplied,)
-i(and)427 3847 y(that)26 b(all)g(others)e(should)i(b)r(e)g(zero.)35
-b(In)26 b(this)g(case,)f(the)h(elemen)n(ts)g(of)f Ft(")p
-Fj(matrix)p Ft(")g Fj(should)g(con)n(tain)g(only)g(the)427
-3947 y(diagonal)h(elemen)n(ts,)i(stored)f(consecutiv)n(ely)-7
-b(.)427 4063 y(A)32 b(v)-5 b(alue)32 b(of)f(2)h(indicates)f(that)h(a)f
-Ft(")p Fj(unit)p Ft(")h Fj(matrix)f(is)g(required,)h(whose)f(diagonal)f
-(elemen)n(ts)h(are)g(set)h(to)427 4163 y(unit)n(y)f(\(with)h(all)f
-(other)f(elemen)n(ts)h(zero\).)46 b(In)32 b(this)f(case,)g(the)g
-Ft(")p Fj(matrix)p Ft(")f Fj(parameter)f(is)i(ignored)f(and)h(a)427
-4262 y(NULL)d(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)h(supplied.)259
-4395 y Fd(matrix)427 4495 y Fj(The)g(arra)n(y)d(of)j(matrix)f(elemen)n
-(ts)g(to)h(b)r(e)g(used,)f(stored)g(according)f(to)h(the)h(v)-5
-b(alue)28 b(of)f Ft(")p Fj(form)p Ft(")p Fj(.)259 4627
-y Fd(options)427 4727 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4826 y(assignmen)n(ts)i(to)g(b)r(e)h(used)g(for)f
-(initialising)h(the)g(new)g(MatrixMap.)45 b(The)31 b(syn)n(tax)f(used)h
-(is)f(iden)n(tical)h(to)427 4926 y(that)38 b(for)e(the)i(astSet)f
-(function)h(and)f(ma)n(y)f(include)i Ft(")p Fj(prin)n(tf)p
-Ft(")e Fj(format)h(sp)r(eci\014ers)g(iden)n(ti\014ed)g(b)n(y)g
-Ft(")p Fj(\045)p Ft(")427 5026 y Fj(sym)n(b)r(ols)27
-b(in)h(the)g(normal)f(w)n(a)n(y)-7 b(.)259 5158 y Fd(...)427
-5258 y Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n
-(tains)f Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f
-(an)f(optional)g(list)h(of)f(additional)427 5358 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5457 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5557 y Fj(function\).)0
-5718 y Fd(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 284 294
-TeXDict begin 284 293 bop 0 52 a FF(284)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(astMatrixMap\(\))427
-451 y Fj(A)e(p)r(oin)n(ter)f(to)h(the)g(new)g(MatrixMap.)0
-628 y Fd(Notes:)340 925 y Fi(\017)45 b Fj(In)32 b(general,)e(a)h
-(MatrixMap's)f(forw)n(ard)g(transformation)f(will)j(alw)n(a)n(ys)d(b)r
-(e)j(a)n(v)-5 b(ailable)30 b(\(as)h(indicated)g(b)n(y)427
-1024 y(its)h(T)-7 b(ranF)g(orw)n(ard)29 b(attribute\),)k(but)f(its)f
-(in)n(v)n(erse)f(transformation)g(\(T)-7 b(ranIn)n(v)n(erse)29
-b(attribute\))j(will)g(only)427 1124 y(b)r(e)c(a)n(v)-5
-b(ailable)27 b(if)h(the)g(asso)r(ciated)e(matrix)h(is)g(square)g(and)g
-(non-singular.)340 1264 y Fi(\017)45 b Fj(As)32 b(an)f(exception)f(to)i
-(this,)g(the)g(in)n(v)n(erse)d(transformation)h(is)h(alw)n(a)n(ys)e(a)n
-(v)-5 b(ailable)30 b(if)i(a)f(unit)h(or)e(diagonal)427
-1364 y(matrix)19 b(is)g(sp)r(eci\014ed.)35 b(In)19 b(this)h(case,)g(if)
-g(the)g(matrix)f(is)g(not)h(square,)f(one)g(or)g(more)f(of)i(the)g
-(input)g(co)r(ordinate)427 1463 y(v)-5 b(alues)28 b(ma)n(y)f(not)h(b)r
-(e)g(reco)n(v)n(erable)d(from)i(a)g(set)h(of)g(output)g(co)r
-(ordinates.)36 b(An)n(y)28 b(co)r(ordinates)e(a\013ected)i(in)427
-1563 y(this)g(w)n(a)n(y)f(will)g(simply)h(b)r(e)g(set)g(to)f(the)h(v)-5
-b(alue)28 b(zero.)340 1703 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1803 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 1980 y Fd(Status)33
-b(Handling)n(:)227 2126 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 2225 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 2325 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 2539 3780 12 v 0 2670 a Fz(astNegate)848 2671 y Fe(Negate)38
-b(the)g(area)g(represen)m(ted)f(b)m(y)i(a)g(Region)3196
-2670 y Fz(astNegate)0 2874 y Fd(Description:)44 b Fj(This)d(function)f
-(negates)g(the)g(area)f(represen)n(ted)g(b)n(y)h(a)g(Region.)74
-b(That)40 b(is,)j(p)r(oin)n(ts)d(whic)n(h)h(w)n(ere)227
-2974 y(previously)22 b(inside)h(the)h(region)e(will)h(then)h(b)r(e)f
-(outside,)h(and)f(p)r(oin)n(ts)g(whic)n(h)g(w)n(ere)f(outside)h(will)h
-(b)r(e)f(inside.)36 b(This)227 3073 y(is)28 b(acomplished)f(b)n(y)g
-(toggling)f(the)i(state)g(of)f(the)h(Negated)f(attribute)h(for)f(the)h
-(supplied)g(region.)0 3237 y Fd(Synopsis:)121 b Ft(void)42
-b(astNegate\()d(AstRegion)h Fi(\003)p Ft(this)i(\))0
-3402 y Fd(P)m(arameters:)259 3553 y(this)427 3652 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)p 0 3866 V 0 3997 a Fz(astNorm)937
-3998 y Fe(Normalise)36 b(a)j(set)f(of)h(F)-10 b(rame)38
-b(co)s(ordinates)3269 3997 y Fz(astNorm)0 4178 y Fd(Description:)44
-b Fj(This)29 b(function)g(normalises)e(a)h(set)h(of)f(F)-7
-b(rame)28 b(co)r(ordinate)f(v)-5 b(alues)29 b(whic)n(h)f(migh)n(t)h(b)r
-(e)f(unsuitable)h(for)227 4278 y(displa)n(y)23 b(\(e.g.)35
-b(ma)n(y)22 b(lie)h(outside)g(the)h(exp)r(ected)f(range\))f(in)n(to)h
-(a)g(set)g(of)g(acceptable)f(v)-5 b(alues)23 b(suitable)g(for)f(displa)
-n(y)-7 b(.)0 4442 y Fd(Synopsis:)121 b Ft(void)42 b(astNorm\()e
-(AstFrame)g Fi(\003)p Ft(this,)h(double)g(value[])g(\))0
-4606 y Fd(P)m(arameters:)259 4757 y(this)427 4857 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 4997 y Fd(v)i(alue)427
-5097 y Fj(An)33 b(arra)n(y)c(of)j(double,)h(with)g(one)e(elemen)n(t)h
-(for)g(eac)n(h)f(F)-7 b(rame)31 b(axis)g(\(Naxes)h(attribute\).)50
-b(Initially)-7 b(,)33 b(this)427 5197 y(should)c(con)n(tain)g(a)f(set)h
-(of)g(co)r(ordinate)f(v)-5 b(alues)29 b(represen)n(ting)f(a)g(p)r(oin)n
-(t)h(in)h(the)f(space)g(whic)n(h)g(the)g(F)-7 b(rame)427
-5296 y(describ)r(es.)38 b(If)28 b(these)g(v)-5 b(alues)28
-b(lie)g(outside)f(the)i(exp)r(ected)f(range)f(for)g(the)h(F)-7
-b(rame,)28 b(they)g(will)g(b)r(e)g(replaced)427 5396
-y(with)g(more)f(acceptable)g(\(normalised\))g(v)-5 b(alues.)37
-b(Otherwise,)26 b(they)i(will)g(b)r(e)g(returned)f(unc)n(hanged.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 285 295
-TeXDict begin 285 294 bop 3643 52 a FF(285)340 351 y
-Fi(\017)45 b Fj(F)-7 b(or)34 b(some)f(classes)g(of)h(F)-7
-b(rame,)36 b(whose)d(co)r(ordinate)g(v)-5 b(alues)34
-b(are)f(not)h(constrained,)h(this)g(function)f(will)427
-451 y(nev)n(er)d(mo)r(dify)h(the)g(v)-5 b(alues)31 b(supplied.)49
-b(Ho)n(w)n(ev)n(er,)31 b(for)g(F)-7 b(rames)30 b(whose)h(axes)g
-(represen)n(t)f(cyclic)h(quan)n(ti-)427 551 y(ties)i(\(suc)n(h)f(as)f
-(angles)h(or)f(p)r(ositions)h(on)g(the)g(sky\),)h(co)r(ordinates)e
-(will)i(t)n(ypically)e(b)r(e)i(wrapp)r(ed)f(in)n(to)g(an)427
-650 y(appropriate)26 b(standard)h(range,)f(suc)n(h)h(as)g(zero)g(to)g
-(2)p Fi(\003)p Fj(pi.)340 791 y Fi(\017)45 b Fj(The)31
-b(NormMap)e(class)h(is)g(a)g(Mapping)f(whic)n(h)i(can)f(b)r(e)g(used)h
-(to)f(normalise)f(a)h(set)g(of)g(p)r(oin)n(ts)g(using)g(the)427
-891 y(astNorm)d(function)h(of)g(a)f(sp)r(eci\014ed)h(F)-7
-b(rame.)340 1031 y Fi(\017)45 b Fj(It)28 b(is)f(in)n(tended)h(to)g(b)r
-(e)f(p)r(ossible)h(to)f(put)h(an)n(y)f(set)g(of)h(co)r(ordinates)e(in)n
-(to)h(a)g(form)g(suitable)g(for)g(displa)n(y)g(b)n(y)427
-1131 y(using)d(this)h(function)g(to)f(normalise)f(them,)i(follo)n(w)n
-(ed)f(b)n(y)g(appropriate)e(formatting)i(\(using)g(astF)-7
-b(ormat\).)p 0 1346 3780 12 v 0 1477 a Fz(astNormMap)615
-b Fe(Create)37 b(a)i(NormMap)613 b Fz(astNormMap)0 1682
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(NormMap)g(and)h(optionally)e(initialises)i(its)g(attributes.)227
-1814 y(A)i(NormMap)f(is)h(a)f(Mapping)g(whic)n(h)h(normalises)e(co)r
-(ordinate)h(v)-5 b(alues)29 b(using)g(the)i(astNorm)d(function)j(of)e
-(the)227 1914 y(supplied)g(F)-7 b(rame.)39 b(The)29 b(n)n(um)n(b)r(er)f
-(of)g(inputs)h(and)f(outputs)h(of)g(a)f(NormMap)f(are)h(b)r(oth)h
-(equal)f(to)g(the)h(n)n(um)n(b)r(er)227 2013 y(of)f(axes)e(in)i(the)g
-(supplied)g(F)-7 b(rame.)227 2146 y(The)34 b(forw)n(ard)e(and)h(in)n(v)
-n(erse)f(transformation)g(of)i(a)f(NormMap)g(are)f(b)r(oth)i(de\014ned)
-g(but)g(are)f(iden)n(tical)g(\(that)227 2246 y(is,)43
-b(they)c(do)g(not)h(form)f(a)g(real)g(in)n(v)n(erse)f(pair)g(in)i(that)
-g(the)g(in)n(v)n(erse)d(transformation)h(do)r(es)h(not)h(undo)f(the)227
-2345 y(normalisation,)24 b(instead)h(it)h(reapplies)e(it\).)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)h(astSimplify)h(function)g(will)f(replace)
-f(neigh)n(b)r(ouring)227 2445 y(pairs)j(of)g(forw)n(ard)f(and)i(in)n(v)
-n(erse)e(NormMaps)h(b)n(y)g(a)g(single)g(UnitMap.)0 2610
-y Fd(Synopsis:)121 b Ft(AstNormMap)39 b Fi(\003)p Ft(astNormMap\()g
-(AstFrame)h Fi(\003)p Ft(frame,)h(const)g(char)h Fi(\003)p
-Ft(options,)e(...)86 b(\))0 2776 y Fd(P)m(arameters:)259
-2928 y(frame)427 3028 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(F)-7
-b(rame)27 b(whic)n(h)g(is)h(to)f(b)r(e)h(used)g(to)f(normalise)g(the)h
-(supplied)g(axis)e(v)-5 b(alues.)259 3168 y Fd(options)427
-3268 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)g(string)f
-(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 3368 y(assignmen)n(ts)21 b(to)g(b)r(e)h(used)g(for)f
-(initialising)g(the)h(new)g(NormMap.)34 b(The)22 b(syn)n(tax)e(used)i
-(is)f(iden)n(tical)h(to)f(that)427 3467 y(for)26 b(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 3567 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 3708 y Fd(...)427 3807 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 3907 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 4007 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4106 y Fj(function\).)0
-4284 y Fd(Returned)32 b(V)-8 b(alue:)259 4436 y(astNormMap\(\))427
-4536 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(NormMap.)0
-4714 y Fd(Notes:)340 5012 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5112 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 5290 y Fd(Status)33
-b(Handling)n(:)227 5436 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5536 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 5635 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-eop end
-%%Page: 286 296
-TeXDict begin 286 295 bop 0 52 a FF(286)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astNullRegion)536 b Fe(Create)37 b(a)i(NullRegion)531
-b Fz(astNullRegion)0 713 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(NullRegion)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 859 y(A)k(NullRegion)f(is)f(a)h
-(Region)g(with)g(no)g(b)r(ounds.)47 b(If)32 b(the)f(Negated)g
-(attribute)g(of)g(a)g(NullRegion)g(is)g(false,)g(the)227
-958 y(NullRegion)k(represen)n(ts)f(a)g(Region)g(con)n(taining)g(no)h(p)
-r(oin)n(ts.)59 b(If)35 b(the)h(Negated)e(attribute)h(of)g(a)g
-(NullRegion)227 1058 y(is)f(true,)h(the)f(NullRegion)f(represen)n(ts)f
-(an)h(in\014nite)i(Region)d(con)n(taining)h(all)g(p)r(oin)n(ts)h
-(within)g(the)g(co)r(ordinate)227 1158 y(system.)0 1349
-y Fd(Synopsis:)121 b Ft(AstNullRegion)38 b Fi(\003)p
-Ft(astNullRegion\()f(AstFrame)k Fi(\003)p Ft(frame,)f(AstRegion)g
-Fi(\003)p Ft(unc,)i(const)f(char)h Fi(\003)p Ft(options,)227
-1448 y(...)86 b(\))0 1640 y Fd(P)m(arameters:)259 1818
-y(frame)427 1917 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7
-b(rame)28 b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41
-b(A)29 b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-2017 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 2117 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 2270 y Fd(unc)427 2370
-y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(existing)g(Region)f
-(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n(ties)e(asso)r(ciated)g
-(with)427 2469 y(p)r(ositions)37 b(in)h(the)g(supplied)g(F)-7
-b(rame.)65 b(The)38 b(uncertain)n(t)n(y)e(in)i(an)n(y)f(p)r(oin)n(t)g
-(in)h(the)g(F)-7 b(rame)37 b(is)g(found)h(b)n(y)427 2569
-y(shifting)25 b(the)f(supplied)g Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")f Fj(Region)g(so)g(that)h(it)h(is)f(cen)n(tred)f(at)h(the)g(p)r
-(oin)n(t)g(b)r(eing)h(considered.)427 2669 y(The)34 b(area)e(co)n(v)n
-(ered)g(b)n(y)i(the)g(shifted)g(uncertain)n(t)n(y)f(Region)g(then)i
-(represen)n(ts)d(the)i(uncertain)n(t)n(y)f(in)h(the)427
-2768 y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g
-(b)r(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)427 2895
-y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g(b)r
-(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)n
-(tro-)427 2995 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 3094
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 3194 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 3294 y(nativ)n(ely)-7 b(,)25
-b(a)e(NULL)i(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)i(in)e(whic)n(h)g(case)f(a)h(default)g(uncertain)n(t)n(y)g
-(of)g(zero)427 3393 y(is)k(used.)259 3547 y Fd(options)427
-3646 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3746 y(assignmen)n(ts)i(to)h(b)r(e)h(used)f(for)g(initialising)g(the)h
-(new)f(NullRegion.)48 b(The)31 b(syn)n(tax)f(used)i(is)f(iden)n(tical)g
-(to)427 3846 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-3945 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4099 y Fd(...)427 4199 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4298 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4398 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4498 y Fj(function\).)0
-4701 y Fd(Returned)32 b(V)-8 b(alue:)259 4879 y(astNullRegion\(\))427
-4979 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(NullRegion.)0
-5182 y Fd(Notes:)340 5507 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5606 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 287 297
-TeXDict begin 287 296 bop 3643 52 a FF(287)p 0 351 3780
-12 v 0 482 a Fz(astOK)627 483 y Fe(T)-10 b(est)38 b(whether)g(AST)g
-(functions)g(ha)m(v)m(e)g(b)s(een)h(successful)3402 482
-y Fz(astOK)0 654 y Fd(Description:)44 b Fj(This)29 b(macro)f(returns)g
-(a)h(b)r(o)r(olean)f(v)-5 b(alue)29 b(\(0)g(or)f(1\))h(to)g(indicate)g
-(if)h(preceding)e(AST)h(functions)h(ha)n(v)n(e)227 754
-y(completed)f(successfully)g(\(i.e.)41 b(without)29 b(setting)g(the)g
-(AST)g(error)e(status\).)41 b(If)29 b(the)g(error)e(status)i(is)f(set)h
-(to)g(an)227 853 y(error)d(v)-5 b(alue,)27 b(a)h(v)-5
-b(alue)27 b(of)h(zero)e(is)i(returned,)f(otherwise)g(the)h(result)f(is)
-g(one.)0 1003 y Fd(Synopsis:)121 b Ft(int)42 b(astOK)0
-1154 y Fd(Returned)32 b(V)-8 b(alue:)259 1291 y(astOK)427
-1391 y Fj(One)28 b(if)g(the)g(AST)g(error)d(status)j(is)f(OK,)g
-(otherwise)g(zero.)0 1553 y Fd(Notes:)340 1837 y Fi(\017)45
-b Fj(If)28 b(the)g(AST)g(error)d(status)i(is)h(set)f(to)g(an)g(error)f
-(v)-5 b(alue)27 b(\(after)g(an)g(error\),)f(most)h(AST)h(functions)g
-(will)g(not)427 1936 y(execute)h(and)g(will)h(simply)f(return)g
-(without)g(action.)41 b(T)-7 b(o)29 b(clear)f(the)i(error)d(status)i
-(and)g(restore)f(normal)427 2036 y(b)r(eha)n(viour,)f(use)g
-(astClearStatus.)p 0 2236 V 0 2368 a Fz(astO\013set)308
-b Fe(Calculate)36 b(an)i(o\013set)h(along)e(a)i(geo)s(desic)f(curv)m(e)
-305 b Fz(astO\013set)0 2557 y Fd(Description:)44 b Fj(This)c(function)f
-(\014nds)h(the)f(F)-7 b(rame)39 b(co)r(ordinate)f(v)-5
-b(alues)39 b(of)g(a)g(p)r(oin)n(t)g(whic)n(h)g(is)g(o\013set)h(a)e(sp)r
-(eci\014ed)227 2657 y(distance)28 b(along)e(the)i(geo)r(desic)f(curv)n
-(e)f(b)r(et)n(w)n(een)i(t)n(w)n(o)f(other)g(p)r(oin)n(ts.)227
-2782 y(F)-7 b(or)28 b(example,)h(in)f(a)h(basic)f(F)-7
-b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e(the)i(straigh)n
-(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40 b(F)-7
-b(or)28 b(a)227 2881 y(more)h(sp)r(ecialised)h(F)-7 b(rame)29
-b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n(ev)n(er,)d
-(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227 2981
-y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)0
-3131 y Fd(Synopsis:)121 b Ft(void)42 b(astOffset\()d(AstFrame)i
-Fi(\003)p Ft(this,)g(const)g(double)g(point1[],)f(const)i(double)f
-(point2[],)227 3231 y(double)g(offset,)g(double)g(point3[])f(\))0
-3381 y Fd(P)m(arameters:)259 3518 y(this)427 3618 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 3751 y Fd(p)s(oin)m(t1)427
-3851 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 3951 y(con)n(tain)27 b(the)h(co)r(ordinates)e
-(of)i(the)g(p)r(oin)n(t)g(marking)e(the)i(start)f(of)h(the)g(geo)r
-(desic)e(curv)n(e.)259 4084 y Fd(p)s(oin)m(t2)427 4183
-y Fj(An)d(arra)n(y)e(of)h(double,)i(with)f(one)f(elemen)n(t)h(for)f
-(eac)n(h)f(F)-7 b(rame)23 b(axis)e(This)i(should)f(con)n(tain)g(the)h
-(co)r(ordinates)427 4283 y(of)28 b(the)g(p)r(oin)n(t)g(marking)e(the)i
-(end)g(of)f(the)h(geo)r(desic)f(curv)n(e.)259 4416 y
-Fd(o\013set)427 4516 y Fj(The)g(required)e(o\013set)i(from)f(the)h
-(\014rst)f(p)r(oin)n(t)g(along)g(the)g(geo)r(desic)g(curv)n(e.)35
-b(If)27 b(this)g(is)f(p)r(ositiv)n(e,)h(it)g(will)f(b)r(e)427
-4616 y(to)n(w)n(ards)20 b(the)i(second)f(p)r(oin)n(t.)35
-b(If)22 b(it)g(is)f(negativ)n(e,)h(it)g(will)f(b)r(e)h(in)g(the)g(opp)r
-(osite)f(direction.)35 b(This)21 b(o\013set)g(need)427
-4715 y(not)28 b(imply)g(a)f(p)r(osition)h(lying)f(b)r(et)n(w)n(een)h
-(the)g(t)n(w)n(o)f(p)r(oin)n(ts)h(giv)n(en,)f(as)g(the)h(curv)n(e)e
-(will)i(b)r(e)g(extrap)r(olated)f(if)427 4815 y(necessary)-7
-b(.)259 4948 y Fd(p)s(oin)m(t3)427 5048 y Fj(An)34 b(arra)n(y)e(of)i
-(double,)h(with)f(one)f(elemen)n(t)h(for)f(eac)n(h)g(F)-7
-b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r(ordinates)f(of)g(the)427
-5147 y(required)27 b(p)r(oin)n(t)h(will)g(b)r(e)g(returned.)0
-5310 y Fd(Notes:)340 5593 y Fi(\017)45 b Fj(The)26 b(geo)r(desic)e
-(curv)n(e)h(used)g(b)n(y)g(this)h(function)g(is)f(the)h(path)f(of)h
-(shortest)e(distance)i(b)r(et)n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427
-5693 y(as)i(de\014ned)h(b)n(y)f(the)h(astDistance)g(function.)p
-eop end
-%%Page: 288 298
-TeXDict begin 288 297 bop 0 52 a FF(288)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(This)19 b(function)g(will)g(return)f Ft(")p Fj(bad)p
-Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18 b(\(AST)p Ft(__)p
-Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r(ordinates)427
-451 y(has)27 b(this)h(v)-5 b(alue.)340 590 y Fi(\017)45
-b Ft(")p Fj(Bad)p Ft(")32 b Fj(co)r(ordinate)f(v)-5 b(alues)32
-b(will)h(also)e(b)r(e)i(returned)f(if)h(the)g(t)n(w)n(o)f(p)r(oin)n(ts)
-g(supplied)h(are)f(coinciden)n(t)g(\(or)427 689 y(otherwise)27
-b(fail)h(to)f(uniquely)h(sp)r(ecify)g(a)f(geo)r(desic)g(curv)n(e\))f
-(but)j(the)f(requested)f(o\013set)g(is)h(non-zero.)p
-0 900 3780 12 v 0 1032 a Fz(astO\013set2)172 b Fe(Calculate)37
-b(an)h(o\013set)h(along)e(a)h(geo)s(desic)h(curv)m(e)f(in)1587
-1145 y(a)h(2D)g(F)-10 b(rame)3195 1032 y Fz(astO\013set2)0
-1322 y Fd(Description:)44 b Fj(This)c(function)f(\014nds)h(the)f(F)-7
-b(rame)39 b(co)r(ordinate)f(v)-5 b(alues)39 b(of)g(a)g(p)r(oin)n(t)g
-(whic)n(h)g(is)g(o\013set)h(a)e(sp)r(eci\014ed)227 1422
-y(distance)30 b(along)f(the)h(geo)r(desic)f(curv)n(e)g(at)h(a)f(giv)n
-(en)g(angle)g(from)h(a)g(sp)r(eci\014ed)g(starting)f(p)r(oin)n(t.)44
-b(It)30 b(can)g(only)f(b)r(e)227 1522 y(used)f(with)g(2-dimensional)e
-(F)-7 b(rames.)227 1652 y(F)g(or)28 b(example,)h(in)f(a)h(basic)f(F)-7
-b(rame,)28 b(this)h(o\013set)f(will)h(b)r(e)g(along)e(the)i(straigh)n
-(t)f(line)g(joining)h(t)n(w)n(o)e(p)r(oin)n(ts.)40 b(F)-7
-b(or)28 b(a)227 1752 y(more)h(sp)r(ecialised)h(F)-7 b(rame)29
-b(describing)h(a)f(sky)h(co)r(ordinate)e(system,)j(ho)n(w)n(ev)n(er,)d
-(it)j(w)n(ould)e(b)r(e)i(along)d(the)j(great)227 1851
-y(circle)c(passing)g(through)g(t)n(w)n(o)f(sky)i(p)r(ositions.)0
-2013 y Fd(Synopsis:)121 b Ft(double)41 b(astOffset2\()e(AstFrame)h
-Fi(\003)p Ft(this,)h(const)h(double)f(point1[2],)e(double)i(angle,)h
-(double)227 2112 y(offset,)f(double)g(point2[2])f(\);)0
-2273 y Fd(P)m(arameters:)259 2421 y(this)427 2521 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 2660 y Fd(p)s(oin)m(t1)427
-2759 y Fj(An)35 b(arra)n(y)d(of)i(double,)j(with)d(one)g(elemen)n(t)h
-(for)f(eac)n(h)f(F)-7 b(rame)34 b(axis)g(\(Naxes)g(attribute\).)57
-b(This)35 b(should)427 2859 y(con)n(tain)27 b(the)h(co)r(ordinates)e
-(of)i(the)g(p)r(oin)n(t)g(marking)e(the)i(start)f(of)h(the)g(geo)r
-(desic)e(curv)n(e.)259 2998 y Fd(angle)427 3097 y Fj(The)j(angle)f
-(\(in)i(radians\))e(from)g(the)i(p)r(ositiv)n(e)e(direction)h(of)g(the)
-g(second)f(axis,)h(to)g(the)g(direction)f(of)h(the)427
-3197 y(required)38 b(p)r(osition,)i(as)e(seen)g(from)g(the)g(starting)g
-(p)r(osition.)68 b(P)n(ositiv)n(e)37 b(rotation)g(is)h(in)g(the)h
-(sense)f(of)427 3297 y(rotation)27 b(from)g(the)h(p)r(ositiv)n(e)f
-(direction)g(of)h(axis)f(2)g(to)g(the)h(p)r(ositiv)n(e)g(direction)f
-(of)g(axis)g(1.)259 3435 y Fd(o\013set)427 3535 y Fj(The)g(required)e
-(o\013set)i(from)f(the)h(\014rst)f(p)r(oin)n(t)g(along)g(the)g(geo)r
-(desic)g(curv)n(e.)35 b(If)27 b(this)g(is)f(p)r(ositiv)n(e,)h(it)g
-(will)f(b)r(e)427 3635 y(in)i(the)g(direction)f(of)h(the)g(giv)n(en)f
-(angle.)36 b(If)28 b(it)g(is)f(negativ)n(e,)g(it)h(will)g(b)r(e)g(in)f
-(the)h(opp)r(osite)g(direction.)259 3773 y Fd(p)s(oin)m(t2)427
-3873 y Fj(An)34 b(arra)n(y)e(of)i(double,)h(with)f(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(F)-7 b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r
-(ordinates)f(of)g(the)427 3973 y(required)27 b(p)r(oin)n(t)h(will)g(b)r
-(e)g(returned.)0 4146 y Fd(Returned)k(V)-8 b(alue:)259
-4294 y(astO\013set2)427 4394 y Fj(The)27 b(direction)f(of)g(the)h(geo)r
-(desic)e(curv)n(e)g(at)h(the)h(end)g(p)r(oin)n(t.)36
-b(That)27 b(is,)f(the)h(angle)e(\(in)i(radians\))f(b)r(et)n(w)n(een)427
-4494 y(the)35 b(p)r(ositiv)n(e)e(direction)h(of)g(the)g(second)f(axis)h
-(and)g(the)g(con)n(tin)n(uation)f(of)h(the)g(geo)r(desic)f(curv)n(e)g
-(at)h(the)427 4593 y(requested)29 b(end)h(p)r(oin)n(t.)42
-b(P)n(ositiv)n(e)28 b(rotation)g(is)h(in)h(the)g(sense)f(of)g(rotation)
-f(from)h(the)h(p)r(ositiv)n(e)f(direction)427 4693 y(of)f(axis)f(2)g
-(to)g(the)h(p)r(ositiv)n(e)f(direction)h(of)f(axis)g(1.)0
-4866 y Fd(Notes:)340 5161 y Fi(\017)45 b Fj(The)26 b(geo)r(desic)e
-(curv)n(e)h(used)g(b)n(y)g(this)h(function)g(is)f(the)h(path)f(of)h
-(shortest)e(distance)i(b)r(et)n(w)n(een)f(t)n(w)n(o)g(p)r(oin)n(ts,)427
-5260 y(as)i(de\014ned)h(b)n(y)f(the)h(astDistance)g(function.)340
-5399 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)
-h(the)g(F)-7 b(rame)27 b(is)g(not)h(2-dimensional.)340
-5538 y Fi(\017)45 b Fj(This)19 b(function)g(will)g(return)f
-Ft(")p Fj(bad)p Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 5637 y(has)27 b(this)h(v)-5 b(alue.)p
-eop end
-%%Page: 289 299
-TeXDict begin 289 298 bop 3643 52 a FF(289)p 0 351 3780
-12 v 0 483 a Fz(astOutline)p Fc(<)p Fz(X)p Fc(>)236 b
-Fe(Create)37 b(a)i(new)f(P)m(olygon)f(outling)1271 598
-y(v)-7 b(alues)38 b(in)h(a)g(2D)f(data)g(grid)2886 483
-y Fz(astOutline)p Fc(<)p Fz(X)p Fc(>)0 780 y Fd(Description:)44
-b Fj(This)27 b(is)g(a)g(set)g(of)g(functions)g(that)g(create)g(a)f(P)n
-(olygon)f(enclosing)h(a)h(single)f(con)n(tiguous)g(set)h(of)g(pixels)
-227 880 y(that)h(ha)n(v)n(e)f(a)g(sp)r(eci\014ed)h(v)-5
-b(alue)27 b(within)h(a)g(gridded)f(2-dimensional)f(data)h(arra)n(y)e
-(\(e.g.)37 b(an)27 b(image\).)227 1003 y(A)40 b(basic)f(2-dimensional)e
-(F)-7 b(rame)39 b(is)g(used)h(to)f(represen)n(t)f(the)h(pixel)h(co)r
-(ordinate)e(system)h(in)g(the)h(returned)227 1103 y(P)n(olygon.)33
-b(The)21 b(Domain)g(attribute)h(is)f(set)g(to)h Ft(")p
-Fj(PIXEL)p Ft(")p Fj(,)f(the)g(Title)h(attribute)f(is)h(set)f(to)g
-Ft(")p Fj(Pixel)f(co)r(ordinates)p Ft(")p Fj(,)227 1202
-y(and)i(the)h(Unit)f(attribute)h(for)e(eac)n(h)g(axis)h(is)g(set)g(to)g
-Ft(")p Fj(pixel)p Ft(")p Fj(.)34 b(All)22 b(other)g(attributes)g(are)f
-(left)i(unset.)35 b(The)22 b(nature)227 1302 y(of)28
-b(the)g(pixel)f(co)r(ordinate)g(system)g(is)h(determined)f(b)n(y)h
-(parameter)e Ft(")p Fj(starpix)p Ft(")p Fj(.)227 1425
-y(The)39 b Ft(")p Fj(maxerr)p Ft(")e Fj(and)h Ft(")p
-Fj(maxv)n(ert)p Ft(")f Fj(parameters)g(can)i(b)r(e)g(used)g(to)g(con)n
-(trol)e(ho)n(w)h(accurately)g(the)h(returned)227 1525
-y(P)n(olygon)28 b(represen)n(ts)g(the)i(required)f(region)f(in)i(the)g
-(data)f(arra)n(y)-7 b(.)41 b(The)30 b(n)n(um)n(b)r(er)f(of)h(v)n
-(ertices)e(in)i(the)g(returned)227 1624 y(P)n(olygon)c(will)h(b)r(e)i
-(the)e(minim)n(um)i(needed)f(to)f(ac)n(hiev)n(e)f(the)i(required)f
-(accuracy)-7 b(.)227 1747 y(Y)g(ou)34 b(should)g(use)g(a)f(function)i
-(whic)n(h)f(matc)n(hes)f(the)h(n)n(umerical)f(t)n(yp)r(e)i(of)f(the)g
-(data)f(y)n(ou)g(are)g(pro)r(cessing)g(b)n(y)227 1847
-y(replacing)c Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)g(generic)f(function)i
-(name)e(astOutline)p Fl(<)p Fj(X)p Fl(>)h Fj(b)n(y)f(an)h(appropriate)e
-(1-)h(or)g(2-c)n(haracter)227 1947 y(t)n(yp)r(e)h(co)r(de.)43
-b(F)-7 b(or)29 b(example,)h(if)g(y)n(ou)e(are)h(pro)r(cesing)f(data)i
-(with)g(t)n(yp)r(e)g Ft(")p Fj(\015oat)p Ft(")p Fj(,)e(y)n(ou)h(should)
-h(use)f(the)h(function)227 2046 y(astOutlineF)21 b(\(see)f(the)h
-Ft(")p Fj(Data)f(T)n(yp)r(e)g(Co)r(des)p Ft(")g Fj(section)g(b)r(elo)n
-(w)g(for)g(the)h(co)r(des)f(appropriate)f(to)i(other)e(n)n(umerical)227
-2146 y(t)n(yp)r(es\).)0 2292 y Fd(Synopsis:)121 b Ft(AstPolygon)39
-b Fi(\003)p Ft(astOutline)p Fl(<)p Ft(X)p Fl(>)p Ft(\()f
-Fl(<)p Ft(Xtype)p Fl(>)i Ft(value,)h(int)i(oper,)e Fl(<)p
-Ft(Xtype)p Fl(>)g Ft(array[],)f(int)i(lbnd[2],)227 2392
-y(int)h(ubnd[2],)d(double)h(maxerr,)g(int)h(maxvert,)e(int)j
-(inside[2],)c(int)j(starpix)f(\))0 2538 y Fd(P)m(arameters:)259
-2672 y(v)-5 b(alue)427 2771 y Fj(A)28 b(data)f(v)-5 b(alue)28
-b(that)g(sp)r(eci\014es)f(the)h(pixels)g(to)f(b)r(e)h(outlined.)259
-2901 y Fd(op)s(er)427 3001 y Fj(Indicates)f(ho)n(w)g(the)g
-Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(parameter)e(is)j(used)f(to)g
-(select)g(the)h(outlined)f(pixels.)37 b(It)27 b(can)g(ha)n(v)n(e)f(an)n
-(y)h(of)427 3101 y(the)h(follo)n(wing)f(v)-5 b(alues:)510
-3205 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(L)-7 b(T:)27
-b(outline)h(pixels)g(with)g(v)-5 b(alue)27 b(less)g(than)h
-Ft(")p Fj(v)-5 b(alue)p Ft(")p Fj(.)510 3320 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(LE:)27 b(outline)h(pixels)f(with)h(v)-5
-b(alue)28 b(less)f(than)g(or)g(equal)g(to)h Ft(")p Fj(v)-5
-b(alue)p Ft(")p Fj(.)510 3435 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(EQ:)27 b(outline)g(pixels)h(with)g(v)-5 b(alue)27
-b(equal)g(to)h Ft(")p Fj(v)-5 b(alue)p Ft(")p Fj(.)510
-3549 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(NE:)27 b(outline)h(pixels)f
-(with)i(v)-5 b(alue)27 b(not)h(equal)f(to)g Ft(")p Fj(v)-5
-b(alue)p Ft(")p Fj(.)510 3664 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(GE:)27 b(outline)h(pixels)f(with)h(v)-5 b(alue)28
-b(greater)e(than)h(or)g(equal)g(to)h Ft(")p Fj(v)-5 b(alue)p
-Ft(")p Fj(.)510 3779 y Fi(\017)45 b Fj(AST)p Ft(__)p
-Fj(GT:)28 b(outline)f(pixels)h(with)g(v)-5 b(alue)27
-b(greater)f(than)i Ft(")p Fj(v)-5 b(alue)p Ft(")p Fj(.)259
-3909 y Fd(arra)m(y)427 4008 y Fj(P)n(oin)n(ter)25 b(to)i(a)f
-(2-dimensional)f(arra)n(y)f(con)n(taining)i(the)h(data)f(to)g(b)r(e)h
-(pro)r(cessed.)36 b(The)26 b(n)n(umerical)g(t)n(yp)r(e)h(of)427
-4108 y(this)g(arra)n(y)d(should)i(matc)n(h)h(the)g(1-)e(or)h(2-c)n
-(haracter)d(t)n(yp)r(e)k(co)r(de)f(app)r(ended)h(to)g(the)f(function)h
-(name)g(\(e.g.)427 4208 y(if)h(y)n(ou)f(are)g(using)g(astOutlineF,)h
-(the)g(t)n(yp)r(e)f(of)h(eac)n(h)f(arra)n(y)e(elemen)n(t)j(should)f(b)r
-(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 4322 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-4422 y(dimension)g(v)-5 b(aries)31 b(most)h(rapidly)g(and)g(that)h(of)f
-(the)h(second)f(dimension)g(least)g(rapidly)g(\(i.e.)52
-b(F)-7 b(ortran)427 4522 y(arra)n(y)26 b(indexing)h(is)g(used\).)259
-4651 y Fd(lbnd)427 4751 y Fj(P)n(oin)n(ter)g(to)h(an)h(arra)n(y)d(of)i
-(t)n(w)n(o)g(in)n(tegers)f(con)n(taining)g(the)i(co)r(ordinates)e(of)i
-(the)f(cen)n(tre)g(of)h(the)f(\014rst)h(pixel)427 4851
-y(in)f(the)g(input)h(grid)d(along)h(eac)n(h)g(dimension.)259
-4981 y Fd(ubnd)427 5080 y Fj(P)n(oin)n(ter)h(to)h(an)g(arra)n(y)e(of)i
-(t)n(w)n(o)g(in)n(tegers)f(con)n(taining)g(the)i(co)r(ordinates)e(of)h
-(the)h(cen)n(tre)f(of)g(the)h(last)f(pixel)427 5180 y(in)f(the)g(input)
-h(grid)d(along)h(eac)n(h)g(dimension.)427 5295 y(Note)f(that)h
-Ft(")p Fj(lbnd)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)g(size)g(of)g(the)g
-(input)h(grid,)f(its)h(exten)n(t)427 5394 y(along)36
-b(a)g(particular)f(\(j'th\))j(dimension)e(b)r(eing)g(ubnd[j]-lbnd[j]+1)
-i(\(assuming)d(the)i(index)g Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)427
-5494 y(zero-based\).)69 b(They)39 b(also)e(de\014ne)j(the)f(input)g
-(grid's)f(co)r(ordinate)g(system,)j(eac)n(h)d(pixel)h(ha)n(ving)f(unit)
-427 5593 y(exten)n(t)28 b(along)e(eac)n(h)g(dimension)h(with)h(in)n
-(tegral)e(co)r(ordinate)g(v)-5 b(alues)27 b(at)g(its)h(cen)n(tre)e(or)h
-(upp)r(er)g(corner,)f(as)427 5693 y(selected)i(b)n(y)f(parameter)f
-Ft(")p Fj(starpix)p Ft(")p Fj(.)p eop end
-%%Page: 290 300
-TeXDict begin 290 299 bop 0 52 a FF(290)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(maxerr)427
-451 y Fj(T)-7 b(ogether)19 b(with)i Ft(")p Fj(maxv)n(ert)p
-Ft(")p Fj(,)e(this)i(determines)f(ho)n(w)f(accurately)g(the)h(returned)
-g(P)n(olygon)e(represen)n(ts)g(the)427 551 y(required)g(region)g(of)h
-(the)g(data)f(arra)n(y)-7 b(.)32 b(It)19 b(giv)n(es)f(the)h(target)f
-(discrepancy)g(b)r(et)n(w)n(een)h(the)g(returned)g(P)n(olygon)427
-650 y(and)36 b(the)f(accurate)f(outline)i(in)g(the)g(data)e(arra)n(y)-7
-b(,)36 b(expressed)e(as)h(a)g(n)n(um)n(b)r(er)g(of)g(pixels.)60
-b(Insigni\014can)n(t)427 750 y(v)n(ertices)38 b(are)f(remo)n(v)n(ed)h
-(from)g(the)h(accurate)e(outline,)42 b(one)c(b)n(y)h(one,)i(un)n(til)e
-(the)g(n)n(um)n(b)r(er)f(of)h(v)n(ertices)427 849 y(remaining)25
-b(in)i(the)f(returned)g(P)n(olygon)e(equals)h Ft(")p
-Fj(maxv)n(ert)p Ft(")p Fj(,)f(or)h(the)i(largest)d(discrepancy)h(b)r
-(et)n(w)n(een)h(the)427 949 y(accurate)j(outline)g(and)h(the)g
-(returned)f(P)n(olygon)e(is)j(greater)e(than)h Ft(")p
-Fj(maxerr)p Ft(")p Fj(.)41 b(If)30 b Ft(")p Fj(maxerr)p
-Ft(")d Fj(is)j(zero)e(or)427 1049 y(less,)g(its)h(v)-5
-b(alue)28 b(is)g(ignored)f(and)h(the)h(returned)f(P)n(olygon)e(will)i
-(ha)n(v)n(e)f(the)i(n)n(um)n(b)r(er)f(of)g(v)n(ertices)f(sp)r
-(eci\014ed)427 1148 y(b)n(y)h Ft(")p Fj(maxv)n(ert)p
-Ft(")p Fj(.)259 1285 y Fd(maxv)m(ert)427 1385 y Fj(T)-7
-b(ogether)23 b(with)h Ft(")p Fj(maxerr)p Ft(")p Fj(,)f(this)h
-(determines)g(ho)n(w)f(accurately)f(the)j(returned)e(P)n(olygon)f
-(represen)n(ts)g(the)427 1484 y(required)32 b(region)f(of)h(the)g(data)
-g(arra)n(y)-7 b(.)49 b(It)33 b(giv)n(es)e(the)h(maxim)n(um)g(allo)n(w)n
-(ed)f(n)n(um)n(b)r(er)h(of)h(v)n(ertices)e(in)h(the)427
-1584 y(returned)e(P)n(olygon.)42 b(Insigni\014can)n(t)30
-b(v)n(ertices)f(are)g(remo)n(v)n(ed)g(from)h(the)g(accurate)f(outline,)
-i(one)f(b)n(y)g(one,)427 1683 y(un)n(til)38 b(the)f(n)n(um)n(b)r(er)g
-(of)h(v)n(ertices)e(remaining)g(in)h(the)h(returned)f(P)n(olygon)e
-(equals)h Ft(")p Fj(maxv)n(ert)p Ft(")p Fj(,)i(or)e(the)427
-1783 y(largest)c(discrepancy)g(b)r(et)n(w)n(een)i(the)f(accurate)f
-(outline)i(and)f(the)h(returned)f(P)n(olygon)e(is)i(greater)e(than)427
-1883 y Ft(")p Fj(maxerr)p Ft(")p Fj(.)36 b(If)28 b Ft(")p
-Fj(maxv)n(ert)p Ft(")e Fj(is)i(less)g(than)g(3,)g(its)g(v)-5
-b(alue)28 b(is)f(ignored)g(and)h(the)g(n)n(um)n(b)r(er)g(of)g(v)n
-(ertices)f(in)h(the)427 1982 y(returned)k(P)n(olygon)f(will)i(b)r(e)g
-(the)g(minim)n(um)g(needed)g(to)f(ensure)g(that)h(the)g(discrepancy)f
-(b)r(et)n(w)n(een)g(the)427 2082 y(accurate)27 b(outline)g(and)h(the)g
-(returned)f(P)n(olygon)e(is)j(less)f(than)h Ft(")p Fj(maxerr)p
-Ft(")p Fj(.)259 2219 y Fd(inside)427 2318 y Fj(P)n(oin)n(ter)i(to)g(an)
-h(arra)n(y)d(of)j(t)n(w)n(o)f(in)n(tegers)g(con)n(taining)g(the)h
-(indices)g(of)g(a)f(pixel)h(kno)n(wn)f(to)h(b)r(e)g(inside)g(the)427
-2418 y(required)c(region.)35 b(This)28 b(is)f(needed)g(b)r(ecause)g
-(the)h(supplied)g(data)f(arra)n(y)e(ma)n(y)h(con)n(tain)h(sev)n(eral)f
-(disjoin)n(t)427 2517 y(areas)i(of)i(pixels)g(that)g(satisfy)g(the)g
-(criterion)f(sp)r(eci\014ed)h(b)n(y)f Ft(")p Fj(v)-5
-b(alue)p Ft(")29 b Fj(and)h Ft(")p Fj(op)r(er)p Ft(")p
-Fj(.)42 b(In)30 b(suc)n(h)g(cases,)f(the)427 2617 y(area)h(describ)r
-(ed)h(b)n(y)g(the)g(returned)g(P)n(olygon)e(will)i(b)r(e)h(the)f(one)g
-(that)h(con)n(tains)e(the)h(pixel)g(sp)r(eci\014ed)h(b)n(y)427
-2717 y Ft(")p Fj(inside)p Ft(")p Fj(.)45 b(If)31 b(the)f(sp)r
-(eci\014ed)h(pixel)f(is)h(outside)f(the)g(b)r(ounds)h(giv)n(en)f(b)n(y)
-g Ft(")p Fj(lbnd)p Ft(")g Fj(and)g Ft(")p Fj(ubnd)p Ft(")p
-Fj(,)h(or)e(has)h(a)427 2816 y(v)-5 b(alue)34 b(that)g(do)r(es)f(not)h
-(meet)f(the)h(criterion)f(sp)r(eci\014ed)h(b)n(y)f Ft(")p
-Fj(v)-5 b(alue)p Ft(")33 b Fj(and)g Ft(")p Fj(op)r(er)p
-Ft(")p Fj(,)h(then)g(this)g(function)427 2916 y(will)26
-b(searc)n(h)e(for)h(a)g(suitable)g(pixel.)36 b(The)26
-b(searc)n(h)d(starts)i(at)g(the)h(cen)n(tral)f(pixel)g(and)g(pro)r
-(ceeds)g(in)h(a)f(spiral)427 3016 y(manner)i(un)n(til)h(a)g(pixel)f(is)
-h(found)g(that)f(meets)h(the)g(sp)r(eci\014ed)g(crierion.)259
-3152 y Fd(starpix)427 3252 y Fj(A)19 b(\015ag)f(indicating)g(the)h
-(nature)e(of)i(the)g(pixel)f(co)r(ordinate)f(system)h(used)h(to)f
-(describ)r(e)g(the)h(v)n(ertex)e(p)r(ositions)427 3351
-y(in)31 b(the)g(returned)f(P)n(olygon.)44 b(If)31 b(non-zero,)f(the)h
-(standard)f(Starlink)g(de\014nition)h(of)g(pixel)f(co)r(ordinate)g(is)
-427 3451 y(used)i(in)f(whic)n(h)h(a)f(pixel)g(with)h(in)n(teger)e
-(index)i(I)f(spans)g(a)g(range)f(of)h(pixel)h(co)r(ordinate)e(from)h
-(\(I-1\))g(to)h(I)427 3551 y(\(i.e.)41 b(pixel)29 b(corners)e(ha)n(v)n
-(e)g(in)n(tegral)h(pixel)h(co)r(ordinates\).)39 b(If)29
-b(zero,)f(the)h(de\014nition)g(of)g(pixel)g(co)r(ordinate)427
-3650 y(used)24 b(b)n(y)f(other)g(AST)h(functions)g(suc)n(h)g(as)f
-(astResample,)g(astMask,)h(etc.,)g(is)g(used.)35 b(In)24
-b(this)g(de\014nition,)h(a)427 3750 y(pixel)i(with)g(in)n(teger)f
-(index)h(I)f(spans)g(a)h(range)e(of)i(pixel)f(co)r(ordinate)g(from)g
-(\(I-0.5\))g(to)h(\(I+0.5\))f(\(i.e.)37 b(pixel)427 3850
-y(cen)n(tres)27 b(ha)n(v)n(e)f(in)n(tegral)h(pixel)g(co)r(ordinates\).)
-259 3986 y Fd(b)s(o)m(xsize)427 4086 y Fj(The)38 b(full)g(width)g(in)g
-(pixels)f(of)h(a)f(smo)r(othing)g(b)r(o)n(x)g(to)g(b)r(e)h(applied)g
-(to)f(the)h(p)r(olygon)e(v)n(ertices)h(b)r(efore)427
-4185 y(do)n(wnsizing)29 b(the)i(p)r(olygon)e(to)i(a)f(smaller)f(n)n(um)
-n(b)r(er)h(of)g(v)n(ertices.)44 b(If)31 b(an)f(ev)n(en)g(n)n(um)n(b)r
-(er)g(is)g(supplied,)h(the)427 4285 y(next)d(larger)e(o)r(dd)i(n)n(um)n
-(b)r(er)f(is)g(used.)37 b(V)-7 b(alues)28 b(of)f(one)g(or)g(zero)g
-(result)g(in)h(no)f(smo)r(othing.)0 4455 y Fd(Returned)32
-b(V)-8 b(alue:)259 4599 y(astOutline)p Fl(<)p Fd(X)p
-Fl(>)p Fd(\(\))427 4698 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(pixels)f
-(to)h(whic)n(h)f(a)g(v)-5 b(alue)28 b(of)f Ft(")p Fj(badv)-5
-b(al)p Ft(")27 b Fj(has)g(b)r(een)h(assigned.)0 4868
-y Fd(Notes:)340 5158 y Fi(\017)45 b Fj(This)27 b(function)h(pro)r
-(ceeds)e(b)n(y)h(\014rst)g(\014nding)g(a)g(v)n(ery)f(accurate)g(p)r
-(olygon,)g(and)h(then)h(remo)n(ving)d(insigni\014-)427
-5257 y(can)n(t)i(v)n(ertices)g(from)g(this)h(\014ne)g(p)r(olygon)f
-(using)g(astDo)n(wnsize.)340 5394 y Fi(\017)45 b Fj(The)27
-b(returned)g(P)n(olygon)d(is)j(the)h(outer)e(b)r(oundary)g(of)h(the)g
-(con)n(tiguous)f(set)h(of)f(pixels)h(that)g(includes)g(ths)427
-5494 y(sp)r(eci\014ed)k Ft(")p Fj(inside)p Ft(")f Fj(p)r(oin)n(t,)i
-(and)f(satisfy)f(the)h(sp)r(eci\014ed)g(v)-5 b(alue)31
-b(requiremen)n(t.)46 b(This)30 b(set)h(of)g(pixels)f(ma)n(y)427
-5593 y(p)r(oten)n(tially)22 b(include)h Ft(")p Fj(holes)p
-Ft(")d Fj(where)i(the)g(pixel)g(v)-5 b(alues)22 b(fail)g(to)g(meet)h
-(the)f(sp)r(eci\014ed)g(v)-5 b(alue)22 b(requiremen)n(t.)427
-5693 y(Suc)n(h)28 b(holes)f(will)h(b)r(e)g(ignored)e(b)n(y)h(this)h
-(function.)p eop end
-%%Page: 291 301
-TeXDict begin 291 300 bop 3643 52 a FF(291)340 351 y
-Fi(\017)45 b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f
-(global)f(error)f(status)h(set,)h(or)427 451 y(if)i(it)g(should)g(fail)
-f(for)h(an)n(y)e(reason.)-2 611 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n
-(:)227 757 y Fj(T)-7 b(o)26 b(select)g(the)g(appropriate)e(masking)h
-(function,)i(y)n(ou)e(should)h(replace)f Fl(<)p Fj(X)p
-Fl(>)h Fj(in)g(the)g(generic)f(function)i(name)227 857
-y(astOutline)p Fl(<)p Fj(X)p Fl(>)18 b Fj(with)h(a)f(1-)g(or)g(2-c)n
-(haracter)e(data)i(t)n(yp)r(e)g(co)r(de,)j(so)d(as)g(to)g(matc)n(h)g
-(the)h(n)n(umerical)f(t)n(yp)r(e)h Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)227 957 y Fj(of)28 b(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h
-(as)f(follo)n(ws:)340 1092 y Fi(\017)45 b Fj(D:)28 b(double)340
-1223 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 1354 y Fi(\017)45
-b Fj(L:)28 b(long)f(in)n(t)340 1486 y Fi(\017)45 b Fj(UL:)28
-b(unsigned)g(long)e(in)n(t)340 1617 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 1749 y Fi(\017)45 b Fj(UI:)28 b(unsigned)g(in)n(t)340
-1880 y Fi(\017)45 b Fj(S:)28 b(short)f(in)n(t)340 2011
-y Fi(\017)45 b Fj(US:)28 b(unsigned)g(short)f(in)n(t)340
-2143 y Fi(\017)45 b Fj(B:)28 b(b)n(yte)f(\(signed)h(c)n(har\))340
-2274 y Fi(\017)45 b Fj(UB:)28 b(unsigned)f(b)n(yte)h(\(unsigned)g(c)n
-(har\))227 2435 y(F)-7 b(or)34 b(example,)h(astOutlineD)f(w)n(ould)f(b)
-r(e)i(used)f(to)g(pro)r(cess)e Ft(")p Fj(double)p Ft(")i
-Fj(data,)h(while)f(astOutlineS)g(w)n(ould)f(b)r(e)227
-2534 y(used)28 b(to)f(pro)r(cess)g Ft(")p Fj(short)f(in)n(t)p
-Ft(")i Fj(data,)f(etc.)p 0 2731 3780 12 v 0 2862 a Fz(astOv)l(erlap)299
-b Fe(T)-10 b(est)38 b(if)h(t)m(w)m(o)e(regions)g(o)m(v)m(erlap)g(eac)m
-(h)h(other)296 b Fz(astOv)l(erlap)0 3048 y Fd(Description:)44
-b Fj(This)39 b(function)h(returns)e(an)g(in)n(teger)g(v)-5
-b(alue)39 b(indicating)g(if)g(the)g(t)n(w)n(o)g(supplied)g(Regions)f(o)
-n(v)n(erlap.)227 3148 y(The)30 b(t)n(w)n(o)g(Regions)f(are)g(con)n(v)n
-(erted)f(to)i(a)g(commnon)f(co)r(ordinate)g(system)h(b)r(efore)f(p)r
-(erforming)h(the)g(c)n(hec)n(k.)43 b(If)227 3247 y(this)33
-b(con)n(v)n(ersion)e(is)i(not)g(p)r(ossible)f(\(for)h(instance)g(b)r
-(ecause)f(the)h(t)n(w)n(o)g(Regions)e(represen)n(t)h(areas)f(in)i
-(di\013eren)n(t)227 3347 y(domains\),)28 b(then)g(the)g(c)n(hec)n(k)e
-(cannot)h(b)r(e)h(p)r(erformed)g(and)f(a)g(zero)g(v)-5
-b(alue)27 b(is)h(returned)f(to)g(indicate)h(this.)0 3495
-y Fd(Synopsis:)121 b Ft(int)42 b(astOverlap\()d(AstRegion)h
-Fi(\003)p Ft(this,)h(AstRegion)f Fi(\003)p Ft(that)h(\))0
-3643 y Fd(P)m(arameters:)259 3778 y(this)427 3878 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(Region.)259 4009 y Fd(that)427
-4109 y Fj(P)n(oin)n(ter)f(to)i(the)g(second)f(Region.)0
-4269 y Fd(Returned)32 b(V)-8 b(alue:)259 4404 y(astOv)m(erlap\(\))427
-4504 y Fj(A)28 b(v)-5 b(alue)28 b(indicating)f(if)h(there)g(is)f(an)n
-(y)g(o)n(v)n(erlap)e(b)r(et)n(w)n(een)j(the)g(t)n(w)n(o)f(Regions.)36
-b(P)n(ossible)26 b(v)-5 b(alues)27 b(are:)427 4619 y(0)i(-)f(The)h(c)n
-(hec)n(k)f(could)h(not)g(b)r(e)g(p)r(erformed)f(b)r(ecause)g(the)i
-(second)e(Region)g(could)h(not)f(b)r(e)i(mapp)r(ed)f(in)n(to)427
-4719 y(the)f(co)r(ordinate)f(system)g(of)h(the)g(\014rst)f(Region.)427
-4834 y(1)g(-)h(There)f(is)g(no)h(o)n(v)n(erlap)d(b)r(et)n(w)n(een)j
-(the)g(t)n(w)n(o)f(Regions.)427 4950 y(2)g(-)h(The)f(\014rst)h(Region)f
-(is)g(completely)h(inside)f(the)h(second)f(Region.)427
-5065 y(3)g(-)h(The)f(second)g(Region)g(is)h(completely)f(inside)h(the)g
-(\014rst)f(Region.)427 5181 y(4)g(-)h(There)f(is)g(partial)g(o)n(v)n
-(erlap)f(b)r(et)n(w)n(een)h(the)h(t)n(w)n(o)f(Regions.)427
-5296 y(5)g(-)h(The)f(Regions)g(are)g(iden)n(tical)g(to)h(within)g
-(their)f(uncertain)n(ties.)427 5412 y(6)e(-)g(The)g(second)g(Region)f
-(is)h(the)h(exact)e(negation)g(of)h(the)h(\014rst)f(Region)f(to)h
-(within)h(their)f(uncertain)n(ties.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 292 302
-TeXDict begin 292 301 bop 0 52 a FF(292)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(The)22 b(returned)f(v)-5 b(alues)22 b(5)f(and)h(6)f(do)g(not)h(c)n
-(hec)n(k)f(the)h(v)-5 b(alue)22 b(of)f(the)h(Closed)g(attribute)f(in)h
-(the)h(t)n(w)n(o)d(Regions.)340 480 y Fi(\017)45 b Fj(A)29
-b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h(this)g
-(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d(status)j
-(set,)f(or)427 580 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)p
-0 772 3780 12 v 0 904 a Fz(astPcdMap)774 b Fe(Create)37
-b(a)h(PcdMap)774 b Fz(astPcdMap)0 1085 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(PcdMap)g(and)h
-(optionally)e(initialises)i(its)g(attributes.)227 1208
-y(A)35 b(PcdMap)f(is)g(a)h(non-linear)e(Mapping)h(whic)n(h)g
-(transforms)f(2-dimensional)h(p)r(ositions)g(to)g(correct)f(for)h(the)
-227 1307 y(radial)h(distortion)h(in)n(tro)r(duced)g(b)n(y)g(some)f
-(cameras)g(and)h(telescop)r(es.)62 b(This)36 b(can)g(tak)n(e)f(the)i
-(form)f(either)g(of)227 1407 y(pincushion)28 b(or)f(barrel)f
-(distortion,)h(and)g(is)h(c)n(haracterized)d(b)n(y)j(a)f(single)g
-(distortion)g(co)r(e\016cien)n(t.)227 1530 y(A)g(PcdMap)f(is)g(sp)r
-(eci\014ed)h(b)n(y)f(giving)g(this)h(distortion)f(co)r(e\016cien)n(t)g
-(and)g(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227
-1629 y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h
-(of)i(a)f(PcdMap)g(applies)g(the)h(distortion:)227 1752
-y(RD)g(=)g(R)g Fi(\003)f Fj(\()h(1)f(+)g(C)h Fi(\003)f
-Fj(R)h Fi(\003)f Fj(R)h(\))227 1875 y(where)h(R)h(is)g(the)g
-(undistorted)f(radial)g(distance)g(from)h(the)g(distortion)f(cen)n(tre)
-g(\(sp)r(eci\014ed)h(b)n(y)f(attribute)h(Pcd-)227 1974
-y(Cen\),)k(RD)e(is)g(the)g(radial)e(distance)i(from)f(the)i(same)e(cen)
-n(tre)g(in)h(the)g(presence)f(of)h(distortion,)g(and)g(C)g(is)f(the)227
-2074 y(distortion)c(co)r(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g
-(attribute)h(Disco\).)227 2197 y(The)33 b(in)n(v)n(erse)f
-(transformation)f(of)i(a)f(PcdMap)h(remo)n(v)n(es)d(the)k(distortion)e
-(pro)r(duced)h(b)n(y)f(the)h(forw)n(ard)f(trans-)227
-2296 y(formation.)42 b(The)29 b(expression)f(used)i(to)f(deriv)n(e)g(R)
-g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n(erse)g(of)h(the)h
-(expression)227 2396 y(ab)r(o)n(v)n(e,)f(obtained)g(from)g(t)n(w)n(o)g
-(iterations)f(of)h(the)h(Newton-Raphson)f(metho)r(d.)42
-b(The)30 b(mismatc)n(h)f(b)r(et)n(w)n(een)g(the)227 2495
-y(forw)n(ard)d(and)h(in)n(v)n(erse)f(expressions)f(is)i(negligible)g
-(for)f(astrometric)g(applications)g(\(to)i(reac)n(h)e(1)h(milliarcsec)f
-(at)227 2595 y(the)g(edge)g(of)g(the)g(Anglo-Australian)e(T)-7
-b(elescop)r(e)25 b(triplet)h(or)f(a)h(Sc)n(hmidt)g(\014eld)g(w)n(ould)f
-(require)g(\014eld)h(diameters)227 2695 y(of)i(2.4)f(and)g(42)g
-(degrees)f(resp)r(ectiv)n(ely\).)227 2817 y(If)37 b(a)e(PcdMap)h(is)g
-(in)n(v)n(erted)f(\(e.g.)62 b(using)36 b(astIn)n(v)n(ert\))f(then)h
-(the)h(roles)d(of)i(the)h(forw)n(ard)d(and)i(in)n(v)n(erse)f(trans-)227
-2917 y(formations)g(are)f(rev)n(ersed;)k(the)e(forw)n(ard)e
-(transformation)g(will)i(remo)n(v)n(e)e(the)i(distortion,)h(and)e(the)h
-(in)n(v)n(erse)227 3017 y(transformation)26 b(will)i(apply)f(it.)0
-3162 y Fd(Synopsis:)121 b Ft(AstPcdMap)40 b Fi(\003)p
-Ft(astPcdMap\()f(double)i(disco,)g(const)g(double)h(pcdcen[2],)d(const)
-i(char)h Fi(\003)p Ft(options,)227 3262 y(...)86 b(\))0
-3408 y Fd(P)m(arameters:)259 3540 y(disco)427 3640 y
-Fj(The)23 b(distortion)f(co)r(e\016cien)n(t.)35 b(Negativ)n(e)21
-b(v)-5 b(alues)23 b(giv)n(e)e(barrel)h(distortion,)h(p)r(ositiv)n(e)f
-(v)-5 b(alues)22 b(giv)n(e)g(pincush-)427 3740 y(ion)28
-b(distortion,)f(and)g(zero)g(giv)n(es)f(no)h(distortion.)259
-3869 y Fd(p)s(cdcen)427 3968 y Fj(A)h(2-elemen)n(t)f(arra)n(y)e(con)n
-(taining)i(the)h(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)h
-(distortion.)259 4098 y Fd(options)427 4197 y Fj(P)n(oin)n(ter)f(to)h
-(a)g(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4297 y(assignmen)n(ts)d
-(to)h(b)r(e)h(used)f(for)g(initialising)g(the)g(new)h(PcdMap.)35
-b(The)27 b(syn)n(tax)e(used)h(is)g(iden)n(tical)g(to)g(that)427
-4396 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4496 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4625
-y Fd(...)427 4725 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4824 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4924 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5024 y Fj(function\).)0 5182
-y Fd(Returned)32 b(V)-8 b(alue:)259 5315 y(astPcdMap\(\))427
-5414 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(PcdMap.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 293 303
-TeXDict begin 293 302 bop 3643 52 a FF(293)340 351 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)-2 610 y Fd(Status)33 b(Handling)n(:)227
-756 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 855 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-955 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1148 3780
-12 v 0 1279 a Fz(astP)l(ermAxes)1005 1280 y Fe(P)m(erm)m(ute)37
-b(the)h(axis)g(order)g(in)h(a)f(F)-10 b(rame)3005 1279
-y Fz(astP)l(ermAxes)0 1439 y Fd(Description:)44 b Fj(This)28
-b(function)g(p)r(erm)n(utes)g(the)g(order)e(in)i(whic)n(h)f(a)g(F)-7
-b(rame's)27 b(axes)g(o)r(ccur.)0 1585 y Fd(Synopsis:)121
-b Ft(void)42 b(astPermAxes\()c(AstFrame)j Fi(\003)p Ft(this,)g(const)g
-(int)i(perm[])e(\))0 1731 y Fd(P)m(arameters:)259 1865
-y(this)427 1964 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 2094 y Fd(p)s(erm)427 2194 y Fj(An)35 b(arra)n(y)e(with)i
-(one)f(elemen)n(t)h(for)f(eac)n(h)f(axis)h(of)h(the)g(F)-7
-b(rame)34 b(\(Naxes)g(attribute\).)58 b(This)35 b(should)f(list)427
-2293 y(the)28 b(axes)e(in)h(their)g(new)h(order,)e(using)g(the)i
-(original)d(axis)i(n)n(um)n(b)r(ering)f(\(whic)n(h)i(starts)e(at)h(1)g
-(for)f(the)i(\014rst)427 2393 y(axis\).)0 2552 y Fd(Notes:)340
-2831 y Fi(\017)45 b Fj(Only)29 b(gen)n(uine)g(p)r(erm)n(utations)f(of)i
-(the)f(axis)g(order)e(are)i(p)r(ermitted,)h(so)f(eac)n(h)f(axis)g(m)n
-(ust)i(b)r(e)f(referenced)427 2931 y(exactly)e(once)g(in)h(the)g
-Ft(")p Fj(p)r(erm)p Ft(")f Fj(arra)n(y)-7 b(.)340 3060
-y Fi(\017)45 b Fj(If)28 b(successiv)n(e)f(axis)f(p)r(erm)n(utations)h
-(are)g(applied)h(to)f(a)g(F)-7 b(rame,)27 b(then)h(the)g(e\013ects)g
-(are)f(cum)n(ulativ)n(e.)p 0 3253 V 0 3384 a Fz(astP)l(ermMap)647
-b Fe(Create)37 b(a)i(P)m(ermMap)645 b Fz(astP)l(ermMap)0
-3566 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(P)n(ermMap)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-3689 y(A)g(P)n(ermMap)d(is)i(a)g(Mapping)f(whic)n(h)h(p)r(erm)n(utes)g
-(the)g(order)f(of)h(co)r(ordinates,)e(and)i(p)r(ossibly)g(also)f(c)n
-(hanges)f(the)227 3789 y(n)n(um)n(b)r(er)j(of)f(co)r(ordinates,)f(b)r
-(et)n(w)n(een)i(its)g(input)g(and)g(output.)227 3912
-y(In)37 b(addition)f(to)g(p)r(erm)n(uting)h(the)f(co)r(ordinate)g
-(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)f(assign)g(constan)n(t)h(v)-5
-b(alues)36 b(to)227 4012 y(co)r(ordinates.)53 b(This)33
-b(is)g(useful)h(when)g(the)f(n)n(um)n(b)r(er)g(of)h(co)r(ordinates)d
-(is)j(b)r(eing)f(increased)f(as)h(it)h(allo)n(ws)e(\014xed)227
-4111 y(v)-5 b(alues)27 b(to)h(b)r(e)g(assigned)e(to)i(an)n(y)f(new)g
-(ones.)0 4257 y Fd(Synopsis:)121 b Ft(AstPermMap)39 b
-Fi(\003)p Ft(astPermMap\()g(int)j(nin,)g(const)g(int)g(inperm[],)e(int)
-i(nout,)g(const)f(int)i(outperm[],)227 4357 y(double)e(constant[],)e
-(const)j(char)g Fi(\003)p Ft(options,)e(...)86 b(\))0
-4503 y Fd(P)m(arameters:)259 4637 y(nin)427 4736 y Fj(The)28
-b(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-4866 y Fd(inp)s(erm)427 4966 y Fj(An)i(optional)e(arra)n(y)f(with)i
-Ft(")p Fj(nin)p Ft(")g Fj(elemen)n(ts)f(whic)n(h,)i(for)e(eac)n(h)g
-(input)i(co)r(ordinate,)e(should)h(con)n(tain)f(the)427
-5065 y(n)n(um)n(b)r(er)33 b(of)h(the)g(output)g(co)r(ordinate)e(whose)h
-(v)-5 b(alue)33 b(is)h(to)f(b)r(e)h(used)f(\(note)h(that)g(this)f(arra)
-n(y)f(therefore)427 5165 y(de\014nes)c(the)g(in)n(v)n(erse)e(co)r
-(ordinate)g(transformation\).)36 b(Co)r(ordinates)26
-b(are)h(n)n(um)n(b)r(ered)g(starting)g(from)g(1.)427
-5279 y(F)-7 b(or)28 b(details)g(of)g(additional)g(sp)r(ecial)g(v)-5
-b(alues)28 b(that)h(ma)n(y)f(b)r(e)g(used)h(in)f(this)h(arra)n(y)-7
-b(,)26 b(see)i(the)h(description)f(of)427 5379 y(the)g
-Ft(")p Fj(constan)n(t)p Ft(")e Fj(parameter.)427 5494
-y(If)h(a)f(NULL)h(p)r(oin)n(ter)f(is)h(supplied)f(instead)h(of)f(an)g
-(arra)n(y)-7 b(,)25 b(eac)n(h)h(input)h(co)r(ordinate)e(will)i(obtain)f
-(its)h(v)-5 b(alue)427 5593 y(from)26 b(the)h(corresp)r(onding)d
-(output)i(co)r(ordinate)f(\(or)h(will)g(b)r(e)h(assigned)e(the)h(v)-5
-b(alue)26 b(AST)p Ft(__)p Fj(BAD)g(if)h(there)427 5693
-y(is)h(no)f(corresp)r(onding)f(output)i(co)r(ordinate\).)p
-eop end
-%%Page: 294 304
-TeXDict begin 294 303 bop 0 52 a FF(294)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(nout)427
-451 y Fj(The)e(n)n(um)n(b)r(er)f(of)h(output)g(co)r(ordinates.)259
-606 y Fd(outp)s(erm)427 706 y Fj(An)33 b(optional)f(arra)n(y)e(with)j
-Ft(")p Fj(nout)p Ft(")e Fj(elemen)n(ts)i(whic)n(h,)g(for)f(eac)n(h)g
-(output)h(co)r(ordinate,)f(should)g(con)n(tain)427 805
-y(the)c(n)n(um)n(b)r(er)f(of)g(the)h(input)g(co)r(ordinate)e(whose)h(v)
--5 b(alue)27 b(is)g(to)h(b)r(e)f(used)h(\(note)f(that)h(this)g(arra)n
-(y)d(therefore)427 905 y(de\014nes)j(the)g(forw)n(ard)e(co)r(ordinate)g
-(transformation\).)36 b(Co)r(ordinates)26 b(are)g(n)n(um)n(b)r(ered)i
-(starting)f(from)g(1.)427 1033 y(F)-7 b(or)28 b(details)g(of)g
-(additional)g(sp)r(ecial)g(v)-5 b(alues)28 b(that)h(ma)n(y)f(b)r(e)g
-(used)h(in)f(this)h(arra)n(y)-7 b(,)26 b(see)i(the)h(description)f(of)
-427 1132 y(the)g Ft(")p Fj(constan)n(t)p Ft(")e Fj(parameter.)427
-1260 y(If)e(a)f(NULL)h(p)r(oin)n(ter)e(is)i(supplied)f(instead)g(of)g
-(an)g(arra)n(y)-7 b(,)22 b(eac)n(h)h(output)h(co)r(ordinate)e(will)h
-(obtain)g(its)h(v)-5 b(alue)427 1359 y(from)30 b(the)g(corresp)r
-(onding)e(input)j(co)r(ordinate)e(\(or)g(will)i(b)r(e)f(assigned)f(the)
-h(v)-5 b(alue)30 b(AST)p Ft(__)p Fj(BAD)g(if)h(there)427
-1459 y(is)d(no)f(corresp)r(onding)f(input)i(co)r(ordinate\).)259
-1614 y Fd(constan)m(t)427 1714 y Fj(An)19 b(optional)f(arra)n(y)e(con)n
-(taining)h(v)-5 b(alues)18 b(whic)n(h)h(ma)n(y)f(b)r(e)g(assigned)g(to)
-g(input)h(and/or)e(output)i(co)r(ordinates)427 1813 y(instead)i(of)g
-(deriving)g(them)g(from)g(other)g(co)r(ordinate)f(v)-5
-b(alues.)34 b(If)22 b(either)f(of)g(the)h Ft(")p Fj(inp)r(erm)p
-Ft(")e Fj(or)g Ft(")p Fj(outp)r(erm)p Ft(")427 1913 y
-Fj(arra)n(ys)33 b(con)n(tains)h(a)h(negativ)n(e)g(v)-5
-b(alue,)37 b(it)f(is)f(used)g(to)h(address)e(this)h Ft(")p
-Fj(constan)n(t)p Ft(")f Fj(arra)n(y)f(\(suc)n(h)j(that)f(-1)427
-2013 y(addresses)28 b(the)h(\014rst)g(elemen)n(t,)h(-2)e(addresses)f
-(the)j(second)e(elemen)n(t,)i(etc.\))42 b(and)29 b(the)g(v)-5
-b(alue)29 b(obtained)g(is)427 2112 y(used)f(as)f(the)h(corresp)r
-(onding)d(co)r(ordinate)i(v)-5 b(alue.)427 2240 y(Care)29
-b(should)h(b)r(e)h(tak)n(en)f(to)g(ensure)f(that)i(lo)r(cations)e
-(lying)h(outside)g(the)h(exten)n(t)f(of)g(this)h(arra)n(y)c(are)j(not)
-427 2339 y(acciden)n(tally)e(addressed.)39 b(The)28 b(arra)n(y)f(is)h
-(not)h(used)g(if)g(the)g Ft(")p Fj(inp)r(erm)p Ft(")f
-Fj(and)g Ft(")p Fj(outp)r(erm)p Ft(")g Fj(arra)n(ys)e(do)j(not)427
-2439 y(con)n(tain)e(negativ)n(e)g(v)-5 b(alues.)427 2567
-y(If)34 b(a)f(NULL)h(p)r(oin)n(ter)f(is)h(supplied)g(instead)f(of)g(an)
-h(arra)n(y)-7 b(,)33 b(the)g(b)r(eha)n(viour)g(is)g(as)g(if)h(the)g
-(arra)n(y)d(w)n(ere)i(of)427 2666 y(in\014nite)c(length)e(and)h
-(\014lled)g(with)g(the)g(v)-5 b(alue)27 b(AST)p Ft(__)p
-Fj(BAD.)259 2821 y Fd(options)427 2921 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)
-n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3021 y(assignmen)n(ts)21
-b(to)i(b)r(e)g(used)f(for)g(initialising)g(the)h(new)g(P)n(ermMap.)34
-b(The)22 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f(to)g(that)427
-3120 y(for)k(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3220 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3375
-y Fd(...)427 3475 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 3574 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 3674 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 3774 y Fj(function\).)0 3981
-y Fd(Returned)32 b(V)-8 b(alue:)259 4162 y(astP)m(ermMap\(\))427
-4262 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(ermMap.)0
-4468 y Fd(Notes:)340 4796 y Fi(\017)45 b Fj(If)24 b(either)f(of)h(the)f
-Ft(")p Fj(inp)r(erm)p Ft(")g Fj(or)g Ft(")p Fj(outp)r(erm)p
-Ft(")f Fj(arra)n(ys)f(con)n(tains)h(a)h(zero)g(v)-5 b(alue)23
-b(\(or)g(a)f(p)r(ositiv)n(e)h(v)-5 b(alue)24 b(whic)n(h)427
-4895 y(do)r(es)c(not)g(iden)n(tify)h(a)f(v)-5 b(alid)20
-b(output/input)h(co)r(ordinate,)g(as)f(appropriate\),)g(then)h(the)f(v)
--5 b(alue)21 b(AST)p Ft(__)p Fj(BAD)427 4995 y(is)28
-b(assigned)e(as)h(the)h(new)g(co)r(ordinate)e(v)-5 b(alue.)340
-5150 y Fi(\017)45 b Fj(This)29 b(function)g(do)r(es)g(not)g(attempt)g
-(to)g(ensure)f(that)h(the)g(forw)n(ard)e(and)i(in)n(v)n(erse)e
-(transformations)g(p)r(er-)427 5250 y(formed)37 b(b)n(y)g(the)h(P)n
-(ermMap)e(are)g(self-consisten)n(t)h(in)h(an)n(y)e(w)n(a)n(y)-7
-b(.)65 b(Y)-7 b(ou)37 b(are)g(therefore)f(free)h(to)h(supply)427
-5350 y(co)r(ordinate)27 b(p)r(erm)n(utation)g(arra)n(ys)e(that)j(ac)n
-(hiev)n(e)e(whatev)n(er)h(e\013ect)h(is)f(desired.)340
-5505 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5605 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p eop end
-%%Page: 295 305
-TeXDict begin 295 304 bop 3643 52 a FF(295)p 0 351 3780
-12 v 0 483 a Fz(astPic)l(kAxes)247 b Fe(Create)37 b(a)i(new)g(F)-10
-b(rame)38 b(b)m(y)h(pic)m(king)e(axes)1366 598 y(from)g(an)i(existing)e
-(one)3066 483 y Fz(astPic)l(kAxes)0 782 y Fd(Description:)44
-b Fj(This)31 b(function)h(creates)e(a)g(new)i(F)-7 b(rame)30
-b(whose)g(axes)g(are)h(copied)f(from)h(an)g(existing)f(F)-7
-b(rame)31 b(along)227 881 y(with)d(other)f(F)-7 b(rame)26
-b(attributes,)i(suc)n(h)e(as)h(its)g(Title.)37 b(An)n(y)28
-b(n)n(um)n(b)r(er)f(\(zero)f(or)g(more\))h(of)g(the)h(original)d(F)-7
-b(rame's)227 981 y(axes)24 b(ma)n(y)f(b)r(e)i(copied,)g(in)g(an)n(y)e
-(order,)h(and)g(additional)g(axes)f(with)i(default)g(attributes)f(ma)n
-(y)g(also)f(b)r(e)i(included)227 1081 y(in)j(the)g(new)g(F)-7
-b(rame.)227 1204 y(Optionally)g(,)26 b(a)f(Mapping)h(that)g(con)n(v)n
-(erts)e(b)r(et)n(w)n(een)i(the)g(co)r(ordinate)f(systems)g(describ)r
-(ed)h(b)n(y)f(the)h(t)n(w)n(o)f(F)-7 b(rames)227 1304
-y(will)28 b(also)f(b)r(e)h(returned.)0 1451 y Fd(Synopsis:)121
-b Ft(AstFrame)40 b Fi(\003)p Ft(astPickAxes\()e(AstFrame)j
-Fi(\003)p Ft(this,)g(int)h(naxes,)f(const)h(int)g(axes[],)f(AstMapping)
-227 1550 y Fi(\003\003)p Ft(map)h(\))0 1697 y Fd(P)m(arameters:)259
-1831 y(this)427 1931 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(original)e(F)-7
-b(rame.)259 2062 y Fd(naxes)427 2161 y Fj(The)28 b(n)n(um)n(b)r(er)f
-(of)h(axes)e(required)h(in)h(the)g(new)g(F)-7 b(rame.)259
-2292 y Fd(axes)427 2391 y Fj(An)27 b(arra)n(y)-7 b(,)23
-b(with)k Ft(")p Fj(naxes)p Ft(")d Fj(elemen)n(ts,)i(whic)n(h)g(lists)f
-(the)i(axes)d(to)i(b)r(e)g(copied.)36 b(These)26 b(should)f(b)r(e)h
-(giv)n(en)f(in)427 2491 y(the)j(order)e(required)h(in)h(the)g(new)f(F)
--7 b(rame,)27 b(using)g(the)h(axis)f(n)n(um)n(b)r(ering)g(in)h(the)f
-(original)f(F)-7 b(rame)27 b(\(whic)n(h)427 2591 y(starts)g(at)g(1)h
-(for)f(the)h(\014rst)f(axis\).)36 b(Axes)28 b(ma)n(y)e(b)r(e)i
-(selected)g(in)g(an)n(y)e(order,)h(but)h(eac)n(h)f(ma)n(y)g(only)g(b)r
-(e)h(used)427 2690 y(once.)38 b(If)29 b(additional)f(\(default\))h
-(axes)e(are)g(also)h(to)g(b)r(e)g(included,)h(the)g(corresp)r(onding)d
-(elemen)n(ts)i(of)g(this)427 2790 y(arra)n(y)e(should)h(b)r(e)h(set)f
-(to)h(zero.)259 2920 y Fd(map)427 3020 y Fj(Address)22
-b(of)g(a)f(lo)r(cation)h(in)g(whic)n(h)g(to)g(return)f(a)h(p)r(oin)n
-(ter)g(to)f(a)h(new)g(Mapping.)35 b(This)22 b(will)g(b)r(e)g(a)g(P)n
-(ermMap)427 3120 y(\(or)33 b(a)g(UnitMap)h(as)e(a)h(sp)r(ecial)g
-(case\))g(that)g(describ)r(es)g(the)h(axis)e(p)r(erm)n(utation)h(that)h
-(has)e(tak)n(en)h(place)427 3219 y(b)r(et)n(w)n(een)g(the)g(original)f
-(and)g(new)h(F)-7 b(rames.)52 b(The)33 b(Mapping's)g(forw)n(ard)e
-(transformation)g(will)i(con)n(v)n(ert)427 3319 y(co)r(ordinates)26
-b(from)i(the)g(original)e(F)-7 b(rame)27 b(in)n(to)g(the)h(new)g(one,)f
-(and)g(vice)h(v)n(ersa.)427 3434 y(If)g(this)g(Mapping)f(is)h(not)f
-(required,)g(a)g(NULL)h(v)-5 b(alue)28 b(ma)n(y)f(b)r(e)h(supplied)g
-(for)f(this)h(parameter.)0 3593 y Fd(Class)j(Applicabilit)m(y:)259
-3727 y(F)-8 b(rame)427 3827 y Fj(This)27 b(function)h(applies)e(to)h
-(all)g(F)-7 b(rames.)36 b(The)27 b(class)f(of)h(F)-7
-b(rame)26 b(returned)h(ma)n(y)f(di\013er)h(from)g(that)g(of)g(the)427
-3927 y(original)g(F)-7 b(rame,)27 b(dep)r(ending)h(on)g(whic)n(h)g
-(axes)f(are)g(selected.)37 b(F)-7 b(or)28 b(example,)f(if)h(a)g(single)
-f(axis)g(is)h(pic)n(k)n(ed)427 4026 y(from)i(a)g(SkyF)-7
-b(rame)29 b(\(whic)n(h)h(m)n(ust)h(alw)n(a)n(ys)d(ha)n(v)n(e)h(t)n(w)n
-(o)g(axes\))h(then)g(the)h(resulting)e(F)-7 b(rame)30
-b(cannot)f(b)r(e)i(a)427 4126 y(v)-5 b(alid)28 b(SkyF)-7
-b(rame,)27 b(so)g(will)h(rev)n(ert)e(to)h(the)h(paren)n(t)f(class)g
-(\(F)-7 b(rame\))27 b(instead.)259 4256 y Fd(F)-8 b(rameSet)427
-4356 y Fj(Using)19 b(this)g(function)g(on)g(a)f(F)-7
-b(rameSet)19 b(is)f(iden)n(tical)h(to)f(using)h(it)g(on)f(the)i(curren)
-n(t)d(F)-7 b(rame)19 b(in)g(the)g(F)-7 b(rameSet.)427
-4456 y(The)28 b(returned)f(F)-7 b(rame)27 b(will)h(not)g(b)r(e)g(a)f(F)
--7 b(rameSet.)259 4586 y Fd(Region)427 4686 y Fj(If)27
-b(this)f(function)h(is)f(used)g(on)g(a)f(Region,)h(an)g(attempt)g(is)g
-(made)g(to)g(retain)g(the)g(b)r(ounds)g(information)g(on)427
-4785 y(the)g(selected)e(axes.)36 b(If)25 b(succesful,)g(the)h(returned)
-e(F)-7 b(rame)25 b(will)g(b)r(e)g(a)g(Region)f(of)h(some)f(class.)35
-b(Otherwise,)427 4885 y(the)j(returned)g(F)-7 b(rame)37
-b(is)g(obtained)h(b)n(y)f(calling)g(this)h(function)h(on)e(the)h(F)-7
-b(rame)37 b(represen)n(ted)g(b)n(y)g(the)427 4985 y(supplied)c(Region)f
-(\(the)h(returned)g(F)-7 b(rame)32 b(will)h(then)g(not)f(b)r(e)h(a)g
-(Region\).)51 b(In)33 b(order)e(to)i(b)r(e)g(succesful,)427
-5084 y(the)d(selected)f(axes)g(in)g(the)h(Region)f(m)n(ust)g(b)r(e)h
-(indep)r(enden)n(t)g(of)f(the)h(others.)41 b(F)-7 b(or)29
-b(instance,)h(a)f(Bo)n(x)f(can)427 5184 y(b)r(e)i(split)g(in)g(this)g
-(w)n(a)n(y)e(but)i(a)f(Circle)g(cannot.)42 b(Another)30
-b(requiremen)n(t)e(for)h(success)g(is)g(that)h(no)f(default)427
-5284 y(axes)e(are)g(added)g(\(that)h(is,)g(the)g Ft(")p
-Fj(axes)p Ft(")d Fj(arra)n(y)h(m)n(ust)h(not)h(con)n(tain)f(an)n(y)g
-(zero)f(v)-5 b(alues.)0 5443 y Fd(Returned)32 b(V)-8
-b(alue:)259 5577 y(astPic)m(kAxes\(\))427 5677 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(F)-7 b(rame.)p eop
-end
-%%Page: 296 306
-TeXDict begin 296 305 bop 0 52 a FF(296)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-659 y Fi(\017)45 b Fj(The)32 b(new)f(F)-7 b(rame)31 b(will)g(con)n
-(tain)g(a)g Ft(")p Fj(deep)p Ft(")f Fj(cop)n(y)h(\(c.f.)48
-b(astCop)n(y\))30 b(of)i(all)f(the)g(data)g(selected)g(from)g(the)427
-758 y(original)26 b(F)-7 b(rame.)37 b(Mo)r(difying)27
-b(an)n(y)g(asp)r(ect)g(of)h(the)g(new)g(F)-7 b(rame)27
-b(will)g(therefore)g(not)h(a\013ect)f(the)h(original)427
-858 y(one.)340 1003 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1103 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 1327 3780 12 v 0 1458
-a Fz(astPlot)1126 b Fe(Create)37 b(a)i(Plot)1123 b Fz(astPlot)0
-1649 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(Plot)g(and)h(optionally)f(initialises)g(its)h(attributes.)227
-1786 y(A)20 b(Plot)e(is)h(a)g(sp)r(ecialised)g(form)g(of)g(F)-7
-b(rameSet,)20 b(in)g(whic)n(h)f(the)h(base)e(F)-7 b(rame)19
-b(describ)r(es)f(a)h Ft(")p Fj(graphical)p Ft(")e Fj(co)r(ordinate)227
-1885 y(system)27 b(and)g(is)h(asso)r(ciated)d(with)j(a)f(rectangular)e
-(plotting)j(area)d(in)j(the)g(underlying)e(graphics)g(system.)37
-b(This)227 1985 y(plotting)28 b(area)e(is)i(where)f(graphical)f(output)
-i(app)r(ears.)35 b(It)28 b(is)g(de\014ned)g(when)g(the)g(Plot)f(is)g
-(created.)227 2122 y(The)36 b(curren)n(t)e(F)-7 b(rame)35
-b(of)h(a)f(Plot)g(describ)r(es)g(a)g Ft(")p Fj(ph)n(ysical)p
-Ft(")f Fj(co)r(ordinate)g(system,)j(whic)n(h)f(is)f(the)h(co)r
-(ordinate)227 2222 y(system)41 b(in)h(whic)n(h)f(plotting)h(op)r
-(erations)e(are)g(sp)r(eci\014ed.)79 b(The)41 b(results)g(of)g(eac)n(h)
-g(plotting)g(op)r(eration)g(are)227 2321 y(automatically)26
-b(transformed)f(in)n(to)i(graphical)e(co)r(ordinates)g(so)h(as)g(to)h
-(app)r(ear)e(in)i(the)g(plotting)g(area)e(\(sub)5 b(ject)227
-2421 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n(y)f(b)r(e)h(in)f
-(e\013ect\).)227 2558 y(Because)d(the)h(Mapping)f(b)r(et)n(w)n(een)g
-(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(ma)n(y)h(often)h(b)r
-(e)g(non-linear,)e(or)h(ev)n(en)227 2657 y(discon)n(tin)n(uous,)i(most)
-h(plotting)f(do)r(es)h(not)g(result)f(in)h(simple)g(straigh)n(t)f
-(lines.)36 b(The)27 b(basic)f(plotting)h(elemen)n(t)g(is)227
-2757 y(therefore)32 b(not)g(a)h(straigh)n(t)e(line,)j(but)f(a)f(geo)r
-(desic)g(curv)n(e)f(\(see)i(astCurv)n(e\).)50 b(A)33
-b(Plot)f(also)f(pro)n(vides)h(facilities)227 2857 y(for)40
-b(dra)n(wing)g(mark)n(ers)e(or)i(sym)n(b)r(ols)g(\(astMark\),)j(text)e
-(\(astT)-7 b(ext\))41 b(and)f(grid)g(lines)h(\(astGridLine\).)76
-b(It)41 b(is)227 2956 y(also)32 b(p)r(ossible)h(to)f(dra)n(w)g
-(curvilinear)g(axes)g(with)h(optional)f(co)r(ordinate)g(grids)g
-(\(astGrid\).)53 b(A)33 b(range)e(of)i(Plot)227 3056
-y(attributes)f(is)g(a)n(v)-5 b(ailable)31 b(to)h(allo)n(w)f(precise)g
-(con)n(trol)g(o)n(v)n(er)f(the)i(app)r(earance)f(of)h(graphical)e
-(output)j(pro)r(duced)227 3156 y(b)n(y)28 b(these)f(functions.)227
-3293 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 3392 y(co)r(ordinate)33
-b(system)h(itself)6 b(\))35 b(b)n(y)f(selecting)g(di\013eren)n(t)g(F)-7
-b(rames)33 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)34 b(of)g(a)g(Plot,)h
-(using)e(its)227 3492 y(Curren)n(t)d(attribute.)47 b(Y)-7
-b(ou)31 b(ma)n(y)f(also)g(set)h(up)g(clipping)g(\(see)f(astClip\))h(to)
-g(limit)h(the)f(exten)n(t)g(of)g(an)n(y)f(plotting)227
-3591 y(y)n(ou)c(p)r(erform,)h(and)f(this)h(ma)n(y)f(b)r(e)h(done)f(in)h
-(an)n(y)f(of)h(the)g(co)r(ordinate)e(systems)i(asso)r(ciated)e(with)i
-(the)g(Plot,)g(not)227 3691 y(necessarily)f(the)i(one)f(y)n(ou)g(are)g
-(plotting)g(in.)227 3828 y(Lik)n(e)k(an)n(y)f(F)-7 b(rameSet,)32
-b(a)f(Plot)g(ma)n(y)f(also)g(b)r(e)i(used)f(as)g(a)f(F)-7
-b(rame.)47 b(In)32 b(this)f(case,)h(it)f(b)r(eha)n(v)n(es)f(lik)n(e)h
-(its)g(curren)n(t)227 3928 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)
-f(the)h(ph)n(ysical)f(co)r(ordinate)f(system.)227 4065
-y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f(Plot)g(describ)r(es)f(the)i
-(in)n(ter-relation)e(b)r(et)n(w)n(een)h(graphical)e(co)r(ordinates)h
-(\(its)227 4164 y(base)k(F)-7 b(rame\))38 b(and)f(ph)n(ysical)g(co)r
-(ordinates)g(\(its)h(curren)n(t)f(F)-7 b(rame\).)67 b(It)38
-b(di\013ers)f(from)h(a)f(normal)g(F)-7 b(rameSet,)227
-4264 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i(to)f
-(transform)f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f(areas)f
-(of)h(the)g(Plot)g(will)g(result)227 4363 y(in)e(bad)g(co)r(ordinate)e
-(v)-5 b(alues)27 b(\(AST)p Ft(__)p Fj(BAD\).)0 4538 y
-Fd(Synopsis:)121 b Ft(AstPlot)41 b Fi(\003)p Ft(astPlot\()e(AstFrame)i
-Fi(\003)p Ft(frame,)f(const)i(float)f(graphbox[)f(4)j(],)g(const)f
-(double)f(basebox[)227 4637 y(4)i(],)g(const)f(char)g
-Fi(\003)p Ft(options,)d(...)86 b(\))0 4812 y Fd(P)m(arameters:)259
-4973 y(frame)427 5072 y Fj(P)n(oin)n(ter)33 b(to)h(a)g(F)-7
-b(rame)34 b(describing)g(the)h(ph)n(ysical)e(co)r(ordinate)g(system)i
-(in)f(whic)n(h)h(to)f(plot.)57 b(A)35 b(p)r(oin)n(ter)427
-5172 y(to)29 b(a)g(F)-7 b(rameSet)29 b(ma)n(y)f(also)g(b)r(e)h(giv)n
-(en,)g(in)g(whic)n(h)g(case)f(its)i(curren)n(t)e(F)-7
-b(rame)28 b(will)i(b)r(e)f(used)g(to)g(de\014ne)g(the)427
-5272 y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)f(F)-7
-b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)r
-(ordinates)427 5371 y(\(see)e(b)r(elo)n(w\).)427 5494
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fj(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(2-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 5593 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 5693 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)p
-eop end
-%%Page: 297 307
-TeXDict begin 297 306 bop 3643 52 a FF(297)259 351 y
-Fd(graph)m(b)s(o)m(x)427 451 y Fj(An)32 b(arra)n(y)c(giving)i(the)h(p)r
-(osition)g(and)g(exten)n(t)g(of)g(the)g(plotting)g(area)e(\(on)i(the)g
-(plotting)g(surface)f(of)h(the)427 551 y(underlying)e(graphics)f
-(system\))i(in)g(whic)n(h)f(graphical)f(output)i(is)g(to)f(app)r(ear.)
-42 b(This)30 b(m)n(ust)f(b)r(e)h(sp)r(eci\014ed)427 650
-y(using)e(graphical)e(co)r(ordinates)g(appropriate)g(to)h(the)h
-(underlying)f(graphics)f(system.)427 768 y(The)k(\014rst)f(pair)f(of)h
-(v)-5 b(alues)29 b(should)g(giv)n(e)f(the)i(co)r(ordinates)e(of)h(the)h
-(b)r(ottom)f(left)h(corner)e(of)h(the)h(plotting)427
-868 y(area)25 b(and)i(the)g(second)f(pair)g(should)h(giv)n(e)e(the)i
-(co)r(ordinates)f(of)g(the)h(top)g(righ)n(t)f(corner.)35
-b(The)27 b(co)r(ordinate)427 968 y(on)41 b(the)g(horizon)n(tal)e(axis)h
-(should)g(b)r(e)i(giv)n(en)d(\014rst)i(in)g(eac)n(h)f(pair.)75
-b(Note)41 b(that)g(the)g(order)f(in)h(whic)n(h)427 1067
-y(these)26 b(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h(imp)r(ortan)n(t)g(b)r
-(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)h(and)f(righ)n(t)f
-(for)h(subsequen)n(t)427 1167 y(graphical)g(op)r(erations.)259
-1303 y Fd(baseb)s(o)m(x)427 1403 y Fj(An)h(arra)n(y)d(giving)i(the)h
-(co)r(ordinates)e(of)i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g
-(F)-7 b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26
-b(if)427 1503 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)
-g(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 1602 y(plotting)25 b(area,)g(as)f(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)35 b(This)25 b(range)f(of)h(co)r
-(ordinates)e(will)i(b)r(e)h(mapp)r(ed)f(linearly)g(on)f(to)h(the)427
-1702 y(plotting)j(area.)35 b(The)28 b(co)r(ordinates)e(should)i(b)r(e)g
-(giv)n(en)e(in)i(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-1839 y Fd(options)427 1938 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 2038 y(assignmen)n(ts)f
-(to)g(b)r(e)i(used)e(for)h(initialising)f(the)h(new)g(Plot.)37
-b(The)28 b(syn)n(tax)e(used)i(is)g(iden)n(tical)f(to)h(that)g(for)427
-2137 y(the)i(astSet)f(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)f(sp)r(eci\014ers)h(iden)n
-(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")f Fj(sym)n(b)r(ols)g(in)427
-2237 y(the)g(normal)f(w)n(a)n(y)-7 b(.)36 b(If)28 b(no)f
-(initialisation)g(is)h(required,)e(a)h(zero-length)g(string)f(ma)n(y)h
-(b)r(e)h(supplied.)259 2374 y Fd(...)427 2473 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 2573 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 2673 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 2772 y Fj(function\).)0
-2942 y Fd(Returned)32 b(V)-8 b(alue:)259 3086 y(astPlot\(\))427
-3185 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Plot.)0
-3355 y Fd(Notes:)340 3645 y Fi(\017)45 b Fj(The)24 b(base)f(F)-7
-b(rame)24 b(of)g(the)g(returned)f(Plot)h(will)g(b)r(e)g(a)g(new)f(F)-7
-b(rame)24 b(whic)n(h)g(is)f(created)h(b)n(y)f(this)h(function)h(to)427
-3745 y(represen)n(t)32 b(the)h(co)r(ordinate)f(system)g(of)h(the)g
-(underlying)f(graphics)g(system)g(\(graphical)g(co)r(ordinates\).)427
-3844 y(It)h(is)g(giv)n(en)f(a)g(F)-7 b(rame)33 b(index)g(of)f(1)h
-(within)g(the)g(Plot.)52 b(The)33 b(c)n(hoice)f(of)h(base)f(F)-7
-b(rame)32 b(\(Base)g(attribute\))427 3944 y(should)26
-b(not,)g(in)g(general,)f(b)r(e)h(c)n(hanged)e(once)h(a)h(Plot)f(has)g
-(b)r(een)h(created)f(\(although)g(y)n(ou)g(could)h(use)f(this)427
-4043 y(as)i(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)f(area)g
-(around)f(on)h(the)h(plotting)g(surface\).)340 4180 y
-Fi(\017)45 b Fj(If)32 b(a)f(F)-7 b(rame)31 b(is)g(supplied)h(\(via)f
-(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)i(then)g(it)g(b)r
-(ecomes)f(the)h(curren)n(t)e(F)-7 b(rame)31 b(of)g(the)427
-4280 y(new)d(Plot)f(and)g(is)h(giv)n(en)f(a)g(F)-7 b(rame)27
-b(index)h(of)f(2.)340 4416 y Fi(\017)45 b Fj(If)31 b(a)e(F)-7
-b(rameSet)30 b(is)f(supplied)i(\(via)e(the)h Ft(")p Fj(frame)p
-Ft(")f Fj(p)r(oin)n(ter\),)h(then)h(all)e(the)i(F)-7
-b(rames)29 b(within)h(this)g(F)-7 b(rame-)427 4516 y(Set)34
-b(b)r(ecome)g(part)f(of)h(the)g(new)g(Plot)f(\(where)h(their)g(F)-7
-b(rame)33 b(indices)h(are)f(increased)f(b)n(y)i(1\),)h(with)f(the)427
-4616 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)27
-b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g(Plot.)
-340 4752 y Fi(\017)45 b Fj(If)19 b(a)f(n)n(ull)h(Ob)5
-b(ject)18 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))h(is)f(supplied)h
-(\(via)f(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)j(then)f
-(the)g(returned)427 4852 y(Plot)32 b(will)g(con)n(tain)f(t)n(w)n(o)g(F)
--7 b(rames,)33 b(b)r(oth)f(created)f(b)n(y)h(this)g(function.)51
-b(The)32 b(base)f(F)-7 b(rame)32 b(will)g(describ)r(e)427
-4951 y(graphics)18 b(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h
-(the)g(curren)n(t)f(F)-7 b(rame)19 b(will)g(b)r(e)g(a)g(basic)f(F)-7
-b(rame)19 b(with)g(no)g(attributes)427 5051 y(set)29
-b(\(this)f(will)h(therefore)e(giv)n(e)h(default)g(v)-5
-b(alues)28 b(for)g(suc)n(h)g(things)g(as)g(the)h(Plot)e(Title)i(and)f
-(the)h(Lab)r(el)f(on)427 5151 y(eac)n(h)f(axis\).)36
-b(Ph)n(ysical)27 b(co)r(ordinates)f(will)i(b)r(e)g(mapp)r(ed)f
-(linearly)g(on)h(to)f(graphical)f(co)r(ordinates.)340
-5287 y Fi(\017)45 b Fj(An)29 b(error)e(will)h(result)g(if)h(the)g(F)-7
-b(rame)28 b(supplied)h(\(or)f(the)g(base)g(F)-7 b(rame)28
-b(if)h(a)f(F)-7 b(rameSet)28 b(w)n(as)g(supplied\))h(is)427
-5387 y(not)f(2-dimensional.)340 5524 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 5623 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 298 308
-TeXDict begin 298 307 bop 0 52 a FF(298)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astPlot3D)882 b Fe(Create)38 b(a)g(Plot3D)879
-b Fz(astPlot3D)0 633 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Plot3D)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 754 y(A)g(Plot3D)f(is)h(a)f(sp)r
-(ecialised)g(form)g(of)h(Plot)f(that)h(pro)n(vides)e(facilities)h(for)h
-(pro)r(ducing)f(3D)g(graphical)f(output.)0 896 y Fd(Synopsis:)121
-b Ft(AstPlot3D)40 b Fi(\003)p Ft(astPlot3D\()f(AstFrame)h
-Fi(\003)p Ft(frame,)h(const)g(float)h(graphbox[)d(6)44
-b(],)e(const)g(double)227 996 y(basebox[)f(6)i(],)f(const)g(char)g
-Fi(\003)p Ft(options,)e(...)86 b(\))0 1137 y Fd(P)m(arameters:)259
-1266 y(frame)427 1366 y Fj(P)n(oin)n(ter)33 b(to)h(a)g(F)-7
-b(rame)34 b(describing)g(the)h(ph)n(ysical)e(co)r(ordinate)g(system)i
-(in)f(whic)n(h)h(to)f(plot.)57 b(A)35 b(p)r(oin)n(ter)427
-1465 y(to)29 b(a)g(F)-7 b(rameSet)29 b(ma)n(y)f(also)g(b)r(e)h(giv)n
-(en,)g(in)g(whic)n(h)g(case)f(its)i(curren)n(t)e(F)-7
-b(rame)28 b(will)i(b)r(e)f(used)g(to)g(de\014ne)g(the)427
-1565 y(ph)n(ysical)i(co)r(ordinate)g(system)h(and)g(its)g(base)f(F)-7
-b(rame)31 b(will)i(b)r(e)f(mapp)r(ed)g(on)g(to)g(graphical)e(co)r
-(ordinates)427 1665 y(\(see)e(b)r(elo)n(w\).)427 1777
-y(If)h(a)g(n)n(ull)f(Ob)5 b(ject)29 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fj(NULL\))h(is)g(giv)n(en,)f(a)g(default)h(3-dimensional)f(F)-7
-b(rame)28 b(will)h(b)r(e)g(used)427 1877 y(to)35 b(describ)r(e)f(the)h
-(ph)n(ysical)f(co)r(ordinate)f(system.)58 b(Lab)r(els,)36
-b(etc.)58 b(ma)n(y)34 b(then)h(b)r(e)g(attac)n(hed)f(to)h(this)g(b)n(y)
-427 1976 y(setting)28 b(the)g(appropriate)e(F)-7 b(rame)27
-b(attributes)g(\(e.g.)37 b(Lab)r(el\(axis\)\))27 b(for)h(the)g(Plot.)
-259 2102 y Fd(graph)m(b)s(o)m(x)427 2201 y Fj(An)35 b(arra)n(y)e
-(giving)h(the)h(p)r(osition)f(and)h(exten)n(t)f(of)h(the)g(plotting)g
-(v)n(olume)f(\(within)i(the)f(plotting)f(space)427 2301
-y(of)i(the)g(underlying)f(graphics)f(system\))h(in)h(whic)n(h)g
-(graphical)d(output)k(is)e(to)g(app)r(ear.)60 b(This)36
-b(m)n(ust)f(b)r(e)427 2400 y(sp)r(eci\014ed)28 b(using)f(graphical)f
-(co)r(ordinates)h(appropriate)e(to)j(the)g(underlying)f(graphics)f
-(system.)427 2513 y(The)g(\014rst)g(triple)g(of)g(v)-5
-b(alues)26 b(should)g(giv)n(e)f(the)h(co)r(ordinates)f(of)h(the)g(b)r
-(ottom)h(left)g(corner)d(of)i(the)h(plotting)427 2613
-y(v)n(olume)i(and)g(the)h(second)e(triple)i(should)f(giv)n(e)f(the)i
-(co)r(ordinates)e(of)h(the)g(top)h(righ)n(t)e(corner.)41
-b(The)29 b(co)r(or-)427 2712 y(dinate)e(on)f(the)h(horizon)n(tal)e
-(axis)h(should)g(b)r(e)h(giv)n(en)f(\014rst)g(in)h(eac)n(h)f(pair.)35
-b(Note)27 b(that)g(the)g(order)e(in)i(whic)n(h)427 2812
-y(these)f(p)r(oin)n(ts)h(are)e(giv)n(en)g(is)h(imp)r(ortan)n(t)g(b)r
-(ecause)g(it)g(de\014nes)g(up,)h(do)n(wn,)f(left)h(and)f(righ)n(t)f
-(for)h(subsequen)n(t)427 2911 y(graphical)g(op)r(erations.)259
-3037 y Fd(baseb)s(o)m(x)427 3136 y Fj(An)h(arra)n(y)d(giving)i(the)h
-(co)r(ordinates)e(of)i(t)n(w)n(o)e(p)r(oin)n(ts)i(in)g(the)g(supplied)g
-(F)-7 b(rame)26 b(\(or)f(in)i(the)g(base)f(F)-7 b(rame)26
-b(if)427 3236 y(a)k(F)-7 b(rameSet)31 b(w)n(as)e(supplied\))i(whic)n(h)
-g(corresp)r(ond)d(to)j(the)g(b)r(ottom)f(left)i(and)e(top)g(righ)n(t)g
-(corners)f(of)h(the)427 3335 y(plotting)e(v)n(olume,)f(as)g(sp)r
-(eci\014ed)h(ab)r(o)n(v)n(e.)36 b(This)27 b(range)g(of)g(co)r
-(ordinates)g(will)g(b)r(e)i(mapp)r(ed)f(linearly)e(on)i(to)427
-3435 y(the)g(plotting)g(area.)35 b(The)28 b(co)r(ordinates)e(should)h
-(b)r(e)h(giv)n(en)f(in)h(the)g(same)f(order)f(as)h(ab)r(o)n(v)n(e.)259
-3560 y Fd(options)427 3660 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3760 y(assignmen)n(ts)h
-(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(Plot3D.)f(The)h
-(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-3859 y(for)d(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3959 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 4084 y Fd(...)427 4184 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 4283 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 4383 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4483 y Fj(function\).)0
-4637 y Fd(Returned)32 b(V)-8 b(alue:)259 4766 y(astPlot3D\(\))427
-4865 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Plot3D.)0
-5020 y Fd(Notes:)340 5295 y Fi(\017)45 b Fj(The)24 b(base)f(F)-7
-b(rame)23 b(of)g(the)h(returned)f(Plot3D)g(will)g(b)r(e)h(a)f(new)h(F)
--7 b(rame)23 b(whic)n(h)g(is)g(created)g(b)n(y)g(this)h(function)427
-5394 y(to)f(represen)n(t)f(the)i(co)r(ordinate)e(system)g(of)h(the)h
-(underlying)e(graphics)g(system)h(\(graphical)f(co)r(ordinates\).)427
-5494 y(It)28 b(is)g(giv)n(en)f(a)g(F)-7 b(rame)28 b(index)f(of)h(1)f
-(within)i(the)f(Plot3D.)f(The)h(c)n(hoice)f(of)h(base)f(F)-7
-b(rame)27 b(\(Base)g(attribute\))427 5593 y(should)i(not,)h(in)g
-(general,)e(b)r(e)i(c)n(hanged)e(once)h(a)g(Plot3D)g(has)g(b)r(een)h
-(created)e(\(although)h(y)n(ou)g(could)g(use)427 5693
-y(this)f(as)f(a)g(w)n(a)n(y)g(of)g(mo)n(ving)g(the)h(plotting)f(area)f
-(around)h(on)g(the)h(plotting)g(surface\).)p eop end
-%%Page: 299 309
-TeXDict begin 299 308 bop 3643 52 a FF(299)340 351 y
-Fi(\017)45 b Fj(If)32 b(a)f(F)-7 b(rame)31 b(is)g(supplied)h(\(via)f
-(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)i(then)g(it)g(b)r
-(ecomes)f(the)h(curren)n(t)e(F)-7 b(rame)31 b(of)g(the)427
-451 y(new)d(Plot3D)f(and)g(is)h(giv)n(en)f(a)g(F)-7 b(rame)27
-b(index)h(of)f(2.)340 583 y Fi(\017)45 b Fj(If)25 b(a)e(F)-7
-b(rameSet)24 b(is)g(supplied)g(\(via)g(the)h Ft(")p Fj(frame)p
-Ft(")d Fj(p)r(oin)n(ter\),)j(then)f(all)g(the)h(F)-7
-b(rames)23 b(within)i(this)f(F)-7 b(rameSet)427 682 y(b)r(ecome)37
-b(part)f(of)h(the)g(new)g(Plot3D)f(\(where)g(their)h(F)-7
-b(rame)36 b(indices)g(are)g(increased)g(b)n(y)g(1\),)j(with)e(the)427
-782 y(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)27
-b(b)r(ecoming)h(the)g(curren)n(t)e(F)-7 b(rame)27 b(of)h(the)g(Plot3D.)
-340 914 y Fi(\017)45 b Fj(If)19 b(a)f(n)n(ull)h(Ob)5
-b(ject)18 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))h(is)f(supplied)h
-(\(via)f(the)h Ft(")p Fj(frame)p Ft(")e Fj(p)r(oin)n(ter\),)j(then)f
-(the)g(returned)427 1014 y(Plot3D)25 b(will)g(con)n(tain)f(t)n(w)n(o)h
-(F)-7 b(rames,)24 b(b)r(oth)i(created)e(b)n(y)h(this)g(function.)37
-b(The)25 b(base)f(F)-7 b(rame)25 b(will)g(describ)r(e)427
-1113 y(graphics)18 b(co)r(ordinates)f(\(as)i(ab)r(o)n(v)n(e\))f(and)h
-(the)g(curren)n(t)f(F)-7 b(rame)19 b(will)g(b)r(e)g(a)g(basic)f(F)-7
-b(rame)19 b(with)g(no)g(attributes)427 1213 y(set)29
-b(\(this)h(will)f(therefore)f(giv)n(e)g(default)i(v)-5
-b(alues)28 b(for)h(suc)n(h)f(things)h(as)g(the)g(Plot3D)f(Title)i(and)e
-(the)i(Lab)r(el)427 1313 y(on)e(eac)n(h)e(axis\).)37
-b(Ph)n(ysical)26 b(co)r(ordinates)g(will)i(b)r(e)g(mapp)r(ed)g
-(linearly)f(on)g(to)g(graphical)f(co)r(ordinates.)340
-1444 y Fi(\017)45 b Fj(An)29 b(error)e(will)h(result)g(if)h(the)g(F)-7
-b(rame)28 b(supplied)h(\(or)f(the)g(base)g(F)-7 b(rame)28
-b(if)h(a)f(F)-7 b(rameSet)28 b(w)n(as)g(supplied\))h(is)427
-1544 y(not)f(3-dimensional.)340 1676 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1776 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1973 3780 12 v 0 2105 a Fz(astP)l(oin)l(tList)1416
-2104 y Fe(Create)38 b(a)g(P)m(oin)m(tList)3069 2105 y
-Fz(astP)l(oin)l(tList)0 2269 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(P)n(oin)n(tList)g(ob)5
-b(ject)27 b(and)h(optionally)e(initialises)i(its)g(attributes.)227
-2393 y(A)39 b(P)n(oin)n(tList)f(ob)5 b(ject)39 b(is)f(a)g(sp)r
-(ecialised)h(t)n(yp)r(e)g(of)f(Region)g(whic)n(h)h(represen)n(ts)e(a)i
-(collection)f(of)g(p)r(oin)n(ts)h(in)g(a)227 2492 y(co)r(ordinate)27
-b(F)-7 b(rame.)0 2641 y Fd(Synopsis:)121 b Ft(AstPointList)38
-b Fi(\003)p Ft(astPointList\()g(AstFrame)i Fi(\003)p
-Ft(frame,)h(int)h(npnt,)g(int)g(ncoord,)f(int)h(dim,)g(const)227
-2741 y(double)f Fi(\003)p Ft(points,)g(AstRegion)e Fi(\003)p
-Ft(unc,)j(const)f(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2889 y Fd(P)m(arameters:)259 3025 y(frame)427
-3124 y Fj(A)29 b(p)r(oin)n(ter)g(to)f(the)i(F)-7 b(rame)28
-b(in)h(whic)n(h)g(the)g(region)e(is)i(de\014ned.)41 b(A)29
-b(deep)g(cop)n(y)f(is)g(tak)n(en)g(of)h(the)g(supplied)427
-3224 y(F)-7 b(rame.)71 b(This)39 b(means)f(that)h(an)n(y)g(subsequen)n
-(t)f(c)n(hanges)g(made)h(to)f(the)i(F)-7 b(rame)38 b(using)h(the)g
-(supplied)427 3323 y(p)r(oin)n(ter)27 b(will)h(ha)n(v)n(e)f(no)g
-(e\013ect)h(the)g(Region.)259 3455 y Fd(npn)m(t)427 3555
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(in)h(the)g(Region.)259
-3687 y Fd(nco)s(ord)427 3787 y Fj(The)34 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)g(for)f(eac)n(h)h(p)r(oin)n(t.)56
-b(This)34 b(m)n(ust)g(equal)g(the)g(n)n(um)n(b)r(er)g(of)427
-3886 y(axes)27 b(in)h(the)g(supplied)g(F)-7 b(rame,)27
-b(giv)n(en)g(b)n(y)g(its)h(Naxes)f(attribute.)259 4018
-y Fd(dim)427 4118 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g
-(along)f(the)i(second)f(dimension)g(of)g(the)h Ft(")p
-Fj(p)r(oin)n(ts)p Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(con)n(tains)427
-4217 y(the)c(p)r(oin)n(t)f(co)r(ordinates\).)38 b(This)29
-b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)h(the)f(co)r(ordinate)g(v)
--5 b(alues)27 b(can)h(b)r(e)h(correctly)427 4317 y(lo)r(cated)c(if)h
-(they)g(do)f(not)g(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)34 b(The)25 b(v)-5 b(alue)25 b(giv)n(en)g(should)g(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(npn)n(t)p Ft(")p Fj(.)259 4449
-y Fd(p)s(oin)m(ts)427 4549 y Fj(The)h(address)f(of)i(the)f(\014rst)g
-(elemen)n(t)g(of)g(a)g(2-dimensional)f(arra)n(y)f(of)i(shap)r(e)g
-Ft(")p Fj([nco)r(ord][dim])p Ft(")f Fj(giving)g(the)427
-4648 y(ph)n(ysical)i(co)r(ordinates)g(of)h(the)g(p)r(oin)n(ts.)38
-b(These)28 b(should)g(b)r(e)g(stored)g(suc)n(h)f(that)i(the)f(v)-5
-b(alue)28 b(of)g(co)r(ordinate)427 4748 y(n)n(um)n(b)r(er)g
-Ft(")p Fj(co)r(ord)p Ft(")d Fj(for)i(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-Ft(")p Fj(pn)n(t)p Ft(")f Fj(is)g(found)h(in)g(elemen)n(t)g
-Ft(")p Fj(in[co)r(ord][pn)n(t])p Ft(")p Fj(.)259 4880
-y Fd(unc)427 4979 y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)g
-(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n
-(ties)e(asso)r(ciated)g(with)427 5079 y(eac)n(h)36 b(p)r(oin)n(t)g(in)h
-(the)f(P)n(oin)n(tList)f(b)r(eing)i(created.)62 b(The)36
-b(uncertain)n(t)n(y)g(at)g(an)n(y)f(p)r(oin)n(t)i(in)f(the)h(P)n(oin)n
-(tList)427 5179 y(is)i(found)g(b)n(y)g(shifting)h(the)f(supplied)g
-Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e Fj(Region)i(so)f(that)h(it)h(is)f
-(cen)n(tred)f(at)h(the)g(p)r(oin)n(t)427 5278 y(b)r(eing)c(considered.)
-57 b(The)35 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h(shifted)g(uncertain)
-n(t)n(y)f(Region)g(then)h(represen)n(ts)e(the)427 5378
-y(uncertain)n(t)n(y)27 b(in)h(the)g(p)r(osition.)37 b(The)27
-b(uncertain)n(t)n(y)g(is)g(assumed)g(to)h(b)r(e)g(the)g(same)f(for)g
-(all)g(p)r(oin)n(ts.)427 5494 y(If)38 b(supplied,)j(the)d(uncertain)n
-(t)n(y)f(Region)g(m)n(ust)g(b)r(e)i(of)e(a)g(class)g(for)g(whic)n(h)h
-(all)f(instances)g(are)g(cen)n(tro-)427 5593 y(symetric)24
-b(\(e.g.)35 b(Bo)n(x,)24 b(Circle,)g(Ellipse,)h(etc.\))36
-b(or)23 b(b)r(e)i(a)e(Prism)h(con)n(taining)f(cen)n(tro-symetric)f
-(comp)r(onen)n(t)427 5693 y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g
-(the)h(supplied)g(Region)f(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n
-(t)g(c)n(hanges)f(to)h(the)p eop end
-%%Page: 300 310
-TeXDict begin 300 309 bop 0 52 a FF(300)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(uncertain)n(t)n(y)e
-(Region)f(using)h(the)h(supplied)f(p)r(oin)n(ter)g(will)h(ha)n(v)n(e)e
-(no)h(e\013ect)h(on)f(the)g(created)g(Bo)n(x.)38 b(Alter-)427
-451 y(nativ)n(ely)-7 b(,)24 b(a)g(NULL)g(Ob)5 b(ject)24
-b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g(supplied,)h(in)f(whic)n(h)g(case)f
-(a)g(default)i(uncertain)n(t)n(y)e(is)h(used)427 551
-y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g(1.0E-6)f(of)h(the)h
-(size)g(of)f(the)h(b)r(ounding)g(b)r(o)n(x)f(of)h(the)g(P)n(oin)n
-(tList)e(b)r(eing)i(created.)427 669 y(The)23 b(uncertain)n(t)n(y)f
-(Region)g(has)g(t)n(w)n(o)g(uses:)34 b(1\))22 b(when)h(the)g(astOv)n
-(erlap)d(function)k(compares)d(t)n(w)n(o)h(Regions)427
-769 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f(Region)g(is)g(used)
-h(to)g(determine)f(the)i(tolerance)d(on)i(the)g(comparison,)f(and)427
-869 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r(ed)g(in)n(to)f(a)g
-(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f(subsequen)n(tly)g
-(simpli\014ed)427 968 y(\(using)c(astSimplify\),)h(the)f(uncertain)n
-(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g(transformed)f(b)r
-(oundary)g(can)427 1068 y(b)r(e)j(accurately)e(represen)n(ted)h(b)n(y)g
-(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)259 1206
-y Fd(options)427 1306 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 1405 y(assignmen)n(ts)23 b(to)h(b)r(e)g(used)g(for)g
-(initialising)g(the)g(new)g(P)n(oin)n(tList.)35 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)427
-1505 y(for)i(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1605 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1743
-y Fd(...)427 1842 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1942 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2042 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2141 y Fj(function\).)0 2314
-y Fd(Returned)32 b(V)-8 b(alue:)259 2461 y(astP)m(oin)m(tList\(\))427
-2560 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(oin)n(tList.)0
-2733 y Fd(Notes:)340 3026 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 3125 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 3298 y Fd(Status)33
-b(Handling)n(:)227 3444 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3544 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3643 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3853 3780 12 v 0 3985 a Fz(astP)l(olyCurv)l(e)190 b
-Fe(Dra)m(w)37 b(a)i(series)f(of)h(connected)f(geo)s(desic)1730
-4084 y(curv)m(es)2990 3985 y Fz(astP)l(olyCurv)l(e)0
-4261 y Fd(Description:)44 b Fj(This)c(function)g(joins)f(a)g(series)g
-(of)g(p)r(oin)n(ts)h(sp)r(eci\014ed)g(in)f(the)h(ph)n(ysical)f(co)r
-(ordinate)f(system)i(of)f(a)227 4360 y(Plot)d(b)n(y)h(dra)n(wing)e(a)i
-(sequence)f(of)h(geo)r(desic)e(curv)n(es.)64 b(It)37
-b(is)f(equiv)-5 b(alen)n(t)37 b(to)f(making)g(rep)r(eated)h(use)g(of)f
-(the)227 4460 y(astCurv)n(e)29 b(function)i(\(q.v.\),)g(except)f(that)g
-(astP)n(olyCurv)n(e)d(will)j(generally)f(b)r(e)h(more)g(e\016cien)n(t)g
-(when)g(dra)n(wing)227 4559 y(man)n(y)d(geo)r(desic)g(curv)n(es)f
-(end-to-end.)37 b(A)28 b(t)n(ypical)f(application)g(of)g(this)h(migh)n
-(t)g(b)r(e)g(in)g(dra)n(wing)e(con)n(tour)g(lines.)227
-4689 y(As)g(with)h(astCurv)n(e,)e(full)h(accoun)n(t)g(is)f(tak)n(en)h
-(of)g(the)g(Mapping)g(b)r(et)n(w)n(een)g(ph)n(ysical)f(and)g(graphical)
-g(co)r(ordinate)227 4789 y(systems.)37 b(This)27 b(includes)h(an)n(y)f
-(discon)n(tin)n(uities)g(and)g(clipping)h(established)f(using)h
-(astClip.)0 4949 y Fd(Synopsis:)121 b Ft(void)42 b(astPolyCurve\()c
-(AstPlot)j Fi(\003)p Ft(this,)g(int)h(npoint,)f(int)h(ncoord,)f(int)h
-(indim,)f(const)h(double)227 5049 y Fi(\003)p Ft(in)h(\))0
-5209 y Fd(P)m(arameters:)259 5356 y(this)427 5455 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)259 5593 y Fd(np)s(oin)m(t)427 5693
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(b)r(et)n(w)n(een)h
-(whic)n(h)f(geo)r(desic)g(curv)n(es)f(are)h(to)h(b)r(e)g(dra)n(wn.)p
-eop end
-%%Page: 301 311
-TeXDict begin 301 310 bop 3643 52 a FF(301)259 351 y
-Fd(nco)s(ord)427 451 y Fj(The)37 b(n)n(um)n(b)r(er)f(of)h(co)r
-(ordinates)e(b)r(eing)h(supplied)h(for)f(eac)n(h)g(p)r(oin)n(t)g
-(\(i.e.)64 b(the)37 b(n)n(um)n(b)r(er)f(of)h(axes)e(in)i(the)427
-551 y(curren)n(t)27 b(F)-7 b(rame)27 b(of)h(the)g(Plot,)f(as)g(giv)n
-(en)f(b)n(y)i(its)f(Naxes)g(attribute\).)259 682 y Fd(indim)427
-782 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)h(elemen)n(ts)g(along)e(the)i
-(second)f(dimension)h(of)f(the)h Ft(")p Fj(in)p Ft(")f
-Fj(arra)n(y)f(\(whic)n(h)i(con)n(tains)e(the)427 882
-y(input)39 b(co)r(ordinates\).)65 b(This)38 b(v)-5 b(alue)37
-b(is)h(required)f(so)f(that)i(the)g(co)r(ordinate)f(v)-5
-b(alues)37 b(can)g(b)r(e)h(correctly)427 981 y(lo)r(cated)21
-b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)h(this)f(arra)n(y)-7
-b(.)33 b(The)21 b(v)-5 b(alue)21 b(giv)n(en)f(should)h(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(np)r(oin)n(t)p Ft(")p Fj(.)259
-1113 y Fd(in)427 1213 y Fj(The)32 b(address)e(of)i(the)g(\014rst)f
-(elemen)n(t)h(in)f(a)h(2-dimensional)e(arra)n(y)f(of)j(shap)r(e)f
-Ft(")p Fj([nco)r(ord][indim])p Ft(")f Fj(giving)427 1312
-y(the)e(ph)n(ysical)e(co)r(ordinates)g(of)h(the)g(p)r(oin)n(ts)h(whic)n
-(h)f(are)f(to)h(b)r(e)g(joined)h(in)f(sequence)g(b)n(y)g(geo)r(desic)f
-(curv)n(es.)427 1412 y(These)j(should)g(b)r(e)h(stored)e(suc)n(h)h
-(that)g(the)h(v)-5 b(alue)29 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)i(p)r(oin)n(t)g(n)n(um)n(b)r(er)427
-1511 y Ft(")p Fj(p)r(oin)n(t)p Ft(")e Fj(is)h(found)g(in)f(elemen)n(t)h
-Ft(")p Fj(in[co)r(ord][p)r(oin)n(t])p Ft(")p Fj(.)0 1672
-y Fd(Notes:)340 1954 y Fi(\017)45 b Fj(No)32 b(curv)n(e)f(is)i(dra)n
-(wn)e(on)h(either)g(side)g(of)g(an)n(y)f(p)r(oin)n(t)h(whic)n(h)h(has)e
-(an)n(y)h(co)r(ordinate)f(equal)g(to)h(the)h(v)-5 b(alue)427
-2053 y(AST)p Ft(__)p Fj(BAD.)340 2185 y Fi(\017)45 b
-Fj(An)28 b(error)e(results)h(if)h(the)g(base)f(F)-7 b(rame)27
-b(of)h(the)g(Plot)f(is)g(not)h(2-dimensional.)340 2317
-y Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 2417 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 2614 3780 12 v 0 2745
-a Fz(astP)l(olyMap)721 b Fe(Create)38 b(a)g(P)m(olyMap)718
-b Fz(astP)l(olyMap)0 2932 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(P)n(olyMap)f(and)i(optionally)f
-(initialises)g(its)h(attributes.)227 3056 y(A)40 b(P)n(olyMap)d(is)i(a)
-f(form)h(of)g(Mapping)g(whic)n(h)g(p)r(erforms)f(a)g(general)g(p)r
-(olynomial)g(transformation.)70 b(Eac)n(h)227 3156 y(output)29
-b(co)r(ordinate)d(is)i(a)g(p)r(olynomial)f(function)i(of)e(all)h(the)g
-(input)h(co)r(ordinates.)36 b(The)28 b(co)r(e\016cien)n(ts)g(are)f(sp)r
-(ec-)227 3255 y(i\014ed)k(separately)e(for)h(eac)n(h)g(output)i(co)r
-(ordinate.)44 b(The)31 b(forw)n(ard)e(and)i(in)n(v)n(erse)e
-(transformations)g(are)g(de\014ned)227 3355 y(indep)r(endan)n(tly)f(b)n
-(y)g(separate)e(sets)h(of)h(co)r(e\016cien)n(ts.)0 3503
-y Fd(Synopsis:)121 b Ft(AstPolyMap)39 b Fi(\003)p Ft(astPolyMap\()g
-(int)j(nin,)g(int)g(nout,)g(int)g(ncoeff_f,)e(const)i(double)f
-(coeff_f[],)227 3603 y(int)i(ncoeff_i,)c(const)j(double)f(coeff_i[],)f
-(const)h(char)h Fi(\003)p Ft(options,)e(...)86 b(\))0
-3751 y Fd(P)m(arameters:)259 3887 y(nin)427 3986 y Fj(The)28
-b(n)n(um)n(b)r(er)f(of)h(input)g(co)r(ordinates.)259
-4118 y Fd(nout)427 4218 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(output)g(co)r
-(ordinates.)259 4350 y Fd(nco)s(e\013)p Ft(_)p Fd(f)427
-4449 y Fj(The)36 b(n)n(um)n(b)r(er)f(of)h(non-zero)d(co)r(e\016cien)n
-(ts)i(necessary)f(to)i(de\014ne)f(the)h(forw)n(ard)e(transformation)g
-(of)h(the)427 4549 y(P)n(olyMap.)h(If)28 b(zero)e(is)i(supplied,)g(the)
-g(forw)n(ard)d(transformation)h(will)i(b)r(e)g(unde\014ned.)259
-4681 y Fd(co)s(e\013)p Ft(_)p Fd(f)427 4780 y Fj(An)38
-b(arra)n(y)c(con)n(taining)i Ft(")p Fj(nco)r(e\013)p
-Ft(_)p Fj(f)p Fi(\003)p Fj(\()g(2)h(+)f(nin)h(\))p Ft(")g
-Fj(elemen)n(ts.)65 b(Eac)n(h)35 b(group)h(of)h Ft(")p
-Fj(2)f(+)g(nin)p Ft(")h Fj(adjacen)n(t)427 4880 y(elemen)n(ts)26
-b(describ)r(e)f(a)f(single)h(co)r(e\016cien)n(t)h(of)f(the)h(forw)n
-(ard)d(transformation.)35 b(Within)26 b(eac)n(h)f(suc)n(h)g(group,)427
-4980 y(the)g(\014rst)g(elemen)n(t)g(is)f(the)h(co)r(e\016cien)n(t)g(v)
--5 b(alue;)25 b(the)h(next)e(elemen)n(t)h(is)g(the)g(in)n(teger)f
-(index)g(of)h(the)g(P)n(olyMap)427 5079 y(output)33 b(whic)n(h)f(uses)f
-(the)h(co)r(e\016cien)n(t)g(within)h(its)f(de\014ning)g(p)r(olynomial)f
-(\(the)i(\014rst)f(output)g(has)g(index)427 5179 y(1\);)48
-b(the)41 b(remaining)f(elemen)n(ts)h(of)g(the)g(group)f(giv)n(e)g(the)h
-(in)n(teger)f(p)r(o)n(w)n(ers)g(to)g(use)h(with)h(eac)n(h)e(input)427
-5278 y(co)r(ordinate)27 b(v)-5 b(alue)27 b(\(p)r(o)n(w)n(ers)g(m)n(ust)
-h(not)f(b)r(e)h(negativ)n(e,)f(and)h(\015oating)f(p)r(oin)n(t)g(v)-5
-b(alues)28 b(are)e(rounded)i(to)f(the)427 5378 y(nearest)g(in)n
-(teger\).)36 b(If)28 b Ft(")p Fj(nco)r(e\013)p Ft(_)p
-Fj(f)p Ft(")f Fj(is)h(zero,)e(a)h(NULL)h(p)r(oin)n(ter)g(ma)n(y)e(b)r
-(e)i(supplied)g(for)f Ft(")p Fj(co)r(e\013)p Ft(_)p Fj(f)p
-Ft(")p Fj(.)427 5494 y(F)-7 b(or)24 b(instance,)h(if)g(the)f(P)n
-(olyMap)f(has)h(3)g(inputs)h(and)f(2)g(outputs,)h(eac)n(h)f(group)f
-(consisting)g(of)i(5)f(elemen)n(ts,)427 5593 y(A)i(groups)e(suc)n(h)h
-(as)f Ft(")p Fj(\(1.2,)h(2.0,)g(1.0,)g(3.0,)g(0.0\))p
-Ft(")f Fj(describ)r(es)g(a)h(co)r(e\016cien)n(t)g(with)h(v)-5
-b(alue)25 b(1.2)f(whic)n(h)i(is)f(used)427 5693 y(within)36
-b(the)f(de\014nition)h(of)e(output)i(2.)59 b(The)35 b(output)g(v)-5
-b(alue)35 b(is)g(incremen)n(ted)f(b)n(y)h(the)g(pro)r(duct)g(of)g(the)p
-eop end
-%%Page: 302 312
-TeXDict begin 302 311 bop 0 52 a FF(302)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(co)r(e\016cien)n(t)25
-b(v)-5 b(alue,)25 b(the)g(v)-5 b(alue)24 b(of)h(input)g(co)r(ordinate)e
-(1)i(raised)e(to)h(the)h(p)r(o)n(w)n(er)f(1,)h(and)f(the)h(v)-5
-b(alue)24 b(of)h(input)427 451 y(co)r(ordinate)g(2)g(raised)f(to)i(the)
-g(p)r(o)n(w)n(er)e(3.)36 b(Input)26 b(co)r(ordinate)f(3)g(is)g(not)h
-(used)f(since)h(its)g(p)r(o)n(w)n(er)e(is)h(sp)r(eci\014ed)427
-551 y(as)i(zero.)36 b(As)27 b(another)f(example,)h(the)h(group)e
-Ft(")p Fj(\(-1.0,)g(1.0,)h(0.0,)g(0.0,)f(0.0)h(\))p Ft(")g
-Fj(describ)r(es)g(adds)f(a)h(constan)n(t)427 650 y(v)-5
-b(alue)30 b(-1.0)e(on)n(to)g(output)i(1)f(\(it)i(is)e(a)g(constan)n(t)g
-(v)-5 b(alue)29 b(since)g(the)h(p)r(o)n(w)n(er)e(for)h(ev)n(ery)f
-(input)i(axis)f(is)g(giv)n(en)427 750 y(as)e(zero\).)427
-866 y(Eac)n(h)e(\014nal)h(output)h(co)r(ordinate)e(v)-5
-b(alue)26 b(is)g(the)g(sum)h(of)f(the)g Ft(")p Fj(nco)r(e\013)p
-Ft(_)p Fj(f)p Ft(")g Fj(terms)f(describ)r(ed)h(b)n(y)g(the)h
-Ft(")p Fj(nco-)427 965 y(e\013)p Ft(_)p Fj(f)p Ft(")h
-Fj(groups)e(within)i(the)g(supplied)g(arra)n(y)-7 b(.)259
-1098 y Fd(nco)s(e\013)p Ft(_)p Fd(i)427 1197 y Fj(The)38
-b(n)n(um)n(b)r(er)g(of)g(non-zero)e(co)r(e\016cien)n(ts)i(necessary)e
-(to)i(de\014ne)g(the)g(in)n(v)n(erse)f(transformation)f(of)i(the)427
-1297 y(P)n(olyMap.)e(If)28 b(zero)e(is)i(supplied,)g(the)g(in)n(v)n
-(erse)e(transformation)g(will)h(b)r(e)h(unde\014ned.)259
-1430 y Fd(co)s(e\013)p Ft(_)p Fd(i)427 1529 y Fj(An)k(arra)n(y)c(con)n
-(taining)i Ft(")p Fj(nco)r(e\013)p Ft(_)p Fj(i)p Fi(\003)p
-Fj(\()h(2)f(+)h(nout)g(\))p Ft(")g Fj(elemen)n(ts.)47
-b(Eac)n(h)30 b(group)g(of)h Ft(")p Fj(2)f(+)g(nout)p
-Ft(")h Fj(adjacen)n(t)427 1629 y(elemen)n(ts)25 b(describ)r(e)g(a)g
-(single)g(co)r(e\016cien)n(t)g(of)h(the)f(in)n(v)n(erse)f
-(transformation,)g(using)h(the)h(same)f(sc)n(hame)f(as)427
-1728 y Ft(")p Fj(co)r(e\013)p Ft(_)p Fj(f)p Ft(")p Fj(,)j(except)h
-(that)f Ft(")p Fj(inputs)p Ft(")g Fj(and)h Ft(")p Fj(outputs)p
-Ft(")f Fj(are)f(transp)r(osed.)36 b(If)28 b Ft(")p Fj(nco)r(e\013)p
-Ft(_)p Fj(i)p Ft(")e Fj(is)i(zero,)e(a)h(NULL)427 1828
-y(p)r(oin)n(ter)g(ma)n(y)g(b)r(e)h(supplied)g(for)f Ft(")p
-Fj(co)r(e\013)p Ft(_)p Fj(i)p Ft(")p Fj(.)259 1960 y
-Fd(options)427 2060 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g
-(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g
-(attribute)427 2160 y(assignmen)n(ts)c(to)g(b)r(e)h(used)g(for)f
-(initialising)g(the)h(new)g(P)n(olyMap.)34 b(The)25 b(syn)n(tax)e(used)
-i(is)f(iden)n(tical)h(to)f(that)427 2259 y(for)i(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 2359 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)259 2491 y Fd(...)427 2591 y Fj(If)38
-b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 2691 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 2790 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 2890 y Fj(function\).)0
-3051 y Fd(Returned)32 b(V)-8 b(alue:)259 3187 y(astP)m(olyMap\(\))427
-3287 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(olyMap.)0
-3449 y Fd(Notes:)340 3731 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 3830 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4029 3780 12 v 0 4160
-a Fz(astP)l(olygon)805 b Fe(Create)37 b(a)h(P)m(olygon)801
-b Fz(astP)l(olygon)0 4348 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(P)n(olygon)f(ob)5 b(ject)27
-b(and)h(optionally)e(initialises)i(its)f(attributes.)227
-4473 y(The)36 b(P)n(olygon)d(class)i(implemen)n(ts)g(a)g(p)r(olygonal)f
-(area,)i(de\014ned)g(b)n(y)f(a)h(collection)e(of)i(v)n(ertices,)g
-(within)g(a)f(2-)227 4572 y(dimensional)20 b(F)-7 b(rame.)34
-b(The)21 b(v)n(ertices)e(are)h(connected)g(together)g(b)n(y)g(geo)r
-(desic)g(curv)n(es)f(within)i(the)g(encapsulated)227
-4672 y(F)-7 b(rame.)34 b(F)-7 b(or)20 b(instance,)i(if)f(the)g
-(encapsulated)f(F)-7 b(rame)21 b(is)f(a)g(simple)h(F)-7
-b(rame)20 b(then)h(the)g(geo)r(desics)f(will)h(b)r(e)g(straigh)n(t)227
-4772 y(lines,)33 b(but)f(if)g(the)g(F)-7 b(rame)31 b(is)h(a)f(SkyF)-7
-b(rame)31 b(then)h(the)g(geo)r(desics)e(will)i(b)r(e)g(great)e
-(circles.)48 b(Note,)33 b(the)f(v)n(ertices)227 4871
-y(m)n(ust)d(b)r(e)g(supplied)g(in)g(an)f(order)f(suc)n(h)i(that)g(the)g
-(inside)f(of)h(the)g(p)r(olygon)f(is)g(to)h(the)g(left)g(of)f(the)h(b)r
-(oundary)f(as)227 4971 y(the)f(v)n(ertices)e(are)h(tra)n(v)n(ersed.)34
-b(Supplying)26 b(them)h(in)g(the)g(rev)n(erse)d(order)h(will)i
-(e\013ectiv)n(ely)f(negate)g(the)h(p)r(olygon.)227 5095
-y(Within)33 b(a)e(SkyF)-7 b(rame,)32 b(neigh)n(b)r(ouring)e(v)n
-(ertices)g(are)h(alw)n(a)n(ys)e(joined)j(using)f(the)h(shortest)e
-(path.)49 b(Th)n(us)31 b(if)h(an)227 5195 y(edge)f(of)g(180)f(degrees)g
-(or)g(more)g(in)i(length)f(is)g(required,)g(it)h(should)e(b)r(e)i
-(split)g(in)n(to)e(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227
-5295 y(less)k(than)h(180)e(degrees.)59 b(The)35 b(closed)g(path)g
-(joining)g(all)h(the)f(v)n(ertices)g(in)g(order)f(will)i(divide)f(the)h
-(celestial)227 5394 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h
-(regions.)60 b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h
-(region)f(whic)n(h)h(is)f(circled)h(in)g(an)227 5494
-y(an)n(ti-clo)r(c)n(kwise)25 b(manner)h(\(when)i(view)n(ed)e(from)g
-(the)h(inside)g(of)g(the)g(celestial)f(sphere\))h(when)g(mo)n(ving)e
-(through)227 5593 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f
-(in)h(whic)n(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e
-(w)n(as)h(created)h(\(i.e.)36 b(the)227 5693 y(inside)28
-b(is)f(to)h(the)g(left)g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g
-(through)g(the)h(v)n(ertices)e(in)i(the)g(order)e(supplied\).)p
-eop end
-%%Page: 303 313
-TeXDict begin 303 312 bop 3643 52 a FF(303)0 351 y Fd(Synopsis:)121
-b Ft(AstPolygon)39 b Fi(\003)p Ft(astPolygon\()g(AstFrame)h
-Fi(\003)p Ft(frame,)h(int)h(npnt,)g(int)g(dim,)g(const)f(double)h
-Fi(\003)p Ft(points,)227 451 y(AstRegion)e Fi(\003)p
-Ft(unc,)i(const)f(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 597 y Fd(P)m(arameters:)259 730 y(frame)427 829
-y Fj(A)30 b(p)r(oin)n(ter)f(to)g(the)g(F)-7 b(rame)29
-b(in)g(whic)n(h)g(the)h(region)e(is)h(de\014ned.)42 b(It)30
-b(m)n(ust)f(ha)n(v)n(e)f(exactly)g(2)h(axes.)41 b(A)29
-b(deep)427 929 y(cop)n(y)h(is)g(tak)n(en)f(of)i(the)f(supplied)h(F)-7
-b(rame.)44 b(This)30 b(means)g(that)h(an)n(y)e(subsequen)n(t)h(c)n
-(hanges)f(made)h(to)g(the)427 1029 y(F)-7 b(rame)27 b(using)h(the)g
-(supplied)f(p)r(oin)n(ter)h(will)g(ha)n(v)n(e)e(no)h(e\013ect)h(the)g
-(Region.)259 1158 y Fd(npn)m(t)427 1258 y Fj(The)g(n)n(um)n(b)r(er)f
-(of)h(p)r(oin)n(ts)f(in)h(the)g(Region.)259 1387 y Fd(dim)427
-1487 y Fj(The)33 b(n)n(um)n(b)r(er)f(of)g(elemen)n(ts)g(along)f(the)i
-(second)f(dimension)g(of)g(the)h Ft(")p Fj(p)r(oin)n(ts)p
-Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(con)n(tains)427 1586
-y(the)c(p)r(oin)n(t)f(co)r(ordinates\).)38 b(This)29
-b(v)-5 b(alue)28 b(is)g(required)f(so)h(that)h(the)f(co)r(ordinate)g(v)
--5 b(alues)27 b(can)h(b)r(e)h(correctly)427 1686 y(lo)r(cated)c(if)h
-(they)g(do)f(not)g(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)34 b(The)25 b(v)-5 b(alue)25 b(giv)n(en)g(should)g(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(npn)n(t)p Ft(")p Fj(.)259 1815
-y Fd(p)s(oin)m(ts)427 1915 y Fj(The)41 b(address)f(of)h(the)g(\014rst)f
-(elemen)n(t)h(of)g(a)g(2-dimensional)e(arra)n(y)g(of)h(shap)r(e)h
-Ft(")p Fj([2][dim])p Ft(")f Fj(giving)g(the)427 2015
-y(ph)n(ysical)24 b(co)r(ordinates)f(of)h(the)g(v)n(ertices.)35
-b(These)24 b(should)g(b)r(e)h(stored)e(suc)n(h)h(that)h(the)f(v)-5
-b(alue)25 b(of)f(co)r(ordinate)427 2114 y(n)n(um)n(b)r(er)k
-Ft(")p Fj(co)r(ord)p Ft(")d Fj(for)i(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-Ft(")p Fj(pn)n(t)p Ft(")f Fj(is)g(found)h(in)g(elemen)n(t)g
-Ft(")p Fj(in[co)r(ord][pn)n(t])p Ft(")p Fj(.)259 2244
-y Fd(unc)427 2343 y Fj(An)33 b(optional)e(p)r(oin)n(ter)h(to)g(an)g
-(existing)g(Region)f(whic)n(h)h(sp)r(eci\014es)g(the)h(uncertain)n
-(ties)e(asso)r(ciated)g(with)427 2443 y(the)j(b)r(oundary)f(of)g(the)h
-(Bo)n(x)f(b)r(eing)g(created.)54 b(The)34 b(uncertain)n(t)n(y)e(in)i
-(an)n(y)f(p)r(oin)n(t)h(on)f(the)h(b)r(oundary)f(of)427
-2543 y(the)g(Bo)n(x)e(is)h(found)h(b)n(y)f(shifting)h(the)f(supplied)h
-Ft(")p Fj(uncertain)n(t)n(y)p Ft(")e Fj(Region)g(so)h(that)g(it)h(is)f
-(cen)n(tred)g(at)g(the)427 2642 y(b)r(oundary)e(p)r(oin)n(t)h(b)r(eing)
-g(considered.)44 b(The)31 b(area)e(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)427 2742
-y(represen)n(ts)g(the)i(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)f(p)
-r(osition.)48 b(The)31 b(uncertain)n(t)n(y)g(is)g(assumed)g(to)g(b)r(e)
-h(the)427 2841 y(same)27 b(for)g(all)h(p)r(oin)n(ts.)427
-2956 y(If)38 b(supplied,)j(the)d(uncertain)n(t)n(y)f(Region)g(m)n(ust)g
-(b)r(e)i(of)e(a)g(class)g(for)g(whic)n(h)h(all)f(instances)g(are)g(cen)
-n(tro-)427 3056 y(symetric)24 b(\(e.g.)35 b(Bo)n(x,)24
-b(Circle,)g(Ellipse,)h(etc.\))36 b(or)23 b(b)r(e)i(a)e(Prism)h(con)n
-(taining)f(cen)n(tro-symetric)f(comp)r(onen)n(t)427 3155
-y(Regions.)57 b(A)35 b(deep)f(cop)n(y)g(of)g(the)h(supplied)g(Region)f
-(will)g(b)r(e)h(tak)n(en,)h(so)e(subsequen)n(t)g(c)n(hanges)f(to)h(the)
-427 3255 y(uncertain)n(t)n(y)28 b(Region)f(using)h(the)h(supplied)f(p)r
-(oin)n(ter)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f(the)g(created)g
-(Bo)n(x.)38 b(Alter-)427 3354 y(nativ)n(ely)-7 b(,)24
-b(a)g(NULL)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(ma)n(y)h(b)r(e)g
-(supplied,)h(in)f(whic)n(h)g(case)f(a)g(default)i(uncertain)n(t)n(y)e
-(is)h(used)427 3454 y(equiv)-5 b(alen)n(t)28 b(to)f(a)g(b)r(o)n(x)g
-(1.0E-6)f(of)h(the)h(size)g(of)f(the)h(Bo)n(x)f(b)r(eing)g(created.)427
-3569 y(The)c(uncertain)n(t)n(y)f(Region)g(has)g(t)n(w)n(o)g(uses:)34
-b(1\))22 b(when)h(the)g(astOv)n(erlap)d(function)k(compares)d(t)n(w)n
-(o)h(Regions)427 3668 y(for)g(equalit)n(y)h(the)g(uncertain)n(t)n(y)f
-(Region)g(is)g(used)h(to)g(determine)f(the)i(tolerance)d(on)i(the)g
-(comparison,)f(and)427 3768 y(2\))31 b(when)f(a)h(Region)e(is)i(mapp)r
-(ed)g(in)n(to)f(a)g(di\013eren)n(t)h(co)r(ordinate)e(system)i(and)f
-(subsequen)n(tly)g(simpli\014ed)427 3867 y(\(using)c(astSimplify\),)h
-(the)f(uncertain)n(ties)f(are)g(used)h(to)g(determine)g(if)g(the)g
-(transformed)f(b)r(oundary)g(can)427 3967 y(b)r(e)j(accurately)e
-(represen)n(ted)h(b)n(y)g(a)g(sp)r(eci\014c)h(shap)r(e)f(of)h(Region.)
-259 4096 y Fd(options)427 4196 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4296 y(assignmen)n(ts)e
-(to)h(b)r(e)g(used)g(for)g(initialising)g(the)g(new)g(P)n(olygon.)35
-b(The)27 b(syn)n(tax)f(used)h(is)g(iden)n(tical)f(to)h(that)427
-4395 y(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4495 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4624
-y Fd(...)427 4724 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4824 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4923 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5023 y Fj(function\).)0 5181
-y Fd(Returned)32 b(V)-8 b(alue:)259 5314 y(astP)m(olygon\(\))427
-5414 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(P)n(olygon.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 304 314
-TeXDict begin 304 313 bop 0 52 a FF(304)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 629 y Fd(Status)33 b(Handling)n(:)227 775
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-875 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-975 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1190 3780
-12 v 0 1322 a Fz(astPrism)1502 1321 y Fe(Create)37 b(a)h(Prism)3259
-1322 y Fz(astPrism)0 1504 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Prism)g(and)g(optionally)g
-(initialises)h(its)f(attributes.)227 1637 y(A)21 b(Prism)e(is)h(a)f
-(Region)g(whic)n(h)h(represen)n(ts)f(an)h(extrusion)f(of)h(an)f
-(existing)h(Region)f(in)n(to)h(one)g(or)f(more)g(orthogonal)227
-1736 y(dimensions)k(\(sp)r(eci\014ed)h(b)n(y)f(another)f(Region\).)35
-b(If)23 b(the)h(Region)e(to)h(b)r(e)h(extruded)f(has)f(N)i(axes,)f(and)
-g(the)g(Region)227 1836 y(de\014ning)36 b(the)f(extrusion)f(has)h(M)g
-(axes,)i(then)e(the)h(resulting)f(Prism)f(will)h(ha)n(v)n(e)f(\(M+N\))i
-(axes.)59 b(A)35 b(p)r(oin)n(t)h(is)227 1935 y(inside)28
-b(the)g(Prism)f(if)h(the)g(\014rst)f(N)h(axis)f(v)-5
-b(alues)28 b(corresp)r(ond)e(to)h(a)g(p)r(oin)n(t)h(inside)g(the)g
-(Region)f(b)r(eing)h(extruded,)227 2035 y(and)g(the)g(remaining)e(M)i
-(axis)f(v)-5 b(alues)27 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)h(Region)f(de\014ning)h(the)g(extrusion.)227
-2168 y(As)33 b(an)g(example,)h(a)f(cylinder)g(can)f(b)r(e)i(represen)n
-(ted)e(b)n(y)h(extruding)f(an)h(existing)g(Circle,)h(using)e(an)h(In)n
-(terv)-5 b(al)227 2267 y(to)31 b(de\014ne)g(the)g(extrusion.)46
-b(Ih)31 b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n
-(v)n(e)e(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-2367 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 2533 y Fd(Synopsis:)121 b Ft(AstPrism)40
-b Fi(\003)p Ft(astPrism\()g(AstRegion)f Fi(\003)p Ft(region1,)h
-(AstRegion)g Fi(\003)p Ft(region2,)g(const)h(char)h Fi(\003)p
-Ft(options,)227 2633 y(...)86 b(\))0 2798 y Fd(P)m(arameters:)259
-2951 y(region1)427 3051 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Region)f(to)
-g(b)r(e)h(extruded.)259 3192 y Fd(region2)427 3292 y
-Fj(P)n(oin)n(ter)e(to)i(the)g(Region)f(de\014ning)g(the)h(exten)n(t)g
-(of)f(the)h(extrusion.)259 3433 y Fd(options)427 3532
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3632 y(assignmen)n(ts)j(to)g(b)r(e)h(used)g(for)f(initialising)h(the)g
-(new)f(Prism.)49 b(The)31 b(syn)n(tax)g(used)h(is)f(iden)n(tical)h(to)f
-(that)427 3731 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3831 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3972
-y Fd(...)427 4072 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4171 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4271 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4371 y Fj(function\).)0 4549
-y Fd(Returned)32 b(V)-8 b(alue:)259 4702 y(astPrism\(\))427
-4801 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Prism.)0
-4980 y Fd(Notes:)340 5279 y Fi(\017)45 b Fj(Deep)37 b(copies)g(are)e
-(tak)n(en)i(of)f(the)i(supplied)f(Regions.)63 b(This)37
-b(means)f(that)i(an)n(y)e(subsequen)n(t)g(c)n(hanges)427
-5378 y(made)25 b(to)h(the)f(comp)r(onen)n(t)g(Regions)g(using)g(the)h
-(supplied)f(p)r(oin)n(ters)g(will)h(ha)n(v)n(e)e(no)h(e\013ect)h(on)f
-(the)g(Prism.)340 5519 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5619 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 305 315
-TeXDict begin 305 314 bop 3643 52 a FF(305)p 0 351 3780
-12 v 0 482 a Fz(astPurgeW)l(CS)1068 483 y Fe(Delete)39
-b(all)e(cards)i(in)f(the)h(FitsChan)1163 583 y(describing)e(W)m(CS)i
-(information)2952 482 y Fz(astPurgeW)l(CS)0 762 y Fd(Description:)44
-b Fj(This)33 b(function)h(deletes)f(all)f(cards)g(in)h(a)g(FitsChan)g
-(that)g(relate)f(to)h(an)n(y)f(of)h(the)g(recognised)e(W)n(CS)227
-861 y(enco)r(dings.)37 b(On)27 b(exit,)h(the)g(curren)n(t)e(card)h(is)h
-(the)g(\014rst)f(remaining)g(card)f(in)i(the)g(FitsChan.)0
-1006 y Fd(Synopsis:)121 b Ft(void)42 b(astPurgeWCS\()c(AstFitsChan)h
-Fi(\003)p Ft(this)j(\))0 1151 y Fd(P)m(arameters:)259
-1282 y(this)427 1382 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)p
-0 1572 V 0 1703 a Fz(astPutCards)203 b Fe(Store)38 b(a)g(set)h(of)f
-(FITS)i(header)e(cards)g(in)h(a)1653 1803 y(FitsChan)3045
-1703 y Fz(astPutCards)0 1959 y Fd(Description:)44 b Fj(This)33
-b(function)h(stores)d(a)i(set)g(of)g(FITS)g(header)f(cards)g(in)h(a)g
-(FitsChan.)53 b(The)33 b(cards)e(are)h(supplied)227 2059
-y(concatenated)41 b(together)f(in)n(to)h(a)g(single)g(c)n(haracter)e
-(string.)78 b(An)n(y)41 b(existing)g(cards)f(in)h(the)h(FitsChan)g(are)
-227 2158 y(remo)n(v)n(ed)24 b(b)r(efore)g(the)i(new)f(cards)f(are)g
-(added.)35 b(The)25 b(FitsChan)g(is)g Ft(")p Fj(re-w)n(ound)p
-Ft(")e Fj(on)i(exit)g(b)n(y)g(clearing)e(its)i(Card)227
-2258 y(attribute.)37 b(This)27 b(means)g(that)g(a)g(subsequen)n(t)g(in)
-n(v)n(o)r(cation)f(of)h(astRead)g(can)f(b)r(e)i(made)f(immediately)g
-(without)227 2358 y(the)h(need)g(to)f(re-wind)g(the)h(FitsChan)g
-(\014rst.)0 2502 y Fd(Synopsis:)121 b Ft(void)42 b(astPutCards\()c
-(AstFitsChan)h Fi(\003)p Ft(this,)i(const)h(char)g Fi(\003)p
-Ft(cards)f(\))0 2647 y Fd(P)m(arameters:)259 2779 y(this)427
-2878 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-3006 y Fd(cards)427 3106 y Fj(P)n(oin)n(ter)h(to)i(a)f(n)n
-(ull-terminated)g(c)n(haracter)f(string)h(con)n(taining)g(the)h(FITS)g
-(cards)e(to)i(b)r(e)g(stored.)45 b(Eac)n(h)427 3206 y(individual)26
-b(card)e(should)h(o)r(ccup)n(y)g(80)f(c)n(haracters)f(in)i(this)h
-(string,)f(and)g(there)g(should)g(b)r(e)h(no)f(delimiters,)427
-3305 y(new)31 b(lines,)g(etc,)g(b)r(et)n(w)n(een)g(adjacen)n(t)e
-(cards.)45 b(The)30 b(\014nal)g(card)g(ma)n(y)f(b)r(e)i(less)f(than)h
-(80)e(c)n(haracters)f(long.)427 3405 y(This)g(is)f(the)h(format)f(pro)r
-(duced)h(b)n(y)f(the)h(\014ts)p Ft(_)p Fj(hdr2str)e(function)i(in)g
-(the)g(CFITSIO)g(library)-7 b(.)0 3562 y Fd(Notes:)340
-3840 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h(the)g
-(supplied)g(string)f(con)n(tains)g(an)n(y)f(cards)h(whic)n(h)h(cannot)f
-(b)r(e)h(in)n(terpreted.)p 0 4029 V 0 4161 a Fz(astPutChannelData)215
-b Fe(Store)38 b(arbitrary)e(data)1452 4276 y(to)i(b)s(e)h(passed)g(to)f
-(a)1313 4390 y(source)c(or)g(sink)h(function)2618 4161
-y Fz(astPutChannelData)0 4546 y Fd(Description:)44 b
-Fj(This)30 b(function)f(stores)f(a)h(supplied)h(arbitrary)d(p)r(oin)n
-(ter)i(in)g(the)h(Channel.)42 b(When)30 b(a)e(source)g(or)h(sink)227
-4646 y(function)35 b(is)e(in)n(v)n(ok)n(ed)g(b)n(y)g(the)h(Channel,)h
-(the)g(in)n(v)n(ok)n(ed)d(function)i(can)g(use)f(the)h(astChannelData)f
-(macro)g(to)227 4745 y(retriev)n(e)i(the)h(p)r(oin)n(ter.)60
-b(This)36 b(pro)n(vides)e(a)h(thread-safe)g(alternativ)n(e)f(to)i
-(passing)e(\014le)i(descriptors,)g(etc,)i(via)227 4845
-y(global)27 b(static)g(v)-5 b(ariables.)0 4990 y Fd(Synopsis:)121
-b Ft(void)42 b(astPutChannelDat)o(a\()37 b(AstChannel)i
-Fi(\003)p Ft(this,)i(void)h Fi(\003)p Ft(data)g(\))0
-5134 y Fd(P)m(arameters:)259 5266 y(this)427 5366 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Channel.)259 5494 y Fd(data)427 5593 y Fj(A)38
-b(p)r(oin)n(ter)g(to)g(b)r(e)g(made)f(a)n(v)-5 b(ailable)37
-b(to)h(the)g(source)e(and)i(sink)g(functions)g(via)f(the)h
-(astChannelData)427 5693 y(macro.)e(Ma)n(y)27 b(b)r(e)h(NULL.)p
-eop end
-%%Page: 306 316
-TeXDict begin 306 315 bop 0 52 a FF(306)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Class)h(Applicabilit)m
-(y:)259 483 y(Channel)427 582 y Fj(All)d(Channels)g(ha)n(v)n(e)e(this)i
-(function.)0 739 y Fd(Notes:)340 1016 y Fi(\017)45 b
-Fj(This)28 b(routine)f(is)h(not)f(a)n(v)-5 b(ailable)26
-b(in)i(the)g(F)-7 b(ortran)27 b(77)f(in)n(terface)h(to)h(the)g(AST)g
-(library)-7 b(.)p 0 1206 3780 12 v 0 1337 a Fz(astPutFits)246
-b Fe(Store)38 b(a)g(FITS)h(header)g(card)f(in)g(a)h(FitsChan)244
-b Fz(astPutFits)0 1493 y Fd(Description:)44 b Fj(This)25
-b(function)h(stores)e(a)h(FITS)g(header)f(card)h(in)g(a)g(FitsChan.)36
-b(The)25 b(card)f(is)h(either)g(inserted)g(b)r(efore)227
-1592 y(the)j(curren)n(t)f(card)g(\(iden)n(ti\014ed)h(b)n(y)f(the)h
-(Card)f(attribute\),)h(or)f(o)n(v)n(er-writes)e(the)j(curren)n(t)f
-(card,)f(as)h(required.)0 1737 y Fd(Synopsis:)121 b Ft(void)42
-b(astPutFits\()d(AstFitsChan)g Fi(\003)p Ft(this,)i(const)g(char)h
-(card[)g(80)h(],)f(int)h(overwrite)d(\))0 1881 y Fd(P)m(arameters:)259
-2012 y(this)427 2112 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-2240 y Fd(card)427 2339 y Fj(P)n(oin)n(ter)c(to)i(a)f(p)r(ossibly)g(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g(the)h(FITS)g
-(card)f(to)g(b)r(e)h(stored.)427 2439 y(No)i(more)f(than)g(80)g(c)n
-(haracters)e(will)j(b)r(e)g(used)g(from)f(this)h(string)f(\(or)g(few)n
-(er)g(if)h(a)f(n)n(ull)h(o)r(ccurs)e(earlier\).)259 2567
-y Fd(o)m(v)m(erwrite)427 2666 y Fj(If)i(this)g(v)-5 b(alue)27
-b(is)g(zero,)f(the)i(new)f(card)f(is)i(inserted)f(in)g(fron)n(t)g(of)g
-(the)h(curren)n(t)e(card)g(in)i(the)g(FitsChan)f(\(as)427
-2766 y(iden)n(ti\014ed)j(b)n(y)e(the)h(initial)g(v)-5
-b(alue)29 b(of)g(the)g(Card)f(attribute\).)41 b(If)29
-b(it)h(is)e(non-zero,)g(the)h(new)g(card)f(replaces)427
-2866 y(the)35 b(curren)n(t)e(card.)55 b(In)35 b(either)f(case,)h(the)f
-(Card)f(attribute)h(is)g(then)h(incremen)n(ted)f(b)n(y)g(one)f(so)h
-(that)g(it)427 2965 y(subsequen)n(tly)27 b(iden)n(ti\014es)h(the)g
-(card)f(follo)n(wing)f(the)i(one)g(stored.)0 3122 y Fd(Notes:)340
-3400 y Fi(\017)45 b Fj(If)28 b(the)g(Card)e(attribute)h(initially)h(p)r
-(oin)n(ts)f(at)g(the)h Ft(")p Fj(end-of-\014le)p Ft(")e
-Fj(\(i.e.)37 b(exceeds)26 b(the)i(n)n(um)n(b)r(er)f(of)g(cards)f(in)427
-3499 y(the)i(FitsChan\),)g(then)g(the)g(new)g(card)f(is)g(app)r(ended)h
-(as)f(the)h(last)f(card)g(in)h(the)g(FitsChan.)340 3627
-y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h(the)g(supplied)g
-(string)f(cannot)g(b)r(e)h(in)n(terpreted)f(as)g(a)g(FITS)h(header)f
-(card.)p 0 3816 V 0 3947 a Fz(astRate)615 3948 y Fe(Calculate)36
-b(the)j(rate)f(of)g(c)m(hange)g(of)g(a)h(Mapping)f(output)3329
-3947 y Fz(astRate)0 4127 y Fd(Description:)44 b Fj(This)29
-b(function)g(ev)-5 b(aluates)28 b(the)h(rate)f(of)h(c)n(hange)e(of)i(a)
-f(sp)r(eci\014ed)h(output)g(of)g(the)g(supplied)g(Mapping)227
-4226 y(with)f(resp)r(ect)g(to)f(a)g(sp)r(eci\014ed)h(input,)h(at)e(a)g
-(sp)r(eci\014ed)h(input)h(p)r(osition.)227 4348 y(The)d(result)f(is)g
-(estimated)g(b)n(y)g(in)n(terp)r(olating)g(the)g(function)h(using)f(a)g
-(fourth)g(order)f(p)r(olynomial)h(in)g(the)h(neigh-)227
-4448 y(b)r(ourho)r(o)r(d)i(of)h(the)g(sp)r(eci\014ed)f(p)r(osition.)40
-b(The)28 b(size)h(of)f(the)h(neigh)n(b)r(ourho)r(o)r(d)e(used)i(is)f(c)
-n(hosen)g(to)g(minimise)h(the)227 4547 y(RMS)38 b(residual)f(p)r(er)g
-(unit)h(length)g(b)r(et)n(w)n(een)f(the)h(in)n(terp)r(olating)e(p)r
-(olynomial)h(and)g(the)h(supplied)g(Mapping)227 4647
-y(function.)59 b(This)35 b(metho)r(d)g(pro)r(duces)f(go)r(o)r(d)g
-(accuracy)f(but)j(can)e(in)n(v)n(olv)n(e)f(ev)-5 b(aluating)35
-b(the)g(Mapping)f(100)f(or)227 4747 y(more)27 b(times.)0
-4891 y Fd(Synopsis:)121 b Ft(double)41 b(astRate\()f(AstMapping)g
-Fi(\003)p Ft(this,)h(double)g Fi(\003)p Ft(at,)h(int)g(ax1,)g(int)g
-(ax2)h(\))0 5035 y Fd(P)m(arameters:)259 5167 y(this)427
-5266 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g(b)r(e)h
-(applied.)259 5394 y Fd(at)427 5494 y Fj(The)e(address)e(of)i(an)f
-(arra)n(y)f(holding)h(the)h(axis)f(v)-5 b(alues)25 b(at)h(the)g(p)r
-(osition)f(at)h(whic)n(h)g(the)g(rate)f(of)g(c)n(hange)g(is)427
-5593 y(to)j(b)r(e)g(ev)-5 b(aluated.)37 b(The)27 b(n)n(um)n(b)r(er)h
-(of)f(elemen)n(ts)h(in)g(this)g(arra)n(y)d(should)i(equal)h(the)g(n)n
-(um)n(b)r(er)f(of)h(inputs)g(to)427 5693 y(the)g(Mapping.)p
-eop end
-%%Page: 307 317
-TeXDict begin 307 316 bop 3643 52 a FF(307)259 351 y
-Fd(ax1)427 451 y Fj(The)30 b(index)f(of)h(the)f(Mapping)g(output)h(for)
-f(whic)n(h)g(the)h(rate)f(of)g(c)n(hange)f(is)i(to)f(b)r(e)h(found)g
-(\(output)g(n)n(um-)427 551 y(b)r(ering)d(starts)g(at)h(1)f(for)g(the)h
-(\014rst)f(output\).)259 693 y Fd(ax2)427 793 y Fj(The)35
-b(index)g(of)g(the)g(Mapping)g(input)h(whic)n(h)e(is)h(to)g(b)r(e)g(v)
--5 b(aried)35 b(in)g(order)e(to)i(\014nd)g(the)h(rate)e(of)h(c)n(hange)
-427 893 y(\(input)29 b(n)n(um)n(b)r(ering)e(starts)g(at)g(1)g(for)g
-(the)h(\014rst)g(input\).)0 1074 y Fd(Returned)k(V)-8
-b(alue:)259 1231 y(astRate\(\))427 1330 y Fj(The)26 b(rate)e(of)i(c)n
-(hange)e(of)h(Mapping)g(output)h Ft(")p Fj(ax1)p Ft(")e
-Fj(with)i(resp)r(ect)f(to)g(input)h Ft(")p Fj(ax2)p Ft(")p
-Fj(,)e(ev)-5 b(aluated)25 b(at)g Ft(")p Fj(at)p Ft(")p
-Fj(,)427 1430 y(or)i(AST)p Ft(__)p Fj(BAD)h(if)g(the)g(v)-5
-b(alue)27 b(cannot)g(b)r(e)h(calculated.)0 1612 y Fd(Notes:)340
-1914 y Fi(\017)45 b Fj(A)24 b(v)-5 b(alue)23 b(of)g(AST)p
-Ft(__)p Fj(BAD)h(will)f(b)r(e)h(returned)f(if)h(this)g(function)g(is)f
-(in)n(v)n(ok)n(ed)f(with)i(the)f(global)f(error)g(status)427
-2014 y(set,)28 b(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g(reason.)
-p 0 2233 3780 12 v 0 2364 a Fz(astRateMap)700 b Fe(Create)37
-b(a)i(RateMap)697 b Fz(astRateMap)0 2573 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(RateMap)h(and)f
-(optionally)g(initialises)g(its)h(attributes.)227 2707
-y(A)37 b(RateMap)g(is)f(a)g(Mapping)h(whic)n(h)f(represen)n(ts)g(a)g
-(single)g(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)h(of)h(another)227
-2807 y(Mapping.)k(The)28 b(Mapping)h(for)f(whic)n(h)h(the)g(Jacobian)f
-(is)g(required)g(is)h(sp)r(eci\014ed)g(when)g(the)g(new)g(RateMap)g(is)
-227 2906 y(created,)e(and)h(is)f(referred)f(to)i(as)f(the)h
-Ft(")p Fj(encapsulated)e(Mapping)p Ft(")h Fj(b)r(elo)n(w.)227
-3041 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 3141 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 3240
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 3340 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 3474 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 3574 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-3743 y Fd(Synopsis:)121 b Ft(AstRateMap)39 b Fi(\003)p
-Ft(astRateMap\()g(AstMapping)g Fi(\003)p Ft(map,)j(int)g(ax1,)g(int)g
-(ax2,)g(const)g(char)g Fi(\003)p Ft(options,)227 3843
-y(...)86 b(\))0 4012 y Fd(P)m(arameters:)259 4169 y(map)427
-4268 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Mapping.)259
-4411 y Fd(ax1)427 4511 y Fj(Index)f(of)h(the)f(output)h(from)f(the)g
-(encapsulated)g(Mapping)g(for)f(whic)n(h)h(the)h(rate)e(of)h(c)n(hange)
-f(is)i(required.)427 4610 y(This)g(corresp)r(onds)e(to)i(the)g(delta)g
-(quan)n(tit)n(y)f(forming)g(the)h(n)n(umerator)f(of)g(the)i(required)d
-(elemen)n(t)i(of)g(the)427 4710 y(Jacobian)f(matrix.)37
-b(The)27 b(\014rst)h(axis)f(has)g(index)g(1.)259 4853
-y Fd(ax2)427 4952 y Fj(Index)j(of)g(the)h(input)g(to)f(the)g
-(encapsulated)g(Mapping)f(whic)n(h)h(is)g(to)g(b)r(e)h(v)-5
-b(aried.)43 b(This)31 b(corresp)r(onds)d(to)427 5052
-y(the)h(delta)g(quan)n(tit)n(y)f(forming)h(the)g(denominator)e(of)i
-(the)g(required)f(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix.)427
-5152 y(The)h(\014rst)f(axis)g(has)g(index)h(1.)259 5295
-y Fd(options)427 5394 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 5494 y(assignmen)n(ts)23 b(to)h(b)r(e)g(used)g(for)g
-(initialising)f(the)i(new)f(RateMap.)35 b(The)24 b(syn)n(tax)f(used)h
-(is)g(iden)n(tical)f(to)h(that)427 5593 y(for)i(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 5693 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)p eop end
-%%Page: 308 318
-TeXDict begin 308 317 bop 0 52 a FF(308)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(...)427
-451 y Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n
-(tains)f Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f
-(an)f(optional)g(list)h(of)f(additional)427 551 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 650 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 750 y Fj(function\).)0
-907 y Fd(Returned)32 b(V)-8 b(alue:)259 1039 y(astRateMap\(\))427
-1139 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(RateMap.)0
-1297 y Fd(Notes:)340 1575 y Fi(\017)45 b Fj(The)28 b(forw)n(ard)e
-(transformation)g(of)h(the)h(encapsulated)f(Mapping)g(m)n(ust)h(b)r(e)g
-(de\014ned.)340 1703 y Fi(\017)45 b Fj(Note)19 b(that)g(the)g(comp)r
-(onen)n(t)g(Mappings)f(supplied)h(are)e(not)i(copied)g(b)n(y)f
-(astRateMap)g(\(the)h(new)g(RateMap)427 1803 y(simply)31
-b(retains)f(a)g(reference)f(to)i(them\).)46 b(They)31
-b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)g(for)f(other)f(purp)r
-(oses,)i(but)427 1902 y(should)21 b(not)g(b)r(e)h(deleted.)35
-b(If)22 b(a)e(RateMap)h(con)n(taining)f(a)h(cop)n(y)f(of)i(its)f(comp)r
-(onen)n(t)g(Mappings)f(is)i(required,)427 2002 y(then)28
-b(a)g(cop)n(y)e(of)i(the)g(RateMap)f(should)g(b)r(e)h(made)g(using)f
-(astCop)n(y)-7 b(.)340 2131 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2230 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2421 3780 12 v 0 2552
-a Fz(astRead)595 b Fe(Read)39 b(an)g(Ob)7 b(ject)38 b(from)f(a)i
-(Channel)592 b Fz(astRead)0 2733 y Fd(Description:)44
-b Fj(This)35 b(function)g(reads)f(the)h(next)g(Ob)5 b(ject)34
-b(from)h(a)f(Channel)h(and)f(returns)g(a)h(p)r(oin)n(ter)f(to)g(the)i
-(new)227 2832 y(Ob)5 b(ject.)0 2977 y Fd(Synopsis:)121
-b Ft(AstObject)40 b Fi(\003)p Ft(astRead\()g(AstChannel)f
-Fi(\003)p Ft(this)i(\))0 3122 y Fd(P)m(arameters:)259
-3254 y(this)427 3354 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)0
-3512 y Fd(Class)j(Applicabilit)m(y:)259 3644 y(FitsChan)427
-3743 y Fj(All)k(successful)f(use)h(of)f(astRead)g(on)g(a)g(FitsChan)h
-(is)f(destructiv)n(e,)i(so)e(that)h(FITS)g(header)e(cards)h(are)427
-3843 y(consumed)j(in)h(the)f(pro)r(cess)f(of)i(reading)e(an)h(Ob)5
-b(ject,)39 b(and)e(are)g(remo)n(v)n(ed)e(from)i(the)h(FitsChan)f
-(\(this)427 3943 y(deletion)28 b(can)g(b)r(e)g(prev)n(en)n(ted)f(for)h
-(sp)r(eci\014c)g(cards)f(b)n(y)g(calling)g(the)i(FitsChan)f
-(astRetainFits)g(function\).)427 4042 y(An)37 b(unsuccessful)g(call)f
-(of)g(astRead)g(\(for)g(instance,)j(caused)d(b)n(y)g(the)h(FitsChan)f
-(not)h(con)n(taining)e(the)427 4142 y(necessary)j(FITS)h(headers)f
-(cards)g(needed)i(to)f(create)f(an)h(Ob)5 b(ject\))39
-b(results)g(in)g(the)h(con)n(ten)n(ts)e(of)h(the)427
-4241 y(FitsChan)28 b(b)r(eing)g(left)g(unc)n(hanged.)259
-4370 y Fd(StcsChan)427 4470 y Fj(The)33 b(AST)g(Ob)5
-b(ject)33 b(returned)f(b)n(y)h(a)f(successful)h(use)f(of)h(astRead)f
-(on)h(an)f(StcsChan,)i(will)f(b)r(e)g(either)g(a)427
-4569 y(Region)g(or)f(a)h(KeyMap,)i(dep)r(ending)e(on)g(the)h(v)-5
-b(alues)33 b(of)h(the)f(StcsArea,)i(StcsCo)r(ords)d(and)h(StcsProps)427
-4669 y(attributes.)k(See)28 b(the)g(do)r(cumen)n(tation)f(for)g(these)h
-(attributes)f(for)g(further)h(information.)0 4826 y Fd(Returned)k(V)-8
-b(alue:)259 4958 y(astRead\(\))427 5058 y Fj(A)28 b(p)r(oin)n(ter)f(to)
-g(the)h(new)g(Ob)5 b(ject.)36 b(The)28 b(class)e(to)h(whic)n(h)h(this)f
-(will)h(b)r(elong)f(is)g(determined)h(b)n(y)f(the)h(input)427
-5158 y(data,)f(so)g(is)h(not)f(kno)n(wn)g(in)h(adv)-5
-b(ance.)0 5315 y Fd(Notes:)340 5593 y Fi(\017)45 b Fj(A)24
-b(n)n(ull)g(Ob)5 b(ject)24 b(p)r(oin)n(ter)f(\(AST)p
-Ft(__)p Fj(NULL\))h(will)g(b)r(e)h(returned,)f(without)g(error,)f(if)h
-(the)g(Channel)g(con)n(tains)427 5693 y(no)k(further)f(Ob)5
-b(jects)27 b(to)h(b)r(e)g(read.)p eop end
-%%Page: 309 319
-TeXDict begin 309 318 bop 3643 52 a FF(309)340 351 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)34 b(p)r(oin)n(ter)g(will)
-h(also)f(b)r(e)h(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n
-(ed)g(with)h(the)g(AST)g(error)427 451 y(status)28 b(set,)f(or)g(if)h
-(it)g(should)g(fail)f(for)g(an)n(y)g(reason.)p 0 662
-3780 12 v 0 794 a Fz(astRebin)p Fc(<)p Fz(X)p Fc(>)344
-b Fe(Rebin)39 b(a)f(region)f(of)i(a)f(data)g(grid)342
-b Fz(astRebin)p Fc(<)p Fz(X)p Fc(>)0 1000 y Fd(Description:)44
-b Fj(This)29 b(is)f(a)g(set)g(of)g(functions)h(for)e(rebinning)h
-(gridded)g(data)g(\(e.g.)38 b(an)28 b(image\))g(under)g(the)h(con)n
-(trol)e(of)227 1099 y(a)f(geometrical)f(transformation,)g(whic)n(h)h
-(is)g(sp)r(eci\014ed)h(b)n(y)f(a)g(Mapping.)36 b(The)26
-b(functions)h(op)r(erate)e(on)h(a)g(pair)g(of)227 1199
-y(data)f(grids)f(\(input)i(and)f(output\),)i(eac)n(h)d(of)h(whic)n(h)g
-(ma)n(y)g(ha)n(v)n(e)f(an)n(y)g(n)n(um)n(b)r(er)h(of)g(dimensions.)36
-b(Rebinning)25 b(ma)n(y)227 1298 y(b)r(e)e(restricted)f(to)g(a)g(sp)r
-(eci\014ed)g(region)f(of)i(the)f(input)h(grid.)35 b(An)23
-b(asso)r(ciated)e(grid)g(of)i(error)d(estimates)i(asso)r(ciated)227
-1398 y(with)30 b(the)g(input)g(data)f(ma)n(y)g(also)f(b)r(e)i(supplied)
-g(\(in)g(the)g(form)f(of)g(v)-5 b(ariance)29 b(v)-5 b(alues\),)30
-b(so)e(as)h(to)h(pro)r(duce)f(error)227 1498 y(estimates)f(for)f(the)h
-(rebined)f(output)h(data.)37 b(Propagation)24 b(of)k(missing)f(data)g
-(\(bad)h(pixels\))g(is)f(supp)r(orted.)227 1628 y(Note,)d(if)f(y)n(ou)e
-(will)i(b)r(e)g(rebining)f(a)g(sequence)g(of)g(input)i(arra)n(ys)19
-b(and)k(then)g(co-adding)e(them)i(in)n(to)f(a)g(single)g(arra)n(y)-7
-b(,)227 1728 y(the)28 b(alternativ)n(e)f(astRebinSeq)p
-Fl(<)p Fj(X)p Fl(>)f Fj(functions)i(will)g(in)g(general)e(b)r(e)i(more)
-f(e\016cien)n(t.)227 1859 y(Y)-7 b(ou)32 b(should)g(use)g(a)g
-(rebinning)g(function)g(whic)n(h)g(matc)n(hes)g(the)g(n)n(umerical)g(t)
-n(yp)r(e)g(of)g(the)h(data)e(y)n(ou)h(are)f(pro-)227
-1958 y(cessing)36 b(b)n(y)h(replacing)e Fl(<)p Fj(X)p
-Fl(>)h Fj(in)h(the)h(generic)d(function)j(name)e(astRebin)p
-Fl(<)p Fj(X)p Fl(>)g Fj(b)n(y)h(an)f(appropriate)f(1-)h(or)227
-2058 y(2-c)n(haracter)29 b(t)n(yp)r(e)j(co)r(de.)49 b(F)-7
-b(or)31 b(example,)h(if)h(y)n(ou)e(are)f(rebinning)i(data)f(with)h(t)n
-(yp)r(e)g Ft(")p Fj(\015oat)p Ft(")p Fj(,)f(y)n(ou)g(should)h(use)227
-2157 y(the)j(function)f(astRebinF)g(\(see)g(the)h Ft(")p
-Fj(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fj(section)h(b)r(elo)n(w)f
-(for)h(the)g(co)r(des)f(appropriate)g(to)227 2257 y(other)27
-b(n)n(umerical)g(t)n(yp)r(es\).)227 2388 y(Rebinning)i(of)g(the)g(grid)
-f(of)g(input)i(data)e(is)h(p)r(erformed)f(b)n(y)g(transforming)g(the)h
-(co)r(ordinates)e(of)i(the)g(cen)n(tre)f(of)227 2487
-y(eac)n(h)h(input)g(grid)g(elemen)n(t)g(\(or)f(pixel\))i(in)n(to)f(the)
-g(co)r(ordinate)f(system)h(of)g(the)g(output)h(grid.)41
-b(The)29 b(input)h(pixel)227 2587 y(v)-5 b(alue)35 b(is)g(then)h
-(divided)f(up)h(and)f(assigned)f(to)h(the)g(output)h(pixels)f(in)g(the)
-h(neigh)n(b)r(ourho)r(o)r(d)e(of)h(the)h(cen)n(tral)227
-2687 y(output)30 b(co)r(ordinates.)39 b(A)29 b(c)n(hoice)g(of)f(sc)n
-(hemes)h(are)f(pro)n(vided)f(for)i(determining)g(ho)n(w)f(eac)n(h)g
-(input)i(pixel)f(v)-5 b(alue)227 2786 y(is)24 b(divided)g(up)h(b)r(et)n
-(w)n(een)f(the)g(output)g(pixels.)36 b(In)24 b(general,)f(eac)n(h)h
-(output)g(pixel)g(ma)n(y)f(b)r(e)i(assigned)d(v)-5 b(alues)24
-b(from)227 2886 y(more)18 b(than)h(one)g(input)h(pixel.)34
-b(All)19 b(con)n(tributions)f(to)h(a)f(giv)n(en)h(output)g(pixel)g(are)
-f(summed)h(to)g(pro)r(duce)f(the)i(\014nal)227 2985 y(output)25
-b(pixel)f(v)-5 b(alue.)36 b(Output)25 b(pixels)f(can)f(b)r(e)i(set)f
-(to)g(the)h(supplied)f(bad)g(v)-5 b(alue)24 b(if)h(they)g(receiv)n(e)d
-(con)n(tributions)227 3085 y(from)28 b(an)f(insu\016cien)n(t)h(n)n(um)n
-(b)r(er)f(of)h(input)g(pixels.)37 b(This)27 b(is)h(con)n(trolled)e(b)n
-(y)h(the)h Ft(")p Fj(wlim)p Ft(")f Fj(parameter.)227
-3216 y(Input)34 b(pixel)e(co)r(ordinates)g(are)f(transformed)h(in)n(to)
-g(the)h(co)r(ordinate)f(system)g(of)h(the)g(output)g(grid)f(using)g
-(the)227 3315 y(forw)n(ard)f(transformation)f(of)i(the)h(Mapping)f
-(whic)n(h)g(is)g(supplied.)50 b(This)33 b(means)e(that)i(geometrical)d
-(features)227 3415 y(in)i(the)f(input)h(data)f(are)f(sub)5
-b(jected)31 b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i
-(they)g(are)f(transferred)227 3515 y(from)e(the)g(input)g(to)f(the)h
-(output)g(grid.)227 3645 y(In)c(practice,)f(transforming)e(the)j(co)r
-(ordinates)e(of)h(ev)n(ery)e(pixel)j(of)f(a)f(large)g(data)h(grid)f
-(can)h(b)r(e)g(time-consuming,)227 3745 y(esp)r(ecially)38
-b(if)g(the)h(Mapping)f(in)n(v)n(olv)n(es)e(complicated)i(functions,)j
-(suc)n(h)c(as)h(sky)f(pro)5 b(jections.)67 b(T)-7 b(o)38
-b(impro)n(v)n(e)227 3844 y(p)r(erformance,)29 b(it)g(is)g(therefore)f
-(p)r(ossible)g(to)h(appro)n(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)
-g(set)g(of)f(linear)h(trans-)227 3944 y(formations)h(whic)n(h)h(are)f
-(applied)g(piece-wise)h(to)f(separate)g(sub-regions)f(of)h(the)i(data.)
-46 b(This)30 b(appro)n(ximation)227 4044 y(pro)r(cess)37
-b(is)h(applied)g(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)
-i(under)f(con)n(trol)f(of)h(an)g(accuracy)e(crite-)227
-4143 y(rion)25 b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f
-(geometrical)f(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r
-(duced,)f(as)f(a)227 4243 y(fraction)i(of)h(a)f(pixel.)227
-4374 y(This)34 b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(with)h(a)f(linear)g(transformation)f(applied)227
-4473 y(o)n(v)n(er)j(the)j(whole)e(region)g(of)h(the)g(input)h(grid)e
-(whic)n(h)h(is)g(b)r(eing)g(used.)65 b(If)37 b(this)g(pro)n(v)n(es)e
-(to)i(b)r(e)g(insu\016cien)n(tly)227 4573 y(accurate,)c(the)h(input)f
-(region)f(is)h(sub-divided)g(in)n(to)f(t)n(w)n(o)h(along)e(its)i
-(largest)f(dimension)h(and)g(the)g(pro)r(cess)f(is)227
-4672 y(rep)r(eated)h(within)h(eac)n(h)f(of)g(the)h(resulting)e
-(sub-regions.)53 b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n
-(tin)n(ues)f(un)n(til)i(a)227 4772 y(su\016cien)n(tly)27
-b(go)r(o)r(d)g(linear)f(appro)n(ximation)g(is)h(found,)g(or)f(the)i
-(region)e(to)h(whic)n(h)g(it)h(is)f(b)r(eing)g(applied)g(b)r(ecomes)227
-4872 y(to)r(o)h(small)f(\(in)h(whic)n(h)f(case)g(the)h(original)e
-(Mapping)h(is)h(used)g(directly\).)0 5033 y Fd(Synopsis:)121
-b Ft(void)42 b(astRebin)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstMapping)i
-Fi(\003)p Ft(this,)h(double)g(wlim,)g(int)i(ndim_in,)d(const)i(int)g
-(lbnd_in[],)227 5133 y(const)g(int)g(ubnd_in[],)e(const)h
-Fl(<)p Ft(Xtype)p Fl(>)g Ft(in[],)g(const)h Fl(<)p Ft(Xtype)p
-Fl(>)e Ft(in_var[],)g(int)j(spread,)d(const)227 5233
-y(double)h(params[],)f(int)j(flags,)e(double)g(tol,)h(int)g(maxpix,)f
-Fl(<)p Ft(Xtype)p Fl(>)f Ft(badval,)h(int)h(ndim_out,)227
-5332 y(const)g(int)g(lbnd_out[],)d(const)j(int)g(ubnd_out[],)d(const)j
-(int)g(lbnd[],)f(const)g(int)h(ubnd[],)f Fl(<)p Ft(Xtype)p
-Fl(>)227 5432 y Ft(out[],)g Fl(<)p Ft(Xtype)p Fl(>)g
-Ft(out_var[])f(\);)0 5593 y Fd(P)m(arameters:)p eop end
-%%Page: 310 320
-TeXDict begin 310 319 bop 0 52 a FF(310)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(this)427
-451 y Fj(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d(forw)n(ard)f
-(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f(the)h(co)r
-(ordinates)427 551 y(of)28 b(pixels)f(in)h(the)g(input)g(grid)f(in)n
-(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g(grid.)427
-667 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e(used)h(b)n
-(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 767 y(matc)n(h)e(the)g(n)n(um)n(b)r(er)g(of)g
-(input)h(grid)e(dimensions)h(giv)n(en)f(b)n(y)g(the)i(v)-5
-b(alue)23 b(of)g Ft(")p Fj(ndim)p Ft(_)p Fj(in)p Ft(")f
-Fj(b)r(elo)n(w.)35 b(Similarly)-7 b(,)427 867 y(the)29
-b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)f(\(Nout)h
-(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g(of)g(output)
-g(grid)427 966 y(dimensions)g(giv)n(en)e(b)n(y)i Ft(")p
-Fj(ndim)p Ft(_)p Fj(out)p Ft(")p Fj(.)259 1100 y Fd(wlim)427
-1200 y Fj(Giv)n(es)f(the)g(required)f(n)n(um)n(b)r(er)g(of)h(input)h
-(pixel)f(v)-5 b(alues)26 b(whic)n(h)h(m)n(ust)g(con)n(tribute)g(to)f
-(an)h(output)g(pixel)g(in)427 1299 y(order)f(for)h(the)h(output)f
-(pixel)h(v)-5 b(alue)27 b(to)g(b)r(e)h(considered)e(v)-5
-b(alid.)37 b(If)27 b(the)h(sum)f(of)h(the)f(input)h(pixel)g(w)n(eigh)n
-(ts)427 1399 y(con)n(tributing)e(to)h(an)f(output)h(pixel)f(is)h(less)f
-(than)g(the)h(supplied)g Ft(")p Fj(wlim)p Ft(")f Fj(v)-5
-b(alue,)27 b(then)g(the)g(output)g(pixel)427 1499 y(v)-5
-b(alue)28 b(is)f(returned)g(set)h(to)f(the)h(supplied)g(bad)g(v)-5
-b(alue.)259 1633 y Fd(ndim)p Ft(_)p Fd(in)427 1732 y
-Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g
-(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f(one.)259
-1866 y Fd(lbnd)p Ft(_)p Fd(in)427 1966 y Fj(P)n(oin)n(ter)i(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 2065 y(cen)n(tre)d(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-2199 y Fd(ubnd)p Ft(_)p Fd(in)427 2299 y Fj(P)n(oin)n(ter)i(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 2399 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h
-(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)427
-2515 y(Note)h(that)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p
-Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(together)g(de\014ne)h(the)h(shap)r(e)f(and)f(size)h(of)g(the)g
-(input)h(grid,)e(its)427 2615 y(exten)n(t)f(along)f(a)g(particular)f
-(\(j'th\))k(dimension)d(b)r(eing)h(ubnd)p Ft(_)p Fj(in[j]-lbnd)p
-Ft(_)p Fj(in[j]+1)g(\(assuming)f(the)i(index)427 2715
-y Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)g(zero-based\).)35
-b(They)26 b(also)f(de\014ne)h(the)h(input)g(grid's)e(co)r(ordinate)g
-(system,)h(eac)n(h)g(pixel)g(ha)n(ving)427 2814 y(unit)j(exten)n(t)e
-(along)g(eac)n(h)f(dimension)i(with)g(in)n(tegral)e(co)r(ordinate)h(v)
--5 b(alues)27 b(at)g(its)h(cen)n(tre.)259 2948 y Fd(in)427
-3048 y Fj(P)n(oin)n(ter)h(to)i(an)f(arra)n(y)-7 b(,)30
-b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)f(con)n(taining)f(the)h(input)427 3148 y(data)25
-b(to)g(b)r(e)g(rebined.)36 b(The)25 b(n)n(umerical)g(t)n(yp)r(e)g(of)g
-(this)h(arra)n(y)c(should)j(matc)n(h)g(the)h(1-)e(or)g(2-c)n(haracter)e
-(t)n(yp)r(e)427 3247 y(co)r(de)27 b(app)r(ended)g(to)f(the)h(function)h
-(name)e(\(e.g.)37 b(if)27 b(y)n(ou)f(are)f(using)i(astRebinF,)f(the)i
-(t)n(yp)r(e)e(of)h(eac)n(h)f(arra)n(y)427 3347 y(elemen)n(t)i(should)f
-(b)r(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 3464 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-3563 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g
-(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 3663 y(indexing)28
-b(is)f(used\).)259 3797 y Fd(in)p Ft(_)p Fd(v)-5 b(ar)427
-3896 y Fj(An)25 b(optional)e(p)r(oin)n(ter)h(to)g(a)f(second)h(arra)n
-(y)e(with)i(the)h(same)e(size)h(and)g(t)n(yp)r(e)g(as)f(the)i
-Ft(")p Fj(in)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)24 b(giv)n(en,)427
-3996 y(this)32 b(should)g(con)n(tain)f(a)g(set)h(of)g(non-negativ)n(e)e
-(v)-5 b(alues)31 b(whic)n(h)h(represen)n(t)f(estimates)g(of)h(the)g
-(statistical)427 4096 y(v)-5 b(ariance)32 b(asso)r(ciated)f(with)i(eac)
-n(h)f(elemen)n(t)g(of)h(the)g Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)-7
-b(.)49 b(If)33 b(this)g(arra)n(y)d(is)i(supplied)h(\(together)427
-4195 y(with)23 b(the)f(corresp)r(onding)e Ft(")p Fj(out)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")20 b Fj(arra)n(y\),)h(then)h(estimates)g(of)
-g(the)g(v)-5 b(ariance)21 b(of)h(the)g(rebined)g(output)427
-4295 y(data)27 b(will)h(b)r(e)g(calculated.)427 4412
-y(If)g(no)g(input)g(v)-5 b(ariance)26 b(estimates)i(are)e(b)r(eing)i
-(pro)n(vided,)f(a)g(NULL)h(p)r(oin)n(ter)f(should)g(b)r(e)h(giv)n(en.)
-259 4546 y Fd(spread)427 4645 y Fj(This)23 b(parameter)e(sp)r
-(eci\014es)i(the)g(sc)n(heme)g(to)g(b)r(e)g(used)g(for)f(dividing)h
-(eac)n(h)f(input)h(data)g(v)-5 b(alue)22 b(up)i(amongst)427
-4745 y(the)30 b(corresp)r(onding)d(output)j(pixels.)42
-b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g(set)g(of)g
-(pre-de\014ned)g(sc)n(hemes)427 4845 y(b)n(y)f(supplying)f(one)g(of)h
-(the)g(v)-5 b(alues)27 b(describ)r(ed)g(in)h(the)g Ft(")p
-Fj(Pixel)f(Spreading)g(Sc)n(hemes)p Ft(")f Fj(section)i(b)r(elo)n(w.)36
-b(If)427 4944 y(a)d(v)-5 b(alue)34 b(of)f(zero)g(is)g(supplied,)i(then)
-f(the)g(default)g(linear)f(spreading)f(sc)n(heme)h(is)h(used)f(\(equiv)
--5 b(alen)n(t)34 b(to)427 5044 y(supplying)28 b(the)g(v)-5
-b(alue)27 b(AST)p Ft(__)p Fj(LINEAR\).)259 5178 y Fd(params)427
-5277 y Fj(An)36 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(arra)n(y)e(of)i
-(double)g(whic)n(h)h(should)e(con)n(tain)h(an)n(y)f(additional)h
-(parameter)427 5377 y(v)-5 b(alues)30 b(required)f(b)n(y)h(the)g(pixel)
-g(spreading)e(sc)n(heme.)44 b(If)30 b(suc)n(h)g(parameters)e(are)h
-(required,)h(this)g(will)g(b)r(e)427 5477 y(noted)e(in)g(the)g
-Ft(")p Fj(Pixel)e(Spreading)h(Sc)n(hemes)p Ft(")g Fj(section)g(b)r(elo)
-n(w.)427 5593 y(If)i(no)e(additional)h(parameters)e(are)h(required,)g
-(this)i(arra)n(y)c(is)j(not)g(used)g(and)g(a)g(NULL)g(p)r(oin)n(ter)g
-(ma)n(y)f(b)r(e)427 5693 y(giv)n(en.)p eop end
-%%Page: 311 321
-TeXDict begin 311 320 bop 3643 52 a FF(311)259 351 y
-Fd(\015ags)427 451 y Fj(The)21 b(bit)n(wise)g(OR)f(of)h(a)f(set)h(of)f
-(\015ag)g(v)-5 b(alues)20 b(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)f
-(pro)n(vide)g(additional)g(con)n(trol)f(o)n(v)n(er)g(the)427
-551 y(rebinning)30 b(op)r(eration.)45 b(See)31 b(the)f
-Ft(")p Fj(Con)n(trol)f(Flags)p Ft(")g Fj(section)i(b)r(elo)n(w)f(for)g
-(a)g(description)g(of)g(the)h(options)427 650 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 796 y Fd(tol)427 895 y Fj(The)34
-b(maxim)n(um)f(tolerable)f(geometrical)f(distortion)i(whic)n(h)g(ma)n
-(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h(result)g(of)g(ap-)427
-995 y(pro)n(ximating)c(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g
-(piece-wise)f(linear)g(transformations.)42 b(This)30
-b(should)427 1095 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)n(t)g(in)h
-(pixels)f(in)h(the)g(output)g(grid's)f(co)r(ordinate)f(system.)427
-1217 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f(is)h(not)h
-(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n
-(en.)54 b(This)33 b(will)427 1317 y(ensure)k(that)g(the)h(Mapping)e(is)
-h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e
-(increase)g(execution)427 1417 y(time.)427 1539 y(If)d(the)f(v)-5
-b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n(uities)e(b)r(et)n(w)n
-(een)h(the)h(linear)e(appro)n(ximations)f(used)i(in)g(adjacen)n(t)427
-1639 y(panel)h(will)g(b)r(e)g(higher,)h(and)f(ma)n(y)f(cause)g(the)i
-(edges)e(of)h(the)g(panel)g(to)g(b)r(e)g(visible)g(when)g(viewing)f
-(the)427 1738 y(output)c(image)f(at)h(high)f(con)n(trast.)36
-b(If)28 b(this)g(is)f(a)g(problem,)g(reduce)h(the)g(tolerance)e(v)-5
-b(alue)27 b(used.)259 1884 y Fd(maxpix)427 1984 y Fj(A)42
-b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g(initial)g(scale)g
-(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e(algorithm)g(whic)n
-(h)427 2083 y(appro)n(ximates)d(non-linear)g(Mappings)h(with)h
-(piece-wise)f(linear)g(transformations.)68 b(Normally)-7
-b(,)40 b(this)427 2183 y(should)e(b)r(e)g(a)g(large)e(v)-5
-b(alue)38 b(\(larger)e(than)j(an)n(y)e(dimension)h(of)f(the)i(region)d
-(of)i(the)h(input)f(grid)g(b)r(eing)427 2283 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-2382 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 2505 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 2604 y(do)r(es)39
-b(not)h(exceed)f Ft(")p Fj(maxpix)p Ft(")f Fj(pixels)i(in)g(an)n(y)e
-(dimension.)73 b(Only)39 b(at)g(this)h(p)r(oin)n(t)g(will)g(attempts)g
-(at)427 2704 y(appro)n(ximation)26 b(commence.)427 2827
-y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)
-f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h
-(adaptiv)n(e)e(al-)427 2926 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 3026 y(irregularities)27 b(\(e.g.)40
-b(holes\))28 b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5
-b(alue)28 b(of,)h(sa)n(y)-7 b(,)28 b(50)g(to)g(100)g(pixels)g(can)g
-(also)g(b)r(e)h(em-)427 3126 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f
-(in)i(general-purp)r(ose)d(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f
-(on)h(p)r(erformance)e(is)h(minimal.)427 3248 y(If)e(to)r(o)f(small)g
-(a)g(v)-5 b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i
-(e\013ect)g(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)
-427 3348 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g
-Ft(")p Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20
-b(this)g(ma)n(y)f(degrade)f(p)r(erformance,)j(accurate)d(results)427
-3447 y(will)28 b(still)g(b)r(e)g(obtained.)259 3593 y
-Fd(badv)-5 b(al)427 3693 y Fj(This)29 b(argumen)n(t)f(should)h(ha)n(v)n
-(e)e(the)j(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h(the)g
-Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29 b(sp)r(eci\014es)g
-(the)427 3792 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g
-(\(bad)h(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-3915 y(If)33 b(the)f(AST)p Ft(__)p Fj(USEBAD)g(\015ag)g(is)g(set)g(via)
-g(the)g Ft(")p Fj(\015ags)p Ft(")e Fj(parameter,)i(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)g(to)g(test)427 4015 y(for)27 b(bad)h(pixels)f
-(in)h(the)g Ft(")p Fj(in)p Ft(")f Fj(\(and)h Ft(")p Fj(in)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")p Fj(\))26 b(arra)n(y\(s\).)427
-4137 y(In)i(all)f(cases,)f(this)i(v)-5 b(alue)27 b(is)g(also)f(used)h
-(to)g(\015ag)g(an)n(y)f(output)i(elemen)n(ts)f(in)h(the)g
-Ft(")p Fj(out)p Ft(")e Fj(\(and)h Ft(")p Fj(out)p Ft(_)p
-Fj(v)-5 b(ar)p Ft(")p Fj(\))427 4237 y(arra)n(y\(s\))34
-b(for)i(whic)n(h)g(rebined)g(v)-5 b(alues)36 b(could)g(not)h(b)r(e)f
-(obtained)g(\(see)g(the)h Ft(")p Fj(Propagation)c(of)j(Missing)427
-4336 y(Data)p Ft(")27 b Fj(section)g(b)r(elo)n(w)h(for)f(details)g(of)h
-(the)g(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)
-259 4482 y Fd(ndim)p Ft(_)p Fd(out)427 4582 y Fj(The)38
-b(n)n(um)n(b)r(er)f(of)g(dimensions)g(in)h(the)f(output)h(grid.)66
-b(This)37 b(should)g(b)r(e)h(at)f(least)g(one.)65 b(It)38
-b(need)g(not)427 4681 y(necessarily)26 b(b)r(e)i(equal)f(to)h(the)g(n)n
-(um)n(b)r(er)f(of)h(dimensions)f(in)h(the)g(input)g(grid.)259
-4827 y Fd(lbnd)p Ft(_)p Fd(out)427 4927 y Fj(P)n(oin)n(ter)d(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 5026 y(cen)n(tre)h(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)259
-5172 y Fd(ubnd)p Ft(_)p Fd(out)427 5271 y Fj(P)n(oin)n(ter)e(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 5371 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h
-(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)427
-5494 y(Note)e(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p
-Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p Fj(out)p Ft(")g
-Fj(together)g(de\014ne)h(the)g(shap)r(e,)g(size)g(and)f(co)r(ordinate)g
-(system)427 5593 y(of)32 b(the)f(output)h(grid)f(in)g(the)h(same)f(w)n
-(a)n(y)f(as)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")e Fj(de\014ne)i(the)g
-(shap)r(e,)g(size)f(and)427 5693 y(co)r(ordinate)c(system)g(of)h(the)g
-(input)g(grid.)p eop end
-%%Page: 312 322
-TeXDict begin 312 321 bop 0 52 a FF(312)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(lbnd)427
-451 y Fj(P)n(oin)n(ter)f(to)i(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)
-h Ft(")p Fj(ndim)p Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n
-(taining)f(the)h(co)r(ordinates)e(of)h(the)427 551 y(\014rst)d(pixel)f
-(in)h(the)g(region)e(of)h(the)h(input)h(grid)e(whic)n(h)g(is)g(to)h(b)r
-(e)g(included)g(in)g(the)f(rebined)h(output)g(arra)n(y)-7
-b(.)259 691 y Fd(ubnd)427 790 y Fj(P)n(oin)n(ter)29 b(to)i(an)f(arra)n
-(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p
-Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e
-(of)h(the)427 890 y(last)d(pixel)h(in)f(the)h(region)e(of)h(the)h
-(input)g(grid)e(whic)n(h)i(is)f(to)g(b)r(e)h(included)g(in)f(the)h
-(rebined)f(output)h(arra)n(y)-7 b(.)427 1010 y(Note)23
-b(that)h Ft(")p Fj(lbnd)p Ft(")e Fj(and)h Ft(")p Fj(ubnd)p
-Ft(")g Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)f(p)r(osition)h
-(of)g(a)g(\(h)n(yp)r(er-\)rectangular)427 1110 y(region)c(of)i(the)f
-(input)h(grid)f(whic)n(h)g(is)g(to)h(b)r(e)f(included)h(in)g(the)f
-(rebined)h(output)f(arra)n(y)-7 b(.)33 b(This)20 b(region)f(should)427
-1209 y(lie)33 b(wholly)g(within)g(the)g(exten)n(t)g(of)g(the)g(input)h
-(grid)e(\(as)g(de\014ned)h(b)n(y)g(the)g Ft(")p Fj(lbnd)p
-Ft(_)p Fj(in)p Ft(")f Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p
-Fj(in)p Ft(")427 1309 y Fj(arra)n(ys\).)i(Regions)26
-b(of)i(the)g(input)g(grid)f(lying)h(outside)f(this)h(region)e(will)i
-(not)g(b)r(e)g(used.)259 1449 y Fd(out)427 1549 y Fj(P)n(oin)n(ter)e
-(to)h(an)g(arra)n(y)-7 b(,)26 b(with)i(one)f(elemen)n(t)g(for)g(eac)n
-(h)f(pixel)i(in)g(the)f(output)h(grid,)f(in)h(whic)n(h)f(the)h(rebined)
-427 1648 y(data)e(v)-5 b(alues)26 b(will)g(b)r(e)g(returned.)36
-b(The)26 b(n)n(umerical)f(t)n(yp)r(e)i(of)f(this)g(arra)n(y)e(should)i
-(matc)n(h)f(that)i(of)f(the)g Ft(")p Fj(in)p Ft(")427
-1748 y Fj(arra)n(y)-7 b(,)31 b(and)g(the)h(data)g(storage)d(order)i
-(should)g(b)r(e)h(suc)n(h)g(that)g(the)g(index)g(of)f(the)h(\014rst)g
-(grid)f(dimension)427 1848 y(v)-5 b(aries)27 b(most)g(rapidly)f(and)i
-(that)f(of)h(the)f(\014nal)h(dimension)f(least)g(rapidly)f(\(i.e.)38
-b(F)-7 b(ortran)26 b(arra)n(y)f(indexing)427 1947 y(is)j(used\).)259
-2087 y Fd(out)p Ft(_)p Fd(v)-5 b(ar)427 2187 y Fj(An)25
-b(optional)f(p)r(oin)n(ter)g(to)h(an)f(arra)n(y)e(with)j(the)g(same)f
-(t)n(yp)r(e)h(and)f(size)h(as)f(the)h Ft(")p Fj(out)p
-Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)25 b(giv)n(en,)f(this)427
-2287 y(arra)n(y)29 b(will)i(b)r(e)h(used)f(to)g(return)f(v)-5
-b(ariance)30 b(estimates)h(for)g(the)g(rebined)g(data)g(v)-5
-b(alues.)47 b(This)31 b(arra)n(y)d(will)427 2386 y(only)f(b)r(e)h(used)
-g(if)g(the)g Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26
-b Fj(arra)n(y)f(has)i(also)g(b)r(een)h(supplied.)427
-2506 y(The)23 b(output)f(v)-5 b(ariance)22 b(v)-5 b(alues)21
-b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f(that)g(errors)e
-(on)i(the)h(input)g(data)427 2606 y(v)-5 b(alues)24 b(are)g
-(statistically)f(indep)r(enden)n(t)i(and)g(that)f(their)g(v)-5
-b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f(summed)427
-2705 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g(factors\))h(when)h
-(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h(an)f(output)h(data)
-427 2805 y(v)-5 b(alue.)59 b(If)35 b(this)g(assumption)f(is)h(not)g(v)
--5 b(alid,)36 b(then)f(the)h(output)f(error)e(estimates)h(ma)n(y)g(b)r
-(e)h(biased.)58 b(In)427 2905 y(addition,)31 b(note)f(that)h(the)f
-(statistical)g(errors)e(on)i(neigh)n(b)r(ouring)f(output)h(data)g(v)-5
-b(alues)30 b(\(as)g(w)n(ell)g(as)f(the)427 3004 y(estimates)j(of)f
-(those)g(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g
-(if)h(the)g(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427
-3104 y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h(pixel)g
-(spreading)e(sc)n(hemes)h(emplo)n(y)n(ed.)427 3224 y(If)h(no)g(output)g
-(v)-5 b(ariance)26 b(estimates)h(are)g(required,)g(a)g(NULL)h(p)r(oin)n
-(ter)f(should)g(b)r(e)h(giv)n(en.)-2 3401 y Fd(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 3547 y Fj(T)-7 b(o)23
-b(select)f(the)i(appropriate)d(rebinning)h(function,)j(y)n(ou)d(should)
-g(replace)g Fl(<)p Fj(X)p Fl(>)g Fj(in)h(the)h(generic)d(function)j
-(name)227 3646 y(astRebin)p Fl(<)p Fj(X)p Fl(>)e Fj(with)h(a)f(1-)f(or)
-h(2-c)n(haracter)d(data)j(t)n(yp)r(e)g(co)r(de,)i(so)d(as)h(to)g(matc)n
-(h)g(the)h(n)n(umerical)e(t)n(yp)r(e)i Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)227 3746 y Fj(of)28 b(the)g(data)f(y)n(ou)g(are)f(pro)r(cessing,)h
-(as)f(follo)n(ws:)340 3897 y Fi(\017)45 b Fj(D:)28 b(double)340
-4037 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 4177 y Fi(\017)45
-b Fj(I:)28 b(in)n(t)227 4354 y(F)-7 b(or)29 b(example,)h(astRebinD)g(w)
-n(ould)f(b)r(e)i(used)e(to)h(pro)r(cess)e Ft(")p Fj(double)p
-Ft(")h Fj(data,)h(while)g(astRebinI)f(w)n(ould)h(b)r(e)g(used)227
-4454 y(to)e(pro)r(cess)e Ft(")p Fj(in)n(t)p Ft(")h Fj(data,)g(etc.)227
-4586 y(Note)k(that,)h(unlik)n(e)f(astResample)p Fl(<)p
-Fj(X)p Fl(>)p Fj(,)f(the)h(astRebin)p Fl(<)p Fj(X)p Fl(>)f
-Fj(set)h(of)g(functions)g(do)r(es)g(not)f(y)n(et)h(supp)r(ort)g(un-)227
-4685 y(signed)c(in)n(teger)g(data)g(t)n(yp)r(es)h(or)e(in)n(tegers)h
-(of)g(di\013eren)n(t)h(sizes.)-2 4850 y Fd(Pixel)k(Spreading)f(Sc)m
-(hemes)n(:)227 4996 y Fj(The)c(pixel)g(spreading)f(sc)n(heme)g(sp)r
-(eci\014es)h(the)g(P)n(oin)n(t)f(Spread)g(F)-7 b(unction)27
-b(\(PSF\))g(applied)g(to)g(eac)n(h)f(input)i(pixel)227
-5095 y(v)-5 b(alue)34 b(as)g(it)h(is)f(copied)g(in)n(to)g(the)h(output)
-g(arra)n(y)-7 b(.)54 b(It)35 b(can)f(b)r(e)h(though)n(t)f(of)g(as)f
-(the)i(in)n(v)n(erse)e(of)h(the)h(sub-pixel)227 5195
-y(in)n(terp)r(olation)e(sc)n(hemes)g(used)h(b)n(y)g(the)g(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(group)h(of)h(functions.)55 b(That)34
-b(is,)h(in)g(a)e(sub-pixel)227 5295 y(in)n(terp)r(olation)25
-b(sc)n(heme)f(the)i(k)n(ernel)e(sp)r(eci\014es)h(the)h(w)n(eigh)n(t)e
-(to)h(assign)f(to)h(eac)n(h)f(input)i(pixel)f(when)h(forming)e(the)227
-5394 y(w)n(eigh)n(ted)34 b(mean)g(of)h(the)g(input)g(pixels,)h(whereas)
-e(the)g(k)n(ernel)g(in)h(a)f(pixel)h(spreading)e(sc)n(heme)h(sp)r
-(eci\014es)g(the)227 5494 y(fraction)26 b(of)h(the)g(input)h(data)e(v)
--5 b(alue)27 b(whic)n(h)g(is)f(to)h(b)r(e)g(assigned)f(to)g(eac)n(h)g
-(output)i(pixel.)36 b(As)27 b(for)f(in)n(terp)r(olation,)227
-5593 y(the)31 b(c)n(hoice)e(of)h(suitable)h(pixel)f(spreading)f(sc)n
-(heme)g(in)n(v)n(olv)n(es)g(stric)n(king)g(a)h(balance)f(b)r(et)n(w)n
-(een)h(sc)n(hemes)g(whic)n(h)227 5693 y(tend)22 b(to)f(degrade)f(sharp)
-g(features)h(in)g(the)h(data)e(b)n(y)h(smo)r(othing)g(them,)i(and)e
-(those)f(whic)n(h)i(attempt)f(to)g(preserv)n(e)p eop
-end
-%%Page: 313 323
-TeXDict begin 313 322 bop 3643 52 a FF(313)227 351 y
-Fj(sharp)33 b(features)g(but)h(whic)n(h)g(often)g(tend)g(to)f(in)n(tro)
-r(duce)g(un)n(w)n(an)n(ted)g(artifacts.)54 b(See)34 b(the)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)227 451 y Fj(do)r(cumen)n(tation)28
-b(for)f(further)g(discussion.)227 580 y(The)d(binning)g(algorithm)f
-(used)h(has)f(the)h(abilit)n(y)g(to)g(in)n(tro)r(duce)f(artifacts)g
-(not)h(seen)g(when)g(using)f(a)h(resampling)227 680 y(algorithm.)45
-b(P)n(articularly)-7 b(,)28 b(when)j(viewing)f(the)h(output)g(image)f
-(at)g(high)g(con)n(trast,)g(systems)g(of)g(curv)n(es)g(lines)227
-780 y(co)n(v)n(ering)d(the)i(en)n(tire)g(image)f(ma)n(y)g(b)r(e)i
-(visible.)40 b(These)29 b(are)f(caused)g(b)n(y)h(a)f(b)r(eating)h
-(e\013ect)h(b)r(et)n(w)n(een)e(the)i(input)227 879 y(pixel)38
-b(p)r(ositions)g(and)f(the)i(output)f(pixels)g(p)r(osition,)i(and)e
-(their)f(nature)h(and)f(strength)h(dep)r(end)g(critically)227
-979 y(up)r(on)33 b(the)g(nature)f(of)h(the)g(Mapping)f(and)g(the)h
-(spreading)f(function)h(b)r(eing)f(used.)52 b(In)33 b(general,)g(the)g
-(nearest)227 1078 y(neigh)n(b)r(our)d(spreading)f(function)i
-(demonstrates)e(this)i(e\013ect)g(more)e(clearly)g(than)i(the)g(other)e
-(functions,)j(and)227 1178 y(for)27 b(this)h(reason)e(should)i(b)r(e)g
-(used)f(with)h(caution.)227 1308 y(The)21 b(follo)n(wing)e(v)-5
-b(alues)20 b(\(de\014ned)h(in)g(the)g Ft(")p Fj(ast.h)p
-Ft(")e Fj(header)h(\014le\))h(ma)n(y)e(b)r(e)i(assigned)e(to)i(the)f
-Ft(")p Fj(spread)p Ft(")f Fj(parameter.)227 1407 y(See)39
-b(the)h(astResample)p Fl(<)p Fj(X)p Fl(>)e Fj(do)r(cumen)n(tation)h
-(for)f(details)h(of)g(these)h(sc)n(hemes)e(including)h(the)h(use)f(of)g
-(the)227 1507 y Ft(")p Fj(fspread)p Ft(")26 b Fj(and)i
-Ft(")p Fj(params)p Ft(")d Fj(parameters:)340 1783 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(NEAREST)340 1920 y Fi(\017)g Fj(AST)p
-Ft(__)p Fj(LINEAR)340 2058 y Fi(\017)g Fj(AST)p Ft(__)p
-Fj(SINC)340 2196 y Fi(\017)g Fj(AST)p Ft(__)p Fj(SINCSINC)340
-2334 y Fi(\017)g Fj(AST)p Ft(__)p Fj(SINCCOS)340 2472
-y Fi(\017)g Fj(AST)p Ft(__)p Fj(SINCGA)n(USS)340 2609
-y Fi(\017)g Fj(AST)p Ft(__)p Fj(SOMBCOS)227 2781 y(In)24
-b(addition,)g(the)g(follo)n(wing)e(sc)n(hemes)h(can)g(b)r(e)h(used)g
-(with)g(astRebin)p Fl(<)p Fj(X)p Fl(>)e Fj(but)j(not)e(with)h
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(:)340 3057 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(GA)n(USS:)24 b(This)f(sc)n(heme)g(uses)g(a)g(k)n
-(ernel)f(of)h(the)h(form)f(exp\(-k)p Fi(\003)p Fj(x)p
-Fi(\003)p Fj(x\),)g(with)g(k)h(a)e(p)r(ositiv)n(e)h(constan)n(t)427
-3156 y(determined)k(b)n(y)f(the)g(full-width)i(at)e(half-maxim)n(um)g
-(\(FWHM\).)h(The)g(FWHM)g(should)f(b)r(e)h(supplied)f(in)427
-3256 y(units)35 b(of)f(output)g(pixels)g(b)n(y)f(means)h(of)g(the)g
-Ft(")p Fj(params[1])p Ft(")d Fj(v)-5 b(alue)34 b(and)g(should)g(b)r(e)g
-(at)g(least)f(0.1.)56 b(The)427 3356 y Ft(")p Fj(params[0])p
-Ft(")23 b Fj(v)-5 b(alue)26 b(should)f(b)r(e)h(used)g(to)f(sp)r(ecify)h
-(at)f(what)h(p)r(oin)n(t)g(the)g(Gaussian)e(is)i(truncated)f(to)h
-(zero.)427 3455 y(This)i(should)g(b)r(e)g(giv)n(en)f(as)g(a)h(n)n(um)n
-(b)r(er)g(of)f(output)i(pixels)f(on)f(either)h(side)g(of)g(the)g(cen)n
-(tral)f(output)h(p)r(oin)n(t)427 3555 y(in)g(eac)n(h)f(dimension)g
-(\(the)i(nearest)d(in)n(teger)h(v)-5 b(alue)28 b(is)f(used\).)-2
-3727 y Fd(Con)m(trol)32 b(Flags)n(:)227 3873 y Fj(The)h(follo)n(wing)e
-(\015ags)h(are)g(de\014ned)h(in)f(the)h Ft(")p Fj(ast.h)p
-Ft(")f Fj(header)g(\014le)g(and)h(ma)n(y)f(b)r(e)h(used)f(to)h(pro)n
-(vide)e(additional)227 3972 y(con)n(trol)g(o)n(v)n(er)g(the)i
-(rebinning)e(pro)r(cess.)50 b(Ha)n(ving)32 b(selected)g(a)g(set)g(of)g
-(\015ags,)h(y)n(ou)f(should)g(supply)g(the)h(bit)n(wise)227
-4072 y(OR)28 b(of)f(their)h(v)-5 b(alues)27 b(via)g(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter:)340 4348 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(USEBAD:)33 b(Indicates)g(that)h(there)f(ma)n(y)f
-(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n(y\(s\))d(whic)n(h)i
-(m)n(ust)427 4448 y(b)r(e)27 b(recognised)f(b)n(y)g(comparing)g(with)h
-(the)g(v)-5 b(alue)27 b(giv)n(en)f(for)g Ft(")p Fj(badv)-5
-b(al)p Ft(")26 b Fj(and)g(propagated)f(to)i(the)g(output)427
-4547 y(arra)n(y\(s\).)35 b(If)26 b(this)h(\015ag)e(is)h(not)g(set,)h
-(all)f(input)h(v)-5 b(alues)26 b(are)f(treated)h(literally)f(and)h(the)
-h Ft(")p Fj(badv)-5 b(al)p Ft(")25 b Fj(v)-5 b(alue)26
-b(is)427 4647 y(only)h(used)h(for)f(\015agging)f(output)i(arra)n(y)d(v)
--5 b(alues.)-2 4819 y Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-4965 y Fj(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 5064 y Ft(")p Fj(badv)-5 b(al)p Ft(")22
-b Fj(v)-5 b(alue)22 b(in)h(the)f Ft(")p Fj(out)p Ft(")g
-Fj(arra)n(y)-7 b(.)33 b(These)22 b(are)g(pro)r(duced)g(if)h(the)g(sum)f
-(of)h(the)f(w)n(eigh)n(ts)g(of)g(the)h(con)n(tributing)227
-5164 y(input)29 b(pixels)e(is)h(less)f(than)g Ft(")p
-Fj(wlim)p Ft(")p Fj(.)227 5293 y(An)d(input)g(pixel)f(is)f(considered)g
-(bad)h(\(and)g(is)g(consequen)n(tly)f(ignored\))g(if)i(its)f(data)g(v)
--5 b(alue)23 b(is)f(equal)h(to)g Ft(")p Fj(badv)-5 b(al)p
-Ft(")227 5393 y Fj(and)28 b(the)g(AST)p Ft(__)p Fj(USEBAD)f(\015ag)g
-(is)h(set)f(via)g(the)h Ft(")p Fj(\015ags)p Ft(")e Fj(parameter.)227
-5522 y(In)j(addition,)f(asso)r(ciated)f(output)i(v)-5
-b(ariance)27 b(estimates)h(\(if)i(calculated\))e(ma)n(y)f(b)r(e)i
-(declared)e(bad)i(and)f(\015agged)227 5622 y(with)g(the)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")27 b Fj(v)-5 b(alue)27
-b(in)h(the)g Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26
-b Fj(arra)n(y)f(for)i(similar)g(reasons.)p eop end
-%%Page: 314 324
-TeXDict begin 314 323 bop 0 52 a FF(314)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astRebinSeq)p Fc(<)p Fz(X)p Fc(>)153 b Fe(Rebin)37
-b(a)f(region)g(of)g(a)h(sequence)1566 598 y(of)h(data)g(grids)2770
-483 y Fz(astRebinSeq)p Fc(<)p Fz(X)p Fc(>)0 766 y Fd(Description:)44
-b Fj(This)28 b(set)g(of)g(functions)h(is)f(iden)n(tical)f(to)h
-(astRebin)p Fl(<)p Fj(X)p Fl(>)g Fj(except)g(that)g(the)g(rebinned)g
-(input)h(data)f(is)227 866 y(added)g(in)n(to)f(the)h(supplied)f(output)
-h(arra)n(ys,)d(rather)h(than)i(simply)g(o)n(v)n(er-writing)c(the)k(con)
-n(ten)n(ts)f(of)g(the)h(output)227 966 y(arra)n(ys.)40
-b(Th)n(us,)29 b(b)n(y)g(calling)g(this)g(function)h(rep)r(eatedly)-7
-b(,)29 b(a)g(sequence)g(of)g(input)h(arra)n(ys)d(can)i(b)r(e)h
-(rebinned)f(and)227 1065 y(accum)n(ulated)e(in)n(to)h(a)f(single)g
-(output)h(arra)n(y)-7 b(,)25 b(e\013ectiv)n(ely)j(forming)f(a)g(mosaic)
-g(of)g(the)h(input)g(data)g(arra)n(ys.)227 1185 y(In)h(addition,)g(the)
-g(w)n(eigh)n(ts)f(asso)r(ciated)f(with)j(eac)n(h)e(output)h(pixel)g
-(are)e(returned.)40 b(The)29 b(w)n(eigh)n(t)f(of)h(an)f(output)227
-1284 y(pixel)23 b(indicates)f(the)h(n)n(um)n(b)r(er)g(of)f(input)i
-(pixels)e(whic)n(h)h(ha)n(v)n(e)e(b)r(een)i(accum)n(ulated)f(in)h(that)
-g(output)g(pixel.)35 b(If)23 b(the)227 1384 y(en)n(tire)30
-b(v)-5 b(alue)30 b(of)h(an)f(input)h(pixel)f(is)g(assigned)f(to)i(a)e
-(single)h(output)h(pixel,)g(then)g(the)g(w)n(eigh)n(t)e(of)h(that)h
-(output)227 1484 y(pixel)25 b(is)f(incremen)n(ted)h(b)n(y)f(one.)36
-b(If)25 b(some)f(fraction)g(of)g(the)h(v)-5 b(alue)25
-b(of)f(an)g(input)i(pixel)e(is)h(assigned)e(to)i(an)f(output)227
-1583 y(pixel,)k(then)g(the)g(w)n(eigh)n(t)f(of)h(that)f(output)i(pixel)
-e(is)h(incremen)n(ted)f(b)n(y)g(the)h(fraction)f(used.)227
-1703 y(The)h(start)f(of)g(a)g(new)h(sequence)f(is)g(indicated)h(b)n(y)f
-(sp)r(ecifying)g(the)h(AST)p Ft(__)p Fj(REBININIT)f(\015ag)g(via)g(the)
-g Ft(")p Fj(\015ags)p Ft(")227 1802 y Fj(parameter.)76
-b(This)41 b(causes)f(the)i(supplied)f(arra)n(ys)d(to)j(b)r(e)h
-(\014lled)f(with)h(zeros)e(b)r(efore)g(the)i(rebinned)f(input)227
-1902 y(data)f(is)g(added)f(in)n(to)h(them.)74 b(Subsequenct)41
-b(in)n(v)n(o)r(cations)d(within)i(the)h(same)e(sequence)g(should)h
-(omit)g(the)227 2002 y(AST)p Ft(__)p Fj(REBININIT)27
-b(\015ag.)227 2121 y(The)36 b(last)g(call)g(in)g(a)g(sequence)f(is)h
-(indicated)g(b)n(y)g(sp)r(ecifying)g(the)h(AST)p Ft(__)p
-Fj(REBINEND)e(\015ag.)62 b(This)36 b(causes)227 2221
-y(the)c(output)f(data)g(and)f(v)-5 b(ariance)30 b(arra)n(ys)e(to)j(b)r
-(e)h(normalised)d(b)r(efore)i(b)r(eing)g(returned.)46
-b(This)31 b(normalisation)227 2321 y(consists)j(of)g(dividing)h(the)g
-(data)f(arra)n(y)e(b)n(y)i(the)h(w)n(eigh)n(ts)f(arra)n(y)-7
-b(,)34 b(and)g(can)g(eliminate)h(artifacts)f(whic)n(h)g(ma)n(y)227
-2420 y(b)r(e)e(in)n(tro)r(duced)f(in)n(to)g(the)h(rebinned)f(data)g(as)
-g(a)g(consequence)f(of)i(aliasing)e(b)r(et)n(w)n(een)h(the)h(input)g
-(and)f(output)227 2520 y(grids.)55 b(Ho)n(w)n(ev)n(er,)34
-b(it)g(can)g(also)f(result)g(in)i(small)e(c)n(hanges)g(to)h(the)g
-(total)g(pixel)g(v)-5 b(alue)34 b(in)g(an)n(y)f(giv)n(en)g(area)g(of)
-227 2619 y(the)26 b(output)h(arra)n(y)-7 b(.)34 b(In)25
-b(addition)h(to)f(normalisation)f(of)i(the)g(output)g(data)g(v)-5
-b(alues,)25 b(an)n(y)g(output)h(v)-5 b(ariances)25 b(are)227
-2719 y(also)g(appropriately)e(normalised,)i(and)h(an)n(y)e(output)j
-(data)e(v)-5 b(alues)25 b(with)h(w)n(eigh)n(t)f(less)g(than)h
-Ft(")p Fj(wlim)p Ft(")f Fj(are)f(set)i(to)227 2819 y
-Ft(")p Fj(badv)-5 b(al)p Ft(")p Fj(.)227 2938 y(Output)34
-b(v)-5 b(ariances)32 b(can)h(b)r(e)g(generated)f(in)i(t)n(w)n(o)e(w)n
-(a)n(ys;)j(b)n(y)d(rebinning)h(the)h(supplied)f(input)h(v)-5
-b(ariances)32 b(with)227 3038 y(appropriate)21 b(w)n(eigh)n(ts,)i(or)f
-(b)n(y)g(\014nding)h(the)g(spread)f(of)g(input)i(data)e(v)-5
-b(alues)22 b(con)n(tributing)g(to)h(eac)n(h)e(output)j(pixel)227
-3137 y(\(see)k(the)g(AST)p Ft(__)p Fj(GENV)-9 b(AR)27
-b(and)h(AST)p Ft(__)p Fj(USEV)-9 b(AR)27 b(\015ags\).)0
-3277 y Fd(Synopsis:)121 b Ft(void)42 b(astRebinSeq)p
-Fl(<)p Ft(X)p Fl(>)p Ft(\()37 b(AstMapping)j Fi(\003)p
-Ft(this,)h(double)g(wlim,)g(int)i(ndim_in,)d(const)h(int)i(lbnd_in[],)
-227 3377 y(const)f(int)g(ubnd_in[],)e(const)h Fl(<)p
-Ft(Xtype)p Fl(>)g Ft(in[],)g(const)h Fl(<)p Ft(Xtype)p
-Fl(>)e Ft(in_var[],)g(int)j(spread,)d(const)227 3476
-y(double)h(params[],)f(int)j(flags,)e(double)g(tol,)h(int)g(maxpix,)f
-Fl(<)p Ft(Xtype)p Fl(>)f Ft(badval,)h(int)h(ndim_out,)227
-3576 y(const)g(int)g(lbnd_out[],)d(const)j(int)g(ubnd_out[],)d(const)j
-(int)g(lbnd[],)f(const)g(int)h(ubnd[],)f Fl(<)p Ft(Xtype)p
-Fl(>)227 3675 y Ft(out[],)g Fl(<)p Ft(Xtype)p Fl(>)g
-Ft(out_var[],)e(double)j(weights[],)d(int)j Fi(\003)p
-Ft(nused)f(\);)0 3815 y Fd(P)m(arameters:)259 3941 y(this)427
-4041 y Fj(P)n(oin)n(ter)19 b(to)h(a)f(Mapping,)j(whose)d(forw)n(ard)f
-(transformation)h(will)h(b)r(e)h(used)f(to)g(transform)f(the)h(co)r
-(ordinates)427 4141 y(of)28 b(pixels)f(in)h(the)g(input)g(grid)f(in)n
-(to)h(the)g(co)r(ordinate)e(system)h(of)h(the)g(output)g(grid.)427
-4252 y(The)c(n)n(um)n(b)r(er)g(of)g(input)h(co)r(ordinates)e(used)h(b)n
-(y)g(this)g(Mapping)g(\(as)f(giv)n(en)h(b)n(y)f(its)i(Nin)f
-(attribute\))h(should)427 4351 y(matc)n(h)e(the)g(n)n(um)n(b)r(er)g(of)
-g(input)h(grid)e(dimensions)h(giv)n(en)f(b)n(y)g(the)i(v)-5
-b(alue)23 b(of)g Ft(")p Fj(ndim)p Ft(_)p Fj(in)p Ft(")f
-Fj(b)r(elo)n(w.)35 b(Similarly)-7 b(,)427 4451 y(the)29
-b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)f(\(Nout)h
-(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g(of)g(output)
-g(grid)427 4551 y(dimensions)d(giv)n(en)e(b)n(y)i Ft(")p
-Fj(ndim)p Ft(_)p Fj(out)p Ft(")p Fj(.)35 b(If)25 b Ft(")p
-Fj(in)p Ft(")f Fj(is)g(NULL,)h(the)g(Mapping)g(will)f(not)h(b)r(e)g
-(used,)g(but)g(a)g(v)-5 b(alid)427 4650 y(Mapping)28
-b(m)n(ust)f(still)h(b)r(e)g(supplied.)259 4773 y Fd(wlim)427
-4873 y Fj(This)h(v)-5 b(alue)29 b(is)f(only)h(used)f(if)i(the)f(AST)p
-Ft(__)p Fj(REBINEND)f(\015ag)g(is)h(sp)r(eci\014ed)g(via)f(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter.)427 4972 y(It)j(giv)n(es)d
-(the)j(required)e(n)n(um)n(b)r(er)g(of)h(input)h(pixel)f(v)-5
-b(alues)28 b(whic)n(h)h(m)n(ust)g(con)n(tribute)g(to)f(an)h(output)h
-(pixel)427 5072 y(\(i.e.)50 b(the)33 b(output)f(pixel)g(w)n(eigh)n(t\))
-f(in)h(order)f(for)g(the)i(output)f(pixel)g(v)-5 b(alue)32
-b(to)f(b)r(e)i(considered)d(v)-5 b(alid.)50 b(If)427
-5172 y(the)31 b(sum)f(of)g(the)h(input)g(pixel)f(w)n(eigh)n(ts)g(con)n
-(tributing)f(to)h(an)g(output)h(pixel)f(is)h(less)e(than)i(the)f
-(supplied)427 5271 y Ft(")p Fj(wlim)p Ft(")i Fj(v)-5
-b(alue,)32 b(then)h(the)f(output)g(pixel)g(v)-5 b(alue)31
-b(is)h(returned)f(set)h(to)g(the)g(supplied)g(bad)g(v)-5
-b(alue.)49 b(If)32 b(the)427 5371 y(supplied)c(v)-5 b(alue)28
-b(is)f(less)g(than)h(1.0E-10)d(then)j(1.0E-10)d(is)j(used)f(instead.)
-259 5494 y Fd(ndim)p Ft(_)p Fd(in)427 5593 y Fj(The)g(n)n(um)n(b)r(er)f
-(of)g(dimensions)g(in)h(the)g(input)g(grid.)36 b(This)26
-b(should)g(b)r(e)h(at)f(least)g(one.)36 b(Not)27 b(used)f(if)h
-Ft(")p Fj(in)p Ft(")f Fj(is)427 5693 y(NULL.)p eop end
-%%Page: 315 325
-TeXDict begin 315 324 bop 3643 52 a FF(315)259 351 y
-Fd(lbnd)p Ft(_)p Fd(in)427 451 y Fj(P)n(oin)n(ter)29
-b(to)i(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p
-Fj(ndim)p Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h
-(co)r(ordinates)e(of)h(the)427 551 y(cen)n(tre)d(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)37
-b(Not)28 b(used)f(if)h Ft(")p Fj(in)p Ft(")f Fj(is)h(NULL.)259
-690 y Fd(ubnd)p Ft(_)p Fd(in)427 790 y Fj(P)n(oin)n(ter)h(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 889 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h
-(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)427
-1009 y(Note)h(that)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p
-Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(together)g(de\014ne)h(the)h(shap)r(e)f(and)f(size)h(of)g(the)g
-(input)h(grid,)e(its)427 1109 y(exten)n(t)f(along)f(a)g(particular)f
-(\(j'th\))k(dimension)d(b)r(eing)h(ubnd)p Ft(_)p Fj(in[j]-lbnd)p
-Ft(_)p Fj(in[j]+1)g(\(assuming)f(the)i(index)427 1208
-y Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)g(zero-based\).)35
-b(They)26 b(also)f(de\014ne)h(the)h(input)g(grid's)e(co)r(ordinate)g
-(system,)h(eac)n(h)g(pixel)g(ha)n(ving)427 1308 y(unit)33
-b(exten)n(t)g(along)e(eac)n(h)h(dimension)g(with)h(in)n(tegral)e(co)r
-(ordinate)g(v)-5 b(alues)32 b(at)h(its)f(cen)n(tre.)51
-b(Not)33 b(used)f(if)427 1408 y Ft(")p Fj(in)p Ft(")27
-b Fj(is)h(NULL.)259 1547 y Fd(in)427 1647 y Fj(P)n(oin)n(ter)h(to)i(an)
-f(arra)n(y)-7 b(,)30 b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)
-g(in)h(the)g(input)h(grid,)f(con)n(taining)f(the)h(input)427
-1747 y(data)25 b(to)g(b)r(e)g(rebined.)36 b(The)25 b(n)n(umerical)g(t)n
-(yp)r(e)g(of)g(this)h(arra)n(y)c(should)j(matc)n(h)g(the)h(1-)e(or)g
-(2-c)n(haracter)e(t)n(yp)r(e)427 1846 y(co)r(de)32 b(app)r(ended)h(to)f
-(the)g(function)h(name)f(\(e.g.)50 b(if)32 b(y)n(ou)g(are)f(using)g
-(astRebinSeqF,)i(the)f(t)n(yp)r(e)g(of)g(eac)n(h)427
-1946 y(arra)n(y)26 b(elemen)n(t)h(should)h(b)r(e)g Ft(")p
-Fj(\015oat)p Ft(")p Fj(\).)427 2065 y(The)33 b(storage)f(order)f(of)j
-(data)e(within)i(this)g(arra)n(y)c(should)j(b)r(e)h(suc)n(h)f(that)g
-(the)h(index)f(of)g(the)g(\014rst)g(grid)427 2165 y(dimension)23
-b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g(of)g(the)h(\014nal)f
-(dimension)g(least)f(rapidly)g(\(i.e.)36 b(F)-7 b(ortran)22
-b(arra)n(y)427 2265 y(indexing)i(is)f(used\).)36 b(If)24
-b(a)f(NULL)h(p)r(oin)n(ter)f(is)g(supplied)h(for)f Ft(")p
-Fj(in)p Ft(")p Fj(,)h(then)g(no)f(data)g(is)g(added)h(to)f(the)h
-(output)427 2364 y(arra)n(ys,)h(but)k(an)n(y)d(initialisation)h(or)g
-(normalisation)f(requested)h(b)n(y)g Ft(")p Fj(\015ags)p
-Ft(")f Fj(is)i(still)f(p)r(erformed.)259 2504 y Fd(in)p
-Ft(_)p Fd(v)-5 b(ar)427 2604 y Fj(An)25 b(optional)e(p)r(oin)n(ter)h
-(to)g(a)f(second)h(arra)n(y)e(with)i(the)h(same)e(size)h(and)g(t)n(yp)r
-(e)g(as)f(the)i Ft(")p Fj(in)p Ft(")e Fj(arra)n(y)-7
-b(.)34 b(If)24 b(giv)n(en,)427 2703 y(this)32 b(should)g(con)n(tain)f
-(a)g(set)h(of)g(non-negativ)n(e)e(v)-5 b(alues)31 b(whic)n(h)h
-(represen)n(t)f(estimates)g(of)h(the)g(statistical)427
-2803 y(v)-5 b(ariance)29 b(asso)r(ciated)f(with)j(eac)n(h)e(elemen)n(t)
-g(of)h(the)g Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)-7 b(.)42
-b(If)30 b(neither)g(the)g(AST)p Ft(__)p Fj(USEV)-9 b(AR)29
-b(nor)427 2902 y(the)35 b(AST)p Ft(__)p Fj(V)-9 b(AR)g(W)n(GT)34
-b(\015ag)f(is)h(set,)h(no)f(input)h(v)-5 b(ariance)32
-b(estimates)i(are)f(required)g(and)h(this)g(p)r(oin)n(ter)427
-3002 y(will)28 b(not)g(b)r(e)g(used.)37 b(A)27 b(NULL)h(p)r(oin)n(ter)g
-(ma)n(y)f(then)h(b)r(e)g(supplied.)259 3142 y Fd(spread)427
-3241 y Fj(This)23 b(parameter)e(sp)r(eci\014es)i(the)g(sc)n(heme)g(to)g
-(b)r(e)g(used)g(for)f(dividing)h(eac)n(h)f(input)h(data)g(v)-5
-b(alue)22 b(up)i(amongst)427 3341 y(the)30 b(corresp)r(onding)d(output)
-j(pixels.)42 b(It)30 b(ma)n(y)e(b)r(e)i(used)f(to)h(select)f(from)g(a)g
-(set)g(of)g(pre-de\014ned)g(sc)n(hemes)427 3441 y(b)n(y)36
-b(supplying)f(one)g(of)g(the)h(v)-5 b(alues)35 b(describ)r(ed)h(in)g
-(the)f Ft(")p Fj(Pixel)g(Spreading)g(Sc)n(hemes)p Ft(")f
-Fj(section)h(in)h(the)427 3540 y(description)e(of)g(the)g(astRebin)p
-Fl(<)p Fj(X)p Fl(>)g Fj(functions.)57 b(If)34 b(a)g(v)-5
-b(alue)34 b(of)g(zero)f(is)h(supplied,)i(then)f(the)f(default)427
-3640 y(linear)22 b(spreading)f(sc)n(heme)h(is)h(used)g(\(equiv)-5
-b(alen)n(t)22 b(to)h(supplying)f(the)h(v)-5 b(alue)22
-b(AST)p Ft(__)p Fj(LINEAR\).)h(Not)g(used)427 3740 y(if)28
-b Ft(")p Fj(in)p Ft(")f Fj(is)h(NULL.)259 3879 y Fd(params)427
-3979 y Fj(An)36 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(arra)n(y)e(of)i
-(double)g(whic)n(h)h(should)e(con)n(tain)h(an)n(y)f(additional)h
-(parameter)427 4078 y(v)-5 b(alues)37 b(required)g(b)n(y)g(the)h(pixel)
-g(spreading)e(sc)n(heme.)66 b(If)38 b(suc)n(h)f(parameters)f(are)g
-(required,)k(this)d(will)427 4178 y(b)r(e)c(noted)f(in)h(the)g
-Ft(")p Fj(Pixel)e(Spreading)h(Sc)n(hemes)p Ft(")f Fj(section)h(in)h
-(the)f(description)g(of)h(the)f(astRebin)p Fl(<)p Fj(X)p
-Fl(>)427 4278 y Fj(functions.)427 4397 y(If)d(no)e(additional)h
-(parameters)e(are)h(required,)g(this)i(arra)n(y)c(is)j(not)g(used)g
-(and)g(a)g(NULL)g(p)r(oin)n(ter)g(ma)n(y)f(b)r(e)427
-4497 y(giv)n(en.)36 b(Not)28 b(used)g(if)g Ft(")p Fj(in)p
-Ft(")f Fj(is)g(NULL.)259 4637 y Fd(\015ags)427 4736 y
-Fj(The)21 b(bit)n(wise)g(OR)f(of)h(a)f(set)h(of)f(\015ag)g(v)-5
-b(alues)20 b(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)f(pro)n(vide)g
-(additional)g(con)n(trol)f(o)n(v)n(er)g(the)427 4836
-y(rebinning)30 b(op)r(eration.)45 b(See)31 b(the)f Ft(")p
-Fj(Con)n(trol)f(Flags)p Ft(")g Fj(section)i(b)r(elo)n(w)f(for)g(a)g
-(description)g(of)g(the)h(options)427 4936 y(a)n(v)-5
-b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5 b(alues)27
-b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28 b(of)f(zero)g(should)g
-(b)r(e)h(giv)n(en.)259 5075 y Fd(tol)427 5175 y Fj(The)34
-b(maxim)n(um)f(tolerable)f(geometrical)f(distortion)i(whic)n(h)g(ma)n
-(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h(result)g(of)g(ap-)427
-5274 y(pro)n(ximating)c(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g
-(piece-wise)f(linear)g(transformations.)42 b(This)30
-b(should)427 5374 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)n(t)g(in)h
-(pixels)f(in)h(the)g(output)g(grid's)f(co)r(ordinate)f(system.)427
-5494 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f(is)h(not)h
-(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n
-(en.)54 b(This)33 b(will)427 5593 y(ensure)k(that)g(the)h(Mapping)e(is)
-h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e
-(increase)g(execution)427 5693 y(time.)p eop end
-%%Page: 316 326
-TeXDict begin 316 325 bop 0 52 a FF(316)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(If)j(the)f(v)-5
-b(alue)32 b(is)g(to)r(o)g(high,)h(discon)n(tin)n(uities)e(b)r(et)n(w)n
-(een)h(the)h(linear)e(appro)n(ximations)f(used)i(in)g(adjacen)n(t)427
-451 y(panel)h(will)g(b)r(e)g(higher,)h(and)f(ma)n(y)f(cause)g(the)i
-(edges)e(of)h(the)g(panel)g(to)g(b)r(e)g(visible)g(when)g(viewing)f
-(the)427 551 y(output)j(image)e(at)h(high)g(con)n(trast.)55
-b(If)34 b(this)g(is)g(a)g(problem,)h(reduce)e(the)i(tolerance)e(v)-5
-b(alue)33 b(used.)56 b(Not)427 650 y(used)28 b(if)g Ft(")p
-Fj(in)p Ft(")f Fj(is)g(NULL.)259 775 y Fd(maxpix)427
-874 y Fj(A)42 b(v)-5 b(alue)40 b(whic)n(h)h(sp)r(eci\014es)g(an)g
-(initial)g(scale)g(size)f(\(in)i(pixels\))f(for)f(the)i(adaptiv)n(e)e
-(algorithm)g(whic)n(h)427 974 y(appro)n(ximates)d(non-linear)g
-(Mappings)h(with)h(piece-wise)f(linear)g(transformations.)68
-b(Normally)-7 b(,)40 b(this)427 1073 y(should)e(b)r(e)g(a)g(large)e(v)
--5 b(alue)38 b(\(larger)e(than)j(an)n(y)e(dimension)h(of)f(the)i
-(region)d(of)i(the)h(input)f(grid)g(b)r(eing)427 1173
-y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g
-(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)
-427 1273 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 1385 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 1484 y(do)r(es)39
-b(not)h(exceed)f Ft(")p Fj(maxpix)p Ft(")f Fj(pixels)i(in)g(an)n(y)e
-(dimension.)73 b(Only)39 b(at)g(this)h(p)r(oin)n(t)g(will)g(attempts)g
-(at)427 1584 y(appro)n(ximation)26 b(commence.)427 1696
-y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j(useful)
-f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)h
-(adaptiv)n(e)e(al-)427 1796 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 1895 y(irregularities)27 b(\(e.g.)40
-b(holes\))28 b(on)g(smaller)g(scales.)39 b(A)29 b(v)-5
-b(alue)28 b(of,)h(sa)n(y)-7 b(,)28 b(50)g(to)g(100)g(pixels)g(can)g
-(also)g(b)r(e)h(em-)427 1995 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f
-(in)i(general-purp)r(ose)d(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f
-(on)h(p)r(erformance)e(is)h(minimal.)427 2107 y(If)e(to)r(o)f(small)g
-(a)g(v)-5 b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i
-(e\013ect)g(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)
-427 2207 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g
-Ft(")p Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20
-b(this)g(ma)n(y)f(degrade)f(p)r(erformance,)j(accurate)d(results)427
-2306 y(will)28 b(still)g(b)r(e)g(obtained.)37 b(Not)27
-b(used)h(if)g Ft(")p Fj(in)p Ft(")f Fj(is)h(NULL.)259
-2431 y Fd(badv)-5 b(al)427 2530 y Fj(This)29 b(argumen)n(t)f(should)h
-(ha)n(v)n(e)e(the)j(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h
-(the)g Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29
-b(sp)r(eci\014es)g(the)427 2630 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f
-(missing)g(data)g(\(bad)h(pixels\))f(in)h(the)g(input)g(and)g(output)g
-(arra)n(ys.)427 2742 y(If)33 b(the)f(AST)p Ft(__)p Fj(USEBAD)g(\015ag)g
-(is)g(set)g(via)g(the)g Ft(")p Fj(\015ags)p Ft(")e Fj(parameter,)i
-(then)h(this)f(v)-5 b(alue)32 b(is)g(used)g(to)g(test)427
-2842 y(for)27 b(bad)h(pixels)f(in)h(the)g Ft(")p Fj(in)p
-Ft(")f Fj(\(and)h Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p
-Ft(")p Fj(\))26 b(arra)n(y\(s\).)427 2954 y(In)i(all)f(cases,)f(this)i
-(v)-5 b(alue)27 b(is)g(also)f(used)h(to)g(\015ag)g(an)n(y)f(output)i
-(elemen)n(ts)f(in)h(the)g Ft(")p Fj(out)p Ft(")e Fj(\(and)h
-Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")p Fj(\))427
-3053 y(arra)n(y\(s\))34 b(for)i(whic)n(h)g(rebined)g(v)-5
-b(alues)36 b(could)g(not)h(b)r(e)f(obtained)g(\(see)g(the)h
-Ft(")p Fj(Propagation)c(of)j(Missing)427 3153 y(Data)p
-Ft(")27 b Fj(section)g(b)r(elo)n(w)h(for)f(details)g(of)h(the)g
-(circumstances)e(under)i(whic)n(h)f(this)h(ma)n(y)f(o)r(ccur\).)259
-3277 y Fd(ndim)p Ft(_)p Fd(out)427 3377 y Fj(The)38 b(n)n(um)n(b)r(er)f
-(of)g(dimensions)g(in)h(the)f(output)h(grid.)66 b(This)37
-b(should)g(b)r(e)h(at)f(least)g(one.)65 b(It)38 b(need)g(not)427
-3477 y(necessarily)26 b(b)r(e)i(equal)f(to)h(the)g(n)n(um)n(b)r(er)f
-(of)h(dimensions)f(in)h(the)g(input)g(grid.)259 3601
-y Fd(lbnd)p Ft(_)p Fd(out)427 3701 y Fj(P)n(oin)n(ter)d(to)i(an)f(arra)
-n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p Ft(_)p
-Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r(ordinates)
-f(of)g(the)427 3800 y(cen)n(tre)h(of)h(the)g(\014rst)f(pixel)h(in)g
-(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)259
-3925 y Fd(ubnd)p Ft(_)p Fd(out)427 4024 y Fj(P)n(oin)n(ter)e(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 4124 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h
-(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)427
-4236 y(Note)e(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p
-Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p Fj(out)p Ft(")g
-Fj(together)g(de\014ne)h(the)g(shap)r(e,)g(size)g(and)f(co)r(ordinate)g
-(system)427 4336 y(of)32 b(the)f(output)h(grid)f(in)g(the)h(same)f(w)n
-(a)n(y)f(as)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")e Fj(de\014ne)i(the)g
-(shap)r(e,)g(size)f(and)427 4435 y(co)r(ordinate)c(system)g(of)h(the)g
-(input)g(grid.)259 4560 y Fd(lbnd)427 4659 y Fj(P)n(oin)n(ter)h(to)i
-(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 4759 y(\014rst)d(pixel)f(in)h(the)g(region)e
-(of)h(the)h(input)h(grid)e(whic)n(h)g(is)g(to)h(b)r(e)g(included)g(in)g
-(the)f(rebined)h(output)g(arra)n(y)-7 b(.)427 4859 y(Not)28
-b(used)g(if)g Ft(")p Fj(in)p Ft(")f Fj(is)g(NULL.)259
-4983 y Fd(ubnd)427 5083 y Fj(P)n(oin)n(ter)i(to)i(an)f(arra)n(y)e(of)j
-(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p Fj(in)p
-Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e(of)h
-(the)427 5182 y(last)d(pixel)h(in)f(the)h(region)e(of)h(the)h(input)g
-(grid)e(whic)n(h)i(is)f(to)g(b)r(e)h(included)g(in)f(the)h(rebined)f
-(output)h(arra)n(y)-7 b(.)427 5295 y(Note)23 b(that)h
-Ft(")p Fj(lbnd)p Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)f(p)r(osition)h(of)g(a)g
-(\(h)n(yp)r(er-\)rectangular)427 5394 y(region)c(of)i(the)f(input)h
-(grid)f(whic)n(h)g(is)g(to)h(b)r(e)f(included)h(in)g(the)f(rebined)h
-(output)f(arra)n(y)-7 b(.)33 b(This)20 b(region)f(should)427
-5494 y(lie)33 b(wholly)g(within)g(the)g(exten)n(t)g(of)g(the)g(input)h
-(grid)e(\(as)g(de\014ned)h(b)n(y)g(the)g Ft(")p Fj(lbnd)p
-Ft(_)p Fj(in)p Ft(")f Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p
-Fj(in)p Ft(")427 5593 y Fj(arra)n(ys\).)h(Regions)25
-b(of)g(the)h(input)h(grid)e(lying)g(outside)h(this)g(region)e(will)i
-(not)f(b)r(e)h(used.)37 b(Not)25 b(used)h(if)g Ft(")p
-Fj(in)p Ft(")427 5693 y Fj(is)i(NULL.)p eop end
-%%Page: 317 327
-TeXDict begin 317 326 bop 3643 52 a FF(317)259 351 y
-Fd(out)427 451 y Fj(P)n(oin)n(ter)32 b(to)h(an)g(arra)n(y)-7
-b(,)33 b(with)h(one)f(elemen)n(t)g(for)g(eac)n(h)f(pixel)i(in)f(the)h
-(output)g(grid.)54 b(The)33 b(rebined)g(data)427 551
-y(v)-5 b(alues)25 b(will)h(b)r(e)g(added)f(in)n(to)h(the)g(original)e
-(con)n(ten)n(ts)g(of)i(this)g(arra)n(y)-7 b(.)34 b(The)25
-b(n)n(umerical)g(t)n(yp)r(e)h(of)f(this)h(arra)n(y)427
-650 y(should)d(matc)n(h)g(that)g(of)g(the)g Ft(")p Fj(in)p
-Ft(")g Fj(arra)n(y)-7 b(,)22 b(and)g(the)i(data)e(storage)f(order)h
-(should)h(b)r(e)g(suc)n(h)g(that)g(the)h(index)427 750
-y(of)31 b(the)h(\014rst)f(grid)f(dimension)h(v)-5 b(aries)30
-b(most)h(rapidly)g(and)g(that)g(of)g(the)h(\014nal)f(dimension)g(least)
-f(rapidly)427 849 y(\(i.e.)38 b(F)-7 b(ortran)26 b(arra)n(y)f(indexing)
-j(is)f(used\).)259 994 y Fd(out)p Ft(_)p Fd(v)-5 b(ar)427
-1094 y Fj(A)27 b(p)r(oin)n(ter)g(to)g(an)f(arra)n(y)f(with)i(the)g
-(same)g(t)n(yp)r(e)g(and)f(size)h(as)f(the)h Ft(")p Fj(out)p
-Ft(")f Fj(arra)n(y)-7 b(.)35 b(This)26 b(p)r(oin)n(ter)h(will)g(only)
-427 1193 y(b)r(e)22 b(used)g(if)g(the)g(AST)p Ft(__)p
-Fj(USEV)-9 b(AR)22 b(or)f(AST)p Ft(__)p Fj(GENV)-9 b(AR)22
-b(\015ag)f(is)g(set)h(in)g(whic)n(h)g(case)e(v)-5 b(ariance)21
-b(estimates)427 1293 y(for)29 b(the)g(rebined)f(data)h(v)-5
-b(alues)28 b(will)h(b)r(e)h(added)e(in)n(to)h(the)g(arra)n(y)-7
-b(.)38 b(If)30 b(neither)e(the)i(AST)p Ft(__)p Fj(USEV)-9
-b(AR)28 b(\015ag)427 1393 y(nor)e(the)i(AST)p Ft(__)p
-Fj(GENV)-9 b(AR)26 b(\015ag)g(is)h(set,)g(no)g(output)g(v)-5
-b(ariance)26 b(estimates)g(will)h(b)r(e)g(calculated)g(and)f(this)427
-1492 y(p)r(oin)n(ter)h(will)h(not)g(b)r(e)g(used.)37
-b(A)28 b(NULL)g(p)r(oin)n(ter)f(ma)n(y)g(then)h(b)r(e)g(supplied.)259
-1637 y Fd(w)m(eigh)m(ts)427 1737 y Fj(P)n(oin)n(ter)33
-b(to)g(an)h(arra)n(y)e(of)h(double,)j(with)e(one)g(or)f(t)n(w)n(o)g
-(elemen)n(ts)h(for)f(eac)n(h)g(pixel)h(in)g(the)h(output)f(grid,)427
-1836 y(dep)r(ending)k(on)f(whether)g(or)g(not)g(the)h(AST)p
-Ft(__)p Fj(GENV)-9 b(AR)37 b(\015ag)g(has)f(b)r(een)i(supplied)g(via)f
-(the)g Ft(")p Fj(\015ags)p Ft(")427 1936 y Fj(parameter.)d(If)23
-b(AST)p Ft(__)p Fj(GENV)-9 b(AR)22 b(has)g(not)g(b)r(een)h(sp)r
-(eci\014ed)f(then)h(the)g(arra)n(y)c(should)j(ha)n(v)n(e)g(one)f
-(elemen)n(t)427 2035 y(for)f(eac)n(h)f(output)h(pixel,)i(and)e(it)g
-(will)h(b)r(e)f(used)g(to)g(accum)n(ulate)f(the)h(w)n(eigh)n(t)g(asso)r
-(ciated)e(with)j(eac)n(h)e(output)427 2135 y(pixel.)35
-b(If)23 b(AST)p Ft(__)p Fj(GENV)-9 b(AR)22 b(has)g(b)r(een)g(sp)r
-(eci\014ed)h(then)f(the)h(arra)n(y)d(should)h(ha)n(v)n(e)g(t)n(w)n(o)h
-(elemen)n(ts)g(for)f(eac)n(h)427 2235 y(output)33 b(pixel.)51
-b(The)33 b(\014rst)f(half)h(of)f(the)h(arra)n(y)d(is)i(again)f(used)i
-(to)f(accum)n(ulate)f(the)i(w)n(eigh)n(t)f(asso)r(ciated)427
-2334 y(with)c(eac)n(h)f(output)i(pixel,)e(and)h(the)g(second)f(half)h
-(is)f(used)h(to)f(accum)n(ulate)g(the)h(square)f(of)g(the)h(w)n(eigh)n
-(ts.)427 2434 y(In)f(eac)n(h)f(half,)h(the)g(data)f(storage)f(order)g
-(should)i(b)r(e)g(suc)n(h)f(that)h(the)g(index)g(of)f(the)h(\014rst)g
-(grid)f(dimension)427 2534 y(v)-5 b(aries)27 b(most)g(rapidly)f(and)i
-(that)f(of)h(the)f(\014nal)h(dimension)f(least)g(rapidly)f(\(i.e.)38
-b(F)-7 b(ortran)26 b(arra)n(y)f(indexing)427 2633 y(is)j(used\).)259
-2778 y Fd(n)m(used)427 2878 y Fj(A)33 b(p)r(oin)n(ter)f(to)h(an)f(in)n
-(t)h(con)n(taining)e(the)i(n)n(um)n(b)r(er)f(of)h(input)g(data)f(v)-5
-b(alues)32 b(that)h(ha)n(v)n(e)f(b)r(een)g(added)h(in)n(to)427
-2977 y(the)f(output)g(arra)n(y)d(so)h(far.)47 b(The)32
-b(supplied)f(v)-5 b(alue)31 b(is)h(incremen)n(ted)f(on)g(exit)g(b)n(y)g
-(the)h(n)n(um)n(b)r(er)f(of)g(input)427 3077 y(v)-5 b(alues)26
-b(used.)36 b(The)26 b(v)-5 b(alue)26 b(is)f(initially)h(set)g(to)g
-(zero)f(if)h(the)g(AST)p Ft(__)p Fj(REBININIT)f(\015ag)g(is)h(set)g(in)
-g Ft(")p Fj(\015ags)p Ft(")p Fj(.)-2 3263 y Fd(Data)33
-b(T)m(yp)s(e)g(Co)s(des)n(:)227 3409 y Fj(T)-7 b(o)39
-b(select)g(the)h(appropriate)e(rebinning)h(function,)k(y)n(ou)38
-b(should)h(replace)g Fl(<)p Fj(X)p Fl(>)f Fj(in)i(the)g(generic)e
-(function)227 3508 y(name)24 b(astRebinSeq)p Fl(<)p Fj(X)p
-Fl(>)g Fj(with)g(a)g(1-)g(or)f(2-c)n(haracter)e(data)j(t)n(yp)r(e)g(co)
-r(de,)h(so)f(as)f(to)h(matc)n(h)g(the)h(n)n(umerical)e(t)n(yp)r(e)227
-3608 y Fl(<)p Fj(Xt)n(yp)r(e)p Fl(>)k Fj(of)h(the)g(data)f(y)n(ou)g
-(are)g(pro)r(cessing,)f(as)h(follo)n(ws:)340 3768 y Fi(\017)45
-b Fj(D:)28 b(double)340 3913 y Fi(\017)45 b Fj(F:)28
-b(\015oat)340 4058 y Fi(\017)45 b Fj(I:)28 b(in)n(t)227
-4243 y(F)-7 b(or)25 b(example,)g(astRebinSeqD)g(w)n(ould)f(b)r(e)i
-(used)e(to)h(pro)r(cess)f Ft(")p Fj(double)p Ft(")g Fj(data,)h(while)g
-(astRebinSeqI)g(w)n(ould)f(b)r(e)227 4343 y(used)k(to)f(pro)r(cess)g
-Ft(")p Fj(in)n(t)p Ft(")g Fj(data,)g(etc.)227 4479 y(Note)33
-b(that,)h(unlik)n(e)f(astResample)p Fl(<)p Fj(X)p Fl(>)p
-Fj(,)g(the)g(astRebinSeq)p Fl(<)p Fj(X)p Fl(>)f Fj(set)g(of)h
-(functions)g(do)r(es)g(not)f(y)n(et)h(supp)r(ort)227
-4579 y(unsigned)28 b(in)n(teger)e(data)h(t)n(yp)r(es)h(or)f(in)n
-(tegers)f(of)i(di\013eren)n(t)f(sizes.)-2 4752 y Fd(Con)m(trol)32
-b(Flags)n(:)227 4898 y Fj(The)h(follo)n(wing)e(\015ags)h(are)g
-(de\014ned)h(in)f(the)h Ft(")p Fj(ast.h)p Ft(")f Fj(header)g(\014le)g
-(and)h(ma)n(y)f(b)r(e)h(used)f(to)h(pro)n(vide)e(additional)227
-4998 y(con)n(trol)g(o)n(v)n(er)g(the)i(rebinning)e(pro)r(cess.)50
-b(Ha)n(ving)32 b(selected)g(a)g(set)g(of)g(\015ags,)h(y)n(ou)f(should)g
-(supply)g(the)h(bit)n(wise)227 5097 y(OR)28 b(of)f(their)h(v)-5
-b(alues)27 b(via)g(the)h Ft(")p Fj(\015ags)p Ft(")e Fj(parameter:)340
-5394 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(REBININIT:)28
-b(Used)g(to)f(mark)g(the)i(\014rst)e(call)h(in)g(a)g(sequence.)37
-b(It)28 b(indicates)g(that)g(the)g(supplied)427 5494
-y Ft(")p Fj(out)p Ft(")p Fj(,)40 b Ft(")p Fj(out)p Ft(_)p
-Fj(v)-5 b(ar)p Ft(")35 b Fj(and)j Ft(")p Fj(w)n(eigh)n(ts)p
-Ft(")e Fj(arra)n(ys)f(should)i(b)r(e)i(\014lled)f(with)g(zeros)e(\(th)n
-(us)i(o)n(v)n(er-writing)d(an)n(y)427 5593 y(supplied)30
-b(v)-5 b(alues\))30 b(b)r(efore)f(adding)g(the)h(rebinned)f(input)i
-(data)e(in)n(to)g(them.)43 b(This)30 b(\015ag)e(should)i(b)r(e)g(used)
-427 5693 y(when)e(rebinning)f(the)h(\014rst)g(input)g(arra)n(y)d(in)j
-(a)f(sequence.)p eop end
-%%Page: 318 328
-TeXDict begin 318 327 bop 0 52 a FF(318)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(REBINEND:)34 b(Used)h(to)g(mark)f(the)h(last)f
-(call)g(in)h(a)g(sequence.)57 b(It)35 b(causes)f(eac)n(h)g(v)-5
-b(alue)34 b(in)h(the)427 451 y Ft(")p Fj(out)p Ft(")c
-Fj(and)h Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")30
-b Fj(arra)n(ys)g(to)i(b)r(e)g(divided)g(b)n(y)g(a)g(normalisation)e
-(factor)h(b)r(efore)h(b)r(eing)g(returned.)427 551 y(The)38
-b(normalisation)d(factor)h(for)h(eac)n(h)g(output)g(data)g(v)-5
-b(alue)37 b(is)g(just)h(the)g(corresp)r(onding)d(v)-5
-b(alue)37 b(from)427 650 y(the)32 b(w)n(eigh)n(ts)e(arra)n(y)-7
-b(.)46 b(The)32 b(normalisation)d(factor)i(for)g(eac)n(h)f(output)i(v)
--5 b(ariance)30 b(v)-5 b(alue)32 b(is)f(the)h(square)e(of)427
-750 y(the)k(data)e(v)-5 b(alue)33 b(normalisation)e(factor.)53
-b(It)33 b(also)f(causes)g(output)h(data)g(v)-5 b(alues)33
-b(to)f(b)r(e)i(set)f(bad)g(if)g(the)427 849 y(corresp)r(onding)22
-b(w)n(eigh)n(t)i(is)g(less)f(than)i(the)f(v)-5 b(alue)24
-b(supplied)g(for)g(parameter)f Ft(")p Fj(wlim)p Ft(")p
-Fj(.)35 b(It)24 b(also)f(causes)g(an)n(y)427 949 y(temp)r(orary)i(v)-5
-b(alues)25 b(stored)f(in)i(the)g(output)g(v)-5 b(ariance)25
-b(arra)n(y)e(\(see)i(\015ag)g(AST)p Ft(__)p Fj(GENV)-9
-b(AR)25 b(b)r(elo)n(w\))h(to)f(b)r(e)427 1049 y(con)n(v)n(erted)h(in)n
-(to)i(usable)f(v)-5 b(ariance)26 b(v)-5 b(alues.)340
-1173 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(USEBAD:)33 b(Indicates)g(that)h
-(there)f(ma)n(y)f(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n
-(y\(s\))d(whic)n(h)i(m)n(ust)427 1273 y(b)r(e)27 b(recognised)f(b)n(y)g
-(comparing)g(with)h(the)g(v)-5 b(alue)27 b(giv)n(en)f(for)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")26 b Fj(and)g(propagated)f(to)i(the)g
-(output)427 1373 y(arra)n(y\(s\).)35 b(If)26 b(this)h(\015ag)e(is)h
-(not)g(set,)h(all)f(input)h(v)-5 b(alues)26 b(are)f(treated)h
-(literally)f(and)h(the)h Ft(")p Fj(badv)-5 b(al)p Ft(")25
-b Fj(v)-5 b(alue)26 b(is)427 1472 y(only)h(used)h(for)f(\015agging)f
-(output)i(arra)n(y)d(v)-5 b(alues.)340 1597 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(USEV)-9 b(AR:)36 b(Indicates)g(that)g(output)h(v)
--5 b(ariance)35 b(estimates)h(should)f(b)r(e)i(created)e(b)n(y)h
-(rebinning)427 1696 y(the)g(supplied)f(input)h(v)-5 b(ariance)33
-b(estimates.)59 b(An)35 b(error)e(will)j(b)r(e)f(rep)r(orted)f(if)i(b)r
-(oth)f(this)g(\015ag)f(and)h(the)427 1796 y(AST)p Ft(__)p
-Fj(GENV)-9 b(AR)28 b(\015ag)f(are)f(supplied.)340 1921
-y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(GENV)-9 b(AR:)33 b(Indicates)g(that)
-h(output)f(v)-5 b(ariance)32 b(estimates)h(should)g(b)r(e)g(created)g
-(based)f(on)h(the)427 2020 y(spread)19 b(of)h(input)h(data)e(v)-5
-b(alues)19 b(con)n(tributing)h(to)f(eac)n(h)g(output)i(pixel.)34
-b(An)20 b(error)e(will)i(b)r(e)h(rep)r(orted)e(if)h(b)r(oth)427
-2120 y(this)29 b(\015ag)e(and)h(the)h(AST)p Ft(__)p Fj(USEV)-9
-b(AR)28 b(\015ag)f(are)g(supplied.)39 b(If)29 b(the)g(AST)p
-Ft(__)p Fj(GENV)-9 b(AR)28 b(\015ag)f(is)h(sp)r(eci\014ed,)427
-2220 y(the)e(supplied)g(output)h(v)-5 b(ariance)24 b(arra)n(y)g(is)h
-(\014rst)h(used)f(as)g(a)h(w)n(ork)e(arra)n(y)f(to)j(accum)n(ulate)f
-(the)h(temp)r(orary)427 2319 y(v)-5 b(alues)33 b(needed)h(to)f
-(generate)g(the)h(output)g(v)-5 b(ariances.)53 b(When)34
-b(the)g(sequence)f(ends)g(\(as)g(indicated)h(b)n(y)427
-2419 y(the)h(AST)p Ft(__)p Fj(REBINEND)f(\015ag\),)i(the)f(con)n(ten)n
-(ts)f(of)g(the)h(output)g(v)-5 b(ariance)33 b(arra)n(y)f(are)i(con)n(v)
-n(erted)f(in)n(to)427 2519 y(the)f(required)d(v)-5 b(ariance)30
-b(estimates.)47 b(If)31 b(the)g(generation)f(of)g(suc)n(h)h(output)g(v)
--5 b(ariances)30 b(is)h(required,)f(this)427 2618 y(\015ag)d(should)g
-(b)r(e)h(used)g(on)f(ev)n(ery)f(in)n(v)n(o)r(cation)g(of)i(this)g
-(function)g(within)g(a)f(sequence,)g(and)h(an)n(y)e(supplied)427
-2718 y(input)f(v)-5 b(ariances)23 b(will)i(ha)n(v)n(e)e(no)g(e\013ect)i
-(on)f(the)h(output)f(v)-5 b(ariances)23 b(\(although)h(input)h(v)-5
-b(ariances)23 b(will)h(still)427 2817 y(b)r(e)k(used)g(to)f(w)n(eigh)n
-(t)g(the)h(input)h(data)e(if)h(the)g(AST)p Ft(__)p Fj(V)-9
-b(AR)g(W)n(GT)27 b(\015ag)g(is)h(also)e(supplied\).)340
-2942 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(V)-9 b(AR)g(W)n(GT:)29
-b(Indicates)f(that)h(the)g(input)g(data)f(should)h(b)r(e)g(w)n(eigh)n
-(ted)f(b)n(y)g(the)h(recipro)r(cal)e(of)h(the)427 3042
-y(input)e(v)-5 b(ariances.)35 b(Otherwise,)25 b(all)g(input)h(data)f
-(are)g(giv)n(en)f(equal)h(w)n(eigh)n(t.)36 b(If)25 b(this)h(\015ag)f
-(is)g(sp)r(eci\014ed,)h(the)427 3141 y(calculation)e(of)h(the)g(output)
-g(v)-5 b(ariances)23 b(\(if)i(an)n(y\))g(is)f(mo)r(di\014ed)h(to)g(tak)
-n(e)f(accoun)n(t)f(of)i(the)g(v)-5 b(arying)24 b(w)n(eigh)n(ts)427
-3241 y(assigned)j(to)g(the)h(input)h(data)e(v)-5 b(alues.)-2
-3395 y Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227
-3541 y Fj(Instances)40 b(of)h(missing)f(data)g(\(bad)h(pixels\))g(in)f
-(the)h(output)h(grid)e(are)f(iden)n(ti\014ed)i(b)n(y)g(o)r(ccurrences)e
-(of)h(the)227 3640 y Ft(")p Fj(badv)-5 b(al)p Ft(")38
-b Fj(v)-5 b(alue)39 b(in)g(the)g Ft(")p Fj(out)p Ft(")f
-Fj(arra)n(y)-7 b(.)68 b(These)38 b(are)g(only)h(pro)r(duced)f(if)h(the)
-g(AST)p Ft(__)p Fj(REBINEND)g(\015ag)f(is)227 3740 y(sp)r(eci\014ed)28
-b(and)g(a)f(pixel)g(has)g(zero)g(w)n(eigh)n(t.)227 3861
-y(An)d(input)g(pixel)f(is)f(considered)g(bad)h(\(and)g(is)g(consequen)n
-(tly)f(ignored\))g(if)i(its)f(data)g(v)-5 b(alue)23 b(is)f(equal)h(to)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")227 3960 y Fj(and)28 b(the)g(AST)p
-Ft(__)p Fj(USEBAD)f(\015ag)g(is)h(set)f(via)g(the)h Ft(")p
-Fj(\015ags)p Ft(")e Fj(parameter.)227 4081 y(In)j(addition,)f(asso)r
-(ciated)f(output)i(v)-5 b(ariance)27 b(estimates)h(\(if)i(calculated\))
-e(ma)n(y)f(b)r(e)i(declared)e(bad)i(and)f(\015agged)227
-4180 y(with)g(the)g Ft(")p Fj(badv)-5 b(al)p Ft(")27
-b Fj(v)-5 b(alue)27 b(in)h(the)g Ft(")p Fj(out)p Ft(_)p
-Fj(v)-5 b(ar)p Ft(")26 b Fj(arra)n(y)f(for)i(similar)g(reasons.)p
-0 4363 3780 12 v 0 4494 a Fz(astRemapF)-11 b(rame)1121
-4495 y Fe(Mo)s(dify)38 b(a)h(F)-10 b(rame's)38 b(relationship)1104
-4609 y(to)g(other)g(F)-10 b(rames)38 b(in)h(a)f(F)-10
-b(rameSet)2828 4494 y Fz(astRemapF)f(rame)0 4763 y Fd(Description:)44
-b Fj(This)36 b(function)h(mo)r(di\014es)f(the)g(relationship)f(\(i.e.)
-63 b(Mapping\))36 b(b)r(et)n(w)n(een)g(a)f(sp)r(eci\014ed)h(F)-7
-b(rame)36 b(in)g(a)227 4863 y(F)-7 b(rameSet)28 b(and)f(the)h(other)f
-(F)-7 b(rames)27 b(in)h(that)g(F)-7 b(rameSet.)227 4983
-y(T)n(ypically)g(,)31 b(this)f(migh)n(t)g(b)r(e)h(required)f(if)g(the)h
-(F)-7 b(rameSet)30 b(has)g(b)r(een)h(used)f(to)g(calibrate)g(\(sa)n
-(y\))f(an)h(image,)h(and)227 5083 y(that)h(image)e(is)h(re-binned.)48
-b(The)31 b(F)-7 b(rame)30 b(describing)h(the)g(image)g(will)g(then)h
-(ha)n(v)n(e)e(undergone)g(a)h(co)r(ordinate)227 5183
-y(transformation,)26 b(and)i(this)g(should)f(b)r(e)h(comm)n(unicated)f
-(to)h(the)g(asso)r(ciated)e(F)-7 b(rameSet)27 b(using)g(this)h
-(function.)0 5324 y Fd(Synopsis:)121 b Ft(void)42 b(astRemapFrame\()c
-(AstFrameSet)h Fi(\003)p Ft(this,)i(int)h(iframe,)f(AstMapping)e
-Fi(\003)p Ft(map)j(\))0 5465 y Fd(P)m(arameters:)259
-5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rameSet.)p eop end
-%%Page: 319 329
-TeXDict begin 319 328 bop 3643 52 a FF(319)259 351 y
-Fd(iframe)427 451 y Fj(The)34 b(index)h(within)g(the)f(F)-7
-b(rameSet)34 b(of)g(the)h(F)-7 b(rame)33 b(to)h(b)r(e)h(mo)r(di\014ed.)
-57 b(This)34 b(v)-5 b(alue)34 b(should)g(lie)g(in)g(the)427
-551 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)259 667 y Fd(map)427 766
-y Fj(P)n(oin)n(ter)38 b(to)i(a)f(Mapping)g(whose)g(forw)n(ard)f
-(transformation)g(con)n(v)n(erts)g(co)r(ordinate)h(v)-5
-b(alues)39 b(from)g(the)427 866 y(original)27 b(co)r(ordinate)f(system)
-i(describ)r(ed)f(b)n(y)h(the)g(F)-7 b(rame)27 b(to)h(the)g(new)g(one,)g
-(and)f(whose)g(in)n(v)n(erse)g(trans-)427 966 y(formation)g(con)n(v)n
-(erts)f(in)i(the)g(opp)r(osite)f(direction.)0 1111 y
-Fd(Notes:)340 1377 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)30
-b(of)h(AST)p Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p Fj(CURRENT)h(ma)n(y)f
-(b)r(e)h(giv)n(en)g(for)f(the)h Ft(")p Fj(iframe)p Ft(")f
-Fj(parameter)g(to)427 1477 y(sp)r(ecify)e(the)g(base)f(F)-7
-b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n
-(ely)-7 b(.)340 1593 y Fi(\017)45 b Fj(The)29 b(relationship)e(b)r(et)n
-(w)n(een)h(the)h(selected)f(F)-7 b(rame)28 b(and)g(an)n(y)g(other)g(F)
--7 b(rame)28 b(within)h(the)f(F)-7 b(rameSet)28 b(will)427
-1693 y(b)r(e)h(mo)r(di\014ed)f(b)n(y)f(this)i(function,)f(but)h(the)f
-(relationship)f(b)r(et)n(w)n(een)h(all)f(other)g(F)-7
-b(rames)27 b(in)i(the)f(F)-7 b(rameSet)427 1792 y(remains)27
-b(unc)n(hanged.)340 1908 y Fi(\017)45 b Fj(The)27 b(n)n(um)n(b)r(er)g
-(of)g(input)h(co)r(ordinate)e(v)-5 b(alues)27 b(accepted)g(b)n(y)f(the)
-i(Mapping)f(\(its)g(Nin)h(attribute\))f(and)g(the)427
-2008 y(n)n(um)n(b)r(er)j(of)g(output)g(co)r(ordinate)f(v)-5
-b(alues)30 b(generated)f(\(its)h(Nout)g(attribute\))h(m)n(ust)f(b)r(e)g
-(equal)g(and)f(m)n(ust)427 2108 y(matc)n(h)f(the)g(n)n(um)n(b)r(er)f
-(of)h(axes)e(in)i(the)g(F)-7 b(rame)27 b(b)r(eing)h(mo)r(di\014ed.)340
-2224 y Fi(\017)45 b Fj(If)33 b(a)g(simple)f(c)n(hange)g(of)h(axis)e
-(order)h(is)g(required,)h(then)g(the)h(astP)n(ermAxes)c(function)k(ma)n
-(y)e(pro)n(vide)f(a)427 2324 y(more)c(straigh)n(tforw)n(ard)e(metho)r
-(d)j(of)f(making)g(the)h(required)f(c)n(hanges)f(to)h(the)h(F)-7
-b(rameSet.)340 2440 y Fi(\017)45 b Fj(This)32 b(function)g(cannot)f(b)r
-(e)g(used)h(to)f(c)n(hange)f(the)i(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)30 b(axes.)48 b(T)-7 b(o)31 b(ac)n(hiev)n(e)f(this,)j(a)e(new)
-427 2540 y(F)-7 b(rame)29 b(m)n(ust)h(b)r(e)g(added)g(to)f(the)h(F)-7
-b(rameSet)29 b(\(astAddF)-7 b(rame\))30 b(and)g(the)g(original)e(one)h
-(remo)n(v)n(ed)f(if)i(nec-)427 2639 y(essary)c(\(astRemo)n(v)n(eF)-7
-b(rame\).)p 0 2805 3780 12 v 0 2936 a Fz(astRemo)l(v)l(eF)c(rame)1274
-2937 y Fe(Remo)m(v)m(e)37 b(a)i(F)-10 b(rame)38 b(from)f(a)1648
-3037 y(F)-10 b(rameSet)2776 2936 y Fz(astRemo)l(v)l(eF)f(rame)0
-3169 y Fd(Description:)44 b Fj(This)27 b(function)g(remo)n(v)n(es)e(a)i
-(F)-7 b(rame)26 b(from)g(a)g(F)-7 b(rameSet.)37 b(All)27
-b(other)f(F)-7 b(rames)26 b(in)h(the)g(F)-7 b(rameSet)27
-b(ha)n(v)n(e)227 3269 y(their)h(indices)f(re-n)n(um)n(b)r(ered)g(from)g
-(one)g(\(if)i(necessary\),)d(but)i(are)f(otherwise)f(unc)n(hanged.)0
-3402 y Fd(Synopsis:)121 b Ft(void)42 b(astRemoveFrame\()37
-b(AstFrameSet)i Fi(\003)p Ft(this,)i(int)i(iframe)e(\))0
-3535 y Fd(P)m(arameters:)259 3655 y(this)427 3754 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rameSet.)259 3870 y Fd(iframe)427
-3970 y Fj(The)35 b(index)g(within)g(the)g(F)-7 b(rameSet)34
-b(of)h(the)g(F)-7 b(rame)34 b(to)h(b)r(e)g(remo)n(v)n(ed.)56
-b(This)35 b(v)-5 b(alue)34 b(should)h(lie)f(in)h(the)427
-4070 y(range)27 b(from)g(1)g(to)g(the)h(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rames)27 b(in)h(the)g(F)-7 b(rameSet)27 b(\(as)h(giv)n(en)e(b)n(y)i
-(its)f(Nframe)h(attribute\).)0 4215 y Fd(Notes:)340 4481
-y Fi(\017)45 b Fj(Remo)n(ving)31 b(a)g(F)-7 b(rame)31
-b(from)g(a)g(F)-7 b(rameSet)32 b(do)r(es)f(not)h(a\013ect)f(the)h
-(relationship)f(b)r(et)n(w)n(een)g(other)g(F)-7 b(rames)427
-4581 y(in)28 b(the)g(F)-7 b(rameSet,)28 b(ev)n(en)f(if)h(they)g
-(originally)d(dep)r(ended)k(on)e(the)h(F)-7 b(rame)27
-b(b)r(eing)h(remo)n(v)n(ed.)340 4697 y Fi(\017)45 b Fj(The)31
-b(n)n(um)n(b)r(er)g(of)g(F)-7 b(rames)30 b(in)i(a)e(F)-7
-b(rameSet)31 b(cannot)g(b)r(e)g(reduced)g(to)g(zero.)46
-b(An)31 b(error)e(will)j(result)e(if)i(an)427 4797 y(attempt)d(is)e
-(made)g(to)h(remo)n(v)n(e)e(the)i(only)f(remaining)g(F)-7
-b(rame.)340 4913 y Fi(\017)45 b Fj(A)32 b(v)-5 b(alue)30
-b(of)h(AST)p Ft(__)p Fj(BASE)g(or)f(AST)p Ft(__)p Fj(CURRENT)h(ma)n(y)f
-(b)r(e)h(giv)n(en)g(for)f(the)h Ft(")p Fj(iframe)p Ft(")f
-Fj(parameter)g(to)427 5012 y(sp)r(ecify)e(the)g(base)f(F)-7
-b(rame)27 b(or)g(the)h(curren)n(t)f(F)-7 b(rame)27 b(resp)r(ectiv)n
-(ely)-7 b(.)340 5129 y Fi(\017)45 b Fj(If)22 b(a)f(F)-7
-b(rameSet's)21 b(base)f(or)h(curren)n(t)f(F)-7 b(rame)21
-b(is)g(remo)n(v)n(ed,)g(the)g(Base)g(or)f(Curren)n(t)h(attribute)g
-(\(resp)r(ectiv)n(ely\))427 5228 y(of)30 b(the)g(F)-7
-b(rameSet)30 b(will)g(ha)n(v)n(e)f(its)h(v)-5 b(alue)30
-b(cleared,)f(so)g(that)i(another)d(F)-7 b(rame)30 b(will)g(then)g
-(assume)f(its)i(role)427 5328 y(b)n(y)d(default.)340
-5444 y Fi(\017)45 b Fj(If)26 b(an)n(y)f(other)g(F)-7
-b(rame)25 b(is)g(remo)n(v)n(ed,)f(the)i(base)f(and)g(curren)n(t)g(F)-7
-b(rames)24 b(will)i(remain)f(the)h(same.)35 b(T)-7 b(o)25
-b(ensure)427 5544 y(this,)37 b(the)d(Base)g(and/or)e(Curren)n(t)i
-(attributes)g(of)g(the)h(F)-7 b(rameSet)34 b(will)h(b)r(e)f(c)n
-(hanged,)i(if)e(necessary)-7 b(,)35 b(to)427 5644 y(re\015ect)28
-b(an)n(y)e(c)n(hange)h(in)h(the)g(indices)f(of)h(these)f(F)-7
-b(rames.)p eop end
-%%Page: 320 330
-TeXDict begin 320 329 bop 0 52 a FF(320)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astRemo)l(v)l(eRegions)1359 482 y Fe(Remo)m(v)m(e)38
-b(an)m(y)g(Regions)1477 596 y(from)f(a)i(Mapping)2682
-483 y Fz(astRemo)l(v)l(eRegions)0 792 y Fd(Description:)44
-b Fj(This)33 b(function)g(searc)n(hes)e(the)i(suppliedMapping)g(\(whic)
-n(h)g(ma)n(y)f(b)r(e)h(a)f(comp)r(ound)h(Mapping)f(suc)n(h)227
-891 y(as)d(a)g(CmpMap\))g(for)g(an)n(y)f(comp)r(onen)n(t)h(Mappings)g
-(that)g(are)f(instances)h(of)g(the)h(AST)f(Region)g(class.)41
-b(It)29 b(then)227 991 y(creates)f(a)h(new)g(Mapping)f(from)h(whic)n(h)
-g(all)f(Regions)g(ha)n(v)n(e)g(b)r(een)h(remo)n(v)n(ed.)40
-b(If)29 b(a)f(Region)h(cannot)f(simply)h(b)r(e)227 1091
-y(remo)n(v)n(ed)34 b(\(for)i(instance,)h(if)f(it)g(is)f(a)g(comp)r
-(onen)n(t)h(of)f(a)g(parallel)g(CmpMap\),)j(then)e(it)g(is)f(replaced)g
-(with)h(an)227 1190 y(equiv)-5 b(alen)n(t)28 b(UnitMap)g(in)g(the)g
-(returned)f(Mapping.)0 1342 y Fd(Synopsis:)121 b Ft(AstMapping)39
-b Fi(\003)p Ft(astRemoveRegions)o(\()e(AstMapping)j Fi(\003)p
-Ft(this)h(\))0 1494 y Fd(P)m(arameters:)259 1632 y(this)427
-1732 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(original)e(Mapping.)0
-1896 y Fd(Class)31 b(Applicabilit)m(y:)259 2035 y(CmpF)-8
-b(rame)427 2134 y Fj(If)35 b(the)f(supplied)g(Mapping)g(is)g(a)f(CmpF)
--7 b(rame,)36 b(an)n(y)d(comp)r(onen)n(t)g(F)-7 b(rames)34
-b(that)g(are)f(instances)g(of)h(the)427 2234 y(Region)27
-b(class)g(are)f(replaced)h(b)n(y)g(the)h(equiv)-5 b(alen)n(t)28
-b(F)-7 b(rame.)259 2368 y Fd(F)f(rameSet)427 2467 y Fj(If)29
-b(the)f(supplied)g(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28
-b(the)g(returned)g(Mapping)f(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g
-(supplied)427 2567 y(F)-7 b(rameSet)29 b(in)g(whic)n(h)g(Regions)f(ha)n
-(v)n(e)g(b)r(een)i(remo)n(v)n(ed)d(from)i(all)g(the)g(in)n(ter-F)-7
-b(rame)28 b(Mappings,)h(and)f(an)n(y)427 2667 y(F)-7
-b(rames)27 b(whic)n(h)h(are)e(instances)h(of)h(the)g(Region)f(class)f
-(are)h(repalced)g(b)n(y)g(the)h(equiv)-5 b(alen)n(t)27
-b(F)-7 b(rame.)259 2801 y Fd(Mapping)427 2900 y Fj(This)28
-b(function)g(applies)f(to)h(all)f(Mappings.)259 3034
-y Fd(Region)427 3134 y Fj(If)h(the)g(supplied)g(Mapping)f(is)h(a)f
-(Region,)g(the)h(returned)f(Mapping)g(will)h(b)r(e)g(the)g(equiv)-5
-b(alen)n(t)28 b(F)-7 b(rame.)0 3298 y Fd(Returned)32
-b(V)-8 b(alue:)259 3436 y(astRemo)m(v)m(eRegions\(\))427
-3536 y Fj(A)28 b(new)g(p)r(oin)n(ter)f(to)h(the)g(\(p)r(ossibly)f(mo)r
-(di\014ed\))h(Mapping.)0 3700 y Fd(Notes:)340 3985 y
-Fi(\017)45 b Fj(This)22 b(function)f(can)g(safely)g(b)r(e)h(applied)f
-(ev)n(en)g(to)g(Mappings)f(whic)n(h)i(con)n(tain)e(no)h(Regions.)34
-b(If)22 b(no)f(Regions)427 4084 y(are)27 b(found,)h(it)g(b)r(eha)n(v)n
-(es)e(exactly)h(lik)n(e)h(astClone)e(and)i(returns)f(a)g(p)r(oin)n(ter)
-g(to)g(the)h(original)f(Mapping.)340 4218 y Fi(\017)45
-b Fj(The)26 b(Mapping)f(returned)g(b)n(y)g(this)h(function)g(ma)n(y)e
-(not)i(b)r(e)g(indep)r(enden)n(t)g(of)f(the)h(original)e(\(ev)n(en)h
-(if)h(some)427 4318 y(Regions)f(w)n(ere)h(remo)n(v)n(ed\),)f(and)h(mo)r
-(difying)g(it)h(ma)n(y)e(therefore)h(result)f(in)i(indirect)f(mo)r
-(di\014cation)g(of)g(the)427 4418 y(original.)34 b(If)22
-b(a)g(completely)g(indep)r(enden)n(t)g(result)g(is)g(required,)g(a)g
-(cop)n(y)f(should)h(b)r(e)g(made)g(using)g(astCop)n(y)-7
-b(.)340 4552 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4651 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 4853 V 0 4984 a Fz(astResample)p
-Fc(<)p Fz(X)p Fc(>)154 b Fe(Resample)38 b(a)g(region)f(of)i(a)f(data)
-1789 5099 y(grid)2759 4984 y Fz(astResample)p Fc(<)p
-Fz(X)p Fc(>)0 5295 y Fd(Description:)44 b Fj(This)31
-b(is)g(a)f(set)h(of)g(functions)g(for)f(resampling)g(gridded)g(data)h
-(\(e.g.)46 b(an)31 b(image\))f(under)h(the)g(con)n(trol)227
-5394 y(of)c(a)e(geometrical)g(transformation,)g(whic)n(h)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(a)g(Mapping.)36 b(The)26 b(functions)h(op)r(erate)
-e(on)h(a)g(pair)227 5494 y(of)i(data)f(grids)f(\(input)j(and)f
-(output\),)g(eac)n(h)f(of)g(whic)n(h)h(ma)n(y)f(ha)n(v)n(e)f(an)n(y)h
-(n)n(um)n(b)r(er)g(of)h(dimensions.)36 b(Resampling)227
-5593 y(ma)n(y)c(b)r(e)g(restricted)g(to)g(a)g(sp)r(eci\014ed)h(region)d
-(of)j(the)f(output)h(grid.)50 b(An)33 b(asso)r(ciated)e(grid)g(of)i
-(error)d(estimates)227 5693 y(asso)r(ciated)36 b(with)h(the)g(input)h
-(data)e(ma)n(y)g(also)g(b)r(e)h(supplied)g(\(in)g(the)h(form)e(of)h(v)
--5 b(ariance)35 b(v)-5 b(alues\),)39 b(so)e(as)f(to)p
-eop end
-%%Page: 321 331
-TeXDict begin 321 330 bop 3643 52 a FF(321)227 351 y
-Fj(pro)r(duce)29 b(error)f(estimates)h(for)g(the)h(resampled)e(output)i
-(data.)42 b(Propagation)27 b(of)i(missing)g(data)g(\(bad)h(pixels\))227
-451 y(is)e(supp)r(orted.)227 572 y(Y)-7 b(ou)41 b(should)g(use)f(a)g
-(resampling)g(function)h(whic)n(h)g(matc)n(hes)f(the)h(n)n(umerical)f
-(t)n(yp)r(e)h(of)f(the)h(data)g(y)n(ou)f(are)227 672
-y(pro)r(cessing)24 b(b)n(y)i(replacing)e Fl(<)p Fj(X)p
-Fl(>)h Fj(in)h(the)g(generic)e(function)i(name)g(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(b)n(y)h(an)h(appropriate)d(1-)227
-771 y(or)f(2-c)n(haracter)d(t)n(yp)r(e)j(co)r(de.)35
-b(F)-7 b(or)22 b(example,)h(if)f(y)n(ou)g(are)f(resampling)g(data)g
-(with)i(t)n(yp)r(e)f Ft(")p Fj(\015oat)p Ft(")p Fj(,)g(y)n(ou)g(should)
-g(use)227 871 y(the)33 b(function)f(astResampleF)f(\(see)h(the)h
-Ft(")p Fj(Data)e(T)n(yp)r(e)h(Co)r(des)p Ft(")f Fj(section)g(b)r(elo)n
-(w)h(for)f(the)i(co)r(des)e(appropriate)227 971 y(to)d(other)f(n)n
-(umerical)g(t)n(yp)r(es\).)227 1092 y(Resampling)e(of)h(the)f(grid)g
-(of)h(input)g(data)f(is)g(p)r(erformed)g(b)n(y)h(transforming)e(the)h
-(co)r(ordinates)f(of)i(the)g(cen)n(tre)f(of)227 1192
-y(eac)n(h)d(output)g(grid)g(elemen)n(t)g(\(or)g(pixel\))g(in)n(to)g
-(the)h(co)r(ordinate)e(system)h(of)g(the)h(input)g(grid.)34
-b(Since)23 b(the)f(resulting)227 1291 y(co)r(ordinates)27
-b(will)h(not,)g(in)g(general,)f(coincide)h(with)g(the)h(cen)n(tre)e(of)
-h(an)g(input)h(pixel,)f(sub-pixel)f(in)n(terp)r(olation)227
-1391 y(is)35 b(p)r(erformed)g(b)r(et)n(w)n(een)g(the)h(neigh)n(b)r
-(ouring)e(input)i(pixels.)60 b(This)35 b(pro)r(duces)f(a)h(resampled)f
-(v)-5 b(alue)36 b(whic)n(h)f(is)227 1491 y(then)26 b(assigned)d(to)i
-(the)g(output)g(pixel.)36 b(A)26 b(c)n(hoice)e(of)g(sub-pixel)h(in)n
-(terp)r(olation)f(sc)n(hemes)g(is)h(pro)n(vided,)f(but)h(y)n(ou)227
-1590 y(ma)n(y)i(also)g(implemen)n(t)h(y)n(our)e(o)n(wn.)227
-1712 y(This)g(algorithm)f(samples)h(the)h(input)g(data)e(v)-5
-b(alue,)27 b(it)f(do)r(es)g(not)g(in)n(tegrate)f(it.)37
-b(Th)n(us)26 b(total)g(data)g(v)-5 b(alue)26 b(in)g(the)227
-1811 y(input)31 b(image)f(will)h(not,)g(in)f(general,)g(b)r(e)h
-(conserv)n(ed.)43 b(Ho)n(w)n(ev)n(er,)30 b(an)g(option)g(is)g(pro)n
-(vided)f(\(see)i(the)f Ft(")p Fj(Con)n(trol)227 1911
-y(Flags)p Ft(")38 b Fj(section)h(b)r(elo)n(w\))g(whic)n(h)h(can)e(pro)r
-(duce)h(appro)n(ximate)f(\015ux)h(conserv)-5 b(ation)38
-b(b)n(y)h(scaling)f(the)i(output)227 2010 y(v)-5 b(alues)34
-b(using)f(the)h(ratio)f(of)h(the)g(output)h(pixel)f(size)f(to)h(the)g
-(input)h(pixel)f(size.)55 b(Ho)n(w)n(ev)n(er,)34 b(if)g(accurate)e
-(\015ux)227 2110 y(conserv)-5 b(ation)29 b(is)h(imp)r(ortan)n(t)f(to)h
-(y)n(ou,)g(consder)f(using)h(the)g(astRebin)p Fl(<)p
-Fj(X)p Fl(>)f Fj(or)g(astRebinSeq)p Fl(<)p Fj(X)p Fl(>)h
-Fj(family)g(of)227 2210 y(functions)e(instead.)227 2331
-y(Output)k(pixel)g(co)r(ordinates)e(are)h(transformed)f(in)n(to)h(the)h
-(co)r(ordinate)e(system)i(of)f(the)h(input)g(grid)f(using)g(the)227
-2431 y(in)n(v)n(erse)i(transformation)g(of)h(the)h(Mapping)e(whic)n(h)i
-(is)f(supplied.)57 b(This)34 b(means)g(that)h(geometrical)d(features)
-227 2530 y(in)g(the)f(input)h(data)f(are)f(sub)5 b(jected)31
-b(to)g(the)h(Mapping's)e(forw)n(ard)g(transformation)f(as)i(they)g(are)
-f(transferred)227 2630 y(from)24 b(the)g(input)g(to)g(the)g(output)g
-(grid)f(\(although)g(the)h(Mapping's)f(forw)n(ard)f(transformation)g
-(is)i(not)f(explicitly)227 2729 y(used\).)227 2851 y(In)h(practice,)f
-(transforming)e(the)j(co)r(ordinates)e(of)h(ev)n(ery)e(pixel)j(of)f(a)f
-(large)g(data)h(grid)f(can)h(b)r(e)g(time-consuming,)227
-2950 y(esp)r(ecially)38 b(if)g(the)h(Mapping)f(in)n(v)n(olv)n(es)e
-(complicated)i(functions,)j(suc)n(h)c(as)h(sky)f(pro)5
-b(jections.)67 b(T)-7 b(o)38 b(impro)n(v)n(e)227 3050
-y(p)r(erformance,)29 b(it)g(is)g(therefore)f(p)r(ossible)g(to)h(appro)n
-(ximate)e(non-linear)h(Mappings)g(b)n(y)h(a)g(set)g(of)f(linear)h
-(trans-)227 3150 y(formations)h(whic)n(h)h(are)f(applied)g(piece-wise)h
-(to)f(separate)g(sub-regions)f(of)h(the)i(data.)46 b(This)30
-b(appro)n(ximation)227 3249 y(pro)r(cess)37 b(is)h(applied)g
-(automatically)f(b)n(y)h(an)g(adaptiv)n(e)f(algorithm,)i(under)f(con)n
-(trol)f(of)h(an)g(accuracy)e(crite-)227 3349 y(rion)25
-b(whic)n(h)h(expresses)f(the)h(maxim)n(um)g(tolerable)f(geometrical)f
-(distortion)h(whic)n(h)h(ma)n(y)f(b)r(e)i(in)n(tro)r(duced,)f(as)f(a)
-227 3449 y(fraction)i(of)h(a)f(pixel.)227 3570 y(This)34
-b(algorithm)e(\014rst)h(attempts)h(to)g(appro)n(ximate)e(the)i(Mapping)
-f(with)h(a)f(linear)g(transformation)f(applied)227 3670
-y(o)n(v)n(er)h(the)h(whole)g(region)f(of)h(the)h(output)g(grid)e(whic)n
-(h)i(is)f(b)r(eing)g(used.)57 b(If)35 b(this)f(pro)n(v)n(es)f(to)h(b)r
-(e)g(insu\016cien)n(tly)227 3769 y(accurate,)29 b(the)h(output)g
-(region)f(is)g(sub-divided)h(in)n(to)f(t)n(w)n(o)g(along)f(its)i
-(largest)e(dimension)i(and)f(the)h(pro)r(cess)f(is)227
-3869 y(rep)r(eated)k(within)h(eac)n(h)f(of)g(the)h(resulting)e
-(sub-regions.)53 b(This)33 b(pro)r(cess)f(of)h(sub-division)g(con)n
-(tin)n(ues)f(un)n(til)i(a)227 3968 y(su\016cien)n(tly)27
-b(go)r(o)r(d)g(linear)f(appro)n(ximation)g(is)h(found,)g(or)f(the)i
-(region)e(to)h(whic)n(h)g(it)h(is)f(b)r(eing)g(applied)g(b)r(ecomes)227
-4068 y(to)r(o)h(small)f(\(in)h(whic)n(h)f(case)g(the)h(original)e
-(Mapping)h(is)h(used)g(directly\).)0 4211 y Fd(Synopsis:)121
-b Ft(int)42 b(astResample)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstMapping)h
-Fi(\003)p Ft(this,)i(int)h(ndim_in,)f(const)g(int)i(lbnd_in[],)c(const)
-227 4311 y(int)k(ubnd_in[],)c(const)j Fl(<)p Ft(Xtype)p
-Fl(>)e Ft(in[],)i(const)f Fl(<)p Ft(Xtype)p Fl(>)g Ft(in_var[],)f(int)i
-(interp,)f(void)h(\()p Fi(\003)g Ft(finterp\)\(\),)227
-4410 y(const)g(double)f(params[],)f(int)i(flags,)f(double)g(tol,)h(int)
-h(maxpix,)d Fl(<)p Ft(Xtype)p Fl(>)h Ft(badval,)g(int)h(ndim_out,)227
-4510 y(const)g(int)g(lbnd_out[],)d(const)j(int)g(ubnd_out[],)d(const)j
-(int)g(lbnd[],)f(const)g(int)h(ubnd[],)f Fl(<)p Ft(Xtype)p
-Fl(>)227 4610 y Ft(out[],)g Fl(<)p Ft(Xtype)p Fl(>)g
-Ft(out_var[])f(\);)0 4753 y Fd(P)m(arameters:)259 4883
-y(this)427 4982 y Fj(P)n(oin)n(ter)21 b(to)h(a)g(Mapping,)h(whose)f(in)
-n(v)n(erse)f(transformation)g(will)i(b)r(e)f(used)h(to)f(transform)f
-(the)i(co)r(ordinates)427 5082 y(of)36 b(pixels)f(in)h(the)g(output)h
-(grid)e(in)n(to)g(the)h(co)r(ordinate)f(system)g(of)h(the)g(input)h
-(grid.)60 b(This)36 b(yields)f(the)427 5181 y(p)r(ositions)h(whic)n(h)g
-(are)f(used)h(to)g(obtain)g(resampled)f(v)-5 b(alues)36
-b(b)n(y)f(sub-pixel)h(in)n(terp)r(olation)f(within)i(the)427
-5281 y(input)29 b(grid.)427 5394 y(The)24 b(n)n(um)n(b)r(er)g(of)g
-(input)h(co)r(ordinates)e(used)h(b)n(y)g(this)g(Mapping)g(\(as)f(giv)n
-(en)h(b)n(y)f(its)i(Nin)f(attribute\))h(should)427 5494
-y(matc)n(h)e(the)g(n)n(um)n(b)r(er)g(of)g(input)h(grid)e(dimensions)h
-(giv)n(en)f(b)n(y)g(the)i(v)-5 b(alue)23 b(of)g Ft(")p
-Fj(ndim)p Ft(_)p Fj(in)p Ft(")f Fj(b)r(elo)n(w.)35 b(Similarly)-7
-b(,)427 5593 y(the)29 b(n)n(um)n(b)r(er)e(of)h(output)g(co)r(ordinates)
-f(\(Nout)h(attribute\))h(should)e(matc)n(h)h(the)g(n)n(um)n(b)r(er)g
-(of)g(output)g(grid)427 5693 y(dimensions)g(giv)n(en)e(b)n(y)i
-Ft(")p Fj(ndim)p Ft(_)p Fj(out)p Ft(")p Fj(.)p eop end
-%%Page: 322 332
-TeXDict begin 322 331 bop 0 52 a FF(322)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(ndim)p
-Ft(_)p Fd(in)427 451 y Fj(The)e(n)n(um)n(b)r(er)f(of)h(dimensions)f(in)
-h(the)g(input)g(grid.)36 b(This)28 b(should)f(b)r(e)h(at)g(least)f
-(one.)259 597 y Fd(lbnd)p Ft(_)p Fd(in)427 696 y Fj(P)n(oin)n(ter)i(to)
-i(an)f(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 796 y(cen)n(tre)d(of)h(the)g(\014rst)f(pixel)
-h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-941 y Fd(ubnd)p Ft(_)p Fd(in)427 1041 y Fj(P)n(oin)n(ter)i(to)i(an)f
-(arra)n(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r
-(ordinates)e(of)h(the)427 1141 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h
-(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)427
-1263 y(Note)h(that)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p
-Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(together)g(de\014ne)h(the)h(shap)r(e)f(and)f(size)h(of)g(the)g
-(input)h(grid,)e(its)427 1363 y(exten)n(t)f(along)f(a)g(particular)f
-(\(j'th\))k(dimension)d(b)r(eing)h(ubnd)p Ft(_)p Fj(in[j]-lbnd)p
-Ft(_)p Fj(in[j]+1)g(\(assuming)f(the)i(index)427 1463
-y Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)g(zero-based\).)35
-b(They)26 b(also)f(de\014ne)h(the)h(input)g(grid's)e(co)r(ordinate)g
-(system,)h(eac)n(h)g(pixel)g(ha)n(ving)427 1562 y(unit)j(exten)n(t)e
-(along)g(eac)n(h)f(dimension)i(with)g(in)n(tegral)e(co)r(ordinate)h(v)
--5 b(alues)27 b(at)g(its)h(cen)n(tre.)259 1708 y Fd(in)427
-1807 y Fj(P)n(oin)n(ter)h(to)i(an)f(arra)n(y)-7 b(,)30
-b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)g(in)h(the)g(input)h
-(grid,)f(con)n(taining)f(the)h(input)427 1907 y(data)f(to)h(b)r(e)g
-(resampled.)45 b(The)31 b(n)n(umerical)e(t)n(yp)r(e)i(of)g(this)g(arra)
-n(y)d(should)i(matc)n(h)h(the)g(1-)f(or)f(2-c)n(haracter)427
-2007 y(t)n(yp)r(e)j(co)r(de)g(app)r(ended)g(to)f(the)h(function)g(name)
-g(\(e.g.)49 b(if)32 b(y)n(ou)f(are)f(using)i(astResampleF,)f(the)h(t)n
-(yp)r(e)g(of)427 2106 y(eac)n(h)27 b(arra)n(y)e(elemen)n(t)j(should)f
-(b)r(e)h Ft(")p Fj(\015oat)p Ft(")p Fj(\).)427 2229 y(The)33
-b(storage)f(order)f(of)j(data)e(within)i(this)g(arra)n(y)c(should)j(b)r
-(e)h(suc)n(h)f(that)g(the)h(index)f(of)g(the)g(\014rst)g(grid)427
-2329 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)h(that)g
-(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 2428 y(indexing)28
-b(is)f(used\).)259 2574 y Fd(in)p Ft(_)p Fd(v)-5 b(ar)427
-2673 y Fj(An)25 b(optional)e(p)r(oin)n(ter)h(to)g(a)f(second)h(arra)n
-(y)e(with)i(the)h(same)e(size)h(and)g(t)n(yp)r(e)g(as)f(the)i
-Ft(")p Fj(in)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)24 b(giv)n(en,)427
-2773 y(this)32 b(should)g(con)n(tain)f(a)g(set)h(of)g(non-negativ)n(e)e
-(v)-5 b(alues)31 b(whic)n(h)h(represen)n(t)f(estimates)g(of)h(the)g
-(statistical)427 2873 y(v)-5 b(ariance)32 b(asso)r(ciated)f(with)i(eac)
-n(h)f(elemen)n(t)g(of)h(the)g Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)-7
-b(.)49 b(If)33 b(this)g(arra)n(y)d(is)i(supplied)h(\(together)427
-2972 y(with)k(the)f(corresp)r(onding)e Ft(")p Fj(out)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")34 b Fj(arra)n(y\),)i(then)h(estimates)e(of)
-h(the)g(v)-5 b(ariance)35 b(of)h(the)g(resampled)427
-3072 y(output)28 b(data)g(will)f(b)r(e)h(calculated.)427
-3195 y(If)g(no)g(input)g(v)-5 b(ariance)26 b(estimates)i(are)e(b)r
-(eing)i(pro)n(vided,)f(a)g(NULL)h(p)r(oin)n(ter)f(should)g(b)r(e)h(giv)
-n(en.)259 3340 y Fd(in)m(terp)427 3440 y Fj(This)j(parameter)f(sp)r
-(eci\014es)h(the)g(sc)n(heme)f(to)h(b)r(e)h(used)f(for)f(sub-pixel)h
-(in)n(terp)r(olation)f(within)h(the)h(input)427 3539
-y(grid.)62 b(It)36 b(ma)n(y)f(b)r(e)i(used)f(to)f(select)h(from)g(a)f
-(set)h(of)g(pre-de\014ned)g(sc)n(hemes)f(b)n(y)h(supplying)g(one)f(of)h
-(the)427 3639 y(v)-5 b(alues)31 b(describ)r(ed)f(in)i(the)f
-Ft(")p Fj(Sub-Pixel)f(In)n(terp)r(olation)g(Sc)n(hemes)p
-Ft(")g Fj(section)g(b)r(elo)n(w.)46 b(If)32 b(a)e(v)-5
-b(alue)31 b(of)g(zero)427 3739 y(is)d(supplied,)h(then)f(the)g(default)
-h(linear)e(in)n(terp)r(olation)g(sc)n(heme)h(is)g(used)g(\(equiv)-5
-b(alen)n(t)28 b(to)f(supplying)h(the)427 3838 y(v)-5
-b(alue)28 b(AST)p Ft(__)p Fj(LINEAR\).)427 3961 y(Alternativ)n(ely)-7
-b(,)22 b(y)n(ou)f(ma)n(y)g(supply)g(a)g(v)-5 b(alue)21
-b(whic)n(h)h(indicates)f(that)h(y)n(ou)e(will)i(pro)n(vide)e(y)n(our)g
-(o)n(wn)h(function)427 4061 y(to)h(p)r(erform)f(sub-pixel)g(in)n(terp)r
-(olation)g(b)n(y)g(means)g(of)h(the)g Ft(")p Fj(\014n)n(terp)f
-Ft(")g Fj(parameter.)33 b(Again,)23 b(see)e(the)h Ft(")p
-Fj(Sub-)427 4160 y(Pixel)27 b(In)n(terp)r(olation)g(Sc)n(hemes)p
-Ft(")g Fj(section)g(b)r(elo)n(w)g(for)g(details.)259
-4306 y Fd(\014n)m(terp)427 4405 y Fj(If)22 b(the)f(v)-5
-b(alue)21 b(giv)n(en)g(for)f(the)i Ft(")p Fj(in)n(terp)p
-Ft(")e Fj(parameter)g(indicates)h(that)g(y)n(ou)f(will)i(pro)n(vide)e
-(y)n(our)g(o)n(wn)g(function)427 4505 y(for)28 b(sub-pixel)g(in)n(terp)
-r(olation,)g(then)h(a)f(p)r(oin)n(ter)g(to)h(that)f(function)h(should)g
-(b)r(e)f(giv)n(en)g(here.)39 b(F)-7 b(or)28 b(details)427
-4605 y(of)f(the)h(in)n(terface)e(whic)n(h)i(the)f(function)h(should)f
-(ha)n(v)n(e)f(\(sev)n(eral)g(are)g(p)r(ossible,)h(dep)r(ending)g(on)g
-(the)h(v)-5 b(alue)427 4704 y(of)28 b Ft(")p Fj(in)n(terp)p
-Ft(")p Fj(\),)f(see)g(the)h Ft(")p Fj(Sub-Pixel)f(In)n(terp)r(olation)f
-(Sc)n(hemes)p Ft(")h Fj(section)g(b)r(elo)n(w.)427 4827
-y(If)h(the)f Ft(")p Fj(in)n(terp)p Ft(")f Fj(parameter)f(has)h(an)n(y)g
-(other)h(v)-5 b(alue,)27 b(corresp)r(onding)e(to)h(one)h(of)g(the)g
-(pre-de\014ned)f(in)n(ter-)427 4927 y(p)r(olation)h(sc)n(hemes,)g(then)
-h(this)g(function)h(will)e(not)h(b)r(e)g(used)g(and)f(y)n(ou)g(ma)n(y)g
-(supply)g(a)h(NULL)g(p)r(oin)n(ter.)259 5072 y Fd(params)427
-5172 y Fj(An)36 b(optional)e(p)r(oin)n(ter)h(to)g(an)g(arra)n(y)e(of)i
-(double)g(whic)n(h)h(should)e(con)n(tain)h(an)n(y)f(additional)h
-(parameter)427 5271 y(v)-5 b(alues)30 b(required)f(b)n(y)h(the)h
-(sub-pixel)e(in)n(terp)r(olation)h(sc)n(heme.)44 b(If)30
-b(suc)n(h)g(parameters)e(are)h(required,)h(this)427 5371
-y(will)d(b)r(e)h(noted)f(in)g(the)g Ft(")p Fj(Sub-Pixel)f(In)n(terp)r
-(olation)g(Sc)n(hemes)p Ft(")h Fj(section)f(b)r(elo)n(w)h(\(y)n(ou)f
-(ma)n(y)h(also)e(use)i(this)427 5471 y(arra)n(y)f(to)h(pass)g(v)-5
-b(alues)27 b(to)g(y)n(our)g(o)n(wn)g(in)n(terp)r(olation)g(function\).)
-427 5593 y(If)i(no)e(additional)h(parameters)e(are)h(required,)g(this)i
-(arra)n(y)c(is)j(not)g(used)g(and)g(a)g(NULL)g(p)r(oin)n(ter)g(ma)n(y)f
-(b)r(e)427 5693 y(giv)n(en.)p eop end
-%%Page: 323 333
-TeXDict begin 323 332 bop 3643 52 a FF(323)259 351 y
-Fd(\015ags)427 451 y Fj(The)29 b(bit)n(wise)g(OR)f(of)h(a)f(set)h(of)f
-(\015ag)g(v)-5 b(alues)29 b(whic)n(h)f(ma)n(y)g(b)r(e)h(used)g(to)f
-(pro)n(vide)g(additional)g(con)n(trol)f(o)n(v)n(er)427
-551 y(the)38 b(resampling)d(op)r(eration.)64 b(See)37
-b(the)h Ft(")p Fj(Con)n(trol)d(Flags)p Ft(")h Fj(section)g(b)r(elo)n(w)
-h(for)f(a)h(description)f(of)h(the)427 650 y(options)27
-b(a)n(v)-5 b(ailable.)36 b(If)28 b(no)f(\015ag)g(v)-5
-b(alues)27 b(are)g(to)g(b)r(e)h(set,)g(a)f(v)-5 b(alue)28
-b(of)f(zero)g(should)g(b)r(e)h(giv)n(en.)259 788 y Fd(tol)427
-887 y Fj(The)34 b(maxim)n(um)f(tolerable)f(geometrical)f(distortion)i
-(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r(duced)f(as)f(a)h(result)g(of)g
-(ap-)427 987 y(pro)n(ximating)c(non-linear)f(Mappings)h(b)n(y)h(a)f
-(set)h(of)g(piece-wise)f(linear)g(transformations.)42
-b(This)30 b(should)427 1087 y(b)r(e)e(expressed)f(as)g(a)g(displacemen)
-n(t)g(in)h(pixels)f(in)h(the)g(input)h(grid's)d(co)r(ordinate)h
-(system.)427 1205 y(If)34 b(piece-wise)f(linear)g(appro)n(ximation)f
-(is)h(not)h(required,)g(a)f(v)-5 b(alue)33 b(of)h(zero)e(ma)n(y)h(b)r
-(e)h(giv)n(en.)54 b(This)33 b(will)427 1305 y(ensure)k(that)g(the)h
-(Mapping)e(is)h(used)g(without)h(an)n(y)e(appro)n(ximation,)i(but)g(ma)
-n(y)e(increase)g(execution)427 1404 y(time.)259 1542
-y Fd(maxpix)427 1642 y Fj(A)42 b(v)-5 b(alue)40 b(whic)n(h)h(sp)r
-(eci\014es)g(an)g(initial)g(scale)g(size)f(\(in)i(pixels\))f(for)f(the)
-i(adaptiv)n(e)e(algorithm)g(whic)n(h)427 1741 y(appro)n(ximates)d
-(non-linear)g(Mappings)h(with)h(piece-wise)f(linear)g(transformations.)
-68 b(Normally)-7 b(,)40 b(this)427 1841 y(should)35 b(b)r(e)g(a)f
-(large)g(v)-5 b(alue)34 b(\(larger)f(than)i(an)n(y)f(dimension)h(of)g
-(the)g(region)e(of)i(the)g(output)g(grid)g(b)r(eing)427
-1941 y(used\).)46 b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g
-(appro)n(ximate)e(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)
-427 2040 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(output)
-i(region.)427 2159 y(If)h(a)f(smaller)f(v)-5 b(alue)29
-b(is)g(used,)h(the)g(output)f(region)f(will)i(\014rst)f(b)r(e)g
-(divided)h(in)n(to)f(sub-regions)e(whose)i(size)427 2258
-y(do)r(es)39 b(not)h(exceed)f Ft(")p Fj(maxpix)p Ft(")f
-Fj(pixels)i(in)g(an)n(y)e(dimension.)73 b(Only)39 b(at)g(this)h(p)r
-(oin)n(t)g(will)g(attempts)g(at)427 2358 y(appro)n(ximation)26
-b(commence.)427 2477 y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r
-(ccasionally)e(b)r(e)j(useful)f(in)h(prev)n(en)n(ting)e(false)h(con)n
-(v)n(ergence)d(of)j(the)h(adaptiv)n(e)e(al-)427 2576
-y(gorithm)c(in)g(cases)f(where)g(the)h(Mapping)g(app)r(ears)f(appro)n
-(ximately)f(linear)h(on)h(large)e(scales,)j(but)f(has)427
-2676 y(irregularities)27 b(\(e.g.)40 b(holes\))28 b(on)g(smaller)g
-(scales.)39 b(A)29 b(v)-5 b(alue)28 b(of,)h(sa)n(y)-7
-b(,)28 b(50)g(to)g(100)g(pixels)g(can)g(also)g(b)r(e)h(em-)427
-2775 y(plo)n(y)n(ed)23 b(as)f(a)h(safeguard)f(in)i(general-purp)r(ose)d
-(soft)n(w)n(are,)i(since)g(the)h(e\013ect)f(on)h(p)r(erformance)e(is)h
-(minimal.)427 2894 y(If)e(to)r(o)f(small)g(a)g(v)-5 b(alue)20
-b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g(of)f
-(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-2994 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g Ft(")p
-Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20 b(this)g(ma)n(y)f
-(degrade)f(p)r(erformance,)j(accurate)d(results)427 3093
-y(will)28 b(still)g(b)r(e)g(obtained.)259 3231 y Fd(badv)-5
-b(al)427 3330 y Fj(This)29 b(argumen)n(t)f(should)h(ha)n(v)n(e)e(the)j
-(same)e(t)n(yp)r(e)h(as)f(the)i(elemen)n(ts)e(of)h(the)g
-Ft(")p Fj(in)p Ft(")g Fj(arra)n(y)-7 b(.)38 b(It)29 b(sp)r(eci\014es)g
-(the)427 3430 y(v)-5 b(alue)28 b(used)f(to)h(\015ag)f(missing)g(data)g
-(\(bad)h(pixels\))f(in)h(the)g(input)g(and)g(output)g(arra)n(ys.)427
-3549 y(If)33 b(the)f(AST)p Ft(__)p Fj(USEBAD)g(\015ag)g(is)g(set)g(via)
-g(the)g Ft(")p Fj(\015ags)p Ft(")e Fj(parameter,)i(then)h(this)f(v)-5
-b(alue)32 b(is)g(used)g(to)g(test)427 3648 y(for)27 b(bad)h(pixels)f
-(in)h(the)g Ft(")p Fj(in)p Ft(")f Fj(\(and)h Ft(")p Fj(in)p
-Ft(_)p Fj(v)-5 b(ar)p Ft(")p Fj(\))26 b(arra)n(y\(s\).)427
-3767 y(Unless)36 b(the)f(AST)p Ft(__)p Fj(NOBAD)g(\015ag)g(is)g(set)g
-(via)g(the)h Ft(")p Fj(\015ags)p Ft(")d Fj(parameter,)j(this)g(v)-5
-b(alue)35 b(is)g(also)f(used)i(to)427 3867 y(\015ag)30
-b(an)n(y)h(output)g(elemen)n(ts)g(in)g(the)g Ft(")p Fj(out)p
-Ft(")f Fj(\(and)i Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p
-Ft(")p Fj(\))29 b(arra)n(y\(s\))g(for)h(whic)n(h)h(resampled)f(v)-5
-b(alues)427 3966 y(could)34 b(not)g(b)r(e)g(obtained)f(\(see)h(the)g
-Ft(")p Fj(Propagation)d(of)j(Missing)f(Data)p Ft(")g
-Fj(section)g(b)r(elo)n(w)h(for)f(details)h(of)427 4066
-y(the)25 b(circumstances)e(under)h(whic)n(h)g(this)h(ma)n(y)e(o)r
-(ccur\).)35 b(The)25 b(astResample)p Fl(<)p Fj(X)p Fl(>)d
-Fj(function)j(return)f(v)-5 b(alue)427 4165 y(indicates)36
-b(whether)g(an)n(y)g(suc)n(h)f(v)-5 b(alues)36 b(ha)n(v)n(e)f(b)r(een)i
-(pro)r(duced.)62 b(If)37 b(the)f(AST)p Ft(__)p Fj(NOBAD)g(\015ag)g(is)g
-(set.)427 4265 y(then)25 b(output)f(arra)n(y)e(elemen)n(ts)i(for)f
-(whic)n(h)h(no)f(resampled)g(v)-5 b(alue)24 b(could)g(b)r(e)g(obtained)
-g(are)f(left)h(set)g(to)g(the)427 4365 y(v)-5 b(alue)28
-b(they)g(had)f(on)g(en)n(try)g(to)h(this)g(function.)259
-4502 y Fd(ndim)p Ft(_)p Fd(out)427 4602 y Fj(The)38 b(n)n(um)n(b)r(er)f
-(of)g(dimensions)g(in)h(the)f(output)h(grid.)66 b(This)37
-b(should)g(b)r(e)h(at)f(least)g(one.)65 b(It)38 b(need)g(not)427
-4702 y(necessarily)26 b(b)r(e)i(equal)f(to)h(the)g(n)n(um)n(b)r(er)f
-(of)h(dimensions)f(in)h(the)g(input)g(grid.)259 4839
-y Fd(lbnd)p Ft(_)p Fd(out)427 4939 y Fj(P)n(oin)n(ter)d(to)i(an)f(arra)
-n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p Ft(_)p
-Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r(ordinates)
-f(of)g(the)427 5038 y(cen)n(tre)h(of)h(the)g(\014rst)f(pixel)h(in)g
-(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)259
-5176 y Fd(ubnd)p Ft(_)p Fd(out)427 5276 y Fj(P)n(oin)n(ter)e(to)i(an)f
-(arra)n(y)f(of)i(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p
-Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r
-(ordinates)f(of)g(the)427 5375 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h
-(in)g(the)g(output)g(grid)f(along)f(eac)n(h)h(dimension.)427
-5494 y(Note)e(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(out)p
-Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p Fj(out)p Ft(")g
-Fj(together)g(de\014ne)h(the)g(shap)r(e,)g(size)g(and)f(co)r(ordinate)g
-(system)427 5593 y(of)32 b(the)f(output)h(grid)f(in)g(the)h(same)f(w)n
-(a)n(y)f(as)h Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")f
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")e Fj(de\014ne)i(the)g
-(shap)r(e,)g(size)f(and)427 5693 y(co)r(ordinate)c(system)g(of)h(the)g
-(input)g(grid.)p eop end
-%%Page: 324 334
-TeXDict begin 324 333 bop 0 52 a FF(324)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(lbnd)427
-451 y Fj(P)n(oin)n(ter)25 b(to)i(an)f(arra)n(y)f(of)i(in)n(tegers,)e
-(with)j Ft(")p Fj(ndim)p Ft(_)p Fj(out)p Ft(")e Fj(elemen)n(ts,)g(con)n
-(taining)g(the)h(co)r(ordinates)f(of)g(the)427 551 y(\014rst)i(pixel)f
-(in)h(the)g(region)e(of)i(the)g(output)g(grid)f(for)g(whic)n(h)h(a)f
-(resampled)f(v)-5 b(alue)28 b(is)f(to)h(b)r(e)g(calculated.)259
-680 y Fd(ubnd)427 780 y Fj(P)n(oin)n(ter)d(to)i(an)f(arra)n(y)f(of)i
-(in)n(tegers,)e(with)j Ft(")p Fj(ndim)p Ft(_)p Fj(out)p
-Ft(")e Fj(elemen)n(ts,)g(con)n(taining)g(the)h(co)r(ordinates)f(of)g
-(the)427 880 y(last)i(pixel)f(in)h(the)g(region)e(of)i(the)g(output)g
-(grid)f(for)g(whic)n(h)g(a)h(resampled)e(v)-5 b(alue)28
-b(is)f(to)h(b)r(e)g(calculated.)427 994 y(Note)23 b(that)h
-Ft(")p Fj(lbnd)p Ft(")e Fj(and)h Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)f(p)r(osition)h(of)g(a)g
-(\(h)n(yp)r(er-\)rectangular)427 1094 y(region)h(of)i(the)g(output)g
-(grid)f(for)g(whic)n(h)g(resampled)g(v)-5 b(alues)25
-b(should)g(b)r(e)h(pro)r(duced.)36 b(This)26 b(region)e(should)427
-1194 y(lie)f(wholly)f(within)i(the)f(exten)n(t)f(of)h(the)g(output)g
-(grid)f(\(as)h(de\014ned)g(b)n(y)f(the)h Ft(")p Fj(lbnd)p
-Ft(_)p Fj(out)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(_)p
-Fj(out)p Ft(")427 1293 y Fj(arra)n(ys\).)35 b(Regions)26
-b(of)i(the)g(output)g(grid)f(lying)g(outside)h(this)g(region)e(will)i
-(not)f(b)r(e)h(mo)r(di\014ed.)259 1423 y Fd(out)427 1523
-y Fj(P)n(oin)n(ter)40 b(to)g(an)h(arra)n(y)-7 b(,)42
-b(with)g(one)e(elemen)n(t)h(for)g(eac)n(h)f(pixel)h(in)g(the)g(output)h
-(grid,)i(in)n(to)c(whic)n(h)h(the)427 1622 y(resampled)27
-b(data)h(v)-5 b(alues)27 b(will)h(b)r(e)h(returned.)37
-b(The)28 b(n)n(umerical)f(t)n(yp)r(e)h(of)g(this)g(arra)n(y)e(should)i
-(matc)n(h)f(that)427 1722 y(of)j(the)g Ft(")p Fj(in)p
-Ft(")f Fj(arra)n(y)-7 b(,)28 b(and)h(the)i(data)e(storage)e(order)i
-(should)g(b)r(e)h(suc)n(h)g(that)f(the)h(index)g(of)g(the)g(\014rst)f
-(grid)427 1822 y(dimension)23 b(v)-5 b(aries)22 b(most)h(rapidly)f(and)
-h(that)g(of)g(the)h(\014nal)f(dimension)g(least)f(rapidly)g(\(i.e.)36
-b(F)-7 b(ortran)22 b(arra)n(y)427 1921 y(indexing)28
-b(is)f(used\).)259 2051 y Fd(out)p Ft(_)p Fd(v)-5 b(ar)427
-2151 y Fj(An)25 b(optional)f(p)r(oin)n(ter)g(to)h(an)f(arra)n(y)e(with)
-j(the)g(same)f(t)n(yp)r(e)h(and)f(size)h(as)f(the)h Ft(")p
-Fj(out)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(If)25 b(giv)n(en,)f(this)427
-2250 y(arra)n(y)f(will)i(b)r(e)g(used)g(to)g(return)g(v)-5
-b(ariance)23 b(estimates)i(for)f(the)i(resampled)e(data)g(v)-5
-b(alues.)36 b(This)25 b(arra)n(y)d(will)427 2350 y(only)27
-b(b)r(e)h(used)g(if)g(the)g Ft(")p Fj(in)p Ft(_)p Fj(v)-5
-b(ar)p Ft(")26 b Fj(arra)n(y)f(has)i(also)g(b)r(een)h(supplied.)427
-2465 y(The)23 b(output)f(v)-5 b(ariance)22 b(v)-5 b(alues)21
-b(will)i(b)r(e)g(calculated)e(on)h(the)h(assumption)f(that)g(errors)e
-(on)i(the)h(input)g(data)427 2564 y(v)-5 b(alues)24 b(are)g
-(statistically)f(indep)r(enden)n(t)i(and)g(that)f(their)g(v)-5
-b(ariance)24 b(estimates)g(ma)n(y)f(simply)i(b)r(e)f(summed)427
-2664 y(\(with)30 b(appropriate)d(w)n(eigh)n(ting)g(factors\))h(when)h
-(sev)n(eral)e(input)i(pixels)g(con)n(tribute)f(to)h(an)f(output)h(data)
-427 2764 y(v)-5 b(alue.)59 b(If)35 b(this)g(assumption)f(is)h(not)g(v)
--5 b(alid,)36 b(then)f(the)h(output)f(error)e(estimates)h(ma)n(y)g(b)r
-(e)h(biased.)58 b(In)427 2863 y(addition,)31 b(note)f(that)h(the)f
-(statistical)g(errors)e(on)i(neigh)n(b)r(ouring)f(output)h(data)g(v)-5
-b(alues)30 b(\(as)g(w)n(ell)g(as)f(the)427 2963 y(estimates)j(of)f
-(those)g(errors\))f(ma)n(y)h(often)h(b)r(e)g(correlated,)f(ev)n(en)g
-(if)h(the)g(ab)r(o)n(v)n(e)f(assumption)g(ab)r(out)g(the)427
-3062 y(input)e(data)e(is)g(correct,)g(b)r(ecause)g(of)g(the)h
-(sub-pixel)g(in)n(terp)r(olation)e(sc)n(hemes)h(emplo)n(y)n(ed.)427
-3177 y(If)h(no)g(output)g(v)-5 b(ariance)26 b(estimates)h(are)g
-(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(should)g(b)r(e)h(giv)n(en.)0
-3336 y Fd(Returned)k(V)-8 b(alue:)259 3470 y(astResample)p
-Fl(<)p Fd(X)p Fl(>)p Fd(\(\))427 3569 y Fj(The)33 b(n)n(um)n(b)r(er)f
-(of)g(output)h(pixels)g(for)f(whic)n(h)g(no)g(v)-5 b(alid)33
-b(resampled)e(v)-5 b(alue)33 b(could)f(b)r(e)h(obtained.)51
-b(Th)n(us,)427 3669 y(in)33 b(the)g(absence)f(of)h(an)n(y)f(error,)g(a)
-h(returned)f(v)-5 b(alue)33 b(of)f(zero)g(indicates)h(that)g(all)f(the)
-h(required)f(output)427 3768 y(pixels)j(receiv)n(ed)f(v)-5
-b(alid)34 b(resampled)g(data)h(v)-5 b(alues)34 b(\(and)h(v)-5
-b(ariances\).)57 b(See)35 b(the)g Ft(")p Fj(badv)-5 b(al)p
-Ft(")34 b Fj(and)g Ft(")p Fj(\015ags)p Ft(")427 3868
-y Fj(parameters.)0 4027 y Fd(Notes:)340 4306 y Fi(\017)45
-b Fj(A)27 b(v)-5 b(alue)25 b(of)h(zero)f(will)h(b)r(e)g(returned)g(if)g
-(this)g(function)h(is)f(in)n(v)n(ok)n(ed)e(with)j(the)f(global)f(error)
-f(status)h(set,)h(or)427 4406 y(if)i(it)g(should)g(fail)f(for)h(an)n(y)
-e(reason.)-2 4565 y Fd(Data)33 b(T)m(yp)s(e)g(Co)s(des)n(:)227
-4711 y Fj(T)-7 b(o)35 b(select)h(the)g(appropriate)d(resampling)i
-(function,)j(y)n(ou)c(should)i(replace)e Fl(<)p Fj(X)p
-Fl(>)h Fj(in)h(the)g(generic)e(function)227 4811 y(name)24
-b(astResample)p Fl(<)p Fj(X)p Fl(>)e Fj(with)i(a)g(1-)f(or)g(2-c)n
-(haracter)d(data)k(t)n(yp)r(e)g(co)r(de,)g(so)f(as)g(to)h(matc)n(h)f
-(the)i(n)n(umerical)d(t)n(yp)r(e)227 4910 y Fl(<)p Fj(Xt)n(yp)r(e)p
-Fl(>)27 b Fj(of)h(the)g(data)f(y)n(ou)g(are)g(pro)r(cessing,)f(as)h
-(follo)n(ws:)340 5044 y Fi(\017)45 b Fj(D:)28 b(double)340
-5174 y Fi(\017)45 b Fj(F:)28 b(\015oat)340 5303 y Fi(\017)45
-b Fj(L:)28 b(long)f(in)n(t)340 5433 y Fi(\017)45 b Fj(UL:)28
-b(unsigned)g(long)e(in)n(t)340 5563 y Fi(\017)45 b Fj(I:)28
-b(in)n(t)340 5693 y Fi(\017)45 b Fj(UI:)28 b(unsigned)g(in)n(t)p
-eop end
-%%Page: 325 335
-TeXDict begin 325 334 bop 3643 52 a FF(325)340 351 y
-Fi(\017)45 b Fj(S:)28 b(short)f(in)n(t)340 481 y Fi(\017)45
-b Fj(US:)28 b(unsigned)g(short)f(in)n(t)340 611 y Fi(\017)45
-b Fj(B:)28 b(b)n(yte)f(\(signed)h(c)n(har\))340 741 y
-Fi(\017)45 b Fj(UB:)28 b(unsigned)f(b)n(yte)h(\(unsigned)g(c)n(har\))
-227 900 y(F)-7 b(or)31 b(example,)h(astResampleD)f(w)n(ould)g(b)r(e)h
-(used)g(to)f(pro)r(cess)f Ft(")p Fj(double)p Ft(")h Fj(data,)h(while)f
-(astResampleS)g(w)n(ould)227 999 y(b)r(e)d(used)g(to)f(pro)r(cess)g
-Ft(")p Fj(short)f(in)n(t)p Ft(")i Fj(data,)f(etc.)-2
-1146 y Fd(Sub-Pixel)32 b(In)m(terp)s(olation)f(Sc)m(hemes)n(:)227
-1292 y Fj(There)d(is)f(no)h(suc)n(h)f(thing)h(as)g(a)f(p)r(erfect)h
-(sub-pixel)g(in)n(terp)r(olation)f(sc)n(heme)g(and,)h(in)g(practice,)f
-(all)h(resampling)227 1391 y(will)34 b(result)e(in)i(some)e
-(degradation)f(of)i(gridded)g(data.)52 b(A)34 b(range)d(of)i(sc)n
-(hemes)g(is)f(therefore)h(pro)n(vided,)g(from)227 1491
-y(whic)n(h)28 b(y)n(ou)f(can)g(c)n(ho)r(ose)f(the)i(one)f(whic)n(h)h(b)
-r(est)g(suits)g(y)n(our)e(needs.)227 1614 y(In)h(general,)e(a)g
-(balance)h(m)n(ust)g(b)r(e)g(struc)n(k)f(b)r(et)n(w)n(een)i(sc)n(hemes)
-e(whic)n(h)h(tend)g(to)g(degrade)f(sharp)g(features)h(in)g(the)227
-1714 y(data)d(b)n(y)g(smo)r(othing)g(them,)i(and)f(those)f(whic)n(h)g
-(attempt)h(to)g(preserv)n(e)d(sharp)i(features.)35 b(The)24
-b(latter)f(will)g(often)227 1813 y(tend)32 b(to)g(in)n(tro)r(duce)f(un)
-n(w)n(an)n(ted)g(oscillations,)g(t)n(ypically)g(visible)g(as)g
-Ft(")p Fj(ringing)p Ft(")f Fj(around)g(sharp)h(features)g(and)227
-1913 y(edges,)j(esp)r(ecially)f(if)g(the)h(data)e(are)g(under-sampled)h
-(\(i.e.)54 b(if)33 b(the)h(sharp)r(est)e(features)h(are)f(less)g(than)i
-(ab)r(out)227 2013 y(t)n(w)n(o)27 b(pixels)h(across\).)36
-b(In)28 b(practice,)f(a)g(go)r(o)r(d)h(in)n(terp)r(olation)e(sc)n(heme)
-i(is)g(lik)n(ely)f(to)h(b)r(e)g(a)f(compromise)g(and)g(ma)n(y)227
-2112 y(exhibit)h(some)f(asp)r(ects)h(of)f(b)r(oth)h(these)g(features.)
-227 2235 y(F)-7 b(or)31 b(under-sampled)g(data,)h(some)f(in)n(terp)r
-(olation)g(sc)n(hemes)f(ma)n(y)h(app)r(ear)g(to)g(preserv)n(e)f(data)h
-(resolution)g(b)r(e-)227 2335 y(cause)25 b(they)h(transform)e(single)h
-(input)h(pixels)g(in)n(to)f(single)g(output)h(pixels,)f(rather)g(than)g
-(spreading)g(their)g(data)227 2435 y(b)r(et)n(w)n(een)j(sev)n(eral)e
-(output)j(pixels.)38 b(While)28 b(this)h(ma)n(y)e(lo)r(ok)g(b)r(etter)i
-(cosmetically)-7 b(,)27 b(it)h(can)g(result)g(in)g(a)g(geomet-)227
-2534 y(rical)e(shift)h(of)g(sharp)e(features)h(in)h(the)g(data.)36
-b(Y)-7 b(ou)26 b(should)g(b)r(ew)n(are)g(of)g(this)h(if)g(y)n(ou)f
-(plan)g(to)h(use)f(suc)n(h)g(features)227 2634 y(\(e.g.\))37
-b(for)27 b(image)g(alignmen)n(t.)227 2757 y(The)j(follo)n(wing)f(are)h
-(t)n(w)n(o)f(easy-to-use)f(sub-pixel)i(in)n(terp)r(olation)f(sc)n
-(hemes)g(whic)n(h)h(are)g(generally)e(applicable.)227
-2856 y(They)k(are)e(selected)i(b)n(y)f(supplying)g(the)h(appropriate)e
-(v)-5 b(alue)31 b(\(de\014ned)h(in)g(the)g Ft(")p Fj(ast.h)p
-Ft(")f Fj(header)f(\014le\))i(via)f(the)227 2956 y Ft(")p
-Fj(in)n(terp)p Ft(")c Fj(parameter.)35 b(In)28 b(these)g(cases,)e(the)i
-Ft(")p Fj(\014n)n(terp)p Ft(")f Fj(and)g Ft(")p Fj(params)p
-Ft(")f Fj(parameters)g(are)g(not)i(used:)340 3213 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(NEAREST:)24 b(This)h(is)f(the)h(simplest)g(p)r
-(ossible)f(sc)n(heme,)h(in)g(whic)n(h)f(the)h(v)-5 b(alue)25
-b(of)f(the)h(input)h(pixel)427 3312 y(with)j(the)g(nearest)f(cen)n(tre)
-g(to)h(the)g(in)n(terp)r(olation)f(p)r(oin)n(t)g(is)h(used.)40
-b(This)29 b(is)f(v)n(ery)g(quic)n(k)g(to)g(execute)h(and)427
-3412 y(will)38 b(preserv)n(e)d(single-pixel)h(features)h(in)g(the)h
-(data,)h(but)f(ma)n(y)e(displace)h(them)h(b)n(y)f(up)g(to)g(half)h
-(their)427 3511 y(width)28 b(along)e(eac)n(h)h(dimension.)36
-b(It)28 b(often)g(giv)n(es)e(a)g(go)r(o)r(d)h(cosmetic)g(result,)g(so)g
-(is)g(useful)g(for)g(quic)n(k-lo)r(ok)427 3611 y(pro)r(cessing,)f(but)j
-(is)e(unsuitable)h(if)g(accurate)e(geometrical)g(transformation)g(is)i
-(required.)340 3741 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(LINEAR:)40
-b(This)h(is)f(the)h(default)g(sc)n(heme,)j(whic)n(h)c(uses)g(linear)g
-(in)n(terp)r(olation)g(b)r(et)n(w)n(een)g(the)427 3840
-y(nearest)35 b(neigh)n(b)r(ouring)f(pixels)i(in)g(the)g(input)g(grid)f
-(\(there)h(are)e(t)n(w)n(o)h(neigh)n(b)r(ours)g(in)g(one)h(dimension,)
-427 3940 y(four)h(neigh)n(b)r(ours)f(in)i(t)n(w)n(o)f(dimensions,)i
-(eigh)n(t)e(in)h(three)f(dimensions,)i(etc.\).)67 b(It)38
-b(is)f(sup)r(erior)f(to)h(the)427 4040 y(nearest-pixel)25
-b(sc)n(heme)h(\(ab)r(o)n(v)n(e\))g(in)g(not)g(displacing)g(features)g
-(in)g(the)h(data,)f(y)n(et)g(it)h(still)f(executes)g(fairly)427
-4139 y(rapidly)-7 b(.)74 b(It)40 b(is)g(generally)e(a)i(safe)f(c)n
-(hoice)g(if)i(y)n(ou)e(do)h(not)g(ha)n(v)n(e)e(an)n(y)h(particular)g
-(reason)f(to)i(fa)n(v)n(our)427 4239 y(another)g(sc)n(heme,)k(since)c
-(it)h(cannot)g(in)n(tro)r(duce)f(oscillations.)75 b(Ho)n(w)n(ev)n(er,)
-42 b(it)f(do)r(es)g(in)n(tro)r(duce)f(some)427 4339 y(spatial)28
-b(smo)r(othing)f(whic)n(h)i(v)-5 b(aries)27 b(according)f(to)i(the)h
-(distance)f(of)g(the)h(in)n(terp)r(olation)e(p)r(oin)n(t)h(from)g(the)
-427 4438 y(neigh)n(b)r(ouring)g(pixels.)39 b(This)29
-b(can)f(degrade)f(the)i(shap)r(e)f(of)h(sharp)e(features)h(in)h(the)g
-(data)f(in)h(a)f(p)r(osition-)427 4538 y(dep)r(enden)n(t)f(w)n(a)n(y)-7
-b(.)35 b(It)27 b(ma)n(y)e(also)g(sho)n(w)h(in)g(the)h(output)g(v)-5
-b(ariance)24 b(grid)i(\(if)h(used\))f(as)g(a)g(pattern)g(of)g(strip)r
-(es)427 4637 y(or)h(fringes.)227 4796 y(An)35 b(alternativ)n(e)e(set)h
-(of)h(in)n(terp)r(olation)e(sc)n(hemes)h(is)g(based)g(on)g(forming)g
-(the)g(in)n(terp)r(olated)g(v)-5 b(alue)34 b(from)g(the)227
-4896 y(w)n(eigh)n(ted)g(sum)h(of)f(a)g(set)h(of)f(surrounding)f(pixel)i
-(v)-5 b(alues)34 b(\(not)h(necessarily)e(just)i(the)g(nearest)e(neigh)n
-(b)r(ours\).)227 4996 y(This)27 b(approac)n(h)e(has)h(its)h(origins)e
-(in)i(the)g(theory)f(of)h(digital)f(\014ltering,)h(in)f(whic)n(h)h(in)n
-(terp)r(olated)f(v)-5 b(alues)27 b(are)e(ob-)227 5095
-y(tained)f(b)n(y)g(conceptually)f(passing)g(the)h(sampled)f(data)h
-(\(represen)n(ted)e(b)n(y)i(a)f(grid)g(of)h(delta)g(functions\))g
-(through)227 5195 y(a)30 b(linear)g(\014lter)g(whic)n(h)g(implemen)n
-(ts)h(a)f(con)n(v)n(olution.)43 b(Because)29 b(the)i(con)n(v)n(olution)
-e(k)n(ernel)g(is)h(con)n(tin)n(uous,)g(the)227 5295 y(con)n(v)n
-(olution)23 b(yields)h(a)g(con)n(tin)n(uous)f(function)h(whic)n(h)g(ma)
-n(y)g(then)g(b)r(e)h(ev)-5 b(aluated)24 b(at)g(fractional)f(pixel)h(p)r
-(ositions.)227 5394 y(The)33 b(\(p)r(ossibly)g(m)n(ulti-dimensional\))f
-(k)n(ernel)g(is)h(usually)f(regarded)f(as)h Ft(")p Fj(separable)p
-Ft(")e Fj(and)i(formed)h(from)f(the)227 5494 y(pro)r(duct)22
-b(of)g(a)f(set)h(of)g(iden)n(tical)g(1-dimensional)e(k)n(ernel)h
-(functions,)i(ev)-5 b(aluated)22 b(along)f(eac)n(h)g(dimension.)35
-b(Di\013er-)227 5593 y(en)n(t)29 b(in)n(terp)r(olation)f(sc)n(hemes)h
-(are)e(then)j(distinguished)f(b)n(y)f(the)i(c)n(hoice)e(of)h(this)g
-(1-dimensional)e(in)n(terp)r(olation)227 5693 y(k)n(ernel.)36
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(surrounding)e(pixels)h(whic)n(h)h
-(con)n(tribute)f(to)h(the)g(result)f(ma)n(y)g(also)f(b)r(e)i(v)-5
-b(aried.)p eop end
-%%Page: 326 336
-TeXDict begin 326 335 bop 0 52 a FF(326)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(F)-7
-b(rom)29 b(a)f(practical)g(standp)r(oin)n(t,)h(it)h(is)f(useful)g(to)g
-(divide)g(the)g(w)n(eigh)n(ted)f(sum)h(of)g(pixel)g(v)-5
-b(alues)29 b(b)n(y)f(the)i(sum)f(of)227 451 y(the)g(w)n(eigh)n(ts)e
-(when)h(determining)g(the)h(in)n(terp)r(olated)e(v)-5
-b(alue.)38 b(Strictly)-7 b(,)29 b(this)f(means)g(that)g(a)g(true)g(con)
-n(v)n(olution)227 551 y(is)e(no)f(longer)g(b)r(eing)h(p)r(erformed.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)i(distinction)g(is)g(rarely)e(imp)r(ortan)
-n(t)h(in)h(practice)f(b)r(ecause)h(\(for)227 650 y(sligh)n(tly)e
-(subtle)h(reasons\))d(the)j(sum)f(of)g(w)n(eigh)n(ts)g(is)g(alw)n(a)n
-(ys)e(appro)n(ximately)h(constan)n(t)g(for)h(go)r(o)r(d)f(in)n(terp)r
-(olation)227 750 y(k)n(ernels.)51 b(The)33 b(adv)-5 b(an)n(tage)31
-b(of)i(this)g(tec)n(hnique,)h(whic)n(h)f(is)f(used)h(here,)h(is)e(that)
-h(it)g(can)g(easily)f(accommo)r(date)227 849 y(missing)27
-b(data)g(and)h(tends)g(to)f(minimise)h(un)n(w)n(an)n(ted)f
-(oscillations)f(at)i(the)g(edges)f(of)g(the)h(data)f(grid.)227
-980 y(In)d(the)g(follo)n(wing)e(sc)n(hemes,)h(whic)n(h)h(are)e(based)h
-(on)g(a)g(1-dimensional)f(in)n(terp)r(olation)g(k)n(ernel,)i(the)f
-(\014rst)g(elemen)n(t)227 1080 y(of)j(the)h Ft(")p Fj(params)p
-Ft(")d Fj(arra)n(y)f(should)j(b)r(e)h(used)f(to)g(sp)r(ecify)g(ho)n(w)g
-(man)n(y)f(pixels)h(are)f(to)h(con)n(tribute)g(to)g(the)g(in)n(terp)r
-(o-)227 1179 y(lated)31 b(result)g(on)f(either)h(side)g(of)f(the)i(in)n
-(terp)r(olation)e(p)r(oin)n(t)h(in)g(eac)n(h)f(dimension)g(\(the)i
-(nearest)e(in)n(teger)g(v)-5 b(alue)227 1279 y(is)27
-b(used\).)36 b(Execution)26 b(time)h(increases)e(rapidly)h(with)h(this)
-f(n)n(um)n(b)r(er.)36 b(T)n(ypically)-7 b(,)26 b(a)g(v)-5
-b(alue)27 b(of)f(2)g(is)g(appropriate)227 1379 y(and)k(the)h(minim)n
-(um)f(v)-5 b(alue)30 b(used)g(will)g(b)r(e)h(1)f(\(i.e.)44
-b(t)n(w)n(o)29 b(pixels)h(altogether,)g(one)f(on)h(either)g(side)g(of)g
-(the)g(in)n(ter-)227 1478 y(p)r(olation)h(p)r(oin)n(t\).)48
-b(A)32 b(v)-5 b(alue)31 b(of)g(zero)f(or)g(less)h(ma)n(y)f(b)r(e)i(giv)
-n(en)e(for)h Ft(")p Fj(params[0])p Ft(")d Fj(to)j(indicate)h(that)f(a)g
-(suitable)227 1578 y(n)n(um)n(b)r(er)d(of)f(pixels)h(should)f(b)r(e)h
-(calculated)f(automatically)-7 b(.)227 1709 y(In)28 b(eac)n(h)f(of)g
-(these)h(cases,)f(the)h Ft(")p Fj(\014n)n(terp)p Ft(")e
-Fj(parameter)g(is)i(not)f(used:)340 1988 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(SINC:)27 b(This)f(sc)n(heme)g(uses)g(a)g
-(sinc\(pi)p Fi(\003)p Fj(x\))g(k)n(ernel,)g(where)g(x)g(is)g(the)h
-(pixel)f(o\013set)h(from)f(the)g(in)n(ter-)427 2088 y(p)r(olation)j(p)r
-(oin)n(t)h(and)g(sinc\(z\)=sin\(z\)/z.)42 b(This)30 b(sometimes)f
-(features)g(as)g(an)g Ft(")p Fj(optimal)p Ft(")f Fj(in)n(terp)r
-(olation)427 2187 y(k)n(ernel)35 b(in)h(b)r(o)r(oks)f(on)g(image)g(pro)
-r(cessing.)59 b(Its)36 b(supp)r(osed)f(optimalit)n(y)h(dep)r(ends)g(on)
-f(the)h(assumption)427 2287 y(that)d(the)g(data)e(are)h(band-limited)g
-(\(i.e.)52 b(ha)n(v)n(e)31 b(no)h(spatial)g(frequencies)g(ab)r(o)n(v)n
-(e)f(a)h(certain)f(v)-5 b(alue\))33 b(and)427 2387 y(are)e(adequately)g
-(sampled.)49 b(In)32 b(practice,)g(astronomical)d(data)j(rarely)e(meet)
-i(these)f(requiremen)n(ts.)48 b(In)427 2486 y(addition,)35
-b(high)e(spatial)g(frequencies)f(are)h(often)g(presen)n(t)g(due)g
-(\(e.g.\))54 b(to)33 b(image)g(defects)g(and)g(cosmic)427
-2586 y(ra)n(y)22 b(ev)n(en)n(ts.)35 b(Consequen)n(tly)-7
-b(,)24 b(substan)n(tial)e(ringing)h(can)g(b)r(e)h(exp)r(erienced)f
-(with)h(this)f(k)n(ernel.)35 b(The)24 b(k)n(ernel)427
-2686 y(also)33 b(deca)n(ys)g(slo)n(wly)g(with)i(distance,)g(so)e(that)i
-(man)n(y)e(surrounding)g(pixels)h(are)f(required,)h(leading)g(to)427
-2785 y(p)r(o)r(or)24 b(p)r(erformance.)35 b(Abruptly)25
-b(truncating)g(it,)g(b)n(y)g(using)f(only)g(a)h(few)g(neigh)n(b)r
-(ouring)e(pixels,)i(impro)n(v)n(es)427 2885 y(p)r(erformance)20
-b(and)i(ma)n(y)e(reduce)h(ringing)f(\(if)i Ft(")p Fj(params[0])p
-Ft(")d Fj(is)i(set)g(to)g(zero,)h(then)f(only)g(t)n(w)n(o)g(pixels)g
-(will)g(b)r(e)427 2984 y(used)29 b(on)g(either)f(side\).)41
-b(Ho)n(w)n(ev)n(er,)27 b(a)i(more)e(gradual)h(truncation,)g(as)h
-(implemen)n(ted)g(b)n(y)f(other)h(k)n(ernels,)427 3084
-y(is)d(generally)e(to)i(b)r(e)g(preferred.)35 b(This)26
-b(k)n(ernel)f(is)h(pro)n(vided)f(mainly)g(so)g(that)h(y)n(ou)f(can)h
-(con)n(vince)f(y)n(ourself)427 3184 y(not)j(to)f(use)h(it!)340
-3323 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SINCSINC:)25
-b(This)g(sc)n(heme)g(uses)f(an)h(impro)n(v)n(ed)e(k)n(ernel,)i(of)g
-(the)g(form)f(sinc\(pi)p Fi(\003)p Fj(x\).sinc\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\),)427 3422 y(with)32 b(k)f(a)f(constan)n(t,)h
-(out)g(to)g(the)g(p)r(oin)n(t)g(where)g(sinc\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\))f(go)r(es)g(to)h(zero,)f(and)h(zero)f(b)r(ey)n
-(ond.)47 b(The)427 3522 y(second)32 b(sinc\(\))i(factor)e(pro)n(vides)f
-(an)i Ft(")p Fj(en)n(v)n(elop)r(e)p Ft(")e Fj(whic)n(h)i(gradually)e
-(rolls)h(o\013)h(the)g(normal)f(sinc\(pi)p Fi(\003)p
-Fj(x\))427 3622 y(k)n(ernel)40 b(at)h(large)f(o\013sets.)76
-b(The)41 b(width)h(of)f(this)g(en)n(v)n(elop)r(e)f(is)h(sp)r(eci\014ed)
-g(b)n(y)g(giving)f(the)h(n)n(um)n(b)r(er)g(of)427 3721
-y(pixels)35 b(o\013set)g(at)g(whic)n(h)g(it)g(go)r(es)g(to)f(zero)g(b)n
-(y)h(means)g(of)g(the)g Ft(")p Fj(params[1])p Ft(")e
-Fj(v)-5 b(alue,)36 b(whic)n(h)f(should)g(b)r(e)427 3821
-y(at)d(least)f(1.0)g(\(in)h(addition,)h(setting)f Ft(")p
-Fj(params[0])p Ft(")d Fj(to)j(zero)e(will)i(select)g(the)g(n)n(um)n(b)r
-(er)g(of)f(con)n(tributing)427 3921 y(pixels)j(so)e(as)h(to)h(utilise)g
-(the)f(full)i(width)f(of)f(the)h(k)n(ernel,)g(out)g(to)f(where)g(it)h
-(reac)n(hes)e(zero\).)54 b(The)33 b(case)427 4020 y(giv)n(en)28
-b(b)n(y)h Ft(")p Fj(params[0]=2,)d(params[1]=2)p Ft(")f
-Fj(is)k(t)n(ypically)f(a)g(go)r(o)r(d)g(c)n(hoice)g(and)g(is)h
-(sometimes)f(kno)n(wn)g(as)427 4120 y(the)36 b(Lanczos)e(k)n(ernel.)60
-b(This)35 b(is)g(a)g(v)-5 b(aluable)35 b(general-purp)r(ose)e(in)n
-(terp)r(olation)i(sc)n(heme,)i(in)n(termediate)427 4219
-y(in)d(its)f(visual)g(e\013ect)h(on)f(images)f(b)r(et)n(w)n(een)h(the)h
-(AST)p Ft(__)p Fj(NEAREST)e(and)h(AST)p Ft(__)p Fj(LINEAR)g(sc)n
-(hemes.)427 4319 y(Although)i(the)f(k)n(ernel)f(is)h(sligh)n(tly)g
-(oscillatory)-7 b(,)34 b(ringing)f(is)h(adequately)f(suppressed)h(if)g
-(the)h(data)f(are)427 4419 y(w)n(ell)28 b(sampled.)340
-4558 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(SINCCOS:)38 b(This)g(sc)n(heme)
-g(uses)g(a)g(k)n(ernel)f(of)h(the)h(form)f(sinc\(pi)p
-Fi(\003)p Fj(x\).cos\(k)p Fi(\003)p Fj(pi)p Fi(\003)p
-Fj(x\),)h(with)g(k)f(a)427 4657 y(constan)n(t,)32 b(out)f(to)g(the)h(p)
-r(oin)n(t)f(where)g(cos\(k)p Fi(\003)p Fj(pi)p Fi(\003)p
-Fj(x\))f(go)r(es)h(to)g(zero,)g(and)g(zero)f(b)r(ey)n(ond.)48
-b(As)31 b(ab)r(o)n(v)n(e,)g(the)427 4757 y(cos\(\))h(factor)f(pro)n
-(vides)f(an)h(en)n(v)n(elop)r(e)g(whic)n(h)h(gradually)e(rolls)g(o\013)
-i(the)g(sinc\(\))g(k)n(ernel)f(at)h(large)e(o\013sets.)427
-4857 y(The)e(width)h(of)e(this)h(en)n(v)n(elop)r(e)f(is)h(sp)r
-(eci\014ed)g(b)n(y)f(giving)g(the)h(n)n(um)n(b)r(er)g(of)g(pixels)f
-(o\013set)h(at)g(whic)n(h)f(it)i(go)r(es)427 4956 y(to)f(zero)e(b)n(y)h
-(means)g(of)g(the)h Ft(")p Fj(params[1])p Ft(")d Fj(v)-5
-b(alue,)27 b(whic)n(h)h(should)f(b)r(e)h(at)f(least)g(1.0)f(\(in)i
-(addition,)g(setting)427 5056 y Ft(")p Fj(params[0])p
-Ft(")37 b Fj(to)h(zero)g(will)h(select)g(the)g(n)n(um)n(b)r(er)g(of)g
-(con)n(tributing)f(pixels)g(so)h(as)f(to)h(utilise)g(the)g(full)427
-5155 y(width)33 b(of)f(the)g(k)n(ernel,)g(out)g(to)g(where)g(it)g(reac)
-n(hes)e(zero\).)50 b(This)31 b(sc)n(heme)h(giv)n(es)f(similar)g
-(results)g(to)h(the)427 5255 y(AST)p Ft(__)p Fj(SINCSINC)c(sc)n(heme,)f
-(whic)n(h)h(it)g(resem)n(bles.)340 5394 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(SINCGA)n(USS:)35 b(This)f(sc)n(heme)f(uses)h(a)g
-(k)n(ernel)f(of)h(the)g(form)g(sinc\(pi)p Fi(\003)p Fj(x\).exp\(-k)p
-Fi(\003)p Fj(x)p Fi(\003)p Fj(x\),)g(with)h(k)427 5494
-y(a)c(p)r(ositiv)n(e)g(constan)n(t.)48 b(Here,)32 b(the)g(sinc\(\))g(k)
-n(ernel)e(is)h(rolled)g(o\013)g(using)g(a)g(Gaussian)g(en)n(v)n(elop)r
-(e)f(whic)n(h)i(is)427 5593 y(sp)r(eci\014ed)k(b)n(y)f(giving)f(its)h
-(full-width)h(at)f(half-maxim)n(um)g(\(FWHM\))i(b)n(y)e(means)f(of)i
-(the)f Ft(")p Fj(params[1])p Ft(")427 5693 y Fj(v)-5
-b(alue,)34 b(whic)n(h)f(should)f(b)r(e)h(at)f(least)h(0.1)e(\(in)j
-(addition,)f(setting)g Ft(")p Fj(params[0])p Ft(")d Fj(to)i(zero)g
-(will)h(select)f(the)p eop end
-%%Page: 327 337
-TeXDict begin 327 336 bop 3643 52 a FF(327)427 351 y
-Fj(n)n(um)n(b)r(er)22 b(of)f(con)n(tributing)g(pixels)g(so)g(as)g(to)h
-(utilise)f(the)h(width)h(of)e(the)h(k)n(ernel)f(out)g(to)h(where)f(the)
-h(en)n(v)n(elop)r(e)427 451 y(declines)k(to)f(1\045)h(of)f(its)h(maxim)
-n(um)g(v)-5 b(alue\).)36 b(On)25 b(astronomical)f(images)h(and)g(sp)r
-(ectra,)h(go)r(o)r(d)f(results)g(are)427 551 y(often)36
-b(obtained)g(b)n(y)g(appro)n(ximately)e(matc)n(hing)h(the)h(FWHM)h(of)f
-(the)g(en)n(v)n(elop)r(e)f(function,)k(giv)n(en)c(b)n(y)427
-650 y Ft(")p Fj(params[1])p Ft(")p Fj(,)29 b(to)i(the)g(p)r(oin)n(t)g
-(spread)f(function)h(of)g(the)g(input)h(data.)45 b(Ho)n(w)n(ev)n(er,)30
-b(there)h(do)r(es)f(not)h(seem)427 750 y(to)d(b)r(e)g(an)n(y)f
-(theoretical)f(reason)g(for)h(this.)340 889 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(SOMB:)24 b(This)h(sc)n(heme)g(uses)f(a)g(som)n
-(b\(pi)p Fi(\003)p Fj(x\))h(k)n(ernel)f(\(a)g Ft(")p
-Fj(som)n(brero)p Ft(")e Fj(function\),)k(where)f(x)f(is)h(the)427
-989 y(pixel)32 b(o\013set)g(from)f(the)i(in)n(terp)r(olation)e(p)r(oin)
-n(t)h(and)f(som)n(b\(z\)=2)p Fi(\003)p Fj(J1\(z\)/z)f(\(J1)h(is)h(a)f
-(Bessel)g(function)i(of)427 1088 y(the)24 b(\014rst)g(kind)f(of)h
-(order)e(1\).)36 b(It)24 b(is)f(similar)g(to)g(the)h(AST)p
-Ft(__)p Fj(SINC)g(k)n(ernel,)g(and)f(has)g(the)h(same)f(parameter)427
-1188 y(usage.)340 1327 y Fi(\017)45 b Fj(AST)p Ft(__)p
-Fj(SOMBCOS:)30 b(This)g(sc)n(heme)g(uses)g(a)g(k)n(ernel)f(of)i(the)g
-(form)f(som)n(b\(pi)p Fi(\003)p Fj(x\).cos\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\),)f(with)i(k)f(a)427 1427 y(constan)n(t,)g(out)
-g(to)g(the)g(p)r(oin)n(t)g(where)f(cos\(k)p Fi(\003)p
-Fj(pi)p Fi(\003)p Fj(x\))g(go)r(es)g(to)g(zero,)h(and)g(zero)e(b)r(ey)n
-(ond.)44 b(It)30 b(is)g(similar)f(to)427 1527 y(the)f(AST)p
-Ft(__)p Fj(SINCCOS)f(k)n(ernel,)g(and)h(has)f(the)h(same)f(parameter)f
-(usage.)227 1701 y(In)i(addition,)g(the)g(follo)n(wing)e(sc)n(hemes)h
-(are)g(pro)n(vided)f(whic)n(h)i(are)e(not)i(based)f(on)g(a)g
-(1-dimensional)g(k)n(ernel:)340 1982 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(BLOCKA)-9 b(VE:)26 b(This)i(sc)n(heme)f(simply)h(tak)n(es)e
-(an)i(a)n(v)n(erage)c(of)k(all)f(the)h(pixels)g(on)f(the)h(input)g
-(grid)427 2082 y(in)e(a)f(cub)r(e)h(cen)n(tred)g(on)f(the)h(in)n(terp)r
-(olation)f(p)r(oin)n(t.)36 b(The)26 b(n)n(um)n(b)r(er)f(of)h(pixels)f
-(in)h(the)g(cub)r(e)g(is)f(determined)427 2181 y(b)n(y)k(the)h(v)-5
-b(alue)29 b(of)h(the)g(\014rst)f(elemen)n(t)g(of)h(the)f
-Ft(")p Fj(params)p Ft(")f Fj(arra)n(y)-7 b(,)27 b(whic)n(h)j(giv)n(es)e
-(the)i(n)n(um)n(b)r(er)f(of)g(pixels)g(in)427 2281 y(eac)n(h)24
-b(dimension)h(on)f(either)h(side)f(of)h(the)g(cen)n(tral)f(p)r(oin)n
-(t.)36 b(Hence)25 b(a)f(blo)r(c)n(k)g(of)h(\(2)f Fi(\003)g
-Fj(params[0]\))p Fi(^)p Fj(ndim)p Ft(_)p Fj(in)427 2380
-y(pixels)31 b(in)g(the)g(input)g(grid)f(will)h(b)r(e)g(examined)f(to)h
-(determine)g(the)g(v)-5 b(alue)30 b(of)h(the)g(output)g(pixel.)46
-b(If)31 b(the)427 2480 y(v)-5 b(ariance)36 b(is)g(not)h(b)r(eing)g
-(used)f(\(v)-5 b(ar)p Ft(_)p Fj(in)36 b(or)g(v)-5 b(ar)p
-Ft(_)p Fj(out)35 b(=)i(NULL\))g(then)g(all)f(v)-5 b(alid)37
-b(pixels)f(in)h(this)g(cub)r(e)427 2580 y(will)c(b)r(e)h(a)n(v)n
-(eraged)c(in)j(to)g(the)h(result)e(with)i(equal)e(w)n(eigh)n(t.)53
-b(If)33 b(v)-5 b(ariances)31 b(are)h(b)r(eing)i(used,)g(then)f(eac)n(h)
-427 2679 y(input)25 b(pixel)f(will)f(b)r(e)i(w)n(eigh)n(ted)e(prop)r
-(ortionally)e(to)j(the)g(recipro)r(cal)e(of)i(its)g(v)-5
-b(ariance;)24 b(an)n(y)e(pixel)i(without)427 2779 y(a)34
-b(v)-5 b(alid)35 b(v)-5 b(ariance)33 b(will)h(b)r(e)h(discarded.)57
-b(This)34 b(sc)n(heme)g(is)g(suitable)g(where)g(the)h(output)g(grid)f
-(is)g(m)n(uc)n(h)427 2879 y(coarser)26 b(than)j(the)g(input)g(grid;)f
-(if)h(the)g(ratio)e(of)h(pixel)h(sizes)f(is)g(R)h(then)f(a)g(suitable)h
-(v)-5 b(alue)28 b(of)g(params[0])427 2978 y(ma)n(y)f(b)r(e)h(R/2.)227
-3153 y(Finally)-7 b(,)35 b(supplying)f(the)f(follo)n(wing)g(v)-5
-b(alues)33 b(for)g Ft(")p Fj(in)n(terp)p Ft(")f Fj(allo)n(ws)h(y)n(ou)f
-(to)i(implemen)n(t)g(y)n(our)e(o)n(wn)h(sub-pixel)227
-3253 y(in)n(terp)r(olation)25 b(sc)n(heme)h(b)n(y)f(means)h(of)f(y)n
-(our)g(o)n(wn)g(function.)37 b(Y)-7 b(ou)26 b(should)f(supply)h(a)g(p)r
-(oin)n(ter)f(to)h(this)g(function)227 3352 y(via)h(the)h
-Ft(")p Fj(\014n)n(terp)p Ft(")f Fj(parameter:)340 3633
-y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(UKERN1:)38 b(In)28
-b(this)h(sc)n(heme,)f(y)n(ou)g(supply)h(a)f(function)h(to)f(ev)-5
-b(aluate)28 b(y)n(our)f(o)n(wn)h(1-dimensional)427 3732
-y(in)n(terp)r(olation)41 b(k)n(ernel,)j(whic)n(h)d(is)g(then)h(used)f
-(to)h(p)r(erform)e(sub-pixel)h(in)n(terp)r(olation)g(\(as)g(describ)r
-(ed)427 3832 y(ab)r(o)n(v)n(e\).)j(The)30 b(function)g(y)n(ou)g(supply)
-g(should)g(ha)n(v)n(e)f(the)h(same)g(in)n(terface)f(as)g(the)i
-(\014ctitious)f(astUk)n(ern1)427 3932 y(function)h(\(q.v.\).)45
-b(In)30 b(addition,)h(a)f(v)-5 b(alue)30 b(should)g(b)r(e)g(giv)n(en)g
-(via)f Ft(")p Fj(params[0])p Ft(")f Fj(to)i(sp)r(ecify)g(the)h(n)n(um)n
-(b)r(er)427 4031 y(of)25 b(neigh)n(b)r(ouring)f(pixels)g(whic)n(h)h
-(are)f(to)g(con)n(tribute)h(to)f(eac)n(h)g(in)n(terp)r(olated)g(v)-5
-b(alue)25 b(\(in)g(the)h(same)e(w)n(a)n(y)f(as)427 4131
-y(for)28 b(the)g(pre-de\014ned)g(in)n(terp)r(olation)g(sc)n(hemes)f
-(describ)r(ed)h(ab)r(o)n(v)n(e\).)37 b(Other)28 b(elemen)n(ts)g(of)g
-(the)h Ft(")p Fj(params)p Ft(")427 4231 y Fj(arra)n(y)d(are)g(a)n(v)-5
-b(ailable)26 b(to)i(pass)f(v)-5 b(alues)27 b(to)g(y)n(our)g(in)n(terp)r
-(olation)f(function.)340 4370 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(UINTERP:)26 b(This)h(is)f(a)g(completely)h(general)e(sc)n
-(heme,)h(in)h(whic)n(h)g(y)n(our)e(in)n(terp)r(olation)h(function)427
-4469 y(has)35 b(access)f(to)i(all)f(of)g(the)h(input)g(data.)60
-b(This)35 b(allo)n(ws)f(y)n(ou)h(to)g(implemen)n(t)h(an)n(y)f(in)n
-(terp)r(olation)f(algo-)427 4569 y(rithm)i(y)n(ou)e(c)n(ho)r(ose,)h
-(whic)n(h)g(could)g(\(for)g(example\))g(b)r(e)g(non-linear,)h(or)e
-(adaptiv)n(e.)58 b(In)35 b(this)g(case,)h(the)427 4669
-y(astResample)p Fl(<)p Fj(X)p Fl(>)e Fj(functions)i(pla)n(y)f(no)h
-(role)e(in)i(the)g(sub-pixel)g(in)n(terp)r(olation)f(pro)r(cess)f(and)i
-(simply)427 4768 y(handle)29 b(the)g(geometrical)f(transformation)f(of)
-i(co)r(ordinates)e(and)i(other)f(housek)n(eeping.)39
-b(The)29 b(function)427 4868 y(y)n(ou)c(supply)g(should)g(ha)n(v)n(e)f
-(the)h(same)g(in)n(terface)g(as)f(the)i(\014ctitious)f(astUin)n(terp)g
-(function)g(\(q.v.\).)37 b(In)25 b(this)427 4968 y(case,)e(the)f
-Ft(")p Fj(params)p Ft(")e Fj(parameter)g(is)i(not)g(used)g(b)n(y)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(,)g(but)g(is)g(a)n(v)-5
-b(ailable)21 b(to)h(pass)f(v)-5 b(alues)427 5067 y(to)28
-b(y)n(our)e(in)n(terp)r(olation)h(function.)-2 5242 y
-Fd(Con)m(trol)32 b(Flags)n(:)227 5388 y Fj(The)h(follo)n(wing)e
-(\015ags)h(are)g(de\014ned)h(in)f(the)h Ft(")p Fj(ast.h)p
-Ft(")f Fj(header)g(\014le)g(and)h(ma)n(y)f(b)r(e)h(used)f(to)h(pro)n
-(vide)e(additional)227 5488 y(con)n(trol)d(o)n(v)n(er)g(the)i
-(resampling)e(pro)r(cess.)41 b(Ha)n(ving)28 b(selected)h(a)g(set)h(of)f
-(\015ags,)g(y)n(ou)f(should)i(supply)f(the)h(bit)n(wise)227
-5587 y(OR)e(of)f(their)h(v)-5 b(alues)27 b(via)g(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter:)p eop end
-%%Page: 328 338
-TeXDict begin 328 337 bop 0 52 a FF(328)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(NOBAD:)22 b(Indicates)g(that)h(an)n(y)e(output)i
-(arra)n(y)d(elemen)n(ts)i(for)f(whic)n(h)i(no)e(resampled)h(v)-5
-b(alue)22 b(could)427 451 y(b)r(e)g(obtained)f(should)h(b)r(e)f(left)i
-(set)e(to)g(the)h(v)-5 b(alue)21 b(they)h(had)f(on)h(en)n(try)e(to)i
-(this)g(function.)35 b(If)22 b(this)g(\015ag)e(is)i(not)427
-551 y(supplied,)34 b(suc)n(h)d(output)i(arra)n(y)d(elemen)n(ts)h(are)g
-(set)h(to)g(the)h(v)-5 b(alue)31 b(supplied)i(for)e(parameter)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")p Fj(.)427 650 y(Note,)39
-b(this)d(\015ag)g(cannot)g(b)r(e)g(used)g(in)h(conjunction)f(with)h
-(the)g(AST)p Ft(__)p Fj(CONSER)-9 b(VEFLUX)35 b(\015ag)h(\(an)427
-750 y(error)26 b(will)i(b)r(e)g(rep)r(orted)f(if)h(b)r(oth)g(\015ags)e
-(are)h(sp)r(eci\014ed\).)340 891 y Fi(\017)45 b Fj(AST)p
-Ft(__)p Fj(URESAMP1,)27 b(2,)g(3)g(&)h(4:)36 b(A)28 b(set)g(of)f(four)g
-(\015ags)g(whic)n(h)g(are)g(reserv)n(ed)f(for)h(y)n(our)f(o)n(wn)h
-(use.)37 b(They)427 991 y(ma)n(y)32 b(b)r(e)h(used)f(to)g(pass)g(priv)
--5 b(ate)31 b(information)h(to)g(an)n(y)g(sub-pixel)g(in)n(terp)r
-(olation)f(function)i(whic)n(h)f(y)n(ou)427 1091 y(implemen)n(t)c(y)n
-(ourself.)36 b(They)28 b(are)e(ignored)h(b)n(y)g(all)g(the)h
-(pre-de\014ned)f(in)n(terp)r(olation)g(sc)n(hemes.)340
-1232 y Fi(\017)45 b Fj(AST)p Ft(__)p Fj(USEBAD:)33 b(Indicates)g(that)h
-(there)f(ma)n(y)f(b)r(e)i(bad)f(pixels)f(in)i(the)f(input)h(arra)n
-(y\(s\))d(whic)n(h)i(m)n(ust)427 1332 y(b)r(e)27 b(recognised)f(b)n(y)g
-(comparing)g(with)h(the)g(v)-5 b(alue)27 b(giv)n(en)f(for)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")26 b Fj(and)g(propagated)f(to)i(the)g
-(output)427 1432 y(arra)n(y\(s\).)35 b(If)26 b(this)h(\015ag)e(is)h
-(not)g(set,)h(all)f(input)h(v)-5 b(alues)26 b(are)f(treated)h
-(literally)f(and)h(the)h Ft(")p Fj(badv)-5 b(al)p Ft(")25
-b Fj(v)-5 b(alue)26 b(is)427 1531 y(only)h(used)h(for)f(\015agging)f
-(output)i(arra)n(y)d(v)-5 b(alues.)340 1673 y Fi(\017)45
-b Fj(AST)p Ft(__)p Fj(CONSER)-9 b(VEFLUX:)28 b(Indicates)h(that)f(the)h
-(output)h(pixel)e(v)-5 b(alues)29 b(should)f(b)r(e)h(scaled)f(in)h(suc)
-n(h)f(a)427 1773 y(w)n(a)n(y)c(as)g(to)g(preserv)n(e)f(\(appro)n
-(ximately\))g(the)i(total)g(data)f(v)-5 b(alue)25 b(in)f(a)h(feature)f
-(on)g(the)h(sky)-7 b(.)36 b(Without)25 b(this)427 1872
-y(\015ag,)k(eac)n(h)f(output)i(pixel)f(v)-5 b(alue)29
-b(represen)n(ts)f(an)g(instan)n(taneous)g(sample)h(of)g(the)h(input)f
-(data)g(v)-5 b(alues)29 b(at)427 1972 y(the)e(corresp)r(onding)d(input)
-j(p)r(osition.)36 b(This)26 b(is)g(appropriate)e(if)i(the)h(input)g
-(data)e(represen)n(ts)g(the)h(spatial)427 2071 y(densit)n(y)k(of)f
-(some)g(quan)n(tit)n(y)h(\(e.g.)43 b(surface)28 b(brigh)n(tness)h(in)h
-(Janskys)e(p)r(er)i(square)e(arc-second\))g(b)r(ecause)427
-2171 y(the)g(output)f(pixel)g(v)-5 b(alues)26 b(will)h(ha)n(v)n(e)f
-(the)h(same)g(normalisation)e(and)i(units)g(as)f(the)h(input)h(pixel)f
-(v)-5 b(alues.)427 2271 y(Ho)n(w)n(ev)n(er,)27 b(if)i(the)g(input)g
-(data)f(v)-5 b(alues)28 b(represen)n(t)f(\015ux)i(\(or)f(some)g(other)f
-(ph)n(ysical)h(quan)n(tit)n(y\))g(p)r(er)h(pixel,)427
-2370 y(then)i(the)g(AST)p Ft(__)p Fj(CONSER)-9 b(VEFLUX)30
-b(\015ag)g(could)h(b)r(e)g(used.)46 b(This)30 b(causes)g(eac)n(h)g
-(output)h(pixel)g(v)-5 b(alue)427 2470 y(to)28 b(b)r(e)g(scaled)f(b)n
-(y)g(the)h(ratio)f(of)g(the)h(output)g(pixel)g(size)f(to)h(the)g(input)
-g(pixel)g(size.)227 2649 y(This)40 b(\015ag)g(can)f(only)h(b)r(e)h
-(used)f(if)g(the)h(Mapping)f(is)g(succesfully)g(appro)n(ximated)e(b)n
-(y)i(one)g(or)f(more)g(linear)227 2749 y(transformations.)66
-b(Th)n(us)37 b(an)h(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(it)g
-(used)g(when)g(the)g Ft(")p Fj(tol)p Ft(")f Fj(parameter)f(is)i(set)g
-(to)227 2849 y(zero)f(\(whic)n(h)h(stops)f(the)h(use)f(of)h(linear)f
-(appro)n(ximations\),)h(or)f(if)h(the)g(Mapping)f(is)h(to)r(o)f
-(non-linear)g(to)g(b)r(e)227 2948 y(appro)n(ximated)f(b)n(y)h(a)f
-(piece-wise)h(linear)f(transformation.)64 b(The)37 b(ratio)f(of)h
-(output)h(to)f(input)h(pixel)f(size)g(is)227 3048 y(ev)-5
-b(aluated)19 b(once)h(for)f(eac)n(h)f(panel)i(of)f(the)h(piece-wise)f
-(linear)g(appro)n(ximation)e(to)j(the)g(Mapping,)g(and)g(is)f(assumed)
-227 3148 y(to)33 b(b)r(e)h(constan)n(t)f(for)g(all)g(output)g(pixels)g
-(in)h(the)g(panel.)54 b(The)33 b(scaling)f(factors)g(for)h(adjacen)n(t)
-g(panels)g(will)g(in)227 3247 y(general)f(di\013er)h(sligh)n(tly)-7
-b(,)34 b(and)e(so)h(the)g(join)n(ts)g(b)r(et)n(w)n(een)g(panels)f(ma)n
-(y)g(b)r(e)i(visible)e(when)h(viewing)g(the)g(output)227
-3347 y(image)i(at)g(high)h(con)n(trast.)59 b(If)36 b(this)f(is)h(a)f
-(problem,)i(reduce)e(the)g(v)-5 b(alue)36 b(of)f(the)h
-Ft(")p Fj(tol)p Ft(")e Fj(parameter)g(un)n(til)i(the)227
-3446 y(di\013erence)28 b(b)r(et)n(w)n(een)f(adjacen)n(t)g(panels)h(is)f
-(su\016cien)n(tly)h(small)f(to)g(b)r(e)h(insigni\014can)n(t.)227
-3580 y(Note,)22 b(this)e(\015ag)f(cannot)g(b)r(e)h(used)g(in)g
-(conjunction)g(with)g(the)h(AST)p Ft(__)p Fj(NOBAD)e(\015ag)g(\(an)h
-(error)e(will)i(b)r(e)g(rep)r(orted)227 3679 y(if)28
-b(b)r(oth)g(\015ags)f(are)g(sp)r(eci\014ed\).)227 3813
-y(Flux)h(conserv)-5 b(ation)26 b(can)h(only)h(b)r(e)g(appro)n(ximate)e
-(when)h(using)h(a)f(resampling)f(algorithm.)36 b(F)-7
-b(or)27 b(accurate)f(\015ux)227 3912 y(conserv)-5 b(ation)26
-b(use)i(the)g(astRebin)p Fl(<)p Fj(X)p Fl(>)f Fj(or)f(astRebinSeq)p
-Fl(<)p Fj(X)p Fl(>)h Fj(function)h(instead.)-2 4080 y
-Fd(Propagation)33 b(of)e(Missing)f(Data)n(:)227 4226
-y Fj(Unless)j(the)g(AST)p Ft(__)p Fj(NOBAD)g(\015ag)f(is)h(sp)r
-(eci\014ed,)i(instances)d(of)h(missing)f(data)h(\(bad)g(pixels\))g(in)g
-(the)g(output)227 4325 y(grid)23 b(are)f(iden)n(ti\014ed)h(b)n(y)g(o)r
-(ccurrences)e(of)i(the)h Ft(")p Fj(badv)-5 b(al)p Ft(")22
-b Fj(v)-5 b(alue)22 b(in)i(the)f Ft(")p Fj(out)p Ft(")f
-Fj(arra)n(y)-7 b(.)33 b(These)23 b(ma)n(y)f(b)r(e)i(pro)r(duced)227
-4425 y(if)k(an)n(y)f(of)h(the)g(follo)n(wing)e(happ)r(en:)340
-4712 y Fi(\017)45 b Fj(The)35 b(input)h(p)r(osition)f(\(the)h
-(transformed)e(p)r(osition)h(of)g(the)g(output)h(pixel's)f(cen)n(tre\))
-f(lies)h(outside)g(the)427 4812 y(b)r(oundary)27 b(of)h(the)g(grid)f
-(of)g(input)h(pixels.)340 4954 y Fi(\017)45 b Fj(The)32
-b(input)h(p)r(osition)e(lies)h(inside)g(the)g(b)r(oundary)f(of)g(a)h
-(bad)f(input)i(pixel.)49 b(In)32 b(this)g(con)n(text,)g(an)g(input)427
-5053 y(pixel)h(is)g(considered)f(bad)h(if)h(its)f(data)g(v)-5
-b(alue)33 b(is)g(equal)f(to)h Ft(")p Fj(badv)-5 b(al)p
-Ft(")32 b Fj(and)h(the)g(AST)p Ft(__)p Fj(USEBAD)g(\015ag)427
-5153 y(is)f(set)g(via)f(the)h Ft(")p Fj(\015ags)p Ft(")e
-Fj(parameter.)48 b(\(P)n(ositions)30 b(whic)n(h)i(ha)n(v)n(e)e(half-in)
-n(tegral)h(co)r(ordinate)f(v)-5 b(alues,)33 b(and)427
-5252 y(therefore)c(lie)g(on)h(a)f(pixel)g(b)r(oundary)-7
-b(,)30 b(are)e(regarded)g(as)h(lying)g(within)h(the)g(pixel)f(with)h
-(the)g(larger,)e(i.e.)427 5352 y(more)f(p)r(ositiv)n(e,)g(index.\))340
-5494 y Fi(\017)45 b Fj(The)27 b(set)g(of)g(neigh)n(b)r(ouring)e(input)j
-(pixels)f(\(excluding)f(those)h(whic)n(h)g(are)e(bad\))i(is)g
-(unsuitable)g(for)f(calcu-)427 5593 y(lating)g(an)f(in)n(terp)r(olated)
-h(v)-5 b(alue.)36 b(Whether)26 b(this)g(is)g(true)f(ma)n(y)h(dep)r(end)
-g(on)g(the)g(sub-pixel)f(in)n(terp)r(olation)427 5693
-y(sc)n(heme)i(in)h(use.)p eop end
-%%Page: 329 339
-TeXDict begin 329 338 bop 3643 52 a FF(329)340 351 y
-Fi(\017)45 b Fj(The)31 b(in)n(terp)r(olated)g(v)-5 b(alue)31
-b(lies)g(outside)g(the)g(range)f(whic)n(h)h(can)g(b)r(e)h(represen)n
-(ted)d(using)i(the)h(data)e(t)n(yp)r(e)427 451 y(of)e(the)g
-Ft(")p Fj(out)p Ft(")f Fj(arra)n(y)-7 b(.)227 617 y(In)29
-b(addition,)f(asso)r(ciated)f(output)i(v)-5 b(ariance)27
-b(estimates)h(\(if)i(calculated\))e(ma)n(y)f(b)r(e)i(declared)e(bad)i
-(and)f(\015agged)227 716 y(with)g(the)g Ft(")p Fj(badv)-5
-b(al)p Ft(")27 b Fj(v)-5 b(alue)27 b(in)h(the)g Ft(")p
-Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26 b Fj(arra)n(y)f(under)i(an)n(y)g
-(of)h(the)g(follo)n(wing)e(circumstances:)340 983 y Fi(\017)45
-b Fj(The)28 b(asso)r(ciated)e(resampled)h(data)g(v)-5
-b(alue)28 b(\(in)g(the)g Ft(")p Fj(out)p Ft(")e Fj(arra)n(y\))g(is)h
-(bad.)340 1118 y Fi(\017)45 b Fj(The)19 b(set)g(of)g(neigh)n(b)r
-(ouring)e(input)j(pixels)e(whic)n(h)h(con)n(tributed)g(to)f(the)i
-(output)f(data)f(v)-5 b(alue)19 b(do)f(not)h(all)g(ha)n(v)n(e)427
-1218 y(v)-5 b(alid)34 b(v)-5 b(ariance)32 b(estimates)h(asso)r(ciated)f
-(with)h(them.)55 b(In)33 b(this)h(con)n(text,)g(an)f(input)i(v)-5
-b(ariance)32 b(estimate)427 1317 y(ma)n(y)d(b)r(e)h(regarded)e(as)h
-(bad)h(either)f(b)r(ecause)g(it)i(has)e(the)h(v)-5 b(alue)29
-b Ft(")p Fj(badv)-5 b(al)p Ft(")29 b Fj(\(and)h(the)g(AST)p
-Ft(__)p Fj(USEBAD)427 1417 y(\015ag)d(is)h(set\),)g(or)e(b)r(ecause)h
-(it)h(is)g(negativ)n(e.)340 1552 y Fi(\017)45 b Fj(The)23
-b(set)f(of)h(neigh)n(b)r(ouring)e(input)i(pixels)g(for)f(whic)n(h)g(v)
--5 b(alid)23 b(v)-5 b(ariance)21 b(v)-5 b(alues)22 b(are)g(a)n(v)-5
-b(ailable)21 b(is)h(unsuitable)427 1651 y(for)30 b(calculating)f(an)g
-(o)n(v)n(erall)f(v)-5 b(ariance)28 b(v)-5 b(alue.)44
-b(Whether)30 b(this)g(is)g(true)g(ma)n(y)f(dep)r(end)h(on)g(the)g
-(sub-pixel)427 1751 y(in)n(terp)r(olation)d(sc)n(heme)g(in)h(use.)340
-1886 y Fi(\017)45 b Fj(The)25 b(v)-5 b(ariance)23 b(v)-5
-b(alue)25 b(lies)f(outside)h(the)g(range)e(whic)n(h)i(can)f(b)r(e)h
-(represen)n(ted)e(using)i(the)g(data)f(t)n(yp)r(e)h(of)f(the)427
-1985 y Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26
-b Fj(arra)n(y)-7 b(.)227 2151 y(If)22 b(the)f(AST)p Ft(__)p
-Fj(NOBAD)h(\015ag)e(is)h(sp)r(eci\014ed)g(via)g(parameter)f
-Ft(")p Fj(\015ags)p Ft(")p Fj(,)g(then)i(output)g(arra)n(y)d(elemen)n
-(ts)i(that)g(w)n(ould)227 2251 y(otherwise)27 b(b)r(e)h(set)f(to)h
-Ft(")p Fj(badv)-5 b(al)p Ft(")26 b Fj(are)h(instead)g(left)h(holding)f
-(the)h(v)-5 b(alue)28 b(they)f(had)h(on)f(en)n(try)g(to)g(this)h
-(function.)227 2351 y(The)g(n)n(um)n(b)r(er)f(of)h(suc)n(h)f(arra)n(y)e
-(elemen)n(ts)j(is)f(returned)g(as)g(the)h(function)h(v)-5
-b(alue.)p 0 2554 3780 12 v 0 2685 a Fz(astResolv)l(e)335
-b Fe(Resolv)m(e)38 b(a)g(v)m(ector)f(in)m(to)h(t)m(w)m(o)f(orthogonal)
-1587 2785 y(comp)s(onen)m(ts)3161 2685 y Fz(astResolv)l(e)0
-2978 y Fd(Description:)44 b Fj(This)c(function)h(resolv)n(es)c(a)j(v)n
-(ector)e(in)n(to)i(t)n(w)n(o)f(p)r(erp)r(endicular)g(comp)r(onen)n(ts.)
-74 b(The)39 b(v)n(ector)g(from)227 3077 y(p)r(oin)n(t)30
-b(1)f(to)g(p)r(oin)n(t)h(2)f(is)g(used)h(as)f(the)g(basis)g(v)n(ector.)
-41 b(The)30 b(v)n(ector)e(from)h(p)r(oin)n(t)h(1)f(to)g(p)r(oin)n(t)h
-(3)f(is)g(resolv)n(ed)f(in)n(to)227 3177 y(comp)r(onen)n(ts)33
-b(parallel)f(and)h(p)r(erp)r(endicular)f(to)h(this)h(basis)e(v)n
-(ector.)52 b(The)33 b(lengths)g(of)g(the)h(t)n(w)n(o)e(comp)r(onen)n
-(ts)227 3277 y(are)27 b(returned,)g(together)g(with)h(the)g(p)r
-(osition)f(of)h(closest)f(aproac)n(h)e(of)j(the)g(basis)f(v)n(ector)f
-(to)h(p)r(oin)n(t)h(3.)0 3430 y Fd(Synopsis:)121 b Ft(void)42
-b(astResolve\()d(AstFrame)h Fi(\003)p Ft(this,)h(const)h(double)f
-(point1[],)f(const)h(double)g(point2[],)227 3530 y(const)h(double)f
-(point3[],)f(double)h(point4[],)f(double)h Fi(\003)p
-Ft(d1,)h(double)f Fi(\003)p Ft(d2)h(\);)0 3683 y Fd(P)m(arameters:)259
-3823 y(this)427 3923 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4058 y Fd(p)s(oin)m(t1)427 4158 y Fj(An)27
-b(arra)n(y)d(of)j(double,)f(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)f
-(F)-7 b(rame)26 b(axis)g(\(Naxes)g(attribute\).)37 b(This)26
-b(marks)f(the)427 4257 y(start)i(of)h(the)g(basis)f(v)n(ector,)f(and)h
-(of)h(the)g(v)n(ector)e(to)i(b)r(e)g(resolv)n(ed.)259
-4392 y Fd(p)s(oin)m(t2)427 4492 y Fj(An)f(arra)n(y)d(of)j(double,)f
-(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)26
-b(axis)g(\(Naxes)g(attribute\).)37 b(This)26 b(marks)f(the)427
-4591 y(end)j(of)g(the)g(basis)e(v)n(ector.)259 4726 y
-Fd(p)s(oin)m(t3)427 4826 y Fj(An)h(arra)n(y)d(of)j(double,)f(with)h
-(one)f(elemen)n(t)h(for)f(eac)n(h)f(F)-7 b(rame)26 b(axis)g(\(Naxes)g
-(attribute\).)37 b(This)26 b(marks)f(the)427 4925 y(end)j(of)g(the)g(v)
-n(ector)e(to)h(b)r(e)h(resolv)n(ed.)259 5060 y Fd(p)s(oin)m(t4)427
-5160 y Fj(An)34 b(arra)n(y)e(of)i(double,)h(with)f(one)f(elemen)n(t)h
-(for)f(eac)n(h)g(F)-7 b(rame)34 b(axis)e(in)i(whic)n(h)g(the)g(co)r
-(ordinates)f(of)g(the)427 5259 y(p)r(oin)n(t)28 b(of)g(closest)e
-(approac)n(h)g(of)i(the)g(basis)f(v)n(ector)f(to)h(p)r(oin)n(t)h(3)f
-(will)h(b)r(e)g(returned.)259 5394 y Fd(d1)427 5494 y
-Fj(The)d(address)e(of)h(a)g(lo)r(cation)g(at)h(whic)n(h)f(to)g(return)g
-(the)h(distance)f(from)g(p)r(oin)n(t)h(1)f(to)g(p)r(oin)n(t)h(4)f
-(\(that)h(is,)g(the)427 5593 y(length)31 b(of)f(the)h(comp)r(onen)n(t)f
-(parallel)f(to)h(the)h(basis)f(v)n(ector\).)44 b(P)n(ositiv)n(e)29
-b(v)-5 b(alues)30 b(are)f(in)i(the)f(same)g(sense)427
-5693 y(as)d(mo)n(v)n(emen)n(t)g(from)g(p)r(oin)n(t)h(1)f(to)h(p)r(oin)n
-(t)f(2.)p eop end
-%%Page: 330 340
-TeXDict begin 330 339 bop 0 52 a FF(330)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(d2)427
-451 y Fj(The)25 b(address)e(of)h(a)g(lo)r(cation)g(at)h(whic)n(h)f(to)g
-(return)g(the)h(distance)f(from)g(p)r(oin)n(t)h(4)f(to)g(p)r(oin)n(t)h
-(3)f(\(that)h(is,)g(the)427 551 y(length)j(of)g(the)f(comp)r(onen)n(t)h
-(p)r(erp)r(endicular)f(to)h(the)g(basis)e(v)n(ector\).)36
-b(The)28 b(v)-5 b(alue)27 b(is)h(alw)n(a)n(ys)e(p)r(ositiv)n(e.)0
-717 y Fd(Notes:)340 1005 y Fi(\017)45 b Fj(Eac)n(h)36
-b(v)n(ector)g(used)h(in)h(this)f(function)h(is)f(the)h(path)f(of)g
-(shortest)f(distance)h(b)r(et)n(w)n(een)g(t)n(w)n(o)g(p)r(oin)n(ts,)i
-(as)427 1104 y(de\014ned)28 b(b)n(y)g(the)g(astDistance)f(function.)340
-1240 y Fi(\017)45 b Fj(This)19 b(function)g(will)g(return)f
-Ft(")p Fj(bad)p Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)18
-b(\(AST)p Ft(__)p Fj(BAD\))i(if)f(an)n(y)f(of)g(the)i(input)f(co)r
-(ordinates)427 1339 y(has)27 b(this)h(v)-5 b(alue,)28
-b(or)e(if)j(the)f(required)e(output)i(v)-5 b(alues)28
-b(are)e(unde\014ned.)p 0 1544 3780 12 v 0 1675 a Fz(astRetainFits)218
-b Fe(Indicate)38 b(that)g(the)h(curren)m(t)e(card)h(in)h(a)1160
-1775 y(FitsChan)f(should)g(b)s(e)h(retained)2990 1675
-y Fz(astRetainFits)0 1945 y Fd(Description:)44 b Fj(This)26
-b(function)h(stores)d(a)i(\015ag)f(with)h(the)g(curren)n(t)f(card)g(in)
-h(the)h(FitsChan)e(indicating)h(that)g(the)g(card)227
-2045 y(should)20 b(not)h(b)r(e)g(remo)n(v)n(ed)e(from)h(the)g(FitsChan)
-h(when)g(an)f(Ob)5 b(ject)20 b(is)g(read)g(from)g(the)h(FitsChan)f
-(using)g(astRead.)227 2172 y(Cards)j(that)i(ha)n(v)n(e)e(not)h(b)r(een)
-g(\015agged)f(in)i(this)f(w)n(a)n(y)f(are)g(remo)n(v)n(ed)f(when)j(a)e
-(read)h(op)r(eration)f(completes)h(succes-)227 2272 y(fully)-7
-b(,)27 b(but)f(only)g(if)g(the)g(card)f(w)n(as)f(used)i(in)g(the)g(pro)
-r(cess)e(of)i(creating)f(the)h(returned)f(AST)h(Ob)5
-b(ject.)36 b(An)n(y)26 b(cards)227 2371 y(that)g(are)e(irrelev)-5
-b(an)n(t)24 b(to)i(the)f(creation)g(of)g(the)h(AST)f(Ob)5
-b(ject)26 b(are)e(retained)h(whether)g(or)g(not)g(they)g(are)g
-(\015agged.)0 2526 y Fd(Synopsis:)121 b Ft(void)42 b(astRetainFits\()c
-(AstFitsChan)h Fi(\003)p Ft(this)i(\))0 2680 y Fd(P)m(arameters:)259
-2822 y(this)427 2921 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)0
-3088 y Fd(Notes:)340 3376 y Fi(\017)45 b Fj(This)23 b(function)f
-(returns)g(without)h(action)e(if)i(the)g(FitsChan)f(is)h(initially)f(p)
-r(ositioned)g(at)g(the)h Ft(")p Fj(end-of-\014le)p Ft(")427
-3475 y Fj(\(i.e.)38 b(if)28 b(the)g(Card)e(attribute)i(exceeds)f(the)h
-(n)n(um)n(b)r(er)f(of)h(cards)e(in)i(the)g(FitsChan\).)340
-3610 y Fi(\017)45 b Fj(The)28 b(curren)n(t)f(card)f(is)i(not)f(c)n
-(hanged)g(b)n(y)g(this)h(function.)p 0 3815 V 0 3945
-a Fz(astSame)800 3946 y Fe(T)-10 b(est)38 b(if)g(t)m(w)m(o)f(AST)i(p)s
-(oin)m(ters)e(refer)h(to)g(the)h(same)1716 4061 y(Ob)7
-b(ject)3295 3945 y Fz(astSame)0 4259 y Fd(Description:)44
-b Fj(This)30 b(function)h(returns)e(a)h(b)r(o)r(olean)f(result)h(\(0)g
-(or)f(1\))h(to)g(indicate)g(whether)g(t)n(w)n(o)f(p)r(oin)n(ters)g
-(refer)h(to)227 4359 y(the)e(same)f(Ob)5 b(ject.)0 4513
-y Fd(Synopsis:)121 b Ft(int)42 b(astSame\()e(AstObject)g
-Fi(\003)p Ft(this,)h(AstObject)f Fi(\003)p Ft(that)i(\))0
-4668 y Fd(P)m(arameters:)259 4809 y(this)427 4909 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(\014rst)f(Ob)5 b(ject.)259 5044 y Fd(that)427
-5144 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(second)f(Ob)5
-b(ject.)0 5311 y Fd(Class)31 b(Applicabilit)m(y:)259
-5452 y(Ob)5 b(ject)427 5552 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 5718 y Fd(Returned)32 b(V)-8 b(alue:)p
-eop end
-%%Page: 331 341
-TeXDict begin 331 340 bop 3643 52 a FF(331)259 351 y
-Fd(astSame\(\))427 451 y Fj(One)28 b(if)g(the)g(t)n(w)n(o)e(p)r(oin)n
-(ters)h(refer)g(to)h(the)g(same)f(Ob)5 b(ject,)27 b(otherwise)g(zero.)0
-605 y Fd(Notes:)340 879 y Fi(\017)45 b Fj(Tw)n(o)37 b(indep)r(enden)n
-(t)h(Ob)5 b(jects)37 b(that)g(happ)r(en)h(to)f(b)r(e)h(iden)n(tical)f
-(are)f(not)h(considered)g(to)g(b)r(e)h(the)f(same)427
-979 y(Ob)5 b(ject)28 b(b)n(y)f(this)h(function.)340 1103
-y Fi(\017)45 b Fj(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f
-(AST)g(error)d(status)j(set,)f(or)427 1203 y(if)g(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)p 0 1386 3780 12 v 0 1518 a Fz(astSelectorMap)
-429 b Fe(Create)38 b(a)g(SelectorMap)426 b Fz(astSelectorMap)0
-1690 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(SelectorMap)g(and)g(optionally)g(initialises)g(its)h(attributes.)227
-1811 y(A)g(SelectorMap)f(is)g(a)g(Mapping)h(that)g(iden)n(ti\014es)f
-(whic)n(h)h(Region)f(con)n(tains)f(a)i(giv)n(en)e(input)j(p)r(osition.)
-227 1931 y(A)40 b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g
-(of)g(Regions)f(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)
-g(of)g(axes)g(and)227 2031 y(represen)n(t)31 b(the)h(same)f(co)r
-(ordinate)g(F)-7 b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i
-(\(Nin)f(attribute\))h(of)e(the)i(SelectorMap)227 2130
-y(equals)24 b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g
-(one)g(of)h(the)f(encapsulated)g(Region.)35 b(All)25
-b(SelectorMaps)e(ha)n(v)n(e)g(only)227 2230 y(a)k(single)h(output.)37
-b(SelectorMaps)26 b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)227 2351 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r
-(osition,)h(the)e(forw)n(ard)e(transformation)h(of)h(a)f(SelectorMap)g
-(searc)n(hes)f(through)h(the)i(en-)227 2450 y(capsulated)d(Regions)f
-(\(in)i(the)g(order)e(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h
-(created\))f(un)n(til)i(a)f(Region)g(is)227 2550 y(found)27
-b(whic)n(h)g(con)n(tains)f(the)h(input)g(p)r(osition.)36
-b(The)27 b(index)g(asso)r(ciated)e(with)i(this)g(Region)f(is)h
-(returned)f(as)g(the)227 2649 y(SelectorMap)h(output)h(v)-5
-b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27 b(is)h(the)g(p)r(osition)f
-(of)h(the)f(Region)g(within)h(the)g(list)g(of)g(Regions)227
-2749 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g(created,)g
-(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 2849 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-2969 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 3069 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 3168 y(simpli\014ed)g(using)g
-(astSimplify)-7 b(.)227 3289 y(In)28 b(practice,)f(SelectorMaps)f(are)h
-(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)0
-3430 y Fd(Synopsis:)121 b Ft(AstSelectorMap)38 b Fi(\003)p
-Ft(astSelectorMap)o(\()g(int)k(nreg,)f(AstRegion)f Fi(\003)p
-Ft(regs[],)g(double)i(badval,)e(const)227 3530 y(char)i
-Fi(\003)p Ft(options,)e(...)86 b(\))0 3671 y Fd(P)m(arameters:)259
-3799 y(nreg)427 3899 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(supplied)g
-(Regions.)259 4024 y Fd(regs)427 4123 y Fj(An)41 b(arra)n(y)d(of)j(p)r
-(oin)n(ters)f(to)g(the)h(Regions.)74 b(All)41 b(the)g(supplied)g
-(Regions)f(m)n(ust)g(relate)g(to)g(the)h(same)427 4223
-y(co)r(ordinate)23 b(F)-7 b(rame.)35 b(The)23 b(n)n(um)n(b)r(er)g(of)h
-(axes)e(in)i(this)g(co)r(ordinate)e(F)-7 b(rame)23 b(de\014nes)h(the)f
-(n)n(um)n(b)r(er)h(of)f(inputs)427 4323 y(for)k(the)h(SelectorMap.)259
-4447 y Fd(badv)-5 b(al)427 4547 y Fj(The)35 b(v)-5 b(alue)34
-b(to)g(b)r(e)h(returned)e(b)n(y)h(the)h(forw)n(ard)e(transformation)f
-(of)j(the)f(SelectorMap)g(for)f(an)n(y)h(input)427 4647
-y(p)r(ositions)27 b(that)h(ha)n(v)n(e)f(a)g(bad)g(\(AST)p
-Ft(__)p Fj(BAD\))i(v)-5 b(alue)27 b(on)g(an)n(y)g(axis.)259
-4771 y Fd(options)427 4871 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4971 y(assignmen)n(ts)34
-b(to)h(b)r(e)h(used)f(for)g(initialising)g(the)h(new)f(SelectorMap.)59
-b(The)35 b(syn)n(tax)f(used)i(is)f(iden)n(tical)427 5070
-y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-5170 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 5295 y Fd(...)427 5394 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 5494 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 5593 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5693 y Fj(function\).)p
-eop end
-%%Page: 332 342
-TeXDict begin 332 341 bop 0 52 a FF(332)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Returned)i(V)-8
-b(alue:)259 487 y(astSelectorMap\(\))427 587 y Fj(A)28
-b(p)r(oin)n(ter)f(to)h(the)g(new)g(SelectorMap.)0 749
-y Fd(Notes:)340 1031 y Fi(\017)45 b Fj(Deep)22 b(copies)f(are)f(tak)n
-(en)h(of)g(the)h(supplied)g(Regions.)33 b(This)22 b(means)f(that)g(an)n
-(y)g(subsequen)n(t)g(c)n(hanges)f(made)427 1131 y(to)k(the)h(comp)r
-(onen)n(t)f(Regions)f(using)h(the)g(supplied)h(p)r(oin)n(ters)e(will)i
-(ha)n(v)n(e)e(no)g(e\013ect)i(on)f(the)h(SelectorMap.)340
-1263 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-1363 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 1562 3780 12 v 0 1693 a Fz(astSet)1023
-1694 y Fe(Set)38 b(attribute)f(v)-7 b(alues)38 b(for)g(an)h(Ob)7
-b(ject)3420 1693 y Fz(astSet)0 1882 y Fd(Description:)44
-b Fj(This)39 b(function)h(assigns)d(a)i(set)g(of)g(attribute)g(v)-5
-b(alues)39 b(to)g(an)f(Ob)5 b(ject,)42 b(o)n(v)n(er-riding)36
-b(an)n(y)j(previous)227 1982 y(v)-5 b(alues.)68 b(The)38
-b(attributes)f(and)h(their)g(new)g(v)-5 b(alues)37 b(are)g(sp)r
-(eci\014ed)i(via)e(a)g(c)n(haracter)f(string,)k(whic)n(h)e(should)227
-2081 y(con)n(tain)27 b(a)g(comma-separated)f(list)h(of)h(the)g(form:)
-227 2206 y Ft(")p Fj(attribute)p Ft(_)p Fj(1)f(=)g(v)-5
-b(alue)p Ft(_)p Fj(1,)27 b(attribute)p Ft(_)p Fj(2)f(=)i(v)-5
-b(alue)p Ft(_)p Fj(2,)26 b(...)37 b Ft(")227 2330 y Fj(where)22
-b Ft(")p Fj(attribute)p Ft(_)p Fj(n)p Ft(")g Fj(sp)r(eci\014es)g(an)h
-(attribute)f(name,)i(and)e(the)h(v)-5 b(alue)23 b(to)f(the)h(righ)n(t)f
-(of)h(eac)n(h)e Ft(")p Fj(=)p Ft(")h Fj(sign)g(should)227
-2430 y(b)r(e)36 b(a)f(suitable)h(textual)f(represen)n(tation)f(of)h
-(the)h(v)-5 b(alue)35 b(to)h(b)r(e)g(assigned.)59 b(This)35
-b(v)-5 b(alue)36 b(will)f(b)r(e)h(in)n(terpreted)227
-2529 y(according)26 b(to)i(the)g(attribute's)f(data)g(t)n(yp)r(e.)227
-2654 y(The)d(string)e(supplied)i(ma)n(y)f(also)f(con)n(tain)h
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)f(format)h(sp)r(eci\014ers,)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(signs)g(in)g(the)
-227 2754 y(usual)g(w)n(a)n(y)-7 b(.)35 b(If)24 b(presen)n(t,)f(these)h
-(will)f(b)r(e)h(substituted)h(b)n(y)e(v)-5 b(alues)23
-b(supplied)h(as)e(additional)h(optional)g(argumen)n(ts)227
-2853 y(\(using)28 b(the)g(normal)e Ft(")p Fj(prin)n(tf)p
-Ft(")h Fj(rules\))h(b)r(efore)f(the)h(string)f(is)g(used.)0
-3002 y Fd(Synopsis:)121 b Ft(void)42 b(astSet\()e(AstObject)g
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(settings,)d(...)86
-b(\))0 3152 y Fd(P)m(arameters:)259 3288 y(this)427 3388
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject.)259 3520
-y Fd(settings)427 3620 y Fj(P)n(oin)n(ter)27 b(to)i(a)g(n)n
-(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g(a)g
-(comma-separated)f(list)i(of)f(attribute)427 3719 y(settings)g(in)f
-(the)h(form)g(describ)r(ed)f(ab)r(o)n(v)n(e.)259 3852
-y Fd(...)427 3952 y Fj(Optional)k(additional)g(argumen)n(ts)f(whic)n(h)
-h(supply)h(v)-5 b(alues)31 b(to)g(b)r(e)h(substituted)g(for)f(an)n(y)g
-Ft(")p Fj(prin)n(tf)p Ft(")p Fj(-st)n(yle)427 4051 y(format)c(sp)r
-(eci\014ers)g(that)h(app)r(ear)f(in)h(the)g Ft(")p Fj(settings)p
-Ft(")e Fj(string.)0 4213 y Fd(Class)31 b(Applicabilit)m(y:)259
-4349 y(Ob)5 b(ject)427 4449 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 4611 y Fd(Examples:)227 4748 y
-Fq(astSet\()46 b(map,)h Ft(")p Fq(Report)e(=)j(1,)f(Zoom)g(=)g(25.0)p
-Ft(")f Fq(\);)427 4846 y Fj(Sets)28 b(the)g(Rep)r(ort)f(attribute)h
-(for)f(Ob)5 b(ject)28 b Ft(")p Fj(map)p Ft(")e Fj(to)i(the)g(v)-5
-b(alue)27 b(1)g(and)h(the)g(Zo)r(om)f(attribute)h(to)f(25.0.)227
-4980 y Fq(astSet\()46 b(frame,)g Ft(")p Fq(Label\()g(\045d)h(\))g
-(=Offset)f(along)h(axis)f(\045d)p Ft(")p Fq(,)h(axis,)f(axis)h(\);)427
-5079 y Fj(Sets)25 b(the)g(Lab)r(el\(axis\))f(attribute)h(for)g(Ob)5
-b(ject)24 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(a)g(suitable)h(string,)g
-(where)f(the)h(axis)f(n)n(um)n(b)r(er)427 5178 y(is)k(obtained)f(from)g
-Ft(")p Fj(axis)p Ft(")p Fj(,)f(a)i(v)-5 b(ariable)26
-b(of)i(t)n(yp)r(e)f(in)n(t.)227 5312 y Fq(astSet\()46
-b(frame,)g Ft(")p Fq(Title)g(=\045s)p Ft(")p Fq(,)g(mystring)g(\);)427
-5411 y Fj(Sets)28 b(the)g(Title)g(attribute)g(for)f(Ob)5
-b(ject)27 b Ft(")p Fj(frame)p Ft(")g Fj(to)g(the)h(con)n(ten)n(ts)f(of)
-g(the)h(string)f Ft(")p Fj(m)n(ystring)p Ft(")p Fj(.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 333 343
-TeXDict begin 333 342 bop 3643 52 a FF(333)340 351 y
-Fi(\017)45 b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f(sensitiv)n
-(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g(space.)340
-497 y Fi(\017)45 b Fj(White)33 b(space)e(ma)n(y)f(also)h(surround)g
-(attribute)g(v)-5 b(alues,)33 b(where)e(it)h(will)g(generally)e(b)r(e)i
-(ignored)e(\(except)427 596 y(for)24 b(string-v)-5 b(alued)23
-b(attributes)i(where)e(it)i(is)f(signi\014can)n(t)g(and)g(forms)g(part)
-f(of)i(the)f(v)-5 b(alue)25 b(to)f(b)r(e)g(assigned\).)340
-741 y Fi(\017)45 b Fj(It)32 b(is)g(not)g(p)r(ossible)g(to)f(include)i
-(a)e(comma)g(directly)h(in)g(the)g(v)-5 b(alue)32 b(assigned)f(to)g(an)
-h(attribute)g(via)f(the)427 841 y Ft(")p Fj(settings)p
-Ft(")j Fj(string.)56 b(T)-7 b(o)34 b(ac)n(hiev)n(e)f(this,)k(y)n(ou)d
-(should)g(use)g Ft(")p Fj(\045s)p Ft(")g Fj(format)f(and)i(supply)f
-(the)h(v)-5 b(alue)34 b(as)g(a)427 941 y(separate)26
-b(additional)h(argumen)n(t)g(to)g(astSet)h(\(or)f(use)g(the)h(astSetC)g
-(function)g(instead\).)340 1086 y Fi(\017)45 b Fj(The)39
-b(same)g(pro)r(cedure)f(ma)n(y)g(b)r(e)h(adopted)g(if)g
-Ft(")p Fj(\045)p Ft(")g Fj(signs)f(are)g(to)h(b)r(e)g(included)h(and)e
-(are)g(not)h(to)g(b)r(e)427 1186 y(in)n(terpreted)28
-b(as)f(format)h(sp)r(eci\014ers)g(\(alternativ)n(ely)-7
-b(,)27 b(the)h Ft(")p Fj(prin)n(tf)p Ft(")g Fj(con)n(v)n(en)n(tion)f
-(of)h(writing)g Ft(")p Fj(\045\045)p Ft(")f Fj(ma)n(y)427
-1285 y(b)r(e)h(used\).)340 1431 y Fi(\017)45 b Fj(An)28
-b(error)e(will)i(result)f(if)h(an)g(attempt)g(is)f(made)h(to)f(set)h(a)
-f(v)-5 b(alue)27 b(for)g(a)h(read-only)e(attribute.)p
-0 1655 3780 12 v 0 1785 a Fz(astSet)p Fc(<)p Fz(X)p Fc(>)965
-1786 y Fe(Set)38 b(an)h(attribute)d(v)-7 b(alue)39 b(for)e(an)i(Ob)7
-b(ject)3137 1785 y Fz(astSet)p Fc(<)p Fz(X)p Fc(>)0 2000
-y Fd(Description:)44 b Fj(This)27 b(is)f(a)h(family)f(of)h(functions)g
-(whic)n(h)f(set)h(a)f(sp)r(eci\014ed)h(attribute)g(v)-5
-b(alue)26 b(for)g(an)g(Ob)5 b(ject)27 b(using)f(one)227
-2100 y(of)33 b(sev)n(eral)f(di\013eren)n(t)h(data)g(t)n(yp)r(es.)54
-b(The)33 b(t)n(yp)r(e)h(is)f(selected)g(b)n(y)g(replacing)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)g(the)h(function)g(name)f(b)n(y)227
-2199 y(C,)g(D,)f(F,)h(I)f(or)f(L,)i(to)f(supply)g(a)g(v)-5
-b(alue)32 b(in)g(const)g(c)n(har)p Fi(\003)e Fj(\(i.e.)51
-b(string\),)33 b(double,)h(\015oat,)f(in)n(t,)g(or)f(long)f(format,)227
-2299 y(resp)r(ectiv)n(ely)-7 b(.)227 2436 y(If)36 b(p)r(ossible,)h(the)
-f(v)-5 b(alue)36 b(y)n(ou)e(supply)i(is)f(con)n(v)n(erted)f(to)i(the)f
-(t)n(yp)r(e)h(of)g(the)f(attribute.)61 b(If)36 b(con)n(v)n(ersion)d(is)
-j(not)227 2536 y(p)r(ossible,)28 b(an)f(error)f(will)h(result.)0
-2710 y Fd(Synopsis:)121 b Ft(void)42 b(astSet)p Fl(<)p
-Ft(X)p Fl(>)p Ft(\()d(AstObject)h Fi(\003)p Ft(this,)h(const)h(char)g
-Fi(\003)p Ft(attrib,)e Fl(<)p Ft(X)p Fl(>)p Ft(type)g(value)i(\))0
-2884 y Fd(P)m(arameters:)259 3046 y(this)427 3145 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject.)259 3291 y Fd(attrib)427 3390
-y Fj(P)n(oin)n(ter)20 b(to)h(a)f(n)n(ull-terminated)h(c)n(haracter)e
-(string)h(con)n(taining)g(the)i(name)f(of)g(the)g(attribute)g(whose)g
-(v)-5 b(alue)427 3490 y(is)28 b(to)f(b)r(e)h(set.)259
-3635 y Fd(v)-5 b(alue)427 3735 y Fj(The)26 b(v)-5 b(alue)25
-b(to)h(b)r(e)g(set)f(for)g(the)h(attribute,)h(in)e(the)h(data)f(t)n(yp)
-r(e)h(corresp)r(onding)e(to)h Fl(<)p Fj(X)p Fl(>)g Fj(\(or,)h(in)g(the)
-f(case)427 3835 y(of)j(astSetC,)f(a)h(p)r(oin)n(ter)f(to)g(a)g(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g(this)h(v)-5
-b(alue\).)0 4021 y Fd(Class)31 b(Applicabilit)m(y:)259
-4183 y(Ob)5 b(ject)427 4282 y Fj(These)28 b(functions)f(apply)h(to)f
-(all)h(Ob)5 b(jects.)0 4469 y Fd(Examples:)227 4634 y
-Fq(astSetI\()46 b(frame,)g Ft(")p Fq(Preserve)p Ft(")p
-Fq(,)e(1)k(\);)427 4730 y Fj(Sets)28 b(the)g(Preserv)n(e)d(attribute)j
-(v)-5 b(alue)27 b(for)g(Ob)5 b(ject)28 b Ft(")p Fj(frame)p
-Ft(")e Fj(to)i(1.)227 4876 y Fq(astSetC\()46 b(plot,)g
-Ft(")p Fq(Format\(1\))p Ft(")p Fq(,)e Ft(")p Fq(\045.2g)p
-Ft(")i Fq(\);)427 4975 y Fj(Sets)28 b(the)g(F)-7 b(ormat\(1\))27
-b(attribute)h(v)-5 b(alue)27 b(for)g(Ob)5 b(ject)28 b
-Ft(")p Fj(plot)p Ft(")f Fj(to)g(the)h(c)n(haracter)e(string)h
-Ft(")p Fj(\045.2g)p Ft(")p Fj(.)0 5162 y Fd(Notes:)340
-5469 y Fi(\017)45 b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 5615 y Fi(\017)45 b Fj(An)28 b(error)e(will)i(result)f(if)h
-(an)g(attempt)g(is)f(made)h(to)f(set)h(a)f(v)-5 b(alue)27
-b(for)g(a)h(read-only)e(attribute.)p eop end
-%%Page: 334 344
-TeXDict begin 334 343 bop 0 52 a FF(334)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astSetActiv)l(eUnit)344 b Fe(Sp)s(ecify)39
-b(ho)m(w)f(the)g(Unit)1263 598 y(attribute)e(should)j(b)s(e)g(used)2773
-483 y Fz(astSetActiv)l(eUnit)0 765 y Fd(Description:)44
-b Fj(This)22 b(function)h(sets)e(the)i(curren)n(t)e(v)-5
-b(alue)22 b(of)f(the)i(Activ)n(eUnit)f(\015ag)g(for)f(a)g(F)-7
-b(rame,)23 b(whic)n(h)f(con)n(trols)e(ho)n(w)227 865
-y(the)30 b(F)-7 b(rame)30 b(b)r(eha)n(v)n(es)e(when)i(it)g(is)g(used)g
-(\(b)n(y)f(astFindF)-7 b(rame)30 b(or)e(astCon)n(v)n(ert\))h(to)g(matc)
-n(h)h(another)e(F)-7 b(rame.)43 b(If)227 964 y(the)23
-b(Activ)n(eUnit)g(\015ag)e(is)h(set)g(in)g(b)r(oth)h(template)f(and)g
-(target)f(F)-7 b(rames)21 b(then)i(the)f(returned)g(Mapping)g(tak)n(es)
-f(in)n(to)227 1064 y(accoun)n(t)26 b(an)n(y)h(di\013erences)f(in)i
-(axis)e(units.)37 b(The)27 b(default)h(v)-5 b(alue)27
-b(for)f(simple)h(F)-7 b(rames)27 b(is)g(zero,)f(whic)n(h)h(preserv)n
-(es)227 1164 y(the)h(b)r(eha)n(viour)f(of)g(v)n(ersions)f(of)i(AST)g
-(prior)e(to)h(v)n(ersion)f(2.0.)227 1289 y(If)31 b(the)g(Activ)n(eUnit)
-g(\015ag)f(of)h(either)f(F)-7 b(rame)30 b(is)h(zero,)f(then)h(the)g
-(Mapping)f(will)h(ignore)e(an)n(y)h(di\013erence)g(in)h(the)227
-1389 y(Unit)g(attributes)f(of)g(corresp)r(onding)e(template)j(and)f
-(target)f(axes.)44 b(In)30 b(this)g(mo)r(de,)h(the)g(Unit)g(attributes)
-f(are)227 1489 y(purely)23 b(descriptiv)n(e)f(commen)n(tary)g(for)h
-(the)h(b)r(ene\014t)g(of)f(h)n(uman)g(readers)e(and)i(do)g(not)g
-(in\015uence)h(the)f(Mappings)227 1588 y(b)r(et)n(w)n(een)k(F)-7
-b(rames.)36 b(This)27 b(is)f(the)i(b)r(eha)n(viour)d(whic)n(h)i(all)g
-(F)-7 b(rames)26 b(had)g(in)h(older)f(v)n(ersion)g(of)h(AST,)g(prior)f
-(to)g(the)227 1688 y(in)n(tro)r(duction)i(of)f(this)h(attribute.)227
-1813 y(If)i(the)f(Activ)n(eUnit)h(\015ag)f(of)g(b)r(oth)g(F)-7
-b(rames)29 b(is)g(non-zero,)f(then)h(the)h(Mapping)f(from)g(template)g
-(to)g(target)f(will)227 1913 y(tak)n(e)35 b(accoun)n(t)g(of)g(an)n(y)g
-(di\013erence)h(in)g(the)g(axis)f(Unit)h(attributes,)i(where-ev)n(er)33
-b(p)r(ossible.)61 b(F)-7 b(or)35 b(instance,)i(if)227
-2013 y(corresp)r(onding)31 b(target)g(and)h(template)h(axes)e(ha)n(v)n
-(e)g(Unit)i(strings)f(of)g Ft(")p Fj(km)p Ft(")f Fj(and)h
-Ft(")p Fj(m)p Ft(")p Fj(,)h(then)g(the)g(F)-7 b(rameSet)227
-2112 y(class)35 b(will)i(use)f(a)f(Zo)r(omMap)g(to)h(connect)g(them)h
-(whic)n(h)f(in)n(tro)r(duces)f(a)h(scaling)f(of)h(1000.)61
-b(If)36 b(no)g(Mapping)227 2212 y(can)31 b(b)r(e)g(found)h(b)r(et)n(w)n
-(een)f(the)g(corresp)r(onding)e(units)j(string,)f(then)g(an)g(error)e
-(is)i(rep)r(orted.)47 b(In)31 b(this)g(mo)r(de,)h(it)227
-2312 y(is)f(assumed)g(that)g(v)-5 b(alues)31 b(of)g(the)h(Unit)g
-(attribute)f(conform)g(to)g(the)h(syn)n(tax)e(for)g(units)i(strings)e
-(describ)r(ed)h(in)227 2411 y(the)g(FITS)g(W)n(CS)f(P)n(ap)r(er)f(I)i
-Ft(")p Fj(Represen)n(tations)e(of)h(w)n(orld)f(co)r(ordinates)g(in)i
-(FITS)p Ft(")f Fj(\(Greisen)g(&)h(Calabretta\).)227 2511
-y(P)n(articularly)-7 b(,)30 b(an)n(y)h(of)g(the)h(named)f(unit)h(sym)n
-(b)r(ols,)g(functions,)h(op)r(erators)c(or)i(standard)f(m)n(ultiplier)h
-(pre\014xes)227 2610 y(listed)c(within)g(that)f(pap)r(er)g(can)g(b)r(e)
-g(used)h(within)g(a)e(units)i(string.)36 b(A)26 b(units)h(string)f(ma)n
-(y)f(con)n(tain)h(sym)n(b)r(ols)f(for)227 2710 y(unit)31
-b(whic)n(h)g(are)e(not)i(listed)g(in)f(the)h(FITS)g(pap)r(er,)g(but)g
-(transformation)e(to)h(an)n(y)g(other)g(units)h(will)g(then)g(not)227
-2810 y(b)r(e)f(p)r(ossible)f(\(except)h(to)f(units)h(whic)n(h)f(dep)r
-(end)h(only)f(on)g(the)h(same)f(unkno)n(wn)g(units)h(-)f(th)n(us)g
-Ft(")p Fj(\015ops)p Ft(")f Fj(can)h(b)r(e)227 2909 y(transformed)e(to)g
-Ft(")p Fj(M\015ops)p Ft(")g Fj(ev)n(en)g(though)g Ft(")p
-Fj(\015ops)p Ft(")f Fj(is)i(not)g(a)f(standard)f(FITS)i(unit)h(sym)n(b)
-r(ol\).)227 3035 y(A)c(range)e(of)h(common)g(non-standard)f(v)-5
-b(ariations)23 b(of)i(unit)g(names)f(and)g(m)n(ultiplier)h(pre\014xes)e
-(are)h(also)f(allo)n(w)n(ed,)227 3135 y(suc)n(h)28 b(as)f(adding)g(an)g
-Ft(")p Fj(s)p Ft(")g Fj(to)h(the)g(end)g(of)f(Angstrom,)g(using)h(a)f
-(lo)n(w)n(er)f(case)h Ft(")p Fj(a)p Ft(")f Fj(at)i(the)g(start)f(of)h
-Ft(")p Fj(angstrom)p Ft(")p Fj(,)227 3234 y Ft(")p Fj(micron)p
-Ft(")e Fj(instead)i(of)f Ft(")p Fj(um)p Ft(")p Fj(,)h
-Ft(")p Fj(sec)p Ft(")e Fj(instead)h(of)h Ft(")p Fj(s)p
-Ft(")p Fj(,)f(etc.)227 3360 y(If)22 b(the)f(Activ)n(eUnit)g(\015ag)f
-(is)h(non-zero,)g(setting)f(a)h(new)g(Unit)g(v)-5 b(alue)21
-b(for)f(an)h(axis)f(ma)n(y)g(also)f(c)n(hange)h(its)h(Lab)r(el)g(and)
-227 3459 y(Sym)n(b)r(ol)30 b(attributes.)45 b(F)-7 b(or)30
-b(instance,)g(if)h(an)f(axis)f(has)h(Unit)h Ft(")p Fj(Hz)p
-Ft(")f Fj(and)g(Lab)r(el)g Ft(")p Fj(frequency)p Ft(")p
-Fj(,)f(then)i(c)n(hanging)227 3559 y(its)j(Unit)g(to)g
-Ft(")p Fj(log\(Hz\))p Ft(")e Fj(will)i(c)n(hange)e(its)i(Lab)r(el)g(to)
-f Ft(")p Fj(log\()f(frequency)i(\))p Ft(")p Fj(.)54 b(In)34
-b(addition,)h(the)f(Axis)f(F)-7 b(ormat)227 3659 y(attribute)28
-b(will)g(b)r(e)g(cleared)e(when-ev)n(er)h(a)g(new)h(v)-5
-b(alue)27 b(is)h(assigned)e(to)h(the)h(Unit)h(attribute.)227
-3784 y(Note,)f(if)g(a)f(non-zero)f(v)-5 b(alue)28 b(is)f(set)h(for)f
-(the)h(Activ)n(eUnit)h(\015ag,)e(then)h(c)n(hanging)e(a)h(Unit)i(v)-5
-b(alue)27 b(for)g(the)h(curren)n(t)227 3884 y(F)-7 b(rame)29
-b(within)h(a)f(F)-7 b(rameSet)29 b(will)h(result)f(in)h(the)f(F)-7
-b(rame)29 b(b)r(eing)h(re-mapp)r(ed)e(\(that)i(is,)g(the)g(Mappings)f
-(whic)n(h)227 3984 y(de\014ne)d(the)f(relationships)f(b)r(et)n(w)n(een)
-i(F)-7 b(rames)24 b(within)i(the)f(F)-7 b(rameSet)25
-b(will)h(b)r(e)f(mo)r(di\014ed)h(to)f(tak)n(e)g(in)n(to)f(accoun)n(t)
-227 4083 y(the)k(c)n(hange)f(in)h(Units\).)0 4235 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetActiveUnit)o(\()37 b(AstFrame)k
-Fi(\003)p Ft(this,)g(int)h(value)g(\))0 4386 y Fd(P)m(arameters:)259
-4525 y(this)427 4624 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(F)-7
-b(rame.)259 4758 y Fd(v)i(alue)427 4858 y Fj(The)28 b(new)g(v)-5
-b(alue)27 b(to)h(use.)0 5022 y Fd(Class)j(Applicabilit)m(y:)259
-5161 y(SkyF)-8 b(rame)427 5260 y Fj(The)35 b(Activ)n(eUnit)g(\015ag)f
-(for)g(a)g(SkyF)-7 b(rame)34 b(is)h(alw)n(a)n(ys)e(0)h(\(an)n(y)g(v)-5
-b(alue)34 b(supplied)h(using)g(this)g(function)g(is)427
-5360 y(ignored\).)259 5494 y Fd(Sp)s(ecF)-8 b(rame)427
-5593 y Fj(The)33 b(Activ)n(eUnit)g(\015ag)e(for)h(a)g(Sp)r(ecF)-7
-b(rame)32 b(is)g(alw)n(a)n(ys)f(1)h(\(an)n(y)f(v)-5 b(alue)33
-b(supplied)f(using)g(this)h(function)g(is)427 5693 y(ignored\).)p
-eop end
-%%Page: 335 345
-TeXDict begin 335 344 bop 3643 52 a FF(335)259 351 y
-Fd(FluxF)-8 b(rame)427 451 y Fj(The)33 b(Activ)n(eUnit)g(\015ag)e(for)h
-(a)g(FluxF)-7 b(rame)32 b(is)h(alw)n(a)n(ys)d(1)i(\(an)n(y)g(v)-5
-b(alue)32 b(supplied)h(using)f(this)h(function)g(is)427
-551 y(ignored\).)259 683 y Fd(CmpF)-8 b(rame)427 783
-y Fj(The)27 b(default)h(Activ)n(eUnit)g(\015ag)e(for)h(a)f(CmpF)-7
-b(rame)27 b(is)g(1)g(if)h(b)r(oth)f(of)g(the)h(comp)r(onen)n(t)f(F)-7
-b(rames)26 b(are)g(using)427 882 y(activ)n(e)32 b(units,)i(and)e(zero)f
-(otherwise.)50 b(When)33 b(a)f(new)g(v)-5 b(alue)32 b(is)g(set)h(for)e
-(the)i(Activ)n(eUnit)g(\015ag,)g(the)f(\015ag)427 982
-y(v)-5 b(alue)39 b(is)f(propagated)f(to)h(the)h(comp)r(onen)n(t)f(F)-7
-b(rames.)69 b(This)39 b(c)n(hange)e(will)i(b)r(e)g(re\015ected)f
-(through)g(all)427 1082 y(references)27 b(to)g(the)h(comp)r(onen)n(t)g
-(F)-7 b(rames,)26 b(not)i(just)g(those)f(encapsulated)g(within)i(the)f
-(CmpF)-7 b(rame.)259 1214 y Fd(Region:)427 1314 y Fj(Regions)27
-b(alw)n(a)n(ys)f(use)h(activ)n(e)g(units)h(if)g(p)r(ossible.)0
-1475 y Fd(Notes:)340 1757 y Fi(\017)45 b Fj(The)28 b(Activ)n(eUnit)g
-(\015ag)f(resem)n(bles)f(a)h(F)-7 b(rame)27 b(attribute,)g(except)h
-(that)g(it)f(cannot)g(b)r(e)h(tested)g(or)f(cleared,)427
-1857 y(and)h(it)g(cannot)f(b)r(e)h(accessed)e(using)h(the)h(generic)f
-(astGet)p Fl(<)p Fj(X)p Fl(>)g Fj(and)g(astSet)p Fl(<)p
-Fj(X)p Fl(>)g Fj(functions.)340 1989 y Fi(\017)45 b Fj(The)32
-b(astGetActiv)n(eUnit)h(function)f(can)f(b)r(e)h(used)g(to)g(retriev)n
-(e)e(the)i(curren)n(t)f(v)-5 b(alue)32 b(of)g(the)g(Activ)n(eUnit)427
-2089 y(\015ag.)p 0 2288 3780 12 v 0 2419 a Fz(astSetFits)p
-Fc(<)p Fz(X)p Fc(>)340 b Fe(Store)37 b(a)i(k)m(eyw)m(ord)d(v)-7
-b(alue)39 b(in)f(a)1653 2534 y(FitsChan)2909 2419 y Fz(astSetFits)p
-Fc(<)p Fz(X)p Fc(>)0 2699 y Fd(Description:)44 b Fj(This)26
-b(is)f(a)h(family)f(of)h(functions)g(whic)n(h)f(store)g(v)-5
-b(alues)25 b(for)g(named)h(k)n(eyw)n(ords)d(within)k(a)e(FitsChan)h(at)
-227 2798 y(the)31 b(curren)n(t)f(card)g(p)r(osition.)46
-b(The)31 b(supplied)g(k)n(eyw)n(ord)d(v)-5 b(alue)31
-b(can)f(either)h(o)n(v)n(er-write)d(an)i(existing)g(k)n(eyw)n(ord)227
-2898 y(v)-5 b(alue,)28 b(or)f(can)g(b)r(e)h(inserted)f(as)g(a)g(new)h
-(header)f(card)f(in)n(to)i(the)g(FitsChan.)227 3022 y(The)f(k)n(eyw)n
-(ord)d(data)i(t)n(yp)r(e)h(is)f(selected)h(b)n(y)f(replacing)f
-Fl(<)p Fj(X)p Fl(>)h Fj(in)h(the)g(function)g(name)f(b)n(y)g(one)g(of)h
-(the)g(follo)n(wing)227 3122 y(strings)g(represen)n(ting)f(the)i
-(recognised)e(FITS)i(data)f(t)n(yp)r(es:)340 3382 y Fi(\017)45
-b Fj(CF)28 b(-)f(Complex)h(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alues.)340 3515 y Fi(\017)45 b Fj(CI)28 b(-)f(Complex)g(in)n(teger)g
-(v)-5 b(alues.)340 3647 y Fi(\017)45 b Fj(F)28 b(-)f(Floating)g(p)r
-(oin)n(t)h(v)-5 b(alues.)340 3780 y Fi(\017)45 b Fj(I)28
-b(-)f(In)n(teger)g(v)-5 b(alues.)340 3912 y Fi(\017)45
-b Fj(L)28 b(-)f(Logical)f(\(i.e.)38 b(b)r(o)r(olean\))27
-b(v)-5 b(alues.)340 4045 y Fi(\017)45 b Fj(S)28 b(-)f(String)h(v)-5
-b(alues.)340 4177 y Fi(\017)45 b Fj(CN)32 b(-)g(A)g Ft(")p
-Fj(CONTINUE)p Ft(")e Fj(v)-5 b(alue,)33 b(these)e(are)g(treated)g(lik)n
-(e)g(string)g(v)-5 b(alues,)33 b(but)f(are)f(enco)r(ded)g(without)427
-4277 y(an)d(equals)e(sign.)227 4438 y(The)i(data)f(t)n(yp)r(e)h(of)f
-(the)h Ft(")p Fj(v)-5 b(alue)p Ft(")27 b Fj(parameter)f(dep)r(ends)i
-(on)f Fl(<)p Fj(X)p Fl(>)h Fj(as)e(follo)n(ws:)340 4699
-y Fi(\017)45 b Fj(CF)28 b(-)g Ft(")p Fj(double)g Fi(\003)p
-Ft(")f Fj(\(a)g(p)r(oin)n(ter)h(to)g(a)f(2)h(elemen)n(t)g(arra)n(y)d
-(holding)j(the)g(real)f(and)h(imaginary)e(parts)h(of)h(the)427
-4798 y(complex)f(v)-5 b(alue\).)340 4931 y Fi(\017)45
-b Fj(CI)37 b(-)g Ft(")p Fj(in)n(t)g Fi(\003)p Ft(")f
-Fj(\(a)h(p)r(oin)n(ter)g(to)g(a)g(2)f(elemen)n(t)h(arra)n(y)e(holding)i
-(the)g(real)f(and)h(imaginary)f(parts)g(of)h(the)427
-5031 y(complex)27 b(v)-5 b(alue\).)340 5163 y Fi(\017)45
-b Fj(F)28 b(-)f Ft(")p Fj(double)p Ft(")p Fj(.)340 5296
-y Fi(\017)45 b Fj(I)28 b(-)f Ft(")p Fj(in)n(t)p Ft(")p
-Fj(.)340 5428 y Fi(\017)45 b Fj(L)28 b(-)f Ft(")p Fj(in)n(t)p
-Ft(")p Fj(.)340 5561 y Fi(\017)45 b Fj(S)28 b(-)f Ft(")p
-Fj(const)g(c)n(har)g Fi(\003)p Ft(")p Fj(.)340 5693 y
-Fi(\017)45 b Fj(CN)28 b(-)g Ft(")p Fj(const)e(c)n(har)h
-Fi(\003)p Ft(")p Fj(.)p eop end
-%%Page: 336 346
-TeXDict begin 336 345 bop 0 52 a FF(336)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetFits)p Fl(<)p Ft(X)p Fl(>)p Ft(\()c(AstFitsChan)h
-Fi(\003)p Ft(this,)i(const)g(char)h Fi(\003)p Ft(name,)f
-Fl(<)p Ft(X)p Fl(>)p Ft(type)g(value,)g(const)227 451
-y(char)h Fi(\003)p Ft(comment,)e(int)i(overwrite)e(\))0
-595 y Fd(P)m(arameters:)259 726 y(this)427 825 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 953 y Fd(name)427 1052 y Fj(P)n(oin)n(ter)f
-(to)i(a)f(n)n(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g
-(the)h(FITS)g(k)n(eyw)n(ord)e(name.)40 b(This)28 b(ma)n(y)427
-1152 y(b)r(e)i(a)f(complete)g(FITS)h(header)f(card,)g(in)g(whic)n(h)h
-(case)e(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g(extracted)g(from)g(it.)43
-b(No)427 1251 y(more)27 b(than)h(80)e(c)n(haracters)g(are)g(read)h
-(from)g(this)h(string.)259 1379 y Fd(v)-5 b(alue)427
-1478 y Fj(The)20 b(k)n(eyw)n(ord)d(v)-5 b(alue)19 b(to)g(store)g(with)h
-(the)f(named)h(k)n(eyw)n(ord.)32 b(The)19 b(data)g(t)n(yp)r(e)g(of)h
-(this)f(parameter)f(dep)r(ends)427 1578 y(on)28 b Fl(<)p
-Fj(X)p Fl(>)f Fj(as)g(describ)r(ed)g(ab)r(o)n(v)n(e.)259
-1705 y Fd(commen)m(t)427 1805 y Fj(A)e(p)r(oin)n(ter)e(to)h(a)g(n)n
-(ull)g(terminated)g(string)g(holding)f(a)h(commen)n(t)g(to)g(asso)r
-(ciated)f(with)h(the)h(k)n(eyw)n(ord.)34 b(If)24 b(a)427
-1905 y(NULL)f(p)r(oin)n(ter)g(or)f(a)g(blank)h(string)f(is)g(supplied,)
-j(then)e(an)n(y)f(commen)n(t)h(included)g(in)g(the)g(string)f(supplied)
-427 2004 y(for)h(the)h Ft(")p Fj(name)p Ft(")f Fj(parameter)f(is)h
-(used)h(instead.)35 b(If)24 b Ft(")p Fj(name)p Ft(")e
-Fj(con)n(tains)h(no)g(commen)n(t,)h(then)g(an)n(y)f(existing)427
-2104 y(commen)n(t)31 b(in)h(the)g(card)e(b)r(eing)h(o)n(v)n(er-written)
-f(is)h(retained.)47 b(Otherwise,)31 b(no)g(commen)n(t)h(is)f(stored)f
-(with)427 2203 y(the)e(card.)259 2331 y Fd(o)m(v)m(erwrite)427
-2430 y Fj(If)d(non-zero,)e(the)h(new)g(card)f(formed)h(from)g(the)g
-(supplied)g(k)n(eyw)n(ord)e(name,)j(v)-5 b(alue)24 b(and)f(commen)n(t)h
-(string)427 2530 y(o)n(v)n(er-writes)30 b(the)j(curren)n(t)f(card,)i
-(and)e(the)h(curren)n(t)f(card)g(is)h(incremen)n(ted)f(to)h(refer)f(to)
-g(the)i(next)e(card)427 2630 y(\(see)c(the)h Ft(")p Fj(Card)p
-Ft(")d Fj(attribute\).)39 b(If)29 b(zero,)e(the)h(new)h(card)e(is)h
-(inserted)g(in)g(fron)n(t)g(of)g(the)g(curren)n(t)g(card)f(and)427
-2729 y(the)j(curren)n(t)e(card)h(is)g(left)h(unc)n(hanged.)41
-b(In)30 b(either)f(case,)g(if)h(the)f(curren)n(t)g(card)f(on)h(en)n
-(try)g(p)r(oin)n(ts)g(to)g(the)427 2829 y Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(,)e(the)h(new)f(card)g(is)g(app)r(ended)h(to)g(the)g(end)g
-(of)f(the)h(list.)0 2985 y Fd(Notes:)340 3262 y Fi(\017)45
-b Fj(The)25 b(function)h(astSetFitsU)g(can)e(b)r(e)i(used)f(to)g
-(indicate)g(that)h(no)e(v)-5 b(alue)25 b(is)g(asso)r(ciated)f(with)i(a)
-e(k)n(eyw)n(ord.)340 3390 y Fi(\017)45 b Fj(The)34 b(function)g
-(astSetFitsCM)g(can)f(b)r(e)h(used)g(to)f(store)g(a)g(pure)g(commen)n
-(t)h(card)f(\(i.e.)55 b(a)33 b(card)g(with)h(a)427 3489
-y(blank)28 b(k)n(eyw)n(ord\).)340 3616 y Fi(\017)45 b
-Fj(T)-7 b(o)22 b(assign)e(a)i(new)g(v)-5 b(alue)21 b(for)h(an)f
-(existing)h(k)n(eyw)n(ord)d(within)k(a)e(FitsChan,)i(\014rst)f(\014nd)g
-(the)h(card)d(describing)427 3716 y(the)29 b(k)n(eyw)n(ord)e(using)h
-(astFindFits,)h(and)f(then)h(use)f(one)g(of)g(the)h(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)f Fj(family)h(to)f(o)n(v)n(er-write)427
-3816 y(the)g(old)g(v)-5 b(alue.)340 3943 y Fi(\017)45
-b Fj(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f(follo)n(wing)g
-(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)e(the)g(curren)
-n(t)427 4043 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e(at)h(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)340 4170 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)p
-0 4358 3780 12 v 0 4490 a Fz(astSetFitsCM)153 b Fe(Store)34
-b(a)h(commen)m(t)e(card)i(in)g(a)g(FitsChan)150 b Fz(astSetFitsCM)0
-4649 y Fd(Description:)44 b Fj(This)29 b(function)h(stores)e(a)g
-(commen)n(t)h(card)f(\()i(i.e.)41 b(a)28 b(card)g(with)i(no)f(k)n(eyw)n
-(ord)e(name)h(or)h(equals)f(sign\))227 4749 y(within)34
-b(a)f(FitsChan)g(at)g(the)h(curren)n(t)e(card)h(p)r(osition.)53
-b(The)34 b(new)f(card)f(can)h(either)g(o)n(v)n(er-write)e(an)i
-(existing)227 4848 y(card,)27 b(or)g(can)g(b)r(e)h(inserted)f(as)g(a)g
-(new)h(card)f(in)n(to)g(the)h(FitsChan.)0 4992 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetFitsCM\()c(AstFitsChan)h Fi(\003)p
-Ft(this,)i(const)h(char)g Fi(\003)p Ft(comment,)d(int)k(overwrite)d(\))
-0 5136 y Fd(P)m(arameters:)259 5267 y(this)427 5366 y
-Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259 5494 y
-Fd(commen)m(t)427 5593 y Fj(A)38 b(p)r(oin)n(ter)f(to)g(a)h(n)n(ull)f
-(terminated)h(string)e(holding)h(the)h(text)g(of)f(the)h(commen)n(t)g
-(card.)65 b(If)38 b(a)f(NULL)427 5693 y(p)r(oin)n(ter)27
-b(or)g(a)g(blank)h(string)f(is)g(supplied,)h(then)g(a)f(totally)h
-(blank)f(card)g(is)g(pro)r(duced.)p eop end
-%%Page: 337 347
-TeXDict begin 337 346 bop 3643 52 a FF(337)259 351 y
-Fd(o)m(v)m(erwrite)427 451 y Fj(If)31 b(non-zero,)f(the)i(new)f(card)e
-(o)n(v)n(er-writes)g(the)i(curren)n(t)f(card,)g(and)h(the)g(curren)n(t)
-f(card)g(is)h(incremen)n(ted)427 551 y(to)26 b(refer)f(to)h(the)h(next)
-f(card)f(\(see)h(the)g Ft(")p Fj(Card)p Ft(")f Fj(attribute\).)37
-b(If)26 b(zero,)f(the)i(new)f(card)f(is)h(inserted)g(in)g(fron)n(t)427
-650 y(of)h(the)g(curren)n(t)f(card)g(and)h(the)g(curren)n(t)f(card)g
-(is)g(left)i(unc)n(hanged.)35 b(In)27 b(either)g(case,)f(if)h(the)h
-(curren)n(t)d(card)427 750 y(on)j(en)n(try)f(p)r(oin)n(ts)g(to)h(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(,)e(the)i(new)g(card)e(is)i(app)r
-(ended)g(to)f(the)h(end)g(of)g(the)g(list.)0 957 y Fd(Notes:)340
-1284 y Fi(\017)45 b Fj(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f
-(follo)n(wing)g(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)
-e(the)g(curren)n(t)427 1384 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e
-(at)h(the)g Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)p 0
-1628 3780 12 v 0 1760 a Fz(astSetFitsU)221 b Fe(Store)38
-b(an)h(unde\014ned)g(k)m(eyw)m(ord)e(v)-7 b(alue)38 b(in)h(a)1653
-1874 y(FitsChan)3090 1760 y Fz(astSetFitsU)0 2085 y Fd(Description:)44
-b Fj(This)33 b(function)g(stores)e(an)h(unde\014ned)i(v)-5
-b(alue)32 b(for)g(a)g(named)g(k)n(eyw)n(ord)f(within)i(a)f(FitsChan)h
-(at)f(the)227 2185 y(curren)n(t)f(card)f(p)r(osition.)49
-b(The)31 b(new)h(unde\014ned)g(v)-5 b(alue)31 b(can)g(either)h(o)n(v)n
-(er-write)d(an)i(existing)g(k)n(eyw)n(ord)f(v)-5 b(alue,)227
-2284 y(or)27 b(can)g(b)r(e)h(inserted)g(as)e(a)i(new)f(header)g(card)g
-(in)n(to)g(the)h(FitsChan.)0 2479 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetFitsU\()c(AstFitsChan)h Fi(\003)p
-Ft(this,)i(const)h(char)g Fi(\003)p Ft(name,)f(const)g(char)h
-Fi(\003)p Ft(comment,)e(int)227 2578 y(overwrite)g(\))0
-2773 y Fd(P)m(arameters:)259 2954 y(this)427 3054 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(FitsChan.)259 3209 y Fd(name)427 3309 y
-Fj(P)n(oin)n(ter)f(to)i(a)f(n)n(ull-terminated)h(c)n(haracter)d(string)
-i(con)n(taining)g(the)h(FITS)g(k)n(eyw)n(ord)e(name.)40
-b(This)28 b(ma)n(y)427 3409 y(b)r(e)i(a)f(complete)g(FITS)h(header)f
-(card,)g(in)g(whic)n(h)h(case)e(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g
-(extracted)g(from)g(it.)43 b(No)427 3508 y(more)27 b(than)h(80)e(c)n
-(haracters)g(are)g(read)h(from)g(this)h(string.)259 3663
-y Fd(commen)m(t)427 3763 y Fj(A)d(p)r(oin)n(ter)e(to)h(a)g(n)n(ull)g
-(terminated)g(string)g(holding)f(a)h(commen)n(t)g(to)g(asso)r(ciated)f
-(with)h(the)h(k)n(eyw)n(ord.)34 b(If)24 b(a)427 3863
-y(NULL)f(p)r(oin)n(ter)g(or)f(a)g(blank)h(string)f(is)g(supplied,)j
-(then)e(an)n(y)f(commen)n(t)h(included)g(in)g(the)g(string)f(supplied)
-427 3962 y(for)h(the)h Ft(")p Fj(name)p Ft(")f Fj(parameter)f(is)h
-(used)h(instead.)35 b(If)24 b Ft(")p Fj(name)p Ft(")e
-Fj(con)n(tains)h(no)g(commen)n(t,)h(then)g(an)n(y)f(existing)427
-4062 y(commen)n(t)31 b(in)h(the)g(card)e(b)r(eing)h(o)n(v)n(er-written)
-f(is)h(retained.)47 b(Otherwise,)31 b(no)g(commen)n(t)h(is)f(stored)f
-(with)427 4162 y(the)e(card.)259 4317 y Fd(o)m(v)m(erwrite)427
-4417 y Fj(If)f(non-zero,)e(the)i(new)f(card)g(formed)g(from)g(the)g
-(supplied)h(k)n(eyw)n(ord)e(name)h(and)g(commen)n(t)g(string)g(o)n(v)n
-(er-)427 4516 y(writes)33 b(the)g(curren)n(t)g(card,)g(and)g(the)h
-(curren)n(t)e(card)g(is)h(incremen)n(ted)g(to)g(refer)g(to)g(the)g
-(next)g(card)g(\(see)427 4616 y(the)d Ft(")p Fj(Card)p
-Ft(")e Fj(attribute\).)42 b(If)30 b(zero,)f(the)g(new)h(card)e(is)i
-(inserted)f(in)g(fron)n(t)g(of)g(the)h(curren)n(t)f(card)f(and)h(the)
-427 4715 y(curren)n(t)37 b(card)f(is)h(left)h(unc)n(hanged.)65
-b(In)37 b(either)g(case,)i(if)f(the)g(curren)n(t)e(card)g(on)h(en)n
-(try)g(p)r(oin)n(ts)g(to)g(the)427 4815 y Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(,)27 b(the)h(new)f(card)g(is)g(app)r(ended)h(to)g(the)g(end)g
-(of)f(the)h(list.)0 5022 y Fd(Notes:)340 5350 y Fi(\017)45
-b Fj(If,)34 b(on)d(exit,)j(there)d(are)g(no)h(cards)f(follo)n(wing)g
-(the)h(card)f(written)h(b)n(y)g(this)g(function,)i(then)e(the)g(curren)
-n(t)427 5449 y(card)27 b(is)g(left)i(p)r(oin)n(ting)e(at)h(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)340 5605 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)p
-eop end
-%%Page: 338 348
-TeXDict begin 338 347 bop 0 52 a FF(338)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astSetRefP)l(os)354 b Fe(Set)39 b(the)f(reference)g(p)s
-(osition)f(in)i(a)970 598 y(sp)s(eci\014ed)g(celestial)e(co)s(ordinate)
-f(system)3009 483 y Fz(astSetRefP)l(os)0 844 y Fd(Description:)44
-b Fj(This)22 b(function)f(sets)h(the)f(reference)g(p)r(osition)g(\(see)
-g(attributes)g(RefRA)h(and)f(RefDec\))i(using)e(axis)f(v)-5
-b(al-)227 943 y(ues)19 b(\(in)h(radians\))e(supplied)i(within)g(the)f
-(celestial)g(co)r(ordinate)f(system)h(represen)n(ted)f(b)n(y)h(a)g
-(supplied)g(SkyF)-7 b(rame.)0 1145 y Fd(Synopsis:)121
-b Ft(void)42 b(astSetRefPos\()c(AstSpecFrame)h Fi(\003)p
-Ft(this,)i(AstSkyFrame)e Fi(\003)p Ft(frm,)i(double)g(lon,)h(double)f
-(lat)227 1245 y(\))0 1447 y Fd(P)m(arameters:)259 1636
-y(this)427 1735 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)259 1894 y Fd(frm)427 1994 y Fj(P)n(oin)n(ter)23
-b(to)i(the)g(SkyF)-7 b(rame)24 b(whic)n(h)g(de\014nes)h(the)g
-(celestial)f(co)r(ordinate)g(system)g(in)h(whic)n(h)g(the)g(longitude)
-427 2094 y(and)20 b(latitude)g(v)-5 b(alues)19 b(are)g(supplied.)34
-b(If)20 b(NULL)g(is)g(supplied,)h(then)f(the)g(supplied)g(longitude)g
-(and)f(latitude)427 2193 y(v)-5 b(alues)27 b(are)g(assumed)g(to)h(b)r
-(e)g(FK5)f(J2000)e(RA)j(and)f(Dec)h(v)-5 b(alues.)259
-2352 y Fd(lon)427 2452 y Fj(The)33 b(longitude)g(of)f(the)h(reference)f
-(p)r(oin)n(t,)i(in)f(the)g(co)r(ordinate)f(system)g(represen)n(ted)g(b)
-n(y)g(the)h(supplied)427 2552 y(SkyF)-7 b(rame)27 b(\(radians\).)259
-2711 y Fd(lat)427 2810 y Fj(The)37 b(latitude)h(of)e(the)i(reference)e
-(p)r(oin)n(t,)j(in)e(the)g(co)r(ordinate)f(system)h(represen)n(ted)e(b)
-n(y)i(the)g(supplied)427 2910 y(SkyF)-7 b(rame)27 b(\(radians\).)p
-0 3162 V 0 3293 a Fz(astSetStatus)894 3294 y Fe(Set)39
-b(the)f(AST)h(error)e(status)h(to)g(an)g(explicit)1758
-3408 y(v)-7 b(alue)3048 3293 y Fz(astSetStatus)0 3626
-y Fd(Description:)44 b Fj(This)26 b(function)f(sets)g(the)h(AST)g
-(error)d(status)i(to)g(the)g(v)-5 b(alue)26 b(supplied.)36
-b(It)26 b(do)r(es)e(not)i(cause)e(an)n(y)h(error)227
-3726 y(message)j(to)i(b)r(e)f(pro)r(duced)g(and)h(should)f(not)g(b)r(e)
-h(used)f(as)g(part)g(of)g(normal)g(error)e(rep)r(orting.)41
-b(Its)30 b(purp)r(ose)f(is)227 3826 y(simply)f(to)f(comm)n(unicate)g
-(to)h(AST)g(that)g(an)f(error)f(has)h(o)r(ccurred)f(in)i(some)f(other)g
-(item)h(of)g(soft)n(w)n(are.)227 3976 y(F)-7 b(or)37
-b(example,)i(a)d(source)g(or)g(sink)h(function)h(supplied)f(as)g(an)f
-(argumen)n(t)g(to)h(astChannel)g(or)f(astFitsChan)227
-4076 y(migh)n(t)g(use)g(this)g(to)g(signal)e(that)j(an)e(input/output)i
-(error)d(has)h(o)r(ccurred.)60 b(AST)37 b(could)e(then)i(resp)r(ond)e
-(b)n(y)227 4176 y(terminating)28 b(the)f(curren)n(t)g(read)g(or)g
-(write)g(op)r(eration.)0 4378 y Fd(Synopsis:)121 b Ft(void)42
-b(astSetStatus\()c(int)k(status_value)d(\))0 4580 y Fd(P)m(arameters:)
-259 4769 y(status)p Ft(_)p Fd(v)-5 b(alue)427 4868 y
-Fj(The)28 b(new)g(error)d(status)j(v)-5 b(alue)27 b(to)h(b)r(e)g(set.)0
-5083 y Fd(Notes:)340 5418 y Fi(\017)45 b Fj(If)26 b(the)g(AST)g(error)d
-(status)i(is)g(set)h(to)f(an)g(error)f(v)-5 b(alue,)25
-b(most)g(AST)h(functions)g(will)g(not)f(execute)g(and)g(will)427
-5517 y(simply)34 b(return)f(without)h(action.)53 b(T)-7
-b(o)34 b(clear)e(the)i(error)d(status)i(and)h(restore)e(normal)g(b)r
-(eha)n(viour,)i(use)427 5617 y(astClearStatus.)p eop
-end
-%%Page: 339 349
-TeXDict begin 339 348 bop 3643 52 a FF(339)p 0 351 3780
-12 v 0 482 a Fz(astSetUnc)816 483 y Fe(Store)38 b(uncertain)m(t)m(y)e
-(information)f(in)j(a)h(Region)3183 482 y Fz(astSetUnc)0
-672 y Fd(Description:)44 b Fj(Eac)n(h)33 b(Region)h(\(of)g(an)n(y)g
-(class\))f(can)h(ha)n(v)n(e)f(an)h Ft(")p Fj(uncertain)n(t)n(y)p
-Ft(")e Fj(whic)n(h)j(sp)r(eci\014es)f(the)g(uncertain)n(ties)227
-772 y(asso)r(ciated)27 b(with)i(the)g(b)r(oundary)e(of)h(the)h(Region.)
-38 b(This)29 b(information)e(is)h(supplied)h(in)g(the)f(form)g(of)g(a)g
-(second)227 871 y(Region.)77 b(The)41 b(uncertain)n(t)n(y)f(in)h(an)n
-(y)f(p)r(oin)n(t)i(on)e(the)i(b)r(oundary)e(of)h(a)g(Region)f(is)h
-(found)g(b)n(y)g(shifting)g(the)227 971 y(asso)r(ciated)24
-b Ft(")p Fj(uncertain)n(t)n(y)p Ft(")g Fj(Region)g(so)h(that)h(it)f(is)
-g(cen)n(tred)g(at)g(the)h(b)r(oundary)f(p)r(oin)n(t)g(b)r(eing)g
-(considered.)36 b(The)227 1070 y(area)c(co)n(v)n(ered)g(b)n(y)h(the)h
-(shifted)g(uncertain)n(t)n(y)f(Region)g(then)h(represen)n(ts)e(the)i
-(uncertain)n(t)n(y)f(in)g(the)h(b)r(oundary)227 1170
-y(p)r(osition.)j(The)28 b(uncertain)n(t)n(y)e(is)i(assumed)f(to)g(b)r
-(e)h(the)g(same)f(for)g(all)h(p)r(oin)n(ts.)227 1293
-y(The)j(uncertain)n(t)n(y)e(is)i(usually)f(sp)r(eci\014ed)h(when)f(the)
-h(Region)f(is)g(created,)h(but)g(this)g(function)g(allo)n(ws)e(it)i(to)
-f(b)r(e)227 1393 y(c)n(hanged)d(at)g(an)n(y)g(time.)0
-1540 y Fd(Synopsis:)121 b Ft(void)42 b(astSetUnc\()d(AstRegion)h
-Fi(\003)p Ft(this,)h(AstRegion)f Fi(\003)p Ft(unc)i(\))0
-1687 y Fd(P)m(arameters:)259 1822 y(this)427 1921 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region)f(whic)n(h)g(is)h(to)f(b)r(e)h(assigned)e(a)i(new)f
-(uncertain)n(t)n(y)-7 b(.)259 2052 y Fd(unc)427 2151
-y Fj(P)n(oin)n(ter)39 b(to)i(the)f(new)h(uncertain)n(t)n(y)f(Region.)74
-b(This)41 b(m)n(ust)g(b)r(e)f(of)h(a)f(class)g(for)f(whic)n(h)i(all)f
-(instances)427 2251 y(are)27 b(cen)n(tro-symetric)e(\(e.g.)37
-b(Bo)n(x,)26 b(Circle,)i(Ellipse,)f(etc.\))37 b(or)27
-b(b)r(e)g(a)g(Prism)g(con)n(taining)g(cen)n(tro-symetric)427
-2351 y(comp)r(onen)n(t)c(Regions.)34 b(A)24 b(deep)f(cop)n(y)f(of)h
-(the)g(supplied)g(Region)f(will)i(b)r(e)f(tak)n(en,)g(so)f(subsequen)n
-(t)h(c)n(hanges)427 2450 y(to)f(the)h(uncertain)n(t)n(y)e(Region)g
-(using)h(the)g(supplied)h(p)r(oin)n(ter)e(will)h(ha)n(v)n(e)f(no)h
-(e\013ect)h(on)e(the)i(Region)e Ft(")p Fj(this)p Ft(")p
-Fj(.)p 0 2645 V 0 2777 a Fz(astShiftMap)697 b Fe(Create)37
-b(a)i(ShiftMap)695 b Fz(astShiftMap)0 2961 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(ShiftMap)i(and)e
-(optionally)g(initialises)g(its)h(attributes.)227 3085
-y(A)g(ShiftMap)h(is)e(a)g(linear)g(Mapping)g(whic)n(h)h(shifts)g(eac)n
-(h)f(axis)f(b)n(y)i(a)f(sp)r(eci\014ed)h(constan)n(t)f(v)-5
-b(alue.)0 3232 y Fd(Synopsis:)121 b Ft(AstShiftMap)39
-b Fi(\003)p Ft(astShiftMap\()f(int)k(ncoord,)f(const)h(double)f
-(shift[],)f(const)h(char)h Fi(\003)p Ft(options,)227
-3331 y(...)86 b(\))0 3479 y Fd(P)m(arameters:)259 3613
-y(nco)s(ord)427 3712 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)
-h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-3812 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 3912 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 4042 y Fd(shift)427 4142 y Fj(An)d(arra)n(y)e(con)n(taining)g
-(the)i(v)-5 b(alues)24 b(to)h(b)r(e)g(added)f(on)g(to)h(the)g(input)g
-(co)r(ordinates)e(in)i(order)e(to)i(create)e(the)427
-4241 y(output)28 b(co)r(ordinates.)36 b(A)28 b(separate)e(v)-5
-b(alue)27 b(should)h(b)r(e)g(supplied)g(for)f(eac)n(h)g(co)r(ordinate.)
-259 4372 y Fd(options)427 4472 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4571 y(assignmen)n(ts)23
-b(to)h(b)r(e)g(used)g(for)f(initialising)h(the)g(new)g(ShiftMap.)36
-b(The)24 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-4671 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4770 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4901
-y Fd(...)427 5001 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5100 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5200 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5300 y Fj(function\).)0 5459
-y Fd(Returned)32 b(V)-8 b(alue:)259 5593 y(astShiftMap\(\))427
-5693 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(ShiftMap.)p
-eop end
-%%Page: 340 350
-TeXDict begin 340 349 bop 0 52 a FF(340)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-656 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-756 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 941 y Fd(Status)33 b(Handling)n(:)227
-1087 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 1186 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1286 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1508 3780
-12 v 0 1640 a Fz(astSho)l(w)165 b Fe(Displa)m(y)37 b(a)i(textual)e
-(represen)m(tation)f(of)i(an)g(Ob)7 b(ject)38 b(on)1473
-1754 y(standard)g(output)3299 1640 y Fz(astSho)l(w)0
-1966 y Fd(Description:)44 b Fj(This)27 b(function)g(displa)n(ys)f(a)g
-(textual)g(description)g(of)h(an)n(y)f(AST)h(Ob)5 b(ject)26
-b(on)g(standard)g(output.)37 b(It)27 b(is)227 2065 y(pro)n(vided)g
-(primarily)f(as)h(an)h(aid)f(to)g(debugging.)0 2238 y
-Fd(Synopsis:)121 b Ft(void)42 b(astShow\()e(AstObject)g
-Fi(\003)p Ft(this)h(\))0 2410 y Fd(P)m(arameters:)259
-2569 y(this)427 2668 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject)27 b(to)h(b)r(e)g(displa)n(y)n(ed.)0 2853 y Fd(Class)j
-(Applicabilit)m(y:)259 3012 y(Ob)5 b(ject)427 3112 y
-Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5 b(jects.)p
-0 3334 V 0 3465 a Fz(astSho)l(wMesh)231 b Fe(Displa)m(y)38
-b(a)g(mesh)h(of)f(p)s(oin)m(ts)g(co)m(v)m(ering)1300
-3580 y(the)h(surface)f(of)g(a)h(Region)2982 3465 y Fz(astSho)l(wMesh)0
-3791 y Fd(Description:)44 b Fj(This)32 b(function)g(writes)f(a)g(table)
-g(to)g(standard)g(output)h(con)n(taining)e(the)i(axis)f(v)-5
-b(alues)31 b(at)g(a)g(mesh)h(of)227 3891 y(p)r(oin)n(ts)f(co)n(v)n
-(ering)e(the)j(surface)e(of)h(the)h(supplied)g(Region.)47
-b(Eac)n(h)29 b(ro)n(w)h(of)i(output)f(con)n(tains)g(a)f(tab-separated)
-227 3991 y(list)36 b(of)f(axis)f(v)-5 b(alues,)37 b(one)e(for)g(eac)n
-(h)f(axis)h(in)g(the)h(F)-7 b(rame)35 b(encapsulated)f(b)n(y)h(the)h
-(Region.)59 b(The)36 b(n)n(um)n(b)r(er)f(of)227 4090
-y(p)r(oin)n(ts)28 b(in)g(the)g(mesh)f(is)h(determined)g(b)n(y)f(the)h
-(MeshSize)f(attribute.)227 4226 y(The)33 b(table)g(is)g(preceeded)g(b)n
-(y)f(a)h(giv)n(en)f(title)i(string,)g(and)e(follo)n(w)n(ed)g(b)n(y)h(a)
-g(single)f(line)h(con)n(taining)f(the)i(w)n(ord)227 4326
-y Ft(")p Fj(ENDMESH)p Ft(")p Fj(.)0 4498 y Fd(Synopsis:)121
-b Ft(void)42 b(astShowMesh\()c(AstRegion)i Fi(\003)p
-Ft(this,)h(int)i(format,)d(const)i(char)g Fi(\003)p Ft(ttl)g(\))0
-4670 y Fd(P)m(arameters:)259 4829 y(this)427 4929 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Region.)259 5073 y Fd(format)427 5173 y
-Fj(A)g(b)r(o)r(olean)f(v)-5 b(alue)28 b(indicating)g(if)g(the)g(displa)
-n(y)n(ed)e(axis)h(v)-5 b(alues)28 b(should)f(b)r(e)h(formatted)g
-(according)e(to)h(the)427 5272 y(F)-7 b(ormat)30 b(attribute)g(asso)r
-(ciated)e(with)j(the)f(F)-7 b(rame's)29 b(axis.)43 b(Otherwise,)30
-b(they)g(are)f(displa)n(y)n(ed)g(as)g(simple)427 5372
-y(\015oating)e(p)r(oin)n(t)h(v)-5 b(alues.)259 5516 y
-Fd(ttl)427 5616 y Fj(A)28 b(title)g(to)g(displa)n(y)f(b)r(efore)g
-(displa)n(ying)g(the)h(\014rst)f(p)r(osition.)p eop end
-%%Page: 341 351
-TeXDict begin 341 350 bop 3643 52 a FF(341)p 0 351 3780
-12 v 0 483 a Fz(astSimplify)729 b Fe(Simplify)37 b(a)h(Mapping)727
-b Fz(astSimplify)0 678 y Fd(Description:)44 b Fj(This)h(function)g
-(simpli\014es)g(a)f(Mapping)g(\(whic)n(h)h(ma)n(y)e(b)r(e)i(a)f(comp)r
-(ound)h(Mapping)f(suc)n(h)g(as)g(a)227 778 y(CmpMap\))32
-b(to)g(eliminate)f(redundan)n(t)h(computational)e(steps,)j(or)e(to)g
-(merge)g(separate)f(steps)h(whic)n(h)h(can)f(b)r(e)227
-878 y(p)r(erformed)c(more)g(e\016cien)n(tly)h(in)g(a)f(single)g(op)r
-(eration.)227 1003 y(As)e(a)g(simple)g(example,)h(a)e(Mapping)h(whic)n
-(h)g(m)n(ultiplied)h(co)r(ordinates)e(b)n(y)h(5,)g(and)g(then)h(m)n
-(ultiplied)f(the)h(result)227 1103 y(b)n(y)35 b(10,)g(could)g(b)r(e)g
-(simpli\014ed)g(to)f(a)h(single)f(step)h(whic)n(h)f(m)n(ultiplied)i(b)n
-(y)e(50.)57 b(Similarly)-7 b(,)36 b(a)e(Mapping)h(whic)n(h)227
-1202 y(m)n(ultiplied)29 b(b)n(y)e(5,)g(and)h(then)g(divided)g(b)n(y)f
-(5,)g(could)h(b)r(e)g(reduced)f(to)g(a)g(simple)h(cop)n(ying)f(op)r
-(eration.)227 1328 y(This)21 b(function)h(should)f(t)n(ypically)g(b)r
-(e)g(applied)h(to)f(Mappings)f(whic)n(h)h(ha)n(v)n(e)f(undergone)h
-(substan)n(tial)f(pro)r(cessing)227 1428 y(or)i(ha)n(v)n(e)f(b)r(een)i
-(formed)f(b)n(y)g(merging)f(other)h(Mappings.)35 b(It)22
-b(is)h(of)f(p)r(oten)n(tial)g(b)r(ene\014t,)j(for)d(example,)h(in)f
-(reducing)227 1527 y(execution)28 b(time)g(if)g(applied)f(b)r(efore)h
-(using)f(a)g(Mapping)g(to)h(transform)e(a)h(large)g(n)n(um)n(b)r(er)g
-(of)g(co)r(ordinates.)0 1679 y Fd(Synopsis:)121 b Ft(AstMapping)39
-b Fi(\003)p Ft(astSimplify\()f(AstMapping)i Fi(\003)p
-Ft(this)h(\))0 1830 y Fd(P)m(arameters:)259 1969 y(this)427
-2068 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(original)e(Mapping.)0
-2232 y Fd(Class)31 b(Applicabilit)m(y:)259 2371 y(Mapping)427
-2470 y Fj(This)d(function)g(applies)f(to)h(all)f(Mappings.)259
-2604 y Fd(F)-8 b(rameSet)427 2704 y Fj(If)29 b(the)f(supplied)g
-(Mapping)g(is)f(a)h(F)-7 b(rameSet,)28 b(the)g(returned)g(Mapping)f
-(will)h(b)r(e)h(a)e(cop)n(y)g(of)h(the)g(supplied)427
-2804 y(F)-7 b(rameSet)28 b(in)g(whic)n(h)f(all)g(the)h(in)n(ter-F)-7
-b(rame)27 b(Mappings)g(ha)n(v)n(e)f(b)r(een)i(simpli\014ed.)0
-2967 y Fd(Returned)k(V)-8 b(alue:)259 3106 y(astSimplify\(\))427
-3206 y Fj(A)28 b(new)g(p)r(oin)n(ter)f(to)h(the)g(\(p)r(ossibly)f
-(simpli\014ed\))h(Mapping.)0 3369 y Fd(Notes:)340 3654
-y Fi(\017)45 b Fj(This)39 b(function)g(can)g(safely)f(b)r(e)h(applied)g
-(ev)n(en)f(to)h(Mappings)f(whic)n(h)h(cannot)f(b)r(e)i(simpli\014ed.)71
-b(If)39 b(no)427 3754 y(simpli\014cation)22 b(is)h(p)r(ossible,)g(it)g
-(b)r(eha)n(v)n(es)e(exactly)h(lik)n(e)g(astClone)f(and)i(returns)e(a)h
-(p)r(oin)n(ter)g(to)g(the)h(original)427 3853 y(Mapping.)340
-3987 y Fi(\017)45 b Fj(The)40 b(Mapping)g(returned)g(b)n(y)g(this)g
-(function)h(ma)n(y)e(not)h(b)r(e)h(indep)r(enden)n(t)g(of)f(the)h
-(original)d(\(ev)n(en)i(if)427 4087 y(simpli\014cation)34
-b(w)n(as)e(p)r(ossible\),)j(and)f(mo)r(difying)f(it)i(ma)n(y)d
-(therefore)h(result)g(in)h(indirect)g(mo)r(di\014cation)427
-4186 y(of)29 b(the)h(original.)40 b(If)30 b(a)f(completely)g(indep)r
-(enden)n(t)h(result)f(is)g(required,)g(a)g(cop)n(y)f(should)h(b)r(e)h
-(made)f(using)427 4286 y(astCop)n(y)-7 b(.)340 4420 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 4520
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 4721 V 0 4853 a Fz(astSkyF)-11
-b(rame)644 b Fe(Create)37 b(a)i(SkyF)-10 b(rame)642 b
-Fz(astSkyF)-11 b(rame)0 5043 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(SkyF)-7 b(rame)27 b(and)h(optionally)e
-(initialises)i(its)f(attributes.)227 5169 y(A)h(SkyF)-7
-b(rame)26 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h(F)-7
-b(rame)27 b(whic)n(h)f(describ)r(es)h(celestial)f(longitude/latitude)h
-(co)r(ordinate)227 5269 y(systems.)53 b(The)33 b(particular)f
-(celestial)h(co)r(ordinate)f(system)h(to)g(b)r(e)g(represen)n(ted)f(is)
-h(sp)r(eci\014ed)g(b)n(y)g(setting)g(the)227 5368 y(SkyF)-7
-b(rame's)33 b(System)g(attribute)h(\(curren)n(tly)-7
-b(,)34 b(the)g(default)g(is)f(ICRS\))h(quali\014ed,)h(as)d(necessary)-7
-b(,)34 b(b)n(y)f(a)g(mean)227 5468 y(Equino)n(x)27 b(v)-5
-b(alue)27 b(and/or)f(an)h(Ep)r(o)r(c)n(h.)227 5593 y(F)-7
-b(or)28 b(eac)n(h)f(of)g(the)i(supp)r(orted)e(celestial)h(co)r
-(ordinate)e(systems,)i(a)f(SkyF)-7 b(rame)27 b(can)h(apply)f(an)h
-(optional)f(shift)i(of)227 5693 y(origin)21 b(to)h(create)f(a)h(co)r
-(ordinate)f(system)h(represen)n(ting)e(o\013sets)i(within)h(the)g
-(celestial)e(co)r(ordinate)g(system)h(from)p eop end
-%%Page: 342 352
-TeXDict begin 342 351 bop 0 52 a FF(342)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(some)j(sp)r(eci\014ed)h
-(p)r(oin)n(t.)55 b(This)34 b(o\013set)f(co)r(ordinate)g(system)g(can)g
-(also)g(b)r(e)h(rotated)f(to)g(de\014ne)h(new)g(longitude)227
-451 y(and)28 b(latitude)g(axes.)36 b(See)27 b(attributes)h(SkyRef,)g
-(SkyRefIs)f(and)h(SkyRefP)227 571 y(All)34 b(the)f(co)r(ordinate)f(v)-5
-b(alues)33 b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g
-(radians.)52 b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-670 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n(y)
-g(using)g(astF)-7 b(ormat.)0 811 y Fd(Synopsis:)121 b
-Ft(AstSkyFrame)39 b Fi(\003)p Ft(astSkyFrame\()f(const)k(char)f
-Fi(\003)p Ft(options,)f(...)86 b(\))0 951 y Fd(P)m(arameters:)259
-1078 y(options)427 1177 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 1277 y(assignmen)n(ts)21
-b(to)h(b)r(e)h(used)f(for)g(initialising)g(the)g(new)g(SkyF)-7
-b(rame.)35 b(The)22 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)g(that)
-427 1377 y(for)k(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1476 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 1600 y Fd(...)427 1699 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 1799 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 1899 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 1998 y Fj(function\).)0
-2151 y Fd(Returned)32 b(V)-8 b(alue:)259 2278 y(astSkyF)g(rame\(\))427
-2378 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(SkyF)-7
-b(rame.)0 2530 y Fd(Examples:)227 2658 y Fq(frame)47
-b(=)g(astSkyFrame\()e Ft("")h Fq(\);)427 2757 y Fj(Creates)27
-b(a)g(SkyF)-7 b(rame)27 b(to)g(describ)r(e)g(the)h(default)h(ICRS)e
-(celestial)g(co)r(ordinate)g(system.)227 2881 y Fq(frame)47
-b(=)g(astSkyFrame\()e Ft(")p Fq(System)g(=)j(FK5,)e(Equinox)g(=)i
-(J2005,)e(Digits)g(=)h(10)p Ft(")g Fq(\);)427 2980 y
-Fj(Creates)23 b(a)g(SkyF)-7 b(rame)23 b(to)h(describ)r(e)f(the)h(FK5)f
-(celestial)g(co)r(ordinate)g(system,)h(with)g(a)g(mean)f(Equino)n(x)g
-(of)427 3080 y(J2005.0.)33 b(Because)23 b(esp)r(ecially)g(accurate)f
-(co)r(ordinates)g(will)i(b)r(e)g(used,)g(additional)f(precision)g(\(10)
-f(digits\))427 3179 y(has)27 b(b)r(een)h(requested.)37
-b(This)27 b(will)h(b)r(e)g(used)g(when)f(co)r(ordinate)g(v)-5
-b(alues)27 b(are)g(formatted)g(for)g(displa)n(y)-7 b(.)227
-3304 y Fq(frame)47 b(=)g(astSkyFrame\()e Ft(")p Fq(System)g(=)j(FK4,)e
-(Equinox)g(=)i(1955-sep-2)p Ft(")c Fq(\);)427 3402 y
-Fj(Creates)32 b(a)g(SkyF)-7 b(rame)31 b(to)i(describ)r(e)f(the)h(old)f
-(FK4)g(celestial)g(co)r(ordinate)f(system.)51 b(A)33
-b(default)g(Ep)r(o)r(c)n(h)427 3502 y(v)-5 b(alue)28
-b(\(B1950.0\))d(is)j(used,)g(but)g(the)g(mean)f(Equino)n(x)f(v)-5
-b(alue)28 b(is)f(giv)n(en)g(explicitly)h(as)f Ft(")p
-Fj(1955-sep-2)p Ft(")p Fj(.)227 3626 y Fq(frame)47 b(=)g(astSkyFrame\()
-e Ft(")p Fq(System)g(=)j(GAPPT,)e(Epoch)g(=)i(\045s)p
-Ft(")p Fq(,)e(date)h(\);)427 3725 y Fj(Creates)32 b(a)h(SkyF)-7
-b(rame)32 b(to)h(describ)r(e)f(the)i(Geo)r(cen)n(tric)e(Apparen)n(t)h
-(celestial)f(co)r(ordinate)g(system.)53 b(The)427 3825
-y(Ep)r(o)r(c)n(h)37 b(v)-5 b(alue,)39 b(whic)n(h)e(sp)r(eci\014es)g
-(the)g(date)g(of)g(observ)-5 b(ation,)38 b(is)f(obtained)f(from)h(a)f
-(date/time)h(string)427 3924 y(supplied)28 b(via)f(the)h(string)f(p)r
-(oin)n(ter)g Ft(")p Fj(date)p Ft(")p Fj(.)0 4077 y Fd(Notes:)340
-4350 y Fi(\017)45 b Fj(Curren)n(tly)-7 b(,)26 b(the)g(default)h
-(celestial)e(co)r(ordinate)g(system)g(is)h(ICRS.)h(Ho)n(w)n(ev)n(er,)d
-(this)i(default)h(ma)n(y)e(c)n(hange)427 4450 y(in)34
-b(future)g(as)f(new)h(astrometric)e(standards)g(ev)n(olv)n(e.)54
-b(The)33 b(in)n(ten)n(tion)h(is)g(to)f(trac)n(k)f(the)i(most)g(mo)r
-(dern)427 4549 y(appropriate)e(standard.)55 b(F)-7 b(or)33
-b(this)h(reason,)g(y)n(ou)f(should)g(use)h(the)g(default)g(only)g(if)g
-(this)g(is)g(what)f(y)n(ou)427 4649 y(in)n(tend)j(\(and)f(can)f
-(tolerate)g(an)n(y)g(asso)r(ciated)g(sligh)n(t)g(c)n(hange)g(in)h(b)r
-(eha)n(viour)f(with)h(future)h(v)n(ersions)d(of)427 4749
-y(this)d(function\).)43 b(If)30 b(y)n(ou)e(in)n(tend)i(to)f(use)g(the)h
-(ICRS)f(system)h(inde\014nitely)-7 b(,)30 b(then)g(y)n(ou)e(should)i
-(sp)r(ecify)f(it)427 4848 y(explicitly)f(using)f(an)h
-Ft(")p Fj(options)p Ft(")e Fj(v)-5 b(alue)27 b(of)h Ft(")p
-Fj(System=ICRS)p Ft(")p Fj(.)340 4972 y Fi(\017)45 b
-Fj(Whic)n(hev)n(er)25 b(celestial)g(co)r(ordinate)f(system)h(is)g
-(represen)n(ted,)g(it)h(will)g(ha)n(v)n(e)e(t)n(w)n(o)g(axes.)36
-b(The)25 b(\014rst)g(of)h(these)427 5071 y(will)f(b)r(e)f(the)h
-(longitude)f(axis)g(and)g(the)h(second)e(will)i(b)r(e)f(the)h(latitude)
-g(axis.)35 b(This)24 b(order)f(can)h(b)r(e)h(c)n(hanged)427
-5171 y(using)j(astP)n(ermAxes)d(if)j(required.)340 5295
-y Fi(\017)45 b Fj(When)40 b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)i(t)n
-(w)n(o)g(SkyF)-7 b(rames)38 b(is)h(requested)g(\(as)g(when)g(supplying)
-g(SkyF)-7 b(rames)39 b(to)427 5394 y(astCon)n(v)n(ert\),)h(accoun)n(t)d
-(will)i(b)r(e)g(tak)n(en)f(of)g(the)h(nature)f(of)g(the)h(celestial)f
-(co)r(ordinate)f(systems)h(they)427 5494 y(represen)n(t,)22
-b(together)g(with)h(an)n(y)e(qualifying)h(mean)g(Equino)n(x)f(or)g(Ep)r
-(o)r(c)n(h)h(v)-5 b(alues,)23 b(etc.)35 b(The)22 b(AlignSystem)427
-5593 y(attribute)d(will)h(also)e(b)r(e)h(tak)n(en)f(in)n(to)h(accoun)n
-(t.)33 b(The)19 b(results)g(will)g(therefore)f(fully)h(re\015ect)g(the)
-g(relationship)427 5693 y(b)r(et)n(w)n(een)28 b(p)r(ositions)f(on)g
-(the)h(sky)f(measured)g(in)h(the)g(t)n(w)n(o)f(systems.)p
-eop end
-%%Page: 343 353
-TeXDict begin 343 352 bop 3643 52 a FF(343)340 351 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 451
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 654 3780 12 v 0 785 a Fz(astSlaAdd)186
-b Fe(Add)39 b(a)g(celestial)d(co)s(ordinate)h(con)m(v)m(ersion)g(to)h
-(an)1696 885 y(SlaMap)3180 785 y Fz(astSlaAdd)0 1077
-y Fd(Description:)44 b Fj(This)31 b(function)g(adds)f(one)h(of)f(the)h
-(standard)f(celestial)g(co)r(ordinate)f(system)i(con)n(v)n(ersions)d
-(pro)n(vided)227 1177 y(b)n(y)23 b(the)f(SLALIB)h(P)n(ositional)e
-(Astronom)n(y)g(Library)g(\(Starlink)h(User)h(Note)f(SUN/67\))g(to)h
-(an)f(existing)g(SlaMap.)227 1303 y(When)27 b(an)f(SlaMap)g(is)g
-(\014rst)g(created)g(\(using)g(astSlaMap\),)g(it)h(simply)f(p)r
-(erforms)g(a)g(unit)h(\(n)n(ull\))g(Mapping.)36 b(By)227
-1403 y(using)c(astSlaAdd)g(\(rep)r(eatedly)g(if)h(necessary\),)f(one)f
-(or)h(more)f(co)r(ordinate)g(con)n(v)n(ersion)f(steps)i(ma)n(y)g(then)g
-(b)r(e)227 1502 y(added,)k(whic)n(h)f(the)f(SlaMap)g(will)h(p)r(erform)
-f(in)g(sequence.)57 b(This)34 b(allo)n(ws)f(m)n(ulti-step)i(con)n(v)n
-(ersions)d(b)r(et)n(w)n(een)227 1602 y(a)h(v)-5 b(ariet)n(y)33
-b(of)g(celestial)h(co)r(ordinate)e(systems)h(to)g(b)r(e)h(assem)n(bled)
-f(out)g(of)h(the)g(building)g(blo)r(c)n(ks)e(pro)n(vided)h(b)n(y)227
-1702 y(SLALIB.)227 1828 y(Normally)-7 b(,)29 b(if)h(an)f(SlaMap's)g(In)
-n(v)n(ert)g(attribute)g(is)h(zero)e(\(the)i(default\),)h(then)f(its)f
-(forw)n(ard)f(transformation)g(is)227 1927 y(p)r(erformed)e(b)n(y)h
-(carrying)e(out)h(eac)n(h)g(of)h(the)g(individual)g(co)r(ordinate)e
-(con)n(v)n(ersions)f(sp)r(eci\014ed)j(b)n(y)g(astSlaAdd)f(in)227
-2027 y(the)i(order)e(giv)n(en)h(\(i.e.)38 b(with)28 b(the)g(most)f
-(recen)n(tly)g(added)g(con)n(v)n(ersion)f(applied)h(last\).)227
-2153 y(This)f(order)f(is)h(rev)n(ersed)f(if)h(the)h(SlaMap's)e(In)n(v)n
-(ert)h(attribute)g(is)g(non-zero)f(\(or)g(if)i(the)g(in)n(v)n(erse)d
-(transformation)227 2253 y(is)j(requested)f(b)n(y)h(an)n(y)f(other)g
-(means\))h(and)g(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(is)j(also)f(replaced)g(b)n(y)g(its)227 2353
-y(o)n(wn)f(in)n(v)n(erse.)35 b(This)25 b(pro)r(cess)f(in)n(v)n(erts)g
-(the)i(o)n(v)n(erall)d(e\013ect)j(of)g(the)f(SlaMap.)36
-b(In)25 b(this)h(case,)f(the)h(\014rst)f(con)n(v)n(ersion)227
-2452 y(to)j(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n(erse)f
-(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0 2605
-y Fd(Synopsis:)121 b Ft(void)42 b(astSlaAdd\()d(AstSlaMap)h
-Fi(\003)p Ft(this,)h(const)h(char)g Fi(\003)p Ft(cvt,)f(const)h(double)
-f(args[])g(\))0 2758 y Fd(P)m(arameters:)259 2898 y(this)427
-2997 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(SlaMap.)259 3132
-y Fd(cvt)427 3232 y Fj(P)n(oin)n(ter)g(to)h(a)h(n)n(ull-terminated)f
-(string)g(whic)n(h)g(iden)n(ti\014es)h(the)f(celestial)g(co)r(ordinate)
-g(con)n(v)n(ersion)e(to)i(b)r(e)427 3331 y(added)f(to)f(the)h(SlaMap.)
-37 b(See)27 b(the)h Ft(")p Fj(SLALIB)f(Con)n(v)n(ersions)p
-Ft(")e Fj(section)i(for)g(details)h(of)f(those)g(a)n(v)-5
-b(ailable.)259 3466 y Fd(args)427 3565 y Fj(An)29 b(arra)n(y)d(con)n
-(taining)h(argumen)n(t)g(v)-5 b(alues)28 b(for)f(the)i(celestial)e(co)r
-(ordinate)g(con)n(v)n(ersion.)37 b(The)28 b(n)n(um)n(b)r(er)g(of)427
-3665 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r
-(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 3765 y(sp)r(eci\014ed)i(\(see)f(the)h
-Ft(")p Fj(SLALIB)f(Con)n(v)n(ersions)p Ft(")d Fj(section\).)36
-b(This)24 b(arra)n(y)e(is)i(ignored)f(and)h(a)g(NULL)h(p)r(oin)n(ter)
-427 3864 y(ma)n(y)i(b)r(e)h(supplied)g(if)g(no)g(argumen)n(ts)e(are)g
-(needed.)0 4030 y Fd(Notes:)340 4315 y Fi(\017)45 b Fj(All)38
-b(co)r(ordinate)d(v)-5 b(alues)37 b(pro)r(cessed)e(b)n(y)i(an)f(SlaMap)
-h(are)e(in)i(radians.)64 b(The)36 b(\014rst)h(co)r(ordinate)f(is)g(the)
-427 4415 y(celestial)27 b(longitude)h(and)f(the)h(second)f(co)r
-(ordinate)g(is)g(the)h(celestial)f(latitude.)340 4550
-y Fi(\017)45 b Fj(When)21 b(assem)n(bling)d(a)i(m)n(ulti-stage)f(con)n
-(v)n(ersion,)g(it)h(can)g(sometimes)f(b)r(e)h(di\016cult)h(to)f
-(determine)g(the)g(most)427 4649 y(economical)j(con)n(v)n(ersion)e
-(path.)36 b(F)-7 b(or)23 b(example,)h(con)n(v)n(erting)e(to)i(the)g
-(standard)f(FK5)g(co)r(ordinate)g(system)427 4749 y(as)37
-b(an)h(in)n(termediate)f(stage)g(is)g(often)h(sensible)g(in)g(form)n
-(ulating)f(the)h(problem,)i(but)e(ma)n(y)f(in)n(tro)r(duce)427
-4849 y(unnecessary)31 b(extra)g(con)n(v)n(ersion)f(steps.)51
-b(A)33 b(solution)e(to)h(this)h(is)f(to)g(include)h(all)f(the)g(steps)g
-(whic)n(h)h(are)427 4948 y(\(logically\))40 b(necessary)-7
-b(,)41 b(but)g(then)g(to)f(use)g(astSimplify)h(to)f(simplify)h(the)g
-(resulting)e(SlaMap.)75 b(The)427 5048 y(simpli\014cation)28
-b(pro)r(cess)e(will)i(eliminate)g(an)n(y)f(steps)g(whic)n(h)h(turn)f
-(out)h(not)f(to)h(b)r(e)g(needed.)340 5182 y Fi(\017)45
-b Fj(This)27 b(function)h(do)r(es)f(not)g(c)n(hec)n(k)f(to)h(ensure)g
-(that)g(the)h(sequence)e(of)h(co)r(ordinate)f(con)n(v)n(ersions)f
-(added)i(to)427 5282 y(an)h(SlaMap)f(is)g(ph)n(ysically)g(meaningful.)
--2 5447 y Fd(SLALIB)33 b(Con)m(v)m(ersions)n(:)227 5593
-y Fj(The)39 b(follo)n(wing)f(strings)g(\(whic)n(h)h(are)e
-(case-insensitiv)n(e\))h(ma)n(y)g(b)r(e)h(supplied)g(via)f(the)h
-Ft(")p Fj(cvt)p Ft(")f Fj(parameter)g(to)227 5693 y(indicate)25
-b(whic)n(h)g(celestial)g(co)r(ordinate)f(con)n(v)n(ersion)f(is)i(to)g
-(b)r(e)g(added)g(to)g(the)h(SlaMap.)35 b(Eac)n(h)24 b(string)g(is)h
-(deriv)n(ed)p eop end
-%%Page: 344 354
-TeXDict begin 344 353 bop 0 52 a FF(344)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(from)21
-b(the)g(name)g(of)g(the)g(SLALIB)g(routine)g(that)g(p)r(erforms)f(the)i
-(con)n(v)n(ersion)c(and)j(the)h(relev)-5 b(an)n(t)20
-b(do)r(cumen)n(tation)227 451 y(\(SUN/67\))32 b(should)g(b)r(e)g
-(consulted)g(for)f(details.)50 b(Where)32 b(argumen)n(ts)f(are)g
-(needed)h(b)n(y)f(the)i(con)n(v)n(ersion,)d(they)227
-551 y(are)d(listed)h(in)g(paren)n(theses.)37 b(V)-7 b(alues)27
-b(for)h(these)g(argumen)n(ts)e(should)i(b)r(e)g(giv)n(en,)f(via)h(the)g
-Ft(")p Fj(args)p Ft(")d Fj(arra)n(y)-7 b(,)26 b(in)i(the)227
-650 y(order)k(indicated.)52 b(The)33 b(argumen)n(t)e(names)h(matc)n(h)h
-(the)g(corresp)r(onding)d(SLALIB)j(routine)f(argumen)n(ts)g(and)227
-750 y(their)f(v)-5 b(alues)30 b(should)h(b)r(e)g(giv)n(en)e(using)i
-(exactly)f(the)h(same)f(units,)i(time)f(scale,)f(calendar,)h(etc.)46
-b(as)30 b(describ)r(ed)227 849 y(in)e(SUN/67:)340 1112
-y Fi(\017)45 b Ft(")p Fj(ADDET)p Ft(")28 b Fj(\(EQ\):)f(Add)h(E-terms)f
-(of)g(ab)r(erration.)340 1245 y Fi(\017)45 b Ft(")p Fj(SUBET)p
-Ft(")27 b Fj(\(EQ\):)g(Subtract)h(E-terms)e(of)i(ab)r(erration.)340
-1379 y Fi(\017)45 b Ft(")p Fj(PREBN)p Ft(")26 b Fj(\(BEP0,BEP1\):)35
-b(Apply)28 b(Bessel-New)n(com)n(b)d(pre-IA)n(U)i(1976)f(\(FK4\))i
-(precession)e(mo)r(del.)340 1512 y Fi(\017)45 b Ft(")p
-Fj(PREC)p Ft(")26 b Fj(\(EP0,EP1\):)35 b(Apply)28 b(IA)n(U)g(1975)d
-(\(FK5\))j(precession)e(mo)r(del.)340 1646 y Fi(\017)45
-b Ft(")p Fj(FK45Z)p Ft(")26 b Fj(\(BEPOCH\):)h(Con)n(v)n(ert)f(FK4)h
-(to)g(FK5)g(\(no)h(prop)r(er)e(motion)i(or)e(parallax\).)340
-1779 y Fi(\017)45 b Ft(")p Fj(FK54Z)p Ft(")26 b Fj(\(BEPOCH\):)h(Con)n
-(v)n(ert)f(FK5)h(to)g(FK4)g(\(no)h(prop)r(er)e(motion)i(or)e
-(parallax\).)340 1912 y Fi(\017)45 b Ft(")p Fj(AMP)p
-Ft(")27 b Fj(\(D)n(A)-7 b(TE,EQ\):)27 b(Con)n(v)n(ert)g(geo)r(cen)n
-(tric)f(apparen)n(t)g(to)i(mean)f(place.)340 2046 y Fi(\017)45
-b Ft(")p Fj(MAP)p Ft(")27 b Fj(\(EQ,D)n(A)-7 b(TE\):)27
-b(Con)n(v)n(ert)g(mean)g(place)g(to)h(geo)r(cen)n(tric)e(apparen)n(t.)
-340 2179 y Fi(\017)45 b Ft(")p Fj(ECLEQ)p Ft(")26 b Fj(\(D)n(A)-7
-b(TE\):)28 b(Con)n(v)n(ert)e(ecliptic)i(co)r(ordinates)e(to)i(FK5)f
-(J2000.0)d(equatorial.)340 2312 y Fi(\017)45 b Ft(")p
-Fj(EQECL)p Ft(")26 b Fj(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e
-(equatorial)g(FK5)h(J2000.0)e(to)i(ecliptic)h(co)r(ordinates.)340
-2446 y Fi(\017)45 b Ft(")p Fj(GALEQ)p Ft(")p Fj(:)36
-b(Con)n(v)n(ert)26 b(galactic)g(co)r(ordinates)h(to)g(FK5)g(J2000.0)e
-(equatorial.)340 2579 y Fi(\017)45 b Ft(")p Fj(EQGAL)p
-Ft(")p Fj(:)36 b(Con)n(v)n(ert)26 b(FK5)h(J2000.0)e(equatorial)h(to)h
-(galactic)g(co)r(ordinates.)340 2713 y Fi(\017)45 b Ft(")p
-Fj(HFK5Z)p Ft(")26 b Fj(\(JEPOCH\):)h(Con)n(v)n(ert)f(ICRS)i(co)r
-(ordinates)e(to)i(FK5)f(J2000.0)e(equatorial.)340 2846
-y Fi(\017)45 b Ft(")p Fj(FK5HZ)p Ft(")26 b Fj(\(JEPOCH\):)h(Con)n(v)n
-(ert)f(FK5)h(J2000.0)e(equatorial)h(co)r(ordinates)g(to)i(ICRS.)340
-2979 y Fi(\017)45 b Ft(")p Fj(GALSUP)p Ft(")p Fj(:)37
-b(Con)n(v)n(ert)26 b(galactic)g(to)i(sup)r(ergalactic)e(co)r
-(ordinates.)340 3113 y Fi(\017)45 b Ft(")p Fj(SUPGAL)p
-Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(sup)r(ergalactic)g(co)r(ordinates)g
-(to)i(galactic.)340 3246 y Fi(\017)45 b Ft(")p Fj(J2000H)p
-Ft(")p Fj(:)34 b(Con)n(v)n(ert)27 b(dynamical)g(J2000.0)d(to)k(ICRS.)
-340 3380 y Fi(\017)45 b Ft(")p Fj(HJ2000)p Ft(")p Fj(:)34
-b(Con)n(v)n(ert)27 b(ICRS)g(to)h(dynamical)f(J2000.0.)340
-3513 y Fi(\017)45 b Ft(")p Fj(R2H)p Ft(")27 b Fj(\(LAST\):)i(Con)n(v)n
-(ert)d(RA)i(to)f(Hour)g(Angle.)340 3646 y Fi(\017)45
-b Ft(")p Fj(H2R)p Ft(")27 b Fj(\(LAST\):)i(Con)n(v)n(ert)d(Hour)h
-(Angle)g(to)h(RA.)227 3809 y(F)-7 b(or)36 b(example,)j(to)e(use)f(the)i
-Ft(")p Fj(ADDET)p Ft(")e Fj(con)n(v)n(ersion,)h(whic)n(h)g(tak)n(es)f
-(a)g(single)g(argumen)n(t)g(EQ,)g(y)n(ou)g(should)227
-3909 y(consult)c(the)g(do)r(cumen)n(tation)g(for)f(the)i(SLALIB)f
-(routine)f(SLA)p Ft(_)p Fj(ADDET.)h(This)g(describ)r(es)g(the)g(con)n
-(v)n(ersion)227 4009 y(in)e(detail)f(and)h(sho)n(ws)e(that)i(EQ)e(is)i
-(the)f(Besselian)g(ep)r(o)r(c)n(h)g(of)g(the)h(mean)f(equator)g(and)g
-(equino)n(x.)41 b(This)30 b(v)-5 b(alue)227 4108 y(should)28
-b(then)g(b)r(e)g(supplied)g(to)f(astSlaAdd)h(in)f(args[0].)227
-4233 y(In)40 b(addition)g(the)g(follo)n(wing)e(strings)h(ma)n(y)g(b)r
-(e)h(supplied)g(for)f(more)g(complex)g(con)n(v)n(ersions)e(whic)n(h)i
-(do)h(not)227 4333 y(corresp)r(ond)30 b(to)h(an)n(y)g(one)g(single)g
-(SLALIB)g(routine)g(\(DIURAB)i(is)e(the)h(magnitude)f(of)h(the)f
-(diurnal)g(ab)r(erra-)227 4433 y(tion)j(v)n(ector)e(in)h(units)h(of)f
-Ft(")p Fj(da)n(y/\(2.PI\))p Ft(")p Fj(,)f(D)n(A)-7 b(TE)34
-b(is)f(the)h(Mo)r(di\014ed)f(Julian)g(Date)h(of)f(the)g(observ)-5
-b(ation,)34 b(and)227 4532 y(\(OBSX,OBSY,OBZ\))k(are)f(the)i(Helio)r
-(cen)n(tric-Aries-Ecliptic)d(cartesian)h(co)r(ordinates,)j(in)e
-(metres,)j(of)d(the)227 4632 y(observ)n(er\):)340 4894
-y Fi(\017)45 b Ft(")p Fj(HPCEQ)p Ft(")38 b Fj(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)39 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Cartesian)36 b(co)r(ordinates)i(to)427 4994
-y(J2000.0)25 b(equatorial.)340 5127 y Fi(\017)45 b Ft(")p
-Fj(EQHPC)p Ft(")17 b Fj(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18
-b(Con)n(v)n(ert)f(J2000.0)e(equatorial)i(co)r(ordinates)g(to)h
-(Heliopro)5 b(jectiv)n(e-)427 5227 y(Cartesian.)340 5360
-y Fi(\017)45 b Ft(")p Fj(HPREQ)p Ft(")17 b Fj(\(D)n(A)-7
-b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f(Heliopro)5
-b(jectiv)n(e-Radial)16 b(co)r(ordinates)h(to)h(J2000.0)427
-5460 y(equatorial.)340 5593 y Fi(\017)45 b Ft(")p Fj(EQHPR)p
-Ft(")17 b Fj(\(D)n(A)-7 b(TE,OBSX,OBSY,OBSZ\):)18 b(Con)n(v)n(ert)f
-(J2000.0)f(equatorial)g(co)r(ordinates)h(to)h(Heliopro)5
-b(jectiv)n(e-)427 5693 y(Radial.)p eop end
-%%Page: 345 355
-TeXDict begin 345 354 bop 3643 52 a FF(345)340 351 y
-Fi(\017)45 b Ft(")p Fj(HEEQ)p Ft(")26 b Fj(\(D)n(A)-7
-b(TE\):)28 b(Con)n(v)n(ert)e(helio-ecliptic)i(co)r(ordinates)e(to)h
-(J2000.0)e(equatorial.)340 486 y Fi(\017)45 b Ft(")p
-Fj(EQHE)p Ft(")26 b Fj(\(D)n(A)-7 b(TE\):)28 b(Con)n(v)n(ert)e(J2000.0)
-f(equatorial)h(co)r(ordinates)g(to)i(helio-ecliptic.)340
-621 y Fi(\017)45 b Ft(")p Fj(H2E)p Ft(")26 b Fj(\(LA)-7
-b(T,DIR)n(UAB\):)30 b(Con)n(v)n(ert)c(horizon)g(co)r(ordinates)g(to)i
-(equatorial.)340 755 y Fi(\017)45 b Ft(")p Fj(E2H)p Ft(")26
-b Fj(\(LA)-7 b(T,DIURAB\):)30 b(Con)n(v)n(ert)c(equatorial)g(co)r
-(ordinates)g(to)i(horizon.)227 921 y(Note,)40 b(the)e
-Ft(")p Fj(H2E)p Ft(")e Fj(and)i Ft(")p Fj(E2H)p Ft(")e
-Fj(con)n(v)n(ersions)f(con)n(v)n(ert)h(b)r(et)n(w)n(een)i(top)r(o)r
-(cen)n(tric)f(horizon)f(co)r(ordinates)g(\(az-)227 1020
-y(im)n(uth,elev)-5 b(ation\),)39 b(and)d(apparen)n(t)f(lo)r(cal)h
-(equatorial)e(co)r(ordinates)h(\(hour)h(angle,declination\).)61
-b(Th)n(us,)38 b(the)227 1120 y(e\013ects)g(of)f(diurnal)g(ab)r
-(erration)f(are)g(tak)n(en)h(in)n(to)g(accoun)n(t)f(in)i(the)f(con)n(v)
-n(ersions)e(but)j(the)g(e\013ects)f(of)g(atmo-)227 1219
-y(spheric)27 b(refraction)g(are)f(not.)p 0 1422 3780
-12 v 0 1554 a Fz(astSlaMap)811 b Fe(Create)38 b(an)g(SlaMap)810
-b Fz(astSlaMap)0 1746 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(SlaMap)g(and)h(optionally)f
-(initialises)g(its)h(attributes.)227 1873 y(An)19 b(SlaMap)f(is)g(a)g
-(sp)r(ecialised)g(form)g(of)h(Mapping)f(whic)n(h)g(can)g(b)r(e)h(used)f
-(to)h(represen)n(t)e(a)h(sequence)g(of)g(con)n(v)n(ersions)227
-1972 y(b)r(et)n(w)n(een)28 b(standard)e(celestial)i(\(longitude,)f
-(latitude\))i(co)r(ordinate)d(systems.)227 2099 y(When)e(an)e(SlaMap)h
-(is)g(\014rst)f(created,)h(it)h(simply)f(p)r(erforms)f(a)g(unit)i(\(n)n
-(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r(ordinates.)227
-2198 y(Using)k(the)g(astSlaAdd)g(function,)g(a)g(series)f(of)g(co)r
-(ordinate)g(con)n(v)n(ersion)e(steps)j(ma)n(y)f(then)i(b)r(e)f(added,)g
-(selected)227 2298 y(from)h(those)g(pro)n(vided)f(b)n(y)g(the)i(SLALIB)
-f(P)n(ositional)e(Astronom)n(y)h(Library)f(\(Starlink)i(User)g(Note)g
-(SUN/67\).)227 2398 y(This)21 b(allo)n(ws)f(m)n(ulti-step)i(con)n(v)n
-(ersions)c(b)r(et)n(w)n(een)j(a)g(v)-5 b(ariet)n(y)20
-b(of)i(celestial)e(co)r(ordinate)g(systems)h(to)g(b)r(e)h(assem)n(bled)
-227 2497 y(out)28 b(of)f(the)h(building)g(blo)r(c)n(ks)f(pro)n(vided)g
-(b)n(y)g(SLALIB.)227 2624 y(F)-7 b(or)27 b(details)f(of)h(the)g
-(individual)g(co)r(ordinate)f(con)n(v)n(ersions)f(a)n(v)-5
-b(ailable,)25 b(see)i(the)g(description)g(of)f(the)i(astSlaAdd)227
-2723 y(function.)0 2876 y Fd(Synopsis:)121 b Ft(AstSlaMap)40
-b Fi(\003)p Ft(astSlaMap\()f(int)j(flags,)f(const)h(char)g
-Fi(\003)p Ft(options,)d(...)86 b(\))0 3029 y Fd(P)m(arameters:)259
-3169 y(\015ags)427 3269 y Fj(This)28 b(parameter)e(is)h(reserv)n(ed)f
-(for)h(future)h(use)g(and)f(should)h(curren)n(tly)e(alw)n(a)n(ys)g(b)r
-(e)i(set)f(to)h(zero.)259 3403 y Fd(options)427 3503
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3603 y(assignmen)n(ts)f(to)h(b)r(e)h(used)f(for)f(initialising)h(the)h
-(new)f(SlaMap.)38 b(The)28 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)
-g(that)427 3702 y(for)e(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3802 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 3937 y Fd(...)427 4036 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 4136 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 4235 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4335 y Fj(function\).)0
-4501 y Fd(Returned)32 b(V)-8 b(alue:)259 4641 y(astSlaMap\(\))427
-4740 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(SlaMap.)0
-4906 y Fd(Notes:)340 5192 y Fi(\017)45 b Fj(The)32 b(Nin)g(and)f(Nout)h
-(attributes)f(\(n)n(um)n(b)r(er)h(of)f(input)i(and)e(output)h(co)r
-(ordinates\))e(for)h(an)h(SlaMap)f(are)427 5291 y(b)r(oth)g(equal)e(to)
-h(2.)44 b(The)30 b(\014rst)g(co)r(ordinate)f(is)h(the)h(celestial)e
-(longitude)h(and)g(the)g(second)g(co)r(ordinate)f(is)427
-5391 y(the)f(celestial)f(latitude.)38 b(All)28 b(co)r(ordinate)e(v)-5
-b(alues)27 b(are)g(in)h(radians.)340 5526 y Fi(\017)45
-b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 5625 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 346 356
-TeXDict begin 346 355 bop 0 52 a FF(346)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astSp)t(ecAdd)171 b Fe(Add)39 b(a)g(sp)s(ectral)e(co)s
-(ordinate)g(con)m(v)m(ersion)f(to)1607 596 y(a)i(Sp)s(ecMap)3083
-483 y Fz(astSp)t(ecAdd)0 791 y Fd(Description:)44 b Fj(This)21
-b(function)h(adds)e(one)h(of)g(the)g(standard)f(sp)r(ectral)g(co)r
-(ordinate)g(system)g(con)n(v)n(ersions)f(listed)i(b)r(elo)n(w)227
-890 y(to)28 b(an)f(existing)g(Sp)r(ecMap.)227 1018 y(When)22
-b(a)f(Sp)r(ecMap)h(is)f(\014rst)g(created)g(\(using)g(astSp)r(ecMap\),)
-i(it)f(simply)f(p)r(erforms)g(a)g(unit)h(\(n)n(ull\))g(Mapping.)35
-b(By)227 1117 y(using)28 b(astSp)r(ecAdd)g(\(rep)r(eatedly)g(if)g
-(necessary\),)e(one)i(or)f(more)g(co)r(ordinate)g(con)n(v)n(ersion)e
-(steps)j(ma)n(y)f(then)h(b)r(e)227 1217 y(added,)e(whic)n(h)f(the)g(Sp)
-r(ecMap)h(will)f(p)r(erform)f(in)i(sequence.)35 b(This)25
-b(allo)n(ws)f(m)n(ulti-step)h(con)n(v)n(ersions)e(b)r(et)n(w)n(een)i(a)
-227 1317 y(v)-5 b(ariet)n(y)27 b(of)g(sp)r(ectral)g(co)r(ordinate)g
-(systems)g(to)g(b)r(e)h(assem)n(bled)e(out)i(of)f(the)h(building)g(blo)
-r(c)n(ks)f(pro)n(vided)f(b)n(y)h(this)227 1416 y(class.)227
-1544 y(Normally)-7 b(,)28 b(if)h(a)g(Sp)r(ecMap's)f(In)n(v)n(ert)g
-(attribute)h(is)f(zero)g(\(the)h(default\),)h(then)f(its)g(forw)n(ard)e
-(transformation)g(is)227 1643 y(p)r(erformed)j(b)n(y)f(carrying)f(out)i
-(eac)n(h)f(of)h(the)g(individual)g(co)r(ordinate)f(con)n(v)n(ersions)e
-(sp)r(eci\014ed)k(b)n(y)e(astSp)r(ecAdd)227 1743 y(in)f(the)g(order)e
-(giv)n(en)h(\(i.e.)37 b(with)29 b(the)e(most)h(recen)n(tly)f(added)g
-(con)n(v)n(ersion)e(applied)j(last\).)227 1870 y(This)23
-b(order)e(is)h(rev)n(ersed)e(if)j(the)g(Sp)r(ecMap's)f(In)n(v)n(ert)g
-(attribute)g(is)g(non-zero)f(\(or)h(if)h(the)f(in)n(v)n(erse)f
-(transformation)227 1970 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g
-(means\))h(and)g(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(is)j(also)f(replaced)g(b)n(y)g(its)227 2069
-y(o)n(wn)21 b(in)n(v)n(erse.)33 b(This)22 b(pro)r(cess)e(in)n(v)n(erts)
-g(the)i(o)n(v)n(erall)d(e\013ect)j(of)f(the)h(Sp)r(ecMap.)35
-b(In)22 b(this)f(case,)h(the)g(\014rst)f(con)n(v)n(ersion)227
-2169 y(to)28 b(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n
-(erse)f(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0
-2324 y Fd(Synopsis:)121 b Ft(void)42 b(astSpecAdd\()d(AstSpecMap)g
-Fi(\003)p Ft(this,)i(const)h(char)g Fi(\003)p Ft(cvt,)f(const)h(double)
-f(args[])g(\))0 2479 y Fd(P)m(arameters:)259 2621 y(this)427
-2721 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecMap.)259
-2857 y Fd(cvt)427 2956 y Fj(P)n(oin)n(ter)g(to)i(a)f(n)n
-(ull-terminated)g(string)g(whic)n(h)h(iden)n(ti\014es)g(the)g(sp)r
-(ectral)f(co)r(ordinate)f(con)n(v)n(ersion)g(to)h(b)r(e)427
-3056 y(added)24 b(to)g(the)g(Sp)r(ecMap.)36 b(See)23
-b(the)h Ft(")p Fj(Av)-5 b(ailable)24 b(Con)n(v)n(ersions)p
-Ft(")c Fj(section)k(for)f(details)h(of)f(those)h(a)n(v)-5
-b(ailable.)259 3192 y Fd(args)427 3291 y Fj(An)29 b(arra)n(y)d(con)n
-(taining)h(argumen)n(t)g(v)-5 b(alues)28 b(for)g(the)h(sp)r(ectral)f
-(co)r(ordinate)f(con)n(v)n(ersion.)36 b(The)29 b(n)n(um)n(b)r(er)f(of)
-427 3391 y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n
-(b)r(er)g(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g
-(con)n(v)n(ersion)427 3491 y(sp)r(eci\014ed)f(\(see)f(the)h
-Ft(")p Fj(Av)-5 b(ailable)21 b(Con)n(v)n(ersions)p Ft(")d
-Fj(section\).)35 b(This)21 b(arra)n(y)e(is)j(ignored)e(and)h(a)g(NULL)h
-(p)r(oin)n(ter)427 3590 y(ma)n(y)27 b(b)r(e)h(supplied)g(if)g(no)g
-(argumen)n(ts)e(are)g(needed.)0 3758 y Fd(Notes:)340
-4046 y Fi(\017)45 b Fj(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h
-(con)n(v)n(ersion,)g(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f
-(determine)g(the)427 4146 y(most)31 b(economical)g(con)n(v)n(ersion)e
-(path.)48 b(F)-7 b(or)30 b(example,)i(when)g(con)n(v)n(erting)d(b)r(et)
-n(w)n(een)j(reference)e(frames,)427 4245 y(con)n(v)n(erting)19
-b(\014rst)i(to)f(the)i(heliographic)d(reference)h(frame)g(as)g(an)h(in)
-n(termediate)f(stage)g(is)h(often)g(sensible)f(in)427
-4345 y(form)n(ulating)28 b(the)i(problem,)e(but)i(ma)n(y)e(in)n(tro)r
-(duce)h(unnecessary)e(extra)h(con)n(v)n(ersion)f(steps.)41
-b(A)29 b(solution)427 4444 y(to)f(this)h(is)f(to)g(include)g(all)g(the)
-h(steps)f(whic)n(h)g(are)f(\(logically\))g(necessary)-7
-b(,)27 b(but)i(then)f(to)g(use)g(astSimplify)427 4544
-y(to)f(simplify)h(the)g(resulting)e(Sp)r(ecMap.)37 b(The)27
-b(simpli\014cation)g(pro)r(cess)f(will)i(eliminate)f(an)n(y)g(steps)g
-(whic)n(h)427 4644 y(turn)h(out)g(not)f(to)h(b)r(e)g(needed.)340
-4779 y Fi(\017)45 b Fj(This)27 b(function)h(do)r(es)f(not)g(c)n(hec)n
-(k)f(to)h(ensure)g(that)g(the)h(sequence)e(of)h(co)r(ordinate)f(con)n
-(v)n(ersions)f(added)i(to)427 4879 y(a)g(Sp)r(ecMap)h(is)g(ph)n
-(ysically)e(meaningful.)-2 5047 y Fd(Av)-5 b(ailable)32
-b(Con)m(v)m(ersions)n(:)227 5193 y Fj(The)39 b(follo)n(wing)f(strings)g
-(\(whic)n(h)h(are)e(case-insensitiv)n(e\))h(ma)n(y)g(b)r(e)h(supplied)g
-(via)f(the)h Ft(")p Fj(cvt)p Ft(")f Fj(parameter)g(to)227
-5292 y(indicate)32 b(whic)n(h)f(sp)r(ectral)g(co)r(ordinate)f(con)n(v)n
-(ersion)f(is)i(to)g(b)r(e)h(added)f(to)g(the)h(Sp)r(ecMap.)48
-b(Where)31 b(argumen)n(ts)227 5392 y(are)25 b(needed)h(b)n(y)f(the)h
-(con)n(v)n(ersion,)e(they)i(are)e(listed)i(in)g(paren)n(theses.)35
-b(V)-7 b(alues)26 b(for)f(these)g(argumen)n(ts)g(should)g(b)r(e)227
-5491 y(giv)n(en,)g(via)f(the)g Ft(")p Fj(args)p Ft(")f
-Fj(arra)n(y)-7 b(,)22 b(in)j(the)g(order)e(indicated.)36
-b(Units)25 b(and)g(argumen)n(t)e(names)h(are)g(describ)r(ed)g(at)g(the)
-227 5591 y(end)k(of)g(the)g(list)f(of)h(con)n(v)n(ersions.)p
-eop end
-%%Page: 347 357
-TeXDict begin 347 356 bop 3643 52 a FF(347)340 351 y
-Fi(\017)45 b Ft(")p Fj(FR)-7 b(TO)n(VL)p Ft(")27 b Fj(\(RF\):)i(Con)n
-(v)n(ert)d(frequency)h(to)g(relativistic)g(v)n(elo)r(cit)n(y)-7
-b(.)340 485 y Fi(\017)45 b Ft(")p Fj(VL)-7 b(TOFR)p Ft(")27
-b Fj(\(RF\):)i(Con)n(v)n(ert)d(relativistic)h(v)n(elo)r(cit)n(y)g(to)g
-(F)-7 b(requency)g(.)340 619 y Fi(\017)45 b Ft(")p Fj(ENTOFR)p
-Ft(")p Fj(:)36 b(Con)n(v)n(ert)26 b(energy)h(to)g(frequency)-7
-b(.)340 753 y Fi(\017)45 b Ft(")p Fj(FR)-7 b(TOEN)p Ft(")p
-Fj(:)36 b(Con)n(v)n(ert)26 b(frequency)h(to)h(energy)-7
-b(.)340 886 y Fi(\017)45 b Ft(")p Fj(WNTOFR)p Ft(")p
-Fj(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(e)g(n)n(um)n(b)r(er)h(to)h
-(frequency)-7 b(.)340 1020 y Fi(\017)45 b Ft(")p Fj(FR)-7
-b(TO)n(WN)p Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(frequency)h(to)g(w)n(a)
-n(v)n(e)f(n)n(um)n(b)r(er.)340 1154 y Fi(\017)45 b Ft(")p
-Fj(WVTOFR)p Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g
-(\(v)-5 b(acuum\))28 b(to)g(frequency)-7 b(.)340 1288
-y Fi(\017)45 b Ft(")p Fj(FR)-7 b(TO)n(WV)p Ft(")p Fj(:)37
-b(Con)n(v)n(ert)26 b(frequency)h(to)g(w)n(a)n(v)n(elength)f(\(v)-5
-b(acuum\).)340 1421 y Fi(\017)45 b Ft(")p Fj(A)-9 b(WTOFR)p
-Ft(")p Fj(:)37 b(Con)n(v)n(ert)26 b(w)n(a)n(v)n(elength)g(\(air\))h(to)
-h(frequency)-7 b(.)340 1555 y Fi(\017)45 b Ft(")p Fj(FR)-7
-b(TO)n(A)e(W)p Ft(")p Fj(:)36 b(Con)n(v)n(ert)27 b(frequency)g(to)g(w)n
-(a)n(v)n(elength)f(\(air\).)340 1689 y Fi(\017)45 b Ft(")p
-Fj(VR)-7 b(TO)n(VL)p Ft(")p Fj(:)36 b(Con)n(v)n(ert)26
-b(radio)h(to)g(relativistic)g(v)n(elo)r(cit)n(y)-7 b(.)340
-1823 y Fi(\017)45 b Ft(")p Fj(VL)-7 b(TO)n(VR)p Ft(")p
-Fj(:)36 b(Con)n(v)n(ert)26 b(relativistic)h(to)h(radio)e(v)n(elo)r(cit)
-n(y)-7 b(.)340 1956 y Fi(\017)45 b Ft(")p Fj(V)n(OTO)n(VL)p
-Ft(")p Fj(:)35 b(Con)n(v)n(ert)26 b(optical)i(to)f(relativistic)g(v)n
-(elo)r(cit)n(y)-7 b(.)340 2090 y Fi(\017)45 b Ft(")p
-Fj(VL)-7 b(TO)n(V)n(O)p Ft(")p Fj(:)35 b(Con)n(v)n(ert)27
-b(relativistic)f(to)i(optical)f(v)n(elo)r(cit)n(y)-7
-b(.)340 2224 y Fi(\017)45 b Ft(")p Fj(ZOTO)n(VL)p Ft(")p
-Fj(:)35 b(Con)n(v)n(ert)26 b(redshift)i(to)g(relativistic)e(v)n(elo)r
-(cit)n(y)-7 b(.)340 2358 y Fi(\017)45 b Ft(")p Fj(VL)-7
-b(TOZO)p Ft(")p Fj(:)35 b(Con)n(v)n(ert)27 b(relativistic)g(v)n(elo)r
-(cit)n(y)f(to)i(redshift.)340 2491 y Fi(\017)45 b Ft(")p
-Fj(BTTO)n(VL)p Ft(")p Fj(:)36 b(Con)n(v)n(ert)26 b(b)r(eta)i(factor)e
-(to)i(relativistic)f(v)n(elo)r(cit)n(y)-7 b(.)340 2625
-y Fi(\017)45 b Ft(")p Fj(VL)-7 b(TOBT)p Ft(")p Fj(:)36
-b(Con)n(v)n(ert)26 b(relativistic)h(v)n(elo)r(cit)n(y)g(to)g(b)r(eta)h
-(factor.)340 2759 y Fi(\017)45 b Ft(")p Fj(USF2HL)p Ft(")28
-b Fj(\(V)n(OFF,RA,DEC\):)i(Con)n(v)n(ert)d(frequency)g(from)h(a)g
-(user-de\014ned)g(reference)g(frame)g(to)g(he-)427 2858
-y(lio)r(cen)n(tric.)340 2992 y Fi(\017)45 b Ft(")p Fj(HLF2US)p
-Ft(")31 b Fj(\(V)n(OFF,RA,DEC\):)h(Con)n(v)n(ert)d(frequency)i(from)g
-(helio)r(cen)n(tric)f(reference)g(frame)h(to)g(user-)427
-3092 y(de\014ned.)340 3226 y Fi(\017)45 b Ft(")p Fj(TPF2HL)p
-Ft(")17 b Fj(\(OBSLON,OBSLA)-7 b(T,OBSAL)g(T,EPOCH,RA,DEC\):)17
-b(Con)n(v)n(ert)g(frequency)h(from)g(top)r(o)r(cen-)427
-3325 y(tric)28 b(reference)e(frame)i(to)f(helio)r(cen)n(tric.)340
-3459 y Fi(\017)45 b Ft(")p Fj(HLF2TP)p Ft(")20 b Fj(\(OBSLON,OBSLA)-7
-b(T,OBSAL)g(T,EPOCH,RA,DEC\):)20 b(Con)n(v)n(ert)g(frequency)h(from)g
-(helio-)427 3559 y(cen)n(tric)27 b(reference)g(frame)g(to)h(top)r(o)r
-(cen)n(tric.)340 3692 y Fi(\017)45 b Ft(")p Fj(GEF2HL)p
-Ft(")24 b Fj(\(EPOCH,RA,DEC\):)h(Con)n(v)n(ert)f(frequency)h(from)g
-(geo)r(cen)n(tric)f(reference)g(frame)h(to)g(helio-)427
-3792 y(cen)n(tric.)340 3926 y Fi(\017)45 b Ft(")p Fj(HLF2GE)p
-Ft(")24 b Fj(\(EPOCH,RA,DEC\):)h(Con)n(v)n(ert)f(frequency)h(from)g
-(helio)r(cen)n(tric)g(reference)f(frame)h(to)g(geo-)427
-4025 y(cen)n(tric.)340 4159 y Fi(\017)45 b Ft(")p Fj(BYF2HL)p
-Ft(")30 b Fj(\(EPOCH,RA,DEC\):)g(Con)n(v)n(ert)f(frequency)h(from)g
-(barycen)n(tric)f(reference)h(frame)g(to)g(he-)427 4259
-y(lio)r(cen)n(tric.)340 4392 y Fi(\017)45 b Ft(")p Fj(HLF2BY)p
-Ft(")18 b Fj(\(EPOCH,RA,DEC\):)g(Con)n(v)n(ert)f(frequency)h(from)g
-(helio)r(cen)n(tric)g(reference)f(frame)h(to)g(barycen-)427
-4492 y(tric.)340 4626 y Fi(\017)45 b Ft(")p Fj(LKF2HL)p
-Ft(")27 b Fj(\(RA,DEC\):)j(Con)n(v)n(ert)d(frequency)h(from)g
-(kinematic)h(LSR)g(reference)e(frame)i(to)f(helio)r(cen-)427
-4725 y(tric.)340 4859 y Fi(\017)45 b Ft(")p Fj(HLF2LK)p
-Ft(")38 b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)g(reference)g(frame)h(to)g(kinematic)427
-4959 y(LSR.)340 5093 y Fi(\017)45 b Ft(")p Fj(LDF2HL)p
-Ft(")27 b Fj(\(RA,DEC\):)g(Con)n(v)n(ert)f(frequency)g(from)h
-(dynamical)f(LSR)h(reference)f(frame)g(to)h(helio)r(cen-)427
-5192 y(tric.)340 5326 y Fi(\017)45 b Ft(")p Fj(HLF2LD)p
-Ft(")37 b Fj(\(RA,DEC\):)h(Con)n(v)n(ert)d(frequency)i(from)f(helio)r
-(cen)n(tric)h(reference)f(frame)g(to)h(dynamical)427
-5426 y(LSR.)340 5559 y Fi(\017)45 b Ft(")p Fj(LGF2HL)p
-Ft(")27 b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h(from)g(lo)r(cal)
-g(group)g(reference)f(frame)i(to)f(helio)r(cen)n(tric.)340
-5693 y Fi(\017)45 b Ft(")p Fj(HLF2LG)p Ft(")27 b Fj(\(RA,DEC\):)i(Con)n
-(v)n(ert)d(frequency)h(from)g(helio)r(cen)n(tric)g(reference)g(frame)g
-(to)h(lo)r(cal)f(group.)p eop end
-%%Page: 348 358
-TeXDict begin 348 357 bop 0 52 a FF(348)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Ft(")p Fj(GLF2HL)p Ft(")27 b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d
-(frequency)h(from)g(galactic)g(reference)f(frame)h(to)h(helio)r(cen)n
-(tric.)340 477 y Fi(\017)45 b Ft(")p Fj(HLF2GL)p Ft(")27
-b Fj(\(RA,DEC\):)i(Con)n(v)n(ert)d(frequency)h(from)g(helio)r(cen)n
-(tric)g(reference)g(frame)g(to)h(galactic.)227 632 y(The)g(units)g(for)
-f(the)h(v)-5 b(alues)27 b(pro)r(cessed)g(b)n(y)g(the)h(ab)r(o)n(v)n(e)e
-(con)n(v)n(ersions)f(are)i(as)g(follo)n(ws:)340 882 y
-Fi(\017)45 b Fj(all)28 b(v)n(elo)r(cities:)36 b(metres)27
-b(p)r(er)h(second)e(\(p)r(ositiv)n(e)i(if)g(the)g(source)e(receeds)h
-(from)g(the)h(observ)n(er\).)340 1007 y Fi(\017)45 b
-Fj(frequency:)37 b(Hertz.)340 1133 y Fi(\017)45 b Fj(all)28
-b(w)n(a)n(v)n(elengths:)35 b(metres.)340 1258 y Fi(\017)45
-b Fj(energy:)36 b(Joules.)340 1384 y Fi(\017)45 b Fj(w)n(a)n(v)n(e)26
-b(n)n(um)n(b)r(er:)37 b(cycles)27 b(p)r(er)g(metre.)227
-1539 y(The)h(argumen)n(ts)e(used)i(in)g(the)g(ab)r(o)n(v)n(e)e(con)n(v)
-n(ersions)f(are)h(as)h(follo)n(ws:)340 1789 y Fi(\017)45
-b Fj(RF:)28 b(Rest)g(frequency)f(\(Hz\).)340 1914 y Fi(\017)45
-b Fj(OBSAL)-7 b(T:)28 b(Geo)r(detic)g(altitude)g(of)f(observ)n(er)e
-(\(IA)n(U)k(1975,)c(metres\).)340 2040 y Fi(\017)45 b
-Fj(OBSLA)-7 b(T:)28 b(Geo)r(detic)g(latitude)g(of)f(observ)n(er)e(\(IA)
-n(U)k(1975,)c(radians\).)340 2165 y Fi(\017)45 b Fj(OBSLON:)27
-b(Longitude)g(of)h(observ)n(er)d(\(radians)i(-)g(p)r(ositiv)n(e)g(east)
-n(w)n(ards\).)340 2291 y Fi(\017)45 b Fj(EPOCH:)27 b(Ep)r(o)r(c)n(h)g
-(of)h(observ)-5 b(ation)26 b(\(UT1)h(expressed)g(as)g(a)g(Mo)r
-(di\014ed)h(Julian)f(Date\).)340 2417 y Fi(\017)45 b
-Fj(RA:)28 b(Righ)n(t)g(Ascension)f(of)g(source)g(\(radians,)f(FK5)h
-(J2000\).)340 2542 y Fi(\017)45 b Fj(DEC:)28 b(Declination)g(of)f
-(source)f(\(radians,)h(FK5)g(J2000\).)340 2668 y Fi(\017)45
-b Fj(V)n(OFF:)32 b(V)-7 b(elo)r(cit)n(y)32 b(of)g(the)g(user-de\014ned)
-g(reference)f(frame,)h(to)n(w)n(ards)e(the)j(p)r(osition)f(giv)n(en)f
-(b)n(y)g(RA)i(and)427 2767 y(DEC,)28 b(measured)f(in)g(the)h(helio)r
-(cen)n(tric)f(reference)g(frame.)227 2922 y(If)35 b(the)f(Sp)r(ecMap)g
-(is)f(3-dimensional,)i(source)d(p)r(ositions)h(are)g(pro)n(vided)g(b)n
-(y)h(the)g(v)-5 b(alues)33 b(supplied)h(to)g(inputs)227
-3022 y(2)f(and)g(3)g(of)h(the)f(Sp)r(ecMap)h(\(whic)n(h)f(are)g(simply)
-g(copied)g(to)g(outputs)h(2)f(and)g(3\).)54 b(Note,)35
-b(usable)e(v)-5 b(alues)33 b(are)227 3121 y(still)26
-b(required)f(for)g(the)h(RA)f(and)h(DEC)f(argumen)n(ts)f(in)i(order)e
-(to)i(de\014ne)g(the)f Ft(")p Fj(user-de\014ned)p Ft(")f
-Fj(reference)h(frame)227 3221 y(used)35 b(b)n(y)g(USF2HL)g(and)g
-(HLF2US.)h(Ho)n(w)n(ev)n(er,)f(AST)p Ft(__)p Fj(BAD)g(can)g(b)r(e)g
-(supplied)h(for)e(RA)i(and)f(DEC)g(if)g(the)227 3321
-y(user-de\014ned)27 b(reference)g(frame)g(is)h(not)f(required.)p
-0 3505 3780 12 v 0 3637 a Fz(astSp)t(ecFluxF)-11 b(rame)176
-b Fe(Create)37 b(a)h(Sp)s(ecFluxF)-10 b(rame)176 b Fz(astSp)t(ecFluxF)
--11 b(rame)0 3811 y Fd(Description:)44 b Fj(This)28 b(function)g
-(creates)f(a)g(new)g(Sp)r(ecFluxF)-7 b(rame)28 b(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 3932 y(A)g(Sp)r(ecFluxF)-7
-b(rame)27 b(com)n(bines)g(a)g(Sp)r(ecF)-7 b(rame)27 b(and)h(a)f(FluxF)
--7 b(rame)27 b(in)n(to)g(a)g(single)g(2-dimensional)f(comp)r(ound)227
-4032 y(F)-7 b(rame.)39 b(Suc)n(h)28 b(a)g(F)-7 b(rame)28
-b(can)f(for)h(instance)g(b)r(e)h(used)f(to)g(describ)r(e)g(a)g(Plot)g
-(of)g(a)g(sp)r(ectrum)g(in)h(whic)n(h)f(the)h(\014rst)227
-4132 y(axis)e(represen)n(ts)f(sp)r(ectral)h(p)r(osition)h(and)f(the)h
-(second)f(axis)g(represen)n(ts)f(\015ux.)0 4274 y Fd(Synopsis:)121
-b Ft(AstSpecFluxFrame)37 b Fi(\003)p Ft(astSpecFluxFram)o(e\()g
-(AstSpecFrame)i Fi(\003)p Ft(frame1,)h(AstFluxFrame)e
-Fi(\003)p Ft(frame2,)227 4373 y(const)k(char)g Fi(\003)p
-Ft(options,)e(...)85 b(\))0 4516 y Fd(P)m(arameters:)259
-4645 y(frame1)427 4744 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Sp)r(ecF)-7
-b(rame.)36 b(This)28 b(will)g(form)f(the)h(\014rst)f(axis)g(in)h(the)g
-(new)g(Sp)r(ecFluxF)-7 b(rame.)259 4870 y Fd(frame2)427
-4970 y Fj(P)n(oin)n(ter)30 b(to)h(the)g(FluxF)-7 b(rame.)47
-b(This)31 b(will)g(form)g(the)h(second)e(axis)g(in)i(the)f(new)g(Sp)r
-(ecFluxF)-7 b(rame.)48 b(The)427 5069 y Ft(")p Fj(Sp)r(ecV)-7
-b(al)p Ft(")30 b Fj(attribute)h(of)f(this)h(FluxF)-7
-b(rame)30 b(is)g(not)h(used)f(b)n(y)g(the)h(Sp)r(ecFluxF)-7
-b(rame)31 b(class)e(and)i(so)e(ma)n(y)427 5169 y(b)r(e)f(set)g(to)f
-(AST)p Ft(__)p Fj(BAD)h(when)g(the)g(FluxF)-7 b(rame)27
-b(is)h(created.)259 5295 y Fd(options)427 5394 y Fj(P)n(oin)n(ter)f(to)
-h(a)g(n)n(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 5494 y(assignmen)n(ts)f
-(to)g(b)r(e)h(used)g(for)f(initialising)h(the)g(new)g(Sp)r(ecFluxF)-7
-b(rame.)37 b(The)28 b(syn)n(tax)f(used)g(is)h(iden)n(tical)427
-5593 y(to)h(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-5693 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)p eop end
-%%Page: 349 359
-TeXDict begin 349 358 bop 3643 52 a FF(349)259 351 y
-Fd(...)427 451 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 551 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 650 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 750 y Fj(function\).)0 911 y
-Fd(Returned)32 b(V)-8 b(alue:)259 1048 y(astSp)s(ecFluxF)g(rame\(\))427
-1147 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecFluxF)-7
-b(rame.)0 1309 y Fd(Notes:)340 1591 y Fi(\017)45 b Fj(The)25
-b(supplied)g(F)-7 b(rame)24 b(p)r(oin)n(ters)g(are)g(stored)f(directly)
--7 b(,)26 b(rather)d(than)i(b)r(eing)g(used)f(to)h(create)f(deep)g
-(copies)427 1691 y(of)g(the)h(supplied)f(F)-7 b(rames.)35
-b(This)24 b(means)g(that)g(an)n(y)f(subsequen)n(t)h(c)n(hanges)e(made)i
-(to)g(the)g(F)-7 b(rames)24 b(via)f(the)427 1791 y(supplied)28
-b(p)r(oin)n(ters)f(will)h(result)f(in)h(equiv)-5 b(alen)n(t)27
-b(c)n(hanges)g(b)r(eing)g(visible)h(in)g(the)g(Sp)r(ecFluxF)-7
-b(rame.)340 1923 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2023 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2185 y Fd(Status)33
-b(Handling)n(:)227 2331 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 2430 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 2530 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 2729 3780 12 v 0 2859 a Fz(astSp)t(ecF)-11 b(rame)562
-b Fe(Create)37 b(a)h(Sp)s(ecF)-10 b(rame)561 b Fz(astSp)t(ecF)-11
-b(rame)0 3048 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f
-(a)g(new)g(Sp)r(ecF)-7 b(rame)28 b(and)f(optionally)g(initialises)g
-(its)h(attributes.)227 3172 y(A)j(Sp)r(ecF)-7 b(rame)29
-b(is)h(a)g(sp)r(ecialised)f(form)h(of)g(one-dimensional)e(F)-7
-b(rame)30 b(whic)n(h)g(represen)n(ts)e(v)-5 b(arious)29
-b(co)r(ordinate)227 3272 y(systems)23 b(used)h(to)f(describ)r(e)g(p)r
-(ositions)g(within)h(an)f(electro-magnetic)f(sp)r(ectrum.)35
-b(The)24 b(particular)e(co)r(ordinate)227 3372 y(system)32
-b(to)g(b)r(e)g(used)g(is)g(sp)r(eci\014ed)g(b)n(y)f(setting)h(the)g(Sp)
-r(ecF)-7 b(rame's)32 b(System)g(attribute)g(\(the)g(default)h(is)f(w)n
-(a)n(v)n(e-)227 3471 y(length\))27 b(quali\014ed,)f(as)g(necessary)-7
-b(,)24 b(b)n(y)i(other)g(attributes)g(suc)n(h)g(as)f(the)i(rest)e
-(frequency)-7 b(,)26 b(the)h(standard)e(of)h(rest,)227
-3571 y(the)i(ep)r(o)r(c)n(h)g(of)f(observ)-5 b(ation,)27
-b(etc)g(\(see)h(the)g(description)f(of)g(the)h(System)g(attribute)g
-(for)f(details\).)227 3695 y(By)d(setting)f(a)h(v)-5
-b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h(attribute,)g(a)g(Sp)r(ecF)-7
-b(rame)23 b(can)h(b)r(e)g(made)f(to)h(represen)n(t)e(o\013sets)i(from)
-227 3795 y(a)j(giv)n(en)g(sp)r(ectral)g(p)r(osition,)h(rather)e(than)i
-(absolute)0 3944 y Fd(Synopsis:)121 b Ft(AstSpecFrame)38
-b Fi(\003)p Ft(astSpecFrame\()g(const)k(char)g Fi(\003)p
-Ft(options,)d(...)86 b(\))0 4093 y Fd(P)m(arameters:)259
-4230 y(options)427 4329 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4429 y(assignmen)n(ts)19
-b(to)g(b)r(e)i(used)e(for)h(initialising)f(the)h(new)g(Sp)r(ecF)-7
-b(rame.)34 b(The)20 b(syn)n(tax)f(used)g(is)h(iden)n(tical)g(to)f(that)
-427 4528 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4628 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)35 b(If)28
-b(no)g(initialisation)f(is)g(required,)g(a)g(zero-length)f(string)h(ma)
-n(y)g(b)r(e)h(supplied.)259 4761 y Fd(...)427 4860 y
-Fj(If)38 b(the)g Ft(")p Fj(options)p Ft(")e Fj(string)h(con)n(tains)f
-Ft(")p Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f
-(optional)g(list)h(of)f(additional)427 4960 y(argumen)n(ts)26
-b(ma)n(y)h(follo)n(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5
-b(alues)27 b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)
-37 b(The)427 5060 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5159 y Fj(function\).)0
-5321 y Fd(Returned)32 b(V)-8 b(alue:)259 5457 y(astSp)s(ecF)g(rame\(\))
-427 5557 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecF)-7
-b(rame.)0 5718 y Fd(Examples:)p eop end
-%%Page: 350 360
-TeXDict begin 350 359 bop 0 52 a FF(350)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 352 y Fq(frame)47
-b(=)g(astSpecFrame\()d Ft("")j Fq(\);)427 451 y Fj(Creates)36
-b(a)g(Sp)r(ecF)-7 b(rame)36 b(to)g(describ)r(e)g(the)h(default)g(w)n(a)
-n(v)n(elength)d(sp)r(ectral)i(co)r(ordinate)g(system.)63
-b(The)427 551 y(RestF)-7 b(req)39 b(attribute)g(\(rest)f(frequency\))h
-(is)g(unsp)r(eci\014ed,)j(so)c(it)i(will)f(not)g(b)r(e)g(p)r(ossible)f
-(to)h(align)f(this)427 650 y(Sp)r(ecF)-7 b(rame)24 b(with)h(another)e
-(Sp)r(ecF)-7 b(rame)24 b(on)f(the)i(basis)e(of)h(a)g(v)n(elo)r(cit)n
-(y-based)e(system.)35 b(The)25 b(standard)e(of)427 750
-y(rest)30 b(is)f(also)g(unsp)r(eci\014ed.)44 b(This)29
-b(means)h(that)g(alignmen)n(t)f(will)h(b)r(e)g(p)r(ossible)g(with)g
-(other)f(Sp)r(ecF)-7 b(rames,)427 849 y(but)31 b(no)g(correction)e
-(will)h(b)r(e)i(made)e(for)g(Doppler)g(shift)i(caused)e(b)n(y)g(c)n
-(hange)f(of)i(rest)f(frame)g(during)g(the)427 949 y(alignmen)n(t.)227
-1068 y Fq(frame)47 b(=)g(astSpecFrame\()d Ft(")p Fq(System=VELO,)g
-(RestFreq=1.0E15,)g(StdOfRest=LSRK)p Ft(")227 1168 y
-Fq(\);)427 1251 y Fj(Creates)39 b(a)h(Sp)r(ecF)-7 b(rame)40
-b(describing)f(a)h(apparen)n(t)e(radial)h(v)n(elo)r(cit)n(y)h(\()p
-Ft(")p Fj(VELO)p Ft(")p Fj(\))f(axis)g(with)h(rest)g(fre-)427
-1351 y(quency)35 b(1.0E15)e(Hz)i(\(ab)r(out)g(3000)f(Angstroms\),)i
-(measured)e(in)h(the)h(kinematic)f(Lo)r(cal)f(Standard)h(of)427
-1450 y(Rest)f(\()p Ft(")p Fj(LSRK)p Ft(")p Fj(\).)56
-b(Since)34 b(the)g(source)f(p)r(osition)h(has)f(not)h(b)r(een)h(sp)r
-(eci\014ed)f(\(using)g(attributes)g(RefRA)427 1550 y(and)c(RefDec\),)i
-(it)f(will)g(only)e(b)r(e)i(p)r(ossible)f(to)g(align)g(this)g(Sp)r(ecF)
--7 b(rame)30 b(with)h(other)f(Sp)r(ecF)-7 b(rames)30
-b(whic)n(h)427 1650 y(are)d(also)f(measured)h(in)h(the)g(LSRK)f
-(standard)g(of)g(rest.)0 1810 y Fd(Notes:)340 2091 y
-Fi(\017)45 b Fj(When)34 b(con)n(v)n(ersion)d(b)r(et)n(w)n(een)h(t)n(w)n
-(o)h(Sp)r(ecF)-7 b(rames)32 b(is)h(requested)g(\(as)f(when)h(supplying)
-g(Sp)r(ecF)-7 b(rames)33 b(to)427 2191 y(astCon)n(v)n(ert\),)40
-b(accoun)n(t)e(will)h(b)r(e)g(tak)n(en)f(of)g(the)h(nature)f(of)h(the)g
-(sp)r(ectral)f(co)r(ordinate)f(systems)h(they)427 2290
-y(represen)n(t,)e(together)e(with)h(an)n(y)f(qualifying)h(rest)f
-(frequency)-7 b(,)36 b(standard)e(of)h(rest,)h(ep)r(o)r(c)n(h)f(v)-5
-b(alues,)36 b(etc.)427 2390 y(The)26 b(AlignSystem)f(and)g
-(AlignStdOfRest)h(attributes)f(will)h(also)e(b)r(e)i(tak)n(en)e(in)n
-(to)i(accoun)n(t.)35 b(The)25 b(results)427 2490 y(will)34
-b(therefore)f(fully)h(re\015ect)g(the)g(relationship)e(b)r(et)n(w)n
-(een)i(p)r(ositions)f(measured)g(in)h(the)g(t)n(w)n(o)f(systems.)427
-2589 y(In)e(addition,)g(an)n(y)f(di\013erence)h(in)g(the)g(Unit)g
-(attributes)g(of)f(the)h(t)n(w)n(o)f(systems)g(will)h(also)f(b)r(e)h
-(tak)n(en)f(in)n(to)427 2689 y(accoun)n(t.)340 2820 y
-Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g
-(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g
-(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 2920
-y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f
-(an)n(y)g(reason.)p 0 3116 3780 12 v 0 3247 a Fz(astSp)t(ecMap)705
-b Fe(Create)37 b(a)i(Sp)s(ecMap)706 b Fz(astSp)t(ecMap)0
-3433 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(Sp)r(ecMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-3557 y(An)e(Sp)r(ecMap)e(is)h(a)f(sp)r(ecialised)h(form)f(of)h(Mapping)
-f(whic)n(h)h(can)f(b)r(e)h(used)g(to)g(represen)n(t)e(a)i(sequence)f
-(of)h(con)n(v)n(er-)227 3656 y(sions)i(b)r(et)n(w)n(een)h(standard)e
-(sp)r(ectral)h(co)r(ordinate)f(systems.)36 b(This)27
-b(includes)g(con)n(v)n(ersions)c(b)r(et)n(w)n(een)k(frequency)-7
-b(,)227 3756 y(w)n(a)n(v)n(elength,)36 b(and)f(v)-5 b(arious)34
-b(forms)h(of)g(v)n(elo)r(cit)n(y)-7 b(,)37 b(as)d(w)n(ell)h(as)g(con)n
-(v)n(ersions)e(b)r(et)n(w)n(een)i(di\013eren)n(t)h(standards)e(of)227
-3856 y(rest.)227 3979 y(When)25 b(a)g(Sp)r(ecMap)f(is)h(\014rst)f
-(created,)h(it)g(simply)g(p)r(erforms)e(a)i(unit)g(\(n)n(ull\))g
-(Mapping.)36 b(Using)24 b(the)h(astSp)r(ecAdd)227 4079
-y(function,)44 b(a)c(series)f(of)h(co)r(ordinate)e(con)n(v)n(ersion)g
-(steps)i(ma)n(y)f(then)i(b)r(e)f(added,)j(selected)d(from)g(the)g(list)
-h(of)227 4179 y(supp)r(orted)25 b(con)n(v)n(ersions.)33
-b(This)25 b(allo)n(ws)f(m)n(ulti-step)h(con)n(v)n(ersions)d(b)r(et)n(w)
-n(een)j(a)g(v)-5 b(ariet)n(y)24 b(of)g(sp)r(ectral)h(co)r(ordinate)227
-4278 y(systems)i(to)h(b)r(e)g(assem)n(bled)f(out)g(of)h(the)g(building)
-g(blo)r(c)n(ks)e(pro)n(vided)h(b)n(y)g(this)h(class.)227
-4402 y(F)-7 b(or)22 b(details)g(of)h(the)f(individual)h(co)r(ordinate)e
-(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)22 b(see)g(the)h(description)f
-(of)g(the)h(astSp)r(ecAdd)227 4502 y(function.)227 4626
-y(Con)n(v)n(ersions)k(are)g(a)n(v)-5 b(ailable)28 b(to)h(transform)e(b)
-r(et)n(w)n(een)i(standards)f(of)h(rest.)40 b(Suc)n(h)29
-b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)227 4725 y(the)23
-b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f(This)h
-(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 4825 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 4924
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 5024 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-5124 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 5223 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-5323 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 5423 y(for)27 b(axes)g(2)g(and)h(3)f(from)g(input)h
-(to)g(output\).)0 5571 y Fd(Synopsis:)121 b Ft(AstSpecMap)39
-b Fi(\003)p Ft(astSpecMap\()g(int)j(nin,)g(int)g(flags,)g(const)f(char)
-h Fi(\003)p Ft(options,)e(...)86 b(\))0 5718 y Fd(P)m(arameters:)p
-eop end
-%%Page: 351 361
-TeXDict begin 351 360 bop 3643 52 a FF(351)259 351 y
-Fd(nin)427 451 y Fj(The)22 b(n)n(um)n(b)r(er)g(of)g(inputs)h(to)f(the)g
-(Mapping)g(\(this)h(will)f(also)f(equal)h(the)g(n)n(um)n(b)r(er)g(of)g
-(outputs\).)36 b(This)22 b(v)-5 b(alue)427 551 y(m)n(ust)33
-b(b)r(e)g(either)f(1)g(or)g(3.)51 b(In)33 b(either)f(case,)h(the)g
-(\014rst)f(input)h(and)g(output)g(corresp)r(oindis)d(the)j(sp)r(ectral)
-427 650 y(axis.)45 b(F)-7 b(or)30 b(a)g(3-axis)f(Sp)r(ecMap,)j(the)f
-(second)f(and)g(third)h(axes)f(giv)n(e)f(the)i(RA)g(and)g(DEC)f
-(\(J2000)f(FK5\))427 750 y(of)k(the)g(source.)51 b(This)32
-b(p)r(ositional)g(information)g(is)h(used)f(b)n(y)h(con)n(v)n(ersions)d
-(whic)n(h)i(transform)g(b)r(et)n(w)n(een)427 849 y(standards)19
-b(of)i(rest,)g(and)f(replaces)f(the)i Ft(")p Fj(RA)p
-Ft(")f Fj(and)g Ft(")p Fj(DEC)p Ft(")f Fj(argumen)n(ts)g(for)h(the)h
-(individual)f(con)n(v)n(ersions)427 949 y(listed)28 b(in)g(description)
-f(of)h(the)g Ft(")p Fj(Sp)r(ecAdd)p Ft(")f Fj(function.)259
-1094 y Fd(\015ags)427 1194 y Fj(This)h(parameter)e(is)h(reserv)n(ed)f
-(for)h(future)h(use)g(and)f(should)h(curren)n(tly)e(alw)n(a)n(ys)g(b)r
-(e)i(set)f(to)h(zero.)259 1339 y Fd(options)427 1439
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-1538 y(assignmen)n(ts)23 b(to)h(b)r(e)h(used)f(for)g(initialising)g
-(the)g(new)h(Sp)r(ecMap.)35 b(The)25 b(syn)n(tax)e(used)h(is)g(iden)n
-(tical)g(to)g(that)427 1638 y(for)i(the)h(astSet)g(function)g(and)g(ma)
-n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r
-(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p
-Ft(")g Fj(sym)n(b)r(ols)427 1738 y(in)i(the)g(normal)f(w)n(a)n(y)-7
-b(.)35 b(If)28 b(no)g(initialisation)f(is)g(required,)g(a)g
-(zero-length)f(string)h(ma)n(y)g(b)r(e)h(supplied.)259
-1883 y Fd(...)427 1983 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2082 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 2182 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 2281 y Fj(function\).)0 2468
-y Fd(Returned)32 b(V)-8 b(alue:)259 2629 y(astSp)s(ecMap\(\))427
-2729 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Sp)r(ecMap.)0
-2916 y Fd(Notes:)340 3223 y Fi(\017)45 b Fj(The)32 b(nature)e(and)i
-(units)f(of)g(the)h(co)r(ordinate)e(v)-5 b(alues)31 b(supplied)h(for)e
-(the)i(\014rst)f(input)h(\(i.e.)49 b(the)31 b(sp)r(ectral)427
-3323 y(input\))23 b(of)e(a)g(Sp)r(ecMap)h(m)n(ust)g(b)r(e)g
-(appropriate)d(to)j(the)g(\014rst)f(con)n(v)n(ersion)e(step)j(applied)f
-(b)n(y)g(the)h(Sp)r(ecMap.)427 3422 y(F)-7 b(or)19 b(instance,)j(if)e
-(the)g(\014rst)f(con)n(v)n(ersion)f(step)i(is)f Ft(")p
-Fj(FR)-7 b(TO)n(VL)p Ft(")19 b Fj(\(frequency)h(to)f(relativistic)g(v)n
-(elo)r(cit)n(y\),)i(then)427 3522 y(the)34 b(co)r(ordinate)e(v)-5
-b(alues)32 b(for)h(the)h(\014rst)e(input)i(should)f(b)r(e)h(frequency)e
-(in)i(units)f(of)g(Hz.)54 b(Similarly)-7 b(,)34 b(the)427
-3622 y(nature)k(and)h(units)g(of)f(the)h(co)r(ordinate)f(v)-5
-b(alues)38 b(returned)g(b)n(y)g(a)h(Sp)r(ecMap)f(will)h(b)r(e)g
-(determined)g(b)n(y)427 3721 y(the)c(last)f(con)n(v)n(ersion)e(step)i
-(applied)g(b)n(y)g(the)h(Sp)r(ecMap.)56 b(F)-7 b(or)34
-b(instance,)h(if)g(the)g(last)f(con)n(v)n(ersion)d(step)427
-3821 y(is)k Ft(")p Fj(VL)-7 b(TO)n(V)n(O)p Ft(")33 b
-Fj(\(relativistic)h(v)n(elo)r(cit)n(y)g(to)g(optical)g(v)n(elo)r(cit)n
-(y\),)i(then)f(the)g(co)r(ordinate)f(v)-5 b(alues)34
-b(for)g(the)427 3921 y(\014rst)29 b(output)g(will)g(b)r(e)g(optical)g
-(v)n(elo)r(cit)n(y)e(in)j(units)f(of)f(metres)h(p)r(er)g(second.)39
-b(See)29 b(the)g(description)f(of)h(the)427 4020 y(astSp)r(ecAdd)f
-(function)h(for)e(the)h(units)g(exp)r(ected)g(and)f(returned)g(b)n(y)g
-(eac)n(h)g(con)n(v)n(ersion.)340 4165 y Fi(\017)45 b
-Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 4265 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 4489 3780 12 v 0 4621 a Fz(astSphMap)776
-b Fe(Create)38 b(a)g(SphMap)777 b Fz(astSphMap)0 4834
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(SphMap)h(and)g(optionally)e(initialises)i(its)f(attributes.)227
-4971 y(A)21 b(SphMap)g(is)f(a)g(Mapping)h(whic)n(h)f(transforms)f(p)r
-(oin)n(ts)i(from)f(a)g(3-dimensional)f(Cartesian)g(co)r(ordinate)h
-(system)227 5071 y(in)n(to)28 b(a)g(2-dimensional)f(spherical)g(co)r
-(ordinate)g(system)h(\(longitude)g(and)g(latitude)g(on)g(a)g(unit)h
-(sphere)e(cen)n(tred)227 5171 y(at)33 b(the)f(origin\).)51
-b(It)33 b(w)n(orks)d(b)n(y)j(regarding)d(the)j(input)g(co)r(ordinates)e
-(as)h(p)r(osition)g(v)n(ectors)f(and)h(\014nding)h(their)227
-5270 y(in)n(tersection)25 b(with)h(the)h(sphere)e(surface.)35
-b(The)26 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)g(pro)r(duces)
-h(p)r(oin)n(ts)h(whic)n(h)g(are)227 5370 y(a)h(unit)i(distance)e(from)g
-(the)h(origin)f(\(i.e.)37 b(unit)28 b(v)n(ectors\).)0
-5544 y Fd(Synopsis:)121 b Ft(AstSphMap)40 b Fi(\003)p
-Ft(astSphMap\()f(const)i(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 5718 y Fd(P)m(arameters:)p eop end
-%%Page: 352 362
-TeXDict begin 352 361 bop 0 52 a FF(352)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(options)427
-451 y Fj(P)n(oin)n(ter)d(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-551 y(assignmen)n(ts)d(to)h(b)r(e)h(used)f(for)g(initialising)g(the)h
-(new)f(SphMap.)37 b(The)26 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)
-g(that)427 650 y(for)g(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 881 y
-Fd(...)427 980 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1080 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1179 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1279 y Fj(function\).)0 1439
-y Fd(Returned)32 b(V)-8 b(alue:)259 1573 y(astSphMap\(\))427
-1673 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(SphMap.)0
-1833 y Fd(Notes:)340 2113 y Fi(\017)45 b Fj(The)39 b(spherical)f(co)r
-(ordinates)f(are)h(longitude)g(\(p)r(ositiv)n(e)h(an)n(ti-clo)r(c)n
-(kwise)e(lo)r(oking)h(from)g(the)h(p)r(ositiv)n(e)427
-2213 y(latitude)24 b(p)r(ole\))f(and)g(latitude.)36 b(The)23
-b(Cartesian)f(co)r(ordinates)g(are)g(righ)n(t-handed,)h(with)g(the)h(x)
-f(axis)f(\(axis)427 2313 y(1\))28 b(at)f(zero)g(longitude)g(and)h
-(latitude,)g(and)f(the)h(z)g(axis)e(\(axis)i(3\))f(at)g(the)h(p)r
-(ositiv)n(e)g(latitude)g(p)r(ole.)340 2443 y Fi(\017)45
-b Fj(A)n(t)28 b(either)g(p)r(ole,)f(the)h(longitude)g(is)f(set)h(to)f
-(the)h(v)-5 b(alue)28 b(of)f(the)h(P)n(olarLong)d(attribute.)340
-2574 y Fi(\017)45 b Fj(If)28 b(the)f(Cartesian)f(co)r(ordinates)g(are)g
-(all)h(zero,)f(then)h(the)h(longitude)f(and)g(latitude)g(are)f(set)h
-(to)g(the)h(v)-5 b(alue)427 2674 y(AST)p Ft(__)p Fj(BAD.)340
-2805 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-2904 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 3064 y Fd(Status)33 b(Handling)n(:)227
-3210 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 3310 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-3410 y Fi(\003)p Fj(status)p Ft(")p Fj(.)-2 3557 y Fd(Status)33
-b(Handling)n(:)227 3703 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3803 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3902 y Fi(\003)p Fj(status)p Ft(")p Fj(.)-2
-4050 y Fd(Status)33 b(Handling)n(:)227 4196 y Fj(The)d(protected)g(in)n
-(terface)f(to)g(this)h(function)h(includes)f(an)f(extra)g(parameter)f
-(at)i(the)g(end)g(of)g(the)g(parameter)227 4296 y(list)37
-b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)
-r(oin)n(ter)g(to)h(the)g(in)n(teger)e(inherited)i(status)f(v)-5
-b(ariable:)54 b Ft(")p Fj(in)n(t)227 4395 y Fi(\003)p
-Fj(status)p Ft(")p Fj(.)p 0 4590 3780 12 v 0 4721 a Fz(astStatus)801
-4722 y Fe(Obtain)38 b(the)h(curren)m(t)e(AST)i(error)e(status)h(v)-7
-b(alue)3236 4721 y Fz(astStatus)0 4884 y Fd(Description:)44
-b Fj(This)28 b(function)g(returns)f(the)h(curren)n(t)f(v)-5
-b(alue)27 b(of)h(the)g(AST)g(error)d(status.)0 5031 y
-Fd(Synopsis:)121 b Ft(int)42 b(astStatus)0 5178 y Fd(Returned)32
-b(V)-8 b(alue:)259 5313 y(astStatus)427 5413 y Fj(The)28
-b(AST)g(error)e(status)h(v)-5 b(alue.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 353 363
-TeXDict begin 353 362 bop 3643 52 a FF(353)340 351 y
-Fi(\017)45 b Fj(If)28 b(the)g(AST)g(error)d(status)i(is)h(set)f(to)g
-(an)g(error)f(v)-5 b(alue)27 b(\(after)g(an)g(error\),)f(most)h(AST)h
-(functions)g(will)g(not)427 451 y(execute)h(and)g(will)h(simply)f
-(return)g(without)g(action.)41 b(T)-7 b(o)29 b(clear)f(the)i(error)d
-(status)i(and)g(restore)f(normal)427 551 y(b)r(eha)n(viour,)f(use)g
-(astClearStatus.)p 0 746 3780 12 v 0 878 a Fz(astStcCatalogEn)l(tryLo)t
-(cation)1808 894 y Fe(Create)1860 994 y(a)1808 1094 y(Stc-)1808
-1193 y(Cat-)1841 1293 y(a-)1825 1392 y(lo-)1808 1492
-y(gEn-)1808 1592 y(try-)1808 1705 y(Lo-)1815 1805 y(ca-)1808
-1904 y(tion)2124 878 y Fz(astStcCatalogEn)l(tryLo)t(cation)0
-2066 y Fd(Description:)44 b Fj(This)39 b(function)g(creates)f(a)g(new)h
-(StcCatalogEn)n(tryLo)r(cation)c(and)k(optionally)f(initialises)g(its)h
-(at-)227 2166 y(tributes.)227 2289 y(The)20 b(StcCatalogEn)n(tryLo)r
-(cation)c(class)i(is)h(a)g(sub-class)f(of)h(Stc)h(used)f(to)h(describ)r
-(e)e(the)i(co)n(v)n(erage)c(of)k(the)f(datasets)227 2389
-y(con)n(tained)27 b(in)h(some)f(V)n(O)g(resource.)227
-2513 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fi(\030)p
-Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 2660 y Fd(Synopsis:)121
-b Ft(AstStcCatalogEnt)o(ry)o(Loc)o(at)o(ion)37 b Fi(\003)p
-Ft(astStcCatalogE)o(ntr)o(yL)o(oca)o(ti)o(on)o(\()h(AstRegion)h
-Fi(\003)p Ft(region,)i(int)227 2760 y(ncoords,)g(AstKeyMap)e
-Fi(\003)p Ft(coords[],)h(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2907 y Fd(P)m(arameters:)259 3042 y(region)427
-3142 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-3273 y Fd(nco)s(ords)427 3372 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-3503 y Fd(co)s(ords)427 3603 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3702 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3802 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3902 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 4001 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 4101 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-4201 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-4300 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 4400 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 4499 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4630
-y Fd(options)427 4730 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4830 y(assignmen)n(ts)d(to)g(b)r(e)h(used)f(for)g
-(initialising)h(the)f(new)h(StcCatalogEn)n(tryLo)r(cation.)33
-b(The)26 b(syn)n(tax)e(used)i(is)427 4929 y(iden)n(tical)h(to)f(that)h
-(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)427 5029 y(b)n(y)i Ft(")p Fj(\045)p Ft(")f
-Fj(sym)n(b)r(ols)f(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259
-5160 y Fd(...)427 5260 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5359 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5459 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5558 y Fj(function\).)0 5718
-y Fd(Returned)32 b(V)-8 b(alue:)p eop end
-%%Page: 354 364
-TeXDict begin 354 363 bop 0 52 a FF(354)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(astStcCatalogEn)m
-(tryLo)s(cation\(\))427 451 y Fj(A)e(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcCatalogEn)n(tryLo)r(cation.)0 611 y Fd(Notes:)340
-891 y Fi(\017)45 b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)
-f(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 991 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 1122 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1221 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1417 3780 12 v 0 1548 a Fz(astStcObsDataLo)t(cation)1672
-1547 y Fe(Create)37 b(a)1591 1647 y(StcObsDat-)1637 1746
-y(aLo)s(cation)2398 1548 y Fz(astStcObsDataLo)t(cation)0
-1908 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(StcObsDataLo)r(cation)g(and)g(optionally)g(initialises)g(its)h
-(attributes.)227 2031 y(The)j(StcObsDataLo)r(cation)e(class)h(is)g(a)g
-(sub-class)f(of)i(Stc)g(used)f(to)g(describ)r(e)h(the)g(co)n(v)n(erage)
-c(of)k(the)f(datasets)227 2131 y(con)n(tained)d(in)h(some)f(V)n(O)g
-(resource.)227 2254 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2402 y Fd(Synopsis:)121 b Ft(AstStcObsDataLoc)o(at)o(ion)37
-b Fi(\003)p Ft(astStcObsDataL)o(oca)o(ti)o(on\()g(AstRegion)j
-Fi(\003)p Ft(region,)g(int)i(ncoords,)227 2501 y(AstKeyMap)e
-Fi(\003)p Ft(coords[],)g(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2649 y Fd(P)m(arameters:)259 2783 y(region)427
-2883 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-3014 y Fd(nco)s(ords)427 3113 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-3244 y Fd(co)s(ords)427 3344 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3443 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3543 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3643 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 3742 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 3842 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-3942 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-4041 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 4141 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 4240 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4371
-y Fd(options)427 4471 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4571 y(assignmen)n(ts)37 b(to)h(b)r(e)g(used)g(for)f
-(initialising)h(the)g(new)g(StcObsDataLo)r(cation.)67
-b(The)38 b(syn)n(tax)f(used)h(is)427 4670 y(iden)n(tical)27
-b(to)f(that)h(for)f(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)427 4770 y(b)n(y)i Ft(")p Fj(\045)p Ft(")f
-Fj(sym)n(b)r(ols)f(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259
-4901 y Fd(...)427 5000 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5100 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5199 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5299 y Fj(function\).)0 5459
-y Fd(Returned)32 b(V)-8 b(alue:)259 5593 y(astStcObsDataLo)s
-(cation\(\))427 5693 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcObsDataLo)r(cation.)p eop end
-%%Page: 355 365
-TeXDict begin 355 364 bop 3643 52 a FF(355)0 351 y Fd(Notes:)340
-637 y Fi(\017)45 b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)
-f(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 737 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 872 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 971 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1174 3780 12 v 0 1306 a Fz(astStcResourcePro\014le)1483
-1304 y Fe(Create)37 b(a)h(StcRe-)1563 1404 y(sourcePro\014le)2502
-1306 y Fz(astStcResourcePro\014le)0 1573 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(StcResourcePro\014le)f
-(and)h(optionally)g(initialises)g(its)h(attributes.)227
-1699 y(The)36 b(StcResourcePro\014le)d(class)i(is)h(a)f(sub-class)f(of)
-i(Stc)g(used)g(to)f(describ)r(e)h(the)g(co)n(v)n(erage)d(of)i(the)h
-(datasets)227 1799 y(con)n(tained)27 b(in)h(some)f(V)n(O)g(resource.)
-227 1925 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p
-Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 2078
-y Fd(Synopsis:)121 b Ft(AstStcResourcePr)o(of)o(ile)37
-b Fi(\003)p Ft(astStcResource)o(Pro)o(fi)o(le\()g(AstRegion)j
-Fi(\003)p Ft(region,)g(int)i(ncoords,)227 2178 y(AstKeyMap)e
-Fi(\003)p Ft(coords[],)g(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2331 y Fd(P)m(arameters:)259 2471 y(region)427
-2571 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2705 y Fd(nco)s(ords)427 2805 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-2939 y Fd(co)s(ords)427 3039 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3139 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3238 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3338 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 3438 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 3537 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-3637 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-3736 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 3836 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 3936 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4070
-y Fd(options)427 4170 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4270 y(assignmen)n(ts)18 b(to)g(b)r(e)h(used)f(for)g
-(initialising)h(the)g(new)f(StcResourcePro\014le.)32
-b(The)18 b(syn)n(tax)g(used)g(is)h(iden)n(tical)427 4369
-y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-4469 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4603 y Fd(...)427 4703 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4803 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4902 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5002 y Fj(function\).)0
-5167 y Fd(Returned)32 b(V)-8 b(alue:)259 5307 y
-(astStcResourcePro\014le\(\))427 5407 y Fj(A)28 b(p)r(oin)n(ter)f(to)h
-(the)g(new)g(StcResourcePro\014le.)0 5572 y Fd(Notes:)p
-eop end
-%%Page: 356 366
-TeXDict begin 356 365 bop 0 52 a FF(356)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f(supplied)h
-(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n(t)g(c)n
-(hanges)f(made)427 451 y(to)j(the)g(encapsulated)f(Region)g(using)g
-(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i(e\013ect)g
-(on)f(the)h(Stc.)340 579 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 679 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 836 y Fd(Status)33
-b(Handling)n(:)227 982 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)
-h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g
-(the)g(parameter)227 1081 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1181 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1371 3780
-12 v 0 1503 a Fz(astStcSearc)l(hLo)t(cation)1672 1501
-y Fe(Create)37 b(a)1417 1601 y(StcSearc)m(hLo)s(cation)2526
-1503 y Fz(astStcSearc)l(hLo)t(cation)0 1757 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(StcSearc)n(hLo)r(cation)f
-(and)i(optionally)e(initialises)i(its)f(attributes.)227
-1879 y(The)h(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)f(sub-class)f(of)
-i(Stc)g(used)f(to)h(describ)r(e)f(the)h(co)n(v)n(erage)d(of)i(a)h(V)n
-(O)f(query)-7 b(.)227 2001 y(See)28 b(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2146 y Fd(Synopsis:)121 b Ft(AstStcResourcePr)o(of)o(ile)37
-b Fi(\003)p Ft(astStcSearchLo)o(cat)o(io)o(n\()g(AstRegion)j
-Fi(\003)p Ft(region,)g(int)j(ncoords,)227 2246 y(AstKeyMap)d
-Fi(\003)p Ft(coords[],)g(const)h(char)h Fi(\003)p Ft(options,)e(...)86
-b(\))0 2390 y Fd(P)m(arameters:)259 2522 y(region)427
-2622 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(encapsulated)f(Region.)259
-2750 y Fd(nco)s(ords)427 2849 y Fj(The)h(length)g(of)f(the)h
-Ft(")p Fj(co)r(ords)p Ft(")e Fj(arra)n(y)-7 b(.)34 b(Supply)28
-b(zero)f(if)h Ft(")p Fj(co)r(ords)p Ft(")d Fj(is)j(NULL.)259
-2977 y Fd(co)s(ords)427 3077 y Fj(P)n(oin)n(ter)k(to)h(an)g(arra)n(y)d
-(holding)j Ft(")p Fj(nco)r(ords)p Ft(")e Fj(AstKeyMap)i(p)r(oin)n(ters)
-f(\(if)i Ft(")p Fj(nco)r(ords)p Ft(")d Fj(is)i(zero,)g(the)h(sup-)427
-3177 y(plied)44 b(v)-5 b(alue)43 b(is)g(ignored\).)83
-b(Eac)n(h)42 b(supplied)i(KeyMap)e(describ)r(es)h(the)g(con)n(ten)n(ts)
-g(of)g(a)g(single)f(STC)427 3276 y Fl(<)p Fj(AstroCo)r(ords)p
-Fl(>)16 b Fj(elemen)n(t,)k(and)e(should)h(ha)n(v)n(e)e(elemen)n(ts)h
-(with)h(k)n(eys)e(giv)n(en)h(b)n(y)g(constan)n(ts)f(AST)p
-Ft(__)p Fj(STCNAME,)427 3376 y(AST)p Ft(__)p Fj(STCV)-9
-b(ALUE,)18 b(AST)p Ft(__)p Fj(STCERR)n(OR,)g(AST)p Ft(__)p
-Fj(STCRES,)f(AST)p Ft(__)p Fj(STCSIZE,)h(AST)p Ft(__)p
-Fj(STCPIXSZ.)427 3475 y(An)n(y)23 b(of)g(these)g(elemen)n(ts)f(ma)n(y)g
-(b)r(e)i(omitted,)g(but)f(no)g(other)f(elemen)n(ts)g(should)h(b)r(e)g
-(included.)36 b(If)23 b(supplied,)427 3575 y(the)35 b(AST)p
-Ft(__)p Fj(STCNAME)f(elemen)n(t)g(should)g(b)r(e)h(a)e(v)n(ector)g(of)h
-(c)n(haracter)e(string)i(p)r(oin)n(ters)f(holding)h(the)427
-3675 y Ft(")p Fj(Name)p Ft(")i Fj(item)i(for)e(eac)n(h)g(axis)g(in)i
-(the)f(co)r(ordinate)f(system)g(represen)n(ted)g(b)n(y)h
-Ft(")p Fj(region)p Ft(")p Fj(.)62 b(An)n(y)37 b(other)427
-3774 y(supplied)c(elemen)n(ts)f(should)f(b)r(e)i(scalar)d(elemen)n(ts,)
-j(eac)n(h)f(holding)f(a)h(p)r(oin)n(ter)g(to)f(a)h(Region)f(describing)
-427 3874 y(the)23 b(asso)r(ciated)f(item)h(of)g(ancillary)f
-(information)g(\(error,)g(resolution,)h(size,)g(pixel)g(size)g(or)e(v)
--5 b(alue\).)36 b(These)427 3974 y(Regions)27 b(should)g(describ)r(e)h
-(a)f(v)n(olume)g(within)h(the)g(co)r(ordinate)e(system)i(represen)n
-(ted)e(b)n(y)h Ft(")p Fj(region)p Ft(")p Fj(.)259 4102
-y Fd(options)427 4201 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 4301 y(assignmen)n(ts)18 b(to)h(b)r(e)g(used)g(for)g
-(initialising)g(the)g(new)g(StcSearc)n(hLo)r(cation.)33
-b(The)19 b(syn)n(tax)f(used)h(is)g(iden)n(tical)427 4401
-y(to)29 b(that)h(for)f(the)g(astSet)g(function)h(and)f(ma)n(y)g
-(include)g Ft(")p Fj(prin)n(tf)p Ft(")g Fj(format)g(sp)r(eci\014ers)f
-(iden)n(ti\014ed)i(b)n(y)f Ft(")p Fj(\045)p Ft(")427
-4500 y Fj(sym)n(b)r(ols)e(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4628 y Fd(...)427 4728 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4828 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4927 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5027 y Fj(function\).)0
-5184 y Fd(Returned)32 b(V)-8 b(alue:)259 5316 y(astStcSearc)m(hLo)s
-(cation\(\))427 5415 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g
-(StcSearc)n(hLo)r(cation.)0 5572 y Fd(Notes:)p eop end
-%%Page: 357 367
-TeXDict begin 357 366 bop 3643 52 a FF(357)340 351 y
-Fi(\017)45 b Fj(A)27 b(deep)g(cop)n(y)e(is)h(tak)n(en)g(of)h(the)f
-(supplied)h(Region.)36 b(This)26 b(means)g(that)h(an)n(y)f(subsequen)n
-(t)g(c)n(hanges)f(made)427 451 y(to)j(the)g(encapsulated)f(Region)g
-(using)g(the)h(supplied)g(p)r(oin)n(ter)f(will)h(ha)n(v)n(e)e(no)i
-(e\013ect)g(on)f(the)h(Stc.)340 583 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 682 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)-2 843 y Fd(Status)33 b(Handling)n(:)227 989
-y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h(includes)f
-(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g(parameter)227
-1089 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62 b(This)37
-b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)e
-(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-1189 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 1386 3780
-12 v 0 1518 a Fz(astStcsChan)657 b Fe(Create)37 b(an)i(StcsChan)655
-b Fz(astStcsChan)0 1682 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(StcsChan)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 1806 y(A)33 b(StcsChan)f(is)g(a)g
-(sp)r(ecialised)g(form)g(of)g(Channel)g(whic)n(h)g(supp)r(orts)g(STC-S)
-h(I/O)e(op)r(erations.)50 b(W)-7 b(riting)32 b(an)227
-1905 y(Ob)5 b(ject)19 b(to)f(an)h(StcsChan)f(\(using)h(astW)-7
-b(rite\))19 b(will,)i(if)e(the)g(Ob)5 b(ject)19 b(is)f(suitable,)j
-(generate)c(an)i(STC-S)f(description)227 2005 y(of)23
-b(that)g(Ob)5 b(ject,)24 b(and)f(reading)f(from)g(an)h(StcsChan)g(will)
-g(create)f(a)h(new)g(Ob)5 b(ject)22 b(from)h(its)g(STC-S)g
-(description.)227 2129 y(Normally)-7 b(,)36 b(when)f(y)n(ou)g(use)f(an)
-h(StcsChan,)i(y)n(ou)d(should)h(pro)n(vide)f Ft(")p Fj(source)p
-Ft(")f Fj(and)h Ft(")p Fj(sink)p Ft(")g Fj(functions)i(whic)n(h)227
-2229 y(connect)e(it)h(to)g(an)f(external)f(data)h(store)g(b)n(y)g
-(reading)f(and)h(writing)g(the)h(resulting)f(text.)57
-b(These)34 b(functions)227 2328 y(should)40 b(p)r(erform)f(an)n(y)h
-(con)n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n
-(haracter)f(enco)r(dings)h(and)h(the)g(in)n(ternal)227
-2428 y(ASCI)r(I)31 b(enco)r(ding.)44 b(If)31 b(no)f(suc)n(h)g
-(functions)g(are)f(supplied,)i(a)f(Channel)g(will)h(read)e(from)h
-(standard)f(input)i(and)227 2527 y(write)d(to)f(standard)g(output.)0
-2676 y Fd(Synopsis:)121 b Ft(AstStcsChan)39 b Fi(\003)p
-Ft(astStcsChan\()f(const)k(char)f Fi(\003)p Ft(\()p Fi(\003)i
-Ft(source\)\()d(void)i(\),)h(void)f(\()p Fi(\003)g Ft(sink\)\()f(const)
-227 2776 y(char)h Fi(\003)h Ft(\),)g(const)f(char)g Fi(\003)p
-Ft(options,)d(...)86 b(\))0 2924 y Fd(P)m(arameters:)259
-3060 y(source)427 3159 y Fj(P)n(oin)n(ter)17 b(to)h(a)g(source)g
-(function)h(that)g(tak)n(es)e(no)h(argumen)n(ts)f(and)i(returns)e(a)h
-(p)r(oin)n(ter)h(to)f(a)g(n)n(ull-terminated)427 3259
-y(string.)54 b(This)33 b(function)h(will)f(b)r(e)h(used)f(b)n(y)g(the)h
-(StcsChan)f(to)g(obtain)g(lines)h(of)f(input)h(text.)54
-b(On)33 b(eac)n(h)427 3358 y(in)n(v)n(o)r(cation,)h(it)g(should)f
-(return)h(a)f(p)r(oin)n(ter)g(to)g(the)h(next)g(input)h(line)e(read)g
-(from)g(some)g(external)g(data)427 3458 y(store,)27 b(and)g(a)h(NULL)g
-(p)r(oin)n(ter)f(when)h(there)f(are)g(no)g(more)g(lines)g(to)h(read.)
-427 3574 y(If)g Ft(")p Fj(source)p Ft(")e Fj(is)h(NULL,)h(the)g
-(Channel)g(will)g(read)e(from)i(standard)e(input)j(instead.)259
-3706 y Fd(sink)427 3805 y Fj(P)n(oin)n(ter)22 b(to)g(a)h(sink)g
-(function)g(that)h(tak)n(es)e(a)g(p)r(oin)n(ter)h(to)f(a)h(n)n
-(ull-terminated)g(string)f(as)g(an)h(argumen)n(t)f(and)427
-3905 y(returns)28 b(v)n(oid.)37 b(This)28 b(function)h(will)f(b)r(e)h
-(used)f(b)n(y)g(the)g(StcsChan)g(to)g(deliv)n(er)f(lines)h(of)g(output)
-h(text.)39 b(On)427 4005 y(eac)n(h)31 b(in)n(v)n(o)r(cation,)h(it)h
-(should)f(deliv)n(er)f(the)h(con)n(ten)n(ts)f(of)h(the)h(string)e
-(supplied)i(to)e(some)h(external)f(data)427 4104 y(store.)427
-4220 y(If)d Ft(")p Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(StcsChan)g
-(will)g(write)f(to)h(standard)e(output)i(instead.)259
-4352 y Fd(options)427 4452 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 4551 y(assignmen)n(ts)23
-b(to)g(b)r(e)h(used)f(for)g(initialising)h(the)g(new)f(StcsChan.)35
-b(The)24 b(syn)n(tax)f(used)g(is)h(iden)n(tical)f(to)g(that)427
-4651 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-4750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4882
-y Fd(...)427 4982 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 5082 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 5181 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 5281 y Fj(function\).)0 5442
-y Fd(Returned)32 b(V)-8 b(alue:)259 5577 y(astStcsChan\(\))427
-5677 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(StcsChan.)p
-eop end
-%%Page: 358 368
-TeXDict begin 358 367 bop 0 52 a FF(358)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-632 y Fi(\017)45 b Fj(If)28 b(the)g(external)e(data)h(source)f(or)g
-(sink)i(uses)e(a)h(c)n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r
-(I,)g(the)f(supplied)427 732 y(source)i(and)g(sink)g(functions)h
-(should)f(translate)g(b)r(et)n(w)n(een)h(the)f(external)g(c)n(haracter)
-f(enco)r(ding)h(and)g(the)427 832 y(in)n(ternal)e(ASCI)r(I)i(enco)r
-(ding)e(used)g(b)n(y)h(AST.)340 963 y Fi(\017)45 b Fj(A)35
-b(n)n(ull)g(Ob)5 b(ject)35 b(p)r(oin)n(ter)g(\(AST)p
-Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g(if)g(this)g(function)h
-(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427 1063 y(AST)28
-b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p 0 1259 3780 12 v 0 1391 a Fz(astStripEscap)t(es)1101
-1389 y Fe(Remo)m(v)m(e)38 b(AST)g(escap)s(e)h(sequences)1556
-1504 y(from)f(a)g(string)2855 1391 y Fz(astStripEscap)t(es)0
-1690 y Fd(Description:)44 b Fj(This)25 b(function)h(remo)n(v)n(es)d
-(AST)j(escap)r(e)e(sequences)h(from)f(a)h(supplied)g(string,)g
-(returning)g(the)g(result-)227 1790 y(ing)32 b(text)g(as)f(the)h
-(function)g(v)-5 b(alue.)49 b(The)32 b(b)r(eha)n(viour)e(of)i(this)g
-(function)g(can)f(b)r(e)h(con)n(trolled)f(b)n(y)g(in)n(v)n(oking)f(the)
-227 1889 y(astEscap)r(es)h(function,)j(whic)n(h)e(can)g(b)r(e)g(used)h
-(to)f(supress)f(or)g(enable)h(the)h(remo)n(v)-5 b(al)31
-b(of)h(escap)r(e)f(sequences)h(b)n(y)227 1989 y(this)c(function.)227
-2113 y(AST)33 b(escap)r(e)e(sequences)h(are)f(used)h(b)n(y)f(the)i
-(Plot)e(class)h(to)g(mo)r(dify)g(the)g(app)r(earance)f(and)h(p)r
-(osition)g(of)g(sub-)227 2212 y(strings)27 b(within)h(a)f(plotted)h
-(text)g(string.)37 b(See)27 b(the)h Ft(")p Fj(Escap)r(e)p
-Ft(")e Fj(attribute)i(for)f(further)g(information.)0
-2360 y Fd(Synopsis:)121 b Ft(const)41 b(char)h Fi(\003)p
-Ft(astStripEscapes\()37 b(const)k(char)h Fi(\003)p Ft(text)g(\))0
-2508 y Fd(P)m(arameters:)259 2643 y(text)427 2743 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(string)f(to)g(b)r(e)h(c)n(hec)n(k)n(ed.)0
-2903 y Fd(Returned)k(V)-8 b(alue:)259 3038 y(astStripEscap)s(es\(\))427
-3138 y Fj(P)n(oin)n(ter)23 b(to)i(the)g(mo)r(di\014ed)g(string.)36
-b(If)25 b(no)f(escap)r(e)g(sequences)g(w)n(ere)g(found)h(in)g(the)g
-(supplied)g(string,)g(then)427 3238 y(a)g(cop)n(y)f(of)h(the)g
-(supplied)g(p)r(oin)n(ter)g(is)f(returned.)36 b(Otherwise,)25
-b(the)g(p)r(oin)n(ter)f(will)h(p)r(oin)n(t)g(to)g(a)g(static)f
-(bu\013er)427 3337 y(holding)32 b(the)g(mo)r(di\014ed)h(text.)50
-b(This)32 b(text)g(will)g(b)r(e)h(o)n(v)n(er-written)d(b)n(y)h
-(subsequen)n(t)h(in)n(v)n(o)r(cations)e(of)i(this)427
-3437 y(function.)38 b(If)29 b(the)f(astEscap)r(es)e(function)j(has)e(b)
-r(een)h(called)g(indicating)f(that)h(escap)r(e)g(sequences)f(should)427
-3537 y(not)h(b)r(e)g(stripp)r(ed,)g(then)g(the)g(supplied)g(string)f
-(is)g(returned)g(without)h(c)n(hange.)p 0 3733 V 0 3865
-a Fz(astSwitc)l(hMap)536 b Fe(Create)37 b(a)i(Switc)m(hMap)534
-b Fz(astSwitc)l(hMap)0 4051 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Switc)n(hMap)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 4174 y(A)34 b(Switc)n(hMap)e(is)h
-(a)g(Mapping)f(whic)n(h)h(represen)n(ts)f(a)g(set)h(of)g(alternate)f
-(Mappings,)i(eac)n(h)e(of)h(whic)n(h)g(is)g(used)227
-4274 y(to)d(transform)f(p)r(ositions)g(within)i(a)e(particular)g
-(region)f(of)i(the)g(input)h(or)e(output)h(co)r(ordinate)f(system)g(of)
-h(the)227 4374 y(Switc)n(hMap.)227 4497 y(A)k(Switc)n(hMap)e(can)h
-(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h(of)g(Mappings,)h(but)f(they)h
-(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)g(n)n(um-)227
-4597 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 4697
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 4796 y(represen)n(ts)33
-b(a)h Ft(")p Fj(route)p Ft(")f Fj(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fj(route)p Ft(")e
-Fj(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)227 4896 y(route)30
-b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g(the)g(input)
-h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n(tire)227
-4996 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r(e)h
-(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 5095 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 5195 y(called)31
-b(the)h Ft(")p Fj(selector)p Ft(")e Fj(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 5295 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fj(for-)227 5394 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fj(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-5494 y Ft(")p Fj(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fj(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-5593 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 5693 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)p eop end
-%%Page: 359 369
-TeXDict begin 359 368 bop 3643 52 a FF(359)227 351 y
-Fj(When)40 b(the)g(Switc)n(hMap)f(is)h(used)f(to)g(transform)g(a)g(p)r
-(osition)g(in)h(the)f(forw)n(ard)f(direction)h(\(from)h(input)g(to)227
-451 y(output\),)g(eac)n(h)35 b(supplied)h(input)h(p)r(osition)f(is)h
-(\014rst)e(transformed)h(b)n(y)f(the)i(forw)n(ard)e(transformation)f
-(of)i(the)227 551 y(forw)n(ard)27 b(selector)g(Mapping.)38
-b(This)28 b(pro)r(duces)f(a)h(single)f(output)i(v)-5
-b(alue)28 b(for)g(eac)n(h)f(input)i(p)r(osition)f(referred)f(to)227
-650 y(as)j(the)h(selector)e(v)-5 b(alue.)45 b(The)30
-b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5 b(alue)30
-b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-750 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f(supplied)
-g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f(Mapping)
-227 849 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35 b(the)g(nearest)f(in)
-n(teger)g(to)g(the)h(selector)f(v)-5 b(alue)35 b(is)f(less)h(than)f(1)h
-(or)e(greater)g(than)i(the)227 949 y(n)n(um)n(b)r(er)c(of)f(route)g
-(Mappings,)h(then)h(the)f(Switc)n(hMap)f(output)i(p)r(osition)e(is)h
-(set)f(to)h(a)f(v)-5 b(alue)31 b(of)g(AST)p Ft(__)p Fj(BAD)227
-1049 y(on)k(ev)n(ery)g(axis.)59 b(Otherwise,)37 b(the)f(forw)n(ard)e
-(transformation)f(of)j(the)g(selected)f(route)g(Mapping)g(is)g(used)h
-(to)227 1148 y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f
-(to)h(pro)r(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-1272 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fj(output)p Ft(")g Fj(to)227 1372 y Ft(")p Fj(input)p
-Ft(")p Fj(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fj(output)p
-Ft(")g Fj(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 1471 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fj(output)p Ft(")h
-Fj(p)r(osition.)49 b(Again,)32 b(the)227 1571 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-1670 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 1770 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fj(output)p Ft(")f Fj(p)r(osition)227
-1870 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fj(input)p Ft(")h Fj(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-1969 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fj(input)p Ft(")f Fj(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fj(BAD)227 2069
-y(on)j(ev)n(ery)e(axis.)227 2193 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 2292 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 2392 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-2515 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 2615 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 2715 y(simpli\014ed)d(using)g
-(astSimplify)-7 b(.)0 2862 y Fd(Synopsis:)121 b Ft(AstSwitchMap)38
-b Fi(\003)p Ft(astSwitchMap\()g(AstMapping)i Fi(\003)p
-Ft(fsmap,)g(AstMapping)g Fi(\003)p Ft(ismap,)g(int)j(nroute,)227
-2962 y(AstMapping)d Fi(\003)p Ft(routemaps[],)e(const)j(char)h
-Fi(\003)p Ft(options,)e(...)86 b(\))0 3110 y Fd(P)m(arameters:)259
-3244 y(fsmap)427 3344 y Fj(P)n(oin)n(ter)28 b(to)h(the)g(forw)n(ard)f
-(selector)g(Mapping.)41 b(This)29 b(m)n(ust)h(ha)n(v)n(e)d(a)i
-(de\014ned)h(forw)n(ard)d(transformation,)427 3444 y(but)c(need)g(not)f
-(ha)n(v)n(e)f(a)h(de\014ned)h(in)n(v)n(erse)d(transformation.)34
-b(It)23 b(m)n(ust)f(ha)n(v)n(e)f(one)h(output,)i(and)e(the)h(n)n(um)n
-(b)r(er)427 3543 y(of)31 b(inputs)g(m)n(ust)f(matc)n(h)g(the)h(n)n(um)n
-(b)r(er)f(of)g(inputs)h(of)g(eac)n(h)e(of)h(the)h(supplied)g(route)f
-(Mappings.)44 b(NULL)427 3643 y(ma)n(y)27 b(b)r(e)h(supplied,)g(in)g
-(whic)n(h)g(case)e(the)i(Switc)n(hMap)g(will)g(ha)n(v)n(e)e(an)h
-(unde\014ned)i(forw)n(ard)c(Mapping.)259 3774 y Fd(ismap)427
-3874 y Fj(P)n(oin)n(ter)32 b(to)h(the)h(in)n(v)n(erse)e(selector)g
-(Mapping.)54 b(This)34 b(m)n(ust)f(ha)n(v)n(e)f(a)h(de\014ned)h(in)n(v)
-n(erse)e(transformation,)427 3973 y(but)25 b(need)f(not)f(ha)n(v)n(e)g
-(a)g(de\014ned)i(forw)n(ard)d(transformation.)34 b(It)24
-b(m)n(ust)g(ha)n(v)n(e)e(one)i(input,)h(and)f(the)g(n)n(um)n(b)r(er)427
-4073 y(of)g(outputs)g(m)n(ust)g(matc)n(h)g(the)g(n)n(um)n(b)r(er)f(of)h
-(outputs)g(of)g(eac)n(h)f(of)h(the)g(supplied)g(route)f(Mappings.)35
-b(NULL)427 4172 y(ma)n(y)27 b(b)r(e)h(supplied,)g(in)g(whic)n(h)g(case)
-e(the)i(Switc)n(hMap)g(will)g(ha)n(v)n(e)e(an)h(unde\014ned)i(in)n(v)n
-(erse)d(Mapping.)259 4304 y Fd(nroute)427 4403 y Fj(The)i(n)n(um)n(b)r
-(er)f(of)h(supplied)g(route)f(Mappings.)259 4534 y Fd(routemaps)427
-4634 y Fj(An)37 b(arra)n(y)d(of)i(p)r(oin)n(ters)f(to)h(the)h(route)e
-(Mappings.)62 b(All)37 b(the)f(supplied)h(route)e(Mappings)h(m)n(ust)g
-(ha)n(v)n(e)427 4733 y(common)23 b(v)-5 b(alues)23 b(for)g(the)h(Nin)g
-(and)f(Nout)h(attributes,)g(and)f(these)h(v)-5 b(alues)23
-b(de\014ne)h(the)f(n)n(um)n(b)r(er)h(of)f(inputs)427
-4833 y(and)28 b(outputs)g(of)f(the)h(Switc)n(hMap.)259
-4964 y Fd(options)427 5064 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 5163 y(assignmen)n(ts)i
-(to)h(b)r(e)h(used)f(for)g(initialising)g(the)g(new)g(Switc)n(hMap.)48
-b(The)31 b(syn)n(tax)g(used)g(is)g(iden)n(tical)g(to)427
-5263 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-5363 y Fj(sym)n(b)r(ols)27 b(in)h(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 5494 y Fd(...)427 5593 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 5693 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)p eop end
-%%Page: 360 370
-TeXDict begin 360 369 bop 0 52 a FF(360)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 451 y Fj(function\).)0 642 y
-Fd(Returned)32 b(V)-8 b(alue:)259 807 y(astSwitc)m(hMap\(\))427
-907 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Switc)n(hMap.)0
-1098 y Fd(Notes:)340 1409 y Fi(\017)45 b Fj(Note)e(that)f(the)h(comp)r
-(onen)n(t)f(Mappings)g(supplied)h(are)e(not)h(copied)h(b)n(y)f
-(astSwitc)n(hMap)f(\(the)j(new)427 1509 y(Switc)n(hMap)36
-b(simply)h(retains)e(a)h(reference)f(to)h(them\).)64
-b(They)36 b(ma)n(y)f(con)n(tin)n(ue)h(to)g(b)r(e)g(used)h(for)e(other)
-427 1608 y(purp)r(oses,)i(but)f(should)g(not)f(b)r(e)i(deleted.)61
-b(If)36 b(a)f(Switc)n(hMap)h(con)n(taining)e(a)i(cop)n(y)e(of)i(its)g
-(comp)r(onen)n(t)427 1708 y(Mappings)27 b(is)h(required,)e(then)j(a)e
-(cop)n(y)f(of)i(the)g(Switc)n(hMap)g(should)f(b)r(e)h(made)f(using)h
-(astCop)n(y)-7 b(.)340 1855 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 1955 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 2183 3780 12 v 0 2314
-a Fz(astT)-11 b(est)904 2315 y Fe(T)h(est)38 b(if)g(an)h(Ob)7
-b(ject)38 b(attribute)e(v)-7 b(alue)39 b(is)f(set)3360
-2314 y Fz(astT)-11 b(est)0 2537 y Fd(Description:)44
-b Fj(This)c(function)g(returns)f(a)g(b)r(o)r(olean)f(result)i(\(0)f(or)
-f(1\))i(to)f(indicate)h(whether)f(a)g(v)-5 b(alue)39
-b(has)g(b)r(een)227 2637 y(explicitly)28 b(set)g(for)f(one)g(of)g(an)h
-(Ob)5 b(ject's)27 b(attributes.)0 2815 y Fd(Synopsis:)121
-b Ft(int)42 b(astTest\()e(AstObject)g Fi(\003)p Ft(this,)h(const)h
-(char)g Fi(\003)p Ft(attrib)e(\))0 2994 y Fd(P)m(arameters:)259
-3159 y(this)427 3259 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5
-b(ject.)259 3406 y Fd(attrib)427 3505 y Fj(P)n(oin)n(ter)39
-b(to)g(a)h(n)n(ull-terminated)f(c)n(haracter)f(string)h(con)n(taining)g
-(the)i(name)e(of)h(the)g(attribute)g(to)g(b)r(e)427 3605
-y(tested.)0 3796 y Fd(Class)31 b(Applicabilit)m(y:)259
-3961 y(Ob)5 b(ject)427 4061 y Fj(This)28 b(function)g(applies)f(to)h
-(all)f(Ob)5 b(jects.)0 4252 y Fd(Returned)32 b(V)-8 b(alue:)259
-4417 y(astT)g(est\(\))427 4517 y Fj(One)29 b(if)g(a)f(v)-5
-b(alue)29 b(has)f(previously)g(b)r(een)h(explicitly)g(set)f(for)h(the)g
-(attribute)g(\(and)f(hasn't)h(b)r(een)g(cleared\),)427
-4616 y(otherwise)e(zero.)0 4807 y Fd(Notes:)340 5119
-y Fi(\017)45 b Fj(A)n(ttribute)28 b(names)g(are)e(not)i(case)f
-(sensitiv)n(e)g(and)g(ma)n(y)g(b)r(e)h(surrounded)e(b)n(y)i(white)g
-(space.)340 5266 y Fi(\017)45 b Fj(A)29 b(v)-5 b(alue)29
-b(of)f(zero)g(will)h(b)r(e)g(returned)f(if)h(this)g(function)g(is)f(in)
-n(v)n(ok)n(ed)f(with)j(the)f(AST)g(error)d(status)j(set,)f(or)427
-5366 y(if)g(it)g(should)g(fail)f(for)h(an)n(y)e(reason.)340
-5513 y Fi(\017)45 b Fj(A)35 b(v)-5 b(alue)35 b(of)g(zero)f(will)h(also)
-e(b)r(e)i(returned)g(if)g(this)g(function)h(is)e(used)h(to)g(test)g(a)f
-(read-only)f(attribute,)427 5613 y(although)27 b(no)h(error)d(will)j
-(result.)p eop end
-%%Page: 361 371
-TeXDict begin 361 370 bop 3643 52 a FF(361)p 0 351 3780
-12 v 0 483 a Fz(astT)-11 b(estFits)283 b Fe(See)39 b(if)f(a)h(named)f
-(k)m(eyw)m(ord)e(has)j(a)g(de\014ned)1385 598 y(v)-7
-b(alue)38 b(in)h(a)f(FitsChan)3132 483 y Fz(astT)-11
-b(estFits)0 772 y Fd(Description:)44 b Fj(This)31 b(function)h(serc)n
-(hes)e(for)g(a)h(named)g(k)n(eyw)n(ord)e(in)i(a)g(FitsChan.)47
-b(If)31 b(found,)i(and)e(if)g(the)g(k)n(eyw)n(ord)227
-872 y(has)g(a)g(v)-5 b(alue)32 b(asso)r(ciated)e(with)i(it,)g(a)g
-(non-zero)d(v)-5 b(alue)32 b(is)f(returned.)48 b(If)32
-b(the)g(k)n(eyw)n(ord)d(is)i(not)h(found,)h(or)d(if)i(it)227
-971 y(do)r(es)c(not)f(ha)n(v)n(e)g(an)g(asso)r(ciated)f(v)-5
-b(alue,)28 b(a)f(zero)f(v)-5 b(alue)28 b(is)f(returned.)0
-1130 y Fd(Synopsis:)121 b Ft(int)42 b(astTestFits\()d(AstFitsChan)g
-Fi(\003)p Ft(this,)i(const)g(char)h Fi(\003)p Ft(name,)f(int)i
-Fi(\003)p Ft(there)e(\))0 1288 y Fd(P)m(arameters:)259
-1434 y(this)427 1533 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(FitsChan.)259
-1671 y Fd(name)427 1770 y Fj(P)n(oin)n(ter)f(to)i(a)f(n)n
-(ull-terminated)h(c)n(haracter)d(string)i(con)n(taining)g(the)h(FITS)g
-(k)n(eyw)n(ord)e(name.)40 b(This)28 b(ma)n(y)427 1870
-y(b)r(e)i(a)f(complete)g(FITS)h(header)f(card,)g(in)g(whic)n(h)h(case)e
-(the)i(k)n(eyw)n(ord)d(to)j(use)f(is)g(extracted)g(from)g(it.)43
-b(No)427 1970 y(more)27 b(than)h(80)e(c)n(haracters)g(are)g(read)h
-(from)g(this)h(string.)259 2107 y Fd(there)427 2207 y
-Fj(P)n(oin)n(ter)20 b(to)h(an)g(in)n(teger)f(whic)n(h)h(will)g(b)r(e)h
-(returned)f(holding)f(a)h(non-zero)f(v)-5 b(alue)21 b(if)g(the)h(k)n
-(eyw)n(ord)d(w)n(as)h(found)427 2306 y(in)31 b(the)f(header,)g(and)g
-(zero)f(otherwise.)43 b(This)30 b(parameter)f(allo)n(ws)f(a)i
-(distinction)g(to)g(b)r(e)h(made)f(b)r(et)n(w)n(een)427
-2406 y(the)d(case)e(where)h(a)g(k)n(eyw)n(ord)e(is)i(not)h(presen)n(t,)
-f(and)g(the)g(case)g(where)f(a)h(k)n(eyw)n(ord)f(is)h(presen)n(t)f(but)
-i(has)f(no)427 2506 y(asso)r(ciated)h(v)-5 b(alue.)36
-b(A)28 b(NULL)g(p)r(oin)n(ter)f(ma)n(y)g(b)r(e)h(supplied)g(if)g(this)g
-(information)f(is)h(not)f(required.)0 2676 y Fd(Returned)32
-b(V)-8 b(alue:)259 2822 y(astT)g(estFits\(\))427 2922
-y Fj(A)25 b(v)-5 b(alue)23 b(of)h(zero)f(is)h(returned)f(if)i(the)f(k)n
-(eyw)n(ord)e(w)n(as)h(not)h(found)g(in)h(the)f(FitsChan)g(or)f(has)g
-(no)h(asso)r(ciated)427 3021 y(v)-5 b(alue.)37 b(Otherwise,)27
-b(a)g(v)-5 b(alue)27 b(of)h(one)f(is)h(returned.)0 3192
-y Fd(Notes:)340 3484 y Fi(\017)45 b Fj(The)28 b(curren)n(t)f(card)f(is)
-i(left)g(unc)n(hanged)f(b)n(y)g(this)h(function.)340
-3621 y Fi(\017)45 b Fj(The)27 b(card)e(follo)n(wing)h(the)h(curren)n(t)
-e(card)h(is)g(c)n(hec)n(k)n(ed)f(\014rst.)37 b(If)27
-b(this)f(is)h(not)f(the)h(required)e(card,)h(then)h(the)427
-3721 y(rest)21 b(of)h(the)g(FitsChan)g(is)f(searc)n(hed,)h(starting)e
-(with)j(the)f(\014rst)f(card)g(added)g(to)h(the)g(FitsChan.)35
-b(Therefore)427 3820 y(cards)24 b(should)g(b)r(e)h(accessed)e(in)i(the)
-g(order)e(they)i(are)f(stored)f(in)i(the)g(FitsChan)g(\(if)g(p)r
-(ossible\))g(as)f(this)g(will)427 3920 y(minimise)k(the)g(time)g(sp)r
-(en)n(t)g(searc)n(hing)e(for)h(cards.)340 4057 y Fi(\017)45
-b Fj(An)28 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(the)g(k)n(eyw)n
-(ord)d(name)j(do)r(es)f(not)h(conform)e(to)i(FITS)g(requiremen)n(ts.)
-340 4195 y Fi(\017)45 b Fj(Zero)34 b(is)h(returned)g(as)f(the)i
-(function)f(v)-5 b(alue)35 b(if)h(an)f(error)e(has)h(already)g(o)r
-(ccurred,)i(or)e(if)i(this)f(function)427 4294 y(should)28
-b(fail)f(for)g(an)n(y)g(reason.)p 0 4503 V 0 4633 a Fz(astT)-11
-b(ext)1150 4634 y Fe(Dra)m(w)37 b(a)i(text)f(string)f(for)h(a)h(Plot)
-3342 4633 y Fz(astT)-11 b(ext)0 4832 y Fd(Description:)44
-b Fj(This)38 b(function)g(dra)n(ws)e(a)i(string)f(of)g(text)h(at)g(a)f
-(p)r(osition)g(sp)r(eci\014ed)h(in)g(the)g(ph)n(ysical)f(co)r(ordinate)
-227 4932 y(system)e(of)h(a)e(Plot.)60 b(The)35 b(ph)n(ysical)f(p)r
-(osition)i(is)f(transformed)f(in)n(to)h(graphical)f(co)r(ordinates)f
-(to)j(determine)227 5031 y(where)27 b(the)h(text)g(should)g(app)r(ear)e
-(within)j(the)f(plotting)f(area.)0 5190 y Fd(Synopsis:)121
-b Ft(void)42 b(astText\()e(AstPlot)h Fi(\003)p Ft(this,)g(const)g(char)
-h Fi(\003)p Ft(text,)f(const)h(double)f(pos[],)g(const)h(float)227
-5289 y(up[],)g(const)f(char)h Fi(\003)p Ft(just)g(\))0
-5448 y Fd(P)m(arameters:)259 5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Plot.)p eop end
-%%Page: 362 372
-TeXDict begin 362 371 bop 0 52 a FF(362)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(text)427
-451 y Fj(P)n(oin)n(ter)24 b(to)i(a)f(n)n(ull-terminated)g(c)n(haracter)
-f(string)h(con)n(taining)f(the)i(text)g(to)f(b)r(e)h(dra)n(wn.)36
-b(T)-7 b(railing)24 b(white)427 551 y(space)j(is)h(ignored.)259
-693 y Fd(p)s(os)427 792 y Fj(An)j(arra)n(y)-7 b(,)30
-b(with)h(one)f(elemen)n(t)h(for)f(eac)n(h)g(axis)g(of)h(the)g(Plot,)g
-(giving)e(the)j(ph)n(ysical)d(co)r(ordinates)h(of)g(the)427
-892 y(p)r(oin)n(t)e(where)f(the)h(reference)f(p)r(osition)g(of)h(the)g
-(text)g(string)f(is)g(to)h(b)r(e)g(placed.)259 1034 y
-Fd(up)427 1134 y Fj(An)i(arra)n(y)d(holding)i(the)g(comp)r(onen)n(ts)g
-(of)g(a)g(v)n(ector)f(in)h(the)h Ft(")p Fj(up)p Ft(")e
-Fj(direction)h(of)g(the)h(text)f(\(in)h(graphical)427
-1234 y(co)r(ordinates\).)43 b(F)-7 b(or)30 b(example,)g(to)g(get)f
-(horizon)n(tal)g(text,)i(the)f(v)n(ector)f Fi(f)p Fj(0.0f,1.0f)p
-Fi(g)f Fj(should)i(b)r(e)g(supplied.)427 1333 y(F)-7
-b(or)34 b(a)g(basic)g(Plot,)i(2)e(v)-5 b(alues)34 b(should)g(b)r(e)h
-(supplied.)58 b(F)-7 b(or)34 b(a)g(Plot3D,)g(3)g(v)-5
-b(alues)34 b(should)g(b)r(e)h(supplied,)427 1433 y(and)27
-b(the)g(actual)g(up)g(v)n(ector)e(used)i(is)g(the)g(pro)5
-b(jection)26 b(of)h(the)g(supplied)g(up)h(v)n(ector)d(on)n(to)h(the)i
-(text)f(plane)427 1532 y(sp)r(eci\014ed)h(b)n(y)f(the)h(curren)n(t)f(v)
--5 b(alue)28 b(of)f(the)h(Plot3D's)f(Norm)g(attribute.)259
-1675 y Fd(just)427 1774 y Fj(P)n(oin)n(ter)22 b(to)h(a)g(n)n
-(ull-terminated)g(c)n(haracter)e(string)h(iden)n(tifying)i(the)f
-(reference)f(p)r(oin)n(t)i(for)e(the)i(text)g(b)r(eing)427
-1874 y(dra)n(wn.)35 b(The)24 b(\014rst)f(c)n(haracter)e(in)j(this)g
-(string)f(iden)n(ti\014es)h(the)g(reference)f(p)r(osition)g(in)h(the)g
-Ft(")p Fj(up)p Ft(")f Fj(direction)427 1974 y(and)i(ma)n(y)g(b)r(e)h
-Ft(")p Fj(B)p Ft(")e Fj(\(baseline\),)i Ft(")p Fj(C)p
-Ft(")e Fj(\(cen)n(tre\),)i Ft(")p Fj(T)p Ft(")f Fj(\(top\))h(or)e
-Ft(")p Fj(M)p Ft(")h Fj(\(b)r(ottom\).)37 b(The)25 b(second)g(c)n
-(haracter)427 2073 y(iden)n(ti\014es)e(the)h(side-to-side)e(reference)g
-(p)r(osition)h(and)g(ma)n(y)f(b)r(e)i Ft(")p Fj(L)p Ft(")e
-Fj(\(left\),)j Ft(")p Fj(C)p Ft(")d Fj(\(cen)n(tre\))h(or)g
-Ft(")p Fj(R)p Ft(")f Fj(\(righ)n(t)427 2173 y(\).)38
-b(The)27 b(string)g(is)h(case-insensitiv)n(e,)e(and)h(only)g(the)h
-(\014rst)g(t)n(w)n(o)e(c)n(haracters)g(are)g(signi\014can)n(t.)427
-2294 y(F)-7 b(or)35 b(example,)i(a)d(v)-5 b(alue)35 b(of)g
-Ft(")p Fj(BL)p Ft(")g Fj(means)f(that)i(the)f(left)h(end)g(of)f(the)g
-(baseline)g(of)g(the)h(original)d(\(un-)427 2393 y(rotated\))27
-b(text)h(is)g(to)f(b)r(e)h(dra)n(wn)f(at)g(the)h(p)r(osition)g(giv)n
-(en)f(b)n(y)g Ft(")p Fj(p)r(os)p Ft(")p Fj(.)0 2574 y
-Fd(Notes:)340 2876 y Fi(\017)45 b Fj(The)34 b(Plot3D)e(class)g(curren)n
-(tly)h(do)r(es)g(not)g(in)n(terpret)g(graphical)e(escap)r(e)i
-(sequences)f(con)n(tained)h(within)427 2975 y(text)28
-b(displa)n(y)n(ed)f(using)g(this)h(metho)r(d.)340 3118
-y Fi(\017)45 b Fj(T)-7 b(ext)27 b(is)f(not)g(dra)n(wn)f(at)h(p)r
-(ositions)g(whic)n(h)g(ha)n(v)n(e)f(an)n(y)g(co)r(ordinate)h(equal)f
-(to)h(the)h(v)-5 b(alue)26 b(AST)p Ft(__)p Fj(BAD)g(\(or)427
-3217 y(where)k(the)g(transformation)f(in)n(to)h(graphical)f(co)r
-(ordinates)f(yields)i(co)r(ordinates)f(con)n(taining)g(the)i(v)-5
-b(alue)427 3317 y(AST)p Ft(__)p Fj(BAD\).)340 3459 y
-Fi(\017)45 b Fj(If)28 b(the)g(plotting)g(p)r(osition)f(is)h(clipp)r(ed)
-g(\(see)g(astClip\),)f(then)h(no)g(text)g(is)f(dra)n(wn.)340
-3601 y Fi(\017)45 b Fj(An)40 b(error)d(results)i(if)g(the)h(base)e(F)-7
-b(rame)39 b(of)g(the)g(Plot)g(is)g(not)g(2-dimensional)f(or)g(\(for)h
-(a)g(Plot3D\))f(3-)427 3701 y(dimensional.)340 3843 y
-Fi(\017)45 b Fj(An)30 b(error)d(also)g(results)i(if)g(the)g
-(transformation)f(b)r(et)n(w)n(een)h(the)g(curren)n(t)f(and)h(base)f(F)
--7 b(rames)28 b(of)h(the)g(Plot)427 3943 y(is)f(not)f(de\014ned)h
-(\(i.e.)38 b(the)28 b(Plot's)e(T)-7 b(ranIn)n(v)n(erse)26
-b(attribute)h(is)h(zero\).)p 0 4161 3780 12 v 0 4293
-a Fz(astThread)196 b Fe(Determine)38 b(the)g(thread)g(that)g(o)m(wns)g
-(an)g(Ob)7 b(ject)195 b Fz(astThread)0 4505 y Fd(Description:)44
-b Fj(Returns)c(an)g(in)n(teger)f(that)h(indicates)g(whether)g(the)g
-(supplied)h(Ob)5 b(ject)40 b(\(or)f(Ob)5 b(ject)40 b(p)r(oin)n(ter\))g
-(is)227 4605 y(curren)n(tly)27 b(unlo)r(c)n(k)n(ed,)g(or)g(is)g(curren)
-n(tly)g(lo)r(c)n(k)n(ed)f(b)n(y)i(the)g(running)f(thread,)g(or)g
-(another)f(thread.)0 4773 y Fd(Synopsis:)121 b Ft(int)42
-b(astThread\()e(AstObject)g Fi(\003)p Ft(this,)h(int)h(ptr)g(\))0
-4941 y Fd(P)m(arameters:)259 5097 y(this)427 5196 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g(c)n(hec)n(k)n(ed.)259
-5338 y Fd(ptr)427 5438 y Fj(If)k(non-zero,)f(returns)f(information)h
-(ab)r(out)h(the)f(supplied)h(Ob)5 b(ject)31 b(p)r(oin)n(ter,)h(rather)f
-(than)g(the)h(Ob)5 b(ject)427 5538 y(structure)27 b(itself.)38
-b(See)27 b Ft(")p Fj(Ob)5 b(ject)27 b(P)n(oin)n(ters)f(and)h
-(Structures)p Ft(")g Fj(b)r(elo)n(w.)0 5718 y Fd(Returned)32
-b(V)-8 b(alue:)p eop end
-%%Page: 363 373
-TeXDict begin 363 372 bop 3643 52 a FF(363)259 351 y
-Fd(astThread\(\))427 451 y Fj(A)33 b(v)-5 b(alue)32 b(of)g(AST)p
-Ft(__)p Fj(UNLOCKED)g(is)g(returned)g(if)g(the)h(Ob)5
-b(ject)32 b(\(or)g(p)r(oin)n(ter\))g(is)g(curren)n(tly)f(unlo)r(c)n(k)n
-(ed)427 551 y(\(i.e.)37 b(has)26 b(b)r(een)g(unlo)r(c)n(k)n(ed)f(using)
-h(astUnlo)r(c)n(k)g(but)g(has)g(not)g(y)n(et)g(b)r(een)g(lo)r(c)n(k)n
-(ed)f(using)h(astLo)r(c)n(k\).)35 b(A)27 b(v)-5 b(alue)427
-650 y(of)26 b(AST)p Ft(__)p Fj(R)n(UNNING)g(is)g(returned)f(if)h(the)g
-(Ob)5 b(ject)25 b(\(or)g(p)r(oin)n(ter\))h(is)f(curren)n(tly)g(lo)r(c)n
-(k)n(ed)g(b)n(y)g(the)h(running)427 750 y(thread.)44
-b(A)30 b(v)-5 b(alue)30 b(of)g(AST)p Ft(__)p Fj(OTHER)f(is)h(returned)g
-(if)g(the)g(Ob)5 b(ject)30 b(\(or)g(p)r(oin)n(ter\))g(is)g(curren)n
-(tly)f(lo)r(c)n(k)n(ed)427 849 y(b)n(y)f(the)g(another)e(thread.)0
-1002 y Fd(Notes:)340 1275 y Fi(\017)45 b Fj(This)29 b(function)h
-(attempts)g(to)f(execute)g(ev)n(en)g(if)h(the)f(global)f(error)g
-(status)h(is)g(set,)h(but)f(no)g(further)h(error)427
-1375 y(rep)r(ort)d(will)h(b)r(e)g(made)f(if)h(it)g(subsequen)n(tly)g
-(fails)f(under)g(these)h(circumstances.)340 1498 y Fi(\017)45
-b Fj(This)28 b(function)g(is)f(only)h(a)n(v)-5 b(ailable)26
-b(in)i(the)g(C)f(in)n(terface.)340 1622 y Fi(\017)45
-b Fj(This)35 b(function)h(alw)n(a)n(ys)d(returns)h(AST)p
-Ft(__)p Fj(R)n(UNNING)i(if)g(the)f(AST)h(library)d(has)i(b)r(een)g
-(built)h(without)427 1722 y(POSIX)26 b(thread)h(supp)r(ort)f(\(i.e.)37
-b(the)27 b Ft(")p Fj(-with-pthreads)p Ft(")e Fj(option)h(w)n(as)g(not)g
-(sp)r(eci\014ed)h(when)g(running)f(the)427 1821 y Ft(")p
-Fj(con\014gure)p Ft(")g Fj(script\).)-2 1974 y Fd(Ob)5
-b(ject)33 b(P)m(oin)m(ters)f(and)g(Structures)n(:)227
-2120 y Fj(A)n(t)c(an)n(y)f(one)g(time,)h(an)f(AST)h(Ob)5
-b(ject)28 b(can)f(ha)n(v)n(e)f(sev)n(eral)g(distinct)i(p)r(oin)n(ters,)
-f(an)n(y)g(one)g(of)g(whic)n(h)h(can)f(b)r(e)h(used)227
-2220 y(to)34 b(access)g(the)g(Ob)5 b(ject)34 b(structure.)57
-b(F)-7 b(or)33 b(instance,)j(the)f(astClone)e(function)i(will)g(pro)r
-(duce)f(a)g(new)g(distinct)227 2319 y(p)r(oin)n(ter)25
-b(for)f(a)h(giv)n(en)f(Ob)5 b(ject.)36 b(In)25 b(fact,)h(an)f(AST)g
-Ft(")p Fj(p)r(oin)n(ter)p Ft(")f Fj(is)h(not)g(a)g(real)f(p)r(oin)n
-(ter)g(at)h(all)g(-)g(it)g(is)g(an)g(iden)n(ti\014er)227
-2419 y(for)30 b(a)g Ft(")p Fj(handle)p Ft(")f Fj(structure,)h(enco)r
-(ded)g(to)g(mak)n(e)g(it)g(lo)r(ok)g(lik)n(e)f(a)h(p)r(oin)n(ter.)44
-b(Eac)n(h)29 b(handle)h(con)n(tains)f(\(amongst)227 2519
-y(othere)d(things\))h(a)f Ft(")p Fj(real)p Ft(")e Fj(p)r(oin)n(ter)i
-(to)g(the)h(Ob)5 b(ject)26 b(structure.)36 b(This)27
-b(allo)n(ws)e(more)g(than)i(one)f(handle)g(to)g(refer)227
-2618 y(to)j(the)f(same)g(Ob)5 b(ject)28 b(structure.)39
-b(So)28 b(when)h(y)n(ou)e(call)h(astClone)g(\(for)g(instance\))g(y)n
-(ou)g(get)g(bac)n(k)g(an)g(iden)n(ti\014er)227 2718 y(for)f(a)h(new)f
-(handle)h(that)g(refers)e(to)i(the)g(same)f(Ob)5 b(ject)27
-b(as)g(the)h(supplied)g(handle.)227 2838 y(In)35 b(order)f(to)h(use)f
-(an)h(Ob)5 b(ject)35 b(for)f(an)n(ything)h(useful,)i(it)e(m)n(ust)g(b)r
-(e)g(lo)r(c)n(k)n(ed)f(for)h(use)g(b)n(y)f(the)h(running)g(thread)227
-2937 y(\(either)j(implicitly)g(at)f(creation)g(or)f(explicitly)i(using)
-f(astLo)r(c)n(k\).)66 b(The)37 b(iden)n(tit)n(y)h(of)f(the)h(thread)f
-(is)g(stored)227 3037 y(in)c(b)r(oth)f(the)h(Ob)5 b(ject)32
-b(structure,)h(and)f(in)g(the)h(handle)f(that)g(w)n(as)g(passed)f(to)h
-(astLo)r(c)n(k)f(\(or)h(returned)f(b)n(y)h(the)227 3137
-y(constructor)26 b(function\).)38 b(Th)n(us)27 b(it)h(is)f(p)r(ossible)
-h(for)f(a)g(thread)g(to)g(ha)n(v)n(e)f(activ)n(e)h(p)r(oin)n(ters)g
-(for)g(Ob)5 b(jects)27 b(that)h(are)227 3236 y(curren)n(tly)g(lo)r(c)n
-(k)n(ed)g(b)n(y)g(another)g(thread.)40 b(In)29 b(general,)f(if)h(suc)n
-(h)g(a)f(p)r(oin)n(ter)g(is)h(passed)f(to)h(an)f(AST)i(function)f(an)
-227 3336 y(error)g(will)i(b)r(e)g(rep)r(orted)f(indicating)g(that)h
-(the)g(Ob)5 b(ject)30 b(is)h(curren)n(tly)f(lo)r(c)n(k)n(ed)f(b)n(y)i
-(another)e(thread.)46 b(The)30 b(t)n(w)n(o)227 3435 y(exceptions)e(to)f
-(this)i(is)f(that)g(astAnn)n(ul)g(can)f(b)r(e)i(used)f(to)f(ann)n(ull)h
-(suc)n(h)g(a)f(p)r(oin)n(ter,)h(and)g(this)g(function)h(can)e(b)r(e)227
-3535 y(used)h(to)f(return)g(information)g(ab)r(out)h(the)g(p)r(oin)n
-(ter.)227 3655 y(The)f(other)g(practical)f(consequence)g(of)h(this)g
-(is)g(that)g(when)g(astEnd)g(is)f(called,)h(all)g(activ)n(e)f(p)r(oin)n
-(ters)h(curren)n(tly)227 3755 y(o)n(wned)32 b(b)n(y)g(the)h(running)f
-(thread)h(\(at)f(the)h(curren)n(t)f(con)n(text)g(lev)n(el\))g(are)g
-(ann)n(ulled.)51 b(This)33 b(includes)f(p)r(oin)n(ters)227
-3854 y(for)27 b(Ob)5 b(jects)28 b(that)f(are)g(curren)n(tly)g(lo)r(c)n
-(k)n(ed)f(b)n(y)i(other)f(threads.)227 3974 y(If)35 b(the)g
-Ft(")p Fj(ptr)p Ft(")f Fj(parameter)f(is)i(zero,)g(then)g(the)g
-(returned)g(v)-5 b(alue)34 b(describ)r(es)g(the)h(Ob)5
-b(ject)35 b(structure)f(itself.)58 b(If)227 4074 y Ft(")p
-Fj(ptr)p Ft(")36 b Fj(is)h(non-zero,)h(then)g(the)f(returned)f(v)-5
-b(alue)37 b(describ)r(es)g(the)g(supplied)g(Ob)5 b(ject)37
-b(p)r(oin)n(ter)g(\(i.e.)65 b(handle\),)227 4173 y(rather)27
-b(than)h(the)g(Ob)5 b(ject)27 b(structure.)p 0 4354 3780
-12 v 0 4486 a Fz(astTimeAdd)180 b Fe(Add)39 b(a)f(time)g(co)s(ordinate)
-e(con)m(v)m(ersion)h(to)h(a)1641 4585 y(TimeMap)3053
-4486 y Fz(astTimeAdd)0 4756 y Fd(Description:)44 b Fj(This)31
-b(function)h(adds)f(one)g(of)g(the)g(standard)f(time)i(co)r(ordinate)e
-(system)h(con)n(v)n(ersions)e(listed)i(b)r(elo)n(w)227
-4855 y(to)d(an)f(existing)g(TimeMap.)227 4975 y(When)i(a)f(TimeMap)g
-(is)h(\014rst)f(created)f(\(using)i(astTimeMap\),)f(it)h(simply)f(p)r
-(erforms)g(a)g(unit)h(\(n)n(ull\))g(Mapping.)227 5075
-y(By)c(using)f(astTimeAdd)h(\(rep)r(eatedly)g(if)g(necessary\),)f(one)h
-(or)f(more)g(co)r(ordinate)g(con)n(v)n(ersion)e(steps)j(ma)n(y)f(then)
-227 5175 y(b)r(e)c(added,)i(whic)n(h)d(the)i(TimeMap)e(will)h(p)r
-(erform)g(in)g(sequence.)33 b(This)20 b(allo)n(ws)e(m)n(ulti-step)i
-(con)n(v)n(ersions)e(b)r(et)n(w)n(een)227 5274 y(a)31
-b(v)-5 b(ariet)n(y)30 b(of)g(time)i(co)r(ordinate)e(systems)g(to)h(b)r
-(e)g(assem)n(bled)f(out)h(of)f(the)i(building)f(blo)r(c)n(ks)f(pro)n
-(vided)g(b)n(y)g(this)227 5374 y(class.)227 5494 y(Normally)-7
-b(,)27 b(if)g(a)g(TimeMap's)g(In)n(v)n(ert)f(attribute)i(is)f(zero)f
-(\(the)i(default\),)g(then)f(its)h(forw)n(ard)d(transformation)h(is)227
-5593 y(p)r(erformed)i(b)n(y)g(carrying)e(out)i(eac)n(h)g(of)g(the)g
-(individual)h(co)r(ordinate)d(con)n(v)n(ersions)g(sp)r(eci\014ed)i(b)n
-(y)g(astTimeAdd)227 5693 y(in)g(the)g(order)e(giv)n(en)h(\(i.e.)37
-b(with)29 b(the)e(most)h(recen)n(tly)f(added)g(con)n(v)n(ersion)e
-(applied)j(last\).)p eop end
-%%Page: 364 374
-TeXDict begin 364 373 bop 0 52 a FF(364)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(This)21
-b(order)f(is)h(rev)n(ersed)e(if)i(the)h(TimeMap's)e(In)n(v)n(ert)g
-(attribute)h(is)g(non-zero)f(\(or)g(if)h(the)h(in)n(v)n(erse)d
-(transformation)227 451 y(is)27 b(requested)f(b)n(y)h(an)n(y)f(other)g
-(means\))h(and)g(eac)n(h)f(individual)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(is)j(also)f(replaced)g(b)n(y)g(its)227 551
-y(o)n(wn)20 b(in)n(v)n(erse.)32 b(This)20 b(pro)r(cess)f(in)n(v)n(erts)
-g(the)h(o)n(v)n(erall)e(e\013ect)i(of)g(the)h(TimeMap.)34
-b(In)20 b(this)g(case,)h(the)f(\014rst)g(con)n(v)n(ersion)227
-650 y(to)28 b(b)r(e)g(applied)f(w)n(ould)g(b)r(e)h(the)g(in)n(v)n(erse)
-f(of)g(the)h(one)f(most)h(recen)n(tly)f(added.)0 795
-y Fd(Synopsis:)121 b Ft(void)42 b(astTimeAdd\()d(AstTimeMap)g
-Fi(\003)p Ft(this,)i(const)h(char)g Fi(\003)p Ft(cvt,)f(const)h(double)
-f(args[])g(\))0 941 y Fd(P)m(arameters:)259 1073 y(this)427
-1173 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(TimeMap.)259
-1302 y Fd(cvt)427 1401 y Fj(P)n(oin)n(ter)19 b(to)h(a)g(n)n
-(ull-terminated)f(string)h(whic)n(h)g(iden)n(ti\014es)g(the)h(time)f
-(co)r(ordinate)f(con)n(v)n(ersion)f(to)i(b)r(e)h(added)427
-1501 y(to)28 b(the)g(TimeMap.)37 b(See)27 b(the)h Ft(")p
-Fj(Av)-5 b(ailable)27 b(Con)n(v)n(ersions)p Ft(")e Fj(section)i(for)g
-(details)g(of)h(those)f(a)n(v)-5 b(ailable.)259 1630
-y Fd(args)427 1729 y Fj(An)38 b(arra)n(y)d(con)n(taining)h(argumen)n(t)
-g(v)-5 b(alues)36 b(for)h(the)g(time)h(co)r(ordinate)e(con)n(v)n
-(ersion.)63 b(The)37 b(n)n(um)n(b)r(er)g(of)427 1829
-y(argumen)n(ts)22 b(required,)h(and)g(hence)g(the)g(n)n(um)n(b)r(er)g
-(of)g(arra)n(y)e(elemen)n(ts)h(used,)i(dep)r(ends)g(on)f(the)g(con)n(v)
-n(ersion)427 1928 y(sp)r(eci\014ed)f(\(see)f(the)h Ft(")p
-Fj(Av)-5 b(ailable)21 b(Con)n(v)n(ersions)p Ft(")d Fj(section\).)35
-b(This)21 b(arra)n(y)e(is)j(ignored)e(and)h(a)g(NULL)h(p)r(oin)n(ter)
-427 2028 y(ma)n(y)27 b(b)r(e)h(supplied)g(if)g(no)g(argumen)n(ts)e(are)
-g(needed.)0 2186 y Fd(Notes:)340 2464 y Fi(\017)45 b
-Fj(When)37 b(assem)n(bling)e(a)g(m)n(ulti-stage)h(con)n(v)n(ersion,)g
-(it)g(can)g(sometimes)g(b)r(e)g(di\016cult)h(to)f(determine)g(the)427
-2564 y(most)g(economical)f(con)n(v)n(ersion)e(path.)62
-b(A)36 b(solution)g(to)f(this)h(is)g(to)g(include)g(all)g(the)g(steps)g
-(whic)n(h)g(are)427 2664 y(\(logically\))e(necessary)-7
-b(,)35 b(but)g(then)h(to)e(use)h(astSimplify)g(to)g(simplify)g(the)g
-(resulting)f(TimeMap.)59 b(The)427 2763 y(simpli\014cation)28
-b(pro)r(cess)e(will)i(eliminate)g(an)n(y)f(steps)g(whic)n(h)h(turn)f
-(out)h(not)f(to)h(b)r(e)g(needed.)340 2892 y Fi(\017)45
-b Fj(This)27 b(function)h(do)r(es)f(not)g(c)n(hec)n(k)f(to)h(ensure)g
-(that)g(the)h(sequence)e(of)h(co)r(ordinate)f(con)n(v)n(ersions)f
-(added)i(to)427 2992 y(a)g(TimeMap)h(is)f(ph)n(ysically)g(meaningful.)
--2 3149 y Fd(Av)-5 b(ailable)32 b(Con)m(v)m(ersions)n(:)227
-3295 y Fj(The)39 b(follo)n(wing)f(strings)g(\(whic)n(h)h(are)e
-(case-insensitiv)n(e\))h(ma)n(y)g(b)r(e)h(supplied)g(via)f(the)h
-Ft(")p Fj(cvt)p Ft(")f Fj(parameter)g(to)227 3395 y(indicate)29
-b(whic)n(h)g(time)g(co)r(ordinate)f(con)n(v)n(ersion)e(is)j(to)g(b)r(e)
-g(added)f(to)h(the)g(TimeMap.)41 b(Where)28 b(argumen)n(ts)g(are)227
-3495 y(needed)35 b(b)n(y)f(the)h(con)n(v)n(ersion,)f(they)g(are)g
-(listed)h(in)f(paren)n(theses.)56 b(V)-7 b(alues)34 b(for)g(these)h
-(argumen)n(ts)e(should)h(b)r(e)227 3594 y(giv)n(en,)25
-b(via)f(the)g Ft(")p Fj(args)p Ft(")f Fj(arra)n(y)-7
-b(,)22 b(in)j(the)g(order)e(indicated.)36 b(Units)25
-b(and)g(argumen)n(t)e(names)h(are)g(describ)r(ed)g(at)g(the)227
-3694 y(end)k(of)g(the)g(list)f(of)h(con)n(v)n(ersions,)d(and)j
-Ft(")p Fj(MJD)p Ft(")f Fj(means)g(Mo)r(di\014ed)h(Julian)f(Date.)340
-3949 y Fi(\017)45 b Ft(")p Fj(MJDTOMJD)p Ft(")27 b Fj
-(\(MJDOFF1,MJDOFF2\):)37 b(Con)n(v)n(ert)26 b(MJD)i(from)f(one)g
-(o\013set)h(to)f(another.)340 4078 y Fi(\017)45 b Ft(")p
-Fj(MJDTOJD)p Ft(")27 b Fj(\(MJDOFF,JDOFF\):)h(Con)n(v)n(ert)f(MJD)h(to)
-f(Julian)g(Date.)340 4206 y Fi(\017)45 b Ft(")p Fj(JDTOMJD)p
-Ft(")27 b Fj(\(JDOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)g(Date)h(to)f
-(MJD.)340 4335 y Fi(\017)45 b Ft(")p Fj(MJDTOBEP)p Ft(")26
-b Fj(\(MJDOFF,BEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Besselian)g(ep)r
-(o)r(c)n(h.)340 4464 y Fi(\017)45 b Ft(")p Fj(BEPTOMJD)p
-Ft(")26 b Fj(\(BEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Besselian)h(ep)r(o)r
-(c)n(h)g(to)h(MJD.)340 4593 y Fi(\017)45 b Ft(")p Fj(MJDTOJEP)p
-Ft(")26 b Fj(\(MJDOFF,JEPOFF\):)h(Con)n(v)n(ert)f(MJD)i(to)f(Julian)g
-(ep)r(o)r(c)n(h.)340 4721 y Fi(\017)45 b Ft(")p Fj(JEPTOMJD)p
-Ft(")26 b Fj(\(JEPOFF,MJDOFF\):)h(Con)n(v)n(ert)f(Julian)h(ep)r(o)r(c)n
-(h)h(to)f(MJD.)340 4850 y Fi(\017)45 b Ft(")p Fj(T)-7
-b(AITOUTC)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h(T)-7
-b(AI)28 b(MJD)g(to)f(a)g(UTC)h(MJD.)340 4979 y Fi(\017)45
-b Ft(")p Fj(UTCTOT)-7 b(AI)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d
-(a)h(UTC)h(MJD)g(to)f(a)g(T)-7 b(AI)28 b(MJD.)340 5108
-y Fi(\017)45 b Ft(")p Fj(T)-7 b(AITOTT)p Ft(")27 b Fj(\(MJDOFF\):)h
-(Con)n(v)n(ert)e(a)i(T)-7 b(AI)28 b(MJD)g(to)f(a)g(TT)h(MJD.)340
-5236 y Fi(\017)45 b Ft(")p Fj(TTTOT)-7 b(AI)p Ft(")27
-b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)i(TT)f(MJD)h(to)g(a)f(T)-7
-b(AI)28 b(MJD.)340 5365 y Fi(\017)45 b Ft(")p Fj(TTTOTDB)p
-Ft(")33 b Fj(\(MJDOFF,)i(OBSLON,)e(OBSLA)-7 b(T,)34 b(OBSAL)-7
-b(T\):)34 b(Con)n(v)n(ert)f(a)g(TT)i(MJD)f(to)g(a)f(TDB)427
-5465 y(MJD.)340 5593 y Fi(\017)45 b Ft(")p Fj(TDBTOTT)p
-Ft(")33 b Fj(\(MJDOFF,)i(OBSLON,)e(OBSLA)-7 b(T,)34 b(OBSAL)-7
-b(T\):)34 b(Con)n(v)n(ert)f(a)g(TDB)i(MJD)f(to)g(a)g(TT)427
-5693 y(MJD.)p eop end
-%%Page: 365 375
-TeXDict begin 365 374 bop 3643 52 a FF(365)340 351 y
-Fi(\017)45 b Ft(")p Fj(TTTOTCG)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n
-(ert)e(a)h(TT)h(MJD)g(to)f(a)h(TCG)f(MJD.)340 502 y Fi(\017)45
-b Ft(")p Fj(TCGTOTT)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h
-(TCG)h(MJD)g(to)g(a)f(TT)g(MJD.)340 653 y Fi(\017)45
-b Ft(")p Fj(TDBTOTCB)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h
-(TDB)h(MJD)g(to)g(a)f(TCB)g(MJD.)340 805 y Fi(\017)45
-b Ft(")p Fj(TCBTOTDB)p Ft(")27 b Fj(\(MJDOFF\):)h(Con)n(v)n(ert)e(a)h
-(TCB)h(MJD)g(to)f(a)g(TDB)h(MJD.)340 956 y Fi(\017)45
-b Ft(")p Fj(UTTOGMST)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h
-(UT)h(MJD)g(to)f(a)g(GMST)h(MJD.)340 1107 y Fi(\017)45
-b Ft(")p Fj(GMSTTOUT)p Ft(")27 b Fj(\(MJDOFF\):)i(Con)n(v)n(ert)d(a)h
-(GMST)h(MJD)g(to)f(a)h(UT)f(MJD.)340 1258 y Fi(\017)45
-b Ft(")p Fj(GMSTTOLMST)p Ft(")37 b Fj(\(MJDOFF,)h(OBSLON,)f(OBSLA)-7
-b(T\):)38 b(Con)n(v)n(ert)e(a)h(GMST)h(MJD)g(to)f(a)g(LMST)427
-1358 y(MJD.)340 1509 y Fi(\017)45 b Ft(")p Fj(LMSTTOGMST)p
-Ft(")37 b Fj(\(MJDOFF,)h(OBSLON,)f(OBSLA)-7 b(T\):)38
-b(Con)n(v)n(ert)e(a)h(LMST)h(MJD)g(to)f(a)g(GMST)427
-1608 y(MJD.)340 1759 y Fi(\017)45 b Ft(")p Fj(LASTTOLMST)p
-Ft(")40 b Fj(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(GMST)h(MJD)f(to)h(a)e(LMST)427
-1859 y(MJD.)340 2010 y Fi(\017)45 b Ft(")p Fj(LMSTTOLAST)p
-Ft(")40 b Fj(\(MJDOFF,)g(OBSLON,)g(OBSLA)-7 b(T\):)41
-b(Con)n(v)n(ert)d(a)i(LMST)h(MJD)f(to)g(a)g(GMST)427
-2110 y(MJD.)340 2261 y Fi(\017)45 b Ft(")p Fj(UTTOUTC)p
-Ft(")27 b Fj(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UT1)h(MJD)f(to)h(a)f
-(UTC)h(MJD.)340 2412 y Fi(\017)45 b Ft(")p Fj(UTCTOUT)p
-Ft(")27 b Fj(\(DUT1\):)38 b(Con)n(v)n(ert)26 b(a)h(UTC)h(MJD)g(to)f(a)g
-(UT1)h(MJD.)340 2563 y Fi(\017)45 b Ft(")p Fj(L)-7 b(TTOUTC)p
-Ft(")27 b Fj(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e(a)h(Lo)r(cal)g(Time)
-h(MJD)g(to)f(a)g(UTC)h(MJD.)340 2714 y Fi(\017)45 b Ft(")p
-Fj(UTCTOL)-7 b(T)p Ft(")27 b Fj(\(L)-7 b(TOFF\):)28 b(Con)n(v)n(ert)e
-(a)h(UTC)h(MJD)g(to)g(a)f(Lo)r(cal)g(Time)g(MJD.)227
-2913 y(The)h(units)g(for)f(the)h(v)-5 b(alues)27 b(pro)r(cessed)g(b)n
-(y)g(the)h(ab)r(o)n(v)n(e)e(con)n(v)n(ersions)f(are)i(as)g(follo)n(ws:)
-340 3228 y Fi(\017)45 b Fj(Julian)27 b(ep)r(o)r(c)n(hs)h(and)f
-(o\013sets:)37 b(Julian)27 b(y)n(ears)340 3380 y Fi(\017)45
-b Fj(Besselian)27 b(ep)r(o)r(c)n(hs)g(and)h(o\013sets:)36
-b(T)-7 b(ropical)27 b(y)n(ears)340 3531 y Fi(\017)45
-b Fj(Mo)r(di\014ed)28 b(Julian)f(Dates)h(and)f(o\013sets:)37
-b(da)n(ys)340 3682 y Fi(\017)45 b Fj(Julian)27 b(Dates)h(and)f
-(o\013sets:)37 b(da)n(ys)227 3880 y(The)20 b(argumen)n(ts)f(used)h(in)g
-(the)g(ab)r(o)n(v)n(e)f(con)n(v)n(ersions)e(are)i(the)h(zero-p)r(oin)n
-(ts)e(used)i(b)n(y)g(the)g(astT)-7 b(ransform)18 b(function.)227
-3980 y(The)28 b(axis)f(v)-5 b(alues)27 b(supplied)h(and)f(returned)g(b)
-n(y)h(astT)-7 b(ransform)26 b(are)g(o\013sets)h(a)n(w)n(a)n(y)f(from)h
-(these)h(zero-p)r(oin)n(ts:)340 4296 y Fi(\017)45 b Fj(MJDOFF:)28
-b(The)g(zero-p)r(oin)n(t)e(b)r(eing)i(used)f(with)h(MJD)g(v)-5
-b(alues.)340 4447 y Fi(\017)45 b Fj(JDOFF:)28 b(The)g(zero-p)r(oin)n(t)
-e(b)r(eing)i(used)f(with)h(Julian)g(Date)f(v)-5 b(alues.)340
-4598 y Fi(\017)45 b Fj(BEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Besselian)f(ep)r(o)r(c)n(h)g(v)-5 b(alues.)340
-4749 y Fi(\017)45 b Fj(JEPOFF:)27 b(The)g(zero-p)r(oin)n(t)g(b)r(eing)g
-(used)h(with)g(Julian)f(ep)r(o)r(c)n(h)h(v)-5 b(alues.)340
-4900 y Fi(\017)45 b Fj(OBSLON:)27 b(Observ)n(er)f(longitude)h(in)h
-(radians)e(\(+v)n(e)h(w)n(est)n(w)n(ards\).)340 5051
-y Fi(\017)45 b Fj(OBSLA)-7 b(T:)28 b(Observ)n(er)d(geo)r(detic)i
-(latitude)h(\(IA)n(U)h(1975\))d(in)h(radians)g(\(+v)n(e)g(north)n(w)n
-(ards\).)340 5202 y Fi(\017)45 b Fj(OBSAL)-7 b(T:)28
-b(Observ)n(er)d(geo)r(detic)i(altitude)h(\(IA)n(U)h(1975\))d(in)h
-(metres.)340 5353 y Fi(\017)45 b Fj(DUT1:)37 b(The)28
-b(UT1-UTC)f(v)-5 b(alue)28 b(to)f(use.)340 5505 y Fi(\017)45
-b Fj(L)-7 b(TOFF:)30 b(The)h(o\013set)f(b)r(et)n(w)n(een)g(Lo)r(cal)f
-(Time)h(and)g(UTC)g(\(in)h(hours,)f(p)r(ositiv)n(e)g(for)f(time)i
-(zones)e(east)h(of)427 5604 y(Green)n(wic)n(h\).)p eop
-end
-%%Page: 366 376
-TeXDict begin 366 375 bop 0 52 a FF(366)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astTimeF)-11 b(rame)1359 482 y Fe(Create)37
-b(a)i(TimeF)-10 b(rame)2937 483 y Fz(astTimeF)f(rame)0
-659 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(TimeF)-7 b(rame)28 b(and)f(optionally)g(initialises)g(its)h
-(attributes.)227 788 y(A)h(TimeF)-7 b(rame)28 b(is)g(a)g(sp)r
-(ecialised)f(form)h(of)g(one-dimensional)f(F)-7 b(rame)28
-b(whic)n(h)g(represen)n(ts)f(v)-5 b(arious)27 b(co)r(ordinate)227
-888 y(systems)g(used)h(to)f(describ)r(e)h(p)r(ositions)f(in)h(time.)227
-1018 y(A)23 b(TimeF)-7 b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g
-(time)h(as)e(either)h(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h
-(a)f(Julian)f(Date)227 1117 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)
-i(or)f(a)h(Julian)g(ep)r(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i
-(System)f(attribute.)34 b(Optionally)-7 b(,)20 b(a)f(zero)227
-1217 y(p)r(oin)n(t)30 b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e
-(attribute)i(TimeOrigin\))e(whic)n(h)h(results)f(in)h(the)h(TimeF)-7
-b(rame)29 b(represen)n(ting)227 1317 y(time)f(o\013sets)g(from)f(the)h
-(sp)r(eci\014ed)g(zero)e(p)r(oin)n(t.)227 1446 y(Ev)n(en)g(though)g(JD)
-g(and)g(MJD)g(are)g(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n
-(ys,)g(the)g(TimeF)-7 b(rame)26 b(class)f(allo)n(ws)g(other)227
-1546 y(units)31 b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))
-g(on)f(the)h(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g
-(min)n(ute,)227 1645 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g
-(=)g(1)g(da)n(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1745 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1845 y(\(tropical\))c(y)n(ears.)
-227 1974 y(The)h(TimeScale)f(attribute)h(allo)n(ws)f(the)h(time)g
-(scale)f(to)g(b)r(e)h(sp)r(eci\014ed)g(\(that)h(is,)e(the)h(ph)n
-(ysical)f(pro)r(ces)g(used)h(to)227 2074 y(de\014ne)34
-b(the)g(rate)f(of)g(\015o)n(w)g(of)h(time\).)55 b(MJD,)34
-b(JD)g(and)f(Julian)g(ep)r(o)r(c)n(h)h(can)f(b)r(e)h(used)f(to)h
-(represen)n(t)e(a)h(time)h(in)227 2174 y(an)n(y)26 b(supp)r(orted)h
-(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25 b(Besselian)h(ep)r(o)r(c)n(h)g
-(ma)n(y)g(only)h(b)r(e)g(used)g(with)g(the)g Ft(")p Fj(TT)p
-Ft(")f Fj(\(T)-7 b(errestrial)227 2273 y(Time\))39 b(time)g(scale.)70
-b(The)38 b(list)h(of)g(supp)r(orted)f(time)h(scales)f(includes)h(univ)n
-(ersal)e(time)i(and)f(siderial)g(time.)227 2373 y(Strictly)-7
-b(,)30 b(these)g(represen)n(t)e(angles)g(rather)g(than)i(time)f
-(scales,)g(but)h(are)e(included)i(in)g(the)f(list)h(since)f(they)h(are)
-227 2472 y(in)e(common)f(use)h(and)f(are)g(often)h(though)n(t)f(of)g
-(as)g(time)h(scales.)227 2602 y(When)h(a)e(time)h(v)-5
-b(alue)28 b(is)f(formatted)h(it)g(can)f(b)r(e)h(formated)g(either)f(as)
-g(a)h(simple)g(\015oating)e(p)r(oin)n(t)i(v)-5 b(alue,)28
-b(or)f(as)g(a)227 2702 y(Gregorian)f(date)h(\(see)h(the)g(F)-7
-b(ormat)27 b(attribute\).)0 2861 y Fd(Synopsis:)121 b
-Ft(AstTimeFrame)38 b Fi(\003)p Ft(astTimeFrame\()g(const)k(char)g
-Fi(\003)p Ft(options,)d(...)86 b(\))0 3021 y Fd(P)m(arameters:)259
-3168 y(options)427 3267 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3367 y(assignmen)n(ts)i
-(to)g(b)r(e)h(used)f(for)g(initialising)h(the)g(new)f(TimeF)-7
-b(rame.)45 b(The)31 b(syn)n(tax)f(used)g(is)g(iden)n(tical)h(to)427
-3467 y(that)38 b(for)e(the)i(astSet)f(function)h(and)f(ma)n(y)f
-(include)i Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(sp)r(eci\014ers)g
-(iden)n(ti\014ed)g(b)n(y)g Ft(")p Fj(\045)p Ft(")427
-3566 y Fj(sym)n(b)r(ols)j(in)h(the)g(normal)e(w)n(a)n(y)-7
-b(.)75 b(If)41 b(no)f(initialisation)g(is)g(required,)j(a)d
-(zero-length)g(string)f(ma)n(y)h(b)r(e)427 3666 y(supplied.)259
-3804 y Fd(...)427 3903 y Fj(If)e(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4003 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4103 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4202 y Fj(function\).)0 4374
-y Fd(Returned)32 b(V)-8 b(alue:)259 4521 y(astTimeF)g(rame\(\))427
-4621 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(TimeF)-7
-b(rame.)0 4793 y Fd(Notes:)340 5085 y Fi(\017)45 b Fj(When)40
-b(con)n(v)n(ersion)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(TimeF)-7
-b(rames)39 b(is)g(requested)g(\(as)g(when)h(supplying)f(TimeF)-7
-b(rames)427 5185 y(to)39 b(astCon)n(v)n(ert\),)i(accoun)n(t)e(will)g(b)
-r(e)h(tak)n(en)f(of)g(the)h(nature)f(of)g(the)h(time)f(co)r(ordinate)g
-(systems)f(they)427 5285 y(represen)n(t,)d(together)f(with)h(an)n(y)f
-(qualifying)g(time)h(scale,)h(o\013set,)g(unit,)h(etc.)58
-b(The)35 b(AlignSystem)g(and)427 5384 y(AlignTimeScale)28
-b(attributes)f(will)h(also)e(b)r(e)i(tak)n(en)f(in)n(to)h(accoun)n(t.)
-340 5522 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-5622 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p eop end
-%%Page: 367 377
-TeXDict begin 367 376 bop 3643 52 a FF(367)p 0 351 3780
-12 v 0 483 a Fz(astTimeMap)1404 482 y Fe(Create)37 b(a)h(TimeMap)3037
-483 y Fz(astTimeMap)0 672 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(TimeMap)h(and)f(optionally)g
-(initialises)g(its)h(attributes.)227 797 y(A)39 b(TimeMap)f(is)g(a)g
-(sp)r(ecialised)g(form)g(of)g(1-dimensional)f(Mapping)h(whic)n(h)h(can)
-f(b)r(e)g(used)h(to)f(represen)n(t)f(a)227 897 y(sequence)27
-b(of)h(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g(time)h(co)r
-(ordinate)f(systems.)227 1022 y(When)c(a)e(TimeMap)g(is)h(\014rst)f
-(created,)h(it)h(simply)e(p)r(erforms)g(a)h(unit)g(\(n)n(ull\))g
-(Mapping.)35 b(Using)21 b(the)h(astTimeAdd)227 1121 y(function,)33
-b(a)d(series)g(of)h(co)r(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)f
-(then)i(b)r(e)f(added.)47 b(This)31 b(allo)n(ws)e(m)n(ulti-step)i(con-)
-227 1221 y(v)n(ersions)k(b)r(et)n(w)n(een)h(a)g(v)-5
-b(ariet)n(y)35 b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h
-(assem)n(bled)e(out)h(of)g(a)g(set)g(of)g(building)227
-1321 y(blo)r(c)n(ks.)227 1446 y(F)-7 b(or)20 b(details)h(of)g(the)g
-(individual)g(co)r(ordinate)e(con)n(v)n(ersions)g(a)n(v)-5
-b(ailable,)21 b(see)f(the)h(description)f(of)h(the)g(astTimeAdd)227
-1545 y(function.)0 1695 y Fd(Synopsis:)121 b Ft(AstTimeMap)39
-b Fi(\003)p Ft(astTimeMap\()g(int)j(flags,)f(const)h(char)g
-Fi(\003)p Ft(options,)e(...)85 b(\))0 1845 y Fd(P)m(arameters:)259
-1982 y(\015ags)427 2082 y Fj(This)28 b(parameter)e(is)h(reserv)n(ed)f
-(for)h(future)h(use)g(and)f(should)h(curren)n(tly)e(alw)n(a)n(ys)g(b)r
-(e)i(set)f(to)h(zero.)259 2215 y Fd(options)427 2315
-y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-2414 y(assignmen)n(ts)22 b(to)g(b)r(e)i(used)e(for)g(initialising)h
-(the)g(new)g(TimeMap.)35 b(The)23 b(syn)n(tax)f(used)g(is)h(iden)n
-(tical)g(to)f(that)427 2514 y(for)k(the)h(astSet)g(function)g(and)g(ma)
-n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r
-(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p
-Ft(")g Fj(sym)n(b)r(ols)427 2614 y(in)i(the)g(normal)f(w)n(a)n(y)-7
-b(.)35 b(If)28 b(no)g(initialisation)f(is)g(required,)g(a)g
-(zero-length)f(string)h(ma)n(y)g(b)r(e)h(supplied.)259
-2747 y Fd(...)427 2846 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 2946 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 3046 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 3145 y Fj(function\).)0 3308
-y Fd(Returned)32 b(V)-8 b(alue:)259 3445 y(astTimeMap\(\))427
-3545 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(TimeMap.)0
-3707 y Fd(Notes:)340 3990 y Fi(\017)45 b Fj(The)23 b(nature)g(and)g
-(units)h(of)f(the)g(co)r(ordinate)f(v)-5 b(alues)23 b(supplied)h(for)e
-(the)i(\014rst)f(input)h(\(i.e.)35 b(the)24 b(time)g(input\))427
-4090 y(of)36 b(a)g(TimeMap)g(m)n(ust)h(b)r(e)f(appropriate)f(to)h(the)h
-(\014rst)f(con)n(v)n(ersion)d(step)k(applied)f(b)n(y)g(the)h(TimeMap.)
-427 4190 y(F)-7 b(or)23 b(instance,)h(if)g(the)g(\014rst)f(con)n(v)n
-(ersion)e(step)i(is)h Ft(")p Fj(MJDTOBEP)p Ft(")d Fj(\(Mo)r(di\014ed)j
-(Julian)f(Date)g(to)h(Besselian)427 4289 y(ep)r(o)r(c)n(h\))e(then)g
-(the)g(co)r(ordinate)f(v)-5 b(alues)21 b(for)g(the)h(\014rst)f(input)i
-(should)e(b)r(e)h(date)g(in)g(units)g(of)f(da)n(ys.)34
-b(Similarly)-7 b(,)427 4389 y(the)28 b(nature)e(and)h(units)g(of)g(the)
-g(co)r(ordinate)f(v)-5 b(alues)27 b(returned)f(b)n(y)h(a)f(TimeMap)h
-(will)g(b)r(e)h(determined)f(b)n(y)427 4488 y(the)h(last)g(con)n(v)n
-(ersion)d(step)j(applied)f(b)n(y)g(the)h(TimeMap.)340
-4622 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-4721 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)p 0 4921 V 0 5052 a Fz(astT)-11
-b(ran1)944 5053 y Fe(T)h(ransform)37 b(1-dimensional)f(co)s(ordinates)
-3264 5052 y Fz(astT)-11 b(ran1)0 5219 y Fd(Description:)44
-b Fj(This)34 b(function)g(applies)g(a)f(Mapping)g(to)h(transform)f(the)
-h(co)r(ordinates)e(of)i(a)f(set)h(of)f(p)r(oin)n(ts)h(in)g(one)227
-5319 y(dimension.)0 5469 y Fd(Synopsis:)121 b Ft(void)42
-b(astTran1\()e(AstMapping)f Fi(\003)p Ft(this,)i(int)h(npoint,)f(const)
-h(double)f(xin[],)g(int)h(forward,)227 5568 y(double)f(xout[])g(\))0
-5718 y Fd(P)m(arameters:)p eop end
-%%Page: 368 378
-TeXDict begin 368 377 bop 0 52 a FF(368)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(this)427
-451 y Fj(P)n(oin)n(ter)c(to)i(the)g(Mapping)f(to)g(b)r(e)h(applied.)259
-592 y Fd(np)s(oin)m(t)427 691 y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r
-(oin)n(ts)f(to)h(b)r(e)g(transformed.)259 832 y Fd(xin)427
-932 y Fj(An)g(arra)n(y)e(of)h Ft(")p Fj(np)r(oin)n(t)p
-Ft(")g Fj(co)r(ordinate)g(v)-5 b(alues)27 b(for)g(the)h(input)g(\(un)n
-(transformed\))f(p)r(oin)n(ts.)259 1073 y Fd(forw)m(ard)427
-1172 y Fj(A)36 b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f
-(Mapping's)f(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)
-r(e)427 1272 y(applied,)28 b(while)g(a)f(zero)f(v)-5
-b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g
-(should)i(b)r(e)g(used.)259 1413 y Fd(xout)427 1513 y
-Fj(An)33 b(arra)n(y)d(\(with)j Ft(")p Fj(np)r(oin)n(t)p
-Ft(")e Fj(elemen)n(ts\))i(in)n(to)e(whic)n(h)i(the)f(co)r(ordinates)f
-(of)h(the)g(output)h(\(transformed\))427 1612 y(p)r(oin)n(ts)28
-b(will)g(b)r(e)g(written.)0 1790 y Fd(Notes:)340 2089
-y Fi(\017)45 b Fj(The)28 b(Mapping)f(supplied)h(m)n(ust)g(ha)n(v)n(e)e
-(the)i(v)-5 b(alue)28 b(1)f(for)g(b)r(oth)h(its)g(Nin)g(and)f(Nout)h
-(attributes.)p 0 2304 3780 12 v 0 2435 a Fz(astT)-11
-b(ran2)944 2436 y Fe(T)h(ransform)37 b(2-dimensional)f(co)s(ordinates)
-3264 2435 y Fz(astT)-11 b(ran2)0 2618 y Fd(Description:)44
-b Fj(This)34 b(function)g(applies)f(a)g(Mapping)g(to)g(transform)f(the)
-i(co)r(ordinates)e(of)i(a)f(set)g(of)g(p)r(oin)n(ts)h(in)f(t)n(w)n(o)
-227 2717 y(dimensions.)0 2883 y Fd(Synopsis:)121 b Ft(void)42
-b(astTran2\()e(AstMapping)f Fi(\003)p Ft(this,)i(int)h(npoint,)f(const)
-h(double)f(xin[],)g(const)g(double)227 2983 y(yin[],)g(int)i(forward,)d
-(double)h(xout[],)g(double)g(yout[])g(\))0 3148 y Fd(P)m(arameters:)259
-3301 y(this)427 3400 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)259 3541 y Fd(np)s(oin)m(t)427 3641
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)259 3782 y Fd(xin)427 3881 y Fj(An)g(arra)n(y)e(of)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")g Fj(X-co)r(ordinate)g(v)-5
-b(alues)27 b(for)g(the)h(input)g(\(un)n(transformed\))f(p)r(oin)n(ts.)
-259 4022 y Fd(yin)427 4122 y Fj(An)h(arra)n(y)e(of)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")g Fj(Y-co)r(ordinate)g(v)-5
-b(alues)27 b(for)g(the)h(input)g(\(un)n(transformed\))f(p)r(oin)n(ts.)
-259 4263 y Fd(forw)m(ard)427 4362 y Fj(A)36 b(non-zero)d(v)-5
-b(alue)35 b(indicates)f(that)i(the)f(Mapping's)f(forw)n(ard)g(co)r
-(ordinate)f(transformation)h(is)g(to)h(b)r(e)427 4462
-y(applied,)28 b(while)g(a)f(zero)f(v)-5 b(alue)28 b(indicates)f(that)h
-(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)r(e)g(used.)259
-4603 y Fd(xout)427 4703 y Fj(An)d(arra)n(y)e(\(with)i
-Ft(")p Fj(np)r(oin)n(t)p Ft(")f Fj(elemen)n(ts\))h(in)n(to)g(whic)n(h)f
-(the)h(X-co)r(ordinates)e(of)i(the)g(output)g(\(transformed\))427
-4802 y(p)r(oin)n(ts)j(will)g(b)r(e)g(written.)259 4943
-y Fd(y)m(out)427 5043 y Fj(An)d(arra)n(y)e(\(with)i Ft(")p
-Fj(np)r(oin)n(t)p Ft(")f Fj(elemen)n(ts\))h(in)n(to)g(whic)n(h)f(the)h
-(Y-co)r(ordinates)e(of)i(the)g(output)g(\(transformed\))427
-5142 y(p)r(oin)n(ts)j(will)g(b)r(e)g(written.)0 5320
-y Fd(Notes:)340 5619 y Fi(\017)45 b Fj(The)28 b(Mapping)f(supplied)h(m)
-n(ust)g(ha)n(v)n(e)e(the)i(v)-5 b(alue)28 b(2)f(for)g(b)r(oth)h(its)g
-(Nin)g(and)f(Nout)h(attributes.)p eop end
-%%Page: 369 379
-TeXDict begin 369 378 bop 3643 52 a FF(369)p 0 351 3780
-12 v 0 483 a Fz(astT)-11 b(ranGrid)423 b Fe(T)-10 b(ransform)37
-b(a)h(grid)g(of)g(p)s(ositions)422 b Fz(astT)-11 b(ranGrid)0
-679 y Fd(Description:)44 b Fj(This)36 b(function)g(uses)f(the)h
-(supplied)f(Mapping)g(to)h(transforms)e(a)h(regular)e(square)i(grid)f
-(of)i(p)r(oin)n(ts)227 778 y(co)n(v)n(ering)28 b(a)h(sp)r(eci\014ed)h
-(b)r(o)n(x.)42 b(It)30 b(attempts)g(to)f(do)g(this)h(quic)n(kly)f(b)n
-(y)g(\014rst)g(appro)n(ximating)f(the)i(Mapping)f(with)227
-878 y(a)35 b(linear)g(transformation)e(applied)j(o)n(v)n(er)d(the)j
-(whole)f(region)f(of)h(the)h(input)g(grid)e(whic)n(h)i(is)f(b)r(eing)g
-(used.)60 b(If)227 977 y(this)30 b(pro)n(v)n(es)e(to)i(b)r(e)g
-(insu\016cien)n(tly)g(accurate,)f(the)h(input)h(region)d(is)i
-(sub-divided)g(in)n(to)f(t)n(w)n(o)g(along)g(its)h(largest)227
-1077 y(dimension)k(and)g(the)h(pro)r(cess)e(is)h(rep)r(eated)g(within)h
-(eac)n(h)e(of)h(the)h(resulting)f(sub-regions.)54 b(This)35
-b(pro)r(cess)e(of)227 1177 y(sub-division)21 b(con)n(tin)n(ues)g(un)n
-(til)g(a)g(su\016cien)n(tly)h(go)r(o)r(d)f(linear)f(appro)n(ximation)g
-(is)h(found,)i(or)e(the)g(region)f(to)i(whic)n(h)227
-1276 y(it)28 b(is)g(b)r(eing)f(applied)h(b)r(ecomes)f(to)r(o)h(small)f
-(\(in)h(whic)n(h)g(case)e(the)i(original)e(Mapping)h(is)h(used)g
-(directly\).)0 1433 y Fd(Synopsis:)121 b Ft(void)42 b(astTranGrid\()c
-(AstMapping)i Fi(\003)p Ft(this,)h(int)h(ncoord_in,)e(const)h(int)i
-(lbnd[],)d(const)i(int)227 1532 y(ubnd[],)f(double)g(tol,)h(int)g
-(maxpix,)f(int)h(forward,)f(int)h(ncoord_out,)d(int)j(outdim,)f(double)
-g Fi(\003)p Ft(out)227 1632 y(\);)0 1788 y Fd(P)m(arameters:)259
-1931 y(this)427 2031 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)259 2167 y Fd(nco)s(ord)p Ft(_)p Fd(in)427
-2267 y Fj(The)c(n)n(um)n(b)r(er)g(of)g(co)r(ordinates)f(b)r(eing)h
-(supplied)g(for)g(eac)n(h)f(b)r(o)n(x)g(corner)g(\(i.e.)36
-b(the)24 b(n)n(um)n(b)r(er)g(of)g(dimensions)427 2367
-y(of)k(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)g
-(reside\).)259 2503 y Fd(lbnd)427 2602 y Fj(P)n(oin)n(ter)c(to)i(an)g
-(arra)n(y)d(of)j(in)n(tegers,)f(with)h Ft(")p Fj(nco)r(ord)p
-Ft(_)p Fj(in)p Ft(")e Fj(elemen)n(ts,)i(con)n(taining)f(the)h(co)r
-(ordinates)e(of)i(the)427 2702 y(cen)n(tre)h(of)h(the)g(\014rst)f
-(pixel)h(in)g(the)g(input)g(grid)f(along)f(eac)n(h)h(dimension.)259
-2838 y Fd(ubnd)427 2938 y Fj(P)n(oin)n(ter)d(to)i(an)g(arra)n(y)d(of)j
-(in)n(tegers,)f(with)h Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")e Fj(elemen)n(ts,)i(con)n(taining)f(the)h(co)r(ordinates)e(of)i
-(the)427 3038 y(cen)n(tre)h(of)h(the)g(last)f(pixel)h(in)g(the)g(input)
-g(grid)f(along)f(eac)n(h)h(dimension.)427 3155 y(Note)f(that)h
-Ft(")p Fj(lbnd)p Ft(")f Fj(and)g Ft(")p Fj(ubnd)p Ft(")g
-Fj(together)f(de\014ne)h(the)h(shap)r(e)f(and)g(size)g(of)g(the)g
-(input)h(grid,)f(its)h(exten)n(t)427 3255 y(along)36
-b(a)g(particular)f(\(j'th\))j(dimension)e(b)r(eing)g(ubnd[j]-lbnd[j]+1)
-i(\(assuming)d(the)i(index)g Ft(")p Fj(j)p Ft(")f Fj(to)g(b)r(e)427
-3355 y(zero-based\).)69 b(They)39 b(also)e(de\014ne)j(the)f(input)g
-(grid's)f(co)r(ordinate)g(system,)j(eac)n(h)d(pixel)h(ha)n(ving)f(unit)
-427 3454 y(exten)n(t)28 b(along)e(eac)n(h)h(dimension)h(with)g(in)n
-(tegral)e(co)r(ordinate)h(v)-5 b(alues)27 b(at)g(its)h(cen)n(tre.)259
-3591 y Fd(tol)427 3690 y Fj(The)34 b(maxim)n(um)f(tolerable)f
-(geometrical)f(distortion)i(whic)n(h)g(ma)n(y)f(b)r(e)i(in)n(tro)r
-(duced)f(as)f(a)h(result)g(of)g(ap-)427 3790 y(pro)n(ximating)c
-(non-linear)f(Mappings)h(b)n(y)h(a)f(set)h(of)g(piece-wise)f(linear)g
-(transformations.)42 b(This)30 b(should)427 3889 y(b)r(e)e(expressed)f
-(as)g(a)g(displacemen)n(t)g(within)h(the)g(output)h(co)r(ordinate)d
-(system)h(of)h(the)g(Mapping.)427 4007 y(If)34 b(piece-wise)f(linear)g
-(appro)n(ximation)f(is)h(not)h(required,)g(a)f(v)-5 b(alue)33
-b(of)h(zero)e(ma)n(y)h(b)r(e)h(giv)n(en.)54 b(This)33
-b(will)427 4107 y(ensure)k(that)g(the)h(Mapping)e(is)h(used)g(without)h
-(an)n(y)e(appro)n(ximation,)i(but)g(ma)n(y)e(increase)g(execution)427
-4207 y(time.)427 4325 y(If)d(the)f(v)-5 b(alue)32 b(is)g(to)r(o)g
-(high,)h(discon)n(tin)n(uities)e(b)r(et)n(w)n(een)h(the)h(linear)e
-(appro)n(ximations)f(used)i(in)g(adjacen)n(t)427 4424
-y(panel)c(will)f(b)r(e)h(higher.)37 b(If)28 b(this)g(is)f(a)g(problem,)
-g(reduce)h(the)g(tolerance)e(v)-5 b(alue)27 b(used.)259
-4560 y Fd(maxpix)427 4660 y Fj(A)i(v)-5 b(alue)29 b(whic)n(h)g(sp)r
-(eci\014es)f(an)h(initial)g(scale)f(size)g(\(in)h(input)h(grid)e(p)r
-(oin)n(ts\))h(for)f(the)h(adaptiv)n(e)f(algorithm)427
-4760 y(whic)n(h)j(appro)n(ximates)f(non-linear)g(Mappings)g(with)i
-(piece-wise)f(linear)f(transformations.)46 b(Normally)-7
-b(,)427 4859 y(this)28 b(should)g(b)r(e)g(a)g(large)e(v)-5
-b(alue)28 b(\(larger)e(than)i(an)n(y)f(dimension)g(of)h(the)g(region)f
-(of)h(the)g(input)g(grid)g(b)r(eing)427 4959 y(used\).)46
-b(In)31 b(this)g(case,)g(a)f(\014rst)g(attempt)h(to)g(appro)n(ximate)e
-(the)i(Mapping)f(b)n(y)g(a)g(linear)g(transformation)427
-5059 y(will)e(b)r(e)g(made)f(o)n(v)n(er)f(the)i(en)n(tire)f(input)i
-(region.)427 5177 y(If)k(a)f(smaller)f(v)-5 b(alue)33
-b(is)f(used,)i(the)e(input)h(region)f(will)g(\014rst)g(b)r(e)h(divided)
-g(in)n(to)f(sub-regions)e(whose)i(size)427 5276 y(do)r(es)c(not)g
-(exceed)f Ft(")p Fj(maxpix)p Ft(")g Fj(grid)g(p)r(oin)n(ts)h(in)g(an)n
-(y)f(dimension.)37 b(Only)28 b(at)f(this)h(p)r(oin)n(t)g(will)g
-(attempts)h(at)427 5376 y(appro)n(ximation)d(commence.)427
-5494 y(This)38 b(v)-5 b(alue)38 b(ma)n(y)g(o)r(ccasionally)e(b)r(e)j
-(useful)f(in)h(prev)n(en)n(ting)e(false)h(con)n(v)n(ergence)d(of)j(the)
-h(adaptiv)n(e)e(al-)427 5593 y(gorithm)c(in)g(cases)f(where)g(the)h
-(Mapping)g(app)r(ears)f(appro)n(ximately)f(linear)h(on)h(large)e
-(scales,)j(but)f(has)427 5693 y(irregularities)e(\(e.g.)53
-b(holes\))32 b(on)h(smaller)f(scales.)52 b(A)33 b(v)-5
-b(alue)33 b(of,)h(sa)n(y)-7 b(,)34 b(50)e(to)g(100)g(grid)g(p)r(oin)n
-(ts)h(can)g(also)p eop end
-%%Page: 370 380
-TeXDict begin 370 379 bop 0 52 a FF(370)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)427 351 y Fj(b)r(e)k(emplo)n(y)n(ed)
-e(as)g(a)h(safeguard)f(in)h(general-purp)r(ose)e(soft)n(w)n(are,)i
-(since)g(the)g(e\013ect)h(on)f(p)r(erformance)f(is)427
-451 y(minimal.)427 568 y(If)21 b(to)r(o)f(small)g(a)g(v)-5
-b(alue)20 b(is)g(giv)n(en,)h(it)g(will)f(ha)n(v)n(e)f(the)i(e\013ect)g
-(of)f(inhibiting)h(linear)f(appro)n(ximation)e(altogether)427
-667 y(\(equiv)-5 b(alen)n(t)20 b(to)g(setting)g Ft(")p
-Fj(tol)p Ft(")f Fj(to)g(zero\).)34 b(Although)20 b(this)g(ma)n(y)f
-(degrade)f(p)r(erformance,)j(accurate)d(results)427 767
-y(will)28 b(still)g(b)r(e)g(obtained.)259 901 y Fd(forw)m(ard)427
-1001 y Fj(A)36 b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f
-(Mapping's)f(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)
-r(e)427 1100 y(applied,)28 b(while)g(a)f(zero)f(v)-5
-b(alue)28 b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g
-(should)i(b)r(e)g(used.)259 1234 y Fd(nco)s(ord)p Ft(_)p
-Fd(out)427 1334 y Fj(The)j(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r
-(eing)j(generated)e(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)
-r(oin)n(t)f(\(i.e.)45 b(the)427 1433 y(n)n(um)n(b)r(er)28
-b(of)g(dimensions)g(of)h(the)f(space)g(in)g(whic)n(h)h(the)f(output)h
-(p)r(oin)n(ts)f(reside\).)39 b(This)28 b(need)g(not)h(b)r(e)f(the)427
-1533 y(same)f(as)g Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")p Fj(.)259 1667 y Fd(outdim)427 1767 y Fj(The)k(n)n(um)n(b)r(er)f
-(of)g(elemen)n(ts)g(along)g(the)g(second)g(dimension)g(of)h(the)g
-Ft(")p Fj(out)p Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(will)f(con)n(tain)427
-1866 y(the)25 b(output)h(co)r(ordinates\).)35 b(The)24
-b(v)-5 b(alue)25 b(giv)n(en)f(should)h(not)f(b)r(e)i(less)e(than)h(the)
-g(n)n(um)n(b)r(er)g(of)f(p)r(oin)n(ts)h(in)g(the)427
-1966 y(grid.)259 2100 y Fd(out)427 2200 y Fj(The)33 b(address)e(of)i
-(the)g(\014rst)g(elemen)n(t)f(in)h(a)g(2-dimensional)e(arra)n(y)f(of)j
-(shap)r(e)f Ft(")p Fj([nco)r(ord)p Ft(_)p Fj(out][outdim])p
-Ft(")p Fj(,)427 2299 y(in)n(to)c(whic)n(h)f(the)h(co)r(ordinates)e(of)h
-(the)h(output)g(\(transformed\))f(p)r(oin)n(ts)h(will)f(b)r(e)h
-(written.)37 b(These)27 b(will)h(b)r(e)427 2399 y(stored)k(suc)n(h)g
-(that)h(the)f(v)-5 b(alue)33 b(of)f(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)h(output)h(p)r(oin)n(t)f(n)n(um)n(b)
-r(er)g Ft(")p Fj(p)r(oin)n(t)p Ft(")427 2498 y Fj(will)d(b)r(e)g(found)
-g(in)g(elemen)n(t)f Ft(")p Fj(out[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)38 b(The)29 b(p)r(oin)n(ts)f(are)g(ordered)f(suc)n(h)h
-(that)h(the)g(\014rst)f(axis)427 2598 y(of)j(the)g(input)g(grid)f(c)n
-(hanges)f(most)h(rapidly)-7 b(.)45 b(F)-7 b(or)30 b(example,)h(if)g
-(the)g(input)g(grid)f(is)h(2-dimensional)e(and)427 2698
-y(extends)24 b(from)g(\(2,-1\))g(to)g(\(3,1\),)g(the)h(output)f(p)r
-(oin)n(ts)h(will)f(b)r(e)g(stored)g(in)g(the)h(order)d(\(2,-1\),)j
-(\(3,)f(-1\),)h(\(2,0\),)427 2797 y(\(3,0\),)j(\(2,1\),)f(\(3,1\).)0
-2961 y Fd(Notes:)340 3246 y Fi(\017)45 b Fj(If)31 b(the)g(forw)n(ard)e
-(co)r(ordinate)h(transformation)f(is)h(b)r(eing)h(applied,)h(the)f
-(Mapping)f(supplied)h(m)n(ust)g(ha)n(v)n(e)427 3346 y(the)36
-b(v)-5 b(alue)34 b(of)h Ft(")p Fj(nco)r(ord)p Ft(_)p
-Fj(in)p Ft(")e Fj(for)h(its)h(Nin)h(attribute)f(and)g(the)g(v)-5
-b(alue)35 b(of)f Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(out)p
-Ft(")f Fj(for)h(its)h(Nout)427 3446 y(attribute.)i(If)28
-b(the)g(in)n(v)n(erse)e(transformation)g(is)i(b)r(eing)g(applied,)f
-(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h(rev)n(ersed.)p
-0 3647 3780 12 v 0 3778 a Fz(astT)-11 b(ranMap)1415 3777
-y Fe(Create)37 b(a)i(T)-10 b(ranMap)3064 3778 y Fz(astT)f(ranMap)0
-3969 y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(T)-7 b(ranMap)27 b(and)g(optionally)g(initialises)g(its)h(attributes.)
-227 4095 y(A)f(T)-7 b(ranMap)26 b(is)g(a)h(Mapping)f(whic)n(h)g(com)n
-(bines)g(the)h(forw)n(ard)e(transformation)g(of)i(a)f(supplied)h
-(Mapping)f(with)227 4194 y(the)34 b(in)n(v)n(erse)d(transformation)g
-(of)i(another)f(supplied)h(Mapping,)h(ignoring)d(the)i(un-used)g
-(transformation)e(in)227 4294 y(eac)n(h)c(Mapping)g(\(indeed)h(the)g
-(un-used)g(transformation)e(need)i(not)f(exist\).)227
-4419 y(When)h(the)f(forw)n(ard)e(transformation)h(of)h(the)g(T)-7
-b(ranMap)26 b(is)h(referred)f(to,)h(the)g(transformation)e(actually)i
-(used)227 4519 y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i
-(\014rst)e(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30
-b(w)n(as)g(constructed.)227 4619 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n
-(erse)d(transformation)h(of)h(the)h(T)-7 b(ranMap)31
-b(is)h(referred)f(to,)i(the)g(transformation)d(ac-)227
-4718 y(tually)f(used)g(is)g(the)g(in)n(v)n(erse)f(transformation)f(of)i
-(the)h(second)e(Mapping)h(supplied)g(when)g(the)h(T)-7
-b(ranMap)28 b(w)n(as)227 4818 y(constructed.)0 4970 y
-Fd(Synopsis:)121 b Ft(AstTranMap)39 b Fi(\003)p Ft(astTranMap\()g
-(AstMapping)g Fi(\003)p Ft(map1,)i(AstMapping)f Fi(\003)p
-Ft(map2,)h(const)g(char)h Fi(\003)p Ft(options,)227 5069
-y(...)86 b(\))0 5221 y Fd(P)m(arameters:)259 5360 y(map1)427
-5459 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(\014rst)f(comp)r(onen)n(t)g
-(Mapping,)h(whic)n(h)f(de\014nes)h(the)g(forw)n(ard)e(transformation.)
-259 5593 y Fd(map2)427 5693 y Fj(P)n(oin)n(ter)g(to)i(the)g(second)f
-(comp)r(onen)n(t)g(Mapping,)g(whic)n(h)h(de\014nes)f(the)h(in)n(v)n
-(erse)f(transformation.)p eop end
-%%Page: 371 381
-TeXDict begin 371 380 bop 3643 52 a FF(371)259 351 y
-Fd(options)427 451 y Fj(P)n(oin)n(ter)27 b(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 551 y(assignmen)n(ts)23 b(to)h(b)r(e)g(used)g(for)f
-(initialising)h(the)g(new)g(T)-7 b(ranMap.)34 b(The)24
-b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)f(that)427
-650 y(for)j(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-750 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 888 y
-Fd(...)427 988 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1087 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1187 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1287 y Fj(function\).)0 1459
-y Fd(Returned)32 b(V)-8 b(alue:)259 1607 y(astT)g(ranMap\(\))427
-1706 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(T)-7
-b(ranMap.)0 1879 y Fd(Notes:)340 2172 y Fi(\017)45 b
-Fj(The)36 b(n)n(um)n(b)r(er)g(of)g(output)h(co)r(ordinates)d(generated)
-h(b)n(y)h(the)g(t)n(w)n(o)f(Mappings)h(\(their)g(Nout)g(attribute\))427
-2272 y(m)n(ust)e(b)r(e)g(equal,)h(as)e(m)n(ust)h(the)g(n)n(um)n(b)r(er)
-f(of)h(input)g(co)r(ordinates)e(accepted)i(b)n(y)f(eac)n(h)g(Mapping)g
-(\(their)427 2371 y(Nin)28 b(attribute\).)340 2510 y
-Fi(\017)45 b Fj(The)28 b(forw)n(ard)e(transformation)g(of)h(the)h
-(\014rst)g(Mapping)f(m)n(ust)h(exist.)340 2648 y Fi(\017)45
-b Fj(The)28 b(in)n(v)n(erse)e(transformation)g(of)i(the)g(second)f
-(Mapping)g(m)n(ust)g(exist.)340 2786 y Fi(\017)45 b Fj(Note)19
-b(that)g(the)f(comp)r(onen)n(t)h(Mappings)f(supplied)g(are)g(not)g
-(copied)h(b)n(y)f(astT)-7 b(ranMap)17 b(\(the)i(new)g(T)-7
-b(ranMap)427 2886 y(simply)31 b(retains)f(a)g(reference)f(to)i(them\).)
-46 b(They)31 b(ma)n(y)f(con)n(tin)n(ue)g(to)g(b)r(e)h(used)g(for)f
-(other)f(purp)r(oses,)i(but)427 2985 y(should)21 b(not)g(b)r(e)h
-(deleted.)35 b(If)21 b(a)g(T)-7 b(ranMap)20 b(con)n(taining)g(a)h(cop)n
-(y)f(of)h(its)g(comp)r(onen)n(t)g(Mappings)g(is)g(required,)427
-3085 y(then)28 b(a)g(cop)n(y)e(of)i(the)g(T)-7 b(ranMap)26
-b(should)i(b)r(e)g(made)f(using)g(astCop)n(y)-7 b(.)340
-3223 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5 b(ject)35
-b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g(returned)g
-(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)427
-3323 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f(fail)h
-(for)f(an)n(y)g(reason.)-2 3496 y Fd(Status)33 b(Handling)n(:)227
-3642 y Fj(The)d(protected)g(in)n(terface)f(to)g(this)h(function)h
-(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g(of)g(the)g
-(parameter)227 3741 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n(e.)62
-b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n(teger)
-e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p Fj(in)n(t)227
-3841 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p 0 4051 3780
-12 v 0 4182 a Fz(astT)-11 b(ranN)930 4183 y Fe(T)h(ransform)36
-b(N-dimensional)g(co)s(ordinates)3226 4182 y Fz(astT)-11
-b(ranN)0 4359 y Fd(Description:)44 b Fj(This)37 b(function)f(applies)g
-(a)g(Mapping)g(to)g(transform)f(the)h(co)r(ordinates)f(of)h(a)g(set)g
-(of)g(p)r(oin)n(ts)g(in)h(an)227 4459 y(arbitrary)c(n)n(um)n(b)r(er)i
-(of)h(dimensions.)59 b(It)36 b(is)f(the)h(appropriate)d(routine)i(to)g
-(use)g(if)h(the)g(co)r(ordinates)d(are)i(not)227 4558
-y(purely)27 b(1-)g(or)g(2-dimensional)f(and)i(are)e(stored)h(in)h(a)f
-(single)g(arra)n(y)e(\(whic)n(h)j(they)g(need)g(not)f(\014ll)h
-(completely\).)227 4688 y(If)39 b(the)f(co)r(ordinates)e(are)h(not)h
-(stored)f(in)h(a)g(single)f(arra)n(y)-7 b(,)38 b(then)g(the)h(astT)-7
-b(ranP)36 b(function)i(migh)n(t)g(b)r(e)g(more)227 4788
-y(suitable.)0 4948 y Fd(Synopsis:)121 b Ft(void)42 b(astTranN\()e
-(AstMapping)f Fi(\003)p Ft(this,)i(int)h(npoint,)f(int)i(ncoord_in,)c
-(int)j(indim,)f(const)227 5048 y(double)g Fi(\003)p Ft(in,)h(int)h
-(forward,)d(int)i(ncoord_out,)d(int)k(outdim,)d(double)h
-Fi(\003)p Ft(out)h(\))0 5208 y Fd(P)m(arameters:)259
-5356 y(this)427 5455 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)259 5593 y Fd(np)s(oin)m(t)427 5693
-y Fj(The)g(n)n(um)n(b)r(er)f(of)h(p)r(oin)n(ts)f(to)h(b)r(e)g
-(transformed.)p eop end
-%%Page: 372 382
-TeXDict begin 372 381 bop 0 52 a FF(372)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(nco)s(ord)p
-Ft(_)p Fd(in)427 451 y Fj(The)22 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)h(for)e(eac)n(h)h(input)h(p)r(oin)n(t)
-f(\(i.e.)35 b(the)23 b(n)n(um)n(b)r(er)f(of)g(dimensions)427
-551 y(of)28 b(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)
-g(reside\).)259 679 y Fd(indim)427 779 y Fj(The)33 b(n)n(um)n(b)r(er)f
-(of)h(elemen)n(ts)g(along)e(the)i(second)f(dimension)h(of)f(the)h
-Ft(")p Fj(in)p Ft(")f Fj(arra)n(y)f(\(whic)n(h)i(con)n(tains)e(the)427
-878 y(input)39 b(co)r(ordinates\).)65 b(This)38 b(v)-5
-b(alue)37 b(is)h(required)f(so)f(that)i(the)g(co)r(ordinate)f(v)-5
-b(alues)37 b(can)g(b)r(e)h(correctly)427 978 y(lo)r(cated)21
-b(if)h(they)f(do)g(not)g(en)n(tirely)g(\014ll)h(this)f(arra)n(y)-7
-b(.)33 b(The)21 b(v)-5 b(alue)21 b(giv)n(en)f(should)h(not)g(b)r(e)h
-(less)f(than)g Ft(")p Fj(np)r(oin)n(t)p Ft(")p Fj(.)259
-1106 y Fd(in)427 1206 y Fj(The)41 b(address)f(of)h(the)h(\014rst)f
-(elemen)n(t)g(in)g(a)g(2-dimensional)f(arra)n(y)f(of)i(shap)r(e)g
-Ft(")p Fj([nco)r(ord)p Ft(_)p Fj(in][indim])p Ft(")p
-Fj(,)427 1306 y(con)n(taining)25 b(the)h(co)r(ordinates)e(of)i(the)g
-(input)h(\(un)n(transformed\))e(p)r(oin)n(ts.)36 b(These)25
-b(should)h(b)r(e)g(stored)f(suc)n(h)427 1405 y(that)38
-b(the)g(v)-5 b(alue)37 b(of)g(co)r(ordinate)f(n)n(um)n(b)r(er)i
-Ft(")p Fj(co)r(ord)p Ft(")d Fj(for)i(input)h(p)r(oin)n(t)g(n)n(um)n(b)r
-(er)f Ft(")p Fj(p)r(oin)n(t)p Ft(")f Fj(is)i(found)f(in)427
-1505 y(elemen)n(t)28 b Ft(")p Fj(in[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)259 1633 y Fd(forw)m(ard)427 1733 y Fj(A)36
-b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f(Mapping's)f
-(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)r(e)427
-1833 y(applied,)28 b(while)g(a)f(zero)f(v)-5 b(alue)28
-b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)
-r(e)g(used.)259 1961 y Fd(nco)s(ord)p Ft(_)p Fd(out)427
-2061 y Fj(The)j(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j
-(generated)e(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n
-(t)f(\(i.e.)45 b(the)427 2160 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g
-(of)h(the)f(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f
-(reside\).)39 b(This)28 b(need)g(not)h(b)r(e)f(the)427
-2260 y(same)f(as)g Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")p Fj(.)259 2388 y Fd(outdim)427 2488 y Fj(The)k(n)n(um)n(b)r(er)f
-(of)g(elemen)n(ts)g(along)g(the)g(second)g(dimension)g(of)h(the)g
-Ft(")p Fj(out)p Ft(")e Fj(arra)n(y)f(\(whic)n(h)j(will)f(con)n(tain)427
-2588 y(the)25 b(output)g(co)r(ordinates\).)34 b(This)25
-b(v)-5 b(alue)24 b(is)g(required)f(so)h(that)h(the)f(co)r(ordinate)g(v)
--5 b(alues)23 b(can)h(b)r(e)h(correctly)427 2687 y(lo)r(cated)40
-b(if)h(they)f(will)h(not)f(en)n(tirely)g(\014ll)g(this)h(arra)n(y)-7
-b(.)72 b(The)40 b(v)-5 b(alue)41 b(giv)n(en)e(should)h(not)g(b)r(e)h
-(less)e(than)427 2787 y Ft(")p Fj(np)r(oin)n(t)p Ft(")p
-Fj(.)259 2915 y Fd(out)427 3015 y Fj(The)33 b(address)e(of)i(the)g
-(\014rst)g(elemen)n(t)f(in)h(a)g(2-dimensional)e(arra)n(y)f(of)j(shap)r
-(e)f Ft(")p Fj([nco)r(ord)p Ft(_)p Fj(out][outdim])p
-Ft(")p Fj(,)427 3115 y(in)n(to)c(whic)n(h)f(the)h(co)r(ordinates)e(of)h
-(the)h(output)g(\(transformed\))f(p)r(oin)n(ts)h(will)f(b)r(e)h
-(written.)37 b(These)27 b(will)h(b)r(e)427 3214 y(stored)k(suc)n(h)g
-(that)h(the)f(v)-5 b(alue)33 b(of)f(co)r(ordinate)f(n)n(um)n(b)r(er)h
-Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)h(output)h(p)r(oin)n(t)f(n)n(um)n(b)
-r(er)g Ft(")p Fj(p)r(oin)n(t)p Ft(")427 3314 y Fj(will)c(b)r(e)g(found)
-g(in)g(elemen)n(t)g Ft(")p Fj(out[co)r(ord][p)r(oin)n(t])p
-Ft(")p Fj(.)0 3471 y Fd(Notes:)340 3750 y Fi(\017)45
-b Fj(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h(transformation)f(is)h
-(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h(m)n(ust)g(ha)n(v)n(e)
-427 3849 y(the)36 b(v)-5 b(alue)34 b(of)h Ft(")p Fj(nco)r(ord)p
-Ft(_)p Fj(in)p Ft(")e Fj(for)h(its)h(Nin)h(attribute)f(and)g(the)g(v)-5
-b(alue)35 b(of)f Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(out)p
-Ft(")f Fj(for)h(its)h(Nout)427 3949 y(attribute.)i(If)28
-b(the)g(in)n(v)n(erse)e(transformation)g(is)i(b)r(eing)g(applied,)f
-(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h(rev)n(ersed.)p
-0 4139 3780 12 v 0 4270 a Fz(astT)-11 b(ranP)734 4271
-y Fe(T)h(ransform)37 b(N-dimensional)f(co)s(ordinates)h(held)i(in)1502
-4371 y(separate)f(arra)m(ys)3240 4270 y Fz(astT)-11 b(ranP)0
-4551 y Fd(Description:)44 b Fj(This)37 b(function)f(applies)g(a)g
-(Mapping)g(to)g(transform)f(the)h(co)r(ordinates)f(of)h(a)g(set)g(of)g
-(p)r(oin)n(ts)g(in)h(an)227 4650 y(arbitrary)c(n)n(um)n(b)r(er)i(of)h
-(dimensions.)59 b(It)36 b(is)f(the)h(appropriate)d(routine)i(to)g(use)g
-(if)h(the)g(co)r(ordinates)d(are)i(not)227 4750 y(purely)25
-b(1-)f(or)h(2-dimensional)e(and)i(are)g(stored)f(in)h(separate)f(arra)n
-(ys,)f(since)i(eac)n(h)f(co)r(ordinate)g(arra)n(y)f(is)i(lo)r(cated)227
-4850 y(b)n(y)j(supplying)f(a)g(separate)f(p)r(oin)n(ter)h(to)h(it.)227
-4972 y(If)j(the)g(co)r(ordinates)e(are)g(stored)g(in)i(a)f(single)g
-(\(2-dimensional\))f(arra)n(y)-7 b(,)29 b(then)i(the)f(astT)-7
-b(ranN)30 b(function)h(migh)n(t)227 5072 y(b)r(e)d(more)f(suitable.)0
-5217 y Fd(Synopsis:)121 b Ft(void)42 b(astTranP\()e(AstMapping)f
-Fi(\003)p Ft(this,)i(int)h(npoint,)f(int)i(ncoord_in,)c(const)i(double)
-h Fi(\003)p Ft(ptr_in[],)227 5316 y(int)h(forward,)d(int)i(ncoord_out,)
-d(double)i Fi(\003)p Ft(ptr_out[])f(\))0 5461 y Fd(P)m(arameters:)259
-5593 y(this)427 5693 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Mapping)f(to)g
-(b)r(e)h(applied.)p eop end
-%%Page: 373 383
-TeXDict begin 373 382 bop 3643 52 a FF(373)259 351 y
-Fd(np)s(oin)m(t)427 451 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(p)r(oin)n
-(ts)f(to)h(b)r(e)g(transformed.)259 588 y Fd(nco)s(ord)p
-Ft(_)p Fd(in)427 688 y Fj(The)22 b(n)n(um)n(b)r(er)g(of)g(co)r
-(ordinates)f(b)r(eing)h(supplied)h(for)e(eac)n(h)h(input)h(p)r(oin)n(t)
-f(\(i.e.)35 b(the)23 b(n)n(um)n(b)r(er)f(of)g(dimensions)427
-787 y(of)28 b(the)g(space)f(in)h(whic)n(h)f(the)h(input)g(p)r(oin)n(ts)
-g(reside\).)259 924 y Fd(ptr)p Ft(_)p Fd(in)427 1024
-y Fj(An)h(arra)n(y)d(of)i(p)r(oin)n(ters)g(to)g(double,)h(with)g
-Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p Ft(")d Fj(elemen)n(ts.)39
-b(Elemen)n(t)29 b Ft(")p Fj(ptr)p Ft(_)p Fj(in[co)r(ord])p
-Ft(")d Fj(should)427 1124 y(p)r(oin)n(t)20 b(at)g(the)g(\014rst)g
-(elemen)n(t)g(of)g(an)f(arra)n(y)f(of)h(double)h(\(with)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")e Fj(elemen)n(ts\))h(whic)n(h)g(con)n
-(tain)f(the)h(v)-5 b(al-)427 1223 y(ues)24 b(of)g(co)r(ordinate)e(n)n
-(um)n(b)r(er)i Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)h(eac)n(h)g(input)i
-(\(un)n(transformed\))e(p)r(oin)n(t.)36 b(The)23 b(v)-5
-b(alue)24 b(of)g(co)r(ordi-)427 1323 y(nate)19 b(n)n(um)n(b)r(er)f
-Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)i(input)h(p)r(oin)n(t)g(n)n(um)n(b)r
-(er)f Ft(")p Fj(p)r(oin)n(t)p Ft(")g Fj(is)g(therefore)f(giv)n(en)h(b)n
-(y)g Ft(")p Fj(ptr)p Ft(_)p Fj(in[co)r(ord][p)r(oin)n(t])p
-Ft(")427 1423 y Fj(\(assuming)27 b(b)r(oth)h(indices)g(are)e
-(zero-based\).)259 1560 y Fd(forw)m(ard)427 1659 y Fj(A)36
-b(non-zero)d(v)-5 b(alue)35 b(indicates)f(that)i(the)f(Mapping's)f
-(forw)n(ard)g(co)r(ordinate)f(transformation)h(is)g(to)h(b)r(e)427
-1759 y(applied,)28 b(while)g(a)f(zero)f(v)-5 b(alue)28
-b(indicates)f(that)h(the)g(in)n(v)n(erse)e(transformation)g(should)i(b)
-r(e)g(used.)259 1896 y Fd(nco)s(ord)p Ft(_)p Fd(out)427
-1996 y Fj(The)j(n)n(um)n(b)r(er)e(of)i(co)r(ordinates)d(b)r(eing)j
-(generated)e(b)n(y)h(the)g(Mapping)g(for)g(eac)n(h)f(output)i(p)r(oin)n
-(t)f(\(i.e.)45 b(the)427 2095 y(n)n(um)n(b)r(er)28 b(of)g(dimensions)g
-(of)h(the)f(space)g(in)g(whic)n(h)h(the)f(output)h(p)r(oin)n(ts)f
-(reside\).)39 b(This)28 b(need)g(not)h(b)r(e)f(the)427
-2195 y(same)f(as)g Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p
-Ft(")p Fj(.)259 2332 y Fd(ptr)p Ft(_)p Fd(out)427 2432
-y Fj(An)19 b(arra)n(y)e(of)h(p)r(oin)n(ters)g(to)h(double,)h(with)f
-Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(out)p Ft(")d Fj(elemen)n(ts.)34
-b(Elemen)n(t)19 b Ft(")p Fj(ptr)p Ft(_)p Fj(out[co)r(ord])p
-Ft(")d Fj(should)427 2531 y(p)r(oin)n(t)23 b(at)f(the)g(\014rst)g
-(elemen)n(t)g(of)g(an)g(arra)n(y)e(of)i(double)g(\(with)h
-Ft(")p Fj(np)r(oin)n(t)p Ft(")e Fj(elemen)n(ts\))i(in)n(to)e(whic)n(h)h
-(the)h(v)-5 b(alues)427 2631 y(of)24 b(co)r(ordinate)e(n)n(um)n(b)r(er)
-h Ft(")p Fj(co)r(ord)p Ft(")f Fj(for)h(eac)n(h)f(output)i
-(\(transformed\))f(p)r(oin)n(t)h(will)g(b)r(e)f(written.)36
-b(The)24 b(v)-5 b(alue)427 2731 y(of)35 b(co)r(ordinate)e(n)n(um)n(b)r
-(er)h Ft(")p Fj(co)r(ord)p Ft(")e Fj(for)i(output)h(p)r(oin)n(t)g(n)n
-(um)n(b)r(er)f Ft(")p Fj(p)r(oin)n(t)p Ft(")g Fj(will)g(therefore)g(b)r
-(e)h(found)f(in)427 2830 y Ft(")p Fj(ptr)p Ft(_)p Fj(out[co)r(ord][p)r
-(oin)n(t])p Ft(")p Fj(.)0 3001 y Fd(Notes:)340 3292 y
-Fi(\017)45 b Fj(If)31 b(the)g(forw)n(ard)e(co)r(ordinate)h
-(transformation)f(is)h(b)r(eing)h(applied,)h(the)f(Mapping)f(supplied)h
-(m)n(ust)g(ha)n(v)n(e)427 3392 y(the)36 b(v)-5 b(alue)34
-b(of)h Ft(")p Fj(nco)r(ord)p Ft(_)p Fj(in)p Ft(")e Fj(for)h(its)h(Nin)h
-(attribute)f(and)g(the)g(v)-5 b(alue)35 b(of)f Ft(")p
-Fj(nco)r(ord)p Ft(_)p Fj(out)p Ft(")f Fj(for)h(its)h(Nout)427
-3491 y(attribute.)i(If)28 b(the)g(in)n(v)n(erse)e(transformation)g(is)i
-(b)r(eing)g(applied,)f(these)h(v)-5 b(alues)27 b(should)g(b)r(e)h(rev)n
-(ersed.)340 3628 y Fi(\017)45 b Fj(This)28 b(routine)f(is)h(not)f(a)n
-(v)-5 b(ailable)26 b(in)i(the)g(F)-7 b(ortran)27 b(77)f(in)n(terface)h
-(to)h(the)g(AST)g(library)-7 b(.)p 0 3836 3780 12 v 0
-3967 a Fz(astT)c(une)783 3968 y Fe(Set)38 b(or)g(get)g(an)h(AST)f
-(global)f(tuning)h(parameter)3316 3967 y Fz(astT)-11
-b(une)0 4165 y Fd(Description:)44 b Fj(This)35 b(function)g(returns)f
-(the)g(curren)n(t)g(v)-5 b(alue)34 b(of)h(an)f(AST)h(global)e(tuning)i
-(parameter,)f(optionally)227 4265 y(storing)27 b(a)g(new)h(v)-5
-b(alue)27 b(for)g(the)h(parameter.)0 4423 y Fd(Synopsis:)121
-b Ft(int)42 b(astTune\()e(const)i(char)g Fi(\003)p Ft(name,)f(int)h
-(value)g(\))0 4581 y Fd(P)m(arameters:)259 4726 y(name)427
-4826 y Fj(The)28 b(name)f(of)h(the)g(tuning)g(parameter)e
-(\(case-insensitiv)n(e\).)259 4963 y Fd(v)-5 b(alue)427
-5062 y Fj(The)22 b(new)g(v)-5 b(alue)22 b(for)f(the)h(tuning)g
-(parameter.)34 b(If)22 b(this)g(is)g(AST)p Ft(__)p Fj(TUNULL,)g(the)g
-(existing)g(curren)n(t)f(v)-5 b(alue)427 5162 y(will)28
-b(b)r(e)g(retained.)0 5333 y Fd(Returned)k(V)-8 b(alue:)259
-5478 y(astT)g(une\(\))427 5577 y Fj(The)29 b(original)e(v)-5
-b(alue)29 b(of)g(the)g(tuning)g(parameter.)39 b(A)29
-b(default)g(v)-5 b(alue)28 b(will)h(b)r(e)h(returned)e(if)h(no)g(v)-5
-b(alue)28 b(has)427 5677 y(b)r(een)g(set)g(for)f(the)h(parameter.)p
-eop end
-%%Page: 374 384
-TeXDict begin 374 383 bop 0 52 a FF(374)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)0 351 y Fd(Notes:)340
-624 y Fi(\017)45 b Fj(This)30 b(function)h(attempts)f(to)g(execute)g
-(ev)n(en)g(if)g(the)g(AST)h(error)d(status)i(is)g(set)g(on)f(en)n(try)
--7 b(,)31 b(although)e(no)427 724 y(further)f(error)d(rep)r(ort)i(will)
-h(b)r(e)g(made)f(if)i(it)f(subsequen)n(tly)f(fails)g(under)h(these)f
-(circumstances.)340 847 y Fi(\017)45 b Fj(All)28 b(threads)f(in)h(a)f
-(pro)r(cess)g(share)f(the)i(same)f(AST)h(tuning)g(parameters)e(v)-5
-b(alues.)32 999 y Fd(T)d(uning)31 b(P)m(arameters)i(:)259
-1126 y(Ob)5 b(jectCac)m(hing)427 1225 y Fj(A)38 b(b)r(o)r(olean)f
-(\015ag)g(whic)n(h)h(indicates)f(what)h(should)f(happ)r(en)h(to)g(the)g
-(memory)f(o)r(ccupied)g(b)n(y)h(an)f(AST)427 1325 y(Ob)5
-b(ject)28 b(when)h(the)f(Ob)5 b(ject)29 b(is)f(deleted)g(\(i.e.)40
-b(when)28 b(its)g(reference)g(coun)n(t)g(falls)g(to)g(zero)f(or)g(it)i
-(is)f(deleted)427 1424 y(using)22 b(astDelete\).)36 b(If)23
-b(this)f(is)g(zero,)h(the)g(memory)e(is)h(simply)h(freed)f(using)g(the)
-h(systems)f Ft(")p Fj(free)p Ft(")f Fj(function.)427
-1524 y(If)30 b(it)g(is)f(non-zero,)f(the)i(memory)f(is)g(not)g(freed.)
-42 b(Instead)29 b(a)g(p)r(oin)n(ter)g(to)g(it)h(is)f(stored)g(in)g(a)g
-(p)r(o)r(ol)h(of)f(suc)n(h)427 1624 y(p)r(oin)n(ters,)g(all)g(of)h
-(whic)n(h)f(refer)f(to)i(allo)r(cated)e(but)i(curren)n(tly)e(un)n(used)
-i(blo)r(c)n(ks)e(of)h(memory)-7 b(.)42 b(This)29 b(allo)n(ws)427
-1723 y(AST)c(to)g(sp)r(eed)f(up)h(subsequen)n(t)f(Ob)5
-b(ject)25 b(creation)e(b)n(y)h(re-using)g(previously)f(allo)r(cated)h
-(memory)f(blo)r(c)n(ks)427 1823 y(rather)35 b(than)g(allo)r(cating)g
-(new)g(memory)g(using)g(the)g(systems)g(mallo)r(c)g(function.)61
-b(The)36 b(default)g(v)-5 b(alue)427 1923 y(for)28 b(this)g(parameter)f
-(is)h(zero.)37 b(Setting)28 b(it)g(to)g(a)g(non-zero)e(v)-5
-b(alue)28 b(will)g(result)g(in)g(Ob)5 b(ject)28 b(memory)g(b)r(eing)427
-2022 y(cac)n(hed)h(in)g(future.)42 b(Setting)30 b(it)f(bac)n(k)g(to)g
-(zero)f(causes)g(an)n(y)h(memory)f(blo)r(c)n(ks)g(curren)n(tly)h(in)g
-(the)h(p)r(o)r(ol)f(to)427 2122 y(b)r(e)24 b(freed.)36
-b(Note,)24 b(this)g(tuning)g(parameter)e(only)h(con)n(trols)f(the)i
-(cac)n(hing)e(of)i(memory)f(used)g(to)h(store)e(AST)427
-2221 y(Ob)5 b(jects.)37 b(T)-7 b(o)27 b(cac)n(he)g(other)g(memory)f
-(blo)r(c)n(ks)h(allo)r(cated)g(b)n(y)g(AST,)i(use)e(MemoryCac)n(hing.)
-259 2345 y Fd(MemoryCac)m(hing)427 2444 y Fj(A)f(b)r(o)r(olean)f
-(\015ag)f(similar)g(to)i(Ob)5 b(jectCac)n(hing)24 b(except)h(that)g(it)
-h(con)n(trols)e(cac)n(hing)g(of)h(all)g(memory)f(blo)r(c)n(ks)427
-2544 y(of)40 b(less)f(than)h(300)f(b)n(ytes)g(allo)r(cated)h(b)n(y)f
-(AST)h(\(whether)g(for)g(in)n(ternal)f(or)g(external)g(use\),)k(not)d
-(just)427 2643 y(memory)27 b(used)h(to)f(store)g(AST)h(Ob)5
-b(jects.)p 0 2823 3780 12 v 0 2955 a Fz(astUin)l(terp)213
-b Fe(P)m(erform)36 b(sub-pixel)i(in)m(terp)s(olation)d(on)k(a)f(grid)
-1709 3070 y(of)h(data)3154 2955 y Fz(astUin)l(terp)0
-3216 y Fd(Description:)44 b Fj(This)31 b(is)f(a)h(\014ctitious)f
-(function)h(whic)n(h)g(do)r(es)f(not)h(actually)f(exist.)45
-b(Instead,)31 b(this)g(description)f(con-)227 3315 y(stitutes)c(a)f
-(template)g(so)g(that)g(y)n(ou)f(ma)n(y)h(implemen)n(t)h(a)e(function)i
-(with)g(this)f(in)n(terface)g(for)f(y)n(ourself)g(\(and)i(giv)n(e)227
-3415 y(it)32 b(an)n(y)e(name)g(y)n(ou)h(wish\).)47 b(A)31
-b(p)r(oin)n(ter)f(to)h(suc)n(h)g(a)f(function)i(ma)n(y)e(b)r(e)h
-(passed)f(via)h(the)g Ft(")p Fj(\014n)n(terp)p Ft(")f
-Fj(parameter)227 3515 y(of)25 b(the)g(astResample)p Fl(<)p
-Fj(X)p Fl(>)f Fj(functions)h(\(q.v.\))36 b(in)25 b(order)e(to)i(p)r
-(erform)f(sub-pixel)h(in)n(terp)r(olation)f(during)g(resam-)227
-3614 y(pling)k(of)g(gridded)f(data)g(\(y)n(ou)g(m)n(ust)h(also)f(set)g
-(the)h Ft(")p Fj(in)n(terp)p Ft(")f Fj(parameter)f(of)i(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(to)i(the)g(v)-5 b(alue)227 3714
-y(AST)p Ft(__)p Fj(UINTERP\).)30 b(This)h(allo)n(ws)e(y)n(ou)g(to)i
-(use)f(y)n(our)f(o)n(wn)h(in)n(terp)r(olation)f(algorithm)h(in)g
-(addition)h(to)f(those)227 3813 y(whic)n(h)e(are)e(pre-de\014ned.)227
-3933 y(The)35 b(function)g(in)n(terp)r(olates)e(an)h(input)h(grid)f(of)
-g(data)g(\(and,)i(optionally)-7 b(,)35 b(pro)r(cesses)e(asso)r(ciated)g
-(statistical)227 4033 y(v)-5 b(ariance)27 b(estimates\))g(at)h(a)f(sp)r
-(eci\014ed)h(set)f(of)h(p)r(oin)n(ts.)0 4172 y Fd(Synopsis:)121
-b Ft(void)42 b(astUinterp\()d(int)j(ndim_in,)e(const)i(int)g
-(lbnd_in[],)e(const)h(int)i(ubnd_in[],)c(const)227 4272
-y Fl(<)p Ft(Xtype)p Fl(>)i Ft(in[],)g(const)h Fl(<)p
-Ft(Xtype)p Fl(>)f Ft(in_var[],)e(int)k(npoint,)e(const)g(int)h
-(offset[],)e(const)i(double)227 4372 y Fi(\003)p Ft(const)f(coords[],)f
-(const)i(double)f(params[],)f(int)i(flags,)f Fl(<)p Ft(Xtype)p
-Fl(>)g Ft(badval,)f Fl(<)p Ft(Xtype)p Fl(>)h Ft(out[],)227
-4471 y Fl(<)p Ft(Xtype)p Fl(>)g Ft(out_var[],)e(int)k
-Fi(\003)p Ft(nbad)e(\))0 4611 y Fd(P)m(arameters:)259
-4738 y(ndim)p Ft(_)p Fd(in)427 4837 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)
-h(dimensions)f(in)h(the)g(input)g(grid.)36 b(This)28
-b(will)g(b)r(e)g(at)f(least)h(one.)259 4960 y Fd(lbnd)p
-Ft(_)p Fd(in)427 5060 y Fj(P)n(oin)n(ter)h(to)i(an)f(arra)n(y)e(of)j
-(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p Fj(in)p
-Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e(of)h
-(the)427 5160 y(cen)n(tre)d(of)h(the)g(\014rst)f(pixel)h(in)g(the)g
-(input)g(grid)f(along)f(eac)n(h)h(dimension.)259 5283
-y Fd(ubnd)p Ft(_)p Fd(in)427 5382 y Fj(P)n(oin)n(ter)i(to)i(an)f(arra)n
-(y)e(of)j(in)n(tegers,)f(with)h Ft(")p Fj(ndim)p Ft(_)p
-Fj(in)p Ft(")f Fj(elemen)n(ts,)h(con)n(taining)f(the)h(co)r(ordinates)e
-(of)h(the)427 5482 y(cen)n(tre)d(of)h(the)g(last)f(pixel)h(in)g(the)g
-(input)g(grid)f(along)f(eac)n(h)h(dimension.)427 5593
-y(Note)f(that)g Ft(")p Fj(lbnd)p Ft(_)p Fj(in)p Ft(")e
-Fj(and)i Ft(")p Fj(ubnd)p Ft(_)p Fj(in)p Ft(")f Fj(together)f(de\014ne)
-i(the)g(shap)r(e,)g(size)f(and)g(co)r(ordinate)f(system)i(of)427
-5693 y(the)i(input)h(grid)e(in)g(the)h(same)f(w)n(a)n(y)g(as)g(they)g
-(do)h(in)g(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)p
-eop end
-%%Page: 375 385
-TeXDict begin 375 384 bop 3643 52 a FF(375)259 351 y
-Fd(in)427 451 y Fj(P)n(oin)n(ter)29 b(to)i(an)f(arra)n(y)-7
-b(,)30 b(with)h(one)f(elemen)n(t)h(for)g(eac)n(h)f(pixel)g(in)h(the)g
-(input)h(grid,)f(con)n(taining)f(the)h(input)427 551
-y(data.)k(This)24 b(will)h(b)r(e)f(the)g(same)g(arra)n(y)d(as)i(w)n(as)
-g(passed)h(to)f(astResample)p Fl(<)p Fj(X)p Fl(>)g Fj(via)g(the)i
-Ft(")p Fj(in)p Ft(")e Fj(parameter.)427 650 y(The)28
-b(n)n(umerical)f(t)n(yp)r(e)g(of)h(this)g(arra)n(y)d(should)j(matc)n(h)
-f(that)h(of)f(the)h(data)f(b)r(eing)h(pro)r(cessed.)259
-788 y Fd(in)p Ft(_)p Fd(v)-5 b(ar)427 887 y Fj(P)n(oin)n(ter)27
-b(to)i(an)g(optional)f(second)g(arra)n(y)e(with)k(the)f(same)f(size)h
-(and)f(t)n(yp)r(e)h(as)f(the)i Ft(")p Fj(in)p Ft(")e
-Fj(arra)n(y)-7 b(.)38 b(If)29 b(giv)n(en,)427 987 y(this)35
-b(will)h(con)n(tain)e(the)h(set)g(of)g(v)-5 b(ariance)33
-b(v)-5 b(alues)35 b(asso)r(ciated)e(with)j(the)f(input)h(data)e(and)h
-(will)g(b)r(e)g(the)427 1087 y(same)27 b(arra)n(y)f(as)g(w)n(as)h
-(passed)g(to)g(astResample)p Fl(<)p Fj(X)p Fl(>)g Fj(via)g(the)h
-Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p Ft(")25 b Fj(parameter.)427
-1205 y(If)j(no)g(v)-5 b(ariance)26 b(v)-5 b(alues)27
-b(are)g(b)r(eing)h(pro)r(cessed,)e(this)i(will)g(b)r(e)g(a)f(NULL)h(p)r
-(oin)n(ter.)259 1343 y Fd(np)s(oin)m(t)427 1442 y Fj(The)e(n)n(um)n(b)r
-(er)f(of)g(p)r(oin)n(ts)h(at)f(whic)n(h)g(the)h(input)g(grid)f(is)g(to)
-g(b)r(e)h(in)n(terp)r(olated.)36 b(This)25 b(will)h(b)r(e)g(at)f(least)
-g(one.)259 1580 y Fd(o\013set)427 1680 y Fj(P)n(oin)n(ter)e(to)h(an)f
-(arra)n(y)f(of)i(in)n(tegers)f(with)h Ft(")p Fj(np)r(oin)n(t)p
-Ft(")g Fj(elemen)n(ts.)35 b(F)-7 b(or)24 b(eac)n(h)f(in)n(terp)r
-(olation)g(p)r(oin)n(t,)i(this)f(will)427 1779 y(con)n(tain)g(the)h
-(zero-based)d(index)j(in)f(the)h Ft(")p Fj(out)p Ft(")f
-Fj(\(and)g Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")p
-Fj(\))23 b(arra)n(y\(s\))g(at)h(whic)n(h)g(the)h(in)n(terp)r(olated)427
-1879 y(v)-5 b(alue)25 b(\(and)g(its)h(v)-5 b(ariance,)24
-b(if)i(required\))e(should)h(b)r(e)g(stored.)36 b(F)-7
-b(or)24 b(example,)h(the)h(in)n(terp)r(olated)e(v)-5
-b(alue)25 b(for)427 1978 y(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-Ft(")p Fj(p)r(oin)n(t)p Ft(")f Fj(should)h(b)r(e)g(stored)f(in)h
-Ft(")p Fj(out[o\013set[p)r(oin)n(t]])p Ft(")f Fj(\(assuming)g(the)i
-(index)f Ft(")p Fj(p)r(oin)n(t)p Ft(")f Fj(is)427 2078
-y(zero-based\).)259 2216 y Fd(co)s(ords)427 2315 y Fj(An)f(arra)n(y)d
-(of)i(p)r(oin)n(ters)g(to)g(double,)h(with)g Ft(")p Fj(ndim)p
-Ft(_)p Fj(in)p Ft(")f Fj(elemen)n(ts.)36 b(Elemen)n(t)23
-b Ft(")p Fj(co)r(ords[co)r(ord])p Ft(")d Fj(will)j(p)r(oin)n(t)427
-2415 y(at)j(the)g(\014rst)f(elemen)n(t)h(of)g(an)f(arra)n(y)f(of)h
-(double)h(\(with)g Ft(")p Fj(np)r(oin)n(t)p Ft(")g Fj(elemen)n(ts\))g
-(whic)n(h)f(con)n(tains)g(the)h(v)-5 b(alues)427 2515
-y(of)29 b(co)r(ordinate)e(n)n(um)n(b)r(er)h Ft(")p Fj(co)r(ord)p
-Ft(")f Fj(for)h(eac)n(h)f(in)n(terp)r(olation)h(p)r(oin)n(t.)39
-b(The)29 b(v)-5 b(alue)28 b(of)h(co)r(ordinate)e(n)n(um)n(b)r(er)427
-2614 y Ft(")p Fj(co)r(ord)p Ft(")i Fj(for)g(in)n(terp)r(olation)g(p)r
-(oin)n(t)i(n)n(um)n(b)r(er)f Ft(")p Fj(p)r(oin)n(t)p
-Ft(")f Fj(is)h(therefore)f(giv)n(en)h(b)n(y)g Ft(")p
-Fj(co)r(ords[co)r(ord][p)r(oin)n(t])p Ft(")427 2714 y
-Fj(\(assuming)d(b)r(oth)h(indices)g(are)e(zero-based\).)427
-2832 y(If)42 b(an)n(y)f(in)n(terp)r(olation)f(p)r(oin)n(t)i(has)f(an)n
-(y)f(of)i(its)f(co)r(ordinates)f(equal)h(to)g(the)h(v)-5
-b(alue)42 b(AST)p Ft(__)p Fj(BAD)f(\(as)427 2932 y(de\014ned)26
-b(in)f(the)g Ft(")p Fj(ast.h)p Ft(")f Fj(header)g(\014le\),)i(then)f
-(the)g(corresp)r(onding)e(output)j(data)e(\(and)h(v)-5
-b(ariance\))24 b(should)427 3032 y(either)33 b(b)r(e)g(set)f(to)h(the)g
-(v)-5 b(alue)32 b(giv)n(en)g(b)n(y)g Ft(")p Fj(badv)-5
-b(al)p Ft(")p Fj(,)33 b(or)e(left)j(unc)n(hanged,)f(dep)r(ending)g(on)f
-(whether)g(the)427 3131 y(AST)p Ft(__)p Fj(NOBAD)c(\015ag)f(is)g(sp)r
-(eci\014ed)h(b)n(y)f Ft(")p Fj(\015ags)p Ft(")p Fj(.)259
-3269 y Fd(params)427 3368 y Fj(This)45 b(will)f(b)r(e)h(a)f(p)r(oin)n
-(ter)g(to)g(the)h(same)f(arra)n(y)d(as)j(w)n(as)g(giv)n(en)f(via)h(the)
-h Ft(")p Fj(params)p Ft(")d Fj(parameter)h(of)427 3468
-y(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)58 b(Y)-7 b(ou)35
-b(ma)n(y)f(use)g(this)i(to)e(pass)h(an)n(y)f(additional)g(parameter)f
-(v)-5 b(alues)35 b(required)f(b)n(y)427 3568 y(y)n(our)27
-b(in)n(terp)r(olation)f(algorithm.)259 3705 y Fd(\015ags)427
-3805 y Fj(This)37 b(will)h(b)r(e)f(the)h(same)e(v)-5
-b(alue)37 b(as)g(w)n(as)f(giv)n(en)g(via)h(the)g Ft(")p
-Fj(\015ags)p Ft(")e Fj(parameter)h(of)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(.)427 3905 y(Y)-7 b(ou)30 b(ma)n(y)f(test)g
-(this)h(v)-5 b(alue)29 b(to)h(pro)n(vide)e(additional)h(con)n(trol)f(o)
-n(v)n(er)g(the)i(op)r(eration)e(of)i(y)n(our)e(resampling)427
-4004 y(algorithm.)52 b(Note)34 b(that)f(the)g(sp)r(ecial)g(\015ag)f(v)
--5 b(alues)33 b(AST)p Ft(__)p Fj(URESAMP1,)h(2,)g(3)e(&)h(4)g(are)f
-(reserv)n(ed)f(for)427 4104 y(y)n(ou)g(to)h(use)f(for)g(y)n(our)g(o)n
-(wn)g(purp)r(oses)f(and)i(will)g(not)f(clash)g(with)h(other)f
-(pre-de\014ned)h(\015ag)e(v)-5 b(alues)32 b(\(see)427
-4203 y(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(\).)259
-4341 y Fd(badv)-5 b(al)427 4441 y Fj(This)32 b(will)g(b)r(e)g(the)g
-(same)f(v)-5 b(alue)32 b(as)f(w)n(as)f(giv)n(en)h(via)h(the)g
-Ft(")p Fj(badv)-5 b(al)p Ft(")30 b Fj(parameter)g(of)i(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(,)427 4540 y(and)40 b(will)g(ha)n(v)n(e)f(the)h
-(same)g(n)n(umerical)f(t)n(yp)r(e)h(as)f(the)i(data)e(b)r(eing)h(pro)r
-(cessed)f(\(i.e.)75 b(as)39 b(elemen)n(ts)h(of)427 4640
-y(the)34 b Ft(")p Fj(in)p Ft(")e Fj(arra)n(y\).)51 b(It)33
-b(should)g(b)r(e)g(used)g(to)g(test)g(for)f(bad)h(pixels)g(in)g(the)g
-(input)h(grid)e(\(but)i(only)f(if)g(the)427 4739 y(AST)p
-Ft(__)p Fj(USEBAD)26 b(\015ag)f(is)g(set)h(via)f(the)h
-Ft(")p Fj(\015ags)p Ft(")e Fj(parameter\))h(and)g(\(unless)h(the)g(AST)
-p Ft(__)p Fj(NOBAD)g(\015ag)f(is)427 4839 y(set)j(in)g
-Ft(")p Fj(\015ags)p Ft(")p Fj(\))e(for)h(iden)n(tifying)h(bad)f(output)
-h(v)-5 b(alues)27 b(in)h(the)g Ft(")p Fj(out)p Ft(")f
-Fj(\(and)h Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")p
-Fj(\))26 b(arra)n(y\(s\).)259 4977 y Fd(out)427 5076
-y Fj(P)n(oin)n(ter)33 b(to)h(an)h(arra)n(y)d(with)j(the)f(same)g(n)n
-(umerical)g(t)n(yp)r(e)g(as)g(the)h Ft(")p Fj(in)p Ft(")f
-Fj(arra)n(y)-7 b(,)34 b(in)n(to)g(whic)n(h)g(the)h(in)n(ter-)427
-5176 y(p)r(olated)c(data)f(v)-5 b(alues)31 b(should)f(b)r(e)h
-(returned.)47 b(Note)30 b(that)h(details)g(of)g(the)g(storage)e(order)g
-(and)i(n)n(um)n(b)r(er)427 5276 y(of)i(dimensions)f(of)h(this)g(arra)n
-(y)d(are)i(not)h(required,)g(since)f(the)h Ft(")p Fj(o\013set)p
-Ft(")f Fj(arra)n(y)e(con)n(tains)i(all)g(necessary)427
-5375 y(information)27 b(ab)r(out)h(where)f(eac)n(h)g(returned)g(v)-5
-b(alue)27 b(should)h(b)r(e)g(stored.)427 5494 y(In)38
-b(general,)g(not)g(all)f(elemen)n(ts)g(of)g(this)h(arra)n(y)d(\(or)h
-(the)i Ft(")p Fj(out)p Ft(_)p Fj(v)-5 b(ar)p Ft(")35
-b Fj(arra)n(y)g(b)r(elo)n(w\))j(ma)n(y)e(b)r(e)i(used)f(in)427
-5593 y(an)n(y)i(particular)e(in)n(v)n(o)r(cation)h(of)h(the)g
-(function.)72 b(Those)39 b(whic)n(h)g(are)f(not)h(used)g(should)g(b)r
-(e)g(returned)427 5693 y(unc)n(hanged.)p eop end
-%%Page: 376 386
-TeXDict begin 376 385 bop 0 52 a FF(376)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(out)p
-Ft(_)p Fd(v)-5 b(ar)427 451 y Fj(P)n(oin)n(ter)36 b(to)i(an)g(optional)
-f(arra)n(y)e(with)k(the)f(same)f(t)n(yp)r(e)h(and)g(size)f(as)h(the)g
-Ft(")p Fj(out)p Ft(")f Fj(arra)n(y)-7 b(,)38 b(in)n(to)g(whic)n(h)427
-551 y(v)-5 b(ariance)24 b(estimates)g(for)g(the)g(resampled)g(v)-5
-b(alues)24 b(should)g(b)r(e)h(returned.)35 b(This)25
-b(arra)n(y)d(will)j(only)f(b)r(e)g(giv)n(en)427 650 y(if)k(the)g
-Ft(")p Fj(in)p Ft(_)p Fj(v)-5 b(ar)p Ft(")26 b Fj(arra)n(y)f(has)j
-(also)e(b)r(een)i(giv)n(en.)427 762 y(If)i(giv)n(en,)f(it)h(is)f
-(addressed)f(in)h(exactly)g(the)g(same)g(w)n(a)n(y)f(\(via)h(the)h
-Ft(")p Fj(o\013set)p Ft(")e Fj(arra)n(y\))f(as)i(the)g
-Ft(")p Fj(out)p Ft(")g Fj(arra)n(y)-7 b(.)427 861 y(The)22
-b(v)-5 b(alues)21 b(returned)g(should)h(b)r(e)g(estimates)f(of)h(the)g
-(statistical)f(v)-5 b(ariance)21 b(of)g(the)h(corresp)r(onding)e(v)-5
-b(alues)427 961 y(in)35 b(the)g Ft(")p Fj(out)p Ft(")e
-Fj(arra)n(y)-7 b(,)34 b(on)g(the)h(assumption)f(that)h(all)f(errors)e
-(in)j(input)g(data)f(v)-5 b(alues)34 b(are)f(statistically)427
-1061 y(indep)r(enden)n(t)40 b(and)f(that)g(their)f(v)-5
-b(ariance)38 b(estimates)g(ma)n(y)h(simply)f(b)r(e)i(summed)f(\(with)g
-(appropriate)427 1160 y(w)n(eigh)n(ting)27 b(factors\).)427
-1272 y(If)h(no)g(output)g(v)-5 b(ariance)26 b(estimates)h(are)g
-(required,)g(a)g(NULL)h(p)r(oin)n(ter)f(will)h(b)r(e)g(giv)n(en.)259
-1395 y Fd(n)m(bad)427 1495 y Fj(P)n(oin)n(ter)e(to)h(an)g(in)n(t)g(in)g
-(whic)n(h)g(to)g(return)g(the)g(n)n(um)n(b)r(er)g(of)g(in)n(terp)r
-(olation)g(p)r(oin)n(ts)g(at)g(whic)n(h)g(no)g(v)-5 b(alid)27
-b(in-)427 1595 y(terp)r(olated)22 b(v)-5 b(alue)23 b(could)f(b)r(e)g
-(obtained.)35 b(The)23 b(maxim)n(um)f(v)-5 b(alue)22
-b(that)h(should)f(b)r(e)h(returned)f(is)g Ft(")p Fj(np)r(oin)n(t)p
-Ft(")p Fj(,)427 1694 y(and)28 b(the)g(minim)n(um)g(is)f(zero)g
-(\(indicating)h(that)g(all)f(output)h(v)-5 b(alues)27
-b(w)n(ere)g(successfully)g(obtained\).)0 1847 y Fd(Notes:)340
-2120 y Fi(\017)45 b Fj(The)37 b(data)e(t)n(yp)r(e)i Fl(<)p
-Fj(Xt)n(yp)r(e)p Fl(>)f Fj(indicates)g(the)g(n)n(umerical)g(t)n(yp)r(e)
-g(of)g(the)h(data)f(b)r(eing)g(pro)r(cessed,)i(as)d(for)427
-2220 y(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)340 2343
-y Fi(\017)45 b Fj(This)19 b(function)g(will)f(t)n(ypically)g(b)r(e)h
-(in)n(v)n(ok)n(ed)e(more)g(than)i(once)f(for)f(eac)n(h)h(in)n(v)n(o)r
-(cation)f(of)h(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)340
-2467 y Fi(\017)45 b Fj(If)26 b(an)f(error)e(o)r(ccurs)i(within)h(this)f
-(function,)i(it)e(should)g(use)g(astSetStatus)h(to)f(set)g(the)h(AST)g
-(error)d(status)427 2567 y(to)33 b(an)g(error)e(v)-5
-b(alue.)53 b(This)33 b(will)h(cause)e(an)h(immediate)g(return)g(from)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)51 b(The)34
-b(error)427 2666 y(v)-5 b(alue)29 b(AST)p Ft(__)p Fj(UINER)g(is)g(a)n
-(v)-5 b(ailable)28 b(for)g(this)i(purp)r(ose,)f(but)h(other)e(v)-5
-b(alues)29 b(ma)n(y)f(also)g(b)r(e)i(used)f(\(e.g.)41
-b(if)427 2766 y(y)n(ou)27 b(wish)h(to)f(distinguish)h(di\013eren)n(t)f
-(t)n(yp)r(es)h(of)g(error\).)p 0 2947 3780 12 v 0 3078
-a Fz(astUk)l(ern1)171 b Fe(1-dimensional)36 b(sub-pixel)i(in)m(terp)s
-(olation)d(k)m(ernel)168 b Fz(astUk)l(ern1)0 3249 y Fd(Description:)44
-b Fj(This)31 b(is)f(a)h(\014ctitious)f(function)h(whic)n(h)g(do)r(es)f
-(not)h(actually)f(exist.)45 b(Instead,)31 b(this)g(description)f(con-)
-227 3348 y(stitutes)c(a)f(template)g(so)g(that)g(y)n(ou)f(ma)n(y)h
-(implemen)n(t)h(a)e(function)i(with)g(this)f(in)n(terface)g(for)f(y)n
-(ourself)g(\(and)i(giv)n(e)227 3448 y(it)g(an)n(y)f(name)h(y)n(ou)f
-(wish\).)37 b(A)26 b(p)r(oin)n(ter)f(to)h(suc)n(h)f(a)h(function)g(ma)n
-(y)f(b)r(e)h(passed)f(via)g(the)i Ft(")p Fj(\014n)n(terp)p
-Ft(")d Fj(parameter)h(of)227 3548 y(the)32 b(astResample)p
-Fl(<)p Fj(X)p Fl(>)e Fj(functions)i(\(q.v.\))49 b(in)31
-b(order)g(to)g(supply)g(a)g(1-dimensional)g(in)n(terp)r(olation)f(k)n
-(ernel)h(to)227 3647 y(the)25 b(algorithm)f(whic)n(h)g(p)r(erforms)g
-(sub-pixel)h(in)n(terp)r(olation)f(during)g(resampling)f(of)i(gridded)f
-(data)g(\(y)n(ou)g(m)n(ust)227 3747 y(also)31 b(set)g(the)h
-Ft(")p Fj(in)n(terp)p Ft(")f Fj(parameter)f(of)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)f Fj(to)i(the)f(v)-5 b(alue)32 b(AST)p
-Ft(__)p Fj(UKERN1\).)48 b(This)31 b(allo)n(ws)227 3846
-y(y)n(ou)c(to)h(use)f(y)n(our)f(o)n(wn)h(in)n(terp)r(olation)g(k)n
-(ernel)g(in)h(addition)f(to)h(those)f(whic)n(h)g(are)g(pre-de\014ned.)
-227 3966 y(The)21 b(function)h(calculates)e(the)h(v)-5
-b(alue)21 b(of)g(a)f(1-dimensional)g(sub-pixel)g(in)n(terp)r(olation)g
-(k)n(ernel.)34 b(This)21 b(determines)227 4066 y(ho)n(w)31
-b(the)i(w)n(eigh)n(t)e(giv)n(en)g(to)h(neigh)n(b)r(ouring)e(pixels)i
-(in)g(calculating)f(an)g(in)n(terp)r(olated)h(v)-5 b(alue)31
-b(dep)r(ends)i(on)e(the)227 4166 y(pixel's)f(o\013set)g(from)g(the)h
-(in)n(terp)r(olation)e(p)r(oin)n(t.)45 b(In)30 b(more)f(than)i(one)e
-(dimension,)i(the)g(w)n(eigh)n(t)e(assigned)g(to)h(a)227
-4265 y(pixel)k(is)h(formed)e(b)n(y)h(ev)-5 b(aluating)34
-b(this)g(1-dimensional)f(k)n(ernel)g(using)h(the)h(o\013set)f(along)f
-(eac)n(h)g(dimension)h(in)227 4365 y(turn.)j(The)28 b(pro)r(duct)g(of)f
-(the)h(returned)f(v)-5 b(alues)27 b(is)h(then)g(used)g(as)f(the)g
-(pixel)h(w)n(eigh)n(t.)0 4505 y Fd(Synopsis:)121 b Ft(void)42
-b(astUkern1\()d(double)i(offset,)g(const)h(double)f(params[],)f(int)i
-(flags,)f(double)g Fi(\003)p Ft(value)227 4605 y(\))0
-4745 y Fd(P)m(arameters:)259 4872 y(o\013set)427 4972
-y Fj(This)22 b(will)g(b)r(e)g(the)g(o\013set)g(of)f(the)h(pixel)g(from)
-g(the)g(in)n(terp)r(olation)e(p)r(oin)n(t,)k(measured)c(in)i(pixels.)35
-b(This)22 b(v)-5 b(alue)427 5071 y(ma)n(y)29 b(b)r(e)h(p)r(ositiv)n(e)g
-(or)e(negativ)n(e,)h(but)i(for)e(most)g(practical)g(in)n(terp)r
-(olation)g(sc)n(hemes)g(its)h(sign)f(should)g(b)r(e)427
-5171 y(ignored.)259 5295 y Fd(params)427 5394 y Fj(This)45
-b(will)f(b)r(e)h(a)f(p)r(oin)n(ter)g(to)g(the)h(same)f(arra)n(y)d(as)j
-(w)n(as)g(giv)n(en)f(via)h(the)h Ft(")p Fj(params)p Ft(")d
-Fj(parameter)h(of)427 5494 y(astResample)p Fl(<)p Fj(X)p
-Fl(>)p Fj(.)58 b(Y)-7 b(ou)35 b(ma)n(y)f(use)g(this)i(to)e(pass)h(an)n
-(y)f(additional)g(parameter)f(v)-5 b(alues)35 b(required)f(b)n(y)427
-5593 y(y)n(our)26 b(k)n(ernel,)h(but)h(note)f(that)h
-Ft(")p Fj(params[0])p Ft(")d Fj(will)i(already)f(ha)n(v)n(e)h(b)r(een)g
-(used)h(to)f(sp)r(ecify)h(the)g(n)n(um)n(b)r(er)f(of)427
-5693 y(neigh)n(b)r(ouring)g(pixels)g(whic)n(h)h(con)n(tribute)f(to)g
-(the)h(in)n(terp)r(olated)f(v)-5 b(alue.)p eop end
-%%Page: 377 387
-TeXDict begin 377 386 bop 3643 52 a FF(377)259 351 y
-Fd(\015ags)427 451 y Fj(This)25 b(will)f(b)r(e)h(the)g(same)e(v)-5
-b(alue)25 b(as)e(w)n(as)h(giv)n(en)f(via)h(the)h Ft(")p
-Fj(\015ags)p Ft(")d Fj(parameter)h(of)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(.)35 b(Y)-7 b(ou)427 551 y(ma)n(y)31
-b(test)g(this)h(v)-5 b(alue)31 b(to)g(pro)n(vide)g(additional)f(con)n
-(trol)g(o)n(v)n(er)g(the)h(op)r(eration)g(of)g(y)n(our)f(function.)49
-b(Note)427 650 y(that)27 b(the)g(sp)r(ecial)f(\015ag)g(v)-5
-b(alues)27 b(AST)p Ft(__)p Fj(URESAMP1,)e(2,)i(3)f(&)g(4)h(are)e
-(reserv)n(ed)g(for)h(y)n(ou)g(to)g(use)h(for)f(y)n(our)427
-750 y(o)n(wn)h(purp)r(oses)g(and)g(will)h(not)g(clash)f(with)h(other)f
-(pre-de\014ned)g(\015ag)g(v)-5 b(alues)27 b(\(see)h(astResample)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\).)259 882 y Fd(v)-5 b(alue)427
-981 y Fj(P)n(oin)n(ter)22 b(to)h(a)f(double)h(to)g(receiv)n(e)f(the)i
-(calculated)e(k)n(ernel)g(v)-5 b(alue,)24 b(whic)n(h)f(ma)n(y)g(b)r(e)g
-(p)r(ositiv)n(e)g(or)f(negativ)n(e.)0 1142 y Fd(Notes:)340
-1424 y Fi(\017)45 b Fj(Not)29 b(all)g(functions)g(mak)n(e)f(go)r(o)r(d)
-g(in)n(terp)r(olation)h(k)n(ernels.)39 b(In)29 b(general,)f(acceptable)
-g(k)n(ernels)g(tend)h(to)g(b)r(e)427 1523 y(symmetrical)h(ab)r(out)h
-(zero,)g(to)g(ha)n(v)n(e)f(a)g(p)r(ositiv)n(e)h(p)r(eak)g(\(usually)f
-(unit)n(y\))i(at)f(zero,)g(and)f(to)h(ev)-5 b(aluate)31
-b(to)427 1623 y(zero)24 b(whenev)n(er)g(the)h(pixel)g(o\013set)g(has)g
-(an)n(y)f(other)g(in)n(tegral)g(v)-5 b(alue)25 b(\(this)g(ensures)g
-(that)g(the)g(in)n(terp)r(olated)427 1723 y(v)-5 b(alues)26
-b(pass)g(through)g(the)g(original)f(data\).)37 b(An)26
-b(in)n(terp)r(olation)g(k)n(ernel)g(ma)n(y)f(or)h(ma)n(y)g(not)g(ha)n
-(v)n(e)f(regions)427 1822 y(with)j(negativ)n(e)f(v)-5
-b(alues.)36 b(Y)-7 b(ou)28 b(should)f(consult)h(a)f(go)r(o)r(d)g(b)r(o)
-r(ok)g(on)g(image)g(pro)r(cessing)f(for)i(more)e(details.)340
-1954 y Fi(\017)45 b Fj(If)26 b(an)f(error)e(o)r(ccurs)i(within)h(this)f
-(function,)i(it)e(should)g(use)g(astSetStatus)h(to)f(set)g(the)h(AST)g
-(error)d(status)427 2054 y(to)33 b(an)g(error)e(v)-5
-b(alue.)53 b(This)33 b(will)h(cause)e(an)h(immediate)g(return)g(from)g
-(astResample)p Fl(<)p Fj(X)p Fl(>)p Fj(.)51 b(The)34
-b(error)427 2154 y(v)-5 b(alue)28 b(AST)p Ft(__)p Fj(UK1ER)f(is)i(a)n
-(v)-5 b(ailable)27 b(for)g(this)i(purp)r(ose,)f(but)h(other)f(v)-5
-b(alues)27 b(ma)n(y)h(also)f(b)r(e)i(used)f(\(e.g.)39
-b(if)427 2253 y(y)n(ou)27 b(wish)h(to)f(distinguish)h(di\013eren)n(t)f
-(t)n(yp)r(es)h(of)g(error\).)p 0 2451 3780 12 v 0 2582
-a Fz(astUnformat)170 b Fe(Read)39 b(a)g(formatted)d(co)s(ordinate)g(v)
--7 b(alue)38 b(for)1562 2682 y(a)g(F)-10 b(rame)39 b(axis)3038
-2582 y Fz(astUnformat)0 2850 y Fd(Description:)44 b Fj(This)24
-b(function)g(reads)e(a)h(formatted)h(co)r(ordinate)e(v)-5
-b(alue)23 b(\(giv)n(en)g(as)g(a)g(c)n(haracter)f(string\))h(for)g(a)g
-(F)-7 b(rame)227 2950 y(axis)26 b(and)h(returns)f(the)h(equiv)-5
-b(alen)n(t)26 b(n)n(umerical)g(\(double\))h(v)-5 b(alue.)36
-b(It)27 b(also)f(returns)g(the)h(n)n(um)n(b)r(er)f(of)h(c)n(haracters)
-227 3049 y(read)g(from)g(the)h(string.)227 3174 y(The)39
-b(principle)f(use)g(of)h(this)f(function)h(is)g(in)f(deco)r(ding)g
-(user-supplied)g(input)h(whic)n(h)f(con)n(tains)g(formatted)227
-3273 y(co)r(ordinate)31 b(v)-5 b(alues.)49 b(F)-7 b(ree-format)30
-b(input)j(is)e(supp)r(orted)h(as)f(far)g(as)g(p)r(ossible.)49
-b(If)32 b(input)h(is)e(am)n(biguous,)h(it)g(is)227 3373
-y(in)n(terpreted)h(with)i(reference)d(to)i(the)g(F)-7
-b(rame's)33 b(attributes)h(\(in)g(particular,)g(the)g(F)-7
-b(ormat)33 b(string)g(asso)r(ciated)227 3472 y(with)28
-b(the)g(F)-7 b(rame's)27 b(axis\).)37 b(This)27 b(function)h(is,)g(in)g
-(essence,)f(the)h(in)n(v)n(erse)e(of)h(astF)-7 b(ormat.)0
-3621 y Fd(Synopsis:)121 b Ft(int)42 b(astUnformat\()d(AstFrame)h
-Fi(\003)p Ft(this,)h(int)h(axis,)g(const)g(char)f Fi(\003)p
-Ft(string,)g(double)g Fi(\003)p Ft(value)227 3721 y(\))0
-3869 y Fd(P)m(arameters:)259 4005 y(this)427 4104 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(F)-7 b(rame.)259 4236 y Fd(axis)427 4336
-y Fj(The)34 b(n)n(um)n(b)r(er)f(of)g(the)h(F)-7 b(rame)33
-b(axis)f(for)h(whic)n(h)g(a)g(co)r(ordinate)f(v)-5 b(alue)34
-b(is)f(to)g(b)r(e)h(read)e(\(axis)h(n)n(um)n(b)r(ering)427
-4435 y(starts)27 b(at)h(1)f(for)g(the)h(\014rst)f(axis\).)259
-4567 y Fd(string)427 4667 y Fj(P)n(oin)n(ter)22 b(to)h(a)g(n)n
-(ull-terminated)f(c)n(haracter)f(string)i(con)n(taining)f(the)i
-(formatted)e(co)r(ordinate)g(v)-5 b(alue.)36 b(This)427
-4767 y(string)19 b(ma)n(y)h(con)n(tain)f(additional)g(information)g
-(follo)n(wing)g(the)h(v)-5 b(alue)20 b(to)g(b)r(e)g(read,)h(in)f(whic)n
-(h)g(case)f(reading)427 4866 y(stops)24 b(at)g(the)g(\014rst)g(c)n
-(haracter)e(whic)n(h)i(cannot)g(b)r(e)h(in)n(terpreted)e(as)h(part)f
-(of)i(the)f(v)-5 b(alue.)36 b(An)n(y)24 b(white)g(space)427
-4966 y(b)r(efore)k(or)e(after)i(the)g(v)-5 b(alue)27
-b(is)g(discarded.)259 5098 y Fd(v)-5 b(alue)427 5197
-y Fj(P)n(oin)n(ter)26 b(to)i(a)f(double)g(in)h(whic)n(h)g(the)g(co)r
-(ordinate)e(v)-5 b(alue)28 b(read)e(will)i(b)r(e)g(returned.)0
-5358 y Fd(Class)j(Applicabilit)m(y:)259 5494 y(F)-8 b(rame)427
-5593 y Fj(This)27 b(function)h(applies)f(to)g(all)g(F)-7
-b(rames.)36 b(See)27 b(the)h Ft(")p Fj(F)-7 b(rame)26
-b(Input)i(F)-7 b(ormat)p Ft(")26 b Fj(section)h(b)r(elo)n(w)g(for)g
-(details)427 5693 y(of)h(the)g(input)g(formats)f(accepted)g(b)n(y)h(a)f
-(basic)g(F)-7 b(rame.)p eop end
-%%Page: 378 388
-TeXDict begin 378 387 bop 0 52 a FF(378)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(SkyF)-8
-b(rame)427 451 y Fj(The)35 b(SkyF)-7 b(rame)34 b(class)f(re-de\014nes)h
-(the)h(input)g(format)f(to)h(b)r(e)g(suitable)f(for)g(represen)n(ting)f
-(angles)h(and)427 551 y(times,)40 b(with)d(the)g(resulting)f(co)r
-(ordinate)f(v)-5 b(alue)37 b(returned)f(in)h(radians.)63
-b(See)36 b(the)h Ft(")p Fj(SkyF)-7 b(rame)36 b(Input)427
-650 y(F)-7 b(ormat)p Ft(")27 b Fj(section)g(b)r(elo)n(w)g(for)g
-(details)h(of)f(the)h(formats)f(accepted.)259 785 y Fd(F)-8
-b(rameSet)427 884 y Fj(The)26 b(input)g(formats)f(accepted)h(b)n(y)f(a)
-g(F)-7 b(rameSet)26 b(are)e(determined)i(b)n(y)f(its)h(curren)n(t)f(F)
--7 b(rame)25 b(\(as)g(sp)r(eci\014ed)427 984 y(b)n(y)j(the)g(Curren)n
-(t)e(attribute\).)0 1149 y Fd(Returned)32 b(V)-8 b(alue:)259
-1289 y(astUnformat\(\))427 1389 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)g(c)
-n(haracters)e(read)h(from)h(the)h(string)f(in)g(order)f(to)h(obtain)g
-(the)h(co)r(ordinate)e(v)-5 b(alue.)37 b(This)427 1488
-y(will)28 b(include)g(an)n(y)f(white)h(space)f(whic)n(h)g(o)r(ccurs)g
-(b)r(efore)g(or)g(after)g(the)h(v)-5 b(alue.)0 1654 y
-Fd(Notes:)340 1940 y Fi(\017)45 b Fj(A)37 b(function)f(v)-5
-b(alue)36 b(of)g(zero)f(\(and)h(no)g(co)r(ordinate)f(v)-5
-b(alue\))36 b(will)h(b)r(e)f(returned,)i(without)e(error,)h(if)f(the)
-427 2039 y(string)27 b(supplied)h(do)r(es)f(not)h(con)n(tain)f(a)g
-(suitably)g(formatted)h(v)-5 b(alue.)340 2174 y Fi(\017)45
-b Fj(Bew)n(are)20 b(that)h(it)g(is)g(p)r(ossible)g(for)g(a)f
-(formatting)h(error)e(part-w)n(a)n(y)g(through)h(an)h(input)g(string)g
-(to)g(terminate)427 2274 y(input)29 b(b)r(efore)e(it)h(has)f(b)r(een)h
-(completely)f(read,)g(but)h(to)g(yield)f(a)g(co)r(ordinate)g(v)-5
-b(alue)27 b(that)h(app)r(ears)f(v)-5 b(alid.)427 2373
-y(F)e(or)29 b(example,)g(if)h(a)f(user)g(t)n(yp)r(es)g
-Ft(")p Fj(1.5r6)p Ft(")e Fj(instead)i(of)g Ft(")p Fj(1.5e6)p
-Ft(")p Fj(,)e(the)j Ft(")p Fj(r)p Ft(")e Fj(will)i(terminate)f(input,)h
-(giving)427 2473 y(an)c(incorrect)f(co)r(ordinate)g(v)-5
-b(alue)26 b(of)h(1.5.)35 b(It)27 b(is)f(therefore)f(most)h(imp)r(ortan)
-n(t)g(to)g(c)n(hec)n(k)f(the)i(return)f(v)-5 b(alue)427
-2572 y(of)28 b(this)g(function)g(to)f(ensure)g(that)h(the)g(correct)e
-(n)n(um)n(b)r(er)i(of)f(c)n(haracters)f(ha)n(v)n(e)g(b)r(een)i(read.)
-340 2707 y Fi(\017)45 b Fj(An)33 b(error)e(will)h(result)g(if)h(a)f(v)
--5 b(alue)33 b(is)f(read)g(whic)n(h)g(app)r(ears)f(to)h(ha)n(v)n(e)g
-(the)g(correct)f(format,)j(but)f(whic)n(h)427 2807 y(cannot)d(b)r(e)g
-(con)n(v)n(erted)f(in)n(to)h(a)g(v)-5 b(alid)30 b(co)r(ordinate)f(v)-5
-b(alue)30 b(\(for)g(instance,)g(b)r(ecause)g(the)h(v)-5
-b(alue)30 b(of)g(one)f(or)427 2906 y(more)e(of)h(its)f(\014elds)h(is)f
-(in)n(v)-5 b(alid\).)340 3041 y Fi(\017)45 b Fj(The)e(string)f
-Ft(")p Fl(<)p Fj(bad)p Fl(>)p Ft(")e Fj(is)j(recognised)d(as)i(a)g(sp)r
-(ecial)g(case)g(and)g(will)h(yield)g(the)f(co)r(ordinate)g(v)-5
-b(alue)427 3140 y(AST)p Ft(__)p Fj(BAD)32 b(without)f(error.)47
-b(The)31 b(test)h(for)f(this)g(string)g(is)g(case-insensitiv)n(e)f(and)
-h(also)f(p)r(ermits)i(em-)427 3240 y(b)r(edded)d(white)f(space.)340
-3375 y Fi(\017)45 b Fj(A)33 b(function)f(result)g(of)g(zero)f(will)h(b)
-r(e)h(returned)e(and)h(no)g(co)r(ordinate)f(v)-5 b(alue)31
-b(will)i(b)r(e)f(returned)g(via)f(the)427 3474 y Ft(")p
-Fj(v)-5 b(alue)p Ft(")30 b Fj(p)r(oin)n(ter)g(if)h(this)f(function)h
-(is)g(in)n(v)n(ok)n(ed)e(with)i(the)f(AST)h(error)e(status)h(set,)h(or)
-f(if)g(it)h(should)g(fail)427 3574 y(for)c(an)n(y)g(reason.)-2
-3739 y Fd(F)-8 b(rame)32 b(Input)h(F)-8 b(ormat)n(:)227
-3885 y Fj(The)28 b(input)g(format)f(accepted)h(for)f(a)g(basic)g(F)-7
-b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)340 4025 y Fi(\017)45
-b Fj(An)28 b(optional)f(sign,)g(follo)n(w)n(ed)g(b)n(y:)340
-4160 y Fi(\017)45 b Fj(A)28 b(sequence)f(of)h(one)f(or)g(more)g(digits)
-g(p)r(ossibly)g(con)n(taining)g(a)g(decimal)g(p)r(oin)n(t,)h(follo)n(w)
-n(ed)f(b)n(y:)340 4294 y Fi(\017)45 b Fj(An)28 b(optional)f(exp)r(onen)
-n(t)h(\014eld.)340 4429 y Fi(\017)45 b Fj(The)28 b(exp)r(onen)n(t)f
-(\014eld,)h(if)g(presen)n(t,)f(consists)g(of)h Ft(")p
-Fj(E)p Ft(")e Fj(or)h Ft(")p Fj(e)p Ft(")g Fj(follo)n(w)n(ed)f(b)n(y)h
-(a)h(p)r(ossibly)f(signed)g(in)n(teger.)227 4594 y(Examples)g(of)g
-(acceptable)g(F)-7 b(rame)27 b(input)i(formats)d(include:)340
-4734 y Fi(\017)45 b Fj(99)340 4869 y Fi(\017)g Fj(1.25)340
-5003 y Fi(\017)g Fj(-1.6)340 5138 y Fi(\017)g Fj(1E8)340
-5272 y Fi(\017)g Fj(-.99e-17)340 5407 y Fi(\017)g Fl(<)p
-Fj(bad)p Fl(>)-2 5572 y Fd(SkyF)-8 b(rame)33 b(Input)g(F)-8
-b(ormat)n(:)227 5718 y Fj(The)28 b(input)g(format)f(accepted)h(for)f(a)
-g(SkyF)-7 b(rame)27 b(axis)g(is)g(as)g(follo)n(ws:)p
-eop end
-%%Page: 379 389
-TeXDict begin 379 388 bop 3643 52 a FF(379)340 351 y
-Fi(\017)45 b Fj(An)32 b(optional)e(sign,)i(follo)n(w)n(ed)e(b)n(y)g(b)r
-(et)n(w)n(een)h(one)g(and)g(three)g(\014elds)g(represen)n(ting)e
-(either)i(degrees,)g(arc-)427 451 y(min)n(utes,)d(arc-seconds)d(or)i
-(hours,)g(min)n(utes,)h(seconds)e(\(e.g.)37 b Ft(")p
-Fj(-12)26 b(42)h(03)p Ft(")p Fj(\).)340 582 y Fi(\017)45
-b Fj(Eac)n(h)22 b(\014eld)h(should)f(consist)g(of)h(a)f(sequence)h(of)f
-(one)h(or)f(more)f(digits,)j(whic)n(h)f(ma)n(y)f(include)h(leading)f
-(zeros.)427 681 y(A)n(t)29 b(most)f(one)g(\014eld)h(ma)n(y)e(con)n
-(tain)h(a)g(decimal)g(p)r(oin)n(t,)h(in)f(whic)n(h)g(case)g(it)h(is)f
-(tak)n(en)f(to)i(b)r(e)f(the)h(\014nal)f(\014eld)427
-781 y(\(e.g.)55 b(decimal)34 b(degrees)e(migh)n(t)i(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fj(124.707)p Ft(")p Fj(,)f(while)h(degrees)g(and)g
-(decimal)h(arc-min)n(utes)427 880 y(migh)n(t)28 b(b)r(e)g(giv)n(en)f
-(as)g Ft(")p Fj(-13)e(33.8)p Ft(")p Fj(\).)340 1011 y
-Fi(\017)45 b Fj(The)29 b(\014rst)g(\014eld)g(giv)n(en)g(ma)n(y)f(tak)n
-(e)g(an)n(y)g(v)-5 b(alue,)30 b(allo)n(wing)d(angles)h(and)h(times)g
-(outside)g(the)h(con)n(v)n(en)n(tional)427 1111 y(ranges)g(to)h(b)r(e)g
-(represen)n(ted.)46 b(Ho)n(w)n(ev)n(er,)30 b(subsequen)n(t)h(\014elds)g
-(m)n(ust)g(ha)n(v)n(e)f(v)-5 b(alues)31 b(of)g(less)f(than)i(60)e
-(\(e.g.)427 1210 y Ft(")p Fj(720)c(45)h(31)p Ft(")f Fj(is)i(v)-5
-b(alid,)27 b(whereas)g Ft(")p Fj(11)f(45)h(61)p Ft(")f
-Fj(is)h(not\).)340 1341 y Fi(\017)45 b Fj(Fields)30 b(ma)n(y)g(b)r(e)g
-(separated)f(b)n(y)h(white)g(space)f(or)g(b)n(y)h Ft(")p
-Fj(:)p Ft(")f Fj(\(colon\),)i(but)f(the)h(c)n(hoice)e(of)h(separator)d
-(m)n(ust)427 1441 y(b)r(e)34 b(used)f(consisten)n(tly)f(throughout)h
-(the)g(v)-5 b(alue.)53 b(Additional)33 b(white)h(space)e(ma)n(y)h(b)r
-(e)g(presen)n(t)g(around)427 1540 y(\014elds)28 b(and)f(separators)e
-(\(e.g.)37 b Ft(")p Fj(-)27 b(2:)37 b(04)26 b(:)37 b(7.1)p
-Ft(")p Fj(\).)340 1671 y Fi(\017)45 b Fj(The)35 b(follo)n(wing)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)e(ma)n(y)h(b)r(e)i(used)
-f(as)g(separators)e(to)i(replace)f(either)i(of)427 1771
-y(those)d(ab)r(o)n(v)n(e)f(\(or)h(ma)n(y)f(b)r(e)i(app)r(ended)g(to)f
-(the)h(\014nal)f(\014eld\),)i(in)e(order)f(to)h(iden)n(tify)h(the)g
-(\014eld)g(to)f(whic)n(h)427 1870 y(they)g(are)e(app)r(ended:)45
-b Ft(")p Fj(d)p Ft(")p Fj(|degrees;)32 b Ft(")p Fj(h)p
-Ft(")p Fj(|hours;)f Ft(")p Fj(m)p Ft(")p Fj(|min)n(utes)g(of)h(arc)e
-(or)h(time;)j Ft(")p Fj(s)p Ft(")p Fj(|seconds)427 1970
-y(of)24 b(arc)f(or)g(time;)i Ft(")p Fj(')p Ft(")f Fj(\(single)f
-(quote\)|min)n(utes)h(of)g(arc;)g Ft(""")f Fj(\(double)h
-(quote\)|seconds)f(of)h(arc.)34 b(Either)427 2069 y(lo)n(w)n(er)e(or)h
-(upp)r(er)h(case)f(ma)n(y)g(b)r(e)h(used.)56 b(Fields)33
-b(m)n(ust)h(b)r(e)g(giv)n(en)f(in)h(order)f(of)g(decreasing)g
-(signi\014cance)427 2169 y(\(e.g.)k Ft(")p Fj(-11D)26
-b(3')i(14.4)p Ft("")d Fj(or)i Ft(")p Fj(22h14m11.2s)p
-Ft(")p Fj(\).)340 2300 y Fi(\017)45 b Fj(The)22 b(presence)e(of)h(an)n
-(y)g(of)g(the)h(\014eld)f(iden)n(ti\014cation)g(c)n(haracters)e
-Ft(")p Fj(d)p Ft(")p Fj(,)j Ft(")p Fj(')p Ft(")f Fj(\(single)g(quote\))
-g(or)f Ft(""")g Fj(\(double)427 2399 y(quote\))g(indicates)f(that)h
-(the)f(v)-5 b(alue)20 b(is)f(to)g(b)r(e)h(in)n(terpreted)f(as)g(an)g
-(angle.)33 b(Con)n(v)n(ersely)-7 b(,)19 b(the)h(presence)f(of)g
-Ft(")p Fj(h)p Ft(")427 2499 y Fj(indicates)27 b(that)h(it)f(is)g(to)g
-(b)r(e)h(in)n(terpreted)e(as)h(a)g(time)g(\(with)h(24)e(hours)h
-(corresp)r(onding)e(to)i(360)f(degrees\).)427 2599 y(Incompatible)j
-(angle/time)f(iden)n(ti\014cation)h(c)n(haracters)d(ma)n(y)j(not)f(b)r
-(e)i(mixed)f(\(e.g.)40 b Ft(")p Fj(10h14'3)p Ft("")26
-b Fj(is)j(not)427 2698 y(v)-5 b(alid\).)35 b(The)21 b(remaining)e
-(\014eld)i(iden)n(ti\014cation)f(c)n(haracters)f(and)h(separators)e(do)
-i(not)h(sp)r(ecify)f(a)g(preference)427 2798 y(for)27
-b(an)h(angle)e(or)h(a)g(time)h(and)g(ma)n(y)f(b)r(e)h(used)f(with)h
-(either.)340 2929 y Fi(\017)45 b Fj(If)23 b(no)f(preference)f(for)h(an)
-g(angle)f(or)h(a)g(time)g(is)h(expressed)e(an)n(ywhere)f(within)j(the)g
-(v)-5 b(alue,)23 b(it)g(is)f(in)n(terpreted)427 3028
-y(as)33 b(an)g(angle)g(if)h(the)g(F)-7 b(ormat)33 b(attribute)h(string)
-e(asso)r(ciated)h(with)h(the)f(SkyF)-7 b(rame)33 b(axis)g(generates)f
-(an)427 3128 y(angle)25 b(and)g(as)g(a)g(time)h(otherwise.)36
-b(This)25 b(ensures)g(that)h(v)-5 b(alues)25 b(pro)r(duced)g(b)n(y)g
-(astF)-7 b(ormat)25 b(are)f(correctly)427 3227 y(in)n(terpreted)j(b)n
-(y)h(astUnformat.)340 3358 y Fi(\017)45 b Fj(Fields)37
-b(ma)n(y)g(b)r(e)g(omitted,)j(in)d(whic)n(h)g(case)f(they)h(default)h
-(to)f(zero.)64 b(The)37 b(remaining)f(\014elds)h(ma)n(y)f(b)r(e)427
-3458 y(iden)n(ti\014ed)e(b)n(y)f(using)g(appropriate)f(\014eld)h(iden)n
-(ti\014cation)h(c)n(haracters)d(\(see)i(ab)r(o)n(v)n(e\))f(and/or)g(b)n
-(y)h(adding)427 3557 y(extra)28 b(colon)g(separators)f(\(e.g.)40
-b Ft(")p Fj(-05m13s)p Ft(")26 b Fj(is)i(equiv)-5 b(alen)n(t)29
-b(to)g Ft(")p Fj(-:05:13)p Ft(")p Fj(\).)38 b(If)29 b(a)f(\014eld)i(is)
-e(not)h(iden)n(ti\014ed)427 3657 y(explicitly)-7 b(,)40
-b(it)e(is)g(assumed)e(that)i(adjacen)n(t)f(\014elds)g(ha)n(v)n(e)g(b)r
-(een)h(giv)n(en,)h(after)e(taking)f(accoun)n(t)h(of)g(an)n(y)427
-3757 y(extra)31 b(separator)e(c)n(haracters)h(\(e.g.)49
-b Ft(")p Fj(14:25.4s)p Ft(")28 b Fj(sp)r(eci\014es)k(min)n(utes)g(and)f
-(seconds,)h(while)g Ft(")p Fj(14::25.4s)p Ft(")427 3856
-y Fj(sp)r(eci\014es)c(degrees)e(and)h(seconds\).)340
-3987 y Fi(\017)45 b Fj(If)37 b(\014elds)g(are)f(omitted)h(in)g(suc)n(h)
-f(a)g(w)n(a)n(y)g(that)g(the)h(remaining)f(ones)g(cannot)g(b)r(e)h
-(iden)n(ti\014ed)h(uniquely)427 4087 y(\(e.g.)69 b Ft(")p
-Fj(01:02)p Ft(")p Fj(\),)38 b(then)h(the)f(\014rst)g(\014eld)g
-(\(either)h(giv)n(en)e(explicitly)h(or)g(implied)g(b)n(y)g(an)g(extra)f
-(leading)427 4186 y(colon)25 b(separator\))e(is)i(tak)n(en)g(to)g(b)r
-(e)g(the)h(most)f(signi\014can)n(t)g(\014eld)g(that)h(astF)-7
-b(ormat)24 b(w)n(ould)h(pro)r(duce)f(when)427 4286 y(formatting)39
-b(a)h(v)-5 b(alue)39 b(\(using)h(the)g(F)-7 b(ormat)38
-b(attribute)i(asso)r(ciated)f(with)h(the)g(SkyF)-7 b(rame)38
-b(axis\).)73 b(By)427 4385 y(default,)46 b(this)41 b(means)g(that)h
-(the)g(\014rst)f(\014eld)h(will)g(normally)e(b)r(e)i(in)n(terpreted)f
-(as)g(degrees)f(or)g(hours.)427 4485 y(Ho)n(w)n(ev)n(er,)34
-b(if)h(this)f(do)r(es)g(not)g(result)g(in)g(consisten)n(t)g(\014eld)g
-(iden)n(ti\014cation,)i(then)f(the)f(last)g(\014eld)g(\(either)427
-4585 y(giv)n(en)f(explicitly)g(or)g(implied)h(b)n(y)f(an)g(extra)g
-(trailing)g(colon)f(separator\))g(is)h(tak)n(en)g(to)g(to)g(b)r(e)h
-(the)g(least)427 4684 y(signi\014can)n(t)27 b(\014eld)h(that)g(astF)-7
-b(ormat)26 b(w)n(ould)i(pro)r(duce.)227 4844 y(This)g(\014nal)f(con)n
-(v)n(en)n(tion)f(is)h(in)n(tended)h(to)g(ensure)e(that)i(v)-5
-b(alues)27 b(formatted)g(b)n(y)h(astF)-7 b(ormat)26 b(whic)n(h)h(con)n
-(tain)g(less)227 4944 y(than)j(three)f(\014elds)g(will)g(b)r(e)h
-(correctly)d(in)n(terpreted)i(if)h(read)e(bac)n(k)g(using)h
-(astUnformat,)g(ev)n(en)g(if)g(they)h(do)f(not)227 5043
-y(con)n(tain)e(\014eld)h(iden)n(ti\014cation)f(c)n(haracters.)227
-5167 y(Examples)g(of)g(acceptable)g(SkyF)-7 b(rame)27
-b(input)h(formats)f(\(with)i(in)n(terpretation)d(in)i(paren)n(theses\))
-f(include:)340 5301 y Fi(\017)45 b Fj(-14d)27 b(13m)g(22.2s)f(\(-14d)g
-(13')h(22.2)p Ft(")p Fj(\))340 5432 y Fi(\017)45 b Fj(+)28
-b(12:34:56.7)c(\(12d)j(34')g(56.7)p Ft(")f Fj(or)g(12h)h(34m)g(56.7s\))
-340 5562 y Fi(\017)45 b Fj(001)26 b(:)37 b(02)27 b(:)37
-b(03.4)26 b(\(1d)i(02')f(03.4)p Ft(")f Fj(or)g(1h)i(02m)e(03.4s\))340
-5693 y Fi(\017)45 b Fj(22h)27 b(30)g(\(22h)g(30m)g(00s\))p
-eop end
-%%Page: 380 390
-TeXDict begin 380 389 bop 0 52 a FF(380)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(136::10)p Ft(")25 b Fj(\(136d)i(00')g(10)p Ft(")f
-Fj(or)h(136h)f(00m)h(10s\))340 507 y Fi(\017)45 b Fj(-14M)27
-b(27S)g(\(-0d)g(14')g(27)p Ft(")f Fj(or)h(-0h)g(14m)f(27s\))340
-662 y Fi(\017)45 b Fj(-:14:)36 b(\(-0d)27 b(14')g(00)p
-Ft(")f Fj(or)h(-0h)g(14m)g(00s\))340 818 y Fi(\017)45
-b Fj(-::4.1)27 b(\(-0d)g(00')g(04.1)p Ft(")f Fj(or)g(-0h)h(00m)g
-(04.1s\))340 973 y Fi(\017)45 b Fj(.9)p Ft(")27 b Fj(\(0d)h(00')e(00.9)
-p Ft(")p Fj(\))340 1129 y Fi(\017)45 b Fj(d12m)27 b(\(0d)h(12')f(00)p
-Ft(")p Fj(\))340 1284 y Fi(\017)45 b Fj(H)28 b(12:22.3s)d(\(0h)j(12m)f
-(22.3s\))340 1439 y Fi(\017)45 b Fl(<)p Fj(bad)p Fl(>)27
-b Fj(\(AST)p Ft(__)p Fj(BAD\))227 1647 y(Where)e(alternativ)n(e)e(in)n
-(terpretations)g(are)h(sho)n(wn,)g(the)h(c)n(hoice)f(of)g(angle)g(or)g
-(time)h(dep)r(ends)g(on)f(the)h(asso)r(ciated)227 1746
-y(F)-7 b(ormat\(axis\))27 b(attribute.)p 0 1991 3780
-12 v 0 2122 a Fz(astUnitMap)1422 2121 y Fe(Create)37
-b(a)h(UnitMap)3073 2122 y Fz(astUnitMap)0 2356 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(UnitMap)i(and)e
-(optionally)g(initialises)g(its)h(attributes.)227 2504
-y(A)f(UnitMap)f(is)g(a)f(unit)i(\(n)n(ull\))f(Mapping)g(that)g(has)g
-(no)f(e\013ect)i(on)e(the)i(co)r(ordinates)d(supplied)i(to)g(it.)37
-b(They)26 b(are)227 2603 y(simply)k(copied.)41 b(This)30
-b(can)f(b)r(e)g(useful)h(if)g(a)f(Mapping)g(is)g(required)g(\(e.g.)41
-b(to)30 b(pass)e(to)h(another)g(function\))h(but)227
-2703 y(y)n(ou)d(do)g(not)h(w)n(an)n(t)f(it)h(to)f(ha)n(v)n(e)g(an)n(y)g
-(e\013ect.)0 2898 y Fd(Synopsis:)121 b Ft(AstUnitMap)39
-b Fi(\003)p Ft(astUnitMap\()g(int)j(ncoord,)f(const)g(char)h
-Fi(\003)p Ft(options,)e(...)86 b(\))0 3092 y Fd(P)m(arameters:)259
-3274 y(nco)s(ord)427 3374 y Fj(The)28 b(n)n(um)n(b)r(er)f(of)h(input)g
-(and)g(output)g(co)r(ordinates)e(\(these)i(n)n(um)n(b)r(ers)f(are)g
-(necessarily)f(the)h(same\).)259 3529 y Fd(options)427
-3629 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-3728 y(assignmen)n(ts)c(to)g(b)r(e)h(used)f(for)g(initialising)h(the)g
-(new)f(UnitMap.)37 b(The)24 b(syn)n(tax)g(used)g(is)h(iden)n(tical)f
-(to)g(that)427 3828 y(for)i(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3928 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 4083
-y Fd(...)427 4183 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 4282 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 4382 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 4481 y Fj(function\).)0 4689
-y Fd(Returned)32 b(V)-8 b(alue:)259 4870 y(astUnitMap\(\))427
-4970 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(UnitMap.)0
-5177 y Fd(Notes:)340 5505 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 5604 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p eop end
-%%Page: 381 391
-TeXDict begin 381 390 bop 3643 52 a FF(381)p 0 351 3780
-12 v 0 483 a Fz(astUnlo)t(c)l(k)220 b Fe(Unlo)s(c)m(k)38
-b(an)g(Ob)7 b(ject)38 b(for)g(use)h(b)m(y)g(other)f(threads)217
-b Fz(astUnlo)t(c)l(k)0 651 y Fd(Description:)44 b Fj(Unlo)r(c)n(ks)36
-b(an)h(Ob)5 b(ject)36 b(previously)f(lo)r(c)n(k)n(ed)h(using)g(astLo)r
-(c)n(k,)h(so)f(that)h(other)f(threads)g(can)g(use)g(the)227
-751 y(Ob)5 b(ject.)37 b(See)28 b(astLo)r(c)n(k)e(for)h(further)h
-(details.)0 890 y Fd(Synopsis:)121 b Ft(void)42 b(astUnlock\()d
-(AstObject)h Fi(\003)p Ft(this,)h(int)h(report)g(\))0
-1030 y Fd(P)m(arameters:)259 1156 y(this)427 1255 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Ob)5 b(ject)27 b(to)h(b)r(e)g(unlo)r(c)n(k)n(ed.)259
-1378 y Fd(rep)s(ort)427 1478 y Fj(If)g(non-zero,)f(an)g(error)f(will)i
-(b)r(e)g(rep)r(orted)f(if)h(the)g(supplied)g(Ob)5 b(ject,)28
-b(or)e(an)n(y)h(Ob)5 b(ject)28 b(con)n(tained)f(within)427
-1577 y(the)f(supplied)h(Ob)5 b(ject,)26 b(is)f(not)h(curren)n(tly)f(lo)
-r(c)n(k)n(ed)g(b)n(y)h(the)g(running)f(thread.)36 b(If)26
-b(zero,)f(suc)n(h)h(Ob)5 b(jects)25 b(will)427 1677 y(b)r(e)j(left)h
-(unc)n(hanged,)d(and)i(no)f(error)f(will)i(b)r(e)g(rep)r(orted.)0
-1829 y Fd(Class)j(Applicabilit)m(y:)259 1955 y(Ob)5 b(ject)427
-2055 y Fj(This)28 b(function)g(applies)f(to)h(all)f(Ob)5
-b(jects.)0 2206 y Fd(Notes:)340 2479 y Fi(\017)45 b Fj(This)29
-b(function)h(attempts)g(to)f(execute)g(ev)n(en)g(if)h(the)f(global)f
-(error)g(status)h(is)g(set,)h(but)f(no)g(further)h(error)427
-2578 y(rep)r(ort)d(will)h(b)r(e)g(made)f(if)h(it)g(subsequen)n(tly)g
-(fails)f(under)g(these)h(circumstances.)340 2701 y Fi(\017)45
-b Fj(All)28 b(unlo)r(c)n(k)n(ed)e(Ob)5 b(jects)26 b(are)g(excluded)h
-(from)f(AST)i(con)n(text)e(handling)h(un)n(til)g(they)g(are)f(re-lo)r
-(c)n(k)n(ed)f(using)427 2801 y(astLo)r(c)n(k.)340 2923
-y Fi(\017)45 b Fj(This)28 b(function)g(is)f(only)h(a)n(v)-5
-b(ailable)26 b(in)i(the)g(C)f(in)n(terface.)340 3046
-y Fi(\017)45 b Fj(This)30 b(function)g(returns)f(without)h(action)g(if)
-g(the)g(Ob)5 b(ject)29 b(is)h(not)g(curren)n(tly)e(lo)r(c)n(k)n(ed)h(b)
-n(y)h(an)n(y)e(thread.)43 b(If)427 3146 y(it)30 b(is)f(lo)r(c)n(k)n(ed)
-f(b)n(y)h(the)h(running)f(thread,)g(it)g(is)h(unlo)r(c)n(k)n(ed.)41
-b(If)29 b(it)h(is)f(lo)r(c)n(k)n(ed)f(b)n(y)h(another)f(thread,)i(an)f
-(error)427 3245 y(will)f(b)r(e)g(rep)r(orted)f(if)h Ft(")p
-Fj(error)p Ft(")d Fj(is)i(non-zero.)340 3368 y Fi(\017)45
-b Fj(This)23 b(function)g(returns)g(without)g(action)f(if)h(the)h(AST)f
-(library)e(has)i(b)r(een)g(built)g(without)h(POSIX)e(thread)427
-3468 y(supp)r(ort)35 b(\(i.e.)60 b(the)35 b Ft(")p Fj(-with-pthreads)p
-Ft(")e Fj(option)i(w)n(as)f(not)h(sp)r(eci\014ed)g(when)h(running)e
-(the)i Ft(")p Fj(con\014gure)p Ft(")427 3567 y Fj(script\).)p
-0 3746 V 0 3878 a Fz(astV)-11 b(ersion)153 b Fe(Return)37
-b(the)g(v)m(ersion)f(of)h(the)g(AST)g(library)e(b)s(eing)1776
-3992 y(used)3170 3878 y Fz(astV)-11 b(ersion)0 4138 y
-Fd(Description:)44 b Fj(This)35 b(macro)e(in)n(v)n(ok)n(es)f(a)i
-(function)h(whic)n(h)f(returns)g(an)f(in)n(teger)h(represen)n(ting)f
-(the)h(v)n(ersion)f(of)h(the)227 4237 y(AST)24 b(library)d(b)r(eing)i
-(used.)35 b(The)23 b(library)f(v)n(ersion)f(is)i(formatted)f(as)g(a)h
-(string)f(suc)n(h)g(as)g Ft(")p Fj(2.0-7)p Ft(")f Fj(whic)n(h)i(con)n
-(tains)227 4337 y(in)n(tegers)k(represen)n(ting)g(the)i
-Ft(")p Fj(ma)5 b(jor)26 b(v)n(ersion)p Ft(")g Fj(\(2\),)j(the)f
-Ft(")p Fj(minor)g(v)n(ersion)p Ft(")e Fj(\(0\))i(and)g(the)h
-Ft(")p Fj(release)p Ft(")d Fj(\(7\).)39 b(The)227 4436
-y(in)n(teger)23 b(returned)g(b)n(y)h(this)g(function)g(com)n(bines)f
-(all)g(three)h(in)n(tegers)e(together)h(in)n(to)h(a)f(single)g(in)n
-(teger)g(using)g(the)227 4536 y(expresion:)227 4656 y(\(ma)5
-b(jor)27 b(v)n(ersion\))p Fi(\003)p Fj(1E6)d(+)k(\(minor)f(v)n
-(ersion\))p Fi(\003)p Fj(1E3)d(+)k(\(release\))0 4795
-y Fd(Synopsis:)121 b Ft(int)42 b(astVersion)0 4934 y
-Fd(Class)31 b(Applicabilit)m(y:)259 5060 y(Ob)5 b(ject)427
-5160 y Fj(This)28 b(macro)e(applies)h(to)h(all)f(Ob)5
-b(jects.)0 5312 y Fd(Returned)32 b(V)-8 b(alue:)259 5438
-y(astV)g(ersion)427 5538 y Fj(The)37 b(ma)5 b(jor)35
-b(v)n(ersion,)j(minor)e(v)n(ersion)f(and)h(release)g(n)n(um)n(b)r(ers)g
-(for)g(the)h(AST)g(library)-7 b(,)37 b(enco)r(ded)g(as)f(a)427
-5637 y(single)27 b(in)n(teger.)p eop end
-%%Page: 382 392
-TeXDict begin 382 391 bop 0 52 a FF(382)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)p 0 351 3780 12 v
-0 483 a Fz(astW)-11 b(arnings)251 b Fe(Returns)38 b(an)m(y)g(w)m
-(arnings)f(issued)i(b)m(y)f(the)1064 598 y(previous)f(read)h(or)g
-(write)g(op)s(eration)3054 483 y Fz(astW)-11 b(arnings)0
-776 y Fd(Description:)44 b Fj(This)35 b(function)h(returns)e(an)h(AST)h
-(KeyMap)e(ob)5 b(ject)35 b(holding)f(the)i(text)f(of)g(an)n(y)f(w)n
-(arnings)g(issued)227 875 y(as)d(a)g(result)g(of)g(the)h(previous)e(in)
-n(v)n(o)r(cation)g(of)h(the)h(astRead)e(or)h(astW)-7
-b(rite)31 b(function)h(on)f(the)g(Channel.)48 b(If)32
-b(no)227 975 y(w)n(arnings)26 b(w)n(ere)h(issued,)g(a)g(a)h(NULL)g(v)-5
-b(alue)27 b(will)h(b)r(e)g(returned.)227 1097 y(Suc)n(h)d(w)n(arnings)e
-(are)h(non-fatal)g(and)g(will)h(not)g(prev)n(en)n(t)f(the)h(read)e(or)h
-(write)h(op)r(eration)e(succeeding.)36 b(Ho)n(w)n(ev)n(er,)227
-1196 y(the)29 b(con)n(v)n(erted)f(ob)5 b(ject)28 b(ma)n(y)g(not)h(b)r
-(e)g(iden)n(tical)f(to)h(the)g(original)e(ob)5 b(ject)28
-b(in)h(all)f(resp)r(ects.)40 b(Di\013erences)29 b(whic)n(h)227
-1296 y(w)n(ould)23 b(usually)f(b)r(e)h(deemed)g(as)f(insigni\014can)n
-(t)h(in)g(most)f(usual)h(cases)e(will)j(generate)d(a)h(w)n(arning,)h
-(whereas)e(more)227 1395 y(signi\014can)n(t)27 b(di\013erences)g(will)h
-(generate)e(an)i(error.)227 1517 y(The)d Ft(")p Fj(Strict)p
-Ft(")f Fj(attribute)h(allo)n(ws)e(this)i(w)n(arning)e(facilit)n(y)i(to)
-g(b)r(e)g(switc)n(hed)f(o\013,)i(so)e(that)g(a)h(fatal)f(error)f(is)i
-(alw)n(a)n(ys)227 1617 y(rep)r(orted)i(for)g(an)n(y)g(con)n(v)n(ersion)
-e(error.)0 1761 y Fd(Synopsis:)121 b Ft(AstKeyMap)40
-b Fi(\003)p Ft(astWarnings\()e(AstChannel)h Fi(\003)p
-Ft(this)j(\))0 1905 y Fd(P)m(arameters:)259 2036 y(this)427
-2136 y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Channel.)0 2292
-y Fd(Class)j(Applicabilit)m(y:)259 2423 y(Channel)427
-2523 y Fj(The)25 b(basic)f(Channel)h(class)f(generates)f(a)h(w)n
-(arning)g(when)g(ev)n(er)g(an)h(un-recognised)e(item)i(is)f(encoun)n
-(tered)427 2622 y(whilst)32 b(reading)f(an)g(Ob)5 b(ject)32
-b(from)f(an)g(external)g(data)g(source.)48 b(If)32 b(Strict)g(is)g
-(zero)e(\(the)j(default\),)g(then)427 2722 y(unexp)r(ected)28
-b(items)f(in)g(the)g(Ob)5 b(ject)27 b(description)g(are)f(simply)h
-(ignored,)e(and)i(an)n(y)f(remaining)g(items)i(are)427
-2822 y(used)h(to)g(construct)g(the)g(returned)f(Ob)5
-b(ject.)41 b(If)30 b(Strict)f(is)g(non-zero,)f(an)g(error)f(will)j(b)r
-(e)f(rep)r(orted)f(and)h(a)427 2921 y(NULL)f(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(returned)g(if)h(an)n(y)f(unexp)r(ected)h(items)g(are)
-f(encoun)n(tered.)427 3035 y(As)f(AST)g(con)n(tin)n(ues)f(to)h(b)r(e)g
-(dev)n(elop)r(ed,)g(new)g(attributes)f(are)g(added)h(o)r(ccasionally)e
-(to)h(selected)h(classes.)427 3134 y(If)35 b(an)f(older)f(v)n(ersion)g
-(of)h(AST)h(is)f(used)g(to)g(read)f(external)h(Ob)5 b(ject)34
-b(descriptions)f(created)h(b)n(y)g(a)f(more)427 3234
-y(recen)n(t)20 b(v)n(ersion)f(of)i(AST,)g(then)g(the)g(Channel)f(class)
-g(will,)i(b)n(y)f(default,)h(ignore)d(the)i(new)g(attributes,)h(using)
-427 3334 y(the)35 b(remaining)e(attributes)h(to)h(construct)e(the)i(Ob)
-5 b(ject.)57 b(This)34 b(is)g(usually)g(a)g(go)r(o)r(d)f(thing.)58
-b(Ho)n(w)n(ev)n(er,)427 3433 y(since)32 b(external)f(Ob)5
-b(ject)32 b(descriptions)f(are)g(often)h(stored)f(in)i(plain)f(text,)h
-(it)f(is)g(p)r(ossible)g(to)g(edit)g(them)427 3533 y(using)37
-b(a)g(text)h(editor.)65 b(This)37 b(giv)n(es)f(rise)h(to)g(the)h(p)r
-(ossibilit)n(y)f(of)g(gen)n(uine)g(errors)e(in)j(the)f(description)427
-3633 y(due)25 b(to)g(\014nger-slips,)f(t)n(yp)r(os,)i(or)e(simple)h
-(mis-understanding.)35 b(Suc)n(h)25 b(inappropriate)e(attributes)i
-(will)g(b)r(e)427 3732 y(ignored)k(if)h(Strict)g(is)g(left)g(at)g(its)g
-(default)g(zero)f(v)-5 b(alue.)43 b(This)30 b(will)g(cause)f(the)h
-(mis-sp)r(elled)g(attribute)g(to)427 3832 y(rev)n(ert)c(to)h(its)g
-(default)g(v)-5 b(alue,)27 b(p)r(oten)n(tially)g(causing)f(subtle)h(c)n
-(hanges)f(in)h(the)h(b)r(eha)n(viour)d(of)i(application)427
-3931 y(soft)n(w)n(are.)38 b(If)29 b(suc)n(h)f(an)g(e\013ect)h(is)g
-(susp)r(ected,)g(the)g(Strict)f(attribute)h(can)f(b)r(e)h(set)f
-(non-zero,)f(resulting)h(in)427 4031 y(the)g(erroneous)e(attribute)i(b)
-r(eing)f(iden)n(ti\014ed)h(in)g(an)f(error)f(message.)259
-4158 y Fd(FitsChan)427 4258 y Fj(The)20 b(returned)e(KeyMap)h(will)g
-(con)n(tain)g(w)n(arnings)f(for)g(all)h(conditions)g(listed)h(in)f(the)
-h(W)-7 b(arnings)18 b(attribute.)259 4385 y Fd(XmlChan)427
-4485 y Fj(Rep)r(orts)27 b(con)n(v)n(ersion)f(errors)f(that)j(result)f
-(in)h(what)g(are)e(usally)h(insigni\014can)n(t)g(c)n(hanges.)0
-4642 y Fd(Returned)32 b(V)-8 b(alue:)259 4773 y(astW)g(arnings\(\))427
-4872 y Fj(A)25 b(p)r(oin)n(ter)g(to)f(the)i(KeyMap)d(holding)i(the)g(w)
-n(arning)e(messages,)h(or)g(NULL)h(if)g(no)g(w)n(arnings)e(w)n(ere)h
-(issued)427 4972 y(during)j(the)h(previous)f(read)g(op)r(eration.)0
-5128 y Fd(Notes:)340 5405 y Fi(\017)45 b Fj(The)28 b(returned)f(KeyMap)
-g(uses)g(k)n(eys)g(of)g(the)h(form)f Ft(")p Fj(W)-7 b(arning)p
-Ft(_)p Fj(1)p Ft(")p Fj(,)26 b Ft(")p Fj(W)-7 b(arning)p
-Ft(_)p Fj(2)p Ft(")p Fj(,)25 b(etc.)340 5533 y Fi(\017)45
-b Fj(A)31 b(v)-5 b(alue)29 b(of)h(NULL)h(will)f(b)r(e)g(returned)f(if)i
-(this)f(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)h(AST)f(error)e
-(status)i(set,)427 5632 y(or)d(if)h(it)g(should)f(fail)h(for)f(an)n(y)g
-(reason.)p eop end
-%%Page: 383 393
-TeXDict begin 383 392 bop 3643 52 a FF(383)p 0 351 3780
-12 v 0 483 a Fz(astW)-11 b(atc)l(h)251 b Fe(Iden)m(tify)37
-b(a)i(new)f(error)g(status)g(v)-7 b(ariable)37 b(for)g(the)1581
-598 y(AST)h(library)3233 483 y Fz(astW)-11 b(atc)l(h)0
-794 y Fd(Description:)44 b Fj(This)28 b(function)h(allo)n(ws)e(a)h(new)
-g(error)e(status)i(v)-5 b(ariable)27 b(to)h(b)r(e)h(accessed)e(b)n(y)g
-(the)i(AST)g(library)d(when)227 894 y(c)n(hec)n(king)h(for)g(and)g(rep)
-r(orting)g(error)e(conditions.)227 1022 y(By)f(default,)h(the)f
-(library)f(uses)h(an)f(in)n(ternal)h(in)n(teger)f(error)f(status)h
-(whic)n(h)h(is)g(set)g(to)g(an)g(error)e(v)-5 b(alue)23
-b(if)i(an)f(error)227 1122 y(o)r(ccurs.)48 b(Use)31 b(of)h(astW)-7
-b(atc)n(h)31 b(allo)n(ws)f(the)i(in)n(ternal)f(error)e(status)i(to)h(b)
-r(e)g(replaced)e(b)n(y)h(an)h(in)n(teger)e(v)-5 b(ariable)31
-b(of)227 1221 y(y)n(our)g(c)n(ho)r(osing,)g(so)g(that)h(the)g(AST)h
-(library)d(can)h(share)g(its)h(error)e(status)h(directly)h(with)g
-(other)f(co)r(de)h(whic)n(h)227 1321 y(uses)27 b(the)h(same)f(error)f
-(detection)i(con)n(v)n(en)n(tion.)227 1449 y(If)23 b(an)f(alternativ)n
-(e)f(error)f(status)i(v)-5 b(ariable)21 b(is)i(supplied,)g(it)g(is)f
-(used)g(b)n(y)g(all)g(related)g(AST)h(functions)f(and)g(macros)227
-1549 y(\(e.g.)37 b(astOK,)26 b(astStatus)i(and)f(astClearStatus\).)0
-1706 y Fd(Synopsis:)121 b Ft(int)42 b Fi(\003)p Ft(astWatch\()e(int)i
-Fi(\003)p Ft(status_ptr)d(\))0 1863 y Fd(P)m(arameters:)259
-2007 y(status)p Ft(_)p Fd(ptr)427 2107 y Fj(P)n(oin)n(ter)28
-b(to)i(an)f(in)n(t)h(whose)e(v)-5 b(alue)30 b(is)f(to)h(b)r(e)f(used)h
-(subsequen)n(tly)f(as)g(the)h(AST)g(inherited)f(status)h(v)-5
-b(alue.)427 2207 y(If)36 b(a)f(NULL)h(p)r(oin)n(ter)f(is)g(supplied,)j
-(the)e(AST)f(library)f(will)i(rev)n(ert)e(to)h(using)h(its)f(o)n(wn)g
-(in)n(ternal)g(error)427 2306 y(status.)0 2476 y Fd(Returned)d(V)-8
-b(alue:)259 2620 y(astW)g(atc)m(h\(\))427 2720 y Fj(Address)27
-b(of)h(the)f(previous)g(error)e(status)j(v)-5 b(ariable.)35
-b(This)28 b(ma)n(y)e(later)h(b)r(e)h(passed)f(bac)n(k)f(to)i(astW)-7
-b(atc)n(h)27 b(to)427 2819 y(restore)g(the)h(previous)g(b)r(eha)n
-(viour)f(of)h(the)g(library)-7 b(.)38 b(\(Note)28 b(that)h(on)f(the)g
-(\014rst)g(in)n(v)n(o)r(cation)f(of)h(astW)-7 b(atc)n(h)427
-2919 y(the)28 b(returned)f(v)-5 b(alue)28 b(will)g(b)r(e)g(the)g
-(address)e(of)i(the)g(in)n(ternal)f(error)e(status)j(v)-5
-b(ariable.\))0 3089 y Fd(Notes:)340 3379 y Fi(\017)45
-b Fj(This)28 b(function)g(is)f(not)h(a)n(v)-5 b(ailable)26
-b(in)i(the)g(F)n(OR)-7 b(TRAN)28 b(77)f(in)n(terface)g(to)g(the)h(AST)g
-(library)-7 b(.)p 0 3586 V 0 3716 a Fz(astWcsMap)738
-b Fe(Create)37 b(a)h(WcsMap)738 b Fz(astWcsMap)0 3913
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(WcsMap)h(and)f(optionally)g(initialises)g(its)h(attributes.)227
-4041 y(A)g(WcsMap)g(is)f(used)h(to)g(represen)n(t)e(sky)h(co)r
-(ordinate)g(pro)5 b(jections)26 b(as)h(describ)r(ed)h(in)f(the)i
-(\(draft\))f(FITS)g(w)n(orld)227 4141 y(co)r(ordinate)20
-b(system)g(\(FITS-W)n(CS\))h(pap)r(er)f(b)n(y)g(E.W.)h(Griesen)f(and)g
-(M.)h(Calabretta)e(\(A)i(&)f(A,)h(in)g(preparation\).)227
-4241 y(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h(of)f(functions,)h(or)
-f(sky)g(pro)5 b(jections,)28 b(whic)n(h)h(transform)e
-(longitude-latitude)i(pairs)227 4340 y(represen)n(ting)d(spherical)h
-(celestial)g(co)r(ordinates)f(in)n(to)h(corresp)r(onding)f(pairs)h(of)g
-(Cartesian)f(co)r(ordinates)g(\(and)227 4440 y(vice)i(v)n(ersa\).)227
-4568 y(A)j(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5 b(jections)29
-b(and)h(applies)227 4668 y(them)25 b(to)g(a)f(sp)r(eci\014ed)h(pair)f
-(of)g(co)r(ordinates.)35 b(All)25 b(the)g(pro)5 b(jections)23
-b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g(supp)r(orted,)227
-4768 y(plus)32 b(the)f(no)n(w)g(deprecated)f Ft(")p Fj(T)-7
-b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fj(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-4867 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fj(TPN)p
-Ft(")p Fj(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fj(nativ)n(e)227 4967 y(spherical)p Ft(")32 b
-Fj(and)g Ft(")p Fj(pro)5 b(jection)31 b(plane)p Ft(")h
-Fj(co)r(ordinates.)51 b(These)32 b(co)r(ordinates)g(ma)n(y)-7
-b(,)33 b(optionally)-7 b(,)33 b(b)r(e)g(em)n(b)r(edded)227
-5066 y(in)j(a)f(space)g(with)h(more)f(than)h(t)n(w)n(o)f(dimensions,)i
-(the)f(remaining)f(co)r(ordinates)f(b)r(eing)i(copied)f(unc)n(hanged.)
-227 5166 y(Note,)27 b(ho)n(w)n(ev)n(er,)d(that)j(for)f(consistency)f
-(with)i(other)e(AST)i(facilities,)g(a)f(WcsMap)g(handles)g(co)r
-(ordinates)e(that)227 5266 y(represen)n(t)j(angles)f(in)i(radians)e
-(\(rather)h(than)h(the)g(degrees)e(used)i(b)n(y)f(FITS-W)n(CS\).)227
-5394 y(The)32 b(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 5494
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 5593 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 5693 y(WcsAxis\(lonlat\))d
-(attribute.)p eop end
-%%Page: 384 394
-TeXDict begin 384 393 bop 0 52 a FF(384)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)227 351 y Fj(Eac)n(h)37
-b(WcsMap)i(also)e(allo)n(ws)g(up)i(to)f(100)f Ft(")p
-Fj(pro)5 b(jection)37 b(parameters)p Ft(")f Fj(to)i(b)r(e)h(asso)r
-(ciated)e(with)i(eac)n(h)e(axis.)227 451 y(These)31 b(sp)r(ecify)h(the)
-g(precise)f(form)g(of)g(the)h(pro)5 b(jection,)31 b(and)h(are)e
-(accessed)g(using)h(PVi)p Ft(_)p Fj(m)h(attribute,)g(where)227
-551 y Ft(")p Fj(i)p Ft(")27 b Fj(is)h(the)g(in)n(teger)f(axis)h(index)f
-(\(starting)h(at)g(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f
-Ft(")p Fj(parameter)f(index)p Ft(")h Fj(in)h(the)h(range)d(0)227
-650 y(to)i(99.)39 b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5
-b(jection)27 b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5
-b(jection,)27 b(and)i(their)f(meanings,)g(are)227 750
-y(dep)r(enden)n(t)c(up)r(on)e(the)h(pro)5 b(jection)22
-b(t)n(yp)r(e)h(\(most)g(pro)5 b(jections)21 b(either)h(do)h(not)f(use)h
-(an)n(y)f(pro)5 b(jection)21 b(parameters,)227 849 y(or)h(use)g
-(parameters)f(1)h(and)g(2)g(asso)r(ciated)f(with)i(the)g(latitude)g
-(axis\).)35 b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-949 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)227 1049 y(ha)n(v)n(e)h(defaults.)53 b(When)34
-b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h(explicitly)g(set)g(v)-5
-b(alues)33 b(for)f(all)h(those)g(required)227 1148 y(pro)5
-b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n(e)g
-(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 1293
-y Fd(Synopsis:)121 b Ft(AstWcsMap)40 b Fi(\003)p Ft(astWcsMap\()f(int)j
-(ncoord,)f(int)h(type,)g(int)g(lonax,)f(int)h(latax,)f(const)h(char)227
-1393 y Fi(\003)p Ft(options,)e(...)86 b(\))0 1538 y Fd(P)m(arameters:)
-259 1669 y(nco)s(ord)427 1769 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)
-h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-1869 y(sions)g(of)g(the)h(space)f(in)g(whic)n(h)g(the)h(p)r(oin)n(ts)g
-(will)f(reside\).)36 b(This)24 b(m)n(ust)g(b)r(e)h(at)f(least)g(2.)36
-b(The)24 b(same)g(n)n(um)n(b)r(er)427 1968 y(is)k(applicable)f(to)g(b)r
-(oth)h(input)h(and)e(output)h(p)r(oin)n(ts.)259 2097
-y Fd(t)m(yp)s(e)427 2196 y Fj(The)h(t)n(yp)r(e)g(of)g(FITS-W)n(CS)g
-(pro)5 b(jection)28 b(to)h(apply)-7 b(.)41 b(This)29
-b(should)g(b)r(e)g(giv)n(en)f(using)h(a)f(macro)g(v)-5
-b(alue)29 b(suc)n(h)427 2296 y(as)k(AST)p Ft(__)p Fj(T)-7
-b(AN)34 b(\(for)g(a)f(tangen)n(t)h(plane)f(pro)5 b(jection\),)35
-b(where)e(the)h(c)n(haracters)e(follo)n(wing)h(the)h(double)427
-2396 y(underscore)19 b(giv)n(e)h(the)h(pro)5 b(jection)20
-b(t)n(yp)r(e)h(co)r(de)f(\(in)i(upp)r(er)e(case\))h(as)f(used)g(in)h
-(the)g(FITS-W)n(CS)g Ft(")p Fj(CTYPEi)p Ft(")427 2495
-y Fj(k)n(eyw)n(ord.)34 b(Y)-7 b(ou)23 b(should)g(consult)g(the)h
-(FITS-W)n(CS)f(pap)r(er)g(for)f(a)h(list)h(of)f(the)g(a)n(v)-5
-b(ailable)22 b(pro)5 b(jections.)35 b(The)427 2595 y(additional)41
-b(co)r(de)f(of)h(AST)p Ft(__)p Fj(TPN)g(can)f(b)r(e)h(supplied)h(whic)n
-(h)f(represen)n(ts)e(a)i(T)-7 b(AN)41 b(pro)5 b(jection)40
-b(with)427 2694 y(p)r(olynomial)27 b(correction)f(terms)h(as)g
-(de\014ned)h(in)g(an)f(early)g(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r
-(er.)259 2823 y Fd(lonax)427 2922 y Fj(The)g(index)g(of)f(the)h
-(longitude)g(axis.)36 b(This)27 b(should)h(lie)f(in)h(the)g(range)e(1)i
-(to)f Ft(")p Fj(nco)r(ord)p Ft(")p Fj(.)259 3051 y Fd(latax)427
-3150 y Fj(The)33 b(index)g(of)g(the)g(latitude)h(axis.)52
-b(This)33 b(should)f(lie)h(in)h(the)f(range)e(1)i(to)g
-Ft(")p Fj(nco)r(ord)p Ft(")e Fj(and)i(b)r(e)g(distinct)427
-3250 y(from)28 b Ft(")p Fj(lonax)p Ft(")p Fj(.)259 3378
-y Fd(options)427 3478 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)
-g(string)f(con)n(taining)g(an)h(optional)g(comma-separated)e(list)i(of)
-g(attribute)427 3577 y(assignmen)n(ts)c(to)h(b)r(e)h(used)f(for)f
-(initialising)h(the)h(new)f(WcsMap.)36 b(The)25 b(syn)n(tax)f(used)h
-(is)g(iden)n(tical)g(to)g(that)427 3677 y(for)h(the)h(astSet)g
-(function)g(and)g(ma)n(y)f(include)h Ft(")p Fj(prin)n(tf)p
-Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f
-Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427 3777 y(in)i(the)g(normal)f
-(w)n(a)n(y)-7 b(.)427 3891 y(If)28 b(the)g(sky)f(pro)5
-b(jection)26 b(to)i(b)r(e)g(implemen)n(ted)g(requires)e(pro)5
-b(jection)26 b(parameter)g(v)-5 b(alues)27 b(to)h(b)r(e)g(set,)f(then)
-427 3990 y(this)36 b(should)e(normally)g(b)r(e)i(done)e(here)h(via)f
-(the)i(PVi)p Ft(_)p Fj(m)e(attribute)h(\(see)g(the)h
-Ft(")p Fj(Examples)p Ft(")d Fj(section\).)427 4090 y(Setting)22
-b(v)-5 b(alues)21 b(for)g(these)h(parameters)d(is)j(mandatory)e(if)i
-(they)f(do)g(not)h(ha)n(v)n(e)e(default)i(v)-5 b(alues)21
-b(\(as)g(de\014ned)427 4189 y(in)28 b(the)g(FITS-W)n(CS)g(pap)r(er\).)
-259 4318 y Fd(...)427 4417 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4517 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4617 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 4716 y Fj(function\).)0
-4873 y Fd(Returned)32 b(V)-8 b(alue:)259 5005 y(astWcsMap\(\))427
-5105 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(WcsMap.)0
-5262 y Fd(Examples:)227 5395 y Fq(wcsmap)46 b(=)i(astWcsMap\()d(2,)i
-(AST)p Ft(__)p Fq(MER,)e(1,)i(2,)g Ft("")g Fq(\);)427
-5494 y Fj(Creates)19 b(a)h(WcsMap)g(that)g(implemen)n(ts)g(a)g(FITS-W)n
-(CS)g(Mercator)e(pro)5 b(jection)19 b(on)h(pairs)f(of)h(co)r
-(ordinates,)427 5593 y(with)28 b(co)r(ordinates)f(1)g(and)h(2)f
-(represen)n(ting)f(the)i(longitude)g(and)f(latitude)h(resp)r(ectiv)n
-(ely)-7 b(.)37 b(Note)27 b(that)h(the)427 5693 y(FITS-W)n(CS)g
-(Mercator)e(pro)5 b(jection)26 b(do)r(es)i(not)f(require)g(an)n(y)g
-(pro)5 b(jection)26 b(parameters.)p eop end
-%%Page: 385 395
-TeXDict begin 385 394 bop 3643 52 a FF(385)227 352 y
-Fq(wcsmap)46 b(=)i(astWcsMap\()d(3,)i(AST)p Ft(__)p Fq(COE,)e(2,)i(3,)g
-Ft(")p Fq(PV3)p Ft(_)p Fq(1=40.0)p Ft(")d Fq(\);)427
-451 y Fj(Creates)20 b(a)g(WcsMap)g(that)h(implemen)n(ts)g(a)f(FITS-W)n
-(CS)g(conical)g(equal)g(area)f(pro)5 b(jection.)33 b(The)21
-b(WcsMap)427 551 y(acts)k(on)h(p)r(oin)n(ts)f(in)h(a)f(3-dimensional)f
-(space;)i(co)r(ordinates)e(2)h(and)h(3)f(represen)n(t)f(longitude)i
-(and)f(latitude)427 650 y(resp)r(ectiv)n(ely)-7 b(,)29
-b(while)g(the)g(v)-5 b(alues)29 b(of)g(co)r(ordinate)e(1)i(are)f
-(copied)g(unc)n(hanged.)40 b(Pro)5 b(jection)28 b(parameter)f(1)427
-750 y(asso)r(ciat)n(y)n(ed)22 b(with)j(the)g(latitude)f(axis)g
-(\(corresp)r(onding)e(to)i(FITS)h(k)n(eyw)n(ord)d Ft(")p
-Fj(PV3)p Ft(_)p Fj(1)p Ft(")p Fj(\))g(is)j(required)e(and)427
-849 y(has)k(no)h(default,)g(so)f(is)g(set)h(explicitly)g(to)f(40.0)g
-(degrees.)35 b(Pro)5 b(jection)26 b(parameter)h(2)g(\(corresp)r(onding)
-f(to)427 949 y(FITS)i(k)n(eyw)n(ord)e Ft(")p Fj(PV3)p
-Ft(_)p Fj(2)p Ft(")p Fj(\))f(is)j(required)f(but)h(has)f(a)g(default)h
-(of)g(zero,)e(so)h(need)h(not)f(b)r(e)h(sp)r(eci\014ed.)0
-1114 y Fd(Notes:)340 1399 y Fi(\017)45 b Fj(The)34 b(forw)n(ard)f
-(transformation)f(of)i(a)g(WcsMap)f(con)n(v)n(erts)g(b)r(et)n(w)n(een)h
-(FITS-W)n(CS)g Ft(")p Fj(nativ)n(e)f(spherical)p Ft(")427
-1498 y Fj(and)24 b Ft(")p Fj(relativ)n(e)e(ph)n(ysical)p
-Ft(")g Fj(co)r(ordinates,)h(while)h(the)f(in)n(v)n(erse)g
-(transformation)e(con)n(v)n(erts)h(in)i(the)g(opp)r(osite)427
-1598 y(direction.)35 b(This)24 b(arrangemen)n(t)d(ma)n(y)i(b)r(e)h(rev)
-n(ersed,)f(if)h(required,)g(b)n(y)f(using)g(astIn)n(v)n(ert)g(or)f(b)n
-(y)i(setting)f(the)427 1698 y(In)n(v)n(ert)k(attribute)h(to)f(a)g
-(non-zero)f(v)-5 b(alue.)340 1832 y Fi(\017)45 b Fj(If)27
-b(an)n(y)f(set)h(of)f(co)r(ordinates)g(cannot)g(b)r(e)h(transformed)e
-(\(for)i(example,)f(man)n(y)g(pro)5 b(jections)26 b(do)g(not)g(co)n(v)n
-(er)427 1932 y(the)i(en)n(tire)f(celestial)h(sphere\),)f(then)h(a)f
-(WcsMap)h(will)f(yield)h(co)r(ordinate)e(v)-5 b(alues)28
-b(of)f(AST)p Ft(__)p Fj(BAD.)340 2066 y Fi(\017)45 b
-Fj(The)31 b(v)-5 b(alidit)n(y)31 b(of)g(an)n(y)f(pro)5
-b(jection)30 b(parameters)f(giv)n(en)h(via)g(the)i(PVi)p
-Ft(_)p Fj(m)e(parameter)g(in)h(the)g Ft(")p Fj(options)p
-Ft(")427 2165 y Fj(string)e(is)g(not)h(c)n(hec)n(k)n(ed)e(b)n(y)h(this)
-h(function.)43 b(Ho)n(w)n(ev)n(er,)28 b(their)i(v)-5
-b(alidit)n(y)29 b(is)g(c)n(hec)n(k)n(ed)g(when)g(the)h(resulting)427
-2265 y(WcsMap)21 b(is)f(used)g(to)h(transform)e(co)r(ordinates,)h(and)h
-(an)f(error)e(will)j(result)f(if)h(the)g(pro)5 b(jection)19
-b(parameters)427 2365 y(do)28 b(not)f(satisfy)g(all)h(the)g(required)e
-(constrain)n(ts)g(\(as)i(de\014ned)g(in)g(the)g(FITS-W)n(CS)f(pap)r
-(er\).)340 2499 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2598 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 2763 y Fd(Status)33
-b(Handling)n(:)227 2909 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3009 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3108 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3310 3780 12 v 0 3442 a Fz(astWinMap)1428 3441 y Fe(Create)37
-b(a)i(WinMap)3090 3442 y Fz(astWinMap)0 3634 y Fd(Description:)44
-b Fj(This)28 b(function)g(creates)f(a)g(new)g(WinMap)h(and)g
-(optionally)e(initialises)i(its)g(attributes.)227 3759
-y(A)i(Winmap)g(is)f(a)g(linear)g(Mapping)g(whic)n(h)g(transforms)f(a)h
-(rectangular)e(windo)n(w)i(in)h(one)f(co)r(ordinate)f(system)227
-3859 y(in)n(to)g(a)f(similar)g(windo)n(w)g(in)h(another)f(co)r
-(ordinate)g(system)g(b)n(y)g(scaling)g(and)h(shifting)g(eac)n(h)f(axis)
-g(\(the)h(windo)n(w)227 3959 y(edges)f(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 4085 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-4184 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 4336 y Fd(Synopsis:)121 b Ft(AstWinMap)40
-b Fi(\003)p Ft(astWinMap\()f(int)j(ncoord,)f(const)g(double)g(ina[],)g
-(const)h(double)f(inb[],)g(const)227 4436 y(double)g(outa[],)g(const)h
-(double)f(outb[],)f(const)i(char)g Fi(\003)p Ft(options,)e(...)86
-b(\))0 4588 y Fd(P)m(arameters:)259 4727 y(nco)s(ord)427
-4827 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r(ordinate)g(v)-5
-b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)h(transformed)f
-(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-4926 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 5026 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 5160 y Fd(ina)427 5260 y Fj(An)i(arra)n(y)d(con)n(taining)i
-(the)g Ft(")p Fj(nco)r(ord)p Ft(")f Fj(co)r(ordinates)g(of)i(corner)d
-(A)j(of)g(the)f(windo)n(w)g(in)h(the)g(input)g(co)r(or-)427
-5360 y(dinate)e(system.)259 5494 y Fd(in)m(b)427 5593
-y Fj(An)i(arra)n(y)e(con)n(taining)g(the)i Ft(")p Fj(nco)r(ord)p
-Ft(")e Fj(co)r(ordinates)h(of)g(corner)f(B)i(of)f(the)i(windo)n(w)e(in)
-h(the)g(input)g(co)r(or-)427 5693 y(dinate)e(system.)p
-eop end
-%%Page: 386 396
-TeXDict begin 386 395 bop 0 52 a FF(386)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)259 351 y Fd(outa)427
-451 y Fj(An)42 b(arra)n(y)c(con)n(taining)i(the)i Ft(")p
-Fj(nco)r(ord)p Ft(")d Fj(co)r(ordinates)g(of)i(corner)f(A)h(of)g(the)g
-(windo)n(w)g(in)g(the)g(output)427 551 y(co)r(ordinate)27
-b(system.)259 688 y Fd(outb)427 787 y Fj(An)42 b(arra)n(y)d(con)n
-(taining)h(the)i Ft(")p Fj(nco)r(ord)p Ft(")d Fj(co)r(ordinates)h(of)h
-(corner)f(B)h(of)g(the)g(windo)n(w)g(in)g(the)h(output)427
-887 y(co)r(ordinate)27 b(system.)259 1024 y Fd(options)427
-1124 y Fj(P)n(oin)n(ter)g(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-1223 y(assignmen)n(ts)c(to)h(b)r(e)h(used)f(for)g(initialising)f(the)i
-(new)f(WinMap.)37 b(The)25 b(syn)n(tax)f(used)h(is)g(iden)n(tical)g(to)
-g(that)427 1323 y(for)h(the)h(astSet)g(function)g(and)g(ma)n(y)f
-(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g
-(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-1423 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 1560
-y Fd(...)427 1660 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 1759 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 1859 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 1958 y Fj(function\).)0 2129
-y Fd(Returned)32 b(V)-8 b(alue:)259 2274 y(astWinMap\(\))427
-2374 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(WinMap.)0
-2545 y Fd(Notes:)340 2836 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 2936 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 3106 y Fd(Status)33
-b(Handling)n(:)227 3252 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 3352 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 3452 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-0 3660 3780 12 v 0 3791 a Fz(astW)-11 b(rite)618 b Fe(W)-10
-b(rite)38 b(an)g(Ob)7 b(ject)38 b(to)g(a)h(Channel)615
-b Fz(astW)-11 b(rite)0 3989 y Fd(Description:)44 b Fj(This)21
-b(function)h(writes)f(an)g(Ob)5 b(ject)21 b(to)g(a)f(Channel,)j(app)r
-(ending)e(it)g(to)g(an)n(y)g(previous)f(Ob)5 b(jects)20
-b(written)227 4088 y(to)28 b(that)g(Channel.)0 4247 y
-Fd(Synopsis:)121 b Ft(int)42 b(astWrite\()e(AstChannel)g
-Fi(\003)p Ft(this,)h(AstObject)e Fi(\003)p Ft(object)i(\))0
-4405 y Fd(P)m(arameters:)259 4550 y(this)427 4650 y Fj(P)n(oin)n(ter)26
-b(to)i(the)g(Channel.)259 4787 y Fd(ob)5 b(ject)427 4887
-y Fj(P)n(oin)n(ter)26 b(to)i(the)g(Ob)5 b(ject)27 b(whic)n(h)h(is)f(to)
-h(b)r(e)g(written.)0 5057 y Fd(Returned)k(V)-8 b(alue:)259
-5202 y(astW)g(rite\(\))427 5302 y Fj(The)26 b(n)n(um)n(b)r(er)f(of)h
-(Ob)5 b(jects)25 b(written)h(to)g(the)g(Channel)f(b)n(y)h(this)g(in)n
-(v)n(o)r(cation)e(of)i(astW)-7 b(rite)25 b(\(normally)-7
-b(,)25 b(this)427 5402 y(will)j(b)r(e)g(one\).)0 5572
-y Fd(Notes:)p eop end
-%%Page: 387 397
-TeXDict begin 387 396 bop 3643 52 a FF(387)340 351 y
-Fi(\017)45 b Fj(A)29 b(v)-5 b(alue)29 b(of)f(zero)g(will)h(b)r(e)g
-(returned)f(if)h(this)g(function)g(is)f(in)n(v)n(ok)n(ed)f(with)j(the)f
-(AST)g(error)d(status)j(set,)f(or)427 451 y(if)g(it)g(should)g(fail)f
-(for)h(an)n(y)e(reason.)340 585 y Fi(\017)45 b Fj(In)n(v)n(oking)27
-b(this)h(function)h(will)f(usually)f(cause)h(the)g(sink)g(function)g
-(asso)r(ciated)f(with)h(the)h(c)n(hannel)e(to)h(b)r(e)427
-685 y(called)g(in)g(order)f(to)h(transfer)f(a)h(textual)g(description)g
-(of)g(the)g(supplied)g(ob)5 b(ject)28 b(to)g(some)g(external)f(data)427
-784 y(store.)36 b(Ho)n(w)n(ev)n(er,)24 b(the)i(FitsChan)g(class)f(b)r
-(eha)n(v)n(es)g(di\013eren)n(tly)-7 b(.)36 b(In)n(v)n(oking)24
-b(this)i(function)h(on)e(a)h(FitsChan)427 884 y(causes)35
-b(new)g(FITS)h(header)f(cards)f(to)h(b)r(e)h(added)g(to)f(an)g(in)n
-(ternal)g(bu\013er)h(\(the)g(sink)f(function)h(is)g(not)427
-983 y(in)n(v)n(ok)n(ed\).)58 b(This)35 b(bu\013er)h(is)f(written)g(out)
-g(through)f(the)i(sink)f(function)g(only)g(when)g(the)h(FitsChan)f(is)
-427 1083 y(deleted.)p 0 1285 3780 12 v 0 1416 a Fz(astXmlChan)641
-b Fe(Create)38 b(an)g(XmlChan)639 b Fz(astXmlChan)0 1584
-y Fd(Description:)44 b Fj(This)28 b(function)g(creates)f(a)g(new)g
-(XmlChan)h(and)g(optionally)e(initialises)i(its)g(attributes.)227
-1710 y(A)36 b(XmlChan)f(is)g(a)f(sp)r(ecialised)h(form)f(of)h(Channel)g
-(whic)n(h)g(supp)r(orts)g(XML)g(I/O)f(op)r(erations.)58
-b(W)-7 b(riting)35 b(an)227 1810 y(Ob)5 b(ject)22 b(to)f(an)h(XmlChan)g
-(\(using)f(astW)-7 b(rite\))22 b(will,)h(if)f(the)g(Ob)5
-b(ject)22 b(is)g(suitable,)g(generate)f(an)g(XML)h(description)227
-1909 y(of)k(that)g(Ob)5 b(ject,)26 b(and)f(reading)g(from)g(an)h
-(XmlChan)g(will)g(create)e(a)i(new)f(Ob)5 b(ject)26 b(from)f(its)h(XML)
-g(description.)227 2035 y(Normally)-7 b(,)36 b(when)e(y)n(ou)g(use)g
-(an)h(XmlChan,)h(y)n(ou)e(should)g(pro)n(vide)g Ft(")p
-Fj(source)p Ft(")e Fj(and)i Ft(")p Fj(sink)p Ft(")g Fj(functions)h
-(whic)n(h)227 2134 y(connect)c(it)h(to)f(an)g(external)f(data)g(store)h
-(b)n(y)f(reading)g(and)h(writing)g(the)h(resulting)e(XML)h(text.)48
-b(By)31 b(default,)227 2234 y(ho)n(w)n(ev)n(er,)26 b(a)h(Channel)g
-(will)h(read)f(from)g(standard)g(input)h(and)g(write)f(to)h(standard)e
-(output.)0 2386 y Fd(Synopsis:)121 b Ft(AstXmlChan)39
-b Fi(\003)p Ft(astXmlChan\()g(const)i(char)h Fi(\003)p
-Ft(\()p Fi(\003)g Ft(source\)\()f(void)h(\),)g(void)g(\()p
-Fi(\003)h Ft(sink\)\()e(const)227 2485 y(char)h Fi(\003)h
-Ft(\),)g(const)f(char)g Fi(\003)p Ft(options,)d(...)86
-b(\))0 2637 y Fd(P)m(arameters:)259 2776 y(source)427
-2876 y Fj(P)n(oin)n(ter)17 b(to)h(a)g(source)g(function)h(that)g(tak)n
-(es)e(no)h(argumen)n(ts)f(and)i(returns)e(a)h(p)r(oin)n(ter)h(to)f(a)g
-(n)n(ull-terminated)427 2975 y(string.)53 b(This)33 b(function)g(will)g
-(b)r(e)h(used)f(b)n(y)f(the)i(XmlChan)f(to)g(obtain)g(lines)g(of)f
-(input)i(text.)54 b(On)32 b(eac)n(h)427 3075 y(in)n(v)n(o)r(cation,)g
-(it)g(should)f(return)h(a)f(p)r(oin)n(ter)g(to)h(the)g(next)g(input)g
-(line)g(read)f(from)g(some)g(external)g(XML)427 3174
-y(data)c(store,)g(and)h(a)f(NULL)h(p)r(oin)n(ter)f(when)h(there)f(are)g
-(no)g(more)g(lines)g(to)h(read.)427 3291 y(If)g Ft(")p
-Fj(source)p Ft(")e Fj(is)h(NULL,)h(the)g(Channel)g(will)g(read)e(from)i
-(standard)e(input)j(instead.)259 3425 y Fd(sink)427 3525
-y Fj(P)n(oin)n(ter)22 b(to)g(a)h(sink)g(function)g(that)h(tak)n(es)e(a)
-g(p)r(oin)n(ter)h(to)f(a)h(n)n(ull-terminated)g(string)f(as)g(an)h
-(argumen)n(t)f(and)427 3625 y(returns)27 b(v)n(oid.)37
-b(This)28 b(function)g(will)g(b)r(e)g(used)g(b)n(y)f(the)i(XmlChan)f
-(to)f(deliv)n(er)g(lines)h(of)g(output)g(text.)38 b(On)427
-3724 y(eac)n(h)29 b(in)n(v)n(o)r(cation,)h(it)g(should)g(deliv)n(er)f
-(the)h(con)n(ten)n(ts)g(of)g(the)g(string)f(supplied)i(to)f(some)f
-(external)g(XML)427 3824 y(data)e(store.)427 3941 y(If)h
-Ft(")p Fj(sink)p Ft(")f Fj(is)g(NULL,)h(the)g(XmlChan)g(will)g(write)g
-(to)f(standard)g(output)h(instead.)259 4075 y Fd(options)427
-4174 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n(ull-terminated)g(string)f(con)n
-(taining)g(an)h(optional)g(comma-separated)e(list)i(of)g(attribute)427
-4274 y(assignmen)n(ts)22 b(to)h(b)r(e)g(used)h(for)e(initialising)h
-(the)g(new)h(XmlChan.)35 b(The)23 b(syn)n(tax)f(used)i(is)e(iden)n
-(tical)h(to)g(that)427 4373 y(for)j(the)h(astSet)g(function)g(and)g(ma)
-n(y)f(include)h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r
-(eci\014ers)g(iden)n(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p
-Ft(")g Fj(sym)n(b)r(ols)427 4473 y(in)i(the)g(normal)f(w)n(a)n(y)-7
-b(.)259 4607 y Fd(...)427 4707 y Fj(If)38 b(the)g Ft(")p
-Fj(options)p Ft(")e Fj(string)h(con)n(tains)f Ft(")p
-Fj(\045)p Ft(")h Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g
-(list)h(of)f(additional)427 4806 y(argumen)n(ts)26 b(ma)n(y)h(follo)n
-(w)g(it)h(in)g(order)e(to)h(supply)h(v)-5 b(alues)27
-b(to)g(b)r(e)h(substituted)h(for)e(these)g(sp)r(eci\014ers.)37
-b(The)427 4906 y(rules)25 b(for)f(supplying)h(these)g(are)f(iden)n
-(tical)h(to)g(those)g(for)f(the)h(astSet)g(function)h(\(and)f(for)g
-(the)g(C)g Ft(")p Fj(prin)n(tf)p Ft(")427 5006 y Fj(function\).)0
-5170 y Fd(Returned)32 b(V)-8 b(alue:)259 5309 y(astXmlChan\(\))427
-5408 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(XmlChan.)0
-5572 y Fd(Notes:)p eop end
-%%Page: 388 398
-TeXDict begin 388 397 bop 0 52 a FF(388)2049 b Fy(B)91
-b(AST)30 b(FUNCTION)g(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)28 b(the)g(external)e(data)h(source)f(or)g(sink)i(uses)e(a)h(c)
-n(haracter)f(enco)r(ding)g(other)h(than)h(ASCI)r(I,)g(the)f(supplied)
-427 451 y(source)i(and)g(sink)g(functions)h(should)f(translate)g(b)r
-(et)n(w)n(een)h(the)f(external)g(c)n(haracter)f(enco)r(ding)h(and)g
-(the)427 551 y(in)n(ternal)e(ASCI)r(I)i(enco)r(ding)e(used)g(b)n(y)h
-(AST.)340 683 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 783 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)p 0 982 3780 12 v 0 1113
-a Fz(astZo)t(omMap)622 b Fe(Create)37 b(a)i(Zo)s(omMap)620
-b Fz(astZo)t(omMap)0 1302 y Fd(Description:)44 b Fj(This)28
-b(function)g(creates)f(a)g(new)g(Zo)r(omMap)g(and)g(optionally)g
-(initialises)h(its)f(attributes.)227 1426 y(A)40 b(Zo)r(omMap)e(is)h(a)
-f(Mapping)h(whic)n(h)g Ft(")p Fj(zo)r(oms)p Ft(")f Fj(a)g(set)h(of)g(p)
-r(oin)n(ts)g(ab)r(out)g(the)h(origin)e(b)n(y)h(m)n(ultiplying)g(all)227
-1526 y(co)r(ordinate)25 b(v)-5 b(alues)25 b(b)n(y)h(the)g(same)f(scale)
-g(factor)f(\(the)j(in)n(v)n(erse)d(transformation)g(is)i(p)r(erformed)f
-(b)n(y)g(dividing)h(b)n(y)227 1626 y(this)i(scale)f(factor\).)0
-1775 y Fd(Synopsis:)121 b Ft(AstZoomMap)39 b Fi(\003)p
-Ft(astZoomMap\()g(int)j(ncoord,)f(double)g(zoom,)h(const)f(char)h
-Fi(\003)p Ft(options,)e(...)86 b(\))0 1924 y Fd(P)m(arameters:)259
-2061 y(nco)s(ord)427 2160 y Fj(The)25 b(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)g(v)-5 b(alues)24 b(for)g(eac)n(h)f(p)r(oin)n(t)i(to)f(b)r(e)
-h(transformed)f(\(i.e.)36 b(the)25 b(n)n(um)n(b)r(er)f(of)g(dimen-)427
-2260 y(sions)31 b(of)h(the)h(space)e(in)h(whic)n(h)g(the)g(p)r(oin)n
-(ts)g(will)g(reside\).)50 b(The)32 b(same)f(n)n(um)n(b)r(er)h(is)g
-(applicable)f(to)h(b)r(oth)427 2360 y(input)d(and)e(output)h(p)r(oin)n
-(ts.)259 2493 y Fd(zo)s(om)427 2592 y Fj(Initial)f(scale)e(factor)g(b)n
-(y)h(whic)n(h)h(co)r(ordinate)e(v)-5 b(alues)25 b(should)h(b)r(e)h(m)n
-(ultiplied)g(\(b)n(y)f(the)h(forw)n(ard)d(transfor-)427
-2692 y(mation\))f(or)e(divided)i(\(b)n(y)g(the)g(in)n(v)n(erse)e
-(transformation\).)34 b(This)22 b(factor)g(ma)n(y)g(subsequen)n(tly)g
-(b)r(e)h(c)n(hanged)427 2791 y(via)k(the)h(Zo)r(omMap's)f(Zo)r(om)g
-(attribute.)37 b(It)28 b(ma)n(y)f(b)r(e)h(p)r(ositiv)n(e)f(or)f
-(negativ)n(e,)h(but)h(should)g(not)f(b)r(e)h(zero.)259
-2924 y Fd(options)427 3024 y Fj(P)n(oin)n(ter)f(to)h(a)g(n)n
-(ull-terminated)g(string)f(con)n(taining)g(an)h(optional)g
-(comma-separated)e(list)i(of)g(attribute)427 3124 y(assignmen)n(ts)21
-b(to)g(b)r(e)h(used)g(for)f(initialising)g(the)h(new)g(Zo)r(omMap.)34
-b(The)22 b(syn)n(tax)e(used)i(is)f(iden)n(tical)h(to)f(that)427
-3223 y(for)26 b(the)h(astSet)g(function)g(and)g(ma)n(y)f(include)h
-Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(sp)r(eci\014ers)g(iden)n
-(ti\014ed)h(b)n(y)f Ft(")p Fj(\045)p Ft(")g Fj(sym)n(b)r(ols)427
-3323 y(in)i(the)g(normal)f(w)n(a)n(y)-7 b(.)259 3456
-y Fd(...)427 3555 y Fj(If)38 b(the)g Ft(")p Fj(options)p
-Ft(")e Fj(string)h(con)n(tains)f Ft(")p Fj(\045)p Ft(")h
-Fj(format)g(sp)r(eci\014ers,)i(then)f(an)f(optional)g(list)h(of)f
-(additional)427 3655 y(argumen)n(ts)26 b(ma)n(y)h(follo)n(w)g(it)h(in)g
-(order)e(to)h(supply)h(v)-5 b(alues)27 b(to)g(b)r(e)h(substituted)h
-(for)e(these)g(sp)r(eci\014ers.)37 b(The)427 3754 y(rules)25
-b(for)f(supplying)h(these)g(are)f(iden)n(tical)h(to)g(those)g(for)f
-(the)h(astSet)g(function)h(\(and)f(for)g(the)g(C)g Ft(")p
-Fj(prin)n(tf)p Ft(")427 3854 y Fj(function\).)0 4016
-y Fd(Returned)32 b(V)-8 b(alue:)259 4152 y(astZo)s(omMap\(\))427
-4252 y Fj(A)28 b(p)r(oin)n(ter)f(to)h(the)g(new)g(Zo)r(omMap.)0
-4414 y Fd(Notes:)340 4696 y Fi(\017)45 b Fj(A)35 b(n)n(ull)g(Ob)5
-b(ject)35 b(p)r(oin)n(ter)g(\(AST)p Ft(__)p Fj(NULL\))g(will)g(b)r(e)g
-(returned)g(if)g(this)g(function)h(is)e(in)n(v)n(ok)n(ed)g(with)h(the)
-427 4796 y(AST)28 b(error)e(status)h(set,)h(or)f(if)h(it)g(should)f
-(fail)h(for)f(an)n(y)g(reason.)-2 4958 y Fd(Status)33
-b(Handling)n(:)227 5104 y Fj(The)d(protected)g(in)n(terface)f(to)g
-(this)h(function)h(includes)f(an)f(extra)g(parameter)f(at)i(the)g(end)g
-(of)g(the)g(parameter)227 5204 y(list)37 b(descirb)r(ed)f(ab)r(o)n(v)n
-(e.)62 b(This)37 b(parameter)e(is)h(a)g(p)r(oin)n(ter)g(to)h(the)g(in)n
-(teger)e(inherited)i(status)f(v)-5 b(ariable:)54 b Ft(")p
-Fj(in)n(t)227 5303 y Fi(\003)p Fj(status)p Ft(")p Fj(.)p
-eop end
-%%Page: 389 399
-TeXDict begin 389 398 bop 3643 52 a FF(389)0 351 y Fz(C)135
-b(AST)43 b(A)l(ttribute)j(Descriptions)p 0 596 3780 12
-v 0 735 a(Abbrev\(axis\))1073 728 y Fe(Abbreviate)37
-b(leading)g(\014elds)i(within)1330 843 y(n)m(umerical)d(axis)i(lab)s
-(els?)3010 735 y Fz(Abbrev\(axis\))0 1021 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1120 y(astGrid)22 b(function\))g(b)n(y)g(determining)f(whether)h(matc)n
-(hing)g(leading)f(\014elds)h(should)f(b)r(e)h(remo)n(v)n(ed)f(from)g
-(adjacen)n(t)227 1220 y(n)n(umerical)i(axis)f(lab)r(els.)35
-b(It)24 b(tak)n(es)e(a)h(separate)f(v)-5 b(alue)23 b(for)g(eac)n(h)f
-(ph)n(ysical)h(axis)f(of)h(a)g(Plot)g(so)g(that,)h(for)f(instance,)227
-1320 y(the)36 b(setting)f Ft(")p Fj(Abbrev\(2\)=0)p Ft(")e
-Fj(sp)r(eci\014es)h(that)i(matc)n(hing)e(leading)g(\014elds)h(should)g
-(not)g(b)r(e)g(remo)n(v)n(ed)f(on)g(the)227 1419 y(second)27
-b(axis.)227 1548 y(If)33 b(the)g(Abbrev)g(v)-5 b(alue)32
-b(of)g(a)h(Plot)f(is)g(non-zero)f(\(the)i(default\),)i(then)e(leading)f
-(\014elds)g(will)h(b)r(e)g(remo)n(v)n(ed)e(from)227 1647
-y(adjacen)n(t)c(axis)g(lab)r(els)h(if)g(they)f(are)g(equal.)0
-1804 y Fd(T)m(yp)s(e:)227 1904 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-2061 y Fd(Class)k(Applicabilit)m(y:)259 2205 y(Plot)427
-2305 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2475 y Fd(Notes:)340 2765 y Fi(\017)45 b Fj(If)c(no)f(axis)f(is)h(sp)r
-(eci\014ed,)k(\(e.g.)74 b Ft(")p Fj(Abbrev)p Ft(")39
-b Fj(instead)h(of)h Ft(")p Fj(Abbrev\(2\))p Ft(")p Fj(\),)h(then)f(a)f
-Ft(")p Fj(set)p Ft(")f Fj(or)g Ft(")p Fj(clear)p Ft(")427
-2865 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 2964 y(will)k(use)g(just)g(the)g(Abbrev\(1\))f(v)-5
-b(alue.)p 0 3171 V 0 3303 a Fz(Adaptiv)l(e)330 b Fe(Should)38
-b(the)g(area)g(adapt)g(to)g(c)m(hanges)g(in)g(the)1400
-3418 y(co)s(ordinate)e(system?)3245 3303 y Fz(Adaptiv)l(e)0
-3614 y Fd(Description:)44 b Fj(The)28 b(co)r(ordinate)e(system)g
-(represen)n(ted)g(b)n(y)h(a)g(Region)f(ma)n(y)h(b)r(e)g(c)n(hanged)f(b)
-n(y)h(assigning)f(new)h(v)-5 b(alues)227 3714 y(to)33
-b(attributes)g(suc)n(h)g(as)f(System,)i(Unit,)h(etc.)54
-b(F)-7 b(or)32 b(instance,)i(a)e(Region)h(represen)n(ting)e(an)i(area)e
-(on)i(the)g(sky)227 3813 y(in)h(ICRS)f(co)r(ordinates)f(ma)n(y)g(ha)n
-(v)n(e)g(its)i(System)f(attribute)g(c)n(hanged)f(so)h(that)g(it)h
-(represen)n(ts)e(\(sa)n(y\))g(Galactic)227 3913 y(co)r(ordinates)h
-(instead)h(of)h(ICRS.)f(This)h(attribute)f(con)n(trols)f(what)h(happ)r
-(ens)g(when)h(the)g(co)r(ordinate)e(system)227 4013 y(represen)n(ted)27
-b(b)n(y)g(a)g(Region)g(is)h(c)n(hanged)e(in)i(this)g(w)n(a)n(y)-7
-b(.)227 4141 y(If)40 b(Adaptiv)n(e)f(is)h(non-zero)d(\(the)j
-(default\),)j(then)d(area)e(represen)n(ted)g(b)n(y)h(the)h(Region)f
-(adapts)g(to)g(the)h(new)227 4241 y(co)r(ordinate)27
-b(system.)37 b(That)27 b(is,)h(the)g(n)n(umerical)f(v)-5
-b(alues)27 b(whic)n(h)g(de\014ne)h(the)g(area)e(represen)n(ted)h(b)n(y)
-g(the)h(Region)227 4340 y(are)34 b(c)n(hanged)g(b)n(y)h(mapping)f(them)
-i(from)e(the)h(old)g(co)r(ordinate)f(system)g(in)n(to)h(the)g(new)g(co)
-r(ordinate)f(system.)227 4440 y(Th)n(us)28 b(the)g(Region)e(con)n(tin)n
-(ues)h(to)h(represen)n(t)e(the)i(same)f(ph)n(ysical)g(area.)227
-4568 y(If)35 b(Adaptiv)n(e)g(is)g(zero,)g(then)h(area)d(represen)n(ted)
-h(b)n(y)g(the)h(Region)f(do)r(es)h(not)g(adapt)f(to)h(the)g(new)g(co)r
-(ordinate)227 4668 y(system.)59 b(That)35 b(is,)h(the)f(n)n(umerical)f
-(v)-5 b(alues)35 b(whic)n(h)g(de\014ne)g(the)g(area)e(represen)n(ted)h
-(b)n(y)h(the)g(Region)f(are)g(left)227 4768 y(unc)n(hanged.)i(Th)n(us)
-28 b(the)g(ph)n(ysical)e(area)g(represen)n(ted)h(b)n(y)g(the)h(Region)f
-(will)h(usually)f(c)n(hange.)227 4896 y(As)35 b(an)g(example,)h
-(consider)e(a)h(Region)f(describ)r(e)h(a)f(range)g(of)h(w)n(a)n(v)n
-(elength)e(from)h(2000)g(Angstrom)g(to)g(4000)227 4996
-y(Angstrom.)42 b(If)30 b(the)g(Unit)g(attribute)g(for)e(the)i(Region)f
-(is)g(c)n(hanged)g(from)g(Angstrom)g(to)g Ft(")p Fj(nm)p
-Ft(")g Fj(\(nanometre\),)227 5095 y(what)f(happ)r(ens)f(dep)r(ends)h
-(on)f(the)g(setting)h(of)f(Adaptiv)n(e.)37 b(If)27 b(Adaptiv)n(e)h(is)f
-(non-zero,)f(the)h(Mapping)g(from)g(the)227 5195 y(old)34
-b(to)f(the)i(new)e(co)r(ordinate)g(system)g(is)h(found.)56
-b(In)33 b(this)i(case)d(it)j(is)e(a)g(simple)h(scaling)f(b)n(y)h(a)f
-(factor)g(of)g(0.1)227 5295 y(\(since)e(1)f(Angstrom)g(is)h(0.1)e
-(nm\).)47 b(This)31 b(Mapping)f(is)g(then)i(used)e(to)h(mo)r(dify)g
-(the)g(n)n(umerical)f(v)-5 b(alues)30 b(within)227 5394
-y(the)i(Region,)g(c)n(hanging)e(2000)g(to)h(200)f(and)i(4000)d(to)j
-(400.)47 b(Th)n(us)31 b(the)h(mo)r(di\014ed)g(region)e(represen)n(ts)g
-(200)g(nm)227 5494 y(to)e(400)e(nm,)h(the)h(same)f(ph)n(ysical)g(space)
-f(as)h(the)h(original)e(2000)f(Angstrom)i(to)g(4000)f(Angstrom.)36
-b(Ho)n(w)n(ev)n(er,)25 b(if)227 5593 y(Adaptiv)n(e)j(had)g(b)r(een)g
-(zero,)f(then)h(the)g(n)n(umerical)f(v)-5 b(alues)28
-b(w)n(ould)f(not)h(ha)n(v)n(e)f(b)r(een)h(c)n(hanged,)f(resulting)g(in)
-h(the)227 5693 y(\014nal)g(Region)f(represen)n(ting)f(2000)f(nm)j(to)g
-(4000)e(nm.)p eop end
-%%Page: 390 400
-TeXDict begin 390 399 bop 0 52 a FF(390)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(Setting)g(Adaptiv)n(e)g(to)f(zero)f(can)h(b)r(e)h(necessary)e(if)i
-(y)n(ou)f(w)n(an)n(t)g(correct)f(inaccurate)g(attribute)i(settings)f
-(in)h(an)227 451 y(existing)23 b(Region.)35 b(F)-7 b(or)23
-b(instance,)h(when)f(creating)g(a)g(Region)f(y)n(ou)h(ma)n(y)g(not)g
-(kno)n(w)g(what)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)23 b(to)h(use,)227
-551 y(so)k(y)n(ou)f(w)n(ould)g(lea)n(v)n(e)g(Ep)r(o)r(c)n(h)g(unset)h
-(resulting)f(in)i(some)e(default)h(v)-5 b(alue)28 b(b)r(eing)g(used.)38
-b(If)28 b(at)g(some)f(later)g(p)r(oin)n(t)227 650 y(in)34
-b(the)h(application,)f(the)g(correct)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)34 b(is)g(determined,)h(y)n(ou)e(could)h(assign)e(the)j(correct)
-d(v)-5 b(alue)34 b(to)227 750 y(the)c(Ep)r(o)r(c)n(h)f(attribute.)42
-b(Ho)n(w)n(ev)n(er,)27 b(y)n(ou)i(w)n(ould)g(\014rst)f(need)i(to)f(set)
-g(Adaptiv)n(e)g(temp)r(orarily)f(to)h(zero,)g(b)r(ecause)227
-849 y(otherwise)g(the)h(area)e(represen)n(ted)g(b)n(y)i(the)g(Region)e
-(w)n(ould)h(b)r(e)h(Mapp)r(ed)g(from)g(the)f(spurious)g(default)h(Ep)r
-(o)r(c)n(h)227 949 y(to)e(the)g(new)f(correct)g(Ep)r(o)r(c)n(h,)g(whic)
-n(h)g(is)h(not)f(what)h(is)f(required.)0 1107 y Fd(T)m(yp)s(e:)227
-1207 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 1365 y Fd(Class)k
-(Applicabilit)m(y:)259 1509 y(Region)427 1609 y Fj(All)d(Regions)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 1817 3780 12 v 0 1948
-a Fz(AlignO\013set)383 b Fe(Align)37 b(SkyF)-10 b(rames)38
-b(using)h(the)f(o\013set)1400 2063 y(co)s(ordinate)e(system?)3115
-1948 y Fz(AlignO\013set)0 2260 y Fd(Description:)44 b
-Fj(This)26 b(attribute)g(is)g(a)g(b)r(o)r(olean)f(v)-5
-b(alue)26 b(whic)n(h)g(con)n(trols)e(ho)n(w)i(a)f(SkyF)-7
-b(rame)25 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)f(used)227
-2360 y(\(b)n(y)c(astFindF)-7 b(rame)22 b(or)e(astCon)n(v)n(ert\))h(as)g
-(a)g(template)i(to)e(matc)n(h)h(another)f(\(target\))g(SkyF)-7
-b(rame.)35 b(It)22 b(determines)227 2460 y(the)28 b(co)r(ordinate)f
-(system)g(in)h(whic)n(h)f(the)h(t)n(w)n(o)f(SkyF)-7 b(rames)27
-b(are)f(aligned)h(if)h(a)g(matc)n(h)f(o)r(ccurs.)227
-2588 y(If)21 b(the)g(template)g(and)f(target)g(SkyF)-7
-b(rames)19 b(b)r(oth)i(ha)n(v)n(e)e(de\014ned)i(o\013set)g(co)r
-(ordinate)e(systems)h(\(i.e.)35 b(the)21 b(SkyRefIs)227
-2688 y(attribute)j(is)g(set)f(to)h(either)f Ft(")p Fj(Origin)p
-Ft(")f Fj(or)h Ft(")g Fj(P)n(ole)p Ft(")p Fj(\),)g(and)g(they)h(b)r
-(oth)g(ha)n(v)n(e)f(a)g(non-zero)f(v)-5 b(alue)23 b(for)h
-(AlignO\013set,)227 2788 y(then)h(alignmen)n(t)e(o)r(ccurs)g(within)h
-(the)g(o\013set)g(co)r(ordinate)f(systems)g(\(that)h(is,)h(a)e(UnitMap)
-i(will)f(alw)n(a)n(ys)d(b)r(e)k(used)227 2887 y(to)e(align)f(the)g(t)n
-(w)n(o)g(SkyF)-7 b(rames\).)35 b(If)23 b(either)f(the)h(template)g(or)e
-(target)h(SkyF)-7 b(rame)22 b(has)g(zero)f(\(the)i(default)g(v)-5
-b(alue\))227 2987 y(for)35 b(AlignO\013set,)j(or)d(if)h(either)f(SkyF)
--7 b(rame)35 b(has)g(SkyRefIs)h(set)g(to)f Ft(")p Fj(Ignored)p
-Ft(")p Fj(,)h(then)g(alignmen)n(t)f(o)r(ccurring)227
-3087 y(within)29 b(the)f(co)r(ordinate)e(system)h(sp)r(eci\014ed)h(b)n
-(y)f(the)h(AlignSystem)g(attribute.)0 3244 y Fd(T)m(yp)s(e:)227
-3344 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 3502 y Fd(Class)k
-(Applicabilit)m(y:)259 3647 y(SkyF)-8 b(rame)427 3747
-y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)p
-0 3954 V 0 4086 a Fz(AlignSideBand)227 b Fe(Should)38
-b(the)g(SideBand)h(attribute)1183 4186 y(b)s(e)g(tak)m(en)f(in)m(to)f
-(accoun)m(t)g(when)1157 4285 y(aligning)f(this)j(DSBSp)s(ecF)-10
-b(rame)1117 4400 y(with)37 b(another)h(DSBSp)s(ecF)-10
-b(rame?)2903 4086 y Fz(AlignSideBand)0 4597 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(DSBSp)r(ecF)-7
-b(rame)27 b(b)r(eha)n(v)n(es)g(when)h(an)f(attempt)h(is)f(made)h(to)f
-(align)227 4697 y(it)i(with)g(another)f(DSBSp)r(ecF)-7
-b(rame)28 b(using)g(astFindF)-7 b(rame)28 b(or)g(astCon)n(v)n(ert.)38
-b(If)29 b(b)r(oth)f(DSBSp)r(ecF)-7 b(rames)29 b(ha)n(v)n(e)227
-4796 y(a)i(non-zero)e(v)-5 b(alue)32 b(for)e(AlignSideBand,)i(the)g(v)
--5 b(alue)31 b(of)g(the)g(SideBand)g(attribute)h(in)f(eac)n(h)f(DSBSp)r
-(ecF)-7 b(rame)227 4896 y(is)36 b(used)g(so)f(that)h(alignmen)n(t)g(o)r
-(ccurs)f(b)r(et)n(w)n(een)g(sidebands.)62 b(That)35 b(is,)j(if)f(one)e
-(DSBSp)r(ecF)-7 b(rame)36 b(represen)n(ts)227 4996 y(USB)k(and)e(the)i
-(other)e(represen)n(ts)g(LSB)h(then)g(astFindF)-7 b(rame)39
-b(and)f(astCon)n(v)n(ert)f(will)j(recognise)d(that)i(the)227
-5095 y(DSBSp)r(ecF)-7 b(rames)33 b(represen)n(t)g(di\013eren)n(t)g
-(sidebands)g(and)g(will)g(tak)n(e)g(this)h(in)n(to)f(accoun)n(t)f(when)
-h(constructing)227 5195 y(the)25 b(Mapping)f(that)h(maps)f(p)r
-(ositions)g(in)g(one)g(DSBSp)r(ecF)-7 b(rame)25 b(in)n(to)f(the)h
-(other.)35 b(If)25 b(AlignSideBand)f(in)h(either)227
-5295 y(DSBSp)r(ecF)-7 b(rame)25 b(is)f(set)h(to)f(zero,)h(then)g(the)g
-(v)-5 b(alues)24 b(of)g(the)h(SideBand)g(attributes)f(are)g(ignored.)34
-b(In)25 b(the)g(ab)r(o)n(v)n(e)227 5394 y(example,)h(this)g(w)n(ould)g
-(result)f(in)h(a)g(frequency)f(in)h(the)g(\014rst)g(DSBSp)r(ecF)-7
-b(rame)26 b(b)r(eing)g(mapp)r(ed)g(on)n(to)f(the)h(same)227
-5494 y(frequency)d(in)g(the)g(second)g(DSBSp)r(ecF)-7
-b(rame,)24 b(ev)n(en)e(though)h(those)g(frequencies)f(refer)g(to)h
-(di\013eren)n(t)g(sidebands.)227 5593 y(In)k(other)f(w)n(ords,)f(if)i
-(either)f(AlignSideBand)g(attribute)h(is)f(zero,)g(then)h(the)g(t)n(w)n
-(o)e(DSBSp)r(ecF)-7 b(rames)27 b(aligns)e(lik)n(e)227
-5693 y(basic)i(Sp)r(ecF)-7 b(rames.)37 b(The)27 b(default)h(v)-5
-b(alue)28 b(for)f(AlignSideBand)g(is)h(zero.)p eop end
-%%Page: 391 401
-TeXDict begin 391 400 bop 3643 52 a FF(391)227 351 y
-Fj(When)23 b(astFindF)-7 b(rame)22 b(or)g(astCon)n(v)n(ert)e(is)i(used)
-h(on)f(t)n(w)n(o)f(DSBSp)r(ecF)-7 b(rames)23 b(\(p)r(oten)n(tially)f
-(describing)f(di\013eren)n(t)227 451 y(sp)r(ectral)d(co)r(ordinate)g
-(systems)g(and/or)f(sidebands\),)k(it)e(returns)f(a)g(Mapping)g(whic)n
-(h)h(can)f(b)r(e)h(used)g(to)g(transform)227 551 y(a)34
-b(p)r(osition)f(in)i(one)e(DSBSp)r(ecF)-7 b(rame)34 b(in)n(to)g(the)g
-(corresp)r(onding)e(p)r(osition)i(in)g(the)g(other.)55
-b(The)34 b(Mapping)g(is)227 650 y(made)28 b(up)g(of)f(the)h(follo)n
-(wing)f(steps)g(in)h(the)g(indicated)g(order:)340 908
-y Fi(\017)45 b Fj(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h(AlignSideBand)
-f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427 1007
-y(the)39 b(target's)f(curren)n(t)g(sideband)g(\(giv)n(en)g(b)n(y)h(its)
-g(SideBand)f(attribute\))h(to)g(the)g(observ)n(ed)e(sideband)427
-1107 y(\(whether)27 b(USB)g(or)f(LSB\).)h(If)g(the)h(target)e(already)f
-(represen)n(ts)g(the)i(observ)n(ed)f(sideband,)g(this)h(step)g(will)427
-1207 y(lea)n(v)n(e)g(the)i(v)-5 b(alues)28 b(unc)n(hanged.)39
-b(If)28 b(either)h(of)f(the)h(t)n(w)n(o)e(DSBSp)r(ecF)-7
-b(rames)29 b(ha)n(v)n(e)e(a)h(v)-5 b(alue)28 b(of)g(zero)g(for)f(its)
-427 1306 y(AlignSideBand)h(attribute,)g(then)g(this)g(step)f(is)h
-(omitted.)340 1437 y Fi(\017)45 b Fj(Map)25 b(the)g(v)-5
-b(alues)24 b(from)g(the)h(sp)r(ectral)f(system)g(of)h(the)g(target)e
-(to)i(the)g(sp)r(ectral)e(system)i(of)f(the)h(template.)427
-1536 y(This)39 b(Mapping)g(tak)n(es)f(in)n(to)h(accoun)n(t)f(all)h(the)
-g(inherited)g(Sp)r(ecF)-7 b(rame)39 b(attributes)g(suc)n(h)g(as)f
-(System,)427 1636 y(StdOfRest,)29 b(Unit,)f(etc.)340
-1767 y Fi(\017)45 b Fj(If)28 b(b)r(oth)g(DSBSp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)28 b(of)f(1)g(for)g(the)h
-(AlignSideBand)f(attribute,)h(map)f(v)-5 b(alues)27 b(from)427
-1866 y(the)37 b(result's)f(observ)n(ed)e(sideband)j(to)f(the)g
-(result's)g(curren)n(t)g(sideband)g(\(giv)n(en)f(b)n(y)h(its)h
-(SideBand)f(at-)427 1966 y(tribute\).)h(If)24 b(the)g(result)g(already)
-f(represen)n(ts)f(the)i(observ)n(ed)f(sideband,)h(this)h(step)f(will)g
-(lea)n(v)n(e)f(the)h(v)-5 b(alues)427 2065 y(unc)n(hanged.)44
-b(If)31 b(either)f(of)g(the)g(t)n(w)n(o)g(DSBSp)r(ecF)-7
-b(rames)30 b(ha)n(v)n(e)f(a)h(v)-5 b(alue)30 b(of)g(zero)f(for)g(its)i
-(AlignSideBand)427 2165 y(attribute,)d(then)g(this)g(step)g(is)f
-(omitted.)0 2325 y Fd(T)m(yp)s(e:)227 2424 y Fj(In)n(teger)g(\(b)r(o)r
-(olean\).)0 2571 y Fd(Class)k(Applicabilit)m(y:)259 2706
-y(DSBSp)s(ecF)-8 b(rame)427 2805 y Fj(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 3000
-3780 12 v 0 3132 a Fz(AlignSp)t(ecO\013set)238 b Fe(Align)38
-b(Sp)s(ecF)-10 b(rames)38 b(using)h(the)1245 3246 y(o\013set)g(co)s
-(ordinate)d(system?)2841 3132 y Fz(AlignSp)t(ecO\013set)0
-3430 y Fd(Description:)44 b Fj(This)37 b(attribute)g(is)g(a)g(b)r(o)r
-(olean)f(v)-5 b(alue)37 b(whic)n(h)g(con)n(trols)e(ho)n(w)h(a)h(Sp)r
-(ecF)-7 b(rame)36 b(b)r(eha)n(v)n(es)g(when)h(it)h(is)227
-3530 y(used)e(\(b)n(y)g(astFindF)-7 b(rame)36 b(or)f(astCon)n(v)n
-(ert\))f(as)h(a)h(template)g(to)g(matc)n(h)g(another)f(\(target\))g(Sp)
-r(ecF)-7 b(rame.)62 b(It)227 3630 y(determines)27 b(whether)f(alignmen)
-n(t)g(o)r(ccurs)f(b)r(et)n(w)n(een)i(the)g(o\013set)f(v)-5
-b(alues)26 b(de\014ned)h(b)n(y)f(the)h(curren)n(t)e(v)-5
-b(alue)27 b(of)f(the)227 3729 y(Sp)r(ecO\013set)i(attribute,)g(or)f(b)r
-(et)n(w)n(een)g(the)h(corresp)r(onding)e(absolute)h(sp)r(ectral)g(v)-5
-b(alues.)227 3853 y(The)36 b(default)f(v)-5 b(alue)36
-b(of)f(zero)f(results)h(in)g(the)h(t)n(w)n(o)f(Sp)r(ecF)-7
-b(rames)35 b(b)r(eing)g(aligned)g(so)f(that)i(a)f(giv)n(en)f(absolute)
-227 3952 y(sp)r(ectral)28 b(v)-5 b(alue)28 b(in)h(one)f(is)g(mapp)r(ed)
-h(to)f(the)h(same)f(absolute)g(v)-5 b(alue)28 b(in)h(the)g(other.)38
-b(A)29 b(non-zero)e(v)-5 b(alue)28 b(results)227 4052
-y(in)j(the)g(Sp)r(ecF)-7 b(rames)30 b(b)r(eing)h(aligned)e(so)h(that)h
-(a)f(giv)n(en)g(o\013set)g(v)-5 b(alue)30 b(in)h(one)f(is)h(mapp)r(ed)g
-(to)f(the)h(same)f(o\013set)227 4152 y(v)-5 b(alue)28
-b(in)g(the)g(other.)0 4299 y Fd(T)m(yp)s(e:)227 4398
-y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 4545 y Fd(Class)k(Applicabilit)m
-(y:)259 4680 y(Sp)s(ecF)-8 b(rame)427 4779 y Fj(All)28
-b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-0 4974 V 0 5106 a Fz(AlignStdOfRest)221 b Fe(Standard)38
-b(of)g(rest)g(to)g(use)i(when)1367 5205 y(aligning)c(Sp)s(ecF)-10
-b(rames)2850 5106 y Fz(AlignStdOfRest)0 5394 y Fd(Description:)44
-b Fj(This)34 b(attribute)f(con)n(trols)f(ho)n(w)h(a)f(Sp)r(ecF)-7
-b(rame)34 b(b)r(eha)n(v)n(es)e(when)h(it)h(is)f(used)g(\(b)n(y)h
-(astFindF)-7 b(rame)32 b(or)227 5494 y(astCon)n(v)n(ert\))26
-b(as)h(a)g(template)h(to)g(matc)n(h)f(another)g(\(target\))g(Sp)r(ecF)
--7 b(rame.)37 b(It)28 b(iden)n(ti\014es)g(the)g(standard)e(of)i(rest)
-227 5593 y(in)k(whic)n(h)f(alignmen)n(t)g(is)g(to)g(o)r(ccur.)47
-b(See)32 b(the)f(StdOfRest)h(attribute)g(for)e(a)h(desription)g(of)g
-(the)h(v)-5 b(alues)31 b(whic)n(h)227 5693 y(ma)n(y)c(b)r(e)h(assigned)
-f(to)g(this)h(attribute.)37 b(The)28 b(default)g(AlignStdOfRest)g(v)-5
-b(alue)27 b(is)h Ft(")p Fj(Helio)p Ft(")f Fj(\(heliographic\).)p
-eop end
-%%Page: 392 402
-TeXDict begin 392 401 bop 0 52 a FF(392)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(When)38 b(astFindF)-7 b(rame)38 b(or)e(astCon)n(v)n(ert)g(is)i
-(used)f(on)h(t)n(w)n(o)f(Sp)r(ecF)-7 b(rames)37 b(\(p)r(oten)n(tially)h
-(describing)e(di\013eren)n(t)227 451 y(sp)r(ectral)31
-b(co)r(ordinate)e(systems\),)j(it)f(returns)g(a)f(Mapping)h(whic)n(h)g
-(can)f(b)r(e)i(used)e(to)h(transform)f(a)h(p)r(osition)f(in)227
-551 y(one)38 b(Sp)r(ecF)-7 b(rame)37 b(in)n(to)h(the)g(corresp)r
-(onding)e(p)r(osition)h(in)h(the)g(other.)67 b(The)38
-b(Mapping)f(is)h(made)f(up)i(of)e(the)227 650 y(follo)n(wing)27
-b(steps)g(in)h(the)g(indicated)g(order:)340 909 y Fi(\017)45
-b Fj(Map)33 b(v)-5 b(alues)33 b(from)g(the)h(system)f(used)g(b)n(y)g
-(the)h(target)e(\(w)n(a)n(v)n(elength,)i(apparen)n(t)e(radial)g(v)n
-(elo)r(cit)n(y)-7 b(,)34 b(etc\))427 1009 y(to)k(the)g(system)f(sp)r
-(eci\014ed)h(b)n(y)g(the)g(AlignSystem)f(attribute,)k(using)c(the)h
-(target's)f(rest)g(frequency)g(if)427 1109 y(necessary)-7
-b(.)340 1240 y Fi(\017)45 b Fj(Map)30 b(these)h(v)-5
-b(alues)30 b(from)g(the)h(target's)e(standard)g(of)i(rest)f(to)g(the)h
-(standard)e(of)i(rest)e(sp)r(eci\014ed)i(b)n(y)f(the)427
-1340 y(AlignStdOfRest)35 b(attribute,)h(using)e(the)h(Ep)r(o)r(c)n(h,)g
-(ObsLat,)h(ObsLon,)f(ObsAlt,)h(RefDec)f(and)f(RefRA)427
-1439 y(attributes)28 b(of)f(the)h(target)f(to)g(de\014ne)h(the)g(t)n(w)
-n(o)f(standards)f(of)i(rest.)340 1571 y Fi(\017)45 b
-Fj(Map)26 b(these)f(v)-5 b(alues)26 b(from)f(the)h(standard)f(of)g
-(rest)h(sp)r(eci\014ed)g(b)n(y)f(the)h(AlignStdOfRest)g(attribute,)h
-(to)e(the)427 1671 y(template's)30 b(standard)e(of)h(rest,)g(using)g
-(the)h(Ep)r(o)r(c)n(h,)f(ObsLat,)g(ObsLon,)g(ObsAlt,)h(RefDec)g(and)f
-(RefRA)427 1770 y(attributes)f(of)f(the)h(template)g(to)g(de\014ne)g
-(the)g(t)n(w)n(o)e(standards)h(of)g(rest.)340 1902 y
-Fi(\017)45 b Fj(Map)24 b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)
-f(sp)r(eci\014ed)g(b)n(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h
-(system)f(used)427 2002 y(b)n(y)k(the)g(template,)g(using)f(the)h
-(template's)g(rest)f(frequency)g(if)h(necessary)-7 b(.)0
-2162 y Fd(T)m(yp)s(e:)227 2262 y Fj(String.)0 2410 y
-Fd(Class)31 b(Applicabilit)m(y:)259 2545 y(Sp)s(ecF)-8
-b(rame)427 2645 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 2842 3780 12 v 0
-2973 a Fz(AlignSystem)219 b Fe(Co)s(ordinate)36 b(system)i(in)h(whic)m
-(h)f(to)g(align)1629 3088 y(the)g(F)-10 b(rame)3037 2973
-y Fz(AlignSystem)0 3256 y Fd(Description:)44 b Fj(This)34
-b(attribute)f(con)n(trols)f(ho)n(w)h(a)g(F)-7 b(rame)32
-b(b)r(eha)n(v)n(es)h(when)g(it)h(is)f(used)h(\(b)n(y)f(astFindF)-7
-b(rame)33 b(or)f(ast-)227 3355 y(Con)n(v)n(ert\))h(as)g(a)g(template)h
-(to)g(matc)n(h)f(another)g(\(target\))h(F)-7 b(rame.)54
-b(It)34 b(iden)n(ti\014es)g(the)g(co)r(ordinate)f(system)g(in)227
-3455 y(whic)n(h)28 b(the)g(t)n(w)n(o)f(F)-7 b(rames)26
-b(will)i(b)r(e)g(aligned)f(b)n(y)h(the)f(matc)n(h.)227
-3579 y(The)36 b(v)-5 b(alues)35 b(whic)n(h)h(ma)n(y)e(b)r(e)i(assigned)
-f(to)g(this)h(attribute,)i(and)d(its)h(default)g(v)-5
-b(alue,)37 b(dep)r(end)f(on)g(the)g(class)227 3679 y(of)i(F)-7
-b(rame)37 b(and)h(are)e(describ)r(ed)i(in)g(the)g Ft(")p
-Fj(Applicabilit)n(y)p Ft(")f Fj(section)h(b)r(elo)n(w.)66
-b(In)38 b(general,)h(the)f(AlignSystem)227 3778 y(attribute)28
-b(will)g(accept)f(an)n(y)g(of)h(the)g(v)-5 b(alues)27
-b(whic)n(h)g(ma)n(y)g(b)r(e)h(assigned)f(to)g(the)h(System)g
-(attribute.)227 3902 y(The)c(Mapping)g(returned)g(b)n(y)f(AST)p
-Ft(_)p Fj(FINDFRAME)i(or)f(AST)p Ft(_)p Fj(CONVER)-7
-b(T)23 b(will)i(use)f(the)g(co)r(ordinate)f(system)227
-4002 y(sp)r(eci\014ed)30 b(b)n(y)g(the)g(AlignSystem)g(attribute)g(as)f
-(an)g(in)n(termediate)g(co)r(ordinate)g(system.)43 b(The)30
-b(total)f(returned)227 4101 y(Mapping)34 b(will)g(\014rst)g(map)g(p)r
-(ositions)g(from)g(the)g(\014rst)g(F)-7 b(rame)34 b(in)n(to)g(this)g
-(in)n(termediate)g(co)r(ordinate)f(system,)227 4201 y(using)j(the)g
-(attributes)f(of)h(the)g(\014rst)f(F)-7 b(rame.)60 b(It)36
-b(will)g(then)g(map)g(these)g(p)r(ositions)f(from)g(the)h(in)n
-(termediate)227 4301 y(co)r(ordinate)27 b(system)g(in)n(to)g(the)h
-(second)f(F)-7 b(rame,)27 b(using)h(the)g(attributes)f(of)h(the)g
-(second)f(F)-7 b(rame.)0 4449 y Fd(T)m(yp)s(e:)227 4549
-y Fj(String.)0 4697 y Fd(Class)31 b(Applicabilit)m(y:)259
-4832 y(F)-8 b(rame)427 4932 y Fj(The)36 b(AlignSystem)g(attribute)g
-(for)g(a)f(basic)h(F)-7 b(rame)35 b(alw)n(a)n(ys)f(equals)h
-Ft(")p Fj(Cartesian)p Ft(")p Fj(,)h(and)g(ma)n(y)f(not)h(b)r(e)427
-5031 y(altered.)259 5163 y Fd(CmpF)-8 b(rame)427 5262
-y Fj(The)35 b(AlignSystem)h(attribute)f(for)f(a)h(CmpF)-7
-b(rame)35 b(alw)n(a)n(ys)e(equals)h Ft(")p Fj(Comp)r(ound)p
-Ft(")p Fj(,)i(and)f(ma)n(y)f(not)h(b)r(e)427 5362 y(altered.)259
-5494 y Fd(F)-8 b(rameSet)427 5593 y Fj(The)22 b(AlignSystem)f
-(attribute)h(of)f(a)g(F)-7 b(rameSet)21 b(is)g(the)h(same)f(as)g(that)g
-(of)h(its)f(curren)n(t)g(F)-7 b(rame)20 b(\(as)h(sp)r(eci\014ed)427
-5693 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)p eop
-end
-%%Page: 393 403
-TeXDict begin 393 402 bop 3643 52 a FF(393)259 351 y
-Fd(SkyF)-8 b(rame)427 451 y Fj(The)28 b(default)g(AlignSystem)g
-(attribute)g(for)f(a)g(SkyF)-7 b(rame)27 b(is)g Ft(")p
-Fj(ICRS)p Ft(")p Fj(.)259 590 y Fd(Sp)s(ecF)-8 b(rame)427
-690 y Fj(The)28 b(default)g(AlignSystem)g(attribute)g(for)f(a)g(Sp)r
-(ecF)-7 b(rame)27 b(is)h Ft(")p Fj(W)-7 b(a)n(v)n(e)p
-Ft(")26 b Fj(\(w)n(a)n(v)n(elength\).)259 829 y Fd(TimeF)-8
-b(rame)427 929 y Fj(The)28 b(default)g(AlignSystem)g(attribute)g(for)f
-(a)g(TimeF)-7 b(rame)27 b(is)g Ft(")p Fj(MJD)p Ft(")p
-Fj(.)p 0 1141 3780 12 v 0 1273 a Fz(AlignTimeScale)153
-b Fe(Time)36 b(scale)h(to)g(use)h(when)f(aligning)1573
-1386 y(TimeF)-10 b(rames)2858 1273 y Fz(AlignTimeScale)0
-1570 y Fd(Description:)44 b Fj(This)32 b(attribute)g(con)n(trols)e(ho)n
-(w)h(a)g(TimeF)-7 b(rame)32 b(b)r(eha)n(v)n(es)e(when)i(it)g(is)g(used)
-g(\(b)n(y)f(astFindF)-7 b(rame)31 b(or)227 1669 y(astCon)n(v)n(ert\))h
-(as)i(a)f(template)h(to)g(matc)n(h)f(another)g(\(target\))g(TimeF)-7
-b(rame.)55 b(It)34 b(iden)n(ti\014es)g(the)g(time)g(scale)f(in)227
-1769 y(whic)n(h)27 b(alignmen)n(t)f(is)h(to)f(o)r(ccur.)36
-b(See)27 b(the)g(TimeScale)g(attribute)g(for)f(a)g(desription)g(of)h
-(the)g(v)-5 b(alues)27 b(whic)n(h)f(ma)n(y)227 1869 y(b)r(e)32
-b(assigned)d(to)i(this)g(attribute.)48 b(The)31 b(default)g
-(AlignTimeScale)g(v)-5 b(alue)30 b(dep)r(ends)i(on)e(the)i(curren)n(t)e
-(v)-5 b(alue)31 b(of)227 1968 y(TimeScale:)37 b(if)27
-b(TimeScale)g(is)g(UT1,)g(GMST,)h(LMST)f(or)f(LAST,)i(the)g(default)f
-(for)g(AlignTimeScale)g(is)g(UT1,)227 2068 y(for)g(all)h(other)f
-(TimeScales)g(the)h(default)g(is)f(T)-7 b(AI.)227 2199
-y(When)37 b(astFindF)-7 b(rame)35 b(or)g(astCon)n(v)n(ert)f(is)h(used)h
-(on)g(t)n(w)n(o)f(TimeF)-7 b(rames)35 b(\(p)r(oten)n(tially)h
-(describing)e(di\013eren)n(t)227 2299 y(time)c(co)r(ordinate)d
-(systems\),)j(it)f(returns)f(a)h(Mapping)f(whic)n(h)h(can)g(b)r(e)g
-(used)g(to)g(transform)f(a)g(p)r(osition)h(in)g(one)227
-2398 y(TimeF)-7 b(rame)24 b(in)n(to)g(the)h(corresp)r(onding)d(p)r
-(osition)j(in)f(the)h(other.)35 b(The)25 b(Mapping)f(is)g(made)g(up)h
-(of)f(the)h(follo)n(wing)227 2498 y(steps)j(in)g(the)g(indicated)f
-(order:)340 2779 y Fi(\017)45 b Fj(Map)32 b(v)-5 b(alues)32
-b(from)g(the)h(system)f(used)h(b)n(y)f(the)g(target)g(\(MJD,)h(JD,)f
-(etc\))h(to)f(the)h(system)f(sp)r(eci\014ed)h(b)n(y)427
-2878 y(the)28 b(AlignSystem)g(attribute.)340 3018 y Fi(\017)45
-b Fj(Map)20 b(these)f(v)-5 b(alues)19 b(from)g(the)h(target's)f(time)h
-(scale)e(to)i(the)f(time)h(scale)f(sp)r(eci\014ed)h(b)n(y)f(the)h
-(AlignTimeScale)427 3117 y(attribute.)340 3257 y Fi(\017)45
-b Fj(Map)28 b(these)f(v)-5 b(alues)27 b(from)h(the)f(time)h(scale)f(sp)
-r(eci\014ed)h(b)n(y)f(the)h(AlignTimeScale)f(attribute,)h(to)g(the)f
-(tem-)427 3356 y(plate's)h(time)g(scale.)340 3496 y Fi(\017)45
-b Fj(Map)24 b(these)g(v)-5 b(alues)24 b(from)g(the)h(system)f(sp)r
-(eci\014ed)g(b)n(y)g(the)h(AlignSystem)f(attribute,)h(to)f(the)h
-(system)f(used)427 3595 y(b)n(y)k(the)g(template.)0 3770
-y Fd(T)m(yp)s(e:)227 3870 y Fj(String.)0 4033 y Fd(Class)j
-(Applicabilit)m(y:)259 4182 y(TimeF)-8 b(rame)427 4282
-y Fj(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-0 4494 V 0 4626 a Fz(AllW)-11 b(arnings)378 b Fe(A)39
-b(list)f(of)g(all)f(curren)m(tly)g(a)m(v)-7 b(ailable)1473
-4741 y(condition)37 b(names)3048 4626 y Fz(AllW)-11 b(arnings)0
-4919 y Fd(Description:)44 b Fj(This)32 b(read-only)d(attribute)j(is)f
-(a)g(space)g(separated)f(list)i(of)f(all)g(the)h(conditions)f(names)g
-(recognized)227 5019 y(b)n(y)d(the)g(W)-7 b(arnings)26
-b(attribute.)37 b(The)28 b(names)f(are)g(listed)h(b)r(elo)n(w.)0
-5182 y Fd(T)m(yp)s(e:)227 5281 y Fj(String,)g(read-only)0
-5444 y Fd(Class)j(Applicabilit)m(y:)259 5593 y(FitsChan)427
-5693 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 394 404
-TeXDict begin 394 403 bop 0 52 a FF(394)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fd(Conditions)n(:)227 497 y Fj(The)d(follo)n(wing)e(conditions)i(are)e
-(curren)n(tly)h(recognised)f(\(all)h(are)g(case-insensitiv)n(e\):)340
-762 y Fi(\017)45 b Ft(")p Fj(BadCel)p Ft(")p Fj(:)31
-b(This)18 b(condition)h(arises)e(when)h(reading)f(a)h(F)-7
-b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan)427
-862 y(if)28 b(an)g(unkno)n(wn)f(celestial)g(co-ordinate)f(system)h(is)h
-(sp)r(eci\014ed)f(b)n(y)h(the)g(CTYPE)f(k)n(eyw)n(ords.)340
-996 y Fi(\017)45 b Ft(")p Fj(BadCTYPE)p Ft(")p Fj(:)e(This)31
-b(condition)g(arises)f(when)i(reading)e(a)h(F)-7 b(rameSet)31
-b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427 1095 y(FitsChan)d(if)g(an)g
-(illegal)f(algorithm)g(co)r(de)g(is)h(sp)r(eci\014ed)g(b)n(y)f(a)h
-(CTYPE)f(k)n(eyw)n(ord,)f(and)i(the)g(illegal)f(co)r(de)427
-1195 y(can)g(b)r(e)h(con)n(v)n(erted)f(to)g(an)g(equiv)-5
-b(alen)n(t)28 b(legal)e(co)r(de.)340 1329 y Fi(\017)45
-b Ft(")p Fj(BadLat)p Ft(")p Fj(:)31 b(This)18 b(condition)g(arises)f
-(when)i(reading)e(a)h(F)-7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g
-(enco)r(ded)g(FitsChan)427 1429 y(if)23 b(the)f(latitude)g(of)g(the)h
-(reference)e(p)r(oin)n(t)h(has)f(an)h(absolute)f(v)-5
-b(alue)22 b(greater)e(than)i(90)f(degrees.)34 b(The)22
-b(actual)427 1528 y(absolute)27 b(v)-5 b(alue)28 b(used)f(is)h(set)f
-(to)h(exactly)f(90)f(degrees)h(in)h(these)f(cases.)340
-1662 y Fi(\017)45 b Ft(")p Fj(BadMat)p Ft(")p Fj(:)32
-b(This)20 b(condition)g(arises)f(if)i(the)f(matrix)g(describing)g(the)g
-(transformation)f(from)h(pixel)g(o\013sets)427 1762 y(to)38
-b(in)n(termediate)g(w)n(orld)f(co)r(ordinates)g(cannot)g(b)r(e)i(in)n
-(v)n(erted.)67 b(This)38 b(matrix)g(describ)r(es)f(the)i(scaling,)427
-1862 y(rotation,)32 b(shear,)h(etc.,)g(applied)f(to)g(the)h(pixel)f
-(axes,)g(and)g(is)g(sp)r(eci\014ed)h(b)n(y)f(k)n(eyw)n(ords)e(suc)n(h)i
-(as)f(PCi)p Ft(_)p Fj(j,)427 1961 y(CDi)p Ft(_)p Fj(j,)g(CR)n(OT)-7
-b(A,)29 b(etc.)43 b(F)-7 b(or)29 b(example,)h(the)g(matrix)f(will)h
-(not)g(b)r(e)g(in)n(v)n(ertable)e(if)i(an)n(y)f(ro)n(ws)f(or)h(columns)
-427 2061 y(consist)i(en)n(tirely)f(of)h(zeros.)46 b(The)31
-b(FITS-W)n(CS)g(P)n(ap)r(er)f(I)h Ft(")p Fj(Represen)n(tation)e(of)i(W)
--7 b(orld)31 b(Co)r(ordinates)e(in)427 2160 y(FITS)p
-Ft(")35 b Fj(b)n(y)g(Greisen)f(&)h(Calabretta)e(requires)h(that)h(this)
-g(matrix)g(b)r(e)g(in)n(v)n(ertable.)58 b(Man)n(y)34
-b(op)r(erations)427 2260 y(\(suc)n(h)28 b(as)f(grid)g(plotting\))h
-(will)f(not)h(b)r(e)g(p)r(ossible)f(if)h(the)g(matrix)f(cannot)h(b)r(e)
-g(in)n(v)n(erted.)340 2394 y Fi(\017)45 b Ft(")p Fj(BadPV)p
-Ft(")p Fj(:)31 b(This)18 b(condition)g(arises)f(when)i(reading)e(a)h(F)
--7 b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan.)427
-2494 y(It)27 b(is)g(issued)f(if)h(a)f(PVi)p Ft(_)p Fj(m)h(header)e(is)i
-(found)g(that)g(refers)e(to)i(a)f(pro)5 b(jection)26
-b(parameter)f(that)i(is)f(not)h(used)427 2593 y(b)n(y)h(the)g(pro)5
-b(jection)26 b(t)n(yp)r(e)i(sp)r(eci\014ed)g(b)n(y)f(CTYPE.)340
-2728 y Fi(\017)45 b Ft(")p Fj(BadV)-7 b(al)p Ft(")p Fj(:)31
-b(This)18 b(condition)h(arises)e(when)h(reading)f(a)h(F)-7
-b(rameSet)18 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)g(FitsChan)427
-2827 y(if)33 b(it)g(is)g(not)g(p)r(ossible)f(to)g(con)n(v)n(ert)f(the)i
-(v)-5 b(alue)33 b(of)f(a)h(FITS)g(k)n(eyw)n(ords)d(to)j(the)g(exp)r
-(ected)g(t)n(yp)r(e.)52 b(F)-7 b(or)32 b(in-)427 2927
-y(stance,)27 b(this)g(can)g(o)r(ccur)f(if)i(the)f(FITS)g(header)f(con)n
-(tains)g(a)h(string)f(v)-5 b(alue)27 b(for)f(a)h(k)n(eyw)n(ord)e(whic)n
-(h)i(should)427 3026 y(ha)n(v)n(e)g(a)g(\015oating)g(p)r(oin)n(t)g(v)-5
-b(alue,)28 b(or)f(if)h(the)g(k)n(eyw)n(ord)d(has)j(no)f(v)-5
-b(alue)27 b(at)h(all)f(\(i.e.)37 b(is)28 b(a)f(commen)n(t)g(card\).)340
-3160 y Fi(\017)45 b Ft(")p Fj(Distortion)p Ft(")p Fj(:)56
-b(This)37 b(condition)g(arises)g(when)g(reading)g(a)g(F)-7
-b(rameSet)37 b(from)g(a)g(non-Nativ)n(e)g(enco)r(ded)427
-3260 y(FitsChan)32 b(if)h(an)n(y)f(of)g(the)g(CTYPE)g(k)n(eyw)n(ords)e
-(sp)r(ecify)i(an)g(unsupp)r(orted)g(distortion)f(co)r(de)h(using)g(the)
-427 3360 y Ft(")p Fj(4-3-3)p Ft(")25 b Fj(format)i(sp)r(eci\014ed)h(in)
-g(FITS-W)n(CS)f(pap)r(er)h(IV.)g(Suc)n(h)f(distortion)g(co)r(des)g(are)
-g(ignored.)340 3494 y Fi(\017)45 b Ft(")p Fj(NoCTYPE)p
-Ft(")p Fj(:)f(This)32 b(condition)f(arises)g(if)h(a)f(default)h(CTYPE)g
-(v)-5 b(alue)31 b(is)h(used)g(within)g(astRead,)g(due)427
-3593 y(to)g(no)f(v)-5 b(alue)31 b(b)r(eing)g(presen)n(t)g(in)h(the)f
-(supplied)h(FitsChan.)48 b(This)32 b(condition)f(is)g(only)g(tested)h
-(for)e(when)427 3693 y(using)e(non-Nativ)n(e)e(enco)r(dings.)340
-3827 y Fi(\017)45 b Ft(")p Fj(NoEquino)n(x)p Ft(")p Fj(:)g(This)33
-b(condition)f(arises)f(if)j(a)e(default)h(equino)n(x)f(v)-5
-b(alue)32 b(is)h(used)g(within)g(astRead,)g(due)427 3927
-y(to)f(no)f(v)-5 b(alue)31 b(b)r(eing)g(presen)n(t)g(in)h(the)f
-(supplied)h(FitsChan.)48 b(This)32 b(condition)f(is)g(only)g(tested)h
-(for)e(when)427 4026 y(using)e(non-Nativ)n(e)e(enco)r(dings.)340
-4160 y Fi(\017)45 b Ft(")p Fj(NoRadesys)p Ft(")p Fj(:)55
-b(This)38 b(condition)f(arises)g(if)h(a)f(default)h(reference)f(frame)g
-(is)h(used)g(for)f(an)g(equatorial)427 4260 y(co-ordinate)27
-b(system)i(within)g(astRead,)f(due)h(to)g(no)f(v)-5 b(alue)29
-b(b)r(eing)f(presen)n(t)g(in)h(the)g(supplied)g(FitsChan.)427
-4360 y(This)f(condition)f(is)h(only)f(tested)h(for)f(when)h(using)f
-(non-Nativ)n(e)g(enco)r(dings.)340 4494 y Fi(\017)45
-b Ft(")p Fj(NoLonp)r(ole)p Ft(")p Fj(:)52 b(This)35 b(condition)h
-(arises)e(if)i(a)g(default)g(v)-5 b(alue)35 b(is)h(used)f(for)h(the)g
-(LONPOLE)d(k)n(eyw)n(ord)427 4593 y(within)g(astRead,)g(due)g(to)f(no)g
-(v)-5 b(alue)32 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)f
-(FitsChan.)51 b(This)33 b(condition)f(is)427 4693 y(only)27
-b(tested)h(for)f(when)h(using)f(non-Nativ)n(e)g(enco)r(dings.)340
-4827 y Fi(\017)45 b Ft(")p Fj(NoLatp)r(ole)p Ft(")p Fj(:)56
-b(This)37 b(condition)g(arises)f(if)i(a)f(default)h(v)-5
-b(alue)38 b(is)f(used)g(for)g(the)h(LA)-7 b(TPOLE)36
-b(k)n(eyw)n(ord)427 4927 y(within)d(astRead,)g(due)g(to)f(no)g(v)-5
-b(alue)32 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)f(FitsChan.)51
-b(This)33 b(condition)f(is)427 5026 y(only)27 b(tested)h(for)f(when)h
-(using)f(non-Nativ)n(e)g(enco)r(dings.)340 5160 y Fi(\017)45
-b Ft(")p Fj(NoMjd-obs)p Ft(")p Fj(:)56 b(This)37 b(condition)h(arises)e
-(if)i(a)f(default)h(v)-5 b(alue)38 b(is)f(used)h(for)f(the)h(date)f(of)
-h(observ)-5 b(ation)427 5260 y(within)33 b(astRead,)g(due)g(to)f(no)g
-(v)-5 b(alue)32 b(b)r(eing)h(presen)n(t)e(in)i(the)g(supplied)f
-(FitsChan.)51 b(This)33 b(condition)f(is)427 5360 y(only)27
-b(tested)h(for)f(when)h(using)f(non-Nativ)n(e)g(enco)r(dings.)340
-5494 y Fi(\017)45 b Ft(")p Fj(Tnx)p Ft(")p Fj(:)38 b(This)28
-b(condition)g(arises)f(if)i(a)f(F)-7 b(rameSet)28 b(is)h(read)e(from)h
-(a)g(FITS)h(header)e(con)n(taining)h(an)g(IRAF)427 5593
-y Ft(")p Fj(TNX)p Ft(")g Fj(pro)5 b(jection)26 b(whic)n(h)i(includes)g
-(terms)f(not)h(supproted)f(b)n(y)g(AST.)i(Suc)n(h)e(terms)h(are)e
-(ignored)h(and)427 5693 y(so)g(the)h(resulting)f(F)-7
-b(rameSet)28 b(ma)n(y)e(b)r(e)i(inaccurate.)p eop end
-%%Page: 395 405
-TeXDict begin 395 404 bop 3643 52 a FF(395)340 351 y
-Fi(\017)45 b Ft(")p Fj(Zp)n(x)p Ft(")p Fj(:)39 b(This)29
-b(condition)g(arises)e(if)j(a)f(F)-7 b(rameSet)29 b(is)g(read)f(from)h
-(a)f(FITS)i(header)e(con)n(taining)g(an)h(IRAF)427 451
-y Ft(")p Fj(ZPX)p Ft(")24 b Fj(pro)5 b(jection)25 b(whic)n(h)g
-(includes)h Ft(")p Fj(lngcor)p Ft(")d Fj(or)h Ft(")p
-Fj(latcor)p Ft(")g Fj(correction)f(terms.)36 b(These)25
-b(terms)g(are)g(not)427 551 y(supp)r(orted)j(b)n(y)f(AST)h(and)f(are)g
-(ignored.)36 b(The)27 b(resulting)g(F)-7 b(rameSet)28
-b(ma)n(y)f(therefore)f(b)r(e)i(inaccurate.)p 0 765 3780
-12 v 0 903 a Fz(AsTime\(axis\))1116 896 y Fe(F)-10 b(ormat)37
-b(celestal)g(co)s(ordinates)g(as)1725 996 y(times?)2989
-903 y Fz(AsTime\(axis\))0 1181 y Fd(Description:)44 b
-Fj(This)28 b(attribute)f(sp)r(eci\014es)h(the)g(default)g(st)n(yle)f
-(of)g(formatting)g(to)g(b)r(e)h(used)g(\(e.g.)36 b(b)n(y)27
-b(astF)-7 b(ormat\))27 b(for)227 1281 y(the)e(celestial)f(co)r
-(ordinate)g(v)-5 b(alues)24 b(describ)r(ed)g(b)n(y)h(a)f(SkyF)-7
-b(rame.)35 b(It)25 b(tak)n(es)f(a)g(separate)f(b)r(o)r(olean)h(v)-5
-b(alue)24 b(for)g(eac)n(h)227 1380 y(SkyF)-7 b(rame)32
-b(axis)g(so)f(that,)j(for)e(instance,)i(the)f(setting)f
-Ft(")p Fj(AsTime\(2\)=0)p Ft(")f Fj(sp)r(eci\014es)h(the)h(default)g
-(formatting)227 1480 y(st)n(yle)27 b(for)h(celestial)f(latitude)h(v)-5
-b(alues.)227 1612 y(If)23 b(the)f(AsTime)g(attribute)g(for)g(a)g(SkyF)
--7 b(rame)21 b(axis)g(is)h(zero,)g(then)g(co)r(ordinates)f(on)h(that)g
-(axis)f(will)h(b)r(e)h(formatted)227 1712 y(as)e(angles)f(b)n(y)h
-(default)g(\(using)g(degrees,)g(min)n(utes)h(and)f(seconds\),)h
-(otherwise)e(they)h(will)g(b)r(e)h(formatted)f(as)f(times)227
-1811 y(\(using)28 b(hours,)f(min)n(utes)g(and)h(seconds\).)227
-1943 y(The)h(default)h(v)-5 b(alue)29 b(of)g(AsTime)h(is)f(c)n(hosen)f
-(according)f(to)i(the)h(sky)f(co)r(ordinate)f(system)g(b)r(eing)i
-(represen)n(ted,)227 2043 y(as)22 b(determined)i(b)n(y)e(the)h(SkyF)-7
-b(rame's)22 b(System)h(attribute.)36 b(This)23 b(ensures,)g(for)f
-(example,)i(that)f(righ)n(t)f(ascension)227 2143 y(v)-5
-b(alues)27 b(will)h(b)r(e)g(formatted)g(as)f(times)g(b)n(y)h(default,)g
-(follo)n(wing)e(normal)h(con)n(v)n(en)n(tions.)0 2307
-y Fd(T)m(yp)s(e:)227 2407 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-2571 y Fd(Class)k(Applicabilit)m(y:)259 2722 y(SkyF)-8
-b(rame)427 2822 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 2999 y Fd(Notes:)340 3296 y Fi(\017)45
-b Fj(The)d(AsTime)g(attribute)g(op)r(erates)e(b)n(y)h(c)n(hanging)g
-(the)h(default)g(v)-5 b(alue)41 b(of)h(the)g(corresp)r(onding)e(F)-7
-b(or-)427 3396 y(mat\(axis\))28 b(attribute.)37 b(This,)27
-b(in)h(turn,)g(ma)n(y)f(also)f(a\013ect)i(the)g(v)-5
-b(alue)28 b(of)f(the)h(Unit\(axis\))g(attribute.)340
-3536 y Fi(\017)45 b Fj(Only)38 b(the)g(default)h(st)n(yle)e(of)h
-(formatting)f(is)h(a\013ected)g(b)n(y)g(the)g(AsTime)g(v)-5
-b(alue.)68 b(If)39 b(an)e(explicit)i(F)-7 b(or-)427 3636
-y(mat\(axis\))28 b(v)-5 b(alue)27 b(is)h(set,)f(it)h(will)g(o)n(v)n
-(er-ride)d(an)n(y)i(e\013ect)h(from)f(the)h(AsTime)g(attribute.)p
-0 3850 V 0 3981 a Fz(Base)1181 3982 y Fe(F)-10 b(rameSet)37
-b(base)i(F)-10 b(rame)39 b(index)3504 3981 y Fz(Base)0
-4162 y Fd(Description:)44 b Fj(This)28 b(attribute)g(giv)n(es)f(the)h
-(index)g(of)f(the)h(F)-7 b(rame)28 b(whic)n(h)f(is)h(to)g(b)r(e)g
-(regarded)e(as)h(the)h Ft(")p Fj(base)p Ft(")e Fj(F)-7
-b(rame)227 4262 y(within)30 b(a)e(F)-7 b(rameSet.)40
-b(The)28 b(default)h(is)g(the)g(\014rst)f(F)-7 b(rame)28
-b(added)h(to)f(the)h(F)-7 b(rameSet)29 b(when)g(it)g(is)f(created)g
-(\(this)227 4362 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h(an)g(index)h
-(of)g(1\).)0 4526 y Fd(T)m(yp)s(e:)227 4626 y Fj(In)n(teger.)0
-4790 y Fd(Class)j(Applicabilit)m(y:)259 4941 y(F)-8 b(rameSet)427
-5041 y Fj(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)
-0 5218 y Fd(Notes:)340 5515 y Fi(\017)45 b Fj(In)n(v)n(erting)29
-b(a)g(F)-7 b(rameSet)29 b(\(in)n(v)n(erting)g(the)h(b)r(o)r(olean)f
-(sense)g(of)h(its)g(In)n(v)n(ert)e(attribute,)j(with)f(the)g(astIn)n(v)
-n(ert)427 5615 y(function)e(for)g(example\))f(will)h(in)n(terc)n(hange)
-e(the)i(v)-5 b(alues)27 b(of)h(its)f(Base)g(and)g(Curren)n(t)g
-(attributes.)p eop end
-%%Page: 396 406
-TeXDict begin 396 405 bop 0 52 a FF(396)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Border)298 b Fe(Dra)m(w)38 b(a)h(b)s(order)f
-(around)f(v)-7 b(alid)38 b(regions)g(of)g(a)h(Plot?)297
-b Fz(Border)0 687 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n
-(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g
-(grid)g(\(dra)n(wn)g(with)h(the)227 787 y(astGrid)e(function\))i(b)n(y)
-e(determining)h(whether)g(a)f(b)r(order)g(is)g(dra)n(wn)g(around)g
-(regions)f(corresp)r(onding)g(to)h(the)227 887 y(v)-5
-b(alid)28 b(ph)n(ysical)f(co)r(ordinates)f(of)h(a)h(Plot)f(\(c.f.)37
-b(astBorder\).)227 1017 y(If)j(the)g(Border)d(v)-5 b(alue)39
-b(of)g(a)g(Plot)g(is)g(non-zero,)h(then)g(this)g(b)r(order)e(will)h(b)r
-(e)h(dra)n(wn)e(as)h(part)f(of)i(the)f(grid.)227 1116
-y(Otherwise,)32 b(the)g(b)r(order)e(is)i(not)f(dra)n(wn)g(\(although)g
-(axis)g(lab)r(els)g(and)g(tic)n(k)g(marks)g(will)g(still)h(app)r(ear,)g
-(unless)227 1216 y(other)25 b(relev)-5 b(an)n(t)24 b(Plot)g(attributes)
-h(indicate)f(that)i(they)f(should)f(not\).)36 b(The)25
-b(default)h(b)r(eha)n(viour)d(is)i(to)g(dra)n(w)e(the)227
-1316 y(b)r(order)j(if)i(tic)n(k)e(marks)g(and)h(n)n(umerical)f(lab)r
-(els)h(will)g(b)r(e)g(dra)n(wn)f(around)g(the)h(edges)f(of)h(the)g
-(plotting)g(area)f(\(see)227 1415 y(the)i(Lab)r(elling)f(attribute\),)i
-(but)f(to)f(omit)h(it)g(otherwise.)0 1576 y Fd(T)m(yp)s(e:)227
-1675 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 1836 y Fd(Class)k
-(Applicabilit)m(y:)259 1983 y(Plot)427 2083 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)p 0 2293 V 0 2431 a Fz(Bottom\(axis\))1173
-2424 y Fe(Lo)m(w)m(est)37 b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)
-3001 2431 y Fz(Bottom\(axis\))0 2642 y Fd(Description:)44
-b Fj(This)34 b(attribute)h(giv)n(es)e(the)h(lo)n(w)n(est)f(axis)h(v)-5
-b(alue)34 b(to)g(b)r(e)g(displa)n(y)n(ed)f(\(for)h(instance,)i(b)n(y)e
-(the)g(astGrid)227 2742 y(metho)r(d\).)0 2902 y Fd(T)m(yp)s(e:)227
-3002 y Fj(Floating)27 b(p)r(oin)n(t.)0 3162 y Fd(Class)k(Applicabilit)m
-(y:)259 3310 y(F)-8 b(rame)427 3409 y Fj(The)28 b(default)g(supplied)g
-(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g
-(axis)g(v)-5 b(alues,)27 b(without)h(an)n(y)f(limit.)259
-3548 y Fd(SkyF)-8 b(rame)427 3647 y Fj(The)27 b(SkyF)-7
-b(rame)25 b(class)g(re-de\014nes)h(the)h(default)f(Bottom)g(v)-5
-b(alue)26 b(to)h(-90)e(degrees)g(for)g(latitude)i(axes,)f(and)427
-3747 y(0)h(degrees)g(for)g(co-latitude)g(axes.)36 b(The)27
-b(default)i(for)e(longitude)g(axes)g(is)g(to)h(displa)n(y)e(all)i(axis)
-f(v)-5 b(alues.)0 3920 y Fd(Notes:)340 4213 y Fi(\017)45
-b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g(name,)i(it)f
-(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r(er)f(of)g
-(the)427 4313 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)p
-0 4523 V 0 4655 a Fz(Bounded)758 b Fe(Is)40 b(the)e(Region)g(b)s
-(ounded?)759 b Fz(Bounded)0 4854 y Fd(Description:)44
-b Fj(This)27 b(is)g(a)f(read-only)g(attribute)h(indicating)f(if)i(the)f
-(Region)f(is)h(b)r(ounded.)37 b(A)27 b(Region)f(is)h(b)r(ounded)g(if)
-227 4954 y(it)h(is)g(con)n(tained)f(en)n(tirely)g(within)h(some)f
-(\014nite-size)g(b)r(ounding)h(b)r(o)n(x.)0 5115 y Fd(T)m(yp)s(e:)227
-5214 y Fj(In)n(teger)f(\(b)r(o)r(olean\),)h(read-only)-7
-b(.)0 5375 y Fd(Class)31 b(Applicabilit)m(y:)259 5522
-y(Region)427 5622 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i(attribute.)p
-eop end
-%%Page: 397 407
-TeXDict begin 397 406 bop 3643 52 a FF(397)p 0 351 3780
-12 v 0 483 a Fz(CDMatrix)298 b Fe(Use)39 b(CDi)p Fb(_)p
-Fe(j)f(k)m(eyw)m(ords)f(to)h(represen)m(t)g(pixel)1338
-598 y(scaling,)f(rotation,)e(etc?)3171 483 y Fz(CDMatrix)0
-791 y Fd(Description:)44 b Fj(This)26 b(attribute)f(is)g(a)g(b)r(o)r
-(olean)g(v)-5 b(alue)25 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(the)h
-(linear)e(transformation)g(from)h(pixel)227 890 y(co)r(ordinates)d(to)g
-(in)n(termediate)h(w)n(orld)e(co)r(ordinates)h(should)g(b)r(e)i
-(represen)n(ted)d(within)j(a)e(FitsChan)h(when)g(using)227
-990 y(FITS-W)n(CS)29 b(enco)r(ding.)40 b(This)29 b(transformation)e
-(describ)r(es)h(the)h(scaling,)f(rotation,)g(shear,)g(etc.,)h(of)f(the)
-i(pixel)227 1090 y(axes.)227 1216 y(If)38 b(the)g(attribute)g(has)f(a)g
-(non-zero)f(v)-5 b(alue)38 b(then)g(the)g(transformation)e(is)h
-(represen)n(ted)g(b)n(y)g(a)g(set)h(of)f(CDi)p Ft(_)p
-Fj(j)227 1316 y(k)n(eyw)n(ords)23 b(represen)n(ting)g(a)i(square)e
-(matrix)h(\(where)h Ft(")p Fj(i)p Ft(")f Fj(is)g(the)i(index)e(of)h(an)
-g(in)n(termediate)f(w)n(orld)g(co)r(ordinate)227 1415
-y(axis)36 b(and)f Ft(")p Fj(j)p Ft(")h Fj(is)g(the)g(index)g(of)g(a)g
-(pixel)g(axis\).)62 b(If)36 b(the)h(attribute)f(has)f(a)h(zero)f(v)-5
-b(alue)36 b(the)g(transformation)227 1515 y(is)f(represen)n(ted)e(b)n
-(y)i(a)f(set)g(of)h(PCi)p Ft(_)p Fj(j)f(k)n(eyw)n(ords)f(\(whic)n(h)i
-(also)e(represen)n(t)g(a)i(square)e(matrix\))h(together)g(with)227
-1615 y(a)i(corresp)r(onding)f(set)h(of)g(CDEL)-7 b(Ti)37
-b(k)n(eyw)n(ords)d(represen)n(ting)h(the)i(axis)e(scalings.)62
-b(See)37 b(FITS-W)n(CS)f(pap)r(er)227 1714 y(I)r(I)i
-Ft(")p Fj(Represen)n(tation)d(of)i(Celestial)g(Co)r(ordinates)f(in)h
-(FITS)p Ft(")g Fj(b)n(y)g(M.)g(Calabretta)f(&)g(E.W.)i(Greisen,)g(for)f
-(a)227 1814 y(complete)28 b(description)f(of)g(these)h(t)n(w)n(o)f(sc)n
-(hemes.)227 1941 y(The)g(default)f(v)-5 b(alue)26 b(of)g(the)h
-(CDMatrix)f(attribute)g(is)h(determined)f(b)n(y)g(the)g(con)n(ten)n(ts)
-g(of)g(the)h(FitsChan)f(at)g(the)227 2040 y(time)f(the)g(attribute)f
-(is)g(accessed.)35 b(If)24 b(the)h(FitsChan)f(con)n(tains)f(an)n(y)h
-(CDi)p Ft(_)p Fj(j)h(k)n(eyw)n(ords)d(then)i(the)h(default)g(v)-5
-b(alue)227 2140 y(is)21 b(non-zero.)32 b(Otherwise)20
-b(it)h(is)f(zero.)33 b(Note,)22 b(reading)d(a)h(F)-7
-b(rameSet)20 b(from)g(a)g(FitsChan)h(will)f(in)h(general)e(consume)227
-2240 y(an)n(y)33 b(CDi)p Ft(_)p Fj(j)i(k)n(eyw)n(ords)d(presen)n(t)h
-(in)h(the)g(FitsChan.)56 b(Th)n(us)34 b(the)g(default)g(v)-5
-b(alue)34 b(for)g(CDMatrix)f(follo)n(wing)g(a)227 2339
-y(read)g(will)g(usually)g(b)r(e)h(zero,)g(ev)n(en)f(if)h(the)g
-(FitsChan)f(originally)f(con)n(tained)h(some)g(CDi)p
-Ft(_)p Fj(j)g(k)n(eyw)n(ords.)53 b(This)227 2439 y(b)r(eha)n(viour)31
-b(is)g(similar)g(to)g(that)h(of)f(the)h(Enco)r(ding)f(attribute,)h(the)
-g(default)g(v)-5 b(alue)32 b(for)f(whic)n(h)g(is)g(determined)227
-2538 y(b)n(y)i(the)g(con)n(ten)n(ts)g(of)f(the)i(FitsChan)f(at)g(the)g
-(time)g(the)h(attribute)f(is)g(accessed.)51 b(If)34 b(y)n(ou)e(wish)h
-(to)g(retain)f(the)227 2638 y(original)24 b(v)-5 b(alue)25
-b(of)g(the)h(CDMatrix)f(attribute)g(\(that)h(is,)f(the)h(v)-5
-b(alue)25 b(b)r(efore)g(reading)f(the)h(F)-7 b(rameSet\))26
-b(then)f(y)n(ou)227 2738 y(should)j(enquire)f(the)h(default)g(v)-5
-b(alue)27 b(b)r(efore)h(doing)f(the)h(read,)e(and)i(then)g(set)f(that)h
-(v)-5 b(alue)28 b(explicitly)-7 b(.)0 2891 y Fd(T)m(yp)s(e:)227
-2991 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 3145 y
-Fd(Class)k(Applicabilit)m(y:)259 3286 y(FitsChan)427
-3385 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 3589 V 0 3720 a Fz(CarLin)268 b Fe(Ignore)38 b(spherical)g(rotations)
-e(on)i(CAR)h(pro)7 b(jections?)265 b Fz(CarLin)0 3918
-y Fd(Description:)44 b Fj(This)e(attribute)f(is)g(a)g(b)r(o)r(olean)g
-(v)-5 b(alue)41 b(whic)n(h)g(sp)r(eci\014es)g(ho)n(w)g(FITS)g
-Ft(")p Fj(CAR)p Ft(")g Fj(\(plate)g(carree,)i(or)227
-4018 y Ft(")p Fj(Cartesian)p Ft(")p Fj(\))23 b(pro)5
-b(jections)24 b(should)h(b)r(e)g(treated)g(when)g(reading)f(a)g(F)-7
-b(rameSet)25 b(from)g(a)f(foreign)g(enco)r(ded)h(FITS)227
-4117 y(header.)43 b(If)30 b(zero)f(\(the)h(default\),)h(it)g(is)e
-(assumed)h(that)g(the)g(CAR)g(pro)5 b(jection)29 b(conforms)f(to)i(the)
-g(con)n(v)n(en)n(tions)227 4217 y(describ)r(ed)j(in)g(the)h(FITS)f(w)n
-(orld)f(co)r(ordinate)g(system)h(\(FITS-W)n(CS\))h(pap)r(er)e(I)r(I)i
-Ft(")p Fj(Represen)n(tation)d(of)i(Celes-)227 4317 y(tial)h(Co)r
-(ordinates)e(in)h(FITS)p Ft(")h Fj(b)n(y)f(M.)g(Calabretta)g(&)g(E.W.)g
-(Greisen.)54 b(If)34 b(CarLin)e(is)h(non-zero,)h(then)g(these)227
-4416 y(con)n(v)n(en)n(tions)f(are)g(ignored,)i(and)f(it)h(is)f(assumed)
-g(that)h(the)f(mapping)h(from)f(pixel)g(co)r(ordinates)f(to)h
-(celestial)227 4516 y(co)r(ordinates)25 b(is)h(a)g(simple)g(linear)f
-(transformation)g(\(hence)h(the)h(attribute)f(name)g
-Ft(")p Fj(CarLin)p Ft(")p Fj(\).)35 b(This)26 b(is)g(appro-)227
-4616 y(priate)31 b(for)f(some)g(older)g(FITS)h(data)f(whic)n(h)h
-(claims)f(to)h(ha)n(v)n(e)f(a)g Ft(")p Fj(CAR)p Ft(")g
-Fj(pro)5 b(jection,)31 b(but)g(whic)n(h)g(in)g(fact)g(do)227
-4715 y(not)d(conform)g(to)g(the)g(con)n(v)n(en)n(tions)e(of)i(the)h
-(FITS-W)n(CS)f(pap)r(er.)38 b(F)-7 b(urthermore,)27 b(if)i(CarLin)e(is)
-h(non-zero,)e(it)j(is)227 4815 y(assumed)i(that)h(CDEL)-7
-b(T)31 b(and)h(CD)f(k)n(eyw)n(ords)f(are)g(in)i(units)g(of)f(degrees)f
-(rather)h(than)g(radians)f(\(as)i(required)227 4914 y(b)n(y)c(the)g
-(FITS-W)n(CS)f(pap)r(ers\).)227 5041 y(The)34 b(FITS-W)n(CS)g(pap)r(er)
-g(sp)r(eci\014es)g(that)g(headers)f(whic)n(h)h(include)g(a)g(CAR)g(pro)
-5 b(jection)33 b(represen)n(t)g(a)g(linear)227 5141 y(mapping)c(from)f
-(pixel)h(co)r(ordinates)e(to)h Ft(")p Fj(nativ)n(e)g(spherical)g(co)r
-(ordinates)p Ft(")p Fj(,)f(NOT)h(celestial)h(co)r(ordinates.)38
-b(An)227 5240 y(extra)30 b(mapping)g(is)h(then)g(required)f(from)g
-(nativ)n(e)g(spherical)g(to)g(celestial.)45 b(This)31
-b(mapping)f(is)h(a)f(3D)h(rotation)227 5340 y(and)e(so)f(the)h(o)n(v)n
-(erall)e(Mapping)h(from)h(pixel)f(to)h(celestial)f(co)r(ordinates)g(is)
-g(NOT)h(linear.)40 b(See)28 b(the)h(FITS-W)n(CS)227 5440
-y(pap)r(ers)e(for)g(further)h(details.)0 5593 y Fd(T)m(yp)s(e:)227
-5693 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)p eop end
-%%Page: 398 408
-TeXDict begin 398 407 bop 0 52 a FF(398)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Class)g(Applicabilit)m(y:)259 474 y(FitsChan)427 573
-y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 745 3780 12 v 0 876 a Fz(Card)528 b Fe(Index)39 b(of)f(curren)m(t)g
-(FITS)h(card)f(in)h(a)f(FitsChan)526 b Fz(Card)0 1014
-y Fd(Description:)44 b Fj(This)28 b(attribute)g(giv)n(es)f(the)h(index)
-g(of)g(the)g Ft(")p Fj(curren)n(t)p Ft(")e Fj(FITS)i(header)f(card)g
-(within)i(a)e(FitsChan,)h(the)227 1113 y(\014rst)h(card)e(ha)n(ving)h
-(an)g(index)h(of)f(1.)40 b(The)28 b(c)n(hoice)g(of)h(curren)n(t)e(card)
-h(a\013ects)h(the)g(b)r(eha)n(viour)e(of)h(functions)h(that)227
-1213 y(access)e(the)h(con)n(ten)n(ts)f(of)g(the)h(FitsChan,)g(suc)n(h)f
-(as)g(astDelFits,)h(astFindFits)g(and)f(astPutFits.)227
-1331 y(A)f(v)-5 b(alue)25 b(assigned)f(to)h(Card)f(will)h(p)r(osition)g
-(the)h(FitsChan)f(at)g(an)n(y)g(desired)f(p)r(oin)n(t,)i(so)e(that)i(a)
-f(particular)e(card)227 1430 y(within)28 b(it)g(can)f(b)r(e)h
-(accessed.)36 b(Alternativ)n(ely)-7 b(,)27 b(the)h(v)-5
-b(alue)27 b(of)h(Card)e(ma)n(y)h(b)r(e)h(enquired)f(in)h(order)e(to)i
-(determine)227 1530 y(the)g(curren)n(t)f(p)r(osition)g(of)h(a)f
-(FitsChan.)227 1647 y(The)g(default)g(v)-5 b(alue)26
-b(of)h(Card)f(is)g(1.)36 b(This)27 b(means)f(that)h(clearing)e(this)i
-(attribute)g(\(using)f(astClear\))g(e\013ectiv)n(ely)227
-1747 y Ft(")p Fj(rewinds)p Ft(")32 b Fj(the)i(FitsChan,)h(so)e(that)h
-(the)g(\014rst)f(card)g(is)g(accessed)g(next.)54 b(If)34
-b(Card)f(is)g(set)h(to)f(a)g(v)-5 b(alue)34 b(whic)n(h)227
-1847 y(exceeds)26 b(the)h(total)f(n)n(um)n(b)r(er)g(of)g(cards)g(in)g
-(the)h(FitsChan)f(\(as)g(giv)n(en)g(b)n(y)g(its)g(Ncard)g(attribute\),)
-h(it)g(is)f(regarded)227 1946 y(as)e(p)r(oin)n(ting)g(at)g(the)g
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)35 b(In)24 b(this)g(case,)g(the)h
-(v)-5 b(alue)24 b(returned)g(in)g(resp)r(onse)f(to)h(an)g(enquiry)g(is)
-g(alw)n(a)n(ys)227 2046 y(one)j(more)g(than)h(the)g(n)n(um)n(b)r(er)f
-(of)h(cards)e(in)i(the)g(FitsChan.)0 2181 y Fd(T)m(yp)s(e:)227
-2281 y Fj(In)n(teger.)0 2416 y Fd(Class)j(Applicabilit)m(y:)259
-2539 y(FitsChan)427 2638 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 2810 V 0 2941 a Fz(Class)1118 b Fe(Ob)7
-b(ject)37 b(class)i(name)1116 b Fz(Class)0 3102 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(giv)n(es)e(the)i(name)f(of)h(the)g(class)f
-(to)g(whic)n(h)h(an)f(Ob)5 b(ject)27 b(b)r(elongs.)0
-3238 y Fd(T)m(yp)s(e:)227 3337 y Fj(Character)f(string,)h(read-only)-7
-b(.)0 3473 y Fd(Class)31 b(Applicabilit)m(y:)259 3595
-y(Ob)5 b(ject)427 3695 y Fj(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 3866 V 0 3998 a
-Fz(Clean)275 b Fe(Remo)m(v)m(e)38 b(cards)g(used)h(whilst)f(reading)f
-(ev)m(en)h(if)h(an)f(error)1701 4112 y(o)s(ccurs?)3444
-3998 y Fz(Clean)0 4250 y Fd(Description:)44 b Fj(This)35
-b(attribute)h(indicates)f(whether)g(or)f(not)h(cards)f(should)h(b)r(e)g
-(remo)n(v)n(ed)f(from)g(the)i(FitsChan)f(if)227 4349
-y(an)c(error)d(o)r(ccurs)i(within)h(astRead.)45 b(A)31
-b(succesful)f(read)g(on)g(a)g(FitsChan)h(alw)n(a)n(ys)e(results)h(in)h
-(the)f(remo)n(v)-5 b(al)30 b(of)227 4449 y(the)f(cards)e(whic)n(h)h(w)n
-(ere)f(in)n(v)n(olv)n(ed)f(in)i(the)h(description)e(of)h(the)h
-(returned)e(Ob)5 b(ject.)38 b(Ho)n(w)n(ev)n(er,)26 b(in)j(the)f(ev)n
-(en)n(t)g(of)227 4549 y(an)j(error)e(during)h(the)h(read)g(\(for)f
-(instance)h(if)g(the)g(cards)f(in)h(the)h(FitsChan)f(ha)n(v)n(e)e
-(illegal)h(v)-5 b(alues,)32 b(or)e(if)h(some)227 4648
-y(required)f(cards)f(are)h(missing\))g(no)g(cards)f(will)i(b)r(e)g
-(remo)n(v)n(ed)e(from)h(the)h(FitsChan)f(if)h(the)g(Clean)f(attribute)h
-(is)227 4748 y(zero)c(\(the)h(default\).)37 b(If)28 b(Clean)f(is)h
-(non-zero)e(then)i(an)n(y)e(cards)h(whic)n(h)g(w)n(ere)g(used)g(in)h
-(the)g(ab)r(orted)f(attempt)h(to)227 4848 y(read)f(an)g(ob)5
-b(ject)28 b(will)f(b)r(e)i(remo)n(v)n(ed.)227 4965 y(This)34
-b(pro)n(vides)e(a)h(means)g(of)g Ft(")p Fj(cleaning)p
-Ft(")f Fj(a)h(FitsChan)g(of)h(W)n(CS)f(related)g(cards)f(whic)n(h)i(w)n
-(orks)e(ev)n(en)h(in)g(the)227 5065 y(ev)n(en)n(t)27
-b(of)h(the)g(cards)e(not)i(forming)f(a)g(legal)g(W)n(CS)h(description.)
-0 5200 y Fd(T)m(yp)s(e:)227 5300 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-5435 y Fd(Class)k(Applicabilit)m(y:)259 5558 y(FitsChan)427
-5657 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 399 409
-TeXDict begin 399 408 bop 3643 52 a FF(399)p 0 351 3780
-12 v 0 483 a Fz(Clip)641 490 y Fe(Clip)38 b(lines)g(and/or)f(mark)m
-(ers)g(at)h(the)h(Plot)e(b)s(oundary?)3533 483 y Fz(Clip)0
-695 y Fd(Description:)44 b Fj(This)33 b(attribute)h(con)n(trols)d
-(whether)i(curv)n(es)f(and)h(mark)n(ers)e(are)h(clipp)r(ed)i(at)e(the)i
-(b)r(oundary)e(of)h(the)227 794 y(graphics)22 b(b)r(o)n(x)g(sp)r
-(eci\014ed)h(when)f(the)h(Plot)g(w)n(as)e(created.)35
-b(A)23 b(v)-5 b(alue)22 b(of)h(3)f(implies)h(b)r(oth)g(mark)n(ers)e
-(and)h(curv)n(es)g(are)227 894 y(clipp)r(ed)27 b(at)e(the)h(Plot)f(b)r
-(oundary)-7 b(.)36 b(A)26 b(v)-5 b(alue)25 b(of)h(2)f(implies)h(mark)n
-(ers)d(are)i(clipp)r(ed,)h(but)h(not)e(curv)n(es.)35
-b(A)26 b(v)-5 b(alue)26 b(of)227 994 y(1)j(implies)g(curv)n(es)e(are)h
-(clipp)r(ed,)i(but)g(not)f(mark)n(ers.)38 b(A)30 b(v)-5
-b(alue)28 b(of)h(zero)f(implies)h(neither)g(curv)n(es)f(nor)g(mark)n
-(ers)227 1093 y(are)35 b(clipp)r(ed.)63 b(The)36 b(default)h(v)-5
-b(alue)36 b(is)g(1.)62 b(Note,)38 b(this)e(attributes)g(con)n(trols)f
-(only)h(the)g(clipping)g(p)r(erformed)227 1193 y(in)n(ternally)e
-(within)h(AST.)f(The)g(underlying)g(graphics)f(system)h(ma)n(y)f(also)g
-(apply)h(clipping.)57 b(In)34 b(suc)n(h)g(cases,)227
-1292 y(remo)n(ving)e(clipping)h(using)g(this)h(attribute)f(do)r(es)g
-(not)h(guaran)n(tee)d(that)j(no)f(clipping)g(will)h(b)r(e)f(visible)h
-(in)f(the)227 1392 y(\014nal)28 b(plot.)227 1521 y(The)i(astClip)g
-(function)g(can)f(b)r(e)h(used)g(to)f(establish)h(generalised)e
-(clipping)h(within)i(arbitrary)c(regions)i(of)g(the)227
-1621 y(Plot.)0 1780 y Fd(T)m(yp)s(e:)227 1880 y Fj(In)n(teger.)0
-2039 y Fd(Class)i(Applicabilit)m(y:)259 2185 y(Plot)427
-2285 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2493 V 0 2625 a Fz(ClipOp)175 b Fe(Com)m(bine)37 b(Plot)g(clipping)g
-(limits)g(using)h(a)h(b)s(o)s(olean)e(OR?)175 b Fz(ClipOp)0
-2828 y Fd(Description:)44 b Fj(This)27 b(attribute)g(con)n(trols)e(ho)n
-(w)h(the)h(clipping)g(limits)g(sp)r(eci\014ed)g(for)g(eac)n(h)e(axis)h
-(of)h(a)f(Plot)h(\(using)f(the)227 2928 y(astClip)g(function\))h(are)e
-(com)n(bined.)36 b(This,)26 b(in)h(turn,)f(determines)g(whic)n(h)g
-(parts)f(of)h(the)g(graphical)f(output)h(will)227 3027
-y(b)r(e)i(visible.)227 3157 y(If)f(the)g(ClipOp)f(attribute)h(of)g(a)f
-(Plot)g(is)g(zero)f(\(the)i(default\),)h(graphical)d(output)i(is)f
-(visible)g(only)h(if)g(it)f(satis\014es)227 3256 y(the)h(clipping)g
-(limits)g(on)f(all)g(the)h(axes)f(of)g(the)h(clipping)g(F)-7
-b(rame)26 b(\(a)g(b)r(o)r(olean)g(AND\).)i(Otherwise,)e(if)h(ClipOp)g
-(is)227 3356 y(non-zero,)f(output)i(is)g(visible)f(if)h(it)g
-(satis\014es)f(the)h(clipping)g(limits)g(on)f(one)g(or)g(more)g(axes)g
-(\(a)g(b)r(o)r(olean)g(OR\).)227 3485 y(An)g(imp)r(ortan)n(t)f(use)g
-(of)g(this)h(attribute)f(is)g(to)g(allo)n(w)f(areas)g(of)h(a)g(Plot)f
-(to)h(b)r(e)h(left)g(clear)e(\(e.g.)36 b(as)26 b(a)g(bac)n(kground)227
-3585 y(for)f(some)f(text\).)36 b(T)-7 b(o)25 b(ac)n(hiev)n(e)e(this,)j
-(the)f(lo)n(w)n(er)f(and)g(upp)r(er)h(clipping)g(b)r(ounds)g(supplied)g
-(to)g(astClip)g(should)f(b)r(e)227 3685 y(rev)n(ersed,)i(and)i(the)g
-(ClipOp)f(attribute)h(of)f(the)h(Plot)f(should)h(b)r(e)g(set)f(to)h(a)f
-(non-zero)f(v)-5 b(alue.)0 3844 y Fd(T)m(yp)s(e:)227
-3943 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 4102 y
-Fd(Class)k(Applicabilit)m(y:)259 4249 y(Plot)427 4348
-y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)p 0
-4557 V 0 4689 a Fz(Closed)176 b Fe(Should)38 b(the)g(b)s(oundary)g(b)s
-(e)i(considered)e(to)g(b)s(e)h(inside)f(the)1706 4803
-y(region?)3389 4689 y Fz(Closed)0 5002 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(con)n(trols)e(whether)i(p)r(oin)n(ts)f(on)g
-(the)i(b)r(oundary)d(of)i(a)f(Region)g(are)g(considered)g(to)g(b)r(e)
-227 5101 y(inside)c(or)f(outside)h(the)g(region.)34 b(If)24
-b(the)f(attribute)g(v)-5 b(alue)23 b(is)f(non-zero)g(\(the)h
-(default\),)i(p)r(oin)n(ts)e(on)f(the)h(b)r(oundary)227
-5201 y(are)29 b(considered)g(to)h(b)r(e)h(inside)f(the)g(region)f
-(\(that)i(is,)f(the)h(Region)e(is)h Ft(")p Fj(closed)p
-Ft(")p Fj(\).)43 b(Ho)n(w)n(ev)n(er,)28 b(if)j(the)f(attribute)227
-5301 y(v)-5 b(alue)28 b(is)f(zero,)g(p)r(oin)n(ts)g(on)h(the)g(b)r
-(ounary)e(are)h(considered)f(to)i(b)r(e)g(outside)f(the)h(region.)0
-5460 y Fd(T)m(yp)s(e:)227 5559 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-5718 y Fd(Class)k(Applicabilit)m(y:)p eop end
-%%Page: 400 410
-TeXDict begin 400 409 bop 0 52 a FF(400)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(Region)427 451 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 585 y Fd(P)m(oin)m(tList)427 685 y Fj(The)f(v)-5
-b(alue)26 b(of)g(the)h(Closed)e(attribute)i(is)f(ignored)f(b)n(y)h(P)n
-(oin)n(tList)g(regions.)34 b(If)27 b(the)g(P)n(oin)n(tList)e(region)g
-(has)427 784 y(not)32 b(b)r(een)g(negated,)h(then)f(it)g(is)g(alw)n(a)n
-(ys)e(assumed)h(to)g(b)r(e)i(closed.)48 b(If)33 b(the)f(P)n(oin)n
-(tList)e(region)h(has)g(b)r(een)427 884 y(negated,)24
-b(then)h(it)f(is)f(alw)n(a)n(ys)f(assumed)h(to)h(b)r(e)g(op)r(en.)36
-b(This)23 b(is)h(required)f(since)g(p)r(oin)n(ts)h(ha)n(v)n(e)f(zero)f
-(v)n(olume)427 984 y(and)28 b(therefore)e(consist)h(en)n(tirely)g(of)h
-(b)r(oundary)-7 b(.)259 1118 y Fd(CmpRegion)427 1217
-y Fj(The)27 b(default)g(Closed)e(v)-5 b(alue)27 b(for)f(a)g(CmpRegion)g
-(is)g(the)h(Closed)f(v)-5 b(alue)26 b(of)g(its)h(\014rst)f(comp)r(onen)
-n(t)g(Region.)259 1351 y Fd(Stc)427 1451 y Fj(The)i(default)g(Closed)f
-(v)-5 b(alue)27 b(for)g(an)h(Stc)g(is)f(the)h(Closed)f(v)-5
-b(alue)28 b(of)f(its)h(encapsulated)f(Region.)p 0 1653
-3780 12 v 0 1791 a Fz(Colour\(elemen)l(t\))1294 1784
-y Fe(Colour)37 b(index)h(for)g(a)g(Plot)1693 1884 y(elemen)m(t)2819
-1791 y Fz(Colour\(elemen)l(t\))0 2052 y Fd(Description:)44
-b Fj(This)29 b(attribute)f(determines)g(the)h(colour)e(index)h(used)g
-(when)g(dra)n(wing)f(eac)n(h)h(elemen)n(t)g(of)g(graphical)227
-2152 y(output)21 b(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-2251 y(the)25 b(setting)g Ft(")p Fj(Colour\(title\)=2)p
-Ft(")d Fj(causes)i(the)h(Plot)f(title)h(to)f(b)r(e)h(dra)n(wn)f(using)g
-(colour)f(index)i(2.)35 b(The)25 b(synon)n(ym)227 2351
-y Ft(")p Fj(Color)p Ft(")h Fj(ma)n(y)h(also)f(b)r(e)i(used.)227
-2477 y(The)d(range)f(of)h(in)n(teger)g(colour)f(indices)h(a)n(v)-5
-b(ailable)24 b(and)h(their)g(app)r(earance)e(is)i(determined)h(b)n(y)f
-(the)g(underlying)227 2577 y(graphics)g(system.)36 b(The)26
-b(default)h(b)r(eha)n(viour)e(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)g(b)r(e)h(dra)n(wn)e(using)h(the)g(default)227 2676
-y(colour)e(index)g(supplied)h(b)n(y)f(this)h(graphics)e(system)i
-(\(normally)-7 b(,)24 b(this)h(is)g(lik)n(ely)f(to)g(result)g(in)h
-(white)g(plotting)g(on)227 2776 y(a)i(blac)n(k)g(bac)n(kground,)f(or)h
-(vice)g(v)n(ersa\).)0 2928 y Fd(T)m(yp)s(e:)227 3027
-y Fj(In)n(teger.)0 3179 y Fd(Class)k(Applicabilit)m(y:)259
-3318 y(Plot)427 3418 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 3582 y Fd(Notes:)340 3868 y Fi(\017)45 b Fj(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-4002 y Fi(\017)45 b Fj(If)31 b(no)e(graphical)g(elemen)n(t)h(is)g(sp)r
-(eci\014ed,)h(\(e.g.)44 b Ft(")p Fj(Colour)p Ft(")28
-b Fj(instead)h(of)h Ft(")p Fj(Colour\(title\))p Ft(")p
-Fj(\),)g(then)h(a)e Ft(")p Fj(set)p Ft(")427 4101 y Fj(or)d
-Ft(")p Fj(clear)p Ft(")f Fj(op)r(eration)h(will)g(a\013ect)h(the)g
-(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n(ts,)i
-(while)g(a)f Ft(")p Fj(get)p Ft(")f Fj(or)427 4201 y
-Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)g(will)h(use)f(just)h(the)g
-(Colour\(T)-7 b(extLab\))27 b(v)-5 b(alue.)p 0 4403 V
-0 4533 a Fz(Commen)l(t)940 4534 y Fe(Include)39 b(textual)e(commen)m
-(ts)g(in)i(output?)3206 4533 y Fz(Commen)l(t)0 4726 y
-Fd(Description:)44 b Fj(This)30 b(is)f(a)h(b)r(o)r(olean)f(attribute)g
-(whic)n(h)h(con)n(trols)e(whether)h(textual)h(commen)n(ts)f(are)g(to)g
-(b)r(e)h(included)227 4825 y(in)j(the)g(output)g(generated)f(b)n(y)g(a)
-g(Channel.)52 b(If)33 b(included,)i(they)e(will)g(describ)r(e)f(what)g
-(eac)n(h)g(item)h(of)g(output)227 4925 y(represen)n(ts.)227
-5051 y(If)28 b(Commen)n(t)g(is)f(non-zero,)f(then)i(commen)n(ts)g(will)
-f(b)r(e)h(included.)38 b(If)28 b(it)g(is)f(zero,)g(commen)n(ts)g(will)h
-(b)r(e)g(omitted.)0 5203 y Fd(T)m(yp)s(e:)227 5302 y
-Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 5454 y Fd(Class)k(Applicabilit)m
-(y:)259 5593 y(Channel)427 5693 y Fj(The)d(default)g(v)-5
-b(alue)27 b(is)h(non-zero)e(for)h(a)g(normal)g(Channel.)p
-eop end
-%%Page: 401 411
-TeXDict begin 401 410 bop 3643 52 a FF(401)259 351 y
-Fd(FitsChan)427 451 y Fj(The)28 b(default)g(v)-5 b(alue)27
-b(is)h(non-zero)e(for)h(a)g(FitsChan.)259 585 y Fd(XmlChan)427
-685 y Fj(The)h(default)g(v)-5 b(alue)27 b(is)h(zero)e(for)i(an)f
-(XmlChan.)p 0 887 3780 12 v 0 1017 a Fz(Curren)l(t)1108
-1018 y Fe(F)-10 b(rameSet)38 b(curren)m(t)f(F)-10 b(rame)38
-b(index)3313 1017 y Fz(Curren)l(t)0 1187 y Fd(Description:)44
-b Fj(This)38 b(attribute)g(giv)n(es)f(the)h(index)g(of)g(the)g(F)-7
-b(rame)37 b(whic)n(h)h(is)g(to)g(b)r(e)g(regarded)e(as)h(the)h
-Ft(")p Fj(curren)n(t)p Ft(")227 1286 y Fj(F)-7 b(rame)37
-b(within)g(a)g(F)-7 b(rameSet.)65 b(The)37 b(default)g(is)g(the)h(most)
-e(recen)n(t)h(F)-7 b(rame)36 b(added)h(to)g(the)g(F)-7
-b(rameSet)37 b(\(this)227 1386 y(F)-7 b(rame)27 b(alw)n(a)n(ys)f(has)h
-(an)g(index)h(equal)f(to)h(the)g(F)-7 b(rameSet's)27
-b(Nframe)g(attribute\).)0 1538 y Fd(T)m(yp)s(e:)227 1638
-y Fj(In)n(teger.)0 1790 y Fd(Class)k(Applicabilit)m(y:)259
-1929 y(F)-8 b(rameSet)427 2029 y Fj(All)28 b(F)-7 b(rameSets)27
-b(ha)n(v)n(e)g(this)h(attribute.)0 2193 y Fd(Notes:)340
-2479 y Fi(\017)45 b Fj(In)n(v)n(erting)29 b(a)g(F)-7
-b(rameSet)29 b(\(in)n(v)n(erting)g(the)h(b)r(o)r(olean)f(sense)g(of)h
-(its)g(In)n(v)n(ert)e(attribute,)j(with)f(the)g(astIn)n(v)n(ert)427
-2578 y(function)e(for)g(example\))f(will)h(in)n(terc)n(hange)e(the)i(v)
--5 b(alues)27 b(of)h(its)f(Base)g(and)g(Curren)n(t)g(attributes.)p
-0 2780 V 0 2911 a Fz(DSBCen)l(tre)849 2912 y Fe(The)38
-b(cen)m(tral)f(p)s(osition)g(of)i(in)m(terest)e(in)h(a)h(dual)1409
-3026 y(sideband)g(sp)s(ectrum)3108 2911 y Fz(DSBCen)l(tre)0
-3218 y Fd(Description:)44 b Fj(This)31 b(attribute)h(sp)r(eci\014es)e
-(the)i(cen)n(tral)e(p)r(osition)h(of)g(in)n(terest)f(in)i(a)e(dual)h
-(sideband)g(sp)r(ectrum.)48 b(Its)227 3318 y(sole)33
-b(use)g(is)g(to)g(determine)g(the)h(lo)r(cal)e(oscillator)g(frequency)g
-(\(the)i(frequency)f(whic)n(h)g(marks)f(the)h(b)r(oundary)227
-3417 y(b)r(et)n(w)n(een)f(the)h(lo)n(w)n(er)e(and)h(upp)r(er)g
-(sidebands\).)50 b(See)32 b(the)h(description)f(of)g(the)g(IF)h(\(in)n
-(termediate)f(frequency\))227 3517 y(attribute)21 b(for)g(details)f(of)
-h(ho)n(w)f(the)h(lo)r(cal)g(oscillator)e(frequency)h(is)h(calculated.)
-34 b(The)21 b(sideband)f(con)n(taining)g(this)227 3617
-y(cen)n(tral)28 b(p)r(osition)g(is)g(referred)g(to)g(as)g(the)h
-Ft(")p Fj(observ)n(ed)p Ft(")d Fj(sideband,)i(and)h(the)f(other)g
-(sideband)h(as)e(the)i Ft(")p Fj(image)p Ft(")227 3716
-y Fj(sideband.)227 3842 y(The)c(v)-5 b(alue)25 b(is)g(accessed)f(as)g
-(a)h(p)r(osition)g(in)g(the)h(sp)r(ectral)e(system)h(represen)n(ted)f
-(b)n(y)g(the)i(Sp)r(ecF)-7 b(rame)25 b(attributes)227
-3942 y(inherited)40 b(b)n(y)f(this)h(class,)h(but)f(is)f(stored)g(in)n
-(ternally)f(as)h(top)r(o)r(cen)n(tric)g(frequency)-7
-b(.)72 b(Th)n(us,)42 b(if)e(the)f(System)227 4041 y(attribute)30
-b(of)g(the)h(DSBSp)r(ecF)-7 b(rame)30 b(is)g(set)g(to)g
-Ft(")p Fj(VRAD)p Ft(")p Fj(,)h(the)f(Unit)h(attribute)f(set)g(to)g
-Ft(")p Fj(m/s)p Ft(")f Fj(and)h(the)g(Std-)227 4141 y(OfRest)i
-(attribute)f(set)h(to)f Ft(")p Fj(LSRK)p Ft(")p Fj(,)g(then)h(v)-5
-b(alues)31 b(for)g(the)h(DSBCen)n(tre)f(attribute)h(should)f(b)r(e)h
-(supplied)f(as)227 4241 y(radio)e(v)n(elo)r(cit)n(y)h(in)g(units)h(of)f
-Ft(")p Fj(m/s)p Ft(")f Fj(relativ)n(e)g(to)h(the)h(kinematic)f(LSR)h
-(\(alternativ)n(e)e(units)h(ma)n(y)g(b)r(e)h(used)f(b)n(y)227
-4340 y(app)r(ending)24 b(a)g(suitable)g(units)g(string)f(to)h(the)g
-(end)h(of)e(the)i(v)-5 b(alue\).)36 b(This)23 b(v)-5
-b(alue)24 b(is)g(then)h(con)n(v)n(erted)d(to)i(top)r(o)r(cen-)227
-4440 y(tric)33 b(frequency)f(and)h(stored.)51 b(If)33
-b(\(sa)n(y\))g(the)g(Unit)g(attribute)g(is)g(subsequen)n(tly)f(c)n
-(hanged)g(to)h Ft(")p Fj(km/s)p Ft(")e Fj(b)r(efore)227
-4539 y(retrieving)e(the)i(curren)n(t)e(v)-5 b(alue)30
-b(of)g(the)g(DSBCen)n(tre)g(attribute,)h(the)f(stored)g(top)r(o)r(cen)n
-(tric)f(frequency)h(will)g(b)r(e)227 4639 y(con)n(v)n(erted)c(bac)n(k)h
-(to)h(LSRK)f(radio)f(v)n(elo)r(cit)n(y)-7 b(,)27 b(this)h(time)g(in)g
-(units)g(of)g Ft(")p Fj(km/s)p Ft(")p Fj(,)e(b)r(efore)h(b)r(eing)h
-(returned.)227 4765 y(The)g(default)g(v)-5 b(alue)27
-b(for)h(this)f(attribute)h(is)g(30)e(GHz.)0 4917 y Fd(T)m(yp)s(e:)227
-5017 y Fj(Floating)h(p)r(oin)n(t.)0 5169 y Fd(Class)k(Applicabilit)m
-(y:)259 5308 y(DSBSp)s(ecF)-8 b(rame)427 5408 y Fj(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)-2
-5572 y Fd(Note)n(:)p eop end
-%%Page: 402 412
-TeXDict begin 402 411 bop 0 52 a FF(402)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fi(\017)45 b Fj(The)32 b(attributes)g(whic)n(h)g(de\014ne)g(the)g
-(transformation)e(to)i(or)f(from)h(top)r(o)r(cen)n(tric)f(frequency)h
-(should)f(b)r(e)427 451 y(assigned)19 b(their)h(correct)f(v)-5
-b(alues)20 b(b)r(efore)g(accessing)e(this)j(attribute.)34
-b(These)20 b(p)r(oten)n(tially)g(include)g(System,)427
-551 y(Unit,)29 b(StdOfRest,)f(ObsLon,)f(ObsLat,)g(ObsAlt,)g(Ep)r(o)r(c)
-n(h,)h(RefRA,)g(RefDec)g(and)g(RestF)-7 b(req.)p 0 763
-3780 12 v 0 894 a Fz(DefB1950)598 b Fe(Use)39 b(FK4)g(B1950)e(as)i
-(defaults?)595 b Fz(DefB1950)0 1073 y Fd(Description:)44
-b Fj(This)34 b(attribute)g(is)g(a)f(b)r(o)r(olean)h(v)-5
-b(alue)33 b(whic)n(h)h(sp)r(eci\014es)g(a)f(default)h(equino)n(x)f(and)
-h(reference)f(frame)227 1172 y(to)d(use)g(when)g(reading)f(a)h(F)-7
-b(rameSet)30 b(from)f(a)h(FitsChan)g(with)h(a)e(foreign)h(\(i.e.)44
-b(non-nativ)n(e\))29 b(enco)r(ding.)44 b(It)31 b(is)227
-1272 y(only)g(used)f(if)i(the)f(FITS)g(header)f(con)n(tains)g(RA)h(and)
-g(DEC)g(axes)f(but)h(con)n(tains)f(no)g(information)g(ab)r(out)h(the)
-227 1372 y(reference)f(frame)g(or)g(equino)n(x.)46 b(If)31
-b(this)g(is)g(the)g(case,)f(then)i(v)-5 b(alues)30 b(of)h(FK4)f(and)g
-(B1950)f(are)h(assumed)g(if)h(the)227 1471 y(DefB1950)g(attribute)i
-(has)f(a)g(non-zero)f(v)-5 b(alue)33 b(and)f(ICRS)h(is)f(assumed)g(if)h
-(DefB1950)e(is)i(zero.)51 b(The)32 b(default)227 1571
-y(v)-5 b(alue)29 b(for)g(DefB1950)f(dep)r(ends)i(on)f(the)g(v)-5
-b(alue)29 b(of)h(the)f(Enco)r(ding)g(attribute:)40 b(for)29
-b(FITS-W)n(CS)g(enco)r(ding)g(the)227 1670 y(default)f(is)g(zero,)e
-(and)i(for)f(all)g(other)g(enco)r(dings)g(it)h(is)g(one.)0
-1833 y Fd(T)m(yp)s(e:)227 1932 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-2095 y Fd(Class)k(Applicabilit)m(y:)259 2244 y(FitsChan)427
-2343 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2555 V 0 2694 a Fz(Digits/Digits\(axis\))1390 2687
-y Fe(Num)m(b)s(er)38 b(of)h(digits)e(of)1665 2798 y(precision)2680
-2694 y Fz(Digits/Digits\(axis\))0 3000 y Fd(Description:)44
-b Fj(This)26 b(attribute)g(sp)r(eci\014es)f(ho)n(w)g(man)n(y)g(digits)h
-(of)f(precision)g(are)f(required)h(b)n(y)g(default)h(when)g(a)f(co)r
-(or-)227 3099 y(dinate)k(v)-5 b(alue)29 b(is)g(formatted)f(for)h(a)f(F)
--7 b(rame)28 b(axis)h(\(e.g.)40 b(using)29 b(astF)-7
-b(ormat\).)39 b(Its)29 b(v)-5 b(alue)29 b(ma)n(y)f(b)r(e)i(set)e
-(either)h(for)227 3199 y(a)g(F)-7 b(rame)29 b(as)g(a)g(whole,)h(or)f
-(\(b)n(y)g(subscripting)g(the)h(attribute)g(name)f(with)h(the)g(n)n(um)
-n(b)r(er)g(of)f(an)g(axis\))g(for)g(eac)n(h)227 3299
-y(axis)h(individually)-7 b(.)45 b(An)n(y)30 b(v)-5 b(alue)31
-b(set)f(for)g(an)g(individual)g(axis)g(will)g(o)n(v)n(er-ride)e(the)j
-(v)-5 b(alue)30 b(for)g(the)h(F)-7 b(rame)29 b(as)h(a)227
-3398 y(whole.)227 3529 y(Note)d(that)f(the)h(Digits)g(v)-5
-b(alue)26 b(acts)g(only)g(as)g(a)g(means)g(of)g(determining)g(a)g
-(default)h(F)-7 b(ormat)26 b(string.)36 b(Its)26 b(e\013ects)227
-3629 y(are)32 b(o)n(v)n(er-ridden)f(if)i(a)g(F)-7 b(ormat)32
-b(string)g(is)h(set)g(explicitly)g(for)f(an)g(axis.)52
-b(Ho)n(w)n(ev)n(er,)33 b(if)g(the)g(F)-7 b(ormat)32 b(attribute)227
-3728 y(sp)r(eci\014es)37 b(the)g(precision)f(using)g(the)h(string)f
-Ft(")p Fj(.)p Fi(\003)p Ft(")p Fj(,)i(then)f(the)g(Digits)g(attribute)g
-(is)f(used)h(to)f(determine)h(the)227 3828 y(n)n(um)n(b)r(er)28
-b(of)f(decimal)h(places)e(to)i(pro)r(duce.)0 3990 y Fd(T)m(yp)s(e:)227
-4090 y Fj(In)n(teger.)0 4252 y Fd(Class)j(Applicabilit)m(y:)259
-4401 y(F)-8 b(rame)427 4501 y Fj(The)30 b(default)f(Digits)h(v)-5
-b(alue)29 b(supplied)h(b)n(y)f(the)g(F)-7 b(rame)29 b(class)f(is)i(7.)
-41 b(If)30 b(a)f(v)-5 b(alue)29 b(less)g(than)g(1)g(is)g(supplied,)427
-4601 y(then)f(1)g(is)f(used)h(instead.)259 4740 y Fd(F)-8
-b(rameSet)427 4839 y Fj(The)23 b(Digits)f(attribute)g(of)h(a)f(F)-7
-b(rameSet)22 b(\(or)f(one)h(of)g(its)h(axes\))e(is)i(the)f(same)g(as)g
-(that)g(of)g(its)h(curren)n(t)e(F)-7 b(rame)427 4939
-y(\(as)27 b(sp)r(eci\014ed)h(b)n(y)g(the)g(Curren)n(t)e(attribute\).)
-259 5078 y Fd(Plot)427 5178 y Fj(The)34 b(default)h(Digits)f(v)-5
-b(alue)33 b(used)h(b)n(y)g(the)g(Plot)g(class)f(when)h(dra)n(wing)e
-(annotated)i(axis)f(lab)r(els)g(is)h(the)427 5278 y(smallest)27
-b(v)-5 b(alue)28 b(whic)n(h)f(results)h(in)f(all)h(adjacen)n(t)f(lab)r
-(els)g(b)r(eing)h(distinct.)259 5417 y Fd(TimeF)-8 b(rame)427
-5516 y Fj(The)27 b(Digits)f(attribute)g(is)g(ignored)f(when)i(a)e
-(TimeF)-7 b(rame)26 b(formats)f(a)h(v)-5 b(alue)26 b(as)g(a)g(date)g
-(and)g(time)g(string)427 5616 y(\(see)i(the)g(F)-7 b(ormat)27
-b(attribute\).)p eop end
-%%Page: 403 413
-TeXDict begin 403 412 bop 3643 52 a FF(403)p 0 351 3780
-12 v 0 490 a Fz(Direction\(axis\))1173 483 y Fe(Displa)m(y)38
-b(axis)g(in)g(con)m(v)m(en)m(tional)1638 598 y(direction?)2900
-490 y Fz(Direction\(axis\))0 749 y Fd(Description:)44
-b Fj(This)c(attribute)g(is)g(a)f(b)r(o)r(olean)g(v)-5
-b(alue)40 b(whic)n(h)g(suggests)e(ho)n(w)h(the)h(axes)f(of)h(a)f(F)-7
-b(rame)40 b(should)f(b)r(e)227 849 y(displa)n(y)n(ed)28
-b(\(e.g.\))39 b(in)29 b(graphical)e(output.)40 b(By)28
-b(default,)h(it)g(has)f(the)h(v)-5 b(alue)28 b(one,)g(indicating)g
-(that)h(they)g(should)227 948 y(b)r(e)f(sho)n(wn)g(in)g(the)g(con)n(v)n
-(en)n(tional)e(sense)h(\(increasing)g(left)h(to)g(righ)n(t)f(for)g(an)h
-(abscissa,)e(and)i(b)r(ottom)g(to)f(top)h(for)227 1048
-y(an)d(ordinate\).)36 b(If)25 b(set)h(to)f(zero,)f(this)i(attribute)f
-(indicates)g(that)h(the)f(direction)g(should)g(b)r(e)h(rev)n(ersed,)e
-(as)g(w)n(ould)227 1148 y(often)k(b)r(e)g(done)f(for)h(an)f
-(astronomical)e(magnitude)j(or)f(a)g(righ)n(t)g(ascension)f(axis.)0
-1290 y Fd(T)m(yp)s(e:)227 1390 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0
-1532 y Fd(Class)k(Applicabilit)m(y:)259 1662 y(F)-8 b(rame)427
-1761 y Fj(The)29 b(default)g(Direction)f(v)-5 b(alue)28
-b(supplied)h(b)n(y)f(the)h(F)-7 b(rame)27 b(class)h(is)g(1,)g
-(indicating)h(that)f(all)g(axes)g(should)427 1861 y(b)r(e)g(displa)n(y)
-n(ed)f(in)h(the)g(con)n(v)n(en)n(tional)d(direction.)259
-1987 y Fd(SkyF)-8 b(rame)427 2087 y Fj(The)31 b(SkyF)-7
-b(rame)30 b(class)f(re-de\014nes)h(the)h(default)g(Direction)g(v)-5
-b(alue)30 b(to)h(suggest)e(that)i(certain)f(axes)g(\(e.g.)427
-2186 y(righ)n(t)d(ascension\))g(should)g(b)r(e)h(plotted)g(in)g(rev)n
-(erse)e(when)h(appropriate.)259 2312 y Fd(F)-8 b(rameSet)427
-2412 y Fj(The)40 b(Direction)f(attribute)g(of)h(a)e(F)-7
-b(rameSet)40 b(axis)e(is)h(the)h(same)f(as)f(that)i(of)f(its)h(curren)n
-(t)e(F)-7 b(rame)39 b(\(as)427 2511 y(sp)r(eci\014ed)28
-b(b)n(y)f(the)h(Curren)n(t)f(attribute\).)259 2637 y
-Fd(Plot)427 2737 y Fj(The)33 b(Direction)g(attribute)f(of)h(the)g(base)
-f(F)-7 b(rame)32 b(in)h(a)g(Plot)f(is)g(set)h(to)g(indicate)f(the)h
-(sense)g(of)f(the)h(t)n(w)n(o)427 2837 y(graphics)23
-b(axes,)i(as)f(implied)h(b)n(y)f(the)h(graphics)e(b)r(ounding)i(b)r(o)n
-(x)f(supplied)h(when)g(the)g(Plot)f(w)n(as)f(created.)0
-2992 y Fd(Notes:)340 3267 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f
-(this)h(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f
-(with)g(the)h(n)n(um)n(b)r(er)f(of)g(the)427 3367 y(F)-7
-b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h(applies.)340
-3493 y Fi(\017)45 b Fj(The)32 b(Direction)f(attribute)h(do)r(es)f(not)h
-(directly)f(a\013ect)h(the)g(b)r(eha)n(viour)f(of)g(the)h(AST)g
-(library)-7 b(.)48 b(Instead,)427 3592 y(it)28 b(serv)n(es)d(as)h(a)h
-(hin)n(t)g(to)g(applications)e(programs)g(ab)r(out)i(the)g(orien)n
-(tation)f(in)h(whic)n(h)g(they)g(ma)n(y)f(wish)h(to)427
-3692 y(displa)n(y)h(an)n(y)f(data)h(asso)r(ciated)e(with)j(the)f(F)-7
-b(rame.)38 b(Applications)28 b(are)f(free)h(to)g(ignore)f(this)h(hin)n
-(t)h(if)f(they)427 3791 y(wish.)p 0 3977 V 0 4109 a Fz(Disco)664
-4115 y Fe(PcdMap)39 b(pincushion/barrel)c(distortion)h(co)s(e\016cien)m
-(t)3459 4109 y Fz(Disco)0 4301 y Fd(Description:)44 b
-Fj(This)37 b(attribute)f(sp)r(eci\014es)g(the)h(pincushion/barrel)d
-(distortion)h(co)r(e\016cien)n(t)h(used)h(b)n(y)e(a)h(PcdMap.)227
-4401 y(This)29 b(co)r(e\016cien)n(t)h(is)f(set)g(when)g(the)h(PcdMap)e
-(is)i(created,)e(but)i(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)42
-b(If)30 b(the)f(attribute)h(is)227 4501 y(cleared,)k(its)f(default)h(v)
--5 b(alue)33 b(is)g(zero,)g(whic)n(h)g(giv)n(es)f(no)h(distortion.)53
-b(F)-7 b(or)32 b(pincushion)h(distortion,)h(the)g(v)-5
-b(alue)227 4600 y(should)28 b(b)r(e)g(p)r(ositiv)n(e.)36
-b(F)-7 b(or)27 b(barrel)f(distortion,)h(it)h(should)g(b)r(e)g(negativ)n
-(e.)227 4721 y(Note)23 b(that)g(the)g(forw)n(ard)d(transformation)h(of)
-i(a)f(PcdMap)g(applies)g(the)h(distortion)f(sp)r(eci\014ed)g(b)n(y)h
-(this)f(attribute)227 4821 y(and)h(the)f(in)n(v)n(erse)f
-(transformation)g(remo)n(v)n(es)g(this)h(distortion.)35
-b(If)23 b(the)f(PcdMap)g(is)h(in)n(v)n(erted)e(\(e.g.)35
-b(using)22 b(astIn-)227 4921 y(v)n(ert\),)32 b(then)f(the)h(forw)n(ard)
-d(transformation)h(will)h(remo)n(v)n(e)e(the)j(distortion)e(and)h(the)h
-(in)n(v)n(erse)d(transformation)227 5020 y(will)f(apply)f(it.)38
-b(The)27 b(distortion)g(itself)h(will)g(still)g(b)r(e)g(giv)n(en)f(b)n
-(y)g(the)h(same)f(v)-5 b(alue)28 b(of)f(Disco.)0 5163
-y Fd(T)m(yp)s(e:)227 5262 y Fj(Double)h(precision.)0
-5405 y Fd(Class)j(Applicabilit)m(y:)259 5534 y(PcdMap)427
-5634 y Fj(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i(attribute.)p
-eop end
-%%Page: 404 414
-TeXDict begin 404 413 bop 0 52 a FF(404)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Domain)744 b Fe(Co)s(ordinate)36
-b(system)i(domain)742 b Fz(Domain)0 662 y Fd(Description:)44
-b Fj(This)36 b(attribute)f(con)n(tains)g(a)g(string)g(whic)n(h)g(iden)n
-(ti\014es)h(the)g(ph)n(ysical)e(domain)h(of)h(the)g(co)r(ordinate)227
-762 y(system)28 b(that)g(a)f(F)-7 b(rame)27 b(describ)r(es.)227
-884 y(The)h(Domain)g(attribute)g(also)f(con)n(trols)g(ho)n(w)g(a)g(F)-7
-b(rame)28 b(b)r(eha)n(v)n(es)f(when)h(it)g(is)g(used)g(\(b)n(y)g
-(astFindF)-7 b(rame\))28 b(as)f(a)227 983 y(template)i(to)g(matc)n(h)f
-(another)g(\(target\))g(F)-7 b(rame.)39 b(It)29 b(do)r(es)f(this)h(b)n
-(y)g(sp)r(ecifying)f(the)h(Domain)g(that)g(the)g(target)227
-1083 y(F)-7 b(rame)32 b(should)g(ha)n(v)n(e)g(in)h(order)e(to)h(matc)n
-(h)g(the)h(template.)52 b(If)33 b(the)g(Domain)f(v)-5
-b(alue)33 b(in)f(the)h(template)g(F)-7 b(rame)227 1182
-y(is)31 b(set,)g(then)g(only)f(targets)f(with)i(the)g(same)e(Domain)i
-(v)-5 b(alue)30 b(will)h(b)r(e)f(matc)n(hed.)46 b(If)30
-b(the)h(template's)g(Domain)227 1282 y(v)-5 b(alue)28
-b(is)f(not)h(set,)f(ho)n(w)n(ev)n(er,)f(then)i(the)g(target's)f(Domain)
-g(will)h(b)r(e)g(ignored.)0 1427 y Fd(T)m(yp)s(e:)227
-1526 y Fj(String.)0 1671 y Fd(Class)j(Applicabilit)m(y:)259
-1802 y(F)-8 b(rame)427 1902 y Fj(The)28 b(default)g(Domain)f(v)-5
-b(alue)28 b(supplied)g(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h
-(empt)n(y)f(string.)259 2030 y Fd(SkyF)-8 b(rame)427
-2129 y Fj(The)28 b(SkyF)-7 b(rame)27 b(class)f(re-de\014nes)h(the)h
-(default)g(Domain)g(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p
-Fj(SKY)p Ft(")p Fj(.)259 2257 y Fd(CmpF)-8 b(rame)427
-2357 y Fj(The)43 b(CmpF)-7 b(rame)42 b(class)f(re-de\014nes)g(the)i
-(default)g(Domain)f(v)-5 b(alue)42 b(to)g(b)r(e)h(of)f(the)h(form)f
-Ft(")p Fl(<)p Fj(dom1)p Fl(>)p Fj(-)427 2456 y Fl(<)p
-Fj(dom2)p Fl(>)p Ft(")p Fj(,)35 b(where)g Fl(<)p Fj(dom1)p
-Fl(>)e Fj(and)i Fl(<)p Fj(dom2)p Fl(>)e Fj(are)h(the)i(Domains)e(of)h
-(the)g(t)n(w)n(o)g(comp)r(onen)n(t)f(F)-7 b(rames.)427
-2556 y(If)39 b(b)r(oth)g(these)g(Domains)f(are)g(blank,)j(then)e(the)g
-(string)f Ft(")p Fj(CMP)p Ft(")g Fj(is)g(used)h(as)f(the)h(default)g
-(Domain)427 2656 y(name.)259 2784 y Fd(F)-8 b(rameSet)427
-2883 y Fj(The)25 b(Domain)g(attribute)h(of)f(a)f(F)-7
-b(rameSet)25 b(is)g(the)h(same)e(as)g(that)i(of)f(its)g(curren)n(t)f(F)
--7 b(rame)25 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427 2983
-y(the)j(Curren)n(t)f(attribute\).)259 3111 y Fd(Sp)s(ecF)-8
-b(rame)427 3210 y Fj(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g
-(re-de\014nes)g(the)h(default)g(Domain)f(v)-5 b(alue)28
-b(to)f(b)r(e)h Ft(")p Fj(SPECTR)n(UM)p Ft(")p Fj(.)259
-3338 y Fd(DSBSp)s(ecF)-8 b(rame)427 3438 y Fj(The)28
-b(DSBSp)r(ecF)-7 b(rame)28 b(class)e(re-de\014nes)h(the)h(default)g
-(Domain)g(v)-5 b(alue)27 b(to)g(b)r(e)h Ft(")p Fj(DSBSPECTR)n(UM)p
-Ft(")p Fj(.)259 3566 y Fd(FluxF)-8 b(rame)427 3665 y
-Fj(The)28 b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g(default)i
-(Domain)e(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p Fj(FLUX)p
-Ft(")p Fj(.)259 3793 y Fd(Sp)s(ecFluxF)-8 b(rame)427
-3893 y Fj(The)28 b(FluxF)-7 b(rame)27 b(class)g(re-de\014nes)g(the)g
-(default)i(Domain)e(v)-5 b(alue)27 b(to)h(b)r(e)g Ft(")p
-Fj(SPECTR)n(UM-FLUX)p Ft(")p Fj(.)259 4021 y Fd(TimeF)-8
-b(rame)427 4120 y Fj(The)28 b(TimeF)-7 b(rame)27 b(class)g
-(re-de\014nes)f(the)i(default)g(Domain)g(v)-5 b(alue)27
-b(to)h(b)r(e)g Ft(")p Fj(TIME)p Ft(")p Fj(.)0 4277 y
-Fd(Notes:)340 4555 y Fi(\017)45 b Fj(All)28 b(Domain)g(v)-5
-b(alues)27 b(are)g(con)n(v)n(erted)f(to)h(upp)r(er)h(case)f(and)g
-(white)h(space)f(is)h(remo)n(v)n(ed)e(b)r(efore)h(use.)p
-0 4744 V 0 4883 a Fz(Dra)l(wAxes\(axis\))1330 4876 y
-Fe(Dra)m(w)38 b(axes)g(for)g(a)h(Plot?)2844 4883 y Fz(Dra)l
-(wAxes\(axis\))0 5073 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 5172
-y(astGrid)24 b(function\))h(b)n(y)f(determining)g(whether)g(curv)n(es)f
-(represen)n(ting)g(co)r(ordinate)g(axes)g(should)h(b)r(e)h(dra)n(wn.)34
-b(It)227 5272 y(tak)n(es)18 b(a)g(separate)f(v)-5 b(alue)18
-b(for)g(eac)n(h)f(ph)n(ysical)h(axis)f(of)i(a)f(Plot)f(so)h(that,)j
-(for)d(instance,)i(the)e(setting)h Ft(")p Fj(Dra)n(wAxes\(2\)=0)p
-Ft(")227 5372 y Fj(sp)r(eci\014es)28 b(that)g(no)f(axis)g(should)g(b)r
-(e)h(dra)n(wn)f(for)g(the)h(second)f(axis.)227 5494 y(If)g(dra)n(wn,)f
-(these)h(axis)e(lines)i(will)f(pass)g(through)g(an)n(y)g(tic)n(k)g
-(marks)f(asso)r(ciated)h(with)h(n)n(umerical)e(lab)r(els)i(dra)n(wn)227
-5593 y(to)g(mark)f(v)-5 b(alues)27 b(on)f(the)h(axes.)36
-b(The)27 b(lo)r(cation)f(of)h(these)g(tic)n(k)g(marks)f(and)g(lab)r
-(els)h(\(and)g(hence)g(the)g(axis)f(lines\))227 5693
-y(is)i(determined)g(b)n(y)f(the)h(Plot's)f(Lab)r(elA)n(t\(axis\))g
-(attribute.)p eop end
-%%Page: 405 415
-TeXDict begin 405 414 bop 3643 52 a FF(405)227 351 y
-Fj(If)29 b(the)f(Dra)n(wAxes)f(v)-5 b(alue)27 b(of)h(a)g(Plot)f(is)h
-(non-zero)e(\(the)i(default\),)h(then)f(axis)f(lines)h(will)g(b)r(e)h
-(dra)n(wn,)e(otherwise)227 451 y(they)h(will)g(b)r(e)g(omitted.)0
-596 y Fd(T)m(yp)s(e:)227 696 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-842 y Fd(Class)k(Applicabilit)m(y:)259 974 y(Plot)427
-1074 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1232 y Fd(Notes:)340 1511 y Fi(\017)45 b Fj(Axis)32 b(lines)h(are)e
-(dra)n(wn)g(indep)r(enden)n(tly)i(of)f(an)n(y)f(co)r(ordinate)g(grid)h
-(lines)g(\(see)g(the)h(Grid)f(attribute\))g(so)427 1610
-y(grid)27 b(lines)h(ma)n(y)f(b)r(e)h(used)f(to)h(substitute)g(for)f
-(axis)g(lines)g(if)i(required.)340 1739 y Fi(\017)45
-b Fj(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r(els)g(and)g
-(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f(of)g(the)427
-1839 y(plotting)c(area)e(\(see)i(the)g(Lab)r(elling)g(attribute\).)37
-b(In)27 b(this)g(case,)f(the)h(v)-5 b(alue)27 b(of)g(the)g(Dra)n(wAxes)
-e(attribute)427 1938 y(is)j(ignored.)340 2067 y Fi(\017)45
-b Fj(If)28 b(no)g(axis)f(is)g(sp)r(eci\014ed,)h(\(e.g.)37
-b Ft(")p Fj(Dra)n(wAxes)p Ft(")26 b Fj(instead)i(of)f
-Ft(")p Fj(Dra)n(wAxes\(2\))p Ft(")p Fj(\),)f(then)j(a)e
-Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427
-2167 y Fj(op)r(eration)d(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 2267 y(will)k(use)g(just)g(the)g(Dra)n(wAxes\(1\))e
-(v)-5 b(alue.)p 0 2458 3780 12 v 0 2590 a Fz(Dra)l(wTitle)690
-b Fe(Dra)m(w)37 b(a)i(title)e(for)h(a)g(Plot?)687 b Fz(Dra)l(wTitle)0
-2752 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2852 y(astGrid)d(function\))i(b)n(y)e(determining)
-h(whether)f(a)g(title)i(is)e(dra)n(wn.)227 2975 y(If)f(the)g(Dra)n
-(wTitle)f(v)-5 b(alue)25 b(of)h(a)f(Plot)f(is)i(non-zero)e(\(the)i
-(default\),)g(then)g(the)g(title)g(will)g(b)r(e)g(dra)n(wn,)f
-(otherwise)f(it)227 3074 y(will)k(b)r(e)g(omitted.)0
-3220 y Fd(T)m(yp)s(e:)227 3319 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-3465 y Fd(Class)k(Applicabilit)m(y:)259 3598 y(Plot)427
-3697 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3826 y Fd(Plot3D)427 3926 y Fj(The)h(Plot3D)f(class)g(ignores)f(this)h
-(attributes,)h(assuming)f(a)g(v)-5 b(alue)27 b(of)h(zero.)0
-4084 y Fd(Notes:)340 4363 y Fi(\017)45 b Fj(The)28 b(text)g(used)f(for)
-h(the)g(title)g(is)f(obtained)h(from)f(the)h(Plot's)f(Title)h
-(attribute.)340 4492 y Fi(\017)45 b Fj(The)28 b(v)n(ertical)e(placemen)
-n(t)i(of)f(the)h(title)h(can)e(b)r(e)h(con)n(trolled)e(using)h(the)h
-(TitleGap)g(attribute.)p 0 4683 V 0 4814 a Fz(Dut1)1233
-4815 y Fe(The)39 b(UT1-UTC)d(correction)3482 4814 y Fz(Dut1)0
-4973 y Fd(Description:)44 b Fj(This)28 b(attribute)g(is)g(used)g(when)g
-(calculating)f(the)i(Lo)r(cal)e(Apparen)n(t)g(Sidereal)g(Time)i
-(corresp)r(onding)227 5072 y(to)34 b(SkyF)-7 b(rame's)33
-b(Ep)r(o)r(c)n(h)h(v)-5 b(alue)34 b(\(used)h(when)f(con)n(v)n(erting)e
-(p)r(ositions)i(to)g(or)f(from)h(the)h Ft(")p Fj(AzEl)p
-Ft(")e Fj(system\).)56 b(It)227 5172 y(should)29 b(b)r(e)h(set)g(to)f
-(the)h(di\013erence,)g(in)f(seconds,)g(b)r(et)n(w)n(een)h(the)g(UT1)f
-(and)g(UTC)h(timescales)f(at)g(the)h(momen)n(t)227 5272
-y(in)35 b(time)g(represen)n(ted)f(b)n(y)g(the)h(SkyF)-7
-b(rame's)34 b(Ep)r(o)r(c)n(h)g(attribute.)58 b(The)35
-b(v)-5 b(alue)35 b(to)f(use)h(is)f(unpredictable)h(and)227
-5371 y(dep)r(ends)29 b(on)e(c)n(hanges)g(in)h(the)h(earth's)e(rotation)
-g(sp)r(eed.)38 b(V)-7 b(alues)28 b(for)f(UT1-UTC)h(can)f(b)r(e)i
-(obtained)f(from)f(the)227 5471 y(In)n(ternational)g(Earth)f(Rotation)h
-(and)h(Reference)f(Systems)h(Service)e(\(IERS\))i(at)g(h)n
-(ttp://www.iers.org/.)227 5593 y(Curren)n(tly)-7 b(,)20
-b(the)g(correction)e(is)h(alw)n(a)n(ys)e(less)i(than)g(1)g(second.)34
-b(This)19 b(is)g(ensured)g(b)n(y)g(the)g(o)r(ccasional)f(in)n(tro)r
-(duction)227 5693 y(of)29 b(leap)g(seconds)f(in)n(to)h(the)g(UTC)g
-(timescale.)41 b(Therefore)28 b(no)g(great)g(error)f(will)i(usually)g
-(result)g(if)g(no)g(v)-5 b(alue)29 b(is)p eop end
-%%Page: 406 416
-TeXDict begin 406 415 bop 0 52 a FF(406)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(assigned)21 b(to)h(this)h(attribute)f(\(in)h(whic)n(h)f(case)g(a)g
-(default)g(v)-5 b(alue)22 b(of)h(zero)e(is)h(used\).)35
-b(Ho)n(w)n(ev)n(er,)22 b(it)g(is)g(p)r(ossible)g(that)227
-451 y(a)30 b(decision)g(ma)n(y)f(b)r(e)h(tak)n(en)g(at)g(some)f(time)i
-(in)f(the)h(future)f(to)g(abandon)f(the)i(in)n(tro)r(duction)f(of)g
-(leap)f(seconds,)227 551 y(in)f(whic)n(h)g(case)e(the)i(DUT)h
-(correction)d(could)h(gro)n(w)f(to)h(signi\014can)n(t)g(sizes.)0
-700 y Fd(T)m(yp)s(e:)227 799 y Fj(Floating)g(p)r(oin)n(t.)0
-949 y Fd(Class)k(Applicabilit)m(y:)259 1085 y(F)-8 b(rame)427
-1185 y Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)p
-0 1384 3780 12 v 0 1522 a Fz(Edge\(axis\))1110 1515 y
-Fe(Whic)m(h)39 b(edges)f(to)g(lab)s(el)g(in)h(a)f(Plot)3157
-1522 y Fz(Edge\(axis\))0 1722 y Fd(Description:)44 b
-Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1821 y(astGrid)38 b(function\))h(b)n(y)f(determining)h(whic)n(h)f
-(edges)f(of)i(a)f(Plot)g(are)f(used)h(for)g(displa)n(ying)f(n)n
-(umerical)h(and)227 1921 y(descriptiv)n(e)e(axis)f(lab)r(els.)62
-b(It)36 b(tak)n(es)g(a)f(separate)g(v)-5 b(alue)36 b(for)f(eac)n(h)h
-(ph)n(ysical)f(axis)g(of)h(the)h(Plot)e(so)h(that,)i(for)227
-2020 y(instance,)d(the)f(setting)g Ft(")p Fj(Edge\(2\)=left)p
-Ft(")e Fj(sp)r(eci\014es)i(whic)n(h)f(edge)g(to)h(use)f(to)h(displa)n
-(y)f(lab)r(els)g(for)g(the)h(second)227 2120 y(axis.)227
-2245 y(The)j(v)-5 b(alues)36 b Ft(")p Fj(left)p Ft(")p
-Fj(,)j Ft(")p Fj(top)p Ft(")p Fj(,)f Ft(")p Fj(righ)n(t)p
-Ft(")e Fj(and)g Ft(")p Fj(b)r(ottom)p Ft(")g Fj(\(or)g(an)n(y)g
-(abbreviation\))g(can)g(b)r(e)h(supplied)g(for)f(this)227
-2344 y(attribute.)f(The)21 b(default)g(is)f(usually)h
-Ft(")p Fj(b)r(ottom)p Ft(")f Fj(for)g(the)h(\014rst)f(axis)g(and)h
-Ft(")p Fj(left)p Ft(")f Fj(for)h(the)g(second)f(axis.)34
-b(Ho)n(w)n(ev)n(er,)227 2444 y(if)24 b(exterior)f(lab)r(elling)g(w)n
-(as)g(requested)g(\(see)h(the)g(Lab)r(elling)f(attribute\))h(but)h
-(cannot)e(b)r(e)h(pro)r(duced)f(using)h(these)227 2543
-y(default)j(Edge)d(v)-5 b(alues,)26 b(then)h(the)f(default)g(v)-5
-b(alues)25 b(will)h(b)r(e)h(sw)n(app)r(ed)e(if)h(this)g(enables)g
-(exterior)e(lab)r(elling)i(to)f(b)r(e)227 2643 y(pro)r(duced.)0
-2792 y Fd(T)m(yp)s(e:)227 2892 y Fj(String.)0 3041 y
-Fd(Class)31 b(Applicabilit)m(y:)259 3178 y(Plot)427 3277
-y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)259
-3410 y Fd(Plot3D)427 3509 y Fj(The)36 b(Plot3D)f(class)f(ignores)g
-(this)i(attributes.)61 b(Instead)35 b(it)h(uses)f(its)h(o)n(wn)f(Ro)r
-(otCorner)f(attribute)i(to)427 3609 y(determine)28 b(whic)n(h)f(edges)g
-(of)h(the)g(3D)f(plot)h(to)g(lab)r(el.)0 3771 y Fd(Notes:)340
-4053 y Fi(\017)45 b Fj(In)29 b(some)e(circumstances,)g(n)n(umerical)g
-(lab)r(els)h(will)h(b)r(e)f(dra)n(wn)f(along)g(in)n(ternal)g(grid)h
-(lines)g(instead)g(of)g(at)427 4153 y(the)i(edges)e(of)i(the)f
-(plotting)h(area)d(\(see)j(the)f(Lab)r(elling)g(attribute\).)43
-b(In)29 b(this)h(case,)e(the)i(Edge)e(attribute)427 4252
-y(only)39 b(a\013ects)h(the)g(placemen)n(t)f(of)g(the)h(descriptiv)n(e)
-f(lab)r(els)g(\(these)h(are)e(dra)n(wn)h(at)g(the)h(edges)f(of)g(the)
-427 4352 y(plotting)28 b(area,)e(rather)h(than)g(along)g(the)h(axis)f
-(lines\).)p 0 4551 V 0 4683 a Fz(Enco)t(ding)169 b Fe(System)38
-b(for)g(enco)s(ding)g(Ob)7 b(jects)38 b(as)h(FITS)g(headers)169
-b Fz(Enco)t(ding)0 4871 y Fd(Description:)44 b Fj(This)25
-b(attribute)f(sp)r(eci\014es)g(the)h(enco)r(ding)f(system)g(to)g(use)g
-(when)g(AST)h(Ob)5 b(jects)24 b(are)f(stored)h(as)f(FITS)227
-4971 y(header)29 b(cards)f(in)h(a)g(FitsChan.)42 b(It)29
-b(a\013ects)g(the)h(b)r(eha)n(viour)e(of)h(the)g(astW)-7
-b(rite)29 b(and)g(astRead)g(functions)g(when)227 5070
-y(they)c(are)f(used)h(to)f(transfer)g(an)n(y)g(AST)h(Ob)5
-b(ject)25 b(to)f(or)g(from)g(an)h(external)f(represen)n(tation)f
-(consisting)h(of)g(FITS)227 5170 y(header)31 b(cards)g(\(i.e.)50
-b(whenev)n(er)31 b(a)g(write)h(or)f(read)g(op)r(eration)f(is)i(p)r
-(erformed)f(using)h(a)f(FitsChan)h(as)f(the)h(I/O)227
-5270 y(Channel\).)227 5394 y(There)27 b(are)f(sev)n(eral)f(w)n(a)n(ys)h
-(\(con)n(v)n(en)n(tions\))g(b)n(y)h(whic)n(h)g(co)r(ordinate)f(system)g
-(information)h(ma)n(y)f(b)r(e)i(represen)n(ted)227 5494
-y(in)j(the)g(form)f(of)h(FITS)g(headers)e(and)i(the)f(Enco)r(ding)g
-(attribute)h(is)f(used)h(to)f(sp)r(ecify)h(whic)n(h)g(of)f(these)h
-(should)227 5593 y(b)r(e)e(used.)37 b(The)28 b(enco)r(ding)g(options)f
-(a)n(v)-5 b(ailable)27 b(are)g(outlined)h(in)g(the)h
-Ft(")p Fj(Enco)r(dings)d(Av)-5 b(ailable)p Ft(")27 b
-Fj(section)h(b)r(elo)n(w,)227 5693 y(and)g(in)g(more)e(detail)i(in)g
-(the)g(sections)f(whic)n(h)g(follo)n(w.)p eop end
-%%Page: 407 417
-TeXDict begin 407 416 bop 3643 52 a FF(407)227 351 y
-Fj(Enco)r(ding)31 b(systems)f(di\013er)h(in)g(the)h(range)d(of)i(p)r
-(ossible)g(Ob)5 b(jects)31 b(\(e.g.)46 b(classes\))30
-b(they)i(can)e(represen)n(t,)h(in)g(the)227 451 y(restrictions)20
-b(they)i(place)f(on)g(these)g(Ob)5 b(jects)21 b(\(e.g.)35
-b(compatibilit)n(y)21 b(with)h(some)e(externally-de\014ned)h(co)r
-(ordinate)227 551 y(system)30 b(mo)r(del\))g(and)g(in)g(the)g(n)n(um)n
-(b)r(er)f(of)h(Ob)5 b(jects)29 b(that)h(can)g(b)r(e)g(stored)f
-(together)f(in)i(an)n(y)f(particular)g(set)h(of)227 650
-y(FITS)i(header)f(cards)g(\(e.g.)48 b(m)n(ultiple)33
-b(Ob)5 b(jects,)32 b(or)f(only)g(a)g(single)g(Ob)5 b(ject\).)49
-b(The)32 b(c)n(hoice)f(of)g(enco)r(ding)h(also)227 750
-y(a\013ects)24 b(the)h(range)d(of)j(external)e(applications)g(whic)n(h)
-h(can)g(p)r(oten)n(tially)g(read)f(and)h(in)n(terpret)g(the)g(FITS)g
-(header)227 849 y(cards)j(pro)r(duced.)227 974 y(The)20
-b(enco)r(ding)f(options)g(a)n(v)-5 b(ailable)18 b(are)h(not)g
-(necessarily)f(m)n(utually)i(exclusiv)n(e,)g(and)f(it)h(ma)n(y)f
-(sometimes)g(b)r(e)h(p)r(os-)227 1074 y(sible)27 b(to)f(store)f(m)n
-(ultiple)i(Ob)5 b(jects)26 b(\(or)g(the)g(same)g(Ob)5
-b(ject)26 b(sev)n(eral)f(times\))i(using)f(di\013eren)n(t)g(enco)r
-(dings)g(within)227 1173 y(the)31 b(same)f(set)g(of)g(FITS)h(header)e
-(cards.)44 b(This)30 b(p)r(ossibilit)n(y)g(increases)f(the)i(lik)n
-(eliho)r(o)r(d)f(of)g(other)g(applications)227 1273 y(b)r(eing)e(able)f
-(to)h(read)e(and)i(in)n(terpret)f(the)h(information.)227
-1398 y(By)33 b(default,)i(a)e(FitsChan)h(will)f(attempt)h(to)f
-(determine)h(whic)n(h)f(enco)r(ding)g(system)g(is)g(already)f(in)h
-(use,)i(and)227 1497 y(will)41 b(set)f(the)g(default)h(Enco)r(ding)e(v)
--5 b(alue)40 b(accordingly)e(\(so)i(that)h(subsequen)n(t)e(I/O)h(op)r
-(erations)e(adopt)i(the)227 1597 y(same)28 b(con)n(v)n(en)n(tions\).)38
-b(It)29 b(do)r(es)f(this)h(b)n(y)f(lo)r(oking)f(for)h(certain)g
-(critical)g(FITS)h(k)n(eyw)n(ords)d(whic)n(h)j(only)f(o)r(ccur)f(in)227
-1697 y(particular)g(enco)r(dings.)38 b(F)-7 b(or)28 b(details)g(of)g
-(ho)n(w)g(this)g(w)n(orks,)f(see)h(the)g Ft(")p Fj(Choice)g(of)g
-(Default)h(Enco)r(ding)p Ft(")e Fj(section)227 1796 y(b)r(elo)n(w.)36
-b(If)26 b(y)n(ou)e(wish)h(to)g(ensure)g(that)g(a)g(particular)f(enco)r
-(ding)h(system)g(is)g(used,)h(indep)r(enden)n(tly)g(of)f(an)n(y)f(FITS)
-227 1896 y(cards)j(already)f(presen)n(t,)h(y)n(ou)g(should)g(set)h(an)f
-(explicit)h(Enco)r(ding)f(v)-5 b(alue)27 b(y)n(ourself.)0
-2046 y Fd(T)m(yp)s(e:)227 2145 y Fj(String.)0 2295 y
-Fd(Class)k(Applicabilit)m(y:)259 2432 y(FitsChan)427
-2532 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)-2
-2694 y Fd(Enco)s(dings)j(Av)-5 b(ailable)n(:)227 2840
-y Fj(The)29 b(Enco)r(ding)f(attribute)h(can)f(tak)n(e)g(an)n(y)g(of)h
-(the)g(follo)n(wing)f(\(case)g(insensitiv)n(e\))h(string)f(v)-5
-b(alues)28 b(to)h(select)f(the)227 2940 y(corresp)r(onding)e(enco)r
-(ding)h(system:)340 3202 y Fi(\017)45 b Ft(")p Fj(DSS)p
-Ft(")p Fj(:)f(Enco)r(des)30 b(co)r(ordinate)g(system)h(information)f
-(in)i(FITS)f(header)f(cards)g(using)h(the)g(con)n(v)n(en)n(tion)427
-3301 y(dev)n(elop)r(ed)19 b(at)h(the)g(Space)f(T)-7 b(elescop)r(e)19
-b(Science)h(Institute)g(\(STScI\))g(for)f(the)h(Digitised)g(Sky)g(Surv)
-n(ey)e(\(DSS\))427 3401 y(astrometric)29 b(plate)h(calibrations.)43
-b(The)30 b(main)h(adv)-5 b(an)n(tages)28 b(of)i(this)h(enco)r(ding)e
-(are)h(that)g(FITS)h(images)427 3501 y(whic)n(h)i(use)g(it)g(are)e
-(widely)i(a)n(v)-5 b(ailable)32 b(and)g(it)h(is)g(understo)r(o)r(d)f(b)
-n(y)h(a)f(n)n(um)n(b)r(er)h(of)f(imp)r(ortan)n(t)h(and)f(w)n(ell-)427
-3600 y(established)25 b(astronom)n(y)e(applications.)36
-b(F)-7 b(or)24 b(further)h(details,)h(see)f(the)g(section)g
-Ft(")p Fj(The)g(DSS)h(Enco)r(ding)p Ft(")427 3700 y Fj(b)r(elo)n(w.)340
-3833 y Fi(\017)45 b Ft(")p Fj(FITS-W)n(CS)p Ft(")p Fj(:)c(Enco)r(des)29
-b(co)r(ordinate)f(system)h(information)h(in)f(FITS)h(header)f(cards)g
-(using)g(the)h(con-)427 3932 y(v)n(en)n(tions)18 b(describ)r(ed)h(in)g
-(the)h(FITS)f(w)n(orld)f(co)r(ordinate)g(system)g(\(FITS-W)n(CS\))i
-(pap)r(ers)e(b)n(y)h(E.W.)g(Greisen,)427 4032 y(M.)26
-b(Calabretta,)f(et)h(al.)36 b(The)26 b(main)f(adv)-5
-b(an)n(tages)24 b(of)i(this)g(enco)r(ding)f(are)g(that)h(it)g(should)g
-(b)r(e)g(understo)r(o)r(d)427 4132 y(b)n(y)g(an)n(y)e(FITS-W)n(CS)i
-(complian)n(t)f(application)g(and)h(is)f(lik)n(ely)h(to)f(b)r(e)h
-(adopted)f(widely)h(for)f(FITS)h(data)f(in)427 4231 y(future.)38
-b(F)-7 b(or)27 b(further)g(details,)g(see)h(the)g(section)f
-Ft(")p Fj(The)g(FITS-W)n(CS)h(Enco)r(ding)p Ft(")e Fj(b)r(elo)n(w.)340
-4364 y Fi(\017)45 b Ft(")p Fj(FITS-PC)p Ft(")p Fj(:)52
-b(Enco)r(des)35 b(co)r(ordinate)g(system)g(information)g(in)h(FITS)g
-(header)f(cards)g(using)g(the)h(con-)427 4464 y(v)n(en)n(tions)31
-b(describ)r(ed)f(in)i(an)f(earlier)f(draft)h(of)g(the)g(FITS)h(w)n
-(orld)e(co)r(ordinate)g(system)h(pap)r(ers)g(b)n(y)g(E.W.)427
-4564 y(Greisen)e(and)h(M.)f(Calabretta.)42 b(This)29
-b(enco)r(ding)g(uses)g(a)g(com)n(bination)g(of)h(CDEL)-7
-b(Ti)29 b(and)g(PCiiijjj)i(k)n(ey-)427 4663 y(w)n(ords)38
-b(to)g(describ)r(e)h(the)g(scale)f(and)g(rotation)g(of)h(the)g(pixel)f
-(axes.)70 b(This)39 b(enco)r(ding)f(is)h(included)g(to)427
-4763 y(supp)r(ort)25 b(existing)f(data)h(and)g(soft)n(w)n(are)e(whic)n
-(h)h(uses)h(these)g(no)n(w)f(sup)r(erceded)h(con)n(v)n(en)n(tions.)34
-b(In)25 b(general,)427 4863 y(the)32 b Ft(")p Fj(FITS-W)n(CS)p
-Ft(")f Fj(enco)r(ding)h(\(whic)n(h)g(uses)f(CDi)p Ft(_)p
-Fj(j)h(or)f(PCi)p Ft(_)p Fj(j)g(k)n(eyw)n(ords)f(to)h(describ)r(e)h
-(the)g(scale)f(and)427 4962 y(rotation\))c(should)g(b)r(e)h(used)g(in)g
-(preference)f(to)g Ft(")p Fj(FITS-PC)p Ft(")p Fj(.)340
-5095 y Fi(\017)45 b Ft(")p Fj(FITS-IRAF)p Ft(")p Fj(:)38
-b(Enco)r(des)27 b(co)r(ordinate)g(system)h(information)g(in)g(FITS)h
-(header)e(cards)g(using)h(the)g(con-)427 5195 y(v)n(en)n(tions)e
-(describ)r(ed)g(in)g(the)h(do)r(cumen)n(t)g Ft(")p Fj(W)-7
-b(orld)25 b(Co)r(ordinate)h(Systems)g(Represen)n(tations)f(Within)i
-(the)427 5295 y(FITS)k(F)-7 b(ormat)p Ft(")29 b Fj(b)n(y)h(R.J.)g
-(Hanisc)n(h)g(and)g(D.G.)h(W)-7 b(ells,)32 b(1988.)43
-b(This)30 b(enco)r(ding)g(is)g(curren)n(tly)g(emplo)n(y)n(ed)427
-5394 y(b)n(y)35 b(the)h(IRAF)g(data)f(analysis)f(facilit)n(y)-7
-b(,)37 b(so)e(its)h(use)f(will)g(facilitate)h(data)f(exc)n(hange)f
-(with)h(IRAF.)i(Its)427 5494 y(main)f(adv)-5 b(an)n(tages)34
-b(are)h(that)h(it)h(is)f(a)f(stable)h(con)n(v)n(en)n(tion)e(whic)n(h)i
-(appro)n(ximates)e(to)i(a)f(subset)h(of)g(the)427 5593
-y(propsed)27 b(FITS-W)n(CS)g(enco)r(ding)g(\(ab)r(o)n(v)n(e\).)35
-b(This)28 b(mak)n(es)e(it)h(suitable)g(as)g(an)g(in)n(terim)g(metho)r
-(d)g(for)g(stor-)427 5693 y(ing)k(co)r(ordinate)f(system)h(information)
-g(in)h(FITS)f(headers)f(un)n(til)i(the)g(FITS-W)n(CS)f(enco)r(ding)g(b)
-r(ecomes)p eop end
-%%Page: 408 418
-TeXDict begin 408 417 bop 0 52 a FF(408)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fj(stable.)37 b(Since)26 b(man)n(y)h(datasets)e(curren)n(tly)h(use)h
-(the)g(FITS-IRAF)g(enco)r(ding,)g(con)n(v)n(ersion)d(of)j(data)f(from)
-427 451 y(FITS-IRAF)i(to)g(the)g(\014nal)f(form)h(of)f(FITS-W)n(CS)h
-(is)f(lik)n(ely)g(to)h(b)r(e)g(w)n(ell)f(supp)r(orted.)340
-583 y Fi(\017)45 b Ft(")p Fj(FITS-AIPS)p Ft(")p Fj(:)39
-b(Enco)r(des)29 b(co)r(ordinate)f(system)h(information)f(in)i(FITS)f
-(header)g(cards)f(using)h(the)g(con-)427 683 y(v)n(en)n(tions)35
-b(originally)f(in)n(tro)r(duced)i(b)n(y)f(the)h(AIPS)g(data)f(analysis)
-g(facilit)n(y)-7 b(.)61 b(This)35 b(is)h(base)f(on)h(the)g(use)427
-782 y(of)h(CDEL)-7 b(Ti)37 b(and)g(CR)n(OT)-7 b(Ai)36
-b(k)n(eu)n(w)n(ords)f(to)i(desrib)r(e)f(the)i(scale)e(and)g(rotation)g
-(of)h(eac)n(h)f(axis.)64 b(These)427 882 y(con)n(v)n(en)n(tions)26
-b(ha)n(v)n(e)h(b)r(een)h(sup)r(erceded)f(but)h(are)f(still)h(widely)f
-(used.)340 1014 y Fi(\017)45 b Ft(")p Fj(FITS-AIPS++)p
-Ft(")p Fj(:)j(Enco)r(des)33 b(co)r(ordinate)g(system)h(information)f
-(in)h(FITS)h(header)e(cards)g(using)g(the)427 1114 y(con)n(v)n(en)n
-(tions)24 b(used)h(b)n(y)g(the)g(AIPS++)f(pro)5 b(ject.)36
-b(This)25 b(is)g(an)g(extension)f(of)h(FITS-AIPS)g(whic)n(h)g(includes)
-427 1213 y(some)i(of)h(the)g(features)f(of)g(FITS-IRAF)i(and)e
-(FITS-PC.)340 1346 y Fi(\017)45 b Ft(")p Fj(FITS-CLASS)p
-Ft(")p Fj(:)34 b(Enco)r(des)22 b(co)r(ordinate)g(system)g(information)g
-(in)h(FITS)g(header)f(cards)f(using)h(the)h(con-)427
-1445 y(v)n(en)n(tions)d(used)i(b)n(y)f(the)g(CLASS)h(pro)5
-b(ject.)34 b(CLASS)21 b(is)g(a)g(soft)n(w)n(are)f(pac)n(k)-5
-b(age)19 b(for)i(reducing)f(single-dish)h(ra-)427 1545
-y(dio)d(and)h(sub-mm)f(sp)r(ectroscopic)f(data.)33 b(See)19
-b(the)g(section)f Ft(")p Fj(CLASS)g(FITS)h(format)p Ft(")e
-Fj(at)h(h)n(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-)
-427 1644 y(h)n(tml/.)340 1777 y Fi(\017)45 b Ft(")p Fj(NA)-7
-b(TIVE)p Ft(")p Fj(:)36 b(Enco)r(des)24 b(AST)i(Ob)5
-b(jects)26 b(in)f(FITS)h(header)f(cards)g(using)g(a)g(con)n(v)n(en)n
-(tion)f(whic)n(h)h(is)h(priv)-5 b(ate)427 1876 y(to)21
-b(the)h(AST)f(library)f(\(but)i(adheres)e(to)h(the)h(general)e(FITS)h
-(standard\))f(and)h(whic)n(h)h(uses)e(FITS)i(k)n(eyw)n(ords)427
-1976 y(that)42 b(will)f(not)g(clash)f(with)i(other)e(enco)r(ding)h
-(systems.)77 b(The)41 b(main)g(adv)-5 b(an)n(tages)39
-b(of)i(this)g(are)f(that)427 2076 y(an)n(y)e(class)f(of)i(AST)f(Ob)5
-b(ject)39 b(ma)n(y)e(b)r(e)i(enco)r(ded,)i(and)d(an)n(y)g
-(\(reasonable\))f(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)38
-b(ma)n(y)427 2175 y(b)r(e)33 b(stored)e(sequen)n(tially)g(in)h(the)h
-(same)e(FITS)h(header.)50 b(This)32 b(mak)n(es)e(FITS)j(headers)e(an)g
-(almost)h(loss-)427 2275 y(less)i(comm)n(unication)f(path)h(for)f
-(passing)g(AST)h(Ob)5 b(jects)34 b(b)r(et)n(w)n(een)g(applications)f
-(\(although)g(all)h(suc)n(h)427 2374 y(applications)27
-b(m)n(ust,)h(of)g(course,)e(mak)n(e)h(use)g(of)h(the)g(AST)g(library)f
-(to)g(in)n(terpret)g(the)h(information\).)37 b(F)-7 b(or)427
-2474 y(further)28 b(details,)f(see)g(the)h(section)g
-Ft(")p Fj(The)f(NA)-7 b(TIVE)28 b(Enco)r(ding)p Ft(")e
-Fj(b)r(elo)n(w.)-2 2635 y Fd(Choice)32 b(of)f(Default)h(Enco)s(ding)n
-(:)227 2781 y Fj(If)d(the)g(Enco)r(ding)f(attribute)g(of)h(a)f
-(FitsChan)h(is)f(not)g(set,)h(the)g(default)g(v)-5 b(alue)28
-b(it)h(tak)n(es)f(is)g(determined)h(b)n(y)f(the)227 2881
-y(presence)d(of)h(certain)f(critical)g(FITS)h(k)n(eyw)n(ords)e(within)j
-(the)f(FitsChan.)36 b(The)26 b(sequence)f(of)h(decisions)f(used)h(to)
-227 2981 y(arriv)n(e)g(at)h(the)h(default)g(v)-5 b(alue)28
-b(is)f(as)g(follo)n(ws:)340 3241 y Fi(\017)45 b Fj(If)26
-b(the)f(FitsChan)g(con)n(tains)f(an)n(y)g(k)n(eyw)n(ords)f(b)r
-(eginning)i(with)g(the)h(string)e Ft(")p Fj(BEGAST)p
-Ft(")p Fj(,)h(then)g(NA)-7 b(TIVE)427 3340 y(enco)r(ding)28
-b(is)f(used,)340 3472 y Fi(\017)45 b Fj(Otherwise,)24
-b(FITS-CLASS)h(is)f(used)g(if)g(the)h(FitsChan)f(con)n(tains)f(a)g(DEL)
--7 b(T)g(A)e(V)25 b(k)n(eyw)n(ord)d(and)i(a)f(k)n(eyw)n(ord)427
-3572 y(of)f(the)g(form)f(VELO-xxx,)h(where)f(xxx)g(indicates)g(one)h
-(of)f(the)h(rest)g(frames)f(used)g(b)n(y)h(class)e(\(e.g.)35
-b Ft(")p Fj(VELO-)427 3672 y(LSR)p Ft(")p Fj(\).)340
-3804 y Fi(\017)45 b Fj(Otherwise,)e(if)e(the)g(FitsChan)f(con)n(tains)g
-(a)g(CTYPE)g(k)n(eyw)n(ord)e(whic)n(h)j(represen)n(ts)d(a)j(sp)r
-(ectral)e(axis)427 3904 y(using)f(the)h(con)n(v)n(en)n(tions)e(of)i
-(the)f(AIPS)h(and)f(AIPS++)g(pro)5 b(jects)37 b(\(e.g.)70
-b Ft(")p Fj(FELO-LSR)p Ft(")p Fj(,)39 b(etc\),)j(then)427
-4003 y(one)31 b(of)g(FITS-AIPS)g(or)f(FITS-AIPS++)g(enco)r(ding)h(is)f
-(used.)48 b(FITS-AIPS++)30 b(is)h(used)f(if)i(an)n(y)e(of)h(the)427
-4103 y(k)n(eyw)n(ords)g(CDi)p Ft(_)p Fj(j,)j(PR)n(OJP)-7
-b(,)32 b(LONPOLE)f(or)g(LA)-7 b(TPOLE)32 b(are)g(found)h(in)g(the)g
-(FitsChan.)52 b(Otherwise)427 4202 y(FITS-AIPS)28 b(is)f(used.)340
-4335 y Fi(\017)45 b Fj(Otherwise,)28 b(if)g(the)h(FitsChan)f(con)n
-(tains)f(a)h(k)n(eyw)n(ord)e(of)i(the)g(form)g Ft(")p
-Fj(PCiiijjj)p Ft(")p Fj(,)g(where)g Ft(")p Fj(i)p Ft(")f
-Fj(and)h Ft(")p Fj(j)p Ft(")g Fj(are)427 4434 y(single)f(digits,)h
-(then)g(FITS-PC)f(enco)r(ding)g(is)h(used,)340 4566 y
-Fi(\017)45 b Fj(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)f(a)g
-(k)n(eyw)n(ord)e(of)j(the)g(form)f Ft(")p Fj(CDiiijjj)p
-Ft(")p Fj(,)i(where)e Ft(")p Fj(i)p Ft(")g Fj(and)g Ft(")p
-Fj(j)p Ft(")h Fj(are)427 4666 y(single)f(digits,)h(then)g(FITS-IRAF)g
-(enco)r(ding)f(is)h(used,)340 4798 y Fi(\017)45 b Fj(Otherwise,)c(if)e
-(the)f(FitsChan)h(con)n(tains)e(a)h(k)n(eyw)n(ord)f(of)h(the)h(form)f
-Ft(")p Fj(CDi)p Ft(_)p Fj(j)p Ft(")p Fj(,)j(and)d(at)h(least)f(one)g
-(of)427 4898 y(RADECSYS,)43 b(PR)n(OJPi,)g(or)d(CjV)-9
-b(ALi)42 b(where)f Ft(")p Fj(i)p Ft(")g Fj(and)g Ft(")p
-Fj(j)p Ft(")g Fj(are)f(single)h(digits,)k(then)d(FITS-IRAF)427
-4998 y(enco)r(ding)28 b(is)f(used.)340 5130 y Fi(\017)45
-b Fj(Otherwise,)26 b(if)i(the)f(FitsChan)f(con)n(tains)g(an)n(y)g(k)n
-(eyw)n(ords)e(of)j(the)g(form)f(PR)n(OJPi,)f(CjV)-9 b(ALi)28
-b(or)e(RADEC-)427 5229 y(SYS,)j(where)e Ft(")p Fj(i)p
-Ft(")g Fj(and)g Ft(")p Fj(j)p Ft(")g Fj(are)g(single)g(digits,)g(then)h
-(FITS-PC)g(enco)r(ding)f(is)g(used.)340 5362 y Fi(\017)45
-b Fj(Otherwise,)34 b(if)g(the)g(FitsChan)g(con)n(tains)e(a)h(k)n(eyw)n
-(ord)f(of)h(the)h(form)f(CR)n(OT)-7 b(Ai,)35 b(where)e
-Ft(")p Fj(i)p Ft(")g Fj(is)g(a)g(single)427 5461 y(digit,)28
-b(then)g(FITS-AIPS)g(enco)r(ding)f(is)g(used.)340 5593
-y Fi(\017)45 b Fj(Otherwise,)36 b(if)f(the)g(FitsChan)g(con)n(tains)f
-(a)g(k)n(eyw)n(ord)f(of)i(the)g(form)f(CR)-9 b(V)g(ALi,)37
-b(where)d Ft(")p Fj(i)p Ft(")g Fj(is)h(a)f(single)427
-5693 y(digit,)28 b(then)g(FITS-W)n(CS)g(enco)r(ding)f(is)h(used.)p
-eop end
-%%Page: 409 419
-TeXDict begin 409 418 bop 3643 52 a FF(409)340 351 y
-Fi(\017)45 b Fj(Otherwise,)27 b(if)h(the)g(FitsChan)g(con)n(tains)e
-(the)i Ft(")p Fj(PL)-7 b(TRAH)p Ft(")27 b Fj(k)n(eyw)n(ord,)f(then)i
-(DSS)h(enco)r(ding)e(is)g(used,)340 486 y Fi(\017)45
-b Fj(Otherwise,)37 b(if)e(none)g(of)h(these)f(conditions)g(is)g(met)h
-(\(as)f(w)n(ould)f(b)r(e)i(the)g(case)e(when)i(using)f(an)g(empt)n(y)
-427 585 y(FitsChan\),)28 b(then)g(NA)-7 b(TIVE)28 b(enco)r(ding)g(is)f
-(used.)227 751 y(Except)e(for)g(the)g(NA)-7 b(TIVE)25
-b(and)g(DSS)h(enco)r(dings,)f(all)g(the)h(ab)r(o)n(v)n(e)d(c)n(hec)n
-(ks)h(also)g(require)g(that)i(the)f(header)f(con-)227
-850 y(tains)g(at)g(least)g(one)g(CTYPE,)f(CRPIX)i(and)f(CR)-9
-b(V)g(AL)24 b(k)n(eyw)n(ord)e(\(otherwise)i(the)g(c)n(hec)n(king)f(pro)
-r(cess)g(con)n(tin)n(ues)227 950 y(to)28 b(the)g(next)g(case\).)227
-1076 y(Setting)g(an)g(explicit)f(v)-5 b(alue)28 b(for)f(the)h(Enco)r
-(ding)f(attribute)h(alw)n(a)n(ys)d(o)n(v)n(er-rides)g(this)j(default)g
-(b)r(eha)n(viour.)227 1203 y(Note)h(that)g(when)g(writing)f
-(information)g(to)h(a)f(FitsChan,)h(the)g(c)n(hoice)f(of)h(enco)r(ding)
-f(will)h(dep)r(end)h(greatly)d(on)227 1302 y(the)d(t)n(yp)r(e)f(of)g
-(application)g(y)n(ou)f(exp)r(ect)i(to)f(b)r(e)g(reading)f(the)i
-(information)f(in)g(future.)36 b(If)23 b(y)n(ou)g(do)g(not)g(kno)n(w)f
-(this,)227 1402 y(there)32 b(ma)n(y)f(sometimes)g(b)r(e)h(an)f(adv)-5
-b(an)n(tage)30 b(in)i(writing)f(the)h(information)f(sev)n(eral)f
-(times,)j(using)e(a)g(di\013eren)n(t)227 1501 y(enco)r(ding)d(on)f(eac)
-n(h)g(o)r(ccasion.)-2 1654 y Fd(The)32 b(DSS)h(Enco)s(ding)n(:)227
-1801 y Fj(The)g(DSS)h(enco)r(ding)f(uses)f(FITS)i(header)e(cards)g(to)h
-(store)f(a)g(m)n(ulti-term)h(p)r(olynomial)g(whic)n(h)g(relates)f
-(pixel)227 1900 y(p)r(ositions)20 b(on)f(a)h(digitised)f(photographic)g
-(plate)g(to)h(celestial)g(co)r(ordinates)e(\(righ)n(t)h(ascension)g
-(and)h(declination\).)227 2000 y(This)33 b(enco)r(ding)g(ma)n(y)f(only)
-h(b)r(e)g(used)g(to)g(store)f(a)h(single)f(AST)i(Ob)5
-b(ject)33 b(in)g(an)n(y)f(set)h(of)g(FITS)g(header)g(cards,)227
-2099 y(and)27 b(that)h(Ob)5 b(ject)27 b(m)n(ust)h(b)r(e)f(a)g(F)-7
-b(rameSet)27 b(whic)n(h)g(conforms)g(to)g(the)h(STScI/DSS)f(co)r
-(ordinate)f(system)h(mo)r(del)227 2199 y(\(this)g(means)f(the)h
-(Mapping)g(whic)n(h)f(relates)g(its)g(base)g(and)g(curren)n(t)g(F)-7
-b(rames)26 b(m)n(ust)g(include)h(either)g(a)f(DssMap)227
-2299 y(or)h(a)g(WcsMap)h(with)g(t)n(yp)r(e)f(AST)p Ft(__)p
-Fj(T)-7 b(AN)28 b(or)f(AST)p Ft(__)p Fj(TPN\).)227 2425
-y(When)32 b(reading)e(a)h(DSS)i(enco)r(ded)e(Ob)5 b(ject)31
-b(\(using)g(astRead\),)h(the)g(FitsChan)g(concerned)e(m)n(ust)i
-(initially)f(b)r(e)227 2525 y(p)r(ositioned)21 b(at)h(the)g(\014rst)f
-(card)f(\(its)i(Card)f(attribute)g(m)n(ust)h(equal)f(1\))g(and)g(the)h
-(result)f(of)g(the)h(read,)g(if)g(successful,)227 2624
-y(will)34 b(alw)n(a)n(ys)d(b)r(e)j(a)f(p)r(oin)n(ter)g(to)g(a)g(F)-7
-b(rameSet.)54 b(The)33 b(base)g(F)-7 b(rame)33 b(of)g(this)h(F)-7
-b(rameSet)33 b(represen)n(ts)e(DSS)k(pixel)227 2724 y(co)r(ordinates,)g
-(and)f(the)h(curren)n(t)e(F)-7 b(rame)34 b(represen)n(ts)f(DSS)i
-(celestial)e(co)r(ordinates.)56 b(Suc)n(h)34 b(a)g(read)f(is)i(alw)n(a)
-n(ys)227 2823 y(destructiv)n(e)g(and)h(causes)e(the)i(FITS)g(header)f
-(cards)f(required)h(for)g(the)h(construction)f(of)g(the)h(F)-7
-b(rameSet)36 b(to)227 2923 y(b)r(e)e(remo)n(v)n(ed)e(from)h(the)g
-(FitsChan,)i(whic)n(h)e(is)g(then)h(left)g(p)r(ositioned)f(at)g(the)h
-Ft(")p Fj(end-of-\014le)p Ft(")p Fj(.)52 b(A)34 b(subsequen)n(t)227
-3023 y(read)28 b(using)h(the)g(same)f(enco)r(ding)g(will)h(therefore)f
-(not)h(return)f(another)g(F)-7 b(rameSet,)29 b(ev)n(en)f(if)i(the)f
-(FitsChan)g(is)227 3122 y(rew)n(ound.)227 3249 y(When)22
-b(astW)-7 b(rite)20 b(is)h(used)g(to)f(store)g(a)g(F)-7
-b(rameSet)21 b(using)f(DSS)i(enco)r(ding,)g(an)e(attempt)i(is)e
-(\014rst)h(made)f(to)h(simplify)227 3348 y(the)33 b(F)-7
-b(rameSet)32 b(to)g(see)f(if)i(it)g(conforms)e(to)h(the)g(DSS)h(mo)r
-(del.)51 b(Sp)r(eci\014cally)-7 b(,)33 b(the)f(curren)n(t)g(F)-7
-b(rame)31 b(m)n(ust)h(b)r(e)h(a)227 3448 y(FK5)h(SkyF)-7
-b(rame;)36 b(the)f(pro)5 b(jection)33 b(m)n(ust)h(b)r(e)g(a)g(tangen)n
-(t)f(plane)h(\(gnomonic\))g(pro)5 b(jection)33 b(with)h(p)r(olynomial)
-227 3547 y(corrections)24 b(conforming)g(to)i(DSS)g(requiremen)n(ts,)f
-(and)g(north)g(m)n(ust)h(b)r(e)g(parallel)e(to)h(the)h(second)f(base)g
-(F)-7 b(rame)227 3647 y(axis.)227 3773 y(If)36 b(the)g
-(simpli\014cation)f(pro)r(cess)f(succeeds,)j(a)e(description)g(of)g
-(the)h(F)-7 b(rameSet)35 b(is)h(written)f(to)h(the)g(FitsChan)227
-3873 y(using)31 b(appropriate)e(DSS)j(FITS)g(header)e(cards.)46
-b(The)32 b(base)e(F)-7 b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31
-b(is)g(used)g(to)g(form)g(the)227 3973 y(DSS)37 b(pixel)g(co)r
-(ordinate)e(system)h(and)g(the)h(curren)n(t)e(F)-7 b(rame)36
-b(giv)n(es)f(the)i(DSS)g(celestial)f(co)r(ordinate)f(system.)227
-4072 y(A)c(successful)g(write)g(op)r(eration)e(will)i(o)n(v)n(er-write)
-e(an)n(y)h(existing)g(DSS)i(enco)r(ded)f(data)f(in)h(the)g(FitsChan,)h
-(but)227 4172 y(will)f(not)g(a\013ect)g(other)f(\(non-DSS\))h(header)f
-(cards.)45 b(If)31 b(a)g(destructiv)n(e)f(read)g(of)g(a)h(DSS)g(enco)r
-(ded)g(Ob)5 b(ject)30 b(has)227 4271 y(previously)h(o)r(ccurred,)g
-(then)h(an)g(attempt)g(will)g(b)r(e)g(made)f(to)h(store)f(the)h(FITS)g
-(header)e(cards)h(bac)n(k)g(in)h(their)227 4371 y(original)26
-b(lo)r(cations.)227 4497 y(If)h(an)g(attempt)g(to)f(simplify)i(a)e(F)-7
-b(rameSet)26 b(to)h(conform)f(to)g(the)h(DSS)g(mo)r(del)g(fails)g(\(or)
-f(if)h(the)g(Ob)5 b(ject)26 b(supplied)227 4597 y(is)33
-b(not)f(a)g(F)-7 b(rameSet\),)34 b(then)f(no)f(data)g(will)g(b)r(e)h
-(written)g(to)f(the)h(FitsChan)g(and)f(astW)-7 b(rite)32
-b(will)h(return)f(zero.)227 4697 y(No)c(error)d(will)j(result.)-2
-4850 y Fd(The)k(FITS-W)m(CS)h(Enco)s(ding)n(:)227 4996
-y Fj(The)k(FITS-W)n(CS)g(con)n(v)n(en)n(tion)e(uses)h(FITS)h(header)e
-(cards)h(to)g(describ)r(e)h(the)g(relationship)e(b)r(et)n(w)n(een)i
-(pixels)227 5095 y(in)30 b(an)f(image)f(\(not)h(necessarily)f
-(2-dimensional\))g(and)h(one)g(or)f(more)g(related)h
-Ft(")p Fj(w)n(orld)e(co)r(ordinate)h(systems)p Ft(")p
-Fj(.)227 5195 y(The)39 b(FITS-W)n(CS)g(enco)r(ding)f(ma)n(y)g(only)h(b)
-r(e)g(used)g(to)f(store)g(a)h(single)f(AST)h(Ob)5 b(ject)39
-b(in)g(an)n(y)f(set)h(of)f(FITS)227 5295 y(header)27
-b(cards,)g(and)h(that)g(Ob)5 b(ject)28 b(m)n(ust)g(b)r(e)h(a)e(F)-7
-b(rameSet)28 b(whic)n(h)g(conforms)f(to)g(the)i(FITS-W)n(CS)f(mo)r(del)
-g(\(the)227 5394 y(F)-7 b(rameSet)27 b(ma)n(y)-7 b(,)27
-b(ho)n(w)n(ev)n(er,)e(con)n(tain)h(m)n(ultiple)i(F)-7
-b(rames)26 b(whic)n(h)h(will)g(b)r(e)h(result)f(in)g(m)n(ultiple)g
-(FITS)h Ft(")p Fj(alternate)227 5494 y(axis)h(descriptions)p
-Ft(")p Fj(\).)40 b(Details)29 b(of)g(the)g(use)g(made)g(b)n(y)g(this)g
-(Enco)r(ding)f(of)h(the)h(con)n(v)n(en)n(tions)d(describ)r(ed)i(in)g
-(the)227 5593 y(FITS-W)n(CS)22 b(pap)r(ers)g(are)f(giv)n(en)g(in)h(the)
-h(app)r(endix)f Ft(")p Fj(FITS-W)n(CS)g(Co)n(v)n(erage)p
-Ft(")c Fj(of)k(this)h(do)r(cumen)n(t.)35 b(A)22 b(few)h(main)227
-5693 y(p)r(oin)n(ts)28 b(are)e(describ)r(ed)i(b)r(elo)n(w.)p
-eop end
-%%Page: 410 420
-TeXDict begin 410 419 bop 0 52 a FF(410)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(The)26 b(rotation)e(and)i(scaling)e(of)i(the)g(in)n(termediate)f
-(w)n(orld)g(co)r(ordinate)f(system)h(can)h(b)r(e)g(sp)r(eci\014ed)g
-(using)f(either)227 451 y Ft(")p Fj(CDi)p Ft(_)p Fj(j)p
-Ft(")30 b Fj(k)n(eyw)n(ords,)f(or)h Ft(")p Fj(PCi)p Ft(_)p
-Fj(j)p Ft(")f Fj(together)g(with)i Ft(")p Fj(CDEL)-7
-b(Ti)p Ft(")30 b Fj(k)n(eyw)n(ords.)43 b(When)31 b(writing)f(a)g(F)-7
-b(rameSet)30 b(to)227 551 y(a)f(FitsChan,)g(the)g(the)g(v)-5
-b(alue)28 b(of)h(the)g(CDMatrix)g(attribute)g(of)f(the)h(FitsChan)g
-(determines)g(whic)n(h)f(system)h(is)227 650 y(used.)227
-782 y(In)d(addition,)f(this)g(enco)r(ding)g(supp)r(orts)g(the)g
-Ft(")p Fj(T)-7 b(AN)26 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fj(pro)5 b(jection)24 b(whic)n(h)227 882 y(w)n(as)38
-b(included)h(in)g(a)f(draft)g(of)h(the)g(FITS-W)n(CS)g(pap)r(er,)h(but)
-g(w)n(as)d(not)i(presen)n(t)f(in)h(the)g(\014nal)f(v)n(ersion.)68
-b(A)227 982 y Ft(")p Fj(T)-7 b(AN)38 b(with)h(p)r(olynomial)e
-(correction)f(terms)p Ft(")h Fj(pro)5 b(jection)37 b(is)g(represen)n
-(ted)g(using)g(a)h(WcsMap)f(with)h(t)n(yp)r(e)227 1081
-y(AST)p Ft(__)p Fj(TPN)28 b(\(rather)g(than)h(AST)p Ft(__)p
-Fj(T)-7 b(AN)28 b(whic)n(h)h(is)f(used)h(to)f(represen)n(t)f(simple)i
-(T)-7 b(AN)29 b(pro)5 b(jections\).)39 b(When)227 1181
-y(reading)20 b(a)g(FITS)g(header,)h(a)f(CTYPE)g(k)n(eyw)n(ord)f(v)-5
-b(alue)20 b(including)g(a)g Ft(")p Fj(-T)-7 b(AN)p Ft(")20
-b Fj(co)r(de)h(results)e(in)i(an)f(AST)p Ft(__)p Fj(TPN)227
-1280 y(pro)5 b(jection)28 b(if)h(there)f(are)f(an)n(y)h(pro)5
-b(jection)27 b(parameters)g(\(giv)n(en)h(b)n(y)g(the)g(PVi)p
-Ft(_)p Fj(m)h(k)n(eyw)n(ords\))d(asso)r(ciated)h(with)227
-1380 y(the)35 b(latitude)f(axis,)h(or)e(if)i(there)f(are)f(pro)5
-b(jection)33 b(parameters)f(asso)r(ciated)h(with)h(the)h(longitude)f
-(axis)f(for)g(m)227 1480 y(greater)28 b(than)h(4.)41
-b(When)30 b(writing)f(a)g(F)-7 b(rameSet)29 b(to)g(a)f(FITS)i(header,)f
-(an)g(AST)p Ft(__)p Fj(TPN)f(pro)5 b(jection)28 b(giv)n(es)g(rise)227
-1579 y(to)c(a)g(CTYPE)f(v)-5 b(alue)24 b(including)h(the)f(normal)f
-Ft(")p Fj(-T)-7 b(AN)p Ft(")24 b Fj(co)r(de,)g(but)h(the)g(pro)5
-b(jection)23 b(parameters)f(are)h(stored)g(in)227 1679
-y(k)n(eyw)n(ords)e(with)i(names)f Ft(")p Fj(QVi)p Ft(_)p
-Fj(m)p Ft(")p Fj(,)g(instead)g(of)h(the)g(usual)f Ft(")p
-Fj(PVi)p Ft(_)p Fj(m)p Ft(")p Fj(.)34 b(Since)22 b(these)h(QV)f
-(parameters)f(are)h(not)227 1779 y(part)28 b(of)g(the)h(FITS-W)n(CS)f
-(standard)f(they)h(will)h(b)r(e)f(ignored)f(b)n(y)h(other)g(non-AST)g
-(soft)n(w)n(are,)e(resulting)i(in)g(the)227 1878 y(W)n(CS)h(b)r(eing)g
-(in)n(terpreted)f(as)g(a)g(simple)h(T)-7 b(AN)30 b(pro)5
-b(jection)27 b(without)i(an)n(y)f(corrections.)39 b(This)28
-b(should)h(b)r(e)g(seen)227 1978 y(as)k(an)g(in)n(terim)g(solution)g
-(un)n(til)g(suc)n(h)g(time)h(as)f(an)g(agreed)e(metho)r(d)j(for)f
-(describing)f(pro)5 b(jection)33 b(distortions)227 2078
-y(within)c(FITS-W)n(CS)e(has)g(b)r(een)h(published.)227
-2210 y(AST)38 b(extends)g(the)g(range)e(of)h(celestial)g(co)r(ordinate)
-g(sytstems)g(whic)n(h)h(ma)n(y)f(b)r(e)g(describ)r(ed)h(using)f(this)h
-(en-)227 2309 y(co)r(ding)33 b(b)n(y)g(inclusion)h(of)f(the)h(allo)n
-(wing)e(the)i(use)f(of)g Ft(")p Fj(AZ{)p Ft(")f Fj(and)i
-Ft(")p Fj(EL{)p Ft(")d Fj(as)i(the)h(co)r(ordinate)e(sp)r
-(eci\014cation)227 2409 y(within)f(CTYPE)e(v)-5 b(alues.)44
-b(These)30 b(form)g(a)g(longitude/latitude)f(pair)h(of)g(axes)f(whic)n
-(h)h(describ)r(e)g(azim)n(uth)g(and)227 2509 y(elev)-5
-b(ation.)37 b(The)27 b(geographic)e(p)r(osition)i(of)h(the)f(observ)n
-(er)f(should)h(b)r(e)g(supplied)h(using)f(the)h(OBSGEO-X/Y/Z)227
-2608 y(k)n(eyw)n(ords)f(describ)r(ed)i(in)g(FITS-W)n(CS)g(pap)r(er)f(I)
-r(I)r(I.)i(Curren)n(tly)-7 b(,)28 b(a)h(simple)g(mo)r(del)g(is)g(used)g
-(whic)n(h)g(includes)g(di-)227 2708 y(urnal)f(ab)r(erration,)e(but)j
-(ignores)d(atmospheric)h(refraction,)g(p)r(olar)g(motion,)h(etc.)39
-b(These)27 b(ma)n(y)g(b)r(e)i(added)f(in)g(a)227 2807
-y(leter)g(release.)227 2940 y(When)21 b(reading)e(a)h(FITS-W)n(CS)g
-(enco)r(ded)g(Ob)5 b(ject)20 b(\(using)g(astRead\),)h(the)g(FitsChan)f
-(concerned)f(m)n(ust)h(initially)227 3039 y(b)r(e)38
-b(p)r(ositioned)f(at)g(the)h(\014rst)f(card)f(\(its)i(Card)f(attribute)
-g(m)n(ust)h(equal)e(1\))h(and)h(the)f(result)g(of)h(the)f(read,)i(if)
-227 3139 y(successful,)34 b(will)f(alw)n(a)n(ys)d(b)r(e)j(a)g(p)r(oin)n
-(ter)f(to)g(a)h(F)-7 b(rameSet.)51 b(The)33 b(base)f(F)-7
-b(rame)32 b(of)h(this)g(F)-7 b(rameSet)32 b(represen)n(ts)227
-3239 y(FITS-W)n(CS)k(pixel)h(co)r(ordinates,)f(and)g(the)h(curren)n(t)e
-(F)-7 b(rame)36 b(represen)n(ts)e(the)j(ph)n(ysical)e(co)r(ordinate)g
-(system)227 3338 y(describ)r(ed)j(b)n(y)f(the)i(FITS-W)n(CS)f(primary)e
-(axis)h(descriptions.)67 b(If)39 b(secondary)d(axis)h(descriptions)g
-(are)g(also)227 3438 y(presen)n(t,)e(then)f(the)g(F)-7
-b(rameSet)33 b(ma)n(y)g(con)n(tain)f(additional)h(\(non-curren)n(t\))g
-(F)-7 b(rames)33 b(whic)n(h)g(represen)n(t)g(these.)227
-3537 y(Suc)n(h)23 b(a)f(read)g(is)h(alw)n(a)n(ys)e(destructiv)n(e)h
-(and)h(causes)f(the)h(FITS)g(header)f(cards)f(required)h(for)h(the)g
-(construction)f(of)227 3637 y(the)28 b(F)-7 b(rameSet)28
-b(to)f(b)r(e)h(remo)n(v)n(ed)f(from)g(the)h(FitsChan,)g(whic)n(h)g(is)f
-(then)h(left)h(p)r(ositioned)e(at)h(the)g Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(.)227 3737 y(A)d(subsequen)n(t)f(read)f(using)h(the)h(same)e
-(enco)r(ding)h(will)g(therefore)g(not)g(return)g(another)f(F)-7
-b(rameSet,)25 b(ev)n(en)e(if)i(the)227 3836 y(FitsChan)j(is)f(rew)n
-(ound.)227 3969 y(When)e(astW)-7 b(rite)24 b(is)g(used)h(to)f(store)f
-(a)h(F)-7 b(rameSet)24 b(using)g(FITS-W)n(CS)h(enco)r(ding,)f(an)g
-(attempt)h(is)g(\014rst)f(made)g(to)227 4068 y(simplify)k(the)g(F)-7
-b(rameSet)28 b(to)f(see)g(if)h(it)g(conforms)f(to)g(the)h(FITS-W)n(CS)g
-(mo)r(del.)37 b(If)28 b(this)f(simpli\014cation)h(pro)r(cess)227
-4168 y(succeeds)h(\(as)f(it)h(often)g(should,)g(as)f(the)i(mo)r(del)f
-(is)f(reasonably)f(\015exible\),)j(a)e(description)g(of)h(the)g(F)-7
-b(rameSet)29 b(is)227 4267 y(written)j(to)f(the)h(FitsChan)g(using)f
-(appropriate)f(FITS)h(header)g(cards.)47 b(The)32 b(base)f(F)-7
-b(rame)31 b(of)g(the)h(F)-7 b(rameSet)227 4367 y(is)30
-b(used)g(to)g(form)f(the)h(FITS-W)n(CS)g(pixel)g(co)r(ordinate)f
-(system)g(and)h(the)g(curren)n(t)f(F)-7 b(rame)30 b(giv)n(es)e(the)i
-(ph)n(ysical)227 4467 y(co)r(ordinate)i(system)h(to)g(b)r(e)g(describ)r
-(ed)g(b)n(y)g(the)g(FITS-W)n(CS)h(primary)d(axis)i(descriptions.)52
-b(An)n(y)33 b(additional)227 4566 y(F)-7 b(rames)26 b(in)h(the)g(F)-7
-b(rameSet)26 b(ma)n(y)g(b)r(e)h(used)f(to)h(construct)f(secondary)f
-(axis)g(descriptions,)h(where)g(appropriate.)227 4699
-y(A)e(successful)f(write)h(op)r(eration)e(will)i(o)n(v)n(er-write)d(an)
-n(y)i(existing)g(FITS-W)n(CS)g(enco)r(ded)h(data)f(in)h(the)f
-(FitsChan,)227 4798 y(but)37 b(will)g(not)g(a\013ect)g(other)f
-(\(non-FITS-W)n(CS\))g(header)g(cards.)63 b(If)37 b(a)f(destructiv)n(e)
-g(read)g(of)g(a)g(FITS-W)n(CS)227 4898 y(enco)r(ded)30
-b(Ob)5 b(ject)29 b(has)g(previously)f(o)r(ccurred,)h(then)h(an)g
-(attempt)g(will)f(b)r(e)h(made)g(to)f(store)g(the)h(FITS)f(header)227
-4997 y(cards)22 b(bac)n(k)h(in)g(their)g(original)f(lo)r(cations.)34
-b(Otherwise,)23 b(the)h(new)f(cards)f(will)h(b)r(e)h(inserted)f(follo)n
-(wing)f(an)n(y)g(other)227 5097 y(FITS-W)n(CS)30 b(related)g(header)f
-(cards)f(presen)n(t)i(or,)f(failing)h(that,)h(in)f(fron)n(t)f(of)h(the)
-g(curren)n(t)f(card)g(\(as)h(giv)n(en)f(b)n(y)227 5197
-y(the)f(Card)f(attribute\).)227 5329 y(If)32 b(an)f(attempt)g(to)g
-(simplify)h(a)e(F)-7 b(rameSet)31 b(to)g(conform)g(to)f(the)i(FITS-W)n
-(CS)f(mo)r(del)g(fails)g(\(or)g(if)g(the)h(Ob)5 b(ject)227
-5429 y(supplied)25 b(is)g(not)g(a)g(F)-7 b(rameSet\),)25
-b(then)g(no)g(data)f(will)h(b)r(e)h(written)f(to)f(the)i(FitsChan)f
-(and)f(astW)-7 b(rite)25 b(will)g(return)227 5528 y(zero.)36
-b(No)28 b(error)d(will)j(result.)-2 5693 y Fd(The)k(FITS-IRAF)h(Enco)s
-(ding)n(:)p eop end
-%%Page: 411 421
-TeXDict begin 411 420 bop 3643 52 a FF(411)227 351 y
-Fj(The)36 b(FITS-IRAF)g(enco)r(ding)f(can,)j(for)d(most)g(purp)r(oses,)
-i(b)r(e)f(considered)f(as)g(a)g(subset)h(of)f(the)h(FITS-W)n(CS)227
-451 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h(di\013ers)
-f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d(used.)36
-b(It)24 b(is)h(used)f(in)g(exactly)227 551 y(the)k(same)f(w)n(a)n(y)g
-(and)g(has)g(the)h(same)f(restrictions,)g(but)h(with)g(the)g(addition)f
-(of)h(the)g(follo)n(wing:)340 804 y Fi(\017)45 b Fj(The)33
-b(only)g(celestial)f(co)r(ordinate)g(systems)g(that)h(ma)n(y)g(b)r(e)g
-(represen)n(ted)f(are)f(equatorial,)i(galactic)f(and)427
-904 y(ecliptic,)340 1032 y Fi(\017)45 b Fj(Sky)34 b(pro)5
-b(jections)32 b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f
-(asso)r(ciated)f(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-1132 y(their)28 b(default)g(v)-5 b(alues.)340 1260 y
-Fi(\017)45 b Fj(Secondary)30 b(axis)h(descriptions)g(are)g(not)g(supp)r
-(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 1359 y(only)c(information)g(from)h(the)g(base)
-f(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)227
-1517 y(Note)36 b(that)g(this)f(enco)r(ding)h(is)f(pro)n(vided)f(mainly)
-i(as)f(an)g(in)n(terim)g(measure)g(to)g(pro)n(vide)f(a)h(more)g(stable)
-g(al-)227 1616 y(ternativ)n(e)e(to)g(the)g(FITS-W)n(CS)h(enco)r(ding)e
-(un)n(til)i(the)g(FITS)f(standard)f(for)h(enco)r(ding)g(W)n(CS)g
-(information)g(is)227 1716 y(\014nalised.)49 b(The)31
-b(name)h Ft(")p Fj(FITS-IRAF)p Ft(")f Fj(indicates)g(the)h(general)e(k)
-n(eyw)n(ord)g(con)n(v)n(en)n(tions)g(used)h(and)g(do)r(es)h(not)227
-1815 y(imply)h(that)g(this)g(enco)r(ding)f(will)g(necessarily)f(supp)r
-(ort)h(all)h(features)e(of)i(the)g(W)n(CS)f(sc)n(heme)g(used)h(b)n(y)f
-(IRAF)227 1915 y(soft)n(w)n(are.)40 b(Nev)n(ertheless,)29
-b(an)g(attempt)h(has)f(b)r(een)g(made)g(to)g(supp)r(ort)g(a)g(few)h
-(suc)n(h)f(features)f(where)h(they)h(are)227 2015 y(kno)n(wn)d(to)h(b)r
-(e)g(used)f(b)n(y)h(imp)r(ortan)n(t)f(sources)f(of)h(data.)227
-2137 y(When)g(writing)f(a)f(F)-7 b(rameSet)26 b(using)g(the)g
-(FITS-IRAF)h(enco)r(ding,)f(axis)f(rotations)g(are)g(sp)r(eci\014ed)i
-(b)n(y)e(a)h(matrix)227 2236 y(of)j(FITS)h(k)n(eyw)n(ords)d(of)i(the)h
-(form)f Ft(")p Fj(CDi)p Ft(_)p Fj(j)p Ft(")p Fj(,)g(where)g
-Ft(")p Fj(i)p Ft(")f Fj(and)h Ft(")p Fj(j)p Ft(")g Fj(are)f(single)h
-(digits.)42 b(The)29 b(alternativ)n(e)f(form)227 2336
-y Ft(")p Fj(CDiiijjj)p Ft(")p Fj(,)h(whic)n(h)e(is)h(also)e(in)i(use,)g
-(is)f(recognised)f(when)i(reading)e(an)i(Ob)5 b(ject,)27
-b(but)h(is)g(nev)n(er)f(written.)227 2458 y(In)36 b(addition,)h(the)f
-(exp)r(erimen)n(tal)f(IRAF)h Ft(")p Fj(ZPX)p Ft(")e Fj(and)h
-Ft(")p Fj(TNX)p Ft(")g Fj(sky)g(pro)5 b(jections)34 b(will)i(b)r(e)f
-(accepted)g(when)227 2558 y(reading,)25 b(but)i(will)e(nev)n(er)g(b)r
-(e)h(written)g(\(the)h(corresp)r(onding)c(FITS)j Ft(")p
-Fj(ZPN)p Ft(")f Fj(or)g Ft(")p Fj(distorted)g(T)-7 b(AN)p
-Ft(")26 b Fj(pro)5 b(jection)227 2658 y(b)r(eing)29 b(used)g
-(instead\).)42 b(Ho)n(w)n(ev)n(er,)27 b(there)i(are)f(restrictions)f
-(on)i(the)h(use)e(of)h(these)g(exp)r(erimen)n(tal)g(pro)5
-b(jections.)227 2757 y(F)-7 b(or)34 b Ft(")p Fj(ZPX)p
-Ft(")p Fj(,)g(longitude)f(and)h(latitude)g(correction)e(surfaces)h
-(\(app)r(earing)g(as)g Ft(")p Fj(lngcor)p Ft(")f Fj(or)h
-Ft(")p Fj(latcor)p Ft(")f Fj(terms)227 2857 y(in)k(the)g(IRAF-sp)r
-(eci\014c)f Ft(")p Fj(W)-9 b(A)i(T)p Ft(")35 b Fj(k)n(eyw)n(ords\))f
-(are)g(not)i(supp)r(orted.)60 b(F)-7 b(or)34 b Ft(")p
-Fj(TNX)p Ft(")h Fj(pro)5 b(jections,)36 b(only)f(cubic)227
-2956 y(surfaces)g(enco)r(ded)h(as)f(simple)h(p)r(olynomials)f(with)h
-Ft(")p Fj(half)g(cross-terms)p Ft(")d Fj(are)i(supp)r(orted.)61
-b(If)37 b(an)e(un-usable)227 3056 y Ft(")p Fj(TNX)p Ft(")23
-b Fj(or)f Ft(")p Fj(ZPX)p Ft(")g Fj(pro)5 b(jection)22
-b(is)h(encoun)n(tered)f(while)h(reading)f(from)g(a)h(FitsChan,)h(a)f
-(simpler)f(form)h(of)g(T)-7 b(AN)227 3156 y(or)22 b(ZPN)g(pro)5
-b(jection)21 b(is)i(used)f(whic)n(h)h(ignores)e(the)i(unsupp)r(orted)f
-(features)g(and)g(ma)n(y)g(therefore)g(b)r(e)h(inaccurate.)227
-3255 y(If)j(this)f(happ)r(ens,)g(a)g(w)n(arning)f(message)f(is)i(added)
-g(to)g(the)g(con)n(ten)n(ts)f(of)h(the)g(FitsChan)g(as)g(a)f(set)h(of)g
-(cards)f(using)227 3355 y(the)k(k)n(eyw)n(ord)e Ft(")p
-Fj(ASTW)-9 b(ARN)p Ft(")p Fj(.)227 3477 y(Y)i(ou)32 b(should)f(not)g
-(normally)g(attempt)h(to)f(mix)h(the)g(foreign)e(FITS)i(enco)r(dings)f
-(within)h(the)g(same)e(FitsChan,)227 3577 y(since)e(there)f(is)h(a)f
-(risk)g(that)g(k)n(eyw)n(ord)f(clashes)h(ma)n(y)g(o)r(ccur.)-2
-3721 y Fd(The)32 b(FITS-PC)h(Enco)s(ding)n(:)227 3867
-y Fj(The)38 b(FITS-PC)e(enco)r(ding)h(can,)j(for)c(most)h(purp)r(oses,)
-i(b)r(e)f(considered)e(as)h(equiv)-5 b(alen)n(t)37 b(to)g(the)g(FITS-W)
-n(CS)227 3967 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4067
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions.)-2
-4211 y Fd(The)32 b(FITS-AIPS)i(Enco)s(ding)n(:)227 4358
-y Fj(The)e(FITS-AIPS)f(enco)r(ding)g(can,)h(for)f(most)g(purp)r(oses,)h
-(b)r(e)g(considered)e(as)h(equiv)-5 b(alen)n(t)31 b(to)h(the)f(FITS-W)n
-(CS)227 4457 y(enco)r(ding)24 b(\(ab)r(o)n(v)n(e\),)g(although)g(it)h
-(di\013ers)f(in)g(the)h(details)f(of)g(the)g(FITS)h(k)n(eyw)n(ords)d
-(used.)36 b(It)24 b(is)h(used)f(in)g(exactly)227 4557
-y(the)k(same)f(w)n(a)n(y)g(and)g(has)g(the)h(same)f(restrictions,)g
-(but)h(with)g(the)g(addition)f(of)h(the)g(follo)n(wing:)340
-4811 y Fi(\017)45 b Fj(The)33 b(only)g(celestial)f(co)r(ordinate)g
-(systems)g(that)h(ma)n(y)g(b)r(e)g(represen)n(ted)f(are)f(equatorial,)i
-(galactic)f(and)427 4910 y(ecliptic,)340 5038 y Fi(\017)45
-b Fj(Sp)r(ectral)33 b(axes)g(can)g(only)g(b)r(e)h(represen)n(ted)e(if)i
-(they)f(represen)n(t)f(frequency)-7 b(,)35 b(radio)d(v)n(elo)r(cit)n(y)
-h(or)f(optical)427 5138 y(v)n(elo)r(cit)n(y)-7 b(,)36
-b(and)f(are)e(linearly)h(sampled)h(in)g(frequency)-7
-b(.)58 b(In)35 b(addition,)h(the)g(standard)d(of)i(rest)f(m)n(ust)h(b)r
-(e)427 5238 y(LSRK,)28 b(LSRD,)g(barycen)n(tric)e(or)h(geo)r(cen)n
-(tric.)340 5366 y Fi(\017)45 b Fj(Sky)34 b(pro)5 b(jections)32
-b(can)i(b)r(e)g(represen)n(ted)e(only)i(if)g(an)n(y)f(asso)r(ciated)f
-(pro)5 b(jection)33 b(parameters)f(are)h(set)h(to)427
-5465 y(their)28 b(default)g(v)-5 b(alues.)340 5593 y
-Fi(\017)45 b Fj(The)25 b(AIT,)g(SFL)g(and)f(MER)g(pro)5
-b(jections)23 b(can)i(only)f(b)r(e)h(written)f(if)h(the)g(CR)-9
-b(V)g(AL)25 b(k)n(eyw)n(ords)d(are)i(zero)f(for)427 5693
-y(b)r(oth)28 b(longitude)g(and)f(latitude)h(axes.)p eop
-end
-%%Page: 412 422
-TeXDict begin 412 421 bop 0 52 a FF(412)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fi(\017)45 b Fj(Secondary)30 b(axis)h(descriptions)g(are)g(not)g
-(supp)r(orted,)i(so)d(when)i(writing)f(a)h(F)-7 b(rameSet)31
-b(to)g(a)g(FitsChan,)427 451 y(only)c(information)g(from)h(the)g(base)f
-(and)g(curren)n(t)g(F)-7 b(rames)27 b(will)g(b)r(e)h(stored.)340
-585 y Fi(\017)45 b Fj(If)25 b(there)f(are)f(more)g(than)i(2)f(axes)f
-(in)h(the)h(base)e(and)h(curren)n(t)g(F)-7 b(rames,)24
-b(an)n(y)f(rotation)g(m)n(ust)i(b)r(e)f(restricted)427
-684 y(to)k(the)g(celestial)f(plane,)g(and)h(m)n(ust)f(in)n(v)n(olv)n(e)
-f(no)i(shear.)-2 848 y Fd(The)k(FITS-AIPS)p Fj(++)h Fd(Enco)s(ding)n(:)
-227 994 y Fj(The)d(FITS-AIPS++)e(enco)r(ding)h(is)g(based)f(on)h(the)h
-(FITS-AIPS)f(enco)r(ding,)g(but)h(includes)f(some)g(features)g(of)227
-1094 y(the)23 b(FITS-IRAF)g(and)f(FITS-PC)g(enco)r(dings.)35
-b(Sp)r(eci\014cally)-7 b(,)23 b(an)n(y)f(celestial)g(pro)5
-b(jections)21 b(supp)r(orted)h(b)n(y)h(FITS-)227 1193
-y(PC)h(ma)n(y)f(b)r(e)h(used,)h(including)f(those)g(whic)n(h)f(require)
-g(parameterisation,)g(and)h(the)g(axis)f(rotation)g(and)h(scaling)227
-1293 y(ma)n(y)31 b(b)r(e)i(sp)r(eci\014ed)f(using)f(CDi)p
-Ft(_)p Fj(j)i(k)n(eyw)n(ords.)47 b(When)33 b(writing)e(a)h(FITS)g
-(header,)g(rotation)f(will)h(b)r(e)g(sp)r(eci\014ed)227
-1392 y(using)c(CR)n(OT)-7 b(A/CDEL)g(T)26 b(k)n(eyw)n(ords)g(if)i(p)r
-(ossible,)f(otherwise)g(CDi)p Ft(_)p Fj(j)h(k)n(eyw)n(ords)d(will)j(b)r
-(e)g(used)g(instead.)-2 1544 y Fd(The)k(FITS-CLASS)h(Enco)s(ding)n(:)
-227 1690 y Fj(The)24 b(FITS-CLASS)g(enco)r(ding)f(uses)h(the)g(con)n(v)
-n(en)n(tions)e(of)i(the)g(CLASS)g(pro)5 b(ject.)35 b(These)23
-b(are)g(describ)r(ed)g(in)h(the)227 1789 y(section)j
-Ft(")p Fj(Dev)n(elop)r(er)g(Man)n(ual)p Ft(")p Fj(/)p
-Ft(")p Fj(CLASS)f(FITS)i(F)-7 b(ormat)p Ft(")26 b Fj(con)n(tained)h(in)
-h(the)g(CLASS)g(do)r(cumen)n(tation)f(at:)227 1915 y(h)n
-(ttp://www.iram.fr/IRAMFR/GILD)n(AS/do)r(c/h)n(tml/class-h)n
-(tml/class.h)n(tml.)227 2040 y(This)h(enco)r(ding)f(is)h(similar)e(to)i
-(FITS-AIPS)f(with)h(the)g(follo)n(wing)f(restrictions:)340
-2304 y Fi(\017)45 b Fj(When)23 b(a)e(Sp)r(ecF)-7 b(rame)22
-b(is)f(created)g(b)n(y)h(reading)f(a)g(FITS-CLASS)h(header,)g(the)h
-(attributes)e(describing)g(the)427 2403 y(observ)n(er's)f(p)r(osition)i
-(\(ObsLat,)h(ObsLon)e(and)h(ObsAlt\))h(are)e(left)i(unset)f(b)r(ecause)
-g(the)g(CLASS)h(enco)r(ding)427 2503 y(do)r(es)32 b(not)h(sp)r(ecify)g
-(these)f(v)-5 b(alues.)52 b(Con)n(v)n(ersions)30 b(to)i(or)g(from)g
-(the)h(top)r(o)r(cen)n(tric)f(standard)g(of)g(rest)g(will)427
-2603 y(therefore)21 b(b)r(e)i(inaccurate)e(\(t)n(ypically)g(b)n(y)h(up)
-g(to)g(ab)r(out)g(0.5)f(km/s\))h(unless)f(suitable)h(v)-5
-b(alues)22 b(are)f(assigned)427 2702 y(to)28 b(these)f(attributes)h
-(after)f(the)h(F)-7 b(rameSet)27 b(has)h(b)r(een)g(created.)340
-2836 y Fi(\017)45 b Fj(When)24 b(writing)e(a)h(F)-7 b(rameSet)23
-b(to)f(a)h(FITS-CLASS)g(header,)g(the)h(curren)n(t)e(F)-7
-b(rame)22 b(in)h(the)h(F)-7 b(rameSet)22 b(m)n(ust)427
-2936 y(ha)n(v)n(e)f(at)g(least)h(3)f(W)n(CS)h(axes,)g(of)g(whic)n(h)f
-(one)h(m)n(ust)g(b)r(e)g(a)f(linear)g(sp)r(ectral)g(axis.)34
-b(The)22 b(sp)r(ectral)f(axis)g(in)h(the)427 3035 y(created)29
-b(header)g(will)h(alw)n(a)n(ys)e(describ)r(e)h(frequency)-7
-b(.)43 b(If)30 b(the)g(sp)r(ectral)f(axis)g(in)h(the)g(supplied)g(F)-7
-b(rameSet)427 3135 y(refers)27 b(to)g(some)g(other)g(system)h(\(e.g.)36
-b(radio)27 b(v)n(elo)r(cit)n(y)-7 b(,)27 b(etc\),)h(then)g(it)g(will)g
-(b)r(e)g(con)n(v)n(erted)e(to)h(frequency)-7 b(.)340
-3268 y Fi(\017)45 b Fj(There)23 b(m)n(ust)g(b)r(e)g(a)f(pair)g(of)h
-(celestial)f(axes)g(-)h(either)g(\(RA,Dec\))h(or)e(\(GLON,GLA)-7
-b(T\).)23 b(RA)h(and)e(Dec)h(m)n(ust)427 3368 y(b)r(e)28
-b(either)g(FK4/B1950)c(or)j(FK5/J2000.)340 3502 y Fi(\017)45
-b Fj(A)35 b(limited)g(range)e(of)h(pro)5 b(jection)34
-b(co)r(des)g(\(T)-7 b(AN,)35 b(AR)n(C,)f(STG,)h(AIT,)g(SFL,)f(SIN\))h
-(can)f(b)r(e)h(used.)57 b(F)-7 b(or)427 3601 y(AIT)30
-b(and)f(SFL,)g(the)h(reference)e(p)r(oin)n(t)i(m)n(ust)f(b)r(e)h(at)f
-(the)g(origin)f(of)h(longitude)g(and)g(latitude.)43 b(F)-7
-b(or)28 b(SIN,)427 3701 y(the)g(asso)r(ciated)f(pro)5
-b(jection)26 b(parameters)g(m)n(ust)i(b)r(oth)g(b)r(e)g(zero.)340
-3835 y Fi(\017)45 b Fj(No)28 b(rotation)f(of)i(the)f(celestial)g(axes)f
-(is)h(allo)n(w)n(ed,)g(unless)g(the)g(spatial)g(axes)f(are)g
-(degenerate)g(\(i.e.)39 b(co)n(v)n(er)427 3934 y(only)27
-b(a)h(single)f(pixel\).)340 4068 y Fi(\017)45 b Fj(The)34
-b(frequency)g(axis)f(in)h(the)h(created)e(header)g(will)h(alw)n(a)n(ys)
-e(describ)r(e)i(frequency)g(in)g(the)g(source)f(rest)427
-4168 y(frame.)53 b(If)34 b(the)f(supplied)h(F)-7 b(rameSet)33
-b(uses)f(some)h(other)f(standard)h(of)g(rest)f(then)i(suitable)f(con)n
-(v)n(ersion)427 4267 y(will)28 b(b)r(e)g(applied.)340
-4401 y Fi(\017)45 b Fj(The)35 b(source)e(v)n(elo)r(cit)n(y)g(m)n(ust)i
-(b)r(e)f(de\014ned.)58 b(In)35 b(other)e(w)n(ords,)i(the)g(Sp)r(ecF)-7
-b(rame)34 b(attributes)g(SourceV)-7 b(el)427 4501 y(and)28
-b(SourceVRF)f(m)n(ust)h(ha)n(v)n(e)e(b)r(een)i(assigned)f(v)-5
-b(alues.)340 4634 y Fi(\017)45 b Fj(The)40 b(frequency)g(axis)f(in)i(a)
-e(FITS-CLASS)i(header)e(do)r(es)h(not)g(represen)n(t)f(absolute)g
-(frequency)-7 b(,)43 b(but)427 4734 y(instead)28 b(represen)n(ts)e
-(o\013sets)h(from)g(the)h(rest)f(frequency)h(in)f(the)h(standard)f(of)h
-(rest)f(of)g(the)h(source.)227 4898 y(When)23 b(writing)f(a)g(F)-7
-b(rameSet)22 b(out)g(using)g(FITS-CLASS)h(enco)r(ding,)g(the)f(curren)n
-(t)g(F)-7 b(rame)22 b(ma)n(y)f(b)r(e)i(temp)r(orarily)227
-4997 y(mo)r(di\014ed)31 b(if)f(this)g(will)g(allo)n(w)f(the)h(header)f
-(to)h(b)r(e)g(pro)r(duced.)44 b(If)30 b(this)g(is)g(done,)g(the)h(asso)
-r(ciated)d(pixel-)p Fl(>)p Fj(W)n(CS)227 5097 y(Mapping)34
-b(will)g(also)f(b)r(e)i(mo)r(di\014ed)f(to)g(tak)n(e)g(accoun)n(t)f(of)
-h(the)h(c)n(hanges)d(to)i(the)h(F)-7 b(rame.)56 b(The)34
-b(mo)r(di\014cations)227 5196 y(p)r(erformed)19 b(include)h
-(re-ordering)d(axes)h(\(W)n(CS)i(axes,)g(not)f(pixel)h(axes\),)g(c)n
-(hanging)e(sp)r(ectral)h(co)r(ordinate)f(system)227 5296
-y(and)24 b(standard)f(of)h(rest,)g(c)n(hanging)f(the)h(celestial)f(co)r
-(ordinate)g(system)h(and)f(reference)g(equino)n(x,)h(and)g(c)n(hanging)
-227 5396 y(axis)j(units.)-2 5547 y Fd(The)32 b(NA)-8
-b(TIVE)33 b(Enco)s(ding)n(:)227 5693 y Fj(The)27 b(NA)-7
-b(TIVE)26 b(enco)r(ding)h(ma)n(y)e(b)r(e)i(used)f(to)h(store)e(a)h
-(description)g(of)g(an)n(y)g(class)f(of)i(AST)f(Ob)5
-b(ject)27 b(in)f(the)h(form)p eop end
-%%Page: 413 423
-TeXDict begin 413 422 bop 3643 52 a FF(413)227 351 y
-Fj(of)29 b(FITS)g(header)f(cards,)g(and)h(\(for)g(most)f(practical)g
-(purp)r(oses\))g(an)n(y)g(n)n(um)n(b)r(er)h(of)g(these)g(Ob)5
-b(ject)28 b(descriptions)227 451 y(ma)n(y)i(b)r(e)g(stored)g(within)h
-(a)f(single)f(set)i(of)f(FITS)g(cards.)44 b(If)31 b(m)n(ultiple)g(Ob)5
-b(ject)30 b(descriptions)f(are)g(stored,)h(they)227 551
-y(are)35 b(written)g(and)g(read)g(sequen)n(tially)-7
-b(.)59 b(The)35 b(NA)-7 b(TIVE)36 b(enco)r(ding)f(mak)n(es)f(use)h(of)h
-(unique)f(FITS)h(k)n(eyw)n(ords)227 650 y(whic)n(h)29
-b(are)e(designed)h(not)g(to)h(clash)e(with)i(k)n(eyw)n(ords)e(that)h
-(ha)n(v)n(e)f(already)g(b)r(een)i(used)g(for)e(other)h(purp)r(oses)g
-(\(if)227 750 y(a)f(p)r(oten)n(tial)h(clash)f(is)g(detected,)i(an)e
-(alternativ)n(e)f(k)n(eyw)n(ord)g(is)h(constructed)h(to)f(a)n(v)n(oid)f
-(the)i(clash\).)227 877 y(When)35 b(reading)e(a)h(NA)-7
-b(TIVE)35 b(enco)r(ded)g(ob)5 b(ject)34 b(from)g(a)g(FitsChan)g
-(\(using)h(astRead\),)g(FITS)g(header)f(cards)227 977
-y(are)26 b(read,)h(starting)f(at)h(the)g(curren)n(t)f(card)g(\(as)h
-(determined)g(b)n(y)g(the)g(Card)f(attribute\),)i(un)n(til)f(the)h
-(start)e(of)h(the)227 1076 y(next)e(Ob)5 b(ject)25 b(description)f(is)g
-(found.)37 b(This)24 b(description)g(is)h(then)g(read)f(and)h(con)n(v)n
-(erted)e(in)n(to)h(an)h(AST)g(Ob)5 b(ject,)227 1176 y(for)28
-b(whic)n(h)h(a)f(p)r(oin)n(ter)g(is)h(returned.)39 b(Suc)n(h)28
-b(a)h(read)e(is)i(alw)n(a)n(ys)d(destructiv)n(e)i(and)h(causes)e(all)i
-(the)g(FITS)f(header)227 1276 y(cards)c(in)n(v)n(olv)n(ed)g(in)h(the)g
-(Ob)5 b(ject)25 b(description)g(to)g(b)r(e)g(remo)n(v)n(ed)e(from)i
-(the)h(FitsChan,)f(whic)n(h)g(is)g(left)h(p)r(ositioned)227
-1375 y(at)i(the)g(follo)n(wing)e(card.)227 1503 y(The)k(Ob)5
-b(ject)29 b(returned)g(ma)n(y)f(b)r(e)i(of)f(an)n(y)g(class,)f(dep)r
-(ending)i(on)f(the)h(description)e(that)i(w)n(as)e(read,)h(and)g(other)
-227 1602 y(AST)c(routines)e(ma)n(y)h(b)r(e)g(used)g(to)g(v)-5
-b(alidate)24 b(it)g(\(for)g(example,)g(b)n(y)g(examining)g(its)g(Class)
-f(or)g(ID)i(attribute)f(using)227 1702 y(astGetC\).)k(If)f(further)g
-(NA)-7 b(TIVE)27 b(enco)r(ded)g(Ob)5 b(ject)27 b(descriptions)g(exist)f
-(in)i(the)f(FitsChan,)h(subsequen)n(t)e(calls)227 1801
-y(to)g(astRead)g(will)g(return)g(the)g(Ob)5 b(jects)26
-b(they)g(describ)r(e)g(in)g(sequence)g(\(and)g(destro)n(y)f(their)h
-(descriptions\))f(un)n(til)227 1901 y(no)j(more)e(remain)h(b)r(et)n(w)n
-(een)h(the)g(curren)n(t)f(card)f(and)i(the)g Ft(")p Fj(end-of-\014le)p
-Ft(")p Fj(.)227 2028 y(When)33 b(astW)-7 b(rite)33 b(is)f(used)h(to)f
-(write)g(an)g(Ob)5 b(ject)33 b(using)f(NA)-7 b(TIVE)33
-b(enco)r(ding,)g(a)f(description)g(of)h(the)g(Ob)5 b(ject)227
-2128 y(is)32 b(inserted)f(immediately)h(b)r(efore)f(the)h(curren)n(t)f
-(card)f(\(as)i(determined)f(b)n(y)h(the)g(Card)f(attribute\).)49
-b(Multiple)227 2228 y(Ob)5 b(ject)29 b(descriptions)g(ma)n(y)f(b)r(e)i
-(written)f(in)h(this)f(w)n(a)n(y)f(and)h(are)g(stored)f(separately)g
-(\(and)h(sequen)n(tially)f(if)i(the)227 2327 y(Card)f(attribute)g(is)g
-(not)g(mo)r(di\014ed)h(b)r(et)n(w)n(een)f(the)g(writes\).)42
-b(A)29 b(write)g(op)r(eration)f(using)h(the)g(NA)-7 b(TIVE)30
-b(enco)r(d-)227 2427 y(ing)35 b(do)r(es)f(not)g(o)n(v)n(er-write)e
-(previously)i(written)g(Ob)5 b(ject)35 b(descriptions.)57
-b(Note,)36 b(ho)n(w)n(ev)n(er,)e(that)h(subsequen)n(t)227
-2527 y(b)r(eha)n(viour)29 b(is)h(unde\014ned)g(if)g(an)g(Ob)5
-b(ject)29 b(description)h(is)f(written)h(inside)g(a)g
-(previously-written)e(description,)227 2626 y(so)f(this)h(should)f(b)r
-(e)h(a)n(v)n(oided.)227 2753 y(When)21 b(an)g(Ob)5 b(ject)20
-b(is)h(written)g(to)f(a)g(FitsChan)h(using)g(NA)-7 b(TIVE)21
-b(enco)r(ding,)g(astW)-7 b(rite)21 b(should)f(\(barring)g(errors\))227
-2853 y(alw)n(a)n(ys)26 b(transfer)h(data)g(and)g(return)g(a)g(v)-5
-b(alue)28 b(of)f(1.)p 0 3058 3780 12 v 0 3190 a Fz(Ep)t(o)t(c)l(h)981
-b Fe(Ep)s(o)s(c)m(h)39 b(of)f(observ)-7 b(ation)980 b
-Fz(Ep)t(o)t(c)l(h)0 3384 y Fd(Description:)44 b Fj(This)29
-b(attribute)g(is)f(used)h(to)f(qualify)h(the)g(co)r(ordinate)e(systems)
-h(describ)r(ed)g(b)n(y)h(a)f(F)-7 b(rame,)28 b(b)n(y)g(giving)227
-3484 y(the)g(momen)n(t)f(in)h(time)f(when)h(the)g(co)r(ordinates)d(are)
-i(kno)n(wn)f(to)h(b)r(e)h(correct.)35 b(Often,)28 b(this)g(will)f(b)r
-(e)h(the)f(date)h(of)227 3583 y(observ)-5 b(ation,)26
-b(and)h(is)g(imp)r(ortan)n(t)f(in)h(cases)f(where)g(co)r(ordinates)g
-(systems)g(mo)n(v)n(e)g(with)i(resp)r(ect)e(to)h(eac)n(h)f(other)227
-3683 y(o)n(v)n(er)g(the)i(course)e(of)i(time.)227 3810
-y(The)23 b(Ep)r(o)r(c)n(h)f(attribute)h(is)f(stored)g(as)g(a)g(Mo)r
-(di\014ed)h(Julian)g(Date,)g(but)h(when)f(setting)f(its)h(v)-5
-b(alue)22 b(it)h(ma)n(y)f(b)r(e)h(giv)n(en)227 3910 y(in)32
-b(a)e(v)-5 b(ariet)n(y)30 b(of)h(formats.)46 b(See)31
-b(the)h Ft(")p Fj(Input)f(F)-7 b(ormats)p Ft(")30 b Fj(section)g(\(b)r
-(elo)n(w\))h(for)g(details.)47 b(Strictly)-7 b(,)32 b(the)f(Ep)r(o)r(c)
-n(h)227 4009 y(v)-5 b(alue)25 b(should)g(b)r(e)g(supplied)g(in)g(the)g
-(TDB)g(timescale,)g(but)h(for)e(some)g(purp)r(oses)g(\(for)h(instance,)
-g(for)f(con)n(v)n(erting)227 4109 y(sky)36 b(p)r(ositions)f(b)r(et)n(w)
-n(een)h(di\013eren)n(t)g(t)n(yp)r(es)f(of)h(equatorial)e(system\))i
-(the)h(timescale)e(is)h(not)g(signi\014can)n(t,)h(and)227
-4209 y(UTC)28 b(ma)n(y)f(b)r(e)h(used.)0 4364 y Fd(T)m(yp)s(e:)227
-4463 y Fj(Floating)f(p)r(oin)n(t.)0 4618 y Fd(Class)k(Applicabilit)m
-(y:)259 4760 y(F)-8 b(rame)427 4860 y Fj(All)29 b(F)-7
-b(rames)27 b(ha)n(v)n(e)f(this)j(attribute.)38 b(The)27
-b(basic)h(F)-7 b(rame)27 b(class)g(pro)n(vides)g(a)g(default)h(of)g
-(J2000.0)d(\(Julian\))427 4960 y(but)31 b(mak)n(es)f(no)g(use)g(of)g
-(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue.)45 b(This)30 b(is)g(b)r(ecause)g
-(the)h(F)-7 b(rame)30 b(class)f(do)r(es)h(not)h(distinguish)427
-5059 y(b)r(et)n(w)n(een)d(di\013eren)n(t)g(Cartesian)e(co)r(ordinate)g
-(systems)h(\(see)h(the)g(System)g(attribute\).)259 5195
-y Fd(CmpF)-8 b(rame)427 5295 y Fj(The)32 b(default)h(Ep)r(o)r(c)n(h)e
-(v)-5 b(alue)32 b(for)f(a)h(CmpF)-7 b(rame)31 b(is)h(selected)g(as)f
-(follo)n(ws;)i(if)f(the)h(Ep)r(o)r(c)n(h)e(attribute)h(has)427
-5394 y(b)r(een)26 b(set)g(in)g(the)g(\014rst)f(comp)r(onen)n(t)g(F)-7
-b(rame)26 b(then)g(the)g(Ep)r(o)r(c)n(h)f(v)-5 b(alue)25
-b(from)g(the)h(\014rst)g(comp)r(onen)n(t)f(F)-7 b(rame)427
-5494 y(is)36 b(used)f(as)g(the)g(default)h(for)f(the)h(CmpF)-7
-b(rame.)59 b(Otherwise,)37 b(if)f(the)g(Ep)r(o)r(c)n(h)e(attribute)i
-(has)f(b)r(een)h(set)427 5593 y(in)29 b(the)h(second)e(comp)r(onen)n(t)
-h(F)-7 b(rame)28 b(then)i(the)f(Ep)r(o)r(c)n(h)g(v)-5
-b(alue)28 b(from)h(the)g(second)g(comp)r(onen)n(t)f(F)-7
-b(rame)29 b(is)427 5693 y(used)35 b(as)f(the)h(default)g(for)f(the)h
-(CmpF)-7 b(rame.)57 b(Otherwise,)36 b(the)f(default)g(Ep)r(o)r(c)n(h)f
-(v)-5 b(alue)35 b(from)f(the)h(\014rst)p eop end
-%%Page: 414 424
-TeXDict begin 414 423 bop 0 52 a FF(414)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)427 351
-y Fj(comp)r(onen)n(t)d(F)-7 b(rame)28 b(is)h(used)f(as)g(the)h(default)
-f(for)g(the)h(CmpF)-7 b(rame.)39 b(When)29 b(the)g(Ep)r(o)r(c)n(h)f
-(attribute)h(of)f(a)427 451 y(CmpF)-7 b(rame)28 b(is)f(set)h(or)e
-(cleared,)h(it)h(is)g(also)e(set)i(or)e(cleared)h(in)h(the)g(t)n(w)n(o)
-f(comp)r(onen)n(t)g(F)-7 b(rames.)259 591 y Fd(F)f(rameSet)427
-691 y Fj(The)29 b(Ep)r(o)r(c)n(h)f(attribute)g(of)g(a)g(F)-7
-b(rameSet)28 b(is)h(the)f(same)g(as)g(that)g(of)h(its)f(curren)n(t)g(F)
--7 b(rame)27 b(\(as)h(sp)r(eci\014ed)h(b)n(y)427 791
-y(the)f(Curren)n(t)f(attribute\).)259 931 y Fd(SkyF)-8
-b(rame)427 1031 y Fj(The)35 b(co)r(ordinates)e(of)i(sources)e(within)j
-(a)e(SkyF)-7 b(rame)34 b(can)g(c)n(hanged)g(with)h(time)h(for)e(v)-5
-b(arious)33 b(reasons,)427 1130 y(including:)58 b(\(i\))39
-b(c)n(hanging)d(ab)r(erration)h(of)g(ligh)n(t)h(caused)f(b)n(y)h(the)g
-(observ)n(er's)e(v)n(elo)r(cit)n(y)h(\(e.g.)68 b(due)38
-b(to)427 1230 y(the)d(Earth's)e(motion)h(around)f(the)h(Sun\),)j
-(\(ii\))e(c)n(hanging)e(gra)n(vitational)e(de\015ection)j(b)n(y)g(the)h
-(Sun)f(due)427 1330 y(to)40 b(c)n(hanges)e(in)i(the)h(observ)n(er's)c
-(p)r(osition)j(with)g(time,)j(\(iii\))e(\014ctitious)f(motion)f(due)h
-(to)g(rotation)f(of)427 1429 y(non-inertial)c(co)r(ordinate)f(systems)g
-(\(e.g.)60 b(the)36 b(old)f(FK4)f(system\),)k(and)d(\(iv\))h(prop)r(er)
-e(motion)h(of)g(the)427 1529 y(source)25 b(itself)h(\(although)g(this)g
-(last)g(e\013ect)g(is)g(not)g(handled)g(b)n(y)f(the)i(SkyF)-7
-b(rame)25 b(class)g(b)r(ecause)g(it)i(a\013ects)427 1629
-y(individual)h(sources)e(rather)h(than)g(the)h(co)r(ordinate)f(system)g
-(as)g(a)g(whole\).)427 1749 y(The)f(default)g(Ep)r(o)r(c)n(h)f(v)-5
-b(alue)26 b(in)g(a)f(SkyF)-7 b(rame)25 b(is)g(B1950.0)e(\(Besselian\))i
-(for)g(the)h(old)g(FK4-based)e(co)r(ordi-)427 1848 y(nate)k(systems)f
-(\(see)g(the)h(System)g(attribute\))g(and)g(J2000.0)d(\(Julian\))i(for)
-g(all)h(others.)427 1968 y(Care)35 b(m)n(ust)g(b)r(e)h(tak)n(en)f(to)g
-(distinguish)g(the)h(Ep)r(o)r(c)n(h)f(v)-5 b(alue,)37
-b(whic)n(h)e(relates)g(to)g(motion)g(\(or)g(apparen)n(t)427
-2068 y(motion\))h(of)g(the)g(source,)h(from)e(the)h(sup)r(er\014cially)
-f(similar)g(Equino)n(x)g(v)-5 b(alue.)61 b(The)36 b(latter)f(is)h(used)
-g(to)427 2168 y(qualify)c(a)f(co)r(ordinate)g(system)h(whic)n(h)f(is)h
-(itself)g(in)g(motion)g(in)g(a)f(\(notionally\))h(predictable)f(w)n(a)n
-(y)g(as)g(a)427 2267 y(result)d(of)f(b)r(eing)h(referred)e(to)i(a)f
-(slo)n(wly)f(mo)n(ving)h(reference)g(plane)g(\(e.g.)37
-b(the)28 b(equator\).)427 2387 y(See)d(the)h(description)f(of)g(the)g
-(System)h(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g
-(attributes)g(apply)g(to)427 2487 y(eac)n(h)i(celestial)g(co)r
-(ordinate)g(system.)259 2628 y Fd(TimeF)-8 b(rame)427
-2727 y Fj(A)30 b(TimeF)-7 b(rame)29 b(describ)r(es)g(a)g(general)f
-(time)i(axis)f(and)g(so)g(cannot)g(b)r(e)h(completely)g(c)n
-(haracterised)d(b)n(y)i(a)427 2827 y(single)22 b(Ep)r(o)r(c)n(h)f(v)-5
-b(alue.)35 b(F)-7 b(or)21 b(this)h(reason)e(the)i(TimeF)-7
-b(rame)22 b(class)e(mak)n(es)h(no)h(use)f(of)h(the)g(Ep)r(o)r(c)n(h)f
-(attribute.)427 2926 y(Ho)n(w)n(ev)n(er,)31 b(user)g(co)r(de)g(can)g
-(still)h(mak)n(e)f(use)g(of)h(the)g(attribute)f(if)h(necessary)e(to)h
-(represen)n(t)g(a)g Ft(")p Fj(t)n(ypical)p Ft(")427 3026
-y Fj(time)25 b(spanned)e(b)n(y)h(the)h(TimeF)-7 b(rame.)35
-b(The)24 b(default)g(Ep)r(o)r(c)n(h)g(v)-5 b(alue)24
-b(for)f(a)h(TimeF)-7 b(rame)23 b(will)i(b)r(e)f(the)g(TDB)427
-3126 y(equiv)-5 b(alen)n(t)35 b(of)h(the)f(curren)n(t)g(v)-5
-b(alue)35 b(of)g(the)h(TimeF)-7 b(rame's)35 b(TimeOrigin)f(attribute.)
-60 b(If)36 b(no)f(v)-5 b(alue)35 b(has)427 3225 y(b)r(een)28
-b(set)g(for)f(TimeOrigin,)g(then)h(the)g(default)g(Ep)r(o)r(c)n(h)f(v)
--5 b(alue)27 b(is)h(J2000.0.)-2 3403 y Fd(Input)33 b(F)-8
-b(ormats)n(:)227 3549 y Fj(The)29 b(formats)f(accepted)g(when)g
-(setting)h(an)f(Ep)r(o)r(c)n(h)g(v)-5 b(alue)29 b(are)e(listed)i(b)r
-(elo)n(w.)39 b(They)29 b(are)e(all)h(case-insensitiv)n(e)227
-3648 y(and)g(are)e(generally)g(toleran)n(t)h(of)g(extra)g(white)h
-(space)f(and)g(alternativ)n(e)g(\014eld)h(delimiters:)340
-3932 y Fi(\017)45 b Fj(Besselian)33 b(Ep)r(o)r(c)n(h:)48
-b(Expressed)32 b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i
-(decimal)g(places)f(\()p Ft(")p Fj(B1950)p Ft(")d Fj(or)427
-4032 y Ft(")p Fj(B1976.13)p Ft(")24 b Fj(for)j(example\).)340
-4173 y Fi(\017)45 b Fj(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fj(J2000)p Ft(")e Fj(or)427 4272 y Ft(")p
-Fj(J2100.9)p Ft(")24 b Fj(for)j(example\).)340 4413 y
-Fi(\017)45 b Fj(Y)-7 b(ear:)50 b(Decimal)35 b(y)n(ears,)f(with)h(or)f
-(without)h(decimal)f(places)g(\()p Ft(")p Fj(1996.8)p
-Ft(")d Fj(for)j(example\).)57 b(Suc)n(h)35 b(v)-5 b(alues)427
-4512 y(are)34 b(in)n(terpreted)g(as)g(a)g(Besselian)f(ep)r(o)r(c)n(h)i
-(\(see)f(ab)r(o)n(v)n(e\))f(if)i(less)f(than)h(1984.0)d(and)j(as)e(a)i
-(Julian)f(ep)r(o)r(c)n(h)427 4612 y(otherwise.)340 4752
-y Fi(\017)45 b Fj(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fj(JD)h(2454321.9)p Ft(")23
-b Fj(for)k(example\).)340 4893 y Fi(\017)45 b Fj(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fj(MJD)h(54321.4)p Ft(")c Fj(for)j(example\).)340
-5034 y Fi(\017)45 b Fj(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 5133 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fj(1996-10-2)p
-Ft(")427 5233 y Fj(or)f Ft(")p Fj(1996-Oct-2.6)p Ft(")d
-Fj(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-5332 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-5473 y Fi(\017)45 b Fj(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 5573
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fj(1996-Oct-2)e(12:13:56.985)p Ft(")e Fj(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 5672 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fj(T)p Ft(")g
-Fj(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)p eop end
-%%Page: 415 425
-TeXDict begin 415 424 bop 3643 52 a FF(415)-2 351 y Fd(Output)32
-b(F)-8 b(ormat)n(:)227 497 y Fj(When)29 b(enquiring)f(Ep)r(o)r(c)n(h)g
-(v)-5 b(alues,)28 b(the)h(format)f(used)g(is)h(the)f
-Ft(")p Fj(Y)-7 b(ear)p Ft(")27 b Fj(format)h(describ)r(ed)h(under)f
-Ft(")p Fj(Input)h(F)-7 b(or-)227 597 y(mats)p Ft(")p
-Fj(.)43 b(This)30 b(is)f(a)g(v)-5 b(alue)30 b(in)g(decimal)g(y)n(ears)e
-(whic)n(h)h(will)h(b)r(e)g(a)f(Besselian)g(ep)r(o)r(c)n(h)h(if)g(less)f
-(than)h(1984.0)d(and)j(a)227 697 y(Julian)h(ep)r(o)r(c)n(h)f
-(otherwise.)46 b(By)31 b(omitting)g(an)n(y)f(c)n(haracter)e(pre\014x,)k
-(this)f(format)f(allo)n(ws)f(the)j(Ep)r(o)r(c)n(h)e(v)-5
-b(alue)31 b(to)227 796 y(b)r(e)d(obtained)g(as)f(either)g(a)g(c)n
-(haracter)f(string)h(or)f(a)i(\015oating)e(p)r(oin)n(t)i(v)-5
-b(alue.)p 0 999 3780 12 v 0 1131 a Fz(Equino)l(x)708
-b Fe(Ep)s(o)s(c)m(h)39 b(of)f(the)h(mean)f(equino)m(x)706
-b Fz(Equino)l(x)0 1323 y Fd(Description:)44 b Fj(This)19
-b(attribute)f(is)h(used)f(to)g(qualify)g(those)g(celestial)g(co)r
-(ordinate)f(systems)h(describ)r(ed)g(b)n(y)h(a)e(SkyF)-7
-b(rame)227 1423 y(whic)n(h)28 b(are)g(notionally)f(based)g(on)h(the)h
-(ecliptic)f(\(the)h(plane)f(of)g(the)h(Earth's)e(orbit)h(around)f(the)h
-(Sun\))h(and/or)227 1522 y(the)f(Earth's)f(equator.)227
-1649 y(Both)e(of)g(these)g(planes)g(are)f(in)h(motion)g(and)g(their)g
-(p)r(ositions)g(are)f(di\016cult)i(to)e(sp)r(ecify)i(precisely)-7
-b(.)35 b(In)25 b(practice,)227 1748 y(therefore,)36 b(a)f(mo)r(del)h
-(ecliptic)f(and/or)f(equator)g(are)g(used)h(instead.)59
-b(These,)37 b(together)d(with)i(the)g(p)r(oin)n(t)f(on)227
-1848 y(the)f(sky)f(that)h(de\014nes)g(the)g(co)r(ordinate)e(origin)h
-(\(the)h(in)n(tersection)f(of)h(the)g(t)n(w)n(o)e(planes)i(termed)f
-(the)h Ft(")p Fj(mean)227 1947 y(equino)n(x)p Ft(")p
-Fj(\))f(mo)n(v)n(e)f(with)i(time)g(according)e(to)h(some)g(mo)r(del)h
-(whic)n(h)g(remo)n(v)n(es)d(the)j(more)f(rapid)g(\015uctuations.)227
-2047 y(The)28 b(SkyF)-7 b(rame)27 b(class)f(supp)r(orts)i(b)r(oth)g
-(the)g(FK4)f(and)g(FK5)g(mo)r(dels.)227 2173 y(The)i(p)r(osition)f(of)h
-(a)f(\014xed)h(source)e(expressed)h(in)h(an)n(y)f(of)g(these)h(co)r
-(ordinate)e(systems)i(will)g(app)r(ear)e(to)i(c)n(hange)227
-2273 y(with)36 b(time)h(due)e(to)h(mo)n(v)n(emen)n(t)f(of)g(the)h(co)r
-(ordinate)f(system)g(itself)h(\(rather)f(than)h(motion)f(of)g(the)h
-(source\).)227 2373 y(Suc)n(h)25 b(co)r(ordinate)f(systems)g(m)n(ust)h
-(therefore)f(b)r(e)h(quali\014ed)f(b)n(y)h(a)f(momen)n(t)h(in)g(time)g
-(\(the)h Ft(")p Fj(ep)r(o)r(c)n(h)e(of)h(the)g(mean)227
-2472 y(equino)n(x)p Ft(")h Fj(or)g Ft(")p Fj(equino)n(x)p
-Ft(")f Fj(for)i(short\))f(whic)n(h)h(allo)n(ws)f(the)h(p)r(osition)g
-(of)g(the)h(mo)r(del)f(co)r(ordinate)f(system)g(on)h(the)227
-2572 y(sky)g(to)h(b)r(e)g(determined.)37 b(This)27 b(is)h(the)g(role)f
-(of)g(the)h(Equino)n(x)e(attribute.)227 2698 y(The)31
-b(Equino)n(x)f(attribute)h(is)f(stored)g(as)g(a)h(Mo)r(di\014ed)g
-(Julian)f(Date,)i(but)g(when)f(setting)f(or)g(getting)h(its)g(v)-5
-b(alue)227 2798 y(y)n(ou)27 b(ma)n(y)g(use)g(the)h(same)f(formats)g(as)
-g(for)g(the)h(Ep)r(o)r(c)n(h)f(attribute)h(\(q.v.\).)227
-2924 y(The)k(default)g(Equino)n(x)f(v)-5 b(alue)31 b(is)h(B1950.0)d
-(\(Besselian\))j(for)f(the)h(old)g(FK4-based)e(co)r(ordinate)g(systems)
-i(\(see)227 3024 y(the)c(System)g(attribute\))g(and)f(J2000.0)e
-(\(Julian\))j(for)f(all)h(others.)0 3177 y Fd(T)m(yp)s(e:)227
-3276 y Fj(Floating)f(p)r(oin)n(t.)0 3429 y Fd(Class)k(Applicabilit)m
-(y:)259 3569 y(SkyF)-8 b(rame)427 3669 y Fj(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 3834 y
-Fd(Notes:)340 4120 y Fi(\017)45 b Fj(Care)21 b(m)n(ust)h(b)r(e)h(tak)n
-(en)e(to)h(distinguish)g(the)h(Equino)n(x)e(v)-5 b(alue,)23
-b(whic)n(h)f(relates)f(to)h(the)g(de\014nition)h(of)f(a)f(time-)427
-4220 y(dep)r(enden)n(t)31 b(co)r(ordinate)e(system)h(\(based)f(on)h
-(solar)f(system)g(reference)h(planes)f(whic)n(h)h(are)f(in)i(motion\),)
-427 4319 y(from)f(the)h(sup)r(er\014cially)e(similar)h(Ep)r(o)r(c)n(h)g
-(v)-5 b(alue.)44 b(The)31 b(latter)e(is)i(used)f(to)g(qualify)g(co)r
-(ordinate)f(systems)427 4419 y(where)j(the)g(p)r(ositions)f(of)h
-(sources)e(c)n(hange)h(with)h(time)g(\(or)g(app)r(ear)e(to)i(do)g(so\))
-f(for)g(a)h(v)-5 b(ariet)n(y)30 b(of)i(other)427 4519
-y(reasons,)26 b(suc)n(h)h(as)g(ab)r(erration)f(of)i(ligh)n(t)f(caused)g
-(b)n(y)h(the)g(observ)n(er's)d(motion,)i(etc.)340 4653
-y Fi(\017)45 b Fj(See)25 b(the)h(description)f(of)g(the)g(System)h
-(attribute)f(for)g(details)g(of)g(whic)n(h)g(qualifying)g(attributes)g
-(apply)g(to)427 4753 y(eac)n(h)i(celestial)g(co)r(ordinate)g(system.)p
-0 4956 V 0 5086 a Fz(Escap)t(e)753 5087 y Fe(Allo)m(w)36
-b(c)m(hanges)i(of)h(c)m(haracter)d(attributes)h(within)1692
-5202 y(strings?)3373 5086 y Fz(Escap)t(e)0 5394 y Fd(Description:)44
-b Fj(This)28 b(attribute)g(con)n(trols)e(the)i(app)r(earance)e(of)i
-(text)g(strings)f(and)h(n)n(umerical)f(lab)r(els)g(dra)n(wn)g(b)n(y)g
-(the)227 5494 y(astGrid)20 b(and)h(\(for)f(the)h(Plot)f(class\))g(astT)
--7 b(ext)20 b(functions,)i(b)n(y)e(determining)h(if)g(an)n(y)f(escap)r
-(e)g(sequences)f(con)n(tained)227 5593 y(within)h(the)g(strings)e
-(should)h(b)r(e)h(used)g(to)f(con)n(trol)f(the)h(app)r(earance)f(of)i
-(the)f(text,)j(or)c(should)h(b)r(e)h(prin)n(ted)f(literally)-7
-b(.)227 5693 y(Note,)28 b(the)g(Plot3D)f(class)g(only)g(in)n(terprets)g
-(escap)r(e)g(sequences)f(within)j(the)f(astGrid)f(function.)p
-eop end
-%%Page: 416 426
-TeXDict begin 416 425 bop 0 52 a FF(416)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(If)24 b(the)g(Escap)r(e)f(v)-5 b(alue)24 b(of)f(a)h(Plot)f(is)g
-(one)h(\(the)g(default\),)h(then)f(an)n(y)f(escap)r(e)g(sequences)g(in)
-h(text)g(strings)f(pro)r(duce)227 451 y(the)28 b(e\013ects)g(describ)r
-(ed)f(b)r(elo)n(w)h(when)f(prin)n(ted.)37 b(Otherwise,)27
-b(they)h(are)e(prin)n(ted)i(literally)-7 b(.)227 580
-y(See)28 b(also)e(the)i(astEscap)r(es)e(function.)0 739
-y Fd(T)m(yp)s(e:)227 839 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0
-997 y Fd(Class)k(Applicabilit)m(y:)259 1143 y(Plot)427
-1243 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)-2
-1414 y Fd(Escap)s(e)32 b(Sequences)n(:)227 1560 y Fj(Escap)r(e)19
-b(sequences)g(are)g(in)n(tro)r(duced)g(in)n(to)h(the)g(text)g(string)f
-(b)n(y)g(a)g(p)r(ercen)n(t)h Ft(")p Fj(\045)p Ft(")f
-Fj(c)n(haracter.)32 b(An)n(y)20 b(unrecognised,)227 1660
-y(illegal)36 b(or)f(incomplete)i(escap)r(e)f(sequences)g(are)f(prin)n
-(ted)h(literally)-7 b(.)63 b(The)37 b(follo)n(wing)e(escap)r(e)h
-(sequences)g(are)227 1759 y(curren)n(tly)27 b(recognised)f(\()p
-Ft(")p Fj(...)p Ft(")h Fj(represen)n(ts)f(a)h(string)g(of)h(one)f(or)g
-(more)g(decimal)g(digits\):)227 1888 y(\045\045)h(-)g(Prin)n(t)f(a)g
-(literal)g Ft(")p Fj(\045)p Ft(")g Fj(c)n(haracter.)227
-2018 y(\045)p Fi(^)p Fj(...+)i(-)f(Dra)n(w)g(subsequen)n(t)g(c)n
-(haracters)f(as)h(sup)r(er-scripts.)38 b(The)29 b(digits)f
-Ft(")p Fj(...)p Ft(")g Fj(giv)n(e)g(the)h(distance)f(from)g(the)227
-2117 y(base-line)e(of)g Ft(")p Fj(normal)p Ft(")f Fj(text)i(to)f(the)h
-(base-line)f(of)h(the)f(sup)r(er-script)g(text,)h(scaled)f(so)g(that)h
-(a)f(v)-5 b(alue)26 b(of)h Ft(")p Fj(100)p Ft(")227 2217
-y Fj(corresp)r(onds)h(to)h(the)h(heigh)n(t)f(of)h Ft(")p
-Fj(normal)p Ft(")e Fj(text.)43 b(\045)p Fi(^)p Fj(+)29
-b(-)h(Dra)n(w)e(subsequen)n(t)h(c)n(haracters)f(with)i(the)g(normal)227
-2317 y(base-line.)227 2446 y(\045v...+)k(-)f(Dra)n(w)g(subsequen)n(t)h
-(c)n(haracters)d(as)i(sub-scripts.)55 b(The)34 b(digits)f
-Ft(")p Fj(...)p Ft(")g Fj(giv)n(e)g(the)h(distance)g(from)f(the)227
-2545 y(base-line)d(of)h Ft(")p Fj(normal)p Ft(")e Fj(text)i(to)f(the)h
-(base-line)f(of)h(the)g(sub-script)f(text,)i(scaled)e(so)g(that)h(a)g
-(v)-5 b(alue)30 b(of)h Ft(")p Fj(100)p Ft(")227 2645
-y Fj(corresp)r(onds)26 b(to)h(the)h(heigh)n(t)g(of)f
-Ft(")p Fj(normal)p Ft(")f Fj(text.)227 2774 y(\045v+)i(-)f(Dra)n(w)g
-(subsequen)n(t)g(c)n(haracters)e(with)j(the)g(normal)f(base-line)g
-(\(equiv)-5 b(alen)n(t)27 b(to)h(\045)p Fi(^)p Fj(+\).)227
-2903 y(\045)p Fl(>)p Fj(...+)j(-)g(Lea)n(v)n(e)e(a)i(gap)f(b)r(efore)h
-(dra)n(wing)e(subsequen)n(t)i(c)n(haracters.)45 b(The)31
-b(digits)g Ft(")p Fj(...)p Ft(")f Fj(giv)n(e)g(the)i(size)e(of)h(the)
-227 3003 y(gap,)c(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28
-b(of)f Ft(")p Fj(100)p Ft(")e Fj(corresp)r(onds)h(to)i(the)g(heigh)n(t)
-f(of)h Ft(")p Fj(normal)p Ft(")d Fj(text.)227 3132 y(\045)p
-Fl(<)p Fj(...+)30 b(-)g(Mo)n(v)n(e)e(bac)n(kw)n(ards)g(b)r(efore)i(dra)
-n(wing)f(subsequen)n(t)g(c)n(haracters.)42 b(The)30 b(digits)g
-Ft(")p Fj(...)p Ft(")f Fj(giv)n(e)h(the)g(size)g(of)227
-3232 y(the)e(mo)n(v)n(emen)n(t,)f(scaled)g(so)g(that)h(a)f(v)-5
-b(alue)27 b(of)h Ft(")p Fj(100)p Ft(")d Fj(corresp)r(onds)h(to)h(the)h
-(heigh)n(t)g(of)f Ft(")p Fj(normal)p Ft(")f Fj(text.)227
-3361 y(\045s...+)g(-)g(Change)g(the)g(Size)h(attribute)f(for)g
-(subsequen)n(t)g(c)n(haracters.)34 b(The)26 b(digits)g
-Ft(")p Fj(...)p Ft(")g Fj(giv)n(e)f(the)i(new)f(Size)g(as)227
-3461 y(a)h(fraction)g(of)h(the)g Ft(")p Fj(normal)p Ft(")e
-Fj(Size,)h(scaled)g(so)g(that)h(a)f(v)-5 b(alue)28 b(of)f
-Ft(")p Fj(100)p Ft(")f Fj(corresp)r(onds)f(to)j(1.0;)227
-3590 y(\045s+)f(-)h(Reset)f(the)h(Size)g(attribute)g(to)f(its)h
-Ft(")p Fj(normal)p Ft(")e Fj(v)-5 b(alue.)227 3719 y(\045w...+)36
-b(-)g(Change)f(the)i(Width)g(attribute)f(for)f(subsequen)n(t)h(c)n
-(haracters.)60 b(The)36 b(digits)g Ft(")p Fj(...)p Ft(")f
-Fj(giv)n(e)g(the)i(new)227 3819 y(width)29 b(as)d(a)i(fraction)f(of)g
-(the)h Ft(")p Fj(normal)p Ft(")e Fj(Width,)j(scaled)d(so)h(that)h(a)f
-(v)-5 b(alue)28 b(of)f Ft(")p Fj(100)p Ft(")f Fj(corresp)r(onds)g(to)h
-(1.0;)227 3948 y(\045w+)h(-)f(Reset)h(the)g(Size)f(attribute)h(to)g
-(its)f Ft(")p Fj(normal)p Ft(")f Fj(v)-5 b(alue.)227
-4077 y(\045f...+)31 b(-)f(Change)f(the)i(F)-7 b(on)n(t)30
-b(attribute)g(for)g(subsequen)n(t)g(c)n(haracters.)42
-b(The)31 b(digits)f Ft(")p Fj(...)p Ft(")f Fj(giv)n(e)h(the)g(new)h(F)
--7 b(on)n(t)227 4177 y(v)i(alue.)227 4306 y(\045f+)28
-b(-)f(Reset)h(the)g(F)-7 b(on)n(t)28 b(attribute)f(to)h(its)g
-Ft(")p Fj(normal)p Ft(")d Fj(v)-5 b(alue.)227 4435 y(\045c...+)37
-b(-)f(Change)g(the)h(Colour)f(attribute)h(for)f(subsequen)n(t)g(c)n
-(haracters.)62 b(The)37 b(digits)g Ft(")p Fj(...)p Ft(")f
-Fj(giv)n(e)f(the)j(new)227 4535 y(Colour)27 b(v)-5 b(alue.)227
-4664 y(\045c+)28 b(-)f(Reset)h(the)g(Colour)e(attribute)i(to)f(its)h
-Ft(")p Fj(normal)p Ft(")e Fj(v)-5 b(alue.)227 4793 y(\045t...+)29
-b(-)e(Change)h(the)g(St)n(yle)g(attribute)g(for)g(subsequen)n(t)g(c)n
-(haracters.)35 b(The)29 b(digits)f Ft(")p Fj(...)p Ft(")f
-Fj(giv)n(e)g(the)i(new)f(St)n(yle)227 4893 y(v)-5 b(alue.)227
-5022 y(\045t+)28 b(-)f(Reset)h(the)g(St)n(yle)f(attribute)h(to)g(its)g
-Ft(")p Fj(normal)p Ft(")d Fj(v)-5 b(alue.)227 5151 y(\045h+)28
-b(-)f(Remem)n(b)r(er)h(the)g(curren)n(t)e(horizon)n(tal)g(p)r(osition)i
-(\(see)f Ft(")p Fj(\045g+)p Ft(")p Fj(\))227 5280 y(\045g+)g(-)h(Go)f
-(to)g(the)h(horizon)n(tal)e(p)r(osition)i(of)f(the)h(previous)f
-Ft(")p Fj(\045h+)p Ft(")f Fj(\(if)j(an)n(y\).)227 5410
-y(\045-)f(-)f(Push)g(the)h(curren)n(t)f(graphics)f(attribute)i(v)-5
-b(alues)27 b(on)n(to)g(the)h(top)g(of)f(the)h(stac)n(k)f(\(see)g
-Ft(")p Fj(\045+)p Ft(")p Fj(\).)227 5539 y(\045+)39 b(-)g(P)n(op)f
-(attributes)h(v)-5 b(alues)38 b(of)h(the)g(top)g(the)h(stac)n(k)e
-(\(see)h Ft(")p Fj(\045-)p Ft(")p Fj(\).)70 b(If)39 b(the)h(stac)n(k)e
-(is)g(empt)n(y)-7 b(,)42 b Ft(")p Fj(normal)p Ft(")227
-5639 y Fj(attribute)28 b(v)-5 b(alues)27 b(are)g(restored.)p
-eop end
-%%Page: 417 427
-TeXDict begin 417 426 bop 3643 52 a FF(417)p 0 351 3780
-12 v 0 483 a Fz(FillF)-11 b(actor)242 b Fe(F)-10 b(raction)38
-b(of)g(the)g(Region)g(whic)m(h)g(is)h(of)f(in)m(terest)240
-b Fz(FillF)-11 b(actor)0 718 y Fd(Description:)44 b Fj(This)27
-b(attribute)f(indicates)g(the)h(fraction)f(of)g(the)h(Region)f(whic)n
-(h)g(is)g(of)h(in)n(terest.)36 b(AST)26 b(do)r(es)g(not)h(use)227
-818 y(this)f(attribute)g(in)n(ternally)f(for)h(an)n(y)f(purp)r(ose.)35
-b(T)n(ypically)-7 b(,)26 b(it)g(could)g(b)r(e)g(used)g(to)f(indicate)h
-(the)g(fraction)f(of)h(the)227 917 y(Region)h(for)g(whic)n(h)h(data)f
-(is)g(a)n(v)-5 b(ailable.)227 1065 y(The)30 b(supplied)h(v)-5
-b(alue)30 b(m)n(ust)g(b)r(e)h(in)f(the)h(range)e(0.0)g(to)h(1.0,)g(and)
-g(the)h(default)f(v)-5 b(alue)30 b(is)g(1.0)g(\(except)g(as)g(noted)227
-1164 y(b)r(elo)n(w\).)0 1360 y Fd(T)m(yp)s(e:)227 1460
-y Fj(Floating)d(p)r(oin)n(t.)0 1655 y Fd(Class)k(Applicabilit)m(y:)259
-1838 y(Region)427 1938 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)259 2094 y Fd(CmpRegion)427 2193 y Fj(The)g(default)g
-(FillF)-7 b(actor)27 b(for)g(a)g(CmpRegion)g(is)h(the)g(FillF)-7
-b(actor)27 b(of)h(its)f(\014rst)h(comp)r(onen)n(t)f(Region.)259
-2349 y Fd(Prism)427 2449 y Fj(The)36 b(default)h(FillF)-7
-b(actor)35 b(for)h(a)f(Prism)h(is)f(the)i(pro)r(duct)f(of)g(the)g
-(FillF)-7 b(actors)35 b(of)h(its)h(t)n(w)n(o)e(comp)r(onen)n(t)427
-2548 y(Regions.)259 2704 y Fd(Stc)427 2804 y Fj(The)28
-b(default)g(FillF)-7 b(actor)27 b(for)g(an)g(Stc)h(is)g(the)g(FillF)-7
-b(actor)27 b(of)g(its)h(encapsulated)f(Region.)p 0 3049
-V 0 3181 a Fz(FitsDigits)243 b Fe(Digits)38 b(of)g(precision)g(for)g
-(\015oating)e(p)s(oin)m(t)i(FITS)1735 3296 y(v)-7 b(alues)3202
-3181 y Fz(FitsDigits)0 3507 y Fd(Description:)44 b Fj(This)24
-b(attribute)h(giv)n(es)d(the)j(n)n(um)n(b)r(er)f(of)g(signi\014can)n(t)
-f(decimal)h(digits)g(to)g(use)g(when)g(formatting)f(\015oat-)227
-3607 y(ing)28 b(p)r(oin)n(t)f(v)-5 b(alues)28 b(for)f(inclusion)g(in)h
-(the)g(FITS)g(header)f(cards)f(within)i(a)g(FitsChan.)227
-3755 y(By)37 b(default,)k(a)c(p)r(ositiv)n(e)g(v)-5 b(alue)37
-b(is)g(used)g(whic)n(h)h(results)e(in)i(no)f(loss)g(of)g(information,)i
-(assuming)e(that)g(the)227 3854 y(v)-5 b(alue's)28 b(precision)e(is)i
-(double.)36 b(Usually)-7 b(,)28 b(this)g(causes)e(no)i(problems.)227
-4002 y(Ho)n(w)n(ev)n(er,)22 b(to)g(adhere)g(strictly)g(to)g(the)h
-(recommendations)e(of)i(the)g(FITS)g(standard,)f(the)h(width)g(of)g
-(the)f(format-)227 4102 y(ted)31 b(v)-5 b(alue)30 b(\(including)g
-(sign,)h(decimal)f(p)r(oin)n(t)g(and)g(exp)r(onen)n(t\))g(ough)n(t)g
-(not)g(to)g(b)r(e)g(more)f(than)i(20)e(c)n(haracters.)227
-4201 y(If)f(y)n(ou)e(are)h(concerned)f(ab)r(out)h(this,)h(y)n(ou)e
-(should)h(set)h(FitsDigits)f(to)h(a)e(negativ)n(e)h(v)-5
-b(alue,)27 b(suc)n(h)g(as)f(-15.)36 b(In)27 b(this)227
-4301 y(case,)g(the)h(absolute)f(v)-5 b(alue)27 b(\(+15\))g(indicates)g
-(the)h(maxim)n(um)f(n)n(um)n(b)r(er)g(of)g(signi\014can)n(t)g(digits)g
-(to)h(use,)f(but)h(the)227 4400 y(actual)23 b(n)n(um)n(b)r(er)f(used)h
-(ma)n(y)g(b)r(e)g(few)n(er)g(than)g(this)g(to)g(ensure)f(that)i(the)f
-(FITS)g(recommendations)f(are)g(satis\014ed.)227 4500
-y(When)g(using)g(this)f(approac)n(h,)g(the)h(resulting)f(n)n(um)n(b)r
-(er)g(of)h(signi\014can)n(t)f(digits)g(ma)n(y)g(dep)r(end)h(on)f(the)h
-(v)-5 b(alue)22 b(b)r(eing)227 4600 y(formatted)28 b(and)f(on)g(the)h
-(presence)f(of)h(an)n(y)f(sign,)g(decimal)g(p)r(oin)n(t)h(or)f(exp)r
-(onen)n(t.)227 4747 y(The)c(v)-5 b(alue)23 b(of)g(this)g(attribute)g
-(is)g(e\013ectiv)n(e)g(when)g(FITS)g(header)g(cards)e(are)h(output,)j
-(either)e(using)f(astFindFits)227 4847 y(or)27 b(b)n(y)g(the)h(action)f
-(of)h(the)g(FitsChan's)f(sink)h(function)g(when)g(it)g(is)f(\014nally)h
-(deleted.)0 5043 y Fd(T)m(yp)s(e:)227 5142 y Fj(In)n(teger.)0
-5338 y Fd(Class)j(Applicabilit)m(y:)259 5520 y(FitsChan)427
-5620 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 418 428
-TeXDict begin 418 427 bop 0 52 a FF(418)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(F)-11 b(on)l(t\(elemen)l(t\))1034
-483 y Fe(Character)36 b(fon)m(t)i(for)g(a)g(Plot)f(elemen)m(t)2954
-490 y Fz(F)-11 b(on)l(t\(elemen)l(t\))0 675 y Fd(Description:)44
-b Fj(This)35 b(attribute)g(determines)f(the)h(c)n(haracter)d(fon)n(t)j
-(index)g(used)f(when)h(dra)n(wing)e(eac)n(h)h(elemen)n(t)h(of)227
-774 y(graphical)25 b(output)j(pro)r(duced)e(b)n(y)h(a)f(Plot.)36
-b(It)27 b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)27 b(for)f(eac)n(h)g
-(graphical)f(elemen)n(t)i(so)f(that,)227 874 y(for)h(instance,)h(the)g
-(setting)f Ft(")p Fj(F)-7 b(on)n(t\(title\)=2)p Ft(")27
-b Fj(causes)g(the)h(Plot)f(title)h(to)g(b)r(e)g(dra)n(wn)e(using)h(fon)
-n(t)h(n)n(um)n(b)r(er)f(2.)227 996 y(The)i(range)f(of)h(in)n(teger)e
-(fon)n(t)i(indices)g(a)n(v)-5 b(ailable)28 b(and)g(the)i(app)r(earance)
-d(of)i(the)g(resulting)f(text)i(is)e(determined)227 1096
-y(b)n(y)c(the)g(underlying)f(graphics)g(system.)35 b(The)24
-b(default)g(b)r(eha)n(viour)f(is)h(for)f(all)h(graphical)e(elemen)n(ts)
-i(to)f(b)r(e)i(dra)n(wn)227 1195 y(using)j(the)f(default)i(fon)n(t)e
-(supplied)h(b)n(y)f(this)h(graphics)f(system.)0 1340
-y Fd(T)m(yp)s(e:)227 1439 y Fj(In)n(teger.)0 1584 y Fd(Class)k
-(Applicabilit)m(y:)259 1715 y(Plot)427 1815 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 1971 y Fd(Notes:)340 2249 y
-Fi(\017)45 b Fj(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e
-(elemen)n(ts)h(a)n(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g
-(the)h(Plot)f(class.)340 2376 y Fi(\017)45 b Fj(If)34
-b(no)f(graphical)f(elemen)n(t)h(is)h(sp)r(eci\014ed,)h(\(e.g.)54
-b Ft(")p Fj(F)-7 b(on)n(t)p Ft(")32 b Fj(instead)h(of)h
-Ft(")p Fj(F)-7 b(on)n(t\(title\))p Ft(")p Fj(\),)35 b(then)f(a)f
-Ft(")p Fj(set)p Ft(")f Fj(or)427 2476 y Ft(")p Fj(clear)p
-Ft(")g Fj(op)r(eration)h(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)34 b(of)f(all)h(graphical)e(elemen)n(ts,)j(while)f(a)g
-Ft(")p Fj(get)p Ft(")e Fj(or)427 2576 y Ft(")p Fj(test)p
-Ft(")27 b Fj(op)r(eration)g(will)h(use)f(just)h(the)g(F)-7
-b(on)n(t\(T)g(extLab\))28 b(v)-5 b(alue.)p 0 2765 V 0
-2903 a Fz(F)-11 b(ormat\(axis\))987 2896 y Fe(F)h(ormat)38
-b(sp)s(eci\014cation)f(for)h(axis)g(v)-7 b(alues)3023
-2903 y Fz(F)c(ormat\(axis\))0 3088 y Fd(Description:)44
-b Fj(This)21 b(attribute)g(sp)r(eci\014es)f(the)h(format)f(to)h(b)r(e)g
-(used)f(when)h(displa)n(ying)e(co)r(ordinate)h(v)-5 b(alues)20
-b(asso)r(ciated)227 3188 y(with)j(a)e(particular)f(F)-7
-b(rame)22 b(axis)f(\(i.e.)35 b(to)22 b(con)n(v)n(ert)e(v)-5
-b(alues)21 b(from)h(binary)f(to)h(c)n(haracter)d(form\).)35
-b(It)22 b(is)g(in)n(terpreted)227 3288 y(b)n(y)28 b(the)g(astF)-7
-b(ormat)26 b(function)i(and)g(determines)f(the)h(formatting)f(whic)n(h)
-h(it)g(applies.)227 3410 y(If)33 b(no)g(F)-7 b(ormat)32
-b(v)-5 b(alue)32 b(is)h(set)f(for)g(a)h(F)-7 b(rame)32
-b(axis,)h(a)f(default)h(v)-5 b(alue)32 b(is)h(supplied)g(instead.)52
-b(This)32 b(is)h(based)f(on)227 3509 y(the)i(v)-5 b(alue)32
-b(of)h(the)h(Digits,)g(or)e(Digits\(axis\),)i(attribute)g(and)e(is)h(c)
-n(hosen)f(so)g(that)i(it)f(displa)n(ys)f(the)h(requested)227
-3609 y(n)n(um)n(b)r(er)28 b(of)f(digits)h(of)f(precision.)0
-3753 y Fd(T)m(yp)s(e:)227 3853 y Fj(String.)0 3997 y
-Fd(Class)k(Applicabilit)m(y:)259 4128 y(F)-8 b(rame)427
-4228 y Fj(The)28 b(F)-7 b(rame)27 b(class)f(in)n(terprets)h(this)g
-(attribute)h(as)f(a)g(format)f(sp)r(eci\014cation)i(string)e(to)i(b)r
-(e)f(passed)g(to)g(the)427 4328 y(C)h Ft(")p Fj(prin)n(tf)p
-Ft(")e Fj(function)i(\(e.g.)37 b Ft(")p Fj(\0451.7G)p
-Ft(")p Fj(\))26 b(in)i(order)e(to)h(format)g(a)g(single)g(co)r
-(ordinate)f(v)-5 b(alue)27 b(\(supplied)h(as)427 4427
-y(a)f(double)h(precision)f(n)n(um)n(b)r(er\).)427 4541
-y(When)d(supplying)g(a)f(v)-5 b(alue)23 b(for)g(this)h(attribute,)h(b)r
-(ew)n(are)d(that)i(the)g Ft(")p Fj(\045)p Ft(")f Fj(c)n(haracter)e(ma)n
-(y)i(b)r(e)h(in)n(terpreted)427 4641 y(directly)35 b(as)g(a)f(format)h
-(sp)r(eci\014cation)g(b)n(y)f(some)h(prin)n(tf-lik)n(e)g(functions)g
-(\(suc)n(h)g(as)f(astSet\).)60 b(Y)-7 b(ou)35 b(ma)n(y)427
-4740 y(need)28 b(to)f(double)h(it)g(\(i.e.)37 b(use)28
-b Ft(")p Fj(\045\045)p Ft(")p Fj(\))f(to)h(a)n(v)n(oid)e(this.)259
-4868 y Fd(SkyF)-8 b(rame)427 4968 y Fj(The)36 b(SkyF)-7
-b(rame)35 b(class)f(re-de\014nes)h(the)h(syn)n(tax)e(and)i(default)g(v)
--5 b(alue)35 b(of)h(the)g(F)-7 b(ormat)34 b(string)h(to)h(allo)n(w)427
-5067 y(the)i(formatting)f(of)g(sexagesimal)e(v)-5 b(alues)37
-b(as)f(appropriate)g(for)h(the)g(particular)f(celestial)h(co)r
-(ordinate)427 5167 y(system)c(b)r(eing)h(represen)n(ted.)52
-b(The)34 b(syn)n(tax)e(of)h(SkyF)-7 b(rame)33 b(F)-7
-b(ormat)32 b(strings)h(is)g(describ)r(ed)g(\(b)r(elo)n(w\))g(in)427
-5266 y(the)28 b Ft(")p Fj(SkyF)-7 b(rame)27 b(F)-7 b(ormats)p
-Ft(")26 b Fj(section.)259 5394 y Fd(F)-8 b(rameSet)427
-5494 y Fj(The)23 b(F)-7 b(ormat)23 b(attribute)g(of)g(a)g(F)-7
-b(rameSet)23 b(axis)f(is)h(the)h(same)e(as)h(that)g(of)g(its)h(curren)n
-(t)e(F)-7 b(rame)23 b(\(as)f(sp)r(eci\014ed)427 5593
-y(b)n(y)30 b(the)g(Curren)n(t)g(attribute\).)44 b(Note)30
-b(that)g(the)h(syn)n(tax)e(of)h(the)g(F)-7 b(ormat)30
-b(string)f(is)h(also)f(determined)h(b)n(y)427 5693 y(the)e(curren)n(t)f
-(F)-7 b(rame.)p eop end
-%%Page: 419 429
-TeXDict begin 419 428 bop 3643 52 a FF(419)259 351 y
-Fd(TimeF)-8 b(rame)427 451 y Fj(The)37 b(TimeF)-7 b(rame)36
-b(class)g(extends)h(the)g(syn)n(tax)f(of)g(the)h(F)-7
-b(ormat)36 b(string)g(to)h(allo)n(w)e(the)j(formatting)e(of)427
-551 y(TimeF)-7 b(rame)34 b(axis)f(v)-5 b(alues)34 b(as)f(Gregorian)f
-(calendar)g(dates)i(and)g(times.)56 b(The)34 b(syn)n(tax)f(of)h(TimeF)
--7 b(rame)427 650 y(F)g(ormat)27 b(strings)g(is)g(describ)r(ed)h(\(b)r
-(elo)n(w\))g(in)f(the)h Ft(")p Fj(TimeF)-7 b(rame)27
-b(F)-7 b(ormats)p Ft(")26 b Fj(section.)0 820 y Fd(Notes:)340
-1110 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 1210 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)-2 1380 y Fd(SkyF)-8 b(rame)33 b(F)-8
-b(ormats)n(:)227 1526 y Fj(The)23 b(F)-7 b(ormat)21 b(string)h
-(supplied)h(for)e(a)h(SkyF)-7 b(rame)22 b(should)g(con)n(tain)g(zero)f
-(or)g(more)h(of)g(the)h(follo)n(wing)e(c)n(haracters.)227
-1625 y(These)28 b(ma)n(y)e(o)r(ccur)h(in)h(an)n(y)f(order,)f(but)j(the)
-f(follo)n(wing)e(is)i(recommended)f(for)g(clarit)n(y:)340
-1898 y Fi(\017)45 b Ft(")p Fj(+)p Ft(")p Fj(:)34 b(Indicates)24
-b(that)g(a)f(plus)h(sign)f(should)h(b)r(e)g(pre\014xed)f(to)h(p)r
-(ositiv)n(e)f(v)-5 b(alues.)35 b(By)24 b(default,)h(no)e(plus)h(sign)
-427 1998 y(is)k(used.)340 2134 y Fi(\017)45 b Ft(")p
-Fj(z)p Ft(")p Fj(:)e(Indicates)31 b(that)g(leading)g(zeros)f(should)h
-(b)r(e)g(pre\014xed)g(to)g(the)g(v)-5 b(alue)31 b(so)g(that)g(the)g
-(\014rst)g(\014eld)h(is)f(of)427 2234 y(constan)n(t)23
-b(width,)j(as)d(w)n(ould)g(b)r(e)h(required)f(in)h(a)g(\014xed-width)g
-(table)f(\(leading)h(zeros)e(are)h(alw)n(a)n(ys)f(pre\014xed)427
-2334 y(to)28 b(an)n(y)f(\014elds)g(that)h(follo)n(w\).)36
-b(By)28 b(default,)g(no)f(leading)g(zeros)f(are)h(added.)340
-2470 y Fi(\017)45 b Ft(")p Fj(i)p Ft(")p Fj(:)64 b(Use)42
-b(the)g(standard)e(ISO)h(\014eld)h(separator)d(\(a)j(colon\))e(b)r(et)n
-(w)n(een)i(\014elds.)78 b(This)42 b(is)f(the)h(default)427
-2570 y(b)r(eha)n(viour.)340 2707 y Fi(\017)j Ft(")p Fj(b)p
-Ft(")p Fj(:)37 b(Use)27 b(a)g(blank)h(to)f(separate)f(\014elds.)340
-2844 y Fi(\017)45 b Ft(")p Fj(l)p Ft(")p Fj(:)36 b(Use)28
-b(a)f(letter)h(\()p Ft(")p Fj(h)p Ft(")p Fj(/)p Ft(")p
-Fj(d)p Ft(")p Fj(,)e Ft(")p Fj(m)p Ft(")h Fj(or)g Ft(")p
-Fj(s)p Ft(")f Fj(as)h(appropriate\))f(to)i(separate)e(\014elds.)340
-2980 y Fi(\017)45 b Ft(")p Fj(g)p Ft(")p Fj(:)37 b(Use)28
-b(a)g(letter)h(and)f(sym)n(b)r(ols)f(to)h(separate)f(\014elds)h(\()p
-Ft(")p Fj(h)p Ft(")p Fj(/)p Ft(")p Fj(d)p Ft(")p Fj(,)f
-Ft(")p Fj(m)p Ft(")h Fj(or)f Ft(")p Fj(s)p Ft(")p Fj(,)h(etc,)g(as)g
-(appropriate\),)427 3080 y(but)39 b(include)g(escap)r(e)e(sequences)h
-(in)g(the)h(formatted)e(v)-5 b(alue)39 b(so)e(that)h(the)h(Plot)f
-(class)f(will)h(dra)n(w)f(the)427 3180 y(separators)25
-b(as)i(small)g(sup)r(er-scripts.)340 3316 y Fi(\017)45
-b Ft(")p Fj(d)p Ft(")p Fj(:)35 b(Include)24 b(a)g(degrees)f(\014eld.)36
-b(Expressing)23 b(the)h(angle)g(purely)g(in)g(degrees)f(is)h(also)g
-(the)g(default)h(if)g(none)427 3416 y(of)j Ft(")p Fj(h)p
-Ft(")p Fj(,)f Ft(")p Fj(m)p Ft(")p Fj(,)g Ft(")p Fj(s)p
-Ft(")g Fj(or)f Ft(")p Fj(t)p Ft(")h Fj(are)g(giv)n(en.)340
-3553 y Fi(\017)45 b Ft(")p Fj(h)p Ft(")p Fj(:)e(Express)29
-b(the)i(angle)f(as)g(a)h(time)g(and)g(include)g(an)f(hours)g(\014eld)h
-(\(where)g(24)f(hours)g(corresp)r(ond)f(to)427 3652 y(360)e(degrees\).)
-37 b(Expressing)26 b(the)j(angle)e(purely)h(in)g(hours)f(is)h(also)f
-(the)h(default)h(if)f Ft(")p Fj(t)p Ft(")g Fj(is)g(giv)n(en)f(without)
-427 3752 y(either)h Ft(")p Fj(m)p Ft(")f Fj(or)f Ft(")p
-Fj(s)p Ft(")p Fj(.)340 3889 y Fi(\017)45 b Ft(")p Fj(m)p
-Ft(")p Fj(:)37 b(Include)27 b(a)h(min)n(utes)f(\014eld.)38
-b(By)27 b(default)h(this)g(is)f(not)h(included.)340 4025
-y Fi(\017)45 b Ft(")p Fj(s)p Ft(")p Fj(:)d(Include)31
-b(a)f(seconds)g(\014eld.)46 b(By)31 b(default)g(this)g(is)f(not)h
-(included.)46 b(This)31 b(request)f(is)h(ignored)e(if)i
-Ft(")p Fj(d)p Ft(")427 4125 y Fj(or)c Ft(")p Fj(h)p Ft(")g
-Fj(is)g(giv)n(en,)g(unless)h(a)f(min)n(utes)h(\014eld)g(is)f(also)f
-(included.)340 4262 y Fi(\017)45 b Ft(")p Fj(t)p Ft(")p
-Fj(:)37 b(Express)26 b(the)h(angle)g(as)g(a)g(time)h(\(where)f(24)g
-(hours)f(corresp)r(ond)g(to)h(360)f(degrees\).)36 b(This)28
-b(option)f(is)427 4361 y(ignored)c(if)h(either)g Ft(")p
-Fj(d)p Ft(")f Fj(or)g Ft(")p Fj(h)p Ft(")g Fj(is)g(giv)n(en)g(and)h(is)
-f(in)n(tended)i(for)e(use)g(where)h(the)g(v)-5 b(alue)23
-b(is)h(to)g(b)r(e)g(expressed)427 4461 y(purely)29 b(in)g(min)n(utes)g
-(and/or)e(seconds)h(of)h(time)g(\(with)h(no)e(hours)g(\014eld\).)42
-b(If)29 b Ft(")p Fj(t)p Ft(")f Fj(is)h(giv)n(en)f(without)h
-Ft(")p Fj(d)p Ft(")p Fj(,)427 4561 y Ft(")p Fj(h)p Ft(")p
-Fj(,)e Ft(")p Fj(m)p Ft(")g Fj(or)g Ft(")p Fj(s)p Ft(")g
-Fj(b)r(eing)g(presen)n(t,)g(then)h(it)g(is)g(equiv)-5
-b(alen)n(t)27 b(to)h Ft(")p Fj(h)p Ft(")p Fj(.)340 4697
-y Fi(\017)45 b Ft(")p Fj(.)p Ft(")p Fj(:)f(Indicates)31
-b(that)g(decimal)g(places)g(are)f(to)h(b)r(e)h(giv)n(en)e(for)h(the)h
-(\014nal)f(\014eld)g(in)h(the)f(formatted)g(string)427
-4797 y(\(whic)n(hev)n(er)20 b(\014eld)h(this)f(is\).)35
-b(The)21 b Ft(")p Fj(.)p Ft(")e Fj(should)i(b)r(e)f(follo)n(w)n(ed)g
-(immediately)g(b)n(y)h(an)f(unsigned)g(in)n(teger)g(whic)n(h)427
-4897 y(giv)n(es)30 b(the)i(n)n(um)n(b)r(er)f(of)g(decimal)g(places)f
-(required,)h(or)f(b)n(y)h(an)g(asterisk.)46 b(If)32 b(an)f(asterisk)f
-(is)h(supplied,)h(a)427 4996 y(default)c(n)n(um)n(b)r(er)g(of)f
-(decimal)h(places)f(is)g(used)h(whic)n(h)f(is)h(based)f(on)g(the)h(v)-5
-b(alue)27 b(of)h(the)g(Digits)g(attribute.)227 5166 y(All)21
-b(of)f(the)g(ab)r(o)n(v)n(e)f(format)h(sp)r(eci\014ers)f(are)g
-(case-insensitiv)n(e.)33 b(If)20 b(sev)n(eral)f(c)n(haracters)e(mak)n
-(e)j(con\015icting)f(requests)227 5266 y(\(e.g.)38 b(if)29
-b(b)r(oth)g Ft(")p Fj(i)p Ft(")e Fj(and)h Ft(")p Fj(b)p
-Ft(")f Fj(app)r(ear\),)h(then)h(the)f(c)n(haracter)e(o)r(ccurring)h
-(last)g(tak)n(es)h(precedence,)f(except)h(that)227 5365
-y Ft(")p Fj(d)p Ft(")f Fj(and)h Ft(")p Fj(h)p Ft(")f
-Fj(alw)n(a)n(ys)e(o)n(v)n(erride)h Ft(")p Fj(t)p Ft(")p
-Fj(.)227 5494 y(If)i(the)g(format)f(string)f(starts)h(with)h(a)f(p)r
-(ercen)n(tage)f(sign)g(\(\045\),)j(then)f(the)f(whole)g(format)g
-(string)g(is)g(assumed)g(to)227 5593 y(conform)33 b(to)g(the)h(syn)n
-(tax)e(de\014ned)i(b)n(y)f(the)h(F)-7 b(rame)33 b(class,)h(and)f(the)g
-(axis)g(v)-5 b(alues)33 b(is)g(formated)g(as)g(a)g(decimal)227
-5693 y(radians)27 b(v)-5 b(alue.)p eop end
-%%Page: 420 430
-TeXDict begin 420 429 bop 0 52 a FF(420)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fd(TimeF)-8 b(rame)32 b(F)-8 b(ormats)n(:)227 497 y Fj(The)37
-b(F)-7 b(ormat)36 b(string)f(supplied)i(for)f(a)g(TimeF)-7
-b(rame)36 b(should)g(either)h(use)f(the)h(syn)n(tax)e(de\014ned)i(b)n
-(y)f(the)h(base)227 597 y(F)-7 b(rame)31 b(class)g(\(i.e.)48
-b(a)31 b(C)h Ft(")p Fj(prin)n(tf)p Ft(")e Fj(format)h(string\),)h(or)f
-(the)h(extended)f Ft(")p Fj(iso)p Ft(")f Fj(syn)n(tax)h(describ)r(ed)g
-(b)r(elo)n(w)g(\(the)227 697 y(default)d(v)-5 b(alue)28
-b(is)f(inherited)h(from)f(the)h(F)-7 b(rame)27 b(class\):)340
-952 y Fi(\017)45 b Fj(C)28 b Ft(")p Fj(prin)n(tf)p Ft(")f
-Fj(syn)n(tax:)36 b(If)28 b(the)g(F)-7 b(ormat)28 b(string)f(is)g(a)g(C)
-h Ft(")p Fj(prin)n(tf)p Ft(")f Fj(format)g(description)g(suc)n(h)h(as)f
-Ft(")p Fj(\0451.7G)p Ft(")p Fj(,)427 1052 y(the)32 b(TimeF)-7
-b(rame)31 b(axis)f(v)-5 b(alue)31 b(will)h(b)r(e)g(formatted)f(without)
-g(c)n(hange)f(as)h(a)g(\015oating)f(p)r(oin)n(t)i(v)-5
-b(alue)31 b(using)427 1151 y(this)f(format.)41 b(The)29
-b(formatted)g(string)f(will)i(th)n(us)f(represen)n(t)f(an)h(o\013set)g
-(from)f(the)i(zero)e(p)r(oin)n(t)h(sp)r(eci\014ed)427
-1251 y(b)n(y)24 b(the)h(TimeF)-7 b(rame's)23 b(TimeOrigin)g(attribute,)
-i(measured)f(in)g(units)h(giv)n(en)e(b)n(y)h(the)g(TimeF)-7
-b(rame's)24 b(Unit)427 1350 y(attribute.)340 1480 y Fi(\017)45
-b Ft(")p Fj(iso)p Ft(")31 b Fj(syn)n(tax:)45 b(This)33
-b(is)f(used)g(to)g(format)g(a)g(TimeF)-7 b(rame)31 b(axis)h(v)-5
-b(alue)32 b(as)g(a)f(Gregorian)g(date)h(follo)n(w)n(ed)427
-1579 y(b)n(y)g(an)g(optional)f(time)i(of)f(da)n(y)-7
-b(.)50 b(If)33 b(the)f(F)-7 b(ormat)32 b(v)-5 b(alue)32
-b(commences)f(with)i(the)f(string)g Ft(")p Fj(iso)p Ft(")f
-Fj(then)h(the)427 1679 y(TimeF)-7 b(rame)32 b(axis)f(v)-5
-b(alue)32 b(will)g(b)r(e)g(con)n(v)n(erted)f(to)h(an)f(absolute)h(MJD,)
-g(including)g(the)g(addition)g(of)g(the)427 1778 y(curren)n(t)d
-(TimeOrigin)f(v)-5 b(alue,)29 b(and)h(then)f(formatted)g(as)g(a)g
-(Gregorian)e(date)i(using)g(the)g(format)g Ft(")p Fj(yyyy-)427
-1878 y(mm-dd)p Ft(")p Fj(.)44 b(Optionally)-7 b(,)29
-b(the)i(F)-7 b(ormat)29 b(v)-5 b(alue)30 b(ma)n(y)f(include)h(an)f(in)n
-(teger)g(precision)g(follo)n(wing)g(the)h Ft(")p Fj(iso)p
-Ft(")427 1978 y Fj(sp)r(eci\014cation)e(\(e.g.)39 b Ft(")p
-Fj(iso.2)p Ft(")p Fj(\),)27 b(in)h(whic)n(h)h(case)e(the)i(time)g(of)f
-(da)n(y)f(will)i(b)r(e)f(app)r(ended)h(to)f(the)h(formatted)427
-2077 y(date)e(\(if)g(no)f(time)h(of)g(da)n(y)e(is)i(included,)g(the)g
-(date)f(\014eld)h(is)f(rounded)g(to)h(the)f(nearest)g(da)n(y\).)36
-b(The)27 b(in)n(teger)427 2177 y(v)-5 b(alue)26 b(in)g(the)h(F)-7
-b(ormat)25 b(string)g(indicates)h(the)g(n)n(um)n(b)r(er)g(of)g(decimal)
-g(places)f(to)h(use)g(in)g(the)g(seconds)f(\014eld.)427
-2277 y(F)-7 b(or)27 b(instance,)h(a)g(F)-7 b(ormat)27
-b(v)-5 b(alue)27 b(of)h Ft(")p Fj(iso.0)p Ft(")e Fj(pro)r(duces)h(a)h
-(time)g(of)g(da)n(y)f(of)h(the)g(form)f Ft(")p Fj(hh:mm:ss)p
-Ft(")p Fj(,)h(and)427 2376 y(a)i(F)-7 b(ormat)30 b(v)-5
-b(alue)30 b(of)g Ft(")p Fj(iso.2)p Ft(")e Fj(pro)r(duces)h(a)h(time)h
-(of)f(da)n(y)f(of)i(the)f(form)g Ft(")p Fj(hh:mm:ss.ss)p
-Ft(")p Fj(.)43 b(The)31 b(date)f(and)427 2476 y(time)e(\014elds)g(will)
-g(b)r(e)g(separated)e(b)n(y)h(a)h(space)e(unless)i('T')g(is)f(app)r
-(ended)h(to)f(the)h(end)g(of)g(string,)f(in)h(whic)n(h)427
-2575 y(case)c(the)h(letter)g(T)g(\(upp)r(er)g(case\))g(will)g(b)r(e)g
-(used)g(as)f(the)h(separator.)34 b(The)25 b(v)-5 b(alue)24
-b(of)h(the)g(Digits)g(attribute)427 2675 y(is)j(ignored)e(when)i(using)
-f(this)h Ft(")p Fj(iso)p Ft(")e Fj(format.)p 0 2867 3780
-12 v 0 2999 a Fz(F)-11 b(ull)1031 b Fe(Set)39 b(lev)m(el)e(of)i(output)
-e(detail)1030 b Fz(F)-11 b(ull)0 3180 y Fd(Description:)44
-b Fj(This)26 b(attribute)g(is)g(a)f(three-state)g(\015ag)g(and)g(tak)n
-(es)g(v)-5 b(alues)25 b(of)h(-1,)f(0)h(or)e(+1.)36 b(It)26
-b(con)n(trols)e(the)i(amoun)n(t)227 3280 y(of)i(information)f(included)
-h(in)g(the)g(output)g(generated)e(b)n(y)i(a)f(Channel.)227
-3402 y(If)33 b(F)-7 b(ull)32 b(is)g(zero,)h(then)f(a)g(mo)r(dest)g
-(amoun)n(t)g(of)g(non-essen)n(tial)e(but)j(useful)g(information)e(will)
-h(b)r(e)h(included)f(in)227 3502 y(the)j(output.)57 b(If)35
-b(F)-7 b(ull)35 b(is)f(negativ)n(e,)h(all)f(non-essen)n(tial)f
-(information)h(will)g(b)r(e)h(suppressed)e(to)i(minimise)f(the)227
-3602 y(amoun)n(t)27 b(of)h(output,)g(while)g(if)g(it)g(is)f(p)r(ositiv)
-n(e,)h(the)g(output)g(will)g(include)g(the)f(maxim)n(um)h(amoun)n(t)f
-(of)h(detailed)227 3701 y(information)f(ab)r(out)h(the)g(Ob)5
-b(ject)27 b(b)r(eing)h(written.)0 3847 y Fd(T)m(yp)s(e:)227
-3946 y Fj(In)n(teger.)0 4092 y Fd(Class)j(Applicabilit)m(y:)259
-4225 y(Channel)427 4325 y Fj(The)d(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(normal)f(Channel.)259 4454 y
-Fd(FitsChan)427 4553 y Fj(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero)e(for)i(a)f(FitsChan.)259 4682 y Fd(XmlChan)427
-4782 y Fj(The)h(default)g(v)-5 b(alue)27 b(is)h(-1)f(for)g(an)g
-(XmlChan.)259 4911 y Fd(StcsChan)427 5011 y Fj(The)i(default)g(v)-5
-b(alue)28 b(is)g(zero)f(for)h(an)g(StcsChan.)39 b(Set)29
-b(a)f(p)r(ositiv)n(e)g(v)-5 b(alue)28 b(to)g(cause)g(default)h(v)-5
-b(alues)28 b(to)g(b)r(e)427 5110 y(included)g(in)g(STC-S)g
-(descriptions.)0 5269 y Fd(Notes:)340 5547 y Fi(\017)45
-b Fj(All)27 b(p)r(ositiv)n(e)f(v)-5 b(alues)26 b(supplied)h(for)f(this)
-g(attribute)h(are)e(con)n(v)n(erted)g(to)h(+1)g(and)g(all)g(negativ)n
-(e)g(v)-5 b(alues)26 b(are)427 5647 y(con)n(v)n(erted)g(to)i(-1.)p
-eop end
-%%Page: 421 431
-TeXDict begin 421 430 bop 3643 52 a FF(421)p 0 351 3780
-12 v 0 490 a Fz(Gap\(axis\))779 483 y Fe(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(linearly)f(spaced)h(ma)7
-b(jor)37 b(axis)1492 598 y(v)-7 b(alues)39 b(of)f(a)g(Plot)3202
-490 y Fz(Gap\(axis\))0 735 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 835
-y(astGrid)k(function\))h(b)n(y)f(determining)g(the)h(linear)f(in)n
-(terv)-5 b(al)33 b(b)r(et)n(w)n(een)i(the)f Ft(")p Fj(ma)5
-b(jor)p Ft(")33 b Fj(axis)g(v)-5 b(alues)34 b(of)g(a)g(Plot,)227
-934 y(at)f(whic)n(h)h(\(for)f(example\))g(ma)5 b(jor)32
-b(tic)n(k)h(marks)g(are)f(dra)n(wn.)53 b(It)34 b(tak)n(es)e(a)h
-(separate)f(v)-5 b(alue)33 b(for)g(eac)n(h)f(ph)n(ysical)227
-1034 y(axis)i(of)g(the)h(Plot)f(so)f(that,)k(for)c(instance,)j(the)f
-(setting)f Ft(")p Fj(Gap\(2\)=3.0)p Ft(")e Fj(sp)r(eci\014es)j(the)f
-(di\013erence)h(b)r(et)n(w)n(een)227 1134 y(adjacen)n(t)30
-b(ma)5 b(jor)30 b(v)-5 b(alues)30 b(along)f(the)i(second)f(axis.)45
-b(The)31 b(Gap)g(attribute)f(is)h(only)f(used)h(when)f(the)h(LogTic)n
-(ks)227 1233 y(attribute)c(indicates)f(that)h(the)g(spacing)e(b)r(et)n
-(w)n(een)i(ma)5 b(jor)25 b(axis)h(v)-5 b(alues)26 b(is)g(to)h(b)r(e)f
-(linear.)36 b(If)27 b(ma)5 b(jor)25 b(axis)h(v)-5 b(alues)227
-1333 y(are)27 b(logarithmically)f(spaced)h(then)h(the)g(gap)f(is)g(sp)r
-(eci\014ed)h(using)f(attribute)h(LogGap.)227 1449 y(The)35
-b(Gap)f(v)-5 b(alue)35 b(supplied)g(will)f(usually)h(b)r(e)g(rounded)f
-(to)g(the)h(nearest)f Ft(")p Fj(nice)p Ft(")f Fj(v)-5
-b(alue,)37 b(suitable)d(\(e.g.\))58 b(for)227 1549 y(generating)26
-b(axis)g(lab)r(els,)h(b)r(efore)g(use.)36 b(T)-7 b(o)27
-b(a)n(v)n(oid)e(this)i Ft(")p Fj(nicing)p Ft(")f Fj(y)n(ou)h(should)f
-(set)h(an)g(explicit)g(format)g(for)f(the)227 1649 y(axis)g(using)h
-(the)g(F)-7 b(ormat\(axis\))26 b(or)g(Digits/Digits\(axis\))h
-(attribute.)37 b(The)27 b(default)g(b)r(eha)n(viour)f(is)g(for)h(the)g
-(Plot)227 1748 y(to)g(generate)f(its)h(o)n(wn)g(Gap)g(v)-5
-b(alue)27 b(when)g(required,)f(based)h(on)g(the)g(range)f(of)h(axis)f
-(v)-5 b(alues)27 b(to)g(b)r(e)h(represen)n(ted.)0 1881
-y Fd(T)m(yp)s(e:)227 1981 y Fj(Floating)f(p)r(oin)n(t.)0
-2114 y Fd(Class)k(Applicabilit)m(y:)259 2234 y(Plot)427
-2334 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2480 y Fd(Notes:)340 2746 y Fi(\017)45 b Fj(The)27 b(Gap)f(v)-5
-b(alue)27 b(should)f(use)g(the)h(same)f(units)h(as)f(are)g(used)g(in)n
-(ternally)g(for)g(storing)g(co)r(ordinate)f(v)-5 b(alues)427
-2845 y(on)32 b(the)h(corresp)r(onding)d(axis.)50 b(F)-7
-b(or)32 b(example,)h(with)g(a)f(celestial)g(co)r(ordinate)f(system,)i
-(the)g(Gap)f(v)-5 b(alue)427 2945 y(should)28 b(b)r(e)g(in)f(radians,)g
-(not)g(hours)g(or)g(degrees.)340 3062 y Fi(\017)45 b
-Fj(If)32 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)48
-b Ft(")p Fj(Gap)p Ft(")30 b Fj(instead)h(of)h Ft(")p
-Fj(Gap\(2\))p Ft(")p Fj(\),)f(then)h(a)f Ft(")p Fj(set)p
-Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")g Fj(op)r(eration)427
-3161 y(will)f(a\013ect)g(the)g(attribute)g(v)-5 b(alue)28
-b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f Ft(")p
-Fj(get)p Ft(")g Fj(or)f Ft(")p Fj(test)p Ft(")h Fj(op)r(eration)g(will)
-h(use)427 3261 y(just)f(the)g(Gap\(1\))g(v)-5 b(alue.)p
-0 3427 V 0 3559 a Fz(Grf)458 b Fe(Use)39 b(Grf)f(functions)g
-(registered)f(through)g(astGrfSet?)457 b Fz(Grf)0 3715
-y Fd(Description:)44 b Fj(This)23 b(attribute)f(selects)h(the)f
-(functions)h(whic)n(h)g(are)e(used)h(to)h(dra)n(w)e(graphics)g(b)n(y)h
-(the)h(Plot)f(class.)34 b(If)23 b(it)227 3815 y(is)k(zero,)f(then)h
-(the)g(functions)h(in)f(the)g(graphics)e(in)n(terface)h(selected)h(at)g
-(link-time)g(are)f(used)g(\(see)h(the)g(ast)p Ft(_)p
-Fj(link)227 3915 y(script\).)34 b(Otherwise,)20 b(functions)g
-(registered)d(using)i(astGrfSet)g(are)f(used.)34 b(In)19
-b(this)g(case,)h(if)f(a)g(function)h(is)e(needed)227
-4014 y(whic)n(h)30 b(has)g(not)g(b)r(een)h(registered,)e(then)i(the)f
-(function)h(in)f(the)h(graphics)e(in)n(terface)g(selected)h(at)g
-(link-time)h(is)227 4114 y(used.)227 4230 y(The)d(default)g(is)f(to)h
-(use)f(the)h(graphics)f(in)n(terface)0 4364 y Fd(T)m(yp)s(e:)227
-4463 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 4596 y Fd(Class)k
-(Applicabilit)m(y:)259 4716 y(Plot)427 4816 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)259 4933 y Fd(Plot3D)427 5032
-y Fj(The)h(Plot3D)f(class)g(ignores)f(this)h(attributes,)h(assuming)f
-(a)g(v)-5 b(alue)27 b(of)h(zero.)0 5178 y Fd(Notes:)340
-5444 y Fi(\017)45 b Fj(The)25 b(v)-5 b(alue)24 b(of)g(this)h(attribute)
-g(is)f(not)g(sa)n(v)n(ed)f(when)i(the)g(Plot)e(is)i(written)f(out)h
-(through)e(a)h(Channel)h(to)f(an)427 5544 y(external)30
-b(data)f(store.)44 b(On)30 b(re-loading)e(suc)n(h)i(a)g(Plot)g(using)f
-(astRead,)i(the)f(attribute)h(will)f(b)r(e)h(cleared,)427
-5643 y(resulting)c(in)h(the)g(graphics)e(in)n(terface)h(selected)h(at)f
-(link-time)h(b)r(eing)g(used.)p eop end
-%%Page: 422 432
-TeXDict begin 422 431 bop 0 52 a FF(422)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Grid)932 b Fe(Dra)m(w)38 b(grid)f(lines)i(for)e(a)
-i(Plot?)931 b Fz(Grid)0 700 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 800
-y(astGrid)d(function\))i(b)n(y)e(determining)g(whether)h(grid)f(lines)g
-(\(a)h(grid)e(of)i(curv)n(es)e(marking)h(the)g Ft(")p
-Fj(ma)5 b(jor)p Ft(")26 b Fj(v)-5 b(alues)227 900 y(on)28
-b(eac)n(h)e(axis\))h(are)g(dra)n(wn)g(across)e(the)j(plotting)g(area.)
-227 1036 y(If)h(the)g(Grid)f(v)-5 b(alue)28 b(of)h(a)f(Plot)f(is)i
-(non-zero,)e(then)i(grid)e(lines)i(will)f(b)r(e)h(dra)n(wn.)38
-b(Otherwise,)28 b(short)g(tic)n(k)g(marks)227 1136 y(on)g(the)h(axes)e
-(are)g(used)h(to)g(mark)g(the)g(ma)5 b(jor)27 b(axis)h(v)-5
-b(alues.)38 b(The)28 b(default)h(b)r(eha)n(viour)e(is)h(to)g(use)g(tic)
-n(k)g(marks)f(if)227 1235 y(the)h(en)n(tire)f(plotting)h(area)e(is)i
-(\014lled)g(b)n(y)f(v)-5 b(alid)28 b(ph)n(ysical)e(co)r(ordinates,)g
-(but)j(to)e(dra)n(w)g(grid)g(lines)g(otherwise.)0 1409
-y Fd(T)m(yp)s(e:)227 1508 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-1682 y Fd(Class)k(Applicabilit)m(y:)259 1842 y(Plot)427
-1942 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2128 y Fd(Notes:)340 2434 y Fi(\017)45 b Fj(The)31 b(spacing)f(b)r(et)n
-(w)n(een)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues,)31 b(whic)n(h)f
-(determines)h(the)g(spacing)e(of)i(grid)f(lines,)h(ma)n(y)f(b)r(e)427
-2534 y(set)e(using)f(the)h(Gap\(axis\))f(attribute.)p
-0 2757 V 0 2889 a Fz(GrismAlpha)181 b Fe(The)39 b(angle)e(of)i
-(incidence)f(of)g(the)h(incoming)1194 3003 y(ligh)m(t)d(on)j(the)g
-(grating)d(surface)3063 2889 y Fz(GrismAlpha)0 3216 y
-Fd(Description:)44 b Fj(This)29 b(attribute)f(holds)g(the)h(angle)f(b)r
-(et)n(w)n(een)g(the)h(incoming)f(ligh)n(t)g(and)g(the)h(normal)e(to)h
-(the)h(grating)227 3316 y(surface,)e(in)h(radians.)35
-b(The)28 b(default)g(v)-5 b(alue)28 b(is)f(0.)0 3489
-y Fd(T)m(yp)s(e:)227 3589 y Fj(Double)h(precision.)0
-3762 y Fd(Class)j(Applicabilit)m(y:)259 3923 y(GrismMap)427
-4022 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4246 V 0 4377 a Fz(GrismEps)317 b Fe(The)39 b(angle)f(b)s(et)m(w)m
-(een)g(the)g(normal)f(and)i(the)1478 4492 y(disp)s(ersion)f(plane)3200
-4377 y Fz(GrismEps)0 4709 y Fd(Description:)44 b Fj(This)22
-b(attribute)g(holds)f(the)i(angle)d(\(in)j(radians\))d(b)r(et)n(w)n
-(een)i(the)g(normal)f(to)h(the)g(grating)e(or)h(exit)h(prism)227
-4809 y(face,)36 b(and)e(the)g(disp)r(ersion)f(plane.)56
-b(The)34 b(disp)r(ersion)f(plane)h(is)g(the)h(plane)e(spanned)h(b)n(y)g
-(the)g(incoming)g(and)227 4909 y(outgoing)27 b(ra)n(y)-7
-b(.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(0.0.)0
-5082 y Fd(T)m(yp)s(e:)227 5182 y Fj(Double)g(precision.)0
-5355 y Fd(Class)j(Applicabilit)m(y:)259 5515 y(GrismMap)427
-5615 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-eop end
-%%Page: 423 433
-TeXDict begin 423 432 bop 3643 52 a FF(423)p 0 351 3780
-12 v 0 483 a Fz(GrismG)747 b Fe(The)39 b(grating)d(ruling)h(densit)m(y)
-747 b Fz(GrismG)0 675 y Fd(Description:)44 b Fj(This)34
-b(attribute)g(holds)f(the)h(n)n(um)n(b)r(er)g(of)f(grating)g(rulings)g
-(p)r(er)g(unit)i(length.)55 b(The)34 b(unit)g(of)g(length)227
-775 y(used)i(should)f(b)r(e)h(consisten)n(t)f(with)h(the)f(units)h
-(used)g(for)e(attributes)i(GrismW)-7 b(a)n(v)n(eR)34
-b(and)h(GrismNRP)-7 b(.)36 b(The)227 875 y(default)28
-b(v)-5 b(alue)28 b(is)f(0.0.)36 b(\(the)29 b(appropriate)c(v)-5
-b(alue)28 b(for)f(a)g(pure)h(prism)f(disp)r(erser)f(with)j(no)e
-(grating\).)0 1028 y Fd(T)m(yp)s(e:)227 1127 y Fj(Double)h(precision.)0
-1280 y Fd(Class)j(Applicabilit)m(y:)259 1420 y(GrismMap)427
-1520 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1723 V 0 1854 a Fz(GrismM)830 b Fe(The)38 b(in)m(terference)f(order)
-829 b Fz(GrismM)0 2023 y Fd(Description:)44 b Fj(This)28
-b(attribute)g(holds)f(the)h(in)n(terference)f(order)f(b)r(eing)i
-(considered.)36 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(0.)0
-2176 y Fd(T)m(yp)s(e:)227 2276 y Fj(In)n(teger.)0 2429
-y Fd(Class)k(Applicabilit)m(y:)259 2569 y(GrismMap)427
-2669 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 2871 V 0 3003 a Fz(GrismNR)387 b Fe(The)39 b(refractiv)m(e)d(index)i
-(at)g(the)h(reference)1607 3103 y(w)m(a)m(v)m(elength)3211
-3003 y Fz(GrismNR)0 3295 y Fd(Description:)44 b Fj(This)36
-b(attribute)f(holds)g(refractiv)n(e)f(index)h(of)h(the)f(grism)g
-(material)f(at)h(the)h(reference)e(w)n(a)n(v)n(elength)227
-3395 y(\(giv)n(en)27 b(b)n(y)h(attribute)f(GrismW)-7
-b(a)n(v)n(eR\).)27 b(The)h(default)g(v)-5 b(alue)27 b(is)h(1.0.)0
-3548 y Fd(T)m(yp)s(e:)227 3647 y Fj(Double)g(precision.)0
-3800 y Fd(Class)j(Applicabilit)m(y:)259 3940 y(GrismMap)427
-4040 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 4243 V 0 4374 a Fz(GrismNRP)266 b Fe(The)38 b(rate)g(of)g(c)m(hange)g
-(of)g(refractiv)m(e)e(index)1474 4489 y(with)h(w)m(a)m(v)m(elength)3119
-4374 y Fz(GrismNRP)0 4681 y Fd(Description:)44 b Fj(This)28
-b(attribute)g(holds)g(the)g(rate)f(of)h(c)n(hange)f(of)h(the)g
-(refractiv)n(e)f(index)h(of)g(the)g(grism)f(material)g(with)227
-4781 y(resp)r(ect)i(to)g(w)n(a)n(v)n(elength)e(at)i(the)g(reference)f
-(w)n(a)n(v)n(elength)f(\(giv)n(en)h(b)n(y)h(attribute)g(GrismW)-7
-b(a)n(v)n(eR\).)28 b(The)h(default)227 4880 y(v)-5 b(alue)31
-b(is)f(0.0)f(\(the)j(appropriate)c(v)-5 b(alue)31 b(for)e(a)h(pure)h
-(grating)e(disp)r(erser)g(with)i(no)f(prism\).)46 b(The)30
-b(units)h(of)f(this)227 4980 y(attribute)e(should)f(b)r(e)h(consisten)n
-(t)f(with)i(those)e(of)g(attributes)h(GrismW)-7 b(a)n(v)n(eR)26
-b(and)i(GrismG.)0 5133 y Fd(T)m(yp)s(e:)227 5233 y Fj(Double)g
-(precision.)0 5386 y Fd(Class)j(Applicabilit)m(y:)259
-5526 y(GrismMap)427 5625 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 424 434
-TeXDict begin 424 433 bop 0 52 a FF(424)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(GrismTheta)152 b Fe(Angle)38 b(b)s(et)m(w)m(een)g
-(normal)f(to)h(detector)f(plane)1449 598 y(and)i(reference)f(ra)m(y)
-3069 483 y Fz(GrismTheta)0 775 y Fd(Description:)44 b
-Fj(This)30 b(attribute)g(giv)n(es)f(the)h(angle)f(of)h(incidence)g(of)g
-(ligh)n(t)f(of)h(the)g(reference)f(w)n(a)n(v)n(elength)g(\(giv)n(en)g
-(b)n(y)227 875 y(attribute)d(GrismW)-7 b(a)n(v)n(eR\))25
-b(on)n(to)g(the)h(detector.)36 b(Sp)r(eci\014cally)-7
-b(,)26 b(it)h(holds)e(the)h(angle)f(\(in)i(radians\))d(b)r(et)n(w)n
-(een)i(the)227 974 y(normal)f(to)h(the)g(detector)f(plane)g(and)h(an)g
-(inciden)n(t)g(ra)n(y)e(at)i(the)g(reference)f(w)n(a)n(v)n(elength.)34
-b(The)26 b(default)g(v)-5 b(alue)26 b(is)227 1074 y(0.0.)0
-1215 y Fd(T)m(yp)s(e:)227 1315 y Fj(Double)i(precision.)0
-1456 y Fd(Class)j(Applicabilit)m(y:)259 1585 y(GrismMap)427
-1684 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 1868 V 0 1999 a Fz(GrismW)-11 b(a)l(v)l(eR)461 b Fe(The)39
-b(reference)f(w)m(a)m(v)m(elength)456 b Fz(GrismW)-11
-b(a)l(v)l(eR)0 2177 y Fd(Description:)44 b Fj(This)34
-b(attribute)g(holds)f(reference)g(w)n(a)n(v)n(elength.)54
-b(The)34 b(default)g(v)-5 b(alue)34 b(is)f(5000)f(\(Angstrom\).)56
-b(The)227 2276 y(units)28 b(of)g(this)g(attribute)g(should)f(b)r(e)h
-(consisten)n(t)f(with)h(those)f(of)h(attributes)f(GrismNRP)h(and)f
-(GrismG.)0 2418 y Fd(T)m(yp)s(e:)227 2518 y Fj(Double)h(precision.)0
-2659 y Fd(Class)j(Applicabilit)m(y:)259 2787 y(GrismMap)427
-2887 y Fj(All)d(GrismMaps)f(ha)n(v)n(e)g(this)g(attribute.)p
-0 3070 V 0 3201 a Fz(ID)1197 3202 y Fe(Ob)7 b(ject)38
-b(iden)m(ti\014cation)d(string)3626 3201 y Fz(ID)0 3375
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(tains)f(a)h
-(string)f(whic)n(h)h(ma)n(y)f(b)r(e)h(used)g(to)g(iden)n(tify)h(the)f
-(Ob)5 b(ject)30 b(to)g(whic)n(h)f(it)i(is)227 3474 y(attac)n(hed.)36
-b(There)26 b(is)g(no)g(restriction)g(on)g(the)h(con)n(ten)n(ts)e(of)i
-(this)f(string,)g(whic)n(h)h(is)f(not)g(used)h(in)n(ternally)e(b)n(y)h
-(the)227 3574 y(AST)h(library)-7 b(,)25 b(and)g(is)h(simply)g(returned)
-f(without)h(c)n(hange)f(when)h(required.)35 b(The)26
-b(default)h(v)-5 b(alue)25 b(is)h(an)g(empt)n(y)227 3674
-y(string.)227 3794 y(An)k(iden)n(ti\014cation)e(string)g(can)h(b)r(e)g
-(v)-5 b(aluable)28 b(when,)i(for)e(example,)h(sev)n(eral)e(Ob)5
-b(jects)28 b(ha)n(v)n(e)g(b)r(een)h(stored)f(in)h(a)227
-3894 y(\014le)34 b(\(using)f(astW)-7 b(rite\))33 b(and)g(are)g(later)f
-(retriev)n(ed)g(\(using)h(astRead\).)54 b(Consisten)n(t)33
-b(use)g(of)g(the)h(ID)f(attribute)227 3994 y(allo)n(ws)26
-b(the)h(retriev)n(ed)f(Ob)5 b(jects)26 b(to)h(b)r(e)g(iden)n(ti\014ed)h
-(without)f(dep)r(ending)g(simply)g(on)g(the)g(order)e(in)j(whic)n(h)e
-(they)227 4093 y(w)n(ere)h(stored.)227 4214 y(This)37
-b(attribute)g(ma)n(y)f(also)g(b)r(e)h(useful)h(during)e(debugging,)j
-(to)d(distinguish)h(similar)f(Ob)5 b(jects)37 b(when)g(using)227
-4313 y(astSho)n(w)27 b(to)g(displa)n(y)g(them.)0 4455
-y Fd(T)m(yp)s(e:)227 4554 y Fj(String.)0 4696 y Fd(Class)k
-(Applicabilit)m(y:)259 4824 y(Ob)5 b(ject)427 4924 y
-Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)0
-5078 y Fd(Notes:)340 5352 y Fi(\017)45 b Fj(Unlik)n(e)25
-b(most)h(other)e(attributes,)i(the)f(v)-5 b(alue)25 b(of)h(the)f(ID)h
-(attribute)f(is)g(not)h(transferred)d(when)j(an)f(Ob)5
-b(ject)427 5452 y(is)31 b(copied.)45 b(Instead,)31 b(its)g(v)-5
-b(alue)30 b(is)h(unde\014ned)g(\(and)g(therefore)e(defaults)i(to)g(an)f
-(empt)n(y)g(string\))h(in)f(an)n(y)427 5552 y(cop)n(y)-7
-b(.)53 b(Ho)n(w)n(ev)n(er,)33 b(it)h(is)f(retained)f(in)i(an)n(y)e
-(external)h(represen)n(tation)e(of)i(an)g(Ob)5 b(ject)33
-b(pro)r(duced)g(b)n(y)g(the)427 5651 y(astW)-7 b(rite)28
-b(function.)p eop end
-%%Page: 425 435
-TeXDict begin 425 434 bop 3643 52 a FF(425)p 0 351 3780
-12 v 0 482 a Fz(IF)437 483 y Fe(The)39 b(in)m(termediate)c(frequency)j
-(in)h(a)g(dual)f(sideband)g(sp)s(ectrum)3645 482 y Fz(IF)0
-687 y Fd(Description:)44 b Fj(This)26 b(attribute)h(sp)r(eci\014es)f
-(the)g(\(top)r(o)r(cen)n(tric\))g(in)n(termediate)g(frequency)g(in)g(a)
-g(dual)g(sideband)g(sp)r(ec-)227 786 y(trum.)41 b(Its)29
-b(sole)g(use)g(is)f(to)h(determine)g(the)h(lo)r(cal)e(oscillator)f
-(\(LO\))i(frequency)g(\(the)g(frequency)g(whic)n(h)g(marks)227
-886 y(the)h(b)r(oundary)f(b)r(et)n(w)n(een)g(the)h(lo)n(w)n(er)d(and)j
-(upp)r(er)f(sidebands\).)42 b(The)29 b(LO)g(frequency)g(is)g(equal)g
-(to)g(the)h(sum)g(of)227 985 y(the)d(cen)n(tre)f(frequency)g(and)g(the)
-h(in)n(termediate)f(frequency)-7 b(.)36 b(Here,)26 b(the)h
-Ft(")p Fj(cen)n(tre)e(frequency)p Ft(")h Fj(is)g(the)h(top)r(o)r(cen-)
-227 1085 y(tric)h(frequency)g(in)g(Hz)g(corresp)r(onding)e(to)i(the)h
-(curren)n(t)e(v)-5 b(alue)28 b(of)g(the)g(DSBCen)n(tre)g(attribute.)39
-b(The)28 b(v)-5 b(alue)28 b(of)227 1185 y(the)33 b(IF)f(attribute)g(ma)
-n(y)f(b)r(e)i(p)r(ositiv)n(e)e(or)g(negativ)n(e:)45 b(a)31
-b(p)r(ositiv)n(e)h(v)-5 b(alue)32 b(results)f(in)h(the)h(LO)e
-(frequency)h(b)r(eing)227 1284 y(ab)r(o)n(v)n(e)23 b(the)h(cen)n(tral)f
-(frequency)-7 b(,)24 b(whilst)g(a)g(negativ)n(e)f(IF)h(v)-5
-b(alue)23 b(results)h(in)g(the)g(LO)f(frequency)h(b)r(eing)g(b)r(elo)n
-(w)f(the)227 1384 y(cen)n(tral)g(frequency)-7 b(.)36
-b(The)24 b(sign)f(of)h(the)g(IF)h(attribute)f(v)-5 b(alue)24
-b(determines)f(the)i(default)f(v)-5 b(alue)24 b(for)f(the)i(SideBand)
-227 1484 y(attribute.)227 1613 y(When)g(setting)f(a)f(new)h(v)-5
-b(alue)24 b(for)f(this)h(attribute,)h(the)g(units)f(in)g(whic)n(h)g
-(the)g(frequency)g(v)-5 b(alue)23 b(is)h(supplied)g(ma)n(y)227
-1713 y(b)r(e)j(indicated)g(b)n(y)f(app)r(ending)h(a)f(suitable)h
-(string)e(to)i(the)g(end)g(of)f(the)h(formatted)g(v)-5
-b(alue.)36 b(If)27 b(the)g(units)g(are)f(not)227 1813
-y(sp)r(eci\014ed,)35 b(then)f(the)g(supplied)f(v)-5 b(alue)33
-b(is)g(assumed)g(to)g(b)r(e)h(in)f(units)h(of)f(GHz.)54
-b(F)-7 b(or)33 b(instance,)h(the)g(follo)n(wing)227 1912
-y(strings)27 b(all)g(result)h(in)f(an)h(IF)g(of)f(4)g(GHz)h(b)r(eing)g
-(used:)37 b Ft(")p Fj(4.0)p Ft(")p Fj(,)26 b Ft(")p Fj(4.0)g(GHz)p
-Ft(")p Fj(,)i Ft(")p Fj(4.0E9)d(Hz)p Ft(")p Fj(,)j(etc.)227
-2042 y(When)d(getting)g(the)g(v)-5 b(alue)24 b(of)h(this)g(attribute,)g
-(the)g(returned)f(v)-5 b(alue)25 b(is)f(alw)n(a)n(ys)f(in)i(units)g(of)
-f(GHz.)37 b(The)24 b(default)227 2141 y(v)-5 b(alue)28
-b(for)f(this)h(attribute)f(is)h(4)f(GHz.)0 2301 y Fd(T)m(yp)s(e:)227
-2401 y Fj(Floating)g(p)r(oin)n(t.)0 2560 y Fd(Class)k(Applicabilit)m
-(y:)259 2707 y(DSBSp)s(ecF)-8 b(rame)427 2807 y Fj(All)28
-b(DSBSp)r(ecF)-7 b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 3016 V 0 3148 a Fz(Iden)l(t)591 b Fe(P)m(ermanen)m(t)37
-b(Ob)7 b(ject)37 b(iden)m(ti\014cation)f(string)589 b
-Fz(Iden)l(t)0 3347 y Fd(Description:)44 b Fj(This)30
-b(attribute)f(is)g(lik)n(e)g(the)h(ID)g(attribute,)f(in)h(that)g(it)f
-(con)n(tains)g(a)f(string)h(whic)n(h)g(ma)n(y)g(b)r(e)g(used)h(to)227
-3446 y(iden)n(tify)c(the)f(Ob)5 b(ject)25 b(to)g(whic)n(h)g(it)h(is)f
-(attac)n(hed.)35 b(The)25 b(only)g(di\013erence)g(b)r(et)n(w)n(een)g
-(ID)h(and)f(Iden)n(t)g(is)g(that)g(Iden)n(t)227 3546
-y(is)j(transferred)e(when)i(an)f(Ob)5 b(ject)27 b(is)h(copied,)f(but)i
-(ID)f(is)f(not.)0 3706 y Fd(T)m(yp)s(e:)227 3805 y Fj(String.)0
-3965 y Fd(Class)k(Applicabilit)m(y:)259 4112 y(Ob)5 b(ject)427
-4211 y Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4421 V 0 4551 a Fz(ImagF)-11 b(req)816 4552 y Fe(The)39
-b(image)e(sideband)h(equiv)-7 b(alen)m(t)37 b(of)i(the)f(rest)1644
-4667 y(frequency)3224 4551 y Fz(ImagF)-11 b(req)0 4866
-y Fd(Description:)44 b Fj(This)24 b(is)g(a)g(read-only)e(attribute)i
-(giving)f(the)i(frequency)e(whic)n(h)h(corresp)r(onds)e(to)i(the)h
-(rest)e(frequency)227 4966 y(but)28 b(is)g(in)g(the)g(opp)r(osite)f
-(sideband.)227 5095 y(The)i(v)-5 b(alue)29 b(is)g(calculated)f(b)n(y)h
-(\014rst)f(transforming)g(the)h(rest)f(frequency)h(\(giv)n(en)f(b)n(y)g
-(the)i(RestF)-7 b(req)28 b(attribute\))227 5195 y(from)f(the)g
-(standard)f(of)h(rest)f(of)h(the)g(source)f(\(giv)n(en)g(b)n(y)h(the)g
-(SourceV)-7 b(el)26 b(and)h(SourceVRF)f(attributes\))h(to)g(the)227
-5295 y(standard)i(of)h(rest)f(of)h(the)g(observ)n(er)e(\(i.e.)44
-b(the)30 b(top)r(o)r(cen)n(tric)f(standard)g(of)h(rest\).)43
-b(The)30 b(resulting)f(top)r(o)r(cen)n(tric)227 5394
-y(frequency)h(is)g(assumed)g(to)g(b)r(e)h(in)f(the)h(same)f(sideband)g
-(as)g(the)g(v)-5 b(alue)30 b(giv)n(en)g(for)g(the)g(DSBCen)n(tre)g
-(attribute)227 5494 y(\(the)c Ft(")p Fj(observ)n(ed)p
-Ft(")d Fj(sideband\),)j(and)f(is)h(transformed)e(to)h(the)h(other)e
-(sideband)i(\(the)g Ft(")p Fj(image)p Ft(")d Fj(sideband\).)37
-b(The)227 5593 y(new)32 b(frequency)f(is)h(con)n(v)n(erted)f(bac)n(k)f
-(to)i(the)g(standard)f(of)h(rest)f(of)h(the)g(source,)g(and)g(the)g
-(resulting)f(v)-5 b(alue)32 b(is)227 5693 y(returned)27
-b(as)g(the)h(attribute)g(v)-5 b(alue,)28 b(in)g(units)g(of)f(GHz.)p
-eop end
-%%Page: 426 436
-TeXDict begin 426 435 bop 0 52 a FF(426)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(Floating)c(p)r(oin)n(t,)h(read-only)-7
-b(.)0 602 y Fd(Class)31 b(Applicabilit)m(y:)259 740 y(DSBSp)s(ecF)-8
-b(rame)427 840 y Fj(All)28 b(DSBSp)r(ecF)-7 b(rames)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 1041 3780 12 v 0
-1173 a Fz(In)l(traFlag)582 b Fe(In)m(traMap)37 b(iden)m(ti\014cation)f
-(string)578 b Fz(In)l(traFlag)0 1363 y Fd(Description:)44
-b Fj(This)32 b(attribute)g(allo)n(ws)e(an)h(In)n(traMap)f(to)i(b)r(e)g
-(\015agged)e(so)h(that)h(it)f(is)h(distinguishable)f(from)g(other)227
-1463 y(In)n(traMaps.)k(The)24 b(transformation)f(function)i(asso)r
-(ciated)e(with)i(the)f(In)n(traMap)g(ma)n(y)f(then)i(enquire)f(the)h(v)
--5 b(alue)227 1563 y(of)34 b(this)g(attribute)h(and)e(adapt)h(the)g
-(transformation)f(it)h(pro)n(vides)f(according)f(to)i(the)g(particular)
-f(In)n(traMap)227 1662 y(in)n(v)n(olv)n(ed.)227 1788
-y(Although)28 b(this)h(is)f(a)g(string)f(attribute,)h(it)h(ma)n(y)e
-(often)i(b)r(e)f(useful)h(to)f(store)f(n)n(umerical)g(v)-5
-b(alues)28 b(here,)g(enco)r(ded)227 1887 y(as)e(a)h(c)n(haracter)d
-(string,)i(and)h(to)g(use)f(these)h(as)f(data)g(within)h(the)h
-(transformation)d(function.)37 b(Note,)27 b(ho)n(w)n(ev)n(er,)227
-1987 y(that)i(this)f(mec)n(hanism)f(is)h(not)g(suitable)g(for)g
-(transferring)e(large)g(amoun)n(ts)i(of)f(data)h(\(more)f(than)i(ab)r
-(out)e(1000)227 2087 y(c)n(haracters\))33 b(to)h(an)h(In)n(traMap.)57
-b(F)-7 b(or)34 b(that)h(purp)r(ose,)h(global)d(v)-5 b(ariables)34
-b(are)f(recommended,)j(although)e(the)227 2186 y(In)n(traFlag)24
-b(v)-5 b(alue)25 b(can)f(b)r(e)i(used)f(to)g(supplemen)n(t)g(this)h
-(approac)n(h.)34 b(The)25 b(default)g(In)n(traFlag)f(v)-5
-b(alue)25 b(is)g(an)g(empt)n(y)227 2286 y(string.)0 2437
-y Fd(T)m(yp)s(e:)227 2537 y Fj(String.)0 2688 y Fd(Class)31
-b(Applicabilit)m(y:)259 2826 y(In)m(traMap)427 2926 y
-Fj(All)d(In)n(traMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-3090 y Fd(Notes:)340 3374 y Fi(\017)45 b Fj(A)34 b(pair)f(of)g(In)n
-(traMaps)f(whose)h(transformations)e(ma)n(y)i(p)r(oten)n(tially)g
-(cancel)g(cannot)g(b)r(e)h(simpli\014ed)g(to)427 3473
-y(pro)r(duce)25 b(a)f(UnitMap)i(\(e.g.)36 b(using)24
-b(astSimplify\))i(unless)f(they)g(ha)n(v)n(e)f(the)h(same)f(In)n
-(traFlag)g(v)-5 b(alues.)36 b(The)427 3573 y(test)28
-b(for)f(equalit)n(y)g(is)h(case-sensitiv)n(e.)p 0 3774
-V 0 3905 a Fz(In)l(v)l(ert)1307 3906 y Fe(Mapping)38
-b(in)m(v)m(ersion)f(\015ag)3423 3905 y Fz(In)l(v)l(ert)0
-4096 y Fd(Description:)44 b Fj(This)25 b(attribute)g(con)n(trols)e
-(whic)n(h)i(one)f(of)h(a)f(Mapping's)h(t)n(w)n(o)f(p)r(ossible)g(co)r
-(ordinate)g(transformations)227 4196 y(is)29 b(considered)e(the)i
-Ft(")p Fj(forw)n(ard)p Ft(")d Fj(transformation)g(\(the)j(other)f(b)r
-(eing)h(the)f Ft(")p Fj(in)n(v)n(erse)p Ft(")f Fj(transformation\).)37
-b(If)29 b(the)227 4296 y(attribute)36 b(v)-5 b(alue)36
-b(is)f(zero)g(\(the)h(default\),)j(the)d(Mapping's)f(b)r(eha)n(viour)f
-(will)i(b)r(e)g(the)g(same)g(as)f(when)g(it)i(w)n(as)227
-4395 y(\014rst)29 b(created.)39 b(Ho)n(w)n(ev)n(er,)27
-b(if)i(it)g(is)g(non-zero,)e(its)i(t)n(w)n(o)f(transformations)f(will)i
-(b)r(e)g(in)n(ter-c)n(hanged,)e(so)h(that)h(the)227 4495
-y(Mapping)f(displa)n(ys)e(the)i(in)n(v)n(erse)e(of)i(its)f(original)g
-(b)r(eha)n(viour.)227 4620 y(In)n(v)n(erting)k(the)h(b)r(o)r(olean)g
-(sense)f(of)h(the)g(In)n(v)n(ert)f(attribute)h(will)h(cause)e(the)h(v)
--5 b(alues)32 b(of)f(a)h(Mapping's)f(Nin)i(and)227 4720
-y(Nout)25 b(attributes)g(to)g(b)r(e)g(in)n(terc)n(hanged.)34
-b(The)25 b(v)-5 b(alues)25 b(of)f(its)h(T)-7 b(ranF)g(orw)n(ard)23
-b(and)h(T)-7 b(ranIn)n(v)n(erse)23 b(attributes)h(will)227
-4820 y(also)j(b)r(e)h(in)n(terc)n(hanged.)35 b(This)28
-b(op)r(eration)e(ma)n(y)h(b)r(e)h(p)r(erformed)f(with)h(the)g(astIn)n
-(v)n(ert)f(function.)0 4971 y Fd(T)m(yp)s(e:)227 5071
-y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 5222 y Fd(Class)k(Applicabilit)m
-(y:)259 5360 y(Mapping)427 5460 y Fj(All)d(Mappings)f(ha)n(v)n(e)g
-(this)h(attribute.)259 5593 y Fd(UnitMap)427 5693 y Fj(The)g(v)-5
-b(alue)27 b(of)h(the)g(In)n(v)n(ert)f(attribute)g(has)g(no)h(e\013ect)g
-(on)f(the)h(b)r(eha)n(viour)e(of)i(a)f(UnitMap.)p eop
-end
-%%Page: 427 437
-TeXDict begin 427 436 bop 3643 52 a FF(427)259 351 y
-Fd(F)-8 b(rameSet)427 451 y Fj(In)n(v)n(erting)35 b(the)h(b)r(o)r
-(olean)e(sense)h(of)h(the)g(In)n(v)n(ert)f(attribute)g(for)g(a)g(F)-7
-b(rameSet)36 b(will)f(cause)g(its)h(base)f(and)427 551
-y(curren)n(t)25 b(F)-7 b(rames)25 b(\(and)h(its)f(Base)g(and)g(Curren)n
-(t)g(attributes\))h(to)f(b)r(e)h(in)n(terc)n(hanged.)35
-b(This,)26 b(in)g(turn,)g(ma)n(y)427 650 y(a\013ect)31
-b(other)f(prop)r(erties)g(and)g(attributes)h(of)f(the)h(F)-7
-b(rameSet)31 b(\(suc)n(h)f(as)g(Nin,)i(Nout,)g(Naxes,)e(T)-7
-b(ranF)g(or-)427 750 y(w)n(ard,)24 b(T)-7 b(ranIn)n(v)n(erse,)23
-b(etc.\).)37 b(The)24 b(In)n(v)n(ert)g(attribute)g(of)h(a)f(F)-7
-b(rameSet)24 b(is)h(not)f(itself)h(a\013ected)g(b)n(y)f(selecting)427
-849 y(a)j(new)h(base)f(or)g(curren)n(t)g(F)-7 b(rame.)p
-0 1070 3780 12 v 0 1202 a Fz(In)l(visible)521 b Fe(Dra)m(w)38
-b(graphics)f(using)i(in)m(visible)e(ink?)519 b Fz(In)l(visible)0
-1412 y Fd(Description:)44 b Fj(This)31 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(Plot)g
-(metho)r(ds)h(b)n(y)f(de-)227 1512 y(termining)e(whether)f(graphics)f
-(should)i(b)r(e)g(visible)f(or)g(in)n(visible.)227 1647
-y(If)37 b(the)f(In)n(visible)g(v)-5 b(alue)36 b(of)g(a)g(Plot)g(is)g
-(non-zero,)h(then)f(all)g(the)h(Plot)e(metho)r(ds)i(whic)n(h)f
-(normally)f(generate)227 1747 y(graphical)23 b(output)h(do)g(not)g(do)f
-(so)h(\(y)n(ou)f(can)h(think)g(of)g(them)h(dra)n(wing)d(with)i
-Ft(")p Fj(in)n(visible)g(ink)p Ft(")p Fj(\).)35 b(Suc)n(h)24
-b(metho)r(ds)227 1846 y(do,)32 b(ho)n(w)n(ev)n(er,)f(con)n(tin)n(ue)g
-(to)g(do)g(all)g(the)h(calculations)e(whic)n(h)i(w)n(ould)f(b)r(e)g
-(needed)h(to)f(pro)r(duce)g(the)h(graphics.)227 1946
-y(In)g(particular,)g(the)g(b)r(ounding)f(b)r(o)n(x)g(enclosing)g(the)h
-(graphics)e(is)i(still)g(calculated)f(and)h(can)f(b)r(e)h(retriev)n(ed)
-e(as)227 2046 y(normal)22 b(using)h(astBoundingBo)n(x.)33
-b(The)23 b(default)g(v)-5 b(alue)23 b(is)g(zero,)g(resulting)f(in)i
-(all)e(metho)r(ds)h(dra)n(wing)f(graphics)227 2145 y(as)27
-b(normal,)g(using)g(visible)h(ink.)0 2316 y Fd(T)m(yp)s(e:)227
-2416 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 2587 y Fd(Class)k
-(Applicabilit)m(y:)259 2745 y(Plot)427 2844 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)p 0 3065 V 0 3197 a Fz(IsLinear)832
-b Fe(Is)39 b(the)g(Mapping)f(linear?)830 b Fz(IsLinear)0
-3407 y Fd(Description:)44 b Fj(This)22 b(attribute)g(indicates)f
-(whether)g(a)g(Mapping)h(is)f(an)g(instance)g(of)h(a)f(class)g(that)g
-(alw)n(a)n(ys)f(represen)n(ts)227 3506 y(a)j(linear)g(transformation.)
-33 b(Note,)25 b(some)d(Mapping)h(classes)f(can)h(represen)n(t)f(linear)
-g(or)h(non-linear)f(transforma-)227 3606 y(tions)29 b(\(the)h(MathMap)e
-(class)g(for)h(instance\).)41 b(Suc)n(h)29 b(classes)e(ha)n(v)n(e)h(a)g
-(zero)g(v)-5 b(alue)29 b(for)f(the)i(IsLinear)d(attribute.)227
-3706 y(Sp)r(eci\014c)33 b(instances)g(of)f(suc)n(h)h(classes)e(can)h(b)
-r(e)h(tested)g(for)f(linearit)n(y)g(using)h(the)g(astLinearAppro)n(x)d
-(function.)227 3805 y(AST)p Ft(_)p Fj(LINEARAPPR)n(O)n(X)d(routine.)0
-3976 y Fd(T)m(yp)s(e:)227 4076 y Fj(In)n(teger)g(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 4247 y Fd(Class)31 b(Applicabilit)m(y:)259
-4405 y(Mapping)427 4504 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4648 y Fd(CmpMap)427 4748 y Fj(The)23
-b(IsLinear)f(v)-5 b(alue)23 b(for)f(a)h(CmpMap)f(is)h(determined)g(b)n
-(y)g(the)g(classes)f(of)h(the)g(encapsulated)f(Mappings.)427
-4847 y(F)-7 b(or)34 b(instance,)i(a)e(CmpMap)g(that)h(com)n(bines)e(a)h
-(Zo)r(omMap)g(and)g(a)g(ShiftMap)h(will)f(ha)n(v)n(e)f(a)h(non-zero)427
-4947 y(v)-5 b(alue)31 b(for)f(its)g(IsLinear)g(attribute,)h(but)g(a)f
-(CmpMap)h(that)g(con)n(tains)e(a)h(MathMap)h(will)f(ha)n(v)n(e)g(a)g(v)
--5 b(alue)427 5046 y(of)28 b(zero)e(for)h(its)h(IsLinear)f(attribute.)
-259 5190 y Fd(F)-8 b(rame)427 5290 y Fj(The)28 b(IsLinear)e(v)-5
-b(alue)28 b(for)f(a)g(F)-7 b(rame)27 b(is)h(1)f(\(since)g(a)h(F)-7
-b(rame)27 b(is)g(equiv)-5 b(alen)n(t)28 b(to)f(a)g(UnitMap\).)259
-5433 y Fd(F)-8 b(rameSet)427 5533 y Fj(The)26 b(IsLinear)f(v)-5
-b(alue)25 b(for)g(a)h(F)-7 b(rameSet)25 b(is)h(obtained)f(from)g(the)i
-(Mapping)e(from)g(the)h(base)f(F)-7 b(rame)26 b(to)f(the)427
-5632 y(curren)n(t)i(F)-7 b(rame.)p eop end
-%%Page: 428 438
-TeXDict begin 428 437 bop 0 52 a FF(428)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(IsSimple)518 b Fe(Has)38 b(the)h(Mapping)f(b)s
-(een)h(simpli\014ed?)516 b Fz(IsSimple)0 662 y Fd(Description:)44
-b Fj(This)19 b(attribute)g(indicates)g(whether)g(a)g(Mapping)f(has)h(b)
-r(een)g(simpli\014ed)h(b)n(y)e(the)i(astSimplify)f(metho)r(d.)227
-761 y(If)34 b(the)g(IsSimple)g(v)-5 b(alue)34 b(is)g(non-zero,)f(then)h
-(the)g(Mapping)g(has)f(b)r(een)h(simpli\014ed)g(and)g(so)f(there)g(is)h
-(nothing)227 861 y(to)39 b(b)r(e)g(gained)f(b)n(y)h(simplifying)g(it)g
-(again.)69 b(Indeed,)42 b(the)d(astSimplify)g(metho)r(d)g(will)g
-(immediately)g(return)227 961 y(the)e(Mapping)f(unc)n(hanged)g(if)h
-(the)g(IsSimple)g(attribute)g(indicates)f(that)h(the)g(Mapping)f(has)g
-(already)f(b)r(een)227 1060 y(simpli\014ed.)0 1205 y
-Fd(T)m(yp)s(e:)227 1304 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 1449 y Fd(Class)31 b(Applicabilit)m(y:)259
-1580 y(Mapping)427 1680 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1808 y Fd(F)-8 b(rame)427 1907 y Fj(All)32
-b(classes)e(of)h(F)-7 b(rame)30 b(return)h(zero)f(for)h(the)g(IsSimple)
-g(attribute.)48 b(This)31 b(is)g(b)r(ecause)g(c)n(hanges)e(can)i(b)r(e)
-427 2007 y(made)g(to)h(a)f(F)-7 b(rame)31 b(whic)n(h)g(a\013ect)g(the)h
-(Mapping)f(represen)n(ted)f(b)n(y)h(the)h(F)-7 b(rame,)32
-b(and)f(so)g(there)g(can)g(b)r(e)427 2107 y(no)c(guaran)n(tee)e(that)i
-(the)g(Mapping)f(ma)n(y)h(not)f(need)h(re-simplifying.)36
-b(Most)27 b(non-F)-7 b(rame)25 b(Mappings,)i(on)427 2206
-y(the)32 b(other)e(hand,)i(are)e(imm)n(utable)i(and)f(so)f(when)h(they)
-h(are)e(simpli\014ed)h(it)h(is)f(certain)f(that)h(they)h(w)n(eill)427
-2306 y(remain)27 b(in)h(a)f(simple)h(state.)p 0 2495
-V 0 2626 a Fz(Iw)l(c)498 2627 y Fe(Include)39 b(a)f(F)-10
-b(rame)39 b(represen)m(ting)d(FITS-W)m(CS)j(in)m(termediate)1410
-2742 y(w)m(orld)e(co)s(ordinates?)3576 2626 y Fz(Iw)l(c)0
-2897 y Fd(Description:)44 b Fj(This)26 b(attribute)g(is)g(a)g(b)r(o)r
-(olean)f(v)-5 b(alue)26 b(whic)n(h)g(is)g(used)g(when)g(a)g(F)-7
-b(rameSet)25 b(is)h(read)f(from)h(a)g(FitsChan)227 2997
-y(with)35 b(a)f(foreign)f(FITS)i(enco)r(ding)f(\(e.g.)57
-b(FITS-W)n(CS\))34 b(using)g(astRead.)56 b(If)35 b(it)g(has)e(a)h
-(non-zero)f(v)-5 b(alue)34 b(then)227 3096 y(the)28 b(returned)g(F)-7
-b(rameSet)27 b(will)i(include)f(F)-7 b(rames)27 b(represen)n(ting)f
-Ft(")p Fj(in)n(termediate)h(w)n(orld)g(co)r(ordinates)p
-Ft(")f Fj(\(IW)n(C\).)227 3196 y(These)40 b(F)-7 b(rames)40
-b(will)h(ha)n(v)n(e)e(Domain)i(name)f Ft(")p Fj(IW)n(C)p
-Ft(")g Fj(for)g(primary)f(axis)h(descriptions,)j(and)d
-Ft(")p Fj(IW)n(Ca)p Ft(")f Fj(for)227 3296 y(secondary)20
-b(axis)g(descriptions,)i(where)e Ft(")p Fj(a)p Ft(")g
-Fj(is)h(replaced)f(b)n(y)h(the)h(single)e(alternate)h(axis)f
-(description)h(c)n(haracter,)227 3395 y(as)27 b(used)h(in)g(the)g
-(FITS-W)n(CS)f(header.)36 b(The)28 b(default)g(v)-5 b(alue)28
-b(for)f Ft(")p Fj(Iw)n(c)p Ft(")f Fj(is)h(zero.)227 3517
-y(FITS-W)n(CS)22 b(pap)r(er)g(1)f(de\014nes)h(IW)n(C)g(as)f(a)g
-(Cartesian)g(co)r(ordinate)g(system)g(with)h(one)g(axis)f(for)g(eac)n
-(h)g(W)n(CS)h(axis,)227 3617 y(and)f(is)g(the)g(co)r(ordinate)f(system)
-g(pro)r(duced)h(b)n(y)f(the)h(rotation)f(matrix)g(\(represen)n(ted)g(b)
-n(y)h(FITS)g(k)n(eyw)n(ord)e(PCi)p Ft(_)p Fj(j,)227 3717
-y(CDi)p Ft(_)p Fj(j,)26 b(etc\).)36 b(F)-7 b(or)24 b(instance,)h(for)e
-(a)h(2-D)h(FITS-W)n(CS)f(header)g(describing)f(pro)5
-b(jected)24 b(celestial)g(longitude)g(and)227 3816 y(latitude,)33
-b(the)f(in)n(termediate)g(w)n(orld)e(co)r(ordinates)g(represen)n(t)h
-(o\013sets)g(in)h(degrees)e(from)i(the)g(reference)e(p)r(oin)n(t)227
-3916 y(within)f(the)f(plane)f(of)g(pro)5 b(jection.)0
-4060 y Fd(T)m(yp)s(e:)227 4160 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)
-0 4304 y Fd(Class)k(Applicabilit)m(y:)259 4436 y(FitsChan)427
-4536 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 4725 V 0 4856 a Fz(KeyError)769 4857 y Fe(Rep)s(ort)38
-b(an)g(error)g(when)g(getting)f(the)i(v)-7 b(alue)38
-b(of)g(a)1156 4971 y(non-existan)m(t)f(KeyMap)h(en)m(try?)3222
-4856 y Fz(KeyError)0 5150 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(is)f(a)g(b)r(o)r(olean)g(v)-5 b(alue)30
-b(whic)n(h)f(con)n(trols)f(ho)n(w)h(the)h(astMapGet...)43
-b(functions)29 b(b)r(eha)n(v)n(e)227 5250 y(if)36 b(the)f(requested)g
-(k)n(ey)f(is)h(not)g(found)h(in)f(the)h(KeyMap.)58 b(If)35
-b(KeyError)d(is)j(zero)f(\(the)i(default\),)i(then)e(these)227
-5349 y(functions)d(will)g(return)f(zero)g(but)h(no)g(error)d(will)j(b)r
-(e)g(rep)r(orted.)51 b(If)34 b(KeyError)29 b(is)k(non-zero,)f(then)h
-(the)g(same)227 5449 y(v)-5 b(alues)27 b(are)g(returned)g(but)h(an)g
-(error)d(is)j(also)e(rep)r(orted.)0 5593 y Fd(T)m(yp)s(e:)227
-5693 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)p eop end
-%%Page: 429 439
-TeXDict begin 429 438 bop 3643 52 a FF(429)0 351 y Fd(Class)31
-b(Applicabilit)m(y:)259 520 y(KeyMap)427 620 y Fj(All)d(KeyMaps)f(ha)n
-(v)n(e)f(this)i(attribute.)p 0 851 3780 12 v 0 983 a
-Fz(L)-11 b(TO\013set)212 b Fe(The)39 b(o\013set)f(from)g(UTC)f(to)h(Lo)
-s(cal)h(Time,)e(in)h(hours)211 b Fz(L)-11 b(TO\013set)0
-1209 y Fd(Description:)44 b Fj(This)d(sp)r(eci\014es)g(the)g(o\013set)g
-(from)g(UTC)g(to)g(Lo)r(cal)f(Time,)k(in)e(hours)e(\(fractional)g
-(hours)g(can)g(b)r(e)227 1308 y(supplied\).)48 b(It)31
-b(is)g(p)r(ositiv)n(e)f(for)h(time)g(zones)f(east)h(of)g(Green)n(wic)n
-(h.)46 b(AST)31 b(uses)f(the)i(\014gure)e(as)g(giv)n(en,)h(without)227
-1408 y(making)c(an)n(y)g(attempt)h(to)g(correct)e(for)h(da)n(yligh)n(t)
-g(sa)n(ving.)35 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-1590 y Fd(T)m(yp)s(e:)227 1689 y Fj(Floating)f(p)r(oin)n(t.)0
-1871 y Fd(Class)k(Applicabilit)m(y:)259 2040 y(TimeF)-8
-b(rame)427 2139 y Fj(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2371 V 0 2509 a Fz(Lab)t(el\(axis\))1634
-2503 y Fe(Axis)38 b(lab)s(el)3125 2509 y Fz(Lab)t(el\(axis\))0
-2737 y Fd(Description:)44 b Fj(This)20 b(attribute)g(sp)r(eci\014es)g
-(a)g(lab)r(el)g(to)f(b)r(e)i(attac)n(hed)e(to)h(eac)n(h)f(axis)g(of)h
-(a)f(F)-7 b(rame)20 b(when)g(it)g(is)g(represen)n(ted)227
-2837 y(\(e.g.\))37 b(in)28 b(graphical)e(output.)227
-2977 y(If)i(a)f(Lab)r(el)h(v)-5 b(alue)27 b(has)g(not)h(b)r(een)g(set)g
-(for)f(a)g(F)-7 b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)
-f(supplied.)0 3159 y Fd(T)m(yp)s(e:)227 3259 y Fj(String.)0
-3441 y Fd(Class)k(Applicabilit)m(y:)259 3609 y(F)-8 b(rame)427
-3709 y Fj(The)31 b(default)h(supplied)f(b)n(y)g(the)g(F)-7
-b(rame)31 b(class)f(is)h(the)g(string)g Ft(")p Fj(Axis)f
-Fl(<)p Fj(n)p Fl(>)p Ft(")p Fj(,)h(where)g Fl(<)p Fj(n)p
-Fl(>)f Fj(is)h(1,)h(2,)f(etc.)427 3808 y(for)c(eac)n(h)g(successiv)n(e)
-f(axis.)259 3957 y Fd(SkyF)-8 b(rame)427 4057 y Fj(The)23
-b(SkyF)-7 b(rame)22 b(class)g(re-de\014nes)g(the)h(default)g(Lab)r(el)f
-(v)-5 b(alue)23 b(\(e.g.)35 b(to)23 b Ft(")p Fj(Righ)n(t)f(ascension)p
-Ft(")f Fj(or)h Ft(")p Fj(Galactic)427 4157 y(latitude)p
-Ft(")p Fj(\))28 b(as)f(appropriate)f(for)h(the)h(particular)e
-(celestial)h(co)r(ordinate)g(system)g(b)r(eing)h(represen)n(ted.)259
-4306 y Fd(TimeF)-8 b(rame)427 4405 y Fj(The)24 b(TimeF)-7
-b(rame)22 b(class)g(re-de\014nes)h(the)g(default)h(Lab)r(el)f(v)-5
-b(alue)23 b(as)g(appropriate)e(for)i(the)g(particular)f(time)427
-4505 y(system)28 b(b)r(eing)f(represen)n(ted.)259 4654
-y Fd(F)-8 b(rameSet)427 4754 y Fj(The)27 b(Lab)r(el)g(attribute)g(of)g
-(a)f(F)-7 b(rameSet)27 b(axis)f(is)g(the)h(same)g(as)f(that)h(of)g(its)
-g(curren)n(t)f(F)-7 b(rame)26 b(\(as)g(sp)r(eci\014ed)427
-4853 y(b)n(y)i(the)g(Curren)n(t)e(attribute\).)0 5047
-y Fd(Notes:)340 5362 y Fi(\017)45 b Fj(Axis)28 b(lab)r(els)f(are)g(in)n
-(tended)h(purely)f(for)g(in)n(terpretation)g(b)n(y)g(h)n(uman)g
-(readers)f(and)i(not)f(b)n(y)h(soft)n(w)n(are.)340 5511
-y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g
-(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r
-(er)f(of)g(the)427 5611 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h
-(applies.)p eop end
-%%Page: 430 440
-TeXDict begin 430 439 bop 0 52 a FF(430)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(Lab)t(elA)l(t\(axis\))979 483 y
-Fe(Where)39 b(to)f(place)g(n)m(umerical)f(lab)s(els)h(for)1733
-598 y(a)g(Plot)2975 490 y Fz(Lab)t(elA)l(t\(axis\))0
-770 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 869 y(astGrid)22 b(function\))i(b)n(y)e
-(determining)h(where)f(n)n(umerical)g(axis)g(lab)r(els)g(and)h(asso)r
-(ciated)e(tic)n(k)i(marks)e(are)h(placed.)227 969 y(It)35
-b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)35 b(for)f(eac)n(h)g(ph)n
-(ysical)g(axis)g(of)h(a)f(Plot)g(so)g(that,)j(for)e(instance,)h(the)f
-(setting)g Ft(")p Fj(La-)227 1069 y(b)r(elA)n(t\(2\)=10.0)p
-Ft(")28 b Fj(sp)r(eci\014es)g(where)h(the)g(n)n(umerical)f(lab)r(els)h
-(and)f(tic)n(k)h(marks)f(for)g(the)h(second)g(axis)f(should)g(b)r(e)227
-1168 y(dra)n(wn.)227 1294 y(F)-7 b(or)30 b(eac)n(h)g(axis,)h(the)g(Lab)
-r(elA)n(t)g(v)-5 b(alue)30 b(giv)n(es)g(the)h(v)-5 b(alue)31
-b(on)f(the)h(other)f(axis)g(at)h(whic)n(h)f(n)n(umerical)g(lab)r(els)h
-(and)227 1394 y(tic)n(k)j(marks)f(should)h(b)r(e)h(placed)f(\(remem)n
-(b)r(er)g(that)g(Plots)f(suitable)h(for)g(use)g(with)h(astGrid)f(ma)n
-(y)f(only)h(ha)n(v)n(e)227 1493 y(t)n(w)n(o)29 b(axes\).)43
-b(F)-7 b(or)29 b(example,)h(in)g(a)g(celestial)f(\(RA,Dec\))i(co)r
-(ordinate)e(system,)h(Lab)r(elA)n(t\(1\))g(giv)n(es)e(a)i(Dec)g(v)-5
-b(alue)227 1593 y(whic)n(h)32 b(de\014nes)g(a)f(line)h(\(of)g(constan)n
-(t)f(Dec\))h(along)f(whic)n(h)h(the)g(n)n(umerical)f(RA)h(lab)r(els)g
-(and)f(their)h(asso)r(ciated)227 1692 y(tic)n(k)f(marks)f(will)i(b)r(e)
-g(dra)n(wn.)46 b(Similarly)-7 b(,)32 b(Lab)r(elA)n(t\(2\))g(giv)n(es)e
-(the)h(RA)h(v)-5 b(alue)31 b(at)g(whic)n(h)h(the)f(Dec)h(lab)r(els)f
-(and)227 1792 y(tic)n(ks)c(will)h(b)r(e)g(dra)n(wn.)227
-1918 y(The)34 b(default)h(baha)n(viour)d(is)i(for)g(the)h(Plot)e(to)h
-(generate)f(its)h(o)n(wn)g(p)r(osition)g(for)g(n)n(umerical)f(lab)r
-(els)h(and)g(tic)n(k)227 2017 y(marks.)0 2169 y Fd(T)m(yp)s(e:)227
-2268 y Fj(Floating)27 b(p)r(oin)n(t.)0 2420 y Fd(Class)k(Applicabilit)m
-(y:)259 2559 y(Plot)427 2658 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2822 y Fd(Notes:)340 3107 y Fi(\017)45
-b Fj(The)34 b(Lab)r(elA)n(t)h(v)-5 b(alue)33 b(should)h(use)g(the)h
-(same)e(units)i(as)e(are)g(used)h(in)n(ternally)f(for)h(storing)f(co)r
-(ordinate)427 3206 y(v)-5 b(alues)26 b(on)g(the)h(appropriate)d(axis.)
-36 b(F)-7 b(or)26 b(example,)g(with)h(a)f(celestial)f(co)r(ordinate)g
-(system,)i(the)f(Lab)r(elA)n(t)427 3306 y(v)-5 b(alue)28
-b(should)f(b)r(e)h(in)g(radians,)e(not)i(hours)f(or)f(degrees.)340
-3440 y Fi(\017)45 b Fj(Normally)-7 b(,)23 b(the)g(Lab)r(elA)n(t)g(v)-5
-b(alue)23 b(also)f(determines)g(where)h(the)g(lines)g(represen)n(ting)e
-(co)r(ordinate)h(axes)f(will)427 3540 y(b)r(e)k(dra)n(wn,)f(so)f(that)h
-(the)h(tic)n(k)f(marks)f(will)h(lie)g(on)g(these)g(lines)g(\(but)h
-(also)e(see)h(the)g(Dra)n(wAxes)f(attribute\).)340 3674
-y Fi(\017)45 b Fj(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 3773 y(plotting)c(area)e(\(see)h(the)h(Lab)r(elling)f
-(attribute\).)37 b(In)26 b(this)h(case,)f(the)g(v)-5
-b(alue)27 b(of)f(the)h(Lab)r(elA)n(t)f(attribute)h(is)427
-3873 y(ignored.)p 0 4074 V 0 4213 a Fz(Lab)t(elUnits\(axis\))1163
-4206 y Fe(Use)39 b(axis)f(unit)g(descriptions)g(in)1705
-4320 y(a)h(Plot?)2804 4213 y Fz(Lab)t(elUnits\(axis\))0
-4493 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4592 y(astGrid)20 b(function\))h(b)n(y)f
-(determining)h(whether)f(the)h(descriptiv)n(e)e(lab)r(els)h(dra)n(wn)g
-(for)g(eac)n(h)f(axis)h(of)g(a)g(Plot)g(should)227 4692
-y(include)k(a)g(description)f(of)h(the)g(units)g(b)r(eing)g(used)g(on)g
-(the)g(axis.)35 b(It)24 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)24 b(for)f(eac)n(h)g(ph)n(ysical)227 4792 y(axis)i(of)h(a)g
-(Plot)f(so)h(that,)g(for)g(instance,)g(the)g(setting)g
-Ft(")p Fj(Lab)r(elUnits\(2\)=1)p Ft(")f Fj(sp)r(eci\014es)h(that)g(a)g
-(unit)g(description)227 4891 y(should)i(b)r(e)g(included)g(in)g(the)g
-(lab)r(el)f(for)g(the)h(second)f(axis.)227 5017 y(If)e(the)f(Lab)r
-(elUnits)g(v)-5 b(alue)24 b(of)g(a)g(Plot)f(axis)g(is)h(non-zero,)f(a)h
-(unit)g(description)g(will)g(b)r(e)g(included)h(in)f(the)g(descrip-)227
-5116 y(tiv)n(e)33 b(lab)r(el)g(for)g(that)g(axis,)h(otherwise)e(it)h
-(will)h(b)r(e)f(omitted.)54 b(The)33 b(default)g(b)r(eha)n(viour)f(is)h
-(to)g(include)g(a)g(unit)227 5216 y(description)g(unless)f(the)i
-(curren)n(t)e(F)-7 b(rame)32 b(of)h(the)h(Plot)e(is)h(a)g(SkyF)-7
-b(rame)32 b(represen)n(ting)f(equatorial,)i(ecliptic,)227
-5316 y(galactic)27 b(or)f(sup)r(ergalactic)h(co)r(ordinates,)f(in)i
-(whic)n(h)f(case)g(it)h(is)f(omitted.)0 5467 y Fd(T)m(yp)s(e:)227
-5567 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 5718 y Fd(Class)k
-(Applicabilit)m(y:)p eop end
-%%Page: 431 441
-TeXDict begin 431 440 bop 3643 52 a FF(431)259 351 y
-Fd(Plot)427 451 y Fj(All)28 b(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-603 y Fd(Notes:)340 875 y Fi(\017)45 b Fj(The)28 b(text)g(used)f(for)h
-(the)g(unit)g(description)f(is)g(obtained)h(from)f(the)h(Plot's)f
-(Unit\(axis\))h(attribute.)340 998 y Fi(\017)45 b Fj(If)24
-b(no)f(axis)g(is)g(sp)r(eci\014ed,)i(\(e.g.)35 b Ft(")p
-Fj(Lab)r(elUnits)p Ft(")23 b Fj(instead)h(of)f Ft(")p
-Fj(Lab)r(elUnits\(2\))p Ft(")p Fj(\),)h(then)g(a)f Ft(")p
-Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427 1098
-y Fj(op)r(eration)h(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 1197 y(will)k(use)g(just)g(the)g(Lab)r
-(elUnits\(1\))g(v)-5 b(alue.)340 1320 y Fi(\017)45 b
-Fj(If)30 b(the)g(curren)n(t)f(F)-7 b(rame)28 b(of)i(the)g(Plot)e(is)i
-(not)f(a)g(SkyF)-7 b(rame,)29 b(but)h(includes)g(axes)e(whic)n(h)i(w)n
-(ere)e(extracted)427 1420 y(from)i(a)g(SkyF)-7 b(rame,)30
-b(then)h(the)f(default)h(b)r(eha)n(viour)e(is)h(to)g(include)g(a)g
-(unit)h(description)f(only)f(for)h(those)427 1520 y(axes)d(whic)n(h)g
-(w)n(ere)g(not)h(extracted)f(from)g(a)g(SkyF)-7 b(rame.)p
-0 1699 3780 12 v 0 1837 a Fz(Lab)t(elUp\(axis\))1192
-1831 y Fe(Dra)m(w)38 b(n)m(umerical)e(Plot)i(lab)s(els)1675
-1930 y(uprigh)m(t?)2947 1837 y Fz(Lab)t(elUp\(axis\))0
-2104 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2203 y(astGrid)i(function\))g(b)n(y)g(determining)
-g(whether)g(the)g(n)n(umerical)f(lab)r(els)h(for)f(eac)n(h)h(axis)f(of)
-h(a)f(Plot)g(should)h(b)r(e)227 2303 y(dra)n(wn)22 b(uprigh)n(t)h(or)f
-(not.)35 b(It)23 b(tak)n(es)f(a)h(separate)e(v)-5 b(alue)23
-b(for)f(eac)n(h)g(ph)n(ysical)g(axis)g(of)h(a)g(Plot)f(so)g(that,)i
-(for)f(instance,)227 2403 y(the)34 b(setting)g Ft(")p
-Fj(Lab)r(elUp\(2\)=1)p Ft(")e Fj(sp)r(eci\014es)h(that)h(n)n(umerical)f
-(lab)r(els)g(for)g(the)h(second)f(axis)f(should)i(b)r(e)g(dra)n(wn)227
-2502 y(uprigh)n(t.)227 2622 y(If)24 b(the)f(Lab)r(elUp)h(v)-5
-b(alue)23 b(of)g(a)g(Plot)f(axis)h(is)g(non-zero,)f(it)i(causes)e(n)n
-(umerical)g(lab)r(els)h(for)g(that)g(axis)g(to)g(b)r(e)g(plotted)227
-2721 y(uprigh)n(t)30 b(\(i.e.)45 b(as)30 b(normal,)g(horizon)n(tal)e
-(text\),)k(otherwise)d(lab)r(els)h(are)f(dra)n(wn)g(parallel)g(to)i
-(the)f(axis)g(to)g(whic)n(h)227 2821 y(they)e(apply)-7
-b(.)227 2941 y(The)30 b(default)h(is)f(to)g(pro)r(duce)g(uprigh)n(t)g
-(lab)r(els)g(if)g(the)h(lab)r(els)f(are)f(placed)h(around)f(the)h(edge)
-g(of)g(the)h(plot,)g(and)227 3040 y(to)g(pro)r(duce)g(lab)r(els)g(that)
-h(follo)n(w)e(the)i(axes)e(if)i(the)f(lab)r(els)g(are)f(placed)h
-(within)h(the)g(in)n(terior)e(of)h(the)g(plot)h(\(see)227
-3140 y(attribute)c(Lab)r(elling\).)0 3279 y Fd(T)m(yp)s(e:)227
-3379 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 3518 y Fd(Class)k
-(Applicabilit)m(y:)259 3645 y(Plot)427 3745 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3896 y Fd(Notes:)340 4169 y
-Fi(\017)45 b Fj(In)32 b(some)f(circumstances,)g(n)n(umerical)g(lab)r
-(els)g(and)g(tic)n(k)h(marks)e(are)g(dra)n(wn)h(around)f(the)i(edges)f
-(of)g(the)427 4269 y(plotting)g(area)e(\(see)i(the)g(Lab)r(elling)f
-(attribute\).)47 b(In)31 b(this)g(case,)f(the)h(v)-5
-b(alue)31 b(of)f(the)h(Lab)r(elUp)g(attribute)427 4368
-y(is)d(ignored.)340 4491 y Fi(\017)45 b Fj(If)36 b(no)e(axis)h(is)g(sp)
-r(eci\014ed,)i(\(e.g.)59 b Ft(")p Fj(Lab)r(elUp)p Ft(")34
-b Fj(instead)h(of)g Ft(")p Fj(Lab)r(elUp\(2\))p Ft(")p
-Fj(\),)i(then)e(a)g Ft(")p Fj(set)p Ft(")f Fj(or)g Ft(")p
-Fj(clear)p Ft(")427 4591 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h
-(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h
-(a)f Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p
-Ft(")h Fj(op)r(eration)427 4690 y(will)k(use)g(just)g(the)g(Lab)r
-(elUp\(1\))g(v)-5 b(alue.)p 0 4870 V 0 5001 a Fz(Lab)t(elling)255
-b Fe(Lab)s(el)38 b(and)h(tic)m(k)f(placemen)m(t)f(option)g(for)h(a)g
-(Plot)252 b Fz(Lab)t(elling)0 5175 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-5275 y(astGrid)k(function\))g(b)n(y)g(determining)f(the)i(strategy)d
-(for)h(placing)g(n)n(umerical)g(lab)r(els)h(and)f(tic)n(k)h(marks)f
-(for)g(a)227 5374 y(Plot.)227 5494 y(If)21 b(the)g(Lab)r(elling)f(v)-5
-b(alue)20 b(of)g(a)g(Plot)g(is)g Ft(")p Fj(exterior)p
-Ft(")e Fj(\(the)j(default\),)i(then)e(n)n(umerical)e(lab)r(els)h(and)h
-(their)f(asso)r(ciated)227 5593 y(tic)n(k)30 b(marks)e(are)h(placed)g
-(around)f(the)i(edges)f(of)h(the)f(plotting)h(area,)f(if)h(p)r
-(ossible.)42 b(If)30 b(this)g(is)f(not)h(p)r(ossible,)f(or)227
-5693 y(if)f(the)g(Lab)r(elling)g(v)-5 b(alue)27 b(is)h
-Ft(")p Fj(in)n(terior)p Ft(")p Fj(,)d(then)j(they)g(are)f(placed)g
-(along)f(grid)h(lines)h(inside)f(the)h(plotting)g(area.)p
-eop end
-%%Page: 432 442
-TeXDict begin 432 441 bop 0 52 a FF(432)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(String.)0 606 y Fd(Class)g(Applicabilit)m
-(y:)259 747 y(Plot)427 847 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1014 y Fd(Notes:)340 1302 y Fi(\017)45
-b Fj(The)25 b(Lab)r(elA)n(t\(axis\))f(attribute)g(ma)n(y)f(b)r(e)i
-(used)f(to)g(determine)g(the)h(exact)f(placemen)n(t)g(of)g(lab)r(els)g
-(and)g(tic)n(k)427 1401 y(marks)j(that)h(are)e(dra)n(wn)h(inside)h(the)
-f(plotting)h(area.)p 0 1606 3780 12 v 0 1738 a Fz(LatAxis)781
-b Fe(Index)40 b(of)e(the)g(latitude)f(axis)780 b Fz(LatAxis)0
-1913 y Fd(Description:)44 b Fj(This)26 b(read-only)d(attribute)j(giv)n
-(es)e(the)i(index)g(\(1)f(or)f(2\))i(of)f(the)h(latitude)g(axis)e
-(within)j(the)e(SkyF)-7 b(rame)227 2013 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 2167 y Fd(T)m(yp)s(e:)227 2267 y Fj(In)n(teger.)0
-2422 y Fd(Class)k(Applicabilit)m(y:)259 2563 y(SkyF)-8
-b(rame)427 2663 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2868 V 0 2999 a Fz(ListSize)612 b Fe(Num)m(b)s(er)38
-b(of)g(p)s(oin)m(ts)g(in)h(a)f(P)m(oin)m(tList)609 b
-Fz(ListSize)0 3193 y Fd(Description:)44 b Fj(This)34
-b(is)g(a)g(read-only)e(attribute)j(giving)e(the)h(n)n(um)n(b)r(er)g(of)
-g(p)r(oin)n(ts)g(in)h(a)e(P)n(oin)n(tList.)56 b(This)34
-b(v)-5 b(alue)34 b(is)227 3293 y(determined)28 b(when)g(the)g(P)n(oin)n
-(tList)e(is)i(created.)0 3448 y Fd(T)m(yp)s(e:)227 3547
-y Fj(In)n(teger,)f(read-only)-7 b(.)0 3702 y Fd(Class)31
-b(Applicabilit)m(y:)259 3844 y(P)m(oin)m(tList)427 3943
-y Fj(All)d(P)n(oin)n(tLists)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 4148 V 0 4286 a Fz(LogGap\(axis\))1003 4280 y Fe(In)m(terv)-7
-b(al)37 b(b)s(et)m(w)m(een)h(ma)7 b(jor)37 b(axis)h(v)-7
-b(alues)1666 4394 y(of)39 b(a)f(Plot)2987 4286 y Fz(LogGap\(axis\))0
-4570 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 4669 y(astGrid)k(function\))i(b)n(y)e(determining)
-g(the)h(logarithmic)f(in)n(terv)-5 b(al)34 b(b)r(et)n(w)n(een)g(the)h
-Ft(")p Fj(ma)5 b(jor)p Ft(")33 b Fj(axis)g(v)-5 b(alues)35
-b(of)f(a)227 4769 y(Plot,)42 b(at)e(whic)n(h)f(\(for)g(example\))h(ma)5
-b(jor)38 b(tic)n(k)i(marks)e(are)h(dra)n(wn.)71 b(It)40
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)39 b(for)g(eac)n(h)227
-4868 y(ph)n(ysical)31 b(axis)f(of)i(the)f(Plot)g(so)g(that,)i(for)d
-(instance,)i(the)g(setting)g Ft(")p Fj(LogGap\(2\)=100.0)p
-Ft(")27 b Fj(sp)r(eci\014es)k(the)h(ratio)227 4968 y(b)r(et)n(w)n(een)
-25 b(adjacen)n(t)e(ma)5 b(jor)23 b(v)-5 b(alues)24 b(along)f(the)i
-(second)f(axis.)35 b(The)24 b(LogGap)f(attribute)h(is)h(only)f(used)g
-(when)g(the)227 5068 y(LogTic)n(ks)31 b(attribute)h(indicates)h(that)f
-(the)h(spacing)f(b)r(et)n(w)n(een)g(ma)5 b(jor)31 b(axis)h(v)-5
-b(alues)32 b(is)g(to)g(b)r(e)h(logarithmic.)50 b(If)227
-5167 y(ma)5 b(jor)27 b(axis)f(v)-5 b(alues)28 b(are)e(linearly)h
-(spaced)g(then)h(the)g(gap)f(is)g(sp)r(eci\014ed)h(using)f(attribute)h
-(Gap.)227 5295 y(The)37 b(LogGap)e(v)-5 b(alue)36 b(supplied)h(will)g
-(b)r(e)f(rounded)g(to)g(the)h(nearest)f(p)r(o)n(w)n(er)f(of)h(10.)63
-b(The)36 b(recipro)r(cal)f(of)h(the)227 5394 y(supplied)c(v)-5
-b(alue)31 b(ma)n(y)g(b)r(e)g(used)h(if)f(this)h(is)f(necessary)f(to)h
-(pro)r(duce)g(usable)g(ma)5 b(jor)30 b(axis)g(v)-5 b(alues.)48
-b(If)31 b(a)g(zero)f(or)227 5494 y(negativ)n(e)23 b(v)-5
-b(alue)24 b(is)g(supplied,)h(an)f(error)e(will)j(b)r(e)f(rep)r(orted)f
-(when)i(the)f(grid)f(is)h(dra)n(wn.)35 b(The)24 b(default)h(b)r(eha)n
-(viour)227 5593 y(is)j(for)f(the)h(Plot)f(to)h(generate)e(its)i(o)n(wn)
-f(LogGap)f(v)-5 b(alue)28 b(when)g(required,)f(based)g(on)g(the)h
-(range)e(of)i(axis)f(v)-5 b(alues)227 5693 y(to)28 b(b)r(e)g(represen)n
-(ted.)p eop end
-%%Page: 433 443
-TeXDict begin 433 442 bop 3643 52 a FF(433)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(Floating)27 b(p)r(oin)n(t.)0 602 y Fd(Class)k(Applicabilit)m
-(y:)259 741 y(Plot)427 841 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 1005 y Fd(Notes:)340 1289 y Fi(\017)45
-b Fj(The)28 b(LogGap)e(v)-5 b(alue)28 b(is)f(a)g(ratio)g(b)r(et)n(w)n
-(een)h(axis)e(v)-5 b(alues)28 b(and)f(is)h(therefore)e(dimensionless.)
-340 1423 y Fi(\017)45 b Fj(If)38 b(no)g(axis)f(is)h(sp)r(eci\014ed,)i
-(\(e.g.)67 b Ft(")p Fj(LogGap)p Ft(")36 b Fj(instead)i(of)f
-Ft(")p Fj(LogGap\(2\))p Ft(")p Fj(\),)i(then)f(a)g Ft(")p
-Fj(set)p Ft(")f Fj(or)f Ft(")p Fj(clear)p Ft(")427 1523
-y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 1622 y(will)k(use)g(just)g(the)g(LogGap\(1\))e(v)-5
-b(alue.)p 0 1824 3780 12 v 0 1962 a Fz(LogLab)t(el\(axis\))1203
-1956 y Fe(Use)39 b(exp)s(onen)m(tial)e(format)f(for)1330
-2070 y(n)m(umerical)g(axis)i(lab)s(els?)2909 1962 y Fz(LogLab)t
-(el\(axis\))0 2242 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 2342
-y(astGrid)g(function\))i(b)n(y)f(determining)f(whether)h(the)g(n)n
-(umerical)f(axis)g(lab)r(els)g(should)h(b)r(e)g(in)g(normal)f(decimal)
-227 2442 y(form)20 b(or)g(should)g(b)r(e)h(represen)n(ted)f(as)f(10)h
-(raised)f(to)i(the)g(appropriate)d(p)r(o)n(w)n(er.)34
-b(That)20 b(is,)i(an)e(axis)g(v)-5 b(alue)20 b(of)h(1000.0)227
-2541 y(will)28 b(b)r(e)g(dra)n(wn)f(as)g Ft(")p Fj(1000.0)p
-Ft(")e Fj(if)j(LogLab)r(el)f(is)h(zero,)e(but)j(as)e
-Ft(")p Fj(10)p Fi(^)p Fj(3)p Ft(")f Fj(if)i(LogLab)r(el)f(is)g
-(non-zero.)36 b(If)28 b(graphical)227 2641 y(escap)r(e)j(sequences)g
-(are)g(supp)r(orted)h(\(see)f(attribute)h(Escap)r(e\),)h(the)f(p)r(o)n
-(w)n(er)e(in)i(suc)n(h)g(exp)r(onen)n(tial)f(lab)r(els)g(will)227
-2741 y(b)r(e)d(dra)n(wn)f(as)g(a)g(small)g(sup)r(erscript)g(instead)h
-(of)f(using)g(a)h Ft(")p Fi(^)p Ft(")f Fj(c)n(haracter)e(to)j(represen)
-n(t)e(exp)r(onen)n(tiation.)227 2866 y(The)e(default)g(is)f(to)g(pro)r
-(duce)g(exp)r(onen)n(tial)g(lab)r(els)g(if)h(the)g(ma)5
-b(jor)22 b(tic)n(k)i(marks)e(are)g(logarithmically)g(spaced)h(\(see)227
-2966 y(the)28 b(LogTic)n(ks)e(attribute\).)0 3117 y Fd(T)m(yp)s(e:)227
-3217 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0 3369 y Fd(Class)k
-(Applicabilit)m(y:)259 3507 y(Plot)427 3607 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3771 y Fd(Notes:)340 4055 y
-Fi(\017)45 b Fj(If)33 b(no)e(axis)g(is)h(sp)r(eci\014ed,)h(\(e.g.)49
-b Ft(")p Fj(LogLab)r(el)p Ft(")30 b Fj(instead)i(of)g
-Ft(")p Fj(LogLab)r(el\(2\))p Ft(")p Fj(\),)f(then)h(a)g
-Ft(")p Fj(set)p Ft(")f Fj(or)f Ft(")p Fj(clear)p Ft(")427
-4155 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 4255 y(will)k(use)g(just)g(the)g(LogLab)r(el\(1\))e
-(v)-5 b(alue.)p 0 4456 V 0 4594 a Fz(LogPlot\(axis\))1020
-4588 y Fe(Map)39 b(the)f(plot)g(logarithmically)33 b(on)m(to)1605
-4702 y(the)39 b(screen?)2984 4594 y Fz(LogPlot\(axis\))0
-4870 y Fd(Description:)44 b Fj(This)19 b(attribute)g(con)n(trols)e(the)
-h(app)r(earance)f(of)i(all)f(graphics)f(pro)r(duced)i(b)n(y)f(the)h
-(Plot,)g(b)n(y)g(determining)227 4970 y(whether)j(the)g(axes)f(of)g
-(the)h(plotting)g(surface)f(are)g(mapp)r(ed)h(logarithmically)e(or)g
-(linearly)h(on)n(to)g(the)h(base)f(F)-7 b(rame)227 5069
-y(of)32 b(the)f(F)-7 b(rameSet)31 b(supplied)h(when)f(the)h(Plot)f(w)n
-(as)f(constructed.)47 b(It)32 b(tak)n(es)e(a)h(separate)f(v)-5
-b(alue)31 b(for)g(eac)n(h)f(axis)227 5169 y(of)39 b(the)f(graphics)f
-(co)r(ordinate)g(system)h(\(i.e.)70 b(the)38 b(base)g(F)-7
-b(rame)38 b(in)g(the)h(Plot\))f(so)f(that,)42 b(for)37
-b(instance,)k(the)227 5269 y(setting)32 b Ft(")p Fj(LogPlot\(2\)=1)p
-Ft(")c Fj(sp)r(eci\014es)j(that)h(the)f(second)g(axis)g(of)g(the)h
-(graphics)e(co)r(ordinate)g(system)h(\(usually)227 5368
-y(the)d(v)n(ertical)e(axis\))h(should)g(b)r(e)h(mapp)r(ed)g
-(logarithmically)d(on)n(to)i(the)h(second)f(axis)f(of)i(the)f(base)g(F)
--7 b(rame)27 b(of)g(the)227 5468 y(F)-7 b(rameSet)28
-b(supplied)g(when)f(the)h(Plot)f(w)n(as)g(constructed.)227
-5593 y(If)32 b(the)g(LogPlot)d(v)-5 b(alue)31 b(of)h(a)f(Plot)f(axis)h
-(is)g(non-zero,)g(it)g(causes)g(that)g(axis)g(to)g(b)r(e)h(mapp)r(ed)f
-(logarithmically)-7 b(,)227 5693 y(otherwise)27 b(\(the)h(default\))h
-(the)f(axis)e(is)i(mapp)r(ed)g(linearly)-7 b(.)p eop
-end
-%%Page: 434 444
-TeXDict begin 434 443 bop 0 52 a FF(434)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(In)n(teger)c(\(b)r(o)r(olean\).)0
-595 y Fd(Class)k(Applicabilit)m(y:)259 726 y(Plot)427
-825 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-981 y Fd(Notes:)340 1258 y Fi(\017)45 b Fj(The)c(setting)f(of)g(the)h
-(LogPlot)d(attribute)i(pro)n(vides)f(the)i(default)f(v)-5
-b(alue)41 b(for)e(the)i(related)e(LogTic)n(ks)427 1358
-y(attribute.)48 b(By)30 b(selecting)h(suitable)g(v)-5
-b(alues)30 b(for)h(LogPlot)e(and)i(LogTic)n(ks,)f(it)i(is)e(p)r
-(ossible)h(to)g(ha)n(v)n(e)f(tic)n(k)427 1458 y(marks)22
-b(whic)n(h)g(are)f(ev)n(enly)h(spaced)g(in)h(v)-5 b(alue)22
-b(but)h(whic)n(h)f(are)g(mapp)r(ed)g(logarithmically)f(on)n(to)h(the)g
-(screen)427 1557 y(\(and)28 b(vice-v)n(ersa\).)340 1684
-y Fi(\017)45 b Fj(An)22 b(axis)e(ma)n(y)g(only)h(b)r(e)g(mapp)r(ed)h
-(logarithmically)d(if)j(the)f(visible)g(part)f(of)h(the)h(axis)e(do)r
-(es)h(not)g(include)g(the)427 1784 y(v)-5 b(alue)29 b(zero.)38
-b(The)29 b(visible)f(part)g(of)g(the)h(axis)f(is)g(that)h(part)f(whic)n
-(h)h(is)f(mapp)r(ed)h(on)n(to)f(the)g(plotting)h(area,)427
-1884 y(and)i(is)g(measured)f(within)i(the)f(base)f(F)-7
-b(rame)31 b(of)g(the)g(F)-7 b(rameSet)31 b(whic)n(h)f(w)n(as)g
-(supplied)i(when)f(the)g(Plot)427 1983 y(w)n(as)g(constructed.)49
-b(An)n(y)32 b(attempt)h(to)f(set)f(LogPlot)g(to)g(a)h(non-zero)e(v)-5
-b(alue)32 b(will)g(b)r(e)g(ignored)f(\(without)427 2083
-y(error\))26 b(if)i(the)g(visible)g(part)f(of)g(the)h(axis)f(includes)h
-(the)g(v)-5 b(alue)27 b(zero)340 2210 y Fi(\017)45 b
-Fj(If)38 b(no)g(axis)f(is)g(sp)r(eci\014ed,)k(\(e.g.)67
-b Ft(")p Fj(LogPlot)p Ft(")35 b Fj(instead)j(of)f Ft(")p
-Fj(LogPlot\(2\))p Ft(")p Fj(\),)h(then)h(a)e Ft(")p Fj(set)p
-Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427 2310 y Fj(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h Fj(op)r(eration)427
-2409 y(will)k(use)g(just)g(the)g(LogPlot\(1\))e(v)-5
-b(alue.)p 0 2597 3780 12 v 0 2736 a Fz(LogTic)l(ks\(axis\))1184
-2729 y Fe(Space)38 b(the)h(ma)7 b(jor)37 b(tic)m(k)g(marks)1480
-2844 y(logarithmically?)2922 2736 y Fz(LogTic)l(ks\(axis\))0
-3026 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 3126 y(astGrid)f(function\))h(b)n(y)f(determining)
-f(whether)h(the)h(ma)5 b(jor)28 b(tic)n(k)h(marks)f(should)g(b)r(e)i
-(spaced)e(logarithmically)227 3225 y(or)k(linearly)f(in)i(axis)f(v)-5
-b(alue.)51 b(It)32 b(tak)n(es)g(a)g(separate)f(v)-5 b(alue)32
-b(for)g(eac)n(h)f(ph)n(ysical)h(axis)g(of)g(the)h(Plot)e(so)h(that,)i
-(for)227 3325 y(instance,)22 b(the)g(setting)f Ft(")p
-Fj(LogTic)n(ks\(2\)=1)p Ft(")c Fj(sp)r(eci\014es)k(that)g(the)g(ma)5
-b(jor)20 b(tic)n(k)h(marks)e(on)i(the)g(second)g(axis)f(should)227
-3424 y(b)r(e)28 b(spaced)f(logarithmically)-7 b(.)227
-3546 y(If)35 b(the)g(LogTic)n(ks)e(v)-5 b(alue)34 b(for)g(a)h(ph)n
-(ysical)e(axis)h(is)h(non-zero,)f(the)h(ma)5 b(jor)34
-b(tic)n(k)g(marks)f(on)i(that)g(axis)e(will)i(b)r(e)227
-3646 y(spaced)29 b(logarithmically)e(\(that)j(is,)g(there)f(will)g(b)r
-(e)h(a)f(constan)n(t)g(ratio)f(b)r(et)n(w)n(een)h(the)h(axis)e(v)-5
-b(alues)29 b(at)g(adjacen)n(t)227 3745 y(ma)5 b(jor)33
-b(tic)n(k)g(marks\).)55 b(An)34 b(error)e(will)i(b)r(e)g(rep)r(orted)f
-(if)h(the)g(dynamic)f(range)g(of)g(the)i(axis)d(\(the)j(ratio)e(of)g
-(the)227 3845 y(largest)27 b(to)h(smallest)g(displa)n(y)n(ed)f(axis)g
-(v)-5 b(alue\))28 b(is)h(less)e(than)h(10.0.)38 b(If)28
-b(the)h(LogTic)n(ks)d(v)-5 b(alue)28 b(is)g(zero,)f(the)i(ma)5
-b(jor)227 3945 y(tic)n(k)23 b(marks)f(will)h(b)r(e)g(ev)n(enly)g
-(spaced)f(\(that)h(is,)h(there)f(will)g(b)r(e)g(a)g(constan)n(t)f
-(di\013erence)h(b)r(et)n(w)n(een)g(the)g(axis)f(v)-5
-b(alues)227 4044 y(at)29 b(adjacen)n(t)e(ma)5 b(jor)28
-b(tic)n(k)g(marks\).)38 b(The)29 b(default)g(is)f(to)g(pro)r(duce)g
-(logarithmically)f(spaced)h(tic)n(k)g(marks)f(if)i(the)227
-4144 y(corresp)r(onding)22 b(LogPlot)h(attribute)h(is)g(non-zero)e(and)
-i(the)g(ratio)f(of)h(maxim)n(um)g(axis)f(v)-5 b(alue)24
-b(to)g(minim)n(um)g(axis)227 4244 y(v)-5 b(alue)34 b(is)f(100)g(or)g
-(more.)54 b(If)34 b(either)g(of)g(these)f(conditions)h(is)f(not)h(met,)
-i(the)e(default)g(is)g(to)f(pro)r(duce)g(linearly)227
-4343 y(spaced)27 b(tic)n(k)h(marks.)0 4487 y Fd(T)m(yp)s(e:)227
-4587 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 4731 y Fd(Class)k
-(Applicabilit)m(y:)259 4861 y(Plot)427 4961 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 5117 y Fd(Notes:)340 5394 y
-Fi(\017)45 b Fj(The)d(setting)g(of)f(the)h(LogTic)n(ks)e(attribute)i
-(do)r(es)f(not)h(a\013ect)g(the)g(mapping)f(of)h(the)g(plot)f(on)n(to)g
-(the)427 5494 y(screen,)d(whic)n(h)d(is)h(con)n(trolled)f(b)n(y)h
-(attribute)g(LogPlot.)60 b(By)36 b(selecting)f(suitable)h(v)-5
-b(alues)36 b(for)f(LogPlot)427 5593 y(and)c(LogTic)n(ks,)f(it)i(is)f(p)
-r(ossible)g(to)g(ha)n(v)n(e)f(tic)n(k)h(marks)e(whic)n(h)j(are)e(ev)n
-(enly)g(spaced)h(in)g(v)-5 b(alue)31 b(but)h(whic)n(h)427
-5693 y(are)27 b(mapp)r(ed)h(logarithmically)e(on)n(to)g(the)i(screen)f
-(\(and)h(vica-v)n(ersa\).)p eop end
-%%Page: 435 445
-TeXDict begin 435 444 bop 3643 52 a FF(435)340 351 y
-Fi(\017)45 b Fj(An)38 b(error)e(will)i(b)r(e)g(rep)r(orted)f(when)h
-(dra)n(wing)f(an)g(annotated)g(axis)g(grid)g(if)i(the)f(visible)f(part)
-h(of)f(the)427 451 y(ph)n(ysical)27 b(axis)g(includes)h(the)f(v)-5
-b(alue)28 b(zero.)340 581 y Fi(\017)45 b Fj(If)33 b(no)g(axis)f(is)g
-(sp)r(eci\014ed,)j(\(e.g.)52 b Ft(")p Fj(LogTic)n(ks)p
-Ft(")30 b Fj(instead)j(of)f Ft(")p Fj(LogTic)n(ks\(2\))p
-Ft(")p Fj(\),)g(then)h(a)g Ft(")p Fj(set)p Ft(")f Fj(or)f
-Ft(")p Fj(clear)p Ft(")427 681 y Fj(op)r(eration)23 b(will)i(a\013ect)f
-(the)h(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h
-(while)h(a)f Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p
-Ft(")h Fj(op)r(eration)427 780 y(will)k(use)g(just)g(the)g(LogTic)n
-(ks\(1\))e(v)-5 b(alue.)p 0 974 3780 12 v 0 1106 a Fz(LonAxis)717
-b Fe(Index)39 b(of)g(the)f(longitude)f(axis)717 b Fz(LonAxis)0
-1294 y Fd(Description:)44 b Fj(This)22 b(read-only)e(attribute)i(giv)n
-(es)f(the)h(index)g(\(1)f(or)g(2\))h(of)f(the)h(longitude)g(axis)f
-(within)h(the)g(SkyF)-7 b(rame)227 1393 y(\(taking)28
-b(in)n(to)f(accoun)n(t)g(an)n(y)f(curren)n(t)h(axis)g(p)r(erm)n
-(utations\).)0 1540 y Fd(T)m(yp)s(e:)227 1640 y Fj(In)n(teger.)0
-1787 y Fd(Class)k(Applicabilit)m(y:)259 1920 y(SkyF)-8
-b(rame)427 2020 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2214 V 0 2345 a Fz(LutIn)l(terp)398 b
-Fe(Lo)s(ok-up)39 b(table)e(in)m(terp)s(olation)e(metho)s(d)397
-b Fz(LutIn)l(terp)0 2529 y Fd(Description:)44 b Fj(This)22
-b(attribute)g(indicates)f(the)h(metho)r(d)g(to)g(b)r(e)g(used)f(when)h
-(\014nding)g(the)g(output)g(v)-5 b(alue)22 b(of)f(a)g(LutMap)227
-2629 y(for)33 b(an)f(input)i(v)-5 b(alue)33 b(part)g(w)n(a)n(y)e(b)r
-(et)n(w)n(een)i(t)n(w)n(o)g(table)g(en)n(tries.)52 b(If)34
-b(it)f(is)g(set)g(to)g(0)f(\(the)i(default\))g(then)f(linear)227
-2728 y(in)n(terp)r(olation)27 b(is)h(used.)36 b(Otherwise,)27
-b(nearest)g(neigh)n(b)r(our)f(in)n(terp)r(olation)h(is)h(used.)227
-2851 y(Using)f(nearest)f(neigh)n(b)r(our)g(in)n(terp)r(olation)h
-(causes)f(AST)p Ft(__)p Fj(BAD)h(to)g(b)r(e)g(returned)g(for)f(an)n(y)h
-(p)r(oin)n(t)g(whic)n(h)g(falls)227 2951 y(outside)20
-b(the)g(b)r(ounds)g(of)f(the)i(table.)34 b(Linear)19
-b(in)n(terp)r(olation)f(results)i(in)g(an)f(extrap)r(olated)g(v)-5
-b(alue)19 b(b)r(eing)h(returned)227 3051 y(based)27 b(on)h(the)g(t)n(w)
-n(o)e(end)i(en)n(tries)f(in)h(the)g(table.)0 3197 y Fd(T)m(yp)s(e:)227
-3297 y Fj(In)n(teger.)0 3444 y Fd(Class)j(Applicabilit)m(y:)259
-3577 y(LutMap)427 3677 y Fj(All)d(LutMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)p 0 3871 V 0 4009 a Fz(Ma)7 b(jTic)l(kLen\(axis\))1359
-4003 y Fe(Length)38 b(of)h(ma)7 b(jor)36 b(tic)m(k)1469
-4117 y(marks)i(for)g(a)g(Plot)2732 4009 y Fz(Ma)7 b(jTic)l
-(kLen\(axis\))0 4282 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h(annotated)f
-(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227 4382
-y(astGrid)40 b(function\))h(b)n(y)f(determining)g(the)h(length)f(of)h
-(the)f(ma)5 b(jor)39 b(tic)n(k)h(marks)g(dra)n(wn)f(on)h(the)g(axes)g
-(of)g(a)227 4481 y(Plot.)i(It)30 b(tak)n(es)f(a)g(separate)f(v)-5
-b(alue)29 b(for)g(eac)n(h)g(ph)n(ysical)f(axis)h(of)g(the)h(Plot)f(so)g
-(that,)h(for)f(instance,)h(the)g(setting)227 4581 y Ft(")p
-Fj(Ma)5 b(jTic)n(kLen\(2\)=0)p Ft(")25 b Fj(sp)r(eci\014es)j(the)g
-(length)f(of)h(the)g(ma)5 b(jor)26 b(tic)n(k)i(marks)e(dra)n(wn)h(on)g
-(the)h(second)f(axis.)227 4704 y(The)35 b(Ma)5 b(jTic)n(kLen)33
-b(v)-5 b(alue)34 b(should)g(b)r(e)h(giv)n(en)e(as)h(a)f(fraction)h(of)g
-(the)h(minim)n(um)g(dimension)f(of)g(the)h(plotting)227
-4804 y(area.)56 b(Negativ)n(e)33 b(v)-5 b(alues)34 b(cause)g(ma)5
-b(jor)33 b(tic)n(k)h(marks)f(to)i(b)r(e)f(placed)h(on)f(the)g(outside)g
-(of)h(the)g(corresp)r(onding)227 4903 y(grid)c(line)h(or)f(axis)g
-(\(but)i(sub)5 b(ject)32 b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)
-g(the)g(underlying)f(graphics)f(system\),)j(while)227
-5003 y(p)r(ositiv)n(e)27 b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)
-h(placed)f(on)h(the)g(inside.)227 5126 y(The)e(default)g(b)r(eha)n
-(viour)e(dep)r(ends)i(on)f(whether)g(a)g(co)r(ordinate)f(grid)h(is)g
-(dra)n(wn)g(inside)g(the)h(plotting)g(area)e(\(see)227
-5226 y(the)f(Grid)e(attribute\).)36 b(If)22 b(so,)h(the)f(default)g(Ma)
-5 b(jTic)n(kLen)21 b(v)-5 b(alue)22 b(is)g(zero)f(\(so)g(that)h(ma)5
-b(jor)21 b(tic)n(ks)g(are)g(not)h(dra)n(wn\),)227 5325
-y(otherwise)27 b(the)h(default)g(is)f(+0.015.)0 5472
-y Fd(T)m(yp)s(e:)227 5572 y Fj(Floating)g(p)r(oin)n(t.)0
-5718 y Fd(Class)k(Applicabilit)m(y:)p eop end
-%%Page: 436 446
-TeXDict begin 436 445 bop 0 52 a FF(436)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(Plot)427 451 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-607 y Fd(Notes:)340 884 y Fi(\017)45 b Fj(If)37 b(no)g(axis)f(is)g(sp)r
-(eci\014ed,)k(\(e.g.)64 b Ft(")p Fj(Ma)5 b(jTic)n(kLen)p
-Ft(")34 b Fj(instead)j(of)g Ft(")p Fj(Ma)5 b(jTic)n(kLen\(2\))p
-Ft(")p Fj(\),)37 b(then)g(a)g Ft(")p Fj(set)p Ft(")e
-Fj(or)427 984 y Ft(")p Fj(clear)p Ft(")28 b Fj(op)r(eration)g(will)i
-(a\013ect)g(the)g(attribute)g(v)-5 b(alue)29 b(of)h(all)f(the)h(Plot)f
-(axes,)g(while)h(a)f Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p
-Fj(test)p Ft(")427 1084 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g
-(Ma)5 b(jTic)n(kLen\(1\))27 b(v)-5 b(alue.)p 0 1272 3780
-12 v 0 1404 a Fz(Matc)l(hEnd)752 b Fe(Matc)m(h)38 b(trailing)e(axes?)
-752 b Fz(Matc)l(hEnd)0 1586 y Fd(Description:)44 b Fj(This)26
-b(attribute)f(is)g(a)g(b)r(o)r(olean)f(v)-5 b(alue)25
-b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7 b(rame)24
-b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-1686 y(astFindF)-7 b(rame\))26 b(as)f(a)g(template)h(to)g(matc)n(h)f
-(another)g(\(target\))g(F)-7 b(rame.)36 b(It)26 b(applies)g(only)f(in)h
-(the)g(case)f(where)g(a)227 1785 y(matc)n(h)j(o)r(ccurs)e(b)r(et)n(w)n
-(een)i(template)g(and)f(target)g(F)-7 b(rames)27 b(with)h(di\013eren)n
-(t)g(n)n(um)n(b)r(ers)f(of)g(axes.)227 1907 y(If)g(the)g(Matc)n(hEnd)f
-(v)-5 b(alue)26 b(of)h(the)g(template)f(F)-7 b(rame)26
-b(is)h(zero,)e(then)i(the)g(axes)f(whic)n(h)g(o)r(ccur)g(\014rst)g(in)h
-(the)g(target)227 2007 y(F)-7 b(rame)25 b(will)g(b)r(e)h(matc)n(hed)f
-(and)g(an)n(y)f(trailing)g(axes)g(\(in)i(either)f(the)g(target)g(or)f
-(template\))i(will)f(b)r(e)g(disregarded.)227 2106 y(If)33
-b(it)f(is)g(non-zero,)g(the)g(\014nal)g(axes)f(in)h(eac)n(h)f(F)-7
-b(rame)32 b(will)g(b)r(e)h(matc)n(hed)e(and)h(an)n(y)f(un-matc)n(hed)h
-(leading)g(axes)227 2206 y(will)c(b)r(e)g(disregarded)e(instead.)0
-2350 y Fd(T)m(yp)s(e:)227 2450 y Fj(In)n(teger)h(\(b)r(o)r(olean\).)0
-2594 y Fd(Class)k(Applicabilit)m(y:)259 2725 y(F)-8 b(rame)427
-2824 y Fj(The)28 b(default)g(Matc)n(hEnd)f(v)-5 b(alue)27
-b(for)h(a)f(F)-7 b(rame)27 b(is)g(zero,)g(so)g(that)h(trailing)e(axes)h
-(are)g(disregarded.)259 2952 y Fd(F)-8 b(rameSet)427
-3051 y Fj(The)27 b(Matc)n(hEnd)e(attribute)i(of)f(a)g(F)-7
-b(rameSet)26 b(is)g(the)g(same)g(as)f(that)i(of)f(its)g(curren)n(t)g(F)
--7 b(rame)26 b(\(as)f(sp)r(eci\014ed)427 3151 y(b)n(y)j(the)g(Curren)n
-(t)e(attribute\).)p 0 3339 V 0 3470 a Fz(MaxAxes)794
-3471 y Fe(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)h(F)-10
-b(rame)38 b(axes)h(to)f(matc)m(h)3229 3470 y Fz(MaxAxes)0
-3630 y Fd(Description:)44 b Fj(This)38 b(attribute)g(con)n(trols)e(ho)n
-(w)h(a)g(F)-7 b(rame)37 b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h
-(\(b)n(y)g(astFindF)-7 b(rame\))37 b(as)g(a)227 3730
-y(template)g(to)f(matc)n(h)f(another)h(\(target\))f(F)-7
-b(rame.)62 b(It)37 b(sp)r(eci\014es)f(the)g(maxim)n(um)g(n)n(um)n(b)r
-(er)g(of)g(axes)f(that)h(the)227 3829 y(target)27 b(F)-7
-b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e(to)i(matc)n(h)f(the)h
-(template.)227 3951 y(Normally)-7 b(,)22 b(this)g(v)-5
-b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7 b(rame)21
-b(will)h(only)g(matc)n(h)227 4051 y(another)29 b(F)-7
-b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g(as)h
-(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4150 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-4294 y Fd(T)m(yp)s(e:)227 4394 y Fj(In)n(teger.)0 4538
-y Fd(Class)k(Applicabilit)m(y:)259 4669 y(F)-8 b(rame)427
-4769 y Fj(The)35 b(default)g(MaxAxes)f(v)-5 b(alue)34
-b(for)g(a)g(F)-7 b(rame)34 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)34 b(axes)g(\(Naxes)g(at-)427 4868
-y(tribute\).)259 4996 y Fd(CmpF)-8 b(rame)427 5095 y
-Fj(The)27 b(MaxAxes)f(attribute)h(of)f(a)g(CmpF)-7 b(rame)27
-b(defaults)g(to)f(a)g(large)g(n)n(um)n(b)r(er)g(\(1000000\))e(whic)n(h)
-i(is)h(m)n(uc)n(h)427 5195 y(larger)k(than)j(an)n(y)e(lik)n(ely)g(n)n
-(um)n(b)r(er)h(of)g(axes)f(in)i(a)e(F)-7 b(rame.)53 b(Com)n(bined)33
-b(with)h(the)f(MinAxes)g(default)h(of)427 5295 y(zero)28
-b(\(for)h(a)g(CmpF)-7 b(rame\),)30 b(this)f(means)g(that)g(the)h
-(default)f(b)r(eha)n(viour)f(for)h(a)g(CmpF)-7 b(rame)29
-b(is)g(to)g(matc)n(h)427 5394 y(an)n(y)24 b(target)g(F)-7
-b(rame)24 b(that)h(consists)f(of)g(a)g(subset)h(of)f(the)h(axes)f(in)h
-(the)g(template)g(CmpF)-7 b(rame.)36 b(T)-7 b(o)24 b(c)n(hange)427
-5494 y(this)33 b(so)f(that)g(a)g(CmpF)-7 b(rame)32 b(will)h(only)f
-(matc)n(h)g(F)-7 b(rames)31 b(that)i(ha)n(v)n(e)e(the)i(same)e(n)n(um)n
-(b)r(er)h(of)h(axes,)f(y)n(ou)427 5593 y(should)i(set)g(the)h(CmpF)-7
-b(rame)34 b(MaxAxes)f(and)h(MinAxes)g(attributes)g(to)g(the)h(n)n(um)n
-(b)r(er)f(of)g(axes)f(in)h(the)427 5693 y(CmpF)-7 b(rame.)p
-eop end
-%%Page: 437 447
-TeXDict begin 437 446 bop 3643 52 a FF(437)259 351 y
-Fd(F)-8 b(rameSet)427 451 y Fj(The)29 b(MaxAxes)f(attribute)h(of)g(a)g
-(F)-7 b(rameSet)28 b(is)h(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)28 b(\(as)g(sp)r(eci\014ed)427 551 y(b)n(y)g(the)g
-(Curren)n(t)e(attribute\).)0 706 y Fd(Notes:)340 982
-y Fi(\017)45 b Fj(When)39 b(setting)g(a)e(MaxAxes)h(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MinAxes)g(attribute)f
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1082 y(c)n(hanged)26
-b(so)h(that)g(it)g(remains)f(consisten)n(t)h(with)g(\(i.e.)37
-b(do)r(es)27 b(not)g(exceed\))g(the)g(new)h(v)-5 b(alue.)36
-b(The)27 b(default)427 1182 y(MaxAxes)g(v)-5 b(alue)28
-b(ma)n(y)e(also)h(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MinAxes)g(v)-5 b(alue.)340 1308 y Fi(\017)45
-b Fj(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 1408 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 1507 y(matc)n(h.)p
-0 1694 3780 12 v 0 1826 a Fz(MeshSize)332 b Fe(Num)m(b)s(er)38
-b(of)h(p)s(oin)m(ts)f(used)h(to)f(represen)m(t)g(the)1335
-1940 y(b)s(oundary)f(of)i(a)f(Region)3230 1826 y Fz(MeshSize)0
-2117 y Fd(Description:)44 b Fj(This)24 b(attribute)f(con)n(trols)f(ho)n
-(w)g(man)n(y)h(p)r(oin)n(ts)g(are)f(used)i(when)f(creating)f(a)h(mesh)g
-(of)h(p)r(oin)n(ts)f(co)n(v)n(ering)227 2216 y(the)35
-b(b)r(oundary)e(of)i(a)f(Region.)56 b(This)34 b(mesh)g(is)g(used)h
-(primarily)e(when)h(testing)h(for)e(o)n(v)n(erlap)g(with)h(a)g(second)
-227 2316 y(Region:)i(eac)n(h)25 b(p)r(oin)n(t)h(in)g(the)g(mesh)g(is)g
-(c)n(hec)n(k)n(ed)e(to)i(see)g(if)g(it)g(is)g(inside)g(or)f(outside)h
-(the)g(second)f(Region.)36 b(Th)n(us,)227 2416 y(the)23
-b(reliabilit)n(y)f(of)g(the)h(o)n(v)n(erlap)d(c)n(hec)n(k)h(dep)r(ends)
-i(on)f(the)h(v)-5 b(alue)22 b(assigned)g(to)g(this)h(attribute.)35
-b(If)23 b(the)f(v)-5 b(alue)23 b(used)227 2515 y(is)e(v)n(ery)e(lo)n
-(w,)i(it)g(is)f(p)r(ossible)g(for)g(o)n(v)n(erlaps)e(to)i(go)g
-(unnoticed.)34 b(High)21 b(v)-5 b(alues)20 b(pro)r(duce)g(more)f
-(reliable)h(results,)h(but)227 2615 y(can)i(result)h(in)f(the)h(o)n(v)n
-(erlap)e(test)i(b)r(eing)f(v)n(ery)g(slo)n(w.)34 b(The)24
-b(default)g(v)-5 b(alue)23 b(is)h(200)e(for)h(t)n(w)n(o)g(dimensional)g
-(Regions)227 2714 y(and)f(2000)d(for)i(three)g(or)g(more)f(dimensional)
-h(Regions)g(\(this)h(attribute)f(is)g(not)h(used)f(for)g(1-dimensional)
-f(regions)227 2814 y(since)29 b(the)g(b)r(oundary)e(of)i(a)f(simple)h
-(1-d)f(Region)f(can)i(only)f(ev)n(er)f(ha)n(v)n(e)h(t)n(w)n(o)f(p)r
-(oin)n(ts\).)40 b(A)29 b(v)-5 b(alue)29 b(of)f(\014v)n(e)g(is)h(used)
-227 2914 y(if)f(the)g(supplied)g(v)-5 b(alue)28 b(is)f(less)g(than)h
-(\014v)n(e.)0 3057 y Fd(T)m(yp)s(e:)227 3156 y Fj(In)n(teger.)0
-3300 y Fd(Class)j(Applicabilit)m(y:)259 3430 y(Region)427
-3529 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i(attribute.)259
-3656 y Fd(CmpRegion)427 3756 y Fj(The)g(default)g(MeshSize)g(for)f(a)g
-(CmpRegion)g(is)g(the)h(MeshSize)g(of)f(its)h(\014rst)g(comp)r(onen)n
-(t)f(Region.)259 3882 y Fd(Stc)427 3982 y Fj(The)h(default)g(MeshSize)g
-(for)f(an)g(Stc)h(is)f(the)h(MeshSize)g(of)f(its)h(encapsulated)f
-(Region.)p 0 4168 V 0 4300 a Fz(MinAxes)279 b Fe(Minim)m(um)37
-b(n)m(um)m(b)s(er)h(of)g(F)-10 b(rame)39 b(axes)f(to)g(matc)m(h)278
-b Fz(MinAxes)0 4458 y Fd(Description:)44 b Fj(This)38
-b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(F)-7 b(rame)37
-b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h(\(b)n(y)g(astFindF)-7
-b(rame\))37 b(as)g(a)227 4557 y(template)h(to)f(matc)n(h)g(another)f
-(\(target\))g(F)-7 b(rame.)65 b(It)38 b(sp)r(eci\014es)f(the)g(minim)n
-(um)h(n)n(um)n(b)r(er)f(of)g(axes)f(that)h(the)227 4657
-y(target)27 b(F)-7 b(rame)27 b(ma)n(y)g(ha)n(v)n(e)f(in)i(order)e(to)i
-(matc)n(h)f(the)h(template.)227 4778 y(Normally)-7 b(,)22
-b(this)g(v)-5 b(alue)22 b(will)g(equal)g(the)g(n)n(um)n(b)r(er)f(of)h
-(F)-7 b(rame)21 b(axes,)h(so)g(that)g(a)f(template)h(F)-7
-b(rame)21 b(will)h(only)g(matc)n(h)227 4878 y(another)29
-b(F)-7 b(rame)30 b(with)g(the)g(same)g(n)n(um)n(b)r(er)g(of)f(axes)g
-(as)h(itself.)44 b(By)30 b(setting)g(a)f(di\013eren)n(t)h(v)-5
-b(alue,)31 b(ho)n(w)n(ev)n(er,)d(the)227 4978 y(matc)n(hing)f(pro)r
-(cess)g(ma)n(y)g(b)r(e)h(used)f(to)h(iden)n(tify)g(F)-7
-b(rames)27 b(with)h(sp)r(eci\014ed)g(n)n(um)n(b)r(ers)f(of)g(axes.)0
-5121 y Fd(T)m(yp)s(e:)227 5220 y Fj(In)n(teger.)0 5364
-y Fd(Class)k(Applicabilit)m(y:)259 5494 y(F)-8 b(rame)427
-5593 y Fj(The)36 b(default)g(MinAxes)g(v)-5 b(alue)35
-b(for)g(a)g(F)-7 b(rame)35 b(is)h(equal)f(to)g(the)h(n)n(um)n(b)r(er)g
-(of)f(F)-7 b(rame)35 b(axes)g(\(Naxes)g(at-)427 5693
-y(tribute\).)p eop end
-%%Page: 438 448
-TeXDict begin 438 447 bop 0 52 a FF(438)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(CmpF)-8 b(rame)427 451 y Fj(The)22 b(MinAxes)f(attribute)h(of)f(a)
-g(CmpF)-7 b(rame)22 b(defaults)f(to)h(zero.)33 b(Com)n(bined)22
-b(with)g(the)f(MaxAxes)g(default)427 551 y(of)30 b(1000000)d(\(for)j(a)
-g(CmpF)-7 b(rame\),)30 b(this)h(means)e(that)i(the)f(default)h(b)r(eha)
-n(viour)e(for)g(a)h(CmpF)-7 b(rame)30 b(is)g(to)427 650
-y(matc)n(h)c(an)n(y)f(target)h(F)-7 b(rame)25 b(that)i(consists)e(of)h
-(a)g(subset)g(of)g(the)g(axes)g(in)g(the)g(template)h(CmpF)-7
-b(rame.)36 b(T)-7 b(o)427 750 y(c)n(hange)24 b(this)h(so)g(that)g(a)g
-(CmpF)-7 b(rame)25 b(will)g(only)g(matc)n(h)f(F)-7 b(rames)25
-b(that)g(ha)n(v)n(e)f(the)h(same)g(n)n(um)n(b)r(er)f(of)h(axes,)427
-849 y(y)n(ou)33 b(should)g(set)g(the)g(CmpF)-7 b(rame)33
-b(MinAxes)g(and)g(MaxAxes)g(attributes)g(to)g(the)g(n)n(um)n(b)r(er)g
-(of)g(axes)f(in)427 949 y(the)c(CmpF)-7 b(rame.)259 1082
-y Fd(F)f(rameSet)427 1182 y Fj(The)30 b(MinAxes)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)30 b(is)g(the)g(same)f(as)h(that)g(of)g(its)g(curren)n
-(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)427 1281
-y(b)n(y)f(the)g(Curren)n(t)e(attribute\).)0 1444 y Fd(Notes:)340
-1727 y Fi(\017)45 b Fj(When)39 b(setting)g(a)e(MinAxes)i(v)-5
-b(alue,)41 b(the)e(v)-5 b(alue)38 b(of)g(the)h(MaxAxes)f(attribute)g
-(ma)n(y)g(also)f(b)r(e)i(silen)n(tly)427 1826 y(c)n(hanged)28
-b(so)f(that)i(it)f(remains)g(consisten)n(t)g(with)g(\(i.e.)40
-b(is)28 b(not)g(less)g(than\))h(the)g(new)f(v)-5 b(alue.)39
-b(The)28 b(default)427 1926 y(MinAxes)g(v)-5 b(alue)27
-b(ma)n(y)g(also)g(b)r(e)h(reduced)f(to)h(remain)f(consisten)n(t)g(with)
-h(the)g(MaxAxes)f(v)-5 b(alue.)340 2059 y Fi(\017)45
-b Fj(If)25 b(a)f(template)h(F)-7 b(rame)24 b(is)h(used)f(to)g(matc)n(h)
-h(a)f(target)f(with)j(a)e(di\013eren)n(t)g(n)n(um)n(b)r(er)h(of)f
-(axes,)g(the)h(Matc)n(hEnd)427 2158 y(attribute)j(of)f(the)h(template)f
-(is)g(used)h(to)f(determine)g(ho)n(w)g(the)h(individual)f(axes)f(of)i
-(eac)n(h)e(F)-7 b(rame)27 b(should)427 2258 y(matc)n(h.)p
-0 2458 3780 12 v 0 2596 a Fz(MinTic)l(k\(axis\))1033
-2589 y Fe(Densit)m(y)38 b(of)h(minor)e(tic)m(k)g(marks)h(for)g(a)1782
-2704 y(Plot)2951 2596 y Fz(MinTic)l(k\(axis\))0 2875
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2974 y(astGrid)24 b(function\))h(b)n(y)f
-(determining)g(the)h(densit)n(y)f(of)g(minor)g(tic)n(k)g(marks)f(whic)n
-(h)i(app)r(ear)e(b)r(et)n(w)n(een)h(the)h(ma)5 b(jor)227
-3074 y(axis)24 b(v)-5 b(alues)25 b(of)g(a)f(Plot.)36
-b(It)25 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)24 b(for)h(eac)n(h)f
-(ph)n(ysical)g(axis)g(of)h(a)f(Plot)g(so)h(that,)g(for)g(instance,)227
-3173 y(the)j(setting)g Ft(")p Fj(MinTic)n(k\(2\)=2)p
-Ft(")e Fj(sp)r(eci\014es)h(the)h(densit)n(y)f(of)h(minor)f(tic)n(k)h
-(marks)e(along)g(the)i(second)f(axis.)227 3298 y(The)j(v)-5
-b(alue)29 b(supplied)h(should)g(b)r(e)g(the)g(n)n(um)n(b)r(er)f(of)g
-(minor)h(divisions)e(required)h(b)r(et)n(w)n(een)h(eac)n(h)e(pair)h(of)
-h(ma)5 b(jor)227 3398 y(axis)28 b(v)-5 b(alues,)28 b(this)g(b)r(eing)h
-(one)e(more)h(than)g(the)h(n)n(um)n(b)r(er)f(of)g(minor)g(tic)n(k)g
-(marks)f(to)h(b)r(e)g(dra)n(wn.)38 b(By)28 b(default,)h(a)227
-3497 y(v)-5 b(alue)28 b(is)f(c)n(hosen)g(that)h(dep)r(ends)g(on)f(the)h
-(gap)f(b)r(et)n(w)n(een)g(ma)5 b(jor)27 b(axis)g(v)-5
-b(alues)27 b(and)g(the)h(nature)f(of)h(the)g(axis.)0
-3647 y Fd(T)m(yp)s(e:)227 3747 y Fj(In)n(teger.)0 3897
-y Fd(Class)j(Applicabilit)m(y:)259 4034 y(Plot)427 4133
-y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0 4295
-y Fd(Notes:)340 4578 y Fi(\017)45 b Fj(If)36 b(no)f(axis)g(is)g(sp)r
-(eci\014ed,)j(\(e.g.)60 b Ft(")p Fj(MinTic)n(k)p Ft(")35
-b Fj(instead)g(of)g Ft(")p Fj(MinTic)n(k\(2\))p Ft(")p
-Fj(\),)i(then)f(a)f Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p
-Fj(clear)p Ft(")427 4678 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h
-(attribute)f(v)-5 b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h
-(a)f Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p
-Ft(")h Fj(op)r(eration)427 4778 y(will)k(use)g(just)g(the)g(MinTic)n
-(k\(1\))f(v)-5 b(alue.)p 0 4977 V 0 5116 a Fz(MinTic)l(kLen\(axis\))
-1361 5109 y Fe(Length)38 b(of)g(minor)f(tic)m(k)1469
-5224 y(marks)h(for)g(a)g(Plot)2734 5116 y Fz(MinTic)l(kLen\(axis\))0
-5394 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 5494 y(astGrid)40 b(function\))h(b)n(y)g
-(determining)f(the)h(length)f(of)h(the)f(minor)g(tic)n(k)h(marks)e(dra)
-n(wn)g(on)h(the)h(axes)f(of)g(a)227 5593 y(Plot.)i(It)30
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)29 b(for)g(eac)n(h)g(ph)n
-(ysical)f(axis)h(of)g(the)h(Plot)f(so)g(that,)h(for)f(instance,)h(the)g
-(setting)227 5693 y Ft(")p Fj(MinTic)n(kLen\(2\)=0)p
-Ft(")c Fj(sp)r(eci\014es)h(the)h(length)g(of)g(the)g(minor)f(tic)n(k)g
-(marks)g(dra)n(wn)f(on)h(the)h(second)f(axis.)p eop end
-%%Page: 439 449
-TeXDict begin 439 448 bop 3643 52 a FF(439)227 351 y
-Fj(The)35 b(MinTic)n(kLen)f(v)-5 b(alue)34 b(should)g(b)r(e)h(giv)n(en)
-f(as)f(a)h(fraction)g(of)g(the)h(minim)n(um)g(dimension)f(of)h(the)g
-(plotting)227 451 y(area.)56 b(Negativ)n(e)34 b(v)-5
-b(alues)34 b(cause)g(minor)g(tic)n(k)g(marks)f(to)i(b)r(e)g(placed)f
-(on)g(the)h(outside)f(of)h(the)g(corresp)r(onding)227
-551 y(grid)c(line)h(or)f(axis)g(\(but)i(sub)5 b(ject)32
-b(to)g(an)n(y)f(clipping)g(imp)r(osed)h(b)n(y)g(the)g(underlying)f
-(graphics)f(system\),)j(while)227 650 y(p)r(ositiv)n(e)27
-b(v)-5 b(alues)28 b(cause)f(them)h(to)f(b)r(e)h(placed)f(on)h(the)g
-(inside.)227 788 y(The)g(default)g(v)-5 b(alue)27 b(is)h(+0.007.)0
-965 y Fd(T)m(yp)s(e:)227 1064 y Fj(Floating)f(p)r(oin)n(t.)0
-1241 y Fd(Class)k(Applicabilit)m(y:)259 1404 y(Plot)427
-1504 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-1693 y Fd(Notes:)340 2003 y Fi(\017)45 b Fj(The)27 b(n)n(um)n(b)r(er)f
-(of)g(minor)g(tic)n(k)h(marks)e(dra)n(wn)h(is)g(determined)h(b)n(y)f
-(the)h(Plot's)e(MinTic)n(k\(axis\))h(attribute.)340 2149
-y Fi(\017)45 b Fj(If)38 b(no)e(axis)h(is)f(sp)r(eci\014ed,)k(\(e.g.)65
-b Ft(")p Fj(MinTic)n(kLen)p Ft(")36 b Fj(instead)h(of)g
-Ft(")p Fj(MinTic)n(kLen\(2\))p Ft(")p Fj(\),)h(then)g(a)e
-Ft(")p Fj(set)p Ft(")g Fj(or)427 2249 y Ft(")p Fj(clear)p
-Ft(")28 b Fj(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p Fj(test)p Ft(")427
-2348 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g(MinTic)n(kLen\(1\))g
-(v)-5 b(alue.)p 0 2575 3780 12 v 0 2705 a Fz(NatLat)823
-2706 y Fe(Nativ)m(e)37 b(latitude)g(of)h(the)h(reference)f(p)s(oin)m(t)
-f(of)i(a)1325 2819 y(FITS-W)m(CS)g(pro)7 b(jection)3358
-2705 y Fz(NatLat)0 3035 y Fd(Description:)44 b Fj(This)23
-b(attribute)g(giv)n(es)e(the)i(latitude)g(of)g(the)g(reference)f(p)r
-(oin)n(t)h(of)f(the)h(FITS-W)n(CS)g(pro)5 b(jection)22
-b(imple-)227 3135 y(men)n(ted)30 b(b)n(y)g(a)f(WcsMap.)43
-b(The)29 b(v)-5 b(alue)30 b(is)f(in)h(radians)f(in)g(the)h
-Ft(")p Fj(nativ)n(e)f(spherical)p Ft(")f Fj(co)r(ordinate)h(system.)43
-b(This)227 3235 y(v)-5 b(alue)29 b(is)f(\014xed)g(for)g(most)g(pro)5
-b(jections,)28 b(for)g(instance)g(it)h(is)f(PI/2)f(\(90)h(degrees\))f
-(for)h(all)g(zenithal)h(pro)5 b(jections.)227 3334 y(F)-7
-b(or)28 b(some)g(pro)5 b(jections)28 b(\(e.g.)39 b(the)29
-b(conics\))f(the)h(v)-5 b(alue)29 b(is)f(not)h(\014xed,)g(but)g(is)f
-(sp)r(eci\014ed)h(b)n(y)g(parameter)e(one)h(on)227 3434
-y(the)g(latitude)g(axis.)227 3572 y(FITS-W)n(CS)g(pap)r(er)f(I)r(I)g
-(in)n(tro)r(duces)g(the)h(concept)f(of)g(a)g Ft(")p Fj(\014ducial)g(p)r
-(oin)n(t)p Ft(")g Fj(whic)n(h)g(is)g(logical)f(distinct)i(from)f(the)
-227 3672 y(pro)5 b(jection)29 b(reference)g(p)r(oin)n(t.)43
-b(It)30 b(is)f(easy)g(to)h(confuse)f(the)h(use)f(of)h(these)g(t)n(w)n
-(o)f(p)r(oin)n(ts.)43 b(The)29 b(\014ducial)h(p)r(oin)n(t)g(is)227
-3771 y(the)22 b(p)r(oin)n(t)g(whic)n(h)g(has)f(celestial)g(co)r
-(ordinates)f(giv)n(en)h(b)n(y)g(the)h(CR)-9 b(V)g(AL)22
-b(FITS)g(k)n(eyw)n(ords.)33 b(The)21 b(nativ)n(e)h(spherical)227
-3871 y(co)r(ordinates)k(for)h(this)g(p)r(oin)n(t)h(default)f(to)g(the)h
-(v)-5 b(alues)27 b(of)g(the)g(NatLat)g(and)g(NatLon,)g(but)h(these)f
-(defaults)h(mey)227 3970 y(b)r(e)34 b(o)n(v)n(er-ridden)c(b)n(y)j(v)-5
-b(alues)32 b(stored)g(in)h(the)h(PVi)p Ft(_)p Fj(j)e(k)n(eyw)n(ords.)51
-b(Put)33 b(another)e(w)n(a)n(y)-7 b(,)34 b(the)f(CR)-9
-b(V)g(AL)33 b(k)n(eyw)n(ords)227 4070 y(will)j(b)n(y)e(default)i(giv)n
-(e)e(the)h(celestial)g(co)r(ordinates)f(of)h(the)g(pro)5
-b(jection)34 b(reference)g(p)r(oin)n(t,)j(but)f(ma)n(y)e(refer)h(to)227
-4170 y(some)23 b(other)g(p)r(oin)n(t)g(if)h(alternativ)n(e)e(nativ)n(e)
-h(longitude)g(and)g(latitude)h(v)-5 b(alues)23 b(are)f(pro)n(vided)g
-(through)h(the)h(PVi)p Ft(_)p Fj(j)227 4269 y(k)n(eyw)n(ords.)227
-4407 y(The)k(NatLat)f(attribute)h(is)g(read-only)-7 b(.)0
-4584 y Fd(T)m(yp)s(e:)227 4684 y Fj(Floating)27 b(p)r(oin)n(t,)h
-(read-only)-7 b(.)0 4860 y Fd(Class)31 b(Applicabilit)m(y:)259
-5024 y(WcsMap)427 5123 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h
-(attribute.)0 5312 y Fd(Notes:)340 5622 y Fi(\017)45
-b Fj(A)28 b(default)g(v)-5 b(alue)28 b(of)f(AST)p Ft(__)p
-Fj(BAD)h(is)f(used)h(if)g(no)f(latitude)h(v)-5 b(alue)28
-b(is)f(a)n(v)-5 b(ailable.)p eop end
-%%Page: 440 450
-TeXDict begin 440 449 bop 0 52 a FF(440)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a Fz(NatLon)784 483 y Fe(Nativ)m(e)37
-b(longitude)g(of)h(the)h(reference)f(p)s(oin)m(t)f(of)i(a)1325
-596 y(FITS-W)m(CS)g(pro)7 b(jection)3334 482 y Fz(NatLon)0
-827 y Fd(Description:)44 b Fj(This)39 b(attribute)g(giv)n(es)f(the)h
-(longitude)f(of)h(the)g(reference)f(p)r(oin)n(t)h(of)g(the)g(FITS-W)n
-(CS)g(pro)5 b(jection)227 927 y(implemen)n(ted)31 b(b)n(y)f(a)f
-(WcsMap.)44 b(The)30 b(v)-5 b(alue)30 b(is)g(in)h(radians)d(in)j(the)f
-Ft(")p Fj(nativ)n(e)f(spherical)p Ft(")g Fj(co)r(ordinate)g(system,)227
-1026 y(and)f(will)g(usually)f(b)r(e)h(zero.)35 b(See)28
-b(the)g(description)f(of)h(attribute)f(NatLat)h(for)f(further)g
-(information.)227 1172 y(The)h(NatLon)f(attribute)h(is)f(read-only)-7
-b(.)0 1363 y Fd(T)m(yp)s(e:)227 1463 y Fj(Floating)27
-b(p)r(oin)n(t,)h(read-only)-7 b(.)0 1654 y Fd(Class)31
-b(Applicabilit)m(y:)259 1832 y(WcsMap)427 1932 y Fj(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 2173 V 0 2304 a Fz(Naxes)1308
-2305 y Fe(Num)m(b)s(er)38 b(of)g(F)-10 b(rame)39 b(axes)3424
-2304 y Fz(Naxes)0 2517 y Fd(Description:)44 b Fj(This)33
-b(is)f(a)g(read-only)f(attribute)i(giving)f(the)h(n)n(um)n(b)r(er)f(of)
-h(axes)e(in)i(a)f(F)-7 b(rame)32 b(\(i.e.)52 b(the)33
-b(n)n(um)n(b)r(er)g(of)227 2616 y(dimensions)24 b(of)g(the)g(co)r
-(ordinate)f(space)g(whic)n(h)h(the)g(F)-7 b(rame)24 b(describ)r(es\).)
-35 b(This)24 b(v)-5 b(alue)24 b(is)g(determined)g(when)g(the)227
-2716 y(F)-7 b(rame)27 b(is)h(created.)0 2907 y Fd(T)m(yp)s(e:)227
-3007 y Fj(In)n(teger,)f(read-only)-7 b(.)0 3198 y Fd(Class)31
-b(Applicabilit)m(y:)259 3376 y(F)-8 b(rame)427 3476 y
-Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3630 y Fd(F)-8 b(rameSet)427 3730 y Fj(The)29 b(Naxes)g(attribute)g(of)
-g(a)g(F)-7 b(rameSet)28 b(is)h(the)h(same)e(as)h(that)g(of)g(its)g
-(curren)n(t)f(F)-7 b(rame)29 b(\(as)g(sp)r(eci\014ed)g(b)n(y)427
-3829 y(the)f(Curren)n(t)f(attribute\).)259 3983 y Fd(CmpF)-8
-b(rame)427 4083 y Fj(The)40 b(Naxes)e(attribute)i(of)f(a)g(CmpF)-7
-b(rame)39 b(is)g(equal)g(to)h(the)f(sum)h(of)f(the)h(Naxes)f(v)-5
-b(alues)39 b(of)g(its)g(t)n(w)n(o)427 4182 y(comp)r(onen)n(t)28
-b(F)-7 b(rames.)p 0 4423 V 0 4555 a Fz(Ncard)388 b Fe(Num)m(b)s(er)38
-b(of)g(FITS)h(header)g(cards)f(in)g(a)h(FitsChan)387
-b Fz(Ncard)0 4762 y Fd(Description:)44 b Fj(This)33 b(attribute)g(giv)n
-(es)e(the)i(total)f(n)n(um)n(b)r(er)h(of)f(FITS)h(header)f(cards)f
-(stored)h(in)h(a)f(FitsChan.)52 b(It)33 b(is)227 4862
-y(up)r(dated)28 b(as)f(cards)g(are)f(added)i(or)f(deleted.)0
-5053 y Fd(T)m(yp)s(e:)227 5153 y Fj(In)n(teger,)g(read-only)-7
-b(.)0 5344 y Fd(Class)31 b(Applicabilit)m(y:)259 5523
-y(FitsChan)427 5622 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)p eop end
-%%Page: 441 451
-TeXDict begin 441 450 bop 3643 52 a FF(441)p 0 351 3780
-12 v 0 482 a Fz(NegLon)1009 483 y Fe(Displa)m(y)37 b(negativ)m(e)g
-(longitude)g(v)-7 b(alues?)3323 482 y Fz(NegLon)0 708
-y Fd(Description:)44 b Fj(This)29 b(attribute)g(is)f(a)h(b)r(o)r(olean)
-f(v)-5 b(alue)28 b(whic)n(h)h(con)n(trols)e(ho)n(w)h(longitude)h(v)-5
-b(alues)28 b(are)f(normalized)h(for)227 808 y(displa)n(y)f(b)n(y)g
-(astNorm.)227 950 y(If)h(the)f(NegLon)f(attribute)i(is)f(zero,)f(then)h
-(normalized)f(longitude)h(v)-5 b(alues)27 b(will)g(b)r(e)g(in)h(the)f
-(range)f(zero)g(to)h(2.pi.)227 1050 y(If)h(NegLon)f(is)h(non-zero,)e
-(then)i(normalized)e(longitude)i(v)-5 b(alues)27 b(will)h(b)r(e)g(in)g
-(the)g(range)e(-pi)h(to)h(pi.)227 1193 y(The)h(default)f(v)-5
-b(alue)29 b(dep)r(ends)f(on)g(the)h(curren)n(t)f(v)-5
-b(alue)28 b(of)g(the)h(SkyRefIs)f(attribute,)h(If)g(SkyRefIs)f(has)g(a)
-g(v)-5 b(alue)227 1292 y(of)28 b Ft(")p Fj(Origin)p Ft(")p
-Fj(,)e(then)i(the)g(default)g(for)f(NegLon)g(is)g(one,)g(otherwise)g
-(the)h(default)g(is)g(zero.)0 1478 y Fd(T)m(yp)s(e:)227
-1578 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 1764 y Fd(Class)k
-(Applicabilit)m(y:)259 1937 y(SkyF)-8 b(rame)427 2036
-y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)p
-0 2272 V 0 2403 a Fz(Negated)879 b Fe(Region)38 b(negation)f(\015ag)877
-b Fz(Negated)0 2629 y Fd(Description:)44 b Fj(This)30
-b(attribute)f(con)n(trols)f(whether)i(a)f(Region)f(represen)n(ts)g(the)
-i Ft(")p Fj(inside)p Ft(")f Fj(or)g(the)g Ft(")p Fj(outside)p
-Ft(")g Fj(of)g(the)227 2728 y(area)d(whic)n(h)h(w)n(as)f(supplied)i
-(when)f(the)h(Region)f(w)n(as)f(created.)36 b(If)27 b(the)h(attribute)g
-(v)-5 b(alue)27 b(is)g(zero)f(\(the)i(default\),)227
-2828 y(the)40 b(Region)f(represen)n(ts)e(the)j(inside)f(of)h(the)f
-(original)f(area.)71 b(Ho)n(w)n(ev)n(er,)40 b(if)g(it)g(is)f(non-zero,)
-h(it)g(represen)n(ts)227 2928 y(the)33 b(outside)e(of)h(the)h(original)
-d(area.)49 b(The)32 b(v)-5 b(alue)32 b(of)g(this)g(attribute)g(ma)n(y)f
-(b)r(e)i(toggled)e(using)g(the)i(astNegate)227 3027 y(function.)227
-3170 y(Note,)24 b(whether)e(the)h(b)r(oundary)f(is)h(considered)e(to)i
-(b)r(e)g(inside)f(the)h(Region)f(or)g(not)g(is)h(con)n(trolled)e(b)n(y)
-h(the)h(Closed)227 3270 y(attribute.)51 b(Changing)32
-b(the)g(v)-5 b(alue)33 b(of)f(the)h(Negated)e(attribute)i(do)r(es)f
-(not)g(c)n(hange)f(the)i(v)-5 b(alue)32 b(of)h(the)f(Closed)227
-3369 y(attribute.)51 b(Th)n(us,)34 b(if)f(Region)e(is)h(closed,)h(then)
-g(the)g(b)r(oundary)e(of)i(the)f(Region)g(will)g(b)r(e)h(inside)g(the)f
-(Region,)227 3469 y(whatev)n(er)27 b(the)h(setting)f(of)h(the)g
-(Negated)f(attribute.)0 3655 y Fd(T)m(yp)s(e:)227 3754
-y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 3940 y Fd(Class)k(Applicabilit)m
-(y:)259 4113 y(Region)427 4212 y Fj(All)d(Regions)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4448 V 0 4580 a Fz(Nframe)597 b Fe(Num)m(b)s(er)38
-b(of)g(F)-10 b(rames)39 b(in)f(a)h(F)-10 b(rameSet)595
-b Fz(Nframe)0 4782 y Fd(Description:)44 b Fj(This)22
-b(attrbute)f(giv)n(es)g(the)h(n)n(um)n(b)r(er)f(of)g(F)-7
-b(rames)21 b(in)h(a)f(F)-7 b(rameSet.)35 b(This)21 b(v)-5
-b(alue)21 b(will)h(c)n(hange)f(as)f(F)-7 b(rames)227
-4881 y(are)27 b(added)g(or)g(remo)n(v)n(ed,)f(but)i(will)g(alw)n(a)n
-(ys)e(b)r(e)i(at)f(least)g(one.)0 5067 y Fd(T)m(yp)s(e:)227
-5167 y Fj(In)n(teger,)g(read-only)-7 b(.)0 5353 y Fd(Class)31
-b(Applicabilit)m(y:)259 5525 y(F)-8 b(rameSet)427 5625
-y Fj(All)28 b(F)-7 b(rameSets)27 b(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 442 452
-TeXDict begin 442 451 bop 0 52 a FF(442)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Nin)549 b Fe(Num)m(b)s(er)38 b(of)g(input)g(co)s
-(ordinates)f(for)h(a)h(Mapping)547 b Fz(Nin)0 668 y Fd(Description:)44
-b Fj(This)33 b(attribute)f(giv)n(es)f(the)i(n)n(um)n(b)r(er)f(of)g(co)r
-(ordinate)f(v)-5 b(alues)32 b(required)f(to)h(sp)r(ecify)g(an)g(input)h
-(p)r(oin)n(t)227 768 y(for)f(a)g(Mapping)g(\(i.e.)51
-b(the)32 b(n)n(um)n(b)r(er)g(of)h(dimensions)e(of)i(the)f(space)g(in)g
-(whic)n(h)g(the)h(Mapping's)f(input)h(p)r(oin)n(ts)227
-868 y(reside\).)0 1015 y Fd(T)m(yp)s(e:)227 1115 y Fj(In)n(teger,)27
-b(read-only)-7 b(.)0 1263 y Fd(Class)31 b(Applicabilit)m(y:)259
-1397 y(Mapping)427 1497 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1628 y Fd(CmpMap)427 1728 y Fj(If)k(a)e(CmpMap's)h
-(comp)r(onen)n(t)g(Mappings)g(are)f(joined)h(in)g(series,)g(then)h(its)
-f(Nin)h(attribute)f(is)g(equal)g(to)427 1827 y(the)f(Nin)g(attribute)f
-(of)g(the)h(\014rst)f(comp)r(onen)n(t)g(\(or)g(to)g(the)g(Nout)h
-(attribute)f(of)h(the)f(second)g(comp)r(onen)n(t)427
-1927 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 2042 y(If)e(a)f(CmpMap's)h(comp)r(onen)n(t)f(Mappings)
-g(are)f(joined)i(in)g(parallel,)e(then)i(its)g(Nin)g(attribute)g(is)f
-(giv)n(en)g(b)n(y)427 2142 y(the)32 b(sum)f(of)g(the)g(Nin)h
-(attributes)f(of)g(eac)n(h)f(comp)r(onen)n(t)h(\(or)f(to)h(the)h(sum)f
-(of)g(their)g(Nout)g(attributes)g(if)427 2242 y(the)d(CmpMap's)g(In)n
-(v)n(ert)e(attribute)i(is)g(non-zero\).)259 2373 y Fd(F)-8
-b(rame)427 2472 y Fj(The)23 b(Nin)g(attribute)f(for)g(a)g(F)-7
-b(rame)22 b(is)h(alw)n(a)n(ys)d(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)h(F)-7 b(rame)22 b(axes)f(\(Naxes)h(attribute\).)259
-2603 y Fd(F)-8 b(rameSet)427 2703 y Fj(The)27 b(Nin)g(attribute)g(of)f
-(a)h(F)-7 b(rameSet)26 b(is)g(equal)h(to)f(the)h(n)n(um)n(b)r(er)f(of)h
-(axes)f(\(Naxes)g(attribute\))h(of)f(its)h(base)427 2803
-y(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)g(F)-7
-b(rameSet's)22 b(Base)f(attribute\).)36 b(The)22 b(Nin)h(attribute)g(v)
--5 b(alue)22 b(ma)n(y)g(therefore)427 2902 y(c)n(hange)27
-b(if)h(a)f(new)h(base)f(F)-7 b(rame)27 b(is)g(selected.)p
-0 3098 V 0 3230 a Fz(Nob)7 b(ject)727 b Fe(Num)m(b)s(er)38
-b(of)g(Ob)7 b(jects)38 b(in)h(class)724 b Fz(Nob)7 b(ject)0
-3415 y Fd(Description:)44 b Fj(This)22 b(attribute)g(giv)n(es)f(the)i
-(total)e(n)n(um)n(b)r(er)h(of)g(Ob)5 b(jects)21 b(curren)n(tly)g(in)i
-(existence)e(in)i(the)f(same)f(class)g(as)227 3515 y(the)29
-b(Ob)5 b(ject)29 b(whose)f(attribute)g(v)-5 b(alue)29
-b(is)f(requested.)40 b(This)28 b(coun)n(t)g(do)r(es)h(not)f(include)h
-(Ob)5 b(jects)28 b(whic)n(h)h(b)r(elong)227 3614 y(to)f(deriv)n(ed)f
-(\(more)g(sp)r(ecialised\))g(classes.)227 3738 y(This)i(attribute)h(is)
-f(mainly)g(in)n(tended)h(for)f(debugging.)40 b(It)30
-b(can)f(b)r(e)h(used)f(to)g(detect)h(whether)f(Ob)5 b(jects)29
-b(whic)n(h)227 3838 y(should)f(ha)n(v)n(e)e(b)r(een)i(deleted)g(ha)n(v)
-n(e,)f(in)g(fact,)h(b)r(een)g(deleted.)0 3985 y Fd(T)m(yp)s(e:)227
-4085 y Fj(In)n(teger,)f(read-only)-7 b(.)0 4233 y Fd(Class)31
-b(Applicabilit)m(y:)259 4367 y(Ob)5 b(ject)427 4467 y
-Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4663 V 0 4801 a Fz(Norm\(axis\))851 4795 y Fe(Sp)s(eci\014es)39
-b(the)f(plane)g(up)s(on)h(whic)m(h)f(a)h(Plot3D)1284
-4909 y(dra)m(ws)f(text)g(and)g(mark)m(ers)3109 4801 y
-Fz(Norm\(axis\))0 5071 y Fd(Description:)44 b Fj(This)30
-b(attribute)h(con)n(trols)d(the)j(app)r(earance)d(of)i(text)h(and)e
-(mark)n(ers)f(dra)n(wn)i(b)n(y)f(a)h(Plot3D.)f(It)i(sp)r(ec-)227
-5171 y(i\014es)k(the)g(orien)n(tation)f(of)g(the)i(plane)e(up)r(on)h
-(whic)n(h)g(text)g(and)g(mark)n(ers)e(will)i(b)r(e)g(dra)n(wn)f(b)n(y)g
-(all)h(subsequen)n(t)227 5270 y(in)n(v)n(o)r(cations)26
-b(of)i(the)g(astT)-7 b(ext)27 b(and)h(astMark)e(functions.)227
-5394 y(When)f(setting)f(or)e(getting)i(the)g(Norm)g(attribute,)h(the)f
-(attribute)g(name)f(m)n(ust)h(b)r(e)h(quali\014ed)e(b)n(y)h(an)f(axis)h
-(index)227 5494 y(in)30 b(the)f(range)f(1)g(to)h(3.)41
-b(The)29 b(3)g(elemen)n(ts)g(of)g(the)g(Norm)g(attribute)g(are)f
-(together)g(in)n(terpreted)h(as)f(a)h(v)n(ector)e(in)227
-5593 y(3D)g(graphics)e(co)r(ordinates)h(that)h(is)f(normal)g(to)h(the)g
-(plane)g(up)r(on)g(whic)n(h)f(text)i(and)e(marks)g(should)g(b)r(e)i
-(dra)n(wn.)227 5693 y(When)35 b(testing)f(or)f(clearing)f(the)j
-(attribute,)h(the)e(axis)f(index)h(is)g(optional.)55
-b(If)35 b(no)e(index)h(is)g(supplied,)i(then)p eop end
-%%Page: 443 453
-TeXDict begin 443 452 bop 3643 52 a FF(443)227 351 y
-Fj(clearing)22 b(the)h(Norm)f(attribute)h(will)f(clear)g(all)g(three)h
-(elemen)n(ts,)g(and)g(testing)f(the)h(Norm)f(attribute)h(will)g(return)
-227 451 y(a)k(non-zero)f(v)-5 b(alue)28 b(if)g(an)n(y)f(of)g(the)h
-(three)g(elemen)n(ts)f(are)g(set.)227 574 y(The)f(default)f(v)-5
-b(alue)25 b(is)g(1.0)g(for)g(eac)n(h)f(of)h(the)h(3)f(elemen)n(ts.)35
-b(The)26 b(length)f(of)g(the)h(v)n(ector)e(is)h(insigni\014can)n(t,)g
-(but)h(an)227 674 y(error)g(will)i(b)r(e)g(rep)r(orted)f(when)g
-(attempting)h(to)g(dra)n(w)e(text)i(or)f(mark)n(ers)e(if)k(the)f(v)n
-(ector)e(has)h(zero)f(length.)0 820 y Fd(T)m(yp)s(e:)227
-920 y Fj(Floating)h(p)r(oin)n(t.)0 1067 y Fd(Class)k(Applicabilit)m(y:)
-259 1200 y(Plot)427 1300 y Fj(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 1494 3780 12 v 0 1632 a Fz(NormUnit\(axis\))1097
-1626 y Fe(Normalised)36 b(Axis)i(ph)m(ysical)g(units)2841
-1632 y Fz(NormUnit\(axis\))0 1822 y Fd(Description:)44
-b Fj(The)36 b(v)-5 b(alue)36 b(of)f(this)h(read-only)e(attribute)i(is)f
-(deriv)n(ed)g(from)h(the)g(curren)n(t)e(v)-5 b(alue)36
-b(of)g(the)g(Unit)g(at-)227 1922 y(tribute.)45 b(It)30
-b(will)g(represen)n(t)f(an)h(equiv)-5 b(alen)n(t)30 b(system)f(of)h
-(units)h(to)f(the)g(Unit)h(attribute,)g(but)g(will)f(p)r(oten)n(tially)
-227 2021 y(b)r(e)k(simpli\014ed.)55 b(F)-7 b(or)32 b(instance,)j(if)f
-(Unit)g(is)f(set)h(to)f Ft(")p Fj(s)p Fi(\003)p Fj(\(m/s\))p
-Ft(")p Fj(,)g(the)h(NormUnit)g(v)-5 b(alue)33 b(will)h(b)r(e)f
-Ft(")p Fj(m)p Ft(")p Fj(.)54 b(If)34 b(no)227 2121 y(simpli\014cation)d
-(can)g(b)r(e)h(p)r(erformed,)f(the)h(v)-5 b(alue)31 b(of)g(the)h
-(NormUnit)f(attribute)h(will)f(equal)g(that)g(of)g(the)h(Unit)227
-2221 y(attribute.)0 2367 y Fd(T)m(yp)s(e:)227 2467 y
-Fj(String,)c(read-only)-7 b(.)0 2614 y Fd(Class)31 b(Applicabilit)m(y:)
-259 2747 y(F)-8 b(rame)427 2847 y Fj(All)28 b(F)-7 b(rames)27
-b(ha)n(v)n(e)g(this)g(attribute.)0 3006 y Fd(Notes:)340
-3286 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n
-(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n
-(b)r(er)f(of)g(the)427 3386 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f
-(it)h(applies.)p 0 3579 V 0 3710 a Fz(Nout)730 3711 y
-Fe(Num)m(b)s(er)38 b(of)h(output)e(co)s(ordinates)g(for)h(a)g(Mapping)
-3480 3710 y Fz(Nout)0 3895 y Fd(Description:)44 b Fj(This)30
-b(attribute)g(giv)n(es)f(the)h(n)n(um)n(b)r(er)f(of)h(co)r(ordinate)e
-(v)-5 b(alues)30 b(generated)e(b)n(y)i(a)f(Mapping)h(to)f(sp)r(ecify)
-227 3994 y(eac)n(h)36 b(output)h(p)r(oin)n(t)g(\(i.e.)64
-b(the)36 b(n)n(um)n(b)r(er)h(of)f(dimensions)g(of)h(the)f(space)g(in)h
-(whic)n(h)f(the)h(Mapping's)f(output)227 4094 y(p)r(oin)n(ts)28
-b(reside\).)0 4241 y Fd(T)m(yp)s(e:)227 4340 y Fj(In)n(teger,)f
-(read-only)-7 b(.)0 4487 y Fd(Class)31 b(Applicabilit)m(y:)259
-4621 y(Mapping)427 4720 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4850 y Fd(CmpMap)427 4950 y Fj(If)g(a)g(CmpMap's)f
-(comp)r(onen)n(t)h(Mappings)f(are)g(joined)h(in)g(series,)f(then)h(its)
-g(Nout)g(attribute)g(is)f(equal)h(to)427 5050 y(the)i(Nout)f(attribute)
-h(of)f(the)h(second)e(comp)r(onen)n(t)h(\(or)g(to)g(the)h(Nin)g
-(attribute)f(of)g(the)h(\014rst)f(comp)r(onen)n(t)427
-5149 y(if)f(the)g(the)g(CmpMap's)g(In)n(v)n(ert)f(attribute)g(is)h
-(non-zero\).)427 5264 y(If)j(a)e(CmpMap's)h(comp)r(onen)n(t)g(Mappings)
-f(are)g(joined)h(in)g(parallel,)g(then)g(its)g(Nout)g(attribute)h(is)e
-(giv)n(en)427 5364 y(b)n(y)g(the)g(sum)g(of)f(the)i(Nout)f(attributes)f
-(of)h(eac)n(h)f(comp)r(onen)n(t)g(\(or)g(to)h(the)g(sum)g(of)g(their)f
-(Nin)i(attributes)427 5463 y(if)e(the)g(CmpMap's)g(In)n(v)n(ert)f
-(attribute)g(is)h(non-zero\).)259 5593 y Fd(F)-8 b(rame)427
-5693 y Fj(The)20 b(Nout)f(attribute)h(for)e(a)h(F)-7
-b(rame)19 b(is)g(alw)n(a)n(ys)e(equal)i(to)g(the)h(n)n(um)n(b)r(er)f
-(of)g(F)-7 b(rame)19 b(axes)f(\(Naxes)h(attribute\).)p
-eop end
-%%Page: 444 454
-TeXDict begin 444 453 bop 0 52 a FF(444)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)259 351
-y Fd(F)-8 b(rameSet)427 451 y Fj(The)25 b(Nout)g(attribute)g(of)g(a)f
-(F)-7 b(rameSet)25 b(is)f(equal)g(to)h(the)g(n)n(um)n(b)r(er)g(of)f(F)
--7 b(rameSet)25 b(axes)f(\(Naxes)g(attribute\))427 551
-y(whic)n(h,)k(in)f(turn,)h(is)f(equal)g(to)g(the)g(Naxes)g(attribute)h
-(of)f(the)g(F)-7 b(rameSet's)27 b(curren)n(t)g(F)-7 b(rame)26
-b(\(as)h(sp)r(eci\014ed)427 650 y(b)n(y)j(the)h(Curren)n(t)e
-(attribute\).)45 b(The)30 b(Nout)h(attribute)f(v)-5 b(alue)30
-b(ma)n(y)g(therefore)f(c)n(hange)g(if)h(a)g(new)g(curren)n(t)427
-750 y(F)-7 b(rame)27 b(is)h(selected.)p 0 950 3780 12
-v 0 1088 a Fz(NumLab\(axis\))1062 1082 y Fe(Dra)m(w)38
-b(n)m(umerical)f(axis)h(lab)s(els)g(for)g(a)1754 1181
-y(Plot?)2935 1088 y Fz(NumLab\(axis\))0 1352 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-1452 y(astGrid)22 b(function\))i(b)n(y)e(determining)g(whether)h(lab)r
-(els)f(should)g(b)r(e)h(dra)n(wn)f(to)g(represen)n(t)f(the)i(n)n
-(umerical)f(v)-5 b(alues)227 1552 y(along)33 b(eac)n(h)f(axis)h(of)h(a)
-f(Plot.)54 b(It)34 b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)34
-b(for)f(eac)n(h)g(ph)n(ysical)f(axis)h(of)h(a)f(Plot)g(so)g(that,)i
-(for)227 1651 y(instance,)21 b(the)f(setting)f Ft(")p
-Fj(NumLab\(2\)=1)p Ft(")e Fj(sp)r(eci\014es)i(that)h(n)n(umerical)e
-(lab)r(els)h(should)g(b)r(e)h(dra)n(wn)e(for)h(the)g(second)227
-1751 y(axis.)227 1876 y(If)30 b(the)f(NumLab)h(v)-5 b(alue)29
-b(of)g(a)f(Plot)h(axis)f(is)h(non-zero)f(\(the)i(default\),)g(then)g(n)
-n(umerical)e(lab)r(els)h(will)g(b)r(e)h(dra)n(wn)227
-1975 y(for)d(that)h(axis,)f(otherwise)g(they)h(will)f(b)r(e)h(omitted.)
-0 2126 y Fd(T)m(yp)s(e:)227 2225 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-2376 y Fd(Class)k(Applicabilit)m(y:)259 2513 y(Plot)427
-2613 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)0
-2775 y Fd(Notes:)340 3059 y Fi(\017)45 b Fj(The)34 b(dra)n(wing)f(of)h
-(asso)r(ciated)f(descriptiv)n(e)g(axis)g(lab)r(els)h(for)g(a)f(Plot)h
-(\(describing)f(the)i(quan)n(tit)n(y)f(b)r(eing)427 3158
-y(plotted)28 b(along)f(eac)n(h)f(axis\))i(is)f(con)n(trolled)f(b)n(y)i
-(the)g(T)-7 b(extLab\(axis\))27 b(attribute.)340 3292
-y Fi(\017)45 b Fj(If)35 b(no)f(axis)f(is)h(sp)r(eci\014ed,)i(\(e.g.)57
-b Ft(")p Fj(NumLab)p Ft(")34 b Fj(instead)g(of)g Ft(")p
-Fj(NumLab\(2\))p Ft(")p Fj(\),)h(then)g(a)f Ft(")p Fj(set)p
-Ft(")f Fj(or)g Ft(")p Fj(clear)p Ft(")427 3391 y Fj(op)r(eration)23
-b(will)i(a\013ect)f(the)h(attribute)f(v)-5 b(alue)24
-b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f Ft(")p
-Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h Fj(op)r(eration)427
-3491 y(will)k(use)g(just)g(the)g(NumLab\(1\))g(v)-5 b(alue.)p
-0 3691 V 0 3829 a Fz(NumLabGap\(axis\))1356 3823 y Fe(Spacing)38
-b(of)h(n)m(umerical)1479 3937 y(lab)s(els)f(for)g(a)g(Plot)2689
-3829 y Fz(NumLabGap\(axis\))0 4108 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4208 y(astGrid)e(function\))i(b)n(y)e(determining)h(where)f(n)n
-(umerical)g(axis)g(lab)r(els)g(are)g(placed)g(relativ)n(e)g(to)h(the)g
-(axes)e(they)227 4308 y(describ)r(e.)36 b(It)27 b(tak)n(es)e(a)g
-(separate)g(v)-5 b(alue)25 b(for)h(eac)n(h)f(ph)n(ysical)g(axis)g(of)h
-(a)g(Plot)f(so)g(that,)i(for)e(instance,)h(the)h(setting)227
-4407 y Ft(")p Fj(NumLabGap\(2\)=-0.01)p Ft(")e Fj(sp)r(eci\014es)i
-(where)g(the)h(n)n(umerical)f(lab)r(el)h(for)f(the)h(second)f(axis)g
-(should)g(b)r(e)h(dra)n(wn.)227 4532 y(F)-7 b(or)21 b(eac)n(h)f(axis,)i
-(the)f(NumLabGap)h(v)-5 b(alue)21 b(giv)n(es)f(the)h(spacing)f(b)r(et)n
-(w)n(een)h(the)h(axis)e(line)i(\(or)e(edge)h(of)g(the)h(plotting)227
-4632 y(area,)e(if)g(appropriate\))e(and)h(the)h(nearest)f(edge)g(of)g
-(the)h(corresp)r(onding)e(n)n(umerical)g(axis)h(lab)r(els.)34
-b(P)n(ositiv)n(e)18 b(v)-5 b(alues)227 4732 y(cause)28
-b(the)h(descriptiv)n(e)f(lab)r(el)h(to)g(b)r(e)g(placed)f(on)h(the)g
-(opp)r(osite)g(side)f(of)h(the)g(line)g(to)g(the)g(default)g(tic)n(k)g
-(marks,)227 4831 y(while)f(negativ)n(e)f(v)-5 b(alues)27
-b(cause)g(it)h(to)f(b)r(e)h(placed)f(on)h(the)g(same)f(side.)227
-4956 y(The)33 b(NumLabGap)f(v)-5 b(alue)33 b(should)f(b)r(e)h(giv)n(en)
-f(as)f(a)h(fraction)g(of)h(the)g(minim)n(um)g(dimension)f(of)h(the)g
-(plotting)227 5056 y(area,)26 b(the)i(default)g(v)-5
-b(alue)28 b(b)r(eing)g(+0.01.)0 5206 y Fd(T)m(yp)s(e:)227
-5306 y Fj(Floating)f(p)r(oin)n(t.)0 5456 y Fd(Class)k(Applicabilit)m
-(y:)259 5593 y(Plot)427 5693 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 445 455
-TeXDict begin 445 454 bop 3643 52 a FF(445)0 351 y Fd(Notes:)340
-631 y Fi(\017)45 b Fj(If)34 b(no)f(axis)g(is)g(sp)r(eci\014ed,)i
-(\(e.g.)54 b Ft(")p Fj(NumLabGap)p Ft(")32 b Fj(instead)i(of)f
-Ft(")p Fj(NumLabGap\(2\))p Ft(")p Fj(\),)h(then)g(a)f
-Ft(")p Fj(set)p Ft(")f Fj(or)427 731 y Ft(")p Fj(clear)p
-Ft(")c Fj(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p Fj(test)p Ft(")427
-831 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g(NumLabGap\(1\))g(v)-5
-b(alue.)p 0 1025 3780 12 v 0 1157 a Fz(Ob)7 b(jSize)566
-b Fe(The)38 b(in-memory)f(size)i(of)f(the)h(Ob)7 b(ject)564
-b Fz(Ob)7 b(jSize)0 1341 y Fd(Description:)44 b Fj(This)c(attribute)g
-(giv)n(es)f(the)h(total)g(n)n(um)n(b)r(er)f(of)h(b)n(ytes)g(of)f
-(memory)g(used)h(b)n(y)g(the)g(Ob)5 b(ject.)74 b(This)227
-1440 y(includes)28 b(an)n(y)f(Ob)5 b(jects)27 b(whic)n(h)h(are)e
-(encapsulated)h(within)h(the)g(supplied)g(Ob)5 b(ject.)0
-1587 y Fd(T)m(yp)s(e:)227 1687 y Fj(In)n(teger,)27 b(read-only)-7
-b(.)0 1834 y Fd(Class)31 b(Applicabilit)m(y:)259 1968
-y(Ob)5 b(ject)427 2068 y Fj(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 2262 V 0 2394 a
-Fz(ObsAlt)523 b Fe(The)39 b(geo)s(detic)e(altitude)g(of)h(the)h(observ)
-m(er)522 b Fz(ObsAlt)0 2578 y Fd(Description:)44 b Fj(This)35
-b(attribute)g(sp)r(eci\014es)g(the)g(geo)r(detic)g(altitude)g(of)g(the)
-g(observ)n(er,)g(in)g(metres,)i(relativ)n(e)c(to)i(the)227
-2677 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36 b(The)26
-b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f(this)h
-(attribute,)h(but)f(sp)r(ecialised)227 2777 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 2876
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)0
-3023 y Fd(T)m(yp)s(e:)227 3123 y Fj(String.)0 3270 y
-Fd(Class)j(Applicabilit)m(y:)259 3404 y(F)-8 b(rame)427
-3504 y Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3634 y Fd(Sp)s(ecF)-8 b(rame)427 3734 y Fj(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-3833 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 3933 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4033 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4163 y Fd(TimeF)-8 b(rame)427 4263 y Fj(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4362 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4557 V 0 4688
-a Fz(ObsLat)516 b Fe(The)39 b(geo)s(detic)e(latitude)g(of)h(the)h
-(observ)m(er)514 b Fz(ObsLat)0 4872 y Fd(Description:)44
-b Fj(This)34 b(attribute)f(sp)r(eci\014es)g(the)h(geo)r(detic)e
-(latitude)i(of)f(the)h(observ)n(er,)e(in)i(degrees,)f(relativ)n(e)f(to)
-h(the)227 4972 y(IA)n(U)26 b(1976)e(reference)h(ellipsoid.)36
-b(The)26 b(basic)f(F)-7 b(rame)25 b(class)g(mak)n(es)g(no)g(use)h(of)f
-(this)h(attribute,)h(but)f(sp)r(ecialised)227 5072 y(sub)r(classes)31
-b(of)g(F)-7 b(rame)30 b(ma)n(y)h(use)g(it.)48 b(F)-7
-b(or)31 b(instance,)h(the)g(Sp)r(ecF)-7 b(rame,)32 b(SkyF)-7
-b(rame)30 b(and)h(TimeF)-7 b(rame)31 b(classes)227 5171
-y(use)d(it.)37 b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(zero.)227
-5295 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 5394 y(cess.)79 b(Some)41 b(example)h(input)g
-(formats)f(are:)64 b Ft(")p Fj(22:19:23.2)p Ft(")p Fj(,)42
-b Ft(")p Fj(22)e(19)h(23.2)p Ft(")p Fj(,)i Ft(")p Fj(22:19.387)p
-Ft(")p Fj(,)f Ft(")p Fj(22.32311)p Ft(")p Fj(,)227 5494
-y Ft(")p Fj(N22.32311)p Ft(")p Fj(,)e Ft(")p Fj(-45.6)p
-Ft(")p Fj(,)h Ft(")p Fj(S45.6)p Ft(")p Fj(.)72 b(As)40
-b(indicated,)k(the)c(sign)g(of)g(the)g(latitude)h(can)f(optionally)f(b)
-r(e)h(indi-)227 5593 y(cated)23 b(using)g(c)n(haracters)e
-Ft(")p Fj(N)p Ft(")i Fj(and)g Ft(")p Fj(S)p Ft(")f Fj(in)i(place)f(of)g
-(the)g(usual)g Ft(")p Fj(+)p Ft(")f Fj(and)h Ft(")p Fj(-)p
-Ft(")p Fj(.)35 b(When)23 b(con)n(v)n(erting)f(the)h(stored)227
-5693 y(v)-5 b(alue)28 b(to)f(a)g(string,)g(the)h(format)f
-Ft(")p Fj([s]dd:mm:ss.ss)p Ft(")g Fj(is)g(used,)h(when)g
-Ft(")p Fj([s])p Ft(")f Fj(is)g Ft(")p Fj(N)p Ft(")g Fj(or)g
-Ft(")p Fj(S)p Ft(")p Fj(.)p eop end
-%%Page: 446 456
-TeXDict begin 446 455 bop 0 52 a FF(446)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(String.)0 603 y Fd(Class)g(Applicabilit)m
-(y:)259 742 y(F)-8 b(rame)427 842 y Fj(All)28 b(F)-7
-b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259 976 y
-Fd(Sp)s(ecF)-8 b(rame)427 1076 y Fj(T)h(ogether)23 b(with)h(the)g
-(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g(attributes,)h(it)f
-(de\014nes)f(the)i(Doppler)e(shift)427 1175 y(in)n(tro)r(duced)35
-b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j(motion)f(around)g(the)i
-(earths)e(axis,)i(whic)n(h)f(is)f(needed)h(when)427 1275
-y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r(cen)n(tric)f
-(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)r(cit)n(y)f
-(error)g(whic)n(h)427 1375 y(can)d(b)r(e)h(caused)f(b)n(y)h(an)f
-(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36 b(The)28
-b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h(zero.)259
-1509 y Fd(TimeF)-8 b(rame)427 1608 y Fj(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-1708 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 1910 3780 12
-v 0 2042 a Fz(ObsLon)452 b Fe(The)39 b(geo)s(detic)e(longitude)g(of)h
-(the)h(observ)m(er)451 b Fz(ObsLon)0 2238 y Fd(Description:)44
-b Fj(This)22 b(attribute)g(sp)r(eci\014es)f(the)h(geo)r(detic)f(\(or)h
-(equiv)-5 b(alen)n(tly)e(,)22 b(geo)r(cen)n(tric\))f(longitude)g(of)h
-(the)g(observ)n(er,)227 2337 y(in)e(degrees,)f(measured)f(p)r(ositiv)n
-(e)h(east)n(w)n(ards.)32 b(See)19 b(also)e(attribute)j(ObsLat.)33
-b(The)19 b(basic)f(F)-7 b(rame)19 b(class)f(mak)n(es)g(no)227
-2437 y(use)26 b(of)g(this)h(attribute,)g(but)f(sp)r(ecialised)g(sub)r
-(classes)f(of)h(F)-7 b(rame)26 b(ma)n(y)f(use)i(it.)36
-b(F)-7 b(or)26 b(instance,)g(the)h(Sp)r(ecF)-7 b(rame,)227
-2537 y(SkyF)g(rame)27 b(and)h(TimeF)-7 b(rame)27 b(classes)f(use)h(it.)
-38 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(zero.)227
-2663 y(The)37 b(v)-5 b(alue)36 b(is)g(stored)f(in)n(ternally)g(in)i
-(radians,)g(but)g(is)f(con)n(v)n(erted)f(to)h(and)g(from)g(a)f(degrees)
-g(string)h(for)f(ac-)227 2762 y(cess.)45 b(Some)30 b(example)g(input)i
-(formats)d(are:)42 b Ft(")p Fj(155:19:23.2)p Ft(")p Fj(,)27
-b Ft(")p Fj(155)h(19)i(23.2)p Ft(")p Fj(,)f Ft(")p Fj(155:19.387)p
-Ft(")p Fj(,)e Ft(")p Fj(155.32311)p Ft(")p Fj(,)227 2862
-y Ft(")p Fj(E155.32311)p Ft(")p Fj(,)19 b Ft(")p Fj(-204.67689)p
-Ft(")p Fj(,)h Ft(")p Fj(W204.67689)p Ft(")p Fj(.)31 b(As)23
-b(indicated,)i(the)f(sign)e(of)i(the)f(longitude)h(can)e(optionally)227
-2961 y(b)r(e)30 b(indicated)g(using)f(c)n(haracters)f
-Ft(")p Fj(E)p Ft(")g Fj(and)h Ft(")p Fj(W)p Ft(")h Fj(in)f(place)h(of)f
-(the)h(usual)f Ft(")p Fj(+)p Ft(")g Fj(and)g Ft(")p Fj(-)p
-Ft(")p Fj(.)42 b(When)30 b(con)n(v)n(erting)227 3061
-y(the)g(stored)f(v)-5 b(alue)29 b(to)h(a)f(string,)h(the)f(format)h
-Ft(")p Fj([s]ddd:mm:ss.ss)p Ft(")e Fj(is)i(used,)g(when)f
-Ft(")p Fj([s])p Ft(")g Fj(is)h Ft(")p Fj(E)p Ft(")e Fj(or)h
-Ft(")p Fj(W)p Ft(")g Fj(and)227 3161 y(the)f(n)n(umerical)f(v)-5
-b(alue)27 b(is)h(c)n(hosen)f(to)g(b)r(e)h(less)f(than)h(180)e(degrees.)
-0 3313 y Fd(T)m(yp)s(e:)227 3413 y Fj(String.)0 3565
-y Fd(Class)31 b(Applicabilit)m(y:)259 3704 y(F)-8 b(rame)427
-3803 y Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3938 y Fd(Sp)s(ecF)-8 b(rame)427 4037 y Fj(T)h(ogether)23
-b(with)h(the)g(ObsLon,)g(Ep)r(o)r(c)n(h,)g(RefRA)g(and)g(RefDec)g
-(attributes,)h(it)f(de\014nes)f(the)i(Doppler)e(shift)427
-4137 y(in)n(tro)r(duced)35 b(b)n(y)g(the)g(observ)n(ers)d(diurnal)j
-(motion)f(around)g(the)i(earths)e(axis,)i(whic)n(h)f(is)f(needed)h
-(when)427 4237 y(con)n(v)n(erting)30 b(to)h(or)f(from)h(the)h(top)r(o)r
-(cen)n(tric)f(standard)f(of)i(rest.)47 b(The)32 b(maxim)n(um)f(v)n(elo)
-r(cit)n(y)f(error)g(whic)n(h)427 4336 y(can)d(b)r(e)h(caused)f(b)n(y)h
-(an)f(incorrect)f(v)-5 b(alue)28 b(is)f(0.5)g(km/s.)36
-b(The)28 b(default)g(v)-5 b(alue)28 b(for)f(the)h(attribute)f(is)h
-(zero.)259 4470 y Fd(TimeF)-8 b(rame)427 4570 y Fj(T)h(ogether)28
-b(with)i(the)f(ObsLon)g(attribute,)g(it)h(is)f(used)g(when)g(con)n(v)n
-(erting)e(b)r(et)n(w)n(een)j(certain)e(time)i(scales)427
-4670 y(\(TDB,)e(TCB,)g(LMST,)g(LAST\))p 0 4872 V 0 5010
-a Fz(PVMax\(i\))767 5003 y Fe(Maxim)m(um)37 b(n)m(um)m(b)s(er)h(of)g
-(FITS-W)m(CS)h(pro)7 b(jection)1607 5103 y(parameters)3180
-5010 y Fz(PVMax\(i\))0 5295 y Fd(Description:)44 b Fj(This)27
-b(attribute)g(sp)r(eci\014es)g(the)g(largest)e(legal)h(index)h(for)f(a)
-h(PV)f(pro)5 b(jection)26 b(parameter)g(attac)n(hed)g(to)227
-5394 y(a)j(sp)r(eci\014ed)h(axis)e(of)i(the)g(WcsMap)f(\(i.e.)42
-b(the)30 b(largest)e(legal)h(v)-5 b(alue)29 b(for)g Ft(")p
-Fj(m)p Ft(")g Fj(when)g(accessing)f(the)i Ft(")p Fj(PVi)p
-Ft(_)p Fj(m)p Ft(")227 5494 y Fj(attribute\).)59 b(The)35
-b(axis)e(index)i(is)g(sp)r(eci\014ed)g(b)n(y)f(i,)j(and)d(should)h(b)r
-(e)g(in)g(the)g(range)e(1)h(to)h(99.)57 b(The)35 b(v)-5
-b(alue)34 b(for)227 5593 y(eac)n(h)d(axis)g(is)h(determined)g(b)n(y)g
-(the)g(pro)5 b(jection)31 b(t)n(yp)r(e)h(sp)r(eci\014ed)g(when)g(the)g
-(WcsMap)g(is)f(\014rst)h(created)f(using)227 5693 y(astWcsMap)c(and)h
-(cannot)f(subsequen)n(tly)g(b)r(e)h(c)n(hanged.)p eop
-end
-%%Page: 447 457
-TeXDict begin 447 456 bop 3643 52 a FF(447)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(In)n(teger,)27 b(read-only)-7 b(.)0 608 y Fd(Class)31
-b(Applicabilit)m(y:)259 753 y(WcsMap)427 852 y Fj(All)d(WcsMaps)f(ha)n
-(v)n(e)g(this)h(attribute.)p 0 1060 3780 12 v 0 1191
-a Fz(PVi)p Fb(_)p Fz(m)1022 1190 y Fe(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3375 1191 y Fz(PVi)p
-Fb(_)p Fz(m)0 1387 y Fd(Description:)44 b Fj(This)32
-b(attribute)h(sp)r(eci\014es)f(the)g(pro)5 b(jection)32
-b(parameter)e(v)-5 b(alues)32 b(to)g(b)r(e)h(used)f(b)n(y)g(a)f(WcsMap)
-h(when)227 1486 y(implemen)n(ting)26 b(a)e(FITS-W)n(CS)i(sky)e(pro)5
-b(jection.)35 b(Eac)n(h)24 b(PV)h(attribute)g(name)g(should)g(include)h
-(t)n(w)n(o)e(in)n(tegers,)g(i)227 1586 y(and)k(m,)g(separated)e(b)n(y)i
-(an)f(underscore.)35 b(The)28 b(axis)f(index)h(is)f(sp)r(eci\014ed)h(b)
-n(y)g(i,)g(and)f(should)h(b)r(e)g(in)g(the)g(range)e(1)227
-1686 y(to)i(99.)36 b(The)27 b(parameter)f(n)n(um)n(b)r(er)h(is)g(sp)r
-(eci\014ed)h(b)n(y)f(m,)h(and)f(should)h(b)r(e)f(in)h(the)g(range)e(0)h
-(to)g(99.)36 b(F)-7 b(or)27 b(example,)227 1785 y Ft(")p
-Fj(PV2)p Ft(_)p Fj(1=45.0)p Ft(")d Fj(w)n(ould)j(sp)r(ecify)h(a)f(v)-5
-b(alue)27 b(for)g(pro)5 b(jection)27 b(parameter)f(1)h(of)h(axis)f(2)g
-(in)h(a)f(WcsMap.)227 1914 y(These)20 b(pro)5 b(jection)19
-b(parameters)f(corresp)r(ond)h(exactly)g(to)h(the)h(v)-5
-b(alues)19 b(stored)g(using)h(the)h(FITS-W)n(CS)f(k)n(eyw)n(ords)227
-2014 y Ft(")p Fj(PV1)p Ft(_)p Fj(1)p Ft(")p Fj(,)k Ft(")p
-Fj(PV1)p Ft(_)p Fj(2)p Ft(")p Fj(,)g(etc.)37 b(This)26
-b(means)f(that)h(pro)5 b(jection)25 b(parameters)g(whic)n(h)g(corresp)r
-(ond)g(to)h(angles)e(m)n(ust)227 2113 y(b)r(e)31 b(giv)n(en)e(in)i
-(degrees)d(\(despite)j(the)g(fact)f(that)g(the)h(angular)e(co)r
-(ordinates)f(and)i(other)g(attributes)g(used)g(b)n(y)g(a)227
-2213 y(WcsMap)e(are)e(in)i(radians\).)227 2341 y(The)36
-b(set)g(of)g(pro)5 b(jection)34 b(parameters)g(used)i(b)n(y)g(a)f
-(WcsMap)g(dep)r(ends)i(on)e(the)h(t)n(yp)r(e)g(of)g(pro)5
-b(jection,)37 b(whic)n(h)227 2441 y(is)c(determined)g(b)n(y)g(its)g
-(WcsT)n(yp)r(e)g(parameter.)51 b(Most)33 b(pro)5 b(jections)31
-b(either)i(do)g(not)g(require)e(pro)5 b(jection)32 b(pa-)227
-2541 y(rameters,)37 b(or)d(use)i(parameters)e(1)h(and)h(2)f(asso)r
-(ciated)f(with)i(the)g(latitude)g(axis.)61 b(Y)-7 b(ou)35
-b(should)h(consult)f(the)227 2640 y(FITS-W)n(CS)28 b(pap)r(er)f(for)g
-(details.)227 2769 y(Some)g(pro)5 b(jection)26 b(parameters)f(ha)n(v)n
-(e)h(default)h(v)-5 b(alues)26 b(\(as)h(de\014ned)g(in)g(the)g(FITS-W)n
-(CS)g(pap)r(er\))g(whic)n(h)g(apply)227 2868 y(if)34
-b(no)g(explicit)f(v)-5 b(alue)34 b(is)f(giv)n(en.)54
-b(Y)-7 b(ou)34 b(ma)n(y)f(omit)g(setting)h(a)f(v)-5 b(alue)33
-b(for)g(these)h Ft(")p Fj(optional)p Ft(")e Fj(parameters)g(and)227
-2968 y(the)27 b(default)g(will)g(apply)-7 b(.)37 b(Some)26
-b(pro)5 b(jection)26 b(parameters,)f(ho)n(w)n(ev)n(er,)g(ha)n(v)n(e)g
-(no)i(default)g(and)g(a)f(v)-5 b(alue)26 b(m)n(ust)h(b)r(e)227
-3068 y(explicitly)32 b(supplied.)48 b(This)31 b(is)g(most)g(con)n(v)n
-(enien)n(tly)f(done)h(using)g(the)g Ft(")p Fj(options)p
-Ft(")f Fj(argumen)n(t)g(of)h(astWcsMap)227 3167 y(\(q.v.\))40
-b(when)29 b(a)f(WcsMap)g(is)g(\014rst)h(created.)38 b(An)29
-b(error)e(will)h(result)h(when)f(a)g(WcsMap)h(is)f(used)g(to)h
-(transform)227 3267 y(co)r(ordinates)c(if)h(an)n(y)f(of)h(its)g
-(required)f(pro)5 b(jection)25 b(parameters)g(has)g(not)h(b)r(een)g
-(set)g(and)g(lac)n(ks)f(a)g(default)i(v)-5 b(alue.)227
-3395 y(A)36 b Ft(")p Fj(get)p Ft(")e Fj(op)r(eration)h(for)g(a)g
-(parameter)f(whic)n(h)h(has)g(not)g(b)r(een)h(assigned)e(a)h(v)-5
-b(alue)36 b(will)f(return)g(the)h(default)227 3495 y(v)-5
-b(alue)32 b(de\014ned)g(in)g(the)h(FITS-W)n(CS)f(pap)r(er,)g(or)f(AST)p
-Ft(__)p Fj(BAD)h(if)g(the)h(pap)r(er)e(indicates)h(that)g(the)g
-(parameter)227 3595 y(has)f(no)f(default.)48 b(A)31 b(default)g(v)-5
-b(alue)31 b(of)g(zero)f(is)h(returned)f(for)h(parameters)e(whic)n(h)i
-(are)f(not)h(accessed)f(b)n(y)g(the)227 3694 y(pro)5
-b(jection.)227 3823 y(Note,)31 b(the)f(FITS-W)n(CS)g(pap)r(er)f(reserv)
-n(es)f(parameters)g(1)h(and)h(2)f(on)h(the)g(longitude)g(axis)f(to)g
-(hold)h(the)g(nativ)n(e)227 3922 y(longitude)j(and)h(latitude)g(of)f
-(the)h(\014ducial)f(p)r(oin)n(t)h(of)f(the)h(pro)5 b(jection,)34
-b(in)g(degrees.)53 b(The)33 b(default)h(v)-5 b(alues)33
-b(for)227 4022 y(these)e(parameters)f(are)g(determined)h(b)n(y)g(the)h
-(pro)5 b(jection)30 b(t)n(yp)r(e.)47 b(The)32 b(AST-sp)r(eci\014c)f
-(TPN)g(pro)5 b(jection)30 b(do)r(es)227 4122 y(not)25
-b(use)g(this)g(con)n(v)n(en)n(tion)e(-)h(all)h(pro)5
-b(jection)24 b(parameters)f(for)h(b)r(oth)h(axes)f(are)g(used)g(to)h
-(represen)n(t)e(p)r(olynomical)227 4221 y(correction)29
-b(terms,)h(and)g(the)g(nativ)n(e)g(longitude)f(and)h(latitude)h(at)e
-(the)i(\014ducial)f(p)r(oin)n(t)g(ma)n(y)f(not)h(b)r(e)h(c)n(hanged)227
-4321 y(from)d(the)g(default)g(v)-5 b(alues)27 b(of)g(zero)g(and)g(90)g
-(degrees.)0 4478 y Fd(T)m(yp)s(e:)227 4578 y Fj(Floating)g(p)r(oin)n
-(t.)0 4735 y Fd(Class)k(Applicabilit)m(y:)259 4880 y(WcsMap)427
-4980 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-5149 y Fd(Notes:)340 5440 y Fi(\017)45 b Fj(If)33 b(the)g(pro)5
-b(jection)31 b(parameter)g(v)-5 b(alues)31 b(giv)n(en)h(for)g(a)f
-(WcsMap)h(do)g(not)h(satisfy)e(all)h(the)h(required)e(con-)427
-5540 y(strain)n(ts)d(\(as)g(de\014ned)h(in)f(the)h(FITS-W)n(CS)f(pap)r
-(er\),)h(then)g(an)f(error)e(will)j(result)f(when)h(the)g(WcsMap)f(is)
-427 5639 y(used)g(to)f(transform)g(co)r(ordinates.)p
-eop end
-%%Page: 448 458
-TeXDict begin 448 457 bop 0 52 a FF(448)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(PcdCen\(axis\))1342 483 y Fe(Cen)m(tre)37
-b(co)s(ordinates)g(of)1170 583 y(pincushion/barrel)f(distortion)2989
-490 y Fz(PcdCen\(axis\))0 828 y Fd(Description:)44 b
-Fj(This)39 b(attribute)g(sp)r(eci\014es)f(the)h(cen)n(tre)f(of)h(the)g
-(pincushion/barrel)e(distortion)h(implemen)n(ted)h(b)n(y)227
-928 y(a)i(PcdMap.)76 b(It)41 b(tak)n(es)f(a)h(separate)f(v)-5
-b(alue)40 b(for)h(eac)n(h)f(axis)g(of)h(the)g(PcdMap)g(so)f(that,)45
-b(for)40 b(instance,)k(the)227 1028 y(settings)35 b Ft(")p
-Fj(PcdCen\(1\)=345.0,PcdCen\(2\)=-104.4)o Ft(")29 b Fj(sp)r(ecify)34
-b(that)h(the)g(pincushion)g(distortion)f(is)g(cen)n(tred)227
-1127 y(at)26 b(p)r(ositions)f(of)h(345.0)d(and)j(-104.4)d(on)j(axes)e
-(1)i(and)f(2)g(resp)r(ectiv)n(ely)-7 b(.)36 b(This)25
-b(attribute)h(is)g(set)f(when)h(a)f(PcdMap)227 1227 y(is)i(created,)f
-(but)h(ma)n(y)f(later)f(b)r(e)i(mo)r(di\014ed.)37 b(If)27
-b(the)g(attribute)g(is)f(cleared,)g(the)h(default)g(v)-5
-b(alue)26 b(for)g(b)r(oth)h(axes)f(is)227 1326 y(zero.)0
-1521 y Fd(T)m(yp)s(e:)227 1621 y Fj(Floating)h(p)r(oin)n(t.)0
-1816 y Fd(Class)k(Applicabilit)m(y:)259 1998 y(PcdMap)427
-2098 y Fj(All)d(PcdMaps)f(ha)n(v)n(e)f(this)i(attribute.)0
-2305 y Fd(Notes:)340 2634 y Fi(\017)45 b Fj(If)39 b(no)f(axis)g(is)g
-(sp)r(eci\014ed,)j(\(e.g.)70 b Ft(")p Fj(PcdCen)p Ft(")37
-b Fj(instead)h(of)g Ft(")p Fj(PcdCen\(2\))p Ft(")p Fj(\),)j(then)d(a)g
-Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427
-2733 y Fj(op)r(eration)29 b(will)h(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(b)r(oth)g(axes,)g(while)g(a)f Ft(")p
-Fj(get)p Ft(")g Fj(or)f Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)e(will)
-427 2833 y(use)g(just)g(the)g(PcdCen\(1\))f(v)-5 b(alue.)p
-0 3078 V 0 3208 a Fz(P)l(erm)l(ute)1375 3209 y Fe(P)m(erm)m(ute)37
-b(axis)h(order?)3278 3208 y Fz(P)l(erm)l(ute)0 3425 y
-Fd(Description:)44 b Fj(This)26 b(attribute)f(is)g(a)g(b)r(o)r(olean)f
-(v)-5 b(alue)25 b(whic)n(h)h(con)n(trols)d(ho)n(w)i(a)g(F)-7
-b(rame)24 b(b)r(eha)n(v)n(es)g(when)i(it)f(is)g(used)h(\(b)n(y)227
-3525 y(astFindF)-7 b(rame\))27 b(as)f(a)g(template)h(to)f(matc)n(h)g
-(another)g(\(target\))g(F)-7 b(rame.)36 b(It)27 b(sp)r(eci\014es)g
-(whether)f(the)h(axis)f(order)227 3624 y(of)i(the)g(target)e(F)-7
-b(rame)28 b(ma)n(y)e(b)r(e)i(p)r(erm)n(uted)g(in)g(order)e(to)i(obtain)
-f(a)g(matc)n(h.)227 3772 y(If)f(the)f(template's)g(P)n(erm)n(ute)f(v)-5
-b(alue)24 b(is)h(zero,)g(it)g(will)g(matc)n(h)g(a)f(target)g(only)h(if)
-g(it)g(can)g(do)f(so)h(without)g(c)n(hanging)227 3871
-y(the)j(order)e(of)i(its)g(axes.)36 b(Otherwise,)27 b(it)h(will)f
-(attempt)i(to)e(p)r(erm)n(ute)h(the)g(target's)e(axes)h(as)g(necessary)
--7 b(.)227 4019 y(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1,)f(so)g
-(that)h(axis)f(p)r(erm)n(utation)g(will)h(b)r(e)g(attempted.)0
-4214 y Fd(T)m(yp)s(e:)227 4313 y Fj(String.)0 4509 y
-Fd(Class)j(Applicabilit)m(y:)259 4691 y(F)-8 b(rame)427
-4790 y Fj(All)34 b(F)-7 b(rames)33 b(ha)n(v)n(e)g(this)h(attribute.)55
-b(Ho)n(w)n(ev)n(er,)34 b(the)g(F)-7 b(rame)33 b(class)g(e\013ectiv)n
-(ely)g(ignores)f(this)i(attribute)427 4890 y(and)k(b)r(eha)n(v)n(es)f
-(as)h(if)h(it)f(has)g(the)g(v)-5 b(alue)38 b(1.)69 b(This)38
-b(is)g(b)r(ecause)g(the)g(axes)f(of)h(a)g(basic)g(F)-7
-b(rame)37 b(are)h(not)427 4989 y(distinguishable)28 b(and)f(will)h(alw)
-n(a)n(ys)d(matc)n(h)j(an)n(y)f(other)g(F)-7 b(rame)27
-b(whatev)n(er)f(their)i(order.)259 5145 y Fd(SkyF)-8
-b(rame)427 5245 y Fj(Unlik)n(e)28 b(a)f(basic)g(F)-7
-b(rame,)27 b(the)h(SkyF)-7 b(rame)27 b(class)g(mak)n(es)f(use)i(of)f
-(this)h(attribute.)259 5400 y Fd(F)-8 b(rameSet)427 5500
-y Fj(The)31 b(P)n(erm)n(ute)f(attribute)h(of)g(a)f(F)-7
-b(rameSet)31 b(is)f(the)h(same)g(as)f(that)h(of)g(its)g(curren)n(t)f(F)
--7 b(rame)30 b(\(as)g(sp)r(eci\014ed)427 5600 y(b)n(y)e(the)g(Curren)n
-(t)e(attribute\).)p eop end
-%%Page: 449 459
-TeXDict begin 449 458 bop 3643 52 a FF(449)p 0 351 3780
-12 v 0 483 a Fz(P)l(olarLong)172 b Fe(The)38 b(longitude)f(v)-7
-b(alue)39 b(to)f(assign)g(to)g(either)f(p)s(ole)170 b
-Fz(P)l(olarLong)0 679 y Fd(Description:)44 b Fj(This)38
-b(attribute)f(holds)g(the)g(longitude)g(v)-5 b(alue,)40
-b(in)d(radians,)h(to)f(b)r(e)h(returned)f(when)g(a)g(Cartesian)227
-778 y(p)r(osition)27 b(corresp)r(onding)e(to)i(either)f(the)i(north)e
-(or)g(south)h(p)r(ole)g(is)g(transformed)e(in)n(to)i(spherical)f(co)r
-(ordinates.)227 878 y(The)i(default)g(v)-5 b(alue)27
-b(is)h(zero.)0 1035 y Fd(T)m(yp)s(e:)227 1134 y Fj(Double)g(precision.)
-0 1291 y Fd(Class)j(Applicabilit)m(y:)259 1434 y(SphMap)427
-1534 y Fj(All)d(SphMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 1740 V 0 1871 a Fz(Preserv)l(eAxes)1518 1872 y Fe(Preserv)m(e)37
-b(axes?)2986 1871 y Fz(Preserv)l(eAxes)0 2049 y Fd(Description:)44
-b Fj(This)38 b(attribute)g(con)n(trols)e(ho)n(w)h(a)g(F)-7
-b(rame)37 b(b)r(eha)n(v)n(es)g(when)h(it)g(is)f(used)h(\(b)n(y)g
-(astFindF)-7 b(rame\))37 b(as)g(a)227 2149 y(template)30
-b(to)f(matc)n(h)g(another)f(\(target\))h(F)-7 b(rame.)42
-b(It)29 b(determines)h(whic)n(h)f(axes)f(app)r(ear)g(\(and)i(in)f(what)
-h(order\))227 2248 y(in)e(the)g Ft(")p Fj(result)p Ft(")f
-Fj(F)-7 b(rame)27 b(pro)r(duced.)227 2376 y(If)k(Preserv)n(eAxes)d(is)i
-(zero)f(in)i(the)f(template)h(F)-7 b(rame,)30 b(then)h(the)g(result)f
-(F)-7 b(rame)30 b(will)g(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)227
-2476 y(\(and)25 b(order\))f(of)h(axes)f(as)g(the)i(template.)36
-b(If)25 b(it)h(is)f(non-zero,)f(ho)n(w)n(ev)n(er,)f(the)i(axes)f(of)h
-(the)h(target)e(F)-7 b(rame)24 b(will)h(b)r(e)227 2576
-y(preserv)n(ed,)h(so)h(that)h(the)g(result)f(F)-7 b(rame)27
-b(will)h(ha)n(v)n(e)f(the)h(same)f(n)n(um)n(b)r(er)g(\(and)h(order\))e
-(of)i(axes)e(as)h(the)h(target.)227 2704 y(The)e(default)f(v)-5
-b(alue)26 b(is)f(zero,)g(so)f(that)i(target)e(axes)h(are)f(not)i
-(preserv)n(ed)d(and)i(the)h(result)f(F)-7 b(rame)25 b(resem)n(bles)f
-(the)227 2803 y(template.)0 2960 y Fd(T)m(yp)s(e:)227
-3059 y Fj(In)n(teger)j(\(b)r(o)r(olean\).)0 3216 y Fd(Class)k
-(Applicabilit)m(y:)259 3359 y(F)-8 b(rame)427 3459 y
-Fj(All)28 b(F)-7 b(rames)27 b(ha)n(v)n(e)g(this)g(attribute.)259
-3595 y Fd(F)-8 b(rameSet)427 3695 y Fj(The)20 b(Preserv)n(eAxes)d
-(attribute)j(of)g(a)f(F)-7 b(rameSet)20 b(is)g(the)g(same)f(as)g(that)h
-(of)g(its)g(curren)n(t)f(F)-7 b(rame)19 b(\(as)g(sp)r(eci\014ed)427
-3795 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)p 0
-4001 V 0 4139 a Fz(Pro)7 b(jP\(m\))1022 4131 y Fe(FITS-W)m(CS)39
-b(pro)7 b(jection)36 b(parameters)3208 4139 y Fz(Pro)7
-b(jP\(m\))0 4342 y Fd(Description:)44 b Fj(This)33 b(attribute)g(pro)n
-(vides)f(aliases)f(for)h(the)i(PV)e(attributes,)j(whic)n(h)d(sp)r
-(eci\014es)h(the)g(pro)5 b(jection)32 b(pa-)227 4441
-y(rameter)23 b(v)-5 b(alues)23 b(to)h(b)r(e)g(used)g(b)n(y)g(a)f
-(WcsMap)h(when)g(implemen)n(ting)g(a)f(FITS-W)n(CS)h(sky)f(pro)5
-b(jection.)35 b(Pro)5 b(jP)22 b(is)227 4541 y(retained)j(for)f
-(compatibilit)n(y)g(with)i(previous)d(v)n(ersions)g(of)i(FITS-W)n(CS)g
-(and)g(AST.)g(New)g(applications)f(should)227 4641 y(use)k(the)g(PV)f
-(attibute)h(instead.)227 4769 y(A)n(ttributes)i(Pro)5
-b(jP\(0\))27 b(to)i(Pro)5 b(jP\(9\))28 b(corresp)r(ond)f(to)i
-(attributes)h(PV)p Fl(<)p Fj(axlat)p Fl(>)p Ft(_)p Fj(0)c(to)j(PV)p
-Fl(<)p Fj(axlat)p Fl(>)p Ft(_)p Fj(9,)e(where)227 4868
-y Fl(<)p Fj(axlat)p Fl(>)e Fj(is)h(replaced)g(b)n(y)g(the)h(index)f(of)
-g(the)h(latitude)g(axis)e(\(giv)n(en)h(b)n(y)g(attribute)h
-(WcsAxis\(2\)\).)37 b(See)26 b(PV)g(for)227 4968 y(further)i(details.)0
-5124 y Fd(T)m(yp)s(e:)227 5224 y Fj(Floating)f(p)r(oin)n(t.)0
-5380 y Fd(Class)k(Applicabilit)m(y:)259 5524 y(WcsMap)427
-5624 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)p
-eop end
-%%Page: 450 460
-TeXDict begin 450 459 bop 0 52 a FF(450)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 483 a Fz(Pro)7 b(jection)604 b Fe(Sky)39
-b(pro)7 b(jection)36 b(description)600 b Fz(Pro)7 b(jection)0
-728 y Fd(Description:)44 b Fj(This)32 b(attribute)f(pro)n(vides)f(a)h
-(place)f(to)i(store)e(a)h(description)f(of)h(the)h(t)n(yp)r(e)g(of)f
-(sky)f(pro)5 b(jection)31 b(used)227 827 y(when)c(a)g(SkyF)-7
-b(rame)26 b(is)h(attac)n(hed)f(to)h(a)g(2-dimensional)f(ob)5
-b(ject,)26 b(suc)n(h)h(as)f(an)h(image)f(or)g(plotting)h(surface.)36
-b(F)-7 b(or)227 927 y(example,)28 b(t)n(ypical)f(v)-5
-b(alues)27 b(migh)n(t)g(b)r(e)h Ft(")p Fj(orthographic)p
-Ft(")p Fj(,)d Ft(")p Fj(Hammer-Aito\013)p Ft(")i Fj(or)f
-Ft(")p Fj(cylindrical)h(equal)g(area)p Ft(")p Fj(.)227
-1079 y(The)41 b(Pro)5 b(jection)40 b(v)-5 b(alue)40 b(is)h(purely)g
-(descriptiv)n(e)f(and)h(do)r(es)f(not)h(a\013ect)g(the)h(celestial)e
-(co)r(ordinate)g(system)227 1179 y(represen)n(ted)23
-b(b)n(y)g(the)h(SkyF)-7 b(rame)23 b(in)h(an)n(y)f(w)n(a)n(y)-7
-b(.)34 b(If)24 b(it)g(is)g(set)f(to)h(a)f(non-blank)g(string,)h(the)g
-(description)f(pro)n(vided)227 1279 y(ma)n(y)28 b(b)r(e)h(used)g(when)g
-(forming)f(the)h(default)g(v)-5 b(alue)28 b(for)g(the)i(SkyF)-7
-b(rame's)27 b(Title)i(attribute)g(\(so)f(that)h(t)n(ypically)227
-1378 y(it)f(will)g(app)r(ear)f(in)h(graphical)e(output,)i(for)f
-(instance\).)37 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f(an)h(empt)n
-(y)f(string.)0 1584 y Fd(T)m(yp)s(e:)227 1683 y Fj(String.)0
-1889 y Fd(Class)k(Applicabilit)m(y:)259 2081 y(SkyF)-8
-b(rame)427 2181 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)p 0 2436 V 0 2567 a Fz(RefCoun)l(t)514 b
-Fe(Coun)m(t)38 b(of)g(activ)m(e)f(Ob)7 b(ject)38 b(p)s(oin)m(ters)511
-b Fz(RefCoun)l(t)0 2812 y Fd(Description:)44 b Fj(This)20
-b(attribute)g(giv)n(es)e(the)i(n)n(um)n(b)r(er)g(of)f(activ)n(e)g(p)r
-(oin)n(ters)g(asso)r(ciated)f(with)i(an)g(Ob)5 b(ject.)34
-b(It)20 b(is)f(mo)r(di\014ed)227 2912 y(whenev)n(er)33
-b(p)r(oin)n(ters)g(are)f(created)h(or)g(ann)n(ulled)g(\(b)n(y)h
-(astClone,)g(astAnn)n(ul)f(or)g(astEnd)g(for)g(example\).)55
-b(The)227 3011 y(coun)n(t)28 b(includes)f(the)h(initial)g(p)r(oin)n
-(ter)f(issued)h(when)f(the)h(Ob)5 b(ject)28 b(w)n(as)e(created.)227
-3164 y(If)h(the)g(reference)f(coun)n(t)h(for)f(an)g(Ob)5
-b(ject)27 b(falls)f(to)h(zero)e(as)h(the)h(result)g(of)f(ann)n(ulling)h
-(a)f(p)r(oin)n(ter)g(to)h(it,)g(then)g(the)227 3263 y(Ob)5
-b(ject)28 b(will)g(b)r(e)g(deleted.)0 3469 y Fd(T)m(yp)s(e:)227
-3568 y Fj(In)n(teger,)f(read-only)-7 b(.)0 3774 y Fd(Class)31
-b(Applicabilit)m(y:)259 3966 y(Ob)5 b(ject)427 4066 y
-Fj(All)28 b(Ob)5 b(jects)28 b(ha)n(v)n(e)e(this)i(attribute.)p
-0 4321 V 0 4453 a Fz(RefDec)498 b Fe(The)39 b(declination)d(of)i(the)h
-(reference)f(p)s(oin)m(t)496 b Fz(RefDec)0 4697 y Fd(Description:)44
-b Fj(This)30 b(attribute)f(sp)r(eci\014es)g(the)h(FK5)f(J2000.0)e
-(declination)i(of)g(a)g(reference)g(p)r(oin)n(t)g(on)g(the)h(sky)-7
-b(.)42 b(See)227 4797 y(the)28 b(description)f(of)h(attribute)g(RefRA)g
-(for)f(details.)37 b(The)27 b(default)h(RefDec)h(is)e
-Ft(")p Fj(0:0:0)p Ft(")p Fj(.)0 5002 y Fd(T)m(yp)s(e:)227
-5102 y Fj(String.)0 5307 y Fd(Class)k(Applicabilit)m(y:)259
-5499 y(Sp)s(ecF)-8 b(rame)427 5599 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 451 461
-TeXDict begin 451 460 bop 3643 52 a FF(451)p 0 351 3780
-12 v 0 483 a Fz(RefRA)420 b Fe(The)39 b(righ)m(t)e(ascension)h(of)g
-(the)h(reference)f(p)s(oin)m(t)418 b Fz(RefRA)0 672 y
-Fd(Description:)44 b Fj(This)26 b(attribute,)g(together)e(with)i(the)f
-(RefDec)h(attribute,)g(sp)r(eci\014es)f(the)h(FK5)e(J2000.0)f(co)r
-(ordinates)227 772 y(of)k(a)g(reference)f(p)r(oin)n(t)h(on)g(the)g(sky)
--7 b(.)36 b(F)-7 b(or)27 b(1-dimensional)f(sp)r(ectra,)g(this)h(should)
-g(normally)f(b)r(e)h(the)h(p)r(osition)f(of)227 872 y(the)33
-b(source.)50 b(F)-7 b(or)32 b(sp)r(ectral)g(data)g(with)h(spatial)f(co)
-n(v)n(erage)d(\(sp)r(ectral)j(cub)r(es,)i(etc\),)g(this)f(should)f(b)r
-(e)h(close)f(to)227 971 y(cen)n(tre)g(of)g(the)h(spatial)e(co)n(v)n
-(erage.)48 b(It)33 b(is)f(used)g(to)g(de\014ne)h(the)g(correction)d
-(for)i(Doppler)g(shift)h(to)f(b)r(e)h(applied)227 1071
-y(when)24 b(using)f(the)g(astFindF)-7 b(rame)23 b(or)f(astCon)n(v)n
-(ert)g(metho)r(d)h(to)h(con)n(v)n(ert)d(b)r(et)n(w)n(een)i(di\013eren)n
-(t)h(standards)e(of)h(rest.)227 1196 y(The)29 b(Sp)r(ecF)-7
-b(rame)28 b(class)f(assumes)g(this)i(v)n(elo)r(cit)n(y)e(correction)f
-(is)j(spatially)e(in)n(v)-5 b(arian)n(t.)38 b(If)28 b(a)g(single)g(Sp)r
-(ecF)-7 b(rame)227 1295 y(is)39 b(used)f(\(for)h(instance,)i(as)d(a)g
-(comp)r(onen)n(t)g(of)h(a)f(CmpF)-7 b(rame\))39 b(to)f(describ)r(e)h
-(sp)r(ectral)f(v)-5 b(alues)38 b(at)g(di\013eren)n(t)227
-1395 y(p)r(oin)n(ts)30 b(on)g(the)g(sky)-7 b(,)30 b(then)g(it)h(is)e
-(assumes)g(that)h(the)h(doppler)e(shift)h(at)g(an)n(y)f(spatial)g(p)r
-(osition)h(is)g(the)g(same)f(as)227 1495 y(at)35 b(the)g(reference)f(p)
-r(osition.)59 b(The)35 b(maxim)n(um)g(v)n(elo)r(cit)n(y)f(error)f(in)n
-(tro)r(duced)h(b)n(y)h(this)g(assumption)g(is)f(of)h(the)227
-1594 y(order)d(of)i(V)p Fi(\003)p Fj(SIN\(F)n(O)n(V\),)f(where)g(F)n(O)
-n(V)g(is)g(the)h(angular)e(\014eld)i(of)f(view,)i(and)e(V)h(is)f(the)h
-(relativ)n(e)e(v)n(elo)r(cit)n(y)h(of)227 1694 y(the)c(t)n(w)n(o)e
-(standards)f(of)i(rest.)38 b(As)28 b(an)g(example,)f(when)h(correcting)
-f(from)g(the)h(observ)n(ers)e(rest)h(frame)h(\(i.e.)38
-b(the)227 1793 y(top)r(o)r(cen)n(tric)23 b(rest)g(frame\))h(to)f(the)h
-(kinematic)g(lo)r(cal)e(standard)h(of)h(rest)f(the)g(maxim)n(um)h(v)-5
-b(alue)23 b(of)h(V)g(is)f(ab)r(out)h(20)227 1893 y(km/s,)e(so)f(for)g
-(5)g(arc-min)n(ute)f(\014eld)i(of)f(view)g(the)h(maxim)n(um)f(v)n(elo)r
-(cit)n(y)g(error)e(in)n(tro)r(duced)i(b)n(y)g(the)h(correction)d(will)
-227 1993 y(b)r(e)28 b(ab)r(out)f(0.03)e(km/s.)36 b(As)27
-b(another)f(example,)h(the)h(maxim)n(um)e(error)g(when)h(correcting)e
-(from)i(the)g(observ)n(ers)227 2092 y(rest)g(frame)h(to)f(the)h(lo)r
-(cal)f(group)f(is)i(ab)r(out)g(5)f(km/s)g(o)n(v)n(er)e(a)j(1)f(degree)f
-(\014eld)i(of)g(view.)227 2217 y(The)g(RefRA)h(and)e(RefDec)i
-(attributes)e(are)g(stored)g(in)n(ternally)g(in)h(radians,)e(but)j(are)
-d(con)n(v)n(erted)h(to)g(and)h(from)227 2317 y(a)34 b(string)g(for)f
-(access.)56 b(The)34 b(format)f Ft(")p Fj(hh:mm:ss.ss)p
-Ft(")h Fj(is)g(used)g(for)f(RefRA,)i(and)f Ft(")p Fj(dd:mm:ss.s)p
-Ft(")g Fj(is)g(used)g(for)227 2416 y(RefDec.)46 b(The)30
-b(metho)r(ds)h(astSetRefP)n(os)e(and)h(astGetRefP)n(os)g(ma)n(y)f(b)r
-(e)i(used)f(to)g(access)g(the)g(v)-5 b(alues)30 b(of)h(these)227
-2516 y(attributes)d(directly)f(as)g(unformatted)h(v)-5
-b(alues)27 b(in)h(radians.)227 2641 y(The)g(default)g(for)f(RefRA)h(is)
-g Ft(")p Fj(0:0:0)p Ft(")p Fj(.)0 2791 y Fd(T)m(yp)s(e:)227
-2891 y Fj(String.)0 3041 y Fd(Class)j(Applicabilit)m(y:)259
-3178 y(Sp)s(ecF)-8 b(rame)427 3277 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 3477
-V 0 3609 a Fz(RegionClass)282 b Fe(The)39 b(AST)f(class)h(name)f(of)g
-(the)h(Region)1197 3723 y(encapsulated)e(within)h(an)g(Stc)3065
-3609 y Fz(RegionClass)0 3913 y Fd(Description:)44 b Fj(This)23
-b(is)f(a)g(read-only)e(attribute)j(giving)e(the)i(AST)f(class)g(name)g
-(of)g(the)h(Region)e(encapsulated)h(within)227 4012 y(an)28
-b(Stc)g(\(that)g(is,)f(the)h(class)f(of)g(the)h(Region)f(whic)n(h)h(w)n
-(as)e(supplied)i(when)g(the)g(Stc)g(w)n(as)f(created\).)0
-4162 y Fd(T)m(yp)s(e:)227 4262 y Fj(String,)h(read-only)-7
-b(.)0 4412 y Fd(Class)31 b(Applicabilit)m(y:)259 4549
-y(Stc)427 4649 y Fj(All)d(Stc)g(ob)5 b(jects)27 b(this)h(attribute.)p
-0 4849 V 0 4979 a Fz(Rep)t(ort)1046 4980 y Fe(Rep)s(ort)38
-b(transformed)e(co)s(ordinates?)3365 4979 y Fz(Rep)t(ort)0
-5170 y Fd(Description:)44 b Fj(This)36 b(attribute)g(con)n(trols)e
-(whether)i(co)r(ordinate)e(v)-5 b(alues)36 b(are)e(rep)r(orted)h
-(whenev)n(er)g(a)g(Mapping)h(is)227 5269 y(used)c(to)f(transform)g(a)g
-(set)g(of)h(p)r(oin)n(ts.)49 b(If)32 b(its)f(v)-5 b(alue)32
-b(is)f(zero)g(\(the)h(default\),)h(no)f(rep)r(ort)e(is)i(made.)49
-b(Ho)n(w)n(ev)n(er,)227 5369 y(if)28 b(it)f(is)f(non-zero,)g(the)h(co)r
-(ordinates)e(of)i(eac)n(h)f(p)r(oin)n(t)h(are)f(rep)r(orted)g(\(b)r
-(oth)h(b)r(efore)g(and)g(after)f(transformation\))227
-5469 y(b)n(y)i(writing)f(them)h(to)f(standard)g(output.)227
-5593 y(This)j(attribute)f(is)g(pro)n(vided)g(as)f(an)h(aid)g(to)g
-(debugging,)g(and)h(to)f(a)n(v)n(oid)f(ha)n(ving)g(to)h(rep)r(ort)f(v)
--5 b(alues)29 b(explicitly)227 5693 y(in)f(simple)g(programs.)p
-eop end
-%%Page: 452 462
-TeXDict begin 452 461 bop 0 52 a FF(452)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(In)n(teger)c(\(b)r(o)r(olean\).)0
-601 y Fd(Class)k(Applicabilit)m(y:)259 737 y(Mapping)427
-837 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h(attribute.)259
-970 y Fd(CmpMap)427 1070 y Fj(When)20 b(applied)e(to)h(a)f(comp)r(ound)
-h(Mapping)f(\(CmpMap\),)k(only)c(the)h(Rep)r(ort)g(attribute)g(of)f
-(the)h(CmpMap,)427 1169 y(and)27 b(not)f(those)h(of)f(its)h(comp)r
-(onen)n(t)f(Mappings,)h(is)f(used.)37 b(Co)r(ordinate)25
-b(information)h(is)h(nev)n(er)e(rep)r(orted)427 1269
-y(for)i(the)h(comp)r(onen)n(t)g(Mappings)f(individually)-7
-b(,)27 b(only)h(for)f(the)h(complete)f(CmpMap.)259 1402
-y Fd(F)-8 b(rame)427 1502 y Fj(When)35 b(applied)f(to)g(an)n(y)g(F)-7
-b(rame,)35 b(the)g(formatting)e(capabilities)h(of)g(the)h(F)-7
-b(rame)33 b(\(as)h(pro)n(vided)f(b)n(y)h(the)427 1601
-y(astF)-7 b(ormat)27 b(function\))h(will)g(b)r(e)g(used)g(to)f(format)g
-(the)h(rep)r(orted)f(co)r(ordinates.)259 1734 y Fd(F)-8
-b(rameSet)427 1834 y Fj(When)20 b(applied)g(to)f(an)n(y)g(F)-7
-b(rameSet,)21 b(the)f(formatting)f(capabilities)g(of)g(the)h(base)f
-(and)g(curren)n(t)g(F)-7 b(rames)18 b(will)427 1933 y(b)r(e)29
-b(used)g(\(as)f(ab)r(o)n(v)n(e\))f(to)i(individually)f(format)g(the)h
-(input)h(and)e(output)h(co)r(ordinates,)e(as)h(appropriate.)427
-2033 y(The)i(Rep)r(ort)g(attribute)g(of)g(a)g(F)-7 b(rameSet)29
-b(is)h(not)g(itself)g(a\013ected)g(b)n(y)g(selecting)g(a)f(new)h(base)f
-(or)g(curren)n(t)427 2133 y(F)-7 b(rame,)27 b(but)i(the)f(resulting)f
-(formatting)g(capabilities)g(ma)n(y)g(b)r(e.)0 2295 y
-Fd(Notes:)340 2578 y Fi(\017)45 b Fj(Unlik)n(e)37 b(most)f(other)g
-(attributes,)i(the)f(v)-5 b(alue)37 b(of)f(the)h(Rep)r(ort)f(attribute)
-h(is)f(not)g(transferred)f(when)i(a)427 2677 y(Mapping)f(is)f(copied.)
-61 b(Instead,)38 b(its)e(v)-5 b(alue)35 b(is)h(unde\014ned)g(\(and)g
-(therefore)f(defaults)h(to)f(zero\))g(in)h(an)n(y)427
-2777 y(cop)n(y)-7 b(.)38 b(Similarly)-7 b(,)28 b(it)h(b)r(ecomes)f
-(unde\014ned)g(in)h(an)n(y)e(external)h(represen)n(tation)e(of)i(a)g
-(Mapping)g(pro)r(duced)427 2877 y(b)n(y)g(the)g(astW)-7
-b(rite)27 b(function.)p 0 3076 3780 12 v 0 3208 a Fz(Rep)t(ortLev)l(el)
-1144 3215 y Fe(Determines)38 b(whic)m(h)g(read/write)1296
-3336 y(conditions)f(are)h(rep)s(orted)3057 3208 y Fz(Rep)t(ortLev)l(el)
-0 3525 y Fd(Description:)44 b Fj(This)36 b(attribute)f(determines)g
-(whic)n(h,)i(if)f(an)n(y)-7 b(,)37 b(of)e(the)h(conditions)f(that)g(o)r
-(ccur)g(whilst)g(reading)f(or)227 3625 y(writing)j(an)g(Ob)5
-b(ject)37 b(should)g(b)r(e)h(rep)r(orted.)65 b(These)36
-b(conditions)h(will)h(generate)e(either)h(a)f(fatal)h(error)f(or)g(a)
-227 3724 y(w)n(arning,)27 b(as)f(determined)i(b)n(y)g(attribute)f
-(Strict.)37 b(Rep)r(ortLev)n(el)27 b(can)g(tak)n(e)g(an)n(y)g(of)h(the)
-g(follo)n(wing)e(v)-5 b(alues:)227 3849 y(0)27 b(-)h(Do)f(not)h(rep)r
-(ort)f(an)n(y)g(conditions.)227 3974 y(1)i(-)g(Rep)r(ort)g(only)g
-(conditions)f(where)h(signi\014can)n(t)f(information)h(con)n(ten)n(t)g
-(has)f(b)r(een)i(c)n(hanged.)40 b(F)-7 b(or)29 b(instance,)227
-4073 y(an)g(unsupp)r(orted)h(time-scale)e(has)h(b)r(een)h(replaced)e(b)
-n(y)h(a)g(supp)r(orted)h(near-equiv)-5 b(alen)n(t)27
-b(time-scale.)42 b(Another)227 4173 y(example)32 b(is)g(if)h(a)f(basic)
-g(Channel)g(unexp)r(ected)h(encoun)n(ters)e(data)g(items)i(that)g(ma)n
-(y)e(ha)n(v)n(e)g(b)r(een)i(in)n(tro)r(duced)227 4272
-y(b)n(y)28 b(later)f(v)n(ersions)e(of)j(AST.)227 4397
-y(2)21 b(-)g(Rep)r(ort)h(the)g(ab)r(o)n(v)n(e,)f(and)g(in)h(addition)f
-(rep)r(ort)g(signi\014can)n(t)g(default)g(v)-5 b(alues.)35
-b(F)-7 b(or)21 b(instance,)h(if)g(no)f(time-scale)227
-4497 y(w)n(as)28 b(sp)r(eci\014ed)i(when)f(reading)f(an)h(Ob)5
-b(ject)29 b(from)g(an)g(external)f(data)h(source,)g(rep)r(ort)f(the)i
-(default)f(time-scale)227 4596 y(that)f(is)g(b)r(eing)f(used.)227
-4721 y(3)e(-)g(Rep)r(ort)h(the)f(ab)r(o)n(v)n(e,)g(and)g(in)h(addition)
-f(rep)r(ort)g(an)n(y)f(other)h(p)r(oten)n(tially)g(in)n(teresting)g
-(conditions)g(that)h(ha)n(v)n(e)227 4821 y(no)36 b(signi\014can)n(t)e
-(e\013ect)i(on)g(the)g(con)n(v)n(ersion.)58 b(F)-7 b(or)35
-b(instance,)j(rep)r(ort)c(if)j(a)e(time-scale)g(of)g
-Ft(")p Fj(TT)p Ft(")g Fj(\(terrestrial)227 4920 y(time\))28
-b(is)e(used)h(in)f(place)g(of)h Ft(")p Fj(ET)p Ft(")e
-Fj(\(ephemeris)i(time\).)37 b(This)26 b(c)n(hange)g(has)g(no)g
-(sign\014cian)n(t)g(e\013ect)h(b)r(ecause)f(ET)227 5020
-y(is)e(the)h(predecessor)d(of,)i(and)g(is)g(con)n(tin)n(uous)f(with,)i
-(TT.)f(Synon)n(yms)g(suc)n(h)f(as)h Ft(")p Fj(IA)-7 b(T)p
-Ft(")23 b Fj(and)h Ft(")p Fj(T)-7 b(AI)p Ft(")24 b Fj(are)f(another)227
-5120 y(example.)227 5244 y(The)34 b(default)h(v)-5 b(alue)34
-b(is)g(1.)56 b(Note,)35 b(there)f(are)f(man)n(y)h(other)f(conditions)h
-(that)g(can)g(o)r(ccur)f(whilst)i(reading)d(or)227 5344
-y(writing)23 b(an)f(Ob)5 b(ject)23 b(that)g(completely)g(prev)n(en)n(t)
-f(the)h(con)n(v)n(ersion)d(taking)i(place.)35 b(Suc)n(h)23
-b(conditions)f(will)i(alw)n(a)n(ys)227 5444 y(generate)j(errors,)e
-(irresp)r(ectiv)n(e)h(of)i(the)g(Rep)r(ortLev)n(el)f(and)g(Strict)h
-(attributes.)0 5593 y Fd(T)m(yp)s(e:)227 5693 y Fj(In)n(teger)f(\(b)r
-(o)r(olean\).)p eop end
-%%Page: 453 463
-TeXDict begin 453 462 bop 3643 52 a FF(453)0 351 y Fd(Class)31
-b(Applicabilit)m(y:)259 491 y(Channel)427 591 y Fj(All)d(Channels)g(ha)
-n(v)n(e)e(this)i(attribute.)259 725 y Fd(FitsChan)427
-825 y Fj(All)g(the)g(conditions)f(selected)h(b)n(y)f(the)h(FitsChan)g
-(W)-7 b(arnings)27 b(attribute)g(are)g(rep)r(orted)g(at)g(lev)n(el)g
-(1.)p 0 1027 3780 12 v 0 1158 a Fz(RestF)-11 b(req)1410
-1159 y Fe(The)38 b(rest)h(frequency)3252 1158 y Fz(RestF)-11
-b(req)0 1351 y Fd(Description:)44 b Fj(This)39 b(attribute)f(sp)r
-(eci\014es)h(the)f(frequency)g(corresp)r(onding)f(to)h(zero)f(v)n(elo)r
-(cit)n(y)-7 b(.)69 b(It)39 b(is)f(used)g(when)227 1451
-y(con)n(v)n(erting)29 b(b)r(et)n(w)n(een)g(b)r(et)n(w)n(een)h(v)n(elo)r
-(cit)n(y-based)f(co)r(ordinate)g(systems)g(and)h(and)g(other)f(co)r
-(ordinate)g(systems)227 1550 y(\(suc)n(h)f(as)f(frequency)-7
-b(,)27 b(w)n(a)n(v)n(elength,)f(energy)-7 b(,)27 b(etc\).)37
-b(The)28 b(default)g(v)-5 b(alue)27 b(is)h(1.0E5)d(GHz.)227
-1677 y(When)35 b(setting)g(a)f(new)g(v)-5 b(alue)35 b(for)e(this)i
-(attribute,)i(the)d(new)h(v)-5 b(alue)34 b(can)g(b)r(e)h(supplied)g
-(either)f(directly)g(as)g(a)227 1776 y(frequency)-7 b(,)34
-b(or)d(indirectly)i(as)f(a)g(w)n(a)n(v)n(elength)e(or)i(energy)-7
-b(,)33 b(in)g(whic)n(h)f(case)g(the)g(supplied)h(v)-5
-b(alue)33 b(is)f(con)n(v)n(erted)227 1876 y(to)i(a)f(frequency)g(b)r
-(efore)g(b)r(eing)h(stored.)54 b(The)34 b(nature)f(of)h(the)g(supplied)
-g(v)-5 b(alue)33 b(is)h(indicated)f(b)n(y)h(app)r(ending)227
-1975 y(text)e(to)f(the)h(end)f(of)g(the)h(n)n(umerical)e(v)-5
-b(alue)31 b(indicating)h(the)f(units)h(in)f(whic)n(h)h(the)f(v)-5
-b(alue)31 b(is)g(supplied.)49 b(If)31 b(the)227 2075
-y(units)h(are)e(not)h(sp)r(eci\014ed,)h(then)g(the)f(supplied)h(v)-5
-b(alue)31 b(is)f(assumed)h(to)g(b)r(e)g(a)g(frequency)g(in)g(units)g
-(of)g(GHz.)48 b(If)227 2175 y(the)35 b(supplied)f(unit)h(is)f(a)f(unit)
-i(of)f(frequency)-7 b(,)35 b(the)g(supplied)f(v)-5 b(alue)34
-b(is)g(assumed)f(to)h(b)r(e)h(a)e(frequency)h(in)g(the)227
-2274 y(giv)n(en)24 b(units.)36 b(If)24 b(the)h(supplied)f(unit)h(is)f
-(a)g(unit)h(of)f(length,)h(the)f(supplied)h(v)-5 b(alue)24
-b(is)g(assumed)g(to)g(b)r(e)g(a)g(\(v)-5 b(acuum\))227
-2374 y(w)n(a)n(v)n(elength.)35 b(If)26 b(the)h(supplied)f(unit)h(is)f
-(a)f(unit)i(of)f(energy)-7 b(,)25 b(the)h(supplied)h(v)-5
-b(alue)25 b(is)h(assumed)g(to)g(b)r(e)g(an)g(energy)-7
-b(.)227 2474 y(F)g(or)31 b(instance,)h(the)f(follo)n(wing)g(strings)f
-(all)h(result)g(in)g(a)g(rest)g(frequency)g(of)g(around)f(1.4E14)f(Hz)i
-(b)r(eing)h(used:)227 2573 y Ft(")p Fj(1.4E5)p Ft(")p
-Fj(,)23 b Ft(")p Fj(1.4E14)f(Hz)p Ft(")p Fj(,)j Ft(")p
-Fj(1.4E14)d(s)p Fi(\003\003)p Fj(-1)p Ft(")p Fj(,)h Ft(")p
-Fj(1.4E5)g(GHz)p Ft(")p Fj(,)i Ft(")p Fj(2.14E-6)d(m)p
-Ft(")p Fj(,)j Ft(")p Fj(21400)d(Angstrom)p Ft(")p Fj(,)i
-Ft(")p Fj(9.28E-20)227 2673 y(J)p Ft(")p Fj(,)j Ft(")p
-Fj(9.28E-13)d(erg)p Ft(")p Fj(,)j Ft(")p Fj(0.58)e(eV)p
-Ft(")p Fj(,)j(etc.)227 2799 y(When)e(getting)g(the)g(v)-5
-b(alue)25 b(of)g(this)h(attribute,)g(the)g(returned)f(v)-5
-b(alue)26 b(is)f(alw)n(a)n(ys)f(a)h(frequency)g(in)h(units)g(of)f(GHz.)
-0 2952 y Fd(T)m(yp)s(e:)227 3051 y Fj(Floating)i(p)r(oin)n(t.)0
-3204 y Fd(Class)k(Applicabilit)m(y:)259 3344 y(Sp)s(ecF)-8
-b(rame)427 3443 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p 0 3646 V 0 3777 a
-Fz(Ro)t(otCorner)976 3778 y Fe(Sp)s(eci\014es)39 b(whic)m(h)f(edges)h
-(of)f(the)h(3D)g(b)s(o)m(x)1368 3892 y(should)f(b)s(e)h(annotated)3078
-3777 y Fz(Ro)t(otCorner)0 4066 y Fd(Description:)44 b
-Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)h
-(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4165 y(astGrid)37 b(function\))h(b)n(y)e(determining)h(whic)n(h)g
-(edges)f(of)h(the)h(cub)r(e)f(enclosing)f(the)i(3D)f(graphics)e(space)i
-(are)227 4265 y(used)h(for)f(displa)n(ying)f(n)n(umerical)g(and)i
-(descriptiv)n(e)e(axis)h(lab)r(els.)66 b(The)37 b(attribute)h(v)-5
-b(alue)37 b(iden)n(ti\014es)h(one)f(of)227 4365 y(the)d(eigh)n(t)g
-(corners)e(of)h(the)h(cub)r(e)g(within)h(whic)n(h)e(graphics)f(are)h(b)
-r(eing)h(dra)n(wn)e(\(i.e.)56 b(the)34 b(cub)r(e)g(sp)r(eci\014ed)g(b)n
-(y)227 4464 y(the)28 b Ft(")p Fj(graph)n(b)r(o)n(x)p
-Ft(")d Fj(parameter)i(when)h(astPlot3D)f(w)n(as)f(called)i(tp)g(create)
-f(the)h(Plot3D\).)g(Axis)g(lab)r(els)f(and)h(tic)n(k)227
-4564 y(marks)f(will)h(b)r(e)g(placed)f(on)g(the)h(three)g(cub)r(e)g
-(edges)e(that)i(meet)g(at)g(the)g(giv)n(en)e(corner.)227
-4690 y(The)32 b(attribute)h(v)-5 b(alue)32 b(should)g(consist)f(of)h
-(three)g(c)n(haracter,)f(eac)n(h)h(of)g(whic)n(h)g(m)n(ust)g(b)r(e)h
-(either)f Ft(")p Fj(U)p Ft(")f Fj(or)g Ft(")p Fj(L)p
-Ft(")p Fj(.)227 4790 y(The)h(\014rst)g(c)n(haracter)e(in)j(the)f
-(string)f(sp)r(eci\014es)h(the)h(p)r(osition)f(of)g(the)g(corner)f(on)h
-(the)g(\014rst)g(graphics)f(axis.)49 b(If)227 4889 y(the)29
-b(c)n(haracter)c(is)j Ft(")p Fj(U)p Ft(")g Fj(then)g(the)h(corner)d(is)
-i(at)g(the)g(upp)r(er)g(b)r(ound)g(on)g(the)g(\014rst)g(graphics)f
-(axis.)37 b(If)28 b(it)h(is)e Ft(")p Fj(L)p Ft(")p Fj(,)227
-4989 y(then)j(the)f(corner)f(is)h(at)g(the)h(lo)n(w)n(er)d(b)r(ound)j
-(on)f(the)g(\014rst)g(axis.)41 b(Lik)n(ewise,)29 b(the)g(second)g(and)g
-(third)g(c)n(haracters)227 5089 y(in)f(the)g(string)f(sp)r(ecify)h(the)
-g(lo)r(cation)f(of)g(the)h(corner)f(on)g(the)h(second)f(and)g(third)h
-(graphics)e(axes.)227 5215 y(F)-7 b(or)25 b(instance,)h(corner)d
-Ft(")p Fj(LLL)p Ft(")i Fj(is)g(the)h(corner)e(that)h(is)g(at)h(the)f
-(lo)n(w)n(er)f(b)r(ound)i(on)f(all)g(three)g(graphics)f(axes,)h(and)227
-5314 y(corner)h Ft(")p Fj(ULU)p Ft(")i Fj(is)f(at)h(the)g(upp)r(er)f(b)
-r(ound)h(on)g(axes)e(1)i(and)f(3)g(but)h(at)g(the)g(lo)n(w)n(er)e(b)r
-(ound)i(on)f(axis)g(2.)227 5441 y(The)h(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fj(LLL)p Ft(")p Fj(.)0 5593 y
-Fd(T)m(yp)s(e:)227 5693 y Fj(String.)p eop end
-%%Page: 454 464
-TeXDict begin 454 463 bop 0 52 a FF(454)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Class)g(Applicabilit)m(y:)259 483 y(Plot3D)427 583
-y Fj(All)d(Plot3Ds)f(ha)n(v)n(e)f(this)i(attribute.)p
-0 774 3780 12 v 0 905 a Fz(Seed)651 b Fe(Random)38 b(n)m(um)m(b)s(er)g
-(seed)h(for)f(a)g(MathMap)650 b Fz(Seed)0 1085 y Fd(Description:)44
-b Fj(This)37 b(attribute,)j(whic)n(h)d(ma)n(y)f(tak)n(e)h(an)n(y)f(in)n
-(teger)g(v)-5 b(alue,)40 b(determines)d(the)g(sequence)g(of)g(random)
-227 1185 y(n)n(um)n(b)r(ers)i(pro)r(duced)g(b)n(y)h(the)f(random)g(n)n
-(um)n(b)r(er)g(functions)h(in)g(MathMap)f(expressions.)71
-b(It)40 b(is)f(set)h(to)f(an)227 1285 y(unpredictable)28
-b(default)g(v)-5 b(alue)27 b(when)h(a)f(MathMap)g(is)g(created,)g(so)g
-(that)h(b)n(y)f(default)h(eac)n(h)f(MathMap)g(uses)g(a)227
-1384 y(di\013eren)n(t)h(set)g(of)f(random)g(n)n(um)n(b)r(ers.)227
-1507 y(If)42 b(required,)i(y)n(ou)d(ma)n(y)f(set)i(this)f(Seed)h
-(attribute)f(to)h(a)f(v)-5 b(alue)41 b(of)g(y)n(our)f(c)n(ho)r(osing)g
-(in)i(order)e(to)h(pro)r(duce)227 1606 y(rep)r(eatable)33
-b(b)r(eha)n(viour)g(from)g(the)h(random)f(n)n(um)n(b)r(er)h(functions.)
-56 b(Y)-7 b(ou)34 b(ma)n(y)f(also)f(enquire)i(the)g(Seed)g(v)-5
-b(alue)227 1706 y(\(e.g.)43 b(if)30 b(an)g(initially)g(unpredictable)f
-(v)-5 b(alue)30 b(has)f(b)r(een)h(used\))g(and)f(then)h(use)g(it)g(to)f
-(repro)r(duce)g(the)h(resulting)227 1806 y(sequence)d(of)h(random)f(n)n
-(um)n(b)r(ers,)g(either)g(from)g(the)h(same)f(MathMap)h(or)f(from)g
-(another)f(one.)227 1928 y(Clearing)h(the)h(Seed)f(attribute)h(giv)n
-(es)e(it)i(a)g(new)f(unpredictable)h(default)g(v)-5 b(alue.)0
-2073 y Fd(T)m(yp)s(e:)227 2173 y Fj(In)n(teger.)0 2318
-y Fd(Class)31 b(Applicabilit)m(y:)259 2450 y(MathMap)427
-2549 y Fj(All)d(MathMaps)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 2740 V 0 2872 a Fz(SideBand)267 b Fe(Indicates)38 b(whic)m(h)g
-(sideband)g(a)g(dual)h(sideband)1378 2971 y(sp)s(ectrum)f(represen)m
-(ts)3221 2872 y Fz(SideBand)0 3152 y Fd(Description:)44
-b Fj(This)d(attribute)g(indicates)g(whether)g(the)g(DSBSp)r(ecF)-7
-b(rame)42 b(curren)n(tly)d(represen)n(ts)h(its)h(lo)n(w)n(er)e(or)227
-3251 y(upp)r(er)27 b(sideband,)g(or)f(an)h(o\013set)g(from)f(the)h(lo)r
-(cal)g(oscillator)e(frequency)-7 b(.)36 b(When)28 b(querying)d(the)j
-(curren)n(t)e(v)-5 b(alue,)227 3351 y(the)25 b(returned)f(string)g(is)h
-(alw)n(a)n(ys)e(one)h(of)g Ft(")p Fj(usb)p Ft(")g Fj(\(for)g(upp)r(er)h
-(sideband\),)h Ft(")p Fj(lsb)p Ft(")d Fj(\(for)i(lo)n(w)n(er)e
-(sideband\),)i(or)f Ft(")p Fj(lo)p Ft(")227 3450 y Fj(\(for)i(o\013set)
-g(from)f(the)i(lo)r(cal)e(oscillator)f(frequency\).)36
-b(When)27 b(setting)f(a)f(new)h(v)-5 b(alue,)26 b(an)n(y)f(of)h(the)g
-(strings)f Ft(")p Fj(lsb)p Ft(")p Fj(,)227 3550 y Ft(")p
-Fj(usb)p Ft(")p Fj(,)j Ft(")p Fj(observ)n(ed)p Ft(")p
-Fj(,)f Ft(")p Fj(image)p Ft(")g Fj(or)h Ft(")p Fj(lo)p
-Ft(")f Fj(ma)n(y)h(b)r(e)h(supplied)g(\(case)f(insensitiv)n(e\).)40
-b(The)29 b Ft(")p Fj(observ)n(ed)p Ft(")d Fj(sideband)227
-3650 y(is)32 b(whic)n(h)g(ev)n(er)f(sideband)h(\(upp)r(er)g(or)f(lo)n
-(w)n(er\))g(con)n(tains)g(the)h(cen)n(tral)f(sp)r(ectral)h(p)r(osition)
-g(giv)n(en)f(b)n(y)g(attribute)227 3749 y(DSBCen)n(tre,)37
-b(and)d(the)h Ft(")p Fj(image)p Ft(")f Fj(sideband)g(is)h(the)g(other)f
-(sideband.)58 b(It)35 b(is)g(the)g(sign)g(of)f(the)h(IF)g(attribute)227
-3849 y(whic)n(h)c(determines)g(if)h(the)g(observ)n(ed)d(sideband)i(is)h
-(the)f(upp)r(er)h(or)e(lo)n(w)n(er)g(sideband.)47 b(The)31
-b(default)h(v)-5 b(alue)31 b(for)227 3949 y(SideBand)d(is)f(the)h
-(observ)n(ed)e(sideband.)0 4094 y Fd(T)m(yp)s(e:)227
-4193 y Fj(String.)0 4338 y Fd(Class)31 b(Applicabilit)m(y:)259
-4470 y(DSBSp)s(ecF)-8 b(rame)427 4570 y Fj(All)28 b(DSBSp)r(ecF)-7
-b(rames)28 b(ha)n(v)n(e)e(this)i(attribute.)p 0 4761
-V 0 4892 a Fz(SimpFI)386 b Fe(F)-10 b(orw)m(ard-in)m(v)m(erse)36
-b(MathMap)i(pairs)g(simplify?)384 b Fz(SimpFI)0 5073
-y Fd(Description:)44 b Fj(This)29 b(attribute)g(should)f(b)r(e)h(set)f
-(to)h(a)f(non-zero)f(v)-5 b(alue)28 b(if)h(applying)f(a)h(MathMap's)f
-(forw)n(ard)f(trans-)227 5172 y(formation,)36 b(follo)n(w)n(ed)e
-(immediately)h(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)e
-(transformation)h(will)h(alw)n(a)n(ys)e(restore)g(the)227
-5272 y(original)f(set)h(of)g(co)r(ordinates.)52 b(It)34
-b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f(sequence)h
-(of)g(op)r(erations)f(b)n(y)227 5371 y(an)25 b(iden)n(tit)n(y)h
-(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n(tered)g(while)g
-(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-5471 y(using)j(astSimplify\).)227 5593 y(By)j(default,)i(the)f(SimpFI)g
-(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h(p)r(erform)f
-(this)h(simpli\014cation)f(unless)227 5693 y(y)n(ou)c(ha)n(v)n(e)g(set)
-g(SimpFI)h(to)g(indicate)g(that)f(it)h(is)g(safe)f(to)h(do)f(so.)p
-eop end
-%%Page: 455 465
-TeXDict begin 455 464 bop 3643 52 a FF(455)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 587 y Fd(Class)k
-(Applicabilit)m(y:)259 711 y(MathMap)427 810 y Fj(All)d(MathMaps)g(ha)n
-(v)n(e)e(this)i(attribute.)0 959 y Fd(Notes:)340 1229
-y Fi(\017)45 b Fj(F)-7 b(or)40 b(simpli\014cation)g(to)g(o)r(ccur,)j
-(the)e(t)n(w)n(o)f(MathMaps)g(m)n(ust)g(b)r(e)h(in)f(series)g(and)g(b)r
-(e)h(iden)n(tical)f(\(with)427 1328 y(textually)28 b(iden)n(tical)f
-(transformation)f(functions\).)38 b(F)-7 b(unctional)27
-b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n(t.)340
-1448 y Fi(\017)45 b Fj(The)27 b(consen)n(t)f(of)g(b)r(oth)h(MathMaps)g
-(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n(e)f(place.)
-36 b(If)27 b(either)f(has)427 1548 y(a)h(SimpFI)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 1668 y Fi(\017)45 b Fj(The)35 b(SimpFI)g(attribute)g(con)n
-(trols)e(simpli\014cation)h(only)g(in)h(the)g(case)e(where)h(a)g
-(MathMap's)g(forw)n(ard)427 1767 y(transformation)d(is)h(follo)n(w)n
-(ed)g(b)n(y)g(the)g(matc)n(hing)g(in)n(v)n(erse)f(transformation.)50
-b(It)32 b(do)r(es)h(not)f(apply)g(if)h(an)427 1867 y(in)n(v)n(erse)25
-b(transformation)g(is)h(follo)n(w)n(ed)g(b)n(y)g(a)g(forw)n(ard)f
-(transformation.)34 b(This)27 b(latter)f(case)g(is)g(con)n(trolled)427
-1967 y(b)n(y)i(the)g(SimpIF)g(attribute.)340 2087 y Fi(\017)45
-b Fj(The)19 b Ft(")p Fj(forw)n(ard)p Ft(")e Fj(and)i
-Ft(")p Fj(in)n(v)n(erse)p Ft(")d Fj(transformations)h(referred)h(to)h
-(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427 2186
-y(is)28 b(created)g(\(corresp)r(onding)e(to)j(the)f Ft(")p
-Fj(fwd)p Ft(")g Fj(and)g Ft(")p Fj(in)n(v)p Ft(")g Fj(parameters)e(of)i
-(its)h(constructor)d(function\).)40 b(If)427 2286 y(the)31
-b(MathMap)g(is)g(in)n(v)n(erted)f(\(i.e.)47 b(its)31
-b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)h(then)g(the)g(role)f(of)
-h(the)g(SimpFI)427 2385 y(and)d(SimpIF)g(attributes)g(will)f(b)r(e)h
-(in)n(terc)n(hanged.)p 0 2559 3780 12 v 0 2690 a Fz(SimpIF)396
-b Fe(In)m(v)m(erse-forw)m(ard)36 b(MathMap)i(pairs)g(simplify?)395
-b Fz(SimpIF)0 2853 y Fd(Description:)44 b Fj(This)31
-b(attribute)g(should)f(b)r(e)h(set)g(to)g(a)f(non-zero)f(v)-5
-b(alue)31 b(if)g(applying)f(a)g(MathMap's)g(in)n(v)n(erse)g(trans-)227
-2953 y(formation,)j(follo)n(w)n(ed)e(immediately)i(b)n(y)f(the)g(matc)n
-(hing)g(forw)n(ard)f(transformation)g(will)h(alw)n(a)n(ys)e(restore)h
-(the)227 3053 y(original)h(set)h(of)g(co)r(ordinates.)52
-b(It)34 b(indicates)e(that)i(AST)f(ma)n(y)g(replace)f(suc)n(h)h(a)f
-(sequence)h(of)g(op)r(erations)f(b)n(y)227 3152 y(an)25
-b(iden)n(tit)n(y)h(Mapping)f(\(a)g(UnitMap\))h(if)g(it)f(is)g(encoun)n
-(tered)g(while)g(simplifying)h(a)f(comp)r(ound)g(Mapping)g(\(e.g.)227
-3252 y(using)j(astSimplify\).)227 3370 y(By)j(default,)i(the)f(SimpIF)g
-(attribute)g(is)f(zero,)h(so)e(that)i(AST)g(will)f(not)h(p)r(erform)f
-(this)h(simpli\014cation)f(unless)227 3469 y(y)n(ou)c(ha)n(v)n(e)g(set)
-g(SimpIF)h(to)g(indicate)g(that)f(it)h(is)g(safe)f(to)h(do)f(so.)0
-3606 y Fd(T)m(yp)s(e:)227 3706 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-3842 y Fd(Class)k(Applicabilit)m(y:)259 3965 y(MathMap)427
-4065 y Fj(All)d(MathMaps)g(ha)n(v)n(e)e(this)i(attribute.)0
-4214 y Fd(Notes:)340 4483 y Fi(\017)45 b Fj(F)-7 b(or)40
-b(simpli\014cation)g(to)g(o)r(ccur,)j(the)e(t)n(w)n(o)f(MathMaps)g(m)n
-(ust)g(b)r(e)h(in)f(series)g(and)g(b)r(e)h(iden)n(tical)f(\(with)427
-4583 y(textually)28 b(iden)n(tical)f(transformation)f(functions\).)38
-b(F)-7 b(unctional)27 b(equiv)-5 b(alence)27 b(is)h(not)g(su\016cien)n
-(t.)340 4703 y Fi(\017)45 b Fj(The)27 b(consen)n(t)f(of)g(b)r(oth)h
-(MathMaps)g(is)f(required)g(b)r(efore)g(simpli\014cation)g(can)h(tak)n
-(e)f(place.)36 b(If)27 b(either)f(has)427 4803 y(a)h(SimpIF)i(v)-5
-b(alue)27 b(of)h(zero,)e(then)i(simpli\014cation)g(will)g(not)f(o)r
-(ccur.)340 4922 y Fi(\017)45 b Fj(The)37 b(SimpIF)h(attribute)f(con)n
-(trols)e(simpli\014cation)i(only)g(in)g(the)g(case)f(where)h(a)f
-(MathMap's)h(in)n(v)n(erse)427 5022 y(transformation)32
-b(is)h(follo)n(w)n(ed)g(b)n(y)g(the)h(matc)n(hing)f(forw)n(ard)f
-(transformation.)52 b(It)34 b(do)r(es)f(not)h(apply)f(if)h(a)427
-5122 y(forw)n(ard)21 b(transformation)g(is)h(follo)n(w)n(ed)f(b)n(y)h
-(an)g(in)n(v)n(erse)f(transformation.)34 b(This)22 b(latter)g(case)g
-(is)g(con)n(trolled)427 5221 y(b)n(y)28 b(the)g(SimpFI)g(attribute.)340
-5341 y Fi(\017)45 b Fj(The)19 b Ft(")p Fj(forw)n(ard)p
-Ft(")e Fj(and)i Ft(")p Fj(in)n(v)n(erse)p Ft(")d Fj(transformations)h
-(referred)h(to)h(are)f(those)h(de\014ned)g(when)g(the)h(MathMap)427
-5441 y(is)28 b(created)g(\(corresp)r(onding)e(to)j(the)f
-Ft(")p Fj(fwd)p Ft(")g Fj(and)g Ft(")p Fj(in)n(v)p Ft(")g
-Fj(parameters)e(of)i(its)h(constructor)d(function\).)40
-b(If)427 5540 y(the)31 b(MathMap)g(is)g(in)n(v)n(erted)f(\(i.e.)47
-b(its)31 b(In)n(v)n(ert)f(attribute)h(is)f(non-zero\),)h(then)g(the)g
-(role)f(of)h(the)g(SimpFI)427 5640 y(and)d(SimpIF)g(attributes)g(will)f
-(b)r(e)h(in)n(terc)n(hanged.)p eop end
-%%Page: 456 466
-TeXDict begin 456 465 bop 0 52 a FF(456)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(Size\(elemen)l(t\))1043 483 y Fe(Character)36
-b(size)j(for)f(a)h(Plot)e(elemen)m(t)2985 490 y Fz(Size\(elemen)l(t\))0
-689 y Fd(Description:)44 b Fj(This)25 b(attribute)f(determines)g(the)h
-(c)n(haracter)d(size)i(used)h(when)f(dra)n(wing)f(eac)n(h)g(elemen)n(t)
-i(of)f(graphical)227 788 y(output)d(pro)r(duced)e(b)n(y)h(a)f(Plot.)34
-b(It)20 b(tak)n(es)f(a)g(separate)g(v)-5 b(alue)19 b(for)h(eac)n(h)f
-(graphical)f(elemen)n(t)i(so)f(that,)j(for)d(instance,)227
-888 y(the)35 b(setting)e Ft(")p Fj(Size\(title\)=2.0)p
-Ft(")g Fj(causes)g(the)h(Plot)g(title)g(to)g(b)r(e)g(dra)n(wn)f(using)g
-(t)n(wice)h(the)g(default)h(c)n(haracter)227 988 y(size.)227
-1114 y(The)e(range)d(of)j(c)n(haracter)d(sizes)h(a)n(v)-5
-b(ailable)31 b(and)h(the)h(app)r(earance)e(of)h(the)g(resulting)g(text)
-g(is)h(determined)f(b)n(y)227 1214 y(the)g(underlying)f(graphics)f
-(system.)48 b(The)32 b(default)g(b)r(eha)n(viour)e(is)h(for)g(all)g
-(graphical)f(elemen)n(ts)h(to)h(b)r(e)g(dra)n(wn)227
-1313 y(using)c(the)f(default)i(c)n(haracter)c(size)i(supplied)h(b)n(y)g
-(this)f(graphics)g(system.)0 1466 y Fd(T)m(yp)s(e:)227
-1566 y Fj(Floating)g(P)n(oin)n(t.)0 1719 y Fd(Class)k(Applicabilit)m
-(y:)259 1859 y(Plot)427 1959 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2124 y Fd(Notes:)340 2410 y Fi(\017)45
-b Fj(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 2545 y Fi(\017)45 b Fj(If)37 b(no)e(graphical)g(elemen)n(t)
-h(is)g(sp)r(eci\014ed,)i(\(e.g.)62 b Ft(")p Fj(Size)p
-Ft(")36 b Fj(instead)f(of)h Ft(")p Fj(Size\(title\))p
-Ft(")p Fj(\),)j(then)e(a)e Ft(")p Fj(set)p Ft(")g Fj(or)427
-2645 y Ft(")p Fj(clear)p Ft(")d Fj(op)r(eration)h(will)h(a\013ect)g
-(the)g(attribute)g(v)-5 b(alue)34 b(of)f(all)h(graphical)e(elemen)n
-(ts,)j(while)f(a)g Ft(")p Fj(get)p Ft(")e Fj(or)427 2744
-y Ft(")p Fj(test)p Ft(")27 b Fj(op)r(eration)g(will)h(use)f(just)h(the)
-g(Size\(T)-7 b(extLab\))28 b(v)-5 b(alue.)p 0 2947 V
-0 3079 a Fz(SizeGuess)448 b Fe(The)39 b(exp)s(ected)g(size)g(of)f(the)g
-(KeyMap)448 b Fz(SizeGuess)0 3271 y Fd(Description:)44
-b Fj(This)37 b(is)f(attribute)g(giv)n(es)g(an)g(estimate)g(of)g(the)h
-(n)n(um)n(b)r(er)f(of)g(en)n(tries)g(that)h(will)f(b)r(e)h(stored)f(in)
-g(the)227 3371 y(KeyMap.)59 b(It)36 b(is)f(used)g(to)g(tune)h(the)f(in)
-n(ternal)g(prop)r(erties)f(of)h(the)h(KeyMap)e(for)h(sp)r(eed)h(and)f
-(e\016ciency)-7 b(.)59 b(A)227 3471 y(larger)24 b(v)-5
-b(alue)26 b(will)h(result)e(in)i(faster)e(access)g(at)h(the)g(exp)r
-(ense)g(of)g(increased)f(memory)g(requiremen)n(ts.)36
-b(Ho)n(w)n(ev)n(er)227 3570 y(if)28 b(the)f(SizeGuess)g(v)-5
-b(alue)27 b(is)f(m)n(uc)n(h)h(larger)e(than)i(the)h(actual)e(size)h(of)
-g(the)g(KeyMap,)f(then)i(there)e(will)h(b)r(e)h(little,)227
-3670 y(if)g(an)n(y)-7 b(,)27 b(sp)r(eed)h(gained)f(b)n(y)g(making)g
-(the)h(SizeGuess)g(ev)n(en)f(larger.)35 b(The)27 b(default)h(v)-5
-b(alue)28 b(is)f(300.)227 3796 y(The)36 b(v)-5 b(alue)36
-b(of)g(this)h(attribute)f(can)g(only)f(b)r(e)i(c)n(hanged)e(if)h(the)h
-(KeyMap)e(is)h(empt)n(y)-7 b(.)62 b(Its)37 b(v)-5 b(alue)35
-b(can)h(b)r(e)h(set)227 3896 y(con)n(v)n(enien)n(tly)24
-b(when)i(creating)e(the)i(KeyMap.)35 b(An)26 b(error)d(will)j(b)r(e)g
-(rep)r(orted)e(if)i(an)f(attempt)h(is)g(made)f(to)g(set)g(or)227
-3996 y(clear)i(the)h(attribute)g(when)f(the)h(KeyMap)f(con)n(tains)g
-(an)n(y)g(en)n(tries.)0 4149 y Fd(T)m(yp)s(e:)227 4248
-y Fj(In)n(teger.)0 4401 y Fd(Class)k(Applicabilit)m(y:)259
-4541 y(KeyMap)427 4641 y Fj(All)d(KeyMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)p 0 4844 V 0 4976 a Fz(Skip)1098 b Fe(Skip)39
-b(irrelev)-7 b(an)m(t)36 b(data?)1098 b Fz(Skip)0 5168
-y Fd(Description:)44 b Fj(This)30 b(is)f(a)g(b)r(o)r(olean)f(attribute)
-i(whic)n(h)f(indicates)g(whether)g(the)h(Ob)5 b(ject)29
-b(data)g(b)r(eing)g(read)f(through)227 5268 y(a)f(Channel)h(are)f(in)n
-(ter-mixed)g(with)h(other,)f(irrelev)-5 b(an)n(t,)26
-b(external)h(data.)227 5394 y(If)33 b(Skip)f(is)f(zero)g(\(the)i
-(default\),)h(then)e(the)g(source)f(of)h(input)g(data)g(is)f(exp)r
-(ected)i(to)e(con)n(tain)h(descriptions)f(of)227 5494
-y(AST)26 b(Ob)5 b(jects)24 b(and)h(commen)n(ts)g(and)f(nothing)h(else)g
-(\(if)h(an)n(ything)e(else)h(is)f(read,)h(an)g(error)e(will)i
-(result\).)36 b(If)25 b(Skip)227 5593 y(is)34 b(non-zero,)g(then)g(an)n
-(y)f(non-Ob)5 b(ject)33 b(data)g(encoun)n(tered)g(b)r(et)n(w)n(een)h
-(Ob)5 b(jects)33 b(will)h(b)r(e)g(ignored)f(and)h(simply)227
-5693 y(skipp)r(ed)28 b(o)n(v)n(er)e(in)i(order)e(to)i(reac)n(h)e(the)i
-(next)g(Ob)5 b(ject.)p eop end
-%%Page: 457 467
-TeXDict begin 457 466 bop 3643 52 a FF(457)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(In)n(teger)27 b(\(b)r(o)r(olean\).)0 602 y Fd(Class)k
-(Applicabilit)m(y:)259 740 y(Channel)427 839 y Fj(All)d(Channels)g(ha)n
-(v)n(e)e(this)i(attribute.)259 973 y Fd(FitsChan)427
-1073 y Fj(The)k(FitsChan)g(class)f(sets)g(the)h(default)g(v)-5
-b(alue)32 b(of)f(this)h(attribute)g(to)g(1,)g(so)f(that)h(all)g
-(irrelev)-5 b(an)n(t)30 b(FITS)427 1172 y(headers)d(will)h(normally)e
-(b)r(e)i(ignored.)p 0 1373 3780 12 v 0 1511 a Fz(SkyRef\(axis\))918
-1505 y Fe(P)m(osition)36 b(de\014ning)i(the)h(o\013set)f(co)s(ordinate)
-1715 1604 y(system)3029 1511 y Fz(SkyRef\(axis\))0 1795
-y Fd(Description:)44 b Fj(This)33 b(attribute)g(allo)n(ws)f(a)g(SkyF)-7
-b(rame)32 b(to)h(represen)n(t)e(o\013sets,)j(rather)e(than)h(absolute)f
-(axis)g(v)-5 b(alues,)227 1894 y(within)29 b(the)f(co)r(ordinate)f
-(system)h(sp)r(eci\014ed)g(b)n(y)f(the)i(System)f(attribute.)38
-b(If)28 b(supplied,)g(SkyRef)h(should)e(b)r(e)i(set)227
-1994 y(to)d(hold)f(the)h(longitude)g(and)f(latitude)h(of)g(a)f(p)r(oin)
-n(t)h(within)g(the)g(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)f
-(the)h(System)227 2094 y(attribute.)36 b(The)23 b(co)r(ordinate)f
-(system)h(represen)n(ted)f(b)n(y)h(the)g(SkyF)-7 b(rame)23
-b(will)g(then)h(b)r(e)f(rotated)g(in)g(order)f(to)h(put)227
-2193 y(the)32 b(sp)r(eci\014ed)g(p)r(osition)f(at)h(either)f(the)h(p)r
-(ole)f(or)g(the)h(origin)e(of)h(the)h(new)g(co)r(ordinate)e(system)h
-(\(as)g(indicated)227 2293 y(b)n(y)g(the)g(SkyRefIs)g(attribute\).)46
-b(The)31 b(orien)n(tation)f(of)g(the)i(mo)r(di\014ed)f(co)r(ordinate)e
-(system)i(is)g(then)g(con)n(trolled)227 2393 y(using)d(the)f(SkyRefP)h
-(attribute.)227 2518 y(If)34 b(an)f(in)n(teger)g(axis)g(index)g(is)h
-(included)f(in)h(the)g(attribute)g(name)f(\(e.g.)54 b
-Ft(")p Fj(SkyRef\(1\))p Ft(")p Fj(\))34 b(then)g(the)f(attribute)227
-2617 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 2717 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 2817 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fj(1)p Ft(")f Fj(or)g Ft(")p
-Fj(2)p Ft(")f Fj(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 2916 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)227 3042 y(If)h(no)g(axis)f
-(index)h(is)f(included)i(in)f(the)g(attribute)g(name)f(\(e.g.)37
-b Ft(")p Fj(SkyRef)p Ft(")p Fj(\))28 b(then)g(the)g(attribute)g(v)-5
-b(alue)28 b(should)227 3141 y(b)r(e)f(supplied)f(as)f(a)g(c)n(haracter)
-f(string)h(con)n(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5
-b(alues)25 b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)
-227 3241 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 3341 y(attribute.)227
-3466 y(The)g(default)g(v)-5 b(alues)27 b(for)g(SkyRef)h(are)f(zero)f
-(longitude)i(and)f(zero)f(latitude.)0 3617 y Fd(T)m(yp)s(e:)227
-3716 y Fj(Floating)h(p)r(oin)n(t.)0 3867 y Fd(Class)k(Applicabilit)m
-(y:)259 4005 y(SkyF)-8 b(rame)427 4105 y Fj(All)28 b(SkyF)-7
-b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)0 4268 y
-Fd(Notes:)340 4552 y Fi(\017)45 b Fj(If)31 b(the)f(System)g(attribute)g
-(of)g(the)g(SkyF)-7 b(rame)29 b(is)h(c)n(hanged,)g(an)n(y)f(p)r
-(osition)g(giv)n(en)g(for)h(SkyRef)g(is)g(trans-)427
-4652 y(formed)e(in)n(to)f(the)h(new)g(System.)340 4786
-y Fi(\017)45 b Fj(If)24 b(a)f(v)-5 b(alue)23 b(has)f(b)r(een)i
-(assigned)e(to)h(SkyRef)g(attribute,)i(then)e(the)h(default)g(v)-5
-b(alues)22 b(for)h(certain)g(attributes)427 4885 y(are)k(c)n(hanged)g
-(as)g(follo)n(ws:)37 b(the)28 b(default)h(axis)e(Lab)r(els)h(for)f(the)
-h(SkyF)-7 b(rame)28 b(are)f(mo)r(di\014ed)h(b)n(y)g(app)r(ending)427
-4985 y Ft(")h Fj(o\013set)p Ft(")f Fj(to)g(the)i(end,)f(the)g(default)g
-(axis)f(Sym)n(b)r(ols)g(for)g(the)i(SkyF)-7 b(rame)27
-b(are)h(mo)r(di\014ed)h(b)n(y)g(prep)r(ending)427 5085
-y(the)i(c)n(haracter)d Ft(")p Fj(D)p Ft(")i Fj(to)g(the)h(start,)f(and)
-g(the)h(default)f(title)h(is)f(mo)r(di\014ed)h(b)n(y)f(replacing)f(the)
-i(pro)5 b(jection)427 5184 y(information)27 b(b)n(y)h(the)f(origin)g
-(information.)-2 5348 y Fd(Aligning)k(SkyF)-8 b(rames)32
-b(with)f(O\013set)g(Co)s(ordinate)g(Systems)n(:)227 5494
-y Fj(The)k(o\013set)g(co)r(ordinate)e(system)i(within)g(a)f(SkyF)-7
-b(rame)34 b(should)h(normally)e(b)r(e)i(considered)f(as)g(a)g(sup)r
-(er\014cial)227 5593 y Ft(")p Fj(re-badging)p Ft(")e
-Fj(of)i(the)h(axes)e(of)h(the)h(co)r(ordinate)e(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)h(System)f(attribute)h(-)e(it)i(merely)227
-5693 y(pro)n(vides)27 b(an)h(alternativ)n(e)e(n)n(umerical)i
-Ft(")p Fj(lab)r(el)p Ft(")f Fj(for)h(eac)n(h)f(p)r(osition)h(in)g(the)g
-(System)h(co)r(ordinate)e(system.)38 b(The)p eop end
-%%Page: 458 468
-TeXDict begin 458 467 bop 0 52 a FF(458)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(SkyF)-7 b(rame)28 b(retains)g(full)h(kno)n(wledge)e(of)i(the)g
-(celestial)f(co)r(ordinate)f(system)i(on)f(whic)n(h)g(the)h(o\013set)g
-(co)r(ordinate)227 451 y(system)k(is)f(based)g(\(giv)n(en)h(b)n(y)f
-(the)h(System)g(attribute\).)52 b(F)-7 b(or)32 b(instance,)i(the)f
-(SkyF)-7 b(rame)32 b(retains)g(kno)n(wledge)227 551 y(of)k(the)g(w)n(a)
-n(y)e(that)i(one)f(celestial)h(co)r(ordinate)e(system)h(ma)n(y)g
-Ft(")p Fj(drift)p Ft(")h Fj(with)g(resp)r(ect)f(to)h(another)e(o)n(v)n
-(er)g(time.)227 650 y(Normally)-7 b(,)40 b(if)e(y)n(ou)f(attempt)i(to)e
-(align)g(t)n(w)n(o)g(SkyF)-7 b(rames)37 b(\(e.g.)68 b(using)37
-b(the)h(astCon)n(v)n(ert)e(or)h(astFindF)-7 b(rame)227
-750 y(routine\),)36 b(the)e(e\013ect)h(of)f(an)n(y)f(o\013set)h(co)r
-(ordinate)f(system)h(de\014ned)g(in)g(either)g(SkyF)-7
-b(rame)33 b(will)i(b)r(e)f(remo)n(v)n(ed,)227 849 y(resulting)22
-b(in)i(alignmen)n(t)e(b)r(eing)h(p)r(erformed)f(in)h(the)g(celestial)g
-(co)r(ordinate)e(system)i(giv)n(en)f(b)n(y)g(the)h(AlignSystem)227
-949 y(attribute.)35 b(Ho)n(w)n(ev)n(er,)21 b(b)n(y)h(setting)g(the)g
-(AlignO\013set)g(attribute)g(ot)f(a)h(non-zero)e(v)-5
-b(alue,)23 b(it)f(is)g(p)r(ossible)f(to)h(c)n(hange)227
-1049 y(this)28 b(b)r(eha)n(viour)e(so)h(that)h(the)g(e\013ect)g(of)g
-(the)g(o\013set)f(co)r(ordinate)g(system)g(is)g(not)h(remo)n(v)n(ed)e
-(when)i(aligning)e(t)n(w)n(o)227 1148 y(SkyF)-7 b(rames.)p
-0 1355 3780 12 v 0 1487 a Fz(SkyRefIs)299 b Fe(Selects)38
-b(the)h(nature)f(of)g(the)h(o\013set)f(co)s(ordinate)1715
-1586 y(system)3257 1487 y Fz(SkyRefIs)0 1782 y Fd(Description:)44
-b Fj(This)34 b(attribute)f(con)n(trols)f(ho)n(w)h(the)h(v)-5
-b(alues)33 b(supplied)h(for)f(the)h(SkyRef)f(and)h(SkyRefP)f
-(attributes)227 1882 y(are)e(used.)49 b(These)32 b(three)f(attributes)h
-(together)f(allo)n(w)f(a)i(SkyF)-7 b(rame)31 b(to)g(represen)n(t)g
-(o\013sets)g(relativ)n(e)g(to)g(some)227 1982 y(sp)r(eci\014ed)39
-b(origin)e(or)g(p)r(ole)h(within)h(the)g(co)r(ordinate)e(system)g(sp)r
-(eci\014ed)i(b)n(y)f(the)g(System)h(attribute,)i(rather)227
-2081 y(than)26 b(absolute)f(axis)g(v)-5 b(alues.)36 b(SkyRefIs)25
-b(can)h(tak)n(e)f(one)g(of)g(the)h(case-insensitiv)n(e)e(v)-5
-b(alues)26 b Ft(")p Fj(Origin)p Ft(")p Fj(,)e Ft(")p
-Fj(P)n(ole)p Ft(")f Fj(or)227 2181 y Ft(")p Fj(Ignored)p
-Ft(")p Fj(.)227 2309 y(If)h(SkyRefIs)g(is)f(set)g(to)h
-Ft(")p Fj(Origin)p Ft(")p Fj(,)e(then)i(the)g(co)r(ordinate)e(system)i
-(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7 b(rame)23 b(is)g(mo)r(di\014ed)
-227 2409 y(to)28 b(put)g(the)g(origin)e(of)i(longitude)f(and)h
-(latitude)g(at)f(the)h(p)r(osition)g(sp)r(eci\014ed)f(b)n(y)h(the)g
-(SkyRef)g(attribute.)227 2537 y(If)h(SkyRefIs)g(is)f(set)h(to)f
-Ft(")p Fj(P)n(ole)p Ft(")p Fj(,)f(then)i(the)g(co)r(ordinate)e(system)h
-(represen)n(ted)g(b)n(y)g(the)h(SkyF)-7 b(rame)28 b(is)g(mo)r(di\014ed)
-227 2637 y(to)g(put)g(the)g(north)f(p)r(ole)h(at)f(the)h(p)r(osition)g
-(sp)r(eci\014ed)f(b)n(y)h(the)g(SkyRef)g(attribute.)227
-2765 y(If)d(SkyRefIs)e(is)h(set)g(to)g Ft(")p Fj(Ignored)p
-Ft(")e Fj(\(the)i(default\),)i(then)e(an)n(y)f(v)-5 b(alue)24
-b(set)g(for)f(the)i(SkyRef)f(attribute)g(is)g(ignored,)227
-2864 y(and)39 b(the)g(SkyF)-7 b(rame)38 b(represen)n(ts)f(the)i(co)r
-(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g(attribute)
-g(directly)227 2964 y(without)28 b(an)n(y)f(rotation.)0
-3121 y Fd(T)m(yp)s(e:)227 3220 y Fj(String.)0 3377 y
-Fd(Class)k(Applicabilit)m(y:)259 3521 y(SkyF)-8 b(rame)427
-3621 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i(attribute.)
-p 0 3827 V 0 3966 a Fz(SkyRefP\(axis\))1068 3959 y Fe(P)m(osition)36
-b(on)i(primary)f(meridian)g(of)1273 4073 y(o\013set)h(co)s(ordinate)f
-(system)2937 3966 y Fz(SkyRefP\(axis\))0 4270 y Fd(Description:)44
-b Fj(This)33 b(attribute)g(is)g(used)g(to)g(con)n(trol)e(the)i(orien)n
-(tation)f(of)h(the)g(o\013set)g(co)r(ordinate)f(system)g(de\014ned)227
-4369 y(b)n(y)h(attributes)h(SkyRef)f(and)h(SkyRefIs.)54
-b(If)34 b(used,)h(it)f(should)f(b)r(e)h(set)f(to)h(hold)f(the)h
-(longitude)f(and)g(latitude)227 4469 y(of)e(a)f(p)r(oin)n(t)h(within)h
-(the)f(co)r(ordinate)f(system)g(sp)r(eci\014ed)h(b)n(y)g(the)g(System)g
-(attribute.)46 b(The)31 b(o\013set)g(co)r(ordinate)227
-4569 y(system)c(represen)n(ted)e(b)n(y)h(the)h(SkyF)-7
-b(rame)26 b(will)h(then)g(b)r(e)g(rotated)f(in)h(order)e(to)i(put)g
-(the)g(p)r(osition)f(supplied)h(for)227 4668 y(SkyRefP)35
-b(on)f(the)h(zero)e(longitude)h(meridian.)58 b(This)34
-b(rotation)g(is)g(ab)r(out)h(an)f(axis)g(from)g(the)h(cen)n(tre)f(of)g
-(the)227 4768 y(celestial)d(sphere)g(to)h(the)g(p)r(oin)n(t)g(sp)r
-(eci\014ed)g(b)n(y)f(the)h(SkyRef)g(attribute.)49 b(The)32
-b(default)g(v)-5 b(alue)31 b(for)g(SkyRefP)h(is)227 4867
-y(usually)26 b(the)g(north)g(p)r(ole)g(\(that)h(is,)f(a)g(latitude)g
-(of)g(+90)f(degrees)g(in)h(the)g(co)r(ordinate)f(system)h(sp)r
-(eci\014ed)g(b)n(y)g(the)227 4967 y(System)j(attribute\).)39
-b(The)28 b(exception)g(to)g(this)h(is)f(if)h(the)f(SkyRef)h(attribute)f
-(is)g(itself)h(set)f(to)g(either)g(the)h(north)227 5067
-y(or)23 b(south)h(p)r(ole.)35 b(In)24 b(these)g(cases)f(the)h(default)g
-(for)f(SkyRefP)h(is)f(the)h(origin)f(\(that)h(is,)h(a)e(\(0,0\))h(in)g
-(the)g(co)r(ordinate)227 5166 y(system)k(sp)r(eci\014ed)f(b)n(y)h(the)g
-(System)g(attribute\).)227 5295 y(If)j(an)f(in)n(teger)f(axis)g(index)i
-(is)f(included)g(in)h(the)f(attribute)h(name)e(\(e.g.)45
-b Ft(")p Fj(SkyRefP\(1\))p Ft(")p Fj(\))29 b(then)i(the)f(attribute)227
-5394 y(v)-5 b(alue)29 b(should)g(b)r(e)g(supplied)h(as)e(a)h(single)f
-(\015oating)g(p)r(oin)n(t)i(axis)e(v)-5 b(alue,)29 b(in)g(radians,)f
-(when)i(setting)f(a)f(v)-5 b(alue)29 b(for)227 5494 y(the)j(attribute,)
-g(and)f(will)h(b)r(e)g(returned)e(in)i(the)g(same)e(form)h(when)h
-(getting)f(the)g(v)-5 b(alue)31 b(of)h(the)f(attribute.)48
-b(In)227 5593 y(this)31 b(case)f(the)i(in)n(teger)d(axis)i(index)f
-(should)h(b)r(e)g Ft(")p Fj(1)p Ft(")f Fj(or)g Ft(")p
-Fj(2)p Ft(")f Fj(\(the)j(v)-5 b(alues)30 b(to)h(use)g(for)f(longitude)h
-(and)f(latitue)227 5693 y(axes)d(are)g(giv)n(en)f(b)n(y)i(the)g
-(LonAxis)f(and)g(LatAxis)g(attributes\).)p eop end
-%%Page: 459 469
-TeXDict begin 459 468 bop 3643 52 a FF(459)227 351 y
-Fj(If)25 b(no)f(axis)f(index)h(is)g(included)h(in)f(the)h(attribute)f
-(name)g(\(e.g.)35 b Ft(")p Fj(SkyRefP)p Ft(")p Fj(\))24
-b(then)g(the)h(attribute)f(v)-5 b(alue)24 b(should)227
-451 y(b)r(e)j(supplied)f(as)f(a)g(c)n(haracter)f(string)h(con)n
-(taining)g(t)n(w)n(o)g(formatted)h(axis)f(v)-5 b(alues)25
-b(\(an)h(axis)f(1)g(v)-5 b(alue)26 b(follo)n(w)n(ed)f(b)n(y)227
-551 y(a)j(comma,)f(follo)n(w)n(ed)g(b)n(y)h(an)f(axis)g(2)h(v)-5
-b(alue\).)38 b(The)28 b(same)f(form)g(will)i(b)r(e)f(used)g(when)g
-(getting)f(the)i(v)-5 b(alue)27 b(of)h(the)227 650 y(attribute.)0
-794 y Fd(T)m(yp)s(e:)227 894 y Fj(Floating)f(p)r(oin)n(t.)0
-1038 y Fd(Class)k(Applicabilit)m(y:)259 1170 y(SkyF)-8
-b(rame)427 1269 y Fj(All)28 b(SkyF)-7 b(rames)27 b(ha)n(v)n(e)f(this)i
-(attribute.)0 1426 y Fd(Notes:)340 1703 y Fi(\017)45
-b Fj(If)24 b(the)g(p)r(osition)f(giv)n(en)f(b)n(y)h(the)h(SkyRef)f
-(attribute)h(de\014nes)f(the)h(origin)e(of)h(the)h(o\013set)f(co)r
-(ordinate)f(system)427 1803 y(\(that)33 b(is,)h(if)f(the)g(SkyRefIs)g
-(attribute)g(is)f(set)h(to)f Ft(")p Fj(origin)p Ft(")p
-Fj(\),)h(then)g(there)f(will)h(in)g(general)e(b)r(e)i(t)n(w)n(o)f(ori-)
-427 1902 y(en)n(tations)27 b(whic)n(h)h(will)f(put)i(the)f(supplied)f
-(SkyRefP)h(p)r(osition)f(on)g(the)h(zero)f(longitude)g(meridian.)37
-b(The)427 2002 y(orien)n(tation)25 b(whic)n(h)i(is)f(actually)g(used)g
-(is)g(the)h(one)f(whic)n(h)h(giv)n(es)e(the)i(SkyRefP)f(p)r(osition)g
-(a)g(p)r(ositiv)n(e)g(lat-)427 2102 y(itude)i(in)g(the)g(o\013set)g(co)
-r(ordinate)f(system)g(\(the)h(other)f(p)r(ossible)h(orien)n(tation)e(w)
-n(ould)h(giv)n(e)g(the)h(SkyRefP)427 2201 y(p)r(osition)g(a)f(negativ)n
-(e)f(latitude\).)340 2329 y Fi(\017)45 b Fj(An)29 b(error)d(will)i(b)r
-(e)h(rep)r(orted)e(if)i(an)e(attempt)i(is)f(made)g(to)g(use)g(a)f
-(SkyRefP)h(v)-5 b(alue)28 b(whic)n(h)g(is)g(co-inciden)n(t)427
-2429 y(with)h(SkyRef)f(or)f(with)h(the)g(p)r(oin)n(t)g(diametrically)f
-(opp)r(osite)h(to)f(SkyRef)h(on)g(the)g(celestial)g(sphere.)37
-b(The)427 2528 y(rep)r(orting)d(of)h(this)g(error)d(is)j(deferred)f(un)
-n(til)h(the)h(SkyRef)f(and)f(SkyRefP)h(attribute)g(v)-5
-b(alues)34 b(are)g(used)427 2628 y(within)29 b(a)e(calculation.)340
-2756 y Fi(\017)45 b Fj(If)27 b(the)f(System)h(attribute)f(of)g(the)h
-(SkyF)-7 b(rame)25 b(is)h(c)n(hanged,)f(an)n(y)h(p)r(osition)g(giv)n
-(en)f(for)h(SkyRefP)g(is)g(trans-)427 2855 y(formed)i(in)n(to)f(the)h
-(new)g(System.)p 0 3044 3780 12 v 0 3175 a Fz(SourceSys)754
-3176 y Fe(Sp)s(ectral)37 b(system)i(in)f(whic)m(h)g(the)h(source)f(v)m
-(elo)s(cit)m(y)1675 3290 y(is)g(stored)3188 3175 y Fz(SourceSys)0
-3450 y Fd(Description:)44 b Fj(This)31 b(attribute)f(iden)n(ti\014es)h
-(the)g(sp)r(ectral)f(system)g(in)h(whic)n(h)f(the)h(SourceV)-7
-b(el)30 b(attribute)h(v)-5 b(alue)30 b(\(the)227 3550
-y(source)d(v)n(elo)r(cit)n(y\))g(is)g(supplied)h(and)g(returned.)36
-b(It)28 b(can)f(b)r(e)h(one)f(of)h(the)g(follo)n(wing:)340
-3803 y Fi(\017)45 b Ft(")p Fj(VRAD)p Ft(")28 b Fj(or)f
-Ft(")p Fj(VRADIO)p Ft(")p Fj(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))340 3931 y Fi(\017)45 b Ft(")p Fj(V)n(OPT)p
-Ft(")26 b Fj(or)h Ft(")p Fj(V)n(OPTICAL)p Ft(")p Fj(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))340 4058
-y Fi(\017)45 b Ft(")p Fj(ZOPT)p Ft(")26 b Fj(or)h Ft(")p
-Fj(REDSHIFT)p Ft(")p Fj(:)36 b(Redshift)29 b(\(dimensionless\))340
-4186 y Fi(\017)45 b Ft(")p Fj(BET)-7 b(A)p Ft(")p Fj(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))340 4314 y Fi(\017)45
-b Ft(")p Fj(VELO)p Ft(")26 b Fj(or)h Ft(")p Fj(VREL)p
-Ft(")p Fj(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fj(relativistic)p Ft(")p Fj(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))227
-4470 y(When)34 b(setting)e(a)h(new)f(v)-5 b(alue)33 b(for)f(the)i
-(SourceV)-7 b(el)32 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)n(y)g
-(should)g(b)r(e)h(supplied)g(in)227 4570 y(the)28 b(sp)r(ectral)f
-(system)g(indicated)g(b)n(y)g(this)h(attribute.)37 b(Lik)n(ewise,)27
-b(when)g(getting)g(the)h(v)-5 b(alue)27 b(of)g(the)h(SourceV)-7
-b(el)227 4670 y(attribute,)28 b(the)g(v)n(elo)r(cit)n(y)f(will)h(b)r(e)
-g(returned)f(in)h(this)g(sp)r(ectral)f(system.)227 4792
-y(If)g(the)h(v)-5 b(alue)26 b(of)h(SourceSys)f(is)g(c)n(hanged,)g(the)i
-(v)-5 b(alue)26 b(stored)g(for)g(SourceV)-7 b(el)27 b(will)g(b)r(e)g
-(con)n(v)n(erted)e(from)i(the)g(old)227 4891 y(to)h(the)g(new)f(sp)r
-(ectral)g(systems.)227 5013 y(The)h(default)g(v)-5 b(alue)27
-b(is)h Ft(")p Fj(VELO)p Ft(")e Fj(\(apparen)n(t)h(radial)f(v)n(elo)r
-(cit)n(y\).)0 5157 y Fd(T)m(yp)s(e:)227 5257 y Fj(String.)0
-5401 y Fd(Class)31 b(Applicabilit)m(y:)259 5533 y(Sp)s(ecF)-8
-b(rame)427 5632 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27
-b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 460 470
-TeXDict begin 460 469 bop 0 52 a FF(460)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a Fz(SourceVRF)879 483 y Fe(Rest)39 b(frame)e(in)i
-(whic)m(h)e(the)i(source)f(v)m(elo)s(cit)m(y)1675 598
-y(is)g(stored)3100 482 y Fz(SourceVRF)0 781 y Fd(Description:)44
-b Fj(This)32 b(attribute)f(iden)n(ti\014es)g(the)h(rest)f(frame)g(in)g
-(whic)n(h)g(the)h(source)e(v)n(elo)r(cit)n(y)g(or)h(redshift)g(is)g
-(stored)227 880 y(\(the)g(source)e(v)n(elo)r(cit)n(y)h(or)f(redshift)h
-(is)h(accessed)e(using)h(attribute)g(SourceV)-7 b(el\).)45
-b(When)30 b(setting)h(a)e(new)i(v)-5 b(alue)227 980 y(for)34
-b(the)h(SourceV)-7 b(el)34 b(attribute,)i(the)f(source)f(v)n(elo)r(cit)
-n(y)f(or)h(redshift)g(should)h(b)r(e)g(supplied)f(in)h(the)g(rest)f
-(frame)227 1079 y(indicated)21 b(b)n(y)e(this)i(attribute.)34
-b(Lik)n(ewise,)21 b(when)g(getting)e(the)i(v)-5 b(alue)20
-b(of)g(the)h(SourceV)-7 b(el)19 b(attribute,)j(the)e(v)n(elo)r(cit)n(y)
-227 1179 y(or)27 b(redshift)h(will)g(b)r(e)g(returned)f(in)h(this)g
-(rest)f(frame.)227 1312 y(If)33 b(the)f(v)-5 b(alue)32
-b(of)g(SourceVRF)f(is)h(c)n(hanged,)g(the)g(v)-5 b(alue)32
-b(stored)f(for)g(SourceV)-7 b(el)32 b(will)g(b)r(e)g(con)n(v)n(erted)f
-(from)g(the)227 1412 y(old)d(to)f(the)h(new)g(rest)f(frame.)227
-1545 y(The)44 b(v)-5 b(alues)43 b(whic)n(h)h(can)f(b)r(e)h(supplied)g
-(are)f(the)h(same)f(as)g(for)g(the)h(StdOfRest)h(attribute)e(\(except)h
-(that)227 1645 y(SourceVRF)28 b(cannot)f(b)r(e)h(set)f(to)h
-Ft(")p Fj(Source)p Ft(")p Fj(\).)35 b(The)28 b(default)g(v)-5
-b(alue)27 b(is)h Ft(")p Fj(Helio)p Ft(")p Fj(.)0 1812
-y Fd(T)m(yp)s(e:)227 1911 y Fj(String.)0 2078 y Fd(Class)j
-(Applicabilit)m(y:)259 2232 y(Sp)s(ecF)-8 b(rame)427
-2332 y Fj(All)28 b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p 0 2548 V 0 2680 a Fz(SourceV)-11 b(el)812
-b Fe(The)38 b(source)h(v)m(elo)s(cit)m(y)809 b Fz(SourceV)-11
-b(el)0 2891 y Fd(Description:)44 b Fj(This)39 b(attribute)f(\(together)
-g(with)h(SourceSys,)h(SourceVRF,)f(RefRA)g(and)f(RefDec\))i(de\014nes)e
-(the)227 2990 y Ft(")p Fj(Source)p Ft(")25 b Fj(standard)f(of)i(rest)g
-(\(see)g(attribute)g(StdOfRest\).)37 b(This)26 b(is)g(a)f(rest)g(frame)
-h(whic)n(h)g(is)g(mo)n(ving)e(to)n(w)n(ards)227 3090
-y(the)j(p)r(osition)e(giv)n(en)g(b)n(y)h(RefRA)h(and)e(RefDec)i(at)f(a)
-f(v)n(elo)r(cit)n(y)g(giv)n(en)g(b)n(y)h(SourceV)-7 b(el.)36
-b(A)26 b(p)r(ositiv)n(e)f(v)-5 b(alue)26 b(means)227
-3190 y(the)j(source)e(is)h(mo)n(ving)f(a)n(w)n(a)n(y)f(from)i(the)h
-(observ)n(er.)37 b(When)28 b(a)g(new)h(v)-5 b(alue)28
-b(is)g(assigned)f(to)h(this)h(attribute,)f(the)227 3289
-y(supplied)f(v)-5 b(alue)26 b(is)g(assumed)g(to)g(refer)f(to)h(the)h
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)g(b)n(y)g(the)h(SourceSys)e
-(attribute.)36 b(F)-7 b(or)227 3389 y(instance,)35 b(the)f(SourceV)-7
-b(el)32 b(v)-5 b(alue)33 b(ma)n(y)g(b)r(e)h(supplied)f(as)g(a)g(radio)f
-(v)n(elo)r(cit)n(y)-7 b(,)34 b(a)f(redshift,)i(a)e(b)r(eta)g(factor,)h
-(etc.)227 3488 y(Similarly)-7 b(,)34 b(when)f(the)h(curren)n(t)e(v)-5
-b(alue)32 b(of)h(the)h(SourceV)-7 b(el)32 b(attribute)h(is)g(obtained,)
-h(the)f(returned)g(v)-5 b(alue)32 b(will)227 3588 y(refer)f(to)h(the)g
-(sp)r(ectral)f(system)g(sp)r(eci\014ed)h(b)n(y)f(the)h(SourceSys)e(v)-5
-b(alue.)49 b(If)32 b(the)g(SourceSys)f(v)-5 b(alue)31
-b(is)h(c)n(hanged,)227 3688 y(an)n(y)25 b(v)-5 b(alue)25
-b(previously)f(stored)g(for)h(the)g(SourceV)-7 b(el)25
-b(attribute)g(will)h(b)r(e)f(c)n(hanged)f(automatically)g(from)h(the)h
-(old)227 3787 y(sp)r(ectral)h(system)h(to)f(the)h(new)g(sp)r(ectral)f
-(system.)227 3921 y(When)f(setting)f(a)g(v)-5 b(alue)25
-b(for)f(SourceV)-7 b(el,)25 b(the)h(v)-5 b(alue)25 b(should)g(b)r(e)g
-(supplied)h(in)f(the)h(rest)e(frame)h(sp)r(eci\014ed)g(b)n(y)g(the)227
-4020 y(SourceVRF)f(attribute.)36 b(Lik)n(ewise,)23 b(when)h(getting)g
-(the)g(v)-5 b(alue)23 b(of)h(SourceV)-7 b(el,)24 b(it)g(will)g(b)r(e)h
-(returned)e(in)h(the)g(rest)227 4120 y(frame)j(sp)r(eci\014ed)h(b)n(y)g
-(the)g(SourceVRF)f(attribute.)227 4253 y(The)h(default)g(SourceV)-7
-b(el)27 b(v)-5 b(alue)28 b(is)f(zero.)0 4420 y Fd(T)m(yp)s(e:)227
-4520 y Fj(Floating)g(p)r(oin)n(t.)0 4686 y Fd(Class)k(Applicabilit)m
-(y:)259 4840 y(Sp)s(ecF)-8 b(rame)427 4940 y Fj(All)28
-b(Sp)r(ecF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)0
-5119 y Fd(Notes:)340 5419 y Fi(\017)45 b Fj(It)35 b(is)f(imp)r(ortan)n
-(t)f(to)h(set)g(an)g(appropriate)e(v)-5 b(alue)34 b(for)g(SourceVRF)f
-(and)h(SourceSys)f(b)r(efore)h(setting)g(a)427 5519 y(v)-5
-b(alue)27 b(for)f(SourceV)-7 b(el.)36 b(If)27 b(a)f(new)g(v)-5
-b(alue)27 b(is)f(later)g(set)h(for)f(SourceVRF)g(or)f(SourceSys,)h(the)
-h(v)-5 b(alue)26 b(stored)427 5618 y(for)g(SourceV)-7
-b(el)26 b(will)h(sim)n(ultaneously)f(b)r(e)h(c)n(hanged)e(to)i(the)f
-(new)h(standard)f(of)g(rest)g(or)g(sp)r(ectral)g(system.)p
-eop end
-%%Page: 461 471
-TeXDict begin 461 470 bop 3643 52 a FF(461)p 0 351 3780
-12 v 0 483 a Fz(Sp)t(ecOrigin)185 b Fe(The)38 b(zero)g(p)s(oin)m(t)g
-(for)g(Sp)s(ecF)-10 b(rame)38 b(axis)g(v)-7 b(alues)185
-b Fz(Sp)t(ecOrigin)0 680 y Fd(Description:)44 b Fj(This)31
-b(sp)r(eci\014es)g(the)h(origin)e(from)h(whic)n(h)g(all)f(sp)r(ectral)h
-(v)-5 b(alues)31 b(are)f(measured.)46 b(The)31 b(default)h(v)-5
-b(alue)227 780 y(\(zero\))38 b(results)f(in)h(the)g(Sp)r(ecF)-7
-b(rame)37 b(describing)g(absolute)h(sp)r(ectral)f(v)-5
-b(alues)37 b(in)h(the)g(system)g(giv)n(en)f(b)n(y)g(the)227
-879 y(System)e(attribute)f(\(e.g.)56 b(frequency)-7 b(,)36
-b(v)n(elo)r(cit)n(y)-7 b(,)35 b(etc\).)57 b(If)34 b(a)g(Sp)r(ecF)-7
-b(rame)34 b(is)g(to)g(b)r(e)h(used)f(to)g(describ)r(e)g(o\013set)227
-979 y(from)e(some)g(origin,)h(the)g(Sp)r(ecOrigin)e(attribute)i(should)
-f(b)r(e)h(set)f(to)h(hold)f(the)h(required)e(origin)g(v)-5
-b(alue.)52 b(The)227 1079 y(Sp)r(ecOrigin)24 b(v)-5 b(alue)25
-b(stored)f(inside)h(the)g(Sp)r(ecF)-7 b(rame)25 b(structure)f(is)h(mo)r
-(di\014ed)g(whenev)n(er)f(Sp)r(ecF)-7 b(rame)24 b(attribute)227
-1178 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g(so)g(that)g(it)h(refers)f
-(to)h(the)g(original)e(sp)r(ectral)h(p)r(osition.)227
-1307 y(When)22 b(setting)f(a)g(new)g(v)-5 b(alue)21 b(for)f(this)i
-(attribute,)g(the)g(supplied)f(v)-5 b(alue)21 b(is)g(assumed)g(to)g(b)r
-(e)g(in)g(the)h(system,)g(units)227 1406 y(and)e(standard)f(of)h(rest)f
-(describ)r(ed)h(b)n(y)f(the)i(Sp)r(ecF)-7 b(rame.)34
-b(Lik)n(ewise,)21 b(when)f(getting)f(the)i(v)-5 b(alue)19
-b(of)h(this)g(attribute,)227 1506 y(the)26 b(v)-5 b(alue)26
-b(is)g(returned)f(in)h(the)g(system,)g(units)g(and)g(standard)e(of)i
-(rest)f(describ)r(ed)h(b)n(y)f(the)h(Sp)r(ecF)-7 b(rame.)36
-b(If)26 b(an)n(y)227 1606 y(of)j(these)g(attributes)f(are)g(c)n
-(hanged,)g(then)h(an)n(y)f(previously)g(stored)f(Sp)r(ecOrigin)h(v)-5
-b(alue)29 b(will)g(also)f(b)r(e)h(c)n(hanged)227 1705
-y(so)e(that)h(refers)f(to)g(the)h(new)g(system,)f(units)h(or)f
-(standard)g(of)g(rest.)0 1863 y Fd(T)m(yp)s(e:)227 1963
-y Fj(Floating)g(p)r(oin)n(t.)0 2120 y Fd(Class)k(Applicabilit)m(y:)259
-2265 y(Sp)s(ecF)-8 b(rame)427 2365 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 2572
-V 0 2704 a Fz(Sp)t(ecV)-11 b(al)252 b Fe(The)38 b(sp)s(ectral)g(p)s
-(osition)f(at)h(whic)m(h)g(\015ux)h(v)-7 b(alues)39 b(are)1649
-2818 y(measured)3312 2704 y Fz(Sp)t(ecV)-11 b(al)0 2997
-y Fd(Description:)44 b Fj(This)32 b(attribute)g(sp)r(eci\014es)g(the)g
-(sp)r(ectral)g(p)r(osition)g(\(frequency)-7 b(,)33 b(w)n(a)n(v)n
-(elength,)e(etc.\),)j(at)d(whic)n(h)h(the)227 3097 y(v)-5
-b(alues)19 b(describ)r(ed)h(b)n(y)f(the)h(FluxF)-7 b(rame)19
-b(are)f(measured.)33 b(It)20 b(is)f(used)h(when)f(determining)h(the)g
-(Mapping)f(b)r(et)n(w)n(een)227 3196 y(b)r(et)n(w)n(een)28
-b(FluxF)-7 b(rames.)227 3325 y(The)20 b(default)h(v)-5
-b(alue)20 b(and)g(sp)r(ectral)f(system)h(used)g(for)f(this)h(attribute)
-h(are)e(b)r(oth)h(sp)r(eci\014ed)g(when)h(the)f(FluxF)-7
-b(rame)227 3425 y(is)28 b(created.)0 3582 y Fd(T)m(yp)s(e:)227
-3682 y Fj(Floating)f(p)r(oin)n(t.)0 3840 y Fd(Class)k(Applicabilit)m
-(y:)259 3984 y(FluxF)-8 b(rame)427 4084 y Fj(All)28 b(FluxF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p 0 4291
-V 0 4422 a Fz(StcsArea)731 4423 y Fe(Return)39 b(the)f(Co)s
-(ordinateArea)d(comp)s(onen)m(t)i(when)1134 4538 y(reading)g(an)i
-(STC-S)f(do)s(cumen)m(t?)3256 4422 y Fz(StcsArea)0 4735
-y Fd(Description:)44 b Fj(This)25 b(is)f(a)g(b)r(o)r(olean)g(attribute)
-g(whic)n(h)h(con)n(trols)d(what)j(is)f(returned)g(b)n(y)g(the)h
-(astRead)e(function)i(when)227 4834 y(it)39 b(is)e(used)h(to)g(read)f
-(from)g(an)h(StcsChan.)67 b(If)38 b(StcsArea)f(is)h(set)g(non-zero)e
-(\(the)i(default\),)k(then)c(a)f(Region)227 4934 y(represen)n(ting)24
-b(the)h(STC)g(Co)r(ordinateArea)e(will)i(b)r(e)g(returned)f(b)n(y)h
-(astRead.)35 b(If)25 b(StcsArea)f(is)h(set)g(to)g(zero,)f(then)227
-5034 y(the)k(STC)g(Co)r(ordinateArea)e(will)h(not)h(b)r(e)g(returned.)0
-5191 y Fd(T)m(yp)s(e:)227 5291 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-5449 y Fd(Class)k(Applicabilit)m(y:)259 5593 y(StcsChan)427
-5693 y Fj(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-eop end
-%%Page: 462 472
-TeXDict begin 462 471 bop 0 52 a FF(462)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Notes:)340 652 y Fi(\017)45 b Fj(Other)38 b(attributes)f(suc)n(h)h
-(as)f(StcsCo)r(ords)g(and)g(StcsProps)g(can)g(b)r(e)h(used)g(to)g(sp)r
-(ecify)g(other)f(Ob)5 b(jects)427 752 y(to)35 b(b)r(e)g(returned)f(b)n
-(y)g(astRead.)58 b(If)35 b(more)e(than)i(one)f(of)h(these)g(attributes)
-f(is)h(set)f(non-zero,)h(then)g(the)427 851 y(actual)29
-b(Ob)5 b(ject)29 b(returned)g(b)n(y)f(astRead)h(will)g(b)r(e)h(a)e
-(KeyMap,)h(con)n(taining)f(the)i(requested)e(Ob)5 b(jects.)41
-b(In)427 951 y(this)35 b(case,)g(the)g(Region)f(represen)n(ting)f(the)i
-(STC)g(Co)r(ordinateArea)d(will)j(b)r(e)g(stored)e(in)i(the)g(returned)
-427 1050 y(KeyMap)30 b(using)h(the)h(k)n(ey)e Ft(")p
-Fj(AREA)p Ft(")p Fj(.)46 b(If)32 b(StcsArea)e(is)h(the)h(only)e
-(attribute)h(to)g(b)r(e)h(set)f(non-zero,)f(then)427
-1150 y(the)e(Ob)5 b(ject)28 b(returned)f(b)n(y)g(astRead)g(will)h(b)r
-(e)g(the)g(Co)r(ordinateArea)e(Region)g(itself.)340 1292
-y Fi(\017)45 b Fj(The)30 b(class)e(of)i(Region)e(used)i(to)f(represen)n
-(t)f(the)i(Co)r(ordinateArea)e(for)g(eac)n(h)h(STC-S)g(sub-phrase)g(is)
-g(de-)427 1392 y(termined)34 b(b)n(y)g(the)g(\014rst)f(w)n(ord)g(in)h
-(the)g(sub-phrase)e(\(the)j Ft(")p Fj(sub-phrase)d(iden)n(ti\014er)p
-Ft(")p Fj(\).)55 b(The)33 b(individual)427 1491 y(sub-phrase)27
-b(Regions)g(are)h(com)n(bined)g(in)n(to)f(a)h(single)g(Prism,)f(whic)n
-(h)i(is)f(then)g(simpli\014ed)h(using)f(astSim-)427 1591
-y(plify)g(to)g(form)f(the)h(returned)f(region.)340 1733
-y Fi(\017)45 b Fj(Sub-phrases)20 b(that)h(represen)n(t)f(a)h(single)f
-(v)-5 b(alue)21 b(\()h(that)f(is,)h(ha)n(v)n(e)e(iden)n(ti\014ers)h
-Ft(")p Fj(Time)p Ft(")p Fj(,)h Ft(")p Fj(P)n(osition)p
-Ft(")p Fj(,)e Ft(")p Fj(Sp)r(ec-)427 1832 y(tral)p Ft(")27
-b Fj(or)g Ft(")p Fj(Redshift)p Ft(")g Fj(\))h(are)f(considered)f(to)i
-(b)r(e)g(b)r(e)g(part)f(of)g(the)h(STC)g(Co)r(ordinateArea)e(comp)r
-(onen)n(t.)340 1974 y Fi(\017)45 b Fj(The)21 b(TimeF)-7
-b(rame)20 b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e
-(will)i(ha)n(v)n(e)f(its)h(TimeOrigin)e(attribute)427
-2074 y(set)25 b(to)g(the)g(sub-phrase)e(start)h(time.)37
-b(If)25 b(no)g(start)f(time)h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h
-(sub-phrase,)f(then)i(the)f(stop)427 2174 y(time)i(will)f(b)r(e)h(used)
-f(instead.)36 b(If)27 b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)
-f(the)g(sub-phrase,)f(then)i(the)f(single)g(time)427
-2273 y(v)-5 b(alue)27 b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h
-(b)r(e)g(used)g(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j
-(TimeOrigin)427 2373 y(attribute)g(\(or)f(setting)h(its)f(v)-5
-b(alue)28 b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7
-b(rame)27 b(to)g(reprsen)n(t)g(absolute)g(times.)340
-2515 y Fi(\017)45 b Fj(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h
-(returned)f(Region)g(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)
-h(TimeOrigin)427 2614 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p
-0 2832 3780 12 v 0 2964 a Fz(StcsCo)t(ords)172 b Fe(Return)39
-b(the)f(Co)s(ordinates)e(comp)s(onen)m(t)i(when)1134
-3078 y(reading)f(an)i(STC-S)f(do)s(cumen)m(t?)3122 2964
-y Fz(StcsCo)t(ords)0 3285 y Fd(Description:)44 b Fj(This)25
-b(is)f(a)g(b)r(o)r(olean)g(attribute)g(whic)n(h)h(con)n(trols)d(what)j
-(is)f(returned)g(b)n(y)g(the)h(astRead)e(function)i(when)227
-3385 y(it)31 b(is)f(used)g(to)g(read)f(from)h(an)g(StcsChan.)44
-b(If)31 b(StcsCo)r(ords)d(is)i(set)h(non-zero,)e(then)h(a)g(P)n(oin)n
-(tList)f(represen)n(ting)227 3484 y(the)f(STC)g(Co)r(ordinates)e(will)i
-(b)r(e)g(returned)f(b)n(y)h(astRead.)36 b(If)28 b(StcsCo)r(ords)e(is)i
-(set)f(to)h(zero)e(\(the)j(default\),)f(then)227 3584
-y(the)g(STC)g(Co)r(ordinates)e(will)i(not)g(b)r(e)g(returned.)0
-3752 y Fd(T)m(yp)s(e:)227 3851 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-4019 y Fd(Class)k(Applicabilit)m(y:)259 4174 y(StcsChan)427
-4273 y Fj(All)d(StcsChans)g(ha)n(v)n(e)e(this)i(attribute.)0
-4453 y Fd(Notes:)340 4754 y Fi(\017)45 b Fj(Other)27
-b(attributes)h(suc)n(h)f(as)h(StcsArea)f(and)g(StcsProps)f(can)i(b)r(e)
-g(used)g(to)f(sp)r(ecify)h(other)f(Ob)5 b(jects)28 b(to)f(b)r(e)427
-4854 y(returned)33 b(b)n(y)g(astRead.)52 b(If)33 b(more)g(than)g(one)f
-(of)h(these)h(attributes)e(is)h(set)g(non-zero,)g(then)h(the)f(actual)
-427 4953 y(Ob)5 b(ject)35 b(returned)f(b)n(y)h(astRead)f(will)h(b)r(e)g
-(a)g(KeyMap,)h(con)n(taining)e(the)h(requested)f(Ob)5
-b(jects.)58 b(In)35 b(this)427 5053 y(case,)25 b(the)h(P)n(oin)n(tList)
-f(represen)n(ting)e(the)j(STC)g(Co)r(ordinates)e(will)i(b)r(e)f(stored)
-g(in)h(the)f(returned)h(KeyMap)427 5153 y(using)31 b(the)g(k)n(ey)e
-Ft(")p Fj(COORDS)p Ft(")p Fj(.)45 b(If)31 b(StcsCo)r(ords)f(is)g(the)h
-(only)f(attribute)h(to)g(b)r(e)g(set)f(non-zero,)g(then)h(the)427
-5252 y(Ob)5 b(ject)28 b(returned)f(b)n(y)g(astRead)g(will)h(b)r(e)g
-(the)g(Co)r(ordinates)e(P)n(oin)n(tList)h(itself.)340
-5394 y Fi(\017)45 b Fj(The)31 b(Co)r(ordinates)f(comp)r(onen)n(t)h(is)g
-(sp)r(eci\014ed)h(b)n(y)e(the)i(additional)f(axis)f(v)-5
-b(alues)31 b(em)n(b)r(edded)g(within)h(the)427 5494 y(b)r(o)r(dy)24
-b(of)f(eac)n(h)g(STC-S)g(sub-phrase)f(that)i(represen)n(ts)e(an)h
-(extended)h(area.)34 b(Sub-phrases)22 b(that)i(represen)n(t)427
-5593 y(a)31 b(single)g(v)-5 b(alue)31 b(\()h(that)g(is,)g(ha)n(v)n(e)e
-(iden)n(ti\014ers)h Ft(")p Fj(Time)p Ft(")p Fj(,)h Ft(")p
-Fj(P)n(osition)p Ft(")p Fj(,)e Ft(")p Fj(Sp)r(ectral)p
-Ft(")g Fj(or)h Ft(")p Fj(Redshift)p Ft(")g Fj(\))h(are)427
-5693 y(not)c(considered)e(to)i(b)r(e)g(b)r(e)g(part)f(of)h(the)g(STC)f
-(Co)r(ordinates)g(comp)r(onen)n(t.)p eop end
-%%Page: 463 473
-TeXDict begin 463 472 bop 3643 52 a FF(463)340 351 y
-Fi(\017)45 b Fj(If)36 b(the)f(STC-S)g(do)r(cumen)n(ts)g(do)r(es)f(not)h
-(con)n(tain)f(a)h(Co)r(ordinates)e(comp)r(onen)n(t,)k(then)e(a)g(NULL)g
-(ob)5 b(ject)427 451 y(p)r(oin)n(ter)32 b(will)g(b)r(e)g(returned)g(b)n
-(y)f(astRead)g(if)i(the)f(Co)r(ordinates)f(comp)r(onen)n(t)g(is)h(the)g
-(only)g(ob)5 b(ject)32 b(b)r(eing)427 551 y(returned.)49
-b(If)33 b(other)e(ob)5 b(jects)31 b(are)g(also)g(b)r(eing)h(returned)f
-(\(see)h(attributes)g(StcsProps)e(and)i(StcsArea\),)427
-650 y(then)24 b(the)f(returned)g(KeyMap)f(will)h(con)n(tain)g(a)f
-Ft(")p Fj(COORDS)p Ft(")g Fj(k)n(ey)h(only)f(if)i(the)f(Co)r(ordinates)
-f(comp)r(onen)n(t)427 750 y(is)28 b(read)e(succesfully)-7
-b(.)340 886 y Fi(\017)45 b Fj(The)21 b(TimeF)-7 b(rame)20
-b(used)h(to)g(represen)n(t)e(a)i(time)g(STC-S)g(sub-phrase)e(will)i(ha)
-n(v)n(e)f(its)h(TimeOrigin)e(attribute)427 985 y(set)25
-b(to)g(the)g(sub-phrase)e(start)h(time.)37 b(If)25 b(no)g(start)f(time)
-h(is)g(sp)r(eci\014ed)g(b)n(y)f(the)h(sub-phrase,)f(then)i(the)f(stop)
-427 1085 y(time)i(will)f(b)r(e)h(used)f(instead.)36 b(If)27
-b(no)f(stop)g(time)g(is)g(sp)r(eci\014ed)h(b)n(y)f(the)g(sub-phrase,)f
-(then)i(the)f(single)g(time)427 1184 y(v)-5 b(alue)27
-b(sp)r(eci\014ed)g(in)g(the)g(sub-phrase)f(will)h(b)r(e)g(used)g
-(instead.)36 b(Subsequen)n(tly)27 b(clearing)e(the)j(TimeOrigin)427
-1284 y(attribute)g(\(or)f(setting)h(its)f(v)-5 b(alue)28
-b(to)f(zero\))g(will)h(cause)f(the)h(TimeF)-7 b(rame)27
-b(to)g(reprsen)n(t)g(absolute)g(times.)340 1420 y Fi(\017)45
-b Fj(The)c(Ep)r(o)r(c)n(h)f(attribute)h(for)f(the)h(returned)f(Region)g
-(is)g(set)h(in)g(the)f(same)g(w)n(a)n(y)g(as)g(the)h(TimeOrigin)427
-1519 y(attribute)28 b(\(see)g(ab)r(o)n(v)n(e\).)p 0 1725
-3780 12 v 0 1856 a Fz(StcsInden)l(t)216 b Fe(Con)m(trols)37
-b(inden)m(tation)f(and)i(line)g(splitting)f(of)1595 1956
-y(output)h(text)3155 1856 y Fz(StcsInden)l(t)0 2151 y
-Fd(Description:)44 b Fj(This)c(attribute)f(con)n(trols)f(ho)n(w)h(the)g
-(STC-S)h(text)f(is)h(written)f(out)g(to)h(the)f(sink)h(function)f(when)
-227 2250 y(writing)30 b(an)g(AST)g(ob)5 b(ject)30 b(to)g(an)g
-(StcsChan.)45 b(If)30 b(it)h(is)f(zero)f(\(the)i(default\))g(the)f(en)n
-(tire)g(STC-S)g(description)g(is)227 2350 y(written)d(out)g(b)n(y)f(a)g
-(single)h(in)n(v)n(o)r(cation)e(of)i(the)g(sink)f(function.)37
-b(The)27 b(text)g(supplied)g(to)g(the)g(sink)f(function)h(will)227
-2449 y(not)i(con)n(tain)f(an)n(y)g(linefeed)h(c)n(haracters,)e(and)i
-(eac)n(h)f(pair)g(of)g(adjacen)n(t)g(w)n(ords)g(will)h(b)r(e)g
-(separated)e(b)n(y)i(a)f(single)227 2549 y(space.)36
-b(The)28 b(text)g(ma)n(y)f(th)n(us)h(b)r(e)g(arbitrarily)d(large)h(and)
-i(the)g(StcsLength)f(attribute)h(is)g(ignored.)227 2677
-y(If)h(StcsInden)n(t)g(is)g(non-zero,)e(then)i(the)g(text)g(is)f
-(written)h(out)f(via)g(m)n(ultiple)h(calls)f(to)h(the)g(sink)f
-(function,)h(eac)n(h)227 2776 y(call)i(corresp)r(onding)f(to)h(a)g
-(single)g Ft(")p Fj(line)p Ft(")g Fj(of)h(text)g(\(although)f(no)g
-(line)h(feed)g(c)n(haracters)d(will)j(b)r(e)g(inserted)f(b)n(y)227
-2876 y(AST\).)e(The)e(complete)h(STC-S)f(description)g(is)h(brok)n(en)e
-(in)n(to)i(lines)f(so)g(that:)340 3146 y Fi(\017)45 b
-Fj(the)28 b(line)g(length)g(sp)r(eci\014ed)g(b)n(y)f(attribute)h
-(StcsLength)f(is)h(not)f(exceeded)340 3281 y Fi(\017)45
-b Fj(eac)n(h)27 b(sub-phrase)f(\(time,)j(space,)e(etc.\))37
-b(starts)27 b(on)g(a)g(new)h(line)340 3417 y Fi(\017)45
-b Fj(eac)n(h)27 b(argumen)n(t)g(in)g(a)h(comp)r(ound)f(spatial)g
-(region)f(starts)h(on)h(a)f(new)g(line)227 3585 y(If)32
-b(this)g(causes)e(a)h(sub-phrase)g(to)g(extend)h(to)f(t)n(w)n(o)g(or)f
-(more)h(lines,)h(then)g(the)g(second)f(and)g(subsequen)n(t)h(lines)227
-3684 y(will)e(b)r(e)f(inden)n(ted)h(b)n(y)f(three)g(spaces)f(compared)h
-(to)g(the)g(\014rst)g(line.)42 b(In)30 b(addition,)g(lines)f(within)h
-(a)f(comp)r(ound)227 3784 y(spatial)34 b(region)f(will)i(ha)n(v)n(e)f
-(extra)f(inden)n(tation)i(to)f(highligh)n(t)g(the)h(nesting)f(pro)r
-(duced)h(b)n(y)f(the)h(paren)n(theses.)227 3884 y(Eac)n(h)27
-b(new)g(lev)n(el)g(of)h(nesting)f(will)h(b)r(e)g(inden)n(ted)g(b)n(y)g
-(a)f(further)g(three)h(spaces.)0 4039 y Fd(T)m(yp)s(e:)227
-4139 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0 4294 y Fd(Class)k
-(Applicabilit)m(y:)259 4436 y(StcsChan)427 4536 y Fj(All)d(StcsChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p 0 4741 V 0 4873 a Fz(StcsLength)541
-b Fe(Con)m(trols)36 b(output)i(line)g(length)540 b Fz(StcsLength)0
-5067 y Fd(Description:)44 b Fj(This)34 b(attribute)h(sp)r(eci\014es)e
-(the)i(maxim)n(um)f(length)g(to)g(use)g(when)g(writing)f(out)i(text)f
-(through)f(the)227 5167 y(sink)28 b(function)h(supplied)f(when)h(the)f
-(StcsChan)g(w)n(as)f(created.)38 b(It)28 b(is)g(ignored)f(if)i(the)f
-(StcsInden)n(t)g(attribute)h(is)227 5267 y(zero)c(\(in)i(whic)n(h)f
-(case)g(the)g(text)h(supplied)f(to)g(the)h(sink)f(function)h(can)f(b)r
-(e)g(of)h(an)n(y)e(length\).)37 b(The)26 b(default)h(v)-5
-b(alue)227 5366 y(is)28 b(70.)227 5494 y(The)36 b(n)n(um)n(b)r(er)f(of)
-g(c)n(haracters)e(in)i(eac)n(h)g(string)f(written)i(out)f(through)g
-(the)g(sink)g(function)h(will)g(not)f(usually)227 5593
-y(b)r(e)c(greater)e(than)i(the)h(v)-5 b(alue)30 b(of)h(this)g
-(attribute)g(\(but)h(ma)n(y)e(b)r(e)h(less\).)46 b(Ho)n(w)n(ev)n(er,)30
-b(if)h(an)n(y)f(single)g(w)n(ord)g(in)h(the)227 5693
-y(STC-S)d(description)f(exceeds)g(the)h(sp)r(eci\014ed)g(length,)f
-(then)h(the)g(w)n(ord)f(will)h(b)r(e)g(written)g(out)f(as)g(a)g(single)
-g(line.)p eop end
-%%Page: 464 474
-TeXDict begin 464 473 bop 0 52 a FF(464)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(T)m(yp)s(e:)227 451 y Fj(In)n(teger.)0 611 y Fd(Class)g
-(Applicabilit)m(y:)259 758 y(StcsChan)427 858 y Fj(All)d(StcsChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p 0 1068 3780 12 v 0
-1198 a Fz(StcsProps)912 1199 y Fe(Return)38 b(all)f(prop)s(erties)h
-(when)g(reading)f(an)1423 1314 y(STC-S)h(do)s(cumen)m(t?)3198
-1198 y Fz(StcsProps)0 1490 y Fd(Description:)44 b Fj(This)25
-b(is)f(a)g(b)r(o)r(olean)g(attribute)g(whic)n(h)h(con)n(trols)d(what)j
-(is)f(returned)g(b)n(y)g(the)h(astRead)e(function)i(when)227
-1590 y(it)32 b(is)f(used)g(to)g(read)g(from)f(an)h(StcsChan.)48
-b(If)31 b(StcsProps)f(is)h(set)g(non-zero,)g(then)h(a)e(KeyMap)h(con)n
-(taining)f(all)227 1689 y(the)f(prop)r(erties)f(read)f(from)h(the)h
-(STC-S)f(do)r(cumen)n(t)h(will)g(b)r(e)f(returned)g(b)n(y)h(astRead.)38
-b(If)29 b(StcsProps)e(is)h(set)h(to)227 1789 y(zero)e(\(the)h
-(default\),)g(then)h(the)f(prop)r(erties)e(will)i(not)g(b)r(e)g
-(returned.)0 1949 y Fd(T)m(yp)s(e:)227 2049 y Fj(In)n(teger)f(\(b)r(o)r
-(olean\).)0 2209 y Fd(Class)k(Applicabilit)m(y:)259 2356
-y(StcsChan)427 2455 y Fj(All)d(StcsChans)g(ha)n(v)n(e)e(this)i
-(attribute.)0 2628 y Fd(Notes:)340 2921 y Fi(\017)45
-b Fj(Other)32 b(attributes)h(suc)n(h)f(as)f(StcsCo)r(ords)h(and)g
-(StcsArea)g(can)g(b)r(e)g(used)h(to)f(sp)r(ecify)h(other)f(Ob)5
-b(jects)32 b(to)427 3021 y(b)r(e)27 b(returned)f(b)n(y)g(astRead.)36
-b(If)26 b(more)g(than)g(one)g(of)h(these)f(attributes)g(is)g(set)h
-(non-zero,)e(then)h(the)h(actual)427 3120 y(Ob)5 b(ject)23
-b(returned)f(b)n(y)h(astRead)f(will)g(b)r(e)i(a)e(KeyMap)g(con)n
-(taining)f(the)j(requested)e(Ob)5 b(jects.)34 b(In)23
-b(this)g(case,)427 3220 y(the)32 b(prop)r(erties)e(KeyMap)g(will)h(b)r
-(e)g(stored)f(in)h(the)h(returned)e(KeyMap)g(using)h(the)g(k)n(ey)g
-Ft(")p Fj(PR)n(OPS)p Ft(")p Fj(.)44 b(If)427 3320 y(StcsProps)26
-b(is)h(the)h(only)f(attribute)g(to)h(b)r(e)f(set)h(non-zero,)d(then)j
-(the)g(Ob)5 b(ject)27 b(returned)g(b)n(y)g(astRead)f(will)427
-3419 y(b)r(e)i(the)g(prop)r(erties)f(KeyMap)g(itself.)340
-3557 y Fi(\017)45 b Fj(The)24 b(KeyMap)e(con)n(taining)h(the)h(prop)r
-(erties)e(will)i(ha)n(v)n(e)e(en)n(tries)h(for)g(one)g(or)g(more)g(of)g
-(the)h(follo)n(wing)e(k)n(eys:)427 3657 y Ft(")p Fj(TIME)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")p Fj(,)k Ft(")p Fj(SP)-7 b(A)n(CE)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")p Fj(,)25 b Ft(")p Fj(SPECTRAL)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")g Fj(and)j Ft(")p Fj(REDSHIFT)p
-Ft(_)p Fj(PR)n(OPS)p Ft(")p Fj(.)427 3757 y(Eac)n(h)d(of)h(these)g(en)n
-(tries)g(will)g(b)r(e)h(another)e(KeyMap)g(con)n(taining)g(the)i(prop)r
-(erties)e(of)h(the)h(corresp)r(onding)427 3856 y(STC-S)h(sub-phrase.)p
-0 4066 V 0 4198 a Fz(StdOfRest)865 b Fe(Standard)37 b(of)h(rest)864
-b Fz(StdOfRest)0 4374 y Fd(Description:)44 b Fj(This)19
-b(attribute)f(iden)n(ti\014es)h(the)f(standard)g(of)g(rest)g(to)g(whic)
-n(h)h(the)f(sp)r(ectral)g(axis)g(v)-5 b(alues)18 b(of)g(a)g(Sp)r(ecF)-7
-b(rame)227 4474 y(refer,)27 b(and)h(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fj(Standards)e(of)i
-(Rest)p Ft(")f Fj(section)g(\(b)r(elo)n(w\).)227 4604
-y(The)h(default)g(StdOfRest)g(v)-5 b(alue)28 b(is)f Ft(")p
-Fj(Helio)p Ft(")p Fj(.)0 4764 y Fd(T)m(yp)s(e:)227 4863
-y Fj(String.)0 5023 y Fd(Class)k(Applicabilit)m(y:)259
-5170 y(Sp)s(ecF)-8 b(rame)427 5270 y Fj(All)28 b(Sp)r(ecF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)-2 5443 y
-Fd(Standards)33 b(of)f(Rest)n(:)227 5589 y Fj(The)c(Sp)r(ecF)-7
-b(rame)27 b(class)g(supp)r(orts)g(the)h(follo)n(wing)f(StdOfRest)h(v)-5
-b(alues)27 b(\(all)h(are)e(case-insensitiv)n(e\):)p eop
-end
-%%Page: 465 475
-TeXDict begin 465 474 bop 3643 52 a FF(465)340 351 y
-Fi(\017)45 b Ft(")p Fj(T)-7 b(op)r(o)r(cen)n(tric)p Ft(")p
-Fj(,)43 b Ft(")p Fj(T)-7 b(op)r(o)r(cen)n(t)p Ft(")40
-b Fj(or)g Ft(")p Fj(T)-7 b(op)r(o)p Ft(")p Fj(:)62 b(The)41
-b(observ)n(ers)d(rest-frame)i(\(assumed)h(to)f(b)r(e)i(on)e(the)427
-451 y(surface)30 b(of)g(the)g(earth\).)45 b(Sp)r(ectra)30
-b(recorded)e(in)j(this)f(standard)f(of)h(rest)g(su\013er)g(a)g(Doppler)
-g(shift)h(whic)n(h)427 551 y(v)-5 b(aries)26 b(o)n(v)n(er)g(the)h
-(course)f(of)h(a)g(da)n(y)f(b)r(ecause)h(of)g(the)g(rotation)f(of)h
-(the)h(observ)n(er)c(around)i(the)i(axis)e(of)h(the)427
-650 y(earth.)52 b(This)32 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)h(ObsLat,)g(ObsLon,)g(ObsAlt,)h(Ep)r(o)r(c)n
-(h,)427 750 y(RefRA)29 b(and)e(RefDec)h(attributes.)340
-875 y Fi(\017)45 b Ft(")p Fj(Geo)r(cen)n(tric)p Ft(")p
-Fj(,)25 b Ft(")p Fj(Geo)r(cen)n(tr)p Ft(")g Fj(or)g Ft(")p
-Fj(Geo)p Ft(")p Fj(:)34 b(The)26 b(rest-frame)f(of)h(the)g(earth)f(cen)
-n(tre.)36 b(Sp)r(ectra)26 b(recorded)e(in)427 975 y(this)30
-b(standard)e(of)h(rest)f(su\013er)h(a)g(Doppler)g(shift)g(whic)n(h)g(v)
--5 b(aries)28 b(o)n(v)n(er)g(the)h(course)f(of)h(a)f(y)n(ear)g(b)r
-(ecause)h(of)427 1075 y(the)h(rotation)f(of)g(the)h(earth)f(around)f
-(the)i(Sun.)44 b(This)29 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)g(the)427 1174 y(Ep)r(o)r(c)n(h,)e(RefRA)i(and)e
-(RefDec)i(attributes.)340 1300 y Fi(\017)45 b Ft(")p
-Fj(Barycen)n(tric)p Ft(")p Fj(,)19 b Ft(")p Fj(Barycen)n(t)p
-Ft(")f Fj(or)g Ft(")p Fj(Bary)p Ft(")p Fj(:)31 b(The)20
-b(rest-frame)f(of)g(the)i(solar-system)c(barycen)n(tre.)33
-b(Sp)r(ectra)427 1399 y(recorded)24 b(in)i(this)g(standard)f(of)g(rest)
-h(su\013er)f(a)g(Doppler)h(shift)g(whic)n(h)f(dep)r(ends)i(b)r(oth)f
-(on)f(the)h(v)n(elo)r(cit)n(y)f(of)427 1499 y(the)e(Sun)h(through)e
-(the)h(Lo)r(cal)f(Standard)g(of)h(Rest,)h(and)e(on)h(the)g(mo)n(v)n
-(emen)n(t)f(of)g(the)i(planets)e(through)g(the)427 1599
-y(solar)30 b(system.)48 b(This)32 b(standard)e(of)i(rest)f(m)n(ust)g(b)
-r(e)h(quali\014ed)f(using)g(the)h(Ep)r(o)r(c)n(h,)g(RefRA)h(and)e
-(RefDec)427 1698 y(attributes.)340 1824 y Fi(\017)45
-b Ft(")p Fj(Helio)r(cen)n(tric)p Ft(")p Fj(,)31 b Ft(")p
-Fj(Helio)r(cen)p Ft(")f Fj(or)g Ft(")p Fj(Helio)p Ft(")p
-Fj(:)43 b(The)31 b(rest-frame)e(of)i(the)h(Sun.)47 b(Sp)r(ectra)31
-b(recorded)e(in)i(this)427 1923 y(standard)c(of)g(rest)g(su\013er)g(a)f
-(Doppler)h(shift)h(whic)n(h)g(dep)r(ends)f(on)g(the)h(v)n(elo)r(cit)n
-(y)e(of)h(the)h(Sun)g(through)e(the)427 2023 y(Lo)r(cal)d(Standard)h
-(of)g(Rest.)35 b(This)24 b(standard)f(of)h(rest)g(m)n(ust)g(b)r(e)g
-(quali\014ed)g(using)f(the)h(RefRA)h(and)f(RefDec)427
-2123 y(attributes.)340 2248 y Fi(\017)45 b Ft(")p Fj(LSRK)p
-Ft(")p Fj(,)21 b Ft(")p Fj(LSR)p Ft(")p Fj(:)33 b(The)20
-b(rest-frame)f(of)h(the)h(kinematical)e(Lo)r(cal)h(Standard)f(of)i
-(Rest.)34 b(Sp)r(ectra)20 b(recorded)427 2348 y(in)j(this)f(standard)f
-(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n(h)f(dep)r(ends)h
-(on)e(the)i(v)n(elo)r(cit)n(y)e(of)i(the)f(kinematical)427
-2447 y(Lo)r(cal)i(Standard)g(of)h(Rest)g(through)f(the)h(galaxy)-7
-b(.)34 b(This)25 b(standard)f(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)g(using)f(the)427 2547 y(RefRA)29 b(and)e(RefDec)h
-(attributes.)340 2672 y Fi(\017)45 b Ft(")p Fj(LSRD)p
-Ft(")p Fj(:)38 b(The)28 b(rest-frame)f(of)h(the)g(dynamical)g(Lo)r(cal)
-f(Standard)g(of)h(Rest.)39 b(Sp)r(ectra)27 b(recorded)g(in)h(this)427
-2772 y(standard)e(of)i(rest)e(su\013er)h(a)g(Doppler)g(shift)h(whic)n
-(h)f(dep)r(ends)g(on)g(the)h(v)n(elo)r(cit)n(y)e(of)h(the)h(dynamical)e
-(Lo)r(cal)427 2872 y(Standard)21 b(of)g(Rest)g(through)g(the)h(galaxy)
--7 b(.)33 b(This)21 b(standard)f(of)h(rest)g(m)n(ust)h(b)r(e)f
-(quali\014ed)g(using)g(the)h(RefRA)427 2971 y(and)28
-b(RefDec)g(attributes.)340 3097 y Fi(\017)45 b Ft(")p
-Fj(Galactic)p Ft(")p Fj(,)35 b Ft(")p Fj(Galacto)r(c)p
-Ft(")e Fj(or)h Ft(")p Fj(Gal)p Ft(")p Fj(:)50 b(The)35
-b(rest-frame)e(of)i(the)g(galactic)e(cen)n(tre.)58 b(Sp)r(ectra)34
-b(recorded)427 3196 y(in)e(this)f(standard)f(of)h(rest)f(su\013er)h(a)g
-(Doppler)f(shift)i(whic)n(h)f(dep)r(ends)g(on)g(the)g(v)n(elo)r(cit)n
-(y)f(of)h(the)h(galactic)427 3296 y(cen)n(tre)25 b(through)g(the)h(lo)r
-(cal)f(group.)35 b(This)25 b(standard)g(of)g(rest)g(m)n(ust)h(b)r(e)g
-(quali\014ed)f(using)h(the)f(RefRA)i(and)427 3396 y(RefDec)i
-(attributes.)340 3521 y Fi(\017)45 b Ft(")p Fj(Lo)r(cal)p
-Ft(_)p Fj(group)p Ft(")p Fj(,)33 b Ft(")p Fj(Lo)r(calgrp)p
-Ft(")e Fj(or)i Ft(")p Fj(LG)p Ft(")p Fj(:)49 b(The)34
-b(rest-frame)f(of)h(the)g(lo)r(cal)g(group.)55 b(This)34
-b(standard)f(of)427 3621 y(rest)27 b(m)n(ust)h(b)r(e)g(quali\014ed)g
-(using)f(the)h(RefRA)g(and)g(RefDec)g(attributes.)340
-3746 y Fi(\017)45 b Ft(")p Fj(Source)p Ft(")p Fj(,)35
-b(or)e Ft(")p Fj(src)p Ft(")p Fj(:)49 b(The)34 b(rest-frame)f(of)h(the)
-h(source.)55 b(This)35 b(standard)e(of)h(rest)g(m)n(ust)g(b)r(e)h
-(quali\014ed)427 3846 y(using)28 b(the)f(RefRA,)i(RefDec)f(and)g
-(SourceV)-7 b(el)27 b(attributes.)227 4001 y(Where)i(more)f(than)h(one)
-f(alternativ)n(e)g(System)h(v)-5 b(alue)29 b(is)f(sho)n(wn)g(ab)r(o)n
-(v)n(e,)g(the)h(\014rst)g(of)g(these)g(will)g(b)r(e)g(returned)227
-4100 y(when)f(an)f(enquiry)g(is)h(made.)p 0 4285 3780
-12 v 0 4416 a Fz(Strict)322 b Fe(Rep)s(ort)38 b(an)h(error)e(if)h(an)m
-(y)g(unexp)s(eted)h(data)f(items)f(are)1717 4531 y(found?)3448
-4416 y Fz(Strict)0 4682 y Fd(Description:)44 b Fj(This)24
-b(is)f(a)g(b)r(o)r(olean)f(attribute)i(whic)n(h)f(indicates)g(whether)g
-(a)g(w)n(arning)f(rather)g(than)i(an)f(error)e(should)227
-4782 y(b)r(e)37 b(issed)e(for)h(insigni\014can)n(t)f(con)n(v)n(ersion)f
-(problems.)61 b(If)36 b(it)h(is)e(set)h(non-zero,)h(then)f(fatal)g
-(errors)e(are)h(issued)227 4881 y(instead)g(of)g(w)n(arnings,)g
-(resulting)f(in)h(the)g(AST)h(error)c(status)j(b)r(eing)g(set.)59
-b(If)35 b(Strict)g(is)g(zero)e(\(the)j(default\),)227
-4981 y(then)28 b(execution)f(con)n(tin)n(ues)g(after)g(minor)g(con)n(v)
-n(ersion)e(problems,)h(and)i(a)f(w)n(arning)f(message)f(is)j(added)f
-(to)g(the)227 5080 y(Channel)h(structure.)36 b(Suc)n(h)28
-b(messages)e(can)h(b)r(e)h(retriev)n(ed)e(using)i(the)f(astW)-7
-b(arnings)27 b(function.)0 5223 y Fd(T)m(yp)s(e:)227
-5322 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 5464 y Fd(Class)k
-(Applicabilit)m(y:)259 5593 y(Channel)427 5693 y Fj(All)d(Channels)g
-(ha)n(v)n(e)e(this)i(attribute.)p eop end
-%%Page: 466 476
-TeXDict begin 466 475 bop 0 52 a FF(466)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Notes:)340 627 y Fi(\017)45 b Fj(This)30 b(attribute)g(w)n(as)f(in)n
-(tro)r(duced)g(in)i(AST)f(v)n(ersion)e(5.0.)43 b(Prior)28
-b(to)i(this)g(v)n(ersion)e(of)i(AST)g(unexp)r(ected)427
-727 y(data)g(items)h(read)f(b)n(y)h(a)f(basic)g(Channel)h(alw)n(a)n(ys)
-e(caused)h(an)g(error)f(to)h(b)r(e)i(rep)r(orted.)45
-b(So)31 b(applications)427 827 y(link)n(ed)21 b(against)e(v)n(ersions)g
-(of)i(AST)g(prior)e(to)i(v)n(ersion)e(5.0)h(ma)n(y)g(not)g(b)r(e)h
-(able)g(to)f(read)g(Ob)5 b(ject)20 b(descriptions)427
-926 y(created)27 b(b)n(y)g(later)g(v)n(ersions)f(of)i(AST,)g(if)g(the)g
-(Ob)5 b(ject's)27 b(class)g(description)g(has)g(c)n(hanged.)p
-0 1113 3780 12 v 0 1251 a Fz(St)l(yle\(elemen)l(t\))1159
-1244 y Fe(Line)39 b(st)m(yle)f(for)g(a)g(Plot)g(elemen)m(t)2925
-1251 y Fz(St)l(yle\(elemen)l(t\))0 1434 y Fd(Description:)44
-b Fj(This)39 b(attribute)f(determines)g(the)h(line)g(st)n(yle)f(used)g
-(when)h(dra)n(wing)e(eac)n(h)g(elemen)n(t)i(of)f(graphical)227
-1533 y(output)i(pro)r(duced)g(b)n(y)f(a)h(Plot.)72 b(It)40
-b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40 b(for)f(eac)n(h)g(graphical)
-f(elemen)n(t)i(so)f(that,)k(for)227 1633 y(instance,)f(the)e(setting)f
-Ft(")p Fj(St)n(yle\(b)r(order\)=2)p Ft(")e Fj(causes)i(the)g(Plot)g(b)r
-(order)f(to)i(b)r(e)f(dra)n(wn)g(using)g(line)g(st)n(yle)g(2)227
-1733 y(\(whic)n(h)28 b(migh)n(t)g(result)f(in,)h(sa)n(y)-7
-b(,)26 b(a)i(dashed)f(line\).)227 1854 y(The)35 b(range)f(of)h(in)n
-(teger)f(line)h(st)n(yles)g(a)n(v)-5 b(ailable)33 b(and)i(their)g(app)r
-(earance)f(is)h(determined)g(b)n(y)g(the)g(underlying)227
-1954 y(graphics)25 b(system.)36 b(The)26 b(default)h(b)r(eha)n(viour)e
-(is)h(for)f(all)h(graphical)e(elemen)n(ts)i(to)g(b)r(e)h(dra)n(wn)e
-(using)h(the)g(default)227 2053 y(line)i(st)n(yle)f(supplied)h(b)n(y)g
-(this)f(graphics)g(system)g(\(normally)-7 b(,)27 b(this)h(is)f(lik)n
-(ely)g(to)h(giv)n(e)e(a)i(solid)f(line\).)0 2196 y Fd(T)m(yp)s(e:)227
-2296 y Fj(In)n(teger.)0 2439 y Fd(Class)k(Applicabilit)m(y:)259
-2569 y(Plot)427 2669 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 2824 y Fd(Notes:)340 3100 y Fi(\017)45 b Fj(F)-7 b(or)27
-b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n(v)-5
-b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f(class.)340
-3227 y Fi(\017)45 b Fj(If)33 b(no)f(graphical)f(elemen)n(t)i(is)f(sp)r
-(eci\014ed,)j(\(e.g.)51 b Ft(")p Fj(St)n(yle)p Ft(")32
-b Fj(instead)g(of)g Ft(")p Fj(St)n(yle\(b)r(order\))p
-Ft(")p Fj(\),)h(then)g(a)f Ft(")p Fj(set)p Ft(")427 3326
-y Fj(or)26 b Ft(")p Fj(clear)p Ft(")f Fj(op)r(eration)h(will)g
-(a\013ect)h(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e
-(elemen)n(ts,)i(while)g(a)f Ft(")p Fj(get)p Ft(")f Fj(or)427
-3426 y Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)g(will)h(use)f(just)h
-(the)g(St)n(yle\(Border\))f(v)-5 b(alue.)p 0 3612 V 0
-3751 a Fz(Sym)l(b)t(ol\(axis\))1575 3744 y Fe(Axis)39
-b(sym)m(b)s(ol)3011 3751 y Fz(Sym)l(b)t(ol\(axis\))0
-3933 y Fd(Description:)44 b Fj(This)37 b(attribute)g(sp)r(eci\014es)g
-(a)f(short-form)g(sym)n(b)r(ol)g(to)h(b)r(e)g(used)g(to)g(represen)n(t)
-e(co)r(ordinate)h(v)-5 b(alues)227 4033 y(for)32 b(a)f(particular)g
-(axis)g(of)h(a)f(F)-7 b(rame.)49 b(This)32 b(migh)n(t)g(b)r(e)g(used)g
-(\(e.g.\))50 b(in)32 b(algebraic)e(expressions)g(where)h(a)h(full)227
-4133 y(description)37 b(of)g(the)g(axis)f(w)n(ould)g(b)r(e)i
-(inappropriate.)63 b(Examples)36 b(include)h Ft(")p Fj(RA)p
-Ft(")g Fj(and)g Ft(")p Fj(Dec)p Ft(")f Fj(\(for)h(Righ)n(t)227
-4232 y(Ascension)27 b(and)h(Declination\).)227 4353 y(If)g(a)f(Sym)n(b)
-r(ol)h(v)-5 b(alue)27 b(has)h(not)f(b)r(een)h(set)g(for)f(a)g(F)-7
-b(rame)27 b(axis,)g(then)h(a)f(suitable)h(default)g(is)f(supplied.)0
-4497 y Fd(T)m(yp)s(e:)227 4596 y Fj(String.)0 4739 y
-Fd(Class)k(Applicabilit)m(y:)259 4869 y(F)-8 b(rame)427
-4969 y Fj(The)24 b(default)h(Sym)n(b)r(ol)e(v)-5 b(alue)24
-b(supplied)g(b)n(y)g(the)g(F)-7 b(rame)24 b(class)f(is)g(the)i(string)e
-Ft(")p Fl(<)p Fj(Domain)p Fl(><)p Fj(n)p Fl(>)p Ft(")p
-Fj(,)f(where)427 5068 y Fl(<)p Fj(n)p Fl(>)34 b Fj(is)g(1,)h(2,)g(etc.)
-57 b(for)33 b(successiv)n(e)g(axes,)i(and)f Fl(<)p Fj(Domain)p
-Fl(>)f Fj(is)h(the)g(v)-5 b(alue)34 b(of)g(the)g(F)-7
-b(rame's)34 b(Domain)427 5168 y(attribute)25 b(\(truncated)g(if)h
-(necessary)d(so)h(that)h(the)g(\014nal)g(string)f(do)r(es)h(not)f
-(exceed)h(15)f(c)n(haracters\).)34 b(If)25 b(no)427 5268
-y(Domain)j(v)-5 b(alue)29 b(has)e(b)r(een)i(set,)f Ft(")p
-Fj(x)p Ft(")g Fj(is)g(used)g(as)g(the)g Fl(<)p Fj(Domain)p
-Fl(>)g Fj(v)-5 b(alue)28 b(in)g(constructing)g(this)g(default)427
-5367 y(string.)259 5494 y Fd(SkyF)-8 b(rame)427 5593
-y Fj(The)30 b(SkyF)-7 b(rame)29 b(class)g(re-de\014nes)g(the)i(default)
-f(Sym)n(b)r(ol)g(v)-5 b(alue)30 b(\(e.g.)44 b(to)29 b
-Ft(")p Fj(RA)p Ft(")h Fj(or)f Ft(")p Fj(Dec)p Ft(")p
-Fj(\))h(as)f(appro-)427 5693 y(priate)e(for)g(the)h(particular)f
-(celestial)g(co)r(ordinate)f(system)i(b)r(eing)f(represen)n(ted.)p
-eop end
-%%Page: 467 477
-TeXDict begin 467 476 bop 3643 52 a FF(467)259 351 y
-Fd(TimeF)-8 b(rame)427 451 y Fj(The)33 b(TimeF)-7 b(rame)33
-b(class)f(re-de\014nes)g(the)h(default)g(Sym)n(b)r(ol)g(v)-5
-b(alue)33 b(as)f(appropriate)f(for)i(the)g(particular)427
-551 y(time)28 b(system)g(b)r(eing)f(represen)n(ted.)259
-684 y Fd(F)-8 b(rameSet)427 783 y Fj(The)23 b(Sym)n(b)r(ol)g(attribute)
-g(of)g(a)f(F)-7 b(rameSet)23 b(axis)f(is)g(the)h(same)g(as)f(that)h(of)
-g(its)g(curren)n(t)f(F)-7 b(rame)22 b(\(as)g(sp)r(eci\014ed)427
-883 y(b)n(y)28 b(the)g(Curren)n(t)e(attribute\).)0 1046
-y Fd(Notes:)340 1329 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h
-(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g
-(the)h(n)n(um)n(b)r(er)f(of)g(the)427 1429 y(F)-7 b(rame)27
-b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0 1629 3780
-12 v 0 1759 a Fz(System)733 1760 y Fe(Co)s(ordinate)37
-b(system)h(used)h(to)f(describ)s(e)h(p)s(ositions)1418
-1875 y(within)e(the)i(domain)3355 1759 y Fz(System)0
-2041 y Fd(Description:)44 b Fj(In)25 b(general)e(it)i(is)f(p)r(ossible)
-g(for)g(p)r(ositions)g(within)h(a)f(giv)n(en)g(ph)n(ysical)g(domain)g
-(to)g(b)r(e)h(describ)r(ed)f(using)227 2141 y(one)38
-b(of)g(sev)n(eral)f(di\013eren)n(t)h(co)r(ordinate)f(systems.)68
-b(F)-7 b(or)38 b(instance,)j(the)d(SkyF)-7 b(rame)38
-b(class)f(can)h(use)g(galactic)227 2240 y(co)r(ordinates,)f(equatorial)
-e(co)r(ordinates,)h(etc,)j(to)d(describ)r(e)g(p)r(ositions)f(on)h(the)h
-(sky)-7 b(.)62 b(As)36 b(another)f(example,)227 2340
-y(the)j(Sp)r(ecF)-7 b(rame)37 b(class)f(can)g(use)h(frequency)-7
-b(,)39 b(w)n(a)n(v)n(elength,)f(v)n(elo)r(cit)n(y)-7
-b(,)39 b(etc,)h(to)d(describ)r(e)f(a)h(p)r(osition)g(within)227
-2440 y(an)f(electromagnetic)f(sp)r(ectrum.)64 b(The)36
-b(System)h(attribute)f(iden)n(ti\014es)h(the)g(particular)e(co)r
-(ordinate)g(system)227 2539 y(represen)n(ted)29 b(b)n(y)g(a)g(F)-7
-b(rame.)42 b(Eac)n(h)28 b(class)h(of)g(F)-7 b(rame)29
-b(de\014nes)h(a)f(set)g(of)h(acceptable)e(v)-5 b(alues)30
-b(for)f(this)g(attribute,)227 2639 y(as)e(listed)h(b)r(elo)n(w)e(\(all)
-i(are)e(case)h(insensitiv)n(e\).)36 b(Where)27 b(more)g(than)g(one)g
-(alternativ)n(e)f(System)i(v)-5 b(alue)27 b(is)g(sho)n(wn,)227
-2739 y(the)h(\014rst)g(of)f(will)h(b)r(e)g(returned)f(when)h(an)f
-(enquiry)g(is)h(made.)0 2889 y Fd(T)m(yp)s(e:)227 2988
-y Fj(String.)0 3139 y Fd(Class)j(Applicabilit)m(y:)259
-3276 y(F)-8 b(rame)427 3376 y Fj(The)28 b(System)g(attribute)f(for)h(a)
-f(basic)g(F)-7 b(rame)27 b(alw)n(a)n(ys)e(equals)i Ft(")p
-Fj(Cartesian)p Ft(")p Fj(,)f(and)h(ma)n(y)g(not)h(b)r(e)g(altered.)259
-3509 y Fd(CmpF)-8 b(rame)427 3608 y Fj(The)27 b(System)g(attribute)f
-(for)g(a)h(CmpF)-7 b(rame)26 b(alw)n(a)n(ys)f(equals)g
-Ft(")p Fj(Comp)r(ound)p Ft(")p Fj(,)h(and)h(ma)n(y)f(not)g(b)r(e)h
-(altered.)427 3708 y(In)21 b(addition,)g(the)g(CmpF)-7
-b(rame)20 b(class)f(allo)n(ws)g(the)i(System)f(attribute)g(to)g(b)r(e)h
-(referenced)e(for)h(a)g(comp)r(onen)n(t)427 3808 y(F)-7
-b(rame)25 b(b)n(y)g(including)h(the)g(index)f(of)g(an)g(axis)g(within)h
-(the)g(required)e(comp)r(onen)n(t)h(F)-7 b(rame.)36 b(F)-7
-b(or)25 b(instance,)427 3907 y Ft(")p Fj(System\(3\))p
-Ft(")h Fj(refers)g(to)g(the)h(System)f(attribute)h(of)f(the)h(comp)r
-(onen)n(t)f(F)-7 b(rame)26 b(whic)n(h)g(includes)h(axis)f(3)g(of)427
-4007 y(the)i(CmpF)-7 b(rame.)259 4140 y Fd(F)f(rameSet)427
-4240 y Fj(The)27 b(System)f(attribute)h(of)f(a)h(F)-7
-b(rameSet)26 b(is)g(the)h(same)f(as)g(that)g(of)h(its)g(curren)n(t)e(F)
--7 b(rame)26 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427 4339
-y(the)h(Curren)n(t)f(attribute\).)259 4473 y Fd(SkyF)-8
-b(rame)427 4572 y Fj(The)26 b(SkyF)-7 b(rame)25 b(class)f(supp)r(orts)h
-(the)h(follo)n(wing)e(System)i(v)-5 b(alues)25 b(and)h(asso)r(ciated)e
-(celestial)h(co)r(ordinate)427 4672 y(systems:)510 4896
-y Fi(\017)45 b Ft(")p Fj(AZEL)p Ft(")p Fj(:)33 b(Horizon)20
-b(co)r(ordinates.)34 b(The)21 b(longitude)g(axis)g(is)g(azim)n(uth)h
-(suc)n(h)f(that)h(geographic)d(north)597 4996 y(has)j(an)g(azim)n(uth)g
-(of)h(zero)e(and)h(geographic)e(east)i(has)g(an)g(azim)n(uth)g(of)g
-(+PI/2)f(radians.)34 b(The)22 b(zenith)597 5095 y(has)f(elev)-5
-b(ation)21 b(+PI/2.)33 b(When)21 b(con)n(v)n(erting)f(to)h(and)g(from)g
-(other)f(celestial)h(co)r(ordinate)f(systems,)i(no)597
-5195 y(corrections)g(are)h(applied)h(for)g(atmospheric)f(refraction)g
-(or)g(p)r(olar)g(motion)h(\(ho)n(w)n(ev)n(er,)f(a)g(correction)597
-5295 y(for)28 b(diurnal)g(ab)r(erattion)g(is)g(applied\).)40
-b(Note,)29 b(unlik)n(e)f(most)h(other)f(celestial)g(co)r(ordinate)f
-(systems,)597 5394 y(this)38 b(system)g(is)g(righ)n(t)f(handed.)68
-b(Also,)40 b(unlik)n(e)e(other)f(SkyF)-7 b(rame)37 b(systems,)j(the)e
-(AzEl)g(system)597 5494 y(is)j(sensitiv)n(e)g(to)g(the)g(timescale)g
-(in)g(whic)n(h)g(the)h(Ep)r(o)r(c)n(h)e(v)-5 b(alue)41
-b(is)g(supplied.)78 b(This)41 b(is)g(b)r(ecause)597 5593
-y(of)c(the)g(gross)d(diurnal)i(rotation)f(whic)n(h)i(this)g(system)f
-(undergo)r(es,)h(causing)f(a)g(small)g(c)n(hange)f(in)597
-5693 y(time)c(to)e(translate)g(to)h(a)g(large)e(rotation.)43
-b(When)30 b(con)n(v)n(erting)e(to)i(or)f(from)h(an)f(AzEl)h(system,)g
-(the)p eop end
-%%Page: 468 478
-TeXDict begin 468 477 bop 0 52 a FF(468)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)597 351
-y Fj(Ep)r(o)r(c)n(h)c(v)-5 b(alue)27 b(for)g(b)r(oth)g(source)f(and)h
-(destination)g(SkyF)-7 b(rames)26 b(should)h(b)r(e)h(supplied)f(in)h
-(the)f(TDB)597 451 y(timescale.)36 b(The)27 b(di\013erence)f(b)r(et)n
-(w)n(een)g(TDB)h(and)f(TT)g(is)h(b)r(et)n(w)n(een)f(1)g(and)g(2)g
-(milliseconds,)g(and)g(so)597 551 y(a)d(TT)h(v)-5 b(alue)23
-b(can)g(usually)g(b)r(e)h(supplied)g(in)g(place)f(of)g(a)h(TDB)f(v)-5
-b(alue.)36 b(The)23 b(TT)h(timescale)f(is)g(related)597
-650 y(to)28 b(T)-7 b(AI)28 b(via)f(TT)g(=)h(T)-7 b(AI)28
-b(+)f(32.184)e(seconds.)510 770 y Fi(\017)45 b Ft(")p
-Fj(ECLIPTIC)p Ft(")p Fj(:)31 b(Ecliptic)20 b(co)r(ordinates)f(\(IA)n(U)
-i(1980\),)f(referred)f(to)h(the)g(ecliptic)h(and)f(mean)f(equino)n(x)
-597 869 y(sp)r(eci\014ed)28 b(b)n(y)f(the)h(qualifying)g(Equino)n(x)e
-(v)-5 b(alue.)510 989 y Fi(\017)45 b Ft(")p Fj(FK4)p
-Ft(")p Fj(:)35 b(The)26 b(old)g(FK4)g(\(barycen)n(tric\))f(equatorial)g
-(co)r(ordinate)g(system,)h(whic)n(h)h(should)f(b)r(e)g(qual-)597
-1089 y(i\014ed)k(b)n(y)g(an)f(Equino)n(x)g(v)-5 b(alue.)43
-b(The)30 b(underlying)g(mo)r(del)f(on)h(whic)n(h)g(this)g(is)g(based)f
-(is)h(non-inertial)597 1188 y(and)f(rotates)f(slo)n(wly)h(with)g(time,)
-h(so)f(for)g(accurate)f(w)n(ork)f(FK4)i(co)r(ordinate)f(systems)h
-(should)g(also)597 1288 y(b)r(e)f(quali\014ed)g(b)n(y)f(an)g(Ep)r(o)r
-(c)n(h)g(v)-5 b(alue.)510 1408 y Fi(\017)45 b Ft(")p
-Fj(FK4-NO-E)p Ft(")24 b Fj(or)h Ft(")p Fj(FK4)p Ft(_)p
-Fj(NO)p Ft(_)p Fj(E)p Ft(")p Fj(:)33 b(The)26 b(old)g(FK4)g(\(barycen)n
-(tric\))f(equatorial)g(system)h(but)g(with-)597 1507
-y(out)32 b(the)g Ft(")p Fj(E-terms)f(of)h(ab)r(erration)p
-Ft(")e Fj(\(e.g.)49 b(some)31 b(radio)g(catalogues\).)48
-b(This)32 b(co)r(ordinate)f(system)597 1607 y(should)d(also)e(b)r(e)i
-(quali\014ed)g(b)n(y)f(b)r(oth)h(an)f(Equino)n(x)g(and)g(an)g(Ep)r(o)r
-(c)n(h)g(v)-5 b(alue.)510 1727 y Fi(\017)45 b Ft(")p
-Fj(FK5)p Ft(")26 b Fj(or)g Ft(")p Fj(EQUA)-7 b(TORIAL)p
-Ft(")p Fj(:)35 b(The)27 b(mo)r(dern)g(FK5)f(\(barycen)n(tric\))g
-(equatorial)g(co)r(ordinate)g(sys-)597 1826 y(tem.)38
-b(This)27 b(should)h(b)r(e)g(quali\014ed)f(b)n(y)g(an)h(Equino)n(x)e(v)
--5 b(alue.)510 1946 y Fi(\017)45 b Ft(")p Fj(GALA)n(CTIC)p
-Ft(")p Fj(:)37 b(Galactic)27 b(co)r(ordinates)f(\(IA)n(U)i(1958\).)510
-2066 y Fi(\017)45 b Ft(")p Fj(GAPPT)p Ft(")p Fj(,)36
-b Ft(")p Fj(GEOCENTRIC)p Ft(")d Fj(or)h Ft(")p Fj(APP)-7
-b(ARENT)p Ft(")p Fj(:)50 b(The)35 b(geo)r(cen)n(tric)e(apparen)n(t)h
-(equatorial)597 2165 y(co)r(ordinate)j(system,)j(whic)n(h)e(giv)n(es)e
-(the)i(apparen)n(t)f(p)r(ositions)g(of)h(sources)e(relativ)n(e)h(to)h
-(the)g(true)597 2265 y(plane)28 b(of)f(the)h(Earth's)e(equator)h(and)g
-(the)h(equino)n(x)f(\(the)h(co)r(ordinate)e(origin\))h(at)g(a)g(time)h
-(sp)r(eci\014ed)597 2365 y(b)n(y)i(the)f(qualifying)g(Ep)r(o)r(c)n(h)h
-(v)-5 b(alue.)42 b(\(Note)30 b(that)g(no)f(Equino)n(x)f(is)i(needed)f
-(to)h(qualify)f(this)h(co)r(ordi-)597 2464 y(nate)e(system)f(b)r
-(ecause)g(no)g(mo)r(del)g Ft(")p Fj(mean)g(equino)n(x)p
-Ft(")f Fj(is)h(in)n(v)n(olv)n(ed.\))36 b(These)27 b(co)r(ordinates)f
-(giv)n(e)g(the)597 2564 y(apparen)n(t)i(righ)n(t)g(ascension)g(and)h
-(declination)f(of)h(a)g(source)e(for)i(a)f(sp)r(eci\014ed)h(date)g(of)g
-(observ)-5 b(ation,)597 2663 y(and)31 b(therefore)f(form)h(an)g(appro)n
-(ximate)e(basis)h(for)h(p)r(oin)n(ting)g(a)g(telescop)r(e.)46
-b(Note,)32 b(ho)n(w)n(ev)n(er,)e(that)597 2763 y(they)35
-b(are)e(applicable)g(to)h(a)g(\014ctitious)g(observ)n(er)e(at)i(the)g
-(Earth's)f(cen)n(tre,)i(and)f(therefore)f(ignore)597
-2863 y(suc)n(h)20 b(e\013ects)g(as)g(atmospheric)f(refraction)g(and)h
-(the)g(\(normally)g(m)n(uc)n(h)g(smaller\))f(ab)r(erration)g(of)h(ligh)
-n(t)597 2962 y(due)34 b(to)f(the)g(rotational)f(v)n(elo)r(cit)n(y)g(of)
-h(the)g(Earth's)f(surface.)53 b(Geo)r(cen)n(tric)32 b(apparen)n(t)g(co)
-r(ordinates)597 3062 y(are)26 b(deriv)n(ed)f(from)i(the)g(standard)e
-(FK5)h(\(J2000.0\))e(barycen)n(tric)h(co)r(ordinates)g(b)n(y)i(taking)e
-(accoun)n(t)597 3162 y(of)h(the)h(gra)n(vitational)c(de\015ection)j(of)
-g(ligh)n(t)g(b)n(y)f(the)i(Sun)f(\(usually)g(small\),)g(the)g(ab)r
-(erration)f(of)h(ligh)n(t)597 3261 y(caused)i(b)n(y)g(the)h(motion)f
-(of)h(the)f(Earth's)g(cen)n(tre)f(with)i(resp)r(ect)g(to)f(the)h
-(barycen)n(tre)d(\(larger\),)i(and)597 3361 y(the)g(precession)e(and)i
-(n)n(utation)f(of)h(the)g(Earth's)e(spin)i(axis)f(\(normally)g(larger)e
-(still\).)510 3480 y Fi(\017)45 b Ft(")p Fj(HELIOECLIPTIC)p
-Ft(")p Fj(:)32 b(Ecliptic)24 b(co)r(ordinates)e(\(IA)n(U)j(1980\),)e
-(referred)f(to)i(the)g(ecliptic)g(and)g(mean)597 3580
-y(equino)n(x)31 b(of)h(J2000.0,)f(in)h(whic)n(h)g(an)f(o\013set)h(is)g
-(added)g(to)f(the)i(longitude)e(v)-5 b(alue)32 b(whic)n(h)g(results)f
-(in)597 3680 y(the)f(cen)n(tre)f(of)g(the)h(sun)g(b)r(eing)f(at)h(zero)
-e(longitude)h(at)h(the)f(date)h(giv)n(en)e(b)n(y)i(the)f(Ep)r(o)r(c)n
-(h)g(attribute.)597 3779 y(A)n(ttempts)k(to)f(set)g(a)f(v)-5
-b(alue)32 b(for)g(the)g(Equino)n(x)f(attribute)h(will)g(b)r(e)g
-(ignored,)g(since)g(this)g(system)g(is)597 3879 y(alw)n(a)n(ys)26
-b(referred)g(to)i(J2000.0.)510 3999 y Fi(\017)45 b Ft(")p
-Fj(ICRS)p Ft(")p Fj(:)54 b(The)36 b(In)n(ternation)f(Celestial)h
-(Reference)f(System,)k(realised)c(through)g(the)i(Hipparcos)597
-4098 y(catalogue.)j(Whilst)30 b(not)f(an)g(equatorial)f(system)h(b)n(y)
-g(de\014nition,)h(the)f(ICRS)h(is)f(v)n(ery)f(close)g(to)h(the)597
-4198 y(FK5)37 b(\(J2000\))e(system)i(and)g(is)g(usually)g(treated)g(as)
-f(an)h(equatorial)f(system.)65 b(The)37 b(distinction)597
-4298 y(b)r(et)n(w)n(een)d(ICRS)h(and)f(FK5)f(\(J2000\))f(only)i(b)r
-(ecomes)g(imp)r(ortan)n(t)g(when)g(accuracies)e(of)i(50)f(milli-)597
-4397 y(arcseconds)26 b(or)h(b)r(etter)h(are)e(required.)36
-b(ICRS)28 b(need)g(not)f(b)r(e)h(quali\014ed)g(b)n(y)f(an)g(Equino)n(x)
-g(v)-5 b(alue.)510 4517 y Fi(\017)45 b Ft(")p Fj(J2000)p
-Ft(")p Fj(:)h(An)34 b(equatorial)e(co)r(ordinate)g(system)h(based)g(on)
-g(the)h(mean)g(dynamical)f(equator)f(and)597 4616 y(equino)n(x)j(of)h
-(the)h(J2000)c(ep)r(o)r(c)n(h.)62 b(The)36 b(dynamical)g(equator)f(and)
-g(equino)n(x)g(di\013er)i(sligh)n(tly)e(from)597 4716
-y(those)40 b(used)h(b)n(y)f(the)h(FK5)f(mo)r(del,)k(and)c(so)g(a)g
-Ft(")p Fj(J2000)p Ft(")d Fj(SkyF)-7 b(rame)40 b(will)g(di\013er)h
-(sligh)n(tly)f(from)597 4816 y(an)31 b Ft(")p Fj(FK5\(Equino)n
-(x=J2000\))p Ft(")26 b Fj(SkyF)-7 b(rame.)47 b(The)32
-b(J2000)d(System)i(need)g(not)g(b)r(e)h(quali\014ed)f(b)n(y)g(an)597
-4915 y(Equino)n(x)c(v)-5 b(alue)510 5035 y Fi(\017)45
-b Ft(")p Fj(SUPER)n(GALA)n(CTIC)p Ft(")p Fj(:)36 b(De)28
-b(V)-7 b(aucouleurs)26 b(Sup)r(ergalactic)h(co)r(ordinates.)510
-5155 y Fi(\017)45 b Ft(")p Fj(UNKNO)n(WN)p Ft(")p Fj(:)54
-b(An)n(y)36 b(other)g(general)f(spherical)g(co)r(ordinate)g(system.)63
-b(No)36 b(Mapping)g(can)g(b)r(e)597 5254 y(created)27
-b(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(SkyF)-7 b(rames)26
-b(if)i(either)g(of)f(the)h(SkyF)-7 b(rames)26 b(has)h(System)g(set)h
-(to)f Ft(")p Fj(Un-)597 5354 y(kno)n(wn)p Ft(")p Fj(.)427
-5494 y(Curren)n(tly)-7 b(,)30 b(the)g(default)h(System)f(v)-5
-b(alue)29 b(is)h Ft(")p Fj(ICRS)p Ft(")p Fj(.)43 b(Ho)n(w)n(ev)n(er,)29
-b(this)h(default)g(ma)n(y)f(c)n(hange)g(in)h(future)427
-5593 y(as)d(new)g(astrometric)e(standards)h(ev)n(olv)n(e.)35
-b(The)27 b(in)n(ten)n(tion)g(is)g(to)g(trac)n(k)e(the)j(most)f(mo)r
-(dern)f(appropriate)427 5693 y(standard.)53 b(F)-7 b(or)33
-b(this)h(reason,)f(y)n(ou)g(should)g(use)g(the)h(default)f(only)g(if)h
-(this)g(is)f(what)g(y)n(ou)g(in)n(tend)g(\(and)p eop
-end
-%%Page: 469 479
-TeXDict begin 469 478 bop 3643 52 a FF(469)427 351 y
-Fj(can)32 b(tolerate)g(an)n(y)f(asso)r(ciated)g(sligh)n(t)h(c)n(hange)f
-(in)i(future\).)51 b(If)33 b(y)n(ou)f(in)n(tend)g(to)g(use)h(the)f
-(ICRS)h(system)427 451 y(inde\014nitely)-7 b(,)29 b(then)f(y)n(ou)f
-(should)g(sp)r(ecify)h(it)g(explicitly)-7 b(.)259 582
-y Fd(Sp)s(ecF)f(rame)427 682 y Fj(The)23 b(Sp)r(ecF)-7
-b(rame)22 b(class)g(supp)r(orts)g(the)h(follo)n(wing)e(System)i(v)-5
-b(alues)22 b(and)h(asso)r(ciated)e(sp)r(ectral)h(co)r(ordinate)427
-781 y(systems)i(\(the)h(default)g(is)g Ft(")p Fj(W)-9
-b(A)g(VE)p Ft(")23 b Fj(-)h(w)n(a)n(v)n(elength\).)35
-b(They)24 b(are)g(all)g(de\014ned)h(in)f(FITS-W)n(CS)h(pap)r(er)f(I)r
-(I)r(I:)510 1002 y Fi(\017)45 b Ft(")p Fj(FREQ)p Ft(")p
-Fj(:)36 b(F)-7 b(requency)27 b(\(GHz\))510 1118 y Fi(\017)45
-b Ft(")p Fj(ENER)p Ft(")27 b Fj(or)f Ft(")p Fj(ENER)n(GY)p
-Ft(")p Fj(:)36 b(Energy)26 b(\(J\))510 1233 y Fi(\017)45
-b Ft(")p Fj(W)-9 b(A)g(VN)p Ft(")28 b Fj(or)f Ft(")p
-Fj(W)-9 b(A)g(VENUM)p Ft(")p Fj(:)36 b(W)-7 b(a)n(v)n(e-n)n(um)n(b)r
-(er)26 b(\(1/m\))510 1349 y Fi(\017)45 b Ft(")p Fj(W)-9
-b(A)g(VE)p Ft(")27 b Fj(or)g Ft(")p Fj(W)-9 b(A)g(VELEN)p
-Ft(")p Fj(:)35 b(V)-7 b(acuum)28 b(w)n(a)n(v)n(e-length)e(\(Angstrom\))
-510 1464 y Fi(\017)45 b Ft(")p Fj(A)-9 b(W)g(A)g(V)p
-Ft(")28 b Fj(or)e Ft(")p Fj(AIR)-9 b(W)g(A)g(VE)p Ft(")p
-Fj(:)36 b(W)-7 b(a)n(v)n(e-length)27 b(in)h(air)e(\(Angstrom\))510
-1579 y Fi(\017)45 b Ft(")p Fj(VRAD)p Ft(")28 b Fj(or)f
-Ft(")p Fj(VRADIO)p Ft(")p Fj(:)37 b(Radio)27 b(v)n(elo)r(cit)n(y)f
-(\(km/s\))510 1695 y Fi(\017)45 b Ft(")p Fj(V)n(OPT)p
-Ft(")26 b Fj(or)h Ft(")p Fj(V)n(OPTICAL)p Ft(")p Fj(:)35
-b(Optical)27 b(v)n(elo)r(cit)n(y)g(\(km/s\))510 1810
-y Fi(\017)45 b Ft(")p Fj(ZOPT)p Ft(")26 b Fj(or)h Ft(")p
-Fj(REDSHIFT)p Ft(")p Fj(:)36 b(Redshift)29 b(\(dimensionless\))510
-1926 y Fi(\017)45 b Ft(")p Fj(BET)-7 b(A)p Ft(")p Fj(:)36
-b(Beta)27 b(factor)g(\(dimensionless\))510 2041 y Fi(\017)45
-b Ft(")p Fj(VELO)p Ft(")26 b Fj(or)h Ft(")p Fj(VREL)p
-Ft(")p Fj(:)36 b(Apparen)n(t)27 b(radial)g(\()p Ft(")p
-Fj(relativistic)p Ft(")p Fj(\))f(v)n(elo)r(cit)n(y)h(\(km/s\))427
-2172 y(The)i(default)h(v)-5 b(alue)29 b(for)f(the)h(Unit)h(attribute)f
-(for)g(eac)n(h)f(system)g(is)h(sho)n(wn)g(in)g(paren)n(theses.)39
-b(Note)29 b(that)427 2272 y(the)g(default)g(v)-5 b(alue)28
-b(for)g(the)g(Activ)n(eUnit)h(\015ag)f(is)g(non-zero)f(for)g(a)h(Sp)r
-(ecF)-7 b(rame,)29 b(meaning)e(that)i(c)n(hanges)427
-2372 y(to)h(the)g(Unit)g(attribute)g(for)f(a)g(Sp)r(ecF)-7
-b(rame)29 b(will)h(result)f(in)h(the)g(Sp)r(ecF)-7 b(rame)29
-b(b)r(eing)h(re-mapp)r(ed)f(within)427 2471 y(its)g(enclosing)f(F)-7
-b(rameSet)28 b(in)h(order)e(to)i(re\015ect)f(the)h(c)n(hange)e(in)i
-(units)g(\(see)g(astSetActiv)n(eUnit)g(function)427 2571
-y(for)e(further)h(information\).)259 2702 y Fd(TimeF)-8
-b(rame)427 2802 y Fj(The)21 b(TimeF)-7 b(rame)21 b(class)f(supp)r(orts)
-h(the)g(follo)n(wing)f(System)h(v)-5 b(alues)21 b(and)g(asso)r(ciated)e
-(co)r(ordinate)h(systems)427 2901 y(\(the)29 b(default)f(is)f
-Ft(")p Fj(MJD)p Ft(")p Fj(\):)510 3122 y Fi(\017)45 b
-Ft(")p Fj(MJD)p Ft(")p Fj(:)37 b(Mo)r(di\014ed)28 b(Julian)f(Date)h
-(\(d\))510 3238 y Fi(\017)45 b Ft(")p Fj(JD)p Ft(")p
-Fj(:)36 b(Julian)28 b(Date)f(\(d\))510 3353 y Fi(\017)45
-b Ft(")p Fj(JEPOCH)p Ft(")p Fj(:)35 b(Julian)27 b(ep)r(o)r(c)n(h)h
-(\(yr\))510 3469 y Fi(\017)45 b Ft(")p Fj(BEPOCH)p Ft(")p
-Fj(:)35 b(Besselian)27 b(\(yr\))427 3600 y(The)34 b(default)f(v)-5
-b(alue)33 b(for)g(the)h(Unit)g(attribute)f(for)g(eac)n(h)f(system)h(is)
-g(sho)n(wn)g(in)g(paren)n(theses.)52 b(Strictly)-7 b(,)427
-3699 y(these)37 b(systems)e(should)i(not)f(allo)n(w)f(c)n(hanges)g(to)h
-(b)r(e)h(made)f(to)g(the)h(units.)63 b(F)-7 b(or)36 b(instance,)i(the)f
-(usual)427 3799 y(de\014nition)26 b(of)g Ft(")p Fj(MJD)p
-Ft(")f Fj(and)h Ft(")p Fj(JD)p Ft(")f Fj(include)h(the)g(statemen)n(t)g
-(that)g(the)g(v)-5 b(alues)26 b(will)g(b)r(e)g(in)g(units)g(of)g(da)n
-(ys.)427 3899 y(Ho)n(w)n(ev)n(er,)d(AST)h(do)r(es)g(allo)n(w)e(the)j
-(use)e(of)h(other)f(units)i(with)f(all)g(the)g(ab)r(o)n(v)n(e)e(supp)r
-(orted)i(systems)f(\(except)427 3998 y(BEPOCH\),)38 b(on)g(the)g
-(understanding)g(that)h(con)n(v)n(ersion)d(to)i(the)g
-Ft(")p Fj(correct)p Ft(")f Fj(units)h(in)n(v)n(olv)n(es)f(nothing)427
-4098 y(more)e(than)g(a)g(simple)h(scaling)e(\(1)i(yr)e(=)h(365.25)f(d,)
-j(1)e(d)h(=)f(24)f(h,)k(1)d(h)h(=)f(60)f(min,)k(1)d(min)h(=)f(60)f
-(s\).)427 4197 y(Besselian)e(ep)r(o)r(c)n(h)h(v)-5 b(alues)33
-b(are)f(de\014ned)i(in)f(terms)g(of)g(tropical)f(y)n(ears)g(of)h
-(365.2422)d(da)n(ys,)j(rather)f(than)427 4297 y(the)27
-b(usual)e(Julian)h(y)n(ear)f(of)h(365.25)e(da)n(ys.)35
-b(Therefore,)25 b(to)h(a)n(v)n(oid)f(an)n(y)g(confusion,)h(the)h(Unit)f
-(attribute)h(is)427 4397 y(automatically)i(cleared)g(to)g
-Ft(")p Fj(yr)p Ft(")g Fj(when)h(a)f(System)h(v)-5 b(alue)29
-b(of)h(BEPOCH)f(System)g(is)h(selected,)g(and)g(an)427
-4496 y(error)c(is)h(rep)r(orted)g(if)h(an)n(y)f(attempt)h(is)g
-(subsequen)n(tly)f(made)g(to)h(c)n(hange)e(the)i(Unit)h(attribute.)427
-4612 y(Note)22 b(that)g(the)h(default)f(v)-5 b(alue)22
-b(for)f(the)i(Activ)n(eUnit)f(\015ag)f(is)h(non-zero)e(for)i(a)f(TimeF)
--7 b(rame,)23 b(meaning)e(that)427 4711 y(c)n(hanges)h(to)h(the)g(Unit)
-h(attribute)g(for)e(a)h(TimeF)-7 b(rame)22 b(will)i(result)f(in)g(the)g
-(TimeF)-7 b(rame)23 b(b)r(eing)g(re-mapp)r(ed)427 4811
-y(within)35 b(its)f(enclosing)e(F)-7 b(rameSet)34 b(in)g(order)e(to)i
-(re\015ect)f(the)i(c)n(hange)d(in)i(units)g(\(see)g(astSetActiv)n
-(eUnit)427 4911 y(function)28 b(for)g(further)f(information\).)259
-5042 y Fd(FluxF)-8 b(rame)427 5141 y Fj(The)30 b(FluxF)-7
-b(rame)30 b(class)f(supp)r(orts)g(the)i(follo)n(wing)d(System)j(v)-5
-b(alues)29 b(and)h(asso)r(ciated)e(systems)i(for)f(mea-)427
-5241 y(suring)e(observ)n(ed)f(v)-5 b(alue:)510 5462 y
-Fi(\017)45 b Ft(")p Fj(FLXDN)p Ft(")p Fj(:)37 b(Flux)28
-b(p)r(er)g(unit)g(frequency)f(\(W/m)p Fi(^)p Fj(2/Hz\))510
-5578 y Fi(\017)45 b Ft(")p Fj(FLXDNW)p Ft(")p Fj(:)38
-b(Flux)28 b(p)r(er)f(unit)h(w)n(a)n(v)n(elength)e(\(W/m)p
-Fi(^)p Fj(2/Angstrom\))510 5693 y Fi(\017)45 b Ft(")p
-Fj(SF)n(CBR)p Ft(")p Fj(:)36 b(Surface)27 b(brigh)n(tness)g(in)h
-(frequency)f(units)h(\(W/m)p Fi(^)p Fj(2/Hz/arcmin)p
-Fi(\003\003)p Fj(2\))p eop end
-%%Page: 470 480
-TeXDict begin 470 479 bop 0 52 a FF(470)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)510 351
-y Fi(\017)45 b Ft(")p Fj(SF)n(CBR)-9 b(W)p Ft(")p Fj(:)36
-b(Surface)28 b(brigh)n(tness)e(in)i(w)n(a)n(v)n(elength)e(units)i
-(\(W/m)p Fi(^)p Fj(2/Angstrom/arcmin)p Fi(\003\003)p
-Fj(2\))427 477 y(The)h(ab)r(o)n(v)n(e)e(lists)h(sp)r(eci\014ed)h(the)f
-(default)h(units)g(for)f(eac)n(h)f(System.)39 b(If)29
-b(an)f(explicit)h(v)-5 b(alue)28 b(is)g(set)g(for)g(the)427
-576 y(Unit)e(attribute)f(but)g(no)g(v)-5 b(alue)25 b(is)g(set)f(for)h
-(System,)g(then)h(the)f(default)g(System)g(v)-5 b(alue)25
-b(is)g(determined)g(b)n(y)427 676 y(the)j(Unit)f(string)g(\(if)g(the)h
-(units)f(are)f(not)h(appropriate)e(for)h(describing)h(an)n(y)f(of)h
-(the)g(supp)r(orted)g(Systems)427 775 y(then)19 b(an)f(error)f(will)i
-(b)r(e)f(rep)r(orted)g(when)h(an)f(attempt)h(is)f(made)h(to)f(access)f
-(the)i(System)g(v)-5 b(alue\).)34 b(If)19 b(no)f(v)-5
-b(alue)427 875 y(has)31 b(b)r(een)i(sp)r(eci\014ed)f(for)f(either)g
-(Unit)i(or)e(System,)h(then)h(System=FLXDN)f(and)g(Unit=W/m)p
-Fi(^)p Fj(2/Hz)427 975 y(are)27 b(used.)p 0 1159 3780
-12 v 0 1297 a Fz(T)-11 b(extLab\(axis\))1038 1291 y Fe(Dra)m(w)37
-b(descriptiv)m(e)g(axis)h(lab)s(els)g(for)g(a)1754 1405
-y(Plot?)2960 1297 y Fz(T)-11 b(extLab\(axis\))0 1560
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 1660 y(astGrid)c(function\))h(b)n(y)f(determining)
-g(whether)h(textual)f(lab)r(els)g(should)g(b)r(e)h(dra)n(wn)e(to)h
-(describ)r(e)g(the)h(quan)n(tit)n(y)227 1760 y(b)r(eing)h(represen)n
-(ted)f(on)h(eac)n(h)f(axis)g(of)h(a)f(Plot.)37 b(It)29
-b(tak)n(es)e(a)g(separate)f(v)-5 b(alue)28 b(for)g(eac)n(h)f(ph)n
-(ysical)g(axis)g(of)h(a)f(Plot)227 1859 y(so)e(that,)i(for)e(instance,)
-g(the)h(setting)g Ft(")p Fj(T)-7 b(extLab\(2\)=1)p Ft(")24
-b Fj(sp)r(eci\014es)h(that)h(descriptiv)n(e)f(lab)r(els)g(should)h(b)r
-(e)g(dra)n(wn)227 1959 y(for)h(the)h(second)f(axis.)227
-2080 y(If)h(the)f(T)-7 b(extLab)27 b(v)-5 b(alue)27 b(of)g(a)g(Plot)f
-(axis)g(is)h(non-zero,)f(then)h(descriptiv)n(e)g(lab)r(els)g(will)g(b)r
-(e)g(dra)n(wn)f(for)h(that)g(axis,)227 2179 y(otherwise)j(they)h(will)g
-(b)r(e)g(omitted.)47 b(The)30 b(default)h(b)r(eha)n(viour)f(is)g(to)h
-(dra)n(w)f(descriptiv)n(e)g(lab)r(els)g(if)h(tic)n(k)g(marks)227
-2279 y(and)37 b(n)n(umerical)f(lab)r(els)h(are)f(b)r(eing)h(dra)n(wn)f
-(around)g(the)h(edges)f(of)h(the)g(plotting)g(area)f(\(see)h(the)g(Lab)
-r(elling)227 2378 y(attribute\),)28 b(but)h(to)e(omit)h(them)g
-(otherwise.)0 2520 y Fd(T)m(yp)s(e:)227 2620 y Fj(In)n(teger)f(\(b)r(o)
-r(olean\).)0 2762 y Fd(Class)k(Applicabilit)m(y:)259
-2891 y(Plot)427 2990 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g(attribute.)
-0 3145 y Fd(Notes:)340 3420 y Fi(\017)45 b Fj(The)c(text)g(used)f(for)g
-(the)h(descriptiv)n(e)f(lab)r(els)g(is)h(deriv)n(ed)e(from)i(the)f
-(Plot's)g(Lab)r(el\(axis\))g(attribute,)427 3519 y(together)27
-b(with)h(its)g(Unit\(axis\))g(attribute)g(if)g(appropriate)e(\(see)h
-(the)h(Lab)r(elUnits\(axis\))g(attribute\).)340 3645
-y Fi(\017)45 b Fj(The)20 b(dra)n(wing)f(of)h(n)n(umerical)f(axis)h(lab)
-r(els)f(for)h(a)g(Plot)f(\(whic)n(h)h(indicate)g(v)-5
-b(alues)20 b(on)g(the)g(axis\))g(is)g(con)n(trolled)427
-3744 y(b)n(y)28 b(the)g(NumLab\(axis\))f(attribute.)340
-3870 y Fi(\017)45 b Fj(If)36 b(no)g(axis)e(is)i(sp)r(eci\014ed,)i
-(\(e.g.)60 b Ft(")p Fj(T)-7 b(extLab)p Ft(")35 b Fj(instead)g(of)h
-Ft(")p Fj(T)-7 b(extLab\(2\))p Ft(")p Fj(\),)37 b(then)f(a)f
-Ft(")p Fj(set)p Ft(")g Fj(or)f Ft(")p Fj(clear)p Ft(")427
-3969 y Fj(op)r(eration)23 b(will)i(a\013ect)f(the)h(attribute)f(v)-5
-b(alue)24 b(of)g(all)g(the)h(Plot)e(axes,)h(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)g Ft(")p Fj(test)p Ft(")h
-Fj(op)r(eration)427 4069 y(will)k(use)g(just)g(the)g(T)-7
-b(extLab\(1\))27 b(v)-5 b(alue.)p 0 4253 V 0 4391 a Fz(T)-11
-b(extLabGap\(axis\))1332 4385 y Fe(Spacing)38 b(of)g(descriptiv)m(e)
-1360 4499 y(axis)g(lab)s(els)g(for)g(a)g(Plot)2714 4391
-y Fz(T)-11 b(extLabGap\(axis\))0 4654 y Fd(Description:)44
-b Fj(This)30 b(attribute)g(con)n(trols)e(the)i(app)r(earance)f(of)g(an)
-h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n(wn)g(with)h(the)227
-4754 y(astGrid)c(function\))h(b)n(y)f(determining)g(where)g(descriptiv)
-n(e)f(axis)g(lab)r(els)h(are)g(placed)f(relativ)n(e)h(to)g(the)g(axes)f
-(they)227 4854 y(describ)r(e.)36 b(It)27 b(tak)n(es)e(a)g(separate)g(v)
--5 b(alue)25 b(for)h(eac)n(h)f(ph)n(ysical)g(axis)g(of)h(a)g(Plot)f(so)
-g(that,)i(for)e(instance,)h(the)h(setting)227 4953 y
-Ft(")p Fj(T)-7 b(extLabGap\(2\)=0.01)p Ft(")25 b Fj(sp)r(eci\014es)i
-(where)g(the)h(descriptiv)n(e)f(lab)r(el)h(for)f(the)h(second)f(axis)g
-(should)g(b)r(e)h(dra)n(wn.)227 5074 y(F)-7 b(or)27 b(eac)n(h)f(axis,)h
-(the)g(T)-7 b(extLabGap)27 b(v)-5 b(alue)27 b(giv)n(es)f(the)h(spacing)
-f(b)r(et)n(w)n(een)i(the)f(descriptiv)n(e)f(lab)r(el)i(and)f(the)g
-(edge)227 5174 y(of)k(a)f(b)r(o)n(x)g(enclosing)g(all)g(other)g(parts)g
-(of)g(the)h(annotated)f(grid)g(\(excluding)h(other)f(descriptiv)n(e)g
-(lab)r(els\).)46 b(The)227 5273 y(gap)25 b(is)g(measured)f(to)h(the)h
-(nearest)f(edge)f(of)i(the)f(lab)r(el)h(\(i.e.)36 b(the)26
-b(top)f(or)f(the)i(b)r(ottom\).)37 b(P)n(ositiv)n(e)23
-b(v)-5 b(alues)25 b(cause)227 5373 y(the)32 b(descriptiv)n(e)e(lab)r
-(el)i(to)f(b)r(e)g(placed)g(outside)g(the)h(b)r(ounding)f(b)r(o)n(x,)h
-(while)f(negativ)n(e)f(v)-5 b(alues)31 b(cause)f(it)i(to)f(b)r(e)227
-5473 y(placed)d(inside.)227 5593 y(The)34 b(T)-7 b(extLabGap)32
-b(v)-5 b(alue)33 b(should)g(b)r(e)h(giv)n(en)f(as)f(a)h(fraction)g(of)g
-(the)h(minim)n(um)g(dimension)f(of)g(the)h(plotting)227
-5693 y(area,)26 b(the)i(default)g(v)-5 b(alue)28 b(b)r(eing)g(+0.01.)p
-eop end
-%%Page: 471 481
-TeXDict begin 471 480 bop 3643 52 a FF(471)0 351 y Fd(T)m(yp)s(e:)227
-451 y Fj(Floating)27 b(p)r(oin)n(t.)0 600 y Fd(Class)k(Applicabilit)m
-(y:)259 737 y(Plot)427 837 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 999 y Fd(Notes:)340 1281 y Fi(\017)45 b
-Fj(If)25 b(dra)n(wn,)f(descriptiv)n(e)g(lab)r(els)g(are)g(alw)n(a)n(ys)
-e(placed)j(at)f(the)h(edges)f(of)g(the)h(plotting)g(area,)e(ev)n(en)h
-(although)427 1381 y(the)c(corresp)r(onding)e(n)n(umerical)h(lab)r(els)
-g(ma)n(y)g(b)r(e)h(dra)n(wn)f(along)f(axis)h(lines)h(in)g(the)g(in)n
-(terior)e(of)i(the)g(plotting)427 1481 y(area)26 b(\(see)i(the)g(Lab)r
-(elling)f(attribute\).)340 1614 y Fi(\017)45 b Fj(If)36
-b(no)e(axis)g(is)h(sp)r(eci\014ed,)i(\(e.g.)58 b Ft(")p
-Fj(T)-7 b(extLabGap)p Ft(")34 b Fj(instead)g(of)h Ft(")p
-Fj(T)-7 b(extLabGap\(2\))p Ft(")p Fj(\),)36 b(then)f(a)f
-Ft(")p Fj(set)p Ft(")g Fj(or)427 1713 y Ft(")p Fj(clear)p
-Ft(")28 b Fj(op)r(eration)g(will)i(a\013ect)g(the)g(attribute)g(v)-5
-b(alue)29 b(of)h(all)f(the)h(Plot)f(axes,)g(while)h(a)f
-Ft(")p Fj(get)p Ft(")f Fj(or)h Ft(")p Fj(test)p Ft(")427
-1813 y Fj(op)r(eration)e(will)h(use)f(just)h(the)g(T)-7
-b(extLabGap\(1\))27 b(v)-5 b(alue.)p 0 2012 3780 12 v
-0 2144 a Fz(Tic)l(kAll)441 b Fe(Dra)m(w)37 b(tic)m(k)h(marks)g(on)g
-(all)g(edges)h(of)f(a)g(Plot?)439 b Fz(Tic)l(kAll)0 2337
-y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)i
-(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 2437 y(astGrid)d(function\))i(b)n(y)e(determining)
-h(whether)f(tic)n(k)g(marks)g(should)g(b)r(e)h(dra)n(wn)f(on)g(all)h
-(edges)e(of)i(a)f(Plot.)227 2562 y(If)h(the)g(Tic)n(kAll)f(v)-5
-b(alue)27 b(of)h(a)e(Plot)h(is)g(non-zero)f(\(the)i(default\),)g(then)g
-(tic)n(k)f(marks)g(will)g(b)r(e)h(dra)n(wn)e(on)h(all)g(edges)227
-2661 y(of)c(the)g(Plot.)35 b(Otherwise,)23 b(they)g(will)g(b)r(e)g(dra)
-n(wn)f(only)g(on)h(those)f(edges)g(where)h(the)g(n)n(umerical)f(and)g
-(descriptiv)n(e)227 2761 y(axis)27 b(lab)r(els)g(are)g(dra)n(wn)g
-(\(see)g(the)h(Edge\(axis\))f(attribute\).)0 2911 y Fd(T)m(yp)s(e:)227
-3010 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0 3160 y Fd(Class)k
-(Applicabilit)m(y:)259 3296 y(Plot)427 3396 y Fj(All)d(Plots)f(ha)n(v)n
-(e)g(this)g(attribute.)0 3558 y Fd(Notes:)340 3841 y
-Fi(\017)45 b Fj(In)26 b(some)g(circumstances,)f(n)n(umerical)g(lab)r
-(els)h(and)g(tic)n(k)g(marks)f(are)g(dra)n(wn)g(along)g(grid)g(lines)h
-(inside)g(the)427 3940 y(plotting)34 b(area,)g(rather)f(than)h(around)f
-(its)i(edges)e(\(see)h(the)g(Lab)r(elling)g(attribute\).)56
-b(In)34 b(this)g(case,)h(the)427 4040 y(v)-5 b(alue)28
-b(of)f(the)h(Tic)n(kAll)g(attribute)g(is)f(ignored.)p
-0 4239 V 0 4371 a Fz(TimeOrigin)153 b Fe(The)35 b(zero)f(p)s(oin)m(t)f
-(for)h(TimeF)-10 b(rame)33 b(axis)h(v)-7 b(alues)152
-b Fz(TimeOrigin)0 4560 y Fd(Description:)44 b Fj(This)c(sp)r(eci\014es)
-f(the)g(origin)g(from)f(whic)n(h)i(all)f(time)g(v)-5
-b(alues)39 b(are)g(measured.)71 b(The)39 b(default)h(v)-5
-b(alue)227 4660 y(\(zero\))24 b(results)h(in)f(the)h(TimeF)-7
-b(rame)25 b(describing)e(absolute)h(time)i(v)-5 b(alues)24
-b(in)h(the)g(system)f(giv)n(en)g(b)n(y)g(the)h(System)227
-4759 y(attribute)33 b(\(e.g.)53 b(MJD,)33 b(Julian)f(ep)r(o)r(c)n(h,)j
-(etc\).)53 b(If)33 b(a)g(TimeF)-7 b(rame)32 b(is)h(to)f(b)r(e)i(used)f
-(to)f(describ)r(e)h(elapsed)f(time)227 4859 y(since)f(some)f(origin,)h
-(the)g(TimeOrigin)f(attribute)h(should)f(b)r(e)h(set)g(to)g(hold)g(the)
-g(required)f(origin)f(v)-5 b(alue.)47 b(The)227 4958
-y(TimeOrigin)18 b(v)-5 b(alue)19 b(stored)g(inside)g(the)h(TimeF)-7
-b(rame)18 b(structure)h(is)g(mo)r(di\014ed)h(whenev)n(er)e(TimeF)-7
-b(rame)18 b(attribute)227 5058 y(v)-5 b(alues)27 b(are)g(c)n(hanged)g
-(so)g(that)g(it)h(refers)f(to)h(the)g(original)e(momen)n(t)h(in)h
-(time.)0 5208 y Fd(T)m(yp)s(e:)227 5307 y Fj(Floating)f(p)r(oin)n(t.)0
-5457 y Fd(Class)k(Applicabilit)m(y:)259 5593 y(TimeF)-8
-b(rame)427 5693 y Fj(All)28 b(TimeF)-7 b(rames)27 b(ha)n(v)n(e)g(this)h
-(attribute.)p eop end
-%%Page: 472 482
-TeXDict begin 472 481 bop 0 52 a FF(472)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)-2 351 y
-Fd(Input)i(F)-8 b(ormats)n(:)227 497 y Fj(The)43 b(formats)f(accepted)h
-(when)g(setting)g(a)f(TimeOrigin)g(v)-5 b(alue)43 b(are)f(listed)h(b)r
-(elo)n(w.)83 b(They)42 b(are)g(all)h(case-)227 597 y(insensitiv)n(e)27
-b(and)h(are)f(generally)f(toleran)n(t)g(of)i(extra)e(white)i(space)f
-(and)h(alternativ)n(e)e(\014eld)i(delimiters:)340 879
-y Fi(\017)45 b Fj(Besselian)33 b(Ep)r(o)r(c)n(h:)48 b(Expressed)32
-b(in)i(decimal)f(y)n(ears,)h(with)g(or)e(without)i(decimal)g(places)f
-(\()p Ft(")p Fj(B1950)p Ft(")d Fj(or)427 978 y Ft(")p
-Fj(B1976.13)p Ft(")24 b Fj(for)j(example\).)340 1118
-y Fi(\017)45 b Fj(Julian)e(Ep)r(o)r(c)n(h:)67 b(Expressed)42
-b(in)h(decimal)g(y)n(ears,)i(with)e(or)g(without)g(decimal)g(places)f
-(\()p Ft(")p Fj(J2000)p Ft(")e Fj(or)427 1218 y Ft(")p
-Fj(J2100.9)p Ft(")24 b Fj(for)j(example\).)340 1357 y
-Fi(\017)45 b Fj(Units:)62 b(An)40 b(unquali\014ed)g(decimal)f(v)-5
-b(alue)39 b(is)h(in)n(terpreted)f(as)g(a)g(v)-5 b(alue)40
-b(in)g(the)g(system)f(sp)r(eci\014ed)h(b)n(y)427 1457
-y(the)35 b(TimeF)-7 b(rame's)34 b(System)h(attribute,)i(in)e(the)g
-(units)g(giv)n(en)f(b)n(y)g(the)h(TimeF)-7 b(rame's)34
-b(Unit)h(attribute.)427 1556 y(Alternativ)n(ely)-7 b(,)35
-b(an)f(appropriate)e(unit)j(string)e(can)g(b)r(e)i(app)r(ended)f(to)g
-(the)g(end)g(of)g(the)g(\015oating)f(p)r(oin)n(t)427
-1656 y(v)-5 b(alue)20 b(\()p Ft(")p Fj(123.4)d(d)p Ft(")i
-Fj(for)g(example\),)i(in)e(whic)n(h)h(case)e(the)i(supplied)g(v)-5
-b(alue)19 b(is)g(scaled)g(in)n(to)g(the)h(units)f(sp)r(eci\014ed)427
-1756 y(b)n(y)28 b(the)g(Unit)g(attribute.)340 1895 y
-Fi(\017)45 b Fj(Julian)27 b(Date:)38 b(With)28 b(or)f(without)h
-(decimal)f(places)g(\()p Ft(")p Fj(JD)h(2454321.9)p Ft(")23
-b Fj(for)k(example\).)340 2035 y Fi(\017)45 b Fj(Mo)r(di\014ed)28
-b(Julian)f(Date:)37 b(With)29 b(or)e(without)h(decimal)f(places)g(\()p
-Ft(")p Fj(MJD)h(54321.4)p Ft(")c Fj(for)j(example\).)340
-2175 y Fi(\017)45 b Fj(Gregorian)32 b(Calendar)g(Date:)48
-b(With)35 b(the)f(mon)n(th)f(expressed)f(either)i(as)e(an)h(in)n(teger)
-g(or)f(a)h(3-c)n(haracter)427 2275 y(abbreviation,)27
-b(and)g(with)i(optional)e(decimal)g(places)g(to)h(represen)n(t)f(a)g
-(fraction)g(of)h(a)f(da)n(y)g(\()p Ft(")p Fj(1996-10-2)p
-Ft(")427 2374 y Fj(or)f Ft(")p Fj(1996-Oct-2.6)p Ft(")d
-Fj(for)j(example\).)37 b(If)27 b(no)g(fractional)f(part)g(of)h(a)g(da)n
-(y)f(is)h(giv)n(en,)f(the)i(time)f(refers)f(to)h(the)427
-2474 y(start)g(of)h(the)g(da)n(y)f(\(zero)f(hours\).)340
-2613 y Fi(\017)45 b Fj(Gregorian)18 b(Date)h(and)g(Time:)33
-b(An)n(y)20 b(calendar)e(date)h(\(as)g(ab)r(o)n(v)n(e\))f(but)i(with)g
-(a)f(fraction)g(of)g(a)g(da)n(y)g(expressed)427 2713
-y(as)28 b(hours,)h(min)n(utes)g(and)f(seconds)g(\()p
-Ft(")p Fj(1996-Oct-2)e(12:13:56.985)p Ft(")e Fj(for)k(example\).)41
-b(The)29 b(date)f(and)h(time)427 2813 y(can)e(b)r(e)h(separated)f(b)n
-(y)g(a)g(space)g(or)g(b)n(y)g(a)g Ft(")p Fj(T)p Ft(")g
-Fj(\(as)g(used)h(b)n(y)f(ISO8601)f(format\).)-2 2988
-y Fd(Output)32 b(F)-8 b(ormat)n(:)227 3134 y Fj(When)27
-b(enquiring)e(TimeOrigin)g(v)-5 b(alues,)26 b(the)h(returned)e
-(formatted)h(\015oating)f(p)r(oin)n(t)i(v)-5 b(alue)26
-b(represen)n(ts)e(a)i(v)-5 b(alue)227 3234 y(in)28 b(the)g(TimeF)-7
-b(rame's)27 b(System,)h(in)g(the)g(unit)g(sp)r(eci\014ed)g(b)n(y)f(the)
-h(TimeF)-7 b(rame's)27 b(Unit)i(attribute.)p 0 3447 3780
-12 v 0 3579 a Fz(TimeScale)1014 b Fe(Time)38 b(scale)1013
-b Fz(TimeScale)0 3758 y Fd(Description:)44 b Fj(This)23
-b(attribute)g(iden)n(ti\014es)f(the)h(time)g(scale)f(to)h(whic)n(h)f
-(the)h(time)g(axis)f(v)-5 b(alues)22 b(of)h(a)f(TimeF)-7
-b(rame)22 b(refer,)227 3858 y(and)28 b(ma)n(y)f(tak)n(e)f(an)n(y)h(of)h
-(the)g(v)-5 b(alues)27 b(listed)h(in)g(the)g Ft(")p Fj(Time)f(Scales)p
-Ft(")g Fj(section)g(\(b)r(elo)n(w\).)227 3989 y(The)20
-b(default)g(TimeScale)g(v)-5 b(alue)19 b(dep)r(ends)i(on)e(the)h
-(curren)n(t)f(System)h(v)-5 b(alue;)22 b(if)e(the)h(curren)n(t)e(TimeF)
--7 b(rame)19 b(system)227 4089 y(is)31 b Ft(")p Fj(Besselian)e(ep)r(o)r
-(c)n(h)p Ft(")h Fj(the)h(default)g(is)f Ft(")p Fj(TT)p
-Ft(")p Fj(,)h(otherwise)e(it)i(is)g Ft(")p Fj(T)-7 b(AI)p
-Ft(")p Fj(.)45 b(Note,)31 b(if)g(the)g(System)g(attribute)g(is)227
-4188 y(set)23 b(so)g(that)g(the)g(TimeF)-7 b(rame)23
-b(represen)n(ts)f(Besselian)g(Ep)r(o)r(c)n(h,)h(then)h(an)f(error)e
-(will)i(b)r(e)g(rep)r(orted)g(if)g(an)g(attempt)227 4288
-y(is)28 b(made)f(to)h(set)f(the)h(TimeScale)f(to)h(an)n(ything)f(other)
-g(than)h(TT.)227 4419 y(Note,)22 b(the)e(supp)r(orted)g(time)h(scales)e
-(fall)h(in)n(to)f(t)n(w)n(o)h(groups.)33 b(The)20 b(\014rst)g(group)e
-(con)n(taining)h(UT1,)j(GMST,)e(LAST)227 4519 y(and)29
-b(LMST)h(de\014ne)f(time)h(in)f(terms)g(of)g(the)g(orien)n(tation)f(of)
-h(the)h(earth.)41 b(The)29 b(second)f(group)g(\(con)n(taining)h(all)227
-4619 y(the)k(remaining)f(time)h(scales\))f(de\014ne)h(time)g(in)g
-(terms)g(of)f(an)h(atomic)f(pro)r(cess.)51 b(Since)33
-b(the)g(rate)f(of)h(rotation)227 4718 y(of)28 b(the)h(earth)e(v)-5
-b(aries)27 b(in)h(an)g(unpredictable)g(w)n(a)n(y)-7 b(,)27
-b(con)n(v)n(ersion)f(b)r(et)n(w)n(een)i(t)n(w)n(o)f(timescales)h(in)g
-(di\013eren)n(t)g(groups)227 4818 y(relies)i(on)f(a)h(v)-5
-b(alue)30 b(b)r(eing)g(supplied)g(for)g(the)g(Dut1)h(attribute)f
-(\(de\014ned)g(b)n(y)g(the)g(paren)n(t)g(F)-7 b(rame)29
-b(class\).)44 b(This)227 4918 y(attribute)30 b(sp)r(eci\014es)g(the)g
-(di\013erence)f(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h(UTC)f(time)i
-(scales,)e(in)h(seconds,)f(and)g(defaults)227 5017 y(to)f(zero.)36
-b(See)27 b(the)h(do)r(cumen)n(tation)f(for)g(the)h(Dut1)g(attribute)g
-(for)f(further)h(details.)0 5180 y Fd(T)m(yp)s(e:)227
-5280 y Fj(String.)0 5443 y Fd(Class)j(Applicabilit)m(y:)259
-5593 y(TimeF)-8 b(rame)427 5693 y Fj(All)28 b(TimeF)-7
-b(rames)27 b(ha)n(v)n(e)g(this)h(attribute.)p eop end
-%%Page: 473 483
-TeXDict begin 473 482 bop 3643 52 a FF(473)-2 351 y Fd(Time)31
-b(Scales)n(:)227 497 y Fj(The)d(TimeF)-7 b(rame)27 b(class)g(supp)r
-(orts)g(the)h(follo)n(wing)e(TimeScale)i(v)-5 b(alues)27
-b(\(all)h(are)e(case-insensitiv)n(e\):)340 759 y Fi(\017)45
-b Ft(")p Fj(T)-7 b(AI)p Ft(")27 b Fj(-)h(In)n(ternational)e(A)n(tomic)i
-(Time)340 892 y Fi(\017)45 b Ft(")p Fj(UTC)p Ft(")27
-b Fj(-)h(Co)r(ordinated)e(Univ)n(ersal)h(Time)340 1025
-y Fi(\017)45 b Ft(")p Fj(UT1)p Ft(")27 b Fj(-)g(Univ)n(ersal)g(Time)340
-1158 y Fi(\017)45 b Ft(")p Fj(GMST)p Ft(")27 b Fj(-)h(Green)n(wic)n(h)e
-(Mean)i(Sidereal)f(Time)340 1292 y Fi(\017)45 b Ft(")p
-Fj(LAST)p Ft(")27 b Fj(-)h(Lo)r(cal)f(Apparen)n(t)g(Sidereal)g(Time)340
-1425 y Fi(\017)45 b Ft(")p Fj(LMST)p Ft(")27 b Fj(-)h(Lo)r(cal)e(Mean)i
-(Sidereal)f(Time)340 1558 y Fi(\017)45 b Ft(")p Fj(TT)p
-Ft(")27 b Fj(-)g(T)-7 b(errestrial)26 b(Time)340 1691
-y Fi(\017)45 b Ft(")p Fj(TDB)p Ft(")27 b Fj(-)h(Barycen)n(tric)d
-(Dynamical)j(Time)340 1824 y Fi(\017)45 b Ft(")p Fj(TCB)p
-Ft(")27 b Fj(-)g(Barycen)n(tric)f(Co)r(ordinate)g(Time)340
-1957 y Fi(\017)45 b Ft(")p Fj(TCG)p Ft(")27 b Fj(-)h(Geo)r(cen)n(tric)e
-(Co)r(ordinate)h(Time)340 2090 y Fi(\017)45 b Ft(")p
-Fj(L)-7 b(T)p Ft(")27 b Fj(-)g(Lo)r(cal)g(Time)h(\(the)g(o\013set)g
-(from)f(UTC)h(is)f(giv)n(en)g(b)n(y)h(attribute)f(L)-7
-b(TO\013set\))227 2253 y(An)19 b(v)n(ery)e(informativ)n(e)h
-(description)g(of)g(these)g(and)h(other)e(time)i(scales)f(is)g(a)n(v)-5
-b(ailable)17 b(at)h(h)n(ttp://www.ucolic)n(k.org/)p Fi(\030)p
-Fj(sla/leapsecs/timesca)o(les.h)n(tml.)-2 2403 y Fd(UTC)33
-b(W)-8 b(arnings)n(:)227 2549 y Fj(UTC)31 b(should)g(ideally)f(b)r(e)h
-(expressed)f(using)g(separate)g(hours,)g(min)n(utes)h(and)g(seconds)f
-(\014elds)g(\(or)g(at)h(least)f(in)227 2648 y(seconds)e(for)f(a)h(giv)n
-(en)g(date\))g(if)h(leap)f(seconds)f(are)g(to)h(b)r(e)h(tak)n(en)f(in)n
-(to)g(accoun)n(t.)38 b(Since)28 b(the)h(TimeF)-7 b(rame)28
-b(class)227 2748 y(represen)n(ts)e(eac)n(h)f(momen)n(t)i(in)g(time)g
-(using)g(a)f(single)g(\015oating)g(p)r(oin)n(t)h(n)n(um)n(b)r(er)g
-(\(the)g(axis)f(v)-5 b(alue\))27 b(there)f(will)h(b)r(e)227
-2848 y(an)f(am)n(biguit)n(y)f(during)g(a)h(leap)g(second.)35
-b(Th)n(us)26 b(an)g(error)e(of)i(up)g(to)g(1)f(second)g(can)h(result)g
-(when)g(using)f(AST)i(to)227 2947 y(con)n(v)n(ert)i(a)h(UTC)h(time)f
-(to)h(another)e(time)i(scale)e(if)i(the)g(time)g(o)r(ccurs)e(within)i
-(a)f(leap)g(second.)45 b(Leap)29 b(seconds)227 3047 y(o)r(ccur)f(at)h
-(most)g(t)n(wice)f(a)h(y)n(ear,)e(and)i(are)f(in)n(tro)r(duced)g(to)h
-(tak)n(e)f(accoun)n(t)g(of)h(v)-5 b(ariation)28 b(in)h(the)g(rotation)e
-(of)i(the)227 3147 y(earth.)35 b(The)22 b(most)g(recen)n(t)f(leap)h
-(second)f(o)r(ccurred)g(on)h(1st)f(Jan)n(uary)f(1999.)33
-b(Although)23 b(in)f(the)g(v)-5 b(ast)22 b(ma)5 b(jorit)n(y)21
-b(of)227 3246 y(cases)g(leap)h(second)g(am)n(biguities)f(w)n(on't)h
-(matter,)h(there)f(are)f(p)r(oten)n(tial)h(problems)g(in)g(on-line)g
-(data)f(acquisition)227 3346 y(systems)27 b(and)h(in)g(critical)f
-(applications)f(in)n(v)n(olving)g(taking)h(the)h(di\013erence)g(b)r(et)
-n(w)n(een)g(t)n(w)n(o)e(times.)p 0 3546 3780 12 v 0 3677
-a Fz(Title)1325 b Fe(F)-10 b(rame)38 b(title)1323 b Fz(Title)0
-3848 y Fd(Description:)44 b Fj(This)25 b(attribute)g(holds)g(a)f
-(string)g(whic)n(h)h(is)g(used)f(as)h(a)f(title)i(in)f(\(e.g.\))36
-b(graphical)23 b(output)i(to)g(describ)r(e)227 3948 y(the)32
-b(co)r(ordinate)d(system)i(whic)n(h)g(a)f(F)-7 b(rame)31
-b(represen)n(ts.)45 b(Examples)30 b(migh)n(t)h(b)r(e)g
-Ft(")p Fj(Detector)f(Co)r(ordinates)p Ft(")f Fj(or)227
-4047 y Ft(")p Fj(Galactic)e(Co)r(ordinates)p Ft(")p Fj(.)227
-4172 y(If)g(a)f(Title)h(v)-5 b(alue)26 b(has)g(not)g(b)r(een)h(set)f
-(for)g(a)g(F)-7 b(rame,)26 b(then)g(a)g(suitable)h(default)f(is)h
-(supplied,)g(dep)r(ending)f(on)g(the)227 4272 y(class)h(of)g(the)h(F)-7
-b(rame.)0 4422 y Fd(T)m(yp)s(e:)227 4521 y Fj(String.)0
-4671 y Fd(Class)31 b(Applicabilit)m(y:)259 4808 y(F)-8
-b(rame)427 4908 y Fj(The)33 b(default)g(supplied)g(b)n(y)f(the)h(F)-7
-b(rame)32 b(class)g(is)g Ft(")p Fl(<)p Fj(n)p Fl(>)p
-Fj(-d)f(co)r(ordinate)h(system)p Ft(")p Fj(,)h(where)f
-Fl(<)p Fj(n)p Fl(>)g Fj(is)g(the)427 5008 y(n)n(um)n(b)r(er)c(of)f(F)-7
-b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259 5141 y
-Fd(CmpF)-8 b(rame)427 5240 y Fj(The)30 b(CmpF)-7 b(rame)30
-b(class)f(re-de\014nes)g(the)h(default)h(Title)f(v)-5
-b(alue)30 b(to)g(b)r(e)g Ft(")p Fl(<)p Fj(n)p Fl(>)p
-Fj(-d)f(comp)r(ound)h(co)r(ordinate)427 5340 y(system)p
-Ft(")p Fj(,)d(where)g Fl(<)p Fj(n)p Fl(>)g Fj(is)h(the)g(n)n(um)n(b)r
-(er)f(of)h(CmpF)-7 b(rame)27 b(axes)g(\(Naxes)g(attribute\).)259
-5473 y Fd(F)-8 b(rameSet)427 5573 y Fj(The)32 b(Title)g(attribute)f(of)
-h(a)f(F)-7 b(rameSet)31 b(is)h(the)g(same)f(as)f(that)i(of)g(its)f
-(curren)n(t)g(F)-7 b(rame)31 b(\(as)g(sp)r(eci\014ed)h(b)n(y)427
-5672 y(the)c(Curren)n(t)f(attribute\).)p eop end
-%%Page: 474 484
-TeXDict begin 474 483 bop 0 52 a FF(474)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)0 351 y
-Fd(Notes:)340 688 y Fi(\017)45 b Fj(A)28 b(F)-7 b(rame's)26
-b(Title)h(is)g(in)n(tended)h(purely)e(for)h(in)n(terpretation)f(b)n(y)h
-(h)n(uman)f(readers)g(and)h(not)g(b)n(y)f(soft)n(w)n(are.)p
-0 942 3780 12 v 0 1074 a Fz(TitleGap)567 b Fe(V)-10 b(ertical)36
-b(spacing)i(for)g(a)h(Plot)e(title)564 b Fz(TitleGap)0
-1322 y Fd(Description:)44 b Fj(This)30 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)f(of)g(an)h(annotated)f(co)r(ordinate)g(grid)g(\(dra)n
-(wn)g(with)h(the)227 1421 y(astGrid)d(function\))i(b)n(y)e(determining)
-h(where)f(the)h(title)g(of)f(a)h(Plot)f(is)g(dra)n(wn.)227
-1573 y(Its)32 b(v)-5 b(alue)31 b(giv)n(es)g(the)h(spacing)e(b)r(et)n(w)
-n(een)i(the)g(b)r(ottom)f(edge)g(of)h(the)g(title)g(and)f(the)h(top)g
-(edge)f(of)g(a)h(b)r(ounding)227 1673 y(b)r(o)n(x)23
-b(con)n(taining)f(all)h(the)h(other)f(parts)f(of)i(the)f(annotated)g
-(grid.)35 b(P)n(ositiv)n(e)22 b(v)-5 b(alues)22 b(cause)h(the)h(title)g
-(to)f(b)r(e)h(dra)n(wn)227 1772 y(outside)k(the)g(b)r(o)n(x,)f(while)h
-(negativ)n(e)e(v)-5 b(alues)27 b(cause)g(it)h(to)g(b)r(e)g(dra)n(wn)e
-(inside.)227 1924 y(The)j(TitleGap)f(v)-5 b(alue)28 b(should)h(b)r(e)f
-(giv)n(en)g(as)g(a)f(fraction)h(of)h(the)f(minim)n(um)h(dimension)g(of)
-f(the)h(plotting)f(area,)227 2024 y(the)g(default)g(v)-5
-b(alue)28 b(b)r(eing)f(+0.05.)0 2227 y Fd(T)m(yp)s(e:)227
-2327 y Fj(Floating)g(p)r(oin)n(t.)0 2531 y Fd(Class)k(Applicabilit)m
-(y:)259 2722 y(Plot)427 2821 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)259 2982 y Fd(Plot3D)427 3081 y Fj(The)h(Plot3D)f(class)g
-(ignores)f(this)h(attributes)h(since)f(it)h(do)r(es)g(not)f(dra)n(w)g
-(a)g(Title.)0 3298 y Fd(Notes:)340 3634 y Fi(\017)45
-b Fj(The)28 b(text)g(used)f(for)h(the)g(title)g(is)f(obtained)h(from)f
-(the)h(Plot's)f(Title)h(attribute.)p 0 3888 V 0 4020
-a Fz(T)-11 b(ol)1243 b Fe(Plotting)36 b(tolerance)1242
-b Fz(T)-11 b(ol)0 4268 y Fd(Description:)44 b Fj(This)28
-b(attribute)f(sp)r(eci\014es)h(the)f(plotting)h(tolerance)e(\(or)h
-(resolution\))f(to)h(b)r(e)h(used)g(for)e(the)i(graphical)227
-4367 y(output)f(pro)r(duced)e(b)n(y)g(a)h(Plot.)35 b(Smaller)26
-b(v)-5 b(alues)25 b(will)h(result)f(in)h(smo)r(other)f(and)h(more)f
-(accurate)f(curv)n(es)h(b)r(eing)227 4467 y(dra)n(wn,)c(but)f(ma)n(y)f
-(slo)n(w)f(do)n(wn)h(the)h(plotting)g(pro)r(cess.)33
-b(Con)n(v)n(ersely)-7 b(,)19 b(larger)f(v)-5 b(alues)19
-b(ma)n(y)g(sp)r(eed)h(up)g(the)g(plotting)227 4567 y(pro)r(cess)27
-b(in)h(cases)e(where)h(high)h(resolution)e(is)i(not)f(required.)227
-4718 y(The)k(T)-7 b(ol)31 b(v)-5 b(alue)31 b(should)g(b)r(e)h(giv)n(en)
-e(as)h(a)f(fraction)h(of)g(the)g(minim)n(um)h(dimension)f(of)g(the)h
-(plotting)f(area,)g(and)227 4818 y(should)d(lie)f(in)h(the)g(range)e
-(from)i(1.0e-7)e(to)h(1.0.)36 b(By)27 b(default,)h(a)g(v)-5
-b(alue)27 b(of)h(0.01)e(is)h(used.)0 5022 y Fd(T)m(yp)s(e:)227
-5122 y Fj(Floating)g(p)r(oin)n(t.)0 5325 y Fd(Class)k(Applicabilit)m
-(y:)259 5516 y(Plot)427 5616 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)p eop end
-%%Page: 475 485
-TeXDict begin 475 484 bop 3643 52 a FF(475)p 0 351 3780
-12 v 0 490 a Fz(T)-11 b(op\(axis\))1156 483 y Fe(Highest)37
-b(axis)h(v)-7 b(alue)39 b(to)f(displa)m(y)3224 490 y
-Fz(T)-11 b(op\(axis\))0 717 y Fd(Description:)44 b Fj(This)32
-b(attribute)g(giv)n(es)e(the)i(highest)f(axis)g(v)-5
-b(alue)31 b(to)h(b)r(e)g(displa)n(y)n(ed)e(\(for)i(instance,)g(b)n(y)f
-(the)h(astGrid)227 816 y(metho)r(d\).)0 993 y Fd(T)m(yp)s(e:)227
-1093 y Fj(Floating)27 b(p)r(oin)n(t.)0 1269 y Fd(Class)k(Applicabilit)m
-(y:)259 1433 y(F)-8 b(rame)427 1532 y Fj(The)28 b(default)g(supplied)g
-(b)n(y)f(the)h(F)-7 b(rame)27 b(class)g(is)g(to)h(displa)n(y)f(all)g
-(axis)g(v)-5 b(alues,)27 b(without)h(an)n(y)f(limit.)259
-1679 y Fd(SkyF)-8 b(rame)427 1778 y Fj(The)34 b(SkyF)-7
-b(rame)32 b(class)g(re-de\014nes)h(the)g(default)h(T)-7
-b(op)33 b(v)-5 b(alue)33 b(to)g(+90)f(degrees)g(for)g(latitude)i(axes,)
-g(and)427 1878 y(180)26 b(degrees)g(for)h(co-latitude)g(axes.)36
-b(The)28 b(default)f(for)g(longitude)h(axes)e(is)h(to)h(displa)n(y)e
-(all)h(axis)g(v)-5 b(alues.)0 2067 y Fd(Notes:)340 2376
-y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h(attribute)f(b)n(y)g
-(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g(the)h(n)n(um)n(b)r
-(er)f(of)g(the)427 2476 y(F)-7 b(rame)27 b(axis)g(to)h(whic)n(h)f(it)h
-(applies.)p 0 2702 V 0 2834 a Fz(T)-11 b(ranF)g(orw)l(ard)289
-b Fe(F)-10 b(orw)m(ard)37 b(transformation)e(de\014ned?)290
-b Fz(T)-11 b(ranF)g(orw)l(ard)0 3027 y Fd(Description:)44
-b Fj(This)29 b(attribute)f(indicates)h(whether)f(a)g(Mapping)g(is)h
-(able)f(to)g(transform)f(co)r(ordinates)g(in)i(the)g
-Ft(")p Fj(for-)227 3126 y(w)n(ard)p Ft(")34 b Fj(direction)g(\(i.e.)60
-b(con)n(v)n(erting)33 b(input)i(co)r(ordinates)f(in)n(to)h(output)g(co)
-r(ordinates\).)58 b(If)35 b(this)h(attribute)f(is)227
-3226 y(non-zero,)26 b(the)i(forw)n(ard)e(transformation)g(is)i(a)n(v)-5
-b(ailable.)35 b(Otherwise,)27 b(it)h(is)f(not.)0 3402
-y Fd(T)m(yp)s(e:)227 3502 y Fj(In)n(teger)g(\(b)r(o)r(olean\),)h
-(read-only)-7 b(.)0 3679 y Fd(Class)31 b(Applicabilit)m(y:)259
-3842 y(Mapping)427 3942 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 4088 y Fd(CmpMap)427 4188 y Fj(The)j(T)-7
-b(ranF)g(orw)n(ard)28 b(attribute)j(v)-5 b(alue)30 b(for)h(a)f(CmpMap)h
-(is)f(giv)n(en)g(b)n(y)g(the)h(b)r(o)r(olean)f(AND)i(of)f(the)g(v)-5
-b(alue)427 4287 y(for)27 b(eac)n(h)g(comp)r(onen)n(t)g(Mapping.)259
-4434 y Fd(F)-8 b(rameSet)427 4533 y Fj(The)31 b(T)-7
-b(ranF)g(orw)n(ard)27 b(attribute)k(of)f(a)g(F)-7 b(rameSet)30
-b(applies)g(to)g(the)h(transformation)e(whic)n(h)h(con)n(v)n(erts)f(b)r
-(e-)427 4633 y(t)n(w)n(een)22 b(the)g(F)-7 b(rameSet's)22
-b(base)f(F)-7 b(rame)22 b(and)g(its)g(curren)n(t)f(F)-7
-b(rame)21 b(\(as)h(sp)r(eci\014ed)g(b)n(y)g(the)g(Base)g(and)f(Curren)n
-(t)427 4733 y(attributes\).)37 b(This)27 b(v)-5 b(alue)27
-b(is)g(giv)n(en)g(b)n(y)g(the)g(b)r(o)r(olean)g(AND)h(of)f(the)h(T)-7
-b(ranF)g(orw)n(ard)24 b(v)-5 b(alues)27 b(whic)n(h)g(apply)427
-4832 y(to)33 b(eac)n(h)f(of)g(the)h(individual)g(sub-Mappings)f
-(required)f(to)i(p)r(erform)f(this)h(con)n(v)n(ersion.)50
-b(The)32 b(T)-7 b(ranF)g(or-)427 4932 y(w)n(ard)25 b(attribute)h(v)-5
-b(alue)26 b(for)g(a)f(F)-7 b(rameSet)26 b(ma)n(y)f(therefore)g(c)n
-(hange)g(if)h(a)g(new)g(Base)f(or)g(Curren)n(t)g(F)-7
-b(rame)26 b(is)427 5031 y(selected.)0 5220 y Fd(Notes:)340
-5530 y Fi(\017)45 b Fj(An)38 b(error)e(will)i(result)f(if)h(a)f
-(Mapping)h(with)g(a)f(T)-7 b(ranF)g(orw)n(ard)35 b(v)-5
-b(alue)37 b(of)h(zero)e(is)i(used)f(to)h(transform)427
-5630 y(co)r(ordinates)26 b(in)i(the)g(forw)n(ard)e(direction.)p
-eop end
-%%Page: 476 486
-TeXDict begin 476 485 bop 0 52 a FF(476)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 482 a Fz(T)-11 b(ranIn)l(v)l(erse)1083 483
-y Fe(In)m(v)m(erse)38 b(transformation)c(de\014ned?)3083
-482 y Fz(T)-11 b(ranIn)l(v)l(erse)0 652 y Fd(Description:)44
-b Fj(This)31 b(attribute)g(indicates)g(whether)f(a)h(Mapping)f(is)h
-(able)f(to)h(transform)f(co)r(ordinates)f(in)i(the)g
-Ft(")p Fj(in-)227 751 y(v)n(erse)p Ft(")26 b Fj(direction)i(\(i.e.)38
-b(con)n(v)n(erting)26 b(output)j(co)r(ordinates)d(bac)n(k)h(in)n(to)h
-(input)g(co)r(ordinates\).)37 b(If)28 b(this)g(attribute)227
-851 y(is)g(non-zero,)e(the)i(in)n(v)n(erse)e(transformation)g(is)h(a)n
-(v)-5 b(ailable.)36 b(Otherwise,)27 b(it)h(is)f(not.)0
-1003 y Fd(T)m(yp)s(e:)227 1103 y Fj(In)n(teger)g(\(b)r(o)r(olean\),)h
-(readonly)-7 b(.)0 1256 y Fd(Class)31 b(Applicabilit)m(y:)259
-1395 y(Mapping)427 1495 y Fj(All)d(Mappings)f(ha)n(v)n(e)g(this)h
-(attribute.)259 1629 y Fd(CmpMap)427 1729 y Fj(The)e(T)-7
-b(ranIn)n(v)n(erse)23 b(attribute)i(v)-5 b(alue)25 b(for)g(a)g(CmpMap)g
-(is)h(giv)n(en)e(b)n(y)h(the)h(b)r(o)r(olean)f(AND)h(of)f(the)h(v)-5
-b(alue)25 b(for)427 1828 y(eac)n(h)i(comp)r(onen)n(t)g(Mapping.)259
-1963 y Fd(F)-8 b(rameSet)427 2062 y Fj(The)19 b(T)-7
-b(ranIn)n(v)n(erse)17 b(attribute)i(of)g(a)g(F)-7 b(rameSet)19
-b(applies)g(to)f(the)i(transformation)d(whic)n(h)i(con)n(v)n(erts)f(b)r
-(et)n(w)n(een)427 2162 y(the)39 b(F)-7 b(rameSet's)38
-b(curren)n(t)g(F)-7 b(rame)38 b(and)g(its)g(base)g(F)-7
-b(rame)38 b(\(as)g(sp)r(eci\014ed)h(b)n(y)f(the)h(Curren)n(t)e(and)i
-(Base)427 2262 y(attributes\).)45 b(This)30 b(v)-5 b(alue)30
-b(is)f(giv)n(en)h(b)n(y)f(the)i(b)r(o)r(olean)e(AND)i(of)f(the)h(T)-7
-b(ranIn)n(v)n(erse)27 b(v)-5 b(alues)30 b(whic)n(h)g(apply)427
-2361 y(to)25 b(eac)n(h)e(of)i(the)g(individual)f(sub-Mappings)g
-(required)g(to)g(p)r(erform)g(this)h(con)n(v)n(ersion.)33
-b(The)25 b(T)-7 b(ranIn)n(v)n(erse)427 2461 y(attribute)40
-b(v)-5 b(alue)39 b(for)g(a)h(F)-7 b(rameSet)39 b(ma)n(y)g(therefore)f
-(c)n(hange)h(if)h(a)f(new)h(Base)e(or)h(Curren)n(t)g(F)-7
-b(rame)39 b(is)427 2560 y(selected.)0 2725 y Fd(Notes:)340
-3011 y Fi(\017)45 b Fj(An)c(error)e(will)h(result)g(if)h(a)f(Mapping)g
-(with)h(a)f(T)-7 b(ranIn)n(v)n(erse)38 b(v)-5 b(alue)40
-b(of)h(zero)e(is)h(used)h(to)f(transform)427 3111 y(co)r(ordinates)26
-b(in)i(the)g(in)n(v)n(erse)e(direction.)p 0 3313 V 0
-3451 a Fz(Unit\(axis\))1404 3445 y Fe(Axis)39 b(ph)m(ysical)e(units)
-3180 3451 y Fz(Unit\(axis\))0 3650 y Fd(Description:)44
-b Fj(This)35 b(attribute)f(con)n(tains)f(a)h(textual)g(represen)n
-(tation)f(of)h(the)h(ph)n(ysical)e(units)i(used)f(to)g(represen)n(t)227
-3749 y(co)r(ordinate)24 b(v)-5 b(alues)25 b(on)g(a)f(particular)g(axis)
-g(of)i(a)e(F)-7 b(rame.)36 b(The)25 b(astSetActiv)n(eUnit)h(function)f
-(con)n(trols)f(ho)n(w)g(the)227 3849 y(Unit)29 b(v)-5
-b(alues)27 b(are)g(used.)0 4002 y Fd(T)m(yp)s(e:)227
-4101 y Fj(String.)0 4254 y Fd(Class)k(Applicabilit)m(y:)259
-4393 y(F)-8 b(rame)427 4493 y Fj(The)28 b(default)g(supplied)g(b)n(y)f
-(the)h(F)-7 b(rame)27 b(class)g(is)g(an)h(empt)n(y)f(string.)259
-4627 y Fd(SkyF)-8 b(rame)427 4727 y Fj(The)24 b(SkyF)-7
-b(rame)24 b(class)f(re-de\014nes)g(the)h(default)h(Unit)g(v)-5
-b(alue)24 b(\(e.g.)35 b(to)24 b Ft(")p Fj(hh:mm:ss.sss)p
-Ft(")p Fj(\))g(to)f(describ)r(e)h(the)427 4826 y(c)n(haracter)i(string)
-h(returned)g(b)n(y)g(the)h(astF)-7 b(ormat)27 b(function)h(when)g
-(formatting)f(co)r(ordinate)f(v)-5 b(alues.)259 4961
-y Fd(Sp)s(ecF)d(rame)427 5060 y Fj(The)24 b(Sp)r(ecF)-7
-b(rame)23 b(class)g(re-de\014nes)f(the)i(default)g(Unit)g(v)-5
-b(alue)24 b(so)f(that)g(it)h(is)g(appropriate)e(for)h(the)g(curren)n(t)
-427 5160 y(System)30 b(v)-5 b(alue.)43 b(See)29 b(the)h(System)g
-(attribute)g(for)f(details.)42 b(An)30 b(error)e(will)i(b)r(e)g(rep)r
-(orted)f(if)h(an)f(attempt)427 5260 y(is)f(made)f(to)h(use)f(an)g
-(inappropriate)f(Unit.)259 5394 y Fd(TimeF)-8 b(rame)427
-5494 y Fj(The)22 b(TimeF)-7 b(rame)22 b(class)f(re-de\014nes)h(the)g
-(default)h(Unit)g(v)-5 b(alue)22 b(so)f(that)h(it)h(is)f(appropriate)e
-(for)i(the)g(curren)n(t)427 5593 y(System)30 b(v)-5 b(alue.)43
-b(See)29 b(the)h(System)g(attribute)g(for)f(details.)42
-b(An)30 b(error)e(will)i(b)r(e)g(rep)r(orted)f(if)h(an)f(attempt)427
-5693 y(is)f(made)f(to)h(use)f(an)g(inappropriate)f(Unit)j(\(e.g.)37
-b Ft(")p Fj(km)p Ft(")p Fj(\).)p eop end
-%%Page: 477 487
-TeXDict begin 477 486 bop 3643 52 a FF(477)259 351 y
-Fd(F)-8 b(rameSet)427 451 y Fj(The)29 b(Unit)h(attribute)f(of)g(a)g(F)
--7 b(rameSet)29 b(axis)f(is)h(the)h(same)e(as)g(that)i(of)f(its)g
-(curren)n(t)f(F)-7 b(rame)29 b(\(as)f(sp)r(eci\014ed)427
-551 y(b)n(y)g(the)g(Curren)n(t)e(attribute\).)0 717 y
-Fd(Notes:)340 1004 y Fi(\017)45 b Fj(When)36 b(sp)r(ecifying)f(this)h
-(attribute)f(b)n(y)g(name,)i(it)f(should)f(b)r(e)h(subscripted)f(with)g
-(the)h(n)n(um)n(b)r(er)f(of)g(the)427 1103 y(F)-7 b(rame)27
-b(axis)g(to)h(whic)n(h)f(it)h(applies.)p 0 1307 3780
-12 v 0 1439 a Fz(UnitRadius)318 b Fe(SphMap)39 b(input)f(v)m(ectors)g
-(lie)g(on)g(a)h(unit)1699 1553 y(sphere?)3106 1439 y
-Fz(UnitRadius)0 1747 y Fd(Description:)44 b Fj(This)30
-b(is)f(a)g(b)r(o)r(olean)g(attribute)h(whic)n(h)f(indicates)h(whether)f
-(the)h(3-dimensional)e(v)n(ectors)g(whic)n(h)i(are)227
-1846 y(supplied)i(as)f(input)i(to)e(a)g(SphMap)h(are)f(kno)n(wn)g(to)g
-(alw)n(a)n(ys)f(ha)n(v)n(e)g(unit)i(length,)h(so)e(that)h(they)g(lie)f
-(on)h(a)f(unit)227 1946 y(sphere)c(cen)n(tred)g(on)h(the)g(origin.)227
-2073 y(If)36 b(this)h(condition)e(is)h(true)g(\(indicated)g(b)n(y)f
-(setting)h(UnitRadius)g(non-zero\),)h(it)f(implies)g(that)g(a)g(CmpMap)
-227 2172 y(whic)n(h)e(is)g(comp)r(osed)f(of)h(a)g(SphMap)g(applied)g
-(in)g(the)g(forw)n(ard)f(direction)g(follo)n(w)n(ed)g(b)n(y)h(a)f
-(similar)g(SphMap)227 2272 y(applied)24 b(in)f(the)h(in)n(v)n(erse)d
-(direction)i(ma)n(y)g(b)r(e)h(simpli\014ed)f(\(e.g.)36
-b(b)n(y)23 b(astSimplify\))g(to)h(b)r(ecome)f(a)g(UnitMap.)36
-b(This)227 2371 y(is)23 b(b)r(ecause)g(the)h(input)g(and)f(output)h(v)n
-(ectors)e(will)h(b)r(oth)h(ha)n(v)n(e)e(unit)i(length)f(and)h(will)f
-(therefore)f(ha)n(v)n(e)h(the)g(same)227 2471 y(co)r(ordinate)k(v)-5
-b(alues.)227 2598 y(If)35 b(UnitRadius)g(is)g(zero)e(\(the)j
-(default\),)h(then)e(although)f(the)h(output)g(v)n(ector)e(pro)r(duced)
-h(b)n(y)h(the)g(CmpMap)227 2697 y(\(ab)r(o)n(v)n(e\))25
-b(will)g(still)g(ha)n(v)n(e)f(unit)i(length,)g(the)f(input)h(v)n(ector)
-e(ma)n(y)g(not)h(ha)n(v)n(e.)35 b(This)25 b(will,)h(in)f(general,)f(c)n
-(hange)g(the)227 2797 y(co)r(ordinate)j(v)-5 b(alues,)27
-b(so)g(it)h(prev)n(en)n(ts)e(the)i(pair)f(of)h(SphMaps)f(b)r(eing)h
-(simpli\014ed.)0 2951 y Fd(T)m(yp)s(e:)227 3051 y Fj(In)n(teger)f(\(b)r
-(o)r(olean\).)0 3204 y Fd(Class)k(Applicabilit)m(y:)259
-3345 y(SphMap)427 3445 y Fj(All)d(SphMaps)g(ha)n(v)n(e)e(this)i
-(attribute.)0 3611 y Fd(Notes:)340 3898 y Fi(\017)45
-b Fj(This)28 b(attribute)g(is)g(in)n(tended)h(mainly)e(for)h(use)g
-(when)g(SphMaps)g(are)e(in)n(v)n(olv)n(ed)h(in)h(a)g(sequence)f(of)h
-(Map-)427 3998 y(pings)35 b(whic)n(h)g(pro)5 b(ject)34
-b(\(e.g.\))59 b(a)35 b(dataset)f(on)h(to)g(the)g(celestial)g(sphere.)58
-b(By)35 b(regarding)e(the)i(celestial)427 4097 y(sphere)24
-b(as)f(a)h(unit)h(sphere)e(\(and)h(setting)g(UnitRadius)h(to)f(b)r(e)g
-(non-zero\))f(it)i(b)r(ecomes)e(p)r(ossible)h(to)g(cancel)427
-4197 y(the)31 b(SphMaps)g(presen)n(t,)f(along)g(with)h(asso)r(ciated)e
-(sky)h(pro)5 b(jections,)30 b(when)g(t)n(w)n(o)g(datasets)g(are)f
-(aligned)427 4297 y(using)f(celestial)f(co)r(ordinates.)35
-b(This)28 b(often)g(considerably)e(impro)n(v)n(es)f(p)r(erformance.)340
-4432 y Fi(\017)45 b Fj(Suc)n(h)29 b(a)g(situations)f(often)i(arises)d
-(when)i(in)n(terpreting)f(FITS)i(data)e(and)h(is)g(handled)g
-(automatically)f(b)n(y)427 4531 y(the)g(FitsChan)g(class.)340
-4666 y Fi(\017)45 b Fj(The)28 b(v)-5 b(alue)27 b(of)g(the)h(UnitRadius)
-g(attribute)g(is)f(used)g(only)g(to)h(con)n(trol)e(the)i
-(simpli\014cation)f(of)g(Mappings)427 4766 y(and)i(has)f(no)h(e\013ect)
-g(on)g(the)g(v)-5 b(alue)28 b(of)h(the)g(co)r(ordinates)f(transformed)f
-(b)n(y)i(a)f(SphMap.)41 b(The)29 b(lengths)g(of)427 4866
-y(the)f(input)f(3-dimensional)f(Cartesian)f(v)n(ectors)h(supplied)h
-(are)f(alw)n(a)n(ys)f(ignored,)h(ev)n(en)g(if)h(UnitRadius)h(is)427
-4965 y(non-zero.)p 0 5169 V 0 5301 a Fz(UseDefs)262 b
-Fe(Use)39 b(default)f(v)-7 b(alues)38 b(for)g(unsp)s(eci\014ed)h
-(attributes?)259 b Fz(UseDefs)0 5494 y Fd(Description:)44
-b Fj(This)36 b(attribute)h(sp)r(eci\014es)e(whether)h(default)h(v)-5
-b(alues)35 b(should)h(b)r(e)h(used)f(in)n(ternally)f(for)g(ob)5
-b(ject)36 b(at-)227 5593 y(tributes)41 b(whic)n(h)g(ha)n(v)n(e)f(not)h
-(b)r(een)g(assigned)f(a)h(v)-5 b(alue)40 b(explicitly)-7
-b(.)77 b(If)42 b(a)e(non-zero)g(v)-5 b(alue)40 b(\(the)i(default\))g
-(is)227 5693 y(supplied)26 b(for)f(UseDefs,)h(then)g(default)g(v)-5
-b(alues)24 b(will)i(b)r(e)g(used)f(for)g(attributes)g(whic)n(h)g(ha)n
-(v)n(e)f(not)i(explicitly)f(b)r(een)p eop end
-%%Page: 478 488
-TeXDict begin 478 487 bop 0 52 a FF(478)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)227 351
-y Fj(assigned)c(a)h(v)-5 b(alue.)39 b(If)29 b(zero)f(is)g(supplied)g
-(for)g(UseDefs,)h(then)g(an)f(error)f(will)h(b)r(e)h(rep)r(orted)f(if)h
-(an)f(attribute)g(for)227 451 y(whic)n(h)g(no)f(explicit)h(v)-5
-b(alue)27 b(has)h(b)r(een)g(supplied)f(is)h(needed)g(in)n(ternally)f
-(within)h(AST.)227 576 y(Man)n(y)20 b(attributes)g(\(including)g(the)h
-(UseDefs)g(attribute)f(itself)6 b(\))21 b(are)e(una\013ected)i(b)n(y)f
-(the)g(setting)h(of)f(the)g(UseDefs)227 675 y(attribute,)28
-b(and)g(default)g(v)-5 b(alues)27 b(will)h(alw)n(a)n(ys)e(b)r(e)i(used)
-g(without)g(error)e(for)h(suc)n(h)g(attributes.)37 b(The)28
-b Ft(")p Fj(Applica-)227 775 y(bilit)n(y:)p Ft(")g Fj(section)f(b)r
-(elo)n(w)g(lists)h(the)g(attributes)f(whic)n(h)h(are)e(a\013ected)i(b)n
-(y)f(the)h(setting)g(of)g(UseDefs.)227 900 y(Note,)23
-b(UseDefs)f(only)f(a\013ects)g(access)f(to)i(attributes)f(in)n
-(ternally)g(within)h(AST.)g(The)f(public)h(accessor)d(functions)227
-999 y(suc)n(h)29 b(as)f(astGetC)h(is)g(una\013ected)g(b)n(y)g(the)g
-(UseDefs)h(attribute)f(-)g(default)g(v)-5 b(alues)29
-b(will)g(alw)n(a)n(ys)e(b)r(e)j(returned)e(if)227 1099
-y(no)e(v)-5 b(alue)25 b(has)h(b)r(een)g(set.)36 b(Application)26
-b(co)r(de)g(should)f(use)h(the)g(astT)-7 b(est)25 b(function)i(if)f
-(required)f(to)g(determine)h(if)227 1198 y(a)h(v)-5 b(alue)28
-b(has)f(b)r(een)h(set)g(for)f(an)g(attribute.)0 1348
-y Fd(T)m(yp)s(e:)227 1448 y Fj(In)n(teger)g(\(b)r(o)r(olean\).)0
-1598 y Fd(Class)k(Applicabilit)m(y:)259 1734 y(Ob)5 b(ject)427
-1834 y Fj(All)24 b(Ob)5 b(jects)22 b(ha)n(v)n(e)g(this)i(attribute,)g
-(but)g(ignore)d(its)j(setting)f(except)g(as)f(describ)r(ed)h(b)r(elo)n
-(w)g(for)f(individual)427 1934 y(classes.)259 2066 y
-Fd(F)-8 b(rameSet)427 2166 y Fj(The)23 b(default)f(v)-5
-b(alue)22 b(of)h(UseDefs)f(for)g(a)g(F)-7 b(rameSet)22
-b(is)g(rede\014ned)g(to)g(b)r(e)h(the)f(UseDefs)h(v)-5
-b(alue)22 b(of)g(its)g(curren)n(t)427 2266 y(F)-7 b(rame.)259
-2399 y Fd(CmpF)f(rame)427 2498 y Fj(The)26 b(default)g(v)-5
-b(alue)25 b(of)h(UseDefs)g(for)f(a)g(CmpF)-7 b(rame)26
-b(is)f(rede\014ned)h(to)f(b)r(e)h(the)g(UseDefs)g(v)-5
-b(alue)26 b(of)f(its)h(\014rst)427 2598 y(comp)r(onen)n(t)i(F)-7
-b(rame.)259 2731 y Fd(Region)427 2831 y Fj(The)30 b(default)f(v)-5
-b(alue)29 b(of)g(UseDefs)h(for)f(a)f(Region)h(is)g(rede\014ned)g(to)g
-(b)r(e)h(the)f(UseDefs)h(v)-5 b(alue)29 b(of)g(its)g(encap-)427
-2930 y(sulated)f(F)-7 b(rame.)259 3063 y Fd(F)f(rame)427
-3163 y Fj(If)24 b(UseDefs)g(is)f(zero,)g(an)g(error)e(is)j(rep)r(orted)
-e(when)i(aligning)e(F)-7 b(rames)22 b(if)i(the)g(Ep)r(o)r(c)n(h,)g
-(ObsLat)e(or)h(ObsLon)427 3262 y(attribute)28 b(is)g(required)e(but)i
-(has)f(not)h(b)r(een)g(assigned)e(a)i(v)-5 b(alue)27
-b(explicitly)-7 b(.)259 3395 y Fd(SkyF)f(rame)427 3495
-y Fj(If)41 b(UseDefs)f(is)g(zero,)h(an)f(error)e(is)h(rep)r(orted)h
-(when)g(aligning)e(SkyF)-7 b(rames)39 b(if)i(an)n(y)e(of)g(the)i(follo)
-n(wing)427 3595 y(attributes)28 b(are)e(required)h(but)h(ha)n(v)n(e)f
-(not)g(b)r(een)h(assigned)f(a)g(v)-5 b(alue)27 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)28 b(Equino)n(x.)259 3728 y Fd(Sp)s(ecF)-8
-b(rame)427 3827 y Fj(If)38 b(UseDefs)g(is)g(zero,)h(an)e(error)f(is)h
-(rep)r(orted)g(when)h(aligning)e(Sp)r(ecF)-7 b(rames)37
-b(if)h(an)n(y)f(of)h(the)g(follo)n(wing)427 3927 y(attributes)24
-b(are)f(required)f(but)j(ha)n(v)n(e)d(not)i(b)r(een)g(assigned)e(a)i(v)
--5 b(alue)23 b(explicitly:)35 b(Ep)r(o)r(c)n(h,)24 b(RefRA,)h(RefDec,)
-427 4027 y(RestF)-7 b(req,)28 b(SourceV)-7 b(el,)27 b(StdOfRest.)259
-4160 y Fd(DSBSp)s(ecF)-8 b(rame)427 4259 y Fj(If)27 b(UseDefs)g(is)g
-(zero,)f(an)g(error)f(is)h(rep)r(orted)g(when)h(aligning)f(DSBSp)r(ecF)
--7 b(rames)26 b(or)g(when)h(accessing)e(the)427 4359
-y(ImagF)-7 b(req)25 b(attribute)h(if)g(an)n(y)f(of)h(the)g(follo)n
-(wing)f(attributes)g(are)g(required)g(but)h(ha)n(v)n(e)f(not)h(b)r(een)
-g(assigned)427 4458 y(a)h(v)-5 b(alue)28 b(explicitly:)37
-b(Ep)r(o)r(c)n(h,)27 b(DSBCen)n(tre,)h(IF.)p 0 4658 3780
-12 v 0 4790 a Fz(W)-11 b(arnings)345 b Fe(Con)m(trols)36
-b(the)j(issuing)f(of)g(w)m(arnings)f(ab)s(out)1429 4904
-y(v)-7 b(arious)38 b(conditions)3224 4790 y Fz(W)-11
-b(arnings)0 5070 y Fd(Description:)44 b Fj(This)27 b(attribute)g(con)n
-(trols)f(the)h(issuing)g(of)f(w)n(arnings)g(ab)r(out)h(selected)f
-(conditions)h(when)g(an)g(Ob)5 b(ject)227 5170 y(or)28
-b(k)n(eyw)n(ord)f(is)i(read)f(from)h(or)f(written)h(to)g(a)f(FitsChan.)
-41 b(The)29 b(v)-5 b(alue)29 b(supplied)g(for)f(the)h(W)-7
-b(arnings)28 b(attribute)227 5269 y(should)d(consist)f(of)h(a)g(space)f
-(separated)g(list)h(of)g(condition)g(names)f(\(see)h(the)h(AllW)-7
-b(arnings)24 b(attribute)h(for)g(a)f(list)227 5369 y(of)29
-b(the)g(curren)n(tly)f(de\014ned)h(names\).)41 b(Eac)n(h)28
-b(name)g(indicates)h(a)f(condition)h(whic)n(h)g(should)f(b)r(e)i(rep)r
-(orted.)40 b(The)227 5469 y(default)28 b(v)-5 b(alue)28
-b(for)f(W)-7 b(arnings)27 b(is)g(the)h(string)f Ft(")p
-Fj(Tnx)g(Zp)n(x)g(BadCel)g(BadMat)g(BadPV)g(BadCTYPE)p
-Ft(")p Fj(.)227 5593 y(The)e(text)h(of)f(an)n(y)f(w)n(arning)g(will)i
-(b)r(e)f(stored)f(within)i(the)g(FitsChan)f(in)g(the)h(form)f(of)g(one)
-g(or)f(more)g(new)h(header)227 5693 y(cards)i(with)i(k)n(eyw)n(ord)d
-(ASTW)-9 b(ARN.)29 b(If)f(required,)f(applications)g(can)h(c)n(hec)n(k)
-f(the)h(FitsChan)g(for)f(ASTW)-9 b(ARN)p eop end
-%%Page: 479 489
-TeXDict begin 479 488 bop 3643 52 a FF(479)227 351 y
-Fj(cards)24 b(\(using)h(astFindFits\))h(after)f(the)g(call)g(to)g
-(astRead)f(or)g(astW)-7 b(rite)25 b(has)f(b)r(een)i(p)r(erformed,)f
-(and)g(rep)r(ort)f(the)227 451 y(text)35 b(of)f(an)n(y)g(suc)n(h)g
-(cards)f(to)h(the)h(user.)56 b(ASTW)-9 b(ARN)36 b(cards)d(will)i(b)r(e)
-f(propagated)f(to)h(an)n(y)g(output)g(header)227 551
-y(unless)28 b(they)f(are)g(deleted)h(from)f(the)h(FitsChan)g(using)f
-(astDelFits.)0 692 y Fd(T)m(yp)s(e:)227 792 y Fj(String)0
-933 y Fd(Class)k(Applicabilit)m(y:)259 1061 y(FitsChan)427
-1161 y Fj(All)d(FitsChans)g(ha)n(v)n(e)e(this)i(attribute.)0
-1315 y Fd(Notes:)227 1461 y Fj(This)36 b(attribute)g(only)g(con)n
-(trols)e(the)j(w)n(arnings)d(that)i(are)f(to)h(b)r(e)g(stored)f(as)h(a)
-f(set)h(of)g(header)f(cards)g(in)h(the)227 1561 y(FitsChan)d(as)f
-(describ)r(ed)g(ab)r(o)n(v)n(e.)51 b(It)33 b(has)f(no)g(e\013ect)h(on)g
-(the)g(storage)d(of)j(w)n(arnings)e(in)i(the)g(paren)n(t)f(Channel)227
-1660 y(structure.)i(All)19 b(w)n(arnings)e(are)h(stored)g(in)h(the)g
-(paren)n(t)f(Channel)h(structure,)h(from)f(where)f(they)h(can)g(b)r(e)g
-(retriev)n(ed)227 1760 y(using)28 b(the)f(astW)-7 b(arnings)27
-b(function.)p 0 1943 3780 12 v 0 2082 a Fz(WcsAxis\(lonlat\))1196
-2074 y Fe(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(axes)2826
-2082 y Fz(WcsAxis\(lonlat\))0 2261 y Fd(Description:)44
-b Fj(This)21 b(attribute)g(giv)n(es)e(the)i(indices)g(of)g(the)g
-(longitude)f(and)h(latitude)g(co)r(ordinates)e(of)h(the)h(FITS-W)n(CS)
-227 2361 y(pro)5 b(jection)33 b(within)i(the)g(co)r(ordinate)e(space)g
-(used)h(b)n(y)g(a)f(WcsMap.)57 b(These)33 b(indices)h(are)f(de\014ned)i
-(when)f(the)227 2460 y(WcsMap)28 b(is)f(\014rst)g(created)g(using)h
-(astWcsMap)e(and)i(cannot)f(subsequen)n(tly)g(b)r(e)h(altered.)227
-2581 y(If)j Ft(")p Fj(lonlat)p Ft(")d Fj(is)i(1,)g(the)h(index)f(of)g
-(the)g(longitude)g(axis)f(is)h(returned.)43 b(Otherwise,)30
-b(if)h(it)f(is)g(2,)g(the)g(index)g(of)g(the)227 2681
-y(latitude)e(axis)f(is)h(returned.)0 2822 y Fd(T)m(yp)s(e:)227
-2922 y Fj(In)n(teger,)f(read-only)-7 b(.)0 3063 y Fd(Class)31
-b(Applicabilit)m(y:)259 3192 y(WcsMap)427 3291 y Fj(All)d(WcsMaps)f(ha)
-n(v)n(e)g(this)h(attribute.)p 0 3474 V 0 3605 a Fz(WcsT)l(yp)t(e)640
-b Fe(FITS-W)m(CS)39 b(pro)7 b(jection)36 b(t)m(yp)s(e)640
-b Fz(WcsT)l(yp)t(e)0 3778 y Fd(Description:)44 b Fj(This)29
-b(attribute)g(sp)r(eci\014es)g(whic)n(h)g(t)n(yp)r(e)g(of)f(FITS-W)n
-(CS)h(pro)5 b(jection)28 b(will)h(b)r(e)g(p)r(erformed)g(b)n(y)f(a)h
-(Wc-)227 3878 y(sMap.)36 b(The)27 b(v)-5 b(alue)27 b(is)g(sp)r
-(eci\014ed)g(when)g(a)f(WcsMap)h(is)f(\014rst)h(created)f(using)g
-(astWcsMap)g(and)h(cannot)f(subse-)227 3977 y(quen)n(tly)i(b)r(e)g(c)n
-(hanged.)227 4098 y(The)g(v)-5 b(alues)27 b(used)g(are)f(represen)n
-(ted)g(b)n(y)h(macros)f(with)i(names)f(of)g(the)h(form)f
-Ft(")p Fj(AST)p Ft(__)p Fj(XXX)p Ft(")p Fj(,)g(where)g
-Ft(")p Fj(XXX)p Ft(")227 4197 y Fj(is)32 b(the)h(\(upp)r(er)f(case\))g
-(3-c)n(haracter)d(co)r(de)j(used)g(b)n(y)f(the)i(FITS-W)n(CS)f
-Ft(")p Fj(CTYPEi)p Ft(")f Fj(k)n(eyw)n(ord)f(to)i(iden)n(tify)g(the)227
-4297 y(pro)5 b(jection.)77 b(F)-7 b(or)41 b(example,)k(p)r(ossible)c(v)
--5 b(alues)40 b(are)h(AST)p Ft(__)p Fj(T)-7 b(AN)41 b(\(for)g(the)h
-(tangen)n(t)f(plane)g(or)g(gnomonic)227 4397 y(pro)5
-b(jection\))34 b(and)h(AST)p Ft(__)p Fj(AIT)f(\(for)g(the)h
-(Hammer-Aito\013)g(pro)5 b(jection\).)57 b(AST)p Ft(__)p
-Fj(TPN)34 b(is)h(an)f(exception)g(in)227 4496 y(that)g(it)h(is)e(not)h
-(part)g(of)f(the)i(FITS-W)n(CS)e(standard)g(\(it)i(represen)n(ts)d(a)i
-(T)-7 b(AN)34 b(pro)5 b(jection)33 b(with)h(p)r(olynomial)227
-4596 y(correction)26 b(terms)h(as)g(de\014ned)h(in)g(an)g(early)e
-(draft)i(of)f(the)h(FITS-W)n(CS)g(pap)r(er\).)0 4737
-y Fd(T)m(yp)s(e:)227 4837 y Fj(In)n(teger,)f(read-only)-7
-b(.)0 4979 y Fd(Class)31 b(Applicabilit)m(y:)259 5107
-y(WcsMap)427 5207 y Fj(All)d(WcsMaps)f(ha)n(v)n(e)g(this)h(attribute.)0
-5361 y Fd(Notes:)340 5635 y Fi(\017)45 b Fj(F)-7 b(or)27
-b(a)g(list)h(of)g(a)n(v)-5 b(ailable)26 b(pro)5 b(jections,)27
-b(see)g(the)h(FITS-W)n(CS)f(pap)r(er.)p eop end
-%%Page: 480 490
-TeXDict begin 480 489 bop 0 52 a FF(480)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p 0 351
-3780 12 v 0 490 a Fz(Width\(elemen)l(t\))1131 483 y Fe(Line)38
-b(width)g(for)g(a)g(Plot)g(elemen)m(t)2840 490 y Fz(Width\(elemen)l
-(t\))0 682 y Fd(Description:)44 b Fj(This)35 b(attribute)g(determines)g
-(the)h(line)f(width)g(used)g(when)g(dra)n(wing)f(eac)n(h)g(elemen)n(t)h
-(of)g(graphical)227 781 y(output)40 b(pro)r(duced)g(b)n(y)f(a)h(Plot.)
-72 b(It)40 b(tak)n(es)f(a)g(separate)f(v)-5 b(alue)40
-b(for)f(eac)n(h)g(graphical)f(elemen)n(t)i(so)f(that,)k(for)227
-881 y(instance,)28 b(the)h(setting)f Ft(")p Fj(Width\(b)r(order\)=2.0)p
-Ft(")f Fj(causes)g(the)h(Plot)g(b)r(order)f(to)h(b)r(e)h(dra)n(wn)e
-(using)h(a)g(line)g(width)227 980 y(of)g(2.0.)37 b(A)28
-b(v)-5 b(alue)28 b(of)f(1.0)g(results)h(in)g(a)f(line)h(thic)n(kness)f
-(whic)n(h)h(is)g(appro)n(ximately)e(0.0005)f(times)k(the)f(length)g(of)
-227 1080 y(the)g(diagonal)e(of)i(the)g(en)n(tire)f(displa)n(y)g
-(surface.)227 1204 y(The)d(actual)f(app)r(earance)g(of)g(lines)h(dra)n
-(wn)f(with)h(an)n(y)f(particular)g(width,)i(and)e(the)i(range)d(of)i(a)
-n(v)-5 b(ailable)22 b(widths,)227 1303 y(is)e(determined)g(b)n(y)f(the)
-h(underlying)g(graphics)e(system.)34 b(The)20 b(default)g(b)r(eha)n
-(viour)e(is)i(for)f(all)h(graphical)e(elemen)n(ts)227
-1403 y(to)23 b(b)r(e)h(dra)n(wn)e(using)h(the)h(default)g(line)f(width)
-h(supplied)g(b)n(y)f(this)g(graphics)f(system.)35 b(This)23
-b(will)h(not)f(necessarily)227 1503 y(corresp)r(ond)j(to)i(a)f(Width)h
-(v)-5 b(alue)28 b(of)g(1.0.)0 1650 y Fd(T)m(yp)s(e:)227
-1750 y Fj(Floating)f(p)r(oin)n(t.)0 1898 y Fd(Class)k(Applicabilit)m
-(y:)259 2032 y(Plot)427 2132 y Fj(All)d(Plots)f(ha)n(v)n(e)g(this)g
-(attribute.)0 2292 y Fd(Notes:)340 2573 y Fi(\017)45
-b Fj(F)-7 b(or)27 b(a)g(list)h(of)g(the)g(graphical)e(elemen)n(ts)h(a)n
-(v)-5 b(ailable,)27 b(see)g(the)h(description)f(of)g(the)h(Plot)f
-(class.)340 2704 y Fi(\017)45 b Fj(If)26 b(no)f(graphical)e(elemen)n(t)
-i(is)g(sp)r(eci\014ed,)h(\(e.g.)36 b Ft(")p Fj(Width)p
-Ft(")25 b Fj(instead)g(of)g Ft(")p Fj(Width\(b)r(order\))p
-Ft(")p Fj(\),)h(then)g(a)e Ft(")p Fj(set)p Ft(")427 2803
-y Fj(or)i Ft(")p Fj(clear)p Ft(")f Fj(op)r(eration)h(will)g(a\013ect)h
-(the)g(attribute)g(v)-5 b(alue)27 b(of)f(all)h(graphical)e(elemen)n
-(ts,)i(while)g(a)f Ft(")p Fj(get)p Ft(")f Fj(or)427 2903
-y Ft(")p Fj(test)p Ft(")i Fj(op)r(eration)g(will)h(use)f(just)h(the)g
-(Width\(Border\))g(v)-5 b(alue.)p 0 3099 V 0 3230 a Fz(XmlF)-11
-b(ormat)207 b Fe(System)38 b(for)g(formatting)d(Ob)7
-b(jects)38 b(as)h(XML)207 b Fz(XmlF)-11 b(ormat)0 3416
-y Fd(Description:)44 b Fj(This)29 b(attribute)h(sp)r(eci\014es)f(the)g
-(formatting)g(system)g(to)g(use)g(when)g(AST)g(Ob)5 b(jects)29
-b(are)f(written)i(out)227 3515 y(as)j(XML)i(through)e(an)g(XmlChan.)56
-b(It)34 b(a\013ects)g(the)g(b)r(eha)n(viour)f(of)g(the)i(astW)-7
-b(rite)33 b(function)i(when)f(they)g(are)227 3615 y(used)28
-b(to)f(transfer)g(an)n(y)g(AST)h(Ob)5 b(ject)27 b(to)h(or)e(from)i(an)f
-(external)g(XML)h(represen)n(tation.)227 3739 y(The)36
-b(XmlChan)h(class)e(allo)n(ws)g(AST)h(ob)5 b(jects)36
-b(to)g(b)r(e)g(represen)n(ted)f(in)i(the)f(form)g(of)g(XML)g(in)h(sev)n
-(eral)d(w)n(a)n(ys)227 3838 y(\(con)n(v)n(en)n(tions\))27
-b(and)g(the)i(XmlF)-7 b(ormat)27 b(attribute)h(is)g(used)g(to)f(sp)r
-(ecify)h(whic)n(h)g(of)g(these)f(should)h(b)r(e)g(used.)38
-b(The)227 3938 y(formatting)27 b(options)g(a)n(v)-5 b(ailable)27
-b(are)f(outlined)i(in)g(the)g Ft(")p Fj(F)-7 b(ormats)26
-b(Av)-5 b(ailable)p Ft(")27 b Fj(section)g(b)r(elo)n(w.)227
-4062 y(By)35 b(default,)h(an)f(XmlChan)f(will)h(attempt)g(to)g
-(determine)f(whic)n(h)h(format)f(system)g(is)h(already)e(in)i(use,)h
-(and)227 4161 y(will)f(set)f(the)g(default)h(XmlF)-7
-b(ormat)34 b(v)-5 b(alue)34 b(accordingly)e(\(so)h(that)i(subsequen)n
-(t)f(I/O)f(op)r(erations)g(adopt)g(the)227 4261 y(same)26
-b(con)n(v)n(en)n(tions\).)36 b(It)27 b(do)r(es)f(this)h(b)n(y)g(lo)r
-(oking)e(for)i(certain)f(critical)g(items)h(whic)n(h)f(only)h(o)r(ccur)
-f(in)h(particular)227 4360 y(formats.)42 b(F)-7 b(or)29
-b(details)h(of)f(ho)n(w)g(this)h(w)n(orks,)e(see)i(the)g
-Ft(")p Fj(Choice)e(of)i(Default)g(F)-7 b(ormat)p Ft(")29
-b Fj(section)g(b)r(elo)n(w.)42 b(If)30 b(y)n(ou)227 4460
-y(wish)h(to)g(ensure)f(that)h(a)f(particular)g(format)g(system)g(is)h
-(used,)h(indep)r(enden)n(tly)f(of)g(an)n(y)f(XML)h(already)e(read,)227
-4560 y(y)n(ou)e(should)g(set)h(an)f(explicit)h(XmlF)-7
-b(ormat)28 b(v)-5 b(alue)27 b(y)n(ourself.)0 4707 y Fd(T)m(yp)s(e:)227
-4807 y Fj(String.)0 4955 y Fd(Class)k(Applicabilit)m(y:)259
-5089 y(XmlChan)427 5189 y Fj(All)d(XmlChans)g(ha)n(v)n(e)e(this)i
-(attribute.)-2 5349 y Fd(F)-8 b(ormats)32 b(Av)-5 b(ailable)n(:)227
-5495 y Fj(The)34 b(XmlF)-7 b(ormat)33 b(attribute)h(can)f(tak)n(e)f(an)
-n(y)h(of)g(the)h(follo)n(wing)f(\(case)f(insensitiv)n(e\))i(string)e(v)
--5 b(alues)33 b(to)h(select)227 5595 y(the)28 b(corresp)r(onding)e
-(formatting)h(system:)p eop end
-%%Page: 481 491
-TeXDict begin 481 490 bop 3643 52 a FF(481)340 351 y
-Fi(\017)45 b Ft(")p Fj(NA)-7 b(TIVE)p Ft(")p Fj(:)34
-b(This)23 b(is)g(a)f(direct)h(con)n(v)n(ersion)e(to)h(XML)i(of)e(the)i
-(heirarc)n(hical)c(format)j(used)g(b)n(y)f(a)h(standard)427
-451 y(XML)28 b(c)n(hannel)f(\(and)h(also)f(b)n(y)g(the)h(NA)-7
-b(TIVE)28 b(enco)r(ding)f(of)h(a)f(FitsChan\).)340 575
-y Fi(\017)45 b Ft(")p Fj(QUOTED)p Ft(")p Fj(:)35 b(This)27
-b(is)g(the)g(same)f(as)h(NA)-7 b(TIVE)27 b(format)f(except)h(that)g
-(extra)f(information)g(is)h(included)427 675 y(whic)n(h)21
-b(allo)n(ws)e(clien)n(t)i(co)r(de)g(to)f(con)n(v)n(ert)f(the)j(XML)f
-(in)n(to)f(a)g(form)h(whic)n(h)f(can)h(b)r(e)g(read)f(b)n(y)g(a)g
-(standard)g(AST)427 775 y(Channel.)37 b(This)26 b(extra)g(information)f
-(indicates)i(whic)n(h)f(AST)h(attribute)f(v)-5 b(alues)27
-b(should)f(b)r(e)h(enclosed)e(in)427 874 y(quotes)i(b)r(efore)h(b)r
-(eing)f(passed)g(to)h(a)f(Channel.)340 999 y Fi(\017)45
-b Ft(")p Fj(IV)n(O)n(A)p Ft(")p Fj(:)63 b(This)40 b(is)h(a)g(format)f
-(that)h(uses)g(an)g(early)e(draft)i(of)g(the)g(STC-X)g(sc)n(hema)f(dev)
-n(elop)r(ed)h(b)n(y)427 1098 y(the)30 b(In)n(ternational)e(Virtual)h
-(Observ)-5 b(atory)27 b(Alliance)i(\(IV)n(O)n(A)g(-)g(see)g
-Ft(")p Fj(h)n(ttp://www.iv)n(oa.net/)p Ft(")p Fj(\))e(to)i(de-)427
-1198 y(scrib)r(e)38 b(co)r(ordinate)f(systems,)j(regions,)f(mappings,)h
-(etc.)68 b(Supp)r(ort)38 b(is)g(limited)g(to)g(V1.20)f(describ)r(ed)427
-1298 y(at)d Ft(")p Fj(h)n(ttp://www.iv)n(oa.net/Do)r(cumen)n
-(ts/WD/STC/STC-2005022)o(5.h)n(tml)p Ft(")p Fj(.)49 b(Since)34
-b(the)g(v)n(ersion)e(of)427 1397 y(STC-X)i(\014nally)f(adopted)g(b)n(y)
-h(the)f(IV)n(O)n(A)g(di\013ers)h(in)g(sev)n(eral)d(signi\014can)n(t)i
-(resp)r(ects)g(from)g(V1.20,)h(this)427 1497 y(format)27
-b(is)g(no)n(w)f(mainly)h(of)g(historical)f(in)n(terest.)37
-b(Note,)27 b(the)g(alternativ)n(e)f Ft(")p Fj(STC-S)p
-Ft(")g Fj(format)h(\(a)g(simpler)427 1596 y(non-XML)h(enco)r(ding)f(of)
-g(the)h(STC)g(metadata\))f(is)h(supp)r(orted)f(b)n(y)h(the)g(StcsChan)f
-(class.)-2 1750 y Fd(Choice)32 b(of)f(Default)h(F)-8
-b(ormat;)n(:)227 1896 y Fj(If)30 b(the)f(XmlF)-7 b(ormat)29
-b(attribute)g(of)g(an)f(XmlChan)h(is)g(not)g(set,)g(the)h(default)f(v)
--5 b(alue)29 b(it)g(tak)n(es)f(is)h(determined)g(b)n(y)227
-1996 y(the)g(presence)e(of)h(certain)f(critical)h(items)g(within)h(the)
-f(do)r(cumen)n(t)h(most)f(recen)n(tly)f(read)g(using)h(astRead.)38
-b(The)227 2095 y(sequence)27 b(of)h(decision)f(used)h(to)f(arriv)n(e)f
-(at)h(the)h(default)g(v)-5 b(alue)28 b(is)f(as)g(follo)n(ws:)340
-2344 y Fi(\017)45 b Fj(If)19 b(the)g(previous)e(do)r(cumen)n(t)i(read)e
-(con)n(tained)h(an)n(y)f(elemen)n(ts)i(in)f(an)n(y)g(of)g(the)h(STC)f
-(namespaces)g(\()p Ft(")p Fj(urn:n)n(v)n(o-)427 2443
-y(stc)p Ft(")p Fj(,)28 b Ft(")p Fj(urn:n)n(v)n(o-co)r(ords)p
-Ft(")23 b Fj(or)k Ft(")p Fj(urn:n)n(v)n(o-region)p Ft(")p
-Fj(\),)d(then)k(the)g(default)g(v)-5 b(alue)28 b(is)f(IV)n(O)n(A.)340
-2568 y Fi(\017)45 b Fj(If)30 b(the)f(previous)f(do)r(cumen)n(t)h(read)f
-(con)n(tained)g(an)n(y)g(elemen)n(ts)h(in)g(the)g(AST)g(namespace)f
-(whic)n(h)h(had)g(an)427 2667 y(asso)r(ciated)e(XML)g(attribute)h
-(called)f Ft(")p Fj(quoted)p Ft(")p Fj(,)g(then)h(the)g(default)g(v)-5
-b(alue)28 b(is)f(QUOTED.)340 2792 y Fi(\017)45 b Fj(Otherwise,)31
-b(if)g(none)g(of)f(these)h(conditions)f(is)h(met)g(\(as)f(w)n(ould)h(b)
-r(e)g(the)g(case)f(if)h(no)f(do)r(cumen)n(t)h(had)g(y)n(et)427
-2891 y(b)r(een)d(read\),)f(then)h(NA)-7 b(TIVE)28 b(format)g(is)f
-(used.)227 3045 y(Setting)h(an)g(explicit)f(v)-5 b(alue)28
-b(for)f(the)h(XmlF)-7 b(ormat)27 b(attribute)h(alw)n(a)n(ys)e(o)n(v)n
-(er-rides)f(this)j(default)g(b)r(eha)n(viour.)-2 3186
-y Fd(The)k(IV)m(O)m(A)h(F)-8 b(ormat)n(:)227 3332 y Fj(The)39
-b(IV)n(O)n(A)g(supp)r(ort)g(caters)f(only)h(for)f(certain)h(parts)f(of)
-h(V1.20)g(of)g(the)g(draft)g(Space-Time)g(Co)r(ordinate)227
-3432 y(\(STC\))33 b(sc)n(hema)f(\(see)h(h)n(ttp://www.iv)n(oa.net/Do)r
-(cumen)n(ts/WD/STC/STC-2005022)o(5.h)n(tml\).)46 b(Note,)34
-b(this)227 3531 y(draft)f(has)g(no)n(w)f(b)r(een)i(sup)r(erceded)f(b)n
-(y)g(an)g(o\016cially)f(adopted)h(v)n(ersion)e(that)j(di\013ers)f(in)g
-(sev)n(eral)e(signi\014can)n(t)227 3631 y(resp)r(ects)c(from)h(V1.20.)
-35 b(Consequen)n(tly)-7 b(,)27 b(the)h Ft(")p Fj(IV)n(O)n(A)p
-Ft(")f Fj(XmlChan)h(format)f(is)g(of)h(historical)e(in)n(terest)h(only)
--7 b(.)227 3751 y(The)30 b(follo)n(wing)f(p)r(oin)n(ts)h(should)f(b)r
-(e)h(noted)g(when)g(using)g(an)f(XmlChan)h(to)g(read)f(or)g(write)g
-(STC)h(information)227 3851 y(\(note,)e(this)g(list)g(is)f(curren)n
-(tly)g(incomplete\):)340 4099 y Fi(\017)45 b Fj(Ob)5
-b(jects)27 b(can)h(curren)n(tly)e(only)h(b)r(e)h(read)f(using)g(this)h
-(format,)f(not)h(written.)340 4224 y Fi(\017)45 b Fj(The)23
-b(AST)f(ob)5 b(ject)22 b(generated)f(b)n(y)h(reading)f(an)h
-Fl(<)p Fj(STCMetadata)p Fl(>)f Fj(elemen)n(t)h(will)g(b)r(e)h(an)f
-(instance)g(of)g(one)427 4323 y(of)27 b(the)h(AST)g Ft(")p
-Fj(Stc)p Ft(")f Fj(classes:)35 b(StcResourcePro\014le,)25
-b(StcSearc)n(hLo)r(cation,)h(StcCatalogEn)n(tryLo)r(cation,)427
-4423 y(StcObsDataLo)r(cation.)340 4547 y Fi(\017)45 b
-Fj(When)27 b(reading)f(an)g Fl(<)p Fj(STCMetadata)p Fl(>)f
-Fj(elemen)n(t,)i(the)g(axes)f(in)h(the)g(returned)f(AST)h(Ob)5
-b(ject)26 b(will)h(b)r(e)g(in)427 4647 y(the)j(order)e(space,)g(time,)j
-(sp)r(ectral,)e(redshift,)g(irresp)r(ectiv)n(e)f(of)h(the)h(order)e(in)
-h(whic)n(h)g(the)h(axes)e(o)r(ccur)g(in)427 4747 y(the)34
-b Fl(<)p Fj(STCMetadata)p Fl(>)e Fj(elemen)n(t.)53 b(If)34
-b(the)g(supplied)f Fl(<)p Fj(STCMetadata)p Fl(>)f Fj(elemen)n(t)h(do)r
-(es)g(not)g(con)n(tain)427 4846 y(all)h(of)h(these)f(axes,)i(the)f
-(returned)f(AST)h(Ob)5 b(ject)34 b(will)h(also)e(omit)i(them,)i(but)e
-(the)g(ordering)e(of)h(those)427 4946 y(axes)h(whic)n(h)h(are)f(presen)
-n(t)g(will)i(b)r(e)f(as)f(stated)h(ab)r(o)n(v)n(e.)61
-b(If)36 b(the)g(spatial)g(frame)f(represen)n(ts)g(a)g(celestial)427
-5046 y(co)r(ordinate)27 b(system)g(the)h(spatial)f(axes)g(will)g(b)r(e)
-h(in)g(the)g(order)f(\(longitude,)g(latitude\).)340 5170
-y Fi(\017)45 b Fj(Un)n(til)25 b(suc)n(h)g(time)g(as)f(the)h(AST)g
-(TimeF)-7 b(rame)24 b(is)g(complete,)h(a)g(simple)f(1-dimensional)g(F)
--7 b(rame)24 b(\(with)h(Do-)427 5270 y(main)g(set)f(to)g(TIME\))g(will)
-h(b)r(e)g(used)f(to)g(represen)n(t)f(the)i(STC)f Fl(<)p
-Fj(TimeF)-7 b(rame)p Fl(>)23 b Fj(elemen)n(t.)36 b(Consequen)n(tly)-7
-b(,)427 5369 y(most)28 b(of)f(the)h(information)f(within)h(a)g
-Fl(<)p Fj(TimeF)-7 b(rame)p Fl(>)26 b Fj(elemen)n(t)i(is)f(curren)n
-(tly)g(ignored.)340 5494 y Fi(\017)45 b Fl(<)p Fj(SpaceF)-7
-b(rame)p Fl(>)27 b Fj(elemen)n(ts)i(can)f(only)g(b)r(e)h(read)f(if)h
-(they)g(describ)r(e)g(a)f(celestial)g(longitude)h(and)f(latitude)427
-5593 y(axes)33 b(supp)r(orted)g(b)n(y)g(the)h(AST)f(SkyF)-7
-b(rame)33 b(class.)53 b(The)33 b(space)g(axes)f(will)i(b)r(e)g
-(returned)f(in)g(the)h(order)427 5693 y(\(longitude,)28
-b(latitude\).)p eop end
-%%Page: 482 492
-TeXDict begin 482 491 bop 0 52 a FF(482)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)340 351
-y Fi(\017)45 b Fj(V)-7 b(elo)r(cities)28 b(asso)r(ciated)e(with)i
-(SpaceF)-7 b(rames)27 b(cannot)g(b)r(e)h(read.)340 477
-y Fi(\017)45 b Fj(An)n(y)23 b Fl(<)p Fj(GenericCo)r(ordF)-7
-b(rame)p Fl(>)19 b Fj(elemen)n(ts)k(within)g(an)f Fl(<)p
-Fj(AstroCo)r(ordSystem)p Fl(>)e Fj(elemen)n(t)j(are)f(curren)n(tly)427
-577 y(ignored.)340 702 y Fi(\017)45 b Fj(An)n(y)29 b(second)e(or)h
-(subsequen)n(t)g Fl(<)p Fj(AstroCo)r(ordSystem)p Fl(>)e
-Fj(found)j(within)g(an)f(STCMetaData)g(elemen)n(t)h(is)427
-802 y(ignored.)340 928 y Fi(\017)45 b Fj(An)n(y)37 b(second)g(or)f
-(subsequen)n(t)h Fl(<)p Fj(AstroCo)r(ordArea)p Fl(>)d
-Fj(found)k(within)g(an)f(STCMetaData)f(elemen)n(t)i(is)427
-1027 y(ignored.)340 1153 y Fi(\017)45 b Fj(An)n(y)28
-b Fl(<)p Fj(O\013setCen)n(ter)p Fl(>)e Fj(found)i(within)g(a)f
-Fl(<)p Fj(SpaceF)-7 b(rame)p Fl(>)26 b Fj(is)i(ignored.)340
-1279 y Fi(\017)45 b Fj(An)n(y)28 b(Co)r(ordFla)n(v)n(or)c(elemen)n(t)k
-(found)g(within)g(a)g Fl(<)p Fj(SpaceF)-7 b(rame)p Fl(>)25
-b Fj(is)j(ignored.)340 1405 y Fi(\017)45 b Fl(<)p Fj(SpaceF)-7
-b(rame)p Fl(>)23 b Fj(elemen)n(ts)h(can)g(only)f(b)r(e)i(read)e(if)i
-(they)g(refer)e(to)h(one)g(of)g(the)h(follo)n(wing)e(space)h(reference)
-427 1504 y(frames:)36 b(ICRS,)28 b(GALA)n(CTIC)p Ft(_)p
-Fj(I)r(I,)g(SUPER)p Ft(_)p Fj(GALA)n(CTIC,)f(HEE,)g(FK4,)g(FK5,)g
-(ECLIPTIC.)340 1630 y Fi(\017)45 b Fl(<)p Fj(SpaceF)-7
-b(rame)p Fl(>)25 b Fj(elemen)n(ts)h(can)g(only)g(b)r(e)h(read)f(if)h
-(the)f(reference)g(p)r(osition)g(is)g(TOPOCENTER.)f(Also,)427
-1730 y(an)n(y)i(planetary)g(ephemeris)g(is)g(ignored.)340
-1855 y Fi(\017)45 b Fj(Regions:)36 b(there)26 b(is)g(curren)n(tly)g(no)
-g(supp)r(ort)g(for)g(STC)h(regions)e(of)h(t)n(yp)r(e)h(Sector,)f(Con)n
-(v)n(exHull)f(or)h(SkyIn-)427 1955 y(dex.)340 2081 y
-Fi(\017)45 b Fj(The)34 b(AST)g(Region)e(read)h(from)g(a)g(Co)r(ordIn)n
-(terv)-5 b(al)32 b(elemen)n(t)h(is)h(considered)e(to)i(b)r(e)f(op)r(en)
-h(if)g(either)f(the)427 2180 y(lo)p Ft(_)p Fj(include)27
-b(or)g(the)h(hi)p Ft(_)p Fj(include)g(attribute)g(is)f(set)h(to)f
-(false.)340 2306 y Fi(\017)45 b Fl(<)p Fj(RegionFile)p
-Fl(>)27 b Fj(elemen)n(ts)g(are)g(not)g(supp)r(orted.)340
-2432 y Fi(\017)45 b Fj(V)-7 b(ertices)33 b(within)h Fl(<)p
-Fj(P)n(olygon)p Fl(>)c Fj(elemen)n(ts)k(are)e(alw)n(a)n(ys)f
-(considered)h(to)h(b)r(e)h(joined)g(using)e(great)g(circles)427
-2531 y(\(that)c(is,)g Fl(<)p Fj(SmallCircle)p Fl(>)e
-Fj(elemen)n(ts)i(are)e(ignored\).)p 0 2716 3780 12 v
-0 2848 a Fz(XmlInden)l(t)245 b Fe(Con)m(trols)36 b(output)i(of)g(inden)
-m(tation)e(and)j(line)1764 2963 y(feeds)3144 2848 y Fz(XmlInden)l(t)0
-3114 y Fd(Description:)44 b Fj(This)39 b(attribute)g(con)n(trols)e(the)
-i(app)r(earance)e(of)h(the)h(XML)g(pro)r(duced)f(when)h(an)f(AST)h(ob)5
-b(ject)39 b(is)227 3214 y(written)21 b(to)g(an)g(XmlChan.)35
-b(If)21 b(it)h(is)f(non-zero,)f(then)i(extra)e(linefeed)h(c)n
-(haracters)e(will)i(b)r(e)g(inserted)g(as)f(necessary)227
-3313 y(to)26 b(ensure)f(that)i(eac)n(h)e(XML)h(tag)f(starts)g(on)h(a)g
-(new)g(line,)g(and)g(eac)n(h)f(tag)g(will)h(b)r(e)h(inden)n(ted)f(to)g
-(sho)n(w)f(its)h(depth)227 3413 y(in)k(the)f(con)n(tainmen)n(t)g
-(hierarc)n(h)n(y)-7 b(.)40 b(If)30 b(XmlInden)n(t)g(is)f(zero)f(\(the)i
-(default\),)g(then)g(no)f(linefeeds)g(or)g(inden)n(tation)227
-3513 y(strings)e(will)h(b)r(e)g(added)f(to)h(output)g(text.)0
-3655 y Fd(T)m(yp)s(e:)227 3755 y Fj(In)n(teger)f(\(b)r(o)r(olean\).)0
-3897 y Fd(Class)k(Applicabilit)m(y:)259 4026 y(XmlChan)427
-4126 y Fj(All)d(XmlChans)g(ha)n(v)n(e)e(this)i(attribute.)p
-0 4311 V 0 4443 a Fz(XmlLength)473 b Fe(Con)m(trols)36
-b(output)i(bu\013er)h(length)471 b Fz(XmlLength)0 4617
-y Fd(Description:)44 b Fj(This)34 b(attribute)h(sp)r(eci\014es)e(the)i
-(maxim)n(um)f(length)g(to)g(use)g(when)g(writing)f(out)i(text)f
-(through)f(the)227 4717 y(sink)28 b(function)g(supplied)g(when)g(the)g
-(XmlChan)f(w)n(as)g(created.)227 4838 y(The)h(n)n(um)n(b)r(er)g(of)g(c)
-n(haracters)d(in)j(eac)n(h)f(string)h(written)g(out)g(through)f(the)h
-(sink)g(function)g(will)g(not)g(b)r(e)g(greater)227 4937
-y(than)g(the)g(v)-5 b(alue)27 b(of)h(this)g(attribute)g(\(but)g(ma)n(y)
-f(b)r(e)h(less\).)37 b(A)28 b(v)-5 b(alue)27 b(of)h(zero)e(\(the)j
-(default\))f(means)f(there)g(is)h(no)227 5037 y(limit)h(-)e(eac)n(h)g
-(string)g(can)g(b)r(e)h(of)f(an)n(y)g(length.)0 5179
-y Fd(T)m(yp)s(e:)227 5279 y Fj(In)n(teger.)0 5421 y Fd(Class)k
-(Applicabilit)m(y:)259 5551 y(XmlChan)427 5650 y Fj(All)d(XmlChans)g
-(ha)n(v)n(e)e(this)i(attribute.)p eop end
-%%Page: 483 493
-TeXDict begin 483 492 bop 3643 52 a FF(483)p 0 351 3780
-12 v 0 483 a Fz(XmlPre\014x)200 b Fe(The)38 b(namespace)g(pre\014x)h
-(to)f(use)h(when)g(writing)197 b Fz(XmlPre\014x)0 672
-y Fd(Description:)44 b Fj(This)22 b(attribute)h(is)f(a)g(string)f(whic)
-n(h)h(is)g(to)g(b)r(e)h(used)f(as)f(the)i(namespace)e(pre\014x)h(for)f
-(all)h(XML)h(elemen)n(ts)227 771 y(created)k(as)g(a)g(result)g(of)h
-(writing)f(an)g(AST)h(Ob)5 b(ject)28 b(out)f(through)g(an)g(XmlChan.)37
-b(The)28 b(URI)g(asso)r(ciated)e(with)227 871 y(the)20
-b(namespace)f(pre\014x)g(is)g(giv)n(en)g(b)n(y)g(the)h(sym)n(b)r(olic)e
-(constan)n(t)h(AST)p Ft(__)p Fj(XMLNS)h(de\014ned)g(in)f(ast.h.)34
-b(A)20 b(de\014nition)227 971 y(of)28 b(the)g(namespace)e(pre\014x)i
-(is)f(included)h(in)g(eac)n(h)f(top-lev)n(el)f(elemen)n(t)i(pro)r
-(duced)f(b)n(y)h(the)g(XmlChan.)227 1095 y(The)j(default)g(v)-5
-b(alue)30 b(is)g(a)g(blank)h(string)e(whic)n(h)i(causes)e(no)h
-(pre\014x)g(to)h(b)r(e)f(used.)46 b(In)31 b(this)f(case)g(eac)n(h)g
-(top-lev)n(el)227 1195 y(elemen)n(t)e(will)g(set)f(the)h(default)g
-(namespace)f(to)g(b)r(e)h(the)g(v)-5 b(alue)28 b(of)g(AST)p
-Ft(__)p Fj(XMLNS.)0 1344 y Fd(T)m(yp)s(e:)227 1444 y
-Fj(String.)0 1593 y Fd(Class)j(Applicabilit)m(y:)259
-1730 y(Ob)5 b(ject)427 1829 y Fj(All)28 b(Ob)5 b(jects)28
-b(ha)n(v)n(e)e(this)i(attribute.)p 0 2029 V 0 2159 a
-Fz(Zo)t(om)1322 2160 y Fe(Zo)s(omMap)37 b(scale)i(factor)3447
-2159 y Fz(Zo)t(om)0 2349 y Fd(Description:)44 b Fj(This)24
-b(attribute)g(holds)g(the)g(Zo)r(omMap)f(scale)g(factor,)h(b)n(y)g
-(whic)n(h)g(co)r(ordinate)e(v)-5 b(alues)24 b(are)f(m)n(ultiplied)227
-2449 y(\(b)n(y)g(the)h(forw)n(ard)d(transformation\))g(or)h(divided)i
-(\(b)n(y)f(the)g(in)n(v)n(erse)f(transformation\).)34
-b(This)22 b(factor)h(is)f(set)h(when)227 2548 y(a)k(Zo)r(omMap)g(is)h
-(created,)e(but)j(ma)n(y)e(later)g(b)r(e)h(mo)r(di\014ed.)37
-b(The)27 b(default)i(v)-5 b(alue)27 b(is)g(unit)n(y)-7
-b(.)227 2673 y(Note)35 b(that)g(if)h(a)e(Zo)r(omMap)g(is)h(in)n(v)n
-(erted)f(\(e.g.)58 b(b)n(y)34 b(using)h(astIn)n(v)n(ert\),)h(then)f
-(the)g(recipro)r(cal)e(of)i(this)g(zo)r(om)227 2773 y(factor)27
-b(will,)h(in)g(e\013ect,)g(b)r(e)g(used.)0 2922 y Fd(T)m(yp)s(e:)227
-3022 y Fj(Double)g(precision.)0 3171 y Fd(Class)j(Applicabilit)m(y:)259
-3307 y(Zo)s(omMap)427 3407 y Fj(All)d(Zo)r(omMaps)f(ha)n(v)n(e)f(this)i
-(attribute.)0 3569 y Fd(Notes:)340 3851 y Fi(\017)45
-b Fj(The)28 b(Zo)r(om)f(attribute)h(ma)n(y)f(not)g(b)r(e)h(set)g(to)f
-(zero.)p eop end
-%%Page: 484 494
-TeXDict begin 484 493 bop 0 52 a FF(484)1994 b Fy(C)91
-b(AST)29 b(A)-8 b(TTRIBUTE)31 b(DESCRIPTIONS)p eop end
-%%Page: 485 495
-TeXDict begin 485 494 bop 3643 52 a FF(485)0 351 y Fz(D)135
-b(AST)43 b(Class)j(Descriptions)p 0 582 3780 12 v 0 713
-a(Axis)1057 b Fe(Store)38 b(axis)g(information)1054 b
-Fz(Axis)0 861 y Fd(Description:)44 b Fj(The)30 b(Axis)f(class)f(is)h
-(used)g(to)g(store)g(information)f(asso)r(ciated)g(with)i(a)f
-(particular)f(axis)g(of)h(a)g(F)-7 b(rame.)227 960 y(It)28
-b(is)g(used)f(in)n(ternally)g(b)n(y)g(the)h(AST)g(library)e(and)i(has)f
-(no)g(constructor)f(function.)38 b(Y)-7 b(ou)27 b(should)g(encoun)n
-(ter)g(it)227 1060 y(only)g(within)i(textual)e(output)i(\(e.g.)36
-b(from)28 b(astW)-7 b(rite\).)0 1200 y Fd(Constructor)32
-b(F)-8 b(unction:)227 1300 y Fj(None.)-2 1440 y Fd(Inheritance)n(:)227
-1586 y Fj(The)28 b(Axis)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)p 0 1767 V 0 1898 a Fz(Bo)l(x)480
-1899 y Fe(A)39 b(b)s(o)m(x)f(region)f(with)h(sides)h(parallel)d(to)i
-(the)h(axes)f(of)h(a)f(F)-10 b(rame)3549 1898 y Fz(Bo)l(x)0
-2069 y Fd(Description:)44 b Fj(The)26 b(Bo)n(x)e(class)g(implemen)n(ts)
-i(a)e(Region)h(whic)n(h)g(represen)n(ts)f(a)h(b)r(o)n(x)f(with)i(sides)
-f(parallel)f(to)h(the)h(axes)227 2169 y(of)34 b(a)f(F)-7
-b(rame)32 b(\(i.e.)55 b(an)33 b(area)f(whic)n(h)h(encloses)g(a)g(giv)n
-(en)f(range)g(of)i(v)-5 b(alues)33 b(on)g(eac)n(h)f(axis\).)54
-b(A)34 b(Bo)n(x)e(is)h(similar)227 2269 y(to)e(an)g(In)n(terv)-5
-b(al,)31 b(the)g(only)g(real)f(di\013erence)g(b)r(eing)h(that)h(the)f
-(In)n(terv)-5 b(al)30 b(class)g(allo)n(ws)g(some)g(axis)g(limits)h(to)g
-(b)r(e)227 2368 y(unsp)r(eci\014ed.)37 b(Note,)26 b(a)e(Bo)n(x)h(will)g
-(only)g(lo)r(ok)f(lik)n(e)h(a)g(b)r(o)n(x)g(if)g(the)h(F)-7
-b(rame)25 b(geometry)f(is)h(appro)n(ximately)e(\015at.)36
-b(F)-7 b(or)227 2468 y(instance,)34 b(a)e(Bo)n(x)f(cen)n(tred)h(close)f
-(to)h(a)g(p)r(ole)h(in)f(a)g(SkyF)-7 b(rame)32 b(will)g(lo)r(ok)g(more)
-f(lik)n(e)h(a)g(fan)h(than)f(a)g(b)r(o)n(x)g(\(the)227
-2567 y(P)n(olygon)26 b(class)g(can)i(b)r(e)g(used)f(to)h(create)e(a)h
-(b)r(o)n(x-lik)n(e)g(region)f(close)h(to)g(a)h(p)r(ole\).)0
-2708 y Fd(Constructor)k(F)-8 b(unction:)227 2807 y Fj(astBo)n(x)-2
-2948 y Fd(Inheritance)n(:)227 3094 y Fj(The)28 b(Bo)n(x)e(class)h
-(inherits)h(from)f(the)h(Region)f(class.)-2 3234 y Fd(A)m(ttributes)n
-(:)227 3380 y Fj(The)d(Bo)n(x)e(class)h(do)r(es)g(not)h(de\014ne)f(an)n
-(y)g(new)h(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g
-(applicable)g(to)g(all)g(Regions.)-2 3521 y Fd(F)-8 b(unctions)n(:)227
-3667 y Fj(The)23 b(Bo)n(x)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h
-(to)f(all)h(Regions.)p 0 3848 V 0 3979 a Fz(Channel)1180
-3986 y Fe(Basic)38 b(\(textual\))e(I/O)j(c)m(hannel)3294
-3979 y Fz(Channel)0 4168 y Fd(Description:)44 b Fj(The)35
-b(Channel)g(class)f(implemen)n(ts)h(lo)n(w-lev)n(el)e(input/output)i
-(for)g(the)g(AST)g(library)-7 b(.)57 b(W)-7 b(riting)35
-b(an)227 4267 y(Ob)5 b(ject)36 b(to)g(a)g(Channel)f(will)i(generate)d
-(a)i(textual)g(represen)n(tation)e(of)i(that)h(Ob)5 b(ject,)38
-b(and)e(reading)e(from)i(a)227 4367 y(Channel)28 b(will)g(create)e(a)h
-(new)h(Ob)5 b(ject)28 b(from)f(its)h(textual)f(represen)n(tation.)227
-4487 y(Normally)-7 b(,)20 b(when)f(y)n(ou)g(use)f(a)h(Channel,)i(y)n
-(ou)d(should)h(pro)n(vide)f Ft(")p Fj(source)p Ft(")f
-Fj(and)h Ft(")p Fj(sink)p Ft(")g Fj(functions)i(whic)n(h)f(connect)227
-4587 y(it)38 b(to)f(an)f(external)h(data)f(store)g(b)n(y)h(reading)f
-(and)h(writing)f(the)i(resulting)e(text.)66 b(By)37 b(default,)j(ho)n
-(w)n(ev)n(er,)d(a)227 4686 y(Channel)28 b(will)g(read)e(from)i
-(standard)e(input)j(and)e(write)g(to)h(standard)e(output.)0
-4826 y Fd(Constructor)32 b(F)-8 b(unction:)227 4926 y
-Fj(astChannel)-2 5066 y Fd(Inheritance)n(:)227 5213 y
-Fj(The)28 b(Channel)f(class)g(inherits)h(from)f(the)h(Ob)5
-b(ject)27 b(class.)-2 5353 y Fd(A)m(ttributes)n(:)227
-5499 y Fj(In)34 b(addition)e(to)h(those)g(attributes)g(common)g(to)g
-(all)f(Ob)5 b(jects,)34 b(ev)n(ery)e(Channel)h(also)f(has)h(the)g
-(follo)n(wing)f(at-)227 5599 y(tributes:)p eop end
-%%Page: 486 496
-TeXDict begin 486 495 bop 0 52 a FF(486)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(Commen)n(t:)37 b(Include)28 b(textual)g(commen)n(ts)f(in)h
-(output?)340 485 y Fi(\017)45 b Fj(F)-7 b(ull:)38 b(Set)28
-b(lev)n(el)f(of)g(output)i(detail)340 618 y Fi(\017)45
-b Fj(Rep)r(ortLev)n(el:)36 b(Selects)28 b(the)g(lev)n(el)f(of)g(error)f
-(rep)r(orting)340 752 y Fi(\017)45 b Fj(Skip:)37 b(Skip)28
-b(irrelev)-5 b(an)n(t)27 b(data?)340 885 y Fi(\017)45
-b Fj(Strict:)37 b(Generate)27 b(errors)f(instead)h(of)h(w)n(arnings?)-2
-1049 y Fd(F)-8 b(unctions)n(:)227 1195 y Fj(In)23 b(addition)g(to)g
-(those)g(functions)g(applicable)f(to)h(all)g(Ob)5 b(jects,)24
-b(the)f(follo)n(wing)f(functions)h(ma)n(y)f(also)g(b)r(e)i(applied)227
-1294 y(to)k(all)f(Channels:)340 1558 y Fi(\017)45 b Fj(astW)-7
-b(arnings:)36 b(Return)28 b(w)n(arnings)d(from)j(the)g(previous)e(read)
-h(or)g(write)340 1691 y Fi(\017)45 b Fj(astPutChannelData:)36
-b(Store)27 b(data)g(to)h(pass)f(to)g(source)f(or)h(sink)h(functions)340
-1825 y Fi(\017)45 b Fj(astRead:)36 b(Read)28 b(an)f(Ob)5
-b(ject)27 b(from)h(a)f(Channel)340 1958 y Fi(\017)45
-b Fj(astW)-7 b(rite:)37 b(W)-7 b(rite)28 b(an)f(Ob)5
-b(ject)28 b(to)f(a)g(Channel)p 0 2159 3780 12 v 0 2291
-a Fz(Circle)386 b Fe(A)38 b(circular)f(or)h(spherical)g(region)f
-(within)g(a)i(F)-10 b(rame)384 b Fz(Circle)0 2481 y Fd(Description:)44
-b Fj(The)27 b(Circle)e(class)h(implemen)n(ts)g(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(a)h(circle)g(or)f(sphere)g(within)i(a)f(F)-7
-b(rame.)0 2632 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2731 y Fj(astCircle)-2 2882 y Fd(Inheritance)n(:)227
-3028 y Fj(The)28 b(Circle)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 3179 y Fd(A)m(ttributes)n(:)227 3325 y Fj(The)19
-b(Circle)g(class)f(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)f(Regions.)-2 3476 y Fd(F)-8 b(unctions)n(:)227
-3622 y Fj(In)23 b(addition)g(to)f(those)h(functions)g(applicable)f(to)h
-(all)f(Regions,)h(the)g(follo)n(wing)f(functions)h(ma)n(y)f(also)f(b)r
-(e)j(applied)227 3722 y(to)k(all)f(Circles:)340 3985
-y Fi(\017)45 b Fj(astCircleP)n(ars:)34 b(Get)28 b(the)g(geometric)f
-(parameters)e(of)j(the)g(Circle)340 4118 y Fi(\017)45
-b Fj(AST)p Ft(_)p Fj(CIR)n(CLEP)-7 b(ARS:)27 b(Get)h(the)g(geometric)f
-(parameters)e(of)j(the)g(Circle)p 0 4319 V 0 4450 a Fz(CmpF)-11
-b(rame)1429 4451 y Fe(Comp)s(ound)37 b(F)-10 b(rame)3128
-4450 y Fz(CmpF)f(rame)0 4646 y Fd(Description:)44 b Fj(A)33
-b(CmpF)-7 b(rame)32 b(is)g(a)f(comp)r(ound)i(F)-7 b(rame)31
-b(whic)n(h)h(allo)n(ws)f(t)n(w)n(o)g(comp)r(onen)n(t)h(F)-7
-b(rames)32 b(\(of)g(an)n(y)f(class\))227 4745 y(to)i(b)r(e)h(merged)e
-(together)g(to)h(form)g(a)g(more)f(complex)h(F)-7 b(rame.)53
-b(The)33 b(axes)f(of)i(the)f(t)n(w)n(o)g(comp)r(onen)n(t)f(F)-7
-b(rames)227 4845 y(then)25 b(app)r(ear)f(together)f(in)i(the)f
-(resulting)g(CmpF)-7 b(rame)24 b(\(those)h(of)f(the)h(\014rst)f(F)-7
-b(rame,)24 b(follo)n(w)n(ed)g(b)n(y)g(those)g(of)g(the)227
-4944 y(second)j(F)-7 b(rame\).)227 5070 y(Since)24 b(a)f(CmpF)-7
-b(rame)23 b(is)g(itself)h(a)f(F)-7 b(rame,)24 b(it)g(can)f(b)r(e)g
-(used)h(as)e(a)h(comp)r(onen)n(t)g(in)h(forming)f(further)g(CmpF)-7
-b(rames.)227 5169 y(F)g(rames)27 b(of)h(arbitrary)d(complexit)n(y)i(ma)
-n(y)g(b)r(e)h(built)g(from)g(simple)f(individual)h(F)-7
-b(rames)27 b(in)h(this)g(w)n(a)n(y)-7 b(.)227 5295 y(Also)39
-b(since)f(a)h(F)-7 b(rame)38 b(is)h(a)f(Mapping,)j(a)e(CmpF)-7
-b(rame)38 b(can)h(also)f(b)r(e)h(used)g(as)f(a)g(Mapping.)70
-b(Normally)-7 b(,)41 b(a)227 5394 y(CmpF)-7 b(rame)35
-b(is)g(simply)h(equiv)-5 b(alen)n(t)35 b(to)g(a)g(UnitMap,)i(but)f(if)g
-(either)f(of)g(the)h(comp)r(onen)n(t)f(F)-7 b(rames)34
-b(within)i(a)227 5494 y(CmpF)-7 b(rame)41 b(is)f(a)g(Region)g(\(a)g
-(sub-class)g(of)g(F)-7 b(rame\),)44 b(then)d(the)g(CmpF)-7
-b(rame)40 b(will)h(use)f(the)h(Region)f(as)g(a)227 5593
-y(Mapping)g(when)g(transforming)e(v)-5 b(alues)39 b(for)g(axes)g
-(describ)r(ed)h(b)n(y)f(the)h(Region.)73 b(Th)n(us)39
-b(input)i(axis)e(v)-5 b(alues)227 5693 y(corresp)r(onding)26
-b(to)h(p)r(ositions)h(whic)n(h)f(are)g(outside)g(the)h(Region)f(will)h
-(result)f(in)h(bad)f(output)i(axis)d(v)-5 b(alues.)p
-eop end
-%%Page: 487 497
-TeXDict begin 487 496 bop 3643 52 a FF(487)0 351 y Fd(Constructor)32
-b(F)-8 b(unction:)227 451 y Fj(astCmpF)h(rame)-2 604
-y Fd(Inheritance)n(:)227 750 y Fj(The)28 b(CmpF)-7 b(rame)27
-b(class)g(inherits)g(from)h(the)g(F)-7 b(rame)27 b(class.)-2
-903 y Fd(A)m(ttributes)n(:)227 1049 y Fj(The)h(CmpF)-7
-b(rame)28 b(class)g(do)r(es)f(not)h(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)227 1148 y(F)-7 b(rames.)34 b(Ho)n(w)n(ev)n(er,)19
-b(the)i(attributes)f(of)g(the)g(comp)r(onen)n(t)g(F)-7
-b(rames)19 b(can)h(b)r(e)g(accessed)f(as)g(if)h(they)h(w)n(ere)e
-(attributes)227 1248 y(of)29 b(the)g(CmpF)-7 b(rame.)39
-b(F)-7 b(or)28 b(instance,)g(if)h(a)g(CmpF)-7 b(rame)28
-b(con)n(tains)f(a)h(Sp)r(ecF)-7 b(rame)29 b(and)f(a)g(SkyF)-7
-b(rame,)28 b(then)h(the)227 1348 y(CmpF)-7 b(rame)30
-b(will)g(recognise)e(the)i Ft(")p Fj(Equino)n(x)p Ft(")e
-Fj(attribute)i(and)g(forw)n(ard)e(access)h(requests)g(to)h(the)g(comp)r
-(onen)n(t)227 1447 y(SkyF)-7 b(rame.)36 b(Lik)n(ewise,)27
-b(it)h(will)f(recognise)f(the)h Ft(")p Fj(RestF)-7 b(req)p
-Ft(")26 b Fj(attribute)i(and)f(forw)n(ard)f(access)g(requests)g(to)h
-(the)227 1547 y(comp)r(onen)n(t)36 b(Sp)r(ecF)-7 b(rame.)63
-b(An)36 b(axis)g(index)g(can)g(optionally)f(b)r(e)h(app)r(ended)h(to)f
-(the)h(end)f(of)g(an)n(y)f(attribute)227 1647 y(name,)f(in)f(whic)n(h)f
-(case)g(the)g(request)g(to)h(access)e(the)i(attribute)f(will)h(b)r(e)g
-(forw)n(arded)e(to)h(the)h(primary)e(F)-7 b(rame)227
-1746 y(de\014ning)28 b(the)g(sp)r(eci\014ed)g(axis.)-2
-1899 y Fd(F)-8 b(unctions)n(:)227 2045 y Fj(The)30 b(CmpF)-7
-b(rame)30 b(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)h
-(all)227 2145 y(F)-7 b(rames.)p 0 2347 3780 12 v 0 2478
-a Fz(CmpMap)1363 2479 y Fe(Comp)s(ound)38 b(Mapping)3228
-2478 y Fz(CmpMap)0 2676 y Fd(Description:)44 b Fj(A)e(CmpMap)f(is)g(a)g
-(comp)r(ound)g(Mapping)g(whic)n(h)g(allo)n(ws)f(t)n(w)n(o)g(comp)r
-(onen)n(t)h(Mappings)g(\(of)g(an)n(y)227 2776 y(class\))28
-b(to)g(b)r(e)g(connected)g(together)g(to)g(form)g(a)f(more)h(complex)g
-(Mapping.)38 b(This)28 b(connection)g(ma)n(y)f(either)h(b)r(e)227
-2875 y Ft(")p Fj(in)34 b(series)p Ft(")e Fj(\(where)h(the)h(\014rst)f
-(Mapping)h(is)f(used)h(to)f(transform)g(the)h(co)r(ordinates)e(of)h
-(eac)n(h)g(p)r(oin)n(t)h(and)f(the)227 2975 y(second)i(mapping)g(is)g
-(then)h(applied)f(to)g(the)g(result\),)i(or)e Ft(")p
-Fj(in)g(parallel)p Ft(")e Fj(\(where)i(one)g(Mapping)g(transforms)227
-3074 y(the)26 b(earlier)f(co)r(ordinates)f(for)h(eac)n(h)g(p)r(oin)n(t)
-h(and)g(the)g(second)f(Mapping)g(sim)n(ultaneously)g(transforms)f(the)i
-(later)227 3174 y(co)r(ordinates\).)227 3300 y(Since)g(a)f(CmpMap)g(is)
-h(itself)g(a)f(Mapping,)g(it)h(can)f(b)r(e)h(used)f(as)g(a)g(comp)r
-(onen)n(t)g(in)h(forming)e(further)i(CmpMaps.)227 3400
-y(Mappings)h(of)h(arbitrary)d(complexit)n(y)i(ma)n(y)g(b)r(e)h(built)h
-(from)e(simple)h(individual)f(Mappings)g(in)h(this)g(w)n(a)n(y)-7
-b(.)0 3553 y Fd(Constructor)32 b(F)-8 b(unction:)227
-3652 y Fj(astCmpMap)-2 3805 y Fd(Inheritance)n(:)227
-3951 y Fj(The)28 b(CmpMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 4104 y Fd(A)m(ttributes)n(:)227 4250 y Fj(The)33
-b(CmpMap)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n(y)e(new)i
-(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)g(applicable)g(to)g
-(all)227 4350 y(Mappings.)-2 4503 y Fd(F)-8 b(unctions)n(:)227
-4649 y Fj(The)34 b(CmpMap)h(class)e(do)r(es)g(not)i(de\014ne)f(an)n(y)f
-(new)h(functions)h(b)r(ey)n(ond)f(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 4748 y(Mappings.)p 0 4951 V 0 5083 a Fz(CmpRegion)215
-b Fe(A)39 b(com)m(bination)c(of)k(t)m(w)m(o)e(regions)g(within)g(a)1567
-5197 y(single)h(F)-10 b(rame)3087 5083 y Fz(CmpRegion)0
-5394 y Fd(Description:)44 b Fj(A)d(CmpRegion)f(is)g(a)g(Region)g(whic)n
-(h)h(allo)n(ws)e(t)n(w)n(o)g(comp)r(onen)n(t)h(Regions)g(\(of)g(an)n(y)
-g(class\))g(to)g(b)r(e)227 5494 y(com)n(bined)29 b(to)h(form)f(a)g
-(more)f(complex)h(Region.)42 b(This)30 b(com)n(bination)e(ma)n(y)h(b)r
-(e)h(p)r(erformed)f(a)g(b)r(o)r(olean)g(AND,)227 5593
-y(OR)i(or)f(X)n(OR)h(\(exclusiv)n(e)g(OR\))g(op)r(erator.)46
-b(If)31 b(the)h(AND)g(op)r(erator)d(is)j(used,)g(then)f(a)g(p)r
-(osition)g(is)g(inside)g(the)227 5693 y(CmpRegion)24
-b(only)f(if)i(it)f(is)g(inside)g(b)r(oth)g(of)g(its)g(t)n(w)n(o)f(comp)
-r(onen)n(t)h(Regions.)34 b(If)25 b(the)f(OR)g(op)r(erator)e(is)h(used,)
-i(then)p eop end
-%%Page: 488 498
-TeXDict begin 488 497 bop 0 52 a FF(488)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(a)e(p)r(osition)f(is)h
-(inside)g(the)g(CmpRegion)f(if)h(it)h(is)e(inside)h(either)g(\(or)f(b)r
-(oth\))h(of)g(its)g(t)n(w)n(o)f(comp)r(onen)n(t)h(Regions.)35
-b(If)227 451 y(the)27 b(X)n(OR)f(op)r(erator)f(is)h(used,)g(then)h(a)f
-(p)r(osition)g(is)h(inside)f(the)h(CmpRegion)f(if)h(it)f(is)h(inside)f
-(one)g(but)h(not)f(b)r(oth)227 551 y(of)g(its)f(t)n(w)n(o)g(comp)r
-(onen)n(t)g(Regions.)35 b(Other)25 b(op)r(erators)e(can)i(b)r(e)g
-(formed)g(b)n(y)g(negating)g(one)g(or)f(b)r(oth)i(comp)r(onen)n(t)227
-650 y(Regions)h(b)r(efore)g(using)g(them)i(to)e(construct)g(a)g(new)h
-(CmpRegion.)227 772 y(The)h(t)n(w)n(o)e(comp)r(onen)n(t)h(Region)g
-(need)g(not)h(refer)e(to)h(the)h(same)f(co)r(ordinate)f(F)-7
-b(rame,)28 b(but)h(it)g(m)n(ust)f(b)r(e)h(p)r(ossible)227
-872 y(for)39 b(the)h(astCon)n(v)n(ert)e(function)i(to)f(determine)h(a)f
-(Mapping)g(b)r(et)n(w)n(een)h(them)g(\(an)f(error)f(will)h(b)r(e)h(rep)
-r(orted)227 971 y(otherwise)33 b(when)g(the)h(CmpRegion)f(is)g
-(created\).)54 b(F)-7 b(or)33 b(instance,)i(a)e(CmpRegion)g(ma)n(y)f
-(com)n(bine)h(a)g(Region)227 1071 y(de\014ned)k(within)f(an)g(ICRS)g
-(SkyF)-7 b(rame)36 b(with)g(a)g(Region)f(de\014ned)i(within)f(a)g
-(Galactic)f(SkyF)-7 b(rame.)62 b(This)36 b(is)227 1171
-y(acceptable)i(b)r(ecause)g(the)g(SkyF)-7 b(rame)38 b(class)f(kno)n(ws)
-g(ho)n(w)h(to)g(con)n(v)n(ert)e(b)r(et)n(w)n(een)j(these)f(t)n(w)n(o)f
-(systems,)k(and)227 1270 y(consequen)n(tly)33 b(the)i(astCon)n(v)n(ert)
-d(function)j(will)f(also)f(b)r(e)h(able)g(to)g(con)n(v)n(ert)f(b)r(et)n
-(w)n(een)h(them.)57 b(In)34 b(suc)n(h)g(cases,)227 1370
-y(the)f(second)g(comp)r(onen)n(t)f(Region)g(will)h(b)r(e)h(mapp)r(ed)f
-(in)n(to)f(the)h(co)r(ordinate)f(F)-7 b(rame)32 b(of)h(the)g(\014rst)g
-(comp)r(onen)n(t)227 1470 y(Region,)g(and)g(the)f(F)-7
-b(rame)32 b(represen)n(ted)g(b)n(y)g(the)h(CmpRegion)f(as)f(a)h(whole)g
-(will)h(b)r(e)g(the)g(F)-7 b(rame)32 b(of)g(the)h(\014rst)227
-1569 y(comp)r(onen)n(t)28 b(Region.)227 1691 y(Since)20
-b(a)f(CmpRegion)f(is)i(itself)f(a)g(Region,)i(it)e(can)g(b)r(e)h(used)f
-(as)g(a)g(comp)r(onen)n(t)g(in)g(forming)g(further)g(CmpRegions.)227
-1791 y(Regions)27 b(of)g(arbitrary)f(complexit)n(y)h(ma)n(y)g(b)r(e)h
-(built)g(from)g(simple)f(individual)h(Regions)f(in)g(this)h(w)n(a)n(y)
--7 b(.)0 1935 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2035 y Fj(astCmpRegion)-2 2179 y Fd(Inheritance)n(:)227
-2325 y Fj(The)28 b(CmpRegion)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 2469 y Fd(A)m(ttributes)n(:)227 2616 y Fj(The)g(CmpRegion)f
-(class)g(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i(attributes)g(b)r(ey)
-n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227
-2715 y(Regions.)-2 2860 y Fd(F)-8 b(unctions)n(:)227
-3006 y Fj(The)29 b(CmpRegion)f(class)f(do)r(es)h(not)g(de\014ne)h(an)n
-(y)e(new)i(functions)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e
-(applicable)h(to)g(all)227 3105 y(Regions.)p 0 3294 3780
-12 v 0 3425 a Fz(DSBSp)t(ecF)-11 b(rame)1303 3426 y Fe(Dual)39
-b(sideband)f(sp)s(ectral)1128 3541 y(co)s(ordinate)e(system)j
-(description)2865 3425 y Fz(DSBSp)t(ecF)-11 b(rame)0
-3719 y Fd(Description:)44 b Fj(A)d(DSBSp)r(ecF)-7 b(rame)41
-b(is)f(a)g(sp)r(ecialised)g(form)g(of)g(Sp)r(ecF)-7 b(rame)40
-b(whic)n(h)h(represen)n(ts)d(p)r(ositions)i(in)h(a)227
-3819 y(sp)r(ectrum)34 b(obtained)f(using)h(a)f(dual)g(sideband)h
-(instrumen)n(t.)55 b(Suc)n(h)33 b(an)h(instrumen)n(t)f(pro)r(duces)g(a)
-g(sp)r(ectrum)227 3918 y(in)d(whic)n(h)f(eac)n(h)g(p)r(oin)n(t)g(con)n
-(tains)g(con)n(tributions)f(from)h(t)n(w)n(o)g(distinctly)h(di\013eren)
-n(t)f(frequencies,)g(one)g(from)g(the)227 4018 y Ft(")p
-Fj(lo)n(w)n(er)34 b(side)i(band)p Ft(")f Fj(\(LSB\))i(and)e(one)h(from)
-f(the)i Ft(")p Fj(upp)r(er)e(side)h(band)p Ft(")f Fj(\(USB\).)i
-(Corresp)r(onding)d(LSB)i(and)227 4118 y(USB)26 b(frequencies)g(are)e
-(connected)i(b)n(y)f(the)i(fact)f(that)g(they)g(are)e(an)i(equal)f
-(distance)h(on)f(either)h(side)f(of)h(a)g(\014xed)227
-4217 y(cen)n(tral)h(frequency)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(Lo)r(cal)e(Oscillator)p Ft(")g Fj(\(LO\))i(frequency)-7
-b(.)227 4339 y(When)33 b(quoting)e(a)g(p)r(osition)h(within)g(suc)n(h)g
-(a)f(sp)r(ectrum,)i(it)g(is)e(necessary)f(to)i(indicate)g(whether)g
-(the)g(quoted)227 4439 y(p)r(osition)27 b(is)g(the)g(USB)g(p)r(osition)
-g(or)f(the)i(corresp)r(onding)d(LSB)i(p)r(osition.)36
-b(The)27 b(SideBand)g(attribute)g(pro)n(vides)227 4539
-y(this)36 b(indication.)60 b(Another)35 b(option)g(that)h(the)f
-(SideBand)g(attribute)h(pro)n(vides)e(is)h(to)g(represen)n(t)f(a)h(sp)r
-(ectral)227 4638 y(p)r(osition)28 b(b)n(y)f(its)h(top)r(o)r(cen)n(tric)
-f(o\013set)g(from)h(the)g(LO)f(frequency)-7 b(.)227 4760
-y(In)32 b(practice,)f(the)h(LO)f(frequency)g(is)g(sp)r(eci\014ed)g(b)n
-(y)g(giving)g(the)h(distance)f(from)g(the)g(LO)g(frequency)g(to)g(some)
-227 4860 y Ft(")p Fj(cen)n(tral)p Ft(")37 b Fj(sp)r(ectral)h(p)r
-(osition.)69 b(T)n(ypically)37 b(this)i(cen)n(tral)e(p)r(osition)h(is)h
-(that)f(of)h(some)f(in)n(teresting)f(sp)r(ectral)227
-4959 y(feature.)f(The)23 b(distance)h(from)f(this)h(cen)n(tral)f(p)r
-(osition)g(to)h(the)g(LO)f(frequency)g(is)g(kno)n(wn)g(as)g(the)h
-Ft(")p Fj(in)n(termediate)227 5059 y(frequency)p Ft(")k
-Fj(\(IF\).)h(The)g(v)-5 b(alue)28 b(supplied)h(for)f(IF)h(can)f(b)r(e)h
-(a)f(signed)g(v)-5 b(alue)28 b(in)h(order)e(to)h(indicate)h(whether)f
-(the)227 5159 y(LO)f(frequency)h(is)f(ab)r(o)n(v)n(e)f(or)h(b)r(elo)n
-(w)g(the)h(cen)n(tral)f(p)r(osition.)0 5303 y Fd(Constructor)32
-b(F)-8 b(unction:)227 5403 y Fj(astDSBSp)r(ecF)h(rame)-2
-5547 y Fd(Inheritance)n(:)227 5693 y Fj(The)28 b(DSBSp)r(ecF)-7
-b(rame)28 b(class)e(inherits)i(from)f(the)h(Sp)r(ecF)-7
-b(rame)27 b(class.)p eop end
-%%Page: 489 499
-TeXDict begin 489 498 bop 3643 52 a FF(489)-2 351 y Fd(A)m(ttributes)n
-(:)227 497 y Fj(In)39 b(addition)g(to)g(those)f(attributes)h(common)g
-(to)f(all)h(Sp)r(ecF)-7 b(rames,)41 b(ev)n(ery)d(DSBSp)r(ecF)-7
-b(rame)39 b(also)f(has)g(the)227 597 y(follo)n(wing)27
-b(attributes:)340 862 y Fi(\017)45 b Fj(AlignSideBand:)37
-b(Should)28 b(alignmen)n(t)f(o)r(ccur)g(b)r(et)n(w)n(een)g(sidebands?)
-340 996 y Fi(\017)45 b Fj(DSBCen)n(tre:)37 b(The)28 b(cen)n(tral)e(p)r
-(osition)i(of)f(in)n(terest.)340 1130 y Fi(\017)45 b
-Fj(IF:)28 b(The)g(in)n(termediate)f(frequency)g(used)h(to)f(de\014ne)h
-(the)g(LO)f(frequency)-7 b(.)340 1264 y Fi(\017)45 b
-Fj(ImagF)-7 b(req:)36 b(The)28 b(image)e(sideband)i(equiv)-5
-b(alen)n(t)27 b(of)h(the)g(rest)f(frequency)-7 b(.)340
-1398 y Fi(\017)45 b Fj(SideBand:)37 b(Indicates)27 b(whic)n(h)h
-(sideband)f(the)h(DSBSp)r(ecF)-7 b(rame)28 b(represen)n(ts.)-2
-1562 y Fd(F)-8 b(unctions)n(:)227 1708 y Fj(The)27 b(DSBSp)r(ecF)-7
-b(rame)27 b(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)g
-(functions)h(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)
-227 1808 y(all)i(Sp)r(ecF)-7 b(rames.)p 0 2010 3780 12
-v 0 2140 a Fz(DssMap)696 2141 y Fe(Map)39 b(p)s(oin)m(ts)f(using)g(a)h
-(Digitised)e(Sky)i(Surv)m(ey)f(plate)1688 2256 y(solution)3303
-2140 y Fz(DssMap)0 2424 y Fd(Description:)44 b Fj(The)29
-b(DssMap)g(class)e(implemen)n(ts)j(a)e(Mapping)g(whic)n(h)h(transforms)
-e(b)r(et)n(w)n(een)i(2-dimensional)f(pixel)227 2524 y(co)r(ordinates)38
-b(and)h(an)g(equatorial)e(sky)h(co)r(ordinate)g(system)h(\(righ)n(t)g
-(ascension)e(and)i(declination\))g(using)g(a)227 2623
-y(Digitised)28 b(Sky)g(Surv)n(ey)e(\(DSS\))j(astrometric)d(plate)i
-(solution.)227 2749 y(The)e(input)g(co)r(ordinates)e(are)h(pixel)g(n)n
-(um)n(b)r(ers)g(along)g(the)h(\014rst)f(and)g(second)g(dimensions)g(of)
-h(an)f(image,)g(where)227 2849 y(the)j(cen)n(tre)f(of)h(the)g(\014rst)f
-(pixel)h(is)f(lo)r(cated)h(at)f(\(1,1\))g(and)h(the)g(spacing)e(b)r(et)
-n(w)n(een)i(pixel)g(cen)n(tres)e(is)i(unit)n(y)-7 b(.)227
-2974 y(The)34 b(output)h(co)r(ordinates)e(are)g(righ)n(t)g(ascension)g
-(and)h(declination)g(in)h(radians.)55 b(The)34 b(celestial)g(co)r
-(ordinate)227 3074 y(system)22 b(used)g(\(FK4,)h(FK5,)g(etc.\))35
-b(is)22 b(unsp)r(eci\014ed,)i(and)e(will)g(usually)g(b)r(e)g(indicated)
-h(b)n(y)e(appropriate)g(k)n(eyw)n(ords)227 3174 y(in)28
-b(a)f(FITS)h(header.)0 3325 y Fd(Constructor)k(F)-8 b(unction:)227
-3425 y Fj(The)40 b(DssMap)g(class)f(do)r(es)g(not)h(ha)n(v)n(e)f(a)g
-(constructor)g(function.)74 b(A)40 b(DssMap)g(is)g(created)f(only)g(as)
-h(a)f(b)n(y-)227 3525 y(pro)r(duct)24 b(of)f(reading)f(a)h(F)-7
-b(rameSet)24 b(\(using)f(astRead\))g(from)g(a)g(FitsChan)h(whic)n(h)f
-(con)n(tains)f(FITS)i(header)f(cards)227 3624 y(describing)i(a)f(DSS)i
-(plate)g(solution,)f(and)g(whose)f(Enco)r(ding)h(attribute)g(is)g(set)h
-(to)f Ft(")p Fj(DSS)p Ft(")p Fj(.)36 b(The)25 b(result)g(of)g(suc)n(h)
-227 3724 y(a)i(read,)g(if)h(successful,)g(is)f(a)g(F)-7
-b(rameSet)28 b(whose)f(base)g(and)g(curren)n(t)g(F)-7
-b(rames)27 b(are)f(related)h(b)n(y)g(a)h(DssMap.)-2 3876
-y Fd(Inheritance)n(:)227 4022 y Fj(The)g(DssMap)f(class)g(inherits)g
-(from)h(the)g(Mapping)f(class.)-2 4174 y Fd(A)m(ttributes)n(:)227
-4320 y Fj(The)36 b(DssMap)f(class)g(do)r(es)g(not)g(de\014ne)h(an)n(y)f
-(new)g(attributes)g(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g(applicable)
-g(to)g(all)227 4420 y(Mappings.)-2 4571 y Fd(F)-8 b(unctions)n(:)227
-4718 y Fj(The)38 b(DssMap)e(class)h(do)r(es)f(not)i(de\014ne)f(an)n(y)f
-(new)i(functions)f(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h
-(to)g(all)227 4817 y(Mappings.)p 0 5019 V 0 5151 a Fz(Ellipse)231
-b Fe(An)39 b(elliptical)c(region)j(within)f(a)h(2-dimensional)e(F)-10
-b(rame)229 b Fz(Ellipse)0 5342 y Fd(Description:)44 b
-Fj(The)31 b(Ellipse)e(class)h(implemen)n(ts)g(a)g(Region)f(whic)n(h)i
-(represen)n(ts)d(a)i(ellipse)g(within)h(a)f(2-dimensional)227
-5441 y(F)-7 b(rame.)0 5593 y Fd(Constructor)32 b(F)-8
-b(unction:)227 5693 y Fj(astEllipse)p eop end
-%%Page: 490 500
-TeXDict begin 490 499 bop 0 52 a FF(490)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(Inheritance)n(:)227
-497 y Fj(The)f(Ellipse)f(class)g(inherits)g(from)g(the)h(Region)f
-(class.)-2 644 y Fd(A)m(ttributes)n(:)227 790 y Fj(The)39
-b(Ellipse)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)g(to)h
-(all)227 890 y(Regions.)-2 1037 y Fd(F)-8 b(unctions)n(:)227
-1183 y Fj(In)23 b(addition)g(to)f(those)h(functions)g(applicable)f(to)h
-(all)f(Regions,)h(the)g(follo)n(wing)f(functions)h(ma)n(y)f(also)f(b)r
-(e)j(applied)227 1282 y(to)k(all)f(Ellipses:)340 1539
-y Fi(\017)45 b Fj(astEllipseP)n(ars:)34 b(Get)28 b(the)g(geometric)f
-(parameters)f(of)h(the)h(Ellipse)340 1669 y Fi(\017)45
-b Fj(AST)p Ft(_)p Fj(ELLIPSEP)-7 b(ARS:)26 b(Get)i(the)g(geometric)f
-(parameters)f(of)h(the)h(Ellipse)p 0 1863 3780 12 v 0
-1995 a Fz(FitsChan)843 2002 y Fe(I/O)39 b(Channel)f(using)g(FITS)h
-(header)f(cards)h(to)1440 2123 y(represen)m(t)f(Ob)7
-b(jects)3240 1995 y Fz(FitsChan)0 2311 y Fd(Description:)44
-b Fj(A)27 b(FitsChan)e(is)h(a)g(sp)r(ecialised)f(form)h(of)f(Channel)h
-(whic)n(h)g(supp)r(orts)f(I/O)g(op)r(erations)g(in)n(v)n(olving)f(the)
-227 2411 y(use)32 b(of)h(FITS)f(\(Flexible)h(Image)e(T)-7
-b(ransp)r(ort)31 b(System\))i(header)e(cards.)50 b(W)-7
-b(riting)32 b(an)g(Ob)5 b(ject)33 b(to)f(a)g(FitsChan)227
-2510 y(\(using)d(astW)-7 b(rite\))29 b(will,)h(if)f(the)g(Ob)5
-b(ject)29 b(is)g(suitable,)g(generate)f(a)g(description)h(of)f(that)i
-(Ob)5 b(ject)28 b(comp)r(osed)h(of)227 2610 y(FITS)j(header)e(cards,)g
-(and)h(reading)f(from)g(a)h(FitsChan)g(will)g(create)f(a)h(new)g(Ob)5
-b(ject)30 b(from)h(its)g(FITS)g(header)227 2710 y(card)c(description.)
-227 2833 y(While)36 b(a)e(FitsChan)h(is)f(activ)n(e,)i(it)f(represen)n
-(ts)f(a)g(bu\013er)h(whic)n(h)g(ma)n(y)f(con)n(tain)g(zero)f(or)h(more)
-g(80-c)n(haracter)227 2932 y Ft(")p Fj(header)29 b(cards)p
-Ft(")f Fj(conforming)g(to)i(FITS)f(con)n(v)n(en)n(tions.)41
-b(An)n(y)30 b(sequence)f(of)h(FITS-conforming)e(header)h(cards)227
-3032 y(ma)n(y)f(b)r(e)g(stored,)g(apart)f(from)h(the)h
-Ft(")p Fj(END)p Ft(")e Fj(card)h(whose)f(existence)h(is)g(merely)g
-(implied.)39 b(The)29 b(cards)e(ma)n(y)g(b)r(e)227 3132
-y(accessed)g(in)g(an)n(y)g(order)f(b)n(y)h(using)g(the)h(FitsChan's)f
-(in)n(teger)g(Card)g(attribute,)g(whic)n(h)h(iden)n(ti\014es)f(a)g
-Ft(")p Fj(curren)n(t)p Ft(")227 3231 y Fj(card,)g(to)h(whic)n(h)f
-(subsequen)n(t)h(op)r(erations)e(apply)-7 b(.)37 b(Searc)n(hes)26
-b(based)h(on)h(k)n(eyw)n(ord)d(ma)n(y)i(b)r(e)h(p)r(erformed)g(\(using)
-227 3331 y(astFindFits\),)k(new)e(cards)f(ma)n(y)g(b)r(e)i(inserted)f
-(\(astPutFits,)h(astPutCards,)e(astSetFits)p Fl(<)p Fj(X)p
-Fl(>)p Fj(\))h(and)g(existing)227 3431 y(ones)d(ma)n(y)g(b)r(e)h
-(deleted)g(\(astDelFits\),)h(extracted)e(\(astGetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\),)g(or)g(c)n(hanged)g(\(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(\).)227 3554 y(When)37 b(y)n(ou)f(create)g(a)g
-(FitsChan,)j(y)n(ou)d(ha)n(v)n(e)g(the)h(option)f(of)h(sp)r(ecifying)g
-Ft(")p Fj(source)p Ft(")d Fj(and)j Ft(")p Fj(sink)p Ft(")e
-Fj(functions)227 3653 y(whic)n(h)26 b(connect)g(it)h(to)f(external)f
-(data)h(stores)f(b)n(y)h(reading)f(and)h(writing)g(FITS)g(header)g
-(cards.)35 b(If)26 b(y)n(ou)g(pro)n(vide)227 3753 y(a)h(source)f
-(function,)j(it)e(is)h(used)f(to)g(\014ll)h(the)g(FitsChan)f(with)h
-(header)f(cards)f(when)i(it)g(is)f(accessed)f(for)h(the)h(\014rst)227
-3853 y(time.)56 b(If)34 b(y)n(ou)f(do)h(not)f(pro)n(vide)g(a)g(source)g
-(function,)j(the)e(FitsChan)g(remains)e(empt)n(y)i(un)n(til)g(y)n(ou)f
-(explicitly)227 3952 y(en)n(ter)25 b(data)g(in)n(to)h(it)g(\(e.g.)36
-b(using)25 b(astPutFits,)h(astPutCards)e(or)g(astW)-7
-b(rite\).)36 b(If)26 b(y)n(ou)f(pro)n(vide)f(a)i(sink)f(function,)227
-4052 y(it)38 b(is)f(used)g(to)h(deliv)n(er)e(an)n(y)h(remaining)f(con)n
-(ten)n(ts)h(of)g(a)g(FitsChan)g(to)g(an)g(external)g(data)f(store)h
-(when)g(the)227 4151 y(FitsChan)30 b(is)f(deleted.)44
-b(If)30 b(y)n(ou)e(do)i(not)f(pro)n(vide)g(a)g(sink)g(function,)i(an)n
-(y)e(header)f(cards)h(remaining)f(when)i(the)227 4251
-y(FitsChan)25 b(is)f(deleted)h(will)g(b)r(e)g(lost,)g(so)f(y)n(ou)f
-(should)i(arrange)d(to)i(extract)g(them)h(\014rst)f(if)i(necessary)c
-(\(e.g.)36 b(using)227 4351 y(astFindFits)28 b(or)f(astRead\).)227
-4474 y(Co)r(ordinate)i(system)g(information)g(ma)n(y)g(b)r(e)h(describ)
-r(ed)g(using)f(FITS)h(header)f(cards)f(using)i(sev)n(eral)d(di\013eren)
-n(t)227 4574 y(con)n(v)n(en)n(tions,)h(termed)h Ft(")p
-Fj(enco)r(dings)p Ft(")p Fj(.)39 b(When)29 b(an)g(AST)g(Ob)5
-b(ject)29 b(is)f(written)h(to)g(\(or)f(read)g(from\))h(a)f(FitsChan,)
-227 4673 y(the)22 b(v)-5 b(alue)22 b(of)g(the)g(FitsChan's)g(Enco)r
-(ding)f(attribute)g(determines)h(ho)n(w)f(the)h(Ob)5
-b(ject)22 b(is)g(con)n(v)n(erted)e(to)i(\(or)f(from\))227
-4773 y(a)31 b(description)g(in)n(v)n(olving)g(FITS)g(header)g(cards.)48
-b(In)32 b(general,)f(di\013eren)n(t)h(enco)r(dings)f(will)g(result)h
-(in)f(di\013eren)n(t)227 4872 y(sets)24 b(of)f(header)g(cards)g(to)g
-(describ)r(e)h(the)g(same)f(Ob)5 b(ject.)35 b(Examples)23
-b(of)g(enco)r(dings)g(include)h(the)h(DSS)f(enco)r(ding)227
-4972 y(\(based)35 b(on)g(con)n(v)n(en)n(tions)f(used)h(b)n(y)g(the)h
-(STScI)g(Digitised)f(Sky)g(Surv)n(ey)g(data\),)i(the)f(FITS-W)n(CS)f
-(enco)r(ding)227 5072 y(\(based)30 b(on)g(a)g(prop)r(osed)f(FITS)h
-(standard\))g(and)g(the)g(NA)-7 b(TIVE)31 b(enco)r(ding)e(\(a)h(near)f
-(loss-less)g(w)n(a)n(y)g(of)h(storing)227 5171 y(AST)e(Ob)5
-b(jects)27 b(in)h(FITS)g(headers\).)227 5295 y(The)e(a)n(v)-5
-b(ailable)25 b(enco)r(dings)g(di\013er)h(in)g(the)g(range)f(of)h(Ob)5
-b(jects)25 b(they)h(can)g(represen)n(t,)f(in)h(the)g(n)n(um)n(b)r(er)g
-(of)g(Ob)5 b(ject)227 5394 y(descriptions)31 b(that)h(can)g(co)r(exist)
-f(in)h(the)g(same)g(FitsChan,)h(and)e(in)h(their)g(accessibilit)n(y)f
-(to)h(other)f(\(external\))227 5494 y(astronom)n(y)36
-b(applications)g(\(see)i(the)f(Enco)r(ding)g(attribute)h(for)f
-(details\).)66 b(Enco)r(dings)36 b(are)h(not)g(necessarily)227
-5593 y(m)n(utually)28 b(exclusiv)n(e)g(and)g(it)h(ma)n(y)e(sometimes)h
-(b)r(e)h(p)r(ossible)f(to)g(describ)r(e)g(the)g(same)g(Ob)5
-b(ject)28 b(in)h(sev)n(eral)d(w)n(a)n(ys)227 5693 y(within)j(a)e
-(particular)f(set)i(of)f(FITS)h(header)f(cards)f(b)n(y)i(using)f(sev)n
-(eral)f(di\013eren)n(t)h(enco)r(dings.)p eop end
-%%Page: 491 501
-TeXDict begin 491 500 bop 3643 52 a FF(491)227 351 y
-Fj(The)28 b(detailed)g(b)r(eha)n(viour)f(of)h(astRead)f(and)h(astW)-7
-b(rite,)28 b(when)g(used)g(with)g(a)f(FitsChan,)i(dep)r(ends)f(on)g
-(the)g(en-)227 451 y(co)r(ding)23 b(in)h(use.)35 b(In)24
-b(general,)f(ho)n(w)n(ev)n(er,)f(all)h(successful)g(use)g(of)h(astRead)
-e(is)i(destructiv)n(e,)f(so)g(that)h(FITS)f(header)227
-551 y(cards)j(are)f(consumed)h(in)h(the)g(pro)r(cess)e(of)h(reading)f
-(an)i(Ob)5 b(ject,)26 b(and)g(are)g(remo)n(v)n(ed)f(from)h(the)h
-(FitsChan)f(\(this)227 650 y(deletion)e(can)g(b)r(e)g(prev)n(en)n(ted)f
-(for)g(sp)r(eci\014c)h(cards)e(b)n(y)i(calling)f(the)h(astRetainFits)g
-(function\).)36 b(An)25 b(unsuccessful)227 750 y(call)30
-b(of)g(astRead)g(\(for)g(instance,)g(caused)g(b)n(y)g(the)g(FitsChan)h
-(not)f(con)n(taining)f(the)i(necessary)d(FITS)j(headers)227
-849 y(cards)c(needed)g(to)h(create)f(an)g(Ob)5 b(ject\))28
-b(results)f(in)h(the)g(con)n(ten)n(ts)f(of)g(the)h(FitsChan)g(b)r(eing)
-f(left)i(unc)n(hanged.)227 971 y(If)g(the)f(enco)r(ding)f(in)h(use)g
-(allo)n(ws)f(only)g(a)h(single)f(Ob)5 b(ject)28 b(description)f(to)h(b)
-r(e)g(stored)f(in)h(a)g(FitsChan)g(\(e.g.)37 b(the)227
-1071 y(DSS,)27 b(FITS-W)n(CS)f(and)f(FITS-IRAF)i(enco)r(dings\),)f
-(then)g(write)g(op)r(erations)e(using)h(astW)-7 b(rite)26
-b(will)g(o)n(v)n(er-write)227 1171 y(an)n(y)37 b(existing)h(Ob)5
-b(ject)37 b(description)g(using)h(that)g(enco)r(ding.)66
-b(Otherwise)37 b(\(e.g.)67 b(the)39 b(NA)-7 b(TIVE)38
-b(enco)r(ding\),)227 1270 y(m)n(ultiple)i(Ob)5 b(ject)39
-b(descriptions)g(are)f(written)i(sequen)n(tially)e(and)h(ma)n(y)g
-(later)f(b)r(e)i(read)f(bac)n(k)f(in)i(the)f(same)227
-1370 y(sequence.)0 1514 y Fd(Constructor)32 b(F)-8 b(unction:)227
-1614 y Fj(astFitsChan)-2 1758 y Fd(Inheritance)n(:)227
-1904 y Fj(The)28 b(FitsChan)g(class)e(inherits)i(from)f(the)h(Channel)f
-(class.)-2 2049 y Fd(A)m(ttributes)n(:)227 2195 y Fj(In)37
-b(addition)f(to)g(those)g(attributes)g(common)g(to)g(all)g(Channels,)i
-(ev)n(ery)d(FitsChan)h(also)f(has)h(the)h(follo)n(wing)227
-2295 y(attributes:)340 2548 y Fi(\017)45 b Fj(AllW)-7
-b(arnings:)37 b(A)28 b(list)f(of)h(the)g(a)n(v)-5 b(ailable)26
-b(conditions)340 2676 y Fi(\017)45 b Fj(Card:)36 b(Index)28
-b(of)g(curren)n(t)e(FITS)i(card)f(in)h(a)f(FitsChan)340
-2804 y Fi(\017)45 b Fj(CarLin:)36 b(Ignore)27 b(spherical)f(rotations)g
-(on)i(CAR)g(pro)5 b(jections?)340 2931 y Fi(\017)45 b
-Fj(CDMatrix:)37 b(Use)27 b(a)h(CD)g(matrix)f(instead)g(of)h(a)f(PC)g
-(matrix?)340 3059 y Fi(\017)45 b Fj(Clean:)37 b(Remo)n(v)n(e)26
-b(cards)h(used)g(whilst)h(reading)f(ev)n(en)g(if)h(an)f(error)f(o)r
-(ccurs?)340 3187 y Fi(\017)45 b Fj(DefB1950:)36 b(Use)27
-b(FK4)g(B1950)f(as)h(default)h(equatorial)e(co)r(ordinates?)340
-3315 y Fi(\017)45 b Fj(Enco)r(ding:)36 b(System)28 b(for)f(enco)r(ding)
-g(Ob)5 b(jects)28 b(as)f(FITS)g(headers)340 3443 y Fi(\017)45
-b Fj(FitsDigits:)38 b(Digits)27 b(of)h(precision)f(for)g(\015oating-p)r
-(oin)n(t)f(FITS)i(v)-5 b(alues)340 3570 y Fi(\017)45
-b Fj(Iw)n(c:)37 b(Add)28 b(a)f(F)-7 b(rame)27 b(describing)g(In)n
-(termediate)g(W)-7 b(orld)27 b(Co)r(ords?)340 3698 y
-Fi(\017)45 b Fj(Ncard:)37 b(Num)n(b)r(er)27 b(of)h(FITS)g(header)f
-(cards)f(in)i(a)f(FitsChan)340 3826 y Fi(\017)45 b Fj(W)-7
-b(arnings:)36 b(Pro)r(duces)27 b(w)n(arnings)e(ab)r(out)j(selected)f
-(conditions)-2 3983 y Fd(F)-8 b(unctions)n(:)227 4129
-y Fj(In)40 b(addition)f(to)h(those)f(functions)g(applicable)g(to)h(all)
-f(Channels,)j(the)e(follo)n(wing)e(functions)i(ma)n(y)f(also)f(b)r(e)
-227 4229 y(applied)28 b(to)f(all)h(FitsChans:)340 4482
-y Fi(\017)45 b Fj(astDelFits:)37 b(Delete)29 b(the)f(curren)n(t)e(FITS)
-i(card)f(in)h(a)f(FitsChan)340 4610 y Fi(\017)45 b Fj(astFindFits:)38
-b(Find)28 b(a)f(FITS)h(card)f(in)g(a)h(FitsChan)f(b)n(y)h(k)n(eyw)n
-(ord)340 4738 y Fi(\017)45 b Fj(astGetFits)p Fl(<)p Fj(X)p
-Fl(>)p Fj(:)37 b(Get)28 b(a)f(k)n(eyw)n(ord)f(v)-5 b(alue)27
-b(from)g(a)h(FitsChan)340 4865 y Fi(\017)45 b Fj(astSetFits)p
-Fl(<)p Fj(X)p Fl(>)p Fj(:)37 b(Store)27 b(a)g(new)h(k)n(eyw)n(ord)d(v)
--5 b(alue)28 b(in)g(a)f(FitsChan)340 4993 y Fi(\017)45
-b Fj(astPurgeW)n(CS:)26 b(Delete)i(all)g(W)n(CS-related)e(cards)h(in)h
-(a)f(FitsChan)340 5121 y Fi(\017)45 b Fj(AST)p Ft(_)p
-Fj(PUR)n(GEW)n(CS:)27 b(Delete)h(all)g(W)n(CS-related)e(cards)h(in)h(a)
-f(FitsChan)340 5249 y Fi(\017)45 b Fj(astPutFits:)37
-b(Store)27 b(a)g(FITS)h(header)f(card)g(in)g(a)h(FitsChan)340
-5376 y Fi(\017)45 b Fj(astPutCards:)36 b(Stores)26 b(a)h(set)h(of)g
-(FITS)g(header)e(card)h(in)h(a)f(FitsChan)340 5504 y
-Fi(\017)45 b Fj(astRetainFits:)37 b(Ensure)27 b(curren)n(t)f(card)h(is)
-h(retained)f(in)h(a)f(FitsChan)340 5632 y Fi(\017)45
-b Fj(astT)-7 b(estFits:)37 b(T)-7 b(est)28 b(if)g(a)f(k)n(eyw)n(ord)f
-(has)h(a)g(de\014ned)h(v)-5 b(alue)27 b(in)h(a)f(FitsChan)p
-eop end
-%%Page: 492 502
-TeXDict begin 492 501 bop 0 52 a FF(492)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(FluxF)-11 b(rame)594 b Fe(Measured)39 b(\015ux)g(description)592
-b Fz(FluxF)-11 b(rame)0 655 y Fd(Description:)44 b Fj(A)39
-b(FluxF)-7 b(rame)37 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h
-(one-dimensional)e(F)-7 b(rame)38 b(whic)n(h)f(represen)n(ts)g(v)-5
-b(arious)227 754 y(systems)29 b(used)h(to)f(represen)n(t)f(the)i
-(signal)f(lev)n(el)g(in)g(an)h(observ)-5 b(ation.)41
-b(The)29 b(particular)f(co)r(ordinate)h(system)g(to)227
-854 y(b)r(e)i(used)f(is)g(sp)r(eci\014ed)g(b)n(y)g(setting)g(the)g
-(FluxF)-7 b(rame's)29 b(System)i(attribute)f(quali\014ed,)g(as)f
-(necessary)-7 b(,)29 b(b)n(y)h(other)227 953 y(attributes)e(suc)n(h)f
-(as)g(the)h(units,)g(etc)g(\(see)f(the)h(description)f(of)h(the)g
-(System)g(attribute)f(for)g(details\).)227 1074 y(All)i(\015ux)f(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(b)r(e)h(measured)e(at)h(the)h(same)e
-(frequency)h(or)f(w)n(a)n(v)n(elength)f(\(as)i(giv)n(en)f(b)n(y)h(the)
-227 1173 y(Sp)r(ecV)-7 b(al)28 b(attribute\).)38 b(Th)n(us)27
-b(this)h(class)e(is)i(more)f(appropriate)f(for)h(use)g(with)h(images)f
-(rather)f(than)i(sp)r(ectra.)0 1314 y Fd(Constructor)k(F)-8
-b(unction:)227 1414 y Fj(astFluxF)h(rame)-2 1555 y Fd(Inheritance)n(:)
-227 1701 y Fj(The)28 b(FluxF)-7 b(rame)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 1842 y Fd(A)m(ttributes)n(:)227
-1988 y Fj(In)38 b(addition)f(to)g(those)g(attributes)g(common)g(to)g
-(all)g(F)-7 b(rames,)38 b(ev)n(ery)e(FluxF)-7 b(rame)37
-b(also)f(has)h(the)h(follo)n(wing)227 2087 y(attributes:)340
-2335 y Fi(\017)45 b Fj(Sp)r(ecV)-7 b(al:)38 b(The)27
-b(sp)r(ectral)g(p)r(osition)h(at)f(whic)n(h)h(the)g(\015ux)f(v)-5
-b(alues)28 b(are)e(measured.)-2 2489 y Fd(F)-8 b(unctions)n(:)227
-2635 y Fj(The)31 b(FluxF)-7 b(rame)30 b(class)f(do)r(es)h(not)h
-(de\014ne)f(an)n(y)g(new)g(functions)h(b)r(ey)n(ond)f(those)g(whic)n(h)
-g(are)g(applicable)g(to)g(all)227 2734 y(F)-7 b(rames.)p
-0 2916 V 0 3047 a Fz(F)c(rame)1112 3048 y Fe(Co)s(ordinate)36
-b(system)i(description)3412 3047 y Fz(F)-11 b(rame)0
-3220 y Fd(Description:)44 b Fj(This)22 b(class)e(is)h(used)h(to)f
-(represen)n(t)f(co)r(ordinate)g(systems.)34 b(It)22 b(do)r(es)f(this)h
-(in)f(rather)g(the)g(same)g(w)n(a)n(y)f(that)227 3319
-y(a)31 b(frame)f(around)g(a)h(graph)e(describ)r(es)i(the)g(co)r
-(ordinate)f(space)g(in)h(whic)n(h)g(data)f(are)g(plotted.)47
-b(Consequen)n(tly)-7 b(,)227 3419 y(a)35 b(F)-7 b(rame)34
-b(has)g(a)g(Title)h(\(string\))g(attribute,)i(whic)n(h)e(describ)r(es)f
-(the)h(co)r(ordinate)e(space,)j(and)f(con)n(tains)f(axes)227
-3519 y(whic)n(h)28 b(in)h(turn)f(hold)g(information)g(suc)n(h)g(as)f
-(Lab)r(el)h(and)g(Units)h(strings)e(whic)n(h)h(are)g(used)g(for)f(lab)r
-(elling)h(\(e.g.\))227 3618 y(graphical)e(output.)38
-b(In)27 b(general,)g(ho)n(w)n(ev)n(er,)e(the)j(n)n(um)n(b)r(er)g(of)f
-(axes)g(is)g(not)h(restricted)f(to)g(t)n(w)n(o.)227 3738
-y(F)-7 b(unctions)24 b(are)f(a)n(v)-5 b(ailable)23 b(for)g(con)n(v)n
-(erting)f(F)-7 b(rame)24 b(co)r(ordinate)e(v)-5 b(alues)24
-b(in)n(to)g(a)f(form)h(suitable)f(for)h(displa)n(y)-7
-b(,)24 b(and)227 3838 y(also)j(for)g(calculating)g(distances)g(and)g
-(o\013sets)g(b)r(et)n(w)n(een)h(p)r(ositions)f(within)h(the)g(F)-7
-b(rame.)227 3958 y(F)g(rames)27 b(ma)n(y)g(also)f(con)n(tain)h(kno)n
-(wledge)g(of)g(ho)n(w)g(to)h(transform)e(to)i(and)f(from)g(related)g
-(co)r(ordinate)g(systems.)0 4099 y Fd(Constructor)32
-b(F)-8 b(unction:)227 4199 y Fj(astF)h(rame)0 4340 y
-Fd(Notes:)340 4613 y Fi(\017)45 b Fj(When)40 b(used)f(as)g(a)g
-(Mapping,)j(a)c(F)-7 b(rame)39 b(implemen)n(ts)h(a)f(unit)g(\(n)n
-(ull\))h(transformation)e(in)i(b)r(oth)f(the)427 4713
-y(forw)n(ard)22 b(and)g(in)n(v)n(erse)g(directions)g(\(equiv)-5
-b(alen)n(t)23 b(to)g(a)g(UnitMap\).)36 b(The)23 b(Nin)h(and)f(Nout)g
-(attribute)g(v)-5 b(alues)427 4813 y(are)27 b(b)r(oth)h(equal)f(to)g
-(the)h(n)n(um)n(b)r(er)g(of)f(F)-7 b(rame)27 b(axes.)-2
-4966 y Fd(Inheritance)n(:)227 5112 y Fj(The)h(F)-7 b(rame)27
-b(class)g(inherits)g(from)g(the)h(Mapping)g(class.)-2
-5253 y Fd(A)m(ttributes)n(:)227 5399 y Fj(In)33 b(addition)g(to)g
-(those)g(attributes)g(common)f(to)h(all)g(Mappings,)g(ev)n(ery)f(F)-7
-b(rame)32 b(also)g(has)h(the)g(follo)n(wing)f(at-)227
-5499 y(tributes)20 b(\(if)h(the)g(F)-7 b(rame)19 b(has)h(only)g(one)f
-(axis,)i(the)g(axis)e(sp)r(eci\014er)h(can)f(b)r(e)i(omited)f(from)g
-(the)g(follo)n(wing)f(attribute)227 5598 y(names\):)p
-eop end
-%%Page: 493 503
-TeXDict begin 493 502 bop 3643 52 a FF(493)340 351 y
-Fi(\017)45 b Fj(AlignSystem:)37 b(Co)r(ordinate)27 b(system)g(used)h
-(to)f(align)g(F)-7 b(rames)340 481 y Fi(\017)45 b Fj(Bottom\(axis\):)37
-b(Lo)n(w)n(est)26 b(axis)h(v)-5 b(alue)27 b(to)h(displa)n(y)340
-611 y Fi(\017)45 b Fj(Digits/Digits\(axis\):)37 b(Num)n(b)r(er)27
-b(of)h(digits)f(of)h(precision)340 741 y Fi(\017)45 b
-Fj(Direction\(axis\):)37 b(Displa)n(y)27 b(axis)g(in)h(con)n(v)n(en)n
-(tional)d(direction?)340 871 y Fi(\017)45 b Fj(Domain:)37
-b(Co)r(ordinate)27 b(system)g(domain)340 1001 y Fi(\017)45
-b Fj(Dut1:)38 b(Di\013erence)27 b(b)r(et)n(w)n(een)h(the)g(UT1)f(and)h
-(UTC)g(timescale)340 1131 y Fi(\017)45 b Fj(Ep)r(o)r(c)n(h:)37
-b(Ep)r(o)r(c)n(h)27 b(of)g(observ)-5 b(ation)340 1261
-y Fi(\017)45 b Fj(F)-7 b(ormat\(axis\):)36 b(F)-7 b(ormat)27
-b(sp)r(eci\014cation)g(for)g(axis)g(v)-5 b(alues)340
-1391 y Fi(\017)45 b Fj(Lab)r(el\(axis\):)37 b(Axis)27
-b(lab)r(el)340 1521 y Fi(\017)45 b Fj(Matc)n(hEnd:)37
-b(Matc)n(h)27 b(trailing)g(axes?)340 1651 y Fi(\017)45
-b Fj(MaxAxes:)36 b(Maxim)n(um)28 b(n)n(um)n(b)r(er)f(of)h(F)-7
-b(rame)27 b(axes)f(to)i(matc)n(h)340 1781 y Fi(\017)45
-b Fj(MinAxes:)37 b(Minim)n(um)28 b(n)n(um)n(b)r(er)g(of)f(F)-7
-b(rame)27 b(axes)g(to)h(matc)n(h)340 1911 y Fi(\017)45
-b Fj(Naxes:)36 b(Num)n(b)r(er)28 b(of)g(F)-7 b(rame)27
-b(axes)340 2041 y Fi(\017)45 b Fj(NormUnit\(axis\):)37
-b(Normalised)27 b(axis)g(ph)n(ysical)f(units)340 2171
-y Fi(\017)45 b Fj(ObsAlt:)37 b(Geo)r(detic)28 b(altitude)g(of)g(observ)
-n(er)340 2301 y Fi(\017)45 b Fj(ObsLat:)36 b(Geo)r(detic)28
-b(latitude)g(of)g(observ)n(er)340 2431 y Fi(\017)45 b
-Fj(ObsLon:)36 b(Geo)r(detic)28 b(longitude)f(of)h(observ)n(er)340
-2561 y Fi(\017)45 b Fj(P)n(erm)n(ute:)36 b(P)n(erm)n(ute)27
-b(axis)f(order?)340 2691 y Fi(\017)45 b Fj(Preserv)n(eAxes:)34
-b(Preserv)n(e)26 b(axes?)340 2821 y Fi(\017)45 b Fj(Sym)n(b)r
-(ol\(axis\):)37 b(Axis)27 b(sym)n(b)r(ol)340 2951 y Fi(\017)45
-b Fj(System:)37 b(Co)r(ordinate)27 b(system)g(used)h(to)f(describ)r(e)g
-(the)h(domain)340 3081 y Fi(\017)45 b Fj(Title:)38 b(F)-7
-b(rame)27 b(title)340 3211 y Fi(\017)45 b Fj(T)-7 b(op\(axis\):)37
-b(Highest)27 b(axis)g(v)-5 b(alue)27 b(to)h(displa)n(y)340
-3341 y Fi(\017)45 b Fj(Unit\(axis\):)38 b(Axis)27 b(ph)n(ysical)g
-(units)-2 3500 y Fd(F)-8 b(unctions)n(:)227 3647 y Fj(In)38
-b(addition)g(to)g(those)g(functions)g(applicable)g(to)g(all)f
-(Mappings,)j(the)f(follo)n(wing)e(functions)h(ma)n(y)f(also)g(b)r(e)227
-3746 y(applied)28 b(to)f(all)h(F)-7 b(rames:)340 4003
-y Fi(\017)45 b Fj(astAngle:)37 b(Calculate)27 b(the)h(angle)e
-(subtended)j(b)n(y)e(t)n(w)n(o)g(p)r(oin)n(ts)g(at)h(a)f(third)h(p)r
-(oin)n(t)340 4133 y Fi(\017)45 b Fj(astAxAngle:)37 b(Find)28
-b(the)g(angle)f(from)g(an)g(axis,)g(to)h(a)f(line)h(through)e(t)n(w)n
-(o)h(p)r(oin)n(ts)340 4263 y Fi(\017)45 b Fj(astAxDistance:)37
-b(Calculate)27 b(the)h(distance)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(axis)h
-(v)-5 b(alues)340 4393 y Fi(\017)45 b Fj(astAxO\013set:)37
-b(Calculate)27 b(an)g(o\013set)h(along)e(an)h(axis)340
-4523 y Fi(\017)45 b Fj(astCon)n(v)n(ert:)35 b(Determine)28
-b(ho)n(w)f(to)h(con)n(v)n(ert)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(co)r
-(ordinate)g(systems)340 4653 y Fi(\017)45 b Fj(astDistance:)37
-b(Calculate)27 b(the)h(distance)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(p)r
-(oin)n(ts)i(in)g(a)f(F)-7 b(rame)340 4783 y Fi(\017)45
-b Fj(astFindF)-7 b(rame:)37 b(Find)28 b(a)f(co)r(ordinate)f(system)i
-(with)g(sp)r(eci\014ed)g(c)n(haracteristics)340 4913
-y Fi(\017)45 b Fj(astF)-7 b(ormat:)36 b(F)-7 b(ormat)27
-b(a)g(co)r(ordinate)g(v)-5 b(alue)27 b(for)g(a)g(F)-7
-b(rame)27 b(axis)340 5043 y Fi(\017)45 b Fj(astGetActiv)n(eUnit:)38
-b(Determines)27 b(ho)n(w)g(the)h(Unit)h(attribute)f(will)f(b)r(e)h
-(used)340 5173 y Fi(\017)45 b Fj(astIn)n(tersect:)36
-b(Find)28 b(the)g(in)n(tersection)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(geo)
-r(desic)h(curv)n(es)340 5303 y Fi(\017)45 b Fj(astMatc)n(hAxes:)36
-b(Find)28 b(an)n(y)f(corresp)r(onding)f(axes)g(in)i(t)n(w)n(o)f(F)-7
-b(rames)340 5433 y Fi(\017)45 b Fj(astNorm:)36 b(Normalise)27
-b(a)g(set)g(of)h(F)-7 b(rame)27 b(co)r(ordinates)340
-5563 y Fi(\017)45 b Fj(astO\013set:)37 b(Calculate)27
-b(an)g(o\013set)h(along)e(a)h(geo)r(desic)g(curv)n(e)340
-5693 y Fi(\017)45 b Fj(astO\013set2:)36 b(Calculate)27
-b(an)h(o\013set)f(along)f(a)i(geo)r(desic)e(curv)n(e)h(in)h(a)f(2D)h(F)
--7 b(rame)p eop end
-%%Page: 494 504
-TeXDict begin 494 503 bop 0 52 a FF(494)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(astP)n(ermAxes:)35 b(P)n(erm)n(ute)27 b(the)h(order)e(of)i(a)f(F)
--7 b(rame's)27 b(axes)340 488 y Fi(\017)45 b Fj(astPic)n(kAxes:)35
-b(Create)27 b(a)g(new)h(F)-7 b(rame)27 b(b)n(y)g(pic)n(king)g(axes)g
-(from)g(an)h(existing)f(one)340 626 y Fi(\017)45 b Fj(astResolv)n(e:)36
-b(Resolv)n(e)26 b(a)h(v)n(ector)f(in)n(to)i(t)n(w)n(o)f(orthogonal)e
-(comp)r(onen)n(ts)340 763 y Fi(\017)45 b Fj(astSetActiv)n(eUnit:)38
-b(Sp)r(ecify)28 b(ho)n(w)f(the)h(Unit)g(attribute)g(should)g(b)r(e)g
-(used)340 900 y Fi(\017)45 b Fj(astUnformat:)37 b(Read)27
-b(a)g(formatted)g(co)r(ordinate)g(v)-5 b(alue)27 b(for)g(a)h(F)-7
-b(rame)27 b(axis)p 0 1108 3780 12 v 0 1239 a Fz(F)-11
-b(rameSet)904 1240 y Fe(Set)38 b(of)g(in)m(ter-related)e(co)s(ordinate)
-h(systems)3224 1239 y Fz(F)-11 b(rameSet)0 1442 y Fd(Description:)44
-b Fj(A)27 b(F)-7 b(rameSet)27 b(consists)f(of)h(a)f(set)h(of)g(one)f
-(or)g(more)g(F)-7 b(rames)26 b(\(whic)n(h)h(describ)r(e)f(co)r
-(ordinate)g(systems\),)227 1542 y(connected)g(together)f(b)n(y)g
-(Mappings)g(\(whic)n(h)h(describ)r(e)f(ho)n(w)h(the)g(co)r(ordinate)e
-(systems)h(are)g(in)n(ter-related\).)35 b(A)227 1641
-y(F)-7 b(rameSet)26 b(mak)n(es)f(it)h(p)r(ossible)g(to)g(obtain)f(a)h
-(Mapping)f(b)r(et)n(w)n(een)h(an)n(y)f(pair)h(of)f(these)h(F)-7
-b(rames)26 b(\(i.e.)36 b(to)26 b(con)n(v)n(ert)227 1741
-y(b)r(et)n(w)n(een)32 b(an)n(y)f(of)g(the)h(co)r(ordinate)f(systems)g
-(whic)n(h)g(it)i(describ)r(es\).)48 b(The)32 b(individual)g(F)-7
-b(rames)30 b(are)h(iden)n(ti\014ed)227 1840 y(within)f(the)f(F)-7
-b(rameSet)28 b(b)n(y)g(an)h(in)n(teger)e(index,)i(with)g(F)-7
-b(rames)28 b(b)r(eing)h(n)n(um)n(b)r(ered)f(consecutiv)n(ely)g(from)g
-(one)g(as)227 1940 y(they)g(are)f(added)g(to)h(the)g(F)-7
-b(rameSet.)227 2069 y(Ev)n(ery)29 b(F)-7 b(rameSet)30
-b(has)f(a)h Ft(")p Fj(base)p Ft(")e Fj(F)-7 b(rame)30
-b(and)g(a)g Ft(")p Fj(curren)n(t)p Ft(")e Fj(F)-7 b(rame)30
-b(\(whic)n(h)g(are)f(allo)n(w)n(ed)g(to)h(b)r(e)g(the)h(same\).)227
-2169 y(An)n(y)k(of)g(the)g(F)-7 b(rames)35 b(ma)n(y)f(b)r(e)h
-(nominated)g(to)g(hold)f(these)h(p)r(ositions,)i(and)e(the)g(c)n(hoice)
-f(is)h(determined)g(b)n(y)227 2268 y(the)d(v)-5 b(alues)31
-b(of)h(the)g(F)-7 b(rameSet's)31 b(Base)f(and)i(Curren)n(t)e
-(attributes,)j(whic)n(h)e(hold)h(the)f(indices)h(of)f(the)h(relev)-5
-b(an)n(t)227 2368 y(F)e(rames.)35 b(By)25 b(default,)h(the)f(\014rst)f
-(F)-7 b(rame)25 b(added)f(to)h(a)f(F)-7 b(rameSet)25
-b(is)f(its)h(base)f(F)-7 b(rame,)25 b(and)g(the)g(last)f(one)h(added)
-227 2467 y(is)j(its)g(curren)n(t)e(F)-7 b(rame.)227 2596
-y(The)36 b(base)f(F)-7 b(rame)35 b(describ)r(es)h(the)g
-Ft(")p Fj(nativ)n(e)p Ft(")e Fj(co)r(ordinate)h(system)g(of)h(whatev)n
-(er)f(the)h(F)-7 b(rameSet)35 b(is)h(used)g(to)227 2696
-y(calibrate)27 b(\(e.g.)36 b(the)28 b(pixel)f(co)r(ordinates)f(of)i(an)
-f(image\))g(and)g(the)h(curren)n(t)e(F)-7 b(rame)27 b(describ)r(es)g
-(the)h Ft(")p Fj(apparen)n(t)p Ft(")227 2796 y Fj(co)r(ordinate)21
-b(system)g(in)h(whic)n(h)g(it)g(should)f(b)r(e)h(view)n(ed)g(\(e.g.)34
-b(displa)n(y)n(ed,)22 b(etc.\).)36 b(An)n(y)21 b(further)h(F)-7
-b(rames)21 b(represen)n(t)227 2895 y(a)27 b(library)g(of)g(alternativ)n
-(e)g(co)r(ordinate)f(systems,)h(whic)n(h)h(ma)n(y)f(b)r(e)h(selected)f
-(b)n(y)g(making)g(them)h(curren)n(t.)227 3024 y(When)34
-b(a)e(F)-7 b(rameSet)33 b(is)g(used)g(in)g(a)f(con)n(text)h(that)g
-(requires)f(a)g(F)-7 b(rame,)34 b(\(e.g.)53 b(obtaining)32
-b(its)h(Title)g(v)-5 b(alue,)34 b(or)227 3124 y(n)n(um)n(b)r(er)h(of)g
-(axes\),)h(the)g(curren)n(t)e(F)-7 b(rame)34 b(is)h(used.)59
-b(A)35 b(F)-7 b(rameSet)35 b(ma)n(y)f(therefore)g(b)r(e)i(used)f(in)g
-(place)f(of)h(its)227 3223 y(curren)n(t)27 b(F)-7 b(rame)27
-b(in)h(most)f(situations.)227 3352 y(When)38 b(a)g(F)-7
-b(rameSet)37 b(is)g(used)h(in)g(a)f(con)n(text)g(that)h(requires)e(a)h
-(Mapping,)j(the)e(Mapping)f(used)h(is)f(the)h(one)227
-3452 y(b)r(et)n(w)n(een)25 b(its)h(base)e(F)-7 b(rame)25
-b(and)g(its)h(curren)n(t)e(F)-7 b(rame.)35 b(Th)n(us,)26
-b(a)f(F)-7 b(rameSet)25 b(ma)n(y)f(b)r(e)i(used)f(to)g(con)n(v)n(ert)f
-Ft(")p Fj(nativ)n(e)p Ft(")227 3552 y Fj(co)r(ordinates)35
-b(in)n(to)h Ft(")p Fj(apparen)n(t)p Ft(")f Fj(ones,)i(and)g(vice)f(v)n
-(ersa.)61 b(Lik)n(e)36 b(an)n(y)f(Mapping,)j(a)e(F)-7
-b(rameSet)36 b(ma)n(y)g(also)f(b)r(e)227 3651 y(in)n(v)n(erted)h(\(see)
-g(astIn)n(v)n(ert\),)i(whic)n(h)f(has)e(the)i(e\013ect)g(of)g(in)n
-(terc)n(hanging)e(its)h(base)g(and)g(curren)n(t)g(F)-7
-b(rames)36 b(and)227 3751 y(hence)28 b(of)f(rev)n(ersing)f(the)i
-(Mapping)f(b)r(et)n(w)n(een)h(them.)227 3880 y(Regions)33
-b(ma)n(y)f(b)r(e)i(added)f(in)n(to)h(a)f(F)-7 b(rameSet)33
-b(\(since)g(a)g(Region)g(is)g(a)g(t)n(yp)r(e)h(of)f(F)-7
-b(rame\),)35 b(either)e(explicitly)g(or)227 3979 y(as)e(comp)r(onen)n
-(ts)g(within)h(CmpF)-7 b(rames.)48 b(In)31 b(this)h(case)e(the)i
-(Mapping)f(b)r(et)n(w)n(een)g(a)g(pair)g(of)g(F)-7 b(rames)31
-b(within)h(a)227 4079 y(F)-7 b(rameSet)35 b(will)g(include)g(the)h
-(e\013ects)f(of)g(the)g(clipping)g(pro)r(duced)g(b)n(y)f(an)n(y)h
-(Regions)f(included)h(in)g(the)g(path)227 4179 y(b)r(et)n(w)n(een)28
-b(the)g(F)-7 b(rames.)0 4337 y Fd(Constructor)32 b(F)-8
-b(unction:)227 4436 y Fj(astF)h(rameSet)-2 4595 y Fd(Inheritance)n(:)
-227 4741 y Fj(The)28 b(F)-7 b(rameSet)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 4899 y Fd(A)m(ttributes)n(:)227
-5045 y Fj(In)41 b(addition)g(to)g(those)f(attributes)h(common)f(to)h
-(all)g(F)-7 b(rames,)43 b(ev)n(ery)d(F)-7 b(rameSet)40
-b(also)g(has)g(the)i(follo)n(wing)227 5145 y(attributes:)340
-5419 y Fi(\017)j Fj(Base:)36 b(F)-7 b(rameSet)28 b(base)f(F)-7
-b(rame)27 b(index)340 5556 y Fi(\017)45 b Fj(Curren)n(t:)36
-b(F)-7 b(rameSet)28 b(curren)n(t)e(F)-7 b(rame)28 b(index)340
-5693 y Fi(\017)45 b Fj(Nframe:)37 b(Num)n(b)r(er)28 b(of)f(F)-7
-b(rames)27 b(in)h(a)f(F)-7 b(rameSet)p eop end
-%%Page: 495 505
-TeXDict begin 495 504 bop 3643 52 a FF(495)227 351 y
-Fj(Ev)n(ery)32 b(F)-7 b(rameSet)32 b(also)g(inherits)h(an)n(y)f
-(further)h(attributes)g(that)g(b)r(elong)f(to)h(its)g(curren)n(t)f(F)-7
-b(rame,)34 b(regardless)227 451 y(of)j(that)h(F)-7 b(rame's)36
-b(class.)65 b(\(F)-7 b(or)37 b(example,)i(the)f(Equino)n(x)e
-(attribute,)k(de\014ned)d(b)n(y)g(the)h(SkyF)-7 b(rame)36
-b(class,)j(is)227 551 y(inherited)d(b)n(y)g(an)n(y)f(F)-7
-b(rameSet)35 b(whic)n(h)h(has)f(a)g(SkyF)-7 b(rame)35
-b(as)g(its)h(curren)n(t)f(F)-7 b(rame.\))61 b(The)36
-b(set)g(of)g(attributes)227 650 y(b)r(elonging)27 b(to)h(a)f(F)-7
-b(rameSet)27 b(ma)n(y)g(therefore)g(c)n(hange)f(when)i(a)f(new)h
-(curren)n(t)f(F)-7 b(rame)27 b(is)g(selected.)-2 787
-y Fd(F)-8 b(unctions)n(:)227 933 y Fj(In)25 b(addition)f(to)g(those)g
-(functions)h(applicable)e(to)h(all)g(F)-7 b(rames,)25
-b(the)f(follo)n(wing)g(functions)g(ma)n(y)g(also)f(b)r(e)i(applied)227
-1033 y(to)j(all)f(F)-7 b(rameSets:)340 1275 y Fi(\017)45
-b Fj(astAddF)-7 b(rame:)37 b(Add)28 b(a)f(F)-7 b(rame)27
-b(to)h(a)f(F)-7 b(rameSet)27 b(to)h(de\014ne)f(a)h(new)f(co)r(ordinate)
-g(system)340 1396 y Fi(\017)45 b Fj(astGetF)-7 b(rame:)37
-b(Obtain)27 b(a)g(p)r(oin)n(ter)g(to)h(a)f(sp)r(eci\014ed)h(F)-7
-b(rame)27 b(in)h(a)f(F)-7 b(rameSet)340 1516 y Fi(\017)45
-b Fj(astGetMapping:)37 b(Obtain)27 b(a)g(Mapping)g(b)r(et)n(w)n(een)h
-(t)n(w)n(o)f(F)-7 b(rames)27 b(in)g(a)h(F)-7 b(rameSet)340
-1636 y Fi(\017)45 b Fj(astRemapF)-7 b(rame:)36 b(Mo)r(dify)28
-b(a)f(F)-7 b(rame's)27 b(relationship)g(to)g(the)h(other)f(F)-7
-b(rames)27 b(in)h(a)f(F)-7 b(rameSet)340 1757 y Fi(\017)45
-b Fj(astRemo)n(v)n(eF)-7 b(rame:)35 b(Remo)n(v)n(e)26
-b(a)i(F)-7 b(rame)27 b(from)g(a)g(F)-7 b(rameSet)p 0
-1931 3780 12 v 0 2063 a Fz(GrismMap)160 b Fe(T)-10 b(ransform)36
-b(1-dimensional)g(co)s(ordinates)h(using)1186 2177 y(a)i(grism)e(disp)s
-(ersion)h(equation)3149 2063 y Fz(GrismMap)0 2341 y Fd(Description:)44
-b Fj(A)22 b(GrismMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g
-(whic)n(h)g(transforms)f(1-dimensional)g(co)r(ordinates)227
-2441 y(using)f(the)h(sp)r(ectral)f(disp)r(ersion)g(equation)g(describ)r
-(ed)g(in)g(FITS-W)n(CS)h(pap)r(er)f(I)r(I)r(I)h Ft(")p
-Fj(Represen)n(tation)e(of)h(sp)r(ectral)227 2541 y(co)r(ordinates)26
-b(in)i(FITS)p Ft(")p Fj(.)37 b(This)28 b(describ)r(es)f(the)h(disp)r
-(ersion)f(pro)r(duced)g(b)n(y)g(gratings,)f(prisms)h(and)h(grisms.)227
-2659 y(When)23 b(initially)f(created,)g(the)h(forw)n(ard)d
-(transformation)g(of)i(a)g(GrismMap)f(transforms)g(input)h
-Ft(")p Fj(grism)f(param-)227 2759 y(eter)p Ft(")k Fj(v)-5
-b(alues)24 b(in)n(to)h(output)h(w)n(a)n(v)n(elength)d(v)-5
-b(alues.)36 b(The)25 b Ft(")p Fj(grism)f(parameter)p
-Ft(")f Fj(is)i(a)g(dimensionless)g(v)-5 b(alue)25 b(whic)n(h)227
-2858 y(is)30 b(linearly)e(related)h(to)g(p)r(osition)h(on)f(the)h
-(detector.)42 b(It)30 b(is)f(de\014ned)h(in)g(FITS-W)n(CS)f(pap)r(er)g
-(I)r(I)r(I)h(as)f Ft(")p Fj(the)h(o\013set)227 2958 y(on)25
-b(the)g(detector)f(from)h(the)g(p)r(oin)n(t)g(of)g(in)n(tersection)f
-(of)h(the)g(camera)f(axis,)g(measured)g(in)h(units)h(of)e(the)i
-(e\013ectiv)n(e)227 3057 y(lo)r(cal)f(length)p Ft(")p
-Fj(.)36 b(The)25 b(units)h(in)f(whic)n(h)g(w)n(a)n(v)n(elength)f(v)-5
-b(alues)25 b(are)f(exp)r(ected)i(or)e(returned)h(is)g(determined)g(b)n
-(y)g(the)227 3157 y(v)-5 b(alues)29 b(supplied)h(for)f(the)g(GrismW)-7
-b(a)n(v)n(eR,)29 b(GrismNRP)g(and)g(GrismG)g(attribute:)40
-b(whatev)n(er)29 b(units)g(are)g(used)227 3257 y(for)e(these)h
-(attributes)f(will)h(also)f(b)r(e)h(used)f(for)g(the)h(w)n(a)n(v)n
-(elength)e(v)-5 b(alues.)0 3394 y Fd(Constructor)32 b(F)-8
-b(unction:)227 3493 y Fj(astGrismMap)-2 3630 y Fd(Inheritance)n(:)227
-3776 y Fj(The)28 b(GrismMap)f(class)g(inherits)g(from)g(the)h(Mapping)g
-(class.)-2 3913 y Fd(A)m(ttributes)n(:)227 4060 y Fj(In)k(addition)f
-(to)g(those)g(attributes)g(common)g(to)g(all)g(Mappings,)g(ev)n(ery)f
-(GrismMap)h(also)f(has)h(the)h(follo)n(wing)227 4159
-y(attributes:)340 4401 y Fi(\017)45 b Fj(GrismNR:)28
-b(The)g(refractiv)n(e)e(index)i(at)f(the)h(reference)f(w)n(a)n(v)n
-(elength)340 4522 y Fi(\017)45 b Fj(GrismNRP:)28 b(Rate)f(of)h(c)n
-(hange)e(of)i(refractiv)n(e)e(index)h(with)i(w)n(a)n(v)n(elength)340
-4642 y Fi(\017)45 b Fj(GrismW)-7 b(a)n(v)n(eR:)27 b(The)g(reference)g
-(w)n(a)n(v)n(elength)340 4763 y Fi(\017)45 b Fj(GrismAlpha:)37
-b(The)28 b(angle)e(of)i(incidence)g(of)f(the)h(incoming)f(ligh)n(t)340
-4883 y Fi(\017)45 b Fj(GrismG:)28 b(The)f(grating)g(ruling)g(densit)n
-(y)340 5003 y Fi(\017)45 b Fj(GrismM:)28 b(The)f(in)n(terference)g
-(order)340 5124 y Fi(\017)45 b Fj(GrismEps:)36 b(The)28
-b(angle)f(b)r(et)n(w)n(een)g(the)h(normal)f(and)g(the)h(disp)r(ersion)f
-(plane)340 5244 y Fi(\017)45 b Fj(GrismTheta:)37 b(Angle)27
-b(b)r(et)n(w)n(een)h(normal)e(to)i(detector)f(plane)g(and)h(reference)e
-(ra)n(y)-2 5394 y Fd(F)-8 b(unctions)n(:)227 5540 y Fj(The)31
-b(GrismMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(functions)h(b)r(ey)n(ond)e(those)h(whic)n(h)g(are)f(applicable)g(to)h
-(all)227 5639 y(Mappings.)p eop end
-%%Page: 496 506
-TeXDict begin 496 505 bop 0 52 a FF(496)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(In)l(terv)-7 b(al)186 b Fe(A)39 b(region)e(represen)m(ting)g(an)h
-(in)m(terv)-7 b(al)37 b(on)h(one)h(or)f(more)1485 598
-y(axes)h(of)f(a)h(F)-10 b(rame)3324 483 y Fz(In)l(terv)j(al)0
-767 y Fd(Description:)44 b Fj(The)23 b(In)n(terv)-5 b(al)22
-b(class)g(implemen)n(ts)h(a)f(Region)g(whic)n(h)g(represen)n(ts)g(upp)r
-(er)g(and/or)f(lo)n(w)n(er)h(limits)h(on)f(one)227 867
-y(or)i(more)g(axes)g(of)g(a)h(F)-7 b(rame.)35 b(F)-7
-b(or)24 b(a)g(p)r(oin)n(t)h(to)g(b)r(e)g(within)g(the)g(region)f
-(represen)n(ted)f(b)n(y)i(the)g(In)n(terv)-5 b(al,)24
-b(the)h(p)r(oin)n(t)227 966 y(m)n(ust)j(satisfy)f(all)g(the)h
-(restrictions)e(placed)h(on)g(all)g(the)h(axes.)36 b(The)27
-b(p)r(oin)n(t)h(is)f(outside)g(the)h(region)e(if)i(it)g(fails)f(to)227
-1066 y(satisfy)j(an)n(y)g(one)f(of)i(the)f(restrictions.)44
-b(Eac)n(h)29 b(axis)g(ma)n(y)h(ha)n(v)n(e)f(either)h(an)g(upp)r(er)g
-(limit,)i(a)e(lo)n(w)n(er)e(limit,)k(b)r(oth)227 1165
-y(or)e(neither.)47 b(If)32 b(b)r(oth)f(limits)h(are)e(supplied)h(but)g
-(are)f(in)i(rev)n(erse)d(order)g(\(so)i(that)g(the)g(lo)n(w)n(er)f
-(limit)i(is)e(greater)227 1265 y(than)e(the)g(upp)r(er)g(limit\),)g
-(then)h(the)f(in)n(terv)-5 b(al)27 b(is)g(an)g(excluded)h(in)n(terv)-5
-b(al,)27 b(rather)g(than)g(an)h(included)g(in)n(terv)-5
-b(al.)227 1389 y(Note,)33 b(The)e(In)n(terv)-5 b(al)31
-b(class)g(mak)n(es)f(no)h(allo)n(w)n(ances)f(for)h(cyclic)g(nature)g
-(of)g(some)g(co)r(ordinate)g(systems)g(\(suc)n(h)227
-1489 y(as)25 b(SkyF)-7 b(rame)24 b(co)r(ordinates\).)35
-b(A)25 b(Bo)n(x)f(should)g(usually)h(b)r(e)g(used)g(in)g(these)g(cases)
-f(since)h(this)g(requires)f(the)h(user)227 1589 y(to)j(think)g(ab)r
-(out)f(suitable)h(upp)r(er)g(and)f(lo)n(w)n(er)f(limits,)0
-1738 y Fd(Constructor)32 b(F)-8 b(unction:)227 1837 y
-Fj(astIn)n(terv)j(al)-2 1986 y Fd(Inheritance)n(:)227
-2133 y Fj(The)28 b(In)n(terv)-5 b(al)27 b(class)g(inherits)g(from)g
-(the)h(Region)f(class.)-2 2282 y Fd(A)m(ttributes)n(:)227
-2428 y Fj(The)37 b(In)n(terv)-5 b(al)35 b(class)h(do)r(es)g(not)g
-(de\014ne)h(an)n(y)e(new)i(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)g(are)g(applicable)g(to)g(all)227 2527 y(Regions.)-2
-2676 y Fd(F)-8 b(unctions)n(:)227 2823 y Fj(The)38 b(In)n(terv)-5
-b(al)38 b(class)f(do)r(es)h(not)g(de\014ne)g(an)n(y)f(new)h(functions)h
-(b)r(ey)n(ond)f(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)227
-2922 y(Regions.)p 0 3121 V 0 3251 a Fz(In)l(traMap)801
-3252 y Fe(Map)h(p)s(oin)m(ts)f(using)g(a)h(priv)-7 b(ate)37
-b(transformation)1680 3367 y(function)3218 3251 y Fz(In)l(traMap)0
-3532 y Fd(Description:)44 b Fj(The)21 b(In)n(traMap)e(class)g(pro)n
-(vides)g(a)h(sp)r(ecialised)f(form)h(of)g(Mapping)g(whic)n(h)g
-(encapsulates)g(a)f(priv)-5 b(ately-)227 3631 y(de\014ned)30
-b(co)r(ordinate)e(transformation)g(other)h(AST)h(Mapping.)42
-b(This)29 b(allo)n(ws)f(y)n(ou)h(to)g(create)g(Mappings)f(that)227
-3731 y(p)r(erform)f(an)n(y)g(conceiv)-5 b(able)27 b(co)r(ordinate)f
-(transformation.)227 3855 y(Ho)n(w)n(ev)n(er,)k(an)h(In)n(traMap)g(is)g
-(in)n(tended)g(for)g(use)g(within)h(a)f(single)f(program)g(or)g(a)h
-(priv)-5 b(ate)31 b(suite)g(of)g(soft)n(w)n(are,)227
-3955 y(where)24 b(all)g(programs)d(ha)n(v)n(e)i(access)g(to)h(the)g
-(same)g(co)r(ordinate)f(transformation)f(functions)j(\(i.e.)36
-b(can)23 b(b)r(e)i(link)n(ed)227 4055 y(against)40 b(them\).)76
-b(In)n(traMaps)39 b(should)h(not)h(normally)e(b)r(e)i(stored)f(in)g
-(datasets)g(whic)n(h)g(ma)n(y)g(b)r(e)h(exp)r(orted)227
-4154 y(for)34 b(pro)r(cessing)f(b)n(y)h(other)g(soft)n(w)n(are,)g
-(since)g(that)h(soft)n(w)n(are)e(will)h(not)h(ha)n(v)n(e)e(the)i
-(necessary)d(transformation)227 4254 y(functions)c(a)n(v)-5
-b(ailable,)27 b(resulting)g(in)g(an)h(error.)227 4378
-y(Y)-7 b(ou)36 b(m)n(ust)f(register)f(an)n(y)h(co)r(ordinate)f
-(transformation)g(functions)i(to)f(b)r(e)h(used)f(using)g(astIn)n
-(traReg)f(b)r(efore)227 4478 y(creating)27 b(an)g(In)n(traMap.)0
-4627 y Fd(Constructor)32 b(F)-8 b(unction:)227 4727 y
-Fj(astIn)n(traMap)26 b(\(also)h(see)g(astIn)n(traReg\))-2
-4876 y Fd(Inheritance)n(:)227 5022 y Fj(The)h(In)n(traMap)e(class)h
-(inherits)h(from)f(the)h(Mapping)f(class.)-2 5171 y Fd(A)m(ttributes)n
-(:)227 5317 y Fj(In)35 b(addition)f(to)g(those)g(attributes)g(common)g
-(to)g(all)g(Mappings,)h(ev)n(ery)e(In)n(traMap)g(also)g(has)h(the)h
-(follo)n(wing)227 5416 y(attributes:)340 5677 y Fi(\017)45
-b Fj(In)n(traFlag:)36 b(In)n(traMap)26 b(iden)n(ti\014cation)i(string)p
-eop end
-%%Page: 497 507
-TeXDict begin 497 506 bop 3643 52 a FF(497)-2 351 y Fd(F)-8
-b(unctions)n(:)227 497 y Fj(The)34 b(In)n(traMap)f(class)g(do)r(es)g
-(not)h(de\014ne)g(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)h
-(whic)n(h)f(are)g(applicable)g(to)h(all)227 597 y(Mappings.)p
-0 818 3780 12 v 0 949 a Fz(KeyMap)1140 956 y Fe(Store)j(a)i(set)g(of)f
-(k)m(ey/v)-7 b(alue)37 b(pairs)3274 949 y Fz(KeyMap)0
-1173 y Fd(Description:)44 b Fj(The)27 b(KeyMap)f(class)f(is)i(used)g
-(to)f(store)g(a)g(set)h(of)f(v)-5 b(alues)26 b(with)i(asso)r(ciated)d
-(k)n(eys)h(whic)n(h)g(iden)n(tify)h(the)227 1273 y(v)-5
-b(alues.)41 b(The)29 b(k)n(eys)f(are)g(strings)g(\(case-sensitiv)n(e,)f
-(trailing)h(spaces)g(are)g(ignored\),)h(and)f(the)i(data)e(t)n(yp)r(e)h
-(of)g(the)227 1373 y(v)-5 b(alues)30 b(can)g(b)r(e)h(in)n(teger,)f
-(\015oating)f(p)r(oin)n(t,)j(v)n(oid)d(p)r(oin)n(ter,)i(c)n(haracter)d
-(string)i(or)f(AST)i(Ob)5 b(ject)30 b(p)r(oin)n(ter.)45
-b(Eac)n(h)227 1472 y(v)-5 b(alue)24 b(can)g(b)r(e)h(a)f(scalar)f(or)g
-(a)h(one-dimensional)f(v)n(ector.)34 b(A)25 b(KeyMap)e(is)i
-(conceptually)e(similar)h(to)g(a)g(Mapping)227 1572 y(in)j(that)g(a)e
-(KeyMap)h(transforms)f(an)h(input)h(in)n(to)f(an)g(output)h(-)f(the)h
-(input)g(is)f(the)h(k)n(ey)-7 b(,)26 b(and)g(the)h(output)g(is)f(the)
-227 1672 y(v)-5 b(alue)25 b(asso)r(ciated)e(with)i(the)g(k)n(ey)-7
-b(.)36 b(Ho)n(w)n(ev)n(er,)23 b(this)i(is)f(only)h(a)f(conceptual)g
-(similarit)n(y)-7 b(,)25 b(and)f(it)h(should)g(b)r(e)g(noted)227
-1771 y(that)g(the)f(KeyMap)f(class)h(inherits)g(from)f(the)i(Ob)5
-b(ject)24 b(class)f(rather)g(than)h(the)h(Mapping)e(class.)35
-b(The)24 b(metho)r(ds)227 1871 y(of)k(the)g(Mapping)f(class)g(cannot)g
-(b)r(e)h(used)f(with)h(a)g(KeyMap.)0 2042 y Fd(Constructor)k(F)-8
-b(unction:)227 2142 y Fj(astKeyMap)-2 2313 y Fd(Inheritance)n(:)227
-2459 y Fj(The)28 b(KeyMap)f(class)f(inherits)i(from)f(the)h(Ob)5
-b(ject)27 b(class.)-2 2630 y Fd(A)m(ttributes)n(:)227
-2776 y Fj(In)33 b(addition)f(to)h(those)f(attributes)g(common)g(to)g
-(all)g(Ob)5 b(jects,)34 b(ev)n(ery)d(KeyMap)h(also)f(has)h(the)h(follo)
-n(wing)e(at-)227 2876 y(tributes:)340 3169 y Fi(\017)45
-b Fj(KeyError:)34 b(Rep)r(ort)28 b(an)f(error)e(if)k(the)f(requested)f
-(k)n(ey)f(do)r(es)i(not)f(exist?)340 3313 y Fi(\017)45
-b Fj(SizeGuess:)37 b(The)28 b(exp)r(ected)f(size)h(of)f(the)h(KeyMap.)
--2 3496 y Fd(F)-8 b(unctions)n(:)227 3643 y Fj(In)23
-b(addition)g(to)g(those)g(functions)g(applicable)f(to)h(all)g(Ob)5
-b(jects,)24 b(the)f(follo)n(wing)f(functions)h(ma)n(y)f(also)g(b)r(e)i
-(applied)227 3742 y(to)k(all)f(KeyMaps:)340 4036 y Fi(\017)45
-b Fj(astMapGet0)p Fl(<)p Fj(X)p Fl(>)p Fj(:)36 b(Get)28
-b(a)f(named)g(scalar)f(en)n(try)h(from)h(a)f(KeyMap)340
-4179 y Fi(\017)45 b Fj(astMapGet1)p Fl(<)p Fj(X)p Fl(>)p
-Fj(:)36 b(Get)28 b(a)f(named)g(v)n(ector)g(en)n(try)g(from)g(a)g
-(KeyMap)340 4323 y Fi(\017)45 b Fj(astMapGetElem)p Fl(<)p
-Fj(X)p Fl(>)p Fj(:)36 b(Get)28 b(an)f(elemen)n(t)h(of)g(a)f(named)g(v)n
-(ector)f(en)n(try)i(from)f(a)g(KeyMap)340 4467 y Fi(\017)45
-b Fj(astMapHasKey:)35 b(Do)r(es)28 b(the)g(KeyMap)f(con)n(tain)f(a)i
-(named)f(en)n(try?)340 4610 y Fi(\017)45 b Fj(astMapKey:)36
-b(Return)28 b(the)g(k)n(ey)e(name)i(at)f(a)g(giv)n(en)g(index)h(in)g
-(the)g(KeyMap)340 4754 y Fi(\017)45 b Fj(astMapLenC:)27
-b(Get)h(the)g(length)g(of)f(a)h(named)f(c)n(haracter)f(en)n(try)h(in)g
-(a)h(KeyMap)340 4898 y Fi(\017)45 b Fj(astMapLength:)36
-b(Get)28 b(the)g(length)g(of)g(a)f(named)g(en)n(try)g(in)h(a)f(KeyMap)
-340 5041 y Fi(\017)45 b Fj(astMapPut0)p Fl(<)p Fj(X)p
-Fl(>)p Fj(:)35 b(Add)29 b(a)e(new)g(scalar)f(en)n(try)h(to)h(a)f
-(KeyMap)340 5185 y Fi(\017)45 b Fj(astMapPut1)p Fl(<)p
-Fj(X)p Fl(>)p Fj(:)35 b(Add)29 b(a)e(new)g(v)n(ector)g(en)n(try)g(to)g
-(a)g(KeyMap)340 5329 y Fi(\017)45 b Fj(astMapRemo)n(v)n(e:)35
-b(Remo)n(v)n(ed)27 b(a)g(named)h(en)n(try)f(from)g(a)g(KeyMap)340
-5473 y Fi(\017)45 b Fj(astMapSize:)36 b(Get)29 b(the)e(n)n(um)n(b)r(er)
-h(of)f(en)n(tries)g(in)h(a)f(KeyMap)340 5616 y Fi(\017)45
-b Fj(astMapT)n(yp)r(e:)36 b(Return)28 b(the)g(data)f(t)n(yp)r(e)h(of)f
-(a)h(named)f(en)n(try)g(in)h(a)f(map.)p eop end
-%%Page: 498 508
-TeXDict begin 498 507 bop 0 52 a FF(498)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 482
-a Fz(LutMap)742 483 y Fe(T)-10 b(ransform)37 b(1-dimensional)f(co)s
-(ordinates)g(using)j(a)1571 598 y(lo)s(okup)f(table)3304
-482 y Fz(LutMap)0 782 y Fd(Description:)44 b Fj(A)30
-b(LutMap)g(is)g(a)f(sp)r(ecialised)g(form)h(of)f(Mapping)h(whic)n(h)f
-(transforms)g(1-dimensional)f(co)r(ordinates)227 882
-y(b)n(y)g(using)f(linear)g(in)n(terp)r(olation)f(in)i(a)f(lo)r(okup)h
-(table.)227 1005 y(Eac)n(h)d(input)h(co)r(ordinate)e(v)-5
-b(alue)26 b(is)f(\014rst)g(scaled)g(to)g(giv)n(e)g(the)h(index)f(of)h
-(an)f(en)n(try)g(in)h(the)g(table)f(b)n(y)g(subtracting)227
-1105 y(a)32 b(starting)f(v)-5 b(alue)31 b(\(the)i(input)f(co)r
-(ordinate)f(corresp)r(onding)f(to)h(the)h(\014rst)g(table)g(en)n(try\))
-f(and)h(dividing)f(b)n(y)h(an)227 1205 y(incremen)n(t)c(\(the)g
-(di\013erence)f(in)h(input)h(co)r(ordinate)d(v)-5 b(alue)28
-b(b)r(et)n(w)n(een)f(adjacen)n(t)g(table)h(en)n(tries\).)227
-1328 y(The)j(resulting)g(index)g(will)g(usually)g(con)n(tain)f(a)h
-(fractional)f(part,)i(so)e(the)i(output)f(co)r(ordinate)f(v)-5
-b(alue)31 b(is)g(then)227 1428 y(generated)f(b)n(y)g(in)n(terp)r
-(olating)f(linearly)h(b)r(et)n(w)n(een)g(the)h(appropriate)d(en)n
-(tries)i(in)h(the)f(table.)46 b(If)31 b(the)f(index)h(lies)227
-1528 y(outside)h(the)h(range)e(of)h(the)h(table,)g(linear)e(extrap)r
-(olation)g(is)h(used)h(based)e(on)h(the)h(t)n(w)n(o)e(nearest)h(en)n
-(tries)f(\(i.e.)227 1627 y(the)26 b(t)n(w)n(o)e(en)n(tries)g(at)h(the)g
-(start)f(or)g(end)h(of)g(the)g(table,)h(as)e(appropriate\).)35
-b(If)25 b(either)g(of)g(the)g(en)n(tries)f(used)h(for)f(the)227
-1727 y(in)n(terplation)j(has)g(a)g(v)-5 b(alue)28 b(of)f(AST)p
-Ft(__)p Fj(BAD,)h(then)g(the)g(in)n(terp)r(olated)f(v)-5
-b(alue)28 b(is)f(returned)h(as)e(AST)p Ft(__)p Fj(BAD.)227
-1850 y(If)19 b(the)g(lo)r(okup)f(table)g(en)n(tries)g(increase)f(or)g
-(decrease)g(monotonically)g(\(and)i(if)g(the)g(table)f(con)n(tains)f
-(no)h(AST)p Ft(__)p Fj(BAD)227 1950 y(v)-5 b(alues\),)28
-b(then)g(the)g(in)n(v)n(erse)e(transformation)g(ma)n(y)h(also)f(b)r(e)i
-(p)r(erformed.)0 2097 y Fd(Constructor)k(F)-8 b(unction:)227
-2197 y Fj(astLutMap)-2 2344 y Fd(Inheritance)n(:)227
-2490 y Fj(The)28 b(LutMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 2638 y Fd(A)m(ttributes)n(:)227 2784 y Fj(In)38
-b(addition)g(to)f(those)h(attributes)f(common)h(to)f(all)h(Mappings,)h
-(ev)n(ery)e(LutMap)h(also)e(has)i(the)g(follo)n(wing)227
-2884 y(attributes:)340 3142 y Fi(\017)45 b Fj(LutIn)n(terp:)37
-b(The)28 b(in)n(terp)r(olation)f(metho)r(d)h(to)f(use)h(b)r(et)n(w)n
-(een)f(table)h(en)n(tries.)-2 3301 y Fd(F)-8 b(unctions)n(:)227
-3448 y Fj(The)37 b(LutMap)h(class)e(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(functions)h(b)r(ey)n(ond)f(those)f(whic)n(h)h(are)f(applicable)h
-(to)g(all)227 3547 y(Mappings.)p 0 3742 V 0 3874 a Fz(Mapping)466
-b Fe(In)m(ter-relate)36 b(t)m(w)m(o)h(co)s(ordinate)g(systems)466
-b Fz(Mapping)0 4063 y Fd(Description:)44 b Fj(This)29
-b(class)e(pro)n(vides)g(the)i(basic)f(facilities)h(for)f(transforming)f
-(a)h(set)g(of)h(co)r(ordinates)e(\(represen)n(ting)227
-4163 y Ft(")p Fj(input)p Ft(")38 b Fj(p)r(oin)n(ts\))g(to)g(giv)n(e)e
-(a)i(new)g(set)f(of)h(co)r(ordinates)f(\(represen)n(ting)f
-Ft(")p Fj(output)p Ft(")i Fj(p)r(oin)n(ts\).)67 b(It)38
-b(is)g(used)g(to)227 4263 y(describ)r(e)28 b(the)g(relationship)f(whic)
-n(h)h(exists)f(b)r(et)n(w)n(een)h(t)n(w)n(o)f(di\013eren)n(t)h(co)r
-(ordinate)f(systems)h(and)f(to)h(implemen)n(t)227 4362
-y(op)r(erations)22 b(whic)n(h)i(mak)n(e)e(use)i(of)f(this)h(\(suc)n(h)f
-(as)g(transforming)f(co)r(ordinates)g(and)i(resampling)e(grids)g(of)i
-(data\).)227 4462 y(Ho)n(w)n(ev)n(er,)38 b(the)f(Mapping)g(class)f(do)r
-(es)h(not)g(ha)n(v)n(e)f(a)h(constructor)f(function)h(of)g(its)h(o)n
-(wn,)h(as)d(it)i(is)f(simply)g(a)227 4562 y(con)n(tainer)22
-b(class)g(for)g(a)g(family)h(of)g(sp)r(ecialised)f(Mappings)g(whic)n(h)
-h(implemen)n(t)g(particular)e(t)n(yp)r(es)i(of)g(co)r(ordinate)227
-4661 y(transformation.)0 4809 y Fd(Constructor)32 b(F)-8
-b(unction:)227 4908 y Fj(None.)-2 5056 y Fd(Inheritance)n(:)227
-5202 y Fj(The)28 b(Mapping)f(class)g(inherits)g(from)h(the)g(Ob)5
-b(ject)27 b(class.)-2 5349 y Fd(A)m(ttributes)n(:)227
-5495 y Fj(In)42 b(addition)e(to)h(those)g(attributes)g(common)g(to)f
-(all)h(Ob)5 b(jects,)44 b(ev)n(ery)c(Mapping)h(also)f(has)g(the)i
-(follo)n(wing)227 5595 y(attributes:)p eop end
-%%Page: 499 509
-TeXDict begin 499 508 bop 3643 52 a FF(499)340 351 y
-Fi(\017)45 b Fj(In)n(v)n(ert:)36 b(Mapping)27 b(in)n(v)n(ersion)f
-(\015ag)340 487 y Fi(\017)45 b Fj(IsLinear:)36 b(Is)27
-b(the)h(Mapping)g(linear?)340 623 y Fi(\017)45 b Fj(IsSimple:)37
-b(Has)28 b(the)g(Mapping)f(b)r(een)h(simpli\014ed?)340
-759 y Fi(\017)45 b Fj(Nin:)38 b(Num)n(b)r(er)27 b(of)h(input)g(co)r
-(ordinates)f(for)g(a)g(Mapping)340 895 y Fi(\017)45 b
-Fj(Nout:)37 b(Num)n(b)r(er)28 b(of)g(output)g(co)r(ordinates)e(for)h(a)
-g(Mapping)340 1031 y Fi(\017)45 b Fj(Rep)r(ort:)37 b(Rep)r(ort)27
-b(transformed)g(co)r(ordinates?)340 1167 y Fi(\017)45
-b Fj(T)-7 b(ranF)g(orw)n(ard:)35 b(F)-7 b(orw)n(ard)25
-b(transformation)h(de\014ned?)340 1303 y Fi(\017)45 b
-Fj(T)-7 b(ranIn)n(v)n(erse:)35 b(In)n(v)n(erse)26 b(transformation)g
-(de\014ned?)-2 1471 y Fd(F)-8 b(unctions)n(:)227 1617
-y Fj(In)23 b(addition)g(to)g(those)g(functions)g(applicable)f(to)h(all)
-g(Ob)5 b(jects,)24 b(the)f(follo)n(wing)f(functions)h(ma)n(y)f(also)g
-(b)r(e)i(applied)227 1717 y(to)k(all)f(Mappings:)340
-1987 y Fi(\017)45 b Fj(astDecomp)r(ose:)36 b(Decomp)r(ose)27
-b(a)h(Mapping)f(in)n(to)g(t)n(w)n(o)g(comp)r(onen)n(t)g(Mappings)340
-2123 y Fi(\017)45 b Fj(astT)-7 b(ranGrid:)36 b(T)-7 b(ransform)26
-b(a)h(grid)g(of)h(p)r(ositions)340 2259 y Fi(\017)45
-b Fj(astIn)n(v)n(ert:)36 b(In)n(v)n(ert)26 b(a)i(Mapping)340
-2395 y Fi(\017)45 b Fj(astLinearAppro)n(x:)35 b(Calculate)27
-b(a)g(linear)g(appro)n(ximation)f(to)h(a)g(Mapping)340
-2531 y Fi(\017)45 b Fj(astMapBo)n(x:)35 b(Find)29 b(a)e(b)r(ounding)g
-(b)r(o)n(x)h(for)f(a)g(Mapping)340 2667 y Fi(\017)45
-b Fj(astMapSplit:)37 b(Split)29 b(a)e(Mapping)g(up)h(in)n(to)f
-(parallel)g(comp)r(onen)n(t)g(Mappings)340 2803 y Fi(\017)45
-b Fj(astRate:)37 b(Calculate)27 b(the)h(rate)e(of)i(c)n(hange)e(of)i(a)
-f(Mapping)g(output)340 2939 y Fi(\017)45 b Fj(astRebin)p
-Fl(<)p Fj(X)p Fl(>)p Fj(:)37 b(Rebin)28 b(a)f(region)f(of)i(a)f(data)g
-(grid)340 3075 y Fi(\017)45 b Fj(astResample)p Fl(<)p
-Fj(X)p Fl(>)p Fj(:)36 b(Resample)27 b(a)g(region)f(of)i(a)f(data)g
-(grid)340 3211 y Fi(\017)45 b Fj(astRemo)n(v)n(eRegions:)35
-b(Remo)n(v)n(e)26 b(an)n(y)h(Regions)g(from)g(a)g(Mapping)340
-3347 y Fi(\017)45 b Fj(astSimplify:)38 b(Simplify)28
-b(a)f(Mapping)340 3483 y Fi(\017)45 b Fj(astT)-7 b(ran1:)35
-b(T)-7 b(ransform)27 b(1-dimensional)f(co)r(ordinates)340
-3619 y Fi(\017)45 b Fj(astT)-7 b(ran2:)35 b(T)-7 b(ransform)27
-b(2-dimensional)f(co)r(ordinates)340 3754 y Fi(\017)45
-b Fj(astT)-7 b(ranN:)27 b(T)-7 b(ransform)26 b(N-dimensional)h(co)r
-(ordinates)340 3890 y Fi(\017)45 b Fj(astT)-7 b(ranP:)26
-b(T)-7 b(ransform)26 b(N-dimensional)h(co)r(ordinates)g(held)h(in)f
-(separate)g(arra)n(ys)p 0 4096 3780 12 v 0 4228 a Fz(MathMap)207
-b Fe(T)-10 b(ransform)36 b(co)s(ordinates)h(using)h(mathematical)1604
-4338 y(expressions)3192 4228 y Fz(MathMap)0 4538 y Fd(Description:)44
-b Fj(A)36 b(MathMap)e(is)h(a)f(Mapping)h(whic)n(h)f(allo)n(ws)g(y)n(ou)
-g(to)h(sp)r(ecify)g(a)f(set)h(of)g(forw)n(ard)e(and/or)g(in)n(v)n(erse)
-227 4638 y(transformation)26 b(functions)i(using)g(arithmetic)f(op)r
-(erations)g(and)g(mathematical)g(functions)h(similar)f(to)h(those)227
-4737 y(a)n(v)-5 b(ailable)19 b(in)i(C.)f(The)g(MathMap)g(in)n(terprets)
-f(these)i(functions)f(at)g(run-time,)i(whenev)n(er)d(its)h(forw)n(ard)f
-(or)g(in)n(v)n(erse)227 4837 y(transformation)26 b(is)g(required.)36
-b(Because)26 b(the)h(functions)g(are)f(not)h(compiled)g(in)g(the)h
-(normal)d(sense)i(\(unlik)n(e)g(an)227 4937 y(In)n(traMap\),)32
-b(they)g(ma)n(y)f(b)r(e)h(used)g(to)f(describ)r(e)g(co)r(ordinate)g
-(transformations)f(in)i(a)f(transp)r(ortable)f(manner.)227
-5036 y(A)25 b(MathMap)g(therefore)f(pro)n(vides)f(a)i(\015exible)f(w)n
-(a)n(y)g(of)h(de\014ning)g(new)f(t)n(yp)r(es)h(of)g(Mapping)f(whose)g
-(descriptions)227 5136 y(ma)n(y)j(b)r(e)h(stored)f(as)g(part)g(of)h(a)f
-(dataset)g(and)g(in)n(terpreted)g(b)n(y)h(other)f(programs.)0
-5292 y Fd(Constructor)32 b(F)-8 b(unction:)227 5391 y
-Fj(astMathMap)-2 5547 y Fd(Inheritance)n(:)227 5693 y
-Fj(The)28 b(MathMap)f(class)g(inherits)h(from)f(the)h(Mapping)f(class.)
-p eop end
-%%Page: 500 510
-TeXDict begin 500 509 bop 0 52 a FF(500)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(A)m(ttributes)n(:)227
-497 y Fj(In)34 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(Mappings,)h(ev)n(ery)e(MathMap)h(also)f(has)g(the)i(follo)n
-(wing)227 597 y(attributes:)340 727 y Fi(\017)45 b Fj(Seed:)37
-b(Random)28 b(n)n(um)n(b)r(er)f(seed)340 853 y Fi(\017)45
-b Fj(SimpFI:)29 b(F)-7 b(orw)n(ard-in)n(v)n(erse)24 b(MathMap)j(pairs)g
-(simplify?)340 980 y Fi(\017)45 b Fj(SimpIF:)29 b(In)n(v)n(erse-forw)n
-(ard)24 b(MathMap)j(pairs)g(simplify?)-2 1135 y Fd(F)-8
-b(unctions)n(:)227 1281 y Fj(The)33 b(MathMap)g(class)e(do)r(es)i(not)f
-(de\014ne)h(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)
-f(are)g(applicable)g(to)h(all)227 1381 y(Mappings.)p
-0 1567 3780 12 v 0 1699 a Fz(MatrixMap)264 b Fe(Map)39
-b(co)s(ordinates)e(b)m(y)h(m)m(ultiplying)d(b)m(y)k(a)1719
-1809 y(matrix)3103 1699 y Fz(MatrixMap)0 1962 y Fd(Description:)44
-b Fj(A)20 b(MatrixMap)e(is)h(form)g(of)g(Mapping)g(whic)n(h)h(p)r
-(erforms)e(a)h(general)f(linear)g(transformation.)33
-b(Eac)n(h)18 b(set)227 2062 y(of)26 b(input)g(co)r(ordinates,)f
-(regarded)f(as)h(a)h(column-v)n(ector,)e(are)h(pre-m)n(ultiplied)g(b)n
-(y)h(a)f(matrix)g(\(whose)h(elemen)n(ts)227 2161 y(are)j(sp)r
-(eci\014ed)h(when)g(the)g(MatrixMap)f(is)g(created\))g(to)h(giv)n(e)e
-(a)i(new)f(column-v)n(ector)f(con)n(taining)h(the)h(output)227
-2261 y(co)r(ordinates.)36 b(If)28 b(appropriate,)e(the)i(in)n(v)n(erse)
-e(transformation)g(ma)n(y)h(also)f(b)r(e)i(p)r(erformed.)0
-2404 y Fd(Constructor)k(F)-8 b(unction:)227 2503 y Fj(astMatrixMap)-2
-2646 y Fd(Inheritance)n(:)227 2792 y Fj(The)28 b(MatrixMap)f(class)f
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 2935 y Fd(A)m(ttributes)n
-(:)227 3081 y Fj(The)h(MatrixMap)e(class)h(do)r(es)g(not)g(de\014ne)h
-(an)n(y)f(new)g(attributes)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 3181 y(Mappings.)-2 3324 y
-Fd(F)-8 b(unctions)n(:)227 3470 y Fj(The)29 b(MatrixMap)g(class)f(do)r
-(es)h(not)g(de\014ne)g(an)n(y)g(new)g(functions)g(b)r(ey)n(ond)g(those)
-g(whic)n(h)g(are)f(applicable)h(to)g(all)227 3570 y(Mappings.)p
-0 3756 V 0 3887 a Fz(NormMap)890 3888 y Fe(Normalise)36
-b(co)s(ordinates)h(using)h(a)h(supplied)1730 4001 y(F)-10
-b(rame)3172 3887 y Fz(NormMap)0 4153 y Fd(Description:)44
-b Fj(The)26 b(NormMap)e(class)g(implemen)n(ts)i(a)f(Mapping)g(whic)n(h)
-g(normalises)e(co)r(ordinate)i(v)-5 b(alues)24 b(using)h(the)227
-4253 y(astNorm)f(function)h(of)f(a)h(supplied)f(F)-7
-b(rame.)36 b(The)24 b(n)n(um)n(b)r(er)h(of)f(inputs)h(and)f(outputs)h
-(of)g(a)f(NormMap)g(are)f(b)r(oth)227 4353 y(equal)k(to)h(the)g(n)n(um)
-n(b)r(er)f(of)h(axes)e(in)i(the)g(supplied)g(F)-7 b(rame.)227
-4474 y(The)34 b(forw)n(ard)e(and)h(in)n(v)n(erse)f(transformation)g(of)
-i(a)f(NormMap)g(are)f(b)r(oth)i(de\014ned)g(but)g(are)f(iden)n(tical)g
-(\(that)227 4574 y(is,)43 b(they)c(do)g(not)h(form)f(a)g(real)g(in)n(v)
-n(erse)f(pair)g(in)i(that)g(the)g(in)n(v)n(erse)d(transformation)h(do)r
-(es)h(not)h(undo)f(the)227 4673 y(normalisation,)24 b(instead)h(it)h
-(reapplies)e(it\).)36 b(Ho)n(w)n(ev)n(er,)24 b(the)h(astSimplify)h
-(function)g(will)f(replace)f(neigh)n(b)r(ouring)227 4773
-y(pairs)j(of)g(forw)n(ard)f(and)i(in)n(v)n(erse)e(NormMaps)h(b)n(y)g(a)
-g(single)g(UnitMap.)0 4916 y Fd(Constructor)32 b(F)-8
-b(unction:)227 5015 y Fj(astNormMap)-2 5158 y Fd(Inheritance)n(:)227
-5304 y Fj(The)28 b(NormMap)f(class)f(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 5447 y Fd(A)m(ttributes)n(:)227 5593 y Fj(The)h(MatrixMap)e
-(class)h(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)
-n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227
-5693 y(Mappings.)p eop end
-%%Page: 501 511
-TeXDict begin 501 510 bop 3643 52 a FF(501)-2 351 y Fd(F)-8
-b(unctions)n(:)227 497 y Fj(The)32 b(NormMap)g(class)f(do)r(es)h(not)g
-(de\014ne)g(an)n(y)f(new)h(functions)h(b)r(ey)n(ond)f(those)f(whic)n(h)
-h(are)f(applicable)h(to)g(all)227 597 y(Mappings.)p 0
-789 3780 12 v 0 921 a Fz(NullRegion)330 b Fe(A)39 b(b)s(oundless)f
-(region)g(within)f(a)h(F)-10 b(rame)328 b Fz(NullRegion)0
-1103 y Fd(Description:)44 b Fj(The)21 b(NullRegion)g(class)f(implemen)n
-(ts)h(a)f(Region)h(with)g(no)f(b)r(ounds)h(within)h(a)e(F)-7
-b(rame.)35 b(If)21 b(the)g(Negated)227 1203 y(attribute)28
-b(of)f(a)h(NullRegion)f(is)g(false,)h(the)f(NullRegion)h(represen)n(ts)
-e(a)h(Region)g(con)n(taining)f(no)h(p)r(oin)n(ts.)37
-b(If)28 b(the)227 1302 y(Negated)k(attribute)g(of)h(a)e(NullRegion)i
-(is)f(true,)h(the)g(NullRegion)f(represen)n(ts)e(an)i(in\014nite)h
-(Region)f(\(that)h(is,)227 1402 y(all)28 b(p)r(oin)n(ts)f(in)h(the)g
-(co)r(ordinate)e(system)i(are)e(inside)i(the)g(NullRegion\).)0
-1548 y Fd(Constructor)k(F)-8 b(unction:)227 1648 y Fj(astNullRegion)-2
-1794 y Fd(Inheritance)n(:)227 1940 y Fj(The)28 b(NullRegion)f(class)g
-(inherits)g(from)h(the)g(Region)f(class.)-2 2086 y Fd(A)m(ttributes)n
-(:)227 2232 y Fj(The)h(NullRegion)g(class)f(do)r(es)h(not)g(de\014ne)g
-(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 2332 y(Regions.)-2 2478 y
-Fd(F)-8 b(unctions)n(:)227 2624 y Fj(The)30 b(NullRegion)g(class)e(do)r
-(es)i(not)f(de\014ne)h(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)
-h(whic)n(h)f(are)g(applicable)g(to)h(all)227 2723 y(Regions.)p
-0 2916 V 0 3047 a Fz(Ob)7 b(ject)710 b Fe(Base)39 b(class)f(for)g(all)g
-(AST)g(Ob)7 b(jects)709 b Fz(Ob)7 b(ject)0 3229 y Fd(Description:)44
-b Fj(This)33 b(class)e(is)h(the)h(base)f(class)f(from)h(whic)n(h)g(all)
-g(other)g(classes)f(in)i(the)f(AST)h(library)e(are)g(deriv)n(ed.)227
-3329 y(It)e(pro)n(vides)e(all)h(the)g(basic)g(Ob)5 b(ject)28
-b(b)r(eha)n(viour)f(and)h(Ob)5 b(ject)28 b(manipulation)g(facilities)g
-(required)f(throughout)227 3429 y(the)h(library)-7 b(.)36
-b(There)27 b(is)g(no)h(Ob)5 b(ject)27 b(constructor,)f(ho)n(w)n(ev)n
-(er,)g(as)h(Ob)5 b(jects)27 b(on)g(their)h(o)n(wn)f(are)f(not)i
-(useful.)0 3575 y Fd(Constructor)k(F)-8 b(unction:)227
-3674 y Fj(None.)-2 3820 y Fd(Inheritance)n(:)227 3967
-y Fj(The)28 b(Ob)5 b(ject)27 b(base)g(class)g(do)r(es)g(not)h(inherit)g
-(from)f(an)n(y)g(other)g(class.)-2 4113 y Fd(A)m(ttributes)n(:)227
-4259 y Fj(All)h(Ob)5 b(jects)28 b(ha)n(v)n(e)e(the)i(follo)n(wing)e
-(attributes:)340 4514 y Fi(\017)45 b Fj(Class:)36 b(Ob)5
-b(ject)28 b(class)e(name)340 4644 y Fi(\017)45 b Fj(ID:)28
-b(Ob)5 b(ject)28 b(iden)n(ti\014cation)f(string)340 4773
-y Fi(\017)45 b Fj(Iden)n(t:)37 b(P)n(ermanen)n(t)26 b(Ob)5
-b(ject)28 b(iden)n(ti\014cation)f(string)340 4903 y Fi(\017)45
-b Fj(Nob)5 b(ject:)37 b(Num)n(b)r(er)28 b(of)g(Ob)5 b(jects)27
-b(in)h(class)340 5032 y Fi(\017)45 b Fj(Ob)5 b(jSize:)37
-b(The)28 b(in-memory)e(size)h(of)h(the)g(Ob)5 b(ject)27
-b(in)h(b)n(ytes)340 5162 y Fi(\017)45 b Fj(RefCoun)n(t:)37
-b(Coun)n(t)28 b(of)f(activ)n(e)g(Ob)5 b(ject)28 b(p)r(oin)n(ters)340
-5291 y Fi(\017)45 b Fj(UseDefs:)38 b(Allo)n(w)27 b(use)g(of)h(default)g
-(v)-5 b(alues)27 b(for)g(Ob)5 b(ject)28 b(attributes?)-2
-5450 y Fd(F)-8 b(unctions)n(:)227 5596 y Fj(The)28 b(follo)n(wing)e
-(functions)i(ma)n(y)f(b)r(e)h(applied)g(to)f(all)h(Ob)5
-b(jects:)p eop end
-%%Page: 502 512
-TeXDict begin 502 511 bop 0 52 a FF(502)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(astAnn)n(ul:)37 b(Ann)n(ul)28 b(a)f(p)r(oin)n(ter)h(to)f(an)g(Ob)5
-b(ject)340 490 y Fi(\017)45 b Fj(astBegin:)36 b(Begin)27
-b(a)g(new)h(AST)g(con)n(text)340 628 y Fi(\017)45 b Fj(astClear:)36
-b(Clear)26 b(attribute)i(v)-5 b(alues)27 b(for)g(an)h(Ob)5
-b(ject)340 767 y Fi(\017)45 b Fj(astClone:)36 b(Clone)28
-b(a)f(p)r(oin)n(ter)g(to)g(an)h(Ob)5 b(ject)340 905 y
-Fi(\017)45 b Fj(astCop)n(y:)36 b(Cop)n(y)27 b(an)g(Ob)5
-b(ject)340 1044 y Fi(\017)45 b Fj(astDelete:)37 b(Delete)28
-b(an)g(Ob)5 b(ject)340 1182 y Fi(\017)45 b Fj(astEnd:)37
-b(End)27 b(an)g(AST)h(con)n(text)340 1321 y Fi(\017)45
-b Fj(astEscap)r(es:)36 b(Con)n(trol)26 b(whether)h(graphical)f(escap)r
-(e)h(sequences)g(are)g(remo)n(v)n(ed)340 1459 y Fi(\017)45
-b Fj(astExempt:)37 b(Exempt)27 b(an)g(Ob)5 b(ject)28
-b(p)r(oin)n(ter)f(from)g(AST)h(con)n(text)f(handling)340
-1598 y Fi(\017)45 b Fj(astExp)r(ort:)36 b(Exp)r(ort)27
-b(an)g(Ob)5 b(ject)27 b(p)r(oin)n(ter)h(to)f(an)g(outer)g(con)n(text)
-340 1736 y Fi(\017)45 b Fj(astGet)p Fl(<)p Fj(X)p Fl(>)p
-Fj(:)37 b(Get)28 b(an)f(attribute)h(v)-5 b(alue)27 b(for)g(an)g(Ob)5
-b(ject)340 1875 y Fi(\017)45 b Fj(astImp)r(ort:)37 b(Imp)r(ort)27
-b(an)h(Ob)5 b(ject)27 b(p)r(oin)n(ter)g(to)h(the)g(curren)n(t)e(con)n
-(text)340 2014 y Fi(\017)45 b Fj(astIsA)p Fl(<)p Fj(Class)p
-Fl(>)p Fj(:)35 b(T)-7 b(est)28 b(class)e(mem)n(b)r(ership)340
-2152 y Fi(\017)45 b Fj(astLo)r(c)n(k:)36 b(Lo)r(c)n(k)27
-b(an)g(Ob)5 b(ject)27 b(for)g(use)h(b)n(y)f(the)h(calling)f(thread)340
-2291 y Fi(\017)45 b Fj(astSame:)36 b(Do)28 b(t)n(w)n(o)f(AST)h(p)r(oin)
-n(ters)f(refer)g(to)g(the)h(same)f(Ob)5 b(ject?)340 2429
-y Fi(\017)45 b Fj(astSet:)37 b(Set)28 b(attribute)g(v)-5
-b(alues)27 b(for)g(an)g(Ob)5 b(ject)340 2568 y Fi(\017)45
-b Fj(astSet)p Fl(<)p Fj(X)p Fl(>)p Fj(:)36 b(Set)28 b(an)g(attribute)g
-(v)-5 b(alue)27 b(for)g(an)g(Ob)5 b(ject)340 2706 y Fi(\017)45
-b Fj(astSho)n(w:)36 b(Displa)n(y)27 b(a)g(textual)h(represen)n(tation)e
-(of)i(an)f(Ob)5 b(ject)27 b(on)h(standard)e(output)340
-2845 y Fi(\017)45 b Fj(astT)-7 b(est:)37 b(T)-7 b(est)27
-b(if)i(an)e(attribute)h(v)-5 b(alue)27 b(is)h(set)f(for)g(an)h(Ob)5
-b(ject)340 2983 y Fi(\017)45 b Fj(astT)-7 b(une:)37 b(Set)28
-b(or)f(get)g(an)g(AST)h(tuning)g(parameter)340 3122 y
-Fi(\017)45 b Fj(astUnlo)r(c)n(k:)36 b(Unlo)r(c)n(k)28
-b(an)f(Ob)5 b(ject)28 b(for)f(use)g(b)n(y)g(other)g(threads)340
-3260 y Fi(\017)45 b Fj(astV)-7 b(ersion:)36 b(Return)28
-b(the)g(v)n(erson)e(of)h(the)h(AST)g(library)f(b)r(eing)g(used.)p
-0 3471 3780 12 v 0 3603 a Fz(PcdMap)891 3609 y Fe(Apply)38
-b(2-dimensional)e(pincushion/barrel)1642 3730 y(distortion)3285
-3603 y Fz(PcdMap)0 3907 y Fd(Description:)44 b Fj(A)31
-b(PcdMap)g(is)f(a)h(non-linear)e(Mapping)h(whic)n(h)h(transforms)f
-(2-dimensional)f(p)r(ositions)h(to)h(correct)227 4007
-y(for)25 b(the)g(radial)f(distortion)g(in)n(tro)r(duced)h(b)n(y)f(some)
-h(cameras)e(and)i(telescop)r(es.)35 b(This)25 b(can)g(tak)n(e)f(the)h
-(form)g(either)227 4107 y(of)j(pincushion)f(or)g(barrel)f(distortion,)h
-(and)h(is)f(c)n(haracterized)f(b)n(y)h(a)g(single)g(distortion)g(co)r
-(e\016cien)n(t.)227 4237 y(A)g(PcdMap)f(is)g(sp)r(eci\014ed)h(b)n(y)f
-(giving)g(this)h(distortion)f(co)r(e\016cien)n(t)g(and)g(the)h(co)r
-(ordinates)e(of)i(the)g(cen)n(tre)f(of)g(the)227 4336
-y(radial)h(distortion.)36 b(The)28 b(forw)n(ard)d(transformation)h(of)i
-(a)f(PcdMap)g(applies)g(the)h(distortion:)227 4467 y(RD)g(=)g(R)g
-Fi(\003)f Fj(\()h(1)f(+)g(C)h Fi(\003)f Fj(R)h Fi(\003)f
-Fj(R)h(\))227 4597 y(where)h(R)h(is)g(the)g(undistorted)f(radial)g
-(distance)g(from)h(the)g(distortion)f(cen)n(tre)g(\(sp)r(eci\014ed)h(b)
-n(y)f(attribute)h(Pcd-)227 4697 y(Cen\),)k(RD)e(is)g(the)g(radial)e
-(distance)i(from)f(the)i(same)e(cen)n(tre)g(in)h(the)g(presence)f(of)h
-(distortion,)g(and)g(C)g(is)f(the)227 4796 y(distortion)c(co)r
-(e\016cien)n(t)h(\(giv)n(en)f(b)n(y)g(attribute)h(Disco\).)227
-4926 y(The)33 b(in)n(v)n(erse)f(transformation)f(of)i(a)f(PcdMap)h
-(remo)n(v)n(es)d(the)k(distortion)e(pro)r(duced)h(b)n(y)f(the)h(forw)n
-(ard)f(trans-)227 5026 y(formation.)42 b(The)29 b(expression)f(used)i
-(to)f(deriv)n(e)g(R)g(from)g(RD)i(is)e(an)g(appro)n(ximate)f(in)n(v)n
-(erse)g(of)h(the)h(expression)227 5126 y(ab)r(o)n(v)n(e.)0
-5286 y Fd(Constructor)i(F)-8 b(unction:)227 5386 y Fj(astPcdMap)-2
-5547 y Fd(Inheritance)n(:)227 5693 y Fj(The)28 b(PcdMap)f(class)g
-(inherits)g(from)g(the)h(Mapping)f(class.)p eop end
-%%Page: 503 513
-TeXDict begin 503 512 bop 3643 52 a FF(503)-2 351 y Fd(A)m(ttributes)n
-(:)227 497 y Fj(In)38 b(addition)f(to)f(those)h(attributes)g(common)g
-(to)g(all)g(Mappings,)h(ev)n(ery)e(PcdMap)h(also)f(has)g(the)i(follo)n
-(wing)227 597 y(attributes:)340 864 y Fi(\017)45 b Fj(Disco:)37
-b(PcdMap)27 b(pincushion/barrel)f(distortion)g(co)r(e\016cien)n(t)340
-999 y Fi(\017)45 b Fj(PcdCen\(axis\):)36 b(Cen)n(tre)28
-b(co)r(ordinates)e(of)h(pincushion/barrel)f(distortion)-2
-1165 y Fd(F)-8 b(unctions)n(:)227 1311 y Fj(The)37 b(PcdMap)f(class)f
-(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)h(functions)f(b)r(ey)n(ond)h
-(those)f(whic)n(h)g(are)g(applicable)g(to)g(all)227 1411
-y(Mappings.)p 0 1614 3780 12 v 0 1745 a Fz(P)l(ermMap)1025
-1746 y Fe(Co)s(ordinate)g(p)s(erm)m(utation)g(Mapping)3195
-1745 y Fz(P)l(ermMap)0 1939 y Fd(Description:)44 b Fj(A)37
-b(P)n(ermMap)e(is)h(a)g(Mapping)g(whic)n(h)g(p)r(erm)n(utes)h(the)f
-(order)f(of)h(co)r(ordinates,)i(and)e(p)r(ossibly)g(also)227
-2039 y(c)n(hanges)26 b(the)i(n)n(um)n(b)r(er)g(of)f(co)r(ordinates,)g
-(b)r(et)n(w)n(een)g(its)h(input)g(and)g(output.)227 2165
-y(In)37 b(addition)f(to)g(p)r(erm)n(uting)h(the)f(co)r(ordinate)g
-(order,)h(a)f(P)n(ermMap)f(ma)n(y)h(also)f(assign)g(constan)n(t)h(v)-5
-b(alues)36 b(to)227 2265 y(co)r(ordinates.)53 b(This)33
-b(is)g(useful)h(when)g(the)f(n)n(um)n(b)r(er)g(of)h(co)r(ordinates)d
-(is)j(b)r(eing)f(increased)f(as)h(it)h(allo)n(ws)e(\014xed)227
-2365 y(v)-5 b(alues)27 b(to)h(b)r(e)g(assigned)e(to)i(an)n(y)f(new)g
-(ones.)0 2518 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2618 y Fj(astP)n(ermMap)-2 2771 y Fd(Inheritance)n(:)227
-2917 y Fj(The)28 b(P)n(ermMap)e(class)h(inherits)g(from)h(the)g
-(Mapping)f(class.)-2 3071 y Fd(A)m(ttributes)n(:)227
-3217 y Fj(The)32 b(P)n(ermMap)d(class)i(do)r(es)g(not)g(de\014ne)g(an)n
-(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 3317 y(Mappings.)-2 3470 y
-Fd(F)-8 b(unctions)n(:)227 3617 y Fj(The)33 b(P)n(ermMap)f(class)g(do)r
-(es)g(not)h(de\014ne)g(an)n(y)g(new)g(functions)g(b)r(ey)n(ond)f(those)
-h(whic)n(h)g(are)f(applicable)g(to)h(all)227 3716 y(Mappings.)p
-0 3920 V 0 4051 a Fz(Plot)588 b Fe(Pro)m(vide)37 b(facilities)f(for)i
-(2D)h(graphical)d(output)586 b Fz(Plot)0 4244 y Fd(Description:)44
-b Fj(This)33 b(class)e(pro)n(vides)g(facilities)h(for)g(pro)r(ducing)f
-(2D)i(graphical)d(output.)52 b(A)32 b(Plot)g(is)g(a)g(sp)r(ecialised)
-227 4344 y(form)40 b(of)g(F)-7 b(rameSet,)43 b(in)e(whic)n(h)f(the)h
-(base)e(F)-7 b(rame)40 b(describ)r(es)f(a)h Ft(")p Fj(graphical)p
-Ft(")e Fj(co)r(ordinate)h(system)h(and)g(is)227 4444
-y(asso)r(ciated)28 b(with)i(a)e(rectangular)f(plotting)i(area)f(in)h
-(the)h(underlying)e(graphics)g(system.)41 b(This)29 b(plotting)g(area)
-227 4543 y(is)f(where)f(graphical)f(output)i(app)r(ears.)36
-b(It)28 b(is)f(de\014ned)h(when)g(the)g(Plot)f(is)g(created.)227
-4670 y(The)36 b(curren)n(t)e(F)-7 b(rame)35 b(of)h(a)f(Plot)g(describ)r
-(es)g(a)g Ft(")p Fj(ph)n(ysical)p Ft(")f Fj(co)r(ordinate)g(system,)j
-(whic)n(h)f(is)f(the)h(co)r(ordinate)227 4769 y(system)41
-b(in)h(whic)n(h)f(plotting)h(op)r(erations)e(are)g(sp)r(eci\014ed.)79
-b(The)41 b(results)g(of)g(eac)n(h)g(plotting)g(op)r(eration)g(are)227
-4869 y(automatically)26 b(transformed)f(in)n(to)i(graphical)e(co)r
-(ordinates)g(so)h(as)g(to)h(app)r(ear)e(in)i(the)g(plotting)g(area)e
-(\(sub)5 b(ject)227 4969 y(to)28 b(an)n(y)f(clipping)g(whic)n(h)h(ma)n
-(y)f(b)r(e)h(in)f(e\013ect\).)227 5095 y(Because)d(the)h(Mapping)f(b)r
-(et)n(w)n(een)g(ph)n(ysical)g(and)g(graphical)f(co)r(ordinates)g(ma)n
-(y)h(often)h(b)r(e)g(non-linear,)e(or)h(ev)n(en)227 5195
-y(discon)n(tin)n(uous,)i(most)h(plotting)f(do)r(es)h(not)g(result)f(in)
-h(simple)g(straigh)n(t)f(lines.)36 b(The)27 b(basic)f(plotting)h
-(elemen)n(t)g(is)227 5295 y(therefore)f(not)h(a)f(straigh)n(t)f(line,)i
-(but)h(a)e(geo)r(desic)f(curv)n(e)h(\(see)h(astCurv)n(e,)e(astGenCurv)n
-(e)h(and)g(astP)n(olyCurv)n(e\).)227 5394 y(A)k(Plot)f(also)f(pro)n
-(vides)g(facilities)i(for)f(dra)n(wing)f(mark)n(ers)f(or)i(sym)n(b)r
-(ols)f(\(astMark\),)i(text)f(\(astT)-7 b(ext\))30 b(and)f(grid)227
-5494 y(lines)38 b(\(astGridLine\).)68 b(It)38 b(is)g(also)f(p)r
-(ossible)h(to)g(dra)n(w)e(curvilinear)h(axes)g(with)i(optional)e(co)r
-(ordinate)g(grids)227 5593 y(\(astGrid\).)48 b(A)32 b(range)e(of)h
-(Plot)g(attributes)g(is)g(a)n(v)-5 b(ailable)30 b(to)h(allo)n(w)f
-(precise)h(con)n(trol)f(o)n(v)n(er)f(the)j(app)r(earance)e(of)227
-5693 y(graphical)c(output)i(pro)r(duced)g(b)n(y)f(these)h(functions.)p
-eop end
-%%Page: 504 514
-TeXDict begin 504 513 bop 0 52 a FF(504)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(Y)-7 b(ou)20
-b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g(co)r(ordinate)g
-(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g(the)g(nativ)n(e)f
-(graphical)227 451 y(co)r(ordinate)33 b(system)h(itself)6
-b(\))35 b(b)n(y)f(selecting)g(di\013eren)n(t)g(F)-7 b(rames)33
-b(as)h(the)g(curren)n(t)f(F)-7 b(rame)34 b(of)g(a)g(Plot,)h(using)e
-(its)227 551 y(Curren)n(t)d(attribute.)47 b(Y)-7 b(ou)31
-b(ma)n(y)f(also)g(set)h(up)g(clipping)g(\(see)f(astClip\))h(to)g(limit)
-h(the)f(exten)n(t)g(of)g(an)n(y)f(plotting)227 650 y(y)n(ou)c(p)r
-(erform,)h(and)f(this)h(ma)n(y)f(b)r(e)h(done)f(in)h(an)n(y)f(of)h(the)
-g(co)r(ordinate)e(systems)i(asso)r(ciated)e(with)i(the)g(Plot,)g(not)
-227 750 y(necessarily)f(the)i(one)f(y)n(ou)g(are)g(plotting)g(in.)227
-875 y(Lik)n(e)k(an)n(y)f(F)-7 b(rameSet,)32 b(a)f(Plot)g(ma)n(y)f(also)
-g(b)r(e)i(used)f(as)g(a)f(F)-7 b(rame.)47 b(In)32 b(this)f(case,)h(it)f
-(b)r(eha)n(v)n(es)f(lik)n(e)h(its)g(curren)n(t)227 975
-y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f(the)h(ph)n(ysical)f(co)r
-(ordinate)f(system.)227 1101 y(When)35 b(used)f(as)g(a)g(Mapping,)h(a)f
-(Plot)g(describ)r(es)f(the)i(in)n(ter-relation)e(b)r(et)n(w)n(een)h
-(graphical)e(co)r(ordinates)h(\(its)227 1200 y(base)k(F)-7
-b(rame\))38 b(and)f(ph)n(ysical)g(co)r(ordinates)g(\(its)h(curren)n(t)f
-(F)-7 b(rame\).)67 b(It)38 b(di\013ers)f(from)h(a)f(normal)g(F)-7
-b(rameSet,)227 1300 y(ho)n(w)n(ev)n(er,)29 b(in)h(that)h(an)e(attempt)i
-(to)f(transform)f(p)r(oin)n(ts)h(whic)n(h)g(lie)g(in)h(clipp)r(ed)f
-(areas)f(of)h(the)g(Plot)g(will)g(result)227 1400 y(in)e(bad)g(co)r
-(ordinate)e(v)-5 b(alues)27 b(\(AST)p Ft(__)p Fj(BAD\).)0
-1551 y Fd(Constructor)32 b(F)-8 b(unction:)227 1651 y
-Fj(astPlot)-2 1803 y Fd(Inheritance)n(:)227 1949 y Fj(The)28
-b(Plot)f(class)g(inherits)g(from)g(the)h(F)-7 b(rameSet)28
-b(class.)-2 2101 y Fd(A)m(ttributes)n(:)227 2247 y Fj(In)37
-b(addition)f(to)g(those)g(attributes)h(common)e(to)i(all)f(F)-7
-b(rameSets,)38 b(ev)n(ery)d(Plot)h(also)f(has)h(the)h(follo)n(wing)e
-(at-)227 2346 y(tributes:)340 2611 y Fi(\017)45 b Fj(Abbrev:)37
-b(Abbreviate)27 b(leading)g(\014elds?)340 2745 y Fi(\017)45
-b Fj(Border:)36 b(Dra)n(w)26 b(a)i(b)r(order)e(around)h(v)-5
-b(alid)27 b(regions)g(of)g(a)g(Plot?)340 2879 y Fi(\017)45
-b Fj(Clip:)37 b(Clip)28 b(lines)g(and/or)e(mark)n(ers)f(at)j(the)g
-(Plot)f(b)r(oundary?)340 3013 y Fi(\017)45 b Fj(ClipOp:)37
-b(Com)n(bine)27 b(Plot)g(clipping)h(limits)g(using)f(a)h(b)r(o)r(olean)
-f(OR?)340 3147 y Fi(\017)45 b Fj(Colour\(elemen)n(t\):)37
-b(Colour)26 b(index)i(for)f(a)g(Plot)g(elemen)n(t)340
-3281 y Fi(\017)45 b Fj(Dra)n(wAxes\(axis\):)36 b(Dra)n(w)27
-b(axes)f(for)h(a)g(Plot?)340 3415 y Fi(\017)45 b Fj(Dra)n(wTitle:)37
-b(Dra)n(w)26 b(a)i(title)g(for)f(a)g(Plot?)340 3549 y
-Fi(\017)45 b Fj(Escap)r(e:)36 b(Allo)n(w)27 b(c)n(hanges)g(of)g(c)n
-(haracter)f(attributes)h(within)i(strings?)340 3683 y
-Fi(\017)45 b Fj(Edge\(axis\):)36 b(Whic)n(h)28 b(edges)f(to)g(lab)r(el)
-h(in)g(a)f(Plot)340 3817 y Fi(\017)45 b Fj(F)-7 b(on)n(t\(elemen)n
-(t\):)38 b(Character)26 b(fon)n(t)h(for)g(a)h(Plot)f(elemen)n(t)340
-3951 y Fi(\017)45 b Fj(Gap\(axis\):)37 b(In)n(terv)-5
-b(al)27 b(b)r(et)n(w)n(een)g(linearly)g(spaced)g(ma)5
-b(jor)26 b(axis)h(v)-5 b(alues)340 4085 y Fi(\017)45
-b Fj(Grf:)37 b(Select)28 b(the)g(graphics)e(in)n(terface)h(to)h(use.)
-340 4219 y Fi(\017)45 b Fj(Grid:)37 b(Dra)n(w)27 b(grid)g(lines)g(for)g
-(a)h(Plot?)340 4353 y Fi(\017)45 b Fj(In)n(visible:)37
-b(Dra)n(w)27 b(graphics)f(in)i(in)n(visible)f(ink?)340
-4487 y Fi(\017)45 b Fj(Lab)r(elA)n(t\(axis\):)37 b(Where)27
-b(to)h(place)f(n)n(umerical)g(lab)r(els)g(for)g(a)g(Plot)340
-4621 y Fi(\017)45 b Fj(Lab)r(elUnits\(axis\):)37 b(Use)28
-b(axis)f(unit)h(descriptions)f(in)h(a)f(Plot?)340 4755
-y Fi(\017)45 b Fj(Lab)r(elUp\(axis\):)37 b(Dra)n(w)27
-b(n)n(umerical)g(Plot)g(lab)r(els)g(uprigh)n(t?)340 4889
-y Fi(\017)45 b Fj(Lab)r(elling:)37 b(Lab)r(el)27 b(and)h(tic)n(k)f
-(placemen)n(t)g(option)h(for)f(a)g(Plot)340 5023 y Fi(\017)45
-b Fj(LogGap\(axis\):)36 b(In)n(terv)-5 b(al)27 b(b)r(et)n(w)n(een)g
-(logarithmically)f(spaced)h(ma)5 b(jor)26 b(axis)h(v)-5
-b(alues)340 5157 y Fi(\017)45 b Fj(LogPlot\(axis\):)35
-b(Map)28 b(the)g(plot)f(on)n(to)g(the)h(screen)f(logarithmically?)340
-5291 y Fi(\017)45 b Fj(LogTic)n(ks\(axis\):)35 b(Space)27
-b(the)h(ma)5 b(jor)27 b(tic)n(k)g(marks)g(logarithmically?)340
-5425 y Fi(\017)45 b Fj(Ma)5 b(jTic)n(kLen\(axis\):)36
-b(Length)27 b(of)h(ma)5 b(jor)26 b(tic)n(k)i(marks)e(for)h(a)g(Plot)340
-5559 y Fi(\017)45 b Fj(MinTic)n(kLen\(axis\):)37 b(Length)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)340 5693
-y Fi(\017)45 b Fj(MinTic)n(k\(axis\):)37 b(Densit)n(y)27
-b(of)h(minor)f(tic)n(k)g(marks)g(for)g(a)g(Plot)p eop
-end
-%%Page: 505 515
-TeXDict begin 505 514 bop 3643 52 a FF(505)340 351 y
-Fi(\017)45 b Fj(NumLab\(axis\):)37 b(Dra)n(w)27 b(n)n(umerical)g(axis)f
-(lab)r(els)i(for)f(a)g(Plot?)340 482 y Fi(\017)45 b Fj
-(NumLabGap\(axis\):)37 b(Spacing)27 b(of)g(n)n(umerical)g(axis)g(lab)r
-(els)g(for)g(a)h(Plot)340 612 y Fi(\017)45 b Fj(Size\(elemen)n(t\):)38
-b(Character)26 b(size)h(for)g(a)g(Plot)g(elemen)n(t)340
-742 y Fi(\017)45 b Fj(St)n(yle\(elemen)n(t\):)38 b(Line)27
-b(st)n(yle)h(for)f(a)g(Plot)g(elemen)n(t)340 873 y Fi(\017)45
-b Fj(T)-7 b(extLab\(axis\):)37 b(Dra)n(w)26 b(descriptiv)n(e)h(axis)g
-(lab)r(els)g(for)g(a)h(Plot?)340 1003 y Fi(\017)45 b
-Fj(T)-7 b(extLabGap\(axis\):)36 b(Spacing)27 b(of)h(descriptiv)n(e)f
-(axis)f(lab)r(els)i(for)f(a)g(Plot)340 1133 y Fi(\017)45
-b Fj(Tic)n(kAll:)37 b(Dra)n(w)27 b(tic)n(k)g(marks)g(on)g(all)g(edges)g
-(of)h(a)f(Plot?)340 1264 y Fi(\017)45 b Fj(TitleGap:)37
-b(V)-7 b(ertical)28 b(spacing)e(for)h(a)g(Plot)g(title)340
-1394 y Fi(\017)45 b Fj(T)-7 b(ol:)37 b(Plotting)27 b(tolerance)340
-1524 y Fi(\017)45 b Fj(Width\(elemen)n(t\):)39 b(Line)27
-b(width)i(for)e(a)g(Plot)g(elemen)n(t)-2 1684 y Fd(F)-8
-b(unctions)n(:)227 1830 y Fj(In)37 b(addition)f(to)h(those)f(functions)
-g(applicable)g(to)h(all)f(F)-7 b(rameSets,)38 b(the)f(follo)n(wing)e
-(functions)i(ma)n(y)f(also)f(b)r(e)227 1929 y(applied)28
-b(to)f(all)h(Plots:)340 2187 y Fi(\017)45 b Fj(astBorder:)35
-b(Dra)n(w)27 b(a)g(b)r(order)g(around)f(v)-5 b(alid)28
-b(regions)e(of)i(a)f(Plot)340 2317 y Fi(\017)45 b Fj(astBoundingBo)n
-(x:)35 b(Returns)27 b(a)h(b)r(ounding)f(b)r(o)n(x)g(for)h(previously)e
-(dra)n(wn)g(graphics)340 2447 y Fi(\017)45 b Fj(astClip:)37
-b(Set)28 b(up)g(or)f(remo)n(v)n(e)e(clipping)j(for)f(a)g(Plot)340
-2578 y Fi(\017)45 b Fj(astCurv)n(e:)36 b(Dra)n(w)27 b(a)g(geo)r(desic)f
-(curv)n(e)340 2708 y Fi(\017)45 b Fj(astGenCurv)n(e:)36
-b(Dra)n(w)27 b(a)g(generalized)f(curv)n(e)340 2838 y
-Fi(\017)45 b Fj(astGetGrfCon)n(text:)37 b(Get)28 b(the)g(graphics)e
-(con)n(text)h(for)g(a)g(Plot)340 2969 y Fi(\017)45 b
-Fj(astGrfP)n(op:)36 b(Retriev)n(e)27 b(previously)f(sa)n(v)n(ed)g
-(graphics)g(functions)340 3099 y Fi(\017)45 b Fj(astGrfPush:)36
-b(Sa)n(v)n(e)27 b(the)h(curren)n(t)e(graphics)h(functions)340
-3229 y Fi(\017)45 b Fj(astGrfSet:)37 b(Register)27 b(a)g(graphics)f
-(routine)h(for)g(use)h(b)n(y)f(a)g(Plot)340 3360 y Fi(\017)45
-b Fj(astGrid:)37 b(Dra)n(w)26 b(a)i(set)f(of)h(lab)r(elled)f(co)r
-(ordinate)g(axes)340 3490 y Fi(\017)45 b Fj(astGridLine:)37
-b(Dra)n(w)26 b(a)i(grid)e(line)i(\(or)f(axis\))g(for)g(a)h(Plot)340
-3620 y Fi(\017)45 b Fj(astMark:)36 b(Dra)n(w)27 b(a)g(set)g(of)h(mark)n
-(ers)d(for)i(a)h(Plot)340 3751 y Fi(\017)45 b Fj(astP)n(olyCurv)n(e:)34
-b(Dra)n(w)27 b(a)g(series)g(of)g(connected)h(geo)r(desic)f(curv)n(es)
-340 3881 y Fi(\017)45 b Fj(astT)-7 b(ext:)37 b(Dra)n(w)27
-b(a)g(text)h(string)f(for)g(a)g(Plot)-2 4040 y Fd(Graphical)33
-b(Elemen)m(ts)n(:)227 4186 y Fj(The)21 b(colour)e(index,)j(c)n
-(haracter)d(fon)n(t,)j(c)n(haracter)c(size,)k(line)f(st)n(yle)f(and)g
-(line)h(width)g(used)g(for)f(plotting)g(can)h(b)r(e)g(set)227
-4286 y(indep)r(enden)n(tly)g(for)f(v)-5 b(arious)19 b(elemen)n(ts)h(of)
-g(the)g(graphical)f(output)h(pro)r(duced)g(b)n(y)g(a)g(Plot.)34
-b(The)20 b(di\013eren)n(t)g(graph-)227 4386 y(ical)h(elemen)n(ts)g(are)
-f(iden)n(ti\014ed)h(b)n(y)g(app)r(ending)f(the)i(strings)e(listed)h(b)r
-(elo)n(w)g(as)f(subscripts)g(to)h(the)g(Plot)g(attributes)227
-4485 y(Colour\(elemen)n(t\),)k(F)-7 b(on)n(t\(elemen)n(t\),)27
-b(Size\(elemen)n(t\),)f(St)n(yle\(elemen)n(t\))g(and)f(Width\(elemen)n
-(t\).)38 b(These)25 b(strings)227 4585 y(are)k(case-insensitiv)n(e)g
-(and)h(unam)n(biguous)f(abbreviations)f(ma)n(y)i(b)r(e)g(used.)44
-b(Elemen)n(ts)30 b(of)g(the)g(graphical)f(out-)227 4685
-y(put)34 b(whic)n(h)g(relate)f(to)g(individual)h(axes)f(can)g(b)r(e)h
-(referred)e(to)i(either)f(indep)r(enden)n(tly)h(\(e.g.)55
-b Ft(")p Fj(\(Grid1\))p Ft(")33 b Fj(and)227 4784 y Ft(")p
-Fj(\(Grid2\))p Ft(")27 b Fj(\))h(or)f(together)f(\(e.g.)37
-b Ft(")p Fj(\(Grid\))p Ft(")p Fj(\):)340 5041 y Fi(\017)45
-b Fj(Axes:)37 b(Axis)28 b(lines)f(dra)n(wn)g(through)g(tic)n(k)g(marks)
-f(using)i(astGrid)340 5172 y Fi(\017)45 b Fj(Axis1:)37
-b(Axis)27 b(line)h(dra)n(wn)f(through)f(tic)n(k)i(marks)e(on)i(axis)f
-(1)g(using)g(astGrid)340 5302 y Fi(\017)45 b Fj(Axis2:)37
-b(Axis)27 b(line)h(dra)n(wn)f(through)f(tic)n(k)i(marks)e(on)i(axis)f
-(2)g(using)g(astGrid)340 5432 y Fi(\017)45 b Fj(Border:)36
-b(The)27 b(Plot)g(b)r(order)g(dra)n(wn)g(using)g(astBorder)e(or)i
-(astGrid)340 5563 y Fi(\017)45 b Fj(Curv)n(es:)36 b(Geo)r(desic)27
-b(curv)n(es)g(dra)n(wn)f(using)h(astCurv)n(e,)g(astGenCurv)n(e)f(or)h
-(astP)n(olyCurv)n(e)340 5693 y Fi(\017)45 b Fj(Grid:)37
-b(Grid)28 b(lines)f(dra)n(wn)g(using)g(astGridLine)g(or)g(astGrid)p
-eop end
-%%Page: 506 516
-TeXDict begin 506 515 bop 0 52 a FF(506)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(Grid1:)37 b(Grid)27 b(lines)h(whic)n(h)f(cross)f(axis)h(1,)g(dra)n
-(wn)g(using)g(astGridLine)g(or)g(astGrid)340 484 y Fi(\017)45
-b Fj(Grid2:)37 b(Grid)27 b(lines)h(whic)n(h)f(cross)f(axis)h(2,)g(dra)n
-(wn)g(using)g(astGridLine)g(or)g(astGrid)340 618 y Fi(\017)45
-b Fj(Mark)n(ers:)35 b(Graphical)27 b(mark)n(ers)e(\(sym)n(b)r(ols\))j
-(dra)n(wn)e(using)i(astMark)340 751 y Fi(\017)45 b Fj(NumLab:)37
-b(Numerical)28 b(axis)e(lab)r(els)i(dra)n(wn)e(using)i(astGrid)340
-884 y Fi(\017)45 b Fj(NumLab1:)37 b(Numerical)27 b(lab)r(els)g(for)g
-(axis)g(1)g(dra)n(wn)g(using)g(astGrid)340 1017 y Fi(\017)45
-b Fj(NumLab2:)37 b(Numerical)27 b(lab)r(els)g(for)g(axis)g(2)g(dra)n
-(wn)g(using)g(astGrid)340 1150 y Fi(\017)45 b Fj(Strings:)37
-b(T)-7 b(ext)27 b(strings)g(dra)n(wn)g(using)g(astT)-7
-b(ext)340 1283 y Fi(\017)45 b Fj(T)-7 b(extLab:)37 b(Descriptiv)n(e)27
-b(axis)g(lab)r(els)g(dra)n(wn)g(using)g(astGrid)340 1416
-y Fi(\017)45 b Fj(T)-7 b(extLab1:)36 b(Descriptiv)n(e)27
-b(lab)r(el)h(for)f(axis)g(1)g(dra)n(wn)g(using)g(astGrid)340
-1550 y Fi(\017)45 b Fj(T)-7 b(extLab2:)36 b(Descriptiv)n(e)27
-b(lab)r(el)h(for)f(axis)g(2)g(dra)n(wn)g(using)g(astGrid)340
-1683 y Fi(\017)45 b Fj(Tic)n(ks:)36 b(Tic)n(k)28 b(marks)e(\(b)r(oth)i
-(ma)5 b(jor)27 b(and)g(minor\))g(dra)n(wn)g(using)g(astGrid)340
-1816 y Fi(\017)45 b Fj(Tic)n(ks1:)36 b(Tic)n(k)27 b(marks)f(\(b)r(oth)j
-(ma)5 b(jor)26 b(and)i(minor\))f(for)g(axis)g(1)g(dra)n(wn)g(using)g
-(astGrid)340 1949 y Fi(\017)45 b Fj(Tic)n(ks2:)36 b(Tic)n(k)27
-b(marks)f(\(b)r(oth)j(ma)5 b(jor)26 b(and)i(minor\))f(for)g(axis)g(2)g
-(dra)n(wn)g(using)g(astGrid)340 2082 y Fi(\017)45 b Fj(Title:)38
-b(The)27 b(Plot)g(title)h(dra)n(wn)f(using)g(astGrid)p
-0 2282 3780 12 v 0 2414 a Fz(Plot3D)418 b Fe(Pro)m(vide)37
-b(facilities)f(for)i(2D)h(graphical)d(output)415 b Fz(Plot3D)0
-2603 y Fd(Description:)44 b Fj(A)28 b(Plot3D)g(is)f(a)h(sp)r(ecialised)
-f(form)g(of)h(Plot)f(that)h(pro)n(vides)e(facilities)i(for)f(pro)r
-(ducing)g(3D)h(graphical)227 2703 y(output,)35 b(including)d(fully)i
-(annotated)e(3D)g(co)r(ordinate)g(grids.)50 b(The)33
-b(base)f(F)-7 b(rame)32 b(in)h(a)f(Plot3D)g(describ)r(es)g(a)227
-2803 y(3-dimensional)c Ft(")p Fj(graphical)p Ft(")f Fj(co)r(ordinate)h
-(system.)42 b(The)29 b(axes)g(of)g(this)h(co)r(ordinate)e(system)h(are)
-f(assumed)h(to)227 2902 y(b)r(e)d(righ)n(t-handed)f(\(that)h(is,)f(if)h
-(X)g(app)r(ears)f(horizon)n(tally)e(to)j(the)g(righ)n(t)e(and)i(Y)g(v)n
-(ertically)e(up)n(w)n(ards,)g(then)i(Z)g(is)227 3002
-y(out)d(of)h(the)f(screen)g(to)n(w)n(ards)e(the)i(view)n(er\),)h(and)f
-(are)f(assumed)h(to)g(b)r(e)g(equally)g(scaled)f(\(that)i(is,)g(the)g
-(same)e(units)227 3101 y(are)32 b(used)g(to)g(measure)g(p)r(ositions)g
-(on)g(eac)n(h)f(of)i(the)g(3)f(axes\).)50 b(The)33 b(upp)r(er)f(and)h
-(lo)n(w)n(er)d(b)r(ounds)j(of)f(a)g(v)n(olume)227 3201
-y(within)25 b(this)g(graphical)d(co)r(ordinate)h(system)h(is)g(sp)r
-(eci\014ed)h(when)f(the)g(Plot3D)g(is)g(created,)g(and)g(all)g
-(subsequen)n(t)227 3301 y(graphics)i(are)h Ft(")p Fj(dra)n(wn)p
-Ft(")f Fj(in)i(this)g(v)n(olume.)227 3426 y(The)h(Plot3D)g(class)f(do)r
-(es)g(not)i(itself)f(include)g(an)n(y)g(abilit)n(y)f(to)h(dra)n(w)f(on)
-h(a)g(graphics)e(device.)41 b(Instead)29 b(it)g(calls)227
-3525 y(up)r(on)21 b(function)g(in)g(an)f(externally)g(supplied)g(mo)r
-(dule)h(\(the)g Ft(")p Fj(grf3d)p Ft(")e Fj(mo)r(dule\))i(to)g(do)f
-(the)h(required)e(dra)n(wing.)33 b(A)227 3625 y(mo)r(dule)23
-b(should)g(b)r(e)g(written)g(that)g(implemen)n(ts)h(the)f(functions)g
-(of)g(the)g(grf3d)f(in)n(terface)g(using)h(the)g(facilities)g(of)227
-3724 y(a)d(sp)r(eci\014c)g(graphics)e(system)h(This)h(mo)r(dule)g
-(should)g(then)g(b)r(e)g(link)n(ed)g(in)n(to)g(the)g(application)f(so)g
-(that)h(the)g(Plot3D)227 3824 y(class)30 b(can)f(use)h(its)h(functions)
-f(\(see)g(the)h(description)f(of)g(the)g(ast)p Ft(_)p
-Fj(link)g(commands)f(for)h(details)g(of)g(ho)n(w)g(to)g(do)227
-3924 y(this\).)35 b(The)19 b(grf3d)g(in)n(terface)g(de\014nes)g(a)g
-(few)h(simple)f(functions)h(for)f(dra)n(wing)f(primitiv)n(es)h(suc)n(h)
-g(as)f(straigh)n(t)h(lines,)227 4023 y(mark)n(ers)27
-b(and)h(c)n(haracter)e(strings.)38 b(These)28 b(functions)h(all)f
-(accept)g(p)r(ositions)f(in)i(the)g(3D)f(graphics)f(co)r(ordinate)227
-4123 y(system)21 b(\(the)h(base)e(F)-7 b(rame)21 b(of)f(the)i
-(Plot3D\),)f(and)f(so)h(the)g(grf3d)f(mo)r(dule)h(m)n(ust)h(also)d
-(manage)h(the)i(pro)5 b(jection)20 b(of)227 4223 y(these)i(3D)g(co)r
-(ordinates)e(on)n(to)h(the)h(2D)g(viewing)f(surface,)h(including)g(the)
-h(c)n(hoice)d(of)i Ft(")p Fj(ey)n(e)p Ft(")p Fj(/)p Ft(")p
-Fj(camera)p Ft(")c Fj(p)r(osition,)227 4322 y(direction)25
-b(of)g(viewing,)f(etc.)37 b(The)25 b(AST)g(library)e(includes)i(a)g
-(sample)f(implemen)n(tation)h(of)g(the)g(grf3d)f(in)n(terface)227
-4422 y(based)j(on)h(the)g(PGPLOT)e(graphics)h(system)g(\(see)h(\014le)f
-(grf3d)p Ft(_)p Fj(pgplot.c\).)36 b(This)28 b(implemen)n(tation)g(also)
-e(serv)n(es)227 4521 y(to)36 b(do)r(cumen)n(t)g(the)h(grf3d)e(in)n
-(terface)g(itself)i(and)f(should)g(b)r(e)g(consulted)g(for)g(details)f
-(b)r(efore)h(writing)g(a)g(new)227 4621 y(implemen)n(tation.)227
-4746 y(The)30 b(curren)n(t)g(F)-7 b(rame)29 b(of)h(a)g(Plot3D)f
-(describ)r(es)h(a)f Ft(")p Fj(ph)n(ysical)p Ft(")g Fj(3-dimensional)f
-(co)r(ordinate)h(system,)i(whic)n(h)f(is)227 4846 y(the)36
-b(co)r(ordinate)f(system)h(in)g(whic)n(h)f(plotting)h(op)r(erations)e
-(are)h(sp)r(eci\014ed)h(when)g(in)n(v)n(oking)e(the)j(metho)r(ds)f(of)
-227 4945 y(the)f(Plot3D)e(class.)55 b(The)34 b(results)f(of)h(eac)n(h)f
-(plotting)h(op)r(eration)f(are)g(automatically)g(transformed)g(in)n(to)
-h(3D)227 5045 y(graphical)29 b(co)r(ordinates)f(b)r(efore)i(b)r(eing)g
-(plotted)g(using)g(the)g(facilities)g(of)g(the)g(grf3d)f(mo)r(dule)i
-(link)n(ed)f(in)n(to)f(the)227 5144 y(application.)227
-5269 y(Y)-7 b(ou)20 b(ma)n(y)f(select)h(di\013eren)n(t)f(ph)n(ysical)g
-(co)r(ordinate)g(systems)g(in)h(whic)n(h)f(to)h(plot)g(\(including)g
-(the)g(nativ)n(e)f(graphical)227 5369 y(co)r(ordinate)26
-b(system)h(itself)6 b(\))29 b(b)n(y)e(selecting)f(di\013eren)n(t)i(F)-7
-b(rames)26 b(as)h(the)g(curren)n(t)f(F)-7 b(rame)27 b(of)g(a)g(Plot3D,)
-g(using)f(its)227 5469 y(Curren)n(t)h(attribute.)227
-5593 y(Lik)n(e)f(an)n(y)f(F)-7 b(rameSet,)26 b(a)g(Plot3D)f(ma)n(y)h
-(also)f(b)r(e)h(used)g(as)g(a)f(F)-7 b(rame.)36 b(In)26
-b(this)h(case,)e(it)i(b)r(eha)n(v)n(es)e(lik)n(e)g(its)h(curren)n(t)227
-5693 y(F)-7 b(rame,)27 b(whic)n(h)h(describ)r(es)f(the)h(ph)n(ysical)f
-(co)r(ordinate)f(system.)p eop end
-%%Page: 507 517
-TeXDict begin 507 516 bop 3643 52 a FF(507)227 351 y
-Fj(When)28 b(used)g(as)f(a)g(Mapping,)g(a)g(Plot3D)g(describ)r(es)g
-(the)g(in)n(ter-relation)f(b)r(et)n(w)n(een)i(3D)f(graphical)f(co)r
-(ordinates)227 451 y(\(its)i(base)f(F)-7 b(rame\))28
-b(and)f(3D)h(ph)n(ysical)e(co)r(ordinates)h(\(its)h(curren)n(t)e(F)-7
-b(rame\).)227 575 y(Although)34 b(the)g(Plot3D)g(class)f(inherits)g
-(from)h(the)g(Plot)g(class,)g(sev)n(eral)e(of)i(the)g(facilities)g(of)g
-(the)g(Plot)g(class)227 674 y(are)28 b(not)h(a)n(v)-5
-b(ailable)27 b(in)i(the)h(Plot3D)e(class,)g(and)h(an)f(error)f(will)i
-(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(attempt)i(is)f(made)f(to)h(use)227
-774 y(them.)62 b(Sp)r(eci\014cally)-7 b(,)37 b(the)f(Plot3D)f(class)g
-(do)r(es)g(not)h(supp)r(ort)f(clipping)h(using)f(the)h(astClip)g
-(function.)61 b(Nor)227 874 y(do)r(es)31 b(it)h(supp)r(ort)g(the)g(sp)r
-(eci\014cation)f(of)g(graphics)f(primitiv)n(e)i(functions)g(at)f
-(run-time)g(using)h(the)g(astGrfSet,)227 973 y(astGrfP)n(op,)26
-b(astGrfPush)h(and)h(astGetGrfCon)n(text)f(functions.)0
-1121 y Fd(Constructor)32 b(F)-8 b(unction:)227 1221 y
-Fj(astPlot3D)-2 1369 y Fd(Inheritance)n(:)227 1515 y
-Fj(The)28 b(Plot3D)f(class)g(inherits)g(from)g(the)h(Plot)f(class.)-2
-1664 y Fd(A)m(ttributes)n(:)227 1810 y Fj(In)d(addition)g(to)f(those)g
-(attributes)h(common)f(to)g(all)h(Plots,)f(ev)n(ery)g(Plot3D)g(also)f
-(has)h(the)h(follo)n(wing)f(attributes:)340 2069 y Fi(\017)45
-b Fj(Norm:)37 b(Normal)26 b(v)n(ector)h(de\014ning)g(the)h(2D)g(plane)f
-(used)h(for)f(text)h(and)f(mark)n(ers)340 2200 y Fi(\017)45
-b Fj(Ro)r(otCorner:)35 b(Sp)r(eci\014es)28 b(whic)n(h)g(edges)f(of)g
-(the)h(3D)g(b)r(o)n(x)f(should)g(b)r(e)h(annotated.)227
-2361 y(Some)35 b(attributes)f(of)g(the)h(Plot)f(class)g(refer)f(to)i
-(sp)r(eci\014c)f(ph)n(ysical)g(co)r(ordinate)f(axes)h(\(e.g.)57
-b(Gap,)36 b(Lab)r(elUp,)227 2461 y(Dra)n(wAxes,)29 b(etc\).)43
-b(F)-7 b(or)29 b(a)g(basic)g(Plot,)g(the)h(axis)f(index)g(m)n(ust)h(b)r
-(e)g(1)f(or)f(2,)i(but)g(for)f(a)g(Plot3D)g(the)h(axis)f(index)227
-2560 y(can)e(b)r(e)h(1,)g(2)f(or)g(3.)227 2684 y(Certain)35
-b(Plot)h(attributes)f(are)g(ignored)f(b)n(y)i(the)g(Plot3D)f(class)g
-(\(e.g.)61 b(Edge,)37 b(Dra)n(wTitle,)g(TitleGap,)h(etc\).)227
-2784 y(Consult)28 b(the)g(Plot)f(attribute)h(do)r(cumen)n(tation)f(for)
-g(details.)-2 2932 y Fd(F)-8 b(unctions)n(:)227 3078
-y Fj(The)24 b(Plot3D)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)
-h(functions)h(b)r(ey)n(ond)e(those)h(whic)n(h)g(are)f(applicable)g(to)h
-(all)f(Plots.)227 3178 y(Note,)37 b(ho)n(w)n(ev)n(er,)d(that)h(the)g
-(follo)n(wing)e(metho)r(ds)i(inherited)g(from)f(the)h(Plot)f(class)f
-(cannot)h(b)r(e)h(used)g(with)g(a)227 3277 y(Plot3D)27
-b(and)h(will)f(rep)r(ort)g(an)h(error)d(if)j(called:)340
-3412 y Fi(\017)45 b Fj(astBoundingBo)n(x,)g(astClip,)h(astCurv)n(e,)f
-(astGenCurv)n(e,)g(astGetGrfCon)n(text,)h(astGrfP)n(op,)f(astGrf-)427
-3512 y(Push,)28 b(astGrfSet,)f(astGridLine,)g(astP)n(olyCurv)n(e.)p
-0 3709 3780 12 v 0 3841 a Fz(P)l(oin)l(tList)508 b Fe(A)39
-b(collection)e(of)h(p)s(oin)m(ts)g(in)g(a)h(F)-10 b(rame)506
-b Fz(P)l(oin)l(tList)0 4027 y Fd(Description:)44 b Fj(The)20
-b(P)n(oin)n(tList)e(class)g(implemen)n(ts)i(a)f(Region)f(whic)n(h)i
-(represen)n(ts)e(a)g(collection)h(of)g(p)r(oin)n(ts)h(in)f(a)g(F)-7
-b(rame.)0 4175 y Fd(Constructor)32 b(F)-8 b(unction:)227
-4275 y Fj(astP)n(oin)n(tList)-2 4423 y Fd(Inheritance)n(:)227
-4569 y Fj(The)28 b(P)n(oin)n(tList)e(class)h(inherits)h(from)f(the)h
-(Region)f(class.)-2 4717 y Fd(A)m(ttributes)n(:)227 4863
-y Fj(In)40 b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)f
-(Regions,)j(ev)n(ery)d(P)n(oin)n(tList)f(also)h(has)g(the)i(follo)n
-(wing)227 4963 y(attributes:)340 5222 y Fi(\017)k Fj(ListSize:)37
-b(The)28 b(n)n(um)n(b)r(er)f(of)h(p)r(ositions)f(stored)g(in)h(the)g(P)
-n(oin)n(tList)-2 5383 y Fd(F)-8 b(unctions)n(:)227 5529
-y Fj(The)35 b(P)n(oin)n(tList)e(class)g(do)r(es)h(not)h(de\014ne)f(an)n
-(y)g(new)g(functions)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g
-(applicable)g(to)g(all)227 5628 y(Regions.)p eop end
-%%Page: 508 518
-TeXDict begin 508 517 bop 0 52 a FF(508)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(P)l(olyMap)225 b Fe(Map)38 b(co)s(ordinates)f(using)h(p)s
-(olynomial)e(functions)223 b Fz(P)l(olyMap)0 644 y Fd(Description:)44
-b Fj(A)33 b(P)n(olyMap)f(is)g(a)g(form)h(of)g(Mapping)f(whic)n(h)h(p)r
-(erforms)f(a)g(general)f(p)r(olynomial)h(transformation.)227
-744 y(Eac)n(h)37 b(output)g(co)r(ordinate)g(is)g(a)g(p)r(olynomial)g
-(function)h(of)f(all)g(the)h(input)h(co)r(ordinates.)65
-b(The)37 b(co)r(e\016cien)n(ts)227 844 y(are)29 b(sp)r(eci\014ed)i
-(separately)d(for)i(eac)n(h)f(output)i(co)r(ordinate.)43
-b(The)30 b(forw)n(ard)f(and)h(in)n(v)n(erse)e(transformations)h(are)227
-943 y(de\014ned)f(indep)r(endan)n(tly)g(b)n(y)f(separate)g(sets)g(of)h
-(co)r(e\016cien)n(ts.)0 1079 y Fd(Constructor)k(F)-8
-b(unction:)227 1179 y Fj(astP)n(olyMap)-2 1314 y Fd(Inheritance)n(:)227
-1460 y Fj(The)28 b(P)n(olyMap)e(class)h(inherits)g(from)g(the)h
-(Mapping)g(class.)-2 1596 y Fd(A)m(ttributes)n(:)227
-1742 y Fj(The)34 b(P)n(olyMap)d(class)h(do)r(es)h(not)h(de\014ne)f(an)n
-(y)g(new)g(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 1842 y(Mappings.)-2 1978 y
-Fd(F)-8 b(unctions)n(:)227 2124 y Fj(The)35 b(P)n(olyMap)f(class)g(do)r
-(es)g(not)h(de\014ne)g(an)n(y)f(new)h(functions)h(b)r(ey)n(ond)e(those)
-h(whic)n(h)g(are)f(applicable)g(to)h(all)227 2223 y(Mappings.)p
-0 2395 V 0 2527 a Fz(P)l(olygon)153 b Fe(A)38 b(p)s(olygonal)d(region)h
-(within)h(a)g(2-dimensional)e(F)-10 b(rame)152 b Fz(P)l(olygon)0
-2688 y Fd(Description:)44 b Fj(The)25 b(P)n(olygon)e(class)g(implemen)n
-(ts)i(a)f(p)r(olygonal)g(area,)f(de\014ned)i(b)n(y)g(a)f(collection)g
-(of)h(v)n(ertices,)f(within)227 2788 y(a)k(2-dimensional)f(F)-7
-b(rame.)39 b(The)29 b(v)n(ertices)e(are)h(connected)g(together)f(b)n(y)
-i(geo)r(desic)e(curv)n(es)g(within)i(the)g(encap-)227
-2887 y(sulated)g(F)-7 b(rame.)42 b(F)-7 b(or)28 b(instance,)i(if)g(the)
-f(encapsulated)g(F)-7 b(rame)29 b(is)g(a)g(simple)g(F)-7
-b(rame)29 b(then)h(the)f(geo)r(desics)f(will)227 2987
-y(b)r(e)34 b(straigh)n(t)d(lines,)j(but)g(if)f(the)g(F)-7
-b(rame)33 b(is)f(a)h(SkyF)-7 b(rame)32 b(then)h(the)g(geo)r(desics)f
-(will)h(b)r(e)g(great)f(circles.)52 b(Note,)227 3087
-y(the)31 b(v)n(ertices)e(m)n(ust)h(b)r(e)h(supplied)g(in)f(an)g(order)f
-(suc)n(h)h(that)g(the)h(inside)f(of)g(the)h(p)r(olygon)e(is)h(to)g(the)
-h(left)g(of)f(the)227 3186 y(b)r(oundary)c(as)g(the)h(v)n(ertices)f
-(are)f(tra)n(v)n(ersed.)35 b(Supplying)27 b(them)g(in)g(the)g(rev)n
-(erse)e(order)g(will)i(e\013ectiv)n(ely)f(negate)227
-3286 y(the)i(p)r(olygon.)227 3404 y(Within)33 b(a)e(SkyF)-7
-b(rame,)32 b(neigh)n(b)r(ouring)e(v)n(ertices)g(are)h(alw)n(a)n(ys)e
-(joined)j(using)f(the)h(shortest)e(path.)49 b(Th)n(us)31
-b(if)h(an)227 3503 y(edge)f(of)g(180)f(degrees)g(or)g(more)g(in)i
-(length)f(is)g(required,)g(it)h(should)e(b)r(e)i(split)g(in)n(to)e
-(section)h(eac)n(h)g(of)g(whic)n(h)g(is)227 3603 y(less)k(than)h(180)e
-(degrees.)59 b(The)35 b(closed)g(path)g(joining)g(all)h(the)f(v)n
-(ertices)g(in)g(order)f(will)i(divide)f(the)h(celestial)227
-3702 y(sphere)f(in)n(to)h(t)n(w)n(o)f(disjoin)n(t)h(regions.)60
-b(The)36 b(inside)g(of)g(the)g(p)r(olygon)f(is)g(the)h(region)f(whic)n
-(h)h(is)f(circled)h(in)g(an)227 3802 y(an)n(ti-clo)r(c)n(kwise)25
-b(manner)h(\(when)i(view)n(ed)e(from)g(the)h(inside)g(of)g(the)g
-(celestial)f(sphere\))h(when)g(mo)n(ving)e(through)227
-3902 y(the)h(list)f(of)g(v)n(ertices)f(in)i(the)f(order)f(in)h(whic)n
-(h)g(they)h(w)n(ere)e(supplied)h(when)h(the)f(P)n(olygon)e(w)n(as)h
-(created)h(\(i.e.)36 b(the)227 4001 y(inside)28 b(is)f(to)h(the)g(left)
-g(of)g(the)g(b)r(oundary)f(when)g(mo)n(ving)g(through)g(the)h(v)n
-(ertices)e(in)i(the)g(order)e(supplied\).)0 4137 y Fd(Constructor)32
-b(F)-8 b(unction:)227 4237 y Fj(astP)n(olygon)-2 4372
-y Fd(Inheritance)n(:)227 4518 y Fj(The)28 b(P)n(olygon)d(class)i
-(inherits)g(from)h(the)g(Region)f(class.)-2 4654 y Fd(A)m(ttributes)n
-(:)227 4800 y Fj(The)36 b(P)n(olygon)d(class)i(do)r(es)g(not)h
-(de\014ne)f(an)n(y)g(new)h(attributes)f(b)r(ey)n(ond)g(those)g(whic)n
-(h)h(are)e(applicable)h(to)h(all)227 4900 y(Regions.)-2
-5036 y Fd(F)-8 b(unctions)n(:)227 5182 y Fj(In)23 b(addition)g(to)f
-(those)h(functions)g(applicable)f(to)h(all)f(Regions,)h(the)g(follo)n
-(wing)f(functions)h(ma)n(y)f(also)f(b)r(e)j(applied)227
-5281 y(to)k(all)f(P)n(olygons:)340 5522 y Fi(\017)45
-b Fj(astDo)n(wnsize:)36 b(Reduce)28 b(the)g(n)n(um)n(b)r(er)f(of)h(v)n
-(ertices)e(in)i(a)f(P)n(olygon.)340 5641 y Fi(\017)45
-b Fj(astOutline)p Fl(<)p Fj(X)p Fl(>)p Fj(:)36 b(Create)27
-b(a)g(P)n(olygon)f(outlining)h(v)-5 b(alues)27 b(in)h(a)f(pixel)h(arra)
-n(y)p eop end
-%%Page: 509 519
-TeXDict begin 509 518 bop 3643 52 a FF(509)p 0 351 3780
-12 v 0 483 a Fz(Prism)320 b Fe(An)39 b(extrusion)e(of)i(a)f(region)f
-(in)m(to)h(higher)g(dimensions)318 b Fz(Prism)0 695 y
-Fd(Description:)44 b Fj(A)26 b(Prism)e(is)h(a)g(Region)f(whic)n(h)h
-(represen)n(ts)f(an)h(extrusion)f(of)h(an)g(existing)g(Region)f(in)n
-(to)h(one)g(or)f(more)227 794 y(orthogonal)32 b(dimensions)h(\(sp)r
-(eci\014ed)i(b)n(y)e(another)g(Region\).)55 b(If)34 b(the)g(Region)g
-(to)f(b)r(e)h(extruded)g(has)f(N)h(axes,)227 894 y(and)25
-b(the)g(Region)f(de\014ning)h(the)g(extrusion)f(has)g(M)h(axes,)g(then)
-g(the)g(resulting)g(Prism)e(will)i(ha)n(v)n(e)f(\(M+N\))h(axes.)227
-993 y(A)i(p)r(oin)n(t)g(is)g(inside)f(the)h(Prism)f(if)h(the)g(\014rst)
-g(N)g(axis)f(v)-5 b(alues)26 b(corresp)r(ond)f(to)i(a)f(p)r(oin)n(t)h
-(inside)f(the)i(Region)e(b)r(eing)227 1093 y(extruded,)34
-b(and)e(the)h(remaining)e(M)i(axis)e(v)-5 b(alues)32
-b(corresp)r(ond)f(to)h(a)g(p)r(oin)n(t)h(inside)f(the)h(Region)f
-(de\014ning)g(the)227 1193 y(extrusion.)227 1329 y(As)h(an)g(example,)h
-(a)f(cylinder)g(can)f(b)r(e)i(represen)n(ted)e(b)n(y)h(extruding)f(an)h
-(existing)g(Circle,)h(using)e(an)h(In)n(terv)-5 b(al)227
-1428 y(to)31 b(de\014ne)g(the)g(extrusion.)46 b(Ih)31
-b(this)g(case,)g(the)g(In)n(terv)-5 b(al)30 b(w)n(ould)h(ha)n(v)n(e)e
-(a)i(single)f(axis)g(and)h(w)n(ould)f(sp)r(ecify)h(the)227
-1528 y(upp)r(er)d(and)f(lo)n(w)n(er)f(limits)j(of)e(the)h(cylinder)f
-(along)g(its)g(length.)0 1700 y Fd(Constructor)32 b(F)-8
-b(unction:)227 1800 y Fj(astPrism)-2 1972 y Fd(Inheritance)n(:)227
-2118 y Fj(The)28 b(Prism)f(class)f(inherits)i(from)f(the)h(Region)f
-(class.)-2 2290 y Fd(A)m(ttributes)n(:)227 2436 y Fj(The)19
-b(Prism)g(class)f(do)r(es)g(not)h(de\014ne)h(an)n(y)e(new)h(attributes)
-g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)f
-(Regions.)-2 2609 y Fd(F)-8 b(unctions)n(:)227 2755 y
-Fj(The)19 b(Prism)e(class)h(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i
-(functions)g(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g(applicable)g(to)g
-(all)h(Regions.)p 0 2977 V 0 3107 a Fz(RateMap)844 3108
-y Fe(Mapping)38 b(whic)m(h)g(represen)m(ts)f(di\013eren)m(tiation)3232
-3107 y Fz(RateMap)0 3320 y Fd(Description:)44 b Fj(A)37
-b(RateMap)e(is)h(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e(a)i(single)f
-(elemen)n(t)h(of)g(the)g(Jacobian)e(matrix)i(of)227 3420
-y(another)h(Mapping.)67 b(The)38 b(Mapping)g(for)f(whic)n(h)h(the)g
-(Jacobian)e(is)i(required)f(is)g(sp)r(eci\014ed)h(when)g(the)h(new)227
-3519 y(RateMap)27 b(is)h(created,)f(and)g(is)h(referred)e(to)i(as)f
-(the)h Ft(")p Fj(encapsulated)e(Mapping)p Ft(")h Fj(b)r(elo)n(w.)227
-3655 y(The)39 b(n)n(um)n(b)r(er)f(of)g(inputs)h(to)f(a)g(RateMap)g(is)g
-(the)h(same)f(as)f(the)i(n)n(um)n(b)r(er)f(of)h(inputs)f(to)h(its)f
-(encapsulated)227 3755 y(Mapping.)e(The)27 b(n)n(um)n(b)r(er)f(of)h
-(outputs)g(from)f(a)g(RateMap)g(is)h(alw)n(a)n(ys)e(one.)36
-b(This)26 b(one)g(output)i(equals)d(the)i(rate)227 3854
-y(of)c(c)n(hange)f(of)h(a)g(sp)r(eci\014ed)g(output)h(of)f(the)g
-(encapsulated)g(Mapping)f(with)i(resp)r(ect)f(to)f(a)h(sp)r(eci\014ed)g
-(input)h(of)f(the)227 3954 y(encapsulated)k(Mapping)g(\(the)i(input)f
-(and)g(output)g(to)f(use)h(are)e(sp)r(eci\014ed)i(when)g(the)g(RateMap)
-f(is)h(created\).)227 4090 y(A)g(RateMap)f(whic)n(h)h(has)e(not)i(b)r
-(een)g(in)n(v)n(erted)e(do)r(es)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f
-(transformation.)35 b(If)28 b(a)f(RateMap)227 4190 y(has)g(b)r(een)h
-(in)n(v)n(erted)f(then)h(it)g(will)g(de\014ne)g(an)f(in)n(v)n(erse)f
-(transformation)g(but)j(not)e(a)g(forw)n(ard)f(transformation.)0
-4362 y Fd(Constructor)32 b(F)-8 b(unction:)227 4461 y
-Fj(astRateMap)-2 4634 y Fd(Inheritance)n(:)227 4780 y
-Fj(The)28 b(RateMap)f(class)g(inherits)g(from)h(the)g(Mapping)f(class.)
--2 4952 y Fd(A)m(ttributes)n(:)227 5098 y Fj(The)33 b(RateMap)f(class)g
-(do)r(es)g(not)h(de\014ne)g(an)n(y)e(new)i(attributes)g(b)r(ey)n(ond)f
-(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227 5198
-y(Mappings.)-2 5370 y Fd(F)-8 b(unctions)n(:)227 5516
-y Fj(The)35 b(RateMap)f(class)f(do)r(es)h(not)g(de\014ne)h(an)n(y)e
-(new)i(functions)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e(applicable)h
-(to)g(all)227 5616 y(Mappings.)p eop end
-%%Page: 510 520
-TeXDict begin 510 519 bop 0 52 a FF(510)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)p 0 351 3780 12 v 0 483
-a Fz(Region)269 b Fe(Represen)m(ts)39 b(a)f(region)g(within)f(a)h(co)s
-(ordinate)f(system)267 b Fz(Region)0 675 y Fd(Description:)44
-b Fj(This)25 b(class)e(pro)n(vides)g(the)h(basic)g(facilities)g(for)g
-(describing)g(a)f(region)g(within)i(a)f(sp)r(eci\014ed)h(co)r(ordinate)
-227 774 y(system.)37 b(Ho)n(w)n(ev)n(er,)26 b(the)h(Region)g(class)g
-(do)r(es)g(not)h(ha)n(v)n(e)e(a)h(constructor)f(function)i(of)g(its)f
-(o)n(wn,)g(as)g(it)h(is)g(simply)227 874 y(a)i(con)n(tainer)e(class)h
-(for)h(a)f(family)h(of)g(sp)r(ecialised)f(sub-classes)f(suc)n(h)i(as)f
-(Circle,)h(Bo)n(x,)g(etc,)g(whic)n(h)g(implemen)n(t)227
-973 y(Regions)d(with)h(particular)e(shap)r(es.)227 1099
-y(All)j(sub-classes)e(of)i(Region)f(require)g(a)g(F)-7
-b(rame)28 b(to)h(b)r(e)g(supplied)g(when)g(the)g(Region)f(is)g
-(created.)39 b(This)29 b(F)-7 b(rame)227 1199 y(describ)r(es)25
-b(the)h(co)r(ordinate)e(system)i(in)g(whic)n(h)f(the)h(Region)f(is)g
-(de\014ned,)i(and)e(is)g(referred)g(to)g(as)g(the)h Ft(")p
-Fj(encapsu-)227 1299 y(lated)g(F)-7 b(rame)p Ft(")24
-b Fj(b)r(elo)n(w.)36 b(Constructors)23 b(will)j(also)e(t)n(ypically)h
-(required)f(one)h(or)g(more)f(p)r(ositions)h(to)h(b)r(e)f(supplied)227
-1398 y(whic)n(h)32 b(de\014ne)g(the)g(lo)r(cation)g(and)f(exten)n(t)h
-(of)g(the)g(region.)48 b(These)32 b(p)r(ositions)f(m)n(ust)h(b)r(e)h
-(supplied)f(within)g(the)227 1498 y(encapsulated)27 b(F)-7
-b(rame.)227 1624 y(The)36 b(Region)g(class)f(inherits)g(from)h(the)g(F)
--7 b(rame)36 b(class,)h(and)f(so)f(a)h(Region)f(can)g(b)r(e)i(supplied)
-f(where-ev)n(er)e(a)227 1723 y(F)-7 b(rame)27 b(is)h(exp)r(ected.)37
-b(In)28 b(these)g(cases,)e(supplying)i(a)f(Region)g(is)h(equiv)-5
-b(alen)n(t)27 b(to)g(supplying)h(a)f(reference)g(to)g(its)227
-1823 y(encapsulated)33 b(F)-7 b(rame.)53 b(Th)n(us)32
-b(all)h(the)h(metho)r(ds)f(of)g(the)h(F)-7 b(rame)32
-b(class)g(can)h(b)r(e)h(used)f(on)g(the)g(Region)f(class.)227
-1923 y(F)-7 b(or)27 b(instance,)h(the)g(astF)-7 b(ormat)26
-b(function)i(ma)n(y)f(b)r(e)h(used)g(on)f(a)g(Region)g(to)h(format)f
-(an)g(axis)g(v)-5 b(alue.)227 2049 y(In)26 b(addition,)h(since)f(F)-7
-b(rame)25 b(inherits)h(from)g(Mapping,)g(a)f(Region)h(is)g(also)f(a)g
-(sort)g(of)h(Mapping.)36 b(T)-7 b(ransforming)227 2148
-y(p)r(ositions)28 b(b)n(y)g(supplying)h(a)f(Region)g(to)g(one)g(of)g
-(the)h(astT)-7 b(ran)p Fl(<)p Fj(X)p Fl(>)27 b Fj(functions)i(is)f(the)
-h(w)n(a)n(y)e(to)i(determine)f(if)h(a)227 2248 y(giv)n(en)24
-b(p)r(osition)h(is)g(inside)g(or)f(outside)g(the)i(Region.)35
-b(When)25 b(used)g(as)g(a)f(Mapping,)h(most)g(classes)e(of)i(F)-7
-b(rame)25 b(are)227 2348 y(equiv)-5 b(alen)n(t)26 b(to)g(a)g(UnitMap.)
-37 b(Ho)n(w)n(ev)n(er,)25 b(the)i(Region)e(class)h(mo)r(di\014es)g
-(this)g(b)r(eha)n(viour)f(so)h(that)h(a)f(Region)f(acts)227
-2447 y(lik)n(e)e(a)f(UnitMap)i(only)e(for)h(input)g(p)r(ositions)g
-(whic)n(h)g(are)e(within)j(the)f(area)f(represen)n(ted)f(b)n(y)i(the)g
-(Region.)35 b(Input)227 2547 y(p)r(ositions)c(whic)n(h)f(are)g(outside)
-g(the)i(area)d(pro)r(duce)h(bad)h(output)g(v)-5 b(alues)30
-b(\(i.e.)47 b(the)31 b(output)g(v)-5 b(alues)30 b(are)g(equal)227
-2646 y(to)e(AST)p Ft(__)p Fj(BAD\).)h(This)f(b)r(eha)n(viour)f(is)h
-(the)g(same)f(for)h(b)r(oth)g(the)h(forw)n(ard)d(and)i(the)h(in)n(v)n
-(erse)d(transformation.)227 2746 y(In)39 b(this)f(sense)g(the)g
-Ft(")p Fj(in)n(v)n(erse)e(transformation)p Ft(")h Fj(is)h(not)g(a)f
-(true)h(in)n(v)n(erse)f(of)h(the)h(forw)n(ard)d(transformation,)227
-2846 y(since)d(applying)f(the)h(forw)n(ard)e(transformation)g(to)i(a)f
-(p)r(oin)n(t)h(outside)g(the)g(Region,)g(and)g(then)g(applying)f(the)
-227 2945 y(in)n(v)n(erse)j(transformation)g(results,)i(in)g(a)f(set)g
-(of)g(AST)p Ft(__)p Fj(BAD)g(axis)g(v)-5 b(alues)36 b(rather)f(than)h
-(the)h(original)d(axis)227 3045 y(v)-5 b(alues.)37 b(If)27
-b(required,)f(the)h(astRemo)n(v)n(eRegions)d(function)j(can)g(b)r(e)g
-(used)g(to)f(remo)n(v)n(e)f(the)i Ft(")p Fj(masking)p
-Ft(")e Fj(e\013ect)j(of)227 3145 y(an)n(y)j(Regions)f(con)n(tained)g
-(within)i(a)f(comp)r(ound)g(Mapping)g(or)f(F)-7 b(rameSet.)47
-b(It)31 b(do)r(es)g(this)h(b)n(y)f(replacing)e(eac)n(h)227
-3244 y(Region)35 b(with)g(a)g(UnitMap)h(or)e(equiv)-5
-b(alen)n(t)35 b(F)-7 b(rame)35 b(\(dep)r(ending)h(on)f(the)g(con)n
-(text)g(in)h(whic)n(h)f(the)g(Region)g(is)227 3344 y(used\).)227
-3470 y(If)d(the)f(co)r(ordinate)f(system)h(represen)n(ted)e(b)n(y)i
-(the)g(Region)g(is)g(c)n(hanged)e(\(b)n(y)i(c)n(hanging)f(the)h(v)-5
-b(alues)31 b(of)g(one)f(or)227 3569 y(more)23 b(of)g(the)h(attribute)g
-(whic)n(h)g(the)g(Region)e(inherits)i(from)f(its)h(encapsulated)f(F)-7
-b(rame\),)24 b(the)g(area)e(represen)n(ted)227 3669 y(b)n(y)f(the)h
-(Region)f(is)g(mapp)r(ed)h(in)n(to)f(the)g(new)h(co)r(ordinate)e
-(system.)35 b(F)-7 b(or)20 b(instance,)j(let's)e(sa)n(y)f(a)h(Circle)g
-(\(a)g(sub)r(class)227 3769 y(of)32 b(Region\))g(is)f(created,)i(a)e
-(SkyF)-7 b(rame)31 b(b)r(eing)h(supplied)h(to)e(the)i(constructor)d(so)
-h(that)i(the)f(Circle)f(describ)r(es)227 3868 y(a)g(circular)f(area)g
-(on)h(the)g(sky)g(in)h(FK4)e(equatorial)g(co)r(ordinates.)46
-b(Since)32 b(Region)e(inherits)i(from)f(F)-7 b(rame,)31
-b(the)227 3968 y(Circle)23 b(will)h(ha)n(v)n(e)f(a)g(System)h
-(attribute)f(and)h(this)g(attribute)g(will)f(b)r(e)h(set)g(to)g
-Ft(")p Fj(FK4)p Ft(")p Fj(.)34 b(If)24 b(the)g(System)f(attribute)227
-4068 y(of)29 b(the)g(Region)f(is)g(then)h(c)n(hanged)f(from)g(FK4)g(to)
-g(FK5,)h(the)g(circular)e(area)g(represen)n(ted)g(b)n(y)i(the)g(Region)
-e(will)227 4167 y(automatically)34 b(b)r(e)h(mapp)r(ed)g(from)f(the)h
-(FK4)f(system)g(in)n(to)h(the)g(FK5)f(system.)57 b(In)35
-b(general,)g(c)n(hanging)e(the)227 4267 y(co)r(ordinate)26
-b(system)h(in)h(this)f(w)n(a)n(y)f(ma)n(y)g(result)h(in)g(the)h(region)
-e(c)n(hanging)g(shap)r(e)h(-)f(for)h(instance,)g(a)g(circle)f(ma)n(y)
-227 4366 y(c)n(hange)d(in)n(to)h(an)h(ellipse)f(if)h(the)f
-(transformation)f(from)h(the)h(old)f(to)g(the)h(new)f(co)r(ordinate)f
-(system)h(is)g(linear)g(but)227 4466 y(with)g(di\013eren)n(t)f(scales)f
-(on)h(eac)n(h)g(axis.)34 b(Th)n(us)23 b(the)h(sp)r(eci\014c)f(class)f
-(of)h(a)g(Region)g(cannot)f(b)r(e)i(used)f(as)g(a)f(guaran)n(tee)227
-4566 y(of)29 b(the)f(shap)r(e)g(in)h(an)n(y)e(particular)g(co)r
-(ordinate)g(system.)39 b(If)29 b(the)f(astSimplify)h(function)g(is)f
-(used)g(on)g(a)g(Region,)227 4665 y(it)e(will)f(endea)n(v)n(our)e(to)h
-(return)h(a)f(new)h(Region)f(of)h(a)g(sub-class)e(whic)n(h)i
-(accurately)f(describ)r(es)g(the)h(shap)r(e)g(in)g(the)227
-4765 y(curren)n(t)i(co)r(ordinate)f(system)i(of)f(the)h(Region)f(\(but)
-i(this)f(ma)n(y)e(not)i(alw)n(a)n(ys)e(b)r(e)i(p)r(ossible\).)227
-4891 y(It)e(is)f(p)r(ossible)g(to)g(negate)f(an)h(existing)g(Region)f
-(so)h(that)g(it)h(represen)n(ts)e(all)g(areas)g(of)h(the)h
-(encapsulated)e(F)-7 b(rame)227 4990 y(except)28 b(for)f(the)h(area)e
-(sp)r(eci\014ed)i(when)g(the)g(Region)f(w)n(as)f(created.)0
-5143 y Fd(Constructor)32 b(F)-8 b(unction:)227 5242 y
-Fj(None.)-2 5395 y Fd(Inheritance)n(:)227 5541 y Fj(The)28
-b(Region)f(class)f(inherits)i(from)f(the)h(F)-7 b(rame)27
-b(class.)-2 5693 y Fd(A)m(ttributes)n(:)p eop end
-%%Page: 511 521
-TeXDict begin 511 520 bop 3643 52 a FF(511)227 351 y
-Fj(In)20 b(addition)f(to)g(those)f(attributes)h(common)g(to)g(all)g(F)
--7 b(rames,)20 b(ev)n(ery)e(Region)g(also)g(has)h(the)h(follo)n(wing)e
-(attributes:)340 619 y Fi(\017)45 b Fj(Adaptiv)n(e:)37
-b(Should)28 b(the)g(area)e(adapt)h(to)h(c)n(hanges)e(in)i(the)g(co)r
-(ordinate)e(system?)340 754 y Fi(\017)45 b Fj(Negated:)37
-b(Has)27 b(the)h(original)e(region)g(b)r(een)i(negated?)340
-890 y Fi(\017)45 b Fj(Closed:)37 b(Should)27 b(the)h(b)r(oundary)f(b)r
-(e)h(considered)f(to)g(b)r(e)h(inside)g(the)g(region?)340
-1025 y Fi(\017)45 b Fj(MeshSize:)37 b(Num)n(b)r(er)28
-b(of)f(p)r(oin)n(ts)h(used)g(to)f(create)g(a)g(mesh)g(co)n(v)n(ering)f
-(the)i(Region)340 1160 y Fi(\017)45 b Fj(FillF)-7 b(actor:)37
-b(F)-7 b(raction)26 b(of)i(the)g(Region)f(whic)n(h)g(is)h(of)f(in)n
-(terest)340 1295 y Fi(\017)45 b Fj(Bounded:)37 b(Is)27
-b(the)h(Region)f(b)r(ounded?)227 1462 y(Ev)n(ery)21 b(Region)g(also)g
-(inherits)h(an)n(y)g(further)g(attributes)g(that)g(b)r(elong)g(to)g
-(the)h(encapsulated)e(F)-7 b(rame,)23 b(regardless)227
-1561 y(of)37 b(that)h(F)-7 b(rame's)36 b(class.)65 b(\(F)-7
-b(or)37 b(example,)i(the)f(Equino)n(x)e(attribute,)k(de\014ned)d(b)n(y)
-g(the)h(SkyF)-7 b(rame)36 b(class,)j(is)227 1661 y(inherited)28
-b(b)n(y)f(an)n(y)g(Region)g(whic)n(h)h(represen)n(ts)e(a)h(SkyF)-7
-b(rame.\))-2 1815 y Fd(F)f(unctions)n(:)227 1961 y Fj(In)25
-b(addition)f(to)g(those)g(functions)h(applicable)e(to)h(all)g(F)-7
-b(rames,)25 b(the)f(follo)n(wing)g(functions)g(ma)n(y)g(also)f(b)r(e)i
-(applied)227 2061 y(to)j(all)f(Regions:)340 2329 y Fi(\017)45
-b Fj(astGetRegionBounds:)36 b(Get)28 b(the)g(b)r(ounds)f(of)h(a)f
-(Region)340 2464 y Fi(\017)45 b Fj(astGetRegionF)-7 b(rame:)36
-b(Get)28 b(a)f(cop)n(y)g(of)g(the)h(F)-7 b(rame)27 b(represen)n(t)g(b)n
-(y)g(a)g(Region)340 2599 y Fi(\017)45 b Fj(astGetRegionP)n(oin)n(ts:)35
-b(Get)28 b(the)g(p)r(ositions)f(that)h(de\014ne)g(a)f(Region)340
-2734 y Fi(\017)45 b Fj(astGetUnc:)37 b(Obtain)28 b(uncertain)n(t)n(y)e
-(information)h(from)h(a)f(Region)340 2870 y Fi(\017)45
-b Fj(astMapRegion:)36 b(T)-7 b(ransform)26 b(a)h(Region)g(in)n(to)g(a)h
-(new)f(co)r(ordinate)g(system)340 3005 y Fi(\017)45 b
-Fj(astNegate:)36 b(T)-7 b(oggle)26 b(the)i(v)-5 b(alue)28
-b(of)f(the)h(Negated)g(attribute)340 3140 y Fi(\017)45
-b Fj(astOv)n(erlap:)35 b(Determines)28 b(the)g(nature)f(of)g(the)h(o)n
-(v)n(erlap)e(b)r(et)n(w)n(een)h(t)n(w)n(o)g(Regions)340
-3275 y Fi(\017)45 b Fj(astMask)p Fl(<)p Fj(X)p Fl(>)p
-Fj(:)35 b(Mask)27 b(a)g(region)g(of)g(a)g(data)h(grid)340
-3410 y Fi(\017)45 b Fj(astSetUnc:)37 b(Asso)r(ciate)27
-b(a)g(new)h(uncertain)n(t)n(y)f(with)h(a)f(Region)340
-3545 y Fi(\017)45 b Fj(astSho)n(wMesh:)36 b(Displa)n(y)27
-b(a)g(mesh)h(of)g(p)r(oin)n(ts)f(on)g(the)h(surface)f(of)h(a)f(Region)p
-0 3749 3780 12 v 0 3881 a Fz(SelectorMap)298 b Fe(A)38
-b(Mapping)g(that)g(lo)s(cates)g(p)s(ositions)889 3996
-y(within)c(one)j(of)f(a)g(set)g(of)g(alternate)e(Regions)3043
-3881 y Fz(SelectorMap)0 4189 y Fd(Description:)44 b Fj(A)26
-b(SelectorMap)e(is)h(a)g(Mapping)g(that)h(iden)n(ti\014es)f(whic)n(h)g
-(Region)g(con)n(tains)f(a)h(giv)n(en)g(input)h(p)r(osition.)227
-4316 y(A)40 b(SelectorMap)e(encapsulates)h(a)g(n)n(um)n(b)r(er)g(of)g
-(Regions)f(that)i(all)f(ha)n(v)n(e)f(the)i(same)f(n)n(um)n(b)r(er)g(of)
-g(axes)g(and)227 4416 y(represen)n(t)31 b(the)h(same)f(co)r(ordinate)g
-(F)-7 b(rame.)49 b(The)32 b(n)n(um)n(b)r(er)g(of)f(inputs)i(\(Nin)f
-(attribute\))h(of)e(the)i(SelectorMap)227 4515 y(equals)24
-b(the)h(n)n(um)n(b)r(er)f(of)g(axes)f(spanned)h(b)n(y)g(one)g(of)h(the)
-f(encapsulated)g(Region.)35 b(All)25 b(SelectorMaps)e(ha)n(v)n(e)g
-(only)227 4615 y(a)k(single)h(output.)37 b(SelectorMaps)26
-b(do)i(not)f(de\014ne)h(an)f(in)n(v)n(erse)f(transformation.)227
-4742 y(F)-7 b(or)36 b(eac)n(h)f(input)i(p)r(osition,)h(the)e(forw)n
-(ard)e(transformation)h(of)h(a)f(SelectorMap)g(searc)n(hes)f(through)h
-(the)i(en-)227 4841 y(capsulated)d(Regions)f(\(in)i(the)g(order)e
-(supplied)i(when)f(the)h(SelectorMap)e(w)n(as)h(created\))f(un)n(til)i
-(a)f(Region)g(is)227 4941 y(found)27 b(whic)n(h)g(con)n(tains)f(the)h
-(input)g(p)r(osition.)36 b(The)27 b(index)g(asso)r(ciated)e(with)i
-(this)g(Region)f(is)h(returned)f(as)g(the)227 5041 y(SelectorMap)h
-(output)h(v)-5 b(alue)27 b(\(the)h(index)g(v)-5 b(alue)27
-b(is)h(the)g(p)r(osition)f(of)h(the)f(Region)g(within)h(the)g(list)g
-(of)g(Regions)227 5140 y(supplied)c(when)g(the)g(SelectorMap)f(w)n(as)g
-(created,)g(starting)g(at)h(1)f(for)g(the)h(\014rst)g(Region\).)35
-b(If)24 b(an)f(input)i(p)r(osition)227 5240 y(is)j(not)f(con)n(tained)g
-(within)i(an)n(y)d(Region,)h(a)h(v)-5 b(alue)27 b(of)h(zero)e(is)i
-(returned)f(b)n(y)g(the)h(forw)n(ard)e(transformation.)227
-5367 y(If)35 b(a)e(comp)r(ound)h(Mapping)g(con)n(tains)f(a)h
-(SelectorMap)f(in)h(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)g
-(the)g(com)n(bination)227 5467 y(of)29 b(the)f(t)n(w)n(o)g(adjacen)n(t)
-g(SelectorMaps)f(will)h(b)r(e)h(replaced)e(b)n(y)h(a)g(UnitMap)h(when)g
-(the)f(comp)r(ound)h(Mapping)f(is)227 5566 y(simpli\014ed)g(using)g
-(astSimplify)-7 b(.)227 5693 y(In)28 b(practice,)f(SelectorMaps)f(are)h
-(often)h(used)f(in)h(conjunction)g(with)g(Switc)n(hMaps.)p
-eop end
-%%Page: 512 522
-TeXDict begin 512 521 bop 0 52 a FF(512)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fd(Constructor)j(F)-8
-b(unction:)227 451 y Fj(astSelectorMap)-2 600 y Fd(Inheritance)n(:)227
-746 y Fj(The)28 b(SelectorMap)f(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 895 y Fd(A)m(ttributes)n(:)227 1041
-y Fj(The)e(SelectorMap)f(class)g(do)r(es)h(not)g(de\014ne)g(an)n(y)f
-(new)h(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)
-g(to)h(all)227 1141 y(Mappings.)-2 1290 y Fd(F)-8 b(unctions)n(:)227
-1436 y Fj(The)27 b(SelectorMap)f(class)f(do)r(es)i(not)g(de\014ne)f(an)
-n(y)g(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)g(are)g
-(applicable)g(to)h(all)227 1535 y(Mappings.)p 0 1734
-3780 12 v 0 1865 a Fz(ShiftMap)306 b Fe(Add)39 b(a)f(constan)m(t)f(v)-7
-b(alue)39 b(to)f(eac)m(h)g(co)s(ordinate)304 b Fz(ShiftMap)0
-2053 y Fd(Description:)44 b Fj(A)28 b(ShiftMap)h(is)e(a)g(linear)g
-(Mapping)g(whic)n(h)h(shifts)g(eac)n(h)f(axis)g(b)n(y)g(a)g(sp)r
-(eci\014ed)h(constan)n(t)f(v)-5 b(alue.)0 2202 y Fd(Constructor)32
-b(F)-8 b(unction:)227 2302 y Fj(astShiftMap)-2 2451 y
-Fd(Inheritance)n(:)227 2597 y Fj(The)28 b(ShiftMap)g(class)f(inherits)g
-(from)h(the)g(Mapping)f(class.)-2 2746 y Fd(A)m(ttributes)n(:)227
-2892 y Fj(The)33 b(ShiftMap)g(class)f(do)r(es)g(not)g(de\014ne)h(an)n
-(y)f(new)h(attributes)f(b)r(ey)n(ond)g(those)g(whic)n(h)h(are)e
-(applicable)h(to)h(all)227 2992 y(Mappings.)-2 3141 y
-Fd(F)-8 b(unctions)n(:)227 3287 y Fj(The)35 b(ShiftMap)g(class)e(do)r
-(es)h(not)g(de\014ne)h(an)n(y)e(new)h(functions)h(b)r(ey)n(ond)f(those)
-g(whic)n(h)g(are)f(applicable)h(to)g(all)227 3387 y(Mappings.)p
-0 3585 V 0 3717 a Fz(SkyAxis)619 b Fe(Store)38 b(celestial)e(axis)j
-(information)615 b Fz(SkyAxis)0 3905 y Fd(Description:)44
-b Fj(The)c(SkyAxis)f(class)g(is)h(used)f(to)h(store)f(information)f
-(asso)r(ciated)h(with)h(a)f(particular)g(axis)f(of)i(a)227
-4004 y(SkyF)-7 b(rame.)43 b(It)30 b(is)g(used)g(in)n(ternally)f(b)n(y)g
-(the)h(AST)h(library)d(and)i(has)f(no)h(constructor)e(function.)44
-b(Y)-7 b(ou)30 b(should)227 4104 y(encoun)n(ter)d(it)h(only)f(within)i
-(textual)e(output)h(\(e.g.)37 b(from)27 b(astW)-7 b(rite\).)0
-4253 y Fd(Constructor)32 b(F)-8 b(unction:)227 4352 y
-Fj(None.)-2 4501 y Fd(Inheritance)n(:)227 4648 y Fj(The)28
-b(SkyAxis)f(class)g(inherits)g(from)h(the)g(Axis)f(class.)p
-0 4846 V 0 4978 a Fz(SkyF)-11 b(rame)306 b Fe(Celestial)37
-b(co)s(ordinate)f(system)i(description)305 b Fz(SkyF)-11
-b(rame)0 5170 y Fd(Description:)44 b Fj(A)35 b(SkyF)-7
-b(rame)34 b(is)g(a)g(sp)r(ecialised)g(form)g(of)h(F)-7
-b(rame)34 b(whic)n(h)g(describ)r(es)g(celestial)g(longitude/latitude)
-227 5270 y(co)r(ordinate)f(systems.)56 b(The)34 b(particular)f
-(celestial)g(co)r(ordinate)g(system)h(to)g(b)r(e)g(represen)n(ted)f(is)
-h(sp)r(eci\014ed)g(b)n(y)227 5369 y(setting)24 b(the)h(SkyF)-7
-b(rame's)23 b(System)h(attribute)g(\(curren)n(tly)-7
-b(,)24 b(the)g(default)h(is)e(ICRS\))i(quali\014ed,)g(as)e(necessary)-7
-b(,)23 b(b)n(y)227 5469 y(a)k(mean)h(Equino)n(x)e(v)-5
-b(alue)28 b(and/or)e(an)h(Ep)r(o)r(c)n(h.)227 5593 y(F)-7
-b(or)34 b(eac)n(h)g(of)g(the)h(supp)r(orted)g(celestial)f(co)r
-(ordinate)f(systems,)j(a)e(SkyF)-7 b(rame)34 b(can)g(apply)g(an)g
-(optional)g(shift)227 5693 y(of)c(origin)f(to)h(create)f(a)g(co)r
-(ordinate)g(system)h(represen)n(ting)e(o\013sets)i(within)g(the)h
-(celestial)e(co)r(ordinate)g(system)p eop end
-%%Page: 513 523
-TeXDict begin 513 522 bop 3643 52 a FF(513)227 351 y
-Fj(from)33 b(some)f(sp)r(eci\014ed)i(reference)e(p)r(oin)n(t.)53
-b(This)33 b(o\013set)g(co)r(ordinate)f(system)g(can)h(also)f(b)r(e)h
-(rotated)f(to)h(de\014ne)227 451 y(new)28 b(longitude)f(and)h(latitude)
-g(axes.)36 b(See)27 b(attributes)h(SkyRef,)g(SkyRefIs,)f(SkyRefP)h(and)
-f(AlignO\013set.)227 573 y(All)34 b(the)f(co)r(ordinate)f(v)-5
-b(alues)33 b(used)g(b)n(y)g(a)g(SkyF)-7 b(rame)32 b(are)h(in)g
-(radians.)52 b(These)33 b(ma)n(y)g(b)r(e)g(formatted)g(in)g(more)227
-673 y(con)n(v)n(en)n(tional)26 b(w)n(a)n(ys)g(for)h(displa)n(y)g(b)n(y)
-g(using)g(astF)-7 b(ormat.)0 818 y Fd(Constructor)32
-b(F)-8 b(unction:)227 918 y Fj(astSkyF)h(rame)-2 1064
-y Fd(Inheritance)n(:)227 1210 y Fj(The)28 b(SkyF)-7 b(rame)27
-b(class)f(inherits)i(from)f(the)h(F)-7 b(rame)27 b(class.)-2
-1355 y Fd(A)m(ttributes)n(:)227 1501 y Fj(In)40 b(addition)f(to)h
-(those)f(attributes)h(common)f(to)g(all)g(F)-7 b(rames,)42
-b(ev)n(ery)c(SkyF)-7 b(rame)39 b(also)g(has)g(the)h(follo)n(wing)227
-1601 y(attributes:)340 1856 y Fi(\017)45 b Fj(AlignO\013set:)37
-b(Align)28 b(SkyF)-7 b(rames)26 b(using)i(the)g(o\013set)f(co)r
-(ordinate)g(system?)340 1985 y Fi(\017)45 b Fj(AsTime\(axis\):)37
-b(F)-7 b(ormat)27 b(celestial)g(co)r(ordinates)f(as)h(times?)340
-2113 y Fi(\017)45 b Fj(Equino)n(x:)36 b(Ep)r(o)r(c)n(h)27
-b(of)h(the)g(mean)f(equino)n(x)340 2242 y Fi(\017)45
-b Fj(LatAxis:)37 b(Index)27 b(of)h(the)g(latitude)g(axis)340
-2371 y Fi(\017)45 b Fj(LonAxis:)37 b(Index)27 b(of)h(the)g(longitude)f
-(axis)340 2500 y Fi(\017)45 b Fj(NegLon:)36 b(Displa)n(y)28
-b(longitude)f(v)-5 b(alues)27 b(in)h(the)g(range)e([-pi,pi]?)340
-2629 y Fi(\017)45 b Fj(Pro)5 b(jection:)36 b(Sky)27 b(pro)5
-b(jection)27 b(description.)340 2757 y Fi(\017)45 b Fj(SkyRef:)37
-b(P)n(osition)27 b(de\014ning)g(lo)r(cation)g(of)h(the)g(o\013set)f(co)
-r(ordinate)g(system)340 2886 y Fi(\017)45 b Fj(SkyRefIs:)37
-b(Selects)28 b(the)g(nature)f(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)340 3015 y Fi(\017)45 b Fj(SkyRefP:)28 b(P)n(osition)e
-(de\014ning)h(orien)n(tation)g(of)g(the)h(o\013set)g(co)r(ordinate)e
-(system)-2 3173 y Fd(F)-8 b(unctions)n(:)227 3319 y Fj(The)33
-b(SkyF)-7 b(rame)32 b(class)f(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)h
-(functions)g(b)r(ey)n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h
-(all)227 3419 y(F)-7 b(rames.)p 0 3610 3780 12 v 0 3742
-a Fz(SlaMap)328 b Fe(Sequence)39 b(of)g(celestial)e(co)s(ordinate)f
-(con)m(v)m(ersions)326 b Fz(SlaMap)0 3922 y Fd(Description:)44
-b Fj(An)32 b(SlaMap)e(is)h(a)g(sp)r(ecialised)f(form)h(of)g(Mapping)f
-(whic)n(h)h(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)g(sequence)227
-4022 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g
-(celestial)g(\(longitude,)h(latitude\))g(co)r(ordinate)f(systems.)227
-4145 y(When)d(an)e(SlaMap)h(is)g(\014rst)f(created,)h(it)h(simply)f(p)r
-(erforms)f(a)g(unit)i(\(n)n(ull\))f(Mapping)g(on)f(a)h(pair)f(of)h(co)r
-(ordinates.)227 4244 y(Using)k(the)g(astSlaAdd)g(function,)g(a)g
-(series)f(of)g(co)r(ordinate)g(con)n(v)n(ersion)e(steps)j(ma)n(y)f
-(then)i(b)r(e)f(added,)g(selected)227 4344 y(from)h(those)g(pro)n
-(vided)f(b)n(y)g(the)i(SLALIB)f(P)n(ositional)e(Astronom)n(y)h(Library)
-f(\(Starlink)i(User)g(Note)g(SUN/67\).)227 4443 y(This)21
-b(allo)n(ws)f(m)n(ulti-step)i(con)n(v)n(ersions)c(b)r(et)n(w)n(een)j(a)
-g(v)-5 b(ariet)n(y)20 b(of)i(celestial)e(co)r(ordinate)g(systems)h(to)g
-(b)r(e)h(assem)n(bled)227 4543 y(out)28 b(of)f(the)h(building)g(blo)r
-(c)n(ks)f(pro)n(vided)g(b)n(y)g(SLALIB.)227 4666 y(F)-7
-b(or)27 b(details)f(of)h(the)g(individual)g(co)r(ordinate)f(con)n(v)n
-(ersions)f(a)n(v)-5 b(ailable,)25 b(see)i(the)g(description)g(of)f(the)
-i(astSlaAdd)227 4765 y(function.)0 4911 y Fd(Constructor)k(F)-8
-b(unction:)227 5010 y Fj(astSlaMap)27 b(\(also)g(see)g(astSlaAdd\))-2
-5156 y Fd(Inheritance)n(:)227 5302 y Fj(The)h(SlaMap)f(class)g
-(inherits)g(from)g(the)h(Mapping)g(class.)-2 5447 y Fd(A)m(ttributes)n
-(:)227 5593 y Fj(The)37 b(SlaMap)f(class)g(do)r(es)g(not)h(de\014ne)g
-(an)n(y)f(new)h(attributes)f(b)r(ey)n(ond)h(those)f(whic)n(h)h(are)e
-(applicable)h(to)h(all)227 5693 y(Mappings.)p eop end
-%%Page: 514 524
-TeXDict begin 514 523 bop 0 52 a FF(514)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(F)-8 b(unctions)n(:)227
-497 y Fj(In)21 b(addition)f(to)g(those)g(functions)g(applicable)g(to)g
-(all)g(Mappings,)h(the)g(follo)n(wing)e(function)h(ma)n(y)g(also)f(b)r
-(e)i(applied)227 597 y(to)28 b(all)f(SlaMaps:)340 853
-y Fi(\017)45 b Fj(astSlaAdd:)37 b(Add)28 b(a)f(celestial)g(co)r
-(ordinate)g(con)n(v)n(ersion)e(to)j(an)f(SlaMap)p 0 1045
-3780 12 v 0 1177 a Fz(Sp)t(ecFluxF)-11 b(rame)1228 1183
-y Fe(Comp)s(ound)37 b(sp)s(ectrum/\015ux)1730 1303 y(F)-10
-b(rame)2871 1177 y Fz(Sp)t(ecFluxF)f(rame)0 1462 y Fd(Description:)44
-b Fj(A)35 b(Sp)r(ecFluxF)-7 b(rame)35 b(com)n(bines)f(a)g(Sp)r(ecF)-7
-b(rame)34 b(and)g(a)g(FluxF)-7 b(rame)35 b(in)n(to)f(a)g(single)g
-(2-dimensional)227 1562 y(comp)r(ound)24 b(F)-7 b(rame.)34
-b(Suc)n(h)24 b(a)f(F)-7 b(rame)22 b(can)h(for)g(instance)g(b)r(e)h
-(used)f(to)g(describ)r(e)g(a)g(Plot)g(of)g(a)g(sp)r(ectrum)g(in)h(whic)
-n(h)227 1661 y(the)k(\014rst)g(axis)e(represen)n(ts)h(sp)r(ectral)g(p)r
-(osition)g(and)g(the)h(second)f(axis)g(represen)n(ts)f(\015ux.)0
-1807 y Fd(Constructor)32 b(F)-8 b(unction:)227 1907 y
-Fj(astSp)r(ecFluxF)h(rame)-2 2053 y Fd(Inheritance)n(:)227
-2199 y Fj(The)28 b(Sp)r(ecFluxF)-7 b(rame)28 b(class)e(inherits)i(from)
-f(the)h(CmpF)-7 b(rame)27 b(class.)-2 2345 y Fd(A)m(ttributes)n(:)227
-2491 y Fj(The)e(Sp)r(ecFluxF)-7 b(rame)25 b(class)f(do)r(es)h(not)g
-(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(applicable)h(to)227 2591 y(all)i(CmpF)-7 b(rames.)36
-b(Ho)n(w)n(ev)n(er,)24 b(the)j(attributes)g(of)f(the)h(comp)r(onen)n(t)
-g(F)-7 b(rames)25 b(can)i(b)r(e)f(accessed)g(as)g(if)h(they)g(w)n(ere)
-227 2690 y(attributes)d(of)f(the)h(Sp)r(ecFluxF)-7 b(rame.)36
-b(F)-7 b(or)23 b(instance,)h(the)g(Sp)r(ecFluxF)-7 b(rame)23
-b(will)h(recognise)e(the)i Ft(")p Fj(StdOfRest)p Ft(")227
-2790 y Fj(attribute)k(and)g(forw)n(ard)e(access)g(requests)h(to)g(the)h
-(comp)r(onen)n(t)g(Sp)r(ecF)-7 b(rame.)36 b(An)29 b(axis)d(index)i(can)
-f(optionally)227 2890 y(b)r(e)32 b(app)r(ended)f(to)g(the)h(end)f(of)g
-(an)n(y)f(attribute)i(name,)f(in)h(whic)n(h)f(case)f(the)i(request)e
-(to)h(access)f(the)h(attribute)227 2989 y(will)d(b)r(e)g(forw)n(arded)e
-(to)h(the)h(primary)f(F)-7 b(rame)27 b(de\014ning)h(the)g(sp)r
-(eci\014ed)f(axis.)-2 3135 y Fd(F)-8 b(unctions)n(:)227
-3281 y Fj(The)27 b(Sp)r(ecFluxF)-7 b(rame)27 b(class)f(do)r(es)g(not)h
-(de\014ne)g(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)
-h(are)e(applicable)i(to)227 3381 y(all)h(CmpF)-7 b(rames.)p
-0 3573 V 0 3704 a Fz(Sp)t(ecF)c(rame)899 3705 y Fe(Sp)s(ectral)37
-b(co)s(ordinate)g(system)h(description)3138 3704 y Fz(Sp)t(ecF)-11
-b(rame)0 3887 y Fd(Description:)44 b Fj(A)38 b(Sp)r(ecF)-7
-b(rame)38 b(is)g(a)f(sp)r(ecialised)g(form)h(of)f(one-dimensional)g(F)
--7 b(rame)37 b(whic)n(h)h(represen)n(ts)e(v)-5 b(arious)227
-3987 y(co)r(ordinate)22 b(systems)h(used)h(to)f(describ)r(e)g(p)r
-(ositions)g(within)h(an)f(electro-magnetic)f(sp)r(ectrum.)35
-b(The)24 b(particular)227 4086 y(co)r(ordinate)h(system)g(to)g(b)r(e)h
-(used)f(is)h(sp)r(eci\014ed)f(b)n(y)h(setting)f(the)h(Sp)r(ecF)-7
-b(rame's)25 b(System)g(attribute)h(\(the)g(default)227
-4186 y(is)i(w)n(a)n(v)n(elength\))e(quali\014ed,)h(as)g(necessary)-7
-b(,)26 b(b)n(y)i(other)f(attributes)g(suc)n(h)g(as)g(the)h(rest)f
-(frequency)-7 b(,)28 b(the)g(standard)227 4285 y(of)c(rest,)g(the)g(ep)
-r(o)r(c)n(h)f(of)h(observ)-5 b(ation,)23 b(units,)i(etc)f(\(see)f(the)h
-(description)f(of)h(the)g(System)g(attribute)f(for)g(details\).)227
-4408 y(By)h(setting)f(a)h(v)-5 b(alue)23 b(for)h(thr)f(Sp)r(ecOrigin)h
-(attribute,)g(a)g(Sp)r(ecF)-7 b(rame)23 b(can)h(b)r(e)g(made)f(to)h
-(represen)n(t)e(o\013sets)i(from)227 4508 y(a)j(giv)n(en)g(sp)r(ectral)
-g(p)r(osition,)h(rather)e(than)i(absolute)f(sp)r(ectral)g(v)-5
-b(alues.)0 4654 y Fd(Constructor)32 b(F)-8 b(unction:)227
-4753 y Fj(astSp)r(ecF)h(rame)-2 4899 y Fd(Inheritance)n(:)227
-5046 y Fj(The)28 b(Sp)r(ecF)-7 b(rame)27 b(class)g(inherits)g(from)h
-(the)g(F)-7 b(rame)27 b(class.)-2 5192 y Fd(A)m(ttributes)n(:)227
-5338 y Fj(In)38 b(addition)f(to)g(those)f(attributes)h(common)g(to)g
-(all)g(F)-7 b(rames,)39 b(ev)n(ery)d(Sp)r(ecF)-7 b(rame)37
-b(also)f(has)g(the)i(follo)n(wing)227 5437 y(attributes:)340
-5693 y Fi(\017)45 b Fj(AlignSp)r(ecO\013set:)38 b(Align)27
-b(Sp)r(ecF)-7 b(rames)27 b(using)h(the)g(o\013set)f(co)r(ordinate)g
-(system?)p eop end
-%%Page: 515 525
-TeXDict begin 515 524 bop 3643 52 a FF(515)340 351 y
-Fi(\017)45 b Fj(AlignStdOfRest:)38 b(Standard)27 b(of)g(rest)g(in)h
-(whic)n(h)g(to)f(align)g(Sp)r(ecF)-7 b(rames)340 479
-y Fi(\017)45 b Fj(RefDec:)38 b(Declination)27 b(of)h(the)g(source)e
-(\(FK5)i(J2000\))340 608 y Fi(\017)45 b Fj(RefRA:)29
-b(Righ)n(t)e(ascension)g(of)g(the)h(source)e(\(FK5)i(J2000\))340
-736 y Fi(\017)45 b Fj(RestF)-7 b(req:)37 b(Rest)28 b(frequency)340
-864 y Fi(\017)45 b Fj(SourceSys:)36 b(Source)27 b(v)n(elo)r(cit)n(y)f
-(sp)r(ectral)h(system)340 992 y Fi(\017)45 b Fj(SourceV)-7
-b(el:)37 b(Source)26 b(v)n(elo)r(cit)n(y)340 1120 y Fi(\017)45
-b Fj(SourceVRF:)28 b(Source)e(v)n(elo)r(cit)n(y)h(rest)g(frame)340
-1248 y Fi(\017)45 b Fj(Sp)r(ecOrigin:)36 b(The)28 b(zero)f(p)r(oin)n(t)
-g(for)g(Sp)r(ecF)-7 b(rame)28 b(axis)f(v)-5 b(alues)340
-1376 y Fi(\017)45 b Fj(StdOfRest:)38 b(Standard)27 b(of)g(rest)227
-1533 y(Sev)n(eral)35 b(of)h(the)g(F)-7 b(rame)35 b(attributes)h
-(inherited)g(b)n(y)g(the)g(Sp)r(ecF)-7 b(rame)36 b(class)f(refer)g(to)h
-(a)f(sp)r(eci\014c)h(axis)f(of)h(the)227 1633 y(F)-7
-b(rame)25 b(\(for)g(instance)f(Unit\(axis\),)j(Lab)r(el\(axis\),)e
-(etc\).)36 b(Since)26 b(a)e(Sp)r(ecF)-7 b(rame)25 b(is)g(strictly)g
-(one-dimensional,)f(it)227 1733 y(allo)n(ws)i(these)h(attributes)h(to)f
-(b)r(e)h(sp)r(eci\014ed)f(without)h(an)f(axis)f(index.)37
-b(So)27 b(for)g(instance,)g Ft(")p Fj(Unit)p Ft(")g Fj(is)g(allo)n(w)n
-(ed)f(in)227 1832 y(place)h(of)h Ft(")p Fj(Unit\(1\))p
-Ft(")p Fj(.)-2 1977 y Fd(F)-8 b(unctions)n(:)227 2123
-y Fj(In)25 b(addition)f(to)g(those)g(functions)h(applicable)e(to)h(all)
-g(F)-7 b(rames,)25 b(the)f(follo)n(wing)g(functions)g(ma)n(y)g(also)f
-(b)r(e)i(applied)227 2223 y(to)j(all)f(Sp)r(ecF)-7 b(rames:)340
-2477 y Fi(\017)45 b Fj(astSetRefP)n(os:)36 b(Set)28 b(reference)f(p)r
-(osition)g(in)h(an)n(y)f(celestial)g(system)340 2605
-y Fi(\017)45 b Fj(astGetRefP)n(os:)36 b(Get)28 b(reference)f(p)r
-(osition)g(in)h(an)n(y)f(celestial)g(system)p 0 2795
-3780 12 v 0 2925 a Fz(Sp)t(ecMap)775 2926 y Fe(Sequence)39
-b(of)f(sp)s(ectral)g(co)s(ordinate)f(con)m(v)m(ersions)3238
-2925 y Fz(Sp)t(ecMap)0 3106 y Fd(Description:)44 b Fj(A)31
-b(Sp)r(ecMap)f(is)g(a)g(sp)r(ecialised)g(form)g(of)g(Mapping)g(whic)n
-(h)g(can)g(b)r(e)g(used)g(to)g(represen)n(t)f(a)h(sequence)227
-3205 y(of)e(con)n(v)n(ersions)d(b)r(et)n(w)n(een)i(standard)g(sp)r
-(ectral)g(co)r(ordinate)f(systems.)227 3328 y(When)c(an)f(Sp)r(ecMap)h
-(is)f(\014rst)g(created,)h(it)g(simply)f(p)r(erforms)g(a)g(unit)h(\(n)n
-(ull\))g(Mapping.)34 b(Using)21 b(the)h(astSp)r(ecAdd)227
-3427 y(function,)33 b(a)d(series)g(of)h(co)r(ordinate)f(con)n(v)n
-(ersion)e(steps)j(ma)n(y)f(then)i(b)r(e)f(added.)47 b(This)31
-b(allo)n(ws)e(m)n(ulti-step)i(con-)227 3527 y(v)n(ersions)c(b)r(et)n(w)
-n(een)h(a)g(v)-5 b(ariet)n(y)28 b(of)g(sp)r(ectral)g(co)r(ordinate)g
-(systems)g(to)g(b)r(e)h(assem)n(bled)e(out)i(of)f(a)g(set)h(of)f
-(building)227 3626 y(blo)r(c)n(ks.)227 3749 y(Con)n(v)n(ersions)f(are)g
-(a)n(v)-5 b(ailable)28 b(to)h(transform)e(b)r(et)n(w)n(een)i(standards)
-f(of)h(rest.)40 b(Suc)n(h)29 b(con)n(v)n(ersions)d(need)j(to)f(kno)n(w)
-227 3848 y(the)23 b(source)e(p)r(osition)i(as)e(an)i(RA)f(and)h(DEC.)f
-(This)h(information)e(can)i(b)r(e)f(supplied)h(in)g(the)g(form)f(of)g
-(parameters)227 3948 y(for)27 b(the)g(relev)-5 b(an)n(t)26
-b(con)n(v)n(ersions,)e(in)j(whic)n(h)g(case)f(the)h(Sp)r(ecMap)g(is)f
-(1-dimensional,)g(simply)h(transforming)e(the)227 4047
-y(sp)r(ectral)c(axis)g(v)-5 b(alues.)35 b(This)21 b(means)g(that)h(the)
-g(same)f(source)g(p)r(osition)g(will)h(alw)n(a)n(ys)e(b)r(e)i(used)f(b)
-n(y)g(the)h(Sp)r(ecMap.)227 4147 y(Ho)n(w)n(ev)n(er,)32
-b(this)h(ma)n(y)f(not)g(b)r(e)h(appropriate)e(for)h(an)h(accurate)e
-(description)h(of)g(a)h(3-D)f(sp)r(ectral)g(cub)r(e,)i(where)227
-4247 y(c)n(hanges)c(of)h(spatial)g(p)r(osition)g(can)g(pro)r(duce)f
-(signi\014can)n(t)h(c)n(hanges)f(in)h(the)h(Doppler)f(shift)g(in)n(tro)
-r(duced)g(when)227 4346 y(transforming)19 b(b)r(et)n(w)n(een)h
-(standards)e(of)i(rest.)34 b(F)-7 b(or)20 b(this)g(situation,)h(a)f
-(3-dimensional)e(Sp)r(ecMap)i(can)g(b)r(e)g(created)227
-4446 y(in)30 b(whic)n(h)g(axes)e(2)h(and)h(3)f(corresp)r(ond)f(to)h
-(the)h(source)e(RA)i(and)g(DEC)f(The)h(Sp)r(ecMap)g(simply)f(copies)g
-(v)-5 b(alues)227 4546 y(for)24 b(axes)f(2)h(and)g(3)f(from)h(input)h
-(to)f(output\),)i(but)e(mo)r(di\014es)h(axis)e(1)h(v)-5
-b(alues)23 b(\(the)i(sp)r(ectral)f(axis\))f(appropriately)-7
-b(.)227 4668 y(F)g(or)22 b(details)g(of)h(the)f(individual)h(co)r
-(ordinate)e(con)n(v)n(ersions)f(a)n(v)-5 b(ailable,)22
-b(see)g(the)h(description)f(of)g(the)h(astSp)r(ecAdd)227
-4767 y(function.)0 4912 y Fd(Constructor)32 b(F)-8 b(unction:)227
-5012 y Fj(astSp)r(ecMap)28 b(\(also)e(see)i(astSp)r(ecAdd\))-2
-5156 y Fd(Inheritance)n(:)227 5303 y Fj(The)g(Sp)r(ecMap)g(class)e
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 5447 y Fd(A)m(ttributes)n
-(:)227 5593 y Fj(The)33 b(Sp)r(ecMap)g(class)f(do)r(es)h(not)f
-(de\014ne)i(an)n(y)e(new)g(attributes)h(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(applicable)g(to)h(all)227 5693 y(Mappings.)p
-eop end
-%%Page: 516 526
-TeXDict begin 516 525 bop 0 52 a FF(516)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(F)-8 b(unctions)n(:)227
-497 y Fj(In)21 b(addition)f(to)g(those)g(functions)g(applicable)g(to)g
-(all)g(Mappings,)h(the)g(follo)n(wing)e(function)h(ma)n(y)g(also)f(b)r
-(e)i(applied)227 597 y(to)28 b(all)f(Sp)r(ecMaps:)340
-857 y Fi(\017)45 b Fj(astSp)r(ecAdd:)38 b(Add)28 b(a)f(sp)r(ectral)g
-(co)r(ordinate)f(con)n(v)n(ersion)g(to)h(an)h(Sp)r(ecMap)p
-0 1056 3780 12 v 0 1187 a Fz(SphMap)189 b Fe(Map)39 b(3-d)g(Cartesian)d
-(to)i(2-d)h(spherical)e(co)s(ordinates)189 b Fz(SphMap)0
-1375 y Fd(Description:)44 b Fj(A)33 b(SphMap)g(is)f(a)g(Mapping)g(whic)
-n(h)g(transforms)f(p)r(oin)n(ts)h(from)g(a)g(3-dimensional)f(Cartesian)
-g(co)r(or-)227 1475 y(dinate)f(system)g(in)n(to)g(a)f(2-dimensional)g
-(spherical)f(co)r(ordinate)h(system)h(\(longitude)g(and)g(latitude)g
-(on)f(a)h(unit)227 1575 y(sphere)e(cen)n(tred)f(at)h(the)g(origin\).)37
-b(It)28 b(w)n(orks)f(b)n(y)g(regarding)f(the)i(input)h(co)r(ordinates)d
-(as)i(p)r(osition)f(v)n(ectors)g(and)227 1674 y(\014nding)38
-b(their)f(in)n(tersection)g(with)h(the)g(sphere)f(surface.)66
-b(The)38 b(in)n(v)n(erse)e(transformation)g(alw)n(a)n(ys)f(pro)r(duces)
-227 1774 y(p)r(oin)n(ts)28 b(whic)n(h)f(are)g(a)g(unit)h(distance)g
-(from)f(the)h(origin)e(\(i.e.)38 b(unit)28 b(v)n(ectors\).)0
-1923 y Fd(Constructor)k(F)-8 b(unction:)227 2022 y Fj(astSphMap)-2
-2171 y Fd(Inheritance)n(:)227 2318 y Fj(The)28 b(SphMap)g(class)e
-(inherits)i(from)f(the)h(Mapping)f(class.)-2 2467 y Fd(A)m(ttributes)n
-(:)227 2613 y Fj(In)38 b(addition)f(to)g(those)g(attributes)g(common)f
-(to)h(all)g(Mappings,)i(ev)n(ery)d(SphMap)h(also)f(has)h(the)h(follo)n
-(wing)227 2712 y(attributes:)340 2973 y Fi(\017)45 b
-Fj(UnitRadius:)38 b(SphMap)27 b(input)i(v)n(ectors)d(lie)i(on)f(a)g
-(unit)h(sphere?)340 3105 y Fi(\017)45 b Fj(P)n(olarLong:)34
-b(The)28 b(longitude)f(v)-5 b(alue)28 b(to)f(assign)f(to)i(either)f(p)r
-(ole)-2 3266 y Fd(F)-8 b(unctions)n(:)227 3413 y Fj(The)37
-b(SphMap)g(class)e(do)r(es)h(not)h(de\014ne)g(an)n(y)f(new)g(functions)
-h(b)r(ey)n(ond)f(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227
-3512 y(Mappings.)p 0 3711 V 0 3841 a Fz(Stc)692 3842
-y Fe(Represen)m(ts)i(an)f(instance)g(of)h(the)f(IV)m(O)m(A)h(STC)f
-(class)3593 3841 y Fz(Stc)0 4030 y Fd(Description:)44
-b Fj(The)26 b(Stc)f(class)f(is)h(an)g(implemen)n(tation)g(of)g(the)h
-(IV)n(O)n(A)f(STC)g(class)f(whic)n(h)h(forms)g(part)f(of)i(the)f(IV)n
-(O)n(A)227 4130 y(Space-Time)i(Co)r(ordinate)g(Metadata)g(system.)36
-b(See:)227 4254 y(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p
-Fi(\030)p Fj(arots/n)n(v)n(ometa/)o(STC.h)n(tml)227 4378
-y(The)36 b(Stc)g(class)e(do)r(es)i(not)f(ha)n(v)n(e)g(a)g(constructor)f
-(function)i(of)f(its)h(o)n(wn,)h(as)e(it)h(is)g(simply)f(a)g(con)n
-(tainer)g(class)227 4478 y(for)25 b(a)f(family)i(of)f(sp)r(ecialised)f
-(sub-classes)g(including)h(StcCatalogEn)n(tryLo)r(cation,)d
-(StcResourcePro\014le,)i(Stc-)227 4578 y(Searc)n(hLo)r(cation)i(and)h
-(StcObsDataLo)r(cation.)0 4727 y Fd(Constructor)32 b(F)-8
-b(unction:)227 4826 y Fj(astStc)-2 4975 y Fd(Inheritance)n(:)227
-5121 y Fj(The)28 b(Stc)g(class)f(inherits)g(from)g(the)h(Region)f
-(class.)-2 5270 y Fd(A)m(ttributes)n(:)227 5417 y Fj(In)g(addition)g
-(to)f(those)h(attributes)f(common)h(to)f(all)h(Regions,)f(ev)n(ery)f
-(Stc)i(also)f(has)g(the)h(follo)n(wing)f(attributes:)340
-5677 y Fi(\017)45 b Fj(RegionClass:)35 b(The)28 b(class)f(name)g(of)h
-(the)g(encapsulated)f(Region.)p eop end
-%%Page: 517 527
-TeXDict begin 517 526 bop 3643 52 a FF(517)-2 351 y Fd(F)-8
-b(unctions)n(:)227 497 y Fj(In)23 b(addition)g(to)f(those)h(functions)g
-(applicable)f(to)h(all)f(Regions,)h(the)g(follo)n(wing)f(functions)h
-(ma)n(y)f(also)f(b)r(e)j(applied)227 597 y(to)k(all)f(Stc's:)340
-854 y Fi(\017)45 b Fj(astGetStcRegion:)37 b(Get)28 b(a)f(p)r(oin)n(ter)
-g(to)h(the)f(encapsulated)g(Region)340 984 y Fi(\017)45
-b Fj(astGetStcCo)r(ord:)36 b(Get)28 b(information)f(ab)r(out)h(an)f
-(AstroCo)r(ords)f(elemen)n(t)340 1115 y Fi(\017)45 b
-Fj(astGetStcNCo)r(ord:)37 b(Returns)27 b(the)h(n)n(um)n(b)r(er)f(of)h
-(AstroCo)r(ords)e(elemen)n(ts)h(in)h(an)f(Stc)p 0 1309
-3780 12 v 0 1441 a Fz(StcCatalogEn)l(tryLo)t(cation)1637
-1457 y Fe(Corresp)s(ond)1737 1572 y(to)38 b(the)1739
-1671 y(IV)m(O)m(A)1659 1771 y(STCCat-)1694 1871 y(alogEn-)1671
-1984 y(tryLo)s(ca-)1789 2095 y(tion)1772 2195 y(class)2295
-1441 y Fz(StcCatalogEn)l(tryLo)t(cation)0 2355 y Fd(Description:)44
-b Fj(The)29 b(StcCatalogEn)n(tryLo)r(cation)d(class)i(is)h(a)f
-(sub-class)g(of)h(Stc)g(used)g(to)g(describ)r(e)f(the)i(co)n(v)n(erage)
-c(of)227 2455 y(the)i(datasets)f(con)n(tained)g(in)h(some)f(V)n(O)g
-(resource.)227 2578 y(See)h(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-2725 y Fd(Constructor)32 b(F)-8 b(unction:)227 2825 y
-Fj(astStcCatalogEn)n(tryLo)r(cation)-2 2971 y Fd(Inheritance)n(:)227
-3118 y Fj(The)28 b(StcCatalogEn)n(tryLo)r(cation)c(class)j(inherits)g
-(from)h(the)g(Stc)g(class.)-2 3264 y Fd(A)m(ttributes)n(:)227
-3411 y Fj(The)36 b(StcCatalogEn)n(tryLo)r(cation)c(class)j(do)r(es)h
-(not)f(de\014ne)h(an)n(y)f(new)h(attributes)f(b)r(ey)n(ond)h(those)f
-(whic)n(h)h(are)227 3510 y(applicable)27 b(to)h(all)f(Stcs.)-2
-3657 y Fd(F)-8 b(unctions)n(:)227 3803 y Fj(The)38 b(StcCatalogEn)n
-(tryLo)r(cation)d(class)i(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)227
-3903 y(applicable)27 b(to)h(all)f(Stcs.)p 0 4097 V 0
-4229 a Fz(StcObsDataLo)t(cation)214 b Fe(Corresp)s(ond)37
-b(to)h(the)1739 4342 y(IV)m(O)m(A)1439 4442 y(ObsDataLo)s(cation)1772
-4541 y(class)2569 4229 y Fz(StcObsDataLo)t(cation)0 4702
-y Fd(Description:)44 b Fj(The)27 b(StcObsDataLo)r(cation)e(class)g(is)i
-(a)f(sub-class)f(of)h(Stc)h(used)f(to)g(describ)r(e)g(the)h(co)r
-(ordinate)e(space)227 4801 y(o)r(ccupied)j(b)n(y)f(a)g(particular)g
-(observ)-5 b(ational)25 b(dataset.)227 4925 y(See)j(h)n
-(ttp://hea-www.harv)-5 b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o
-(meta/STC.h)n(tml)227 5048 y(An)29 b(STC)f(ObsDataLo)r(cation)f(elemen)
-n(t)h(sp)r(eci\014es)g(the)h(exten)n(t)f(of)g(the)g(observ)-5
-b(ation)27 b(within)i(a)f(sp)r(eci\014ed)g(co)r(or-)227
-5148 y(dinate)g(system,)f(and)h(also)e(sp)r(eci\014es)i(the)g(observ)-5
-b(atory)25 b(lo)r(cation)i(within)h(a)g(second)e(co)r(ordinate)h
-(system.)227 5271 y(The)i(AST)g(StcObsDataLo)r(cation)f(class)g
-(inherits)g(from)h(Stc,)g(and)g(therefore)f(an)h(StcObsDataLo)r(cation)
-e(can)227 5370 y(b)r(e)f(used)g(directly)f(as)f(an)i(Stc.)36
-b(When)26 b(used)g(in)f(this)h(w)n(a)n(y)-7 b(,)25 b(the)h
-(StcObsDataLo)r(cation)e(describ)r(es)g(the)i(lo)r(cation)227
-5470 y(of)i(the)g(observ)-5 b(ation)26 b(\(not)i(the)g(observ)-5
-b(atory\).)227 5593 y(Ev)n(en)n(tually)e(,)27 b(this)g(class)g(will)h
-(ha)n(v)n(e)e(a)h(metho)r(d)h(for)f(returning)g(an)g(Stc)h(describing)e
-(the)i(observ)-5 b(atory)25 b(lo)r(cation.)227 5693 y(Ho)n(w)n(ev)n
-(er,)32 b(AST)i(curren)n(tly)e(do)r(es)g(not)h(include)g(an)n(y)f
-(classes)g(of)g(F)-7 b(rame)33 b(for)f(describing)g(terrestrial)f(or)h
-(solar)p eop end
-%%Page: 518 528
-TeXDict begin 518 527 bop 0 52 a FF(518)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(system)h(p)r(ositions.)44
-b(Therefore,)29 b(the)h(pro)n(vision)f(for)g(returning)g(observ)-5
-b(atory)28 b(lo)r(cation)i(as)f(an)h(Stc)g(is)g(not)g(y)n(et)227
-451 y(a)n(v)-5 b(ailable.)34 b(Ho)n(w)n(ev)n(er,)21 b(for)g
-(terrestrial)g(observ)-5 b(ations,)21 b(the)h(p)r(osition)g(of)g(the)g
-(observ)-5 b(atory)19 b(can)j(still)g(b)r(e)g(recorded)227
-551 y(using)33 b(the)g(ObsLon)f(and)g(ObsLat)g(attributes)h(of)g(the)g
-(F)-7 b(rame)32 b(encapsulated)g(within)i(the)f(Stc)g(represen)n(ting)
-227 650 y(the)28 b(observ)-5 b(ation)26 b(lo)r(cation)h(\(this)i
-(assumes)d(the)i(observ)-5 b(atory)25 b(is)j(lo)r(cated)f(at)h(sea)f
-(lev)n(el\).)0 810 y Fd(Constructor)32 b(F)-8 b(unction:)227
-910 y Fj(astStcObsDataLo)r(cation)-2 1070 y Fd(Inheritance)n(:)227
-1216 y Fj(The)28 b(StcObsDataLo)r(cation)e(class)h(inherits)g(from)h
-(the)g(Stc)g(class.)-2 1376 y Fd(A)m(ttributes)n(:)227
-1522 y Fj(The)i(StcObsDataLo)r(cation)f(class)g(do)r(es)g(not)h
-(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)n(ond)g(those)f(whic)n
-(h)h(are)f(appli-)227 1621 y(cable)e(to)h(all)f(Stcs.)-2
-1781 y Fd(F)-8 b(unctions)n(:)227 1928 y Fj(The)20 b(StcObsDataLo)r
-(cation)f(class)f(do)r(es)i(not)g(de\014ne)g(an)n(y)f(new)h(functions)g
-(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)227
-2027 y(to)28 b(all)f(Stcs.)p 0 2237 3780 12 v 0 2369
-a Fz(StcResourcePro\014le)153 b Fe(Corresp)s(ond)33 b(to)g(the)h(IV)m
-(O)m(A)1377 2483 y(STCResourcePro\014le)1772 2583 y(class)2672
-2369 y Fz(StcResourcePro\014le)0 2759 y Fd(Description:)44
-b Fj(The)37 b(StcResourcePro\014le)d(class)h(is)h(a)g(sub-class)e(of)j
-(Stc)f(used)g(to)g(describ)r(e)g(the)h(co)n(v)n(erage)c(of)j(the)227
-2859 y(datasets)27 b(con)n(tained)g(in)h(some)f(V)n(O)g(resource.)227
-2988 y(See)h(h)n(ttp://hea-www.harv)-5 b(ard.edu/)p Fi(\030)p
-Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0 3148 y Fd(Constructor)32
-b(F)-8 b(unction:)227 3248 y Fj(astStcResourcePro\014le)-2
-3408 y Fd(Inheritance)n(:)227 3554 y Fj(The)28 b(StcResourcePro\014le)d
-(class)i(inherits)g(from)h(the)g(Stc)g(class.)-2 3714
-y Fd(A)m(ttributes)n(:)227 3860 y Fj(The)c(StcResourcePro\014le)e
-(class)h(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h(attributes)g(b)r(ey)
-n(ond)f(those)h(whic)n(h)f(are)g(applicable)227 3960
-y(to)28 b(all)f(Stcs.)-2 4120 y Fd(F)-8 b(unctions)n(:)227
-4266 y Fj(The)26 b(StcResourcePro\014le)e(class)g(do)r(es)i(not)g
-(de\014ne)g(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)
-f(are)g(applicable)227 4365 y(to)j(all)f(Stcs.)p 0 4575
-V 0 4707 a Fz(StcSearc)l(hLo)t(cation)170 b Fe(Corresp)s(ond)37
-b(to)h(the)h(IV)m(O)m(A)1362 4821 y(Searc)m(hLo)s(cation)d(class)2697
-4707 y Fz(StcSearc)l(hLo)t(cation)0 4998 y Fd(Description:)44
-b Fj(The)25 b(StcSearc)n(hLo)r(cation)e(class)g(is)i(a)f(sub-class)f
-(of)h(Stc)h(used)g(to)f(describ)r(e)g(the)h(co)n(v)n(erage)d(of)i(a)g
-(query)-7 b(.)227 5127 y(See)28 b(h)n(ttp://hea-www.harv)-5
-b(ard.edu/)p Fi(\030)p Fj(arots/n)n(v)n(o)o(meta/STC.h)n(tml)0
-5287 y Fd(Constructor)32 b(F)-8 b(unction:)227 5387 y
-Fj(astStcSearc)n(hLo)r(cation)-2 5547 y Fd(Inheritance)n(:)227
-5693 y Fj(The)28 b(StcSearc)n(hLo)r(cation)e(class)g(inherits)i(from)f
-(the)h(Stc)g(class.)p eop end
-%%Page: 519 529
-TeXDict begin 519 528 bop 3643 52 a FF(519)-2 351 y Fd(A)m(ttributes)n
-(:)227 497 y Fj(The)25 b(StcSearc)n(hLo)r(cation)d(class)i(do)r(es)g
-(not)g(de\014ne)g(an)n(y)g(new)g(attributes)h(b)r(ey)n(ond)f(those)g
-(whic)n(h)g(are)f(applicable)227 597 y(to)28 b(all)f(Stcs.)-2
-745 y Fd(F)-8 b(unctions)n(:)227 891 y Fj(The)27 b(StcSearc)n(hLo)r
-(cation)d(class)h(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)g(functions)h
-(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)f(applicable)227
-991 y(to)j(all)f(Stcs.)p 0 1188 3780 12 v 0 1319 a Fz(StcsChan)897
-1326 y Fe(I/O)39 b(Channel)f(using)g(STC-S)g(to)h(represen)m(t)1693
-1447 y(Ob)7 b(jects)3228 1319 y Fz(StcsChan)0 1638 y
-Fd(Description:)44 b Fj(A)24 b(StcsChan)f(is)h(a)f(sp)r(ecialised)g
-(form)g(of)g(Channel)g(whic)n(h)h(supp)r(orts)f(STC-S)g(I/O)f(op)r
-(erations.)35 b(W)-7 b(rit-)227 1738 y(ing)30 b(an)g(Ob)5
-b(ject)30 b(to)g(an)g(StcsChan)g(\(using)g(astW)-7 b(rite\))30
-b(will,)h(if)g(the)f(Ob)5 b(ject)30 b(is)g(suitable,)h(generate)e(an)h
-(STC-S)227 1837 y(description)24 b(of)g(that)h(Ob)5 b(ject,)25
-b(and)f(reading)g(from)g(an)g(StcsChan)g(will)h(create)e(a)h(new)h(Ob)5
-b(ject)24 b(from)g(its)h(STC-S)227 1937 y(description.)227
-2061 y(When)f(an)e(STC-S)h(description)f(is)h(read)f(using)g(astRead,)i
-(the)f(returned)f(AST)h(Ob)5 b(ject)23 b(ma)n(y)f(b)r(e)i(1\))e(a)h(P)n
-(oin)n(tList)227 2160 y(describing)33 b(the)h(STC)g(AstroCo)r(ords)e
-(\(i.e.)56 b(a)33 b(single)g(p)r(oin)n(t)h(of)g(in)n(terest)f(within)i
-(the)f(co)r(ordinate)f(frame)g(de-)227 2260 y(scrib)r(ed)h(b)n(y)f(the)
-i(STC-S)e(description\),)j(or)d(2\))g(a)h(Region)f(describing)g(the)h
-(STC)g(AstrCo)r(ordsArea)e(\(i.e.)56 b(an)227 2360 y(area)26
-b(or)h(v)n(olume)g(of)h(in)n(terest)f(within)h(the)g(co)r(ordinate)e
-(frame)i(describ)r(ed)f(b)n(y)g(the)h(STC-S)g(description\),)f(or)g
-(3\))227 2459 y(a)h(KeyMap)f(con)n(taining)h(the)g(unin)n(terpreted)g
-(prop)r(ert)n(y)g(v)-5 b(alues)27 b(read)h(form)g(the)g(STC-S)h
-(description,)f(or)f(4\))h(a)227 2559 y(KeyMap)i(con)n(taining)h(an)n
-(y)f(com)n(bination)g(of)h(the)h(\014rst)f(3)f(options.)47
-b(The)31 b(attributes)g(StcsArea,)h(StcsCo)r(ords)227
-2659 y(and)c(StcsProps)e(con)n(trol)g(whic)n(h)i(of)f(the)h(ab)r(o)n(v)
-n(e)e(is)i(returned)f(b)n(y)g(astRead.)227 2782 y(When)g(an)f(STC-S)g
-(description)f(is)h(created)f(from)h(an)g(AST)g(Ob)5
-b(ject)26 b(using)g(astW)-7 b(rite,)26 b(the)g(AST)h(Ob)5
-b(ject)25 b(m)n(ust)227 2882 y(b)r(e)32 b(either)g(a)f(Region)g(or)g(a)
-g(KeyMap.)48 b(If)32 b(it)g(is)g(a)f(Region,)h(it)g(is)g(assumed)f(to)g
-(de\014ne)h(the)g(AstroCo)r(ordsArea)227 2982 y(or)k(\(if)i(the)g
-(Region)e(is)h(a)f(single)h(p)r(oin)n(t\))g(the)h(AstroCo)r(ords)d(to)h
-(write)h(to)g(the)g(STC-S)g(description.)65 b(If)37 b(the)227
-3081 y(Ob)5 b(ject)28 b(is)f(a)g(KeyMap,)f(it)i(ma)n(y)f(con)n(tain)g
-(an)g(en)n(try)g(with)g(the)h(k)n(ey)f Ft(")p Fj(AREA)p
-Ft(")p Fj(,)g(holding)g(a)g(Region)g(to)g(b)r(e)h(used)227
-3181 y(to)g(de\014ne)f(the)h(AstroCo)r(ordsArea.)34 b(It)28
-b(ma)n(y)f(also)g(con)n(tain)f(an)i(en)n(try)f(with)h(the)f(k)n(ey)g
-Ft(")p Fj(COORDS)p Ft(")p Fj(,)g(holding)g(a)227 3281
-y(Region)g(\(a)g(P)n(oin)n(tList\))f(to)h(b)r(e)h(used)f(to)g(create)g
-(the)g(AstroCo)r(ords.)35 b(It)28 b(ma)n(y)e(also)g(con)n(tain)h(an)g
-(en)n(try)g(with)g(k)n(ey)227 3380 y Ft(")p Fj(PR)n(OPS)p
-Ft(")p Fj(,)h(holding)i(a)f(KeyMap)g(that)h(con)n(tains)f(unin)n
-(terpreted)h(prop)r(ert)n(y)e(v)-5 b(alues)30 b(to)f(b)r(e)i(used)e(as)
-g(defaults)227 3480 y(for)i(an)n(y)g(STC-S)h(prop)r(erties)e(that)i
-(are)f(not)g(determined)h(b)n(y)f(the)h(other)f(supplied)h(Regions.)48
-b(In)32 b(addition,)g(a)227 3579 y(KeyMap)e(supplied)i(to)e(astW)-7
-b(rite)31 b(ma)n(y)f(itself)i(hold)f(the)g(default)g(STC-S)g(prop)r
-(erties)f(\(rather)g(than)h(defaults)227 3679 y(b)r(eing)d(held)g(in)g
-(a)f(secondary)f(KeyMap,)g(stored)h(as)g(the)h Ft(")p
-Fj(PR)n(OPS)p Ft(")e Fj(en)n(try)h(in)g(the)h(supplied)g(KeyMap\).)227
-3803 y(The)33 b(astRead)e(and)h(astW)-7 b(rite)32 b(functions)g(w)n
-(ork)f(together)h(so)f(that)h(an)n(y)g(Ob)5 b(ject)32
-b(returned)g(b)n(y)g(astRead)f(can)227 3903 y(immediately)d(b)r(e)g
-(re-written)f(using)g(astW)-7 b(rite.)227 4026 y(Normally)g(,)36
-b(when)f(y)n(ou)g(use)f(an)h(StcsChan,)i(y)n(ou)d(should)h(pro)n(vide)f
-Ft(")p Fj(source)p Ft(")f Fj(and)h Ft(")p Fj(sink)p Ft(")g
-Fj(functions)i(whic)n(h)227 4126 y(connect)e(it)h(to)g(an)f(external)f
-(data)h(store)g(b)n(y)g(reading)f(and)h(writing)g(the)h(resulting)f
-(text.)57 b(These)34 b(functions)227 4226 y(should)40
-b(p)r(erform)f(an)n(y)h(con)n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g
-(external)f(c)n(haracter)f(enco)r(dings)h(and)h(the)g(in)n(ternal)227
-4325 y(ASCI)r(I)31 b(enco)r(ding.)44 b(If)31 b(no)f(suc)n(h)g
-(functions)g(are)f(supplied,)i(a)f(Channel)g(will)h(read)e(from)h
-(standard)f(input)i(and)227 4425 y(write)d(to)f(standard)g(output.)227
-4549 y(Supp)r(ort)36 b(for)f(STC-S)g(is)g(curren)n(tly)g(based)g(on)g
-(the)g(IV)n(O)n(A)g(do)r(cumen)n(t)h Ft(")p Fj(STC-S:)f(Space-Time)g
-(Co)r(ordinate)227 4648 y(\(STC\))22 b(Metadata)d(Linear)h(String)g
-(Implemen)n(tation)p Ft(")p Fj(,)i(v)n(ersion)d(1.30)g(\(dated)i(5th)g
-(Decem)n(b)r(er)f(2007\),)h(a)n(v)-5 b(ailable)227 4748
-y(at)21 b(h)n(ttp://www.iv)n(oa.net/Do)r(cumen)n(ts/latest/STC-S.h)n
-(tml.)32 b(Note,)23 b(this)e(do)r(cumen)n(t)h(is)f(a)g(recommednation)
-227 4848 y(only)27 b(and)h(do)r(es)f(not)h(constitute)g(an)f(accepted)g
-(IV)n(O)n(A)g(standard.)227 4972 y(The)f(full)h(text)f(of)g(v)n(ersion)
-e(1.30)g(is)i(supp)r(orted)g(b)n(y)f(the)h(StcsChan)g(class,)f(with)i
-(the)f(follo)n(wing)f(exceptions)g(and)227 5071 y(pro)n(visos:)340
-5330 y Fi(\017)45 b Fj(When)28 b(reading)f(an)g(STC-S)h(phrase,)e(case)
-h(is)h(ignored)e(except)i(when)f(reading)g(units)h(strings.)340
-5462 y Fi(\017)45 b Fj(There)31 b(is)g(no)h(supp)r(ort)f(for)g(m)n
-(ultiple)h(in)n(terv)-5 b(als)30 b(sp)r(eci\014ed)i(within)g(a)f
-(TimeIn)n(terv)-5 b(al,)32 b(P)n(ositionIn)n(terv)-5
-b(al,)427 5561 y(Sp)r(ectralIn)n(terv)g(al)27 b(or)g(RedshiftIn)n(terv)
--5 b(al.)340 5693 y Fi(\017)45 b Fj(If)28 b(the)g(ET)f(timescale)h(is)f
-(sp)r(eci\014ed,)h(TT)g(is)f(used)h(instead.)p eop end
-%%Page: 520 530
-TeXDict begin 520 529 bop 0 52 a FF(520)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(If)28 b(the)g(TEB)f(timescale)g(is)h(sp)r(eci\014ed,)g(TDB)g(is)f
-(used)h(instead.)340 484 y Fi(\017)45 b Fj(The)28 b(LOCAL)f(timescale)g
-(is)h(not)f(supp)r(orted.)340 617 y Fi(\017)45 b Fj(The)26
-b(AST)g(TimeF)-7 b(rame)25 b(and)h(SkyF)-7 b(rame)25
-b(classes)f(do)h(not)h(curren)n(tly)f(allo)n(w)f(a)h(reference)g(p)r
-(osition)h(to)f(b)r(e)427 717 y(sp)r(eci\014ed.)45 b(Consequen)n(tly)-7
-b(,)30 b(an)n(y)f Fl(<)p Fj(refp)r(os)p Fl(>)g Fj(sp)r(eci\014ed)h
-(within)h(the)f(Time)g(or)g(Space)f(sub-phrase)g(of)h(an)427
-817 y(STC-S)e(do)r(cumen)n(t)g(is)f(ignored.)340 950
-y Fi(\017)45 b Fj(The)28 b(Con)n(v)n(ex)e(iden)n(ti\014er)i(for)f(the)h
-(space)e(sub-phrase)h(is)g(not)h(supp)r(orted.)340 1083
-y Fi(\017)45 b Fj(The)28 b(GEO)p Ft(_)p Fj(C)e(and)i(GEO)p
-Ft(_)p Fj(D)f(space)g(frames)f(are)h(not)h(supp)r(orted.)340
-1216 y Fi(\017)45 b Fj(The)28 b(UNITSPHERE)f(and)h(SPHER3)e(space)h
-(\015a)n(v)n(ours)e(are)i(not)h(supp)r(orted.)340 1349
-y Fi(\017)45 b Fj(If)33 b(an)n(y)f(Error)d(v)-5 b(alues)32
-b(are)g(supplied)g(in)h(a)f(space)f(sub-phrase,)i(then)f(the)h(n)n(um)n
-(b)r(er)f(of)g(v)-5 b(alues)32 b(supplied)427 1448 y(should)c(equal)f
-(the)i(n)n(um)n(b)r(er)f(of)g(spatial)f(axes,)g(and)h(the)g(v)-5
-b(alues)28 b(are)f(assumed)g(to)h(sp)r(ecify)g(an)g(error)e(b)r(o)n(x)
-427 1548 y(\(i.e.)38 b(error)25 b(circles,)i(ellipses,)g(etc,)h(are)f
-(not)g(supp)r(orted\).)340 1681 y Fi(\017)45 b Fj(The)35
-b(sp)r(ectral)g(and)f(redshift)h(sub-phrases)f(do)g(not)h(supp)r(ort)g
-(the)g(follo)n(wing)f Fl(<)p Fj(refp)r(os)p Fl(>)f Fj(v)-5
-b(alues:)51 b(LO-)427 1781 y(CAL)p Ft(_)p Fj(GR)n(OUP)p
-Ft(_)p Fj(CENTER,)41 b(UNKNO)n(WNRefP)n(os,)46 b(EMBAR)-7
-b(YCENTER,)42 b(MOON,)g(MER)n(CUR)-7 b(Y,)427 1880 y(VENUS,)28
-b(MARS,)h(JUPITER,)d(SA)-7 b(TURN,)29 b(URANUS,)g(NEPTUNE,)e(PLUTO.)340
-2013 y Fi(\017)45 b Fj(Error)26 b(v)-5 b(alues)27 b(are)f(supp)r(orted)
-i(but)g(error)e(ranges)g(are)g(not.)340 2146 y Fi(\017)45
-b Fj(Resolution,)27 b(PixSize)g(and)h(Size)g(v)-5 b(alues)27
-b(are)f(ignored.)340 2280 y Fi(\017)45 b Fj(Space)28
-b(v)n(elo)r(cit)n(y)e(sub-phrases)g(are)h(ignored.)0
-2442 y Fd(Constructor)32 b(F)-8 b(unction:)227 2541 y
-Fj(astStcsChan)-2 2691 y Fd(Inheritance)n(:)227 2837
-y Fj(The)28 b(StcsChan)f(class)g(inherits)h(from)f(the)h(Channel)f
-(class.)-2 2987 y Fd(A)m(ttributes)n(:)227 3133 y Fj(In)36
-b(addition)g(to)g(those)f(attributes)h(common)f(to)h(all)g(Channels,)h
-(ev)n(ery)e(StcsChan)g(also)g(has)g(the)i(follo)n(wing)227
-3233 y(attributes:)340 3495 y Fi(\017)45 b Fj(StcsArea:)36
-b(Return)28 b(the)g(Co)r(ordinateArea)e(comp)r(onen)n(t)h(after)g
-(reading)g(an)g(STC-S?)340 3628 y Fi(\017)45 b Fj(StcsCo)r(ords:)36
-b(Return)28 b(the)g(Co)r(ordinates)e(comp)r(onen)n(t)h(after)h(reading)
-e(an)h(STC-S?)340 3761 y Fi(\017)45 b Fj(StcsInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)f(inden)n(tation)h(and)f(line)h(feeds)
-340 3894 y Fi(\017)45 b Fj(StcsLength:)37 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 4027 y Fi(\017)45 b
-Fj(StcsProps:)36 b(Return)27 b(the)h(STC-S)g(prop)r(erties)f(after)g
-(reading)f(an)i(STC-S?)-2 4189 y Fd(F)-8 b(unctions)n(:)227
-4335 y Fj(The)34 b(StcsChan)g(class)f(do)r(es)h(not)f(de\014ne)i(an)n
-(y)e(new)h(functions)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 4435 y(Channels.)p 0 4635
-3780 12 v 0 4766 a Fz(Switc)l(hMap)268 b Fe(A)39 b(Mapping)f(that)f
-(encapsulates)h(a)h(set)f(of)1394 4881 y(alternate)e(Mappings)3120
-4766 y Fz(Switc)l(hMap)0 5070 y Fd(Description:)44 b
-Fj(A)31 b(Switc)n(hMap)f(is)g(a)f(Mapping)h(whic)n(h)g(represen)n(ts)e
-(a)i(set)g(of)g(alternate)f(Mappings,)h(eac)n(h)g(of)g(whic)n(h)227
-5170 y(is)e(used)f(to)g(transform)g(p)r(ositions)g(within)h(a)f
-(particular)f(region)g(of)i(the)g(input)g(or)f(output)h(co)r(ordinate)e
-(system)227 5269 y(of)i(the)g(Switc)n(hMap.)227 5394
-y(A)34 b(Switc)n(hMap)e(can)h(encapsulate)f(an)n(y)g(n)n(um)n(b)r(er)h
-(of)g(Mappings,)h(but)f(they)h(m)n(ust)f(all)f(ha)n(v)n(e)g(the)h(same)
-g(n)n(um-)227 5494 y(b)r(er)d(of)g(inputs)h(\(Nin)f(attribute)g(v)-5
-b(alue\))31 b(and)e(the)i(same)e(n)n(um)n(b)r(er)h(of)g(outputs)g
-(\(Nout)g(attribute)g(v)-5 b(alue\).)45 b(The)227 5593
-y(Switc)n(hMap)20 b(itself)h(inherits)f(these)g(same)g(v)-5
-b(alues)20 b(for)f(its)i(Nin)f(and)g(Nout)h(attributes.)34
-b(Eac)n(h)19 b(of)h(these)g(Mappings)227 5693 y(represen)n(ts)33
-b(a)h Ft(")p Fj(route)p Ft(")f Fj(through)h(the)g(switc)n(h,)i(and)e
-(are)g(referred)f(to)h(as)g Ft(")p Fj(route)p Ft(")e
-Fj(Mappings)i(b)r(elo)n(w.)57 b(Eac)n(h)p eop end
-%%Page: 521 531
-TeXDict begin 521 530 bop 3643 52 a FF(521)227 351 y
-Fj(route)30 b(Mapping)f(transforms)g(p)r(ositions)h(b)r(et)n(w)n(een)g
-(the)g(input)h(and)f(output)g(co)r(ordinate)f(space)h(of)g(the)g(en)n
-(tire)227 451 y(Switc)n(hMap,)f(but)h(only)e(one)h(Mapping)f(will)h(b)r
-(e)h(used)e(to)h(transform)f(an)n(y)g(giv)n(en)g(p)r(osition.)40
-b(The)29 b(selection)g(of)227 551 y(the)e(appropriate)e(route)h
-(Mapping)g(to)g(use)g(with)h(an)n(y)f(giv)n(en)f(input)j(p)r(osition)e
-(is)g(made)g(b)n(y)g(another)g(Mapping,)227 650 y(called)31
-b(the)h Ft(")p Fj(selector)p Ft(")e Fj(Mapping.)48 b(Eac)n(h)30
-b(Switc)n(hMap)i(encapsulates)e(t)n(w)n(o)h(selector)f(Mappings)h(in)h
-(addition)227 750 y(to)d(its)g(route)f(Mappings;)h(one)g(for)f(use)h
-(with)g(the)g(Switc)n(hMap's)g(forw)n(ard)e(transformation)g(\(called)i
-(the)g Ft(")p Fj(for-)227 849 y(w)n(ard)24 b(selector)g(Mapping)p
-Ft(")p Fj(\),)i(and)f(one)g(for)f(use)h(with)h(the)g(Switc)n(hMap's)f
-(in)n(v)n(erse)f(transformation)f(\(called)i(the)227
-949 y Ft(")p Fj(in)n(v)n(erse)f(selector)h(Mapping)p
-Ft(")p Fj(\).)36 b(The)26 b(forw)n(ard)f(selector)g(Mapping)g(m)n(ust)h
-(ha)n(v)n(e)f(the)i(same)e(n)n(um)n(b)r(er)h(of)g(inputs)227
-1049 y(as)k(the)h(route)e(Mappings,)i(but)g(should)f(ha)n(v)n(e)f(only)
-h(one)g(output.)45 b(Lik)n(ewise,)30 b(the)h(in)n(v)n(erse)e(selector)g
-(Mapping)227 1148 y(m)n(ust)f(ha)n(v)n(e)e(the)i(same)f(n)n(um)n(b)r
-(er)h(of)f(outputs)h(as)f(the)h(route)f(Mappings,)g(but)h(should)g(ha)n
-(v)n(e)e(only)h(one)h(input.)227 1279 y(When)40 b(the)g(Switc)n(hMap)f
-(is)h(used)f(to)g(transform)g(a)g(p)r(osition)g(in)h(the)f(forw)n(ard)f
-(direction)h(\(from)h(input)g(to)227 1379 y(output\),)g(eac)n(h)35
-b(supplied)h(input)h(p)r(osition)f(is)h(\014rst)e(transformed)h(b)n(y)f
-(the)i(forw)n(ard)e(transformation)f(of)i(the)227 1478
-y(forw)n(ard)27 b(selector)g(Mapping.)38 b(This)28 b(pro)r(duces)f(a)h
-(single)f(output)i(v)-5 b(alue)28 b(for)g(eac)n(h)f(input)i(p)r
-(osition)f(referred)f(to)227 1578 y(as)j(the)h(selector)e(v)-5
-b(alue.)45 b(The)30 b(nearest)f(in)n(teger)h(to)g(the)g(selector)g(v)-5
-b(alue)30 b(is)g(found,)h(and)f(is)g(used)h(to)f(index)g(the)227
-1678 y(arra)n(y)25 b(of)i(route)f(Mappings)g(\(the)i(\014rst)f
-(supplied)g(route)f(Mapping)h(has)f(index)h(1,)g(the)g(second)g(route)f
-(Mapping)227 1777 y(has)34 b(index)h(2,)h(etc\).)59 b(If)35
-b(the)g(nearest)f(in)n(teger)g(to)g(the)h(selector)f(v)-5
-b(alue)35 b(is)f(less)h(than)f(1)h(or)e(greater)g(than)i(the)227
-1877 y(n)n(um)n(b)r(er)c(of)f(route)g(Mappings,)h(then)h(the)f(Switc)n
-(hMap)f(output)i(p)r(osition)e(is)h(set)f(to)h(a)f(v)-5
-b(alue)31 b(of)g(AST)p Ft(__)p Fj(BAD)227 1976 y(on)k(ev)n(ery)g(axis.)
-59 b(Otherwise,)37 b(the)f(forw)n(ard)e(transformation)f(of)j(the)g
-(selected)f(route)g(Mapping)g(is)g(used)h(to)227 2076
-y(transform)27 b(the)h(supplied)g(input)g(p)r(osition)f(to)h(pro)r
-(duce)f(the)h(Switc)n(hMap)g(output)g(p)r(osition.)227
-2207 y(When)33 b(the)g(Switc)n(hMap)f(is)g(used)g(to)g(transform)f(a)h
-(p)r(osition)g(in)h(the)f(in)n(v)n(erse)f(direction)h(\(from)g
-Ft(")p Fj(output)p Ft(")g Fj(to)227 2306 y Ft(")p Fj(input)p
-Ft(")p Fj(\),)26 b(eac)n(h)f(supplied)g Ft(")p Fj(output)p
-Ft(")g Fj(p)r(osition)g(is)g(\014rst)g(transformed)f(b)n(y)h(the)h(in)n
-(v)n(erse)e(transformation)f(of)i(the)227 2406 y(in)n(v)n(erse)31
-b(selector)f(Mapping.)49 b(This)32 b(pro)r(duces)f(a)g(selector)g(v)-5
-b(alue)31 b(for)g(eac)n(h)g Ft(")p Fj(output)p Ft(")h
-Fj(p)r(osition.)49 b(Again,)32 b(the)227 2506 y(nearest)g(in)n(teger)f
-(to)i(the)g(selector)e(v)-5 b(alue)32 b(is)h(found,)h(and)e(is)g(used)h
-(to)f(index)h(the)g(arra)n(y)d(of)i(route)g(Mappings.)227
-2605 y(If)f(this)f(selector)g(index)g(v)-5 b(alue)30
-b(is)g(within)h(the)g(b)r(ounds)f(of)g(the)h(arra)n(y)d(of)i(route)f
-(Mappings,)i(then)f(the)h(in)n(v)n(erse)227 2705 y(transformation)26
-b(of)i(the)g(selected)f(route)g(Mapping)g(is)g(used)h(to)f(transform)g
-(the)h(supplied)g Ft(")p Fj(output)p Ft(")f Fj(p)r(osition)227
-2805 y(to)32 b(pro)r(duce)f(the)h(Switc)n(hMap)f Ft(")p
-Fj(input)p Ft(")h Fj(p)r(osition.)49 b(If)32 b(the)g(selector)e(index)i
-(v)-5 b(alue)31 b(is)h(outside)f(the)h(b)r(ounds)g(of)227
-2904 y(the)25 b(arra)n(y)e(of)h(route)g(Mappings,)h(then)g(the)g(Switc)
-n(hMap)g Ft(")p Fj(input)p Ft(")f Fj(p)r(osition)h(is)f(set)h(to)f(a)g
-(v)-5 b(alue)25 b(of)g(AST)p Ft(__)p Fj(BAD)227 3004
-y(on)j(ev)n(ery)e(axis.)227 3135 y(In)f(practice,)f(appropriate)e
-(selector)h(Mappings)g(should)h(b)r(e)h(c)n(hosen)e(to)h(asso)r(ciate)f
-(a)g(di\013eren)n(t)h(route)g(Mapping)227 3234 y(with)30
-b(eac)n(h)e(region)g(of)h(co)r(ordinate)f(space.)41 b(Note)30
-b(that)f(the)h(SelectorMap)e(class)g(of)h(Mapping)g(is)g(particularly)
-227 3334 y(appropriate)d(for)h(this)h(purp)r(ose.)227
-3465 y(If)38 b(a)f(comp)r(ound)g(Mapping)g(con)n(tains)f(a)h(Switc)n
-(hMap)g(in)g(series)f(with)i(its)f(o)n(wn)g(in)n(v)n(erse,)h(the)f(com)
-n(bination)227 3564 y(of)31 b(the)h(t)n(w)n(o)f(adjacen)n(t)f(Switc)n
-(hMaps)h(will)h(b)r(e)f(replaced)g(b)n(y)g(a)g(UnitMap)g(when)h(the)g
-(comp)r(ound)f(Mapping)g(is)227 3664 y(simpli\014ed)d(using)g
-(astSimplify)-7 b(.)0 3826 y Fd(Constructor)32 b(F)-8
-b(unction:)227 3925 y Fj(astSwitc)n(hMap)-2 4087 y Fd(Inheritance)n(:)
-227 4233 y Fj(The)28 b(Switc)n(hMap)f(class)g(inherits)h(from)f(the)h
-(Mapping)f(class.)-2 4395 y Fd(A)m(ttributes)n(:)227
-4541 y Fj(The)h(Switc)n(hMap)g(class)f(do)r(es)h(not)g(de\014ne)g(an)n
-(y)f(new)h(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)g(are)f
-(applicable)g(to)h(all)227 4641 y(Mappings.)-2 4803 y
-Fd(F)-8 b(unctions)n(:)227 4949 y Fj(The)30 b(Switc)n(hMap)g(class)e
-(do)r(es)i(not)f(de\014ne)h(an)n(y)f(new)h(functions)g(b)r(ey)n(ond)f
-(those)g(whic)n(h)h(are)e(applicable)h(to)h(all)227 5049
-y(Mappings.)p 0 5260 3780 12 v 0 5392 a Fz(TimeF)-11
-b(rame)304 b Fe(Time)38 b(co)s(ordinate)e(system)j(description)301
-b Fz(TimeF)-11 b(rame)0 5593 y Fd(Description:)44 b Fj(A)37
-b(TimeF)-7 b(rame)35 b(is)h(a)f(sp)r(ecialised)h(form)f(of)h
-(one-dimensional)e(F)-7 b(rame)36 b(whic)n(h)f(represen)n(ts)g(v)-5
-b(arious)227 5693 y(co)r(ordinate)27 b(systems)g(used)g(to)h(describ)r
-(e)f(p)r(ositions)g(in)h(time.)p eop end
-%%Page: 522 532
-TeXDict begin 522 531 bop 0 52 a FF(522)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)227 351 y Fj(A)23 b(TimeF)-7
-b(rame)21 b(represen)n(ts)g(a)g(momen)n(t)h(in)g(time)h(as)e(either)h
-(an)f(Mo)r(di\014ed)i(Julian)e(Date)h(\(MJD\),)h(a)f(Julian)f(Date)227
-451 y(\(JD\),)f(a)f(Besselian)e(ep)r(o)r(c)n(h)i(or)f(a)h(Julian)g(ep)r
-(o)r(c)n(h,)h(as)f(determined)g(b)n(y)f(the)i(System)f(attribute.)34
-b(Optionally)-7 b(,)20 b(a)f(zero)227 551 y(p)r(oin)n(t)30
-b(can)g(b)r(e)g(sp)r(eci\014ed)h(\(using)e(attribute)i(TimeOrigin\))e
-(whic)n(h)h(results)f(in)h(the)h(TimeF)-7 b(rame)29 b(represen)n(ting)
-227 650 y(time)f(o\013sets)g(from)f(the)h(sp)r(eci\014ed)g(zero)e(p)r
-(oin)n(t.)227 772 y(Ev)n(en)g(though)g(JD)g(and)g(MJD)g(are)g
-(de\014ned)g(as)g(b)r(eing)g(in)g(units)h(of)f(da)n(ys,)g(the)g(TimeF)
--7 b(rame)26 b(class)f(allo)n(ws)g(other)227 872 y(units)31
-b(to)g(b)r(e)g(used)f(\(via)h(the)g(Unit)g(attribute\))g(on)f(the)h
-(basis)f(of)h(simple)g(scalings)e(\(60)h(seconds)g(=)g(1)g(min)n(ute,)
-227 971 y(60)i(min)n(utes)h(=)f(1)h(hour,)g(24)f(hours)g(=)g(1)g(da)n
-(y)-7 b(,)33 b(365.25)e(da)n(ys)h(=)g(1)g(y)n(ear\).)51
-b(Lik)n(ewise,)33 b(Julian)g(ep)r(o)r(c)n(hs)f(can)g(b)r(e)227
-1071 y(describ)r(ed)f(in)f(units)h(other)f(than)h(the)g(usual)f(y)n
-(ears.)44 b(Besselian)29 b(ep)r(o)r(c)n(h)i(are)e(alw)n(a)n(ys)g
-(represen)n(ted)g(in)i(units)g(of)227 1171 y(\(tropical\))c(y)n(ears.)
-227 1293 y(The)33 b(TimeScale)e(attribute)i(allo)n(ws)e(the)h(time)h
-(scale)e(to)h(b)r(e)h(sp)r(eci\014ed)g(\(that)f(is,)i(the)e(ph)n
-(ysical)g(pro)r(cess)f(used)227 1392 y(to)e(de\014ne)g(the)g(rate)f(of)
-g(\015o)n(w)g(of)h(time\).)41 b(MJD,)29 b(JD)g(and)f(Julian)g(ep)r(o)r
-(c)n(h)h(can)f(b)r(e)h(used)g(to)f(represen)n(t)g(a)g(time)h(in)227
-1492 y(an)n(y)d(supp)r(orted)h(time)g(scale.)36 b(Ho)n(w)n(ev)n(er,)25
-b(Besselian)h(ep)r(o)r(c)n(h)g(ma)n(y)g(only)h(b)r(e)g(used)g(with)g
-(the)g Ft(")p Fj(TT)p Ft(")f Fj(\(T)-7 b(errestrial)227
-1592 y(Time\))39 b(time)g(scale.)70 b(The)38 b(list)h(of)g(supp)r
-(orted)f(time)h(scales)f(includes)h(univ)n(ersal)e(time)i(and)f
-(siderial)g(time.)227 1691 y(Strictly)-7 b(,)30 b(these)g(represen)n(t)
-e(angles)g(rather)g(than)i(time)f(scales,)g(but)h(are)e(included)i(in)g
-(the)f(list)h(since)f(they)h(are)227 1791 y(in)e(common)f(use)h(and)f
-(are)g(often)h(though)n(t)f(of)g(as)g(time)h(scales.)227
-1913 y(When)h(a)e(time)h(v)-5 b(alue)28 b(is)f(formatted)h(it)g(can)f
-(b)r(e)h(formated)g(either)f(as)g(a)h(simple)g(\015oating)e(p)r(oin)n
-(t)i(v)-5 b(alue,)28 b(or)f(as)g(a)227 2012 y(Gregorian)f(date)h(\(see)
-h(the)g(F)-7 b(ormat)27 b(attribute\).)0 2157 y Fd(Constructor)32
-b(F)-8 b(unction:)227 2256 y Fj(astTimeF)h(rame)-2 2401
-y Fd(Inheritance)n(:)227 2547 y Fj(The)28 b(TimeF)-7
-b(rame)27 b(class)g(inherits)g(from)g(the)h(F)-7 b(rame)28
-b(class.)-2 2691 y Fd(A)m(ttributes)n(:)227 2837 y Fj(In)36
-b(addition)g(to)f(those)h(attributes)f(common)g(to)h(all)f(F)-7
-b(rames,)37 b(ev)n(ery)e(TimeF)-7 b(rame)35 b(also)f(has)i(the)g(follo)
-n(wing)227 2937 y(attributes:)340 3190 y Fi(\017)45 b
-Fj(AlignTimeScale:)37 b(Time)28 b(scale)e(in)i(whic)n(h)g(to)f(align)g
-(TimeF)-7 b(rames)340 3318 y Fi(\017)45 b Fj(L)-7 b(TO\013set:)37
-b(The)28 b(o\013set)f(of)h(Lo)r(cal)f(Time)g(from)h(UTC,)g(in)g(hours.)
-340 3446 y Fi(\017)45 b Fj(TimeOrigin:)36 b(The)28 b(zero)e(p)r(oin)n
-(t)i(for)f(TimeF)-7 b(rame)27 b(axis)g(v)-5 b(alues)340
-3574 y Fi(\017)45 b Fj(TimeScale:)37 b(The)27 b(timescale)h(used)f(b)n
-(y)h(the)g(TimeF)-7 b(rame)227 3731 y(Sev)n(eral)33 b(of)i(the)g(F)-7
-b(rame)34 b(attributes)h(inherited)f(b)n(y)h(the)g(TimeF)-7
-b(rame)34 b(class)g(refer)f(to)i(a)f(sp)r(eci\014c)h(axis)f(of)g(the)
-227 3830 y(F)-7 b(rame)30 b(\(for)g(instance)g(Unit\(axis\),)h(Lab)r
-(el\(axis\),)g(etc\).)45 b(Since)30 b(a)g(TimeF)-7 b(rame)30
-b(is)g(strictly)g(one-dimensional,)227 3930 y(it)f(allo)n(ws)e(these)h
-(attributes)g(to)g(b)r(e)g(sp)r(eci\014ed)g(without)h(an)f(axis)f
-(index.)39 b(So)27 b(for)h(instance,)g Ft(")p Fj(Unit)p
-Ft(")g Fj(is)g(allo)n(w)n(ed)227 4029 y(in)g(place)f(of)h
-Ft(")p Fj(Unit\(1\))p Ft(")p Fj(.)-2 4174 y Fd(F)-8 b(unctions)n(:)227
-4320 y Fj(In)25 b(addition)f(to)g(those)g(functions)h(applicable)e(to)h
-(all)g(F)-7 b(rames,)25 b(the)f(follo)n(wing)g(functions)g(ma)n(y)g
-(also)f(b)r(e)i(applied)227 4420 y(to)j(all)f(TimeF)-7
-b(rames:)340 4673 y Fi(\017)45 b Fj(astCurren)n(tTime:)36
-b(Return)28 b(the)g(curren)n(t)e(system)i(time)p 0 4862
-3780 12 v 0 4994 a Fz(TimeMap)290 b Fe(Sequence)39 b(of)f(time)g(co)s
-(ordinate)e(con)m(v)m(ersions)288 b Fz(TimeMap)0 5172
-y Fd(Description:)44 b Fj(A)22 b(TimeMap)e(is)h(a)f(sp)r(ecialised)h
-(form)f(of)h(1-dimensional)e(Mapping)i(whic)n(h)g(can)f(b)r(e)h(used)g
-(to)g(represen)n(t)227 5272 y(a)27 b(sequence)h(of)f(con)n(v)n(ersions)
-e(b)r(et)n(w)n(een)j(standard)e(time)i(co)r(ordinate)f(systems.)227
-5394 y(When)c(a)e(TimeMap)g(is)h(\014rst)f(created,)h(it)h(simply)e(p)r
-(erforms)g(a)h(unit)g(\(n)n(ull\))g(Mapping.)35 b(Using)21
-b(the)h(astTimeAdd)227 5494 y(function,)33 b(a)d(series)g(of)h(co)r
-(ordinate)f(con)n(v)n(ersion)e(steps)j(ma)n(y)f(then)i(b)r(e)f(added.)
-47 b(This)31 b(allo)n(ws)e(m)n(ulti-step)i(con-)227 5593
-y(v)n(ersions)k(b)r(et)n(w)n(een)h(a)g(v)-5 b(ariet)n(y)35
-b(of)h(time)h(co)r(ordinate)e(systems)g(to)h(b)r(e)h(assem)n(bled)e
-(out)h(of)g(a)g(set)g(of)g(building)227 5693 y(blo)r(c)n(ks.)p
-eop end
-%%Page: 523 533
-TeXDict begin 523 532 bop 3643 52 a FF(523)227 351 y
-Fj(F)-7 b(or)20 b(details)h(of)g(the)g(individual)g(co)r(ordinate)e
-(con)n(v)n(ersions)g(a)n(v)-5 b(ailable,)21 b(see)f(the)h(description)f
-(of)h(the)g(astTimeAdd)227 451 y(function.)0 610 y Fd(Constructor)32
-b(F)-8 b(unction:)227 710 y Fj(astTimeMap)27 b(\(also)g(see)g
-(astTimeAdd\))-2 870 y Fd(Inheritance)n(:)227 1016 y
-Fj(The)h(TimeMap)f(class)g(inherits)h(from)f(the)h(Mapping)f(class.)-2
-1175 y Fd(A)m(ttributes)n(:)227 1321 y Fj(The)32 b(TimeMap)f(class)g
-(do)r(es)g(not)g(de\014ne)h(an)n(y)f(new)g(attributes)h(b)r(ey)n(ond)f
-(those)g(whic)n(h)g(are)g(applicable)g(to)g(all)227 1421
-y(Mappings.)-2 1580 y Fd(F)-8 b(unctions)n(:)227 1727
-y Fj(In)21 b(addition)f(to)g(those)g(functions)g(applicable)g(to)g(all)
-g(Mappings,)h(the)g(follo)n(wing)e(function)h(ma)n(y)g(also)f(b)r(e)i
-(applied)227 1826 y(to)28 b(all)f(TimeMaps:)340 2102
-y Fi(\017)45 b Fj(astTimeAdd:)37 b(Add)29 b(a)e(time)h(co)r(ordinate)e
-(con)n(v)n(ersion)g(to)h(an)g(TimeMap)p 0 2312 3780 12
-v 0 2442 a Fz(T)-11 b(ranMap)772 2443 y Fe(Mapping)38
-b(with)g(sp)s(eci\014ed)h(forw)m(ard)d(and)j(in)m(v)m(erse)1488
-2558 y(transformations)3234 2442 y Fz(T)-11 b(ranMap)0
-2734 y Fd(Description:)44 b Fj(A)27 b(T)-7 b(ranMap)25
-b(is)h(a)f(Mapping)h(whic)n(h)g(com)n(bines)f(the)i(forw)n(ard)d
-(transformation)g(of)i(a)g(supplied)g(Map-)227 2833 y(ping)i(with)h
-(the)g(in)n(v)n(erse)e(transformation)f(of)j(another)e(supplied)i
-(Mapping,)f(ignoring)e(the)j(un-used)f(transfor-)227
-2933 y(mation)g(in)f(eac)n(h)g(Mapping)h(\(indeed)g(the)g(un-used)f
-(transformation)f(need)i(not)f(exist\).)227 3062 y(When)h(the)f(forw)n
-(ard)e(transformation)h(of)h(the)g(T)-7 b(ranMap)26 b(is)h(referred)f
-(to,)h(the)g(transformation)e(actually)i(used)227 3162
-y(is)k(the)g(forw)n(ard)e(transformation)h(of)g(the)i(\014rst)e
-(Mapping)h(supplied)g(when)g(the)g(T)-7 b(ranMap)30 b(w)n(as)g
-(constructed.)227 3262 y(Lik)n(ewise,)j(when)f(the)h(in)n(v)n(erse)d
-(transformation)h(of)h(the)h(T)-7 b(ranMap)31 b(is)h(referred)f(to,)i
-(the)g(transformation)d(ac-)227 3361 y(tually)f(used)g(is)g(the)g(in)n
-(v)n(erse)f(transformation)f(of)i(the)h(second)e(Mapping)h(supplied)g
-(when)g(the)h(T)-7 b(ranMap)28 b(w)n(as)227 3461 y(constructed.)0
-3620 y Fd(Constructor)k(F)-8 b(unction:)227 3720 y Fj(astT)h(ranMap)-2
-3880 y Fd(Inheritance)n(:)227 4026 y Fj(The)28 b(T)-7
-b(ranMap)27 b(class)f(inherits)i(from)f(the)h(Mapping)f(class.)-2
-4185 y Fd(A)m(ttributes)n(:)227 4331 y Fj(The)33 b(T)-7
-b(ranMap)31 b(class)h(do)r(es)g(not)h(de\014ne)f(an)n(y)g(new)h
-(attributes)f(b)r(ey)n(ond)g(those)h(whic)n(h)f(are)g(applicable)f(to)i
-(all)227 4431 y(Mappings.)-2 4591 y Fd(F)-8 b(unctions)n(:)227
-4737 y Fj(The)35 b(T)-7 b(ranMap)33 b(class)g(do)r(es)h(not)g(de\014ne)
-h(an)n(y)e(new)h(functions)h(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)f
-(applicable)h(to)g(all)227 4836 y(Mappings.)p 0 5046
-V 0 5177 a Fz(UnitMap)1368 5184 y Fe(Unit)k(\(n)m(ull\))f(Mapping)3244
-5177 y Fz(UnitMap)0 5394 y Fd(Description:)44 b Fj(A)36
-b(UnitMap)g(is)f(a)g(unit)g(\(n)n(ull\))h(Mapping)f(that)h(has)e(no)h
-(e\013ect)h(on)f(the)g(co)r(ordinates)f(supplied)i(to)227
-5494 y(it.)47 b(They)31 b(are)f(simply)h(copied.)46 b(This)31
-b(can)f(b)r(e)i(useful)f(if)g(a)g(Mapping)f(is)h(required)f(\(e.g.)46
-b(to)31 b(pass)f(to)h(another)227 5593 y(function\))h(but)f(y)n(ou)f
-(do)g(not)h(w)n(an)n(t)f(it)h(to)f(ha)n(v)n(e)g(an)n(y)f(e\013ect.)47
-b(The)30 b(Nin)h(and)g(Nout)g(attributes)f(of)h(a)f(UnitMap)227
-5693 y(are)d(alw)n(a)n(ys)f(equal)h(and)g(are)g(sp)r(eci\014ed)h(when)f
-(it)h(is)g(created.)p eop end
-%%Page: 524 534
-TeXDict begin 524 533 bop 0 52 a FF(524)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)0 351 y Fd(Constructor)j(F)-8
-b(unction:)227 451 y Fj(astUnitMap)-2 595 y Fd(Inheritance)n(:)227
-741 y Fj(The)28 b(UnitMap)g(class)f(inherits)g(from)g(the)h(Mapping)g
-(class.)-2 885 y Fd(A)m(ttributes)n(:)227 1031 y Fj(The)33
-b(UnitMap)h(class)e(do)r(es)h(not)g(de\014ne)h(an)n(y)e(new)h
-(attributes)g(b)r(ey)n(ond)g(those)g(whic)n(h)g(are)f(applicable)h(to)g
-(all)227 1130 y(Mappings.)-2 1274 y Fd(F)-8 b(unctions)n(:)227
-1420 y Fj(The)35 b(UnitMap)h(class)e(do)r(es)g(not)h(de\014ne)g(an)n(y)
-f(new)h(functions)g(b)r(ey)n(ond)g(those)f(whic)n(h)h(are)f(applicable)
-g(to)h(all)227 1520 y(Mappings.)p 0 1708 3780 12 v 0
-1839 a Fz(WcsMap)879 1840 y Fe(Implemen)m(t)i(a)i(FITS-W)m(CS)g(sky)f
-(pro)7 b(jection)3260 1839 y Fz(WcsMap)0 2017 y Fd(Description:)44
-b Fj(This)28 b(class)e(is)i(used)f(to)g(represen)n(t)g(sky)g(co)r
-(ordinate)f(pro)5 b(jections)26 b(as)h(describ)r(ed)g(in)h(the)g(FITS)g
-(w)n(orld)227 2117 y(co)r(ordinate)k(system)g(\(FITS-W)n(CS\))i(pap)r
-(er)e(I)r(I)h Ft(")p Fj(Represen)n(tations)e(of)i(Celestial)f(Co)r
-(ordinates)f(in)i(FITS)p Ft(")g Fj(b)n(y)227 2216 y(M.)c(Calabretta)f
-(and)g(E.W.)h(Griesen.)40 b(This)29 b(pap)r(er)f(de\014nes)h(a)f(set)h
-(of)f(functions,)i(or)e(sky)g(pro)5 b(jections,)28 b(whic)n(h)227
-2316 y(transform)33 b(longitude-latitude)g(pairs)g(represen)n(ting)f
-(spherical)h(celestial)g(co)r(ordinates)f(in)n(to)i(corresp)r(onding)
-227 2416 y(pairs)27 b(of)g(Cartesian)g(co)r(ordinates)f(\(and)i(vice)f
-(v)n(ersa\).)227 2537 y(A)k(WcsMap)f(is)g(a)g(sp)r(ecialised)g(form)g
-(of)g(Mapping)g(whic)n(h)g(implemen)n(ts)h(these)f(sky)g(pro)5
-b(jections)29 b(and)h(applies)227 2637 y(them)25 b(to)g(a)f(sp)r
-(eci\014ed)h(pair)f(of)g(co)r(ordinates.)35 b(All)25
-b(the)g(pro)5 b(jections)23 b(in)i(the)g(FITS-W)n(CS)g(pap)r(er)f(are)g
-(supp)r(orted,)227 2737 y(plus)32 b(the)f(no)n(w)g(deprecated)f
-Ft(")p Fj(T)-7 b(AN)32 b(with)f(p)r(olynomial)g(correction)e(terms)p
-Ft(")i Fj(pro)5 b(jection)30 b(whic)n(h)h(is)g(refered)g(to)227
-2836 y(here)22 b(b)n(y)g(the)g(co)r(de)g Ft(")p Fj(TPN)p
-Ft(")p Fj(.)34 b(Using)22 b(the)g(FITS-W)n(CS)g(terminology)-7
-b(,)22 b(the)g(transformation)f(is)h(b)r(et)n(w)n(een)g
-Ft(")p Fj(nativ)n(e)227 2936 y(spherical)p Ft(")e Fj(and)h
-Ft(")p Fj(pro)5 b(jection)19 b(plane)p Ft(")i Fj(co)r(ordinates)e
-(\(also)h(called)h Ft(")p Fj(in)n(termediate)f(w)n(orld)g(co)r
-(ordinates)p Ft(")p Fj(.)33 b(These)227 3036 y(co)r(ordinates)20
-b(ma)n(y)-7 b(,)22 b(optionally)-7 b(,)22 b(b)r(e)g(em)n(b)r(edded)g
-(in)g(a)f(space)g(with)g(more)g(than)h(t)n(w)n(o)e(dimensions,)j(the)f
-(remaining)227 3135 y(co)r(ordinates)g(b)r(eing)h(copied)g(unc)n
-(hanged.)35 b(Note,)24 b(ho)n(w)n(ev)n(er,)e(that)i(for)e(consistency)h
-(with)g(other)g(AST)h(facilities,)227 3235 y(a)30 b(WcsMap)f(handles)h
-(co)r(ordinates)f(that)h(represen)n(t)e(angles)h(in)h(radians)f
-(\(rather)g(than)h(the)g(degrees)f(used)h(b)n(y)227 3334
-y(FITS-W)n(CS\).)227 3456 y(The)i(t)n(yp)r(e)g(of)f(FITS-W)n(CS)h(pro)5
-b(jection)31 b(to)g(b)r(e)h(used)g(and)f(the)h(co)r(ordinates)e
-(\(axes\))h(to)h(whic)n(h)f(it)h(applies)g(are)227 3556
-y(sp)r(eci\014ed)g(when)g(a)g(WcsMap)g(is)f(\014rst)h(created.)49
-b(The)32 b(pro)5 b(jection)31 b(t)n(yp)r(e)h(ma)n(y)f(subsequen)n(tly)g
-(b)r(e)h(determined)227 3655 y(using)g(the)f(WcsT)n(yp)r(e)h(attribute)
-g(and)f(the)h(co)r(ordinates)e(on)i(whic)n(h)f(it)h(acts)f(ma)n(y)g(b)r
-(e)h(determined)g(using)f(the)227 3755 y(WcsAxis\(lonlat\))d
-(attribute.)227 3877 y(Eac)n(h)37 b(WcsMap)i(also)e(allo)n(ws)g(up)i
-(to)f(100)f Ft(")p Fj(pro)5 b(jection)37 b(parameters)p
-Ft(")f Fj(to)i(b)r(e)h(asso)r(ciated)e(with)i(eac)n(h)e(axis.)227
-3976 y(These)31 b(sp)r(ecify)h(the)g(precise)f(form)g(of)g(the)h(pro)5
-b(jection,)31 b(and)h(are)e(accessed)g(using)h(PVi)p
-Ft(_)p Fj(m)h(attribute,)g(where)227 4076 y Ft(")p Fj(i)p
-Ft(")27 b Fj(is)h(the)g(in)n(teger)f(axis)h(index)f(\(starting)h(at)g
-(1\),)f(and)h(m)g(is)g(an)g(in)n(teger)f Ft(")p Fj(parameter)f(index)p
-Ft(")h Fj(in)h(the)h(range)d(0)227 4176 y(to)i(99.)39
-b(The)28 b(n)n(um)n(b)r(er)g(of)g(pro)5 b(jection)27
-b(parameters)g(required)g(b)n(y)h(eac)n(h)g(pro)5 b(jection,)27
-b(and)i(their)f(meanings,)g(are)227 4275 y(dep)r(enden)n(t)c(up)r(on)e
-(the)h(pro)5 b(jection)22 b(t)n(yp)r(e)h(\(most)g(pro)5
-b(jections)21 b(either)h(do)h(not)f(use)h(an)n(y)f(pro)5
-b(jection)21 b(parameters,)227 4375 y(or)h(use)g(parameters)f(1)h(and)g
-(2)g(asso)r(ciated)f(with)i(the)g(latitude)g(axis\).)35
-b(Before)21 b(creating)h(a)g(WcsMap)g(y)n(ou)g(should)227
-4475 y(consult)31 b(the)h(FITS-W)n(CS)g(pap)r(er)e(for)h(details)g(of)h
-(whic)n(h)f(pro)5 b(jection)30 b(parameters)g(are)g(required,)i(and)f
-(whic)n(h)227 4574 y(ha)n(v)n(e)h(defaults.)53 b(When)34
-b(creating)e(the)h(WcsMap,)h(y)n(ou)e(m)n(ust)h(explicitly)g(set)g(v)-5
-b(alues)33 b(for)f(all)h(those)g(required)227 4674 y(pro)5
-b(jection)27 b(parameters)f(whic)n(h)h(do)h(not)f(ha)n(v)n(e)g
-(defaults)g(de\014ned)h(in)g(this)g(pap)r(er.)0 4818
-y Fd(Constructor)k(F)-8 b(unction:)227 4917 y Fj(astWcsMap)-2
-5061 y Fd(Inheritance)n(:)227 5207 y Fj(The)28 b(WcsMap)f(class)g
-(inherits)g(from)h(the)g(Mapping)f(class.)-2 5351 y Fd(A)m(ttributes)n
-(:)227 5497 y Fj(In)36 b(addition)g(to)g(those)g(attributes)g(common)f
-(to)h(all)g(Mappings,)h(ev)n(ery)e(WcsMap)h(also)f(has)g(the)i(follo)n
-(wing)227 5597 y(attributes:)p eop end
-%%Page: 525 535
-TeXDict begin 525 534 bop 3643 52 a FF(525)340 351 y
-Fi(\017)45 b Fj(NatLat:)37 b(Nativ)n(e)27 b(latitude)h(of)g(the)g
-(reference)e(p)r(oin)n(t)i(of)g(a)f(FITS-W)n(CS)h(pro)5
-b(jection)340 483 y Fi(\017)45 b Fj(NatLon:)37 b(Nativ)n(e)27
-b(longitude)g(of)h(the)g(reference)f(p)r(oin)n(t)g(of)h(a)f(FITS-W)n
-(CS)h(pro)5 b(jection)340 614 y Fi(\017)45 b Fj(PVi)p
-Ft(_)p Fj(m:)37 b(FITS-W)n(CS)28 b(pro)5 b(jection)26
-b(parameters)340 746 y Fi(\017)45 b Fj(PVMax:)36 b(Maxim)n(um)28
-b(n)n(um)n(b)r(er)f(of)h(FITS-W)n(CS)f(pro)5 b(jection)27
-b(parameters)340 877 y Fi(\017)45 b Fj(WcsAxis\(lonlat\):)37
-b(FITS-W)n(CS)28 b(pro)5 b(jection)27 b(axes)340 1009
-y Fi(\017)45 b Fj(WcsT)n(yp)r(e:)37 b(FITS-W)n(CS)28
-b(pro)5 b(jection)26 b(t)n(yp)r(e)-2 1170 y Fd(F)-8 b(unctions)n(:)227
-1316 y Fj(The)36 b(WcsMap)f(class)f(do)r(es)i(not)f(de\014ne)h(an)n(y)e
-(new)i(functions)g(b)r(ey)n(ond)f(those)g(whic)n(h)g(are)g(applicable)g
-(to)g(all)227 1415 y(Mappings.)p 0 1612 3780 12 v 0 1744
-a Fz(WinMap)180 b Fe(Map)39 b(one)g(windo)m(w)e(on)h(to)g(another)g(b)m
-(y)g(scaling)g(and)1449 1858 y(shifting)f(eac)m(h)h(axis)3261
-1744 y Fz(WinMap)0 2045 y Fd(Description:)44 b Fj(A)26
-b(Winmap)g(is)g(a)f(linear)g(Mapping)h(whic)n(h)f(transforms)f(a)i
-(rectangular)d(windo)n(w)j(in)f(one)h(co)r(ordinate)227
-2144 y(system)k(in)n(to)f(a)g(similar)g(windo)n(w)g(in)g(another)g(co)r
-(ordinate)f(system)i(b)n(y)f(scaling)f(and)i(shifting)g(eac)n(h)e(axis)
-h(\(the)227 2244 y(windo)n(w)e(edges)g(b)r(eing)h(parallel)e(to)i(the)g
-(co)r(ordinate)e(axes\).)227 2368 y(A)g(WinMap)g(is)g(sp)r(eci\014ed)g
-(b)n(y)g(giving)f(the)h(co)r(ordinates)e(of)i(t)n(w)n(o)f(opp)r(osite)g
-(corners)f(\(A)j(and)e(B\))h(of)g(the)g(windo)n(w)227
-2467 y(in)i(b)r(oth)g(the)g(input)h(and)e(output)h(co)r(ordinate)f
-(systems.)0 2616 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2715 y Fj(astWinMap)-2 2863 y Fd(Inheritance)n(:)227
-3009 y Fj(The)28 b(WinMap)g(class)e(inherits)i(from)f(the)h(Mapping)f
-(class.)-2 3158 y Fd(A)m(ttributes)n(:)227 3304 y Fj(The)34
-b(WinMap)g(class)f(do)r(es)g(not)h(de\014ne)g(an)n(y)f(new)h
-(attributes)g(b)r(ey)n(ond)f(those)h(whic)n(h)f(are)g(applicable)g(to)h
-(all)227 3403 y(Mappings.)-2 3551 y Fd(F)-8 b(unctions)n(:)227
-3698 y Fj(The)36 b(WinMap)g(class)e(do)r(es)h(not)h(de\014ne)f(an)n(y)g
-(new)h(functions)f(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g(applicable)g
-(to)g(all)227 3797 y(Mappings.)p 0 3994 V 0 4126 a Fz(XmlChan)716
-4132 y Fe(I/O)k(Channel)e(using)i(XML)g(to)f(represen)m(t)g(Ob)7
-b(jects)3217 4126 y Fz(XmlChan)0 4330 y Fd(Description:)44
-b Fj(A)28 b(XmlChan)f(is)g(a)f(sp)r(ecialised)g(form)h(of)g(Channel)g
-(whic)n(h)g(supp)r(orts)f(XML)h(I/O)f(op)r(erations.)36
-b(W)-7 b(rit-)227 4429 y(ing)33 b(an)f(Ob)5 b(ject)33
-b(to)f(an)h(XmlChan)g(\(using)g(astW)-7 b(rite\))32 b(will,)j(if)e(the)
-g(Ob)5 b(ject)33 b(is)f(suitable,)i(generate)e(an)g(XML)227
-4529 y(description)27 b(of)g(that)g(Ob)5 b(ject,)28 b(and)f(reading)e
-(from)i(an)g(XmlChan)h(will)f(create)f(a)h(new)g(Ob)5
-b(ject)27 b(from)g(its)g(XML)227 4629 y(description.)227
-4752 y(Normally)-7 b(,)36 b(when)e(y)n(ou)g(use)g(an)h(XmlChan,)h(y)n
-(ou)e(should)g(pro)n(vide)g Ft(")p Fj(source)p Ft(")e
-Fj(and)i Ft(")p Fj(sink)p Ft(")g Fj(functions)h(whic)n(h)227
-4852 y(connect)21 b(it)g(to)g(an)g(external)f(data)g(store)g(b)n(y)h
-(reading)f(and)g(writing)h(the)g(resulting)f(XML)i(text.)35
-b(These)20 b(functions)227 4952 y(should)40 b(p)r(erform)f(an)n(y)h
-(con)n(v)n(ersions)d(needed)j(b)r(et)n(w)n(een)g(external)f(c)n
-(haracter)f(enco)r(dings)h(and)h(the)g(in)n(ternal)227
-5051 y(ASCI)r(I)31 b(enco)r(ding.)44 b(If)31 b(no)f(suc)n(h)g
-(functions)g(are)f(supplied,)i(a)f(Channel)g(will)h(read)e(from)h
-(standard)f(input)i(and)227 5151 y(write)d(to)f(standard)g(output.)0
-5299 y Fd(Constructor)32 b(F)-8 b(unction:)227 5399 y
-Fj(astXmlChan)-2 5547 y Fd(Inheritance)n(:)227 5693 y
-Fj(The)28 b(XmlChan)g(class)e(inherits)i(from)f(the)h(Channel)g(class.)
-p eop end
-%%Page: 526 536
-TeXDict begin 526 535 bop 0 52 a FF(526)2251 b Fy(D)91
-b(AST)30 b(CLASS)f(DESCRIPTIONS)-2 351 y Fd(A)m(ttributes)n(:)227
-497 y Fj(In)36 b(addition)f(to)g(those)g(attributes)h(common)f(to)g
-(all)g(Channels,)i(ev)n(ery)d(XmlChan)i(also)e(has)h(the)h(follo)n
-(wing)227 597 y(attributes:)340 858 y Fi(\017)45 b Fj(XmlF)-7
-b(ormat:)37 b(System)28 b(for)f(formatting)g(Ob)5 b(jects)27
-b(as)g(XML)340 991 y Fi(\017)45 b Fj(XmlInden)n(t:)38
-b(Con)n(trols)26 b(output)i(of)g(inden)n(tation)f(and)h(line)f(feeds)
-340 1124 y Fi(\017)45 b Fj(XmlLength:)38 b(Con)n(trols)26
-b(output)i(bu\013er)g(length)340 1256 y Fi(\017)45 b
-Fj(XmlPre\014x:)37 b(The)27 b(namespace)g(pre\014x)g(to)g(use)h(when)g
-(writing)-2 1418 y Fd(F)-8 b(unctions)n(:)227 1564 y
-Fj(The)34 b(XmlChan)g(class)e(do)r(es)h(not)h(de\014ne)f(an)n(y)g(new)h
-(functions)f(b)r(ey)n(ond)h(those)f(whic)n(h)g(are)g(applicable)g(to)g
-(all)227 1664 y(Mappings.)p 0 1863 3780 12 v 0 1994 a
-Fz(Zo)t(omMap)1000 1995 y Fe(Zo)s(om)38 b(co)s(ordinates)e(ab)s(out)i
-(the)h(origin)3179 1994 y Fz(Zo)t(omMap)0 2184 y Fd(Description:)44
-b Fj(The)27 b(Zo)r(omMap)f(class)h(implemen)n(ts)g(a)f(Mapping)h(whic)n
-(h)g(p)r(erforms)f(a)h Ft(")p Fj(zo)r(om)p Ft(")f Fj(transformation)f
-(b)n(y)227 2283 y(m)n(ultiplying)g(all)g(co)r(ordinate)f(v)-5
-b(alues)25 b(b)n(y)f(the)i(same)e(scale)g(factor)h(\(the)g(in)n(v)n
-(erse)f(transformation)f(is)i(p)r(erformed)227 2383 y(b)n(y)39
-b(dividing)g(b)n(y)g(this)h(scale)e(factor\).)72 b(The)39
-b(n)n(um)n(b)r(er)g(of)g(co)r(ordinate)f(v)-5 b(alues)39
-b(represen)n(ting)f(eac)n(h)g(p)r(oin)n(t)i(is)227 2483
-y(unc)n(hanged.)0 2632 y Fd(Constructor)32 b(F)-8 b(unction:)227
-2732 y Fj(astZo)r(omMap)-2 2881 y Fd(Inheritance)n(:)227
-3027 y Fj(The)28 b(Zo)r(omMap)f(class)f(inherits)i(from)f(the)h
-(Mapping)f(class.)-2 3177 y Fd(A)m(ttributes)n(:)227
-3323 y Fj(In)33 b(addition)f(to)h(those)f(attributes)g(common)g(to)g
-(all)h(Mappings,)g(ev)n(ery)e(Zo)r(omMap)g(also)h(has)g(the)h(follo)n
-(wing)227 3422 y(attributes:)340 3683 y Fi(\017)45 b
-Fj(Zo)r(om:)36 b(Zo)r(omMap)27 b(scale)g(factor)-2 3845
-y Fd(F)-8 b(unctions)n(:)227 3991 y Fj(The)32 b(Zo)r(omMap)g(class)f
-(do)r(es)g(not)i(de\014ne)f(an)n(y)f(new)h(functions)h(b)r(ey)n(ond)f
-(those)f(whic)n(h)h(are)f(applicable)h(to)g(all)227 4091
-y(Mappings.)p eop end
-%%Page: 527 537
-TeXDict begin 527 536 bop 3643 52 a FF(527)0 351 y Fz(E)135
-b(UNIX)45 b(Command)g(Descriptions)0 594 y FF(The)35
-b(commands)h(describ)s(ed)e(here)i(are)g(pro)m(vided)f(for)h(use)f
-(from)g(the)h(UNIX)g(shell)g(to)h(assist)f(with)f(dev)m(el-)0
-694 y(oping)e(soft)m(w)m(are)g(whic)m(h)g(uses)f(AST.)g(T)-8
-b(o)32 b(use)h(these)g(commands,)f(y)m(ou)h(should)f(ensure)f(that)i
-(the)g(directory)0 793 y(\\/star/bin")459 760 y Fv(37)565
-793 y FF(is)e(on)f(y)m(our)g(P)-8 b(A)g(TH.)p 0 945 3780
-12 v 0 1076 a Fz(ast)p Fb(_)p Fz(link)476 b Fe(Link)39
-b(a)f(program)e(with)i(the)h(AST)f(library)473 b Fz(ast)p
-Fb(_)p Fz(link)0 1270 y Fd(Description:)44 b Fj(This)36
-b(command)g(should)g(b)r(e)h(used)f(when)g(building)g(programs)e(whic)n
-(h)i(use)g(the)h(AST)f(library)-7 b(,)37 b(in)227 1369
-y(order)21 b(to)g(generate)f(the)i(correct)f(argumen)n(ts)f(to)h(allo)n
-(w)g(the)h(compiler)f(to)g(link)h(y)n(our)e(program.)33
-b(The)22 b(argumen)n(ts)227 1469 y(generated)k(are)g(written)h(to)f
-(standard)g(output)i(but)f(ma)n(y)f(b)r(e)h(substituted)h(in)n(to)f
-(the)g(compiler)f(command)g(line)227 1568 y(in)i(the)g(standard)f(UNIX)
-h(w)n(a)n(y)f(using)g(bac)n(kw)n(ard)e(quotes)i(\(see)h(b)r(elo)n(w\).)
-227 1695 y(By)35 b(default,)j(it)d(is)h(assumed)e(that)i(y)n(ou)e(are)g
-(building)i(a)f(stand-alone)f(program)f(whic)n(h)i(do)r(es)g(not)g(pro)
-r(duce)227 1795 y(graphical)26 b(output.)38 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)i(are)g(pro)n(vided)g(for)g(linking)g(other)g(t)n(yp)r
-(es)h(of)f(program.)0 1949 y Fd(In)m(v)m(o)s(cation:)123
-b Ft(cc)43 b(program.c)c(-L/star/lib)g(`ast_link)h([switches]`)f(-o)k
-(program)0 2102 y Fd(Examples:)227 2244 y Fq(cc)k(display.c)f
-(-L/star/lib)e(`ast)p Ft(_)p Fq(link)i(-pgplot`)f(-o)i(display)427
-2343 y Fj(Compiles)21 b(and)g(links)g(a)g(C)g(program)e(called)i
-(\\displa)n(y")f(whic)n(h)h(uses)f(the)i(standard)e(v)n(ersion)g(of)h
-(PGPLOT)427 2442 y(for)27 b(graphical)f(output.)227 2578
-y Fq(cc)47 b(plotit.c)f(-L.)h(-L/star/lib)e(`ast)p Ft(_)p
-Fq(link)g(-grf`)h(-lgrf)g(-o)i(plotit)427 2677 y Fj(Compiles)28
-b(and)f(links)h(a)f(C)h(program)d(\\plotit".)37 b(The)28
-b(\\-grf)6 b(")26 b(switc)n(h)i(indicates)f(that)h(graphical)e(output)
-427 2777 y(will)31 b(b)r(e)g(deliv)n(ered)e(through)h(a)g(graphical)f
-(in)n(terface)g(whic)n(h)i(y)n(ou)e(ha)n(v)n(e)h(implemen)n(ted)h(y)n
-(ourself,)f(whic)n(h)427 2876 y(corresp)r(onds)h(to)i(the)g(in)n
-(terface)f(required)g(b)n(y)g(the)h(curren)n(t)f(v)n(ersion)f(of)i
-(AST.)g(Here,)h(this)f(in)n(terface)f(is)427 2976 y(supplied)c(b)n(y)g
-(means)f(of)g(the)h(\\-lgrf)6 b(")26 b(library)h(reference.)227
-3112 y Fq(cc)47 b(plotit.c)f(-L.)h(-L/star/lib)e(`ast)p
-Ft(_)p Fq(link)g(-grf)p Ft(_)p Fq(v2.0`)g(-lgrf)h(-o)h(plotit)427
-3210 y Fj(Compiles)34 b(and)f(links)h(a)f(C)h(program)e(\\plotit".)55
-b(The)34 b(\\-grf)p Ft(_)p Fj(v2.0")c(switc)n(h)k(indicates)f(that)h
-(graphical)427 3310 y(output)28 b(will)g(b)r(e)g(deliv)n(ered)f
-(through)g(a)g(graphical)f(in)n(terface)h(whic)n(h)g(y)n(ou)g(ha)n(v)n
-(e)g(implemen)n(ted)h(y)n(ourself,)427 3410 y(whic)n(h)37
-b(corresp)r(onds)e(to)i(the)g(in)n(terface)g(required)f(b)n(y)g(v)n
-(ersion)g(2.0)g(of)h(AST.)g(Here,)i(this)e(in)n(terface)g(is)427
-3509 y(supplied)28 b(b)n(y)g(means)f(of)g(the)h(\\-lgrf)6
-b(")26 b(library)h(reference.)-2 3675 y Fd(Switc)m(hes)n(:)227
-3822 y Fj(The)h(follo)n(wing)e(switc)n(hes)i(ma)n(y)e(optionally)h(b)r
-(e)h(giv)n(en)f(to)g(this)h(command)g(to)f(mo)r(dify)h(its)g(b)r(eha)n
-(viour:)340 4089 y Fi(\017)45 b Fj(\\-csla":)35 b(Ignored.)h(Pro)n
-(vided)26 b(for)h(bac)n(kw)n(ard)e(compatibilit)n(y)j(only)-7
-b(.)340 4224 y Fi(\017)45 b Fj(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26
-b(for)h(bac)n(kw)n(ard)f(compatibilit)n(y)h(only)-7 b(.)340
-4359 y Fi(\017)45 b Fj(\\-ems":)e(Requests)31 b(that)g(the)h(program)d
-(b)r(e)i(link)n(ed)g(so)g(that)g(error)e(messages)h(pro)r(duced)h(b)n
-(y)g(the)g(AST)427 4459 y(library)d(are)f(deliv)n(ered)h(via)g(the)i
-(Starlink)e(EMS)g(\(Error)f(Message)g(Service\))h(library)g(\(Starlink)
-g(System)427 4558 y(Note)g(SSN/4\).)37 b(By)27 b(default,)h(error)e
-(messages)g(are)g(simply)i(written)g(to)f(standard)g(error.)340
-4693 y Fi(\017)45 b Fj(\\-drama":)33 b(Requests)25 b(that)g(the)g
-(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(error)e(messages)g(pro)r
-(duced)i(b)n(y)f(the)h(AST)427 4793 y(library)d(are)g(deliv)n(ered)g
-(via)h(the)g(DRAMA)h(Ers)e(\(Error)f(Rep)r(orting)i(Service\))f
-(library)-7 b(.)34 b(By)23 b(default,)i(error)427 4892
-y(messages)h(are)h(simply)g(written)h(to)g(standard)e(error.)340
-5027 y Fi(\017)45 b Fj(\\-grf)6 b(":)54 b(Requests)37
-b(that)g(no)f(argumen)n(ts)g(b)r(e)h(generated)f(to)g(sp)r(ecify)h
-(whic)n(h)g(2D)g(graphics)e(system)i(is)427 5127 y(used)c(to)g(displa)n
-(y)g(output)g(from)g(the)h(AST)f(library)-7 b(.)53 b(Y)-7
-b(ou)33 b(should)g(use)g(this)g(option)g(only)g(if)g(y)n(ou)g(ha)n(v)n
-(e)427 5227 y(implemen)n(ted)h(an)e(in)n(terface)h(to)f(a)h(new)g
-(graphics)e(system)i(y)n(ourself)f(and)g(wish)h(to)g(pro)n(vide)f(y)n
-(our)f(o)n(wn)427 5326 y(argumen)n(ts)i(for)h(linking)h(with)g(it.)58
-b(This)34 b(switc)n(h)h(di\013ers)f(from)g(the)h(other)f(\\grf)6
-b(")34 b(switc)n(hes)g(in)g(that)h(it)427 5426 y(assumes)21
-b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n(ts)h(the)g
-(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n(t)427
-5526 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d(of)i
-(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d(in)n
-(terface,)p 0 5607 1512 4 v 73 5661 a Fs(37)138 5693
-y Fr(Or)f(the)f(equiv)l(alen)n(t)g(directory)g(if)i(AST)e(is)h
-(installed)h(in)f(a)g(non-standard)f(lo)r(cation.)p eop
-end
-%%Page: 528 538
-TeXDict begin 528 537 bop 0 52 a FF(528)1988 b Fy(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)427 351 y Fj(this)e(switc)n(h)g
-(will)g(cause)f(\\unresolv)n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r
-(ccur)f(during)h(linking,)g(w)n(arning)e(y)n(ou)h(that)427
-451 y(y)n(ou)24 b(need)g(to)h(implemen)n(t)g(new)f(functions)h(in)f(y)n
-(our)g(graphics)e(mo)r(dule.)37 b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j
-(errors,)d(y)n(ou)i(can)427 551 y(use)34 b(one)f(of)h(the)g(other,)g(v)
-n(ersion-sp)r(eci\014c,)f(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)
-6 b(")32 b(switc)n(h,)k(but)e(these)f(will)427 650 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 750 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-885 y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 984 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 1084 y(V2.0)i(of)h(AST.)340 1219
-y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-1319 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 1454 y Fi(\017)45 b Fj(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-1553 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 1653 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 1752 y(argumen)n(ts)27
-b(for)g(linking)g(with)h(it.)340 1887 y Fi(\017)45 b
-Fj(\\-m)n(ygrf)6 b(":)46 b(This)33 b(switc)n(h)g(has)g(b)r(een)g(sup)r
-(erceeded)g(b)n(y)g(the)g(\\-grf)6 b(")32 b(switc)n(h,)i(but)g(is)f
-(retained)g(in)g(order)427 1987 y(to)26 b(allo)n(w)e(applications)h(to)
-h(b)r(e)g(link)n(ed)f(with)h(a)g(graphics)e(mo)r(dule)i(whic)n(h)g
-(implemen)n(ts)g(the)g(2D)f(in)n(terface)427 2087 y(used)j(b)n(y)f(AST)
-h(V2.0.)36 b(It)28 b(is)g(equiv)-5 b(alen)n(t)27 b(to)h(the)g(\\-grf)p
-Ft(_)p Fj(v2.0")c(switc)n(h.)340 2222 y Fi(\017)45 b
-Fj(\\-pgp":)53 b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n
-(ed)g(so)g(that)h(2D)f(graphical)f(output)i(from)e(the)i(AST)427
-2321 y(library)c(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n
-(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33
-b(\(whic)n(h)h(uses)427 2421 y(GKS)29 b(for)g(its)g(output\).)42
-b(By)29 b(default,)h(no)e(2D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2521 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2656 y Fi(\017)45 b Fj(\\-pgplot":)40 b(Requests)30 b(that)g(the)g
-(program)e(b)r(e)i(link)n(ed)g(so)f(that)h(2D)g(graphical)e(output)i
-(from)g(the)g(AST)427 2755 y(library)25 b(is)h(displa)n(y)n(ed)e(via)i
-(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427 2855 y(By)32
-b(default,)j(no)d(2D)g(graphics)f(pac)n(k)-5 b(age)31
-b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f(error)f(at)h
-(run)g(time)h(if)427 2954 y(AST)28 b(routines)f(are)g(in)n(v)n(ok)n(ed)
-f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-3089 y Fi(\017)45 b Fj(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 3189 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3289 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-3388 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-3523 y Fi(\017)45 b Fj(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 3623 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 3722 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-3822 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-3957 y Fi(\017)45 b Fj(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 4057 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-4156 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 4256 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-4422 y Fd(SLALIB)n(:)227 4568 y Fj(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 4668 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 4768 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 4867 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-4967 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 5066 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-5166 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fj(-fsla)p Ft(")e Fj(and)h Ft(")p Fj(-csla)p Ft(")f Fj(\015ags)h
-(\(previously)f(used)i(for)227 5266 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p 0 5469 3780 12
-v 0 5601 a Fz(ast)p Fb(_)p Fz(link)p Fb(_)p Fz(adam)189
-b Fe(Link)39 b(an)f(AD)m(AM)h(program)d(with)i(the)1581
-5715 y(AST)g(library)2948 5601 y Fz(ast)p Fb(_)p Fz(link)p
-Fb(_)p Fz(adam)p eop end
-%%Page: 529 539
-TeXDict begin 529 538 bop 3643 52 a FF(529)0 351 y Fd(Description:)44
-b Fj(This)21 b(command)e(should)h(only)g(b)r(e)h(used)f(when)h
-(building)f(Starlink)g(AD)n(AM)h(programs)d(whic)n(h)i(use)g(the)227
-451 y(AST)29 b(library)-7 b(,)27 b(in)h(order)f(to)h(generate)f(the)i
-(correct)e(argumen)n(ts)f(to)i(allo)n(w)g(the)g(AD)n(AM)h(\\alink")e
-(command)h(to)227 551 y(link)22 b(the)h(program.)33 b(The)22
-b(argumen)n(ts)f(generated)g(are)g(written)h(to)g(standard)f(output)h
-(but)h(ma)n(y)e(b)r(e)i(substituted)227 650 y(in)n(to)28
-b(the)g(\\alink")e(command)h(line)h(in)g(the)g(standard)e(UNIX)j(w)n(a)
-n(y)d(using)h(bac)n(kw)n(ard)f(quotes)h(\(see)h(b)r(elo)n(w\).)227
-774 y(By)19 b(default,)i(it)f(is)e(assumed)h(that)g(y)n(ou)f(are)g
-(building)i(an)e(AD)n(AM)i(program)d(whic)n(h)i(do)r(es)g(not)g(pro)r
-(duce)f(graphical)227 874 y(output.)37 b(Ho)n(w)n(ev)n(er,)25
-b(switc)n(hes)g(are)g(pro)n(vided)g(for)h(linking)g(other)g(t)n(yp)r
-(es)g(of)g(program.)34 b(This)26 b(command)g(should)227
-974 y(not)40 b(b)r(e)g(used)f(when)h(building)g(stand-alone)e(\(non-AD)
-n(AM\))j(programs.)70 b(Use)40 b(the)g(\\ast)p Ft(_)p
-Fj(link")e(command)227 1073 y(instead.)0 1222 y Fd(In)m(v)m(o)s
-(cation:)123 b Ft(alink)41 b(program.o)f(-L/star/lib)f(`ast_link_adam)f
-([switches]`)0 1372 y Fd(Examples:)227 1509 y Fq(alink)47
-b(display.o)e(-L/star/lib)g(`ast)p Ft(_)p Fq(link)p Ft(_)p
-Fq(adam)e(-pgplot`)427 1607 y Fj(Links)20 b(an)g(AD)n(AM)h(program)d
-(\\displa)n(y")g(whic)n(h)j(uses)e(the)i(standard)e(v)n(ersion)g(of)h
-(PGPLOT)f(for)g(graphical)427 1707 y(output.)227 1840
-y Fq(alink)47 b(plotit.o)e(-L.)i(-L/star/lib)e(`ast)p
-Ft(_)p Fq(link)p Ft(_)p Fq(adam)e(-grf`)k(-lgrf)427 1939
-y Fj(Links)30 b(an)f(AD)n(AM)i(program)d(\\plotit",)i(written)g(in)g
-(C.)g(The)f(\\-grf)6 b(")29 b(switc)n(h)h(indicates)f(that)h(graphical)
-427 2039 y(output)e(will)g(b)r(e)g(deliv)n(ered)f(through)g(a)g
-(graphical)f(in)n(terface)h(whic)n(h)g(y)n(ou)g(ha)n(v)n(e)g(implemen)n
-(ted)h(y)n(ourself,)427 2138 y(whic)n(h)22 b(corresp)r(onds)e(to)h(the)
-h(in)n(terface)f(required)g(b)n(y)h(the)g(curren)n(t)f(v)n(ersion)f(of)
-h(AST.)i(Here,)f(this)g(in)n(terface)427 2238 y(is)28
-b(supplied)g(b)n(y)f(means)g(of)h(the)g(\\-lgrf)6 b(")26
-b(library)g(reference.)227 2371 y Fq(alink)47 b(plotit.o)e(-L.)i
-(-L/star/lib)e(`ast)p Ft(_)p Fq(link)p Ft(_)p Fq(adam)e(-grf)p
-Ft(_)p Fq(v2.0`)i(-lgrf)427 2470 y Fj(Links)23 b(an)f(AD)n(AM)i
-(program)d(\\plotit",)i(written)g(in)g(C.)g(The)g(\\-grf)p
-Ft(_)p Fj(v2.0")d(switc)n(h)i(indicates)h(that)g(graph-)427
-2570 y(ical)h(output)i(will)e(b)r(e)h(deliv)n(ered)f(through)g(a)g
-(graphical)f(in)n(terface)h(whic)n(h)h(y)n(ou)f(ha)n(v)n(e)f(implemen)n
-(ted)i(y)n(our-)427 2669 y(self,)32 b(whic)n(h)f(corresp)r(onds)e(to)i
-(the)g(in)n(terface)f(required)g(b)n(y)h(v)n(ersion)e(2.0)h(of)h(AST.)h
-(Here,)f(this)g(in)n(terface)427 2769 y(is)d(supplied)g(b)n(y)f(means)g
-(of)h(the)g(\\-lgrf)6 b(")26 b(library)g(reference.)-2
-2930 y Fd(Switc)m(hes)n(:)227 3077 y Fj(The)i(follo)n(wing)e(switc)n
-(hes)i(ma)n(y)e(optionally)h(b)r(e)h(giv)n(en)f(to)g(this)h(command)g
-(to)f(mo)r(dify)h(its)g(b)r(eha)n(viour:)340 3337 y Fi(\017)45
-b Fj(\\-csla":)35 b(Ignored.)h(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)e
-(compatibilit)n(y)j(only)-7 b(.)340 3469 y Fi(\017)45
-b Fj(\\-fsla":)36 b(Ignored.)f(Pro)n(vided)26 b(for)h(bac)n(kw)n(ard)f
-(compatibilit)n(y)h(only)-7 b(.)340 3602 y Fi(\017)45
-b Fj(\\-grf)6 b(":)54 b(Requests)37 b(that)g(no)f(argumen)n(ts)g(b)r(e)
-h(generated)f(to)g(sp)r(ecify)h(whic)n(h)g(2D)g(graphics)e(system)i(is)
-427 3702 y(used)c(to)g(displa)n(y)g(output)g(from)g(the)h(AST)f
-(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)g
-(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 3801 y(implemen)n(ted)h(an)e(in)n
-(terface)h(to)f(a)h(new)g(graphics)e(system)i(y)n(ourself)f(and)g(wish)
-h(to)g(pro)n(vide)f(y)n(our)f(o)n(wn)427 3901 y(argumen)n(ts)i(for)h
-(linking)h(with)g(it.)58 b(This)34 b(switc)n(h)h(di\013ers)f(from)g
-(the)h(other)f(\\grf)6 b(")34 b(switc)n(hes)g(in)g(that)h(it)427
-4000 y(assumes)21 b(that)g(y)n(our)g(graphics)f(mo)r(dule)h(implemen)n
-(ts)h(the)g(complete)f(in)n(terface)g(required)g(b)n(y)g(the)g(curren)n
-(t)427 4100 y(v)n(ersion)28 b(of)h(AST.)g(If)g(future)h(v)n(ersions)d
-(of)i(AST)g(in)n(tro)r(duce)f(new)h(functions)h(to)e(the)i(graphics)d
-(in)n(terface,)427 4200 y(this)j(switc)n(h)g(will)g(cause)f(\\unresolv)
-n(ed)f(sym)n(b)r(ol")h(errors)e(to)j(o)r(ccur)f(during)h(linking,)g(w)n
-(arning)e(y)n(ou)h(that)427 4299 y(y)n(ou)24 b(need)g(to)h(implemen)n
-(t)g(new)f(functions)h(in)f(y)n(our)g(graphics)e(mo)r(dule.)37
-b(T)-7 b(o)24 b(a)n(v)n(oid)e(suc)n(h)j(errors,)d(y)n(ou)i(can)427
-4399 y(use)34 b(one)f(of)h(the)g(other,)g(v)n(ersion-sp)r(eci\014c,)f
-(switc)n(hes)h(in)f(place)h(of)f(the)h(\\-grf)6 b(")32
-b(switc)n(h,)k(but)e(these)f(will)427 4499 y(cause)28
-b(run-time)h(errors)d(to)j(b)r(e)g(rep)r(orted)f(if)h(an)n(y)f(AST)h
-(function)h(is)e(in)n(v)n(ok)n(ed)g(whic)n(h)g(requires)g(facilities)
-427 4598 y(not)g(in)g(the)g(implemen)n(ted)g(in)n(terface.)340
-4731 y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v2.0":)37 b(This)29
-b(switc)n(h)g(is)g(equiv)-5 b(alen)n(t)29 b(to)g(the)h(\\-m)n(ygrf)6
-b(")27 b(switc)n(h.)42 b(It)29 b(indicates)g(that)h(y)n(ou)e(w)n(an)n
-(t)h(to)427 4830 y(link)e(with)g(y)n(our)e(o)n(wn)g(graphics)g(mo)r
-(dule)i(whic)n(h)f(implemen)n(ts)h(the)g(2D)f(graphics)f(in)n(terface)h
-(required)f(b)n(y)427 4930 y(V2.0)i(of)h(AST.)340 5062
-y Fi(\017)45 b Fj(\\-grf)p Ft(_)p Fj(v3.2":)30 b(Indicates)20
-b(that)g(y)n(ou)g(w)n(an)n(t)f(to)h(link)h(with)f(y)n(our)f(o)n(wn)h
-(graphics)f(mo)r(dule)h(whic)n(h)g(implemen)n(ts)427
-5162 y(the)28 b(2D)g(graphics)e(in)n(terface)h(required)g(b)n(y)g(V3.2)
-g(of)g(AST.)340 5295 y Fi(\017)45 b Fj(\\-m)n(y)n(err":)34
-b(Requests)26 b(that)h(no)g(argumen)n(ts)e(b)r(e)j(generated)d(to)i(sp)
-r(ecify)g(ho)n(w)f(error)f(messages)g(pro)r(duced)427
-5394 y(b)n(y)30 b(the)g(AST)g(library)e(should)i(b)r(e)g(deliv)n(ered.)
-42 b(Y)-7 b(ou)30 b(should)g(use)f(this)h(option)g(only)f(if)h(y)n(ou)f
-(ha)n(v)n(e)g(imple-)427 5494 y(men)n(ted)34 b(an)f(in)n(terface)f(to)i
-(a)e(new)i(error)d(deliv)n(ery)h(system)h(y)n(ourself)g(and)g(wish)g
-(to)g(pro)n(vide)f(y)n(our)g(o)n(wn)427 5593 y(argumen)n(ts)20
-b(for)h(linking)g(with)h(it.)35 b(By)21 b(default,)i(error)c(messages)h
-(are)g(deliv)n(ered)g(in)i(the)g(standard)e(AD)n(AM)427
-5693 y(w)n(a)n(y)27 b(via)g(the)h(EMS)f(Error)e(Message)h(Service)h
-(\(Starlink)h(System)f(Note)h(SSN/4\).)p eop end
-%%Page: 530 540
-TeXDict begin 530 539 bop 0 52 a FF(530)1988 b Fy(E)91
-b(UNIX)30 b(COMMAND)i(DESCRIPTIONS)340 351 y Fi(\017)45
-b Fj(\\-m)n(ygrf)6 b(":)35 b(This)26 b(switc)n(h)g(has)g(b)r(een)h(sup)
-r(erceeded)f(b)n(y)g(the)h(\\-grf)6 b(")25 b(switc)n(h,)h(but)h(is)f
-(retained)g(in)h(order)e(to)427 451 y(allo)n(w)j(applications)g(to)h(b)
-r(e)g(link)n(ed)g(with)h(a)e(graphics)g(mo)r(dule)h(whic)n(h)g
-(implemen)n(ts)g(the)g(in)n(terface)g(used)427 551 y(b)n(y)f(AST)g
-(V2.0.)36 b(It)28 b(is)f(equiv)-5 b(alen)n(t)28 b(to)f(the)h(\\-grf)p
-Ft(_)p Fj(v2.0")c(switc)n(h.)340 683 y Fi(\017)45 b Fj(\\-pgp":)53
-b(Requests)36 b(that)h(the)f(program)f(b)r(e)h(link)n(ed)g(so)g(that)h
-(2D)f(graphical)f(output)i(from)e(the)i(AST)427 783 y(library)c(is)h
-(displa)n(y)n(ed)f(via)g(the)i(Starlink)e(v)n(ersion)g(of)h(the)g
-(PGPLOT)f(graphics)f(pac)n(k)-5 b(age)33 b(\(whic)n(h)h(uses)427
-883 y(GKS)25 b(for)g(its)g(output\).)36 b(By)25 b(default,)h(no)f
-(graphics)e(pac)n(k)-5 b(age)23 b(is)i(link)n(ed)g(and)g(this)g(will)g
-(result)g(in)g(an)g(error)427 982 y(at)j(run)f(time)h(if)g(AST)g
-(routines)f(are)g(in)n(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e
-(graphical)g(output.)340 1115 y Fi(\017)45 b Fj(\\-pgplot":)40
-b(Requests)30 b(that)g(the)g(program)e(b)r(e)i(link)n(ed)g(so)f(that)h
-(2D)g(graphical)e(output)i(from)g(the)g(AST)427 1215
-y(library)25 b(is)h(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g
-(\\nativ)n(e"\))g(v)n(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)
--5 b(age.)427 1314 y(By)29 b(default,)h(no)e(graphics)g(pac)n(k)-5
-b(age)27 b(is)i(link)n(ed)g(and)g(this)g(will)g(result)g(in)g(an)g
-(error)e(at)h(run)h(time)h(if)f(AST)427 1414 y(routines)e(are)g(in)n(v)
-n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)340
-1547 y Fi(\017)45 b Fj(\\-grf3d":)d(Requests)30 b(that)i(no)e(argumen)n
-(ts)g(b)r(e)h(generated)f(to)h(sp)r(ecify)g(whic)n(h)g(3D)g(graphics)f
-(system)h(is)427 1646 y(used)i(to)g(displa)n(y)g(output)g(from)g(the)h
-(AST)f(library)-7 b(.)53 b(Y)-7 b(ou)33 b(should)g(use)g(this)g(option)
-g(only)g(if)g(y)n(ou)g(ha)n(v)n(e)427 1746 y(implemen)n(ted)25
-b(an)e(in)n(terface)g(to)h(a)f(new)h(3D)f(graphics)g(system)g(y)n
-(ourself)g(and)g(wish)h(to)f(pro)n(vide)g(y)n(our)f(o)n(wn)427
-1846 y(argumen)n(ts)27 b(for)g(linking)g(with)h(it.)340
-1978 y Fi(\017)45 b Fj(\\-pgp3d":)c(Requests)30 b(that)h(the)g(program)
-d(b)r(e)j(link)n(ed)f(so)g(that)h(3D)f(graphical)f(output)i(from)f(the)
-h(AST)427 2078 y(library)i(is)h(displa)n(y)n(ed)f(via)g(the)i(Starlink)
-e(v)n(ersion)g(of)h(the)g(PGPLOT)f(graphics)f(pac)n(k)-5
-b(age)33 b(\(whic)n(h)h(uses)427 2178 y(GKS)29 b(for)g(its)g(output\).)
-42 b(By)29 b(default,)h(no)e(3D)h(graphics)f(pac)n(k)-5
-b(age)28 b(is)g(link)n(ed)h(and)g(this)h(will)f(result)g(in)g(an)427
-2277 y(error)d(at)h(run)h(time)g(if)g(AST)g(routines)f(are)g(in)n(v)n
-(ok)n(ed)f(that)i(attempt)g(to)f(generate)g(graphical)f(output.)340
-2410 y Fi(\017)45 b Fj(\\-pgplot3d":)33 b(Requests)23
-b(that)h(the)g(program)e(b)r(e)i(link)n(ed)f(so)g(that)h(3D)g
-(graphical)e(output)i(from)f(the)h(AST)427 2510 y(library)h(is)h
-(displa)n(y)n(ed)e(via)i(the)g(standard)f(\(or)g(\\nativ)n(e"\))g(v)n
-(ersion)f(of)i(the)g(PGPLOT)f(graphics)f(pac)n(k)-5 b(age.)427
-2609 y(By)32 b(default,)j(no)d(3D)g(graphics)f(pac)n(k)-5
-b(age)31 b(is)h(link)n(ed)h(and)f(this)h(will)f(result)g(in)h(an)f
-(error)f(at)h(run)g(time)h(if)427 2709 y(AST)28 b(routines)f(are)g(in)n
-(v)n(ok)n(ed)f(that)i(attempt)g(to)g(generate)e(graphical)g(output.)-2
-2871 y Fd(SLALIB)n(:)227 3017 y Fj(The)j(AST)h(distribution)f(includes)
-g(a)f(cut)i(do)n(wn)e(subset)h(of)g(the)g(C)g(v)n(ersion)f(of)g(the)i
-(SLALIB)f(library)e(written)227 3117 y(b)n(y)h(P)n(at)g(W)-7
-b(allace.)38 b(This)28 b(subset)h(con)n(tains)e(only)h(the)g(functions)
-h(needed)f(b)n(y)g(the)h(AST)g(library)-7 b(.)37 b(It)29
-b(is)f(built)h(as)227 3216 y(part)24 b(of)f(the)i(pro)r(cess)d(of)i
-(building)g(AST)h(and)e(is)h(distributed)g(under)g(GPL)g(\(and)g(is)f
-(th)n(us)h(compatible)g(with)g(the)227 3316 y(AST)f(license\).)35
-b(Previous)20 b(v)n(ersion)h(of)h(this)g(script)g(allo)n(w)n(ed)f(AST)h
-(applications)f(to)h(b)r(e)h(link)n(ed)f(against)e(external)227
-3416 y(SLALIB)34 b(libraries)e(\(either)i(F)-7 b(ortran)33
-b(or)g(C\))h(rather)e(than)i(the)g(in)n(ternal)f(v)n(ersion.)54
-b(The)34 b(curren)n(t)e(v)n(ersion)h(of)227 3515 y(this)g(script)f(do)r
-(es)g(not)h(pro)n(vide)e(this)h(option,)i(and)e(alw)n(a)n(ys)f(uses)h
-(the)g(in)n(ternal)g(SLALIB)g(library)-7 b(.)51 b(Ho)n(w)n(ev)n(er,)227
-3615 y(for)25 b(bac)n(kw)n(ard)f(compatibilit)n(y)-7
-b(,)26 b(this)g(script)f(still)h(allo)n(ws)f(the)h Ft(")p
-Fj(-fsla)p Ft(")e Fj(and)h Ft(")p Fj(-csla)p Ft(")f Fj(\015ags)h
-(\(previously)f(used)i(for)227 3714 y(selecting)h(whic)n(h)h(v)n
-(ersion)e(of)i(SLALIB)f(to)h(use\))f(to)h(b)r(e)g(sp)r(eci\014ed,)g
-(but)g(they)g(will)g(b)r(e)g(ignored.)p eop end
-%%Page: 531 541
-TeXDict begin 531 540 bop 3643 52 a FF(531)0 351 y Fz(F)134
-b(FITS-W)l(CS)44 b(Co)l(v)l(erage)0 605 y FF(This)32
-b(app)s(endix)f(giv)m(es)i(details)h(of)e(the)h(FitsChan)f(class)h
-(implemen)m(tation)h(of)f(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)0
-718 y(in)25 b(the)h(FITS-W)m(CS)g(pap)s(ers)e(a)m(v)-5
-b(ailable)28 b(at)f(h)m(ttp://\014ts.gsfc.nasa.go)m(v/\014ts)p
-Fq(_)p FF(w)m(cs.h)m(tml.)44 b(These)25 b(con)m(v)m(en)m(tions)0
-831 y(are)35 b(used)f(only)h(if)g(the)g(Enco)s(ding)f(attribute)h(of)g
-(the)g(FitsChan)g(has)f(the)h(v)-5 b(alue)35 b(\\FITS-W)m(CS")h
-(\(whether)0 944 y(set)f(explicitly)g(or)f(defaulted\).)52
-b(It)34 b(should)f(alw)m(a)m(ys)i(b)s(e)f(p)s(ossible)f(for)h(a)g(F)-8
-b(rameSet)36 b(to)e(b)s(e)g(read)f(\(using)h(the)0 1057
-y(astRead)i(function\))g(from)f(a)h(FitsChan)f(con)m(taining)i(a)f
-(header)f(whic)m(h)h(conforms)f(to)h(these)g(con)m(v)m(en)m(tions.)0
-1170 y(Ho)m(w)m(ev)m(er,)30 b(only)c(those)i(F)-8 b(rameSets)27
-b(whic)m(h)g(are)g(compatible)h(with)e(the)h(FITS-W)m(CS)f(mo)s(del)h
-(can)g(b)s(e)f Fx(written)0 1283 y FF(to)32 b(a)g(FitsChan)f(using)f
-(the)i(astW)-8 b(rite)33 b(function.)43 b(F)-8 b(or)32
-b(instance,)g(if)f(the)h(curren)m(t)f(F)-8 b(rame)32
-b(of)f(a)h(F)-8 b(rameSet)32 b(is)0 1396 y(re-mapp)s(ed)h(using,)i(sa)m
-(y)-8 b(,)37 b(an)d(arbitrary)g(MathMap)i(then)e(the)g(F)-8
-b(rameSet)36 b(will)e(no)h(longer)f(b)s(e)g(compatible)0
-1508 y(with)c(the)h(FITS-W)m(CS)f(mo)s(del,)g(and)g(so)g(will)h(not)g
-(b)s(e)f(written)g(out)h(successfully)f(to)h(a)g(FitsChan.)0
-1672 y(The)36 b(follo)m(wing)h(sub-sections)g(describ)s(e)e(the)i
-(details)g(of)f(the)h(implemen)m(tation)g(of)g(eac)m(h)g(of)f(the)h
-(\014rst)e(four)0 1785 y(FITS-W)m(CS)e(pap)s(ers.)49
-b(Here,)35 b(the)f(term)f(\\pixel)h(axes")h(is)e(used)g(to)h(refer)f
-(to)i(the)e(FITS)g(pixel)h(co)s(ordinates)0 1898 y(\(i.e.)72
-b(the)41 b(cen)m(tre)g(of)g(the)g(\014rst)e(image)j(pixel)f(has)f(a)h
-(v)-5 b(alue)41 b(1.0)g(on)g(eac)m(h)g(pixel)g(axis\);)47
-b(the)40 b(term)h(\\IW)m(C)0 2011 y(axes")35 b(is)f(used)f(to)i(refer)e
-(to)i(the)f(axes)g(of)g(the)g(In)m(termediate)i(W)-8
-b(orld)34 b(Co)s(ordinate)g(system;)i(and)d(the)h(term)0
-2124 y(\\W)m(CS)28 b(axes")g(is)g(used)e(to)i(refer)f(to)h(the)g(axes)g
-(of)g(the)f(\014nal)g(ph)m(ysical)h(co)s(ordinate)g(system)g(describ)s
-(ed)e(b)m(y)h(the)0 2236 y(CTYPE)p Fx(i)39 b FF(k)m(eyw)m(ords.)0
-2532 y Fw(F.1)113 b(P)m(ap)s(er)37 b(I)g(-)h(General)h(Linear)f(Co)s
-(ordinates)0 2755 y FF(When)27 b(reading)g(a)g(F)-8 b(rameSet)29
-b(from)d(a)h(FitsChan,)h(these)g(con)m(v)m(en)m(tions)h(are)e(used)f
-(if)h(the)h(CTYPE)p Fx(i)35 b FF(k)m(eyw)m(ord)0 2868
-y(v)-5 b(alues)42 b(within)f(the)h(FitsChan)g(do)f(not)h(conform)g(to)g
-(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(later)g(pap)s(ers,)i
-(in)0 2981 y(whic)m(h)33 b(case)i(the)f(axes)g(are)g(assumed)f(to)h(b)s
-(e)f(linear.)51 b(When)33 b(writing)h(a)g(F)-8 b(rameSet)34
-b(to)h(a)f(FitsChan,)g(these)0 3094 y(con)m(v)m(en)m(tions)41
-b(are)f(used)f(for)g(axes)h(whic)m(h)f(are)h(describ)s(ed)e(b)m(y)h(a)h
-(simple)f(F)-8 b(rame)40 b(\()p Fx(i.e.)67 b FF(not)40
-b(a)g(SkyF)-8 b(rame,)0 3207 y(Sp)s(ecF)g(rame,)31 b
-Fx(etc.)p FF(\).)0 3370 y(T)-8 b(able)31 b(1)g(describ)s(es)e(the)i
-(use)f(made)g(b)m(y)h(AST)e(of)i(eac)m(h)g(k)m(eyw)m(ord)g(de\014ned)e
-(b)m(y)i(FITS-W)m(CS)f(pap)s(er)f(I.)0 3663 y FD(F.1.1)105
-b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9 b(rite)35
-b(Op)s(eration)0 3885 y FF(When)f(writing)g(a)h(F)-8
-b(rameSet)35 b(in)f(whic)m(h)f(the)i(W)m(CS)f(F)-8 b(rame)35
-b(is)f(a)h(simple)f(F)-8 b(rame)35 b(to)g(a)f(FitsChan,)h(success)0
-3998 y(dep)s(ends)28 b(on)i(the)g(Mapping)g(from)g(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)31 b(in)f(the)g(F)-8
-b(rameSet\))32 b(to)e(the)g(W)m(CS)0 4111 y(F)-8 b(rame)31
-b(b)s(eing)f(linear.)41 b(The)30 b(write)h(op)s(eration)g(will)f(fail)h
-(if)g(this)f(is)g(not)h(the)g(case.)0 4404 y FD(F.1.2)105
-b(Use)35 b(and)g(Choice)g(of)g(CTYPE)p Fa(i)45 b FD(k)m(eyw)m(ords)0
-4626 y FF(When)37 b(reading)g(a)h(F)-8 b(rameSet)38 b(from)f(a)g
-(FitsChan)g(the)h(CTYPE)p Fx(i)45 b FF(v)-5 b(alues)38
-b(in)e(the)i(FitsChan)f(are)g(used)g(to)0 4739 y(set)32
-b(the)f(Sym)m(b)s(ol)g(attributes)h(of)f(the)g(corresp)s(onding)g(W)m
-(CS)g(F)-8 b(rame.)44 b(The)31 b(Lab)s(el)g(attributes)h(of)f(the)g(W)m
-(CS)0 4852 y(F)-8 b(rame)38 b(are)f(set)g(from)g(the)g(CNAME)p
-Fx(i)46 b FF(k)m(eyw)m(ords,)39 b(if)e(presen)m(t)g(in)f(the)h(header.)
-60 b(Otherwise)37 b(they)g(are)g(set)0 4965 y(from)42
-b(the)g(CTYPE)p Fx(i)51 b FF(commen)m(ts)43 b(strings)g(in)f(the)g
-(header,)k(so)c(long)h(as)g(eac)m(h)h(axis)e(has)h(a)f(unique)g(non-)0
-5078 y(blank)d(commen)m(t.)67 b(Otherwise,)41 b(the)e(Lab)s(el)g
-(attributes)g(are)h(set)f(to)h(the)f(CTYPE)p Fx(i)47
-b FF(v)-5 b(alues.)67 b(The)38 b(ab)s(o)m(v)m(e)0 5191
-y(pro)s(cedure)c(is)h(o)m(v)m(er-ridden)h(if)f(the)g(axis)g(t)m(yp)s
-(es)g(conform)g(to)h(the)f(con)m(v)m(en)m(tions)j(describ)s(ed)c(in)g
-(pap)s(er)g(I)s(I)g(or)0 5304 y(I)s(I)s(I,)29 b(as)i(describ)s(ed)e(b)s
-(elo)m(w.)0 5467 y(When)g(writing)h(a)g(F)-8 b(rameSet)31
-b(to)f(a)g(FitsChan,)g(eac)m(h)h(CTYPE)p Fx(i)38 b FF(v)-5
-b(alue)30 b(is)g(set)g(to)g(the)g(v)-5 b(alue)30 b(of)g(the)g(Sym)m(b)s
-(ol)0 5580 y(attribute)d(of)g(the)g(corresp)s(onding)e(axis)i(in)g(the)
-f(F)-8 b(rame)28 b(b)s(eing)e(written.)40 b(If)26 b(a)h(v)-5
-b(alue)27 b(has)f(b)s(een)g(set)h(explicitly)0 5693 y(for)i(the)g(axis)
-h(Lab)s(el)f(attribute,)h(it)g(is)f(used)g(as)g(the)h(axis)f(commen)m
-(t)i(\(except)f(that)g(an)m(y)f(existing)i(commen)m(ts)p
-eop end
-%%Page: 532 542
-TeXDict begin 532 541 bop 0 52 a FF(532)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 853 3841 4 v -2
-965 4 113 v 115 932 a FD(Keyw)m(ord)p 640 965 V 798 w(Read)p
-2240 965 V 1352 w(W)-9 b(rite)p 3839 965 V 0 969 3841
-4 v -2 1307 4 339 v 50 1048 a FF(W)m(CSAXES)p Fx(a)p
-640 1307 V 140 w FF(Ignored.)p 2240 1307 V 1273 w(Set)27
-b(to)h(the)f(n)m(um)m(b)s(er)e(of)i(axes)h(in)e(the)h(W)m(CS)2291
-1161 y(F)-8 b(rame)51 b(-)g(only)f(written)g(if)h(di\013eren)m(t)f(to)
-2291 1274 y(NAXIS.)p 3839 1307 V -2 1533 4 226 v 50 1386
-a(CR)-10 b(V)g(AL)p Fx(ia)p 640 1533 V 262 w FF(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1499 y(ping.)p 2240 1533 V 2291 1386 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1499
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1533 V
--2 1759 V 50 1612 a(CRPIX)p Fx(ja)p 640 1759 V 272 w
-FF(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1725 y(ping.)p 2240 1759 V 2291 1612 a(Alw)m(a)m(ys)31
-b(written)f(\(see)h(\\Choice)g(of)f(Refer-)2291 1725
-y(ence)h(P)m(oin)m(t")h(b)s(elo)m(w\).)p 3839 1759 V
--2 1985 V 50 1838 a(CDEL)-8 b(T)p Fx(ia)p 640 1985 V
-256 w FF(Used)24 b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-1951 y(ping.)p 2240 1985 V 2291 1838 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 1951 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 1985 V -2 2211 V 50 2064 a(CR)m(OT)-8
-b(A)p Fx(i)p 640 2211 V 287 w FF(Used)24 b(to)i(create)g(the)f(pixel)g
-(to)h(W)m(CS)f(Map-)692 2177 y(ping.)p 2240 2211 V 2291
-2064 a(Only)20 b(written)i(in)e(FITS-AIPS)g(and)h(FITS-)2291
-2177 y(AIPS++)29 b(enco)s(dings.)p 3839 2211 V -2 2888
-4 678 v 50 2290 a(CTYPE)p Fx(ia)p 640 2888 V 244 w FF(Used)66
-b(to)h(c)m(ho)s(ose)h(the)f(class)g(and)f(at-)692 2403
-y(tributes)46 b(of)h(the)f(W)m(CS)h(F)-8 b(rame,)52 b(and)46
-b(to)692 2516 y(create)63 b(the)f(pixel)g(to)g(W)m(CS)g(Mapping)692
-2629 y(\(note,)35 b(\\STOKES")d(and)h(\\COMPLEX")692
-2741 y(axes)53 b(are)g(treated)h(as)f(unkno)m(wn)e(linear)692
-2854 y(axes\).)p 2240 2888 V 2291 2290 a(Alw)m(a)m(ys)36
-b(written)f(\(see)g(\\Use)h(and)d(Choice)2291 2403 y(of)e(CTYPE)e(k)m
-(eyw)m(ords")i(b)s(elo)m(w\).)p 3839 2888 V -2 3340 4
-452 v 50 2967 a(CUNIT)p Fx(ia)p 640 3340 V 267 w FF(Used)25
-b(to)i(set)g(the)f(Units)g(attributes)h(of)f(the)692
-3080 y(W)m(CS)k(F)-8 b(rame.)p 2240 3340 V 2291 2967
-a(Only)32 b(written)h(if)g(the)g(Units)f(attribute)i(of)2291
-3080 y(the)39 b(W)m(CS)f(F)-8 b(rame)39 b(has)f(b)s(een)g(set)h
-(explic-)2291 3193 y(itly)-8 b(.)84 b(If)44 b(so,)49
-b(the)44 b(Units)h(v)-5 b(alue)45 b(for)f(eac)m(h)2291
-3306 y(axis)31 b(is)f(used)g(as)h(the)f(CUNIT)g(v)-5
-b(alue.)p 3839 3340 V -2 3566 4 226 v 50 3419 a(PC)p
-Fx(i)p Fq(_)p Fx(j)13 b(a)p 640 3566 V 351 w FF(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3532 y(ping.)p 2240 3566 V 2291 3419 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3532 y(tribute)30 b(of)h(the)g(FitsChan)f(is)g
-(set)h(to)g(zero.)p 3839 3566 V -2 3904 4 339 v 50 3645
-a(CD)p Fx(i)p Fq(_)p Fx(j)13 b(a)p 640 3904 V 344 w FF(Used)24
-b(to)i(create)g(the)f(pixel)g(to)h(W)m(CS)f(Map-)692
-3758 y(ping.)p 2240 3904 V 2291 3645 a(Only)63 b(written)h(if)g(the)g
-(CDMatrix)h(at-)2291 3758 y(tribute)23 b(of)g(the)h(FitsChan)e(is)i
-(set)f(to)h(a)f(non-)2291 3871 y(zero)31 b(v)-5 b(alue.)p
-3839 3904 V -2 4017 4 113 v 50 3983 a(PV)p Fx(i)p Fq(_)p
-Fx(ma)p 640 4017 V 316 w FF(Ignored)30 b(for)g(linear)g(axes.)p
-2240 4017 V 683 w(Not)h(written)g(if)f(the)h(axes)g(are)g(linear.)p
-3839 4017 V -2 4130 V 50 4096 a(PS)p Fx(i)p Fq(_)p Fx(ma)p
-640 4130 V 333 w FF(Ignored.)p 2240 4130 V 1273 w(Not)g(used.)p
-3839 4130 V -2 4582 4 452 v 50 4209 a(W)m(CSNAME)p Fx(a)p
-640 4582 V 108 w FF(Used)41 b(to)h(set)g(the)f(Domain)h(attribute)g(of)
-692 4322 y(the)30 b(W)m(CS)g(F)-8 b(rame.)p 2240 4582
-V 2291 4209 a(Only)34 b(written)h(if)f(the)h(Domain)g(attribute)2291
-4322 y(of)23 b(the)f(W)m(CS)h(F)-8 b(rame)23 b(has)f(b)s(een)g(set)h
-(explic-)2291 4435 y(itly)-8 b(.)40 b(If)26 b(so,)h(the)f(Domain)g(v)-5
-b(alue)26 b(is)g(used)f(as)2291 4548 y(the)31 b(W)m(CSNAME)g(v)-5
-b(alue.)p 3839 4582 V -2 4695 4 113 v 50 4661 a(CRDER)p
-Fx(ia)p 640 4695 V 237 w FF(Ignored.)p 2240 4695 V 1273
-w(Not)31 b(used.)p 3839 4695 V -2 4808 V 50 4774 a(CSYER)p
-Fx(ia)p 640 4808 V 254 w FF(Ignored.)p 2240 4808 V 1273
-w(Not)g(used.)p 3839 4808 V 0 4811 3841 4 v 986 5086
-a(T)-8 b(able)31 b(1:)41 b(Use)31 b(of)g(FITS-W)m(CS)f(P)m(ap)s(er)g(I)
-g(k)m(eyw)m(ords)p eop end
-%%Page: 533 543
-TeXDict begin 533 542 bop 0 52 a Fy(F.1)92 b(P)m(ap)s(er)30
-b(I)g(-)h(General)g(Linear)f(Co)s(ordinates)1933 b FF(533)0
-351 y(in)33 b(the)g(FitsChan)h(tak)m(e)g(precedence)g(if)f(the)h(k)m
-(eyw)m(ord)g(v)-5 b(alue)33 b(has)g(not)h(c)m(hanged\).)50
-b(The)33 b(ab)s(o)m(v)m(e)i(pro)s(cedure)0 464 y(is)d(o)m(v)m
-(er-ridden)g(if)f(the)h(F)-8 b(rame)32 b(is)g(a)g(SkyF)-8
-b(rame)32 b(or)f(a)h(Sp)s(ecF)-8 b(rame,)33 b(in)e(whic)m(h)g(case)i
-(the)f(CTYPE)p Fx(i)39 b FF(v)-5 b(alue)32 b(is)0 577
-y(deriv)m(ed)i(from)e(the)i(System)f(attribute)i(of)e(the)h(F)-8
-b(rame)34 b(and)f(the)h(nature)f(of)g(the)h(pixel)g(to)g(W)m(CS)g
-(Mapping)0 690 y(according)d(to)g(the)g(con)m(v)m(en)m(tions)h(of)f
-(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I,)g(as)i(describ)s(ed)e(b)s(elo)m
-(w.)0 986 y FD(F.1.3)105 b(Choice)35 b(of)g(Reference)h(P)m(oin)m(t)0
-1210 y FF(When)31 b(writing)g(a)g(F)-8 b(rameSet)32 b(to)g(a)f
-(FitsChan,)h(the)f(pixel)g(co)s(ordinates)h(of)f(the)g(reference)g(p)s
-(oin)m(t)g(for)g(linear)0 1323 y(axes)g(\(i.e.)42 b(the)30
-b(CRPIX)p Fx(j)43 b FF(v)-5 b(alues\))31 b(are)g(c)m(hosen)g(as)g
-(follo)m(ws:)136 1590 y Fu(\017)46 b FF(If)35 b(the)h(F)-8
-b(rameSet)37 b(is)e(b)s(eing)g(written)h(to)g(a)g(FitsChan)f(whic)m(h)g
-(previously)h(con)m(tained)g(a)g(set)g(of)g(axis)227
-1703 y(descriptions)i(with)f(the)g(same)h(iden)m(tifying)g(letter,)i
-(then)d(the)h(previous)f(CR)-10 b(V)g(AL)p Fx(j)13 b
-FF(v)-5 b(alues)37 b(are)h(con-)227 1816 y(v)m(erted)c(in)m(to)h(the)f
-(co)s(ordinate)g(system)g(of)f(the)h(F)-8 b(rame)34 b(b)s(eing)f
-(written)h(\(if)g(p)s(ossible\).)50 b(These)33 b(v)-5
-b(alues)227 1929 y(are)29 b(then)e(transformed)h(in)m(to)h(the)f(pixel)
-g(F)-8 b(rame,)30 b(and)e(the)g(closest)h(in)m(teger)h(pixel)e(v)-5
-b(alues)29 b(are)f(used)f(as)227 2042 y(the)k(CRPIX)f(k)m(eyw)m(ords.)
-136 2233 y Fu(\017)46 b FF(If)34 b(the)g(ab)s(o)m(v)m(e)h(step)e(could)
-h(not)g(b)s(e)f(p)s(erformed)g(for)g(an)m(y)h(reason,)h(the)f(cen)m
-(tral)h(pixel)f(is)g(used)f(as)h(the)227 2346 y(reference)e(p)s(oin)m
-(t.)45 b(This)30 b(requires)h(the)h(image)h(dimensions)e(to)h(b)s(e)f
-(presen)m(t)h(in)f(the)h(FitsChan)f(in)g(the)227 2459
-y(form)f(of)h(a)f(set)h(of)g(NAXIS)p Fx(j)43 b FF(k)m(eyw)m(ord)31
-b(v)-5 b(alues.)136 2650 y Fu(\017)46 b FF(If)33 b(b)s(oth)f(the)h(ab)s
-(o)m(v)m(e)g(t)m(w)m(o)i(steps)d(failed)i(for)e(an)m(y)h(axis,)h(then)f
-(the)g(pixel)g(reference)g(p)s(osition)g(is)f(set)i(to)227
-2763 y(a)d(v)-5 b(alue)31 b(of)f(1.0)i(on)e(the)h(pixel)f(axis.)0
-3031 y(The)g(pixel)h(to)g(W)m(CS)f(Mapping)g(is)h(then)f(used)f(to)j
-(\014nd)c(the)j(corresp)s(onding)e(CR)-10 b(V)g(AL)p
-Fx(j)13 b FF(v)-5 b(alues.)0 3195 y(Again,)29 b(the)f(ab)s(o)m(v)m(e)h
-(pro)s(cedure)e(is)h(o)m(v)m(er-ridden)g(if)g(the)g(F)-8
-b(rame)28 b(is)g(a)g(SkyF)-8 b(rame)29 b(or)e(a)h(Sp)s(ecF)-8
-b(rame,)29 b(in)f(whic)m(h)0 3308 y(case)j(the)g(con)m(v)m(en)m(tions)h
-(of)f(pap)s(ers)e(I)s(I)h(and)f(I)s(I)s(I)g(are)i(used)f(as)g(describ)s
-(ed)f(b)s(elo)m(w.)0 3604 y FD(F.1.4)105 b(Choice)35
-b(of)g(Axis)g(Ordering)0 3828 y FF(When)e(reading)h(a)f(F)-8
-b(rameSet)35 b(from)e(a)h(FitsChan,)g(W)m(CS)f(axis)h
-Fo(i)g FF(in)f(the)h(curren)m(t)f(F)-8 b(rame)34 b(of)g(the)f
-(resulting)0 3941 y(F)-8 b(rameSet)32 b(corresp)s(onds)d(to)i(axis)g
-Fo(i)f FF(in)g(the)h(FITS)e(header.)0 4105 y(When)37
-b(writing)h(a)g(F)-8 b(rameSet)39 b(to)f(a)g(FitsChan,)i(the)e(axis)g
-(ordering)f(for)h(the)f(FITS)g(header)h(is)g(c)m(hosen)g(to)0
-4218 y(mak)m(e)30 b(the)e(CD)p Fx(i)p Fq(_)p Fx(j)42
-b FF(or)28 b(PC)p Fx(i)p Fq(_)p Fx(j)41 b FF(matrix)29
-b(predominately)g(diagonal.)41 b(This)28 b(means)h(that)g(the)f(axis)i
-(n)m(um)m(b)s(ering)0 4331 y(in)g(the)h(FITS)e(header)h(will)h(not)g
-(necessarily)g(b)s(e)f(the)g(same)h(as)g(that)g(in)f(the)g(AST)g(F)-8
-b(rame.)0 4627 y FD(F.1.5)105 b(Alternate)34 b(Axis)h(Descriptions)0
-4851 y FF(When)41 b(reading)h(a)f(F)-8 b(rameSet)43 b(from)e(a)g
-(FitsChan)h(whic)m(h)f(con)m(tains)h(alternate)h(axis)f(descriptions,)i
-(eac)m(h)0 4964 y(complete)37 b(set)f(of)g(axis)g(descriptions)f
-(results)h(in)f(a)h(single)g(F)-8 b(rame)37 b(b)s(eing)e(added)g(to)h
-(the)g(\014nal)f(F)-8 b(rameSet,)0 5077 y(connected)42
-b(via)f(an)g(appropriate)f(Mapping)h(to)g(the)g(base)g(pixel)g(F)-8
-b(rame.)73 b(The)40 b(Iden)m(t)h(attribute)g(of)g(the)0
-5190 y(F)-8 b(rame)36 b(is)f(set)g(to)h(hold)e(the)i(single)f(alphab)s
-(etical)h(c)m(haracter)h(whic)m(h)d(is)h(used)f(to)i(iden)m(tify)f(the)
-g(set)h(of)f(axis)0 5303 y(descriptions)30 b(within)g(the)h(FITS)e
-(header)h(\(a)i(single)f(space)g(is)f(used)g(for)g(the)g(primary)g
-(axis)h(descriptions\).)0 5467 y(When)37 b(writing)h(a)g(F)-8
-b(rameSet)39 b(to)f(a)g(FitsChan,)h(it)f(is)g(assumed)f(that)h(the)g
-(base)f(F)-8 b(rame)39 b(represen)m(ts)e(pixel)0 5580
-y(co)s(ordinates,)g(and)e(the)g(curren)m(t)g(F)-8 b(rame)36
-b(represen)m(ts)f(the)h(primary)e(axis)i(descriptions.)55
-b(If)34 b(there)i(are)f(an)m(y)0 5693 y(other)23 b(F)-8
-b(rames)24 b(presen)m(t)e(in)h(the)g(F)-8 b(rameSet,)25
-b(an)e(attempt)h(is)f(made)f(to)i(create)g(a)f(complete)i(set)e(of)g
-(\\alternate")p eop end
-%%Page: 534 544
-TeXDict begin 534 543 bop 0 52 a FF(534)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)0 351 y FF(set)j(of)f(k)m(eyw)m(ords)
-h(describing)f(eac)m(h)i(additional)f(F)-8 b(rame.)48
-b(The)32 b(\014rst)f(c)m(haracter)j(in)e(the)h(Iden)m(t)f(attribute)h
-(of)0 464 y(the)i(F)-8 b(rame)35 b(is)g(used)f(as)h(the)g(single)g(c)m
-(haracter)h(descriptor)f(to)g(b)s(e)f(app)s(ended)f(to)j(the)e(k)m(eyw)
-m(ord,)j(with)d(the)0 577 y(pro)m(viso)c(that)h(a)f(giv)m(en)h(c)m
-(haracter)h(can)e(only)g(b)s(e)f(used)g(once.)42 b(If)29
-b(a)i(second)f(F)-8 b(rame)30 b(is)g(found)f(with)h(an)f(Iden)m(t)0
-690 y(attribute)g(whic)m(h)e(has)h(already)g(b)s(een)f(used,)h(its)g
-(Iden)m(t)g(attribute)h(is)f(ignored)g(and)f(the)h(next)g(free)g(c)m
-(haracter)0 803 y(is)c(used)f(instead.)39 b(Note,)26
-b(failure)f(to)f(write)g(a)g(set)h(of)f(alternate)h(axis)g
-(descriptions)e(do)s(es)h(not)g(result)g(in)f(failure)0
-916 y(of)32 b(the)g(en)m(tire)g(write)g(op)s(eration:)44
-b(the)32 b(primary)f(axis)h(descriptions)g(are)g(still)g(written,)h
-(together)g(with)e(an)m(y)0 1029 y(other)g(alternate)h(axis)f
-(descriptions)f(whic)m(h)g(can)h(b)s(e)e(pro)s(duced)g(successfully)-8
-b(.)0 1335 y Fw(F.2)113 b(P)m(ap)s(er)37 b(I)s(I)g(-)h(Celestial)g(Co)s
-(ordinates)0 1562 y FF(These)33 b(con)m(v)m(en)m(tions)i(are)f(used)e
-(when)g(reading)i(a)f(F)-8 b(rameSet)34 b(from)f(a)h(FitsChan)f(con)m
-(taining)h(appropriate)0 1675 y(CTYPE)p Fx(i)39 b FF(v)-5
-b(alues,)31 b(and)e(when)h(writing)g(a)h(F)-8 b(rameSet)31
-b(in)g(whic)m(h)f(the)g(W)m(CS)h(F)-8 b(rame)31 b(is)f(a)h(SkyF)-8
-b(rame.)0 1841 y(T)g(able)31 b(2)g(describ)s(es)e(the)i(use)f(made)g(b)
-m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g(whose)f(meaning)h(is)f
-(de\014ned)f(or)h(extended)0 1954 y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)
-s(I.)0 2257 y FD(F.2.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)
-j(W)-9 b(rite)35 b(Op)s(eration)0 2484 y FF(When)43 b(writing)g(a)h(F)
--8 b(rameSet)45 b(in)e(whic)m(h)g(the)g(W)m(CS)h(F)-8
-b(rame)44 b(is)f(a)h(SkyF)-8 b(rame)44 b(to)g(a)g(FitsChan,)i(success)0
-2597 y(dep)s(ends)29 b(on)h(the)g(follo)m(wing)i(conditions)f(b)s(eing)
-f(met:)111 2870 y(1.)46 b(The)h(Mapping)f(from)h(pixel)g(co)s
-(ordinates)h(\(the)f(base)g(F)-8 b(rame)48 b(in)e(the)h(F)-8
-b(rameSet\))49 b(to)e(the)g(W)m(CS)227 2983 y(SkyF)-8
-b(rame)31 b(includes)f(a)h(WcsMap.)111 3179 y(2.)46 b(The)30
-b(Mapping)g(prior)g(to)h(the)g(WcsMap)g(\()p Fx(i.e.)40
-b FF(from)30 b(pixel)h(to)g(IW)m(C\))g(is)g(linear.)111
-3374 y(3.)46 b(The)34 b(Mapping)g(after)g(the)g(WcsMap)h(\()p
-Fx(i.e.)52 b FF(from)33 b(nativ)m(e)i(spherical)g(to)f(celestial)j(co)s
-(ordinates\))e(is)f(a)227 3487 y(spherical)d(rotation)h(for)e(the)g
-(celestial)j(axes,)e(and)f(linear)h(for)f(an)m(y)h(other)f(axes.)0
-3760 y(If)g(an)m(y)h(of)f(the)h(ab)s(o)m(v)m(e)g(conditions)g(do)f(not)
-h(hold,)f(the)h(write)f(op)s(eration)h(will)g(b)s(e)f(unsuccessful.)0
-4063 y FD(F.2.2)105 b(Choice)35 b(of)g(LONPOLE/LA)-9
-b(TPOLE)0 4290 y FF(When)39 b(writing)h(a)f(F)-8 b(rameSet)41
-b(to)f(a)g(FitsChan,)i(the)d(c)m(hoice)i(of)f(LONPOLE)e(and)h(LA)-8
-b(TPOLE)39 b(v)-5 b(alues)39 b(is)0 4403 y(determined)30
-b(as)h(follo)m(ws:)111 4677 y(1.)46 b(If)41 b(the)f(pro)5
-b(jection)42 b(represen)m(ted)e(b)m(y)h(the)g(WcsMap)h(is)e(azim)m
-(uthal,)45 b(then)c(an)m(y)g(v)-5 b(alues)41 b(set)g(for)f(at-)227
-4790 y(tributes)33 b(\\PV)p Fx(i)9 b Fq(_)p FF(3")34
-b(and)e(\\PV)p Fx(i)9 b Fq(_)p FF(4")34 b(\(where)f(\\)p
-Fx(i)9 b FF(")34 b(is)f(the)g(index)g(of)g(the)g(longitude)g(axis\))h
-(within)e(the)227 4903 y(WcsMap)h(are)g(used)e(as)h(the)g(LONPOLE)f
-(and)g(LA)-8 b(TPOLE)32 b(v)-5 b(alues.)46 b(Reading)32
-b(a)g(F)-8 b(rameSet)34 b(from)d(a)227 5016 y(FITS-W)m(CS)i(header)f
-(results)g(in)h(the)g(original)h(LONPOLE)d(and)h(LA)-8
-b(TPOLE)32 b(v)-5 b(alues)33 b(b)s(eing)f(stored)227
-5128 y(within)27 b(a)i(WcsMap)f(within)f(the)h(F)-8 b(rameSet.)41
-b(Consequen)m(tly)-8 b(,)29 b(if)f(a)g(F)-8 b(rameSet)29
-b(is)f(read)g(from)f(a)h(FITS-)227 5241 y(W)m(CS)k(header)g(and)f(it)h
-(is)g(subsequen)m(tly)g(written)f(out)h(to)h(a)f(new)g(FITS-W)m(CS)f
-(header,)h(the)g(original)227 5354 y(LONPOLE)g(and)h(LA)-8
-b(TPOLE)33 b(v)-5 b(alues)33 b(will)h(usually)f(b)s(e)g(used)f(in)h
-(the)h(new)e(header)h(\(the)h(exception)227 5467 y(b)s(eing)h(if)g(the)
-g(WcsMap)h(has)f(b)s(een)g(explicitly)h(mo)s(di\014ed)e(b)s(efore)h(b)s
-(eing)g(written)g(out)g(again\).)56 b(An)m(y)227 5580
-y(extra)28 b(rotation)h(of)e(the)g(sky)g(is)g(absorb)s(ed)f(in)m(to)i
-(the)g(CD)p Fx(i)p Fq(_)p Fx(j)39 b FF(or)27 b(PC)p Fx(i)p
-Fq(_)p Fx(j)40 b FF(matrix)27 b(\(this)g(is)h(p)s(ossible)e(only)227
-5693 y(if)31 b(the)f(pro)5 b(jection)31 b(is)g(azim)m(uthal\).)p
-eop end
-%%Page: 535 545
-TeXDict begin 535 544 bop 0 52 a Fy(F.2)92 b(P)m(ap)s(er)30
-b(I)s(I)g(-)g(Celestial)i(Co)s(ordinates)2152 b FF(535)p
-0 853 3800 4 v -2 965 4 113 v 94 932 a FD(Keyw)m(ord)p
-598 965 V 777 w(Read)p 2198 965 V 1352 w(W)-9 b(rite)p
-3798 965 V 0 969 3800 4 v -2 1533 4 565 v 50 1048 a FF(CTYPE)p
-Fx(ia)p 598 1533 V 202 w FF(All)28 b(co)s(ordinate)g(systems)f(and)g
-(pro)5 b(jection)650 1161 y(t)m(yp)s(es)32 b(listed)g(in)f(pap)s(er)g
-(I)s(I)g(are)h(supp)s(orted)650 1274 y(\(note,)27 b(\\CUBEF)-10
-b(A)m(CE")26 b(axes)g(are)f(treated)650 1386 y(as)32
-b(unkno)m(wn)e(linear)i(axes\).)45 b(In)31 b(addition,)650
-1499 y("-HPX")h(\(HEALPix\))f(is)f(supp)s(orted.)p 2198
-1533 V 2249 1048 a(Determined)45 b(b)m(y)e(the)h(System)g(attribute)
-2249 1161 y(of)52 b(the)g(SkyF)-8 b(rame)52 b(and)f(the)h(WcsT)m(yp)s
-(e)2249 1274 y(attribute)45 b(of)f(the)g(WcsMap)h(within)e(the)2249
-1386 y(F)-8 b(rameSet.)p 3798 1533 V -2 1646 4 113 v
-50 1612 a(CUNIT)p Fx(ia)p 598 1646 V 225 w FF(Ignored)30
-b(\(assumed)g(to)h(b)s(e)f('degrees'\).)p 2198 1646 V
-235 w(Not)i(written.)p 3798 1646 V -2 1985 4 339 v 50
-1725 a(PV)p Fx(i)p Fq(_)p Fx(ma)p 598 1985 V 274 w FF(Used)25
-b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g(Map-)650
-1838 y(ping)f(\(v)-5 b(alues)24 b(are)h(stored)f(as)g(attributes)h(of)
-650 1951 y(a)31 b(WcsMap)g(within)f(this)g(Mapping\).)p
-2198 1985 V 2249 1725 a(V)-8 b(alues)25 b(are)f(obtained)g(from)f(the)g
-(WcsMap)2249 1838 y(in)31 b(the)f(pixel)h(to)g(W)m(CS)f(Mapping.)p
-3798 1985 V -2 2437 4 452 v 50 2064 a(LONPOLE)p Fx(a)p
-598 2437 V 106 w FF(Used)25 b(to)g(create)i(the)e(pixel)g(to)g(W)m(CS)g
-(Map-)650 2177 y(ping.)106 b(Also)54 b(stored)e(as)h(a)g(PVi)p
-Fq(_)p FF(m)f(at-)650 2290 y(tribute)45 b(for)f(the)i(longitude)f(axis)
-g(of)h(the)650 2403 y(WcsMap.)p 2198 2437 V 2249 2064
-a(Only)c(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2177 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2290 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2403 y(b)s(elo)m(w\).)p 3798 2437 V -2 2888 V 50 2516
-a(LA)g(TPOLE)p Fx(a)p 598 2888 V 119 w FF(Used)25 b(to)g(create)i(the)e
-(pixel)g(to)g(W)m(CS)g(Map-)650 2629 y(ping.)37 b(Also)22
-b(stored)g(as)g(a)f(PV)h(attribute)g(for)650 2741 y(the)30
-b(longitude)h(axis)g(of)g(the)f(WcsMap.)p 2198 2888 V
-2249 2516 a(Only)42 b(written)g(if)h(not)f(equal)h(to)g(the)f(de-)2249
-2629 y(fault)52 b(v)-5 b(alue)52 b(de\014ned)e(in)h(pap)s(er)f(I)s(I)g
-(\(see)2249 2741 y(\\Choice)72 b(of)f(LONPOLE/LA)-8 b(TPOLE")2249
-2854 y(b)s(elo)m(w\).)p 3798 2888 V -2 3340 V 50 2967
-a(RADESYS)p Fx(a)p 598 3340 V 118 w FF(Used)66 b(to)h(set)g(the)f
-(attributes)h(of)g(the)650 3080 y(SkyF)-8 b(rame.)77
-b(All)44 b(v)-5 b(alues)42 b(supp)s(orted)f(ex-)650 3193
-y(cept)31 b(that)g(ecliptic)i(co)s(ordinates)e(are)g(cur-)650
-3306 y(ren)m(tly)g(alw)m(a)m(ys)h(assumed)d(to)i(b)s(e)f(FK5.)p
-2198 3340 V 2249 2967 a(Alw)m(a)m(ys)46 b(written.)84
-b(Determined)46 b(b)m(y)e(the)2249 3080 y(System)31 b(attribute)g(of)f
-(the)h(SkyF)-8 b(rame.)p 3798 3340 V -2 3679 4 339 v
-50 3419 a(EQUINO)m(X)p Fx(a)p 598 3679 V 116 w FF(Used)39
-b(to)g(set)g(the)g(Equino)m(x)g(attribute)h(of)650 3532
-y(the)30 b(SkyF)-8 b(rame.)p 2198 3679 V 2249 3419 a(W)g(ritten)79
-b(if)f(relev)-5 b(an)m(t.)183 b(Determined)2249 3532
-y(b)m(y)80 b(the)g(Equino)m(x)f(attribute)h(of)g(the)2249
-3645 y(SkyF)-8 b(rame.)p 3798 3679 V -2 4130 4 452 v
-50 3758 a(EPOCH)p 598 4130 V 271 w(Used)39 b(to)g(set)g(the)g(Equino)m
-(x)g(attribute)h(of)650 3871 y(the)30 b(SkyF)-8 b(rame.)p
-2198 4130 V 2249 3758 a(Only)32 b(written)f(if)h(using)f(FITS-AIPS)g
-(and)2249 3871 y(FITS-AIPS++)72 b(enco)s(dings.)170 b(Deter-)2249
-3983 y(mined)26 b(b)m(y)g(the)g(Equino)m(x)g(attribute)g(of)g(the)2249
-4096 y(SkyF)-8 b(rame.)p 3798 4130 V -2 4808 4 678 v
-50 4209 a(MJD-OBS)p 598 4808 V 185 w(Used)51 b(to)h(set)g(the)g(Ep)s(o)
-s(c)m(h)e(attribute)j(of)650 4322 y(the)c(SkyF)-8 b(rame.)97
-b(D)m(A)-8 b(TE-OBS)50 b(is)g(used)650 4435 y(if)e(MJD-OBS)h(is)g(not)g
-(presen)m(t.)96 b(A)49 b(de-)650 4548 y(fault)42 b(v)-5
-b(alue)43 b(based)f(on)g(RADESYS)f(and)650 4661 y(EQUINO)m(X)h(is)h
-(used)f(if)g(used)g(if)g(D)m(A)-8 b(TE-)650 4774 y(OBS)30
-b(is)g(not)h(presen)m(t)f(either.)p 2198 4808 V 2249
-4209 a(Determined)e(b)m(y)f(the)h(Ep)s(o)s(c)m(h)e(attribute)i(of)2249
-4322 y(the)47 b(SkyF)-8 b(rame.)87 b(Only)46 b(written)g(if)g(this)2249
-4435 y(attribute)d(has)f(b)s(een)f(set)i(to)f(an)g(explicit)2249
-4548 y(v)-5 b(alue)53 b(\(in)f(whic)m(h)g(case)h(D)m(A)-8
-b(TE-OBS)53 b(is)2249 4661 y(also)32 b(written\).)p 3798
-4808 V 0 4811 3800 4 v 969 5086 a(T)-8 b(able)31 b(2:)41
-b(Use)30 b(of)h(FITS-W)m(CS)f(P)m(ap)s(er)g(I)s(I)g(k)m(eyw)m(ords)p
-eop end
-%%Page: 536 546
-TeXDict begin 536 545 bop 0 52 a FF(536)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)111 351 y FF(2.)46
-b(If)29 b(the)f(pro)5 b(jection)30 b(represen)m(ted)f(b)m(y)f(the)h
-(WcsMap)h(is)f(azim)m(uthal)h(but)e(no)g(v)-5 b(alues)29
-b(ha)m(v)m(e)h(b)s(een)e(set)i(for)227 464 y(the)38 b(\\PV)p
-Fx(i)9 b Fq(_)p FF(3")38 b(and)e(\\PV)p Fx(i)9 b Fq(_)p
-FF(4")39 b(attributes)e(within)g(the)g(WcsMap,)j(then)d(the)g(default)h
-(LONPOLE)227 577 y(and)f(LA)-8 b(TPOLE)37 b(v)-5 b(alues)38
-b(are)f(used.)61 b(This)37 b(results)g(in)g(no)h(LONPOLE)e(or)h(LA)-8
-b(TPOLE)37 b(k)m(eyw)m(ords)227 690 y(b)s(eing)28 b(stored)g(in)g(the)g
-(header)g(since)h(default)f(v)-5 b(alues)28 b(are)h(nev)m(er)f(stored.)
-40 b(An)m(y)29 b(extra)g(rotation)g(of)f(the)227 803
-y(sky)k(is)g(absorb)s(ed)f(in)m(to)i(the)g(CD)p Fx(i)p
-Fq(_)p Fx(j)45 b FF(or)32 b(PC)p Fx(i)p Fq(_)p Fx(j)44
-b FF(matrix)32 b(\(this)h(is)f(p)s(ossible)g(only)g(if)g(the)h(pro)5
-b(jection)32 b(is)227 916 y(azim)m(uthal\).)111 1121
-y(3.)46 b(If)35 b(the)g(pro)5 b(jection)35 b(represen)m(ted)g(b)m(y)g
-(the)g(WcsMap)g(is)g(not)g(azim)m(uthal,)j(then)c(the)h(v)-5
-b(alues)36 b(of)f(LON-)227 1234 y(POLE)j(and)g(LA)-8
-b(TPOLE)37 b(are)i(found)e(b)m(y)h(transforming)g(the)h(co)s(ordinates)
-g(of)g(the)f(celestial)j(north)227 1347 y(p)s(ole)28
-b(\()p Fx(i.e)34 b FF(longitude)28 b(zero,)h(latitude)g(+)p
-Fo(\031)s(=)p FF(2\))f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates)g(using)f(the)h(in)m(v)m(erse)227 1459 y(of)j(the)f(Mapping)
-h(whic)m(h)f(follo)m(ws)h(the)g(WcsMap.)0 1778 y FD(F.2.3)105
-b(User)35 b(De\014ned)h(Fiducial)f(P)m(oin)m(ts)0 2012
-y FF(When)f(reading)g(a)h(F)-8 b(rameSet)36 b(from)d(a)i(FitsChan,)g
-(pro)5 b(jection)35 b(parameters)g(PV)p Fx(i)9 b Fq(_)p
-FF(0,)36 b(PV)p Fx(i)9 b Fq(_)p FF(1)34 b(and)g(PV)p
-Fx(i)9 b Fq(_)p FF(2)0 2125 y(\(for)29 b(longitude)h(axis)g(\\)p
-Fx(i)9 b FF("\))31 b(are)e(used)g(to)h(indicate)g(a)g(user-de\014ned)d
-(\014ducial)i(p)s(oin)m(t)h(as)f(describ)s(ed)f(in)h(section)0
-2238 y(2.5)37 b(of)f(pap)s(er)e(I)s(I.)h(This)g(results)h(in)f(a)h
-(shift)g(of)g(IW)m(C)g(origin)g(b)s(eing)f(applied)h
-Fx(b)-5 b(efor)g(e)43 b FF(the)36 b(WcsMap)h(whic)m(h)0
-2351 y(con)m(v)m(erts)g(IW)m(C)f(in)m(to)g(nativ)m(e)h(spherical)f(co)s
-(ordinates.)57 b(The)35 b(v)-5 b(alues)35 b(of)h(these)g(pro)5
-b(jection)36 b(parameters,)h(if)0 2464 y(supplied,)29
-b(are)i(stored)g(as)f(the)h(corresp)s(onding)e(PVi)p
-Fq(_)p FF(m)h(attributes)h(of)g(the)f(WcsMap.)0 2635
-y(When)24 b(writing)g(a)h(F)-8 b(rameSet)25 b(to)g(a)g(FitsChan,)h(the)
-e(PV)g(attributes)h(of)g(the)f(WcsMap)h(determine)g(the)f(nativ)m(e)0
-2748 y(co)s(ordinates)29 b(of)f(the)h(\014ducial)f(p)s(oin)m(t)g(\(the)
-h(\014xed)f(defaults)g(for)g(eac)m(h)h(pro)5 b(jection)29
-b(describ)s(ed)f(in)f(pap)s(er)h(I)s(I)f(are)0 2861 y(used)32
-b(if)h(the)g(PV)g(attributes)h(of)f(the)g(WcsMap)h(ha)m(v)m(e)g(not)g
-(b)s(een)e(assigned)h(a)h(v)-5 b(alue\).)49 b(The)32
-b(corresp)s(onding)0 2974 y(celestial)e(co)s(ordinates)f(are)f(used)e
-(as)i(the)g(CR)-10 b(V)g(AL)p Fx(i)36 b FF(k)m(eyw)m(ords)28
-b(and)f(the)h(corresp)s(onding)f(pixel)h(co)s(ordinates)0
-3087 y(as)j(the)f(CRPIX)p Fx(j)43 b FF(k)m(eyw)m(ords.)0
-3406 y FD(F.2.4)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 3640 y FF(A)39 b(collection)j(of)e(common)f(non-standard)f
-(features)i(are)f(supp)s(orted)e(when)i(reading)g(a)h(F)-8
-b(rameSet)40 b(from)0 3753 y(a)46 b(FitsChan,)j(in)c(addition)g(to)h
-(those)g(em)m(b)s(o)s(died)e(within)h(the)g(a)m(v)-5
-b(ailable)48 b(enco)s(dings)d(of)g(the)h(FitsChan)0 3866
-y(class.)j(These)33 b(are)h(translated)f(in)m(to)h(the)f(equiv)-5
-b(alen)m(t)35 b(standard)d(features)h(b)s(efore)g(b)s(eing)g(used)f(to)
-i(create)g(a)0 3979 y(F)-8 b(rameSet.)60 b(Note,)39 b(the)d(rev)m(erse)
-h(op)s(eration)g(is)f(nev)m(er)h(p)s(erformed:)51 b(it)37
-b(is)f(not)h(p)s(ossible)f(to)h(pro)s(duce)e(non-)0 4092
-y(standard)g(features)h(when)e(writing)i(a)g(F)-8 b(rameSet)37
-b(to)g(a)f(FitsChan)f(\(other)h(than)g(those)g(em)m(b)s(o)s(died)f(in)g
-(the)0 4205 y(a)m(v)-5 b(ailable)33 b(enco)s(dings)d(of)g(the)h
-(FitsChan)f(class\).)42 b(The)30 b(supp)s(orted)e(non-standard)i
-(features)g(include:)136 4493 y Fu(\017)46 b FF(EQUINO)m(X)28
-b(k)m(eyw)m(ords)h(with)e(string)h(v)-5 b(alues)29 b(equal)f(to)h(a)f
-(date)h(preceded)f(b)m(y)f(the)i(letter)g(B)f(or)g(J)g(\()p
-Fx(e.g.)227 4606 y FF(\\B1995.0"\).)136 4811 y Fu(\017)46
-b FF(EQUINO)m(X)31 b(or)f(EPOCH)g(k)m(eyw)m(ords)g(with)g(v)-5
-b(alue)31 b(zero)g(\(these)h(are)e(con)m(v)m(erted)i(to)f(B1950\).)136
-5016 y Fu(\017)46 b FF(The)22 b(IRAF)g(\\ZPX")g(pro)5
-b(jection)23 b(is)f(represen)m(ted)g(b)m(y)f(a)i(WcsMap)f(with)g(t)m
-(yp)s(e)g(of)g(AST)p Fq(__)p FF(ZPN.)f(Pro)5 b(jec-)227
-5128 y(tion)30 b(parameter)f(v)-5 b(alues)29 b(are)g(read)g(from)f(an)m
-(y)i(W)-10 b(A)i(T)p Fx(i)p Fq(_)p Fx(nnn)36 b FF(k)m(eyw)m(ords,)30
-b(and)e(corresp)s(onding)g(PVi)p Fq(_)p FF(m)227 5241
-y(attributes)36 b(are)f(set)h(in)e(the)i(WcsMap.)55 b(The)35
-b(W)-10 b(A)i(T)p Fx(i)p Fq(_)p Fx(nnn)42 b FF(k)m(eyw)m(ords)35
-b(ma)m(y)h(sp)s(ecify)f(corrections)h(to)227 5354 y(the)43
-b(basic)f(ZPN)g(pro)5 b(jection)43 b(b)m(y)g(including)e(\\lngcor")j
-(or)f(\\latcor")h(terms.)77 b(There)41 b(is)i(no)f(direct)227
-5467 y(equiv)-5 b(alen)m(t)30 b(in)d(FITS-W)m(CS)h(to)g(these)g(terms)g
-(and)f(so)h(they)g(are)h(ignored.)40 b(If)27 b(these)h(correction)i
-(terms)227 5580 y(are)d(found,)g(ASTW)-10 b(ARN)26 b(k)m(eyw)m(ords)h
-(are)g(added)f(to)h(the)g(FitsChan)g(con)m(taining)h(a)f(w)m(arning)f
-(message)227 5693 y(\(but)k(only)h(if)f(the)h(W)-8 b(arnings)30
-b(attribute)i(of)e(the)h(FitsChan)f(is)g(set)h(appropriately\).)p
-eop end
-%%Page: 537 547
-TeXDict begin 537 546 bop 0 52 a Fy(F.3)92 b(P)m(ap)s(er)30
-b(I)s(I)s(I)f(-)i(Sp)s(ectral)f(Co)s(ordinates)2129 b
-FF(537)136 351 y Fu(\017)46 b FF(The)37 b(IRAF)h(\\TNX")h(pro)5
-b(jection)38 b(is)g(represen)m(ted)f(b)m(y)h(a)g(WcsMap)h(with)e(t)m
-(yp)s(e)h(of)g(AST)p Fq(__)p FF(TPN)e(\(a)227 464 y(distorted)j(T)-8
-b(AN)39 b(pro)5 b(jection)39 b(retained)g(within)e(the)i(WcsMap)g
-(class)g(from)f(an)h(early)g(draft)f(of)g(the)227 577
-y(FITS-W)m(CS)22 b(pap)s(er)f(I)s(I\).)g(Pro)5 b(jection)23
-b(parameter)g(v)-5 b(alues)22 b(are)g(read)g(from)f(an)m(y)i(W)-10
-b(A)i(T)p Fx(i)p Fq(_)p Fx(nnn)29 b FF(k)m(eyw)m(ords,)227
-690 y(and)34 b(corresp)s(onding)f(PV)i(attributes)g(are)g(set)g(in)f
-(the)g(WcsMap.)54 b(If)34 b(the)g(TNX)h(pro)5 b(jection)35
-b(cannot)227 803 y(b)s(e)e(con)m(v)m(erted)i(exactly)g(in)m(to)f(an)g
-(AST)p Fq(__)p FF(TPN)d(pro)5 b(jection,)35 b(ASTW)-10
-b(ARN)34 b(k)m(eyw)m(ords)f(are)h(added)f(to)227 916
-y(the)40 b(FitsChan)g(con)m(taining)i(a)e(w)m(arning)g(message)h(\(but)
-e(only)h(if)g(the)g(W)-8 b(arnings)41 b(attribute)f(of)g(the)227
-1029 y(FitsChan)31 b(is)f(set)h(appropriately\).)136
-1222 y Fu(\017)46 b FF(\\QV")33 b(parameters)f(for)g(T)-8
-b(AN)32 b(pro)5 b(jections)33 b(\(as)f(pro)s(duced)f(b)m(y)h(A)m(UTO)m
-(ASTR)m(OM)g(are)g(renamed)g(to)227 1335 y(the)f(equiv)-5
-b(alen)m(t)32 b(\\PV")f(parameters.)0 1637 y Fw(F.3)113
-b(P)m(ap)s(er)37 b(I)s(I)s(I)g(-)h(Sp)s(ectral)g(Co)s(ordinates)0
-1862 y FF(These)27 b(con)m(v)m(en)m(tions)i(are)e(used)g(when)f
-(reading)h(a)h(F)-8 b(rameSet)28 b(from)e(a)i(FitsChan)f(whic)m(h)g
-(includes)f(appropri-)0 1975 y(ate)32 b(CTYPE)p Fx(i)38
-b FF(v)-5 b(alues,)31 b(and)f(when)f(writing)i(a)f(F)-8
-b(rameSet)32 b(in)e(whic)m(h)g(the)h(W)m(CS)f(F)-8 b(rame)31
-b(is)g(a)g(Sp)s(ecF)-8 b(rame.)0 2141 y(T)g(able)31 b(3)g(describ)s(es)
-e(the)i(use)f(made)g(b)m(y)g(AST)g(of)g(eac)m(h)h(k)m(eyw)m(ord)g
-(whose)f(meaning)h(is)f(de\014ned)f(or)h(extended)0 2253
-y(b)m(y)g(FITS-W)m(CS)g(pap)s(er)g(I)s(I)s(I.)0 2552
-y FD(F.3.1)105 b(Requiremen)m(ts)36 b(for)f(a)f(Successful)j(W)-9
-b(rite)35 b(Op)s(eration)0 2778 y FF(When)26 b(writing)f(a)i(F)-8
-b(rameSet)27 b(in)e(whic)m(h)h(the)g(W)m(CS)g(F)-8 b(rame)26
-b(is)g(a)g(Sp)s(ecF)-8 b(rame)27 b(to)f(a)g(FitsChan,)h(the)f(write)g
-(op-)0 2891 y(eration)d(is)g(successful)f(only)h(if)f(the)h(Mapping)f
-(from)g(pixel)h(co)s(ordinates)g(\(the)g(base)g(F)-8
-b(rame)23 b(in)f(the)h(F)-8 b(rameSet\))0 3004 y(to)31
-b(the)g(Sp)s(ecF)-8 b(rame)30 b(satis\014es)h(one)g(of)f(the)h(follo)m
-(wing)h(conditions:)111 3274 y(1.)46 b(It)31 b(is)f(linear.)111
-3467 y(2.)46 b(It)31 b(is)f(logarithmic.)111 3660 y(3.)46
-b(It)31 b(is)h(linear)f(if)g(the)g(Sp)s(ecF)-8 b(rame)32
-b(w)m(ere)f(to)h(b)s(e)f(re-mapp)s(ed)f(in)m(to)i(one)f(of)g(the)h
-(other)f(sp)s(ectral)g(systems)227 3773 y(supp)s(orted)e(b)m(y)h
-(FITS-W)m(CS)g(pap)s(er)f(I)s(I)s(I.)111 3966 y(4.)46
-b(It)33 b(con)m(tains)g(a)g(GrismMap,)g(and)e(the)i(Mapping)f(b)s
-(efore)f(the)i(GrismMap)f(\(from)g(pixel)h(co)s(ordinates)227
-4079 y(to)46 b(grism)e(parameter\))i(is)f(linear,)j(and)d(the)f
-(Mapping)h(after)g(the)g(GrismMap)g(is)g(either)g(n)m(ull)f(or)227
-4192 y(represen)m(ts)e(a)f(c)m(hange)i(of)e(sp)s(ectral)h(system)g
-(from)f(w)m(a)m(v)m(elength)i(\(air)f(or)g(v)-5 b(acuum\))41
-b(to)h(one)g(of)f(the)227 4304 y(supp)s(orted)29 b(sp)s(ectral)h
-(systems.)0 4575 y(If)g(none)g(of)h(the)f(ab)s(o)m(v)m(e)i(conditions)f
-(hold,)f(the)g(write)h(op)s(eration)g(will)g(b)s(e)e(unsuccessful.)0
-4874 y FD(F.3.2)105 b(Common)35 b(Non-Standard)g(F)-9
-b(eatures)0 5099 y FF(The)25 b(follo)m(wing)j(non-standard)c(features)i
-(are)h(supp)s(orted)d(when)g(reading)i(sp)s(ectral)g(axes)h(from)e(a)h
-(FitsChan:)136 5369 y Fu(\017)46 b FF(Con)m(v)m(ersion)32
-b(of)f(\\-W)-10 b(A)g(V",)33 b(\\-FR)m(Q")f(and)e(\\-VEL")i(algorithm)g
-(co)s(des)f(\(sp)s(eci\014ed)g(in)f(early)i(drafts)e(of)227
-5482 y(pap)s(er)g(I)s(I)s(I\))f(to)i(the)f(corresp)s(onding)g(\\-X2P")i
-(form.)136 5675 y Fu(\017)46 b FF(Con)m(v)m(ersion)31
-b(of)g(\\RESTFREQ")f(to)h(\\RESTFR)m(Q")p eop end
-%%Page: 538 548
-TeXDict begin 538 547 bop 0 52 a FF(538)2489 b Fy(F)91
-b(FITS-W)m(CS)30 b(CO)m(VERA)m(GE)p 0 263 4002 4 v -2
-376 4 113 v 196 342 a FD(Keyw)m(ord)p 801 376 V 877 w(Read)p
-2400 376 V 1353 w(W)-9 b(rite)p 4000 376 V 0 379 4002
-4 v -2 944 4 565 v 50 459 a FF(CTYPE)p Fx(ia)p 801 944
-V 404 w FF(All)28 b(co)s(ordinate)g(systems)g(and)e(pro)5
-b(jection)852 571 y(t)m(yp)s(es)22 b(listed)g(in)f(pap)s(er)g(I)s(I)s
-(I)f(are)i(supp)s(orted,)852 684 y(except)32 b(for)e(the)h(\\-T)-8
-b(AB")32 b(algorithm)f(\(the)852 797 y(\\-LOG")53 b(algorithm)f(ma)m(y)
-g(also)h(b)s(e)e(ap-)852 910 y(plied)30 b(to)h(non-sp)s(ectral)g
-(linear)g(axes\).)p 2400 944 V 2452 459 a(Determined)21
-b(b)m(y)f(the)g(System)g(attribute)h(of)2452 571 y(the)35
-b(Sp)s(ecF)-8 b(rame)35 b(and)g(the)g(nature)g(of)g(the)2452
-684 y(pixel)30 b(to)i(Sp)s(ecF)-8 b(rame)30 b(Mapping.)p
-4000 944 V -2 1396 4 452 v 50 1023 a(CUNIT)p Fx(ia)p
-801 1396 V 427 w FF(Used)h(to)h(set)g(the)f(Units)h(attribute)f(of)h
-(the)852 1136 y(Sp)s(ecF)-8 b(rame)35 b(\(note,)i(Sp)s(ecF)-8
-b(rames)34 b(alw)m(a)m(ys)852 1249 y(ha)m(v)m(e)j(an)g(\\activ)m(e")i
-(Units)d(attribute)h(\(see)852 1362 y(astSetActiv)m(eUnit\).)p
-2400 1396 V 2452 1023 a(Alw)m(a)m(ys)31 b(written.)p
-4000 1396 V -2 1734 4 339 v 50 1475 a(PV)p Fx(i)p Fq(_)p
-Fx(ma)p 801 1734 V 476 w FF(Used)25 b(to)g(create)i(the)e(pixel)g(to)h
-(W)m(CS)e(Map-)852 1588 y(ping)g(\(v)-5 b(alues)24 b(are)h(stored)f(as)
-g(attributes)h(of)852 1701 y(a)31 b(GrismMap\).)p 2400
-1734 V 2452 1475 a(Set)46 b(from)f(the)i(attributes)f(of)g(the)g(Gris-)
-2452 1588 y(mMap,)28 b(if)f(presen)m(t,)h(and)e(if)h(set)g(explicitly)
--8 b(.)p 4000 1734 V -2 2073 V 50 1813 a(SPECSYS)p Fx(a)p
-801 2073 V 345 w FF(Used)24 b(to)i(set)e(the)h(StdOfRest)f(attribute)h
-(of)852 1926 y(the)43 b(Sp)s(ecF)-8 b(rame)43 b(\(all)h(systems)f(are)g
-(sup-)852 2039 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 2073 V 2452 1813 a(Set)44 b(from)h(the)f(StdOfRest)g(attribute)h
-(of)2452 1926 y(the)26 b(Sp)s(ecF)-8 b(rame,)27 b(but)e(only)g(if)h(it)
-g(has)f(b)s(een)2452 2039 y(set)31 b(explicitly)-8 b(.)p
-4000 2073 V -2 2186 4 113 v 50 2152 a(SSYSOBS)p Fx(a)p
-801 2186 V 349 w FF(Ignored.)p 2400 2186 V 1274 w(Nev)m(er)31
-b(written.)p 4000 2186 V -2 2638 4 452 v 50 2265 a(OBSGEO-X/Y/Z)p
-801 2638 V 100 w(Used)39 b(to)h(set)g(the)g(ObsLon)e(and)g(ObsLat)852
-2378 y(attributes)28 b(of)f(the)g(F)-8 b(rame)28 b(\(the)g(observ)m
-(ers)852 2491 y(heigh)m(t)j(ab)s(o)m(v)m(e)h(sea)f(lev)m(el)h(is)e
-(ignored\).)p 2400 2638 V 2452 2265 a(Set)j(from)g(the)h(ObsLon)f(and)f
-(ObsLat)i(at-)2452 2378 y(tributes)51 b(of)g(the)g(F)-8
-b(rame,)57 b(if)51 b(they)g(ha)m(v)m(e)2452 2491 y(b)s(een)29
-b(set)i(explicitly)h(\(it)g(is)e(assumed)g(that)2452
-2604 y(the)g(observ)m(er)h(is)f(at)h(sea)g(lev)m(el\).)p
-4000 2638 V -2 2976 4 339 v 50 2717 a(MJD-A)-10 b(V)m(G)p
-801 2976 V 379 w(Used)21 b(to)h(set)f(the)g(Ep)s(o)s(c)m(h)f
-(attributes)i(of)f(the)852 2830 y(Sp)s(ecF)-8 b(rame.)p
-2400 2976 V 2452 2717 a(Set)43 b(from)g(the)g(Ep)s(o)s(c)m(h)f
-(attribute)i(of)f(the)2452 2830 y(Sp)s(ecF)-8 b(rame,)42
-b(if)e(it)g(has)f(b)s(een)g(set)i(explic-)2452 2943 y(itly)-8
-b(.)p 4000 2976 V -2 3315 V 50 3055 a(SSYSSR)m(C)p Fx(a)p
-801 3315 V 354 w FF(Used)35 b(to)h(set)g(the)f(SourceVRF)g(attribute)
-852 3168 y(of)24 b(the)f(Sp)s(ecF)-8 b(rame)24 b(\(all)h(systems)e(are)
-h(sup-)852 3281 y(p)s(orted)30 b(except)h(CMBDIPOL\).)p
-2400 3315 V 2452 3055 a(Set)36 b(from)f(the)h(SourceVRF)g(attribute)g
-(of)2452 3168 y(the)30 b(Sp)s(ecF)-8 b(rame.)p 4000 3315
-V -2 4106 4 791 v 50 3394 a(ZSOUR)m(CE)p Fx(a)p 801 4106
-V 318 w FF(Used)49 b(to)g(set)h(the)e(SourceV)-8 b(el)50
-b(attribute)852 3507 y(of)28 b(the)f(Sp)s(ecF)-8 b(rame)28
-b(\(the)g(SourceVRF)g(at-)852 3620 y(tribute)34 b(is)g(\014rst)f(set)h
-(to)h(the)f(system)g(indi-)852 3733 y(cated)g(b)m(y)f(the)g(SSYSSR)m(C)
-e(k)m(eyw)m(ord,)k(and)852 3846 y(the)23 b(ZSOUR)m(CE)e(v)-5
-b(alue)23 b(is)g(then)g(con)m(v)m(erted)852 3959 y(to)59
-b(an)g(apparen)m(t)g(radial)g(v)m(elo)s(cit)m(y)i(and)852
-4072 y(stored)31 b(as)f(the)h(SourceV)-8 b(el)31 b(attribute\).)p
-2400 4106 V 2452 3394 a(Set)49 b(from)g(the)h(SourceV)-8
-b(el)50 b(attribute)g(of)2452 3507 y(the)36 b(Sp)s(ecF)-8
-b(rame,)38 b(if)f(it)g(has)f(b)s(een)f(set)i(ex-)2452
-3620 y(plicitly)51 b(\(the)g(SourceV)-8 b(el)51 b(v)-5
-b(alue)51 b(is)f(\014rst)2452 3733 y(con)m(v)m(erted)33
-b(from)e(apparen)m(t)g(radial)h(v)m(elo)s(c-)2452 3846
-y(it)m(y)f(to)g(redshift\).)p 4000 4106 V -2 4444 4 339
-v 50 4185 a(VELOSYS)p Fx(a)p 801 4444 V 328 w FF(Ignored.)p
-2400 4444 V 1274 w(Set)95 b(from)f(the)h(attributes)g(of)g(the)2452
-4297 y(Sp)s(ecF)-8 b(rame)24 b(that)g(de\014ne)f(the)h(standard)f(of)
-2452 4410 y(rest)30 b(and)g(the)h(observ)m(ers)f(p)s(osition.)p
-4000 4444 V -2 5122 4 678 v 50 4523 a(RESTFR)m(Q)p Fx(a)p
-801 5122 V 316 w FF(Used)k(to)h(set)g(the)f(RestF)-8
-b(req)36 b(attribute)f(of)852 4636 y(the)c(Sp)s(ecF)-8
-b(rame.)p 2400 5122 V 2452 4523 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 4636 y(the)44 b(Sp)s(ecF)-8
-b(rame,)47 b(but)c(only)h(if)g(the)g(Sys-)2452 4749 y(tem)37
-b(attribute)h(is)f(not)h(set)f(to)h(\\W)-10 b(A)g(VE",)2452
-4862 y(\\V)m(OPT",)42 b(\\ZOPT")e(or)h(\\A)-10 b(W)g(A)g(V",)43
-b(and)2452 4975 y(only)c(if)g(RestF)-8 b(req)41 b(has)e(b)s(een)g(set)h
-(explic-)2452 5088 y(itly)-8 b(.)p 4000 5122 V -2 5799
-V 50 5201 a(RESTW)e(A)g(V)p Fx(a)p 801 5799 V 301 w FF(Used)34
-b(to)h(set)g(the)f(RestF)-8 b(req)36 b(attribute)f(of)852
-5314 y(the)c(Sp)s(ecF)-8 b(rame)31 b(\(after)h(con)m(v)m(ersion)g(from)
-852 5427 y(w)m(a)m(v)m(elength)h(to)e(frequency\).)p
-2400 5799 V 2452 5201 a(Set)56 b(from)g(the)h(RestF)-8
-b(req)57 b(attribute)g(of)2452 5314 y(the)28 b(Sp)s(ecF)-8
-b(rame)28 b(\(after)g(con)m(v)m(ersion\),)i(but)2452
-5427 y(only)56 b(if)h(the)g(System)f(attribute)h(is)g(set)2452
-5539 y(to)g(\\W)-10 b(A)g(VE",)58 b(\\V)m(OPT",)g(\\ZOPT")e(or)2452
-5652 y(\\A)-10 b(W)g(A)g(V",)54 b(and)e(only)g(if)g(RestF)-8
-b(req)54 b(has)2452 5765 y(b)s(een)29 b(set)i(explicitly)-8
-b(.)p 4000 5799 V -2 6138 4 339 v 50 5878 a(CNAME)p Fx(ia)p
-801 6138 V 381 w FF(Used)25 b(to)h(set)g(the)f(Lab)s(el)h(attributes)f
-(of)h(the)852 5991 y(W)m(CS)k(F)-8 b(rame)32 b(k)m(eyw)m(ords.)p
-2400 6138 V 2452 5878 a(Set)42 b(from)g(the)g(Lab)s(el)g(attributes)h
-(of)f(the)2452 5991 y(W)m(CS)28 b(F)-8 b(rame,)30 b(if)e(they)g(ha)m(v)
-m(e)i(b)s(een)d(set)i(ex-)2452 6104 y(plicitly)-8 b(.)p
-4000 6138 V 0 6141 4002 4 v 951 6416 a(T)g(able)31 b(3:)41
-b(Use)31 b(of)f(FITS-W)m(CS)g(P)m(ap)s(er)g(I)s(I)s(I)f(k)m(eyw)m(ords)
-p eop end
-%%Page: 539 549
-TeXDict begin 539 548 bop 0 52 a Fy(F.4)92 b(P)m(ap)s(er)30
-b(IV)g(-)h(Co)s(ordinate)f(Distortions)2056 b FF(539)0
-351 y Fw(F.4)113 b(P)m(ap)s(er)37 b(IV)g(-)h(Co)s(ordinate)g
-(Distortions)0 573 y FF(This)25 b(pap)s(er)f(prop)s(oses)h(that)h(an)g
-(additional)g(4)g(c)m(haracter)h(co)s(de)f(b)s(e)f(app)s(ended)f(to)i
-(the)g(end)f(of)h(the)f(CTYPE)p Fx(i)0 686 y FF(k)m(eyw)m(ord)k(to)h
-(sp)s(ecify)f(the)g(nature)f(of)h(an)m(y)h(distortion)f(a)m(w)m(a)m(y)i
-(from)d(the)h(basic)h(algorithm)g(describ)s(ed)d(b)m(y)i(the)0
-799 y(\014rst)37 b(8)h(c)m(haracters)h(of)f(the)g(CTYPE)p
-Fx(i)46 b FF(v)-5 b(alue.)63 b(Curren)m(tly)37 b(AST)g(ignores)h(all)h
-(suc)m(h)e(co)s(des)h(when)e(reading)0 911 y(a)h(F)-8
-b(rameSet)38 b(from)f(a)g(FitsChan)g(\(except)h(for)f(the)g(\\-SIP")g
-(co)s(de)g(de\014ned)f(b)m(y)h(the)g(SIR)-8 b(TF)36 b(pro)5
-b(ject)38 b(-)f(see)0 1024 y(b)s(elo)m(w\).)71 b(This)39
-b(means)h(that)h(a)f(F)-8 b(rameSet)42 b(can)e(still)h(b)s(e)f(read)g
-(from)f(suc)m(h)h(headers,)j(but)c(the)i(Mapping)0 1137
-y(whic)m(h)33 b(giv)m(es)h(the)f(W)m(CS)g(p)s(osition)g(asso)s(ciated)i
-(with)d(a)i(giv)m(en)g(pixel)f(p)s(osition)g(will)g(re\015ect)h(only)f
-(the)g(basic)0 1250 y(algorithm)e(and)f(will)h(not)f(include)h(the)f
-(e\013ects)i(of)e(the)h(distortion.)0 1413 y(If)40 b(suc)m(h)g(a)h(F)-8
-b(rameSet)42 b(is)f(then)f(written)h(out)f(to)i(a)f(FitsChan,)i(the)e
-(resulting)f(CTYPE)p Fx(i)49 b FF(k)m(eyw)m(ords)41 b(will)0
-1526 y(include)30 b(no)g(distortion)h(co)s(de.)0 1816
-y FD(F.4.1)105 b(The)35 b(\\-SIP")f(distortion)h(co)s(de)0
-2037 y FF(The)d(SIR)-8 b(TF)32 b(pro)5 b(ject)33 b(\(h)m
-(ttp://sirtf.caltec)m(h.edu/SSC/\))j(has)c(dev)m(elop)s(ed)h(its)g(o)m
-(wn)g(system)f(for)h(enco)s(ding)0 2150 y(2-dimensional)27
-b(image)g(distortion)g(within)e(a)i(FITS)e(header,)i(based)f(on)g(the)g
-(prop)s(osals)g(of)g(pap)s(er)f(IV.)h(A)g(de-)0 2263
-y(scription)20 b(of)h(this)f(system)g(is)h(a)m(v)-5 b(ailable)22
-b(in)e(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)m(ts/W)m(CSk)m
-(eyw)m(ords)p Fq(_)p FF(v1.3.p)s(df.)0 2376 y(In)k(this)g(system,)i
-(the)e(presence)h(of)f(distortion)h(is)f(indicated)h(b)m(y)f(app)s
-(ending)f(the)i(distortion)g(co)s(de)f(\\-SIP")h(to)0
-2489 y(the)f(CTYPE)p Fx(i)32 b FF(k)m(eyw)m(ord)24 b(v)-5
-b(alues)24 b(for)f(the)h(celestial)i(axes.)39 b(The)23
-b(distortion)h(tak)m(es)h(the)f(form)f(of)h(a)g(p)s(olynomial)0
-2602 y(function)30 b(whic)m(h)g(is)h(applied)f(to)h(the)f(pixel)h(co)s
-(ordinates,)g(after)g(subtraction)g(of)f(the)h(CRPIX)p
-Fx(j)43 b FF(v)-5 b(alues.)0 2764 y(This)39 b(system)h(is)g(a)g
-(strictly)h(2)f(dimensional)g(system.)69 b(When)39 b(reading)h(a)g(F)-8
-b(rameSet)41 b(from)e(a)i(FitsChan)0 2877 y(whic)m(h)c(includes)f(the)h
-(\\-SIP")g(distortion)h(co)s(de,)h(AST)d(assumes)g(that)i(it)f(is)g
-(only)g(applied)f(to)i(the)f(\014rst)f(2)0 2990 y(W)m(CS)j(axes)g(in)g
-(a)g(FITS)f(header)h(\(i.e.)67 b(CTYPE1)39 b(and)f(CTYPE2\).)66
-b(If)39 b(the)g(\\-SIP")g(distortion)g(co)s(de)g(is)0
-3103 y(attac)m(hed)h(to)f(other)f(axes,)j(it)e(will)f(b)s(e)f(ignored.)
-64 b(The)38 b(distortion)h(itself)g(is)f(represen)m(ted)g(b)m(y)g(a)g
-(P)m(olyMap)0 3216 y(within)30 b(the)g(resulting)h(F)-8
-b(rameSet.)0 3379 y(If)27 b(a)h(F)-8 b(rameSet)29 b(is)f(read)g(from)f
-(a)h(FitsChan)g(whic)m(h)g(includes)f(\\-SIP")h(distortion,)h(and)e(an)
-h(attempt)h(is)f(then)0 3492 y(made)d(to)g(write)f(this)h(F)-8
-b(rameSet)26 b(out)e(to)h(a)g(FitsChan,)h(the)f(write)g(op)s(eration)f
-(will)h(fail)g(unless)f(the)h(distortion)0 3605 y(is)34
-b(insigni\014can)m(t)i(\()p Fx(i.e.)52 b FF(is)34 b(so)h(small)g(that)g
-(the)g(tests)g(for)f(linearit)m(y)i(built)e(in)m(to)i(AST)d(are)i
-(passed\).)53 b(In)34 b(this)0 3718 y(case,)e(no)e(distortion)h(co)s
-(de)f(will)h(b)s(e)f(app)s(ended)f(to)i(the)f(resulting)h(CTYPE)p
-Fx(i)38 b FF(k)m(eyw)m(ord)31 b(v)-5 b(alues.)p eop end
-%%Page: 540 550
-TeXDict begin 540 549 bop 0 52 a FF(540)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fz(G)134
-b(Changes)46 b(and)e(New)i(F)-11 b(eatures)0 598 y Fw(G.1)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.1)0 811 y FF(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 924 y(v)m(ersions)31 b(V1.0)g(and)f(V1.1)i(\(not)f(the)f
-(most)h(recen)m(t)g(v)m(ersion\):)111 1150 y(1.)46 b(A)37
-b(new)g(\\Ho)m(w)h(T)-8 b(o.)16 b(.)f(.)h(")60 b(section)38
-b(\()p Fu(x)p FF(3\))h(has)d(b)s(een)g(added)h(to)g(this)g(do)s(cumen)m
-(t.)60 b(It)37 b(con)m(tains)h(simple)227 1263 y(recipies)31
-b(for)f(p)s(erforming)g(commonly-required)g(op)s(erations)h(using)f
-(AST.)111 1441 y(2.)46 b(A)36 b(new)g(astUnformat)g(function)g(has)g(b)
-s(een)f(pro)m(vided)h(to)g(read)g(formatted)h(co)s(ordinate)f(v)-5
-b(alues)37 b(for)227 1554 y(the)27 b(axes)h(of)f(a)g(F)-8
-b(rame)27 b(\()p Fu(x)p FF(7.8\).)42 b(In)26 b(essence,)j(this)d
-(function)h(is)g(the)g(in)m(v)m(erse)g(of)g(astF)-8 b(ormat.)42
-b(It)27 b(ma)m(y)g(b)s(e)227 1667 y(used)e(to)i(deco)s(de)f
-(user-supplied)f(formatted)h(v)-5 b(alues)26 b(represen)m(ting)h(co)s
-(ordinates,)g(turning)f(them)f(in)m(to)227 1780 y(n)m(umerical)i(v)-5
-b(alues)27 b(for)f(pro)s(cessing.)39 b(Celestial)28 b(co)s(ordinates)f
-(ma)m(y)g(also)g(b)s(e)f(read)g(using)g(this)g(function)227
-1893 y(\()p Fu(x)p FF(8.7\))33 b(and)d(free-format)h(input)e(is)i(supp)
-s(orted.)111 2072 y(3.)46 b(The)41 b(F)-8 b(ormat)42
-b(attribute)g(string)f(used)f(b)m(y)h(a)h(SkyF)-8 b(rame)41
-b(when)f(formatting)i(celestial)i(co)s(ordinate)227 2185
-y(v)-5 b(alues)30 b(no)m(w)f(allo)m(ws)i(the)e(degrees/hours)g(\014eld)
-g(to)h(b)s(e)e(omitted,)j(so)e(that)h(celestial)i(co)s(ordinates)e(ma)m
-(y)227 2297 y(b)s(e)k(giv)m(en)i(in)e(\()p Fx(e.g.)p
-FF(\))53 b(arc-min)m(utes)35 b(and/or)f(arc-seconds)i(\()p
-Fu(x)p FF(8.6\).)55 b(As)34 b(a)h(result,)h(the)f(degrees/hours)227
-2410 y(\014eld)28 b(is)f(no)h(longer)g(included)f(b)m(y)g(default.)40
-b(A)28 b(new)f(\\t")i(format)f(sp)s(eci\014er)f(has)h(b)s(een)e(in)m
-(tro)s(duced)i(\(see)227 2523 y(the)i(F)-8 b(ormat)31
-b(attribute\))g(to)f(allo)m(w)h(min)m(utes)f(and/or)f(seconds)h(of)g
-(time)g(to)g(b)s(e)f(sp)s(eci\014ed)g(if)h(required.)111
-2702 y(4.)46 b(A)38 b(new)f(function)g(astMapBo)m(x)i(has)e(b)s(een)g
-(in)m(tro)s(duced.)61 b(This)37 b(allo)m(ws)h(y)m(ou)g(to)g(\014nd)e
-(the)i(exten)m(t)g(of)227 2815 y(a)k(\\b)s(ounding)e(b)s(o)m(x")i(whic)
-m(h)f(just)g(encloses)h(another)g(b)s(o)m(x)f(after)h(it)g(has)f(b)s
-(een)g(transformed)g(b)m(y)g(a)227 2928 y(Mapping.)60
-b(A)36 b(t)m(ypical)i(use)f(migh)m(t)g(b)s(e)f(to)h(calculate)i(the)e
-(size)h(whic)m(h)e(an)g(image)i(w)m(ould)f(ha)m(v)m(e)g(if)g(it)227
-3041 y(w)m(ere)31 b(transformed)f(b)m(y)g(the)h(Mapping.)111
-3219 y(5.)46 b(A)26 b(new)e(class)j(of)e(Ob)5 b(ject,)27
-b(the)e(In)m(traMap,)i(has)e(b)s(een)g(in)m(tro)s(duced)g(\()p
-Fu(x)p FF(20\).)41 b(This)24 b(is)h(a)h(sp)s(ecialised)g(form)227
-3332 y(of)21 b(Mapping)g(whic)m(h)g(encapsulates)h(a)f(priv)-5
-b(ately-de\014ned)21 b(co)s(ordinate)h(transformation)f(function)g(\()p
-Fx(e.g.)227 3445 y FF(written)38 b(in)f(C\))g(so)g(that)h(it)g(ma)m(y)g
-(b)s(e)e(used)h(lik)m(e)h(an)m(y)g(other)f(AST)g(Mapping.)61
-b(This)37 b(allo)m(ws)h(y)m(ou)g(to)227 3558 y(create)32
-b(Mappings)e(that)h(p)s(erform)e(an)m(y)i(conceiv)-5
-b(able)32 b(co)s(ordinate)f(transformation.)111 3737
-y(6.)46 b(The)27 b(in)m(ternal)h(in)m(tegrit)m(y)h(of)e(a)h(F)-8
-b(rameSet)28 b(is)g(no)m(w)f(automatically)j(preserv)m(ed)d(whenev)m
-(er)g(c)m(hanges)h(are)227 3849 y(made)i(to)h(an)m(y)f(attributes)h
-(whic)m(h)f(a\013ect)h(the)g(curren)m(t)e(F)-8 b(rame)31
-b(\(either)g(b)m(y)f(setting)h(or)f(clearing)h(their)227
-3962 y(v)-5 b(alues\).)46 b(This)31 b(is)g(accomplished)i(b)m(y)e
-(appropriately)h(re-mapping)g(the)f(curren)m(t)h(F)-8
-b(rame)33 b(to)f(accoun)m(t)227 4075 y(for)e(an)m(y)h(c)m(hange)h(to)f
-(the)f(co)s(ordinate)i(system)e(whic)m(h)g(it)h(represen)m(ts)f(\()p
-Fu(x)p FF(14.6\).)111 4254 y(7.)46 b(The)33 b(in)m(ternal)g(structure)g
-(of)g(a)g(F)-8 b(rameSet)35 b(is)e(no)m(w)g(automatically)i(tidied)e
-(to)h(eliminate)h(redundan)m(t)227 4367 y(no)s(des)41
-b(whenev)m(er)g(an)m(y)h(of)g(its)g(F)-8 b(rames)42 b(is)g(remo)m(v)m
-(ed)h(or)e(re-mapp)s(ed.)73 b(Automatic)44 b(simpli\014cation)227
-4480 y(of)e(an)m(y)f(comp)s(ound)f(Mappings)h(whic)m(h)h(result)f(ma)m
-(y)h(also)g(o)s(ccur.)73 b(The)41 b(e\013ect)i(of)f(this)f(c)m(hange)h
-(is)227 4593 y(to)34 b(prev)m(en)m(t)g(the)f(accum)m(ulation)i(of)e
-(unnecessary)f(structure)h(in)g(F)-8 b(rameSets)34 b(whic)m(h)f(are)g
-(rep)s(eatedly)227 4706 y(mo)s(di\014ed.)111 4884 y(8.)46
-b(Some)39 b(impro)m(v)m(emen)m(ts)g(ha)m(v)m(e)h(b)s(een)d(made)i(to)g
-(the)g(algorithms)g(for)f(simplifying)g(comp)s(ound)f(Map-)227
-4997 y(pings,)30 b(as)h(used)f(b)m(y)g(astSimplify)-8
-b(.)111 5176 y(9.)46 b(The)23 b(textual)h(represen)m(tation)g(used)e
-(for)h(some)g(Ob)5 b(jects)23 b(\()p Fx(i.e.)g FF(when)f(they)h(are)g
-(written)g(to)h(a)f(Channel\))227 5289 y(has)30 b(c)m(hanged)h(sligh)m
-(tly)-8 b(,)33 b(but)c(remains)i(compatible)g(with)f(earlier)i(v)m
-(ersions)e(of)h(AST.)66 5467 y(10.)46 b(In)m(terfaces)39
-b(to)g(the)f(in)m(ternal)h(functions)f(and)f(macros)i(used)e(b)m(y)h
-(AST)f(for)h(handling)f(memory)h(and)227 5580 y(error)f(conditions)h
-(are)g(no)m(w)f(pro)m(vided)g Fx(via)h FF(the)f(\\ast.h")i(header)e
-(\014le.)62 b(This)37 b(is)g(for)g(the)h(b)s(ene\014t)e(of)227
-5693 y(those)31 b(writing)g(\()p Fx(e.g.)p FF(\))40 b(new)30
-b(graphics)g(in)m(terfaces)i(for)e(AST.)p eop end
-%%Page: 541 551
-TeXDict begin 541 550 bop 0 52 a Fy(G.2)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.2)2294 b FF(541)66 351 y(11.)46
-b(A)28 b(problem)g(has)g(b)s(een)f(\014xed)g(whic)m(h)h(could)g(result)
-g(when)f(using)h(astRead)h(to)g(read)f(FITS)f(headers)h(in)227
-464 y(whic)m(h)j(the)h(CDEL)-8 b(T)31 b(v)-5 b(alue)31
-b(is)h(zero.)44 b(Previously)-8 b(,)32 b(this)f(could)h(pro)s(duce)e(a)
-h(Mapping)h(whose)f(in)m(v)m(erse)227 577 y(transformation)37
-b(w)m(as)f(not)g(de\014ned)f(and)g(this)h(could)g(unnecessarily)g
-(restrict)h(the)f(use)g(to)g(whic)m(h)g(it)227 690 y(could)26
-b(b)s(e)e(put.)39 b(The)24 b(problem)h(has)g(b)s(een)g(o)m(v)m(ercome)i
-(b)m(y)f(supplying)e(a)h(suitable)h(small)g(CDEL)-8 b(T)25
-b(v)-5 b(alue)227 803 y(for)30 b(FITS)g(axes)h(whic)m(h)f(ha)m(v)m(e)i
-(only)e(a)h(single)g(pixel.)66 989 y(12.)46 b(A)37 b(bug)f(has)h(b)s
-(een)f(\014xed)g(whic)m(h)g(could)h(o)s(ccasionally)i(cause)e(a)g
-(MatrixMap)h(to)g(b)s(e)e(used)g(with)g(the)227 1102
-y(wrong)e(In)m(v)m(ert)g(attribute)g(v)-5 b(alue)35 b(when)d(it)j
-(forms)e(part)h(of)f(a)i(comp)s(ound)d(Mapping)i(whic)m(h)f(is)h(b)s
-(eing)227 1215 y(simpli\014ed)c(using)g(astSimplify)-8
-b(.)66 1401 y(13.)46 b(A)37 b(problem)f(has)g(b)s(een)g(\014xed)g(whic)
-m(h)h(could)f(prev)m(en)m(t)i(tic)m(k)g(marks)e(b)s(eing)g(dra)m(wn)g
-(on)h(a)g(co)s(ordinate)227 1514 y(axis)31 b(close)h(to)f(a)g
-(singularit)m(y)g(in)f(the)h(co)s(ordinate)g(system.)0
-1806 y Fw(G.2)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.2)0
-2026 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2139 y(v)m(ersions)31
-b(V1.1)g(and)f(V1.2)i(\(not)f(the)f(most)h(recen)m(t)g(v)m(ersion\):)
-111 2396 y(1.)46 b(A)c(new)f(function,)j(astP)m(olyCurv)m(e,)i(has)c(b)
-s(een)e(in)m(tro)s(duced)h(to)i(allo)m(w)g(more)f(e\016cien)m(t)h
-(plotting)f(of)227 2509 y(m)m(ultiple)31 b(geo)s(desic)h(curv)m(es)e
-(\()p Fu(x)p FF(21.3\).)111 2695 y(2.)46 b(A)32 b(new)g(set)h(of)f
-(functions,)g(astResample)p Fo(<)p FF(X)p Fo(>)p FF(,)i(has)e(b)s(een)f
-(in)m(tro)s(duced)h(to)h(p)s(erform)d(resampling)i(of)227
-2808 y(gridded)d(data)g(suc)m(h)g(as)g(images)i(\()p
-Fx(i.e.)d FF(re-gridding\))i(under)d(the)j(con)m(trol)g(of)f(a)h
-(geometrical)i(transfor-)227 2921 y(mation)f(sp)s(eci\014ed)f(b)m(y)g
-(a)h(Mapping.)111 3107 y(3.)46 b(The)40 b(command-line)g(options)g(\\)p
-Fu(\000)p FF(pgp")g(and)f(\\)p Fu(\000)p FF(pgplot",)44
-b(whic)m(h)39 b(w)m(ere)i(previously)e(synon)m(ymous)227
-3220 y(when)20 b(used)g(with)h(the)g(\\ast)p Fq(_)p FF(link")h(and)f
-(\\ast)p Fq(_)p FF(link)p Fq(_)p FF(adam")h(commands,)g(are)g(no)e
-(longer)i(synon)m(ymous.)227 3333 y(The)28 b(option)h(\\)p
-Fu(\000)p FF(pgp")g(no)m(w)g(causes)g(linking)f(with)h(the)f(Starlink)h
-(v)m(ersion)g(of)f(PGPLOT)g(\(whic)m(h)h(uses)227 3446
-y(GKS)23 b(to)g(generate)i(its)e(output\),)i(while)e(\\)p
-Fu(\000)p FF(pgplot")h(links)e(with)h(the)g(standard)f(\(or)h(\\nativ)m
-(e"\))j(v)m(ersion)227 3559 y(of)31 b(PGPLOT.)111 3745
-y(4.)46 b(The)40 b(function)f(astMapBo)m(x)j(has)e(b)s(een)f(c)m
-(hanged)i(to)f(execute)i(more)e(quic)m(kly)-8 b(,)44
-b(although)c(this)g(has)227 3858 y(b)s(een)30 b(ac)m(hiev)m(ed)i(at)f
-(the)g(cost)g(of)g(some)f(loss)h(of)g(robustness)e(when)g(used)h(with)g
-(di\016cult)g(Mappings.)111 4044 y(5.)46 b(A)21 b(new)e(v)-5
-b(alue)21 b(of)g(\\FITS-IRAF")g(has)f(b)s(een)f(in)m(tro)s(duced)h(for)
-g(the)g(Enco)s(ding)g(attribute)h(of)f(a)h(FitsChan.)227
-4157 y(This)30 b(new)g(enco)s(ding)h(pro)m(vides)g(an)g(in)m(terim)g
-(solution)g(to)h(the)f(problem)f(of)h(storing)g(co)s(ordinate)h(sys-)
-227 4270 y(tem)j(information)g(in)f(FITS)g(headers,)i(un)m(til)e(the)h
-(prop)s(osed)e(new)h(FITS-W)m(CS)h(standard)e(b)s(ecomes)227
-4383 y(stable.)111 4569 y(6.)46 b(When)27 b(a)g(F)-8
-b(rameSet)29 b(is)e(created)h(from)e(a)i(set)f(of)g(FITS)g(header)g
-(cards)f(\(b)m(y)i(reading)f(from)f(a)i(FitsChan)227
-4682 y(using)e(a)g(\\foreign")h(enco)s(ding\),)g(the)f(base)g(F)-8
-b(rame)27 b(of)e(the)h(resulting)g(F)-8 b(rameSet)27
-b(no)m(w)f(has)g(its)g(Domain)227 4795 y(attribute)31
-b(set)f(to)h(\\GRID".)g(This)e(re\015ects)h(the)g(fact)h(that)f(this)g
-(F)-8 b(rame)31 b(represen)m(ts)e(FITS)g(data)i(grid)227
-4908 y(co)s(ordinates)39 b(\(equiv)-5 b(alen)m(t)40 b(to)e(FITS)g
-(pixel)g(co)s(ordinates|see)h Fu(x)p FF(7.13\).)66 b(Previously)-8
-b(,)41 b(this)d(Domain)227 5021 y(v)-5 b(alue)31 b(w)m(as)g(not)f(set.)
-111 5207 y(7.)46 b(astFindFits)32 b(no)m(w)e(ignores)h(trailing)g
-(spaces)g(in)f(its)h(k)m(eyw)m(ord)g(template.)111 5394
-y(8.)46 b(astPutFits)e(no)m(w)f(recognises)h(\\D")h(and)d(\\d")h(as)g
-(v)-5 b(alid)44 b(exp)s(onen)m(t)f(c)m(haracters)h(in)f(\015oating)g(p)
-s(oin)m(t)227 5507 y(n)m(um)m(b)s(ers.)111 5693 y(9.)j(The)22
-b(FitsChan)h(class)g(is)f(no)m(w)h(more)f(toleran)m(t)j(of)d(common)h
-(minor)f(violations)i(of)f(the)f(FITS)g(standard.)p eop
-end
-%%Page: 542 552
-TeXDict begin 542 551 bop 0 52 a FF(542)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)66 351 y FF(10.)46
-b(The)f(FitsChan)g(class)g(no)m(w)g(incorp)s(orates)h(an)f(impro)m(v)m
-(ed)g(test)h(for)f(the)g(linearit)m(y)h(of)f(Mappings,)227
-464 y(allo)m(wing)25 b(more)e(reliable)g(con)m(v)m(ersion)h(of)f(AST)f
-(data)i(in)m(to)f(FITS)f(\(using)h(\\foreign")h(FITS)e(enco)s(dings\).)
-66 666 y(11.)46 b(Some)33 b(further)e(impro)m(v)m(emen)m(ts)i(ha)m(v)m
-(e)h(b)s(een)d(made)i(to)g(the)f(algorithms)i(for)e(simplifying)g(comp)
-s(ound)227 779 y(Mappings,)f(as)f(used)g(b)m(y)g(astSimplify)-8
-b(.)66 982 y(12.)46 b(A)33 b(new)f(UnitRadius)g(attribute)h(has)g(b)s
-(een)e(added)h(to)i(the)e(SphMap)g(class.)48 b(This)31
-b(allo)m(ws)j(impro)m(v)m(ed)227 1095 y(simpli\014cation)k(of)e(comp)s
-(ound)f(Mappings)i(\(CmpMaps\))f(in)m(v)m(olving)i(SphMaps)d(and)h(t)m
-(ypically)i(im-)227 1208 y(pro)m(v)m(es)31 b(p)s(erformance)f(when)f
-(handling)h(FITS)g(w)m(orld)g(co)s(ordinate)h(information.)66
-1410 y(13.)46 b(A)30 b(MatrixMap)h(no)e(longer)i(propagates)f(input)f
-(co)s(ordinate)h(v)-5 b(alues)30 b(of)g(AST)p Fq(__)p
-FF(BAD)g(automatically)227 1523 y(to)40 b(all)g(output)f(co)s
-(ordinates.)68 b(If)38 b(certain)i(output)f(co)s(ordinates)h(do)f(not)g
-(dep)s(end)f(on)h(the)g(a\013ected)227 1636 y(input)g(co)s
-(ordinate\(s\))i(b)s(ecause)f(the)g(relev)-5 b(an)m(t)41
-b(matrix)f(elemen)m(ts)h(are)f(zero,)k(then)39 b(they)h(ma)m(y)g(no)m
-(w)227 1749 y(remain)31 b(v)-5 b(alid.)66 1951 y(14.)46
-b(A)32 b(minor)e(bug)h(has)g(b)s(een)g(corrected)h(whic)m(h)f(could)g
-(cause)h(certain)g(pro)5 b(jections)32 b(whic)m(h)f(in)m(v)m(olv)m(e)j
-(half)227 2064 y(the)k(celestial)i(sphere)d(to)h(pro)s(duce)e(v)-5
-b(alid)38 b(co)s(ordinates)g(for)f(the)h(other)g(\(unpro)5
-b(jected\))37 b(half)h(of)f(the)227 2177 y(sphere)30
-b(as)g(w)m(ell.)66 2379 y(15.)46 b(A)31 b(bug)f(has)h(b)s(een)f
-(\014xed)g(whic)m(h)h(could)g(o)s(ccasionally)i(cause)e(astCon)m(v)m
-(ert)i(to)e(think)g(that)g(con)m(v)m(ersion)227 2492
-y(b)s(et)m(w)m(een)g(a)g(CmpF)-8 b(rame)30 b(and)g(another)h(F)-8
-b(rame)31 b(w)m(as)g(p)s(ossible)f(when,)f(in)h(fact,)i(it)f(w)m
-(asn't.)0 2810 y Fw(G.3)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.3)0 3042 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3155 y(v)m(ersions)31
-b(V1.2)g(and)f(V1.3)i(\(not)f(the)f(most)h(recen)m(t)g(v)m(ersion\):)
-111 3439 y(1.)46 b(A)41 b(new)g(set)h(of)f(functions,)i(astResample)p
-Fo(<)p FF(X)p Fo(>)p FF(,)i(has)c(b)s(een)f(in)m(tro)s(duced)h(to)g
-(pro)m(vide)h(e\016cien)m(t)g(re-)227 3552 y(sampling)32
-b(of)f(gridded)g(data,)i(suc)m(h)e(as)g(sp)s(ectra)h(and)f(images,)i
-(under)d(the)h(con)m(trol)i(of)f(a)g(geometrical)227
-3665 y(transformation)j(sp)s(eci\014ed)e(b)m(y)h(a)h(Mapping.)51
-b(A)35 b(v)-5 b(ariet)m(y)35 b(of)f(sub-pixel)g(in)m(terp)s(olation)h
-(sc)m(hemes)g(are)227 3778 y(supp)s(orted.)111 3980 y(2.)46
-b(A)32 b(new)f(class,)i(PcdMap,)g(has)e(b)s(een)g(in)m(tro)s(duced.)44
-b(This)31 b(is)h(a)g(sp)s(ecialised)g(form)f(of)h(Mapping)g(whic)m(h)
-227 4093 y(implemen)m(ts)f(2-dimensional)g(pincushion)e(or)i(barrel)f
-(distortion.)111 4296 y(3.)46 b(A)40 b(bug)f(has)h(b)s(een)f(\014xed)g
-(whic)m(h)h(could)g(cause)g(a)g(FitsChan)g(to)h(pro)s(duce)d(to)s(o)j
-(man)m(y)f(digits)g(when)227 4409 y(formatting)31 b(\015oating)g(p)s
-(oin)m(t)f(v)-5 b(alues)31 b(for)e(inclusion)h(in)g(a)h(FITS)e(header)h
-(if)g(the)g(n)m(umerical)h(v)-5 b(alue)30 b(w)m(as)227
-4522 y(in)g(the)h(range)g(-0.00099999.)20 b(.)15 b(.)g(to)32
-b(-0.0001.)111 4724 y(4.)46 b(A)32 b(bug)f(has)g(b)s(een)f(\014xed)h
-(whic)m(h)g(could)h(cause)g(a)f(FitsChan)h(to)g(lose)g(the)f(commen)m
-(t)i(asso)s(ciated)g(with)227 4837 y(a)e(string)f(v)-5
-b(alue)31 b(in)f(a)h(FITS)f(header.)111 5039 y(5.)46
-b(A)27 b(FitsChan)f(no)m(w)h(rep)s(orts)e(an)i(error)f(if)g(it)h(reads)
-g(a)f(FITS)g(header)h(whic)m(h)f(iden)m(ti\014es)h(a)g(non-standard)227
-5152 y(sky)41 b(pro)5 b(jection)42 b(\(previously)-8
-b(,)44 b(this)d(w)m(as)g(accepted)h(without)f(error)g(and)f(a)h
-(Cartesian)h(pro)5 b(jection)227 5265 y(used)30 b(instead\).)111
-5467 y(6.)46 b(A)d(bug)f(has)h(b)s(een)e(\014xed)h(whic)m(h)h(could)g
-(prev)m(en)m(t)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)f(the)g(co)s
-(ordinate)g(systems)227 5580 y(represen)m(ted)d(b)m(y)f(t)m(w)m(o)i
-(CmpF)-8 b(rames.)69 b(This)38 b(could)i(only)g(o)s(ccur)f(if)h(the)g
-(CmpF)-8 b(rames)39 b(con)m(tained)i(a)227 5693 y(relativ)m(ely)33
-b(large)e(n)m(um)m(b)s(er)f(of)g(nested)g(F)-8 b(rames.)p
-eop end
-%%Page: 543 553
-TeXDict begin 543 552 bop 0 52 a Fy(G.4)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.4)2294 b FF(543)111 351
-y(7.)46 b(F)-8 b(urther)35 b(impro)m(v)m(emen)m(ts)h(ha)m(v)m(e)g(b)s
-(een)e(made)h(to)h(the)f(simpli\014cation)h(of)f(comp)s(ound)e
-(Mappings,)j(in-)227 464 y(cluding)29 b(\014xes)g(for)g(sev)m(eral)i
-(bugs)d(whic)m(h)h(could)h(cause)f(inde\014nite)g(lo)s(oping)h(or)f(un)
-m(w)m(an)m(ted)g(error)g(mes-)227 577 y(sages.)111 778
-y(8.)46 b(Some)31 b(memory)f(leaks)h(ha)m(v)m(e)h(b)s(een)d(\014xed.)
-111 978 y(9.)46 b(A)31 b(small)g(n)m(um)m(b)s(er)e(of)h(do)s(cumen)m
-(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e(corrected.)0
-1293 y Fw(G.4)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.4)0
-1524 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 1637 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.3)g(and)f(V1.4)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 1918 y(1.)46 b(A)35 b(new)g(MathMap)h(class)g(has)e(b)s
-(een)h(in)m(tro)s(duced.)54 b(This)34 b(is)h(a)g(form)g(of)g(Mapping)g
-(that)h(allo)m(ws)g(y)m(ou)227 2031 y(to)c(de\014ne)f(co)s(ordinate)h
-(transformations)g(in)f(a)h(\015exible)f(and)g(transp)s(ortable)g(w)m
-(a)m(y)h(using)f(arithmetic)227 2144 y(op)s(erations)g(and)f
-(mathematical)i(functions)e(similar)h(to)g(those)g(a)m(v)-5
-b(ailable)33 b(in)d(C.)111 2345 y(2.)46 b FD(W)-12 b(ARNING|INCOMP)j(A)
-g(TIBLE)24 b(CHANGE.)c FF(T)-8 b(ransformation)21 b(functions)g(used)f
-(with)h(the)227 2458 y(In)m(traMap)34 b(class)f(\(see,)i(for)d
-(example,)j(astIn)m(traReg\))f(no)m(w)f(require)g(a)g(\\this")g(p)s
-(oin)m(ter)g(as)g(their)g(\014rst)227 2571 y(parameter.)55
-b FD(Existing)40 b(implemen)m(tations)g(will)f(not)h(con)m(tin)m(ue)h
-(to)e(w)m(ork)h(correctly)h(with)227 2683 y(this)c(v)m(ersion)g(of)f
-(AST)g(unless)h(this)g(parameter)e(is)i(added.)44 b FF(There)31
-b(is)h(no)g(need)f(for)g(existing)227 2796 y(soft)m(w)m(are)h(to)f(mak)
-m(e)h(use)e(of)g(this)g(p)s(oin)m(ter,)h(but)f(it)h(m)m(ust)f(b)s(e)g
-(presen)m(t.)227 2953 y(This)45 b(c)m(hange)h(has)f(b)s(een)g(in)m(tro)
-s(duced)g(so)g(that)h(transformation)g(functions)f(can)g(gain)h(access)
-h(to)227 3066 y(In)m(traMap)31 b(attributes.)111 3266
-y(3.)46 b(A)34 b(new)e(In)m(traFlag)j(attribute)f(has)f(b)s(een)f
-(added)h(to)h(the)f(In)m(traMap)g(class.)50 b(This)33
-b(allo)m(ws)h(the)f(trans-)227 3379 y(formation)i(functions)e(used)g(b)
-m(y)h(In)m(traMaps)g(to)h(adapt)f(to)g(pro)s(duce)f(the)h(required)f
-(transformation)227 3492 y(on)e(a)f(p)s(er-In)m(traMap)g(basis)h(\()p
-Fu(x)p FF(20.9\).)111 3693 y(4.)46 b(The)30 b(Plot)h(attributes)g(Ma)5
-b(jTic)m(kLen)31 b(and)f(MinTic)m(kLen,)h(whic)m(h)f(con)m(trol)i(the)f
-(length)f(of)h(ma)5 b(jor)30 b(and)227 3806 y(minor)d(tic)m(k)i(marks)e
-(on)g(co)s(ordinate)h(axes,)h(ma)m(y)e(no)m(w)h(b)s(e)e(subscripted)g
-(using)h(an)g(axis)h(n)m(um)m(b)s(er.)38 b(This)227 3919
-y(allo)m(ws)31 b(tic)m(k)g(marks)e(of)g(di\013eren)m(t)h(lengths)g(to)g
-(b)s(e)f(used)g(on)g(eac)m(h)h(axis.)41 b(It)30 b(also)g(allo)m(ws)h
-(tic)m(k)g(marks)e(to)227 4032 y(b)s(e)h(suppressed)e(on)j(one)f(axis)h
-(only)g(b)m(y)f(setting)h(the)g(length)g(to)g(zero.)111
-4232 y(5.)46 b(The)33 b(v)-5 b(alue)34 b(of)f(the)h(Plot)g(attribute)g
-(NumLab,)f(whic)m(h)g(con)m(trols)h(the)g(plotting)g(of)f(n)m(umerical)
-h(lab)s(els)227 4345 y(on)h(co)s(ordinate)g(axes,)i(no)d(longer)i(has)e
-(an)m(y)h(e\013ect)h(on)e(whether)g(lab)s(elling)i(of)f(a)g(co)s
-(ordinate)g(grid)f(is)227 4458 y(in)m(terior)d(or)g(exterior)g(\(as)g
-(con)m(trolled)h(b)m(y)e(the)h(Lab)s(elling)g(attribute\).)111
-4658 y(6.)46 b(The)32 b(FitsChan)h(class)g(no)m(w)g(pro)m(vides)f(some)
-i(supp)s(ort)c(for)j(the)g(IRAF-sp)s(eci\014c)g(\\ZPX")g(sky)f(pro)5
-b(jec-)227 4771 y(tion,)28 b(whic)m(h)f(is)g(con)m(v)m(erted)h
-(transparen)m(tly)f(in)m(to)g(the)g(equiv)-5 b(alen)m(t)28
-b(FITS)e(\\ZPN")h(pro)5 b(jection)28 b(\(see)f(the)227
-4884 y(description)k(of)f(the)h(Enco)s(ding)f(attribute)h(for)f
-(details\).)111 5085 y(7.)46 b(The)28 b(FitsChan)g(class)h(no)m(w)f
-(recognises)h(the)f(co)s(ordinate)h(system)f(\\ICRS")g(\(In)m
-(ternational)i(Celestial)227 5198 y(Reference)36 b(System\))e(as)h
-(equiv)-5 b(alen)m(t)36 b(to)g(\\FK5".)54 b(This)34 b(is)h(an)f(in)m
-(terim)h(measure)g(and)f(full)g(supp)s(ort)227 5310 y(for)j(the)f
-(\(exceedingly)j(small\))e(di\013erence)g(b)s(et)m(w)m(een)g(ICRS)f
-(and)g(FK5)h(will)f(b)s(e)g(added)g(at)h(a)g(future)227
-5423 y(release.)227 5580 y(Note)g(that)f(\\ICRS")g(is)f(not)h(y)m(et)h
-(recognised)f(as)g(a)g(co)s(ordinate)g(system)g(b)m(y)g(other)f
-(classes)i(suc)m(h)e(as)227 5693 y(SkyF)-8 b(rame,)31
-b(so)g(this)f(c)m(hange)i(only)e(facilitates)j(the)e(imp)s(ortation)g
-(of)f(foreign)h(data.)p eop end
-%%Page: 544 554
-TeXDict begin 544 553 bop 0 52 a FF(544)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(8.)46
-b(A)35 b(bug)f(in)g(the)g(FitsChan)g(class)i(has)e(b)s(een)f(\014xed)h
-(whic)m(h)g(could)h(result)f(in)g(longitude)h(v)-5 b(alues)35
-b(b)s(eing)227 464 y(incorrect)30 b(b)m(y)f(180)i(degrees)f(when)e
-(using)h(cylindrical)h(sky)e(pro)5 b(jections,)31 b(suc)m(h)e(as)g(the)
-g(FITS)g(\\CAR")227 577 y(pro)5 b(jection.)111 766 y(9.)46
-b(A)30 b(bug)f(in)g(the)h(FitsChan)f(class)h(has)f(b)s(een)g(\014xed)g
-(whic)m(h)g(could)h(result)f(in)g(the)h(FITS)f(sky)g(pro)5
-b(jection)227 879 y(parameters)40 b(Pro)5 b(jP\(0\))39
-b(to)h(Pro)5 b(jP\(9\))40 b(b)s(eing)e(incorrectly)i(named)f(PR)m(OJP1)
-f(to)i(PR)m(OJP10)f(when)227 992 y(written)31 b(out)f(as)h(FITS)f
-(cards.)66 1181 y(10.)46 b(A)e(bug)e(in)i(the)f(FitsChan)g(class)h(has)
-g(b)s(een)e(\014xed)h(whic)m(h)g(could)g(cause)h(confusion)f(b)s(et)m
-(w)m(een)h(the)227 1293 y(FITS-IRAF)31 b(and)g(FITS-W)m(CS)g(enco)s
-(ding)g(sc)m(hemes)h(if)f(b)s(oth)g(a)g(CD)h(matrix)f(and)g(a)h(PC)e
-(matrix)i(are)227 1406 y(erroneously)f(presen)m(t)f(in)g(a)h(FITS)e
-(header.)66 1595 y(11.)46 b(Some)31 b(minor)f(memory)g(leaks)h(ha)m(v)m
-(e)h(b)s(een)d(\014xed.)66 1784 y(12.)46 b(A)31 b(small)g(n)m(um)m(b)s
-(er)e(of)h(do)s(cumen)m(tation)h(errors)f(ha)m(v)m(e)i(b)s(een)e
-(corrected.)0 2079 y Fw(G.5)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.5)0 2302 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2414 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.4)g(and)f(V1.5)i(\(not)f(the)f(most)h(recen)m(t)g(v)
-m(ersion\):)111 2679 y(1.)46 b(The)36 b(FitsChan)g(class)i(has)e(b)s
-(een)f(mo)s(di\014ed)h(to)h(supp)s(ort)d(the)j(latest)h(draft)e(FITS)g
-(W)m(CS)g(standard,)227 2791 y(describ)s(ed)27 b(in)g(the)h(t)m(w)m(o)h
-(pap)s(ers)e(\\Represen)m(tation)i(of)f(w)m(orld)g(co)s(ordinates)g(in)
-f(FITS")h(\(E.W.)16 b(Greisen)227 2904 y(and)31 b(M.)16
-b(Calabretta,)34 b(dated)d(30th)i(No)m(v)m(em)m(b)s(er,)g(1999\),)i
-(and)c(\\Represen)m(tation)i(of)f(celestial)i(co)s(ordi-)227
-3017 y(nates)27 b(in)e(FITS")h(\(M.)16 b(Calabretta)27
-b(and)f(E.W.)16 b(Greisen,)27 b(dated)f(24th)h(Septem)m(b)s(er,)f
-(1999\).)41 b(These)26 b(are)227 3130 y(a)m(v)-5 b(ailable)33
-b(at)e(h)m(ttp://www.cv.nrao.edu/\014ts/do)s(cumen)m(ts/w)m(cs/w)m
-(cs.h)m(tml.)227 3281 y(The)f(FITS-W)m(CS)g(enco)s(ding)g(no)m(w)h
-(uses)f(these)h(up)s(dated)e(con)m(v)m(en)m(tions.)42
-b(The)30 b(main)h(c)m(hanges)g(are:)336 3495 y Fu(\017)46
-b FF(Rotation)31 b(and)d(scaling)h(of)g(pixel)g(axes)g(is)g(no)m(w)f
-(represen)m(ted)h(b)m(y)f(a)h(matrix)g(of)g Fq(CDj_i)e
-FF(k)m(eyw)m(ords)427 3608 y(instead)k(of)f(a)h(com)m(bination)h(of)e
-Fq(PCjjjiii)f FF(and)g Fq(CDELTj)g FF(k)m(eyw)m(ords.)336
-3755 y Fu(\017)46 b FF(Pro)5 b(jection)37 b(parameters)g(are)f(no)m(w)g
-(asso)s(ciated)h(with)f(particular)g(axes)h(and)e(are)h(represen)m(ted)
-427 3868 y(b)m(y)31 b Fq(PVi_m)d FF(k)m(eyw)m(ords)j(instead)g(of)f
-(the)h Fq(PROJPm)e FF(k)m(eyw)m(ords.)336 4014 y Fu(\017)46
-b FF(The)31 b(tangen)m(t)j(plane)d(pro)5 b(jection)33
-b(\(\\T)-8 b(AN"\))33 b(can)f(no)m(w)g(include)f(optional)i(p)s
-(olynomial)f(correc-)427 4127 y(tion)f(terms.)336 4274
-y Fu(\017)46 b FF(An)24 b(en)m(tire)g(set)h(of)e(k)m(eyw)m(ords)i(m)m
-(ust)e(b)s(e)g(supplied)g(for)g(eac)m(h)i(set)f(of)g(secondary)g(axis)g
-(descriptions,)427 4387 y(and)39 b(eac)m(h)i(suc)m(h)e(k)m(eyw)m(ord)h
-(m)m(ust)g(\014nish)e(with)h(a)h(single)g(c)m(haracter)h(indicating)g
-(whic)m(h)e(set)h(it)427 4500 y(b)s(elongs)f(to.)67 b(This)39
-b(means)f(that)i(k)m(eyw)m(ords)f(whic)m(h)g(previously)g(o)s(ccupied)g
-(eigh)m(t)h(c)m(haracters)427 4613 y(ha)m(v)m(e)d(b)s(een)f(shorten)f
-(to)i(sev)m(en)f(to)h(lea)m(v)m(e)h(ro)s(om)e(for)f(this)h(extra)h(c)m
-(haracter.)59 b(Th)m(us)35 b Fq(LONGPOLE)427 4726 y FF(has)30
-b(b)s(ecome)h Fq(LONPOLE)e FF(and)g Fq(RADECSYS)f FF(has)j(b)s(ecome)f
-Fq(RADESYS)p FF(.)111 4940 y(2.)46 b(Tw)m(o)31 b(new)f(enco)s(dings)g
-(ha)m(v)m(e)h(b)s(een)f(added)g(to)h(the)f(FitsChan)h(class:)227
-5128 y FD(FITS-PC)45 b FF(This)34 b(enco)s(ding)g(uses)g(the)h(con)m(v)
-m(en)m(tions)i(of)d(the)h(no)m(w)g(sup)s(erseded)d(FITS)i(W)m(CS)h(pap)
-s(er)427 5241 y(b)m(y)j(E.W.)16 b(Greisen)37 b(and)g(M.)16
-b(Calabretta)39 b(whic)m(h)e(used)g(k)m(eyw)m(ords)h
-Fq(CDELTj)e FF(and)g Fq(PCjjjiii)g FF(to)427 5354 y(describ)s(e)27
-b(axis)h(scaling)h(and)e(rotation.)41 b(These)27 b(are)h(the)g(con)m(v)
-m(en)m(tions)h(whic)m(h)e(w)m(ere)h(used)f(b)m(y)g(the)427
-5467 y(FITS-W)m(CS)j(enco)s(ding)f(prior)h(to)g(v)m(ersion)g(1.5)h(of)f
-(AST.)f(This)g(enco)s(ding)h(is)g(pro)m(vided)f(to)i(allo)m(w)427
-5580 y(existing)c(data)f(whic)m(h)f(use)g(these)g(con)m(v)m(en)m(tions)
-j(to)e(b)s(e)e(read.)39 b(It)26 b(should)e(not)h(in)g(general)i(b)s(e)d
-(used)427 5693 y(to)31 b(create)h(new)e(data.)p eop end
-%%Page: 545 555
-TeXDict begin 545 554 bop 0 52 a Fy(G.6)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.6)2294 b FF(545)227 351
-y FD(FITS-AIPS)45 b FF(This)26 b(enco)s(ding)g(is)h(based)f(on)g(the)h
-(con)m(v)m(en)m(tions)h(describ)s(ed)e(in)g(the)g(do)s(cumen)m(t)h
-(\\Non-)427 464 y(linear)d(Co)s(ordinate)g(Systems)g(in)f(AIPS")g(b)m
-(y)h(Eric)g(W.)g(Greisen)g(\(revised)g(9th)g(Septem)m(b)s(er,)h(1994)
-427 577 y(and)45 b(a)m(v)-5 b(ailable)48 b(b)m(y)d(ftp)g(from)g
-(\014ts.cv.nrao.edu)h(/\014ts/do)s(cumen)m(ts/w)m(cs/aips27.ps.Z\).)i
-(This)427 690 y(enco)s(ding)31 b(uses)f Fq(CROTAi)e FF(and)i
-Fq(CDELTi)f FF(k)m(eyw)m(ords)h(to)h(describ)s(e)f(axis)h(rotation)h
-(and)e(scaling.)111 872 y(3.)46 b(The)31 b(FitsChan)g(class)h(no)m(w)f
-(pro)m(vides)h(some)f(supp)s(ort)f(for)h(the)g(IRAF-sp)s(eci\014c)h
-(\\TNX")g(sky)f(pro)5 b(jec-)227 985 y(tion,)28 b(whic)m(h)d(is)h(con)m
-(v)m(erted)i(transparen)m(tly)e(in)m(to)h(the)f(equiv)-5
-b(alen)m(t)27 b(FITS)f(\\T)-8 b(AN")27 b(pro)5 b(jection)26
-b(\(see)h(the)227 1098 y(description)k(of)f(the)h(Enco)s(ding)f
-(attribute)h(for)f(details\).)111 1280 y(4.)46 b(F)-8
-b(rameSets)29 b(originally)g(read)f(from)g(a)g(DSS)f(enco)s(ded)h(FITS)
-f(header)h(can)g(no)m(w)g(b)s(e)f(written)h(out)g(using)227
-1392 y(the)c(FITS-W)m(CS)f(enco)s(ding)h(\(a)g(T)-8 b(AN)24
-b(pro)5 b(jection)25 b(with)e(correction)i(terms)f(will)g(b)s(e)f
-(used\))g(in)g(addition)227 1505 y(to)28 b(the)e(DSS)g(enco)s(ding.)40
-b(The)26 b(rev)m(erse)h(is)f(also)i(p)s(ossible:)38 b(F)-8
-b(rameSets)28 b(originally)g(read)e(from)g(a)h(FITS-)227
-1618 y(W)m(CS)g(enco)s(ded)e(FITS)h(header)g(and)g(whic)m(h)g(use)g(a)g
-(T)-8 b(AN)27 b(pro)5 b(jection)27 b(can)f(no)m(w)h(b)s(e)e(written)h
-(out)h(using)227 1731 y(the)k(DSS)f(enco)s(ding.)111
-1913 y(5.)46 b(The)d(algorithm)i(used)d(b)m(y)i(the)f(FitsChan)g(class)
-i(to)f(v)m(erify)g(that)g(a)f(F)-8 b(rameSet)45 b(conforms)e(to)h(the)
-227 2026 y(FITS-W)m(CS)26 b(mo)s(del)h(has)f(b)s(een)g(impro)m(v)m(ed)h
-(so)g(that)g(F)-8 b(rameSets)28 b(including)e(more)h(complex)g
-(mixtures)227 2139 y(of)k(parallel)g(and)f(serial)h(Mappings)f(can)h(b)
-s(e)f(written)g(out)h(using)f(the)g(FITS-W)m(CS)g(enco)s(ding.)111
-2321 y(6.)46 b(The)26 b(FitsChan)g(class)h(has)e(b)s(een)h(c)m(hanged)g
-(so)h(that)f(long)h(strings)f(included)f(in)h(the)g(description)g(of)h
-(an)227 2434 y(Ob)5 b(ject)32 b(can)f(b)s(e)g(sa)m(v)m(ed)h(and)f
-(restored)g(without)h(truncation)f(when)f(using)h(the)h(NA)-8
-b(TIVE)31 b(enco)s(ding.)227 2546 y(Previously)-8 b(,)34
-b(v)m(ery)e(long)h(F)-8 b(rame)33 b(titles,)i(mathematical)f
-(expressions,)f Fx(etc.)45 b FF(w)m(ere)33 b(truncated)f(if)g(they)227
-2659 y(exceeded)26 b(the)f(capacit)m(y)i(of)e(a)g(single)g(FITS)f
-(header)h(card.)39 b(They)24 b(are)h(no)m(w)g(split)f(o)m(v)m(er)j(sev)
-m(eral)f(header)227 2772 y(cards)j(so)h(that)g(they)f(can)h(b)s(e)e
-(restored)i(without)f(truncation.)41 b(Note,)31 b(this)e(facilit)m(y)i
-(is)f(only)f(a)m(v)-5 b(ailable)227 2885 y(when)30 b(using)g(NA)-8
-b(TIVE)30 b(enco)s(ding.)111 3067 y(7.)46 b(The)33 b(FitsChan)f(class)i
-(has)e(a)i(new)e(attribute)i(called)g(W)-8 b(arnings)33
-b(whic)m(h)f(can)i(b)s(e)e(used)g(to)h(select)i(p)s(o-)227
-3180 y(ten)m(tially)i(dangerous)c(conditions)i(under)e(whic)m(h)g(w)m
-(arnings)h(should)f(b)s(e)h(issued.)51 b(These)34 b(conditions)227
-3293 y(include)29 b(\(for)f(instance\))i(unsupp)s(orted)c(features)j
-(within)f(non-standard)f(pro)5 b(jections,)30 b(missing)e(k)m(ey-)227
-3406 y(w)m(ords)i(for)g(whic)m(h)g(default)h(v)-5 b(alues)31
-b(will)f(b)s(e)g(used,)g Fx(etc)p FF(.)111 3588 y(8.)46
-b(The)c(WcsMap)g(class)h(has)e(b)s(een)h(c)m(hanged)g(to)h(supp)s(ort)d
-(the)i(c)m(hanges)g(made)g(to)h(the)f(FITS-W)m(CS)227
-3701 y(enco)s(ding)31 b(in)f(the)g(FitsChan)g(class:)336
-3882 y Fu(\017)46 b FF(Pro)5 b(jection)42 b(parameters)f(are)g(no)m(w)f
-(asso)s(ciated)i(with)e(a)h(particular)g(axis)g(and)f(are)h(sp)s
-(eci\014ed)427 3995 y(using)h(a)g(new)g(set)g(of)g(attributes)h(called)
-g(PVj)p Fq(_)p FF(m.)75 b(Here,)45 b(\\j")e(is)f(the)g(index)g(of)g(an)
-g(axis)g(of)427 4108 y(WcsMap,)32 b(and)e(\\m")h(is)f(the)h(index)e(of)
-i(the)g(pro)5 b(jection)31 b(parameter.)336 4249 y Fu(\017)46
-b FF(The)28 b(old)g(attributes)g(Pro)5 b(jP\(0\))29 b(to)g(Pro)5
-b(jP\(9\))28 b(are)h(still)g(a)m(v)-5 b(ailable)30 b(but)d(are)h(no)m
-(w)g(deprecated)h(in)427 4361 y(fa)m(v)m(our)g(of)g(the)g(new)f(PVj)p
-Fq(_)p FF(m)f(attributes.)41 b(They)28 b(are)h(in)m(terpreted)f(as)h
-(aliases)h(for)e(PV\(axlat\))p Fq(_)p FF(0)427 4474 y(to)j(PV\(axlat\))
-p Fq(_)p FF(9,)i(where)d(\\axlat")j(is)d(the)h(index)f(of)g(the)h
-(latitude)g(axis.)336 4615 y Fu(\017)46 b FF(The)32 b(GLS)h(pro)5
-b(jection)33 b(pro)5 b(jection)33 b(has)f(b)s(een)g(renamed)g(as)h
-(SFL,)g(but)f(the)g(AST)p Fq(__)p FF(GLS)f(t)m(yp)s(e)427
-4728 y(has)f(b)s(een)g(retained)h(as)f(an)h(alias)g(for)f(AST)p
-Fq(__)p FF(SFL.)0 5012 y Fw(G.6)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V1.6)0 5228 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 5341 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.5)g(and)f(V1.6:)111 5580 y(1.)46 b(The)c(C)g(in)m
-(terface)i(to)f(sev)m(eral)g(metho)s(ds)f(\(astT)-8 b(ranN,)43
-b(astMark)g(and)f(astP)m(olyCurv)m(e\))i(ha)m(v)m(e)f(b)s(een)227
-5693 y(c)m(hanged)36 b(to)h(mak)m(e)f(them)f(easier)i(to)f(call)h(from)
-e(C++.)55 b(P)m(arameters)36 b(whic)m(h)f(previously)g(had)g(t)m(yp)s
-(e)p eop end
-%%Page: 546 556
-TeXDict begin 546 555 bop 0 52 a FF(546)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)227 351 y FF(\\double)23
-b(\(*\)[]")i(ha)m(v)m(e)f(b)s(een)e(c)m(hanged)h(to)h(the)f(simpler)f
-(\\double)h(*".)39 b(Using)23 b(the)g(old)f(t)m(yp)s(es)h(ma)m(y)h
-(result)227 464 y(in)30 b(non-fatal)i(compiler)f(w)m(arnings,)f(but)g
-(should)f(not)i(c)m(hange)g(the)g(b)s(eha)m(viour)f(of)g(the)h(metho)s
-(ds.)111 642 y(2.)46 b(A)24 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)
-h(Plot)h(class)f(whic)m(h)f(could)h(cause)g(groups)f(of)h(tic)m(k)h
-(marks)e(to)h(b)s(e)f(skipp)s(ed)227 755 y(when)30 b(using)g(v)m(ery)g
-(small)h(gaps.)111 932 y(3.)46 b(A)35 b(bug)f(has)h(b)s(een)f(\014xed)g
-(in)h(the)g(Plot)g(class)h(whic)m(h)f(could)g(cause)g(axes)g(to)h(b)s
-(e)e(lab)s(eled)h(outside)g(the)227 1045 y(visible)c(windo)m(w,)f
-(resulting)h(in)f(no)g(axes)h(b)s(eing)f(visible.)111
-1223 y(4.)46 b(The)32 b(FITS-W)m(CS)h(enco)s(ding)g(used)e(b)m(y)i(the)
-g(FitsChan)g(class)g(no)m(w)g(includes)f(the)h(W)m(CSNAME)g(k)m(ey-)227
-1336 y(w)m(ord.)44 b(When)32 b(creating)h(a)f(F)-8 b(rameSet)32
-b(from)f(FITS)g(headers,)h(the)g(v)-5 b(alues)32 b(of)f(the)h(W)m
-(CSNAME)g(k)m(ey-)227 1449 y(w)m(ords)i(are)h(no)m(w)g(used)e(as)i(the)
-g(Domain)g(names)f(for)g(the)h(corresp)s(onding)f(F)-8
-b(rames)35 b(in)f(the)h(returned)227 1562 y(F)-8 b(rameSet.)42
-b(When)30 b(writing)g(a)h(F)-8 b(rameSet)32 b(to)f(a)f(FITS)g(header)g
-(the)g(Domain)h(names)g(of)f(eac)m(h)i(F)-8 b(rame)227
-1675 y(are)31 b(stored)g(in)f(W)m(CSNAME)h(k)m(eyw)m(ords)f(in)g(the)h
-(header.)111 1852 y(5.)46 b(The)34 b(FITS-W)m(CS)f(enco)s(ding)h(used)f
-(b)m(y)h(the)h(FitsChan)e(class)i(no)m(w)f(attempts)h(to)g(retain)f
-(the)g(iden)m(ti-)227 1965 y(\014cation)f(letter)f(asso)s(ciated)h
-(with)f(m)m(ultiple)g(axis)g(descriptions.)44 b(When)31
-b(reading)g(a)h(F)-8 b(rameSet)33 b(from)227 2078 y(a)38
-b(FITS)f(header,)j(the)e(iden)m(ti\014cation)h(letter)g(is)f(stored)g
-(in)g(the)g(Iden)m(t)f(attribute)i(for)e(eac)m(h)i(F)-8
-b(rame.)227 2191 y(When)42 b(writing)g(a)h(F)-8 b(rameSet)43
-b(to)g(a)f(FITS)f(header,)k(the)e(iden)m(ti\014cation)g(letter)h(is)e
-(read)g(from)f(the)227 2304 y(Iden)m(t)28 b(attribute)g(of)f(eac)m(h)i
-(F)-8 b(rame.)40 b(The)27 b(letter)i(to)f(asso)s(ciate)h(with)e(eac)m
-(h)i(F)-8 b(rame)28 b(can)g(b)s(e)f(c)m(hanged)h(b)m(y)227
-2417 y(assigning)j(a)g(new)f(v)-5 b(alue)31 b(to)g(the)f(F)-8
-b(rame's)32 b(Iden)m(t)e(attribute.)111 2595 y(6.)46
-b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g(FITS-AIPS)f
-(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227 2707
-y(class)g(no)m(w)e(create)i(a)f(SkyF)-8 b(rame)31 b(with)f(the)h
-(System)g(attribute)g(set)g(to)g(\\Unkno)m(wn")g(if)g(the)f(CTYPE)227
-2820 y(k)m(eyw)m(ords)h(in)f(the)h(supplied)e(header)h(refers)g(to)h
-(an)g(unkno)m(wn)e(celestial)k(co)s(ordinate)e(system.)41
-b(Previ-)227 2933 y(ously)-8 b(,)31 b(a)g(F)-8 b(rame)31
-b(w)m(as)g(used)f(instead)g(of)h(a)g(SkyF)-8 b(rame.)111
-3111 y(7.)46 b(The)31 b(FITS-W)m(CS,)h(FITS-PC,)f(FITS-IRAF)g(and)g
-(FITS-AIPS)f(enco)s(dings)i(used)e(b)m(y)i(the)g(FitsChan)227
-3224 y(class)38 b(no)f(longer)h(rep)s(ort)f(an)g(error)g(if)g(the)h
-(FITS)e(header)h(con)m(tains)i(no)e(CTYPE)f(k)m(eyw)m(ords.)62
-b(It)37 b(is)227 3337 y(assumed)22 b(that)i(a)f(missing)g(CTYPE)f(k)m
-(eyw)m(ord)i(implies)f(that)g(the)g(w)m(orld)g(co)s(ordinate)h(system)f
-(is)g(linear)227 3450 y(and)30 b(iden)m(tically)i(equal)f(to)g(\\in)m
-(termediate)i(w)m(orld)d(co)s(ordinates".)111 3627 y(8.)46
-b(The)37 b(new)f(v)-5 b(alue)37 b(\\no)s(ct)m(yp)s(e")h(is)f(no)m(w)g
-(recognized)h(b)m(y)f(the)g(W)-8 b(arnings)37 b(attribute)h(of)f(the)g
-(FitsChan)227 3740 y(class.)i(This)23 b(v)-5 b(alue)23
-b(causes)h(w)m(arnings)f(to)h(b)s(e)e(issued)h(if)g(CTYPE)f(k)m(eyw)m
-(ords)i(are)f(missing)g(from)g(foreign)227 3853 y(enco)s(dings.)111
-4031 y(9.)46 b(A)28 b(new)g(attribute)h(called)g(AllW)-8
-b(arnings)29 b(has)f(b)s(een)f(added)g(to)i(the)f(FitsChan)g(class.)41
-b(This)27 b(is)h(a)g(read-)227 4144 y(only)-8 b(,)34
-b(space)f(separated)f(list)h(of)g(all)g(the)g(kno)m(wn)e(condition)i
-(names)f(whic)m(h)g(can)h(b)s(e)f(sp)s(eci\014ed)f(in)h(the)227
-4257 y(W)-8 b(arnings)31 b(attribute.)66 4434 y(10.)46
-b(The)38 b(FitsChan)f(class)i(no)m(w)f(attempts)h(to)f(assigns)g(a)h
-(Title)f(to)h(eac)m(h)g(F)-8 b(rame)39 b(in)e(a)i(F)-8
-b(rameSet)39 b(read)227 4547 y(using)d(a)g(foreign)g(enco)s(ding.)57
-b(The)35 b(Title)i(is)f(based)f(on)h(the)g(Domain)g(name)g(of)g(the)g
-(F)-8 b(rame.)58 b(If)35 b(the)227 4660 y(F)-8 b(rame)32
-b(has)e(no)g(Domain)h(name,)g(the)f(default)h(Title)g(supplied)e(b)m(y)
-h(the)h(F)-8 b(rame)31 b(class)g(is)g(retained.)66 4838
-y(11.)46 b(The)36 b(FitsChan)g(class)g(uses)g(the)g(commen)m(ts)h(asso)
-s(ciated)g(with)f(CTYPE)f(k)m(eyw)m(ords)i(as)f(axis)g(lab)s(els)227
-4951 y(when)f(reading)h(a)g(foreign)g(enco)s(ding.)57
-b(This)35 b(b)s(eha)m(viour)g(has)h(b)s(een)f(mo)s(di\014ed)f(so)i
-(that)g(the)g(default)227 5064 y(lab)s(els)c(pro)m(vided)e(b)m(y)h(the)
-g(F)-8 b(rame)32 b(class)g(are)g(retained)f(\(instead)h(of)f(using)g
-(the)g(CTYPE)f(commen)m(ts\))227 5177 y(if)h(an)m(y)f(of)h(the)f(CTYPE)
-g(commen)m(ts)h(are)g(iden)m(tical.)66 5354 y(12.)46
-b(A)25 b(new)f(\\in)m(terp)s(olation")j(sc)m(heme)f(iden)m(ti\014ed)e
-(b)m(y)h(the)g(sym)m(b)s(olic)g(constan)m(t)h(AST)p Fq(__)p
-FF(BLOCKA)-10 b(VE)23 b(has)227 5467 y(b)s(een)36 b(added)f(to)i(the)g
-(AST)p Fq(_)p FF(RESAMPLE)p Fo(<)p FF(X)p Fo(>)d FF(set)j(of)g
-(functions.)58 b(The)35 b(new)h(sc)m(heme)h(calculates)227
-5580 y(eac)m(h)f(output)f(pixel)g(v)-5 b(alue)36 b(b)m(y)f(\014nding)f
-(the)h(mean)g(of)g(the)g(input)f(pixels)i(in)e(a)i(b)s(o)m(x)f(cen)m
-(tred)g(on)g(the)227 5693 y(output)30 b(pixel.)p eop
-end
-%%Page: 547 557
-TeXDict begin 547 556 bop 0 52 a Fy(G.7)92 b(Changes)30
-b(In)m(tro)s(duced)f(in)i(V1.7)2294 b FF(547)66 351 y(13.)46
-b(The)24 b(SkyF)-8 b(rame)25 b(class)h(can)e(no)m(w)h(b)s(e)f(used)g
-(to)h(represen)m(t)f(an)h(arbitrary)f(spherical)h(co)s(ordinate)g
-(system)227 464 y(b)m(y)31 b(setting)g(its)g(System)f(attribute)h(to)g
-(\\Unkno)m(wn".)66 653 y(14.)46 b(The)28 b(indices)f(of)h(the)g
-(latitude)h(and)e(longitude)i(axes)f(of)g(a)g(SkyF)-8
-b(rame)28 b(can)g(no)m(w)g(b)s(e)f(found)g(using)g(new)227
-766 y(read-only)35 b(attributes)h(LatAxis)f(and)f(LonAxis.)54
-b(The)34 b(e\013ects)j(of)d(an)m(y)i(axis)f(p)s(erm)m(utation)g(is)f
-(tak)m(en)227 879 y(in)m(to)e(accoun)m(t.)66 1068 y(15.)46
-b(A)37 b(new)f(attribute)h(called)g(Iden)m(t)f(has)h(b)s(een)e(added)h
-(to)h(the)f(Ob)5 b(ject)37 b(class.)59 b(This)36 b(serv)m(es)h(the)f
-(same)227 1181 y(purp)s(ose)f(as)h(the)g(existing)h(ID)f(attribute,)j
-(but)c(\(unlik)m(e)i(ID\))f(its)g(v)-5 b(alue)37 b(is)f(transferred)f
-(to)i(the)f(new)227 1294 y(Ob)5 b(ject)31 b(when)e(a)i(cop)m(y)g(is)f
-(made.)66 1483 y(16.)46 b(A)38 b(bug)e(has)h(b)s(een)f(\014xed)h(whic)m
-(h)g(could)g(prev)m(en)m(t)h(complex)g(CmpF)-8 b(rames)37
-b(b)s(eha)m(ving)g(correctly)h(\(for)227 1595 y(instance,)30
-b(resulting)f(in)f(the)g(failure)h(of)f(attempts)i(to)f(\014nd)e(a)i
-(Mapping)f(b)s(et)m(w)m(een)h(a)g(CmpF)-8 b(rame)28 b(and)227
-1708 y(itself)7 b(\).)0 2004 y Fw(G.7)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V1.7)0 2226 y FF(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-2339 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V1.6)g(and)f(V1.7:)111
-2603 y(1.)46 b(The)29 b(F)-8 b(rame)30 b(class)g(has)f(a)h(new)e(metho)
-s(d)h(called)i(astAngle)f(whic)m(h)f(returns)f(the)i(angle)g(subtended)
-e(b)m(y)227 2716 y(t)m(w)m(o)k(p)s(oin)m(ts)e(at)h(a)g(third)f(p)s(oin)
-m(t)g(within)g(a)h(2)f(or)h(3)f(dimensional)h(F)-8 b(rame.)111
-2905 y(2.)46 b(The)38 b(F)-8 b(rame)40 b(class)f(has)f(a)h(new)f(metho)
-s(d)g(called)h(astO\013set2)h(whic)m(h)f(calculates)h(a)f(p)s(osition)g
-(whic)m(h)227 3018 y(is)d(o\013set)h(a)m(w)m(a)m(y)g(from)e(a)h(giv)m
-(en)h(starting)f(p)s(oin)m(t)g(b)m(y)f(a)h(sp)s(eci\014ed)f(distance)i
-(along)f(a)g(geo)s(desic)h(curv)m(e)227 3131 y(whic)m(h)25
-b(passes)h(through)f(the)g(starting)i(p)s(oin)m(t)e(at)h(a)g(giv)m(en)h
-(p)s(osition)e(angle.)40 b(It)26 b(can)g(only)f(b)s(e)g(used)g(with)227
-3244 y(2-dimensional)32 b(F)-8 b(rames.)111 3433 y(3.)46
-b(The)41 b(F)-8 b(rame)42 b(class)g(has)g(a)f(new)g(metho)s(d)g(called)
-h(astAxDistance)i(whic)m(h)d(returns)f(the)i(incremen)m(t)227
-3546 y(b)s(et)m(w)m(een)30 b(t)m(w)m(o)h(supplied)c(axis)j(v)-5
-b(alues.)41 b(F)-8 b(or)30 b(axes)f(b)s(elonging)h(to)g(SkyF)-8
-b(rames,)29 b(the)h(returned)e(v)-5 b(alue)29 b(is)227
-3658 y(normalized)i(in)m(to)h(the)e(range)h Fu(\006)p
-Fo(\031)s FF(.)111 3847 y(4.)46 b(The)27 b(F)-8 b(rame)29
-b(class)f(has)g(a)g(new)f(metho)s(d)g(called)h(astAxO\013set)h(whic)m
-(h)e(returns)g(an)g(axis)h(v)-5 b(alue)28 b(a)g(giv)m(en)227
-3960 y(incremen)m(t)d(a)m(w)m(a)m(y)h(from)d(a)i(sp)s(eci\014ed)e(axis)
-h(v)-5 b(alue.)39 b(F)-8 b(or)25 b(axes)g(b)s(elonging)f(to)h(SkyF)-8
-b(rames,)25 b(the)g(returned)227 4073 y(v)-5 b(alue)26
-b(is)f(normalized)h(in)m(to)g(the)g(range)g Fu(\006)p
-Fo(\031)i FF(\(for)d(latitude)h(axes\))h(or)e(zero)h(to)g(2)p
-Fo(\031)j FF(\(for)c(longitude)h(axes\).)111 4262 y(5.)46
-b(The)24 b(Plot)g(class)h(has)f(a)g(new)f(metho)s(d)h(called)h
-(astGenCurv)m(e)f(whic)m(h)g(allo)m(ws)h(generalised)g(user-de\014ned)
-227 4375 y(curv)m(es)h(to)g(b)s(e)g(dra)m(wn.)38 b(The)25
-b(curv)m(e)h(is)g(de\014ned)e(b)m(y)i(a)g(user-supplied)e(Mapping)h
-(whic)m(h)h(maps)f(distance)227 4488 y(along)j(the)e(curv)m(e)h(in)m
-(to)h(the)e(corresp)s(onding)g(p)s(osition)g(in)g(the)h(curren)m(t)f(F)
--8 b(rame)28 b(of)e(the)h(Plot.)40 b(The)26 b(new)227
-4601 y(metho)s(d)k(then)h(maps)f(these)h(curren)m(t)g(F)-8
-b(rame)31 b(p)s(osition)g(in)m(to)h(graphics)e(co)s(ordinates,)i
-(taking)g(care)f(of)227 4714 y(an)m(y)g(non-linearities)h(or)e(discon)m
-(tin)m(uities)i(in)e(the)h(mapping.)111 4903 y(6.)46
-b(The)33 b(Plot)h(class)f(has)g(a)h(new)e(metho)s(d)h(called)h
-(astGrfSet)f(whic)m(h)g(allo)m(ws)i(the)e(underlying)f(primitiv)m(e)227
-5016 y(graphics)h(functions)f(to)i(b)s(e)e(selected)i(at)f(run-time.)48
-b(Previously)-8 b(,)34 b(the)f(functions)f(used)g(b)m(y)h(the)g(Plot)
-227 5128 y(class)42 b(to)g(pro)s(duce)e(graphics)h(could)g(only)g(b)s
-(e)g(selected)h(at)g(link-time,)j(using)40 b(the)i(options)f(of)g(the)
-227 5241 y(ast)p Fq(_)p FF(link)30 b(command.)40 b(The)28
-b(new)g(Plot)i(metho)s(d)e(allo)m(ws)j(an)e(application)h(to)f(o)m(v)m
-(er-ride)i(the)e(functions)227 5354 y(established)e(at)f(link-time,)i
-(b)m(y)e(sp)s(ecifying)g(alternativ)m(e)j(primitiv)m(e)e(graphics)f
-(routines.)39 b(In)25 b(addition,)227 5467 y(the)30 b(t)m(w)m(o)h(new)e
-(Plot)i(metho)s(ds)e(astGrfPush)g(and)g(astGrfP)m(op)h(allo)m(w)h(the)f
-(curren)m(t)g(graphics)g(routines)227 5580 y(to)c(b)s(e)e(sa)m(v)m(ed)i
-(and)e(restore)i(on)f(a)g(\014rst-in-last-out)h(stac)m(k,)i(allo)m
-(wing)e(temp)s(orary)f(c)m(hanges)h(to)f(b)s(e)f(made)227
-5693 y(to)31 b(the)g(set)g(of)f(registered)i(graphics)e(routines.)p
-eop end
-%%Page: 548 558
-TeXDict begin 548 557 bop 0 52 a FF(548)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(7.)46
-b(The)39 b(Dra)m(wAxes)i(attribute)f(of)g(the)g(Plot)g(class)h(can)f
-(no)m(w)f(b)s(e)g(sp)s(eci\014ed)g(indep)s(endan)m(tly)g(for)g(eac)m(h)
-227 464 y(axis,)31 b(b)m(y)g(app)s(ending)e(the)h(axis)h(index)f(to)h
-(the)g(end)e(of)i(the)f(attribute)i(name.)111 692 y(8.)46
-b(A)36 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h(Plot)g(class)g
-(whic)m(h)g(could)f(result)h(in)f(axis)h(lab)s(els)g(b)s(eing)f(dra)m
-(wn)g(on)227 805 y(inappropriate)30 b(edges)h(of)g(the)f(plotting)i(b)s
-(o)m(x)e(when)g(using)f(\\in)m(terior")k(lab)s(elling.)111
-1033 y(9.)46 b(A)30 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h(In)m
-(traMap)g(class)h(whic)m(h)e(could)h(cause)h(In)m(traMaps)f(to)g(b)s(e)
-f(corrupted)227 1145 y(after)i(transforming)f(an)m(y)h(p)s(oin)m(ts.)66
-1373 y(10.)46 b(Bugs)36 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h
-(FitsChan)f(class)h(whic)m(h)f(could)g(cause)h(inappropriate)f
-(ordering)g(of)227 1486 y(headers)30 b(within)g(a)h(FitsChan)f(when)g
-(writing)g(or)g(reading)h(ob)5 b(jects)31 b(using)f(NA)-8
-b(TIVE)30 b(enco)s(dings.)66 1714 y(11.)46 b(A)32 b(bug)e(has)h(b)s
-(een)f(\014xed)h(in)g(the)g(FitsChan)g(class)h(whic)m(h)f(could)g
-(cause)h(the)f(celestial)j(longitude)e(of)f(a)227 1827
-y(pixel)26 b(to)h(b)s(e)e(estimated)i(incorrectly)g(b)m(y)e(180)i
-(degrees)f(if)g(the)g(reference)g(p)s(oin)m(t)g(is)g(at)g(either)g(the)
-g(north)227 1940 y(or)31 b(the)f(south)g(p)s(ole.)0 2300
-y Fw(G.8)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-2)0
-2551 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2664 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V1.7)g(and)f(V1.8-2:)111 2986 y(1.)46
-b(The)33 b(SkyF)-8 b(rame)34 b(class)h(has)e(a)h(new)f(attribute)h
-(called)h(NegLon)f(whic)m(h)g(allo)m(ws)h(longitude)f(v)-5
-b(alues)34 b(to)227 3099 y(b)s(e)c(displa)m(y)m(ed)h(in)f(the)h(range)f
-Fu(\000)p Fo(\031)j FF(to)f(+)p Fo(\031)s FF(,)e(instead)h(of)f(the)h
-(usual)f(range)g(zero)h(to)h(2)p Fo(:\031)s FF(.)111
-3327 y(2.)46 b(Some)21 b(new)f(functions)h(\(astAngle,)k(astAxAngle,)f
-(astResolv)m(e,)h(astO\013set2,)g(astAxO\013set,)f(astAxDis-)227
-3440 y(tance\))32 b(ha)m(v)m(e)g(b)s(een)d(added)h(to)h(the)g(F)-8
-b(rame)31 b(class)h(to)f(allo)m(w)h(na)m(vigation)g(of)f(the)f(co)s
-(ordinate)i(space)f(to)227 3553 y(b)s(e)c(p)s(erformed)e(without)j
-(needing)f(to)h(kno)m(w)f(the)g(underlying)f(geometry)j(of)e(the)h
-(co-ordinate)g(system)227 3666 y(\(for)j(instance,)g(whether)f(it)h(is)
-f(Cartesian)h(or)f(spherical\).)227 3836 y(Note,)46 b(v)m(ersion)d
-(1.8-1)g(con)m(tained)g(man)m(y)f(of)g(these)g(facilities,)47
-b(but)41 b(some)h(ha)m(v)m(e)h(b)s(een)e(c)m(hanged)i(in)227
-3949 y(v)m(ersion)31 b(1.8-2.)43 b(P)m(articularly)-8
-b(,)32 b(p)s(ositions)e(angles)h(are)g(no)m(w)f(referred)g(to)h(the)f
-(second)h(F)-8 b(rame)31 b(axis)g(for)227 4062 y Fx(al)5
-b(l)34 b FF(classes)h(of)e(F)-8 b(rames)34 b(\(including)g(SkyF)-8
-b(rames\),)35 b(and)e(the)g(astBear)i(function)e(has)g(b)s(een)g
-(replaced)227 4175 y(b)m(y)e(astAxAngle.)0 4535 y Fw(G.9)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-3)0 4786
-y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 4899 y(v)m(ersions)31 b(V1.8-2)h(and)e(V1.8-3:)111
-5222 y(1.)46 b(A)33 b(new)f(metho)s(d)g(called)i(astDecomp)s(ose)h(has)
-d(b)s(een)g(added)g(to)i(the)f(Mapping)f(class)i(whic)m(h)e(enables)227
-5335 y(p)s(oin)m(ters)f(to)g(b)s(e)e(obtained)i(to)g(the)g(comp)s(onen)
-m(t)f(parts)h(of)f(CmpMap)g(and)f(CmpF)-8 b(rame)31 b(ob)5
-b(jects.)111 5562 y(2.)46 b(F)-8 b(unctions)46 b(within)e(pro)5
-b(j.c)44 b(and)g(w)m(cstrig.c)j(ha)m(v)m(e)f(b)s(een)e(renamed)g(to)h
-(a)m(v)m(oid)i(name)d(clashes)i(with)227 5675 y(functions)30
-b(in)g(more)h(recen)m(t)g(v)m(ersions)g(of)f(Mark)h(Calabretta's)h(w)m
-(cslib)f(library)-8 b(.)p eop end
-%%Page: 549 559
-TeXDict begin 549 558 bop 0 52 a Fy(G.10)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V1.8-4)2174 b FF(549)0 351
-y Fw(G.10)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-4)0
-560 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 673 y(v)m(ersions)31
-b(V1.8-3)h(and)e(V1.8-4:)111 887 y(1.)46 b(The)32 b(FitsChan)g(class)i
-(has)e(a)g(new)g(attribute)h(called)h(DefB1950)h(whic)m(h)d(can)h(b)s
-(e)f(used)f(to)i(select)h(the)227 999 y(default)22 b(reference)h(frame)
-f(and)f(equino)m(x)h(to)h(b)s(e)e(used)g(if)h(a)h(FitsChan)e(with)h
-(foreign)g(enco)s(ding)g(con)m(tains)227 1112 y(no)31
-b(indication)g(of)f(the)h(reference)g(frame)f(or)g(equino)m(x.)111
-1288 y(2.)46 b(A)36 b(bug)f(has)h(b)s(een)f(\014xed)g(in)g(the)h
-(FitsChan)g(class)g(whic)m(h)g(could)g(prev)m(en)m(t)g(astW)-8
-b(rite)38 b(from)d(creating)227 1401 y(a)k(set)f(of)h(FITS)e(headers)h
-(from)f(an)h(otherwise)h(v)-5 b(alid)38 b(F)-8 b(rameSet,)42
-b(when)37 b(when)g(using)h(FITS-AIPS)227 1514 y(enco)s(ding.)111
-1689 y(3.)46 b(A)37 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)h
-(FitsChan)f(class)h(whic)m(h)g(could)f(cause)h(astRead)h(to)f(mis-in)m
-(terpret)227 1802 y(the)31 b(FITS)e(CR)m(OT)-8 b(A)31
-b(k)m(eyw)m(ord)g(when)e(using)h(FITS-AIPS)f(enco)s(ding.)0
-2077 y Fw(G.11)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-5)0
-2286 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 2399 y(v)m(ersions)31
-b(V1.8-4)h(and)e(V1.8-5:)111 2612 y(1.)46 b(The)41 b(Plot)g(class)h
-(de\014nes)e(new)g(graphical)i(elemen)m(ts)g(Axis1,)i(Axis2,)g(Grid1,)g
-(Grid2,)g(NumLabs1,)227 2725 y(NumLabs2,)g(T)-8 b(extLab1,)45
-b(T)-8 b(extLab2,)45 b(Tic)m(ks1)d(and)f(Tic)m(ks2.)73
-b(These)41 b(allo)m(w)i(graphical)f(attributes)227 2838
-y(\(colour,)c(width,)e(etc\))h(to)f(b)s(e)f(set)g(for)h(eac)m(h)g(axis)
-g(individually)-8 b(.)55 b(Previously)-8 b(,)38 b(graphical)e
-(attributes)227 2951 y(could)31 b(only)g(b)s(e)g(set)g(for)g(b)s(oth)f
-(axes)i(together,)h(using)d(graphical)i(elemen)m(ts)g(Axes,)g(Grid,)f
-(NumLabs,)227 3064 y(T)-8 b(extLabs)31 b(and)f(Tic)m(ks.)0
-3339 y Fw(G.12)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V1.8-7)0
-3548 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3661 y(v)m(ersions)31
-b(V1.8-5)h(and)e(V1.8-7:)111 3874 y(1.)46 b(A)23 b(new)f(attribute)h
-(called)g(CarLin)f(has)g(b)s(een)g(added)f(to)i(the)g(FitsChan)f(class)
-h(whic)m(h)f(con)m(trols)i(the)e(w)m(a)m(y)227 3987 y(CAR)34
-b(pro)5 b(jections)35 b(are)g(handled)f(when)f(reading)i(a)g(F)-8
-b(rameSet)35 b(from)f(a)h(non-nativ)m(e)h(FITS)d(header.)227
-4100 y(Some)45 b(FITS)e(writers)h(use)g(a)h(CAR)e(pro)5
-b(jection)45 b(to)g(represen)m(t)g(a)f(simple)g(linear)h
-(transformation)227 4213 y(b)s(et)m(w)m(een)37 b(pixel)f(co)s
-(ordinates)h(and)f(celestial)j(sky)c(co)s(ordinates.)59
-b(This)35 b(is)i(not)f(consisten)m(t)h(with)f(the)227
-4326 y(de\014nition)41 b(of)g(the)g(CAR)f(pro)5 b(jection)42
-b(in)e(the)h(draft)g(FITS-W)m(CS)f(standard,)j(whic)m(h)e(requires)f
-(the)227 4439 y(resultan)m(t)33 b(Mapping)f(to)h(include)f(a)g(3D)h
-(rotation)g(from)f(nativ)m(e)h(spherical)f(co)s(ordinates)h(to)g
-(celestial)227 4552 y(spherical)39 b(co)s(ordinates,)i(th)m(us)d
-(making)h(the)f(Mapping)h(non-linear.)64 b(Setting)40
-b(CarLin)d(to)i(1)g(forces)227 4665 y(astRead)46 b(to)f(ignore)g(the)g
-(FITS-W)m(CS)g(standard)e(and)h(treat)i(an)m(y)f(CAR)f(pro)5
-b(jections)46 b(as)e(simple)227 4778 y(linear)31 b(Mappings)f(from)g
-(pixel)h(co)s(ordinates)g(to)g(celestial)i(co)s(ordinates.)111
-4953 y(2.)46 b(A)35 b(bug)e(has)h(b)s(een)g(\014xed)f(whic)m(h)h(could)
-h(result)f(in)g(axis)h(F)-8 b(ormat)35 b(attributes)g(set)g(b)m(y)f
-(the)g(user)g(b)s(eing)227 5066 y(ignored)d(under)e(certain)i
-(circumstances.)111 5241 y(3.)46 b(A)32 b(bug)f(in)h(the)g(w)m(a)m(y)g
-(tic)m(k)i(marks)d(p)s(ositions)h(are)g(selected)h(in)e(the)h(Plot)h
-(class)g(has)e(b)s(een)g(\014xed.)44 b(This)227 5354
-y(bug)c(could)h(result)f(in)g(extra)h(tic)m(ks)h(marks)e(b)s(eing)g
-(displa)m(y)m(ed)h(at)g(inappropriate)f(p)s(ositions.)71
-b(This)227 5467 y(bug)35 b(manifested)g(itself,)i(for)d(instance,)j(if)
-e(the)g(Mapping)g(represen)m(ted)g(b)m(y)f(the)h(Plot)h(w)m(as)f(a)g
-(simple)227 5580 y(Cartesian)e(to)g(P)m(olar)h(Mapping.)47
-b(In)31 b(this)i(example,)g(the)g(bug)f(caused)g(tic)m(k)i(marks)e(to)h
-(b)s(e)f(dra)m(wn)g(at)227 5693 y(negativ)m(e)h(radius)c(v)-5
-b(alues.)p eop end
-%%Page: 550 560
-TeXDict begin 550 559 bop 0 52 a FF(550)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(4.)46
-b(A)31 b(bug)e(has)h(b)s(een)g(\014xed)g(whic)m(h)g(could)g(prev)m(en)m
-(t)h(attribute)g(settings)g(from)f(b)s(eing)g(read)g(correctly)i(b)m(y)
-227 464 y(astSet,)g(etc.,)g(on)e(certain)h(platforms)g(\(MacOS,)g(for)f
-(instance\).)0 765 y Fw(G.13)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V1.8-8)0 990 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1103 y(v)m(ersions)31
-b(V1.8-7)h(and)e(V1.8-8:)111 1373 y(1.)46 b(A)33 b(bug)g(has)g(b)s(een)
-f(\014xed)g(in)h(the)g(FitsChan)g(class)h(whic)m(h)f(could)g(cause)g
-(problems)g(when)f(creating)i(a)227 1485 y(F)-8 b(rameSet)28
-b(from)d(a)i(FITS)e(header)h(con)m(taining)i(W)m(CS)e(information)g
-(stored)h(in)e(the)i(form)e(of)i(Digitised)227 1598 y(Digitised)i(Sky)e
-(Surv)m(ey)f(\(DSS\))i(k)m(eyw)m(ords.)40 b(These)27
-b(problems)f(only)i(o)s(ccurred)e(for)h(DSS)g(\014elds)f(in)h(the)227
-1711 y(southern)k(hemisphere,)g(and)g(resulted)g(in)h(pixel)f(p)s
-(ositions)h(b)s(eing)f(mapp)s(ed)f(to)i(sky)g(p)s(ositions)f(close)227
-1824 y(to)g(the)g(corresp)s(onding)e Fx(northern)j FF(hemispshere)e
-(\014eld.)111 2016 y(2.)46 b(A)39 b(new)g(metho)s(d)f(called)i
-(astBoundingBo)m(x)g(has)f(b)s(een)f(added)g(to)h(the)g(Plot)h(class.)
-67 b(This)38 b(metho)s(d)227 2129 y(returns)29 b(the)i(b)s(ounding)d(b)
-s(o)m(x)j(of)f(the)h(previous)f(graphical)h(output)f(pro)s(duced)f(b)m
-(y)h(a)h(Plot)g(metho)s(d.)111 2322 y(3.)46 b(A)39 b(new)f(attribute)h
-(called)g(In)m(visible)g(has)f(b)s(een)g(added)f(to)j(the)e(Plot)h
-(class)g(whic)m(h)g(suppresses)d(the)227 2435 y(graphical)45
-b(output)e(normally)g(pro)s(duced)f(b)m(y)i(Plot)g(metho)s(ds.)79
-b(All)44 b(the)g(calculations)i(needed)d(to)227 2548
-y(pro)s(duce)25 b(the)i(normal)f(output)f(are)i(still)g(p)s(erformed)e
-(ho)m(w)m(ev)m(er,)j(and)e(so)g(the)g(b)s(ounding)f(b)s(o)m(x)h
-(returned)227 2660 y(b)m(y)31 b(the)f(new)g(astBoundingBo)m(x)i(metho)s
-(d)e(is)g(still)h(usable.)111 2853 y(4.)46 b(Bugs)30
-b(ha)m(v)m(e)h(b)s(een)e(\014xed)g(related)h(to)h(the)f(app)s(earance)g
-(of)f(graphical)i(output)e(pro)s(duced)f(b)m(y)i(the)g(Plot)227
-2966 y(class.)39 b(These)24 b(bugs)e(w)m(ere)i(to)h(do)e(with)g(the)h
-(w)m(a)m(y)g(in)g(whic)m(h)f(graphical)h(elemen)m(ts)h(relating)g(to)f
-(a)g(sp)s(eci\014c)227 3079 y(axis)36 b(\(e.g.)57 b Fq(Colour\(axis1\))
-p FF(,)33 b(etc.\))58 b(in)m(teracted)37 b(with)e(the)g(corresp)s
-(onding)g(generic)h(elemen)m(t)h(\(e.g.)227 3191 y Fq(Colour\(axes\))p
-FF(,)28 b(etc.\).)0 3493 y Fw(G.14)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V1.8-13)0 3718 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 3830 y(v)m(ersions)31
-b(V1.8-8)h(and)e(V1.8-13:)111 4100 y(1.)46 b(The)29 b(FitsChan)g(class)
-g(has)g(b)s(een)f(mo)s(di\014ed)g(so)h(that)h(LONPOLE)e(k)m(eyw)m(ords)
-h(are)g(only)g(pro)s(duced)f(b)m(y)227 4213 y(astW)-8
-b(rite)34 b(when)c(necessary)-8 b(.)44 b(F)-8 b(or)32
-b(zenithal)g(pro)5 b(jections)32 b(suc)m(h)f(as)h(T)-8
-b(AN,)31 b(the)h(LONPOLE)e(k)m(eyw)m(ord)227 4326 y(can)j(alw)m(a)m(ys)
-i(tak)m(e)f(its)f(default)g(v)-5 b(alue)33 b(and)g(so)g(is)f(not)h
-(included)f(in)h(the)g(FITS)f(header)g(pro)s(duced)g(b)m(y)227
-4439 y(astW)-8 b(rite.)45 b(Previously)-8 b(,)32 b(the)f(unnecessary)f
-(pro)s(duction)g(of)h(a)h(LONPOLE)d(k)m(eyw)m(ord)j(could)f(prev)m(en)m
-(t)227 4551 y(F)-8 b(rameSets)22 b(b)s(eing)e(written)h(out)g(using)f
-(enco)s(dings)h(whic)m(h)f(do)h(not)g(supp)s(ort)e(the)h(LONPOLE)g(k)m
-(eyw)m(ord)227 4664 y(\(suc)m(h)31 b(as)f(FITS-IRAF\).)111
-4857 y(2.)46 b(The)31 b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s
-(di\014ed)f(to)i(retain)g(leading)g(and)f(trailing)h(spaces)g(within)f
-(COM-)227 4970 y(MENT)g(cards.)111 5162 y(3.)46 b(The)41
-b(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i(only)f(use)g
-(CTYPE)g(commen)m(ts)h(as)f(axis)h(lab)s(els)f(if)227
-5275 y(all)d(non-celestial)i(axes)d(ha)m(v)m(e)i(unique)d(non-blank)h
-(commen)m(ts)h(\(otherwise)f(the)h(CTYPE)e(k)m(eyw)m(ord)227
-5388 y(v)-5 b(alues)31 b(are)g(used)e(as)i(lab)s(els\).)111
-5580 y(4.)46 b(The)29 b(FitsChan)g(class)h(has)f(b)s(een)f(mo)s
-(di\014ed)g(so)h(that)h(it)g(do)s(es)f(not)g(app)s(end)f(a)h(trailing)h
-(\\Z")g(c)m(haracter)227 5693 y(to)h(the)g(end)f(of)g(D)m(A)-8
-b(TE-OBS)31 b(k)m(eyw)m(ord)g(v)-5 b(alues.)p eop end
-%%Page: 551 561
-TeXDict begin 551 560 bop 0 52 a Fy(G.15)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V2.0)2249 b FF(551)111 351
-y(5.)46 b(The)e(FitsChan)g(class)h(has)f(b)s(een)g(mo)s(di\014ed)f(to)i
-(use)f(latest)i(list)e(of)h(FITS-W)m(CS)f(pro)5 b(jections,)48
-b(as)227 464 y(describ)s(ed)33 b(in)g(the)h(FITS-W)m(CS)f(pap)s(er)f(I)
-s(I,)h(\\Represen)m(tations)i(of)f(celestial)i(co)s(ordinates)f(in)e
-(FITS")227 577 y(\(Calabretta)42 b(&)d(Greisen,)k(draft)c(dated)h(23)g
-(April)g(2002\).)71 b(Supp)s(ort)37 b(has)j(b)s(een)f(retained)h(for)f
-(the)227 690 y(p)s(olynomial)44 b(correction)h(terms)e(whic)m(h)h
-(previous)f(drafts)g(ha)m(v)m(e)h(allo)m(w)m(ed)i(to)e(b)s(e)f(asso)s
-(ciated)i(with)227 803 y(T)-8 b(AN)31 b(pro)5 b(jections.)111
-998 y(6.)46 b(The)37 b(WcsMap)h(class)g(has)f(additional)i(pro)5
-b(jection)38 b(t)m(yp)s(es)f(of)g(AST)p Fq(__)p FF(TPN)f(\(whic)m(h)h
-(implemen)m(ts)h(a)227 1111 y(distorted)e(T)-8 b(AN)36
-b(pro)5 b(jection\))37 b(and)e(AST)p Fq(__)p FF(SZP)-8
-b(.)34 b(The)h(AST)p Fq(__)p FF(T)-8 b(AN)35 b(pro)5
-b(jection)36 b(t)m(yp)s(e)g(no)m(w)g(repre-)227 1223
-y(sen)m(ts)c(a)f(simple)g(T)-8 b(AN)31 b(pro)5 b(jection)32
-b(and)e(has)g(no)h(asso)s(ciated)i(pro)5 b(jection)31
-b(parameters.)43 b(In)30 b(addition,)227 1336 y(the)39
-b(usage)f(of)h(pro)5 b(jection)39 b(parameters)f(has)g(b)s(een)g
-(brough)m(t)g(in)m(to)h(line)f(with)g(the)g(the)h(FITS-W)m(CS)227
-1449 y(pap)s(er)30 b(I)s(I.)111 1644 y(7.)46 b(The)27
-b(WcsMap)h(class)f(has)g(b)s(een)f(mo)s(di\014ed)g(so)i(that)f(a)h
-(\\get")h(op)s(eration)e(on)g(a)g(pro)5 b(jection)28
-b(parameter)227 1757 y(attribute)34 b(will)f(return)f(the)h(default)h
-(v)-5 b(alue)33 b(de\014ned)f(in)h(the)g(FITS-W)m(CS)f(pap)s(er)g(I)s
-(I)g(if)h(no)g(v)-5 b(alue)34 b(has)227 1870 y(b)s(een)42
-b(set)g(for)g(the)g(attribute.)77 b(Previously)-8 b(,)45
-b(a)e(v)-5 b(alue)42 b(of)h(AST)p Fq(__)p FF(BAD)e(w)m(as)i(returned)e
-(in)g(suc)m(h)h(a)227 1983 y(situation.)111 2177 y(8.)k(The)29
-b(F)-8 b(rame)31 b(class)f(has)g(new)f(attributes)h(T)-8
-b(op\(axis\))31 b(and)e(Bottom\(axis\))j(whic)m(h)d(allo)m(w)j(a)e
-(\\plottable)227 2290 y(range")f(to)f(b)s(e)f(sp)s(eci\014ed)g(for)g
-(eac)m(h)h(F)-8 b(rame)29 b(axis.)40 b(The)27 b(grid)g(pro)s(duced)f(b)
-m(y)i(the)f(astGrid)h(metho)s(d)f(will)227 2403 y(not)k(extend)f(b)s
-(ey)m(ond)g(these)h(limits.)0 2708 y Fw(G.15)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V2.0)0 2935 y FF(Note,)i(F)-8
-b(rame)38 b(descriptions)e(created)h(using)f(AST)f(V2.0)j(will)f(not)f
-(b)s(e)g(readable)h(b)m(y)f(applications)h(link)m(ed)0
-3048 y(with)30 b(earlier)h(v)m(ersions)g(of)g(AST.)e(This)h(applies)h
-(to)g(F)-8 b(rame)31 b(descriptions)f(created)i(using:)136
-3294 y Fu(\017)46 b FF(the)31 b(Channel)e(class)136 3489
-y Fu(\017)46 b FF(the)31 b(FitsChan)f(class)h(if)g(the)f(NA)-8
-b(TIVE)31 b(Enco)s(ding)f(is)g(used)136 3684 y Fu(\017)46
-b FF(the)31 b(astSho)m(w)f(function)0 3930 y(Applications)35
-b(m)m(ust)f(b)s(e)g(re-link)m(ed)h(with)f(AST)f(V2.0)i(in)f(order)g(to)
-h(b)s(e)f(able)g(to)h(read)f(F)-8 b(rame)36 b(descriptions)0
-4043 y(created)31 b(b)m(y)g(AST)e(v2.0.)0 4209 y(The)37
-b(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m
-(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 4322 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V1.8-13)i(and)c
-(V2.0)j(\(the)f(curren)m(t)f(v)m(ersion\):)111 4595 y(1.)46
-b(The)39 b(default)g(v)-5 b(alue)40 b(for)f(the)h(Domain)g(attribute)g
-(pro)m(vided)f(b)m(y)g(the)g(CmpF)-8 b(rame)39 b(class)h(has)f(b)s(een)
-227 4708 y(c)m(hanged)c(from)f(\\CMP")g(to)h(a)f(string)g(formed)g(b)m
-(y)g(concatenating)i(the)f(Domain)f(attributes)h(of)f(the)227
-4821 y(t)m(w)m(o)26 b(comp)s(onen)m(t)f(F)-8 b(rames,)27
-b(separated)e(b)m(y)g(a)g(min)m(us)e(sign.)39 b(If)24
-b(b)s(oth)g(comp)s(onen)m(t)h(Domains)h(are)f(blank,)227
-4934 y(then)30 b(the)h(old)f(default)h(of)g(\\CMP")g(is)f(retained)h
-(for)f(the)g(CmpF)-8 b(rame)31 b(Domain.)111 5128 y(2.)46
-b(The)25 b(implemen)m(tation)i(of)e(the)g(astW)-8 b(rite)27
-b(function)e(within)g(the)g(FitsChan)g(class)h(has)f(b)s(een)f(mo)s
-(di\014ed.)227 5241 y(It)30 b(will)g(no)m(w)g(attempt)h(to)g(pro)s
-(duce)e(a)h(set)g(of)g(FITS)f(header)h(cards)g(to)g(describ)s(e)g(a)g
-(F)-8 b(rameSet)31 b(ev)m(en)f(if)227 5354 y(the)i(n)m(um)m(b)s(er)e
-(of)h(axes)h(in)f(the)g(Curren)m(t)g(F)-8 b(rames)32
-b(is)f(greater)h(than)f(the)h(n)m(um)m(b)s(er)e(in)h(the)g(Base)i(F)-8
-b(rame)227 5467 y(\(that)42 b(is,)i(if)d(there)g(are)g(more)g(W)m(CS)g
-(axes)h(than)e(pixel)h(axes\).)74 b(This)40 b(has)g(alw)m(a)m(ys)j(b)s
-(een)d(p)s(ossible)227 5580 y(with)32 b(NA)-8 b(TIVE)32
-b(enco)s(ding,)g(but)f(has)h(not)g(previously)f(b)s(een)g(p)s(ossible)h
-(for)f(foreign)h(enco)s(dings.)45 b(The)227 5693 y(W)m(CSAXES)30
-b(k)m(eyw)m(ord)h(is)g(used)e(to)i(store)g(the)g(n)m(um)m(b)s(er)e(of)h
-(W)m(CS)h(axes)g(in)f(the)g(FITS)g(header.)p eop end
-%%Page: 552 562
-TeXDict begin 552 561 bop 0 52 a FF(552)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(3.)46
-b(Another)29 b(c)m(hange)g(to)h(the)e(astW)-8 b(rite)31
-b(function)d(within)g(the)h(FitsChan)f(class)i(is)e(that)h(the)g
-(ordering)f(of)227 464 y(\\foreign")33 b(axes)f(\()p
-Fx(i.e.)43 b FF(CTYPE)31 b(k)m(eyw)m(ords\))h(is)f(no)m(w)g(c)m(hosen)h
-(to)g(mak)m(e)h(the)e(CD)h(\(or)f(PC\))h(matrix)f(as)227
-577 y(diagonal)j(as)e(p)s(ossible)g(-)h(an)m(y)f(elemen)m(t)i(of)e
-(axis)h(transp)s(osition)f(is)g(remo)m(v)m(ed)i(b)m(y)e(this)g
-(re-ordering)g(as)227 690 y(recommended)26 b(in)g(FITS-W)m(CS)f(pap)s
-(er)g(I.)h(Previously)h(the)f(ordering)g(w)m(as)g(determined)g(b)m(y)g
-(the)g(order)227 803 y(of)34 b(the)g(axes)h(in)e(the)h(Curren)m(t)f(F)
--8 b(rame)35 b(of)f(the)g(supplied)f(F)-8 b(rameSet.)52
-b(This)33 b(c)m(hange)i(do)s(es)f(not)g(a\013ect)227
-916 y(NA)-8 b(TIVE)31 b(enco)s(ding.)111 1097 y(4.)46
-b(Supp)s(ort)26 b(for)h(sp)s(ectral)h(co)s(ordinate)h(systems)e(has)h
-(b)s(een)f(in)m(tro)s(duced)g(through)m(t)h(the)f(addition)h(of)g(t)m
-(w)m(o)227 1210 y(new)36 b(classes,)j(Sp)s(ecF)-8 b(rame)37
-b(and)e(Sp)s(ecMap.)58 b(The)36 b(Sp)s(ecF)-8 b(rame)36
-b(is)h(a)f(1-dimensional)i(F)-8 b(rame)37 b(whic)m(h)227
-1322 y(can)c(b)s(e)f(used)g(to)h(describ)s(e)f(p)s(ositions)h(within)f
-(an)g(electromagnetic)k(sp)s(ectrum)c(in)g(v)-5 b(arious)32
-b(systems)227 1435 y(\(w)m(a)m(v)m(elength,)d(frequency)-8
-b(,)25 b(v)-5 b(arious)24 b(forms)g(of)g(v)m(elo)s(cit)m(y)-8
-b(,)27 b Fx(etc.)p FF(\))38 b(and)24 b(referred)f(to)i(v)-5
-b(arious)24 b(standards)f(of)227 1548 y(rest)30 b(\(top)s(o)s(cen)m
-(tric,)i(geo)s(cen)m(tric,)g(helio)s(cen)m(tric)g(LSRK,)d
-Fx(etc.)p FF(\).)40 b(The)30 b(Sp)s(ecMap)f(is)h(a)g(Mapping)g(whic)m
-(h)227 1661 y(can)37 b(transform)e(sp)s(ectral)i(axis)f(v)-5
-b(alues)37 b(b)s(et)m(w)m(een)g(these)f(v)-5 b(arious)37
-b(systems)f(and)f(standards)h(of)g(rest.)227 1774 y(Note,)h(FitsChans)c
-(whic)m(h)h(ha)m(v)m(e)h(a)f(foreign)g(enco)s(ding)g(\()p
-Fx(i.e.)50 b FF(an)m(y)34 b(enco)s(ding)g(other)g(than)g(NA)-8
-b(TIVE\))227 1887 y(are)31 b(not)g(y)m(et)g(able)g(to)g(read)f(or)h
-(write)f(these)h(new)f(classes.)111 2068 y(5.)46 b(F)-8
-b(acilities)38 b(ha)m(v)m(e)d(b)s(een)f(added)f(to)i(the)g(F)-8
-b(rame)35 b(class)g(whic)m(h)f(allo)m(w)i(di\013erences)f(in)f(axis)g
-(units)g(to)h(b)s(e)227 2181 y(tak)m(en)e(in)m(to)g(accoun)m(t)g(when)e
-(\014nding)f(a)i(Mapping)g(b)s(et)m(w)m(een)g(t)m(w)m(o)h(F)-8
-b(rames.)46 b(In)31 b(previous)g(v)m(ersions)h(of)227
-2294 y(AST,)k(the)g(Unit)h(attribute)f(w)m(as)h(a)f(purely)g
-(descriptiv)m(e)h(item)f(in)m(tended)g(only)h(for)e(h)m(uman)h(readers)
-227 2407 y(-)k(c)m(hanging)g(the)f(v)-5 b(alue)40 b(of)f(Unit)h(made)f
-(no)g(di\013erence)g(to)h(the)g(b)s(eha)m(viour)e(of)i(the)f(F)-8
-b(rame.)68 b(As)39 b(of)227 2520 y(v)m(ersion)31 b(2.0,)g(the)f(Unit)g
-(attribute)g(can)h(in\015uence)e(the)h(nature)f(of)h(the)g(Mappings)g
-(b)s(et)m(w)m(een)g(F)-8 b(rames.)227 2632 y(F)g(or)23
-b(instance,)i(if)d(the)g(astFindrame)g(or)g(astCon)m(v)m(ert)i(metho)s
-(d)d(is)h(used)f(to)i(\014nd)e(the)h(Mapping)g(b)s(et)m(w)m(een)227
-2745 y(an)32 b(Axis)h(with)e(Unit)i(set)f(to)h(\\m")g(and)e(another)i
-(Axis)f(with)g(Unit)g(set)h(to)g(\\km",)g(then)f(the)g(metho)s(d)227
-2858 y(will)i(return)e(a)i(Zo)s(omMap)f(whic)m(h)h(in)m(tro)s(duces)f
-(a)g(scaling)i(factor)f(of)g(0.001)h(b)s(et)m(w)m(een)f(the)g(t)m(w)m
-(o)h(axes.)227 2971 y(These)c(facilities)h(assume)e(that)i(units)d(are)
-i(sp)s(eci\014ed)f(follo)m(wing)i(the)f(rules)f(included)g(in)g(FITS-W)
-m(CS)227 3084 y(pap)s(er)g(I)g(\()p Fx(R)-5 b(epr)g(esentation)35
-b(of)e(World)h(Co)-5 b(or)g(dinates)36 b(in)c(FITS)p
-FF(,)f(Greisen)g(&)f(Calabretta\).)227 3231 y(In)23 b(order)g(to)h
-(minimise)f(the)h(risk)f(of)h(breaking)f(existing)i(soft)m(w)m(are,)h
-(the)e(default)f(b)s(eha)m(viour)g(for)g(simple)227 3344
-y(F)-8 b(rames)35 b(is)f(to)h(ignore)g(the)f(Unit)h(attribute)f(\()p
-Fx(i.e.)52 b FF(to)35 b(retain)f(the)h(previous)e(b)s(eha)m(viour\).)52
-b(Ho)m(w)m(ev)m(er,)227 3457 y(the)37 b(new)g(F)-8 b(rame)38
-b(metho)s(d)e(astSetActiv)m(eUnit)41 b(ma)m(y)c(b)s(e)g(used)f(to)i
-(\\activ)-5 b(ate")40 b(\(or)d(deactiv)-5 b(ate\))40
-b(the)227 3570 y(new)34 b(facilities)j(within)d(a)h(sp)s(eci\014c)f(F)
--8 b(rame.)54 b(Note,)37 b(the)e(new)f(Sp)s(ecF)-8 b(rame)34
-b(class)i(is)e(di\013eren)m(t)h(to)g(the)227 3683 y(simple)c(F)-8
-b(rame)31 b(class)g(in)f(that)h(the)f(new)g(facilities)j(for)d
-(handling)f(units)h(are)h(alw)m(a)m(ys)h(activ)m(e)g(within)e(a)227
-3796 y(Sp)s(ecF)-8 b(rame.)111 3976 y(6.)46 b(The)33
-b(System)g(and)g(Ep)s(o)s(c)m(h)f(attributes)i(fo)f(the)g(SkyF)-8
-b(rame)34 b(class)g(ha)m(v)m(e)g(b)s(een)f(mo)m(v)m(ed)h(to)g(the)f
-(paren)m(t)227 4089 y(F)-8 b(rame)34 b(class.)50 b(This)32
-b(enables)i(all)g(sub-classes)f(of)h(F)-8 b(rame)34 b(\(suc)m(h)f(as)g
-(the)g(new)g(Sp)s(ecF)-8 b(rame)33 b(class\))i(to)227
-4202 y(share)30 b(these)h(attributes,)g(and)f(to)h(pro)m(vide)g
-(suitable)g(options)f(for)h(eac)m(h)g(class.)111 4383
-y(7.)46 b(The)37 b(F)-8 b(rame)38 b(class)h(has)e(a)h(new)e(attribute)i
-(called)h(AlignSystem,)h(whic)m(h)d(allo)m(ws)i(con)m(trol)g(o)m(v)m
-(er)f(the)227 4496 y(alignmen)m(t)32 b(pro)s(cess)e(p)s(erformed)f(b)m
-(y)h(the)h(metho)s(ds)e(astFindF)-8 b(rame)32 b(and)e(astCon)m(v)m
-(ert.)111 4677 y(8.)46 b(The)32 b(CmpF)-8 b(rame)31 b(class)i(has)f(b)s
-(een)f(mo)s(di\014ed)g(so)h(that)g(attributes)h(of)f(a)g(comp)s(onen)m
-(t)g(F)-8 b(rame)33 b(can)f(b)s(e)227 4790 y(accessed)h(without)f
-(needing)f(to)h(extract)h(the)f(F)-8 b(rame)33 b(\014rst.)43
-b(T)-8 b(o)32 b(do)f(this,)h(app)s(end)e(an)i(axis)g(index)f(to)227
-4903 y(the)g(end)g(of)g(the)g(attribute)h(name.)43 b(F)-8
-b(or)31 b(instance,)i(if)e(a)g(CmpF)-8 b(rame)31 b(con)m(tains)h(a)f
-(Sp)s(ecF)-8 b(rame)32 b(and)e(a)227 5016 y(SkyF)-8 b(rame)21
-b(\(in)g(that)g(order\),)i(then)e(the)f(StdOfRest)h(attribute)g(of)g
-(the)g(Sp)s(ecF)-8 b(rame)21 b(can)g(b)s(e)f(referred)g(to)227
-5128 y(as)28 b(the)f(\\StdOfRest\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame.)40 b(Lik)m(ewise,)29 b(the)e(Equino)m(x)g(attribute)h(of)f(the)
-227 5241 y(SkyF)-8 b(rame)35 b(can)f(b)s(e)g(accessed)h(as)g(the)f
-(\\Equino)m(x\(2\)")j(\(or)d(equiv)-5 b(alen)m(tly)36
-b(\\Equino)m(x\(3\)"\))h(attribute)227 5354 y(of)32 b(the)h(CmpF)-8
-b(rame.)45 b(The)32 b(\\System\(1\)")i(attribute)e(of)h(the)f(CmpF)-8
-b(rame)32 b(will)g(refer)g(to)g(the)h(System)227 5467
-y(attribute)i(of)g(the)g(Sp)s(ecF)-8 b(rame,)36 b(whereas)e(the)g
-(\\System\(2\)")j(and)c(\\System\(3\)")k(attributes)e(of)f(the)227
-5580 y(CmpF)-8 b(rame)38 b(will)h(refer)e(to)i(the)g(System)e
-(attribute)i(of)g(the)f(SkyF)-8 b(rame)38 b(\(the)h(\\System")g
-(attribute)227 5693 y(without)33 b(an)f(axis)h(sp)s(eci\014er)f(will)g
-(refer)g(to)h(the)g(System)f(attribute)h(of)g(the)f(CmpF)-8
-b(rame)33 b(as)f(a)h(whole,)p eop end
-%%Page: 553 563
-TeXDict begin 553 562 bop 0 52 a Fy(G.16)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.0)2249 b FF(553)227 351
-y(since)27 b(System)g(is)g(an)f(attribute)i(of)e(all)i(F)-8
-b(rames,)29 b(and)d(a)h(CmpF)-8 b(rame)26 b(is)h(a)g(F)-8
-b(rame)28 b(and)e(so)h(has)f(its)h(o)m(wn)227 464 y(System)j(v)-5
-b(alue)31 b(whic)m(h)f(is)h(indep)s(endan)m(t)e(of)i(the)f(System)g
-(attributes)h(of)g(its)g(comp)s(onen)m(t)f(F)-8 b(rames\).)111
-655 y(9.)46 b(The)22 b(algorithms)h(used)e(b)m(y)h(the)h(Plot)g(class)g
-(for)f(determining)g(when)f(to)i(omit)g(o)m(v)m(erlapping)g(axis)g(lab)
-s(els,)227 768 y(and)k(the)h(abbreviation)h(of)e(redundan)m(t)g
-(leading)h(\014elds)g(within)f(sexagesimal)i(axis)g(lab)s(els,)f(ha)m
-(v)m(e)h(b)s(een)227 881 y(impro)m(v)m(ed)i(to)g(a)m(v)m(oid)h(some)f
-(anomolous)g(b)s(eha)m(viour)f(in)g(previous)g(v)m(ersions.)66
-1072 y(10.)46 b(The)23 b(curv)m(e)g(dra)m(wing)g(algorithm)h(used)f(b)m
-(y)g(the)g(Plot)h(class)g(has)f(b)s(een)f(mo)s(di\014ed)g(to)i(reduce)f
-(the)g(c)m(hance)227 1185 y(of)28 b(it)h(\\missing")f(small)h(curv)m(e)
-f(sections,)i(suc)m(h)d(as)h(ma)m(y)h(b)s(e)e(pro)s(duced)f(if)i(a)g
-(grid)g(line)g(cuts)g(across)g(the)227 1298 y(plot)38
-b(v)m(ery)g(close)g(to)g(a)g(corner.)61 b(Previously)-8
-b(,)40 b(these)e(missed)f(sections)h(could)f(sometimes)i(result)e(in)
-227 1411 y(axis)31 b(lab)s(els)g(b)s(eing)f(omitted.)66
-1602 y(11.)46 b(A)34 b(new)g(function)f(\(astV)-8 b(ersion\))36
-b(has)e(b)s(een)f(added)h(to)g(return)f(the)h(v)m(ersion)h(of)f(the)g
-(AST)f(library)h(in)227 1715 y(use.)66 1906 y(12.)46
-b(Bugs)32 b(ha)m(v)m(e)g(b)s(een)f(\014xed)f(in)h(the)h(Plot)g(class)g
-(whic)m(h)f(caused)g(serious)h(problems)e(when)g(plotting)j(high)227
-2019 y(precision)43 b(data.)79 b(These)42 b(problems)h(could)f(range)i
-(from)e(the)h(omission)g(of)g(some)g(tic)m(k)h(marks)f(to)227
-2132 y(complete)32 b(failure)f(to)g(pro)s(duce)e(a)i(plot.)0
-2400 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f
-(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5
-b(an)m(tage)27 b(of)e(these)0 2513 y(new)30 b(facilities.)0
-2812 y Fw(G.16)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.0)0
-3036 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 3149 y(v)m(ersions)31
-b(V2.0)g(and)f(V3.0:)111 3417 y(1.)46 b(Man)m(y)30 b(c)m(hanges)f(ha)m
-(v)m(e)h(b)s(een)e(made)h(in)f(the)h(FitsChan)f(class)i(in)e(order)g
-(to)h(bring)f(the)h(FITS-W)m(CS)f(en-)227 3530 y(co)s(ding)21
-b(in)m(to)g(line)f(with)g(the)h(curren)m(t)f(v)m(ersions)h(of)f(the)g
-(FITS-W)m(CS)g(pap)s(ers)f(\(see)j(h)m(ttp://www.atnf.csiro.au/p)s
-(eople/mcalabre/W)m(CS/\):)336 3747 y Fu(\017)46 b FF(The)34
-b(rotation)h(and)e(scaling)j(of)e(the)g(pixel)g(axes)h(ma)m(y)f(no)m(w)
-g(b)s(e)g(sp)s(eci\014ed)f(using)h(either)g(CD)p Fx(i)p
-Fq(_)p Fx(j)427 3859 y FF(k)m(eyw)m(ords,)k(or)e(PC)p
-Fx(i)p Fq(_)p Fx(j)48 b FF(and)35 b(CDEL)-8 b(Tj)35 b(k)m(eyw)m(ords.)
-58 b(A)36 b(new)f(attribute)i(called)g(CDMatrix)g(has)427
-3972 y(b)s(een)c(added)g(to)i(the)f(FitsChan)f(class)i(to)f(indicate)h
-(whic)m(h)e(set)i(of)e(k)m(eyw)m(ords)h(should)f(b)s(e)g(used)427
-4085 y(when)d(writing)g(a)h(F)-8 b(rameSet)31 b(to)g(a)g(FITS-W)m(CS)f
-(header.)336 4233 y Fu(\017)46 b FF(The)33 b(FITS-W)m(CS)f(enco)s(ding)
-h(no)m(w)f(supp)s(orts)f(most)i(of)g(the)g(con)m(v)m(en)m(tions)i
-(describ)s(ed)c(in)i(FITS-)427 4346 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)
-g(for)g(the)i(description)f(of)g(sp)s(ectral)g(co)s(ordinates.)39
-b(The)21 b(exceptions)i(are)g(that)f(the)427 4459 y(SSYSOBS)30
-b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g(and)g(W)m(CS)g(stored)h
-(in)f(tabular)h(form)f(\(as)h(indicated)427 4572 y(b)m(y)f(the)f(\\-T)
--8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f(not)h(supp)s(orted.)336
-4720 y Fu(\017)46 b FF(User-sp)s(eci\014ed)34 b(\014ducial)h(p)s(oin)m
-(ts)f(for)g(W)m(CS)h(pro)5 b(jections)35 b(are)f(no)m(w)h(supp)s(orted)
-d(b)m(y)j(FitsChans)427 4833 y(whic)m(h)29 b(use)f(FITS-W)m(CS)g(enco)s
-(ding.)40 b(This)28 b(use)g(k)m(eyw)m(ords)h(PVi)p Fq(_)p
-FF(0,)g(PVi)p Fq(_)p FF(1)g(and)f(PVi)p Fq(_)p FF(2)h(for)f(the)427
-4946 y(longitude)j(axis.)336 5093 y Fu(\017)46 b FF(When)37
-b(reading)g(a)h(FITS-W)m(CS)e(header,)j(a)e(FitsChan)g(will)h(no)m(w)f
-(use)f(k)m(eyw)m(ords)i(PVi)p Fq(_)p FF(3)f(and)427 5206
-y(PVi)p Fq(_)p FF(4)d(for)f(the)g(longitude)g(axis)h(\(if)f(presen)m
-(t\))h(in)f(preference)g(to)g(an)m(y)h(LONPOLE)e(and)g(LA)-8
-b(T-)427 5319 y(POLE)38 b(k)m(eyw)m(ords)h(whic)m(h)g(ma)m(y)g(b)s(e)f
-(presen)m(t.)66 b(When)38 b(writing)h(a)g(FITS-W)m(CS)f(header,)j(b)s
-(oth)427 5432 y(forms)30 b(are)h(written)f(out.)336 5580
-y Fu(\017)46 b FF(The)31 b(n)m(um)m(b)s(er)g(of)g(W)m(CS)h(axes)g(is)f
-(stored)h(in)f(the)h(W)m(CSAXES)f(k)m(eyw)m(ord)h(if)g(its)g(v)-5
-b(alue)32 b(w)m(ould)f(b)s(e)427 5693 y(di\013eren)m(t)g(to)g(that)g
-(of)g(the)f(NAXIS)g(k)m(eyw)m(ord.)p eop end
-%%Page: 554 564
-TeXDict begin 554 563 bop 0 52 a FF(554)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)336 351 y Fu(\017)46
-b FF(Helio-ecliptic)j(co)s(ordinates)c(are)g(no)m(w)g(supp)s(orted)e(b)
-m(y)h(FitsChans)h(whic)m(h)f(use)h(FITS-W)m(CS)427 464
-y(enco)s(ding.)h(This)31 b(uses)h(CTYPE)f(co)s(des)h(\\HLON")h(and)e
-(\\HLA)-8 b(T".)33 b(The)f(resulting)g(SkyF)-8 b(rame)427
-577 y(will)31 b(ha)m(v)m(e)g(a)f(System)g(v)-5 b(alue)30
-b(of)h(\\HELIOECLIPTIC",)d(and)i(all)g(the)h(usual)e(facilities,)k(suc)
-m(h)c(as)427 690 y(con)m(v)m(ersion)j(to)f(other)g(celestial)i
-(systems,)d(are)h(a)m(v)-5 b(ailable.)336 826 y Fu(\017)46
-b FF(The)33 b(FITS-W)m(CS)f(enco)s(ding)h(no)m(w)f(supp)s(orts)f(most)i
-(of)g(the)g(con)m(v)m(en)m(tions)i(describ)s(ed)c(in)i(FITS-)427
-939 y(W)m(CS)22 b(pap)s(er)f(I)s(I)s(I)g(for)g(the)i(description)f(of)g
-(sp)s(ectral)g(co)s(ordinates.)39 b(The)21 b(exceptions)i(are)g(that)f
-(the)427 1052 y(SSYSOBS)30 b(k)m(eyw)m(ord)i(is)g(not)f(supp)s(orted,)g
-(and)g(W)m(CS)g(stored)h(in)f(tabular)h(form)f(\(as)h(indicated)427
-1165 y(b)m(y)f(the)f(\\-T)-8 b(AB")32 b(algorithm)g(co)s(de\))f(is)f
-(not)h(supp)s(orted.)336 1300 y Fu(\017)46 b FF(When)29
-b(reading)g(a)g(FITS-W)m(CS)g(header,)g(a)h(FitsChan)f(will)g(no)m(w)g
-(ignore)h(an)m(y)f(distortion)g(co)s(des)427 1413 y(whic)m(h)24
-b(are)h(presen)m(t)g(in)f(CTYPE)f(k)m(eyw)m(ords.)40
-b(Here,)26 b(a)f(\\distortion)g(co)s(de")g(is)g(the)f(\014nal)g(group)g
-(of)427 1526 y(four)j(c)m(haracters)i(in)e(a)h(CTYPE)e(v)-5
-b(alue)28 b(of)g(the)f(form)g(\\xxxx-yyy-zzz",)k(as)d(describ)s(ed)e
-(in)h(FITS-)427 1639 y(W)m(CS)21 b(pap)s(er)f(IV.)h(The)f(exception)i
-(to)g(this)f(is)g(that)g(the)g(\\-SIP")g(distortion)h(co)s(de)f(\(as)g
-(used)g(b)m(y)f(the)427 1752 y(SIR)-8 b(TF)20 b(pro)5
-b(ject)21 b(-)f(see)41 b(h)m(ttp://sirtf.caltec)m(h.edu/SSC/do)s(cumen)
-m(ts/W)m(CSk)m(eyw)m(ords)p Fq(_)p FF(v1.3.p)s(df)7 b(\))427
-1865 y(is)31 b(in)m(terpreted)h(correctly)g(and)f(results)g(in)g(a)g(P)
-m(olyMap)i(b)s(eing)d(used)h(to)h(represen)m(t)f(the)g(distor-)427
-1978 y(tion)j(in)e(the)h(resulting)g(F)-8 b(rameSet.)49
-b(Note,)35 b(\\-SIP")e(distortion)g(co)s(des)g(can)g(only)g(b)s(e)f
-(read,)h(not)427 2091 y(written.)41 b(A)29 b(F)-8 b(rameSet)31
-b(whic)m(h)e(uses)g(a)h(P)m(olyMap)h(will)e(not)h(in)f(general)i(b)s(e)
-d(able)i(to)h(b)s(e)d(written)427 2204 y(out)38 b(to)h(a)f(FitsChan)g
-(using)g(an)m(y)g(foreign)g(enco)s(ding)g(\(although)h(NA)-8
-b(TIVE)38 b(enco)s(ding)g(can)g(of)427 2317 y(course)31
-b(b)s(e)f(used\).)336 2452 y Fu(\017)46 b FF(The)35 b(W)-8
-b(arnings)35 b(attribute)g(of)g(the)g(FitsChan)g(class)g(no)m(w)g
-(accepts)h(v)-5 b(alues)35 b(\\BadV)-8 b(al")37 b(\(whic)m(h)427
-2565 y(giv)m(es)k(w)m(arnings)e(ab)s(out)f(con)m(v)m(ersion)j(errors)e
-(when)f(reading)h(FITS)f(k)m(eyw)m(ord)i(v)-5 b(alues\),)42
-b(\\Dis-)427 2678 y(tortion")37 b(\(whic)m(h)f(giv)m(es)h(w)m(arnings)f
-(ab)s(out)f(unsupp)s(orted)e(distortion)j(co)s(des)g(within)f(CTYPE)427
-2791 y(v)-5 b(alues\),)31 b(and)e(\\BadMat")j(\(whic)m(h)e(giv)m(es)h
-(a)f(w)m(arning)g(if)f(the)h(rotation/scaling)j(matrix)d(cannot)427
-2904 y(b)s(e)g(in)m(v)m(erted\).)336 3040 y Fu(\017)46
-b FF(When)f(writing)g(a)g(F)-8 b(rameSet)46 b(to)g(a)f(FitsChan)g(whic)
-m(h)g(uses)f(a)i(non-Nativ)m(e)g(enco)s(ding,)j(the)427
-3153 y(commen)m(t)40 b(asso)s(ciated)g(with)e(an)m(y)h(card)f(already)i
-(in)e(the)h(FitsChan)f(will)h(b)s(e)f(retained)h(if)f(the)427
-3266 y(k)m(eyw)m(ord)23 b(v)-5 b(alue)22 b(b)s(eing)f(written)h(is)g
-(the)g(same)g(as)h(the)f(k)m(eyw)m(ord)g(v)-5 b(alue)22
-b(already)h(in)e(the)h(FitsChan.)336 3402 y Fu(\017)46
-b FF(A)26 b(F)-8 b(rameSet)26 b(whic)m(h)f(uses)g(the)g(non-FITS)f(pro)
-5 b(jection)26 b(t)m(yp)s(e)g(AST)p Fq(__)p FF(TPN)d(\(a)j(T)-8
-b(AN)26 b(pro)5 b(jection)427 3515 y(with)36 b(p)s(olynomial)f
-(distortion)h(terms\))g(can)g(no)m(w)g(b)s(e)f(written)g(to)h(a)g
-(FitsChan)g(if)f(the)h(Enco)s(d-)427 3627 y(ing)42 b(attribute)g(is)f
-(set)h(to)g(FITS-W)m(CS.)f(The)f(standard)h(\\-T)-8 b(AN")42
-b(co)s(de)g(is)f(used)g(within)f(the)427 3740 y(CTYPE)34
-b(v)-5 b(alues,)35 b(and)f(the)g(distortion)h(co)s(e\016cien)m(ts)h
-(are)e(enco)s(ded)g(in)g(k)m(eyw)m(ords)g(of)h(the)f(form)427
-3853 y(\\)g(QVi)p Fq(_)p FF(ma",)g(whic)m(h)f(are)g(directly)g
-(analogous)i(to)e(the)h(standard)e(\\PVi)p Fq(_)p FF(ma")i(pro)5
-b(jection)33 b(pa-)427 3966 y(rameter)i(k)m(eyw)m(ords.)53
-b(Th)m(us)33 b(a)h(FITS)g(reader)g(whic)m(h)g(do)s(es)g(not)g
-(recognise)i(the)e(QV)g(k)m(eyw)m(ords)427 4079 y(will)d(still)g(b)s(e)
-f(able)h(to)g(read)f(the)h(header,)f(but)g(the)h(distortion)f(will)h(b)
-s(e)f(ignored.)336 4215 y Fu(\017)46 b FF(The)30 b(default)g(v)-5
-b(alue)31 b(for)f(DefB1950)i(attribute)f(no)m(w)f(dep)s(ends)f(on)h
-(the)g(v)-5 b(alue)30 b(of)h(the)f(Enco)s(ding)427 4328
-y(attribute.)336 4464 y Fu(\017)46 b FF(A)d(new)e(app)s(endix)g(has)h
-(b)s(een)g(added)f(to)i(SUN/210)h(and)e(SUN/211)i(giving)f(details)g
-(of)f(the)427 4577 y(implemen)m(tation)36 b(pro)m(vided)e(b)m(y)g(the)g
-(FitsChan)g(class)h(of)f(the)g(con)m(v)m(en)m(tions)i(con)m(tained)g
-(in)d(the)427 4690 y(\014rst)d(four)g(FITS-W)m(CS)g(pap)s(ers.)111
-4887 y(2.)46 b(The)37 b(SkyF)-8 b(rame)38 b(class)h(no)m(w)e(supp)s
-(orts)f(t)m(w)m(o)j(new)e(co)s(ordinate)i(systems)e(\\ICRS")g(and)g
-(\\HELIOE-)227 5000 y(CLIPTIC".)e(The)h(default)g(for)g(the)g(System)g
-(attribute)h(for)f(SkyF)-8 b(rames)36 b(has)g(b)s(een)f(c)m(hanged)i
-(from)227 5112 y(\\FK5")32 b(to)f(\\ICRS".)111 5290 y(3.)46
-b(The)31 b(astRate)i(function)d(has)h(b)s(een)f(added)h(whic)m(h)g
-(allo)m(ws)h(an)f(estimate)i(to)f(b)s(e)e(made)h(of)g(the)g(rate)h(of)
-227 5403 y(c)m(hange)g(of)e(a)h(Mapping)f(output)g(with)g(resp)s(ect)h
-(to)g(one)g(of)f(the)h(Mapping)f(inputs.)111 5580 y(4.)46
-b(All)38 b(attribute)f(names)f(for)h(F)-8 b(rames)37
-b(of)g(an)m(y)g(class)g(ma)m(y)g(no)m(w)g(include)f(an)h(optional)h
-(axis)f(sp)s(eci\014er.)227 5693 y(This)25 b(includes)f(those)i
-(attributes)f(whic)m(h)g(describ)s(e)f(a)i(prop)s(ert)m(y)e(of)h(the)h
-(whole)f(F)-8 b(rame.)40 b(F)-8 b(or)26 b(instance,)p
-eop end
-%%Page: 555 565
-TeXDict begin 555 564 bop 0 52 a Fy(G.17)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.1)2249 b FF(555)227 351
-y(the)39 b(Domain)h(attribute)g(ma)m(y)f(no)m(w)g(b)s(e)f(sp)s
-(eci\014ed)h(as)g(\\Domain\(1\)")i(in)e(addition)g(to)h(the)f(simpler)
-227 464 y(\\Domain".)61 b(In)35 b(cases)i(suc)m(h)f(as)h(this,)h(where)
-e(the)g(attribute)h(describ)s(es)f(a)h(prop)s(ert)m(y)e(of)i(the)f
-(whole)227 577 y(F)-8 b(rame,)31 b(axis)e(sp)s(eci\014ers)g(will)g
-(usually)g(b)s(e)f(ignored.)41 b(The)28 b(exception)i(is)f(that)h(a)f
-(CmpF)-8 b(rame)29 b(will)h(use)227 690 y(the)e(presence)g(of)f(an)h
-(axis)g(sp)s(eci\014er)f(to)h(indicate)h(that)f(the)g(attribute)g(name)
-f(relates)i(to)g(the)e(primary)227 803 y(F)-8 b(rame)32
-b(con)m(taining)f(the)g(sp)s(eci\014ed)f(axis,)h(rather)f(than)g(to)h
-(the)g(CmpF)-8 b(rame)30 b(as)h(a)f(whole.)111 992 y(5.)46
-b(A)35 b(new)f(sub)s(class)g(of)h(Mapping,)h(the)f(P)m(olyMap,)i(has)e
-(b)s(een)f(added)g(whic)m(h)g(p)s(erforms)f(a)i(general)h(N-)227
-1105 y(dimensional)31 b(p)s(olynomial)f(mapping.)111
-1293 y(6.)46 b(A)37 b(new)g(sub)s(class)f(of)i(Mapping,)g(the)g
-(GrismMap,)h(has)e(b)s(een)f(added)g(whic)m(h)h(mo)s(dels)g(the)g(sp)s
-(ectral)227 1406 y(disp)s(ersion)29 b(pro)s(duced)g(b)m(y)h(a)h
-(grating,)h(prism)d(or)h(grism.)111 1595 y(7.)46 b(A)38
-b(new)f(sub)s(class)g(of)h(Mapping,)i(the)e(ShiftMap,)h(has)f(b)s(een)f
-(added)g(whic)m(h)g(adds)g(constan)m(t)i(v)-5 b(alues)227
-1708 y(on)m(to)32 b(all)f(co)s(ordinates)g(\(this)g(is)f(equiv)-5
-b(alen)m(t)32 b(to)f(a)g(WinMap)g(with)f(unit)g(scaling)h(on)f(all)i
-(axes\).)111 1897 y(8.)46 b(Minor)32 b(bugs)f(ha)m(v)m(e)i(b)s(een)e
-(\014xed)g(within)g(the)h(Plot)h(class)f(to)h(do)e(with)h(the)f(c)m
-(hoice)j(and)d(placemen)m(t)i(of)227 2010 y(n)m(umerical)e(axis)g(lab)s
-(els.)111 2198 y(9.)46 b(The)33 b(SphMap)g(class)h(has)f(a)h(new)g
-(attribute)g(called)h(P)m(olarLong)g(whic)m(h)e(giv)m(es)i(the)f
-(longitude)g(v)-5 b(alue)227 2311 y(to)31 b(b)s(e)f(returned)f(when)g
-(a)i(Cartesian)f(p)s(osition)h(corresp)s(onding)e(to)i(either)f(the)h
-(north)e(or)i(south)e(p)s(ole)227 2424 y(is)i(transformed)e(in)m(to)j
-(spherical)e(co)s(ordinates.)66 2613 y(10.)46 b(The)33
-b(WcsMap)i(class)f(no)m(w)g(assigns)g(a)g(longitude)g(of)g(zero)g(to)h
-(output)e(celestial)j(co)s(ordinates)f(whic)m(h)227 2726
-y(ha)m(v)m(e)d(a)f(latitude)g(of)g(plus)e(or)h(min)m(us)g(90)h
-(degrees.)66 2915 y(11.)46 b(The)31 b(NatLat)h(and)f(NatLon)g
-(attributes)h(of)f(the)g(WcsMap)h(class)g(ha)m(v)m(e)g(b)s(een)f(c)m
-(hanged)g(so)h(that)f(they)227 3027 y(no)m(w)g(return)f(the)g(\014xed)h
-(nativ)m(e)h(co)s(ordinates)f(of)g(the)g(pro)5 b(jection)31
-b(reference)g(p)s(oin)m(t,)g(rather)g(than)f(the)227
-3140 y(nativ)m(e)i(co)s(ordinates)f(of)g(the)f(user-de\014ned)f
-(\014ducial)h(p)s(oin)m(t.)66 3329 y(12.)46 b(Notation)34
-b(has)d(b)s(een)g(c)m(hanged)h(in)f(b)s(oth)f(the)i(WcsMap)g(and)f
-(FitsChan)h(classes)g(to)g(re\015ect)g(the)g(con-)227
-3442 y(v)m(en)m(tion)39 b(used)d(in)h(the)h(FITS-W)m(CS)e(pap)s(ers)g
-(that)i(index)f(\\i")h(refers)f(to)h(a)g(w)m(orld)f(co)s(ordinate)h
-(axis,)227 3555 y(and)30 b(index)g(\\j")h(refers)f(to)h(a)g(pixel)g
-(axis.)66 3744 y(13.)46 b(Changes)c(ha)m(v)m(e)h(b)s(een)e(made)h(to)h
-(sev)m(eral)g(Mapping)f(classes)h(in)e(order)h(to)g(allo)m(w)i(the)e
-(astSimplify)227 3857 y(function)30 b(to)h(mak)m(e)h(simpli\014cations)
-f(in)f(a)h(CmpMap)e(whic)m(h)h(previously)g(w)m(ere)h(not)g(p)s
-(ossible.)66 4045 y(14.)46 b(The)40 b(SlaMap)h(class)g(has)g(b)s(een)e
-(extended)i(b)m(y)f(the)h(addition)g(of)f(con)m(v)m(ersions)i(b)s(et)m
-(w)m(een)f(FK5)g(and)227 4158 y(ICRS)29 b(co)s(ordinates,)j(and)e(b)s
-(et)m(w)m(een)h(FK5)f(and)g(helio-ecliptic)j(co)s(ordinates.)66
-4347 y(15.)46 b(The)36 b(Sp)s(ecMap)f(class)i(has)e(b)s(een)g(c)m
-(hanged)i(to)f(use)g(the)g(equation)h(for)e(the)h(refractiv)m(e)i
-(index)d(of)h(air)227 4460 y(as)42 b(giv)m(en)g(in)f(the)g(curren)m(t)g
-(v)m(ersion)g(of)h(FITS-W)m(CS)e(pap)s(er)h(I)s(I)s(I.)e(Also,)45
-b(the)c(forw)m(ard)g(and)g(in)m(v)m(erse)227 4573 y(transformations)33
-b(b)s(et)m(w)m(een)h(frequency)e(and)g(air-w)m(a)m(v)m(elength)k(ha)m
-(v)m(e)e(b)s(een)e(made)h(more)g(compatible)227 4686
-y(b)m(y)e(using)e(an)i(iterativ)m(e)i(pro)s(cedure)c(to)i(calculate)i
-(the)d(in)m(v)m(erse.)0 4981 y Fw(G.17)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V3.1)0 5203 y FF(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-5316 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.0)g(and)f(V3.1)i(\(the)f
-(curren)m(t)f(v)m(ersion\):)111 5580 y(1.)46 b(Addition)30
-b(of)g(a)g(new)f(class)h(called)h(XmlChan)e(-)h(a)g(Channel)e(whic)m(h)
-i(reads)f(and)g(writes)h(AST)f(ob)5 b(jects)227 5693
-y(in)30 b(the)h(form)f(of)g(XML.)p eop end
-%%Page: 556 566
-TeXDict begin 556 565 bop 0 52 a FF(556)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(2.)46
-b(A)30 b(bug)f(has)g(b)s(een)g(\014xed)g(in)g(the)g(Plot)i(class)f
-(whic)m(h)f(could)h(cause)g(incorrect)g(graphical)h(attributes)f(to)227
-464 y(b)s(e)35 b(used)g(for)g(v)-5 b(arious)36 b(parts)f(of)h(the)f
-(plot)h(if)g(either)g(axis)g(has)f(no)h(tic)m(k)h(marks)e(\(i.e.)57
-b(if)36 b(b)s(oth)e(ma)5 b(jor)227 577 y(and)30 b(minor)g(tic)m(k)i
-(marks)e(ha)m(v)m(e)h(zero)g(length\).)0 810 y(Programs)25
-b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f(need)g(to)h(b)s(e)f
-(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5 b(an)m(tage)27
-b(of)e(these)0 923 y(new)30 b(facilities.)0 1206 y Fw(G.18)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.2)0 1420 y
-FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1533 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.1)g(and)f
-(V3.2:)111 1766 y(1.)46 b(A)38 b(new)f(function)g(astPutCards)g(has)g
-(b)s(een)g(added)f(to)j(the)e(FitsChan)h(class.)62 b(This)37
-b(allo)m(ws)i(m)m(ulti-)227 1879 y(ple)f(concatenated)h(header)f(cards)
-f(to)h(b)s(e)f(stored)h(in)f(a)h(FitsChan)f(in)g(a)h(single)g(call,)j
-(pro)m(viding)d(an)227 1992 y(alternativ)m(e)33 b(to)e(the)g(existing)g
-(astPutCards)f(function.)111 2172 y(2.)46 b(Some)33 b(sign\014can)m(t)h
-(c)m(hanges)g(ha)m(v)m(e)g(b)s(een)f(made)g(to)h(the)f
-(simpli\014cation)h(of)f(Mappings)g(whic)m(h)f(should)227
-2285 y(resultin)24 b(a)h(greater)h(degree)f(of)g(simplication)g(taking)
-h(place.Some)f(bugs)f(ha)m(v)m(e)i(also)f(b)s(een)f(\014xed)g(whic)m(h)
-227 2398 y(could)d(result)f(in)h(an)f(in\014nite)h(lo)s(op)f(b)s(eing)h
-(en)m(tered)g(when)e(attempting)j(to)g(simplify)e(certain)h(Mappings.)
-111 2578 y(3.)46 b(The)40 b(FitsChan)h(class)g(no)m(w)g(translates)g
-(the)g(sp)s(ectral)g(algorithm)h(co)s(des)e(\\-W)-10
-b(A)g(V",)43 b(\\-FR)m(Q")f(and)227 2691 y(\\-VEL")d(\(sp)s(eci\014ed)e
-(in)g(early)h(drafts)f(of)g(pap)s(er)f(I)s(I)s(I\))h(to)h(the)f
-(corresp)s(onding)g(\\-X2P")i(form)d(when)227 2804 y(reading)31
-b(a)g(sp)s(ectral)f(axis)h(description)f(from)g(a)h(set)g(of)g(FITS)e
-(header)h(cards.)111 2985 y(4.)46 b(A)35 b(bug)f(has)g(b)s(een)g
-(\014xed)f(in)h(the)h(FitsChan)f(class)h(whic)m(h)g(could)f(cause)h(k)m
-(eyw)m(ords)g(asso)s(ciated)h(with)227 3098 y(alternate)c(axis)f
-(descriptions)f(to)i(b)s(e)d(mis-in)m(terpreted.)111
-3278 y(5.)46 b(The)33 b(Plot)h(class)f(no)m(w)g(pro)m(vides)g
-(facilities)i(for)e(mo)s(difying)g(the)g(app)s(earance)g(of)g
-(sub-strings)f(within)227 3391 y(text)24 b(strings)f(suc)m(h)g(as)g
-(axis)g(lab)s(els,)i(titles,)h Fx(etc)p FF(,)e(b)m(y)f(pro)s(ducing)f
-(sup)s(er-scripts,)h(sub-scripts,)h(c)m(hanging)227 3504
-y(the)31 b(fon)m(t)g(colour,)g(size,)g Fx(etc)p FF(.)41
-b(See)31 b(attribute)g(Escap)s(e.)111 3684 y(6.)46 b(The)36
-b(default)g(v)-5 b(alue)36 b(of)g(the)h(T)-8 b(ol)36
-b(attribute)h(of)f(the)g(Plot)h(class)g(has)e(b)s(een)h(c)m(hanged)g
-(from)g(0.001)i(to)227 3797 y(0.01.)47 b(This)31 b(should)g(not)h
-(usually)f(cause)i(an)m(y)f(signi\014can)m(t)h(visible)f(c)m(hange)h
-(to)f(the)g(plot,)h(but)e(should)227 3910 y(mak)m(e)i(the)f(plotting)h
-(faster.)46 b(Y)-8 b(ou)33 b(ma)m(y)f(need)g(to)h(set)f(a)g(lo)m(w)m
-(er)i(v)-5 b(alue)32 b(for)g(T)-8 b(ol)32 b(if)g(y)m(ou)g(are)h(pro)s
-(ducing)227 4023 y(a)e(particularly)g(large)g(plot.)111
-4203 y(7.)46 b(The)30 b(algorithm)h(for)e(\014nding)g(the)h(default)g
-(v)-5 b(alue)31 b(for)e(the)h(Gap)h(attribute)f(has)g(b)s(een)f(c)m
-(hanged.)41 b(This)227 4316 y(attribute)34 b(sp)s(eci\014es)f(the)g
-(gap)h(b)s(et)m(w)m(een)g(ma)5 b(jor)33 b(axis)g(v)-5
-b(alues)34 b(in)f(an)g(annotated)h(grid)f(dra)m(wn)f(b)m(y)h(the)227
-4429 y(Plot)26 b(class.)40 b(The)25 b(c)m(hange)h(in)f(algorithm)h(ma)m
-(y)f(cause)h(the)f(default)h(v)-5 b(alue)25 b(to)h(b)s(e)f(di\013eren)m
-(t)g(to)h(previous)227 4542 y(v)m(ersions)31 b(in)f(cirtain)h
-(circumstances.)111 4722 y(8.)46 b(Some)39 b(bugs)f(ha)m(v)m(e)i(b)s
-(een)e(\014xed)g(in)g(the)h(Plot)h(class)f(whic)m(h)g(could)g(cause)g
-(the)g(system)g(to)g(hang)g(for)227 4835 y(a)k(long)g(time)g(while)g
-(dra)m(wing)f(certain)i(all-sky)f(grids)f(\(notable)i(some)f(of)f(the)h
-(FITS)f(Quad-cub)s(e)227 4948 y(pro)5 b(jections\).)111
-5128 y(9.)46 b(The)33 b(SkyAxis)g(class)i(has)e(extended)g(the)h(F)-8
-b(ormat)35 b(attribute)f(b)m(y)f(the)h(addition)g(of)f(the)h(\\g")h
-(option.)227 5241 y(this)k(option)g(is)f(similar)h(to)g(the)g(older)f
-(\\l")i(option)f(in)f(that)h(it)g(results)f(in)g(c)m(haracters)i
-(\(\\h",)i(\\m",)227 5354 y(\\s",)34 b Fx(etc)5 b FF(\))32
-b(b)s(eing)g(used)f(as)h(delimiters)h(b)s(et)m(w)m(een)f(the)h
-(sexagesimal)h(\014elds)d(of)h(the)h(celestial)h(p)s(osition.)227
-5467 y(The)g(di\013erence)i(is)e(that)i(the)e(\\g")i(option)f(includes)
-g(graphics)f(escap)s(e)i(sequences)e(in)h(the)g(returned)227
-5580 y(formatted)27 b(string)e(whic)m(h)h(result)g(in)f(the)h(\014eld)g
-(delimiter)g(c)m(haracters)i(b)s(eing)d(dra)m(wn)g(as)h(sup)s
-(er-scripts)227 5693 y(when)k(plotted)h(as)f(n)m(umerical)h(axis)g(v)-5
-b(alues)31 b(b)m(y)f(a)h(Plot.)p eop end
-%%Page: 557 567
-TeXDict begin 557 566 bop 0 52 a Fy(G.19)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.3)2249 b FF(557)66 351 y(10.)46
-b(The)30 b(Plot)h(class)g(has)f(b)s(een)f(extended)h(to)h(include)f
-(facilities)i(for)e(pro)s(ducing)f(logarithmic)j(axes.)41
-b(See)227 464 y(attributes)31 b(LogPlot,)h(LogTic)m(ks,)g(LogGap)g(and)
-d(LogLab)s(el.)66 672 y(11.)46 b(New)35 b(functions)g(astGCap)g(and)g
-(astGScales)h(ha)m(v)m(e)g(b)s(een)f(added)f(to)h(the)g(in)m(terface)i
-(de\014ned)d(b)m(y)g(\014le)227 785 y Fq(grf.h)p FF(.)39
-b(The)26 b(ast)p Fq(_)p FF(link)i(command)f(has)g(b)s(een)g(mo)s
-(di\014ed)f(so)h(that)h(the)g Fq(-mygrf)d FF(switc)m(h)j(loads)g(dumm)m
-(y)227 898 y(v)m(ersions)34 b(of)f(the)g(new)g(grf)g(functions.)48
-b(This)32 b(means)h(that)h(applications)g(should)e(con)m(tin)m(ue)j(to)
-f(build)227 1011 y(without)23 b(an)m(y)f(c)m(hange.)40
-b(Ho)m(w)m(ev)m(er,)26 b(the)c(facilities)j(for)d(in)m(terpreting)h
-(escap)s(e)g(sequences)g(within)f(strings)227 1124 y(dra)m(wn)j(b)m(y)g
-(the)g(Plot)i(class)f(will)f(not)h(b)s(e)e(a)m(v)-5 b(ailable)28
-b(unless)d(the)g(new)g(grf)g(functions)g(are)h(implemen)m(ted.)227
-1237 y(If)c(y)m(ou)g(c)m(ho)s(ose)h(to)f(implemen)m(t)h(them,)h(y)m(ou)
-e(should)f(mo)s(dify)g(y)m(our)h(linking)g(pro)s(cedure)e(to)j(use)f
-(the)g Fq(-grf)227 1349 y FF(switc)m(h)34 b(in)e(place)i(of)f(the)h
-(older)f Fq(-mygrf)e FF(switc)m(h.)49 b(See)33 b(the)g(description)g
-(of)g(the)g(ast)p Fq(_)p FF(link)h(command)227 1462 y(for)g(details)h
-(of)f(the)g(new)g(switc)m(hes.)52 b(Also)35 b(note)f(that)h(the)f
-(astGQc)m(h)h(function,)g(whilst)f(included)f(in)227
-1575 y(v)m(erb+grf.h+)i(in)h(p)s(ervious)f(v)m(ersions)i(of)f(AST,)g(w)
-m(as)h(not)f(actually)i(called.)59 b(As)36 b(of)h(this)f(v)m(ersion)g
-(of)227 1688 y(AST,)c(calls)i(are)f(made)f(to)h(the)g(astGQc)m(h)h
-(function,)e(and)g(so)h(an)m(y)g(bugs)e(in)i(the)f(implemen)m(tation)i
-(of)227 1801 y(astGQc)m(h)e(ma)m(y)f(cause)g(spurious)d(b)s(eha)m
-(viour)i(when)g(plotting)h(text)h(strings.)66 2009 y(12.)46
-b(A)c(new)f('static')i(metho)s(d)e(called)h(astEscap)s(es)g(has)f(b)s
-(een)g(added)f(whic)m(h)h(is)h(used)e(to)i(con)m(trol)h(and)227
-2122 y(enquire)33 b(whether)g(astGetC)h(and)f(astF)-8
-b(ormat)35 b(will)e(strip)g(an)m(y)h(graphical)g(escap)s(e)f(sequences)
-h(whic)m(h)227 2235 y(ma)m(y)d(b)s(e)f(presen)m(t)g(out)h(of)g(the)f
-(returned)f(v)-5 b(alue.)66 2443 y(13.)46 b(New)35 b(attribute)g
-(XmlPre\014x)f(has)g(b)s(een)f(added)h(to)h(the)g(XmlChan)e(class.)54
-b(It)34 b(allo)m(ws)i(XML)e(written)227 2556 y(b)m(y)d(the)f(XmlChan)g
-(class)h(to)g(include)f(an)g(explicit)i(namespace)f(pre\014x)e(on)i
-(eac)m(h)g(elemen)m(t.)66 2763 y(14.)46 b(New)33 b(attribute)g(XmlF)-8
-b(ormat)34 b(has)e(b)s(een)g(added)f(to)i(the)g(XmlChan)f(class.)47
-b(It)33 b(sp)s(eci\014es)f(the)g(format)227 2876 y(in)e(whic)m(h)g(AST)
-g(ob)5 b(jects)31 b(should)f(b)s(e)f(written.)66 3084
-y(15.)46 b(A)26 b(new)f(class)h(of)f(Mapping,)i(the)e(T)-8
-b(ranMap,)27 b(has)e(b)s(een)f(in)m(tro)s(duced.)39 b(A)25
-b(T)-8 b(ranMap)25 b(tak)m(es)i(its)f(forw)m(ard)227
-3197 y(transformation)41 b(from)g(an)f(existing)i(Mapping,)h(and)d(its)
-h(in)m(v)m(erse)h(transformation)f(from)f(another)227
-3310 y(existing)32 b(Mapping.)66 3518 y(16.)46 b(A)39
-b(bug)f(has)h(b)s(een)f(\014xed)g(in)h(WcsMap)g(whic)m(h)g(caused)g
-(error)f(rep)s(orts)g(to)i(include)e(erroneous)h(axis)227
-3631 y(n)m(um)m(b)s(ers)29 b(when)h(referring)f(to)j(missing)e
-(parameter)h(v)-5 b(alues.)0 3958 y Fw(G.19)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V3.3)0 4194 y FF(The)g(follo)m(wing)h
-(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f
-(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g(library)0
-4307 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.2)g(and)f(V3.3:)111
-4600 y(1.)46 b(Options)37 b(ha)m(v)m(e)i(b)s(een)e(added)g(to)h(the)g
-(SkyF)-8 b(rame)38 b(class)g(whic)m(h)g(allo)m(ws)h(the)e(origin)h(of)g
-(celestial)i(co-)227 4713 y(ordinates)c(to)g(b)s(e)f(mo)m(v)m(ed)i(to)f
-(an)m(y)f(sp)s(eci\014ed)g(p)s(oin)m(t.)56 b(See)36 b(the)g(new)f
-(attributes)h(SkyRef,)g(SkyRefIs,)227 4826 y(SkyRefP)30
-b(and)g(AlignO\013set.)111 5034 y(2.)46 b(An)33 b(option)g(has)g(b)s
-(een)f(added)g(to)i(the)f(FitsChan)f(class)i(whic)m(h)f(allo)m(ws)h
-(extra)g(F)-8 b(rames)33 b(represen)m(ting)227 5146 y(cartesian)i(pro)5
-b(jection)34 b(plane)f(co)s(ordinates)h(\(\\in)m(termediate)i(w)m(orld)
-d(co)s(ordinates")h(in)f(the)h(parlance)227 5259 y(of)29
-b(FITS-W)m(CS\))f(to)i(b)s(e)d(created)j(when)d(reading)i(W)m(CS)f
-(information)h(from)f(a)h(foreign)g(FITS)e(header.)227
-5372 y(This)j(option)h(is)f(con)m(trolled)i(b)m(y)e(a)h(new)f
-(attribute)h(called)h(Iw)m(c.)111 5580 y(3.)46 b(The)29
-b(FitsChan)f(class)i(whic)m(h)e(b)s(een)g(mo)s(di\014ed)g(to)h(in)m
-(terpret)g(FITS-W)m(CS)g(CAR)f(pro)5 b(jection)30 b(headers)227
-5693 y(correctly)i(if)e(the)h(longitude)g(reference)g(pixel)f
-(\(CRPIX\))h(is)f(v)m(ery)h(large.)p eop end
-%%Page: 558 568
-TeXDict begin 558 567 bop 0 52 a FF(558)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(4.)46
-b(The)35 b(FITS-AIPS++)e(enco)s(ding)j(in)e(the)i(FitsChan)f(class)h
-(no)m(w)f(recognised)h(sp)s(ectral)f(axes)h(if)f(they)227
-464 y(conform)42 b(to)h(the)g(AIPS)f(con)m(v)m(en)m(tion)i(in)e(whic)m
-(h)g(the)h(sp)s(ectral)f(axis)h(is)f(descirb)s(ed)f(b)m(y)i(a)f(CTYPE)
-227 577 y(k)m(eyw)m(ord)36 b(o)s(d)g(the)g(form)f("AAAA-BBB")k(where)c
-(\\AAAA")i(is)f(one)g(of)g(FREQ,)g(VELO)f(or)h(FELO,)227
-690 y(and)d(\\BBB")j(is)d(one)h(of)f(LSR,)g(LSD,)h(HEL)f(or)h(OBS.)f
-(Suc)m(h)g(sp)s(ectral)g(axes)h(can)g(b)s(e)f(b)s(oth)g(read)g(and)227
-803 y(written.)111 999 y(5.)46 b(The)24 b(FitsChan)g(class)h(no)m(w)g
-(has)f(a)h(FITS-AIPS++)d(enco)s(ding)j(whic)m(h)f(represen)m(ts)g(W)m
-(CS)g(information)227 1112 y(using)30 b(FITS)f(header)h(cards)g
-(recognised)h(b)m(y)f(the)g(AIPS++)f(pro)5 b(ject.)41
-b(Supp)s(ort)28 b(for)i(sp)s(ectral)h(axes)f(is)227 1225
-y(iden)m(tical)i(to)g(the)e(FITS-AIPS)f(enco)s(ding.)111
-1420 y(6.)46 b(The)39 b(organisation)i(of)f(the)g(AST)e(distribution)h
-(and)g(the)h(commands)f(for)g(building)f(it)i(ha)m(v)m(e)h(b)s(een)227
-1533 y(c)m(hanged.)h(Whereas)31 b(AST)f(used)f(to)j(b)s(e)d(built)i
-(and)e(installed)j(with)e Fq(./mk)46 b(build;)h(./mk)f(install)p
-FF(,)227 1646 y(it)36 b(no)m(w)e(builds)g(using)g(the)h(more)g
-(standard)f(idiom)h Fq(./configure;)44 b(make;)i(make)h(install)p
-FF(.)52 b(The)227 1759 y(installation)41 b(lo)s(cation)f(is)f(con)m
-(trolled)h(b)m(y)e(the)h Fq(--prefix)e FF(argumen)m(t)i(to)g
-(./con\014gure)g(\(as)g(is)g(usual)227 1872 y(for)30
-b(other)g(pac)m(k)-5 b(ages)32 b(whic)m(h)e(use)g(this)g(sc)m(heme\).)
-41 b(Note)32 b(that)e(the)h(INST)-8 b(ALL)29 b(en)m(vironmen)m(t)i(v)-5
-b(ariable)227 1985 y(no)m(w)28 b(has)g(a)g Fx(di\013er)-5
-b(ent)37 b FF(meaning)28 b(to)g(that)h(whic)m(h)e(it)h(had)g(b)s
-(efore,)g(and)f(it)h(should)f(generally)i(b)s(e)e Fx(unset)p
-FF(.)227 2098 y(Also,)32 b(there)e(is)h(no)f(need)g(to)h(set)g(the)g
-(SYSTEM)e(v)-5 b(ariable.)111 2294 y(7.)46 b(Shared)26
-b(libraries)g(are)h(no)m(w)g(installed)g(in)f(the)h(same)g(directory)g
-(as)g(the)g(static)h(libraries.)39 b(In)26 b(addition,)227
-2407 y(links)i(to)g(sharable)g(libraries)g(are)g(installed)h(with)e
-(names)h(whic)m(h)f(include)h(v)m(ersion)g(information,)h(and)227
-2520 y(\\libto)s(ol)22 b(libraries")f(are)f(also)i(installed)f(\(see)g
-(h)m(ttp://www.gn)m(u.org/soft)m(w)m(are/libto)s(ol/man)m(ual.h)m
-(tml\))q(.)111 2715 y(8.)46 b(The)22 b Fq(ast_dev)f FF(script)h(has)h
-(b)s(een)e(remo)m(v)m(ed.)39 b(Instead,)25 b(the)d(lo)s(cation)i(of)f
-(the)g(AST)f(include)g(\014les)g(should)227 2828 y(b)s(e)30
-b(sp)s(eci\014ed)g(using)g(the)g(-I)h(option)f(when)g(compiling.)0
-3135 y Fw(G.20)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.4)0
-3363 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 3476 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V3.3)g(and)f(V3.4:)111 3751 y(1.)46 b(The)26
-b(Mapping)h(class)g(has)g(a)g(new)f(metho)s(d)g(\(astLinearAppro)m(x\))
-i(whic)m(h)e(calculates)j(the)e(co-e\016cien)m(ts)227
-3863 y(of)k(a)g(linear)f(appro)m(ximation)i(to)f(a)g(Mapping.)111
-4059 y(2.)46 b(The)27 b(F)-8 b(ormat)29 b(attribute)g(for)e(simple)h(F)
--8 b(rames)28 b(and)f(SkyF)-8 b(rames)28 b(has)f(b)s(een)g(extended.)40
-b(It)28 b(has)f(alw)m(a)m(ys)227 4172 y(b)s(een)e(p)s(ossible,)h(in)f
-(b)s(oth)g(classes,)j(to)e(sp)s(ecify)f(a)h(precision)g(b)m(y)f
-(including)g(a)h(dot)f(in)h(the)f(F)-8 b(ormat)27 b(v)-5
-b(alue)227 4285 y(follo)m(w)m(ed)27 b(b)m(y)e(an)g(in)m(teger)i(\()p
-Fx(e.g.)39 b FF(\\)p Fq(dms.1)p FF(")24 b(for)h(a)h(SkyF)-8
-b(rame,)27 b(or)e(\\)p Fq(\045.10g)p FF(")g(for)g(a)g(simple)h(F)-8
-b(rame\).)40 b(The)227 4398 y(precision)31 b(can)g(no)m(w)g(also)g(b)s
-(e)f(sp)s(eci\014ed)g(using)g(an)h(asterisk)g(in)f(place)i(of)e(the)h
-(in)m(teger)h(\()p Fx(e.g.)41 b FF(\\)p Fq(dms.*)p FF(")227
-4511 y(or)36 b(\\)p Fq(\045.*g)p FF("\).)58 b(This)35
-b(causes)i(the)f(precision)g(to)h(b)s(e)e(deriv)m(ed)h(on)g(the)g
-(basis)g(of)g(the)g(Digits)i(attribute)227 4624 y(v)-5
-b(alue.)111 4820 y(3.)46 b(The)30 b(Plot)i(class)f(has)g(b)s(een)f(c)m
-(hanged)h(so)g(that)h(the)e(default)h(v)-5 b(alue)31
-b(used)f(for)h(the)g(Digits)h(attribute)f(is)227 4933
-y(c)m(hosen)f(to)h(b)s(e)e(the)g(smallest)i(v)-5 b(alue)30
-b(whic)m(h)f(results)h(in)f(no)h(pair)f(of)h(adjacen)m(t)g(lab)s(els)g
-(b)s(eing)f(iden)m(tical.)227 5046 y(F)-8 b(or)22 b(instance,)i(if)e
-(an)f(annotated)h(grid)f(is)g(b)s(eing)g(dra)m(wn)f(describing)h(a)h
-(SkyF)-8 b(rame,)24 b(and)d(the)g(F)-8 b(ormat\(1\))227
-5158 y(v)j(alue)30 b(is)e(set)i(to)f(\\)p Fq(hms.*g)p
-FF(")g(\(the)g(\\g")h(causes)f(\014eld)g(delimiters)g(to)h(b)s(e)e(dra)
-m(wn)g(as)h(sup)s(erscripts\),)f(and)227 5271 y(the)35
-b(Digits\(1\))i(v)-5 b(alue)36 b(is)e(unset,)i(then)e(the)h(seconds)g
-(\014eld)f(will)h(ha)m(v)m(e)h(a)f(n)m(um)m(b)s(er)e(of)i(decimal)h
-(places)227 5384 y(whic)m(h)30 b(results)h(in)f(no)g(pair)g(of)g(lab)s
-(els)h(b)s(eing)f(iden)m(tical.)111 5580 y(4.)46 b(Addition)34
-b(of)g(a)g(new)g(class)g(classed)h(DSBSp)s(ecF)-8 b(rame.)52
-b(This)33 b(is)h(a)g(sub-class)g(of)g(Sp)s(ecF)-8 b(rame)34
-b(whic)m(h)227 5693 y(can)d(b)s(e)f(used)f(to)i(describ)s(e)f(sp)s
-(ectral)h(axes)g(asso)s(ciated)h(with)e(dual)g(sideband)f(sp)s(ectral)i
-(data.)p eop end
-%%Page: 559 569
-TeXDict begin 559 568 bop 0 52 a Fy(G.21)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V3.5)2249 b FF(559)111 351
-y(5.)46 b(The)d(FitsChan)g(class)i(will)e(no)m(w)h(read)f(headers)g
-(whic)m(h)g(use)g(the)h(old)g(\\-GLS")g(pro)5 b(jection)44
-b(co)s(de,)227 464 y(con)m(v)m(erting)d(them)f(to)g(the)f(corresp)s
-(onding)f(mo)s(dern)g(\\-SFL")j(co)s(de,)h(pro)m(vided)c(that)i(the)g
-(celestial)227 577 y(axes)31 b(are)g(not)g(rotated.)111
-802 y(6.)46 b(The)36 b(FitsChan)f(class)i(has)f(a)g(new)f(Enco)s(ding,)
-i(\\FITS-CLASS",)e(whic)m(h)h(allo)m(ws)h(the)f(reading)g(and)227
-915 y(writing)21 b(of)f(FITS)g(headers)f(using)h(the)h(con)m(v)m(en)m
-(tions)h(of)e(the)h(CLASS)e(pac)m(k)-5 b(age)22 b(-)f(see)41
-b(h)m(ttp://www.iram.fr/IRAMFR/GILD)m(AS/do)s(c/h)m(tml/class-)227
-1028 y(h)m(tml/class.h)m(tml\).)0 1385 y Fw(G.21)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.5)0 1634 y
-FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g
-(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g(AST)g
-(library)0 1747 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V3.4)g(and)f
-(V3.5:)111 2066 y(1.)46 b(AST)29 b(no)m(w)g(pro)m(vides)h(facilities)i
-(for)d(represen)m(ting)g(regions)h(of)g(v)-5 b(arious)29
-b(shap)s(es)g(within)g(a)h(co)s(ordinate)227 2179 y(system.)43
-b(The)31 b(Region)g(class)h(pro)m(vides)f(general)h(facilities)h(whic)m
-(h)e(are)h(indep)s(enden)m(t)d(of)i(the)h(sp)s(eci\014c)227
-2292 y(shap)s(e)37 b(of)h(region)h(b)s(eing)e(used.)62
-b(V)-8 b(arious)39 b(sub-classes)f(of)g(Region)h(are)f(also)h(no)m(w)f
-(a)m(v)-5 b(ailable)40 b(whic)m(h)227 2404 y(pro)m(vide)25
-b(means)f(of)g(creating)h(Regions)g(of)g(sp)s(eci\014c)e(shap)s(e.)38
-b(F)-8 b(acilities)28 b(pro)m(vided)23 b(b)m(y)h(the)h(Region)g(class)
-227 2517 y(include)j(testing)h(p)s(oin)m(ts)f(to)h(see)f(if)g(they)h
-(are)f(inside)g(the)g(Region,)i(testing)f(t)m(w)m(o)g(Regions)g(for)f
-(o)m(v)m(erlap,)227 2630 y(transforming)i(Regions)h(from)f(one)h(co)s
-(ordinate)g(system)g(to)g(another)f Fx(etc)p FF(.)111
-2856 y(2.)46 b(A)31 b(new)f(class)h(of)g(1-dimensional)g(F)-8
-b(rame)32 b(called)g(FluxF)-8 b(rame)31 b(has)g(b)s(een)e(added)h(whic)
-m(h)g(can)h(b)s(e)f(used)227 2968 y(to)c(describ)s(e)e(v)-5
-b(arious)24 b(systems)h(for)f(describing)g(o)m(vserv)m(ed)i(v)-5
-b(alue)25 b(at)g(a)g(single)g(\014xed)f(sp)s(ectral)h(p)s(osition.)111
-3194 y(3.)46 b(A)33 b(new)f(class)h(of)f(2-dimensional)h(F)-8
-b(rame)34 b(called)f(Sp)s(ecFluxF)-8 b(rame)33 b(has)f(b)s(een)g(added)
-f(whic)m(h)h(can)h(b)s(e)227 3307 y(used)24 b(to)h(describ)s(e)f(a)h
-(2-d)g(frame)f(spanned)f(b)m(y)i(a)g(sp)s(ectral)g(p)s(osition)f(axis)h
-(and)f(and)g(an)g(observ)m(ed)h(v)-5 b(alue)227 3420
-y(axis.)111 3645 y(4.)46 b(A)c(new)f(class)h(of)g(Mapping)f(called)i
-(RateMap)f(has)g(b)s(een)e(added.)73 b(A)42 b(RateMap)h(encapsulates)f
-(a)227 3758 y(previously)32 b(created)h(Mapping.)44 b(The)31
-b(inputs)g(of)h(the)g(RateMap)h(corresp)s(ond)d(to)j(the)f(inputs)e(of)
-i(the)227 3871 y(encapsulated)i(Mapping.)48 b(All)33
-b(RateMaps)i(ha)m(v)m(e)f(just)e(a)h(single)h(output)e(whic)m(h)h
-(corresp)s(ond)f(to)h(the)227 3984 y(rate)24 b(of)g(c)m(hange)g(of)f(a)
-h(sp)s(eci\014ed)f(output)g(of)g(the)g(encapsulated)h(Mapping)f(with)g
-(resp)s(ect)h(to)g(a)f(sp)s(eci\014ed)227 4097 y(input.)111
-4322 y(5.)46 b(The)d(SkyF)-8 b(rame)45 b(class)f(no)m(w)g(supp)s(orts)e
-(a)i(v)-5 b(alue)44 b(of)g(\\J2000")i(for)d(System.)81
-b(This)43 b(system)h(is)g(an)227 4435 y(equatorial)29
-b(system)d(based)h(on)f(the)h(mean)g(dynamical)g(equator)g(and)f
-(equino)m(x)h(at)h(J2000,)h(and)d(di\013ers)227 4548
-y(sligh)m(tly)32 b(from)e(an)g(FK5\(J2000\))j(system.)111
-4773 y(6.)46 b(A)31 b(new)e(class)j(called)f(KeyMap)g(has)f(b)s(een)f
-(added.)40 b(A)31 b(KeyMap)f(can)h(b)s(e)f(used)f(to)i(store)g(a)g
-(collection)227 4886 y(of)d(v)m(ector)i(or)d(scalar)i(v)-5
-b(alues)28 b(or)g(Ob)5 b(jects,)29 b(indexed)e(b)m(y)h(a)g(c)m
-(haracter)h(string)f(rather)g(than)f(an)h(in)m(teger.)111
-5111 y(7.)46 b(The)37 b(parameter)h(list)g(for)f(the)g(astRate)i(metho)
-s(d)e(of)h(the)f(Mapping)g(class)h(has)f(b)s(een)g(mo)s(di\014ed.)60
-b(It)227 5224 y(no)29 b(longer)h(returns)e(a)h(second)g(deriv)-5
-b(ativ)m(e)31 b(estimate.)42 b(Existing)29 b(co)s(de)g(whic)m(h)g(uses)
-g(this)g(metho)s(d)f(will)227 5337 y(need)i(to)i(b)s(e)d(c)m(hanged.)
-111 5562 y(8.)46 b(Metho)s(ds)27 b(\(astSetFits<X>\))i(ha)m(v)m(e)f(b)s
-(een)e(added)g(to)i(the)f(FitsChan)f(class)i(to)f(allo)m(w)h(v)-5
-b(alues)27 b(for)g(named)227 5675 y(k)m(eyw)m(ords)k(to)g(b)s(e)f(c)m
-(hanged)h(or)f(added.)p eop end
-%%Page: 560 570
-TeXDict begin 560 569 bop 0 52 a FF(560)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.22)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.6)0 574 y FF(The)26
-b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m
-(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m
-(w)m(een)0 687 y(v)m(ersions)31 b(V3.5)g(and)f(V3.6:)111
-953 y(1.)46 b(If)29 b(the)h(F)-8 b(ormat)30 b(attribute)h(asso)s
-(ciated)f(with)f(an)h(axis)g(of)f(a)h(SkyF)-8 b(rame)30
-b(starts)f(with)h(a)f(p)s(ercen)m(t)h(c)m(har-)227 1066
-y(acter)41 b(\(\\)p Fq(\045)p FF("\),)j(then)39 b(axis)i(v)-5
-b(alues)40 b(are)g(no)m(w)g(formatted)g(and)f(unformatted)h(as)g(a)g
-(decimal)h(radians)227 1179 y(v)-5 b(alue,)31 b(using)f(the)h(F)-8
-b(ormat)32 b(syn)m(tax)e(of)h(a)g(simple)f(F)-8 b(rame.)111
-1369 y(2.)46 b(The)34 b(Plot)i(class)f(has)f(a)h(new)f(attribute)h
-(called)h(Clip)e(whic)m(h)g(con)m(trols)i(the)f(clipping)g(p)s
-(erformed)e(b)m(y)227 1482 y(AST)d(at)h(the)g(plot)f(b)s(oundary)-8
-b(.)111 1672 y(3.)46 b(The)31 b(k)m(eys)g(used)g(to)g(lab)s(el)h(comp)s
-(onen)m(ts)f(of)g(the)g(P)m(olyMap)h(structure)f(when)f(a)h(P)m(olyMap)
-h(is)f(written)227 1785 y(out)24 b(through)g(a)g(Channel)f(ha)m(v)m(e)i
-(b)s(een)e(c)m(hanged.)40 b(The)23 b(new)g(k)m(eys)i(are)f(shorter)g
-(than)f(the)h(old)h(k)m(eys)f(and)227 1898 y(so)j(can)f(written)h
-(succesfully)f(to)h(a)g(FitsChan.)39 b(The)26 b(new)g(P)m(olyMap)h
-(class)g(alw)m(a)m(ys)h(writes)f(new)e(st)m(yles)227
-2011 y(k)m(eys)30 b(but)f(can)g(read)g(either)h(old)f(or)g(new)g(st)m
-(yle)h(k)m(eys.)41 b(Consequen)m(tly)-8 b(,)31 b(P)m(olyMap)f(dumps)d
-(written)j(b)m(y)227 2124 y(this)h(v)m(ersion)f(of)h(AST)f(cannot)h(b)s
-(e)e(read)i(b)m(y)f(older)g(v)m(ersions)h(of)g(AST.)111
-2314 y(4.)46 b(A)36 b(mimimal)f(cut)h(do)m(wn)f(subset)f(of)i(the)f(C)g
-(v)m(ersion)h(of)g(SLALIB)e(is)i(no)m(w)f(included)g(with)g(the)g(AST)
-227 2427 y(distribution)c(and)g(built)h(as)g(part)f(of)h(building)f
-(AST.)g(This)g(means)h(that)g(it)g(is)g(no)g(longer)g(necessary)227
-2540 y(to)i(ha)m(v)m(e)h(SLALIB)d(installed)i(separately)h(at)f(y)m
-(our)f(site.)50 b(The)33 b(SLALIB)f(co)s(de)i(included)e(with)h(AST)227
-2652 y(is)e(distrubuted)d(under)h(the)h(GPL.)h(The)e(default)i(b)s(eha)
-m(viour)f(of)g(the)g(ast)p Fq(_)p FF(link)h(script)f(is)g(no)m(w)h(to)g
-(link)227 2765 y(with)41 b(this)g(in)m(ternal)h(slalib)f(subset.)73
-b(Ho)m(w)m(ev)m(er,)46 b(the)41 b(\\-csla")i(option)f(can)f(still)h(b)s
-(e)f(used)f(to)i(force)227 2878 y(linking)29 b(with)f(an)g(external)h
-(full)f(C)g(SLALIB)g(library)-8 b(.)40 b(A)29 b(new)f(option)g
-(\\-fsla")i(has)e(b)s(een)g(in)m(tro)s(duced)227 2991
-y(whic)m(h)i(forces)h(linking)g(with)f(the)g(external)i(full)e(F)-8
-b(ortran)31 b(SLALIB)f(library)-8 b(.)0 3288 y Fw(G.23)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V3.7)0 3512 y
-FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 3625 y(v)m(ersions)31 b(V3.6)g(and)f(V3.7:)111
-3890 y(1.)46 b(Supp)s(ort)37 b(for)i(time)g(co)s(ordinate)h(systems)f
-(has)f(b)s(een)h(in)m(tro)s(duced)f(through)m(t)h(the)g(addition)g(of)g
-(t)m(w)m(o)227 4003 y(new)31 b(classes,)h(TimeF)-8 b(rame)33
-b(and)d(TimeMap.)43 b(The)31 b(TimeF)-8 b(rame)32 b(is)f(a)h
-(1-dimensional)g(F)-8 b(rame)32 b(whic)m(h)227 4116 y(can)i(b)s(e)f
-(used)g(to)h(describ)s(e)f(momen)m(ts)h(in)f(time)i(\(either)f
-(absolute)g(or)g(relativ)m(e\))i(in)d(v)-5 b(arious)33
-b(systems)227 4229 y(\(MJD,)h(Julian)e(Ep)s(o)s(c)m(h,)g
-Fx(etc.)p FF(\))47 b(and)31 b(referred)h(to)h(v)-5 b(arious)32
-b(time)h(scales)h(\(T)-8 b(AI,)33 b(UTC,)f(UT1,)h(GMST,)227
-4342 y Fx(etc)5 b FF(\).)41 b(The)29 b(TimeMap)h(is)g(a)h(Mapping)e
-(whic)m(h)h(can)g(transform)f(time)i(v)-5 b(alues)30
-b(b)s(et)m(w)m(een)g(these)g(v)-5 b(arious)227 4455 y(systems)23
-b(and)f(time)h(scales.)40 b(Note,)25 b(FitsChans)e(whic)m(h)f(ha)m(v)m
-(e)i(a)f(foreign)g(enco)s(ding)g(\()p Fx(i.e.)38 b FF(an)m(y)23
-b(enco)s(ding)227 4568 y(other)31 b(than)f(NA)-8 b(TIVE\))31
-b(are)g(not)f(able)h(to)g(read)g(or)f(write)h(these)f(new)g(classes.)0
-4865 y Fw(G.24)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.0)0
-5088 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 5201 y(v)m(ersions)31
-b(V3.7)g(and)f(V4.0:)111 5467 y(1.)46 b(Exp)s(erimen)m(tal)41
-b(supp)s(ort)d(for)i(reading)g(IV)m(O)m(A)h(Space-Time-Co)s(ordinates)g
-(\(STC-X\))f(descriptions)227 5580 y(using)28 b(the)f(XmlChan)g(class)i
-(has)e(b)s(een)h(added.)39 b(Supp)s(ort)25 b(is)j(included)f(for)h(a)g
-(subset)f(of)h(V1.20)h(of)f(the)227 5693 y(draft)i(STC)f(sp)s
-(eci\014cation.)p eop end
-%%Page: 561 571
-TeXDict begin 561 570 bop 0 52 a Fy(G.25)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.1)2249 b FF(561)111 351
-y(2.)46 b(A)39 b(new)g(set)h(of)f(metho)s(ds)f(\(AST)p
-Fq(_)p FF(REBIN<X>/astRebin<X>\))j(has)e(b)s(een)f(added)g(to)i(the)g
-(Mapping)227 464 y(class.)e(These)20 b(are)h(\015ux-conserving)f
-(alternativ)m(es)j(to)e(the)f(existing)h(AST)p Fq(_)p
-FF(RESAMPLE<X>/astResample<X>)227 577 y(metho)s(ds.)0
-870 y Fw(G.25)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.1)0
-1091 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1203 y(v)m(ersions)31
-b(V4.0)g(and)f(V4.1:)111 1464 y(1.)46 b(A)23 b(new)g(con)m(trol)h
-(\015ag)g(has)f(b)s(een)f(added)g(to)i(the)f(AST)p Fq(_)p
-FF(RESAMPLE<X>/astResample<X>)h(functions)227 1577 y(whic)m(h)30
-b(pro)s(duces)f(appro)m(ximate)j(\015ux)d(conserv)-5
-b(ation.)111 1764 y(2.)46 b(New)c(constan)m(ts)g(AST)p
-Fq(__)p FF(SOMB)e(and)g(AST)p Fq(__)p FF(SOMBCOS)f(ha)m(v)m(e)j(b)s
-(een)f(added)f(to)i(ast.h.)74 b(These)227 1877 y(sp)s(ecify)43
-b(k)m(ernels)g(for)f(astResample)i(and)e(astRebin)h(based)g(on)f(the)h
-(\\Som)m(brero")h(function)e(\()h(2)29 b Fu(\003)227
-1990 y Fo(J)9 b FF(1\()p Fo(x)p FF(\))p Fo(=x)32 b FF(where)e
-Fo(J)9 b FF(1\()p Fo(x)p FF(\))32 b(is)e(the)h(\014rst)e(order)h
-(Bessel)i(function)e(of)g(the)h(\014rst)e(kind\).)111
-2177 y(3.)46 b(The)f(SkyF)-8 b(rame)45 b(class)g(no)m(w)g(supp)s(orts)e
-(a)i(System)g(v)-5 b(alue)45 b(of)g(AZEL)f(corresp)s(onding)g(to)h
-(horizon)227 2290 y(\(azim)m(uth/elev)-5 b(ation\))34
-b(co)s(ordinates.)111 2477 y(4.)46 b(The)31 b(FitsChan)h(class)g(allo)m
-(ws)h(the)e(non-standard)g(strings)g(\\AZ{")h(and)f(\\EL{")i(to)f(b)s
-(e)f(used)f(as)i(axis)227 2590 y(t)m(yp)s(es)f(in)f(FITS-W)m(CS)g
-(CTYPE)f(k)m(eyw)m(ord)i(v)-5 b(alues.)111 2777 y(5.)46
-b(The)28 b(F)-8 b(rame)28 b(class)h(no)m(w)f(has)f(attributes)h(ObsLon)
-f(and)g(ObsLat)h(to)g(sp)s(ecify)f(the)h(geo)s(detic)i(longitude)227
-2890 y(and)g(latitude)h(of)g(the)g(observ)m(er.)111 3077
-y(6.)46 b(The)41 b(Clo)s(c)m(kLon)g(and)g(Clo)s(c)m(kLat)h(attributes)f
-(ha)m(v)m(e)i(b)s(een)d(remo)m(v)m(ed)i(from)e(the)h(TimeF)-8
-b(rame)42 b(class.)227 3190 y(Lik)m(ewise,)49 b(the)44
-b(GeoLon)h(and)e(GeoLat)j(attributes)e(ha)m(v)m(e)h(b)s(een)f(remo)m(v)
-m(ed)h(from)e(the)h(Sp)s(ecF)-8 b(rame)227 3303 y(class.)45
-b(Both)32 b(classes)g(no)m(w)f(use)g(the)h(ObsLon)e(and)h(ObsLat)g
-(attributes)h(of)f(the)h(paren)m(t)f(F)-8 b(rame)33 b(class)227
-3416 y(instead.)81 b(Ho)m(w)m(ev)m(er,)50 b(the)43 b(old)h(attribute)h
-(names)e(can)h(b)s(e)f(used)g(as)h(synon)m(yms)f(for)h(ObsLat)f(and)227
-3529 y(ObsLon.)e(Also,)32 b(dumps)d(created)j(using)f(the)g(old)g(sc)m
-(heme)h(can)f(b)s(e)f(read)h(succesfully)g(b)m(y)g(AST)f(V4.1)227
-3642 y(and)g(con)m(v)m(erted)i(to)f(the)g(new)e(form.)111
-3829 y(7.)46 b(A)29 b(new)g(function)g(astMapSplit)h(has)f(b)s(een)f
-(added)g(to)i(the)g(Mapping)f(class.)41 b(This)28 b(splits)h(a)h
-(Mapping)227 3942 y(in)m(to)40 b(t)m(w)m(o)h(comp)s(onen)m(t)e
-(Mappings)g(whic)m(h,)i(when)e(com)m(bined)g(in)g(parallel,)j(are)e
-(equiv)-5 b(alen)m(t)40 b(to)g(the)227 4055 y(original)32
-b(Mapping.)111 4242 y(8.)46 b(The)24 b(default)g(v)-5
-b(alue)25 b(for)f(the)g(SkyRefIs)g(attribute)h(has)f(b)s(een)f(c)m
-(hanged)i(from)f(\\Origin")h(to)g(\\Ignored".)227 4355
-y(This)41 b(means)h(that)h(if)e(y)m(ou)i(w)m(an)m(t)f(to)h(use)f(a)g
-(SkyF)-8 b(rame)42 b(to)h(represen)m(t)f(o\013sets)g(from)g(some)g
-(origin)227 4467 y(p)s(osition,)31 b(y)m(ou)f(m)m(ust)g(no)m(w)g(set)h
-(the)f(SkyRefIs)f(attribute)i(explicitly)h(to)f(either)f(\\P)m(ole")j
-(or)d(\\Origin",)227 4580 y(in)g(addition)h(to)g(assigning)g(the)f
-(required)g(origin)h(p)s(osition)f(to)h(the)g(SkyRef)f(attribute.)0
-4873 y Fw(G.26)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.2)0
-5094 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 5207 y(v)m(ersions)31
-b(V4.1)g(and)f(V4.2:)111 5467 y(1.)46 b(The)41 b(SideBand)f(attribute)h
-(of)g(the)g(DSBSp)s(ecF)-8 b(rame)42 b(class)f(can)g(no)m(w)g(tak)m(e)h
-(the)f(option)h(\\LO")f(in)227 5580 y(addition)c(to)g(\\USB")g(and)e
-(\\LSB".)i(The)f(new)g(option)h(causes)f(the)h(DSBSp)s(ecF)-8
-b(rame)36 b(to)h(represen)m(t)227 5693 y(the)31 b(o\013set)g(from)f
-(the)h(lo)s(cal)g(oscillator)i(frequency)-8 b(,)31 b(rather)f(than)g
-(either)h(of)f(the)h(t)m(w)m(o)h(sidebands.)p eop end
-%%Page: 562 572
-TeXDict begin 562 571 bop 0 52 a FF(562)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(2.)46
-b(The)37 b(FitsChan)g(class)h(has)g(b)s(een)e(c)m(hanged)i(so)g(that)g
-(it)g(writes)f(out)h(a)g(VELOSYS)e(k)m(eyw)m(ord)h(when)227
-464 y(creating)k(a)e(FITS-W)m(CS)g(enco)s(ding)g(\(VELOSYS)f(indicates)
-h(the)h(top)s(o)s(cen)m(tric)g(apparen)m(t)f(v)m(elo)s(cit)m(y)227
-577 y(of)f(the)g(standard)f(of)h(rest\).)64 b(FitsChan)38
-b(also)g(strips)g(out)g(VELOSYS)e(k)m(eyw)m(ords)i(when)f(reading)h(a)
-227 690 y(F)-8 b(rameSet)32 b(from)e(a)g(FITS-W)m(CS)g(enco)s(ding.)111
-876 y(3.)46 b(The)27 b(FitsChan)g(class)h(has)f(a)g(new)g(metho)s(d)g
-(called)h(astRetainFits)i(that)d(indicates)i(that)e(the)h(curren)m(t)
-227 989 y(card)i(in)g(the)h(FitsChan)f(should)f(not)i(b)s(e)f(stripp)s
-(ed)e(out)j(of)f(the)h(FitsChan)f(when)f(an)h(AST)g(Ob)5
-b(ject)30 b(is)227 1101 y(read)k(from)g(the)h(FitsChan.)52
-b(Unless)34 b(this)g(metho)s(d)g(is)g(used,)h(all)g(cards)f(that)h(w)m
-(ere)f(in)m(v)m(olv)m(ed)i(in)e(the)227 1214 y(creation)e(of)f(the)f
-(AST)g(Ob)5 b(ject)30 b(will)h(b)s(e)f(stripp)s(ed)f(from)g(the)i
-(FitsChan)f(afte)i(a)e(read)h(op)s(eration.)111 1400
-y(4.)46 b(A)30 b(problem)e(with)h(unaligned)g(memory)g(access)i(that)f
-(could)f(cause)h(bus)e(errors)h(on)g(Solaris)g(has)g(b)s(een)227
-1513 y(\014xed.)111 1698 y(5.)46 b(A)32 b(new)f(read-only)g(attribute)i
-(called)f(Ob)5 b(jSize)31 b(has)g(b)s(een)g(added)g(to)h(the)f(base)h
-(Ob)5 b(ject)31 b(Class.)44 b(This)227 1811 y(giv)m(es)31
-b(the)e(n)m(um)m(b)s(er)f(of)h(b)m(ytes)g(of)h(memory)f(o)s(ccupied)f
-(b)m(y)h(the)h(Ob)5 b(ject.)40 b(Note,)31 b(this)e(is)g(the)g(size)h
-(of)f(the)227 1924 y(in)m(ternal)e(in-memory)g(represen)m(tation)g(of)g
-(the)f(Ob)5 b(ject,)28 b(not)f(the)f(size)i(of)e(the)h(textual)g
-(represen)m(tation)227 2037 y(pro)s(duced)i(b)m(y)h(writing)h(the)f(Ob)
-5 b(ject)31 b(out)f(through)g(a)h(Channel.)111 2223 y(6.)46
-b(A)39 b(new)f(function)g(astT)-8 b(une)38 b(has)g(b)s(een)g(added)g
-(whic)m(h)g(can)h(b)s(e)e(used)h(to)h(get)h(and)e(set)g(global)i(AST)
-227 2336 y(tuning)30 b(parameters.)41 b(A)m(t)31 b(the)g(momen)m(t)g
-(there)f(are)h(only)f(t)m(w)m(o)i(suc)m(h)e(parameter,)h(b)s(oth)f(of)g
-(whic)m(h)g(are)227 2449 y(concerned)h(with)f(memory)g(managemen)m(t)i
-(within)e(AST.)111 2634 y(7.)46 b(A)38 b(new)f(metho)s(d)g(called)i
-(astT)-8 b(ranGrid)38 b(has)f(b)s(een)g(added)g(to)h(the)g(Mapping)g
-(class.)63 b(This)37 b(metho)s(d)227 2747 y(creates)e(a)e(regular)h
-(grid)e(of)i(p)s(oin)m(ts)f(co)m(v)m(ering)i(a)e(rectangular)h(region)g
-(within)f(the)g(input)f(space)i(of)f(a)227 2860 y(Mapping,)39
-b(and)d(then)h(transforms)f(this)h(set)h(of)f(p)s(oin)m(ts)g(in)m(to)h
-(the)f(output)f(space)i(of)f(the)g(Mapping,)227 2973
-y(using)30 b(a)g(piecewise-con)m(tin)m(uous)i(linear)e(appro)m
-(ximation)h(to)f(the)g(Mapping)g(if)g(appropriate)f(in)h(order)227
-3086 y(to)h(ac)m(hiv)m(e)i(higher)d(sp)s(eed.)111 3272
-y(8.)46 b(A)34 b(new)f(sub)s(class)g(of)h(Mapping)f(has)h(b)s(een)f
-(added)g(called)i(Switc)m(hMap.)51 b(A)33 b(Switc)m(hMap)i(represen)m
-(ts)227 3384 y(sev)m(eral)g(alternate)g(Mappings,)g(eac)m(h)g(of)e
-(whic)m(h)h(is)f(used)g(to)h(transforms)f(input)g(p)s(ositions)g
-(within)g(a)227 3497 y(di\013eren)m(t)e(region)g(of)g(the)f(input)g(co)
-s(ordinate)h(space.)111 3683 y(9.)46 b(A)28 b(new)e(sub)s(class)h(of)g
-(Mapping)g(has)g(b)s(een)f(added)h(called)h(SelectorMap.)41
-b(A)28 b(SelectorMap)g(tests)g(eac)m(h)227 3796 y(input)33
-b(p)s(osition)h(to)h(see)f(if)g(it)g(falls)h(within)e(one)h(of)g(sev)m
-(eral)h(Regions.)52 b(If)34 b(it)g(do)s(es,)h(the)f(index)f(of)h(the)
-227 3909 y(Region)e(con)m(taining)f(the)g(input)e(p)s(osition)i(is)f
-(returned)g(as)g(the)h(Mapping)f(output.)66 4094 y(10.)46
-b(The)29 b(b)s(eha)m(viour)h(of)g(the)f(astCon)m(v)m(ert)j(metho)s(d)d
-(when)g(trying)g(to)i(align)f(a)g(CmpF)-8 b(rame)30 b(with)f(another)
-227 4207 y(F)-8 b(rame)26 b(has)f(b)s(een)g(mo)s(di\014ed.)38
-b(If)25 b(no)g(con)m(v)m(ersion)h(b)s(et)m(w)m(een)g(p)s(ositions)f(in)
-g(the)h(F)-8 b(rame)26 b(and)f(CmpF)-8 b(rame)227 4320
-y(can)29 b(b)s(e)f(found,)g(an)g(attempt)i(is)e(no)m(w)h(made)f(to)i
-(\014nd)d(a)i(con)m(v)m(ersion)g(b)s(et)m(w)m(een)g(the)g(F)-8
-b(rame)30 b(and)d(one)i(of)227 4433 y(t)m(w)m(o)k(comp)s(onen)m(t)e(F)
--8 b(rames)32 b(con)m(tained)g(within)e(the)h(CmpF)-8
-b(rame.)43 b(Th)m(us)30 b(is)h(should)f(no)m(w)h(b)s(e)f(p)s(ossible)
-227 4546 y(to)44 b(align)f(a)g(SkyF)-8 b(rame)43 b(with)g(a)g(CmpF)-8
-b(rame)42 b(con)m(taining)i(a)f(SkyF)-8 b(rame)43 b(and)f(a)h(Sp)s(ecF)
--8 b(rame)43 b(\(for)227 4659 y(instance\).)72 b(The)40
-b(returned)g(Mapping)g(pro)s(duces)f(bad)h(v)-5 b(alues)41
-b(for)g(the)f(extra)h(axes)h(\(i.e.)72 b(for)40 b(the)227
-4772 y(Sp)s(ecF)-8 b(rame)31 b(axis)g(in)f(the)g(ab)s(o)m(v)m(e)i
-(example\).)66 4957 y(11.)46 b(The)25 b(\\ast)p Fq(_)p
-FF(link)p Fq(_)p FF(adam")i(and)e(\\ast)p Fq(_)p FF(link")h(scripts)f
-(no)m(w)h(ignore)g(the)f Fq(-fsla)f FF(and)h Fq(-csla)f
-FF(options,)j(and)227 5070 y(alw)m(a)m(ys)32 b(link)e(against)i(the)f
-(minimal)f(cut-do)m(wn)h(v)m(ersion)g(of)f(SLALIB)g(distributed)f(as)i
-(part)f(of)h(AST.)0 5361 y Fw(G.27)112 b(Changes)39 b(In)m(tro)s(duced)
-f(in)f(V4.3)0 5580 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 5693 y(v)m(ersions)31
-b(V4.2)g(and)f(V4.3:)p eop end
-%%Page: 563 573
-TeXDict begin 563 572 bop 0 52 a Fy(G.28)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.4)2249 b FF(563)111 351
-y(1.)46 b(The)32 b(astGetFitsS)j(function)d(no)m(w)g(strips)g(trailing)
-i(white)e(space)i(from)e(the)g(returned)g(string,)h(if)f(the)227
-464 y(original)g(string)e(con)m(tains)i(8)e(or)h(few)m(er)f(c)m
-(haracters)111 637 y(2.)46 b(The)d(Sp)s(ecF)-8 b(rame)44
-b(class)g(has)f(a)h(new)f(attribute)h(called)g(SourceSys)f(that)h(sp)s
-(eci\014ed)f(whether)f(the)227 750 y(SourceV)-8 b(el)38
-b(attribute)g(\(whic)m(h)f(sp)s(eci\014es)f(the)h(rest)h(frame)e(of)h
-(the)h(source\))f(should)f(b)s(e)g(accessed)i(as)227
-863 y(an)d(apparen)m(t)h(radial)f(v)m(elo)s(cit)m(y)j(or)d(a)h
-(redshift.)54 b(Note,)38 b(an)m(y)e(existing)g(soft)m(w)m(are)g(that)g
-(assumes)f(that)227 976 y(SourceV)-8 b(el)34 b(alw)m(a)m(ys)g(represen)
-m(ts)e(a)h(v)m(elo)s(cit)m(y)i(in)d(km/s)h(should)e(b)s(e)h(c)m(hanged)
-i(to)f(allo)m(w)h(for)e(the)h(p)s(ossi-)227 1089 y(bilit)m(y)f(of)e
-(SourceV)-8 b(el)32 b(represen)m(ting)e(a)h(redshift)f(v)-5
-b(alue.)0 1361 y Fw(G.28)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f
-(V4.4)0 1568 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f
-(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g
-(AST)g(library)g(b)s(et)m(w)m(een)0 1680 y(v)m(ersions)31
-b(V4.3)g(and)f(V4.4:)111 1885 y(1.)46 b(The)33 b(astFindF)-8
-b(rame)34 b(function)e(can)i(no)m(w)e(b)s(e)h(used)f(to)h(searc)m(h)h
-(a)f(CmpF)-8 b(rame)33 b(for)g(an)f(instance)i(of)f(a)227
-1998 y(more)k(sp)s(ecialised)h(class)g(of)f(F)-8 b(rame)38
-b(\(SkyF)-8 b(rame,)40 b(TimeF)-8 b(rame,)40 b(Sp)s(ecF)-8
-b(rame,)39 b(DSBSp)s(ecF)-8 b(rame)37 b(or)227 2110 y(FluxF)-8
-b(rame\).)42 b(That)28 b(is,)h(if)g(an)f(instance)h(of)g(one)g(of)f
-(these)h(classes)h(is)e(used)g(as)h(the)g(\\template")h(when)227
-2223 y(calling)42 b(astFindF)-8 b(rame,)44 b(and)39 b(the)h(\\target")i
-(b)s(eing)e(searc)m(hed)g(is)g(a)h(CmpF)-8 b(rame)40
-b(\(or)g(a)g(F)-8 b(rameSet)227 2336 y(in)44 b(whic)m(h)g(the)g(curren)
-m(t)g(F)-8 b(rame)45 b(is)g(a)f(CmpF)-8 b(rame\),)48
-b(then)c(the)g(comp)s(onen)m(t)h(F)-8 b(rames)45 b(within)e(the)227
-2449 y(CmpF)-8 b(rame)28 b(will)g(b)s(e)e(searc)m(hed)i(for)g(an)f
-(instance)h(of)g(the)g(supplied)e(template)j(F)-8 b(rame,)29
-b(and,)f(if)g(found,)227 2562 y(a)36 b(suitable)f(Mapping)g(\(whic)m(h)
-h(will)f(include)g(a)g(P)m(ermMap)h(to)g(select)g(the)g(required)e
-(axes)i(from)e(the)227 2675 y(CmpF)-8 b(rame\))32 b(will)g(b)s(e)e
-(returned)g(b)m(y)i(astFindF)-8 b(rame.)44 b(Note,)34
-b(for)d(this)g(to)h(w)m(ork,)g(the)g(MaxAxes)g(and)227
-2788 y(MinAxes)38 b(attributes)g(of)f(the)h(template)g(F)-8
-b(rame)38 b(m)m(ust)g(b)s(e)e(set)i(so)f(that)h(they)g(co)m(v)m(er)h(a)
-e(range)h(that)227 2901 y(includes)30 b(the)h(n)m(um)m(b)s(er)e(of)h
-(axes)h(in)f(the)h(target)h(CmpF)-8 b(rame.)111 3074
-y(2.)46 b(The)23 b(SkyF)-8 b(rame,)26 b(Sp)s(ecF)-8 b(rame,)26
-b(DSBSp)s(ecF)-8 b(rame,)25 b(TimeF)-8 b(rame)25 b(and)e(FluxF)-8
-b(rame)25 b(classes)f(no)m(w)g(allo)m(w)227 3187 y(the)34
-b(MaxAxes)h(and)e(MinAxes)g(attributes)i(to)f(b)s(e)f(set)h(freely)g
-(to)g(an)m(y)g(v)-5 b(alue.)50 b(In)33 b(previous)g(v)m(ersions)227
-3300 y(of)f(AST,)g(an)m(y)g(attempt)h(to)g(c)m(hange)g(the)f(v)-5
-b(alue)32 b(of)g(MinAxes)h(or)e(MaxAxes)i(w)m(as)g(ignored,)f
-(resulting)227 3413 y(in)e(them)h(alw)m(a)m(ys)h(taking)f(the)f
-(default)h(v)-5 b(alues.)111 3586 y(3.)46 b(The)38 b(DSBSp)s(ecF)-8
-b(rame)40 b(class)f(has)f(a)h(new)g(attribute)g(called)h(AlignSB)f
-(that)g(sp)s(eci\014es)f(whether)g(or)227 3699 y(not)32
-b(to)g(tak)m(e)i(accoun)m(t)f(of)f(the)f(SideBand)g(attributes)i(when)d
-(aligning)j(t)m(w)m(o)g(DSBSp)s(ecF)-8 b(rames)32 b(using)227
-3811 y(astCon)m(v)m(ert.)111 3985 y(4.)46 b(The)28 b(F)-8
-b(rame)30 b(class)g(has)e(a)h(new)f(attribute)i(called)g(Dut1)f(that)h
-(can)f(b)s(e)f(used)g(to)h(store)g(a)h(v)-5 b(alue)29
-b(for)f(the)227 4097 y(di\013erence)j(b)s(et)m(w)m(een)g(the)g(UT1)f
-(and)g(UTC)g(timescales)i(at)f(the)g(ep)s(o)s(c)m(h)f(referred)g(to)h
-(b)m(y)f(the)g(F)-8 b(rame.)111 4271 y(5.)46 b(The)32
-b(n)m(um)m(b)s(er)f(of)h(digits)h(used)e(to)i(format)f(the)h(F)-8
-b(rame)33 b(attributes)f(ObsLat)g(and)f(ObsLon)g(has)h(b)s(een)227
-4383 y(increased.)111 4557 y(6.)46 b(The)32 b(use)h(of)g(the)g(SkyF)-8
-b(rame)33 b(attribute)g(AlignO\013set)h(has)e(b)s(een)g(c)m(hanged.)48
-b(This)32 b(attribute)i(is)e(used)227 4669 y(to)44 b(con)m(trol)g(ho)m
-(w)e(t)m(w)m(o)i(SkyF)-8 b(rames)43 b(are)g(aligned)g(b)m(y)f(astCon)m
-(v)m(ert.)79 b(If)42 b(the)h(template)h(and)e(target)227
-4782 y(SkyF)-8 b(rames)41 b(b)s(oth)e(ha)m(v)m(e)j(a)f(non-zero)f(v)-5
-b(alue)41 b(for)f(AlignO\013set,)k(then)c(alignmen)m(t)i(o)s(ccurs)e(b)
-s(et)m(w)m(een)227 4895 y(the)f(o\013set)i(co)s(ordinate)e(systems)g
-(\(that)h(is,)i(a)d(UnitMap)h(will)f(alw)m(a)m(ys)i(b)s(e)d(used)g(to)i
-(align)g(the)f(t)m(w)m(o)227 5008 y(SkyF)-8 b(rames\).)111
-5181 y(7.)46 b(The)29 b(Plot)h(class)g(has)f(a)h(new)f(attribute)h
-(called)g(F)-8 b(orceExterior)32 b(that)e(can)f(b)s(e)g(used)g(to)h
-(force)f(exterior)227 5294 y(\(rather)45 b(than)f(in)m(terior\))i(tic)m
-(k)g(marks)e(to)i(b)s(e)e(pro)s(duced.)81 b(By)45 b(default,)k
-(exterior)c(tic)m(ks)h(are)f(only)227 5407 y(pro)s(duced)29
-b(if)h(this)h(w)m(ould)f(result)g(in)g(more)h(than)f(3)g(tic)m(k)i
-(marks)e(b)s(eing)g(dra)m(wn.)111 5580 y(8.)46 b(The)40
-b(TimeF)-8 b(rame)40 b(class)h(no)m(w)f(supp)s(orts)d(con)m(v)m(ersion)
-42 b(b)s(et)m(w)m(een)e(angle)h(based)e(timescales)j(suc)m(h)d(as)227
-5693 y(UT1)31 b(and)f(atomic)i(based)e(timescales)i(suc)m(h)e(as)h
-(UTC.)p eop end
-%%Page: 564 574
-TeXDict begin 564 573 bop 0 52 a FF(564)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)0 351 y Fw(G.29)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.5)0 576 y FF(The)31
-b(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)m(t)g(c)m
-(hanges)g(that)g(o)s(ccurred)e(in)h(the)h(AST)e(library)h(b)s(et)m(w)m
-(een)0 689 y(v)m(ersions)g(V4.4)g(and)f(V4.5:)111 959
-y(1.)46 b(All)28 b(FITS-CLASS)d(headers)i(are)g(no)m(w)g(created)h
-(with)e(a)i(frequency)e(axis.)40 b(If)27 b(the)g(F)-8
-b(rameSet)28 b(supplied)227 1072 y(to)e(astW)-8 b(rite)27
-b(con)m(tains)f(a)g(v)m(elo)s(cit)m(y)h(axis)f(\(or)f(an)m(y)g(other)h
-(form)e(of)h(sp)s(ectral)h(axis\))g(it)f(will)h(b)s(e)e(con)m(v)m
-(erted)227 1185 y(to)31 b(an)g(equiv)-5 b(alen)m(t)31
-b(frequency)f(axis)h(b)s(efore)f(b)s(eing)g(used)g(to)h(create)h(the)e
-(FITS-CLASS)f(header.)111 1378 y(2.)46 b(The)32 b(v)-5
-b(alue)33 b(stored)f(in)g(the)h(FITS-CLASS)d(k)m(eyw)m(ord)j
-(\\VELO-LSR")f(has)g(b)s(een)g(c)m(hanged)g(from)g(the)227
-1491 y(v)m(elo)s(cit)m(y)h(of)e(the)f(source)h(to)g(the)f(v)m(elo)s
-(cit)m(y)j(of)e(the)f(reference)h(c)m(hannel.)111 1683
-y(3.)46 b(Addition)27 b(of)f(a)h(new)f(metho)s(d)f(call)j(astPurgeW)m
-(CS)f(to)g(the)f(FitsChan)h(class.)40 b(This)25 b(metho)s(d)h(remo)m(v)
-m(es)227 1796 y(all)32 b(W)m(CS-related)f(header)f(cards)h(from)e(a)i
-(FitsChan.)111 1989 y(4.)46 b(The)37 b(Plot)h(class)h(has)e(a)h(new)e
-(attribute)j(called)f(GrfCon)m(text)g(that)g(can)g(b)s(e)f(used)f(to)j
-(comminicate)227 2102 y(con)m(text)27 b(information)e(b)s(et)m(w)m(een)
-h(an)f(application)h(and)f(an)m(y)g(graphics)g(functions)g(registered)h
-(with)e(the)227 2215 y(Plot)32 b(class)f(via)g(the)f(astGrfSet)h
-(function.)111 2407 y(5.)46 b(F)-8 b(unctions)40 b(registered)g(with)f
-(the)h(Plot)g(class)g(using)f(astGrfSet)h(no)m(w)f(tak)m(e)i(a)e(new)g
-(additional)h(in-)227 2520 y(teger)d(parameter,)g(\\grfcon".)58
-b(The)34 b(Plot)j(class)f(sets)g(this)f(parameter)h(to)h(the)e(v)-5
-b(alue)36 b(of)g(the)f(Plot's)227 2633 y(GrfCon)m(text)29
-b(attribute)f(b)s(efore)f(calling)i(the)f(graphics)f(function.)40
-b(NOTE,)27 b(THIS)g(CHANGE)h(WILL)227 2746 y(REQUIRE)23
-b(EXISTING)g(CODE)g(THA)-8 b(T)23 b(USES)f(astGrfSet)i(TO)f(BE)h
-(MODIFIED)g(TO)f(INCLUDE)227 2859 y(THE)30 b(NEW)h(P)-8
-b(ARAMETER.)111 3052 y(6.)46 b(The)32 b(astRebinSeq)h(functions)f(no)m
-(w)g(ha)m(v)m(e)i(an)f(extra)g(parameter)g(that)g(is)g(used)e(to)j
-(record)e(the)h(total)227 3164 y(n)m(um)m(b)s(er)g(of)h(input)f(data)i
-(v)-5 b(alues)35 b(added)e(in)m(to)i(the)f(output)g(arra)m(y)-8
-b(.)53 b(This)33 b(is)h(necessary)h(to)g(correct)g(a)227
-3277 y(\015a)m(w)h(in)f(the)g(calculation)j(of)d(output)g(v)-5
-b(ariances)36 b(based)f(on)g(the)h(spread)e(of)i(input)e(v)-5
-b(alues.)56 b(NOTE,)227 3390 y(THIS)24 b(CHANGE)g(WILL)g(REQUIRE)g
-(EXISTING)f(CODE)h(TO)g(BE)g(MODIFIED)h(TO)f(INCLUDE)227
-3503 y(THE)30 b(NEW)h(P)-8 b(ARAMETER)31 b(\(CALLED)f("NUSED"\).)111
-3696 y(7.)46 b(Supp)s(ort)29 b(has)h(b)s(een)f(added)h(for)g(the)h
-(FITS-W)m(CS)f(\\HPX")h(\(HEALPix\))g(pro)5 b(jection.)111
-3889 y(8.)46 b(A)39 b(new)f(\015ag)g(\\AST)p Fq(__)p
-FF(V)-10 b(AR)g(W)m(GT")40 b(can)e(b)s(e)g(supplied)f(to)i
-(astRebinSeq.)65 b(This)38 b(causes)h(the)f(input)227
-4001 y(data)31 b(v)-5 b(alues)31 b(to)g(b)s(e)f(w)m(eigh)m(ted)i(using)
-e(the)g(recipro)s(cals)h(of)g(the)f(input)g(v)-5 b(ariances)31
-b(\(if)g(supplied\).)111 4194 y(9.)46 b(The)20 b(F)-8
-b(rame)22 b(class)f(has)f(a)h(new)f(read-only)h(attribute)h(called)f
-(NormUnit)g(that)g(returns)f(the)g(normalised)227 4307
-y(v)-5 b(alue)29 b(of)e(the)h(Unit)g(attribute)h(for)f(an)f(axis.)41
-b(Here,)29 b(\\normalisation")g(means)f(cancelling)i(redundan)m(t)227
-4420 y(units,)f(etc.)41 b(So)29 b(for)f(instance,)i(a)g(Unit)f(v)-5
-b(alue)29 b(of)g(\\s*\(m/s\)")h(w)m(ould)f(result)g(in)f(a)h(NormUnit)g
-(v)-5 b(alue)29 b(of)227 4533 y(\\m".)66 4725 y(10.)46
-b(A)34 b(new)f(function)g(astSho)m(wMesh)h(has)g(b)s(een)e(added)h(to)i
-(the)e(Region)i(class.)51 b(It)34 b(displa)m(ys)f(a)h(mesh)f(of)227
-4838 y(p)s(oin)m(ts)h(co)m(v)m(ering)h(the)f(surface)g(of)g(a)g(Region)
-g(b)m(y)g(writing)f(out)h(a)g(table)h(of)f(axis)g(v)-5
-b(alues)34 b(to)g(standard)227 4951 y(output.)66 5144
-y(11.)46 b(The)26 b(Plot)g(class)h(no)m(w)e(honours)g(the)h(v)-5
-b(alue)26 b(of)g(the)g(Lab)s(elUp)f(attribute)i(ev)m(en)f(if)g(n)m
-(umerical)g(lab)s(els)g(are)227 5257 y(placed)33 b(around)e(the)h(edge)
-h(of)g(the)f(Plot.)47 b(Previously)32 b(Lab)s(elUp)g(w)m(as)g(only)h
-(used)e(if)h(the)h(lab)s(els)f(w)m(ere)227 5370 y(dra)m(wn)f(within)g
-(the)h(in)m(terior)g(of)g(the)f(plot.)45 b(The)31 b(Lab)s(elUp)g
-(attribute)h(con)m(trols)h(whether)e(n)m(umerical)227
-5483 y(lab)s(els)g(are)g(dra)m(wn)e(horizon)m(tally)j(or)f(parallel)g
-(to)g(the)g(axis)g(they)f(describ)s(e.)66 5675 y(12.)46
-b(A)31 b(bug)f(has)g(b)s(een)f(\014xed)h(that)h(could)f(segmen)m
-(tation)j(violations)f(when)d(setting)j(attribute)f(v)-5
-b(alues.)p eop end
-%%Page: 565 575
-TeXDict begin 565 574 bop 0 52 a Fy(G.30)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V4.6)2249 b FF(565)0 351 y
-Fw(G.30)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V4.6)0
-571 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h(signi\014can)
-m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d(in)h(the)g
-(AST)g(library)0 684 y(b)s(et)m(w)m(een)31 b(v)m(ersions)g(V4.5)g(and)f
-(V4.6:)111 940 y(1.)46 b(The)33 b(TimeF)-8 b(rame)35
-b(class)g(no)m(w)e(supp)s(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h
-(scale.)52 b(The)33 b(o\013set)h(from)g(UTC)f(to)227
-1052 y(Lo)s(cal)e(Time)g(is)f(sp)s(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)
--8 b(rame)31 b(attribute)g(called)h(L)-8 b(TO\013set.)111
-1238 y(2.)46 b(A)39 b(new)e(class)j(called)f(Plot3D)h(has)e(b)s(een)g
-(added.)64 b(The)37 b(Plot3D)j(class)f(allo)m(ws)h(the)f(creation)g(of)
-g(3-)227 1351 y(dimensional)31 b(annotated)g(co)s(ordinate)g(grids.)111
-1537 y(3.)46 b(A)34 b(correction)h(for)f(diurnal)e(ab)s(erration)i(is)g
-(no)m(w)g(included)e(when)h(con)m(v)m(erting)j(b)s(et)m(w)m(een)e(AZEL)
-f(and)227 1650 y(other)39 b(celestial)i(co)s(ordinate)f(systems.)65
-b(The)38 b(correction)i(is)e(based)g(on)h(the)f(v)-5
-b(alue)39 b(of)g(the)g(ObsLat)227 1763 y(F)-8 b(rame)32
-b(attribute)f(\(the)g(geo)s(detic)h(latitude)f(of)g(the)f(observ)m
-(er\).)111 1949 y(4.)46 b(A)35 b(bug)g(has)g(b)s(een)f(\014xed)h(whic)m
-(h)f(caused)i(the)f(DUT1)h(attribute)f(to)h(b)s(e)f(ignored)g(b)m(y)g
-(the)g(SkyF)-8 b(rame)227 2062 y(class)31 b(when)f(\014nding)f(con)m(v)
-m(ersions)i(b)s(et)m(w)m(een)g(AZEL)f(and)g(other)g(celestial)j(co)s
-(ordinate)f(systems.)0 2353 y Fw(G.31)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V5.0)0 2572 y FF(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-2685 y(v)m(ersions)31 b(V4.6)g(and)f(V5.0:)111 2941 y(1.)46
-b(The)23 b(AST)f(library)g(is)h(no)m(w)g(thread-safe)g(\(assuming)g
-(that)h(the)f(POSIX)f(pthreads)g(library)g(is)h(a)m(v)-5
-b(ailable)227 3054 y(when)29 b(AST)h(is)g(built\).)40
-b(Man)m(y)31 b(of)f(the)g(macros)h(de\014ned)e(in)g(the)i(ast.h)f
-(header)g(\014le)g(ha)m(v)m(e)h(c)m(hanged.)41 b(It)227
-3167 y(is)31 b(therefore)g(necessary)f(to)h(re-compile)h(all)f(source)g
-(co)s(de)f(that)h(includes)f(ast.h.)111 3353 y(2.)46
-b(New)31 b(metho)s(ds)f(astLo)s(c)m(k)i(and)e(astUnlo)s(c)m(k)j(allo)m
-(w)f(an)e(AST)g(Ob)5 b(ject)31 b(to)h(b)s(e)e(lo)s(c)m(k)m(ed)i(for)f
-(exclusiv)m(e)h(use)227 3466 y(b)m(y)f(a)f(thread.)111
-3652 y(3.)46 b(The)33 b(TimeF)-8 b(rame)35 b(class)g(no)m(w)e(supp)s
-(ort)f(Lo)s(cal)j(Time)e(as)h(a)g(time)h(scale.)52 b(The)33
-b(o\013set)h(from)g(UTC)f(to)227 3765 y(Lo)s(cal)e(Time)g(is)f(sp)s
-(eci\014ed)g(b)m(y)g(a)h(new)f(TimeF)-8 b(rame)31 b(attribute)g(called)
-h(L)-8 b(TO\013set.)111 3951 y(4.)46 b(The)23 b(Channel)g(class)h(has)f
-(a)h(new)e(attribute)i(called)h(Strict)f(whic)m(h)f(con)m(trols)h
-(whether)f(or)g(not)h(to)g(rep)s(ort)227 4063 y(an)31
-b(error)f(if)h(unexp)s(ected)g(data)g(items)g(are)h(found)d(within)i
-(an)f(AST)g(Ob)5 b(ject)31 b(description)g(read)g(from)227
-4176 y(an)39 b(external)h(data)f(source.)66 b(Note,)43
-b(the)c(default)g(b)s(eha)m(viour)f(is)h(no)m(w)g(not)g(to)g(rep)s(ort)
-f(suc)m(h)h(errors.)227 4289 y(This)32 b(di\013ers)g(from)g(previous)g
-(v)m(ersions)g(of)h(AST)f(whic)m(h)g(alw)m(a)m(ys)i(rep)s(orted)d(an)i
-(error)f(is)g(unexp)s(ected)227 4402 y(input)e(items)h(w)m(ere)f
-(encoun)m(tered.)0 4693 y Fw(G.32)112 b(Changes)39 b(In)m(tro)s(duced)f
-(in)f(V5.1)0 4913 y FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i
-(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g
-(the)g(AST)g(library)g(b)s(et)m(w)m(een)0 5026 y(v)m(ersions)31
-b(V5.0)g(and)f(V5.1:)111 5281 y(1.)46 b(The)27 b(astUnlo)s(c)m(k)i
-(function)e(no)m(w)g(has)g(an)h(extra)g(parameter)f(that)h(con)m(trols)
-h(whether)e(or)g(not)h(an)f(error)227 5394 y(is)k(rep)s(orted)e(if)i
-(the)f(Ob)5 b(ject)31 b(is)f(curren)m(tly)h(lo)s(c)m(k)m(ed)g(b)m(y)g
-(another)f(thread.)111 5580 y(2.)46 b(The)33 b(Prism)f(class)h(has)g(b)
-s(een)f(mo)s(di\014ed)f(so)i(that)g(an)m(y)h(class)f(of)g(Region)h(can)
-f(b)s(e)f(used)g(to)h(de\014ne)f(the)227 5693 y(extrusion)e(axes.)42
-b(Previously)-8 b(,)31 b(only)f(a)h(Bo)m(x)h(or)e(In)m(terv)-5
-b(al)31 b(could)g(b)s(e)e(used)h(for)g(this)g(purp)s(ose.)p
-eop end
-%%Page: 566 576
-TeXDict begin 566 575 bop 0 52 a FF(566)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(3.)46
-b(The)25 b(v)-5 b(alues)26 b(of)f(the)h(AST)p Fq(__)p
-FF(THREADSAFE)e(macro)i(\(de\014ned)e(in)h(ast.h\))h(ha)m(v)m(e)g(b)s
-(een)f(c)m(hanged)h(from)227 464 y(\\y)m(es")32 b(and)e(\\no")h(to)g
-(\\1")h(and)e(\\0".)111 664 y(4.)46 b(Impro)m(v)m(emen)m(ts)32
-b(ha)m(v)m(e)h(b)s(een)d(made)i(to)g(the)f(w)m(a)m(y)h(that)g(Prisms)f
-(are)g(simpli\014ed)g(when)f(astSimplify)h(is)227 777
-y(called.)42 b(The)29 b(c)m(hanges)i(mean)f(that)h(more)f(t)m(yp)s(es)g
-(of)g(Prism)f(will)i(no)m(w)e(simplify)h(in)m(to)h(a)f(simpler)g(class)
-227 890 y(of)h(Region.)111 1090 y(5.)46 b(The)39 b(P)m(oin)m(tList)j
-(class)e(has)f(a)i(new)e(metho)s(d,)i(astP)m(oin)m(ts,)j(that)d(copies)
-f(the)g(axis)g(v)-5 b(alues)40 b(from)f(the)227 1203
-y(P)m(oin)m(tList)32 b(in)m(to)g(a)e(supplied)f(arra)m(y)-8
-b(.)111 1403 y(6.)46 b(The)38 b(P)m(oin)m(tList)h(class)g(has)f(a)g
-(new)g(\(read-only\))h(attribute,)i(ListSize,)g(that)d(giv)m(es)h(the)g
-(n)m(um)m(b)s(er)d(of)227 1516 y(p)s(oin)m(ts)31 b(stored)f(in)g(the)h
-(P)m(oin)m(tList.)111 1716 y(7.)46 b(The)34 b(handling)g(of)g(w)m
-(arnings)g(within)f(di\013eren)m(t)i(classes)g(of)g(Channel)e(has)h(b)s
-(een)f(rationalised.)54 b(The)227 1829 y(XmlStrict)24
-b(attribute)g(and)e(astXmlW)-8 b(arnings)24 b(function)f(ha)m(v)m(e)h
-(b)s(een)e(remo)m(v)m(ed.)40 b(The)22 b(same)h(function-)227
-1942 y(alit)m(y)29 b(is)e(no)m(w)g(a)m(v)-5 b(ailable)29
-b(via)e(the)h(existing)f(Strict)h(attribute)f(\(whic)m(h)g(has)g(had)f
-(its)i(remit)f(widened\),)g(a)227 2055 y(new)32 b(attribute)i(called)g
-(Rep)s(ortLev)m(el,)g(and)e(the)h(new)f(astW)-8 b(arnings)34
-b(function.)47 b(This)32 b(new)g(function)227 2168 y(can)g(b)s(e)e
-(used)g(on)h(an)m(y)g(class)h(of)f(Channel.)42 b(T)-8
-b(eh)31 b(FitsChan)g(class)h(retains)f(its)h(long)f(standing)g(abilit)m
-(y)227 2280 y(to)38 b(store)f(w)m(arnings)f(as)h(header)g(cards)f
-(within)h(the)g(FitsChan,)h(but)e(it)h(also)h(no)m(w)f(stores)g(w)m
-(arnings)227 2393 y(in)30 b(the)g(paren)m(t)g(Channel)f(structure,)g
-(from)h(where)f(they)h(can)g(b)s(e)f(retriev)m(ed)i(using)e(the)h(astW)
--8 b(arnings)227 2506 y(function.)111 2706 y(8.)46 b(A)27
-b(new)g(function)g(called)h(astIn)m(tercept)h(has)e(b)s(een)f(added)g
-(to)i(the)g(F)-8 b(rame)28 b(class.)40 b(This)26 b(function)h(\014nds)
-227 2819 y(the)k(p)s(oin)m(t)f(of)h(in)m(tersection)h(b)s(eteeen)f(t)m
-(w)m(o)g(geo)s(desic)h(curv)m(es.)111 3019 y(9.)46 b(A)34
-b(bug)f(in)h(the)g(t)m(yp)s(e-c)m(hec)m(king)i(of)e(Ob)5
-b(jects)34 b(passed)f(as)h(argumen)m(ts)h(to)f(constructor)g(functions)
-g(has)227 3132 y(b)s(een)e(\014xed.)48 b(This)32 b(bug)g(could)h(lead)g
-(to)g(applications)h(crashing)f(or)g(sho)m(wing)g(strange)g(b)s(eha)m
-(viour)f(if)227 3245 y(an)f(inappropriate)f(class)h(of)f(Ob)5
-b(ject)31 b(w)m(as)g(supplied)e(as)h(an)h(argumen)m(t)f(to)i(a)e
-(constructor.)66 3445 y(10.)46 b(The)27 b(astPic)m(kAxes)j(function)d
-(will)h(no)m(w)f(return)f(a)i(Region,)h(if)f(p)s(ossible,)g(when)e
-(applied)h(to)h(a)g(Region.)227 3558 y(If)i(this)g(is)h(not)f(p)s
-(ossible,)h(a)f(F)-8 b(rame)32 b(will)e(b)s(e)g(returned)f(as)i(b)s
-(efore.)66 3758 y(11.)46 b(The)34 b(default)h(gap)g(size)g(b)s(et)m(w)m
-(een)h(the)e(ISO)g(date/time)i(lab)s(els)f(used)f(b)m(y)g(the)h(Plot)h
-(class)f(when)f(dis-)227 3871 y(pla)m(ying)d(an)f(annotated)h(axis)f
-(describ)s(ed)f(b)m(y)h(a)g(TimeF)-8 b(rame)31 b(has)f(b)s(een)f(c)m
-(hanged.)42 b(The)29 b(c)m(hanges)i(are)227 3984 y(mean)m(t)i(to)g
-(impro)m(v)m(e)g(the)g(lab)s(elling)g(of)f(calendar)h(time)g(axes)g
-(that)f(span)g(in)m(terv)-5 b(als)33 b(from)f(a)h(da)m(y)f(to)h(a)227
-4097 y(few)d(y)m(ears.)66 4297 y(12.)46 b(A)37 b(new)e(function)h
-(called)i(astT)-8 b(estFits)38 b(has)e(b)s(een)g(added)f(to)i(the)g
-(FitsChan)f(class.)59 b(This)36 b(function)227 4410 y(tests)31
-b(a)g(FitsChan)f(to)i(see)e(if)h(it)g(con)m(tains)g(a)g(de\014ned)e(v)
--5 b(alue)31 b(for)f(sp)s(eci\014ed)g(FITS)f(k)m(eyw)m(ord.)66
-4610 y(13.)46 b(The)26 b(AST)p Fq(__)p FF(UNDEF<X>)g(parameters)h(used)
-e(to)i(\015ag)g(unde\014ned)d(FITS)h(k)m(eyw)m(ord)i(v)-5
-b(alues)27 b(ha)m(v)m(e)g(b)s(een)227 4723 y(remo)m(v)m(ed.)42
-b(Use)31 b(the)f(new)g(astT)-8 b(estFits)33 b(function)d(instead.)66
-4923 y(14.)46 b(The)34 b(astIsUndef<X>)g(functions)g(used)g(to)h(test)g
-(FITS)e(k)m(eyw)m(ord)i(v)-5 b(alues)35 b(ha)m(v)m(e)g(b)s(een)f(remo)m
-(v)m(ed.)53 b(Use)227 5035 y(the)31 b(new)f(astT)-8 b(estFits)32
-b(function)e(instead.)0 5350 y Fw(G.33)112 b(Changes)39
-b(In)m(tro)s(duced)f(in)f(V5.2)0 5580 y FF(The)26 b(follo)m(wing)i
-(describ)s(es)d(the)i(most)f(signi\014can)m(t)i(c)m(hanges)f(whic)m(h)f
-(o)s(ccurred)g(in)g(the)g(AST)g(library)g(b)s(et)m(w)m(een)0
-5693 y(v)m(ersions)31 b(V5.1)g(and)f(V5.2:)p eop end
-%%Page: 567 577
-TeXDict begin 567 576 bop 0 52 a Fy(G.34)92 b(Changes)31
-b(In)m(tro)s(duced)e(in)h(V5.3)2249 b FF(567)111 351
-y(1.)46 b(A)26 b(new)f(metho)s(d)g(called)i(astSetFitsCM)g(has)f(b)s
-(een)e(added)h(to)i(the)e(FitsChan)h(class.)40 b(It)25
-b(stores)i(a)f(pure)227 464 y(commen)m(t)32 b(card)e(in)g(a)h(FitsChan)
-f(\(that)h(is,)g(a)g(card)f(with)g(no)g(k)m(eyw)m(ord)h(name)g(or)f
-(equals)h(sign\).)111 650 y(2.)46 b(A)29 b(new)f(attribute)h(called)h
-(ObsAlt)e(has)h(b)s(een)f(added)g(to)h(the)g(F)-8 b(rame)29
-b(class.)41 b(It)29 b(records)f(the)h(geo)s(detic)227
-763 y(altitude)35 b(of)f(the)g(observ)m(er,)h(in)f(metres.)51
-b(It)34 b(defaults)g(to)g(zero.)52 b(It)34 b(is)g(used)f(when)f(con)m
-(v)m(erting)k(times)227 876 y(to)31 b(or)e(from)h(the)f(TDB)h
-(timescale,)j(or)c(con)m(v)m(erting)j(sp)s(ectral)e(p)s(ositions)f(to)i
-(or)e(from)g(the)h(top)s(o)s(cen)m(tric)227 989 y(rest)d(frame,)g(or)f
-(con)m(v)m(erting)i(sky)e(p)s(ositions)g(to)h(or)f(from)g(horizon)g(co)
-s(ordinates.)40 b(The)26 b(FitsChan)g(class)227 1101
-y(will)g(include)f(its)g(e\013ect)i(when)d(creating)i(a)g(set)g(of)f(v)
--5 b(alues)25 b(for)g(the)h(OBSGEO-X/Y/Z)f(k)m(eyw)m(ords,)i(and)227
-1214 y(will)j(also)h(assign)f(a)f(v)-5 b(alue)31 b(to)f(it)g(when)e
-(reading)i(a)g(set)g(of)g(OBSGEO-X/Y/Z)g(k)m(eyw)m(ord)g(v)-5
-b(alues)30 b(from)227 1327 y(a)h(FITS)f(header.)111 1513
-y(3.)46 b(The)21 b(TimeMap)g(con)m(v)m(ersions)h(\\TTTOTDB")f(and)g
-(\\TDBTOTT",)g(and)f(the)i(Sp)s(ecMap)e(con)m(v)m(ersions)227
-1626 y(\\TPF2HL")38 b(and)e(\\HLF2TP",)i(no)m(w)f(ha)m(v)m(e)g(an)g
-(additional)g(argumen)m(t)g(-)g(the)g(observ)m(er's)g(geo)s(detic)227
-1739 y(altitude.)111 1924 y(4.)46 b(The)29 b(P)m(olygon)h(class)f(has)g
-(b)s(een)f(mo)s(di\014ed)f(to)j(mak)m(e)g(it)f(consisten)m(t)h(with)f
-(the)g(IV)m(O)m(A)g(STC)f(de\014nition)227 2037 y(of)j(a)h(P)m(olygon.)
-44 b(Sp)s(eci\014cally)-8 b(,)32 b(the)f(inside)g(of)g(a)g(p)s(olygon)g
-(is)g(no)m(w)g(the)g(area)h(to)g(the)f(left)h(of)f(eac)m(h)h(edge)227
-2150 y(as)k(the)f(v)m(ertices)i(are)f(tra)m(v)m(ersed)g(in)f(an)g(an)m
-(ti-clo)s(c)m(kwise)k(manner,)d(as)f(seen)h(from)e(the)i(inside)f(of)g
-(the)227 2263 y(celestial)c(sphere.)39 b(Previously)-8
-b(,)30 b(AST)d(used)h(the)h(an)m(ti-clo)s(c)m(kwise)i(con)m(v)m(en)m
-(tion,)g(but)d(view)m(ed)g(from)g(the)227 2376 y(outside)39
-b(of)g(the)g(celestial)i(sphere)d(instead)h(of)g(the)g(inside.)65
-b(An)m(y)39 b(P)m(olygon)h(sa)m(v)m(ed)g(using)e(previous)227
-2489 y(v)m(ersions)31 b(of)g(AST)e(will)i(b)s(e)f(iden)m(ti\014ed)g
-(and)g(negated)h(automatically)i(when)d(read)g(b)m(y)g(AST)g(V5.2.)111
-2674 y(5.)46 b(A)24 b(new)g(class)g(of)g(Channel,)h(called)g(StcsChan,)
-g(has)f(b)s(een)f(added)g(that)h(allo)m(ws)i(con)m(v)m(ersion)f(of)f
-(suitable)227 2787 y(AST)30 b(Ob)5 b(jects)30 b(to)h(and)f(from)g(IV)m
-(O)m(A)h(STC-S)e(format.)111 2973 y(6.)46 b(A)26 b(new)g(metho)s(d)g
-(called)h(astRemo)m(v)m(eRegions)i(has)d(b)s(een)g(added)f(to)i(the)f
-(Mapping)g(class.)40 b(It)27 b(searc)m(hes)227 3086 y(a)37
-b(\(p)s(ossibly)g(comp)s(ound\))e(Mapping)i(\(or)g(F)-8
-b(rame\))39 b(for)d(an)m(y)h(instances)h(of)f(the)g(AST)f(Region)h
-(class,)227 3199 y(and)30 b(either)g(remo)m(v)m(es)h(them,)f(or)g
-(replaces)h(them)f(with)g(UnitMaps)g(\(or)g(equiv)-5
-b(alen)m(t)31 b(F)-8 b(rames\).)42 b(It)30 b(can)227
-3312 y(b)s(e)g(used)g(to)h(remo)m(v)m(e)h(the)e(masking)h(e\013ects)g
-(of)g(Regions)g(from)f(a)h(comp)s(ound)e(Mapping)h(or)g(F)-8
-b(rame.)111 3497 y(7.)46 b(A)39 b(new)e(metho)s(d)h(called)h(astDo)m
-(wnsize)h(has)e(b)s(een)g(added)f(to)i(the)g(P)m(olygon)g(class.)65
-b(It)38 b(pro)s(duces)f(a)227 3610 y(new)29 b(P)m(olygon)i(that)f(con)m
-(tains)g(a)g(subset)f(of)g(the)h(v)m(ertices)h(in)e(the)g(supplied)f(P)
-m(olygon.)42 b(The)29 b(subset)f(is)227 3723 y(c)m(hosen)34
-b(to)g(retain)g(the)g(main)f(features)h(of)f(the)h(supplied)e(P)m
-(olygion,)k(in)d(so)h(far)f(as)g(that)h(is)g(p)s(ossible,)227
-3836 y(within)c(sp)s(eci\014ed)g(constrain)m(ts.)111
-4022 y(8.)46 b(A)38 b(new)g(constructor)g(called)h(astOutline)f(has)g
-(b)s(een)f(added)g(to)i(the)f(P)m(olygon)h(class.)64
-b(Giv)m(en)38 b(a)h(2D)227 4135 y(data)c(arra)m(y)-8
-b(,)36 b(it)e(iden)m(ti\014es)h(the)f(b)s(oundary)e(of)i(a)g(region)h
-(within)e(the)h(arra)m(y)h(that)f(holds)g(pixels)g(with)227
-4248 y(sp)s(eci\014ed)h(v)-5 b(alues.)57 b(It)36 b(then)f(creates)j(a)e
-(new)f(P)m(olygon)i(to)f(describ)s(e)f(this)h(b)s(oundary)e(to)i(a)g
-(sp)s(eci\014ed)227 4360 y(accuracy)-8 b(.)111 4546 y(9.)46
-b(A)36 b(new)f(set)h(of)g(metho)s(ds,)h(called)g(astMapGetElem<X>)h
-(has)d(b)s(een)g(added)g(to)i(the)e(KeyMap)h(class.)227
-4659 y(They)30 b(allo)m(w)i(a)f(single)g(elemen)m(t)h(of)e(a)h(v)m
-(ector)h(v)-5 b(alued)30 b(en)m(try)h(to)g(b)s(e)f(returned.)66
-4845 y(10.)46 b(A)24 b(new)f(attribute)h(called)h(KeyError)e(has)g(b)s
-(een)g(added)f(to)j(the)e(KeyMap)h(Class.)39 b(It)23
-b(con)m(trols)i(whether)227 4957 y(the)36 b(astMapGet...)60
-b(family)36 b(of)g(functions)f(rep)s(ort)g(an)h(error)f(if)h(an)g(en)m
-(try)g(with)f(the)h(requested)g(k)m(ey)227 5070 y(do)s(es)30
-b(not)h(exist)g(in)f(the)h(KeyMap.)0 5361 y Fw(G.34)112
-b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3)0 5580 y
-FF(The)26 b(follo)m(wing)i(describ)s(es)d(the)i(most)f(signi\014can)m
-(t)i(c)m(hanges)f(whic)m(h)f(o)s(ccurred)g(in)g(the)g(AST)g(library)g
-(b)s(et)m(w)m(een)0 5693 y(v)m(ersions)31 b(V5.2)g(and)f(V5.3:)p
-eop end
-%%Page: 568 578
-TeXDict begin 568 577 bop 0 52 a FF(568)2013 b Fy(G)91
-b(CHANGES)31 b(AND)g(NEW)g(FEA)-8 b(TURES)111 351 y FF(1.)46
-b(The)e(details)h(of)g(ho)m(w)f(a)g(F)-8 b(rame)46 b(is)e(aligned)h
-(with)f(another)g(F)-8 b(rame)45 b(b)m(y)f(the)h(astFindF)-8
-b(rame)45 b(and)227 464 y(astCon)m(v)m(ert)40 b(functions)e(ha)m(v)m(e)
-i(b)s(een)d(c)m(hanged.)66 b(The)37 b(c)m(hanges)j(mean)e(that)h(a)g(F)
--8 b(rame)39 b(can)g(no)m(w)f(b)s(e)227 577 y(aligned)d(with)g(an)f
-(instance)h(of)g(a)f(sub-class)h(of)f(F)-8 b(rame,)37
-b(so)d(long)h(as)g(the)g(n)m(um)m(b)s(er)e(of)h(axes)h(and)f(the)227
-690 y(Domain)40 b(v)-5 b(alues)39 b(are)g(consisten)m(t.)66
-b(F)-8 b(or)40 b(instance,)h(a)e(basic)g(2-dimensional)h(F)-8
-b(rame)39 b(with)g(Domain)227 803 y(\\SKY")d(will)h(no)m(w)e(align)i
-(succesfully)f(with)g(a)g(SkyF)-8 b(rame,)38 b(con)m(v)m(ersion)f(b)s
-(et)m(w)m(een)f(the)g(t)m(w)m(o)i(F)-8 b(rames)227 916
-y(b)s(eing)30 b(ac)m(hiev)m(ed)i(using)e(a)h(UnitMap.)111
-1103 y(2.)46 b(The)30 b(arra)m(ys)h(that)g(supply)e(input)g(v)-5
-b(alues)31 b(for)f(astMapPut1<X>)i(are)f(no)m(w)f(declared)h(\\const".)
-111 1291 y(3.)46 b(Added)28 b(metho)s(d)g(astMatc)m(hAxes)j(to)e(the)g
-(F)-8 b(rame)29 b(class.)41 b(This)28 b(metho)s(d)g(allo)m(ws)h
-(corresp)s(onding)f(axes)227 1404 y(within)i(t)m(w)m(o)i(F)-8
-b(rames)31 b(to)g(b)s(e)f(iden)m(ti\014ed.)111 1592 y(4.)46
-b(The)31 b(astAddF)-8 b(rame)32 b(metho)s(d)f(can)h(no)m(w)f(b)s(e)g
-(used)g(to)h(app)s(end)e(one)h(or)h(more)f(axes)h(to)g(all)h(F)-8
-b(rames)32 b(in)227 1705 y(a)f(F)-8 b(rameSet.)0 1998
-y Fw(G.35)112 b(Changes)39 b(In)m(tro)s(duced)f(in)f(V5.3-1)0
-2219 y FF(The)g(follo)m(wing)h(describ)s(es)f(the)g(most)h
-(signi\014can)m(t)g(c)m(hanges)g(whic)m(h)f(ha)m(v)m(e)i(o)s(ccurred)d
-(in)h(the)g(AST)g(library)0 2332 y(b)s(et)m(w)m(een)31
-b(v)m(ersions)g(V5.3)g(and)f(V5.3-1)j(\(the)d(curren)m(t)h(v)m
-(ersion\):)111 2594 y(1.)46 b(The)e(StcsChan)f(class)i(no)m(w)f
-(ignores)g(case)h(when)e(reading)h(STC-S)f(phrases)g(\(except)i(that)g
-(units)227 2707 y(strings)30 b(are)h(still)h(case)f(sensitiv)m(e\).)0
-2970 y(Programs)25 b(whic)m(h)g(are)h(statically)h(link)m(ed)f(will)f
-(need)g(to)h(b)s(e)f(re-link)m(ed)g(in)g(order)g(to)h(tak)m(e)h(adv)-5
-b(an)m(tage)27 b(of)e(these)0 3083 y(new)30 b(facilities.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/ast-5.3-1/sun211.tex b/ast-5.3-1/sun211.tex
deleted file mode 100644
index 9197867..0000000
--- a/ast-5.3-1/sun211.tex
+++ /dev/null
@@ -1,46844 +0,0 @@
-\documentclass[twoside,11pt]{article}
-
-% ? Specify used packages
-\usepackage[english]{babel}  %  For correct hyphenation rules
-\usepackage{graphicx}        %  Use this one for final production.
-% \usepackage[draft]{graphicx} %  Use this one for drafting.
-% ? End of specify used packages
-
-\pagestyle{headings}
-\pagenumbering{roman}
-
-% -----------------------------------------------------------------------------
-% ? Document identification
-% Fixed part
-\newcommand{\stardoccategory}  {Starlink User Note}
-\newcommand{\stardocinitials}  {SUN}
-\newcommand{\stardocsource}    {sun\stardocnumber}
-
-% Variable part - replace [xxx] as appropriate.
-\newcommand{\stardocnumber}    {211.26}
-\newcommand{\stardocauthors}   {R.F. Warren-Smith \& D.S. Berry}
-\newcommand{\stardocdate}      {30th October 2009}
-\newcommand{\stardoctitle}     {AST\\
-                                A Library for Handling\\
-                                World Coordinate Systems\\
-                                in Astronomy}
-\newcommand{\stardoccopyright} {Copyright (C) 2009 Science \& Technology Facilities Council}
-\newcommand{\stardoctitlehtml} {AST - A Library for Handling World Coordinate
-                                      Systems in Astronomy}
-\newcommand{\stardocversion}   {V5.3}
-\newcommand{\stardocmanual}    {Programmer's Guide\\(C Version)}
-\newcommand{\stardocmanualhtml}{Programmer's Guide (C Version)}
-\newcommand{\stardocabstract}  {
-The AST library provides a comprehensive range of facilities for
-attaching world coordinate systems to astronomical data, for
-retrieving and interpreting that information in a variety of formats,
-including FITS-WCS, and for generating graphical output based on it.
-
-This programmer's manual should be of interest to anyone writing
-astronomical applications which need to manipulate coordinate system
-data, especially celestial or spectral coordinate systems. AST is portable and
-environment-independent.
-}
-% ? End of document identification
-% -----------------------------------------------------------------------------
-
-% +
-%  Name:
-%     sun.tex
-%
-%  Purpose:
-%     Template for Starlink User Note (SUN) documents.
-%     Refer to SUN/199
-%
-%  Authors:
-%     AJC: A.J.Chipperfield (Starlink, RAL)
-%     BLY: M.J.Bly (Starlink, RAL)
-%
-%  History:
-%     17-JAN-1996 (AJC):
-%        Original with hypertext macros, based on MDL plain originals.
-%     16-JUN-1997 (BLY):
-%        Adapted for LaTeX2e.
-%        Added picture commands.
-%     {Add further history here}
-%
-% -
-
-\newcommand{\stardocname}{\stardocinitials /\stardocnumber}
-\markboth{\stardocname}{\stardocname}
-\setlength{\textwidth}{160mm}
-\setlength{\textheight}{230mm}
-\setlength{\topmargin}{-2mm}
-\setlength{\oddsidemargin}{0mm}
-\setlength{\evensidemargin}{0mm}
-\setlength{\parindent}{0mm}
-\setlength{\parskip}{\medskipamount}
-\setlength{\unitlength}{1mm}
-
-% -----------------------------------------------------------------------------
-%  Hypertext definitions.
-%  ======================
-%  These are used by the LaTeX2HTML translator in conjunction with star2html.
-
-%  \htmlref{Comment}{Comment}.sty: version 2.0, 19 June 1992
-%  Selectively in/exclude pieces of text.
-%
-%  Author
-%    Victor Eijkhout                                      <eijkhout at cs.utk.edu>
-%    Department of Computer Science
-%    University Tennessee at Knoxville
-%    104 Ayres Hall
-%    Knoxville, TN 37996
-%    USA
-
-%  Do not remove the %begin{latexonly} and %end{latexonly} lines (used by 
-%  star2html to signify raw TeX that latex2html cannot process).
-%begin{latexonly}
-\makeatletter
-\def\makeinnocent#1{\catcode`#1=12 }
-\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
-
-\def\ThrowAwayComment#1{\begingroup
-    \def\CurrentComment{#1}%
-    \let\do\makeinnocent \dospecials
-    \makeinnocent\^^L% and whatever other special cases
-    \endlinechar`\^^M \catcode`\^^M=12 \xComment}
-{\catcode`\^^M=12 \endlinechar=-1 %
- \gdef\xComment#1^^M{\def\test{#1}
-      \csarg\ifx{PlainEnd\CurrentComment Test}\test
-          \let\html at next\endgroup
-      \else \csarg\ifx{LaLaEnd\CurrentComment Test}\test
-            \edef\html at next{\endgroup\noexpand\end{\CurrentComment}}
-      \else \let\html at next\xComment
-      \fi \fi \html at next}
-}
-\makeatother
-
-\def\includecomment
- #1{\expandafter\def\csname#1\endcsname{}%
-    \expandafter\def\csname end#1\endcsname{}}
-\def\excludecomment
- #1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}%
-    {\escapechar=-1\relax
-     \csarg\xdef{PlainEnd#1Test}{\string\\end#1}%
-     \csarg\xdef{LaLaEnd#1Test}{\string\\end\string\{#1\string\}}%
-    }}
-
-%  Define environments that ignore their contents.
-\excludecomment{comment}
-\excludecomment{rawhtml}
-\excludecomment{htmlonly}
-
-%  Hypertext commands etc. This is a condensed version of the html.sty
-%  file supplied with LaTeX2HTML by: Nikos Drakos <nikos at cbl.leeds.ac.uk> &
-%  Jelle van Zeijl <jvzeijl at isou17.estec.esa.nl>. The LaTeX2HTML documentation
-%  should be consulted about all commands (and the environments defined above)
-%  except \xref and \xlabel which are Starlink specific.
-
-\newcommand{\htmladdnormallinkfoot}[2]{#1\footnote{#2}}
-\newcommand{\htmladdnormallink}[2]{#1}
-\newcommand{\htmladdimg}[1]{}
-\newenvironment{latexonly}{}{}
-\newcommand{\hyperref}[4]{#2\ref{#4}#3}
-\newcommand{\htmlref}[2]{#1}
-\newcommand{\htmlimage}[1]{}
-\newcommand{\htmladdtonavigation}[1]{}
-\newcommand{\latexhtml}[2]{#1}
-\newcommand{\html}[1]{}
-
-%  Starlink cross-references and labels.
-\newcommand{\xref}[3]{#1}
-\newcommand{\xlabel}[1]{}
-
-%  LaTeX2HTML symbol.
-\newcommand{\latextohtml}{{\bf LaTeX}{2}{\tt{HTML}}}
-
-%  Define command to re-centre underscore for Latex and leave as normal
-%  for HTML (severe problems with \_ in tabbing environments and \_\_
-%  generally otherwise).
-\newcommand{\latex}[1]{#1}
-\newcommand{\setunderscore}{\renewcommand{\_}{{\tt\symbol{95}}}}
-\latex{\setunderscore}
-
-%  Redefine the \tableofcontents command. This procrastination is necessary 
-%  to stop the automatic creation of a second table of contents page
-%  by latex2html.
-\newcommand{\latexonlytoc}[0]{\tableofcontents}
-
-% -----------------------------------------------------------------------------
-%  Debugging.
-%  =========
-%  Remove % on the following to debug links in the HTML version using Latex.
-
-% \newcommand{\hotlink}[2]{\fbox{\begin{tabular}[t]{@{}c@{}}#1\\\hline{\footnotesize #2}\end{tabular}}}
-% \renewcommand{\htmladdnormallinkfoot}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\htmladdnormallink}[2]{\hotlink{#1}{#2}}
-% \renewcommand{\hyperref}[4]{\hotlink{#1}{\S\ref{#4}}}
-% \renewcommand{\htmlref}[2]{\hotlink{#1}{\S\ref{#2}}}
-% \renewcommand{\xref}[3]{\hotlink{#1}{#2 -- #3}}
-%end{latexonly}
-% -----------------------------------------------------------------------------
-% ? Document specific \newcommand or \newenvironment commands.
-
-\newcommand{\appref}[1]{Appendix~\ref{#1}}
-\newcommand{\secref}[1]{\S\ref{#1}}
-\begin{htmlonly}
-   \newcommand{\appref}[1]{\ref{#1}}
-   \newcommand{\secref}[1]{\ref{#1}}
-\end{htmlonly}
-
-\newcommand{\fitsurl}[0]{http://fits.gsfc.nasa.gov/}
-\newcommand{\fitskey}[3]{{#1}&{#2}&{#3}\\}
-
-% The following stuff has been moved out of the document body
-% in an attempt to stop spurious behaviour form latex2html.
-
-\begin{htmlonly}
-  \newcommand{\latexonlytoc}[0]{}
-\end{htmlonly}
-\renewcommand{\thepage}{\arabic{page}}
-
-% +
-%  Name:
-%     SST.TEX
-
-%  Purpose:
-%     Define LaTeX commands for laying out Starlink routine descriptions.
-
-%  Language:
-%     LaTeX
-
-%  Type of Module:
-%     LaTeX data file.
-
-%  Description:
-%     This file defines LaTeX commands which allow routine documentation
-%     produced by the SST application PROLAT to be processed by LaTeX and
-%     by LaTeX2html. The contents of this file should be included in the
-%     source prior to any statements that make of the sst commands.
-
-%  Notes:
-%     The commands defined in the style file html.sty provided with LaTeX2html
-%     are used. These should either be made available by using the appropriate
-%     sun.tex (with hypertext extensions) or by putting the file html.sty
-%     on your TEXINPUTS path (and including the name as part of the
-%     documentstyle declaration).
-
-%  Authors:
-%     RFWS: R.F. Warren-Smith (STARLINK)
-%     PDRAPER: P.W. Draper (Starlink - Durham University)
-
-%  History:
-%     10-SEP-1990 (RFWS):
-%        Original version.
-%     10-SEP-1990 (RFWS):
-%        Added the implementation status section.
-%     12-SEP-1990 (RFWS):
-%        Added support for the usage section and adjusted various spacings.
-%     8-DEC-1994 (PDRAPER):
-%        Added support for simplified formatting using LaTeX2html.
-%     {enter_further_changes_here}
-
-%  Bugs:
-%     {note_any_bugs_here}
-
-% -
-
-%  Define length variables.
-\newlength{\sstbannerlength}
-\newlength{\sstcaptionlength}
-\newlength{\sstexampleslength}
-\newlength{\sstexampleswidth}
-
-%  Define a \tt font of the required size.
-\latex{\newfont{\ssttt}{cmtt10 scaled1095}}
-\html{\newcommand{\ssttt}{\tt}}
-
-%  Define a command to produce a routine header, including its name,
-%  a purpose description and the rest of the routine's documentation.
-\newcommand{\sstlabel}[1]{}
-\newcommand{\sstroutine}[3]{
-   \goodbreak
-   \rule{\textwidth}{0.5mm}
-   \vspace{-7ex}
-   \newline
-   \settowidth{\sstbannerlength}{{\Large {\bf #1}}}
-   \setlength{\sstcaptionlength}{\textwidth}
-   \setlength{\sstexampleslength}{\textwidth}
-   \addtolength{\sstbannerlength}{0.5em}
-   \addtolength{\sstcaptionlength}{-2.0\sstbannerlength}
-   \addtolength{\sstcaptionlength}{-5.0pt}
-   \settowidth{\sstexampleswidth}{{\bf Examples:}}
-   \addtolength{\sstexampleslength}{-\sstexampleswidth}
-   \parbox[t]{\sstbannerlength}{\flushleft{\Large {\bf #1}}}
-   \parbox[t]{\sstcaptionlength}{\center{\Large #2}}
-   \parbox[t]{\sstbannerlength}{\flushright{\Large {\bf #1}}}
-   \begin{description}
-      #3
-   \end{description}
-}
-
-%  Format the description section.
-\newcommand{\sstdescription}[1]{\item[Description:] #1}
-
-%  Format the usage section.
-\newcommand{\sstusage}[1]{\item[Usage:] \mbox{} \\[1.3ex] {\ssttt #1}}
-
-%  Format the invocation/synopsis section.
-\newcommand{\sstinvocation}[1]{\item[Invocation:]\hspace{0.4em}{\tt #1}}
-\newcommand{\sstsynopsis}[1]{\item[Synopsis:]\hspace{0.4em}{\tt #1}}
-
-%  Format the attribute data type section.
-\newcommand{\sstattributetype}[1]{
-   \item[Type:] \mbox{} \\
-      #1
-}
-
-%  Format the constructor section.
-\newcommand{\sstconstructor}[1]{
-   \item[Constructor Function:] \mbox{} \\
-      #1
-}
-
-%  Format the arguments section.
-\newcommand{\sstarguments}[1]{
-   \item[Arguments:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the returned value section (for a function).
-\newcommand{\sstreturnedvalue}[1]{
-   \item[Returned Value:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the parameters section (for an application).
-\newcommand{\sstparameters}[1]{
-   \item[Parameters:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the applicability section.
-\newcommand{\sstapplicability}[1]{
-   \item[Clas\mbox{}s Applicability:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Format the examples section.
-\newcommand{\sstexamples}[1]{
-   \item[Examples:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #1
-   \end{description}
-}
-
-%  Define the format of a subsection in a normal section.
-\newcommand{\sstsubsection}[1]{ \item[{#1}] \mbox{} \\}
-
-%  Define the format of a subsection in the examples section.
-\newcommand{\sstexamplesubsection}[2]{\sloppy
-\item[\parbox{\sstexampleslength}{\ssttt #1}] \mbox{} \\ #2 }
-
-%  Format the notes section.
-\newcommand{\sstnotes}[1]{\item[Notes:] \mbox{} \\[1.3ex] #1}
-
-%  Provide a general-purpose format for additional (DIY) sections.
-\newcommand{\sstdiytopic}[2]{\item[{\hspace{-0.35em}#1\hspace{-0.35em}:}] \mbox{} \\[1.3ex] #2}
-
-%  Format the a generic section as a list
-\newcommand{\sstdiylist}[2]{
-   \item[#1:] \mbox{} \\
-   \vspace{-3.5ex}
-   \begin{description}
-      #2
-   \end{description}
-}
-
-%  Format the implementation status section.
-\newcommand{\sstimplementationstatus}[1]{
-   \item[{Implementation Status:}] \mbox{} \\[1.3ex] #1}
-
-%  Format the bugs section.
-\newcommand{\sstbugs}[1]{\item[Bugs:] #1}
-
-%  Format a list of items while in paragraph mode.
-\newcommand{\sstitemlist}[1]{
-  \mbox{} \\
-  \vspace{-3.5ex}
-  \begin{itemize}
-     #1
-  \end{itemize}
-}
-
-%  Define the format of an item.
-\newcommand{\sstitem}{\item}
-
-%  Now define html equivalents of those already set. These are used by
-%  latex2html and are defined in the html.sty files.
-\begin{htmlonly}
-
-%  Re-define \ssttt.
-   \newcommand{\ssttt}{\tt}
-
-%  sstroutine.
-%   \newcommand{\sstroutine}[3]{
-%      \subsection{#1\xlabel{#1}-\label{#1}#2}
-%      \begin{description}
-%         #3
-%      \end{description}
-%   }
-   \newcommand{\sstlabel}[1]{\label{#1}\xlabel{#1}}
-   \newcommand{\sstroutine}[3]{
-      \subsection{#1 - #2}
-      \begin{description}
-         #3
-      \end{description}
-   }
-
-%  sstdescription
-   \newcommand{\sstdescription}[1]{\item[Description:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstusage
-   \newcommand{\sstusage}[1]{\item[Usage:]
-      \begin{description}
-         {\ssttt #1}
-      \end{description}
-   }
-
-%  sstinvocation
-   \newcommand{\sstinvocation}[1]{\item[Invocation:]
-      \begin{description}
-         {\ssttt #1}
-      \end{description}
-   }
-
-%  sstsynopsis
-   \newcommand{\sstsynopsis}[1]{\item[Synopsis:]
-      \begin{description}
-         {\ssttt #1}
-      \end{description}
-   }
-
-%  sstattributetype
-   \newcommand{\sstattributetype}[1]{\item[Type:]
-         #1
-   }
-
-%  sstconstructor
-   \newcommand{\sstconstructor}[1]{\item[Constructor Function:]
-         #1
-   }
-
-%  sstarguments
-   \newcommand{\sstarguments}[1]{
-      \item[Arguments:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstreturnedvalue
-   \newcommand{\sstreturnedvalue}[1]{
-      \item[Returned Value:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstparameters
-   \newcommand{\sstparameters}[1]{
-      \item[Parameters:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstapplicability
-   \newcommand{\sstapplicability}[1]{
-      \item[Clas\mbox{}s Applicability:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstexamples
-   \newcommand{\sstexamples}[1]{
-      \item[Examples:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstsubsection
-   \newcommand{\sstsubsection}[1]{\item[{#1}]}
-
-%  sstexamplesubsection
-   \newcommand{\sstexamplesubsection}[2]{\item[{\ssttt #1}] \\ #2}
-
-%  sstnotes
-   \newcommand{\sstnotes}[1]{\item[Notes:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstdiytopic
-   \newcommand{\sstdiytopic}[2]{\item[{#1}]
-      \begin{description}
-         #2
-      \end{description}
-   }
-
-%  sstimplementationstatus
-   \newcommand{\sstimplementationstatus}[1]{\item[Implementation Status:]
-      \begin{description}
-         #1
-      \end{description}
-   }
-
-%  sstitemlist
-   \newcommand{\sstitemlist}[1]{
-      \begin{itemize}
-         #1
-      \end{itemize}
-   }
-\end{htmlonly}
-
-%  End of "sst.tex" layout definitions.
-% .
-% @(#)sst.tex   1.4   95/06/06 11:46:41   96/07/05 10:28:17
-
-
-
-
-
-% ? End of document specific commands
-% -----------------------------------------------------------------------------
-%  \htmlref{Title}{Title} Page.
-%  ===========
-\renewcommand{\thepage}{\roman{page}}
-\begin{document}
-\thispagestyle{empty}
-
-%  Latex document header.
-%  ======================
-\begin{latexonly}
-   CCLRC / {\sc Rutherford Appleton Laboratory} \hfill {\bf \stardocname}\\
-   {\large Particle Physics \& Astronomy Research Council}\\
-   {\large Starlink Project\\}
-   {\large \stardoccategory\ \stardocnumber}
-   \begin{flushright}
-   \stardocauthors\\
-   \stardocdate
-   \end{flushright}
-   \vspace{-4mm}
-   \rule{\textwidth}{0.5mm}
-   \vspace{-7mm}
-   \begin{center}
-   {\Huge\bf  \stardoctitle \\ [2.0ex]}
-   {\LARGE\bf \stardocversion \\ [1.0ex]}
-   {\Huge\bf  \stardocmanual}
-   \end{center}
-
-% ? Add picture here if required for the LaTeX version.
-   \begin{center}
-   \mbox{}\hfill
-   \includegraphics[scale=0.25,angle=-90]{sun211_figures/fronta_bw.eps}\hfill
-   \includegraphics[scale=0.25,angle=-90]{sun211_figures/frontb_bw.eps}\hfill
-   \includegraphics[scale=0.25,angle=-90]{sun211_figures/frontc_bw.eps}\hfill
-   \mbox{}
-   \end{center}
-% ? End of picture
-
-% ? Heading for abstract if used.
-   \begin{center}
-      {\Large\bf Abstract}
-   \end{center}
-% ? End of heading for abstract.
-\end{latexonly}
-
-%  HTML documentation header.
-%  ==========================
-\begin{htmlonly}
-   \xlabel{}
-   \begin{rawhtml} <H1> \end{rawhtml}
-      \stardoctitlehtml
-   \begin{rawhtml} </H1> \end{rawhtml}
-
-% ? Add picture here if required for the hypertext version.
-   \includegraphics[scale=0.3,angle=-90]{sun211_figures/fronta.eps}\hfill
-   \includegraphics[scale=0.3,angle=-90]{sun211_figures/frontb.eps}\hfill
-   \includegraphics[scale=0.3,angle=-90]{sun211_figures/frontc.eps}
-% ? End of picture
-
-   \begin{rawhtml} <H1> \end{rawhtml}
-      \stardocversion
-      \stardocmanualhtml
-   \begin{rawhtml} </H1> \end{rawhtml}
-   \begin{rawhtml} <P> <I> \end{rawhtml}
-   \stardoccategory\ \stardocnumber \\
-   \stardocauthors \\
-   \stardocdate
-   \begin{rawhtml} </I> </P> \end{rawhtml}
-   \begin{rawhtml} <P> <I> \end{rawhtml}
-   (For the Fortran version of this document, please see
-    \xref{SUN/210}{sun210}{}.)
-   \begin{rawhtml} </I> </P> \end{rawhtml}
-   \begin{rawhtml} <H3> \end{rawhtml}
-      \htmladdnormallink{CCLRC}{http://www.cclrc.ac.uk} /
-      \htmladdnormallink{Rutherford Appleton Laboratory}
-                        {http://www.cclrc.ac.uk/ral} \\
-      \htmladdnormallink{Particle Physics \& Astronomy Research Council}
-                        {http://www.pparc.ac.uk} \\
-   \begin{rawhtml} </H3> <H2> \end{rawhtml}
-      \htmladdnormallink{Starlink Project}{http://www.starlink.rl.ac.uk/}
-   \begin{rawhtml} </H2> \end{rawhtml}
-   \htmladdnormallink{\htmladdimg{source.gif} Retrieve hardcopy}
-      {http://www.starlink.rl.ac.uk/cgi-bin/hcserver?\stardocsource}\\
-
-%  HTML document table of contents. 
-%  ================================
-%  Add table of contents header and a navigation button to return to this 
-%  point in the document (this should always go before the abstract \section). 
-  \label{stardoccontents}
-  \begin{rawhtml} 
-    <HR>
-    <H2>Contents</H2>
-  \end{rawhtml}
-  \htmladdtonavigation{\htmlref{\htmladdimg{contents_motif.gif}}
-        {stardoccontents}}
-
-% ? New section for abstract if used.
-  \section{\xlabel{abstract}Abstract}
-% ? End of new section for abstract
-\end{htmlonly}
-
-% -----------------------------------------------------------------------------
-% ? Document Abstract. (if used)
-%  ==================
-\stardocabstract
-% ? End of document abstract
-% -----------------------------------------------------------------------------
-% ? Document Copyright Statement.
-%  =============================
-   \begin{latexonly}
-      \newpage
-      \vspace*{\fill}
-      \stardoccopyright
-   \end{latexonly}
-% ? End of Document Copyright Statement.
-% -----------------------------------------------------------------------------
-% ? Latex document Table of Contents (if used).
-%  ===========================================
-  \cleardoublepage
-  \cleardoublepage
-  \begin{latexonly}
-    \setlength{\parskip}{0mm}
-    \latexonlytoc
-    \setlength{\parskip}{\medskipamount}
-    \markboth{\stardocname}{\stardocname}
-  \end{latexonly}
-% ? End of Latex document table of contents
-% -----------------------------------------------------------------------------
-\cleardoublepage
-\setcounter{page}{1}
-
-\null\vspace {5mm}
-\begin{latexonly}
-   \begin {center}
-   \rule{80mm}{0.5mm} \\ [1ex]
-   {\Large\bf \stardoctitle \\ [2.5ex]
-              \stardocversion} \\ [2ex]
-   \rule{80mm}{0.5mm}
-
-   \vspace{10mm}   
-   {\em{This is the C version of this document.\\
-        For the Fortran version, please see SUN/210.}}
-   \end{center}
-\end{latexonly}
-
-% Main text of document.
-\vspace{7mm}
-\pagenumbering{arabic}
-\section{Introduction}
-
-Welcome to the AST library. If you are writing software for astronomy
-and need to use celestial coordinates ({\em{e.g.}}\ RA and Dec), spectral
-coordinates ({\em{e.g.}}\ wavelength, frequency, {\em{etc.}}), or
-other coordinate system information, then this library should be of
-interest. It provides solutions for most of the problems you will meet
-and allows you to write robust and flexible software. It is able to read
-and write WCS information in a variety of formats, including 
-\htmladdnormallink{FITS-WCS}{http://fits.gsfc.nasa.gov/fits_wcs.html}. 
-
-%\subsection{TBW---What is a World Coordinate \htmlref{System}{System}?}
-
-\subsection{What Problems Does AST Tackle?}
-
-Here are some of the main problems you may face when handling world
-coordinate system (WCS) information and the solutions that AST
-provides:
-
-\begin{description}
-\item[1. The Variety of Coordinate Systems]\mbox{}\\
-Astronomers use a wide range of differing coordinate systems to describe
-positions within a variety of physical domains. For instance, there are a 
-large number of celestial coordinate systems in use within astronomy to
-describe positions on the sky. Understanding these, and knowing how to 
-convert coordinates between them, can require considerable expertise. It 
-can also be difficult to decide which of them your software should support.
-The same applies to coordinate systems describing other domains, such as
-position within an electro-magnetic spectrum.
-
-{\bf{Solution.}} AST has built-in knowledge of many coordinate systems
-and allows you to convert freely between them without specialist
-knowledge. This avoids the need to embed details of specific
-coordinate systems in your software. You also benefit automatically
-when new coordinate systems are added to AST.
-
-\item[2. Storing and Retrieving WCS Information]\mbox{}\\
-Storing coordinate system information in astronomical datasets and
-retrieving it later can present a considerable challenge. Typically,
-it requires knowledge of rather complex conventions
-({\em{e.g.}}\ FITS) which are low-level, often mis-interpreted and may
-be subject to change. Exchanging information with other software
-systems is further complicated by the number of different conventions
-in use.
-
-{\bf{Solution.}} AST combines a unifying high-level description of WCS
-information with the ability to save and restore this using a variety
-of formats. Details of the formats, which include FITS, are handled
-internally by AST. This frees you from the need to understand them or
-embed the details in your software. Again, you benefit automatically
-when new formats are added to AST.
-
-\item[3. Generating Graphical Output]\mbox{}\\
-Producing graphical displays involving curvilinear coordinate systems,
-such as celestial coordinate grids, can be complicated. Particular
-difficulties arise when handling large areas of sky, the polar regions
-and discontinuous ({\em{e.g.}}\ segmented) sky projections.  Even just
-numbering and labelling curvilinear axes is rarely straightforward.
-
-{\bf{Solution.}} AST provides plotting facilities especially designed
-for use with curvilinear coordinate systems. These include the
-plotting of axes and complete labelled coordinate grids.  A large
-number of options are provided for tailoring the output to your
-specific needs.
-
-\item[4. Aligning Data from Different Sources]\mbox{}\\
-One of the main uses of coordinate systems is to facilitate the
-inter-comparison of data from different sources. A typical use might
-be to plot (say) radio contours over an optical image.  In practice,
-however, different celestial coordinate systems may have been used,
-making accurate alignment far from simple.
-
-{\bf{Solution}} AST provides a one-step method of aligning datasets,
-searching for all possible intermediate coordinate systems.  This
-makes it simple to directly inter-relate the pixel coordinates of
-different datasets.
-
-\item[5. Handling Different Types of Coordinate \htmlref{System}{System}]\mbox{}\\
-Not all coordinate systems used in astronomy are celestial ones, so if
-you are writing general-purpose software such as (say) a display tool,
-you may also need to handle axes representing wavelength, distance,
-time or whatever else comes along. Obviously, you would prefer not to
-handle each one as a special case.
-
-{\bf{Solution}} AST uses the same flexible high-level model to
-describe all types of coordinate system. This allows you to write
-software that handles different kinds of coordinate axis without
-introducing special cases.
-\end{description}
-
-\subsection{Other Design Objectives}
-
-As well as its scientific objectives, the AST library's design
-includes a number of technical criteria intended to make it applicable
-to as wide a range of projects as possible. The main considerations
-are described here:
-
-\begin{enumerate}
-\item {\bf{Minimum Software Dependencies.}}
-The AST library depends on no other other software\footnote{It now comes with a
-minimal cut-down version of the widely-available SLALIB positional astronomy 
-library (\xref{SUN/67}{sun67}{}), including just those functions needed
-by AST, and the previous dependency on SLALIB is no longer present}.
-
-\item {\bf{Environment Independence.}}
-AST is designed so that it can operate in a variety of ``programming
-environments'' and is not tied to any particular one. To allow this,
-it uses simple, flexible interfaces to obtain the following services:
-
-\begin{itemize}
-\item {\bf{Data Storage.}} Data I/O operations are based on text
-and/or FITS headers. This makes it easy to interface to a wide variety
-of astronomical data formats in a machine-independent way.
-
-\item {\bf{Graphics.}} Graphical output is produced {\em{via}} a
-simple generic graphics interface, which may easily be re-implemented
-over different graphics systems. AST provides a default implementation
-based on the widely-used PGPLOT graphics system
-(\xref{SUN/15}{sun15}{}).
-
-\item {\bf{Error Handling.}} Error messages are written to standard
-error by default, but go through a simple generic interface similar to
-that used for graphics (above). This permits error message delivery
-{\em{via}} other routes when necessary ({\em{e.g.}} in a graphical
-interface).
-\end{itemize}
-
-\item {\bf{Multiple Language Support.}}
-AST has been designed to be called from more than one language.
-Both C and Fortran interfaces are available (see
-\xref{SUN/210}{sun210}{} for the Fortran version)
-and use from C$++$ is also straightforward if the C interface is
-included using:
-
-\begin{quote}
-\small
-\begin{verbatim}
-extern "C" {
-#include "ast.h"
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A JNI interface (known as ``JNIAST'' - see 
-\htmladdnormallink{http://www.starlink.ac.uk/jniast/}
-{http://www.starlink.ac.uk/jniast/}) has also been developed by Starlink 
-which allows AST to be used from Java.
-
-\item {\bf{\htmlref{Object}{Object} Oriented Design.}}
-AST uses ``object oriented'' techniques internally in order to provide
-a flexible and easily-extended programming model.  A fairly
-traditional calling interface is provided, however, so that the
-library's facilities are easily accessible to programmers using
-C and Fortran.
-
-\item {\bf{Portability.}}
-AST is implemented entirely in ANSI standard C and, when called
-{\em{via}} its C interface, makes no explicit use of any
-machine-dependent facilities.
-
-The Fortran interface is, unavoidably, machine dependent. However, the
-potential for problems has been minimised by encapsulating the
-interface layer in a compact set of C macros which facilitate its
-transfer to other platforms. No Fortran compiler is needed to build
-the library.
-
-Currently, AST is supported by Starlink on PC~Linux, Sun~Solaris and
-Tru64~Unix (formerly DEC~UNIX) platforms.
-\end{enumerate}
-
-\subsection{What Does ``AST'' Stand For?}
-
-The library name ``AST'' stands for ``ASTrometry Library''. The name
-arose when it was thought that knowledge of ``astrometry''
-({\em{i.e.}}\ celestial coordinate systems) would form the bulk of the
-library.  In fact, it turns out that astrometry forms only a minor
-component, but the name AST has stuck.
-
-\cleardoublepage
-\section{Overview of AST Concepts}
-
-This section presents a brief overview of AST concepts. It is intended
-as a basic orientation course before you move on to the more technical
-considerations in subsequent sections.
-
-\subsection{\label{ss:mappingoverview}Relationships Between Coordinate Systems}
-
-The relationships between coordinate systems are represented in AST by
-Objects called Mappings. A \htmlref{Mapping}{Mapping} does not represent a coordinate
-system itself, but merely the process by which you move from one
-coordinate system to another related one.
- 
-\begin{latexonly}
-   A convenient picture of a Mapping is as a ``black box''
-   (Figure~\ref{fig:mapping}) into which you can feed sets of
-   coordinates.
-   \begin{figure}[bhtp]
-   \begin{center}
-   \includegraphics[scale=0.7]{sun211_figures/mapping.eps}
-   \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
-   \label{fig:mapping}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   A convenient picture of a Mapping is as a ``black box'' (see Figure
-   below) into which you can feed sets of coordinates.
-   \begin{quote}
-   \begin{figure}[bhtp]
-   \label{fig:mapping}
-   \includegraphics[scale=1.2]{sun211_figures/mapping.eps}
-   \caption{A Mapping viewed as a ``black box'' for transforming coordinates.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-For each set you feed in, the Mapping returns a corresponding set of
-transformed coordinates. Since each set of coordinates represents a
-point in a coordinate space, the Mapping acts to inter-relate
-corresponding positions in the two spaces, although what these spaces
-represent is unspecified.  Notice that a Mapping need not have the
-same number of input and output coordinates. That is, the two
-coordinate spaces which it inter-relates need not have the same number
-of dimensions.
-
-In many cases, the transformation can, in principle, be performed in
-either direction: either from the {\em{input}} coordinate space to the
-{\em{output,}} or {\em{vice versa.}} The first of these is termed the
-{\em{forward}} transformation and the other the {\em{inverse}}
-transformation.
-
-
-{\bf{Further reading:}} For a more complete discussion of Mappings,
-see~\secref{ss:mappings}.
-
-\subsection{\label{ss:mappingselection}Mappings Available}
-
-The basic concept of a \htmlref{Mapping}{Mapping} (\secref{ss:mappingoverview}) is rather
-generic and obviously it is necessary to have specific Mappings that
-implement specific relationships between coordinate systems. AST
-provides a range of these, to perform transformations such as the
-following and, where appropriate, their inverses:
-
-\begin{itemize}
-\item Conversions between various celestial coordinate systems (the
-\htmlref{SlaMap}{SlaMap}).
-
-\item Conversions between various spectral coordinate systems (the
-\htmlref{SpecMap}{SpecMap} and \htmlref{GrismMap}{GrismMap}).
-
-\item Conversions between various time systems (the \htmlref{TimeMap}{TimeMap}).
-
-\item Conversion between 2-dimensional spherical celestial coordinates
-(longitude and latitude) and a 3-dimensional vectorial positions (the \htmlref{SphMap}{SphMap}).
-
-\item Various projections of the celestial sphere on to 2-dimensional
-coordinate spaces---{\em{i.e.}}\ map projections (the \htmlref{DssMap}{DssMap} and \htmlref{WcsMap}{WcsMap}).
-
-\item Permutation, introduction and elimination of coordinates (the
-\htmlref{PermMap}{PermMap}).
-
-\item Various linear coordinate transformations (the \htmlref{MatrixMap}{MatrixMap}, \htmlref{WinMap}{WinMap},
-\htmlref{ShiftMap}{ShiftMap} and \htmlref{ZoomMap}{ZoomMap}).
-
-\item General N-dimensional polynomial transformations (the \htmlref{PolyMap}{PolyMap}).
-
-\item Lookup tables (the \htmlref{LutMap}{LutMap}).
-
-\item General-purpose transformations expressed using arithmetic
-operations and functions similar to those available in C (the
-\htmlref{MathMap}{MathMap}).
-
-\item Transformations for internal use within a program, based on
-private transformation functions which you write yourself in C (the
-\htmlref{IntraMap}{IntraMap}).
-\end{itemize}
-
-{\bf{Further reading:}} For a more complete description of each of the
-Mappings mentioned above, see its entry in
-\appref{ss:classdescriptions}. In addition, see the discussion of the
-PermMap in \secref{ss:permmapexample}, the \htmlref{UnitMap}{UnitMap} in
-\secref{ss:unitmapexample} and the IntraMap in
-\secref{ss:intramaps}. The ZoomMap is used as an example throughout
-\secref{ss:primer}.
-
-\subsection{\label{ss:cmpmapoverview}Compound Mappings}
-
-The Mappings described in \secref{ss:mappingselection} provide a set
-of basic building blocks from which more complex Mappings may be
-constructed. The key to doing this is a type of \htmlref{Mapping}{Mapping} called a
-\htmlref{CmpMap}{CmpMap}, or compound Mapping.  A CmpMap's role is, in principle, very
-simple: it allows any other pair of Mappings to be joined together
-into a single entity which behaves as if it were a single Mapping. A
-CmpMap is therefore a container for another pair of Mappings.
-
-\begin{latexonly}
-   A pair of Mappings may be combined using a CmpMap in either of two
-   ways. The first of these, {\em{in series,}} is illustrated in
-   Figure~\ref{fig:seriescmpmap}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.5]{sun211_figures/series.eps}
-   \caption{A CmpMap (compound Mapping) composed of two component
-   Mappings joined in series. The output coordinates of the first Mapping
-   feed into the input coordinates of the second one, so that the whole
-   entity behaves like a single Mapping.}
-   \label{fig:seriescmpmap}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   A pair of Mappings may be combined using a CmpMap in either of two
-   ways. The first of these, {\em{in series,}} is illustrated in the
-   following Figure.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:seriescmpmap}
-   \includegraphics[scale=1.0]{sun211_figures/series.eps}
-   \caption{A CmpMap (compound Mapping) composed of two component
-   Mappings joined in series. The output coordinates of the first Mapping
-   feed into the input coordinates of the second one, so that the whole
-   entity behaves like a single Mapping.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-\begin{latexonly}
-   Here, the transformations implemented by each component Mapping are
-   performed one after the other, with the output from the first Mapping
-   feeding into the second.  The second way, {\em{in parallel,}} is shown in
-   Figure~\ref{fig:parallelcmpmap}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.75]{sun211_figures/parallel.eps}
-   \caption{A CmpMap composed of two Mappings joined in parallel. Each
-   component Mapping acts on a complementary subset of the input and
-   output coordinates.}
-   \label{fig:parallelcmpmap}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   Here, the transformations implemented by each component Mapping are
-   performed one after the other, with the output from the first Mapping
-   feeding into the second.  The second way, {\em{in parallel,}} is shown in
-   the Figure below.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:parallelcmpmap}
-   \includegraphics[scale=1.0]{sun211_figures/parallel.eps}
-   \caption{A CmpMap composed of two Mappings joined in parallel. Each
-   component Mapping acts on a complementary subset of the input and
-   output coordinates.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-In this case, each Mapping acts on a complementary subset of the
-input and output coordinates.\footnote{A pair of Mappings can be combined
-in a third way using a \htmlref{TranMap}{TranMap}. A TranMap allows the forward
-transformation of one Mapping to be combined with the inverse
-transformation of another to produce a single Mapping.}
-
-\begin{latexonly}
-   The CmpMap forms the key to building arbitrarily complex Mappings
-   because it is itself a form of Mapping. This means that a CmpMap may
-   contain other CmpMaps as components
-   ({\em{e.g.}}\ Figure~\ref{fig:complexcmpmap}). This nesting of CmpMaps
-   can be repeated indefinitely, so that complex Mappings may be built in
-   a hierarchical manner out of simper ones.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.6]{sun211_figures/complex.eps}
-   \caption{CmpMaps (compound Mappings) may be nested in order to
-   construct complex Mappings out of simpler building blocks.}
-   \label{fig:complexcmpmap}
-   \end{center}
-   \end{figure}
-   This gives AST great flexibility in the coordinate transformations it
-   can describe.
-\end{latexonly}
-\begin{htmlonly}
-   The CmpMap forms the key to building arbitrarily complex Mappings
-   because it is itself a form of Mapping. This means that a CmpMap may
-   contain other CmpMaps as components ({\em{e.g.}}\ the Figure
-   below). This nesting of CmpMaps can be repeated indefinitely, so that
-   complex Mappings may be built in a hierarchical manner out of simper
-   ones.  This gives AST great flexibility in the coordinate
-   transformations it can describe.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:complexcmpmap}
-   \includegraphics[scale=0.8]{sun211_figures/complex.eps}
-   \caption{CmpMaps (compound Mappings) may be nested in order to
-   construct complex Mappings out of simpler building blocks.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of CmpMaps,
-see \secref{ss:cmpmaps}. Also see the CmpMap entry in
-\appref{ss:classdescriptions}.
-
-\subsection{Representing Coordinate Systems}
-
-\begin{latexonly}
-   While Mappings (\secref{ss:mappingoverview}) represent the
-   relationships between coordinate systems in AST, the coordinate
-   systems themselves are represented by Objects called Frames
-   (Figure~\ref{fig:frames}).
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.75]{sun211_figures/frames.eps}
-   \caption{(a) A basic \htmlref{Frame}{Frame} is used to represent a Cartesian coordinate
-   system, here 2-dimensional. (b) A \htmlref{SkyFrame}{SkyFrame} represents a (spherical)
-   celestial coordinate system. (c) The axis order of any Frame may be
-   permuted to match the coordinate space it describes.}
-   \label{fig:frames}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   While Mappings (\secref{ss:mappingoverview}) represent the
-   relationships between coordinate systems in AST, the coordinate
-   systems themselves are represented by Objects called Frames (see
-   Figure below).
-   \begin{quote}
-   \begin{figure}
-   \label{fig:frames}
-   \includegraphics[scale=1.5]{sun211_figures/frames.eps}
-   \caption{(a) A basic Frame is used to represent a Cartesian coordinate
-   system, here 2-dimensional. (b) A SkyFrame represents a (spherical)
-   celestial coordinate system. (c) The axis order of any Frame may be
-   permuted to match the coordinate space it describes.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-A Frame is similar in concept to the frame you might draw around a
-graph.  It contains information about the labels which appear on the
-axes, the axis units, a title, knowledge of how to format the
-coordinate values on each axis, {\em{etc.}}  An AST Frame is not,
-however, restricted to two dimensions and may have any number of axes.
-
-A basic Frame may be used to represent a Cartesian coordinate system
-by setting values for its {\em attributes} (all AST Objects have
-values associated with them called attributes, which may be set and
-enquired).  Usually, this would involve setting appropriate axis
-labels and units, for example.  Functions are provided for use with
-Frames to perform operations such as formatting coordinate values as
-text, calculating distances between points, interchanging axes,
-{\em{etc.}}
-
-There are several more specialised forms of Frame, which provide the
-additional functionality required when handling coordinates within some
-specific physical domain. This ranges from tasks such as formatting axis
-values, to complex tasks such as determining the transformation between
-any pair of related coordinate systems. For instance, the SkyFrame
-(Figure~\ref{fig:frames}b,c), represents celestial coordinate systems,
-the \htmlref{SpecFrame}{SpecFrame} represents spectral coordinate systems, and the \htmlref{TimeFrame}{TimeFrame} 
-represents time coordinate systems. All these provide a wide range of 
-different systems for describing positions within their associated physical 
-domain, and these may be selected by setting appropriate attributes.  
-
-\begin{latexonly}
-   As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
-   to merge two Frames together to form a compound Frame, or \htmlref{CmpFrame}{CmpFrame}, in
-   which both sets of axes are combined.  One could, for example, have
-   celestial coordinates on two axes and an unrelated coordinate
-   (wavelength, perhaps) on a third (Figure~\ref{fig:cmpframe}).
-   Knowledge of the relationships between the axes is preserved
-   internally by the process of constructing the CmpFrame which
-   represents them.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.85]{sun211_figures/cmpframe.eps}
-   \caption{A CmpFrame (compound Frame) formed by combining two simpler
-   Frames. Note how the special relationship which exists between the RA
-   and Dec axes is preserved within this data structure. As with compound
-   Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
-   order to build more complex Frames.}
-   \label{fig:cmpframe}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   As with compound Mappings (\secref{ss:cmpmapoverview}), it is possible
-   to merge two Frames together to form a compound Frame, or CmpFrame, in
-   which both sets of axes are combined.  One could, for example, have
-   celestial coordinates on two axes and an unrelated coordinate
-   (wavelength, perhaps) on a third (see Figure below).  Knowledge of the
-   relationships between the axes is preserved internally by the process
-   of constructing the CmpFrame which represents them.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:cmpframe}
-   \includegraphics[scale=1.5]{sun211_figures/cmpframe.eps}
-   \caption{A CmpFrame (compound Frame) formed by combining two simpler
-   Frames. Note how the special relationship which exists between the RA
-   and Dec axes is preserved within this data structure. As with compound
-   Mappings (Figure~\ref{fig:complexcmpmap}), CmpFrames may be nested in
-   order to build more complex Frames.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-{\bf{Further reading:}} For a more complete description of Frames see
-\secref{ss:frames}, for SkyFrames see \secref{ss:skyframes} and for 
-SpecFrames see \secref{ss:specframes}.  Also see the Frame, SkyFrame,
-SpecFrame, TimeFrame and CmpFrame entries in \appref{ss:classdescriptions}.
-
-\subsection{Networks of Coordinate Systems}
-
-\begin{latexonly}
-   Mappings and Frames may be connected together to form networks called
-   FrameSets, which are used to represent sets of inter-related
-   coordinate systems (Figure~\ref{fig:frameset}).
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.75]{sun211_figures/frameset.eps}
-   \caption{A \htmlref{FrameSet}{FrameSet} is a network of Frames inter-connected by Mappings
-   such that there is exactly one conversion path, {\em{via}} Mappings,
-   between any pair of Frames.}
-   \label{fig:frameset}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   Mappings and Frames may be connected together to form networks called
-   FrameSets, which are used to represent sets of inter-related
-   coordinate systems (see Figure below).
-   \begin{quote}
-   \begin{figure}
-   \label{fig:frameset}
-   \includegraphics[scale=1.0]{sun211_figures/frameset.eps}
-   \caption{A FrameSet is a network of Frames inter-connected by Mappings
-   such that there is exactly one conversion path, {\em{via}} Mappings,
-   between any pair of Frames.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-A FrameSet may be extended by adding a new \htmlref{Frame}{Frame} to it, together with
-an associated \htmlref{Mapping}{Mapping} which relates the new coordinate system to one
-which is already present.  This process ensures that there is always
-exactly one path, {\em{via}} Mappings, between any pair of Frames.  A
-function is provided for identifying this path and returning the
-complete Mapping.
-
-One of the Frames in a FrameSet is termed its {\em{base}} Frame.  This
-underlies the FrameSet's purpose, which is to calibrate datasets and
-other entities by attaching coordinate systems to them.  In this
-context, the base Frame represents the ``native'' coordinate system
-(for example, the pixel coordinates of an image).  Similarly, one
-Frame is termed the {\em{current}} Frame and represents the
-``currently-selected'' coordinates.  It might, typically, be a
-celestial or spectral coordinate system and would be used during 
-interactions with
-a user, as when plotting axes on a graph or producing a table of
-results.  Other Frames within the FrameSet represent a library of
-alternative coordinate systems which a software user can select by
-making them current.
-
-{\bf{Further reading:}} For a more complete description of
-FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}. Also
-see the FrameSet entry in \appref{ss:classdescriptions}.
-
-\subsection{Input/Output Facilities}
-
-AST allows you to convert any kind of \htmlref{Object}{Object} into a stream of text
-which contains a full description of that Object. This text may be
-written out by one program and read back in by another, thus allowing
-the original Object to be reconstructed.
-
-The filter which converts Objects into text and back again is itself a
-kind of Object, called a \htmlref{Channel}{Channel}. A Channel provides a number of
-options for controlling the information content of the text, such as
-the addition of comments for human interpretation.  It is also
-possible to intercept the text being processed by a Channel so that it
-may be redirected to/from any chosen external data store, such as a
-text file, an astronomical dataset, or a network connection.
-
-The text format used by the basic Channel class is peculiar to the AST
-library - no other software will understand it. However, more specialised 
-forms of Channel are provided which use text formats more widely
-understood.
-
-To further facilitate the storage of coordinate system information in
-astronomical datasets, a more specialised form of Channel called a
-\htmlref{FitsChan}{FitsChan} is provided. Instead of using free-format text, a FitsChan
-converts AST Objects to and from FITS header cards. It also allows the
-information to be encoded in the FITS cards in a number of ways
-(called {\em{encodings}}), so that WCS information from a variety of
-sources can be handled.
-
-Another sub-class of Channel, called \htmlref{XmlChan}{XmlChan}, is a specialised form of
-Channel that stores the text in the form of XML markup. Currently, two
-markup formats are provided by the XmlChan class, one is closely related
-to the text format produced by the basic Channel class (currently, no
-schema or DTD is available describing this format). The other is a subset
-of an early draft of the IVOA Space-Time-Coordinates XML (STC-X) schema
-(V1.20) described at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html
-}\footnote{XML documents which use only the subset of the STC schema
-supported by AST can be read by the XmlChan class to produce
-corresponding AST objects (subclasses of the \htmlref{Stc}{Stc} class). However, the
-reverse is not possible. That is, AST objects can not currently be
-written out in the form of STC documents.}. The version of STC-X that has
-been adopted by the IVOA differs in several significant respects from
-V1.20, and therefore this XmlChan format is of historical interest only.
-
-Finally, the \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA STC-S region descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of STC metadata. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a 
-region within an AST-supported astronomical coordinate system to be converted 
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa.
-
-{\bf{Further reading:}} For a more complete description of Channels
-see \secref{ss:channels} and for FitsChans see \secref{ss:nativefits}
-and \secref{ss:foreignfits}. Also see the Channel and FitsChan entries
-in \appref{ss:classdescriptions} and the \htmlref{Encoding}{Encoding} entry in
-\appref{ss:attributedescriptions}.
-
-\subsection{Producing Graphical Output}
-
-Graphical output is supported by a specialised form of \htmlref{FrameSet}{FrameSet} called
-a \htmlref{Plot}{Plot}, whose base \htmlref{Frame}{Frame} corresponds with the native coordinates of
-the underlying graphics system.  Plotting operations are specified in
-{\em{physical coordinates}} which correspond with the Plot's current
-Frame. Typically, this might be a celestial coordinate system.
-
-Operations, such as drawing lines, are automatically transformed from
-physical to graphical coordinates before plotting, using an adaptive
-algorithm which ensures smooth curves (because the transformation is
-usually non-linear).  ``Missing'' coordinates ({\em{e.g.}}\ graphical
-coordinates which do not project on to the celestial sphere),
-discontinuities and generalised clipping are all consistently handled.
-It is possible, for example, to plot in equatorial coordinates and
-clip in galactic coordinates.  The usual plotting operations are
-provided (text, markers), but a geodesic curve replaces the primitive
-straight line element.  There is also a separate function for drawing
-axis lines, since these are normally not geodesics.
-
-In addition to drawing coordinate grids over an area of the sky, another
-common use of the Plot class is to produce line plots such as flux
-against wavelength, displacement again time, \emph{etc}. For these
-situations the current Frame of the Plot would be a compound Frame
-(\htmlref{CmpFrame}{CmpFrame}) containing a pair of 1-dimensional Frames - the first
-representing the X axis quantity (wavelength, time, etc), and the second
-representing the Y axis quantity (flux, displacement, etc). The Plot
-class includes an option for axes to be plotted logarithmically.
-
-\begin{latexonly}
-   Perhaps the most useful graphics function available is for drawing
-   fully annotated coordinate grids ({\em{e.g.}}\ Figure~\ref{fig:gridplot}).
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.8,angle=-90]{sun211_figures/gridplot_bw.eps}
-   \caption{A labelled coordinate grid for an all-sky zenithal equal area
-   projection in ecliptic coordinates. This was composed and drawn
-   {\em{via}} a Plot using a
-   single function call.}
-   \label{fig:gridplot}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   Perhaps the most useful graphics function available is for drawing
-   fully annotated coordinate grids ({\em{e.g.}}\ the Figure below).
-   \begin{quote}
-   \begin{figure}
-   \label{fig:gridplot}
-   \includegraphics[scale=1.2,angle=-90]{sun211_figures/gridplot.eps}
-   \caption{A labelled coordinate grid for an all-sky zenithal equal area
-   projection in ecliptic coordinates. This was composed and drawn
-   {\em{via}} a Plot using a
-   single function call.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-This uses a general algorithm which does not depend on knowledge of
-the coordinates being represented, so can also handle
-programmer-defined coordinate systems.  Grids for all-sky projections,
-including polar regions, can be drawn and most aspects of the output
-(colour, line style, {\em{etc.}}) can be adjusted by setting
-appropriate Plot attributes.
-
-{\bf{Further reading:}} For a more complete description of
-Plots and how to produce graphical output, see \secref{ss:plots}. Also
-see the Plot entry in \appref{ss:classdescriptions}.
-
-\cleardoublepage
-\section{\label{ss:howto}How To\ldots}
-
-For those of you with a plane to catch, this section provides some
-instant templates and recipes for performing the most
-commonly-required operations using AST, but without going into
-detail. The examples given (sort of) follow on from each other, so you
-should be able to construct a variety of programs by piecing them
-together.  Note that some of them appear longer than they actually
-are, because we have included plenty of comments and a few options
-that you probably won't need.
-
-If any of this material has you completely baffled, then you may want
-to read the introduction to AST programming concepts in
-\secref{ss:primer} first. Otherwise, references to more detailed
-reading are given after each example, just in case they don't quite do
-what you want.
-
-\subsection{\ldots Obtain and Install AST}
-The AST library is available both as a stand-alone package and also as 
-part of the Starlink Software Collection\footnote{The Starlink Software 
-Collection can be downloaded from
-\htmladdnormallink{http://www.starlink.ac.uk/Download/}
-{http://www.starlink.ac.uk/Download/}.}. If your site has the Starlink
-Software Collection installed then AST should already be available. 
-
-If not, you can download the AST library by itself from
-\htmladdnormallink{http://www.starlink.ac.uk/ast/}
-{http://www.starlink.ac.uk/ast/}. 
-
-\subsection{\ldots Structure an AST Program}
-
-An AST program normally has the following structure:
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* Include the interface to the AST library. */
-#include "ast.h"
-
-/* Main program (or could be any function). */
-main () {
-   <normal C declarations and statements>
-
-/* Enclose the parts which use AST between the astBegin and astEnd macros. */
-   astBegin;
-   <C statements which use AST>
-   astEnd;
-
-   <maybe more C statements>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The use of \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd} is optional, but has the effect of
-tidying up after you have finished using AST, so is normally
-recommended. For more details of this, see \secref{ss:contexts}. For
-details of how to access the ``ast.h'' header file, see
-\secref{ss:accessingheaderfile}.
-
-\subsection{\label{ss:howtobuild}\ldots Build an AST Program}
-
-To build a simple AST program that doesn't use graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc program.c -L/star/lib -I/star/include `ast_link` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-To build a program which uses PGPLOT for graphics, use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc program.c -L/star/lib `ast_link -pgplot` -o program
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For more details about accessing the ``ast.h'' header file, see
-\secref{ss:accessingheaderfile}. For more
-details about linking programs, see \secref{ss:linking} and the
-description of the ``\htmlref{ast\_link}{ast_link}'' command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoreadwcs}\ldots Read a WCS Calibration from a Dataset}
-
-Precisely how you extract world coordinate system (WCS) information
-from a dataset obviously depends on what type of dataset it
-is. Usually, however, you should be able to obtain a set of FITS
-header cards which contain the WCS information (and probably much more
-besides). Suppose that ``cards'' is a pointer to a string 
-containing a complete set of concatenated FITS header cards (such as
-produced by the CFITSIO function fits\_hdr2str). Then proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-fitsfile *fptr;
-AstFitsChan *fitschan;
-AstFrameSet *wcsinfo;
-char *header;
-int nkeys, status;
-
-...
-
-/* Obtain all the cards in the header concatenated into a single dynamically 
-   allocated null-terminated character string. Note, we do not exclude
-   any cards since we may later modify the WCS information within the
-   header and consequently want to write the entire header out again. */
-   if( fits_hdr2str( fptr, 0, NULL, 0, &header, &nkeys, &status ) )
-          printf(" Error getting header\n");
-   ...
-
-/* Header obtained succesfully... */
-   } else {
-
-/* Create a FitsChan and fill it with FITS header cards. */
-      fitschan = astFitsChan( NULL, NULL, "" );
-      astPutCards( fitschan, header );
-
-/* Free the memory holding the concatenated header cards. */
-      header = free( header );
-
-/* Read WCS information from the FitsChan. */
-      wcsinfo = astRead( fitschan );
-
-      ...
-  
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-The result should be a pointer, ``wcsinfo'', to a \htmlref{FrameSet}{FrameSet} which
-contains the WCS information. This pointer can now be used to perform
-many useful tasks, some of which are illustrated in the following
-recipes.
-
-Some datasets which do not easily yield FITS header cards may require
-a different approach, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a \htmlref{FitsChan}{FitsChan}. In the case of the
-Starlink NDF data format, for example, all the above may be replaced
-by a single call to the function
-\xref{ndfGtwcs}{sun33}{ndfGtwcs}---see \xref{SUN/33}{sun33}{}.  The
-whole process can probably be encapsulated in a similar way for
-most data systems, whether they use FITS header cards or not.
-
-For more details about reading WCS information from datasets, see
-\secref{ss:identifyingfitsencoding} and
-\secref{ss:readingforeignfits}. For a more general description of
-FitsChans and their use with FITS header cards, see
-\secref{ss:nativefits} and \secref{ss:foreignfits}. For more details
-about FrameSets, see \secref{ss:framesets} and \secref{ss:fshigher}.
-
-\subsection{\ldots Validate WCS Information}
-
-Once you have read WCS information from a dataset, as in
-\secref{ss:howtoreadwcs}, you may wish to check that you have been
-successful. The following will detect and classify the things that
-might possibly go wrong:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <string.h>
-
-...
-
-if ( !astOK ) {
-   <an error occurred (a message will have been issued)>
-} else if ( wcsinfo == AST__NULL ) {
-   <there was no WCS information present>
-} else if ( strcmp( astGetC( wcsinfo, "Class" ), "FrameSet" ) ) {
-   <something unexpected was read (i.e. not a FrameSet)>
-} else {
-   <WCS information was read OK>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For more information about detecting errors in AST functions, see
-\secref{ss:errordetection}. For details of how to validate input data
-read by AST, see \secref{ss:validatinginput} and
-\secref{ss:readingforeignfits}.
-
-\subsection{\ldots Display AST Data}
-
-If you have a pointer to any AST \htmlref{Object}{Object}, you can display the data
-stored in that Object in textual form as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( wcsinfo );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have used a pointer to the \htmlref{FrameSet}{FrameSet} which we read earlier
-(\secref{ss:howtoreadwcs}).  The result is written to the program's
-standard output stream. This can be very useful during debugging.
-
-For more details about using \htmlref{astShow}{astShow}, see
-\secref{ss:displayingobjects}. For information about interpreting the
-output, also see \secref{ss:textualoutputformat}.
-
-\subsection{\label{ss:howtotransform}\ldots Convert Between Pixel and World Coordinates}
-
-You may use a pointer to a \htmlref{FrameSet}{FrameSet}, such as we read in
-\secref{ss:howtoreadwcs}, to transform a set of points between the
-pixel coordinates of an image and the associated world coordinates. If
-you are working in two dimensions, proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xpixel[ N ], ypixel[ N ];
-double xworld[ N ], yworld[ N ];
-
-...
-
-astTran2( wcsinfo, N, xpixel, ypixel, 1, xworld, yworld );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, N is the number of points to be transformed, ``xpixel'' and
-``ypixel'' hold the pixel coordinates, and ``xworld'' and ``yworld''
-receive the returned world coordinates.\footnote{By pixel coordinates,
-we mean a coordinate system in which the first pixel in the image is
-centred on (1,1) and each pixel is a unit square.  Note that the world
-coordinates will not necessarily be celestial coordinates, but if they
-are, then they will be in radians.}  To transform in the opposite
-direction, interchange the two pairs of arrays (so that the world
-coordinates are given as input) and change the fifth argument of
-\htmlref{astTran2}{astTran2} to zero.
-
-To transform points in one dimension, use \htmlref{astTran1}{astTran1}. In any other
-number of dimensions (or if the number of dimensions is initially
-unknown), use \htmlref{astTranN}{astTranN} or \htmlref{astTranP}{astTranP}. These functions are described in
-\appref{ss:functiondescriptions}.
-
-For more information about transforming coordinates, see
-\secref{ss:transforming} and \secref{ss:framesetasmapping}. For
-details of how to handle missing coordinates, see
-\secref{ss:badcoordinates}.
-
-\subsection{\label{ss:howtotestforcelestial}\ldots Test if a WCS is a Celestial Coordinate System}
-
-The world coordinate system (WCS) currently associated with an image
-may often be a celestial coordinate system, but this need not
-necessarily be the case. For instance, instead of right ascension and
-declination, an image might have a WCS with axes representing
-wavelength and slit position, or maybe just plain old pixels.
-
-If you have obtained a WCS calibration for an image, as in
-\secref{ss:howtoreadwcs}, in the form of a pointer ``wcsinfo'' to a
-\htmlref{FrameSet}{FrameSet}, then you may determine if the current coordinate system is a
-celestial one or not, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame;
-int issky;
-
-...
-
-/* Obtain a pointer to the current Frame and determine if it is a
-   SkyFrame. */
-frame = astGetFrame( wcsinfo, AST__CURRENT );
-issky = astIsASkyFrame( frame );
-frame = astAnnul( frame );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will set ``issky'' to 1 if the WCS is a celestial coordinate
-system, and to zero otherwise.
-
-\subsection{\label{ss:howtotestforspectral}\ldots Test if a WCS is a Spectral Coordinate System}
-Testing for a spectral coordinate system is basically the same as testing
-for a celestial coordinate system (see the previous section). The one
-difference is that you use the 
-astIsASpecFrame function
-in place of the 
-astIsASkyFrame function.
-
-\subsection{\label{ss:howtoformatcoordinates}\ldots Format Coordinates for Display}
-
-Once you have converted pixel coordinates into world coordinates
-(\secref{ss:howtotransform}), you may want to format them as text
-before displaying them. Typically, this would convert from (say)
-radians into something more comprehensible. Using the \htmlref{FrameSet}{FrameSet} pointer
-``wcsinfo'' obtained in \secref{ss:howtoreadwcs} and a pair of world
-coordinates ``xw'' and ``yw'' ({\em{e.g.}}\ see
-\secref{ss:howtotransform}), you could proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-const char *xtext, *ytext;
-double xw, yw;
-
-...
-
-xtext = astFormat( wcsinfo, 1, xw );
-ytext = astFormat( wcsinfo, 2, yw );
-
-(void) printf( "Position = %s, %s\n", xtext, ytext );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the second argument to \htmlref{astFormat}{astFormat} is the axis number.
-
-With celestial coordinates, this will usually result in sexagesimal
-notation, such as ``12:34:56.7''. However, the same method may be
-applied to any type of coordinates and appropriate formatting will be
-employed.
-
-For more information about formatting coordinate values and how to
-control the style of formatting used, see
-\secref{ss:formattingaxisvalues} and
-\secref{ss:formattingskyaxisvalues}. If necessary, also see
-\secref{ss:normalising} for details of how to ``normalise'' a set of
-coordinates so that they lie within the standard range ({\em{e.g.}}\ 0
-to 24 hours for right ascension and $\pm 90^\circ$ for
-declination).
-
-\subsection{\ldots Display Coordinates as they are Transformed}
-
-In addition to formatting coordinates as part of a program's output,
-you may also want to examine coordinate values while debugging your
-program. To save time, you can ``eavesdrop'' on the coordinate values
-being processed every time they are transformed. For example, when
-using the \htmlref{FrameSet}{FrameSet} pointer ``wcsinfo'' obtained in
-\secref{ss:howtoreadwcs} to transform coordinates
-(\secref{ss:howtotransform}), you could inspect the coordinate values
-as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( wcsinfo, "Report=1" );
-astTran2( wcsinfo, N, xpixel, ypixel, 1, xworld, yworld );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-By setting the FrameSet's \htmlref{Report}{Report} attribute to 1, coordinate
-transformations are automatically displayed on the program's standard
-output stream, appropriately formatted, for example:
-
-\begin{quote}
-\begin{verbatim}
-(42.1087, 20.2717) --> (2:06:03.0, 34:22:39)
-(43.0197, 21.1705) --> (2:08:20.6, 35:31:24)
-(43.9295, 22.0716) --> (2:10:38.1, 36:40:09)
-(44.8382, 22.9753) --> (2:12:55.6, 37:48:55)
-(45.7459, 23.8814) --> (2:15:13.1, 38:57:40)
-(46.6528, 24.7901) --> (2:17:30.6, 40:06:25)
-(47.5589, 25.7013) --> (2:19:48.1, 41:15:11)
-(48.4644, 26.6149) --> (2:22:05.6, 42:23:56)
-(49.3695, 27.5311) --> (2:24:23.1, 43:32:41)
-(50.2742, 28.4499) --> (2:26:40.6, 44:41:27)
-\end{verbatim}
-\end{quote}
-
-For a complete description of the Report attribute, see its entry in
-\appref{ss:attributedescriptions}.  For further details of how to set
-and enquire attribute values, see \secref{ss:settingattributes} and
-\secref{ss:gettingattributes}.
-
-\subsection{\ldots Read Coordinates Entered by a User}
-
-In addition to writing out coordinate values generated by your program
-(\secref{ss:howtoformatcoordinates}), you may also need to accept
-coordinates entered by a user, or perhaps read from a file. In this
-case, you will probably want to allow ``free-format'' input, so that
-the user has some flexibility in the format that can be used. You will
-probably also want to detect any typing errors.
-
-Let's assume that you want to read a number of lines of text, each
-containing the world coordinates of a single point, and to split each
-line into individual numerical coordinate values. Using the \htmlref{FrameSet}{FrameSet}
-pointer ``wcsinfo'' obtained earlier (\secref{ss:howtoreadwcs}), you
-could proceed as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char *t;
-char text[ MAXCHARS + 2 ];
-double coord[ 10 ];
-int iaxis, n, naxes;
-
-...
-
-/* Obtain the number of coordinate axes (if not already known). */
-naxes = astGetI( wcsinfo, "Naxes" );
-
-/* Loop to read each line of input text, in this case from the
-   standard input stream (your programming environment will probably
-   provide a better way of reading text than this). Set the pointer
-   "t" to the start of each line read. */
-while ( t = fgets( text, MAXCHARS + 2, stdin ) ) {
-
-/* Attempt to read a coordinate for each axis. */
-   for ( iaxis = 1; iaxis <= naxes; iaxis++ ) {
-      n = astUnformat( wcsinfo, iaxis, t, &coord[ iaxis - 1 ] );
-
-/* If nothing was read and this is not the first axis or the
-   end-of-string, try stepping over a separator and reading again. */
-   if ( !n && ( iaxis > 1 ) && *t )
-      n = astUnformat( wcsinfo, iaxis, ++t, &coord[ iaxis - 1 ] );
-
-/* Quit if nothing was read, otherwise move on to the next coordinate. */
-      if ( !n ) break;
-      t += n;
-   }
-
-/* Test for the possible errors that may occur... */
-
-/* Error detected by AST (a message will have been issued). */
-   if ( !astOK ) {
-      break;
-
-/* Error in input data at character t[n]. */
-   } else if ( *t || !n ) {
-      <handle the error, or report your own message here>
-      break;
-
-   } else {
-      <coordinates were read OK>
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This algorithm has the advantage of accepting free-format input in
-whatever style is appropriate for the world coordinates in use (under
-the control of the FrameSet whose pointer you provide). For example,
-wavelength values might be read as floating point numbers
-({\em{e.g.}}\ ``1.047'' or ``4787''), whereas celestial positions
-could be given in sexagesimal format ({\em{e.g.}}\ ``12:34:56'' or
-``12~34.5'') and would be converted into radians. Individual
-coordinate values may be separated by white space and/or any
-non-ambiguous separator character, such as a comma.
-
-For more information on reading coordinate values using the
-\htmlref{astUnformat}{astUnformat} function, see \secref{ss:unformattingaxisvalues}. For
-details of how sexagesimal formats are handled, and the forms of input
-that may be used for celestial coordinates, see
-\secref{ss:unformattingskyaxisvalues}.
-
-\subsection{\label{ss:howtocreatenewwcs}\ldots Create a New WCS Calibration}
-
-This section describes how to add a WCS calibration to a data set which you 
-are creating from scratch, rather than modifying an existing data set. 
-
-In most common cases, the simplest way to create a new WCS calibration
-from scratch is probably to create a set of strings describing the
-required calibration in terms of the keywords used by the FITS WCS
-standard, and then convert these strings into an AST \htmlref{FrameSet}{FrameSet} describing
-the calibration. This FrameSet can then be used for many other purposes, or
-simply stored in the data set. 
-
-The full FITS-WCS standard is quite involved, currently running to four
-separate papers, but the basic kernel is quite simple, involving the
-following keywords (all of which end with an integer axis index,
-indicated below by $<i>$):
-
-\begin{description}
-\item[CRPIX<i>]\mbox{}\\
-hold the pixel coordinates at a reference point 
-\item[CRVAL<i>]\mbox{}\\
-hold the corresponding WCS coordinates at the reference point 
-\item[CTYPE<i>]\mbox{}\\
-name the quantity represented by the WCS axes, together with the
-projection algorithm used to convert the scaled and rotated pixel coordinates 
-to WCS coordinates.
-\item[CD<i>\_<j>]\mbox{}\\
-a set of keywords which specify the elements of a matrix. This matrix scales
-pixel offsets from the reference point into the offsets required as input
-by the projection algorithm specified by the CTYPE keywords. This matrix 
-specifies the scale and rotation of the image. If there is no rotation
-the off-diagonal elements of the matrix (\emph{e.g.} CD1\_2 and
-CD2\_1) can be omitted. 
-\end{description}
-
-As an example consider the common case of a simple 2D image of the sky in 
-which north is parallel to the second pixel axis and east parallel to the 
-(negative) first pixel axis. The image scale is 1.2 arc-seconds per pixel
-on both axes, and the image is presumed to have been obtained with a
-tangent plane projection. Furthermore, it is known that pixel coordinates
-(100.5,98.4) correspond to an RA of 11:00:10 and a Dec. of  -23:26:02.
-A suitable set of FITS-WCS header cards could be:
-
-\begin{quote}
-\small
-\begin{verbatim}
-CTYPE1  = 'RA---TAN'       / Axis 1 represents RA with a tan projection
-CTYPE2  = 'DEC--TAN'       / Axis 2 represents Dec with a tan projection
-CRPIX1  = 100.5            / Pixel coordinates of reference point
-CRPIX2  = 98.4             / Pixel coordinates of reference point
-CRVAL1  = 165.04167        / Degrees equivalent of "11:00:10" hours
-CRVAL2  = -23.433889       / Decimal equivalent of "-23:26:02" degrees
-CD1_1   = -0.0003333333    / Decimal degrees equivalent of -1.2 arc-seconds
-CD2_2   = 0.0003333333     / Decimal degrees equivalent of 1.2 arc-seconds
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notes:
-\begin{itemize}
-\item a FITS header card begins with the keyword name starting at column 1, 
-has an equals sign in column 9, and the keyword value in columns 11 to 80.
-\item string values must be enclosed in single quotes.
-\item celestial longitude and latitude must both be specified in decimal degrees.
-\item the CD1\_1 value is negative to indicate that RA increases as the
-first pixel axis decreases.
-\item the (RA,Dec) coordinates will be taken as ICRS coordinates. For FK5
-you should add:
-
-\begin{quote}
-\small
-\begin{verbatim}
-RADESYS = 'FK5'           
-EQUINOX = 2005.6 
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The EQUINOX value defaults to J2000.0 if omitted. FK4 can also be used in
-place of FK5, in which case EQUINOX defaults to B1950.0. 
-
-\end{itemize}
-
-Once you have created these FITS-WCS header card strings, you should
-store them in a \htmlref{FitsChan}{FitsChan} and then read the corresponding FrameSet from the
-FitsChan. How to do this is described in \secref{ss:howtoreadwcs}.
-
-Having created the WCS calibration, you may want to store it in a data
-file. How to do this is described in \secref{ss:howtowritewcs}).\footnote{If 
-you are writing the WCS calibration to a FITS file you obviously
-have the choice of storing the FITS-WCS cards directly.}
-
-If the required WCS calibration cannot be described as a set of FITS-WCS 
-headers, then a different approach is necessary. In this case, you should
-first create a \htmlref{Frame}{Frame} describing pixel coordinates, and store this Frame
-in a new FrameSet. You should then create a new Frame describing the
-world coordinate system. This Frame may be a specific subclass of Frame such
-as a \htmlref{SkyFrame}{SkyFrame} for celestial coordinates, a \htmlref{SpecFrame}{SpecFrame} for spectral
-coordinates, a Timeframe for time coordinates, or a \htmlref{CmpFrame}{CmpFrame} for a combination 
-of different coordinates.
-You also need to create a suitable \htmlref{Mapping}{Mapping} which transforms pixel
-coordinates into world coordinates. AST provides many different types of
-Mappings, all of which can be combined together in arbitrary fashions to
-create more complicated Mappings. The WCS Frame should then be added into
-the FrameSet, using the Mapping to connect the WCS Frame with the pixel
-Frame.
-
-\subsection{\label{ss:howtomodifywcs}\ldots Modify a WCS Calibration}
-
-The usual reason for wishing to modify the WCS calibration associated
-with a dataset is that the data have been geometrically transformed in
-some way (here, we will assume a 2-dimensional image dataset). This
-causes the image features (stars, galaxies, {\em{etc.}}) to move with
-respect to the grid of pixels which they occupy, so that any
-coordinate systems previously associated with the image become
-invalid.
-
-To correct for this, it is necessary to set up a \htmlref{Mapping}{Mapping} which
-expresses the positions of image features in the new data grid in
-terms of their positions in the old grid. In both cases, the grid
-coordinates we use will have the first pixel centred at (1,1) with
-each pixel being a unit square.
-
-AST allows you to correct for any type of geometrical transformation
-in this way, so long as a suitable Mapping to describe it can be
-constructed. For purposes of illustration, we will assume here that
-the new image coordinates ``xnew'' and ``ynew'' can be expressed in
-terms of the old coordinates ``xold'' and ``yold'' as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xnew, xold, ynew, yold;
-double m[ 4 ], z[ 2 ];
-
-...
-
-xnew = xold * m[ 0 ] + yold * m[ 1 ] + z[ 0 ];
-ynew = xold * m[ 2 ] + yold * m[ 3 ] + z[ 1 ];
-\end{verbatim}
-\normalsize
-\end{quote}
-
-where ``m'' is a 2$\times$2 transformation matrix and ``z'' represents
-a shift of origin. This is therefore a general linear coordinate
-transformation which can represent displacement, rotation,
-magnification and shear.
-
-In AST, it can be represented by concatenating two Mappings. The first
-is a \htmlref{MatrixMap}{MatrixMap}, which implements the matrix multiplication. The second
-is a \htmlref{WinMap}{WinMap}, which linearly transforms one coordinate window on to
-another, but will be used here simply to implement the shift of
-origin (alternatively, a \htmlref{ShiftMap}{ShiftMap} could have been used in place of a
-WinMap). These Mappings may be constructed and concatenated as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstCmpMap *newmap;
-AstMatrixMap *matrixmap;
-AstWinMap *winmap;
-
-...
-
-/* The MatrixMap may be constructed directly from the matrix "m". */
-matrixmap = astMatrixMap( 2, 2, 0, m, "" );
-
-/* For the WinMap, we set up the coordinates of the corners of a unit
-   square (window) and then the same square shifted by the required
-   amount. */
-{
-   double ina[] = { 0.0, 0.0 };
-   double inb[] = { 1.0, 1.0 };
-   double outa[] = {       z[ 0 ],       z[ 1 ] };
-   double outb[] = { 1.0 + z[ 0 ], 1.0 + z[ 1 ] };
-
-/* The WinMap will then implement this shift. */
-   winmap = astWinMap( 2, ina, inb, outa, outb, "" );
-}
-
-/* Join the two Mappings together, so that they are applied one after
-   the other. */
-newmap = astCmpMap( matrixmap, winmap, 1, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You might, of course, create any other form of Mapping depending on
-the type of geometrical transformation involved. For an overview of
-the Mappings provided by AST, see \secref{ss:mappingselection}, and
-for a description of the capabilities of each class of Mapping, see
-its entry in \appref{ss:classdescriptions}. For an overview of how
-individual Mappings may be combined, see \secref{ss:cmpmapoverview}
-(\secref{ss:cmpmaps} gives more details).
-
-Assuming you have obtained a WCS calibration for your original image
-in the form of a pointer to a \htmlref{FrameSet}{FrameSet}, ``wcsinfo1''
-(\secref{ss:howtoreadwcs}), the Mapping created above may be used to
-produce a calibration for the new image as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *wcsinfo1, *wcsinfo2;
-
-...
-
-/* If necessary, make a copy of the WCS calibration, since we are
-   about to alter it. */
-wcsinfo2 = astCopy( wcsinfo1 );
-
-/* Re-map the base Frame so that it refers to the new data grid
-   instead of the old one. */
-astRemapFrame( wcsinfo2, AST__BASE, newmap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will produce a pointer, ``wcsinfo2'', to a new FrameSet in which
-all the coordinate systems associated with your original image are
-modified so that they are correctly registered with the new image
-instead.
-
-For more information about re-mapping the Frames within a FrameSet,
-see \secref{ss:remapframe}. Also see \secref{ss:wcsprocessingexample}
-for a similar example to the above, applicable to the case of reducing
-the size of an image by binning.
-
-\subsection{\label{ss:howtowritewcs}\ldots Write a Modified WCS Calibration to a Dataset}
-
-If you have modified the WCS calibration associated with a dataset,
-such as in the example above (\secref{ss:howtomodifywcs}), then you
-will need to write the modified version out along with any new data.
-
-In the same way as when reading a WCS calibration
-(\secref{ss:howtoreadwcs}), how you do this will depend on your data
-system, but we will assume that you wish to generate a set of FITS
-header cards that can be stored with the data. You should usually make
-preparations for doing this when you first read the WCS calibration
-from your input dataset by modifying the example given in
-\secref{ss:howtoreadwcs} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFitsChan *fitschan1;
-AstFrameSet *wcsinfo1;
-const char *encode;
-
-...
-
-/* Create an input FitsChan and fill it with FITS header cards. Note,
-   if you have all the header cards in a single string, use astPutCards in
-   place of astPutFits. */
-fitschan1 = astFitsChan( NULL, NULL, "" );
-for ( icard = 0; icard < ncard; icard++ ) astPutFits( fitschan1, cards[ icard ], 0 );
-
-/* Note which encoding has been used for the WCS information. */
-encode = astGetC( fitschan1, "Encoding" );
-
-/* Rewind the input FitsChan and read the WCS information from it. */
-astClear( fitschan1, "Card" );
-wcsinfo1 = astRead( fitschan1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note how we have added an enquiry to determine how the WCS information
-is encoded in the input FITS cards, storing a pointer to the resulting
-string in the ``encode'' variable. This must be done {\bf{before}}
-actually reading the WCS calibration.
-
-{\em{({\bf{N.B.}}\ If you will be making extensive use of astGetC in
-your program, then you should allocate a buffer and make a copy of
-this string, because the pointer returned by astGetC will only remain
-valid for 50 invocations of the function, and you will need to use the
-\htmlref{Encoding}{Encoding} value again later on.)}}
-
-Once you have produced a modified WCS calibration for the output
-dataset ({\em{e.g.}}\ \secref{ss:howtomodifywcs}), in the form of a
-\htmlref{FrameSet}{FrameSet} identified by the pointer ``wcsinfo2'', you can produce a new
-\htmlref{FitsChan}{FitsChan} containing the output FITS header cards as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFitsChan *fitschan2;
-AstFrameSet *wcsinfo2;
-
-...
-
-/* Make a copy of the input FitsChan, AFTER the WCS information has
-   been read from it. This will propagate all the input FITS header
-   cards, apart from those describing the input WCS calibration. */
-fitschan2 = astCopy( fitschan1 );
-
-/* If necessary, make modifications to the cards in "fitschan2"
-   (e.g. you might need to change NAXIS1, NAXIS2, etc., to account for
-   a change in image size). You probably only need to do this if your
-   data system does not provide these facilities itself. */
-<details not shown - see below>
-
-/* Alternatively, if your data system handles the propagation of FITS
-   header cards to the output dataset for you, then simply create an
-   empty FitsChan to contain the output WCS information alone.
-fitschan2 = astFitsChan( NULL, NULL, "" );
-*/
-
-/* Rewind the new FitsChan (if necessary) and attempt to write the
-   output WCS information to it using the same encoding method as the
-   input dataset. */
-astSet( fitschan2, "Card=1, Encoding=%s", encode );
-if ( !astWrite( fitschan2, wcsinfo2 ) ) {
-
-/* If this didn't work (the WCS FrameSet has become too complex), then
-   use the native AST encoding instead. */
-   astSet( fitschan2, "Encoding=NATIVE" );
-   (void) astWrite( fitschan2, wcsinfo2 );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For details of how to modify the contents of the output FitsChan in
-other ways, such as by adding, over-writing or deleting header cards,
-see \secref{ss:addressingfitscards}, \secref{ss:addingmulticards}, \secref{ss:addingfitscards} and
-\secref{ss:findingandchangingfits}.
-
-Once you have assembled the output FITS cards, you may retrieve them
-from the FitsChan that contains them as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char card[ 81 ];
-
-...
-
-astClear( fitschan2, "Card" );
-while ( astFindFits( fitschan2, "%f", card, 1 ) ) (void) printf( "%s\n", card );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have simply written each card to the standard output stream,
-but you would obviously replace this with a function invocation to
-store the cards in your output dataset.
-
-For data systems that do not use FITS header cards, a different
-approach may be needed, possibly involving use of a \htmlref{Channel}{Channel} or \htmlref{XmlChan}{XmlChan}
-(\secref{ss:channels}) rather than a FitsChan.  In the case of the
-Starlink NDF data format, for example, all of the above may be
-replaced by a single call to the function
-\xref{ndfPtwcs}{sun33}{ndfPtwcs}---see \xref{SUN/33}{sun33}{}. The
-whole process can probably be encapsulated in a similar way for most
-data systems, whether they use FITS header cards or not.
-
-For an overview of how to propagate WCS information through data
-processing steps, see \secref{ss:propagatingwcsinformation}.  For more
-information about writing WCS information to FitsChans, see
-\secref{ss:writingnativefits} and \secref{ss:writingforeignfits}.  For
-information about the options for encoding WCS information in FITS
-header cards, see \secref{ss:nativeencoding},
-\secref{ss:foreignencodings}, and the description of the Encoding
-attribute in \appref{ss:attributedescriptions}.  For a complete
-understanding of FitsChans and their use with FITS header cards, you
-should read \secref{ss:nativefits} and \secref{ss:foreignfits}.
-
-\subsection{\label{ss:howtoplotgrid}\ldots Display a Graphical Coordinate Grid}
-
-\begin{latexonly}
-   A common requirement when displaying image data is to plot an
-   associated coordinate grid ({\em{e.g.}}\ Figure~\ref{fig:overgrid})
-   over the displayed image.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.7]{sun211_figures/overgrid_bw.eps}
-   \caption{An example of a displayed image with a coordinate grid
-   plotted over it.}
-   \label{fig:overgrid}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   A common requirement when displaying image data is to plot an
-   associated coordinate grid over the displayed image ({\em{e.g.}}\
-   the following Figure):
-   \begin{quote}
-   \begin{figure}[bhtp]
-   \label{fig:overgrid}
-   \includegraphics[scale=0.8]{sun211_figures/overgrid.eps}
-   \caption{An example of a displayed image with a coordinate grid
-   plotted over it.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-The use of AST in such circumstances is independent of the underlying
-graphics system, so starting up the graphics system, setting up a
-coordinate system, displaying the image, and closing down afterwards
-can all be done using the graphics functions you would normally use.
-
-However, displaying an image at a precise location can be a little
-fiddly with some graphics systems, and obviously the grid drawn by AST
-will not be accurately registered with the image unless this is done
-correctly. In the following template, we therefore illustrate both
-steps, basing the image display on the C interface to the PGPLOT
-graphics package.\footnote{An interface is provided with AST that
-allows it to use PGPLOT (\xref{SUN/15}{sun15}{}) for its graphics,
-although interfaces to other graphics systems may also be written.}
-Plotting a coordinate grid with AST then becomes a relatively minor
-part of what is almost a complete graphics program.
-
-Once again, we assume that a pointer, ``wcsinfo'', to a suitable
-\htmlref{FrameSet}{FrameSet} associated with the image has already been obtained
-(\secref{ss:howtoreadwcs}).
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "cpgplot.h"
-AstPlot *plot;
-const float *data;
-float hi, lo, scale, x1, x2, xleft, xright, xscale;
-float y1, y2, ybottom, yscale, ytop;
-int nx, ny;
-
-...
-
-/* Access the image data, which we assume has dimension sizes "nx" and
-   "ny", and will be accessed via the "data" pointer.  Also derive
-   limits for scaling it, which we assign to the variables "hi" and
-   "lo". */
-<this stage depends on your data system, so is not shown>
-
-/* Open PGPLOT using the device given by environment variable
-   PGPLOT_DEV and check for success. */
-if( cpgbeg( 0, " ", 1, 1 ) == 1 ) {
-
-/* Clear the screen and ensure equal scales on both axes. */
-   cpgpage();
-   cpgwnad( 0.0f, 1.0f, 0.0f, 1.0f );
-
-/* Obtain the extent of the plotting area (not strictly necessary for
-   PGPLOT, but possibly for other graphics systems). From this, derive
-   the display scale in graphics units per pixel so that the image
-   will fit within the display area. */
-   cpgqwin( &x1, &x2, &y1, &y2 );
-   xscale = ( x2 - x1 ) / nx;
-   yscale = ( y2 - y1 ) / ny;
-   scale = ( xscale < yscale ) ? xscale : yscale;
-
-/* Calculate the extent of the area in graphics units that the image
-   will occupy, so as to centre it within the display area. */
-   xleft   = 0.5f * ( x1 + x2 - nx * scale );
-   xright  = 0.5f * ( x1 + x2 + nx * scale );
-   ybottom = 0.5f * ( y1 + y2 - ny * scale );
-   ytop    = 0.5f * ( y1 + y2 + ny * scale );
-
-/* Set up a PGPLOT coordinate transformation matrix and display the
-   image data as a grey scale map (these details are specific to
-   PGPLOT). */
-   {
-      float tr[] = { xleft - 0.5f * scale, scale, 0.0f,
-                     ybottom - 0.5f * scale, 0.0f, scale };
-      cpggray( data, nx, ny, 1, nx, 1, ny, hi, lo, tr );
-   }
-
-/* BEGINNING OF AST BIT */
-/* ==================== */
-/* Store the locations of the bottom left and top right corners of the
-   region used to display the image, in graphics coordinates. */
-   {
-      float gbox[] = { xleft, ybottom, xright, ytop };
-
-/* Similarly, store the locations of the image's bottom left and top
-   right corners, in pixel coordinates -- with the first pixel centred
-   at (1,1). */
-      double pbox[] = { 0.5, 0.5, nx + 0.5, ny + 0.5 };
-
-/* Create a Plot, based on the FrameSet associated with the
-   image. This attaches the Plot to the graphics surface so that it
-   matches the displayed image. Specify that a complete set of grid
-   lines should be drawn (rather than just coordinate axes). */
-      plot = astPlot( wcsinfo, gbox, pbox, "Grid=1" );
-   }
-
-/* Optionally, we can now set other Plot attributes to control the
-   appearance of the grid. The values assigned here use the
-   colour/font indices defined by the underlying graphics system. */
-   astSet( plot, "Colour(grid)=2, Font(textlab)=3" );
-
-/* Use the Plot to draw the coordinate grid. */
-   astGrid( plot );
-
-   <maybe some more AST graphics here>
-
-/* Annul the Plot when finished (or use the astBegin/astEnd technique
-   shown earlier). */
-   plot = astAnnul( plot );
-
-/* END OF AST BIT */
-/* ============== */
-
-/* Close down the graphics system. */
-   cpgend();
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that once you have set up a \htmlref{Plot}{Plot} which is aligned with a
-displayed image, you may also use it to generate further graphical
-output of your own, specified in the image's world coordinate system
-(such as markers to represent astronomical objects, annotation,
-{\em{etc.}}). There is also a range of Plot attributes which gives
-control over most aspects of the output's appearance.  For details of
-the facilities available, see \secref{ss:plots} and the description of
-the Plot class in \appref{ss:classdescriptions}.
-
-For details of how to build a graphics program which uses PGPLOT, see
-\secref{ss:howtobuild} and the description of the \htmlref{ast\_link}{ast_link} command in
-\appref{ss:commanddescriptions}.
-
-\subsection{\label{ss:howtoswitchgrid}\ldots Switch to Plot a Different Celestial Coordinate Grid}
-
-Once you have set up a \htmlref{Plot}{Plot} to draw a coordinate grid
-(\secref{ss:howtoplotgrid}), it is a simple matter to change things so
-that the grid represents a different celestial coordinate system. For
-example, after creating the Plot with \htmlref{astPlot}{astPlot}, you could use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( plot, "System=Galactic" );
-\end{verbatim}
-\normalsize
-\end{quote}
-or:
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( plot, "System=FK5, Equinox=J2010" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and any axes and/or grid drawn subsequently would represent the new
-celestial coordinate system you specified.  Note, however, that this
-will only work if the original grid represented celestial coordinates
-of some kind (see \secref{ss:howtotestforcelestial} for how to
-determine if this is the case\footnote{Note that the methods applied
-to a \htmlref{FrameSet}{FrameSet} may be used equally well with a Plot.}). If it did not,
-you will get an error message.
-
-For more information about the celestial coordinate systems available,
-see the descriptions of the \htmlref{System}{System}, \htmlref{Equinox}{Equinox} and \htmlref{Epoch}{Epoch} attributes in
-\appref{ss:attributedescriptions}.
-
-\subsection{\ldots Give a User Control Over the Appearance of a Plot}
-
-The idea of using a \htmlref{Plot}{Plot}'s attributes to control the appearance of the
-graphical output it produces (\secref{ss:howtoplotgrid} and
-\secref{ss:howtoswitchgrid}) can easily be extended to allow the user
-of a program complete control over such matters.
-
-For instance, if the file ``plot.config'' contains a series of
-plotting options in the form of Plot attribute assignments (see below
-for an example), then we could create a Plot and implement these
-assignments before producing the graphical output as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-#define MAXCHARS 120
-FILE *stream;
-char line[ MAXCHARS + 2 ];
-int base;
-
-...
-
-/* Create a Plot and define the default appearance of the graphical
-   output it will produce. */
-plot = astPlot( wcsinfo, gbox, pbox,
-                "Grid=1, Colour(grid)=2, Font(textlab)=3" );
-
-/* Obtain the value of any Plot attributes we want to preserve. */
-base = astGetI( plot, "Base" );
-
-/* Open the plot configuration file, if it exists. Read each line of
-   text and use it to set new Plot attribute values. Close the file
-   when done. */
-if ( stream = fopen( "plot.config", "r" ) ) {
-   while ( fgets( line, MAXCHARS + 2, stream ) ) astSet( plot, "%s", line );
-   close( stream );
-}
-
-/* Restore any attribute values we are preserving. */
-astSetI( plot, "Base", base );
-
-/* Produce the graphical output (e.g.). */
-astGrid( plot );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notice that we take care that the Plot's \htmlref{Base}{Base} attribute is preserved
-so that the user cannot change it. This is because graphical output
-will not be produced successfully if the base \htmlref{Frame}{Frame} does not describe
-the plotting surface to which we attached the Plot when we created it.
-
-The arrangement shown above allows the contents of the ``plot.config''
-file to control most aspects of the graphical output produced
-(including the coordinate system used; the colour, line style,
-thickness and font used for each component; the positioning of axes
-and tick marks; the precision, format and positioning of labels;
-{\em{etc.}}) {\em{via}} assignments of the form:
-
-\begin{quote}
-\small
-\begin{verbatim}
-System=Galactic, Equinox = 2001
-Border = 1, Colour( border ) = 1
-Colour( grid ) = 2
-DrawAxes = 1
-Colour( axes ) = 3
-Digits = 8
-Labelling = Interior
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For a more sophisticated interface, you could obviously perform
-pre-processing on this input---for example, to translate words like
-``red'', ``green'' and ``blue'' into colour indices, to permit
-comments and blank lines, {\em{etc.}}
-
-For a full list of the attributes that may be used to control the
-appearance of graphical output, see the description of the Plot class
-in \appref{ss:classdescriptions}. For a complete description of each
-individual attribute ({\em{e.g.}}\ those above), see the attribute's
-entry in \appref{ss:attributedescriptions}.
-
-\cleardoublepage
-\section{\label{ss:primer}An AST Object Primer}
-
-The AST library deals throughout with entities called Objects and a
-basic understanding of how to handle these is needed before you can
-use the library effectively.  If you are already familiar with an
-object-oriented language, such as C$++$, few of the concepts should
-seem new to you.  Be aware, however, that AST is designed to be used
-{\em{via}} fairly conventional C and Fortran interfaces, so some
-things have to be done a little differently.
-
-If you are not already familiar with object-oriented programming, then
-don't worry---we will not emphasise this aspect more than is necessary
-and will not assume any background knowledge.  Instead, this section
-concentrates on presenting all the fundamental information you will
-need, explaining how AST Objects behave and how to manipulate them
-from conventional C programs.
-
-If you like to read documents from cover to cover, then you can
-consider this section as an introduction to the programming techniques
-used in the rest of the document. Otherwise, you may prefer to skim
-through it on a first reading and return to it later as reference
-material.
-
-\subsection{AST Objects}
-
-An AST \htmlref{Object}{Object} is an entity which is used to store information and
-Objects come in various kinds, called {\em{classes,}} according to the
-sort of information they hold. Throughout this section, we will make
-use of a simple Object belonging to the ``\htmlref{ZoomMap}{ZoomMap}'' class to
-illustrate many of the basic concepts.
-
-A ZoomMap is an Object that contains a recipe for converting
-coordinates between two hypothetical coordinate systems.  It does this
-by multiplying all the coordinate values by a constant called the
-{\em{\htmlref{Zoom}{Zoom} factor.}}  A ZoomMap is a very simple Object which exists
-mainly for use in examples. It allows us to illustrate the ways in
-which Objects are manipulated and to introduce the concept of a
-\htmlref{Mapping}{Mapping}---a recipe for converting coordinates---which is fundamental
-to the way the AST library works.
-
-\subsection{\label{ss:objectcreation}Object Creation and Pointers}
-
-Let us first consider how to create a \htmlref{ZoomMap}{ZoomMap}. This is done very
-simply as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astZoomMap( 2, 5.0, "" )
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first step is to include the header file ``ast.h'' which declares
-the interface to the AST library.  We then declare a pointer of type
-AstZoomMap$*$ to receive the result and invoke the function \htmlref{astZoomMap}{astZoomMap}
-to create the ZoomMap. The pattern is the same for all other classes
-of AST \htmlref{Object}{Object}---you simply prefix ``ast'' to the class name to obtain
-the function that creates the Object and prefix ``Ast'' to obtain the
-type of the returned pointer.
-
-These functions are called {\em{constructor functions,}} or simply
-{\em{constructors}} (you can find an individual description of all AST
-functions in \appref{ss:functiondescriptions}) and the arguments
-passed to the constructor are used to initialise the new Object. In
-this case, we specify 2 as the number of coordinates ({\em{i.e.}}\ we
-are going to work in a 2-dimensional
-space) and 5.0 as the \htmlref{Zoom}{Zoom} factor to be applied. Note that this is a C
-double value. We will return to the final argument, an empty string,
-shortly (\secref{ss:attributeinitialisation}).
-
-The value returned by the constructor is termed an {\em{Object pointer}}
-or, in this case, a {\em{ZoomMap pointer}} and is used to refer to the
-Object.  You perform all subsequent operations on the Object by
-passing this pointer to other AST functions.
-
-\subsection{\label{ss:objecthierarchy}The Object Hierarchy}
-
-Now that we have created our first \htmlref{ZoomMap}{ZoomMap}, let us examine how it
-relates to other kinds of \htmlref{Object}{Object} before investigating what we can do
-with it.
-
-We have so far indicated that a ZoomMap is a kind of Object and have
-also mentioned that it is a kind of \htmlref{Mapping}{Mapping} as well. These statements
-can be represented very simply using the following hierarchy:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
-   Mapping
-      ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-which is a way of stating that a ZoomMap is a special class of
-Mapping, while a Mapping, in turn, is a special class of Object.  This
-is exactly like saying that an Oak is a special form of Tree, while a
-Tree, in turn, is a special form of Plant. This may seem almost
-trivial, but before you turn to read something less dull, be assured
-that it is a very important idea to keep in mind in what follows.
-
-If we look at some of the other Objects used by the AST library, we
-can see how these are all related in a similar way (don't worry about
-what they do at this stage):
-\label{ss:mappinghierarchy}
-
-\begin{quote}
-\small
-\begin{verbatim}
-Object
-   Mapping
-      Frame
-         FrameSet
-            Plot
-      UnitMap
-      ZoomMap
-   Channel
-      FitsChan
-      XmlChan
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Notice that there are several different types of Mapping available
-({\em{i.e.}}\ there are classes of Object indented beneath the
-``Mapping'' heading) and, in addition, other types of Object which are
-not Mappings---Channels for instance (which are at the same
-hierarchical level as Mappings).
-
-The most specialised Object we have shown here is the \htmlref{Plot}{Plot} (which we
-will not discuss in detail until \secref{ss:plots}). As you can see, a
-Plot is a \htmlref{FrameSet}{FrameSet}\ldots\ and a \htmlref{Frame}{Frame}\ldots\ and a Mapping\ldots\ and,
-like everything else, ultimately an Object.
-
-What this means is that you can use a Plot not only for its own
-specialised behaviour, but also whenever any of these other
-less-specialised classes of Object is called for. The general rule is
-that an Object of a particular class may substitute for any of the
-classes appearing above it in this hierarchy. The Object is then said
-to {\em{inherit}} the behaviour of these higher classes. We can
-therefore use our ZoomMap whenever a ZoomMap, a Mapping or an Object
-is called for.
-
-Sometimes, this can lead to some spectacular short-cuts by avoiding
-the need to break large Objects down in order to access their
-components. With some practice and a little lateral thinking you
-should soon be able to spot opportunities for this.
-
-You can find the full {\em{class hierarchy}}, as this is called, for
-the AST library in \appref{ss:classhierarchy} and you may need to
-refer to it occasionally until you are familiar with the classes you
-need to use.
-
-\subsection{\label{ss:displayingobjects}Displaying Objects}
-
-Let us now return to the \htmlref{ZoomMap}{ZoomMap} that we created earlier
-(\secref{ss:objectcreation}) and examine what it's made of.
-There is a function for doing this, called \htmlref{astShow}{astShow}, which is provided
-mainly for looking at Objects while you are debugging programs.
-
-If you consult the description of astShow in
-\appref{ss:functiondescriptions}, you will find that it takes a
-pointer to an \htmlref{Object}{Object} (of type AstObject$*$) as its argument. Although
-we have only a ZoomMap pointer available, this is not a problem. If
-you refer to the brief class hierarchy described above
-(\secref{ss:mappinghierarchy}), you will see that a ZoomMap is an
-Object, albeit a specialised one, so it inherits the properties of all
-Objects and can be substituted wherever an Object is required.  We can
-therefore pass our ZoomMap pointer directly to astShow, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this will appear on the standard output stream and
-should look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-Begin ZoomMap
-   Nin = 2
-IsA Mapping
-   Zoom = 5
-End ZoomMap
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the ``Begin'' and ``End'' lines mark the beginning and end of
-the ZoomMap, while the values 2 and 5 are simply the values we
-supplied to initialise it (\secref{ss:objectcreation}). These have
-been given simple names to make them easy to refer to.
-
-The line in the middle which says ``IsA~\htmlref{Mapping}{Mapping}'' is a dividing line
-between the two values. It indicates that the ``\htmlref{Nin}{Nin}'' value is a
-property shared by all Mappings, so the ZoomMap has inherited this
-from its {\em{parent class}} (Mapping). The ``\htmlref{Zoom}{Zoom}'' value, however,
-is specific to a ZoomMap and isn't shared by other kinds of Mappings.
-
-\subsection{\label{ss:gettingattributes}Getting Attribute Values}
-
-We saw above (\secref{ss:displayingobjects}) how to display the
-internal values of an \htmlref{Object}{Object}, but what about accessing these values
-from a program?  Not all internal Object values are accessible in this
-way, but many are. Those that are, are called {\em{attributes}}. A
-description of all the attributes used by the AST library can be found
-in \appref{ss:attributedescriptions}.
-
-Attributes come in several data types (character string, integer,
-boolean and floating point) and there is a standard way of obtaining
-their values. As an example, consider obtaining the value of the \htmlref{Nin}{Nin}
-attribute for the \htmlref{ZoomMap}{ZoomMap} created earlier. This could be done as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int nin;
-
-...
-
-nin = astGetI( zoommap, "Nin" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the function astGetI is used to extract the attribute value by
-giving it the ZoomMap pointer and the attribute name (attribute names
-are not case sensitive, but we have used consistent capitalisation in
-this document in order to identify them). Remember to use the
-``ast.h'' header file to include the function prototype.
-
-If we had wanted the value of the \htmlref{Zoom}{Zoom} attribute, we would probably
-have used astGetD instead, this being a double version of the same
-function, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double zoom;
-
-...
-
-zoom = astGetD( zoommap, "Zoom" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-However, we could equally well have read the Nin value as double, or
-the Zoom value as an integer, or whatever we wanted.
-
-The data type you want returned is specified simply by replacing the
-final character of the astGetX function name with C~(character
-string), D~(double), F~(float), I~(int) or L~(long). If possible, the
-value is converted to the type you want. If not, an error message will
-result. Note that all floating point values are stored internally as
-double, and all integer values as int. Boolean values are also stored
-as integers, but only take the values 1 and 0 (for true/false).
-
-\subsection{\label{ss:settingattributes}Setting Attribute Values}
-
-Some attribute values are read-only and cannot be altered after an
-\htmlref{Object}{Object} has been created. The \htmlref{Nin}{Nin} attribute of a \htmlref{ZoomMap}{ZoomMap} (describing
-the number of coordinates) is like this. It is defined when the
-ZoomMap is created, but cannot then be altered.
-
-Other attributes, however, can be modified whenever you want. A
-ZoomMap's \htmlref{Zoom}{Zoom} attribute is like this. If we wanted to change it, this
-could be done simply as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetD( zoommap, "Zoom", 99.6 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-which sets the value to 99.6. As when getting an attribute value
-(\secref{ss:gettingattributes}), you have a choice of which data type
-you will use to supply the new value. For instance, you could use an
-integer value, as in:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetI( zoommap, "Zoom", 99 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and the necessary data conversion would occur.  You specify the data
-type you want to supply simply by replacing the final character of the
-astSetX function name with C~(character string), D~(double),
-F~(float), I~(int) or L~(long). Setting a boolean attribute to any
-non-zero integer causes it to take the value 1.
-
-An alternative way of setting attribute values for Objects is to use
-the \htmlref{astSet}{astSet} function ({\em{i.e.}}\ with no final character specifying a
-data type). In this case, you supply the attribute values in a
-character string. The big advantage of this method is that you can
-assign values to several attributes at once, separating them with
-commas. This also reads more naturally in programs. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( zoommap, "Zoom=99.6, Report=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would set values for both the Zoom attribute and the \htmlref{Report}{Report} attribute
-(about which more shortly---\secref{ss:transforming}). You don't really
-have to worry about data types with this method, as any character
-representation will do.
-
-Another attractive feature of astSet is that you can build the
-character string which contains the attribute settings in the same way
-as when using the C run time library ``printf'' function. This is most
-useful when the values you want to set are held in other
-variables. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double zoom = 99.6;
-int report = 1;
-
-...
-
-astSet( zoommap, "Zoom=%g, Report=%d", zoom, report );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would replace the ``\%'' conversion specifications by the values
-supplied as additional arguments. Any number of additional arguments
-may be supplied and the formatting rules are exactly the same as for
-the C ``printf'' family of functions. This is a very flexible
-technique, but does contain one pitfall:
-
-\begin{quote}
-{\bf{Pitfall.}} The default precision used by ``printf'' (and astSet)
-for floating point values is only 6 decimal digits, corresponding
-approximately to float on most machines, whereas the AST library
-stores such values internally as doubles. You should be careful to
-specify a larger precision (such as DBL\_DIG, as defined in
-$<$float.h$>$) when necessary. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <float.h>
-
-...
-
-astSet( zoommap, "Zoom=%.*g", DBL_DIG, double_value );
-\end{verbatim}
-\normalsize
-\end{quote}
-\end{quote}
-
-Substituted strings may contain commas and this is a useful way of
-assigning such strings as attribute values without the comma being
-interpreted as an assignment separator, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( object, "Attribute=%s", "A string, containing a comma" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is equivalent to using astSetC and one of these two methods
-should always be used when assigning string attribute values which
-might potentially contain a comma ({\em{e.g.}}\ strings obtained from
-an external source). However, you should not attempt to use astSet to
-substitute strings that contain newline characters, since these are
-used internally as separators between adjacent attribute assignments.
-\label{ss:attributeinitialisation}
-
-Finally, a very convenient way of setting attribute values is to do so
-at the same time as you create an Object. Every Object constructor
-function has a final character string argument which allows you to do
-this. Although you can simply supply an empty string, it is an ideal
-opportunity to initialise the Object to have just the attributes you
-want. For example, we might have created our original ZoomMap with:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astZoomMap( 2, 5.0, "Report=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and it would then start life with its Report attribute set to 1.
-The ``printf''-style substitution described above may also be used
-here.
-
-\subsection{\label{ss:defaultingattributes}Testing, Clearing and Defaulting Attributes}
-
-You can use the astGetX family of functions
-(\secref{ss:gettingattributes}) to get a value for any \htmlref{Object}{Object} attribute
-at any time, regardless of whether a value has previously been set for
-it. If no value has been set, the AST library will generate a suitable
-default value.
-
-Often, the default value of an attribute will not simply be trivial
-(zero or blank) but may involve considerable processing to
-calculate. Wherever possible, defaults are designed to be real-life,
-sensible values that convey information about the state of the
-Object. In particular, they may often be based on the values of other
-attributes, so their values may change in response to changes in these
-other attributes. The \htmlref{ZoomMap}{ZoomMap} class that we have studied so far is a
-little too simple to show this behaviour, but we will meet it later
-on.
-
-An attribute that returns a default value in this way is said to be
-{\em{un-set.}} Conversely, once an explicit value has been assigned to
-an attribute, it becomes {\em{set}} and will always return precisely
-that value, never a default.
-
-The distinction between set and un-set attributes is important and
-affects the behaviour of several key routines in the AST library. You
-can test if an attribute is set using the function \htmlref{astTest}{astTest}, which
-returns a boolean (integer) result, as in:
-
-\begin{quote}
-\small
-\begin{verbatim}
-if ( astTest( zoommap, "Report" ) ) {
-   <the Report attribute is set>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-Once an attribute is set, you can return it to its un-set state using
-\htmlref{astClear}{astClear}. The effect is as if it had never been set in the first
-place. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astClear( zoommap, "Report" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would ensure that the default value of the \htmlref{Report}{Report} attribute is used
-subsequently.
-
-%\subsection{TBW--Handling Character Attributes}
-
-\subsection{\label{ss:transforming}Transforming Coordinates}
-
-We now have the necessary apparatus to start using our \htmlref{ZoomMap}{ZoomMap} to show
-what it is really for. Here, we will also encounter a routine that is
-a little more fussy about the type of pointer it will accept.
-
-The purpose of a ZoomMap is to multiply coordinates by a constant zoom
-factor. To witness this in action, we will first set the \htmlref{Report}{Report}
-attribute for our ZoomMap to a non-zero value:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( zoommap, "Report=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This boolean (integer) attribute, which is present in all Mappings
-(and a ZoomMap is a \htmlref{Mapping}{Mapping}), causes the automatic display of all
-coordinate values that the Mapping converts. It is not a good idea to
-leave this feature turned on in a finished program, but it can save a
-lot of work during debugging.
-
-Our next step is to set up some coordinates for the ZoomMap to work
-on, using two arrays ``xin'' and ``yin'', and two arrays to receive
-the transformed coordinates, ``xout'' and ``yout''.  Note that these
-are arrays of double, as are all coordinate data processed by the AST
-library:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xin[ 10 ] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };
-double yin[ 10 ] = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0 };
-double xout[ 10 ];
-double yout[ 10 ];
-\end{verbatim}
-\normalsize
-\end{quote}
-
-We will now use the function \htmlref{astTran2}{astTran2} to transform the input
-coordinates. This is the most commonly-used (2-dimensional) coordinate
-transformation function. If you look at its description in
-\appref{ss:functiondescriptions}, you will see that it requires a
-pointer to a Mapping, so we cannot supply just any old \htmlref{Object}{Object} pointer,
-as we could with the functions discussed previously. If we passed it a
-pointer to an inappropriate Object, an error message would result.
-
-Fortunately, a ZoomMap is a Mapping (\appref{ss:classhierarchy}), so we
-can use it with astTran2 to transform our coordinates, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astTran2( zoommap, 10, xin, yin, 1, xout, yout );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, 10 is the number of points we want to transform and the fifth
-argument value of 1 indicates that we want to transform in the
-{\em{forward}} direction (from input to output).
-
-Because our ZoomMap's Report attribute is set to 1, this will cause
-the effects of the ZoomMap on the coordinates to be displayed on the
-standard output stream:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(1, 2) --> (5, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, 8) --> (20, 40)
-(5, 10) --> (25, 50)
-(6, 12) --> (30, 60)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This shows the coordinate values of each point both before and after
-the ZoomMap is applied. You can see that each coordinate value has
-been multiplied by the factor 5 determined by the \htmlref{Zoom}{Zoom} attribute
-value. The transformed coordinates are now stored in the ``xout'' and
-``yout'' arrays.
-
-If we wanted to transform in the opposite direction, we need simply
-change the fifth argument of astTran2 from 1 to 0. We can also feed
-the output coordinates from the above back into the function:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astTran2( zoommap, 10, xout, yout, 0, xin, yin );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output would then look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(5, 10) --> (1, 2)
-(10, 20) --> (2, 4)
-(15, 30) --> (3, 6)
-(20, 40) --> (4, 8)
-(25, 50) --> (5, 10)
-(30, 60) --> (6, 12)
-(35, 70) --> (7, 14)
-(40, 80) --> (8, 16)
-(45, 90) --> (9, 18)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is termed the {\em{inverse}} transformation (we have converted
-from output to input) and you can see that the original coordinates
-have been recovered by dividing by the Zoom factor.
-
-\subsection{\label{ss:annullingpointers}Managing Object Pointers}
-
-So far, we have looked at creating Objects and using them in various
-simple ways but have not yet considered how to get rid of them again.
-
-Every \htmlref{Object}{Object} consumes various computer resources (principally memory)
-and should be disposed of when it is no longer required, so as to free
-up these resources. One way of doing this (not necessarily the
-best---\secref{ss:contexts}) is to {\em{annul}} each Object pointer once
-you have finished with it, using \htmlref{astAnnul}{astAnnul}. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astAnnul( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This indicates that you have finished with the pointer. Since astAnnul
-always returns the null value AST\_\_NULL (as defined in ``ast.h''),
-the recommended way of using it, as here, is to assign the returned
-value to the pointer being annulled. This ensures that any attempt to
-use the pointer again will generate an error message.
-
-In general, this process may not delete the Object, because there may
-still be other pointers associated with it. However, each Object
-maintains a count of the number of pointers associated with it and
-will be deleted if you annul the final pointer. Using astAnnul
-consistently will therefore ensure that all Objects are disposed of at
-the correct time. You can determine how many pointers are associated
-with an Object by examining its (read-only) \htmlref{RefCount}{RefCount} attribute.
-
-\subsection{\label{ss:contexts}AST Pointer Contexts---Begin and End}
-
-The use of \htmlref{astAnnul}{astAnnul} (\secref{ss:annullingpointers}) is not completely
-foolproof, however. Consider the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( astZoomMap( 2, 5.0, "" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This creates a \htmlref{ZoomMap}{ZoomMap} and displays it on standard output
-(\secref{ss:displayingobjects}). Using function invocations as
-arguments to other functions in this way is very convenient because it
-avoids the need for intermediate pointer variables. However, the
-pointer generated by \htmlref{astZoomMap}{astZoomMap} is still active, and since we have not
-stored its value, we cannot use astAnnul to annul it. The ZoomMap will
-therefore stay around until the end of the program.
-
-A simple way to avoid this problem is to enclose all use of AST
-functions between invocations of \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd}, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astBegin;
-astShow( astZoomMap( 2, 5.0, "" ) );
-astEnd;
-\end{verbatim}
-\normalsize
-\end{quote}
-
-When the expansion of astEnd (which is a macro) executes, every \htmlref{Object}{Object}
-pointer created since the previous use of astBegin (also a macro) is
-automatically annulled and any Objects left without pointers are
-deleted. This provides a simple solution to managing Objects and their
-pointers, and allows you to create Objects very freely without needing
-to keep detailed track of each one.  Because this is so convenient, we
-implicitly assume that astBegin and astEnd are used in most of the
-examples given in this document.  Pointer management is not generally
-shown explicitly unless it is particularly relevant to the point being
-illustrated.
-
-If necessary, astBegin and astEnd may be nested, like blocks delimited
-by ``\{\ldots\}'' in C, to define a series of AST pointer
-contexts. Each use of astEnd will then annul only those Object
-pointers created since the matching use of astBegin.
-
-\subsection{Exporting, Importing and Exempting AST Pointers}
-The \htmlref{astExport}{astExport} function allows you to export particular pointers from
-one AST context (\secref{ss:contexts}) to the next outer one, as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astExport( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would identify the pointer stored in ``zoommap'' as being required
-after the end of the current AST context. It causes any pointers
-nominated in this way to survive the next use of \htmlref{astEnd}{astEnd} (but only one
-such use) unscathed, so that they are available to the next outer
-context.  This facility is not needed often, but is invaluable when
-the purpose of your \htmlref{astBegin}{astBegin}\ldots astEnd block is basically to
-generate an \htmlref{Object}{Object} pointer. Without this, there is no way of getting
-that pointer out.
-
-
-The \htmlref{astImport}{astImport} routine can be used in a similar manner to import a
-pointer into the current context, so that it is deleted when the current
-context is closed using astEnd.
-
-Sometimes, you may also want to exempt a pointer from all the effects
-of AST contexts. You should not need to do this often, but it will
-prove essential if you ever need to write a library of functions that
-stores AST pointers as part of its own internal data. Without some
-form of exemption, the caller of your routines could cause the
-pointers you have stored to be annulled---thus corrupting your
-internal data---simply by using astEnd. To avoid this, you should use
-\htmlref{astExempt}{astExempt} on each pointer that you store, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astExempt( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will prevent the pointer being affected by any subsequent use of
-astEnd. Of course, it then becomes your responsibility to annul this
-pointer (using \htmlref{astAnnul}{astAnnul}) when it is no longer required.
-
-
-\subsection{AST Objects within Multi-threaded Applications}
-
-When the AST library is built from source, the build process checks to
-see if the POSIX threads library (``{\tt pthreads}'') is available. If so,
-appropriate {\tt pthreads} calls are inserted into the AST source code to
-ensure that AST is thread-safe, and the AST\_\_THREADSAFE macro (defined
-in the ``ast.h'' header file) is set to ``{\tt 1}''. If the {\tt pthreads}
-library cannot be found when AST is built, a working version of the AST 
-library will still be created, but it will not be thread-safe. In this
-case the AST\_\_THREADSAFE macro will be set to ``{\tt 0}'' in ast.h. The
-rest of this section assumes that the thread-safe version of AST is being
-used.
-
-Note, some AST functions call externally specified functions (\emph{e.g.}
-the source and sink functions used by the \htmlref{Channel}{Channel} class or the graphics
-primitives functions used by the \htmlref{Plot}{Plot} class). AST does not know whether
-such functions are thread-safe or not. For this reason, invocations of these
-functions within a multi-threaded environment are serialised using a mutex
-in order to avoid two or more threads executing an external function 
-simultaneously.
-
-If an application uses more than one thread, the possibility arises that 
-an \htmlref{Object}{Object} created by one thread may be accessed by another thread, potentially
-simultaneously. If any of the threads modifies any aspect of the Object,
-this could lead to serious problems within the other threads. For this
-reason, some restrictions are placed on how Objects can be used in a
-multi-threaded application.
-
-\subsubsection{Locking AST Objects for Exclusive Use}
-The basic restriction is that a thread can only access Objects that it
-has previously locked for its own exclusive use. If a thread attempts to
-access any \htmlref{Object}{Object} that it has not locked, an error is reported.
-
-The \htmlref{astAnnul}{astAnnul} function is the one exception to this restriction. Pointers
-for Objects not currently locked by the calling thread can be annulled
-succesfully using astAnnul. This means that a thread that has finished
-with an Object pointer can unlock the Object by passing the pointer to
-\htmlref{astUnlock}{astUnlock} (so that other threads can use the Object via their own cloned
-pointers), and can then annul the pointer using astAnnul. Note, however,
-that an error will be reported by astAnnul if the supplied pointer has
-been locked by another thread using \htmlref{astLock}{astLock}.
-
-When an Object is created, it is initially locked by the calling thread.
-Therefore a thread does not need to lock an Object explicitly if it was
-created in the same thread.
-
-If the Object pointer is then passed to another thread, the first thread
-must unlock the Object using astUnlock and the second thread must then lock
-it using astLock.
-
-If a thread attempts to lock an Object that is already locked by another
-thread, it can choose to report an error immediately or to wait until the 
-Object is available.
-
-The \htmlref{astThread}{astThread} function can be used to determine whether an Object is
-locked by the running thread, locked by another thread, or unlocked.
-
-If two or more threads need simultaneous access to an Object, a deep copy
-of the Object should be taken for each thread, using \htmlref{astCopy}{astCopy}, and then
-the copies should be unlocked and passed to the othe threads, which
-should then lock them. Note, if a thread modifies the Object, the
-modification will have no effect on the other threads, because the Object
-copies are independent of each other.
-
-\subsubsection{AST Pointer Contexts}
-
-Each thread maintains its own set of nested AST contexts, so when \htmlref{astEnd}{astEnd}
-is called, only Objects that are locked by the current thread will
-be annulled.
-
-If an \htmlref{Object}{Object} is unlocked by a thread using \htmlref{astUnlock}{astUnlock}, it is exempted from
-context handling so that subsequent invocations of astEnd will not cause it 
-to be annulled (this is similar to using \htmlref{astExempt}{astExempt} on the Object). When the
-Object is subsequently locked by another thread using \htmlref{astLock}{astLock}, it will be
-imported into the context that was active when astLock was called. 
-
-
-
-\subsection{\label{ss:copyingobjects}Copying Objects}
-
-The AST library makes extensive use of pointers, not only for
-accessing Objects directly, but also as a means of storing Objects
-inside other Objects (a number of classes of \htmlref{Object}{Object} are designed to
-hold collections of other Objects). Rather than copy an Object in its
-entirety, a pointer to the interior Object is simply stored in the
-enclosing Object.
-
-This means that Objects may frequently not be completely independent
-of each other because, for instance, they both contain pointers to the
-same sub-Object. In this situation, changing one Object (say assigning
-an attribute value) may affect the other one {\em{via}} the common
-Object.
-
-It is difficult to describe all cases where this may happen, so you
-should always be alert to the possibility. Fortunately, there is a
-simple solution. If you require two Objects to be independent, then
-simply use \htmlref{astCopy}{astCopy} to make a copy of one, {\em{e.g:}}
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstZoomMap *zoommap1, *zoommap2;
-
-...
-
-zoommap2 = astCopy( zoommap1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This process will create a true copy of any Object and return a
-pointer to the copy. This copy will not contain any pointers to any
-component of the original Object (everything is duplicated), so you
-can then modify it safely, without fear of affecting either the
-original or any other Object.
-
-%\subsection{TBW - Inheritance}
-
-\subsection{C Pointer Types}
-
-At this point it is necessary to confess to a small amount of
-deception. So far, we have been passing \htmlref{Object}{Object} pointers to AST
-functions in order to perform operations on those Objects. In fact,
-however, what we were using were not true C functions at all, but
-merely macros which invoke a related set of hidden functions with
-essentially the same arguments. In practical terms, this makes very
-little difference to how you use the functions, as we will continue to
-call them.\footnote{About the only difference is that you cannot store
-a pointer to an AST ``function'' in a variable and use the variable's
-value to invoke that function again later.}
-
-The reason for this deception has to do with the rules for data typing
-in C. Recall that most AST functions can be used to process Objects
-from a range of different classes (\secref{ss:objecthierarchy}). In C,
-this means passing different pointer types to the same function and
-most C compilers will not permit this (at least, not without
-grumbling) because it usually indicates a programming error. In AST,
-however, it is perfectly safe if done properly. Some way is therefore
-needed of circumventing the normal compiler checking.
-
-The normal way of doing this in C is with a cast. This approach
-quickly becomes cumbersome, however, so we have adopted the strategy
-of wrapping each function in a macro which applies the appropriate
-cast for you. This means that you can pass pointers of any type to any
-AST function. For example, in passing a \htmlref{ZoomMap}{ZoomMap} pointer to \htmlref{astShow}{astShow}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astZoomMap( 2, 5.0, "" );
-astShow( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-we are exploiting this mechanism to avoid a compiler warning, because
-the notional type of astShow's parameter is AstObject$*$ (not
-AstZoomMap$*$).
-
-We must still guard against programming errors, however, so every
-pointer's type is checked by the enclosing macro immediately before
-any AST function executes. This allows pointer mis-matches (in the
-more liberal AST sense---{\em{i.e.}}\ taking account of the class
-hierarchy, rather than the stricter C sense) to be detected at
-run-time and a suitable error message will be reported. This message
-should also identify the line where the error occurs.
-
-A similar strategy is used when pointers are returned by AST functions
-({\em{i.e.}}\ as the function result). In this case the pointer is
-cast to void$*$, although we retain the notional pointer type in the
-function's documentation
-({\em{e.g.}}\ \appref{ss:functiondescriptions}). This allows you to
-assign function results to pointer variables without using an explicit
-cast. For example, the \htmlref{astRead}{astRead} function returns an Object pointer, but
-might be used to read (say) a ZoomMap as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstChannel *channel;
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astRead( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Strictly, there is a C pointer mis-match here, but it is ignored
-because the operation makes perfect sense to AST.
-
-{\bf{There is an important exception to this, however, in that
-constructor functions always return strongly-typed pointers.}}  What
-we mean by this is that the returned pointer is never implicitly cast
-to void$*$. You must therefore match pointer types when you initially
-create an Object using its constructor, such as in the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstZoomMap *zoommap;
-
-...
-
-zoommap = astZoomMap( 2, 5.0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the variable receiving the pointer is of a different type, an
-appropriate cast should be used, as in:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-mapping = (AstMapping *) astZoomMap( 2, 5.0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is an encouragement for you to declare your pointer types
-consistently, since this is of great benefit to anyone trying to
-understand your software.
-
-Finally, we should also make one more small confession---AST pointers
-are not really pointers at all.  Although they behave like pointers,
-the actual ``values'' stored are not the addresses of C data
-structures. This means that you cannot de-reference an AST pointer to
-examine the data within (although you can use astShow
-instead---\secref{ss:displayingobjects}). This is necessary so that AST
-pointers can be made unique even although several of them might
-reference the same Object.
-
-\subsection{\label{ss:errordetection}Error Detection}
-
-If an error occurs in an AST function (for example, if you supply an
-invalid argument, such as a pointer to the wrong class of \htmlref{Object}{Object}), an
-error message will be written to the standard error stream and the
-function will immediately return.
-
-To indicate than an error has occurred, an AST {\em{error status}}
-value is used. This integer value is stored internally by AST and is
-initially clear ({\em{i.e.}}\ set to zero\footnote{We will assume
-throughout that the ``OK'' value is zero, as it currently is. However,
-a different value could, in principle, be used if the environment in
-which AST is running requires it. This is why a simple interface is
-provided to isolate you from the actual value of the error status.}
-to indicate no error). If an error occurs, it becomes set to a
-different {\em{error value}}, which allows you to detect the error, as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astZoomMap( 2, 5.0, "Title=My ZoomMap" );
-if ( !astOK ) {
-   <an error has occurred>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The macro \htmlref{astOK}{astOK} is used to test whether the AST error status is still
-OK. In this example it would not be, because we have attempted to set
-a value for the \htmlref{Title}{Title} attribute of a \htmlref{ZoomMap}{ZoomMap} and a ZoomMap does not
-have such an attribute.  The actual value of the AST error status can
-be obtained using the \htmlref{astStatus}{astStatus} macro, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int status;
-
-...
-
-
-status = astStatus;
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A consequence of the AST error status being set is that almost all AST
-functions will subsequently cease to function and will instead simply
-return without action.  This means that you do not need to use astOK
-to check for errors very frequently. Instead, you can usually simply
-invoke a succession of AST functions. If an error occurs in any of
-them, the following ones will do nothing and you can check for the
-error at the end, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astFunctionA( ... );
-astFunctionB( ... );
-astFunctionC( ... );
-if ( !astOK ) {
-   <an error has occurred>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-There are, however, a few functions which do not adhere to this
-general rule and which will attempt to execute if the AST error status
-is set. These functions, such as \htmlref{astAnnul}{astAnnul}, are concerned with cleaning
-up and recovering resources. For example, in the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-zoommap = astZoomMap( 2, 5.0, "" );
-
-astFunctionX( ... );
-astFunctionY( ... );
-astFunctionZ( ... );
-
-zoommap = astAnnul( zoommap );
-if ( !astOK ) {
-   <an error has occurred>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-astAnnul will execute normally in order to recover the resources
-associated with the ZoomMap that was created earlier, regardless of
-whether an error has occurred in any of the intermediate functions.
-Functions which behave in this way are noted in the relevant
-descriptions in \appref{ss:functiondescriptions}.
-
-If a serious error occurs, you will probably want to abort your
-program, but sometimes you may want to recover and carry on. Because
-very few AST functions will execute once the AST error status has been
-set, you must first clear this status by using the \htmlref{astClearStatus}{astClearStatus}
-macro, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astClearStatus;
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This will restore the AST error status to its OK value, so that AST
-functions execute normally again.
-
-Occasionally, you may also need to set the AST error status to an
-explicit error value (see \secref{ss:channelsink} for an
-example). This is done using \htmlref{astSetStatus}{astSetStatus} and can be used to
-communicate to AST that an error has occurred in some other item of
-software, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int new_status;
-
-...
-
-astSetStatus( new_status );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effect is that most AST routines will subsequently return without
-action, just as if an error had occurred within the AST library
-itself.
-
-\subsection{Sharing the Error Status}
-
-In some software, it is usual to maintain a single integer error
-status variable which is accessed by each function as it executes. If
-an error occurs, this status variable is set and other functions can
-detect this and take appropriate action.
-
-If you use AST in such a situation, it can be awkward to have a
-separate internal error status used by AST functions alone. To remedy
-this, AST is capable of sharing the error status variable used by any
-other software, so long as they use the same conventions
-({\em{i.e.}}\ a C int with the same ``OK'' value). To enable this
-facility, you should pass the address of your status variable to
-\htmlref{astWatch}{astWatch}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int my_status;
-int *old_address;
-
-...
-
-old_address = astWatch( &my_status );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Henceforth, instead of using its own internal error status variable,
-AST will use the one you supply, so that it can detect errors flagged
-by other parts of your software. The address of the original error
-status variable is returned by astWatch, so you can restore the
-original behaviour later if necessary.
-
-Note that this facility is not available {\em{via}} the Fortran
-interface to the AST library.
-
-\cleardoublepage
-\section{\label{ss:mappings}Inter-Relating Coordinate Systems (Mappings)}
-
-In \secref{ss:primer} we used the \htmlref{ZoomMap}{ZoomMap} as an example of a
-\htmlref{Mapping}{Mapping}. We saw how it could be used to transform coordinates from its
-input to its output and back again (\secref{ss:transforming}). We also
-saw how its behaviour could be controlled by setting various
-attributes, such as the \htmlref{Zoom}{Zoom} factor and the \htmlref{Report}{Report} attribute that made
-it display coordinate values as it transformed them.
-
-In this section, we will look at Mappings a bit more thoroughly and
-explore the behaviour which is common to all the Mappings provided by
-AST.  This is good background for what follows, because many of the
-Objects we discuss later will also turn out to be Mappings in various
-disguises.
-
-\subsection{\label{ss:mappingclass}The Mapping Class}
-
-Before we start, it is worth taking a quick look at the \htmlref{Mapping}{Mapping} class
-as a whole and some of the sub-classes it contains:
-
-\begin{quote}
-\begin{verbatim}
-   Mapping
-      CmpMap
-      DssMap
-      GrismMap
-      IntraMap
-      LutMap
-      MathMap
-      MatrixMap
-      PermMap
-      PolyMap
-      SlaMap
-      SpecMap
-      TimeMap
-      UnitMap
-      WcsMap
-      ZoomMap
-
-      Frame
-         <various types of Frame>
-\end{verbatim}
-\end{quote}
-
-The \htmlref{Frame}{Frame} sub-class has been separated out here because it is covered
-in detail in \secref{ss:frames}. We start by looking at the parent
-class, Mapping.
-
-AST does not provide a function to create a basic Mapping
-({\em{i.e.}}\ the astMapping constructor does not exist). This is
-because the Mapping class itself is ``virtual'' and basic Mappings are
-of no use in themselves. The Mapping class serves simply to contain
-the various specialised Mappings that exist.
-However, it provides more than just a convenient heading for them
-because it bestows all classes of Mapping with common properties
-({\em{e.g.}}\ attributes) and behaviour.  By examining the Mapping
-class, we are therefore examining the things that all other Mappings
-have in common.
-
-\subsection{The Mapping Model}
-
-The concept of a \htmlref{Mapping}{Mapping} was illustrated in Figure~\ref{fig:mapping}.
-It is a black box which you can supply with a set of coordinate values
-in return for a set of transformed coordinates. The two sets are
-termed {\em{input}} and {\em{output}} coordinates. You can also go
-back the other way and transform output coordinates back into input
-coordinates, as we saw in \secref{ss:transforming}.
-
-\subsection{Input and Output Coordinate Numbers}
-
-In general, the number of coordinates you feed into a \htmlref{Mapping}{Mapping} to
-represent a single point need not be the same as the number that comes
-out. Often these numbers will be the same, and often they will both
-equal 2 (because 2-dimensional coordinate systems are common), but
-this needn't necessarily be the case.
-
-The number of coordinates required to specify an input point is
-represented by the integer attribute \htmlref{Nin}{Nin} and the number required to
-specify an output point is represented by \htmlref{Nout}{Nout}. These are read-only
-attributes common to all Mappings. Generally, their values are fixed
-when a Mapping is created.
-
-In \secref{ss:objectcreation}, we saw how the Nin attribute for a
-\htmlref{ZoomMap}{ZoomMap} was initialised by the call to the constructor function
-\htmlref{astZoomMap}{astZoomMap} which created it. In this case, the Nout attribute was not
-needed and it implicitly took the same value as Nin, but we could
-have enquired about its value had we wanted, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstZoomMap *zoommap;
-int nout;
-
-...
-
-nout = astGetI( zoommap, "Nout" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Forward and Inverse Transformations}
-
-We stated earlier that a \htmlref{Mapping}{Mapping} may be used to transform coordinates
-either from input to output, or {\em{vice versa.}} These are termed
-its {\em{forward}} and {\em{inverse}} transformations.
-
-This statement was not quite accurate, however, because in general
-Mappings are only {\bf{potentially}} capable of working in both
-directions. In practice, coordinate transformation may only be
-feasible in one direction or the other because some functions are not
-easily inverted (they may be multi-valued, for instance). Allowance
-must be made for this, so each Mapping has two read-only boolean
-(integer) attributes, \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}, which indicate
-whether each transformation is available.
-
-A transformation is available if the corresponding attribute is
-non-zero, otherwise it is not.\footnote{Most of the Mappings provided
-by the AST library work in both directions, although the \htmlref{LutMap}{LutMap} can
-behave otherwise.} If you enquire about the value of these attributes,
-a value of 0 or 1 is returned.  Attempting to use a Mapping to apply a
-transformation which is not available will result in an error.
-
-\subsection{\label{ss:invertingmappings}Inverting Mappings}
-
-An important attribute, common to all Mappings, is the \htmlref{Invert}{Invert}
-flag. This is a boolean (integer) attribute that can be assigned a new
-value at any time. If it is non-zero, it has the effect of
-interchanging the \htmlref{Mapping}{Mapping}'s input and output coordinates and the
-Mapping is then said to be {\em{inverted.}} By default, the Invert
-attribute is zero.
-
-There is no magic in this. There is no fancy arithmetic involved in
-inverting mathematical functions, for instance. The Invert flag is
-simply a switch that interchanges a Mapping's input and output
-ports. If it is non-zero, the Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are
-swapped, its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes are swapped, and
-when you ask for what was once the forward transformation you get the
-inverse transformation instead (and {\em{vice versa}}). When you
-return the Invert attribute to zero, or clear it, the Mapping returns
-to its original behaviour.
-
-Often, the actual value of the Invert attribute is unimportant and you
-simply wish to invert its boolean sense, so that what was the
-Mapping's input becomes its output and {\em{vice versa.}} This is most
-easily accomplished using \htmlref{astInvert}{astInvert}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-astInvert( mapping );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the Mapping you have happens to be the wrong way around, astInvert
-allows you to correct the problem.
-
-\subsection{Finding the Rate of Change of a Mapping Output}
-The
-\htmlref{astRate}{astRate}
-function can be used to find the rate of change of any \htmlref{Mapping}{Mapping} output
-with respect to any Mapping input, at a given input position. The method
-used produces good accuracy (typically a relative error of 10E-10 or
-less) but may require the Mapping to be evaluated 100 or more times. 
-An estimate of the second derivative is also produced by this function.
-
-
-\subsection{Reporting Coordinate Transformations}
-
-We have already seen (\secref{ss:transforming}) how the boolean
-(integer) \htmlref{Report}{Report} attribute of a \htmlref{Mapping}{Mapping} works. If it is non-zero, the
-operation of transforming a set of coordinates will result in a report
-being written to standard output. This will display the coordinate
-values before and after transformation. It can save considerable time
-during program development by eliminating the need to add loops and
-output statements to your program.
-
-In a finished program, however, you should be careful that the Report
-attribute is not set to a non-zero value unless you want to see the
-output (there may often be rather a lot of this!). To help prevent
-unwanted output being produced by accident, the Report attribute is
-unusual in that its value is not preserved when a Mapping is copied
-using \htmlref{astCopy}{astCopy} (\secref{ss:copyingobjects}). Instead, it reverts to its
-default of zero ({\em{i.e.}}\ un-set) in the copy. It also reverts to
-zero when a Mapping is written out, {\em{e.g.}}\ to a file using a
-\htmlref{Channel}{Channel} (\secref{ss:channels}).
-
-%\subsection{TBW---More on Transforming Coordinates}
-
-\subsection{\label{ss:badcoordinates}Handling Missing (Bad) Coordinate Values}
-
-Even when coordinates can, in principle, be transformed in either
-direction by a \htmlref{Mapping}{Mapping}, there may still be instances where specific
-coordinate values cannot be handled. For example, the Mapping may be
-mathematically intractable ({\em{e.g.}}\ singular) in certain places,
-or it may map a subset of one space on to another, so that some points
-in one space are not represented in the other.  Sky projections often
-show this behaviour, since it is quite common to project only half of
-the celestial sphere on to two dimensions, omitting points on the
-opposite side of the sky. There are many other examples.
-
-To indicate when coordinates cannot be transformed, for whatever
-reason, AST substitutes a special output coordinate value given by the
-macro AST\_\_BAD (as defined in the ``ast.h'' header file).  Before
-making use of coordinates generated by any of the AST transformation
-functions, therefore, you may need to check for the presence of this
-value.
-
-Because coordinates with the value AST\_\_BAD can be generated in this
-way, all other AST functions are also capable of recognising this
-value and handling it appropriately. The coordinate transformation
-functions do this by propagating any missing input coordinate
-information through to their output.  This means that if you supply
-coordinates with the value AST\_\_BAD, the returned coordinates are
-also likely to contain this value. Here, for example, is what happens
-if you use a \htmlref{ZoomMap}{ZoomMap} (with \htmlref{Zoom}{Zoom} factor 5) to transform such a set of
-coordinates:
-
-\begin{quote}
-\small
-\begin{verbatim}
-(0, 0) --> (0, 0)
-(<bad>, 2) --> (<bad>, 10)
-(2, 4) --> (10, 20)
-(3, 6) --> (15, 30)
-(4, <bad>) --> (20, <bad>)
-(5, 10) --> (25, 50)
-(<bad>, <bad>) --> (<bad>, <bad>)
-(7, 14) --> (35, 70)
-(8, 16) --> (40, 80)
-(9, 18) --> (45, 90)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The AST\_\_BAD value is represented by the string ``$<$bad$>$''. This
-is a case of ``garbage in, garbage out'' but at least it's consistent
-garbage that you can recognise!
-
-Note how the presence of the AST\_\_BAD value in one input dimension
-does not necessarily result in the loss of information for all output
-dimensions. Sometimes, such loss will be unavoidable, but in general
-an attempt is made to preserve information as far as possible. The
-exact behaviour will depend on the Mapping involved.
-
-\subsection{\label{ss:unitmapexample}Example---the UnitMap}
-
-The \htmlref{UnitMap}{UnitMap} is the simplest of Mappings. It is a null \htmlref{Mapping}{Mapping}. Its
-purpose is simply to copy coordinate values, unaltered, from its input
-to its output and {\em{vice versa.}}
-
-A UnitMap has no additional attributes beyond those of a basic
-Mapping. Its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are always equal and are
-specified by the first argument supplied to its constructor. For
-example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstUnitMap *unitmap;
-
-...
-
-unitmap = astUnitMap( 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-will create a UnitMap that copies 2-dimensional coordinates. Inverting
-a UnitMap has no effect beyond changing the value of its \htmlref{Invert}{Invert}
-attribute.
-
-The main use of a UnitMap is to allow a Mapping to be supplied when one
-is required (as an argument to a function, for example) but you wish
-it to leave coordinate values unchanged.
-
-\subsection{\label{ss:permmapexample}Example---the PermMap}
-
-The \htmlref{PermMap}{PermMap} is a rather more complicated \htmlref{Mapping}{Mapping} than we have met
-previously.  Its purpose is to change the order, or number, of
-coordinates. It is also able to substitute fixed values for
-coordinates.
-
-To illustrate its action, suppose our input coordinates are denoted by
-($x_1,x_2,x_3,x_4$) in a 4-dimensional space and suppose our output
-coordinates are to be ($x_4,x_1,x_2,x_3$). Our PermMap, therefore,
-should rotate the coordinate values by one position.
-
-To create such a PermMap, we first set up two integer arrays. One of
-these, ``outperm'', controls the selection of input coordinates for
-use in the output and the other, ``inperm'', controls selection of
-output coordinates for use in the input:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int outperm[ 4 ] = { 4, 1, 2, 3 };
-int inperm[ 4 ] = { 2, 3, 4, 1 };
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that the numbers we store in these arrays are the indices of the
-coordinates that we want to select. We have chosen these so that the
-forward and inverse transformations will perform complementary
-permutations on the coordinates.
-
-The PermMap is then created by passing these arrays to its
-constructor, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstPermMap *permmap;
-
-...
-
-permmap = astPermMap( 4, inperm, 4, outperm, NULL, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we specify the number of input and output coordinates
-separately, but set both to 4 in this example. The resulting PermMap
-would have the following effect when used to transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
-   (1, 2, 3, 4) --> (4, 1, 2, 3)
-   (2, 4, 6, 8) --> (8, 2, 4, 6)
-   (3, 6, 9, 12) --> (12, 3, 6, 9)
-   (4, 8, 12, 16) --> (16, 4, 8, 12)
-   (5, 10, 15, 20) --> (20, 5, 10, 15)
-
-Inverse:
-   (4, 1, 2, 3) --> (1, 2, 3, 4)
-   (8, 2, 4, 6) --> (2, 4, 6, 8)
-   (12, 3, 6, 9) --> (3, 6, 9, 12)
-   (16, 4, 8, 12) --> (4, 8, 12, 16)
-   (20, 5, 10, 15) --> (5, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-If the number of input and output coordinates are unequal so, also,
-will be the size of the ``outperm'' and ``inperm'' arrays. This means,
-however, that we cannot fill them with coordinate indices so that they
-perform complementary permutations, because one transformation will
-lose information (discard a coordinate) that the other cannot recover.
-To give an example, consider the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int outperm[ 3 ] = { 4, 3, 2 };
-int inperm[ 4 ] = { -1, 3, 2, 1 };
-double con[ 1 ] = { 99.004 };
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, the forward transformation will change
-($x_1,x_2,x_3,x_4$) into ($x_4,x_3,x_2$) and will discard $x_1$. The
-inverse transformation restores the original coordinate order, but has
-no value to assign to the first coordinate. In this case, the number
-entered in the ``inperm'' array is $-$1.
-
-This negative value indicates that the coordinate value should be
-obtained by addressing the first element of the ``con'' array
-({\em{i.e.}}\ element zero). This array, ignored in the previous
-example, may then be used to supply a value for the missing
-coordinate.
-
-The constructor function:
-
-\begin{quote}
-\small
-\begin{verbatim}
-permmap = astPermMap( 4, inperm, 3, outperm, con, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-will then create a PermMap with the following effect when used to
-transform coordinates:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
-   (1, 2, 3, 4) --> (4, 3, 2)
-   (2, 4, 6, 8) --> (8, 6, 4)
-   (3, 6, 9, 12) --> (12, 9, 6)
-   (4, 8, 12, 16) --> (16, 12, 8)
-   (5, 10, 15, 20) --> (20, 15, 10)
-
-Inverse:
-   (4, 3, 2) --> (99.004, 2, 3, 4)
-   (8, 6, 4) --> (99.004, 4, 6, 8)
-   (12, 9, 6) --> (99.004, 6, 9, 12)
-   (16, 12, 8) --> (99.004, 8, 12, 16)
-   (20, 15, 10) --> (99.004, 10, 15, 20)
-\end{verbatim}
-\end{quote}
-
-The ``con'' array may contain more than one value if necessary and may
-be addressed by both the ``inperm'' and ``outperm'' arrays using
-coordinate indices $-$1, $-$2, $-$3,~{\em{etc.}}\ to refer to the
-first, second, third,~{\em{etc.}}\ elements.
-
-If there is no suitable replacement value that can be supplied
-{\em{via}} the ``con'' array, a value of zero may be entered into the
-``outperm'' and/or ``inperm'' arrays. This causes the value AST\_\_BAD
-to be used for the affected coordinate (as defined in the ``ast.h''
-header file), thus indicating a missing coordinate value
-(\secref{ss:badcoordinates}).
-
-The principle use for a PermMap lies in matching a coordinate system
-to a data array where there is a choice of storage order for the data.
-PermMaps are also useful for discarding unwanted coordinates so as to
-reduce the number of dimensions, such as when selecting a ``slice''
-from a multi-dimensional array.
-
-\cleardoublepage
-\section{\label{ss:cmpmaps}Compound Mappings (CmpMaps)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpMap}{CmpMap}. The
-Mappings we have considered so far have been atomic, in the sense that
-they perform pre-defined elementary transformations. A CmpMap,
-however, is a compound Mapping. In essence, it is a framework for
-containing other Mappings and its purpose is to allow those Mappings
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpMap's behaviour is therefore not pre-defined, but is
-determined by the other Mappings it contains.
-
-\subsection{\label{ss:seriescmpmap}Combining Mappings in Series}
-
-Consider a simple example based on two 2-dimensional coordinate
-systems. Suppose that to convert from one to the other we must swap
-the coordinate order and multiply both coordinates by 5, so that the
-coordinates ($x_1,x_2$) transform into ($5x_2,5x_1$). This can be done
-in two stages:
-
-\begin{enumerate}
-\item Apply a \htmlref{PermMap}{PermMap} (\secref{ss:permmapexample}) to swap the
-coordinate order.
-
-\item Apply a \htmlref{ZoomMap}{ZoomMap} (\secref{ss:transforming}) to multiply both
-coordinate values by the constant 5.
-\end{enumerate}
-
-The PermMap and ZoomMap are then said to operate {\em{in series,}}
-because they are applied sequentially
-({\em{c.f.}}\ Figure~\ref{fig:seriescmpmap}).  We can create a \htmlref{CmpMap}{CmpMap}
-that applies these Mappings in series as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstCmpMap *cmpmap;
-AstPermMap *permmap;
-AstZoomMap *zoommap;
-
-...
-
-/* Create the individual Mappings. */
-{
-   int inperm[ 2 ] = { 2, 1 };
-   int outperm[ 2 ] = { 2, 1 };
-   permmap = astPermMap( 2, inperm, 2, outperm, NULL, "" );
-}
-zoommap = astZoomMap( 2, 5.0, "" )
-
-/* Combine them in series. */
-cmpmap = astCmpMap( permmap, zoommap, 1, "" );
-
-/* Annul the individual Mapping pointers. */
-permmap = astAnnul( permmap );
-zoommap = astAnnul( zoommap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the third argument (1) of the constructor function \htmlref{astCmpMap}{astCmpMap}
-indicates ``in series''.
-
-When used to transform coordinates in the forward direction, the
-resulting CmpMap will apply the first component \htmlref{Mapping}{Mapping} (the PermMap)
-and then the second one (the ZoomMap). When transforming in the
-inverse direction, it will apply the second one (in the inverse
-direction) and then the first one (also in the inverse direction).  In
-general, although not in this particular example, the order in which
-the two component Mappings are supplied is significant. Clearly, also,
-the \htmlref{Nout}{Nout} attribute (number of output coordinates) for the first
-Mapping must equal the \htmlref{Nin}{Nin} attribute (number of input coordinates) for
-the second one.
-
-\subsection{Combining Mappings in Parallel}
-
-Connecting two Mappings in series (\secref{ss:seriescmpmap}) is not the
-only way of combining them. The alternative, {\em{in parallel,}}
-involves applying the two Mappings at once but on different subsets of
-the coordinate values.
-
-Consider, for example, a set of 3-dimensional coordinates and suppose
-we wish to transform them by swapping the first two coordinate values
-and multiplying the final one by 5, so that ($x_1,x_2,x_3$) transforms
-into ($x_2,x_1,5x_3$). Again, we can perform each of these steps
-individually using exactly the same \htmlref{PermMap}{PermMap} and \htmlref{ZoomMap}{ZoomMap} as used
-earlier (\secref{ss:seriescmpmap}). In this case, however, these
-individual Mappings are applied in parallel
-({\em{c.f.}}\ Figure~\ref{fig:parallelcmpmap}).
-
-Creating a \htmlref{CmpMap}{CmpMap} for this purpose is also very simple:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cmpmap = astCmpMap( permmap, zoommap, 0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The only difference is that the third argument of \htmlref{astCmpMap}{astCmpMap} is now
-zero, meaning ``in parallel''.
-
-As before, the order in which the two component Mappings are supplied
-is significant. The first one acts on the lower-numbered input
-coordinate values (however many it needs) and produces the
-lower-numbered output coordinates, while the second \htmlref{Mapping}{Mapping} acts on
-the higher-numbered input coordinates (however many remain) and
-generates the remaining higher-numbered output coordinates.  When the
-CmpMap transforms coordinates in the inverse direction, both component
-Mappings are applied to the same coordinates, but in the inverse
-direction.
-
-Note that the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the component Mappings
-({\em{i.e.}}\ the numbers of input and output coordinates) will sum to
-give the Nin and Nout attributes of the overall CmpMap.
-
-\subsection{\label{ss:cmpmapcomponents}The Component Mappings}
-
-A \htmlref{CmpMap}{CmpMap} does not store copies of its component Mappings, but simply
-holds pointers to them. In the example above
-(\secref{ss:seriescmpmap}), we were free to annul the individual
-\htmlref{Mapping}{Mapping} pointers after creating the CmpMap because the pointers held
-internally by the CmpMap increased the reference count (\htmlref{RefCount}{RefCount}
-attribute) of each component Mapping by one. The individual components
-are therefore not deleted by \htmlref{astAnnul}{astAnnul}, but retained until the CmpMap
-itself is deleted and annuls the pointers it holds. Consistent use of
-astAnnul (\secref{ss:annullingpointers}) and/or pointer contexts
-(\secref{ss:contexts}) will therefore ensure that all Objects are
-deleted at the appropriate time.
-
-Note that access to a CmpMap's component Mappings is not generally
-available unless pointers to them are retained when the CmpMap is
-created. If such pointers are retained, then subsequent modifications
-to the individual components can be used to indirectly modify the
-behaviour of the overall CmpMap.
-
-There is an important exception to this, however, because a CmpMap
-retains a copy of the initial \htmlref{Invert}{Invert} flag settings of each of its
-components and uses these in order to ignore any subsequent external
-changes. This means that you may invert either component Mapping
-before inserting it into a CmpMap and need not worry if you un-invert
-it again later. The CmpMap's behaviour will not be affected by the
-later action.
-
-\subsection{\label{ss:complexcmpmap}Creating More Complex Mappings}
-
-Because a \htmlref{CmpMap}{CmpMap} is itself a \htmlref{Mapping}{Mapping}, any existing CmpMap can
-substitute (\secref{ss:objecthierarchy}) as a component Mapping when
-constructing a new CmpMap using \htmlref{astCmpMap}{astCmpMap}. This has the effect of
-nesting one CmpMap inside another and opens up many new possibilities.
-For example, combining three Mappings in series can be accomplished as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *map1, *map2, *map3;
-
-...
-
-cmpmap = astCmpMap( map1, astCmpMap( map2, map3, 1, "" ), 1, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The way in which the individual component Mappings are grouped within
-the nested CmpMaps is not usually important.
-
-A similar technique can be used to combine multiple Mappings in
-parallel and, of course, mixed series and parallel combinations are
-also possible (Figure~\ref{fig:complexcmpmap}).  There is no built-in
-limit to how many CmpMaps may be nested in this way, so this mechanism
-provides an indefinitely extensible method of building complex
-Mappings out of the elemental building blocks provided by AST.
-
-In practice, you might not need to construct such complex CmpMaps
-yourself very frequently, but they will often be returned by AST
-routines.  Nested CmpMaps underlie the library's entire ability to
-represent a wide range of different coordinate transformations.
-
-\subsection{\label{ss:cmpmapexample}Example---Transforming Between Two Calibrated Images}
-
-Consider, as a practical example of CmpMaps, two images of the
-sky. Suppose that for each image we have a \htmlref{Mapping}{Mapping} which converts from
-pixel coordinates to a standard celestial coordinate system, say
-FK5~(J2000.0). If we wish to inter-compare these images, we can do so
-by using this celestial coordinate system to align them. That is, we
-first convert from pixel coordinates in the first image into FK5
-coordinates and we then convert from FK5 coordinates into pixel
-coordinates in the second image.
-
-If ``mapa'' and ``mapb'' are pointers to our two original Mappings, we
-could form a \htmlref{CmpMap}{CmpMap} which transforms directly between the pixel
-coordinates of the first and second images by combining these
-Mappings, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstCmpMap *alignmap;
-AstMapping *mapa, *mapb;
-
-...
-
-astInvert( mapb );
-alignmap = astCmpMap( mapa, mapb, 1, "" );
-astInvert( mapb );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have used \htmlref{astInvert}{astInvert} (\secref{ss:invertingmappings}) to invert
-``mapb'' before inserting it into the CmpMap because, as supplied, it
-converted in the wrong direction. Afterwards, we invert it again to
-return it to its original state. The CmpMap, however, will ignore this
-subsequent change (\secref{ss:cmpmapcomponents}).
-
-The forward transformation of the resulting CmpMap will now transform
-from pixel coordinates in the first image to pixel coordinates in the
-second image, while its inverse transformation will convert in the
-opposite direction.
-
-\subsection{\label{ss:overcomplexcmpmaps}Over-Complex Compound Mappings}
-
-While a \htmlref{CmpMap}{CmpMap} provides a very flexible way of constructing
-arbitrarily complex Mappings (\secref{ss:complexcmpmap}), it
-unfortunately also provides an opportunity for representing simple
-Mappings in complex ways. Sometimes, unnecessary complexity can be
-difficult to avoid but can obscure important simplifications.
-
-Consider the example above (\secref{ss:cmpmapexample}), in which we
-inter-related two images of the sky {\em{via}} a CmpMap.  If the two
-images turned out to be simply offset from each other by a shift along
-each pixel axis, then this approach would align them correctly, but it
-would be inefficient. This is because it would introduce unnecessary
-and expensive transformations to and from an intermediate celestial
-coordinate system, whereas a simple shift of pixel origin would
-suffice.
-
-Recognising that a simpler and more efficient solution exists
-obviously requires a little more than simply joining two Mappings
-end-to-end. We must also determine whether the resulting CmpMap is
-more complex than it needs to be, {\em{i.e.}}\ contains redundant
-information. If it is, we then need a way to simplify it.
-
-The problem is not always just one of efficiency, however. Sometimes
-we may also need to know something about the actual form a \htmlref{Mapping}{Mapping}
-takes---{\em{i.e.}}\ the nature of the operations it performs.
-Unnecessary complexity can obscure this, but such complexity can
-easily accumulate during normal data processing.
-
-For example, a Mapping that transforms pixel coordinates into
-positions on the sky might be repeatedly modified as changes are made
-to the shape and size of the image. Typically, on each occasion,
-another Mapping will be concatenated to reflect what has happened to
-the image. This could soon make it difficult to discern the overall
-nature of the transformation from the complex CmpMap that
-accumulates. If only shifts of origin were involved on each occasion,
-however, they could be combined into a single shift which could be
-represented much more simply.
-
-Suppose we now wanted to represent our image's celestial coordinate
-calibration using FITS conventions (\secref{ss:foreignfits}). This
-requires AST to determine whether the Mapping which relates pixel
-coordinate to sky positions conforms to the FITS model (for example,
-whether it is equivalent to applying a single set of shifts and scale
-factors followed by a map projection). Clearly, there is an important
-use here for some means of simplifying the internal structure of a
-CmpMap.
-
-\subsection{\label{ss:simplifyingcmpmaps}Simplifying Compound Mappings}
-
-The ability to simplify compound Mappings is provided by the
-\htmlref{astSimplify}{astSimplify} function. This function encapsulates a number of
-heuristics for converting Mappings, or combinations of Mappings within
-a \htmlref{CmpMap}{CmpMap}, into simpler, equivalent ones. When applied to a CmpMap,
-astSimplify tries to reduce the number of individual Mappings within
-it by merging neighbouring component Mappings together. It will do
-this with both series and parallel combinations of Mappings, or both,
-and will handle CmpMaps nested to any depth
-(\secref{ss:complexcmpmap}).
-
-\begin{latexonly}
-   To illustrate how astSimplify works, consider the combination of
-   Mappings shown in Figure~\ref{fig:simplifyexample}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.65]{sun211_figures/simpexamp.eps}
-   \caption{An over-complex compound \htmlref{Mapping}{Mapping}, consisting of PermMaps,
-   ZoomMaps and a \htmlref{UnitMap}{UnitMap}, which can be simplified to become a single
-   UnitMap.  The enclosing nested CmpMaps have been omitted for clarity.}
-   \label{fig:simplifyexample}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   To illustrate how astSimplify works, consider the combination of
-   Mappings shown in the Figure below.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:simplifyexample}
-   \includegraphics[scale=1.1]{sun211_figures/simpexamp.eps}
-   \caption{An over-complex compound Mapping, consisting of PermMaps,
-   ZoomMaps and a UnitMap, which can be simplified to become a single
-   UnitMap.  The enclosing nested CmpMaps have been omitted for clarity.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-If this were contained in a CmpMap, it could be simplified as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *simpler;
-
-...
-
-simpler = astSimplify( cmpmap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, the result would be a simple 3-dimensional UnitMap (the
-identity Mapping).  To reach this conclusion, astSimplify will have
-made a number of deductions, roughly as follows:
-
-\begin{enumerate}
-\item The two 2-dimensional ZoomMaps in series are equivalent to a
-single \htmlref{ZoomMap}{ZoomMap} with a combined \htmlref{Zoom}{Zoom} factor of unity. This, in turn, is
-equivalent to a 2-dimensional UnitMap.
-
-\item This UnitMap in parallel with the other 1-dimensional UnitMap is
-equivalent to a single 3-dimensional UnitMap. This UnitMap, sandwiched
-between any other pair of Mappings, can then be eliminated.
-
-\item The remaining two PermMaps in series are equivalent to a single
-3-dimensional \htmlref{PermMap}{PermMap}. When these are combined, the resulting PermMap
-is found to be equivalent to a 3-dimensional UnitMap.
-\end{enumerate}
-
-This example is a little contrived, but illustrates how astSimplify
-can deal with even quite complicated compound Mappings through a
-series of incremental simplifications. Where possible, this will
-result in either a simpler compound Mapping or, if feasible, an atomic
-(non-compound) Mapping, as here. If no simplification is possible,
-astSimplify will just return a pointer to the original Mapping.
-
-Although astSimplify cannot identify every simplification that is
-theoretically possible, sufficient rules are included to deal with the
-most common and important cases.
-
-\cleardoublepage
-\section{\label{ss:frames}Representing Coordinate Systems (Frames)}
-
-An AST \htmlref{Frame}{Frame} is an \htmlref{Object}{Object} that is used to represent a coordinate
-system. Contrast this with a \htmlref{Mapping}{Mapping} (\secref{ss:mappings}), which is
-used to describe how to convert between coordinate systems. The two
-concepts are complementary and we will see how they work together in
-\secref{ss:framesets}.
-
-In this section we will discuss only basic Frames, which represent
-Cartesian coordinate systems. More specialised types of Frame
-({\em{e.g.}}\ the \htmlref{SkyFrame}{SkyFrame}, which represents celestial coordinate
-systems, and the \htmlref{SpecFrame}{SpecFrame}, which represents spectral coordinate
-systems) are covered later (\secref{ss:skyframes} and \secref{ss:specframes}) 
-and, naturally, inherit the properties and behaviour of the simple Frames 
-discussed here.
-
-\subsection{The Frame Model}
-
-The best way to think about a \htmlref{Frame}{Frame} is like the frame that you would
-plot around a graph. In two dimensions, you would have an ``$x$'' and
-a ``$y$'' axis, a title on the graph and labels on the axes, together
-with an indication of the physical units being plotted. The values
-marked along each axis would be formatted in a human-readable way. The
-frame around a graph therefore defines a coordinate space within which
-you can locate points, draw lines, calculate distances, {\em{etc.}}
-
-An AST Frame works in much the same way, embodying all of these
-concepts and a few more. It also allows any number of axes, which
-means that a Frame can represent coordinate systems with any number of
-dimensions. You specify how many when you create it.
-
-Remember that the basic Frame we are considering here is completely
-general.  It knows nothing of celestial coordinates, for example, and
-all its axes are equivalent. It can be adapted to describe any general
-purpose Cartesian coordinate system by setting its attributes, such as
-its \htmlref{Title}{Title} and axis Labels, {\em{etc.}}\ to appropriate values.
-
-\subsection{\label{ss:creatingframes}Creating a Frame}
-
-Creating a \htmlref{Frame}{Frame} is straightforward and follows the usual pattern:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-astFrame *frame;
-
-...
-
-frame = astFrame( 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first argument of the \htmlref{astFrame}{astFrame} constructor function specifies the
-number of axes which the Frame should have.
-
-\subsection{\label{ss:frameasmapping}Using a Frame as a Mapping}
-
-We should briefly point out that the \htmlref{Frame}{Frame} we created above
-(\secref{ss:creatingframes}) is also a \htmlref{Mapping}{Mapping}
-(\secref{ss:mappingclass}) and therefore inherits the properties and
-behaviour common to other Mappings.
-
-One way to see this is to set the Frame's \htmlref{Report}{Report} attribute (inherited
-from the Mapping class) to a non-zero value and pass the Frame pointer
-to a coordinate transformation function, such as \htmlref{astTran2}{astTran2}.
-
-\begin{quote}
-\small
-\begin{verbatim}
-double xin[ 5 ] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 };
-double yin[ 5 ] = { 0.0, 2.0, 4.0, 6.0, 8.0, 10.0 };
-double xout[ 5 ];
-double yout[ 5 ];
-
-...
-
-astSet( frame, "Report=1" );
-astTran2( frame, 5, xin, yin, 1, xout, yout );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The resulting output might then look like this:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is not very exciting because a Frame implements an identity
-transformation just like a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). However, it illustrates that a Frame can
-be used as a Mapping and that its \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes are both
-equal to the number of Frame axes.
-
-When we consider more specialised Frames
-({\em{e.g.}}~\secref{ss:framesets}), we will see that using them as
-Mappings can be very useful indeed.
-
-\subsection{\label{ss:frameaxisattributes}Frame Axis Attributes}
-
-Frames have a number of attributes which can take multiple values, one
-for each axis. These separate values are identified by appending the
-axis number in parentheses to the attribute name. For example, the
-Label(1) attribute is a character string containing the label which
-appears on the first axis.
-
-\htmlref{Axis}{Axis} attributes are accessed in the same way as all other attributes
-(\secref{ss:gettingattributes}, \secref{ss:settingattributes} and
-\secref{ss:defaultingattributes}). For example, the Label on the second
-axis might be obtained as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *label;
-
-...
-
-label = astGetC( frame, "Label(2)" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Other attribute access functions (astSetX, \htmlref{astTest}{astTest} and \htmlref{astClear}{astClear}) may
-also be applied to axis attributes in the same way.
-
-If the axis number is stored in a program variable, then its value
-must be formatted to generate a suitable attribute name before using
-this to access the attribute itself. For example, the following will
-print out the Label value for each axis of a \htmlref{Frame}{Frame}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char name[ 18 ];
-int iaxis, naxes;
-
-...
-
-naxes = astGetI( frame, "Naxes" );
-for ( iaxis = 1; iaxis <= naxes; iaxis++ ) {
-   (void) sprintf( name, "Label(%d)", iaxis );
-   label = astGetC( frame, name );
-   (void) printf( "Label %2d: %s\n", iaxis, label );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of the \htmlref{Naxes}{Naxes} attribute to determine the number of Frame
-axes.
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-Label  1: Axis 1
-Label  2: Axis 2
-\end{verbatim}
-\end{quote}
-
-In this case, the Frame's default axis Labels have been revealed as
-rather un-exciting. Normally, you would set much more useful values,
-typically when you create the Frame---perhaps something like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-frame = astFrame( 2, "Label(1)=Offset from centre of field,"
-                     "Unit(1) =mm,"
-                     "Label(2)=Transmission coefficient,"
-                     "Unit(2) =%" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have also set the (character string) Unit attribute for each
-axis to describe the physical units represented on that axis. All the
-attribute assignments have been combined into a single string,
-separated by commas.
-
-\subsection{\label{ss:frameattributes}Frame Attributes}
-
-We will now briefly outline the various attributes associated with a
-\htmlref{Frame}{Frame} (this is, of course, in addition to those inherited from the
-\htmlref{Mapping}{Mapping} class). We will not delve too deeply into the details of each
-attribute, for which you should consult the appropriate description in
-\appref{ss:attributedescriptions}. Instead, we aim simply to sketch
-the range of facilities available:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Naxes}{Naxes}]\mbox{}\\
-A read-only integer giving the number of Frame axes.
-
-\item[\htmlref{Title}{Title}]\mbox{}\\
-A string describing the coordinate system which the Frame represents.
-
-\item[\htmlref{Label(axis)}{Labelaxis}]\mbox{}\\
-A label string for each axis.
-
-\item[\htmlref{Unit(axis)}{Unitaxis}]\mbox{}\\
-A string describing the physical units on each axis. You can choose
-whether to make this attribute ``active'' or ``passive'' (using
-\htmlref{astSetActiveUnit}{astSetActiveUnit}
-). If active, its value will be taken into account when finding the
-Mapping between two Frames (\emph{e.g.} a scaling of 0.001 would be used
-to connect two axis with units of ``km'' and ``m''). If passive, its value
-is ignored. Its use is described in more detail in \secref{ss:frameunits}.
-
-\item[\htmlref{Symbol(axis)}{Symbolaxis}]\mbox{}\\
-A string containing a ``short form'' symbol ({\em{e.g.}}\ like ``X''
-or ``Y'') used to represent the quantity plotted on each axis.
-
-\item[\htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}]\mbox{}\\
-The preferred number of digits of precision to be used when formatting
-values for display on each axis.
-
-\item[\htmlref{Format(axis)}{Formataxis}]\mbox{}\\
-A string containing a {\em{format specifier}} which determines exactly
-how values should be formatted for display on each axis
-(\secref{ss:formattingaxisvalues}). If this attribute is un-set, the
-formatting is based on the Digits value, otherwise the Format string
-over-rides the Digits value.
-
-\item[\htmlref{Direction(axis)}{Directionaxis}]\mbox{}\\
-A boolean (integer) value which indicates in which direction each axis
-should be plotted. If it is non-zero (the default), the axis should be
-plotted in the conventional direction---{\em{i.e.}}\ increasing to the
-right for the abscissa and increasing upwards for the ordinate. If it
-is zero, the axis should be plotted in reverse.  This attribute is
-provided as a hint only and programs are free to ignore it if they
-wish.
-
-\item[\htmlref{Domain}{Domain}]\mbox{}\\
-A character string which identifies the {\em{physical domain}} to
-which the Frame's coordinate system applies. The primary purpose of
-this attribute is to prevent unwanted conversions from occurring
-between coordinate systems which are not related. Its use is described
-in more detail in \secref{ss:framedomains}.
-
-\item[\htmlref{System}{System}]\mbox{}\\
-A character string which identifies the specific coordinate system used
-to describe positions within the physical domain represented by the Frame.
-For a simple Frame, this attribute currently has a fixed value of 
-``Cartesian'', but could in principle be extended to include options such
-as ``Polar'', ``Cylindrical'', {\em{etc}}. More specialised Frames such
-as the \htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame}  and \htmlref{SpecFrame}{SpecFrame}, re-define the allowed values to be
-appropriate to the domain which they describe. For instance, the SkyFrame
-allows values such as ``FK4'' and ``Galactic'', and the SpecFrame allows
-values such as ``frequency'' and ``wavelength''. 
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This value is used to qualify a coordinate system by giving the moment in
-time when the coordinates are correct. Usually, this will be the date of
-observation. The Epoch value is important in cases where coordinates
-systems move with respect to each other over time. An example of two such
-coordinate systems are the FK4 and FK5 celestial coordinate systems.
-
-\item[\htmlref{ObsLon}{ObsLon}]\mbox{}\\
-Specifies the longitude of the observer (assumed to be on the surface of
-the earth). The basic Frame class does not use this value, but
-specialised sub-classes may. For instance, the SpecFrame class uses it to
-calculate the relative velocity of the observer and the centre of the
-earth for use in converting between standards of rest.
-
-\item[\htmlref{ObsLat}{ObsLat}]\mbox{}\\
-Specifies the latitude of the observer. Use in conjunction with ObsLon.
-
-\end{description}
-\end{quote}
-
-There are also some further Frame attributes, not described above,
-which are important when Frames are used as templates to search for
-other Frames. Their use goes beyond the present discussion.
-%TBW---Add reference here.
-
-\subsection{\label{ss:formattingaxisvalues}Formatting Axis Values}
-
-The coordinate values associated with each axis of a \htmlref{Frame}{Frame} are stored
-({\em{e.g.}}\ within your program) as double values. The Frame class
-therefore provides a function, \htmlref{astFormat}{astFormat}, to convert these values into
-formatted strings for display:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *string
-double value;
-
-...
-
-string = astFormat( frame, iaxis, value );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the astFormat function is passed a Frame pointer, the number of
-an axis (``iaxis'') and a double precision value to format
-(``value''). It returns a pointer to character string containing the
-formatted value.
-\label{ss:formattingwithdigits}
-
-By default, the formatting applied will be determined by the Frame's
-Digits attribute and will normally display results with seven digits
-of precision (corresponding approximately to the C ``float'' data type
-on many machines). Setting a different Digits value, however, allows
-you to adjust the precision as necessary to suit the accuracy of the
-coordinate data you are processing.  If finer control is needed, it is
-also possible to set a Digits value for each individual axis by
-appending an axis number to the attribute name
-({\em{e.g.}}\ ``Digits(2)''). If this is done, it over-rides the
-effect of the Frame's main Digits value for that axis.
-
-Even finer control is possible by setting the (character string) Format
-attribute for a Frame axis. The string given should contain a C
-{\em{format specifier}} which explicitly determines how the values on
-that axis should be formatted. This will over-ride the effects of any
-Digits value\footnote{The exception to this rule is that if the Format
-value includes a precision of ``$.*$'', then Digits will be used to
-determine the actual precision used.}. Any valid ``printf'' format
-specifier may be used so long as it consumes exactly one double value.
-
-When setting Format values, remember that the ``\%'' which appears in
-the format specifier may need to be doubled to ``\%\%'' if you are
-using a function (such as \htmlref{astSet}{astSet}) which interprets ``printf'' format
-specifiers itself.
-
-It is recommended that you use astFormat whenever you display
-formatted coordinate values, even although you could format them
-yourself using ``sprintf''. This is because it puts the Frame in
-control of formatting. When you start to handle more elaborate Frames
-(representing, say, celestial coordinates), you will need different
-formatting methods. This approach delivers them without any change to
-your software.
-
-You should also consider regularly using the \htmlref{astNorm}{astNorm} function,
-described below (\secref{ss:normalising}), for any values that will be
-made visible to the user of your software.
-
-\subsection{\label{ss:normalising}Normalising Frame Coordinates}
-
-The function \htmlref{astNorm}{astNorm} is provided to cope with the fact that some
-coordinate systems do not extend indefinitely in all directions. Some
-may have boundaries, outside which coordinates are meaningless, while
-others wrap around on themselves, so that after a certain distance you
-return to the beginning again (coordinate systems based on circles and
-spheres, for instance). A basic \htmlref{Frame}{Frame} has no such complications, but
-other more specialised Frames (such as SkyFrames, representing the
-celestial sphere---\secref{ss:skyframes}) do.
-
-The role played by astNorm is to {\em{normalise}} any arbitrary set of
-coordinates by converting them into a set which is ``within bounds'',
-interpreted according to the particular Frame in question. For
-example, on the celestial sphere, a right ascension value of 24~hours
-or more can have a suitable multiple of 24~hours subtracted without
-affecting its meaning and astNorm would perform this task. Similarly,
-negative values of right ascension would have a multiple of 24~hours
-added, so that the result lies in the range zero to 24~hours. The
-coordinates in question are modified in place by astNorm, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double point[ 2 ];
-
-...
-
-astNorm( frame, point );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the coordinates supplied are initially OK, as they would always be
-with a basic Frame, then they are returned unchanged.
-
-Because the main purpose of astNorm is to convert coordinates into the
-preferred range for human consumption, its use is almost always
-appropriate immediately before formatting coordinate values for
-display using \htmlref{astFormat}{astFormat} (\secref{ss:formattingaxisvalues}). Even if
-the Frame in question does not restrict the range of coordinates, so
-that astNorm does nothing, using it will allow you to process other
-more specialised Frames, where normalisation is important, without
-changing your software.
-
-\subsection{\label{ss:unformattingaxisvalues}Reading Formatted Axis Values}
-
-The process of converting a formatted coordinate value for a \htmlref{Frame}{Frame}
-axis, such as might be produced by \htmlref{astFormat}{astFormat}
-(\secref{ss:formattingaxisvalues}), back into a numerical (double)
-value ready for processing is performed by \htmlref{astUnformat}{astUnformat}.  However,
-although this process is essentially the inverse of that performed by
-astFormat, there are a number of additional difficulties that must be
-addressed in practice.
-
-The main use for astUnformat is in reading formatted coordinate values
-which have been entered by the user of a program, or read from a
-file. As such, we can rarely assume that the values are neatly
-formatted in the way that astFormat would produce. Instead, it is
-usually desirable to allow considerable flexibility in the form of
-input that can be accommodated, so as to permit ``free-format'' data
-input by the user. In addition, we may need to extract individual
-coordinate values embedded in other textual data.
-
-Underlying these requirements is the root difficulty that the textual
-format used to represent a coordinate value will depend on the class
-of Frame we are considering. For example, for a basic Frame,
-astUnformat may have to read a value like ``1.25e-6'', whereas for a
-more specialised Frame representing celestial coordinates it may have
-to handle a value like ``-07d~49m~13s''. Of course, the format might
-also depend on which axis is being considered.
-
-Ideally, we would like to write software that can handle any kind of
-Frame. However, this makes it a little more difficult to analyse
-textual input data to extract individual coordinate values, since we
-cannot make assumptions about how the values are formatted. It would
-not be safe, for example, simply to assume that the values being read
-are separated by white space. This is not just because they might be
-separated by some other character, but also because celestial
-coordinate values might themselves contain spaces. In fact, to be
-completely safe, we cannot make any assumptions about how a formatted
-coordinate value is separated from the surrounding text, except that
-it should be separated in some way which is not ambiguous.
-
-This is the very basic assumption upon which astUnformat works. It is
-invoked as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int n;
-
-...
-
-n = astUnformat( frame, iaxis, string, &value );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It is supplied with a Frame pointer (``frame''), the number of an axis
-(``iaxis'') and a character string to be read (``string''). If it
-succeeds in reading a value, astUnformat returns the resulting
-coordinate to the address supplied {\em{via}} the final argument
-(``\&value''). The returned function value indicates how many
-characters were read from the string in order to obtain this result.
-
-The string is read as follows:
-
-\begin{enumerate}
-\item Any white space at the start is skipped over.
-
-\item Further characters are considered, one at a time, until the next
-character no longer matches any of the acceptable forms of input
-(given the characters that precede it). The longest sequence of
-characters which matches is then considered ``read''.
-
-\item If a suitable sequence of characters was read successfully, it
-is converted into a coordinate value which is returned. Any white
-space following this sequence is then skipped over and the total
-number of characters consumed is returned as the function value.
-
-\item If the sequence of characters read is empty, or insufficient to
-define a coordinate value, then the string does not contain a value to
-read. In this case, the read is aborted and astUnformat returns a
-function value of zero and no coordinate value.  However, it returns
-without error.
-\end{enumerate}
-
-Note that failing to read a coordinate value does not constitute an
-error, at least so far as astUnformat is concerned. However, an error
-can occur if the sequence of characters read appears to have the
-correct form but cannot be converted into a valid coordinate
-value. Typically, this will be because it violates some constraint,
-such as a limit on the value of one of its fields. The resulting error
-message will give details.
-
-For any given Frame axis, astUnformat does not necessarily always use
-the same algorithm for converting the sequence of characters it reads
-into a coordinate value. This is because some forms of input
-(particularly free-format input) can be ambiguous and might be
-interpreted in several ways depending on the context. For example, the
-celestial longitude ``12:34:56.7'' could represent an angle in degrees
-or a right ascension in hours. To decide which to use, astUnformat may
-examine the Frame's attributes and, in particular, the appropriate
-\htmlref{Format(axis)}{Formataxis} string which is used by astFormat when formatting
-coordinate values (\secref{ss:formattingaxisvalues}). This is done in
-order that astFormat and astUnformat should complement each other---so
-that formatting a value and then un-formatting it will yield the
-original value, subject to any rounding error.
-
-To give a simple (but crucially incomplete!) example, consider reading
-a value for the axis of a basic Frame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-n = astUnformat( frame, iaxis, " 1.5e6   -99.0", &value );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-astUnformat will skip over the initial space in the string supplied
-and then examine each successive character. It will accept the
-sequence ``1.5e6'' as input, but reject the space which follows
-because it does not form part of the format of a floating point
-number. It will then convert the characters ``1.5e6'' into a
-coordinate value and skip over the three spaces which follow them. The
-returned function value will therefore be 9, equal to the total number
-of characters consumed. This result may be used to address the string
-during a subsequent read, so as to commence reading at the start of
-``-99.0''.
-
-Most importantly, however, note that if the user of a program
-mistakenly enters the string ``~1.5r6\ldots'' instead of
-``~1.5e6\ldots'', a coordinate value of 1.5 and a function result of 4
-will be returned, because the ``r'' would prematurely terminate the
-attempt to read the value. Because this sort of mistake does not
-automatically result in an error but can produce incorrect results, it
-is {\bf{vital}} to check the returned function value to ensure that
-the expected number of characters have been read.\footnote{Anyone who
-seriously uses the C run time library ``scanf'' function will know
-about the need for this check!}  For example, if the string is
-expected to contain exactly one value, and nothing else, then the
-following would suffice:
-
-\begin{quote}
-\small
-\begin{verbatim}
-n = astUnformat( frame, iaxis, string, &value );
-if ( astOK ) {
-   if ( string[ n ] || !n ) {
-      <error in input data>
-   } else {
-      <value read correctly>
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If astUnformat does not detect an error itself, we check that it has
-read to the end-of-string and consumed at least one character (which
-traps the case of a zero-length input string). If this reveals an
-error, the value of ``n'' indicates where it occurred.
-
-Another common requirement is to obtain a position by reading a list
-of coordinates from a string which contains one value for each axis of
-a Frame. We assume that the values are separated in some unambiguous
-manner, perhaps using white space and/or some unspecified
-single-character separator. The choice of separator is up to the data
-supplier, who must choose it so as not to conflict with the format of
-the coordinate values, but our software does not need to know what it
-is. The following is a template algorithm for reading data in this
-form:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *s;
-double values[ 10 ];
-
-...
-
-/* Initialise a string pointer. */
-s = string;
-
-/* Obtain the number of Frame axes and loop through them. */
-naxes = astGetI( frame, "Naxes" );
-for ( iaxis = 1; iaxis <= naxes; iaxis++ ) {
-
-/* Attempt to read a value for this axis. */
-   n = astUnformat( frame, iaxis, s, &values[ iaxis - 1 ] );
-
-/* If nothing was read and this is not the first axis or the
-   end-of-string, try stepping over a separator and reading again. */
-   if ( !n && ( iaxis > 1 ) && *s )
-      n = astUnformat( frame, iaxis, ++s, &values[ iaxis - 1 ] );
-
-/* Quit if nothing was read, otherwise move on to the next value. */
-   if ( !n ) break;
-   s += n;
-}
-
-/* Check for possible errors. */
-if ( astOK ) {
-   if ( *s || !n ) {
-      <error in input data>
-   } else {
-      <values read correctly>
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, ``s'' will point to the location of any input error.
-
-Note that this algorithm is insensitive to the precise format of the
-data and will therefore work with any class of Frame and any
-reasonably unambiguous input data. For example, here is a range of
-suitable input data for a 3-dimensional basic Frame:
-
-\begin{quote}
-\small
-\begin{verbatim}
-1 2.5 3
-3.1,3.2,3.3
-1.5, 2.6, -9.9e2
--1.1+0.4-1.8
-    .1/.2/.3
- 44.0 ; 55.1 -14
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:permutingaxes}Permuting Frame Axes}
-
-Once a \htmlref{Frame}{Frame} has been created, it is not possible to change the number
-of axes it contains, but it is possible to change the order in which
-these axes occur. To do so, an integer {\em{permutation array}} is
-filled with the numbers of the axes so as to specify the new order,
-{\em{e.g:}}
-
-\begin{quote}
-\small
-\begin{verbatim}
-int perm[ 2 ] = { 2, 1 };
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In this case, the axes of a 2-dimensional Frame could be interchanged
-by passing this permutation array to the \htmlref{astPermAxes}{astPermAxes} function. That
-is, an ($x_1,x_2$) coordinate system would be changed into an
-($x_2,x_1$) coordinate system by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astPermAxes( frame, perm );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the axes are permuted more than once, the effects are cumulative.
-You are, of course, not restricted to Frames with only two axes.
-
-\subsection{Selecting Frame Axes}
-
-An alternative to changing the number of \htmlref{Frame}{Frame} axes, which is not
-allowed, is to create a new Frame by selecting axes from an existing
-one. The method of doing this is very similar to the way \htmlref{astPermAxes}{astPermAxes}
-is used (\secref{ss:permutingaxes}), in that we supply an integer
-array filled with the numbers of the axes we want, in their new
-order. In this case, however, the number of array elements need not
-equal the number of Frame axes.
-
-For example, we could select axes 3 and 2 (in that order) from a
-3-dimensional Frame as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astFrame *frame1, *frame2;
-astMapping *mapping;
-int pick[ 2 ] = { 3, 2 };
-
-...
-
-frame2 = astPickAxes( frame1, 2, pick, &mapping );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would return a pointer to a 2-dimensional Frame (``frame2'')
-which contains the information associated with axes 3 and 2, in that
-order, from the original Frame (``frame1''). The original Frame is not
-altered by this process. Beware, however, that the axis information
-may still be shared by both Frames, so if you wish to alter either of
-them independently you may first need to use \htmlref{astCopy}{astCopy}
-(\secref{ss:copyingobjects}) to make an independent copy.
-
-In addition to the new Frame pointer, \htmlref{astPickAxes}{astPickAxes} will also return a
-pointer to a new \htmlref{Mapping}{Mapping} {\em{via}} its fourth argument (you may supply a
-NULL pointer as an argument if you do not want this Mapping).  This
-Mapping will inter-relate the two Frames. By this we mean that its
-forward transformation will convert coordinates originally in the
-coordinate system represented by ``frame1'' into that represented by
-``frame2'', while its inverse transformation will convert in the
-opposite direction. In this particular case, the Mapping would be a
-\htmlref{PermMap}{PermMap} (\secref{ss:permmapexample}) and would implement the following
-transformations:
-
-\begin{quote}
-\begin{verbatim}
-Forward:
-   (1, 2, 3) --> (3, 2)
-   (2, 4, 6) --> (6, 4)
-   (3, 6, 9) --> (9, 6)
-   (4, 8, 12) --> (12, 8)
-   (5, 10, 15) --> (15, 10)
-
-Inverse:
-   (3, 2) --> (<bad>, 2, 3)
-   (6, 4) --> (<bad>, 4, 6)
-   (9, 6) --> (<bad>, 6, 9)
-   (12, 8) --> (<bad>, 8, 12)
-   (15, 10) --> (<bad>, 10, 15)
-\end{verbatim}
-\end{quote}
-
-This is our first introduction to the idea of inter-relating pairs of
-Frames {\em{via}} a Mapping, but this will assume a central role later on.
-
-Note that when using astPickAxes, it is also possible to request more
-axes than there were in the original Frame. This will involve
-selecting axes from the original Frame that do not exist. To do this,
-the corresponding axis number (in the ``pick'' array) should be set to
-zero and the effect is to introduce an additional new axis which is
-not derived from the original Frame. This axis will have default
-values for all its attributes. You will need to do this because
-astPickAxes does not allow you to select any of the original axes more
-than once.\footnote{It will probably not be obvious why this
-restriction is necessary, but consider creating a Frame with one
-longitude axis and two latitude axes. Which latitude axis should be
-associated with the longitude axis?}
-
-\subsection{\label{ss:distanceandoffset}Calculating Distances, Angles and Offsets}
-Some complementary 
-functions 
-are provided for use with Frames to allow you to perform geometric
-operations without needing to know the nature of the coordinate system
-represented by the \htmlref{Frame}{Frame}.
-
-Functions 
-can be used to find the distance between two points, and to offset a 
-specified distance along a line joining two points, {\em{etc.}} In essence, 
-these define the metric of the coordinate space which the Frame represents. In
-the case of a basic Frame, this is a Cartesian metric.
-
-The first of these functions, \htmlref{astDistance}{astDistance}, returns a double distance
-value when supplied with the Frame coordinates of two points. For
-example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double dist;
-double point1[ 2 ] = { 0.0, 0.0 };
-double point2[ 2 ] = { 1.0, 1.0 };
-
-...
-
-dist = astDistance( frame, point1, point2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This calculates the distance between the origin (0,0) and a point at
-position (1,1). In this case, the result, as you would expect, is
-$\surd{2}$. However, this is only true for the Cartesian coordinate
-system which a basic Frame represents. In general, astDistance will
-calculate the geodesic distance between the two points, so that with a
-more specialised Frame (such as a \htmlref{SkyFrame}{SkyFrame}, representing the celestial
-sphere) a great-circle distance might be returned.
-
-The \htmlref{astOffset}{astOffset} function is really the inverse of astDistance. Given two
-points in a Frame, it calculates the coordinates of a third point
-which is offset a specified distance away from the first point along
-the geodesic joining it to the second one. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double point1[ 2 ] = { 0.0, 0.0 };
-double point2[ 2 ] = { 1.0, 1.0 };
-double point3[ 2 ];
-
-...
-
-astOffset( frame, point1. point2, 0.5, point3 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would fill the ``point3'' array with the coordinates of a point
-which is offset 0.5 units away from the origin (0,0) in the direction
-of the position (1,1). Again, this is a simple result in a Cartesian
-Frame, as varying the offset will trace out a straight line. On the
-celestial sphere, however ({\em{e.g.}}\ using a SkyFrame), it would
-trace out a great circle.
-
-The functions \htmlref{astAxDistance}{astAxDistance} and \htmlref{astAxOffset}{astAxOffset} are similar to astDistance
-and astOffset, except that the curves which they use as ``straight
-lines'' are not geodesics, but curves parallel to a specified axis\footnote
-{For instance, a line of constant Declination is not a geodesic}. One
-reason for using these functions is to deal with the cyclic ambiguity of
-longitude and latitude axes.
-
-The \htmlref{astOffset2}{astOffset2} function is similar to astOffset, but instead of using the
-geodesic which passes through two positions, it uses the geodesic which
-passes at a given position angle through the starting position. 
-
-Position angles are always measured from the positive direction of the 
-second Frame axis to the required line, with positive angles being in the 
-same sense as rotation from the positive direction of the second axis to 
-the positive direction of the first Frame axis. This definition applies
-to all classes of Frame, including SkyFrame. The default ordering of axes
-in a SkyFrame makes the second axis equivalent to north, and so the
-definition of position angle given above corresponds to the normal 
-astronomical usage, ``from north, through east''. However, it should be
-remembered that it is possible to permute the axes of a SkyFrame (or
-indeed any Frame), so that north becomes axis 1. In this case, an AST
-``position angle'' would be the angle ``from east, through north''. 
-Always take the axis ordering into account when deriving an astronomical 
-position angle from an AST position angle.
-
-Within a Cartesian coordinate system, the position angle of a geodesic
-({\em{i.e.}}\ a straight line) is constant along its entire length, but
-this is not necessarily true of other coordinate systems. Within a
-spherical coordinate system, for instance, the position angle of a geodesic
-will vary along its length (except for the special cases of a meridian and
-the equator). In addition to returning the required offset position, the 
-astOffset2 function 
-returns the position angle of the geodesic at the
-offset position. This is useful if you want to trace out a path which
-involves turning through specified angles. For instance, tracing out a
-rectangle in which each side is a geodesic involves turning through 90 
-degrees at the corners. To do this, use astOffset2 to calculate the
-position of each corner, and then add (or subtract) 90 degrees from the 
-position angle returned by astOffset2.
-
-The \htmlref{astAngle}{astAngle} function 
-calculates the angle subtended by two points, at a third point.
-If used with a 2-dimensional Frame the returned angle
-is signed to indicate the sense of rotation (clockwise or anti-clockwise)
-in taking the ``shortest route'' from the first point to the second.
-If the Frame has more than 2 axes, the result is un-signed and is always
-in the range zero to $\pi$. 
-
-The \htmlref{astAxAngle}{astAxAngle} function is similar to astAngle,
-but the ``reference direction'', from which angles are measured, is 
-a specified axis. 
-
-The \htmlref{astResolve}{astResolve} function
-resolves a given displacement within a Frame into two components, parallel and 
-perpendicular to a given reference direction. 
-
-The displacement is specified by two positions within the Frame; the
-starting and ending positions. The reference direction is defined by the 
-geodesic curve passing through the starting position and a third specified
-position. The lengths of the two components are returned, together with
-the position on the reference geodesic which is closest to the third
-supplied point.
-
-\subsection{\label{ss:framedomains}The Domain Attribute}
-
-The \htmlref{Domain}{Domain} attribute is one of the most important properties of a
-\htmlref{Frame}{Frame}, although the concept it expresses can sometimes seem a little
-subtle.  We will introduce it here, but its true value will probably
-not become apparent until later (\secref{ss:framesetconverting}).
-
-To understand the need for the Domain attribute, consider using
-different Frames to represent the following different coordinate
-systems associated with a CCD image:
-
-\begin{enumerate}
-\item A coordinate system based on pixel numbers.
-
-\item Positions on the CCD chip, measured in $\mu$m.
-
-\item Positions in the focal plane of the telescope, measured in mm.
-
-\item A celestial coordinate system, measured in radians.
-\end{enumerate}
-
-If we had two such CCD images, we might legitimately want to align
-them pixel-for-pixel ({\em{i.e.}}\ using the coordinate system based
-on pixel numbers) in order to, say, divide by a flat-field exposure.
-We might similarly consider aligning them using any of the other
-coordinate systems so as to achieve different results. For example, we
-might consider merging separate images from a CCD mosaic by using
-focal plane positions.
-
-It would obviously not be legitimate, however, to directly compare
-positions in one image measured in pixels with positions in the other
-measured in mm, nor to equate chip positions in $\mu$m with sky
-coordinates in radians. If we wanted to inter-compare these
-coordinates, we would need to do it indirectly, using other
-information based on the experimental set-up. For instance, we might
-need to know the size of the pixels expressed in mm and the
-orientation of the CCD chip in the focal plane.
-
-Note that it is not simply the difference in physical units which
-prevents certain coordinates from being directly inter-compared
-(because the appropriate unit scaling factors could be included
-without any additional information). Neither is it the fact that
-different coordinate systems are in use (because we could legitimately
-inter-compare two different celestial coordinate systems without any
-extra information).  Instead, it is the different nature of the
-coordinate spaces to which these coordinate systems have been applied.
-
-We normally express this by saying that the coordinate systems apply
-to different {\em{physical domains}}. Although we may establish
-{\em{ad hoc}} relationships between coordinates in different physical
-domains, they are not intrinsically related to each other and we need
-to supply extra information before we can convert coordinates between
-them.
-
-In AST, the role of the (character string) Domain attribute is to
-assign Frames to their respective physical domains. The way it
-operates is as follows:
-
-\begin{itemize}
-\item Coordinate systems which apply to the same physical domain
-({\em{i.e.}}\ whose Frames have the same Domain value) can be directly
-inter-compared.
-
-If the domain has several coordinate systems associated with it
-({\em{e.g.}}\ the celestial sphere), then a coordinate conversion may
-be involved. Otherwise, coordinate values may simply be equated.
-
-\item Coordinate systems which apply to different physical domains
-({\em{i.e.}}\ whose Frames have different Domain values) cannot be
-directly inter-compared.
-
-If any relationship does exist between such coordinate systems---and
-it need not---then additional information must be supplied in order to
-establish the relationship between them in any particular case. We
-will see later (\secref{ss:framesets}) how to establish such
-relationships between Frames in different domains.
-\end{itemize}
-
-With the basic Frames we are considering here, each physical domain only
-has a single (Cartesian) coordinate system associated with it, so that if
-two such Frames have the same Domain value, their coordinate systems will
-be identical and may simply be equated. With more specialised Frames,
-however, more than one coordinate system may apply to each domain. In
-such cases, a coordinate conversion may need to be performed.
-
-When a basic Frame is created, its Domain attribute defaults to an
-empty string. This means that all such Frames belong to the same
-(null) domain by default and therefore describe the same unspecified
-physical coordinate space. In order to assign a Frame to a different
-domain, you simply need to set its Domain value. This is normally most
-conveniently done when it is created, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-frame1 = astFrame( 2, "Domain=CCD_CHIP,"
-                      "Unit(1)=micron,"
-                      "Unit(2)=micron" );
-frame2 = astFrame( 2, "Domain=FOCAL_PLANE,"
-                      "Unit(1)=mm,"
-                      "Unit(2)=mm" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have created two Frames in different physical
-domains. Although their coordinate values all have units of length,
-they cannot be directly inter-compared (because their axes may be
-rotated with respect to each other, for instance).
-
-All Domain values are automatically converted to upper case and white
-space is removed, but there are no other restrictions on the names you
-may use to label different physical domains. From a practical point of
-view, however, it is worth following a few conventions
-(\secref{ss:domainconventions}).
-
-\subsection{\label{ss:domainconventions}Conventions for Domain Names}
-
-When choosing a value for the \htmlref{Domain}{Domain} attribute of a \htmlref{Frame}{Frame}, it
-obviously makes sense to avoid generic names which might clash with
-those used for similar (but subtly different!) purposes by other
-programmers. If you are developing software for an instrument, for
-example, and want to identify an instrumental coordinate system, then
-it is sensible to add a distinguishing prefix. For instance, you might
-use $<$INST$>$\_FOCAL\_PLANE, where $<$INST$>$ ({\em{e.g.}}\ an
-acronym) identifies your instrument.
-
-For some purposes, however, a standard choice of Domain name is
-desirable so that different items of software can communicate. For
-this purpose, the following Domain names are reserved by AST and the
-use recommended below should be carefully observed:
-
-\begin{quote}
-\begin{description}
-\item[GRAPHICS]\mbox{}\\
-Identifies the coordinate space used by an underlying computer
-graphics system to specify plotting operations. Typically, when
-performing graphical operations, AST is used to define additional
-coordinate systems which are related to these ``native'' graphical
-coordinates.  Plotting may be carried out in any of these coordinate
-systems, but the GRAPHICS domain identifies the native coordinates
-through which AST communicates with the underlying graphics system.
-
-\item[GRID]\mbox{}\\
-Identifies the instantaneous {\em{data grid}} used to store and handle
-data, together with an associated coordinate system. In this
-coordinate system, the first element stored in an array of data always
-has a coordinate value of unity at its centre and all elements have
-unit extent. This applies to all dimensions.
-
-If data are copied or transformed to a new data grid (by whatever
-means), or a subset of the original grid is extracted, then the same
-rules apply to the copy or subset. Its first element therefore has
-GRID coordinate values of unity at its centre. Note that this means
-that GRID coordinates remain attached to the first element of the data
-grid and not to its data content ({\em{e.g.}}\ the features in an
-image).
-
-\item[PIXEL]\mbox{}\\
-Identifies an array of pixels and an associated {\em{pixel-based}}
-coordinate system which is related to the GRID coordinate system
-(above) simply by a shift of origin along each axis. This shift may be
-integral, fractional, positive, negative or zero. The data elements
-retain their unit extent along each axis.
-
-Because the amount of shift is unspecified, the PIXEL domain is
-distinct from the GRID domain. The relationship between them contains
-a degree of uncertainty, such as typically arises from the different
-conventions used by different software systems. For instance, in some
-software the first pixel is regarded as being centred at (1,1), while
-in other software it is at (0.5,0.5). In addition, some software
-packages implement a ``pixel origin'' which allows pixel coordinates
-to start at an arbitrary value.
-
-The GRID domain (which corresponds with the pixel-numbering convention
-used by FITS) is a special case of the PIXEL domain and avoids this
-uncertainty. In general, additional information is required in order
-to convert from one to the other.
-
-\item[SKY]\mbox{}\\
-Identifies the domain which contains all equivalent celestial
-coordinate systems. Because these are represented in AST by SkyFrames
-(\secref{ss:skyframes}), it should be no surprise that the default
-Domain value for a \htmlref{SkyFrame}{SkyFrame} is SKY. Since there is only one sky, you
-probably won't need to change this very often.
-
-\item[SPECTRUM]\mbox{}\\
-Identifies the domain used to describe positions within an
-electro-magnetic spectrum. The AST \htmlref{SpecFrame}{SpecFrame} (\secref{ss:specframes})
-class describes positions within this domain, allowing a wide range of
-different coordinate systems to be used (frequency, wavelength,
-{\em{etc}}). The default Domain value for a SpecFrame is SPECTRUM.
-
-\item[TIME]\mbox{}\\
-Identifies the domain used to describe moments in time. The AST \htmlref{TimeFrame}{TimeFrame} 
-class describes positions within this domain, allowing a wide range of
-different coordinate systems and timescales to be used. The default Domain 
-value for a TimeFrame is TIME.
-
-\end{description}
-\end{quote}
-
-Although we have drawn a necessary distinction here between the GRID
-and PIXEL domains, we will continue to refer in general terms to image
-``pixels'' and ``pixel coordinates'' whenever this distinction is not
-important. This should not be taken to imply that the GRID convention
-for numbering pixels is excluded---in fact, it is usually to be
-preferred (at the level of data handling being discussed in this
-document) and we recommend it.
-
-\subsection{\label{ss:frameunits}The Unit Attribute}
-Each axis of a \htmlref{Frame}{Frame} has a Unit attribute which holds the physical units used
-to describe positions on the axis. The index of the axis to which the 
-attribute refers should normally be placed in parentheses following the
-attribute name (``Unit(2)'' for instance). However, if the Frame has only
-a single axis, then the axis index can be omitted.
-
-In versions of AST prior to version 2.0, the Unit attribute was nothing
-more than a descriptive string intended purely for human readers---no
-part of the AST system used the Unit string for any purpose (other than 
-inclusion in axis labels produced by the \htmlref{Plot}{Plot} class). In particular, no
-account was taken of the Unit attribute when finding the \htmlref{Mapping}{Mapping} between
-two Frames. Thus if the conversion between a pair of 1-dimensional Frames 
-representing velocity was found (using
-\htmlref{astConvert}{astConvert}
-) the returned Mapping would always be a \htmlref{UnitMap}{UnitMap}, even if the Unit
-attributes of the two Frames were ``km/h'' and ``m/s''. This behaviour is
-referred to below as a \emph{passive} Unit attribute.
-
-As of AST version 2.0, a facility exists which allows the Unit attribute
-to be \emph{active}; that is, differences in the 
-Unit attribute may be taken into account when finding the Mapping between
-two Frames. In order to minimise the risk of breaking older software, the 
-\emph{default} behaviour of simple Frames and SkyFrames is unchanged from 
-previous versions (\emph{i.e.} they have passive Unit attributes). However, 
-the new 
-functions \htmlref{astSetActiveUnit}{astSetActiveUnit} and \htmlref{astGetActiveUnit}{astGetActiveUnit}
-allow this default behaviour to be changed. The \htmlref{SpecFrame}{SpecFrame} and \htmlref{TimeFrame}{TimeFrame}
-classes \emph{always} have an active Unit attribute (attempts to change this 
-are ignored).
-
-For instance, consider the above example of two 1-dimensional Frames
-describing velocity. These Frames can be created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame1, *frame2;
-frame1 = astFrame( 1, "Domain=VELOCITY,Unit=km/h" );
-frame2 = astFrame( 1, "Domain=VELOCITY,Unit=m/s" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-By default, these Frames have passive Unit attributes, and so an attempt
-to find a Mapping between them would ignore the difference in their Unit
-attributes and return a unit Mapping. To avoid this, we indicate that we
-want these Frames to have \emph{active} Unit attributes, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetActiveUnit( frame1, 1 );
-astSetActiveUnit( frame2, 1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If we then find the Mapping between them as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *cvt;
-...
-cvt = astConvert( frame1, frame2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-the Mapping contained within the \htmlref{FrameSet}{FrameSet} returned by
-astConvert
-will be a one-dimensional \htmlref{ZoomMap}{ZoomMap} which simply scales its input (a
-velocity in $km/h$) by a factor of 0.278 to create its output (a velocity
-in $m/s$).
-
-In fact we need not have set the Unit attribute active in ``frame1''
-since the behaviour of astConvert is determined by its ``to'' Frame
-(the second Frame parameter).
-
-\subsubsection{\label{ss:unitsyntax}The Syntax for Unit Strings}
-Conversion between units systems relies on the use of a specific syntax
-for the Unit attribute. If the value of the Unit attribute does not
-conform to this syntax, then an error will be reported if an attempt is
-made to use it to determine an inter-unit \htmlref{Mapping}{Mapping} (this will never happen
-if the Unit attribute is \emph{passive}).
-
-The adopted syntax is that described in FITS-WCS paper I "Representation
-of World Coordinate in FITS" by Greisen \& Calabretta. We distinguish
-here between ``basic'' units and ``derived'' units: derived units are
-defined in terms of other units (either derived or basic), whereas basic
-units have no such definitions. Derived units may be represented by their
-own \emph{symbol} (\emph{e.g.} ``Jy''---the Jansky) or by a
-\emph{mathematical expression} which combines other symbols and constants
-to form a definition of the unit (\emph{e.g.} ``km/s''---kilometres per
-second). Unit symbols may be prefixed by a string representing a standard 
-multiple or sub-multiple.
-
-In addition to the unit symbols listed in FITS-WCS Paper I, any other
-arbitrary unit symbol may be used, with the proviso that it will not be
-possible to convert between Frames using such units. The exception to
-this is if both Frames refer to the same unknown unit string. For instance,
-an axis with unknown unit symbol "flop" \emph{could} be converted to an axis 
-with  unit "Mflop" (Mega-flop).
-
-Unit symbols (optionally prefixed with a multiple or sub-multiple) can be
-combined together using a limited range of mathematical operators and
-functions, to produce new units. Such expressions may also contain
-parentheses and numerical constants (these may optionally use
-``scientific'' notation including an ``E'' character to represent the
-power of 10).
-
-The following tables list the symbols for the basic and derived units which 
-may be included in a units string, the standard prefixes for multiples
-and sub-multiples, and the strings which may be used to represent
-mathematical operators and functions.
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|}
-\hline
-\multicolumn{3}{|c|}{{\large Basic units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{\htmlref{Full}{Full} Name} \\ \hline
-length              & m   & metre \\ 
-mass                & g   & gram \\
-time                & s   & second \\
-plane angle         & rad & radian \\
-solid angle         & sr  & steradian \\
-temperature         & K   & Kelvin \\
-electric current    & A   & Ampere \\
-amount of substance & mol & mole \\
-luminous intensity  & cd  & candela \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|l|l|}
-\hline
-\multicolumn{4}{|c|}{{\large Derived units}} \\ \hline
-\multicolumn{1}{|c|}{Quantity} & \multicolumn{1}{|c|}{Symbol} &
-\multicolumn{1}{c|}{Full Name} & \multicolumn{1}{c|}{Definition} \\ \hline
-area & barn & barn & 1.0E-28 m**2 \\
-area & pix & pixel & \\
-area & pixel & pixel & \\
-electric capacitance & F & Farad & C/V \\
-electric charge & C & Coulomb & A s \\
-electric conductance & S & Siemens & A/V \\
-electric potential & V & Volt & J/C \\
-electric resistance & Ohm & Ohm & V/A \\
-energy & J & Joule & N m \\
-energy & Ry & Rydberg & 13.605692 eV \\
-energy & eV & electron-Volt & 1.60217733E-19 J \\
-energy & erg & erg & 1.0E-7 J \\
-events & count & count & \\
-events & ct & count & \\
-events & ph & photon & \\
-events & photon & photon & \\
-flux density & Jy & Jansky & 1.0E-26 W /m**2 /Hz \\
-flux density & R & Rayleigh & 1.0E10/(4*PI) photon.m**-2 /s/sr \\
-flux density & mag & magnitude & \\
-force & N & Newton & kg m/s**2 \\
-frequency & Hz & Hertz & 1/s \\
-illuminance & lx & lux & lm/m**2 \\
-inductance & H & Henry & Wb/A \\
-length & AU & astronomical unit & 1.49598E11 m \\
-length & Angstrom & Angstrom & 1.0E-10 m \\
-length & lyr & light year & 9.460730E15 m \\
-length & pc & parsec & 3.0867E16 m \\
-length & solRad & solar radius & 6.9599E8 m \\
-luminosity & solLum & solar luminosity & 3.8268E26 W \\
-luminous flux & lm & lumen & cd sr \\
-magnetic field & G & Gauss & 1.0E-4 T \\
-magnetic flux & Wb & Weber & V s \\
-mass & solMass & solar mass & 1.9891E30 kg \\
-mass & u & unified atomic mass unit & 1.6605387E-27 kg \\
-magnetic flux density & T & Tesla & Wb/m**2 \\
-plane angle  & arcmin & arc-minute & 1/60 deg \\
-plane angle  & arcsec & arc-second & 1/3600 deg \\
-plane angle  & mas & milli-arcsecond & 1/3600000 deg \\
-plane angle & deg & degree & pi/180 rad \\
-power & W & Watt & J/s \\
-pressure, stress & Pa & Pascal & N/m**2 \\
-time  & a & year & 31557600 s \\
-time  & d & day & 86400 s \\
-time  & h & hour & 3600 s \\
-time  & yr & year & 31557600 s \\
-time  & min & minute & 60 s \\
-      & D & Debye & 1.0E-29/3 C.m \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|lll|lll|}
-\hline
-\multicolumn{6}{|c|}{{\large Prefixes for multiples \& 
-sub-multiples}} \\ \hline
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} & 
-\multicolumn{1}{c|}{Prefix} &
-\multicolumn{1}{|c}{Sub-multiple} & \multicolumn{1}{c}{Name} & 
-\multicolumn{1}{c|}{Prefix} \\ \hline
-$10^{-1}$ & deci & d & $10$ & deca & da \\
-$10^{-2}$ & centi & c & $10^{2}$ & hecto & h \\
-$10^{-3}$ & milli & m & $10^{3}$ & kilo & k \\
-$10^{-6}$ & micro & u & $10^{6}$ & mega & M \\
-$10^{-9}$ & nano & n & $10^{9}$ & giga & G \\
-$10^{-12}$ & pico & p & $10^{12}$ & tera & T \\
-$10^{-15}$ & femto & f & $10^{15}$ & peta & P \\
-$10^{-18}$ & atto & a & $10^{18}$ & exa & E \\
-$10^{-21}$ & zepto & z & $10^{21}$ & zetta & Z \\
-$10^{-24}$ & yocto & y & $10^{24}$ & yotta & Y \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}[htbp]
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-\multicolumn{2}{|c|}{{\large Mathematical operators \& functions}} \\
-\hline
-\multicolumn{1}{|c|}{String} & \multicolumn{1}{|c|}{Meaning} \\ \hline
-sym1 sym2           & multiplication (a space) \\ 
-sym1*sym2           & multiplication (an asterisk) \\
-sym1.sym2           & multiplication (a dot) \\
-sym1/sym2           & division \\
-sym1**y             & exponentiation ($y$ must be a numerical constant)\\
-sym1\verb+^+y       & exponentiation ($y$ must be a numerical constant)\\
-log(sym1)           & common logarithm \\
-ln(sym1)            & natural logarithm \\
-exp(sym1)           & exponential \\
-sqrt(sym1)          & square root \\
-\hline
-\end{tabular}
-\end{center}
-\end{table}
-
-\subsubsection{Side-effects of Changing the Unit attribute}
-If an \htmlref{Axis}{Axis} has an active Unit attribute, changing its value (either by 
-setting a new value or by clearing it so that the default value is 
-re-instated) may cause the Label and Symbol attributes to be changed
-accordingly. For instance, if an Axis has Unit, Label and Symbol of ``Hz'',
-``Frequency'' and ``nu'', then changing its Unit attribute to ``log(Hz)''
-will cause AST to change its Label and Symbol to ``log(Frequency)'' and 
-``Log(nu)''. These changes are only made if the Unit attribute is active,
-and a \htmlref{Mapping}{Mapping} can be found from the old units to the new units. On the other
- hand, changing the Unit from ``Hz'' to ``MHz'' would not cause any change 
-to the Label or Symbol attributes.
-
-\cleardoublepage
-\section{\label{ss:skyframes}Celestial Coordinate Systems (SkyFrames)}
-
-A \htmlref{Frame}{Frame} which is specialised for representing coordinate systems on
-the celestial sphere is obviously of great importance in
-astronomy. The \htmlref{SkyFrame}{SkyFrame} is such a Frame. In this section we examine
-the additional properties and behaviour of a SkyFrame that distinguish
-it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SkyFrame Model}
-
-A \htmlref{SkyFrame}{SkyFrame} is, of course, a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes.  When used as a Mapping, a
-SkyFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SkyFrame represents a 2-dimensional
-{\em{spherical}} coordinate system, in which the shortest distance
-between two points is a great circle.  A SkyFrame therefore always has
-exactly two axes which represent the longitude and latitude of a
-coordinate system residing on the celestial sphere. Many such
-coordinate systems can be represented by a SkyFrame, as we will see
-shortly.
-
-A SkyFrame can represent any of the commonly used celestial coordinate
-systems. Optionally, the origin of the longitude/latitude system can be 
-moved to any specified point in the standard celestial system, allowing
-a SkyFrame to represent offsets from a specified sky position.
-
-When it is first created, a SkyFrame's axes are always in the order
-(longitude,~latitude) but this can be changed, if required, by using the
-\htmlref{astPermAxes}{astPermAxes} function (\secref{ss:permutingaxes}). The order of the axes
-can be determined at any time using the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes. A
-SkyFrame's coordinate values are always stored as angles in (double
-precision) radians, regardless of the setting of the Unit attribute.
-
-\subsection{Creating a SkyFrame}
-
-The \htmlref{SkyFrame}{SkyFrame} constructor function is particularly simple and a
-SkyFrame with default attributes is created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSkyFrame *skyframe;
-
-...
-
-skyframe = astSkyFrame( "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Such a SkyFrame would represent the default celestial coordinate
-system which, at present, is the ICRS system (the default was "FK5(J2000)" 
-in versions of AST prior to 3.0).
-
-\subsection{Specifying a Particular Celestial Coordinate System}
-
-For many purposes, the ICRS coordinate system is perfectly
-adequate. In order to support conversion between a variety of
-celestial coordinate systems, however, you can create SkyFrames that
-represent any of these.
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SkyFrame}{SkyFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SkyFrame is
-created. For example, a SkyFrame representing the old FK4~(B1950.0)
-coordinate system would be created by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-skyframe = astSkyFrame( "System=FK4" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that specifying ``System$=$FK4'' also changes the associated
-equinox (from J2000.0 to B1950.0). This is because the default value
-of the SkyFrame's \htmlref{Equinox}{Equinox} attribute (\secref{ss:equinoxitem}) depends
-on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed.  The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of equatorial coordinate systems, together with ecliptic and galactic
-coordinates.
-
-General spherical coordinates are supported by specifying
-``System$=$unknown''. You should note, though, that no \htmlref{Mapping}{Mapping} can be 
-created to convert between ``unknown'' coordinates and any of the other 
-celestial coordinate systems (see \secref{ss:introducingconversion} ).
-
-\subsection{Attributes which Qualify Celestial Coordinate Systems}
-
-Many celestial coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-FK5~(J2010.0) system is distinguished from the FK5~(J2000.0)
-system by a different equinox---and the coordinates of a fixed
-astronomical source would have different values when expressed in
-these two systems.
-
-In AST, these free parameters are represented by additional \htmlref{SkyFrame}{SkyFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by 
-assigning an explicit value to the attribute, rather than simply relying on 
-the default.
-
-
-The main SkyFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\label{ss:epochitem}\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation). 
-
-\item[\label{ss:equinoxitem}\htmlref{Equinox}{Equinox}]\mbox{}\\
-This value is used to qualify celestial coordinate systems that are
-notionally based on the Earth's equator and/or the ecliptic (the plane
-of the Earth's orbit around the Sun). The position of either of these
-planes is difficult to specify precisely, so in practice a model
-{\em{mean}}\ equator and/or ecliptic are used instead. These, together
-with the point on the sky that defines the coordinate origin (termed
-the {\em{mean equinox}}) move with time according to some model which
-smoothes out the more rapid fluctuations. The SkyFrame class supports
-both the old FK4 model and the newer FK5 one.
-
-Coordinates expressed in any of these systems vary with time due to
-movement (by definition) of the coordinate system itself, and must
-therefore be qualified by a moment in time (the {\em{epoch of the mean
-equinox,}} or ``equinox'' for short) which specifies the position of
-the model coordinate system on the sky. This is the role of the
-Equinox attribute.
-
-Note that it is quite valid and common to relate the position of a
-source to an equinox other than the date of observation. Usually a
-standard equinox such as J2000.0 is used, meaning that the coordinates
-are referred to axes defined by where the model mean equator and
-ecliptic would lie on the sky at the Julian epoch J2000.0.
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-For the interested reader, an excellent overview of celestial
-coordinate systems can also be found in the documentation for the
-SLALIB library (\xref{SUN/67}{sun67}{}).
-
-The value of these qualifying attributes is most conveniently set at
-the same time as the System value, {\em{e.g.}}\ when a SkyFrame is
-created. For instance:
-
-\begin{quote}
-\small
-\begin{verbatim}
-skyframe = astSkyFrame( "System=Ecliptic, Equinox=J2005.5" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would create a SkyFrame representing an ecliptic coordinate system
-referred to the mean equinox and ecliptic of Julian epoch J2005.5.
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SkyFrame Attributes}
-
-The default values supplied for many \htmlref{SkyFrame}{SkyFrame} attributes will depend
-on the value of the SkyFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{astShow}{astShow} to examine a SkyFrame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( astSkyFrame( "System=FK4-NO-E, Epoch=1958" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SkyFrame         # Description of celestial coordinate system
-#   Title = "FK4 equatorial coordinates; no E-terms; mean equinox B1950.0; 
-epoch B1958.0"   # Title of coordinate system
-    Naxes = 2   # Number of coordinate axes
-#   Domain = "SKY"      # Coordinate system domain
-    Epoch = 1958        # Besselian epoch of observation
-#   Lbl1 = "Right ascension"    # Label for axis 1
-#   Lbl2 = "Declination"        # Label for axis 2
-    System = "FK4-NO-E"         # Coordinate system type
-#   Uni1 = "hh:mm:ss.s"         # Units for axis 1
-#   Uni2 = "ddd:mm:ss"  # Units for axis 2
-#   Dir1 = 0    # Plot axis 1 in reverse direction
-#   Bot2 = -1.5707963267949     # Lowest legal axis value
-#   Top2 = 1.5707963267949      # Highest legal axis value
-    Ax1 =       # Axis number 1
-       Begin SkyAxis    # Celestial coordinate axis
-       End SkyAxis
-    Ax2 =       # Axis number 2
-       Begin SkyAxis    # Celestial coordinate axis
-       End SkyAxis
- IsA Frame      # Coordinate system description
-#   Eqnox = 1950        # Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Format specifiers are all set to values appropriate
-for the particular equatorial coordinate system that the SkyFrame
-represents.
-
-This means, for example, that if we were to use this SkyFrame to
-format a right ascension value stored in radians using \htmlref{astFormat}{astFormat}
-(\secref{ss:formattingaxisvalues}), it would automatically result in a
-string in sexagesimal notation (such as ``12:14:35.7'') suitable for
-display.  If we changed the value of the SkyFrame's Digits attribute
-(which is inherited from the \htmlref{Frame}{Frame} class), the number of digits
-appearing would also change accordingly.
-
-These choices would be appropriate for a System value of ``FK4-NO-E'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, ecliptic longitude is
-traditionally expressed in degrees, so setting ``System=ecliptic''
-would result in coordinate values being formatted as degrees by
-default.
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself.
-
-\subsection{\label{ss:formattingskyaxisvalues}Formatting Celestial Coordinates}
-
-SkyFrames use \htmlref{astFormat}{astFormat} for formatting coordinate values in the same
-way as other Frames (\secref{ss:formattingaxisvalues}). However, they
-offer a different set of formatting options more appropriate to
-celestial coordinates.
-
-The Digits attribute of a \htmlref{SkyFrame}{SkyFrame} behaves in essentially the same way
-as for a basic \htmlref{Frame}{Frame} (\secref{ss:formattingwithdigits}), so the
-precision with which celestial coordinates are displayed can also be
-adjusted in this way. However, the range of format specifiers that can
-be given for the \htmlref{Format(axis)}{Formataxis} attribute, and the default format
-resulting from any particular Digits value, is different.
-
-The syntax of SkyFrame format specifiers is detailed under the
-description of the Format(axis) attribute in
-\appref{ss:attributedescriptions}.  Briefly, however, it allows
-celestial coordinates to be expressed either as angles or times and to
-include one or more of the fields:
-
-\begin{quote}
-\begin{itemize}
-\item degrees or hours
-\item arc-minutes or minutes
-\item arc-seconds or seconds
-\end{itemize}
-\end{quote}
-
-with a specified number of decimal places for the final field. A range
-of field separators is also available, as the following examples show:
-
-\begin{quote}
-\begin{center}
-\begin{tabular}{|l|l|}
-\hline
-{\bf{Format Specifier}} & {\bf{Example Formatted Value}}\\
-\hline \hline
-{\tt{d}} & {\tt{219}}\\
-{\tt{d.3}} & {\tt{219.123}}\\
-{\tt{dm}} & {\tt{219:05}}\\
-{\tt{dm.2}} & {\tt{219:05.44}}\\
-{\tt{dms}} & {\tt{219:05:42}}\\
-{\tt{hms.1}} & {\tt{15:44:13.8}}\\
-{\tt{bdms.2}} & {\tt{219 05 42.81}}\\
-{\tt{lhms.3}} & {\tt{15h44m13.88s}}\\
-{\tt{+zlhms}} & {\tt{+06h10m44s}}\\
-{\tt{ms.1}} & {\tt{13145:42.8}}\\
-{\tt{lmst.3}} & {\tt{876m22.854s}}\\
-{\tt{s.2}} & {\tt{788742.81}}\\
-\hline
-\end{tabular}
-\end{center}
-\end{quote}
-
-Note the following key points:
-
-\begin{itemize}
-\item The required fields are specified using characters chosen from
-either ``dms'' or ``hms'' according to whether the value is to be
-formatted as an angle (in degrees) or a time (in hours).
-
-\item If no degrees or hours field is required, the distinction
-between angle and time may be made by including ``t'' to request time.
-
-\item The number of decimal places (for the final field) is indicated
-using ``{\tt{.}}'' followed by an integer. An asterisk can be used in
-place of an integer, in which case the number of decimal places is 
-chosen so that the total number of digits in the formatted value is equal 
-to the value of the Digits attribute.
-
-\item ``b'' causes fields to be separated by blanks, while ``l''
-causes them to be separated by the appropriate letters (the default
-being a colon).
-
-\item ``z'' causes padding with leading zeros.
-
-\item ``+'' cause a plus sign to be prefixed to positive values
-(negative values always have a minus sign).
-\end{itemize}
-
-The formatting performed by a SkyFrame is also influenced by the
-\htmlref{AsTime(axis)}{AsTimeaxis} attribute, which has a boolean (integer) value for each
-SkyFrame axis.  It determines whether the default format specifier for
-an axis will present values as angles ({\em{e.g.}}\ in degrees) if it
-is zero, or as times ({\em{e.g.}}\ in hours) if it is non-zero.
-
-The default AsTime value depends on the celestial coordinate system
-which the SkyFrame represents which, in turn, depends on its \htmlref{System}{System}
-attribute value. For example, equatorial longitude values (right
-ascension) are normally expressed in hours, whereas ecliptic
-longitudes are normally expressed in degrees, so their default AsTime
-values will reflect this difference.
-
-The value of the AsTime attribute may be set explicitly to over-ride
-these defaults if required, with the formatting precision being
-determined by the \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis} value. Alternatively, the
-Format(axis) attribute may be set explicitly to specify both the
-format and precision required. Setting an explicit Format value always
-over-rides the effects of both the Digits and AsTime attributes (unless
-the Format value does not specify the required number of decimal places,
-in which case Digits is used to determine the default number of decimal
-places)
-
-\subsection{\label{ss:unformattingskyaxisvalues}Reading Formatted Celestial Coordinates}
-
-The process of converting formatted celestial coordinates, such as
-might be produced by the \htmlref{astFormat}{astFormat} function
-(\secref{ss:formattingskyaxisvalues}), into numerical (double)
-coordinate values is performed by using \htmlref{astUnformat}{astUnformat}
-(\secref{ss:unformattingaxisvalues}) and passing it a pointer to a
-\htmlref{SkyFrame}{SkyFrame}. The use of a SkyFrame means that the range of input formats
-accepted is appropriate to positions on the sky expressed as angles
-and/or times, while the returned value is in radians.
-
-The following describes the forms of celestial coordinate which are
-supported:
-
-\begin{itemize}
-\item You may supply an optional sign, followed by between one and
-three fields representing either degrees, arc-minutes, arc-seconds or
-hours, minutes, seconds ({\em{e.g.}}\ ``$-$12~42~03'').
-
-\item Each field should consist of a sequence of one or more digits,
-which may include leading zeros. At most one field may contain a
-decimal point, in which case it is taken to be the final field
-({\em{e.g.}}\ decimal degrees might be given as ``124.707'', while
-degrees and decimal arc-minutes might be given as ``$-$13~33.8'').
-
-\item The first field given may take any value, allowing angles and
-times outside the conventional ranges to be represented. However,
-subsequent fields must have values of less than 60 ({\em{e.g.}}
-``720~45~31'' is valid, whereas ``11~45~61'' is not).
-
-\item Fields may be separated by white space or by ``:'' (colon), but
-the choice of separator must be used consistently throughout the
-value. Additional white space may be present around fields and
-separators ({\em{e.g.}}\ ``$-$~2:~04~:~7.1'').
-
-\item The following field identification characters may be used as
-separators to replace those above (or may be appended to the final
-field), in order to identify the field to which they are appended:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & degrees \\
-h & -- & hours \\
-m & -- & minutes (of arc or time) \\
-s & -- & seconds (of arc or time) \\
-{\tt{'}} & -- & arc-minutes \\
-{\tt{"}} & -- & arc-seconds
-\end{tabular}
-\end{quote}
-
-Either lower or upper case may be used.  Fields must be given in order
-of decreasing significance
-({\em{e.g.}}\ ``$-$11D~3{\tt{'}}~14.4{\tt{"}}'' or ``22h14m11.2s'').
-
-\item The presence of certain field identification characters
-indicates whether the value is to be interpreted as an angle or a time
-(with 24 hours corresponding to 360 degrees), as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-d & -- & angle \\
-{\tt{'}} & -- & angle \\
-{\tt{"}} & -- & angle \\
-h & -- & time
-\end{tabular}
-\end{quote}
-
-Incompatible angle/time identification characters may not be mixed
-({\em{e.g.}}\ ``10h14{\tt{'}}3{\tt{"}}'' is not valid).  The remaining
-field identification characters and separators do not specify a
-preference for an angle or a time and may be used with either.
-
-\item If no preference for an angle or a time is expressed anywhere
-within the value, then it is interpreted as an angle if the Format
-attribute string associated with the SkyFrame axis generates an angle
-and as a time otherwise.  This ensures that values produced by
-astFormat (\secref{ss:formattingskyaxisvalues}) are correctly
-interpreted by astUnformat.
-
-\item Fields may be omitted, in which case they default to zero. The
-remaining fields may be identified by using appropriate field
-identification characters (see above) and/or by adding extra colon
-separators (e.g. ``$-$05m13s'' is equivalent to ``$-$:05:13''). If a field
-is not identified explicitly, it is assumed that adjacent fields have
-been given, after taking account of any extra separator
-characters. For example:
-
-\begin{quote}
-\begin{tabular}{lll}
-10d & -- & degrees \\
-10d12 & -- & degrees and arc-minutes \\
-11:14{\tt{"}} & -- & arc-minutes and arc-seconds \\
-9h13s & -- & hours and seconds of time \\
-:45:33 & -- & minutes and seconds (of arc or time) \\
-:55: & -- & minutes (of arc or time) \\
-::13 & -- & seconds (of arc or time) \\
-$-$6::2.5 & -- & degrees/hours and seconds (of arc or time) \\
-07m14 & -- & minutes and seconds (of arc or time) \\
-$-$8:14{\tt{'}} & -- & degrees and arc-minutes \\
-$-$h3:14 & -- & minutes and seconds of time \\
-h:2.1 & -- & seconds of time
-\end{tabular}
-\end{quote}
-
-\item If fields are omitted in such a way that the remaining ones
-cannot be identified uniquely (e.g. ``01:02''), then the first field
-(either given explicitly or implied by an extra leading colon
-separator) is taken to be the most significant field that astFormat
-would produce when formatting a value (using the Format attribute
-associated with the SkyFrame axis). By default, this means that the
-first field will normally be interpreted as degrees or hours. However,
-if this does not result in consistent field identification, then the
-last field (either given explicitly or implied by an extra trailing
-colon separator) is taken to to be the least significant field that
-astFormat would produce.
-
-\end{itemize}
-
-This final convention is intended to ensure that values formatted by
-astFormat which contain less than three fields will be correctly
-interpreted if read back using astUnformat, even if they do not
-contain field identification characters.  However, it also affects
-other forms of input. For example, if the \htmlref{Format(axis)}{Formataxis} string were set
-to ``mst.1'' (producing two fields representing minutes and seconds of
-time), then formatted input would be interpreted by astUnformat as
-follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12 13 & -- & minutes and seconds \\
-12 & -- & minutes \\
-:13 & -- & seconds \\
-$-$18: & -- & minutes \\
-12.8 & -- & minutes \\
-1 2 3 & -- & hours, minutes and seconds \\
-& & \\
-4{\tt{'}} & -- & arc-minutes \\
-60::{\tt{"}} & -- & degrees \\
-$-$23:{\tt{"}} & -- & arc-minutes \\
-$-$33h & -- & hours
-\end{tabular}
-\end{quote}
-
-(in the last four cases, explicit field identification has been given
-which overrides the implicit identification).
-
-Alternatively, if the Format(axis) string were set to ``s.3''
-(producing only an arc-seconds field), then formatted input would be
-interpreted by astUnformat as follows:
-
-\begin{quote}
-\begin{tabular}{lll}
-12.8 & -- & arc-seconds \\
-12 13 & -- & arc-minutes and arc-seconds \\
-:12 & -- & arc-seconds \\
-13: & -- & arc-minutes \\
-1 2 3 & -- & degrees, arc-minutes and arc-seconds
-\end{tabular}
-\end{quote}
-
-In general, if you are preparing formatted input data containing
-celestial coordinates and wish to omit certain fields, then you are
-advised to identify clearly those that you do provide by using the
-appropriate field identification characters and/or extra colon
-separators. This prevents you depending on the implicit field
-identification described above which, in turn, depends on an
-appropriate Format(axis) string having been set.
-
-When writing software, it is also a good idea to set the Format(axis)
-string so that data input will be as simple as possible for the
-user. Unless some special effect is desired, this normally means that
-it should contain ``d'' or ``h'' to ensure that the first field
-entered by the user will be interpreted as degrees or hours, unless
-otherwise identified. This is the normal behaviour unless an explicit
-Format(axis) value has been set to override the default.
-
-\subsection{Representing Offsets from a Specified Sky Position}
-A \htmlref{SkyFrame}{SkyFrame} can be modified so that its longitude and latitude axes are
-referred to an origin at any specified sky position. Such a coordinate
-system is referred to as an ``offset'' coordinate syetem. First, the \htmlref{System}{System}
-attribute should be set to represent the celestial coordinate system in
-which the origin is to be specified. Then the SkyRef attribute should be
-set to hold the coordinates of the origin within the selected celestial
-coordinate system. 
-
-By default, ``north'' in the new offset coordinate system is parallel to
-north in the original celestial coordinate system. However, the direction
-of north in the offset system can be controlled by assigning a value to
-the SkyRefP attribute. This attribute should be assigned the celestial
-coordinates of a point which is on the zero longitude meridian and which
-has non-zero latitude.
-
-By default, the position given by the SkyRef attribute is used as the
-origin of the new longitude/latitude system, but an option exists to use
-it as the north pole of the system instead. This option is controlled by
-the \htmlref{SkyRefIs}{SkyRefIs} attribute. The choice of value for SkyRefIs depends on what
-sort of offset coordinate system you want. Setting SkyRefIs to
-``Origin'' (the default) produces an offset coordinate system which is
-approximately Cartesian close to the specified position. Setting SkyRefIs
-to
-``Pole'' produces an offset coordinate system which is approximately Polar
-close to the specified position. 
-
-\cleardoublepage
-\section{\xlabel{ss_specframes}\label{ss:specframes}Spectral Coordinate Systems (SpecFrames)}
-
-The \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} which is specialised for representing coordinate 
-systems which describe a position within an electro-magnetic spectrum.
-In this section we examine the additional properties and behaviour of a 
-SpecFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The SpecFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{SpecFrame}{SpecFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes.  When used as a Mapping, a
-SpecFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a SpecFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-positions within a spectrum. The options available largely mirror those
-described in the FITS-WCS paper III \emph{Representations of spectral
-coordinates in FITS} (Greisen, Valdes, Calabretta \& Allen).
-
-\subsection{Creating a SpecFrame}
-
-The \htmlref{SpecFrame}{SpecFrame} constructor function is particularly simple and a
-SpecFrame with default attributes is created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSpecFrame *specframe;
-
-...
-
-specframe = astSpecFrame( "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Such a SpecFrame would represent the default coordinate system which is 
-heliocentric wavelength in metres (i.e. wavelength corrected to take into 
-account the Doppler shift caused by the velocity of the observer around the 
-sun).
-
-\subsection{Specifying a Particular Spectral Coordinate System}
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the \htmlref{SpecFrame}{SpecFrame}'s (character string) \htmlref{System}{System}
-attribute. This setting is most conveniently done when the SpecFrame is
-created. For example, a SpecFrame representing Energy would be created by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-specframe = astSpecFrame( "System=Energy" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that specifying ``System$=$Energy'' also changes the associated
-Unit (from metres to Joules). This is because the default value
-of the SpecFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed.  The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions} and include a variety
-of velocity systems, together with frequency, wavelength, energy,
-wave-number, \emph{etc}.
-
-\subsection{Attributes which Qualify Spectral Coordinate Systems}
-
-Many spectral coordinate systems have some additional free parameters
-which serve to identify a particular coordinate system from amongst a
-broader class of related coordinate systems. For example, the
-velocity systems are all parameterised by a rest frequency---the
-frequency which defines zero velocity, and all coordinate systems 
-are qualified by a `standard of rest'' which indicates the rest frame to
-which the values refer.
-
-In AST, these free parameters are represented by additional \htmlref{SpecFrame}{SpecFrame}
-attributes, each of which has a default appropriate to
-({\em{i.e.}}\ defined by) the setting of the main \htmlref{System}{System}
-attribute. Each of these {\em{qualifying attributes}} may, however, be
-assigned an explicit value so as to select a particular coordinate
-system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by 
-assigning an explicit value to the attribute, rather than simply relying on 
-the default.
-
-
-The main SpecFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{Epoch}{Epoch}]\mbox{}\\
-This attribute is inherited from the Frame class. It gives the moment in
-time when the coordinates are correct for the astronomical source
-under study (usually the date of observation). It is needed in order to 
-calculate the Doppler shift produced by the velocity of the observer
-relative to the centre of the earth, and of the earth relative to the sun.
-
-\item[\htmlref{StdOfRest}{StdOfRest}]\mbox{}\\
-This specifies the rest frame in which the coordinates are correct.
-Transforming between different standards of rest involves taking account
-of the Doppler shift introduced by the relative motion of the two
-standards of rest. 
-
-\item[\htmlref{RestFreq}{RestFreq}]\mbox{}\\
-Specifies the frequency which correspond to zero velocity. When setting a
-value for this attribute, the value may be supplied as a wavelength
-(including an indication of the units being used, ``nm'' ``Angstrom'',
-\emph{etc.}), which will be automatically be converted to a frequency.
-
-\item[\htmlref{RefRA}{RefRA}]\mbox{}\\
-Specifies the RA (FK5 J2000) of the source. This is used when converting
-between standards of rest. It specifies the direction along which the
-component of the relative velocity of the two standards of rest is taken.
-
-\item[\htmlref{RefDec}{RefDec}]\mbox{}\\
-Specifies the Dec (FK5 J2000) of the source. Used in conjunction with
-REFRA.
-
-\item[\htmlref{SourceVel}{SourceVel}]\mbox{}\\
-This defines the ``source'' standard of rest. This is a rest frame which
-is moving towards the position given by RefRA and RefDec, at a velocity
-given by SourceVel. The velocity is stored internally as a heliocentric
-velocity, but can be given in any of the other supported standards of rest.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System value. Any such values are
-stored, but are not used unless the System value is later set so that
-they become relevant.
-
-\subsection{Using Default SpecFrame Attributes}
-
-The default values supplied for many \htmlref{SpecFrame}{SpecFrame} attributes will depend
-on the value of the SpecFrame's \htmlref{System}{System} attribute. In practice, this
-means that there is usually little need to specify many of these
-attributes explicitly unless you have some special requirement. This
-can be illustrated by using \htmlref{astShow}{astShow} to examine a SpecFrame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astShow( astSpecFrame( "System=Vopt, RestFreq=250 GHz" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
- Begin SpecFrame        # Description of spectral coordinate system
-#   Title = "Optical velocity, rest frequency = 250 GHz"       # Title
-of coordinate system
-    Naxes = 1   # Number of coordinate axes
-#   Domain = "SPECTRUM"         # Coordinate system domain
-#   Epoch = 2000        # Julian epoch of observation
-#   Lbl1 = "Optical velocity"  # Label for axis 1
-    System = "VOPT"     # Coordinate system type
-#   Uni1 = "km/s"       # Units for axis 1
-    Ax1 =       # Axis number 1
-       Begin Axis       # Coordinate axis
-       End Axis
- IsA Frame      # Coordinate system description
-#   SoR = "Heliocentric"        # Standard of rest
-    RstFrq = 250000000000       # Rest frequency (Hz)
- End SpecFrame
-\end{verbatim}
-\end{quote}
-
-Note that the defaults (indicated by the ``\verb?#?'' comment
-character at the start of the line) for attributes such as the \htmlref{Title}{Title},
-axis Labels and Unit specifiers are all set to values appropriate
-for the particular velocity system that the SpecFrame represents.
-
-These choices would be appropriate for a System value of ``Vopt'',
-but if a different System value were set, the defaults would be
-correspondingly different. For example, by default frequency is measured in 
-units of GHz, not $km/s$, so setting ``System=freq''
-would change the appropriate line above from:
-
-\begin{quote}
-\begin{verbatim}
-#   Uni1 = "km/s"       # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-to
-
-\begin{quote}
-\begin{verbatim}
-#   Uni1 = "GHz"        # Units for axis 1
-\end{verbatim}
-\end{quote}
-
-Of course, if you do not like any of these defaults, you may always
-over-ride them by setting explicit attribute values yourself. For
-instance, you may choose to have your frequency axis expressed in ``kHz''
-rather than ``GHz''. To do this simply set the attribute value as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetC( specframe, "Unit", "kHz" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-No error will be reported if you accidentally set an inappropriate Unit value 
-(say "J" - Joules)---after all, AST cannot tell what you are about to do,
-and you \emph{may} be about to change the System value to ``Energy''.
-However, an error \emph{will} be reported if you attempt to find a
-conversion between two SpecFrames (for instance using 
-\htmlref{astConvert}{astConvert}
-) if either SpecFrame has a Unit value which is inappropriate for its
-System value.
-
-SpecFrame attributes, like all other attributes, all have default
-value. However, be aware that for some attributes these default values
-can never be more than ``a legal numerical value'' and have no
-astronomical significance. For instance, the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes
-(which give the source position) both have a default value of zero. So
-unless your source happens to be at that point (highly unlikely!) you will
-need to set new values. Likewise, the \htmlref{RestFreq}{RestFreq} (rest frequency) attribute
-has an arbitrary default value of 1.0E5 GHz. Some operations are not
-affected by inappropriate values for these attributes (for instance,
-converting from frequency to wavelength, changing axis units, \emph{etc}),
-but some are. For instance, converting from frequency to velocity
-requires a correct rest frequency, moving between different standards of
-rest requires a correct source position. The moral is, always set explicit
-values for as many attributes as possible.
-
-\subsection{\label{ss:creatingspectralcubes}Creating Spectral Cubes}
-You can use a \htmlref{SpecFrame}{SpecFrame} to describe the spectral axis in a data cube
-containing two spatial axes and a spectral axis. To do this you would
-create an appropriate SpecFrame, together with a 2-dimensional \htmlref{Frame}{Frame} 
-(often a \htmlref{SkyFrame}{SkyFrame}) to describe the spatial axes. You would then combine
-these two Frames together into a single \htmlref{CmpFrame}{CmpFrame}.
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-AstSpecFrame *specframe;
-AstCmpFrame *cmpframe;
-...
-skyframe = astSkyFrame( "Epoch=J2002" );
-specframe = astSpecFrame( "System=Freq,StdOfRest=LSRK" );
-cmpframe = astCmpFrame( skyframe, specframe, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In the resulting CmpFrame, axis 1 will be RA, axis 2 will be Dec and axis
-3 will be Frequency. If this is not the order you want, you can permute
-the axes using 
-\htmlref{astPermAxes}{astPermAxes}.
-
-There is one potential problem with this approach if you are interested in
-unusually high accuracy. Conversion between different standards of rest
-involves taking account of the Doppler shift caused by the relative
-motion of the two standards of rest. At some point this involves finding
-the component of  the relative velocity in the direction of interest.
-For a SpecFrame, this direction is always given by the \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}
-attributes, even if the SpecFrame is embedded within a CmpFrame as above.
-It would be more appropriate if this ``direction of interest'' was
-specified by the values passed into the CmpFrame on the RA and DEC axes,
-allowing each pixel within a data cube to have a slightly different
-correction for Doppler shift.
-
-Unfortunately, the SpecFrame class cannot do this (since it is purely a
-1-dimensional Frame), and so some small degree of error will be
-introduced when converting between standards of rest, the size of the
-error varying from pixel to pixel. It is hoped that at some point in the
-future a sub-class of CmpFrame (a SpecCubeFrame) will be added to AST which 
-allows for this spatial variation in Doppler shift.
-
-The maximum velocity error introduced by this problem is of the order of
-$V*SIN(FOV)$, where $FOV$ is the angular field of view, and $V$ is the
-relative velocity of the two standards of rest. As an example, when
-correcting from the observers rest frame (i.e. the topocentric rest
-frame) to the kinematic local standard of rest the maximum value of $V$
-is about 20 $km/s$, so for 5 arc-minute field of view the maximum
-velocity error introduced by the correction will be about 0.03 $km/s$. As
-another example, the maximum error when correcting from the observers
-rest frame to the local group is about 5 $km/s$ over a 1 degree field of
-view.
-
-\subsection{\label{ss:handlingdualsidebandspectra}Handling Dual-Sideband Spectra}
-Dual sideband super-heterodyne receivers produce spectra in which each channel
-contains contributions from two different frequencies, referred to as the
-``upper sideband frequency'' and the ``lower sideband frequency''. In the
-rest frame of the observer (topocentric), these are related to each other as 
-follows:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb}
-   f_{lsb} = 2.f_{LO} - f_{usb}
-\end{equation}
-\end{small}
-\end{quote}
-
-where $f_{LO}$ is a fixed frequency known as the ``local oscillator
-frequency''. In other words, the local oscillator frequency is always
-mid-way between any pair of corresponding upper and lower sideband
-frequencies\footnote{Note, this simple relationship only applies if all
-frequencies are topocentric.}. If you want to describe the spectral axis
-of such a spectrum using a \htmlref{SpecFrame}{SpecFrame} you must choose whether you want the
-SpecFrame to describe $f_{lsb}$ or $f_{usb}$ - a basic SpecFrame cannot
-describe both sidebands simultaneously. However, there is a sub-class of
-SpecFrame, called \htmlref{DSBSpecFrame}{DSBSpecFrame}, which overcomes this difficulty.
-
-A DSBSpecFrame has a \htmlref{SideBand}{SideBand} attribute which indicates if the
-DSBSpecFrame is currently being used to describe the upper or lower
-sideband spectral axis. The value of this attribute can be changed at any
-time. If you use the 
-\htmlref{astConvert}{astConvert}
-function to find the \htmlref{Mapping}{Mapping} between two DSBSpecFrames, the setting for
-the two SideBand attributes will be taken into account. Thus, if you take
-a copy of a DSBSpecFrame, toggle its SideBand attribute, and then use
-astConvert
-to find a Mapping from the original to the modified copy, the resulting 
-Mapping will be of the form of equation \ref{eqn:dsb} (if the
-DSBSpecFrame has its \htmlref{StdOfRest}{StdOfRest} attribute set to ``Topocentric'').
-
-In general, when finding a Mapping between two arbitrary DSBSpecFrames, 
-the total Mapping is made of of three parts in series:
-
-\begin{enumerate}
-\item A Mapping which converts the first DSBSpecFrame into its upper
-sideband representation. If the DSBSpecFrame already represents its upper
-sideband, this Mapping will be a \htmlref{UnitMap}{UnitMap}.
-\item A Mapping which converts from the first to the second DSBSpecFrame,
-treating them as if they were both basic SpecFrames. This takes account of 
-any difference in units, standard of rest, system, \emph{etc} between the
-two DSBSpecFrames. 
-\item A Mapping which converts the second DSBSpecFrame from its upper
-sideband representation to its current sideband. If the DSBSpecFrame 
-currently represents its upper sideband, this Mapping will be a UnitMap.
-\end{enumerate}
-
-If an attempt is made to find the Mapping between a DSBSpecFrame and a
-basic SpecFrame, then the DSBSpecFrame will be treated like a basic
-SpecFrame. In other words, the returned Mapping will not be affected by
-the setting of the SideBand attribute (or any of the other attributes
-specific to the DSBSpecFrame class).
-
-In practice, the local oscillator frequency for a dual sideband
-instrument may not be easily available to an observer. Instead, it is
-common practice to specify the spectral position of some central feature
-in the observation (commonly the centre of the instrument passband),
-together with an ``intermediate frequency''. Together, these two values
-allow the local oscillator frequency to be determined. The intermediate
-frequency is the difference between the topocentric frequency at the
-central spectral position and the topocentric frequency of the local
-oscillator. So:
-
-\begin{quote}
-\begin{small}
-\begin{equation}
-\label{eqn:dsb2}
-   f_{LO} = f_{central} + f_{if}
-\end{equation}
-\end{small}
-\end{quote}
-
-The DSBSpecFrame class uses the \htmlref{DSBCentre}{DSBCentre} attribute to specify the central 
-spectral position ($f_{central}$), and the \htmlref{IF}{IF} attribute to specify the 
-intermediate frequency ($f_{if}$). The DSBCentre value is given and returned 
-in the spectral system described by the DSBSpecFrame (thus you do not need to
-calculate the corresponding topocentric frequency yourself - this will be
-done automatically by the DSBSpecFrame when you assign a new value to the
-DSBCentre attribute). The value assigned to the IF attribute should
-always be a topocentric frequency in units of Hz, however a negative
-value may be given to indicate that the DSBCentre value is in the upper
-sideband (that is, if $IF < 0$  then $f_{central} > f_{LO}$). A positive
-value for IF indicates that the DSBCentre value is in the lower sideband
-(that is, if $IF > 0$  then $f_{central} < f_{LO}$).
-
-
-\cleardoublepage
-\section{\xlabel{ss_timeframes}\label{ss:timeframes}Time Systems (TimeFrames)}
-
-The \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} which is specialised for representing moments in
-time. In this section we examine the additional properties and behaviour of a 
-TimeFrame that distinguish it from a basic Frame (\secref{ss:frames}).
-
-\subsection{The TimeFrame Model}
-
-As for a \htmlref{SkyFrame}{SkyFrame}, a \htmlref{TimeFrame}{TimeFrame} is a \htmlref{Frame}{Frame} (\secref{ss:frames}) and also a
-\htmlref{Mapping}{Mapping} (\secref{ss:mappings}), so it inherits all the properties and
-behaviour of these two ancestral classes.  When used as a Mapping, a
-TimeFrame implements a unit transformation, exactly like a basic Frame
-(\secref{ss:frameasmapping}) or a \htmlref{UnitMap}{UnitMap}, so this aspect of its
-behaviour is not of great importance.
-
-When used as a Frame, however, a TimeFrame represents a wide range of
-different 1-dimensional coordinate system which can be used to describe
-moments in time. Absolute times and relative (i.e. elapsed) times are
-supported (attribute \htmlref{TimeOrigin}{TimeOrigin}), as are a range of different time scales
-(attribute \htmlref{TimeScale}{TimeScale}). An absolute or relative value in any time scale can 
-be represented in different forms such as Modified Julian Date, Julian \htmlref{Epoch}{Epoch}, 
-\emph{etc} (attribute \htmlref{System}{System}). AST extends the definition of these systems to
-allow them to be used with any unit of time (attribute Unit). The TimeFrame 
-class also allows times to formatted as either a simple floating point value 
-or as a Gregorian date and time of day (attribute Format).
-
-\subsection{Creating a TimeFrame}
-
-The \htmlref{TimeFrame}{TimeFrame} constructor function is particularly simple and a
-TimeFrame with default attributes is created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstTimeFrame *timeframe;
-
-...
-
-timeframe = astTimeFrame( "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Such a TimeFrame would represent the default coordinate system which is 
-Modified Julian Date (with the usual units of days) in the International 
-Atomic Time (TAI) time scale.
-
-\subsection{Specifying a Particular Time System}
-By setting the \htmlref{System}{System} attribute appropriately, the \htmlref{TimeFrame}{TimeFrame} can represent 
-Julian Date, Modified Julian Date, Julian \htmlref{Epoch}{Epoch} or Besselian Epoch (the
-time scale is specified by a separate attribute called \htmlref{TimeScale}{TimeScale}).
-
-Selection of a particular coordinate system is performed simply by
-setting a value for the TimeFrame's (character string) System
-attribute. This setting is most conveniently done when the TimeFrame is
-created. For example, a TimeFrame representing Julian Epoch would be created 
-by:
-
-\begin{quote}
-\small
-\begin{verbatim}
-timeframe = astTimeFrame( "System=JEPOCH" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that specifying ``System$=$JEPOCH'' also changes the associated
-default Unit (from days to years). This is because the default value
-of the TimeFrame's Unit attribute depends on the System attribute setting.
-
-You may change the System value at any time, although this is not
-usually needed.  The values supported are set out in the attribute's
-description in \appref{ss:attributedescriptions}.
-
-\subsection{Attributes which Qualify Time Coordinate Systems}
-
-Time coordinate systems require some additional free parameters to identify 
-a particular coordinate system from amongst a broader class of related 
-coordinate systems. For example, all TimeFrames are qualified by the time 
-scale (that is, the physical process used to define the flow of time),
-and some require the position of the observer's clock.
-
-In AST, these free parameters are represented by additional \htmlref{TimeFrame}{TimeFrame}
-attributes, each of which has a default appropriate to ({\em{i.e.}}\ defined 
-by) the setting of the main \htmlref{System}{System} attribute. Each of these {\em{qualifying 
-attributes}} may, however, be assigned an explicit value so as to select a 
-particular coordinate system. Note, it is usually best to assign explicit
-values whenever possible rather than relying on defaults. Attribute
-should only be left at their default value if you ``don't care'' what
-value is used. In certain circumstances (particularly, when aligning two
-Frames), a default value for an attribute may be replaced by the value
-from another similar \htmlref{Frame}{Frame}. Such value replacement can be prevented by 
-assigning an explicit value to the attribute, rather than simply relying on 
-the default.
-
-The main TimeFrame attributes which qualify the System attribute are:
-
-\begin{quote}
-\begin{description}
-
-\item[\htmlref{TimeScale}{TimeScale}]\mbox{}\\
-This specifies the time scale.
-
-\item[\htmlref{LTOffset}{LTOffset}]\mbox{}\\
-This specifies the offset from Local Time to UTC in hours (time zones
-east of Greenwich have positive values). Note, AST uses the value as
-supplied without making any correction for daylight saving.
-
-\item[\htmlref{TimeOrigin}{TimeOrigin}]\mbox{}\\
-This specifies the zero point from which time values are measured, within
-the system specified by the System attribute. Thus, a value ofzero (the
-default) indicates that time values represent absolute times. Non-zero
-values may be used to indicate that the TimeFrame represents elapsed time
-since the specified origin.
-
-\end{description}
-\end{quote}
-
-For further details of these attributes you should consult their
-descriptions in \appref{ss:attributedescriptions} and for details of
-the System settings for which they are relevant, see the description
-of the System attribute (also in \appref{ss:attributedescriptions}).
-
-Note that it does no harm to assign values to qualifying attributes
-which are not relevant to the main System or TimeScale value. Any such 
-values are stored, but are not used unless the System and/or TimeScale 
-value is later set so that they become relevant.
-
-\cleardoublepage
-\section{\label{ss:cmpframes}Compound Frames (CmpFrames)}
-
-We now turn to a rather special form of \htmlref{Mapping}{Mapping}, the \htmlref{CmpFrame}{CmpFrame}. The
-Frames we have considered so far have been atomic, in the sense that
-they represent pre-defined elementary physical domains. A CmpFrame,
-however, is a compound \htmlref{Frame}{Frame}. In essence, it is a structure for
-containing other Frames and its purpose is to allow those Frames
-to work together in various combinations while appearing as a single
-\htmlref{Object}{Object}. A CmpFrame's behaviour is therefore not pre-defined, but is
-determined by the other Frames it contains (its ``component'' Frames).
-
-As with compound Mappings, compound Frames can be nested within each
-other, forming arbitrarily complex Frames.
-
-\subsection{Creating a CmpFrame}
-A very common use for a \htmlref{CmpFrame}{CmpFrame} within astronomy is to represent a
-``spectral cube''. This is a 3-dimensional \htmlref{Frame}{Frame} in which one of the axes
-represents position within a spectrum, and the other two axes represent
-position on the sky (or some other spatial domain such as the focal plane
-of a telescope). As an example, we create such a CmpFrame in which axes
-1 and 2 represent Right Ascension and Declination (ICRS), and axis 3 
-represents wavelength (these are the default coordinate Systems
-represented by a \htmlref{SkyFrame}{SkyFrame} and a \htmlref{SpecFrame}{SpecFrame} respectively):
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-AstSpecFrame *specframe;
-AstCmpFrame *cmpframe;
-...
-skyframe = astSkyFrame( "" );
-specframe = astSpecFrame( "" );
-cmpframe = astCmpFrame( skyframe, specframe, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If it was desired to make RA and Dec correspond to axes 1 and 3, with
-axis 2 being the spectral axis, then the axes of the CmpFrame created 
-above would need to be permuted as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int perm[ 3 ];
-...
-
-perm[ 0 ] = 0;
-perm[ 1 ] = 2;
-perm[ 2 ] = 1;
-astPermAxes( cmpframe, perm ); 
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{The Attributes of a CmpFrame}
-
-A \htmlref{CmpFrame}{CmpFrame} \emph{is a} \htmlref{Frame}{Frame} and so has all the attributes of a Frame.
-The default value for the \htmlref{Domain}{Domain} attribute for a CmpFrame is formed by
-concatenating the Domains of the two component Frames, separated by a
-minus sign (``-'').\footnote{If both component Frames have blank Domains, 
-then the default Domain for the CmpFrame is the string ``CMP''.} The (fixed) 
-value for its \htmlref{System}{System} attribute is ``Compound''.\footnote{Any attempt to 
-change the System value of a CmpFrame is ignored.} A CmpFrame has no 
-further attributes over and above those common to all Frames. However,
-attributes of the two component Frames can be accessed as if they were
-attributes of the CmpFrame, as described below.
-
-Frame attributes which are specific to individual axes (such as Label(2),
-Format(1), \emph{etc}) simply mirror the corresponding axes of the
-relevant component Frame. That is, if the ``Label(2)'' attribute of a
-CmpFrame is accessed, the CmpFrame will forward the access request to the
-component Frame which contains axis 2. Thus, default values for axis
-attributes will be the same as those provided by the component Frames.
-
-An axis index can optionally be appended to the name of Frames attributes
-which do not normally have such an index (System, Domain, \htmlref{Epoch}{Epoch}, \htmlref{Title}{Title},
-\emph{etc}). If this is done, the access request is forwarded to the
-component Frame containing the indicated axis. For instance, if a
-CmpFrame contains a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{SkyFrame}{SkyFrame} in that order, and the axes
-have not been permuted, then getting the value of attribute ``System'' will 
-return  ``Compound'' as mentioned above (that is, the System value of the
-CmpFrame as a whole), whereas getting the value of attribute
-``System(1)'' will return ``Spectral''(that is, the System value of the
-component Frame containing axis 1 --- the SpecFrame).
-
-This technique is not limited to attributes common to all Frames. For
-instance, the SkyFrame class defines an attribute called \htmlref{Equinox}{Equinox} which is
-not held by other classes of Frames. To set a value for the Equinox
-attribute of the SkyFrame contained within the above CmpFrame, assign the
-value to the ``Equinox(2)'' attribute of the CmpFrame. Since the SkyFrame
-defines both axes 2 and 3 of the CmpFrame, we could equivalently have set
-a value for ``Equinox(3)'' since this would also result in the attribute
-access being forwarded to the SkyFrame.
-
-Finally, if an attribute is not qualified by a axis index, attempts will
-be made to access it using each of the CmpFrame axes in turn. Using the
-above example of the spectral cube, if an attempt was made to get the
-value of attribute ``Equinox'' (with no axis index), each axis in turn
-would be used. Since axis 1 is contained within a SpecFrame, the first
-attempt would fail since the SpecFrame class does not have an Equinox
-attribute. However, the second attempt would succeed because axis 2 is
-contained within a SkyFrame which \emph{does} have an Equinox attribute. Thus
-the returned attribute value would be that obtained from the SkyFrame
-containing axis 2. When getting or testing an attribute value, the
-returned value is determined by the \emph{first} axis which recognises
-the attribute. When setting an attribute value, \emph{all} axes
-which recognises the attribute have the attribute value set to the given
-value. Likewise, when clearing an attribute value, all axes
-which recognises the attribute have the attribute value cleared.
-
-\cleardoublepage
-\section{\label{ss:introducingconversion}An Introduction to Coordinate System Conversions}
-
-In this section, we start to look at techniques for converting between
-different coordinate systems.  At this stage, the tools we have available
-are Frames (\secref{ss:frames}), SkyFrames (\secref{ss:skyframes}),
-SpecFrames (\secref{ss:specframes}), TimeFrames (\secref{ss:timeframes}) and 
-various Mappings (\secref{ss:mappings}). These are sufficient to allow us to 
-begin examining the problem, but more sophisticated approaches will also emerge
-later (\secref{ss:framesetconverting}).
-
-\subsection{\label{ss:convertingskyframes}Converting between Celestial Coordinate Systems}
-
-We begin by examining how to convert between two celestial coordinate
-systems represented by SkyFrames, as this is both an illuminating and
-practical example.  Consider the problem of converting celestial
-coordinates between:
-
-\begin{enumerate}
-\item The old FK4 system, with no E terms, a Besselian epoch of
-1958.0 and a Besselian equinox of 1960.0.
-
-\item An ecliptic coordinate system based on the mean equinox and
-ecliptic of Julian epoch 2010.5.
-\end{enumerate}
-
-This example is arbitrary but not completely unrealistic. Unless you
-already have expertise with such conversions, you are unlikely to find
-it straightforward.
-
-Using AST, we begin by creating two SkyFrames to represent these
-coordinate systems, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSkyFrame *skyframe1, *skyframe2;
-
-...
-
-skyframe1 = astSkyFrame( "System=FK4-NO-E, Epoch=B1958, Equinox=B1960" );
-skyframe2 = astSkyFrame( "System=Ecliptic, Equinox=J2010.5" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note how specifying the coordinate systems consists simply of
-initialising the attributes of each \htmlref{SkyFrame}{SkyFrame} appropriately.  The next
-step is to find a way of converting between these SkyFrames. This is
-done using \htmlref{astConvert}{astConvert}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *cvt;
-
-...
-
-cvt = astConvert( skyframe1, skyframe2, "" );
-if ( cvt == AST__NULL ) {
-   <conversion is not possible>
-} else {
-   <conversion is possible>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The third argument of astConvert is not used here and should be an
-empty string.
-
-astConvert will return a null result, AST\_\_NULL (as defined in the
-``ast.h'' header file), if conversion is not possible. In this
-example, conversion is possible, so it will return a pointer to a new
-\htmlref{Object}{Object} that describes the conversion.
-
-The Object returned is called a \htmlref{FrameSet}{FrameSet}. We have not discussed
-FrameSets yet (\secref{ss:framesets}), but for the present purposes we
-can consider them simply as Objects that can behave both as Mappings
-and as Frames. It is the FrameSet's behaviour as a \htmlref{Mapping}{Mapping} in which we
-are mainly interested here, because the Mapping it implements is the
-one we require---{\em{i.e.}}\ it converts between the two celestial
-coordinate systems (\secref{ss:framesetsfromconvert}).
-
-For example, if ``alpha1'' and ``delta1'' are two arrays containing
-the longitude and latitude, in radians, of N points on the sky in the
-original coordinate system (corresponding to ``skyframe1''), then they
-could be converted into the new coordinate system (represented by
-``skyframe2'') as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define N 10
-double alpha1[ N ], delta1[ N ];
-double alpha2[ N ], delta2[ N ];
-
-...
-
-astTran2( cvt, N, alpha1, delta1, 1, alpha2, delta2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The new coordinates are returned {\em{via}} the ``alpha2'' and
-``delta2'' arrays.  To transform coordinates in the opposite
-direction, we simply invert the 5th (boolean int) argument to
-\htmlref{astTran2}{astTran2}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astTran2( cvt, N, alpha2, delta2, 0, alpha1, delta1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The FrameSet returned by astConvert also contains information about
-the SkyFrames used in the conversion
-(\secref{ss:framesetsfromconvert}). As we mentioned above, a FrameSet
-may be used as a \htmlref{Frame}{Frame} and in this case it behaves like the
-``destination'' Frame used in the conversion ({\em{i.e.}}\ like
-``skyframe2'').  We could therefore use the ``cvt'' FrameSet to
-calculate the distance between two points (with coordinates in
-radians) in the destination coordinate system, using \htmlref{astDistance}{astDistance}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double distance, point1[ 2 ], point2[ 2 ];
-
-...
-
-distance = astDistance( cvt, point1, point2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and the result would be the same as if the ``skyframe2'' SkyFrame had
-been used.
-
-Another way to see how the FrameSet produced by astConvert retains
-information about the coordinate systems involved is to set its \htmlref{Report}{Report}
-attribute (inherited from the Mapping class) so that it displays the
-coordinates before and after conversion (\secref{ss:transforming}):
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( cvt, "Report=1" );
-astTran2( cvt, N, alpha1, delta1, 1, alpha2, delta2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output from this might look like the following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (42.1087, 20.2717)
-(2:08:20.6, 35:31:24) --> (43.0197, 21.1705)
-(2:10:38.1, 36:40:09) --> (43.9295, 22.0716)
-(2:12:55.6, 37:48:55) --> (44.8382, 22.9753)
-(2:15:13.1, 38:57:40) --> (45.7459, 23.8814)
-(2:17:30.6, 40:06:25) --> (46.6528, 24.7901)
-(2:19:48.1, 41:15:11) --> (47.5589, 25.7013)
-(2:22:05.6, 42:23:56) --> (48.4644, 26.6149)
-(2:24:23.1, 43:32:41) --> (49.3695, 27.5311)
-(2:26:40.6, 44:41:27) --> (50.2742, 28.4499)
-\end{verbatim}
-\end{quote}
-
-Here, we see that the input FK4 equatorial coordinate values (given in
-radians) have been formatted automatically in sexagesimal notation
-using the conventional hours for right ascension and degrees for
-declination. Conversely, the output ecliptic coordinates are shown in
-decimal degrees, as is conventional for ecliptic coordinates. Both are
-displayed using the default precision of 7 digits.\footnote{The
-leading digit is zero and is therefore not seen in this particular
-example.}
-
-In fact, the ``cvt'' FrameSet has access to all the information in the
-original SkyFrames which were passed to astConvert. If you had set a
-new Digits attribute value for either of these, the formatting above
-would reflect the different precision you requested by displaying a
-greater or smaller number of digits.
-
-
-\subsection{\label{ss:convertingspecframes}Converting between Spectral Coordinate Systems}
-The principles described in the previous section for converting between
-celestial coordinate systems also apply to the task of converting between
-spectral coordinate systems. As an example, let's look at how we might
-convert between frequency measured in $GHz$ as measured in the rest frame
-of the telescope, and radio velocity measured in $km/s$ measured with
-respect the kinematic Local Standard of Rest.
-
-First we create a default \htmlref{SpecFrame}{SpecFrame}, and then set its attributes to
-describe the required radio velocity system (this is slightly more
-convenient, given the relatively large number of attributes, than
-specifying the attribute values in a single string such as would be
-passed to the SpecFrame constructor). We then take a copy of this
-SpecFrame, and change the attribute values so that the copy describes the
-original frequency system (modifying a copy, rather than creating a new
-SpecFrame from scratch, avoids the need to specify the epoch, reference
-position, \emph{etc} a second time since they are all inherited by the copy):
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstSpecFrame *specframe1, *specframe2;
-
-...
-
-specframe1 = astSpecFrame( "" );
-astSet( specframe1, "System=vradio" );
-astSet( specframe1, "Unit=km/s" );
-astSet( specframe1, "Epoch=1996-Oct-2 12:13:56.985" );
-astSet( specframe1, "ObsLon=W155:28:18" );
-astSet( specframe1, "ObsLat=N19:49:34" );
-astSet( specframe1, "RefRA=18:14:50.6" );
-astSet( specframe1, "RefDec=-4:40:49" );
-astSet( specframe1, "RestFreq=230.538 GHz" );
-astSet( specframe1, "StdOfRest=LSRK" );
-
-specframe2 = astCopy( specframe1 );
-astSet( specframe1, "System=freq" );
-astSet( specframe1, "Unit=GHz" );
-astSet( specframe1, "StdOfRest=Topocentric" );
-
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note, the fact that a SpecFrame has only a single axis means that we were
-able to refer to the Unit attribute without an axis index. The other
-attributes are: the time of of observation (\htmlref{Epoch}{Epoch}), the geographical
-position of the telescope (\htmlref{ObsLat}{ObsLat} \& \htmlref{ObsLon}{ObsLon}), the position of the source
-on the sky (\htmlref{RefRA}{RefRA} \& \htmlref{RefDec}{RefDec}), the rest frequency (\htmlref{RestFreq}{RestFreq}) and the
-standard of rest (\htmlref{StdOfRest}{StdOfRest}).
-
-The next step is to find a way of converting between these SpecFrames. We
-use exactly the same code that we did in the previous section where we were
-converting between celestial coordinate systems:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *cvt;
-
-...
-
-cvt = astConvert( specframe1, specframe2, "" );
-if ( cvt == AST__NULL ) {
-   <conversion is not possible>
-} else {
-   <conversion is possible>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-A before, this will give us a \htmlref{FrameSet}{FrameSet} (assuming conversion is possible,
-which should always be the case for our example), and we can use the
-FrameSet to convert between the two spectral coordinate systems. We use 
-\htmlref{astTran1}{astTran1} in place of \htmlref{astTran2}{astTran2}
-since a SpecFrame has only one axis (unlike a \htmlref{SkyFrame}{SkyFrame} which has two).
-
-For example, if ``frq'' is an array containing the observed frequency, in
-GHz, of N spectral channels (describe by ``specframe1''), then they
-could be converted into the new coordinate system (represented by
-``specframe2'') as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define N 10
-double frq[ N ];
-double vel[ N ];
-
-...
-
-astTran1( cvt, N, frq, 1, vel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The radio velocity values are returned in the ``vel'' array.
-
-
-\subsection{Converting between Time Coordinate Systems}
-All the principles outlined in the previous section about aligning
-spectral cocordinate systems (SpecFrames) can be applied directly to the 
-problem of aligning time coordinate systems (TimeFrames).
-
-\subsection{\label{ss:convertingpermutedaxes}Handling SkyFrame Axis Permutations}
-
-We can illustrate an important point if we swap the axis order of
-either \htmlref{SkyFrame}{SkyFrame} in the example above (\secref{ss:convertingskyframes})
-before identifying the conversion. Let's assume we use \htmlref{astPermAxes}{astPermAxes}
-(\secref{ss:permutingaxes}) to do this to the second SkyFrame, before
-applying \htmlref{astConvert}{astConvert}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int perm[ 2 ] = { 2, 1 };
-
-...
-
-astPermAxes( skyframe2, perm );
-cvt = astConvert( skyframe1, skyframe2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Now, the destination SkyFrame system no longer represents the
-coordinate system:
-
-\begin{quote}
-(ecliptic~longitude, ecliptic~latitude)
-\end{quote}
-
-but instead represents the transposed system:
-
-\begin{quote}
-(ecliptic~latitude, ecliptic~longitude)
-\end{quote}
-
-As a consequence, when we use the \htmlref{FrameSet}{FrameSet} returned by astConvert to
-apply a coordinate transformation, we obtain something like the
-following:
-
-\begin{quote}
-\begin{verbatim}
-(2:06:03.0, 34:22:39) --> (20.2717, 42.1087)
-(2:08:20.6, 35:31:24) --> (21.1705, 43.0197)
-(2:10:38.1, 36:40:09) --> (22.0716, 43.9295)
-(2:12:55.6, 37:48:55) --> (22.9753, 44.8382)
-(2:15:13.1, 38:57:40) --> (23.8814, 45.7459)
-(2:17:30.6, 40:06:25) --> (24.7901, 46.6528)
-(2:19:48.1, 41:15:11) --> (25.7013, 47.5589)
-(2:22:05.6, 42:23:56) --> (26.6149, 48.4644)
-(2:24:23.1, 43:32:41) --> (27.5311, 49.3695)
-(2:26:40.6, 44:41:27) --> (28.4499, 50.2742)
-\end{verbatim}
-\end{quote}
-
-When compared to the original (\secref{ss:convertingskyframes}), the
-output coordinate order has been swapped to compensate for the
-different destination SkyFrame axis order.
-
-In all, there are four possible axis combinations, corresponding to two
-possible axis orders for each of the source and destination SkyFrames,
-and astConvert will convert correctly between any of these.
-The point to note is that a SkyFrame contains knowledge about how to
-convert to and from other SkyFrames. Since its two axes (longitude and
-latitude) are distinguishable, the conversion is able to take account
-of the axis order.
-
-If you need to identify the axes of a SkyFrame explicitly, taking into
-account any axis permutations, the \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis} attributes can be
-used. These are read-only attributes which give the indices of the
-latitude and longitude axes respectively.
-
-\subsection{\label{ss:convertingframes}Converting Between Frames}
-
-Having seen how clever SkyFrames are (\secref{ss:convertingskyframes}
-and \secref{ss:convertingpermutedaxes}), we will next examine how dumb
-a basic \htmlref{Frame}{Frame} can be in comparison. For example, if we create two
-2-dimensional Frames and use \htmlref{astConvert}{astConvert} to derive a conversion between
-them, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame1, *frame2;
-
-...
-
-frame1 = astFrame( 2, "" );
-frame2 = astFrame( 2, "" );
-cvt = astConvert( frame1, frame2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-then the coordinate transformation which the ``cvt'' \htmlref{FrameSet}{FrameSet} performs
-will be as follows:
-
-\begin{quote}
-\begin{verbatim}
-(1, 2) --> (1, 2)
-(2, 4) --> (2, 4)
-(3, 6) --> (3, 6)
-(4, 8) --> (4, 8)
-(5, 10) --> (5, 10)
-\end{verbatim}
-\end{quote}
-
-This is an identity transformation, exactly the same as a \htmlref{UnitMap}{UnitMap}
-(\secref{ss:unitmapexample}). Even if we permute the axis order of our
-Frames, as we did above (\secref{ss:convertingpermutedaxes}), we will
-fare no better. The conversion between our two basic Frames will
-always be an identity transformation.
-
-The reason for this is that, unlike a \htmlref{SkyFrame}{SkyFrame}, all basic Frames start
-life the same and have axes that are indistinguishable. Therefore,
-permuting their axes doesn't make them look any different---they still
-represent the same coordinate system.
-%Actually, this behaviour isn't as dumb as it seems and can actually be
-%very useful, as the following example illustrates.
-%
-%\subsection{Distinguishable and Indistinguishable Axes}
-%
-%c+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with \htmlref{astPermAxes}{astPermAxes}) to take account of this.
-%c-
-%f+
-%Imagine you have two Frames which represent the pixel coordinates of
-%two 2-dimensional images. Let's call their axes ``X'' and ``Y''.
-%Suppose you now transpose the second image and swap its Frame axes
-%(with astPermAxes) to take account of this.
-%f-
-%
-%Next, consider what happens if you want to subtract one image from the
-%other. If you have a ``subtract'' program that is intelligent and
-%tries to align the two images for you, one of two things could happen:
-%
-%\begin{enumerate}
-%c+
-%\item If the axes are distinguishable, when your program invokes
-%astConvert it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%c-
-%f+
-%\item If the axes are distinguishable, when your program invokes
-%AST\_CONVERT it will derive a transformation between the two images
-%which swaps the X and Y coordinates (corresponding to the transposition
-%you applied to the second image). However, in aligning X-with-X and
-%Y-with-Y, this will completely undo the effects of your transposition!
-%f-
-%
-%\item If the axes are indistinguishable, the transformation between
-%the two images will always be an identity
-%(\secref{ss:convertingframes}). Therefore, your program will align
-%X-with-Y and Y-with-X, so that you see the effects of your earlier
-%transposition of the second image.
-%\end{enumerate}
-%
-%Clearly, if we are considering pixel coordinates, the latter behaviour
-%is preferable, since there would be no point in implementing an image
-%transposition program if we could never see the effects of it. This
-%indicates that a basic Frame, with is indistinguishable axes, is the
-%correct type of \htmlref{Object}{Object} to represent a pixel coordinate system, where
-%this behaviour is necessary.
-%
-%Conversely, the former behaviour would be more useful if the axes we
-%were considering were, say, wavelength (in nm) and slit position (in
-%mm). In this case, we would expect our ``subtract'' program to
-%subtract data at corresponding wavelengths and slit positions, not
-%just at corresponding pixels. This case requires distinguishable axes,
-%so that corresponding axes in the two images can be matched up, just
-%as happens with a SkyFrame (\secref{ss:convertingpermutedaxes}).
-%
-%Of course, there may also be intermediate cases, where some axes are
-%distinguishable and others aren't.
-
-\subsection{\label{ss:alignmentsystem}The Choice of Alignment System}
-
-In practice, when AST is asked to find a conversion between two Frames
-describing two different coordinate systems on a given physical domain,
-it uses an intermediate ``alignment'' system. Thus, when finding a
-conversion from system A to system B, AST first finds the \htmlref{Mapping}{Mapping} from
-system A to some alignment system, system C, and then finds the Mapping
-from this system C to the required system B. It finally concatenates
-these two Mappings to get the Mapping from system A to system B.
-
-One advantage of this is that it cuts down the number of conversion
-algorithms required. If there are $N$ different Systems which may be used
-to describe positions within the \htmlref{Domain}{Domain}, then this approach requires
-about $2*N$ conversion algorithms to be written. The alternative approach
-of going directly from system A to system B would require about $N*N$
-conversion algorithms.
-
-In addition, the use of an intermediate alignment system highlights the
-nature of the conversion process. What do we mean by saying that a
-Mapping ``converts a position in one coordinate system into the
-corresponding position in another''? In practice, it means that the input
-and output coordinates correspond to the same coordinates \emph{in some
-third coordinate system}. The choice of this third coordinate system, the
-``alignment'' system, can completely alter the nature of the Mapping. The
-\htmlref{Frame}{Frame} class has an attribute called \htmlref{AlignSystem}{AlignSystem} which can be used to
-specify the alignment system.
-
-As an example, consider the case of aligning two spectra calibrated in
-radio velocity, but each with a different rest frequency (each spectrum
-will be described by a \htmlref{SpecFrame}{SpecFrame}). Since the rest frequencies differ, a
-given velocity will correspond to different frequencies in the two
-spectra. So when we come to ``align'' these two spectra (that is, find a
-Mapping which converts positions in one SpecFrame to the corresponding
-positions in the other), we have the choice of aligning the frequencies
-or aligning the velocities. Different Mappings will be required to
-describe these two forms of alignment. If we set AlignSystem to ``Freq''
-then the returned Mapping will align the frequencies described by the two
-SpecFrames. On the other hand, if we set AlignSystem to ``Vradio''
-then the returned Mapping will align the velocities.
-
-Some choices of alignment system are redundant. For instance, in the
-above example, changing the alignment system from frequency to wavelength
-has no effect on the returned Mapping: if two spectra are aligned in
-frequency they will also be aligned in wavelength (assuming the speed of
-light doesn't change).
-
-The default value for AlignSystem depends on the class of Frame. For a
-SpecFrame, the default is wavelength (or equivalently, frequency)
-since this is the system in which observations are usually made. The
-SpecFrame class also has an attribute called \htmlref{AlignStdOfRest}{AlignStdOfRest} which
-allows the standard of rest of the alignment system to be specified.
-Similarly, the \htmlref{TimeFrame}{TimeFrame} class has an attribute called \htmlref{AlignTimeScale}{AlignTimeScale}
-which allows the time scale of the alignment system to be specified.
-Currently, the \htmlref{SkyFrame}{SkyFrame} uses ICRS as the default for AlignSystem, since
-this is a close approximation to an inertial frame of rest.
-
-\cleardoublepage
-\section{\label{ss:framesets}Coordinate System Networks (FrameSets)}
-
-We saw in \secref{ss:introducingconversion} how \htmlref{astConvert}{astConvert} could be
-used to find a \htmlref{Mapping}{Mapping} that inter-relates a pair of coordinate systems
-represented by Frames. There is a limitation to this, however, in that
-it can only be applied to coordinate systems that are inter-related by
-suitable conventions. In the case of celestial coordinates, the
-relevant conventions are standards set out by the International
-Astronomical Union, and others, that define what these coordinate
-systems mean. In practice, however, the relationships between many
-other coordinate systems are also of practical importance.
-
-Consider, for example, the focal plane of a telescope upon which an
-image of the sky is falling. We could measure positions in this focal
-plane in millimetres or, if there were a detector system such as a CCD
-present, we could count pixels. We could also use celestial
-coordinates of many different kinds. All of these systems are
-equivalent in their effectiveness at specifying positions in the focal
-plane, but some are more convenient than others for particular
-purposes.
-
-Although we could, in principle, convert between all of these focal
-plane coordinate systems, there is no pre-defined convention for doing
-so. This is because the conversions required depend on where the
-telescope is pointing and how the CCD is mounted in the focal
-plane. Clearly, knowledge about this cannot be built into the AST
-library and must be supplied in some other way. Note that this is
-exactly the same problem as we met in \secref{ss:framedomains} when
-discussing the \htmlref{Domain}{Domain} attribute---{\em{i.e.}}\ coordinate systems that
-apply to different physical domains require that extra information be
-supplied before we can convert between them.
-
-What we need, therefore, is a general way to describe how coordinate
-systems are inter-related, so that when there is no convention already
-in place, we can define our own. We can then look forward to
-converting, say, from pixels into galactic coordinates and {\em{vice
-versa.}}  In AST, the \htmlref{FrameSet}{FrameSet} class provides this capability.
-
-\subsection{The FrameSet Model}
-
-Consider a coordinate system (call it number 1) which is represented
-by a \htmlref{Frame}{Frame} of some kind. Now consider a \htmlref{Mapping}{Mapping} which, when applied to
-the coordinates in system 1 yields coordinates in another system,
-number 2. The Mapping therefore inter-relates coordinate systems 1 and
-2.
-
-Now consider a second Mapping which inter-relates system 1 and a
-further coordinate system, number 3. If we wanted to convert
-coordinates between systems 2 and 3, we could do so by:
-
-\begin{enumerate}
-\item Applying our first Mapping in reverse, so as to convert between
-systems 2 and 1.
-
-\item Applying the second Mapping, as given, to convert between
-systems 1 and 3.
-\end{enumerate}
-
-We are not limited to three coordinate systems, of course. In fact, we
-could continue to introduce any number of further coordinate systems,
-so long as we have a suitable Mapping for each one which relates it to
-one of the Frames already present. Continuing in this way, we can
-build up a network in which Frames are inter-related by Mappings in
-such a way that there is always a way of converting between any pair
-of coordinate systems.
-
-The \htmlref{FrameSet}{FrameSet} (Figure~\ref{fig:frameset}) encapsulates these ideas.  It
-is a network composed of Frames and associated Mappings, in which
-there is always exactly one path, {\em{via}} Mappings, between any
-pair of Frames.  Since we assemble FrameSets ourselves, they can be
-used to represent any coordinate systems we choose and to set up the
-particular relationships between them that we want.
-
-\subsection{\label{ss:creatingaframeset}Creating a FrameSet}
-
-Before we can create a \htmlref{FrameSet}{FrameSet}, we must have a \htmlref{Frame}{Frame} of some kind to
-put into it, so let's create a simple one:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstFrame *frame1;
-
-...
-
-frame1 = astFrame( 2, "Domain=A" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-We have set this Frame's \htmlref{Domain}{Domain} attribute (\secref{ss:framedomains}) to
-A so that it will be distinct from the others we will be using. We can
-now create a new FrameSet containing just this Frame, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *frameset;
-
-...
-
-frameset = astFrameSet( frame1, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-So far, however, this Frame isn't related to any others.
-
-\subsection{\label{ss:addingframes}Adding New Frames to a FrameSet}
-
-We can now add further Frames to the \htmlref{FrameSet}{FrameSet} created above
-(\secref{ss:creatingaframeset}). To do so, we must supply a new \htmlref{Frame}{Frame}
-and an associated \htmlref{Mapping}{Mapping} that relates it to any of the Frames that
-are already present (there is only one present so far).  To keep the
-example simple, we will just use a \htmlref{ZoomMap}{ZoomMap} that multiplies coordinates
-by 10. The required Objects are created as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame2;
-AstMapping *mapping12;
-
-...
-
-frame2 = astFrame( 2, "Domain=B" );
-mapping12 = astZoomMap( 2, 10.0, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-To add the new Frame into our FrameSet, we use the \htmlref{astAddFrame}{astAddFrame}
-function:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astAddFrame( frameset, 1, mapping12, frame2 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Whenever a Frame is added to a FrameSet, it is assigned an integer
-index. This index starts with 1 for the initial Frame used to create
-the FrameSet (\secref{ss:creatingaframeset}) and increments by one
-every time a new Frame is added. This index is the primary way of
-identifying the Frames within a FrameSet.
-
-When a Frame is added, we also have to specify which of the existing
-ones the new Frame is related to. Here, we chose number 1, the only
-one present so far, and the new one we added became number 2.
-
-Note that a FrameSet does not make copies of the Frames and Mappings
-that you insert into it. Instead, it holds pointers to them. This
-means that if you retain the original pointers to these Objects and
-alter them, you will indirectly be altering the FrameSet's
-contents. You can, of course, always use \htmlref{astCopy}{astCopy}
-(\secref{ss:copyingobjects}) to make a separate copy of any \htmlref{Object}{Object} if
-you need to ensure its independence.
-
-We could also add a third Frame into our FrameSet, this time defining
-a coordinate system which is reached by multiplying the original
-coordinates (of ``frame1'') by 5:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astAddFrame( frameset, 1, astZoomMap( 2, 5.0, "" ), astFrame( 2, "Domain=C" ) );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have avoided storing unnecessary pointer values by using
-function invocations directly as arguments for astAddFrame. This
-assumes that we are using \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd} (\secref{ss:contexts}) to
-ensure that Objects are correctly deleted when no longer required.
-
-\begin{latexonly}
-   Our example FrameSet now contains three Frames and two Mappings with
-   the arrangement shown in Figure~\ref{fig:fsexample}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.6]{sun211_figures/fsexample.eps}
-   \caption{An example FrameSet, in which Frames~2 and 3 are related to
-   Frame~1 by multiplying its coordinates by factors of 10 and 5
-   respectively. The FrameSet's \htmlref{Base}{Base} attribute has the value 1 and its
-   \htmlref{Current}{Current} attribute has the value 3. The transformation performed when
-   the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
-   its current Frame) is shown in bold.}
-   \label{fig:fsexample}
-   \end{center}
-   \end{figure}
-   The total number of Frames is given by its read-only \htmlref{Nframe}{Nframe} attribute.
-\end{latexonly}
-\begin{htmlonly}
-   Our example FrameSet now contains three Frames and two Mappings with
-   the arrangement shown in the Figure below. The total number of Frames
-   is given by its read-only Nframe attribute.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:fsexample}
-   \includegraphics[scale=0.9]{sun211_figures/fsexample.eps}
-   \caption{An example FrameSet, in which Frames~2 and 3 are related to
-   Frame~1 by multiplying its coordinates by factors of 10 and 5
-   respectively. The FrameSet's Base attribute has the value 1 and its
-   Current attribute has the value 3. The transformation performed when
-   the FrameSet is used as a Mapping ({\em{i.e.}}\ from its base to
-   its current Frame) is shown in bold.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-
-\subsection{\label{ss:baseandcurrent}The Base and Current Frames}
-
-At all times, one of the Frames in a \htmlref{FrameSet}{FrameSet} is designated to be its
-{\em{base}} \htmlref{Frame}{Frame} and one to be its {\em{current}} Frame
-(Figure~\ref{fig:fsexample}). These Frames are identified by two
-integer FrameSet attributes, \htmlref{Base}{Base} and \htmlref{Current}{Current}, which hold the indices
-of the nominated Frames within the FrameSet.
-
-The existence of the base and current Frames reflects an important
-application of FrameSets, which is to attach coordinate systems to
-entities such as data arrays, data files, plotting surfaces (for
-graphics), {\em{etc.}}  In this context, the base Frame represents the
-``native'' coordinate system of the attached entity---for example, the
-pixel coordinates of an image or the intrinsic coordinates of a
-plotting surface. The other Frames within the FrameSet represent
-alternative coordinate systems which may also be used to refer to
-positions within that entity.  The current Frame represents the
-particular coordinate system which is currently selected for use. For
-instance, if an image were being displayed, you would aim to label it
-with coordinates corresponding to the current Frame. In order to see a
-different coordinate system, a software user would arrange for a
-different Frame to be made current.
-
-The choice of base and current Frames may be changed at any time,
-simply by assigning new values to the FrameSet's Base and Current
-attributes. For example, to make the Frame with index 3 become the
-current Frame, you could use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSetI( frameset, "Current", 3 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You can nominate the same Frame to be both the base and current Frame
-if you wish.
-\label{ss:baseandcurrentdefault}
-
-By default ({\em{i.e.}}\ if the Base or Current attribute is un-set),
-the first Frame added to a FrameSet becomes its base Frame and the
-last one added becomes its current Frame.\footnote{Although this is
-reversed if the FrameSet's \htmlref{Invert}{Invert} attribute is non-zero.} Whenever a
-new Frame is added to a FrameSet, the Current attribute is modified so
-that the new Frame becomes the current one. This behaviour is
-reflected in the state of the example FrameSet in
-Figure~\ref{fig:fsexample}.
-
-\subsection{\label{ss:astbaseandastcurrent}Referring to the Base and Current Frames}
-
-It is often necessary to refer to the base and current Frames
-(\secref{ss:baseandcurrent}) within a \htmlref{FrameSet}{FrameSet}, but it can be
-cumbersome having to obtain their indices from the \htmlref{Base}{Base} and \htmlref{Current}{Current}
-attributes on each occasion. To make this easier, two macros,
-AST\_\_BASE and AST\_\_CURRENT, are defined in the ``ast.h'' header
-file and may be used to represent the indices of the base and current
-Frames respectively. They may be used whenever a \htmlref{Frame}{Frame} index is
-required.
-
-For example, when adding a new Frame to a FrameSet
-(\secref{ss:addingframes}), you could use the following to indicate
-that the new Frame is related to the existing current Frame, whatever
-its index happens to be:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrame *frame;
-AstMapping *mapping;
-
-...
-
-astAddFrame( frameset, AST__CURRENT, mapping, frame );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Of course, the Frame you added would then become the new current
-Frame.
-
-\subsection{\label{ss:framesetasmapping}Using a FrameSet as a Mapping}
-
-The \htmlref{FrameSet}{FrameSet} class inherits properties and behaviour from the \htmlref{Frame}{Frame}
-class (\secref{ss:frames}) and, in turn, from the \htmlref{Mapping}{Mapping} class
-(\secref{ss:mappings}). Its behaviour when used as a Mapping is
-particularly important.
-
-Consider, for instance, passing a FrameSet pointer to a coordinate
-transformation function such as \htmlref{astTran2}{astTran2}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define N 10
-double xin[ N ], yin[ N ], xout[ N ], yout[ N ];
-
-...
-
-astTran2( frameset, N, xin, yin, 1, xout, yout );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The coordinate transformation applied by this FrameSet would be the
-one which converts between its base and current Frames. Using the
-FrameSet in Figure~\ref{fig:fsexample}, for example, the coordinates
-would be multiplied by a factor of 5.  If we instead requested the
-FrameSet's inverse transformation, we would be transforming from its
-current Frame to its base Frame, so our example FrameSet would then
-multiply by a factor of 0.2.
-
-Whenever the choice of base and current Frames changes, the
-transformations which a FrameSet performs when used as a Mapping also
-change to reflect this. The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes may also change in
-consequence, because they are determined by the numbers of axes in the
-FrameSet's base and current Frames respectively. These numbers need
-not necessarily be equal, of course.
-
-Like any Mapping, a FrameSet may also be inverted by changing the
-boolean sense of its \htmlref{Invert}{Invert} attribute, {\em{e.g.}}\ using \htmlref{astInvert}{astInvert}
-(\secref{ss:invertingmappings}). If this is happens, the values of the
-FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes are interchanged, along with
-its Nin and Nout attributes, so that its base and current Frames swap
-places. When used as a Mapping, the FrameSet will therefore perform
-the inverse transformation to that which it performed previously.
-
-To summarise, a FrameSet may be used exactly like any other Mapping
-which inter-relates the coordinate systems described by its base and
-current Frames.
-
-\subsection{\label{ss:extractingamapping}Extracting a Mapping from a FrameSet}
-
-Although it is very convenient to use a \htmlref{FrameSet}{FrameSet} when a \htmlref{Mapping}{Mapping} is
-required (\secref{ss:framesetasmapping}), a FrameSet necessarily
-contains additional information and sometimes this might cause
-inefficiency or confusion.  For example, if you wanted to use a
-Mapping contained in one FrameSet and insert it into another, it would
-probably not be efficient to insert the whole of the first FrameSet
-into the second one, although it would work.
-
-In such a situation, the \htmlref{astGetMapping}{astGetMapping} function allows you to extract
-a Mapping from a FrameSet. You do this by specifying the two Frames
-which the Mapping should inter-relate using their indices within the
-FrameSet. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-map = astGetMapping( frameset, 2, 3 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would return a pointer to a Mapping that converted between Frames~2
-and 3 in the FrameSet. Its inverse transformation would then convert
-in the opposite direction, {\em{i.e.}}\ between Frames~3 and 2.  Note
-that this Mapping might not be independent of the Mappings contained
-within the FrameSet---{\em{i.e.}}\ they may share sub-Objects---so
-\htmlref{astCopy}{astCopy} should be used to make a copy if you need to guarantee
-independence (\secref{ss:copyingobjects}).
-
-Very often, the Mapping returned by astGetMapping will be a compound
-Mapping, or \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}). This reflects the fact that
-conversion between the two Frames may need to be done {\em{via}} an
-intermediate coordinate system so that several stages may be involved.
-You can, however, easily simplify this Mapping (where this is possible)
-by using the \htmlref{astSimplify}{astSimplify} function (\secref{ss:simplifyingcmpmaps}) and
-this is recommended if you plan to use it for transforming a large
-amount of data.
-
-\subsection{\label{ss:framesetasframe}Using a FrameSet as a Frame}
-
-A \htmlref{FrameSet}{FrameSet} can also be used as a \htmlref{Frame}{Frame}, in which capacity it almost
-always behaves as if its current Frame had been used instead. For
-example, if you request the \htmlref{Title}{Title} attribute of a FrameSet using:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *title;
-
-...
-
-title = astGetC( frameset, "Title" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-the result will be the Title of the current Frame, or a suitable
-default if the current Frame's Title attribute is un-set. The same
-also applies to other attribute operations---{\em{i.e.}}\ setting,
-clearing and testing attributes.  Most attributes shared by both
-Frames and FrameSets behave in this way, such as \htmlref{Naxes}{Naxes}, \htmlref{Label(axis)}{Labelaxis},
-\htmlref{Format(axis)}{Formataxis}, {\em{etc.}} There are, however, a few exceptions:
-
-\begin{quote}
-\begin{description}
-\item[\htmlref{Class}{Class}]\mbox{}\\
-Has the value ``FrameSet''.
-
-\item[\htmlref{ID}{ID}]\mbox{}\\
-Identifies the particular FrameSet (not its current Frame).
-
-\item[\htmlref{Nin}{Nin}]\mbox{}\\
-Equals the number of axes in the FrameSet's base Frame.
-
-\item[\htmlref{Invert}{Invert}]\mbox{}\\
-Is independent of any of the Objects within the FrameSet.
-
-\item[\htmlref{Nobject}{Nobject}]\mbox{}\\
-Counts the number of active FrameSets.
-
-\item[\htmlref{RefCount}{RefCount}]\mbox{}\\
-Counts the number of active pointers to the FrameSet (not to its
-current Frame).
-\end{description}
-\end{quote}
-
-Note that the set of attributes possessed by a FrameSet can vary,
-depending on the nature of its current Frame. For example, if the
-current Frame is a \htmlref{SkyFrame}{SkyFrame} (\secref{ss:skyframes}), then the FrameSet
-will acquire an \htmlref{Equinox}{Equinox} attribute from it which can be set, enquired,
-{\em{etc.}}  However, if the current Frame is changed to be a basic
-Frame, which does not have an Equinox attribute, then this attribute
-will be absent from the FrameSet as well. Any attempt to reference it
-will then result in an error.
-
-\subsection{Extracting a Frame from a FrameSet}
-
-Although a \htmlref{FrameSet}{FrameSet} may be used in place of its current \htmlref{Frame}{Frame} in most
-situations, it is sometimes convenient to have direct access to a
-specified Frame within it. This may be obtained using the \htmlref{astGetFrame}{astGetFrame}
-function, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-frame = astGetFrame( frameset, AST__BASE );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would return a pointer (not a copy) to the base Frame within the
-FrameSet. Note the use of AST\_\_BASE
-(\secref{ss:astbaseandastcurrent}) as shorthand for the value of the
-FrameSet's \htmlref{Base}{Base} attribute, which gives the base Frame's index.
-
-\subsection{Removing a Frame from a FrameSet}
-
-Removing a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet} is straightforward and is performed
-using the \htmlref{astRemoveFrame}{astRemoveFrame} function. You identify the Frame you wish to
-remove in the usual way, by giving its index within the FrameSet. For
-example, the following would remove the Frame with index 1:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astRemoveFrame( frameset, 1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The only restriction is that you cannot remove the last remaining
-Frame because a FrameSet must always contain at least one Frame.  When
-a Frame is removed, the Frames which follow it are re-numbered
-({\em{i.e.}}\ their indices are reduced by one) so as to preserve the
-sequence of consecutive Frame indices.  The FrameSet's \htmlref{Nframe}{Nframe}
-attribute is also decremented.
-
-If appropriate, astRemoveFrame will modify the FrameSet's \htmlref{Base}{Base} and/or
-\htmlref{Current}{Current} attributes so that they continue to identify the same Frames
-as previously. If either the base or current Frame is removed,
-however, the corresponding attribute will become un-set, so that it
-reverts to its default value (\secref{ss:baseandcurrentdefault}) and
-therefore identifies an alternative Frame.
-
-Note that it is quite permissible to remove any Frame from a FrameSet,
-even although other Frames may appear to depend on it. For example, in
-Figure~\ref{fig:fsexample}, if Frame~1 were removed, the correct
-relationship between Frames~2 and 3 would still be preserved, although
-they would be re-numbered as Frames~1 and 2.
-
-\cleardoublepage
-\section{\label{ss:fshigher}Higher Level Operations on FrameSets}
-
-\subsection{\label{ss:framesetsfromconvert}Creating FrameSets with astConvert}
-
-Before considering the important subject of using FrameSets to convert
-between coordinate systems (\secref{ss:framesetconverting}), let us
-return briefly to reconsider the output generated by \htmlref{astConvert}{astConvert}. We
-used this function earlier (\secref{ss:introducingconversion}), when
-converting between the coordinate systems represented by various kinds
-of \htmlref{Frame}{Frame}, and indicated that it returns a \htmlref{FrameSet}{FrameSet} to represent the
-coordinate conversion it identifies. We are now in a position to
-examine the structure of this FrameSet.
-
-Take our earlier example (\secref{ss:convertingskyframes}) of
-converting between the celestial coordinate systems represented by two
-SkyFrames:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstFrameSet *cvt;
-AstSkyFrame *skyframe1, *skyframe2;
-
-...
-
-skyframe1 = astSkyFrame( "System=FK4-NO-E, Epoch=B1958, Equinox=B1960" );
-skyframe2 = astSkyFrame( "System=Ecliptic, Equinox=J2010.5" );
-
-cvt = astConvert( skyframe1, skyframe2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\begin{latexonly}
-   This will produce a pointer, ``cvt'', to the FrameSet shown in
-   Figure~\ref{fig:fsconvert}.
-   \begin{figure}[bhtp]
-   \begin{center}
-   \includegraphics[scale=0.65]{sun211_figures/fsconvert.eps}
-   \caption{The FrameSet produced when astConvert is used to convert
-   between the coordinate systems represented by two SkyFrames. The
-   source \htmlref{SkyFrame}{SkyFrame} becomes the base Frame, while the destination SkyFrame
-   becomes the current Frame. The \htmlref{Mapping}{Mapping} between them implements the
-   required conversion.}
-   \label{fig:fsconvert}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   This will produce a pointer, ``cvt'', to the FrameSet shown in the
-   Figure below.
-   \begin{quote}
-   \begin{figure}[bhtp]
-   \label{fig:fsconvert}
-   \includegraphics[scale=1.0]{sun211_figures/fsconvert.eps}
-   \caption{The FrameSet produced when astConvert is used to convert
-   between the coordinate systems represented by two SkyFrames. The
-   source SkyFrame becomes the base Frame, while the destination SkyFrame
-   becomes the current Frame. The Mapping between them implements the
-   required conversion.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-As can be seen, this FrameSet contains just two Frames.  The source
-Frame supplied to astConvert becomes its base Frame, while the
-destination Frame becomes its current Frame. (The FrameSet, of course,
-simply holds pointers to these Frames, rather than making copies.) The
-Mapping which relates the base Frame to the current Frame is the one
-which implements the required conversion.
-
-As we noted earlier (\secref{ss:convertingskyframes}), the FrameSet
-returned by astConvert may be used both as a Mapping and as a Frame to
-perform most of the functions you are likely to need. However, the
-Mapping may be extracted for use on its own if necessary, using
-\htmlref{astGetMapping}{astGetMapping} (\secref{ss:extractingamapping}), for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-mapping = astGetMapping( cvt, AST__BASE, AST__CURRENT );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:framesetconverting}Converting between FrameSet Coordinate Systems}
-
-\begin{latexonly}
-   We now consider the process of converting between the coordinate
-   systems represented by two FrameSets. This is a most important
-   operation, as a subsequent example (\secref{ss:registeringimages})
-   will show, and is illustrated in Figure~\ref{fig:fsalign}.
-   \begin{figure}
-   \begin{center}
-   \includegraphics[scale=0.6]{sun211_figures/fsalign.eps}
-   \caption{Conversion between two FrameSets is performed by establishing
-   a link between a pair of Frames, one from each \htmlref{FrameSet}{FrameSet}. If conversion
-   between these two Frames is possible, then a route for converting
-   between the current Frames of both FrameSets can also be found. In
-   practice, there may be many ways of pairing Frames to find the
-   ``missing link'', so the Frames' \htmlref{Domain}{Domain} attribute may be used to
-   narrow the choice.}
-   \label{fig:fsalign}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   We now consider the process of converting between the coordinate
-   systems represented by two FrameSets. This is a most important
-   operation, as a subsequent example (\secref{ss:registeringimages})
-   will show, and is illustrated in the Figure below.
-   \begin{quote}
-   \begin{figure}
-   \label{fig:fsconvert}
-   \includegraphics[scale=1.0]{sun211_figures/fsalign.eps}
-   \caption{Conversion between two FrameSets is performed by establishing
-   a link between a pair of Frames, one from each FrameSet. If conversion
-   between these two Frames is possible, then a route for converting
-   between the current Frames of both FrameSets can also be found. In
-   practice, there may be many ways of pairing Frames to find the
-   ``missing link'', so the Frames' Domain attribute may be used to
-   narrow the choice.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-Recalling (\secref{ss:framesetasframe}) that a FrameSet will behave
-like its current \htmlref{Frame}{Frame} when necessary, conversion between two
-FrameSets is performed using \htmlref{astConvert}{astConvert}
-(\secref{ss:convertingskyframes}), but supplying pointers to FrameSets
-instead of Frames. The effect of this is to convert between the
-coordinate systems represented by the current Frames of each FrameSet:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *frameseta, *framesetb;
-
-...
-
-cvt = astConvert( frameseta, framesetb, "SKY" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-When using FrameSets, we are presented with considerably more
-conversion options than when using Frames alone. This is because each
-current Frame is related to all the other Frames in its respective
-FrameSet. Therefore, if we can establish a link between any pair of
-Frames, one from each FrameSet, we can form a complete conversion path
-between the two current Frames (Figure~\ref{fig:fsalign}).
-
-This expanded range of options is, of course, precisely the
-intention. By connecting Frames together within a FrameSet, we have
-extended the range of coordinate systems that can be reached from any
-one of them.  We are therefore no longer restricted to converting
-between Frames with the same Domain value (\secref{ss:framedomains}),
-but can go {\em{via}} a range of intermediate coordinate systems in
-order to make the connection we require. Transformation between
-different domains has therefore become possible because, in assembling
-the FrameSets, we provided the additional information needed to
-inter-relate them.
-
-It is important to appreciate, however, that the choice of ``missing
-link'' is crucial in determining the conversion that results.
-Although each FrameSet may be perfectly self-consistent internally,
-this does not mean that all conversion paths through the combined
-network of Mappings are equivalent. Quite the contrary in fact:
-everything depends on where the inter-connecting link between the two
-FrameSets is made.  In practice, there may be a large number of
-possible pairings of Frames and hence of possible links. Other factors
-must therefore be used to restrict the choice. These are:
-
-\begin{enumerate}
-\item Not every possible pairing of Frames is legitimate. For example,
-you cannot convert directly between a basic Frame and a \htmlref{SkyFrame}{SkyFrame} which
-belong to different classes, so such pairings will be ignored.
-
-\item In a similar way, you cannot convert directly between Frames
-with different Domain values (\secref{ss:framedomains}). If the Domain
-attribute is used consistently (typically only one Frame in each
-FrameSet will have a particular Domain value), then this further
-restricts the choice.
-
-\item The third argument of astConvert may then be used to specify
-explicitly which Domain value the paired Frames should have. You may
-also supply a comma-separated list of preferences here (see below).
-
-\item If the above steps fail to uniquely identify the link, then the
-first suitable pairing of Frames is used, so that any ambiguity is
-resolved by the order in which Frames are considered for pairing (see
-the description of the astConvert function in
-\appref{ss:functiondescriptions} for details of the search
-order).\footnote{If you find that how this ambiguity is resolved
-actually makes a difference to the conversion that results, then you
-have probably constructed a FrameSet which lacks internal
-self-consistency. For example, you might have two Frames representing
-indistinguishable coordinate systems but inter-related by a non-null
-\htmlref{Mapping}{Mapping}.}
-\end{enumerate}
-
-In the example above we supplied the string ``SKY'' as the third
-argument of astConvert. This constitutes a request that a pair of
-Frames with
-the Domain value SKY ({\em{i.e.}}\ representing celestial coordinate
-systems) should be used to inter-relate the two FrameSets. Note that
-this does not specify which celestial coordinate system to use, but is
-a general request that the two FrameSets be inter-related using
-coordinates on the celestial sphere.
-
-Of course, it may be that this request cannot be met because there may
-not be a celestial coordinate system in both FrameSets. If this is
-likely to happen, we can supply a list of preferences, or a
-{\em{domain search path,}}
-as the third argument to astConvert, such as
-the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cvt = astConvert( frameseta, framesetb, "SKY,PIXEL,GRID," );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Now, if the two FrameSets cannot be inter-related using the SKY domain,
-astConvert will attempt to use the PIXEL domain instead. If this
-also fails, it will try the GRID domain. A blank field in the domain
-search path (here indicated by the final comma) allows any Domain
-value to be used. This can be employed as a last resort when all else
-has failed.
-
-If astConvert succeeds in identifying a conversion, it will return a
-pointer to a FrameSet (\secref{ss:framesetsfromconvert}) in which the
-source and destination Frames are inter-connected by the required
-Mapping. In this case, of course, these Frames will be the current
-Frames of the two FrameSets, but in all other respects the returned
-FrameSet is the same as when converting between Frames.
-
-Very importantly, however, astConvert may modify the FrameSets you are
-converting between. It does this, in order to indicate which pairing
-of Frames was used to inter-relate them, by changing the \htmlref{Base}{Base}
-attribute for each FrameSet so that the Frame used in the pairing
-becomes its base Frame (\secref{ss:baseandcurrent}).
-
-Finally, note that astConvert may also be used to convert between a
-FrameSet and a Frame, or {\em{vice versa.}} If a pointer to a Frame is
-supplied for either the first or second argument, it will behave like
-a FrameSet containing only a single Frame.
-
-\subsection{\label{ss:registeringimages}Example---Registering Two Images}
-
-Consider two images which have been calibrated by attaching FrameSets
-to them, such that the base \htmlref{Frame}{Frame} of each \htmlref{FrameSet}{FrameSet} corresponds to the
-raw data grid coordinates of each image (the GRID domain of
-\secref{ss:domainconventions}). Suppose, also, that these FrameSets
-contain an unknown number of other Frames, representing alternative
-world coordinate systems.  What we wish to do is register these two
-images, such that we can transform from a position in the data grid of
-one into the corresponding position in the data grid of the other.
-This is a very practical example because images will typically be
-calibrated using FrameSets in precisely this way.
-
-The first step will probably involve making a copy of both FrameSets
-(using \htmlref{astCopy}{astCopy}---\secref{ss:copyingobjects}), since we will be
-modifying them. Let ``frameseta'' and ``framesetb'' be pointers to
-these copies. Since we want to convert between the base Frames of
-these FrameSets ({\em{i.e.}}\ their data grid coordinates), the next
-step is to make these Frames current. This is simply done by inverting
-both FrameSets, which interchanges their base and current
-Frames. \htmlref{astInvert}{astInvert} will perform this task:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astInvert( frameseta );
-astInvert( framesetb );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-To identify the required conversion, we now use \htmlref{astConvert}{astConvert}, supplying
-a suitable domain search path with which we would like our two images
-to be registered:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cvt = astConvert( frameseta, framesetb, "SKY,PIXEL,GRID" );
-if ( cvt == AST__NULL ) {
-   <no conversion was possible>
-} else {
-   <conversion was possible>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effects of this are:
-
-\begin{enumerate}
-\item astConvert first attempts to register the two images on the
-celestial sphere ({\em{i.e.}}\ using the SKY domain). To do this, it
-searches for a celestial coordinate system, although not necessarily
-the same one, attached to each image.  If it finds a suitable pair of
-coordinate systems, it then registers the images by matching
-corresponding positions on the sky.
-
-\item If this fails, astConvert next tries to match positions in the
-PIXEL domain (\secref{ss:framedomains}). If it succeeds, the two
-images will then be registered so that their corresponding pixel
-positions correspond. If the PIXEL domain is offset from the data grid
-(as typically happens in data reduction systems which implement a
-``pixel origin''), then this will be correctly accounted for.
-
-\item If this also fails, the GRID domain is finally used. This will
-result in image registration by matching corresponding points in the
-data grids used by both images. This means they will be
-aligned so that the first element their data arrays correspond.
-
-\item If all of the above fail, astConvert will return the value
-AST\_\_NULL. Otherwise a pointer to a FrameSet will be returned.
-\end{enumerate}
-
-The resulting ``cvt'' FrameSet may then be used directly
-(\secref{ss:convertingskyframes}) to convert between positions in the
-data grid of the first image and corresponding positions in the data
-grid of the second image.
-
-To determine which domain was used to achieve registration,
-we can use the fact that the \htmlref{Base}{Base} attribute of each FrameSet is set by
-astConvert to indicate which intermediate Frames were used. We
-can therefore simply invert either FrameSet (to make its base Frame
-become the current one) and then enquire the \htmlref{Domain}{Domain} value:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *domain;
-
-...
-
-astInvert( frameseta );
-domain = astGetC( frameseta, "Domain" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If conversion was successful, the result will be one of the strings
-``SKY'', ``PIXEL'' or ``GRID''.
-
-\subsection{\label{ss:remapframe}Re-Defining a FrameSet Coordinate System}
-
-As discussed earlier (\secref{ss:baseandcurrent}), an important
-application of a \htmlref{FrameSet}{FrameSet} is to allow coordinate system information to
-be attached to entities such as images in order to calibrate them. In
-addition, one of the main objectives of AST is to simplify the
-propagation of such information through successive stages of data
-processing, so that it remains consistent with the associated image
-data.
-
-In such a situation, the FrameSet's base \htmlref{Frame}{Frame} would correspond with
-the image's data grid coordinates and its other Frames (if any) with
-the various alternative world coordinate systems associated with the
-image.  If the data processing being performed does not change the
-relationship between the image's data grid coordinates and any of the
-associated world coordinate systems, then propagation of the WCS
-information is straightforward and simply involves copying the
-FrameSet associated with the image.
-
-If any of these relationships change, however, then corresponding
-changes must be made to the way Frames within the FrameSet are
-inter-related. By far the most common case occurs when the image
-undergoes some geometrical transformation resulting in ``re-gridding''
-on to another data grid, but the same principles can be applied to any
-re-definition of a coordinate system.
-
-To pursue the re-gridding example, we would need to modify our
-FrameSet to account for the fact that the image's data grid coordinate
-system (corresponding to the FrameSet's base Frame) has
-changed. Looking at the steps needed in detail, we might proceed as
-follows:
-
-\begin{enumerate}
-\item Create a \htmlref{Mapping}{Mapping} which represents the relationship between the
-original data grid coordinate system and the new one.
-
-\item Obtain a Frame to represent the new data grid coordinate system
-(we could re-use the original base Frame here, using \htmlref{astGetFrame}{astGetFrame} to
-obtain a pointer to it).
-
-\item Add the new Frame to the FrameSet, related to the original base
-Frame by the new Mapping. This Frame now represents the new data grid
-coordinate system and is correctly related to all the other Frames
-present.\footnote{This is because any transformation to or from this
-new Frame must go {\em{via}} the base Frame representing the original
-data grid coordinate system, which we assume was correctly related to
-all the other Frames present.}
-
-\item Remove the original base Frame (representing the old data grid
-coordinate system).
-
-\item Make the new Frame the base Frame and restore the original
-current Frame.
-\end{enumerate}
-
-\begin{latexonly}
-   The effect of these steps is to change the relationship between the
-   base Frame and all the other Frames present. It is as if a new Mapping
-   has been interposed between the Frame we want to alter and all the
-   other Frames within the FrameSet (Figure~\ref{fig:fsremap}).
-   \begin{figure}[hbtp]
-   \begin{center}
-   \includegraphics[scale=0.6]{sun211_figures/fsremap.eps}
-   \caption{The effect of \htmlref{astRemapFrame}{astRemapFrame} is to interpose a Mapping between
-   a nominated Frame within a FrameSet and the remaining contents of the
-   FrameSet. This effectively ``re-defines'' the coordinate system
-   represented by the affected Frame. It may be used to compensate (say)
-   for geometrical changes made to an associated image. The
-   inter-relationships between all the other Frames within the FrameSet
-   remain unchanged.}
-   \label{fig:fsremap}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   The effect of these steps is to change the relationship between the
-   base Frame and all the other Frames present. It is as if a new Mapping
-   has been interposed between the Frame we want to alter and all the
-   other Frames within the FrameSet (see Figure below).
-   \begin{quote}
-   \begin{figure}[hbtp]
-   \label{fig:fsremap}
-   \includegraphics[scale=0.9]{sun211_figures/fsremap.eps}
-   \caption{The effect of astRemapFrame is to interpose a Mapping between
-   a nominated Frame within a FrameSet and the remaining contents of the
-   FrameSet. This effectively ``re-defines'' the coordinate system
-   represented by the affected Frame. It may be used to compensate (say)
-   for geometrical changes made to an associated image. The
-   inter-relationships between all the other Frames within the FrameSet
-   remain unchanged.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-Performing the steps above is rather lengthy, however, so the
-astRemapFrame function is provided to perform all of these operations
-in one go. A practical example of its use is given below
-(\secref{ss:wcsprocessingexample}).
-
-\subsection{\label{ss:wcsprocessingexample}Example---Binning an Image}
-
-As an example of using \htmlref{astRemapFrame}{astRemapFrame}, consider a case where the pixels
-of a 2-dimensional image have been binned 2$\times$2, so as to reduce
-the image size by a factor of two in each dimension.  We must now
-modify the associated \htmlref{FrameSet}{FrameSet} to reflect this change to the
-image. Much the same process would be needed for any other geometrical
-change the image might undergo.
-
-We first set up a \htmlref{Mapping}{Mapping} (a \htmlref{WinMap}{WinMap} in this case) which relates the
-data grid coordinates in the original image to those in the new one:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstWinMap *winmap;
-double ina[ 2 ] = { 0.5, 0.5 };
-double inb[ 2 ] = { 2.5, 2.5 };
-double outa[ 2 ] = { 0.5, 0.5 };
-double outb[ 2 ] = { 1.5, 1.5 };
-
-...
-
-winmap = astWinMap( 2, ina, inb, outa, outb, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have simply set up arrays containing the data grid
-coordinates of the bottom left and top right corners of the first
-element in the output image (``outa'' and ``outb'') and the
-corresponding coordinates in the input image (``ina'' and
-``inb''). \htmlref{astWinMap}{astWinMap} then creates a WinMap which performs the required
-transformation. We do not need to know the size of the image.
-
-We can then pass this WinMap to astRemapFrame. This modifies the
-relationship between our FrameSet's base \htmlref{Frame}{Frame} and the other Frames in
-the FrameSet, so that the base Frame represents the data grid
-coordinate system of the new image rather than the old one:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstFrameSet *frameset;
-
-...
-
-astRemapFrame( frameset, AST__BASE, winmap );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Any other coordinate systems described by the FrameSet, no matter how
-many of these there might be, are now correctly associated with the
-new image.
-
-\subsection{\label{ss:framesetintegrity}Maintaining the Integrity of FrameSets}
-
-When constructing a \htmlref{FrameSet}{FrameSet}, you are provided with a framework into
-which you can place any combination of Frames and Mappings that you
-wish. There are relatively few constraints on this process and no
-checks are performed to see whether the FrameSet you construct makes
-physical sense.  It is quite possible, for example, to construct a
-FrameSet containing two identical SkyFrames which are inter-related by
-a non-unit \htmlref{Mapping}{Mapping}. AST will not object if you do this, but it makes
-no sense, because applying a non-unit Mapping to any set of celestial
-coordinates cannot yield positions that are still in the original
-coordinate system.  If you use such a FrameSet to perform coordinate
-conversions, you are likely to get unpredictable results because the
-information in the FrameSet is corrupt.
-
-It is, of course, your responsibility as a programmer to ensure the
-validity of any information which you insert into a
-FrameSet. Normally, this is straightforward and simply consists of
-formulating your problem correctly (a diagram can often help to
-clarify how coordinate systems are inter-related) and writing the
-appropriate bug-free code to construct the FrameSet. However, once you
-start to modify an existing FrameSet, there are new opportunities for
-corrupting it!
-
-Consider, for example, a FrameSet whose current \htmlref{Frame}{Frame} is a
-\htmlref{SkyFrame}{SkyFrame}. We can set a new value for this SkyFrame's \htmlref{Equinox}{Equinox} attribute
-simply by using \htmlref{astSet}{astSet} on the FrameSet, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( frameset, "Equinox=J2010" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effect of this will be to change the celestial coordinate system
-which the current Frame represents. You can see, however, that this
-has the potential to make the FrameSet corrupt unless corresponding
-changes are also made to the Mapping which relates this SkyFrame to
-the other Frames within the FrameSet. In fact, it is a general rule
-that any change to a FrameSet which affects its current Frame can
-potentially require corresponding changes to the FrameSet's Mappings
-in order to maintain its overall integrity.
-
-Fortunately, once you have stored valid information in a FrameSet, AST
-will look after these details for you automatically, so that the
-FrameSet's integrity is maintained. In the example above, it would do
-this by appropriately re-mapping the current Frame (as if
-\htmlref{astRemapFrame}{astRemapFrame} had been used---\secref{ss:remapframe}) in response to
-the use of astSet. One way of illustrating this process is as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-
-...
-
-skyframe = astSkyFrame( "" );
-frameSet = astFrameSet( skyframe );
-astAddFrame( frameset, 1, astUnitMap( 2, "" ), skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This constructs a trivial FrameSet whose base and current Frames are
-both the same SkyFrame connected by a \htmlref{UnitMap}{UnitMap}. You can think of this
-as a ``pipe'' connecting two coordinate systems. At present, these two
-systems represent identical ICRS coordinates, so the FrameSet
-implements a unit Mapping. We can change the coordinate system on the
-current end of this pipe as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( frameset, "System=Ecliptic, Equinox=J2010" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-and the Mapping which the FrameSet implements would change
-accordingly. To change the coordinate system on the base end of the
-pipe, we might use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astInvert( frameset );
-astSet( frameset, "System=Galactic" );
-astInvert( frameset );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The FrameSet would then convert between galactic and ecliptic
-coordinates.
-
-Note that astSet is not the only function which has this effect:
-\htmlref{astClear}{astClear} behaves similarly, as also does \htmlref{astPermAxes}{astPermAxes}
-(\secref{ss:permutingaxes}). If you need to circumvent this mechanism
-for any reason, this can be done by going behind the scenes and
-obtaining a pointer directly to the Frame you wish to modify. Consider
-the following, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-skyframe = astGetFrame( frameset, AST__CURRENT );
-astSet( skyframe, "Equinox=J2010" );
-skyframe = astAnnul( skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, astSet is applied to the SkyFrame pointer rather than the
-FrameSet pointer, so the usual checks on FrameSet integrity do not
-occur. The SkyFrame's Equinox attribute will therefore be modified
-without any corresponding change to the FrameSet's Mappings.  In this
-case you must take responsibility yourself for maintaining the
-FrameSet's integrity, perhaps through appropriate use of
-astRemapFrame.
-
-\subsection{Merging FrameSets}
-
-\begin{latexonly}
-   As well as adding individual Frames to a \htmlref{FrameSet}{FrameSet}
-   (\secref{ss:addingframes}), it is also possible to add complete sets of
-   inter-related Frames which are contained within another
-   FrameSet. This, of course, corresponds to the process of merging two
-   FrameSets (Figure~\ref{fig:fsmerge}).
-   \begin{figure}[hbtp]
-   \begin{center}
-   \includegraphics[scale=0.6]{sun211_figures/fsmerge.eps}
-   \caption{Two FrameSets in the process of being merged using
-   \htmlref{astAddFrame}{astAddFrame}. FrameSet~B is being added to FrameSet~A by supplying a
-   new \htmlref{Mapping}{Mapping} which inter-relates a nominated \htmlref{Frame}{Frame} in A (here number~1)
-   and the current Frame of B. In the merged FrameSet, the Frames
-   contributed by B will be re-numbered to become Frames~4, 5 and 6. The
-   base Frame will remain unchanged, but the current Frame of B becomes
-   the new current Frame. Note that FrameSet~B itself is not
-   altered by this process.}
-   \label{fig:fsmerge}
-   \end{center}
-   \end{figure}
-\end{latexonly}
-\begin{htmlonly}
-   As well as adding individual Frames to a FrameSet
-   (\secref{ss:addingframes}), it is also possible to add complete sets of
-   inter-related Frames which are contained within another
-   FrameSet. This, of course, corresponds to the process of merging two
-   FrameSets (see Figure below).
-   \begin{quote}
-   \begin{figure}[hbtp]
-   \label{fig:fsmerge}
-   \includegraphics[scale=0.75]{sun211_figures/fsmerge.eps}
-   \caption{Two FrameSets in the process of being merged using
-   astAddFrame. FrameSet~B is being added to FrameSet~A by supplying a
-   new Mapping which inter-relates a nominated Frame in A (here number~1)
-   and the current Frame of B. In the merged FrameSet, the Frames
-   contributed by B will be re-numbered to become Frames~4, 5 and 6. The
-   base Frame will remain unchanged, but the current Frame of B becomes
-   the new current Frame. Note that FrameSet~B itself is not
-   altered by this process.}
-   \end{figure}
-   \end{quote}
-\end{htmlonly}
-
-This process is performed by adding one FrameSet to another using
-astAddFrame, in much the same manner as when adding a new Frame to an
-existing FrameSet (\secref{ss:addingframes}). It is simply a matter of
-providing a FrameSet pointer, instead of a Frame pointer, for the 4th
-argument. In performing the merger you must, as usual, supply a
-Mapping, but in this case the Mapping should relate the current Frame
-of the FrameSet being added to one of the Frames already present. For
-example, you might perform the merger shown in
-Figure~\ref{fig:fsmerge} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstMapping *mapping;
-
-...
-
-astAddFrame( frameseta, 1, mapping, framesetb );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The Frames acquired by ``frameseta'' from the FrameSet being added
-(``framesetb'') are re-numbered so that they retain their original
-order and follow on consecutively after the Frames that were already
-present, whose indices remain unchanged. The base Frame of
-``frameseta'' remains unchanged, but the current Frame of
-``framesetb'' becomes its new current Frame. All the
-inter-relationships between Frames in both FrameSets remain in place
-and are preserved in the merged FrameSet.
-
-Note that while this process modifies the first FrameSet
-(``frameseta''), it leaves the original contents of the one being
-added (``framesetb'') unchanged.
-
-%\cleardoublepage
-%\section{\label{ss:searching}TBW - Searching for Coordinate Systems}
-
-\cleardoublepage
-\section{\label{ss:channels}Saving and Restoring Objects (Channels)}
-
-Facilities are provided by the AST library for performing input and
-output (I/O) with any kind of \htmlref{Object}{Object}. This means it is possible
-to write any Object into various external representations for
-storage, and then to read these representations back in, so as to
-restore the original Object. Typically, an Object would be written by
-one program and read back in by another.
-
-We refer to ``external representations'' in the plural because AST is
-designed to function independently of any particular data storage
-system. This means that Objects may need converting into a number of
-different external representations in order to be compatible with
-(say) the astronomical data storage system in which they will reside.
-
-In this section, we discuss the basic I/O facilities which support
-external representations based on a textual format referred to as the AST
-``native format''. These are implemented using a new kind of Object---a
-\htmlref{Channel}{Channel}. We will examine later how to use other representations, based on
-an XML format or on the use of FITS headers, for storing Objects. These
-are implemented using more specialised forms of Channel called \htmlref{XmlChan}{XmlChan} 
-(\secref{ss:xmlchan}) and \htmlref{FitsChan}{FitsChan} (\secref{ss:nativefits}).
-
-\subsection{The Channel Model}
-
-The best way to start thinking about a \htmlref{Channel}{Channel} is like a C file
-stream, and to think of the process of creating a Channel as that
-of opening a file and obtaining a FILE pointer.  Subsequently, you can
-read and write Objects {\em{via}} the Channel.
-
-This analogy is not quite perfect, however, because a Channel has, in
-principle, two ``files'' attached to it. One is used when reading, and
-the other when writing. These are termed the Channel's {\em{source}}
-and {\em{sink}} respectively. In practice, the source and sink may
-both be the same, in which case the analogy with the C file stream is
-correct, but this need not always be so. It is not necessarily so with
-the basic Channel, as we will now see (\secref{ss:creatingachannel}).
-
-\subsection{\label{ss:creatingachannel}Creating a Channel}
-
-The process of creating a \htmlref{Channel}{Channel} is straightforward. As you
-might expect, it uses the constructor function \htmlref{astChannel}{astChannel}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstChannel *channel;
-
-...
-
-channel = astChannel( NULL, NULL, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first two arguments to astChannel specify the external source and
-sink that the Channel is to use. There arguments are pointers to C
-functions and we will examine their use in more detail later
-(\secref{ss:channelsource} and \secref{ss:channelsink}).
-
-In this very simple example we have supplied NULL pointers for both
-the source and sink functions. This requests the default behaviour,
-which means that textual input will be read from the program's
-standard input stream (typically, this means your keyboard) while
-textual output will go to the standard output stream (typically
-appearing on your screen). On UNIX systems, of course, either of these
-streams can easily be redirected to files.
-
-\subsection{\label{ss:writingtoachannel}Writing Objects to a Channel}
-
-The process of saving Objects is very straightforward. You can
-simply write any \htmlref{Object}{Object} to a \htmlref{Channel}{Channel} using the \htmlref{astWrite}{astWrite}
-function, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int nobj;
-AstObject *object;
-
-...
-
-nobj = astWrite( channel, object );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The effect of this will be to produce a textual description of the
-Object which will appear, by default, on your program's standard
-output stream. Any class of Object may be converted into text in this
-way.
-
-astWrite returns a count of the number of Objects written. Usually,
-this will be one, unless the Object supplied cannot be
-represented. With a basic Channel all Objects can be represented, so a
-value of one will always be returned unless there has been an
-error. We will see later, however, that more specialised forms of
-Channel may impose restrictions on the kind of Object you can write
-(\secref{ss:foreignfitslimitations}). In such cases, astWrite may
-return zero to indicate that the Object was not acceptable.
-
-\subsection{\label{ss:readingfromachannel}Reading Objects from a Channel}
-
-Before discussing the format of the output produced above
-(\secref{ss:writingtoachannel}), let us consider how to read it back,
-so as to reconstruct the original \htmlref{Object}{Object}. Naturally, we would first
-need to save the output in a file. On UNIX systems, we can do that
-simply by redirecting standard output to a file using a shell command
-like:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program1 >file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Within a subsequent program, we can read this Object back in by
-using the \htmlref{astRead}{astRead} function, having first created a suitable
-\htmlref{Channel}{Channel}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-object = astRead( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-By default, this function will read from the standard input stream
-(the default source for a basic Channel), so we would need to ensure
-that our second program reads its input from the file in which the
-Object description is stored. On UNIX systems, we could again use a
-shell redirection command such as:
-
-\begin{quote}
-\small
-\begin{verbatim}
-program2 <file
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Saving and Restoring Multiple Objects}
-
-I/O operations performed on a basic \htmlref{Channel}{Channel} are sequential. This
-means that if you write more than one \htmlref{Object}{Object} to a Channel,
-each new Object's textual description is simply appended to the
-previous one. You can store any number of Objects in this way,
-subject only to the storage space you have available.
-
-After you read an Object back from a basic Channel, the
-Channel is ``positioned'' at the end of that Object's
-textual description. If you then perform another read, you will
-read the next Object's textual description and therefore
-retrieve the next Object.  This process may be repeated to read
-each Object in turn. When there are no more Objects to be
-read, \htmlref{astRead}{astRead} will return the value AST\_\_NULL to indicate an
-{\em{end-of-file.}}
-
-\subsection{\label{ss:validatinginput}Validating Input}
-
-The pointer returned by \htmlref{astRead}{astRead} (\secref{ss:readingfromachannel}) could
-identify any class of \htmlref{Object}{Object}---this is determined entirely by the
-external data being read. If it is necessary to test for a particular
-class (say a \htmlref{Frame}{Frame}), this may be done as follows using the appropriate
-member of the \htmlref{astIsA$<$Class$>$}{astIsAClass} family of functions:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int ok;
-
-...
-
-ok = astIsAFrame( object );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note, however, that this will accept any Frame, so would be equally
-happy with a basic Frame or a \htmlref{SkyFrame}{SkyFrame}.  An alternative validation
-strategy would be to obtain the value of the Object's \htmlref{Class}{Class} attribute
-and then test this character string, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <string.h>
-
-...
-
-ok = !strcmp( astGetC( object, "Class" ), "Frame" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This would only accept a basic Frame and would reject a SkyFrame.
-
-\subsection{Storing an ID String with an Object}
-
-Occasionally, you may want to store a number of Objects and later
-retrieve them and use each for a different purpose. If the Objects are
-of the same class, you cannot use the \htmlref{Class}{Class} attribute to distinguish
-them when you read them back
-({\em{c.f.}}~\secref{ss:validatinginput}). Although relying on the
-order in which they are stored is a possible solution, this becomes
-complicated if some of the Objects are optional and may not always be
-present. It also makes extending your data format in future more
-difficult.
-
-To help with this, every AST \htmlref{Object}{Object} has an \htmlref{ID}{ID} attribute and an \htmlref{Ident}{Ident}
-attribute, both of which allows you, in effect, to attach a textual
-identification label to it. You simply set the ID or Ident attribute before
-writing the Object:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( object, "ID=Calibration" );
-nobj = astWrite( channel, object );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You can then test its value after you read the Object back:
-
-\begin{quote}
-\small
-\begin{verbatim}
-object = astRead( channel );
-if ( !strcmp( astGetC( object, "ID" ), "Calibration" ) ) {
-   <the Calibration Object has been read>
-} else {
-   <some other Object has been read>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The only difference between the ID and Ident attributes is that the ID
-attribute is unique to a particular Object and is lost if, for example,
-you make a copy of the Object. The Ident attrubute, on the other hand, is
-transferred to the new Object when a copy is made. Consequently, it is
-safest to set the value of the ID attribute immediately before you
-perform the write.
-
-\subsection{\label{ss:textualoutputformat}The Textual Output Format} 
-
-Let us now examine the format of the textual output produced by
-writing an \htmlref{Object}{Object} to a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}). To give a concrete example, suppose
-the Object in question is a \htmlref{SkyFrame}{SkyFrame}, written out as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-
-...
-
-nobj = astWrite( channel, skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output should then look like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame 	# Description of celestial coordinate system
-#   Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" 	# Title of coordinate system
-    Naxes = 2 	# Number of coordinate axes
-#   Domain = "SKY" 	# Coordinate system domain
-#   Lbl1 = "Right Ascension" 	# Label for axis 1
-#   Lbl2 = "Declination" 	# Label for axis 2
-#   Uni1 = "hh:mm:ss.s" 	# Units for axis 1
-#   Uni2 = "ddd:mm:ss" 	# Units for axis 2
-#   Dir1 = 0 	# Plot axis 1 in reverse direction (hint)
-    Ax1 = 	# Axis number 1
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
-    Ax2 = 	# Axis number 2
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
- IsA Frame 	# Coordinate system description
-    System = "FK4-NO-E" 	# Celestial coordinate system type
-    Epoch = 1958 	# Besselian epoch of observation
-#   Eqnox = 1950 	# Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You will notice that this output is designed both for a human reader,
-in that it is formatted, and also to be read back by a computer in
-order to reconstruct the SkyFrame. In fact, this is precisely the way
-that \htmlref{astShow}{astShow} works (\secref{ss:displayingobjects}), this function being
-roughly equivalent to the following use of a Channel:
-
-\begin{quote}
-\small
-\begin{verbatim}
-channel = astChannel( NULL, NULL, "" );
-(void) astWrite( channel, object );
-channel = astAnnul( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Some lines of the output start with a ``\verb?#?'' comment character,
-which turns the rest of the line into a comment. These lines will be
-ignored when read back in by \htmlref{astRead}{astRead}.  They typically contain default
-values, or values that can be derived in some way from the other data
-present, so that they do not actually need to be stored in order to
-reconstruct the original Object. They are provided purely for human
-information. The same comment character is also used to append
-explanatory comments to most output lines.
-
-It is not sensible to attempt a complete description of this output
-format because every class of Object is potentially different and each
-can define how its own data should be represented. However, there are
-some basic rules, which mean that the following common features will
-usually be present:
-
-\begin{enumerate}
-\item Each Object is delimited by matching ``Begin'' and ``End''
-lines, which also identify the class of Object involved.
-
-\item Within each Object description, data values are represented
-by a simple ``keyword~$=$~value'' syntax, with one value to a line.
-
-\item Lines beginning ``IsA'' are used to mark the divisions between
-data belonging to different levels in the class hierarchy
-(\appref{ss:classhierarchy}). Thus, ``IsA~\htmlref{Frame}{Frame}'' marks the end of data
-associated with the Frame class and the start of data associated with
-some derived class (a SkyFrame in the above example). ``IsA'' lines
-may be omitted if associated data values are absent and no confusion
-arises.
-
-\item Objects may contain other Objects as data. This is
-indicated by an absent value, with the description of the data
-Object following on subsequent lines.
-
-\item Indentation is used to clarify the overall structure.
-\end{enumerate}
-
-Beyond these general principles, the best guide to what a particular
-line of output represents will generally be the comment which
-accompanies it together with a general knowledge of the class of
-Object being described.
-
-\subsection{\label{ss:controllingchanneloutput}Controlling the Amount of Output}
-
-It is not always necessary for the output from \htmlref{astWrite}{astWrite}
-(\secref{ss:writingtoachannel}) to be human-readable, so a \htmlref{Channel}{Channel} has
-attributes that allow the amount of detail in the output to be
-controlled.
-
-The first of these is the integer attribute \htmlref{Full}{Full}, which controls the
-extent to which optional, commented out, output lines are produced. By
-default, Full is zero, and this results in the standard style of
-output (\secref{ss:textualoutputformat}) where default values that may
-be helpful to humans are included. To suppress these optional lines,
-Full should be set to $-$1. This is most conveniently done when the
-Channel is created, so that:
-
-\begin{quote}
-\small
-\begin{verbatim}
-channel = astChannel( NULL, NULL, "Full=-1" );
-(void) astWrite( channel, skyframe );
-channel = astAnnul( channel );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-would result in output containing only the essential information, such
-as:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame 	# Description of celestial coordinate system
-    Naxes = 2 	# Number of coordinate axes
-    Ax1 = 	# Axis number 1
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
-    Ax2 = 	# Axis number 2
-       Begin SkyAxis 	# Celestial coordinate axis
-       End SkyAxis
- IsA Frame 	# Coordinate system description
-    System = "FK4-NO-E" 	# Celestial coordinate system type
-    Epoch = 1958 	# Besselian epoch of observation
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-In contrast, setting Full to $+$1 will result in additional output
-lines which will reveal every last detail of the \htmlref{Object}{Object}'s
-construction. Often this will be rather more than you want, especially
-for more complex Objects, but it can sometimes help when debugging
-programs. This is how a \htmlref{SkyFrame}{SkyFrame} appears at this level of detail:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame 	# Description of celestial coordinate system
-#   RefCnt = 1 	# Count of active Object pointers
-#   Nobj = 1 	# Count of active Objects in same class
- IsA Object 	# Astrometry Object
-#   Nin = 2 	# Number of input coordinates
-#   Nout = 2 	# Number of output coordinates
-#   Invert = 0 	# Mapping not inverted
-#   Fwd = 1 	# Forward transformation defined
-#   Inv = 1 	# Inverse transformation defined
-#   Report = 0 	# Don't report coordinate transformations
- IsA Mapping 	# Mapping between coordinate systems
-#   Title = "FK4 Equatorial Coordinates, no E-terms, Mean Equinox B1950.0, Epoch B1958.0" 	# Title of coordinate system
-    Naxes = 2 	# Number of coordinate axes
-#   Domain = "SKY" 	# Coordinate system domain
-#   Lbl1 = "Right Ascension" 	# Label for axis 1
-#   Lbl2 = "Declination" 	# Label for axis 2
-#   Sym1 = "RA" 	# Symbol for axis 1
-#   Sym2 = "Dec" 	# Symbol for axis 2
-#   Uni1 = "hh:mm:ss.s" 	# Units for axis 1
-#   Uni2 = "ddd:mm:ss" 	# Units for axis 2
-#   Dig1 = 7 	# Individual precision for axis 1
-#   Dig2 = 7 	# Individual precision for axis 2
-#   Digits = 7 	# Default formatting precision
-#   Fmt1 = "hms.1" 	# Format specifier for axis 1
-#   Fmt2 = "dms" 	# Format specifier for axis 2
-#   Dir1 = 0 	# Plot axis 1 in reverse direction (hint)
-#   Dir2 = 1 	# Plot axis 2 in conventional direction (hint)
-#   Presrv = 0 	# Don't preserve target axes
-#   Permut = 1 	# Axes may be permuted to match
-#   MinAx = 2 	# Minimum number of axes to match
-#   MaxAx = 2 	# Maximum number of axes to match
-#   MchEnd = 0 	# Match initial target axes
-#   Prm1 = 1 	# Axis 1 not permuted
-#   Prm2 = 2 	# Axis 2 not permuted
-    Ax1 = 	# Axis number 1
-       Begin SkyAxis 	# Celestial coordinate axis
-#         RefCnt = 1 	# Count of active Object pointers
-#         Nobj = 2 	# Count of active Objects in same class
-       IsA Object 	# Astrometry Object
-#         Label = "Angle on Sky" 	# Axis Label
-#         Symbol = "delta" 	# Axis symbol
-#         Unit = "ddd:mm:ss" 	# Axis units
-#         Digits = 7 	# Default formatting precision
-#         Format = "dms" 	# Format specifier
-#         Dirn = 1 	# Plot in conventional direction
-       IsA Axis 	# Coordinate axis
-#         Format = "dms" 	# Format specifier
-#         IsLat = 0 	# Longitude axis (not latitude)
-#         AsTime = 0 	# Display values as angles (not times)
-       End SkyAxis
-    Ax2 = 	# Axis number 2
-       Begin SkyAxis 	# Celestial coordinate axis
-#         RefCnt = 1 	# Count of active Object pointers
-#         Nobj = 2 	# Count of active Objects in same class
-       IsA Object 	# Astrometry Object
-#         Label = "Angle on Sky" 	# Axis Label
-#         Symbol = "delta" 	# Axis symbol
-#         Unit = "ddd:mm:ss" 	# Axis units
-#         Digits = 7 	# Default formatting precision
-#         Format = "dms" 	# Format specifier
-#         Dirn = 1 	# Plot in conventional direction
-       IsA Axis 	# Coordinate axis
-#         Format = "dms" 	# Format specifier
-#         IsLat = 0 	# Longitude axis (not latitude)
-#         AsTime = 0 	# Display values as angles (not times)
-       End SkyAxis
- IsA Frame 	# Coordinate system description
-    System = "FK4-NO-E" 	# Celestial coordinate system type
-    Epoch = 1958 	# Besselian epoch of observation
-#   Eqnox = 1950 	# Besselian epoch of mean equinox
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:channelcommenting}Controlling Commenting}
-
-Another way of controlling output from a \htmlref{Channel}{Channel} is {\em{via}} the
-boolean (integer) \htmlref{Comment}{Comment} attribute, which controls whether comments
-are appended to describe the purpose of each value. Comment has the
-value 1 by default but, if set to zero, will suppress these
-comments. This is normally appropriate only if you wish to minimise
-the amount of output, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astSet( channel, "Full=-1, Comment=0" );
-nobj = astWrite( channel, skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-might result in the following more compact output:
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin SkyFrame
-    Naxes = 2
-    Ax1 =
-       Begin SkyAxis
-       End SkyAxis
-    Ax2 =
-       Begin SkyAxis
-       End SkyAxis
- IsA Frame
-    System = "FK4-NO-E"
-    Epoch = 1958
- End SkyFrame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{Editing Textual Output}
-
-The safest advice about editing the textual output from \htmlref{astWrite}{astWrite} (or
-\htmlref{astShow}{astShow}) is ``don't!''---unless you know what you are doing.
-
-Having given that warning, however, it is sometimes possible to make
-changes to the text, or even to write entire \htmlref{Object}{Object} descriptions from
-scratch, and to read the results back in to construct new
-Objects. Normally, simple changes to numerical values are safest, but
-be aware that this is a back door method of creating Objects, so
-you are on your own! There are a number of potential pitfalls. In
-particular:
-
-\begin{itemize}
-\item \htmlref{astRead}{astRead} is intended for retrieving data written by astWrite and
-not for reading data input by humans. As such, the data validation
-provided is very limited and is certainly not foolproof. This makes it
-quite easy to construct Objects that are internally inconsistent by
-this means. In contrast, the normal programming interface incorporates
-numerous checks designed to make it impossible to construct invalid
-Objects. You should not necessarily think you have found a bug if your
-changes to an Object's textual description fail to produce the results
-you expected!
-
-\item In many instances the names associated with values in textual
-output will correspond with Object attributes. Sometimes, however,
-these names may differ from the attribute name. This is mainly because
-of length restrictions imposed by other common external formats, such
-as FITS headers. Some of the names used do not correspond with
-attributes at all.
-
-\item It is safest to change single numerical or string values.
-Beware of changing the size or shape of Objects ({\em{e.g.}}\ the
-number of axes in a \htmlref{Frame}{Frame}). Often, these values must match others
-stored elsewhere within the Object and changing them in a haphazard
-fashion will not produce useful results.
-
-\item Be wary about un-commenting default values. Sometimes this will
-work, but often these values are derived from other Objects stored
-more deeply in the structure and the proper place to insert a new
-value is not where the default itself appears.
-\end{itemize}
-
-\subsection{\label{ss:mixingchanneltext}Mixing Objects with other Text}
-
-By default, when you use \htmlref{astRead}{astRead} to read from a basic \htmlref{Channel}{Channel}
-(\secref{ss:readingfromachannel}), it is assumed that you are reading a
-stream of text containing only AST Objects, which follow each other
-end-to-end. If any extraneous input data are encountered which do not
-appear to form part of the textual description of an \htmlref{Object}{Object}, then an
-error will result. In particular, the first input line must identify
-the start of an Object description, so you cannot start reading half
-way through an Object.
-
-Sometimes, however, you may want to store AST Object descriptions
-intermixed with other textual data. You can do this by setting the
-Channel's boolean (integer) \htmlref{Skip}{Skip} attribute to 1. This will cause every
-read to skip over extraneous data until the start of a new AST Object
-description, if any, is found. So long as your other data do not mimic
-the appearance of an AST Object description, the two sets of data can
-co-exist.
-
-For example, by setting Skip to 1, the following complete C program
-will read all the AST Objects whose descriptions appear in the source
-of this document, ignoring the other text. \htmlref{astShow}{astShow} is used to display
-those found:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-main() {
-   AstChannel *channel;
-   AstObject *object;
-
-   channel = astChannel( NULL, NULL, "Skip=1" );
-   while ( ( object = astRead( channel ) ) != AST__NULL ) {
-      astShow( object );
-      object = astAnnul( object );
-   }
-   channel = astAnnul( channel );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-\subsection{\label{ss:channelsource}Reading Objects from Files}
-
-Thus far, we have only considered the default behaviour of a \htmlref{Channel}{Channel}
-in reading and writing Objects through a program's standard input and
-output streams. We will now consider how to access Objects stored in
-files more directly.
-
-Because the AST library is designed to be used from more than one
-language, it has to be a little careful about reading and writing to
-files. This is due to the incompatibilities that often exist between
-the file I/O facilities provided by different languages.  Fortunately,
-this ties in well with the principle that AST should also be
-independent of any particular data storage system, which we mention
-again in \secref{ss:otherplaces}.
-
-What this means in practice is that you must provide some simple C
-functions that perform the actual transfer of data to and from files
-and similar external data stores. The functions you provide are
-supplied as the source and/or sink function arguments to \htmlref{astChannel}{astChannel}
-when you create a Channel (\secref{ss:creatingachannel}). An example is
-the best way to illustrate this.
-
-Consider the following simple function called Source. It reads a
-single line of text from a C input stream and returns a pointer to it,
-or NULL if there is no more input:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-#define LEN 200
-static FILE *input_stream;
-
-const char *Source( void ) {
-   static char buffer[ LEN + 2 ];
-   return fgets( buffer, LEN + 2, input_stream );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that the input stream is a static variable which we will also
-access from our main program. This might look something like this
-(omitting error checking for brevity):
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* Open the input file. */
-input_stream = fopen( "infile.ast", "r" );
-
-/* Create a Channel and read an Object from it. */
-channel = astChannel( Source, NULL, "" );
-object = astRead( channel );
-
-...
-
-/* Annul the Channel and close the file when done. */
-channel = astAnnul( channel );
-(void) fclose( input_stream );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we first open the required input file, saving the resulting FILE
-pointer. We then pass a pointer to our Source function as the first
-argument to astChannel when creating a new Channel. When we read
-an \htmlref{Object}{Object} from this Channel with \htmlref{astRead}{astRead}, the Source
-function will be called to obtain the textual data from the file, the
-end-of-file being detected when this function returns NULL.
-
-\subsection{\label{ss:channelsink}Writing Objects to Files}
-
-We can also write a Sink function, that writes a line of output text
-to a file, and use it in basically the same way as the Source function
-in the previous section (\secref{ss:channelsource}):
-
-\begin{quote}
-\small
-\begin{verbatim}
-static FILE *output_stream;
-
-void Sink( const char *line ) {
-   (void) fprintf( output_stream, "%s\n", line );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we must supply the final newline character ourselves.
-
-In this case, our main program would supply a pointer to this Sink
-function as the second argument to \htmlref{astChannel}{astChannel}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* Open the output file. */
-output_stream = fopen( "outfile.ast", "w" );
-
-/* Create a Channel and write an Object to it. */
-channel = astChannel( Source, Sink, "" );
-nobj = astWrite( channel, object );
-
-   ...
-
-/* Annul the Channel and close the file when done. */
-channel = astAnnul( channel );
-(void) fclose( output_stream );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we can specify a source and/or a sink function for the
-\htmlref{Channel}{Channel}, and that these may use either the same file, or different
-files according to whether we are reading or writing. AST has no
-knowledge of the underlying file system, nor of file positioning. It
-just reads and writes sequentially. If you wish, for example, to
-reposition a file at the beginning in between reads and writes, then
-this can be done directly (and completely independently of AST) using
-standard C functions.
-
-If an error occurs in your source or sink function, you can
-communicate this to the AST library by setting its error status to any
-error value using \htmlref{astSetStatus}{astSetStatus} (\secref{ss:errordetection}). This will
-immediately terminate the read or write operation.
-
-\subsection{\label{ss:otherplaces}Reading and Writing Objects to other Places}
-
-It should be obvious from the above (\secref{ss:channelsource} and
-\secref{ss:channelsink}) that a \htmlref{Channel}{Channel}'s source and sink functions
-provide a flexible means of intercepting textual data that describes
-AST Objects as it flows in and out of your program. In fact, you might
-like to regard a Channel simply as a filter for converting AST Objects
-to and from a stream of text which is then handled by your source and
-sink functions, where the real I/O occurs.
-
-This gives you the ability to store AST Objects in virtually any data
-system, so long as you can convert a stream of text into something
-that can be stored (it need no longer be text) and retrieve it
-again. There is generally no need to retain comments.  Other
-possibilities, such as inter-process and network communication, could
-also be implemented {\em{via}} source and sink functions in basically
-the same way.
-
-\cleardoublepage
-\section{\label{ss:nativefits}Storing AST Objects in FITS Headers (FitsChans)}
-
-\begin{latexonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-\htmlref{System}{System}
-(FITS). FITS\footnote{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems.  The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{latexonly}
-\begin{htmlonly}
-A FITS header is a sequence of 80-character strings, formatted
-according to particular rules defined by the Flexible Image Transport
-System (FITS).
-\htmladdnormallink{FITS}{http://fits.gsfc.nasa.gov/}
-is a widely-used standard for data interchange in astronomy and has
-also been adopted as a data processing format in some astronomical
-data reduction systems.  The individual 80-character strings in a FITS
-header are usually called {\em{cards}} or {\em{header cards}} (for
-entirely anachronistic reasons).
-\end{htmlonly}
-
-A sequence of FITS cards appears as a header at the start of every
-FITS data file, and sometimes also at other points within it, and is
-used to provide ancillary information which qualifies or describes the
-main array of data stored in the file. As such, FITS headers are prime
-territory for storing information about the coordinate systems
-associated with data held in FITS files.
-
-In this section, we will examine how to store information in FITS
-headers directly in the form of AST Objects---a process which is
-supported by a specialised class of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. Our
-discussion here will turn out to be a transitional step that
-emphasises the similarities between a FitsChan and a Channel
-(\secref{ss:channels}). At the same time, it will prepare us for the
-next section (\secref{ss:foreignfits}), where we will examine how to
-use a FitsChan to tackle some of the more difficult problems that FITS
-headers can present.
-
-\subsection{\label{ss:nativeencoding}The Native FITS Encoding}
-
-As it turns out, we are not the first to have thought of storing WCS
-information in FITS headers. In fact, the original FITS standard (1981
-vintage) defined a set of header keywords for this purpose which have
-been widely used, although they have proved too limited for many
-practical purposes.
-
-At the time of writing, a number of different ways of using FITS
-headers for storing WCS information are in use, most (although not
-all) based on the original standard. We will refer to these
-alternative ways of storing the information as FITS {\em{encodings}}
-but will defer a discussion of their advantages and limitations until
-the next section (\secref{ss:foreignfits}).
-
-Here, we will examine how to store AST Objects directly in FITS
-headers. In effect, this defines a new encoding, which we will term
-the {\em{native encoding.}} This is a special kind of encoding,
-because not only does it allow us to associate conventional
-WCS calibration information with FITS data, but it also allows any other
-information that can be expressed in terms of AST Objects to be stored
-as well.  In fact, the native encoding provides us with facilities
-roughly analogous to those of the \htmlref{Channel}{Channel}
-(\secref{ss:channels})---{\em{i.e.}}\ a lossless way of
-transferring AST Objects from program to program---but based on FITS
-headers instead of free-format text.
-
-\subsection{The FitsChan Model}
-
-I/O between AST Objects and FITS headers is supported by a specialised
-form of \htmlref{Channel}{Channel} called a \htmlref{FitsChan}{FitsChan}. A FitsChan contains a buffer which
-may hold any number, including zero, of FITS header cards. This buffer
-forms a workspace in which you can assemble FITS cards and manipulate
-them before writing them out to a FITS file.
-
-By default, when a FitsChan is first created, it contains no cards and
-there are four ways of inserting cards into it:
-
-\begin{enumerate}
-\item You may add cards yourself, one at a time, using \htmlref{astPutFits}{astPutFits}
-(\secref{ss:addingfitscards}).
-
-\item You may add cards yourself, supplying all cards concatenated into a
-single string, using \htmlref{astPutCards}{astPutCards}
-(\secref{ss:addingmulticards}).
-
-\item You may write an AST \htmlref{Object}{Object} to the FitsChan (using \htmlref{astWrite}{astWrite}),
-which will have the effect of creating new cards within the FitsChan
-which describe the Object (\secref{ss:writingnativefits}).
-
-\item You may specify a source function which reads data from some
-external store of FITS cards, just like the source associated with a
-basic Channel (\secref{ss:channelsource}). If you supply a source
-function, it will be called when the FitsChan is created in order to
-fill it with an initial set of cards (\secref{ss:fitssourceandsink}).
-\end{enumerate}
-
-There are also three ways of removing cards from a FitsChan:
-
-\begin{enumerate}
-\item You may delete cards yourself, one at a time, using \htmlref{astDelFits}{astDelFits}
-(\secref{ss:findingandchangingfits}).
-
-\item You may read an AST Object from the FitsChan (using \htmlref{astRead}{astRead}),
-which will have the effect of removing those cards from the FitsChan
-which describe the Object (\secref{ss:readingnativefits}).
-
-\item You may specify a sink function which writes data to some
-external store of FITS cards, just like the sink associated with a
-basic Channel (\secref{ss:channelsink}). If you supply a sink function,
-it will be called when the FitsChan is deleted in order to write out
-any FITS cards that remain in it (\secref{ss:fitssourceandsink}).
-\end{enumerate}
- 
-Note, in particular, that reading an AST Object from a FitsChan is
-{\em{destructive.}} That is, it deletes the FITS cards that describe the
-Object. The reason for this is explained in
-\secref{ss:destructiveread}.
-
-In addition to the above, you may also read individual cards from a
-FitsChan using the function \htmlref{astFindFits}{astFindFits} (which is not
-destructive). This is the main means of writing out FITS cards if you
-have not supplied a sink function.  astFindFits also provides a means
-of searching for particular FITS cards (by keyword, for example) and
-there are other facilities for overwriting cards when required
-(\secref{ss:findingandchangingfits}).
-
-\subsection{\label{ss:creatingafitschan}Creating a FitsChan}
-
-The \htmlref{FitsChan}{FitsChan} constructor function, \htmlref{astFitsChan}{astFitsChan}, is straightforward to
-use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-AstFitsChan *fitschan;
-
-...
-
-fitschan = astFitsChan( NULL, NULL, "Encoding=NATIVE" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have omitted any source or sink functions by supplying NULL
-pointers for the first two arguments.
-We have also initialised the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. This indicates that we will be using the native encoding
-(\secref{ss:nativeencoding}) to store and retrieve Objects. If this
-was left unspecified, the default would depend on the FitsChan's
-contents. An attempt is made to use whatever encoding appears to have
-been used previously. For an empty FitsChan, the default is NATIVE,
-but it does no harm to be sure.
-
-\subsection{\label{ss:addressingfitscards}Addressing Cards in a FitsChan}
-
-Because a \htmlref{FitsChan}{FitsChan} contains an ordered sequence of header cards, a
-mechanism is needed for addressing them. This allows you to specify
-where new cards are to be added, for example, or which card is to be
-deleted.
-
-This role is filled by the FitsChan's integer \htmlref{Card}{Card} attribute, which
-gives the index of the {\em{current card}} in the FitsChan.  You can
-nominate any card you like to be current, simply by setting a new
-value for the Card attribute, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int icard;
-
-...
-
-astSetI( fitschan, "Card", icard )
-\end{verbatim}
-\normalsize
-\end{quote}
-
-where ``icard'' contains the index of the card on which you wish to
-operate next.  Some functions will update the Card attribute as a
-means of advancing through the sequence of cards, when reading them
-for example, or to indicate which card matches a search criterion.
-
-The default value for Card is one, which is the index of the first
-card. This means that you can ``rewind'' a FitsChan to access its
-first card by clearing the Card attribute:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astClear( fitschan, "Card" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The total number of cards in a FitsChan is given by the integer \htmlref{Ncard}{Ncard}
-attribute. This is a read-only attribute whose value is automatically
-updated as you add or remove cards. It means you can address all the
-cards in sequence using a loop such as the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int ncard;
-
-...
-
-ncard = astGetI( fitschan, "Ncard" );
-for ( icard = 1; icard <= ncard; icard++ ) {
-   astSetI( fitschan, "Card", icard );
-   <access the current card>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-However, it is usually possible to write slightly tidier loops based
-on the \htmlref{astFindFits}{astFindFits} function described later
-(\secref{ss:extractingfitscards} and
-\secref{ss:findingandchangingfits}).
-
-If you set the Card attribute to a value larger than Ncard, the
-FitsChan is regarded as being positioned at its {\em{end-of-file.}} In
-this case there is no current card and an attempt to obtain a value
-for the Card attribute will always return the value Ncard~$+$~1. When
-a FitsChan is empty, it is always at the end-of-file.
- 
-\subsection{\label{ss:writingnativefits}Writing Native Objects to a FitsChan}
-
-Having created an empty \htmlref{FitsChan}{FitsChan} (\secref{ss:creatingafitschan}), you
-can write any AST \htmlref{Object}{Object} to it in the native encoding using the
-\htmlref{astWrite}{astWrite} function. Let us assume we are writing a
-\htmlref{SkyFrame}{SkyFrame},\footnote{More probably, you would want to write a \htmlref{FrameSet}{FrameSet},
-but for purposes of illustration a SkyFrame contains a more manageable
-amount of data.} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstSkyFrame *skyframe;
-int nobj;
-
-...
-
-nobj = astWrite( fitschan, skyframe );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Since we have selected the native encoding
-(\secref{ss:nativeencoding}), there are no restrictions on the class
-of Object we may write, so astWrite should always return a value of
-one, unless an error occurs. Unlike a basic \htmlref{Channel}{Channel}
-(\secref{ss:writingtoachannel}), this write operation will not produce
-any output from our program. The FITS headers produced are simply
-stored inside the FitsChan.
-
-After this write operation, the \htmlref{Ncard}{Ncard} attribute will be updated to
-reflect the number of new cards added to the FitsChan and the \htmlref{Card}{Card}
-attribute will point at the card immediately after the last one
-written. Since our FitsChan was initially empty, the Card attribute
-will, in this example, point at the end-of-file
-(\secref{ss:addressingfitscards}).
-
-The FITS standard imposes a limit of 68 characters on the length of
-strings which may be stored in a single header card. Sometimes, a
-description of an AST Object involves the use of strings which exceed
-this limit ({\em{e.g.}}\ a \htmlref{Frame}{Frame} title can be of arbitrary length). If
-this occurs, the long string will be split over two or more header cards.
-Each ``continuation'' card will have the keyword {\tt CONTINUE} in
-columns 1 to 8, and will contain a space in column 9 (instead of the
-usual equals sign). An ampersand (``{\tt \&}'') is appended to the end of
-each of the strings (except the last one) to indicate that the string is
-continued on the next card. 
-
-Note, this splitting of long strings over several cards only occurs when
-writing AST Objects to a FitsChan using the astWrite function and the
-{\em native} encoding. If a long string is stored in a FitsChan using
-(for instance) the \htmlref{astPutFits}{astPutFits} or \htmlref{astPutCards}{astPutCards} function, it will simply be truncated.
-
-
-\subsection{\label{ss:extractingfitscards}Extracting Individual Cards from a FitsChan}
-
-To examine the contents of the \htmlref{FitsChan}{FitsChan} after writing the \htmlref{SkyFrame}{SkyFrame}
-above (\secref{ss:writingnativefits}), we must write a simple loop to
-extract each card in turn and print it out. We must also remember to
-rewind the FitsChan first, {\em{e.g.}}\ using \htmlref{astClear}{astClear}. The following
-loop would do:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char card[ 81 ];
-
-...
-
-astClear( fitschan, "Card" );
-while ( astFindFits( fitschan, "%f", card, 1 ) ) (void) printf( "%s\n", card );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, we have used the \htmlref{astFindFits}{astFindFits} function to find a FITS card by
-keyword. It is given a keyword template of ``\%f'', which matches any
-FITS keyword, so it always finds the current card, which it
-returns. Its fourth argument is set to 1, to indicate that the \htmlref{Card}{Card}
-attribute should be incremented afterwards so that the following card
-will be found the next time around the loop. astFindFits returns zero
-when it reaches the end-of-file and this terminates the loop.
-
-If we were storing the FITS headers in an output FITS file instead of
-printing them out, we might use a loop like this but replace
-``printf'' with a suitable data storage operation. This would only be
-necessary if we had not provided a sink function for the FitsChan
-(\secref{ss:fitssourceandsink}).
-
-\subsection{The Native FitsChan Output Format}
-
-If we print out the FITS header cards describing the \htmlref{SkyFrame}{SkyFrame} we wrote
-earlier (\secref{ss:writingnativefits}), we should obtain something
-like the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-COMMENT AST ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AST
-COMMENT AST            Beginning of AST data for SkyFrame object             AST
-COMMENT AST ................................................................ AST
-BEGAST_A= 'SkyFrame'           / Description of celestial coordinate system     
-NAXES_A =                    2 / Number of coordinate axes                      
-AX1_A   = '        '           / Axis number 1                                  
-BEGAST_B= 'SkyAxis '           / Celestial coordinate axis                      
-ENDAST_A= 'SkyAxis '           / End of object definition                       
-AX2_A   = '        '           / Axis number 2                                  
-BEGAST_C= 'SkyAxis '           / Celestial coordinate axis                      
-ENDAST_B= 'SkyAxis '           / End of object definition                       
-ISA_A   = 'Frame   '           / Coordinate system description                  
-SYSTEM_A= 'FK4-NO-E'           / Celestial coordinate system type               
-EPOCH_A =               1958.0 / Besselian epoch of observation                 
-ENDAST_C= 'SkyFrame'           / End of object definition                       
-COMMENT AST ................................................................ AST
-COMMENT AST               End of AST data for SkyFrame object                AST
-COMMENT AST ---------------------------------------------------------------- AST
-\end{verbatim}
-\normalsize
-\end{quote}
-
-As you can see, this resembles the information that would be written
-to a basic \htmlref{Channel}{Channel} to describe the same SkyFrame
-(\secref{ss:textualoutputformat}), except that it has been formatted
-into 80-character header cards according to FITS conventions.
-
-There are also a number of other differences worth noting:
-
-\begin{enumerate}
-\item There is no unnecessary information about default values
-provided for the benefit of the human reader. This is because the \htmlref{Full}{Full}
-attribute for a \htmlref{FitsChan}{FitsChan} defaults to $-$1, thus suppressing this
-information ({\em{c.f.}}~\secref{ss:controllingchanneloutput}). You
-can restore the information if you wish by setting Full to 0 or $+$1,
-in which case additional COMMENT cards will be generated to hold it.
-
-\item The information is not indented, because FITS does not allow
-this. However, if you change the Full attribute to 0 or $+$1, comments
-will be included that are intended to help break up the sequence of
-headers and highlight its structure. This will probably only be of use
-if you are attempting to track down a problem by examining the FITS
-cards produced in detail.
-
-\item The FITS keywords which appear to the left of the ``$=$'' signs
-have additional characters (``\_A'', ``\_B'', {\em{etc.}}) appended to
-them. This is done in order to make each keyword unique.
-\end{enumerate}
-
-This last point is worth further comment and is necessary because the
-FITS standard only allows for certain keywords (such as COMMENT and
-HISTORY) to appear more than once. \htmlref{astWrite}{astWrite} therefore appends an
-arbitrary sequence of two characters to each new keyword it generates
-in order to ensure that it does not duplicate any already present in
-the FitsChan.
-
-The main risk from not following this convention is that some software
-might ignore (say) all but the last occurrence of a keyword before
-passing the FITS headers on. Such an event is unlikely, but would
-obviously destroy the information present, so astWrite enforces the
-uniqueness of the keywords it uses. The extra characters added are
-ignored when the information is read back.
-
-As with a basic Channel, you can also suppress the comments produced
-in a FitsChan by setting the boolean (integer) \htmlref{Comment}{Comment} attribute to
-zero (\secref{ss:channelcommenting}). However, FITS headers are
-traditionally generously commented, so this is not recommended.
-
-\subsection{\label{ss:addingfitscards}Adding Individual Cards to a FitsChan}
-
-To insert individual cards into a \htmlref{FitsChan}{FitsChan}, prior to reading them back
-as Objects for example, you should use the \htmlref{astPutFits}{astPutFits} function. You
-can insert a card in front of the current one as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astPutFits( fitschan, card, 0 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-where the third argument of zero indicates that the current card
-should not be overwritten. Note that facilities are not provided by
-AST for formatting the card contents.
-
-After inserting a card, the FitsChan's \htmlref{Card}{Card} attribute points at the
-original Card, or at the end-of-file if the FitsChan was originally
-empty. Entering a sequence of cards is therefore straightforward. If
-``cards'' is an array of pointers to strings containing FITS header
-cards and ``ncards'' is the number of cards, then a loop such as the
-following will insert the cards in sequence into a FitsChan:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define MAXCARD 100
-char *cards[ MAXCARD ];
-int ncard;
-
-...
-
-for ( icard = 0; icard < ncard; icard++ ) astPutFits( fitschan, cards[ icard ], 0 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The string containing a card need not be null terminated if it is at
-least 80 characters long (we have not allocated space for the strings
-themselves in this brief example).
-
-Note that astPutFits enforces the validity of a FitsChan by rejecting
-any cards which do not adhere to the FITS standard. If any such cards
-are detected, an error will result.
-
-\subsection{\label{ss:addingmulticards}Adding Concatenated Cards to a FitsChan}
-
-If you have all your cards concatenated together into a single long string, 
-each occupying 80 characters (with no delimiters), you can insert them
-into a \htmlref{FitsChan}{FitsChan} in a single call using
-\htmlref{astPutCards}{astPutCards}.
-This call first empties the supplied FitsChan of any existing cards, then 
-inserts the new cards, and finally rewinds the FitsChan so that a
-subsequent call to 
-\htmlref{astRead}{astRead}
-will start reading from the first supplied card. The
-astPutCards function uses \htmlref{astPutFits}{astPutFits}
-internally to interpret and store each individual card, and so the
-caveats in \secref{ss:addingfitscards} should be read.
-
-For instance, if you are using the CFITSIO library for access to FITS
-files, you can use the CFITSIO fits\_hdr2str function to obtain a string suitable
-for passing to astPutCards:
-
-\begin{quote}
-\small
-\begin{verbatim}
-
-
-if( !fits_hdr2str( fptr, 0, NULL, 0, &header, &nkeys, &status ) )
-   fitschan = astFitsChan( NULL, NULL, "" );
-   astPutCards( fitschan, header );
-   header = free( header );
-   wcsinfo = astRead( fitschan );
-
-   ...
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-
-\subsection{\label{ss:readingnativefits}Reading Native Objects From a FitsChan}
-
-Once you have stored a FITS header description of an \htmlref{Object}{Object} in a
-\htmlref{FitsChan}{FitsChan} using the native encoding (\secref{ss:writingnativefits}),
-you can read it back using \htmlref{astRead}{astRead} in much the same way as with a
-basic \htmlref{Channel}{Channel} (\secref{ss:readingfromachannel}). Similar comments
-about validating the Object you read also apply
-(\secref{ss:validatinginput}).  If you have just written to the
-FitsChan, you must remember to rewind it first:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstObject *object;
-
-...
-
-astClear( fitschan, "Card" );
-object = astRead( fitschan );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-An important feature of a FitsChan is that read operations are
-destructive. This means that if an Object description is found, it
-will be consumed by astRead which will remove all the cards involved,
-including associated COMMENT cards, from the FitsChan. Thus, if you
-write an Object to a FitsChan, rewind, and read the same Object back,
-you should end up with the original FitsChan contents.  If you need to
-circumvent this behaviour for any reason, it is a simple matter to
-make a copy of a FitsChan using \htmlref{astCopy}{astCopy}
-(\secref{ss:copyingobjects}). If you then read from the copy, the
-original FitsChan will remain untouched.
-
-After a read completes, the FitsChan's \htmlref{Card}{Card} attribute identifies the
-card immediately following the last card read, or the end-of-file of
-there are no more cards.
-
-Since the {\em native} encoding is being used, any long strings involved
-in the object description will have been split into two or more adjacent
-contuation cards when the Object was stored in the header using function
-\htmlref{astWrite}{astWrite}. The astRead function reverses this process by concatenating any
-such adjacent continuation cards to re-create the original long string.
-
-
-\subsection{Saving and Restoring Multiple Objects in a FitsChan}
-
-When using the native FITS encoding, multiple Objects may be stored
-and all I/O operations are sequential.  This means that you can simply
-write a sequence of Objects to a \htmlref{FitsChan}{FitsChan}. After each write operation,
-the \htmlref{Card}{Card} attribute will be updated so that the next write appends the
-next \htmlref{Object}{Object} description to the previous one.
-
-If you then rewind the FitsChan, you can read the Objects back in the
-original order. Reading them back will, of course, remove their
-descriptions from the FitsChan (\secref{ss:readingnativefits}) but the
-behaviour of the Card attribute is such that successive reads will
-simply return each Object in sequence.
-
-The only thing that may require care, given that a FitsChan can always
-be addressed randomly by setting its Card attribute, is to avoid
-writing one Object on top of another. For obvious reasons, the Object
-descriptions in a FitsChan must remain separate if they are to make
-sense when read back.
-
-\subsection{Mixing Native Objects with Other FITS Cards}
-
-Of course, any real FITS header will contain other information besides
-AST Objects, if only the mandatory FITS cards that must accompany all
-FITS data. When FITS headers are read in from a real dataset,
-therefore, any native AST \htmlref{Object}{Object} descriptions will be inter-mixed with
-many other cards.
-
-Because this is the normal state of affairs, the boolean (integer)
-\htmlref{Skip}{Skip} attribute for a \htmlref{FitsChan}{FitsChan} defaults to one. This means that when
-you read an Object From a FitsChan, any irrelevant cards will simply
-be skipped over until the start of the next Object description, if
-any, is found. If you start reading part way through an Object
-description, no error will result. The remainder of the description
-will simply be skipped.
-
-Setting Skip to zero will change this behaviour to resemble that of a
-basic \htmlref{Channel}{Channel} (\secref{ss:mixingchanneltext}), where extraneous data
-are not permitted by default, but this will probably rarely be useful.
-
-\subsection{\label{ss:findingandchangingfits}Finding and Changing Cards in a FitsChan}
-
-You can search for, and retrieve, particular cards in a \htmlref{FitsChan}{FitsChan} by
-keyword, using the function \htmlref{astFindFits}{astFindFits}. This performs a search,
-starting at the current card, until it finds a card whose keyword
-matches the template you supply, or the end-of-file is reached.
-
-If a suitable card is found, astFindFits optionally returns the card's
-contents and then sets the FitsChan's \htmlref{Card}{Card} attribute either to
-identify the card found, or the one following it. The way you want the
-Card attribute to be set is indicated by the final boolean (int)
-argument to astFindFits. A value of one is returned to indicate
-success.  If a suitable card cannot be found, astFindFits returns a
-value of zero to indicate failure and sets the FitsChan's Card
-attribute to the end-of-file.
-
-Requesting that the Card attribute be set to indicate the card that
-astFindFits finds is useful if you want to replace that card with a
-new one, as in this example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-char newcard[ 81 ];
-
-...
-
-(void) astFindFits( fitschan, "AIRMASS", NULL, 0 );
-astPutFits( fitschan, newcard, 1 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, astFindFits is used to search for a card with the keyword
-AIRMASS, with a NULL pointer being given to indicate that we do not
-want the card's contents returned. If the card is found, \htmlref{astPutFits}{astPutFits}
-then overwrites it with a new card.  Otherwise, the Card attribute
-ends up pointing at the end-of-file and the new card is simply
-appended to the end of the FitsChan.
-
-A similar approach can be used to delete selected cards from a
-FitsChan using \htmlref{astDelFits}{astDelFits}, which deletes the current card:
-
-\begin{quote}
-\small
-\begin{verbatim}
-if ( astFindFits( fitschan, "BSCALE", NULL, 0 ) ) astDelFits( fitschan );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This deletes the first card, if any, with the BSCALE keyword.
-
-Requesting that astFindFits increments the Card attribute to identify
-the card following the one found is more useful when writing loops.
-For example, the following loop extracts each card whose keyword
-matches the template ``CD\%6d'' (that is, ``CD'' followed by six
-decimal digits):
-
-\begin{quote}
-\small
-\begin{verbatim}
-while ( astFindFits( fitschan, "CD%6d", card, 1 ) {
-   <process the card's contents>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-For further details of keyword templates, see the description of
-astFindFits in \appref{ss:functiondescriptions}.
-
-\subsection{\label{ss:fitssourceandsink}Source and Sink Functions for FitsChans}
-
-The use of source and sink functions with a \htmlref{FitsChan}{FitsChan} is optional. This
-is because you can always arrange to explicitly fill a FitsChan with
-FITS cards (\secref{ss:addingfitscards} and \secref{ss:addingmulticards}) 
-and you can also extract any
-cards that remain and write them out yourself
-(\secref{ss:extractingfitscards}) before you delete the FitsChan.
-
-If you choose to use these functions, however, they behave in a very
-similar manner to those used by a \htmlref{Channel}{Channel} (\secref{ss:channelsource}
-and \secref{ss:channelsink}). You supply pointers to these functions,
-as arguments to the constructor function \htmlref{astFitsChan}{astFitsChan} when you create
-the FitsChan (\secref{ss:creatingafitschan}). The source function is
-invoked implicitly at this point to fill the FitsChan with FITS cards
-and the FitsChan is then rewound, so that the first card becomes
-current. The sink function is automatically invoked later, when the
-FitsChan is deleted, in order to write out any cards that remain in
-it.
-
-The only real difference between the source and sink functions for a
-FitsChan and a basic Channel is that FITS cards are limited in length
-to 80~characters, so the choice of buffer size is simplified.  The
-``Source'' and ``Sink'' functions in \secref{ss:channelsource} and
-\secref{ss:channelsink} could therefore be used to access FITS headers
-stored in text files simply by changing LEN to be 80.  If you were not
-accessing a text file, however, appropriate changes to the I/O
-statements would be needed since the separating newline characters
-would be absent. The details obviously depend on the format of the
-file you are handling, which need not necessarily be a true FITS file.
-
-
-\cleardoublepage
-\section{\label{ss:foreignfits}Using Foreign FITS Encodings}
-
-We saw in the previous section (\secref{ss:nativefits}) how to store
-and retrieve any kind of AST \htmlref{Object}{Object} in a FITS header by using a
-\htmlref{FitsChan}{FitsChan}. To achieve this, we set the FitsChan's \htmlref{Encoding}{Encoding} attribute to
-NATIVE. However, the Objects we wrote could then only be read back by
-other programs that use AST.
-
-In practice, we will also encounter FITS headers containing WCS
-information written by other software systems.  We will probably also
-need to write FITS headers in a format that can be understood by these
-systems. Indeed, this interchange of data is one of the main reasons
-for the existence of FITS, so in this section we will examine how to
-accommodate these requirements.
-
-\subsection{\label{ss:foreignencodings}The Foreign FITS Encodings}
-
-As mentioned previously (\secref{ss:nativeencoding}), there are a
-number of conventions currently in use for storing WCS information in
-FITS headers, which we call {\em{encodings.}} Here, we are concerned
-with those encodings defined by software systems other than AST, which
-we term {\em{foreign encodings.}}
-
-Currently, AST supports six foreign encodings, which may be selected
-by setting the \htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan} to one of the
-following (character string) values:
-
-\begin{quote}
-\begin{description}
-\item[DSS]\mbox{}\\
-This encoding stores WCS information using the convention developed at
-the Space Telescope Science Institute for the Digitised Sky Survey
-(DSS) astrometric plate calibrations.  DSS images which use this
-convention are widely available and it is understood by a number of
-important and well-established astronomy applications.
-
-However, the calibration model used (based on a polynomial fit) is not
-easily applicable to other types of data and creating the polynomial
-coefficients needed to calibrate your own images can prove
-difficult. For this reason, the DSS encoding is probably best viewed
-as a ``read-only'' format. It is possible, however, to read in WCS
-information using this encoding and then to write it back out again,
-so long as only minor changes have been made.
-
-\item[FITS-WCS]\mbox{}\\
-This encoding is very important because it is based on a new FITS standard 
-which should, for the first time, address the problem of celestial coordinate 
-systems in a proper manner, by considerably extending the original FITS 
-standard.
-
-The conventions used are described in a series of papers by
-E.W.\,Greisen, M.\,Calabretta, \emph{et. al.}, often referred to as the
-``FITS-WCS papers''. They are described at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. Now that the first two papers
-in this series have been agreed, this encoding should be understood by any 
-FITS-WCS compliant software and it is likely to be adopted widely for FITS 
-data in future.  For details of the coverage of these conventions provided
-by the FitsChan class, see \appref{ss:fitswcscoverage}.
-
-\item[FITS-IRAF]\mbox{}\\
-This encoding is based on the conventions described in the document
-``World Coordinate Systems Representations Within the FITS Format'' by R.J.
-Hanisch and D.G. Wells, 1988.\footnote{Available by ftp from
-fits.cv.nrao.edu /fits/documents/wcs/wcs88.ps.Z} It is employed
-by the IRAF data analysis facility, so its use will facilitate data
-exchange with IRAF. This encoding is in effect a sub-set of the current
-FITS-WCS encoding.
-
-\item[FITS-PC]\mbox{}\\
-This encoding is based on a previous version of the proposed new FITS WCS
-standard which used {\tt PCjjjjiii} and {\tt CDELTj} keywords to describe
-axis rotation and scaling. Versions of AST prior to V1.5 used this scheme
-for the FITS-WCS encoding. As of V1.5, FITS-WCS uses {\tt CDi\_j}
-keywords instead.\footnote{There are many other differences between the
-previous and the current FITS-WCS encodings. The keywords to describe
-axis rotation and scaling is used purely as a label to identify the
-scheme.} The FITS-PC encoding is included in AST V1.5 only to allow
-FITS-WCS data created with previous versions to be read. It should not,
-in general, be used to create new data sets.
-
-\item[FITS-AIPS]\mbox{}\\
-This encoding is based on the conventions described in the document
-``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen (revised 9th
-September, 1994).\footnote{Available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z} It is currently employed by the AIPS
-data analysis facility, so its use will facilitate data exchange with
-AIPS. This encoding uses {\tt CROTAi} and {\tt CDELTi} keywords to
-describe axis rotation and scaling.
-
-\item[FITS-AIPS++]\mbox{}\\
-Encodes coordinate system information in FITS
-header cards using the conventions used by the AIPS++ project.
-This is an extension of FITS-AIPS which includes some of the
-features of FITS-PC and FITS-IRAF.
-\end{description}
-\end{quote}
-
-For more detail about the above encodings, see the description of the
-Encoding attribute in \appref{ss:attributedescriptions}. 
-
-\subsection{\label{ss:foreignfitslimitations}Limitations of Foreign Encodings}
-
-The foreign encodings available for storing WCS information in FITS
-headers have a number of limitations when compared with the native
-encoding of AST Objects (\secref{ss:nativefits}). The main ones are:
-
-\begin{enumerate}
-\item Only one class of AST \htmlref{Object}{Object}, the \htmlref{FrameSet}{FrameSet}, may be represented
-using a foreign FITS encoding. This should not come as a surprise,
-because the purpose of storing WCS information in FITS headers is to
-attach coordinate systems to an associated array of data. Since the
-FrameSet is the AST Object designed for the same purpose
-(\secref{ss:baseandcurrent}), there is a natural correspondence.
-
-The way in which a FrameSet is translated to and from the foreign
-encoding also follows from this correspondence. The FrameSet's base
-\htmlref{Frame}{Frame} identifies the data grid coordinates of the associated FITS
-data. These are the same as FITS pixel coordinates, in which the first
-pixel (in 2 dimensions) has coordinates (1,1) at its
-centre. Similarly, the current Frame of the FrameSet identifies the
-FITS world coordinate system associated with the data.
-
-\item You may store a representation of only a single FrameSet in any
-individual set of FITS header cards ({\em{i.e.}}\ in a single
-\htmlref{FitsChan}{FitsChan}) at one time. If you attempt to store more than one, you may
-over-write the previous one or generate an invalid representation of
-your WCS information.
-
-This is mainly a consequence of the use of fixed FITS keywords by
-foreign encodings and the fact that you cannot, in general, have
-multiple FITS cards with the same keyword.
-
-\item In general, it will not be possible to store every possible
-FrameSet that you might construct. Depending on the encoding, only
-certain FrameSets that conform to particular restrictions can be
-represented and, even then, some of their information may be lost. See
-the description of the \htmlref{Encoding}{Encoding} attribute in
-\appref{ss:attributedescriptions} for more details of these
-limitations.
-\end{enumerate}
-
-It should be understood that using foreign encodings to read and write
-information held in AST Objects is essentially a process of converting
-the data format. As such, it potentially suffers from the same
-problems faced by all such processes, {\em{i.e.}}\ differences between
-the AST data model and that of the foreign encoding may cause some
-information to be lost.  Because the AST model is extremely flexible,
-however, any data loss can largely be eliminated when reading.
-Instead, this effect manifests itself in the form of the above
-encoding-dependent restrictions on the kind of AST Objects which may
-be written.
-
-One of the aims of the AST library, of course, is to insulate you from
-the details of these foreign encodings and the restrictions they
-impose. We will see shortly, therefore, how AST provides a mechanism
-for determining whether your WCS information satisfies the necessary
-conditions and allows you to make an automatic choice of which
-encoding to use.
-
-\subsection{\label{ss:identifyingfitsencoding}Identifying Foreign Encodings on Input}
-
-Let us now examine the practicalities of extracting WCS information
-from a set of FITS header cards which have been written by some other
-software system. We will pretend that our program does not know which
-encoding has been used for the WCS information and must discover this
-for itself. In order to have a concrete example, however, we will use
-the following set of cards. These use the FITS-AIPS encoding and
-contain a typical mix of other FITS cards which are irrelevant to the
-WCS information in which we are interested:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE  =                    T / Written by IDL:  30-Jul-1997 05:35:42.00
-BITPIX  =                  -32 / Bits per pixel.
-NAXIS   =                    2 / Number of dimensions
-NAXIS1  =                  300 / Length of x axis.
-NAXIS2  =                  300 / Length of y axis.
-CTYPE1  = 'GLON-ZEA'           / X-axis type
-CTYPE2  = 'GLAT-ZEA'           / Y-axis type
-CRVAL1  =           -149.56866 / Reference pixel value
-CRVAL2  =           -19.758201 / Reference pixel value
-CRPIX1  =              150.500 / Reference pixel
-CRPIX2  =              150.500 / Reference pixel
-CDELT1  =             -1.20000 / Degrees/pixel
-CDELT2  =              1.20000 / Degrees/pixel
-CROTA1  =              0.00000 / Rotation in degrees.
-SURVEY  = 'COBE DIRBE'
-BUNITS  = 'MJy/sr  '           /
-ORIGIN  = 'CDAC    '           / Cosmology Data Analysis Center
-TELESCOP= 'COBE    '           / COsmic Background Explorer satellite
-INSTRUME= 'DIRBE   '           / COBE instrument [DIRBE, DMR, FIRAS]
-PIXRESOL=                    9 / Quad tree pixel resolution [6, 9]
-DATE    = '27/09/94'           / FITS file creation date (dd/mm/yy)
-DATE-MAP= '16/09/94'           / Date of original file creation (dd/mm/yy)
-COMMENT     COBE specific keywords
-DATE-BEG= '08/12/89'           / date of initial data represented (dd/mm/yy)
-DATE-END= '25/09/90'           / date of final data represented   (dd/mm/yy)
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The first step is to create a \htmlref{FitsChan}{FitsChan} and insert these cards into
-it. If ``cards'' is an array of pointers to character strings holding
-the header cards and ``ncards'' is the number of cards, this could be
-done as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-#define MAXCARD 100
-AstFitsChan *fitschan;
-char *cards[ MAXCARD ];
-int icard, ncard;
-
-...
-
-fitschan = astFitsChan( NULL, NULL, "" );
-for ( icard = 0; icard < ncard; icard++ ) astPutFits( fitschan, cards[ icard ], 0 );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that we have not initialised the \htmlref{Encoding}{Encoding} attribute of the
-FitsChan as we did in \secref{ss:creatingafitschan} when we wanted to
-use the native encoding. This is because we are pretending not to know
-which encoding to use and want AST to determine this for us. By
-leaving the Encoding attribute un-set, its default value will adjust
-to whichever encoding AST considers to be most appropriate, according
-to the FITS header cards present. For details of how this choice is
-made, see the description of the Encoding attribute in
-\appref{ss:attributedescriptions}.
-
-This approach has the obvious advantages of making our program simpler
-and more flexible and of freeing us from having to know about the
-different encodings available. As a bonus, it also means that the
-program will be able to read any new encodings that AST may support in
-future, without needing to be changed.
-
-At this point, we could enquire the default value of the Encoding
-attribute, which indicates which encoding AST intends to use, as
-follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-const char *encode;
-
-...
-
-
-encode = astGetC( fitschan, "Encoding" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The result of this enquiry would be the string ``FITS-AIPS''.  Note
-that we could also have set the FitsChan's Encoding attribute
-explicitly, such as when creating it:
-
-\begin{quote}
-\small
-\begin{verbatim}
-fitschan = astFitsChan( NULL, NULL, "Encoding=FITS-AIPS" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If we tried to read information using this encoding
-(\secref{ss:readingforeignfits}), but failed, we could then change the
-encoding and try again.  This would allow our program to take control
-of how the optimum choice of encoding is arrived at. However, it would
-also involve using explicit knowledge of the encodings available and
-this is best avoided if possible.
-
-\subsection{\label{ss:readingforeignfits}Reading Foreign WCS Information from a FITS Header}
-
-Having stored a set of FITS header cards in a \htmlref{FitsChan}{FitsChan} and determined
-how the WCS information is encoded
-(\secref{ss:identifyingfitsencoding}), the next step is to read an AST
-\htmlref{Object}{Object} from the FitsChan using \htmlref{astRead}{astRead}. We must also remember to
-rewind the FitsChan first, if necessary, such as by clearing its \htmlref{Card}{Card}
-attribute, which defaults to 1:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstObject *wcsinfo;
-
-...
-
-astClear( fitschan, "Card" );
-wcsinfo = astRead( fitschan );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If the pointer returned by astRead is not equal to AST\_\_NULL, then
-an Object has been read successfully. Otherwise, there was either no
-information to read or the choice of FITS encoding
-(\secref{ss:identifyingfitsencoding}) was inappropriate.
-
-At this point you might like to indulge in a little data validation
-along the lines described in \secref{ss:validatinginput}, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-if ( !strcmp( astGetC( wcsinfo, "Class" ), "FrameSet" ) ) {
-   <the Object is a FrameSet, so use it>
-} else {
-   <something unexpected was read>
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-If a foreign encoding has definitely been used, then the Object will
-automatically be a \htmlref{FrameSet}{FrameSet} (\secref{ss:foreignfitslimitations}), so
-this stage can be omitted. However, if the native encoding
-(\secref{ss:nativeencoding}) might have been employed, which is a
-possibility if you accept the FitsChan's default \htmlref{Encoding}{Encoding} value, then
-any class of Object might have been read and a quick check would be
-worthwhile.
-
-If you used \htmlref{astShow}{astShow} (\secref{ss:displayingobjects}) to examine the
-FrameSet which results from reading our example FITS header
-(\secref{ss:identifyingfitsencoding}), you would find that its base
-\htmlref{Frame}{Frame} describes the image's pixel coordinate system and that its
-current Frame is a \htmlref{SkyFrame}{SkyFrame} representing galactic coordinates. These
-two Frames are inter-related by a \htmlref{Mapping}{Mapping} (actually a \htmlref{CmpMap}{CmpMap}) which
-incorporates the effects of various rotations, scalings and a
-``zenithal equal area'' sky projection, so that each pixel of the FITS
-image is mapped on to a corresponding sky position in galactic
-coordinates.
-
-Because this FrameSet may be used both as a Mapping
-(\secref{ss:framesetasmapping}) and as a Frame
-(\secref{ss:framesetasframe}), it may be employed directly to perform
-many useful operations without any need to decompose it into its
-component parts. These include:
-
-\begin{itemize}
-\item Transforming data grid (FITS pixel) coordinates into galactic
-coordinates and {\em{vice versa}} (\secref{ss:framesetasmapping}).
-
-\item Formatting coordinate values (either pixel or galactic
-coordinates) ready for display to a user
-(\secref{ss:formattingaxisvalues} and \secref{ss:normalising}).
-
-\item Enquiring about axis labels (or other axis
-information---\secref{ss:frameattributes}) which might be used, for
-example, to label columns of coordinates in a table
-(\secref{ss:frameaxisattributes}).
-
-\item Aligning the image with another image from which a similar
-FrameSet has been obtained (\secref{ss:registeringimages}).
-
-\item Creating a \htmlref{Plot}{Plot} (\secref{ss:plots}), which can be used to overlay
-a variety of graphical information (including a coordinate
-grid---Figure~\ref{fig:gridplot}) on the displayed image.
-
-\item Generating a new FrameSet which reflects any geometrical
-processing you perform on the associated image data
-(\secref{ss:wcsprocessingexample}). This new FrameSet could then be
-written out as FITS headers to describe the modified image
-(\secref{ss:writingforeignfits}).
-\end{itemize}
-
-If the FrameSet contains other Frames (apart from the base and current
-Frames), then you would also have access to information about other
-coordinate systems associated with the image.
-
-\subsection{\label{ss:destructiveread}Removing WCS Information from FITS Headers---the Destructive Read}
-
-It is instructive at this point to examine the contents of a \htmlref{FitsChan}{FitsChan}
-after we have read a \htmlref{FrameSet}{FrameSet} from it
-(\secref{ss:readingforeignfits}). The following would rewind our
-FitsChan and display its contents:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include <stdio.h>
-char card[ 81 ];
-
-...
-
-astClear( fitschan, "Card" );
-while ( astFindFits( fitschan, "%f", card, 1 ) ) (void) printf( "%s\n", card );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The output, if we started with the example FITS header in
-\secref{ss:identifyingfitsencoding}, might look like this:
-
-\begin{quote}
-\small
-\begin{verbatim}
-SIMPLE  =                    T /  Written by IDL:  30-Jul-1997 05:35:42.00      
-BITPIX  =                  -32 /  Bits per pixel.                               
-NAXIS   =                    2 /  Number of dimensions                          
-NAXIS1  =                  300 /  Length of x axis.                             
-NAXIS2  =                  300 /  Length of y axis.                             
-SURVEY  = 'COBE DIRBE'                                                          
-BUNITS  = 'MJy/sr  '                                                            
-ORIGIN  = 'CDAC    '           /  Cosmology Data Analysis Center                
-TELESCOP= 'COBE    '           /  COsmic Background Explorer satellite          
-INSTRUME= 'DIRBE   '           /  COBE instrument [DIRBE, DMR, FIRAS]           
-PIXRESOL=                    9 /  Quad tree pixel resolution [6, 9]             
-DATE    = '27/09/94'           /  FITS file creation date (dd/mm/yy)            
-DATE-MAP= '16/09/94'           /  Date of original file creation (dd/mm/yy)     
-COMMENT     COBE specific keywords                                              
-DATE-BEG= '08/12/89'           /  date of initial data represented (dd/mm/yy)   
-DATE-END= '25/09/90'           /  date of final data represented   (dd/mm/yy)   
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Comparing this with the original, you can see that all the FITS cards
-that represent WCS information have been removed. They have
-effectively been ``sucked out'' of the FitsChan by the destructive
-read that \htmlref{astRead}{astRead} performs and converted into an equivalent
-FrameSet. AST remembers where they were stored, however, so that if we
-later write WCS information back into the FitsChan
-(\secref{ss:writingforeignfits}) they will, as far as possible, go
-back into their original locations. This helps to preserve the overall
-layout of the FITS header.
-
-You can now see why astRead performs destructive reads. It is a
-mechanism for removing WCS information from a FITS header while
-insulating you, as a programmer, from the details of the encoding
-being used. It means you can ensure that all relevant header cards
-have been removed, giving you a clean slate, without having to know
-which FITS keywords any particular encoding uses.
-
-Clearing this WCS information out of a FITS header is particularly
-important when considering how to write new WCS information back after
-processing (\secref{ss:writingforeignfits}). If any relevant FITS
-cards are left over from the input dataset and find their way into the
-new processed header, they could interfere with the new information
-being written.\footnote{This can happen if a particular keyword is
-present in the input header but is not used in the output header
-(whether particular keywords are used can depend on the WCS
-information being stored). In such a case, the original value would
-not be over-written by a new output value, so would remain erroneously
-present.} The destructive read mechanism ensures that this doesn't
-happen.
-
-\subsection{\label{ss:propagatingwcsinformation}Propagating WCS Information through Data Processing Steps}
-
-One of the purposes of AST is to make it feasible to propagate WCS
-information through successive stages of data processing, so that it
-remains consistent with the associated image data. As far as possible,
-this should happen regardless of the FITS encoding used to store the
-original WCS information.
-
-If the data processing being performed does not change the
-relationship between image pixel and world coordinates (whatever these
-may be), then propagation of the WCS information is
-straightforward. You can simply copy the FITS header from input to
-output.
-
-If this relationship changes, however, then the WCS information must
-be processed alongside the image data and a new FITS header generated
-to represent it. In this case, the sequence of operations within your
-program would probably be as follows:
-
-\begin{enumerate}
-\item Read the image data and associated FITS header from the input
-dataset, putting the header cards into a \htmlref{FitsChan}{FitsChan}
-(\secref{ss:identifyingfitsencoding}).
-
-\item Read an AST \htmlref{Object}{Object}, a \htmlref{FrameSet}{FrameSet}, from the FitsChan (typically
-using a foreign FITS encoding---\secref{ss:readingforeignfits}).
-
-\item Process the image data and modify the FrameSet accordingly
-({\em{e.g.}}~\secref{ss:wcsprocessingexample}).
-
-\item Write the FrameSet back into the FitsChan
-(\secref{ss:writingforeignfits}).
-
-\item Perform any other modification of FITS header cards your program
-may require.
-
-\item Write the FitsChan contents ({\em{i.e.}}\ processed header
-cards) and image data to the output dataset.
-\end{enumerate}
-
-In stage (2), the original WCS information will be removed from the
-FitsChan by a destructive read. Later, in stage (4), new WCS
-information is written to replace it. This is the process which we
-consider next (\secref{ss:writingforeignfits}).
-
-\subsection{\label{ss:writingforeignfits}Writing Foreign WCS Information to a FITS Header}
-
-Before we can write processed WCS information held in a \htmlref{FrameSet}{FrameSet} back
-into a \htmlref{FitsChan}{FitsChan} in preparation for output, we must select the FITS
-encoding to use.  Unfortunately, we cannot simply depend on the
-default value of the \htmlref{Encoding}{Encoding} attribute, as we did when reading the
-input information (\secref{ss:identifyingfitsencoding}), because the
-destructive action of reading the WCS data
-(\secref{ss:destructiveread}) will have altered the FitsChan's
-contents. This, in turn, will have changed the choice of default
-encoding, probably causing it to revert to NATIVE.
-
-We will return to the question of the optimum choice of encoding
-below.  For now, let's assume that we want to use the same encoding
-for output as we used for input. Since we enquired what that was
-before we read the input WCS data from the FitsChan
-(\secref{ss:identifyingfitsencoding}), we can now set that value
-explicitly. We can also set the FitsChan's \htmlref{Card}{Card} attribute back to 1 at
-the same time (because the write will fail if the FitsChan is not
-rewound). \htmlref{astWrite}{astWrite} can then be used to write the output WCS
-information into the FitsChan:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int nobj;
-
-...
-
-astSet( fitschan, "Card=1, Encoding=%s", encode );
-nobj = astWrite( fitschan, wcsinfo );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The value returned by astWrite (assigned to ``nobj'') indicates how
-many Objects were written. This will either be 1 or zero. A value of
-zero is used to indicate that the information could not be encoded in
-the form you requested. If this happens, nothing will have been
-written.
-
-If your choice of encoding proves inadequate, the probable reason is
-that the changes you have made to the FrameSet have caused it to
-depart from the data model which the encoding assumes.  AST knows
-about the data model used by each encoding and will attempt to
-simplify the FrameSet you provide so as to fit into that model, thus
-relieving you of the need to understand the details and limitations of
-each encoding yourself. When this attempt fails, however, you must
-consider what alternative encoding to use.
-
-Ideally, you would probably want to try a sequence of alternative
-encodings, using an approach such as the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
-/* 1. */
-astSet( fitschan, "Card=1, Encoding=FITS-IRAF" );
-if ( !astWrite( fitschan, wcsinfo ) ) {
-
-/* 2. */
-   astSetC( fitschan, "Encoding", encode );
-   if ( !astWrite( fitschan, wcsinfo ) ) {
-
-/* 3. */
-      astSet( fitschan, "Encoding=NATIVE" );
-      (void) astWrite( fitschan, wcsinfo );
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-That is:
-
-\begin{enumerate}
-\item Start by trying the FITS-WCS encoding, on the grounds that FITS
-should provide a universal interchange standard in which all WCS
-information should be expressed if possible. 
-
-\item If that fails, then try the original encoding used for the input
-WCS information, on the grounds that you are at least not making the
-information any harder for others to read than it originally was.
-
-\item If that also fails, then you are probably trying to store fairly
-complex information for which you need the native encoding. Only other
-AST programs will then be able to read this information, but these are
-probably the only programs that will be able to do anything sensible
-with it anyway.
-\end{enumerate}
-
-An alternative approach might be to encode the WCS information in several
-ways, since this gives the maximum chance that other software will be
-able to read it. This approach is only possible if there is no
-significant conflict between the FITS keywords used by the different
-encodings\footnote{In practice, this means you should avoid mixing
-FITS-IRAF, FITS-WCS, FITS-AIPS, FITS-AIPS++ and FITS-PC encodings since they share
-many keywords.}.  Adopting this approach would simply require multiple
-calls to astWrite, rewinding the FitsChan and changing its Encoding value
-before each one.
-
-Unfortunately, however, there is a drawback to duplicating WCS
-information in the FITS header in this way, because any program which
-modifies one version of this information and simply copies the
-remainder of the header will risk producing two inconsistent sets of
-information. This could obviously be confusing to subsequent
-software. Whether you consider this a worthwhile risk probably depends
-on the use to which you expect your data to be put.
-
-\cleardoublepage
-\section{\label{ss:xmlchan}Storing AST Objects as XML (XmlChan)}
-
-\begin{latexonly}
-XML\footnote{http://www.w3.org/XML/}
-\end{latexonly}
-\begin{htmlonly}
-\htmladdnormallink{XML}{http://www.w3.org/XML/}
-\end{htmlonly}
-is fast becoming the standard format for passing structured data around
-the internet, and much general purpose software has been written for
-tasks such as the parsing, editing, display and transformation of XML
-data. The \htmlref{XmlChan}{XmlChan} class (a specialised form of \htmlref{Channel}{Channel}) provides
-facilities for storing AST objects externally in the form of XML documents, 
-thus allowing such software to be used.
-
-The primary XML format used by the XmlChan class is a fairly close
-transliteration of the AST native format produced by the basic Channel
-class. Currently, there is no DTD or schema defining the structure of data 
-produced in this format by an XmlChan. The following is a native AST 
-representation of a simple 1-D \htmlref{Frame}{Frame} (including comments and with the \htmlref{Full}{Full} 
-attribute set to zero so that some default attribute values are included 
-as extra comments):
-
-\begin{quote}
-\small
-\begin{verbatim}
- Begin Frame    # Coordinate system description
-#   Title = "1-d coordinate system"     # Title of coordinate system
-    Naxes = 1   # Number of coordinate axes
-    Domain = "SCREEN"   # Coordinate system domain
-#   Lbl1 = "Axis 1"     # Label for axis 1
-#   Uni1 = "cm"         # Units for axis 1
-    Ax1 =       # Axis number 1
-       Begin Axis       # Coordinate axis
-          Unit = "cm"   # Axis units
-       End Axis
- End Frame
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The corresponding XmlChan output would look like:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/" 
-        desc="Coordinate system description">
-    <_attribute name="Title" quoted="true" value="1-d coordinate system"
-                desc="Title of coordinate system" default="true"/>
-    <_attribute name="Naxes" value="1" desc="Number of coordinate axes"/>
-    <_attribute name="Domain" quoted="true" value="SCREEN"
-                desc="Coordinate system domain"/>
-    <_attribute name="Lbl1" quoted="true" value="Axis 1" 
-                desc="Label for axis 1" default="true"/>
-    <_attribute name="Uni1" quoted="true" value="cm" 
-                desc="Units for axis 1" default="true"/>
-    <Axis label="Ax1" desc="Coordinate axis">
-       <!--Axis number 1-->
-       <_attribute name="Unit" quoted="true" value="cm" desc="Axis units"/>
-    </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-Notes:
-
-\begin{enumerate}
-\item The AST class name is used as the name for an XML element which contain 
-a description of an AST object.
-
-\item AST attributes are described by XML elements with the name
-``\_attribute''. Unfortunately, the word ``attribute'' is also used by XML
-to refer to a ``name=value'' pair within an element start tag. So for
-instance, the ``\htmlref{Title}{Title}'' attribute of the AST Frame object is described
-within an XML element with name ``\_attribute'' in which the XML attribute
-``name'' has the value ``Title'', and the XML attribute ``value'' has the 
-value ``1-d coordinate system''. The moral is always to be clear clear 
-about the context (AST or XML) in which the word \emph{attribute} is being 
-used!
-
-\item The XML includes comments both as XML attributes with the name ``desc'', 
-and as separate comment tags.
-
-\item Elements which describe default values are identified by the fact
-that they have an XML attribute called ``default'' set to the value
-``true''. These elements are ignored when being read back into an XmlChan.
-
-\item The outer-most XML element of an AST object will set the default
-namespace to \verb+http://www.starlink.ac.uk/ast/xml/+ which will be
-inherited by all nested elements.
-
-\end{enumerate}
-
-
-The XmlChan class changes the default value for the \htmlref{Comment}{Comment} and Full
-attributes (inherited from the base Channel class) to zero and -1,
-resulting in terse output by default. With the default values for these
-attributes, the above XML is reduced to the following:
-
-\begin{quote}
-\small
-\begin{verbatim}
- <Frame xmlns="http://www.starlink.ac.uk/ast/xml/">
-    <_attribute name="Naxes" value="1"/>
-    <_attribute name="Domain" quoted="true" value="SCREEN"/>
-    <Axis label="Ax1">
-       <_attribute name="Unit" quoted="true" value="cm"/>
-    </Axis>
- </Frame>
-\end{verbatim}
-\normalsize
-\end{quote}
-
-
-The XmlChan class uses the \htmlref{Skip}{Skip} attributes very similarly to the Channel
-class. If Skip is zero (the default) then an error will be reported if the text
-supplied by the source function does not begin with an AST \htmlref{Object}{Object}. If
-Skip is non-zero, then initial text is skipped over without error until
-the start of an AST object is found. this allows an AST object to be
-located within a larger XML document.
-
-\subsection{Reading IVOA Space-Time-Coordinates XML (STC-X) Descriptions}
-The \htmlref{XmlChan}{XmlChan} class also provides support for reading (but not writing) XML 
-documents which use a restricted subset of an early draft (V1.20) of the 
-IVOA Space-Time-Coordinates XML (STC-X) system. The version of STC-X 
-finally adopted by the IVOA differs in several significant respects from 
-V1.20, and so the STC-X support currently provided by AST is mainly of 
-historical interest. Note, AST also supports the alternative ``STC-S'' 
-linear string description of the STC model (see \secref{ss:stcschans}). 
-
-STC-X V1.20 is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}{
-http://www.ivoa.net/Documents/WD/STC/STC-20050225.html}, and the current
-version is documented at \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-X.html}{
-http://www.ivoa.net/Documents/latest/STC-X.html}.
-
-When an STC-X document is read using an XmlChan, the read operation
-produces an AST \htmlref{Object}{Object} of the \htmlref{Stc}{Stc} class, which is itself a subclass of
-\htmlref{Region}{Region}. Specifically, each such Object will be an instance of
-\htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} or
-\htmlref{StcObsDataLocation}{StcObsDataLocation}. See the description of the XmlChan class and the
-\htmlref{XmlFormat}{XmlFormat} attribute for further details.
-
-\cleardoublepage
-\section{\label{ss:stcschans}Reading and writing STC-S descriptions (StcsChans)}
-
-The \htmlref{StcsChan}{StcsChan} class provides facilities for reading and writing
-IVOA ``STC-S'' descriptions. STC-S (see \htmladdnormallink{
-http://www.ivoa.net/Documents/latest/STC-S.html}{
-http://www.ivoa.net/Documents/latest/STC-S.html}) is a linear string
-syntax that allows simple specification of the STC metadata describing a
-region in an astronomical coordinate system. AST supports a
-subset of the STC-S specification, allowing an STC-S description of a 
-region within an AST-supported astronomical coordinate system to be converted 
-into an equivalent AST \htmlref{Region}{Region} object, and vice-versa. For further
-details, see the full description of the StcsChan class in 
-\appref{ss:classdescriptions}. 
-
-
-\cleardoublepage
-\section{\label{ss:intramaps}Creating Your Own Private Mappings (IntraMaps)}
-
-\subsection{The Need for Extensibility}
-
-However many \htmlref{Mapping}{Mapping} classes are provided by AST, sooner or later you
-will want to transform coordinates in some way that has not been
-foreseen. You might want to plot a graph in some novel curvilinear
-coordinate system (perhaps you already have a WCS system in your
-software and just want to use AST for its graphical capabilities).
-Alternatively, you might need to calibrate a complex dataset (like an
-objective prism plate) where each position must be converted to world
-coordinates with reference to calibration data under the control of an
-elaborate algorithm.
-
-In such cases, it is clear that the basic pre-formed components
-provided by AST for building Mappings are just not enough. What you
-need is access to a programming language. However, if you write your
-own software to transform coordinate values, then it must be made
-available in the form of an AST class (from which you can create
-Objects) before it can be used in conjunction with other AST
-facilities.
-
-At this point you might consider writing your own AST class, but this
-is not recommended. Not only would the internal conventions used by
-AST take some time to master, but you might also find yourself having
-to change your software whenever a new version of AST was
-released. Fortunately, there is a much easier route provided by the
-\htmlref{IntraMap}{IntraMap} class.
-
-\subsection{The IntraMap Model}
-
-To allow you to write your own Mappings, AST provides a special kind
-of \htmlref{Mapping}{Mapping} called an \htmlref{IntraMap}{IntraMap}. An IntraMap is a sort of ``wrapper''
-for a coordinate transformation function written in C. You write this
-function yourself and then register it with AST. This, in effect,
-creates a new class from which you can create Mappings
-({\em{i.e.}}\ IntraMaps) which will transform coordinates in whatever
-way your transformation function specifies.
-
-Because IntraMaps are Mappings, they may be used in the same way as
-any other Mapping. For instance, they may be combined in series or
-parallel with other Mappings using a \htmlref{CmpMap}{CmpMap} (\secref{ss:cmpmaps}),
-they may be inverted (\secref{ss:invertingmappings}), you may enquire
-about their attributes (\secref{ss:gettingattributes}), they may be
-inserted into FrameSets (\secref{ss:framesets}), {\em{etc.}} They do,
-however, have some important limitations of which you should be aware
-before we go on to consider how to create them.
-
-\subsection{\label{ss:intramaplimitations}Limitations of IntraMaps}
-
-By now, you might be wondering why any other kind of \htmlref{Mapping}{Mapping} is
-required at all. After all, why not simply write your own coordinate
-transformation functions in C, wrap them up in IntraMaps and do away
-with all the other Mapping classes in AST?
-
-The reason is not too hard to find. Any transformation function you
-write is created solely by you, so it is a private extension which
-does not form a permanent part of AST. If you use it to calibrate some
-data and then pass that data to someone else, who has only the
-standard version of AST, then they will not be able to interpret it.
-
-Thus, while an \htmlref{IntraMap}{IntraMap} is fine for use by you and your collaborators
-(who we assume have access to the same transformation functions), it
-does not address the need for universal data exchange like other AST
-Mappings do. This is where the ``Intra'' in the class name
-``IntraMap'' comes from, implying private or internal usage.
-
-For this reason, it is unwise to store IntraMaps in datasets, unless
-they will be used solely for communication between collaborating items
-of software which share conventions about their use.  A private
-database describing coordinate systems on a graphics device might be
-an example where IntraMaps would be suitable, because the data would
-probably never be accessed by anyone else's software. Restricting
-IntraMap usage to within a single program ({\em{i.e.}} never writing
-it out) is, of course, completely safe.
-
-If, by accident, an IntraMap should happen to escape as part of a
-dataset, then the unsuspecting recipient is likely to receive an error
-message when they attempt to read the data. However, AST will
-associate details of the IntraMap's transformation function and its
-author (if provided) with the data, so that the recipient can make an
-intelligent enquiry to obtain the necessary software if this proves
-essential.
-
-\subsection{\label{ss:transformationfunctions}Writing a Transformation Function}
-
-The first stage in creating an \htmlref{IntraMap}{IntraMap} is to write the coordinate
-transformation function. This should have a calling interface like the
-\htmlref{astTranP}{astTranP} function provided by AST ({\em{q.v.}}). Here is a simple
-example of a suitable transformation function which transforms
-coordinates by squaring them:
-\xlabel{SqrTran}
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-#include <math.h>
-
-void SqrTran( AstMapping *this, int npoint, int ncoord_in,
-              const double *ptr_in[], int forward, int ncoord_out,
-              double *ptr_out[] ) {
-   int point, coord;
-   double x;
-
-/* Forward transformation. */
-   if ( forward ) {
-      for ( point = 0; point < npoint; point++ ) {
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            x = ptr_in[ coord ][ point ];
-            ptr_out[ coord ][ point ] = ( x == AST__BAD ) ? AST__BAD : x * x;
-         }
-      }
-
-/* Inverse transformation. */
-   } else {
-      for ( point = 0; point < npoint; point++ ) {
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            x = ptr_in[ coord ][ point ];
-            ptr_out[ coord ][ point ] =
-               ( x < 0.0 || x == AST__BAD ) ? AST__BAD : sqrt( x );
-         }
-      }
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-As you can see, the function comes in two halves which implement the
-forward and inverse coordinate transformations. The number of points
-to be transformed (``npoint'') and the numbers of input and output
-coordinates per point (``ncoord\_in'' and ``ncoord\_out''---in this
-case both are assumed equal) are passed to the function. A pair of
-loops then accesses all the coordinate values.  Note that it is
-legitimate to omit one or other of the forward/inverse transformations
-and simply not to implement it, if it will not be required. It is also
-permissible to require that the numbers of input and output
-coordinates be fixed ({\em{e.g.}}\ at 2), or to write the function so
-that it can handle arbitrary dimensionality, as here.
-
-Before using an incoming coordinate, the function must first check
-that it is not set to the value AST\_\_BAD, which indicates missing
-data (\secref{ss:badcoordinates}). If it is, the same value is also
-assigned to any affected output coordinates. The value AST\_\_BAD is
-also generated if any coordinates cannot be transformed. In this
-example, this can happen with the inverse transformation if negative
-values are encountered, so that the square root cannot be taken.
-
-There are very few restrictions on what a coordinate transformation
-function may do. For example, it may freely perform I/O to access any
-external data needed, it may invoke other AST facilities (but beware
-of unwanted recursion), {\em{etc.}} Typically, you may also want to
-pass information to it {\em{via}}\ global variables. Remember,
-however, that whatever facilities the transformation function requires
-must be available in every program which uses it.
-
-Generally, it is not a good idea to retain context information within
-a transformation function. That is, it should transform each set of
-coordinates as a single point and retain no memory of the points it
-has transformed before. This is in order to conform with the AST model
-of a \htmlref{Mapping}{Mapping}.
-
-If an error occurs within a transformation function, it should use the
-\htmlref{astSetStatus}{astSetStatus} function (\secref{ss:errordetection}) to set the AST
-status to an error value before returning. This will alert AST to the
-error, causing it to abort the current operation. The error value
-AST\_\_ITFER is available for this purpose, but other values may also
-be used ({\em{e.g.}}\ if you wish to distinguish different types of
-error).
-
-\subsection{\label{ss:registeringintramaps}Registering a Transformation Function}
-
-Having written your coordinate transformation function, the next step
-is to register it with AST. Registration is performed using
-\htmlref{astIntraReg}{astIntraReg}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void SqrTran( AstMapping *, int, int, const double *[], int, int, double *[] );
-
-const char *author, *contact, *purpose;
-
-...
-
-purpose = "Square each coordinate value";
-author =  "R.F. Warren-Smith & D.S. Berry";
-contact = "http://www.starlink.rl.ac.uk/cgi-bin/htxserver/sun211.htx/?xref_SqrTran";
-
-astIntraReg( "SqrTran", 2, 2, SqrTran, 0, purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note that you should also provide a function prototype to describe the
-transformation function (the implementation of the function itself
-would suffice, of course).
-
-The first argument to astIntraReg is a name by which the
-transformation function will be known. This will be used when we come
-to create an \htmlref{IntraMap}{IntraMap} and is case sensitive. We recommend that you use
-the actual function name here and make this sufficiently unusual that
-it is unlikely to clash with any other functions in most people's
-software.
-
-The next two arguments specify the number of input and output
-coordinates which the transformation function will handle. These
-correspond with the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of the IntraMap we will
-create. Here, we have set them both to 2, which means that we will
-only be able to create IntraMaps with 2 input and 2 output coordinates
-(despite the fact that the transformation function can actually handle
-other dimensionalities). We will see later
-(\secref{ss:variableintramapcoordinates}) how to remove this
-restriction.
-
-The fourth argument should contain a set of flags which describe the
-transformation function in a little more detail. We will return to
-this shortly (\secref{ss:restrictedintramaps} \&
-\secref{ss:simplifyingintramaps}). For now, we supply a value of zero.
-
-The remaining arguments are character strings which document the
-transformation function, mainly for the benefit of anyone who is
-unfortunate enough to encounter a reference to it in their data which
-they cannot interpret. As explained above
-(\secref{ss:intramaplimitations}), you should try and avoid this, but
-accidents will happen, so you should always provide strings containing
-the following:
-
-\begin{enumerate}
-\item A short description of what the transformation function is for.
-\item The name of the author.
-\item Contact details, such as an e-mail or WWW address.
-\end{enumerate}
-
-The idea is that anyone finding an IntraMap in their data, but lacking
-the necessary transformation function, should be able to contact the
-author and make a sensible enquiry in order to obtain it. If you
-expect many enquiries, you may like to set up a World Wide Web page
-and use that instead (in the example above, we use the WWW address of
-the relevant part of this document).
-
-\subsection{Creating an IntraMap}
-
-Once a transformation function has been registered, creating an
-\htmlref{IntraMap}{IntraMap} from it is simple:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstIntraMap *intramap;
-
-...
-
-intramap = astIntraMap( "SqrTran", 2, 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-We simply use the \htmlref{astIntraMap}{astIntraMap} constructor function and pass it the
-name of the transformation function to use. This name is the same
-(case sensitive) one that we associated with the function when we
-registered it using \htmlref{astIntraReg}{astIntraReg} (\secref{ss:registeringintramaps}).
-
-You can, of course, register any number of transformation functions
-and select which one to use whenever you create an IntraMap. You can
-also create any number of independent IntraMaps using each
-transformation function. In this sense, each transformation function
-you register effectively creates a new ``sub-class'' of IntraMap, from
-which you can create Objects just like any other class. However, an
-error will occur if you attempt to use a transformation function that
-has not yet been registered.
-
-The second and third arguments to astIntraMap are the numbers of input
-and output coordinates. These define the \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes for
-the IntraMap that is created and they must match the corresponding
-numbers given when the transformation function was registered.
-
-The final argument is the usual attribute initialisation string. You
-may set attribute values for an IntraMap in exactly the same way as
-for any other \htmlref{Mapping}{Mapping} (\secref{ss:settingattributes}, and also see
-\secref{ss:intraflag}).
-
-\subsection{\label{ss:restrictedintramaps}Restricted Implementations of Transformation Functions}
-
-You may not always want to use both the forward and inverse
-transformations when you create an \htmlref{IntraMap}{IntraMap}, so it is possible to omit
-either from the underlying coordinate transformation
-function. Consider the following, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void Poly3Tran( AstMapping *this, int npoint, int ncoord_in,
-                const double *ptr_in[], int forward, int ncoord_out,
-                double *ptr_out[] ) {
-   double x;
-   int point;
-
-/* Forward transformation. */
-   for ( point = 0; point < npoint; point++ ) {
-      x = ptr_in[ 0 ][ point ];
-      ptr_out[ 0 ][ point ] = ( x == AST__BAD ) ? AST__BAD :
-         6.18 + x * ( 0.12 + x * ( -0.003 + x * 0.0000101 ) );
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This implements a 1-dimensional cubic polynomial transformation. Since
-this is somewhat awkward to invert, however, we have only implemented
-the forward transformation.  When registering the function, this is
-indicated via the ``flags'' argument to \htmlref{astIntraReg}{astIntraReg}, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void Poly3Tran( AstMapping *, int, int, const double *[], int, int, double *[] );
-
-...
-
-astIntraReg( "Poly3Tran", 1, 1, Poly3Tran, AST__NOINV,
-             purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the fifth argument has been set to the flag value AST\_\_NOINV
-to indicate the lack of an inverse. If the forward transformation were
-absent, we would use AST\_\_NOFOR instead. Flag values for this
-argument may be combined using a bitwise OR if necessary.
-
-\subsection{\label{ss:variableintramapcoordinates}Variable Numbers of Coordinates}
-
-In our earlier examples, we have used a fixed number of input and
-output coordinates when registering a coordinate transformation
-function. It is not necessary to impose this restriction, however, if
-the transformation function can cope with a variable number of
-coordinates (as with the example in
-\secref{ss:transformationfunctions}). We indicate the acceptability of
-a variable number when registering the transformation function by
-supplying the value AST\_\_ANY for the number of input and/or output
-coordinates, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astIntraReg( "SqrTran", AST__ANY, AST__ANY, SqrTran, 0,
-             purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The result is that an \htmlref{IntraMap}{IntraMap} may now be created with any number of
-input and output coordinates. For example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-AstIntraMap *intramap1, *intramap2;
-
-...
-
-intramap1 = astIntraMap( "SqrTran", 1, 1, "" );
-intramap2 = astIntraMap( "SqrTran", 3, 3, "Invert=1" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It is possible to fix either the number of input or output coordinates
-(by supplying an explicit number to \htmlref{astIntraReg}{astIntraReg}), but more subtle
-restrictions on the number of coordinates, such as requiring that \htmlref{Nin}{Nin}
-and \htmlref{Nout}{Nout} be equal, are not supported. This means that:
-
-\begin{quote}
-\small
-\begin{verbatim}
-intramap = astIntraMap( "SqrTran", 1, 2, "" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-will be accepted without error, although the transformation function
-cannot actually handle such a combination sensibly. If this is
-important, it would be worth adding a check within the transformation
-function itself, so that the error would be detected when it came to
-be used.
-
-\subsection{\label{ss:intraflag}Adapting a Transformation Function to Individual IntraMaps}
-
-In the examples given so far, our coordinate transformation functions
-have not made use of the ``this'' pointer passed to them (which
-identifies the \htmlref{IntraMap}{IntraMap} whose transformation we are implementing). In
-practice, this will often be the case. However, the presence of the
-``this'' pointer allows the transformation function to invoke any
-other AST function on the IntraMap, and this permits enquiries about
-its attributes. The transformation function's behaviour can therefore
-be modified according to any attribute values which are set. This
-turns out to be a useful thing to do, so each IntraMap has a special
-\htmlref{IntraFlag}{IntraFlag} attribute reserved for exactly this purpose.
-
-Consider, for instance, the case where the transformation function has
-access to several alternative sets of internally-stored data which it
-may apply to perform its transformation. Rather than implement many
-different versions of the transformation function, you may switch
-between them by setting a value for the IntraFlag attribute when you
-create an instance of an IntraMap, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-intramap1 = astIntraMap( "MyTran", 2, 2, "IntraFlag=A" );
-intramap2 = astIntraMap( "MyTran", 2, 2, "IntraFlag=B" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-The transformation function may then enquire the value of the IntraFlag
-attribute ({\em{e.g.}}\ using astGetC and passing it the ``this''
-pointer) and use whichever dataset is required for that particular
-IntraMap.
-
-This approach is particularly useful when the number of possible
-transformations is unbounded or not known in advance, in which case
-the IntraFlag attribute may be used to hold numerical values encoded
-as part of a character string (effectively using them as data for the
-IntraMap). It is also superior to the use of a global switch for
-communication ({\em{e.g.}}\ setting an index to select the ``current''
-data before using the IntraMap), because it continues to work when
-several IntraMaps are embedded within a more complex compound \htmlref{Mapping}{Mapping},
-when you may have no control over the order in which they are used.
-
-\subsection{\xlabel{MaxTran}\label{ss:simplifyingintramaps}Simplifying IntraMaps}
-
-A notable disadvantage of IntraMaps is that they are ``black boxes''
-as far as AST is concerned. This means that they have limited ability
-to participate in the simplification of compound Mappings performed,
-{\em{e.g.}}, by \htmlref{astSimplify}{astSimplify} (\secref{ss:simplifyingcmpmaps}), because
-AST cannot know how they interact with other Mappings. In reality, of
-course, they will often implement such specialised coordinate
-transformations that the simplification possibilities will be rather
-limited anyway.
-
-One important simplification, however, is the ability of a \htmlref{Mapping}{Mapping} to
-cancel with its own inverse to yield a unit Mapping (a \htmlref{UnitMap}{UnitMap}). This
-is important because Mappings are frequently used to relate a dataset
-to some external standard (a celestial coordinate system, for
-example). When inter-relating two similar datasets calibrated using
-the same standard, part of the Mapping often cancels, because it is
-applied first in one direction and then the other, effectively
-eliminating the reference to the standard. This is often a useful
-simplification and can lead to greater efficiency.
-
-Many transformations have this property of cancelling with their own
-inverse, but not necessarily all. Consider the following
-transformation function, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void MaxTran( AstMapping *this, int npoint, int ncoord_in,
-              const double *ptr_in[], int forward, int ncoord_out,
-              double *ptr_out[] ) {
-   double hi, x;
-   int coord, point;
-
-/* Forward transformation. */
-   if ( forward ) {
-      for ( point = 0; point < npoint; point++ ) {
-         hi = AST__BAD;
-         for ( coord = 0; coord < ncoord_in; coord++ ) {
-            x = ptr_in[ coord ][ point ];
-            if ( x != AST__BAD ) {
-               if ( x > hi || hi == AST__BAD ) hi = x;
-            }
-         }
-         ptr_out[ 0 ][ point ] = hi;
-      }
-
-/* Inverse transformation. */
-   } else {
-      for ( coord = 0; coord < ncoord_out; coord++ ) {
-         for ( point = 0; point < npoint; point++ ) {
-            ptr_out[ coord ][ point ] = ptr_in[ 0 ][ point ];
-         }
-      }      
-   }
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This function takes any number of input coordinates and returns a
-single output coordinate which is the maximum value of the input
-coordinates. Its inverse (actually a ``pseudo-inverse'') sets all the
-input coordinates to the value of the output
-coordinate.\footnote{Remember that ``ptr\_in'' identifies the original
-``output'' coordinates when applying the inverse transformation and
-``ptr\_out'' identifies the original ``input'' coordinates.}
-
-If this function is applied in the forward direction and then in the
-inverse direction, it does {\bf{not}} in general restore the original
-coordinate values. However, if applied in the inverse direction and
-then the forward direction, it does. Hence, replacing the sequence of
-operations with an equivalent UnitMap is possible in the latter case,
-but not in the former.
-
-To distinguish these possibilities, two flag values are provided for
-use with \htmlref{astIntraReg}{astIntraReg} to indicate what simplification (if any) is
-possible. For example, to register the above transformation function,
-we might use:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void MaxTran( AstMapping *, int, int, const double *[], int, int, double *[] );
-
-...
-
-astIntraReg( "MaxTran", AST__ANY, 1, MaxTran, AST__SIMPIF,
-             purpose, author, contact );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the flag value AST\_\_SIMPIF supplied for the fifth argument
-indicates that simplification is possible if the transformation is
-applied in the inverse direction followed by the forward direction. To
-indicate the complementary case, the flag AST\_\_SIMPFI would be used
-instead. If both simplifications are possible (as with the SqrTran
-function in \secref{ss:transformationfunctions}), then we would use
-the bitwise OR of both values.
-
-In practice, some judgement is usually necessary when deciding whether
-to allow simplification. For example, seen in one light our SqrTran
-function (\secref{ss:transformationfunctions}) does not cancel with
-its own inverse, because squaring a coordinate value and then taking
-its square root can change the original value, if this was
-negative. Therefore, replacing this combination with a UnitMap will
-change the behaviour of a compound Mapping and should not be
-allowed. Seen in another light, however, where the coordinates being
-processed are intrinsically all positive, it is a permissible and
-probably useful simplification.
-
-If such distinctions are ever important in practice, it is simple to
-register the same transformation function twice with different flag
-values (use a separate name for each) and then use whichever is
-appropriate when creating an \htmlref{IntraMap}{IntraMap}.
-
-\subsection{\label{ss:readingandwritingintramaps}Writing and Reading IntraMaps}
-
-It is most important to realise that when you write an \htmlref{IntraMap}{IntraMap} to a
-\htmlref{Channel}{Channel} (\secref{ss:writingtoachannel}), the transformation function
-which it uses is not stored with it. To do so is impossible, because
-the function has been compiled and loaded into memory ready for
-execution before AST gets to see it. However, AST does store the name
-associated with the transformation function and various details about
-the IntraMap itself.
-
-
-This means that any program attempting to read the IntraMap
-(\secref{ss:readingfromachannel}) cannot make use of it unless it also
-has independent access to the original transformation function. If it
-does not have access to this function, an error will occur at the
-point where the IntraMap is read and the associated error message will
-direct the user to the author of the transformation function for more
-information.
-
-However, if the necessary transformation function is available, and
-has been registered before the read operation takes place, then AST is
-able to re-create the original IntraMap and will do so. Registration
-of the transformation function must, of course, use the same name
-(and, in fact, be identical in most particulars) as was used in the
-original program which wrote the data.
-
-This means that a set of co-operating programs which all have access
-to the same set of transformation functions and register them in
-identical fashion (see \secref{ss:intramaplibrary} for how this can
-best be achieved) can freely exchange data that contain IntraMaps. The
-need to avoid exporting such data to unsuspecting third parties
-(\secref{ss:intramaplimitations}) must, however, be re-iterated.
-
-\subsection{\label{ss:intramaplibrary}Managing Transformation Functions in Libraries}
-
-If you are developing a large suite of data reduction software, you
-may have a need to use IntraMaps at various points within it. Very
-probably this will occur in unrelated modules which are compiled
-separately and then stored in a library. Since the transformation
-functions required must be registered before they can be used, this
-makes it difficult to decide where to perform this registration,
-especially since any particular data reduction program may use an
-arbitrary subset of the modules in your library.
-
-To assist with this problem, AST allows you to perform the same
-registration of a transformation function any number of times, so long
-as it is performed using an identical invocation of \htmlref{astIntraReg}{astIntraReg} on
-each occasion ({\em{i.e.}}\ all of its arguments must be
-identical). This means you do not have to keep track of whether a
-particular function has already been registered but could, in fact,
-register it on each occasion immediately before it is required
-(wherever that may be). In order that all registrations are identical,
-however, it is recommended that you group them all together into a
-single function, perhaps as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-void MyTrans( void ) {
-
-   ...
-
-   astIntraReg( "MaxTran", AST__ANY, 1, MaxTran, AST__SIMPIF,
-                purpose, author, contact );
-
-   ...
-
-   astIntraReg( "Poly3Tran", 1, 1, Poly3Tran, AST__NOINV,
-                purpose, author, contact );
-
-   ...
-
-   astIntraReg( "SqrTran", 2, 2, SqrTran, 0,
-                purpose, author, contact );
-}
-\end{verbatim}
-\normalsize
-\end{quote}
-
-You can then simply invoke this function wherever necessary. It is, in
-fact, particularly important to register all relevant transformation
-functions in this way before you attempt to read an \htmlref{Object}{Object} that might
-be (or contain) an \htmlref{IntraMap}{IntraMap}
-(\secref{ss:readingandwritingintramaps}). This is because you may not
-know in advance which of these transformation functions the IntraMap
-will use, so they must all be available in order to avoid an error.
-
-\cleardoublepage
-\section{\label{ss:plots}Producing Graphical Output (Plots)}
-
-Graphical output from AST is performed though an \htmlref{Object}{Object} called a \htmlref{Plot}{Plot},
-which is a specialised form of \htmlref{FrameSet}{FrameSet}. A Plot does not represent the
-graphical content itself, but is a route through which plotting
-operations, such as drawing lines and curves, are conveyed on to a
-plotting surface to appear as visible graphics.
-
-\subsection{The Plot Model}
-
-When a \htmlref{Plot}{Plot} is created, it is initialised by providing a \htmlref{FrameSet}{FrameSet} whose
-base \htmlref{Frame}{Frame} (as specified by its \htmlref{Base}{Base} attribute) is mapped linearly or
-logarithmically (as specified by the LogPlot attribues) on to a
-{\em{plotting area.}} This is a rectangular region in the graphical
-coordinate space of the underlying graphics system and becomes the new
-base Frame of the Plot. In effect, the Plot becomes attached to the
-plotting surface, in rather the same way that a basic FrameSet might be
-attached to (say) an image.
-
-The current Frame of the Plot (derived from the current Frame of the
-FrameSet supplied) is used to represent a {\em{physical coordinate
-system.}} This is the system in which plotting operations are
-performed by your program.  Every plotting operation is then
-transformed through the \htmlref{Mapping}{Mapping} which inter-relates the Plot's current
-and base Frames in order to appear on the plotting surface.
-
-An example may help here. Suppose we start with a FrameSet whose base
-Frame describes the pixel coordinates of an image and whose current
-Frame describes a celestial (equatorial) coordinate system. Let us
-assume that these two Frames are inter-related by a Mapping within the
-FrameSet which represents a particular sky projection.
-
-When a Plot is created from this FrameSet, we specify how the pixel
-coordinates (the base Frame) maps on to the plotting surface. This
-simply corresponds to telling the Plot where we have previously
-plotted the image data. If we now use the Plot to plot a line with
-latitude zero in our physical coordinate system, as given by the
-current Frame, this line would appear as a curve (the equator) on the
-plotting surface, correctly registered with the image.
-
-There are a number of plotting functions provided, which all work in a
-similar way. Plotting operations are transformed through the Mapping
-which the Plot represents before they appear on the plotting
-surface.\footnote{Like any FrameSet, a Plot can be used as a
-Mapping. In this case it is the inverse transformation which is used
-when plotting ({\em{i.e.}}\ that which transforms between the current
-and base Frames).}  It is possible to draw symbols, lines, axes,
-entire grids and more in this way.
-
-%\subsection{TBW---Creating a Plot}
-
-\subsection{Plotting Symbols}
-
-The simplest form of plotting is to draw symbols (termed
-{\em{markers}}) at a set of points. This is performed by \htmlref{astMark}{astMark},
-which is supplied with a set of physical coordinates at which to place
-the markers:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#include "ast.h"
-#define NCOORD 2
-#define NMARK 10
-double in[ NCOORD ][ NMARK ];
-int type;
-
-...
-
-astMark( plot, NMARK, NCOORD, NMARK, in, type );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, NMARK specifies how many markers to plot and NCOORD specifies
-how many coordinates are being supplied for each
-point.\footnote{Remember, the physical coordinate space need not
-necessarily be 2-dimensional, even if the plotting surface is.} The
-array ``in'' supplies the coordinates and the integer ``type''
-specifies which type of marker to plot.
-
-\subsection{\label{ss:plottinggeodesics}Plotting Geodesic Curves}
-
-There is no \htmlref{Plot}{Plot} routine to draw a straight line, because any straight
-line in physical coordinates can potentially turn into a curve in
-graphical coordinates. We therefore start by considering how to draw
-geodesic curves.  These are curves which trace the path of shortest
-distance between two points in physical coordinates
- and are the basic drawing element in a Plot. 
-
-In many instances, the geodesic will, in fact, be a straight line, but
-this depends on the Plot's current \htmlref{Frame}{Frame}. If this represents a
-celestial coordinate system, for instance, it will be a great circle
-(corresponding with the behaviour of the \htmlref{astDistance}{astDistance} function which
-defines the metric of the physical coordinate space).  The geodesic
-will, of course, be transformed into graphics coordinates before being
-plotted. A geodesic curve is plotted using \htmlref{astCurve}{astCurve} as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-double start[ NCOORD ], finish[ NCOORD ];
-
-...
-
-astCurve( plot, start, finish );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, ``start'' and ``finish'' are arrays containing the starting and
-finishing coordinates of the curve. The \htmlref{astOffset}{astOffset} and astDistance
-functions can often be useful for computing these
-(\secref{ss:distanceandoffset}).
-
-If you need to draw a series of curves end-to-end (when drawing a
-contour line, for example), then a more efficient alternative is to
-use \htmlref{astPolyCurve}{astPolyCurve}. This has the same effect as a sequence of
-invocations of astCurve, but allows you to supply a whole set of
-points at one time. astPolyCurve then joins them, in sequence, using
-geodesic curves:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define NPOINT 100
-double coords[ NCOORD ][ NPOINT ];
-
-...
-
-astPolyCurve( plot, NPOINT, NCOORD, NPOINT, coords );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, NPOINT specifies how many points are to be joined and NCOORD
-specifies how many coordinates are being supplied for each point.  The
-array ``coords'' supplies the coordinates of the points in the Plot's
-physical coordinate system.
-
-\subsection{Plotting Curves Parallel to Axes}
-
-As there is no \htmlref{Plot}{Plot} function to draw a ``straight line'', drawing axes
-and grid lines to represent coordinate systems requires a slightly
-different approach. The problem is that for some coordinate systems,
-these grid lines will not be geodesics, so \htmlref{astCurve}{astCurve} and \htmlref{astPolyCurve}{astPolyCurve}
-(\secref{ss:plottinggeodesics}) cannot easily be used (you would have
-to resort to approximating grid lines by many small elements). Lines
-of constant celestial latitude provide an example of this, with the
-exception of the equator which is a geodesic.
-
-The \htmlref{astGridLine}{astGridLine} function allows these curves to be drawn, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int axis;
-double length;
-
-...
-
-astGridLine( plot, axis, start, length );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, ``axis'' specifies which physical coordinate axis we wish to
-draw parallel to. The ``start'' array contains the coordinates of the
-start of the curve and ``length'' specifies the distance to draw along
-the axis in physical coordinate space.
-
-\subsection{\label{ss:plottinggeneralizedcurves}Plotting Generalized Curves}
-We have seen how geodesic curves and grid lines can be drawn. The \htmlref{Plot}{Plot}
-class includes another method,
-\htmlref{astGenCurve}{astGenCurve},
-which allows curves of {\em any} form to be drawn. The caller supplies a
-\htmlref{Mapping}{Mapping} which maps offset along the curve\footnote{normalized so that the
-start of the curve is at offset 0.0 and the end of the curve is at offset
-1.0 - offset need not be linearly related to distance.} into the
-corresponding position in the current \htmlref{Frame}{Frame} of the Plot.
-astGenCurve,
-then takes care of Mapping these positions into graphics coordinates. The
-choice of exactly which positions along the curve are to be used to
-define the curve is also made by
-astGenCurve,
-using an adaptive algorithm which concentrates points around areas where
-the curve is bending sharply or is discontinuous in graphics coordinates.
-
-The \htmlref{IntraMap}{IntraMap} class may be of particular use in this context since it allows 
-you to code your own Mappings to do any transformation you choose.
-
-
-\subsection{\label{ss:clipping}Clipping}
-
-Like many graphics systems, a \htmlref{Plot}{Plot} allows you to {\em{clip}} the graphics
-you produce. This means that plotting is restricted to certain regions
-of the plotting surface so that anything drawn outside these regions
-will not appear.  All Plots automatically clip at the edges of the
-plotting area specified when the Plot is created. This means that
-graphics are ultimately restricted to the rectangular region of
-plotting space to which you have attached the Plot.
-
-In addition to this, you may also specify lower and upper limits on
-each axis at which clipping should occur. This permits you to further
-restrict the plotting region. Moreover, you may attach these clipping
-limits to {\em{any}} of the Frames in the Plot. This allows you to
-place restrictions on where plotting will take place in either the
-physical coordinate system, the graphical coordinate system, or in any
-other coordinate system which is described by a \htmlref{Frame}{Frame} within the Plot.
-
-For example, you could plot using equatorial coordinates and set up
-clipping limits in galactic coordinates. In general, you could set up
-arbitrary clipping regions by adding a new Frame to a Plot (in which
-clipping will be performed) and inter-relating this to the other
-Frames in a suitable way.
-
-Clipping limits are defined using the \htmlref{astClip}{astClip} function, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-#define NAXES 2
-int iframe;
-double lbnd[ NAXES ], ubnd[ NAXES ];
-
-...
-astClip( plot, iframe, lbnd, ubnd);
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, the ``iframe'' value gives the index of the Frame within the
-Plot to which clipping is to be applied, while ``lbnd'' and ``ubnd''
-give the limits on each axis of the selected Frame (NAXES is the
-number of axes in this Frame).
-
-You can remove clipping by giving a value of AST\_\_NOFRAME for ``iframe''.
-
-\subsection{Using a Plot as a Mapping}
-
-All Plots are also Mappings (just like the FrameSets from which they
-are derived), so can be used to transform coordinates.
-
-Like FrameSets, the forward transformation of a \htmlref{Plot}{Plot} will convert
-coordinates between the base and current Frames ({\em{i.e.}}\ between
-graphical and physical coordinates). This would be useful if you were
-(say) reading a cursor position in graphical coordinates and needed to
-convert this into physical coordinates for display.
-
-Conversely, a Plot's inverse transformation converts between its
-current and base Frames ({\em{i.e.}}\ from physical coordinates to
-graphical coordinates). This transformation is applied automatically
-whenever plotting operations are carried out by AST functions. It may
-also be useful to apply it directly, however, if you wish to perform
-additional plotting operations ({\em{e.g.}}\ those provided by the
-native graphics system) at positions specified in physical
-coordinates.
-
-There is, however, one important difference between using a \htmlref{FrameSet}{FrameSet}
-and a Plot to transform coordinates, and this is that clipping may be
-applied by a Plot (if it has been enabled using
-\htmlref{astClip}{astClip}---\secref{ss:clipping}). Any point which lies within the
-clipped region of a Plot will, when transformed, yield coordinates
-with the value AST\_\_BAD. If you wish to avoid this clipping, you
-should extract the relevant \htmlref{Mapping}{Mapping} from the Plot (using
-\htmlref{astGetMapping}{astGetMapping}) and use this, instead of the Plot, to transform the
-coordinates.
-
-\subsection{Using a Plot as a Frame}
-
-Every \htmlref{Plot}{Plot} is also a \htmlref{Frame}{Frame}, so can be used to obtain the values of
-Frame attributes such as a \htmlref{Title}{Title}, axis Labels, axis Units,
-{\em{etc.,}} which are typically used when displaying data and/or
-coordinates. These attributes are, as for any \htmlref{FrameSet}{FrameSet}, derived from
-the current Frame of the Plot (\secref{ss:framesetasframe}). They are
-also used automatically when using the Plot to plot coordinate axes
-and coordinate grids ({\em{e.g.}}\ for labelling
-them---\secref{ss:plottingagrid}).
-
-Because the current Frame of a Plot represents physical coordinates,
-any Frame operation applied to the Plot will effectively be working in
-this coordinate system. For example, the \htmlref{astDistance}{astDistance} and \htmlref{astOffset}{astOffset}
-functions will compute distances and offsets in physical coordinate
-space, while \htmlref{astFormat}{astFormat} and \htmlref{astNorm}{astNorm} will format physical coordinates in
-an appropriate way for display.
-
-\subsection{\label{ss:validphysicalcoordinates}Regions of Valid Physical Coordinates}
-
-When points in physical coordinate space are transformed by a \htmlref{Plot}{Plot}
-into graphics coordinates for plotting, they may not always yield
-valid coordinates, irrespective of any clipping being applied
-(\secref{ss:clipping}). To indicate this, the resulting coordinate
-values will be set to the value AST\_\_BAD
-(\secref{ss:badcoordinates}).
-
-There are a number of reasons why this may occur, but typically it
-will be because physical coordinates only map on to a subset of the
-graphics coordinate space. This situation is commonly encountered with
-all-sky projections where, typically, the celestial sphere appears,
-when plotted, as a distorted shape ({\em{e.g.}}\ an ellipse) which
-does not entirely fill the graphics space. In some cases, there may
-even be multiple regions of valid and invalid physical coordinates.
-
-When plotting is performed {\em{via}} a Plot, graphical output will
-only appear in the regions of valid physical coordinates. Nothing will
-appear where invalid coordinates occur. Such output is effectively
-clipped. If you wish to plot in these areas, you must change
-coordinate system and use, say, graphical coordinates to address the
-plotting surface directly.
-
-\subsection{Plotting Borders}
-
-The \htmlref{astBorder}{astBorder} function is provided to draw a (line) border around your
-graphical output. With most graphics systems, this would simply be a
-rectangular box around the plotting area. With a \htmlref{Plot}{Plot}, however, this
-boundary follows the edge of each region containing valid, unclipped
-physical coordinates (\secref{ss:validphysicalcoordinates}).
-
-This means, for example, that if you were plotting an all-sky
-projection, this boundary would outline the perimeter of the celestial
-sphere when projected on to your plotting surface. Of course, if there
-is no clipping and all physical coordinates are valid, then you will
-get the traditional rectangular box. astBorder requires only
-a pointer to the Plot:
-
-\begin{quote}
-\small
-\begin{verbatim}
-int holes;
-
-...
-
-holes = astBorder( plot );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It returns a boolean (integer) value to indicate if any invalid or
-clipped physical coordinates were found within the plotting area. If
-they were, it will draw around the valid unclipped regions and return
-a value of one.  Otherwise, it will draw a simple rectangular border
-and return zero.
-
-\subsection{Plotting Text}
-
-Using a \htmlref{Plot}{Plot} to draw text involves supplying a string of text to be
-displayed and a position in physical coordinates where the text is to
-appear. The position is transformed into graphical coordinates to
-determine where the text should appear on the plotting surface. You
-must also provide a 2-element ``up'' vector which gives the upward
-direction of the text in graphical coordinates. This allows text to be
-drawn at any angle.
-
-Plotting is performed by \htmlref{astText}{astText}, for example:
-
-\begin{quote}
-\small
-\begin{verbatim}
-char text[ 21 ];
-double pos[ NCOORD ];
-float up[ 2 ] = { 0.0f, 1.0f };
-
-...
-
-astText( plot, text, pos, up, "TL" );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Here, ``text'' contains the string to be drawn, ``pos'' is an array of
-physical coordinates and ``up'' specifies the upward vector. In this
-case, the text will be drawn horizontally. The final argument
-specifies the text justification, here indicating that the top left
-corner of the text should appear at the position given.
-
-Further control over the appearance of the text is possible by setting
-values for various Plot attributes, for example Colour, Font and Size.
-Sub-strings within the displayed text can be given different appearances,
-or turned into super-scripts or sub-scripts, by the inclusion of escape 
-sequences (see section~\secref{ss:escapes}) within the supplied text string.
-
-\subsection{\label{ss:plottingagrid}Plotting a Grid}
-
-The most comprehensive plotting function available is \htmlref{astGrid}{astGrid}, which
-can be used to draw labelled coordinate axes and, optionally, to
-overlay coordinate grids on the plotting area
-(Figure~\ref{fig:gridplot}). The routine is straightforward to use,
-simply requiring a pointer to the \htmlref{Plot}{Plot}:
-
-\begin{quote}
-\small
-\begin{verbatim}
-astGrid( plot );
-\end{verbatim}
-\normalsize
-\end{quote}
-
-It will draw both linear and curvilinear axes and grids, as required
-by the particular Plot. The appearance of the output can be modified
-in a wide variety of ways by setting various Plot attributes.
-The Label attributes of the current \htmlref{Frame}{Frame} are displayed as the axis 
-labels in the grid, and the \htmlref{Title}{Title} attribute as the plot title. Sub-strings 
-within these strings can be given different appearances, or turned into
-super-scripts or sub-scripts, by the inclusion of escape sequences (see 
-section~\secref{ss:escapes}) within the Label attributes.
-
-\subsection{\label{ss:escapes}Controlling the Appearance of Sub-strings}
-Normally, each string of characters displayed using a \htmlref{Plot}{Plot} will be
-plotted so that all characters in the string have the same font size,
-colour, {\em{etc.,}} specified by the appropriate attributes of the
-Plot. However, it is possible to include \emph{escape sequences} within
-the text to modify the appearance of sub-strings. \htmlref{Escape}{Escape} sequences can be
-used to change, colour, font, size, width, to introduce extra horizontal
-space between characters, and to change the base line of characters (thus
-allowing super-scripts and sub-scripts to be created). See the entry for
-the Escape attribute in \appref{ss:attributedescriptions} for details.
-
-As an example, if the character string ``\verb+10\%^50+\%s70+0.5+'' is
-plotted, it will be displayed as ``$10^{0.5}$'' - that is, with a
-super-scripted exponent. The exponent text will be 70\% of the size of
-normal text (as determined by the Size attribute), and its baseline will
-be raised by 50\% of the height of a normal character.
-
-Such escape sequences can be used in the strings assigned to textual
-attributes of the Plot (such as the axis Labels), and may also be
-included in strings plotted using 
-\htmlref{astText}{astText}.
-
-The Format attribute for the \htmlref{SkyAxis}{SkyAxis} class includes the ``g'' option
-which will cause escape sequences to be included when formatting
-celestial positions so that super-script characters are used as
-delimiters for the various fields (a super-script ``h'' for hours, ``m''
-for minutes, \emph{etc}).
-
-Note, the facility for interpreting escape sequences is only available if
-the graphics wrapper functions which provide the interface to the
-underlying graphics system support all the functions included in the
-\verb+grf.h+ file as of AST V3.2. Older grf interfaces may need to be
-extended by the addition of new functions before escape sequences can be
-interpretted.
-
-\subsection{\label{ss:logaxes}Producing Logarithmic Axes}
-In certain situations you may wish for one or both of the plotted axes to
-be displayed logarithmically rather than linearly. For instance, you may
-wish to do this when using a \htmlref{Plot}{Plot} to represent a spectrum of, say, flux
-against frequency. In this case, you can cause the frequency axis to be drawn
-logarithmically simply by setting the boolean LogPlot attribute for the
-frequency axis to a non-zero value. This causes several things to happen:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} between the base \htmlref{Frame}{Frame} of the Plot (which represents 
-the underlying graphics world coordinate system) and the base Frame of
-the \htmlref{FrameSet}{FrameSet} supplied when the Plot was created, is modified. By
-default, this mapping is linear on both axes, but setting LogPlot non-zero
-for an axis causes the Mapping to be modified so that it is logarithmic
-on the specified axis. This is only possible if the displayed section of
-the axis does not include the value zero (otherwise the attempt to set
-a new value for LogPlot is ignored,and it retains its default value of
-zero).
-
-\item The major tick marks drawn as part of the annotated coordinate grid
-are spaced logarithmically rather than linearly. That is, major axis
-values are chosen so that there is a constant ratio between adjacent
-tick mark values. This ratio is constrained to be a power of ten. The
-minor tick marks are drawn at linearly distributed points between the 
-adjoining major tick values. Thus if a pair of adjacent major tick values 
-are drawn at axis values 10.0 and 100.0, minor ticks will be placed at 
-20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0 and 90.0 (note only 8 minor tick
-marks are drawn).
-
-\item If possible, numerical axis labels are shown as powers of ten.
-This depends on the facilities implemented by the graphics wrapper
-functions (see the next section). Extra functions were introduced to this
-set of wrapper functions at AST V3.2 which enable super-scripts and 
-sub-scripts to be produced. Some older wrappers may not yet have
-implemented these functiosn and this will result in axis labels being
-drawn in usual scientific or decimal notation.
-
-\end{enumerate}
-
-Whilst the LogPlot attribute can be used to control all three of the above 
-facilities, it is possible to control them individually as well. The
-LogTicks and LogLabel attributes control the behaviour specified in items
-2 and 3 above, but the default values for these attributes depend on the
-setting of the LogPlot attribute. This means that setting LogPlot 
-non-zero will swicth all three facilites on, so long as zero values have
-not been assigned explicitly to LogTicks or LogLabel.
-
-
-\subsection{\label{ss:choosingagraphicspackage}Choosing a Graphics Package}
-The \htmlref{Plot}{Plot} class itself does not include any code for actually drawing on a
-graphics device. Instead, it requires a set of functions to be provided
-which it uses to draw the required graphics. These include functions
-to draw a straight line, draw a text string, \emph{etc}. You may choose
-to provide functions from your favorite graphics package, or you can even
-write your own! To accomodate variations in the calling interfaces of
-different graphics packages, AST defines a standard interface for these
-routines. If this interface differs from the interface provided by your
-graphics package (which in general it will), then you must write a set of
-\emph{wrapper functions}, which provide the interface expected by AST but
-which then call functions from your graphics package to provide the
-required functionality. AST comes with wrapper functions suitable for
-the PGPLOT graphics package (see \xref{SUN/15}{sun15}{}).
-
-There are two ways of indicating which wrapper functions are to be used by 
-the Plot class:
-\begin{enumerate}
-
-\item A file containing C functions with pre-defined names can be written
-and linked with the application using options of the \htmlref{ast\_link}{ast_link} command.
-(see \secref{ss:howtobuild} and \appref{ss:commanddescriptions}). AST is
-distributed with such a file (called {\tt grf\_pgplot.c}) which calls PGPLOT 
-functions to implement the required functionality. This file can be used
-as a template for writing your own.
-
-\item The 
-\htmlref{astGrfSet}{astGrfSet} 
-method of the Plot class can be used to ``register''
-wrapper functions at run-time. This allows an application to switch
-between graphics systems if required. Graphics functions registered in
-this way do not need to have the pre-defined names used in the link-time
-method described above.
-
-\end{enumerate}
-
-For details of the interfaces of the wrapper routines, see 
-either the {\tt grf\_pgplot.c} file included in the AST source
-distribution, or the reference documentation for the astGrfSet method.
-
-\cleardoublepage
-\section{Compiling and Linking Software that Uses AST}
-
-A small number of UNIX commands are provided by AST to assist with the
-process of building software. A description of these can be found in
-\appref{ss:commanddescriptions} and their use is discussed here.  Note
-that in order to access these commands, the appropriate directory
-(normally ``/star/bin'') should be on your PATH.\footnote{If you have
-not installed AST in the usual location, then substitute the
-appropriate directory in place of ``/star'' wherever it occurs.}
-
-\subsection{\label{ss:accessingheaderfile}Accessing the ``ast.h'' Header File}
-
-The ``ast.h'' header file defines the external interface to the AST library, 
-including all constants, function prototypes, macros, {\em{etc.}}. This file
-should be located using the usual compiler options for finding C
-include files, for instance:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc prog.c -I/star/include -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-This is preferable to specifying the file's absolute name within your
-software.
-
-\subsection{\label{ss:linking}Linking with AST Facilities}
-
-C programs which use AST facilities may be linked by including
-execution of the command ``\htmlref{ast\_link}{ast_link}'' on the compiler command
-line. Thus, to compile and link a program called ``prog'', the
-following might be used:
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc prog.c -L/star/lib `ast_link` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of backward quote characters, which cause the
-``ast\_link'' command to be executed and its result substituted into
-the compiler command. An alternative is to save the output from
-``ast\_link'' in (say) a shell variable and use this instead. You may
-find this a little faster if you are building software repeatedly
-during development.
-
-Programs which use AST can also be linked in a number of other ways,
-depending on the facilities they require. In the example above, we
-have used the default method which assumes that the program will not
-be generating graphical output, so that no graphics libraries need be
-linked. If you need other facilities, then various switches can be
-applied to the ``ast\_link'' command in order to control the linking
-process.
-
-For example, if you were producing graphical output using the PGPLOT
-graphics package, you could link with the AST/PGPLOT interface by
-using the ``$-$pgplot'' switch with ``ast\_link'', as
-follows:\footnote{Use the ``$-$pgp'' option instead if you wish to use
-the Starlink version of PGPLOT which uses GKS to generate its output.}
-
-\begin{quote}
-\small
-\begin{verbatim}
-cc prog.c -L/star/lib `ast_link -pgplot` -o prog
-\end{verbatim}
-\normalsize
-\end{quote}
-
-See the ``ast\_link'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\subsection{Building ADAM Applications that Use AST}
-
-Users of Starlink's \xref{ADAM}{sg4}{} programming environment
-\latex{(SG/4)} on UNIX should use the
-``\xref{alink}{sun144}{ADAM_link_scripts}'' command
-(\xref{SUN/144}{sun144}{}) to compile and link applications and can
-access the AST library by including execution of the command
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' on the command line, as follows:
-
-\begin{quote}
-\small
-\begin{verbatim}
-alink adamprog.c `ast_link_adam`
-\end{verbatim}
-\normalsize
-\end{quote}
-
-Note the use of backward quote characters.
-
-By default, AST error messages produced by applications built in this
-way will be delivered {\em{via}} the Starlink EMS Error Message
-Service (\xref{SSN/4}{ssn4}{}) so that error handling by AST is
-consistent with the \xref{{\em{inherited
-status}}}{sun104}{inherited_status} error handling normally used in
-Starlink software.
-
-Switches may be given to the ``ast\_link\_adam'' command (in a similar
-way to ``\htmlref{ast\_link}{ast_link}''---\secref{ss:linking}) in order to link with
-additional AST-related facilities, such as a graphics interface. See
-the ``ast\_link\_adam'' command description in
-\appref{ss:commanddescriptions} for details of the options available.
-
-\appendix
-\cleardoublepage
-\section{\label{ss:classhierarchy}The AST Class Hierarchy}
-The following table shows the hierarchy of classes in the AST library.
-For a description of each class, you should consult
-\appref{ss:classdescriptions}.
-
-\small
-\begin{verbatim}
-Object             - Base class for all AST Objects
-   Axis            - Store axis information
-      SkyAxis      - Store celestial axis information
-   Channel         - Basic (textual) I/O channel
-      FitsChan     - I/O Channel using FITS header cards
-      XmlChan      - I/O Channel using XML
-      StcsChan     - I/O Channel using IVOA STC-S descriptions
-   KeyMap          - Store a set of key/value pairs
-   Mapping         - Inter-relate two coordinate systems
-      CmpMap       - Compound Mapping
-      DssMap       - Map points using Digitised Sky Survey plate solution
-      Frame        - Coordinate system description
-         CmpFrame  - Compound Frame
-            SpecFluxFrame - Observed value versus spectral position
-         FluxFrame - Observed value at a given fixed spectral position
-         FrameSet  - Set of inter-related coordinate systems
-            Plot   - Provide facilities for graphical output
-         Region    - Specify areas within a coordinate system
-            Box    - A box region with sides parallel to the axes of a Frame
-            Circle - A circular or spherical region within a Frame
-            CmpRegion  - A combination of two regions within a single Frame
-            Ellipse    - An elliptical region within a 2-dimensional Frame
-            Interval   - Intervals on one or more axes of a Frame.
-            NullRegion - A boundless region within a Frame
-            PointList  - A collection of points in a Frame
-            Polygon    - A polygonal region within a 2-dimensional Frame
-            Prism  - An extrusion of a Region into orthogonal dimensions
-            Stc    - Represents an generic instance of an IVOA STC-X description
-               StcResourceProfile - Represents an an IVOA STC-X ResourceProfile
-               StcSearchLocation  - Represents an an IVOA STC-X SearchLocation
-               StcCatalogEntryLocation - Represents an an IVOA STC-X CatalogEntryLocation
-               StcObsDataLocation - Represents an an IVOA STC-X ObsDataLocation
-         SkyFrame  - Celestial coordinate system description
-         SpecFrame - Spectral coordinate system description
-            DSBSpecFrame - Dual sideband spectral coordinate system description
-         TimeFrame - Time coordinate system description
-      GrismMap     - Models the spectral dispersion produced by a grism
-      IntraMap     - Map points using a private transformation function
-      LutMap       - Transform 1-dimensional coordinates using a lookup table
-      MathMap      - Transform coordinates using mathematical expressions
-      MatrixMap    - Map positions by multiplying them by a matrix
-      NormMap      - Normalise coordinates using a supplied Frame
-      PcdMap       - Apply 2-dimensional pincushion/barrel distortion
-      PermMap      - Coordinate permutation Mapping
-      PolyMap      - General N-dimensional polynomial Mapping
-      RateMap      - Calculates an element of a Mapping's Jacobian matrix 
-      SelectorMap  - Locates positions within a set of Regions
-      ShiftMap     - Shifts each axis by a constant amount
-      SlaMap       - Sequence of celestial coordinate conversions
-      SpecMap      - Sequence of spectral coordinate conversions
-      SphMap       - Map 3-d Cartesian to 2-d spherical coordinates
-      SwitchMap    - Encapuslates a set of alternate Mappings
-      TimeMap      - Sequence of time coordinate conversions
-      TranMap      - Combine fwd. and inv. transformations from two Mappings
-      UnitMap      - Unit (null) Mapping
-      WcsMap       - Implement a FITS-WCS sky projection
-      WinMap       - Match windows by scaling and shifting each axis
-      ZoomMap      - Zoom coordinates about the origin
-\end{verbatim}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:functiondescriptions}AST Function Descriptions}
-\small
-\sstroutine{
-   astSet\sstlabel{astSet}
-}{
-   Set attribute values for an Object
-}{
-   \sstdescription{
-      This function assigns a set of attribute values to an \htmlref{Object}{Object},
-      over-riding any previous values. The attributes and their new
-      values are specified via a character string, which should
-      contain a comma-separated list of the form:
-
-         {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
-      where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
-      to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
-      representation of the value to be assigned. This value will be
-      interpreted according to the attribute's data type.
-
-      The string supplied may also contain {\tt{"}}printf{\tt{"}}-style format
-      specifiers, identified by {\tt{"}}\%{\tt{"}} signs in the usual way. If
-      present, these will be substituted by values supplied as
-      additional optional arguments (using the normal {\tt{"}}printf{\tt{"}} rules)
-      before the string is used.
-   }
-   \sstsynopsis{
-      void astSet( AstObject $*$this, const char $*$settings, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         settings
-      }{
-         Pointer to a null-terminated character string containing a
-         comma-separated list of attribute settings in the form described
-         above.
-      }
-      \sstsubsection{
-         ...
-      }{
-         Optional additional arguments which supply values to be
-         substituted for any {\tt{"}}printf{\tt{"}}-style format specifiers that
-         appear in the {\tt{"}}settings{\tt{"}} string.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         astSet( map, {\tt{"}}\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0{\tt{"}} );
-      }{
-         Sets the Report attribute for Object {\tt{"}}map{\tt{"}} to the value 1 and
-         the Zoom attribute to 25.0.
-      }
-      \sstexamplesubsection{
-         astSet( frame, {\tt{"}}Label( \%d ) =Offset along axis \%d{\tt{"}}, axis, axis );
-      }{
-         Sets the \htmlref{Label(axis)}{Labelaxis} attribute for Object {\tt{"}}frame{\tt{"}} to a
-         suitable string, where the axis number is obtained from
-         {\tt{"}}axis{\tt{"}}, a variable of type int.
-      }
-      \sstexamplesubsection{
-         astSet( frame, {\tt{"}}\htmlref{Title}{Title} =\%s{\tt{"}}, mystring );
-      }{
-         Sets the Title attribute for Object {\tt{"}}frame{\tt{"}} to the contents of
-         the string {\tt{"}}mystring{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         White space may also surround attribute values, where it will
-         generally be ignored (except for string-valued attributes where
-         it is significant and forms part of the value to be assigned).
-
-         \sstitem
-         It is not possible to include a comma directly in the value
-         assigned to an attribute via the {\tt{"}}settings{\tt{"}} string. To achieve
-         this, you should use {\tt{"}}\%s{\tt{"}} format and supply the value as a
-         separate additional argument to astSet (or use the astSetC
-         function instead).
-
-         \sstitem
-         The same procedure may be adopted if {\tt{"}}\%{\tt{"}} signs are to be included
-         and are not to be interpreted as format specifiers (alternatively,
-         the {\tt{"}}printf{\tt{"}} convention of writing {\tt{"}}\%\%{\tt{"}} may be used).
-
-         \sstitem
-         An error will result if an attempt is made to set a value for
-         a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   astAddFrame\sstlabel{astAddFrame}
-}{
-   Add a Frame to a FrameSet to define a new coordinate system
-}{
-   \sstdescription{
-      This function adds a new \htmlref{Frame}{Frame} and an associated \htmlref{Mapping}{Mapping} to a
-      \htmlref{FrameSet}{FrameSet} so as to define a new coordinate system, derived from
-      one which already exists within the FrameSet. The new Frame then
-      becomes the FrameSet's current Frame.
-
-      This function
-      may also be used to merge two FrameSets, or to append extra axes
-      to every Frame in a FrameSet.
-   }
-   \sstsynopsis{
-      void astAddFrame( AstFrameSet $*$this, int iframe, AstMapping $*$map,
-                        AstFrame $*$frame )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         iframe
-      }{
-         The index of the Frame within the FrameSet which describes
-         the coordinate system upon which the new one is to be based.
-         This value should lie in the range from 1 to the number of
-         Frames already in the FrameSet (as given by its \htmlref{Nframe}{Nframe}
-         attribute). As a special case, AST\_\_ALLFRAMES may be supplied,
-         in which case the axes defined by the supplied Frame are appended
-         to every Frame in the FrameSet (see the Notes section for details).
-      }
-      \sstsubsection{
-         map
-      }{
-         Pointer to a Mapping which describes how to convert
-         coordinates from the old coordinate system (described by the
-         Frame with index {\tt{"}}iframe{\tt{"}}) into coordinates in the new
-         system. The Mapping's forward transformation should perform
-         this conversion, and its inverse transformation should
-         convert in the opposite direction. The supplied Mapping is ignored
-         if parameter {\tt{"}}iframe{\tt{"}}is equal to AST\_\_ALLFRAMES.
-      }
-      \sstsubsection{
-         frame
-      }{
-         Pointer to a Frame that describes the new coordinate system.
-         Any class of Frame may be supplied (including Regions and
-         FrameSets).
-
-         This function may also be used to merge two FrameSets by
-         supplying a pointer to a second FrameSet for this parameter
-         (see the Notes section for details).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         This function sets the value of the \htmlref{Current}{Current} attribute for the
-         FrameSet so that the new Frame subsequently becomes the current
-         Frame.
-
-         \sstitem
-         The number of input coordinate values accepted by the supplied
-         Mapping (its \htmlref{Nin}{Nin} attribute) must match the number of axes in the
-         Frame identified by the {\tt{"}}iframe{\tt{"}} parameter. Similarly, the
-         number of output coordinate values generated by this Mapping
-         (its \htmlref{Nout}{Nout} attribute) must match the number of axes in the new
-         Frame.
-
-         \sstitem
-         As a special case, if a pointer to a FrameSet is given for the
-         {\tt{"}}frame{\tt{"}} parameter, this is treated as a request to merge a pair of
-         FrameSets.  This is done by appending all the new Frames (in the
-         {\tt{"}}frame{\tt{"}} FrameSet) to the original FrameSet, while preserving
-         their order and retaining all the inter-relationships
-         (i.e. Mappings) between them. The two sets of Frames are
-         inter-related within the merged FrameSet by using the Mapping
-         supplied. This should convert between the Frame identified by
-         the {\tt{"}}iframe{\tt{"}} parameter (in the original FrameSet) and the current
-         Frame of the {\tt{"}}frame{\tt{"}} FrameSet. This latter Frame becomes the
-         current Frame in the merged FrameSet.
-
-         \sstitem
-         As another special case, if a value of AST\_\_ALLFRAMES is supplied
-         for parameter
-         {\tt{"}}iframe{\tt{"}},
-         then the supplied Mapping is ignored, and the axes defined by the
-         supplied Frame are appended to each Frame in the FrameSet. In detail,
-         each Frame in the FrameSet is replaced by a \htmlref{CmpFrame}{CmpFrame} containing the
-         original Frame and the Frame specified by parameter
-         {\tt{"}}frame{\tt{"}}.
-         In addition, each Mapping in the FrameSet is replaced by a \htmlref{CmpMap}{CmpMap}
-         containing the original Mapping and a \htmlref{UnitMap}{UnitMap} in parallel. The Nin and
-         Nout attributes of the UnitMap are set equal to the number of axes
-         in the supplied Frame. Each new CmpMap is simplified using
-         \htmlref{astSimplify}{astSimplify}
-         before being stored in the FrameSet.
-      }
-   }
-}
-\sstroutine{
-   astAngle\sstlabel{astAngle}
-}{
-   Calculate the angle subtended by two points at a third point
-}{
-   \sstdescription{
-      This function
-      finds the angle at point B between the line joining points A and B,
-      and the line joining points C and B. These lines will in fact be
-      geodesic curves appropriate to the \htmlref{Frame}{Frame} in use. For instance, in
-      \htmlref{SkyFrame}{SkyFrame}, they will be great circles.
-   }
-   \sstsynopsis{
-      double astAngle( AstFrame $*$this, const double a[], const double b[],
-                       const double c[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         a
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
-      }
-      \sstsubsection{
-         b
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute) containing the coordinates of the second point.
-      }
-      \sstsubsection{
-         c
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute) containing the coordinates of the third point.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astAngle
-      }{
-         The angle in radians, from the line AB to the line CB. If the
-         Frame is 2-dimensional, it will be in the range \$$\backslash$pm $\backslash$pi\$,
-         and positive rotation is in the same sense as rotation from
-         the positive direction of axis 2 to the positive direction of
-         axis 1. If the Frame has more than 2 axes, a positive value will
-         always be returned in the range zero to \$$\backslash$pi\$.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BAD will also be returned if points A and B are
-         co-incident, or if points B and C are co-incident.
-
-         \sstitem
-         A value of AST\_\_BAD will also be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   astAnnul\sstlabel{astAnnul}
-}{
-   Annul a pointer to an Object
-}{
-   \sstdescription{
-      This function annuls a pointer to an \htmlref{Object}{Object} so that it is no
-      longer recognised as a valid pointer by the AST library. Any
-      resources associated with the pointer are released and made
-      available for re-use.
-
-      This function also decrements the Object's \htmlref{RefCount}{RefCount} attribute by
-      one. If this attribute reaches zero (which happens when the last
-      pointer to the Object is annulled), then the Object is deleted.
-   }
-   \sstsynopsis{
-      AstObject $*$astAnnul( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         The Object pointer to be annulled.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astAnnul()
-      }{
-         A null Object pointer (AST\_\_NULL) is always returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will attempt to annul the pointer even if the
-         Object is not currently locked by the calling thread (see \htmlref{astLock}{astLock}).
-
-         \sstitem
-         This function attempts to execute even if the AST error
-         status is set
-         on entry, although no further error report will be
-         made if it subsequently fails under these circumstances. In
-         particular, it will fail if the pointer suppled is not valid,
-         but this will only be reported if the error status is clear on
-         entry.
-      }
-   }
-}
-\sstroutine{
-   astAxAngle\sstlabel{astAxAngle}
-}{
-   Returns the angle from an axis, to a line through two points
-}{
-   \sstdescription{
-      This function
-      finds the angle, as seen from point A, between the positive
-      direction of a specified axis, and the geodesic curve joining point
-      A to point B.
-   }
-   \sstsynopsis{
-      double astAxAngle( AstFrame $*$this, const double a[], const double b[], int axis )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         a
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
-      }
-      \sstsubsection{
-         b
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute) containing the coordinates of the second point.
-      }
-      \sstsubsection{
-         axis
-      }{
-         The number of the Frame axis from which the angle is to be
-         measured (axis numbering starts at 1 for the first axis).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astAxAngle
-      }{
-         The angle in radians, from the positive direction of the
-         specified axis, to the line AB. If the Frame is 2-dimensional,
-         it will be in the range [-PI/2,$+$PI/2], and positive rotation is in
-         the same sense as rotation from the positive direction of axis 2
-         to the positive direction of axis 1. If the Frame has more than 2
-         axes, a positive value will always be returned in the range zero
-         to PI.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The geodesic curve used by this function is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{astDistance}{astDistance} function.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value, or if the require
-         position angle is undefined.
-      }
-   }
-}
-\sstroutine{
-   astAxDistance\sstlabel{astAxDistance}
-}{
-   Find the distance between two axis values
-}{
-   \sstdescription{
-      This function returns a signed value representing the axis increment
-      from axis value v1 to axis value v2.
-
-      For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
-      difference between the two axis values. But for other derived classes
-      of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
-   }
-   \sstsynopsis{
-      double astAxDistance( AstFrame $*$this, int axis, double v1, double v2 )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         axis
-      }{
-         The index of the axis to which the supplied values refer. The
-         first axis has index 1.
-      }
-      \sstsubsection{
-         v1
-      }{
-         The first axis value.
-      }
-      \sstsubsection{
-         v2
-      }{
-         The second axis value.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astAxDistance
-      }{
-         The distance from the first to the second axis value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
-         any of the input values has this value.
-
-         \sstitem
-         A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   astAxOffset\sstlabel{astAxOffset}
-}{
-   Add an increment onto a supplied axis value
-}{
-   \sstdescription{
-      This function returns an axis value formed by adding a signed axis
-      increment onto a supplied axis value.
-
-      For a simple \htmlref{Frame}{Frame}, this is a trivial operation returning the
-      sum of the two supplied values. But for other derived classes
-      of Frame (such as a \htmlref{SkyFrame}{SkyFrame}) this is not the case.
-   }
-   \sstsynopsis{
-      double astAxOffset( AstFrame $*$this, int axis, double v1, double dist )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         axis
-      }{
-         The index of the axis to which the supplied values refer. The
-         first axis has index 1.
-      }
-      \sstsubsection{
-         v1
-      }{
-         The original axis value.
-      }
-      \sstsubsection{
-         dist
-      }{
-         The axis increment to add to the original axis value.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astAxOffset
-      }{
-         The incremented axis value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
-         any of the input values has this value.
-
-         \sstitem
-         A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   astBegin\sstlabel{astBegin}
-}{
-   Begin a new AST context
-}{
-   \sstdescription{
-      This macro invokes a function to begin a new AST context.
-      Any \htmlref{Object}{Object} pointers
-      created within this context will be annulled when it is later
-      ended using \htmlref{astEnd}{astEnd} (just as if \htmlref{astAnnul}{astAnnul} had been invoked),
-      unless they have first been exported using \htmlref{astExport}{astExport} or rendered
-      exempt using \htmlref{astExempt}{astExempt}. If
-      annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
-      fall to zero (which happens when the last pointer to it is
-      annulled), then the Object will be deleted.
-   }
-   \sstsynopsis{
-      void astBegin
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This macro applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         astBegin attempts to execute even if the AST error status
-         is set on entry.
-
-         \sstitem
-         Contexts delimited by astBegin and astEnd may be nested to any
-         depth.
-      }
-   }
-}
-\sstroutine{
-   astBorder\sstlabel{astBorder}
-}{
-   Draw a border around valid regions of a Plot
-}{
-   \sstdescription{
-      This function draws a (line) border around regions of the
-      plotting area of a \htmlref{Plot}{Plot} which correspond to valid, unclipped
-      physical coordinates. For example, when plotting using an
-      all-sky map projection, this function could be used to draw the
-      boundary of the celestial sphere when it is projected on to the
-      plotting surface.
-
-      If the entire plotting area contains valid, unclipped physical
-      coordinates, then the boundary will just be a rectangular box
-      around the edges of the plotting area.
-
-      If the Plot is a \htmlref{Plot3D}{Plot3D}, this method is applied individually to
-      each of the three 2D Plots encapsulated within the Plot3D (each of
-      these Plots corresponds to a single 2D plane in the 3D graphics
-      system). In addition, if the entire plotting volume has valid
-      coordinates in the 3D current \htmlref{Frame}{Frame} of the Plot3D, then additional
-      lines are drawn along the edges of the 3D plotting volume so that
-      the entire plotting volume is enclosed within a cuboid grid.
-   }
-   \sstsynopsis{
-      int astBorder( AstPlot $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astBorder()
-      }{
-         Zero is returned if the plotting space is completely filled by
-         valid, unclipped physical coordinates (so that only a
-         rectangular box was drawn around the edge). Otherwise, one is
-         returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any
-         reason.
-
-         \sstitem
-         An error results if either the current Frame or the base Frame
-         of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the base
-         and current Frames of the Plot is not defined (i.e. the Plot's
-         \htmlref{TranForward}{TranForward} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astBoundingBox\sstlabel{astBoundingBox}
-}{
-   Return a bounding box for previously drawn graphics
-}{
-   \sstdescription{
-      This function returns the bounds of a box which just encompasess the
-      graphics produced by the previous call to any of the \htmlref{Plot}{Plot} methods
-      which produce graphical output. If no such previous call has yet
-      been made, or if the call failed for any reason, then the bounding box
-      returned by this function is undefined.
-   }
-   \sstsynopsis{
-      void astBoundingBox( AstPlot $*$this, float lbnd[2], float ubnd[2] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         A two element array in which is returned the lower limits of the
-         bounding box on each of the two axes of the graphics coordinate
-         system (the base \htmlref{Frame}{Frame} of the Plot).
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         A two element array in which is returned the upper limits of the
-         bounding box on each of the two axes of the graphics coordinate
-         system (the base Frame of the Plot).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error results if the base Frame of the Plot is not
-         2-dimensional.
-      }
-   }
-}
-\sstroutine{
-   astBox\sstlabel{astBox}
-}{
-   Create a Box
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Box}{Box} and optionally initialises its
-      attributes.
-
-      The Box class implements a \htmlref{Region}{Region} which represents a box with sides
-      parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
-      range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
-      only real difference being that the Interval class allows some axis
-      limits to be unspecified. Note, a Box will only look like a box if
-      the Frame geometry is approximately flat. For instance, a Box centred
-      close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
-      (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
-      pole).
-   }
-   \sstsynopsis{
-      AstBox $*$astBox( AstFrame $*$frame, int form, const double point1[],
-                      const double point2[], AstRegion $*$unc,
-                      const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         form
-      }{
-         Indicates how the box is described by the remaining parameters.
-         A value of zero indicates that the box is specified by a centre
-         position and a corner position. A value of one indicates that the
-         box is specified by a two opposite corner positions.
-      }
-      \sstsubsection{
-         point1
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). If
-         {\tt{"}}form{\tt{"}}
-         is zero, this array should contain the coordinates at the centre of
-         the box.
-         If {\tt{"}}form{\tt{"}}
-         is one, it should contain the coordinates at the corner of the box
-         which is diagonally opposite the corner specified by
-         {\tt{"}}point2{\tt{"}}.
-      }
-      \sstsubsection{
-         point2
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute) containing the coordinates at any corner of the
-         box.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the Box being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{astOverlap}{astOverlap}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{astSimplify}{astSimplify}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Box. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astBox()
-      }{
-         A pointer to the new Box.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astChannel\sstlabel{astChannel}
-}{
-   Create a Channel
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Channel}{Channel} and optionally initialises
-      its attributes.
-
-      A Channel implements low-level input/output for the AST library.
-      Writing an \htmlref{Object}{Object} to a Channel (using \htmlref{astWrite}{astWrite}) will generate a
-      textual representation of that Object, and reading from a
-      Channel (using \htmlref{astRead}{astRead}) will create a new Object from its
-      textual representation.
-
-      Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
-      by reading and writing the resulting text. By default, however,
-      a Channel will read from standard input and write to standard
-      output.
-   }
-   \sstsynopsis{
-      AstChannel $*$astChannel( const char $*$($*$ source)( void ),
-                              void ($*$ sink)( const char $*$ ),
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         source
-      }{
-         Pointer to a source function that takes no arguments and
-         returns a pointer to a null-terminated string.  This function
-         will be used by the Channel to obtain lines of input text. On
-         each invocation, it should return a pointer to the next input
-         line read from some external data store, and a NULL pointer
-         when there are no more lines to read.
-
-         If {\tt{"}}source{\tt{"}} is NULL, the Channel will read from standard
-         input instead.
-      }
-      \sstsubsection{
-         sink
-      }{
-         Pointer to a sink function that takes a pointer to a
-         null-terminated string as an argument and returns void.  This
-         function will be used by the Channel to deliver lines of
-         output text. On each invocation, it should deliver the
-         contents of the string supplied to some external data store.
-
-         If {\tt{"}}sink{\tt{"}} is NULL, the Channel will write to standard output
-         instead.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Channel. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astChannel()
-      }{
-         A pointer to the new Channel.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Application code can pass arbitrary data (such as file
-         descriptors, etc) to source and sink functions using the
-         \htmlref{astPutChannelData}{astPutChannelData} function. The source or sink function should use
-         the \htmlref{astChannelData}{astChannelData} macro to retrieve this data.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astChannelData\sstlabel{astChannelData}
-}{
-   Return a pointer to user-supplied data stored with a Channel
-}{
-   \sstdescription{
-      This macro is intended to be used within the source or sink
-      functions associated with a \htmlref{Channel}{Channel}. It returns any pointer
-      previously stored in the Channel (that is, the Channel that has
-      invoked the source or sink function) using \htmlref{astPutChannelData}{astPutChannelData}.
-
-      This mechanism is a thread-safe alternative to passing file
-      descriptors, etc, via static global variables.
-   }
-   \sstsynopsis{
-      void $*$astChannelData
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         This macro applies to all Channels.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astChannelData
-      }{
-         The pointer previously stored with the Channel using
-         astPutChannelData. A NULL pointer will be returned if no such
-         pointer has been stored with the Channel.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine is not available in the Fortran 77 interface to
-         the AST library.
-      }
-   }
-}
-\sstroutine{
-   astCircle\sstlabel{astCircle}
-}{
-   Create a Circle
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Circle}{Circle} and optionally initialises its
-      attributes.
-
-      A Circle is a \htmlref{Region}{Region} which represents a circle or sphere within the
-      supplied \htmlref{Frame}{Frame}.
-   }
-   \sstsynopsis{
-      AstCircle $*$astCircle( AstFrame $*$frame, int form, const double centre[],
-                            const double point[], AstRegion $*$unc,
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         form
-      }{
-         Indicates how the circle is described by the remaining parameters.
-         A value of zero indicates that the circle is specified by a
-         centre position and a position on the circumference. A value of one
-         indicates that the circle is specified by a centre position and a
-         scalar radius.
-      }
-      \sstsubsection{
-         centre
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates at the centre of
-         the circle or sphere.
-      }
-      \sstsubsection{
-         point
-      }{
-         If {\tt{"}}form{\tt{"}}
-         is zero, then this array should have one element for each Frame
-         axis (Naxes attribute), and should be supplied holding the
-         coordinates at a point on the circumference of the circle or sphere.
-         If {\tt{"}}form{\tt{"}}
-         is one, then this array should have one element only which should
-         be supplied holding the scalar radius of the circle or sphere,
-         as a geodesic distance within the Frame.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the Circle being created.
-         The uncertainty in any point on the boundary of the Circle is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. \htmlref{Box}{Box}, Circle, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Circle. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Circle being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{astOverlap}{astOverlap}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{astSimplify}{astSimplify}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Circle. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astCircle()
-      }{
-         A pointer to the new Circle.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astCirclePars\sstlabel{astCirclePars}
-}{
-   Returns the geometric parameters of an Circle
-}{
-   \sstdescription{
-      This function
-      returns the geometric parameters describing the supplied \htmlref{Circle}{Circle}.
-   }
-   \sstsynopsis{
-      void astCirclePars( AstCircle $*$this, double $*$centre, double $*$radius,
-                          double $*$p1 )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         centre
-      }{
-         Pointer to an array
-         in which to return the coordinates of the Circle centre.
-         The length of this array should be no less than the number of
-         axes in the associated coordinate system.
-      }
-      \sstsubsection{
-         radius
-      }{
-         Returned holding the radius of the Circle, as an geodesic
-         distance in the associated coordinate system.
-      }
-      \sstsubsection{
-         p1
-      }{
-         Pointer to an array
-         in which to return the coordinates of a point on the
-         circumference of the Circle. The length of this array should be
-         no less than the number of axes in the associated coordinate system.
-         A NULL pointer can be supplied if the circumference position is
-         not needed.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the coordinate system represented by the Circle has been
-         changed since it was first created, the returned parameters refer
-         to the new (changed) coordinate system, rather than the original
-         coordinate system. Note however that if the transformation from
-         original to new coordinate system is non-linear, the shape
-         represented by the supplied Circle object may not be an accurate
-         circle.
-      }
-   }
-}
-\sstroutine{
-   astClear\sstlabel{astClear}
-}{
-   Clear attribute values for an Object
-}{
-   \sstdescription{
-      This function clears the values of a specified set of attributes
-      for an \htmlref{Object}{Object}. Clearing an attribute cancels any value that has
-      previously been explicitly set for it, so that the standard
-      default attribute value will subsequently be used instead. This
-      also causes the \htmlref{astTest}{astTest} function to return the value zero for
-      the attribute, indicating that no value has been set.
-   }
-   \sstsynopsis{
-      void astClear( AstObject $*$this, const char $*$attrib )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         attrib
-      }{
-         Pointer to a null-terminated character string containing a
-         comma-separated list of the names of the attributes to be cleared.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         It does no harm to clear an attribute whose value has not been
-         set.
-
-         \sstitem
-         An error will result if an attempt is made to clear the value
-         of a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   astClearStatus\sstlabel{astClearStatus}
-}{
-   Clear the AST error status
-}{
-   \sstdescription{
-      This macro resets the AST error status to an OK value,
-      indicating that an error condition (if any) has been cleared.
-   }
-   \sstsynopsis{
-      void astClearStatus
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the AST error status is set to an error value (after an
-         error), most AST functions will not execute and will simply
-         return without action. Using astClearStatus will restore normal
-         behaviour.
-      }
-   }
-}
-\sstroutine{
-   astClip\sstlabel{astClip}
-}{
-   Set up or remove clipping for a Plot
-}{
-   \sstdescription{
-      This function defines regions of a \htmlref{Plot}{Plot} which are to be clipped.
-      Any subsequent graphical output created using the Plot will then
-      be visible only within the unclipped regions of the plotting
-      area. See also the \htmlref{Clip}{Clip} attribute.
-   }
-   \sstsynopsis{
-      void astClip( AstPlot $*$this, int iframe, const double lbnd[],
-                    const double ubnd[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         iframe
-      }{
-         The index of the \htmlref{Frame}{Frame} within the Plot to which the clipping
-         limits supplied in {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} (below) refer. Clipping
-         may be applied to any of the coordinate systems associated
-         with a Plot (as defined by the Frames it contains), so this
-         index may take any value from 1 to the number of Frames in
-         the Plot (\htmlref{Nframe}{Nframe} attribute). In addition, the values
-         AST\_\_BASE and AST\_\_CURRENT may be used to specify the base
-         and current Frames respectively.
-
-         For example, a value of AST\_\_CURRENT causes clipping to be
-         performed in physical coordinates, while a value of AST\_\_BASE
-         would clip in graphical coordinates. Clipping may also be
-         removed completely by giving a value of AST\_\_NOFRAME. In this
-         case any clipping bounds supplied (below) are ignored.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         An array with one element for each axis of the clipping Frame
-         (identified by the index {\tt{"}}iframe{\tt{"}}). This should contain the
-         lower bound, on each axis, of the region which is to remain
-         visible (unclipped).
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         An array with one element for each axis of the clipping Frame
-         (identified by the index {\tt{"}}iframe{\tt{"}}). This should contain the
-         upper bound, on each axis, of the region which is to remain
-         visible (unclipped).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Only one clipping Frame may be active at a time. This function
-         will deactivate any previously-established clipping Frame before
-         setting up new clipping limits.
-
-         \sstitem
-         The clipping produced by this function is in addition to that
-         specified by the Clip attribute which occurs at the edges of the
-         plotting area
-         established when the Plot is created (see \htmlref{astPlot}{astPlot}). The
-         underlying graphics system may also impose further clipping.
-
-         \sstitem
-         When testing a graphical position for clipping, it is first
-         transformed into the clipping Frame. The resulting coordinate on
-         each axis is then checked against the clipping limits (given by
-         {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}}). By default, a position is clipped if any
-         coordinate lies outside these limits. However, if a non-zero
-         value is assigned to the Plot's \htmlref{ClipOp}{ClipOp} attribute, then a
-         position is only clipped if the coordinates on all axes lie
-         outside their clipping limits.
-
-         \sstitem
-         If the lower clipping limit exceeds the upper limit for any
-         axis, then the sense of clipping for that axis is reversed (so
-         that coordinate values lying between the limits are clipped
-         instead of those lying outside the limits). To produce a {\tt{"}}hole{\tt{"}}
-         in a coordinate space (that is, an internal region where nothing
-         is plotted), you should supply all the bounds in reversed order,
-         and set the ClipOp attribute for the Plot to a non-zero value.
-
-         \sstitem
-         Either clipping limit may be set to the value AST\_\_BAD, which
-         is equivalent to setting it to infinity (or minus infinity for a
-         lower bound) so that it is not used.
-
-         \sstitem
-         If a graphical position results in any bad coordinate values
-         (AST\_\_BAD) when transformed into the clipping Frame, then it is
-         treated (for the purposes of producing graphical output) as if
-         it were clipped.
-
-         \sstitem
-         When a Plot is used as a \htmlref{Mapping}{Mapping} to transform points
-         (e.g. using \htmlref{astTran2}{astTran2}), any clipped output points are assigned
-         coordinate values of AST\_\_BAD.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not
-         2-dimensional.
-      }
-   }
-}
-\sstroutine{
-   astClone\sstlabel{astClone}
-}{
-   Clone (duplicate) an Object pointer
-}{
-   \sstdescription{
-      This function returns a duplicate pointer to an existing
-      \htmlref{Object}{Object}. It also increments the Object's \htmlref{RefCount}{RefCount} attribute to
-      keep track of how many pointers have been issued.
-
-      Note that this function is NOT equivalent to an assignment
-      statement, as in general the two pointers will not have the same
-      value.
-   }
-   \sstsynopsis{
-      AstObject $*$astClone( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Original pointer to the Object.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astClone()
-      }{
-         A duplicate pointer to the same Object.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astCmpFrame\sstlabel{astCmpFrame}
-}{
-   Create a CmpFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{CmpFrame}{CmpFrame} and optionally initialises
-      its attributes.
-
-      A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
-      (of any class) to be merged together to form a more complex
-      Frame. The axes of the two component Frames then appear together
-      in the resulting CmpFrame (those of the first Frame, followed by
-      those of the second Frame).
-
-      Since a CmpFrame is itself a Frame, it can be used as a
-      component in forming further CmpFrames. Frames of arbitrary
-      complexity may be built from simple individual Frames in this
-      way.
-
-      Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
-      Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
-      but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
-      (a sub-class of Frame), then the CmpFrame will use the Region as a
-      Mapping when transforming values for axes described by the Region.
-      Thus input axis values corresponding to positions which are outside the
-      Region will result in bad output axis values.
-   }
-   \sstsynopsis{
-      AstCmpFrame $*$astCmpFrame( AstFrame $*$frame1, AstFrame $*$frame2,
-                                const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame1
-      }{
-         Pointer to the first component Frame.
-      }
-      \sstsubsection{
-         frame2
-      }{
-         Pointer to the second component Frame.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new CmpFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astCmpFrame()
-      }{
-         A pointer to the new CmpFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astCmpMap\sstlabel{astCmpMap}
-}{
-   Create a CmpMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{CmpMap}{CmpMap} and optionally initialises
-      its attributes.
-
-      A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
-      Mappings (of any class) to be connected together to form a more
-      complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
-      (where the first Mapping is used to transform the coordinates of
-      each point and the second mapping is then applied to the
-      result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
-      earlier coordinates for each point and the second Mapping
-      simultaneously transforms the later coordinates).
-
-      Since a CmpMap is itself a Mapping, it can be used as a
-      component in forming further CmpMaps. Mappings of arbitrary
-      complexity may be built from simple individual Mappings in this
-      way.
-   }
-   \sstsynopsis{
-      AstCmpMap $*$astCmpMap( AstMapping $*$map1, AstMapping $*$map2, int series,
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         map1
-      }{
-         Pointer to the first component Mapping.
-      }
-      \sstsubsection{
-         map2
-      }{
-         Pointer to the second component Mapping.
-      }
-      \sstsubsection{
-         series
-      }{
-         If a non-zero value is given for this parameter, the two
-         component Mappings will be connected in series. A zero
-         value requests that they are connected in parallel.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new CmpMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astCmpMap()
-      }{
-         A pointer to the new CmpMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the component Mappings are connected in series, then using
-         the resulting CmpMap to transform coordinates will cause the
-         first Mapping to be applied, followed by the second Mapping. If
-         the inverse CmpMap transformation is requested, the two
-         component Mappings will be applied in both the reverse order and
-         the reverse direction.
-
-         \sstitem
-         When connecting two component Mappings in series, the number
-         of output coordinates generated by the first Mapping (its \htmlref{Nout}{Nout}
-         attribute) must equal the number of input coordinates accepted
-         by the second Mapping (its \htmlref{Nin}{Nin} attribute).
-
-         \sstitem
-         If the component Mappings of a CmpMap are connected in
-         parallel, then the first Mapping will be used to transform the
-         earlier input coordinates for each point (and to produce the
-         earlier output coordinates) and the second Mapping will be used
-         simultaneously to transform the remaining input coordinates (to
-         produce the remaining output coordinates for each point). If the
-         inverse transformation is requested, each Mapping will still be
-         applied to the same coordinates, but in the reverse direction.
-
-         \sstitem
-         When connecting two component Mappings in parallel, there is
-         no restriction on the number of input and output coordinates for
-         each Mapping.
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         astCmpMap (the new CmpMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a CmpMap containing a copy of its
-         component Mappings is required, then a copy of the CmpMap should
-         be made using \htmlref{astCopy}{astCopy}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astCmpRegion\sstlabel{astCmpRegion}
-}{
-   Create a CmpRegion
-}{
-   \sstdescription{
-      This function creates a new \htmlref{CmpRegion}{CmpRegion} and optionally initialises
-      its attributes.
-
-      A CmpRegion is a \htmlref{Region}{Region} which allows two component
-      Regions (of any class) to be combined to form a more complex
-      Region. This combination may be performed a boolean AND, OR
-      or XOR (exclusive OR) operator. If the AND operator is
-      used, then a position is inside the CmpRegion only if it is
-      inside both of its two component Regions. If the OR operator is
-      used, then a position is inside the CmpRegion if it is inside
-      either (or both) of its two component Regions. If the XOR operator
-      is used, then a position is inside the CmpRegion if it is inside
-      one but not both of its two component Regions. Other operators can
-      be formed by negating one or both component Regions before using
-      them to construct a new CmpRegion.
-
-      The two component Region need not refer to the same coordinate
-      \htmlref{Frame}{Frame}, but it must be possible for the
-      \htmlref{astConvert}{astConvert}
-      function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
-      reported otherwise when the CmpRegion is created). For instance,
-      a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
-      with a Region defined within a Galactic SkyFrame. This is
-      acceptable because the SkyFrame class knows how to convert between
-      these two systems, and consequently the
-      astConvert
-      function will also be able to convert between them. In such cases,
-      the second component Region will be mapped into the coordinate Frame
-      of the first component Region, and the Frame represented by the
-      CmpRegion as a whole will be the Frame of the first component Region.
-
-      Since a CmpRegion is itself a Region, it can be used as a
-      component in forming further CmpRegions. Regions of arbitrary
-      complexity may be built from simple individual Regions in this
-      way.
-   }
-   \sstsynopsis{
-      AstCmpRegion $*$astCmpRegion( AstRegion $*$region1, AstRegion $*$region2,
-                                  int oper, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         region1
-      }{
-         Pointer to the first component Region.
-      }
-      \sstsubsection{
-         region2
-      }{
-         Pointer to the second component Region. This Region will be
-         transformed into the coordinate Frame of the first region before
-         use. An error will be reported if this is not possible.
-      }
-      \sstsubsection{
-         oper
-      }{
-         The boolean operator with which to combine the two Regions. This
-         must be one of the symbolic constants AST\_\_AND, AST\_\_OR or AST\_\_XOR.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new CmpRegion. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astCmpRegion()
-      }{
-         A pointer to the new CmpRegion.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If one of the supplied Regions has an associated uncertainty,
-         that uncertainty will also be used for the returned CmpRegion.
-         If both supplied Regions have associated uncertainties, the
-         uncertainty associated with the first Region will be used for the
-         returned CmpRegion.
-
-         \sstitem
-         Deep copies are taken of the supplied Regions. This means that
-         any subsequent changes made to the component Regions using the
-         supplied pointers will have no effect on the CmpRegion.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astConvert\sstlabel{astConvert}
-}{
-   Determine how to convert between two coordinate systems
-}{
-   \sstdescription{
-      This function compares two Frames and determines whether it is
-      possible to convert between the coordinate systems which they
-      represent. If conversion is possible, it returns a \htmlref{FrameSet}{FrameSet}
-      which describes the conversion and which may be used (as a
-      \htmlref{Mapping}{Mapping}) to transform coordinate values in either direction.
-
-      The same function may also be used to determine how to convert
-      between two FrameSets (or between a \htmlref{Frame}{Frame} and a FrameSet, or
-      vice versa). This mode is intended for use when (for example)
-      two images have been calibrated by attaching a FrameSet to each.
-      astConvert might then be used to search for a
-      celestial coordinate system that both images have in common, and
-      the result could then be used to convert between the pixel
-      coordinates of both images -- having effectively used their
-      celestial coordinate systems to align them.
-
-      When using FrameSets, there may be more than one possible
-      intermediate coordinate system in which to perform the
-      conversion (for instance, two FrameSets might both have
-      celestial coordinates, detector coordinates, pixel coordinates,
-      etc.). A comma-separated list of coordinate system domains may
-      therefore be given which defines a priority order to use when
-      selecting the intermediate coordinate system.  The path used for
-      conversion must go via an intermediate coordinate system whose
-      \htmlref{Domain}{Domain} attribute matches one of the domains given. If conversion
-      cannot be achieved using the first domain, the next one is
-      considered, and so on, until success is achieved.
-   }
-   \sstsynopsis{
-      AstFrameSet $*$astConvert( AstFrame $*$from, AstFrame $*$to,
-                               const char $*$domainlist )
-   }
-   \sstparameters{
-      \sstsubsection{
-         from
-      }{
-         Pointer to a Frame which represents the {\tt{"}}source{\tt{"}} coordinate
-         system.  This is the coordinate system in which you already
-         have coordinates available.
-
-         If a FrameSet is given, its current Frame (as determined by
-         its \htmlref{Current}{Current} attribute) is taken to describe the source
-         coordinate system. Note that the \htmlref{Base}{Base} attribute of this
-         FrameSet may be modified by this function to indicate which
-         intermediate coordinate system was used (see under
-         {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
-      }
-      \sstsubsection{
-         to
-      }{
-         Pointer to a Frame which represents the {\tt{"}}destination{\tt{"}}
-         coordinate system. This is the coordinate system into which
-         you wish to convert your coordinates.
-
-         If a FrameSet is given, its current Frame (as determined by
-         its Current attribute) is taken to describe the destination
-         coordinate system. Note that the Base attribute of this
-         FrameSet may be modified by this function to indicate which
-         intermediate coordinate system was used (see under
-         {\tt{"}}FrameSets{\tt{"}} in the {\tt{"}}Applicability{\tt{"}} section for details).
-      }
-      \sstsubsection{
-         domainlist
-      }{
-         Pointer to a null-terminated character string containing a
-         comma-separated list of Frame domains. This may be used to
-         define a priority order for the different intermediate
-         coordinate systems that might be used to perform the
-         conversion.
-
-         The function will first try to obtain a conversion by making
-         use only of an intermediate coordinate system whose Domain
-         attribute matches the first domain in this list. If this
-         fails, the second domain in the list will be used, and so on,
-         until conversion is achieved. A blank domain (e.g. two
-         consecutive commas) indicates that all coordinate systems
-         should be considered, regardless of their domains.
-
-         This list is case-insensitive and all white space is ignored.
-         If you do not wish to restrict the domain in this way,
-         you should supply an empty string. This is normally
-         appropriate if either of the source or destination coordinate
-         systems are described by Frames (rather than FrameSets),
-         since there is then usually only one possible choice of
-         intermediate coordinate system.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         If the \htmlref{AlignSideBand}{AlignSideBand} attribute is non-zero, alignment occurs in the
-         upper sideband expressed within the spectral system and standard of
-         rest given by attributes \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}. If
-         AlignSideBand is zero, the two DSBSpecFrames are aligned as if
-         they were simple SpecFrames (i.e. the \htmlref{SideBand}{SideBand} is ignored).
-      }
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames. Alignment occurs within the
-         coordinate system given by attribute AlignSystem.
-      }
-      \sstsubsection{
-         FrameSet
-      }{
-         If either of the {\tt{"}}from{\tt{"}} or {\tt{"}}to{\tt{"}} parameters is a pointer to a
-         FrameSet, then astConvert will attempt to convert from the
-         coordinate system described by the current Frame of the {\tt{"}}from{\tt{"}}
-         FrameSet to that described by the current Frame of the {\tt{"}}to{\tt{"}}
-         FrameSet.
-
-         To achieve this, it will consider all of the Frames within
-         each FrameSet as a possible way of reaching an intermediate
-         coordinate system that can be used for the conversion. There
-         is then the possibility that more than one conversion path
-         may exist and, unless the choice is sufficiently restricted
-         by the {\tt{"}}domainlist{\tt{"}} string, the sequence in which the Frames
-         are considered can be important. In this case, the search
-         for a conversion path proceeds as follows:
-         \sstitemlist{
-
-            \sstitem
-            Each field in the {\tt{"}}domainlist{\tt{"}} string is considered in turn.
-
-            \sstitem
-            The Frames within each FrameSet are considered in a
-            specific order: (1) the base Frame is always considered
-            first, (2) after this come all the other Frames in
-            Frame-index order (but omitting the base and current Frames),
-            (3) the current Frame is always considered last.  However, if
-            either FrameSet's \htmlref{Invert}{Invert} attribute is set to a non-zero value
-            (so that the FrameSet is inverted), then its Frames are
-            considered in reverse order. (Note that this still means that
-            the base Frame is considered first and the current Frame
-            last, because the Invert value will also cause these Frames
-            to swap places.)
-
-            \sstitem
-            All source Frames are first considered (in the appropriate
-            order) for conversion to the first destination Frame. If no
-            suitable intermediate coordinate system emerges, they are
-            then considered again for conversion to the second
-            destination Frame (in the appropriate order), and so on.
-
-            \sstitem
-            Generally, the first suitable intermediate coordinate
-            system found is used. However, the overall Mapping between
-            the source and destination coordinate systems is also
-            examined.  Preference is given to cases where both the
-            forward and inverse transformations are defined (as indicated
-            by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes). If only one
-            transformation is defined, the forward one is preferred.
-
-            \sstitem
-            If the domain of the intermediate coordinate system matches
-            the current {\tt{"}}domainlist{\tt{"}} field, the conversion path is
-            accepted. Otherwise, the next {\tt{"}}domainlist{\tt{"}} field is considered
-            and the process repeated.
-
-         }
-         If conversion is possible, the Base attributes of the two
-         FrameSets will be modified on exit to identify the Frames
-         used to access the intermediate coordinate system which was
-         finally accepted.
-
-         Note that it is possible to force a particular Frame within a
-         FrameSet to be used as the basis for the intermediate
-         coordinate system, if it is suitable, by (a) focussing
-         attention on
-         it by specifying its domain in the {\tt{"}}domainlist{\tt{"}} string, or (b)
-         making it the base Frame, since this is always considered
-         first.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         Alignment occurs within the spectral system and standard of rest
-         given by attributes AlignSystem and AlignStdOfRest.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         Alignment occurs within the time system and time scale given by
-         attributes AlignSystem and \htmlref{AlignTimeScale}{AlignTimeScale}.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astConvert()
-      }{
-         If the requested coordinate conversion is possible, the
-         function returns a pointer to a FrameSet which describes the
-         conversion. Otherwise, a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is
-         returned without error.
-
-         If a FrameSet is returned, it will contain two Frames. Frame
-         number 1 (its base Frame) will describe the source coordinate
-         system, corresponding to the {\tt{"}}from{\tt{"}} parameter. Frame number 2
-         (its current Frame) will describe the destination coordinate
-         system, corresponding to the {\tt{"}}to{\tt{"}} parameter. The Mapping
-         which inter-relates these two Frames will perform the
-         required conversion between their respective coordinate
-         systems.
-
-         Note that a FrameSet may be used both as a Mapping and as a
-         Frame.  If the result is used as a Mapping (e.g. with
-         \htmlref{astTran2}{astTran2}), then it provides a means of converting coordinates
-         from the source to the destination coordinate system (or
-         vice versa if its inverse transformation is selected). If it
-         is used as a Frame, its attributes will describe the
-         destination coordinate system.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         cvt = astConvert( a, b, {\tt{"}}{\tt{"}} );
-      }{
-         Attempts to convert between the coordinate systems represented
-         by {\tt{"}}a{\tt{"}} and {\tt{"}}b{\tt{"}} (assumed to be Frames). If successful, a FrameSet
-         is returned via the {\tt{"}}cvt{\tt{"}} pointer which may be used to apply the
-         conversion to sets of coordinates (e.g. using astTran2).
-      }
-      \sstexamplesubsection{
-         cvt = astConvert( \htmlref{astSkyFrame}{astSkyFrame}({\tt{"}}{\tt{"}}), astSkyFrame({\tt{"}}\htmlref{Equinox}{Equinox}=2005{\tt{"}}), {\tt{"}}{\tt{"}} );
-      }{
-         Creates a FrameSet which describes precession in the default
-         FK5 celestial coordinate system between equinoxes J2000 (also
-         the default) and J2005. The returned {\tt{"}}cvt{\tt{"}} pointer may then
-         be passed to astTran2 to apply this precession correction to
-         any number of coordinate values given in radians.
-
-         Note that the returned FrameSet also contains information
-         about how to format coordinate values. This means that
-         setting its \htmlref{Report}{Report} attribute to 1 is a simple way to obtain
-         printed output (formatted in sexagesimal notation) to show
-         the coordinate values before and after conversion.
-      }
-      \sstexamplesubsection{
-         cvt = astConvert( a, b, {\tt{"}}sky,detector,{\tt{"}} );
-      }{
-         Attempts to convert between the coordinate systems
-         represented by the current Frames of {\tt{"}}a{\tt{"}} and {\tt{"}}b{\tt{"}}
-         (now assumed to be FrameSets), via the intermediate {\tt{"}}SKY{\tt{"}}
-         coordinate system.  This, by default, is the Domain
-         associated with a celestial coordinate system represented by
-         a \htmlref{SkyFrame}{SkyFrame}.
-
-         If this fails (for example, because either FrameSet lacks
-         celestial coordinate information), then the user-defined
-         {\tt{"}}DETECTOR{\tt{"}} coordinate system is used instead. If this also
-         fails, then all other possible ways of achieving conversion
-         are considered before giving up.
-
-         The returned pointer {\tt{"}}cvt{\tt{"}} indicates whether conversion was
-         possible and will have the value AST\_\_NULL if it was not. If
-         conversion was possible, {\tt{"}}cvt{\tt{"}} will point at a new FrameSet
-         describing the conversion.
-
-         The Base attributes of the two FrameSets
-         will be set by astConvert to indicate which of their Frames was
-         used for the intermediate coordinate system. This means that
-         you can subsequently determine which coordinate system was
-         used by enquiring the Domain attribute of either base Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping represented by the returned FrameSet results in
-         alignment taking place in the coordinate system specified by the
-         AlignSystem attribute of the {\tt{"}}to{\tt{"}} Frame. See the description of the
-         AlignSystem attribute for further details.
-
-         \sstitem
-         When aligning (say) two images, which have been calibrated by
-         attaching FrameSets to them, it is usually necessary to convert
-         between the base Frames (representing {\tt{"}}native{\tt{"}} pixel
-         coordinates) of both FrameSets. This may be achieved by
-         inverting the FrameSets (e.g. using \htmlref{astInvert}{astInvert}) so as to
-         interchange their base and current Frames before using
-         astConvert.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astCopy\sstlabel{astCopy}
-}{
-   Copy an Object
-}{
-   \sstdescription{
-      This function creates a copy of an \htmlref{Object}{Object} and returns a pointer
-      to the resulting new Object. It makes a {\tt{"}}deep{\tt{"}} copy, which
-      contains no references to any other Object (i.e. if the original
-      Object contains references to other Objects, then the actual
-      data are copied, not simply the references). This means that
-      modifications may safely be made to the copy without indirectly
-      affecting any other Object.
-   }
-   \sstsynopsis{
-      AstObject $*$astCopy( const AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object to be copied.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astCopy()
-      }{
-         Pointer to the new Object.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astCurrentTime\sstlabel{astCurrentTime}
-}{
-   Return the current system time
-}{
-   \sstdescription{
-      This function
-      returns the current system time, represented in the form specified
-      by the supplied \htmlref{TimeFrame}{TimeFrame}. That is, the returned floating point
-      value should be interpreted using the attribute values of the
-      TimeFrame. This includes \htmlref{System}{System}, \htmlref{TimeOrigin}{TimeOrigin}, \htmlref{LTOffset}{LTOffset}, \htmlref{TimeScale}{TimeScale},
-      and Unit.
-   }
-   \sstsynopsis{
-      double astCurrentTime( AstTimeFrame $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the TimeFrame.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astCurrentTime()
-      }{
-         A TimeFrame axis value representing the current system time.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Values of AST\_\_BAD will be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-
-         \sstitem
-         It is assumes that the system time (returned by the C time()
-         function) follows the POSIX standard, representing a continuous
-         monotonic increasing count of SI seconds since the epoch 00:00:00
-         UTC 1 January 1970 AD (equivalent to TAI with a constant offset).
-         Resolution is one second.
-
-         \sstitem
-         An error will be reported if the TimeFrame has a TimeScale value
-         which cannot be converted to TAI (e.g. {\tt{"}}angular{\tt{"}} systems such as
-         UT1, GMST, LMST and LAST).
-
-         \sstitem
-         Any inaccuracy in the system clock will be reflected in the value
-         returned by this function.
-      }
-   }
-}
-\sstroutine{
-   astCurve\sstlabel{astCurve}
-}{
-   Draw a geodesic curve
-}{
-   \sstdescription{
-      This function draws a geodesic curve between two points in the
-      physical coordinate system of a \htmlref{Plot}{Plot}.  The curve drawn is the
-      path of shortest distance joining the two points (as defined by
-      the \htmlref{astDistance}{astDistance} function for the current \htmlref{Frame}{Frame} of the Plot).
-      For example, if the current Frame is a basic Frame, then the
-      curve joining the two points will be a straight line in physical
-      coordinate space.  If the current Frame is more specialised and
-      describes, for instance, a sky coordinate system, then the
-      geodesic curve would be a great circle in physical coordinate
-      space passing through the two sky positions given.
-
-      Note that the geodesic curve is transformed into graphical
-      coordinate space for plotting, so that a straight line in
-      physical coordinates may result in a curved line being drawn if
-      the \htmlref{Mapping}{Mapping} involved is non-linear. Any discontinuities in the
-      Mapping between physical and graphical coordinates are
-      catered for, as is any clipping established using \htmlref{astClip}{astClip}.
-
-      If you need to draw many geodesic curves end-to-end, then the
-      \htmlref{astPolyCurve}{astPolyCurve} function is equivalent to repeatedly using
-      astCurve, but will usually be more efficient.
-
-      If you need to draw curves which are not geodesics, see \htmlref{astGenCurve}{astGenCurve}
-      or \htmlref{astGridLine}{astGridLine}.
-   }
-   \sstsynopsis{
-      void astCurve( AstPlot $*$this, const double start[],
-                                    const double finish[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         start
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the first point on the geodesic
-         curve.
-      }
-      \sstsubsection{
-         finish
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the second point on the geodesic
-         curve.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No curve is drawn if either of the {\tt{"}}start{\tt{"}} or {\tt{"}}finish{\tt{"}} arrays
-         contains any coordinates with the value AST\_\_BAD.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astDSBSpecFrame\sstlabel{astDSBSpecFrame}
-}{
-   Create a DSBSpecFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{DSBSpecFrame}{DSBSpecFrame} and optionally initialises its
-      attributes.
-
-      A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
-      positions in a spectrum obtained using a dual sideband instrument.
-      Such an instrument produces a spectrum in which each point contains
-      contributions from two distinctly different frequencies, one from
-      the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
-      Corresponding LSB and USB frequencies are connected by the fact
-      that they are an equal distance on either side of a fixed central
-      frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
-      When quoting a position within such a spectrum, it is necessary to
-      indicate whether the quoted position is the USB position or the
-      corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
-      indication. Another option that the SideBand attribute provides is
-      to represent a spectral position by its topocentric offset from the
-      LO frequency.
-
-      In practice, the LO frequency is specified by giving the distance
-      from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
-      this central position is that of some interesting spectral feature.
-      The distance from this central position to the LO frequency is known
-      as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
-      be a signed value in order to indicate whether the LO frequency is
-      above or below the central position.
-   }
-   \sstsynopsis{
-      AstDSBSpecFrame $*$astDSBSpecFrame( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new DSBSpecFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astDSBSpecFrame()
-      }{
-         A pointer to the new DSBSpecFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astDecompose\sstlabel{astDecompose}
-}{
-   Decompose a Mapping into two component Mappings
-}{
-   \sstdescription{
-      This function returns pointers to two Mappings which, when applied
-      either in series or parallel, are equivalent to the supplied \htmlref{Mapping}{Mapping}.
-
-      Since the \htmlref{Frame}{Frame} class inherits from the Mapping class, Frames can
-      be considered as special types of Mappings and so this method can
-      be used to decompose either CmpMaps or CmpFrames.
-   }
-   \sstsynopsis{
-      void astDecompose( AstMapping $*$this, AstMapping $*$$*$map1,
-                         AstMapping $*$$*$map2, int $*$series, int $*$invert1,
-                         int $*$invert2  )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         map1
-      }{
-         Address of a location to receive a pointer to first component
-         Mapping.
-      }
-      \sstsubsection{
-         map2
-      }{
-         Address of a location to receive a pointer to second component
-         Mapping.
-      }
-      \sstsubsection{
-         series
-      }{
-         Address of a location to receive a value indicating if the
-         component Mappings are applied in series or parallel. A non-zero
-         value means that the supplied Mapping is equivalent to applying map1
-         followed by map2 in series. A zero value means that the supplied
-         Mapping is equivalent to applying map1 to the lower numbered axes
-         and map2 to the higher numbered axes, in parallel.
-      }
-      \sstsubsection{
-         invert1
-      }{
-         The value of the \htmlref{Invert}{Invert} attribute to be used with map1.
-      }
-      \sstsubsection{
-         invert2
-      }{
-         The value of the Invert attribute to be used with map2.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         If the supplied Mapping is a CmpMap, then map1 and map2 will be
-         returned holding pointers to the component Mappings used to
-         create the CmpMap, either in series or parallel. Note, changing
-         the Invert attribute of either of the component Mappings using
-         the returned pointers will have no effect on the supplied CmpMap.
-         This is because the CmpMap remembers and uses the original settings
-         of the Invert attributes (that is, the values of the Invert
-         attributes when the CmpMap was first created). These are the
-         Invert values which are returned in invert1 and invert2.
-      }
-      \sstsubsection{
-         \htmlref{TranMap}{TranMap}
-      }{
-         If the supplied Mapping is a TranMap, then map1 and map2 will be
-         returned holding pointers to the forward and inverse Mappings
-         represented by the TranMap (zero will be returned for
-         series).
-         Note, changing the Invert attribute of
-         either of the component Mappings using the returned pointers will
-         have no effect on the supplied TranMap. This is because the TranMap
-         remembers and uses the original settings of the Invert attributes
-         (that is, the values of the Invert attributes when the TranMap was
-         first created). These are the
-         Invert values which are returned in invert1 and invert2.
-      }
-      \sstsubsection{
-         Mapping
-      }{
-         For any class of Mapping other than a CmpMap, map1 will be
-         returned holding a clone of the supplied Mapping pointer, and map2
-         will be returned holding a NULL pointer. Invert1 will be returned
-         holding the current value of the Invert attribute for the supplied
-         Mapping, and invert2 will be returned holding zero.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         If the supplied Mapping is a CmpFrame, then map1 and map2 will be
-         returned holding pointers to the component Frames used to
-         create the CmpFrame. The component Frames are considered to be in
-         applied in parallel.
-      }
-      \sstsubsection{
-         Frame
-      }{
-         For any class of Frame other than a CmpFrame, map1 will be
-         returned holding a clone of the supplied Frame pointer, and map2
-         will be returned holding a NULL pointer.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned Invert values should be used in preference to the
-         current values of the Invert attribute in map1 and map2. This is
-         because the attributes may have changed value since the Mappings
-         were combined.
-
-         \sstitem
-         Any changes made to the component Mappings using the returned
-         pointers will be reflected in the supplied Mapping.
-      }
-   }
-}
-\sstroutine{
-   astDelFits\sstlabel{astDelFits}
-}{
-   Delete the current FITS card in a FitsChan
-}{
-   \sstdescription{
-      This function deletes the current FITS card from a \htmlref{FitsChan}{FitsChan}. The
-      current card may be selected using the \htmlref{Card}{Card} attribute (if its index
-      is known) or by using \htmlref{astFindFits}{astFindFits} (if only the FITS keyword is
-      known).
-
-      After deletion, the following card becomes the current card.
-   }
-   \sstsynopsis{
-      void astDelFits( AstFitsChan $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function returns without action if the FitsChan is
-         initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the Card
-         attribute exceeds the number of cards in the FitsChan).
-
-         \sstitem
-         If there are no subsequent cards in the FitsChan, then the
-         Card attribute is left pointing at the {\tt{"}}end-of-file{\tt{"}} after
-         deletion (i.e. is set to one more than the number of cards in
-         the FitsChan).
-      }
-   }
-}
-\sstroutine{
-   astDelete\sstlabel{astDelete}
-}{
-   Delete an Object
-}{
-   \sstdescription{
-      This function deletes an \htmlref{Object}{Object}, freeing all resources
-      associated with it and rendering any remaining pointers to the
-      Object invalid.
-
-      Note that deletion is unconditional, regardless of whether other
-      pointers to the Object are still in use (possibly within other
-      Objects). A safer approach is to defer deletion, until all
-      references to an Object have expired, by using \htmlref{astBegin}{astBegin}/\htmlref{astEnd}{astEnd}
-      (together with \htmlref{astClone}{astClone} and \htmlref{astAnnul}{astAnnul} if necessary).
-   }
-   \sstsynopsis{
-      AstObject $*$astDelete( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object to be deleted.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astDelete()
-      }{
-         A null Object pointer (AST\_\_NULL) is always returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function attempts to execute even if the AST error status
-         is set
-         on entry, although no further error report will be
-         made if it subsequently fails under these circumstances.
-      }
-   }
-}
-\sstroutine{
-   astDistance\sstlabel{astDistance}
-}{
-   Calculate the distance between two points in a Frame
-}{
-   \sstdescription{
-      This function finds the distance between two points whose \htmlref{Frame}{Frame}
-      coordinates are given. The distance calculated is that along
-      the geodesic curve that joins the two points.
-
-      For example, in a basic Frame, the distance calculated will be
-      the Cartesian distance along the straight line joining the two
-      points. For a more specialised Frame describing a sky coordinate
-      system, however, it would be the distance along the great circle
-      passing through two sky positions.
-   }
-   \sstsynopsis{
-      double astDistance( AstFrame $*$this,
-                          const double point1[], const double point2[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         point1
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the coordinates of the first point.
-      }
-      \sstsubsection{
-         point2
-      }{
-         An array of double, with one element for each Frame axis
-         containing the coordinates of the second point.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astDistance
-      }{
-         The distance between the two points.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function will return a {\tt{"}}bad{\tt{"}} result value (AST\_\_BAD) if
-         any of the input coordinates has this value.
-
-         \sstitem
-         A {\tt{"}}bad{\tt{"}} value will also be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   astDownsize\sstlabel{astDownsize}
-}{
-   Reduce the number of vertices in a Polygon
-}{
-   \sstdescription{
-      This function returns a pointer to a new \htmlref{Polygon}{Polygon} that contains a
-      subset of the vertices in the supplied Polygon. The subset is
-      chosen so that the returned Polygon is a good approximation to
-      the supplied Polygon, within the limits specified by the supplied
-      parameter values. That is, the density of points in the returned
-      Polygon is greater at points where the curvature of the boundary of
-      the supplied Polygon is greater.
-   }
-   \sstsynopsis{
-      AstPolygon $*$astDownsize( AstPolygon $*$this, double maxerr, int maxvert )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Polygon.
-      }
-      \sstsubsection{
-         maxerr
-      }{
-         The maximum allowed discrepancy between the supplied and
-         returned Polygons, expressed as a geodesic distance within the
-         Polygon's coordinate frame. If this is zero or less, the
-         returned Polygon will have the number of vertices specified by
-         maxvert.
-      }
-      \sstsubsection{
-         maxvert
-      }{
-         The maximum allowed number of vertices in the returned Polygon.
-         If this is less than 3, the number of vertices in the returned
-         Polygon will be the minimum needed to achieve the maximum
-         discrepancy specified by
-         maxerr.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astDownsize()
-      }{
-         Pointer to the new Polygon.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astEllipse\sstlabel{astEllipse}
-}{
-   Create a Ellipse
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Ellipse}{Ellipse} and optionally initialises its
-      attributes.
-
-      A Ellipse is a \htmlref{Region}{Region} which represents a elliptical area within the
-      supplied 2-dimensional \htmlref{Frame}{Frame}.
-   }
-   \sstsynopsis{
-      AstEllipse $*$astEllipse( AstFrame $*$frame, int form, const double centre[2],
-                              const double point1[2], const double point2[2],
-                              AstRegion $*$unc, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame in which the region is defined. It must
-         have exactly 2 axes. A deep copy is taken of the supplied Frame.
-         This means that any subsequent changes made to the Frame using the
-         supplied pointer will have no effect the Region.
-      }
-      \sstsubsection{
-         form
-      }{
-         Indicates how the ellipse is described by the remaining parameters.
-         A value of zero indicates that the ellipse is specified by a
-         centre position and two positions on the circumference. A value of
-         one indicates that the ellipse is specified by its centre position,
-         the half-lengths of its two axes, and the orientation of its first
-         axis.
-      }
-      \sstsubsection{
-         centre
-      }{
-         An array of 2 doubles,
-         containing the coordinates at the centre of
-         the ellipse.
-      }
-      \sstsubsection{
-         point1
-      }{
-         An array of 2 doubles. If {\tt{"}}form{\tt{"}}
-         is zero, this array should contain the coordinates of one of the four
-         points where an axis of the ellipse crosses the circumference of the
-         ellipse.
-         If {\tt{"}}form{\tt{"}}
-         is one, it should contain the lengths of semi-major and
-         semi-minor axes of the ellipse, given as geodesic distances
-         within the Frame.
-      }
-      \sstsubsection{
-         point2
-      }{
-         An array of 2 doubles. If {\tt{"}}form{\tt{"}}
-         is zero, this array should containing the coordinates at some other
-         point on the circumference of the ellipse, distinct from
-         {\tt{"}}point1{\tt{"}}. If {\tt{"}}form{\tt{"}}
-         is one, the first element of this array should hold the angle
-         between the second axis of the Frame and the first ellipse axis
-         (i.e. the ellipse axis which is specified first in the
-         {\tt{"}}point1{\tt{"}}
-         array), and the second element will be ignored. The angle should be
-         given in radians, measured positive in the same sense as rotation
-         from the positive direction of the second Frame axis to the positive
-         direction of the first Frame axis.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, Ellipse, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{astOverlap}{astOverlap}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{astSimplify}{astSimplify}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Ellipse. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astEllipse()
-      }{
-         A pointer to the new Ellipse.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astEllipsePars\sstlabel{astEllipsePars}
-}{
-   Returns the geometric parameters of an Ellipse
-}{
-   \sstdescription{
-      This function
-      returns the geometric parameters describing the supplied ellipse.
-   }
-   \sstsynopsis{
-      void astEllipsePars( AstEllipse $*$this, double centre[2], double $*$a,
-                           double $*$b, double $*$angle, double p1[2], double p2[2] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         centre
-      }{
-         The coordinates of the \htmlref{Ellipse}{Ellipse} centre are returned in this arrays.
-      }
-      \sstsubsection{
-         a
-      }{
-         Returned holding the half-length of the first axis of the
-         ellipse.
-      }
-      \sstsubsection{
-         b
-      }{
-         Returned holding the half-length of the second axis of the
-         ellipse.
-      }
-      \sstsubsection{
-         angle
-      }{
-         If the coordinate system in which the Ellipse is defined has
-         axes (X,Y), then
-         {\tt{"}}$*$angle{\tt{"}}
-         is returned holding the angle from the positive direction of
-         the Y axis to the first axis of the ellipse, in radians.
-         Positive rotation is in the same sense as rotation from the
-         positive direction of Y to the positive direction of X.
-      }
-      \sstsubsection{
-         p1
-      }{
-         An array in which to return the coordinates at one of the two ends
-         of the first axis  of the ellipse.
-         A NULL pointer can be supplied if these coordinates are not needed.
-      }
-      \sstsubsection{
-         p2
-      }{
-         An array in which to return the coordinates at one of the two ends
-         of the second axis  of the ellipse.
-         A NULL pointer can be supplied if these coordinates are not needed.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the coordinate system represented by the Ellipse has been
-         changed since it was first created, the returned parameters refer
-         to the new (changed) coordinate system, rather than the original
-         coordinate system. Note however that if the transformation from
-         original to new coordinate system is non-linear, the shape
-         represented by the supplied Ellipse object may not be an accurate
-         ellipse.
-
-         \sstitem
-         Values of AST\_\_BAD are returned for the parameters without error
-         if the ellipse is degenerate or undefined.
-      }
-   }
-}
-\sstroutine{
-   astEnd\sstlabel{astEnd}
-}{
-   End an AST context
-}{
-   \sstdescription{
-      This macro invokes a function to end an AST context which was
-      begun with a matching invocation of \htmlref{astBegin}{astBegin}. Any \htmlref{Object}{Object}
-      pointers created within this context will be annulled (just as
-      if \htmlref{astAnnul}{astAnnul} had been invoked) and will cease to be valid
-      afterwards, unless they have previously been exported using
-      \htmlref{astExport}{astExport} or rendered exempt using \htmlref{astExempt}{astExempt}.
-      If annulling a pointer causes an Object's \htmlref{RefCount}{RefCount} attribute to
-      fall to zero (which happens when the last pointer to it is
-      annulled), then the Object will be deleted.
-   }
-   \sstsynopsis{
-      void astEnd
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This macro applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         astEnd attempts to execute even if the AST error status is set.
-
-         \sstitem
-         Contexts delimited by astBegin and astEnd may be nested to any
-         depth.
-      }
-   }
-}
-\sstroutine{
-   astEscapes\sstlabel{astEscapes}
-}{
-   Control whether graphical escape sequences are included in strings
-}{
-   \sstdescription{
-      The \htmlref{Plot}{Plot} class defines a set of escape sequences which can be
-      included within a text string in order to control the appearance of
-      sub-strings within the text. See the \htmlref{Escape}{Escape} attribute for a
-      description of these escape sequences. It is usually inappropriate
-      for AST to return strings containing such escape sequences when
-      called by application code. For instance, an application which
-      displays the value of the \htmlref{Title}{Title} attribute of a \htmlref{Frame}{Frame} usually does
-      not want the displayed string to include potentially long escape
-      sequences which a human read would have difficuly interpreting.
-      Therefore the default behaviour is for AST to strip out such escape
-      sequences when called by application code. This default behaviour
-      can be changed using this function.
-   }
-   \sstsynopsis{
-      int astEscapes( int new\_value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         new\_value
-      }{
-         A flag which indicates if escapes sequences should be included
-         in returned strings. If zero is supplied, escape sequences will
-         be stripped out of all strings returned by any AST function. If
-         a positive value is supplied, then any escape sequences will be
-         retained in the value returned to the caller. If a negative
-         value is supplied, the current value of the flag will be left
-         unchanged.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Object}{Object}
-      }{
-         This macro applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astEscapes
-      }{
-         The value of the flag on entry to this function.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function also controls whether the
-         \htmlref{astStripEscapes}{astStripEscapes}
-         function removes escape sequences from the supplied string, or
-         returns the supplied string without change.
-
-         \sstitem
-         This function attempts to execute even if an error has already
-         occurred.
-      }
-   }
-}
-\sstroutine{
-   astExempt\sstlabel{astExempt}
-}{
-   Exempt an Object pointer from AST context handling
-}{
-   \sstdescription{
-      This function exempts an \htmlref{Object}{Object} pointer from AST context
-      handling, as implemented by \htmlref{astBegin}{astBegin} and \htmlref{astEnd}{astEnd}. This means that
-      the pointer will not be affected when astEnd is invoked and will
-      remain active until the end of the program, or until explicitly
-      annulled using \htmlref{astAnnul}{astAnnul}.
-
-      If possible, you should avoid using this function when writing
-      applications. It is provided mainly for developers of other
-      libraries, who may wish to retain references to AST Objects in
-      internal data structures, and who therefore need to avoid the
-      effects of astBegin and astEnd.
-   }
-   \sstsynopsis{
-      void astExempt( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Object pointer to be exempted from context handling.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-}
-\sstroutine{
-   astExport\sstlabel{astExport}
-}{
-   Export an Object pointer to an outer context
-}{
-   \sstdescription{
-      This function exports an \htmlref{Object}{Object} pointer from the current AST context
-      into the context that encloses the current one. This means that
-      the pointer will no longer be annulled when the current context
-      is ended (with \htmlref{astEnd}{astEnd}), but only when the next outer context (if
-      any) ends.
-   }
-   \sstsynopsis{
-      void astExport( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Object pointer to be exported.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         It is only sensible to apply this function to pointers that
-         have been created within (or exported to) the current context
-         and have not been rendered exempt using \htmlref{astExempt}{astExempt}.
-         Applying it to an unsuitable Object pointer has no effect.
-      }
-   }
-}
-\sstroutine{
-   astFindFits\sstlabel{astFindFits}
-}{
-   Find a FITS card in a FitsChan by keyword
-}{
-   \sstdescription{
-      This function searches for a card in a \htmlref{FitsChan}{FitsChan} by keyword. The
-      search commences at the current card (identified by the \htmlref{Card}{Card}
-      attribute) and ends when a card is found whose FITS keyword
-      matches the template supplied, or when the last card in the
-      FitsChan has been searched.
-
-      If the search is successful (i.e. a card is found which matches
-      the template), the contents of the card are (optionally)
-      returned and the Card attribute is adjusted to identify the card
-      found or, if required, the one following it. If the search is
-      not successful, the function returns zero and the Card attribute
-      is set to the {\tt{"}}end-of-file{\tt{"}}.
-   }
-   \sstsynopsis{
-      int astFindFits( AstFitsChan $*$this, const char $*$name, char card[ 81 ],
-                       int inc )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated character string containing a
-         template for the keyword to be found. In the simplest case,
-         this should simply be the keyword name (the search is case
-         insensitive and trailing spaces are ignored). However, this
-         template may also contain {\tt{"}}field specifiers{\tt{"}} which are
-         capable of matching a range of characters (see the {\tt{"}}Keyword
-         Templates{\tt{"}} section for details). In this case, the first card
-         with a keyword which matches the template will be found. To
-         find the next FITS card regardless of its keyword, you should
-         use the template {\tt{"}}\%f{\tt{"}}.
-      }
-      \sstsubsection{
-         card
-      }{
-         An array of at least 81 characters (to allow room for a
-         terminating null)
-         in which the FITS card which is found will be returned.  If
-         the search is not successful (or a NULL pointer is given), a
-         card will not be returned.
-      }
-      \sstsubsection{
-         inc
-      }{
-         If this value is zero (and the search is successful), the
-         FitsChan's Card attribute will be set to the index of the card
-         that was found. If it is non-zero, however, the Card
-         attribute will be incremented to identify the card which
-         follows the one found.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFindFits()
-      }{
-         One if the search was successful, otherwise zero.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         result = astFindFits( fitschan, {\tt{"}}\%f{\tt{"}}, card, 1 );
-      }{
-         Returns the current card in a FitsChan and advances the Card
-         attribute to identify the card that follows (the {\tt{"}}\%f{\tt{"}}
-         template matches any keyword).
-      }
-      \sstexamplesubsection{
-         result = astFindFits( fitschan, {\tt{"}}BITPIX{\tt{"}}, card, 1 );
-      }{
-         Searches a FitsChan for a FITS card with the {\tt{"}}BITPIX{\tt{"}} keyword
-         and returns that card. The Card attribute is then incremented
-         to identify the card that follows it.
-      }
-      \sstexamplesubsection{
-         result = astFindFits( fitschan, {\tt{"}}COMMENT{\tt{"}}, NULL, 0 );
-      }{
-         Sets the Card attribute of a FitsChan to identify the next
-         COMMENT card (if any). The card itself is not returned.
-      }
-      \sstexamplesubsection{
-         result = astFindFits( fitschan, {\tt{"}}CRVAL\%1d{\tt{"}}, card, 1 );
-      }{
-         Searches a FitsChan for the next card with a keyword of the
-         form {\tt{"}}CRVALi{\tt{"}} (for example, any of the keywords {\tt{"}}CRVAL1{\tt{"}},
-         {\tt{"}}CRVAL2{\tt{"}} or {\tt{"}}CRVAL3{\tt{"}} would be matched). The card found (if
-         any) is returned, and the Card attribute is then incremented
-         to identify the following card (ready to search for another
-         keyword with the same form, perhaps).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The search always starts with the current card, as identified
-         by the Card attribute. To ensure you search the entire contents
-         of a FitsChan, you should first clear the Card attribute (using
-         \htmlref{astClear}{astClear}). This effectively {\tt{"}}rewinds{\tt{"}} the FitsChan.
-
-         \sstitem
-         If a search is unsuccessful, the Card attribute is set to the
-         {\tt{"}}end-of-file{\tt{"}} (i.e. to one more than the number of cards in the
-         FitsChan). No error occurs.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Keyword Templates
-   }{
-      The templates used to match FITS keywords are normally composed
-      of literal characters, which must match the keyword exactly
-      (apart from case). However, a template may also contain {\tt{"}}field
-      specifiers{\tt{"}} which can match a range of possible characters. This
-      allows you to search for keywords that contain (for example)
-      numbers, where the digits comprising the number are not known in
-      advance.
-
-      A field specifier starts with a {\tt{"}}\%{\tt{"}} character. This is followed
-      by an optional single digit (0 to 9) specifying a field
-      width. Finally, there is a single character which specifies the
-      type of character to be matched, as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}c{\tt{"}}: matches all upper case letters,
-
-         \sstitem
-         {\tt{"}}d{\tt{"}}: matches all decimal digits,
-
-         \sstitem
-         {\tt{"}}f{\tt{"}}: matches all characters which are permitted within a FITS
-         keyword (upper case letters, digits, underscores and hyphens).
-
-      }
-      If the field width is omitted, the field specifier matches one
-      or more characters. If the field width is zero, it matches zero
-      or more characters. Otherwise, it matches exactly the number of
-      characters specified. In addition to this:
-
-      \sstitemlist{
-
-         \sstitem
-         The template {\tt{"}}\%f{\tt{"}} will match a blank FITS keyword consisting
-         of 8 spaces (as well as matching all other keywords).
-
-         \sstitem
-         A template consisting of 8 spaces will match a blank keyword
-         (only).
-
-      }
-      For example:
-
-      \sstitemlist{
-
-         \sstitem
-         The template {\tt{"}}BitPix{\tt{"}} will match the keyword {\tt{"}}BITPIX{\tt{"}} only.
-
-         \sstitem
-         The template {\tt{"}}crpix\%1d{\tt{"}} will match keywords consisting of
-         {\tt{"}}CRPIX{\tt{"}} followed by one decimal digit.
-
-         \sstitem
-         The template {\tt{"}}P\%c{\tt{"}} will match any keyword starting with {\tt{"}}P{\tt{"}}
-         and followed by one or more letters.
-
-         \sstitem
-         The template {\tt{"}}E\%0f{\tt{"}} will match any keyword beginning with {\tt{"}}E{\tt{"}}.
-
-         \sstitem
-         The template {\tt{"}}\%f{\tt{"}} will match any keyword at all (including a
-         blank one).
-      }
-   }
-}
-\sstroutine{
-   astFindFrame\sstlabel{astFindFrame}
-}{
-   Find a coordinate system with specified characteristics
-}{
-   \sstdescription{
-      This function uses a {\tt{"}}template{\tt{"}} \htmlref{Frame}{Frame} to search another Frame
-      (or \htmlref{FrameSet}{FrameSet}) to identify a coordinate system which has a
-      specified set of characteristics. If a suitable coordinate
-      system can be found, the function returns a pointer to a
-      FrameSet which describes the required coordinate system and how
-      to convert coordinates to and from it.
-
-      This function is provided to help answer general questions about
-      coordinate systems, such as typically arise when coordinate
-      information is imported into a program as part of an initially
-      unknown dataset. For example:
-      \sstitemlist{
-
-         \sstitem
-         Is there a wavelength scale?
-
-         \sstitem
-         Is there a 2-dimensional coordinate system?
-
-         \sstitem
-         Is there a celestial coordinate system?
-
-         \sstitem
-         Can I plot the data in ecliptic coordinates?
-
-      }
-      You can also use this function as a means of reconciling a
-      user's preference for a particular coordinate system (for
-      example, what type of axes to draw) with what is actually
-      possible given the coordinate information available.
-
-      To perform a search, you supply a {\tt{"}}target{\tt{"}} Frame (or FrameSet)
-      which represents the set of coordinate systems to be searched.
-      If a basic Frame is given as the target, this set of coordinate
-      systems consists of the one described by this Frame, plus all
-      other {\tt{"}}virtual{\tt{"}} coordinate systems which can potentially be
-      reached from it by applying built-in conversions (for example,
-      any of the celestial coordinate conversions known to the AST
-      library would constitute a {\tt{"}}built-in{\tt{"}} conversion). If a FrameSet
-      is given as the target, the set of coordinate systems to be
-      searched consists of the union of those represented by all the
-      individual Frames within it.
-
-      To select from this large set of possible coordinate systems,
-      you supply a {\tt{"}}template{\tt{"}} Frame which is an instance of the type
-      of Frame you are looking for. Effectively, you then ask the
-      function to {\tt{"}}find a coordinate system that looks like this{\tt{"}}.
-
-      You can make your request more or less specific by setting
-      attribute values for the template Frame. If a particular
-      attribute is set in the template, then the function will only
-      find coordinate systems which have exactly the same value for
-      that attribute.  If you leave a template attribute un-set,
-      however, then the function has discretion about the value the
-      attribute should have in any coordinate system it finds. The
-      attribute will then take its value from one of the actual
-      (rather than virtual) coordinate systems in the target. If the
-      target is a FrameSet, its \htmlref{Current}{Current} attribute will be modified to
-      indicate which of its Frames was used for this purpose.
-
-      The result of this process is a coordinate system represented by
-      a hybrid Frame which acquires some attributes from the template
-      (but only if they were set) and the remainder from the
-      target. This represents the {\tt{"}}best compromise{\tt{"}} between what you
-      asked for and what was available. A \htmlref{Mapping}{Mapping} is then generated
-      which converts from the target coordinate system to this hybrid
-      one, and the returned FrameSet encapsulates all of this
-      information.
-   }
-   \sstsynopsis{
-      AstFrameSet $*$astFindFrame( AstFrame $*$target, AstFrame $*$template,
-                                 const char $*$domainlist )
-   }
-   \sstparameters{
-      \sstsubsection{
-         target
-      }{
-         Pointer to the target Frame (or FrameSet).
-
-         Note that if a FrameSet is supplied (and a suitable
-         coordinate system is found), then its Current attribute will
-         be modified to indicate which Frame was used to obtain
-         attribute values which were not specified by the template.
-         This Frame will, in some sense, represent the {\tt{"}}closest{\tt{"}}
-         non-virtual coordinate system to the one you requested.
-      }
-      \sstsubsection{
-         template
-      }{
-         Pointer to the template Frame, which should be an instance of
-         the type of Frame you wish to find. If you wanted to find a
-         Frame describing a celestial coordinate system, for example,
-         then you might use a \htmlref{SkyFrame}{SkyFrame} here. See the {\tt{"}}Examples{\tt{"}}
-         section for more ideas.
-      }
-      \sstsubsection{
-         domainlist
-      }{
-         Pointer to a null-terminated character string containing a
-         comma-separated list of Frame domains. This may be used to
-         establish a priority order for the different types of
-         coordinate system that might be found.
-
-         The function will first try to find a suitable coordinate
-         system whose \htmlref{Domain}{Domain} attribute equals the first domain in this
-         list. If this fails, the second domain in the list will be
-         used, and so on, until a result is obtained. A blank domain
-         (e.g. two consecutive commas) indicates that any coordinate
-         system is acceptable (subject to the template) regardless of
-         its domain.
-
-         This list is case-insensitive and all white space is ignored.
-         If you do not wish to restrict the domain in this way,
-         you should supply an empty string.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames.
-      }
-      \sstsubsection{
-         FrameSet
-      }{
-         If the target is a FrameSet, the possibility exists that
-         several of the Frames within it might be matched by the
-         template.  Unless the choice is sufficiently restricted by
-         the {\tt{"}}domainlist{\tt{"}} string, the sequence in which Frames are
-         searched can then become important. In this case, the search
-         proceeds as follows:
-         \sstitemlist{
-
-            \sstitem
-            Each field in the {\tt{"}}domainlist{\tt{"}} string is considered in turn.
-
-            \sstitem
-            An attempt is made to match the template to each of the
-            target's Frames in the order: (1) the current Frame, (2) the
-            base Frame, (3) each remaining Frame in the order of being
-            added to the target FrameSet.
-
-            \sstitem
-            Generally, the first match found is used. However, the
-            Mapping between the target coordinate system and the
-            resulting Frame is also examined. Preference is given to
-            cases where both the forward and inverse transformations are
-            defined (as indicated by the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
-            attributes). If only one transformation is defined, the
-            forward one is preferred.
-
-            \sstitem
-            If a match is found and the domain of the resulting Frame also
-            matches the current {\tt{"}}domainlist{\tt{"}} field, it is
-            accepted. Otherwise, the next {\tt{"}}domainlist{\tt{"}} field is considered
-            and the process repeated.
-
-         }
-         If a suitable coordinate system is found, the Current
-         attribute of the target FrameSet will be modified on exit to
-         identify the Frame whose match with the target was eventually
-         accepted.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFindFrame()
-      }{
-         If the search is successful, the function returns a pointer
-         to a FrameSet which contains the Frame found and a
-         description of how to convert to (and from) the coordinate
-         system it represents. Otherwise, a null \htmlref{Object}{Object} pointer
-         (AST\_\_NULL) is returned without error.
-
-         If a FrameSet is returned, it will contain two Frames. Frame
-         number 1 (its base Frame) represents the target coordinate
-         system and will be the same as the (base Frame of the)
-         target. Frame number 2 (its current Frame) will be a Frame
-         representing the coordinate system which the function
-         found. The Mapping which inter-relates these two Frames will
-         describe how to convert between their respective coordinate
-         systems.
-
-         Note that a FrameSet may be used both as a Mapping and as a
-         Frame. If the result is used as a Mapping (e.g. with
-         \htmlref{astTran2}{astTran2}), then it provides a means of converting coordinates
-         from the target coordinate system into the new coordinate
-         system that was found (and vice versa if its inverse
-         transformation is selected). If it is used as a Frame, its
-         attributes will describe the new coordinate system.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         result = astFindFrame( target, \htmlref{astFrame}{astFrame}( 3, {\tt{"}}{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         Searches for a 3-dimensional coordinate system in the target
-         Frame (or FrameSet). No attributes have been set in the
-         template Frame (created by astFrame), so no restriction has
-         been placed on the required coordinate system, other than
-         that it should have 3 dimensions. The first suitable Frame
-         found will be returned as part of the {\tt{"}}result{\tt{"}} FrameSet.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, \htmlref{astSkyFrame}{astSkyFrame}( {\tt{"}}{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         Searches for a celestial coordinate system in the target
-         Frame (or FrameSet). The type of celestial coordinate system
-         is unspecified, so astFindFrame will return the first one
-         found as part of the {\tt{"}}result{\tt{"}} FrameSet. If the target is
-         a FrameSet, then its Current attribute will be updated to
-         identify the Frame that was used.
-
-         If no celestial coordinate system can be found, a value of
-         AST\_\_NULL will be returned without error.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astSkyFrame( {\tt{"}}\htmlref{MaxAxes}{MaxAxes}=100{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         This is like the last example, except that in the event of the
-         target being a \htmlref{CmpFrame}{CmpFrame}, the component Frames encapsulated by the
-         CmpFrame will be searched for a SkyFrame. If found, the returned
-         Mapping will included a \htmlref{PermMap}{PermMap} which selects the required axes
-         from the target CmpFrame.
-
-         This is acomplished by setting the MaxAxes attribute of the
-         template SkyFrame to a large number (larger than or equal to the
-         number of axes in the target CmpFrame). This allows the SkyFrame
-         to be used as a match for Frames containing from 2 to 100 axes.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astSkyFrame( {\tt{"}}\htmlref{System}{System}=FK5{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         Searches for an equatorial (FK5) coordinate system in the
-         target. The \htmlref{Equinox}{Equinox} value for the coordinate system has not
-         been specified, so will be obtained from the target. If the
-         target is a FrameSet, its Current attribute will be updated
-         to indicate which SkyFrame was used to obtain this value.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astFrame( 2, {\tt{"}}{\tt{"}} ), {\tt{"}}sky,pixel,{\tt{"}} );
-      }{
-         Searches for a 2-dimensional coordinate system in the
-         target. Initially, a search is made for a suitable coordinate
-         system whose Domain attribute has the value {\tt{"}}SKY{\tt{"}}. If this
-         search fails, a search is then made for one with the domain
-         {\tt{"}}PIXEL{\tt{"}}. If this also fails, then any 2-dimensional
-         coordinate system is returned as part of the {\tt{"}}result{\tt{"}}
-         FrameSet.
-
-         Only if no 2-dimensional coordinate systems can be reached by
-         applying built-in conversions to any of the Frames in the
-         target will a value of AST\_\_NULL be returned.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astFrame( 1, {\tt{"}}Domain=WAVELENGTH{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         Searches for any 1-dimensional coordinate system in the
-         target which has the domain {\tt{"}}WAVELENGTH{\tt{"}}.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astFrame( 1, {\tt{"}}{\tt{"}} ), {\tt{"}}wavelength{\tt{"}} );
-      }{
-         This example has exactly the same effect as that above. It
-         illustrates the equivalence of the template's Domain attribute
-         and the fields in the {\tt{"}}domainlist{\tt{"}} string.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astFrame( 1, {\tt{"}}MaxAxes=3{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         This is a more advanced example which will search for any
-         coordinate system in the target having 1, 2 or 3
-         dimensions. The Frame returned (as part of the {\tt{"}}result{\tt{"}}
-         FrameSet) will always be 1-dimensional, but will be related
-         to the coordinate system that was found by a suitable Mapping
-         (e.g. a PermMap) which simply extracts the first axis.
-
-         If we had wanted a Frame representing the actual (1, 2 or
-         3-dimensional) coordinate system found, we could set the
-         \htmlref{PreserveAxes}{PreserveAxes} attribute to a non-zero value in the template.
-      }
-      \sstexamplesubsection{
-         result = astFindFrame( target, astSkyFrame( {\tt{"}}\htmlref{Permute}{Permute}=0{\tt{"}} ), {\tt{"}}{\tt{"}} );
-      }{
-         Searches for any celestial coordinate system in the target,
-         but only finds one if its axes are in the conventional
-         (longitude,latitude) order and have not been permuted
-         (e.g. with \htmlref{astPermAxes}{astPermAxes}).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping represented by the returned FrameSet results in
-         alignment taking place in the coordinate system specified by the
-         \htmlref{AlignSystem}{AlignSystem} attribute of the {\tt{"}}template{\tt{"}} Frame. See the description
-         of the AlignSystem attribute for further details.
-
-         \sstitem
-         Beware of setting the Domain attribute of the template and then
-         using a {\tt{"}}domainlist{\tt{"}} string which does not include the template's domain
-         (or a blank field). If you do so, no coordinate system will be
-         found.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      More on Using Templates
-   }{
-      A Frame (describing a coordinate system) will be found by this
-      function if (a) it is {\tt{"}}matched{\tt{"}} by the template you supply, and
-      (b) the value of its Domain attribute appears in the {\tt{"}}domainlist{\tt{"}}
-      string (except that a blank field in this string permits any
-      domain). A successful match by the template depends on a number
-      of criteria, as outlined below:
-      \sstitemlist{
-
-         \sstitem
-         In general, a template will only match another Frame which
-         belongs to the same class as the template, or to a derived (more
-         specialised) class. For example, a SkyFrame template will match
-         any other SkyFrame, but will not match a basic
-         Frame. Conversely, a basic Frame template will match any class
-         of Frame.
-
-         \sstitem
-         The exception to this is that a Frame of any class can be used to
-         match a CmpFrame, if that CmpFrame contains a Frame of the same
-         class as the template. Note however, the MaxAxes and \htmlref{MinAxes}{MinAxes}
-         attributes of the template must be set to suitable values to allow
-         it to match the CmpFrame. That is, the MinAxes attribute must be
-         less than or equal to the number of axes in the target, and the MaxAxes
-         attribute must be greater than or equal to the number of axes in
-         the target.
-
-         \sstitem
-         If using a CmpFrame as a template frame, the MinAxes and MaxAxes
-         for the template are determined by the MinAxes and MaxAxes values of
-         the component Frames within the template. So if you want a template
-         CmpFrame to be able to match Frames with different numbers of axes,
-         then you must set the MaxAxes and/or MinAxes attributes in the component
-         template Frames, before combining them together into the template
-         CmpFrame.
-
-         \sstitem
-         If a template has a value set for any of its main attributes, then
-         it will only match Frames which have an identical value for that
-         attribute (or which can be transformed, using a built-in
-         conversion, so that they have the required value for that
-         attribute). If any attribute in the template is un-set, however,
-         then Frames are matched regardless of the value they may have
-         for that attribute. You may therefore make a template more or
-         less specific by choosing the attributes for which you set
-         values. This requirement does not apply to 'descriptive' attributes
-         such as titles, labels, symbols, etc.
-
-         \sstitem
-         An important application of this principle involves the Domain
-         attribute. Setting the Domain attribute of the template has the
-         effect of restricting the search to a particular type of Frame
-         (with the domain you specify).  Conversely, if the Domain
-         attribute is not set in the template, then the domain of the
-         Frame found is not relevant, so all Frames are searched.  Note
-         that the
-         {\tt{"}}domainlist{\tt{"}} string provides an alternative way of restricting the
-         search in the same manner, but is a more convenient interface if
-         you wish to search automatically for another domain if the first
-         search fails.
-
-         \sstitem
-         Normally, a template will only match a Frame which has the
-         same number of axes as itself. However, for some classes of
-         template, this default behaviour may be changed by means of the
-         MinAxes, MaxAxes and \htmlref{MatchEnd}{MatchEnd} attributes. In addition, the
-         behaviour of a template may be influenced by its Permute and
-         PreserveAxes attributes, which control whether it matches Frames
-         whose axes have been permuted, and whether this permutation is
-         retained in the Frame which is returned (as opposed to returning
-         the axes in the order specified in the template, which is the
-         default behaviour). You should consult the descriptions of these
-         attributes for details of this more advanced use of templates.
-      }
-   }
-}
-\sstroutine{
-   astFitsChan\sstlabel{astFitsChan}
-}{
-   Create a FitsChan
-}{
-   \sstdescription{
-      This function creates a new \htmlref{FitsChan}{FitsChan} and optionally initialises
-      its attributes.
-
-      A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
-      operations involving the use of FITS (Flexible Image Transport
-      \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
-      \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate a
-      description of that Object composed of FITS header cards, and
-      reading from a FitsChan will create a new Object from its FITS
-      header card description.
-
-      While a FitsChan is active, it represents a buffer which may
-      contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
-      FITS conventions. Any sequence of FITS-conforming header cards
-      may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
-      merely implied.  The cards may be accessed in any order by using
-      the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
-      card, to which subsequent operations apply. Searches
-      based on keyword may be performed (using \htmlref{astFindFits}{astFindFits}), new
-      cards may be inserted (\htmlref{astPutFits}{astPutFits}, \htmlref{astPutCards}{astPutCards}, \htmlref{astSetFits$<$X$>$}{astSetFitsX}) and
-      existing ones may be deleted (\htmlref{astDelFits}{astDelFits}) or changed (astSetFits$<$X$>$).
-
-      When you create a FitsChan, you have the option of specifying
-      {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
-      stores by reading and writing FITS header cards. If you provide
-      a source function, it is used to fill the FitsChan with header cards
-      when it is accessed for the first time. If you do not provide a source
-      function, the FitsChan remains empty until you explicitly enter
-      data into it (e.g. using astPutCards, astPutFits or astWrite). If you
-      provide a sink function, it is used to deliver any remaining
-      contents of a FitsChan to an external data store when the
-      FitsChan is deleted. If you do not provide a sink function, any
-      header cards remaining when the FitsChan is deleted will be
-      lost, so you should arrange to extract them first if necessary
-      (e.g. using astFindFits or \htmlref{astRead}{astRead}).
-
-      Coordinate system information may be described using FITS header
-      cards using several different conventions, termed
-      {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
-      FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
-      determines how the Object is converted to (or from) a
-      description involving FITS header cards. In general, different
-      encodings will result in different sets of header cards to
-      describe the same Object. Examples of encodings include the DSS
-      encoding (based on conventions used by the STScI Digitised Sky
-      Survey data), the FITS-WCS encoding (based on a proposed FITS
-      standard) and the NATIVE encoding (a near loss-less way of
-      storing AST Objects in FITS headers).
-
-      The available encodings differ in the range of Objects they can
-      represent, in the number of Object descriptions that can coexist
-      in the same FitsChan, and in their accessibility to other
-      (external) astronomy applications (see the Encoding attribute
-      for details). Encodings are not necessarily mutually exclusive
-      and it may sometimes be possible to describe the same Object in
-      several ways within a particular set of FITS header cards by
-      using several different encodings.
-
-      The detailed behaviour of astRead and astWrite, when used with
-      a FitsChan, depends on the encoding in use. In general, however,
-      all use of astRead is destructive, so that FITS header cards
-      are consumed in the process of reading an Object, and are
-      removed from the FitsChan (this deletion can be prevented for
-      specific cards by calling the
-      \htmlref{astRetainFits}{astRetainFits} function).
-
-      If the encoding in use allows only a single Object description
-      to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-      encodings), then write operations using astWrite will
-      over-write any existing Object description using that
-      encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-      descriptions are written sequentially and may later be read
-      back in the same sequence.
-   }
-   \sstsynopsis{
-      AstFitsChan $*$astFitsChan( const char $*$($*$ source)( void ),
-                                void ($*$ sink)( const char $*$ ),
-                                const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         source
-      }{
-         Pointer to a source function which takes no arguments and
-         returns a pointer to a null-terminated string. This function
-         will be used by the FitsChan to obtain input FITS header
-         cards. On each invocation, it should read the next input card
-         from some external source (such as a FITS file), and return a
-         pointer to the (null-terminated) contents of the card. It
-         should return a NULL pointer when there are no more cards to
-         be read.
-
-         If {\tt{"}}source{\tt{"}} is NULL, the FitsChan will remain empty until
-         cards are explicitly stored in it (e.g. using astPutCards or astPutFits).
-      }
-      \sstsubsection{
-         sink
-      }{
-         Pointer to a sink function that takes a pointer to a
-         null-terminated string as an argument and returns void.  This
-         function will be used by the FitsChan to deliver any FITS
-         header cards it contains when it is finally deleted. On
-         each invocation, it should deliver the contents of the character
-         string passed to it as a FITS header card to some external
-         data store (such as a FITS file).
-
-         If {\tt{"}}sink{\tt{"}} is NULL,
-         the contents of the FitsChan will not be written out when it
-         is deleted.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new FitsChan. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFitsChan()
-      }{
-         A pointer to the new FitsChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No FITS {\tt{"}}END{\tt{"}} card will be written via the sink function. You
-         should add this card yourself after the FitsChan has been
-         deleted.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astFluxFrame\sstlabel{astFluxFrame}
-}{
-   Create a FluxFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{FluxFrame}{FluxFrame} and optionally initialises
-      its attributes.
-
-      A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various systems used to represent the signal level in an
-      observation. The particular coordinate system to be used is specified
-      by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
-      other attributes such as the units, etc (see the description of the
-      System attribute for details).
-
-      All flux values are assumed to be measured at the same frequency or
-      wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
-      more appropriate for use with images rather than spectra.
-   }
-   \sstsynopsis{
-      AstFluxFrame $*$astFluxFrame( double specval, AstSpecFrame $*$specfrm,
-                                  const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         specval
-      }{
-         The spectral value to which the flux values refer, given in the
-         spectral coordinate system specified by
-         {\tt{"}}specfrm{\tt{"}}. The value supplied for the {\tt{"}}specval{\tt{"}}
-         parameter becomes the default value for the SpecVal attribute.
-         A value of AST\_\_BAD may be supplied if the spectral position is
-         unknown, but this may result in it not being possible for the
-         \htmlref{astConvert}{astConvert}
-         function to determine a \htmlref{Mapping}{Mapping} between the new FluxFrame and
-         some other FluxFrame.
-      }
-      \sstsubsection{
-         specfrm
-      }{
-         A pointer to a \htmlref{SpecFrame}{SpecFrame} describing the spectral coordinate system
-         in which the
-         {\tt{"}}specval{\tt{"}}
-         parameter is given. A deep copy of this object is taken, so any
-         subsequent changes to the SpecFrame using the supplied pointer will
-         have no effect on the new FluxFrame.
-         A NULL pointer can be supplied if AST\_\_BAD is supplied for {\tt{"}}specval{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new FluxFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFluxFrame()
-      }{
-         A pointer to the new FluxFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When conversion between two FluxFrames is requested (as when
-         supplying FluxFrames to astConvert),
-         account will be taken of the nature of the flux coordinate systems
-         they represent, together with any qualifying attribute values, including
-         the \htmlref{AlignSystem}{AlignSystem} attribute. The results will therefore fully reflect the
-         relationship between positions measured in the two systems. In addition,
-         any difference in the Unit attributes of the two systems will also be
-         taken into account.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astFormat\sstlabel{astFormat}
-}{
-   Format a coordinate value for a Frame axis
-}{
-   \sstdescription{
-      This function returns a pointer to a string containing the
-      formatted (character) version of a coordinate value for a \htmlref{Frame}{Frame}
-      axis. The formatting applied is determined by the Frame's
-      attributes and, in particular, by any Format attribute string
-      that has been set for the axis. A suitable default format (based
-      on the Digits attribute value) will be applied if necessary.
-   }
-   \sstsynopsis{
-      const char $*$astFormat( AstFrame $*$this, int axis, double value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         axis
-      }{
-         The number of the Frame axis for which formatting is to be
-         performed (axis numbering starts at 1 for the first axis).
-      }
-      \sstsubsection{
-         value
-      }{
-         The coordinate value to be formatted.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFormat()
-      }{
-         A pointer to a null-terminated string containing the formatted
-         value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned pointer is guaranteed to remain valid and the
-         string to which it points will not be over-written for a total
-         of 50 successive invocations of this function. After this, the
-         memory containing the string may be re-used, so a copy of the
-         string should be made if it is needed for longer than this.
-
-         \sstitem
-         A formatted value may be converted back into a numerical (double)
-         value using \htmlref{astUnformat}{astUnformat}.
-
-         \sstitem
-         A NULL pointer will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   astFrame\sstlabel{astFrame}
-}{
-   Create a Frame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Frame}{Frame} and optionally initialises its
-      attributes.
-
-      A Frame is used to represent a coordinate system. It does this
-      in rather the same way that a frame around a graph describes the
-      coordinate space in which data are plotted. Consequently, a
-      Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
-      coordinate space, and contains axes which in turn hold
-      information such as Label and Units strings which are used for
-      labelling (e.g.) graphical output. In general, however, the
-      number of axes is not restricted to two.
-
-      Functions are available for converting Frame coordinate values
-      into a form suitable for display, and also for calculating
-      distances and offsets between positions within the Frame.
-
-      Frames may also contain knowledge of how to transform to and
-      from related coordinate systems.
-   }
-   \sstsynopsis{
-      AstFrame $*$astFrame( int naxes, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         naxes
-      }{
-         The number of Frame axes (i.e. the number of dimensions of
-         the coordinate space which the Frame describes).
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Frame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFrame()
-      }{
-         A pointer to the new Frame.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         frame = astFrame( 2, {\tt{"}}Title=Energy Spectrum: \htmlref{Plot}{Plot} \%d{\tt{"}}, n );
-      }{
-         Creates a new 2-dimensional Frame and initialises its Title
-         attribute to the string {\tt{"}}Energy Spectrum: Plot $<$n$>${\tt{"}}, where
-         $<$n$>$ takes the value of the int variable {\tt{"}}n{\tt{"}}.
-      }
-      \sstexamplesubsection{
-         frame = astFrame( 2, {\tt{"}}Label(1)=Energy, Label(2)=Response{\tt{"}} );
-      }{
-         Creates a new 2-dimensional Frame and initialises its axis
-         Label attributes to suitable string values.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astFrameSet\sstlabel{astFrameSet}
-}{
-   Create a FrameSet
-}{
-   \sstdescription{
-      This function creates a new \htmlref{FrameSet}{FrameSet} and optionally initialises
-      its attributes.
-
-      A FrameSet consists of a set of one or more Frames (which
-      describe coordinate systems), connected together by Mappings
-      (which describe how the coordinate systems are inter-related). A
-      FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
-      of these Frames (i.e. to convert between any of the coordinate
-      systems which it describes).  The individual Frames are
-      identified within the FrameSet by an integer index, with Frames
-      being numbered consecutively from one as they are added to the
-      FrameSet.
-
-      Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
-      are allowed to be the same). Any of the Frames may be nominated
-      to hold these positions, and the choice is determined by the
-      values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
-      the indices of the relevant Frames.  By default, the first Frame
-      added to a FrameSet is its base Frame, and the last one added is
-      its current Frame.
-
-      The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
-      whatever the FrameSet is used to calibrate (e.g. the pixel
-      coordinates of an image) and the current Frame describes the
-      {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
-      (e.g. displayed, etc.). Any further Frames represent a library
-      of alternative coordinate systems, which may be selected by
-      making them current.
-
-      When a FrameSet is used in a context that requires a Frame,
-      (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
-      Frame is used. A FrameSet may therefore be used in place of its
-      current Frame in most situations.
-
-      When a FrameSet is used in a context that requires a Mapping,
-      the Mapping used is the one between its base Frame and its
-      current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
-      coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
-      Mapping, a FrameSet may also be inverted (see \htmlref{astInvert}{astInvert}), which
-      has the effect of interchanging its base and current Frames and
-      hence of reversing the Mapping between them.
-
-      Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
-      Frame), either explicitly or as components within CmpFrames. In this
-      case the Mapping between a pair of Frames within a FrameSet will
-      include the effects of the clipping produced by any Regions included
-      in the path between the Frames.
-   }
-   \sstsynopsis{
-      AstFrameSet $*$astFrameSet( AstFrame $*$frame, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         Pointer to the first Frame to be inserted into the
-         FrameSet. This initially becomes both the base and the
-         current Frame. (Further Frames may be added using the
-         \htmlref{astAddFrame}{astAddFrame} function.)
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new FrameSet. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astFrameSet()
-      }{
-         A pointer to the new FrameSet.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If a pointer to an existing FrameSet is given for the {\tt{"}}frame{\tt{"}}
-         parameter, then the new FrameSet will (as a special case) be
-         initialised to contain the same Frames and Mappings, and to have
-         the same attribute values, as the one supplied. This process is
-         similar to making a copy of a FrameSet (see \htmlref{astCopy}{astCopy}), except
-         that the Frames and Mappings contained in the original are not
-         themselves copied, but are shared by both FrameSets.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGenCurve\sstlabel{astGenCurve}
-}{
-   Draw a generalized curve
-}{
-   \sstdescription{
-      This function draws a general user-defined curve defined by the
-      supplied \htmlref{Mapping}{Mapping}. Note that the curve is transformed into graphical
-      coordinate space for plotting, so that a straight line in
-      physical coordinates may result in a curved line being drawn if
-      the Mapping involved is non-linear. Any discontinuities in the
-      Mapping between physical and graphical coordinates are
-      catered for, as is any clipping established using \htmlref{astClip}{astClip}.
-
-      If you need to draw simple straight lines (geodesics), \htmlref{astCurve}{astCurve}
-      or \htmlref{astPolyCurve}{astPolyCurve} will usually be easier to use and faster.
-   }
-   \sstsynopsis{
-      void astGenCurve( AstPlot $*$this, astMapping $*$map )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{Plot}{Plot}.
-      }
-      \sstsubsection{
-         map
-      }{
-         Pointer to a Mapping. This Mapping should have 1 input
-         coordinate representing offset along the required curve,
-         normalized so that the start of the curve is at offset 0.0,
-         and the end of the curve is at offset 1.0. Note, this offset
-         does not need to be linearly related to distance along the curve.
-         The number of output coordinates should equal the number of axes
-         in the current \htmlref{Frame}{Frame} of the Plot. The Mapping should map a
-         specified offset along the curve, into the corresponding
-         coordinates in the current Frame of the Plot. The inverse
-         transformation need not be defined.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error results if the base Frame of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astGet$<$X$>$\sstlabel{astGetX}
-}{
-   Get an attribute value for an Object
-}{
-   \sstdescription{
-      This is a family of functions which return a specified attribute
-      value for an \htmlref{Object}{Object} using one of several different data
-      types. The type is selected by replacing $<$X$>$ in the function name
-      by C, D, F, I or L, to obtain a result in const char$*$ (i.e. string),
-      double, float, int, or long format, respectively.
-
-      If possible, the attribute value is converted to the type you
-      request. If conversion is not possible, an error will result.
-   }
-   \sstsynopsis{
-      $<$X$>$type astGet$<$X$>$( AstObject $*$this, const char $*$attrib )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         attrib
-      }{
-         Pointer to a null-terminated string containing the name of
-         the attribute whose value is required.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         These functions apply to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGet$<$X$>$()
-      }{
-         The attribute value, in the data type corresponding to $<$X$>$ (or,
-         in the case of astGetC, a pointer to a constant null-terminated
-         character string containing this value).
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         printf( {\tt{"}}\htmlref{RefCount}{RefCount} = \%d$\backslash$n{\tt{"}}, astGetI( z, {\tt{"}}RefCount{\tt{"}} ) );
-      }{
-         Prints the RefCount attribute value for Object {\tt{"}}z{\tt{"}} as an int.
-      }
-      \sstexamplesubsection{
-         title = astGetC( axis, {\tt{"}}\htmlref{Title}{Title}{\tt{"}} );
-      }{
-         Obtains a pointer to a null-terminated character string containing
-         the Title attribute of Object {\tt{"}}axis{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         An appropriate {\tt{"}}null{\tt{"}} value will be returned if this function
-         is invoked with the AST error status set, or if it should
-         fail for any reason. This null value is zero for numeric
-         values and NULL for pointer values.
-
-         \sstitem
-         The pointer returned by astGetC is guaranteed to remain valid
-         and the string to which it points will not be over-written for a
-         total of 50 successive invocations of this function. After this,
-         the memory containing the string may be re-used, so a copy of
-         the string should be made if it is needed for longer than this.
-      }
-   }
-}
-\sstroutine{
-   astGetActiveUnit\sstlabel{astGetActiveUnit}
-}{
-   Determines how the Unit attribute will be used
-}{
-   \sstdescription{
-      This function
-      returns the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}. See
-      the description of the \htmlref{astSetActiveUnit}{astSetActiveUnit} function
-      for a description of the ActiveUnit flag.
-   }
-   \sstsynopsis{
-      int astGetActiveUnit( AstFrame $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetActiveUnit
-      }{
-         The current value of the ActiveUnit flag.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A zero value will be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetFits$<$X$>$\sstlabel{astGetFitsX}
-}{
-   Get a named keyword value from a FitsChan
-}{
-   \sstdescription{
-      This is a family of functions which gets a value for a named keyword
-      from a \htmlref{FitsChan}{FitsChan} using one of several different data types. The data
-      type of the returned value is selected by replacing $<$X$>$ in the function
-      name by one of the following strings representing the recognised FITS
-      data types:
-
-      The data type of the returned value is selected by replacing $<$X$>$ in the
-      function name by one of the following strings representing the
-      recognised FITS data types:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - Complex floating point values.
-
-         \sstitem
-         CI - Complex integer values.
-
-         \sstitem
-         F  - Floating point values.
-
-         \sstitem
-         I  - Integer values.
-
-         \sstitem
-         L  - Logical (i.e. boolean) values.
-
-         \sstitem
-         S  - String values.
-
-         \sstitem
-         CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
-                are encoded without an equals sign.
-
-      }
-      The data type of the {\tt{"}}value{\tt{"}}
-      parameter
-      depends on $<$X$>$ as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - {\tt{"}}double $*${\tt{"}} (a pointer to a 2 element array to hold the real and
-                imaginary parts of the complex value).
-
-         \sstitem
-         CI - {\tt{"}}int $*${\tt{"}} (a pointer to a 2 element array to hold the real and
-                imaginary parts of the complex value).
-
-         \sstitem
-         F  - {\tt{"}}double $*${\tt{"}}.
-
-         \sstitem
-         I  - {\tt{"}}int $*${\tt{"}}.
-
-         \sstitem
-         L  - {\tt{"}}int $*${\tt{"}}.
-
-         \sstitem
-         S  - {\tt{"}}char $*$$*${\tt{"}} (a pointer to a static {\tt{"}}char{\tt{"}} array is returned at the
-                location given by the {\tt{"}}value{\tt{"}} parameter, Note, the stored string
-                may change on subsequent invocations of astGetFitsS so a
-                permanent copy should be taken of the string if necessary).
-
-         \sstitem
-         CN - Like{\tt{"}}S{\tt{"}}.
-      }
-   }
-   \sstsynopsis{
-      int astGetFits$<$X$>$( AstFitsChan $*$this, const char $*$name, $<$X$>$type $*$value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         value
-      }{
-         A pointer to a
-         buffer to receive the keyword value. The data type depends on $<$X$>$
-         as described above.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetFits$<$X$>$$<$X$>$()
-      }{
-         A value of zero
-         is returned if the keyword was not found in the FitsChan (no error
-         is reported). Otherwise, a value of
-         one
-         is returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The card following the current card is checked first. If this is
-         not the required card, then the rest of the FitsChan is searched,
-         starting with the first card added to the FitsChan. Therefore cards
-         should be accessed in the order they are stored in the FitsChan (if
-         possible) as this will minimise the time spent searching for cards.
-
-         \sstitem
-         If the requested card is found, it becomes the current card,
-         otherwise the current card is left pointing at the {\tt{"}}end-of-file{\tt{"}}.
-
-         \sstitem
-         If the stored keyword value is not of the requested type, it is
-         converted into the requested type.
-
-         \sstitem
-         If the keyword is found in the FitsChan, but has no associated
-         value, an error is reported. If necessary, the
-         \htmlref{astTestFits}{astTestFits}
-         function can be used to determine if the keyword has a defined
-         value in the FitsChan prior to calling this function.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-
-         \sstitem
-         Zero
-
-         \sstitem
-         .FALSE.
-         is returned as the function value if an error has already occurred,
-         or if this function should fail for any reason.
-
-         \sstitem
-         The FITS standard says that string keyword values should be
-         padded with trailing spaces if they are shorter than 8 characters.
-         For this reason, trailing spaces are removed from the string
-         returned by
-         astGetFitsS
-         if the original string (including any trailing spaces) contains 8
-         or fewer characters. Trailing spaces are not removed from longer
-         strings.
-      }
-   }
-}
-\sstroutine{
-   astGetFrame\sstlabel{astGetFrame}
-}{
-   Obtain a pointer to a specified Frame in a FrameSet
-}{
-   \sstdescription{
-      This function returns a pointer to a specified \htmlref{Frame}{Frame} in a
-      \htmlref{FrameSet}{FrameSet}.
-   }
-   \sstsynopsis{
-      AstFrame $*$astGetFrame( AstFrameSet $*$this, int iframe )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         iframe
-      }{
-         The index of the required Frame within the FrameSet.  This
-         value should lie in the range from 1 to the number of Frames
-         in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetFrame()
-      }{
-         A pointer to the requested Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         This function increments the \htmlref{RefCount}{RefCount} attribute of the
-         selected Frame by one.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetGrfContext\sstlabel{astGetGrfContext}
-}{
-   Return the KeyMap that describes a Plot's graphics context
-}{
-   \sstdescription{
-      This function
-      returns a reference to a \htmlref{KeyMap}{KeyMap} that will be passed to any drawing
-      functions registered using \htmlref{astGrfSet}{astGrfSet}.
-      This KeyMap can be used by an application to pass information to
-      the drawing functions
-      about the context in which they are being called. The contents of
-      the KeyMap are never accessed byt the \htmlref{Plot}{Plot} class itself.
-   }
-   \sstsynopsis{
-      AstKeyMap $*$astGetGrfContext( AstPlot $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetGrfContext()
-      }{
-         A pointer to the graphics context KeyMap. The returned pointer
-         should be annulled when it is no longer needed.
-      }
-   }
-}
-\sstroutine{
-   astGetMapping\sstlabel{astGetMapping}
-}{
-   Obtain a Mapping that converts between two Frames in a FrameSet
-}{
-   \sstdescription{
-      This function returns a pointer to a \htmlref{Mapping}{Mapping} that will convert
-      coordinates between the coordinate systems represented by two
-      Frames in a \htmlref{FrameSet}{FrameSet}.
-   }
-   \sstsynopsis{
-      AstMapping $*$astGetMapping( AstFrameSet $*$this, int iframe1, int iframe2 )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         iframe1
-      }{
-         The index of the first \htmlref{Frame}{Frame} in the FrameSet. This Frame describes
-         the coordinate system for the {\tt{"}}input{\tt{"}} end of the Mapping.
-      }
-      \sstsubsection{
-         iframe2
-      }{
-         The index of the second Frame in the FrameSet. This Frame
-         describes the coordinate system for the {\tt{"}}output{\tt{"}} end of the
-         Mapping.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetMapping()
-      }{
-         Pointer to a Mapping whose forward transformation converts
-         coordinates from the first coordinate system to the second
-         one, and whose inverse transformation converts coordinates in
-         the opposite direction.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned Mapping will include the clipping effect of any
-         Regions which occur on the path between the two supplied Frames
-         (this includes the two supplied Frames themselves).
-
-         \sstitem
-         The values given for the {\tt{"}}iframe1{\tt{"}} and {\tt{"}}iframe2{\tt{"}} parameters
-         should lie in the range from 1 to the number of Frames in the
-         FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute). A value of
-         AST\_\_BASE or AST\_\_CURRENT may also be given to identify the
-         FrameSet's base Frame or current Frame respectively.  It is
-         permissible for both these parameters to have the same value, in
-         which case a unit Mapping (\htmlref{UnitMap}{UnitMap}) is returned.
-
-         \sstitem
-         It should always be possible to generate the Mapping
-         requested, but this does necessarily guarantee that it will be
-         able to perform the required coordinate conversion. If
-         necessary, the \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse} attributes of the
-         returned Mapping should be inspected to determine if the
-         required transformation is available.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetRefPos\sstlabel{astGetRefPos}
-}{
-   Return the reference position in a specified celestial coordinate system
-}{
-   \sstdescription{
-      This function
-      returns the reference position (specified by attributes \htmlref{RefRA}{RefRA} and
-      \htmlref{RefDec}{RefDec}) converted to the celestial coordinate system represented by
-      a supplied \htmlref{SkyFrame}{SkyFrame}. The celestial longitude and latitude values
-      are returned in radians.
-   }
-   \sstsynopsis{
-      void astGetRefPos( AstSpecFrame $*$this, AstSkyFrame $*$frm, double $*$lon,
-                         double $*$lat )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{SpecFrame}{SpecFrame}.
-      }
-      \sstsubsection{
-         frm
-      }{
-         Pointer to the SkyFrame which defines the required celestial
-         coordinate system.
-         If NULL
-         is supplied, then the longitude and latitude values are returned
-         as FK5 J2000 RA and Dec values.
-      }
-      \sstsubsection{
-         lon
-      }{
-         A pointer to a double in which to store the
-         longitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-      \sstsubsection{
-         lat
-      }{
-         A pointer to a double in which to store the
-         latitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Values of AST\_\_BAD will be returned if this function is
-         invoked with the AST error status set, or if it should fail for
-         any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetRegionBounds\sstlabel{astGetRegionBounds}
-}{
-   Returns the bounding box of Region
-}{
-   \sstdescription{
-      This function
-      returns the upper and lower limits of a box which just encompasses
-      the supplied \htmlref{Region}{Region}. The limits are returned as axis values within
-      the \htmlref{Frame}{Frame} represented by the Region. The value of the \htmlref{Negated}{Negated}
-      attribute is ignored (i.e. it is assumed that the Region has not
-      been negated).
-   }
-   \sstsynopsis{
-      void astGetRegionBounds( AstRegion $*$this, double $*$lbnd, double $*$ubnd )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an
-         array in which to return the lower axis bounds covered by the Region.
-         It should have at least as many elements as there are axes in the
-         Region. If an axis has no lower limit, the returned value will
-         be the largest possible negative value.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an
-         array in which to return the upper axis bounds covered by the Region.
-         It should have at least as many elements as there are axes in the
-         Region. If an axis has no upper limit, the returned value will
-         be the largest possible positive value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The value of the Negated attribute is ignored (i.e. it is assumed that
-         the Region has not been negated).
-
-         \sstitem
-         If an axis has no extent on an axis then the lower limit will be
-         returned larger than the upper limit. Note, this is different to an
-         axis which has a constant value (in which case both lower and upper
-         limit will be returned set to the constant value).
-      }
-   }
-}
-\sstroutine{
-   astGetRegionFrame\sstlabel{astGetRegionFrame}
-}{
-   Obtain a pointer to the encapsulated Frame within a Region
-}{
-   \sstdescription{
-      This function returns a pointer to the \htmlref{Frame}{Frame} represented by a
-      \htmlref{Region}{Region}.
-   }
-   \sstsynopsis{
-      AstFrame $*$astGetRegionFrame( AstRegion $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetRegionFrame()
-      }{
-         A pointer to a deep copy of the Frame represented by the Region.
-         Using this pointer to modify the Frame will have no effect on
-         the Region. To modify the Region, use the Region pointer directly.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetRegionPoints\sstlabel{astGetRegionPoints}
-}{
-   Returns the positions that define the given Region
-}{
-   \sstdescription{
-      This function
-      returns the axis values at the points that define the supplied
-      \htmlref{Region}{Region}. The particular meaning of these points will depend on the
-      type of class supplied, as listed below under {\tt{"}}Applicability:{\tt{"}}.
-   }
-   \sstsynopsis{
-      void astGetRegionPoints( AstRegion $*$this, int maxpoint, int maxcoord,
-                               int $*$npoint, double $*$points )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         maxpoint
-      }{
-         If zero, the number of points needed to define the Region is
-         returned in
-         {\tt{"}}$*$npoint{\tt{"}},
-         but no axis values are returned and all other parameters are ignored.
-         If not zero, the supplied value should be the length of the
-         second dimension of the {\tt{"}}points{\tt{"}}
-         array. An error is reported if the number of points needed to define
-         the Region exceeds this number.
-      }
-      \sstsubsection{
-         maxcoord
-      }{
-         The length of the
-         first dimension of the {\tt{"}}points{\tt{"}} array.
-         An error is reported if the number of axes in the supplied Region
-         exceeds this number.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         A pointer to an integer in which to return the
-         number of points defining the Region.
-      }
-      \sstsubsection{
-         points
-      }{
-         The address of the first element in a 2-dimensional array of
-         shape {\tt{"}}[maxcoord][maxpoint]{\tt{"}}, in which to return
-         the coordinate values at the positions that define the Region.
-         These are stored such that the value of coordinate number
-         {\tt{"}}coord{\tt{"}} for point number {\tt{"}}point{\tt{"}} is found in element
-         {\tt{"}}points[coord][point]{\tt{"}}.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Box}{Box}
-      }{
-         The first returned position is the Box centre, and the second is
-         a Box corner.
-      }
-      \sstsubsection{
-         \htmlref{Circle}{Circle}
-      }{
-         The first returned position is the Circle centre, and the second is
-         a point on the circumference.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         Returns a value of zero for
-         {\tt{"}}$*$npoint{\tt{"}}
-         and leaves the supplied array contents unchanged. To find the
-         points defining a CmpRegion, use this method on the component
-         Regions, which can be accessed by invoking
-         \htmlref{astDecompose}{astDecompose}
-         on the CmpRegion.
-      }
-      \sstsubsection{
-         \htmlref{Ellipse}{Ellipse}
-      }{
-         The first returned position is the Ellipse centre. The second is
-         the end of one of the axes of the ellipse. The third is some
-         other point on the circumference of the ellipse, distinct from
-         the second point.
-      }
-      \sstsubsection{
-         \htmlref{Interval}{Interval}
-      }{
-         The first point corresponds to the lower bounds position, and
-         the second point corresponds to the upper bounds position. These
-         are reversed to indicate an extcluded interval rather than an
-         included interval. See the Interval constructor for more
-         information.
-      }
-      \sstsubsection{
-         \htmlref{NullRegion}{NullRegion}
-      }{
-         Returns a value of zero for
-         {\tt{"}}$*$npoint{\tt{"}}
-         and leaves the supplied array contents unchanged.
-      }
-      \sstsubsection{
-         \htmlref{PointList}{PointList}
-      }{
-         The positions returned are those that were supplied when the
-         PointList was constructed.
-      }
-      \sstsubsection{
-         \htmlref{Polygon}{Polygon}
-      }{
-         The positions returned are the vertex positions that were supplied
-         when the Polygon was constructed.
-      }
-      \sstsubsection{
-         \htmlref{Prism}{Prism}
-      }{
-         Returns a value of zero for
-         {\tt{"}}$*$npoint{\tt{"}}
-         and leaves the supplied array contents unchanged. To find the
-         points defining a Prism, use this method on the component
-         Regions, which can be accessed by invoking
-         astDecompose
-         on the CmpRegion.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the coordinate system represented by the Region has been
-         changed since it was first created, the returned axis values refer
-         to the new (changed) coordinate system, rather than the original
-         coordinate system. Note however that if the transformation from
-         original to new coordinate system is non-linear, the shape within
-         the new coordinate system may be distorted, and so may not match
-         that implied by the name of the Region subclass (Circle, Box, etc).
-      }
-   }
-}
-\sstroutine{
-   astGetStcCoord\sstlabel{astGetStcCoord}
-}{
-   Return information about an AstroCoords element stored in an Stc
-}{
-   \sstdescription{
-      When any sub-class of \htmlref{Stc}{Stc} is created, the constructor function
-      allows one or more AstroCoords elements to be stored within the Stc.
-      This function allows any one of these AstroCoords elements to be
-      retrieved. The format of the returned information is the same as
-      that used to pass the original information to the Stc constructor.
-      That is, the information is returned in a \htmlref{KeyMap}{KeyMap} structure
-      containing elements with one or more of the keys given by symbolic
-      constants AST\_\_STCNAME, AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES,
-      AST\_\_STCSIZE and AST\_\_STCPIXSZ.
-
-      If the coordinate system represented by the Stc has been changed
-      since it was created (for instance, by changing its \htmlref{System}{System}
-      attribute), then the sizes and positions in the returned KeyMap
-      will reflect the change in coordinate system.
-   }
-   \sstsynopsis{
-      AstKeyMap $*$astGetStcCoord( AstStc $*$this, int icoord )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Stc.
-      }
-      \sstsubsection{
-         icoord
-      }{
-         The index of the AstroCoords element required. The first has index
-         one. The number of AstroCoords elements in the Stc can be found using
-         function astGetStcNcoord.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetStcCoord()
-      }{
-         A pointer to a new KeyMap containing the required information.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetStcNCoord\sstlabel{astGetStcNCoord}
-}{
-   Return the number of AstroCoords elements stored in an Stc
-}{
-   \sstdescription{
-      This function returns the number of AstroCoords elements stored in
-      an \htmlref{Stc}{Stc}.
-   }
-   \sstsynopsis{
-      int astGetStcNCoord( AstStc $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Stc.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetStcNCoord()
-      }{
-         The number of  AstroCoords elements stored in the Stc.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Zero will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetStcRegion\sstlabel{astGetStcRegion}
-}{
-   Obtain a copy of the encapsulated Region within a Stc
-}{
-   \sstdescription{
-      This function returns a pointer to a deep copy of the \htmlref{Region}{Region}
-      supplied when the \htmlref{Stc}{Stc} was created.
-   }
-   \sstsynopsis{
-      AstRegion $*$astGetStcRegion( AstStc $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Stc.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetStcRegion()
-      }{
-         A pointer to a deep copy of the Region encapsulated within the
-         supplied Stc.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGetUnc\sstlabel{astGetUnc}
-}{
-   Obtain uncertainty information from a Region
-}{
-   \sstdescription{
-      This function returns a \htmlref{Region}{Region} which represents the uncertainty
-      associated with positions within the supplied Region. See
-      \htmlref{astSetUnc}{astSetUnc}
-      for more information about Region uncertainties and their use.
-   }
-   \sstsynopsis{
-      AstRegion $*$astGetUnc( AstRegion $*$this, int def )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         def
-      }{
-         Controls what is returned if no uncertainty information has been
-         associated explicitly with the supplied Region. If
-         a non-zero value
-         is supplied, then the default uncertainty Region used internally
-         within AST is returned (see {\tt{"}}Applicability{\tt{"}} below). If
-         zero is supplied, then NULL
-         will be returned (without error).
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default uncertainty for a CmpRegion is taken from one of the
-         two component Regions. If the first component Region has a
-         non-default uncertainty, then it is used as the default uncertainty
-         for the parent CmpRegion. Otherwise, if the second component Region
-         has a non-default uncertainty, then it is used as the default
-         uncertainty for the parent CmpRegion. If neither of the
-         component Regions has non-default uncertainty, then the default
-         uncertainty for the CmpRegion is 1.0E-6 of the bounding box of
-         the CmpRegion.
-      }
-      \sstsubsection{
-         \htmlref{Prism}{Prism}
-      }{
-         The default uncertainty for a Prism is formed by combining the
-         uncertainties from the two component Regions. If a component
-         Region does not have a non-default uncertainty, then its default
-         uncertainty will be used to form the default uncertainty of the
-         parent Prism.
-      }
-      \sstsubsection{
-         Region
-      }{
-         For other classes of Region, the default uncertainty is 1.0E-6
-         of the bounding box of the Region. If the bounding box has zero
-         width on any axis, then the uncertainty will be 1.0E-6 of the
-         axis value.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGetUnc()
-      }{
-         A pointer to a Region describing the uncertainty in the supplied
-         Region.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If uncertainty information is associated with a Region, and the
-         coordinate system described by the Region is subsequently changed
-         (e.g. by changing the value of its \htmlref{System}{System} attribute, or using the
-         \htmlref{astMapRegion}{astMapRegion}
-         function), then the uncertainty information returned by this function
-         will be modified so that it refers to the coordinate system currently
-         described by the supplied Region.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astGrfPop\sstlabel{astGrfPop}
-}{
-   Restore previously saved graphics functions used by a Plot
-}{
-   \sstdescription{
-      This function restores a snapshot of the graphics functions
-      stored previously by calling \htmlref{astGrfPush}{astGrfPush}. The restored graphics
-      functions become the current graphics functions used by the \htmlref{Plot}{Plot}.
-
-      The astGrfPush and astGrfPop functions are intended for situations
-      where it is necessary to make temporary changes to the graphics
-      functions used by the Plot. The current functions should first be
-      saved by calling astGrfPush. New functions should then be registered
-      using \htmlref{astGrfSet}{astGrfSet}. The required graphics should then be produced.
-      Finally, astGrfPop should be called to restore the original graphics
-      functions.
-   }
-   \sstsynopsis{
-      void astGrfPop( AstPlot $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function returns without action if there are no snapshots to
-         restore. No error is reported in this case.
-      }
-   }
-}
-\sstroutine{
-   astGrfPush\sstlabel{astGrfPush}
-}{
-   Save the current graphics functions used by a Plot
-}{
-   \sstdescription{
-      This function takes a snapshot of the graphics functions which are
-      currently registered with the supplied \htmlref{Plot}{Plot}, and saves the snapshot
-      on a first-in-last-out stack within the Plot. The snapshot can be
-      restored later using function
-      \htmlref{astGrfPop}{astGrfPop}.
-
-      The astGrfPush and astGrfPop functions are intended for situations
-      where it is necessary to make temporary changes to the graphics
-      functions used by the Plot. The current functions should first be
-      saved by calling astGrfPush. New functions should then be registered
-      using \htmlref{astGrfSet}{astGrfSet}. The required graphics should then be produced.
-      Finally, astGrfPop should be called to restore the original graphics
-      functions.
-   }
-   \sstsynopsis{
-      void astGrfPush( AstPlot $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-   }
-}
-\sstroutine{
-   astGrfSet\sstlabel{astGrfSet}
-}{
-   Register a graphics function for use by a Plot
-}{
-   \sstdescription{
-      This function can be used to select the underlying graphics
-      functions to be used when the supplied \htmlref{Plot}{Plot} produces graphical output.
-      If this function is not called prior to producing graphical
-      output, then the underlying graphics functions selected at
-      link-time (using the \htmlref{ast\_link}{ast_link} command) will be used. To use
-      alternative graphics functions, call this function before
-      the graphical output is created, specifying the graphics
-      functions to be used. This will register the function for future
-      use, but the function will not actually be used until the \htmlref{Grf}{Grf}
-      attribute is given a non-zero value.
-   }
-   \sstsynopsis{
-      void astGrfSet( AstPlot $*$this, const char $*$name, AstGrfFun fun )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         name
-      }{
-         A name indicating the graphics function to be replaced.
-         Various graphics functions are used by the
-         Plot class, and any combination of them may be supplied by calling
-         this function once for each function to be replaced. If any of the
-         graphics functions are not replaced in this way, the
-         corresponding functions in the graphics interface selected at
-         link-time (using the ast\_link command) are used. The allowed
-         names are:
-
-         \sstitemlist{
-
-            \sstitem
-            Attr -  Enquire or set a graphics attribute value
-
-            \sstitem
-            Cap -  Inquire a capability
-
-            \sstitem
-            Flush - Flush all pending graphics to the output device
-
-            \sstitem
-            Line - Draw a polyline (i.e. a set of connected lines)
-
-            \sstitem
-            Mark -  Draw a set of markers
-
-            \sstitem
-            Qch -  Return the character height in world coordinates
-
-            \sstitem
-            Scales -  Get the axis scales
-
-            \sstitem
-            Text - Draw a character string
-
-            \sstitem
-            TxExt -  Get the extent of a character string
-
-         }
-         The string is case insensitive. For details of the interface
-         required for each, see the sections below.
-      }
-      \sstsubsection{
-         fun
-      }{
-         A Pointer to the function to be used to provide the
-         functionality indicated by parameter name. The interface for
-         each function is described below, but the function pointer should
-         be cast to a type of AstGrfFun when calling astGrfSet.
-
-         Once a function has been provided, a null pointer can be supplied
-         in a subsequent call to astGrfSet to reset the function to the
-         corresponding function in the graphics interface selected at
-         link-time.
-      }
-   }
-   \sstdiytopic{
-      Function Interfaces
-   }{
-      All the functions listed below (except for {\tt{"}}Cap{\tt{"}}) should return an
-      integer value of 0 if an error occurs, and 1 otherwise. All x and y
-      values refer
-      to {\tt{"}}graphics cordinates{\tt{"}} as defined by the graphbox parameter of
-      the \htmlref{astPlot}{astPlot} call which created the Plot.
-
-      The first parameter ({\tt{"}}grfcon{\tt{"}})
-      for each function is an AST \htmlref{KeyMap}{KeyMap} pointer that can be used by the
-      called function to establish the context in which it is being called.
-      The contents of the KeyMap are determined by the calling
-      application, which should obtain a pointer to the KeyMap using the
-      \htmlref{astGetGrfContext}{astGetGrfContext} function,
-      and then store any necessary information in the KeyMap using the
-      methods of the KeyMap class. Note, the functions listed below
-      should never annul or delete the supplied KeyMap pointer.
-   }
-   \sstdiytopic{
-      Attr
-   }{
-      The {\tt{"}}Attr{\tt{"}} function returns the current value of a specified graphics
-      attribute, and optionally establishes a new value. The supplied
-      value is converted to an integer value if necessary before use.
-      It requires the following interface:
-
-      int Attr( AstObject $*$grfcon, int attr, double value, double $*$old\_value, int prim )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         attr - An integer value identifying the required attribute.
-           The following symbolic values are defined in grf.h:
-           GRF\_\_STYLE (Line style),
-           GRF\_\_WIDTH (Line width),
-           GRF\_\_SIZE (Character and marker size scale factor),
-           GRF\_\_FONT (Character font),
-           GRF\_\_COLOUR (Colour index).
-
-         \sstitem
-         value -
-           A new value to store for the attribute. If this is AST\_\_BAD
-           no value is stored.
-
-         \sstitem
-         old\_value - A pointer to a double in which to return
-           the attribute value.
-           If this is NULL, no value is returned.
-
-         \sstitem
-         prim -
-           The sort of graphics primitive to be drawn with the new attribute.
-           Identified by the following values defined in grf.h:
-           GRF\_\_LINE,
-           GRF\_\_MARK,
-           GRF\_\_TEXT.
-      }
-   }
-   \sstdiytopic{
-      Cap
-   }{
-      The {\tt{"}}Cap{\tt{"}} function is called to determine if the grf module has a
-      given capability, as indicated by the {\tt{"}}cap{\tt{"}} argument:
-
-      int Cap( AstObject $*$grfcon, int cap, int value )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         cap -
-            The capability being inquired about. This will be one of the
-            following constants defined in grf.h:
-
-      }
-         GRF\_\_SCALES: This function should return a non-zero value if the
-         {\tt{"}}Scales{\tt{"}} function is implemented, and zero otherwise. The supplied
-         {\tt{"}}value{\tt{"}} argument should be ignored.
-
-         GRF\_\_MJUST: This function should return a non-zero value if
-         the {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions recognise {\tt{"}}M{\tt{"}} as a
-         character in the justification string. If the first character of
-         a justification string is {\tt{"}}M{\tt{"}}, then the text should be justified
-         with the given reference point at the bottom of the bounding box.
-         This is different to {\tt{"}}B{\tt{"}} justification, which requests that the
-         reference point be put on the baseline of the text, since some
-         characters hang down below the baseline. If the {\tt{"}}Text{\tt{"}} or
-         {\tt{"}}TxExt{\tt{"}} function cannot differentiate between {\tt{"}}M{\tt{"}} and {\tt{"}}B{\tt{"}},
-         then this function should return zero, in which case {\tt{"}}M{\tt{"}}
-         justification will never be requested by Plot. The supplied
-         {\tt{"}}value{\tt{"}} argument should be ignored.
-
-         GRF\_\_ESC: This function should return a non-zero value if the
-         {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}} functions can recognise and interpret
-         graphics escape sequences within the supplied string (see
-         attribute \htmlref{Escape}{Escape}). Zero should be returned if escape sequences
-         cannot be interpreted (in which case the Plot class will interpret
-         them itself if needed). The supplied {\tt{"}}value{\tt{"}} argument should be
-         ignored only if escape sequences cannot be interpreted by {\tt{"}}Text{\tt{"}} and
-         {\tt{"}}TxExt{\tt{"}}. Otherwise, {\tt{"}}value{\tt{"}} indicates whether {\tt{"}}Text{\tt{"}} and {\tt{"}}TxExt{\tt{"}}
-         should interpret escape sequences in subsequent calls. If {\tt{"}}value{\tt{"}} is
-         non-zero then escape sequences should be interpreted by {\tt{"}}Text{\tt{"}} and
-         {\tt{"}}TxExt{\tt{"}}. Otherwise, they should be drawn as literal text.
-
-      \sstitemlist{
-
-         \sstitem
-         value -
-            The use of this parameter depends on the value of {\tt{"}}cap{\tt{"}} as
-            described above.
-
-         \sstitem
-         Returned Function Value:
-            The value returned by the function depends on the value of {\tt{"}}cap{\tt{"}}
-            as described above. Zero should be returned if the supplied
-            capability is not recognised.
-      }
-   }
-   \sstdiytopic{
-      Flush
-   }{
-      The {\tt{"}}Flush{\tt{"}} function ensures that the display device is up-to-date,
-      by flushing any pending graphics to the output device. It
-      requires the following interface:
-
-      int Flush( AstObject $*$grfcon )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-      }
-   }
-   \sstdiytopic{
-      Line
-   }{
-      The {\tt{"}}Line{\tt{"}} function displays lines joining the given positions and
-      requires the following interface:
-
-      int Line( AstObject $*$grfcon, int n, const float $*$x, const float $*$y )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         n - The number of positions to be joined together.
-
-         \sstitem
-         x - A pointer to an array holding the {\tt{"}}n{\tt{"}} x values.
-
-         \sstitem
-         y - A pointer to an array holding the {\tt{"}}n{\tt{"}} y values.
-      }
-   }
-   \sstdiytopic{
-      Mark
-   }{
-      The {\tt{"}}Mark{\tt{"}} function displays markers at the given positions. It
-      requires the following interface:
-
-      int Mark( AstObject $*$grfcon, int n, const float $*$x, const float $*$y, int type )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         n - The number of positions to be marked.
-
-         \sstitem
-         x - A pointer to an array holding the {\tt{"}}n{\tt{"}} x values.
-
-         \sstitem
-         y - A pointer to an array holding the {\tt{"}}n{\tt{"}} y values.
-
-         \sstitem
-         type - An integer which can be used to indicate the type of marker
-           symbol required.
-      }
-   }
-   \sstdiytopic{
-      Qch
-   }{
-      The {\tt{"}}Qch{\tt{"}} function returns the heights of characters drawn vertically
-      and horizontally in graphics coordinates. It requires the following
-      interface:
-
-      int Qch( AstObject $*$grfcon, float $*$chv, float $*$chh )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         chv - A pointer to the float which is to receive the height of
-         characters drawn with a vertical baseline. This will be an
-         increment in the X axis.
-
-         \sstitem
-         chh - A pointer to the float which is to receive the height of
-         characters drawn with a horizontal baseline. This will be an
-         increment in the Y axis.
-      }
-   }
-   \sstdiytopic{
-      Scales
-   }{
-      The {\tt{"}}Scales{\tt{"}} function returns two values (one for each axis) which
-      scale increments on the corresponding axis into a {\tt{"}}normal{\tt{"}} coordinate
-      system in which: 1) the axes have equal scale in terms of (for instance)
-      millimetres per unit distance, 2) X values increase from left to
-      right, and 3) Y values increase from bottom to top. It requires the
-      following interface:
-
-      int Scales( AstObject $*$grfcon, float $*$alpha, float $*$beta )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         alpha - A pointer to the float which is to receive the
-         scale for the X axis (i.e. Xnorm = alpha$*$Xworld).
-
-         \sstitem
-         beta - A pointer to the float which is to receive the
-         scale for the Y axis (i.e. Ynorm = beta$*$Yworld).
-      }
-   }
-   \sstdiytopic{
-      Text
-   }{
-      The {\tt{"}}Text{\tt{"}} function displays a character string at a given
-      position using a specified justification and up-vector. It
-      requires the following interface:
-
-      int Text( AstObject $*$grfcon, const char $*$text, float x, float y, const char $*$just,
-                float upx, float upy )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         text - Pointer to a null-terminated character string to be displayed.
-
-         \sstitem
-         x - The reference x coordinate.
-
-         \sstitem
-         y - The reference y coordinate.
-
-         \sstitem
-         just - A character string which specifies the location within the
-            text string which is to be placed at the reference position
-            given by x and y. The first character may be 'T' for {\tt{"}}top{\tt{"}},
-            'C' for {\tt{"}}centre{\tt{"}}, or 'B' for {\tt{"}}bottom{\tt{"}}, and specifies the
-            vertical location of the reference position. Note, {\tt{"}}bottom{\tt{"}}
-            corresponds to the base-line of normal text. Some characters
-            (eg {\tt{"}}y{\tt{"}}, {\tt{"}}g{\tt{"}}, {\tt{"}}p{\tt{"}}, etc) descend below the base-line. The second
-            character may be 'L' for {\tt{"}}left{\tt{"}}, 'C' for {\tt{"}}centre{\tt{"}}, or 'R'
-            for {\tt{"}}right{\tt{"}}, and specifies the horizontal location of the
-            reference position. If the string has less than 2 characters
-            then 'C' is used for the missing characters.
-
-         \sstitem
-         upx - The x component of the up-vector for the text.
-            If necessary the supplied value should be negated
-            to ensure that positive values always refer to displacements from
-            left to right on the screen.
-
-         \sstitem
-         upy - The y component of the up-vector for the text.
-            If necessary the supplied value should be negated
-            to ensure that positive values always refer to displacements from
-            bottom to top on the screen.
-      }
-   }
-   \sstdiytopic{
-      TxExt
-   }{
-      The {\tt{"}}TxExt{\tt{"}} function returns the corners of a box which would enclose
-      the supplied character string if it were displayed using the
-      Text function described above. The returned box includes any leading
-      or trailing spaces. It requires the following interface:
-
-      int TxExt( AstObject $*$grfcon, const char $*$text, float x, float y, const char $*$just,
-                 float upx, float upy, float $*$xb, float $*$yb )
-
-      \sstitemlist{
-
-         \sstitem
-         grfcon -
-           A KeyMap containing information passed from the calling application.
-
-         \sstitem
-         text - Pointer to a null-terminated character string to be displayed.
-
-         \sstitem
-         x - The reference x coordinate.
-
-         \sstitem
-         y - The reference y coordinate.
-
-         \sstitem
-         just - A character string which specifies the location within the
-            text string which is to be placed at the reference position
-            given by x and y. See {\tt{"}}Text{\tt{"}} above.
-
-         \sstitem
-         upx - The x component of the up-vector for the text.
-            See {\tt{"}}Text{\tt{"}} above.
-
-         \sstitem
-         upy - The y component of the up-vector for the text.
-            See {\tt{"}}Text{\tt{"}} above.
-
-         \sstitem
-         xb - An array of 4 elements in which to return the x coordinate of
-            each corner of the bounding box.
-
-         \sstitem
-         yb - An array of 4 elements in which to return the y coordinate of
-            each corner of the bounding box.
-      }
-   }
-}
-\sstroutine{
-   astGrid\sstlabel{astGrid}
-}{
-   Draw a set of labelled coordinate axes
-}{
-   \sstdescription{
-      This function draws a complete annotated set of
-      coordinate axes for a \htmlref{Plot}{Plot} with (optionally) a coordinate grid
-      superimposed. Details of the axes and grid can be controlled by
-      setting values for the various attributes defined by the Plot
-      class (q.v.).
-   }
-   \sstsynopsis{
-      void astGrid( AstPlot $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the supplied Plot is a \htmlref{Plot3D}{Plot3D}, the axes will be annotated
-         using three 2-dimensional Plots, one for each 2D plane in the 3D
-         current coordinate system. The plots will be {\tt{"}}pasted{\tt{"}} onto 3 faces
-         of the cuboid graphics volume specified when the Plot3D was
-         constructed. The faces to be used can be controlled by the {\tt{"}}\htmlref{RootCorner}{RootCorner}{\tt{"}}
-         attribute.
-
-         \sstitem
-         An error results if either the current \htmlref{Frame}{Frame} or the base Frame
-         of the Plot is not 2-dimensional or (for a Plot3D) 3-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the base
-         and current Frames of the Plot is not defined in either
-         direction (i.e. the Plot's \htmlref{TranForward}{TranForward} or \htmlref{TranInverse}{TranInverse} attribute
-         is zero).
-      }
-   }
-}
-\sstroutine{
-   astGridLine\sstlabel{astGridLine}
-}{
-   Draw a grid line (or axis) for a Plot
-}{
-   \sstdescription{
-      This function draws a curve in the physical coordinate system of
-      a \htmlref{Plot}{Plot} by varying only one of the coordinates along the length
-      of the curve. It is intended for drawing coordinate axes,
-      coordinate grids, and tick marks on axes (but note that these
-      are also available via the more comprehensive \htmlref{astGrid}{astGrid} function).
-
-      The curve is transformed into graphical coordinate space for
-      plotting, so that a straight line in physical coordinates may
-      result in a curved line being drawn if the \htmlref{Mapping}{Mapping} involved is
-      non-linear. Any discontinuities in the Mapping between physical
-      and graphical coordinates are catered for, as is any
-      clipping established using \htmlref{astClip}{astClip}.
-   }
-   \sstsynopsis{
-      void astGridLine( AstPlot $*$this, int axis, const double start[],
-                        double length )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         axis
-      }{
-         The index of the Plot axis whose physical coordinate value is
-         to be varied along the length of the curve (all other
-         coordinates will remain fixed). This value should lie in the
-         range from 1 to the number of Plot axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         start
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the start of the curve.
-      }
-      \sstsubsection{
-         length
-      }{
-         The length of curve to be drawn, given as an increment along
-         the selected physical axis. This may be positive or negative.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No curve is drawn if the {\tt{"}}start{\tt{"}} array contains any
-         coordinates with the value AST\_\_BAD, nor if {\tt{"}}length{\tt{"}} has this value.
-
-         \sstitem
-         An error results if the base \htmlref{Frame}{Frame} of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astGrismMap\sstlabel{astGrismMap}
-}{
-   Create a GrismMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{GrismMap}{GrismMap} and optionally initialises
-      its attributes.
-
-      A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates using the spectral dispersion equation
-      described in FITS-WCS paper III {\tt{"}}Representation of spectral
-      coordinates in FITS{\tt{"}}. This describes the dispersion produced by
-      gratings, prisms and grisms.
-
-      When initially created, the forward transformation of a GrismMap
-      transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
-      values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
-      linearly related to position on the detector. It is defined in FITS-WCS
-      paper III as {\tt{"}}the offset on the detector from the point of intersection
-      of the camera axis, measured in units of the effective local length{\tt{"}}.
-      The units in which wavelength values are expected or returned is
-      determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
-      \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
-      also be used for the wavelength values.
-   }
-   \sstsynopsis{
-      AstGrismMap $*$astGrismMap( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new GrismMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astGrismMap()
-      }{
-         A pointer to the new GrismMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astImport\sstlabel{astImport}
-}{
-   Import an Object pointer to the current context
-}{
-   \sstdescription{
-      This function
-      imports an \htmlref{Object}{Object} pointer that was created in a higher or lower
-      level context, into the current AST context.
-      This means that the pointer will be annulled when the current context
-      is ended (with \htmlref{astEnd}{astEnd}).
-   }
-   \sstsynopsis{
-      void astImport( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Object pointer to be imported.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-}
-\sstroutine{
-   astIntersect\sstlabel{astIntersect}
-}{
-   Find the point of intersection between two geodesic curves
-}{
-   \sstdescription{
-      This function
-      finds the coordinate values at the point of intersection between
-      two geodesic curves. Each curve is specified by two points on
-      the curve.  It can only be used with 2-dimensional Frames.
-
-      For example, in a basic \htmlref{Frame}{Frame}, it will find the point of
-      intersection between two straight lines. But for a \htmlref{SkyFrame}{SkyFrame} it
-      will find an intersection of two great circles.
-   }
-   \sstsynopsis{
-      void astIntersect( AstFrame $*$this, const double a1[2],
-                         const double a2[2], const double b1[2],
-                         const double b2[2], double cross[2] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         a1
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
-         first point on the first geodesic curve.
-      }
-      \sstsubsection{
-         a2
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute). This should contain the coordinates of a
-         second point on the first geodesic curve. It should not be
-         co-incident with the first point.
-      }
-      \sstsubsection{
-         b1
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute). This should contain the coordinates of the
-         first point on the second geodesic curve.
-      }
-      \sstsubsection{
-         b2
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute). This should contain the coordinates of a
-         second point on the second geodesic curve. It should not be
-         co-incident with the first point.
-      }
-      \sstsubsection{
-         cross
-      }{
-         An array of double, with one element for each Frame axis
-         in which the coordinates of the required intersection will
-         be returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For SkyFrames each curve will be a great circle, and in general
-         each pair of curves will intersect at two diametrically opposite
-         points on the sky. The returned position is the one which is
-         closest to point
-         {\tt{"}}a1{\tt{"}}.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value, or if the two
-         points defining either geodesic are co-incident, or if the two
-         curves do not intersect.
-
-         \sstitem
-         The geodesic curve used by this function is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{astDistance}{astDistance} function.
-
-         \sstitem
-         An error will be reported if the Frame is not 2-dimensional.
-      }
-   }
-}
-\sstroutine{
-   astInterval\sstlabel{astInterval}
-}{
-   Create a Interval
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Interval}{Interval} and optionally initialises its
-      attributes.
-
-      A Interval is a \htmlref{Region}{Region} which represents upper and/or lower limits on
-      one or more axes of a \htmlref{Frame}{Frame}. For a point to be within the region
-      represented by the Interval, the point must satisfy all the
-      restrictions placed on all the axes. The point is outside the region
-      if it fails to satisfy any one of the restrictions. Each axis may have
-      either an upper limit, a lower limit, both or neither. If both limits
-      are supplied but are in reverse order (so that the lower limit is
-      greater than the upper limit), then the interval is an excluded
-      interval, rather than an included interval.
-
-      At least one axis limit must be supplied.
-
-      Note, The Interval class makes no allowances for cyclic nature of
-      some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
-      should usually be used in these cases since this requires the user
-      to think about suitable upper and lower limits,
-   }
-   \sstsynopsis{
-      AstInterval $*$astInterval( AstFrame $*$frame, const double lbnd[],
-                                const double ubnd[], AstRegion $*$unc,
-                                const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute) containing the lower limits on each axis.
-         Set a value to AST\_\_BAD to indicate that the axis has no lower
-         limit.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute) containing the upper limits on each axis.
-         Set a value to AST\_\_BAD to indicate that the axis has no upper
-         limit.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the Box being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{astOverlap}{astOverlap}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{astSimplify}{astSimplify}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Interval. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astInterval()
-      }{
-         A pointer to the new Interval.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astIntraMap\sstlabel{astIntraMap}
-}{
-   Create an IntraMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{IntraMap}{IntraMap} and optionally initialises
-      its attributes.
-
-      An IntraMap is a specialised form of \htmlref{Mapping}{Mapping} which encapsulates
-      a privately-defined coordinate transformation function
-      (e.g. written in C) so that it may be used like any other AST
-      Mapping. This allows you to create Mappings that perform any
-      conceivable coordinate transformation.
-
-      However, an IntraMap is intended for use within a single program
-      or a private suite of software, where all programs have access
-      to the same coordinate transformation functions (i.e. can be
-      linked against them). IntraMaps should not normally be stored in
-      datasets which may be exported for processing by other software,
-      since that software will not have the necessary transformation
-      functions available, resulting in an error.
-
-      You must register any coordinate transformation functions to be
-      used using \htmlref{astIntraReg}{astIntraReg} before creating an IntraMap.
-   }
-   \sstsynopsis{
-      AstIntraMap $*$astIntraMap( const char $*$name, int nin, int nout,
-                                const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated string containing the name of
-         the transformation function to use (which should previously
-         have been registered using astIntraReg). This name is case
-         sensitive. All white space will be removed before use.
-      }
-      \sstsubsection{
-         nin
-      }{
-         The number of input coordinates. This must be compatible with
-         the number of input coordinates accepted by the
-         transformation function (as specified when this function was
-         registered using astIntraReg).
-      }
-      \sstsubsection{
-         nout
-      }{
-         The number of output coordinates. This must be compatible
-         with the number of output coordinates produced by the
-         transformation function (as specified when this function was
-         registered using astIntraReg).
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new IntraMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astIntraMap()
-      }{
-         A pointer to the new IntraMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astIntraReg\sstlabel{astIntraReg}
-}{
-   Register a transformation function for use by an IntraMap
-}{
-   \sstdescription{
-      This function registers a privately-defined coordinate
-      transformation function written in C so that it may be used to
-      create an \htmlref{IntraMap}{IntraMap}. An IntraMap is a specialised form of \htmlref{Mapping}{Mapping}
-      which encapsulates the C function so that it may be used like
-      any other AST Mapping. This allows you to create Mappings that
-      perform any conceivable coordinate transformation.
-
-      Registration of relevant transformation functions is required
-      before using the \htmlref{astIntraMap}{astIntraMap} constructor function to create an
-      IntraMap or reading an external representation of an IntraMap
-      from a \htmlref{Channel}{Channel}.
-   }
-   \sstsynopsis{
-      astIntraReg( const char $*$name, int nin, int nout,
-                   void ($*$ tran)( AstMapping $*$, int, int, const double $*$[],
-                                  int, int, double $*$[] ),
-                   unsigned int flags, const char $*$purpose, const char $*$author,
-                   const char $*$contact )
-   }
-   \sstparameters{
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated string containing a unique name
-         to be associated with the transformation function in order to
-         identify it. This name is case sensitive. All white space
-         will be removed before use.
-      }
-      \sstsubsection{
-         nin
-      }{
-         The number of input coordinates accepted by the
-         transformation function (i.e. the number of dimensions of the
-         space in which the input points reside). A value of AST\_\_ANY
-         may be given if the function is able to accommodate a
-         variable number of input coordinates.
-      }
-      \sstsubsection{
-         nout
-      }{
-         The number of output coordinates produced by the
-         transformation function (i.e. the number of dimensions of the
-         space in which the output points reside). A value of AST\_\_ANY
-         may be given if the function is able to produce a variable
-         number of output coordinates.
-      }
-      \sstsubsection{
-         tran
-      }{
-         Pointer to the transformation function to be registered.
-         This function should perform whatever coordinate
-         transformations are required and should have an interface
-         like \htmlref{astTranP}{astTranP} (q.v.).
-      }
-      \sstsubsection{
-         flags
-      }{
-         This value may be used to supply a set of flags which
-         describe the transformation function and which may affect the
-         behaviour of any IntraMap which uses it.  Often, a value of
-         zero will be given here, but you may also supply the bitwise
-         OR of a set of flags as described in the {\tt{"}}Transformation
-         Flags{\tt{"}} section (below).
-      }
-      \sstsubsection{
-         purpose
-      }{
-         Pointer to a null-terminated string containing a short (one
-         line) textual comment to describe the purpose of the
-         transformation function.
-      }
-      \sstsubsection{
-         author
-      }{
-         Pointer to a null-terminated string containing the name of
-         the author of the transformation function.
-      }
-      \sstsubsection{
-         contact
-      }{
-         Pointer to a null-terminated string containing contact
-         details for the author of the transformation function
-         (e.g. an e-mail or WWW address). If any IntraMap which uses
-         this transformation function is exported as part of a dataset
-         to an external user who does not have access to the function,
-         then these contact details should allow them to obtain the
-         necessary code.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Beware that an external representation of an IntraMap (created
-         by writing it to a Channel) will not include the coordinate
-         transformation function which it uses, so will only refer to the
-         function by its name (as assigned using astIntraReg).
-         Consequently, the external representation cannot be utilised by
-         another program unless that program has also registered the same
-         transformation function with the same name using an identical
-         invocation of astIntraReg. If no such registration has been
-         performed, then attempting to read the external representation
-         will result in an error.
-
-         \sstitem
-         You may use astIntraReg to register a transformation function
-         with the same name more than once, but only if the arguments
-         supplied are identical on each occasion (i.e there is no way of
-         changing things once a function has been successfully registered
-         under a given name, and attempting to do so will result in an
-         error). This feature simply allows registration to be performed
-         independently, but consistently, at several places within your
-         program, without having to check whether it has already been
-         done.
-
-         \sstitem
-         If an error occurs in the transformation function, this may be
-         indicated by setting the AST error status to an error value
-         (using \htmlref{astSetStatus}{astSetStatus}) before it returns.  This will immediately
-         terminate the current AST operation.  The error value AST\_\_ITFER
-         is available for this purpose, but other values may also be used
-         (e.g. if you wish to distinguish different types of error).
-      }
-   }
-   \sstdiytopic{
-      Transformation Flags
-   }{
-      The following flags are defined in the ``ast.h'' header file and
-      allow you to provide further information about the nature of the
-      transformation function. Having selected the set of flags which
-      apply, you should supply the bitwise OR of their values as the
-      ``flags'' argument to astIntraReg.
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NOFWD: If this flag is set, it indicates that the
-         transformation function does not implement a forward coordinate
-         transformation. In this case, any IntraMap which uses it will
-         have a \htmlref{TranForward}{TranForward} attribute value of zero and the
-         transformation function itself will not be invoked with its
-         ``forward'' argument set to a non-zero value.  By default, it is
-         assumed that a forward transformation is provided.
-
-         \sstitem
-         AST\_\_NOINV: If this flag is set, it indicates that the
-         transformation function does not implement an inverse coordinate
-         transformation. In this case, any IntraMap which uses it will
-         have a \htmlref{TranInverse}{TranInverse} attribute value of zero and the
-         transformation function itself will not be invoked with its
-         ``forward'' argument set to zero.  By default, it is assumed
-         that an inverse transformation is provided.
-
-         \sstitem
-         AST\_\_SIMPFI: You may set this flag if applying the
-         transformation function's forward coordinate transformation,
-         followed immediately by the matching inverse transformation,
-         should always restore the original set of coordinates. It
-         indicates that AST may replace such a sequence of operations by
-         an identity Mapping (a \htmlref{UnitMap}{UnitMap}) if it is encountered while
-         simplifying a compound Mapping (e.g. using \htmlref{astSimplify}{astSimplify}).  It is
-         not necessary that both transformations have actually been
-         implemented.
-
-         \sstitem
-         AST\_\_SIMPIF: You may set this flag if applying the
-         transformation function's inverse coordinate transformation,
-         followed immediately by the matching forward transformation,
-         should always restore the original set of coordinates. It
-         indicates that AST may replace such a sequence of operations by
-         an identity Mapping (a UnitMap) if it is encountered while
-         simplifying a compound Mapping (e.g. using astSimplify).  It is
-         not necessary that both transformations have actually been
-         implemented.
-      }
-   }
-}
-\sstroutine{
-   astInvert\sstlabel{astInvert}
-}{
-   Invert a Mapping
-}{
-   \sstdescription{
-      This function inverts a \htmlref{Mapping}{Mapping} by reversing the boolean sense
-      of its \htmlref{Invert}{Invert} attribute. If this attribute is zero (the
-      default), the Mapping will transform coordinates in the way
-      specified when it was created. If it is non-zero, the input and
-      output coordinates will be inter-changed so that the direction
-      of the Mapping is reversed. This will cause it to display the
-      inverse of its original behaviour.
-   }
-   \sstsynopsis{
-      void astInvert( AstMapping $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping.
-      }
-   }
-}
-\sstroutine{
-   astIsA$<$Class$>$\sstlabel{astIsAClass}
-}{
-   Test membership of a class by an Object
-}{
-   \sstdescription{
-      This is a family of functions which test whether an \htmlref{Object}{Object} is a
-      member of the class called $<$\htmlref{Class}{Class}$>$, or of any class derived from
-      it.
-   }
-   \sstsynopsis{
-      int astIsA$<$Class$>$( const Ast$<$Class$>$ $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         These functions apply to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astIsA$<$Class$>$()
-      }{
-         One if the Object belongs to the class called $<$Class$>$ (or to a
-         class derived from it), otherwise zero.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         member = astIsAFrame( obj );
-      }{
-         Tests whether Object {\tt{"}}obj{\tt{"}} is a member of the \htmlref{Frame}{Frame} class, or
-         of any class derived from a Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Every AST class provides a function (astIsA$<$Class$>$) of this
-         form, where $<$Class$>$ should be replaced by the class name.
-
-         \sstitem
-         This function attempts to execute even if the AST error status
-         is set
-         on entry, although no further error report will be made
-         if it subsequently fails under these circumstances.
-
-         \sstitem
-         A value of zero will be returned if this function should fail
-         for any reason. In particular, it will fail if the pointer
-         supplied does not identify an Object of any sort.
-      }
-   }
-}
-\sstroutine{
-   astKeyMap\sstlabel{astKeyMap}
-}{
-   Create a KeyMap
-}{
-   \sstdescription{
-      This function creates a new empty \htmlref{KeyMap}{KeyMap} and optionally initialises its
-      attributes. Entries can then be added to the KeyMap using the
-      \htmlref{astMapPut0$<$X$>$}{astMapPut0X} and \htmlref{astMapPut1$<$X$>$}{astMapPut1X} functions.
-
-      The KeyMap class is used to store a set of values with associated keys
-      which identify the values. The keys are strings (case-sensitive,
-      trailing spaces are ignored), and the data type of the values can be
-      integer, floating point, character string or AST \htmlref{Object}{Object} pointer. Each
-      value can be a scalar or a one-dimensional vector. A KeyMap is
-      conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
-      input into an output - the input is the key, and the output is the
-      value associated with the key. However, this is only a conceptual
-      similarity, and it should be noted that the KeyMap class inherits from
-      the Object class rather than the Mapping class. The methods of the
-      Mapping class cannot be used with a KeyMap.
-   }
-   \sstsynopsis{
-      AstKeyMap $*$astKeyMap( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new KeyMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astKeyMap()
-      }{
-         A pointer to the new KeyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astLinearApprox\sstlabel{astLinearApprox}
-}{
-   Obtain a linear approximation to a Mapping, if appropriate
-}{
-   \sstdescription{
-      This function tests the forward coordinate transformation
-      implemented by a \htmlref{Mapping}{Mapping} over a given range of input coordinates. If
-      the transformation is found to be linear to a specified level of
-      accuracy, then an array of fit coefficients is returned. These
-      may be used to implement a linear approximation to the Mapping's
-      forward transformation within the specified range of output coordinates.
-      If the transformation is not sufficiently linear, no coefficients
-      are returned.
-   }
-   \sstsynopsis{
-      int astLinearApprox( AstMapping $*$this, const double $*$lbnd,
-                           const double $*$ubnd, double tol, double $*$fit )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of doubles
-         containing the lower bounds of a box defined within the input
-         coordinate system of the Mapping. The number of elements in this
-         array should equal the value of the Mapping's \htmlref{Nin}{Nin} attribute. This
-         box should specify the region over which linearity is required.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of doubles
-         containing the upper bounds of the box specifying the region over
-         which linearity is required.
-      }
-      \sstsubsection{
-         tol
-      }{
-         The maximum permitted deviation from linearity, expressed as
-         a positive Cartesian displacement in the output coordinate
-         space of the Mapping. If a linear fit to the forward
-         transformation of the Mapping deviates from the true transformation
-         by more than this amount at any point which is tested, then no fit
-         coefficients will be returned.
-      }
-      \sstsubsection{
-         fit
-      }{
-         Pointer to an array of doubles
-         in which to return the co-efficients of the linear
-         approximation to the specified transformation. This array should
-         have at least {\tt{"}}( Nin $+$ 1 ) $*$ \htmlref{Nout}{Nout}{\tt{"}}, elements. The first Nout elements
-         hold the constant offsets for the transformation outputs. The
-         remaining elements hold the gradients. So if the Mapping has 2 inputs
-         and 3 outputs the linear approximation to the forward transformation
-         is:
-
-            X\_out = fit[0] $+$ fit[3]$*$X\_in $+$ fit[4]$*$Y\_in
-
-            Y\_out = fit[1] $+$ fit[5]$*$X\_in $+$ fit[6]$*$Y\_in
-
-            Z\_out = fit[2] $+$ fit[7]$*$X\_in $+$ fit[8]$*$Y\_in
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astLinearApprox()
-      }{
-         If the forward transformation is sufficiently linear,
-         a non-zero value is returned. Otherwise zero is returned
-         and the fit co-efficients are set to AST\_\_BAD.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function fits the Mapping's forward transformation. To fit
-         the inverse transformation, the Mapping should be inverted using
-         \htmlref{astInvert}{astInvert}
-         before invoking this function.
-
-         \sstitem
-         A value of zero
-         will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   astLock\sstlabel{astLock}
-}{
-   Lock an Object for exclusive use by the calling thread
-}{
-   \sstdescription{
-      The thread-safe public interface to AST is designed so that an
-      error is reported if any thread attempts to use an \htmlref{Object}{Object} that it
-      has not previously locked for its own exclusive use using this
-      function. When an Object is created, it is initially locked by the
-      thread that creates it, so newly created objects do not need to be
-      explicitly locked. However, if an Object pointer is passed to
-      another thread, the original thread must first unlock it (using
-      \htmlref{astUnlock}{astUnlock}) and the new thread must then lock it (using astLock)
-      before the new thread can use the Object.
-
-      The {\tt{"}}wait{\tt{"}} parameter determines what happens if the supplied Object
-      is curently locked by another thread when this function is invoked.
-   }
-   \sstsynopsis{
-      void astLock( AstObject $*$this, int wait )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object to be locked.
-      }
-      \sstsubsection{
-         wait
-      }{
-         If the Object is curently locked by another thread then this
-         function will either report an error or block. If a non-zero value
-         is supplied for {\tt{"}}wait{\tt{"}}, the calling thread waits until the object
-         is available for it to use. Otherwise, an error is reported and
-         the function returns immediately without locking the Object.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The \htmlref{astAnnul}{astAnnul} function is exceptional in that it can be used on
-         pointers for Objects that are not currently locked by the calling
-         thread. All other AST functions will report an error.
-
-         \sstitem
-         The Locked object will belong to the current AST context.
-
-         \sstitem
-         This function returns without action if the Object is already
-         locked by the calling thread.
-
-         \sstitem
-         If simultaneous use of the same object is required by two or more
-         threads, \htmlref{astCopy}{astCopy} should be used to to produce a deep copy of
-         the Object for each thread. Each copy should then be unlocked by
-         the parent thread (i.e. the thread that created the copy), and then
-         locked by the child thread (i.e. the thread that wants to use the
-         copy).
-
-         \sstitem
-         This function is only available in the C interface.
-
-         \sstitem
-         This function returns without action if the AST library has
-         been built without POSIX thread support (i.e. the {\tt{"}}-with-pthreads{\tt{"}}
-         option was not specified when running the {\tt{"}}configure{\tt{"}} script).
-      }
-   }
-}
-\sstroutine{
-   astLutMap\sstlabel{astLutMap}
-}{
-   Create a LutMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{LutMap}{LutMap} and optionally initialises
-      its attributes.
-
-      A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates by using linear interpolation in a
-      lookup table.  Each input coordinate value is first scaled to
-      give the index of an entry in the table by subtracting a
-      starting value (the input coordinate corresponding to the first
-      table entry) and dividing by an increment (the difference in
-      input coordinate value between adjacent table entries).
-
-      The resulting index will usually contain a fractional part, so
-      the output coordinate value is then generated by interpolating
-      linearly between the appropriate entries in the table. If the
-      index lies outside the range of the table, linear extrapolation
-      is used based on the two nearest entries (i.e. the two entries
-      at the start or end of the table, as appropriate).
-
-      If the lookup table entries increase or decrease monotonically,
-      then the inverse transformation may also be performed.
-   }
-   \sstsynopsis{
-      AstLutMap $*$astLutMap( int nlut, const double lut[],
-                            double start, double inc,
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nlut
-      }{
-         The number of entries in the lookup table. This value must be
-         at least 2.
-      }
-      \sstsubsection{
-         lut
-      }{
-         An array containing the {\tt{"}}nlut{\tt{"}}
-         lookup table entries.
-      }
-      \sstsubsection{
-         start
-      }{
-         The input coordinate value which corresponds to the first lookup
-         table entry.
-      }
-      \sstsubsection{
-         inc
-      }{
-         The lookup table spacing (the increment in input coordinate
-         value between successive lookup table entries). This value
-         may be positive or negative, but must not be zero.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new LutMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astLutMap()
-      }{
-         A pointer to the new LutMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the entries in the lookup table either increase or decrease
-         monotonically, then the new LutMap's \htmlref{TranInverse}{TranInverse} attribute will
-         have a value of one, indicating that the inverse transformation
-         can be performed. Otherwise, it will have a value of zero, so
-         that any attempt to use the inverse transformation will result
-         in an error.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astMapBox\sstlabel{astMapBox}
-}{
-   Find a bounding box for a Mapping
-}{
-   \sstdescription{
-      This function allows you to find the {\tt{"}}bounding box{\tt{"}} which just
-      encloses another box after it has been transformed by a \htmlref{Mapping}{Mapping}
-      (using either its forward or inverse transformation). A typical
-      use might be to calculate the size of an image after being
-      transformed by a Mapping.
-
-      The function works on one dimension at a time. When supplied
-      with the lower and upper bounds of a rectangular region (box) of
-      input coordinate space, it finds the lowest and highest values
-      taken by a nominated output coordinate within that
-      region. Optionally, it also returns the input coordinates where
-      these bounding values are attained. It should be used repeatedly
-      to obtain the extent of the bounding box in more than one
-      dimension.
-   }
-   \sstsynopsis{
-      void astMapBox( AstMapping $*$this,
-                      const double lbnd\_in[], const double ubnd\_in[],
-                      int forward, int coord\_out,
-                      double $*$lbnd\_out, double $*$ubnd\_out,
-                      double xl[], double xu[] );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping.
-      }
-      \sstsubsection{
-         lbnd\_in
-      }{
-         Pointer to an array of double, with one element for each
-         Mapping input coordinate. This should contain the lower bound
-         of the input box in each input dimension.
-      }
-      \sstsubsection{
-         ubnd\_in
-      }{
-         Pointer to an array of double, with one element for each
-         Mapping input coordinate. This should contain the upper bound
-         of the input box in each input dimension.
-
-         Note that it is permissible for the upper bound to be less
-         than the corresponding lower bound, as the values will simply
-         be swapped before use.
-      }
-      \sstsubsection{
-         forward
-      }{
-         If this value is non-zero, then the Mapping's forward
-         transformation will be used to transform the input
-         box. Otherwise, its inverse transformation will be used.
-
-         (If the inverse transformation is selected, then references
-         to {\tt{"}}input{\tt{"}} and {\tt{"}}output{\tt{"}} coordinates in this description
-         should be transposed. For example, the size of the {\tt{"}}lbnd\_in{\tt{"}}
-         and {\tt{"}}ubnd\_in{\tt{"}} arrays should match the number of output
-         coordinates, as given by the Mapping's \htmlref{Nout}{Nout}
-         attribute. Similarly, the {\tt{"}}coord\_out{\tt{"}} parameter, below,
-         should nominate one of the Mapping's input coordinates.)
-      }
-      \sstsubsection{
-         coord\_out
-      }{
-         The index of the output coordinate for which the lower and
-         upper bounds are required. This value should be at least one,
-         and no larger than the number of Mapping output coordinates.
-      }
-      \sstsubsection{
-         lbnd\_out
-      }{
-         Pointer to a double in which to return the lowest value taken
-         by the nominated output coordinate within the specified
-         region of input coordinate space.
-      }
-      \sstsubsection{
-         ubnd\_out
-      }{
-         Pointer to a double in which to return the highest value
-         taken by the nominated output coordinate within the specified
-         region of input coordinate space.
-      }
-      \sstsubsection{
-         xl
-      }{
-         An optional pointer to an array of double, with one element
-         for each Mapping input coordinate. If given, this array will
-         be filled with the coordinates of an input point (although
-         not necessarily a unique one) for which the nominated output
-         coordinate attains the lower bound value returned in
-         {\tt{"}}$*$lbnd\_out{\tt{"}}.
-
-         If these coordinates are not required, a NULL pointer may be
-         supplied.
-      }
-      \sstsubsection{
-         xu
-      }{
-         An optional pointer to an array of double, with one element
-         for each Mapping input coordinate. If given, this array will
-         be filled with the coordinates of an input point (although
-         not necessarily a unique one) for which the nominated output
-         coordinate attains the upper bound value returned in
-         {\tt{"}}$*$ubnd\_out{\tt{"}}.
-
-         If these coordinates are not required, a NULL pointer may be
-         supplied.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Any input points which are transformed by the Mapping to give
-         output coordinates containing the value AST\_\_BAD are regarded as
-         invalid and are ignored. They will make no contribution to
-         determining the output bounds, even although the nominated
-         output coordinate might still have a valid value at such points.
-
-         \sstitem
-         An error will occur if the required output bounds cannot be
-         found. Typically, this might happen if all the input points
-         which the function considers turn out to be invalid (see
-         above). The number of points considered before generating such
-         an error is quite large, so this is unlikely to occur by
-         accident unless valid points are restricted to a very small
-         subset of the input coordinate space.
-
-         \sstitem
-         The values returned via {\tt{"}}lbnd\_out{\tt{"}}, {\tt{"}}ubnd\_out{\tt{"}}, {\tt{"}}xl{\tt{"}} and {\tt{"}}xu{\tt{"}}
-         will be set to the value AST\_\_BAD if this function should fail
-         for any reason. Their initial values on entry will not be
-         altered if the function is invoked with the AST error status
-         set.
-      }
-   }
-}
-\sstroutine{
-   astMapGet0$<$X$>$\sstlabel{astMapGet0X}
-}{
-   Get a scalar value from a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions for retrieving a scalar value from a \htmlref{KeyMap}{KeyMap}.
-      You should replace $<$X$>$ in the generic function name
-      astMapGet0$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-      The stored value is converted to the data type indiced by $<$X$>$
-      before being returned (an error is reported if it is not possible to
-      convert the stored value to the requested data type).
-   }
-   \sstsynopsis{
-      int astMapGet0$<$X$>$( AstKeyMap $*$this, const char $*$key, $<$X$>$type $*$value );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         value
-      }{
-         A pointer to a buffer in which to return the requested value.
-         If the requested key is not found, then the contents of the
-         buffer on entry to this function will be unchanged on exit.
-         For pointer types ({\tt{"}}A{\tt{"}} and {\tt{"}}C{\tt{"}}), the buffer should be a suitable
-         pointer, and the address of this pointer should be supplied as the
-         {\tt{"}}value{\tt{"}} parameter.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapGet0$<$X$>$()
-      }{
-         a non-zero value
-         if the requested key name was found, and is set to
-         zero
-         otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No error is reported if the requested key cannot be found in the
-         given KeyMap, but a
-         zero
-         value will be returned as the function value. The supplied buffer
-         will be returned unchanged.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-
-         \sstitem
-         If the stored value is a vector value, then the first value in
-         the vector will be returned.
-
-         \sstitem
-         A string pointer returned by astMapGet0C is guaranteed to remain valid
-         and the string to which it points will not be over-written for a
-         total of 50 successive invocations of this function. After this,
-         the memory containing the string may be re-used, so a copy of
-         the string should be made if it is needed for longer than this.
-
-         \sstitem
-         If the returned value is an AST \htmlref{Object}{Object} pointer, the Object's reference
-         count is incremented by this call. Any subsequent changes made to
-         the Object using the returned pointer will be reflected in any
-         any other active pointers for the Object. The returned pointer
-         should be annulled using
-         \htmlref{astAnnul}{astAnnul}
-         when it is no longer needed.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      function, you should replace $<$X$>$ in the generic function name astMapGet0$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         F: float
-
-         \sstitem
-         D: double
-
-         \sstitem
-         I: int
-
-         \sstitem
-         C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
-         \sstitem
-         A: Pointer to AstObject
-
-         \sstitem
-         P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
-      }
-      For example, astMapGet0D would be used to get a {\tt{"}}double{\tt{"}} value,
-      while astMapGet0I would be used to get an {\tt{"}}int{\tt{"}}, etc.
-   }
-}
-\sstroutine{
-   astMapGet1$<$X$>$\sstlabel{astMapGet1X}
-}{
-   Get a vector value from a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions for retrieving a vector value from a \htmlref{KeyMap}{KeyMap}.
-      You should replace $<$X$>$ in the generic function name
-      astMapGet1$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-      The stored value is converted to the data type indiced by $<$X$>$
-      before being returned (an error is reported if it is not possible to
-      convert the stored value to the requested data type).
-      Note, the astMapGet1C function has an extra parameter {\tt{"}}l{\tt{"}} which
-      specifies the maximum length of each string to be stored in the
-      {\tt{"}}value{\tt{"}} buffer (see the {\tt{"}}astMapGet1C{\tt{"}} section below).
-   }
-   \sstsynopsis{
-      int astMapGet1$<$X$>$( AstKeyMap $*$this, const char $*$key, int mxval,
-                         int $*$nval, $<$X$>$type $*$value )
-      int astMapGet1C( AstKeyMap $*$this, const char $*$key, int l, int mxval,
-                       int $*$nval, const char $*$value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         mxval
-      }{
-         The number of elements in the
-         {\tt{"}}value{\tt{"}} array.
-      }
-      \sstsubsection{
-         nval
-      }{
-         The address of an integer in which to put the
-         number of elements stored in the
-         {\tt{"}}value{\tt{"}} array.
-         Any unused elements of the array are left unchanged.
-      }
-      \sstsubsection{
-         value
-      }{
-         A pointer to an array in which to return the requested values.
-         If the requested key is not found, then the contents of the
-         buffer on entry to this function will be unchanged on exit.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapGet1$<$X$>$()
-      }{
-         a non-zero value
-         if the requested key name was found, and is set to
-         zero
-         otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No error is reported if the requested key cannot be found in the
-         given KeyMap, but a
-         zero
-         value will be returned as the function value. The supplied array
-         will be returned unchanged.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-
-         \sstitem
-         If the stored value is a scalar value, then the value will be
-         returned in the first element of the supplied array, and
-         {\tt{"}}nval{\tt{"}}
-         will be returned set to 1.
-      }
-   }
-   \sstdiytopic{
-      astMapGet1C
-   }{
-      The {\tt{"}}value{\tt{"}} buffer supplied to the astMapGet1C function should be a
-      pointer to a character array with {\tt{"}}mxval$*$l{\tt{"}} elements, where {\tt{"}}l{\tt{"}} is
-      the maximum length of a string to be returned. The value of {\tt{"}}l{\tt{"}}
-      should be supplied as an extra parameter following {\tt{"}}key{\tt{"}} when
-      invoking astMapGet1C, and should include space for a terminating
-      null character.
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      function, you should replace $<$X$>$ in the generic function name astMapGet1$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         I: int
-
-         \sstitem
-         C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
-         \sstitem
-         A: Pointer to AstObject
-
-         \sstitem
-         P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
-      }
-      For example, astMapGet1D would be used to get {\tt{"}}double{\tt{"}} values, while
-      astMapGet1I would be used to get {\tt{"}}int{\tt{"}} values, etc. For D or I, the
-      supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to an array of doubles
-      or ints, with {\tt{"}}mxval{\tt{"}} elements. For C, the supplied {\tt{"}}value{\tt{"}} parameter
-      should be a pointer to a character string with {\tt{"}}mxval$*$l{\tt{"}} elements.
-      For A, the supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to an
-      array of AstObject pointers.
-   }
-}
-\sstroutine{
-   astMapGetElem$<$X$>$\sstlabel{astMapGetElemX}
-}{
-   Get a single element of a vector value from a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions for retrieving a single element of a vector
-      value from a \htmlref{KeyMap}{KeyMap}. You should replace $<$X$>$ in the generic function name
-      astMapGetElem$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-      The stored value is converted to the data type indiced by $<$X$>$
-      before being returned (an error is reported if it is not possible to
-      convert the stored value to the requested data type).
-      Note, the astMapGetElemC function has an extra parameter {\tt{"}}l{\tt{"}} which
-      specifies the maximum length of the string to be stored in the
-      {\tt{"}}value{\tt{"}} buffer (see the {\tt{"}}astMapGetElemC{\tt{"}} section below).
-   }
-   \sstsynopsis{
-      int astMapGetElem$<$X$>$( AstKeyMap $*$this, const char $*$key, int elem,
-                            $<$X$>$type $*$value )
-      int astMapGetElemC( AstKeyMap $*$this, const char $*$key, int l, int elem,
-                          const char $*$value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-      \sstsubsection{
-         elem
-      }{
-         The index of the required vector element, starting at
-         zero.
-         An error will be reported if the value is outside the range of
-         the vector.
-      }
-      \sstsubsection{
-         value
-      }{
-         A pointer to a buffer in which to return the requested value.
-         If the requested key is not found, then the contents of the
-         buffer on entry to this function will be unchanged on exit.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapGetElem$<$X$>$()
-      }{
-         a non-zero value
-         if the requested key name was found, and is set to
-         zero
-         otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No error is reported if the requested key cannot be found in the
-         given KeyMap, but a
-         zero
-         value will be returned as the function value.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-      }
-   }
-   \sstdiytopic{
-      astMapGetElemC
-   }{
-      The {\tt{"}}value{\tt{"}} buffer supplied to the astMapGetElemC function should be a
-      pointer to a character array with {\tt{"}}l{\tt{"}} elements, where {\tt{"}}l{\tt{"}} is the
-      maximum length of the string to be returned. The value of {\tt{"}}l{\tt{"}}
-      should be supplied as an extra parameter following {\tt{"}}key{\tt{"}} when
-      invoking astMapGetElemC, and should include space for a terminating
-      null character.
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      function, you should replace $<$X$>$ in the generic function name
-      astMapGetElem$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         I: int
-
-         \sstitem
-         C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
-         \sstitem
-         A: Pointer to AstObject
-
-         \sstitem
-         P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
-      }
-      For example, astMapGetElemD would be used to get a {\tt{"}}double{\tt{"}} value, while
-      astMapGetElemI would be used to get an {\tt{"}}int{\tt{"}} value, etc. For D or I, the
-      supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to a double or int. For
-      C, the supplied {\tt{"}}value{\tt{"}} parameter should be a pointer to a character
-      string with {\tt{"}}l{\tt{"}} elements. For A, the supplied {\tt{"}}value{\tt{"}} parameter should
-      be a pointer to an AstObject pointer.
-   }
-}
-\sstroutine{
-   astMapHasKey\sstlabel{astMapHasKey}
-}{
-   Check if an entry with a given key exists in a KeyMap
-}{
-   \sstdescription{
-      This function returns a flag indicating if the \htmlref{KeyMap}{KeyMap} contains an
-      entry with the given key.
-   }
-   \sstsynopsis{
-      int astMapHasKey( AstKeyMap $*$this, const char $*$key )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the KeyMap entry. Trailing spaces are
-         ignored.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapHasKey()
-      }{
-         Non-zero if the key was found, and zero otherwise.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of
-         zero
-         will be returned if an error has already occurred, or if this
-         function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astMapKey\sstlabel{astMapKey}
-}{
-   Get the key at a given index within the KeyMap
-}{
-   \sstdescription{
-      This function returns a string holding the key for the entry with
-      the given index within the \htmlref{KeyMap}{KeyMap}.
-
-      This function is intended primarily as a means of iterating round all
-      the elements in a KeyMap. For this purpose, the number of entries in
-      the KeyMap should first be found using
-      \htmlref{astMapSize}{astMapSize}
-      and this function should then be called in a loop, with the index
-      value going from
-      zero to one less than the size of the KeyMap.
-      The index associated with a given entry is not, in general, related to
-      the order in which the entries are added to the KeyMap, and may change
-      if other entries are added to or removed from the KeyMap.
-   }
-   \sstsynopsis{
-      const char $*$astMapKey( AstKeyMap $*$this, int index )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         index
-      }{
-         The index into the KeyMap. The first entry has index
-         zero, and the last has index {\tt{"}}size-1{\tt{"}}, where {\tt{"}}size{\tt{"}} is the value
-         returned by the astMapSize function.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapKey()
-      }{
-         A pointer to a null-terminated string containing the key.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned pointer is guaranteed to remain valid and the
-         string to which it points will not be over-written for a total
-         of 50 successive invocations of this function. After this, the
-         memory containing the string may be re-used, so a copy of the
-         string should be made if it is needed for longer than this.
-
-         \sstitem
-         A NULL pointer will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   astMapLenC\sstlabel{astMapLenC}
-}{
-   Get the number of characters in a character entry in a KeyMap
-}{
-   \sstdescription{
-      This function returns the minimum length which a character variable
-      which must have in order to be able to store a specified entry in
-      the supplied \htmlref{KeyMap}{KeyMap}. If the named entry is a vector entry, then the
-      returned value is the length of the longest element of the vector
-      value.
-   }
-   \sstsynopsis{
-      int astMapLenC( AstKeyMap $*$this, const char $*$key )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the KeyMap entry. Trailing
-         spaces are ignored.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapLenC()
-      }{
-         The length (i.e. number of characters) of the longest formatted
-         value associated with the named entry.
-         This does not include the trailing null character.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero will be returned without error if the
-         named entry cannot be formatted as a character string.
-
-         \sstitem
-         A function value of zero will be returned if an error has already
-         occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astMapLength\sstlabel{astMapLength}
-}{
-   Get the vector length of an entry in a KeyMap
-}{
-   \sstdescription{
-      This function returns the vector length of a named entry in a \htmlref{KeyMap}{KeyMap},
-      (that is, how many values are associated with the entry).
-   }
-   \sstsynopsis{
-      int astMapLength( AstKeyMap $*$this, const char $*$key )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the KeyMap entry. Trailing
-         spaces are ignored.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapLength()
-      }{
-         The length of the entry. One for a scalar, greater than one for
-         a vector. A value of zero is returned if the KeyMap does not
-         contain the named entry.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero will be returned if an error has already
-         occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astMapPut0$<$X$>$\sstlabel{astMapPut0X}
-}{
-   Add a scalar value to a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions
-      for adding scalar values to a \htmlref{KeyMap}{KeyMap}. You should use a
-      function
-      which matches the data type of the data you wish to add to the KeyMap
-      by replacing $<$X$>$ in the generic
-      function name astMapPut0$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-   }
-   \sstsynopsis{
-      void astMapPut0$<$X$>$( AstKeyMap $*$this, const char $*$key, $<$X$>$type value,
-                          const char $*$comment );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap in which to store the supplied value.
-      }
-      \sstsubsection{
-         key
-      }{
-         A character string to be stored with the value, which can later
-         be used to identify the value. Trailing spaces are ignored.
-      }
-      \sstsubsection{
-         value
-      }{
-         The value to be stored. The data type of this value should match the
-         1-character type code appended to the
-         function name (e.g. if you are using astMapPut0A, the type of this
-         value should be {\tt{"}}pointer to AstObject{\tt{"}}).
-      }
-      \sstsubsection{
-         comment
-      }{
-         A pointer to a null-terminated comment string to be stored with the
-         value. A NULL pointer may be supplied, in which case no comment is
-         stored.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-
-         \sstitem
-         If the supplied key is already in use in the KeyMap, the new value
-         will replace the old value.
-
-         \sstitem
-         If the stored value is an AST \htmlref{Object}{Object} pointer, the Object's reference
-         count is incremented by this call. Any subsequent changes made to
-         the Object using the returned pointer will be reflected in any
-         any other active pointers for the Object, including any obtained
-         later using
-         astMapget0A.
-         The reference count for the Object will be decremented when the
-         KeyMap is destroyed, or the entry is removed or over-written with a
-         different pointer.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      function, you should replace $<$X$>$ in the generic function name astMapPut0$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         I: int
-
-         \sstitem
-         C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
-         \sstitem
-         A: Pointer to AstObject
-
-         \sstitem
-         P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
-      }
-      For example, astMapPut0D would be used to store a {\tt{"}}double{\tt{"}} value,
-      while astMapPut0I would be used to store an {\tt{"}}int{\tt{"}}, etc.
-
-      Note that KeyMaps containing generic {\tt{"}}void $*${\tt{"}} pointers cannot be
-      written out using \htmlref{astShow}{astShow} or \htmlref{astWrite}{astWrite}. An error will be reported if
-      this is attempted.
-   }
-}
-\sstroutine{
-   astMapPut1$<$X$>$\sstlabel{astMapPut1X}
-}{
-   Add a vector value to a KeyMap
-}{
-   \sstdescription{
-      This is a set of functions
-      for adding vector values to a \htmlref{KeyMap}{KeyMap}. You should use a
-      function
-      which matches the data type of the data you wish to add to the KeyMap
-      by replacing $<$X$>$ in the generic
-      function name astMapPut1$<$X$>$
-      by an appropriate 1-character type code (see the {\tt{"}}Data Type Codes{\tt{"}}
-      section below for the code appropriate to each supported data type).
-   }
-   \sstsynopsis{
-      void astMapPut1$<$X$>$( AstKeyMap $*$this, const char $*$key, int size,
-                          const $<$X$>$type value[], const char $*$comment );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap in which to store the supplied values.
-      }
-      \sstsubsection{
-         key
-      }{
-         A character string to be stored with the values, which can later
-         be used to identify the values. Trailing spaces are ignored.
-      }
-      \sstsubsection{
-         size
-      }{
-         The number of elements in the supplied array of values.
-      }
-      \sstsubsection{
-         value
-      }{
-         The array of values to be stored. The data type of this value should
-         match the 1-character type code appended to the
-         function name (e.g. if you are using astMapPut1A, the type of this
-         value should be {\tt{"}}array of pointers to AstObject{\tt{"}}).
-      }
-      \sstsubsection{
-         comment
-      }{
-         A pointer to a null-terminated comment string to be stored with the
-         values. A NULL pointer may be supplied, in which case no comment is
-         stored.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the supplied key is already in use in the KeyMap, the new values
-         will replace the old values.
-
-         \sstitem
-         Key names are case sensitive, and white space is considered
-         significant.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate
-      function, you should replace $<$X$>$ in the generic function name astMapPut1$<$X$>$
-      with a 1-character data type code, so as to match the data type $<$X$>$type
-      of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         I: int
-
-         \sstitem
-         C: {\tt{"}}const{\tt{"}} pointer to null terminated character string
-
-         \sstitem
-         A: Pointer to AstObject
-
-         \sstitem
-         P: Generic {\tt{"}}void $*${\tt{"}} pointer
-
-      }
-      For example, astMapPut1D would be used to store {\tt{"}}double{\tt{"}} values,
-      while astMapPut1I would be used to store {\tt{"}}int{\tt{"}}, etc.
-
-      Note that KeyMaps containing generic {\tt{"}}void $*${\tt{"}} pointers cannot be
-      written out using \htmlref{astShow}{astShow} or \htmlref{astWrite}{astWrite}. An error will be reported if
-      this is attempted.
-   }
-}
-\sstroutine{
-   astMapRegion\sstlabel{astMapRegion}
-}{
-   Transform a Region into a new Frame using a given Mapping
-}{
-   \sstdescription{
-      This function returns a pointer to a new \htmlref{Region}{Region} which corresponds to
-      supplied Region described by some other specified coordinate system. A
-      \htmlref{Mapping}{Mapping} is supplied which transforms positions between the old and new
-      coordinate systems. The new Region may not be of the same class as
-      the original region.
-   }
-   \sstsynopsis{
-      AstRegion $*$astMapRegion( AstRegion $*$this, AstMapping $*$map,
-                               AstFrame $*$frame )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         map
-      }{
-         Pointer to a Mapping which transforms positions from the
-         coordinate system represented by the supplied Region to the
-         coordinate system specified by
-         {\tt{"}}frame{\tt{"}}.
-         The supplied Mapping should define both forward and inverse
-         transformations, and these transformations should form a genuine
-         inverse pair. That is, transforming a position using the forward
-         transformation and then using the inverse transformation should
-         produce the original input position. Some Mapping classes (such
-         as \htmlref{PermMap}{PermMap}, \htmlref{MathMap}{MathMap}, \htmlref{SphMap}{SphMap}) can result in Mappings for which this
-         is not true.
-      }
-      \sstsubsection{
-         frame
-      }{
-         Pointer to a \htmlref{Frame}{Frame} describing the coordinate system in which
-         the new Region is required.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapRegion()
-      }{
-         A pointer to a new Region. This Region will represent the area
-         within the coordinate system specified by
-         {\tt{"}}frame{\tt{"}}
-         which corresponds to the supplied Region.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The uncertainty associated with the supplied Region is modified
-         using the supplied Mapping.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astMapRemove\sstlabel{astMapRemove}
-}{
-   Removed a named entry from a KeyMap
-}{
-   \sstdescription{
-      This function
-      removes a named entry from a \htmlref{KeyMap}{KeyMap}. It returns without action if the
-      KeyMap does not contain the specified key.
-   }
-   \sstsynopsis{
-      void astMapRemove( AstKeyMap $*$this, const char $*$key )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the value to be retrieved. Trailing
-         spaces are ignored.
-      }
-   }
-}
-\sstroutine{
-   astMapSize\sstlabel{astMapSize}
-}{
-   Get the number of entries in a KeyMap
-}{
-   \sstdescription{
-      This function returns the number of entries in a \htmlref{KeyMap}{KeyMap}.
-   }
-   \sstsynopsis{
-      int astMapSize( AstKeyMap $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapSize()
-      }{
-         The number of entries in the KeyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero will be returned if an error has already
-         occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astMapSplit\sstlabel{astMapSplit}
-}{
-   Split a Mapping up into parallel component Mappings
-}{
-   \sstdescription{
-      This function
-      creates a new \htmlref{Mapping}{Mapping} which connects specified inputs within a
-      supplied Mapping to the corresponding outputs of the supplied Mapping.
-      This is only possible if the specified inputs correspond to some
-      subset of the Mapping outputs. That is, there must exist a subset of
-      the Mapping outputs for which each output depends only on the selected
-      Mapping inputs, and not on any of the inputs which have not been
-      selected. Also, any output which is not in this subset must not depend
-      on any of the selected inputs. If these conditions are not met by the
-      supplied Mapping, then
-      a NULL
-      Mapping pointer is returned.
-   }
-   \sstsynopsis{
-      void astMapSplit( AstMapping $*$this, int nin, const int $*$in, int $*$out,
-                        AstMapping $*$$*$map )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be split.
-      }
-      \sstsubsection{
-         nin
-      }{
-         The number of inputs to pick from {\tt{"}}this{\tt{"}}.
-      }
-      \sstsubsection{
-         in
-      }{
-         Pointer to an
-         array holding the indices within the supplied Mapping of the inputs
-         which are to be picked from the Mapping.
-         This array should have {\tt{"}}nin{\tt{"}} elements.
-         If {\tt{"}}\htmlref{Nin}{Nin}{\tt{"}} is the number of inputs of the supplied Mapping, then each
-         element should have a value in the range 1 to Nin.
-      }
-      \sstsubsection{
-         out
-      }{
-         Pointer to an
-         array in which to return the indices of the outputs of the supplied
-         Mapping which are fed by the picked inputs. A value of one is
-         used to refer to the first Mapping output. The supplied array should
-         have a length at least equal to the number of outputs in the
-         supplied Mapping. The number of values stored in the array on
-         exit will equal the number of outputs in the returned Mapping.
-         The i'th element in the returned array holds the index within
-         the supplied Mapping which corresponds to the i'th output of
-         the returned Mapping.
-      }
-      \sstsubsection{
-         map
-      }{
-         Address of a location at which to return a pointer to the
-         returned Mapping. This Mapping will have
-         {\tt{"}}nin{\tt{"}} inputs (the number of outputs may be different to {\tt{"}}nin{\tt{"}}). NULL
-         is returned if the supplied Mapping has no subset of outputs which
-         depend only on the selected inputs.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If this
-         function
-         is invoked with the global error status set, or if it should fail for
-         any reason, then
-         a NULL value
-         will be returned for
-         the {\tt{"}}map{\tt{"}} pointer.
-      }
-   }
-}
-\sstroutine{
-   astMapType\sstlabel{astMapType}
-}{
-   Get the data type of an entry in a KeyMap
-}{
-   \sstdescription{
-      This function returns a value indicating the data type of a
-      named entry in a \htmlref{KeyMap}{KeyMap}. This is the data type which was used when the
-      entry was added to the KeyMap.
-   }
-   \sstsynopsis{
-      int astMapType( AstKeyMap $*$this, const char $*$key )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the KeyMap.
-      }
-      \sstsubsection{
-         key
-      }{
-         The character string identifying the KeyMap entry. Trailing
-         spaces are ignored.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMapType()
-      }{
-         One of AST\_\_INTTYPE (for integer), AST\_\_DOUBLETYPE (for double
-         precision floating point), AST\_\_FLOATTYPE (for single
-         precision floating point), AST\_\_STRINGTYPE (for character string)
-         or AST\_\_OBJECTTYPE (for AST \htmlref{Object}{Object} pointer). AST\_\_BADTYPE is
-         returned if the supplied key is not found in the KeyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of AST\_\_BADTYPE will be returned if an error has
-         already occurred, or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astMark\sstlabel{astMark}
-}{
-   Draw a set of markers for a Plot
-}{
-   \sstdescription{
-      This function draws a set of markers (symbols) at positions
-      specified in the physical coordinate system of a \htmlref{Plot}{Plot}. The
-      positions are transformed into graphical coordinates to
-      determine where the markers should appear within the plotting
-      area.
-   }
-   \sstsynopsis{
-      void astMark( AstPlot $*$this, int nmark, int ncoord, int indim,
-                    const double $*$in, int type )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         nmark
-      }{
-         The number of markers to draw. This may be zero, in which
-         case nothing will be drawn.
-      }
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinates being supplied for each mark
-         (i.e. the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as
-         given by its \htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         indim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}in{\tt{"}}
-         array (which contains the marker coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than {\tt{"}}nmark{\tt{"}}.
-      }
-      \sstsubsection{
-         in
-      }{
-         The address of the first element of a 2-dimensional array of
-         shape {\tt{"}}[ncoord][indim]{\tt{"}} giving the
-         physical coordinates of the points where markers are to be
-         drawn. These should be stored such that the value of
-         coordinate number {\tt{"}}coord{\tt{"}} for input mark number {\tt{"}}mark{\tt{"}} is
-         found in element {\tt{"}}in[coord][mark]{\tt{"}}.
-      }
-      \sstsubsection{
-         type
-      }{
-         A value specifying the type (e.g. shape) of marker to be
-         drawn. The set of values which may be used (and the shapes
-         that will result) is determined by the underlying graphics
-         system.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Markers are not drawn at positions which have any coordinate
-         equal to the value AST\_\_BAD (or where the transformation into
-         graphical coordinates yields coordinates containing the value
-         AST\_\_BAD).
-
-         \sstitem
-         If any marker position is clipped (see \htmlref{astClip}{astClip}), then the
-         entire marker is not drawn.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not 2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astMask$<$X$>$\sstlabel{astMaskX}
-}{
-   Mask a region of a data grid
-}{
-   \sstdescription{
-      This is a set of functions for masking out regions within gridded data
-      (e.g. an image). The functions modifies a given data grid by
-      assigning a specified value to all samples which are inside (or outside
-      if {\tt{"}}inside{\tt{"}} is zero)
-      the specified \htmlref{Region}{Region}.
-
-      You should use a masking function which matches the numerical
-      type of the data you are processing by replacing $<$X$>$ in
-      the generic function name astMask$<$X$>$ by an appropriate 1- or
-      2-character type code. For example, if you are masking data
-      with type {\tt{"}}float{\tt{"}}, you should use the function astMaskF (see
-      the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-   }
-   \sstsynopsis{
-      int astMask$<$X$>$( AstRegion $*$this, AstMapping $*$map, int inside, int ndim,
-                      const int lbnd[], const int ubnd[], $<$Xtype$>$ in[],
-                      $<$Xtype$>$ val )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to a Region.
-      }
-      \sstsubsection{
-         map
-      }{
-         Pointer to a \htmlref{Mapping}{Mapping}. The forward transformation should map
-         positions in the coordinate system of the supplied Region
-         into pixel coordinates as defined by the
-         {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} parameters. A NULL pointer
-         can be supplied if the coordinate system of the supplied Region
-         corresponds to pixel coordinates. This is equivalent to
-         supplying a \htmlref{UnitMap}{UnitMap}.
-
-         The number of inputs for this Mapping (as given by its \htmlref{Nin}{Nin} attribute)
-         should match the number of axes in the supplied Region (as given
-         by the \htmlref{Naxes}{Naxes} attribute of the Region).
-         The number of outputs for the Mapping (as given by its \htmlref{Nout}{Nout} attribute)
-         should match the number of
-         grid dimensions given by the value of {\tt{"}}ndim{\tt{"}}
-         below.
-      }
-      \sstsubsection{
-         inside
-      }{
-         A boolean value which indicates which pixel are to be masked. If
-         a non-zero value
-         is supplied, then all grid pixels with centres inside the supplied
-         Region are assigned the value given by
-         {\tt{"}}val{\tt{"}},
-         and all other pixels are left unchanged. If
-         zero
-         is supplied, then all grid pixels with centres not inside the supplied
-         Region are assigned the value given by
-         {\tt{"}}val{\tt{"}},
-         and all other pixels are left unchanged. Note, the \htmlref{Negated}{Negated}
-         attribute of the Region is used to determine which pixel are
-         inside the Region and which are outside. So the inside of a Region
-         which has not been negated is the same as the outside of the
-         corresponding negated Region.
-
-         For types of Region such as \htmlref{PointList}{PointList} which have zero volume,
-         pixel centres will rarely fall exactly within the Region. For
-         this reason, the inclusion criterion is changed for zero-volume
-         Regions so that pixels are included (or excluded) if any part of
-         the Region passes through the pixel. For a PointList, this means
-         that pixels are included (or excluded) if they contain at least
-         one of the points listed in the PointList.
-      }
-      \sstsubsection{
-         ndim
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape
-         and size of the input grid, its extent along a particular
-         (j'th) dimension being ubnd[j]-lbnd[j]$+$1 (assuming the
-         index {\tt{"}}j{\tt{"}} to be zero-based). They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         in
-      }{
-         Pointer to an array, with one element for each pixel in the
-         input grid, containing the data to be masked.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using astMaskF, the type of each array element
-         should be {\tt{"}}float{\tt{"}}).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-
-         On exit, the samples specified by
-         {\tt{"}}inside{\tt{"}} are set to the value of {\tt{"}}val{\tt{"}}.
-         All other samples are left unchanged.
-      }
-      \sstsubsection{
-         val
-      }{
-         This argument should have the same type as the elements of
-         the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag the
-         masked data (see
-         {\tt{"}}inside{\tt{"}}).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMask$<$X$>$()
-      }{
-         The number of pixels to which a value of
-         {\tt{"}}badval{\tt{"}}
-         has been assigned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate masking function, you should
-      replace $<$X$>$ in the generic function name astMask$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         L: long int
-
-         \sstitem
-         UL: unsigned long int
-
-         \sstitem
-         I: int
-
-         \sstitem
-         UI: unsigned int
-
-         \sstitem
-         S: short int
-
-         \sstitem
-         US: unsigned short int
-
-         \sstitem
-         B: byte (signed char)
-
-         \sstitem
-         UB: unsigned byte (unsigned char)
-
-      }
-      For example, astMaskD would be used to process {\tt{"}}double{\tt{"}}
-      data, while astMaskS would be used to process {\tt{"}}short int{\tt{"}}
-      data, etc.
-   }
-}
-\sstroutine{
-   astMatchAxes\sstlabel{astMatchAxes}
-}{
-   Find any corresponding axes in two Frames
-}{
-   \sstdescription{
-      This function looks for corresponding axes within two supplied
-      Frames. An array of integers is returned that contains an element
-      for each axis in the second supplied \htmlref{Frame}{Frame}. An element in this array
-      will be set to zero if the associated axis within the second Frame
-      has no corresponding axis within the first Frame. Otherwise, it
-      will be set to the index (a non-zero positive integer) of the
-      corresponding axis within the first supplied Frame.
-   }
-   \sstsynopsis{
-      void astMatchAxes( AstFrame $*$frm1, AstFrame $*$frm2, int $*$axes )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frm1
-      }{
-         Pointer to the first Frame.
-      }
-      \sstsubsection{
-         frm2
-      }{
-         Pointer to the second Frame.
-      }
-      \sstsubsection{
-         axes
-      }{
-         Pointer to an
-         integer array in which to return the indices of the axes (within
-         the first Frame) that correspond to each axis within the second
-         Frame. \htmlref{Axis}{Axis} indices start at 1. A value of zero will be stored
-         in the returned array for each axis in the second Frame that has
-         no corresponding axis in the first Frame.
-
-         The number of elements in this array must be greater than or
-         equal to the number of axes in the second Frame.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Corresponding axes are identified by the fact that a \htmlref{Mapping}{Mapping} can
-         be found between them using
-         \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}.
-         Thus, {\tt{"}}corresponding axes{\tt{"}} are not necessarily identical. For
-         instance, \htmlref{SkyFrame}{SkyFrame} axes in two Frames will match even if they
-         describe different celestial coordinate systems
-      }
-   }
-}
-\sstroutine{
-   astMathMap\sstlabel{astMathMap}
-}{
-   Create a MathMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{MathMap}{MathMap} and optionally initialises its
-      attributes.
-
-      A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
-      and/or inverse transformation functions using arithmetic operations
-      and mathematical functions similar to those available in C. The
-      MathMap interprets these functions at run-time, whenever its forward
-      or inverse transformation is required. Because the functions are not
-      compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
-      describe coordinate transformations in a transportable manner. A
-      MathMap therefore provides a flexible way of defining new types of
-      Mapping whose descriptions may be stored as part of a dataset and
-      interpreted by other programs.
-   }
-   \sstsynopsis{
-      AstMathMap $*$astMathMap( int nin, int nout,
-                              int nfwd, const char $*$fwd[],
-                              int ninv, const char $*$inv[],
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nin
-      }{
-         Number of input variables for the MathMap. This determines the
-         value of its \htmlref{Nin}{Nin} attribute.
-      }
-      \sstsubsection{
-         nout
-      }{
-         Number of output variables for the MathMap. This determines the
-         value of its \htmlref{Nout}{Nout} attribute.
-      }
-      \sstsubsection{
-         nfwd
-      }{
-         The number of forward transformation functions being supplied.
-         This must be at least equal to {\tt{"}}nout{\tt{"}}, but may be increased to
-         accommodate any additional expressions which define intermediate
-         variables for the forward transformation (see the {\tt{"}}Calculating
-         Intermediate Values{\tt{"}} section below).
-      }
-      \sstsubsection{
-         fwd
-      }{
-         An array (with {\tt{"}}nfwd{\tt{"}} elements) of pointers to null terminated strings
-         which contain the expressions defining the forward transformation.
-         The syntax of these expressions is described below.
-      }
-      \sstsubsection{
-         ninv
-      }{
-         The number of inverse transformation functions being supplied.
-         This must be at least equal to {\tt{"}}nin{\tt{"}}, but may be increased to
-         accommodate any additional expressions which define intermediate
-         variables for the inverse transformation (see the {\tt{"}}Calculating
-         Intermediate Values{\tt{"}} section below).
-      }
-      \sstsubsection{
-         inv
-      }{
-         An array (with {\tt{"}}ninv{\tt{"}} elements) of pointers to null terminated strings
-         which contain the expressions defining the inverse transformation.
-         The syntax of these expressions is described below.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new MathMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMathMap()
-      }{
-         A pointer to the new MathMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The sequence of numbers produced by the random number functions
-         available within a MathMap is normally unpredictable and different for
-         each MathMap. However, this behaviour may be controlled by means of
-         the MathMap's \htmlref{Seed}{Seed} attribute.
-
-         \sstitem
-         Normally, compound Mappings (CmpMaps) which involve MathMaps will
-         not be subject to simplification (e.g. using \htmlref{astSimplify}{astSimplify}) because AST
-         cannot know how different MathMaps will interact. However, in the
-         special case where a MathMap occurs in series with its own inverse,
-         then simplification may be possible. Whether simplification does, in
-         fact, occur under these circumstances is controlled by the MathMap's
-         \htmlref{SimpFI}{SimpFI} and \htmlref{SimpIF}{SimpIF} attributes.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Defining Transformation Functions
-   }{
-      A MathMap's transformation functions are supplied as a set of
-      expressions in an array of character strings. Normally you would
-      supply the same number of expressions for the forward transformation,
-      via the {\tt{"}}fwd{\tt{"}} parameter, as there are output variables (given by the
-      MathMap's Nout attribute). For instance, if Nout is 2 you might use:
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}r = sqrt( x $*$ x $+$ y $*$ y ){\tt{"}}
-
-         \sstitem
-         {\tt{"}}theta = atan2( y, x ){\tt{"}}
-
-      }
-      which defines a transformation from Cartesian to polar
-      coordinates. Here, the variables that appear on the left of each
-      expression ({\tt{"}}r{\tt{"}} and {\tt{"}}theta{\tt{"}}) provide names for the output variables
-      and those that appear on the right ({\tt{"}}x{\tt{"}} and {\tt{"}}y{\tt{"}}) are references to
-      input variables.
-
-      To complement this, you must also supply expressions for the inverse
-      transformation via the {\tt{"}}inv{\tt{"}} parameter.  In this case, the number of
-      expressions given would normally match the number of MathMap input
-      coordinates (given by the Nin attribute).  If Nin is 2, you might use:
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}x = r $*$ cos( theta ){\tt{"}}
-
-         \sstitem
-         {\tt{"}}y = r $*$ sin( theta ){\tt{"}}
-
-      }
-      which expresses the transformation from polar to Cartesian
-      coordinates. Note that here the input variables ({\tt{"}}x{\tt{"}} and {\tt{"}}y{\tt{"}}) are
-      named on the left of each expression, and the output variables ({\tt{"}}r{\tt{"}}
-      and {\tt{"}}theta{\tt{"}}) are referenced on the right.
-
-      Normally, you cannot refer to a variable on the right of an expression
-      unless it is named on the left of an expression in the complementary
-      set of functions. Therefore both sets of functions (forward and
-      inverse) must be formulated using the same consistent set of variable
-      names. This means that if you wish to leave one of the transformations
-      undefined, you must supply dummy expressions which simply name each of
-      the output (or input) variables.  For example, you might use:
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}x{\tt{"}}
-
-         \sstitem
-         {\tt{"}}y{\tt{"}}
-
-      }
-      for the inverse transformation above, which serves to name the input
-      variables but without defining an inverse transformation.
-   }
-   \sstdiytopic{
-      Calculating Intermediate Values
-   }{
-      It is sometimes useful to calculate intermediate values and then to
-      use these in the final expressions for the output (or input)
-      variables. This may be done by supplying additional expressions for
-      the forward (or inverse) transformation functions. For instance, the
-      following array of five expressions describes 2-dimensional pin-cushion
-      distortion:
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}r = sqrt( xin $*$ xin $+$ yin $*$ yin ){\tt{"}}
-
-         \sstitem
-         {\tt{"}}rout = r $*$ ( 1 $+$ 0.1 $*$ r $*$ r ){\tt{"}}
-
-         \sstitem
-         {\tt{"}}theta = atan2( yin, xin ){\tt{"}}
-
-         \sstitem
-         {\tt{"}}xout = rout $*$ cos( theta ){\tt{"}}
-
-         \sstitem
-         {\tt{"}}yout = rout $*$ sin( theta ){\tt{"}}
-
-      }
-      Here, we first calculate three intermediate results ({\tt{"}}r{\tt{"}}, {\tt{"}}rout{\tt{"}}
-      and {\tt{"}}theta{\tt{"}}) and then use these to calculate the final results ({\tt{"}}xout{\tt{"}}
-      and {\tt{"}}yout{\tt{"}}). The MathMap knows that only the final two results
-      constitute values for the output variables because its Nout attribute
-      is set to 2. You may define as many intermediate variables in this
-      way as you choose. Having defined a variable, you may then refer to it
-      on the right of any subsequent expressions.
-
-      Note that when defining the inverse transformation you may only refer
-      to the output variables {\tt{"}}xout{\tt{"}} and {\tt{"}}yout{\tt{"}}.  The intermediate variables
-      {\tt{"}}r{\tt{"}}, {\tt{"}}rout{\tt{"}} and {\tt{"}}theta{\tt{"}} (above) are private to the forward
-      transformation and may not be referenced by the inverse
-      transformation. The inverse transformation may, however, define its
-      own private intermediate variables.
-   }
-   \sstdiytopic{
-      Expression Syntax
-   }{
-      The expressions given for the forward and inverse transformations
-      closely follow the syntax of the C programming language (with some
-      extensions for compatibility with Fortran). They may contain
-      references to variables and literal constants, together with
-      arithmetic, boolean, relational and bitwise operators, and function
-      invocations. A set of symbolic constants is also available. Each of
-      these is described in detail below. Parentheses may be used to
-      over-ride the normal order of evaluation. There is no built-in limit
-      to the length of expressions and they are insensitive to case or the
-      presence of additional white space.
-   }
-   \sstdiytopic{
-      Variables
-   }{
-      Variable names must begin with an alphabetic character and may contain
-      only alphabetic characters, digits, and the underscore character
-      {\tt{"}}\_{\tt{"}}. There is no built-in limit to the length of variable names.
-   }
-   \sstdiytopic{
-      Literal Constants
-   }{
-      Literal constants, such as {\tt{"}}0{\tt{"}}, {\tt{"}}1{\tt{"}}, {\tt{"}}0.007{\tt{"}} or {\tt{"}}2.505e-16{\tt{"}} may appear
-      in expressions, with the decimal point and exponent being optional (a
-      {\tt{"}}D{\tt{"}} may also be used as an exponent character for compatibility with
-      Fortran). A unary minus {\tt{"}}-{\tt{"}} may be used as a prefix.
-   }
-   \sstdiytopic{
-      Arithmetic Precision
-   }{
-      All arithmetic is floating point, performed in double precision.
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Unless indicated otherwise, if any argument of a function or operator
-      has the value AST\_\_BAD (indicating missing data), then the result of
-      that function or operation is also AST\_\_BAD, so that such values are
-      propagated automatically through all operations performed by MathMap
-      transformations.  The special value AST\_\_BAD can be represented in
-      expressions by the symbolic constant {\tt{"}}$<$bad$>${\tt{"}}.
-
-      A $<$bad$>$ result (i.e. equal to AST\_\_BAD) is also produced in response
-      to any numerical error (such as division by zero or numerical
-      overflow), or if an invalid argument value is provided to a function
-      or operator.
-   }
-   \sstdiytopic{
-      Arithmetic Operators
-   }{
-      The following arithmetic operators are available:
-      \sstitemlist{
-
-         \sstitem
-         x1 $+$ x2: Sum of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}.
-
-         \sstitem
-         x1 - x2: Difference of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}.
-
-         \sstitem
-         x1 $*$ x2: Product of {\tt{"}}x1{\tt{"}} and {\tt{"}}x1{\tt{"}}.
-
-         \sstitem
-         x1 / x2: Ratio of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}.
-
-         \sstitem
-         x1 $*$$*$ x2: {\tt{"}}x1{\tt{"}} raised to the power of {\tt{"}}x2{\tt{"}}.
-
-         \sstitem
-         $+$ x: Unary plus, has no effect on its argument.
-
-         \sstitem
-         - x: Unary minus, negates its argument.
-      }
-   }
-   \sstdiytopic{
-      Boolean Operators
-   }{
-      Boolean values are represented using zero to indicate false and
-      non-zero to indicate true. In addition, the value AST\_\_BAD is taken to
-      mean {\tt{"}}unknown{\tt{"}}. The values returned by boolean operators may therefore
-      be 0, 1 or AST\_\_BAD. Where appropriate, {\tt{"}}tri-state{\tt{"}} logic is
-      implemented. For example, {\tt{"}}a$|$$|$b{\tt{"}} may evaluate to 1 if {\tt{"}}a{\tt{"}} is non-zero,
-      even if {\tt{"}}b{\tt{"}} has the value AST\_\_BAD. This is because the result of the
-      operation would not be affected by the value of {\tt{"}}b{\tt{"}}, so long as {\tt{"}}a{\tt{"}} is
-      non-zero.
-
-      The following boolean operators are available:
-      \sstitemlist{
-
-         \sstitem
-         x1 \&\& x2: Boolean AND between {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}, returning 1 if both {\tt{"}}x1{\tt{"}}
-         and {\tt{"}}x2{\tt{"}} are non-zero, and 0 otherwise. This operator implements
-         tri-state logic. (The synonym {\tt{"}}.and.{\tt{"}} is also provided for compatibility
-         with Fortran.)
-
-         \sstitem
-         x1 $|$$|$ x2: Boolean OR between {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}, returning 1 if either {\tt{"}}x1{\tt{"}}
-         or {\tt{"}}x2{\tt{"}} are non-zero, and 0 otherwise. This operator implements
-         tri-state logic. (The synonym {\tt{"}}.or.{\tt{"}} is also provided for compatibility
-         with Fortran.)
-
-         \sstitem
-         x1 $\wedge$$\wedge$ x2: Boolean exclusive OR (XOR) between {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}}, returning
-         1 if exactly one of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}} is non-zero, and 0 otherwise. Tri-state
-         logic is not used with this operator. (The synonyms {\tt{"}}.neqv.{\tt{"}} and {\tt{"}}.xor.{\tt{"}}
-         are also provided for compatibility with Fortran, although the second
-         of these is not standard.)
-
-         \sstitem
-         x1 .eqv. x2: This is provided only for compatibility with Fortran
-         and tests whether the boolean states of {\tt{"}}x1{\tt{"}} and {\tt{"}}x2{\tt{"}} (i.e. true/false)
-         are equal. It is the negative of the exclusive OR (XOR) function.
-         Tri-state logic is not used with this operator.
-
-         \sstitem
-         ! x: Boolean unary NOT operation, returning 1 if {\tt{"}}x{\tt{"}} is zero, and
-         0 otherwise. (The synonym {\tt{"}}.not.{\tt{"}} is also provided for compatibility
-         with Fortran.)
-      }
-   }
-   \sstdiytopic{
-      Relational Operators
-   }{
-      Relational operators return the boolean result (0 or 1) of comparing
-      the values of two floating point values for equality or inequality. The
-      value AST\_\_BAD may also be returned if either argument is $<$bad$>$.
-
-      The following relational operators are available:
-      \sstitemlist{
-
-         \sstitem
-         x1 == x2: Tests whether {\tt{"}}x1{\tt{"}} equals {\tt{"}}x1{\tt{"}}. (The synonym {\tt{"}}.eq.{\tt{"}} is
-         also provided for compatibility with Fortran.)
-
-         \sstitem
-         x1 != x2: Tests whether {\tt{"}}x1{\tt{"}} is unequal to {\tt{"}}x2{\tt{"}}. (The synonym {\tt{"}}.ne.{\tt{"}}
-         is also provided for compatibility with Fortran.)
-
-         \sstitem
-         x1 $>$ x2: Tests whether {\tt{"}}x1{\tt{"}} is greater than {\tt{"}}x2{\tt{"}}. (The synonym
-         {\tt{"}}.gt.{\tt{"}} is also provided for compatibility with Fortran.)
-
-         \sstitem
-         x1 $>$= x2: Tests whether {\tt{"}}x1{\tt{"}} is greater than or equal to {\tt{"}}x2{\tt{"}}. (The
-         synonym {\tt{"}}.ge.{\tt{"}}  is also provided for compatibility with Fortran.)
-
-         \sstitem
-         x1 $<$ x2: Tests whether {\tt{"}}x1{\tt{"}} is less than {\tt{"}}x2{\tt{"}}. (The synonym {\tt{"}}.lt.{\tt{"}}
-         is also provided for compatibility with Fortran.)
-
-         \sstitem
-         x1 $<$= x2: Tests whether {\tt{"}}x1{\tt{"}} is less than or equal to {\tt{"}}x2{\tt{"}}. (The
-         synonym {\tt{"}}.le.{\tt{"}} is also provided for compatibility with Fortran.)
-
-      }
-      Note that relational operators cannot usefully be used to compare
-      values with the $<$bad$>$ value (representing missing data), because the
-      result is always $<$bad$>$. The isbad() function should be used instead.
-   }
-   \sstdiytopic{
-      Bitwise Operators
-   }{
-      The bitwise operators provided by C are often useful when operating on
-      raw data (e.g. from instruments), so they are also provided for use in
-      MathMap expressions. In this case, however, the values on which they
-      operate are floating point values rather than pure integers. In order
-      to produce results which match the pure integer case, the operands are
-      regarded as fixed point binary numbers (i.e. with the binary
-      equivalent of a decimal point) with negative numbers represented using
-      twos-complement notation. For integer values, the resulting bit
-      pattern corresponds to that of the equivalent signed integer (digits
-      to the right of the point being zero). Operations on the bits
-      representing the fractional part are also possible, however.
-
-      The following bitwise operators are available:
-      \sstitemlist{
-
-         \sstitem
-         x1 $>$$>$ x2: Rightward bit shift. The integer value of {\tt{"}}x2{\tt{"}} is taken
-         (rounding towards zero) and the bits representing {\tt{"}}x1{\tt{"}} are then
-         shifted this number of places to the right (or to the left if the
-         number of places is negative). This is equivalent to dividing {\tt{"}}x1{\tt{"}} by
-         the corresponding power of 2.
-
-         \sstitem
-         x1 $<$$<$ x2: Leftward bit shift. The integer value of {\tt{"}}x2{\tt{"}} is taken
-         (rounding towards zero), and the bits representing {\tt{"}}x1{\tt{"}} are then
-         shifted this number of places to the left (or to the right if the
-         number of places is negative). This is equivalent to multiplying {\tt{"}}x1{\tt{"}}
-         by the corresponding power of 2.
-
-         \sstitem
-         x1 \& x2: Bitwise AND between the bits of {\tt{"}}x1{\tt{"}} and those of {\tt{"}}x2{\tt{"}}
-         (equivalent to a boolean AND applied at each bit position in turn).
-
-         \sstitem
-         x1 $|$ x2: Bitwise OR between the bits of {\tt{"}}x1{\tt{"}} and those of {\tt{"}}x2{\tt{"}}
-         (equivalent to a boolean OR applied at each bit position in turn).
-
-         \sstitem
-         x1 $\wedge$ x2: Bitwise exclusive OR (XOR) between the bits of {\tt{"}}x1{\tt{"}} and
-         those of {\tt{"}}x2{\tt{"}} (equivalent to a boolean XOR applied at each bit
-         position in turn).
-
-      }
-      Note that no bit inversion operator ({\tt{"}}$\sim${\tt{"}} in C) is provided. This is
-      because inverting the bits of a twos-complement fixed point binary
-      number is equivalent to simply negating it. This differs from the
-      pure integer case because bits to the right of the binary point are
-      also inverted. To invert only those bits to the left of the binary
-      point, use a bitwise exclusive OR with the value -1 (i.e. {\tt{"}}x$\wedge$-1{\tt{"}}).
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The following functions are available:
-      \sstitemlist{
-
-         \sstitem
-         abs(x): Absolute value of {\tt{"}}x{\tt{"}} (sign removal), same as fabs(x).
-
-         \sstitem
-         acos(x): Inverse cosine of {\tt{"}}x{\tt{"}}, in radians.
-
-         \sstitem
-         acosd(x): Inverse cosine of {\tt{"}}x{\tt{"}}, in degrees.
-
-         \sstitem
-         acosh(x): Inverse hyperbolic cosine of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         acoth(x): Inverse hyperbolic cotangent of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         acsch(x): Inverse hyperbolic cosecant of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         aint(x): Integer part of {\tt{"}}x{\tt{"}} (round towards zero), same as int(x).
-
-         \sstitem
-         asech(x): Inverse hyperbolic secant of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         asin(x): Inverse sine of {\tt{"}}x{\tt{"}}, in radians.
-
-         \sstitem
-         asind(x): Inverse sine of {\tt{"}}x{\tt{"}}, in degrees.
-
-         \sstitem
-         asinh(x): Inverse hyperbolic sine of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         atan(x): Inverse tangent of {\tt{"}}x{\tt{"}}, in radians.
-
-         \sstitem
-         atand(x): Inverse tangent of {\tt{"}}x{\tt{"}}, in degrees.
-
-         \sstitem
-         atanh(x): Inverse hyperbolic tangent of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         atan2(x1, x2): Inverse tangent of {\tt{"}}x1/x2{\tt{"}}, in radians.
-
-         \sstitem
-         atan2d(x1, x2): Inverse tangent of {\tt{"}}x1/x2{\tt{"}}, in degrees.
-
-         \sstitem
-         ceil(x): Smallest integer value not less then {\tt{"}}x{\tt{"}} (round towards
-           plus infinity).
-
-         \sstitem
-         cos(x): Cosine of {\tt{"}}x{\tt{"}} in radians.
-
-         \sstitem
-         cosd(x): Cosine of {\tt{"}}x{\tt{"}} in degrees.
-
-         \sstitem
-         cosh(x): Hyperbolic cosine of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         coth(x): Hyperbolic cotangent of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         csch(x): Hyperbolic cosecant of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         dim(x1, x2): Returns {\tt{"}}x1-x2{\tt{"}} if {\tt{"}}x1{\tt{"}} is greater than {\tt{"}}x2{\tt{"}}, otherwise 0.
-
-         \sstitem
-         exp(x): Exponential function of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         fabs(x): Absolute value of {\tt{"}}x{\tt{"}} (sign removal), same as abs(x).
-
-         \sstitem
-         floor(x): Largest integer not greater than {\tt{"}}x{\tt{"}} (round towards
-           minus infinity).
-
-         \sstitem
-         fmod(x1, x2): Remainder when {\tt{"}}x1{\tt{"}} is divided by {\tt{"}}x2{\tt{"}}, same as
-           mod(x1, x2).
-
-         \sstitem
-         gauss(x1, x2): Random sample from a Gaussian distribution with mean
-           {\tt{"}}x1{\tt{"}} and standard deviation {\tt{"}}x2{\tt{"}}.
-
-         \sstitem
-         int(x): Integer part of {\tt{"}}x{\tt{"}} (round towards zero), same as aint(x).
-
-         \sstitem
-         isbad(x): Returns 1 if {\tt{"}}x{\tt{"}} has the $<$bad$>$ value (AST\_\_BAD), otherwise 0.
-
-         \sstitem
-         log(x): Natural logarithm of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         log10(x): Logarithm of {\tt{"}}x{\tt{"}} to base 10.
-
-         \sstitem
-         max(x1, x2, ...): Maximum of two or more values.
-
-         \sstitem
-         min(x1, x2, ...): Minimum of two or more values.
-
-         \sstitem
-         mod(x1, x2): Remainder when {\tt{"}}x1{\tt{"}} is divided by {\tt{"}}x2{\tt{"}}, same as
-           fmod(x1, x2).
-
-         \sstitem
-         nint(x): Nearest integer to {\tt{"}}x{\tt{"}} (round to nearest).
-
-         \sstitem
-         poisson(x): Random integer-valued sample from a Poisson
-           distribution with mean {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         pow(x1, x2): {\tt{"}}x1{\tt{"}} raised to the power of {\tt{"}}x2{\tt{"}}.
-
-         \sstitem
-         qif(x1, x2, x3): Returns {\tt{"}}x2{\tt{"}} if {\tt{"}}x1{\tt{"}} is true, and {\tt{"}}x3{\tt{"}} otherwise.
-
-         \sstitem
-         rand(x1, x2): Random sample from a uniform distribution in the
-           range {\tt{"}}x1{\tt{"}} to {\tt{"}}x2{\tt{"}} inclusive.
-
-         \sstitem
-         sech(x): Hyperbolic secant of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         sign(x1, x2): Absolute value of {\tt{"}}x1{\tt{"}} with the sign of {\tt{"}}x2{\tt{"}}
-           (transfer of sign).
-
-         \sstitem
-         sin(x): Sine of {\tt{"}}x{\tt{"}} in radians.
-
-         \sstitem
-         sinc(x): Sinc function of {\tt{"}}x{\tt{"}} [= {\tt{"}}sin(x)/x{\tt{"}}].
-
-         \sstitem
-         sind(x): Sine of {\tt{"}}x{\tt{"}} in degrees.
-
-         \sstitem
-         sinh(x): Hyperbolic sine of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         sqr(x): Square of {\tt{"}}x{\tt{"}} (= {\tt{"}}x$*$x{\tt{"}}).
-
-         \sstitem
-         sqrt(x): Square root of {\tt{"}}x{\tt{"}}.
-
-         \sstitem
-         tan(x): Tangent of {\tt{"}}x{\tt{"}} in radians.
-
-         \sstitem
-         tand(x): Tangent of {\tt{"}}x{\tt{"}} in degrees.
-
-         \sstitem
-         tanh(x): Hyperbolic tangent of {\tt{"}}x{\tt{"}}.
-      }
-   }
-   \sstdiytopic{
-      Symbolic Constants
-   }{
-      The following symbolic constants are available (the enclosing {\tt{"}}$<$$>${\tt{"}}
-      brackets must be included):
-      \sstitemlist{
-
-         \sstitem
-         $<$bad$>$: The {\tt{"}}bad{\tt{"}} value (AST\_\_BAD) used to flag missing data. Note
-         that you cannot usefully compare values with this constant because the
-         result is always $<$bad$>$. The isbad() function should be used instead.
-
-         \sstitem
-         $<$dig$>$: Number of decimal digits of precision available in a
-         floating point (double) value.
-
-         \sstitem
-         $<$e$>$: \htmlref{Base}{Base} of natural logarithms.
-
-         \sstitem
-         $<$epsilon$>$: Smallest positive number such that 1.0$+$$<$epsilon$>$ is
-         distinguishable from unity.
-
-         \sstitem
-         $<$mant\_dig$>$: The number of base $<$radix$>$ digits stored in the
-         mantissa of a floating point (double) value.
-
-         \sstitem
-         $<$max$>$: Maximum representable floating point (double) value.
-
-         \sstitem
-         $<$max\_10\_exp$>$: Maximum integer such that 10 raised to that power
-         can be represented as a floating point (double) value.
-
-         \sstitem
-         $<$max\_exp$>$: Maximum integer such that $<$radix$>$ raised to that
-         power minus 1 can be represented as a floating point (double) value.
-
-         \sstitem
-         $<$min$>$: Smallest positive number which can be represented as a
-         normalised floating point (double) value.
-
-         \sstitem
-         $<$min\_10\_exp$>$: Minimum negative integer such that 10 raised to that
-         power can be represented as a normalised floating point (double) value.
-
-         \sstitem
-         $<$min\_exp$>$: Minimum negative integer such that $<$radix$>$ raised to
-         that power minus 1 can be represented as a normalised floating point
-         (double) value.
-
-         \sstitem
-         $<$pi$>$: Ratio of the circumference of a circle to its diameter.
-
-         \sstitem
-         $<$radix$>$: The radix (number base) used to represent the mantissa of
-         floating point (double) values.
-
-         \sstitem
-         $<$rounds$>$: The mode used for rounding floating point results after
-         addition. Possible values include: -1 (indeterminate), 0 (toward
-         zero), 1 (to nearest), 2 (toward plus infinity) and 3 (toward minus
-         infinity). Other values indicate machine-dependent behaviour.
-      }
-   }
-   \sstdiytopic{
-      Evaluation Precedence and Associativity
-   }{
-      Items appearing in expressions are evaluated in the following order
-      (highest precedence first):
-      \sstitemlist{
-
-         \sstitem
-         Constants and variables
-
-         \sstitem
-         Function arguments and parenthesised expressions
-
-         \sstitem
-         Function invocations
-
-         \sstitem
-         Unary $+$ - ! .not.
-
-         \sstitem
-         $*$$*$
-
-         \sstitem
-         $*$ /
-
-         \sstitem
-         $+$ -
-
-         \sstitem
-         $<$$<$ $>$$>$
-
-         \sstitem
-         $<$ .lt. $<$= .le. $>$ .gt. $>$= .ge.
-
-         \sstitem
-         == .eq. != .ne.
-
-         \sstitem
-         \&
-
-         \sstitem
-         $\wedge$
-
-         \sstitem
-         $|$
-
-         \sstitem
-         \&\& .and.
-
-         \sstitem
-         $\wedge$$\wedge$
-
-         \sstitem
-         $|$$|$ .or
-
-         \sstitem
-         .eqv. .neqv. .xor.
-
-      }
-      All operators associate from left-to-right, except for unary $+$,
-      unary -, !, .not. and $*$$*$ which associate from right-to-left.
-   }
-}
-\sstroutine{
-   astMatrixMap\sstlabel{astMatrixMap}
-}{
-   Create a MatrixMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{MatrixMap}{MatrixMap} and optionally initialises
-      its attributes.
-
-      A MatrixMap is a form of \htmlref{Mapping}{Mapping} which performs a general linear
-      transformation.  Each set of input coordinates, regarded as a
-      column-vector, are pre-multiplied by a matrix (whose elements
-      are specified when the MatrixMap is created) to give a new
-      column-vector containing the output coordinates. If appropriate,
-      the inverse transformation may also be performed.
-   }
-   \sstsynopsis{
-      AstMatrixMap $*$astMatrixMap( int nin, int nout, int form,
-                                  const double matrix[],
-                                  const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nin
-      }{
-         The number of input coordinates, which determines the number
-         of columns in the matrix.
-      }
-      \sstsubsection{
-         nout
-      }{
-         The number of output coordinates, which determines the number
-         of rows in the matrix.
-      }
-      \sstsubsection{
-         form
-      }{
-         An integer which indicates the form in which the matrix
-         elements will be supplied.
-
-         A value of zero indicates that a full {\tt{"}}nout{\tt{"}} x {\tt{"}}nin{\tt{"}} matrix
-         of values will be supplied via the {\tt{"}}matrix{\tt{"}} parameter
-         (below). In this case, the elements should be given in row
-         order (the elements of the first row, followed by the
-         elements of the second row, etc.).
-
-         A value of 1 indicates that only the diagonal elements of the
-         matrix will be supplied, and that all others should be
-         zero. In this case, the elements of {\tt{"}}matrix{\tt{"}} should contain
-         only the diagonal elements, stored consecutively.
-
-         A value of 2 indicates that a {\tt{"}}unit{\tt{"}} matrix is required,
-         whose diagonal elements are set to unity (with all other
-         elements zero).  In this case, the {\tt{"}}matrix{\tt{"}} parameter is
-         ignored and a NULL pointer may be supplied.
-      }
-      \sstsubsection{
-         matrix
-      }{
-         The array of matrix elements to be used, stored according to
-         the value of {\tt{"}}form{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new MatrixMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astMatrixMap()
-      }{
-         A pointer to the new MatrixMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In general, a MatrixMap's forward transformation will always
-         be available (as indicated by its \htmlref{TranForward}{TranForward} attribute), but
-         its inverse transformation (\htmlref{TranInverse}{TranInverse} attribute) will only be
-         available if the associated matrix is square and non-singular.
-
-         \sstitem
-         As an exception to this, the inverse transformation is always
-         available if a unit or diagonal matrix is specified. In this
-         case, if the matrix is not square, one or more of the input
-         coordinate values may not be recoverable from a set of output
-         coordinates. Any coordinates affected in this way will simply be
-         set to the value zero.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astNegate\sstlabel{astNegate}
-}{
-   Negate the area represented by a Region
-}{
-   \sstdescription{
-      This function negates the area represented by a \htmlref{Region}{Region}. That is,
-      points which were previously inside the region will then be
-      outside, and points which were outside will be inside. This is
-      acomplished by toggling the state of the \htmlref{Negated}{Negated} attribute for
-      the supplied region.
-   }
-   \sstsynopsis{
-      void astNegate( AstRegion $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-   }
-}
-\sstroutine{
-   astNorm\sstlabel{astNorm}
-}{
-   Normalise a set of Frame coordinates
-}{
-   \sstdescription{
-      This function normalises a set of \htmlref{Frame}{Frame} coordinate values which
-      might be unsuitable for display (e.g. may lie outside the
-      expected range) into a set of acceptable values suitable for
-      display.
-   }
-   \sstsynopsis{
-      void astNorm( AstFrame $*$this, double value[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         value
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). Initially, this should contain a set of
-         coordinate values representing a point in the space which the
-         Frame describes. If these values lie outside the expected
-         range for the Frame, they will be replaced with more
-         acceptable (normalised) values. Otherwise, they will be
-         returned unchanged.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For some classes of Frame, whose coordinate values are not
-         constrained, this function will never modify the values
-         supplied. However, for Frames whose axes represent cyclic
-         quantities (such as angles or positions on the sky), coordinates
-         will typically be wrapped into an appropriate standard range,
-         such as zero to 2$*$pi.
-
-         \sstitem
-         The \htmlref{NormMap}{NormMap} class is a \htmlref{Mapping}{Mapping} which can be used to normalise a
-         set of points using the
-         astNorm function
-         of a specified Frame.
-
-         \sstitem
-         It is intended to be possible to put any set of coordinates
-         into a form suitable for display by using this function to
-         normalise them, followed by appropriate formatting
-         (using \htmlref{astFormat}{astFormat}).
-      }
-   }
-}
-\sstroutine{
-   astNormMap\sstlabel{astNormMap}
-}{
-   Create a NormMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{NormMap}{NormMap} and optionally initialises its
-      attributes.
-
-      A NormMap is a \htmlref{Mapping}{Mapping} which normalises coordinate values using the
-      \htmlref{astNorm}{astNorm} function
-      of the supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
-      are both equal to the number of axes in the supplied Frame.
-
-      The forward and inverse transformation of a NormMap are both
-      defined but are identical (that is, they do not form a real inverse
-      pair in that the inverse transformation does not undo the
-      normalisation, instead it reapplies it). However, the
-      \htmlref{astSimplify}{astSimplify}
-      function will replace neighbouring pairs of forward and inverse
-      NormMaps by a single \htmlref{UnitMap}{UnitMap}.
-   }
-   \sstsynopsis{
-      AstNormMap $*$astNormMap( AstFrame $*$frame, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame which is to be used to normalise the
-         supplied axis values.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new NormMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astNormMap()
-      }{
-         A pointer to the new NormMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astNullRegion\sstlabel{astNullRegion}
-}{
-   Create a NullRegion
-}{
-   \sstdescription{
-      This function creates a new \htmlref{NullRegion}{NullRegion} and optionally initialises its
-      attributes.
-
-      A NullRegion is a \htmlref{Region}{Region} with no bounds. If the \htmlref{Negated}{Negated} attribute of a
-      NullRegion is false, the NullRegion represents a Region containing no
-      points. If the Negated attribute of a NullRegion is true, the NullRegion
-      represents an infinite Region containing all points within the
-      coordinate system.
-   }
-   \sstsynopsis{
-      AstNullRegion $*$astNullRegion( AstFrame $*$frame, AstRegion $*$unc, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the \htmlref{Frame}{Frame} in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with positions in the supplied Frame.
-         The uncertainty in any point in the Frame is found by shifting the
-         supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
-         being considered. The area covered by the shifted uncertainty
-         Region then represents the uncertainty in the position. The
-         uncertainty is assumed to be the same for all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty of zero is
-         used.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new NullRegion. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astNullRegion()
-      }{
-         A pointer to the new NullRegion.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astOK\sstlabel{astOK}
-}{
-   Test whether AST functions have been successful
-}{
-   \sstdescription{
-      This macro returns a boolean value (0 or 1) to indicate if
-      preceding AST functions have completed successfully
-      (i.e. without setting the AST error status). If the error status
-      is set to an error value, a value of zero is returned, otherwise
-      the result is one.
-   }
-   \sstsynopsis{
-      int astOK
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astOK
-      }{
-         One if the AST error status is OK, otherwise zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the AST error status is set to an error value (after an
-         error), most AST functions will not execute and will simply
-         return without action. To clear the error status and restore
-         normal behaviour, use \htmlref{astClearStatus}{astClearStatus}.
-      }
-   }
-}
-\sstroutine{
-   astOffset\sstlabel{astOffset}
-}{
-   Calculate an offset along a geodesic curve
-}{
-   \sstdescription{
-      This function finds the \htmlref{Frame}{Frame} coordinate values of a point which
-      is offset a specified distance along the geodesic curve between
-      two other points.
-
-      For example, in a basic Frame, this offset will be along the
-      straight line joining two points. For a more specialised Frame
-      describing a sky coordinate system, however, it would be along
-      the great circle passing through two sky positions.
-   }
-   \sstsynopsis{
-      void astOffset( AstFrame $*$this,
-                      const double point1[], const double point2[],
-                      double offset, double point3[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         point1
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
-         point marking the start of the geodesic curve.
-      }
-      \sstsubsection{
-         point2
-      }{
-         An array of double, with one element for each Frame axis
-         This should contain the coordinates of the point marking the
-         end of the geodesic curve.
-      }
-      \sstsubsection{
-         offset
-      }{
-         The required offset from the first point along the geodesic
-         curve. If this is positive, it will be towards the second
-         point. If it is negative, it will be in the opposite
-         direction. This offset need not imply a position lying
-         between the two points given, as the curve will be
-         extrapolated if necessary.
-      }
-      \sstsubsection{
-         point3
-      }{
-         An array of double, with one element for each Frame axis
-         in which the coordinates of the required point will be returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The geodesic curve used by this function is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{astDistance}{astDistance} function.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value.
-
-         \sstitem
-         {\tt{"}}Bad{\tt{"}} coordinate values will also be returned if the two
-         points supplied are coincident (or otherwise fail to uniquely
-         specify a geodesic curve) but the requested offset is non-zero.
-      }
-   }
-}
-\sstroutine{
-   astOffset2\sstlabel{astOffset2}
-}{
-   Calculate an offset along a geodesic curve in a 2D Frame
-}{
-   \sstdescription{
-      This function finds the \htmlref{Frame}{Frame} coordinate values of a point which
-      is offset a specified distance along the geodesic curve at a
-      given angle from a specified starting point. It can only be
-      used with 2-dimensional Frames.
-
-      For example, in a basic Frame, this offset will be along the
-      straight line joining two points. For a more specialised Frame
-      describing a sky coordinate system, however, it would be along
-      the great circle passing through two sky positions.
-   }
-   \sstsynopsis{
-      double astOffset2( AstFrame $*$this, const double point1[2], double angle,
-                         double offset, double point2[2] );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         point1
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This should contain the coordinates of the
-         point marking the start of the geodesic curve.
-      }
-      \sstsubsection{
-         angle
-      }{
-         The angle (in radians) from the positive direction of the second
-         axis, to the direction of the required position, as seen from
-         the starting position. Positive rotation is in the sense of
-         rotation from the positive direction of axis 2 to the positive
-         direction of axis 1.
-      }
-      \sstsubsection{
-         offset
-      }{
-         The required offset from the first point along the geodesic
-         curve. If this is positive, it will be in the direction of the
-         given angle. If it is negative, it will be in the opposite
-         direction.
-      }
-      \sstsubsection{
-         point2
-      }{
-         An array of double, with one element for each Frame axis
-         in which the coordinates of the required point will be returned.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astOffset2
-      }{
-         The direction of the geodesic curve at the end point. That is, the
-         angle (in radians) between the positive direction of the second
-         axis and the continuation of the geodesic curve at the requested
-         end point. Positive rotation is in the sense of rotation from
-         the positive direction of axis 2 to the positive direction of axis
-         1.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The geodesic curve used by this function is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{astDistance}{astDistance} function.
-
-         \sstitem
-         An error will be reported if the Frame is not 2-dimensional.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value.
-      }
-   }
-}
-\sstroutine{
-   astOutline$<$X$>$\sstlabel{astOutlineX}
-}{
-   Create a new Polygon outling values in a 2D data grid
-}{
-   \sstdescription{
-      This is a set of functions that create a \htmlref{Polygon}{Polygon} enclosing a single
-      contiguous set of pixels that have a specified value within a gridded
-      2-dimensional data array (e.g. an image).
-
-      A basic 2-dimensional \htmlref{Frame}{Frame} is used to represent the pixel coordinate
-      system in the returned Polygon. The \htmlref{Domain}{Domain} attribute is set to
-      {\tt{"}}PIXEL{\tt{"}}, the \htmlref{Title}{Title} attribute is set to {\tt{"}}Pixel coordinates{\tt{"}}, and the
-      Unit attribute for each axis is set to {\tt{"}}pixel{\tt{"}}. All other
-      attributes are left unset. The nature of the pixel coordinate system
-      is determined by parameter
-      {\tt{"}}starpix{\tt{"}}.
-
-      The
-      {\tt{"}}maxerr{\tt{"}} and {\tt{"}}maxvert{\tt{"}}
-      parameters can be used to control how accurately the returned
-      Polygon represents the required region in the data array. The
-      number of vertices in the returned Polygon will be the minimum
-      needed to achieve the required accuracy.
-
-      You should use a function which matches the numerical type of the
-      data you are processing by replacing $<$X$>$ in the generic function
-      name
-      astOutline$<$X$>$
-      by an appropriate 1- or 2-character type code. For example, if you
-      are procesing data with type
-      {\tt{"}}float{\tt{"}}, you should use the function astOutlineF
-      (see the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-   }
-   \sstsynopsis{
-      AstPolygon $*$astOutline$<$X$>$( $<$Xtype$>$ value, int oper, $<$Xtype$>$ array[],
-                                 int lbnd[2], int ubnd[2], double maxerr,
-                                 int maxvert, int inside[2], int starpix )
-   }
-   \sstparameters{
-      \sstsubsection{
-         value
-      }{
-         A data value that specifies the pixels to be outlined.
-      }
-      \sstsubsection{
-         oper
-      }{
-         Indicates how the
-         {\tt{"}}value{\tt{"}}
-         parameter is used to select the outlined pixels. It can
-         have any of the following values:
-         \sstitemlist{
-
-            \sstitem
-            AST\_\_LT: outline pixels with value less than {\tt{"}}value{\tt{"}}.
-
-            \sstitem
-            AST\_\_LE: outline pixels with value less than or equal to {\tt{"}}value{\tt{"}}.
-
-            \sstitem
-            AST\_\_EQ: outline pixels with value equal to {\tt{"}}value{\tt{"}}.
-
-            \sstitem
-            AST\_\_NE: outline pixels with value not equal to {\tt{"}}value{\tt{"}}.
-
-            \sstitem
-            AST\_\_GE: outline pixels with value greater than or equal to {\tt{"}}value{\tt{"}}.
-
-            \sstitem
-            AST\_\_GT: outline pixels with value greater than {\tt{"}}value{\tt{"}}.
-         }
-      }
-      \sstsubsection{
-         array
-      }{
-         Pointer to a
-         2-dimensional array containing the data to be processed.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using astOutlineF, the type of each array element
-         should be {\tt{"}}float{\tt{"}}).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the second dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of two integers
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of two integers
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape
-         and size of the input grid, its extent along a particular
-         (j'th) dimension being ubnd[j]-lbnd[j]$+$1 (assuming the
-         index {\tt{"}}j{\tt{"}} to be zero-based). They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre or upper corner, as selected by parameter
-         {\tt{"}}starpix{\tt{"}}.
-      }
-      \sstsubsection{
-         maxerr
-      }{
-         Together with
-         {\tt{"}}maxvert{\tt{"}},
-         this determines how accurately the returned Polygon represents
-         the required region of the data array. It gives the target
-         discrepancy between the returned Polygon and the accurate outline
-         in the data array, expressed as a number of pixels. Insignificant
-         vertices are removed from the accurate outline, one by one, until
-         the number of vertices remaining in the returned Polygon equals
-         {\tt{"}}maxvert{\tt{"}},
-         or the largest discrepancy between the accurate outline and the
-         returned Polygon is greater than
-         {\tt{"}}maxerr{\tt{"}}. If {\tt{"}}maxerr{\tt{"}}
-         is zero or less, its value is ignored and the returned Polygon will
-         have the number of vertices specified by
-         {\tt{"}}maxvert{\tt{"}}.
-      }
-      \sstsubsection{
-         maxvert
-      }{
-         Together with
-         {\tt{"}}maxerr{\tt{"}},
-         this determines how accurately the returned Polygon represents
-         the required region of the data array. It gives the maximum
-         allowed number of vertices in the returned Polygon. Insignificant
-         vertices are removed from the accurate outline, one by one, until
-         the number of vertices remaining in the returned Polygon equals
-         {\tt{"}}maxvert{\tt{"}},
-         or the largest discrepancy between the accurate outline and the
-         returned Polygon is greater than
-         {\tt{"}}maxerr{\tt{"}}. If {\tt{"}}maxvert{\tt{"}}
-         is less than 3, its value is ignored and the number of vertices in
-         the returned Polygon will be the minimum needed to ensure that the
-         discrepancy between the accurate outline and the returned
-         Polygon is less than
-         {\tt{"}}maxerr{\tt{"}}.
-      }
-      \sstsubsection{
-         inside
-      }{
-         Pointer to an array of two integers
-         containing the indices of a pixel known to be inside the
-         required region. This is needed because the supplied data
-         array may contain several disjoint areas of pixels that satisfy
-         the criterion specified by
-         {\tt{"}}value{\tt{"}} and {\tt{"}}oper{\tt{"}}.
-         In such cases, the area described by the returned Polygon will
-         be the one that contains the pixel specified by
-         {\tt{"}}inside{\tt{"}}.
-         If the specified pixel is outside the bounds given by
-         {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}},
-         or has a value that does not meet the criterion specified by
-         {\tt{"}}value{\tt{"}} and {\tt{"}}oper{\tt{"}},
-         then this function will search for a suitable pixel. The search
-         starts at the central pixel and proceeds in a spiral manner until
-         a pixel is found that meets the specified crierion.
-      }
-      \sstsubsection{
-         starpix
-      }{
-         A flag indicating the nature of the pixel coordinate system used
-         to describe the vertex positions in the returned Polygon. If
-         non-zero,
-         the standard Starlink definition of pixel coordinate is used in
-         which a pixel with integer index I spans a range of pixel coordinate
-         from (I-1) to I (i.e. pixel corners have integral pixel coordinates).
-         If zero,
-         the definition of pixel coordinate used by other AST functions
-         such as astResample, astMask,
-         etc., is used. In this definition, a pixel with integer index I
-         spans a range of pixel coordinate from (I-0.5) to (I$+$0.5) (i.e.
-         pixel centres have integral pixel coordinates).
-      }
-      \sstsubsection{
-         boxsize
-      }{
-         The full width in pixels of a smoothing box to be applied to the
-         polygon vertices before downsizing the polygon to a smaller number
-         of vertices. If an even number is supplied, the next larger odd
-         number is used. Values of one or zero result in no smoothing.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astOutline$<$X$>$()
-      }{
-         The number of pixels to which a value of
-         {\tt{"}}badval{\tt{"}}
-         has been assigned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function proceeds by first finding a very accurate polygon,
-         and then removing insignificant vertices from this fine polygon
-         using
-         \htmlref{astDownsize}{astDownsize}.
-
-         \sstitem
-         The returned Polygon is the outer boundary of the contiguous set
-         of pixels that includes ths specified {\tt{"}}inside{\tt{"}} point, and satisfy
-         the specified value requirement. This set of pixels may potentially
-         include {\tt{"}}holes{\tt{"}} where the pixel values fail to meet the specified
-         value requirement. Such holes will be ignored by this function.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate masking function, you should
-      replace $<$X$>$ in the generic function name astOutline$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         L: long int
-
-         \sstitem
-         UL: unsigned long int
-
-         \sstitem
-         I: int
-
-         \sstitem
-         UI: unsigned int
-
-         \sstitem
-         S: short int
-
-         \sstitem
-         US: unsigned short int
-
-         \sstitem
-         B: byte (signed char)
-
-         \sstitem
-         UB: unsigned byte (unsigned char)
-
-      }
-      For example, astOutlineD would be used to process {\tt{"}}double{\tt{"}}
-      data, while astOutlineS would be used to process {\tt{"}}short int{\tt{"}}
-      data, etc.
-   }
-}
-\sstroutine{
-   astOverlap\sstlabel{astOverlap}
-}{
-   Test if two regions overlap each other
-}{
-   \sstdescription{
-      This function returns an integer value indicating if the two
-      supplied Regions overlap. The two Regions are converted to a commnon
-      coordinate system before performing the check. If this conversion is
-      not possible (for instance because the two Regions represent areas in
-      different domains), then the check cannot be performed and a zero value
-      is returned to indicate this.
-   }
-   \sstsynopsis{
-      int astOverlap( AstRegion $*$this, AstRegion $*$that )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the first \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         that
-      }{
-         Pointer to the second Region.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astOverlap()
-      }{
-         A value indicating if there is any overlap between the two Regions.
-         Possible values are:
-
-         0 - The check could not be performed because the second Region
-             could not be mapped into the coordinate system of the first
-             Region.
-
-         1 - There is no overlap between the two Regions.
-
-         2 - The first Region is completely inside the second Region.
-
-         3 - The second Region is completely inside the first Region.
-
-         4 - There is partial overlap between the two Regions.
-
-         5 - The Regions are identical to within their uncertainties.
-
-         6 - The second Region is the exact negation of the first Region
-             to within their uncertainties.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned values 5 and 6 do not check the value of the \htmlref{Closed}{Closed}
-         attribute in the two Regions.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked with the
-         AST error status set, or if it should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPcdMap\sstlabel{astPcdMap}
-}{
-   Create a PcdMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PcdMap}{PcdMap} and optionally initialises its
-      attributes.
-
-      A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
-      positions to correct for the radial distortion introduced by some
-      cameras and telescopes. This can take the form either of pincushion
-      or barrel distortion, and is characterized by a single distortion
-      coefficient.
-
-      A PcdMap is specified by giving this distortion coefficient and the
-      coordinates of the centre of the radial distortion. The forward
-      transformation of a PcdMap applies the distortion:
-
-         RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
-      where R is the undistorted radial distance from the distortion
-      centre (specified by attribute PcdCen), RD is the radial distance
-      from the same centre in the presence of distortion, and C is the
-      distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
-      The inverse transformation of a PcdMap removes the distortion
-      produced by the forward transformation. The expression used to derive
-      R from RD is an approximate inverse of the expression above, obtained
-      from two iterations of the Newton-Raphson method. The mismatch between
-      the forward and inverse expressions is negligible for astrometric
-      applications (to reach 1 milliarcsec at the edge of the Anglo-Australian
-      Telescope triplet or a Schmidt field would require field diameters of
-      2.4 and 42 degrees respectively).
-
-      If a PcdMap is inverted (e.g. using \htmlref{astInvert}{astInvert}) then the roles of the
-      forward and inverse transformations are reversed; the forward
-      transformation will remove the distortion, and the inverse
-      transformation will apply it.
-   }
-   \sstsynopsis{
-      AstPcdMap $*$astPcdMap( double disco, const double pcdcen[2],
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         disco
-      }{
-         The distortion coefficient. Negative values give barrel
-         distortion, positive values give pincushion distortion, and
-         zero gives no distortion.
-      }
-      \sstsubsection{
-         pcdcen
-      }{
-         A 2-element array containing the coordinates of the centre of the
-         distortion.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new PcdMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPcdMap()
-      }{
-         A pointer to the new PcdMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astPermAxes\sstlabel{astPermAxes}
-}{
-   Permute the axis order in a Frame
-}{
-   \sstdescription{
-      This function permutes the order in which a \htmlref{Frame}{Frame}'s axes occur.
-   }
-   \sstsynopsis{
-      void astPermAxes( AstFrame $*$this, const int perm[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         perm
-      }{
-         An array with one element for each axis of the Frame (\htmlref{Naxes}{Naxes}
-         attribute). This should list the axes in their new order,
-         using the original axis numbering (which starts at 1 for the
-         first axis).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Only genuine permutations of the axis order are permitted, so
-         each axis must be referenced exactly once in the {\tt{"}}perm{\tt{"}} array.
-
-         \sstitem
-         If successive axis permutations are applied to a Frame, then
-         the effects are cumulative.
-      }
-   }
-}
-\sstroutine{
-   astPermMap\sstlabel{astPermMap}
-}{
-   Create a PermMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PermMap}{PermMap} and optionally initialises its
-      attributes.
-
-      A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
-      and possibly also changes the number of coordinates, between its
-      input and output.
-
-      In addition to permuting the coordinate order, a PermMap may
-      also assign constant values to coordinates. This is useful when
-      the number of coordinates is being increased as it allows fixed
-      values to be assigned to any new ones.
-   }
-   \sstsynopsis{
-      AstPermMap $*$astPermMap( int nin, const int inperm[], int nout,
-                              const int outperm[], double constant[],
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nin
-      }{
-         The number of input coordinates.
-      }
-      \sstsubsection{
-         inperm
-      }{
-         An optional array with {\tt{"}}nin{\tt{"}} elements which, for each input
-         coordinate, should contain the number of the output
-         coordinate whose value is to be used (note that this array
-         therefore defines the inverse coordinate transformation).
-         Coordinates are numbered starting from 1.
-
-         For details of additional special values that may be used in
-         this array, see the description of the {\tt{"}}constant{\tt{"}} parameter.
-
-         If a NULL pointer is supplied instead of an array, each input
-         coordinate will obtain its value from the corresponding
-         output coordinate (or will be assigned the value AST\_\_BAD if
-         there is no corresponding output coordinate).
-      }
-      \sstsubsection{
-         nout
-      }{
-         The number of output coordinates.
-      }
-      \sstsubsection{
-         outperm
-      }{
-         An optional array with {\tt{"}}nout{\tt{"}} elements which, for each output
-         coordinate, should contain the number of the input coordinate
-         whose value is to be used (note that this array therefore
-         defines the forward coordinate transformation).  Coordinates
-         are numbered starting from 1.
-
-         For details of additional special values that may be used in
-         this array, see the description of the {\tt{"}}constant{\tt{"}} parameter.
-
-         If a NULL pointer is supplied instead of an array, each output
-         coordinate will obtain its value from the corresponding
-         input coordinate (or will be assigned the value AST\_\_BAD if
-         there is no corresponding input coordinate).
-      }
-      \sstsubsection{
-         constant
-      }{
-         An optional array containing values which may be assigned to
-         input and/or output coordinates instead of deriving them
-         from other coordinate values. If either of the {\tt{"}}inperm{\tt{"}} or
-         {\tt{"}}outperm{\tt{"}} arrays contains a negative value, it is used to
-         address this {\tt{"}}constant{\tt{"}} array (such that -1 addresses the
-         first element, -2 addresses the second element, etc.) and the
-         value obtained is used as the corresponding coordinate value.
-
-         Care should be taken to ensure that locations lying outside
-         the extent of this array are not accidentally addressed. The
-         array is not used if the {\tt{"}}inperm{\tt{"}} and {\tt{"}}outperm{\tt{"}} arrays do not
-         contain negative values.
-
-         If a NULL pointer is supplied instead of an array, the
-         behaviour is as if the array were of infinite length and
-         filled with the value AST\_\_BAD.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new PermMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPermMap()
-      }{
-         A pointer to the new PermMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If either of the {\tt{"}}inperm{\tt{"}} or {\tt{"}}outperm{\tt{"}} arrays contains a
-         zero value (or a positive value which does not identify a valid
-         output/input coordinate, as appropriate), then the value
-         AST\_\_BAD is assigned as the new coordinate value.
-
-         \sstitem
-         This function does not attempt to ensure that the forward and
-         inverse transformations performed by the PermMap are
-         self-consistent in any way. You are therefore free to supply
-         coordinate permutation arrays that achieve whatever effect is
-         desired.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPickAxes\sstlabel{astPickAxes}
-}{
-   Create a new Frame by picking axes from an existing one
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Frame}{Frame} whose axes are copied from an
-      existing Frame along with other Frame attributes, such as its
-      \htmlref{Title}{Title}. Any number (zero or more) of the original Frame's axes
-      may be copied, in any order, and additional axes with default
-      attributes may also be included in the new Frame.
-
-      Optionally, a \htmlref{Mapping}{Mapping} that converts between the coordinate
-      systems described by the two Frames will also be returned.
-   }
-   \sstsynopsis{
-      AstFrame $*$astPickAxes( AstFrame $*$this, int naxes, const int axes[],
-                             AstMapping $*$$*$map )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the original Frame.
-      }
-      \sstsubsection{
-         naxes
-      }{
-         The number of axes required in the new Frame.
-      }
-      \sstsubsection{
-         axes
-      }{
-         An array, with {\tt{"}}naxes{\tt{"}} elements, which lists the axes to be
-         copied. These should be given in the order required in the
-         new Frame, using the axis numbering in the original Frame
-         (which starts at 1 for the first axis). Axes may be selected
-         in any order, but each may only be used once.  If additional
-         (default) axes are also to be included, the corresponding
-         elements of this array should be set to zero.
-      }
-      \sstsubsection{
-         map
-      }{
-         Address of a location in which to return a pointer to a new
-         Mapping. This will be a \htmlref{PermMap}{PermMap} (or a \htmlref{UnitMap}{UnitMap} as a special
-         case) that describes the axis permutation that has taken
-         place between the original and new Frames. The Mapping's
-         forward transformation will convert coordinates from the
-         original Frame into the new one, and vice versa.
-
-         If this Mapping is not required, a NULL value may be supplied
-         for this parameter.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames. The class of Frame returned
-         may differ from that of the original Frame, depending on which
-         axes are selected. For example, if a single axis is picked from a
-         \htmlref{SkyFrame}{SkyFrame} (which must always have two axes) then the resulting
-         Frame cannot be a valid SkyFrame, so will revert to the parent
-         class (Frame) instead.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         Using this function on a FrameSet is identical to using it on
-         the current Frame in the FrameSet. The returned Frame will not
-         be a FrameSet.
-      }
-      \sstsubsection{
-         \htmlref{Region}{Region}
-      }{
-         If this function is used on a Region, an attempt is made to
-         retain the bounds information on the selected axes. If
-         succesful, the returned Frame will be a Region of some class.
-         Otherwise, the returned Frame is obtained by calling this
-         function on the Frame represented by the supplied Region (the
-         returned Frame will then not be a Region). In order to be
-         succesful, the selected axes in the Region must be independent
-         of the others. For instance, a \htmlref{Box}{Box} can be split in this way but
-         a \htmlref{Circle}{Circle} cannot. Another requirement for success is that no
-         default axes are added (that is, the
-         {\tt{"}}axes{\tt{"}}
-         array must not contain any zero values.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPickAxes()
-      }{
-         A pointer to the new Frame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The new Frame will contain a {\tt{"}}deep{\tt{"}} copy (c.f. \htmlref{astCopy}{astCopy}) of all
-         the data selected from the original Frame. Modifying any aspect
-         of the new Frame will therefore not affect the original one.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPlot\sstlabel{astPlot}
-}{
-   Create a Plot
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Plot}{Plot} and optionally initialises its
-      attributes.
-
-      A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
-      \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
-      associated with a rectangular plotting area in the underlying
-      graphics system. This plotting area is where graphical output
-      appears. It is defined when the Plot is created.
-
-      The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
-      system, which is the coordinate system in which plotting
-      operations are specified. The results of each plotting operation
-      are automatically transformed into graphical coordinates so as
-      to appear in the plotting area (subject to any clipping which
-      may be in effect).
-
-      Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
-      may often be non-linear, or even discontinuous, most plotting
-      does not result in simple straight lines. The basic plotting
-      element is therefore not a straight line, but a geodesic curve
-      (see \htmlref{astCurve}{astCurve}). A Plot also provides facilities for drawing
-      markers or symbols (\htmlref{astMark}{astMark}), text (\htmlref{astText}{astText}) and grid lines
-      (\htmlref{astGridLine}{astGridLine}). It is also possible to draw curvilinear axes with
-      optional coordinate grids (\htmlref{astGrid}{astGrid}).
-      A range of Plot attributes is available to allow precise control
-      over the appearance of graphical output produced by these
-      functions.
-
-      You may select different physical coordinate systems in which to
-      plot (including the native graphical coordinate system itself)
-      by selecting different Frames as the current Frame of a Plot,
-      using its \htmlref{Current}{Current} attribute.  You may also set up clipping (see
-      \htmlref{astClip}{astClip}) to limit the extent of any plotting you perform, and
-      this may be done in any of the coordinate systems associated
-      with the Plot, not necessarily the one you are plotting in.
-
-      Like any FrameSet, a Plot may also be used as a Frame. In this
-      case, it behaves like its current Frame, which describes the
-      physical coordinate system.
-
-      When used as a Mapping, a Plot describes the inter-relation
-      between graphical coordinates (its base Frame) and physical
-      coordinates (its current Frame).  It differs from a normal
-      FrameSet, however, in that an attempt to transform points which
-      lie in clipped areas of the Plot will result in bad coordinate
-      values (AST\_\_BAD).
-   }
-   \sstsynopsis{
-      AstPlot $*$astPlot( AstFrame $*$frame, const float graphbox[ 4 ],
-                        const double basebox[ 4 ], const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         Pointer to a Frame describing the physical coordinate system
-         in which to plot. A pointer to a FrameSet may also be given,
-         in which case its current Frame will be used to define the
-         physical coordinate system and its base Frame will be mapped
-         on to graphical coordinates (see below).
-
-         If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
-         2-dimensional Frame will be used to describe the physical
-         coordinate system. Labels, etc. may then be attached to this
-         by setting the appropriate Frame attributes
-         (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
-      }
-      \sstsubsection{
-         graphbox
-      }{
-         An array giving the position and extent of the plotting area
-         (on the plotting surface of the underlying graphics system)
-         in which graphical output is to appear. This must be
-         specified using graphical coordinates appropriate to the
-         underlying graphics system.
-
-         The first pair of values should give the coordinates of the
-         bottom left corner of the plotting area and the second pair
-         should give the coordinates of the top right corner. The
-         coordinate on the horizontal axis should be given first in
-         each pair. Note that the order in which these points are
-         given is important because it defines up, down, left and
-         right for subsequent graphical operations.
-      }
-      \sstsubsection{
-         basebox
-      }{
-         An array giving the coordinates of two points in the supplied
-         Frame (or in the base Frame if a FrameSet was supplied) which
-         correspond to the bottom left and top right corners of the
-         plotting area, as specified above. This range of coordinates
-         will be mapped linearly on to the plotting area. The
-         coordinates should be given in the same order as above.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Plot. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPlot()
-      }{
-         A pointer to the new Plot.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The base Frame of the returned Plot will be a new Frame which
-         is created by this function to represent the coordinate system
-         of the underlying graphics system (graphical coordinates). It is
-         given a Frame index of 1 within the Plot. The choice of base
-         Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
-         Plot has been created (although you could use this as a way of
-         moving the plotting area around on the plotting surface).
-
-         \sstitem
-         If a Frame is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then it
-         becomes the current Frame of the new Plot and is given a Frame
-         index of 2.
-
-         \sstitem
-         If a FrameSet is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then
-         all the Frames within this FrameSet become part of the new Plot
-         (where their Frame indices are increased by 1), with the
-         FrameSet's current Frame becoming the current Frame of the Plot.
-
-         \sstitem
-         If a null Object pointer (AST\_\_NULL) is supplied (via the
-         {\tt{"}}frame{\tt{"}} pointer), then the returned Plot will contain two
-         Frames, both created by this function. The base Frame will
-         describe graphics coordinates (as above) and the current Frame
-         will be a basic Frame with no attributes set (this will
-         therefore give default values for such things as the Plot \htmlref{Title}{Title}
-         and the Label on each axis). Physical coordinates will be mapped
-         linearly on to graphical coordinates.
-
-         \sstitem
-         An error will result if the Frame supplied (or the base Frame
-         if a FrameSet was supplied) is not 2-dimensional.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPlot3D\sstlabel{astPlot3D}
-}{
-   Create a Plot3D
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Plot3D}{Plot3D} and optionally initialises
-      its attributes.
-
-      A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
-      for producing 3D graphical output.
-   }
-   \sstsynopsis{
-      AstPlot3D $*$astPlot3D( AstFrame $*$frame, const float graphbox[ 6 ],
-                            const double basebox[ 6 ], const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         Pointer to a \htmlref{Frame}{Frame} describing the physical coordinate system
-         in which to plot. A pointer to a \htmlref{FrameSet}{FrameSet} may also be given,
-         in which case its current Frame will be used to define the
-         physical coordinate system and its base Frame will be mapped
-         on to graphical coordinates (see below).
-
-         If a null \htmlref{Object}{Object} pointer (AST\_\_NULL) is given, a default
-         3-dimensional Frame will be used to describe the physical
-         coordinate system. Labels, etc. may then be attached to this
-         by setting the appropriate Frame attributes
-         (e.g. \htmlref{Label(axis)}{Labelaxis}) for the Plot.
-      }
-      \sstsubsection{
-         graphbox
-      }{
-         An array giving the position and extent of the plotting volume
-         (within the plotting space of the underlying graphics system)
-         in which graphical output is to appear. This must be
-         specified using graphical coordinates appropriate to the
-         underlying graphics system.
-
-         The first triple of values should give the coordinates of the
-         bottom left corner of the plotting volume and the second triple
-         should give the coordinates of the top right corner. The
-         coordinate on the horizontal axis should be given first in
-         each pair. Note that the order in which these points are
-         given is important because it defines up, down, left and
-         right for subsequent graphical operations.
-      }
-      \sstsubsection{
-         basebox
-      }{
-         An array giving the coordinates of two points in the supplied
-         Frame (or in the base Frame if a FrameSet was supplied) which
-         correspond to the bottom left and top right corners of the
-         plotting volume, as specified above. This range of coordinates
-         will be mapped linearly on to the plotting area. The
-         coordinates should be given in the same order as above.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Plot3D. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPlot3D()
-      }{
-         A pointer to the new Plot3D.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The base Frame of the returned Plot3D will be a new Frame which
-         is created by this function to represent the coordinate system
-         of the underlying graphics system (graphical coordinates). It is
-         given a Frame index of 1 within the Plot3D. The choice of base
-         Frame (\htmlref{Base}{Base} attribute) should not, in general, be changed once a
-         Plot3D has been created (although you could use this as a way of
-         moving the plotting area around on the plotting surface).
-
-         \sstitem
-         If a Frame is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then it
-         becomes the current Frame of the new Plot3D and is given a Frame
-         index of 2.
-
-         \sstitem
-         If a FrameSet is supplied (via the {\tt{"}}frame{\tt{"}} pointer), then
-         all the Frames within this FrameSet become part of the new Plot3D
-         (where their Frame indices are increased by 1), with the
-         FrameSet's current Frame becoming the current Frame of the Plot3D.
-
-         \sstitem
-         If a null Object pointer (AST\_\_NULL) is supplied (via the
-         {\tt{"}}frame{\tt{"}} pointer), then the returned Plot3D will contain two
-         Frames, both created by this function. The base Frame will
-         describe graphics coordinates (as above) and the current Frame
-         will be a basic Frame with no attributes set (this will
-         therefore give default values for such things as the Plot3D \htmlref{Title}{Title}
-         and the Label on each axis). Physical coordinates will be mapped
-         linearly on to graphical coordinates.
-
-         \sstitem
-         An error will result if the Frame supplied (or the base Frame
-         if a FrameSet was supplied) is not 3-dimensional.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPointList\sstlabel{astPointList}
-}{
-   Create a PointList
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PointList}{PointList} object and optionally initialises
-      its attributes.
-
-      A PointList object is a specialised type of \htmlref{Region}{Region} which represents a
-      collection of points in a coordinate \htmlref{Frame}{Frame}.
-   }
-   \sstsynopsis{
-      AstPointList $*$astPointList( AstFrame $*$frame, int npnt, int ncoord, int dim,
-                                  const double $*$points, AstRegion $*$unc,
-                                  const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame in which the region is defined. A deep
-         copy is taken of the supplied Frame. This means that any
-         subsequent changes made to the Frame using the supplied pointer
-         will have no effect the Region.
-      }
-      \sstsubsection{
-         npnt
-      }{
-         The number of points in the Region.
-      }
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinates being supplied for each point. This
-         must equal the number of axes in the supplied Frame, given by
-         its \htmlref{Naxes}{Naxes} attribute.
-      }
-      \sstsubsection{
-         dim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}points{\tt{"}}
-         array (which contains the point coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than {\tt{"}}npnt{\tt{"}}.
-      }
-      \sstsubsection{
-         points
-      }{
-         The address of the first element of a 2-dimensional array of
-         shape {\tt{"}}[ncoord][dim]{\tt{"}} giving the physical coordinates of the
-         points. These should be stored such that the value of coordinate
-         number {\tt{"}}coord{\tt{"}} for point number {\tt{"}}pnt{\tt{"}} is found in element
-         {\tt{"}}in[coord][pnt]{\tt{"}}.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the uncertainties
-         associated with each point in the PointList being created. The
-         uncertainty at any point in the PointList is found by shifting the
-         supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the point
-         being considered. The area covered by the shifted uncertainty Region
-         then represents the uncertainty in the position. The uncertainty is
-         assumed to be the same for all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the bounding box of the
-         PointList being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{astOverlap}{astOverlap}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{astSimplify}{astSimplify}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new PointList. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPointList()
-      }{
-         A pointer to the new PointList.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astPolyCurve\sstlabel{astPolyCurve}
-}{
-   Draw a series of connected geodesic curves
-}{
-   \sstdescription{
-      This function joins a series of points specified in the physical
-      coordinate system of a \htmlref{Plot}{Plot} by drawing a sequence of geodesic
-      curves.  It is equivalent to making repeated use of the \htmlref{astCurve}{astCurve}
-      function (q.v.), except that astPolyCurve will generally be more
-      efficient when drawing many geodesic curves end-to-end. A
-      typical application of this might be in drawing contour lines.
-
-      As with astCurve, full account is taken of the \htmlref{Mapping}{Mapping} between
-      physical and graphical coordinate systems. This includes any
-      discontinuities and clipping established using \htmlref{astClip}{astClip}.
-   }
-   \sstsynopsis{
-      void astPolyCurve( AstPlot $*$this, int npoint, int ncoord, int indim,
-                         const double $*$in )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         The number of points between which geodesic curves are to be drawn.
-      }
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinates being supplied for each point (i.e.
-         the number of axes in the current \htmlref{Frame}{Frame} of the Plot, as given
-         by its \htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         indim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}in{\tt{"}}
-         array (which contains the input coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than {\tt{"}}npoint{\tt{"}}.
-      }
-      \sstsubsection{
-         in
-      }{
-         The address of the first element in a 2-dimensional array of shape
-         {\tt{"}}[ncoord][indim]{\tt{"}} giving the
-         physical coordinates of the points which are to be joined in
-         sequence by geodesic curves. These should be stored such that
-         the value of coordinate number {\tt{"}}coord{\tt{"}} for point number
-         {\tt{"}}point{\tt{"}} is found in element {\tt{"}}in[coord][point]{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         No curve is drawn on either side of any point which has any
-         coordinate equal to the value AST\_\_BAD.
-
-         \sstitem
-         An error results if the base Frame of the Plot is not
-         2-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astPolyMap\sstlabel{astPolyMap}
-}{
-   Create a PolyMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{PolyMap}{PolyMap} and optionally initialises
-      its attributes.
-
-      A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
-      transformation.  Each output coordinate is a polynomial function of
-      all the input coordinates. The coefficients are specified separately
-      for each output coordinate. The forward and inverse transformations
-      are defined independantly by separate sets of coefficients.
-   }
-   \sstsynopsis{
-      AstPolyMap $*$astPolyMap( int nin, int nout, int ncoeff\_f, const double coeff\_f[],
-                              int ncoeff\_i, const double coeff\_i[],
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nin
-      }{
-         The number of input coordinates.
-      }
-      \sstsubsection{
-         nout
-      }{
-         The number of output coordinates.
-      }
-      \sstsubsection{
-         ncoeff\_f
-      }{
-         The number of non-zero coefficients necessary to define the
-         forward transformation of the PolyMap. If zero is supplied, the
-         forward transformation will be undefined.
-      }
-      \sstsubsection{
-         coeff\_f
-      }{
-         An array containing
-         {\tt{"}}ncoeff\_f$*$( 2 $+$ nin ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ nin{\tt{"}}
-         adjacent elements describe a single coefficient of the forward
-         transformation. Within each such group, the first element is the
-         coefficient value; the next element is the integer index of the
-         PolyMap output which uses the coefficient within its defining
-         polynomial (the first output has index 1); the remaining elements
-         of the group give the integer powers to use with each input
-         coordinate value (powers must not be negative, and floating
-         point values are rounded to the nearest integer).
-         If {\tt{"}}ncoeff\_f{\tt{"}} is zero, a NULL pointer may be supplied for {\tt{"}}coeff\_f{\tt{"}}.
-
-         For instance, if the PolyMap has 3 inputs and 2 outputs, each group
-         consisting of 5 elements, A groups such as {\tt{"}}(1.2, 2.0, 1.0, 3.0, 0.0){\tt{"}}
-         describes a coefficient with value 1.2 which is used within the
-         definition of output 2. The output value is incremented by the
-         product of the coefficient value, the value of input coordinate
-         1 raised to the power 1, and the value of input coordinate 2 raised
-         to the power 3. Input coordinate 3 is not used since its power is
-         specified as zero. As another example, the group {\tt{"}}(-1.0, 1.0,
-         0.0, 0.0, 0.0 ){\tt{"}} describes adds a constant value -1.0 onto
-         output 1 (it is a constant value since the power for every input
-         axis is given as zero).
-
-         Each final output coordinate value is the sum of the {\tt{"}}ncoeff\_f{\tt{"}} terms
-         described by the {\tt{"}}ncoeff\_f{\tt{"}} groups within the supplied array.
-      }
-      \sstsubsection{
-         ncoeff\_i
-      }{
-         The number of non-zero coefficients necessary to define the
-         inverse transformation of the PolyMap. If zero is supplied, the
-         inverse transformation will be undefined.
-      }
-      \sstsubsection{
-         coeff\_i
-      }{
-         An array containing
-         {\tt{"}}ncoeff\_i$*$( 2 $+$ nout ){\tt{"}} elements. Each group of {\tt{"}}2 $+$ nout{\tt{"}}
-         adjacent elements describe a single coefficient of the inverse
-         transformation, using the same schame as {\tt{"}}coeff\_f{\tt{"}},
-         except that {\tt{"}}inputs{\tt{"}} and {\tt{"}}outputs{\tt{"}} are transposed.
-         If {\tt{"}}ncoeff\_i{\tt{"}} is zero, a NULL pointer may be supplied for {\tt{"}}coeff\_i{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new PolyMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPolyMap()
-      }{
-         A pointer to the new PolyMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPolygon\sstlabel{astPolygon}
-}{
-   Create a Polygon
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Polygon}{Polygon} object and optionally initialises
-      its attributes.
-
-      The Polygon class implements a polygonal area, defined by a
-      collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
-      are connected together by geodesic curves within the encapsulated Frame.
-      For instance, if the encapsulated Frame is a simple Frame then the
-      geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
-      the geodesics will be great circles. Note, the vertices must be
-      supplied in an order such that the inside of the polygon is to the
-      left of the boundary as the vertices are traversed. Supplying them
-      in the reverse order will effectively negate the polygon.
-
-      Within a SkyFrame, neighbouring vertices are always joined using the
-      shortest path. Thus if an edge of 180 degrees or more in length is
-      required, it should be split into section each of which is less
-      than 180 degrees. The closed path joining all the vertices in order
-      will divide the celestial sphere into two disjoint regions. The
-      inside of the polygon is the region which is circled in an
-      anti-clockwise manner (when viewed from the inside of the celestial
-      sphere) when moving through the list of vertices in the order in
-      which they were supplied when the Polygon was created (i.e. the
-      inside is to the left of the boundary when moving through the
-      vertices in the order supplied).
-   }
-   \sstsynopsis{
-      AstPolygon $*$astPolygon( AstFrame $*$frame, int npnt, int dim,
-                              const double $*$points, AstRegion $*$unc,
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame
-      }{
-         A pointer to the Frame in which the region is defined. It must
-         have exactly 2 axes. A deep copy is taken of the supplied Frame.
-         This means that any subsequent changes made to the Frame using the
-         supplied pointer will have no effect the \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         npnt
-      }{
-         The number of points in the Region.
-      }
-      \sstsubsection{
-         dim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}points{\tt{"}}
-         array (which contains the point coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than {\tt{"}}npnt{\tt{"}}.
-      }
-      \sstsubsection{
-         points
-      }{
-         The address of the first element of a 2-dimensional array of
-         shape {\tt{"}}[2][dim]{\tt{"}} giving the physical coordinates of the vertices.
-         These should be stored such that the value of coordinate
-         number {\tt{"}}coord{\tt{"}} for point number {\tt{"}}pnt{\tt{"}} is found in element
-         {\tt{"}}in[coord][pnt]{\tt{"}}.
-      }
-      \sstsubsection{
-         unc
-      }{
-         An optional pointer to an existing Region which specifies the
-         uncertainties associated with the boundary of the \htmlref{Box}{Box} being created.
-         The uncertainty in any point on the boundary of the Box is found by
-         shifting the supplied {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at
-         the boundary point being considered. The area covered by the
-         shifted uncertainty Region then represents the uncertainty in the
-         boundary position. The uncertainty is assumed to be the same for
-         all points.
-
-         If supplied, the uncertainty Region must be of a class for which
-         all instances are centro-symetric (e.g. Box, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse}, etc.)
-         or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions. A deep
-         copy of the supplied Region will be taken, so subsequent changes to
-         the uncertainty Region using the supplied pointer will have no
-         effect on the created Box. Alternatively,
-         a NULL \htmlref{Object}{Object} pointer
-         may be supplied, in which case a default uncertainty is used
-         equivalent to a box 1.0E-6 of the size of the Box being created.
-
-         The uncertainty Region has two uses: 1) when the
-         \htmlref{astOverlap}{astOverlap}
-         function compares two Regions for equality the uncertainty
-         Region is used to determine the tolerance on the comparison, and 2)
-         when a Region is mapped into a different coordinate system and
-         subsequently simplified (using
-         \htmlref{astSimplify}{astSimplify}),
-         the uncertainties are used to determine if the transformed boundary
-         can be accurately represented by a specific shape of Region.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Polygon. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPolygon()
-      }{
-         A pointer to the new Polygon.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astPrism\sstlabel{astPrism}
-}{
-   Create a Prism
-}{
-   \sstdescription{
-      This function creates a new \htmlref{Prism}{Prism} and optionally initialises
-      its attributes.
-
-      A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
-      into one or more orthogonal dimensions (specified by another Region).
-      If the Region to be extruded has N axes, and the Region defining the
-      extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
-      A point is inside the Prism if the first N axis values correspond to
-      a point inside the Region being extruded, and the remaining M axis
-      values correspond to a point inside the Region defining the extrusion.
-
-      As an example, a cylinder can be represented by extruding an existing
-      \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
-      Interval would have a single axis and would specify the upper and
-      lower limits of the cylinder along its length.
-   }
-   \sstsynopsis{
-      AstPrism $*$astPrism( AstRegion $*$region1, AstRegion $*$region2,
-                          const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         region1
-      }{
-         Pointer to the Region to be extruded.
-      }
-      \sstsubsection{
-         region2
-      }{
-         Pointer to the Region defining the extent of the extrusion.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new Prism. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astPrism()
-      }{
-         A pointer to the new Prism.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Deep copies are taken of the supplied Regions. This means that
-         any subsequent changes made to the component Regions using the
-         supplied pointers will have no effect on the Prism.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astPurgeWCS\sstlabel{astPurgeWCS}
-}{
-   Delete all cards in the FitsChan describing WCS information
-}{
-   \sstdescription{
-      This function
-      deletes all cards in a \htmlref{FitsChan}{FitsChan} that relate to any of the recognised
-      WCS encodings. On exit, the current card is the first remaining card
-      in the FitsChan.
-   }
-   \sstsynopsis{
-      void astPurgeWCS( AstFitsChan $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-   }
-}
-\sstroutine{
-   astPutCards\sstlabel{astPutCards}
-}{
-   Store a set of FITS header cards in a FitsChan
-}{
-   \sstdescription{
-      This function
-      stores a set of FITS header cards in a \htmlref{FitsChan}{FitsChan}. The cards are
-      supplied concatenated together into a single character string.
-      Any existing cards in the FitsChan are removed before the new cards
-      are added. The FitsChan is {\tt{"}}re-wound{\tt{"}} on exit by clearing its \htmlref{Card}{Card}
-      attribute. This means that a subsequent invocation of
-      \htmlref{astRead}{astRead}
-      can be made immediately without the need to re-wind the FitsChan
-      first.
-   }
-   \sstsynopsis{
-      void astPutCards( AstFitsChan $*$this, const char $*$cards )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         cards
-      }{
-         Pointer to a null-terminated character string
-         containing the FITS cards to be stored. Each individual card
-         should occupy 80 characters in this string, and there should be
-         no delimiters, new lines, etc, between adjacent cards. The final
-         card may be less than 80 characters long.
-         This is the format produced by the fits\_hdr2str function in the
-         CFITSIO library.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error will result if the supplied string contains any cards
-         which cannot be interpreted.
-      }
-   }
-}
-\sstroutine{
-   astPutChannelData\sstlabel{astPutChannelData}
-}{
-   Store arbitrary data to be passed to a source or sink function
-}{
-   \sstdescription{
-      This function stores a supplied arbitrary pointer in the \htmlref{Channel}{Channel}.
-      When a source or sink function is invoked by the Channel, the
-      invoked function can use the \htmlref{astChannelData}{astChannelData} macro to retrieve the
-      pointer. This provides a thread-safe alternative to passing file
-      descriptors, etc, via global static variables.
-   }
-   \sstsynopsis{
-      void astPutChannelData( AstChannel $*$this, void $*$data )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Channel.
-      }
-      \sstsubsection{
-         data
-      }{
-         A pointer to be made available to the source and sink functions
-         via the astChannelData macro. May be NULL.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this function.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This routine is not available in the Fortran 77 interface to
-         the AST library.
-      }
-   }
-}
-\sstroutine{
-   astPutFits\sstlabel{astPutFits}
-}{
-   Store a FITS header card in a FitsChan
-}{
-   \sstdescription{
-      This function stores a FITS header card in a \htmlref{FitsChan}{FitsChan}. The card
-      is either inserted before the current card (identified by the
-      \htmlref{Card}{Card} attribute), or over-writes the current card, as required.
-   }
-   \sstsynopsis{
-      void astPutFits( AstFitsChan $*$this, const char card[ 80 ],
-                       int overwrite )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         card
-      }{
-         Pointer to a possibly null-terminated character string
-         containing the FITS card to be stored. No more than 80
-         characters will be used from this string (or fewer if a null
-         occurs earlier).
-      }
-      \sstsubsection{
-         overwrite
-      }{
-         If this value is zero, the new card is inserted in front of
-         the current card in the FitsChan (as identified by the
-         initial value of the Card attribute). If it is non-zero, the
-         new card replaces the current card. In either case, the Card
-         attribute is then incremented by one so that it subsequently
-         identifies the card following the one stored.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the Card attribute initially points at the {\tt{"}}end-of-file{\tt{"}}
-         (i.e. exceeds the number of cards in the FitsChan), then the new
-         card is appended as the last card in the FitsChan.
-
-         \sstitem
-         An error will result if the supplied string cannot be interpreted
-         as a FITS header card.
-      }
-   }
-}
-\sstroutine{
-   astRate\sstlabel{astRate}
-}{
-   Calculate the rate of change of a Mapping output
-}{
-   \sstdescription{
-      This function
-      evaluates the rate of change of a specified output of the supplied
-      \htmlref{Mapping}{Mapping} with respect to a specified input, at a specified input
-      position.
-
-      The result is estimated by interpolating the function using a
-      fourth order polynomial in the neighbourhood of the specified
-      position. The size of the neighbourhood used is chosen to minimise
-      the RMS residual per unit length between the interpolating
-      polynomial and the supplied Mapping function. This method produces
-      good accuracy but can involve evaluating the Mapping 100 or more
-      times.
-   }
-   \sstsynopsis{
-      double astRate( AstMapping $*$this, double $*$at, int ax1, int ax2 )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         at
-      }{
-         The address of an
-         array holding the axis values at the position at which the rate
-         of change is to be evaluated. The number of elements in this
-         array should equal the number of inputs to the Mapping.
-      }
-      \sstsubsection{
-         ax1
-      }{
-         The index of the Mapping output for which the rate of change is to
-         be found (output numbering starts at 1 for the first output).
-      }
-      \sstsubsection{
-         ax2
-      }{
-         The index of the Mapping input which is to be varied in order to
-         find the rate of change (input numbering starts at 1 for the first
-         input).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astRate()
-      }{
-         The rate of change of Mapping output {\tt{"}}ax1{\tt{"}} with respect to input
-         {\tt{"}}ax2{\tt{"}}, evaluated at {\tt{"}}at{\tt{"}}, or AST\_\_BAD if the value cannot be
-         calculated.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BAD will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-}
-\sstroutine{
-   astRateMap\sstlabel{astRateMap}
-}{
-   Create a RateMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{RateMap}{RateMap} and optionally initialises
-      its attributes.
-
-      A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
-      Jacobian matrix of another Mapping. The Mapping for which the
-      Jacobian is required is specified when the new RateMap is created,
-      and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
-      The number of inputs to a RateMap is the same as the number of inputs
-      to its encapsulated Mapping. The number of outputs from a RateMap
-      is always one. This one output equals the rate of change of a
-      specified output of the encapsulated Mapping with respect to a
-      specified input of the encapsulated Mapping (the input and output
-      to use are specified when the RateMap is created).
-
-      A RateMap which has not been inverted does not define an inverse
-      transformation. If a RateMap has been inverted then it will define
-      an inverse transformation but not a forward transformation.
-   }
-   \sstsynopsis{
-      AstRateMap $*$astRateMap( AstMapping $*$map, int ax1, int ax2,
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         map
-      }{
-         Pointer to the encapsulated Mapping.
-      }
-      \sstsubsection{
-         ax1
-      }{
-         Index of the output from the encapsulated Mapping for which the
-         rate of change is required. This corresponds to the delta
-         quantity forming the numerator of the required element of the
-         Jacobian matrix. The first axis has index 1.
-      }
-      \sstsubsection{
-         ax2
-      }{
-         Index of the input to the encapsulated Mapping which is to be
-         varied. This corresponds to the delta quantity forming the
-         denominator of the required element of the Jacobian matrix.
-         The first axis has index 1.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new RateMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astRateMap()
-      }{
-         A pointer to the new RateMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The forward transformation of the encapsulated Mapping must be
-         defined.
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         astRateMap (the new RateMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a RateMap containing a copy of its
-         component Mappings is required, then a copy of the RateMap should
-         be made using \htmlref{astCopy}{astCopy}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astRead\sstlabel{astRead}
-}{
-   Read an Object from a Channel
-}{
-   \sstdescription{
-      This function reads the next \htmlref{Object}{Object} from a \htmlref{Channel}{Channel} and returns a
-      pointer to the new Object.
-   }
-   \sstsynopsis{
-      AstObject $*$astRead( AstChannel $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Channel.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All successful use of astRead on a FitsChan is destructive, so that
-         FITS header cards are consumed in the process of reading an Object,
-         and are removed from the FitsChan (this deletion can be prevented
-         for specific cards by calling the FitsChan
-         \htmlref{astRetainFits}{astRetainFits} function).
-         An unsuccessful call of
-         astRead
-         (for instance, caused by the FitsChan not containing the necessary
-         FITS headers cards needed to create an Object) results in the
-         contents of the FitsChan being left unchanged.
-      }
-      \sstsubsection{
-         \htmlref{StcsChan}{StcsChan}
-      }{
-         The AST Object returned by a successful use of
-         astRead
-         on an StcsChan, will be either a \htmlref{Region}{Region} or a \htmlref{KeyMap}{KeyMap}, depending
-         on the values of the \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
-         attributes. See the documentation for these attributes for further
-         information.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astRead()
-      }{
-         A pointer to the new Object. The class to which this will
-         belong is determined by the input data, so is not known in
-         advance.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned, without
-         error, if the Channel contains no further Objects to be read.
-
-         \sstitem
-         A null Object pointer will also be returned if this function
-         is invoked with the AST error status set, or if it should fail
-         for any reason.
-      }
-   }
-}
-\sstroutine{
-   astRebin$<$X$>$\sstlabel{astRebinX}
-}{
-   Rebin a region of a data grid
-}{
-   \sstdescription{
-      This is a set of functions for rebinning gridded data (e.g. an
-      image) under the control of a geometrical transformation, which
-      is specified by a \htmlref{Mapping}{Mapping}.  The functions operate on a pair of
-      data grids (input and output), each of which may have any number
-      of dimensions. Rebinning may be restricted to a specified
-      region of the input grid. An associated grid of error estimates
-      associated with the input data may also be supplied (in the form
-      of variance values), so as to produce error estimates for the
-      rebined output data. Propagation of missing data (bad pixels)
-      is supported.
-
-      Note, if you will be rebining a sequence of input arrays and then
-      co-adding them into a single array, the alternative
-      \htmlref{astRebinSeq$<$X$>$}{astRebinSeqX} functions
-      will in general be more efficient.
-
-      You should use a rebinning function which matches the numerical
-      type of the data you are processing by replacing $<$X$>$ in
-      the generic function name astRebin$<$X$>$ by an appropriate 1- or
-      2-character type code. For example, if you are rebinning data
-      with type {\tt{"}}float{\tt{"}}, you should use the function astRebinF (see
-      the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-
-      Rebinning of the grid of input data is performed by transforming
-      the coordinates of the centre of each input grid element (or pixel)
-      into the coordinate system of the output grid. The input pixel
-      value is then divided up and assigned to the output pixels in the
-      neighbourhood of the central output coordinates. A choice of
-      schemes are provided for determining how each input pixel value is
-      divided up between the output pixels. In general, each output pixel
-      may be assigned values from more than one input pixel. All
-      contributions to a given output pixel are summed to produce the
-      final output pixel value. Output pixels can be set to the supplied
-      bad value if they receive contributions from an insufficient number
-      of input pixels. This is controlled by the
-      {\tt{"}}wlim{\tt{"}} parameter.
-
-      Input pixel coordinates are transformed into the coordinate
-      system of the output grid using the forward transformation of the
-      Mapping which is supplied. This means that geometrical features
-      in the input data are subjected to the Mapping's forward
-      transformation as they are transferred from the input to the
-      output grid.
-
-      In practice, transforming the coordinates of every pixel of a
-      large data grid can be time-consuming, especially if the Mapping
-      involves complicated functions, such as sky projections. To
-      improve performance, it is therefore possible to approximate
-      non-linear Mappings by a set of linear transformations which are
-      applied piece-wise to separate sub-regions of the data. This
-      approximation process is applied automatically by an adaptive
-      algorithm, under control of an accuracy criterion which
-      expresses the maximum tolerable geometrical distortion which may
-      be introduced, as a fraction of a pixel.
-
-      This algorithm first attempts to approximate the Mapping with a
-      linear transformation applied over the whole region of the
-      input grid which is being used. If this proves to be
-      insufficiently accurate, the input region is sub-divided into
-      two along its largest dimension and the process is repeated
-      within each of the resulting sub-regions. This process of
-      sub-division continues until a sufficiently good linear
-      approximation is found, or the region to which it is being
-      applied becomes too small (in which case the original Mapping is
-      used directly).
-   }
-   \sstsynopsis{
-      void astRebin$<$X$>$( AstMapping $*$this, double wlim, int ndim\_in,
-                       const int lbnd\_in[], const int ubnd\_in[],
-                       const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
-                       int spread, const double params[], int flags,
-                       double tol, int maxpix,
-                       $<$Xtype$>$ badval, int ndim\_out,
-                       const int lbnd\_out[], const int ubnd\_out[],
-                       const int lbnd[], const int ubnd[],
-                       $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[] );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to a Mapping, whose forward transformation will be
-         used to transform the coordinates of pixels in the input
-         grid into the coordinate system of the output grid.
-
-         The number of input coordinates used by this Mapping (as
-         given by its \htmlref{Nin}{Nin} attribute) should match the number of input
-         grid dimensions given by the value of {\tt{"}}ndim\_in{\tt{"}}
-         below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
-         attribute) should match the number of output grid dimensions
-         given by {\tt{"}}ndim\_out{\tt{"}}.
-      }
-      \sstsubsection{
-         wlim
-      }{
-         Gives the required number of input pixel values which must contribute
-         to an output pixel in order for the output pixel value to be
-         considered valid. If the sum of the input pixel weights contributing
-         to an output pixel is less than the supplied
-         {\tt{"}}wlim{\tt{"}}
-         value, then the output pixel value is returned set to the
-         supplied bad value.
-      }
-      \sstsubsection{
-         ndim\_in
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         lbnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape
-         and size of the input grid, its extent along a particular
-         (j'th) dimension being ubnd\_in[j]-lbnd\_in[j]$+$1 (assuming the
-         index {\tt{"}}j{\tt{"}} to be zero-based). They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         in
-      }{
-         Pointer to an array, with one element for each pixel in the
-         input grid, containing the input data to be rebined.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using astRebinF, the type of each array element
-         should be {\tt{"}}float{\tt{"}}).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         in\_var
-      }{
-         An optional pointer to a second array with the same size and
-         type as the {\tt{"}}in{\tt{"}} array. If given, this should contain a set
-         of non-negative values which represent estimates of the
-         statistical variance associated with each element of the {\tt{"}}in{\tt{"}}
-         array. If this array is supplied (together with the
-         corresponding {\tt{"}}out\_var{\tt{"}} array), then estimates of the
-         variance of the rebined output data will be calculated.
-
-         If no input variance estimates are being provided, a NULL
-         pointer should be given.
-      }
-      \sstsubsection{
-         spread
-      }{
-         This parameter specifies the scheme to be used for dividing
-         each input data value up amongst the corresponding output pixels.
-         It may be used to select
-         from a set of pre-defined schemes by supplying one of the
-         values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
-         section below.  If a value of zero is supplied, then the
-         default linear spreading scheme is used (equivalent to
-         supplying the value AST\_\_LINEAR).
-      }
-      \sstsubsection{
-         params
-      }{
-         An optional pointer to an array of double which should contain
-         any additional parameter values required by the pixel
-         spreading scheme. If such parameters are required, this
-         will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
-         section below.
-
-         If no additional parameters are required, this array is not
-         used and a NULL pointer may be given.
-      }
-      \sstsubsection{
-         flags
-      }{
-         The bitwise OR of a set of flag values which may be used to
-         provide additional control over the rebinning operation. See
-         the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
-         options available.  If no flag values are to be set, a value
-         of zero should be given.
-      }
-      \sstsubsection{
-         tol
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement in pixels in the output grid's
-         coordinate system.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-
-         If the value is too high, discontinuities between the linear
-         approximations used in adjacent panel will be higher, and may
-         cause the edges of the panel to be visible when viewing the output
-         image at high contrast. If this is a problem, reduce the
-         tolerance value used.
-      }
-      \sstsubsection{
-         maxpix
-      }{
-         A value which specifies an initial scale size (in pixels) for
-         the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the input grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire input region.
-
-         If a smaller value is used, the input region will first be
-         divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
-         pixels in any dimension. Only at this point will attempts at
-         approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 pixels can also be employed as a safeguard in
-         general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         badval
-      }{
-         This argument should have the same type as the elements of
-         the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag missing
-         data (bad pixels) in the input and output arrays.
-
-         If the AST\_\_USEBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
-         then this value is used to test for bad pixels in the {\tt{"}}in{\tt{"}}
-         (and {\tt{"}}in\_var{\tt{"}}) array(s).
-
-         In all cases, this value is also used to flag any output
-         elements in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) for which
-         rebined values could not be obtained (see the {\tt{"}}Propagation
-         of Missing Data{\tt{"}} section below for details of the
-         circumstances under which this may occur).
-      }
-      \sstsubsection{
-         ndim\_out
-      }{
-         The number of dimensions in the output grid. This should be
-         at least one. It need not necessarily be equal to the number
-         of dimensions in the input grid.
-      }
-      \sstsubsection{
-         lbnd\_out
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the output grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd\_out
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the output grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} together define the
-         shape, size and coordinate system of the output grid in the
-         same way as {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} define the shape, size
-         and coordinate system of the input grid.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the first pixel in the region
-         of the input grid which is to be included in the rebined output
-         array.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the last pixel in the region of
-         the input grid which is to be included in the rebined output
-         array.
-
-         Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape and
-         position of a (hyper-)rectangular region of the input grid
-         which is to be included in the rebined output array. This region
-         should lie wholly within the extent of the input grid (as
-         defined by the {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} arrays). Regions of
-         the input grid lying outside this region will not be used.
-      }
-      \sstsubsection{
-         out
-      }{
-         Pointer to an array, with one element for each pixel in the
-         output grid, in which the rebined data values will be
-         returned. The numerical type of this array should match that
-         of the {\tt{"}}in{\tt{"}} array, and the data storage order should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         out\_var
-      }{
-         An optional pointer to an array with the same type and size
-         as the {\tt{"}}out{\tt{"}} array. If given, this array will be used to
-         return variance estimates for the rebined data values. This
-         array will only be used if the {\tt{"}}in\_var{\tt{"}} array has also been
-         supplied.
-
-         The output variance values will be calculated on the
-         assumption that errors on the input data values are
-         statistically independent and that their variance estimates
-         may simply be summed (with appropriate weighting factors)
-         when several input pixels contribute to an output data
-         value. If this assumption is not valid, then the output error
-         estimates may be biased. In addition, note that the
-         statistical errors on neighbouring output data values (as
-         well as the estimates of those errors) may often be
-         correlated, even if the above assumption about the input data
-         is correct, because of the pixel spreading schemes
-         employed.
-
-         If no output variance estimates are required, a NULL pointer
-         should be given.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate rebinning function, you should
-      replace $<$X$>$ in the generic function name astRebin$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         I: int
-
-      }
-      For example, astRebinD would be used to process {\tt{"}}double{\tt{"}}
-      data, while astRebinI would be used to process {\tt{"}}int{\tt{"}}
-      data, etc.
-
-      Note that, unlike
-      \htmlref{astResample$<$X$>$}{astResampleX}, the astRebin$<$X$>$
-      set of functions does not yet support unsigned integer data types
-      or integers of different sizes.
-   }
-   \sstdiytopic{
-      Pixel Spreading Schemes
-   }{
-      The pixel spreading scheme specifies the Point Spread Function (PSF)
-      applied to each input pixel value as it is copied into the output
-      array. It can be thought of as the inverse of the sub-pixel
-      interpolation schemes used by the
-      astResample$<$X$>$
-      group of functions. That is, in a sub-pixel interpolation scheme the
-      kernel specifies the weight to assign to each input pixel when
-      forming the weighted mean of the input pixels, whereas the kernel in a
-      pixel spreading scheme specifies the fraction of the input data value
-      which is to be assigned to each output pixel. As for interpolation, the
-      choice of suitable pixel spreading scheme involves stricking a balance
-      between schemes which tend to degrade sharp features in the data by
-      smoothing them, and those which attempt to preserve sharp features but
-      which often tend to introduce unwanted artifacts. See the
-      astResample$<$X$>$
-      documentation for further discussion.
-
-      The binning algorithm used has the ability to introduce artifacts
-      not seen when using a resampling algorithm. Particularly, when
-      viewing the output image at high contrast, systems of curves lines
-      covering the entire image may be visible. These are caused by a
-      beating effect between the input pixel positions and the output pixels
-      position, and their nature and strength depend critically upon the
-      nature of the Mapping and the spreading function being used. In
-      general, the nearest neighbour spreading function demonstrates this
-      effect more clearly than the other functions, and for this reason
-      should be used with caution.
-
-      The following values (defined in the
-      {\tt{"}}ast.h{\tt{"}} header file)
-      may be assigned to the
-      {\tt{"}}spread{\tt{"}}
-      parameter. See the
-      astResample$<$X$>$
-      documentation for details of these schemes including the use of the
-      {\tt{"}}fspread{\tt{"}} and {\tt{"}}params{\tt{"}} parameters:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NEAREST
-
-         \sstitem
-         AST\_\_LINEAR
-
-         \sstitem
-         AST\_\_SINC
-
-         \sstitem
-         AST\_\_SINCSINC
-
-         \sstitem
-         AST\_\_SINCCOS
-
-         \sstitem
-         AST\_\_SINCGAUSS
-
-         \sstitem
-         AST\_\_SOMBCOS
-
-      }
-      In addition, the following schemes can be used with
-      astRebin$<$X$>$ but not with astResample$<$X$>$:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_GAUSS: This scheme uses a kernel of the form exp(-k$*$x$*$x), with k
-         a positive constant determined by the full-width at half-maximum (FWHM).
-         The FWHM should be supplied in units of output pixels by means of the
-         {\tt{"}}params[1]{\tt{"}}
-         value and should be at least 0.1. The
-         {\tt{"}}params[0]{\tt{"}}
-         value should be used to specify at what point the Gaussian is truncated
-         to zero. This should be given as a number of output pixels on either
-         side of the central output point in each dimension (the nearest integer
-         value is used).
-      }
-   }
-   \sstdiytopic{
-      Control Flags
-   }{
-      The following flags are defined in the {\tt{"}}ast.h{\tt{"}} header file and
-      may be used to provide additional control over the rebinning
-      process. Having selected a set of flags, you should supply the
-      bitwise OR of their values via the {\tt{"}}flags{\tt{"}} parameter:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_USEBAD: Indicates that there may be bad pixels in the
-         input array(s) which must be recognised by comparing with the
-         value given for {\tt{"}}badval{\tt{"}} and propagated to the output array(s).
-         If this flag is not set, all input values are treated literally
-         and the {\tt{"}}badval{\tt{"}} value is only used for flagging output array
-         values.
-      }
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Instances of missing data (bad pixels) in the output grid are
-      identified by occurrences of the {\tt{"}}badval{\tt{"}} value in the {\tt{"}}out{\tt{"}}
-      array. These are produced if the sum of the weights of the
-      contributing input pixels is less than
-      {\tt{"}}wlim{\tt{"}}.
-
-      An input pixel is considered bad (and is consequently ignored) if
-      its
-      data value is equal to {\tt{"}}badval{\tt{"}} and the AST\_\_USEBAD flag is
-      set via the {\tt{"}}flags{\tt{"}} parameter.
-
-      In addition, associated output variance estimates (if
-      calculated) may be declared bad and flagged with the {\tt{"}}badval{\tt{"}}
-      value in the {\tt{"}}out\_var{\tt{"}} array for similar reasons.
-   }
-}
-\sstroutine{
-   astRebinSeq$<$X$>$\sstlabel{astRebinSeqX}
-}{
-   Rebin a region of a sequence of data grids
-}{
-   \sstdescription{
-      This set of
-      functions is identical to \htmlref{astRebin$<$X$>$}{astRebinX}
-      except that the rebinned input data is added into the supplied
-      output arrays, rather than simply over-writing the contents of the
-      output arrays. Thus, by calling this
-      function
-      repeatedly, a sequence of input arrays can be rebinned and accumulated
-      into a single output array, effectively forming a mosaic of the
-      input data arrays.
-
-      In addition, the weights associated with each output pixel are
-      returned. The weight of an output pixel indicates the number of input
-      pixels which have been accumulated in that output pixel. If the entire
-      value of an input pixel is assigned to a single output pixel, then the
-      weight of that output pixel is incremented by one. If some fraction of
-      the value of an input pixel is assigned to an output pixel, then the
-      weight of that output pixel is incremented by the fraction used.
-
-      The start of a new sequence is indicated by specifying the
-      AST\_\_REBININIT flag via the
-      {\tt{"}}flags{\tt{"}} parameter.
-      This causes the supplied arrays to be filled with zeros before the
-      rebinned input data is added into them. Subsequenct invocations
-      within the same sequence should omit the AST\_\_REBININIT flag.
-
-      The last call in a sequence is indicated by specifying the AST\_\_REBINEND
-      flag. This causes the output data and variance arrays to be normalised
-      before being returned. This normalisation consists of dividing the data
-      array by the weights array, and can eliminate artifacts which may be
-      introduced into the rebinned data as a consequence of aliasing between
-      the input and output grids. However, it can also result in small changes to
-      the total pixel value in any given area of the output array. In addition to
-      normalisation of the output data values, any output variances are also
-      appropriately normalised, and any output data values with weight less
-      than
-      {\tt{"}}wlim{\tt{"}} are set to {\tt{"}}badval{\tt{"}}.
-
-      Output variances can be generated in two ways; by rebinning the supplied
-      input variances with appropriate weights, or by finding the spread of
-      input data values contributing to each output pixel (see the AST\_\_GENVAR
-      and AST\_\_USEVAR flags).
-   }
-   \sstsynopsis{
-      void astRebinSeq$<$X$>$( AstMapping $*$this, double wlim, int ndim\_in,
-                           const int lbnd\_in[], const int ubnd\_in[],
-                           const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
-                           int spread, const double params[], int flags,
-                           double tol, int maxpix, $<$Xtype$>$ badval,
-                           int ndim\_out, const int lbnd\_out[],
-                           const int ubnd\_out[], const int lbnd[],
-                           const int ubnd[], $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[],
-                           double weights[], int $*$nused );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to a \htmlref{Mapping}{Mapping}, whose forward transformation will be
-         used to transform the coordinates of pixels in the input
-         grid into the coordinate system of the output grid.
-
-         The number of input coordinates used by this Mapping (as
-         given by its \htmlref{Nin}{Nin} attribute) should match the number of input
-         grid dimensions given by the value of {\tt{"}}ndim\_in{\tt{"}}
-         below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
-         attribute) should match the number of output grid dimensions
-         given by {\tt{"}}ndim\_out{\tt{"}}.
-         If {\tt{"}}in{\tt{"}} is NULL, the Mapping will not be used, but a valid
-         Mapping must still be supplied.
-      }
-      \sstsubsection{
-         wlim
-      }{
-         This value is only used if the AST\_\_REBINEND flag is specified
-         via the
-         {\tt{"}}flags{\tt{"}} parameter.
-         It gives the required number of input pixel values which must
-         contribute to an output pixel (i.e. the output pixel weight) in
-         order for the output pixel value to be considered valid. If the sum
-         of the input pixel weights contributing to an output pixel is less
-         than the supplied
-         {\tt{"}}wlim{\tt{"}}
-         value, then the output pixel value is returned set to the
-         supplied bad value. If the supplied value is less than 1.0E-10
-         then 1.0E-10 is used instead.
-      }
-      \sstsubsection{
-         ndim\_in
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         lbnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         ubnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape
-         and size of the input grid, its extent along a particular
-         (j'th) dimension being ubnd\_in[j]-lbnd\_in[j]$+$1 (assuming the
-         index {\tt{"}}j{\tt{"}} to be zero-based). They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         in
-      }{
-         Pointer to an array, with one element for each pixel in the
-         input grid, containing the input data to be rebined.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using astRebinSeqF, the type of each array element
-         should be {\tt{"}}float{\tt{"}}).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-         If a NULL pointer is supplied for {\tt{"}}in{\tt{"}}, then no data is added to
-         the output arrays, but any initialisation or normalisation
-         requested by {\tt{"}}flags{\tt{"}} is still performed.
-      }
-      \sstsubsection{
-         in\_var
-      }{
-         An optional
-         pointer to a
-         second array with the same size and type as the
-         {\tt{"}}in{\tt{"}}
-         array. If given, this should contain a set of non-negative values
-         which represent estimates of the statistical variance associated
-         with each element of the
-         {\tt{"}}in{\tt{"}}
-         array.
-         If neither the AST\_\_USEVAR nor the AST\_\_VARWGT flag is set, no
-         input variance estimates are required and this
-         pointer
-         will not be used.
-         A NULL pointer
-         may then be supplied.
-      }
-      \sstsubsection{
-         spread
-      }{
-         This parameter specifies the scheme to be used for dividing
-         each input data value up amongst the corresponding output pixels.
-         It may be used to select
-         from a set of pre-defined schemes by supplying one of the
-         values described in the {\tt{"}}Pixel Spreading Schemes{\tt{"}}
-         section in the description of the
-         astRebin$<$X$>$ functions.
-         If a value of zero is supplied, then the default linear spreading
-         scheme is used (equivalent to supplying the value AST\_\_LINEAR).
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         params
-      }{
-         An optional pointer to an array of double which should contain
-         any additional parameter values required by the pixel
-         spreading scheme. If such parameters are required, this
-         will be noted in the {\tt{"}}Pixel Spreading Schemes{\tt{"}} section in the
-         description of the
-         astRebin$<$X$>$ functions.
-
-         If no additional parameters are required, this array is not
-         used and a NULL pointer may be given.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         flags
-      }{
-         The bitwise OR of a set of flag values which may be used to
-         provide additional control over the rebinning operation. See
-         the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
-         options available.  If no flag values are to be set, a value
-         of zero should be given.
-      }
-      \sstsubsection{
-         tol
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement in pixels in the output grid's
-         coordinate system.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-
-         If the value is too high, discontinuities between the linear
-         approximations used in adjacent panel will be higher, and may
-         cause the edges of the panel to be visible when viewing the output
-         image at high contrast. If this is a problem, reduce the
-         tolerance value used.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         maxpix
-      }{
-         A value which specifies an initial scale size (in pixels) for
-         the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the input grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire input region.
-
-         If a smaller value is used, the input region will first be
-         divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
-         pixels in any dimension. Only at this point will attempts at
-         approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 pixels can also be employed as a safeguard in
-         general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         badval
-      }{
-         This argument should have the same type as the elements of
-         the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag missing
-         data (bad pixels) in the input and output arrays.
-
-         If the AST\_\_USEBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
-         then this value is used to test for bad pixels in the {\tt{"}}in{\tt{"}}
-         (and {\tt{"}}in\_var{\tt{"}}) array(s).
-
-         In all cases, this value is also used to flag any output
-         elements in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) for which
-         rebined values could not be obtained (see the {\tt{"}}Propagation
-         of Missing Data{\tt{"}} section below for details of the
-         circumstances under which this may occur).
-      }
-      \sstsubsection{
-         ndim\_out
-      }{
-         The number of dimensions in the output grid. This should be
-         at least one. It need not necessarily be equal to the number
-         of dimensions in the input grid.
-      }
-      \sstsubsection{
-         lbnd\_out
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the output grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd\_out
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the output grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} together define the
-         shape, size and coordinate system of the output grid in the
-         same way as {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} define the shape, size
-         and coordinate system of the input grid.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the first pixel in the region
-         of the input grid which is to be included in the rebined output
-         array.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the last pixel in the region of
-         the input grid which is to be included in the rebined output
-         array.
-
-         Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape and
-         position of a (hyper-)rectangular region of the input grid
-         which is to be included in the rebined output array. This region
-         should lie wholly within the extent of the input grid (as
-         defined by the {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} arrays). Regions of
-         the input grid lying outside this region will not be used.
-         Not used if {\tt{"}}in{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         out
-      }{
-         Pointer to an array, with one element for each pixel in the
-         output grid. The rebined data values will be added into the
-         original contents of this array. The numerical type of this array
-         should match that of the
-         {\tt{"}}in{\tt{"}} array, and the data storage order should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         out\_var
-      }{
-         A
-         pointer to an
-         array with the same type and size as the
-         {\tt{"}}out{\tt{"}}
-         array. This
-         pointer
-         will only be used if the AST\_\_USEVAR or AST\_\_GENVAR flag is set
-         in which case variance estimates for the rebined data values will
-         be added into the array. If neither the AST\_\_USEVAR flag nor the
-         AST\_\_GENVAR flag is set, no output variance estimates will be
-         calculated and this
-         pointer
-         will not be used. A
-         NULL pointer
-         may then be supplied.
-      }
-      \sstsubsection{
-         weights
-      }{
-         Pointer to an array of double,
-         with one or two elements for each pixel in the output grid,
-         depending on whether or not the AST\_\_GENVAR flag has been supplied
-         via the
-         {\tt{"}}flags{\tt{"}} parameter.
-         If AST\_\_GENVAR has not been specified then the array should have
-         one element for each output pixel, and it will be used to
-         accumulate the weight associated with each output pixel.
-         If AST\_\_GENVAR has been specified then the array should have
-         two elements for each output pixel. The first half of the array
-         is again used to accumulate the weight associated with each output
-         pixel, and the second half is used to accumulate the square of
-         the weights. In each half, the data storage order should be such that
-         the index of the first grid dimension varies most rapidly and that of
-         the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         nused
-      }{
-         A pointer to an int containing the
-         number of input data values that have been added into the output
-         array so far. The supplied value is incremented on exit by the
-         number of input values used. The value is initially set to zero
-         if the AST\_\_REBININIT flag is set in
-         {\tt{"}}flags{\tt{"}}.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate rebinning function, you should
-      replace $<$X$>$ in the generic function name astRebinSeq$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         I: int
-
-      }
-      For example, astRebinSeqD would be used to process {\tt{"}}double{\tt{"}}
-      data, while astRebinSeqI would be used to process {\tt{"}}int{\tt{"}}
-      data, etc.
-
-      Note that, unlike
-      \htmlref{astResample$<$X$>$}{astResampleX}, the astRebinSeq$<$X$>$
-      set of functions does not yet support unsigned integer data types
-      or integers of different sizes.
-   }
-   \sstdiytopic{
-      Control Flags
-   }{
-      The following flags are defined in the {\tt{"}}ast.h{\tt{"}} header file and
-      may be used to provide additional control over the rebinning
-      process. Having selected a set of flags, you should supply the
-      bitwise OR of their values via the {\tt{"}}flags{\tt{"}} parameter:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_REBININIT: Used to mark the first call in a sequence. It indicates
-         that the supplied
-         {\tt{"}}out{\tt{"}}, {\tt{"}}out\_var{\tt{"}} and {\tt{"}}weights{\tt{"}}
-         arrays should be filled with zeros (thus over-writing any supplied
-         values) before adding the rebinned input data into them. This flag
-         should be used when rebinning the first input array in a sequence.
-
-         \sstitem
-         AST\_\_REBINEND: Used to mark the last call in a sequence. It causes
-         each value in the
-         {\tt{"}}out{\tt{"}} and {\tt{"}}out\_var{\tt{"}}
-         arrays to be divided by a normalisation factor before being
-         returned. The normalisation factor for each output data value is just the
-         corresponding value from the weights array. The normalisation factor
-         for each output variance value is the square of the data value
-         normalisation factor. It also causes output data values to be set
-         bad if the corresponding weight is less than the value supplied for
-         parameter {\tt{"}}wlim{\tt{"}}.
-         It also causes any temporary values stored in the output variance array
-         (see flag AST\_\_GENVAR below) to be converted into usable variance values.
-
-         \sstitem
-         AST\_\_USEBAD: Indicates that there may be bad pixels in the
-         input array(s) which must be recognised by comparing with the
-         value given for {\tt{"}}badval{\tt{"}} and propagated to the output array(s).
-         If this flag is not set, all input values are treated literally
-         and the {\tt{"}}badval{\tt{"}} value is only used for flagging output array
-         values.
-
-         \sstitem
-         AST\_\_USEVAR: Indicates that output variance estimates should be
-         created by rebinning the supplied input variance estimates. An
-         error will be reported if both this flag and the AST\_\_GENVAR flag
-         are supplied.
-
-         \sstitem
-         AST\_\_GENVAR: Indicates that output variance estimates should be
-         created based on the spread of input data values contributing to each
-         output pixel. An error will be reported if both this flag and the
-         AST\_\_USEVAR flag are supplied. If the AST\_\_GENVAR flag is specified,
-         the supplied output variance array is first used as a work array to
-         accumulate the temporary values needed to generate the output
-         variances. When the sequence ends (as indicated by the
-         AST\_\_REBINEND flag), the contents of the output variance array are
-         converted into the required variance estimates. If the generation of
-         such output variances is required, this flag should be used on every
-         invocation of this
-         function
-         within a sequence, and any supplied input variances will have no effect
-         on the output variances (although input variances will still be used
-         to weight the input data if the AST\_\_VARWGT flag is also supplied).
-
-         \sstitem
-         AST\_\_VARWGT: Indicates that the input data should be weighted by
-         the reciprocal of the input variances. Otherwise, all input data are
-         given equal weight. If this flag is specified, the calculation of the
-         output variances (if any) is modified to take account of the
-         varying weights assigned to the input data values.
-      }
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Instances of missing data (bad pixels) in the output grid are
-      identified by occurrences of the {\tt{"}}badval{\tt{"}} value in the {\tt{"}}out{\tt{"}}
-      array. These are only produced if the AST\_\_REBINEND flag is
-      specified and a pixel has zero weight.
-
-      An input pixel is considered bad (and is consequently ignored) if
-      its
-      data value is equal to {\tt{"}}badval{\tt{"}} and the AST\_\_USEBAD flag is
-      set via the {\tt{"}}flags{\tt{"}} parameter.
-
-      In addition, associated output variance estimates (if
-      calculated) may be declared bad and flagged with the {\tt{"}}badval{\tt{"}}
-      value in the {\tt{"}}out\_var{\tt{"}} array for similar reasons.
-   }
-}
-\sstroutine{
-   astRemapFrame\sstlabel{astRemapFrame}
-}{
-   Modify a Frame's relationship to other Frames in a FrameSet
-}{
-   \sstdescription{
-      This function modifies the relationship (i.e. \htmlref{Mapping}{Mapping}) between a
-      specified \htmlref{Frame}{Frame} in a \htmlref{FrameSet}{FrameSet} and the other Frames in that
-      FrameSet.
-
-      Typically, this might be required if the FrameSet has been used
-      to calibrate (say) an image, and that image is re-binned. The
-      Frame describing the image will then have undergone a coordinate
-      transformation, and this should be communicated to the associated
-      FrameSet using this function.
-   }
-   \sstsynopsis{
-      void astRemapFrame( AstFrameSet $*$this, int iframe, AstMapping $*$map )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         iframe
-      }{
-         The index within the FrameSet of the Frame to be modified.
-         This value should lie in the range from 1 to the number of
-         Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
-      }
-      \sstsubsection{
-         map
-      }{
-         Pointer to a Mapping whose forward transformation converts
-         coordinate values from the original coordinate system
-         described by the Frame to the new one, and whose inverse
-         transformation converts in the opposite direction.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         The relationship between the selected Frame and any other
-         Frame within the FrameSet will be modified by this function,
-         but the relationship between all other Frames in the FrameSet
-         remains unchanged.
-
-         \sstitem
-         The number of input coordinate values accepted by the Mapping
-         (its \htmlref{Nin}{Nin} attribute) and the number of output coordinate values
-         generated (its \htmlref{Nout}{Nout} attribute) must be equal and must match the
-         number of axes in the Frame being modified.
-
-         \sstitem
-         If a simple change of axis order is required, then the
-         \htmlref{astPermAxes}{astPermAxes} function may provide a more straightforward method
-         of making the required changes to the FrameSet.
-
-         \sstitem
-         This function cannot be used to change the number of Frame
-         axes. To achieve this, a new Frame must be added to the FrameSet
-         (\htmlref{astAddFrame}{astAddFrame}) and the original one removed if necessary
-         (\htmlref{astRemoveFrame}{astRemoveFrame}).
-      }
-   }
-}
-\sstroutine{
-   astRemoveFrame\sstlabel{astRemoveFrame}
-}{
-   Remove a Frame from a FrameSet
-}{
-   \sstdescription{
-      This function removes a \htmlref{Frame}{Frame} from a \htmlref{FrameSet}{FrameSet}. All other Frames
-      in the FrameSet have their indices re-numbered from one (if
-      necessary), but are otherwise unchanged.
-   }
-   \sstsynopsis{
-      void astRemoveFrame( AstFrameSet $*$this, int iframe )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FrameSet.
-      }
-      \sstsubsection{
-         iframe
-      }{
-         The index within the FrameSet of the Frame to be removed.
-         This value should lie in the range from 1 to the number of
-         Frames in the FrameSet (as given by its \htmlref{Nframe}{Nframe} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Removing a Frame from a FrameSet does not affect the
-         relationship between other Frames in the FrameSet, even if they
-         originally depended on the Frame being removed.
-
-         \sstitem
-         The number of Frames in a FrameSet cannot be reduced to zero.
-         An error will result if an attempt is made to remove the only
-         remaining Frame.
-
-         \sstitem
-         A value of AST\_\_BASE or AST\_\_CURRENT may be given for the
-         {\tt{"}}iframe{\tt{"}} parameter to specify the base Frame or the current
-         Frame respectively.
-
-         \sstitem
-         If a FrameSet's base or current Frame is removed, the \htmlref{Base}{Base} or
-         \htmlref{Current}{Current} attribute (respectively) of the FrameSet will have its
-         value cleared, so that another Frame will then assume its role
-         by default.
-
-         \sstitem
-         If any other Frame is removed, the base and current Frames
-         will remain the same. To ensure this, the Base and/or Current
-         attributes of the FrameSet will be changed, if necessary, to
-         reflect any change in the indices of these Frames.
-      }
-   }
-}
-\sstroutine{
-   astRemoveRegions\sstlabel{astRemoveRegions}
-}{
-   Remove any Regions from a Mapping
-}{
-   \sstdescription{
-      This function searches the suppliedMapping (which may be a
-      compound \htmlref{Mapping}{Mapping} such as a \htmlref{CmpMap}{CmpMap}) for any component Mappings
-      that are instances of the AST \htmlref{Region}{Region} class. It then creates a new
-      Mapping from which all Regions have been removed. If a Region
-      cannot simply be removed (for instance, if it is a component of a
-      parallel CmpMap), then it is replaced with an equivalent \htmlref{UnitMap}{UnitMap}
-      in the returned Mapping.
-   }
-   \sstsynopsis{
-      AstMapping $*$astRemoveRegions( AstMapping $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the original Mapping.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         If the supplied Mapping is a CmpFrame, any component Frames that
-         are instances of the Region class are replaced by the equivalent
-         \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         If the supplied Mapping is a FrameSet, the returned Mapping
-         will be a copy of the supplied FrameSet in which Regions have
-         been removed from all the inter-Frame Mappings, and any Frames
-         which are instances of the Region class are repalced by the
-         equivalent Frame.
-      }
-      \sstsubsection{
-         Mapping
-      }{
-         This function applies to all Mappings.
-      }
-      \sstsubsection{
-         Region
-      }{
-         If the supplied Mapping is a Region, the returned Mapping will
-         be the equivalent Frame.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astRemoveRegions()
-      }{
-         A new pointer to the (possibly modified) Mapping.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function can safely be applied even to Mappings which
-         contain no Regions. If no Regions are found, it
-         behaves exactly like \htmlref{astClone}{astClone} and returns a pointer to the
-         original Mapping.
-
-         \sstitem
-         The Mapping returned by this function may not be independent
-         of the original (even if some Regions were removed), and
-         modifying it may therefore result in indirect modification of
-         the original. If a completely independent result is required, a
-         copy should be made using \htmlref{astCopy}{astCopy}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astResample$<$X$>$\sstlabel{astResampleX}
-}{
-   Resample a region of a data grid
-}{
-   \sstdescription{
-      This is a set of functions for resampling gridded data (e.g. an
-      image) under the control of a geometrical transformation, which
-      is specified by a \htmlref{Mapping}{Mapping}.  The functions operate on a pair of
-      data grids (input and output), each of which may have any number
-      of dimensions. Resampling may be restricted to a specified
-      region of the output grid. An associated grid of error estimates
-      associated with the input data may also be supplied (in the form
-      of variance values), so as to produce error estimates for the
-      resampled output data. Propagation of missing data (bad pixels)
-      is supported.
-
-      You should use a resampling function which matches the numerical
-      type of the data you are processing by replacing $<$X$>$ in
-      the generic function name astResample$<$X$>$ by an appropriate 1- or
-      2-character type code. For example, if you are resampling data
-      with type {\tt{"}}float{\tt{"}}, you should use the function astResampleF (see
-      the {\tt{"}}Data Type Codes{\tt{"}} section below for the codes appropriate to
-      other numerical types).
-
-      Resampling of the grid of input data is performed by
-      transforming the coordinates of the centre of each output grid
-      element (or pixel) into the coordinate system of the input grid.
-      Since the resulting coordinates will not, in general, coincide
-      with the centre of an input pixel, sub-pixel interpolation is
-      performed between the neighbouring input pixels. This produces a
-      resampled value which is then assigned to the output pixel. A
-      choice of sub-pixel interpolation schemes is provided, but you
-      may also implement your own.
-
-      This algorithm samples the input data value, it does not integrate
-      it. Thus total data value in the input image will not, in general,
-      be conserved. However, an option is provided (see the {\tt{"}}Control Flags{\tt{"}}
-      section below) which can produce approximate flux conservation by
-      scaling the output values using the ratio of the output pixel size
-      to the input pixel size. However, if accurate flux conservation is
-      important to you, consder using the
-      \htmlref{astRebin$<$X$>$}{astRebinX} or \htmlref{astRebinSeq$<$X$>$}{astRebinSeqX} family of functions
-      instead.
-
-      Output pixel coordinates are transformed into the coordinate
-      system of the input grid using the inverse transformation of the
-      Mapping which is supplied. This means that geometrical features
-      in the input data are subjected to the Mapping's forward
-      transformation as they are transferred from the input to the
-      output grid (although the Mapping's forward transformation is
-      not explicitly used).
-
-      In practice, transforming the coordinates of every pixel of a
-      large data grid can be time-consuming, especially if the Mapping
-      involves complicated functions, such as sky projections. To
-      improve performance, it is therefore possible to approximate
-      non-linear Mappings by a set of linear transformations which are
-      applied piece-wise to separate sub-regions of the data. This
-      approximation process is applied automatically by an adaptive
-      algorithm, under control of an accuracy criterion which
-      expresses the maximum tolerable geometrical distortion which may
-      be introduced, as a fraction of a pixel.
-
-      This algorithm first attempts to approximate the Mapping with a
-      linear transformation applied over the whole region of the
-      output grid which is being used. If this proves to be
-      insufficiently accurate, the output region is sub-divided into
-      two along its largest dimension and the process is repeated
-      within each of the resulting sub-regions. This process of
-      sub-division continues until a sufficiently good linear
-      approximation is found, or the region to which it is being
-      applied becomes too small (in which case the original Mapping is
-      used directly).
-   }
-   \sstsynopsis{
-      int astResample$<$X$>$( AstMapping $*$this, int ndim\_in,
-                          const int lbnd\_in[], const int ubnd\_in[],
-                          const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
-                          int interp, void ($*$ finterp)(),
-                          const double params[], int flags,
-                          double tol, int maxpix,
-                          $<$Xtype$>$ badval, int ndim\_out,
-                          const int lbnd\_out[], const int ubnd\_out[],
-                          const int lbnd[], const int ubnd[],
-                          $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[] );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to a Mapping, whose inverse transformation will be
-         used to transform the coordinates of pixels in the output
-         grid into the coordinate system of the input grid. This
-         yields the positions which are used to obtain resampled
-         values by sub-pixel interpolation within the input grid.
-
-         The number of input coordinates used by this Mapping (as
-         given by its \htmlref{Nin}{Nin} attribute) should match the number of input
-         grid dimensions given by the value of {\tt{"}}ndim\_in{\tt{"}}
-         below. Similarly, the number of output coordinates (\htmlref{Nout}{Nout}
-         attribute) should match the number of output grid dimensions
-         given by {\tt{"}}ndim\_out{\tt{"}}.
-      }
-      \sstsubsection{
-         ndim\_in
-      }{
-         The number of dimensions in the input grid. This should be at
-         least one.
-      }
-      \sstsubsection{
-         lbnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape
-         and size of the input grid, its extent along a particular
-         (j'th) dimension being ubnd\_in[j]-lbnd\_in[j]$+$1 (assuming the
-         index {\tt{"}}j{\tt{"}} to be zero-based). They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         in
-      }{
-         Pointer to an array, with one element for each pixel in the
-         input grid, containing the input data to be resampled.  The
-         numerical type of this array should match the 1- or
-         2-character type code appended to the function name (e.g. if
-         you are using astResampleF, the type of each array element
-         should be {\tt{"}}float{\tt{"}}).
-
-         The storage order of data within this array should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         in\_var
-      }{
-         An optional pointer to a second array with the same size and
-         type as the {\tt{"}}in{\tt{"}} array. If given, this should contain a set
-         of non-negative values which represent estimates of the
-         statistical variance associated with each element of the {\tt{"}}in{\tt{"}}
-         array. If this array is supplied (together with the
-         corresponding {\tt{"}}out\_var{\tt{"}} array), then estimates of the
-         variance of the resampled output data will be calculated.
-
-         If no input variance estimates are being provided, a NULL
-         pointer should be given.
-      }
-      \sstsubsection{
-         interp
-      }{
-         This parameter specifies the scheme to be used for sub-pixel
-         interpolation within the input grid. It may be used to select
-         from a set of pre-defined schemes by supplying one of the
-         values described in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
-         section below.  If a value of zero is supplied, then the
-         default linear interpolation scheme is used (equivalent to
-         supplying the value AST\_\_LINEAR).
-
-         Alternatively, you may supply a value which indicates that
-         you will provide your own function to perform sub-pixel
-         interpolation by means of the {\tt{"}}finterp {\tt{"}} parameter. Again, see
-         the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section below for
-         details.
-      }
-      \sstsubsection{
-         finterp
-      }{
-         If the value given for the {\tt{"}}interp{\tt{"}} parameter indicates that
-         you will provide your own function for sub-pixel
-         interpolation, then a pointer to that function should be
-         given here. For details of the interface which the function
-         should have (several are possible, depending on the value of
-         {\tt{"}}interp{\tt{"}}), see the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}} section
-         below.
-
-         If the {\tt{"}}interp{\tt{"}} parameter has any other value, corresponding
-         to one of the pre-defined interpolation schemes, then this
-         function will not be used and you may supply a NULL pointer.
-      }
-      \sstsubsection{
-         params
-      }{
-         An optional pointer to an array of double which should contain
-         any additional parameter values required by the sub-pixel
-         interpolation scheme. If such parameters are required, this
-         will be noted in the {\tt{"}}Sub-Pixel Interpolation Schemes{\tt{"}}
-         section below (you may also use this array to pass values
-         to your own interpolation function).
-
-         If no additional parameters are required, this array is not
-         used and a NULL pointer may be given.
-      }
-      \sstsubsection{
-         flags
-      }{
-         The bitwise OR of a set of flag values which may be used to
-         provide additional control over the resampling operation. See
-         the {\tt{"}}Control Flags{\tt{"}} section below for a description of the
-         options available.  If no flag values are to be set, a value
-         of zero should be given.
-      }
-      \sstsubsection{
-         tol
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement in pixels in the input grid's
-         coordinate system.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-      }
-      \sstsubsection{
-         maxpix
-      }{
-         A value which specifies an initial scale size (in pixels) for
-         the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the output grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire output region.
-
-         If a smaller value is used, the output region will first be
-         divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
-         pixels in any dimension. Only at this point will attempts at
-         approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 pixels can also be employed as a safeguard in
-         general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         badval
-      }{
-         This argument should have the same type as the elements of
-         the {\tt{"}}in{\tt{"}} array. It specifies the value used to flag missing
-         data (bad pixels) in the input and output arrays.
-
-         If the AST\_\_USEBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
-         then this value is used to test for bad pixels in the {\tt{"}}in{\tt{"}}
-         (and {\tt{"}}in\_var{\tt{"}}) array(s).
-
-         Unless the AST\_\_NOBAD flag is set via the {\tt{"}}flags{\tt{"}} parameter,
-         this value is also used to flag any output
-         elements in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) for which
-         resampled values could not be obtained (see the {\tt{"}}Propagation
-         of Missing Data{\tt{"}} section below for details of the
-         circumstances under which this may occur). The astResample$<$X$>$
-         function return value indicates whether any such values have
-         been produced. If the AST\_\_NOBAD flag is set. then output array
-         elements for which no resampled value could be obtained are
-         left set to the value they had on entry to this function.
-      }
-      \sstsubsection{
-         ndim\_out
-      }{
-         The number of dimensions in the output grid. This should be
-         at least one. It need not necessarily be equal to the number
-         of dimensions in the input grid.
-      }
-      \sstsubsection{
-         lbnd\_out
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the output grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd\_out
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the output grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} together define the
-         shape, size and coordinate system of the output grid in the
-         same way as {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} define the shape, size
-         and coordinate system of the input grid.
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the first pixel in the region
-         of the output grid for which a resampled value is to be
-         calculated.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_out{\tt{"}} elements,
-         containing the coordinates of the last pixel in the region of
-         the output grid for which a resampled value is to be
-         calculated.
-
-         Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape and
-         position of a (hyper-)rectangular region of the output grid
-         for which resampled values should be produced. This region
-         should lie wholly within the extent of the output grid (as
-         defined by the {\tt{"}}lbnd\_out{\tt{"}} and {\tt{"}}ubnd\_out{\tt{"}} arrays). Regions of
-         the output grid lying outside this region will not be
-         modified.
-      }
-      \sstsubsection{
-         out
-      }{
-         Pointer to an array, with one element for each pixel in the
-         output grid, into which the resampled data values will be
-         returned. The numerical type of this array should match that
-         of the {\tt{"}}in{\tt{"}} array, and the data storage order should be such
-         that the index of the first grid dimension varies most
-         rapidly and that of the final dimension least rapidly
-         (i.e. Fortran array indexing is used).
-      }
-      \sstsubsection{
-         out\_var
-      }{
-         An optional pointer to an array with the same type and size
-         as the {\tt{"}}out{\tt{"}} array. If given, this array will be used to
-         return variance estimates for the resampled data values. This
-         array will only be used if the {\tt{"}}in\_var{\tt{"}} array has also been
-         supplied.
-
-         The output variance values will be calculated on the
-         assumption that errors on the input data values are
-         statistically independent and that their variance estimates
-         may simply be summed (with appropriate weighting factors)
-         when several input pixels contribute to an output data
-         value. If this assumption is not valid, then the output error
-         estimates may be biased. In addition, note that the
-         statistical errors on neighbouring output data values (as
-         well as the estimates of those errors) may often be
-         correlated, even if the above assumption about the input data
-         is correct, because of the sub-pixel interpolation schemes
-         employed.
-
-         If no output variance estimates are required, a NULL pointer
-         should be given.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astResample$<$X$>$()
-      }{
-         The number of output pixels for which no valid resampled value
-         could be obtained. Thus, in the absence of any error, a returned
-         value of zero indicates that all the required output pixels
-         received valid resampled data values (and variances). See the
-         {\tt{"}}badval{\tt{"}} and {\tt{"}}flags{\tt{"}} parameters.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the global error status set, or if it should fail for any
-         reason.
-      }
-   }
-   \sstdiytopic{
-      Data Type Codes
-   }{
-      To select the appropriate resampling function, you should
-      replace $<$X$>$ in the generic function name astResample$<$X$>$ with a
-      1- or 2-character data type code, so as to match the numerical
-      type $<$Xtype$>$ of the data you are processing, as follows:
-      \sstitemlist{
-
-         \sstitem
-         D: double
-
-         \sstitem
-         F: float
-
-         \sstitem
-         L: long int
-
-         \sstitem
-         UL: unsigned long int
-
-         \sstitem
-         I: int
-
-         \sstitem
-         UI: unsigned int
-
-         \sstitem
-         S: short int
-
-         \sstitem
-         US: unsigned short int
-
-         \sstitem
-         B: byte (signed char)
-
-         \sstitem
-         UB: unsigned byte (unsigned char)
-
-      }
-      For example, astResampleD would be used to process {\tt{"}}double{\tt{"}}
-      data, while astResampleS would be used to process {\tt{"}}short int{\tt{"}}
-      data, etc.
-   }
-   \sstdiytopic{
-      Sub-Pixel Interpolation Schemes
-   }{
-      There is no such thing as a perfect sub-pixel interpolation
-      scheme and, in practice, all resampling will result in some
-      degradation of gridded data.  A range of schemes is therefore
-      provided, from which you can choose the one which best suits
-      your needs.
-
-      In general, a balance must be struck between schemes which tend
-      to degrade sharp features in the data by smoothing them, and
-      those which attempt to preserve sharp features. The latter will
-      often tend to introduce unwanted oscillations, typically visible
-      as {\tt{"}}ringing{\tt{"}} around sharp features and edges, especially if the
-      data are under-sampled (i.e. if the sharpest features are less
-      than about two pixels across). In practice, a good interpolation
-      scheme is likely to be a compromise and may exhibit some aspects
-      of both these features.
-
-      For under-sampled data, some interpolation schemes may appear to
-      preserve data resolution because they transform single input
-      pixels into single output pixels, rather than spreading their
-      data between several output pixels. While this may look
-      better cosmetically, it can result in a geometrical shift of
-      sharp features in the data. You should beware of this if you
-      plan to use such features (e.g.) for image alignment.
-
-      The following are two easy-to-use sub-pixel interpolation
-      schemes which are generally applicable. They are selected by
-      supplying the appropriate value (defined in the {\tt{"}}ast.h{\tt{"}} header
-      file) via the {\tt{"}}interp{\tt{"}} parameter. In these cases, the {\tt{"}}finterp{\tt{"}}
-      and {\tt{"}}params{\tt{"}} parameters are not used:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NEAREST: This is the simplest possible scheme, in which
-         the value of the input pixel with the nearest centre to the
-         interpolation point is used. This is very quick to execute and
-         will preserve single-pixel features in the data, but may
-         displace them by up to half their width along each dimension. It
-         often gives a good cosmetic result, so is useful for quick-look
-         processing, but is unsuitable if accurate geometrical
-         transformation is required.
-
-         \sstitem
-         AST\_\_LINEAR: This is the default scheme, which uses linear
-         interpolation between the nearest neighbouring pixels in the
-         input grid (there are two neighbours in one dimension, four
-         neighbours in two dimensions, eight in three dimensions,
-         etc.). It is superior to the nearest-pixel scheme (above) in not
-         displacing features in the data, yet it still executes fairly
-         rapidly. It is generally a safe choice if you do not have any
-         particular reason to favour another scheme, since it cannot
-         introduce oscillations. However, it does introduce some spatial
-         smoothing which varies according to the distance of the
-         interpolation point from the neighbouring pixels. This can
-         degrade the shape of sharp features in the data in a
-         position-dependent way. It may also show in the output variance
-         grid (if used) as a pattern of stripes or fringes.
-
-      }
-      An alternative set of interpolation schemes is based on forming
-      the interpolated value from the weighted sum of a set of
-      surrounding pixel values (not necessarily just the nearest
-      neighbours). This approach has its origins in the theory of
-      digital filtering, in which interpolated values are obtained by
-      conceptually passing the sampled data (represented by a grid of
-      delta functions) through a linear filter which implements a
-      convolution. Because the convolution kernel is continuous, the
-      convolution yields a continuous function which may then be
-      evaluated at fractional pixel positions. The (possibly
-      multi-dimensional) kernel is usually regarded as {\tt{"}}separable{\tt{"}} and
-      formed from the product of a set of identical 1-dimensional
-      kernel functions, evaluated along each dimension. Different
-      interpolation schemes are then distinguished by the choice of
-      this 1-dimensional interpolation kernel. The number of
-      surrounding pixels which contribute to the result may also be
-      varied.
-
-      From a practical standpoint, it is useful to divide the weighted
-      sum of pixel values by the sum of the weights when determining
-      the interpolated value.  Strictly, this means that a true
-      convolution is no longer being performed. However, the
-      distinction is rarely important in practice because (for
-      slightly subtle reasons) the sum of weights is always
-      approximately constant for good interpolation kernels. The
-      advantage of this technique, which is used here, is that it can
-      easily accommodate missing data and tends to minimise unwanted
-      oscillations at the edges of the data grid.
-
-      In the following schemes, which are based on a 1-dimensional
-      interpolation kernel, the first element of the {\tt{"}}params{\tt{"}} array
-      should be used to specify how many pixels are to contribute to the
-      interpolated result on either side of the interpolation point in
-      each dimension (the nearest integer value is used). Execution time
-      increases rapidly with this number. Typically, a value of 2 is
-      appropriate and the minimum value used will be 1 (i.e. two pixels
-      altogether, one on either side of the interpolation point).
-      A value of zero or less may be given for {\tt{"}}params[0]{\tt{"}}
-      to indicate that a suitable number of pixels should be calculated
-      automatically.
-
-      In each of these cases, the {\tt{"}}finterp{\tt{"}} parameter is not used:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_SINC: This scheme uses a sinc(pi$*$x) kernel, where x is the
-         pixel offset from the interpolation point and sinc(z)=sin(z)/z. This
-         sometimes features as an {\tt{"}}optimal{\tt{"}} interpolation kernel in books on
-         image processing. Its supposed optimality depends on the assumption
-         that the data are band-limited (i.e. have no spatial frequencies above
-         a certain value) and are adequately sampled. In practice, astronomical
-         data rarely meet these requirements. In addition, high spatial
-         frequencies are often present due (e.g.) to image defects and cosmic
-         ray events. Consequently, substantial ringing can be experienced with
-         this kernel. The kernel also decays slowly with distance, so that
-         many surrounding pixels are required, leading to poor performance.
-         Abruptly truncating it, by using only a few neighbouring pixels,
-         improves performance and may reduce ringing (if {\tt{"}}params[0]{\tt{"}} is set to
-         zero, then only two pixels will be used on either side). However, a
-         more gradual truncation, as implemented by other kernels, is generally
-         to be preferred. This kernel is provided mainly so that you can
-         convince yourself not to use it!
-
-         \sstitem
-         AST\_\_SINCSINC: This scheme uses an improved kernel, of the form
-         sinc(pi$*$x).sinc(k$*$pi$*$x), with k a constant, out to the point where
-         sinc(k$*$pi$*$x) goes to zero, and zero beyond. The second sinc() factor
-         provides an {\tt{"}}envelope{\tt{"}} which gradually rolls off the normal sinc(pi$*$x)
-         kernel at large offsets. The width of this envelope is specified by
-         giving the number of pixels offset at which it goes to zero by means
-         of the {\tt{"}}params[1]{\tt{"}} value, which should be at least 1.0 (in addition,
-         setting {\tt{"}}params[0]{\tt{"}} to zero will select the number of contributing
-         pixels so as to utilise the full width of the kernel, out to where it
-         reaches zero). The case given by {\tt{"}}params[0]=2, params[1]=2{\tt{"}} is typically
-         a good choice and is sometimes known as the Lanczos kernel. This is a
-         valuable general-purpose interpolation scheme, intermediate in its
-         visual effect on images between the AST\_\_NEAREST and AST\_\_LINEAR
-         schemes. Although the kernel is slightly oscillatory, ringing is
-         adequately suppressed if the data are well sampled.
-
-         \sstitem
-         AST\_\_SINCCOS: This scheme uses a kernel of the form
-         sinc(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
-         cos(k$*$pi$*$x) goes to zero, and zero beyond. As above, the cos() factor
-         provides an envelope which gradually rolls off the sinc() kernel
-         at large offsets. The width of this envelope is specified by giving
-         the number of pixels offset at which it goes to zero by means
-         of the {\tt{"}}params[1]{\tt{"}} value, which should be at least 1.0 (in addition,
-         setting {\tt{"}}params[0]{\tt{"}} to zero will select the number of contributing
-         pixels so as to utilise the full width of the kernel, out to where it
-         reaches zero). This scheme gives similar results to the
-         AST\_\_SINCSINC scheme, which it resembles.
-
-         \sstitem
-         AST\_\_SINCGAUSS: This scheme uses a kernel of the form
-         sinc(pi$*$x).exp(-k$*$x$*$x), with k a positive constant. Here, the sinc()
-         kernel is rolled off using a Gaussian envelope which is specified by
-         giving its full-width at half-maximum (FWHM) by means of the {\tt{"}}params[1]{\tt{"}}
-         value, which should be at least 0.1 (in addition, setting {\tt{"}}params[0]{\tt{"}}
-         to zero will select the number of contributing pixels so as to utilise
-         the width of the kernel out to where the envelope declines to 1\% of its
-         maximum value). On astronomical images and spectra, good results are
-         often obtained by approximately matching the FWHM of the
-         envelope function, given by {\tt{"}}params[1]{\tt{"}}, to the point spread function
-         of the input data. However, there does not seem to be any theoretical
-         reason for this.
-
-         \sstitem
-         AST\_\_SOMB: This scheme uses a somb(pi$*$x) kernel (a {\tt{"}}sombrero{\tt{"}}
-         function), where x is the pixel offset from the interpolation point
-         and somb(z)=2$*$J1(z)/z  (J1 is a Bessel function of the first kind of
-         order 1). It is similar to the AST\_\_SINC kernel, and has the same
-         parameter usage.
-
-         \sstitem
-         AST\_\_SOMBCOS: This scheme uses a kernel of the form
-         somb(pi$*$x).cos(k$*$pi$*$x), with k a constant, out to the point where
-         cos(k$*$pi$*$x) goes to zero, and zero beyond. It is similar to the
-         AST\_\_SINCCOS kernel, and has the same parameter usage.
-
-      }
-      In addition, the following schemes are provided which are not based
-      on a 1-dimensional kernel:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_BLOCKAVE: This scheme simply takes an average of all the
-         pixels on the input grid in a cube centred on the interpolation
-         point.  The number of pixels in the cube is determined by the
-         value of the first element of the {\tt{"}}params{\tt{"}} array, which gives
-         the number of pixels in each dimension on either side of the
-         central point.  Hence a block of (2 $*$ params[0])$\wedge$ndim\_in
-         pixels in the input grid will be examined to determine the
-         value of the output pixel.  If the variance is not being used
-         (var\_in or var\_out = NULL) then all valid pixels in this cube
-         will be averaged in to the result with equal weight.
-         If variances are being used, then each input pixel will be
-         weighted proportionally to the reciprocal of its variance; any
-         pixel without a valid variance will be discarded.  This scheme
-         is suitable where the output grid is much coarser than the
-         input grid; if the ratio of pixel sizes is R then a suitable
-         value of params[0] may be R/2.
-
-      }
-      Finally, supplying the following values for {\tt{"}}interp{\tt{"}} allows you
-      to implement your own sub-pixel interpolation scheme by means of
-      your own function. You should supply a pointer to this function
-      via the {\tt{"}}finterp{\tt{"}} parameter:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_UKERN1: In this scheme, you supply a function to evaluate
-         your own 1-dimensional interpolation kernel, which is then used
-         to perform sub-pixel interpolation (as described above). The
-         function you supply should have the same interface as the
-         fictitious \htmlref{astUkern1}{astUkern1} function (q.v.).  In addition, a value
-         should be given via {\tt{"}}params[0]{\tt{"}} to specify the number of
-         neighbouring pixels which are to contribute to each interpolated
-         value (in the same way as for the pre-defined interpolation
-         schemes described above). Other elements of the {\tt{"}}params{\tt{"}} array
-         are available to pass values to your interpolation function.
-
-         \sstitem
-         AST\_\_UINTERP: This is a completely general scheme, in which
-         your interpolation function has access to all of the input
-         data. This allows you to implement any interpolation algorithm
-         you choose, which could (for example) be non-linear, or
-         adaptive. In this case, the astResample$<$X$>$ functions play no
-         role in the sub-pixel interpolation process and simply handle
-         the geometrical transformation of coordinates and other
-         housekeeping. The function you supply should have the same
-         interface as the fictitious \htmlref{astUinterp}{astUinterp} function (q.v.). In this
-         case, the {\tt{"}}params{\tt{"}} parameter is not used by astResample$<$X$>$, but
-         is available to pass values to your interpolation function.
-      }
-   }
-   \sstdiytopic{
-      Control Flags
-   }{
-      The following flags are defined in the {\tt{"}}ast.h{\tt{"}} header file and
-      may be used to provide additional control over the resampling
-      process. Having selected a set of flags, you should supply the
-      bitwise OR of their values via the {\tt{"}}flags{\tt{"}} parameter:
-
-      \sstitemlist{
-
-         \sstitem
-         AST\_\_NOBAD: Indicates that any output array elements for which no
-         resampled value could be obtained should be left set to the value
-         they had on entry to this function. If this flag is not supplied,
-         such output array elements are set to the value supplied for
-         parameter {\tt{"}}badval{\tt{"}}. Note, this flag cannot be used in conjunction
-         with the AST\_\_CONSERVEFLUX flag (an error will be reported if both
-         flags are specified).
-
-         \sstitem
-         AST\_\_URESAMP1, 2, 3 \& 4: A set of four flags which are
-         reserved for your own use. They may be used to pass private
-         information to any sub-pixel interpolation function which you
-         implement yourself. They are ignored by all the pre-defined
-         interpolation schemes.
-
-         \sstitem
-         AST\_\_USEBAD: Indicates that there may be bad pixels in the
-         input array(s) which must be recognised by comparing with the
-         value given for {\tt{"}}badval{\tt{"}} and propagated to the output array(s).
-         If this flag is not set, all input values are treated literally
-         and the {\tt{"}}badval{\tt{"}} value is only used for flagging output array
-         values.
-
-         \sstitem
-         AST\_\_CONSERVEFLUX: Indicates that the output pixel values should
-         be scaled in such a way as to preserve (approximately) the total data
-         value in a feature on the sky. Without this flag, each output pixel
-         value represents an instantaneous sample of the input data values at
-         the corresponding input position. This is appropriate if the input
-         data represents the spatial density of some quantity (e.g. surface
-         brightness in Janskys per square arc-second) because the output
-         pixel values will have the same normalisation and units as the
-         input pixel values. However, if the input data values represent
-         flux (or some other physical quantity) per pixel, then the
-         AST\_\_CONSERVEFLUX flag could be used. This causes each output
-         pixel value to be scaled by the ratio of the output pixel size to
-         the input pixel size.
-
-      }
-      This flag can only be used if the Mapping is succesfully approximated
-      by one or more linear transformations. Thus an error will be reported
-      if it used when the
-      {\tt{"}}tol{\tt{"}} parameter
-      is set to zero (which stops the use of linear approximations), or
-      if the Mapping is too non-linear to be approximated by a piece-wise
-      linear transformation. The ratio of output to input pixel size is
-      evaluated once for each panel of the piece-wise linear approximation to
-      the Mapping, and is assumed to be constant for all output pixels in the
-      panel. The scaling factors for adjacent panels will in general
-      differ slightly, and so the joints between panels may be visible when
-      viewing the output image at high contrast. If this is a problem,
-      reduce the value of the
-      {\tt{"}}tol{\tt{"}} parameter
-      until the difference between adjacent panels is sufficiently small
-      to be insignificant.
-
-      Note, this flag cannot be used in conjunction with the AST\_\_NOBAD
-      flag (an error will be reported if both flags are specified).
-
-      Flux conservation can only be approximate when using a resampling
-      algorithm. For accurate flux conservation use the
-      astRebin$<$X$>$ or astRebinSeq$<$X$>$ function
-      instead.
-   }
-   \sstdiytopic{
-      Propagation of Missing Data
-   }{
-      Unless the AST\_\_NOBAD flag is specified, instances of missing data
-      (bad pixels) in the output grid are
-      identified by occurrences of the {\tt{"}}badval{\tt{"}} value in the {\tt{"}}out{\tt{"}}
-      array. These may be produced if any of the following happen:
-
-      \sstitemlist{
-
-         \sstitem
-         The input position (the transformed position of the output
-         pixel's centre) lies outside the boundary of the grid of input
-         pixels.
-
-         \sstitem
-         The input position lies inside the boundary of a bad input
-         pixel. In this context, an input pixel is considered bad if its
-         data value is equal to {\tt{"}}badval{\tt{"}} and the AST\_\_USEBAD flag is
-         set via the {\tt{"}}flags{\tt{"}} parameter.
-         (Positions which have half-integral coordinate values, and
-         therefore lie on a pixel boundary, are regarded as lying within
-         the pixel with the larger, i.e. more positive, index.)
-
-         \sstitem
-         The set of neighbouring input pixels (excluding those which
-         are bad) is unsuitable for calculating an interpolated
-         value. Whether this is true may depend on the sub-pixel
-         interpolation scheme in use.
-
-         \sstitem
-         The interpolated value lies outside the range which can be
-         represented using the data type of the {\tt{"}}out{\tt{"}} array.
-
-      }
-      In addition, associated output variance estimates (if
-      calculated) may be declared bad and flagged with the {\tt{"}}badval{\tt{"}}
-      value in the {\tt{"}}out\_var{\tt{"}} array under any of the following
-      circumstances:
-
-      \sstitemlist{
-
-         \sstitem
-         The associated resampled data value (in the {\tt{"}}out{\tt{"}} array) is bad.
-
-         \sstitem
-         The set of neighbouring input pixels which contributed to the
-         output data value do not all have valid variance estimates
-         associated with them. In this context, an input variance
-         estimate may be regarded as bad either because it has the value
-         {\tt{"}}badval{\tt{"}} (and the AST\_\_USEBAD flag is set), or because it is
-         negative.
-
-         \sstitem
-         The set of neighbouring input pixels for which valid variance
-         values are available is unsuitable for calculating an overall
-         variance value. Whether this is true may depend on the sub-pixel
-         interpolation scheme in use.
-
-         \sstitem
-         The variance value lies outside the range which can be
-         represented using the data type of the {\tt{"}}out\_var{\tt{"}} array.
-
-      }
-      If the AST\_\_NOBAD flag is specified via
-      parameter {\tt{"}}flags{\tt{"}},
-      then output array elements that would otherwise be set to
-      {\tt{"}}badval{\tt{"}}
-      are instead left holding the value they had on entry to this
-      function. The number of such array elements is returned as
-      the function value.
-   }
-}
-\sstroutine{
-   astResolve\sstlabel{astResolve}
-}{
-   Resolve a vector into two orthogonal components
-}{
-   \sstdescription{
-      This function resolves a vector into two perpendicular components.
-      The vector from point 1 to point 2 is used as the basis vector.
-      The vector from point 1 to point 3 is resolved into components
-      parallel and perpendicular to this basis vector. The lengths of the
-      two components are returned, together with the position of closest
-      aproach of the basis vector to point 3.
-   }
-   \sstsynopsis{
-      void astResolve( AstFrame $*$this, const double point1[],
-                       const double point2[], const double point3[],
-                       double point4[], double $*$d1, double $*$d2 );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         point1
-      }{
-         An array of double, with one element for each Frame axis
-         (\htmlref{Naxes}{Naxes} attribute). This marks the start of the basis vector,
-         and of the vector to be resolved.
-      }
-      \sstsubsection{
-         point2
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute). This marks the end of the basis vector.
-      }
-      \sstsubsection{
-         point3
-      }{
-         An array of double, with one element for each Frame axis
-         (Naxes attribute). This marks the end of the vector to be
-         resolved.
-      }
-      \sstsubsection{
-         point4
-      }{
-         An array of double, with one element for each Frame axis
-         in which the coordinates of the point of closest approach of the
-         basis vector to point 3 will be returned.
-      }
-      \sstsubsection{
-         d1
-      }{
-         The address of a location at which to return the distance from
-         point 1 to point 4 (that is, the length of the component parallel
-         to the basis vector). Positive values are in the same sense as
-         movement from point 1 to point 2.
-      }
-      \sstsubsection{
-         d2
-      }{
-         The address of a location at which to return the distance from
-         point 4 to point 3 (that is, the length of the component
-         perpendicular to the basis vector). The value is always positive.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Each vector used in this function is the path of
-         shortest distance between two points, as defined by the
-         \htmlref{astDistance}{astDistance} function.
-
-         \sstitem
-         This function will return {\tt{"}}bad{\tt{"}} coordinate values (AST\_\_BAD)
-         if any of the input coordinates has this value, or if the required
-         output values are undefined.
-      }
-   }
-}
-\sstroutine{
-   astRetainFits\sstlabel{astRetainFits}
-}{
-   Indicate that the current card in a FitsChan should be retained
-}{
-   \sstdescription{
-      This function
-      stores a flag with the current card in the \htmlref{FitsChan}{FitsChan} indicating that
-      the card should not be removed from the FitsChan when an \htmlref{Object}{Object} is
-      read from the FitsChan using
-      \htmlref{astRead}{astRead}.
-
-      Cards that have not been flagged in this way are removed when a
-      read operation completes succesfully, but only if the card was used
-      in the process of creating the returned AST Object. Any cards that
-      are irrelevant to the creation of the AST Object are retained whether
-      or not they are flagged.
-   }
-   \sstsynopsis{
-      void astRetainFits( AstFitsChan $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function returns without action if the FitsChan is
-         initially positioned at the {\tt{"}}end-of-file{\tt{"}} (i.e. if the \htmlref{Card}{Card}
-         attribute exceeds the number of cards in the FitsChan).
-
-         \sstitem
-         The current card is not changed by this function.
-      }
-   }
-}
-\sstroutine{
-   astSame\sstlabel{astSame}
-}{
-   Test if two AST pointers refer to the same Object
-}{
-   \sstdescription{
-      This function returns a boolean result (0 or 1) to indicate
-      whether two pointers refer to the same \htmlref{Object}{Object}.
-   }
-   \sstsynopsis{
-      int astSame( AstObject $*$this,  AstObject $*$that )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the first Object.
-      }
-      \sstsubsection{
-         that
-      }{
-         Pointer to the second Object.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSame()
-      }{
-         One if the two pointers refer to the same Object, otherwise zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Two independent Objects that happen to be identical are not
-         considered to be the same Object by this function.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSelectorMap\sstlabel{astSelectorMap}
-}{
-   Create a SelectorMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SelectorMap}{SelectorMap} and optionally initialises
-      its attributes.
-
-      A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
-      a given input position.
-
-      A SelectorMap encapsulates a number of Regions that all have the same
-      number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
-      inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
-      spanned by one of the encapsulated Region. All SelectorMaps have only
-      a single output. SelectorMaps do not define an inverse transformation.
-
-      For each input position, the forward transformation of a SelectorMap
-      searches through the encapsulated Regions (in the order supplied when
-      the SelectorMap was created) until a Region is found which contains
-      the input position. The index associated with this Region is
-      returned as the SelectorMap output value (the index value is the
-      position of the Region within the list of Regions supplied when the
-      SelectorMap was created, starting at 1 for the first Region). If an
-      input position is not contained within any Region, a value of zero is
-      returned by the forward transformation.
-
-      If a compound Mapping contains a SelectorMap in series with its own
-      inverse, the combination of the two adjacent SelectorMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{astSimplify}{astSimplify}.
-
-      In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-   }
-   \sstsynopsis{
-      AstSelectorMap $*$astSelectorMap( int nreg, AstRegion $*$regs[],
-                                      double badval, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nreg
-      }{
-         The number of supplied Regions.
-      }
-      \sstsubsection{
-         regs
-      }{
-         An array of pointers to the Regions. All the supplied Regions must
-         relate to the same coordinate Frame. The number of axes in this
-         coordinate Frame defines the number of inputs for the SelectorMap.
-      }
-      \sstsubsection{
-         badval
-      }{
-         The value to be returned by the forward transformation of the
-         SelectorMap for any input positions that have a bad (AST\_\_BAD)
-         value on any axis.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SelectorMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSelectorMap()
-      }{
-         A pointer to the new SelectorMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Deep copies are taken of the supplied Regions. This means that
-         any subsequent changes made to the component Regions using the
-         supplied pointers will have no effect on the SelectorMap.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSet\sstlabel{astSet}
-}{
-   Set attribute values for an Object
-}{
-   \sstdescription{
-      This function assigns a set of attribute values to an \htmlref{Object}{Object},
-      over-riding any previous values. The attributes and their new
-      values are specified via a character string, which should
-      contain a comma-separated list of the form:
-
-         {\tt{"}}attribute\_1 = value\_1, attribute\_2 = value\_2, ... {\tt{"}}
-
-      where {\tt{"}}attribute\_n{\tt{"}} specifies an attribute name, and the value
-      to the right of each {\tt{"}}={\tt{"}} sign should be a suitable textual
-      representation of the value to be assigned. This value will be
-      interpreted according to the attribute's data type.
-
-      The string supplied may also contain {\tt{"}}printf{\tt{"}}-style format
-      specifiers, identified by {\tt{"}}\%{\tt{"}} signs in the usual way. If
-      present, these will be substituted by values supplied as
-      additional optional arguments (using the normal {\tt{"}}printf{\tt{"}} rules)
-      before the string is used.
-   }
-   \sstsynopsis{
-      void astSet( AstObject $*$this, const char $*$settings, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         settings
-      }{
-         Pointer to a null-terminated character string containing a
-         comma-separated list of attribute settings in the form described
-         above.
-      }
-      \sstsubsection{
-         ...
-      }{
-         Optional additional arguments which supply values to be
-         substituted for any {\tt{"}}printf{\tt{"}}-style format specifiers that
-         appear in the {\tt{"}}settings{\tt{"}} string.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         astSet( map, {\tt{"}}\htmlref{Report}{Report} = 1, \htmlref{Zoom}{Zoom} = 25.0{\tt{"}} );
-      }{
-         Sets the Report attribute for Object {\tt{"}}map{\tt{"}} to the value 1 and
-         the Zoom attribute to 25.0.
-      }
-      \sstexamplesubsection{
-         astSet( frame, {\tt{"}}Label( \%d ) =Offset along axis \%d{\tt{"}}, axis, axis );
-      }{
-         Sets the \htmlref{Label(axis)}{Labelaxis} attribute for Object {\tt{"}}frame{\tt{"}} to a
-         suitable string, where the axis number is obtained from
-         {\tt{"}}axis{\tt{"}}, a variable of type int.
-      }
-      \sstexamplesubsection{
-         astSet( frame, {\tt{"}}\htmlref{Title}{Title} =\%s{\tt{"}}, mystring );
-      }{
-         Sets the Title attribute for Object {\tt{"}}frame{\tt{"}} to the contents of
-         the string {\tt{"}}mystring{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         White space may also surround attribute values, where it will
-         generally be ignored (except for string-valued attributes where
-         it is significant and forms part of the value to be assigned).
-
-         \sstitem
-         It is not possible to include a comma directly in the value
-         assigned to an attribute via the {\tt{"}}settings{\tt{"}} string. To achieve
-         this, you should use {\tt{"}}\%s{\tt{"}} format and supply the value as a
-         separate additional argument to astSet (or use the astSetC
-         function instead).
-
-         \sstitem
-         The same procedure may be adopted if {\tt{"}}\%{\tt{"}} signs are to be included
-         and are not to be interpreted as format specifiers (alternatively,
-         the {\tt{"}}printf{\tt{"}} convention of writing {\tt{"}}\%\%{\tt{"}} may be used).
-
-         \sstitem
-         An error will result if an attempt is made to set a value for
-         a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   astSet$<$X$>$\sstlabel{astSetX}
-}{
-   Set an attribute value for an Object
-}{
-   \sstdescription{
-      This is a family of functions which set a specified attribute
-      value for an \htmlref{Object}{Object} using one of several different data
-      types. The type is selected by replacing $<$X$>$ in the function name
-      by C, D, F, I or L, to supply a value in const char$*$ (i.e. string),
-      double, float, int, or long format, respectively.
-
-      If possible, the value you supply is converted to the type of
-      the attribute. If conversion is not possible, an error will
-      result.
-   }
-   \sstsynopsis{
-      void astSet$<$X$>$( AstObject $*$this, const char $*$attrib, $<$X$>$type value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         attrib
-      }{
-         Pointer to a null-terminated character string containing the
-         name of the attribute whose value is to be set.
-      }
-      \sstsubsection{
-         value
-      }{
-         The value to be set for the attribute, in the data type corresponding
-         to $<$X$>$ (or, in the case of astSetC, a pointer to a null-terminated
-         character string containing this value).
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         These functions apply to all Objects.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         astSetI( frame, {\tt{"}}Preserve{\tt{"}}, 1 );
-      }{
-         Sets the Preserve attribute value for Object {\tt{"}}frame{\tt{"}} to 1.
-      }
-      \sstexamplesubsection{
-         astSetC( plot, {\tt{"}}Format(1){\tt{"}}, {\tt{"}}\%.2g{\tt{"}} );
-      }{
-         Sets the Format(1) attribute value for Object {\tt{"}}plot{\tt{"}} to the
-         character string {\tt{"}}\%.2g{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         An error will result if an attempt is made to set a value for
-         a read-only attribute.
-      }
-   }
-}
-\sstroutine{
-   astSetActiveUnit\sstlabel{astSetActiveUnit}
-}{
-   Specify how the Unit attribute should be used
-}{
-   \sstdescription{
-      This function
-      sets the current value of the ActiveUnit flag for a \htmlref{Frame}{Frame}, which
-      controls how the Frame behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert})
-      to match another Frame. If the ActiveUnit flag is set in both
-      template and target Frames then the returned \htmlref{Mapping}{Mapping} takes into account
-      any differences in axis units. The default value for simple Frames is
-      zero, which preserves the behaviour of versions of AST prior to
-      version 2.0.
-
-      If the ActiveUnit flag of either Frame is
-      zero,
-      then the Mapping will ignore any difference in the Unit attributes of
-      corresponding template and target axes. In this mode, the Unit
-      attributes are purely descriptive commentary for the benefit of
-      human readers and do not influence the Mappings between Frames.
-      This is the behaviour which all Frames had in older version of AST,
-      prior to the introduction of this attribute.
-
-      If the ActiveUnit flag of both Frames is
-      non-zero,
-      then the Mapping from template to target will take account of any
-      difference in the axis Unit attributes, where-ever possible. For
-      instance, if corresponding target and template axes have Unit strings of
-      {\tt{"}}km{\tt{"}} and {\tt{"}}m{\tt{"}}, then the \htmlref{FrameSet}{FrameSet} class will use a \htmlref{ZoomMap}{ZoomMap} to connect
-      them which introduces a scaling of 1000. If no Mapping can be found
-      between the corresponding units string, then an error is reported.
-      In this mode, it is assumed that values of the Unit attribute conform
-      to the syntax for units strings described in the FITS WCS Paper I
-      {\tt{"}}Representations of world coordinates in FITS{\tt{"}} (Greisen \& Calabretta).
-      Particularly, any of the named unit symbols, functions, operators or
-      standard multiplier prefixes listed within that paper can be used within
-      a units string. A units string may contain symbols for unit which are
-      not listed in the FITS paper, but transformation to any other units
-      will then not be possible (except to units which depend only on the
-      same unknown units - thus {\tt{"}}flops{\tt{"}} can be transformed to {\tt{"}}Mflops{\tt{"}}
-      even though {\tt{"}}flops{\tt{"}} is not a standard FITS unit symbol).
-
-      A range of common non-standard variations of unit names and multiplier
-      prefixes are also allowed, such as adding an {\tt{"}}s{\tt{"}} to the end of Angstrom,
-      using a lower case {\tt{"}}a{\tt{"}} at the start of {\tt{"}}angstrom{\tt{"}}, {\tt{"}}micron{\tt{"}} instead of
-      {\tt{"}}um{\tt{"}}, {\tt{"}}sec{\tt{"}} instead of {\tt{"}}s{\tt{"}}, etc.
-
-      If the ActiveUnit flag is non-zero, setting a new Unit value for an
-      axis may also change its Label and Symbol attributes. For instance, if
-      an axis has Unit {\tt{"}}Hz{\tt{"}} and Label {\tt{"}}frequency{\tt{"}}, then changing its Unit to
-      {\tt{"}}log(Hz){\tt{"}} will change its Label to {\tt{"}}log( frequency ){\tt{"}}. In addition,
-      the \htmlref{Axis}{Axis} Format attribute will be cleared when-ever a new value
-      is assigned to the Unit attribute.
-
-      Note, if a non-zero value is set for the ActiveUnit flag, then changing a
-      Unit value for the current Frame within a FrameSet will result in the
-      Frame being re-mapped (that is, the Mappings which define the
-      relationships between Frames within the FrameSet will be modified to
-      take into account the change in Units).
-   }
-   \sstsynopsis{
-      void astSetActiveUnit( AstFrame $*$this, int value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         value
-      }{
-         The new value to use.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The ActiveUnit flag for a SkyFrame is always 0 (any value
-         supplied using this function is ignored).
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The ActiveUnit flag for a SpecFrame is always 1 (any value
-         supplied using this function is ignored).
-      }
-      \sstsubsection{
-         \htmlref{FluxFrame}{FluxFrame}
-      }{
-         The ActiveUnit flag for a FluxFrame is always 1 (any value
-         supplied using this function is ignored).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The default ActiveUnit flag for a CmpFrame is 1 if both of the
-         component Frames are using active units, and zero otherwise. When
-         a new value is set for the ActiveUnit flag, the flag value
-         is propagated to the component Frames. This change will be
-         reflected through all references to the component Frames, not
-         just those encapsulated within the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{Region}{Region}:
-      }{
-         Regions always use active units if possible.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The ActiveUnit flag resembles a Frame attribute, except that it
-         cannot be tested or cleared, and it cannot be accessed using the
-         generic \htmlref{astGet$<$X$>$}{astGetX} and \htmlref{astSet$<$X$>$}{astSetX} functions.
-
-         \sstitem
-         The \htmlref{astGetActiveUnit}{astGetActiveUnit} function can be used to retrieve the current
-         value of the ActiveUnit flag.
-      }
-   }
-}
-\sstroutine{
-   astSetFits$<$X$>$\sstlabel{astSetFitsX}
-}{
-   Store a keyword value in a FitsChan
-}{
-   \sstdescription{
-      This is a family of functions which store values for named keywords
-      within a \htmlref{FitsChan}{FitsChan} at the current card position. The supplied keyword
-      value can either over-write an existing keyword value, or can be
-      inserted as a new header card into the FitsChan.
-
-      The keyword data type is selected by replacing $<$X$>$ in the function name
-      by one of the following strings representing the recognised FITS data
-      types:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - Complex floating point values.
-
-         \sstitem
-         CI - Complex integer values.
-
-         \sstitem
-         F  - Floating point values.
-
-         \sstitem
-         I  - Integer values.
-
-         \sstitem
-         L  - Logical (i.e. boolean) values.
-
-         \sstitem
-         S  - String values.
-
-         \sstitem
-         CN - A {\tt{"}}CONTINUE{\tt{"}} value, these are treated like string values, but
-                are encoded without an equals sign.
-
-      }
-      The data type of the {\tt{"}}value{\tt{"}} parameter depends on $<$X$>$ as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         CF - {\tt{"}}double $*${\tt{"}} (a pointer to a 2 element array holding the real and
-                imaginary parts of the complex value).
-
-         \sstitem
-         CI - {\tt{"}}int $*${\tt{"}} (a pointer to a 2 element array holding the real and
-                imaginary parts of the complex value).
-
-         \sstitem
-         F  - {\tt{"}}double{\tt{"}}.
-
-         \sstitem
-         I  - {\tt{"}}int{\tt{"}}.
-
-         \sstitem
-         L  - {\tt{"}}int{\tt{"}}.
-
-         \sstitem
-         S  - {\tt{"}}const char $*${\tt{"}}.
-
-         \sstitem
-         CN - {\tt{"}}const char $*${\tt{"}}.
-      }
-   }
-   \sstsynopsis{
-      void astSetFits$<$X$>$( AstFitsChan $*$this, const char $*$name, $<$X$>$type value,
-                          const char $*$comment, int overwrite )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         value
-      }{
-         The keyword value to store with the named keyword. The data type
-         of this parameter depends on $<$X$>$ as described above.
-      }
-      \sstsubsection{
-         comment
-      }{
-         A pointer to a null terminated string
-         holding a comment to associated with the keyword.
-         If a NULL pointer or
-         a blank string is supplied, then any comment included in the string
-         supplied for the
-         {\tt{"}}name{\tt{"}} parameter is used instead. If {\tt{"}}name{\tt{"}}
-         contains no comment, then any existing comment in the card being
-         over-written is retained. Otherwise, no comment is stored with
-         the card.
-      }
-      \sstsubsection{
-         overwrite
-      }{
-         If non-zero,
-         the new card formed from the supplied keyword name, value and comment
-         string over-writes the current card, and the current card is
-         incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
-         zero,
-         the new card is inserted in front of the current card and the current
-         card is left unchanged. In either case, if the current card on entry
-         points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
-         the list.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The
-         function \htmlref{astSetFitsU}{astSetFitsU}
-         can be used to indicate that no value is associated with a keyword.
-
-         \sstitem
-         The
-         function \htmlref{astSetFitsCM}{astSetFitsCM}
-         can be used to store a pure comment card (i.e. a card with a blank
-         keyword).
-
-         \sstitem
-         To assign a new value for an existing keyword within a FitsChan,
-         first find the card describing the keyword using \htmlref{astFindFits}{astFindFits}, and
-         then use one of the astSetFits$<$X$>$ family to over-write the old value.
-
-         \sstitem
-         If, on exit, there are no cards following the card written by
-         this function, then the current card is left pointing at the
-         {\tt{"}}end-of-file{\tt{"}}.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-      }
-   }
-}
-\sstroutine{
-   astSetFitsCM\sstlabel{astSetFitsCM}
-}{
-   Store a comment card in a FitsChan
-}{
-   \sstdescription{
-      This
-      function
-      stores a comment card ( i.e. a card with no keyword name or equals
-      sign) within a \htmlref{FitsChan}{FitsChan} at the current card position. The new card
-      can either over-write an existing card, or can be inserted as a new
-      card into the FitsChan.
-   }
-   \sstsynopsis{
-      void astSetFitsCM( AstFitsChan $*$this, const char $*$comment,
-                         int overwrite )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         comment
-      }{
-         A pointer to a null terminated string
-         holding the text of the comment card.
-         If a NULL pointer or
-         a blank string is supplied, then a totally blank card is produced.
-      }
-      \sstsubsection{
-         overwrite
-      }{
-         If non-zero,
-         the new card over-writes the current card, and the current card is
-         incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
-         zero,
-         the new card is inserted in front of the current card and the current
-         card is left unchanged. In either case, if the current card on entry
-         points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
-         the list.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If, on exit, there are no cards following the card written by
-         this function, then the current card is left pointing at the
-         {\tt{"}}end-of-file{\tt{"}}.
-      }
-   }
-}
-\sstroutine{
-   astSetFitsU\sstlabel{astSetFitsU}
-}{
-   Store an undefined keyword value in a FitsChan
-}{
-   \sstdescription{
-      This
-      function
-      stores an undefined value for a named keyword within
-      a \htmlref{FitsChan}{FitsChan} at the current card position. The new undefined value
-      can either over-write an existing keyword value, or can be inserted
-      as a new header card into the FitsChan.
-   }
-   \sstsynopsis{
-      void astSetFitsU( AstFitsChan $*$this, const char $*$name,
-                        const char $*$comment, int overwrite )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         comment
-      }{
-         A pointer to a null terminated string
-         holding a comment to associated with the keyword.
-         If a NULL pointer or
-         a blank string is supplied, then any comment included in the string
-         supplied for the
-         {\tt{"}}name{\tt{"}} parameter is used instead. If {\tt{"}}name{\tt{"}}
-         contains no comment, then any existing comment in the card being
-         over-written is retained. Otherwise, no comment is stored with
-         the card.
-      }
-      \sstsubsection{
-         overwrite
-      }{
-         If non-zero,
-         the new card formed from the supplied keyword name and comment
-         string over-writes the current card, and the current card is
-         incremented to refer to the next card (see the {\tt{"}}\htmlref{Card}{Card}{\tt{"}} attribute). If
-         zero,
-         the new card is inserted in front of the current card and the current
-         card is left unchanged. In either case, if the current card on entry
-         points to the {\tt{"}}end-of-file{\tt{"}}, the new card is appended to the end of
-         the list.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If, on exit, there are no cards following the card written by
-         this function, then the current card is left pointing at the
-         {\tt{"}}end-of-file{\tt{"}}.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-      }
-   }
-}
-\sstroutine{
-   astSetRefPos\sstlabel{astSetRefPos}
-}{
-   Set the reference position in a specified celestial coordinate system
-}{
-   \sstdescription{
-      This function
-      sets the reference position (see attributes \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec}) using
-      axis values (in radians) supplied within the celestial coordinate
-      system represented by a supplied \htmlref{SkyFrame}{SkyFrame}.
-   }
-   \sstsynopsis{
-      void astSetRefPos( AstSpecFrame $*$this, AstSkyFrame $*$frm, double lon,
-                         double lat )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the \htmlref{SpecFrame}{SpecFrame}.
-      }
-      \sstsubsection{
-         frm
-      }{
-         Pointer to the SkyFrame which defines the celestial coordinate
-         system in which the longitude and latitude values are supplied.
-         If NULL
-         is supplied, then the supplied longitude and latitude values are
-         assumed to be FK5 J2000 RA and Dec values.
-      }
-      \sstsubsection{
-         lon
-      }{
-         The longitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-      \sstsubsection{
-         lat
-      }{
-         The latitude of the reference point, in the coordinate system
-         represented by the supplied SkyFrame (radians).
-      }
-   }
-}
-\sstroutine{
-   astSetStatus\sstlabel{astSetStatus}
-}{
-   Set the AST error status to an explicit value
-}{
-   \sstdescription{
-      This function sets the AST error status to the value supplied.
-      It does not cause any error message to be produced and should
-      not be used as part of normal error reporting. Its purpose is
-      simply to communicate to AST that an error has occurred in some
-      other item of software.
-
-      For example, a source or sink function supplied as an argument
-      to \htmlref{astChannel}{astChannel} or \htmlref{astFitsChan}{astFitsChan} might use this to signal that an
-      input/output error has occurred. AST could then respond by
-      terminating the current read or write operation.
-   }
-   \sstsynopsis{
-      void astSetStatus( int status\_value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         status\_value
-      }{
-         The new error status value to be set.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the AST error status is set to an error value, most AST
-         functions will not execute and will simply return without
-         action. To clear the error status and restore normal behaviour,
-         use \htmlref{astClearStatus}{astClearStatus}.
-      }
-   }
-}
-\sstroutine{
-   astSetUnc\sstlabel{astSetUnc}
-}{
-   Store uncertainty information in a Region
-}{
-   \sstdescription{
-      Each \htmlref{Region}{Region} (of any class) can have an {\tt{"}}uncertainty{\tt{"}} which specifies
-      the uncertainties associated with the boundary of the Region. This
-      information is supplied in the form of a second Region. The uncertainty
-      in any point on the boundary of a Region is found by shifting the
-      associated {\tt{"}}uncertainty{\tt{"}} Region so that it is centred at the boundary
-      point being considered. The area covered by the shifted uncertainty
-      Region then represents the uncertainty in the boundary position.
-      The uncertainty is assumed to be the same for all points.
-
-      The uncertainty is usually specified when the Region is created, but
-      this
-      function
-      allows it to be changed at any time.
-   }
-   \sstsynopsis{
-      void astSetUnc( AstRegion $*$this, AstRegion $*$unc )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region which is to be assigned a new uncertainty.
-      }
-      \sstsubsection{
-         unc
-      }{
-         Pointer to the new uncertainty Region. This must be of a class for
-         which all instances are centro-symetric (e.g. \htmlref{Box}{Box}, \htmlref{Circle}{Circle}, \htmlref{Ellipse}{Ellipse},
-         etc.) or be a \htmlref{Prism}{Prism} containing centro-symetric component Regions.
-         A deep copy of the supplied Region will be taken, so subsequent
-         changes to the uncertainty Region using the supplied pointer will
-         have no effect on the Region
-         {\tt{"}}this{\tt{"}}.
-      }
-   }
-}
-\sstroutine{
-   astShiftMap\sstlabel{astShiftMap}
-}{
-   Create a ShiftMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{ShiftMap}{ShiftMap} and optionally initialises its
-      attributes.
-
-      A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
-      specified constant value.
-   }
-   \sstsynopsis{
-      AstShiftMap $*$astShiftMap( int ncoord, const double shift[],
-                                const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). The same number is applicable
-         to both input and output points.
-      }
-      \sstsubsection{
-         shift
-      }{
-         An array containing the values to be added on to the input
-         coordinates in order to create the output coordinates. A separate
-         value should be supplied for each coordinate.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new ShiftMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astShiftMap()
-      }{
-         A pointer to the new ShiftMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astShow\sstlabel{astShow}
-}{
-   Display a textual representation of an Object on standard output
-}{
-   \sstdescription{
-      This function displays a textual description of any AST \htmlref{Object}{Object}
-      on standard output. It is provided primarily as an aid to
-      debugging.
-   }
-   \sstsynopsis{
-      void astShow( AstObject $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object to be displayed.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-}
-\sstroutine{
-   astShowMesh\sstlabel{astShowMesh}
-}{
-   Display a mesh of points covering the surface of a Region
-}{
-   \sstdescription{
-      This function
-      writes a table to standard output containing the axis values at a
-      mesh of points covering the surface of the supplied \htmlref{Region}{Region}. Each row
-      of output contains a tab-separated list of axis values, one for
-      each axis in the \htmlref{Frame}{Frame} encapsulated by the Region. The number of
-      points in the mesh is determined by the \htmlref{MeshSize}{MeshSize} attribute.
-
-      The table is preceeded by a given title string, and followed by a
-      single line containing the word {\tt{"}}ENDMESH{\tt{"}}.
-   }
-   \sstsynopsis{
-      void astShowMesh( AstRegion $*$this, int format, const char $*$ttl )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Region.
-      }
-      \sstsubsection{
-         format
-      }{
-         A boolean value indicating if the displayed axis values should
-         be formatted according to the Format attribute associated with
-         the Frame's axis. Otherwise, they are displayed as simple
-         floating point values.
-      }
-      \sstsubsection{
-         ttl
-      }{
-         A title to display before displaying the first position.
-      }
-   }
-}
-\sstroutine{
-   astSimplify\sstlabel{astSimplify}
-}{
-   Simplify a Mapping
-}{
-   \sstdescription{
-      This function simplifies a \htmlref{Mapping}{Mapping} (which may be a compound
-      Mapping such as a \htmlref{CmpMap}{CmpMap}) to eliminate redundant computational
-      steps, or to merge separate steps which can be performed more
-      efficiently in a single operation.
-
-      As a simple example, a Mapping which multiplied coordinates by
-      5, and then multiplied the result by 10, could be simplified to
-      a single step which multiplied by 50. Similarly, a Mapping which
-      multiplied by 5, and then divided by 5, could be reduced to a
-      simple copying operation.
-
-      This function should typically be applied to Mappings which have
-      undergone substantial processing or have been formed by merging
-      other Mappings. It is of potential benefit, for example, in
-      reducing execution time if applied before using a Mapping to
-      transform a large number of coordinates.
-   }
-   \sstsynopsis{
-      AstMapping $*$astSimplify( AstMapping $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the original Mapping.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         This function applies to all Mappings.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         If the supplied Mapping is a FrameSet, the returned Mapping
-         will be a copy of the supplied FrameSet in which all the
-         inter-\htmlref{Frame}{Frame} Mappings have been simplified.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSimplify()
-      }{
-         A new pointer to the (possibly simplified) Mapping.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function can safely be applied even to Mappings which
-         cannot be simplified. If no simplification is possible, it
-         behaves exactly like \htmlref{astClone}{astClone} and returns a pointer to the
-         original Mapping.
-
-         \sstitem
-         The Mapping returned by this function may not be independent
-         of the original (even if simplification was possible), and
-         modifying it may therefore result in indirect modification of
-         the original. If a completely independent result is required, a
-         copy should be made using \htmlref{astCopy}{astCopy}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSkyFrame\sstlabel{astSkyFrame}
-}{
-   Create a SkyFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SkyFrame}{SkyFrame} and optionally initialises
-      its attributes.
-
-      A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
-      celestial longitude/latitude coordinate systems. The particular
-      celestial coordinate system to be represented is specified by
-      setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
-      is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
-      an \htmlref{Epoch}{Epoch}.
-
-      For each of the supported celestial coordinate systems, a SkyFrame
-      can apply an optional shift of origin to create a coordinate system
-      representing offsets within the celestial coordinate system from some
-      specified point. This offset coordinate system can also be rotated to
-      define new longitude and latitude axes. See attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}
-      and SkyRefP
-
-      All the coordinate values used by a SkyFrame are in
-      radians. These may be formatted in more conventional ways for
-      display by using \htmlref{astFormat}{astFormat}.
-   }
-   \sstsynopsis{
-      AstSkyFrame $*$astSkyFrame( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SkyFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSkyFrame()
-      }{
-         A pointer to the new SkyFrame.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         frame = astSkyFrame( {\tt{"}}{\tt{"}} );
-      }{
-         Creates a SkyFrame to describe the default ICRS celestial
-         coordinate system.
-      }
-      \sstexamplesubsection{
-         frame = astSkyFrame( {\tt{"}}System = FK5, Equinox = J2005, Digits = 10{\tt{"}} );
-      }{
-         Creates a SkyFrame to describe the FK5 celestial
-         coordinate system, with a mean Equinox of J2005.0.
-         Because especially accurate coordinates will be used,
-         additional precision (10 digits) has been requested. This will
-         be used when coordinate values are formatted for display.
-      }
-      \sstexamplesubsection{
-         frame = astSkyFrame( {\tt{"}}System = FK4, Equinox = 1955-sep-2{\tt{"}} );
-      }{
-         Creates a SkyFrame to describe the old FK4 celestial
-         coordinate system.  A default Epoch value (B1950.0) is used,
-         but the mean Equinox value is given explicitly as {\tt{"}}1955-sep-2{\tt{"}}.
-      }
-      \sstexamplesubsection{
-         frame = astSkyFrame( {\tt{"}}System = GAPPT, Epoch = \%s{\tt{"}}, date );
-      }{
-         Creates a SkyFrame to describe the Geocentric Apparent
-         celestial coordinate system. The Epoch value, which specifies
-         the date of observation, is obtained from a date/time string
-         supplied via the string pointer {\tt{"}}date{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Currently, the default celestial coordinate system is
-         ICRS. However, this default may change in future as new
-         astrometric standards evolve. The intention is to track the most
-         modern appropriate standard. For this reason, you should use the
-         default only if this is what you intend (and can tolerate any
-         associated slight change in behaviour with future versions of
-         this function). If you intend to use the ICRS system
-         indefinitely, then you should specify it explicitly using an
-         {\tt{"}}options{\tt{"}} value of {\tt{"}}System=ICRS{\tt{"}}.
-
-         \sstitem
-         Whichever celestial coordinate system is represented, it will
-         have two axes.  The first of these will be the longitude axis
-         and the second will be the latitude axis. This order can be
-         changed using \htmlref{astPermAxes}{astPermAxes} if required.
-
-         \sstitem
-         When conversion between two SkyFrames is requested (as when
-         supplying SkyFrames to \htmlref{astConvert}{astConvert}),
-         account will be taken of the nature of the celestial coordinate
-         systems they represent, together with any qualifying mean Equinox or
-         Epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} attribute will also be taken into
-         account. The results will therefore fully reflect the
-         relationship between positions on the sky measured in the two
-         systems.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSlaAdd\sstlabel{astSlaAdd}
-}{
-   Add a celestial coordinate conversion to an SlaMap
-}{
-   \sstdescription{
-      This function adds one of the standard celestial coordinate
-      system conversions provided by the SLALIB Positional Astronomy
-      Library (Starlink User Note SUN/67) to an existing \htmlref{SlaMap}{SlaMap}.
-
-      When an SlaMap is first created (using \htmlref{astSlaMap}{astSlaMap}), it simply
-      performs a unit (null) \htmlref{Mapping}{Mapping}. By using astSlaAdd (repeatedly
-      if necessary), one or more coordinate conversion steps may then
-      be added, which the SlaMap will perform in sequence. This allows
-      multi-step conversions between a variety of celestial coordinate
-      systems to be assembled out of the building blocks provided by
-      SLALIB.
-
-      Normally, if an SlaMap's \htmlref{Invert}{Invert} attribute is zero (the default),
-      then its forward transformation is performed by carrying out
-      each of the individual coordinate conversions specified by
-      astSlaAdd in the order given (i.e. with the most recently added
-      conversion applied last).
-
-      This order is reversed if the SlaMap's Invert attribute is
-      non-zero (or if the inverse transformation is requested by any
-      other means) and each individual coordinate conversion is also
-      replaced by its own inverse. This process inverts the overall
-      effect of the SlaMap. In this case, the first conversion to be
-      applied would be the inverse of the one most recently added.
-   }
-   \sstsynopsis{
-      void astSlaAdd( AstSlaMap $*$this, const char $*$cvt, const double args[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the SlaMap.
-      }
-      \sstsubsection{
-         cvt
-      }{
-         Pointer to a null-terminated string which identifies the
-         celestial coordinate conversion to be added to the
-         SlaMap. See the {\tt{"}}SLALIB Conversions{\tt{"}} section for details of
-         those available.
-      }
-      \sstsubsection{
-         args
-      }{
-         An array containing argument values for the celestial
-         coordinate conversion. The number of arguments required, and
-         hence the number of array elements used, depends on the
-         conversion specified (see the {\tt{"}}SLALIB Conversions{\tt{"}}
-         section). This array is ignored
-         and a NULL pointer may be supplied
-         if no arguments are needed.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         All coordinate values processed by an SlaMap are in
-         radians. The first coordinate is the celestial longitude and the
-         second coordinate is the celestial latitude.
-
-         \sstitem
-         When assembling a multi-stage conversion, it can sometimes be
-         difficult to determine the most economical conversion path. For
-         example, converting to the standard FK5 coordinate system as an
-         intermediate stage is often sensible in formulating the problem,
-         but may introduce unnecessary extra conversion steps. A solution
-         to this is to include all the steps which are (logically)
-         necessary, but then to use \htmlref{astSimplify}{astSimplify} to simplify the resulting
-         SlaMap. The simplification process will eliminate any steps
-         which turn out not to be needed.
-
-         \sstitem
-         This function does not check to ensure that the sequence of
-         coordinate conversions added to an SlaMap is physically
-         meaningful.
-      }
-   }
-   \sstdiytopic{
-      SLALIB Conversions
-   }{
-      The following strings (which are case-insensitive) may be supplied
-      via the {\tt{"}}cvt{\tt{"}} parameter to indicate which celestial coordinate
-      conversion is to be added to the SlaMap. Each string is derived
-      from the name of the SLALIB routine that performs the
-      conversion and the relevant documentation (SUN/67) should be
-      consulted for details.  Where arguments are needed by
-      the conversion, they are listed in parentheses. Values for
-      these arguments should be given, via the {\tt{"}}args{\tt{"}} array, in the
-      order indicated. The argument names match the corresponding
-      SLALIB routine arguments and their values should be given using
-      exactly the same units, time scale, calendar, etc. as described
-      in SUN/67:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}ADDET{\tt{"}} (EQ): Add E-terms of aberration.
-
-         \sstitem
-         {\tt{"}}SUBET{\tt{"}} (EQ): Subtract E-terms of aberration.
-
-         \sstitem
-         {\tt{"}}PREBN{\tt{"}} (BEP0,BEP1): Apply Bessel-Newcomb pre-IAU 1976 (FK4)
-         precession model.
-
-         \sstitem
-         {\tt{"}}PREC{\tt{"}} (EP0,EP1): Apply IAU 1975 (FK5) precession model.
-
-         \sstitem
-         {\tt{"}}FK45Z{\tt{"}} (BEPOCH): Convert FK4 to FK5 (no proper motion or parallax).
-
-         \sstitem
-         {\tt{"}}FK54Z{\tt{"}} (BEPOCH): Convert FK5 to FK4 (no proper motion or parallax).
-
-         \sstitem
-         {\tt{"}}AMP{\tt{"}} (DATE,EQ): Convert geocentric apparent to mean place.
-
-         \sstitem
-         {\tt{"}}MAP{\tt{"}} (EQ,DATE): Convert mean place to geocentric apparent.
-
-         \sstitem
-         {\tt{"}}ECLEQ{\tt{"}} (DATE): Convert ecliptic coordinates to FK5 J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQECL{\tt{"}} (DATE): Convert equatorial FK5 J2000.0 to ecliptic coordinates.
-
-         \sstitem
-         {\tt{"}}GALEQ{\tt{"}}: Convert galactic coordinates to FK5 J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQGAL{\tt{"}}: Convert FK5 J2000.0 equatorial to galactic coordinates.
-
-         \sstitem
-         {\tt{"}}HFK5Z{\tt{"}} (JEPOCH): Convert ICRS coordinates to FK5 J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}FK5HZ{\tt{"}} (JEPOCH): Convert FK5 J2000.0 equatorial coordinates to ICRS.
-
-         \sstitem
-         {\tt{"}}GALSUP{\tt{"}}: Convert galactic to supergalactic coordinates.
-
-         \sstitem
-         {\tt{"}}SUPGAL{\tt{"}}: Convert supergalactic coordinates to galactic.
-
-         \sstitem
-         {\tt{"}}J2000H{\tt{"}}: Convert dynamical J2000.0 to ICRS.
-
-         \sstitem
-         {\tt{"}}HJ2000{\tt{"}}: Convert ICRS to dynamical J2000.0.
-
-         \sstitem
-         {\tt{"}}R2H{\tt{"}} (LAST): Convert RA to Hour Angle.
-
-         \sstitem
-         {\tt{"}}H2R{\tt{"}} (LAST): Convert Hour Angle to RA.
-
-      }
-      For example, to use the {\tt{"}}ADDET{\tt{"}} conversion, which takes a single
-      argument EQ, you should consult the documentation for the SLALIB
-      routine SLA\_ADDET. This describes the conversion in detail and
-      shows that EQ is the Besselian epoch of the mean equator and
-      equinox.
-      This value should then be supplied to astSlaAdd in args[0].
-
-      In addition the following strings may be supplied for more complex
-      conversions which do not correspond to any one single SLALIB routine
-      (DIURAB is the magnitude of the diurnal aberration vector in units
-      of {\tt{"}}day/(2.PI){\tt{"}}, DATE is the Modified Julian Date of the observation,
-      and (OBSX,OBSY,OBZ) are the Heliocentric-Aries-Ecliptic cartesian
-      coordinates, in metres, of the observer):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}HPCEQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Cartesian coordinates to J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQHPC{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Cartesian.
-
-         \sstitem
-         {\tt{"}}HPREQ{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert Helioprojective-Radial coordinates to J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQHPR{\tt{"}} (DATE,OBSX,OBSY,OBSZ): Convert J2000.0 equatorial coordinates to Helioprojective-Radial.
-
-         \sstitem
-         {\tt{"}}HEEQ{\tt{"}} (DATE): Convert helio-ecliptic coordinates to J2000.0 equatorial.
-
-         \sstitem
-         {\tt{"}}EQHE{\tt{"}} (DATE): Convert J2000.0 equatorial coordinates to helio-ecliptic.
-
-         \sstitem
-         {\tt{"}}H2E{\tt{"}} (LAT,DIRUAB): Convert horizon coordinates to equatorial.
-
-         \sstitem
-         {\tt{"}}E2H{\tt{"}} (LAT,DIURAB): Convert equatorial coordinates to horizon.
-
-      }
-      Note, the {\tt{"}}H2E{\tt{"}} and {\tt{"}}E2H{\tt{"}} conversions convert between topocentric
-      horizon coordinates (azimuth,elevation), and apparent local equatorial
-      coordinates (hour angle,declination). Thus, the effects of diurnal
-      aberration are taken into account in the conversions but the effects
-      of atmospheric refraction are not.
-   }
-}
-\sstroutine{
-   astSlaMap\sstlabel{astSlaMap}
-}{
-   Create an SlaMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SlaMap}{SlaMap} and optionally initialises
-      its attributes.
-
-      An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard celestial
-      (longitude, latitude) coordinate systems.
-
-      When an SlaMap is first created, it simply performs a unit
-      (null) Mapping on a pair of coordinates. Using the \htmlref{astSlaAdd}{astSlaAdd}
-      function, a series of coordinate conversion steps may then be
-      added, selected from those provided by the SLALIB Positional
-      Astronomy Library (Starlink User Note SUN/67). This allows
-      multi-step conversions between a variety of celestial coordinate
-      systems to be assembled out of the building blocks provided by
-      SLALIB.
-
-      For details of the individual coordinate conversions available,
-      see the description of the astSlaAdd function.
-   }
-   \sstsynopsis{
-      AstSlaMap $*$astSlaMap( int flags, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         flags
-      }{
-         This parameter is reserved for future use and should currently
-         always be set to zero.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SlaMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSlaMap()
-      }{
-         A pointer to the new SlaMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes (number of input and output
-         coordinates) for an SlaMap are both equal to 2. The first
-         coordinate is the celestial longitude and the second coordinate
-         is the celestial latitude. All coordinate values are in radians.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSpecAdd\sstlabel{astSpecAdd}
-}{
-   Add a spectral coordinate conversion to a SpecMap
-}{
-   \sstdescription{
-      This function adds one of the standard spectral coordinate
-      system conversions listed below to an existing \htmlref{SpecMap}{SpecMap}.
-
-      When a SpecMap is first created (using \htmlref{astSpecMap}{astSpecMap}), it simply
-      performs a unit (null) \htmlref{Mapping}{Mapping}. By using astSpecAdd (repeatedly
-      if necessary), one or more coordinate conversion steps may then
-      be added, which the SpecMap will perform in sequence. This allows
-      multi-step conversions between a variety of spectral coordinate
-      systems to be assembled out of the building blocks provided by
-      this class.
-
-      Normally, if a SpecMap's \htmlref{Invert}{Invert} attribute is zero (the default),
-      then its forward transformation is performed by carrying out
-      each of the individual coordinate conversions specified by
-      astSpecAdd in the order given (i.e. with the most recently added
-      conversion applied last).
-
-      This order is reversed if the SpecMap's Invert attribute is
-      non-zero (or if the inverse transformation is requested by any
-      other means) and each individual coordinate conversion is also
-      replaced by its own inverse. This process inverts the overall
-      effect of the SpecMap. In this case, the first conversion to be
-      applied would be the inverse of the one most recently added.
-   }
-   \sstsynopsis{
-      void astSpecAdd( AstSpecMap $*$this, const char $*$cvt, const double args[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the SpecMap.
-      }
-      \sstsubsection{
-         cvt
-      }{
-         Pointer to a null-terminated string which identifies the
-         spectral coordinate conversion to be added to the
-         SpecMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
-         those available.
-      }
-      \sstsubsection{
-         args
-      }{
-         An array containing argument values for the spectral
-         coordinate conversion. The number of arguments required, and
-         hence the number of array elements used, depends on the
-         conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
-         section). This array is ignored
-         and a NULL pointer may be supplied
-         if no arguments are needed.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When assembling a multi-stage conversion, it can sometimes be
-         difficult to determine the most economical conversion path. For
-         example, when converting between reference frames, converting first
-         to the heliographic reference frame as an intermediate stage is often
-         sensible in formulating the problem, but may introduce unnecessary
-         extra conversion steps. A solution to this is to include all the steps
-         which are (logically) necessary, but then to use
-         \htmlref{astSimplify}{astSimplify} to simplify the resulting
-         SpecMap. The simplification process will eliminate any steps
-         which turn out not to be needed.
-
-         \sstitem
-         This function does not check to ensure that the sequence of
-         coordinate conversions added to a SpecMap is physically
-         meaningful.
-      }
-   }
-   \sstdiytopic{
-      Available Conversions
-   }{
-      The following strings (which are case-insensitive) may be supplied
-      via the {\tt{"}}cvt{\tt{"}} parameter to indicate which spectral coordinate
-      conversion is to be added to the SpecMap. Where arguments are needed by
-      the conversion, they are listed in parentheses. Values for
-      these arguments should be given, via the {\tt{"}}args{\tt{"}} array, in the
-      order indicated. Units and argument names are described at the end of
-      the list of conversions.
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}FRTOVL{\tt{"}} (RF): Convert frequency to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOFR{\tt{"}} (RF): Convert relativistic velocity to Frequency.
-
-         \sstitem
-         {\tt{"}}ENTOFR{\tt{"}}: Convert energy to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOEN{\tt{"}}: Convert frequency to energy.
-
-         \sstitem
-         {\tt{"}}WNTOFR{\tt{"}}: Convert wave number to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOWN{\tt{"}}: Convert frequency to wave number.
-
-         \sstitem
-         {\tt{"}}WVTOFR{\tt{"}}: Convert wavelength (vacuum) to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOWV{\tt{"}}: Convert frequency to wavelength (vacuum).
-
-         \sstitem
-         {\tt{"}}AWTOFR{\tt{"}}: Convert wavelength (air) to frequency.
-
-         \sstitem
-         {\tt{"}}FRTOAW{\tt{"}}: Convert frequency to wavelength (air).
-
-         \sstitem
-         {\tt{"}}VRTOVL{\tt{"}}: Convert radio to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOVR{\tt{"}}: Convert relativistic to radio velocity.
-
-         \sstitem
-         {\tt{"}}VOTOVL{\tt{"}}: Convert optical to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOVO{\tt{"}}: Convert relativistic to optical velocity.
-
-         \sstitem
-         {\tt{"}}ZOTOVL{\tt{"}}: Convert redshift to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOZO{\tt{"}}: Convert relativistic velocity to redshift.
-
-         \sstitem
-         {\tt{"}}BTTOVL{\tt{"}}: Convert beta factor to relativistic velocity.
-
-         \sstitem
-         {\tt{"}}VLTOBT{\tt{"}}: Convert relativistic velocity to beta factor.
-
-         \sstitem
-         {\tt{"}}USF2HL{\tt{"}} (VOFF,RA,DEC): Convert frequency from a user-defined
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2US{\tt{"}} (VOFF,RA,DEC): Convert frequency from heliocentric
-         reference frame to user-defined.
-
-         \sstitem
-         {\tt{"}}TPF2HL{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
-         topocentric reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2TP{\tt{"}} (OBSLON,OBSLAT,OBSALT,EPOCH,RA,DEC): Convert frequency from
-         heliocentric reference frame to topocentric.
-
-         \sstitem
-         {\tt{"}}GEF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from geocentric
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2GE{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
-         heliocentric reference frame to geocentric.
-
-         \sstitem
-         {\tt{"}}BYF2HL{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
-         barycentric reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2BY{\tt{"}} (EPOCH,RA,DEC): Convert frequency from
-         heliocentric reference frame to barycentric.
-
-         \sstitem
-         {\tt{"}}LKF2HL{\tt{"}} (RA,DEC): Convert frequency from kinematic LSR
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2LK{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to kinematic LSR.
-
-         \sstitem
-         {\tt{"}}LDF2HL{\tt{"}} (RA,DEC): Convert frequency from dynamical LSR
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2LD{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to dynamical LSR.
-
-         \sstitem
-         {\tt{"}}LGF2HL{\tt{"}} (RA,DEC): Convert frequency from local group
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2LG{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to local group.
-
-         \sstitem
-         {\tt{"}}GLF2HL{\tt{"}} (RA,DEC): Convert frequency from galactic
-         reference frame to heliocentric.
-
-         \sstitem
-         {\tt{"}}HLF2GL{\tt{"}} (RA,DEC): Convert frequency from heliocentric
-         reference frame to galactic.
-
-      }
-      The units for the values processed by the above conversions are as
-      follows:
-
-      \sstitemlist{
-
-         \sstitem
-         all velocities: metres per second (positive if the source receeds from
-           the observer).
-
-         \sstitem
-         frequency: Hertz.
-
-         \sstitem
-         all wavelengths: metres.
-
-         \sstitem
-         energy: Joules.
-
-         \sstitem
-         wave number: cycles per metre.
-
-      }
-      The arguments used in the above conversions are as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         RF: Rest frequency (Hz).
-
-         \sstitem
-         OBSALT: Geodetic altitude of observer (IAU 1975, metres).
-
-         \sstitem
-         OBSLAT: Geodetic latitude of observer (IAU 1975, radians).
-
-         \sstitem
-         OBSLON: Longitude of observer (radians - positive eastwards).
-
-         \sstitem
-         EPOCH: \htmlref{Epoch}{Epoch} of observation (UT1 expressed as a Modified Julian Date).
-
-         \sstitem
-         RA: Right Ascension of source (radians, FK5 J2000).
-
-         \sstitem
-         DEC: Declination of source (radians, FK5 J2000).
-
-         \sstitem
-         VOFF: Velocity of the user-defined reference frame, towards the
-         position given by RA and DEC, measured in the heliocentric
-         reference frame.
-
-      }
-      If the SpecMap is 3-dimensional, source positions are provided by the
-      values supplied to inputs 2 and 3 of the SpecMap (which are simply
-      copied to outputs 2 and 3). Note, usable values are still required
-      for the RA and DEC arguments in order to define the {\tt{"}}user-defined{\tt{"}}
-      reference frame used by USF2HL and HLF2US. However, AST\_\_BAD can be
-      supplied for RA and DEC if the user-defined reference frame is not
-      required.
-   }
-}
-\sstroutine{
-   astSpecFluxFrame\sstlabel{astSpecFluxFrame}
-}{
-   Create a SpecFluxFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SpecFluxFrame}{SpecFluxFrame} and optionally initialises
-      its attributes.
-
-      A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
-      2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
-      to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
-      spectral position and the second axis represents flux.
-   }
-   \sstsynopsis{
-      AstSpecFluxFrame $*$astSpecFluxFrame( AstSpecFrame $*$frame1, AstFluxFrame $*$frame2,
-                                          const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         frame1
-      }{
-         Pointer to the SpecFrame. This will form the first axis in the
-         new SpecFluxFrame.
-      }
-      \sstsubsection{
-         frame2
-      }{
-         Pointer to the FluxFrame. This will form the second axis in the
-         new SpecFluxFrame. The {\tt{"}}\htmlref{SpecVal}{SpecVal}{\tt{"}} attribute of this FluxFrame is
-         not used by the SpecFluxFrame class and so may be set to AST\_\_BAD
-         when the FluxFrame is created.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SpecFluxFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSpecFluxFrame()
-      }{
-         A pointer to the new SpecFluxFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The supplied Frame pointers are stored directly, rather than
-         being used to create deep copies of the supplied Frames. This means
-         that any subsequent changes made to the Frames via the supplied
-         pointers will result in equivalent changes being visible in the
-         SpecFluxFrame.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astSpecFrame\sstlabel{astSpecFrame}
-}{
-   Create a SpecFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SpecFrame}{SpecFrame} and optionally initialises
-      its attributes.
-
-      A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions within
-      an electro-magnetic spectrum. The particular coordinate system to be
-      used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
-      default is wavelength) qualified, as necessary, by other attributes
-      such as the rest frequency, the standard of rest, the epoch of
-      observation, etc (see the description of the System attribute for
-      details).
-
-      By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
-      to represent offsets from a given spectral position, rather than absolute
-   }
-   \sstsynopsis{
-      AstSpecFrame $*$astSpecFrame( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SpecFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSpecFrame()
-      }{
-         A pointer to the new SpecFrame.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         frame = astSpecFrame( {\tt{"}}{\tt{"}} );
-      }{
-         Creates a SpecFrame to describe the default wavelength spectral
-         coordinate system. The \htmlref{RestFreq}{RestFreq} attribute (rest frequency) is
-         unspecified, so it will not be possible to align this SpecFrame
-         with another SpecFrame on the basis of a velocity-based system. The
-         standard of rest is also unspecified. This means that alignment
-         will be possible with other SpecFrames, but no correction will be
-         made for Doppler shift caused by change of rest frame during the
-         alignment.
-      }
-      \sstexamplesubsection{
-         frame = astSpecFrame( {\tt{"}}System=VELO, RestFreq=1.0E15, \htmlref{StdOfRest}{StdOfRest}=LSRK{\tt{"}} );
-      }{
-         Creates a SpecFrame describing a apparent radial velocity ({\tt{"}}VELO{\tt{"}}) axis
-         with rest frequency 1.0E15 Hz (about 3000 Angstroms), measured
-         in the kinematic Local Standard of Rest ({\tt{"}}LSRK{\tt{"}}). Since the
-         source position has not been specified (using attributes \htmlref{RefRA}{RefRA} and
-         \htmlref{RefDec}{RefDec}), it will only be possible to align this SpecFrame with
-         other SpecFrames which are also measured in the LSRK standard of
-         rest.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When conversion between two SpecFrames is requested (as when
-         supplying SpecFrames to \htmlref{astConvert}{astConvert}),
-         account will be taken of the nature of the spectral coordinate systems
-         they represent, together with any qualifying rest frequency, standard
-         of rest, epoch values, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignStdOfRest}{AlignStdOfRest}
-         attributes will also be taken into account. The results will therefore
-         fully reflect the relationship between positions measured in the two
-         systems. In addition, any difference in the Unit attributes of the two
-         systems will also be taken into account.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSpecMap\sstlabel{astSpecMap}
-}{
-   Create a SpecMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SpecMap}{SpecMap} and optionally initialises
-      its attributes.
-
-      An SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard spectral
-      coordinate systems. This includes conversions between frequency,
-      wavelength, and various forms of velocity, as well as conversions
-      between different standards of rest.
-
-      When a SpecMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{astSpecAdd}{astSpecAdd} function,
-      a series of coordinate conversion steps may then be added, selected
-      from the list of supported conversions. This allows multi-step
-      conversions between a variety of spectral coordinate systems to
-      be assembled out of the building blocks provided by this class.
-
-      For details of the individual coordinate conversions available,
-      see the description of the astSpecAdd function.
-
-      Conversions are available to transform between standards of rest.
-      Such conversions need to know the source position as an RA and DEC.
-      This information can be supplied in the form of parameters for
-      the relevant conversions, in which case the SpecMap is 1-dimensional,
-      simply transforming the spectral axis values. This means that the
-      same source position will always be used by the SpecMap. However, this
-      may not be appropriate for an accurate description of a 3-D spectral
-      cube, where changes of spatial position can produce significant
-      changes in the Doppler shift introduced when transforming between
-      standards of rest. For this situation, a 3-dimensional SpecMap can
-      be created in which axes 2 and 3 correspond to the source RA and DEC
-      The SpecMap simply copies values for axes 2 and 3 from input to
-      output).
-   }
-   \sstsynopsis{
-      AstSpecMap $*$astSpecMap( int nin, int flags, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         nin
-      }{
-         The number of inputs to the Mapping (this will also equal the
-         number of outputs). This value must be either 1 or 3. In either
-         case, the first input and output correspoindis the spectral axis.
-         For a 3-axis SpecMap, the second and third axes give the RA and
-         DEC (J2000 FK5) of the source. This positional information is
-         used by conversions which transform between standards of rest,
-         and replaces the {\tt{"}}RA{\tt{"}} and {\tt{"}}DEC{\tt{"}} arguments for the individual
-         conversions listed in description of the {\tt{"}}SpecAdd{\tt{"}}
-         function.
-      }
-      \sstsubsection{
-         flags
-      }{
-         This parameter is reserved for future use and should currently
-         always be set to zero.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SpecMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSpecMap()
-      }{
-         A pointer to the new SpecMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The nature and units of the coordinate values supplied for the
-         first input (i.e. the spectral input) of a SpecMap must be appropriate
-         to the first conversion step applied by the SpecMap. For instance, if
-         the first conversion step is {\tt{"}}FRTOVL{\tt{"}} (frequency to relativistic
-         velocity), then the coordinate values for the first input should
-         be frequency in units of Hz. Similarly, the nature and units of the
-         coordinate values returned by a SpecMap will be determined by the
-         last conversion step applied by the SpecMap. For instance, if the
-         last conversion step is {\tt{"}}VLTOVO{\tt{"}} (relativistic velocity to optical
-         velocity), then the coordinate values for the first output will be optical
-         velocity in units of metres per second. See the description of the
-         astSpecAdd function for the units expected and returned by each
-         conversion.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astSphMap\sstlabel{astSphMap}
-}{
-   Create a SphMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SphMap}{SphMap} and optionally initialises
-      its attributes.
-
-      A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
-      3-dimensional Cartesian coordinate system into a 2-dimensional
-      spherical coordinate system (longitude and latitude on a unit
-      sphere centred at the origin). It works by regarding the input
-      coordinates as position vectors and finding their intersection
-      with the sphere surface. The inverse transformation always
-      produces points which are a unit distance from the origin
-      (i.e. unit vectors).
-   }
-   \sstsynopsis{
-      AstSphMap $*$astSphMap( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SphMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSphMap()
-      }{
-         A pointer to the new SphMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The spherical coordinates are longitude (positive
-         anti-clockwise looking from the positive latitude pole) and
-         latitude. The Cartesian coordinates are right-handed, with the x
-         axis (axis 1) at zero longitude and latitude, and the z axis
-         (axis 3) at the positive latitude pole.
-
-         \sstitem
-         At either pole, the longitude is set to the value of the
-         \htmlref{PolarLong}{PolarLong} attribute.
-
-         \sstitem
-         If the Cartesian coordinates are all zero, then the longitude
-         and latitude are set to the value AST\_\_BAD.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astStatus\sstlabel{astStatus}
-}{
-   Obtain the current AST error status value
-}{
-   \sstdescription{
-      This function returns the current value of the AST error status.
-   }
-   \sstsynopsis{
-      int astStatus
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStatus
-      }{
-         The AST error status value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the AST error status is set to an error value (after an
-         error), most AST functions will not execute and will simply
-         return without action. To clear the error status and restore
-         normal behaviour, use \htmlref{astClearStatus}{astClearStatus}.
-      }
-   }
-}
-\sstroutine{
-   astStcCatalogEntryLocation\sstlabel{astStcCatalogEntryLocation}
-}{
-   Create a StcCatalogEntryLocation
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation} and optionally initialises its
-      attributes.
-
-      The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstsynopsis{
-      AstStcCatalogEntryLocation $*$astStcCatalogEntryLocation( AstRegion $*$region,
-                   int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         region
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         ncoords
-      }{
-         The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         coords
-      }{
-         Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         {\tt{"}}region{\tt{"}}.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by {\tt{"}}region{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new StcCatalogEntryLocation. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStcCatalogEntryLocation()
-      }{
-         A pointer to the new StcCatalogEntryLocation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astStcObsDataLocation\sstlabel{astStcObsDataLocation}
-}{
-   Create a StcObsDataLocation
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcObsDataLocation}{StcObsDataLocation} and optionally initialises its
-      attributes.
-
-      The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstsynopsis{
-      AstStcObsDataLocation $*$astStcObsDataLocation( AstRegion $*$region,
-                   int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         region
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         ncoords
-      }{
-         The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         coords
-      }{
-         Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         {\tt{"}}region{\tt{"}}.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by {\tt{"}}region{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new StcObsDataLocation. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStcObsDataLocation()
-      }{
-         A pointer to the new StcObsDataLocation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astStcResourceProfile\sstlabel{astStcResourceProfile}
-}{
-   Create a StcResourceProfile
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcResourceProfile}{StcResourceProfile} and optionally initialises its
-      attributes.
-
-      The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstsynopsis{
-      AstStcResourceProfile $*$astStcResourceProfile( AstRegion $*$region,
-                   int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         region
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         ncoords
-      }{
-         The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         coords
-      }{
-         Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         {\tt{"}}region{\tt{"}}.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by {\tt{"}}region{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new StcResourceProfile. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStcResourceProfile()
-      }{
-         A pointer to the new StcResourceProfile.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astStcSearchLocation\sstlabel{astStcSearchLocation}
-}{
-   Create a StcSearchLocation
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcSearchLocation}{StcSearchLocation} and optionally initialises its
-      attributes.
-
-      The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of a VO query.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstsynopsis{
-      AstStcResourceProfile $*$astStcSearchLocation( AstRegion $*$region,
-                    int ncoords, AstKeyMap $*$coords[], const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         region
-      }{
-         Pointer to the encapsulated \htmlref{Region}{Region}.
-      }
-      \sstsubsection{
-         ncoords
-      }{
-         The length of the {\tt{"}}coords{\tt{"}} array. Supply zero if {\tt{"}}coords{\tt{"}} is NULL.
-      }
-      \sstsubsection{
-         coords
-      }{
-         Pointer to an array holding {\tt{"}}ncoords{\tt{"}} AstKeyMap pointers (if {\tt{"}}ncoords{\tt{"}}
-         is zero, the supplied value is ignored). Each supplied \htmlref{KeyMap}{KeyMap}
-         describes the contents of a single STC $<$AstroCoords$>$ element, and
-         should have elements with keys given by constants AST\_\_STCNAME,
-         AST\_\_STCVALUE, AST\_\_STCERROR, AST\_\_STCRES, AST\_\_STCSIZE,
-         AST\_\_STCPIXSZ. Any of these elements may be omitted, but no other
-         elements should be included. If supplied, the AST\_\_STCNAME element
-         should be a vector of character string pointers holding the {\tt{"}}Name{\tt{"}}
-         item for each axis in the coordinate system represented by
-         {\tt{"}}region{\tt{"}}.
-         Any other supplied elements should be scalar elements, each  holding
-         a pointer to a Region describing the associated item of ancillary
-         information (error, resolution, size, pixel size or value). These
-         Regions should describe a volume within the coordinate system
-         represented by {\tt{"}}region{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new StcSearchLocation. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStcSearchLocation()
-      }{
-         A pointer to the new StcSearchLocation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A deep copy is taken of the supplied Region. This means that
-         any subsequent changes made to the encapsulated Region using the
-         supplied pointer will have no effect on the Stc.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astStcsChan\sstlabel{astStcsChan}
-}{
-   Create an StcsChan
-}{
-   \sstdescription{
-      This function creates a new \htmlref{StcsChan}{StcsChan} and optionally initialises
-      its attributes.
-
-      A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
-      I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
-      \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
-      STC-S description of that Object, and reading from an StcsChan will
-      create a new Object from its STC-S description.
-
-      Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
-      by reading and writing the resulting text. These functions
-      should perform any conversions needed between external character
-      encodings and the internal ASCII encoding. If no such functions
-      are supplied, a Channel will read from standard input and write
-      to standard output.
-   }
-   \sstsynopsis{
-      AstStcsChan $*$astStcsChan( const char $*$($*$ source)( void ),
-                                void ($*$ sink)( const char $*$ ),
-                                const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         source
-      }{
-         Pointer to a source function that takes no arguments and
-         returns a pointer to a null-terminated string.  This function
-         will be used by the StcsChan to obtain lines of input text. On
-         each invocation, it should return a pointer to the next input
-         line read from some external data store, and a NULL pointer
-         when there are no more lines to read.
-
-         If {\tt{"}}source{\tt{"}} is NULL, the Channel will read from standard
-         input instead.
-      }
-      \sstsubsection{
-         sink
-      }{
-         Pointer to a sink function that takes a pointer to a
-         null-terminated string as an argument and returns void.  This
-         function will be used by the StcsChan to deliver lines of
-         output text. On each invocation, it should deliver the
-         contents of the string supplied to some external data store.
-
-         If {\tt{"}}sink{\tt{"}} is NULL, the StcsChan will write to standard output
-         instead.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new StcsChan. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStcsChan()
-      }{
-         A pointer to the new StcsChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the external data source or sink uses a character encoding
-         other than ASCII, the supplied source and sink functions should
-         translate between the external character encoding and the internal
-         ASCII encoding used by AST.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astStripEscapes\sstlabel{astStripEscapes}
-}{
-   Remove AST escape sequences from a string
-}{
-   \sstdescription{
-      This function removes AST escape sequences from a supplied string,
-      returning the resulting text as the function value. The behaviour
-      of this function can be controlled by invoking the
-      \htmlref{astEscapes}{astEscapes} function,
-      which can be used to supress or enable the removal of escape
-      sequences by this function.
-
-      AST escape sequences are used by the \htmlref{Plot}{Plot} class to modify the
-      appearance and position of sub-strings within a plotted text string.
-      See the {\tt{"}}\htmlref{Escape}{Escape}{\tt{"}} attribute for further information.
-   }
-   \sstsynopsis{
-      const char $*$astStripEscapes( const char $*$text )
-   }
-   \sstparameters{
-      \sstsubsection{
-         text
-      }{
-         Pointer to the string to be checked.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astStripEscapes()
-      }{
-         Pointer to the modified string. If no escape sequences were found
-         in the supplied string, then a copy of the supplied pointer is
-         returned. Otherwise, the pointer will point to a static buffer
-         holding the modified text. This text will be over-written by
-         subsequent invocations of this function. If the astEscapes function
-         has been called indicating that escape sequences should not be
-         stripped, then the supplied string is returned without change.
-      }
-   }
-}
-\sstroutine{
-   astSwitchMap\sstlabel{astSwitchMap}
-}{
-   Create a SwitchMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{SwitchMap}{SwitchMap} and optionally initialises
-      its attributes.
-
-      A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
-      Mappings, each of which is used to transform positions within a
-      particular region of the input or output coordinate system of the
-      SwitchMap.
-
-      A SwitchMap can encapsulate any number of Mappings, but they must
-      all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
-      same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
-      inherits these same values for its Nin and Nout attributes. Each of
-      these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
-      referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
-      positions between the input and output coordinate space of the entire
-      SwitchMap, but only one Mapping will be used to transform any given
-      position. The selection of the appropriate route Mapping to use with
-      any given input position is made by another Mapping, called the
-      {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
-      Mappings in addition to its route Mappings; one for use with the
-      SwitchMap's forward transformation (called the {\tt{"}}forward selector
-      Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
-      (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
-      must have the same number of inputs as the route Mappings, but
-      should have only one output. Likewise, the inverse selector Mapping
-      must have the same number of outputs as the route Mappings, but
-      should have only one input.
-
-      When the SwitchMap is used to transform a position in the forward
-      direction (from input to output), each supplied input position is
-      first transformed by the forward transformation of the forward selector
-      Mapping. This produces a single output value for each input position
-      referred to as the selector value. The nearest integer to the selector
-      value is found, and is used to index the array of route Mappings (the
-      first supplied route Mapping has index 1, the second route Mapping has
-      index 2, etc). If the nearest integer to the selector value is less
-      than 1 or greater than the number of route Mappings, then the SwitchMap
-      output position is set to a value of AST\_\_BAD on every axis. Otherwise,
-      the forward transformation of the selected route Mapping is used to
-      transform the supplied input position to produce the SwitchMap output
-      position.
-
-      When the SwitchMap is used to transform a position in the inverse
-      direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
-      is first transformed by the inverse transformation of the inverse
-      selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
-      position. Again, the nearest integer to the selector value is found,
-      and is used to index the array of route Mappings. If this selector
-      index value is within the bounds of the array of route Mappings, then
-      the inverse transformation of the selected route Mapping is used to
-      transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
-      {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
-      of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
-      set to a value of AST\_\_BAD on every axis.
-
-      In practice, appropriate selector Mappings should be chosen to
-      associate a different route Mapping with each region of coordinate
-      space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
-      appropriate for this purpose.
-
-      If a compound Mapping contains a SwitchMap in series with its own
-      inverse, the combination of the two adjacent SwitchMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{astSimplify}{astSimplify}.
-   }
-   \sstsynopsis{
-      AstSwitchMap $*$astSwitchMap( AstMapping $*$fsmap, AstMapping $*$ismap,
-                                  int nroute, AstMapping $*$routemaps[],
-                                  const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         fsmap
-      }{
-         Pointer to the forward selector Mapping. This must have a
-         defined forward transformation, but need not have a defined
-         inverse transformation. It must have one output, and the number of
-         inputs must match the number of inputs of each of the supplied
-         route Mappings.
-         NULL
-         may be supplied, in which case the SwitchMap will have an undefined
-         forward Mapping.
-      }
-      \sstsubsection{
-         ismap
-      }{
-         Pointer to the inverse selector Mapping. This must have a
-         defined inverse transformation, but need not have a defined
-         forward transformation. It must have one input, and the number of
-         outputs must match the number of outputs of each of the supplied
-         route Mappings.
-         NULL
-         may be supplied, in which case the SwitchMap will have an undefined
-         inverse Mapping.
-      }
-      \sstsubsection{
-         nroute
-      }{
-         The number of supplied route Mappings.
-      }
-      \sstsubsection{
-         routemaps
-      }{
-         An array of pointers to the route Mappings. All the supplied
-         route Mappings must have common values for the Nin and Nout
-         attributes, and these values define the number of inputs and
-         outputs of the SwitchMap.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new SwitchMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astSwitchMap()
-      }{
-         A pointer to the new SwitchMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         astSwitchMap (the new SwitchMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a SwitchMap containing a copy of its
-         component Mappings is required, then a copy of the SwitchMap should
-         be made using \htmlref{astCopy}{astCopy}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astTest\sstlabel{astTest}
-}{
-   Test if an Object attribute value is set
-}{
-   \sstdescription{
-      This function returns a boolean result (0 or 1) to indicate
-      whether a value has been explicitly set for one of an \htmlref{Object}{Object}'s
-      attributes.
-   }
-   \sstsynopsis{
-      int astTest( AstObject $*$this, const char $*$attrib )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object.
-      }
-      \sstsubsection{
-         attrib
-      }{
-         Pointer to a null-terminated character string containing
-         the name of the attribute to be tested.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astTest()
-      }{
-         One if a value has previously been explicitly set for the attribute
-         (and hasn't been cleared), otherwise zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Attribute names are not case sensitive and may be surrounded
-         by white space.
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any reason.
-
-         \sstitem
-         A value of zero will also be returned if this function is used
-         to test a read-only attribute, although no error will result.
-      }
-   }
-}
-\sstroutine{
-   astTestFits\sstlabel{astTestFits}
-}{
-   See if a named keyword has a defined value in a FitsChan
-}{
-   \sstdescription{
-      This function serches for a named keyword in a \htmlref{FitsChan}{FitsChan}. If found,
-      and if the keyword has a value associated with it, a
-      non-zero
-      value is returned. If the keyword is not found, or if it does not
-      have an associated value, a
-      zero
-      value is returned.
-   }
-   \sstsynopsis{
-      int astTestFits( AstFitsChan $*$this, const char $*$name, int $*$there )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the FitsChan.
-      }
-      \sstsubsection{
-         name
-      }{
-         Pointer to a null-terminated character string
-         containing the FITS keyword name. This may be a complete FITS
-         header card, in which case the keyword to use is extracted from
-         it. No more than 80 characters are read from this string.
-      }
-      \sstsubsection{
-         there
-      }{
-         Pointer to an integer which will be returned holding a non-zero
-         value if the keyword was found in the header, and zero otherwise.
-         This parameter allows a distinction to be made between the case
-         where a keyword is not present, and the case where a keyword is
-         present but has no associated value.
-         A NULL pointer may be supplied if this information is not
-         required.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astTestFits()
-      }{
-         A value of zero
-         is returned if the keyword was not found in the FitsChan or has
-         no associated value. Otherwise, a value of
-         one
-         is returned.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The current card is left unchanged by this function.
-
-         \sstitem
-         The card following the current card is checked first. If this is
-         not the required card, then the rest of the FitsChan is searched,
-         starting with the first card added to the FitsChan. Therefore cards
-         should be accessed in the order they are stored in the FitsChan (if
-         possible) as this will minimise the time spent searching for cards.
-
-         \sstitem
-         An error will be reported if the keyword name does not conform
-         to FITS requirements.
-
-         \sstitem
-         Zero
-         is returned as the function value if an error has already occurred,
-         or if this function should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astText\sstlabel{astText}
-}{
-   Draw a text string for a Plot
-}{
-   \sstdescription{
-      This function draws a string of text at a position specified in
-      the physical coordinate system of a \htmlref{Plot}{Plot}. The physical position
-      is transformed into graphical coordinates to determine where the
-      text should appear within the plotting area.
-   }
-   \sstsynopsis{
-      void astText( AstPlot $*$this, const char $*$text, const double pos[],
-                    const float up[], const char $*$just )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Plot.
-      }
-      \sstsubsection{
-         text
-      }{
-         Pointer to a null-terminated character string containing the
-         text to be drawn. Trailing white space is ignored.
-      }
-      \sstsubsection{
-         pos
-      }{
-         An array, with one element for each axis of the Plot, giving
-         the physical coordinates of the point where the reference
-         position of the text string is to be placed.
-      }
-      \sstsubsection{
-         up
-      }{
-         An array holding the components of a vector in the {\tt{"}}up{\tt{"}}
-         direction of the text (in graphical coordinates). For
-         example, to get horizontal text, the vector \{0.0f,1.0f\} should
-         be supplied. For a basic Plot, 2 values should be supplied. For
-         a \htmlref{Plot3D}{Plot3D}, 3 values should be supplied, and the actual up vector
-         used is the projection of the supplied up vector onto the text plane
-         specified by the current value of the Plot3D's Norm attribute.
-      }
-      \sstsubsection{
-         just
-      }{
-         Pointer to a null-terminated character string identifying the
-         reference point for the text being drawn. The first character in
-         this string identifies the reference position in the {\tt{"}}up{\tt{"}} direction
-         and may be {\tt{"}}B{\tt{"}} (baseline), {\tt{"}}C{\tt{"}} (centre), {\tt{"}}T{\tt{"}} (top) or {\tt{"}}M{\tt{"}} (bottom).
-         The second character identifies the side-to-side reference position
-         and may be {\tt{"}}L{\tt{"}} (left), {\tt{"}}C{\tt{"}} (centre) or {\tt{"}}R{\tt{"}} (right ). The string is
-         case-insensitive, and only the first two characters are significant.
-
-         For example, a value of {\tt{"}}BL{\tt{"}} means that the left end of the
-         baseline of the original (un-rotated) text is to be drawn at the
-         position given by {\tt{"}}pos{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Plot3D class currently does not interpret graphical escape
-         sequences contained within text displayed using this method.
-
-         \sstitem
-         Text is not drawn at positions which have any coordinate equal
-         to the value AST\_\_BAD (or where the transformation into
-         graphical coordinates yields coordinates containing the value
-         AST\_\_BAD).
-
-         \sstitem
-         If the plotting position is clipped (see \htmlref{astClip}{astClip}), then no
-         text is drawn.
-
-         \sstitem
-         An error results if the base \htmlref{Frame}{Frame} of the Plot is not
-         2-dimensional or (for a Plot3D) 3-dimensional.
-
-         \sstitem
-         An error also results if the transformation between the
-         current and base Frames of the Plot is not defined (i.e. the
-         Plot's \htmlref{TranInverse}{TranInverse} attribute is zero).
-      }
-   }
-}
-\sstroutine{
-   astThread\sstlabel{astThread}
-}{
-   Determine the thread that owns an Object
-}{
-   \sstdescription{
-      Returns an integer that indicates whether the supplied \htmlref{Object}{Object} (or
-      Object pointer) is currently unlocked, or is currently locked by
-      the running thread, or another thread.
-   }
-   \sstsynopsis{
-      int astThread( AstObject $*$this, int ptr )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object to be checked.
-      }
-      \sstsubsection{
-         ptr
-      }{
-         If non-zero, returns information about the supplied Object
-         pointer, rather than the Object structure itself. See {\tt{"}}Object
-         Pointers and Structures{\tt{"}} below.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astThread()
-      }{
-         A value of AST\_\_UNLOCKED is returned if the Object (or pointer)
-         is currently unlocked (i.e. has been unlocked using \htmlref{astUnlock}{astUnlock}
-         but has not yet been locked using \htmlref{astLock}{astLock}). A value of
-         AST\_\_RUNNING is returned if the Object (or pointer) is currently
-         locked by the running thread. A value of AST\_\_OTHER is returned
-         if the Object (or pointer) is currently locked by the another
-         thread.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function attempts to execute even if the global error
-         status is set, but no further error report will be made if it
-         subsequently fails under these circumstances.
-
-         \sstitem
-         This function is only available in the C interface.
-
-         \sstitem
-         This function always returns AST\_\_RUNNING if the AST library has
-         been built without POSIX thread support (i.e. the {\tt{"}}-with-pthreads{\tt{"}}
-         option was not specified when running the {\tt{"}}configure{\tt{"}} script).
-      }
-   }
-   \sstdiytopic{
-      Object Pointers and Structures
-   }{
-      At any one time, an AST Object can have several distinct pointers,
-      any one of which can be used to access the Object structure. For
-      instance, the \htmlref{astClone}{astClone} function will produce a new distinct pointer
-      for a given Object. In fact, an AST {\tt{"}}pointer{\tt{"}} is not a real pointer
-      at all - it is an identifier for a {\tt{"}}handle{\tt{"}} structure, encoded to
-      make it look like a pointer. Each handle contains (amongst othere
-      things) a {\tt{"}}real{\tt{"}} pointer to the Object structure. This allows more
-      than one handle to refer to the same Object structure. So when you
-      call astClone (for instance) you get back an identifier for a new
-      handle that refers to the same Object as the supplied handle.
-
-      In order to use an Object for anything useful, it must be locked
-      for use by the running thread (either implicitly at creation or
-      explicitly using astLock). The identity of the thread is stored in
-      both the Object structure, and in the handle that was passed to
-      astLock (or returned by the constructor function). Thus it is
-      possible for a thread to have active pointers for Objects that are
-      currently locked by another thread. In general, if such a pointer is
-      passed to an AST function an error will be reported indicating that
-      the Object is currently locked by another thread. The two exceptions
-      to this is that \htmlref{astAnnul}{astAnnul} can be used to annull such a pointer, and
-      this function can be used to return information about the pointer.
-
-      The other practical consequence of this is that when \htmlref{astEnd}{astEnd} is
-      called, all active pointers currently owned by the running thread
-      (at the current context level) are annulled. This includes pointers
-      for Objects that are currently locked by other threads.
-
-      If the {\tt{"}}ptr{\tt{"}} parameter is zero, then the returned value describes
-      the Object structure itself. If {\tt{"}}ptr{\tt{"}} is non-zero, then the returned
-      value describes the supplied Object pointer (i.e. handle), rather
-      than the Object structure.
-   }
-}
-\sstroutine{
-   astTimeAdd\sstlabel{astTimeAdd}
-}{
-   Add a time coordinate conversion to a TimeMap
-}{
-   \sstdescription{
-      This function adds one of the standard time coordinate
-      system conversions listed below to an existing \htmlref{TimeMap}{TimeMap}.
-
-      When a TimeMap is first created (using \htmlref{astTimeMap}{astTimeMap}), it simply
-      performs a unit (null) \htmlref{Mapping}{Mapping}. By using astTimeAdd (repeatedly
-      if necessary), one or more coordinate conversion steps may then
-      be added, which the TimeMap will perform in sequence. This allows
-      multi-step conversions between a variety of time coordinate
-      systems to be assembled out of the building blocks provided by
-      this class.
-
-      Normally, if a TimeMap's \htmlref{Invert}{Invert} attribute is zero (the default),
-      then its forward transformation is performed by carrying out
-      each of the individual coordinate conversions specified by
-      astTimeAdd in the order given (i.e. with the most recently added
-      conversion applied last).
-
-      This order is reversed if the TimeMap's Invert attribute is
-      non-zero (or if the inverse transformation is requested by any
-      other means) and each individual coordinate conversion is also
-      replaced by its own inverse. This process inverts the overall
-      effect of the TimeMap. In this case, the first conversion to be
-      applied would be the inverse of the one most recently added.
-   }
-   \sstsynopsis{
-      void astTimeAdd( AstTimeMap $*$this, const char $*$cvt, const double args[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the TimeMap.
-      }
-      \sstsubsection{
-         cvt
-      }{
-         Pointer to a null-terminated string which identifies the
-         time coordinate conversion to be added to the
-         TimeMap. See the {\tt{"}}Available Conversions{\tt{"}} section for details of
-         those available.
-      }
-      \sstsubsection{
-         args
-      }{
-         An array containing argument values for the time
-         coordinate conversion. The number of arguments required, and
-         hence the number of array elements used, depends on the
-         conversion specified (see the {\tt{"}}Available Conversions{\tt{"}}
-         section). This array is ignored
-         and a NULL pointer may be supplied
-         if no arguments are needed.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When assembling a multi-stage conversion, it can sometimes be
-         difficult to determine the most economical conversion path. A solution
-         to this is to include all the steps which are (logically) necessary,
-         but then to use
-         \htmlref{astSimplify}{astSimplify} to simplify the resulting
-         TimeMap. The simplification process will eliminate any steps
-         which turn out not to be needed.
-
-         \sstitem
-         This function does not check to ensure that the sequence of
-         coordinate conversions added to a TimeMap is physically
-         meaningful.
-      }
-   }
-   \sstdiytopic{
-      Available Conversions
-   }{
-      The following strings (which are case-insensitive) may be supplied
-      via the {\tt{"}}cvt{\tt{"}} parameter to indicate which time coordinate
-      conversion is to be added to the TimeMap. Where arguments are needed by
-      the conversion, they are listed in parentheses. Values for
-      these arguments should be given, via the {\tt{"}}args{\tt{"}} array, in the
-      order indicated. Units and argument names are described at the end of
-      the list of conversions, and {\tt{"}}MJD{\tt{"}} means Modified Julian Date.
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}MJDTOMJD{\tt{"}}  (MJDOFF1,MJDOFF2): Convert MJD from one offset to another.
-
-         \sstitem
-         {\tt{"}}MJDTOJD{\tt{"}}  (MJDOFF,JDOFF): Convert MJD to Julian Date.
-
-         \sstitem
-         {\tt{"}}JDTOMJD{\tt{"}}  (JDOFF,MJDOFF): Convert Julian Date to MJD.
-
-         \sstitem
-         {\tt{"}}MJDTOBEP{\tt{"}} (MJDOFF,BEPOFF): Convert MJD to Besselian epoch.
-
-         \sstitem
-         {\tt{"}}BEPTOMJD{\tt{"}} (BEPOFF,MJDOFF): Convert Besselian epoch to MJD.
-
-         \sstitem
-         {\tt{"}}MJDTOJEP{\tt{"}} (MJDOFF,JEPOFF): Convert MJD to Julian epoch.
-
-         \sstitem
-         {\tt{"}}JEPTOMJD{\tt{"}} (JEPOFF,MJDOFF): Convert Julian epoch to MJD.
-
-         \sstitem
-         {\tt{"}}TAITOUTC{\tt{"}} (MJDOFF): Convert a TAI MJD to a UTC MJD.
-
-         \sstitem
-         {\tt{"}}UTCTOTAI{\tt{"}} (MJDOFF): Convert a UTC MJD to a TAI MJD.
-
-         \sstitem
-         {\tt{"}}TAITOTT{\tt{"}}  (MJDOFF): Convert a TAI MJD to a TT MJD.
-
-         \sstitem
-         {\tt{"}}TTTOTAI{\tt{"}}  (MJDOFF): Convert a TT MJD to a TAI MJD.
-
-         \sstitem
-         {\tt{"}}TTTOTDB{\tt{"}}  (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TT MJD to a TDB MJD.
-
-         \sstitem
-         {\tt{"}}TDBTOTT{\tt{"}}  (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TDB MJD to a TT MJD.
-
-         \sstitem
-         {\tt{"}}TTTOTCG{\tt{"}}  (MJDOFF): Convert a TT MJD to a TCG MJD.
-
-         \sstitem
-         {\tt{"}}TCGTOTT{\tt{"}}  (MJDOFF): Convert a TCG MJD to a TT MJD.
-
-         \sstitem
-         {\tt{"}}TDBTOTCB{\tt{"}} (MJDOFF): Convert a TDB MJD to a TCB MJD.
-
-         \sstitem
-         {\tt{"}}TCBTOTDB{\tt{"}} (MJDOFF): Convert a TCB MJD to a TDB MJD.
-
-         \sstitem
-         {\tt{"}}UTTOGMST{\tt{"}} (MJDOFF): Convert a UT MJD to a GMST MJD.
-
-         \sstitem
-         {\tt{"}}GMSTTOUT{\tt{"}} (MJDOFF): Convert a GMST MJD to a UT MJD.
-
-         \sstitem
-         {\tt{"}}GMSTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
-         \sstitem
-         {\tt{"}}LMSTTOGMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
-         \sstitem
-         {\tt{"}}LASTTOLMST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-
-         \sstitem
-         {\tt{"}}LMSTTOLAST{\tt{"}} (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-
-         \sstitem
-         {\tt{"}}UTTOUTC{\tt{"}} (DUT1): Convert a UT1 MJD to a UTC MJD.
-
-         \sstitem
-         {\tt{"}}UTCTOUT{\tt{"}} (DUT1): Convert a UTC MJD to a UT1 MJD.
-
-         \sstitem
-         {\tt{"}}LTTOUTC{\tt{"}} (LTOFF): Convert a Local Time MJD to a UTC MJD.
-
-         \sstitem
-         {\tt{"}}UTCTOLT{\tt{"}} (LTOFF): Convert a UTC MJD to a Local Time MJD.
-
-      }
-      The units for the values processed by the above conversions are as
-      follows:
-
-      \sstitemlist{
-
-         \sstitem
-         Julian epochs and offsets: Julian years
-
-         \sstitem
-         Besselian epochs and offsets: Tropical years
-
-         \sstitem
-         Modified Julian Dates and offsets: days
-
-         \sstitem
-         Julian Dates and offsets: days
-
-      }
-      The arguments used in the above conversions are the zero-points
-      used by the
-      astTransform function.
-      The axis values supplied and returned by
-      astTransform
-      are offsets away from these zero-points:
-
-      \sstitemlist{
-
-         \sstitem
-         MJDOFF: The zero-point being used with MJD values.
-
-         \sstitem
-         JDOFF: The zero-point being used with Julian Date values.
-
-         \sstitem
-         BEPOFF: The zero-point being used with Besselian epoch values.
-
-         \sstitem
-         JEPOFF: The zero-point being used with Julian epoch values.
-
-         \sstitem
-         OBSLON: Observer longitude in radians ($+$ve westwards).
-
-         \sstitem
-         OBSLAT: Observer geodetic latitude (IAU 1975) in radians ($+$ve northwards).
-
-         \sstitem
-         OBSALT: Observer geodetic altitude (IAU 1975) in metres.
-
-         \sstitem
-         DUT1: The UT1-UTC value to use.
-
-         \sstitem
-         LTOFF: The offset between Local Time and UTC (in hours, positive
-         for time zones east of Greenwich).
-      }
-   }
-}
-\sstroutine{
-   astTimeFrame\sstlabel{astTimeFrame}
-}{
-   Create a TimeFrame
-}{
-   \sstdescription{
-      This function creates a new \htmlref{TimeFrame}{TimeFrame} and optionally initialises
-      its attributes.
-
-      A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions in
-      time.
-
-      A TimeFrame represents a moment in time as either an Modified Julian
-      Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-      as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
-      specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
-      representing time offsets from the specified zero point.
-
-      Even though JD and MJD are defined as being in units of days, the
-      TimeFrame class allows other units to be used (via the Unit attribute)
-      on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
-      hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
-      can be described in units other than the usual years. Besselian epoch
-      are always represented in units of (tropical) years.
-
-      The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
-      is, the physical proces used to define the rate of flow of time).
-      MJD, JD and Julian epoch can be used to represent a time in any
-      supported time scale. However, Besselian epoch may only be used with the
-      {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
-      includes universal time and siderial time. Strictly, these represent
-      angles rather than time scales, but are included in the list since
-      they are in common use and are often thought of as time scales.
-
-      When a time value is formatted it can be formated either as a simple
-      floating point value, or as a Gregorian date (see the Format
-      attribute).
-   }
-   \sstsynopsis{
-      AstTimeFrame $*$astTimeFrame( const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new TimeFrame. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astTimeFrame()
-      }{
-         A pointer to the new TimeFrame.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When conversion between two TimeFrames is requested (as when
-         supplying TimeFrames to \htmlref{astConvert}{astConvert}),
-         account will be taken of the nature of the time coordinate systems
-         they represent, together with any qualifying time scale, offset,
-         unit, etc. The \htmlref{AlignSystem}{AlignSystem} and \htmlref{AlignTimeScale}{AlignTimeScale} attributes will also be
-         taken into account.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astTimeMap\sstlabel{astTimeMap}
-}{
-   Create a TimeMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{TimeMap}{TimeMap} and optionally initialises
-      its attributes.
-
-      A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
-      used to represent a sequence of conversions between standard time
-      coordinate systems.
-
-      When a TimeMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{astTimeAdd}{astTimeAdd}
-      function, a series of coordinate conversion steps may then be
-      added. This allows multi-step conversions between a variety of
-      time coordinate systems to be assembled out of a set of building
-      blocks.
-
-      For details of the individual coordinate conversions available,
-      see the description of the astTimeAdd function.
-   }
-   \sstsynopsis{
-      AstTimeMap $*$astTimeMap( int flags, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         flags
-      }{
-         This parameter is reserved for future use and should currently
-         always be set to zero.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new TimeMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-         If no initialisation is required, a zero-length string may be
-         supplied.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astTimeMap()
-      }{
-         A pointer to the new TimeMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The nature and units of the coordinate values supplied for the
-         first input (i.e. the time input) of a TimeMap must be appropriate
-         to the first conversion step applied by the TimeMap. For instance, if
-         the first conversion step is {\tt{"}}MJDTOBEP{\tt{"}} (Modified Julian Date to
-         Besselian epoch) then the coordinate values for the first input should
-         be date in units of days. Similarly, the nature and units of the
-         coordinate values returned by a TimeMap will be determined by the
-         last conversion step applied by the TimeMap.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astTran1\sstlabel{astTran1}
-}{
-   Transform 1-dimensional coordinates
-}{
-   \sstdescription{
-      This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in one dimension.
-   }
-   \sstsynopsis{
-      void astTran1( AstMapping $*$this, int npoint, const double xin[],
-                     int forward, double xout[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         xin
-      }{
-         An array of {\tt{"}}npoint{\tt{"}} coordinate values for the input
-         (untransformed) points.
-      }
-      \sstsubsection{
-         forward
-      }{
-         A non-zero value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a zero
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         xout
-      }{
-         An array (with {\tt{"}}npoint{\tt{"}} elements) into which the
-         coordinates of the output (transformed) points will be written.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping supplied must have the value 1 for both its \htmlref{Nin}{Nin}
-         and \htmlref{Nout}{Nout} attributes.
-      }
-   }
-}
-\sstroutine{
-   astTran2\sstlabel{astTran2}
-}{
-   Transform 2-dimensional coordinates
-}{
-   \sstdescription{
-      This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in two dimensions.
-   }
-   \sstsynopsis{
-      void astTran2( AstMapping $*$this,
-                     int npoint, const double xin[], const double yin[],
-                     int forward, double xout[], double yout[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         xin
-      }{
-         An array of {\tt{"}}npoint{\tt{"}} X-coordinate values for the input
-         (untransformed) points.
-      }
-      \sstsubsection{
-         yin
-      }{
-         An array of {\tt{"}}npoint{\tt{"}} Y-coordinate values for the input
-         (untransformed) points.
-      }
-      \sstsubsection{
-         forward
-      }{
-         A non-zero value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a zero
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         xout
-      }{
-         An array (with {\tt{"}}npoint{\tt{"}} elements) into which the
-         X-coordinates of the output (transformed) points will be written.
-      }
-      \sstsubsection{
-         yout
-      }{
-         An array (with {\tt{"}}npoint{\tt{"}} elements) into which the
-         Y-coordinates of the output (transformed) points will be written.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Mapping supplied must have the value 2 for both its \htmlref{Nin}{Nin}
-         and \htmlref{Nout}{Nout} attributes.
-      }
-   }
-}
-\sstroutine{
-   astTranGrid\sstlabel{astTranGrid}
-}{
-   Transform a grid of positions
-}{
-   \sstdescription{
-      This function uses the supplied \htmlref{Mapping}{Mapping} to transforms a regular square
-      grid of points covering a specified box. It attempts to do this
-      quickly by first approximating the Mapping with a linear transformation
-      applied over the whole region of the input grid which is being used.
-      If this proves to be insufficiently accurate, the input region is
-      sub-divided into two along its largest dimension and the process is
-      repeated within each of the resulting sub-regions. This process of
-      sub-division continues until a sufficiently good linear approximation
-      is found, or the region to which it is being applied becomes too small
-      (in which case the original Mapping is used directly).
-   }
-   \sstsynopsis{
-      void astTranGrid( AstMapping $*$this, int ncoord\_in,
-                        const int lbnd[], const int ubnd[],
-                        double tol, int maxpix, int forward,
-                        int ncoord\_out, int outdim, double $*$out );
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         ncoord\_in
-      }{
-         The number of coordinates being supplied for each box corner
-         (i.e. the number of dimensions of the space in which the
-         input points reside).
-      }
-      \sstsubsection{
-         lbnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ncoord\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd
-      }{
-         Pointer to an array of integers, with {\tt{"}}ncoord\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd{\tt{"}} and {\tt{"}}ubnd{\tt{"}} together define the shape
-         and size of the input grid, its extent along a particular
-         (j'th) dimension being ubnd[j]-lbnd[j]$+$1 (assuming the
-         index {\tt{"}}j{\tt{"}} to be zero-based). They also define
-         the input grid's coordinate system, each pixel having unit
-         extent along each dimension with integral coordinate values
-         at its centre.
-      }
-      \sstsubsection{
-         tol
-      }{
-         The maximum tolerable geometrical distortion which may be
-         introduced as a result of approximating non-linear Mappings
-         by a set of piece-wise linear transformations. This should be
-         expressed as a displacement within the output coordinate system
-         of the Mapping.
-
-         If piece-wise linear approximation is not required, a value
-         of zero may be given. This will ensure that the Mapping is
-         used without any approximation, but may increase execution
-         time.
-
-         If the value is too high, discontinuities between the linear
-         approximations used in adjacent panel will be higher. If this
-         is a problem, reduce the tolerance value used.
-      }
-      \sstsubsection{
-         maxpix
-      }{
-         A value which specifies an initial scale size (in input grid points)
-         for the adaptive algorithm which approximates non-linear Mappings
-         with piece-wise linear transformations. Normally, this should
-         be a large value (larger than any dimension of the region of
-         the input grid being used). In this case, a first attempt to
-         approximate the Mapping by a linear transformation will be
-         made over the entire input region.
-
-         If a smaller value is used, the input region will first be
-         divided into sub-regions whose size does not exceed {\tt{"}}maxpix{\tt{"}}
-         grid points in any dimension. Only at this point will attempts
-         at approximation commence.
-
-         This value may occasionally be useful in preventing false
-         convergence of the adaptive algorithm in cases where the
-         Mapping appears approximately linear on large scales, but has
-         irregularities (e.g. holes) on smaller scales. A value of,
-         say, 50 to 100 grid points can also be employed as a safeguard
-         in general-purpose software, since the effect on performance is
-         minimal.
-
-         If too small a value is given, it will have the effect of
-         inhibiting linear approximation altogether (equivalent to
-         setting {\tt{"}}tol{\tt{"}} to zero). Although this may degrade
-         performance, accurate results will still be obtained.
-      }
-      \sstsubsection{
-         forward
-      }{
-         A non-zero value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a zero
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         ncoord\_out
-      }{
-         The number of coordinates being generated by the Mapping for
-         each output point (i.e. the number of dimensions of the
-         space in which the output points reside). This need not be
-         the same as {\tt{"}}ncoord\_in{\tt{"}}.
-      }
-      \sstsubsection{
-         outdim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}out{\tt{"}}
-         array (which will contain the output coordinates). The value
-         given should not be less than the number of points in the grid.
-      }
-      \sstsubsection{
-         out
-      }{
-         The address of the first element in a 2-dimensional array of
-         shape {\tt{"}}[ncoord\_out][outdim]{\tt{"}}, into
-         which the coordinates of the output (transformed) points will
-         be written. These will be stored such that the value of
-         coordinate number {\tt{"}}coord{\tt{"}} for output point number {\tt{"}}point{\tt{"}}
-         will be found in element {\tt{"}}out[coord][point]{\tt{"}}.
-         The points are ordered such that the first axis of the input
-         grid changes most rapidly. For example, if the input grid is
-         2-dimensional and extends from (2,-1) to (3,1), the output
-         points will be stored in the order (2,-1), (3, -1), (2,0), (3,0),
-         (2,1), (3,1).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the forward coordinate transformation is being applied, the
-         Mapping supplied must have the value of {\tt{"}}ncoord\_in{\tt{"}} for its \htmlref{Nin}{Nin}
-         attribute and the value of {\tt{"}}ncoord\_out{\tt{"}} for its \htmlref{Nout}{Nout} attribute. If
-         the inverse transformation is being applied, these values should
-         be reversed.
-      }
-   }
-}
-\sstroutine{
-   astTranMap\sstlabel{astTranMap}
-}{
-   Create a TranMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{TranMap}{TranMap} and optionally initialises
-      its attributes.
-
-      A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
-      a supplied Mapping with the inverse transformation of another
-      supplied Mapping, ignoring the un-used transformation in each
-      Mapping (indeed the un-used transformation need not exist).
-
-      When the forward transformation of the TranMap is referred to, the
-      transformation actually used is the forward transformation of the
-      first Mapping supplied when the TranMap was constructed. Likewise,
-      when the inverse transformation of the TranMap is referred to, the
-      transformation actually used is the inverse transformation of the
-      second Mapping supplied when the TranMap was constructed.
-   }
-   \sstsynopsis{
-      AstTranMap $*$astTranMap( AstMapping $*$map1, AstMapping $*$map2,
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         map1
-      }{
-         Pointer to the first component Mapping, which defines the
-         forward transformation.
-      }
-      \sstsubsection{
-         map2
-      }{
-         Pointer to the second component Mapping, which defines the
-         inverse transformation.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new TranMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astTranMap()
-      }{
-         A pointer to the new TranMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The number of output coordinates generated by the two Mappings
-         (their \htmlref{Nout}{Nout} attribute) must be equal, as must the number of input
-         coordinates accepted by each Mapping (their \htmlref{Nin}{Nin} attribute).
-
-         \sstitem
-         The forward transformation of the first Mapping must exist.
-
-         \sstitem
-         The inverse transformation of the second Mapping must exist.
-
-         \sstitem
-         Note that the component Mappings supplied are not copied by
-         astTranMap (the new TranMap simply retains a reference to
-         them). They may continue to be used for other purposes, but
-         should not be deleted. If a TranMap containing a copy of its
-         component Mappings is required, then a copy of the TranMap should
-         be made using \htmlref{astCopy}{astCopy}.
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astTranN\sstlabel{astTranN}
-}{
-   Transform N-dimensional coordinates
-}{
-   \sstdescription{
-      This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in an arbitrary number of dimensions. It is the
-      appropriate routine to use if the coordinates are not purely 1-
-      or 2-dimensional and are stored in a single array (which they
-      need not fill completely).
-
-      If the coordinates are not stored in a single array, then the
-      \htmlref{astTranP}{astTranP} function might be more suitable.
-   }
-   \sstsynopsis{
-      void astTranN( AstMapping $*$this, int npoint,
-                     int ncoord\_in, int indim, const double $*$in,
-                     int forward,
-                     int ncoord\_out, int outdim, double $*$out )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         ncoord\_in
-      }{
-         The number of coordinates being supplied for each input point
-         (i.e. the number of dimensions of the space in which the
-         input points reside).
-      }
-      \sstsubsection{
-         indim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}in{\tt{"}}
-         array (which contains the input coordinates). This value is
-         required so that the coordinate values can be correctly
-         located if they do not entirely fill this array. The value
-         given should not be less than {\tt{"}}npoint{\tt{"}}.
-      }
-      \sstsubsection{
-         in
-      }{
-         The address of the first element in a 2-dimensional array of
-         shape {\tt{"}}[ncoord\_in][indim]{\tt{"}},
-         containing the coordinates of the input (untransformed)
-         points. These should be stored such that the value of
-         coordinate number {\tt{"}}coord{\tt{"}} for input point number {\tt{"}}point{\tt{"}} is
-         found in element {\tt{"}}in[coord][point]{\tt{"}}.
-      }
-      \sstsubsection{
-         forward
-      }{
-         A non-zero value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a zero
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         ncoord\_out
-      }{
-         The number of coordinates being generated by the Mapping for
-         each output point (i.e. the number of dimensions of the
-         space in which the output points reside). This need not be
-         the same as {\tt{"}}ncoord\_in{\tt{"}}.
-      }
-      \sstsubsection{
-         outdim
-      }{
-         The number of elements along the second dimension of the {\tt{"}}out{\tt{"}}
-         array (which will contain the output coordinates). This value
-         is required so that the coordinate values can be correctly
-         located if they will not entirely fill this array. The value
-         given should not be less than {\tt{"}}npoint{\tt{"}}.
-      }
-      \sstsubsection{
-         out
-      }{
-         The address of the first element in a 2-dimensional array of
-         shape {\tt{"}}[ncoord\_out][outdim]{\tt{"}}, into
-         which the coordinates of the output (transformed) points will
-         be written. These will be stored such that the value of
-         coordinate number {\tt{"}}coord{\tt{"}} for output point number {\tt{"}}point{\tt{"}}
-         will be found in element {\tt{"}}out[coord][point]{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the forward coordinate transformation is being applied, the
-         Mapping supplied must have the value of {\tt{"}}ncoord\_in{\tt{"}} for its \htmlref{Nin}{Nin}
-         attribute and the value of {\tt{"}}ncoord\_out{\tt{"}} for its \htmlref{Nout}{Nout} attribute. If
-         the inverse transformation is being applied, these values should
-         be reversed.
-      }
-   }
-}
-\sstroutine{
-   astTranP\sstlabel{astTranP}
-}{
-   Transform N-dimensional coordinates held in separate arrays
-}{
-   \sstdescription{
-      This function applies a \htmlref{Mapping}{Mapping} to transform the coordinates of
-      a set of points in an arbitrary number of dimensions. It is the
-      appropriate routine to use if the coordinates are not purely 1-
-      or 2-dimensional and are stored in separate arrays, since each
-      coordinate array is located by supplying a separate pointer to
-      it.
-
-      If the coordinates are stored in a single (2-dimensional) array,
-      then the \htmlref{astTranN}{astTranN} function might be more suitable.
-   }
-   \sstsynopsis{
-      void astTranP( AstMapping $*$this, int npoint,
-                     int ncoord\_in, const double $*$ptr\_in[],
-                     int forward, int ncoord\_out, double $*$ptr\_out[] )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Mapping to be applied.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         The number of points to be transformed.
-      }
-      \sstsubsection{
-         ncoord\_in
-      }{
-         The number of coordinates being supplied for each input point
-         (i.e. the number of dimensions of the space in which the
-         input points reside).
-      }
-      \sstsubsection{
-         ptr\_in
-      }{
-         An array of pointers to double, with {\tt{"}}ncoord\_in{\tt{"}}
-         elements. Element {\tt{"}}ptr\_in[coord]{\tt{"}} should point at the first
-         element of an array of double (with {\tt{"}}npoint{\tt{"}} elements) which
-         contain the values of coordinate number {\tt{"}}coord{\tt{"}} for each
-         input (untransformed) point. The value of coordinate number
-         {\tt{"}}coord{\tt{"}} for input point number {\tt{"}}point{\tt{"}} is therefore given by
-         {\tt{"}}ptr\_in[coord][point]{\tt{"}} (assuming both indices are
-         zero-based).
-      }
-      \sstsubsection{
-         forward
-      }{
-         A non-zero value indicates that the Mapping's forward
-         coordinate transformation is to be applied, while a zero
-         value indicates that the inverse transformation should be
-         used.
-      }
-      \sstsubsection{
-         ncoord\_out
-      }{
-         The number of coordinates being generated by the Mapping for
-         each output point (i.e. the number of dimensions of the space
-         in which the output points reside). This need not be the same
-         as {\tt{"}}ncoord\_in{\tt{"}}.
-      }
-      \sstsubsection{
-         ptr\_out
-      }{
-         An array of pointers to double, with {\tt{"}}ncoord\_out{\tt{"}}
-         elements. Element {\tt{"}}ptr\_out[coord]{\tt{"}} should point at the first
-         element of an array of double (with {\tt{"}}npoint{\tt{"}} elements) into
-         which the values of coordinate number {\tt{"}}coord{\tt{"}} for each output
-         (transformed) point will be written.  The value of coordinate
-         number {\tt{"}}coord{\tt{"}} for output point number {\tt{"}}point{\tt{"}} will therefore
-         be found in {\tt{"}}ptr\_out[coord][point]{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the forward coordinate transformation is being applied, the
-         Mapping supplied must have the value of {\tt{"}}ncoord\_in{\tt{"}} for its \htmlref{Nin}{Nin}
-         attribute and the value of {\tt{"}}ncoord\_out{\tt{"}} for its \htmlref{Nout}{Nout}
-         attribute. If the inverse transformation is being applied, these
-         values should be reversed.
-
-         \sstitem
-         This routine is not available in the Fortran 77 interface to
-         the AST library.
-      }
-   }
-}
-\sstroutine{
-   astTune\sstlabel{astTune}
-}{
-   Set or get an AST global tuning parameter
-}{
-   \sstdescription{
-      This function returns the current value of an AST global tuning
-      parameter, optionally storing a new value for the parameter.
-   }
-   \sstsynopsis{
-      int astTune( const char $*$name, int value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         name
-      }{
-         The name of the tuning parameter (case-insensitive).
-      }
-      \sstsubsection{
-         value
-      }{
-         The new value for the tuning parameter. If this is AST\_\_TUNULL,
-         the existing current value will be retained.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astTune()
-      }{
-         The original value of the tuning parameter. A default value will
-         be returned if no value has been set for the parameter.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function attempts to execute even if the AST error
-         status is set
-         on entry, although no further error report will be
-         made if it subsequently fails under these circumstances.
-
-         \sstitem
-         All threads in a process share the same AST tuning parameters
-         values.
-      }
-   }
-   \sstdiylist{
-      Tuning Parameters
-   }{
-      \sstsubsection{
-         ObjectCaching
-      }{
-         A boolean flag which indicates what should happen
-         to the memory occupied by an AST \htmlref{Object}{Object} when the Object is deleted
-         (i.e. when its reference count falls to zero or it is deleted using
-         \htmlref{astDelete}{astDelete}).
-         If this is zero, the memory is simply freed using the systems {\tt{"}}free{\tt{"}}
-         function. If it is non-zero, the memory is not freed. Instead a
-         pointer to it is stored in a pool of such pointers, all of which
-         refer to allocated but currently unused blocks of memory. This allows
-         AST to speed up subsequent Object creation by re-using previously
-         allocated memory blocks rather than allocating new memory using the
-         systems malloc function. The default value for this parameter is
-         zero. Setting it to a non-zero value will result in Object memory
-         being cached in future. Setting it back to zero causes any memory
-         blocks currently in the pool to be freed. Note, this tuning parameter
-         only controls the caching of memory used to store AST Objects. To
-         cache other memory blocks allocated by AST, use MemoryCaching.
-      }
-      \sstsubsection{
-         MemoryCaching
-      }{
-         A boolean flag similar to ObjectCaching except
-         that it controls caching of all memory blocks of less than 300 bytes
-         allocated by AST (whether for internal or external use), not just
-         memory used to store AST Objects.
-      }
-   }
-}
-\sstroutine{
-   astUinterp\sstlabel{astUinterp}
-}{
-   Perform sub-pixel interpolation on a grid of data
-}{
-   \sstdescription{
-      This is a fictitious function which does not actually
-      exist. Instead, this description constitutes a template so that
-      you may implement a function with this interface for yourself
-      (and give it any name you wish). A pointer to such a function
-      may be passed via the {\tt{"}}finterp{\tt{"}} parameter of the \htmlref{astResample$<$X$>$}{astResampleX}
-      functions (q.v.) in order to perform sub-pixel interpolation
-      during resampling of gridded data (you must also set the
-      {\tt{"}}interp{\tt{"}} parameter of astResample$<$X$>$ to the value
-      AST\_\_UINTERP). This allows you to use your own interpolation
-      algorithm in addition to those which are pre-defined.
-
-      The function interpolates an input grid of data (and,
-      optionally, processes associated statistical variance estimates)
-      at a specified set of points.
-   }
-   \sstsynopsis{
-      void astUinterp( int ndim\_in, const int lbnd\_in[], const int ubnd\_in[],
-                       const $<$Xtype$>$ in[], const $<$Xtype$>$ in\_var[],
-                       int npoint, const int offset[],
-                       const double $*$const coords[], const double params[],
-                       int flags, $<$Xtype$>$ badval,
-                       $<$Xtype$>$ out[], $<$Xtype$>$ out\_var[], int $*$nbad )
-   }
-   \sstparameters{
-      \sstsubsection{
-         ndim\_in
-      }{
-         The number of dimensions in the input grid. This will be at
-         least one.
-      }
-      \sstsubsection{
-         lbnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the first pixel
-         in the input grid along each dimension.
-      }
-      \sstsubsection{
-         ubnd\_in
-      }{
-         Pointer to an array of integers, with {\tt{"}}ndim\_in{\tt{"}} elements,
-         containing the coordinates of the centre of the last pixel in
-         the input grid along each dimension.
-
-         Note that {\tt{"}}lbnd\_in{\tt{"}} and {\tt{"}}ubnd\_in{\tt{"}} together define the shape,
-         size and coordinate system of the input grid in the same
-         way as they do in astResample$<$X$>$.
-      }
-      \sstsubsection{
-         in
-      }{
-         Pointer to an array, with one element for each pixel in the
-         input grid, containing the input data. This will be the same
-         array as was passed to astResample$<$X$>$ via the {\tt{"}}in{\tt{"}} parameter.
-         The numerical type of this array should match that of the
-         data being processed.
-      }
-      \sstsubsection{
-         in\_var
-      }{
-         Pointer to an optional second array with the same size and
-         type as the {\tt{"}}in{\tt{"}} array. If given, this will contain the set
-         of variance values associated with the input data and will be
-         the same array as was passed to astResample$<$X$>$ via the
-         {\tt{"}}in\_var{\tt{"}} parameter.
-
-         If no variance values are being processed, this will be a
-         NULL pointer.
-      }
-      \sstsubsection{
-         npoint
-      }{
-         The number of points at which the input grid is to be
-         interpolated. This will be at least one.
-      }
-      \sstsubsection{
-         offset
-      }{
-         Pointer to an array of integers with {\tt{"}}npoint{\tt{"}} elements. For
-         each interpolation point, this will contain the zero-based
-         index in the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s) at which the
-         interpolated value (and its variance, if required) should be
-         stored. For example, the interpolated value for point number
-         {\tt{"}}point{\tt{"}} should be stored in {\tt{"}}out[offset[point]]{\tt{"}} (assuming
-         the index {\tt{"}}point{\tt{"}} is zero-based).
-      }
-      \sstsubsection{
-         coords
-      }{
-         An array of pointers to double, with {\tt{"}}ndim\_in{\tt{"}}
-         elements. Element {\tt{"}}coords[coord]{\tt{"}} will point at the first
-         element of an array of double (with {\tt{"}}npoint{\tt{"}} elements) which
-         contains the values of coordinate number {\tt{"}}coord{\tt{"}} for each
-         interpolation point. The value of coordinate number {\tt{"}}coord{\tt{"}}
-         for interpolation point number {\tt{"}}point{\tt{"}} is therefore given by
-         {\tt{"}}coords[coord][point]{\tt{"}} (assuming both indices are
-         zero-based).
-
-         If any interpolation point has any of its coordinates equal
-         to the value AST\_\_BAD (as defined in the {\tt{"}}ast.h{\tt{"}} header
-         file), then the corresponding output data (and variance)
-         should either be set to the value given by {\tt{"}}badval{\tt{"}},
-         or left unchanged, depending on whether the AST\_\_NOBAD flag is
-         specified by {\tt{"}}flags{\tt{"}}.
-      }
-      \sstsubsection{
-         params
-      }{
-         This will be a pointer to the same array as was given via the
-         {\tt{"}}params{\tt{"}} parameter of astResample$<$X$>$. You may use this to
-         pass any additional parameter values required by your
-         interpolation algorithm.
-      }
-      \sstsubsection{
-         flags
-      }{
-         This will be the same value as was given via the {\tt{"}}flags{\tt{"}}
-         parameter of astResample$<$X$>$. You may test this value to
-         provide additional control over the operation of your
-         resampling algorithm. Note that the special flag values
-         AST\_\_URESAMP1, 2, 3 \& 4 are reserved for you to use for your
-         own purposes and will not clash with other pre-defined flag
-         values (see astResample$<$X$>$).
-      }
-      \sstsubsection{
-         badval
-      }{
-         This will be the same value as was given via the {\tt{"}}badval{\tt{"}}
-         parameter of astResample$<$X$>$, and will have the same numerical
-         type as the data being processed (i.e. as elements of the
-         {\tt{"}}in{\tt{"}} array).  It should be used to test for bad pixels in the
-         input grid (but only if the AST\_\_USEBAD flag is set via the
-         {\tt{"}}flags{\tt{"}} parameter) and (unless the AST\_\_NOBAD flag is set in
-         {\tt{"}}flags{\tt{"}}) for identifying bad output values in
-         the {\tt{"}}out{\tt{"}} (and {\tt{"}}out\_var{\tt{"}}) array(s).
-      }
-      \sstsubsection{
-         out
-      }{
-         Pointer to an array with the same numerical type as the {\tt{"}}in{\tt{"}}
-         array, into which the interpolated data values should be
-         returned.  Note that details of the storage order and number
-         of dimensions of this array are not required, since the
-         {\tt{"}}offset{\tt{"}} array contains all necessary information about where
-         each returned value should be stored.
-
-         In general, not all elements of this array (or the {\tt{"}}out\_var{\tt{"}}
-         array below) may be used in any particular invocation of the
-         function. Those which are not used should be returned
-         unchanged.
-      }
-      \sstsubsection{
-         out\_var
-      }{
-         Pointer to an optional array with the same type and size as
-         the {\tt{"}}out{\tt{"}} array, into which variance estimates for the
-         resampled values should be returned.  This array will only be
-         given if the {\tt{"}}in\_var{\tt{"}} array has also been given.
-
-         If given, it is addressed in exactly the same way (via the
-         {\tt{"}}offset{\tt{"}} array) as the {\tt{"}}out{\tt{"}} array. The values returned
-         should be estimates of the statistical variance of the
-         corresponding values in the {\tt{"}}out{\tt{"}} array, on the assumption
-         that all errors in input data values are statistically
-         independent and that their variance estimates may simply be
-         summed (with appropriate weighting factors).
-
-         If no output variance estimates are required, a NULL pointer
-         will be given.
-      }
-      \sstsubsection{
-         nbad
-      }{
-         Pointer to an int in which to return the number of interpolation
-         points at
-         which no valid interpolated value could be obtained.  The maximum
-         value that should be returned is {\tt{"}}npoint{\tt{"}}, and the minimum is
-         zero (indicating that all output values were successfully
-         obtained).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The data type $<$Xtype$>$ indicates the numerical type of the data
-         being processed, as for astResample$<$X$>$.
-
-         \sstitem
-         This function will typically be invoked more than once for each
-         invocation of astResample$<$X$>$.
-
-         \sstitem
-         If an error occurs within this function, it should use
-         \htmlref{astSetStatus}{astSetStatus} to set the AST error status to an error value.
-         This will cause an immediate return from astResample$<$X$>$. The error
-         value AST\_\_UINER is available for this purpose, but other values may
-         also be used (e.g. if you wish to distinguish different types of
-         error).
-      }
-   }
-}
-\sstroutine{
-   astUkern1\sstlabel{astUkern1}
-}{
-   1-dimensional sub-pixel interpolation kernel
-}{
-   \sstdescription{
-      This is a fictitious function which does not actually
-      exist. Instead, this description constitutes a template so that
-      you may implement a function with this interface for yourself
-      (and give it any name you wish). A pointer to such a function
-      may be passed via the {\tt{"}}finterp{\tt{"}} parameter of the \htmlref{astResample$<$X$>$}{astResampleX}
-      functions (q.v.) in order to supply a 1-dimensional
-      interpolation kernel to the algorithm which performs sub-pixel
-      interpolation during resampling of gridded data (you must also
-      set the {\tt{"}}interp{\tt{"}} parameter of astResample$<$X$>$ to the value
-      AST\_\_UKERN1). This allows you to use your own interpolation
-      kernel in addition to those which are pre-defined.
-
-      The function calculates the value of a 1-dimensional sub-pixel
-      interpolation kernel. This determines how the weight given to
-      neighbouring pixels in calculating an interpolated value depends
-      on the pixel's offset from the interpolation point. In more than
-      one dimension, the weight assigned to a pixel is formed by
-      evaluating this 1-dimensional kernel using the offset along each
-      dimension in turn. The product of the returned values is then
-      used as the pixel weight.
-   }
-   \sstsynopsis{
-      void astUkern1( double offset, const double params[], int flags,
-                      double $*$value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         offset
-      }{
-         This will be the offset of the pixel from the interpolation
-         point, measured in pixels. This value may be positive or
-         negative, but for most practical interpolation schemes its
-         sign should be ignored.
-      }
-      \sstsubsection{
-         params
-      }{
-         This will be a pointer to the same array as was given via the
-         {\tt{"}}params{\tt{"}} parameter of astResample$<$X$>$. You may use this to
-         pass any additional parameter values required by your kernel,
-         but note that {\tt{"}}params[0]{\tt{"}} will already have been used to specify
-         the number of neighbouring pixels which contribute to the
-         interpolated value.
-      }
-      \sstsubsection{
-         flags
-      }{
-         This will be the same value as was given via the {\tt{"}}flags{\tt{"}}
-         parameter of astResample$<$X$>$. You may test this value to
-         provide additional control over the operation of your
-         function. Note that the special flag values AST\_\_URESAMP1, 2,
-         3 \& 4 are reserved for you to use for your own purposes and
-         will not clash with other pre-defined flag
-         values (see astResample$<$X$>$).
-      }
-      \sstsubsection{
-         value
-      }{
-         Pointer to a double to receive the calculated kernel value,
-         which may be positive or negative.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Not all functions make good interpolation kernels. In general,
-         acceptable kernels tend to be symmetrical about zero, to have a
-         positive peak (usually unity) at zero, and to evaluate to zero
-         whenever the pixel offset has any other integral value (this
-         ensures that the interpolated values pass through the original
-         data). An interpolation kernel may or may not have regions with
-         negative values. You should consult a good book on image
-         processing for more details.
-
-         \sstitem
-         If an error occurs within this function, it should use
-         \htmlref{astSetStatus}{astSetStatus} to set the AST error status to an error value.
-         This will cause an immediate return from astResample$<$X$>$. The error
-         value AST\_\_UK1ER is available for this purpose, but other values may
-         also be used (e.g. if you wish to distinguish different types of
-         error).
-      }
-   }
-}
-\sstroutine{
-   astUnformat\sstlabel{astUnformat}
-}{
-   Read a formatted coordinate value for a Frame axis
-}{
-   \sstdescription{
-      This function reads a formatted coordinate value (given as a
-      character string) for a \htmlref{Frame}{Frame} axis and returns the equivalent
-      numerical (double) value. It also returns the number of
-      characters read from the string.
-
-      The principle use of this function is in decoding user-supplied
-      input which contains formatted coordinate values. Free-format
-      input is supported as far as possible. If input is ambiguous, it
-      is interpreted with reference to the Frame's attributes (in
-      particular, the Format string associated with the Frame's
-      axis). This function is, in essence, the inverse of \htmlref{astFormat}{astFormat}.
-   }
-   \sstsynopsis{
-      int astUnformat( AstFrame $*$this, int axis, const char $*$string,
-                       double $*$value )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Frame.
-      }
-      \sstsubsection{
-         axis
-      }{
-         The number of the Frame axis for which a coordinate value is to
-         be read (axis numbering starts at 1 for the first axis).
-      }
-      \sstsubsection{
-         string
-      }{
-         Pointer to a null-terminated character string containing the
-         formatted coordinate value.
-         This string may contain additional information following the
-         value to be read, in which case reading stops at the first
-         character which cannot be interpreted as part of the value.
-         Any white space before or after the value is discarded.
-      }
-      \sstsubsection{
-         value
-      }{
-         Pointer to a double in which the coordinate value read will be
-         returned.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         This function applies to all Frames. See the {\tt{"}}Frame Input
-         Format{\tt{"}} section below for details of the input formats
-         accepted by a basic Frame.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the input format to be suitable
-         for representing angles and times, with the resulting
-         coordinate value returned in radians.  See the {\tt{"}}SkyFrame
-         Input Format{\tt{"}} section below for details of the formats
-         accepted.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The input formats accepted by a FrameSet are determined by
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astUnformat()
-      }{
-         The number of characters read from the string in order to
-         obtain the coordinate value. This will include any white
-         space which occurs before or after the value.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A function value of zero (and no coordinate value) will be
-         returned, without error, if the string supplied does not contain
-         a suitably formatted value.
-
-         \sstitem
-         Beware that it is possible for a formatting error part-way
-         through an input string to terminate input before it has been
-         completely read, but to yield a coordinate value that appears
-         valid. For example, if a user types {\tt{"}}1.5r6{\tt{"}} instead of {\tt{"}}1.5e6{\tt{"}},
-         the {\tt{"}}r{\tt{"}} will terminate input, giving an incorrect coordinate
-         value of 1.5. It is therefore most important to check the return
-         value of this function to ensure that the correct number of
-         characters have been read.
-
-         \sstitem
-         An error will result if a value is read which appears to have
-         the correct format, but which cannot be converted into a valid
-         coordinate value (for instance, because the value of one or more
-         of its fields is invalid).
-
-         \sstitem
-         The string {\tt{"}}$<$bad$>${\tt{"}} is recognised as a special case and will
-         yield the coordinate value AST\_\_BAD without error. The test for
-         this string is case-insensitive and also permits embedded white
-         space.
-
-         \sstitem
-         A function result of zero will be returned and no coordinate
-         value will be returned via the {\tt{"}}value{\tt{"}} pointer if this function
-         is invoked with the AST error status set, or if it should fail
-         for any reason.
-      }
-   }
-   \sstdiytopic{
-      Frame Input Format
-   }{
-      The input format accepted for a basic Frame axis is as follows:
-      \sstitemlist{
-
-         \sstitem
-         An optional sign, followed by:
-
-         \sstitem
-         A sequence of one or more digits possibly containing a decimal point,
-         followed by:
-
-         \sstitem
-         An optional exponent field.
-
-         \sstitem
-         The exponent field, if present, consists of {\tt{"}}E{\tt{"}} or {\tt{"}}e{\tt{"}}
-         followed by a possibly signed integer.
-
-      }
-      Examples of acceptable Frame input formats include:
-      \sstitemlist{
-
-         \sstitem
-         99
-
-         \sstitem
-         1.25
-
-         \sstitem
-         -1.6
-
-         \sstitem
-         1E8
-
-         \sstitem
-         -.99e-17
-
-         \sstitem
-         $<$bad$>$
-      }
-   }
-   \sstdiytopic{
-      SkyFrame Input Format
-   }{
-      The input format accepted for a SkyFrame axis is as follows:
-      \sstitemlist{
-
-         \sstitem
-         An optional sign, followed by between one and three fields
-         representing either degrees, arc-minutes, arc-seconds or hours,
-         minutes, seconds (e.g. {\tt{"}}-12 42 03{\tt{"}}).
-
-         \sstitem
-         Each field should consist of a sequence of one or more digits,
-         which may include leading zeros. At most one field may contain a
-         decimal point, in which case it is taken to be the final field
-         (e.g. decimal degrees might be given as {\tt{"}}124.707{\tt{"}}, while degrees
-         and decimal arc-minutes might be given as {\tt{"}}-13 33.8{\tt{"}}).
-
-         \sstitem
-         The first field given may take any value, allowing angles and
-         times outside the conventional ranges to be
-         represented. However, subsequent fields must have values of less
-         than 60 (e.g. {\tt{"}}720 45 31{\tt{"}} is valid, whereas {\tt{"}}11 45 61{\tt{"}} is not).
-
-         \sstitem
-         Fields may be separated by white space or by {\tt{"}}:{\tt{"}} (colon), but
-         the choice of separator must be used consistently throughout the
-         value. Additional white space may be present around fields and
-         separators (e.g. {\tt{"}}- 2: 04 : 7.1{\tt{"}}).
-
-         \sstitem
-         The following field identification characters may be used as
-         separators to replace either of those above (or may be appended
-         to the final field), in order to identify the field to which
-         they are appended: {\tt{"}}d{\tt{"}}---degrees; {\tt{"}}h{\tt{"}}---hours; {\tt{"}}m{\tt{"}}---minutes of
-         arc or time; {\tt{"}}s{\tt{"}}---seconds of arc or time; {\tt{"}}'{\tt{"}} (single
-         quote)---minutes of arc; {\tt{"}}{\tt{"}}{\tt{"}} (double quote)---seconds of arc.
-         Either lower or upper case may be used.  Fields must be given in
-         order of decreasing significance (e.g. {\tt{"}}-11D 3' 14.4{\tt{"}}{\tt{"}} or
-         {\tt{"}}22h14m11.2s{\tt{"}}).
-
-         \sstitem
-         The presence of any of the field identification characters
-         {\tt{"}}d{\tt{"}}, {\tt{"}}'{\tt{"}} (single quote) or {\tt{"}}{\tt{"}}{\tt{"}} (double quote) indicates that the
-         value is to be interpreted as an angle. Conversely, the presence
-         of {\tt{"}}h{\tt{"}} indicates that it is to be interpreted as a time (with 24
-         hours corresponding to 360 degrees). Incompatible angle/time
-         identification characters may not be mixed (e.g. {\tt{"}}10h14'3{\tt{"}}{\tt{"}} is
-         not valid).  The remaining field identification characters and
-         separators do not specify a preference for an angle or a time
-         and may be used with either.
-
-         \sstitem
-         If no preference for an angle or a time is expressed anywhere
-         within the value, it is interpreted as an angle if the Format
-         attribute string associated with the SkyFrame axis generates an
-         angle and as a time otherwise. This ensures that values produced
-         by astFormat are correctly interpreted by astUnformat.
-
-         \sstitem
-         Fields may be omitted, in which case they default to zero. The
-         remaining fields may be identified by using appropriate field
-         identification characters (see above) and/or by adding extra
-         colon separators (e.g. {\tt{"}}-05m13s{\tt{"}} is equivalent to {\tt{"}}-:05:13{\tt{"}}). If
-         a field is not identified explicitly, it is assumed that
-         adjacent fields have been given, after taking account of any
-         extra separator characters (e.g. {\tt{"}}14:25.4s{\tt{"}} specifies minutes
-         and seconds, while {\tt{"}}14::25.4s{\tt{"}} specifies degrees and seconds).
-
-         \sstitem
-         If fields are omitted in such a way that the remaining ones
-         cannot be identified uniquely (e.g. {\tt{"}}01:02{\tt{"}}), then the first
-         field (either given explicitly or implied by an extra leading
-         colon separator) is taken to be the most significant field that
-         astFormat would produce when formatting a value (using the
-         Format attribute associated with the SkyFrame axis).  By
-         default, this means that the first field will normally be
-         interpreted as degrees or hours. However, if this does not
-         result in consistent field identification, then the last field
-         (either given explicitly or implied by an extra trailing colon
-         separator) is taken to to be the least significant field that
-         astFormat would produce.
-
-      }
-      This final convention is intended to ensure that values formatted
-      by astFormat which contain less than three fields will be
-      correctly interpreted if read back using astUnformat, even if
-      they do not contain field identification characters.
-
-      Examples of acceptable SkyFrame input formats (with
-      interpretation in parentheses) include:
-      \sstitemlist{
-
-         \sstitem
-         -14d 13m 22.2s (-14d 13' 22.2{\tt{"}})
-
-         \sstitem
-         $+$ 12:34:56.7 (12d 34' 56.7{\tt{"}} or 12h 34m 56.7s)
-
-         \sstitem
-         001 : 02 : 03.4 (1d 02' 03.4{\tt{"}} or 1h 02m 03.4s)
-
-         \sstitem
-         22h 30 (22h 30m 00s)
-
-         \sstitem
-         136::10{\tt{"}} (136d 00' 10{\tt{"}} or 136h 00m 10s)
-
-         \sstitem
-         -14M 27S (-0d 14' 27{\tt{"}} or -0h 14m 27s)
-
-         \sstitem
-         -:14: (-0d 14' 00{\tt{"}} or -0h 14m 00s)
-
-         \sstitem
-         -::4.1 (-0d 00' 04.1{\tt{"}} or -0h 00m 04.1s)
-
-         \sstitem
-         .9{\tt{"}} (0d 00' 00.9{\tt{"}})
-
-         \sstitem
-         d12m (0d 12' 00{\tt{"}})
-
-         \sstitem
-         H 12:22.3s (0h 12m 22.3s)
-
-         \sstitem
-         $<$bad$>$ (AST\_\_BAD)
-
-      }
-      Where alternative interpretations are shown, the choice of angle or
-      time depends on the associated \htmlref{Format(axis)}{Formataxis} attribute.
-   }
-}
-\sstroutine{
-   astUnitMap\sstlabel{astUnitMap}
-}{
-   Create a UnitMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{UnitMap}{UnitMap} and optionally initialises
-      its attributes.
-
-      A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
-      coordinates supplied to it. They are simply copied. This can be
-      useful if a Mapping is required (e.g. to pass to another
-      function) but you do not want it to have any effect.
-   }
-   \sstsynopsis{
-      AstUnitMap $*$astUnitMap( int ncoord, const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         ncoord
-      }{
-         The number of input and output coordinates (these numbers are
-         necessarily the same).
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new UnitMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astUnitMap()
-      }{
-         A pointer to the new UnitMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astUnlock\sstlabel{astUnlock}
-}{
-   Unlock an Object for use by other threads
-}{
-   \sstdescription{
-      Unlocks an \htmlref{Object}{Object} previously locked using \htmlref{astLock}{astLock}, so that other
-      threads can use the Object. See astLock for further details.
-   }
-   \sstsynopsis{
-      void astUnlock( AstObject $*$this, int report )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Object to be unlocked.
-      }
-      \sstsubsection{
-         report
-      }{
-         If non-zero, an error will be reported if the supplied Object,
-         or any Object contained within the supplied Object, is not
-         currently locked by the running thread. If zero, such Objects
-         will be left unchanged, and no error will be reported.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         This function applies to all Objects.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function attempts to execute even if the global error
-         status is set, but no further error report will be made if it
-         subsequently fails under these circumstances.
-
-         \sstitem
-         All unlocked Objects are excluded from AST context handling until
-         they are re-locked using astLock.
-
-         \sstitem
-         This function is only available in the C interface.
-
-         \sstitem
-         This function returns without action if the Object is not currently
-         locked by any thread. If it is locked by the running thread, it is
-         unlocked. If it is locked by another thread, an error will be reported
-         if {\tt{"}}error{\tt{"}} is non-zero.
-
-         \sstitem
-         This function returns without action if the AST library has
-         been built without POSIX thread support (i.e. the {\tt{"}}-with-pthreads{\tt{"}}
-         option was not specified when running the {\tt{"}}configure{\tt{"}} script).
-      }
-   }
-}
-\sstroutine{
-   astVersion\sstlabel{astVersion}
-}{
-   Return the version of the AST library being used
-}{
-   \sstdescription{
-      This macro invokes a function which
-      returns an integer representing the version of the AST library
-      being used. The library version is formatted as a string such as
-      {\tt{"}}2.0-7{\tt{"}} which contains integers representing the {\tt{"}}major version{\tt{"}} (2),
-      the {\tt{"}}minor version{\tt{"}} (0) and the {\tt{"}}release{\tt{"}} (7). The integer returned
-      by this function combines all three integers together into a single
-      integer using the expresion:
-
-      (major version)$*$1E6 $+$ (minor version)$*$1E3 $+$ (release)
-   }
-   \sstsynopsis{
-      int astVersion
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Object}{Object}
-      }{
-         This macro applies to all Objects.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astVersion
-      }{
-         The major version, minor version and release numbers for the AST
-         library, encoded as a single integer.
-      }
-   }
-}
-\sstroutine{
-   astWarnings\sstlabel{astWarnings}
-}{
-   Returns any warnings issued by the previous read or write operation
-}{
-   \sstdescription{
-      This function returns an AST \htmlref{KeyMap}{KeyMap} object holding the text of any
-      warnings issued as a result of the previous invocation of the
-      \htmlref{astRead}{astRead} or \htmlref{astWrite}{astWrite}
-      function on the \htmlref{Channel}{Channel}. If no warnings were issued, a
-      a NULL value
-      will be returned.
-
-      Such warnings are non-fatal and will not prevent the
-      read or write operation succeeding. However, the converted object
-      may not be identical to the original object in all respects.
-      Differences which would usually be deemed as insignificant in most
-      usual cases will generate a warning, whereas more significant
-      differences will generate an error.
-
-      The {\tt{"}}\htmlref{Strict}{Strict}{\tt{"}} attribute allows this warning facility to be switched
-      off, so that a fatal error is always reported for any conversion
-      error.
-   }
-   \sstsynopsis{
-      AstKeyMap $*$astWarnings( AstChannel $*$this )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Channel.
-      }
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         The basic Channel class generates a warning when ever an
-         un-recognised item is encountered whilst reading an \htmlref{Object}{Object} from
-         an external data source. If Strict is zero (the default), then
-         unexpected items in the Object description are simply ignored,
-         and any remaining items are used to construct the returned
-         Object. If Strict is non-zero, an error will be reported and a
-         NULL Object pointer returned if any unexpected items are
-         encountered.
-
-         As AST continues to be developed, new attributes are added
-         occasionally to selected classes. If an older version of AST is
-         used to read external Object descriptions created by a more
-         recent version of AST, then the Channel class will, by default,
-         ignore the new attributes, using the remaining attributes to
-         construct the Object. This is usually a good thing. However,
-         since external Object descriptions are often stored in plain
-         text, it is possible to edit them using a text editor. This
-         gives rise to the possibility of genuine errors in the
-         description due to finger-slips, typos, or simple
-         mis-understanding. Such inappropriate attributes will be ignored
-         if Strict is left at its default zero value. This will cause the
-         mis-spelled attribute to revert to its default value,
-         potentially causing subtle changes in the behaviour of
-         application software. If such an effect is suspected, the Strict
-         attribute can be set non-zero, resulting in the erroneous
-         attribute being identified in an error message.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The returned KeyMap will contain warnings for all conditions
-         listed in the \htmlref{Warnings}{Warnings} attribute.
-      }
-      \sstsubsection{
-         \htmlref{XmlChan}{XmlChan}
-      }{
-         Reports conversion errors that result in what are usally
-         insignificant  changes.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astWarnings()
-      }{
-         A pointer to the KeyMap holding the warning messages, or
-         NULL
-         if no warnings were issued during the previous read operation.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The returned KeyMap uses keys of the form {\tt{"}}Warning\_1{\tt{"}},
-         {\tt{"}}Warning\_2{\tt{"}}, etc.
-
-         \sstitem
-         A value of
-         NULL will be returned if this function is invoked with the AST
-         error status set,
-         or if it should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astWatch\sstlabel{astWatch}
-}{
-   Identify a new error status variable for the AST library
-}{
-   \sstdescription{
-      This function allows a new error status variable to be accessed
-      by the AST library when checking for and reporting error
-      conditions.
-
-      By default, the library uses an internal integer error status
-      which is set to an error value if an error occurs. Use of
-      astWatch allows the internal error status to be replaced by an
-      integer variable of your choosing, so that the AST library can
-      share its error status directly with other code which uses the
-      same error detection convention.
-
-      If an alternative error status variable is supplied, it is used
-      by all related AST functions and macros (e.g. \htmlref{astOK}{astOK}, \htmlref{astStatus}{astStatus}
-      and \htmlref{astClearStatus}{astClearStatus}).
-   }
-   \sstsynopsis{
-      int $*$astWatch( int $*$status\_ptr )
-   }
-   \sstparameters{
-      \sstsubsection{
-         status\_ptr
-      }{
-         Pointer to an int whose value is to be used subsequently as
-         the AST inherited status value. If a NULL pointer is supplied,
-         the AST library will revert to using its own internal error status.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astWatch()
-      }{
-         Address of the previous error status variable. This may later
-         be passed back to astWatch to restore the previous behaviour
-         of the library. (Note that on the first invocation of
-         astWatch the returned value will be the address of the
-         internal error status variable.)
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This function is not available in the FORTRAN 77 interface to
-         the AST library.
-      }
-   }
-}
-\sstroutine{
-   astWcsMap\sstlabel{astWcsMap}
-}{
-   Create a WcsMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{WcsMap}{WcsMap} and optionally initialises its
-      attributes.
-
-      A WcsMap is used to represent sky coordinate projections as
-      described in the (draft) FITS world coordinate system (FITS-WCS)
-      paper by E.W. Griesen and M. Calabretta (A \& A, in preparation).
-      This paper defines a set of functions, or sky projections, which
-      transform longitude-latitude pairs representing spherical
-      celestial coordinates into corresponding pairs of Cartesian
-      coordinates (and vice versa).
-
-      A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
-      sky projections and applies them to a specified pair of coordinates.
-      All the projections in the FITS-WCS paper are supported, plus the now
-      deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
-      is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
-      the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
-      plane{\tt{"}} coordinates.  These coordinates may, optionally, be embedded in
-      a space with more than two dimensions, the remaining coordinates being
-      copied unchanged. Note, however, that for consistency with other AST
-      facilities, a WcsMap handles coordinates that represent angles
-      in radians (rather than the degrees used by FITS-WCS).
-
-      The type of FITS-WCS projection to be used and the coordinates
-      (axes) to which it applies are specified when a WcsMap is first
-      created. The projection type may subsequently be determined
-      using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
-      may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
-      Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
-      associated with each axis. These specify the precise form of the
-      projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
-      the integer axis index (starting at 1), and m is an integer
-      {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
-      parameters required by each projection, and their meanings, are
-      dependent upon the projection type (most projections either do not
-      use any projection parameters, or use parameters 1 and 2 associated
-      with the latitude axis). Before creating a WcsMap you should consult
-      the FITS-WCS paper for details of which projection parameters are
-      required, and which have defaults. When creating the WcsMap, you must
-      explicitly set values for all those required projection parameters
-      which do not have defaults defined in this paper.
-   }
-   \sstsynopsis{
-      AstWcsMap $*$astWcsMap( int ncoord, int type, int lonax, int latax,
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). This must be at least 2. The
-         same number is applicable to both input and output points.
-      }
-      \sstsubsection{
-         type
-      }{
-         The type of FITS-WCS projection to apply. This should be
-         given using a macro value such as AST\_\_TAN (for a tangent
-         plane projection), where the characters following the double
-         underscore give the projection type code (in upper case) as
-         used in the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword. You should consult the
-         FITS-WCS paper for a list of the available projections. The
-         additional code of AST\_\_TPN can be supplied which represents a
-         TAN projection with polynomial correction terms as defined in an
-         early draft of the FITS-WCS paper.
-      }
-      \sstsubsection{
-         lonax
-      }{
-         The index of the longitude axis. This should lie in the range
-         1 to {\tt{"}}ncoord{\tt{"}}.
-      }
-      \sstsubsection{
-         latax
-      }{
-         The index of the latitude axis. This should lie in the range
-         1 to {\tt{"}}ncoord{\tt{"}} and be distinct from {\tt{"}}lonax{\tt{"}}.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new WcsMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-
-         If the sky projection to be implemented requires projection
-         parameter values to be set, then this should normally be done
-         here via the PVi\_m attribute (see the {\tt{"}}Examples{\tt{"}}
-         section). Setting values for these parameters is mandatory if
-         they do not have default values (as defined in the FITS-WCS
-         paper).
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astWcsMap()
-      }{
-         A pointer to the new WcsMap.
-      }
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         wcsmap = astWcsMap( 2, AST\_\_MER, 1, 2, {\tt{"}}{\tt{"}} );
-      }{
-         Creates a WcsMap that implements a FITS-WCS Mercator
-         projection on pairs of coordinates, with coordinates 1 and 2
-         representing the longitude and latitude respectively. Note
-         that the FITS-WCS Mercator projection does not require any
-         projection parameters.
-      }
-      \sstexamplesubsection{
-         wcsmap = astWcsMap( 3, AST\_\_COE, 2, 3, {\tt{"}}PV3\_1=40.0{\tt{"}} );
-      }{
-         Creates a WcsMap that implements a FITS-WCS conical equal
-         area projection. The WcsMap acts on points in a 3-dimensional
-         space; coordinates 2 and 3 represent longitude and latitude
-         respectively, while the values of coordinate 1 are copied
-         unchanged.  \htmlref{Projection}{Projection} parameter 1 associatyed with the latitude
-         axis (corresponding to FITS keyword {\tt{"}}PV3\_1{\tt{"}}) is required and has
-         no default, so is set explicitly to 40.0 degrees. Projection
-         parameter 2 (corresponding to FITS keyword {\tt{"}}PV3\_2{\tt{"}}) is required
-         but has a default of zero, so need not be specified.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The forward transformation of a WcsMap converts between
-         FITS-WCS {\tt{"}}native spherical{\tt{"}} and {\tt{"}}relative physical{\tt{"}} coordinates,
-         while the inverse transformation converts in the opposite
-         direction. This arrangement may be reversed, if required, by
-         using \htmlref{astInvert}{astInvert} or by setting the \htmlref{Invert}{Invert} attribute to a non-zero
-         value.
-
-         \sstitem
-         If any set of coordinates cannot be transformed (for example,
-         many projections do not cover the entire celestial sphere), then
-         a WcsMap will yield coordinate values of AST\_\_BAD.
-
-         \sstitem
-         The validity of any projection parameters given via the PVi\_m
-         parameter in the {\tt{"}}options{\tt{"}} string is not checked by this
-         function. However, their validity is checked when the resulting
-         WcsMap is used to transform coordinates, and an error will
-         result if the projection parameters do not satisfy all the
-         required constraints (as defined in the FITS-WCS paper).
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astWinMap\sstlabel{astWinMap}
-}{
-   Create a WinMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{WinMap}{WinMap} and optionally initialises its
-      attributes.
-
-      A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
-      window in one coordinate system into a similar window in another
-      coordinate system by scaling and shifting each axis (the window
-      edges being parallel to the coordinate axes).
-
-      A WinMap is specified by giving the coordinates of two opposite
-      corners (A and B) of the window in both the input and output
-      coordinate systems.
-   }
-   \sstsynopsis{
-      AstWinMap $*$astWinMap( int ncoord,
-                            const double ina[],  const double inb[],
-                            const double outa[], const double outb[],
-                            const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). The same number is applicable
-         to both input and output points.
-      }
-      \sstsubsection{
-         ina
-      }{
-         An array containing the {\tt{"}}ncoord{\tt{"}}
-         coordinates of corner A of the window in the input coordinate
-         system.
-      }
-      \sstsubsection{
-         inb
-      }{
-         An array containing the {\tt{"}}ncoord{\tt{"}}
-         coordinates of corner B of the window in the input coordinate
-         system.
-      }
-      \sstsubsection{
-         outa
-      }{
-         An array containing the {\tt{"}}ncoord{\tt{"}}
-         coordinates of corner A of the window in the output coordinate
-         system.
-      }
-      \sstsubsection{
-         outb
-      }{
-         An array containing the {\tt{"}}ncoord{\tt{"}}
-         coordinates of corner B of the window in the output coordinate
-         system.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new WinMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astWinMap()
-      }{
-         A pointer to the new WinMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\sstroutine{
-   astWrite\sstlabel{astWrite}
-}{
-   Write an Object to a Channel
-}{
-   \sstdescription{
-      This function writes an \htmlref{Object}{Object} to a \htmlref{Channel}{Channel}, appending it to any
-      previous Objects written to that Channel.
-   }
-   \sstsynopsis{
-      int astWrite( AstChannel $*$this, AstObject $*$object )
-   }
-   \sstparameters{
-      \sstsubsection{
-         this
-      }{
-         Pointer to the Channel.
-      }
-      \sstsubsection{
-         object
-      }{
-         Pointer to the Object which is to be written.
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astWrite()
-      }{
-         The number of Objects written to the Channel by this
-         invocation of astWrite (normally, this will be one).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A value of zero will be returned if this function is invoked
-         with the AST error status set, or if it should fail for any
-         reason.
-
-         \sstitem
-         Invoking this function will usually cause the sink function
-         associated with the channel to be called in order to transfer a
-         textual description of the supplied object to some external data
-         store. However, the \htmlref{FitsChan}{FitsChan} class behaves differently. Invoking
-         this function on a FitsChan causes new FITS header cards to be
-         added to an internal buffer (the sink function is not invoked).
-         This buffer is written out through the sink function only when the
-         FitsChan is deleted.
-      }
-   }
-}
-\sstroutine{
-   astXmlChan\sstlabel{astXmlChan}
-}{
-   Create an XmlChan
-}{
-   \sstdescription{
-      This function creates a new \htmlref{XmlChan}{XmlChan} and optionally initialises
-      its attributes.
-
-      A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
-      operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
-      \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
-      XML description of that Object, and reading from an XmlChan will
-      create a new Object from its XML description.
-
-      Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
-      by reading and writing the resulting XML text. By default, however,
-      a Channel will read from standard input and write to standard
-      output.
-   }
-   \sstsynopsis{
-      AstXmlChan $*$astXmlChan( const char $*$($*$ source)( void ),
-                              void ($*$ sink)( const char $*$ ),
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         source
-      }{
-         Pointer to a source function that takes no arguments and
-         returns a pointer to a null-terminated string.  This function
-         will be used by the XmlChan to obtain lines of input text. On
-         each invocation, it should return a pointer to the next input
-         line read from some external XML data store, and a NULL pointer
-         when there are no more lines to read.
-
-         If {\tt{"}}source{\tt{"}} is NULL, the Channel will read from standard
-         input instead.
-      }
-      \sstsubsection{
-         sink
-      }{
-         Pointer to a sink function that takes a pointer to a
-         null-terminated string as an argument and returns void.  This
-         function will be used by the XmlChan to deliver lines of
-         output text. On each invocation, it should deliver the
-         contents of the string supplied to some external XML data store.
-
-         If {\tt{"}}sink{\tt{"}} is NULL, the XmlChan will write to standard output
-         instead.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new XmlChan. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astXmlChan()
-      }{
-         A pointer to the new XmlChan.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the external data source or sink uses a character encoding
-         other than ASCII, the supplied source and sink functions should
-         translate between the external character encoding and the internal
-         ASCII encoding used by AST.
-
-         \sstitem
-         A null Object pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-}
-\sstroutine{
-   astZoomMap\sstlabel{astZoomMap}
-}{
-   Create a ZoomMap
-}{
-   \sstdescription{
-      This function creates a new \htmlref{ZoomMap}{ZoomMap} and optionally initialises its
-      attributes.
-
-      A ZoomMap is a \htmlref{Mapping}{Mapping} which {\tt{"}}zooms{\tt{"}} a set of points about the
-      origin by multiplying all coordinate values by the same scale
-      factor (the inverse transformation is performed by dividing by
-      this scale factor).
-   }
-   \sstsynopsis{
-      AstZoomMap $*$astZoomMap( int ncoord, double zoom,
-                              const char $*$options, ... )
-   }
-   \sstparameters{
-      \sstsubsection{
-         ncoord
-      }{
-         The number of coordinate values for each point to be
-         transformed (i.e. the number of dimensions of the space in
-         which the points will reside). The same number is applicable
-         to both input and output points.
-      }
-      \sstsubsection{
-         zoom
-      }{
-         Initial scale factor by which coordinate values should be
-         multiplied (by the forward transformation) or divided (by the
-         inverse transformation). This factor may subsequently be
-         changed via the ZoomMap's \htmlref{Zoom}{Zoom} attribute. It may be positive
-         or negative, but should not be zero.
-      }
-      \sstsubsection{
-         options
-      }{
-         Pointer to a null-terminated string containing an optional
-         comma-separated list of attribute assignments to be used for
-         initialising the new ZoomMap. The syntax used is identical to
-         that for the \htmlref{astSet}{astSet} function and may include {\tt{"}}printf{\tt{"}} format
-         specifiers identified by {\tt{"}}\%{\tt{"}} symbols in the normal way.
-      }
-      \sstsubsection{
-         ...
-      }{
-         If the {\tt{"}}options{\tt{"}} string contains {\tt{"}}\%{\tt{"}} format specifiers, then
-         an optional list of additional arguments may follow it in
-         order to supply values to be substituted for these
-         specifiers. The rules for supplying these are identical to
-         those for the astSet function (and for the C {\tt{"}}printf{\tt{"}}
-         function).
-      }
-   }
-   \sstreturnedvalue{
-      \sstsubsection{
-         astZoomMap()
-      }{
-         A pointer to the new ZoomMap.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A null \htmlref{Object}{Object} pointer (AST\_\_NULL) will be returned if this
-         function is invoked with the AST error status set, or if it
-         should fail for any reason.
-      }
-   }
-   \sstdiytopic{
-      Status Handling
-   }{
-      The protected interface to this function includes an extra
-      parameter at the end of the parameter list descirbed above. This
-      parameter is a pointer to the integer inherited status
-      variable: {\tt{"}}int $*$status{\tt{"}}.
-   }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:attributedescriptions}AST Attribute Descriptions}
-\small
-\sstroutine{
-   Abbrev(axis)\sstlabel{Abbrevaxis}
-}{
-   Abbreviate leading fields within numerical axis labels?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether matching leading fields should be removed from adjacent
-      numerical axis labels. It takes a separate value for each physical
-      axis of a \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}Abbrev(2)=0{\tt{"}}
-      specifies that matching leading fields should not be removed on
-      the second axis.
-
-      If the Abbrev value of a Plot is non-zero (the default), then
-      leading fields will be removed from adjacent axis labels if they
-      are equal.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}Abbrev{\tt{"}} instead of
-         {\tt{"}}Abbrev(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the Abbrev(1) value.
-      }
-   }
-}
-\sstroutine{
-   Adaptive\sstlabel{Adaptive}
-}{
-   Should the area adapt to changes in the coordinate system?
-}{
-   \sstdescription{
-      The coordinate system represented by a \htmlref{Region}{Region} may be changed by
-      assigning new values to attributes such as \htmlref{System}{System}, Unit, etc.
-      For instance, a Region representing an area on the sky in ICRS
-      coordinates may have its System attribute changed so that it
-      represents (say) Galactic coordinates instead of ICRS. This
-      attribute controls what happens when the coordinate system
-      represented by a Region is changed in this way.
-
-      If Adaptive is non-zero (the default), then area represented by the
-      Region adapts to the new coordinate system. That is, the numerical
-      values which define the area represented by the Region are changed
-      by mapping them from the old coordinate system into the new coordinate
-      system. Thus the Region continues to represent the same physical
-      area.
-
-      If Adaptive is zero, then area represented by the Region does not adapt
-      to the new coordinate system. That is, the numerical values which
-      define the area represented by the Region are left unchanged. Thus
-      the physical area represented by the Region will usually change.
-
-      As an example, consider a Region describe a range of wavelength from
-      2000 Angstrom to 4000 Angstrom. If the Unit attribute for the Region
-      is changed from Angstrom to {\tt{"}}nm{\tt{"}} (nanometre), what happens depends
-      on the setting of Adaptive. If Adaptive is non-zero, the \htmlref{Mapping}{Mapping}
-      from the old to the new coordinate system is found. In this case it
-      is a simple scaling by a factor of 0.1 (since 1 Angstrom is 0.1 nm).
-      This Mapping is then used to modify the numerical values within the
-      Region, changing 2000 to 200 and 4000 to 400. Thus the modified
-      region represents 200 nm to 400 nm, the same physical space as
-      the original 2000 Angstrom to 4000 Angstrom. However, if Adaptive
-      had been zero, then the numerical values would not have been changed,
-      resulting in the final Region representing 2000 nm to 4000 nm.
-
-      Setting Adaptive to zero can be necessary if you want correct
-      inaccurate attribute settings in an existing Region. For instance,
-      when creating a Region you may not know what \htmlref{Epoch}{Epoch} value to use, so
-      you would leave Epoch unset resulting in some default value being used.
-      If at some later point in the application, the correct Epoch value
-      is determined, you could assign the correct value to the Epoch
-      attribute. However, you would first need to set Adaptive temporarily
-      to zero, because otherwise the area represented by the Region would
-      be Mapped from the spurious default Epoch to the new correct Epoch,
-      which is not what is required.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignOffset\sstlabel{AlignOffset}
-}{
-   Align SkyFrames using the offset coordinate system?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{SkyFrame}{SkyFrame}
-      behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
-      SkyFrame. It determines the coordinate system in which the two
-      SkyFrames are aligned if a match occurs.
-
-      If the template and target SkyFrames both have defined offset coordinate
-      systems (i.e. the \htmlref{SkyRefIs}{SkyRefIs} attribute is set to either {\tt{"}}Origin{\tt{"}} or {\tt{"}}
-      Pole{\tt{"}}), and they both have a non-zero value for AlignOffset, then
-      alignment occurs within the offset coordinate systems (that is, a
-      \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames). If either
-      the template or target SkyFrame has zero (the default value) for
-      AlignOffset, or if either SkyFrame has SkyRefIs set to {\tt{"}}Ignored{\tt{"}}, then
-      alignment occurring within the coordinate system specified by the
-      \htmlref{AlignSystem}{AlignSystem} attribute.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignSideBand\sstlabel{AlignSideBand}
-}{
-   Should the SideBand attribute be taken into account when aligning
-   this \htmlref{DSBSpecFrame}{DSBSpecFrame} with another DSBSpecFrame?
-}{
-   \sstdescription{
-      This attribute controls how a DSBSpecFrame behaves when an attempt
-      is made to align it with another DSBSpecFrame using
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}.
-      If both DSBSpecFrames have a non-zero value for AlignSideBand, the
-      value of the \htmlref{SideBand}{SideBand} attribute in each DSBSpecFrame is used so that
-      alignment occurs between sidebands. That is, if one DSBSpecFrame
-      represents USB and the other represents LSB then
-      astFindFrame and astConvert
-      will recognise that the DSBSpecFrames represent different sidebands
-      and will take this into account when constructing the \htmlref{Mapping}{Mapping} that
-      maps positions in one DSBSpecFrame into the other. If AlignSideBand
-      in either DSBSpecFrame is set to zero, then the values of the SideBand
-      attributes are ignored. In the above example, this would result in a
-      frequency in the first DSBSpecFrame being mapped onto the same
-      frequency in the second DSBSpecFrame, even though those frequencies
-      refer to different sidebands. In other words, if either AlignSideBand
-      attribute is zero, then the two DSBSpecFrames aligns like basic
-      SpecFrames. The default value for AlignSideBand is zero.
-
-      When astFindFrame or astConvert
-      is used on two DSBSpecFrames (potentially describing different spectral
-      coordinate systems and/or sidebands), it returns a Mapping which can be
-      used to transform a position in one DSBSpecFrame into the corresponding
-      position in the other. The Mapping is made up of the following steps in
-      the indicated order:
-
-      \sstitemlist{
-
-         \sstitem
-         If both DSBSpecFrames have a value of 1 for the AlignSideBand
-         attribute, map values from the target's current sideband (given by its
-         SideBand attribute) to the observed sideband (whether USB or LSB). If
-         the target already represents the observed sideband, this step will
-         leave the values unchanged. If either of the two DSBSpecFrames have a
-         value of zero for its AlignSideBand attribute, then this step is omitted.
-
-         \sstitem
-         Map the values from the spectral system of the target to the spectral
-         system of the template. This Mapping takes into account all the
-         inherited \htmlref{SpecFrame}{SpecFrame} attributes such as \htmlref{System}{System}, \htmlref{StdOfRest}{StdOfRest}, Unit, etc.
-
-         \sstitem
-         If both DSBSpecFrames have a value of 1 for the AlignSideBand
-         attribute, map values from the result's observed sideband to the
-         result's current sideband (given by its SideBand attribute). If the
-         result already represents the observed sideband, this step will leave
-         the values unchanged. If either of the two DSBSpecFrames have a value
-         of zero for its AlignSideBand attribute, then this step is omitted.
-      }
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         DSBSpecFrame
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignSpecOffset\sstlabel{AlignSpecOffset}
-}{
-   Align SpecFrames using the offset coordinate system?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{SpecFrame}{SpecFrame}
-      behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
-      SpecFrame. It determines whether alignment occurs between the offset
-      values defined by the current value of the SpecOffset attribute, or
-      between the corresponding absolute spectral values.
-
-      The default value of zero results in the two SpecFrames being aligned
-      so that a given absolute spectral value in one is mapped to the same
-      absolute value in the other. A non-zero value results in the SpecFrames
-      being aligned so that a given offset value in one is mapped to the same
-      offset value in the other.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignStdOfRest\sstlabel{AlignStdOfRest}
-}{
-   Standard of rest to use when aligning SpecFrames
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{SpecFrame}{SpecFrame} behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
-      SpecFrame. It identifies the standard of rest in which alignment is
-      to occur. See the \htmlref{StdOfRest}{StdOfRest} attribute for a desription of the values
-      which may be assigned to this attribute. The default AlignStdOfRest
-      value is {\tt{"}}Helio{\tt{"}} (heliographic).
-
-      When astFindFrame or astConvert is used on two SpecFrames (potentially
-      describing different spectral coordinate systems), it returns a \htmlref{Mapping}{Mapping}
-      which can be used to transform a position in one SpecFrame into the
-      corresponding position in the other. The Mapping is made up of the
-      following steps in the indicated order:
-
-      \sstitemlist{
-
-         \sstitem
-         Map values from the system used by the target (wavelength,
-         apparent radial velocity, etc) to the system specified by the
-         \htmlref{AlignSystem}{AlignSystem} attribute, using the target's rest frequency if necessary.
-
-         \sstitem
-         Map these values from the target's standard of rest to the standard of
-         rest specified by the AlignStdOfRest attribute, using the \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat},
-         \htmlref{ObsLon}{ObsLon}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{RefDec}{RefDec} and \htmlref{RefRA}{RefRA} attributes of the target to define the
-         two standards of rest.
-
-         \sstitem
-         Map these values from the standard of rest specified by the
-         AlignStdOfRest attribute, to the template's standard of rest, using the
-         Epoch, ObsLat, ObsLon, ObsAlt, RefDec and RefRA attributes of the
-         template to define the two standards of rest.
-
-         \sstitem
-         Map these values from the system specified by the AlignSystem
-         attribute, to the system used by the template, using the template's
-         rest frequency if necessary.
-      }
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AlignSystem\sstlabel{AlignSystem}
-}{
-   Coordinate system in which to align the Frame
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
-      Frame. It identifies the coordinate system in which the two Frames
-      will be aligned by the match.
-
-      The values which may be assigned to this attribute, and its default
-      value, depend on the class of Frame and are described in the
-      {\tt{"}}Applicability{\tt{"}} section below. In general, the AlignSystem attribute
-      will accept any of the values which may be assigned to the \htmlref{System}{System}
-      attribute.
-
-      The \htmlref{Mapping}{Mapping} returned by AST\_FINDFRAME or AST\_CONVERT will use the
-      coordinate system specified by the AlignSystem attribute as an
-      intermediate coordinate system. The total returned Mapping will first
-      map positions from the first Frame into this intermediate coordinate
-      system, using the attributes of the first Frame. It will then map
-      these positions from the intermediate coordinate system into the
-      second Frame, using the attributes of the second Frame.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The AlignSystem attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
-         and may not be altered.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The AlignSystem attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
-         and may not be altered.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The AlignSystem attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The default AlignSystem attribute for a SkyFrame is {\tt{"}}ICRS{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The default AlignSystem attribute for a SpecFrame is {\tt{"}}Wave{\tt{"}}
-         (wavelength).
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The default AlignSystem attribute for a TimeFrame is {\tt{"}}MJD{\tt{"}}.
-      }
-   }
-}
-\sstroutine{
-   AlignTimeScale\sstlabel{AlignTimeScale}
-}{
-   Time scale to use when aligning TimeFrames
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{TimeFrame}{TimeFrame} behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}) as a template to match another (target)
-      TimeFrame. It identifies the time scale in which alignment is
-      to occur. See the \htmlref{TimeScale}{TimeScale} attribute for a desription of the values
-      which may be assigned to this attribute. The default AlignTimeScale
-      value depends on the current value of TimeScale: if TimeScale is
-      UT1, GMST, LMST or LAST, the default for AlignTimeScale is UT1, for all
-      other TimeScales the default is TAI.
-
-      When astFindFrame or astConvert is used on two TimeFrames (potentially
-      describing different time coordinate systems), it returns a \htmlref{Mapping}{Mapping}
-      which can be used to transform a position in one TimeFrame into the
-      corresponding position in the other. The Mapping is made up of the
-      following steps in the indicated order:
-
-      \sstitemlist{
-
-         \sstitem
-         Map values from the system used by the target (MJD, JD, etc) to the
-         system specified by the \htmlref{AlignSystem}{AlignSystem} attribute.
-
-         \sstitem
-         Map these values from the target's time scale to the time scale
-         specified by the AlignTimeScale attribute.
-
-         \sstitem
-         Map these values from the time scale specified by the AlignTimeScale
-         attribute, to the template's time scale.
-
-         \sstitem
-         Map these values from the system specified by the AlignSystem
-         attribute, to the system used by the template.
-      }
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         TimeFrame
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   AllWarnings\sstlabel{AllWarnings}
-}{
-   A list of all currently available condition names
-}{
-   \sstdescription{
-      This read-only attribute is a space separated list of all the conditions
-      names recognized by the \htmlref{Warnings}{Warnings} attribute. The names are listed
-      below.
-   }
-   \sstattributetype{
-      String, read-only
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Conditions
-   }{
-      The following conditions are currently recognised (all are
-      case-insensitive):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}BadCel{\tt{"}}: This condition arises when reading a \htmlref{FrameSet}{FrameSet} from a
-         non-Native encoded FitsChan if an unknown celestial co-ordinate
-         system is specified by the CTYPE keywords.
-
-         \sstitem
-         {\tt{"}}BadCTYPE{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if an illegal algorithm code is specified
-         by a CTYPE keyword, and the illegal code can be converted to an
-         equivalent legal code.
-
-         \sstitem
-         {\tt{"}}BadLat{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if the latitude of the reference point
-         has an absolute value greater than 90 degrees. The actual absolute
-         value used is set to exactly 90 degrees in these cases.
-
-         \sstitem
-         {\tt{"}}BadMat{\tt{"}}: This condition arises if the matrix describing the
-         transformation from pixel offsets to intermediate world coordinates
-         cannot be inverted. This matrix describes the scaling, rotation, shear,
-         etc., applied to the pixel axes, and is specified by keywords such as
-         PCi\_j, CDi\_j, CROTA, etc. For example, the matrix will not be invertable
-         if any rows or columns consist entirely of zeros. The FITS-WCS Paper I
-         {\tt{"}}Representation of World Coordinates in FITS{\tt{"}} by Greisen \& Calabretta
-         requires that this matrix be invertable. Many operations (such as
-         grid plotting) will not be possible if the matrix cannot be inverted.
-
-         \sstitem
-         {\tt{"}}BadPV{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan. It is issued if a \htmlref{PVi\_m}{PVi_m} header is found
-         that refers to a projection parameter that is not used by the
-         projection type specified by CTYPE.
-
-         \sstitem
-         {\tt{"}}BadVal{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if it is not possible to convert the
-         value of a FITS keywords to the expected type. For instance, this
-         can occur if the FITS header contains a string value for a keyword
-         which should have a floating point value, or if the keyword has no
-         value at all (i.e. is a comment card).
-
-         \sstitem
-         {\tt{"}}Distortion{\tt{"}}: This condition arises when reading a FrameSet from a
-         non-Native encoded FitsChan if any of the CTYPE keywords specify an
-         unsupported distortion code using the {\tt{"}}4-3-3{\tt{"}} format specified in
-         FITS-WCS paper IV. Such distortion codes are ignored.
-
-         \sstitem
-         {\tt{"}}NoCTYPE{\tt{"}}: This condition arises if a default CTYPE value is used
-         within \htmlref{astRead}{astRead}, due to no value being present in the supplied FitsChan.
-         This condition is only tested for when using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoEquinox{\tt{"}}: This condition arises if a default equinox value is used
-         within astRead, due to no value being present in the supplied FitsChan.
-         This condition is only tested for when using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoRadesys{\tt{"}}: This condition arises if a default reference frame is
-         used for an equatorial co-ordinate system within astRead, due to no
-         value being present in the supplied FitsChan. This condition is only
-         tested for when using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoLonpole{\tt{"}}: This condition arises if a default value is used for
-         the LONPOLE keyword within astRead, due to no value being present
-         in the supplied FitsChan. This condition is only tested for when
-         using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoLatpole{\tt{"}}: This condition arises if a default value is used for
-         the LATPOLE keyword within astRead, due to no value being present
-         in the supplied FitsChan. This condition is only tested for when
-         using non-Native encodings.
-
-         \sstitem
-         {\tt{"}}NoMjd-obs{\tt{"}}: This condition arises if a default value is used for
-         the date of observation within astRead, due to no value being present
-         in the supplied FitsChan. This condition is only tested for when using
-         non-Native encodings.
-
-         \sstitem
-         {\tt{"}}Tnx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
-         header containing an IRAF {\tt{"}}TNX{\tt{"}} projection which includes terms
-         not supproted by AST. Such terms are ignored and so the resulting
-         FrameSet may be inaccurate.
-
-         \sstitem
-         {\tt{"}}Zpx{\tt{"}}: This condition arises if a FrameSet is read from a FITS
-         header containing an IRAF {\tt{"}}ZPX{\tt{"}} projection which includes {\tt{"}}lngcor{\tt{"}}
-         or {\tt{"}}latcor{\tt{"}} correction terms. These terms are not supported by AST
-         and are ignored. The resulting FrameSet may therefore be inaccurate.
-      }
-   }
-}
-\sstroutine{
-   AsTime(axis)\sstlabel{AsTimeaxis}
-}{
-   Format celestal coordinates as times?
-}{
-   \sstdescription{
-      This attribute specifies the default style of formatting to be
-      used (e.g. by \htmlref{astFormat}{astFormat}) for the celestial coordinate values
-      described by a \htmlref{SkyFrame}{SkyFrame}. It takes a separate boolean value for
-      each SkyFrame axis so that, for instance, the setting
-      {\tt{"}}AsTime(2)=0{\tt{"}} specifies the default formatting style for
-      celestial latitude values.
-
-      If the AsTime attribute for a SkyFrame axis is zero, then
-      coordinates on that axis will be formatted as angles by default
-      (using degrees, minutes and seconds), otherwise they will be
-      formatted as times (using hours, minutes and seconds).
-
-      The default value of AsTime is chosen according to the sky
-      coordinate system being represented, as determined by the
-      SkyFrame's \htmlref{System}{System} attribute. This ensures, for example, that
-      right ascension values will be formatted as times by default,
-      following normal conventions.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The AsTime attribute operates by changing the default value of
-         the corresponding \htmlref{Format(axis)}{Formataxis} attribute. This, in turn, may
-         also affect the value of the \htmlref{Unit(axis)}{Unitaxis} attribute.
-
-         \sstitem
-         Only the default style of formatting is affected by the AsTime
-         value. If an explicit Format(axis) value is set, it will
-         over-ride any effect from the AsTime attribute.
-      }
-   }
-}
-\sstroutine{
-   Base\sstlabel{Base}
-}{
-   FrameSet base Frame index
-}{
-   \sstdescription{
-      This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
-      regarded as the {\tt{"}}base{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default is
-      the first Frame added to the FrameSet when it is created (this
-      Frame always has an index of 1).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FrameSet
-      }{
-         All FrameSets have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Inverting a FrameSet (inverting the boolean sense of its
-         \htmlref{Invert}{Invert} attribute, with the \htmlref{astInvert}{astInvert} function for example) will
-         interchange the values of its Base and \htmlref{Current}{Current} attributes.
-      }
-   }
-}
-\sstroutine{
-   Border\sstlabel{Border}
-}{
-   Draw a border around valid regions of a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether a border is drawn around regions corresponding to the
-      valid physical coordinates of a \htmlref{Plot}{Plot} (c.f. \htmlref{astBorder}{astBorder}).
-
-      If the Border value of a Plot is non-zero, then this border will
-      be drawn as part of the grid. Otherwise, the border is not drawn
-      (although axis labels and tick marks will still appear, unless
-      other relevant Plot attributes indicate that they should
-      not). The default behaviour is to draw the border if tick marks
-      and numerical labels will be drawn around the edges of the
-      plotting area (see the \htmlref{Labelling}{Labelling} attribute), but to omit it
-      otherwise.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Bottom(axis)\sstlabel{Bottomaxis}
-}{
-   Lowest axis value to display
-}{
-   \sstdescription{
-      This attribute gives the lowest axis value to be displayed (for
-      instance, by the \htmlref{astGrid}{astGrid} method).
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The default supplied by the Frame class is to display all axis
-         values, without any limit.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Bottom value to -90 degrees
-         for latitude axes, and 0 degrees for co-latitude axes. The
-         default for longitude axes is to display all axis values.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   Bounded\sstlabel{Bounded}
-}{
-   Is the Region bounded?
-}{
-   \sstdescription{
-      This is a read-only attribute indicating if the \htmlref{Region}{Region} is bounded.
-      A Region is bounded if it is contained entirely within some
-      finite-size bounding box.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-   }
-}
-\sstroutine{
-   CDMatrix\sstlabel{CDMatrix}
-}{
-   Use CDi\_j keywords to represent pixel scaling, rotation, etc?
-}{
-   \sstdescription{
-      This attribute is a boolean value which specifies how the linear
-      transformation from pixel coordinates to intermediate world
-      coordinates should be represented within a \htmlref{FitsChan}{FitsChan} when using
-      FITS-WCS encoding. This transformation describes the scaling,
-      rotation, shear, etc., of the pixel axes.
-
-      If the attribute has a non-zero value then the transformation is
-      represented by a set of CDi\_j keywords representing a square matrix
-      (where {\tt{"}}i{\tt{"}} is the index of an intermediate world coordinate axis
-      and {\tt{"}}j{\tt{"}} is the index of a pixel axis). If the attribute has a zero
-      value the transformation is represented by a set of PCi\_j keywords
-      (which also represent a square matrix) together with a corresponding
-      set of CDELTi keywords representing the axis scalings. See FITS-WCS
-      paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
-      M. Calabretta \& E.W. Greisen, for a complete description of these two
-      schemes.
-
-      The default value of the CDMatrix attribute is determined by the
-      contents of the FitsChan at the time the attribute is accessed. If
-      the FitsChan contains any CDi\_j keywords then the default value is
-      non-zero. Otherwise it is zero. Note, reading a \htmlref{FrameSet}{FrameSet} from a
-      FitsChan will in general consume any CDi\_j keywords present in the
-      FitsChan. Thus the default value for CDMatrix following a read will
-      usually be zero, even if the FitsChan originally contained some
-      CDi\_j keywords. This behaviour is similar to that of the \htmlref{Encoding}{Encoding}
-      attribute, the default value for which is determined by the contents
-      of the FitsChan at the time the attribute is accessed. If you wish
-      to retain the original value of the CDMatrix attribute (that is,
-      the value before reading the FrameSet) then you should enquire the
-      default value before doing the read, and then set that value
-      explicitly.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   CarLin\sstlabel{CarLin}
-}{
-   Ignore spherical rotations on CAR projections?
-}{
-   \sstdescription{
-      This attribute is a boolean value which specifies how FITS {\tt{"}}CAR{\tt{"}}
-      (plate carree, or {\tt{"}}Cartesian{\tt{"}}) projections should be treated when
-      reading a \htmlref{FrameSet}{FrameSet} from a foreign encoded FITS header. If zero (the
-      default), it is assumed that the CAR projection conforms to the
-      conventions described in the FITS world coordinate system (FITS-WCS)
-      paper II {\tt{"}}Representation of Celestial Coordinates in FITS{\tt{"}} by
-      M. Calabretta \& E.W. Greisen. If CarLin is non-zero, then these
-      conventions are ignored, and it is assumed that the mapping from pixel
-      coordinates to celestial coordinates is a simple linear transformation
-      (hence the attribute name {\tt{"}}CarLin{\tt{"}}). This is appropriate for some older
-      FITS data which claims to have a {\tt{"}}CAR{\tt{"}} projection, but which in fact do
-      not conform to the conventions of the FITS-WCS paper. Furthermore, if
-      CarLin is non-zero, it is assumed that CDELT and CD keywords are
-      in units of degrees rather than radians (as required by the
-      FITS-WCS papers).
-
-      The FITS-WCS paper specifies that headers which include a CAR projection
-      represent a linear mapping from pixel coordinates to {\tt{"}}native spherical
-      coordinates{\tt{"}}, NOT celestial coordinates. An extra mapping is then
-      required from native spherical to celestial. This mapping is a 3D
-      rotation and so the overall \htmlref{Mapping}{Mapping} from pixel to celestial coordinates
-      is NOT linear. See the FITS-WCS papers for further details.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Card\sstlabel{Card}
-}{
-   Index of current FITS card in a FitsChan
-}{
-   \sstdescription{
-      This attribute gives the index of the {\tt{"}}current{\tt{"}} FITS header card
-      within a \htmlref{FitsChan}{FitsChan}, the first card having an index of 1. The
-      choice of current card affects the behaviour of functions that
-      access the contents of the FitsChan, such as \htmlref{astDelFits}{astDelFits},
-      \htmlref{astFindFits}{astFindFits} and \htmlref{astPutFits}{astPutFits}.
-
-      A value assigned to Card will position the FitsChan at any
-      desired point, so that a particular card within it can be
-      accessed. Alternatively, the value of Card may be enquired in
-      order to determine the current position of a FitsChan.
-
-      The default value of Card is 1. This means that clearing
-      this attribute (using \htmlref{astClear}{astClear}) effectively {\tt{"}}rewinds{\tt{"}} the
-      FitsChan, so that the first card is accessed next.  If Card is
-      set to a value which exceeds the total number of cards in the
-      FitsChan (as given by its \htmlref{Ncard}{Ncard} attribute), it is regarded as
-      pointing at the {\tt{"}}end-of-file{\tt{"}}. In this case, the value returned
-      in response to an enquiry is always one more than the number of
-      cards in the FitsChan.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Class\sstlabel{Class}
-}{
-   Object class name
-}{
-   \sstdescription{
-      This attribute gives the name of the class to which an \htmlref{Object}{Object}
-      belongs.
-   }
-   \sstattributetype{
-      Character string, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Clean\sstlabel{Clean}
-}{
-   Remove cards used whilst reading even if an error occurs?
-}{
-   \sstdescription{
-      This attribute indicates whether or not cards should be removed from
-      the \htmlref{FitsChan}{FitsChan} if an error occurs within
-      \htmlref{astRead}{astRead}.
-      A succesful read on a FitsChan always results in the removal of
-      the cards which were involved in the description of the returned
-      \htmlref{Object}{Object}. However, in the event of an error during the read (for instance
-      if the cards in the FitsChan have illegal values, or if some required
-      cards are missing) no cards will be removed from the FitsChan if
-      the Clean attribute is zero (the default). If Clean is non-zero then
-      any cards which were used in the aborted attempt to read an object
-      will be removed.
-
-      This provides a means of {\tt{"}}cleaning{\tt{"}} a FitsChan of WCS related cards
-      which works even in the event of the cards not forming a legal WCS
-      description.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Clip\sstlabel{Clip}
-}{
-   Clip lines and/or markers at the Plot boundary?
-}{
-   \sstdescription{
-      This attribute controls whether curves and markers are clipped at the
-      boundary of the graphics box specified when the \htmlref{Plot}{Plot} was created. A
-      value of 3 implies both markers and curves are clipped at the Plot
-      boundary. A value of 2 implies markers are clipped, but not curves. A
-      value of 1 implies curves are clipped, but not markers. A value of
-      zero implies neither curves nor markers are clipped. The default
-      value is 1. Note, this attributes controls only the clipping
-      performed internally within AST. The underlying graphics system may
-      also apply clipping. In such cases, removing clipping using this
-      attribute does not guarantee that no clipping will be visible in the
-      final plot.
-
-      The \htmlref{astClip}{astClip} function
-      can be used to establish generalised clipping within arbitrary
-      regions of the Plot.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ClipOp\sstlabel{ClipOp}
-}{
-   Combine Plot clipping limits using a boolean OR?
-}{
-   \sstdescription{
-      This attribute controls how the clipping limits specified for
-      each axis of a \htmlref{Plot}{Plot} (using the \htmlref{astClip}{astClip} function) are
-      combined. This, in turn, determines which parts of the graphical
-      output will be visible.
-
-      If the ClipOp attribute of a Plot is zero (the default),
-      graphical output is visible only if it satisfies the clipping
-      limits on all the axes of the clipping \htmlref{Frame}{Frame} (a boolean
-      AND). Otherwise, if ClipOp is non-zero, output is visible if it
-      satisfies the clipping limits on one or more axes (a boolean
-      OR).
-
-      An important use of this attribute is to allow areas of a Plot
-      to be left clear (e.g. as a background for some text). To
-      achieve this, the lower and upper clipping bounds supplied to
-      astClip should be reversed, and the ClipOp attribute of the
-      Plot should be set to a non-zero value.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Closed\sstlabel{Closed}
-}{
-   Should the boundary be considered to be inside the region?
-}{
-   \sstdescription{
-      This attribute controls whether points on the boundary of a \htmlref{Region}{Region}
-      are considered to be inside or outside the region. If the attribute
-      value is non-zero (the default), points on the boundary are considered
-      to be inside the region (that is, the Region is {\tt{"}}closed{\tt{"}}). However,
-      if the attribute value is zero, points on the bounary are considered
-      to be outside the region.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{PointList}{PointList}
-      }{
-         The value of the Closed attribute is ignored by PointList regions.
-         If the PointList region has not been negated, then it is always
-         assumed to be closed. If the PointList region has been negated, then
-         it is always assumed to be open. This is required since points
-         have zero volume and therefore consist entirely of boundary.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default Closed value for a CmpRegion is the Closed value of its
-         first component Region.
-      }
-      \sstsubsection{
-         \htmlref{Stc}{Stc}
-      }{
-         The default Closed value for an Stc is the Closed value of its
-         encapsulated Region.
-      }
-   }
-}
-\sstroutine{
-   Colour(element)\sstlabel{Colourelement}
-}{
-   Colour index for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the colour index used when drawing
-      each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Colour(title)=2{\tt{"}} causes the Plot title to be drawn
-      using colour index 2. The synonym {\tt{"}}Color{\tt{"}} may also be used.
-
-      The range of integer colour indices available and their
-      appearance is determined by the underlying graphics system. The
-      default behaviour is for all graphical elements to be drawn
-      using the default colour index supplied by this graphics system
-      (normally, this is likely to result in white plotting on a black
-      background, or vice versa).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Colour{\tt{"}} instead
-         of {\tt{"}}Colour(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
-         affect the attribute value of all graphical elements, while a
-         {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Colour(TextLab)
-         value.
-      }
-   }
-}
-\sstroutine{
-   Comment\sstlabel{Comment}
-}{
-   Include textual comments in output?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls whether textual
-      comments are to be included in the output generated by a
-      \htmlref{Channel}{Channel}. If included, they will describe what each item of
-      output represents.
-
-      If Comment is non-zero, then comments will be included. If
-      it is zero, comments will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         The default value is non-zero for a normal Channel.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The default value is non-zero for a FitsChan.
-      }
-      \sstsubsection{
-         \htmlref{XmlChan}{XmlChan}
-      }{
-         The default value is zero for an XmlChan.
-      }
-   }
-}
-\sstroutine{
-   Current\sstlabel{Current}
-}{
-   FrameSet current Frame index
-}{
-   \sstdescription{
-      This attribute gives the index of the \htmlref{Frame}{Frame} which is to be
-      regarded as the {\tt{"}}current{\tt{"}} Frame within a \htmlref{FrameSet}{FrameSet}. The default
-      is the most recent Frame added to the FrameSet (this Frame
-      always has an index equal to the FrameSet's \htmlref{Nframe}{Nframe} attribute).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FrameSet
-      }{
-         All FrameSets have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Inverting a FrameSet (inverting the boolean sense of its
-         \htmlref{Invert}{Invert} attribute, with the \htmlref{astInvert}{astInvert} function for example) will
-         interchange the values of its \htmlref{Base}{Base} and Current attributes.
-      }
-   }
-}
-\sstroutine{
-   DSBCentre\sstlabel{DSBCentre}
-}{
-   The central position of interest in a dual sideband spectrum
-}{
-   \sstdescription{
-      This attribute specifies the central position of interest in a dual
-      sideband spectrum. Its sole use is to determine the local oscillator
-      frequency (the frequency which marks the boundary between the lower
-      and upper sidebands). See the description of the \htmlref{IF}{IF} (intermediate
-      frequency) attribute for details of how the local oscillator frequency
-      is calculated. The sideband containing this central position is
-      referred to as the {\tt{"}}observed{\tt{"}} sideband, and the other sideband as
-      the {\tt{"}}image{\tt{"}} sideband.
-
-      The value is accessed as a position in the spectral system
-      represented by the \htmlref{SpecFrame}{SpecFrame} attributes inherited by this class, but
-      is stored internally as topocentric frequency. Thus, if the \htmlref{System}{System}
-      attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} is set to {\tt{"}}VRAD{\tt{"}}, the Unit attribute
-      set to {\tt{"}}m/s{\tt{"}} and the \htmlref{StdOfRest}{StdOfRest} attribute set to {\tt{"}}LSRK{\tt{"}}, then values
-      for the DSBCentre attribute should be supplied as radio velocity in
-      units of {\tt{"}}m/s{\tt{"}} relative to the kinematic LSR (alternative units may
-      be used by appending a suitable units string to the end of the value).
-      This value is then converted to topocentric frequency and stored. If
-      (say) the Unit attribute is subsequently changed to {\tt{"}}km/s{\tt{"}} before
-      retrieving the current value of the DSBCentre attribute, the stored
-      topocentric frequency will be converted back to LSRK radio velocity,
-      this time in units of {\tt{"}}km/s{\tt{"}}, before being returned.
-
-      The default value for this attribute is 30 GHz.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         DSBSpecFrame
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Note
-   }{
-      \sstitemlist{
-
-         \sstitem
-         The attributes which define the transformation to or from topocentric
-         frequency should be assigned their correct values before accessing
-         this attribute. These potentially include System, Unit, StdOfRest,
-         \htmlref{ObsLon}{ObsLon}, \htmlref{ObsLat}{ObsLat}, \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec} and \htmlref{RestFreq}{RestFreq}.
-      }
-   }
-}
-\sstroutine{
-   DefB1950\sstlabel{DefB1950}
-}{
-   Use FK4 B1950 as defaults?
-}{
-   \sstdescription{
-      This attribute is a boolean value which specifies a default equinox
-      and reference frame to use when reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}
-      with a foreign (i.e. non-native) encoding. It is only used if the FITS
-      header contains RA and DEC axes but contains no information about the
-      reference frame or equinox. If this is the case, then values of FK4 and
-      B1950 are assumed if the DefB1950 attribute has a non-zero value and
-      ICRS is assumed if DefB1950 is zero. The default value for DefB1950
-      depends on the value of the \htmlref{Encoding}{Encoding} attribute: for FITS-WCS encoding
-      the default is zero, and for all other encodings it is one.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Digits/Digits(axis)\sstlabel{DigitsDigitsaxis}
-}{
-   Number of digits of precision
-}{
-   \sstdescription{
-      This attribute specifies how many digits of precision are
-      required by default when a coordinate value is formatted for a
-      \htmlref{Frame}{Frame} axis (e.g. using \htmlref{astFormat}{astFormat}). Its value may be set either
-      for a Frame as a whole, or (by subscripting the attribute name
-      with the number of an axis) for each axis individually. Any
-      value set for an individual axis will over-ride the value for
-      the Frame as a whole.
-
-      Note that the Digits value acts only as a means of determining a
-      default Format string. Its effects are over-ridden if a Format
-      string is set explicitly for an axis. However, if the Format
-      attribute specifies the precision using the string {\tt{"}}.$*${\tt{"}}, then
-      the Digits attribute is used to determine the number of decimal
-      places to produce.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Digits value supplied by the Frame class is 7. If
-         a value less than 1 is supplied, then 1 is used instead.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Digits attribute of a FrameSet (or one of its axes) is
-         the same as that of its current Frame (as specified by the
-         \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         The default Digits value used by the Plot class when drawing
-         annotated axis labels is the smallest value which results in all
-         adjacent labels being distinct.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The Digits attribute is ignored when a TimeFrame formats a value
-         as a date and time string (see the Format attribute).
-      }
-   }
-}
-\sstroutine{
-   Direction(axis)\sstlabel{Directionaxis}
-}{
-   Display axis in conventional direction?
-}{
-   \sstdescription{
-      This attribute is a boolean value which suggests how the axes of
-      a \htmlref{Frame}{Frame} should be displayed (e.g.) in graphical output. By
-      default, it has the value one, indicating that they should be
-      shown in the conventional sense (increasing left to right for an
-      abscissa, and bottom to top for an ordinate). If set to zero,
-      this attribute indicates that the direction should be reversed,
-      as would often be done for an astronomical magnitude or a right
-      ascension axis.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Direction value supplied by the Frame class is 1,
-         indicating that all axes should be displayed in the
-         conventional direction.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Direction value to
-         suggest that certain axes (e.g. right ascension) should be
-         plotted in reverse when appropriate.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Direction attribute of a FrameSet axis is the same as
-         that of its current Frame (as specified by the \htmlref{Current}{Current}
-         attribute).
-      }
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         The Direction attribute of the base Frame in a Plot is set to
-         indicate the sense of the two graphics axes, as implied by the
-         graphics bounding box supplied when the Plot was created.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-
-         \sstitem
-         The Direction attribute does not directly affect the behaviour
-         of the AST library. Instead, it serves as a hint to applications
-         programs about the orientation in which they may wish to display
-         any data associated with the Frame. Applications are free to
-         ignore this hint if they wish.
-      }
-   }
-}
-\sstroutine{
-   Disco\sstlabel{Disco}
-}{
-   PcdMap pincushion/barrel distortion coefficient
-}{
-   \sstdescription{
-      This attribute specifies the pincushion/barrel distortion coefficient
-      used by a \htmlref{PcdMap}{PcdMap}. This coefficient is set when the PcdMap is created,
-      but may later be modified. If the attribute is cleared, its default
-      value is zero, which gives no distortion. For pincushion distortion,
-      the value should be positive. For barrel distortion, it should be
-      negative.
-
-      Note that the forward transformation of a PcdMap applies the
-      distortion specified by this attribute and the inverse
-      transformation removes this distortion. If the PcdMap is inverted
-      (e.g. using \htmlref{astInvert}{astInvert}), then the forward transformation will
-      remove the distortion and the inverse transformation will apply
-      it. The distortion itself will still be given by the same value of
-      Disco.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         PcdMap
-      }{
-         All PcdMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Domain\sstlabel{Domain}
-}{
-   Coordinate system domain
-}{
-   \sstdescription{
-      This attribute contains a string which identifies the physical
-      domain of the coordinate system that a \htmlref{Frame}{Frame} describes.
-
-      The Domain attribute also controls how a Frame behaves when it is
-      used (by \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target)
-      Frame. It does this by specifying the Domain that the target
-      Frame should have in order to match the template. If the Domain
-      value in the template Frame is set, then only targets with the
-      same Domain value will be matched. If the template's Domain
-      value is not set, however, then the target's Domain will be
-      ignored.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Domain value supplied by the Frame class is an
-         empty string.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Domain value to be
-         {\tt{"}}SKY{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The CmpFrame class re-defines the default Domain value to be
-         of the form {\tt{"}}$<$dom1$>$-$<$dom2$>${\tt{"}}, where $<$dom1$>$ and $<$dom2$>$ are the
-         Domains of the two component Frames. If both these Domains are
-         blank, then the string {\tt{"}}CMP{\tt{"}} is used as the default Domain name.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Domain attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The SpecFrame class re-defines the default Domain value to be
-         {\tt{"}}SPECTRUM{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         The DSBSpecFrame class re-defines the default Domain value to be
-         {\tt{"}}DSBSPECTRUM{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{FluxFrame}{FluxFrame}
-      }{
-         The FluxFrame class re-defines the default Domain value to be
-         {\tt{"}}FLUX{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{SpecFluxFrame}{SpecFluxFrame}
-      }{
-         The FluxFrame class re-defines the default Domain value to be
-         {\tt{"}}SPECTRUM-FLUX{\tt{"}}.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Domain value to be
-         {\tt{"}}TIME{\tt{"}}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         All Domain values are converted to upper case and white space
-         is removed before use.
-      }
-   }
-}
-\sstroutine{
-   DrawAxes(axis)\sstlabel{DrawAxesaxis}
-}{
-   Draw axes for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether curves representing coordinate axes should be drawn.
-      It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}DrawAxes(2)=0{\tt{"}}
-      specifies that no axis should be drawn for the second axis.
-
-      If drawn, these axis lines will pass through any tick marks
-      associated with numerical labels drawn to mark values on the
-      axes. The location of these tick marks and labels (and hence the
-      axis lines) is determined by the Plot's \htmlref{LabelAt(axis)}{LabelAtaxis} attribute.
-
-      If the DrawAxes value of a Plot is non-zero (the default), then
-      axis lines will be drawn, otherwise they will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Axis}{Axis} lines are drawn independently of any coordinate grid
-         lines (see the \htmlref{Grid}{Grid} attribute) so grid lines may be used to
-         substitute for axis lines if required.
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
-         attribute).  In this case, the value of the DrawAxes attribute
-         is ignored.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}DrawAxes{\tt{"}} instead of
-         {\tt{"}}DrawAxes(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the DrawAxes(1) value.
-      }
-   }
-}
-\sstroutine{
-   DrawTitle\sstlabel{DrawTitle}
-}{
-   Draw a title for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether a title is drawn.
-
-      If the DrawTitle value of a \htmlref{Plot}{Plot} is non-zero (the default), then
-      the title will be drawn, otherwise it will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes, assuming a value of
-         zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the title is obtained from the Plot's \htmlref{Title}{Title}
-         attribute.
-
-         \sstitem
-         The vertical placement of the title can be controlled using
-         the \htmlref{TitleGap}{TitleGap} attribute.
-      }
-   }
-}
-\sstroutine{
-   Dut1\sstlabel{Dut1}
-}{
-   The UT1-UTC correction
-}{
-   \sstdescription{
-      This attribute is used when calculating the Local Apparent Sidereal
-      Time corresponding to \htmlref{SkyFrame}{SkyFrame}'s \htmlref{Epoch}{Epoch} value (used when converting
-      positions to or from the {\tt{"}}AzEl{\tt{"}} system). It should be set to the
-      difference, in seconds, between the UT1 and UTC timescales at the
-      moment in time represented by the SkyFrame's Epoch attribute. The
-      value to use is unpredictable and depends on changes in the earth's
-      rotation speed. Values for UT1-UTC can be obtained from the
-      International Earth Rotation and Reference Systems Service
-      (IERS) at http://www.iers.org/.
-
-      Currently, the correction is always less than 1 second. This is
-      ensured by the occasional introduction of leap seconds into the UTC
-      timescale. Therefore no great error will usually result if no value
-      is assigned to this attribute (in which case a default value of
-      zero is used). However, it is possible that a decision may be taken
-      at some time in the future to abandon the introduction of leap
-      seconds, in which case the DUT correction could grow to significant
-      sizes.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         All Frames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Edge(axis)\sstlabel{Edgeaxis}
-}{
-   Which edges to label in a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      which edges of a \htmlref{Plot}{Plot} are used for displaying numerical and
-      descriptive axis labels. It takes a separate value for each
-      physical axis of the Plot so that, for instance, the setting
-      {\tt{"}}Edge(2)=left{\tt{"}} specifies which edge to use to display labels for
-      the second axis.
-
-      The values {\tt{"}}left{\tt{"}}, {\tt{"}}top{\tt{"}}, {\tt{"}}right{\tt{"}} and {\tt{"}}bottom{\tt{"}} (or any
-      abbreviation) can be supplied for this attribute. The default is
-      usually {\tt{"}}bottom{\tt{"}} for the first axis and {\tt{"}}left{\tt{"}} for the second
-      axis. However, if exterior labelling was requested (see the
-      \htmlref{Labelling}{Labelling} attribute) but cannot be produced using these default
-      Edge values, then the default values will be swapped if this
-      enables exterior labelling to be produced.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes. Instead it uses its
-         own \htmlref{RootCorner}{RootCorner} attribute to determine which edges of the 3D plot
-         to label.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In some circumstances, numerical labels will be drawn along
-         internal grid lines instead of at the edges of the plotting area
-         (see the Labelling attribute). In this case, the Edge attribute
-         only affects the placement of the descriptive labels (these are
-         drawn at the edges of the plotting area, rather than along the
-         axis lines).
-      }
-   }
-}
-\sstroutine{
-   Encoding\sstlabel{Encoding}
-}{
-   System for encoding Objects as FITS headers
-}{
-   \sstdescription{
-      This attribute specifies the encoding system to use when AST
-      Objects are stored as FITS header cards in a \htmlref{FitsChan}{FitsChan}. It
-      affects the behaviour of the \htmlref{astWrite}{astWrite} and \htmlref{astRead}{astRead} functions when
-      they are used to transfer any AST \htmlref{Object}{Object} to or from an external
-      representation consisting of FITS header cards (i.e. whenever a
-      write or read operation is performed using a FitsChan as the I/O
-      \htmlref{Channel}{Channel}).
-
-      There are several ways (conventions) by which coordinate system
-      information may be represented in the form of FITS headers and
-      the Encoding attribute is used to specify which of these should
-      be used. The encoding options available are outlined in the
-      {\tt{"}}Encodings Available{\tt{"}} section below, and in more detail in the
-      sections which follow.
-
-      Encoding systems differ in the range of possible Objects
-      (e.g. classes) they can represent, in the restrictions they
-      place on these Objects (e.g. compatibility with some
-      externally-defined coordinate system model) and in the number of
-      Objects that can be stored together in any particular set of
-      FITS header cards (e.g. multiple Objects, or only a single
-      Object). The choice of encoding also affects the range of
-      external applications which can potentially read and interpret
-      the FITS header cards produced.
-
-      The encoding options available are not necessarily mutually
-      exclusive, and it may sometimes be possible to store multiple
-      Objects (or the same Object several times) using different
-      encodings within the same set of FITS header cards. This
-      possibility increases the likelihood of other applications being
-      able to read and interpret the information.
-
-      By default, a FitsChan will attempt to determine which encoding
-      system is already in use, and will set the default Encoding
-      value accordingly (so that subsequent I/O operations adopt the
-      same conventions). It does this by looking for certain critical
-      FITS keywords which only occur in particular encodings. For
-      details of how this works, see the {\tt{"}}Choice of Default Encoding{\tt{"}}
-      section below. If you wish to ensure that a particular encoding
-      system is used, independently of any FITS cards already present,
-      you should set an explicit Encoding value yourself.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Encodings Available
-   }{
-      The Encoding attribute can take any of the following (case
-      insensitive) string values to select the corresponding encoding
-      system:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}DSS{\tt{"}}: Encodes coordinate system information in FITS header
-         cards using the convention developed at the Space Telescope
-         Science Institute (STScI) for the Digitised Sky Survey (DSS)
-         astrometric plate calibrations. The main advantages of this
-         encoding are that FITS images which use it are widely available
-         and it is understood by a number of important and
-         well-established astronomy applications. For further details,
-         see the section {\tt{"}}The DSS Encoding{\tt{"}} below.
-
-         \sstitem
-         {\tt{"}}FITS-WCS{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions described in the FITS
-         world coordinate system (FITS-WCS) papers by E.W. Greisen,
-         M. Calabretta, et al. The main advantages of this encoding are that
-         it should be understood by any FITS-WCS compliant application and
-         is likely to be adopted widely for FITS data in future. For further
-         details, see the section {\tt{"}}The FITS-WCS Encoding{\tt{"}} below.
-
-         \sstitem
-         {\tt{"}}FITS-PC{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions described in an earlier draft
-         of the FITS world coordinate system papers by E.W. Greisen and
-         M. Calabretta. This encoding uses a combination of CDELTi and
-         PCiiijjj keywords to describe the scale and rotation of the pixel
-         axes. This encoding is included to support existing data and
-         software which uses these now superceded conventions. In general,
-         the {\tt{"}}FITS-WCS{\tt{"}} encoding (which uses CDi\_j or PCi\_j keywords to
-         describe the scale and rotation) should be used in preference to
-         {\tt{"}}FITS-PC{\tt{"}}.
-
-         \sstitem
-         {\tt{"}}FITS-IRAF{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions described in the document
-         {\tt{"}}World Coordinate Systems Representations Within the FITS
-         Format{\tt{"}} by R.J. Hanisch and D.G. Wells, 1988.  This encoding is
-         currently employed by the IRAF data analysis facility, so its
-         use will facilitate data exchange with IRAF. Its main advantages
-         are that it is a stable convention which approximates to a
-         subset of the propsed FITS-WCS encoding (above). This makes it
-         suitable as an interim method for storing coordinate system
-         information in FITS headers until the FITS-WCS encoding becomes
-         stable. Since many datasets currently use the FITS-IRAF
-         encoding, conversion of data from FITS-IRAF to the final form of
-         FITS-WCS is likely to be well supported.
-
-         \sstitem
-         {\tt{"}}FITS-AIPS{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions originally introduced by the
-         AIPS data analysis facility. This is base on the use of CDELTi and
-         CROTAi keuwords to desribe the scale and rotation of each axis.
-         These conventions have been superceded but are still widely used.
-
-         \sstitem
-         {\tt{"}}FITS-AIPS$+$$+${\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions used by the AIPS$+$$+$ project.
-         This is an extension of FITS-AIPS which includes some of the
-         features of FITS-IRAF and FITS-PC.
-
-         \sstitem
-         {\tt{"}}FITS-CLASS{\tt{"}}: Encodes coordinate system information in FITS
-         header cards using the conventions used by the CLASS project.
-         CLASS is a software package for reducing single-dish radio and
-         sub-mm spectroscopic data. See the section {\tt{"}}CLASS FITS format{\tt{"}} at
-         http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/.
-
-         \sstitem
-         {\tt{"}}NATIVE{\tt{"}}: Encodes AST Objects in FITS header cards using a
-         convention which is private to the AST library (but adheres to
-         the general FITS standard) and which uses FITS keywords that
-         will not clash with other encoding systems. The main advantages
-         of this are that any class of AST Object may be encoded, and any
-         (reasonable) number of Objects may be stored sequentially in the
-         same FITS header. This makes FITS headers an almost loss-less
-         communication path for passing AST Objects between applications
-         (although all such applications must, of course, make use of the
-         AST library to interpret the information). For further details,
-         see the section {\tt{"}}The NATIVE Encoding{\tt{"}} below.
-      }
-   }
-   \sstdiytopic{
-      Choice of Default Encoding
-   }{
-      If the Encoding attribute of a FitsChan is not set, the default
-      value it takes is determined by the presence of certain critical
-      FITS keywords within the FitsChan. The sequence of decisions
-      used to arrive at the default value is as follows:
-
-      \sstitemlist{
-
-         \sstitem
-         If the FitsChan contains any keywords beginning with the
-         string {\tt{"}}BEGAST{\tt{"}}, then NATIVE encoding is used,
-
-         \sstitem
-         Otherwise, FITS-CLASS is used if the FitsChan contains a DELTAV
-         keyword and a keyword of the form VELO-xxx, where xxx indicates one
-         of the rest frames used by class (e.g. {\tt{"}}VELO-LSR{\tt{"}}).
-
-         \sstitem
-         Otherwise, if the FitsChan contains a CTYPE keyword which
-         represents a spectral axis using the conventions of the AIPS and
-         AIPS$+$$+$ projects (e.g. {\tt{"}}FELO-LSR{\tt{"}}, etc), then one of FITS-AIPS or
-         FITS-AIPS$+$$+$ encoding is used. FITS-AIPS$+$$+$ is used if any of the
-         keywords CDi\_j, PROJP, LONPOLE or LATPOLE are
-         found in the FitsChan. Otherwise FITS-AIPS is used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         {\tt{"}}PCiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
-         FITS-PC encoding is used,
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         {\tt{"}}CDiiijjj{\tt{"}}, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then
-         FITS-IRAF encoding is used,
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         {\tt{"}}CDi\_j{\tt{"}}, and at least one of RADECSYS, PROJPi, or CjVALi
-         where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits, then FITS-IRAF encoding is
-         used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains any keywords of the form
-         PROJPi, CjVALi or RADECSYS, where {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits,
-         then FITS-PC encoding is used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         CROTAi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-AIPS encoding is
-         used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains a keyword of the form
-         CRVALi, where {\tt{"}}i{\tt{"}} is a single digit, then FITS-WCS encoding is
-         used.
-
-         \sstitem
-         Otherwise, if the FitsChan contains the {\tt{"}}PLTRAH{\tt{"}} keyword, then
-         DSS encoding is used,
-
-         \sstitem
-         Otherwise, if none of these conditions is met (as would be the
-         case when using an empty FitsChan), then NATIVE encoding is
-         used.
-
-      }
-      Except for the NATIVE and DSS encodings, all the above checks
-      also require that the header contains at least one CTYPE, CRPIX and
-      CRVAL keyword (otherwise the checking process continues to the next
-      case).
-
-      Setting an explicit value for the Encoding attribute always
-      over-rides this default behaviour.
-
-      Note that when writing information to a FitsChan, the choice of
-      encoding will depend greatly on the type of application you
-      expect to be reading the information in future. If you do not
-      know this, there may sometimes be an advantage in writing the
-      information several times, using a different encoding on each
-      occasion.
-   }
-   \sstdiytopic{
-      The DSS Encoding
-   }{
-      The DSS encoding uses FITS header cards to store a multi-term
-      polynomial which relates pixel positions on a digitised
-      photographic plate to celestial coordinates (right ascension and
-      declination). This encoding may only be used to store a single
-      AST Object in any set of FITS header cards, and that Object must
-      be a \htmlref{FrameSet}{FrameSet} which conforms to the STScI/DSS coordinate system
-      model (this means the \htmlref{Mapping}{Mapping} which relates its base and current
-      Frames must include either a \htmlref{DssMap}{DssMap} or a \htmlref{WcsMap}{WcsMap} with type
-      AST\_\_TAN or AST\_\_TPN).
-
-      When reading a DSS encoded Object (using astRead), the FitsChan
-      concerned must initially be positioned at the first card (its
-      \htmlref{Card}{Card} attribute must equal 1) and the result of the read, if
-      successful, will always be a pointer to a FrameSet. The base
-      \htmlref{Frame}{Frame} of this FrameSet represents DSS pixel coordinates, and the
-      current Frame represents DSS celestial coordinates. Such a read
-      is always destructive and causes the FITS header cards required
-      for the construction of the FrameSet to be removed from the
-      FitsChan, which is then left positioned at the {\tt{"}}end-of-file{\tt{"}}. A
-      subsequent read using the same encoding will therefore not
-      return another FrameSet, even if the FitsChan is rewound.
-
-      When astWrite is used to store a FrameSet using DSS encoding,
-      an attempt is first made to simplify the FrameSet to see if it
-      conforms to the DSS model.  Specifically, the current Frame must
-      be a FK5 \htmlref{SkyFrame}{SkyFrame}; the projection must be a tangent plane
-      (gnomonic) projection with polynomial corrections conforming to
-      DSS requirements, and north must be parallel to the second base
-      Frame axis.
-
-      If the simplification process succeeds, a description of the
-      FrameSet is written to the FitsChan using appropriate DSS FITS
-      header cards. The base Frame of the FrameSet is used to form the
-      DSS pixel coordinate system and the current Frame gives the DSS
-      celestial coordinate system.  A successful write operation will
-      over-write any existing DSS encoded data in the FitsChan, but
-      will not affect other (non-DSS) header cards. If a destructive
-      read of a DSS encoded Object has previously occurred, then an
-      attempt will be made to store the FITS header cards back in
-      their original locations.
-
-      If an attempt to simplify a FrameSet to conform to the DSS model
-      fails (or if the Object supplied is not a FrameSet), then no
-      data will be written to the FitsChan and astWrite will return
-      zero. No error will result.
-   }
-   \sstdiytopic{
-      The FITS-WCS Encoding
-   }{
-      The FITS-WCS convention uses FITS header cards to describe the
-      relationship between pixels in an image (not necessarily
-      2-dimensional) and one or more related {\tt{"}}world coordinate systems{\tt{"}}.
-      The FITS-WCS encoding may only be used to store a single AST Object
-      in any set of FITS header cards, and that Object must be a FrameSet
-      which conforms to the FITS-WCS model (the FrameSet may, however,
-      contain multiple Frames which will be result in multiple FITS
-      {\tt{"}}alternate axis descriptions{\tt{"}}). Details of the use made by this
-      Encoding of the conventions described in the FITS-WCS papers are
-      given in the appendix {\tt{"}}FITS-WCS Coverage{\tt{"}} of this document. A few
-      main points are  described below.
-
-      The rotation and scaling of the intermediate world coordinate system
-      can be specified using either {\tt{"}}CDi\_j{\tt{"}} keywords, or {\tt{"}}PCi\_j{\tt{"}} together
-      with {\tt{"}}CDELTi{\tt{"}} keywords. When writing a FrameSet to a FitsChan, the
-      the value of the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan determines
-      which system is used.
-
-      In addition, this encoding supports the {\tt{"}}TAN with polynomial correction
-      terms{\tt{"}} projection which was included in a draft of the FITS-WCS paper,
-      but was not present in the final version. A {\tt{"}}TAN with polynomial
-      correction terms{\tt{"}} projection is represented using a WcsMap with type
-      AST\_\_TPN (rather than AST\_\_TAN which is used to represent simple
-      TAN projections). When reading a FITS header, a CTYPE keyword value
-      including a {\tt{"}}-TAN{\tt{"}} code results in an AST\_\_TPN projection if there are
-      any projection parameters (given by the \htmlref{PVi\_m}{PVi_m} keywords) associated with
-      the latitude axis, or if there are projection parameters associated
-      with the longitude axis for m greater than 4. When writing a
-      FrameSet to a FITS header, an AST\_\_TPN projection gives rise to a
-      CTYPE value including the normal {\tt{"}}-TAN{\tt{"}} code, but the projection
-      parameters are stored in keywords with names {\tt{"}}QVi\_m{\tt{"}}, instead of the
-      usual {\tt{"}}PVi\_m{\tt{"}}. Since these QV parameters are not part of the
-      FITS-WCS standard they will be ignored by other non-AST software,
-      resulting in the WCS being interpreted as a simple TAN projection
-      without any corrections. This should be seen as an interim solution
-      until such time as an agreed method for describing projection
-      distortions within FITS-WCS has been published.
-
-      AST extends the range of celestial coordinate sytstems which may be
-      described using this encoding by inclusion of the allowing the use of
-      {\tt{"}}AZ--{\tt{"}} and {\tt{"}}EL--{\tt{"}} as the coordinate specification within CTYPE
-      values. These form a longitude/latitude pair of axes which describe
-      azimuth and elevation. The geographic position of the observer
-      should be supplied using the OBSGEO-X/Y/Z keywords described in FITS-WCS
-      paper III. Currently, a simple model is used which includes diurnal
-      aberration, but ignores atmospheric refraction, polar motion, etc.
-      These may be added in a leter release.
-
-      When reading a FITS-WCS encoded Object (using astRead), the FitsChan
-      concerned must initially be positioned at the first card (its
-      Card attribute must equal 1) and the result of the read, if
-      successful, will always be a pointer to a FrameSet. The base
-      Frame of this FrameSet represents FITS-WCS pixel coordinates,
-      and the current Frame represents the physical coordinate system
-      described by the FITS-WCS primary axis descriptions. If
-      secondary axis descriptions are also present, then the FrameSet
-      may contain additional (non-current) Frames which represent
-      these.  Such a read is always destructive and causes the FITS
-      header cards required for the construction of the FrameSet to be
-      removed from the FitsChan, which is then left positioned at the
-      {\tt{"}}end-of-file{\tt{"}}. A subsequent read using the same encoding will
-      therefore not return another FrameSet, even if the FitsChan is
-      rewound.
-
-      When astWrite is used to store a FrameSet using FITS-WCS
-      encoding, an attempt is first made to simplify the FrameSet to
-      see if it conforms to the FITS-WCS model. If this simplification
-      process succeeds (as it often should, as the model is reasonably
-      flexible), a description of the FrameSet is written to the
-      FitsChan using appropriate FITS header cards. The base Frame of
-      the FrameSet is used to form the FITS-WCS pixel coordinate
-      system and the current Frame gives the physical coordinate
-      system to be described by the FITS-WCS primary axis
-      descriptions.  Any additional Frames in the FrameSet may be used
-      to construct secondary axis descriptions, where appropriate.
-
-      A successful write operation will over-write any existing
-      FITS-WCS encoded data in the FitsChan, but will not affect other
-      (non-FITS-WCS) header cards. If a destructive read of a FITS-WCS
-      encoded Object has previously occurred, then an attempt will be
-      made to store the FITS header cards back in their original
-      locations. Otherwise, the new cards will be inserted following
-      any other FITS-WCS related header cards present or, failing
-      that, in front of the current card (as given by the Card
-      attribute).
-
-      If an attempt to simplify a FrameSet to conform to the FITS-WCS
-      model fails (or if the Object supplied is not a FrameSet), then
-      no data will be written to the FitsChan and astWrite will
-      return zero. No error will result.
-   }
-   \sstdiytopic{
-      The FITS-IRAF Encoding
-   }{
-      The FITS-IRAF encoding can, for most purposes, be considered as
-      a subset of the FITS-WCS encoding (above), although it differs
-      in the details of the FITS keywords used. It is used in exactly
-      the same way and has the same restrictions, but with the
-      addition of the following:
-
-      \sstitemlist{
-
-         \sstitem
-         The only celestial coordinate systems that may be represented
-         are equatorial, galactic and ecliptic,
-
-         \sstitem
-         Sky projections can be represented only if any associated
-         projection parameters are set to their default values.
-
-         \sstitem
-         Secondary axis descriptions are not supported, so when writing
-         a FrameSet to a FitsChan, only information from the base and
-         current Frames will be stored.
-
-      }
-      Note that this encoding is provided mainly as an interim measure to
-      provide a more stable alternative to the FITS-WCS encoding until the
-      FITS standard for encoding WCS information is finalised.  The name
-      {\tt{"}}FITS-IRAF{\tt{"}} indicates the general keyword conventions used and does
-      not imply that this encoding will necessarily support all features of
-      the WCS scheme used by IRAF software. Nevertheless, an attempt has
-      been made to support a few such features where they are known to be
-      used by important sources of data.
-
-      When writing a FrameSet using the FITS-IRAF encoding, axis rotations
-      are specified by a matrix of FITS keywords of the form {\tt{"}}CDi\_j{\tt{"}}, where
-      {\tt{"}}i{\tt{"}} and {\tt{"}}j{\tt{"}} are single digits. The alternative form {\tt{"}}CDiiijjj{\tt{"}}, which
-      is also in use, is recognised when reading an Object, but is never
-      written.
-
-      In addition, the experimental IRAF {\tt{"}}ZPX{\tt{"}} and {\tt{"}}TNX{\tt{"}} sky projections will
-      be accepted when reading, but will never be written (the corresponding
-      FITS {\tt{"}}ZPN{\tt{"}} or {\tt{"}}distorted TAN{\tt{"}} projection being used instead). However,
-      there are restrictions on the use of these experimental projections.
-      For {\tt{"}}ZPX{\tt{"}}, longitude and latitude correction surfaces (appearing as
-      {\tt{"}}lngcor{\tt{"}} or {\tt{"}}latcor{\tt{"}} terms in the IRAF-specific {\tt{"}}WAT{\tt{"}} keywords) are
-      not supported. For {\tt{"}}TNX{\tt{"}} projections, only cubic surfaces encoded as
-      simple polynomials with {\tt{"}}half cross-terms{\tt{"}} are supported. If an
-      un-usable {\tt{"}}TNX{\tt{"}} or {\tt{"}}ZPX{\tt{"}} projection is encountered while reading
-      from a FitsChan, a simpler form of TAN or ZPN projection is used
-      which ignores the unsupported features and may therefore be
-      inaccurate. If this happens, a warning message is added to the
-      contents of the FitsChan as a set of cards using the keyword {\tt{"}}ASTWARN{\tt{"}}.
-
-      You should not normally attempt to mix the foreign FITS encodings within
-      the same FitsChan, since there is a risk that keyword clashes may occur.
-   }
-   \sstdiytopic{
-      The FITS-PC Encoding
-   }{
-      The FITS-PC encoding can, for most purposes, be considered as
-      equivalent to the FITS-WCS encoding (above), although it differs
-      in the details of the FITS keywords used. It is used in exactly
-      the same way and has the same restrictions.
-   }
-   \sstdiytopic{
-      The FITS-AIPS Encoding
-   }{
-      The FITS-AIPS encoding can, for most purposes, be considered as
-      equivalent to the FITS-WCS encoding (above), although it differs
-      in the details of the FITS keywords used. It is used in exactly
-      the same way and has the same restrictions, but with the
-      addition of the following:
-
-      \sstitemlist{
-
-         \sstitem
-         The only celestial coordinate systems that may be represented
-         are equatorial, galactic and ecliptic,
-
-         \sstitem
-         Spectral axes can only be represented if they represent
-         frequency, radio velocity or optical velocity, and are linearly
-         sampled in frequency. In addition, the standard of rest
-         must be LSRK, LSRD, barycentric or geocentric.
-
-         \sstitem
-         Sky projections can be represented only if any associated
-         projection parameters are set to their default values.
-
-         \sstitem
-         The AIT, SFL and MER projections can only be written if the CRVAL
-         keywords are zero for both longitude and latitude axes.
-
-         \sstitem
-         Secondary axis descriptions are not supported, so when writing
-         a FrameSet to a FitsChan, only information from the base and
-         current Frames will be stored.
-
-         \sstitem
-         If there are more than 2 axes in the base and current Frames, any
-         rotation must be restricted to the celestial plane, and must involve
-         no shear.
-      }
-   }
-   \sstdiytopic{
-      The FITS-AIPS$+$$+$ Encoding
-   }{
-      The FITS-AIPS$+$$+$ encoding is based on the FITS-AIPS encoding, but
-      includes some features of the FITS-IRAF and FITS-PC encodings.
-      Specifically, any celestial projections supported by FITS-PC may be
-      used, including those which require parameterisation, and the axis
-      rotation and scaling may be specified using CDi\_j keywords. When
-      writing a FITS header, rotation will be specified using CROTA/CDELT
-      keywords if possible, otherwise CDi\_j keywords will be used instead.
-   }
-   \sstdiytopic{
-      The FITS-CLASS Encoding
-   }{
-      The FITS-CLASS encoding uses the conventions of the CLASS project.
-      These are described in the section {\tt{"}}Developer Manual{\tt{"}}/{\tt{"}}CLASS FITS
-      Format{\tt{"}} contained in the CLASS documentation at:
-
-      http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html.
-
-      This encoding is similar to FITS-AIPS with the following restrictions:
-
-      \sstitemlist{
-
-         \sstitem
-         When a \htmlref{SpecFrame}{SpecFrame} is created by reading a FITS-CLASS header, the
-           attributes describing the observer's position (\htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon} and
-           \htmlref{ObsAlt}{ObsAlt}) are left unset because the CLASS encoding does not specify
-           these values. Conversions to or from the topocentric standard of rest
-           will therefore be inaccurate (typically by up to about 0.5 km/s)
-           unless suitable values are assigned to these attributes after the
-           FrameSet has been created.
-
-         \sstitem
-         When writing a FrameSet to a FITS-CLASS header, the current Frame
-           in the FrameSet must have at least 3 WCS axes, of which one must be
-           a linear spectral axis. The spectral axis in the created header will
-           always describe frequency. If the spectral axis in the supplied
-           FrameSet refers to some other system (e.g. radio velocity, etc),
-           then it will be converted to frequency.
-
-         \sstitem
-         There must be a pair of celestial axes - either (RA,Dec) or
-           (GLON,GLAT). RA and Dec must be either FK4/B1950 or FK5/J2000.
-
-         \sstitem
-         A limited range of projection codes (TAN, ARC, STG, AIT, SFL, SIN)
-           can be used. For AIT and SFL, the reference point must be at the
-           origin of longitude and latitude. For SIN, the associated projection
-           parameters must both be zero.
-
-         \sstitem
-         No rotation of the celestial axes is allowed, unless the spatial
-           axes are degenerate (i.e. cover only a single pixel).
-
-         \sstitem
-         The frequency axis in the created header will always describe
-           frequency in the source rest frame. If the supplied FrameSet uses
-           some other standard of rest then suitable conversion will be applied.
-
-         \sstitem
-         The source velocity must be defined. In other words, the SpecFrame
-           attributes \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} must have been assigned values.
-
-         \sstitem
-         The frequency axis in a FITS-CLASS header does not represent
-           absolute frequency, but instead represents offsets from the rest
-           frequency in the standard of rest of the source.
-
-      }
-      When writing a FrameSet out using FITS-CLASS encoding, the current
-      Frame may be temporarily modified if this will allow the header
-      to be produced. If this is done, the associated pixel-$>$WCS Mapping
-      will also be modified to take account of the changes to the Frame.
-      The modifications performed include re-ordering axes (WCS axes, not
-      pixel axes), changing spectral coordinate system and standard of
-      rest, changing the celestial coordinate system and reference equinox,
-      and changing axis units.
-   }
-   \sstdiytopic{
-      The NATIVE Encoding
-   }{
-      The NATIVE encoding may be used to store a description of any
-      class of AST Object in the form of FITS header cards, and (for
-      most practical purposes) any number of these Object descriptions
-      may be stored within a single set of FITS cards. If multiple
-      Object descriptions are stored, they are written and read
-      sequentially. The NATIVE encoding makes use of unique FITS
-      keywords which are designed not to clash with keywords that have
-      already been used for other purposes (if a potential clash is
-      detected, an alternative keyword is constructed to avoid the
-      clash).
-
-      When reading a NATIVE encoded object from a FitsChan (using
-      astRead), FITS header cards are read, starting at the current
-      card (as determined by the Card attribute), until the start of
-      the next Object description is found. This description is then
-      read and converted into an AST Object, for which a pointer is
-      returned. Such a read is always destructive and causes all the
-      FITS header cards involved in the Object description to be
-      removed from the FitsChan, which is left positioned at the
-      following card.
-
-      The Object returned may be of any class, depending on the
-      description that was read, and other AST routines may be used to
-      validate it (for example, by examining its \htmlref{Class}{Class} or \htmlref{ID}{ID} attribute
-      using astGetC). If further NATIVE encoded Object descriptions
-      exist in the FitsChan, subsequent calls to astRead will return
-      the Objects they describe in sequence (and destroy their
-      descriptions) until no more remain between the current card and
-      the {\tt{"}}end-of-file{\tt{"}}.
-
-      When astWrite is used to write an Object using NATIVE encoding,
-      a description of the Object is inserted immediately before the
-      current card (as determined by the Card attribute).  Multiple
-      Object descriptions may be written in this way and are stored
-      separately (and sequentially if the Card attribute is not
-      modified between the writes). A write operation using the NATIVE
-      encoding does not over-write previously written Object
-      descriptions. Note, however, that subsequent behaviour is
-      undefined if an Object description is written inside a
-      previously-written description, so this should be avoided.
-
-      When an Object is written to a FitsChan using NATIVE encoding,
-      astWrite should (barring errors) always transfer data and
-      return a value of 1.
-   }
-}
-\sstroutine{
-   Epoch\sstlabel{Epoch}
-}{
-   Epoch of observation
-}{
-   \sstdescription{
-      This attribute is used to qualify the coordinate systems described by
-      a \htmlref{Frame}{Frame}, by giving the moment in time when the coordinates are known
-      to be correct. Often, this will be the date of observation, and is
-      important in cases where coordinates systems move with respect to each
-      other over the course of time.
-
-      The Epoch attribute is stored as a Modified Julian Date, but
-      when setting its value it may be given in a variety of
-      formats. See the {\tt{"}}Input Formats{\tt{"}} section (below) for details.
-      Strictly, the Epoch value should be supplied in the TDB timescale,
-      but for some purposes (for instance, for converting sky positions
-      between different types of equatorial system) the timescale is not
-      significant, and UTC may be used.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute. The basic Frame class provides
-         a default of J2000.0 (Julian) but makes no use of the Epoch value.
-         This is because the Frame class does not distinguish between
-         different Cartesian coordinate systems (see the \htmlref{System}{System} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The default Epoch value for a CmpFrame is selected as follows;
-         if the Epoch attribute has been set in the first component Frame
-         then the Epoch value from the first component Frame is used as
-         the default for the CmpFrame. Otherwise, if the Epoch attribute has
-         been set in the second component Frame then the Epoch value from the
-         second component Frame is used as the default for the CmpFrame.
-         Otherwise, the default Epoch value from the first component
-         Frame is used as the default for the CmpFrame. When the Epoch
-         attribute of a CmpFrame is set or cleared, it is also set or
-         cleared in the two component Frames.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Epoch attribute of a FrameSet is the same as that of its current
-         Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The coordinates of sources within a SkyFrame can changed with time
-         for various reasons, including: (i) changing aberration of light
-         caused by the observer's velocity (e.g. due to the Earth's motion
-         around the Sun), (ii) changing gravitational deflection by the Sun
-         due to changes in the observer's position with time, (iii) fictitious
-         motion due to rotation of non-inertial coordinate systems (e.g. the
-         old FK4 system), and (iv) proper motion of the source itself (although
-         this last effect is not handled by the SkyFrame class because it
-         affects individual sources rather than the coordinate system as
-         a whole).
-
-         The default Epoch value in a SkyFrame is B1950.0 (Besselian) for the
-         old FK4-based coordinate systems (see the System attribute) and
-         J2000.0 (Julian) for all others.
-
-         Care must be taken to distinguish the Epoch value, which relates to
-         motion (or apparent motion) of the source, from the superficially
-         similar \htmlref{Equinox}{Equinox} value. The latter is used to qualify a coordinate
-         system which is itself in motion in a (notionally) predictable way
-         as a result of being referred to a slowly moving reference plane
-         (e.g. the equator).
-
-         See the description of the System attribute for details of which
-         qualifying attributes apply to each celestial coordinate system.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         A TimeFrame describes a general time axis and so cannot be completely
-         characterised by a single Epoch value. For this reason the TimeFrame
-         class makes no use of the Epoch attribute. However, user code can
-         still make use of the attribute if necessary to represent a {\tt{"}}typical{\tt{"}}
-         time spanned by the TimeFrame. The default Epoch value for a TimeFrame
-         will be the TDB equivalent of the current value of the TimeFrame's
-         \htmlref{TimeOrigin}{TimeOrigin} attribute. If no value has been set for TimeOrigin,
-         then the default Epoch value is J2000.0.
-      }
-   }
-   \sstdiytopic{
-      Input Formats
-   }{
-      The formats accepted when setting an Epoch value are listed
-      below. They are all case-insensitive and are generally tolerant
-      of extra white space and alternative field delimiters:
-
-      \sstitemlist{
-
-         \sstitem
-         Besselian Epoch: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
-         \sstitem
-         Julian Epoch: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
-         \sstitem
-         Year: Decimal years, with or without decimal places ({\tt{"}}1996.8{\tt{"}}
-         for example).  Such values are interpreted as a Besselian epoch
-         (see above) if less than 1984.0 and as a Julian epoch otherwise.
-
-         \sstitem
-         Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
-         example).
-
-         \sstitem
-         Modified Julian Date: With or without decimal places
-         ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
-         \sstitem
-         Gregorian Calendar Date: With the month expressed either as an
-         integer or a 3-character abbreviation, and with optional decimal
-         places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
-         {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
-         given, the time refers to the start of the day (zero hours).
-
-         \sstitem
-         Gregorian Date and Time: Any calendar date (as above) but with
-         a fraction of a day expressed as hours, minutes and seconds
-         ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
-         separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
-      }
-   }
-   \sstdiytopic{
-      Output Format
-   }{
-      When enquiring Epoch values, the format used is the {\tt{"}}Year{\tt{"}}
-      format described under {\tt{"}}Input Formats{\tt{"}}. This is a value in
-      decimal years which will be a Besselian epoch if less than
-      1984.0 and a Julian epoch otherwise.  By omitting any character
-      prefix, this format allows the Epoch value to be obtained as
-      either a character string or a floating point value.
-   }
-}
-\sstroutine{
-   Equinox\sstlabel{Equinox}
-}{
-   Epoch of the mean equinox
-}{
-   \sstdescription{
-      This attribute is used to qualify those celestial coordinate
-      systems described by a \htmlref{SkyFrame}{SkyFrame} which are notionally based on
-      the ecliptic (the plane of the Earth's orbit around the Sun)
-      and/or the Earth's equator.
-
-      Both of these planes are in motion and their positions are
-      difficult to specify precisely. In practice, therefore, a model
-      ecliptic and/or equator are used instead. These, together with
-      the point on the sky that defines the coordinate origin (the
-      intersection of the two planes termed the {\tt{"}}mean equinox{\tt{"}}) move
-      with time according to some model which removes the more rapid
-      fluctuations. The SkyFrame class supports both the FK4 and
-      FK5 models.
-
-      The position of a fixed source expressed in any of these
-      coordinate systems will appear to change with time due to
-      movement of the coordinate system itself (rather than motion of
-      the source).  Such coordinate systems must therefore be
-      qualified by a moment in time (the {\tt{"}}epoch of the mean equinox{\tt{"}}
-      or {\tt{"}}equinox{\tt{"}} for short) which allows the position of the model
-      coordinate system on the sky to be determined. This is the role
-      of the Equinox attribute.
-
-      The Equinox attribute is stored as a Modified Julian Date, but
-      when setting or getting its value you may use the same formats
-      as for the \htmlref{Epoch}{Epoch} attribute (q.v.).
-
-      The default Equinox value is B1950.0 (Besselian) for the old
-      FK4-based coordinate systems (see the \htmlref{System}{System} attribute) and
-      J2000.0 (Julian) for all others.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Care must be taken to distinguish the Equinox value, which
-         relates to the definition of a time-dependent coordinate system
-         (based on solar system reference planes which are in motion),
-         from the superficially similar Epoch value. The latter is used
-         to qualify coordinate systems where the positions of sources
-         change with time (or appear to do so) for a variety of other
-         reasons, such as aberration of light caused by the observer's
-         motion, etc.
-
-         \sstitem
-         See the description of the System attribute for details of
-         which qualifying attributes apply to each celestial coordinate
-         system.
-      }
-   }
-}
-\sstroutine{
-   Escape\sstlabel{Escape}
-}{
-   Allow changes of character attributes within strings?
-}{
-   \sstdescription{
-      This attribute controls the appearance of text strings and numerical
-      labels drawn by the \htmlref{astGrid}{astGrid} and (for the \htmlref{Plot}{Plot} class) \htmlref{astText}{astText} functions,
-      by determining if any escape sequences contained within the strings
-      should be used to control the appearance of the text, or should
-      be printed literally. Note, the \htmlref{Plot3D}{Plot3D} class only interprets escape
-      sequences within the
-      astGrid function.
-
-      If the Escape value of a Plot is one (the default), then any
-      escape sequences in text strings produce the effects described
-      below when printed. Otherwise, they are printed literally.
-
-      See also the \htmlref{astEscapes}{astEscapes} function.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Escape Sequences
-   }{
-      Escape sequences are introduced into the text string by a percent
-      {\tt{"}}\%{\tt{"}} character. Any unrecognised, illegal or incomplete escape sequences
-      are printed literally. The following escape sequences are
-      currently recognised ({\tt{"}}...{\tt{"}} represents a string of one or more
-      decimal digits):
-
-        \%\%      - Print a literal {\tt{"}}\%{\tt{"}} character.
-
-        \%$\wedge$...$+$  - Draw subsequent characters as super-scripts. The digits
-                  {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
-                  text to the base-line of the super-script text, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-        \%$\wedge$$+$     - Draw subsequent characters with the normal base-line.
-
-        \%v...$+$  - Draw subsequent characters as sub-scripts. The digits
-                  {\tt{"}}...{\tt{"}} give the distance from the base-line of {\tt{"}}normal{\tt{"}}
-                  text to the base-line of the sub-script text, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-
-        \%v$+$     - Draw subsequent characters with the normal base-line
-                  (equivalent to \%$\wedge$$+$).
-
-        \%$>$...$+$  - Leave a gap before drawing subsequent characters.
-                  The digits {\tt{"}}...{\tt{"}} give the size of the gap, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-
-        \%$<$...$+$  - Move backwards before drawing subsequent characters.
-                  The digits {\tt{"}}...{\tt{"}} give the size of the movement, scaled
-                  so that a value of {\tt{"}}100{\tt{"}} corresponds to the height of
-                  {\tt{"}}normal{\tt{"}} text.
-
-        \%s...$+$  - Change the Size attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Size as a fraction of the
-                  {\tt{"}}normal{\tt{"}} Size, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
-                  to 1.0;
-
-        \%s$+$     - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%w...$+$  - Change the Width attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new width as a fraction of the
-                  {\tt{"}}normal{\tt{"}} Width, scaled so that a value of {\tt{"}}100{\tt{"}} corresponds
-                  to 1.0;
-
-        \%w$+$     - Reset the Size attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%f...$+$  - Change the Font attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Font value.
-
-        \%f$+$     - Reset the Font attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%c...$+$  - Change the Colour attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Colour value.
-
-        \%c$+$     - Reset the Colour attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%t...$+$  - Change the Style attribute for subsequent characters. The
-                  digits {\tt{"}}...{\tt{"}} give the new Style value.
-
-        \%t$+$     - Reset the Style attribute to its {\tt{"}}normal{\tt{"}} value.
-
-        \%h$+$     - Remember the current horizontal position (see {\tt{"}}\%g$+${\tt{"}})
-
-        \%g$+$     - Go to the horizontal position of the previous {\tt{"}}\%h$+${\tt{"}} (if any).
-
-        \%-      - Push the current graphics attribute values onto the top of
-                  the stack (see {\tt{"}}\%$+${\tt{"}}).
-
-        \%$+$      - Pop attributes values of the top the stack (see {\tt{"}}\%-{\tt{"}}). If
-                  the stack is empty, {\tt{"}}normal{\tt{"}} attribute values are restored.
-   }
-}
-\sstroutine{
-   FillFactor\sstlabel{FillFactor}
-}{
-   Fraction of the Region which is of interest
-}{
-   \sstdescription{
-      This attribute indicates the fraction of the \htmlref{Region}{Region} which is of
-      interest. AST does not use this attribute internally for any purpose.
-      Typically, it could be used to indicate the fraction of the Region for
-      which data is available.
-
-      The supplied value must be in the range 0.0 to 1.0, and the default
-      value is 1.0 (except as noted below).
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default FillFactor for a CmpRegion is the FillFactor of its
-         first component Region.
-      }
-      \sstsubsection{
-         \htmlref{Prism}{Prism}
-      }{
-         The default FillFactor for a Prism is the product of the
-         FillFactors of its two component Regions.
-      }
-      \sstsubsection{
-         \htmlref{Stc}{Stc}
-      }{
-         The default FillFactor for an Stc is the FillFactor of its
-         encapsulated Region.
-      }
-   }
-}
-\sstroutine{
-   FitsDigits\sstlabel{FitsDigits}
-}{
-   Digits of precision for floating point FITS values
-}{
-   \sstdescription{
-      This attribute gives the number of significant decimal digits to
-      use when formatting floating point values for inclusion in the
-      FITS header cards within a \htmlref{FitsChan}{FitsChan}.
-
-      By default, a positive value is used which results in no loss of
-      information, assuming that the value's precision is double.
-      Usually, this causes no problems.
-
-      However, to adhere strictly to the recommendations of the FITS
-      standard, the width of the formatted value (including sign,
-      decimal point and exponent) ought not to be more than 20
-      characters. If you are concerned about this, you should set
-      FitsDigits to a negative value, such as -15. In this case, the
-      absolute value ($+$15) indicates the maximum number of significant
-      digits to use, but the actual number used may be fewer than this
-      to ensure that the FITS recommendations are satisfied. When
-      using this approach, the resulting number of significant digits
-      may depend on the value being formatted and on the presence of
-      any sign, decimal point or exponent.
-
-      The value of this attribute is effective when FITS header cards
-      are output, either using
-      \htmlref{astFindFits}{astFindFits} or by the action of the FitsChan's sink function
-      when it is finally deleted.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Font(element)\sstlabel{Fontelement}
-}{
-   Character font for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the character font index used when
-      drawing each element of graphical output produced by a \htmlref{Plot}{Plot}. It
-      takes a separate value for each graphical element so that, for
-      instance, the setting {\tt{"}}Font(title)=2{\tt{"}} causes the Plot title to
-      be drawn using font number 2.
-
-      The range of integer font indices available and the appearance
-      of the resulting text is determined by the underlying graphics
-      system.  The default behaviour is for all graphical elements to
-      be drawn using the default font supplied by this graphics
-      system.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Font{\tt{"}} instead
-         of {\tt{"}}Font(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
-         affect the attribute value of all graphical elements, while a
-         {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Font(TextLab)
-         value.
-      }
-   }
-}
-\sstroutine{
-   Format(axis)\sstlabel{Formataxis}
-}{
-   Format specification for axis values
-}{
-   \sstdescription{
-      This attribute specifies the format to be used when displaying
-      coordinate values associated with a particular \htmlref{Frame}{Frame} axis
-      (i.e. to convert values from binary to character form). It is
-      interpreted by the \htmlref{astFormat}{astFormat} function and determines the
-      formatting which it applies.
-
-      If no Format value is set for a Frame axis, a default value is
-      supplied instead. This is based on the value of the Digits, or
-      Digits(axis), attribute and is chosen so that it displays the
-      requested number of digits of precision.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The Frame class interprets this attribute as a format
-         specification string to be passed to the C {\tt{"}}printf{\tt{"}} function
-         (e.g. {\tt{"}}\%1.7G{\tt{"}}) in order to format a single coordinate value
-         (supplied as a double precision number).
-
-         When supplying a value for this attribute, beware that the
-         {\tt{"}}\%{\tt{"}} character may be interpreted directly as a format
-         specification by some printf-like functions (such as
-         \htmlref{astSet}{astSet}). You may need to double it (i.e. use {\tt{"}}\%\%{\tt{"}}) to avoid
-         this.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the syntax and default value of
-         the Format string to allow the formatting of sexagesimal
-         values as appropriate for the particular celestial coordinate
-         system being represented. The syntax of SkyFrame Format
-         strings is described (below) in the {\tt{"}}SkyFrame Formats{\tt{"}}
-         section.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Format attribute of a FrameSet axis is the same as that
-         of its current Frame (as specified by the \htmlref{Current}{Current}
-         attribute). Note that the syntax of the Format string is also
-         determined by the current Frame.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class extends the syntax of the Format string to
-         allow the formatting of TimeFrame axis values as Gregorian calendar
-         dates and times. The syntax of TimeFrame Format strings is described
-         (below) in the {\tt{"}}TimeFrame Formats{\tt{"}} section.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-   \sstdiytopic{
-      SkyFrame Formats
-   }{
-      The Format string supplied for a SkyFrame should contain zero or
-      more of the following characters. These may occur in any order,
-      but the following is recommended for clarity:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}$+${\tt{"}}: Indicates that a plus sign should be prefixed to positive
-         values. By default, no plus sign is used.
-
-         \sstitem
-         {\tt{"}}z{\tt{"}}: Indicates that leading zeros should be prefixed to the
-         value so that the first field is of constant width, as would be
-         required in a fixed-width table (leading zeros are always
-         prefixed to any fields that follow). By default, no leading
-         zeros are added.
-
-         \sstitem
-         {\tt{"}}i{\tt{"}}: Use the standard ISO field separator (a colon) between
-         fields. This is the default behaviour.
-
-         \sstitem
-         {\tt{"}}b{\tt{"}}: Use a blank to separate fields.
-
-         \sstitem
-         {\tt{"}}l{\tt{"}}: Use a letter ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} as appropriate) to
-         separate fields.
-
-         \sstitem
-         {\tt{"}}g{\tt{"}}: Use a letter and symbols to separate fields ({\tt{"}}h{\tt{"}}/{\tt{"}}d{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}},
-         etc, as appropriate), but include escape sequences in the formatted
-         value so that the \htmlref{Plot}{Plot} class will draw the separators as small
-         super-scripts.
-
-         \sstitem
-         {\tt{"}}d{\tt{"}}: Include a degrees field. Expressing the angle purely in
-         degrees is also the default if none of {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}}, {\tt{"}}s{\tt{"}} or {\tt{"}}t{\tt{"}} are
-         given.
-
-         \sstitem
-         {\tt{"}}h{\tt{"}}: Express the angle as a time and include an hours field
-         (where 24 hours correspond to 360 degrees). Expressing the angle
-         purely in hours is also the default if {\tt{"}}t{\tt{"}} is given without
-         either {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}}.
-
-         \sstitem
-         {\tt{"}}m{\tt{"}}: Include a minutes field. By default this is not included.
-
-         \sstitem
-         {\tt{"}}s{\tt{"}}: Include a seconds field. By default this is not included.
-         This request is ignored if {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is given, unless a minutes
-         field is also included.
-
-         \sstitem
-         {\tt{"}}t{\tt{"}}: Express the angle as a time (where 24 hours correspond to
-         360 degrees). This option is ignored if either {\tt{"}}d{\tt{"}} or {\tt{"}}h{\tt{"}} is
-         given and is intended for use where the value is to be expressed
-         purely in minutes and/or seconds of time (with no hours
-         field). If {\tt{"}}t{\tt{"}} is given without {\tt{"}}d{\tt{"}}, {\tt{"}}h{\tt{"}}, {\tt{"}}m{\tt{"}} or {\tt{"}}s{\tt{"}} being
-         present, then it is equivalent to {\tt{"}}h{\tt{"}}.
-
-         \sstitem
-         {\tt{"}}.{\tt{"}}: Indicates that decimal places are to be given for the
-         final field in the formatted string (whichever field this
-         is). The {\tt{"}}.{\tt{"}} should be followed immediately by an unsigned
-         integer which gives the number of decimal places required, or by an
-         asterisk. If an asterisk is supplied, a default number of decimal
-         places is used which is based on the value of the Digits
-         attribute.
-
-      }
-      All of the above format specifiers are case-insensitive. If
-      several characters make conflicting requests (e.g. if both {\tt{"}}i{\tt{"}}
-      and {\tt{"}}b{\tt{"}} appear), then the character occurring last takes
-      precedence, except that {\tt{"}}d{\tt{"}} and {\tt{"}}h{\tt{"}} always override {\tt{"}}t{\tt{"}}.
-
-      If the format string starts with a percentage sign (\%), then the
-      whole format string is assumed to conform to the syntax defined by
-      the Frame class, and the axis values is formated as a decimal
-      radians value.
-   }
-   \sstdiytopic{
-      TimeFrame Formats
-   }{
-      The Format string supplied for a TimeFrame should either use the
-      syntax defined by the base Frame class (i.e. a C {\tt{"}}printf{\tt{"}} format
-      string), or the extended {\tt{"}}iso{\tt{"}} syntax described below (the default
-      value is inherited from the Frame class):
-
-      \sstitemlist{
-
-         \sstitem
-         C {\tt{"}}printf{\tt{"}} syntax: If the Format string is a C {\tt{"}}printf{\tt{"}} format
-         description such as {\tt{"}}\%1.7G{\tt{"}}, the TimeFrame axis value will be
-         formatted without change as a floating point value using this format.
-         The formatted string will thus represent an offset from the zero point
-         specified by the TimeFrame's \htmlref{TimeOrigin}{TimeOrigin} attribute, measured in
-         units given by the TimeFrame's Unit attribute.
-
-         \sstitem
-         {\tt{"}}iso{\tt{"}} syntax: This is used to format a TimeFrame axis value as a
-         Gregorian date followed by an optional time of day. If the Format
-         value commences with the string {\tt{"}}iso{\tt{"}} then the TimeFrame axis value
-         will be converted to an absolute MJD, including the addition of the
-         current TimeOrigin value, and then formatted as a Gregorian date
-         using the format {\tt{"}}yyyy-mm-dd{\tt{"}}. Optionally, the Format value may
-         include an integer precision following the {\tt{"}}iso{\tt{"}} specification (e.g.
-         {\tt{"}}iso.2{\tt{"}}), in which case the time of day will be appended to the
-         formatted date (if no time of day is included, the date field is
-         rounded to the nearest day). The integer value in the Format string
-         indicates the number of decimal places to use in the seconds field. For
-         instance, a Format value of {\tt{"}}iso.0{\tt{"}} produces a time of day of the form
-         {\tt{"}}hh:mm:ss{\tt{"}}, and a Format value of {\tt{"}}iso.2{\tt{"}} produces a time of day of the
-         form {\tt{"}}hh:mm:ss.ss{\tt{"}}. The date and time fields will be separated by a
-         space unless 'T' is appended to the end of string, in which case
-         the letter T (upper case) will be used as the separator. The value of
-         the Digits attribute is ignored when using this {\tt{"}}iso{\tt{"}} format.
-      }
-   }
-}
-\sstroutine{
-   Full\sstlabel{Full}
-}{
-   Set level of output detail
-}{
-   \sstdescription{
-      This attribute is a three-state flag and takes values of -1, 0
-      or $+$1.  It controls the amount of information included in the
-      output generated by a \htmlref{Channel}{Channel}.
-
-      If Full is zero, then a modest amount of
-      non-essential but useful information will be included in the
-      output. If Full is negative, all non-essential information will
-      be suppressed to minimise the amount of output, while if it is
-      positive, the output will include the maximum amount of detailed
-      information about the \htmlref{Object}{Object} being written.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         The default value is zero for a normal Channel.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The default value is zero for a FitsChan.
-      }
-      \sstsubsection{
-         \htmlref{XmlChan}{XmlChan}
-      }{
-         The default value is -1 for an XmlChan.
-      }
-      \sstsubsection{
-         \htmlref{StcsChan}{StcsChan}
-      }{
-         The default value is zero for an StcsChan. Set a positive value
-         to cause default values to be included in STC-S descriptions.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         All positive values supplied for this attribute are converted
-         to $+$1 and all negative values are converted to -1.
-      }
-   }
-}
-\sstroutine{
-   Gap(axis)\sstlabel{Gapaxis}
-}{
-   Interval between linearly spaced major axis values of a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      the linear interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
-      which (for example) major tick marks are drawn. It takes a separate
-      value for each physical axis of the Plot so that, for instance,
-      the setting {\tt{"}}Gap(2)=3.0{\tt{"}} specifies the difference between adjacent major
-      values along the second axis. The Gap attribute is only used when
-      the LogTicks attribute indicates that the spacing between major axis
-      values is to be linear. If major axis values are logarithmically spaced
-      then the gap is specified using attribute LogGap.
-
-      The Gap value supplied will usually be rounded to the nearest
-      {\tt{"}}nice{\tt{"}} value, suitable (e.g.) for generating axis labels, before
-      use. To avoid this {\tt{"}}nicing{\tt{"}} you should set an explicit format
-      for the axis using the \htmlref{Format(axis)}{Formataxis} or \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}
-      attribute. The default behaviour is for the Plot to generate its
-      own Gap value when required, based on the range of axis values
-      to be represented.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Gap value should use the same units as are used internally
-         for storing coordinate values on the corresponding axis. For
-         example, with a celestial coordinate system, the Gap value
-         should be in radians, not hours or degrees.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}Gap{\tt{"}} instead of {\tt{"}}Gap(2){\tt{"}}),
-         then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
-         value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
-         will use just the Gap(1) value.
-      }
-   }
-}
-\sstroutine{
-   Grf\sstlabel{Grf}
-}{
-   Use Grf functions registered through astGrfSet?
-}{
-   \sstdescription{
-      This attribute selects the functions which are used to draw graphics by
-      the \htmlref{Plot}{Plot} class. If it is zero, then the functions in the graphics
-      interface selected at link-time are used (see the \htmlref{ast\_link}{ast_link} script).
-      Otherwise, functions registered using \htmlref{astGrfSet}{astGrfSet} are used. In this
-      case, if a function is needed which has not been registered,
-      then the function in the graphics interface selected at link-time is
-      used.
-
-      The default is to use the graphics interface
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes, assuming a value of
-         zero.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The value of this attribute is not saved when the Plot is written
-         out through a \htmlref{Channel}{Channel} to an external data store. On re-loading such
-         a Plot using \htmlref{astRead}{astRead}, the attribute will be cleared, resulting in the
-         graphics interface selected at link-time being used.
-      }
-   }
-}
-\sstroutine{
-   Grid\sstlabel{Grid}
-}{
-   Draw grid lines for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether grid lines (a grid of curves marking the {\tt{"}}major{\tt{"}} values
-      on each axis) are drawn across the plotting area.
-
-      If the Grid value of a \htmlref{Plot}{Plot} is non-zero, then grid lines will be
-      drawn. Otherwise, short tick marks on the axes are used to mark
-      the major axis values.  The default behaviour is to use tick
-      marks if the entire plotting area is filled by valid physical
-      coordinates, but to draw grid lines otherwise.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The spacing between major axis values, which determines the
-         spacing of grid lines, may be set using the \htmlref{Gap(axis)}{Gapaxis} attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismAlpha\sstlabel{GrismAlpha}
-}{
-   The angle of incidence of the incoming light on the grating surface
-}{
-   \sstdescription{
-      This attribute holds the angle between the incoming light and the
-      normal to the grating surface, in radians. The default value is 0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismEps\sstlabel{GrismEps}
-}{
-   The angle between the normal and the dispersion plane
-}{
-   \sstdescription{
-      This attribute holds the angle (in radians) between the normal to
-      the grating or exit prism face, and the dispersion plane. The
-      dispersion plane is the plane spanned by the incoming and outgoing
-      ray. The default value is 0.0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismG\sstlabel{GrismG}
-}{
-   The grating ruling density
-}{
-   \sstdescription{
-      This attribute holds the number of grating rulings per unit length.
-      The unit of length used should be consistent with the units used
-      for attributes \htmlref{GrismWaveR}{GrismWaveR} and \htmlref{GrismNRP}{GrismNRP}. The default value is 0.0.
-      (the appropriate value for a pure prism disperser with no grating).
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismM\sstlabel{GrismM}
-}{
-   The interference order
-}{
-   \sstdescription{
-      This attribute holds the interference order being considered.
-      The default value is 0.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismNR\sstlabel{GrismNR}
-}{
-   The refractive index at the reference wavelength
-}{
-   \sstdescription{
-      This attribute holds refractive index of the grism material at the
-      reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default
-      value is 1.0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismNRP\sstlabel{GrismNRP}
-}{
-   The rate of change of refractive index with wavelength
-}{
-   \sstdescription{
-      This attribute holds the rate of change of the refractive index of the
-      grism material with respect to wavelength at the reference wavelength
-      (given by attribute \htmlref{GrismWaveR}{GrismWaveR}). The default value is 0.0 (the
-      appropriate value for a pure grating disperser with no prism). The
-      units of this attribute should be consistent with those of attributes
-      GrismWaveR and \htmlref{GrismG}{GrismG}.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismTheta\sstlabel{GrismTheta}
-}{
-   Angle between normal to detector plane and reference ray
-}{
-   \sstdescription{
-      This attribute gives the angle of incidence of light of the
-      reference wavelength (given by attribute \htmlref{GrismWaveR}{GrismWaveR}) onto the
-      detector. Specifically, it holds the angle (in radians) between
-      the normal to the detector plane and an incident ray at the reference
-      wavelength. The default value is 0.0.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   GrismWaveR\sstlabel{GrismWaveR}
-}{
-   The reference wavelength
-}{
-   \sstdescription{
-      This attribute holds reference wavelength. The default value is
-      5000 (Angstrom). The units of this attribute should be consistent with
-      those of attributes \htmlref{GrismNRP}{GrismNRP} and \htmlref{GrismG}{GrismG}.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{GrismMap}{GrismMap}
-      }{
-         All GrismMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ID\sstlabel{ID}
-}{
-   Object identification string
-}{
-   \sstdescription{
-      This attribute contains a string which may be used to identify
-      the \htmlref{Object}{Object} to which it is attached. There is no restriction on
-      the contents of this string, which is not used internally by the
-      AST library, and is simply returned without change when
-      required. The default value is an empty string.
-
-      An identification string can be valuable when, for example,
-      several Objects have been stored in a file (using \htmlref{astWrite}{astWrite}) and
-      are later retrieved (using \htmlref{astRead}{astRead}). Consistent use of the ID
-      attribute allows the retrieved Objects to be identified without
-      depending simply on the order in which they were stored.
-
-      This attribute may also be useful during debugging, to
-      distinguish similar Objects when using \htmlref{astShow}{astShow} to display them.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Unlike most other attributes, the value of the ID attribute is
-         not transferred when an Object is copied. Instead, its value is
-         undefined (and therefore defaults to an empty string) in any
-         copy. However, it is retained in any external representation of
-         an Object produced by the astWrite function.
-      }
-   }
-}
-\sstroutine{
-   IF\sstlabel{IF}
-}{
-   The intermediate frequency in a dual sideband spectrum
-}{
-   \sstdescription{
-      This attribute specifies the (topocentric) intermediate frequency in
-      a dual sideband spectrum. Its sole use is to determine the local
-      oscillator (LO) frequency (the frequency which marks the boundary
-      between the lower and upper sidebands). The LO frequency is
-      equal to the sum of the centre frequency and the intermediate
-      frequency. Here, the {\tt{"}}centre frequency{\tt{"}} is the topocentric
-      frequency in Hz corresponding to the current value of the \htmlref{DSBCentre}{DSBCentre}
-      attribute. The value of the IF attribute may be positive or
-      negative: a positive value results in the LO frequency being above
-      the central frequency, whilst a negative IF value results in the LO
-      frequency being below the central frequency. The sign of the IF
-      attribute value determines the default value for the \htmlref{SideBand}{SideBand}
-      attribute.
-
-      When setting a new value for this attribute, the units in which the
-      frequency value is supplied may be indicated by appending a suitable
-      string to the end of the formatted value. If the units are not
-      specified, then the supplied value is assumed to be in units of GHz.
-      For instance, the following strings all result in an IF of 4 GHz being
-      used: {\tt{"}}4.0{\tt{"}}, {\tt{"}}4.0 GHz{\tt{"}}, {\tt{"}}4.0E9 Hz{\tt{"}}, etc.
-
-      When getting the value of this attribute, the returned value is
-      always in units of GHz. The default value for this attribute is 4 GHz.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Ident\sstlabel{Ident}
-}{
-   Permanent Object identification string
-}{
-   \sstdescription{
-      This attribute is like the \htmlref{ID}{ID} attribute, in that it contains a
-      string which may be used to identify the \htmlref{Object}{Object} to which it is
-      attached. The only difference between ID and Ident is that Ident
-      is transferred when an Object is copied, but ID is not.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ImagFreq\sstlabel{ImagFreq}
-}{
-   The image sideband equivalent of the rest frequency
-}{
-   \sstdescription{
-      This is a read-only attribute giving the frequency which
-      corresponds to the rest frequency but is in the opposite sideband.
-
-      The value is calculated by first transforming the rest frequency
-      (given by the \htmlref{RestFreq}{RestFreq} attribute) from the standard of rest of the
-      source (given by the \htmlref{SourceVel}{SourceVel} and \htmlref{SourceVRF}{SourceVRF} attributes) to the
-      standard of rest of the observer (i.e. the topocentric standard of
-      rest). The resulting topocentric frequency is assumed to be in the
-      same sideband as the value given for the \htmlref{DSBCentre}{DSBCentre} attribute (the
-      {\tt{"}}observed{\tt{"}} sideband), and is transformed to the other sideband (the
-      {\tt{"}}image{\tt{"}} sideband). The new frequency is converted back to the standard
-      of rest of the source, and the resulting value is returned as the
-      attribute value, in units of GHz.
-   }
-   \sstattributetype{
-      Floating point, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   IntraFlag\sstlabel{IntraFlag}
-}{
-   IntraMap identification string
-}{
-   \sstdescription{
-      This attribute allows an \htmlref{IntraMap}{IntraMap} to be flagged so that it is
-      distinguishable from other IntraMaps. The transformation function
-      associated with the IntraMap may then enquire the value of this
-      attribute and adapt the transformation it provides according to the
-      particular IntraMap involved.
-
-      Although this is a string attribute, it may often be useful to store
-      numerical values here, encoded as a character string, and to use these
-      as data within the transformation function. Note, however, that this
-      mechanism is not suitable for transferring large amounts of data (more
-      than about 1000 characters) to an IntraMap. For that purpose, global
-      variables are recommended, although the IntraFlag value can be used to
-      supplement this approach. The default IntraFlag value is an empty
-      string.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         IntraMap
-      }{
-         All IntraMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A pair of IntraMaps whose transformations may potentially cancel
-         cannot be simplified to produce a \htmlref{UnitMap}{UnitMap} (e.g. using \htmlref{astSimplify}{astSimplify})
-         unless they have the same IntraFlag values. The test for equality is
-         case-sensitive.
-      }
-   }
-}
-\sstroutine{
-   Invert\sstlabel{Invert}
-}{
-   Mapping inversion flag
-}{
-   \sstdescription{
-      This attribute controls which one of a \htmlref{Mapping}{Mapping}'s two possible
-      coordinate transformations is considered the {\tt{"}}forward{\tt{"}}
-      transformation (the other being the {\tt{"}}inverse{\tt{"}}
-      transformation). If the attribute value is zero (the default),
-      the Mapping's behaviour will be the same as when it was first
-      created. However, if it is non-zero, its two transformations
-      will be inter-changed, so that the Mapping displays the inverse
-      of its original behaviour.
-
-      Inverting the boolean sense of the Invert attribute will cause
-      the values of a Mapping's \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes to be
-      interchanged. The values of its \htmlref{TranForward}{TranForward} and \htmlref{TranInverse}{TranInverse}
-      attributes will also be interchanged. This operation may be
-      performed with the \htmlref{astInvert}{astInvert} function.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{UnitMap}{UnitMap}
-      }{
-         The value of the Invert attribute has no effect on the
-         behaviour of a UnitMap.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         Inverting the boolean sense of the Invert attribute for a
-         FrameSet will cause its base and current Frames (and its \htmlref{Base}{Base}
-         and \htmlref{Current}{Current} attributes) to be interchanged. This, in turn,
-         may affect other properties and attributes of the FrameSet
-         (such as Nin, Nout, \htmlref{Naxes}{Naxes}, TranForward, TranInverse,
-         etc.). The Invert attribute of a FrameSet is not itself
-         affected by selecting a new base or current \htmlref{Frame}{Frame}.
-      }
-   }
-}
-\sstroutine{
-   Invisible\sstlabel{Invisible}
-}{
-   Draw graphics using invisible ink?
-}{
-   \sstdescription{
-      This attribute controls the appearance of all graphics produced by
-      \htmlref{Plot}{Plot} methods by determining whether graphics should be visible or
-      invisible.
-
-      If the Invisible value of a Plot is non-zero, then all the Plot
-      methods which normally generate graphical output do not do so (you
-      can think of them drawing with {\tt{"}}invisible ink{\tt{"}}). Such methods do,
-      however, continue to do all the calculations which would be needed to
-      produce the graphics. In particular, the bounding box enclosing the
-      graphics is still calculated and can be retrieved as normal using
-      \htmlref{astBoundingBox}{astBoundingBox}. The default value is zero, resulting in all methods
-      drawing graphics as normal, using visible ink.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   IsLinear\sstlabel{IsLinear}
-}{
-   Is the Mapping linear?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} is an instance of a
-      class that always represents a linear transformation. Note, some
-      Mapping classes can represent linear or non-linear transformations
-      (the \htmlref{MathMap}{MathMap} class for instance). Such classes have a zero value for
-      the IsLinear attribute. Specific instances of such classes can be
-      tested for linearity using the
-      \htmlref{astLinearApprox}{astLinearApprox} function.
-      AST\_LINEARAPPROX routine.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         The IsLinear value for a CmpMap is determined by the classes
-         of the encapsulated Mappings. For instance, a CmpMap that combines
-         a \htmlref{ZoomMap}{ZoomMap} and a \htmlref{ShiftMap}{ShiftMap} will have a non-zero value for its IsLinear
-         attribute, but a CmpMap that contains a MathMap will have a
-         value of zero for its IsLinear attribute.
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The IsLinear value for a Frame is 1 (since a Frame is equivalent
-         to a \htmlref{UnitMap}{UnitMap}).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The IsLinear value for a FrameSet is obtained from the Mapping
-         from the base Frame to the current Frame.
-      }
-   }
-}
-\sstroutine{
-   IsSimple\sstlabel{IsSimple}
-}{
-   Has the Mapping been simplified?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} has been simplified
-      by the
-      \htmlref{astSimplify}{astSimplify}
-      method. If the IsSimple value is non-zero, then the Mapping has
-      been simplified and so there is nothing to be gained by simplifying
-      it again. Indeed, the
-      astSimplify
-      method will immediately return the Mapping unchanged if the IsSimple
-      attribute indicates that the Mapping has already been simplified.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         All classes of Frame return zero for the IsSimple attribute.
-         This is because changes can be made to a Frame which affect the
-         Mapping represented by the Frame, and so there can be no
-         guarantee that the Mapping may not need re-simplifying. Most
-         non-Frame Mappings, on the other hand, are immutable and so when
-         they are simplified it is certain that they weill remain in a
-         simple state.
-      }
-   }
-}
-\sstroutine{
-   Iwc\sstlabel{Iwc}
-}{
-   Include a Frame representing FITS-WCS intermediate world coordinates?
-}{
-   \sstdescription{
-      This attribute is a boolean value which is used when a \htmlref{FrameSet}{FrameSet} is
-      read from a \htmlref{FitsChan}{FitsChan} with a foreign FITS encoding (e.g. FITS-WCS) using
-      \htmlref{astRead}{astRead}.
-      If it has a non-zero value then the returned FrameSet will include
-      Frames representing {\tt{"}}intermediate world coordinates{\tt{"}} (IWC). These
-      Frames will have \htmlref{Domain}{Domain} name {\tt{"}}IWC{\tt{"}} for primary axis descriptions, and
-      {\tt{"}}IWCa{\tt{"}} for secondary axis descriptions, where {\tt{"}}a{\tt{"}} is replaced by
-      the single alternate axis description character, as used in the
-      FITS-WCS header. The default value for {\tt{"}}Iwc{\tt{"}} is zero.
-
-      FITS-WCS paper 1 defines IWC as a Cartesian coordinate system with one
-      axis for each WCS axis, and is the coordinate system produced by the
-      rotation matrix (represented by FITS keyword PCi\_j, CDi\_j, etc).
-      For instance, for a 2-D FITS-WCS header describing projected
-      celestial longitude and latitude, the intermediate world
-      coordinates represent offsets in degrees from the reference point
-      within the plane of projection.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   KeyError\sstlabel{KeyError}
-}{
-   Report an error when getting the value of a non-existant KeyMap entry?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how the
-      astMapGet...
-      functions behave if the requested key is not found in the \htmlref{KeyMap}{KeyMap}.
-      If KeyError is zero (the default), then these functions will return
-      zero
-      but no error will be reported. If KeyError is non-zero, then the
-      same values are returned but an error is also reported.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         KeyMap
-      }{
-         All KeyMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   LTOffset\sstlabel{LTOffset}
-}{
-   The offset from UTC to Local Time, in hours
-}{
-   \sstdescription{
-      This specifies the offset from UTC to Local Time, in hours (fractional
-      hours can be supplied). It is positive for time zones east of Greenwich.
-      AST uses the figure as given, without making any attempt to correct for
-      daylight saving. The default value is zero.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Label(axis)\sstlabel{Labelaxis}
-}{
-   Axis label
-}{
-   \sstdescription{
-      This attribute specifies a label to be attached to each axis of
-      a \htmlref{Frame}{Frame} when it is represented (e.g.) in graphical output.
-
-      If a Label value has not been set for a Frame axis, then a
-      suitable default is supplied.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default supplied by the Frame class is the string {\tt{"}}\htmlref{Axis}{Axis}
-         $<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for each successive axis.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Label value
-         (e.g. to {\tt{"}}Right ascension{\tt{"}} or {\tt{"}}Galactic latitude{\tt{"}}) as
-         appropriate for the particular celestial coordinate system
-         being represented.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Label value as
-         appropriate for the particular time system being represented.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Label attribute of a FrameSet axis is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Axis labels are intended purely for interpretation by human
-         readers and not by software.
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   LabelAt(axis)\sstlabel{LabelAtaxis}
-}{
-   Where to place numerical labels for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      where numerical axis labels and associated tick marks are
-      placed.  It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LabelAt(2)=10.0{\tt{"}}
-      specifies where the numerical labels and tick marks for the
-      second axis should be drawn.
-
-      For each axis, the LabelAt value gives the value on the other
-      axis at which numerical labels and tick marks should be placed
-      (remember that Plots suitable for use with astGrid may only
-      have two axes).  For example, in a celestial (RA,Dec) coordinate
-      system, LabelAt(1) gives a Dec value which defines a line (of
-      constant Dec) along which the numerical RA labels and their
-      associated tick marks will be drawn. Similarly, LabelAt(2) gives
-      the RA value at which the Dec labels and ticks will be drawn.
-
-      The default bahaviour is for the Plot to generate its own
-      position for numerical labels and tick marks.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The LabelAt value should use the same units as are used
-         internally for storing coordinate values on the appropriate
-         axis. For example, with a celestial coordinate system, the
-         LabelAt value should be in radians, not hours or degrees.
-
-         \sstitem
-         Normally, the LabelAt value also determines where the lines
-         representing coordinate axes will be drawn, so that the tick
-         marks will lie on these lines (but also see the DrawAxes
-         attribute).
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn around the edges of the plotting area (see the \htmlref{Labelling}{Labelling}
-         attribute).  In this case, the value of the LabelAt attribute is
-         ignored.
-      }
-   }
-}
-\sstroutine{
-   LabelUnits(axis)\sstlabel{LabelUnitsaxis}
-}{
-   Use axis unit descriptions in a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether the descriptive labels drawn for each axis of a \htmlref{Plot}{Plot}
-      should include a description of the units being used on the
-      axis.  It takes a separate value for each physical axis of a
-      Plot so that, for instance, the setting {\tt{"}}LabelUnits(2)=1{\tt{"}}
-      specifies that a unit description should be included in the
-      label for the second axis.
-
-      If the LabelUnits value of a Plot axis is non-zero, a unit
-      description will be included in the descriptive label for that
-      axis, otherwise it will be omitted.  The default behaviour is to
-      include a unit description unless the current \htmlref{Frame}{Frame} of the Plot
-      is a \htmlref{SkyFrame}{SkyFrame} representing equatorial, ecliptic, galactic or
-      supergalactic coordinates, in which case it is omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the unit description is obtained from the
-         Plot's \htmlref{Unit(axis)}{Unitaxis} attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LabelUnits{\tt{"}} instead of
-         {\tt{"}}LabelUnits(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the LabelUnits(1) value.
-
-         \sstitem
-         If the current Frame of the Plot is not a SkyFrame, but includes
-         axes which were extracted from a SkyFrame, then the default behaviour
-         is to include a unit description only for those axes which were not
-         extracted from a SkyFrame.
-      }
-   }
-}
-\sstroutine{
-   LabelUp(axis)\sstlabel{LabelUpaxis}
-}{
-   Draw numerical Plot labels upright?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether the numerical labels for each axis of a \htmlref{Plot}{Plot} should be
-      drawn upright or not. It takes a separate value for each
-      physical axis of a Plot so that, for instance, the setting
-      {\tt{"}}LabelUp(2)=1{\tt{"}} specifies that numerical labels for the second
-      axis should be drawn upright.
-
-      If the LabelUp value of a Plot axis is non-zero, it causes
-      numerical labels for that axis to be plotted upright (i.e. as
-      normal, horizontal text), otherwise labels are drawn parallel to
-      the axis to which they apply.
-
-      The default is to produce upright labels if the labels are placed
-      around the edge of the plot, and to produce labels that follow the
-      axes if the labels are placed within the interior of the plot (see
-      attribute \htmlref{Labelling}{Labelling}).
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn around the edges of the plotting area (see the Labelling
-         attribute).  In this case, the value of the LabelUp attribute is
-         ignored.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LabelUp{\tt{"}} instead of
-         {\tt{"}}LabelUp(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LabelUp(1) value.
-      }
-   }
-}
-\sstroutine{
-   Labelling\sstlabel{Labelling}
-}{
-   Label and tick placement option for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      the strategy for placing numerical labels and tick marks for a \htmlref{Plot}{Plot}.
-
-      If the Labelling value of a Plot is {\tt{"}}exterior{\tt{"}} (the default), then
-      numerical labels and their associated tick marks are placed
-      around the edges of the plotting area, if possible. If this is
-      not possible, or if the Labelling value is {\tt{"}}interior{\tt{"}}, then they
-      are placed along grid lines inside the plotting area.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The \htmlref{LabelAt(axis)}{LabelAtaxis} attribute may be used to determine the exact
-         placement of labels and tick marks that are drawn inside the
-         plotting area.
-      }
-   }
-}
-\sstroutine{
-   LatAxis\sstlabel{LatAxis}
-}{
-   Index of the latitude axis
-}{
-   \sstdescription{
-      This read-only attribute gives the index (1 or 2) of the latitude
-      axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
-      permutations).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ListSize\sstlabel{ListSize}
-}{
-   Number of points in a PointList
-}{
-   \sstdescription{
-      This is a read-only attribute giving the number of points in a
-      \htmlref{PointList}{PointList}. This value is determined when the PointList is created.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         PointList
-      }{
-         All PointLists have this attribute.
-      }
-   }
-}
-\sstroutine{
-   LogGap(axis)\sstlabel{LogGapaxis}
-}{
-   Interval between major axis values of a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      the logarithmic interval between the {\tt{"}}major{\tt{"}} axis values of a \htmlref{Plot}{Plot}, at
-      which (for example) major tick marks are drawn. It takes a separate
-      value for each physical axis of the Plot so that, for instance,
-      the setting {\tt{"}}LogGap(2)=100.0{\tt{"}} specifies the ratio between adjacent major
-      values along the second axis. The LogGap attribute is only used when
-      the LogTicks attribute indicates that the spacing between major axis
-      values is to be logarithmic. If major axis values are linearly spaced
-      then the gap is specified using attribute Gap.
-
-      The LogGap value supplied will be rounded to the nearest power of 10.
-      The reciprocal of the supplied value may be used if this is necessary
-      to produce usable major axis values. If a zero or negative value is
-      supplied, an error will be reported when the grid is drawn. The default
-      behaviour is for the Plot to generate its own LogGap value when
-      required, based on the range of axis values to be represented.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The LogGap value is a ratio between axis values and is therefore
-         dimensionless.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogGap{\tt{"}} instead of {\tt{"}}LogGap(2){\tt{"}}),
-         then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the attribute
-         value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation
-         will use just the LogGap(1) value.
-      }
-   }
-}
-\sstroutine{
-   LogLabel(axis)\sstlabel{LogLabelaxis}
-}{
-   Use exponential format for numerical axis labels?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether the numerical axis labels should be in normal decimal form
-      or should be represented as 10 raised to the appropriate power.
-      That is, an axis value of 1000.0 will be drawn as {\tt{"}}1000.0{\tt{"}} if
-      LogLabel is zero, but as {\tt{"}}10$\wedge$3{\tt{"}} if LogLabel is non-zero. If
-      graphical escape sequences are supported (see attribute \htmlref{Escape}{Escape}),
-      the power in such exponential labels will be drawn as a small
-      superscript instead of using a {\tt{"}}$\wedge${\tt{"}} character to represent
-      exponentiation.
-
-      The default is to produce exponential labels if the major tick
-      marks are logarithmically spaced (see the LogTicks attribute).
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogLabel{\tt{"}} instead of
-         {\tt{"}}LogLabel(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LogLabel(1) value.
-      }
-   }
-}
-\sstroutine{
-   LogPlot(axis)\sstlabel{LogPlotaxis}
-}{
-   Map the plot logarithmically onto the screen?
-}{
-   \sstdescription{
-      This attribute controls the appearance of all graphics produced by
-      the \htmlref{Plot}{Plot}, by determining whether the axes of the plotting surface
-      are mapped logarithmically or linearly onto the base \htmlref{Frame}{Frame} of the
-      \htmlref{FrameSet}{FrameSet} supplied when the Plot was constructed. It takes a separate
-      value for each axis of the graphics coordinate system (i.e. the
-      base Frame in the Plot) so that, for instance, the setting
-      {\tt{"}}LogPlot(2)=1{\tt{"}} specifies that the second axis of the graphics
-      coordinate system (usually the vertical axis) should be mapped
-      logarithmically onto the second axis of the base Frame of the
-      FrameSet supplied when the Plot was constructed.
-
-      If the LogPlot value of a Plot axis is non-zero, it causes that
-      axis to be mapped logarithmically, otherwise (the default) the axis
-      is mapped linearly.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The setting of the LogPlot attribute provides the default value
-         for the related LogTicks attribute. By selecting suitable values for
-         LogPlot and LogTicks, it is possible to have tick marks which are evenly
-         spaced in value but which are mapped logarithmically onto the screen
-         (and vice-versa).
-
-         \sstitem
-         An axis may only be mapped logarithmically if the visible part of
-         the axis does not include the value zero. The visible part of the
-         axis is that part which is mapped onto the plotting area, and is
-         measured within the base Frame of the FrameSet which was supplied when
-         the Plot was constructed. Any attempt to set LogPlot to a non-zero value
-         will be ignored (without error) if the visible part of the axis
-         includes the value zero
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogPlot{\tt{"}} instead of
-         {\tt{"}}LogPlot(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LogPlot(1) value.
-      }
-   }
-}
-\sstroutine{
-   LogTicks(axis)\sstlabel{LogTicksaxis}
-}{
-   Space the major tick marks logarithmically?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether the major tick marks should be spaced logarithmically or
-      linearly in axis value. It takes a separate value for each physical
-      axis of the \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}LogTicks(2)=1{\tt{"}}
-      specifies that the major tick marks on the second axis should be
-      spaced logarithmically.
-
-      If the LogTicks value for a physical axis is non-zero, the major
-      tick marks on that axis will be spaced logarithmically (that is,
-      there will be a constant ratio between the axis values at adjacent
-      major tick marks). An error will be reported if the dynamic range of
-      the axis (the ratio of the largest to smallest displayed axis value)
-      is less than 10.0. If the LogTicks value is zero, the major tick marks
-      will be evenly spaced (that is, there will be a constant difference
-      between the axis values at adjacent major tick marks). The default is
-      to produce logarithmically spaced tick marks if the corresponding
-      LogPlot attribute is non-zero and the ratio of maximum axis value
-      to minimum axis value is 100 or more. If either of these conditions
-      is not met, the default is to produce linearly spaced tick marks.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The setting of the LogTicks attribute does not affect the mapping
-         of the plot onto the screen, which is controlled by attribute LogPlot.
-         By selecting suitable values for LogPlot and LogTicks, it is possible to
-         have tick marks which are evenly spaced in value but which are mapped
-         logarithmically onto the screen (and vica-versa).
-
-         \sstitem
-         An error will be reported when drawing an annotated axis grid if
-         the visible part of the physical axis includes the value zero.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}LogTicks{\tt{"}} instead of
-         {\tt{"}}LogTicks(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the LogTicks(1) value.
-      }
-   }
-}
-\sstroutine{
-   LonAxis\sstlabel{LonAxis}
-}{
-   Index of the longitude axis
-}{
-   \sstdescription{
-      This read-only attribute gives the index (1 or 2) of the longitude
-      axis within the \htmlref{SkyFrame}{SkyFrame} (taking into account any current axis
-      permutations).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   LutInterp\sstlabel{LutInterp}
-}{
-   Look-up table interpolation method
-}{
-   \sstdescription{
-      This attribute indicates the method to be used when finding the
-      output value of a \htmlref{LutMap}{LutMap} for an input value part way between two
-      table entries. If it is set to 0 (the default) then linear
-      interpolation is used. Otherwise, nearest neighbour interpolation
-      is used.
-
-      Using nearest neighbour interpolation causes AST\_\_BAD to be returned
-      for any point which falls outside the bounds of the table. Linear
-      interpolation results in an extrapolated value being returned based
-      on the two end entries in the table.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         LutMap
-      }{
-         All LutMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   MajTickLen(axis)\sstlabel{MajTickLenaxis}
-}{
-   Length of major tick marks for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      the length of the major tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
-      It takes a separate value for each physical axis of the Plot so
-      that, for instance, the setting {\tt{"}}MajTickLen(2)=0{\tt{"}} specifies the
-      length of the major tick marks drawn on the second axis.
-
-      The MajTickLen value should be given as a fraction of the
-      minimum dimension of the plotting area. Negative values cause
-      major tick marks to be placed on the outside of the
-      corresponding grid line or axis (but subject to any clipping
-      imposed by the underlying graphics system), while positive
-      values cause them to be placed on the inside.
-
-      The default behaviour depends on whether a coordinate grid is
-      drawn inside the plotting area (see the \htmlref{Grid}{Grid} attribute). If so,
-      the default MajTickLen value is zero (so that major ticks are
-      not drawn), otherwise the default is $+$0.015.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}MajTickLen{\tt{"}} instead of
-         {\tt{"}}MajTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the MajTickLen(1) value.
-      }
-   }
-}
-\sstroutine{
-   MatchEnd\sstlabel{MatchEnd}
-}{
-   Match trailing axes?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
-      behaves when it is used (by \htmlref{astFindFrame}{astFindFrame}) as a template to match
-      another (target) Frame. It applies only in the case where a
-      match occurs between template and target Frames with different
-      numbers of axes.
-
-      If the MatchEnd value of the template Frame is zero, then the
-      axes which occur first in the target Frame will be matched and
-      any trailing axes (in either the target or template) will be
-      disregarded. If it is non-zero, the final axes in each Frame
-      will be matched and any un-matched leading axes will be
-      disregarded instead.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default MatchEnd value for a Frame is zero, so that
-         trailing axes are disregarded.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The MatchEnd attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-}
-\sstroutine{
-   MaxAxes\sstlabel{MaxAxes}
-}{
-   Maximum number of Frame axes to match
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target) Frame. It
-      specifies the maximum number of axes that the target Frame may
-      have in order to match the template.
-
-      Normally, this value will equal the number of Frame axes, so
-      that a template Frame will only match another Frame with the
-      same number of axes as itself. By setting a different value,
-      however, the matching process may be used to identify Frames
-      with specified numbers of axes.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default MaxAxes value for a Frame is equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The MaxAxes attribute of a CmpFrame defaults to a large number
-         (1000000) which is much larger than any likely number of axes in
-         a Frame. Combined with the \htmlref{MinAxes}{MinAxes} default of zero (for a
-         CmpFrame), this means that the default behaviour for a CmpFrame
-         is to match any target Frame that consists of a subset of the
-         axes in the template CmpFrame. To change this so that a CmpFrame
-         will only match Frames that have the same number of axes, you
-         should set the CmpFrame MaxAxes and MinAxes attributes to the
-         number of axes in the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The MaxAxes attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When setting a MaxAxes value, the value of the MinAxes
-         attribute may also be silently changed so that it remains
-         consistent with (i.e. does not exceed) the new value. The
-         default MaxAxes value may also be reduced to remain consistent
-         with the MinAxes value.
-
-         \sstitem
-         If a template Frame is used to match a target with a different
-         number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
-         to determine how the individual axes of each Frame should match.
-      }
-   }
-}
-\sstroutine{
-   MeshSize\sstlabel{MeshSize}
-}{
-   Number of points used to represent the boundary of a Region
-}{
-   \sstdescription{
-      This attribute controls how many points are used when creating a
-      mesh of points covering the boundary of a \htmlref{Region}{Region}. This mesh is used
-      primarily when testing for overlap with a second Region: each point in
-      the mesh is checked to see if it is inside or outside the second Region.
-      Thus, the reliability of the overlap check depends on the value assigned
-      to this attribute. If the value used is very low, it is possible for
-      overlaps to go unnoticed. High values produce more reliable results, but
-      can result in the overlap test being very slow. The default value is 200
-      for two dimensional Regions and 2000 for three or more dimensional
-      Regions (this attribute is not used for 1-dimensional regions since the
-      boundary of a simple 1-d Region can only ever have two points). A
-      value of five is used if the supplied value is less than five.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpRegion}{CmpRegion}
-      }{
-         The default MeshSize for a CmpRegion is the MeshSize of its
-         first component Region.
-      }
-      \sstsubsection{
-         \htmlref{Stc}{Stc}
-      }{
-         The default MeshSize for an Stc is the MeshSize of its
-         encapsulated Region.
-      }
-   }
-}
-\sstroutine{
-   MinAxes\sstlabel{MinAxes}
-}{
-   Minimum number of Frame axes to match
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target) Frame. It
-      specifies the minimum number of axes that the target Frame may
-      have in order to match the template.
-
-      Normally, this value will equal the number of Frame axes, so
-      that a template Frame will only match another Frame with the
-      same number of axes as itself. By setting a different value,
-      however, the matching process may be used to identify Frames
-      with specified numbers of axes.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default MinAxes value for a Frame is equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The MinAxes attribute of a CmpFrame defaults to zero. Combined
-         with the \htmlref{MaxAxes}{MaxAxes} default of 1000000 (for a CmpFrame), this means
-         that the default behaviour for a CmpFrame is to match any target
-         Frame that consists of a subset of the axes in the template
-         CmpFrame. To change this so that a CmpFrame will only match Frames
-         that have the same number of axes, you should set the CmpFrame
-         MinAxes and MaxAxes attributes to the number of axes in the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The MinAxes attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When setting a MinAxes value, the value of the MaxAxes
-         attribute may also be silently changed so that it remains
-         consistent with (i.e. is not less than) the new value. The
-         default MinAxes value may also be reduced to remain consistent
-         with the MaxAxes value.
-
-         \sstitem
-         If a template Frame is used to match a target with a different
-         number of axes, the \htmlref{MatchEnd}{MatchEnd} attribute of the template is used
-         to determine how the individual axes of each Frame should match.
-      }
-   }
-}
-\sstroutine{
-   MinTick(axis)\sstlabel{MinTickaxis}
-}{
-   Density of minor tick marks for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      the density of minor tick marks which appear between the major
-      axis values of a \htmlref{Plot}{Plot}. It takes a separate value for each
-      physical axis of a Plot so that, for instance, the setting
-      {\tt{"}}MinTick(2)=2{\tt{"}} specifies the density of minor tick marks along
-      the second axis.
-
-      The value supplied should be the number of minor divisions
-      required between each pair of major axis values, this being one
-      more than the number of minor tick marks to be drawn.  By
-      default, a value is chosen that depends on the gap between major
-      axis values and the nature of the axis.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}MinTick{\tt{"}} instead of
-         {\tt{"}}MinTick(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the MinTick(1) value.
-      }
-   }
-}
-\sstroutine{
-   MinTickLen(axis)\sstlabel{MinTickLenaxis}
-}{
-   Length of minor tick marks for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      the length of the minor tick marks drawn on the axes of a \htmlref{Plot}{Plot}.
-      It takes a separate value for each physical axis of the Plot so
-      that, for instance, the setting {\tt{"}}MinTickLen(2)=0{\tt{"}} specifies the
-      length of the minor tick marks drawn on the second axis.
-
-      The MinTickLen value should be given as a fraction of the
-      minimum dimension of the plotting area. Negative values cause
-      minor tick marks to be placed on the outside of the
-      corresponding grid line or axis (but subject to any clipping
-      imposed by the underlying graphics system), while positive
-      values cause them to be placed on the inside.
-
-      The default value is $+$0.007.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The number of minor tick marks drawn is determined by the
-         Plot's \htmlref{MinTick(axis)}{MinTickaxis} attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}MinTickLen{\tt{"}} instead of
-         {\tt{"}}MinTickLen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the MinTickLen(1) value.
-      }
-   }
-}
-\sstroutine{
-   NatLat\sstlabel{NatLat}
-}{
-   Native latitude of the reference point of a FITS-WCS projection
-}{
-   \sstdescription{
-      This attribute gives the latitude of the reference point of the
-      FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
-      radians in the {\tt{"}}native spherical{\tt{"}} coordinate system. This value is
-      fixed for most projections, for instance it is PI/2 (90 degrees)
-      for all zenithal projections. For some projections (e.g. the conics)
-      the value is not fixed, but is specified by parameter one on the
-      latitude axis.
-
-      FITS-WCS paper II introduces the concept of a {\tt{"}}fiducial point{\tt{"}}
-      which is logical distinct from the projection reference point.
-      It is easy to confuse the use of these two points. The fiducial
-      point is the point which has celestial coordinates given by the
-      CRVAL FITS keywords. The native spherical coordinates for this point
-      default to the values of the NatLat and \htmlref{NatLon}{NatLon}, but these defaults
-      mey be over-ridden by values stored in the PVi\_j keywords. Put
-      another way, the CRVAL keywords will by default give the celestial
-      coordinates of the projection reference point, but may refer to
-      some other point if alternative native longitude and latitude values
-      are provided through the PVi\_j keywords.
-
-      The NatLat attribute is read-only.
-   }
-   \sstattributetype{
-      Floating point, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A default value of AST\_\_BAD is used if no latitude value is available.
-      }
-   }
-}
-\sstroutine{
-   NatLon\sstlabel{NatLon}
-}{
-   Native longitude of the reference point of a FITS-WCS projection
-}{
-   \sstdescription{
-      This attribute gives the longitude of the reference point of the
-      FITS-WCS projection implemented by a \htmlref{WcsMap}{WcsMap}. The value is in
-      radians in the {\tt{"}}native spherical{\tt{"}} coordinate system, and will
-      usually be zero. See the description of attribute \htmlref{NatLat}{NatLat} for further
-      information.
-
-      The NatLon attribute is read-only.
-   }
-   \sstattributetype{
-      Floating point, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Naxes\sstlabel{Naxes}
-}{
-   Number of Frame axes
-}{
-   \sstdescription{
-      This is a read-only attribute giving the number of axes in a
-      \htmlref{Frame}{Frame} (i.e. the number of dimensions of the coordinate space
-      which the Frame describes). This value is determined when the
-      Frame is created.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Naxes attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The Naxes attribute of a CmpFrame is equal to the sum of the
-         Naxes values of its two component Frames.
-      }
-   }
-}
-\sstroutine{
-   Ncard\sstlabel{Ncard}
-}{
-   Number of FITS header cards in a FitsChan
-}{
-   \sstdescription{
-      This attribute gives the total number of FITS header cards
-      stored in a \htmlref{FitsChan}{FitsChan}. It is updated as cards are added or
-      deleted.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   NegLon\sstlabel{NegLon}
-}{
-   Display negative longitude values?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how longitude values
-      are normalized for display by \htmlref{astNorm}{astNorm}.
-
-      If the NegLon attribute is zero, then normalized
-      longitude values will be in the range zero to 2.pi. If NegLon is
-      non-zero, then normalized longitude values will be in the range -pi
-      to pi.
-
-      The default value depends on the current value of the \htmlref{SkyRefIs}{SkyRefIs}
-      attribute, If SkyRefIs has a value of {\tt{"}}Origin{\tt{"}}, then the default for
-      NegLon is one, otherwise the default is zero.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Negated\sstlabel{Negated}
-}{
-   Region negation flag
-}{
-   \sstdescription{
-      This attribute controls whether a \htmlref{Region}{Region} represents the {\tt{"}}inside{\tt{"}} or
-      the {\tt{"}}outside{\tt{"}} of the area which was supplied when the Region was
-      created. If the attribute value is zero (the default), the Region
-      represents the inside of the original area. However, if it is non-zero,
-      it represents the outside of the original area. The value of this
-      attribute may be toggled using the
-      \htmlref{astNegate}{astNegate} function.
-
-      Note, whether the boundary is considered to be inside the Region or
-      not is controlled by the \htmlref{Closed}{Closed} attribute. Changing the value of
-      the Negated attribute does not change the value of the Closed attribute.
-      Thus, if Region is closed, then the boundary of the Region will be
-      inside the Region, whatever the setting of the Negated attribute.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Region
-      }{
-         All Regions have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Nframe\sstlabel{Nframe}
-}{
-   Number of Frames in a FrameSet
-}{
-   \sstdescription{
-      This attrbute gives the number of Frames in a \htmlref{FrameSet}{FrameSet}. This
-      value will change as Frames are added or removed, but will
-      always be at least one.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FrameSet
-      }{
-         All FrameSets have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Nin\sstlabel{Nin}
-}{
-   Number of input coordinates for a Mapping
-}{
-   \sstdescription{
-      This attribute gives the number of coordinate values required to
-      specify an input point for a \htmlref{Mapping}{Mapping} (i.e. the number of
-      dimensions of the space in which the Mapping's input points
-      reside).
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         If a CmpMap's component Mappings are joined in series, then
-         its Nin attribute is equal to the Nin attribute of the first
-         component (or to the \htmlref{Nout}{Nout} attribute of the second component
-         if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
-         If a CmpMap's component Mappings are joined in parallel, then
-         its Nin attribute is given by the sum of the Nin attributes
-         of each component (or to the sum of their Nout attributes if
-         the CmpMap's Invert attribute is non-zero).
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The Nin attribute for a Frame is always equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Nin attribute of a FrameSet is equal to the number of
-         axes (Naxes attribute) of its base Frame (as specified by the
-         FrameSet's \htmlref{Base}{Base} attribute). The Nin attribute value may
-         therefore change if a new base Frame is selected.
-      }
-   }
-}
-\sstroutine{
-   Nobject\sstlabel{Nobject}
-}{
-   Number of Objects in class
-}{
-   \sstdescription{
-      This attribute gives the total number of Objects currently in
-      existence in the same class as the \htmlref{Object}{Object} whose attribute value
-      is requested. This count does not include Objects which belong
-      to derived (more specialised) classes.
-
-      This attribute is mainly intended for debugging. It can be used
-      to detect whether Objects which should have been deleted have,
-      in fact, been deleted.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Norm(axis)\sstlabel{Normaxis}
-}{
-   Specifies the plane upon which a Plot3D draws text and markers
-}{
-   \sstdescription{
-      This attribute controls the appearance of text and markers drawn
-      by a \htmlref{Plot3D}{Plot3D}. It specifies the orientation of the plane upon which
-      text and markers will be drawn by all subsequent invocations of the
-      \htmlref{astText}{astText} and \htmlref{astMark}{astMark} functions.
-
-      When setting or getting the Norm attribute, the attribute name must
-      be qualified by an axis index in the range 1 to 3. The 3 elements of
-      the Norm attribute are together interpreted as a vector in 3D graphics
-      coordinates that is normal to the plane upon which text and marks
-      should be drawn. When testing or clearing the attribute, the axis
-      index is optional. If no index is supplied, then clearing the Norm
-      attribute will clear all three elements, and testing the Norm attribute
-      will return a non-zero value if any of the three elements are set.
-
-      The default value is 1.0 for each of the 3 elements. The length of
-      the vector is insignificant, but an error will be reported when
-      attempting to draw text or markers if the vector has zero length.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Plot}{Plot}
-      }{
-         All Plot3Ds have this attribute.
-      }
-   }
-}
-\sstroutine{
-   NormUnit(axis)\sstlabel{NormUnitaxis}
-}{
-   Normalised Axis physical units
-}{
-   \sstdescription{
-      The value of this read-only attribute is derived from the current
-      value of the Unit attribute. It will represent an equivalent system
-      of units to the Unit attribute, but will potentially be simplified.
-      For instance, if Unit is set to {\tt{"}}s$*$(m/s){\tt{"}}, the NormUnit value will
-      be {\tt{"}}m{\tt{"}}. If no simplification can be performed, the value of the
-      NormUnit attribute will equal that of the Unit attribute.
-   }
-   \sstattributetype{
-      String, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         All Frames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   Nout\sstlabel{Nout}
-}{
-   Number of output coordinates for a Mapping
-}{
-   \sstdescription{
-      This attribute gives the number of coordinate values generated
-      by a \htmlref{Mapping}{Mapping} to specify each output point (i.e. the number of
-      dimensions of the space in which the Mapping's output points
-      reside).
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         If a CmpMap's component Mappings are joined in series, then
-         its Nout attribute is equal to the Nout attribute of the
-         second component (or to the \htmlref{Nin}{Nin} attribute of the first
-         component if the the CmpMap's \htmlref{Invert}{Invert} attribute is non-zero).
-
-         If a CmpMap's component Mappings are joined in parallel, then
-         its Nout attribute is given by the sum of the Nout attributes
-         of each component (or to the sum of their Nin attributes if
-         the CmpMap's Invert attribute is non-zero).
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The Nout attribute for a Frame is always equal to the number
-         of Frame axes (\htmlref{Naxes}{Naxes} attribute).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Nout attribute of a FrameSet is equal to the number of
-         FrameSet axes (Naxes attribute) which, in turn, is equal to
-         the Naxes attribute of the FrameSet's current Frame (as
-         specified by the \htmlref{Current}{Current} attribute). The Nout attribute value
-         may therefore change if a new current Frame is selected.
-      }
-   }
-}
-\sstroutine{
-   NumLab(axis)\sstlabel{NumLabaxis}
-}{
-   Draw numerical axis labels for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether labels should be drawn to represent the numerical values
-      along each axis of a \htmlref{Plot}{Plot}. It takes a separate value for each
-      physical axis of a Plot so that, for instance, the setting
-      {\tt{"}}NumLab(2)=1{\tt{"}} specifies that numerical labels should be drawn
-      for the second axis.
-
-      If the NumLab value of a Plot axis is non-zero (the default),
-      then numerical labels will be drawn for that axis, otherwise
-      they will be omitted.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The drawing of associated descriptive axis labels for a Plot
-         (describing the quantity being plotted along each axis) is
-         controlled by the \htmlref{TextLab(axis)}{TextLabaxis} attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}NumLab{\tt{"}} instead of
-         {\tt{"}}NumLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect the
-         attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the NumLab(1) value.
-      }
-   }
-}
-\sstroutine{
-   NumLabGap(axis)\sstlabel{NumLabGapaxis}
-}{
-   Spacing of numerical labels for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      where numerical axis labels are placed relative to the axes they
-      describe.  It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}NumLabGap(2)=-0.01{\tt{"}}
-      specifies where the numerical label for the second axis should
-      be drawn.
-
-      For each axis, the NumLabGap value gives the spacing between the
-      axis line (or edge of the plotting area, if appropriate) and the
-      nearest edge of the corresponding numerical axis
-      labels. Positive values cause the descriptive label to be placed
-      on the opposite side of the line to the default tick marks,
-      while negative values cause it to be placed on the same side.
-
-      The NumLabGap value should be given as a fraction of the minimum
-      dimension of the plotting area, the default value being $+$0.01.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}NumLabGap{\tt{"}} instead of
-         {\tt{"}}NumLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the NumLabGap(1) value.
-      }
-   }
-}
-\sstroutine{
-   ObjSize\sstlabel{ObjSize}
-}{
-   The in-memory size of the Object
-}{
-   \sstdescription{
-      This attribute gives the total number of bytes of memory used by
-      the \htmlref{Object}{Object}. This includes any Objects which are encapsulated within
-      the supplied Object.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   ObsAlt\sstlabel{ObsAlt}
-}{
-   The geodetic altitude of the observer
-}{
-   \sstdescription{
-      This attribute specifies the geodetic altitude of the observer, in
-      metres, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
-      class makes no use of this attribute, but specialised subclasses of
-      Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
-      classes use it. The default value is zero.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
-         it defines the Doppler shift introduced by the observers diurnal
-         motion around the earths axis, which is needed when converting to
-         or from the topocentric standard of rest. The maximum velocity
-         error which can be caused by an incorrect value is 0.5 km/s. The
-         default value for the attribute is zero.
-      }
-      \sstsubsection{
-         TimeFrame
-      }{
-         Together with the ObsLon attribute, it is used when converting
-         between certain time scales (TDB, TCB, LMST, LAST)
-      }
-   }
-}
-\sstroutine{
-   ObsLat\sstlabel{ObsLat}
-}{
-   The geodetic latitude of the observer
-}{
-   \sstdescription{
-      This attribute specifies the geodetic latitude of the observer, in
-      degrees, relative to the IAU 1976 reference ellipsoid. The basic \htmlref{Frame}{Frame}
-      class makes no use of this attribute, but specialised subclasses of
-      Frame may use it. For instance, the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame}
-      classes use it. The default value is zero.
-
-      The value is stored internally in radians, but is converted to and
-      from a degrees string for access. Some example input formats are:
-      {\tt{"}}22:19:23.2{\tt{"}}, {\tt{"}}22 19 23.2{\tt{"}}, {\tt{"}}22:19.387{\tt{"}}, {\tt{"}}22.32311{\tt{"}}, {\tt{"}}N22.32311{\tt{"}},
-      {\tt{"}}-45.6{\tt{"}}, {\tt{"}}S45.6{\tt{"}}. As indicated, the sign of the latitude can
-      optionally be indicated using characters {\tt{"}}N{\tt{"}} and {\tt{"}}S{\tt{"}} in place of the
-      usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
-      format {\tt{"}}[s]dd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}N{\tt{"}} or {\tt{"}}S{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         Together with the \htmlref{ObsLon}{ObsLon}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
-         it defines the Doppler shift introduced by the observers diurnal
-         motion around the earths axis, which is needed when converting to
-         or from the topocentric standard of rest. The maximum velocity
-         error which can be caused by an incorrect value is 0.5 km/s. The
-         default value for the attribute is zero.
-      }
-      \sstsubsection{
-         TimeFrame
-      }{
-         Together with the ObsLon attribute, it is used when converting
-         between certain time scales (TDB, TCB, LMST, LAST)
-      }
-   }
-}
-\sstroutine{
-   ObsLon\sstlabel{ObsLon}
-}{
-   The geodetic longitude of the observer
-}{
-   \sstdescription{
-      This attribute specifies the geodetic (or equivalently, geocentric)
-      longitude of the observer, in degrees, measured positive eastwards.
-      See also attribute \htmlref{ObsLat}{ObsLat}. The basic \htmlref{Frame}{Frame} class makes no use of this
-      attribute, but specialised subclasses of Frame may use it. For instance,
-      the \htmlref{SpecFrame}{SpecFrame}, \htmlref{SkyFrame}{SkyFrame} and \htmlref{TimeFrame}{TimeFrame} classes use it. The default value
-      is zero.
-
-      The value is stored internally in radians, but is converted to and
-      from a degrees string for access. Some example input formats are:
-      {\tt{"}}155:19:23.2{\tt{"}}, {\tt{"}}155 19 23.2{\tt{"}}, {\tt{"}}155:19.387{\tt{"}}, {\tt{"}}155.32311{\tt{"}}, {\tt{"}}E155.32311{\tt{"}},
-      {\tt{"}}-204.67689{\tt{"}}, {\tt{"}}W204.67689{\tt{"}}. As indicated, the sign of the longitude can
-      optionally be indicated using characters {\tt{"}}E{\tt{"}} and {\tt{"}}W{\tt{"}} in place of the
-      usual {\tt{"}}$+${\tt{"}} and {\tt{"}}-{\tt{"}}. When converting the stored value to a string, the
-      format {\tt{"}}[s]ddd:mm:ss.ss{\tt{"}} is used, when {\tt{"}}[s]{\tt{"}} is {\tt{"}}E{\tt{"}} or {\tt{"}}W{\tt{"}} and the
-      numerical value is chosen to be less than 180 degrees.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         Together with the ObsLon, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes,
-         it defines the Doppler shift introduced by the observers diurnal
-         motion around the earths axis, which is needed when converting to
-         or from the topocentric standard of rest. The maximum velocity
-         error which can be caused by an incorrect value is 0.5 km/s. The
-         default value for the attribute is zero.
-      }
-      \sstsubsection{
-         TimeFrame
-      }{
-         Together with the ObsLon attribute, it is used when converting
-         between certain time scales (TDB, TCB, LMST, LAST)
-      }
-   }
-}
-\sstroutine{
-   PVMax(i)\sstlabel{PVMaxi}
-}{
-   Maximum number of FITS-WCS projection parameters
-}{
-   \sstdescription{
-      This attribute specifies the largest legal index for a PV projection
-      parameter attached to a specified axis of the \htmlref{WcsMap}{WcsMap} (i.e. the
-      largest legal value for {\tt{"}}m{\tt{"}} when accessing the {\tt{"}}\htmlref{PVi\_m}{PVi_m}{\tt{"}} attribute).
-      The axis index is specified by i, and should be in the range 1 to 99.
-      The value for each axis is determined by the projection type specified
-      when the WcsMap
-      is first created using \htmlref{astWcsMap}{astWcsMap} and cannot subsequently be
-      changed.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   PVi\_m\sstlabel{PVi_m}
-}{
-   FITS-WCS projection parameters
-}{
-   \sstdescription{
-      This attribute specifies the projection parameter values to be
-      used by a \htmlref{WcsMap}{WcsMap} when implementing a FITS-WCS sky projection.
-      Each PV attribute name should include two integers, i and m,
-      separated by an underscore. The axis index is specified
-      by i, and should be in the range 1 to 99. The parameter number
-      is specified by m, and should be in the range 0 to 99. For
-      example, {\tt{"}}PV2\_1=45.0{\tt{"}} would specify a value for projection
-      parameter 1 of axis 2 in a WcsMap.
-
-      These projection parameters correspond exactly to the values
-      stored using the FITS-WCS keywords {\tt{"}}PV1\_1{\tt{"}}, {\tt{"}}PV1\_2{\tt{"}}, etc. This
-      means that projection parameters which correspond to angles must
-      be given in degrees (despite the fact that the angular
-      coordinates and other attributes used by a WcsMap are in
-      radians).
-
-      The set of projection parameters used by a WcsMap depends on the
-      type of projection, which is determined by its \htmlref{WcsType}{WcsType}
-      parameter.  Most projections either do not require projection
-      parameters, or use parameters 1 and 2 associated with the latitude
-      axis. You should consult the FITS-WCS paper for details.
-
-      Some projection parameters have default values (as defined in
-      the FITS-WCS paper) which apply if no explicit value is given.
-      You may omit setting a value for these {\tt{"}}optional{\tt{"}} parameters and the
-      default will apply. Some projection parameters, however, have no
-      default and a value must be explicitly supplied.  This is most
-      conveniently
-      done using the {\tt{"}}options{\tt{"}} argument of \htmlref{astWcsMap}{astWcsMap} (q.v.) when a WcsMap
-      is first created. An error will result when a WcsMap is used to
-      transform coordinates if any of its required projection
-      parameters has not been set and lacks a default value.
-
-      A {\tt{"}}get{\tt{"}} operation for a parameter which has not been assigned a value
-      will return the default value defined in the FITS-WCS paper, or
-      AST\_\_BAD if the paper indicates that the parameter has no default.
-      A default value of zero is returned for parameters which are not
-      accessed by the projection.
-
-      Note, the FITS-WCS paper reserves parameters 1 and 2 on the longitude
-      axis to hold the native longitude and latitude of the fiducial
-      point of the projection, in degrees. The default values for these
-      parameters are determined by the projection type. The AST-specific
-      TPN projection does not use this convention - all projection
-      parameters for both axes are used to represent polynomical correction
-      terms, and the native longitude and latitude at the fiducial point may
-      not be changed from the default values of zero and 90 degrees.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the projection parameter values given for a WcsMap do not
-         satisfy all the required constraints (as defined in the FITS-WCS
-         paper), then an error will result when the WcsMap is used to
-         transform coordinates.
-      }
-   }
-}
-\sstroutine{
-   PcdCen(axis)\sstlabel{PcdCenaxis}
-}{
-   Centre coordinates of pincushion/barrel distortion
-}{
-   \sstdescription{
-      This attribute specifies the centre of the pincushion/barrel
-      distortion implemented by a \htmlref{PcdMap}{PcdMap}. It takes a separate value for
-      each axis of the PcdMap so that, for instance, the settings
-      {\tt{"}}PcdCen(1)=345.0,PcdCen(2)=-104.4{\tt{"}} specify that the pincushion
-      distortion is centred at positions of 345.0 and -104.4 on axes 1 and 2
-      respectively. This attribute is set when a PcdMap is created, but may
-      later be modified. If the attribute is cleared, the default value for
-      both axes is zero.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         PcdMap
-      }{
-         All PcdMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}PcdCen{\tt{"}} instead of
-         {\tt{"}}PcdCen(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of both axes, while a {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}}
-         operation will use just the PcdCen(1) value.
-      }
-   }
-}
-\sstroutine{
-   Permute\sstlabel{Permute}
-}{
-   Permute axis order?
-}{
-   \sstdescription{
-      This attribute is a boolean value which controls how a \htmlref{Frame}{Frame}
-      behaves when it is used (by \htmlref{astFindFrame}{astFindFrame}) as a template to match
-      another (target) Frame. It specifies whether the axis order of
-      the target Frame may be permuted in order to obtain a match.
-
-      If the template's Permute value is zero, it will match a target
-      only if it can do so without changing the order of its
-      axes. Otherwise, it will attempt to permute the target's axes as
-      necessary.
-
-      The default value is 1, so that axis permutation will be attempted.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute. However, the Frame class
-         effectively ignores this attribute and behaves as if it has
-         the value 1. This is because the axes of a basic Frame are
-         not distinguishable and will always match any other Frame
-         whatever their order.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         Unlike a basic Frame, the SkyFrame class makes use of this
-         attribute.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Permute attribute of a FrameSet is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-}
-\sstroutine{
-   PolarLong\sstlabel{PolarLong}
-}{
-   The longitude value to assign to either pole
-}{
-   \sstdescription{
-      This attribute holds the longitude value, in radians, to be
-      returned when a Cartesian position corresponding to either the north
-      or south pole is transformed into spherical coordinates. The
-      default value is zero.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SphMap}{SphMap}
-      }{
-         All SphMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   PreserveAxes\sstlabel{PreserveAxes}
-}{
-   Preserve axes?
-}{
-   \sstdescription{
-      This attribute controls how a \htmlref{Frame}{Frame} behaves when it is used (by
-      \htmlref{astFindFrame}{astFindFrame}) as a template to match another (target) Frame. It
-      determines which axes appear (and in what order) in the {\tt{"}}result{\tt{"}}
-      Frame produced.
-
-      If PreserveAxes is zero in the template Frame, then the result
-      Frame will have the same number (and order) of axes as the
-      template. If it is non-zero, however, the axes of the target
-      Frame will be preserved, so that the result Frame will have the
-      same number (and order) of axes as the target.
-
-      The default value is zero, so that target axes are not preserved
-      and the result Frame resembles the template.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         All Frames have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The PreserveAxes attribute of a FrameSet is the same as that
-         of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-}
-\sstroutine{
-   ProjP(m)\sstlabel{ProjPm}
-}{
-   FITS-WCS projection parameters
-}{
-   \sstdescription{
-      This attribute provides aliases for the PV attributes, which
-      specifies the projection parameter values to be used by a \htmlref{WcsMap}{WcsMap}
-      when implementing a FITS-WCS sky projection. ProjP is retained for
-      compatibility with previous versions of FITS-WCS and AST. New
-      applications should use the PV attibute instead.
-
-      Attributes ProjP(0) to ProjP(9) correspond to attributes PV$<$axlat$>$\_0
-      to PV$<$axlat$>$\_9, where $<$axlat$>$ is replaced by the index of the
-      latitude axis (given by attribute WcsAxis(2)). See PV for further
-      details.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Projection\sstlabel{Projection}
-}{
-   Sky projection description
-}{
-   \sstdescription{
-      This attribute provides a place to store a description of the
-      type of sky projection used when a \htmlref{SkyFrame}{SkyFrame} is attached to a
-      2-dimensional object, such as an image or plotting surface. For
-      example, typical values might be {\tt{"}}orthographic{\tt{"}}, {\tt{"}}Hammer-Aitoff{\tt{"}}
-      or {\tt{"}}cylindrical equal area{\tt{"}}.
-
-      The Projection value is purely descriptive and does not affect
-      the celestial coordinate system represented by the SkyFrame in
-      any way. If it is set to a non-blank string, the description
-      provided may be used when forming the default value for the
-      SkyFrame's \htmlref{Title}{Title} attribute (so that typically it will appear in
-      graphical output, for instance). The default value is an empty
-      string.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RefCount\sstlabel{RefCount}
-}{
-   Count of active Object pointers
-}{
-   \sstdescription{
-      This attribute gives the number of active pointers associated
-      with an \htmlref{Object}{Object}. It is modified whenever pointers are created or
-      annulled (by \htmlref{astClone}{astClone}, \htmlref{astAnnul}{astAnnul} or \htmlref{astEnd}{astEnd} for example). The count
-      includes the initial pointer issued when the Object was created.
-
-      If the reference count for an Object falls to zero as the result
-      of annulling a pointer to it, then the Object will be deleted.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RefDec\sstlabel{RefDec}
-}{
-   The declination of the reference point
-}{
-   \sstdescription{
-      This attribute specifies the FK5 J2000.0 declination of a reference
-      point on the sky. See the description of attribute \htmlref{RefRA}{RefRA} for details.
-      The default RefDec is {\tt{"}}0:0:0{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RefRA\sstlabel{RefRA}
-}{
-   The right ascension of the reference point
-}{
-   \sstdescription{
-      This attribute, together with the \htmlref{RefDec}{RefDec} attribute, specifies the FK5
-      J2000.0 coordinates of a reference point on the sky. For 1-dimensional
-      spectra, this should normally be the position of the source. For
-      spectral data with spatial coverage (spectral cubes, etc), this should
-      be close to centre of the spatial coverage. It is used to define the
-      correction for Doppler shift to be applied when using the
-      \htmlref{astFindFrame}{astFindFrame} or \htmlref{astConvert}{astConvert}
-      method to convert between different standards of rest.
-
-      The \htmlref{SpecFrame}{SpecFrame} class assumes this velocity correction is spatially
-      invariant. If a single SpecFrame is used (for instance, as a
-      component of a \htmlref{CmpFrame}{CmpFrame}) to describe spectral values at different
-      points on the sky, then it is assumes that the doppler shift at any
-      spatial position is the same as at the reference position. The
-      maximum velocity error introduced by this assumption is of the order
-      of V$*$SIN(FOV), where FOV is the angular field of view, and V is the
-      relative velocity of the two standards of rest. As an example, when
-      correcting from the observers rest frame (i.e. the topocentric rest
-      frame) to the kinematic local standard of rest the maximum value of V
-      is about 20 km/s, so for 5 arc-minute field of view the maximum velocity
-      error introduced by the correction will be about 0.03 km/s. As another
-      example, the maximum error when correcting from the observers rest frame
-      to the local group is about 5 km/s over a 1 degree field of view.
-
-      The RefRA and RefDec attributes are stored internally in radians, but
-      are converted to and from a string for access. The format {\tt{"}}hh:mm:ss.ss{\tt{"}}
-      is used for RefRA, and {\tt{"}}dd:mm:ss.s{\tt{"}} is used for RefDec. The methods
-      \htmlref{astSetRefPos}{astSetRefPos} and \htmlref{astGetRefPos}{astGetRefPos} may be used to access the values of
-      these attributes directly as unformatted values in radians.
-
-      The default for RefRA is {\tt{"}}0:0:0{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RegionClass\sstlabel{RegionClass}
-}{
-   The AST class name of the Region encapsulated within an Stc
-}{
-   \sstdescription{
-      This is a read-only attribute giving the AST class name of the
-      \htmlref{Region}{Region} encapsulated within an \htmlref{Stc}{Stc} (that is, the class of the Region
-      which was supplied when the Stc was created).
-   }
-   \sstattributetype{
-      String, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Stc
-      }{
-         All Stc objects this attribute.
-      }
-   }
-}
-\sstroutine{
-   Report\sstlabel{Report}
-}{
-   Report transformed coordinates?
-}{
-   \sstdescription{
-      This attribute controls whether coordinate values are reported
-      whenever a \htmlref{Mapping}{Mapping} is used to transform a set of points. If its
-      value is zero (the default), no report is made. However, if it
-      is non-zero, the coordinates of each point are reported (both
-      before and after transformation) by writing them to standard
-      output.
-
-      This attribute is provided as an aid to debugging, and to avoid
-      having to report values explicitly in simple programs.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         When applied to a compound Mapping (CmpMap), only the Report
-         attribute of the CmpMap, and not those of its component
-         Mappings, is used.  Coordinate information is never reported
-         for the component Mappings individually, only for the
-         complete CmpMap.
-      }
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         When applied to any Frame, the formatting capabilities of the
-         Frame (as provided by the \htmlref{astFormat}{astFormat} function) will be used to
-         format the reported coordinates.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         When applied to any FrameSet, the formatting capabilities of
-         the base and current Frames will be used (as above) to
-         individually format the input and output coordinates, as
-         appropriate. The Report attribute of a FrameSet is not itself
-         affected by selecting a new base or current Frame, but the
-         resulting formatting capabilities may be.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Unlike most other attributes, the value of the Report
-         attribute is not transferred when a Mapping is copied. Instead,
-         its value is undefined (and therefore defaults to zero) in any
-         copy. Similarly, it becomes undefined in any external
-         representation of a Mapping produced by the \htmlref{astWrite}{astWrite} function.
-      }
-   }
-}
-\sstroutine{
-   ReportLevel\sstlabel{ReportLevel}
-}{
-   Determines which read/write conditions are reported
-}{
-   \sstdescription{
-      This attribute determines which, if any, of the conditions that occur
-      whilst reading or writing an \htmlref{Object}{Object} should be reported. These
-      conditions will generate either a fatal error or a warning, as
-      determined by attribute \htmlref{Strict}{Strict}. ReportLevel can take any of the
-      following values:
-
-      0 - Do not report any conditions.
-
-      1 - \htmlref{Report}{Report} only conditions where significant information content has been
-      changed. For instance, an unsupported time-scale has been replaced by a
-      supported near-equivalent time-scale. Another example is if a basic
-      \htmlref{Channel}{Channel} unexpected encounters data items that may have been introduced
-      by later versions of AST.
-
-      2 - Report the above, and in addition report significant default
-      values. For instance, if no time-scale was specified when reading an
-      Object from an external data source, report the default time-scale
-      that is being used.
-
-      3 - Report the above, and in addition report any other potentially
-      interesting conditions that have no significant effect on the
-      conversion. For instance, report if a time-scale of {\tt{"}}TT{\tt{"}}
-      (terrestrial time) is used in place of {\tt{"}}ET{\tt{"}} (ephemeris time). This
-      change has no signficiant effect because ET is the predecessor of,
-      and is continuous with, TT. Synonyms such as {\tt{"}}IAT{\tt{"}} and {\tt{"}}TAI{\tt{"}} are
-      another example.
-
-      The default value is 1. Note, there are many other conditions that
-      can occur whilst reading or writing an Object that completely
-      prevent the conversion taking place. Such conditions will always
-      generate errors, irrespective of the ReportLevel and Strict attributes.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         All the conditions selected by the FitsChan \htmlref{Warnings}{Warnings} attribute are
-         reported at level 1.
-      }
-   }
-}
-\sstroutine{
-   RestFreq\sstlabel{RestFreq}
-}{
-   The rest frequency
-}{
-   \sstdescription{
-      This attribute specifies the frequency corresponding to zero
-      velocity. It is used when converting between between velocity-based
-      coordinate systems and and other coordinate systems (such as frequency,
-      wavelength, energy, etc). The default value is 1.0E5 GHz.
-
-      When setting a new value for this attribute, the new value can be
-      supplied either directly as a frequency, or indirectly as a wavelength
-      or energy, in which case the supplied value is converted to a frequency
-      before being stored. The nature of the supplied value is indicated by
-      appending text to the end of the numerical value indicating the units in
-      which the value is supplied. If the units are not specified, then the
-      supplied value is assumed to be a frequency in units of GHz. If the
-      supplied unit is a unit of frequency, the supplied value is assumed to
-      be a frequency in the given units. If the supplied unit is a unit of
-      length, the supplied value is assumed to be a (vacuum) wavelength. If
-      the supplied unit is a unit of energy, the supplied value is assumed to
-      be an energy. For instance, the following strings all result in
-      a rest frequency of around 1.4E14 Hz being used: {\tt{"}}1.4E5{\tt{"}}, {\tt{"}}1.4E14 Hz{\tt{"}},
-      {\tt{"}}1.4E14 s$*$$*$-1{\tt{"}}, {\tt{"}}1.4E5 GHz{\tt{"}}, {\tt{"}}2.14E-6 m{\tt{"}}, {\tt{"}}21400 Angstrom{\tt{"}}, {\tt{"}}9.28E-20 J{\tt{"}},
-      {\tt{"}}9.28E-13 erg{\tt{"}}, {\tt{"}}0.58 eV{\tt{"}}, etc.
-
-      When getting the value of this attribute, the returned value is
-      always a frequency in units of GHz.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   RootCorner\sstlabel{RootCorner}
-}{
-   Specifies which edges of the 3D box should be annotated
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      which edges of the cube enclosing the 3D graphics space are used
-      for displaying numerical and descriptive axis labels. The attribute
-      value identifies one of the eight corners of the cube within
-      which graphics are being drawn (i.e. the cube specified by the
-      {\tt{"}}graphbox{\tt{"}} parameter when \htmlref{astPlot3D}{astPlot3D}
-      was called tp create the \htmlref{Plot3D}{Plot3D}). \htmlref{Axis}{Axis} labels and tick marks will
-      be placed on the three cube edges that meet at the given corner.
-
-      The attribute value should consist of three character, each of
-      which must be either {\tt{"}}U{\tt{"}} or {\tt{"}}L{\tt{"}}. The first character in the string
-      specifies the position of the corner on the first graphics axis.
-      If the character is {\tt{"}}U{\tt{"}} then the corner is at the upper bound on the
-      first graphics axis. If it is {\tt{"}}L{\tt{"}}, then the corner is at the lower
-      bound on the first axis. Likewise, the second and third characters
-      in the string specify the location of the corner on the second and
-      third graphics axes.
-
-      For instance, corner {\tt{"}}LLL{\tt{"}} is the corner that is at the lower bound
-      on all three graphics axes, and corner {\tt{"}}ULU{\tt{"}} is at the upper bound
-      on axes 1 and 3 but at the lower bound on axis 2.
-
-      The default value is {\tt{"}}LLL{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot3D
-      }{
-         All Plot3Ds have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Seed\sstlabel{Seed}
-}{
-   Random number seed for a MathMap
-}{
-   \sstdescription{
-      This attribute, which may take any integer value, determines the
-      sequence of random numbers produced by the random number functions in
-      \htmlref{MathMap}{MathMap} expressions. It is set to an unpredictable default value when
-      a MathMap is created, so that by default each MathMap uses a different
-      set of random numbers.
-
-      If required, you may set this Seed attribute to a value of your
-      choosing in order to produce repeatable behaviour from the random
-      number functions. You may also enquire the Seed value (e.g. if an
-      initially unpredictable value has been used) and then use it to
-      reproduce the resulting sequence of random numbers, either from the
-      same MathMap or from another one.
-
-      Clearing the Seed attribute gives it a new unpredictable default
-      value.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         MathMap
-      }{
-         All MathMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SideBand\sstlabel{SideBand}
-}{
-   Indicates which sideband a dual sideband spectrum represents
-}{
-   \sstdescription{
-      This attribute indicates whether the \htmlref{DSBSpecFrame}{DSBSpecFrame} currently
-      represents its lower or upper sideband, or an offset from the local
-      oscillator frequency. When querying the current value, the returned
-      string is always one of {\tt{"}}usb{\tt{"}} (for upper sideband), {\tt{"}}lsb{\tt{"}} (for lower
-      sideband), or {\tt{"}}lo{\tt{"}} (for offset from the local oscillator frequency).
-      When setting a new value, any of the strings {\tt{"}}lsb{\tt{"}}, {\tt{"}}usb{\tt{"}}, {\tt{"}}observed{\tt{"}},
-      {\tt{"}}image{\tt{"}} or {\tt{"}}lo{\tt{"}} may be supplied (case insensitive). The {\tt{"}}observed{\tt{"}}
-      sideband is which ever sideband (upper or lower) contains the central
-      spectral position given by attribute \htmlref{DSBCentre}{DSBCentre}, and the {\tt{"}}image{\tt{"}}
-      sideband is the other sideband. It is the sign of the \htmlref{IF}{IF} attribute
-      which determines if the observed sideband is the upper or lower
-      sideband. The default value for SideBand is the observed sideband.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         DSBSpecFrame
-      }{
-         All DSBSpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SimpFI\sstlabel{SimpFI}
-}{
-   Forward-inverse MathMap pairs simplify?
-}{
-   \sstdescription{
-      This attribute should be set to a non-zero value if applying a
-      \htmlref{MathMap}{MathMap}'s forward transformation, followed immediately by the matching
-      inverse transformation will always restore the original set of
-      coordinates. It indicates that AST may replace such a sequence of
-      operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
-      while simplifying a compound Mapping (e.g. using \htmlref{astSimplify}{astSimplify}).
-
-      By default, the SimpFI attribute is zero, so that AST will not perform
-      this simplification unless you have set SimpFI to indicate that it is
-      safe to do so.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         MathMap
-      }{
-         All MathMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For simplification to occur, the two MathMaps must be in series and
-         be identical (with textually identical transformation
-         functions). Functional equivalence is not sufficient.
-
-         \sstitem
-         The consent of both MathMaps is required before simplification can
-         take place. If either has a SimpFI value of zero, then simplification
-         will not occur.
-
-         \sstitem
-         The SimpFI attribute controls simplification only in the case where
-         a MathMap's forward transformation is followed by the matching inverse
-         transformation. It does not apply if an inverse transformation is
-         followed by a forward transformation. This latter case is controlled
-         by the \htmlref{SimpIF}{SimpIF} attribute.
-
-         \sstitem
-         The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
-         defined when the MathMap is created (corresponding to the {\tt{"}}fwd{\tt{"}} and
-         {\tt{"}}inv{\tt{"}} parameters of its constructor function). If the MathMap is
-         inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
-         SimpFI and SimpIF attributes will be interchanged.
-      }
-   }
-}
-\sstroutine{
-   SimpIF\sstlabel{SimpIF}
-}{
-   Inverse-forward MathMap pairs simplify?
-}{
-   \sstdescription{
-      This attribute should be set to a non-zero value if applying a
-      \htmlref{MathMap}{MathMap}'s inverse transformation, followed immediately by the matching
-      forward transformation will always restore the original set of
-      coordinates. It indicates that AST may replace such a sequence of
-      operations by an identity \htmlref{Mapping}{Mapping} (a \htmlref{UnitMap}{UnitMap}) if it is encountered
-      while simplifying a compound Mapping (e.g. using \htmlref{astSimplify}{astSimplify}).
-
-      By default, the SimpIF attribute is zero, so that AST will not perform
-      this simplification unless you have set SimpIF to indicate that it is
-      safe to do so.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         MathMap
-      }{
-         All MathMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For simplification to occur, the two MathMaps must be in series and
-         be identical (with textually identical transformation
-         functions). Functional equivalence is not sufficient.
-
-         \sstitem
-         The consent of both MathMaps is required before simplification can
-         take place. If either has a SimpIF value of zero, then simplification
-         will not occur.
-
-         \sstitem
-         The SimpIF attribute controls simplification only in the case where
-         a MathMap's inverse transformation is followed by the matching forward
-         transformation. It does not apply if a forward transformation is
-         followed by an inverse transformation. This latter case is controlled
-         by the \htmlref{SimpFI}{SimpFI} attribute.
-
-         \sstitem
-         The {\tt{"}}forward{\tt{"}} and {\tt{"}}inverse{\tt{"}} transformations referred to are those
-         defined when the MathMap is created (corresponding to the {\tt{"}}fwd{\tt{"}} and
-         {\tt{"}}inv{\tt{"}} parameters of its constructor function). If the MathMap is
-         inverted (i.e. its \htmlref{Invert}{Invert} attribute is non-zero), then the role of the
-         SimpFI and SimpIF attributes will be interchanged.
-      }
-   }
-}
-\sstroutine{
-   Size(element)\sstlabel{Sizeelement}
-}{
-   Character size for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the character size used when drawing
-      each element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Size(title)=2.0{\tt{"}} causes the Plot title to be drawn
-      using twice the default character size.
-
-      The range of character sizes available and the appearance of the
-      resulting text is determined by the underlying graphics system.
-      The default behaviour is for all graphical elements to be drawn
-      using the default character size supplied by this graphics
-      system.
-   }
-   \sstattributetype{
-      Floating Point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Size{\tt{"}} instead
-         of {\tt{"}}Size(title){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will
-         affect the attribute value of all graphical elements, while a
-         {\tt{"}}get{\tt{"}} or {\tt{"}}test{\tt{"}} operation will use just the Size(TextLab)
-         value.
-      }
-   }
-}
-\sstroutine{
-   SizeGuess\sstlabel{SizeGuess}
-}{
-   The expected size of the KeyMap
-}{
-   \sstdescription{
-      This is attribute gives an estimate of the number of entries that
-      will be stored in the \htmlref{KeyMap}{KeyMap}. It is used to tune the internal
-      properties of the KeyMap for speed and efficiency. A larger value
-      will result in faster access at the expense of increased memory
-      requirements. However if the SizeGuess value is much larger than
-      the actual size of the KeyMap, then there will be little, if any,
-      speed gained by making the SizeGuess even larger. The default value
-      is 300.
-
-      The value of this attribute can only be changed if the KeyMap is
-      empty. Its value can be set conveniently when creating the KeyMap.
-      An error will be reported if an attempt is made to set or clear the
-      attribute when the KeyMap contains any entries.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         KeyMap
-      }{
-         All KeyMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Skip\sstlabel{Skip}
-}{
-   Skip irrelevant data?
-}{
-   \sstdescription{
-      This is a boolean attribute which indicates whether the \htmlref{Object}{Object}
-      data being read through a \htmlref{Channel}{Channel} are inter-mixed with other,
-      irrelevant, external data.
-
-      If Skip is zero (the default), then the source of input data is
-      expected to contain descriptions of AST Objects and comments and
-      nothing else (if anything else is read, an error will
-      result). If Skip is non-zero, then any non-Object data
-      encountered between Objects will be ignored and simply skipped
-      over in order to reach the next Object.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{FitsChan}{FitsChan}
-      }{
-         The FitsChan class sets the default value of this attribute
-         to 1, so that all irrelevant FITS headers will normally be
-         ignored.
-      }
-   }
-}
-\sstroutine{
-   SkyRef(axis)\sstlabel{SkyRefaxis}
-}{
-   Position defining the offset coordinate system
-}{
-   \sstdescription{
-      This attribute allows a \htmlref{SkyFrame}{SkyFrame} to represent offsets, rather than
-      absolute axis values, within the coordinate system specified by the
-      \htmlref{System}{System} attribute. If supplied, SkyRef should be set to hold the
-      longitude and latitude of a point within the coordinate system
-      specified by the System attribute. The coordinate system represented
-      by the SkyFrame will then be rotated in order to put the specified
-      position at either the pole or the origin of the new coordinate system
-      (as indicated by the \htmlref{SkyRefIs}{SkyRefIs} attribute). The orientation of the
-      modified coordinate system is then controlled using the SkyRefP
-      attribute.
-
-      If an integer axis index is included in the attribute name (e.g.
-      {\tt{"}}SkyRef(1){\tt{"}}) then the attribute value should be supplied as a single
-      floating point axis value, in radians, when setting a value for the
-      attribute, and will be returned in the same form when getting the value
-      of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
-      or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
-      given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
-      If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRef{\tt{"}}) then
-      the attribute value should be supplied as a character string
-      containing two formatted axis values (an axis 1 value followed by a
-      comma, followed by an axis 2 value). The same form
-      will be used when getting the value of the attribute.
-
-      The default values for SkyRef are zero longitude and zero latitude.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the System attribute of the SkyFrame is changed, any position
-         given for SkyRef is transformed into the new System.
-
-         \sstitem
-         If a value has been assigned to SkyRef attribute, then
-         the default values for certain attributes are changed as follows:
-         the default axis Labels for the SkyFrame are modified by appending
-         {\tt{"}} offset{\tt{"}} to the end, the default axis Symbols for the SkyFrame are
-         modified by prepending the character {\tt{"}}D{\tt{"}} to the start, and the
-         default title is modified by replacing the projection information by the
-         origin information.
-      }
-   }
-   \sstdiytopic{
-      Aligning SkyFrames with Offset Coordinate Systems
-   }{
-      The offset coordinate system within a SkyFrame should normally be
-      considered as a superficial {\tt{"}}re-badging{\tt{"}} of the axes of the coordinate
-      system specified by the System attribute - it merely provides an
-      alternative numerical {\tt{"}}label{\tt{"}} for each position in the System coordinate
-      system. The SkyFrame retains full knowledge of the celestial coordinate
-      system on which the offset coordinate system is based (given by the
-      System attribute). For instance, the SkyFrame retains knowledge of the
-      way that one celestial coordinate system may {\tt{"}}drift{\tt{"}} with respect to
-      another over time. Normally, if you attempt to align two SkyFrames (e.g.
-      using the \htmlref{astConvert}{astConvert} or \htmlref{astFindFrame}{astFindFrame} routine),
-      the effect of any offset coordinate system defined in either SkyFrame
-      will be removed, resulting in alignment being performed in the
-      celestial coordinate system given by the \htmlref{AlignSystem}{AlignSystem} attribute.
-      However, by setting the \htmlref{AlignOffset}{AlignOffset} attribute ot a non-zero value, it
-      is possible to change this behaviour so that the effect of the offset
-      coordinate system is not removed when aligning two SkyFrames.
-   }
-}
-\sstroutine{
-   SkyRefIs\sstlabel{SkyRefIs}
-}{
-   Selects the nature of the offset coordinate system
-}{
-   \sstdescription{
-      This attribute controls how the values supplied for the SkyRef and
-      SkyRefP attributes are used. These three attributes together allow
-      a \htmlref{SkyFrame}{SkyFrame} to represent offsets relative to some specified origin
-      or pole within the coordinate system specified by the \htmlref{System}{System} attribute,
-      rather than absolute axis values. SkyRefIs can take one of the
-      case-insensitive values {\tt{"}}Origin{\tt{"}}, {\tt{"}}Pole{\tt{"}} or {\tt{"}}Ignored{\tt{"}}.
-
-      If SkyRefIs is set to {\tt{"}}Origin{\tt{"}}, then the coordinate system
-      represented by the SkyFrame is modified to put the origin of longitude
-      and latitude at the position specified by the SkyRef attribute.
-
-      If SkyRefIs is set to {\tt{"}}Pole{\tt{"}}, then the coordinate system represented
-      by the SkyFrame is modified to put the north pole at the position
-      specified by the SkyRef attribute.
-
-      If SkyRefIs is set to {\tt{"}}Ignored{\tt{"}} (the default), then any value set for the
-      SkyRef attribute is ignored, and the SkyFrame represents the coordinate
-      system specified by the System attribute directly without any rotation.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SkyRefP(axis)\sstlabel{SkyRefPaxis}
-}{
-   Position on primary meridian of offset coordinate system
-}{
-   \sstdescription{
-      This attribute is used to control the orientation of the offset
-      coordinate system defined by attributes SkyRef and \htmlref{SkyRefIs}{SkyRefIs}. If used,
-      it should be set to hold the longitude and latitude of a point within
-      the coordinate system specified by the \htmlref{System}{System} attribute. The offset
-      coordinate system represented by the \htmlref{SkyFrame}{SkyFrame} will then be rotated in
-      order to put the position supplied for SkyRefP on the zero longitude
-      meridian. This rotation is about an axis from the centre of the
-      celestial sphere to the point specified by the SkyRef attribute.
-      The default value for SkyRefP is usually the north pole (that is, a
-      latitude of $+$90 degrees in the coordinate system specified by the System
-      attribute). The exception to this is if the SkyRef attribute is
-      itself set to either the north or south pole. In these cases the
-      default for SkyRefP is the origin (that is, a (0,0) in the coordinate
-      system specified by the System attribute).
-
-      If an integer axis index is included in the attribute name (e.g.
-      {\tt{"}}SkyRefP(1){\tt{"}}) then the attribute value should be supplied as a single
-      floating point axis value, in radians, when setting a value for the
-      attribute, and will be returned in the same form when getting the value
-      of the attribute. In this case the integer axis index should be {\tt{"}}1{\tt{"}}
-      or {\tt{"}}2{\tt{"}} (the values to use for longitude and latitue axes are
-      given by the \htmlref{LonAxis}{LonAxis} and \htmlref{LatAxis}{LatAxis} attributes).
-
-      If no axis index is included in the attribute name (e.g. {\tt{"}}SkyRefP{\tt{"}}) then
-      the attribute value should be supplied as a character string
-      containing two formatted axis values (an axis 1 value followed by a
-      comma, followed by an axis 2 value). The same form
-      will be used when getting the value of the attribute.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SkyFrame
-      }{
-         All SkyFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If the position given by the SkyRef attribute defines the origin
-         of the offset coordinate system (that is, if the SkyRefIs attribute
-         is set to {\tt{"}}origin{\tt{"}}), then there will in general be two orientations
-         which will put the supplied SkyRefP position on the zero longitude
-         meridian. The orientation which is actually used is the one which
-         gives the SkyRefP position a positive latitude in the offset coordinate
-         system (the other possible orientation would give the SkyRefP position
-         a negative latitude).
-
-         \sstitem
-         An error will be reported if an attempt is made to use a
-         SkyRefP value which is co-incident with SkyRef or with the point
-         diametrically opposite to SkyRef on the celestial sphere. The
-         reporting of this error is deferred until the SkyRef and SkyRefP
-         attribute values are used within a calculation.
-
-         \sstitem
-         If the System attribute of the SkyFrame is changed, any position
-         given for SkyRefP is transformed into the new System.
-      }
-   }
-}
-\sstroutine{
-   SourceSys\sstlabel{SourceSys}
-}{
-   Spectral system in which the source velocity is stored
-}{
-   \sstdescription{
-      This attribute identifies the spectral system in which the
-      \htmlref{SourceVel}{SourceVel} attribute value (the source velocity) is supplied and
-      returned. It can be one of the following:
-
-      \sstitemlist{
-
-         \sstitem
-            {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
-         \sstitem
-            {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
-         \sstitem
-            {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
-         \sstitem
-            {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
-         \sstitem
-            {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
-      }
-      When setting a new value for the SourceVel attribute, the source
-      velocity should be supplied in the spectral system indicated
-      by this attribute. Likewise, when getting the value of the SourceVel
-      attribute, the velocity will be returned in this spectral system.
-
-      If the value of SourceSys is changed, the value stored for SourceVel
-      will be converted from the old to the new spectral systems.
-
-      The default value is {\tt{"}}VELO{\tt{"}} (apparent radial velocity).
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SourceVRF\sstlabel{SourceVRF}
-}{
-   Rest frame in which the source velocity is stored
-}{
-   \sstdescription{
-      This attribute identifies the rest frame in which the source
-      velocity or redshift is stored (the source velocity or redshift is
-      accessed using attribute \htmlref{SourceVel}{SourceVel}). When setting a new value for the
-      SourceVel attribute, the source velocity or redshift should be supplied
-      in the rest frame indicated by this attribute. Likewise, when getting
-      the value of the SourceVel attribute, the velocity or redshift will be
-      returned in this rest frame.
-
-      If the value of SourceVRF is changed, the value stored for SourceVel
-      will be converted from the old to the new rest frame.
-
-      The values which can be supplied are the same as for the \htmlref{StdOfRest}{StdOfRest}
-      attribute (except that SourceVRF cannot be set to {\tt{"}}Source{\tt{"}}). The
-      default value is {\tt{"}}Helio{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SourceVel\sstlabel{SourceVel}
-}{
-   The source velocity
-}{
-   \sstdescription{
-      This attribute (together with \htmlref{SourceSys}{SourceSys}, \htmlref{SourceVRF}{SourceVRF}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec})
-      defines the {\tt{"}}Source{\tt{"}} standard of rest (see attribute \htmlref{StdOfRest}{StdOfRest}). This is
-      a rest frame which is moving towards the position given by RefRA and
-      RefDec at a  velocity given by SourceVel. A positive value means
-      the source is moving away from the observer. When a new value is
-      assigned to this attribute, the supplied value is assumed to refer
-      to the spectral system specified by the SourceSys attribute. For
-      instance, the SourceVel value may be supplied as a radio velocity, a
-      redshift, a beta factor, etc. Similarly, when the current value of
-      the SourceVel attribute is obtained, the returned value will refer
-      to the spectral system specified by the SourceSys value. If the
-      SourceSys value is changed, any value previously stored for the SourceVel
-      attribute will be changed automatically from the old spectral system
-      to the new spectral system.
-
-      When setting a value for SourceVel, the value should be supplied in the
-      rest frame specified by the SourceVRF attribute. Likewise, when getting
-      the value of SourceVel, it will be returned in the rest frame specified
-      by the SourceVRF attribute.
-
-      The default SourceVel value is zero.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         It is important to set an appropriate value for SourceVRF and
-         SourceSys before setting a value for SourceVel. If a new value is later
-         set for SourceVRF or SourceSys, the value stored for SourceVel will
-         simultaneously be changed to the new standard of rest or spectral
-         system.
-      }
-   }
-}
-\sstroutine{
-   SpecOrigin\sstlabel{SpecOrigin}
-}{
-   The zero point for SpecFrame axis values
-}{
-   \sstdescription{
-      This specifies the origin from which all spectral values are measured.
-      The default value (zero) results in the \htmlref{SpecFrame}{SpecFrame} describing
-      absolute spectral values in the system given by the \htmlref{System}{System} attribute
-      (e.g. frequency, velocity, etc). If a SpecFrame is to be used to
-      describe offset from some origin, the SpecOrigin attribute
-      should be set to hold the required origin value. The SpecOrigin value
-      stored inside the SpecFrame structure is modified whenever SpecFrame
-      attribute values are changed so that it refers to the original spectral
-      position.
-
-      When setting a new value for this attribute, the supplied value is assumed
-      to be in the system, units and standard of rest described by the SpecFrame.
-      Likewise, when getting the value of this attribute, the value is returned
-      in the system, units and standard of rest described by the SpecFrame. If
-      any of these attributes are changed, then any previously stored SpecOrigin
-      value will also be changed so that refers to the new system, units or
-      standard of rest.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   SpecVal\sstlabel{SpecVal}
-}{
-   The spectral position at which flux values are measured
-}{
-   \sstdescription{
-      This attribute specifies the spectral position (frequency, wavelength,
-      etc.), at which the values described by the \htmlref{FluxFrame}{FluxFrame} are measured.
-      It is used when determining the \htmlref{Mapping}{Mapping} between between FluxFrames.
-
-      The default value and spectral system used for this attribute are
-      both specified when the FluxFrame is created.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FluxFrame
-      }{
-         All FluxFrames have this attribute.
-      }
-   }
-}
-\sstroutine{
-   StcsArea\sstlabel{StcsArea}
-}{
-   Return the CoordinateArea component when reading an STC-S document?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls what is returned
-      by the
-      \htmlref{astRead}{astRead}
-      function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
-      If StcsArea is set non-zero (the default), then a \htmlref{Region}{Region}
-      representing the STC CoordinateArea will be returned by
-      astRead.
-      If StcsArea is set to zero, then the STC CoordinateArea
-      will not be returned.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps} can be used to
-         specify other Objects to be returned by
-         astRead.
-         If more than one of these attributes is set non-zero, then the
-         actual \htmlref{Object}{Object} returned by
-         astRead
-         will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
-         case, the Region representing the STC CoordinateArea will be
-         stored in the returned KeyMap using the key {\tt{"}}AREA{\tt{"}}. If StcsArea
-         is the only attribute to be set non-zero, then the Object returned by
-         astRead
-         will be the CoordinateArea Region itself.
-
-         \sstitem
-         The class of Region used to represent the CoordinateArea for each
-         STC-S sub-phrase is determined by the first word in the
-         sub-phrase (the {\tt{"}}sub-phrase identifier{\tt{"}}). The individual sub-phrase
-         Regions are combined into a single \htmlref{Prism}{Prism}, which is then simplified
-         using \htmlref{astSimplify}{astSimplify}
-         to form the returned region.
-
-         \sstitem
-         Sub-phrases that represent a single value ( that is, have
-         identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}} or {\tt{"}}Redshift{\tt{"}} ) are
-         considered to be be part of the STC CoordinateArea component.
-
-         \sstitem
-         The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
-         its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
-         start time is specified by the sub-phrase, then the stop time will be
-         used instead. If no stop time is specified by the sub-phrase, then
-         the single time value specified in the sub-phrase will be used
-         instead. Subsequently clearing the TimeOrigin attribute (or setting
-         its value to zero) will cause the TimeFrame to reprsent absolute times.
-
-         \sstitem
-         The \htmlref{Epoch}{Epoch} attribute for the returned Region is set in the same
-         way as the TimeOrigin attribute (see above).
-      }
-   }
-}
-\sstroutine{
-   StcsCoords\sstlabel{StcsCoords}
-}{
-   Return the Coordinates component when reading an STC-S document?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls what is returned
-      by the
-      \htmlref{astRead}{astRead}
-      function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
-      If StcsCoords is set non-zero, then a \htmlref{PointList}{PointList}
-      representing the STC Coordinates will be returned by
-      astRead.
-      If StcsCoords is set to zero (the default), then the STC
-      Coordinates will not be returned.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Other attributes such as \htmlref{StcsArea}{StcsArea} and \htmlref{StcsProps}{StcsProps} can be used to
-         specify other Objects to be returned by
-         astRead.
-         If more than one of these attributes is set non-zero, then the
-         actual \htmlref{Object}{Object} returned by
-         astRead
-         will be a \htmlref{KeyMap}{KeyMap}, containing the requested Objects. In this
-         case, the PointList representing the STC Coordinates will be
-         stored in the returned KeyMap using the key {\tt{"}}COORDS{\tt{"}}. If StcsCoords
-         is the only attribute to be set non-zero, then the Object returned by
-         astRead
-         will be the Coordinates PointList itself.
-
-         \sstitem
-         The Coordinates component is specified by the additional axis
-         values embedded within the body of each STC-S sub-phrase that
-         represents an extended area. Sub-phrases that represent a single
-         value ( that is, have identifiers {\tt{"}}Time{\tt{"}}, {\tt{"}}Position{\tt{"}}, {\tt{"}}Spectral{\tt{"}}
-         or {\tt{"}}Redshift{\tt{"}} ) are not considered to be be part of the STC
-         Coordinates component.
-
-         \sstitem
-         If the STC-S documents does not contain a Coordinates component,
-         then a NULL object pointer
-         will be returned by
-         astRead
-         if the Coordinates component is the only object being returned. If
-         other objects are also being returned (see attributes StcsProps and
-         StcsArea), then the returned KeyMap will contain a {\tt{"}}COORDS{\tt{"}} key
-         only if the Coordinates component is read succesfully.
-
-         \sstitem
-         The \htmlref{TimeFrame}{TimeFrame} used to represent a time STC-S sub-phrase will have
-         its \htmlref{TimeOrigin}{TimeOrigin} attribute set to the sub-phrase start time. If no
-         start time is specified by the sub-phrase, then the stop time will be
-         used instead. If no stop time is specified by the sub-phrase, then
-         the single time value specified in the sub-phrase will be used
-         instead. Subsequently clearing the TimeOrigin attribute (or setting
-         its value to zero) will cause the TimeFrame to reprsent absolute times.
-
-         \sstitem
-         The \htmlref{Epoch}{Epoch} attribute for the returned \htmlref{Region}{Region} is set in the same
-         way as the TimeOrigin attribute (see above).
-      }
-   }
-}
-\sstroutine{
-   StcsIndent\sstlabel{StcsIndent}
-}{
-   Controls indentation and line splitting of output text
-}{
-   \sstdescription{
-      This attribute controls how the STC-S text is written out to the
-      sink function when writing an AST object to an \htmlref{StcsChan}{StcsChan}. If it is
-      zero (the default) the entire STC-S description is written out by a
-      single invocation of the sink function. The text supplied to the
-      sink function will not contain any linefeed characters, and each
-      pair of adjacent words will be separated by a single space. The
-      text may thus be arbitrarily large and the \htmlref{StcsLength}{StcsLength} attribute is
-      ignored.
-
-      If StcsIndent is non-zero, then the text is written out via
-      multiple calls to the sink function, each call corresponding to a
-      single {\tt{"}}line{\tt{"}} of text (although no line feed characters will be
-      inserted by AST). The complete STC-S description is broken into
-      lines so that:
-
-      \sstitemlist{
-
-         \sstitem
-         the line length specified by attribute StcsLength is not exceeded
-
-         \sstitem
-         each sub-phrase (time, space, etc.) starts on a new line
-
-         \sstitem
-         each argument in a compound spatial region starts on a new line
-
-      }
-      If this causes a sub-phrase to extend to two or more lines, then the
-      second and subsequent lines will be indented by three spaces compared
-      to the first line. In addition, lines within a compound spatial region
-      will have extra indentation to highlight the nesting produced by the
-      parentheses. Each new level of nesting will be indented by a further
-      three spaces.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   StcsLength\sstlabel{StcsLength}
-}{
-   Controls output line length
-}{
-   \sstdescription{
-      This attribute specifies the maximum length to use when writing out
-      text through the sink function supplied when the \htmlref{StcsChan}{StcsChan} was created.
-      It is ignored if the \htmlref{StcsIndent}{StcsIndent} attribute is zero (in which case
-      the text supplied to the sink function can be of any length). The
-      default value is 70.
-
-      The number of characters in each string written out through the sink
-      function will not usually be greater than the value of this attribute
-      (but may be less). However, if any single word in the STC-S
-      description exceeds the specified length, then the word will be
-      written out as a single line.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   StcsProps\sstlabel{StcsProps}
-}{
-   Return all properties when reading an STC-S document?
-}{
-   \sstdescription{
-      This is a boolean attribute which controls what is returned
-      by the
-      \htmlref{astRead}{astRead}
-      function when it is used to read from an \htmlref{StcsChan}{StcsChan}.
-      If StcsProps is set non-zero, then a \htmlref{KeyMap}{KeyMap} containing all the
-      properties read from the STC-S document will be returned by
-      astRead.
-      If StcsProps is set to zero (the default), then the properties
-      will not be returned.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         StcsChan
-      }{
-         All StcsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         Other attributes such as \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsArea}{StcsArea} can be used to
-         specify other Objects to be returned by
-         astRead.
-         If more than one of these attributes is set non-zero, then the
-         actual \htmlref{Object}{Object} returned by
-         astRead
-         will be a KeyMap containing the requested Objects. In this
-         case, the properties KeyMap will be stored in the returned KeyMap
-         using the key {\tt{"}}PROPS{\tt{"}}. If StcsProps is the only attribute to be
-         set non-zero, then the Object returned by
-         astRead
-         will be the properties KeyMap itself.
-
-         \sstitem
-         The KeyMap containing the properties will have entries for one or
-         more of the following keys: {\tt{"}}TIME\_PROPS{\tt{"}}, {\tt{"}}SPACE\_PROPS{\tt{"}}, {\tt{"}}SPECTRAL\_PROPS{\tt{"}}
-         and {\tt{"}}REDSHIFT\_PROPS{\tt{"}}. Each of these entries will be another KeyMap
-         containing the properties of the corresponding STC-S sub-phrase.
-      }
-   }
-}
-\sstroutine{
-   StdOfRest\sstlabel{StdOfRest}
-}{
-   Standard of rest
-}{
-   \sstdescription{
-      This attribute identifies the standard of rest to which the spectral
-      axis values of a \htmlref{SpecFrame}{SpecFrame} refer, and may take any of the values
-      listed in the {\tt{"}}Standards of Rest{\tt{"}} section (below).
-
-      The default StdOfRest value is {\tt{"}}Helio{\tt{"}}.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SpecFrame
-      }{
-         All SpecFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Standards of Rest
-   }{
-      The SpecFrame class supports the following StdOfRest values (all are
-      case-insensitive):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}Topocentric{\tt{"}}, {\tt{"}}Topocent{\tt{"}} or {\tt{"}}Topo{\tt{"}}: The observers rest-frame (assumed
-         to be on the surface of the earth). Spectra recorded in this standard of
-         rest suffer a Doppler shift which varies over the course of a day
-         because of the rotation of the observer around the axis of the earth.
-         This standard of rest must be qualified using the \htmlref{ObsLat}{ObsLat}, \htmlref{ObsLon}{ObsLon},
-         \htmlref{ObsAlt}{ObsAlt}, \htmlref{Epoch}{Epoch}, \htmlref{RefRA}{RefRA} and \htmlref{RefDec}{RefDec} attributes.
-
-         \sstitem
-         {\tt{"}}Geocentric{\tt{"}}, {\tt{"}}Geocentr{\tt{"}} or {\tt{"}}Geo{\tt{"}}: The rest-frame of the earth centre.
-         Spectra recorded in this standard of rest suffer a Doppler shift which
-         varies over the course of a year because of the rotation of the earth
-         around the Sun. This standard of rest must be qualified using the Epoch,
-         RefRA and RefDec attributes.
-
-         \sstitem
-         {\tt{"}}Barycentric{\tt{"}}, {\tt{"}}Barycent{\tt{"}} or {\tt{"}}Bary{\tt{"}}: The rest-frame of the solar-system
-         barycentre. Spectra recorded in this standard of rest suffer a Doppler
-         shift which depends both on the velocity of the Sun through the Local
-         Standard of Rest, and on the movement of the planets through the solar
-         system. This standard of rest must be qualified using the Epoch, RefRA
-         and RefDec attributes.
-
-         \sstitem
-         {\tt{"}}Heliocentric{\tt{"}}, {\tt{"}}Heliocen{\tt{"}} or {\tt{"}}Helio{\tt{"}}: The rest-frame of the Sun.
-         Spectra recorded in this standard of rest suffer a Doppler shift which
-         depends on the velocity of the Sun through the Local Standard of Rest.
-         This standard of rest must be qualified using the RefRA and RefDec
-         attributes.
-
-         \sstitem
-         {\tt{"}}LSRK{\tt{"}}, {\tt{"}}LSR{\tt{"}}: The rest-frame of the kinematical Local Standard of
-         Rest. Spectra recorded in this standard of rest suffer a Doppler shift
-         which depends on the velocity of the kinematical Local Standard of Rest
-         through the galaxy. This standard of rest must be qualified using the
-         RefRA and RefDec attributes.
-
-         \sstitem
-         {\tt{"}}LSRD{\tt{"}}: The rest-frame of the dynamical Local Standard of Rest. Spectra
-         recorded in this standard of rest suffer a Doppler shift which depends
-         on the velocity of the dynamical Local Standard of Rest through the
-         galaxy.  This standard of rest must be qualified using the RefRA and
-         RefDec attributes.
-
-         \sstitem
-         {\tt{"}}Galactic{\tt{"}}, {\tt{"}}Galactoc{\tt{"}} or {\tt{"}}Gal{\tt{"}}: The rest-frame of the galactic centre.
-         Spectra recorded in this standard of rest suffer a Doppler shift which
-         depends on the velocity of the galactic centre through the local group.
-         This standard of rest must be qualified using the RefRA and RefDec
-         attributes.
-
-         \sstitem
-         {\tt{"}}Local\_group{\tt{"}}, {\tt{"}}Localgrp{\tt{"}} or {\tt{"}}LG{\tt{"}}: The rest-frame of the local group.
-         This standard of rest must be qualified using the RefRA and RefDec
-         attributes.
-
-         \sstitem
-         {\tt{"}}Source{\tt{"}}, or {\tt{"}}src{\tt{"}}: The rest-frame of the source. This standard of
-         rest must be qualified using the RefRA, RefDec and \htmlref{SourceVel}{SourceVel} attributes.
-
-      }
-      Where more than one alternative \htmlref{System}{System} value is shown above, the
-      first of these will be returned when an enquiry is made.
-   }
-}
-\sstroutine{
-   Strict\sstlabel{Strict}
-}{
-   Report an error if any unexpeted data items are found?
-}{
-   \sstdescription{
-      This is a boolean attribute which indicates whether a warning
-      rather than an error should be issed for insignificant conversion
-      problems. If it is set non-zero, then fatal errors are issued
-      instead of warnings, resulting in the
-      AST error status being set.
-      If Strict is zero (the default), then execution continues after minor
-      conversion problems, and a warning message is added to the \htmlref{Channel}{Channel}
-      structure. Such messages can be retrieved using the
-      \htmlref{astWarnings}{astWarnings}
-      function.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Channel
-      }{
-         All Channels have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This attribute was introduced in AST version 5.0. Prior to this
-         version of AST unexpected data items read by a basic Channel always
-         caused an error to be reported. So applications linked against
-         versions of AST prior to version 5.0 may not be able to read \htmlref{Object}{Object}
-         descriptions created by later versions of AST, if the Object's class
-         description has changed.
-      }
-   }
-}
-\sstroutine{
-   Style(element)\sstlabel{Styleelement}
-}{
-   Line style for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the line style used when drawing each
-      element of graphical output produced by a \htmlref{Plot}{Plot}. It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Style(border)=2{\tt{"}} causes the Plot border to be drawn
-      using line style 2 (which might result in, say, a dashed line).
-
-      The range of integer line styles available and their appearance
-      is determined by the underlying graphics system.  The default
-      behaviour is for all graphical elements to be drawn using the
-      default line style supplied by this graphics system (normally,
-      this is likely to give a solid line).
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Style{\tt{"}} instead of
-         {\tt{"}}Style(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the Style(\htmlref{Border}{Border}) value.
-      }
-   }
-}
-\sstroutine{
-   Symbol(axis)\sstlabel{Symbolaxis}
-}{
-   Axis symbol
-}{
-   \sstdescription{
-      This attribute specifies a short-form symbol to be used to
-      represent coordinate values for a particular axis of a
-      \htmlref{Frame}{Frame}. This might be used (e.g.) in algebraic expressions where
-      a full description of the axis would be inappropriate. Examples
-      include {\tt{"}}RA{\tt{"}} and {\tt{"}}Dec{\tt{"}} (for Right Ascension and Declination).
-
-      If a Symbol value has not been set for a Frame axis, then a
-      suitable default is supplied.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default Symbol value supplied by the Frame class is the
-         string {\tt{"}}$<$\htmlref{Domain}{Domain}$>$$<$n$>${\tt{"}}, where $<$n$>$ is 1, 2, etc. for successive
-         axes, and $<$Domain$>$ is the value of the Frame's Domain
-         attribute (truncated if necessary so that the final string
-         does not exceed 15 characters). If no Domain value has been
-         set, {\tt{"}}x{\tt{"}} is used as the $<$Domain$>$ value in constructing this
-         default string.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Symbol value
-         (e.g. to {\tt{"}}RA{\tt{"}} or {\tt{"}}Dec{\tt{"}}) as appropriate for the particular
-         celestial coordinate system being represented.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Symbol value as
-         appropriate for the particular time system being represented.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Symbol attribute of a FrameSet axis is the same as that
-         of its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   System\sstlabel{System}
-}{
-   Coordinate system used to describe positions within the domain
-}{
-   \sstdescription{
-      In general it is possible for positions within a given physical
-      domain to be described using one of several different coordinate
-      systems. For instance, the \htmlref{SkyFrame}{SkyFrame} class can use galactic
-      coordinates, equatorial coordinates, etc, to describe positions on
-      the sky. As another example, the \htmlref{SpecFrame}{SpecFrame} class can use frequency,
-      wavelength, velocity, etc, to describe a position within an
-      electromagnetic spectrum. The System attribute identifies the particular
-      coordinate system represented by a \htmlref{Frame}{Frame}. Each class of Frame
-      defines a set of acceptable values for this attribute, as listed
-      below (all are case insensitive). Where more than one alternative
-      System value is shown, the first of will be returned when an
-      enquiry is made.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The System attribute for a basic Frame always equals {\tt{"}}Cartesian{\tt{"}},
-         and may not be altered.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The System attribute for a CmpFrame always equals {\tt{"}}Compound{\tt{"}},
-         and may not be altered. In addition, the CmpFrame class allows
-         the System attribute to be referenced for a component Frame by
-         including the index of an axis within the required component
-         Frame. For instance, {\tt{"}}System(3){\tt{"}} refers to the System attribute
-         of the component Frame which includes axis 3 of the CmpFrame.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The System attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-      \sstsubsection{
-         SkyFrame
-      }{
-         The SkyFrame class supports the following System values and
-         associated celestial coordinate systems:
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}AZEL{\tt{"}}: Horizon coordinates. The longitude axis is azimuth
-            such that geographic north has an azimuth of zero and geographic
-            east has an azimuth of $+$PI/2 radians. The zenith has elevation
-            $+$PI/2. When converting to and from other celestial coordinate
-            systems, no corrections are applied for atmospheric refraction
-            or polar motion (however, a correction for diurnal aberattion is
-            applied). Note, unlike most other
-            celestial coordinate systems, this system is right handed. Also,
-            unlike other SkyFrame systems, the AzEl system is sensitive to
-            the timescale in which the \htmlref{Epoch}{Epoch} value is supplied. This is
-            because of the gross diurnal rotation which this system undergoes,
-            causing a small change in time to translate to a large rotation.
-            When converting to or from an AzEl system, the Epoch value for
-            both source and destination SkyFrames should be supplied in the
-            TDB timescale. The difference between TDB and TT is between 1
-            and 2 milliseconds, and so a TT value can usually be supplied in
-            place of a TDB value. The TT timescale is related to TAI via
-            TT = TAI $+$ 32.184 seconds.
-
-            \sstitem
-            {\tt{"}}ECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
-            ecliptic and mean equinox specified by the qualifying \htmlref{Equinox}{Equinox}
-            value.
-
-            \sstitem
-            {\tt{"}}FK4{\tt{"}}: The old FK4 (barycentric) equatorial coordinate system,
-            which should be qualified by an Equinox value. The underlying
-            model on which this is based is non-inertial and rotates slowly
-            with time, so for accurate work FK4 coordinate systems should
-            also be qualified by an Epoch value.
-
-            \sstitem
-            {\tt{"}}FK4-NO-E{\tt{"}} or {\tt{"}}FK4\_NO\_E{\tt{"}}: The old FK4 (barycentric) equatorial
-            system but without the {\tt{"}}E-terms of aberration{\tt{"}} (e.g. some radio
-            catalogues). This coordinate system should also be qualified by
-            both an Equinox and an Epoch value.
-
-            \sstitem
-            {\tt{"}}FK5{\tt{"}} or {\tt{"}}EQUATORIAL{\tt{"}}: The modern FK5 (barycentric) equatorial
-            coordinate system. This should be qualified by an Equinox value.
-
-            \sstitem
-            {\tt{"}}GALACTIC{\tt{"}}: Galactic coordinates (IAU 1958).
-
-            \sstitem
-            {\tt{"}}GAPPT{\tt{"}}, {\tt{"}}GEOCENTRIC{\tt{"}} or {\tt{"}}APPARENT{\tt{"}}: The geocentric apparent
-            equatorial coordinate system, which gives the apparent positions
-            of sources relative to the true plane of the Earth's equator and
-            the equinox (the coordinate origin) at a time specified by the
-            qualifying Epoch value. (Note that no Equinox is needed to
-            qualify this coordinate system because no model {\tt{"}}mean equinox{\tt{"}}
-            is involved.)  These coordinates give the apparent right
-            ascension and declination of a source for a specified date of
-            observation, and therefore form an approximate basis for
-            pointing a telescope. Note, however, that they are applicable to
-            a fictitious observer at the Earth's centre, and therefore
-            ignore such effects as atmospheric refraction and the (normally
-            much smaller) aberration of light due to the rotational velocity
-            of the Earth's surface.  Geocentric apparent coordinates are
-            derived from the standard FK5 (J2000.0) barycentric coordinates
-            by taking account of the gravitational deflection of light by
-            the Sun (usually small), the aberration of light caused by the
-            motion of the Earth's centre with respect to the barycentre
-            (larger), and the precession and nutation of the Earth's spin
-            axis (normally larger still).
-
-            \sstitem
-            {\tt{"}}HELIOECLIPTIC{\tt{"}}: Ecliptic coordinates (IAU 1980), referred to the
-            ecliptic and mean equinox of J2000.0, in which an offset is added to
-            the longitude value which results in the centre of the sun being at
-            zero longitude at the date given by the Epoch attribute. Attempts to
-            set a value for the Equinox attribute will be ignored, since this
-            system is always referred to J2000.0.
-
-            \sstitem
-            {\tt{"}}ICRS{\tt{"}}: The Internation Celestial Reference System, realised
-            through the Hipparcos catalogue. Whilst not an equatorial system
-            by definition, the ICRS is very close to the FK5 (J2000) system
-            and is usually treated as an equatorial system. The distinction
-            between ICRS and FK5 (J2000) only becomes important when accuracies
-            of 50 milli-arcseconds or better are required. ICRS need not be
-            qualified by an Equinox value.
-
-            \sstitem
-            {\tt{"}}J2000{\tt{"}}: An equatorial coordinate system based on the mean
-            dynamical equator and equinox of the J2000 epoch. The dynamical
-            equator and equinox differ slightly from those used by the FK5
-            model, and so a {\tt{"}}J2000{\tt{"}} SkyFrame will differ slightly from an
-            {\tt{"}}FK5(Equinox=J2000){\tt{"}} SkyFrame. The J2000 System need not be
-            qualified by an Equinox value
-
-            \sstitem
-            {\tt{"}}SUPERGALACTIC{\tt{"}}: De Vaucouleurs Supergalactic coordinates.
-
-            \sstitem
-            {\tt{"}}UNKNOWN{\tt{"}}: Any other general spherical coordinate system. No
-            \htmlref{Mapping}{Mapping} can be created between a pair of SkyFrames if either of the
-            SkyFrames has System set to {\tt{"}}Unknown{\tt{"}}.
-
-         }
-         Currently, the default System value is {\tt{"}}ICRS{\tt{"}}. However, this
-         default may change in future as new astrometric standards
-         evolve. The intention is to track the most modern appropriate
-         standard. For this reason, you should use the default only if
-         this is what you intend (and can tolerate any associated slight
-         change in future). If you intend to use the ICRS system
-         indefinitely, then you should specify it explicitly.
-      }
-      \sstsubsection{
-         SpecFrame
-      }{
-         The SpecFrame class supports the following System values and
-         associated spectral coordinate systems (the default is {\tt{"}}WAVE{\tt{"}} -
-         wavelength). They are all defined in FITS-WCS paper III:
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}FREQ{\tt{"}}: Frequency (GHz)
-
-            \sstitem
-            {\tt{"}}ENER{\tt{"}} or {\tt{"}}ENERGY{\tt{"}}: Energy (J)
-
-            \sstitem
-            {\tt{"}}WAVN{\tt{"}} or {\tt{"}}WAVENUM{\tt{"}}: Wave-number (1/m)
-
-            \sstitem
-            {\tt{"}}WAVE{\tt{"}} or {\tt{"}}WAVELEN{\tt{"}}: Vacuum wave-length (Angstrom)
-
-            \sstitem
-            {\tt{"}}AWAV{\tt{"}} or {\tt{"}}AIRWAVE{\tt{"}}: Wave-length in air (Angstrom)
-
-            \sstitem
-            {\tt{"}}VRAD{\tt{"}} or {\tt{"}}VRADIO{\tt{"}}: Radio velocity (km/s)
-
-            \sstitem
-            {\tt{"}}VOPT{\tt{"}} or {\tt{"}}VOPTICAL{\tt{"}}: Optical velocity (km/s)
-
-            \sstitem
-            {\tt{"}}ZOPT{\tt{"}} or {\tt{"}}REDSHIFT{\tt{"}}: Redshift (dimensionless)
-
-            \sstitem
-            {\tt{"}}BETA{\tt{"}}: Beta factor (dimensionless)
-
-            \sstitem
-            {\tt{"}}VELO{\tt{"}} or {\tt{"}}VREL{\tt{"}}: Apparent radial ({\tt{"}}relativistic{\tt{"}}) velocity (km/s)
-
-         }
-         The default value for the Unit attribute for each system is shown
-         in parentheses. Note that the default value for the ActiveUnit flag
-         is non-zero
-         for a SpecFrame, meaning that changes to the Unit attribute for
-         a SpecFrame will result in the SpecFrame being re-mapped within
-         its enclosing FrameSet in order to reflect the change in units
-         (see \htmlref{astSetActiveUnit}{astSetActiveUnit} function for further information).
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class supports the following System values and
-         associated coordinate systems (the default is {\tt{"}}MJD{\tt{"}}):
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}MJD{\tt{"}}: Modified Julian Date (d)
-
-            \sstitem
-            {\tt{"}}JD{\tt{"}}: Julian Date (d)
-
-            \sstitem
-            {\tt{"}}JEPOCH{\tt{"}}: Julian epoch (yr)
-
-            \sstitem
-            {\tt{"}}BEPOCH{\tt{"}}: Besselian (yr)
-
-         }
-         The default value for the Unit attribute for each system is shown
-         in parentheses. Strictly, these systems should not allow changes
-         to be made to the units. For instance, the usual definition of
-         {\tt{"}}MJD{\tt{"}} and {\tt{"}}JD{\tt{"}} include the statement that the values will be in
-         units of days. However, AST does allow the use of other units
-         with all the above supported systems (except BEPOCH), on the
-         understanding that conversion to the {\tt{"}}correct{\tt{"}} units involves
-         nothing more than a simple scaling (1 yr = 365.25 d, 1 d = 24 h,
-         1 h = 60 min, 1 min = 60 s). Besselian epoch values are defined
-         in terms of tropical years of 365.2422 days, rather than the
-         usual Julian year of 365.25 days. Therefore, to avoid any
-         confusion, the Unit attribute is automatically cleared to {\tt{"}}yr{\tt{"}} when
-         a System value of BEPOCH System is selected, and an error is
-         reported if any attempt is subsequently made to change the Unit
-         attribute.
-
-         Note that the default value for the ActiveUnit flag
-         is non-zero
-         for a TimeFrame, meaning that changes to the Unit attribute for
-         a TimeFrame will result in the TimeFrame being re-mapped within
-         its enclosing FrameSet in order to reflect the change in units
-         (see astSetActiveUnit function for further information).
-      }
-      \sstsubsection{
-         \htmlref{FluxFrame}{FluxFrame}
-      }{
-         The FluxFrame class supports the following System values and
-         associated systems for measuring observed value:
-
-         \sstitemlist{
-
-            \sstitem
-            {\tt{"}}FLXDN{\tt{"}}: Flux per unit frequency (W/m$\wedge$2/Hz)
-
-            \sstitem
-            {\tt{"}}FLXDNW{\tt{"}}: Flux per unit wavelength (W/m$\wedge$2/Angstrom)
-
-            \sstitem
-            {\tt{"}}SFCBR{\tt{"}}: Surface brightness in frequency units (W/m$\wedge$2/Hz/arcmin$*$$*$2)
-
-            \sstitem
-            {\tt{"}}SFCBRW{\tt{"}}: Surface brightness in wavelength units (W/m$\wedge$2/Angstrom/arcmin$*$$*$2)
-
-         }
-         The above lists specified the default units for each System. If an
-         explicit value is set for the Unit attribute but no value is set
-         for System, then the default System value is determined by the Unit
-         string (if the units are not appropriate for describing any of the
-         supported Systems then an error will be reported when an attempt is
-         made to access the System value). If no value has been specified for
-         either Unit or System, then System=FLXDN and Unit=W/m$\wedge$2/Hz are
-         used.
-      }
-   }
-}
-\sstroutine{
-   TextLab(axis)\sstlabel{TextLabaxis}
-}{
-   Draw descriptive axis labels for a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether textual labels should be drawn to describe the quantity
-      being represented on each axis of a \htmlref{Plot}{Plot}. It takes a separate
-      value for each physical axis of a Plot so that, for instance,
-      the setting {\tt{"}}TextLab(2)=1{\tt{"}} specifies that descriptive labels
-      should be drawn for the second axis.
-
-      If the TextLab value of a Plot axis is non-zero, then
-      descriptive labels will be drawn for that axis, otherwise they
-      will be omitted. The default behaviour is to draw descriptive
-      labels if tick marks and numerical labels are being drawn around
-      the edges of the plotting area (see the \htmlref{Labelling}{Labelling} attribute),
-      but to omit them otherwise.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the descriptive labels is derived from the
-         Plot's \htmlref{Label(axis)}{Labelaxis} attribute, together with its \htmlref{Unit(axis)}{Unitaxis}
-         attribute if appropriate (see the \htmlref{LabelUnits(axis)}{LabelUnitsaxis} attribute).
-
-         \sstitem
-         The drawing of numerical axis labels for a Plot (which
-         indicate values on the axis) is controlled by the \htmlref{NumLab(axis)}{NumLabaxis}
-         attribute.
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}TextLab{\tt{"}} instead of
-         {\tt{"}}TextLab(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the TextLab(1) value.
-      }
-   }
-}
-\sstroutine{
-   TextLabGap(axis)\sstlabel{TextLabGapaxis}
-}{
-   Spacing of descriptive axis labels for a Plot
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      where descriptive axis labels are placed relative to the axes they
-      describe.  It takes a separate value for each physical axis of a
-      \htmlref{Plot}{Plot} so that, for instance, the setting {\tt{"}}TextLabGap(2)=0.01{\tt{"}}
-      specifies where the descriptive label for the second axis should
-      be drawn.
-
-      For each axis, the TextLabGap value gives the spacing between the
-      descriptive label and the edge of a box enclosing all other parts
-      of the annotated grid (excluding other descriptive labels). The gap
-      is measured to the nearest edge of the label (i.e. the top or the
-      bottom). Positive values cause the descriptive label to be placed
-      outside the bounding box, while negative values cause it to be placed
-      inside.
-
-      The TextLabGap value should be given as a fraction of the minimum
-      dimension of the plotting area, the default value being $+$0.01.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         If drawn, descriptive labels are always placed at the edges of
-         the plotting area, even although the corresponding numerical
-         labels may be drawn along axis lines in the interior of the
-         plotting area (see the \htmlref{Labelling}{Labelling} attribute).
-
-         \sstitem
-         If no axis is specified, (e.g. {\tt{"}}TextLabGap{\tt{"}} instead of
-         {\tt{"}}TextLabGap(2){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all the Plot axes, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the TextLabGap(1) value.
-      }
-   }
-}
-\sstroutine{
-   TickAll\sstlabel{TickAll}
-}{
-   Draw tick marks on all edges of a Plot?
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      whether tick marks should be drawn on all edges of a \htmlref{Plot}{Plot}.
-
-      If the TickAll value of a Plot is non-zero (the default), then
-      tick marks will be drawn on all edges of the Plot. Otherwise,
-      they will be drawn only on those edges where the numerical and
-      descriptive axis labels are drawn (see the \htmlref{Edge(axis)}{Edgeaxis}
-      attribute).
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         In some circumstances, numerical labels and tick marks are
-         drawn along grid lines inside the plotting area, rather than
-         around its edges (see the \htmlref{Labelling}{Labelling} attribute).  In this case,
-         the value of the TickAll attribute is ignored.
-      }
-   }
-}
-\sstroutine{
-   TimeOrigin\sstlabel{TimeOrigin}
-}{
-   The zero point for TimeFrame axis values
-}{
-   \sstdescription{
-      This specifies the origin from which all time values are measured.
-      The default value (zero) results in the \htmlref{TimeFrame}{TimeFrame} describing
-      absolute time values in the system given by the \htmlref{System}{System} attribute
-      (e.g. MJD, Julian epoch, etc). If a TimeFrame is to be used to
-      describe elapsed time since some origin, the TimeOrigin attribute
-      should be set to hold the required origin value. The TimeOrigin value
-      stored inside the TimeFrame structure is modified whenever TimeFrame
-      attribute values are changed so that it refers to the original moment
-      in time.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         TimeFrame
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Input Formats
-   }{
-      The formats accepted when setting a TimeOrigin value are listed
-      below. They are all case-insensitive and are generally tolerant
-      of extra white space and alternative field delimiters:
-
-      \sstitemlist{
-
-         \sstitem
-         Besselian \htmlref{Epoch}{Epoch}: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}B1950{\tt{"}} or {\tt{"}}B1976.13{\tt{"}} for example).
-
-         \sstitem
-         Julian Epoch: Expressed in decimal years, with or without
-         decimal places ({\tt{"}}J2000{\tt{"}} or {\tt{"}}J2100.9{\tt{"}} for example).
-
-         \sstitem
-         Units: An unqualified decimal value is interpreted as a value in
-         the system specified by the TimeFrame's System attribute, in the
-         units given by the TimeFrame's Unit attribute. Alternatively, an
-         appropriate unit string can be appended to the end of the floating
-         point value ({\tt{"}}123.4 d{\tt{"}} for example), in which case the supplied value
-         is scaled into the units specified by the Unit attribute.
-
-         \sstitem
-         Julian Date: With or without decimal places ({\tt{"}}JD 2454321.9{\tt{"}} for
-         example).
-
-         \sstitem
-         Modified Julian Date: With or without decimal places
-         ({\tt{"}}MJD 54321.4{\tt{"}} for example).
-
-         \sstitem
-         Gregorian Calendar Date: With the month expressed either as an
-         integer or a 3-character abbreviation, and with optional decimal
-         places to represent a fraction of a day ({\tt{"}}1996-10-2{\tt{"}} or
-         {\tt{"}}1996-Oct-2.6{\tt{"}} for example). If no fractional part of a day is
-         given, the time refers to the start of the day (zero hours).
-
-         \sstitem
-         Gregorian Date and Time: Any calendar date (as above) but with
-         a fraction of a day expressed as hours, minutes and seconds
-         ({\tt{"}}1996-Oct-2 12:13:56.985{\tt{"}} for example). The date and time can be
-         separated by a space or by a {\tt{"}}T{\tt{"}} (as used by ISO8601 format).
-      }
-   }
-   \sstdiytopic{
-      Output Format
-   }{
-      When enquiring TimeOrigin values, the returned formatted floating
-      point value represents a value in the TimeFrame's System, in the unit
-      specified by the TimeFrame's Unit attribute.
-   }
-}
-\sstroutine{
-   TimeScale\sstlabel{TimeScale}
-}{
-   Time scale
-}{
-   \sstdescription{
-      This attribute identifies the time scale to which the time axis values
-      of a \htmlref{TimeFrame}{TimeFrame} refer, and may take any of the values listed in the
-      {\tt{"}}Time Scales{\tt{"}} section (below).
-
-      The default TimeScale value depends on the current \htmlref{System}{System} value; if
-      the current TimeFrame system is {\tt{"}}Besselian epoch{\tt{"}} the default is
-      {\tt{"}}TT{\tt{"}}, otherwise it is {\tt{"}}TAI{\tt{"}}. Note, if the System attribute is set
-      so that the TimeFrame represents Besselian \htmlref{Epoch}{Epoch}, then an error
-      will be reported if an attempt is made to set the TimeScale to
-      anything other than TT.
-
-      Note, the supported time scales fall into two groups. The first group
-      containing  UT1, GMST, LAST and LMST define time in terms of the
-      orientation of the earth. The second group (containing all the remaining
-      time scales) define time in terms of an atomic process. Since the rate of
-      rotation of the earth varies in an unpredictable way, conversion between
-      two timescales in different groups relies on a value being supplied for
-      the \htmlref{Dut1}{Dut1} attribute (defined by the parent \htmlref{Frame}{Frame} class). This attribute
-      specifies the difference between the UT1 and UTC time scales, in seconds,
-      and defaults to zero. See the documentation for the Dut1 attribute for
-      further details.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         TimeFrame
-      }{
-         All TimeFrames have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Time Scales
-   }{
-      The TimeFrame class supports the following TimeScale values (all are
-      case-insensitive):
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}TAI{\tt{"}} - International Atomic Time
-
-         \sstitem
-         {\tt{"}}UTC{\tt{"}} - Coordinated Universal Time
-
-         \sstitem
-         {\tt{"}}UT1{\tt{"}} - Universal Time
-
-         \sstitem
-         {\tt{"}}GMST{\tt{"}} - Greenwich Mean Sidereal Time
-
-         \sstitem
-         {\tt{"}}LAST{\tt{"}} - Local Apparent Sidereal Time
-
-         \sstitem
-         {\tt{"}}LMST{\tt{"}} - Local Mean Sidereal Time
-
-         \sstitem
-         {\tt{"}}TT{\tt{"}} - Terrestrial Time
-
-         \sstitem
-         {\tt{"}}TDB{\tt{"}} - Barycentric Dynamical Time
-
-         \sstitem
-         {\tt{"}}TCB{\tt{"}} - Barycentric Coordinate Time
-
-         \sstitem
-         {\tt{"}}TCG{\tt{"}} - Geocentric Coordinate Time
-
-         \sstitem
-         {\tt{"}}LT{\tt{"}} - Local Time (the offset from UTC is given by attribute \htmlref{LTOffset}{LTOffset})
-
-      }
-      An very informative description of these and other time scales is
-      available at http://www.ucolick.org/$\sim$sla/leapsecs/timescales.html.
-   }
-   \sstdiytopic{
-      UTC \htmlref{Warnings}{Warnings}
-   }{
-      UTC should ideally be expressed using separate hours, minutes and
-      seconds fields (or at least in seconds for a given date) if leap seconds
-      are to be taken into account. Since the TimeFrame class represents
-      each moment in time using a single floating point number (the axis value)
-      there will be an ambiguity during a leap second. Thus an error of up to
-      1 second can result when using AST to convert a UTC time to another
-      time scale if the time occurs within a leap second. Leap seconds
-      occur at most twice a year, and are introduced to take account of
-      variation in the rotation of the earth. The most recent leap second
-      occurred on 1st January 1999. Although in the vast majority of cases
-      leap second ambiguities won't matter, there are potential problems in
-      on-line data acquisition systems and in critical applications involving
-      taking the difference between two times.
-   }
-}
-\sstroutine{
-   Title\sstlabel{Title}
-}{
-   Frame title
-}{
-   \sstdescription{
-      This attribute holds a string which is used as a title in (e.g.)
-      graphical output to describe the coordinate system which a \htmlref{Frame}{Frame}
-      represents. Examples might be {\tt{"}}Detector Coordinates{\tt{"}} or
-      {\tt{"}}Galactic Coordinates{\tt{"}}.
-
-      If a Title value has not been set for a Frame, then a suitable
-      default is supplied, depending on the class of the Frame.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default supplied by the Frame class is {\tt{"}}$<$n$>$-d coordinate
-         system{\tt{"}}, where $<$n$>$ is the number of Frame axes (\htmlref{Naxes}{Naxes}
-         attribute).
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The CmpFrame class re-defines the default Title value to be
-         {\tt{"}}$<$n$>$-d compound coordinate system{\tt{"}}, where $<$n$>$ is the number
-         of CmpFrame axes (Naxes attribute).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Title attribute of a FrameSet is the same as that of its
-         current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         A Frame's Title is intended purely for interpretation by human
-         readers and not by software.
-      }
-   }
-}
-\sstroutine{
-   TitleGap\sstlabel{TitleGap}
-}{
-   Vertical spacing for a Plot title
-}{
-   \sstdescription{
-      This attribute controls the appearance of an annotated
-      coordinate grid (drawn with the \htmlref{astGrid}{astGrid} function) by determining
-      where the title of a \htmlref{Plot}{Plot} is drawn.
-
-      Its value gives the spacing between the bottom edge of the title
-      and the top edge of a bounding box containing all the other parts
-      of the annotated grid. Positive values cause the title to be
-      drawn outside the box, while negative values cause it to be drawn
-      inside.
-
-      The TitleGap value should be given as a fraction of the minimum
-      dimension of the plotting area, the default value being $+$0.05.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{Plot3D}{Plot3D}
-      }{
-         The Plot3D class ignores this attributes since it does not draw
-         a \htmlref{Title}{Title}.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The text used for the title is obtained from the Plot's Title
-         attribute.
-      }
-   }
-}
-\sstroutine{
-   Tol\sstlabel{Tol}
-}{
-   Plotting tolerance
-}{
-   \sstdescription{
-      This attribute specifies the plotting tolerance (or resolution)
-      to be used for the graphical output produced by a \htmlref{Plot}{Plot}.  Smaller
-      values will result in smoother and more accurate curves being
-      drawn, but may slow down the plotting process. Conversely,
-      larger values may speed up the plotting process in cases where
-      high resolution is not required.
-
-      The Tol value should be given as a fraction of the minimum
-      dimension of the plotting area, and should lie in the range
-      from 1.0e-7 to 1.0. By default, a value of 0.01 is used.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Top(axis)\sstlabel{Topaxis}
-}{
-   Highest axis value to display
-}{
-   \sstdescription{
-      This attribute gives the highest axis value to be displayed (for
-      instance, by the \htmlref{astGrid}{astGrid} method).
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Frame}{Frame}
-      }{
-         The default supplied by the Frame class is to display all axis
-         values, without any limit.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Top value to $+$90 degrees
-         for latitude axes, and 180 degrees for co-latitude axes. The
-         default for longitude axes is to display all axis values.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   TranForward\sstlabel{TranForward}
-}{
-   Forward transformation defined?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
-      coordinates in the {\tt{"}}forward{\tt{"}} direction (i.e. converting input
-      coordinates into output coordinates). If this attribute is
-      non-zero, the forward transformation is available. Otherwise, it
-      is not.
-   }
-   \sstattributetype{
-      Integer (boolean), read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         The TranForward attribute value for a CmpMap is given by the
-         boolean AND of the value for each component Mapping.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The TranForward attribute of a FrameSet applies to the
-         transformation which converts between the FrameSet's base
-         \htmlref{Frame}{Frame} and its current Frame (as specified by the \htmlref{Base}{Base} and
-         \htmlref{Current}{Current} attributes). This value is given by the boolean AND
-         of the TranForward values which apply to each of the
-         individual sub-Mappings required to perform this conversion.
-         The TranForward attribute value for a FrameSet may therefore
-         change if a new Base or Current Frame is selected.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error will result if a Mapping with a TranForward value of
-         zero is used to transform coordinates in the forward direction.
-      }
-   }
-}
-\sstroutine{
-   TranInverse\sstlabel{TranInverse}
-}{
-   Inverse transformation defined?
-}{
-   \sstdescription{
-      This attribute indicates whether a \htmlref{Mapping}{Mapping} is able to transform
-      coordinates in the {\tt{"}}inverse{\tt{"}} direction (i.e. converting output
-      coordinates back into input coordinates). If this attribute is
-      non-zero, the inverse transformation is available. Otherwise, it
-      is not.
-   }
-   \sstattributetype{
-      Integer (boolean), readonly.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Mapping
-      }{
-         All Mappings have this attribute.
-      }
-      \sstsubsection{
-         \htmlref{CmpMap}{CmpMap}
-      }{
-         The TranInverse attribute value for a CmpMap is given by the
-         boolean AND of the value for each component Mapping.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The TranInverse attribute of a FrameSet applies to the
-         transformation which converts between the FrameSet's current
-         \htmlref{Frame}{Frame} and its base Frame (as specified by the \htmlref{Current}{Current} and
-         \htmlref{Base}{Base} attributes). This value is given by the boolean AND of
-         the TranInverse values which apply to each of the individual
-         sub-Mappings required to perform this conversion.
-         The TranInverse attribute value for a FrameSet may therefore
-         change if a new Base or Current Frame is selected.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         An error will result if a Mapping with a TranInverse value of
-         zero is used to transform coordinates in the inverse direction.
-      }
-   }
-}
-\sstroutine{
-   Unit(axis)\sstlabel{Unitaxis}
-}{
-   Axis physical units
-}{
-   \sstdescription{
-      This attribute contains a textual representation of the physical
-      units used to represent coordinate values on a particular axis
-      of a \htmlref{Frame}{Frame}. The \htmlref{astSetActiveUnit}{astSetActiveUnit} function controls how the Unit values
-      are used.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Frame
-      }{
-         The default supplied by the Frame class is an empty string.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         The SkyFrame class re-defines the default Unit value (e.g. to
-         {\tt{"}}hh:mm:ss.sss{\tt{"}}) to describe the character string returned by
-         the \htmlref{astFormat}{astFormat} function when formatting coordinate values.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         The SpecFrame class re-defines the default Unit value so that it
-         is appropriate for the current \htmlref{System}{System} value. See the System
-         attribute for details. An error will be reported if an attempt
-         is made to use an inappropriate Unit.
-      }
-      \sstsubsection{
-         \htmlref{TimeFrame}{TimeFrame}
-      }{
-         The TimeFrame class re-defines the default Unit value so that it
-         is appropriate for the current System value. See the System
-         attribute for details. An error will be reported if an attempt
-         is made to use an inappropriate Unit (e.g. {\tt{"}}km{\tt{"}}).
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The Unit attribute of a FrameSet axis is the same as that of
-         its current Frame (as specified by the \htmlref{Current}{Current} attribute).
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When specifying this attribute by name, it should be
-         subscripted with the number of the Frame axis to which it
-         applies.
-      }
-   }
-}
-\sstroutine{
-   UnitRadius\sstlabel{UnitRadius}
-}{
-   SphMap input vectors lie on a unit sphere?
-}{
-   \sstdescription{
-      This is a boolean attribute which indicates whether the
-      3-dimensional vectors which are supplied as input to a \htmlref{SphMap}{SphMap}
-      are known to always have unit length, so that they lie on a unit
-      sphere centred on the origin.
-
-      If this condition is true (indicated by setting UnitRadius
-      non-zero), it implies that a \htmlref{CmpMap}{CmpMap} which is composed of a
-      SphMap applied in the forward direction followed by a similar
-      SphMap applied in the inverse direction may be simplified
-      (e.g. by \htmlref{astSimplify}{astSimplify}) to become a \htmlref{UnitMap}{UnitMap}. This is because the
-      input and output vectors will both have unit length and will
-      therefore have the same coordinate values.
-
-      If UnitRadius is zero (the default), then although the output
-      vector produced by the CmpMap (above) will still have unit
-      length, the input vector may not have. This will, in general,
-      change the coordinate values, so it prevents the pair of SphMaps
-      being simplified.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         SphMap
-      }{
-         All SphMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         This attribute is intended mainly for use when SphMaps are
-         involved in a sequence of Mappings which project (e.g.) a
-         dataset on to the celestial sphere. By regarding the celestial
-         sphere as a unit sphere (and setting UnitRadius to be non-zero)
-         it becomes possible to cancel the SphMaps present, along with
-         associated sky projections, when two datasets are aligned using
-         celestial coordinates. This often considerably improves
-         performance.
-
-         \sstitem
-         Such a situations often arises when interpreting FITS data and
-         is handled automatically by the \htmlref{FitsChan}{FitsChan} class.
-
-         \sstitem
-         The value of the UnitRadius attribute is used only to control
-         the simplification of Mappings and has no effect on the value of
-         the coordinates transformed by a SphMap. The lengths of the
-         input 3-dimensional Cartesian vectors supplied are always
-         ignored, even if UnitRadius is non-zero.
-      }
-   }
-}
-\sstroutine{
-   UseDefs\sstlabel{UseDefs}
-}{
-   Use default values for unspecified attributes?
-}{
-   \sstdescription{
-      This attribute specifies whether default values should be used
-      internally for object attributes which have not been assigned a
-      value explicitly. If a non-zero value (the default) is supplied for
-      UseDefs, then default values will be used for attributes which have
-      not explicitly been assigned a value. If zero is supplied for UseDefs,
-      then an error will be reported if an attribute for which no explicit
-      value has been supplied is needed internally within AST.
-
-      Many attributes (including the UseDefs attribute itself) are unaffected
-      by the setting of the UseDefs attribute, and default values will always
-      be used without error for such attributes. The {\tt{"}}Applicability:{\tt{"}} section
-      below lists the attributes which are affected by the setting of UseDefs.
-
-      Note, UseDefs only affects access to attributes internally within
-      AST. The public accessor functions such as
-      astGetC
-      is unaffected by the UseDefs attribute - default values will always
-      be returned if no value has been set. Application code should use the
-      \htmlref{astTest}{astTest}
-      function if required to determine if a value has been set for an
-      attribute.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         \htmlref{Object}{Object}
-      }{
-         All Objects have this attribute, but ignore its setting except
-         as described below for individual classes.
-      }
-      \sstsubsection{
-         \htmlref{FrameSet}{FrameSet}
-      }{
-         The default value of UseDefs for a FrameSet is redefined to be
-         the UseDefs value of its current \htmlref{Frame}{Frame}.
-      }
-      \sstsubsection{
-         \htmlref{CmpFrame}{CmpFrame}
-      }{
-         The default value of UseDefs for a CmpFrame is redefined to be
-         the UseDefs value of its first component Frame.
-      }
-      \sstsubsection{
-         \htmlref{Region}{Region}
-      }{
-         The default value of UseDefs for a Region is redefined to be
-         the UseDefs value of its encapsulated Frame.
-      }
-      \sstsubsection{
-         Frame
-      }{
-         If UseDefs is zero, an error is reported when aligning Frames if the
-         \htmlref{Epoch}{Epoch}, \htmlref{ObsLat}{ObsLat} or \htmlref{ObsLon}{ObsLon} attribute is required but has not been
-         assigned a value explicitly.
-      }
-      \sstsubsection{
-         \htmlref{SkyFrame}{SkyFrame}
-      }{
-         If UseDefs is zero, an error is reported when aligning SkyFrames
-         if any of the following attributes are required but have not been
-         assigned a value explicitly: Epoch, \htmlref{Equinox}{Equinox}.
-      }
-      \sstsubsection{
-         \htmlref{SpecFrame}{SpecFrame}
-      }{
-         If UseDefs is zero, an error is reported when aligning SpecFrames
-         if any of the following attributes are required but have not been
-         assigned a value explicitly: Epoch, \htmlref{RefRA}{RefRA}, \htmlref{RefDec}{RefDec}, \htmlref{RestFreq}{RestFreq},
-         \htmlref{SourceVel}{SourceVel}, \htmlref{StdOfRest}{StdOfRest}.
-      }
-      \sstsubsection{
-         \htmlref{DSBSpecFrame}{DSBSpecFrame}
-      }{
-         If UseDefs is zero, an error is reported when aligning DSBSpecFrames
-         or when accessing the \htmlref{ImagFreq}{ImagFreq} attribute if any of the following
-         attributes are required but have not been assigned a value explicitly:
-         Epoch, \htmlref{DSBCentre}{DSBCentre}, \htmlref{IF}{IF}.
-      }
-   }
-}
-\sstroutine{
-   Warnings\sstlabel{Warnings}
-}{
-   Controls the issuing of warnings about various conditions
-}{
-   \sstdescription{
-      This attribute controls the issuing of warnings about selected
-      conditions when an \htmlref{Object}{Object} or keyword is read from or written to a
-      \htmlref{FitsChan}{FitsChan}. The value supplied for the Warnings attribute should
-      consist of a space separated list of condition names (see the
-      \htmlref{AllWarnings}{AllWarnings} attribute for a list of the currently defined names).
-      Each name indicates a condition which should be reported. The default
-      value for Warnings is the string {\tt{"}}Tnx Zpx BadCel BadMat BadPV BadCTYPE{\tt{"}}.
-
-      The text of any warning will be stored within the FitsChan in the
-      form of one or more new header cards with keyword ASTWARN. If
-      required, applications can check the FitsChan for ASTWARN cards
-      (using \htmlref{astFindFits}{astFindFits}) after the call to \htmlref{astRead}{astRead} or \htmlref{astWrite}{astWrite} has been
-      performed, and report the text of any such cards to the user. ASTWARN
-      cards will be propagated to any output header unless they are
-      deleted from the FitsChan using \htmlref{astDelFits}{astDelFits}.
-   }
-   \sstattributetype{
-      String
-   }
-   \sstapplicability{
-      \sstsubsection{
-         FitsChan
-      }{
-         All FitsChans have this attribute.
-      }
-   }
-   \sstnotes{
-      This attribute only controls the warnings that are to be stored as
-      a set of header cards in the FitsChan as described above. It has no
-      effect on the storage of warnings in the parent \htmlref{Channel}{Channel} structure.
-      All warnings are stored in the parent Channel structure, from where
-      they can be retrieved using the
-      \htmlref{astWarnings}{astWarnings}
-      function.
-   }
-}
-\sstroutine{
-   WcsAxis(lonlat)\sstlabel{WcsAxislonlat}
-}{
-   FITS-WCS projection axes
-}{
-   \sstdescription{
-      This attribute gives the indices of the longitude and latitude
-      coordinates of the FITS-WCS projection within the coordinate
-      space used by a \htmlref{WcsMap}{WcsMap}. These indices are defined when the
-      WcsMap is first created using \htmlref{astWcsMap}{astWcsMap} and cannot
-      subsequently be altered.
-
-      If {\tt{"}}lonlat{\tt{"}} is 1, the index of the longitude axis is
-      returned. Otherwise, if it is 2, the index of the latitude axis
-      is returned.
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-}
-\sstroutine{
-   WcsType\sstlabel{WcsType}
-}{
-   FITS-WCS projection type
-}{
-   \sstdescription{
-      This attribute specifies which type of FITS-WCS projection will
-      be performed by a \htmlref{WcsMap}{WcsMap}. The value is specified when a WcsMap
-      is first created using \htmlref{astWcsMap}{astWcsMap} and cannot subsequently be
-      changed.
-
-      The values used are represented by macros with names of
-      the form {\tt{"}}AST\_\_XXX{\tt{"}}, where {\tt{"}}XXX{\tt{"}} is the (upper case) 3-character
-      code used by the FITS-WCS {\tt{"}}CTYPEi{\tt{"}} keyword to identify the
-      projection. For example, possible values are AST\_\_TAN (for the
-      tangent plane or gnomonic projection) and AST\_\_AIT (for the
-      Hammer-Aitoff projection). AST\_\_TPN is an exception in that it
-      is not part of the FITS-WCS standard (it represents a TAN
-      projection with polynomial correction terms as defined in an early
-      draft of the FITS-WCS paper).
-   }
-   \sstattributetype{
-      Integer, read-only.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         WcsMap
-      }{
-         All WcsMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of available projections, see the FITS-WCS paper.
-      }
-   }
-}
-\sstroutine{
-   Width(element)\sstlabel{Widthelement}
-}{
-   Line width for a Plot element
-}{
-   \sstdescription{
-      This attribute determines the line width used when drawing each
-      element of graphical output produced by a \htmlref{Plot}{Plot}.  It takes a
-      separate value for each graphical element so that, for instance,
-      the setting {\tt{"}}Width(border)=2.0{\tt{"}} causes the Plot border to be
-      drawn using a line width of 2.0. A value of 1.0 results in a
-      line thickness which is approximately 0.0005 times the length of
-      the diagonal of the entire display surface.
-
-      The actual appearance of lines drawn with any particular width,
-      and the range of available widths, is determined by the
-      underlying graphics system.  The default behaviour is for all
-      graphical elements to be drawn using the default line width
-      supplied by this graphics system. This will not necessarily
-      correspond to a Width value of 1.0.
-   }
-   \sstattributetype{
-      Floating point.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Plot
-      }{
-         All Plots have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         For a list of the graphical elements available, see the
-         description of the Plot class.
-
-         \sstitem
-         If no graphical element is specified, (e.g. {\tt{"}}Width{\tt{"}} instead of
-         {\tt{"}}Width(border){\tt{"}}), then a {\tt{"}}set{\tt{"}} or {\tt{"}}clear{\tt{"}} operation will affect
-         the attribute value of all graphical elements, while a {\tt{"}}get{\tt{"}} or
-         {\tt{"}}test{\tt{"}} operation will use just the Width(\htmlref{Border}{Border}) value.
-      }
-   }
-}
-\sstroutine{
-   XmlFormat\sstlabel{XmlFormat}
-}{
-   System for formatting Objects as XML
-}{
-   \sstdescription{
-      This attribute specifies the formatting system to use when AST
-      Objects are written out as XML through an \htmlref{XmlChan}{XmlChan}. It
-      affects the behaviour of the \htmlref{astWrite}{astWrite} function when
-      they are used to transfer any AST \htmlref{Object}{Object} to or from an external
-      XML representation.
-
-      The XmlChan class allows AST objects to be represented in the form
-      of XML in several ways (conventions) and the XmlFormat attribute is
-      used to specify which of these should be used. The formatting options
-      available are outlined in the {\tt{"}}Formats Available{\tt{"}} section below.
-
-      By default, an XmlChan will attempt to determine which format system
-      is already in use, and will set the default XmlFormat value
-      accordingly (so that subsequent I/O operations adopt the same
-      conventions). It does this by looking for certain critical items
-      which only occur in particular formats. For details of how this
-      works, see the {\tt{"}}Choice of Default Format{\tt{"}} section below. If you wish
-      to ensure that a particular format system is used, independently of
-      any XML already read, you should set an explicit XmlFormat value
-      yourself.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         XmlChan
-      }{
-         All XmlChans have this attribute.
-      }
-   }
-   \sstdiytopic{
-      Formats Available
-   }{
-      The XmlFormat attribute can take any of the following (case
-      insensitive) string values to select the corresponding formatting
-      system:
-
-      \sstitemlist{
-
-         \sstitem
-         {\tt{"}}NATIVE{\tt{"}}: This is a direct conversion to XML of the heirarchical
-         format used by a standard XML channel (and also by the NATIVE
-         encoding of a \htmlref{FitsChan}{FitsChan}).
-
-         \sstitem
-         {\tt{"}}QUOTED{\tt{"}}: This is the same as NATIVE format except that extra
-         information is included which allows client code to convert the
-         XML into a form which can be read by a standard AST \htmlref{Channel}{Channel}. This
-         extra information indicates which AST attribute values should be
-         enclosed in quotes before being passed to a Channel.
-
-         \sstitem
-         {\tt{"}}IVOA{\tt{"}}: This is a format that uses an early draft of the STC-X schema
-         developed by the International Virtual Observatory Alliance (IVOA -
-         see {\tt{"}}http://www.ivoa.net/{\tt{"}}) to describe coordinate systems, regions,
-         mappings, etc. Support is limited to V1.20 described at
-         {\tt{"}}http://www.ivoa.net/Documents/WD/STC/STC-20050225.html{\tt{"}}. Since the
-         version of STC-X finally adopted by the IVOA differs in several
-         significant respects from V1.20, this format is now mainly of
-         historical interest. Note, the alternative {\tt{"}}STC-S{\tt{"}} format (a
-         simpler non-XML encoding of the STC metadata) is supported by the
-         \htmlref{StcsChan}{StcsChan} class.
-      }
-   }
-   \sstdiytopic{
-      Choice of Default Format;
-   }{
-      If the XmlFormat attribute of an XmlChan is not set, the default
-      value it takes is determined by the presence of certain critical
-      items within the document most recently read using
-      \htmlref{astRead}{astRead}.
-      The sequence of decision used to arrive at the default value is as
-      follows:
-
-      \sstitemlist{
-
-         \sstitem
-         If the previous document read contained any elements in any of the STC
-         namespaces ({\tt{"}}urn:nvo-stc{\tt{"}}, {\tt{"}}urn:nvo-coords{\tt{"}} or {\tt{"}}urn:nvo-region{\tt{"}}), then
-         the default value is IVOA.
-
-         \sstitem
-         If the previous document read contained any elements in the AST
-         namespace which had an associated XML attribute called {\tt{"}}quoted{\tt{"}}, then
-         the default value is QUOTED.
-
-         \sstitem
-         Otherwise, if none of these conditions is met (as would be the
-         case if no document had yet been read), then NATIVE format is
-         used.
-
-      }
-      Setting an explicit value for the XmlFormat attribute always
-      over-rides this default behaviour.
-   }
-   \sstdiytopic{
-      The IVOA Format
-   }{
-      The IVOA support caters only for certain parts of V1.20 of the
-      draft Space-Time Coordinate (STC) schema (see
-      http://www.ivoa.net/Documents/WD/STC/STC-20050225.html). Note, this
-      draft has now been superceded by an officially adopted version that
-      differs in several significant respects from V1.20. Consequently,
-      the {\tt{"}}IVOA{\tt{"}} XmlChan format is of historical interest only.
-
-      The following points should be noted when using an XmlChan to read
-      or write STC information (note, this list is currently incomplete):
-
-      \sstitemlist{
-
-         \sstitem
-         Objects can currently only be read using this format, not written.
-
-         \sstitem
-         The AST object generated by reading an $<$STCMetadata$>$ element will
-         be an instance of one of the AST {\tt{"}}\htmlref{Stc}{Stc}{\tt{"}} classes: \htmlref{StcResourceProfile}{StcResourceProfile},
-         \htmlref{StcSearchLocation}{StcSearchLocation}, \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcObsDataLocation}{StcObsDataLocation}.
-
-         \sstitem
-         When reading an $<$STCMetadata$>$ element, the axes in the returned
-         AST Object will be in the order space, time, spectral, redshift,
-         irrespective of the order in which the axes occur in the $<$STCMetadata$>$
-         element. If the supplied $<$STCMetadata$>$ element does not contain all of
-         these axes, the returned AST Object will also omit them, but the
-         ordering of those axes which are present will be as stated above. If
-         the spatial frame represents a celestial coordinate system the
-         spatial axes will be in the order (longitude, latitude).
-
-         \sstitem
-         Until such time as the AST \htmlref{TimeFrame}{TimeFrame} is complete, a simple
-         1-dimensional \htmlref{Frame}{Frame} (with \htmlref{Domain}{Domain} set to TIME) will be used to
-         represent the STC $<$TimeFrame$>$ element. Consequently, most of the
-         information within a $<$TimeFrame$>$ element is currently ignored.
-
-         \sstitem
-         $<$SpaceFrame$>$ elements can only be read if they describe a celestial
-         longitude and latitude axes supported by the AST \htmlref{SkyFrame}{SkyFrame} class. The
-         space axes will be returned in the order (longitude, latitude).
-
-         \sstitem
-         Velocities associated with SpaceFrames cannot be read.
-
-         \sstitem
-         Any $<$GenericCoordFrame$>$ elements within an $<$AstroCoordSystem$>$ element
-         are currently ignored.
-
-         \sstitem
-         Any second or subsequent $<$AstroCoordSystem$>$ found within an
-         STCMetaData element is ignored.
-
-         \sstitem
-         Any second or subsequent $<$AstroCoordArea$>$ found within an
-         STCMetaData element is ignored.
-
-         \sstitem
-         Any $<$OffsetCenter$>$ found within a $<$SpaceFrame$>$ is ignored.
-
-         \sstitem
-         Any CoordFlavor element found within a $<$SpaceFrame$>$ is ignored.
-
-         \sstitem
-         $<$SpaceFrame$>$ elements can only be read if they refer to
-         one of the following space reference frames: ICRS, GALACTIC\_II,
-         SUPER\_GALACTIC, HEE, FK4, FK5, ECLIPTIC.
-
-         \sstitem
-         $<$SpaceFrame$>$ elements can only be read if the reference
-         position is TOPOCENTER. Also, any planetary ephemeris is ignored.
-
-         \sstitem
-         Regions: there is currently no support for STC regions of type
-         Sector, ConvexHull or SkyIndex.
-
-         \sstitem
-         The AST \htmlref{Region}{Region} read from a CoordInterval element is considered to
-         be open if either the lo\_include or the hi\_include attribute is
-         set to false.
-
-         \sstitem
-         $<$RegionFile$>$ elements are not supported.
-
-         \sstitem
-         Vertices within $<$\htmlref{Polygon}{Polygon}$>$ elements are always considered to be
-         joined using great circles (that is, $<$SmallCircle$>$ elements are
-         ignored).
-      }
-   }
-}
-\sstroutine{
-   XmlIndent\sstlabel{XmlIndent}
-}{
-   Controls output of indentation and line feeds
-}{
-   \sstdescription{
-      This attribute controls the appearance of the XML produced when an
-      AST object is written to an \htmlref{XmlChan}{XmlChan}. If it is non-zero, then extra
-      linefeed characters will be inserted as necessary to ensure that each
-      XML tag starts on a new line, and each tag will be indented to show
-      its depth in the containment hierarchy. If XmlIndent is zero (the
-      default), then no linefeeds or indentation strings will be added to
-      output text.
-   }
-   \sstattributetype{
-      Integer (boolean).
-   }
-   \sstapplicability{
-      \sstsubsection{
-         XmlChan
-      }{
-         All XmlChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   XmlLength\sstlabel{XmlLength}
-}{
-   Controls output buffer length
-}{
-   \sstdescription{
-      This attribute specifies the maximum length to use when writing out
-      text through the sink function supplied when the \htmlref{XmlChan}{XmlChan} was created.
-
-      The number of characters in each string written out through the sink
-      function will not be greater than the value of this attribute (but
-      may be less). A value of zero (the default) means there is no limit -
-      each string can be of any length.
-   }
-   \sstattributetype{
-      Integer.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         XmlChan
-      }{
-         All XmlChans have this attribute.
-      }
-   }
-}
-\sstroutine{
-   XmlPrefix\sstlabel{XmlPrefix}
-}{
-   The namespace prefix to use when writing
-}{
-   \sstdescription{
-      This attribute is a string which is to be used as the namespace
-      prefix for all XML elements created as a result of writing an AST
-      \htmlref{Object}{Object} out through an \htmlref{XmlChan}{XmlChan}. The URI associated with the namespace
-      prefix is given by the symbolic constant AST\_\_XMLNS defined in
-      ast.h.
-      A definition of the namespace prefix is included in each top-level
-      element produced by the XmlChan.
-
-      The default value is a blank string which causes no prefix to be
-      used. In this case each top-level element will set the default
-      namespace to be the value of AST\_\_XMLNS.
-   }
-   \sstattributetype{
-      String.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         Object
-      }{
-         All Objects have this attribute.
-      }
-   }
-}
-\sstroutine{
-   Zoom\sstlabel{Zoom}
-}{
-   ZoomMap scale factor
-}{
-   \sstdescription{
-      This attribute holds the \htmlref{ZoomMap}{ZoomMap} scale factor, by which
-      coordinate values are multiplied (by the forward transformation)
-      or divided (by the inverse transformation). This factor is set
-      when a ZoomMap is created, but may later be modified. The
-      default value is unity.
-
-      Note that if a ZoomMap is inverted (e.g. by using \htmlref{astInvert}{astInvert}),
-      then the reciprocal of this zoom factor will, in effect, be
-      used.
-   }
-   \sstattributetype{
-      Double precision.
-   }
-   \sstapplicability{
-      \sstsubsection{
-         ZoomMap
-      }{
-         All ZoomMaps have this attribute.
-      }
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         The Zoom attribute may not be set to zero.
-      }
-   }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:classdescriptions}AST Class Descriptions}
-\small
-\sstroutine{
-   Axis\sstlabel{Axis}
-}{
-   Store axis information
-}{
-   \sstdescription{
-      The Axis class is used to store information associated with a
-      particular axis of a \htmlref{Frame}{Frame}. It is used internally by the AST
-      library and has no constructor function. You should encounter it
-      only within textual output (e.g. from \htmlref{astWrite}{astWrite}).
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Axis class inherits from the \htmlref{Object}{Object} class.
-   }
-}
-\sstroutine{
-   Box\sstlabel{Box}
-}{
-   A box region with sides parallel to the axes of a Frame
-}{
-   \sstdescription{
-      The Box class implements a \htmlref{Region}{Region} which represents a box with sides
-      parallel to the axes of a \htmlref{Frame}{Frame} (i.e. an area which encloses a given
-      range of values on each axis). A Box is similar to an \htmlref{Interval}{Interval}, the
-      only real difference being that the Interval class allows some axis
-      limits to be unspecified. Note, a Box will only look like a box if
-      the Frame geometry is approximately flat. For instance, a Box centred
-      close to a pole in a \htmlref{SkyFrame}{SkyFrame} will look more like a fan than a box
-      (the \htmlref{Polygon}{Polygon} class can be used to create a box-like region close to a
-      pole).
-   }
-   \sstconstructor{
-      \htmlref{astBox}{astBox}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Box class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Box class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The Box class does not define any new functions beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   Channel\sstlabel{Channel}
-}{
-   Basic (textual) I/O channel
-}{
-   \sstdescription{
-      The Channel class implements low-level input/output for the AST
-      library.  Writing an \htmlref{Object}{Object} to a Channel will generate a textual
-      representation of that Object, and reading from a Channel will
-      create a new Object from its textual representation.
-
-      Normally, when you use a Channel, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
-      by reading and writing the resulting text. By default, however,
-      a Channel will read from standard input and write to standard
-      output.
-   }
-   \sstconstructor{
-      \htmlref{astChannel}{astChannel}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Channel class inherits from the Object class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Objects, every
-      Channel also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Comment}{Comment}: Include textual comments in output?
-
-         \sstitem
-         \htmlref{Full}{Full}: Set level of output detail
-
-         \sstitem
-         \htmlref{ReportLevel}{ReportLevel}: Selects the level of error reporting
-
-         \sstitem
-         \htmlref{Skip}{Skip}: Skip irrelevant data?
-
-         \sstitem
-         \htmlref{Strict}{Strict}: Generate errors instead of warnings?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Objects, the
-      following functions may also be applied to all Channels:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astWarnings}{astWarnings}: Return warnings from the previous read or write
-
-         \sstitem
-         \htmlref{astPutChannelData}{astPutChannelData}: Store data to pass to source or sink functions
-
-         \sstitem
-         \htmlref{astRead}{astRead}: Read an Object from a Channel
-
-         \sstitem
-         \htmlref{astWrite}{astWrite}: Write an Object to a Channel
-      }
-   }
-}
-\sstroutine{
-   Circle\sstlabel{Circle}
-}{
-   A circular or spherical region within a Frame
-}{
-   \sstdescription{
-      The Circle class implements a \htmlref{Region}{Region} which represents a circle or
-      sphere within a \htmlref{Frame}{Frame}.
-   }
-   \sstconstructor{
-      \htmlref{astCircle}{astCircle}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Circle class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Circle class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Regions, the
-      following functions may also be applied to all Circles:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astCirclePars}{astCirclePars}: Get the geometric parameters of the Circle
-
-         \sstitem
-         AST\_CIRCLEPARS: Get the geometric parameters of the Circle
-      }
-   }
-}
-\sstroutine{
-   CmpFrame\sstlabel{CmpFrame}
-}{
-   Compound Frame
-}{
-   \sstdescription{
-      A CmpFrame is a compound \htmlref{Frame}{Frame} which allows two component Frames
-      (of any class) to be merged together to form a more complex
-      Frame. The axes of the two component Frames then appear together
-      in the resulting CmpFrame (those of the first Frame, followed by
-      those of the second Frame).
-
-      Since a CmpFrame is itself a Frame, it can be used as a
-      component in forming further CmpFrames. Frames of arbitrary
-      complexity may be built from simple individual Frames in this
-      way.
-
-      Also since a Frame is a \htmlref{Mapping}{Mapping}, a CmpFrame can also be used as a
-      Mapping. Normally, a CmpFrame is simply equivalent to a \htmlref{UnitMap}{UnitMap},
-      but if either of the component Frames within a CmpFrame is a \htmlref{Region}{Region}
-      (a sub-class of Frame), then the CmpFrame will use the Region as a
-      Mapping when transforming values for axes described by the Region.
-      Thus input axis values corresponding to positions which are outside the
-      Region will result in bad output axis values.
-   }
-   \sstconstructor{
-      \htmlref{astCmpFrame}{astCmpFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The CmpFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The CmpFrame class does not define any new attributes beyond
-      those which are applicable to all Frames. However, the attributes
-      of the component Frames can be accessed as if they were attributes
-      of the CmpFrame. For instance, if a CmpFrame contains a \htmlref{SpecFrame}{SpecFrame}
-      and a \htmlref{SkyFrame}{SkyFrame}, then the CmpFrame will recognise the {\tt{"}}\htmlref{Equinox}{Equinox}{\tt{"}}
-      attribute and forward access requests to the component SkyFrame.
-      Likewise, it will recognise the {\tt{"}}\htmlref{RestFreq}{RestFreq}{\tt{"}} attribute and forward
-      access requests to the component SpecFrame. An axis index can
-      optionally be appended to the end of any attribute name, in which
-      case the request to access the attribute will be forwarded to the
-      primary Frame defining the specified axis.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The CmpFrame class does not define any new functions beyond those
-      which are applicable to all Frames.
-   }
-}
-\sstroutine{
-   CmpMap\sstlabel{CmpMap}
-}{
-   Compound Mapping
-}{
-   \sstdescription{
-      A CmpMap is a compound \htmlref{Mapping}{Mapping} which allows two component
-      Mappings (of any class) to be connected together to form a more
-      complex Mapping. This connection may either be {\tt{"}}in series{\tt{"}}
-      (where the first Mapping is used to transform the coordinates of
-      each point and the second mapping is then applied to the
-      result), or {\tt{"}}in parallel{\tt{"}} (where one Mapping transforms the
-      earlier coordinates for each point and the second Mapping
-      simultaneously transforms the later coordinates).
-
-      Since a CmpMap is itself a Mapping, it can be used as a
-      component in forming further CmpMaps. Mappings of arbitrary
-      complexity may be built from simple individual Mappings in this
-      way.
-   }
-   \sstconstructor{
-      \htmlref{astCmpMap}{astCmpMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The CmpMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The CmpMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The CmpMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   CmpRegion\sstlabel{CmpRegion}
-}{
-   A combination of two regions within a single Frame
-}{
-   \sstdescription{
-      A CmpRegion is a \htmlref{Region}{Region} which allows two component
-      Regions (of any class) to be combined to form a more complex
-      Region. This combination may be performed a boolean AND, OR
-      or XOR (exclusive OR) operator. If the AND operator is
-      used, then a position is inside the CmpRegion only if it is
-      inside both of its two component Regions. If the OR operator is
-      used, then a position is inside the CmpRegion if it is inside
-      either (or both) of its two component Regions. If the XOR operator
-      is used, then a position is inside the CmpRegion if it is inside
-      one but not both of its two component Regions. Other operators can
-      be formed by negating one or both component Regions before using
-      them to construct a new CmpRegion.
-
-      The two component Region need not refer to the same coordinate
-      \htmlref{Frame}{Frame}, but it must be possible for the
-      \htmlref{astConvert}{astConvert}
-      function to determine a \htmlref{Mapping}{Mapping} between them (an error will be
-      reported otherwise when the CmpRegion is created). For instance,
-      a CmpRegion may combine a Region defined within an ICRS \htmlref{SkyFrame}{SkyFrame}
-      with a Region defined within a Galactic SkyFrame. This is
-      acceptable because the SkyFrame class knows how to convert between
-      these two systems, and consequently the
-      astConvert
-      function will also be able to convert between them. In such cases,
-      the second component Region will be mapped into the coordinate Frame
-      of the first component Region, and the Frame represented by the
-      CmpRegion as a whole will be the Frame of the first component Region.
-
-      Since a CmpRegion is itself a Region, it can be used as a
-      component in forming further CmpRegions. Regions of arbitrary
-      complexity may be built from simple individual Regions in this
-      way.
-   }
-   \sstconstructor{
-      \htmlref{astCmpRegion}{astCmpRegion}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The CmpRegion class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The CmpRegion class does not define any new attributes beyond those
-      which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The CmpRegion class does not define any new functions beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   DSBSpecFrame\sstlabel{DSBSpecFrame}
-}{
-   Dual sideband spectral coordinate system description
-}{
-   \sstdescription{
-      A DSBSpecFrame is a specialised form of \htmlref{SpecFrame}{SpecFrame} which represents
-      positions in a spectrum obtained using a dual sideband instrument.
-      Such an instrument produces a spectrum in which each point contains
-      contributions from two distinctly different frequencies, one from
-      the {\tt{"}}lower side band{\tt{"}} (LSB) and one from the {\tt{"}}upper side band{\tt{"}} (USB).
-      Corresponding LSB and USB frequencies are connected by the fact
-      that they are an equal distance on either side of a fixed central
-      frequency known as the {\tt{"}}Local Oscillator{\tt{"}} (LO) frequency.
-
-      When quoting a position within such a spectrum, it is necessary to
-      indicate whether the quoted position is the USB position or the
-      corresponding LSB position. The \htmlref{SideBand}{SideBand} attribute provides this
-      indication. Another option that the SideBand attribute provides is
-      to represent a spectral position by its topocentric offset from the
-      LO frequency.
-
-      In practice, the LO frequency is specified by giving the distance
-      from the LO frequency to some {\tt{"}}central{\tt{"}} spectral position. Typically
-      this central position is that of some interesting spectral feature.
-      The distance from this central position to the LO frequency is known
-      as the {\tt{"}}intermediate frequency{\tt{"}} (\htmlref{IF}{IF}). The value supplied for IF can
-      be a signed value in order to indicate whether the LO frequency is
-      above or below the central position.
-   }
-   \sstconstructor{
-      \htmlref{astDSBSpecFrame}{astDSBSpecFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The DSBSpecFrame class inherits from the SpecFrame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all SpecFrames, every
-      DSBSpecFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignSideBand}{AlignSideBand}: Should alignment occur between sidebands?
-
-         \sstitem
-         \htmlref{DSBCentre}{DSBCentre}: The central position of interest.
-
-         \sstitem
-         \htmlref{IF}{IF}: The intermediate frequency used to define the LO frequency.
-
-         \sstitem
-         \htmlref{ImagFreq}{ImagFreq}: The image sideband equivalent of the rest frequency.
-
-         \sstitem
-         \htmlref{SideBand}{SideBand}: Indicates which sideband the DSBSpecFrame represents.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The DSBSpecFrame class does not define any new functions beyond those
-      which are applicable to all SpecFrames.
-   }
-}
-\sstroutine{
-   DssMap\sstlabel{DssMap}
-}{
-   Map points using a Digitised Sky Survey plate solution
-}{
-   \sstdescription{
-      The DssMap class implements a \htmlref{Mapping}{Mapping} which transforms between
-      2-dimensional pixel coordinates and an equatorial sky coordinate
-      system (right ascension and declination) using a Digitised Sky
-      Survey (DSS) astrometric plate solution.
-
-      The input coordinates are pixel numbers along the first and
-      second dimensions of an image, where the centre of the first
-      pixel is located at (1,1) and the spacing between pixel centres
-      is unity.
-
-      The output coordinates are right ascension and declination in
-      radians. The celestial coordinate system used (FK4, FK5, etc.)
-      is unspecified, and will usually be indicated by appropriate
-      keywords in a FITS header.
-   }
-   \sstconstructor{
-      The DssMap class does not have a constructor function.  A DssMap
-      is created only as a by-product of reading a \htmlref{FrameSet}{FrameSet} (using
-      \htmlref{astRead}{astRead}) from a \htmlref{FitsChan}{FitsChan} which contains FITS header cards
-      describing a DSS plate solution, and whose \htmlref{Encoding}{Encoding} attribute is
-      set to {\tt{"}}DSS{\tt{"}}. The result of such a read, if successful, is a
-      FrameSet whose base and current Frames are related by a DssMap.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The DssMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The DssMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The DssMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Ellipse\sstlabel{Ellipse}
-}{
-   An elliptical region within a 2-dimensional Frame
-}{
-   \sstdescription{
-      The Ellipse class implements a \htmlref{Region}{Region} which represents a ellipse
-      within a 2-dimensional \htmlref{Frame}{Frame}.
-   }
-   \sstconstructor{
-      \htmlref{astEllipse}{astEllipse}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Ellipse class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Ellipse class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Regions, the
-      following functions may also be applied to all Ellipses:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astEllipsePars}{astEllipsePars}: Get the geometric parameters of the Ellipse
-
-         \sstitem
-         AST\_ELLIPSEPARS: Get the geometric parameters of the Ellipse
-      }
-   }
-}
-\sstroutine{
-   FitsChan\sstlabel{FitsChan}
-}{
-   I/O Channel using FITS header cards to represent Objects
-}{
-   \sstdescription{
-      A FitsChan is a specialised form of \htmlref{Channel}{Channel} which supports I/O
-      operations involving the use of FITS (Flexible Image Transport
-      \htmlref{System}{System}) header cards. Writing an \htmlref{Object}{Object} to a FitsChan (using
-      \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate a
-      description of that Object composed of FITS header cards, and
-      reading from a FitsChan will create a new Object from its FITS
-      header card description.
-
-      While a FitsChan is active, it represents a buffer which may
-      contain zero or more 80-character {\tt{"}}header cards{\tt{"}} conforming to
-      FITS conventions. Any sequence of FITS-conforming header cards
-      may be stored, apart from the {\tt{"}}END{\tt{"}} card whose existence is
-      merely implied.  The cards may be accessed in any order by using
-      the FitsChan's integer \htmlref{Card}{Card} attribute, which identifies a {\tt{"}}current{\tt{"}}
-      card, to which subsequent operations apply. Searches
-      based on keyword may be performed (using \htmlref{astFindFits}{astFindFits}), new
-      cards may be inserted (\htmlref{astPutFits}{astPutFits}, \htmlref{astPutCards}{astPutCards}, \htmlref{astSetFits$<$X$>$}{astSetFitsX}) and
-      existing ones may be deleted (\htmlref{astDelFits}{astDelFits}), extracted (\htmlref{astGetFits$<$X$>$}{astGetFitsX}),
-      or changed (astSetFits$<$X$>$).
-
-      When you create a FitsChan, you have the option of specifying
-      {\tt{"}}source{\tt{"}} and {\tt{"}}sink{\tt{"}} functions which connect it to external data
-      stores by reading and writing FITS header cards. If you provide
-      a source function, it is used to fill the FitsChan with header cards
-      when it is accessed for the first time. If you do not provide a
-      source function, the FitsChan remains empty until you explicitly enter
-      data into it (e.g. using astPutFits, astPutCards or astWrite). If you
-      provide a sink function, it is used to deliver any remaining
-      contents of a FitsChan to an external data store when the
-      FitsChan is deleted. If you do not provide a sink function, any
-      header cards remaining when the FitsChan is deleted will be
-      lost, so you should arrange to extract them first if necessary
-      (e.g. using astFindFits or \htmlref{astRead}{astRead}).
-
-      Coordinate system information may be described using FITS header
-      cards using several different conventions, termed
-      {\tt{"}}encodings{\tt{"}}. When an AST Object is written to (or read from) a
-      FitsChan, the value of the FitsChan's \htmlref{Encoding}{Encoding} attribute
-      determines how the Object is converted to (or from) a
-      description involving FITS header cards. In general, different
-      encodings will result in different sets of header cards to
-      describe the same Object. Examples of encodings include the DSS
-      encoding (based on conventions used by the STScI Digitised Sky
-      Survey data), the FITS-WCS encoding (based on a proposed FITS
-      standard) and the NATIVE encoding (a near loss-less way of
-      storing AST Objects in FITS headers).
-
-      The available encodings differ in the range of Objects they can
-      represent, in the number of Object descriptions that can coexist
-      in the same FitsChan, and in their accessibility to other
-      (external) astronomy applications (see the Encoding attribute
-      for details). Encodings are not necessarily mutually exclusive
-      and it may sometimes be possible to describe the same Object in
-      several ways within a particular set of FITS header cards by
-      using several different encodings.
-
-      The detailed behaviour of astRead and astWrite, when used with
-      a FitsChan, depends on the encoding in use. In general, however,
-      all successful use of astRead is destructive, so that FITS header cards
-      are consumed in the process of reading an Object, and are
-      removed from the FitsChan (this deletion can be prevented for
-      specific cards by calling the
-      \htmlref{astRetainFits}{astRetainFits} function).
-      An unsuccessful call of
-      astRead
-      (for instance, caused by the FitsChan not containing the necessary
-      FITS headers cards needed to create an Object) results in the
-      contents of the FitsChan being left unchanged.
-
-      If the encoding in use allows only a single Object description
-      to be stored in a FitsChan (e.g. the DSS, FITS-WCS and FITS-IRAF
-      encodings), then write operations using astWrite will
-      over-write any existing Object description using that
-      encoding. Otherwise (e.g. the NATIVE encoding), multiple Object
-      descriptions are written sequentially and may later be read
-      back in the same sequence.
-   }
-   \sstconstructor{
-      \htmlref{astFitsChan}{astFitsChan}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The FitsChan class inherits from the Channel class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Channels, every
-      FitsChan also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AllWarnings}{AllWarnings}: A list of the available conditions
-
-         \sstitem
-         \htmlref{Card}{Card}: Index of current FITS card in a FitsChan
-
-         \sstitem
-         \htmlref{CarLin}{CarLin}: Ignore spherical rotations on CAR projections?
-
-         \sstitem
-         \htmlref{CDMatrix}{CDMatrix}: Use a CD matrix instead of a PC matrix?
-
-         \sstitem
-         \htmlref{Clean}{Clean}: Remove cards used whilst reading even if an error occurs?
-
-         \sstitem
-         \htmlref{DefB1950}{DefB1950}: Use FK4 B1950 as default equatorial coordinates?
-
-         \sstitem
-         \htmlref{Encoding}{Encoding}: System for encoding Objects as FITS headers
-
-         \sstitem
-         \htmlref{FitsDigits}{FitsDigits}: Digits of precision for floating-point FITS values
-
-         \sstitem
-         \htmlref{Iwc}{Iwc}: Add a \htmlref{Frame}{Frame} describing Intermediate World Coords?
-
-         \sstitem
-         \htmlref{Ncard}{Ncard}: Number of FITS header cards in a FitsChan
-
-         \sstitem
-         \htmlref{Warnings}{Warnings}: Produces warnings about selected conditions
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Channels, the
-      following functions may also be applied to all FitsChans:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astDelFits}{astDelFits}: Delete the current FITS card in a FitsChan
-
-         \sstitem
-         \htmlref{astFindFits}{astFindFits}: Find a FITS card in a FitsChan by keyword
-
-         \sstitem
-         \htmlref{astGetFits$<$X$>$}{astGetFitsX}: Get a keyword value from a FitsChan
-
-         \sstitem
-         \htmlref{astSetFits$<$X$>$}{astSetFitsX}: Store a new keyword value in a FitsChan
-
-         \sstitem
-         \htmlref{astPurgeWCS}{astPurgeWCS}: Delete all WCS-related cards in a FitsChan
-
-         \sstitem
-         AST\_PURGEWCS: Delete all WCS-related cards in a FitsChan
-
-         \sstitem
-         \htmlref{astPutFits}{astPutFits}: Store a FITS header card in a FitsChan
-
-         \sstitem
-         \htmlref{astPutCards}{astPutCards}: Stores a set of FITS header card in a FitsChan
-
-         \sstitem
-         \htmlref{astRetainFits}{astRetainFits}: Ensure current card is retained in a FitsChan
-
-         \sstitem
-         \htmlref{astTestFits}{astTestFits}: Test if a keyword has a defined value in a FitsChan
-      }
-   }
-}
-\sstroutine{
-   FluxFrame\sstlabel{FluxFrame}
-}{
-   Measured flux description
-}{
-   \sstdescription{
-      A FluxFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various systems used to represent the signal level in an
-      observation. The particular coordinate system to be used is specified
-      by setting the FluxFrame's \htmlref{System}{System} attribute qualified, as necessary, by
-      other attributes such as the units, etc (see the description of the
-      System attribute for details).
-
-      All flux values are assumed to be measured at the same frequency or
-      wavelength (as given by the \htmlref{SpecVal}{SpecVal} attribute). Thus this class is
-      more appropriate for use with images rather than spectra.
-   }
-   \sstconstructor{
-      \htmlref{astFluxFrame}{astFluxFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The FluxFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      FluxFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{SpecVal}{SpecVal}: The spectral position at which the flux values are measured.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The FluxFrame class does not define any new functions beyond those
-      which are applicable to all Frames.
-   }
-}
-\sstroutine{
-   Frame\sstlabel{Frame}
-}{
-   Coordinate system description
-}{
-   \sstdescription{
-      This class is used to represent coordinate systems. It does this
-      in rather the same way that a frame around a graph describes the
-      coordinate space in which data are plotted. Consequently, a
-      Frame has a \htmlref{Title}{Title} (string) attribute, which describes the
-      coordinate space, and contains axes which in turn hold
-      information such as Label and Units strings which are used for
-      labelling (e.g.) graphical output. In general, however, the
-      number of axes is not restricted to two.
-
-      Functions are available for converting Frame coordinate values
-      into a form suitable for display, and also for calculating
-      distances and offsets between positions within the Frame.
-
-      Frames may also contain knowledge of how to transform to and
-      from related coordinate systems.
-   }
-   \sstconstructor{
-      \htmlref{astFrame}{astFrame}
-   }
-   \sstnotes{
-      \sstitemlist{
-
-         \sstitem
-         When used as a \htmlref{Mapping}{Mapping}, a Frame implements a unit (null)
-         transformation in both the forward and inverse directions
-         (equivalent to a \htmlref{UnitMap}{UnitMap}). The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attribute values are
-         both equal to the number of Frame axes.
-      }
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Frame class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      Frame also has the following attributes (if the Frame has only one
-      axis, the axis specifier can be omited from the following attribute
-      names):
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignSystem}{AlignSystem}: Coordinate system used to align Frames
-
-         \sstitem
-         \htmlref{Bottom(axis)}{Bottomaxis}: Lowest axis value to display
-
-         \sstitem
-         \htmlref{Digits/Digits(axis)}{DigitsDigitsaxis}: Number of digits of precision
-
-         \sstitem
-         \htmlref{Direction(axis)}{Directionaxis}: Display axis in conventional direction?
-
-         \sstitem
-         \htmlref{Domain}{Domain}: Coordinate system domain
-
-         \sstitem
-         \htmlref{Dut1}{Dut1}: Difference between the UT1 and UTC timescale
-
-         \sstitem
-         \htmlref{Epoch}{Epoch}: Epoch of observation
-
-         \sstitem
-         \htmlref{Format(axis)}{Formataxis}: Format specification for axis values
-
-         \sstitem
-         \htmlref{Label(axis)}{Labelaxis}: \htmlref{Axis}{Axis} label
-
-         \sstitem
-         \htmlref{MatchEnd}{MatchEnd}: Match trailing axes?
-
-         \sstitem
-         \htmlref{MaxAxes}{MaxAxes}: Maximum number of Frame axes to match
-
-         \sstitem
-         \htmlref{MinAxes}{MinAxes}: Minimum number of Frame axes to match
-
-         \sstitem
-         \htmlref{Naxes}{Naxes}: Number of Frame axes
-
-         \sstitem
-         \htmlref{NormUnit(axis)}{NormUnitaxis}: Normalised axis physical units
-
-         \sstitem
-         \htmlref{ObsAlt}{ObsAlt}: Geodetic altitude of observer
-
-         \sstitem
-         \htmlref{ObsLat}{ObsLat}: Geodetic latitude of observer
-
-         \sstitem
-         \htmlref{ObsLon}{ObsLon}: Geodetic longitude of observer
-
-         \sstitem
-         \htmlref{Permute}{Permute}: Permute axis order?
-
-         \sstitem
-         \htmlref{PreserveAxes}{PreserveAxes}: Preserve axes?
-
-         \sstitem
-         \htmlref{Symbol(axis)}{Symbolaxis}: Axis symbol
-
-         \sstitem
-         \htmlref{System}{System}: Coordinate system used to describe the domain
-
-         \sstitem
-         \htmlref{Title}{Title}: Frame title
-
-         \sstitem
-         \htmlref{Top(axis)}{Topaxis}: Highest axis value to display
-
-         \sstitem
-         \htmlref{Unit(axis)}{Unitaxis}: Axis physical units
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Mappings, the
-      following functions may also be applied to all Frames:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astAngle}{astAngle}: Calculate the angle subtended by two points at a third point
-
-         \sstitem
-         \htmlref{astAxAngle}{astAxAngle}: Find the angle from an axis, to a line through two points
-
-         \sstitem
-         \htmlref{astAxDistance}{astAxDistance}: Calculate the distance between two axis values
-
-         \sstitem
-         \htmlref{astAxOffset}{astAxOffset}: Calculate an offset along an axis
-
-         \sstitem
-         \htmlref{astConvert}{astConvert}: Determine how to convert between two coordinate systems
-
-         \sstitem
-         \htmlref{astDistance}{astDistance}: Calculate the distance between two points in a Frame
-
-         \sstitem
-         \htmlref{astFindFrame}{astFindFrame}: Find a coordinate system with specified characteristics
-
-         \sstitem
-         \htmlref{astFormat}{astFormat}: Format a coordinate value for a Frame axis
-
-         \sstitem
-         \htmlref{astGetActiveUnit}{astGetActiveUnit}: Determines how the Unit attribute will be used
-
-         \sstitem
-         \htmlref{astIntersect}{astIntersect}: Find the intersection between two geodesic curves
-
-         \sstitem
-         \htmlref{astMatchAxes}{astMatchAxes}: Find any corresponding axes in two Frames
-
-         \sstitem
-         \htmlref{astNorm}{astNorm}: Normalise a set of Frame coordinates
-
-         \sstitem
-         \htmlref{astOffset}{astOffset}: Calculate an offset along a geodesic curve
-
-         \sstitem
-         \htmlref{astOffset2}{astOffset2}: Calculate an offset along a geodesic curve in a 2D Frame
-
-         \sstitem
-         \htmlref{astPermAxes}{astPermAxes}: Permute the order of a Frame's axes
-
-         \sstitem
-         \htmlref{astPickAxes}{astPickAxes}: Create a new Frame by picking axes from an existing one
-
-         \sstitem
-         \htmlref{astResolve}{astResolve}: Resolve a vector into two orthogonal components
-
-         \sstitem
-         \htmlref{astSetActiveUnit}{astSetActiveUnit}: Specify how the Unit attribute should be used
-
-         \sstitem
-         \htmlref{astUnformat}{astUnformat}: Read a formatted coordinate value for a Frame axis
-      }
-   }
-}
-\sstroutine{
-   FrameSet\sstlabel{FrameSet}
-}{
-   Set of inter-related coordinate systems
-}{
-   \sstdescription{
-      A FrameSet consists of a set of one or more Frames (which
-      describe coordinate systems), connected together by Mappings
-      (which describe how the coordinate systems are inter-related). A
-      FrameSet makes it possible to obtain a \htmlref{Mapping}{Mapping} between any pair
-      of these Frames (i.e. to convert between any of the coordinate
-      systems which it describes).  The individual Frames are
-      identified within the FrameSet by an integer index, with Frames
-      being numbered consecutively from one as they are added to the
-      FrameSet.
-
-      Every FrameSet has a {\tt{"}}base{\tt{"}} \htmlref{Frame}{Frame} and a {\tt{"}}current{\tt{"}} Frame (which
-      are allowed to be the same). Any of the Frames may be nominated
-      to hold these positions, and the choice is determined by the
-      values of the FrameSet's \htmlref{Base}{Base} and \htmlref{Current}{Current} attributes, which hold
-      the indices of the relevant Frames.  By default, the first Frame
-      added to a FrameSet is its base Frame, and the last one added is
-      its current Frame.
-
-      The base Frame describes the {\tt{"}}native{\tt{"}} coordinate system of
-      whatever the FrameSet is used to calibrate (e.g. the pixel
-      coordinates of an image) and the current Frame describes the
-      {\tt{"}}apparent{\tt{"}} coordinate system in which it should be viewed
-      (e.g. displayed, etc.). Any further Frames represent a library
-      of alternative coordinate systems, which may be selected by
-      making them current.
-
-      When a FrameSet is used in a context that requires a Frame,
-      (e.g. obtaining its \htmlref{Title}{Title} value, or number of axes), the current
-      Frame is used. A FrameSet may therefore be used in place of its
-      current Frame in most situations.
-
-      When a FrameSet is used in a context that requires a Mapping,
-      the Mapping used is the one between its base Frame and its
-      current Frame. Thus, a FrameSet may be used to convert {\tt{"}}native{\tt{"}}
-      coordinates into {\tt{"}}apparent{\tt{"}} ones, and vice versa. Like any
-      Mapping, a FrameSet may also be inverted (see \htmlref{astInvert}{astInvert}), which
-      has the effect of interchanging its base and current Frames and
-      hence of reversing the Mapping between them.
-
-      Regions may be added into a FrameSet (since a \htmlref{Region}{Region} is a type of
-      Frame), either explicitly or as components within CmpFrames. In this
-      case the Mapping between a pair of Frames within a FrameSet will
-      include the effects of the clipping produced by any Regions included
-      in the path between the Frames.
-   }
-   \sstconstructor{
-      \htmlref{astFrameSet}{astFrameSet}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The FrameSet class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      FrameSet also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Base}{Base}: FrameSet base Frame index
-
-         \sstitem
-         \htmlref{Current}{Current}: FrameSet current Frame index
-
-         \sstitem
-         \htmlref{Nframe}{Nframe}: Number of Frames in a FrameSet
-
-      }
-      Every FrameSet also inherits any further attributes that belong
-      to its current Frame, regardless of that Frame's class. (For
-      example, the \htmlref{Equinox}{Equinox} attribute, defined by the \htmlref{SkyFrame}{SkyFrame} class, is
-      inherited by any FrameSet which has a SkyFrame as its current
-      Frame.) The set of attributes belonging to a FrameSet may therefore
-      change when a new current Frame is selected.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Frames, the
-      following functions may also be applied to all FrameSets:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astAddFrame}{astAddFrame}: Add a Frame to a FrameSet to define a new coordinate
-         system
-
-         \sstitem
-         \htmlref{astGetFrame}{astGetFrame}: Obtain a pointer to a specified Frame in a FrameSet
-
-         \sstitem
-         \htmlref{astGetMapping}{astGetMapping}: Obtain a Mapping between two Frames in a FrameSet
-
-         \sstitem
-         \htmlref{astRemapFrame}{astRemapFrame}: Modify a Frame's relationship to the other Frames in a
-         FrameSet
-
-         \sstitem
-         \htmlref{astRemoveFrame}{astRemoveFrame}: Remove a Frame from a FrameSet
-      }
-   }
-}
-\sstroutine{
-   GrismMap\sstlabel{GrismMap}
-}{
-   Transform 1-dimensional coordinates using a grism dispersion equation
-}{
-   \sstdescription{
-      A GrismMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates using the spectral dispersion equation
-      described in FITS-WCS paper III {\tt{"}}Representation of spectral
-      coordinates in FITS{\tt{"}}. This describes the dispersion produced by
-      gratings, prisms and grisms.
-
-      When initially created, the forward transformation of a GrismMap
-      transforms input {\tt{"}}grism parameter{\tt{"}} values into output wavelength
-      values. The {\tt{"}}grism parameter{\tt{"}} is a dimensionless value which is
-      linearly related to position on the detector. It is defined in FITS-WCS
-      paper III as {\tt{"}}the offset on the detector from the point of intersection
-      of the camera axis, measured in units of the effective local length{\tt{"}}.
-      The units in which wavelength values are expected or returned is
-      determined by the values supplied for the \htmlref{GrismWaveR}{GrismWaveR}, \htmlref{GrismNRP}{GrismNRP} and
-      \htmlref{GrismG}{GrismG} attribute: whatever units are used for these attributes will
-      also be used for the wavelength values.
-   }
-   \sstconstructor{
-      \htmlref{astGrismMap}{astGrismMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The GrismMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      GrismMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{GrismNR}{GrismNR}: The refractive index at the reference wavelength
-
-         \sstitem
-         \htmlref{GrismNRP}{GrismNRP}: Rate of change of refractive index with wavelength
-
-         \sstitem
-         \htmlref{GrismWaveR}{GrismWaveR}: The reference wavelength
-
-         \sstitem
-         \htmlref{GrismAlpha}{GrismAlpha}: The angle of incidence of the incoming light
-
-         \sstitem
-         \htmlref{GrismG}{GrismG}: The grating ruling density
-
-         \sstitem
-         \htmlref{GrismM}{GrismM}: The interference order
-
-         \sstitem
-         \htmlref{GrismEps}{GrismEps}: The angle between the normal and the dispersion plane
-
-         \sstitem
-         \htmlref{GrismTheta}{GrismTheta}: Angle between normal to detector plane and reference ray
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The GrismMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Interval\sstlabel{Interval}
-}{
-   A region representing an interval on one or more axes of a Frame
-}{
-   \sstdescription{
-      The Interval class implements a \htmlref{Region}{Region} which represents upper
-      and/or lower limits on one or more axes of a \htmlref{Frame}{Frame}. For a point to
-      be within the region represented by the Interval, the point must
-      satisfy all the restrictions placed on all the axes. The point is
-      outside the region if it fails to satisfy any one of the restrictions.
-      Each axis may have either an upper limit, a lower limit, both or
-      neither. If both limits are supplied but are in reverse order (so
-      that the lower limit is greater than the upper limit), then the
-      interval is an excluded interval, rather than an included interval.
-
-      Note, The Interval class makes no allowances for cyclic nature of
-      some coordinate systems (such as \htmlref{SkyFrame}{SkyFrame} coordinates). A \htmlref{Box}{Box}
-      should usually be used in these cases since this requires the user
-      to think about suitable upper and lower limits,
-   }
-   \sstconstructor{
-      \htmlref{astInterval}{astInterval}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Interval class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Interval class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The Interval class does not define any new functions beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   IntraMap\sstlabel{IntraMap}
-}{
-   Map points using a private transformation function
-}{
-   \sstdescription{
-      The IntraMap class provides a specialised form of \htmlref{Mapping}{Mapping} which
-      encapsulates a privately-defined coordinate transformation
-      other AST Mapping. This allows you to create Mappings that
-      perform any conceivable coordinate transformation.
-
-      However, an IntraMap is intended for use within a single program
-      or a private suite of software, where all programs have access
-      to the same coordinate transformation functions (i.e. can be
-      linked against them). IntraMaps should not normally be stored in
-      datasets which may be exported for processing by other software,
-      since that software will not have the necessary transformation
-      functions available, resulting in an error.
-
-      You must register any coordinate transformation functions to be
-      used using \htmlref{astIntraReg}{astIntraReg} before creating an IntraMap.
-   }
-   \sstconstructor{
-      \htmlref{astIntraMap}{astIntraMap} (also see astIntraReg)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The IntraMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      IntraMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{IntraFlag}{IntraFlag}: IntraMap identification string
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The IntraMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   KeyMap\sstlabel{KeyMap}
-}{
-   Store a set of key/value pairs
-}{
-   \sstdescription{
-      The KeyMap class is used to store a set of values with associated keys
-      which identify the values. The keys are strings (case-sensitive,
-      trailing spaces are ignored), and the data type of the values can be
-      integer, floating point,
-      void pointer,
-      character string or AST \htmlref{Object}{Object} pointer. Each
-      value can be a scalar or a one-dimensional vector. A KeyMap is
-      conceptually similar to a \htmlref{Mapping}{Mapping} in that a KeyMap transforms an
-      input into an output - the input is the key, and the output is the
-      value associated with the key. However, this is only a conceptual
-      similarity, and it should be noted that the KeyMap class inherits from
-      the Object class rather than the Mapping class. The methods of the
-      Mapping class cannot be used with a KeyMap.
-   }
-   \sstconstructor{
-      \htmlref{astKeyMap}{astKeyMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The KeyMap class inherits from the Object class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Objects, every
-      KeyMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{KeyError}{KeyError}: \htmlref{Report}{Report} an error if the requested key does not exist?
-
-         \sstitem
-         \htmlref{SizeGuess}{SizeGuess}: The expected size of the KeyMap.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Objects, the
-      following functions may also be applied to all KeyMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astMapGet0$<$X$>$}{astMapGet0X}: Get a named scalar entry from a KeyMap
-
-         \sstitem
-         \htmlref{astMapGet1$<$X$>$}{astMapGet1X}: Get a named vector entry from a KeyMap
-
-         \sstitem
-         \htmlref{astMapGetElem$<$X$>$}{astMapGetElemX}: Get an element of a named vector entry from a KeyMap
-
-         \sstitem
-         \htmlref{astMapHasKey}{astMapHasKey}: Does the KeyMap contain a named entry?
-
-         \sstitem
-         \htmlref{astMapKey}{astMapKey}: Return the key name at a given index in the KeyMap
-
-         \sstitem
-         \htmlref{astMapLenC}{astMapLenC}: Get the length of a named character entry in a KeyMap
-
-         \sstitem
-         \htmlref{astMapLength}{astMapLength}: Get the length of a named entry in a KeyMap
-
-         \sstitem
-         \htmlref{astMapPut0$<$X$>$}{astMapPut0X}: Add a new scalar entry to a KeyMap
-
-         \sstitem
-         \htmlref{astMapPut1$<$X$>$}{astMapPut1X}: Add a new vector entry to a KeyMap
-
-         \sstitem
-         \htmlref{astMapRemove}{astMapRemove}: Removed a named entry from a KeyMap
-
-         \sstitem
-         \htmlref{astMapSize}{astMapSize}: Get the number of entries in a KeyMap
-
-         \sstitem
-         \htmlref{astMapType}{astMapType}: Return the data type of a named entry in a map.
-      }
-   }
-}
-\sstroutine{
-   LutMap\sstlabel{LutMap}
-}{
-   Transform 1-dimensional coordinates using a lookup table
-}{
-   \sstdescription{
-      A LutMap is a specialised form of \htmlref{Mapping}{Mapping} which transforms
-      1-dimensional coordinates by using linear interpolation in a
-      lookup table.
-
-      Each input coordinate value is first scaled to give the index of
-      an entry in the table by subtracting a starting value (the input
-      coordinate corresponding to the first table entry) and dividing
-      by an increment (the difference in input coordinate value
-      between adjacent table entries).
-
-      The resulting index will usually contain a fractional part, so
-      the output coordinate value is then generated by interpolating
-      linearly between the appropriate entries in the table. If the
-      index lies outside the range of the table, linear extrapolation
-      is used based on the two nearest entries (i.e. the two entries
-      at the start or end of the table, as appropriate). If either of the
-      entries used for the interplation has a value of AST\_\_BAD, then the
-      interpolated value is returned as AST\_\_BAD.
-
-      If the lookup table entries increase or decrease monotonically (and
-      if the table contains no AST\_\_BAD values), then the inverse
-      transformation may also be performed.
-   }
-   \sstconstructor{
-      \htmlref{astLutMap}{astLutMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The LutMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      LutMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{LutInterp}{LutInterp}: The interpolation method to use between table entries.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The LutMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Mapping\sstlabel{Mapping}
-}{
-   Inter-relate two coordinate systems
-}{
-   \sstdescription{
-      This class provides the basic facilities for transforming a set
-      of coordinates (representing {\tt{"}}input{\tt{"}} points) to give a new set
-      of coordinates (representing {\tt{"}}output{\tt{"}} points).  It is used to
-      describe the relationship which exists between two different
-      coordinate systems and to implement operations which make use of
-      this (such as transforming coordinates and resampling grids of
-      data).  However, the Mapping class does not have a constructor
-      function of its own, as it is simply a container class for a
-      family of specialised Mappings which implement particular types
-      of coordinate transformation.
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Mapping class inherits from the \htmlref{Object}{Object} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Objects, every
-      Mapping also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Invert}{Invert}: Mapping inversion flag
-
-         \sstitem
-         \htmlref{IsLinear}{IsLinear}: Is the Mapping linear?
-
-         \sstitem
-         \htmlref{IsSimple}{IsSimple}: Has the Mapping been simplified?
-
-         \sstitem
-         \htmlref{Nin}{Nin}: Number of input coordinates for a Mapping
-
-         \sstitem
-         \htmlref{Nout}{Nout}: Number of output coordinates for a Mapping
-
-         \sstitem
-         \htmlref{Report}{Report}: Report transformed coordinates?
-
-         \sstitem
-         \htmlref{TranForward}{TranForward}: Forward transformation defined?
-
-         \sstitem
-         \htmlref{TranInverse}{TranInverse}: Inverse transformation defined?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Objects, the
-      following functions may also be applied to all Mappings:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astDecompose}{astDecompose}: Decompose a Mapping into two component Mappings
-
-         \sstitem
-         \htmlref{astTranGrid}{astTranGrid}: Transform a grid of positions
-
-         \sstitem
-         \htmlref{astInvert}{astInvert}: Invert a Mapping
-
-         \sstitem
-         \htmlref{astLinearApprox}{astLinearApprox}: Calculate a linear approximation to a Mapping
-
-         \sstitem
-         \htmlref{astMapBox}{astMapBox}: Find a bounding box for a Mapping
-
-         \sstitem
-         \htmlref{astMapSplit}{astMapSplit}: Split a Mapping up into parallel component Mappings
-
-         \sstitem
-         \htmlref{astRate}{astRate}: Calculate the rate of change of a Mapping output
-
-         \sstitem
-         \htmlref{astRebin$<$X$>$}{astRebinX}: Rebin a region of a data grid
-
-         \sstitem
-         \htmlref{astResample$<$X$>$}{astResampleX}: Resample a region of a data grid
-
-         \sstitem
-         \htmlref{astRemoveRegions}{astRemoveRegions}: Remove any Regions from a Mapping
-
-         \sstitem
-         \htmlref{astSimplify}{astSimplify}: Simplify a Mapping
-
-         \sstitem
-         \htmlref{astTran1}{astTran1}: Transform 1-dimensional coordinates
-
-         \sstitem
-         \htmlref{astTran2}{astTran2}: Transform 2-dimensional coordinates
-
-         \sstitem
-         \htmlref{astTranN}{astTranN}: Transform N-dimensional coordinates
-
-         \sstitem
-         \htmlref{astTranP}{astTranP}: Transform N-dimensional coordinates held in separate arrays
-      }
-   }
-}
-\sstroutine{
-   MathMap\sstlabel{MathMap}
-}{
-   Transform coordinates using mathematical expressions
-}{
-   \sstdescription{
-      A MathMap is a \htmlref{Mapping}{Mapping} which allows you to specify a set of forward
-      and/or inverse transformation functions using arithmetic operations
-      and mathematical functions similar to those available in C. The
-      MathMap interprets these functions at run-time, whenever its forward
-      or inverse transformation is required. Because the functions are not
-      compiled in the normal sense (unlike an \htmlref{IntraMap}{IntraMap}), they may be used to
-      describe coordinate transformations in a transportable manner. A
-      MathMap therefore provides a flexible way of defining new types of
-      Mapping whose descriptions may be stored as part of a dataset and
-      interpreted by other programs.
-   }
-   \sstconstructor{
-      \htmlref{astMathMap}{astMathMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The MathMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      MathMap also has the following attributes:
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Seed}{Seed}: Random number seed
-
-         \sstitem
-         \htmlref{SimpFI}{SimpFI}: Forward-inverse MathMap pairs simplify?
-
-         \sstitem
-         \htmlref{SimpIF}{SimpIF}: Inverse-forward MathMap pairs simplify?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The MathMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   MatrixMap\sstlabel{MatrixMap}
-}{
-   Map coordinates by multiplying by a matrix
-}{
-   \sstdescription{
-      A MatrixMap is form of \htmlref{Mapping}{Mapping} which performs a general linear
-      transformation. Each set of input coordinates, regarded as a
-      column-vector, are pre-multiplied by a matrix (whose elements
-      are specified when the MatrixMap is created) to give a new
-      column-vector containing the output coordinates. If appropriate,
-      the inverse transformation may also be performed.
-   }
-   \sstconstructor{
-      \htmlref{astMatrixMap}{astMatrixMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The MatrixMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The MatrixMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The MatrixMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   NormMap\sstlabel{NormMap}
-}{
-   Normalise coordinates using a supplied Frame
-}{
-   \sstdescription{
-      The NormMap class implements a \htmlref{Mapping}{Mapping} which normalises coordinate
-      values using the
-      \htmlref{astNorm}{astNorm} function
-      of a supplied \htmlref{Frame}{Frame}. The number of inputs and outputs of a NormMap
-      are both equal to the number of axes in the supplied Frame.
-
-      The forward and inverse transformation of a NormMap are both
-      defined but are identical (that is, they do not form a real inverse
-      pair in that the inverse transformation does not undo the
-      normalisation, instead it reapplies it). However, the
-      \htmlref{astSimplify}{astSimplify}
-      function will replace neighbouring pairs of forward and inverse
-      NormMaps by a single \htmlref{UnitMap}{UnitMap}.
-   }
-   \sstconstructor{
-      \htmlref{astNormMap}{astNormMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The NormMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The \htmlref{MatrixMap}{MatrixMap} class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The NormMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   NullRegion\sstlabel{NullRegion}
-}{
-   A boundless region within a Frame
-}{
-   \sstdescription{
-      The NullRegion class implements a \htmlref{Region}{Region} with no bounds within a \htmlref{Frame}{Frame}.
-      If the \htmlref{Negated}{Negated} attribute of a NullRegion is false, the NullRegion
-      represents a Region containing no points. If the Negated attribute of
-      a NullRegion is true, the NullRegion represents an infinite Region
-      (that is, all points in the coordinate system are inside the NullRegion).
-   }
-   \sstconstructor{
-      \htmlref{astNullRegion}{astNullRegion}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The NullRegion class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The NullRegion class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The NullRegion class does not define any new functions beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   Object\sstlabel{Object}
-}{
-   Base class for all AST Objects
-}{
-   \sstdescription{
-      This class is the base class from which all other classes in the
-      AST library are derived. It provides all the basic Object
-      behaviour and Object manipulation facilities required throughout
-      the library. There is no Object constructor, however, as Objects
-      on their own are not useful.
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Object base class does not inherit from any other class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      All Objects have the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Class}{Class}: Object class name
-
-         \sstitem
-         \htmlref{ID}{ID}: Object identification string
-
-         \sstitem
-         \htmlref{Ident}{Ident}: Permanent Object identification string
-
-         \sstitem
-         \htmlref{Nobject}{Nobject}: Number of Objects in class
-
-         \sstitem
-         \htmlref{ObjSize}{ObjSize}: The in-memory size of the Object in bytes
-
-         \sstitem
-         \htmlref{RefCount}{RefCount}: Count of active Object pointers
-
-         \sstitem
-         \htmlref{UseDefs}{UseDefs}: Allow use of default values for Object attributes?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The following functions may be applied to all Objects:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astAnnul}{astAnnul}: Annul a pointer to an Object
-
-         \sstitem
-         \htmlref{astBegin}{astBegin}: Begin a new AST context
-
-         \sstitem
-         \htmlref{astClear}{astClear}: Clear attribute values for an Object
-
-         \sstitem
-         \htmlref{astClone}{astClone}: Clone a pointer to an Object
-
-         \sstitem
-         \htmlref{astCopy}{astCopy}: Copy an Object
-
-         \sstitem
-         \htmlref{astDelete}{astDelete}: Delete an Object
-
-         \sstitem
-         \htmlref{astEnd}{astEnd}: End an AST context
-
-         \sstitem
-         \htmlref{astEscapes}{astEscapes}: Control whether graphical escape sequences are removed
-
-         \sstitem
-         \htmlref{astExempt}{astExempt}: Exempt an Object pointer from AST context handling
-
-         \sstitem
-         \htmlref{astExport}{astExport}: Export an Object pointer to an outer context
-
-         \sstitem
-         \htmlref{astGet$<$X$>$}{astGetX}: Get an attribute value for an Object
-
-         \sstitem
-         \htmlref{astImport}{astImport}: Import an Object pointer to the current context
-
-         \sstitem
-         \htmlref{astIsA$<$Class$>$}{astIsAClass}: Test class membership
-
-         \sstitem
-         \htmlref{astLock}{astLock}: Lock an Object for use by the calling thread
-
-         \sstitem
-         \htmlref{astSame}{astSame}: Do two AST pointers refer to the same Object?
-
-         \sstitem
-         \htmlref{astSet}{astSet}: Set attribute values for an Object
-
-         \sstitem
-         \htmlref{astSet$<$X$>$}{astSetX}: Set an attribute value for an Object
-
-         \sstitem
-         \htmlref{astShow}{astShow}: Display a textual representation of an Object on standard
-         output
-
-         \sstitem
-         \htmlref{astTest}{astTest}: Test if an attribute value is set for an Object
-
-         \sstitem
-         \htmlref{astTune}{astTune}: Set or get an AST tuning parameter
-
-         \sstitem
-         \htmlref{astUnlock}{astUnlock}: Unlock an Object for use by other threads
-
-         \sstitem
-         \htmlref{astVersion}{astVersion}: Return the verson of the AST library being used.
-      }
-   }
-}
-\sstroutine{
-   PcdMap\sstlabel{PcdMap}
-}{
-   Apply 2-dimensional pincushion/barrel distortion
-}{
-   \sstdescription{
-      A PcdMap is a non-linear \htmlref{Mapping}{Mapping} which transforms 2-dimensional
-      positions to correct for the radial distortion introduced by some
-      cameras and telescopes. This can take the form either of pincushion
-      or barrel distortion, and is characterized by a single distortion
-      coefficient.
-
-      A PcdMap is specified by giving this distortion coefficient and the
-      coordinates of the centre of the radial distortion. The forward
-      transformation of a PcdMap applies the distortion:
-
-         RD = R $*$ ( 1 $+$ C $*$ R $*$ R )
-
-      where R is the undistorted radial distance from the distortion
-      centre (specified by attribute PcdCen), RD is the radial distance
-      from the same centre in the presence of distortion, and C is the
-      distortion coefficient (given by attribute \htmlref{Disco}{Disco}).
-
-      The inverse transformation of a PcdMap removes the distortion
-      produced by the forward transformation. The expression used to derive
-      R from RD is an approximate inverse of the expression above.
-   }
-   \sstconstructor{
-      \htmlref{astPcdMap}{astPcdMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PcdMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      PcdMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Disco}{Disco}: PcdMap pincushion/barrel distortion coefficient
-
-         \sstitem
-         \htmlref{PcdCen(axis)}{PcdCenaxis}: Centre coordinates of pincushion/barrel distortion
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PcdMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   PermMap\sstlabel{PermMap}
-}{
-   Coordinate permutation Mapping
-}{
-   \sstdescription{
-      A PermMap is a \htmlref{Mapping}{Mapping} which permutes the order of coordinates,
-      and possibly also changes the number of coordinates, between its
-      input and output.
-
-      In addition to permuting the coordinate order, a PermMap may
-      also assign constant values to coordinates. This is useful when
-      the number of coordinates is being increased as it allows fixed
-      values to be assigned to any new ones.
-   }
-   \sstconstructor{
-      \htmlref{astPermMap}{astPermMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PermMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The PermMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PermMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Plot\sstlabel{Plot}
-}{
-   Provide facilities for 2D graphical output
-}{
-   \sstdescription{
-      This class provides facilities for producing 2D graphical output.
-      A Plot is a specialised form of \htmlref{FrameSet}{FrameSet}, in which the base
-      \htmlref{Frame}{Frame} describes a {\tt{"}}graphical{\tt{"}} coordinate system and is
-      associated with a rectangular plotting area in the underlying
-      graphics system. This plotting area is where graphical output
-      appears. It is defined when the Plot is created.
-
-      The current Frame of a Plot describes a {\tt{"}}physical{\tt{"}} coordinate
-      system, which is the coordinate system in which plotting
-      operations are specified. The results of each plotting operation
-      are automatically transformed into graphical coordinates so as
-      to appear in the plotting area (subject to any clipping which
-      may be in effect).
-
-      Because the \htmlref{Mapping}{Mapping} between physical and graphical coordinates
-      may often be non-linear, or even discontinuous, most plotting
-      does not result in simple straight lines. The basic plotting
-      element is therefore not a straight line, but a geodesic curve
-      (see \htmlref{astCurve}{astCurve}, \htmlref{astGenCurve}{astGenCurve} and \htmlref{astPolyCurve}{astPolyCurve}). A Plot also provides facilities for
-      drawing markers or symbols (\htmlref{astMark}{astMark}), text (\htmlref{astText}{astText}) and grid lines
-      (\htmlref{astGridLine}{astGridLine}). It is also possible to draw curvilinear axes with
-      optional coordinate grids (\htmlref{astGrid}{astGrid}).
-      A range of Plot attributes is available to allow precise control
-      over the appearance of graphical output produced by these
-      functions.
-
-      You may select different physical coordinate systems in which to
-      plot (including the native graphical coordinate system itself)
-      by selecting different Frames as the current Frame of a Plot,
-      using its \htmlref{Current}{Current} attribute.  You may also set up clipping (see
-      \htmlref{astClip}{astClip}) to limit the extent of any plotting you perform, and
-      this may be done in any of the coordinate systems associated
-      with the Plot, not necessarily the one you are plotting in.
-
-      Like any FrameSet, a Plot may also be used as a Frame. In this
-      case, it behaves like its current Frame, which describes the
-      physical coordinate system.
-
-      When used as a Mapping, a Plot describes the inter-relation
-      between graphical coordinates (its base Frame) and physical
-      coordinates (its current Frame).  It differs from a normal
-      FrameSet, however, in that an attempt to transform points which
-      lie in clipped areas of the Plot will result in bad coordinate
-      values (AST\_\_BAD).
-   }
-   \sstconstructor{
-      \htmlref{astPlot}{astPlot}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Plot class inherits from the FrameSet class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all FrameSets, every
-      Plot also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         Abbrev: Abbreviate leading fields?
-
-         \sstitem
-         \htmlref{Border}{Border}: Draw a border around valid regions of a Plot?
-
-         \sstitem
-         \htmlref{Clip}{Clip}: Clip lines and/or markers at the Plot boundary?
-
-         \sstitem
-         \htmlref{ClipOp}{ClipOp}: Combine Plot clipping limits using a boolean OR?
-
-         \sstitem
-         \htmlref{Colour(element)}{Colourelement}: Colour index for a Plot element
-
-         \sstitem
-         \htmlref{DrawAxes(axis)}{DrawAxesaxis}: Draw axes for a Plot?
-
-         \sstitem
-         \htmlref{DrawTitle}{DrawTitle}: Draw a title for a Plot?
-
-         \sstitem
-         \htmlref{Escape}{Escape}: Allow changes of character attributes within strings?
-
-         \sstitem
-         \htmlref{Edge(axis)}{Edgeaxis}: Which edges to label in a Plot
-
-         \sstitem
-         \htmlref{Font(element)}{Fontelement}: Character font for a Plot element
-
-         \sstitem
-         \htmlref{Gap(axis)}{Gapaxis}: \htmlref{Interval}{Interval} between linearly spaced major axis values
-
-         \sstitem
-         \htmlref{Grf}{Grf}: Select the graphics interface to use.
-
-         \sstitem
-         \htmlref{Grid}{Grid}: Draw grid lines for a Plot?
-
-         \sstitem
-         \htmlref{Invisible}{Invisible}: Draw graphics in invisible ink?
-
-         \sstitem
-         \htmlref{LabelAt(axis)}{LabelAtaxis}: Where to place numerical labels for a Plot
-
-         \sstitem
-         \htmlref{LabelUnits(axis)}{LabelUnitsaxis}: Use axis unit descriptions in a Plot?
-
-         \sstitem
-         \htmlref{LabelUp(axis)}{LabelUpaxis}: Draw numerical Plot labels upright?
-
-         \sstitem
-         \htmlref{Labelling}{Labelling}: Label and tick placement option for a Plot
-
-         \sstitem
-         \htmlref{LogGap(axis)}{LogGapaxis}: Interval between logarithmically spaced major axis values
-
-         \sstitem
-         \htmlref{LogPlot(axis)}{LogPlotaxis}: Map the plot onto the screen logarithmically?
-
-         \sstitem
-         \htmlref{LogTicks(axis)}{LogTicksaxis}: Space the major tick marks logarithmically?
-
-         \sstitem
-         \htmlref{MajTickLen(axis)}{MajTickLenaxis}: Length of major tick marks for a Plot
-
-         \sstitem
-         \htmlref{MinTickLen(axis)}{MinTickLenaxis}: Length of minor tick marks for a Plot
-
-         \sstitem
-         \htmlref{MinTick(axis)}{MinTickaxis}: Density of minor tick marks for a Plot
-
-         \sstitem
-         \htmlref{NumLab(axis)}{NumLabaxis}: Draw numerical axis labels for a Plot?
-
-         \sstitem
-         \htmlref{NumLabGap(axis)}{NumLabGapaxis}: Spacing of numerical axis labels for a Plot
-
-         \sstitem
-         \htmlref{Size(element)}{Sizeelement}: Character size for a Plot element
-
-         \sstitem
-         \htmlref{Style(element)}{Styleelement}: Line style for a Plot element
-
-         \sstitem
-         \htmlref{TextLab(axis)}{TextLabaxis}: Draw descriptive axis labels for a Plot?
-
-         \sstitem
-         \htmlref{TextLabGap(axis)}{TextLabGapaxis}: Spacing of descriptive axis labels for a Plot
-
-         \sstitem
-         \htmlref{TickAll}{TickAll}: Draw tick marks on all edges of a Plot?
-
-         \sstitem
-         \htmlref{TitleGap}{TitleGap}: Vertical spacing for a Plot title
-
-         \sstitem
-         \htmlref{Tol}{Tol}: Plotting tolerance
-
-         \sstitem
-         \htmlref{Width(element)}{Widthelement}: Line width for a Plot element
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all FrameSets, the
-      following functions may also be applied to all Plots:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astBorder}{astBorder}: Draw a border around valid regions of a Plot
-
-         \sstitem
-         \htmlref{astBoundingBox}{astBoundingBox}: Returns a bounding box for previously drawn graphics
-
-         \sstitem
-         \htmlref{astClip}{astClip}: Set up or remove clipping for a Plot
-
-         \sstitem
-         \htmlref{astCurve}{astCurve}: Draw a geodesic curve
-
-         \sstitem
-         \htmlref{astGenCurve}{astGenCurve}: Draw a generalized curve
-
-         \sstitem
-         \htmlref{astGetGrfContext}{astGetGrfContext}: Get the graphics context for a Plot
-
-         \sstitem
-         \htmlref{astGrfPop}{astGrfPop}: Retrieve previously saved graphics functions
-
-         \sstitem
-         \htmlref{astGrfPush}{astGrfPush}: Save the current graphics functions
-
-         \sstitem
-         \htmlref{astGrfSet}{astGrfSet}: Register a graphics routine for use by a Plot
-
-         \sstitem
-         \htmlref{astGrid}{astGrid}: Draw a set of labelled coordinate axes
-
-         \sstitem
-         \htmlref{astGridLine}{astGridLine}: Draw a grid line (or axis) for a Plot
-
-         \sstitem
-         \htmlref{astMark}{astMark}: Draw a set of markers for a Plot
-
-         \sstitem
-         \htmlref{astPolyCurve}{astPolyCurve}: Draw a series of connected geodesic curves
-
-         \sstitem
-         \htmlref{astText}{astText}: Draw a text string for a Plot
-      }
-   }
-   \sstdiytopic{
-      Graphical Elements
-   }{
-      The colour index, character font, character size, line style and
-      line width used for plotting can be set independently for
-      various elements of the graphical output produced by a Plot.
-      The different graphical elements are identified by appending the
-      strings listed below as subscripts to the Plot attributes
-      Colour(element), Font(element), Size(element), Style(element)
-      and Width(element). These strings are case-insensitive and
-      unambiguous abbreviations may be used. Elements of the graphical
-      output which relate to individual axes can be referred to either
-      independently (e.g. {\tt{"}}(Grid1){\tt{"}} and {\tt{"}}(Grid2){\tt{"}} ) or together (e.g.
-      {\tt{"}}(Grid){\tt{"}}):
-
-      \sstitemlist{
-
-         \sstitem
-         Axes: \htmlref{Axis}{Axis} lines drawn through tick marks using astGrid
-
-         \sstitem
-         Axis1: Axis line drawn through tick marks on axis 1 using astGrid
-
-         \sstitem
-         Axis2: Axis line drawn through tick marks on axis 2 using astGrid
-
-         \sstitem
-         Border: The Plot border drawn using astBorder or astGrid
-
-         \sstitem
-         Curves: Geodesic curves drawn using astCurve, astGenCurve or astPolyCurve
-
-         \sstitem
-         Grid: Grid lines drawn using astGridLine or astGrid
-
-         \sstitem
-         Grid1: Grid lines which cross axis 1, drawn using astGridLine or astGrid
-
-         \sstitem
-         Grid2: Grid lines which cross axis 2, drawn using astGridLine or astGrid
-
-         \sstitem
-         Markers: Graphical markers (symbols) drawn using astMark
-
-         \sstitem
-         NumLab: Numerical axis labels drawn using astGrid
-
-         \sstitem
-         NumLab1: Numerical labels for axis 1 drawn using astGrid
-
-         \sstitem
-         NumLab2: Numerical labels for axis 2 drawn using astGrid
-
-         \sstitem
-         Strings: Text strings drawn using astText
-
-         \sstitem
-         TextLab: Descriptive axis labels drawn using astGrid
-
-         \sstitem
-         TextLab1: Descriptive label for axis 1 drawn using astGrid
-
-         \sstitem
-         TextLab2: Descriptive label for axis 2 drawn using astGrid
-
-         \sstitem
-         Ticks: Tick marks (both major and minor) drawn using astGrid
-
-         \sstitem
-         Ticks1: Tick marks (both major and minor) for axis 1 drawn using astGrid
-
-         \sstitem
-         Ticks2: Tick marks (both major and minor) for axis 2 drawn using astGrid
-
-         \sstitem
-         \htmlref{Title}{Title}: The Plot title drawn using astGrid
-      }
-   }
-}
-\sstroutine{
-   Plot3D\sstlabel{Plot3D}
-}{
-   Provide facilities for 2D graphical output
-}{
-   \sstdescription{
-      A Plot3D is a specialised form of \htmlref{Plot}{Plot} that provides facilities
-      for producing 3D graphical output, including fully annotated 3D
-      coordinate grids. The base \htmlref{Frame}{Frame} in a Plot3D describes a 3-dimensional
-      {\tt{"}}graphical{\tt{"}} coordinate system. The axes of this coordinate system are
-      assumed to be right-handed (that is, if X appears horizontally to the
-      right and Y vertically upwards, then Z is out of the screen towards
-      the viewer), and are assumed to be equally scaled (that is, the same
-      units are used to measure positions on each of the 3 axes). The upper
-      and lower bounds of a volume within this graphical coordinate system
-      is specified when the Plot3D is created, and all subsequent graphics
-      are {\tt{"}}drawn{\tt{"}} in this volume.
-
-      The Plot3D class does not itself include any ability to draw on a
-      graphics device. Instead it calls upon function in an externally
-      supplied module (the {\tt{"}}grf3d{\tt{"}} module) to do the required drawing.
-      A module should be written that implements the functions of the
-      grf3d interface using the facilities of a specific graphics system
-      This module should then be linked into the application so that the
-      Plot3D class can use its functions (see the description of the
-      \htmlref{ast\_link}{ast_link} commands for details of how to do this). The grf3d interface
-      defines a few simple functions for drawing primitives such as straight
-      lines, markers and character strings. These functions all accept
-      positions in the 3D graphics coordinate system (the base Frame of the
-      Plot3D), and so the grf3d module must also manage the projection of
-      these 3D coordinates onto the 2D viewing surface, including the choice
-      of {\tt{"}}eye{\tt{"}}/{\tt{"}}camera{\tt{"}} position, direction of viewing, etc. The AST
-      library includes a sample implementation of the grf3d interface
-      based on the PGPLOT graphics system (see file grf3d\_pgplot.c). This
-      implementation also serves to document the grf3d interface itself and
-      should be consulted for details before writing a new implementation.
-
-      The current Frame of a Plot3D describes a {\tt{"}}physical{\tt{"}} 3-dimensional
-      coordinate system, which is the coordinate system in which plotting
-      operations are specified when invoking the methods of the Plot3D
-      class. The results of each plotting operation are automatically
-      transformed into 3D graphical coordinates before being plotted
-      using the facilities of the grf3d module linked into the application.
-
-      You may select different physical coordinate systems in which to
-      plot (including the native graphical coordinate system itself)
-      by selecting different Frames as the current Frame of a Plot3D,
-      using its \htmlref{Current}{Current} attribute.
-
-      Like any \htmlref{FrameSet}{FrameSet}, a Plot3D may also be used as a Frame. In this
-      case, it behaves like its current Frame, which describes the
-      physical coordinate system.
-
-      When used as a \htmlref{Mapping}{Mapping}, a Plot3D describes the inter-relation
-      between 3D graphical coordinates (its base Frame) and 3D physical
-      coordinates (its current Frame).
-
-      Although the Plot3D class inherits from the Plot class, several of
-      the facilities of the Plot class are not available in the Plot3D
-      class, and an error will be reported if any attempt is made to use
-      them. Specifically, the Plot3D class does not support clipping
-      using the
-      \htmlref{astClip}{astClip} function.
-      Nor does it support the specification of graphics primitive functions
-      at run-time using the
-      \htmlref{astGrfSet}{astGrfSet}, \htmlref{astGrfPop}{astGrfPop}, \htmlref{astGrfPush}{astGrfPush} and \htmlref{astGetGrfContext}{astGetGrfContext} functions.
-   }
-   \sstconstructor{
-      \htmlref{astPlot3D}{astPlot3D}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Plot3D class inherits from the Plot class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Plots, every
-      Plot3D also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         Norm: Normal vector defining the 2D plane used for text and markers
-
-         \sstitem
-         \htmlref{RootCorner}{RootCorner}: Specifies which edges of the 3D box should be annotated.
-
-      }
-      Some attributes of the Plot class refer to specific physical
-      coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic
-      Plot, the axis index must be 1 or 2, but for a Plot3D the axis index
-      can be 1, 2 or 3.
-
-      Certain Plot attributes are ignored by the Plot3D class (e.g. Edge,
-      \htmlref{DrawTitle}{DrawTitle}, \htmlref{TitleGap}{TitleGap}, etc). Consult the Plot attribute documentation
-      for details.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-       The Plot3D class does not define any new functions beyond those
-       which are applicable to all Plots. Note, however, that the
-       following methods inherited from the Plot class cannot be used with
-       a Plot3D and will report an error if called:
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astBoundingBox}{astBoundingBox}, astClip, \htmlref{astCurve}{astCurve}, \htmlref{astGenCurve}{astGenCurve},
-         astGetGrfContext, astGrfPop, astGrfPush, astGrfSet, \htmlref{astGridLine}{astGridLine},
-         \htmlref{astPolyCurve}{astPolyCurve}.
-      }
-   }
-}
-\sstroutine{
-   PointList\sstlabel{PointList}
-}{
-   A collection of points in a Frame
-}{
-   \sstdescription{
-      The PointList class implements a \htmlref{Region}{Region} which represents a collection
-      of points in a \htmlref{Frame}{Frame}.
-   }
-   \sstconstructor{
-      \htmlref{astPointList}{astPointList}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PointList class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Regions, every
-      PointList also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{ListSize}{ListSize}: The number of positions stored in the PointList
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PointList class does not define any new functions beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   PolyMap\sstlabel{PolyMap}
-}{
-   Map coordinates using polynomial functions
-}{
-   \sstdescription{
-      A PolyMap is a form of \htmlref{Mapping}{Mapping} which performs a general polynomial
-      transformation.  Each output coordinate is a polynomial function of
-      all the input coordinates. The coefficients are specified separately
-      for each output coordinate. The forward and inverse transformations
-      are defined independantly by separate sets of coefficients.
-   }
-   \sstconstructor{
-      \htmlref{astPolyMap}{astPolyMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The PolyMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The PolyMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The PolyMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Polygon\sstlabel{Polygon}
-}{
-   A polygonal region within a 2-dimensional Frame
-}{
-   \sstdescription{
-      The Polygon class implements a polygonal area, defined by a
-      collection of vertices, within a 2-dimensional \htmlref{Frame}{Frame}. The vertices
-      are connected together by geodesic curves within the encapsulated Frame.
-      For instance, if the encapsulated Frame is a simple Frame then the
-      geodesics will be straight lines, but if the Frame is a \htmlref{SkyFrame}{SkyFrame} then
-      the geodesics will be great circles. Note, the vertices must be
-      supplied in an order such that the inside of the polygon is to the
-      left of the boundary as the vertices are traversed. Supplying them
-      in the reverse order will effectively negate the polygon.
-
-      Within a SkyFrame, neighbouring vertices are always joined using the
-      shortest path. Thus if an edge of 180 degrees or more in length is
-      required, it should be split into section each of which is less
-      than 180 degrees. The closed path joining all the vertices in order
-      will divide the celestial sphere into two disjoint regions. The
-      inside of the polygon is the region which is circled in an
-      anti-clockwise manner (when viewed from the inside of the celestial
-      sphere) when moving through the list of vertices in the order in
-      which they were supplied when the Polygon was created (i.e. the
-      inside is to the left of the boundary when moving through the
-      vertices in the order supplied).
-   }
-   \sstconstructor{
-      \htmlref{astPolygon}{astPolygon}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Polygon class inherits from the \htmlref{Region}{Region} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Polygon class does not define any new attributes beyond
-      those which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Regions, the
-      following functions may also be applied to all Polygons:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astDownsize}{astDownsize}: Reduce the number of vertices in a Polygon.
-
-         \sstitem
-         \htmlref{astOutline$<$X$>$}{astOutlineX}: Create a Polygon outlining values in a pixel array
-      }
-   }
-}
-\sstroutine{
-   Prism\sstlabel{Prism}
-}{
-   An extrusion of a region into higher dimensions
-}{
-   \sstdescription{
-      A Prism is a \htmlref{Region}{Region} which represents an extrusion of an existing Region
-      into one or more orthogonal dimensions (specified by another Region).
-      If the Region to be extruded has N axes, and the Region defining the
-      extrusion has M axes, then the resulting Prism will have (M$+$N) axes.
-      A point is inside the Prism if the first N axis values correspond to
-      a point inside the Region being extruded, and the remaining M axis
-      values correspond to a point inside the Region defining the extrusion.
-
-      As an example, a cylinder can be represented by extruding an existing
-      \htmlref{Circle}{Circle}, using an \htmlref{Interval}{Interval} to define the extrusion. Ih this case, the
-      Interval would have a single axis and would specify the upper and
-      lower limits of the cylinder along its length.
-   }
-   \sstconstructor{
-      \htmlref{astPrism}{astPrism}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Prism class inherits from the Region class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The Prism class does not define any new attributes beyond those
-      which are applicable to all Regions.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The Prism class does not define any new functions beyond those
-      which are applicable to all Regions.
-   }
-}
-\sstroutine{
-   RateMap\sstlabel{RateMap}
-}{
-   Mapping which represents differentiation
-}{
-   \sstdescription{
-      A RateMap is a \htmlref{Mapping}{Mapping} which represents a single element of the
-      Jacobian matrix of another Mapping. The Mapping for which the
-      Jacobian is required is specified when the new RateMap is created,
-      and is referred to as the {\tt{"}}encapsulated Mapping{\tt{"}} below.
-
-      The number of inputs to a RateMap is the same as the number of inputs
-      to its encapsulated Mapping. The number of outputs from a RateMap
-      is always one. This one output equals the rate of change of a
-      specified output of the encapsulated Mapping with respect to a
-      specified input of the encapsulated Mapping (the input and output
-      to use are specified when the RateMap is created).
-
-      A RateMap which has not been inverted does not define an inverse
-      transformation. If a RateMap has been inverted then it will define
-      an inverse transformation but not a forward transformation.
-   }
-   \sstconstructor{
-      \htmlref{astRateMap}{astRateMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The RateMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The RateMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The RateMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Region\sstlabel{Region}
-}{
-   Represents a region within a coordinate system
-}{
-   \sstdescription{
-      This class provides the basic facilities for describing a region within
-      a specified coordinate system. However, the Region class does not
-      have a constructor function of its own, as it is simply a container
-      class for a family of specialised sub-classes such as \htmlref{Circle}{Circle}, \htmlref{Box}{Box}, etc,
-      which implement Regions with particular shapes.
-
-      All sub-classes of Region require a \htmlref{Frame}{Frame} to be supplied when the Region
-      is created. This Frame describes the coordinate system in which the
-      Region is defined, and is referred to as the {\tt{"}}encapsulated Frame{\tt{"}} below.
-      Constructors will also typically required one or more positions to be
-      supplied which define the location and extent of the region. These
-      positions must be supplied within the encapsulated Frame.
-
-      The Region class inherits from the Frame class, and so a Region can be
-      supplied where-ever a Frame is expected. In these cases, supplying a
-      Region is equivalent to supplying a reference to its encapsulated Frame.
-      Thus all the methods of the Frame class can be used on the Region class.
-      For instance, the
-      \htmlref{astFormat}{astFormat} function
-      may be used on a Region to format an axis value.
-
-      In addition, since Frame inherits from \htmlref{Mapping}{Mapping}, a Region is also a sort
-      of Mapping. Transforming positions by supplying a Region to one of the
-      astTran$<$X$>$ functions
-      is the way to determine if a given position is inside or outside the
-      Region. When used as a Mapping, most classes of Frame are equivalent to
-      a \htmlref{UnitMap}{UnitMap}. However, the Region class modifies this behaviour so that a
-      Region acts like a UnitMap only for input positions which are within the
-      area represented by the Region. Input positions which are outside the
-      area produce bad output values (i.e. the output values are equal to
-      AST\_\_BAD). This behaviour is the same for both the forward and the
-      inverse transformation. In this sense the {\tt{"}}inverse transformation{\tt{"}}
-      is not a true inverse of the forward transformation, since applying
-      the forward transformation to a point outside the Region, and then
-      applying the inverse transformation results, in a set of AST\_\_BAD axis
-      values rather than the original axis values. If required, the
-      \htmlref{astRemoveRegions}{astRemoveRegions}
-      function can be used to remove the {\tt{"}}masking{\tt{"}} effect of any Regions
-      contained within a compound Mapping or \htmlref{FrameSet}{FrameSet}. It does this by
-      replacing each Region with a UnitMap or equivalent Frame (depending
-      on the context in which the Region is used).
-
-      If the coordinate system represented by the Region is changed (by
-      changing the values of one or more of the attribute which the Region
-      inherits from its encapsulated Frame), the area represented by
-      the Region is mapped into the new coordinate system. For instance, let's
-      say a Circle (a subclass of Region) is created, a \htmlref{SkyFrame}{SkyFrame} being
-      supplied to the constructor so that the Circle describes a circular
-      area on the sky in FK4 equatorial coordinates. Since Region inherits
-      from Frame, the Circle will have a \htmlref{System}{System} attribute and this attribute
-      will be set to {\tt{"}}FK4{\tt{"}}. If the System attribute of the Region is then
-      changed from FK4 to FK5, the circular area represented by the Region
-      will automatically be mapped from the FK4 system into the FK5 system.
-      In general, changing the coordinate system in this way may result in the
-      region changing shape - for instance, a circle may change into an
-      ellipse if the transformation from the old to the new coordinate system
-      is linear but with different scales on each axis. Thus the specific
-      class of a Region cannot be used as a guarantee of the shape in any
-      particular coordinate system. If the
-      \htmlref{astSimplify}{astSimplify} function
-      is used on a Region, it will endeavour to return a new Region of
-      a sub-class which accurately describes the shape in the current
-      coordinate system of the Region (but this may not always be possible).
-
-      It is possible to negate an existing Region so that it represents all
-      areas of the encapsulated Frame except for the area specified when
-      the Region was created.
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Region class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      Region also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Adaptive}{Adaptive}: Should the area adapt to changes in the coordinate system?
-
-         \sstitem
-         \htmlref{Negated}{Negated}: Has the original region been negated?
-
-         \sstitem
-         \htmlref{Closed}{Closed}: Should the boundary be considered to be inside the region?
-
-         \sstitem
-         \htmlref{MeshSize}{MeshSize}: Number of points used to create a mesh covering the Region
-
-         \sstitem
-         \htmlref{FillFactor}{FillFactor}: Fraction of the Region which is of interest
-
-         \sstitem
-         \htmlref{Bounded}{Bounded}: Is the Region bounded?
-
-      }
-      Every Region also inherits any further attributes that belong
-      to the encapsulated Frame, regardless of that Frame's class. (For
-      example, the \htmlref{Equinox}{Equinox} attribute, defined by the SkyFrame class, is
-      inherited by any Region which represents a SkyFrame.)
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Frames, the
-      following functions may also be applied to all Regions:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astGetRegionBounds}{astGetRegionBounds}: Get the bounds of a Region
-
-         \sstitem
-         \htmlref{astGetRegionFrame}{astGetRegionFrame}: Get a copy of the Frame represent by a Region
-
-         \sstitem
-         \htmlref{astGetRegionPoints}{astGetRegionPoints}: Get the positions that define a Region
-
-         \sstitem
-         \htmlref{astGetUnc}{astGetUnc}: Obtain uncertainty information from a Region
-
-         \sstitem
-         \htmlref{astMapRegion}{astMapRegion}: Transform a Region into a new coordinate system
-
-         \sstitem
-         \htmlref{astNegate}{astNegate}: Toggle the value of the Negated attribute
-
-         \sstitem
-         \htmlref{astOverlap}{astOverlap}: Determines the nature of the overlap between two Regions
-
-         \sstitem
-         \htmlref{astMask$<$X$>$}{astMaskX}: Mask a region of a data grid
-
-         \sstitem
-         \htmlref{astSetUnc}{astSetUnc}: Associate a new uncertainty with a Region
-
-         \sstitem
-         \htmlref{astShowMesh}{astShowMesh}: Display a mesh of points on the surface of a Region
-      }
-   }
-}
-\sstroutine{
-   SelectorMap\sstlabel{SelectorMap}
-}{
-   A Mapping that locates positions within one of a set of alternate
-   Regions
-}{
-   \sstdescription{
-      A SelectorMap is a \htmlref{Mapping}{Mapping} that identifies which \htmlref{Region}{Region} contains
-      a given input position.
-
-      A SelectorMap encapsulates a number of Regions that all have the same
-      number of axes and represent the same coordinate \htmlref{Frame}{Frame}. The number of
-      inputs (\htmlref{Nin}{Nin} attribute) of the SelectorMap equals the number of axes
-      spanned by one of the encapsulated Region. All SelectorMaps have only
-      a single output. SelectorMaps do not define an inverse transformation.
-
-      For each input position, the forward transformation of a SelectorMap
-      searches through the encapsulated Regions (in the order supplied when
-      the SelectorMap was created) until a Region is found which contains
-      the input position. The index associated with this Region is
-      returned as the SelectorMap output value (the index value is the
-      position of the Region within the list of Regions supplied when the
-      SelectorMap was created, starting at 1 for the first Region). If an
-      input position is not contained within any Region, a value of zero is
-      returned by the forward transformation.
-
-      If a compound Mapping contains a SelectorMap in series with its own
-      inverse, the combination of the two adjacent SelectorMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{astSimplify}{astSimplify}.
-
-      In practice, SelectorMaps are often used in conjunction with SwitchMaps.
-   }
-   \sstconstructor{
-      \htmlref{astSelectorMap}{astSelectorMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SelectorMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SelectorMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SelectorMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   ShiftMap\sstlabel{ShiftMap}
-}{
-   Add a constant value to each coordinate
-}{
-   \sstdescription{
-      A ShiftMap is a linear \htmlref{Mapping}{Mapping} which shifts each axis by a
-      specified constant value.
-   }
-   \sstconstructor{
-      \htmlref{astShiftMap}{astShiftMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The ShiftMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The ShiftMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The ShiftMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   SkyAxis\sstlabel{SkyAxis}
-}{
-   Store celestial axis information
-}{
-   \sstdescription{
-      The SkyAxis class is used to store information associated with a
-      particular axis of a \htmlref{SkyFrame}{SkyFrame}. It is used internally by the AST
-      library and has no constructor function. You should encounter it
-      only within textual output (e.g. from \htmlref{astWrite}{astWrite}).
-   }
-   \sstconstructor{
-      None.
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SkyAxis class inherits from the \htmlref{Axis}{Axis} class.
-   }
-}
-\sstroutine{
-   SkyFrame\sstlabel{SkyFrame}
-}{
-   Celestial coordinate system description
-}{
-   \sstdescription{
-      A SkyFrame is a specialised form of \htmlref{Frame}{Frame} which describes
-      celestial longitude/latitude coordinate systems. The particular
-      celestial coordinate system to be represented is specified by
-      setting the SkyFrame's \htmlref{System}{System} attribute (currently, the default
-      is ICRS) qualified, as necessary, by a mean \htmlref{Equinox}{Equinox} value and/or
-      an \htmlref{Epoch}{Epoch}.
-
-      For each of the supported celestial coordinate systems, a SkyFrame
-      can apply an optional shift of origin to create a coordinate system
-      representing offsets within the celestial coordinate system from some
-      specified reference point. This offset coordinate system can also be
-      rotated to define new longitude and latitude axes. See attributes
-      SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
-      All the coordinate values used by a SkyFrame are in
-      radians. These may be formatted in more conventional ways for
-      display by using \htmlref{astFormat}{astFormat}.
-   }
-   \sstconstructor{
-      \htmlref{astSkyFrame}{astSkyFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SkyFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      SkyFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignOffset}{AlignOffset}: Align SkyFrames using the offset coordinate system?
-
-         \sstitem
-         \htmlref{AsTime(axis)}{AsTimeaxis}: Format celestial coordinates as times?
-
-         \sstitem
-         \htmlref{Equinox}{Equinox}: Epoch of the mean equinox
-
-         \sstitem
-         \htmlref{LatAxis}{LatAxis}: Index of the latitude axis
-
-         \sstitem
-         \htmlref{LonAxis}{LonAxis}: Index of the longitude axis
-
-         \sstitem
-         \htmlref{NegLon}{NegLon}: Display longitude values in the range [-pi,pi]?
-
-         \sstitem
-         \htmlref{Projection}{Projection}: Sky projection description.
-
-         \sstitem
-         SkyRef: Position defining location of the offset coordinate system
-
-         \sstitem
-         \htmlref{SkyRefIs}{SkyRefIs}: Selects the nature of the offset coordinate system
-
-         \sstitem
-         SkyRefP: Position defining orientation of the offset coordinate system
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SkyFrame class does not define any new functions beyond those
-      which are applicable to all Frames.
-   }
-}
-\sstroutine{
-   SlaMap\sstlabel{SlaMap}
-}{
-   Sequence of celestial coordinate conversions
-}{
-   \sstdescription{
-      An SlaMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard celestial
-      (longitude, latitude) coordinate systems.
-
-      When an SlaMap is first created, it simply performs a unit
-      (null) Mapping on a pair of coordinates. Using the \htmlref{astSlaAdd}{astSlaAdd}
-      function, a series of coordinate conversion steps may then be
-      added, selected from those provided by the SLALIB Positional
-      Astronomy Library (Starlink User Note SUN/67). This allows
-      multi-step conversions between a variety of celestial coordinate
-      systems to be assembled out of the building blocks provided by
-      SLALIB.
-
-      For details of the individual coordinate conversions available,
-      see the description of the astSlaAdd function.
-   }
-   \sstconstructor{
-      \htmlref{astSlaMap}{astSlaMap} (also see astSlaAdd)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SlaMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SlaMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Mappings, the
-      following function may also be applied to all SlaMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astSlaAdd}{astSlaAdd}: Add a celestial coordinate conversion to an SlaMap
-      }
-   }
-}
-\sstroutine{
-   SpecFluxFrame\sstlabel{SpecFluxFrame}
-}{
-   Compound spectrum/flux Frame
-}{
-   \sstdescription{
-      A SpecFluxFrame combines a \htmlref{SpecFrame}{SpecFrame} and a \htmlref{FluxFrame}{FluxFrame} into a single
-      2-dimensional compound \htmlref{Frame}{Frame}. Such a Frame can for instance be used
-      to describe a \htmlref{Plot}{Plot} of a spectrum in which the first axis represents
-      spectral position and the second axis represents flux.
-   }
-   \sstconstructor{
-      \htmlref{astSpecFluxFrame}{astSpecFluxFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SpecFluxFrame class inherits from the \htmlref{CmpFrame}{CmpFrame} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SpecFluxFrame class does not define any new attributes beyond
-      those which are applicable to all CmpFrames. However, the attributes
-      of the component Frames can be accessed as if they were attributes
-      of the SpecFluxFrame. For instance, the SpecFluxFrame will recognise
-      the {\tt{"}}\htmlref{StdOfRest}{StdOfRest}{\tt{"}} attribute and forward access requests to the component
-      SpecFrame. An axis index can optionally be appended to the end of any
-      attribute name, in which case the request to access the attribute will
-      be forwarded to the primary Frame defining the specified axis.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SpecFluxFrame class does not define any new functions beyond those
-      which are applicable to all CmpFrames.
-   }
-}
-\sstroutine{
-   SpecFrame\sstlabel{SpecFrame}
-}{
-   Spectral coordinate system description
-}{
-   \sstdescription{
-      A SpecFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions within
-      an electro-magnetic spectrum. The particular coordinate system to be
-      used is specified by setting the SpecFrame's \htmlref{System}{System} attribute (the
-      default is wavelength) qualified, as necessary, by other attributes
-      such as the rest frequency, the standard of rest, the epoch of
-      observation, units, etc (see the description of the System attribute
-      for details).
-
-      By setting a value for thr \htmlref{SpecOrigin}{SpecOrigin} attribute, a SpecFrame can be made
-      to represent offsets from a given spectral position, rather than absolute
-      spectral values.
-   }
-   \sstconstructor{
-      \htmlref{astSpecFrame}{astSpecFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SpecFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      SpecFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignSpecOffset}{AlignSpecOffset}: Align SpecFrames using the offset coordinate system?
-
-         \sstitem
-         \htmlref{AlignStdOfRest}{AlignStdOfRest}: Standard of rest in which to align SpecFrames
-
-         \sstitem
-         \htmlref{RefDec}{RefDec}: Declination of the source (FK5 J2000)
-
-         \sstitem
-         \htmlref{RefRA}{RefRA}: Right ascension of the source (FK5 J2000)
-
-         \sstitem
-         \htmlref{RestFreq}{RestFreq}: Rest frequency
-
-         \sstitem
-         \htmlref{SourceSys}{SourceSys}: Source velocity spectral system
-
-         \sstitem
-         \htmlref{SourceVel}{SourceVel}: Source velocity
-
-         \sstitem
-         \htmlref{SourceVRF}{SourceVRF}: Source velocity rest frame
-
-         \sstitem
-         \htmlref{SpecOrigin}{SpecOrigin}: The zero point for SpecFrame axis values
-
-         \sstitem
-         \htmlref{StdOfRest}{StdOfRest}: Standard of rest
-
-      }
-      Several of the Frame attributes inherited by the SpecFrame class
-      refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
-      \htmlref{Label(axis)}{Labelaxis}, etc). Since a SpecFrame is strictly one-dimensional,
-      it allows these attributes to be specified without an axis index.
-      So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Frames, the
-      following functions may also be applied to all SpecFrames:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astSetRefPos}{astSetRefPos}: Set reference position in any celestial system
-
-         \sstitem
-         \htmlref{astGetRefPos}{astGetRefPos}: Get reference position in any celestial system
-      }
-   }
-}
-\sstroutine{
-   SpecMap\sstlabel{SpecMap}
-}{
-   Sequence of spectral coordinate conversions
-}{
-   \sstdescription{
-      A SpecMap is a specialised form of \htmlref{Mapping}{Mapping} which can be used to
-      represent a sequence of conversions between standard spectral
-      coordinate systems.
-
-      When an SpecMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{astSpecAdd}{astSpecAdd}
-      function, a series of coordinate conversion steps may then be
-      added. This allows multi-step conversions between a variety of
-      spectral coordinate systems to be assembled out of a set of building
-      blocks.
-
-      Conversions are available to transform between standards of rest.
-      Such conversions need to know the source position as an RA and DEC.
-      This information can be supplied in the form of parameters for
-      the relevant conversions, in which case the SpecMap is 1-dimensional,
-      simply transforming the spectral axis values. This means that the
-      same source position will always be used by the SpecMap. However, this
-      may not be appropriate for an accurate description of a 3-D spectral
-      cube, where changes of spatial position can produce significant
-      changes in the Doppler shift introduced when transforming between
-      standards of rest. For this situation, a 3-dimensional SpecMap can
-      be created in which axes 2 and 3 correspond to the source RA and DEC
-      The SpecMap simply copies values for axes 2 and 3 from input to
-      output), but modifies axis 1 values (the spectral axis) appropriately.
-
-      For details of the individual coordinate conversions available,
-      see the description of the astSpecAdd function.
-   }
-   \sstconstructor{
-      \htmlref{astSpecMap}{astSpecMap} (also see astSpecAdd)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SpecMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SpecMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Mappings, the
-      following function may also be applied to all SpecMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astSpecAdd}{astSpecAdd}: Add a spectral coordinate conversion to an SpecMap
-      }
-   }
-}
-\sstroutine{
-   SphMap\sstlabel{SphMap}
-}{
-   Map 3-d Cartesian to 2-d spherical coordinates
-}{
-   \sstdescription{
-      A SphMap is a \htmlref{Mapping}{Mapping} which transforms points from a
-      3-dimensional Cartesian coordinate system into a 2-dimensional
-      spherical coordinate system (longitude and latitude on a unit
-      sphere centred at the origin). It works by regarding the input
-      coordinates as position vectors and finding their intersection
-      with the sphere surface. The inverse transformation always
-      produces points which are a unit distance from the origin
-      (i.e. unit vectors).
-   }
-   \sstconstructor{
-      \htmlref{astSphMap}{astSphMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SphMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      SphMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{UnitRadius}{UnitRadius}: SphMap input vectors lie on a unit sphere?
-
-         \sstitem
-         \htmlref{PolarLong}{PolarLong}: The longitude value to assign to either pole
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SphMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   Stc\sstlabel{Stc}
-}{
-   Represents an instance of the IVOA STC class
-}{
-   \sstdescription{
-      The Stc class is an implementation of the IVOA STC class which forms
-      part of the IVOA Space-Time Coordinate Metadata system. See:
-
-      http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
-      The Stc class does not have a constructor function of its own, as it
-      is simply a container class for a family of specialised sub-classes
-      including \htmlref{StcCatalogEntryLocation}{StcCatalogEntryLocation}, \htmlref{StcResourceProfile}{StcResourceProfile}, \htmlref{StcSearchLocation}{StcSearchLocation}
-      and \htmlref{StcObsDataLocation}{StcObsDataLocation}.
-   }
-   \sstconstructor{
-      astStc
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The Stc class inherits from the \htmlref{Region}{Region} class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Regions, every
-      Stc also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{RegionClass}{RegionClass}: The class name of the encapsulated Region.
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Regions, the
-      following functions may also be applied to all Stc's:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astGetStcRegion}{astGetStcRegion}: Get a pointer to the encapsulated Region
-
-         \sstitem
-         \htmlref{astGetStcCoord}{astGetStcCoord}: Get information about an AstroCoords element
-
-         \sstitem
-         \htmlref{astGetStcNCoord}{astGetStcNCoord}: Returns the number of AstroCoords elements in an Stc
-      }
-   }
-}
-\sstroutine{
-   StcCatalogEntryLocation\sstlabel{StcCatalogEntryLocation}
-}{
-   Correspond to the IVOA STCCatalogEntryLocation class
-}{
-   \sstdescription{
-      The StcCatalogEntryLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstconstructor{
-      \htmlref{astStcCatalogEntryLocation}{astStcCatalogEntryLocation}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcCatalogEntryLocation class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcCatalogEntryLocation class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcCatalogEntryLocation class does not define any new functions beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcObsDataLocation\sstlabel{StcObsDataLocation}
-}{
-   Correspond to the IVOA ObsDataLocation class
-}{
-   \sstdescription{
-      The StcObsDataLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coordinate space occupied by a particular observational dataset.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-
-      An STC ObsDataLocation element specifies the extent of the
-      observation within a specified coordinate system, and also specifies
-      the observatory location within a second coordinate system.
-
-      The AST StcObsDataLocation class inherits from Stc, and therefore
-      an StcObsDataLocation can be used directly as an Stc. When used
-      in this way, the StcObsDataLocation describes the location of the
-      observation (not the observatory).
-
-      Eventually, this class will have a method for returning an Stc
-      describing the observatory location. However, AST currently does not
-      include any classes of \htmlref{Frame}{Frame} for describing terrestrial or solar
-      system positions. Therefore, the provision for returning observatory
-      location as an Stc is not yet available. However, for terrestrial
-      observations, the position of the observatory can still be recorded
-      using the \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} attributes of the Frame encapsulated
-      within the Stc representing the observation location (this assumes
-      the observatory is located at sea level).
-   }
-   \sstconstructor{
-      \htmlref{astStcObsDataLocation}{astStcObsDataLocation}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcObsDataLocation class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcObsDataLocation class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcObsDataLocation class does not define any new functions beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcResourceProfile\sstlabel{StcResourceProfile}
-}{
-   Correspond to the IVOA STCResourceProfile class
-}{
-   \sstdescription{
-      The StcResourceProfile class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of the datasets contained in some VO resource.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstconstructor{
-      \htmlref{astStcResourceProfile}{astStcResourceProfile}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcResourceProfile class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcResourceProfile class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcResourceProfile class does not define any new functions beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcSearchLocation\sstlabel{StcSearchLocation}
-}{
-   Correspond to the IVOA SearchLocation class
-}{
-   \sstdescription{
-      The StcSearchLocation class is a sub-class of \htmlref{Stc}{Stc} used to describe
-      the coverage of a query.
-
-      See http://hea-www.harvard.edu/$\sim$arots/nvometa/STC.html
-   }
-   \sstconstructor{
-      \htmlref{astStcSearchLocation}{astStcSearchLocation}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcSearchLocation class inherits from the Stc class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The StcSearchLocation class does not define any new attributes beyond
-      those which are applicable to all Stcs.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcSearchLocation class does not define any new functions beyond those
-      which are applicable to all Stcs.
-   }
-}
-\sstroutine{
-   StcsChan\sstlabel{StcsChan}
-}{
-   I/O Channel using STC-S to represent Objects
-}{
-   \sstdescription{
-      A StcsChan is a specialised form of \htmlref{Channel}{Channel} which supports STC-S
-      I/O operations. Writing an \htmlref{Object}{Object} to an StcsChan (using
-      \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
-      STC-S description of that Object, and reading from an StcsChan will
-      create a new Object from its STC-S description.
-
-      When an STC-S description is read using
-      \htmlref{astRead}{astRead},
-      the returned AST Object may be 1) a \htmlref{PointList}{PointList} describing the STC
-      AstroCoords (i.e. a single point of interest within the coordinate frame
-      described by the STC-S description), or 2) a \htmlref{Region}{Region} describing the STC
-      AstrCoordsArea (i.e. an area or volume of interest within the coordinate
-      frame described by the STC-S description), or 3) a \htmlref{KeyMap}{KeyMap}
-      containing the uninterpreted property values read form the STC-S
-      description, or 4) a KeyMap containing any combination of the first
-      3 options. The attributes \htmlref{StcsArea}{StcsArea}, \htmlref{StcsCoords}{StcsCoords} and \htmlref{StcsProps}{StcsProps}
-      control which of the above is returned by
-      astRead.
-
-      When an STC-S description is created from an AST Object using
-      astWrite,
-      the AST Object must be either a Region or a KeyMap. If it is a
-      Region, it is assumed to define the AstroCoordsArea or (if the
-      Region is a single point) the AstroCoords to write to the STC-S
-      description. If the Object is a KeyMap, it may contain an entry
-      with the key {\tt{"}}AREA{\tt{"}}, holding a Region to be used to define the
-      AstroCoordsArea. It may also contain an entry with the key {\tt{"}}COORDS{\tt{"}},
-      holding a Region (a PointList) to be used to create the
-      AstroCoords. It may also contain an entry with key {\tt{"}}PROPS{\tt{"}}, holding
-      a KeyMap that contains uninterpreted property values to be used as
-      defaults for any STC-S properties that are not determined by the
-      other supplied Regions. In addition, a KeyMap supplied to
-      astWrite
-      may itself hold the default STC-S properties (rather than defaults
-      being held in a secondary KeyMap, stored as the {\tt{"}}PROPS{\tt{"}} entry in the
-      supplied KeyMap).
-
-      The
-      astRead and astWrite
-      functions work together so that any Object returned by
-      astRead can immediately be re-written using astWrite.
-
-      Normally, when you use an StcsChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
-      by reading and writing the resulting text. These functions
-      should perform any conversions needed between external character
-      encodings and the internal ASCII encoding. If no such functions
-      are supplied, a Channel will read from standard input and write
-      to standard output.
-
-      Support for STC-S is currently based on the IVOA document {\tt{"}}STC-S:
-      Space-Time Coordinate (STC) Metadata Linear String Implementation{\tt{"}},
-      version 1.30 (dated 5th December 2007), available at
-      http://www.ivoa.net/Documents/latest/STC-S.html. Note, this
-      document is a recommednation only and does not constitute an accepted
-      IVOA standard.
-
-      The full text of version 1.30 is supported by the StcsChan class,
-      with the following exceptions and provisos:
-
-      \sstitemlist{
-
-         \sstitem
-         When reading an STC-S phrase, case is ignored except when reading
-         units strings.
-
-         \sstitem
-         There is no support for multiple intervals specified within a
-         TimeInterval, PositionInterval, SpectralInterval or RedshiftInterval.
-
-         \sstitem
-         If the ET timescale is specified, TT is used instead.
-
-         \sstitem
-         If the TEB timescale is specified, TDB is used instead.
-
-         \sstitem
-         The LOCAL timescale is not supported.
-
-         \sstitem
-         The AST \htmlref{TimeFrame}{TimeFrame} and \htmlref{SkyFrame}{SkyFrame} classes do not currently allow a
-         reference position to be specified. Consequently, any $<$refpos$>$
-         specified within the Time or Space sub-phrase of an STC-S document
-         is ignored.
-
-         \sstitem
-         The Convex identifier for the space sub-phrase is not supported.
-
-         \sstitem
-         The GEO\_C and GEO\_D space frames are not supported.
-
-         \sstitem
-         The UNITSPHERE and SPHER3 space flavours are not supported.
-
-         \sstitem
-         If any Error values are supplied in a space sub-phrase, then the
-         number of values supplied should equal the number of spatial axes,
-         and the values are assumed to specify an error box (i.e. error
-         circles, ellipses, etc, are not supported).
-
-         \sstitem
-         The spectral and redshift sub-phrases do not support the
-         following $<$refpos$>$ values: LOCAL\_GROUP\_CENTER, UNKNOWNRefPos,
-         EMBARYCENTER, MOON, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS,
-         NEPTUNE, PLUTO.
-
-         \sstitem
-         Error values are supported but error ranges are not.
-
-         \sstitem
-         Resolution, PixSize and Size values are ignored.
-
-         \sstitem
-         Space velocity sub-phrases are ignored.
-      }
-   }
-   \sstconstructor{
-      \htmlref{astStcsChan}{astStcsChan}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The StcsChan class inherits from the Channel class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Channels, every
-      StcsChan also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{StcsArea}{StcsArea}: Return the CoordinateArea component after reading an STC-S?
-
-         \sstitem
-         \htmlref{StcsCoords}{StcsCoords}: Return the Coordinates component after reading an STC-S?
-
-         \sstitem
-         \htmlref{StcsIndent}{StcsIndent}: Controls output of indentation and line feeds
-
-         \sstitem
-         \htmlref{StcsLength}{StcsLength}: Controls output buffer length
-
-         \sstitem
-         \htmlref{StcsProps}{StcsProps}: Return the STC-S properties after reading an STC-S?
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The StcsChan class does not define any new functions beyond those
-      which are applicable to all Channels.
-   }
-}
-\sstroutine{
-   SwitchMap\sstlabel{SwitchMap}
-}{
-   A Mapping that encapsulates a set of alternate Mappings
-}{
-   \sstdescription{
-      A SwitchMap is a \htmlref{Mapping}{Mapping} which represents a set of alternate
-      Mappings, each of which is used to transform positions within a
-      particular region of the input or output coordinate system of the
-      SwitchMap.
-
-      A SwitchMap can encapsulate any number of Mappings, but they must
-      all have the same number of inputs (\htmlref{Nin}{Nin} attribute value) and the
-      same number of outputs (\htmlref{Nout}{Nout} attribute value). The SwitchMap itself
-      inherits these same values for its Nin and Nout attributes. Each of
-      these Mappings represents a {\tt{"}}route{\tt{"}} through the switch, and are
-      referred to as {\tt{"}}route{\tt{"}} Mappings below. Each route Mapping transforms
-      positions between the input and output coordinate space of the entire
-      SwitchMap, but only one Mapping will be used to transform any given
-      position. The selection of the appropriate route Mapping to use with
-      any given input position is made by another Mapping, called the
-      {\tt{"}}selector{\tt{"}} Mapping. Each SwitchMap encapsulates two selector
-      Mappings in addition to its route Mappings; one for use with the
-      SwitchMap's forward transformation (called the {\tt{"}}forward selector
-      Mapping{\tt{"}}), and one for use with the SwitchMap's inverse transformation
-      (called the {\tt{"}}inverse selector Mapping{\tt{"}}). The forward selector Mapping
-      must have the same number of inputs as the route Mappings, but
-      should have only one output. Likewise, the inverse selector Mapping
-      must have the same number of outputs as the route Mappings, but
-      should have only one input.
-
-      When the SwitchMap is used to transform a position in the forward
-      direction (from input to output), each supplied input position is
-      first transformed by the forward transformation of the forward selector
-      Mapping. This produces a single output value for each input position
-      referred to as the selector value. The nearest integer to the selector
-      value is found, and is used to index the array of route Mappings (the
-      first supplied route Mapping has index 1, the second route Mapping has
-      index 2, etc). If the nearest integer to the selector value is less
-      than 1 or greater than the number of route Mappings, then the SwitchMap
-      output position is set to a value of AST\_\_BAD on every axis. Otherwise,
-      the forward transformation of the selected route Mapping is used to
-      transform the supplied input position to produce the SwitchMap output
-      position.
-
-      When the SwitchMap is used to transform a position in the inverse
-      direction (from {\tt{"}}output{\tt{"}} to {\tt{"}}input{\tt{"}}), each supplied {\tt{"}}output{\tt{"}} position
-      is first transformed by the inverse transformation of the inverse
-      selector Mapping. This produces a selector value for each {\tt{"}}output{\tt{"}}
-      position. Again, the nearest integer to the selector value is found,
-      and is used to index the array of route Mappings. If this selector
-      index value is within the bounds of the array of route Mappings, then
-      the inverse transformation of the selected route Mapping is used to
-      transform the supplied {\tt{"}}output{\tt{"}} position to produce the SwitchMap
-      {\tt{"}}input{\tt{"}} position. If the selector index value is outside the bounds
-      of the array of route Mappings, then the SwitchMap {\tt{"}}input{\tt{"}} position is
-      set to a value of AST\_\_BAD on every axis.
-
-      In practice, appropriate selector Mappings should be chosen to
-      associate a different route Mapping with each region of coordinate
-      space. Note that the \htmlref{SelectorMap}{SelectorMap} class of Mapping is particularly
-      appropriate for this purpose.
-
-      If a compound Mapping contains a SwitchMap in series with its own
-      inverse, the combination of the two adjacent SwitchMaps will be
-      replaced by a \htmlref{UnitMap}{UnitMap} when the compound Mapping is simplified using
-      \htmlref{astSimplify}{astSimplify}.
-   }
-   \sstconstructor{
-      \htmlref{astSwitchMap}{astSwitchMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The SwitchMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The SwitchMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The SwitchMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   TimeFrame\sstlabel{TimeFrame}
-}{
-   Time coordinate system description
-}{
-   \sstdescription{
-      A TimeFrame is a specialised form of one-dimensional \htmlref{Frame}{Frame} which
-      represents various coordinate systems used to describe positions in
-      time.
-
-      A TimeFrame represents a moment in time as either an Modified Julian
-      Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-      as determined by the \htmlref{System}{System} attribute. Optionally, a zero point can be
-      specified (using attribute \htmlref{TimeOrigin}{TimeOrigin}) which results in the TimeFrame
-      representing time offsets from the specified zero point.
-
-      Even though JD and MJD are defined as being in units of days, the
-      TimeFrame class allows other units to be used (via the Unit attribute)
-      on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1
-      hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs
-      can be described in units other than the usual years. Besselian epoch
-      are always represented in units of (tropical) years.
-
-      The \htmlref{TimeScale}{TimeScale} attribute allows the time scale to be specified (that
-      is, the physical process used to define the rate of flow of time).
-      MJD, JD and Julian epoch can be used to represent a time in any
-      supported time scale. However, Besselian epoch may only be used with the
-      {\tt{"}}TT{\tt{"}} (Terrestrial Time) time scale. The list of supported time scales
-      includes universal time and siderial time. Strictly, these represent
-      angles rather than time scales, but are included in the list since
-      they are in common use and are often thought of as time scales.
-
-      When a time value is formatted it can be formated either as a simple
-      floating point value, or as a Gregorian date (see the Format
-      attribute).
-   }
-   \sstconstructor{
-      \htmlref{astTimeFrame}{astTimeFrame}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The TimeFrame class inherits from the Frame class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Frames, every
-      TimeFrame also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{AlignTimeScale}{AlignTimeScale}: Time scale in which to align TimeFrames
-
-         \sstitem
-         \htmlref{LTOffset}{LTOffset}: The offset of Local Time from UTC, in hours.
-
-         \sstitem
-         \htmlref{TimeOrigin}{TimeOrigin}: The zero point for TimeFrame axis values
-
-         \sstitem
-         \htmlref{TimeScale}{TimeScale}: The timescale used by the TimeFrame
-
-      }
-      Several of the Frame attributes inherited by the TimeFrame class
-      refer to a specific axis of the Frame (for instance \htmlref{Unit(axis)}{Unitaxis},
-      \htmlref{Label(axis)}{Labelaxis}, etc). Since a TimeFrame is strictly one-dimensional,
-      it allows these attributes to be specified without an axis index.
-      So for instance, {\tt{"}}Unit{\tt{"}} is allowed in place of {\tt{"}}Unit(1){\tt{"}}.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Frames, the
-      following functions may also be applied to all TimeFrames:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astCurrentTime}{astCurrentTime}: Return the current system time
-      }
-   }
-}
-\sstroutine{
-   TimeMap\sstlabel{TimeMap}
-}{
-   Sequence of time coordinate conversions
-}{
-   \sstdescription{
-      A TimeMap is a specialised form of 1-dimensional \htmlref{Mapping}{Mapping} which can be
-      used to represent a sequence of conversions between standard time
-      coordinate systems.
-
-      When a TimeMap is first created, it simply performs a unit
-      (null) Mapping. Using the \htmlref{astTimeAdd}{astTimeAdd}
-      function, a series of coordinate conversion steps may then be
-      added. This allows multi-step conversions between a variety of
-      time coordinate systems to be assembled out of a set of building
-      blocks.
-
-      For details of the individual coordinate conversions available,
-      see the description of the astTimeAdd function.
-   }
-   \sstconstructor{
-      \htmlref{astTimeMap}{astTimeMap} (also see astTimeAdd)
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The TimeMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The TimeMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      In addition to those functions applicable to all Mappings, the
-      following function may also be applied to all TimeMaps:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{astTimeAdd}{astTimeAdd}: Add a time coordinate conversion to an TimeMap
-      }
-   }
-}
-\sstroutine{
-   TranMap\sstlabel{TranMap}
-}{
-   Mapping with specified forward and inverse transformations
-}{
-   \sstdescription{
-      A TranMap is a \htmlref{Mapping}{Mapping} which combines the forward transformation of
-      a supplied Mapping with the inverse transformation of another
-      supplied Mapping, ignoring the un-used transformation in each
-      Mapping (indeed the un-used transformation need not exist).
-
-      When the forward transformation of the TranMap is referred to, the
-      transformation actually used is the forward transformation of the
-      first Mapping supplied when the TranMap was constructed. Likewise,
-      when the inverse transformation of the TranMap is referred to, the
-      transformation actually used is the inverse transformation of the
-      second Mapping supplied when the TranMap was constructed.
-   }
-   \sstconstructor{
-      \htmlref{astTranMap}{astTranMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The TranMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The TranMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The TranMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   UnitMap\sstlabel{UnitMap}
-}{
-   Unit (null) Mapping
-}{
-   \sstdescription{
-      A UnitMap is a unit (null) \htmlref{Mapping}{Mapping} that has no effect on the
-      coordinates supplied to it. They are simply copied. This can be
-      useful if a Mapping is required (e.g. to pass to another
-      function) but you do not want it to have any effect.
-      The \htmlref{Nin}{Nin} and \htmlref{Nout}{Nout} attributes of a UnitMap are always equal and
-      are specified when it is created.
-   }
-   \sstconstructor{
-      \htmlref{astUnitMap}{astUnitMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The UnitMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The UnitMap class does not define any new attributes beyond
-      those which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The UnitMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   WcsMap\sstlabel{WcsMap}
-}{
-   Implement a FITS-WCS sky projection
-}{
-   \sstdescription{
-      This class is used to represent sky coordinate projections as
-      described in the FITS world coordinate system (FITS-WCS) paper II
-      {\tt{"}}Representations of Celestial Coordinates in FITS{\tt{"}} by M. Calabretta
-      and E.W. Griesen. This paper defines a set of functions, or sky
-      projections, which transform longitude-latitude pairs representing
-      spherical celestial coordinates into corresponding pairs of Cartesian
-      coordinates (and vice versa).
-
-      A WcsMap is a specialised form of \htmlref{Mapping}{Mapping} which implements these
-      sky projections and applies them to a specified pair of coordinates.
-      All the projections in the FITS-WCS paper are supported, plus the now
-      deprecated {\tt{"}}TAN with polynomial correction terms{\tt{"}} projection which
-      is refered to here by the code {\tt{"}}TPN{\tt{"}}. Using the FITS-WCS terminology,
-      the transformation is between {\tt{"}}native spherical{\tt{"}} and {\tt{"}}projection
-      plane{\tt{"}} coordinates (also called {\tt{"}}intermediate world coordinates{\tt{"}}.
-      These coordinates may, optionally, be embedded in a space with more
-      than two dimensions, the remaining coordinates being copied unchanged.
-      Note, however, that for consistency with other AST facilities, a
-      WcsMap handles coordinates that represent angles in radians (rather
-      than the degrees used by FITS-WCS).
-
-      The type of FITS-WCS projection to be used and the coordinates
-      (axes) to which it applies are specified when a WcsMap is first
-      created. The projection type may subsequently be determined
-      using the \htmlref{WcsType}{WcsType} attribute and the coordinates on which it acts
-      may be determined using the \htmlref{WcsAxis(lonlat)}{WcsAxislonlat} attribute.
-
-      Each WcsMap also allows up to 100 {\tt{"}}projection parameters{\tt{"}} to be
-      associated with each axis. These specify the precise form of the
-      projection, and are accessed using \htmlref{PVi\_m}{PVi_m} attribute, where {\tt{"}}i{\tt{"}} is
-      the integer axis index (starting at 1), and m is an integer
-      {\tt{"}}parameter index{\tt{"}} in the range 0 to 99. The number of projection
-      parameters required by each projection, and their meanings, are
-      dependent upon the projection type (most projections either do not
-      use any projection parameters, or use parameters 1 and 2 associated
-      with the latitude axis). Before creating a WcsMap you should consult
-      the FITS-WCS paper for details of which projection parameters are
-      required, and which have defaults. When creating the WcsMap, you must
-      explicitly set values for all those required projection parameters
-      which do not have defaults defined in this paper.
-   }
-   \sstconstructor{
-      \htmlref{astWcsMap}{astWcsMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The WcsMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      WcsMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{NatLat}{NatLat}: Native latitude of the reference point of a FITS-WCS projection
-
-         \sstitem
-         \htmlref{NatLon}{NatLon}: Native longitude of the reference point of a FITS-WCS projection
-
-         \sstitem
-         \htmlref{PVi\_m}{PVi_m}: FITS-WCS projection parameters
-
-         \sstitem
-         PVMax: Maximum number of FITS-WCS projection parameters
-
-         \sstitem
-         \htmlref{WcsAxis(lonlat)}{WcsAxislonlat}: FITS-WCS projection axes
-
-         \sstitem
-         \htmlref{WcsType}{WcsType}: FITS-WCS projection type
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The WcsMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   WinMap\sstlabel{WinMap}
-}{
-   Map one window on to another by scaling and shifting each axis
-}{
-   \sstdescription{
-      A Winmap is a linear \htmlref{Mapping}{Mapping} which transforms a rectangular
-      window in one coordinate system into a similar window in another
-      coordinate system by scaling and shifting each axis (the window
-      edges being parallel to the coordinate axes).
-
-      A WinMap is specified by giving the coordinates of two opposite
-      corners (A and B) of the window in both the input and output
-      coordinate systems.
-   }
-   \sstconstructor{
-      \htmlref{astWinMap}{astWinMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The WinMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      The WinMap class does not define any new attributes beyond those
-      which are applicable to all Mappings.
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The WinMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   XmlChan\sstlabel{XmlChan}
-}{
-   I/O Channel using XML to represent Objects
-}{
-   \sstdescription{
-      A XmlChan is a specialised form of \htmlref{Channel}{Channel} which supports XML I/O
-      operations. Writing an \htmlref{Object}{Object} to an XmlChan (using
-      \htmlref{astWrite}{astWrite}) will, if the Object is suitable, generate an
-      XML description of that Object, and reading from an XmlChan will
-      create a new Object from its XML description.
-
-      Normally, when you use an XmlChan, you should provide {\tt{"}}source{\tt{"}}
-      and {\tt{"}}sink{\tt{"}} functions which connect it to an external data store
-      by reading and writing the resulting XML text. These functions
-      should perform any conversions needed between external character
-      encodings and the internal ASCII encoding. If no such functions
-      are supplied, a Channel will read from standard input and write
-      to standard output.
-   }
-   \sstconstructor{
-      \htmlref{astXmlChan}{astXmlChan}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The XmlChan class inherits from the Channel class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Channels, every
-      XmlChan also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{XmlFormat}{XmlFormat}: \htmlref{System}{System} for formatting Objects as XML
-
-         \sstitem
-         \htmlref{XmlIndent}{XmlIndent}: Controls output of indentation and line feeds
-
-         \sstitem
-         \htmlref{XmlLength}{XmlLength}: Controls output buffer length
-
-         \sstitem
-         \htmlref{XmlPrefix}{XmlPrefix}: The namespace prefix to use when writing
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The XmlChan class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\sstroutine{
-   ZoomMap\sstlabel{ZoomMap}
-}{
-   Zoom coordinates about the origin
-}{
-   \sstdescription{
-      The ZoomMap class implements a \htmlref{Mapping}{Mapping} which performs a {\tt{"}}zoom{\tt{"}}
-      transformation by multiplying all coordinate values by the same
-      scale factor (the inverse transformation is performed by
-      dividing by this scale factor). The number of coordinate values
-      representing each point is unchanged.
-   }
-   \sstconstructor{
-      \htmlref{astZoomMap}{astZoomMap}
-   }
-   \sstdiytopic{
-      Inheritance
-   }{
-      The ZoomMap class inherits from the Mapping class.
-   }
-   \sstdiytopic{
-      Attributes
-   }{
-      In addition to those attributes common to all Mappings, every
-      ZoomMap also has the following attributes:
-
-      \sstitemlist{
-
-         \sstitem
-         \htmlref{Zoom}{Zoom}: ZoomMap scale factor
-      }
-   }
-   \sstdiytopic{
-      Functions
-   }{
-      The ZoomMap class does not define any new functions beyond those
-      which are applicable to all Mappings.
-   }
-}
-\normalsize
-
-\cleardoublepage
-\section{\label{ss:commanddescriptions}UNIX Command Descriptions}
-The commands described here are provided for use from the UNIX shell
-to assist with developing software which uses AST. To use these
-commands, you should ensure that the directory
-``/star/bin''\footnote{Or the equivalent directory if AST is installed
-in a non-standard location.} is on your PATH.
-\small
-\sstroutine{
-   ast\_link\sstlabel{ast_link}
-}{
-   Link a program with the AST library
-}{
-   \sstdescription{
-      This command should be used when building programs which use the AST
-      library, in order to generate the correct arguments to allow the compiler
-      to link your program. The arguments generated are written to standard
-      output but may be substituted into the compiler command line in the
-      standard UNIX way using backward quotes (see below).
-
-      By default, it is assumed that you are building a stand-alone program
-      which does not produce graphical output. However, switches are provided
-      for linking other types of program.
-   }
-   \sstinvocation{
-      cc program.c -L/star/lib `ast\_link [switches]` -o program
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         cc display.c -L/star/lib `ast\_link -pgplot` -o display
-      }{
-         Compiles and links a C program called ``display'' which uses
-         the standard version of PGPLOT for graphical output.
-      }
-      \sstexamplesubsection{
-         cc plotit.c -L. -L/star/lib `ast\_link -grf` -lgrf -o plotit
-      }{
-         Compiles and links a C program ``plotit''. The ``-grf''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by the current version of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-      \sstexamplesubsection{
-         cc plotit.c -L. -L/star/lib `ast\_link -grf\_v2.0` -lgrf -o plotit
-      }{
-         Compiles and links a C program ``plotit''. The ``-grf\_v2.0''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by version 2.0 of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-   }
-   \sstdiytopic{
-      Switches
-   }{
-      The following switches may optionally be given to this command to
-      modify its behaviour:
-
-      \sstitemlist{
-
-         \sstitem
-         ``-csla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-fsla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-ems'': Requests that the program be linked so that error messages
-         produced by the AST library are delivered via the Starlink EMS (Error
-         Message Service) library (Starlink \htmlref{System}{System} Note SSN/4). By default,
-         error messages are simply written to standard error.
-
-         \sstitem
-         ``-drama'': Requests that the program be linked so that error messages
-         produced by the AST library are delivered via the DRAMA Ers (Error
-         Reporting Service) library. By default, error messages are simply
-         written to standard error.
-
-         \sstitem
-         ``-grf'': Requests that no arguments be generated to specify which
-         2D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new graphics system yourself and wish to provide your own arguments for
-         linking with it. This switch differs from the other ``grf'' switches in
-         that it assumes that your graphics module implements the complete
-         interface required by the current version of AST. If future versions of
-         AST introduce new functions to the graphics interface, this switch will
-         cause ``unresolved symbol'' errors to occur during linking, warning you
-         that you need to implement new functions in your graphics module. To
-         avoid such errors, you can use one of the other, version-specific,
-         switches in place of the ``-grf'' switch, but these will cause run-time
-         errors to be reported if any AST function is invoked which requires
-         facilities not in the implemented interface.
-
-         \sstitem
-         ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-         It indicates that you want to link with your own graphics module
-         which implements the 2D graphics interface required by V2.0 of AST.
-
-         \sstitem
-         ``-grf\_v3.2'': Indicates that you want to link with your own
-         graphics module which implements the 2D graphics interface required by
-         V3.2 of AST.
-
-         \sstitem
-         ``-myerr'': Requests that no arguments be generated to specify how
-         error messages produced by the AST library should be delivered. You
-         should use this option only if you have implemented an interface to a
-         new error delivery system yourself and wish to provide your own
-         arguments for linking with it.
-
-         \sstitem
-         ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-         but is retained in order to allow applications to be linked with a
-         graphics module which implements the 2D interface used by AST V2.0. It
-         is equivalent to the ``-grf\_v2.0'' switch.
-
-         \sstitem
-         ``-pgp'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no 2D graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via
-         the standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no 2D graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-
-         \sstitem
-         ``-grf3d'': Requests that no arguments be generated to specify which
-         3D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new 3D graphics system yourself and wish to provide your own arguments
-         for linking with it.
-
-         \sstitem
-         ``-pgp3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no 3D graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via
-         the standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no 3D graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-      }
-   }
-   \sstdiytopic{
-      SLALIB
-   }{
-      The AST distribution includes a cut down subset of the C version of
-      the SLALIB library written by Pat Wallace. This subset contains only
-      the functions needed by the AST library. It is built as part of the
-      process of building AST and is distributed under GPL (and is thus
-      compatible with the AST license). Previous version of this script
-      allowed AST applications to be linked against external SLALIB
-      libraries (either Fortran or C) rather than the internal version.
-      The current version of this script does not provide this option,
-      and always uses the internal SLALIB library. However, for backward
-      compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
-      (previously used for selecting which version of SLALIB to use) to be
-      specified, but they will be ignored.
-   }
-}
-\sstroutine{
-   ast\_link\_adam\sstlabel{ast_link_adam}
-}{
-   Link an ADAM program with the AST library
-}{
-   \sstdescription{
-      This command should only be used when building Starlink ADAM programs
-      which use the AST library, in order to generate the correct arguments
-      to allow the ADAM ``alink'' command to link the program. The arguments
-      generated are written to standard output but may be substituted into
-      the ``alink'' command line in the standard UNIX way using backward
-      quotes (see below).
-
-      By default, it is assumed that you are building an ADAM program which
-      does not produce graphical output. However, switches are provided for
-      linking other types of program. This command should not be used when
-      building stand-alone (non-ADAM) programs. Use the ``\htmlref{ast\_link}{ast_link}'' command
-      instead.
-   }
-   \sstinvocation{
-      alink program.o -L/star/lib `ast\_link\_adam [switches]`
-   }
-   \sstexamples{
-      \sstexamplesubsection{
-         alink display.o -L/star/lib `ast\_link\_adam -pgplot`
-      }{
-         Links an ADAM program ``display'' which uses the standard
-         version of PGPLOT for graphical output.
-      }
-      \sstexamplesubsection{
-         alink plotit.o -L. -L/star/lib `ast\_link\_adam -grf` -lgrf
-      }{
-         Links an ADAM program ``plotit'', written in C. The ``-grf''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by the current version of AST.
-         Here, this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-      \sstexamplesubsection{
-         alink plotit.o -L. -L/star/lib `ast\_link\_adam -grf\_v2.0` -lgrf
-      }{
-         Links an ADAM program ``plotit'', written in C. The ``-grf\_v2.0''
-         switch indicates that graphical output will be delivered through
-         a graphical interface which you have implemented yourself, which
-         corresponds to the interface required by version 2.0 of AST. Here,
-         this interface is supplied by means of the ``-lgrf'' library
-         reference.
-      }
-   }
-   \sstdiytopic{
-      Switches
-   }{
-      The following switches may optionally be given to this command to
-      modify its behaviour:
-
-      \sstitemlist{
-
-         \sstitem
-         ``-csla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-fsla'': Ignored. Provided for backward compatibility only.
-
-         \sstitem
-         ``-grf'': Requests that no arguments be generated to specify which
-         2D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new graphics system yourself and wish to provide your own arguments for
-         linking with it. This switch differs from the other ``grf'' switches in
-         that it assumes that your graphics module implements the complete
-         interface required by the current version of AST. If future versions of
-         AST introduce new functions to the graphics interface, this switch will
-         cause ``unresolved symbol'' errors to occur during linking, warning you
-         that you need to implement new functions in your graphics module. To
-         avoid such errors, you can use one of the other, version-specific,
-         switches in place of the ``-grf'' switch, but these will cause run-time
-         errors to be reported if any AST function is invoked which requires
-         facilities not in the implemented interface.
-
-         \sstitem
-         ``-grf\_v2.0'': This switch is equivalent to the ``-mygrf'' switch.
-         It indicates that you want to link with your own graphics module which
-         implements the 2D graphics interface required by V2.0 of AST.
-
-         \sstitem
-         ``-grf\_v3.2'': Indicates that you want to link with your own graphics
-         module which implements the 2D graphics interface required by V3.2 of AST.
-
-         \sstitem
-         ``-myerr'': Requests that no arguments be generated to specify how
-         error messages produced by the AST library should be delivered. You
-         should use this option only if you have implemented an interface to a
-         new error delivery system yourself and wish to provide your own
-         arguments for linking with it. By default, error messages are delivered
-         in the standard ADAM way via the EMS Error Message Service (Starlink
-         \htmlref{System}{System} Note SSN/4).
-
-         \sstitem
-         ``-mygrf'': This switch has been superceeded by the ``-grf'' switch,
-         but is retained in order to allow applications to be linked with a
-         graphics module which implements the interface used by AST V2.0. It is
-         equivalent to the ``-grf\_v2.0'' switch.
-
-         \sstitem
-         ``-pgp'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot'': Requests that the program be linked so that 2D
-         graphical output from the AST library is displayed via the
-         standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-
-         \sstitem
-         ``-grf3d'': Requests that no arguments be generated to specify which
-         3D graphics system is used to display output from the AST library. You
-         should use this option only if you have implemented an interface to a
-         new 3D graphics system yourself and wish to provide your own arguments
-         for linking with it.
-
-         \sstitem
-         ``-pgp3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via the
-         Starlink version of the PGPLOT graphics package (which uses GKS
-         for its output). By default, no 3D graphics package is linked and
-         this will result in an error at run time if AST routines are
-         invoked that attempt to generate graphical output.
-
-         \sstitem
-         ``-pgplot3d'': Requests that the program be linked so that 3D
-         graphical output from the AST library is displayed via
-         the standard (or ``native'') version of the PGPLOT graphics
-         package. By default, no 3D graphics package is linked and this will
-         result in an error at run time if AST routines are invoked that
-         attempt to generate graphical output.
-      }
-   }
-   \sstdiytopic{
-      SLALIB
-   }{
-      The AST distribution includes a cut down subset of the C version of
-      the SLALIB library written by Pat Wallace. This subset contains only
-      the functions needed by the AST library. It is built as part of the
-      process of building AST and is distributed under GPL (and is thus
-      compatible with the AST license). Previous version of this script
-      allowed AST applications to be linked against external SLALIB
-      libraries (either Fortran or C) rather than the internal version.
-      The current version of this script does not provide this option,
-      and always uses the internal SLALIB library. However, for backward
-      compatibility, this script still allows the {\tt{"}}-fsla{\tt{"}} and {\tt{"}}-csla{\tt{"}} flags
-      (previously used for selecting which version of SLALIB to use) to be
-      specified, but they will be ignored.
-   }
-}
-\normalsize
-
-\newpage
-\section{\xlabel{FitsWcsCoverage}\label{ss:fitswcscoverage}FITS-WCS Coverage}
-
-This appendix gives details of the \htmlref{FitsChan}{FitsChan} class
-implementation of the conventions described in the FITS-WCS papers
-available at
-\htmladdnormallink{http://fits.gsfc.nasa.gov/fits\_wcs.html}
-{http://fits.gsfc.nasa.gov/fits_wcs.html}. These conventions are
-used only if the \htmlref{Encoding}{Encoding} attribute of the FitsChan
-has the value ``FITS-WCS'' (whether set explicitly or defaulted). It
-should always be possible for a \htmlref{FrameSet}{FrameSet} to be read
-(using the 
-\htmlref{astRead}{astRead}
-function) from a FitsChan containing a header which conforms to these 
-conventions. However, only those FrameSets which are compatible with the
-FITS-WCS model can be \emph{written} to a FitsChan using the
-\htmlref{astWrite}{astWrite}
-function. For instance, if the current \htmlref{Frame}{Frame} of a
-FrameSet is re-mapped using, say, an arbitrary \htmlref{MathMap}{MathMap}
-then the FrameSet will no longer be compatible with the FITS-WCS model,
-and so will not be written out successfully to a FitsChan.
-
-The following sub-sections describe the details of the implementation of
-each of the first four FITS-WCS papers. Here, the term ``pixel axes'' is
-used to refer to the FITS pixel coordinates (i.e. the centre of the 
-first image pixel has a value 1.0 on each pixel axis); the term ``IWC 
-axes'' is used to refer to the axes of the Intermediate World Coordinate 
-system; and the term ``WCS axes'' is used to refer to the axes of the final 
-physical coordinate system described by the CTYPE\emph{i} keywords.
-
-\subsection{Paper I - General Linear Coordinates}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, these conventions are used if the CTYPE\emph{i} keyword
-values within the FitsChan do not conform to the conventions described in
-later papers, in which case the axes are assumed to be linear. When
-writing a FrameSet to a FitsChan, these conventions are used for axes
-which are described by a simple \htmlref{Frame}{Frame} (\emph{i.e.} not a 
-\htmlref{SkyFrame}{SkyFrame}, \htmlref{SpecFrame}{SpecFrame}, \emph{etc.}).
-
-Table \ref{tab:fitspaper1} describes the use made by AST of each keyword
-defined by FITS-WCS paper I.
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}} 
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{WCSAXES\emph{a}}{Ignored.}{Set to the number of axes in the WCS
-Frame - only written if different to NAXIS.}
-
-\fitskey{CRVAL\emph{ia}}{Used to create the pixel to WCS
-\htmlref{Mapping}{Mapping}.}{Always written (see ``Choice of Reference
-Point'' below).}
-
-\fitskey{CRPIX\emph{ja}}{Used to create the pixel to WCS Mapping.}{Always
-written (see ``Choice of Reference Point'' below).}
-
-\fitskey{CDELT\emph{ia}}{Used to create the pixel to WCS Mapping.}{Only
-written if the \htmlref{CDMatrix}{CDMatrix} attribute of the FitsChan is 
-set to zero.}
-
-\fitskey{CROTA\emph{i}}{Used to create the pixel to WCS Mapping.}{Only
-written in FITS-AIPS and FITS-AIPS++ encodings.}
-
-\fitskey{CTYPE\emph{ia}}{Used to choose the class and attributes of the
-WCS Frame, and to create the pixel to WCS Mapping (note, ``STOKES'' and
-``COMPLEX'' axes are treated as unknown linear axes).}{Always written
-(see ``Use and Choice of CTYPE keywords'' below).}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attributes
-of the WCS Frame.}{Only written if the Units attribute of the WCS Frame
-has been set explicitly. If so, the Units value for each axis is used as
-the CUNIT value.}
-
-\fitskey{PC\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-zero.}
-
-\fitskey{CD\emph{i\_j}\emph{a}}{Used to create the pixel to WCS
-Mapping.}{Only written if the CDMatrix attribute of the FitsChan is set to
-a non-zero value.}
-
-\fitskey{PV\emph{i\_ma}}{Ignored for linear axes.}{Not written if the axes
-are linear.}
-
-\fitskey{PS\emph{i\_ma}}{Ignored.}{Not used.}
-
-\fitskey{WCSNAME\emph{a}}{Used to set the \htmlref{Domain}{Domain} attribute
-of the WCS Frame.}{Only written if the Domain attribute of the WCS Frame
-has been set explicitly. If so, the Domain value is used as the WCSNAME
-value.}
-
-\fitskey{CRDER\emph{ia}}{Ignored.}{Not used.}
-
-\fitskey{CSYER\emph{ia}}{Ignored.}{Not used.}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper I keywords}
-\label{tab:fitspaper1}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a simple Frame to a \htmlref{FitsChan}{FitsChan},
-success depends on the \htmlref{Mapping}{Mapping} from pixel coordinates
-(the base Frame in the FrameSet) to the WCS Frame being linear. The write
-operation will fail if this is not the case.
-
-\subsubsection{Use and Choice of CTYPE\emph{i} keywords}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} the CTYPE\emph{i} values in the FitsChan are used to set the
-Symbol attributes of the corresponding WCS \htmlref{Frame}{Frame}. The Label attributes of the WCS Frame are set from 
-the CNAME\emph{i} keywords, if present in the header. Otherwise they are set
-from the CTYPE\emph{i} comments strings in the header, so long as each
-axis has a unique non-blank comment. Otherwise, the Label attributes are
-set to the CTYPE\emph{i} values. The above procedure is over-ridden if
-the axis types conform to the conventions described in paper II or III,
-as described below.
-
-When writing a FrameSet to a FitsChan, each CTYPE\emph{i} value is set to
-the value of the Symbol attribute of the corresponding axis in the Frame
-being written. If a value has been set explicitly for the axis Label
-attribute, it is used as the axis comment (except that any existing
-comments in the FitsChan take precedence if the keyword value has not
-changed). The above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which
-case the CTYPE\emph{i} value is derived from the \htmlref{System}{System}
-attribute of the Frame and the nature of the pixel to WCS \htmlref{Mapping}{Mapping}
-according to the conventions of papers II and III, as described below.
-
-\subsubsection{Choice of Reference Point}
-When writing a \htmlref{FrameSet}{FrameSet} to a
-\htmlref{FitsChan}{FitsChan}, the pixel coordinates of the 
-reference point for linear axes (i.e. the CRPIX\emph{j} values) are 
-chosen as follows:
-
-\begin{itemize}
-\item If the FrameSet is being written to a FitsChan which previously
-contained a set of axis descriptions with the same identifying letter, 
-then the previous CRVAL\emph{j}values are converted into the coordinate system 
-of the \htmlref{Frame}{Frame} being written (if possible). These values are then
-transformed into the pixel Frame, and the closest integer pixel values
-are used as the CRPIX keywords.
-\item If the above step could not be performed for any reason, the
-central pixel is used as the reference point. This requires the image 
-dimensions to be present in the FitsChan in the form of a set of
-NAXIS\emph{j} keyword values.
-\item If both the above two steps failed for any axis, then the pixel
-reference position is set to a value of 1.0 on the pixel axis.
-\end{itemize}
-
-The pixel to WCS \htmlref{Mapping}{Mapping} is then used to find the corresponding
-CRVAL\emph{j}values.
-
-Again, the above procedure is over-ridden if the Frame is a
-\htmlref{SkyFrame}{SkyFrame} or a \htmlref{SpecFrame}{SpecFrame}, in which 
-case the conventions of papers II and III are used as described below.
-
-
-\subsubsection{Choice of Axis Ordering}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan}, WCS axis $i$ in the current
-\htmlref{Frame}{Frame} of the
-resulting FrameSet corresponds to axis $i$ in the FITS header.
-
-When writing a FrameSet to a FitsChan, the axis ordering for the FITS
-header is chosen to make the CD\emph{i\_j} or PC\emph{i\_j} matrix
-predominately diagonal. This means that the axis numbering in the FITS
-header will not necessarily be the same as that in the AST Frame.
-
-\subsubsection{Alternate Axis Descriptions}
-When reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} which contains alternate axis descriptions,
-each complete set of axis descriptions results in a single \htmlref{Frame}{Frame} being added 
-to the final FrameSet, connected via an appropriate 
-\htmlref{Mapping}{Mapping} to the base pixel Frame. The \htmlref{Ident}{Ident} attribute of the Frame is set to hold the single alphabetical 
-character which is used to identify the set of axis descriptions within 
-the FITS header (a single space is used for the primary axis descriptions).
-
-When writing a FrameSet to a FitsChan, it is assumed that the base Frame
-represents pixel coordinates, and the current Frame represents the
-primary axis descriptions. If there are any other Frames present in the
-FrameSet, an attempt is made to create a complete set of ``alternate''
-set of keywords describing each additional Frame. The first character in
-the Ident attribute of the Frame is used as the single character
-descriptor to be appended to the keyword, with the proviso that a given
-character can only be used once. If a second Frame is found with an Ident
-attribute which has already been used, its Ident attribute is ignored and
-the next free character is used instead. Note, failure to write a set of
-alternate axis descriptions does not result in failure of the entire
-write operation: the primary axis descriptions are still written,
-together with any other alternate axis descriptions which can be produced
-successfully.
-
-\subsection{Paper II - Celestial Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet}
-from a \htmlref{FitsChan}{FitsChan} containing appropriate CTYPE\emph{i} 
-values, and when writing a FrameSet in which the WCS \htmlref{Frame}{Frame}
-is a \htmlref{SkyFrame}{SkyFrame}.
-
-Table \ref{tab:fitspaper2} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper II. 
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}} 
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper II are supported (note, ``CUBEFACE'' axes are treated as
-unknown linear axes). In addition, "-HPX" (HEALPix) is supported.}{Determined by the \htmlref{System}{System} attribute 
-of the SkyFrame and the \htmlref{WcsType}{WcsType} attribute of the
-\htmlref{WcsMap}{WcsMap} within the FrameSet.}
-
-\fitskey{CUNIT\emph{ia}}{Ignored (assumed to be 'degrees').}{Not written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS \htmlref{Mapping}{Mapping} (values
-are stored as attributes of a WcsMap within this Mapping).}{Values are
-obtained from the WcsMap in the pixel to WCS Mapping.}
-
-\fitskey{LONPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a \htmlref{PVi\_m}{PVi_m} attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{LATPOLE\emph{a}}{Used to create the pixel to WCS Mapping. Also
-stored as a PV attribute for the longitude axis of the WcsMap.}{Only
-written if not equal to the default value defined in paper II (see
-``Choice of LONPOLE/LATPOLE'' below).}
-
-\fitskey{RADESYS\emph{a}}{Used to set the attributes of the SkyFrame. All
-values supported except that ecliptic coordinates are currently always
-assumed to be FK5.}{Always written. Determined by the System attribute of
-the SkyFrame.}
-
-\fitskey{EQUINOX\emph{a}}{Used to set the \htmlref{Equinox}{Equinox} attribute 
-of the SkyFrame.}{Written if relevant. Determined by the Equinox attribute of
-the SkyFrame.}
-
-\fitskey{EPOCH}{Used to set the Equinox attribute of the SkyFrame.}{Only
-written if using FITS-AIPS and FITS-AIPS++ encodings. Determined by the Equinox attribute
-of the SkyFrame.}
-
-\fitskey{MJD-OBS}{Used to set the \htmlref{Epoch}{Epoch} attribute of the 
-SkyFrame. DATE-OBS is used if MJD-OBS is not present. A default value based on
-RADESYS and EQUINOX is used if used if DATE-OBS is not present
-either.}{Determined by the Epoch attribute of the SkyFrame. Only written
-if this attribute has been set to an explicit value (in which case
-DATE-OBS is also written).}
-
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper II keywords}
-\label{tab:fitspaper2}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS
-\htmlref{Frame}{Frame} is a \htmlref{SkyFrame}{SkyFrame} to a
-\htmlref{FitsChan}{FitsChan}, success depends on the following conditions 
-being met:
-
-\begin{enumerate}
-\item The \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame 
-in the FrameSet) to the WCS SkyFrame includes a \htmlref{WcsMap}{WcsMap}.
-\item The Mapping prior to the WcsMap (\emph{i.e.} from pixel to IWC) is linear. 
-\item The Mapping after the WcsMap (\emph{i.e.} from native spherical to
-celestial coordinates) is a spherical rotation for the
-celestial axes, and linear for any other axes.
-\end{enumerate}
-
-If any of the above conditions do not hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Choice of LONPOLE/LATPOLE}
-When writing a \htmlref{FrameSet}{FrameSet} to a \htmlref{FitsChan}{FitsChan}, 
-the choice of LONPOLE and LATPOLE values is determined as follows:
-
-\begin{enumerate}
-
-\item If the projection represented by the \htmlref{WcsMap}{WcsMap} is 
-azimuthal, then any values set for attributes ``PV\emph{i}\_3'' 
-and ``PV\emph{i}\_4'' (where ``\emph{i}'' is the index of the longitude axis) 
-within the WcsMap are used as the LONPOLE and LATPOLE values. Reading a 
-FrameSet from a FITS-WCS header
-results in the original LONPOLE and LATPOLE values being stored within a
-WcsMap within the FrameSet. Consequently, if a FrameSet is read from a
-FITS-WCS header and it is subsequently written out to a new FITS-WCS
-header, the original LONPOLE and LATPOLE values will usually be used in
-the new header (the exception being if the WcsMap has been explicitly
-modified before being written out again). Any extra rotation of the sky
-is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this is
-possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is azimuthal but no
-values have been set for the ``PV\emph{i}\_3'' and ``PV\emph{i}\_4''
-attributes within the WcsMap, then the default LONPOLE and LATPOLE values
-are used. This results in no LONPOLE or LATPOLE keywords being stored in
-the header since default values are never stored. Any extra rotation of
-the sky is absorbed into the CD\emph{i\_j} or PC\emph{i\_j} matrix (this
-is possible only if the projection is azimuthal).
-
-\item If the projection represented by the WcsMap is not azimuthal,
-then the values of LONPOLE and LATPOLE are found by transforming the
-coordinates of the celestial north pole (\emph{i.e} longitude zero,
-latitude $+\pi/2$) into native spherical coordinates using the inverse of
-the \htmlref{Mapping}{Mapping} which follows the WcsMap.
-
-\end{enumerate}
-
-\subsubsection{User Defined Fiducial Points}
-When reading a \htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, projection parameters
-PV\emph{i}\_0, PV\emph{i}\_1 and PV\emph{i}\_2 (for longitude axis
-``\emph{i}'') are used to indicate a user-defined fiducial point as
-described in section 2.5 of paper II. This results in a shift of IWC
-origin being applied \emph{before} the \htmlref{WcsMap}{WcsMap} which converts 
-IWC into
-native spherical coordinates. The values of these projection parameters,
-if supplied, are stored as the corresponding \htmlref{PVi\_m}{PVi_m} attributes 
-of the WcsMap.
-
-When writing a FrameSet to a FitsChan, the PV attributes of the WcsMap
-determine the native coordinates of the fiducial point (the fixed
-defaults for each projection described in paper II are used if the PV
-attributes of the WcsMap have not been assigned a value). The
-corresponding celestial coordinates are used as the CRVAL\emph{i}
-keywords and the corresponding pixel coordinates as the CRPIX\emph{j}
-keywords.
-
-\subsubsection{Common Non-Standard Features}
-A collection of common non-standard features are supported when reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan}, in addition 
-to those embodied within the
-available encodings of the FitsChan class. These are translated into the
-equivalent standard features before being used to create a FrameSet.
-Note, the reverse operation is never performed: it is not possible to
-produce non-standard features when writing a FrameSet to a FitsChan
-(other than those embodied in the available encodings of the FitsChan
-class). The supported non-standard features include:
-
-\begin{itemize}
-\item EQUINOX keywords with string values equal to a date preceded
-by the letter B or J (\emph{e.g.} ``B1995.0''). 
-
-\item EQUINOX or EPOCH keywords with value zero  (these are converted to 
-B1950). 
-
-\item The IRAF ``ZPX'' projection is represented by a
-\htmlref{WcsMap}{WcsMap} with type of
-AST\_\_ZPN. \htmlref{Projection}{Projection} parameter values are read from any WAT\emph{i\_nnn}
-keywords, and corresponding \htmlref{PVi\_m}{PVi_m} attributes are set in the 
-WcsMap. The WAT\emph{i\_nnn} keywords may specify corrections to the basic 
-ZPN projection by including ``lngcor'' or ``latcor'' terms. There is no 
-direct equivalent in FITS-WCS to these terms and so they are ignored. If 
-these correction terms are found, ASTWARN keywords are added to the FitsChan 
-containing a warning message (but only if the \htmlref{Warnings}{Warnings}
-attribute of the FitsChan is set appropriately). 
-
-\item The IRAF ``TNX'' projection is represented by a WcsMap with type of
-AST\_\_TPN (a distorted TAN projection retained within the WcsMap class
-from an early draft of the FITS-WCS paper II). Projection parameter values
-are read from any WAT\emph{i\_nnn} keywords, and corresponding PV
-attributes are set in the WcsMap. If the TNX projection cannot be
-converted exactly into an AST\_\_TPN projection, ASTWARN keywords are
-added to the FitsChan containing a warning message (but only if the
-Warnings attribute of the FitsChan is set appropriately).
-
-\item ``QV'' parameters for TAN projections (as produced by 
-\htmladdnormallink{AUTOASTROM}{http://www.astro.gla.ac.uk/users/norman/star/autoastrom/} 
-are renamed to the equivalent ``PV'' parameters.
-
-\end{itemize}
-
-\subsection{Paper III - Spectral Coordinates}
-These conventions are used when reading a \htmlref{FrameSet}{FrameSet} 
-from a \htmlref{FitsChan}{FitsChan} which includes appropriate 
-CTYPE\emph{i} values, and when writing a FrameSet in which
-the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame}.
-
-Table \ref{tab:fitspaper3} describes the use made by AST of each keyword
-whose meaning is defined or extended by FITS-WCS paper III. 
-
-\begin{table}[htbp]
-\begin{tabular}{|l|p{2.5in}|p{2.5in}|}
-\hline
-\multicolumn{1}{|c|}{{\bf Keyword}} & \multicolumn{1}{c|}{{\bf Read}} 
-& \multicolumn{1}{c|}{{\bf Write}} \\ \hline
-
-\fitskey{CTYPE\emph{ia}}{All coordinate systems and projection types
-listed in paper III are supported, except for the ``-TAB''
-algorithm (the ``-LOG'' algorithm may also be applied to non-spectral linear 
-axes).}{Determined by the \htmlref{System}{System} attribute of the 
-SpecFrame and the nature of the pixel to SpecFrame
-\htmlref{Mapping}{Mapping}.}
-
-\fitskey{CUNIT\emph{ia}}{Used to set the Units attribute of 
-the SpecFrame (note, SpecFrames always have an ``active'' Units attribute
-(see \htmlref{astSetActiveUnit}{astSetActiveUnit}).}{Always written.}
-
-\fitskey{PV\emph{i\_ma}}{Used to create the pixel to WCS Mapping (values
-are stored as attributes of a \htmlref{GrismMap}{GrismMap}).}
-{Set from the attributes of the GrismMap, if present, and if set explicitly.}
-
-\fitskey{SPECSYS\emph{a}}{Used to set the \htmlref{StdOfRest}{StdOfRest}
-attribute of the SpecFrame (all systems are supported except CMBDIPOL).}
-{Set from the StdOfRest attribute of the SpecFrame, but only if it has been 
-set explicitly.}
-
-\fitskey{SSYSOBS\emph{a}}{Ignored.}{Never written.}
-
-\fitskey{OBSGEO-X/Y/Z}{Used to set the \htmlref{ObsLon}{ObsLon} and
-\htmlref{ObsLat}{ObsLat} attributes of the Frame (the observers
-height above sea level is ignored).}{Set from the ObsLon and ObsLat 
-attributes of the Frame, if they have been set explicitly (it is
-assumed that the observer is at sea level).}
-
-\fitskey{MJD-AVG}{Used to set the \htmlref{Epoch}{Epoch} attributes of
-the SpecFrame.}{Set from the Epoch attribute of the SpecFrame, if it has
-been set explicitly.}
-
-\fitskey{SSYSSRC\emph{a}}{Used to set the \htmlref{SourceVRF}{SourceVRF} attribute of the
-SpecFrame 
-(all systems are supported except CMBDIPOL).} {Set from the SourceVRF 
-attribute of the SpecFrame.}
-
-\fitskey{ZSOURCE\emph{a}}{Used to set the \htmlref{SourceVel}{SourceVel}
-attribute of the SpecFrame (the SourceVRF attribute
-is first set to the system indicated by the SSYSSRC keyword, and the 
-ZSOURCE value is then converted to an apparent radial velocity and stored
-as the SourceVel attribute).}
-{Set from the SourceVel attribute of
-the SpecFrame, if it has been set explicitly (the SourceVel value is
-first converted from apparent radial velocity to redshift).}
-
-\fitskey{VELOSYS\emph{a}}{Ignored.}{Set from the attributes of the
-SpecFrame that define the standard of rest and the observers position.}
-
-\fitskey{RESTFRQ\emph{a}}{Used to set the \htmlref{RestFreq}{RestFreq}
-attribute of the SpecFrame.}{Set from the RestFreq attribute of the
-SpecFrame, but only if the System attribute is not set to 
-``WAVE'', ``VOPT'', ``ZOPT'' or ``AWAV'', and only if RestFreq has been set 
-explicitly.}
-
-\fitskey{RESTWAV\emph{a}}{Used to set the RestFreq
-attribute of the SpecFrame (after conversion from wavelength to frequency).}
-{Set from the RestFreq attribute of the SpecFrame (after conversion), but only if the 
-System attribute is set to ``WAVE'', ``VOPT'', ``ZOPT'' or 
-``AWAV'', and only if RestFreq has been set explicitly.}
-
-\fitskey{CNAME\emph{ia}}{Used to set the Label attributes of 
-the WCS Frame keywords.}{Set from the Label attributes of the WCS Frame,
-if they have been set explicitly.}
-\hline
-\end{tabular}
-\vspace{3.mm}
-\caption{Use of FITS-WCS Paper III keywords}
-\label{tab:fitspaper3}
-\end{table}
-
-\subsubsection{Requirements for a Successful Write Operation}
-When writing a \htmlref{FrameSet}{FrameSet} in which the WCS \htmlref{Frame}{Frame} is a \htmlref{SpecFrame}{SpecFrame} to a 
-\htmlref{FitsChan}{FitsChan}, the write operation is successful only if
-the \htmlref{Mapping}{Mapping} from pixel coordinates (the base Frame 
-in the FrameSet) to the SpecFrame satisfies one of the following conditions:
-
-\begin{enumerate}
-\item It is linear.
-\item It is logarithmic.
-\item It is linear if the SpecFrame were to be re-mapped into one of the
-other spectral systems supported by FITS-WCS paper III.
-\item It contains a \htmlref{GrismMap}{GrismMap}, and the Mapping before the GrismMap (from
-pixel coordinates to grism parameter) is linear, and the Mapping after the 
-GrismMap is either null or represents a change of spectral system from wavelength (air or
-vacuum) to one of the supported spectral systems.
-\end{enumerate}
-
-If none of the above conditions hold, the write operation will be
-unsuccessful.
-
-\subsubsection{Common Non-Standard Features}
-The following non-standard features are supported when reading spectral
-axes from a \htmlref{FitsChan}{FitsChan}:
-
-\begin{itemize}
-\item Conversion of ``-WAV'', ``-FRQ'' and ``-VEL'' algorithm codes
-(specified in early drafts of paper III) to the corresponding 
-``-X2P'' form.
-\item Conversion of ``RESTFREQ'' to ``RESTFRQ''
-\end{itemize}
-
-\subsection{Paper IV - Coordinate Distortions}
-
-This paper proposes that an additional 4 character code be appended to
-the end of the CTYPE\emph{i} keyword to specify the nature of any
-distortion away from the basic algorithm described by the first 8
-characters of the CTYPE\emph{i} value. Currently AST ignores all such
-codes when reading a \htmlref{FrameSet}{FrameSet} from a
-\htmlref{FitsChan}{FitsChan} (except for the ``-SIP'' code
-defined by the SIRTF project - see below). This means that a FrameSet can
-still be read from such headers, but the \htmlref{Mapping}{Mapping} which 
-gives the WCS
-position associated with a given pixel position will reflect only the
-basic algorithm and will not include the effects of the distortion.
-
-If such a FrameSet is then written out to a FitsChan, the resulting 
-CTYPE\emph{i} keywords will include no distortion code.
-
-\subsubsection{The ``-SIP'' distortion code}
-
-The SIRTF project
-(\htmladdnormallink{http://sirtf.caltech.edu/SSC/}{http://sirtf.caltech.edu/SSC/})
-has developed its own system for encoding 2-dimensional image distortion
-within a FITS header, based on the proposals of paper IV. A description
-of this system is available in \htmladdnormallink
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}
-{http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}. In this
-system, the presence of distortion is indicated by appending the
-distortion code ``-SIP'' to the CTYPE\emph{i} keyword values for the
-celestial axes. The distortion takes the form of a polynomial function
-which is applied to the pixel coordinates, after subtraction of the
-CRPIX\emph{j} values.
-
-This system is a strictly 2 dimensional system. When reading a
-\htmlref{FrameSet}{FrameSet} from a \htmlref{FitsChan}{FitsChan} which 
-includes the ``-SIP'' distortion code, AST assumes that it
-is only applied to the first 2 WCS axes in a FITS header (i.e.
-CTYPE1 and CTYPE2). If the ``-SIP'' distortion code is attached to other
-axes, it will be ignored. The distortion itself is represented by a
-\htmlref{PolyMap}{PolyMap} within the resulting FrameSet.
-
-If a FrameSet is read from a FitsChan which includes ``-SIP''
-distortion, and an attempt is then made to write this FrameSet out to a
-FitsChan, the write operation will fail unless the distortion is
-insignificant (\emph{i.e.} is so small that the tests for linearity built
-into AST are passed). In this case, no distortion code will be appended to 
-the resulting CTYPE\emph{i} keyword values.
-
-\newpage
-\section{\xlabel{changes_and_new_features}\label{ss:changes}Changes and New Features}
-
-\subsection{Changes Introduced in V1.1}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.0 and V1.1 (not the most recent
-version):
-
-\begin{enumerate}
-
-\item A new ``How To\ldots'' section (\secref{ss:howto}) has been
-added to this document. It contains simple recipies for performing
-commonly-required operations using AST.
-
-\item A new \htmlref{astUnformat}{astUnformat} function has been provided to read formatted
-coordinate values for the axes of a \htmlref{Frame}{Frame}
-(\secref{ss:unformattingaxisvalues}). In essence, this function is the
-inverse of \htmlref{astFormat}{astFormat}. It may be used to decode user-supplied formatted
-values representing coordinates, turning them into numerical values
-for processing. Celestial coordinates may also be read using this
-function (\secref{ss:unformattingskyaxisvalues}) and free-format input
-is supported.
-
-\item The Format attribute string used by a \htmlref{SkyFrame}{SkyFrame} when formatting
-celestial coordinate values now allows the degrees/hours field to be
-omitted, so that celestial coordinates may be given in ({\em{e.g.}})
-arc-minutes and/or arc-seconds
-(\secref{ss:formattingskyaxisvalues}). As a result, the degrees/hours
-field is no longer included by default.  A new ``t'' format specifier
-has been introduced (see the Format attribute) to allow minutes and/or
-seconds of time to be specified if required.
-
-\item A new function \htmlref{astMapBox}{astMapBox} has been introduced. This allows you to
-find the extent of a ``bounding box'' which just encloses another box
-after it has been transformed by a \htmlref{Mapping}{Mapping}. A typical use might be to
-calculate the size which an image would have if it were transformed by
-the Mapping.
-
-\item A new class of \htmlref{Object}{Object}, the \htmlref{IntraMap}{IntraMap}, has been introduced
-(\secref{ss:intramaps}). This is a specialised form of Mapping which
-encapsulates a privately-defined coordinate transformation function
-({\em{e.g.}}\ written in C) so that it may be used like any other AST
-Mapping. This allows you to create Mappings that perform any
-conceivable coordinate transformation.
-
-\item The internal integrity of a \htmlref{FrameSet}{FrameSet} is now automatically
-preserved whenever changes are made to any attributes which affect the
-current Frame (either by setting or clearing their values). This is
-accomplished by appropriately re-mapping the current Frame to account
-for any change to the coordinate system which it represents
-(\secref{ss:framesetintegrity}).
-
-\item The internal structure of a FrameSet is now automatically tidied
-to eliminate redundant nodes whenever any of its Frames is removed or
-re-mapped. Automatic simplification of any compound Mappings which
-result may also occur. The effect of this change is to prevent the
-accumulation of unnecessary structure in FrameSets which are
-repeatedly modified.
-
-\item Some improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{astSimplify}{astSimplify}.
-
-\item The textual representation used for some Objects
-({\em{i.e.}}\ when they are written to a \htmlref{Channel}{Channel}) has changed
-slightly, but remains compatible with earlier versions of AST.
-
-\item Interfaces to the internal functions and macros used by AST for
-handling memory and error conditions are now provided {\em{via}} the
-``ast.h'' header file. This is for the benefit of those writing
-({\em{e.g.}}) new graphics interfaces for AST.
-
-\item A problem has been fixed which could result when using \htmlref{astRead}{astRead}
-to read FITS headers in which the CDELT value is zero. Previously,
-this could produce a Mapping whose inverse transformation was not
-defined and this could unnecessarily restrict the use to which it
-could be put. The problem has been overcome by supplying a suitable
-small CDELT value for FITS axes which have only a single pixel.
-
-\item A bug has been fixed which could occasionally cause a \htmlref{MatrixMap}{MatrixMap}
-to be used with the wrong \htmlref{Invert}{Invert} attribute value when it forms part of
-a compound Mapping which is being simplified using astSimplify.
-
-
-\item A problem has been fixed which could prevent tick marks being
-drawn on a coordinate axis close to a singularity in the coordinate
-system.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.2}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.1 and V1.2 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new function, \htmlref{astPolyCurve}{astPolyCurve}, has been introduced to allow more
-efficient plotting of multiple geodesic curves
-(\secref{ss:plottinggeodesics}).
-
-\item A new set of functions, \htmlref{astResample$<$X$>$}{astResampleX}, has been introduced
-to perform resampling of gridded data such as images
-({\em{i.e.}}\ re-gridding) under the control of a geometrical
-transformation specified by a \htmlref{Mapping}{Mapping}.
-
-\item The command-line options ``$-$pgp'' and ``$-$pgplot'', which
-were previously synonymous when used with the ``\htmlref{ast\_link}{ast_link}'' and
-``\htmlref{ast\_link\_adam}{ast_link_adam}'' commands, are no longer synonymous. The option
-``$-$pgp'' now causes linking with the Starlink version of PGPLOT
-(which uses GKS to generate its output), while ``$-$pgplot'' links
-with the standard (or ``native'') version of PGPLOT.
-
-\item The function \htmlref{astMapBox}{astMapBox} has been changed to execute more quickly,
-although this has been achieved at the cost of some loss of robustness
-when used with difficult Mappings.
-
-\item A new value of ``FITS-IRAF'' has been introduced for the
-\htmlref{Encoding}{Encoding} attribute of a \htmlref{FitsChan}{FitsChan}. This new encoding provides an
-interim solution to the problem of storing coordinate system
-information in FITS headers, until the proposed new FITS-WCS standard
-becomes stable.
-
-\item When a \htmlref{FrameSet}{FrameSet} is created from a set of FITS header cards (by
-reading from a FitsChan using a ``foreign'' encoding), the base \htmlref{Frame}{Frame}
-of the resulting FrameSet now has its \htmlref{Domain}{Domain} attribute set to
-``GRID''. This reflects the fact that this Frame represents FITS data
-grid coordinates (equivalent to FITS pixel coordinates---see
-\secref{ss:domainconventions}). Previously, this Domain value was not
-set.
-
-\item \htmlref{astFindFits}{astFindFits} now ignores trailing spaces in its keyword template.
-
-\item \htmlref{astPutFits}{astPutFits} now recognises ``D'' and ``d'' as valid exponent
-characters in floating point numbers.
-
-\item The FitsChan class is now more tolerant of common minor
-violations of the FITS standard.
-
-\item The FitsChan class now incorporates an improved test for the
-linearity of Mappings, allowing more reliable conversion of AST data
-into FITS (using ``foreign'' FITS encodings).
-
-\item Some further improvements have been made to the algorithms for
-simplifying compound Mappings, as used by \htmlref{astSimplify}{astSimplify}.
-
-\item A new \htmlref{UnitRadius}{UnitRadius} attribute has been added to the \htmlref{SphMap}{SphMap}
-class. This allows improved simplification of compound Mappings
-(CmpMaps) involving SphMaps and typically improves performance when
-handling FITS world coordinate information.
-
-\item A \htmlref{MatrixMap}{MatrixMap} no longer propagates input coordinate values of
-AST\_\_BAD automatically to all output coordinates. If certain output
-coordinates do not depend on the affected input coordinate(s) because
-the relevant matrix elements are zero, then they may now remain valid.
-
-\item A minor bug has been corrected which could cause certain
-projections which involve half the celestial sphere to produce valid
-coordinates for the other (unprojected) half of the sphere as well.
-
-\item A bug has been fixed which could occasionally cause \htmlref{astConvert}{astConvert}
-to think that conversion between a \htmlref{CmpFrame}{CmpFrame} and another Frame was
-possible when, in fact, it wasn't.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.3}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V1.2 and V1.3 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new set of functions, \htmlref{astResample$<$X$>$}{astResampleX}, has been introduced to
-provide	efficient resampling of gridded data, such as spectra and
-images, under the control of a geometrical transformation specified by
-a \htmlref{Mapping}{Mapping}. A variety of sub-pixel interpolation schemes are supported.
-
-\item A new class, \htmlref{PcdMap}{PcdMap}, has been introduced. This is a specialised
-form of Mapping which implements 2-dimensional pincushion or barrel
-distortion.
-
-\item A bug has been fixed which could cause a \htmlref{FitsChan}{FitsChan} to produce too
-many digits when formatting floating point values for inclusion in a
-FITS header if the numerical value was in the range -0.00099999\ldots
-to -0.0001.
-
-\item A bug has been fixed which could cause a FitsChan to lose the
-comment associated with a string value in a FITS header.
-
-\item A FitsChan now reports an error if it reads a FITS header which
-identifies a non-standard sky projection (previously, this was
-accepted without error and a Cartesian projection used instead).
-
-\item A bug has been fixed which could prevent conversion between the
-coordinate systems represented by two CmpFrames. This could only occur
-if the CmpFrames contained a relatively large number of nested Frames.
-
-%\item A bug has been fixed which could cause a program to crash if
-%FrameSets were nested inside each other (for example, if one \htmlref{FrameSet}{FrameSet}
-%had another FrameSet added to it for use as a \htmlref{Frame}{Frame} or Mapping). The
-%problem could only occur if the nested structure was loaded from a data
-%c+
-%file (using \htmlref{astRead}{astRead}).
-%c-
-%f+
-%file (using AST\_READ).
-%f-
-%
-\item Further improvements have been made to the simplification of
-compound Mappings, including fixes for several bugs which could cause
-indefinite looping or unwanted error messages.
-
-\item Some memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.4}
-
-The following describes the most significant changes which have occurred
-in the AST library between versions V1.3 and V1.4 (not the most recent
-version):
-
-\begin{enumerate}
-\item A new \htmlref{MathMap}{MathMap} class has been introduced. This is a form of
-\htmlref{Mapping}{Mapping} that allows you to define coordinate transformations in a
-flexible and transportable way using arithmetic operations and
-mathematical functions similar to those available in C.
-
-\item {\bf{WARNING---INCOMPATIBLE CHANGE.}} Transformation functions
-used with the \htmlref{IntraMap}{IntraMap} class (see, for example, \htmlref{astIntraReg}{astIntraReg}) now
-require a ``this'' pointer as their first parameter. {\bf{Existing
-implementations will not continue to work correctly with this version
-of AST unless this parameter is added.}} There is no need for existing
-software to make use of this pointer, but it must be present.
-
-This change has been introduced so that transformation functions can gain
-access to IntraMap attributes.
-
-\item A new \htmlref{IntraFlag}{IntraFlag} attribute has been added to the IntraMap
-class. This allows the transformation functions used by IntraMaps to
-adapt to produce the required transformation on a per-IntraMap basis
-(\secref{ss:intraflag}).
-
-\item The \htmlref{Plot}{Plot} attributes MajTickLen and MinTickLen, which control the
-length of major and minor tick marks on coordinate axes, may now be
-subscripted using an axis number. This allows tick marks of different
-lengths to be used on each axis. It also allows tick marks to be
-suppressed on one axis only by setting the length to zero.
-
-\item The value of the Plot attribute NumLab, which controls the
-plotting of numerical labels on coordinate axes, no longer has any
-effect on whether labelling of a coordinate grid is interior or
-exterior (as controlled by the \htmlref{Labelling}{Labelling} attribute).
-
-\item The \htmlref{FitsChan}{FitsChan} class now provides some support for the
-IRAF-specific ``ZPX'' sky projection, which is converted transparently
-into the equivalent FITS ``ZPN'' projection (see the description of the
-\htmlref{Encoding}{Encoding} attribute for details).
-
-\item The FitsChan class now recognises the coordinate system ``ICRS''
-(International Celestial Reference \htmlref{System}{System}) as equivalent to
-``FK5''. This is an interim measure and full support for the
-(exceedingly small) difference between ICRS and FK5 will be added at a
-future release.
-
-Note that ``ICRS'' is not yet recognised as a coordinate system by other
-classes such as \htmlref{SkyFrame}{SkyFrame}, so this change only facilitates the
-importation of foreign data.
-
-\item A bug in the FitsChan class has been fixed which could result in
-longitude values being incorrect by 180 degrees when using cylindrical
-sky projections, such as the FITS ``CAR'' projection.
-
-\item A bug in the FitsChan class has been fixed which could result in
-the FITS sky projection parameters ProjP(0) to ProjP(9) being
-incorrectly named PROJP1 to PROJP10 when written out as FITS cards.
-
-\item A bug in the FitsChan class has been fixed which could cause
-confusion between the FITS-IRAF and FITS-WCS encoding schemes if both
-a CD matrix and a PC matrix are erroneously present in a FITS header.
-
-\item Some minor memory leaks have been fixed.
-
-\item A small number of documentation errors have been corrected.
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.4 and V1.5 (not the most
-recent version):
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified to support the latest draft
-FITS WCS standard, described in the two papers ``Representation of world
-coordinates in FITS'' (E.W.\,Greisen and M.\,Calabretta, dated 30th
-November, 1999), and ``Representation of celestial coordinates in FITS''
-(M.\,Calabretta and E.W.\,Greisen, dated 24th September, 1999). These are
-available at
-\htmladdnormallink{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}
-{http://www.cv.nrao.edu/fits/documents/wcs/wcs.html}.
-
-The FITS-WCS encoding now uses these updated conventions. The main
-changes are:
-
-\begin{itemize}
-\item Rotation and scaling of pixel axes is now represented by a matrix
-of {\tt CDj\_i} keywords instead of a combination of {\tt PCjjjiii} and
-{\tt CDELTj} keywords.
-\item \htmlref{Projection}{Projection} parameters are now associated with particular axes and
-are represented by {\tt \htmlref{PVi\_m}{PVi_m}} keywords instead of the {\tt PROJPm}
-keywords.
-\item The tangent plane projection (``TAN'') can now include optional 
-polynomial correction terms.
-\item An entire set of keywords must be supplied for each set of secondary 
-axis descriptions, and each such keyword must finish with a single
-character indicating which set it belongs to. This means that keywords
-which previously occupied eight characters have been shorten to seven to
-leave room for this extra character. Thus {\tt LONGPOLE} has become {\tt
-LONPOLE} and {\tt RADECSYS} has become {\tt RADESYS}.
-\end{itemize}
-
-\item Two new encodings have been added to the FitsChan class:
-\begin{description}
-
-\item [FITS-PC] This encoding uses the conventions of the now superseded
-FITS WCS paper by E.W.\,Greisen and M.\,Calabretta which used keywords
-{\tt CDELTj} and {\tt PCjjjiii} to describe axis scaling and rotation.
-These are the conventions which were used by the FITS-WCS encoding prior
-to version 1.5 of AST. This encoding is provided to allow existing data
-which use these conventions to be read. It should not in general be used
-to create new data.
-
-\item [FITS-AIPS] This encoding is based on the conventions described in the 
-document ``Non-linear Coordinate Systems in AIPS'' by Eric W. Greisen
-(revised 9th September, 1994 and available by ftp from fits.cv.nrao.edu
-/fits/documents/wcs/aips27.ps.Z). This encoding uses {\tt CROTAi} and
-{\tt CDELTi} keywords to describe axis rotation and scaling.
-
-\end{description}
-
-\item The FitsChan class now provides some support for the IRAF-specific 
-``TNX'' sky projection, which is converted transparently into the
-equivalent FITS ``TAN'' projection (see the description of the \htmlref{Encoding}{Encoding}
-attribute for details).
-
-\item FrameSets originally read from a DSS encoded FITS header can now be
-written out using the FITS-WCS encoding (a TAN projection with correction
-terms will be used) in addition to the DSS encoding. The reverse is also
-possible: FrameSets originally read from a FITS-WCS encoded FITS header
-and which use a TAN projection can now be written out using the DSS
-encoding.
-
-\item The algorithm used by the FitsChan class to verify that a \htmlref{FrameSet}{FrameSet} 
-conforms to the FITS-WCS model has been improved so that FrameSets
-including more complex mixtures of parallel and serial Mappings
-can be written out using the FITS-WCS encoding.
-
-\item The FitsChan class has been changed so that long strings included in
-the description of an \htmlref{Object}{Object} can be saved and restored without truncation
-when using the NATIVE encoding. Previously, very long \htmlref{Frame}{Frame} titles,
-mathematical expressions, {\em etc.} were truncated if they exceeded the
-capacity of a single FITS header card. They are now split over several
-header cards so that they can be restored without truncation. Note, this
-facility is only available when using NATIVE encoding.
-
-\item The FitsChan class has a new attribute called \htmlref{Warnings}{Warnings} which
-can be used to select potentially dangerous conditions under which
-warnings should be issued. These conditions include (for instance)
-unsupported features within non-standard projections, missing keywords
-for which default values will be used, {\em etc}.
-
-\item The \htmlref{WcsMap}{WcsMap} class has been changed to support the changes made to the
-FITS-WCS encoding in the FitsChan class:
-\begin{itemize}
-\item Projection parameters are now associated with a particular axis and
-are specified using a new set of attributes called PVj\_m. Here, ``j'' is 
-the index of an axis of WcsMap, and ``m'' is the index of the projection 
-parameter.
-\item The old attributes ProjP(0) to ProjP(9) are still available but are
-now deprecated in favour of the new PVj\_m attributes. They are interpreted 
-as aliases for PV(axlat)\_0 to PV(axlat)\_9, where ``axlat'' is the index of 
-the latitude axis.
-\item The GLS projection projection has been renamed as SFL, but the 
-AST\_\_GLS type has been retained as an alias for AST\_\_SFL.
-\end{itemize}
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.5 and V1.6:
-
-\begin{enumerate}
-
-\item The C interface to several methods (\htmlref{astTranN}{astTranN}, \htmlref{astMark}{astMark} and
-\htmlref{astPolyCurve}{astPolyCurve}) have been changed to make them easier to call from C++.
-Parameters which previously had type ``double (*)[]'' have been changed
-to the simpler ``double *''. Using the old types may result in non-fatal
-compiler warnings, but should not change the behaviour of the methods.
-
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause groups 
-of tick marks to be skipped when using very small gaps.
-
-\item A bug has been fixed in the Plot class which could cause axes to be
-labeled outside the visible window, resulting in no axes being visible.
-
-\item The FITS-WCS encoding used by the \htmlref{FitsChan}{FitsChan} class now includes the
-WCSNAME keyword. When creating a \htmlref{FrameSet}{FrameSet} from FITS headers, the values of 
-the WCSNAME keywords are now used as the \htmlref{Domain}{Domain} names for the corresponding 
-Frames in the returned FrameSet. When writing a FrameSet to a FITS header
-the Domain names of each \htmlref{Frame}{Frame} are stored in WCSNAME keywords in the
-header. 
-
-\item The FITS-WCS encoding used by the FitsChan class now attempts to
-retain the identification letter associated with multiple axis
-descriptions. When reading a FrameSet from a FITS header, the identification 
-letter is stored in the \htmlref{Ident}{Ident} attribute for each Frame. When writing a
-FrameSet to a FITS header, the identification letter is read from the
-Ident attribute of each Frame. The letter to associate with each Frame
-can be changed by assigning a new value to the Frame's Ident attribute.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the 
-FitsChan class now create a \htmlref{SkyFrame}{SkyFrame} with the \htmlref{System}{System} attribute set to 
-``Unknown'' if the CTYPE keywords in the supplied header refers to an
-unknown celestial coordinate system. Previously, a Frame was used instead
-of a SkyFrame.
-
-\item The FITS-WCS, FITS-PC, FITS-IRAF and FITS-AIPS encodings used by the 
-FitsChan class no longer report an error if the FITS header contains no
-CTYPE keywords. It is assumed that a missing CTYPE keyword implies that 
-the world coordinate system is linear and identically equal to
-``intermediate world coordinates''.
-
-\item The new value ``noctype'' is now recognized by the \htmlref{Warnings}{Warnings} attribute 
-of the FitsChan class. This value causes warnings to be issued if CTYPE
-keywords are missing from foreign encodings.
-
-\item A new attribute called \htmlref{AllWarnings}{AllWarnings} has been added to the FitsChan 
-class. This is a read-only, space separated list of all the known condition 
-names which can be specified in the Warnings attribute.
-
-\item The FitsChan class now attempts to assigns a \htmlref{Title}{Title} to each Frame in
-a FrameSet read using a foreign encoding. The Title is based on the Domain
-name of the Frame. If the Frame has no Domain name, the default Title
-supplied by the Frame class is retained.
-
-\item The FitsChan class uses the comments associated with CTYPE
-keywords as axis labels when reading a foreign encoding. This behaviour 
-has been modified so that the default labels provided by the Frame class
-are retained (instead of using the CTYPE comments) if any of the CTYPE 
-comments are identical.
-
-\item A new ``interpolation'' scheme identified by the symbolic constant
-AST\_\_BLOCKAVE has been added to the AST\_RESAMPLE$<$X$>$ set of
-functions. The new scheme calculates each output pixel value by finding
-the mean of the input pixels in a box centred on the output pixel.
-
-\item The SkyFrame class can now be used to represent an arbitrary spherical
-coordinate system by setting its System attribute to ``Unknown''.
-
-\item The indices of the latitude and longitude axes of a SkyFrame can
-now be found using new read-only attributes \htmlref{LatAxis}{LatAxis} and \htmlref{LonAxis}{LonAxis}. The
-effects of any axis permutation is taken into account.
-
-\item A new attribute called Ident has been added to the \htmlref{Object}{Object} class.
-This serves the same purpose as the existing \htmlref{ID}{ID} attribute, but (unlike ID)
-its value is transferred to the new Object when a copy is made.
-
-\item A bug has been fixed which could prevent complex CmpFrames
-behaving correctly (for instance, resulting in the failure of attempts 
-to find a \htmlref{Mapping}{Mapping} between a \htmlref{CmpFrame}{CmpFrame} and itself).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.7}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.6 and V1.7:
-
-\begin{enumerate}
-
-\item The \htmlref{Frame}{Frame} class has a new method called 
-\htmlref{astAngle}{astAngle}
-which returns the angle subtended by two points at a third point within a
-2 or 3 dimensional Frame.
-
-\item The Frame class has a new method called 
-\htmlref{astOffset2}{astOffset2}
-which calculates a position which is offset away from a given starting
-point by a specified distance along a geodesic curve which passes
-through the starting point at a given position angle. It can only be used
-with 2-dimensional Frames.
-
-\item The Frame class has a new method called 
-\htmlref{astAxDistance}{astAxDistance}
-which returns the increment between two supplied axis values. For
-axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$.
-
-\item The Frame class has a new method called 
-\htmlref{astAxOffset}{astAxOffset}
-which returns an axis value a given increment away from a specified axis
-value. For axes belonging to SkyFrames, the returned value is normalized into
-the range $\pm\pi$ (for latitude axes) or zero to $2\pi$ (for longitude
-axes).
-
-\item The \htmlref{Plot}{Plot} class has a new method called 
-\htmlref{astGenCurve}{astGenCurve}
-which allows generalised user-defined curves to be drawn. The curve is
-defined by a user-supplied \htmlref{Mapping}{Mapping} which maps distance along the curve
-into the corresponding position in the current Frame of the Plot. The new
-method then maps these current Frame position into graphics coordinates,
-taking care of any non-linearities or discontinuities in the mapping.
-
-\item The Plot class has a new method called 
-\htmlref{astGrfSet}{astGrfSet} 
-which allows the underlying primitive graphics functions to be selected
-at run-time. Previously, the functions used by the Plot class to produce
-graphics could only be selected at link-time, using the options of the
-\htmlref{ast\_link}{ast_link} command. The new Plot method allows an application to over-ride
-the functions established at link-time, by specifying alternative
-primitive graphics routines. In addition, the two new Plot methods
-\htmlref{astGrfPush}{astGrfPush} and \htmlref{astGrfPop}{astGrfPop}
-allow the current graphics routines to be saved and restore on a
-first-in-last-out stack, allowing temporary changes to be made to the set
-of registered graphics routines.
-
-\item The DrawAxes attribute of the Plot class can now be specified
-independantly for each axis, by appending the axis index to the
-end of the attribute name.
-
-\item A bug has been fixed in the Plot class which could result in axis
-labels being drawn on inappropriate edges of the plotting box when using
-``interior'' labelling.
-
-\item A bug has been fixed in the \htmlref{IntraMap}{IntraMap} class which could cause IntraMaps
-to be corrupted after transforming any points.
-
-\item Bugs have been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-inappropriate ordering of headers within a FitsChan when writing or
-reading objects using NATIVE encodings.  
-
-\item A bug has been fixed in the FitsChan class which could cause the
-celestial longitude of a pixel to be estimated incorrectly by 180 degrees
-if the reference point is at either the north or the south pole. 
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.7 and V1.8-2:
-
-\begin{enumerate}
-
-\item The \htmlref{SkyFrame}{SkyFrame} class has a new attribute called \htmlref{NegLon}{NegLon} which allows
-   longitude values to be displayed in the range $-\pi$ to $+\pi$, instead 
-   of the usual range zero to $2.\pi$.
-
-\item Some new 
-functions (\htmlref{astAngle}{astAngle}, \htmlref{astAxAngle}{astAxAngle}, \htmlref{astResolve}{astResolve}, \htmlref{astOffset2}{astOffset2}, \htmlref{astAxOffset}{astAxOffset}, 
-\htmlref{astAxDistance}{astAxDistance}) 
-have been added to the \htmlref{Frame}{Frame} class to allow navigation of the coordinate space 
-to be performed without needing to know the underlying geometry
-of the co-ordinate system (for instance, whether it is Cartesian or
-spherical). 
-
-Note, version 1.8-1 contained many of these facilities, but 
-some have been changed in version 1.8-2. Particularly, positions angles
-are now referred to the second Frame axis for {\em all} classes of Frames
-(including SkyFrames), and the 
-astBear function has been replaced by astAxAngle.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-3}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-2 and V1.8-3:
-
-\begin{enumerate}
-
-\item A new method called \htmlref{astDecompose}{astDecompose} has been added to the \htmlref{Mapping}{Mapping} class
-which enables pointers to be obtained to the component parts of \htmlref{CmpMap}{CmpMap} and 
-\htmlref{CmpFrame}{CmpFrame} objects.
-
-\item Functions within proj.c and wcstrig.c have been renamed to avoid name 
-clashes with functions in more recent versions of Mark Calabretta's wcslib 
-library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-4}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-3 and V1.8-4:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has a new attribute called \htmlref{DefB1950}{DefB1950} which can be 
-used to select the default reference frame and equinox to be used if
-a FitsChan with foreign encoding contains no indication of the
-reference frame or equinox.
-
-\item A bug has been fixed in the FitsChan class which could prevent
-\htmlref{astWrite}{astWrite} from creating a set of FITS headers from an otherwise valid
-\htmlref{FrameSet}{FrameSet}, when when using FITS-AIPS encoding.
-
-\item A bug has been fixed in the FitsChan class which could cause
-\htmlref{astRead}{astRead} to mis-interpret the FITS CROTA keyword when using FITS-AIPS 
-encoding.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-5}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V1.8-4 and V1.8-5:
-
-\begin{enumerate}
-
-\item The \htmlref{Plot}{Plot} class defines new graphical elements Axis1, Axis2,
-Grid1, Grid2, NumLabs1, NumLabs2, TextLab1, TextLab2, Ticks1 and Ticks2.
-These allow graphical attributes (colour, width, etc) to be set for each
-axis individually. Previously, graphical attributes could only be set for
-both axes together, using graphical elements Axes, \htmlref{Grid}{Grid}, NumLabs,
-TextLabs and Ticks.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-5 and V1.8-7:
-
-\begin{enumerate}
-
-\item A new attribute called \htmlref{CarLin}{CarLin} has been added to the \htmlref{FitsChan}{FitsChan} class
-which controls the way CAR projections are handled when reading a
-\htmlref{FrameSet}{FrameSet} from a non-native FITS header. Some FITS writers use a CAR 
-projection to represent a simple linear transformation between pixel
-coordinates and celestial sky coordinates. This is not consistent with
-the definition of the CAR projection in the draft FITS-WCS standard, which
-requires the resultant \htmlref{Mapping}{Mapping} to include a 3D rotation from native
-spherical coordinates to celestial spherical coordinates, thus making the
-Mapping non-linear. Setting CarLin to 1 forces 
-\htmlref{astRead}{astRead}
-to ignore the FITS-WCS standard and treat any CAR projections as simple 
-linear Mappings from pixel coordinates to celestial coordinates.
-
-\item A bug has been fixed which could result in axis Format attributes
-set by the user being ignored under certain circumstances.
-
-\item A bug in the way tick marks positions are selected in the \htmlref{Plot}{Plot} class
-has been fixed. This bug could result in extra ticks marks being displayed at 
-inappropriate positions. This bug manifested itself, for instance, if the 
-Mapping represented by the Plot was a simple Cartesian to Polar Mapping.
-In this example, the bug caused tick marks to be drawn at negative radius
-values.
-
-\item A bug has been fixed which could prevent attribute settings from
-being read correctly by 
-\htmlref{astSet}{astSet},
-etc., on certain platforms (MacOS, for instance).
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V1.8-8}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V1.8-7 and V1.8-8:
-
-\begin{enumerate}
-
-\item A bug has been fixed in the \htmlref{FitsChan}{FitsChan} class which could cause
-problems when creating a \htmlref{FrameSet}{FrameSet} from a FITS header containing WCS
-information stored in the form of Digitised Digitised Sky Survey (DSS) 
-keywords. These problems only occurred for DSS fields in the southern
-hemisphere, and resulted in pixel positions being mapped to sky positions
-close to the corresponding {\em northern} hemispshere field.
-
-\item A new method called 
-\htmlref{astBoundingBox}{astBoundingBox}
-has been added to the \htmlref{Plot}{Plot} class. This method returns the bounding box of
-the previous graphical output produced by a Plot method.
-
-\item A new attribute called \htmlref{Invisible}{Invisible} has been added to the Plot class
-which suppresses the graphical output normally produced by Plot methods.
-All the calculations needed to produce the normal output are still
-performed however, and so the bounding box returned by the new 
-astBoundingBox
-method is still usable.
-
-\item Bugs have been fixed related to the appearance of graphical output 
-produced by the Plot class. These bugs were to do with the way in which 
-graphical elements relating to a specific axis (e.g. {\tt Colour(axis1)}, etc.) 
-interacted with the corresponding generic element (e.g. 
-{\tt Colour(axes)}, etc.).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V1.8-13}
-
-The following describes the most significant changes which occurred
-in the AST library between versions V1.8-8 and V1.8-13:
-
-\begin{enumerate}
-
-\item The \htmlref{FitsChan}{FitsChan} class has been modified so that LONPOLE keywords
-are only produced by \htmlref{astWrite}{astWrite} when necessary. For zenithal projections such as 
-TAN, the LONPOLE keyword can always take its default value and so is
-not included in the FITS header produced by astWrite.
-Previously, the unnecessary production of a LONPOLE keyword could prevent
-FrameSets being written out using encodings which do not support the
-LONPOLE keyword (such as FITS-IRAF).
-
-\item The FitsChan class has been modified to retain leading and trailing
-spaces within COMMENT cards.
-
-\item The FitsChan class has been modified to only use CTYPE comments as 
-axis labels if all non-celestial axes have unique non-blank comments
-(otherwise the CTYPE keyword values are used as labels).
-
-\item The FitsChan class has been modified so that it does not append a
-trailing ``Z'' character to the end of DATE-OBS keyword values.
-
-\item The FitsChan class has been modified to use latest list of FITS-WCS 
-projections, as described in the FITS-WCS paper II, ``Representations of
-celestial coordinates in FITS'' (Calabretta \& Greisen, draft dated 23
-April 2002). Support has been retained for the polynomial correction
-terms which previous drafts have allowed to be associated with TAN
-projections. 
-
-\item The \htmlref{WcsMap}{WcsMap} class has additional projection types of AST\_\_TPN
-(which implements a distorted TAN projection) and AST\_\_SZP. The AST\_\_TAN
-projection type now represents a simple TAN projection and has no 
-associated projection parameters. In addition, the usage of projection 
-parameters has been brought into line with the the FITS-WCS paper II. 
-
-\item The WcsMap class has been modified so that a ``get'' operation on a
-projection parameter attribute will return the default value defined in the
-FITS-WCS paper II if no value has been set for the attribute. Previously, a
-value of AST\_\_BAD was returned in such a situation.
-
-\item The \htmlref{Frame}{Frame} class has new attributes \htmlref{Top(axis)}{Topaxis} and \htmlref{Bottom(axis)}{Bottomaxis} which
-allow a ``plottable range'' to be specified for each Frame axis. The grid
-produced by the \htmlref{astGrid}{astGrid} method will not extend beyond these limits.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V2.0}
-
-Note, \htmlref{Frame}{Frame} descriptions created using AST V2.0 will not be readable by 
-applications linked with earlier versions of AST. This applies to Frame
-descriptions created using:
-\begin{itemize}
-\item the \htmlref{Channel}{Channel} class
-\item the \htmlref{FitsChan}{FitsChan} class if the NATIVE \htmlref{Encoding}{Encoding} is used
-\item the \htmlref{astShow}{astShow} function
-\end{itemize}
-
-Applications must be re-linked with AST V2.0 in order to be able to read
-Frame descriptions created by AST v2.0.
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V1.8-13 and V2.0 (the
-current version):
-
-\begin{enumerate}
-
-\item The default value for the \htmlref{Domain}{Domain} attribute provided by the \htmlref{CmpFrame}{CmpFrame} 
-class has been changed from ``CMP'' to a string formed by concatenating
-the Domain attributes of the two component Frames, separated by a minus
-sign. If both component Domains are blank, then the old default of
-``CMP'' is retained for the CmpFrame Domain.
-
-\item The implementation of the 
-\htmlref{astWrite}{astWrite} function
-within the FitsChan class has been modified. It will now attempt to
-produce a set of FITS header cards to describe a \htmlref{FrameSet}{FrameSet} even if the
-number of axes in the \htmlref{Current}{Current} Frames is greater than the number in the
-\htmlref{Base}{Base} Frame (that is, if there are more WCS axes than pixel axes). This
-has always been possible with NATIVE encoding, but has not previously
-been possible for foreign encodings. The WCSAXES keyword is used to store
-the number of WCS axes in the FITS header.
-
-\item Another change to the 
-astWrite function
-within the FitsChan class is that the ordering of ``foreign'' axes
-(\emph{i.e.} CTYPE keywords) is now chosen to make the CD (or PC) matrix
-as diagonal as possible - any element of axis transposition is removed by
-this re-ordering as recommended in FITS-WCS paper I. Previously the
-ordering was determined by the order of the axes in the Current Frame of
-the supplied FrameSet. This change does not affect NATIVE encoding.
-
-\item Support for spectral coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{SpecFrame}{SpecFrame} and \htmlref{SpecMap}{SpecMap}.
-The SpecFrame is a 1-dimensional Frame which can be used to describe
-positions within an electromagnetic spectrum in various systems
-(wavelength, frequency, various forms of velocity,~{\em{etc.}}) and referred
-to various standards of rest (topocentric, geocentric, heliocentric
-LSRK,~{\em{etc.}}). The SpecMap is a \htmlref{Mapping}{Mapping} which can transform spectral
-axis values between these various systems and standards of rest. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not yet able to read or write these new classes.
-
-\item Facilities have been added to the Frame class which allow
-differences in axis units to be taken into account when finding a Mapping
-between two Frames. In previous versions of AST, the Unit attribute was a
-purely descriptive item intended only for human readers - changing the
-value of Unit made no difference to the behaviour of the Frame. As of
-version 2.0, the Unit attribute can influence the nature of the Mappings
-between Frames. For instance, if the 
-astFindrame or \htmlref{astConvert}{astConvert}
-method is used to find the Mapping between an \htmlref{Axis}{Axis} with Unit set to ``m''
-and another Axis with Unit set to ``km'', then the method will return a 
-\htmlref{ZoomMap}{ZoomMap} which introduces a scaling factor of 0.001 between the two axes.
-These facilities assume that units are specified following the rules
-included in FITS-WCS paper I ({\em Representation of World
-Coordinates in FITS}, Greisen \& Calabretta).
-
-In order to minimise the risk of breaking existing software, the default 
-behaviour for simple Frames is to ignore the Unit attribute ({\em{i.e.}}
-to retain the previous behaviour). However, the new Frame method 
-\htmlref{astSetActiveUnit}{astSetActiveUnit}
-may be used to ``activate'' (or deactivate) the new facilities within a 
-specific Frame. Note, the new SpecFrame class is different to the simple
-Frame class in that the new facilities for handling units are always active
-within a SpecFrame. 
- 
-\item The \htmlref{System}{System} and \htmlref{Epoch}{Epoch} attributes fo the \htmlref{SkyFrame}{SkyFrame} class have been
-moved to the parent Frame class. This enables all sub-classes of Frame
-(such as the new SpecFrame class) to share these attributes, and to provide
-suitable options for each class.
-
-\item The Frame class has a new attribute called \htmlref{AlignSystem}{AlignSystem}, which allows 
-control over the alignment process performed by the methods 
-\htmlref{astFindFrame}{astFindFrame} and astConvert.
-
-
-\item The CmpFrame class has been modified so that attributes of a 
-component Frame can be accessed without needing to extract the Frame first.
-To do this, append an axis index to the end of the attribute name. For
-instance, if a CmpFrame contains a SpecFrame and a SkyFrame (in that order), 
-then the \htmlref{StdOfRest}{StdOfRest} attribute of the SpecFrame can be referred to as the
-``StdOfRest(1)'' attribute of the CmpFrame. Likewise, the \htmlref{Equinox}{Equinox} attribute
-of the SkyFrame can be accessed as the ``Equinox(2)'' (or equivalently
-``Equinox(3)'') attribute of the CmpFrame. The ``System(1)'' attribute of the
-CmpFrame will refer to the System attribute of the SpecFrame, whereas the 
-``System(2)'' and ``System(3)'' attributes of the CmpFrame will refer to the
-System attribute of the SkyFrame (the ``System'' attribute without an axis
-specifier will refer to the System attribute of the CmpFrame as a whole,
-since System is an attribute of all Frames, and a CmpFrame is a Frame and
-so has its own System value which is independant of the System attributes
-of its component Frames).
-
-\item The algorithms used by the \htmlref{Plot}{Plot} class for determining when to omit
-overlapping axis labels, and the abbreviation of redundant leading fields 
-within sexagesimal axis labels, have been improved to avoid some anomolous
-behaviour in previous versions.
-
-\item The curve drawing algorithm used by the Plot class has been
-modified to reduce the chance of it ``missing'' small curve sections,
-such as may be produced if a grid line cuts across the plot very close to
-a corner. Previously, these missed sections could sometimes result in 
-axis labels being omitted.
-
-\item A new function
-(\htmlref{astVersion}{astVersion})
-has been added to return the version of the AST library in use.
-
-\item Bugs have been fixed in the Plot class which caused serious problems
-when plotting high precision data. These problems could range from the
-omission of some tick marks to complete failure to produce a plot.
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.0}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V2.0 and V3.0:
-
-\begin{enumerate}
-
-\item Many changes have been made in the \htmlref{FitsChan}{FitsChan} class in order to bring
-the FITS-WCS encoding into line with the current versions of the FITS-WCS
-papers (see \htmladdnormallink{http://www.atnf.csiro.au/people/mcalabre/WCS/}
-{http://www.atnf.csiro.au/people/mcalabre/WCS/}):
-
-\begin{itemize}
-
-\item The rotation and scaling of the pixel axes may now be specified using
-either CD\emph{i\_j} keywords, or PC\emph{i\_j} and CDELTj keywords. A new attribute
-called \htmlref{CDMatrix}{CDMatrix} has been added to the FitsChan class to indicate which
-set of keywords should be used when writing a \htmlref{FrameSet}{FrameSet} to a FITS-WCS
-header.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB'' 
-algorithm code) is not supported.
-
-
-\item User-specified fiducial points for WCS projections are now
-supported by FitsChans which use FITS-WCS encoding. This use keywords
-PVi\_0, PVi\_1 and PVi\_2 for the longitude axis.
-
-\item  When reading a FITS-WCS header, a FitsChan will now use keywords PVi\_3 
-and PVi\_4 for the longitude axis (if present) in preference to any LONPOLE 
-and LATPOLE keywords which may be present. When writing a FITS-WCS header, 
-both forms are written out.
-
-\item The number of WCS axes is stored in the WCSAXES keyword if its value
-would be different to that of the NAXIS keyword.
-
-\item Helio-ecliptic coordinates are now supported by FitsChans which use 
-FITS-WCS encoding. This uses CTYPE codes ``HLON'' and ``HLAT''. The
-resulting \htmlref{SkyFrame}{SkyFrame} will have a \htmlref{System}{System} value of ``HELIOECLIPTIC'', and all
-the usual facilities, such as conversion to other celestial systems, are
-available.
-
-\item The FITS-WCS encoding now supports most of the conventions
-described in FITS-WCS paper III for the description of spectral
-coordinates. The exceptions are that the SSYSOBS keyword is not
-supported, and WCS stored in tabular form (as indicated by the ``-TAB'' 
-algorithm code) is not supported.
-
-\item When reading a FITS-WCS header, a FitsChan will now ignore any
-distortion codes which are present in CTYPE keywords. Here, a ``distortion 
-code'' is the final group of four characters in a CTYPE value of the
-form ``xxxx-yyy-zzz'', as described in FITS-WCS paper IV. The exception
-to this is that the ``-SIP'' distortion code (as used by the SIRTF
-project - see 
-\htmladdnormallink{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}{
-http://sirtf.caltech.edu/SSC/documents/WCSkeywords\_v1.3.pdf}) is
-interpreted correctly and results in a \htmlref{PolyMap}{PolyMap} being used to represent
-the distortion in the resulting FrameSet. Note, ``-SIP'' distortion codes
-can only be read, not written. A FrameSet which uses a PolyMap will not
-in general be able to be written out to a FitsChan using any foreign
-encoding (although NATIVE encoding can of course be used).
-
-\item The \htmlref{Warnings}{Warnings} attribute of the FitsChan class now accepts values 
-``BadVal'' (which gives warnings about conversion errors when reading 
-FITS keyword values), ``Distortion'' (which gives warnings about
-unsupported distortion codes within CTYPE values), and ``BadMat'' (which
-gives a warning if the rotation/scaling matrix cannot be inverted).
-
-\item When writing a FrameSet to a FitsChan which uses a non-Native
-encoding, the comment associated with any card already in the FitsChan
-will be retained if the keyword value being written is the same as the
-keyword value already in the FitsChan.
-
-\item A FrameSet which uses the non-FITS projection type AST\_\_TPN (a TAN 
-projection with polynomial distortion terms) can now be written to a 
-FitsChan if the \htmlref{Encoding}{Encoding} attribute is set to FITS-WCS. The standard
-``-TAN'' code is used within the CTYPE values, and the distortion
-coefficients are encoded in keywords of the form `` QVi\_ma'', which are 
-directly analogous to the standard ``PVi\_ma'' projection parameter keywords.
-Thus a FITS reader which does not recognise the QV keywords will still
-be able to read the header, but the distortion will be ignored.
-
-\item The default value for \htmlref{DefB1950}{DefB1950} attribute now depends on the value
-of the Encoding attribute. 
-
-\item A new appendix has been added to SUN/210 and SUN/211 giving details
-of the implementation provided by the FitsChan class of the
-conventions contained in the first four FITS-WCS papers.
-\end{itemize}
-
-\item The SkyFrame class now supports two new coordinate systems ``ICRS''
-and ``HELIOECLIPTIC''. The default for the System attribute for SkyFrames 
-has been changed from ``FK5'' to ``ICRS''.
-
-\item The 
-\htmlref{astRate}{astRate}
-function has been added which allows an estimate to be made of the rate of 
-change of a \htmlref{Mapping}{Mapping} output with respect to one of the Mapping inputs. 
-
-\item All attribute names for Frames of any class may now include an optional
-axis specifier. This includes those attributes which describe a property
-of the whole \htmlref{Frame}{Frame}. For instance, the \htmlref{Domain}{Domain} attribute may now be
-specified as ``Domain(1)'' in addition to the simpler ``Domain''. In cases
-such as this, where the attribute describes a property of the whole
-Frame, axis specifiers will usually be ignored. The exception is that a
-\htmlref{CmpFrame}{CmpFrame} will use the presence of an axis specifier to indicate that the
-attribute name relates to the primary Frame containing the specified
-axis, rather than to the CmpFrame as a whole.
-
-\item A new subclass of Mapping, the PolyMap, has been added which
-performs a general N-dimensional polynomial mapping.
-
-\item A new subclass of Mapping, the \htmlref{GrismMap}{GrismMap}, has been added which
-models the spectral dispersion produced by a grating, prism or grism.
-
-\item A new subclass of Mapping, the \htmlref{ShiftMap}{ShiftMap}, has been added which adds
-constant values onto all coordinates (this is equivalent to a \htmlref{WinMap}{WinMap}
-with unit scaling on all axes).
-
-\item Minor bugs have been fixed within the \htmlref{Plot}{Plot} class to do with the choice 
-and placement of numerical axis labels.
-
-\item The \htmlref{SphMap}{SphMap} class has a new attribute called \htmlref{PolarLong}{PolarLong} which gives the 
-longitude value to be returned when a Cartesian position corresponding to 
-either the north or south pole is transformed into spherical coordinates.
-
-\item The \htmlref{WcsMap}{WcsMap} class now assigns a longitude of zero to output
-celestial coordinates which have a latitude of plus or minus 90 degrees.
-
-\item The \htmlref{NatLat}{NatLat} and \htmlref{NatLon}{NatLon} attributes of the WcsMap class have been
-changed so that they now return the fixed native coordinates of the
-projection reference point, rather than the native coordinates of the
-user-defined fiducial point. 
-
-\item Notation has been changed in both the WcsMap and FitsChan classes to 
-reflect the convention used in the FITS-WCS papers that index ``i'' refers
-to a world coordinate axis, and index ``j'' refers to a pixel axis.
-
-\item Changes have been made to several Mapping classes in order to allow
-the 
-\htmlref{astSimplify}{astSimplify}
-function to make simplifications in a \htmlref{CmpMap}{CmpMap} which previously were not
-possible.
-
-\item The \htmlref{SlaMap}{SlaMap} class has been extended by the addition of conversions
-between FK5 and ICRS coordinates, and between FK5 and helio-ecliptic coordinates.
-
-\item The \htmlref{SpecMap}{SpecMap} class has been changed to use the equation for the
-refractive index of air as given in the current version of FITS-WCS paper
-III. Also, the forward and inverse transformations between frequency and
-air-wavelength have been made more compatible by using an iterative
-procedure to calculate the inverse.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.0 and V3.1 (the
-current version):
-
-\begin{enumerate}
-\item Addition of a new class called \htmlref{XmlChan}{XmlChan} - a \htmlref{Channel}{Channel} which 
-reads and writes AST objects in the form of XML.
-\item A bug has been fixed in the \htmlref{Plot}{Plot} class which could cause incorrect
-graphical attributes to be used for various parts of the plot if either
-axis has no tick marks (i.e. if both major and minor tick marks have zero
-length).
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-
-\subsection{Changes Introduced in V3.2}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.1 and V3.2:
-
-\begin{enumerate}
-
-\item A new
-function \htmlref{astPutCards}{astPutCards}
-has been added to the \htmlref{FitsChan}{FitsChan} class. This allows multiple concatenated header 
-cards to be stored in a FitsChan in a single call, providing an alternative to 
-the existing
-astPutCards function.
-
-\item Some signficant changes have been made to the simplification of Mappings
- which should resultin a greater degree of simplication taking place.Some
- bugs have also been fixed which could result in an infinite loop being
- entered when attempting to simplify certain Mappings.
-
-\item The FitsChan class now translates the spectral algorithm codes 
-``-WAV'', ``-FRQ'' and ``-VEL'' (specified in early drafts of paper III) to 
-the corresponding ``-X2P'' form when reading a spectral axis description
-from a set of FITS header cards.
-
-\item A bug has been fixed in the FitsChan class which could cause 
-keywords associated with alternate axis descriptions to be mis-interpreted.
-
-\item The \htmlref{Plot}{Plot} class now provides facilities for modifying the appearance
-of sub-strings within text strings such as axis labels, titles, \emph{etc},
-by producing super-scripts, sub-scripts, changing the font colour, size, 
-\emph{etc}. See attribute \htmlref{Escape}{Escape}.
-
-\item The default value of the \htmlref{Tol}{Tol} attribute of the Plot class has been
-changed from 0.001 to 0.01. This should not usually cause any significant 
-visible change to the plot, but should make the plotting faster. You may
-need to set a lower value for Tol if you are producing a particularly
-large plot.
-
-\item The algorithm for finding the default value for the Gap attribute
-has been changed. This attribute specifies the gap between major axis
-values in an annotated grid drawn by the Plot class. The change in
-algorithm may cause the default value to be different to previous versions 
-in cirtain circumstances.
-
-\item Some bugs have been fixed in the Plot class which could cause the
-system to hang for a long time while drawing certain all-sky grids
-(notable some of the FITS Quad-cube projections).
-
-\item The \htmlref{SkyAxis}{SkyAxis} class has extended the Format attribute by the addition
-of the ``g'' option. this option is similar to the older ``l'' option in that 
-it results in characters (``h'', ``m'', ``s'', \emph{etc}) being used as 
-delimiters between the sexagesimal fields of the celestial position. The
-difference is that the ``g'' option includes graphics escape sequences
-in the returned formatted string which result in the field delimiter 
-characters being drawn as super-scripts when plotted as numerical axis values 
-by a Plot.
-
-\item The Plot class has been extended to include facilities for producing
-logarithmic axes. See attributes LogPlot, LogTicks, LogGap and LogLabel.
-
-\item New functions astGCap and astGScales have been added to the interface
-defined by file \verb+grf.h+. The \htmlref{ast\_link}{ast_link} command has been modified so
-that the \verb+-mygrf+ switch loads dummy versions of the new grf
-functions. This means that applications should continue to build without
-any change. However, the facilities for interpreting escape sequences
-within strings drawn by the Plot class will not be available unless the
-new grf functions are implemented. If you choose to implement them, you
-should modify your linking procedure to use the \verb+-grf+ switch in
-place of the older \verb+-mygrf+ switch. See the description of the ast\_link 
-command for details of the new switches. Also note that the astGQch
-function, whilst included in verb+grf.h+ in pervious versions of AST, was
-not actually called. As of this version of AST, calls are made to the 
-astGQch function, and so any bugs in the implementation of astGQch may
-cause spurious behaviour when plotting text strings.
-
-\item A new 'static' method called \htmlref{astEscapes}{astEscapes} has been added which is used 
-to control and enquire whether astGetC and \htmlref{astFormat}{astFormat} will strip any graphical 
-escape sequences which may be present out of the returned value.
-
-\item New attribute \htmlref{XmlPrefix}{XmlPrefix} has been added to the \htmlref{XmlChan}{XmlChan} class. It
-allows XML written by the XmlChan class to include an explicit namespace
-prefix on each element.
-
-\item New attribute \htmlref{XmlFormat}{XmlFormat} has been added to the XmlChan class. It
-specifies the format in which AST objects should be written.
-
-\item A new class of \htmlref{Mapping}{Mapping}, the \htmlref{TranMap}{TranMap}, has been introduced. A TranMap
-takes its forward transformation from an existing Mapping, and its inverse
-transformation from another existing Mapping.
-
-\item A bug has been fixed in \htmlref{WcsMap}{WcsMap} which caused error reports to
-include erroneous axis numbers when referring to missing parameter values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.3}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.2 and V3.3:
-
-\begin{enumerate}
-
-\item Options have been added to the \htmlref{SkyFrame}{SkyFrame} class which allows the
-origin 
-of celestial coordinates to be moved to any specified point. See the new
-attributes SkyRef, \htmlref{SkyRefIs}{SkyRefIs}, SkyRefP and \htmlref{AlignOffset}{AlignOffset}.
-
-\item An option has been added to the \htmlref{FitsChan}{FitsChan} class which allows extra
-Frames representing cartesian projection plane coordinates (``intermediate 
-world coordinates'' in the parlance of FITS-WCS) to be created when
-reading 
-WCS information from a foreign FITS header. This option is controlled by
-a new attribute called \htmlref{Iwc}{Iwc}.
-
-\item The FitsChan class which been modified to interpret FITS-WCS CAR
-projection headers correctly if the longitude reference pixel (CRPIX) is 
-very large.
-
-\item The  FITS-AIPS++ encoding in the FitsChan class now recognised
-spectral axes if they conform to the AIPS convention in which the
-spectral axis is descirbed by a CTYPE keyword od the form "AAAA-BBB"
-where ``AAAA'' is one of FREQ, VELO or FELO, and ``BBB'' is one of LSR, LSD,
-HEL or OBS. Such spectral axes can be both read and written.
-
-\item The FitsChan class now has a FITS-AIPS++ encoding which represents
-WCS information using FITS header cards recognised by the AIPS++ project.
-Support for spectral axes is identical to the FITS-AIPS encoding.
-
-\item The organisation of the AST distribution and the commands for
-building it have been changed. Whereas AST used to be built and installed
-with \verb+./mk build; ./mk install+, it now builds using the more standard
-idiom \verb+./configure; make; make install+. The installation location is
-controlled by the \verb+--prefix+ argument to ./configure (as is usual
-for other packages which use this scheme).  Note that the INSTALL environment 
-variable now has a \emph{different} meaning to that which it had
-before, and it should generally be \emph{unset}. Also, there is no need to
-set the SYSTEM variable.
-
-\item Shared libraries are now installed in the same directory as the
-static libraries. In addition, links to sharable libraries are installed 
-with names which include version information, and ``libtool libraries'' 
-are also installed (see \htmladdnormallink{http://www.gnu.org/software/libtool/manual.html}{
-http://www.gnu.org/software/libtool/manual.html}).
-
-\item The \verb+ast_dev+ script has been removed. Instead, the location of
-the AST include files should be specified using the -I option when
-compiling.
-
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.4}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.3 and V3.4:
-
-\begin{enumerate}
-
-\item The \htmlref{Mapping}{Mapping} class has a new method 
-(\htmlref{astLinearApprox}{astLinearApprox})
-which calculates the co-efficients of a linear approximation to a Mapping.
-
-\item The Format attribute for simple Frames and SkyFrames has been extended.
-It has always been possible, in both classes, to specify a precision by
-including a dot in the Format value followed by an integer (\emph{e.g.}
-``\verb+dms.1+'' for a \htmlref{SkyFrame}{SkyFrame}, or ``\verb+%.10g+'' for a simple \htmlref{Frame}{Frame}).
-The precision can now also be specified using an asterisk in place of the
-integer (\emph{e.g.} ``\verb+dms.*+'' or ``\verb+%.*g+''). This causes the
-precision to be derived on the basis of the Digits attribute value.
-
-\item The \htmlref{Plot}{Plot} class has been changed so that the default value used for the
-Digits attribute is chosen to be the smallest value which results in no
-pair of adjacent labels being identical. For instance, if an annotated
-grid is being drawn describing a SkyFrame, and the Format(1) value is set
-to ``\verb+hms.*g+'' (the ``g'' causes field delimiters to be drawn as
-superscripts), and the Digits(1) value is unset, then the seconds field
-will have a number of decimal places which results in no pair of labels
-being identical.
-
-\item Addition of a new class classed \htmlref{DSBSpecFrame}{DSBSpecFrame}. This is a 
-sub-class of \htmlref{SpecFrame}{SpecFrame} which can be used to describe spectral axes
-associated with dual sideband spectral data.
-
-\item The \htmlref{FitsChan}{FitsChan} class will now read headers which use the old ``-GLS''
-projection code, converting them to the corresponding modern ``-SFL'' code,
-provided that the celestial axes are not rotated.
-
-\item The FitsChan class has a new \htmlref{Encoding}{Encoding}, ``FITS-CLASS'', which allows
-the reading and writing of FITS headers using the conventions of the CLASS 
-package - see 
-\htmladdnormallink{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}{
-http://www.iram.fr/IRAMFR/GILDAS/doc/html/class-html/class.html}).
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.5}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V3.4 and V3.5:
-
-\begin{enumerate}
-
-\item AST now provides facilities for representing regions of various
-shapes within a coordinate system. The \htmlref{Region}{Region} class provides general
-facilities which are independent of the specific shape of region being
-used. Various sub-classes of Region are also now available which provide 
-means of creating Regions of specific shape. Facilities provided by the
-Region class include testing points to see if they are inside the
-Region, testing two Regions for overlap, transforming Regions from one
-coordinate system to another \emph{etc}.
-
-\item A new class of 1-dimensional \htmlref{Frame}{Frame} called \htmlref{FluxFrame}{FluxFrame} has been added which 
-can be used to describe various systems for describing ovserved value at a 
-single fixed spectral position. 
-
-\item A new class of 2-dimensional Frame called \htmlref{SpecFluxFrame}{SpecFluxFrame} has been added which 
-can be used to describe a 2-d frame spanned by a spectral position axis
-and and an observed value axis.
-
-\item A new class of \htmlref{Mapping}{Mapping} called \htmlref{RateMap}{RateMap} has been added. A RateMap encapsulates
-a previously created Mapping. The inputs of the RateMap correspond to the
-inputs of the encapsulated Mapping. All RateMaps have just a single
-output which correspond to the rate of change of a specified output of
-the encapsulated Mapping with respect to a specified input.
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a value of ``J2000'' for \htmlref{System}{System}.
-This system is an equatorial system based on the mean dynamical equator and
-equinox at J2000, and differs slightly from an FK5(J2000) system.
-
-\item A new class called \htmlref{KeyMap}{KeyMap} has been added. A KeyMap can be used to
-store a collection of vector or scalar values or Objects, indexed by a 
-character string rather than an integer.
-
-\item The parameter list for the 
-\htmlref{astRate}{astRate} 
-method of the Mapping class has been modified. It no longer returns a second 
-derivative estimate. Existing code which uses this method will need to be 
-changed.
-
-\item Methods 
-(astSetFits<X>)
-have been added to the \htmlref{FitsChan}{FitsChan} class to allow values for named
-keywords to be changed or added.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V3.6}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V3.5 and V3.6:
-
-\begin{enumerate}
-
-\item If the Format attribute associated with an axis of a \htmlref{SkyFrame}{SkyFrame}
-starts with a percent character (``\verb+%+''), then axis values are
-now formatted and unformatted as a decimal radians value, using the
-Format syntax of a simple \htmlref{Frame}{Frame}.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called \htmlref{Clip}{Clip} which controls the
-clipping performed by AST at the plot boundary.
-
-\item The keys used to label components of the \htmlref{PolyMap}{PolyMap} structure when a
-PolyMap is written out through a \htmlref{Channel}{Channel} have been changed. The new keys
-are shorter than the old keys and so can written succesfully to a \htmlref{FitsChan}{FitsChan}.
-The new PolyMap class always writes new styles keys but can read either
-old or new style keys. Consequently, PolyMap dumps written by this
-version of AST cannot be read by older versions of AST.
-
-\item A mimimal cut down subset of the C version of SLALIB is now
-included with the AST distribution and built as part of building AST.
-This means that it is no longer necessary to have SLALIB installed
-separately at your site. The SLALIB code included with AST is distrubuted
-under the GPL. The default behaviour of the \htmlref{ast\_link}{ast_link} script is now to
-link with this internal slalib subset. However, the ``-csla'' option can
-still be used to force linking with an external full C SLALIB library.
-A new option ``-fsla'' has been introduced which forces linking with the
-external full Fortran SLALIB library.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V3.7}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V3.6 and V3.7:
-
-\begin{enumerate}
-
-\item Support for time coordinate systems has been introduced
-throught the addition of two new classes, \htmlref{TimeFrame}{TimeFrame} and \htmlref{TimeMap}{TimeMap}.
-The TimeFrame is a 1-dimensional \htmlref{Frame}{Frame} which can be used to describe
-moments in time (either absolute or relative) in various systems (MJD, 
-Julian \htmlref{Epoch}{Epoch}, \emph{etc.}) and referred to various time scales (TAI, UTC, 
-UT1, GMST, \emph{etc}). The TimeMap is a \htmlref{Mapping}{Mapping} which can transform time
-values between these various systems and time scales. Note,
-FitsChans which have a foreign encoding (\emph{i.e.} any encoding other
-than NATIVE) are not able to read or write these new classes.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.0}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V3.7 and V4.0:
-
-\begin{enumerate}
-
-\item Experimental support for reading IVOA Space-Time-Coordinates (STC-X)
-descriptions using the \htmlref{XmlChan}{XmlChan} class has been added. Support is included
-for a subset of V1.20 of the draft STC specification.
-
-\item A new set of methods (AST\_REBIN<X>/astRebin<X>) has been added to 
-the \htmlref{Mapping}{Mapping} class. These are flux-conserving alternatives to the existing
-AST\_RESAMPLE<X>/astResample<X> methods.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.1}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V4.0 and V4.1:
-
-\begin{enumerate}
-
-\item A new control flag has been added to the AST\_RESAMPLE<X>/astResample<X> 
-functions which produces approximate flux conservation.
-
-\item New constants AST\_\_SOMB and AST\_\_SOMBCOS have been added to 
-ast.h. These specify kernels for astResample and astRebin
-based on the ``Sombrero'' function ( $2*J1(x)/x$ where $J1(x)$ is the 
-first order Bessel function of the first kind).
-
-\item The \htmlref{SkyFrame}{SkyFrame} class now supports a \htmlref{System}{System} value of AZEL corresponding
-to horizon (azimuth/elevation) coordinates.
-
-\item The \htmlref{FitsChan}{FitsChan} class allows the non-standard strings ``AZ--'' and
-``EL--'' to be used as axis types in FITS-WCS CTYPE keyword values.
-
-\item The \htmlref{Frame}{Frame} class now has attributes \htmlref{ObsLon}{ObsLon} and \htmlref{ObsLat}{ObsLat} to specify
-the geodetic longitude and latitude of the observer.
-
-\item The ClockLon and ClockLat attributes have been removed from the
-\htmlref{TimeFrame}{TimeFrame} class. Likewise, the GeoLon and GeoLat attributes have been 
-removed from the \htmlref{SpecFrame}{SpecFrame} class. Both classes now use the ObsLon and
-ObsLat attributes of the parent Frame class instead. However, the old
-attribute names can be used as synonyms for ObsLat and ObsLon. Also,
-dumps created using the old scheme can be read succesfully by AST V4.1
-and converted to the new form.
-
-\item A new 
-function \htmlref{astMapSplit}{astMapSplit}
-has been added to the \htmlref{Mapping}{Mapping} class. This splits a Mapping into two component 
-Mappings which, when combined in parallel, are equivalent to the original 
-Mapping.
-
-\item The default value for the \htmlref{SkyRefIs}{SkyRefIs} attribute has been changed from
-``Origin'' to ``Ignored''. This means that if you want to use a SkyFrame
-to represent offsets from some origin position, you must now set the
-SkyRefIs attribute explicitly to either ``Pole'' or ``Origin'', in
-addition to assigning the required origin position to the SkyRef attribute.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.2}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V4.1 and V4.2:
-
-\begin{enumerate}
-
-\item The \htmlref{SideBand}{SideBand} attribute of the \htmlref{DSBSpecFrame}{DSBSpecFrame} class can now take the
-option ``LO'' in addition to ``USB'' and ``LSB''. The new option causes the
-DSBSpecFrame to represent the offset from the local oscillator frequency, 
-rather than either of the two sidebands.
-
-\item The \htmlref{FitsChan}{FitsChan} class has been changed so that it writes out a VELOSYS
-keyword when creating a FITS-WCS encoding (VELOSYS indicates the topocentric 
-apparent velocity of the standard of rest). FitsChan also strips out VELOSYS 
-keywords when reading a \htmlref{FrameSet}{FrameSet} from a FITS-WCS encoding.
-
-\item The FitsChan class has a new method called 
-\htmlref{astRetainFits}{astRetainFits}
-that indicates that the current card in the FitsChan should not be
-stripped out of the FitsChan when an AST \htmlref{Object}{Object} is read from the FitsChan.
-Unless this method is used, all cards that were involved in the creation
-of the AST Object will be stripped from the FitsChan afte a read operation.
-
-\item A problem with unaligned memory access that could cause bus errors on 
-Solaris has been fixed.
-
-\item A new read-only attribute called \htmlref{ObjSize}{ObjSize} has been added to the base
-Object \htmlref{Class}{Class}. This gives the number of bytes of memory occupied by the
-Object. Note, this is the size of the internal in-memory representation of 
-the Object, not the size of the textual representation produced by
-writing the Object out through a \htmlref{Channel}{Channel}.
-
-\item A new function 
-\htmlref{astTune}{astTune} 
-has been added which can be used to get and set global AST tuning
-parameters. At the moment there are only two such parameter, both of
-which are concerned with memory management within AST.
-
-\item A new method called 
-\htmlref{astTranGrid}{astTranGrid}
-has been added to the \htmlref{Mapping}{Mapping} class. This method creates a regular 
-grid of points covering a rectangular region within the input space of a
-Mapping, and then transforms this set of points into the output space of the
-Mapping, using a piecewise-continuous linear approximation to the Mapping
-if appropriate in order to achive higher speed.
-
-\item A new subclass of Mapping has been added called \htmlref{SwitchMap}{SwitchMap}. A
-SwitchMap represents several alternate Mappings, each of which is used to
-transforms input positions within a different region of the input
-coordinate space.
-
-\item A new subclass of Mapping has been added called \htmlref{SelectorMap}{SelectorMap}. A
-SelectorMap tests each input position to see if it falls within one of
-several Regions. If it does, the index of the \htmlref{Region}{Region} containing the
-input position is returned as the Mapping output.
-
-\item The behaviour of the
-\htmlref{astConvert}{astConvert}
-method when trying to align a \htmlref{CmpFrame}{CmpFrame} with another \htmlref{Frame}{Frame} has been
-modified. If no conversion between positions in the Frame and CmpFrame 
-can be found, an attempt is now made to find a conversion between the
-Frame and one of two component Frames contained within the CmpFrame. Thus
-is should now be possible to align a \htmlref{SkyFrame}{SkyFrame} with a CmpFrame containing a
-SkyFrame and a \htmlref{SpecFrame}{SpecFrame} (for instance). The returned Mapping produces bad
-values for the extra axes (i.e. for the SpecFrame axis in the above example).
-
-\item The ``\htmlref{\htmlref{ast\_link}{ast_link}\_adam}{ast_link_adam}'' and ``ast\_link'' scripts now ignore the 
-\verb+-fsla+ and \verb+-csla+ options, and always link against the
-minimal cut-down version of SLALIB distributed as part of AST.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.3}
-
-The following describes the most significant changes which occurred in the 
-AST library between versions V4.2 and V4.3:
-
-\begin{enumerate}
-
-\item The 
-astGetFitsS 
-function now strips trailing white space from the returned string, if the 
-original string contains 8 or fewer characters
-
-\item The \htmlref{SpecFrame}{SpecFrame} class has a new attribute called \htmlref{SourceSys}{SourceSys} that specified
-whether the \htmlref{SourceVel}{SourceVel} attribute (which specifies the rest frame of the 
-source) should be accessed as an apparent radial velocity or a redshift.
-Note, any existing software that assumes that SourceVel always represents
-a velocity in km/s should be changed to allow for the possibility of
-SourceVel representing a redshift value.
-
-\end{enumerate}
-
-
-\subsection{Changes Introduced in V4.4}
-
-The following describes the most significant changes which occurred in
-the AST library between versions V4.3 and V4.4:
-
-\begin{enumerate}
-
-\item The 
-\htmlref{astFindFrame}{astFindFrame} 
-function can now be used to search a \htmlref{CmpFrame}{CmpFrame} for an instance of a more
-specialised class of \htmlref{Frame}{Frame} (\htmlref{SkyFrame}{SkyFrame}, \htmlref{TimeFrame}{TimeFrame}, \htmlref{SpecFrame}{SpecFrame}, \htmlref{DSBSpecFrame}{DSBSpecFrame}
-or \htmlref{FluxFrame}{FluxFrame}). That is, if an instance of one of these classes is used as
-the ``template'' when calling 
-astFindFrame,
-and the ``target'' being searched is a CmpFrame (or a \htmlref{FrameSet}{FrameSet} in which the 
-current Frame is a CmpFrame), then the component Frames within the CmpFrame 
-will be searched for an instance of the supplied template Frame, and, if 
-found, a suitable \htmlref{Mapping}{Mapping} (which will include a \htmlref{PermMap}{PermMap} to select the 
-required axes from the CmpFrame) will be returned by 
-astFindFrame.
-Note, for this to work, the \htmlref{MaxAxes}{MaxAxes} and \htmlref{MinAxes}{MinAxes} attributes of the template 
-Frame must be set so that they cover a range that includes the number of axes 
-in the target CmpFrame.
-
-\item The SkyFrame, SpecFrame, DSBSpecFrame, TimeFrame and FluxFrame classes 
-now allow the MaxAxes and MinAxes attributes to be set freely to any value.
-In previous versions of AST, any attempt to change the value of MinAxes
-or MaxAxes was ignored, resulting in them always taking the default values.
-
-\item The DSBSpecFrame class has a new attribute called AlignSB that
-specifies whether or not to take account of the \htmlref{SideBand}{SideBand} attributes when
-aligning two DSBSpecFrames using 
-\htmlref{astConvert}{astConvert}.
-
-\item The Frame class has a new attribute called \htmlref{Dut1}{Dut1} that can be used to
-store a value for the difference between the UT1 and UTC timescales at 
-the epoch referred to by the Frame. 
-
-\item The number of digits used to format the Frame attributes \htmlref{ObsLat}{ObsLat} and 
-\htmlref{ObsLon}{ObsLon} has been increased.
-
-\item The use of the SkyFrame attribute \htmlref{AlignOffset}{AlignOffset} has been changed. This
-attribute is used to control how two SkyFrames are aligned by 
-astConvert.
-If the template and target SkyFrames both have a non-zero value for 
-AlignOffset, then alignment occurs between the offset coordinate systems 
-(that is, a \htmlref{UnitMap}{UnitMap} will always be used to align the two SkyFrames).
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called ForceExterior that can be
-used to force exterior (rather than interior) tick marks to be produced.
-By default, exterior ticks are only produced if this would result in 
-more than 3 tick marks being drawn.
-
-\item The TimeFrame class now supports conversion between angle based
-timescales such as UT1 and atomic based timescales such as UTC.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.5}
-
-The following describes the most significant changes that
-occurred in the AST library between versions V4.4 and V4.5:
-
-\begin{enumerate}
-
-
-
-\item All FITS-CLASS headers are now created with a frequency axis. If the
-\htmlref{FrameSet}{FrameSet} supplied to 
-\htmlref{astWrite}{astWrite}
-contains a velocity axis (or any other form
-of spectral axis) it will be converted to an equivalent frequency axis
-before being used to create the FITS-CLASS header.
-
-\item The value stored in the FITS-CLASS keyword ``VELO-LSR'' has been changed
-from the velocity of the source to the velocity of the reference channel.
-
-\item Addition of a new method call 
-\htmlref{astPurgeWCS}{astPurgeWCS}
-to the \htmlref{FitsChan}{FitsChan} 
-class. This method removes all WCS-related header cards from a FitsChan.
-
-\item The \htmlref{Plot}{Plot} class has a new attribute called GrfContext that can be used
-to comminicate context information between an application and any
-graphics functions registered with the Plot class via the 
-\htmlref{astGrfSet}{astGrfSet} function.
-\item Functions registered with the Plot class using 
-astGrfSet 
-now take a new additional integer parameter, ``grfcon''. The Plot class
-sets this parameter to the value of the Plot's GrfContext attribute before
-calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING 
-CODE THAT USES 
-astGrfSet 
-TO BE MODIFIED TO INCLUDE THE NEW PARAMETER.
-\item The 
-astRebinSeq functions
-now have an extra parameter that is used to record the total number of input 
-data values added into the output array. This is necessary to correct a 
-flaw in the calculation of output variances based on the spread of input 
-values. NOTE, THIS CHANGE WILL REQUIRE EXISTING CODE TO BE MODIFIED TO 
-INCLUDE THE NEW PARAMETER (CALLED "NUSED").
-\item Support has been added for the FITS-WCS ``HPX'' (HEALPix) projection.
-\item A new flag ``AST\_\_VARWGT'' can be supplied to 
-astRebinSeq.
-This causes the input data values to be weighted using the reciprocals of 
-the input variances (if supplied).
-
-\item The \htmlref{Frame}{Frame} class has a new read-only attribute called NormUnit that
-returns the normalised value of the Unit attribute for an axis. Here,
-``normalisation'' means cancelling redundant units, etc. So for instance, a
-Unit value of ``s*(m/s)'' would result in a NormUnit value of ``m''.
-
-\item A new 
-function \htmlref{astShowMesh}{astShowMesh} 
-has been added to the \htmlref{Region}{Region} class. It displays a mesh of points covering
-the surface of a Region by writing out a table of axis values to standard
-output.
-
-\item The Plot class now honours the value of the LabelUp attribute even if
-numerical labels are placed around the edge of the Plot. Previously
-LabelUp was only used if the labels were drawn within the interior of 
-the plot. The LabelUp attribute controls whether numerical labels are 
-drawn horizontally or parallel to the axis they describe.
-
-\item A bug has been fixed that could segmentation violations when setting 
-attribute values.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V4.6}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V4.5 and V4.6:
-
-\begin{enumerate}
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called 
-\htmlref{LTOffset}{LTOffset}.
-
-\item A new class called \htmlref{Plot3D}{Plot3D} has been added. The Plot3D class allows
-the creation of 3-dimensional annotated coordinate grids.
-
-\item A correction for diurnal aberration is now included when
-converting between AZEL and other celestial coordinate systems. The
-correction is based on the value of the \htmlref{ObsLat}{ObsLat} \htmlref{Frame}{Frame} attribute (the
-geodetic latitude of the observer).
-
-\item A bug has been fixed which caused the DUT1 attribute to be ignored
-by the \htmlref{SkyFrame}{SkyFrame} class when finding conversions between AZEL and other
-celestial coordinate systems.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.0}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V4.6 and V5.0:
-
-\begin{enumerate}
-
-
-\item The AST library is now thread-safe (assuming that the POSIX pthreads 
-library is available when AST is built). Many of the macros defined in
-the ast.h header file have changed. It is therefore necessary to
-re-compile all source code that includes ast.h.
-
-\item New methods \htmlref{astLock}{astLock} and \htmlref{astUnlock}{astUnlock} allow an AST \htmlref{Object}{Object} to be locked
-for exclusive use by a thread.
-
-\item The \htmlref{TimeFrame}{TimeFrame} class now support Local Time as a time scale. The offset
-from UTC to Local Time is specified by a new TimeFrame attribute called 
-\htmlref{LTOffset}{LTOffset}.
-
-\item The \htmlref{Channel}{Channel} class has a new attribute called \htmlref{Strict}{Strict} which controls
-whether or not to report an error if unexpected data items are found
-within an AST Object description read from an external data source. Note,
-the default behaviour is now not to report such errors. This differs from
-previous versions of AST which always reported an error is unexpected
-input items were encountered.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.1}
-
-The following describes the most significant changes which occurred in the 
-AST library between versions V5.0 and V5.1:
-
-\begin{enumerate}
-
-\item The \htmlref{astUnlock}{astUnlock} function now has an extra parameter that controls whether 
-or not an error is reported if the \htmlref{Object}{Object} is currently locked by another
-thread.
-
-\item The \htmlref{Prism}{Prism} class has been modified so that any class of \htmlref{Region}{Region} can
-be used to define the extrusion axes. Previously, only a \htmlref{Box}{Box} or \htmlref{Interval}{Interval}
-could be used for this purpose.
-
-\item The values of the AST\_\_THREADSAFE macro (defined in ast.h) have
-been changed from ``yes'' and ``no'' to ``1'' and ``0''.
-
-\item Improvements have been made to the way that Prisms are simplified
-when
-\htmlref{astSimplify}{astSimplify}
-is called.  The changes mean that more types of Prism will now simplify
-into a simpler class of Region.
-
-\item The \htmlref{PointList}{PointList} class has a new method, 
-astPoints, 
-that copies the axis values from the PointList into a supplied array. 
-
-\item The PointList class has a new (read-only) attribute, \htmlref{ListSize}{ListSize}, that 
-gives the number of points stored in the PointList.
-
-\item The handling of warnings within different classes of \htmlref{Channel}{Channel} has
-been rationalised. The XmlStrict attribute and 
-astXmlWarnings 
-function have been removed. The same functionality is now available via
-the existing \htmlref{Strict}{Strict} attribute (which has had its remit widened), a new
-attribute called \htmlref{ReportLevel}{ReportLevel}, and the new
-\htmlref{astWarnings}{astWarnings} 
-function. This new function can be used on any class of Channel. Teh
-\htmlref{FitsChan}{FitsChan} class retains its long standing ability to store warnings as
-header cards within the FitsChan, but it also now stores warnings in the
-parent Channel structure, from where they can be retrieved using the 
-astWarnings 
-function.
-
-\item A new function called 
-astIntercept
-has been added to the \htmlref{Frame}{Frame} class. This function finds the point of
-intersection beteeen two geodesic curves.
-
-\item A bug in the type-checking of Objects passed as arguments to constructor
-functions has been fixed. This bug could lead to applications crashing or
-showing strange behaviour if an inappropriate class of Object was
-supplied as an argument to a constructor.
-
-\item The 
-\htmlref{astPickAxes}{astPickAxes} 
-function will now return a Region, if possible, when applied to a Region. If 
-this is not possible, a Frame will be returned as before.
-
-\item The default gap size between the ISO date/time labels used by the \htmlref{Plot}{Plot} 
-class when displaying an annotated axis described by a \htmlref{TimeFrame}{TimeFrame} has been
-changed. The changes are meant to improve the labelling of calendar time 
-axes that span intervals from a day to a few years.
-
-\item A new function called
-\htmlref{astTestFits}{astTestFits}
-has been added to the FitsChan class. This function tests a FitsChan to
-see if it contains a defined value for specified FITS keyword.
-
-\item The AST\_\_UNDEF<X> parameters used to flag undefined FITS keyword values
-have been removed. Use the new 
-astTestFits
-function instead.
-
-\item The astIsUndef<X> functions used to test FITS keyword values
-have been removed. Use the new astTestFits function instead.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.2}
-
-The following describes the most significant changes which
-occurred in the AST library between versions V5.1 and V5.2:
-
-\begin{enumerate}
-
-\item A new method called 
-\htmlref{astSetFitsCM}{astSetFitsCM} 
-has been added to the \htmlref{FitsChan}{FitsChan} class. It stores a pure comment card in a
-FitsChan (that is, a card with no keyword name or equals sign).
-
-\item A new attribute called \htmlref{ObsAlt}{ObsAlt} has been added to the \htmlref{Frame}{Frame} class. It
-records the geodetic altitude of the observer, in metres. It defaults to
-zero. It is used when converting times to or from the TDB timescale, or
-converting spectral positions to or from the topocentric rest frame, or
-converting sky positions to or from horizon coordinates. The FitsChan
-class will include its effect when creating a set of values for the 
-OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
-set of OBSGEO-X/Y/Z keyword values from a FITS header.
-
-\item The \htmlref{TimeMap}{TimeMap} conversions ``TTTOTDB'' and ``TDBTOTT'', and the \htmlref{SpecMap}{SpecMap}
-conversions ``TPF2HL'' and ``HLF2TP'', now have an additional argument - 
-the observer's geodetic altitude.
-
-\item The \htmlref{Polygon}{Polygon} class has been modified to make it consistent with the
-IVOA STC definition of a Polygon. Specifically, the inside of a polygon
-is now the area to the left of each edge as the vertices are traversed in 
-an anti-clockwise manner, as seen from the inside of the celestial sphere.
-Previously, AST used the anti-clockwise convention, but viewed from the
-outside of the celestial sphere instead of the inside. Any Polygon saved 
-using previous versions of AST will be identified and negated automatically 
-when read by AST V5.2.
-
-\item A new class of \htmlref{Channel}{Channel}, called \htmlref{StcsChan}{StcsChan}, has been added that allows
-conversion of suitable AST Objects to and from IVOA STC-S format.
-
-\item A new method called 
-\htmlref{astRemoveRegions}{astRemoveRegions} 
-has been added to the \htmlref{Mapping}{Mapping} class. It searches a (possibly compound)
-Mapping (or Frame) for any instances of the AST \htmlref{Region}{Region} class, and either 
-removes them, or replaces them with UnitMaps (or equivalent Frames). It
-can be used to remove the masking effects of Regions from a compound
-Mapping or Frame.
-
-\item A new method called 
-\htmlref{astDownsize}{astDownsize}
-has been added to the Polygon class. It produces a new Polygon that
-contains a subset of the vertices in the supplied Polygon. The subset is
-chosen to retain the main features of the supplied Polygion, in so far 
-as that is possible, within specified constraints.
-
-\item A new constructor called 
-astOutline 
-has been added to the Polygon class. Given a 2D data array, it identifies
-the boundary of a region within the array that holds pixels with
-specified values. It then creates a new Polygon to describe this boundary
-to a specified accuracy.
-
-\item A new set of methods, called 
-astMapGetElem<X>
-has been added to the \htmlref{KeyMap}{KeyMap} class. They allow a single element of a vector
-valued entry to be returned.
-
-\item A new attribute called \htmlref{KeyError}{KeyError} has been added to the KeyMap \htmlref{Class}{Class}. It
-controls whether the 
-astMapGet... 
-family of functions report an error if an entry with the requested key does 
-not exist in the KeyMap.
-
-\end{enumerate}
-
-\subsection{Changes Introduced in V5.3}
-
-The following describes the most significant changes which 
-occurred in the AST library between versions V5.2 and V5.3:
-
-\begin{enumerate}
-
-\item The details of how a \htmlref{Frame}{Frame} is aligned with another Frame by the
-\htmlref{astFindFrame}{astFindFrame} and \htmlref{astConvert}{astConvert}
-functions have been changed. The changes mean that a Frame can now be
-aligned with an instance of a sub-class of Frame, so long as the number
-of axes and the \htmlref{Domain}{Domain} values are consistent. For instance, a basic
-2-dimensional Frame with Domain ``SKY'' will now align succesfully with 
-a \htmlref{SkyFrame}{SkyFrame}, conversion between the two Frames being achieved using a
-\htmlref{UnitMap}{UnitMap}.
-
-\item The arrays that supply input values for astMapPut1<X> are now
-declared ``const''.
-
-\item Added method 
-\htmlref{astMatchAxes}{astMatchAxes}
-to the Frame class. This method allows corresponding axes within two
-Frames to be identified.
-
-\item The 
-\htmlref{astAddFrame}{astAddFrame}
-method can now be used to append one or more axes to all Frames in a \htmlref{FrameSet}{FrameSet}.
-\end{enumerate}
-
-\subsection{\xlabel{changes}\xlabel{list_of_most_recent_changes}Changes
-Introduced in V5.3-1}
-
-The following describes the most significant changes which have
-occurred in the AST library between versions V5.3 and V5.3-1 (the
-current version):
-
-\begin{enumerate}
-
-\item The \htmlref{StcsChan}{StcsChan} class now ignores case when reading STC-S phrases (except
-that units strings are still case sensitive).
-
-\end{enumerate}
-
-Programs which are statically linked will need to be re-linked in
-order to take advantage of these new facilities.
-
-\end{document}
diff --git a/ast-5.3-1/sun211_figures/cmpframe.eps b/ast-5.3-1/sun211_figures/cmpframe.eps
deleted file mode 100644
index c5b6aaa..0000000
--- a/ast-5.3-1/sun211_figures/cmpframe.eps
+++ /dev/null
@@ -1,931 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 215 202 384 394
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:24:02
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3657.35 3700.55 m
-3657.35 3800.15 3576.95 3880.55 3477.35 3880.55 c
-2396.15 3880.55 l
-2296.55 3880.55 2216.15 3800.15 2216.15 3700.55 c
-2216.15 2210.15 l
-2216.15 2110.55 2296.55 2030.15 2396.15 2030.15 c
-3477.35 2030.15 l
-3576.95 2030.15 3657.35 2110.55 3657.35 2210.15 c
-f*
-1 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-3592.55 3755.75 m
-3592.55 3854.15 3513.35 3934.55 3413.75 3934.55 c
-2340.95 3934.55 l
-2241.35 3934.55 2162.15 3854.15 2162.15 3755.75 c
-2162.15 2273.75 l
-2162.15 2174.15 2241.35 2094.95 2340.95 2094.95 c
-3413.75 2094.95 l
-3513.35 2094.95 3592.55 2174.15 3592.55 2273.75 c
-h
-S
-0.564706 g
-3297.35 3532.55 m
-3297.35 3591.35 3250.55 3638.15 3191.75 3638.15 c
-2381.75 3638.15 l
-2322.95 3638.15 2276.15 3591.35 2276.15 3532.55 c
-2276.15 2902.55 l
-2276.15 2843.75 2322.95 2796.95 2381.75 2796.95 c
-3191.75 2796.95 l
-3250.55 2796.95 3297.35 2843.75 3297.35 2902.55 c
-f*
-1 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-f*
-0 g
-3232.55 3588.95 m
-3232.55 3646.55 3186.95 3692.15 3129.35 3692.15 c
-2325.35 3692.15 l
-2267.75 3692.15 2222.15 3646.55 2222.15 3588.95 c
-2222.15 2964.95 l
-2222.15 2907.35 2267.75 2861.75 2325.35 2861.75 c
-3129.35 2861.75 l
-3186.95 2861.75 3232.55 2907.35 3232.55 2964.95 c
-h
-S
-3050.15 2847.35 15.5999 849.6 re
-Y
-3057.35 3699.35 m
-3057.35 2854.55 l
-S
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3336.95 m
-3237.35 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3338.15 m
-3095.75 3360.95 3077.75 3378.95 3056.15 3378.95 c
-3034.55 3378.95 3016.55 3360.95 3016.55 3338.15 c
-3016.55 3316.55 3034.55 3298.55 3056.15 3298.55 c
-3077.75 3298.55 3095.75 3316.55 3095.75 3338.15 c
-f*
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3057.35 3088.55 188.4 248.4 re
-Y
-3057.35 3096.95 m
-3237.35 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 3098.15 m
-3095.75 3120.95 3077.75 3138.95 3056.15 3138.95 c
-3034.55 3138.95 3016.55 3120.95 3016.55 3098.15 c
-3016.55 3076.55 3034.55 3058.55 3056.15 3058.55 c
-3077.75 3058.55 3095.75 3076.55 3095.75 3098.15 c
-f*
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -2333 -3514]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -2409 -3517]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -2489 -3488]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2558 -3517]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2643 -3517]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2706 -3515]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2777 -3517]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2892 -3515]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2691 -3295]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2785 -3295]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -3768 -3293]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-79 106 true[1 0 0 1 -3756 -2453]@85 imagemask
-z!!!!(n,NFg
-z!$D1?"979Z!!!!`rr<0$huE`W!<<(L!WVWh!!!'"s1e[8n,NFg!WW2X!<;fo!!!-$s6p$gp](9o
-#QOhn!<;rs!!!9(s7cSDqu?]s&-)\)!.XtJ!!!Q0s7cRYrVuou+92B=!'gJ`!!",@"8i- at rr<$!5PtQ[
-!$D5k!!#7Y!.4bWs*t(L5O\Z%!"]+F!!#7A!'UAfs1eU7J%u%*!!iP^!!%Ma!$2+Bs53kWIt.M?!!E8j!!%M!!"Ju2
-s6p!grr<$/!!3,h!!*$!!"Ju0s7cQorVup.!!*&o!!)uuzs82itrVuou!!%NH!!2utzJ,TEK
-qu?]s!!#7_!!2utz5Q:]aqu?]s!!",@!!2utz+9-inp](9o!!!Q0J-5QHz&-'EIp](9o
-!!!Q0^]X?3z#QN]an,NFg!!!9(i!8`Oz"97iqn,NFg!!!-$n-AF_z!WVWon,NFg!!!'"p]o^Wz
-!<;g!huE`W!!!$!r"%]cz!.XnWhuE`W!!!"KrX[oez!'gGn^]4?7!!!!`rsumFz!'gJo
-^]4?7!!!!@s.@(,z!$D65^]4?7!!!!0s5/>,z!"]+eJ,fQL!!!!(s8RTLz!!iQ(J,fQL
-!!!!$s8RTLz!!E9$z!!!!"s8N'!z!!3-"zzs8N'!z!!*'!zzs8Duuz
-!!%NJzzJ,TEJz!!#7_zz5Q1W_z!!",=zz+8c*=z!!!Q-
-zz&,ZD-z!!!9%zz#P\9!z!!!,rzz"8Dirz!!!,rz
-z"7Q9jz!!!8nzz#Oh]nz!!!8nzz#N,R^z!!!Pfzz&)[Efz
-!!!Pfzz+2 at jV!!!"D!!"+Vz!-eJD+2 at jV!!!!Y!!#66z!&srY5C`_6!!!!]!!#66
-z!'C5]IfKHK!!!!_!!%KKz!'UA_rr<$!!!!!@!!3'!z!$?^nrVuou!!!!@^^'i=z
-!$CtXqu?]s!!!!0s8Vusz!"],0qu?]s!!!!0s8Vioz!!iQ(p](9o!!!!(s8VQgz!!E9$huE`W!!!!"s8Tk7z!!3-"J,fQLzJ,]KKz!!#7]zz&+BQ!z~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2675 -3060]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2777 -3059]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2839 -3059]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-3297.35 2610.95 m
-3297.35 2648.15 3267.35 2678.15 3230.15 2678.15 c
-2343.35 2678.15 l
-2306.15 2678.15 2276.15 2648.15 2276.15 2610.95 c
-2276.15 2204.15 l
-2276.15 2166.95 2306.15 2136.95 2343.35 2136.95 c
-3230.15 2136.95 l
-3267.35 2136.95 3297.35 2166.95 3297.35 2204.15 c
-f*
-1 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-f*
-0 g
-3232.55 2666.15 m
-3232.55 2703.35 3203.75 2732.15 3166.55 2732.15 c
-2288.15 2732.15 l
-2252.15 2732.15 2222.15 2703.35 2222.15 2666.15 c
-2222.15 2267.75 l
-2222.15 2230.55 2252.15 2201.75 2288.15 2201.75 c
-3166.55 2201.75 l
-3202.55 2201.75 3232.55 2230.55 3232.55 2267.75 c
-h
-S
-3050.15 2187.35 15.5999 549.6 re
-Y
-3057.35 2739.35 m
-3057.35 2194.55 l
-S
-3057.35 2368.55 189.6 15.5999 re
-Y
-3054.95 2376.95 m
-3239.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3095.75 2378.15 m
-3095.75 2400.95 3077.75 2418.95 3056.15 2418.95 c
-3034.55 2418.95 3016.55 2400.95 3016.55 2378.15 c
-3016.55 2356.55 3034.55 2338.55 3056.15 2338.55 c
-3077.75 2338.55 3095.75 2356.55 3095.75 2378.15 c
-f*
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2581 -2562]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2666 -2562]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2729 -2560]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2798 -2562]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2915 -2560]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-130 95 true[1 0 0 1 -2289 -2338]@85 imagemask
-z!&+BQ!!!#7
-zz!!"tYzhuE`Wz!!!"Dz!T3qXzzGQ7^D!!2!Xzz!.4bH
-!!!&hzz!!)os!!!!$n,NFgz!!!#sz"7Q9jzzrVuou!!Durzz
-!WE'!!!!9!zz!!3*"!!!!(p](9oz!!!'"z&,ZD-z!!!!$rr<$!!"\u-zz"93lO
-!!!Q-zz!!iOS!!!!@rVuouz!!!9(J,fQL+8u6?z!!!!(s1eU7!$D1?zz
-&-'EF!!#7`zz!"]+F!!!!`rr<$!z!!!Q0huE`WJ,]KKz!!!!@s53kW!.Y$!z
-z+91g1!!%NKJ,fQLz!$D71!!!$!s*t(Lz!!#7`n,NFgs8Tk7z!!!!`s7cQo!WW28zz
-J,f9D!!3-"^]4?7z!.Y%D!!!'"s53kWz!!%NKqu?^!s8V!Wz!!!$!s82is"98DZz
-zs8Vus!!E8qn,NFgz!<<&t!!!9(p[A._z!!3-!rVup's7>^[z!!!'"r-n\H&-(\b
-z!!!!"s87?H!"]+ip](9oz"989`!!!Q0iV3BQz!!E8r5C`_Us2"U5z!!!-$pcj9/+901Tz
-!!!!(s7d[d!$D5kqu?]sz#QO98^]6V!JGoNKz!"],!+2 at k@s+#Ouz!!!Q0i"*U'J,]Lt
-z!!!!0s54FG!.Y"KIfKHKz+917(huJ9+!'^G`z!$D6V#Oh`nrW#._z!!",@^^'?/
-s8E!_J,fQL!!!!`s*t4@!<;rs++O=kz5Q?69p]:Em!$?^kz!'gL6"8Dosqu at hSz!!%NK!!2iss7cR)
-^]4?7!!!"Krr<)t"98,r&)[EfzJ,]KKqucug!!hE^z!<<#u!;m*%n,N^Oz!!*&u!!*!'
-s6p!nn,NFg!!!'"qu?_G#QN]^"7Q9j!!!!"s82isIh2S;!!D]jz!WW&t!.POZ^]4K3z!!E8r
-!!#5*s1eU8p](9o!!!-$p](:YTDu\,!VcWp!!!!$s6p!g+.rR`!!)osz#QO8n!$AuUJ,fTIz!!iPn!!",@
-rr<$!rVuou!!!9(huE`fs8N'!!.FnJ!!!!0s53kW&-)Y0!!%HJz&-(Pf!!iQ'!!!"Kz!$D6V
-!!!9(rVuou56(Z`!!",@^]4?>s8Duu!'^G`!!!!@s*t(L"989!!!#66z5Q?66!!E9!!!!!@J,fQL
-!'gL6!!!-$p](9o++O=k!!#7`!!!!$s7cQo!"ZjF!!!"Krr<$!"98,r!!!PFzJ,TEJ!!E8j!!!!0huE`W!.XtJ
-!!!9(n,NFg#N,R^!!*&u!!!!(s53kW!!hE^!!!$!qu?]s&-(Pf!!!8nzs82is!"]+f!!!!$n,NFg
-!WW&t!!!Q0^]4?7"7Q9j!!3,p!!!!@s1eU7!!2ip!!!-$p](9o+90+V!!!&p!!!!$s6p!g!'gL6!!!!"
-qu?]s"97ij!!#7`J,fQL!W2ot!!iPn!!!!`rr<$!!!)os!!!9(huE`WJ,]KK!!!#u!!!!0s53kW!.XtJzrVuou
-&-(Pf!!*&uz!<)ru!$D6V!!!$!rVuou!!*$!!!",@^]4?8s8Duu!!!$!!!!!`s1eU7!WW&tz
-s*t(LJ,d:a!!E9!z!<7QL!.Y$a!!!9(rVuou!!*&7!!*'!^]4?>s8Duu!!!'"huElZs53kW+92?@
-!!!!$s7cR)s8Vus!.Y%KhuE`W5QC``J,fQKi",kfs8RTL!WW3"^jlCas54Ffs8W+L!!3-"s1j-as8V!fs8W-!J,fWMs8Tk~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -2423 -2339]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2484 -2338]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2553 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-36 95 true[1 0 0 1 -2616 -2340]@85 imagemask
-+92B at n/q]1s6p'h
-s8N'!5QCKY!"]+f!!!9(huE`^s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!iP>!!!9(^]4?Fs1eUVs8Tk7+92AV!$D7@^]4E8s1eU7+90+V!!3,8!!!!`^]4?7#J^<~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2655 -2339]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2718 -2340]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2787 -2309]@85 imagemask
-!!!-$huE`W!!!"K
-s8N'!!!!!"s8W,Wz&-)\0qu?]s!$D7 at s8N'!!!%NKs8W,7!!!$!s8W-!n,NFhs8W-!s7cQo"98DZ
-!'gG_!!iQ'!!!'"!!!9(n,NFg5C`_Es1eU7!!hE^&-%.[!!!&h!"])0zp](j(z!-eJSrVuou
-!!#+]&,ZD-!!!!?!!iE%z%KHb3z!"T&7qu?]s!!!6("8i-!!!!!(J-#QJz#ClgRz!!e#SIK0?J
-!!!7S!.OtK!!!!(J,g[Az%tFWjJ,fQL!$?^k#J^<>!!%M!!!D-Z!!!Q0!!!&h"98E$rr<$!F8u:?
-s8N'!!.Y%Ks8W&u!!3-"s8W,s!!!9(s8W-!qu?^-s8W-!s7cQo+92B at s8V!W!$D7 at s8W,7!!#7`s8W-!
-!!!!`s8W-!n,NFg5QCc_z!$D4 at z!!",1z!!!!@huE`Wz&)[Efz!!hE^z!!!,Zz
-!!!!"n,NFgz!:Tsgz!!%6Dz!!!!]zz*WQ0?z!"XS[z!!!8mrVuou
-!!!!$s8V!Wz#QOi!z!"],0rVuou!!#7`!WN-"!!!"KquD5^!!!!"s6p"1huE`W"979Z&+BQ!
-!!E8:!"\i)!!!9(^]4W;!!!!0s*t(Squ?]s&,uV0#Q=]'!$D4@!!E3#!!",?!!!-$!!!!`rVup#rr<$!5Q1W_"9/?$
-!'gA]!!E7O!!#7]!!!-$J,fR6qu?^!s*t(L5PtK]"93lO!'gA]!!E7O!!#7]!!!-$J,fR6p](:!s*t(L
-5PP3Y#QK;S!'g5Y!!iOS!!#7Y!!!9(J,fQkp](:)s*t(L+8>g9&,uV0!$Ct9!"])0!!!Q)!!",@!!!!0
-qu?^=rr<$!#Q+Q%+8u6?!!iE%!'gG_!!!-#!!#7]!!!!$rVuqJs8Tk7!WN-"s8W,7!!*%L!WW3"^]4 at a^]XW:s1eU75N!(Ps8Tk7!"],0s1eU7!!!-$s82iszs8VQgz!'gJ`!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -2857 -2339]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-68 95 true[1 0 0 1 -2897 -2340]@85 imagemask
-J,fQJ"98E$n:1K<
-rWE3#s6pR!s7cSDs8Tk8s8RTL#QOc'!<<'!!!E9!!!%NJ!!!'"p](;DrVup!s7cQo5Q1W_!WVWh!'gA]
-!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]
-!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]s
-s6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!*&g!!#7]!!!$!
-n,NGQqu?]ss6p!g5PtK]!<;Ng!'gA]!!3,h!!#7_!!!'"huEaArr<$"s53kW5QAM!"979Z!'gMA!!E8Z
-!!#7^n,N^n^]4@!rVQX+s1eU75Q(N]5QAM!!'gC2s8W+L!!#7]5QCc`J,fR6r#bt=rr<$!5Pu&ls8Duu
-!'gA`s8Vus!!#7]!WW2p!!!!`quD6HhuE`W5PtKls*t(L!'gA]z!!#7]z!!!!`qu?]sz5PtK]z
-!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz
-5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`
-qu?]sz5PtK]z!'gA]z!!%NHz!!!$!qu?]s!!!"Ks82iszJ,fEHz!'gM]z!!!9(qu?]szs82isz!"\u-z!!!&tzz49,?]!!!!~>
-Q
-3346.55 2079.35 15.5999 1860 re
-Y
-3353.75 3941.75 m
-3353.75 2087.75 l
-S
-3237.35 3328.55 129.6 15.5999 re
-Y
-3234.95 3336.95 m
-3359.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3338.15 m
-3275.75 3360.95 3257.75 3378.95 3236.15 3378.95 c
-3214.55 3378.95 3196.55 3360.95 3196.55 3338.15 c
-3196.55 3316.55 3214.55 3298.55 3236.15 3298.55 c
-3257.75 3298.55 3275.75 3316.55 3275.75 3338.15 c
-f*
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3237.35 3088.55 129.6 15.5999 re
-Y
-3234.95 3096.95 m
-3359.75 3096.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 3098.15 m
-3275.75 3120.95 3257.75 3138.95 3236.15 3138.95 c
-3214.55 3138.95 3196.55 3120.95 3196.55 3098.15 c
-3196.55 3076.55 3214.55 3058.55 3236.15 3058.55 c
-3257.75 3058.55 3275.75 3076.55 3275.75 3098.15 c
-f*
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3237.35 2368.55 129.6 15.5999 re
-Y
-3234.95 2376.95 m
-3359.75 2376.95 l
-S
-0 0 6120 7920 re
-Y
-3275.75 2378.15 m
-3275.75 2400.95 3257.75 2418.95 3236.15 2418.95 c
-3214.55 2418.95 3196.55 2400.95 3196.55 2378.15 c
-3196.55 2356.55 3214.55 2338.55 3236.15 2338.55 c
-3257.75 2338.55 3275.75 2356.55 3275.75 2378.15 c
-f*
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3357.35 3328.55 249.6 15.5999 re
-Y
-3354.95 3336.95 m
-3599.75 3336.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3338.15 m
-3395.75 3360.95 3377.75 3378.95 3356.15 3378.95 c
-3334.55 3378.95 3316.55 3360.95 3316.55 3338.15 c
-3316.55 3316.55 3334.55 3298.55 3356.15 3298.55 c
-3377.75 3298.55 3395.75 3316.55 3395.75 3338.15 c
-f*
-3635.75 3338.15 m
-3635.75 3360.95 3617.75 3378.95 3596.15 3378.95 c
-3574.55 3378.95 3556.55 3360.95 3556.55 3338.15 c
-3556.55 3316.55 3574.55 3298.55 3596.15 3298.55 c
-3617.75 3298.55 3635.75 3316.55 3635.75 3338.15 c
-f*
-3357.35 2368.55 248.4 188.4 re
-Y
-3357.35 2376.95 m
-3597.35 2556.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 2378.15 m
-3395.75 2400.95 3377.75 2418.95 3356.15 2418.95 c
-3334.55 2418.95 3316.55 2400.95 3316.55 2378.15 c
-3316.55 2356.55 3334.55 2338.55 3356.15 2338.55 c
-3377.75 2338.55 3395.75 2356.55 3395.75 2378.15 c
-f*
-3635.75 2558.15 m
-3635.75 2580.95 3617.75 2598.95 3596.15 2598.95 c
-3574.55 2598.95 3556.55 2580.95 3556.55 2558.15 c
-3556.55 2536.55 3574.55 2518.55 3596.15 2518.55 c
-3617.75 2518.55 3635.75 2536.55 3635.75 2558.15 c
-f*
-3357.35 2908.55 248.4 188.4 re
-Y
-3357.35 3096.95 m
-3597.35 2916.95 l
-S
-0 0 6120 7920 re
-Y
-3395.75 3098.15 m
-3395.75 3120.95 3377.75 3138.95 3356.15 3138.95 c
-3334.55 3138.95 3316.55 3120.95 3316.55 3098.15 c
-3316.55 3076.55 3334.55 3058.55 3356.15 3058.55 c
-3377.75 3058.55 3395.75 3076.55 3395.75 3098.15 c
-f*
-3635.75 2918.15 m
-3635.75 2940.95 3617.75 2958.95 3596.15 2958.95 c
-3574.55 2958.95 3556.55 2940.95 3556.55 2918.15 c
-3556.55 2896.55 3574.55 2878.55 3596.15 2878.55 c
-3617.75 2878.55 3635.75 2896.55 3635.75 2918.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -3758 -2873]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 100 true[1 0 0 1 -2325 -3767]@85 imagemask
-z!!!Q)z
-z!!iQ(n,NFgz!.Y%Krr<$!z"98E$s1eU7z+92B at s7cQozJ,fQKs82is!!!!"
-s8W-!s8N'!!!!!(s8W+Ms8Tk7!!!!0s8VQg#QN]^!!!!`s8RTL!<;Ng!!!"Ks8Duu!$D+=!!!$!s7cQo
-!!iK'!!!'"s6p!g!!E6$!!!9(s53kW!!*%L!!!Q0s*t(L!!%Ma!!", at rr<$!!!",!!!", at rr<$!!!!Q!!!#7`rVuou
-!!!9!!!%NKqu?]s!!!-!!!*'!qu?]s!!!'!!!3-"p](9o!!!$!!!3-"p](9o!!!"J!!E9$n,NFg!!!!]
-!!E9$n,NFg!!!!9!!iQ(huE`Wz!!iQ(huE`Wz!"],0huE`Wz!"],0^]4?7z!$D7@
-^]4?7z!$D7@^]4?7z!'gM`^]4?7z!'gM`J,fQLz!'gM`J,fQLz!.Y%KJ,fQLz!.Y%K
-J,fQLz!.Y%KJ,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!J,fQLz!<<*!z
-z!<<*!zz!<<*!zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz
-!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"zz!WW3"
-zz!<<*!zz!<<*!zz!<<*!zz!<<*!zz!<<*!z
-z!<<*!J,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!.Y%KJ,fQLz!'gM`J,fQLz!'gM`J,fQL
-!!!!]!'gM`J,fQL!!!"H!$D7@^]4?7!!!"H!$D7@^]4?7!!!#s!$D7@^]4?7!!!#s!"],0^]4?7!!!&t
-!"],0^]4?7!!!&t!!iQ(huE`W!!!-!!!iQ(huE`W!!!-!!!E9$huE`W!!!9%!!3-"n,NFg!!!Q-!!3-"
-n,NFg!!!Q-!!*'!n,NFg!!",=!!%NKp](9o!!#7]!!%NKp](9o!!#7]!!#7`qu?]s!!%NH!!", at qu?]s!!*&s!!!Q0
-rVuou!!3,t!!!9(rVuou!!E9!!!!-$rr<$!!!iQ%!!!'"s*t(L!"],-!!!$!s1eU7!$D7=!!!"Ks53kW
-!.Y%H!!!!`s6p!g!<<)s!!!!0s7cQo"98E!!!!!(s8Duu&-)\-!!!!"s8RTL5Q?B6zJ,f!=s82oq
-z+92B at s6p$dz#QOi(s*t+Iz!WW3"qu?_Ez!$D7 at huEb)z!!*&s!!!!]~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2426 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-73 96 true[1 0 0 1 -2543 -3741]@85 imagemask
-+92B at s*t(L!!",@
-s8W+Lz+92B at s*t(L!!", at s8Vioz"98E$^]4?7!!!$!s8RTLz!.Y%Kz!!!!`s8Duu
-z!'gM_z!!!!`s8Duuz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`
-s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82j=
-^]4?7!'gM]!WW&t!!!!`s83-%s*t(L!'gM]&-)[f!!!!`s83u=s6p!g!'gM]J,fQD!!!!`s8;oss8Duu
-!'gM^s8W-!!!!!`s8W!=s8N'!!'gM`n-B!nJ,fR6s8Tk8s8Tk7!'gM`J,oWLhuEaAs8N'!s8V!W!'gM`!!%NKn,NGQ
-s8DuuJ,f!<!'gM]!!#7`p](:Ys82is5QCKY!'gM]!!#7`qu?^]s82is+926=!'gM]!!", at rVup_s82is
-+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is&-)Y0
-!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is
-&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is+92?@
-!'gM]!!", at rr<$`s82is+92<?!'gM]!!", at rVup_s82is+92<?!'gM]!!", at qu?^]s8Duu5QCW]!'gM_!!#7`p](:Ys8N'!5QCKY!'gM`J,k*!n,NGQs8Tk7
-J,f!<!'gM`huNfWhuEaAs8DEfs8V!W!'gM^qud!!^]4 at as8;m-s8RTL!<<)sJ,fQK!!!-$s87BHs8Duu
-+92B=5QCc]!!", at s83u=s7cQo+92B=&-)[f!!", at s83!!s*t(Lz!<<#uz!!!!0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -2619 -3770]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -2706 -3770]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2768 -3768]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2839 -3770]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2955 -3768]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/complex.eps b/ast-5.3-1/sun211_figures/complex.eps
deleted file mode 100644
index 2d8ccb0..0000000
--- a/ast-5.3-1/sun211_figures/complex.eps
+++ /dev/null
@@ -1,1572 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 38 119 571 462
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:49:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5333.75 4140.95 m
-5333.75 4372.55 5145.35 4560.95 4913.75 4560.95 c
-1312.55 4560.95 l
-1080.95 4560.95 892.55 4372.55 892.55 4140.95 c
-892.55 1619.75 l
-892.55 1388.15 1080.95 1199.75 1312.55 1199.75 c
-4913.75 1199.75 l
-5145.35 1199.75 5333.75 1388.15 5333.75 1619.75 c
-f*
-1 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-5268.95 4196.15 m
-5268.95 4427.75 5081.75 4614.95 4850.15 4614.95 c
-1257.35 4614.95 l
-1025.75 4614.95 838.55 4427.75 838.55 4196.15 c
-838.55 1683.35 l
-838.55 1451.75 1025.75 1264.55 1257.35 1264.55 c
-4850.15 1264.55 l
-5081.75 1264.55 5268.95 1451.75 5268.95 1683.35 c
-h
-S
-0.564706 g
-4913.75 3743.75 m
-4913.75 3896.15 4788.95 4020.95 4636.55 4020.95 c
-2969.75 4020.95 l
-2817.35 4020.95 2692.55 3896.15 2692.55 3743.75 c
-2692.55 1716.95 l
-2692.55 1564.55 2817.35 1439.75 2969.75 1439.75 c
-4636.55 1439.75 l
-4788.95 1439.75 4913.75 1564.55 4913.75 1716.95 c
-f*
-1 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-f*
-0 g
-4848.95 3798.95 m
-4848.95 3951.35 4725.35 4074.95 4572.95 4074.95 c
-2914.55 4074.95 l
-2762.15 4074.95 2638.55 3951.35 2638.55 3798.95 c
-2638.55 1780.55 l
-2638.55 1628.15 2762.15 1504.55 2914.55 1504.55 c
-4572.95 1504.55 l
-4725.35 1504.55 4848.95 1628.15 4848.95 1780.55 c
-h
-S
-0.564706 g
-4493.75 2205.35 m
-4493.75 2247.35 4460.15 2280.95 4418.15 2280.95 c
-3188.15 2280.95 l
-3146.15 2280.95 3112.55 2247.35 3112.55 2205.35 c
-3112.55 1755.35 l
-3112.55 1713.35 3146.15 1679.75 3188.15 1679.75 c
-4418.15 1679.75 l
-4460.15 1679.75 4493.75 1713.35 4493.75 1755.35 c
-f*
-1 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-f*
-0 g
-4428.95 2261.75 m
-4428.95 2302.55 4396.55 2334.95 4354.55 2334.95 c
-3132.95 2334.95 l
-3090.95 2334.95 3058.55 2302.55 3058.55 2261.75 c
-3058.55 1817.75 l
-3058.55 1776.95 3090.95 1744.55 3132.95 1744.55 c
-4354.55 1744.55 l
-4396.55 1744.55 4428.95 1776.95 4428.95 1817.75 c
-h
-S
-843.35 3052.55 319.2 15.5999 re
-Y
-840.95 3060.95 m
-1155.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 3062.15 m
-882.95 3083.75 864.95 3101.75 843.35 3101.75 c
-820.55 3101.75 802.55 3083.75 802.55 3062.15 c
-802.55 3040.55 820.55 3022.55 843.35 3022.55 c
-864.95 3022.55 882.95 3040.55 882.95 3062.15 c
-f*
-1113.35 3012.95 m
-1132.55 3060.95 l
-1113.35 3108.95 l
-1265.75 3060.95 l
-f*
-0.564706 g
-2393.75 3225.35 m
-2393.75 3299.75 2333.75 3360.95 2258.15 3360.95 c
-1448.15 3360.95 l
-1373.75 3360.95 1312.55 3299.75 1312.55 3225.35 c
-1312.55 2355.35 l
-1312.55 2280.95 1373.75 2219.75 1448.15 2219.75 c
-2258.15 2219.75 l
-2333.75 2219.75 2393.75 2280.95 2393.75 2355.35 c
-f*
-1 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-f*
-0 g
-2328.95 3281.75 m
-2328.95 3354.95 2270.15 3414.95 2195.75 3414.95 c
-1391.75 3414.95 l
-1318.55 3414.95 1258.55 3354.95 1258.55 3281.75 c
-1258.55 2417.75 l
-1258.55 2344.55 1318.55 2284.55 1391.75 2284.55 c
-2195.75 2284.55 l
-2268.95 2284.55 2328.95 2344.55 2328.95 2417.75 c
-h
-S
-843.35 2632.55 319.2 15.5999 re
-Y
-840.95 2640.95 m
-1155.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-882.95 2642.15 m
-882.95 2663.75 864.95 2681.75 843.35 2681.75 c
-820.55 2681.75 802.55 2663.75 802.55 2642.15 c
-802.55 2620.55 820.55 2602.55 843.35 2602.55 c
-864.95 2602.55 882.95 2620.55 882.95 2642.15 c
-f*
-1113.35 2592.95 m
-1132.55 2640.95 l
-1113.35 2688.95 l
-1265.75 2640.95 l
-f*
-0.2 i
-1502 2904.14 m
-1502 2822.6 l
-1502 2807.66 1499.88 2805.32 1485.94 2804.42 c
-1485.94 2801 l
-1536.34 2801 l
-1536.34 2804.42 l
-1523.2 2805.32 1521 2807.84 1521 2820.62 c
-1521 2900.54 l
-1521 2913.32 1523.29 2915.66 1536.34 2916.74 c
-1536.34 2920 l
-1500.52 2920 l
-1460.74 2829.26 l
-1419.16 2920 l
-1383.52 2920 l
-1383.52 2917 l
-1398.28 2916.09 1401 2913.89 1401 2900.54 c
-1401 2827.46 l
-1401 2808.92 1398.43 2805.5 1383.16 2804.42 c
-1383.16 2801 l
-1425.46 2801 l
-1425.46 2804 l
-1411.6 2804.73 1409 2808.95 1409 2827.46 c
-1409 2900 l
-1453.72 2801 l
-1456.24 2801 l
-h
-1541.02 2801 m
-f*
-1620.56 2812.88 m
-1617.5 2810.36 1615.34 2809.2 1612.64 2809.2 c
-1608.5 2809.2 1607 2811.78 1607 2819.9 c
-1607 2855 l
-1607 2864.18 1606.16 2869.22 1603.82 2873.36 c
-1600.04 2880.2 1592.3 2883.8 1581.32 2883.8 c
-1572.14 2883.8 1563.5 2881.28 1558.46 2877.14 c
-1553.96 2873.36 1551 2868.14 1551 2863.64 c
-1551 2859.5 1554.46 2855.9 1558.82 2855.9 c
-1563.14 2855.9 1566.92 2859.5 1566.92 2863.46 c
-1566.92 2864.18 1566.74 2865.08 1566.56 2866.34 c
-1566.2 2867.96 1566 2869.4 1566 2870.66 c
-1566 2875.52 1571.77 2879.8 1578.98 2879.8 c
-1587.8 2879.8 1592 2874.47 1592 2864.54 c
-1592 2853.56 l
-1564.76 2842.4 1561.75 2840.96 1554.14 2834.12 c
-1550.18 2830.52 1547.66 2824.4 1547.66 2818.46 c
-1547.66 2807.12 1555.4 2799.2 1566.56 2799.2 c
-1574.48 2799.2 1581.86 2802.98 1592.84 2812.34 c
-1593.74 2802.8 1596.98 2799.2 1604.36 2799.2 c
-1610.48 2799.2 1614.26 2801.36 1620.56 2808.2 c
-h
-1592 2823.14 m
-1592 2817.56 1591.23 2815.94 1587.98 2813.6 c
-1583.66 2811.08 1578.62 2809.2 1574.84 2809.2 c
-1568.54 2809.2 1563.48 2815.51 1563.48 2823.5 c
-1563.48 2824.22 l
-1563.48 2834.84 1570.7 2841.32 1592 2849.24 c
-h
-1620.92 2801 m
-f*
-1622.62 2871.74 m
-1624.24 2871.92 1625.5 2871.92 1627.12 2871.92 c
-1633.24 2871.92 1635 2870.12 1635 2861.66 c
-1635 2777.42 l
-1635 2768.06 1632.94 2766.08 1621.9 2765 c
-1621.9 2762 l
-1665.46 2762 l
-1665.46 2765 l
-1651.96 2765.18 1650 2767.19 1650 2778.68 c
-1650 2806.94 l
-1656.34 2801 1660.4 2799.2 1667.8 2799.2 c
-1689.22 2799.2 1705 2819.36 1705 2845.46 c
-1705 2867.78 1692.65 2883.8 1675.54 2883.8 c
-1665.61 2883.8 1657.8 2879.48 1650 2869.58 c
-1650 2883.44 l
-1648.54 2883.8 l
-1639 2880.02 1632.52 2877.68 1622.62 2874.62 c
-h
-1650 2861.12 m
-1650 2866.52 1659.87 2872.8 1667.98 2872.8 c
-1681.3 2872.8 1690 2859.2 1690 2838.26 c
-1690 2818.46 1681.23 2804.2 1668.34 2804.2 c
-1659.88 2804.2 1650 2811.09 1650 2816.84 c
-h
-1711 2801 m
-f*
-1712.62 2871.74 m
-1714.24 2871.92 1715.5 2871.92 1717.12 2871.92 c
-1723.24 2871.92 1725 2870.12 1725 2861.66 c
-1725 2777.42 l
-1725 2768.06 1722.94 2766.08 1711.9 2765 c
-1711.9 2762 l
-1755.46 2762 l
-1755.46 2765 l
-1741.96 2765.18 1740 2767.19 1740 2778.68 c
-1740 2806.94 l
-1746.34 2801 1750.4 2799.2 1757.8 2799.2 c
-1779.22 2799.2 1795 2819.36 1795 2845.46 c
-1795 2867.78 1782.65 2883.8 1765.54 2883.8 c
-1755.61 2883.8 1747.8 2879.48 1740 2869.58 c
-1740 2883.44 l
-1738.54 2883.8 l
-1729 2880.02 1722.52 2877.68 1712.62 2874.62 c
-h
-1740 2861.12 m
-1740 2866.52 1749.87 2872.8 1757.98 2872.8 c
-1771.3 2872.8 1780 2859.2 1780 2838.26 c
-1780 2818.46 1771.23 2804.2 1758.34 2804.2 c
-1749.88 2804.2 1740 2811.09 1740 2816.84 c
-h
-1801 2801 m
-f*
-1832.5 2883.8 m
-1804.6 2873.9 l
-1804.6 2871.2 l
-1806.04 2871.38 l
-1808.2 2871.74 1810.54 2871.72 1812.16 2871.72 c
-1816.48 2871.72 1818 2868.89 1818 2861.12 c
-1818 2819.36 l
-1818 2806.4 1816.21 2804.42 1803.88 2803.7 c
-1803.88 2801 l
-1846.54 2801 l
-1846.54 2803.7 l
-1834.66 2804.6 1833 2806.4 1833 2819.36 c
-1833 2883.26 l
-h
-1824.22 2924 m
-1819.18 2924 1815 2919.83 1815 2914.76 c
-1815 2909.54 1818.98 2906 1824.04 2906 c
-1829.44 2906 1834 2909.78 1834 2914.76 c
-1834 2919.8 1829.59 2924 1824.22 2924 c
-h
-1851.04 2801 m
-f*
-1853.88 2872.64 m
-1855.14 2873.18 1856.76 2873.36 1858.74 2873.36 c
-1863.78 2873.36 1865 2870.66 1865 2861.84 c
-1865 2817.2 l
-1865 2806.94 1863.09 2804.42 1854.24 2803.7 c
-1854.24 2801 l
-1892.4 2801 l
-1892.4 2803.7 l
-1883.22 2804.42 1880 2806.58 1880 2813.06 c
-1880 2863.64 l
-1888.7 2871.74 1892.95 2873.8 1899.06 2873.8 c
-1907.88 2873.8 1912 2868.25 1912 2856.44 c
-1912 2818.82 l
-1912 2807.48 1909.7 2804.42 1900.86 2803.7 c
-1900.86 2801 l
-1938.3 2801 l
-1938.3 2803.7 l
-1929.48 2804.6 1927 2806.76 1927 2815.58 c
-1927 2856.8 l
-1927 2873.72 1919.2 2883.8 1906.08 2883.8 c
-1897.64 2883.8 1891.94 2880.74 1879.46 2869.22 c
-1879.46 2883.44 l
-1878.72 2883.8 l
-1869.9 2880.56 1863.78 2878.58 1853.88 2875.7 c
-h
-1941 2801 m
-f*
-2025.6 2871 m
-2025.6 2878 l
-2011.74 2878 l
-2008.14 2878 2005.44 2878.5 2001.84 2879.66 c
-1997.88 2881.1 l
-1993.02 2882.9 1988.16 2883.8 1983.48 2883.8 c
-1966.74 2883.8 1953.38 2870.84 1953.38 2854.46 c
-1953.38 2843.12 1958.07 2836.28 1970.16 2830.34 c
-1967.64 2827.82 1965.12 2825.48 1962.42 2823.14 c
-1956.48 2817.92 1954.1 2814.32 1954.1 2810.72 c
-1954.1 2806.76 1956.09 2804.78 1963.68 2801.18 c
-1950.72 2791.82 1946 2785.88 1946 2779.22 c
-1946 2769.68 1959.88 2762 1977.18 2762 c
-1990.14 2762 2003.82 2766.23 2013.18 2773.28 c
-2020.56 2779.04 2024 2784.98 2024 2792.18 c
-2024 2803.34 2015.53 2810.9 2002.2 2811.44 c
-1978.98 2812.52 l
-1969.26 2812.88 1964.94 2814.5 1964.94 2817.38 c
-1964.94 2820.98 1970.88 2827.28 1975.74 2828.72 c
-1979.16 2828.36 l
-1982.4 2828 1984.92 2828 1986 2828 c
-1992.3 2828 1999.32 2830.46 2004.72 2834.84 c
-2011.2 2839.88 2014 2846.36 2014 2855.72 c
-2014 2861 2013.12 2865.18 2010.66 2871 c
-h
-1967.46 2800.64 m
-1973.58 2799.38 1987.8 2798.3 1996.62 2798.3 c
-2013 2798.3 2019 2796.14 2019 2789.48 c
-2019 2779.04 2005.3 2772 1984.74 2772 c
-1968.9 2772 1959 2777.23 1959 2785.16 c
-1959 2789.3 1960.55 2792 1967.46 2800.64 c
-h
-1968.36 2861.84 m
-1968.36 2872.46 1973.4 2878.8 1981.68 2878.8 c
-1987.26 2878.8 1991.94 2875.73 1994.82 2870.3 c
-1998.24 2864 2000 2855.9 2000 2848.52 c
-2000 2838.62 1994.87 2833 1986.9 2833 c
-1975.74 2833 1968.36 2844.43 1968.36 2861.3 c
-h
-2031 2801 m
-f*
-2076 2801 m
-f*
-2203.08 2804.42 m
-2194.98 2804.96 2193.18 2806.76 2186.88 2820.08 c
-2142.06 2922.16 l
-2138.46 2922.16 l
-2101.02 2833.94 l
-2089.5 2807.66 2087.34 2804.96 2078.7 2804.42 c
-2078.7 2801 l
-2114.34 2801 l
-2114.34 2804.82 l
-2105.7 2804.82 2102.1 2807.03 2102.1 2811.8 c
-2102.1 2813.96 2102.64 2816.48 2103.54 2818.82 c
-2111.82 2840 l
-2158.98 2840 l
-2166.36 2822.6 l
-2168.52 2817.56 2169.78 2813.06 2169.78 2810.36 c
-2169.78 2808.74 2168.7 2806.76 2167.26 2806.04 c
-2165.1 2804.78 2163.66 2804.82 2157.18 2804.82 c
-2157.18 2801 l
-2203.08 2801 l
-h
-2114.88 2847 m
-2135.58 2896.76 l
-2156.46 2847 l
-h
-2205.96 2801 m
-f*
-2705.6 4382 m
-2703.98 4422.52 l
-2700.2 4422.52 l
-2699.12 4418.84 2696.24 4416.58 2692.82 4416.58 c
-2691.02 4416.58 2688.5 4417.17 2685.62 4418.36 c
-2676.8 4421.24 2667.98 4422.52 2659.16 4422.52 c
-2645.3 4422.52 2631.08 4417.36 2620.1 4408.46 c
-2606.42 4397.12 2599 4380.02 2599 4359.5 c
-2599 4322.96 2622.96 4298.48 2658.8 4298.48 c
-2679.14 4298.48 2696.96 4306.76 2707.94 4321.34 c
-2704.7 4324.58 l
-2691.38 4311.8 2679.5 4306.48 2664.56 4306.48 c
-2653.76 4306.48 2644.04 4309.69 2636.48 4315.94 c
-2625.86 4324.76 2620 4340.96 2620 4361.84 c
-2620 4394.42 2636.71 4415.52 2662.76 4415.52 c
-2673.2 4415.52 2682.38 4411.73 2689.58 4404.5 c
-2695.34 4398.74 2698.04 4393.7 2701.46 4382 c
-h
-2714.06 4301 m
-f*
-2717.14 4372.64 m
-2719.48 4373.18 2720.92 4373.36 2722.9 4373.36 c
-2727.58 4373.36 2729 4370.48 2729 4361.84 c
-2729 4316.3 l
-2729 4306.58 2726.52 4303.88 2716.6 4303.7 c
-2716.6 4301 l
-2756.56 4301 l
-2756.56 4304 l
-2747.02 4304.35 2744 4306.27 2744 4313.06 c
-2744 4363.82 l
-2744 4364.18 2745.23 4365.44 2746.66 4366.88 c
-2750.98 4371.2 2759.08 4374.8 2765.74 4374.8 c
-2773.48 4374.8 2778 4368.2 2778 4355.54 c
-2778 4316.48 l
-2778 4306.4 2775.93 4304.42 2765.2 4303.7 c
-2765.2 4301 l
-2805.52 4301 l
-2805.52 4304 l
-2795.26 4304.18 2793 4307.17 2793 4318.1 c
-2793 4363.46 l
-2798.28 4371.2 2803.91 4374.8 2812.18 4374.8 c
-2822.44 4374.8 2826 4369.85 2826 4354.64 c
-2826 4316.66 l
-2826 4306.4 2824.52 4304.96 2813.8 4303.7 c
-2813.8 4301 l
-2853.22 4301 l
-2853.22 4303.7 l
-2848.54 4304.06 l
-2843.14 4304.42 2841 4307.66 2841 4314.68 c
-2841 4351.76 l
-2841 4373 2833.91 4383.8 2819.92 4383.8 c
-2809.48 4383.8 2800.3 4379.12 2790.58 4368.68 c
-2787.34 4378.94 2781.22 4383.8 2771.5 4383.8 c
-2763.31 4383.8 2758.57 4381.46 2743.28 4369.94 c
-2743.28 4383.44 l
-2742.34 4383.8 l
-2733.16 4380.38 2727.04 4378.4 2717.14 4375.7 c
-h
-2854.04 4301 m
-f*
-2854.62 4371.74 m
-2856.24 4371.92 2857.5 4371.92 2859.12 4371.92 c
-2865.24 4371.92 2867 4370.12 2867 4361.66 c
-2867 4277.42 l
-2867 4268.06 2864.94 4266.08 2853.9 4265 c
-2853.9 4262 l
-2897.46 4262 l
-2897.46 4265 l
-2883.96 4265.18 2882 4267.19 2882 4278.68 c
-2882 4306.94 l
-2888.34 4301 2892.4 4299.2 2899.8 4299.2 c
-2921.22 4299.2 2937 4319.36 2937 4345.46 c
-2937 4367.78 2924.65 4383.8 2907.54 4383.8 c
-2897.61 4383.8 2889.8 4379.48 2882 4369.58 c
-2882 4383.44 l
-2880.54 4383.8 l
-2871 4380.02 2864.52 4377.68 2854.62 4374.62 c
-h
-2882 4361.12 m
-2882 4366.52 2891.87 4372.8 2899.98 4372.8 c
-2913.3 4372.8 2922 4359.2 2922 4338.26 c
-2922 4318.46 2913.23 4304.2 2900.34 4304.2 c
-2891.88 4304.2 2882 4311.09 2882 4316.84 c
-h
-2943 4301 m
-f*
-3064 4404.14 m
-3064 4322.6 l
-3064 4307.66 3061.88 4305.32 3047.94 4304.42 c
-3047.94 4301 l
-3098.34 4301 l
-3098.34 4304.42 l
-3085.2 4305.32 3083 4307.84 3083 4320.62 c
-3083 4400.54 l
-3083 4413.32 3085.29 4415.66 3098.34 4416.74 c
-3098.34 4420 l
-3062.52 4420 l
-3022.74 4329.26 l
-2981.16 4420 l
-2945.52 4420 l
-2945.52 4417 l
-2960.28 4416.09 2963 4413.89 2963 4400.54 c
-2963 4327.46 l
-2963 4308.92 2960.43 4305.5 2945.16 4304.42 c
-2945.16 4301 l
-2987.46 4301 l
-2987.46 4304 l
-2973.6 4304.73 2971 4308.95 2971 4327.46 c
-2971 4400 l
-3015.72 4301 l
-3018.24 4301 l
-h
-3103.02 4301 m
-f*
-3183.56 4312.88 m
-3180.5 4310.36 3178.34 4309.2 3175.64 4309.2 c
-3171.5 4309.2 3170 4311.78 3170 4319.9 c
-3170 4355 l
-3170 4364.18 3169.16 4369.22 3166.82 4373.36 c
-3163.04 4380.2 3155.3 4383.8 3144.32 4383.8 c
-3135.14 4383.8 3126.5 4381.28 3121.46 4377.14 c
-3116.96 4373.36 3114 4368.14 3114 4363.64 c
-3114 4359.5 3117.46 4355.9 3121.82 4355.9 c
-3126.14 4355.9 3129.92 4359.5 3129.92 4363.46 c
-3129.92 4364.18 3129.74 4365.08 3129.56 4366.34 c
-3129.2 4367.96 3129 4369.4 3129 4370.66 c
-3129 4375.52 3134.77 4379.8 3141.98 4379.8 c
-3150.8 4379.8 3155 4374.47 3155 4364.54 c
-3155 4353.56 l
-3127.76 4342.4 3124.75 4340.96 3117.14 4334.12 c
-3113.18 4330.52 3110.66 4324.4 3110.66 4318.46 c
-3110.66 4307.12 3118.4 4299.2 3129.56 4299.2 c
-3137.48 4299.2 3144.86 4302.98 3155.84 4312.34 c
-3156.74 4302.8 3159.98 4299.2 3167.36 4299.2 c
-3173.48 4299.2 3177.26 4301.36 3183.56 4308.2 c
-h
-3155 4323.14 m
-3155 4317.56 3154.23 4315.94 3150.98 4313.6 c
-3146.66 4311.08 3141.62 4309.2 3137.84 4309.2 c
-3131.54 4309.2 3126.48 4315.51 3126.48 4323.5 c
-3126.48 4324.22 l
-3126.48 4334.84 3133.7 4341.32 3155 4349.24 c
-h
-3183.92 4301 m
-f*
-3184.62 4371.74 m
-3186.24 4371.92 3187.5 4371.92 3189.12 4371.92 c
-3195.24 4371.92 3197 4370.12 3197 4361.66 c
-3197 4277.42 l
-3197 4268.06 3194.94 4266.08 3183.9 4265 c
-3183.9 4262 l
-3227.46 4262 l
-3227.46 4265 l
-3213.96 4265.18 3212 4267.19 3212 4278.68 c
-3212 4306.94 l
-3218.34 4301 3222.4 4299.2 3229.8 4299.2 c
-3251.22 4299.2 3267 4319.36 3267 4345.46 c
-3267 4367.78 3254.65 4383.8 3237.54 4383.8 c
-3227.61 4383.8 3219.8 4379.48 3212 4369.58 c
-3212 4383.44 l
-3210.54 4383.8 l
-3201 4380.02 3194.52 4377.68 3184.62 4374.62 c
-h
-3212 4361.12 m
-3212 4366.52 3221.87 4372.8 3229.98 4372.8 c
-3243.3 4372.8 3252 4359.2 3252 4338.26 c
-3252 4318.46 3243.23 4304.2 3230.34 4304.2 c
-3221.88 4304.2 3212 4311.09 3212 4316.84 c
-h
-3273 4301 m
-f*
-1 i
-423.35 3052.55 319.2 15.5999 re
-Y
-420.95 3060.95 m
-735.35 3060.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 3062.15 m
-462.95 3083.75 444.95 3101.75 423.35 3101.75 c
-400.55 3101.75 382.55 3083.75 382.55 3062.15 c
-382.55 3040.55 400.55 3022.55 423.35 3022.55 c
-444.95 3022.55 462.95 3040.55 462.95 3062.15 c
-f*
-693.35 3012.95 m
-712.55 3060.95 l
-693.35 3108.95 l
-845.75 3060.95 l
-f*
-0.564706 g
-4493.75 3531.35 m
-4493.75 3602.15 4436.15 3660.95 4364.15 3660.95 c
-3242.15 3660.95 l
-3170.15 3660.95 3112.55 3602.15 3112.55 3531.35 c
-3112.55 2752.55 l
-3112.55 2680.55 3170.15 2622.95 3242.15 2622.95 c
-4364.15 2622.95 l
-4436.15 2622.95 4493.75 2680.55 4493.75 2752.55 c
-f*
-1 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-f*
-0 g
-4428.95 3586.55 m
-4428.95 3657.35 4372.55 3714.95 4300.55 3714.95 c
-3186.95 3714.95 l
-3116.15 3714.95 3058.55 3657.35 3058.55 3586.55 c
-3058.55 2814.95 l
-3058.55 2745.35 3116.15 2687.75 3186.95 2687.75 c
-4300.55 2687.75 l
-4371.35 2687.75 4428.95 2745.35 4428.95 2814.95 c
-h
-S
-423.35 2632.55 319.2 15.5999 re
-Y
-420.95 2640.95 m
-735.35 2640.95 l
-S
-0 0 6120 7920 re
-Y
-462.95 2642.15 m
-462.95 2663.75 444.95 2681.75 423.35 2681.75 c
-400.55 2681.75 382.55 2663.75 382.55 2642.15 c
-382.55 2620.55 400.55 2602.55 423.35 2602.55 c
-444.95 2602.55 462.95 2620.55 462.95 2642.15 c
-f*
-693.35 2592.95 m
-712.55 2640.95 l
-693.35 2688.95 l
-845.75 2640.95 l
-f*
-2643.35 3232.55 308.4 103.2 re
-Y
-2643.35 3240.95 m
-2943.35 3328.55 l
-S
-0 0 6120 7920 re
-Y
-2682.95 3242.15 m
-2682.95 3263.75 2664.95 3281.75 2643.35 3281.75 c
-2620.55 3281.75 2602.55 3263.75 2602.55 3242.15 c
-2602.55 3220.55 2620.55 3202.55 2643.35 3202.55 c
-2664.95 3202.55 2682.95 3220.55 2682.95 3242.15 c
-f*
-2919.35 3272.15 m
-2925.35 3322.55 l
-2894.15 3362.15 l
-3053.75 3359.75 l
-f*
-2643.35 2812.55 320.4 190.8 re
-Y
-2643.35 2820.95 m
-2955.35 3003.35 l
-S
-0 0 6120 7920 re
-Y
-2682.95 2822.15 m
-2682.95 2843.75 2664.95 2861.75 2643.35 2861.75 c
-2620.55 2861.75 2602.55 2843.75 2602.55 2822.15 c
-2602.55 2800.55 2620.55 2782.55 2643.35 2782.55 c
-2664.95 2782.55 2682.95 2800.55 2682.95 2822.15 c
-f*
-2945.75 2942.15 m
-2937.35 2992.55 l
-2897.75 3024.95 l
-3053.75 3059.75 l
-f*
-0.2 i
-3427 3264.14 m
-3427 3182.6 l
-3427 3167.66 3424.88 3165.32 3410.94 3164.42 c
-3410.94 3161 l
-3461.34 3161 l
-3461.34 3164.42 l
-3448.2 3165.32 3446 3167.84 3446 3180.62 c
-3446 3260.54 l
-3446 3273.32 3448.29 3275.66 3461.34 3276.74 c
-3461.34 3280 l
-3425.52 3280 l
-3385.74 3189.26 l
-3344.16 3280 l
-3308.52 3280 l
-3308.52 3277 l
-3323.28 3276.09 3326 3273.89 3326 3260.54 c
-3326 3187.46 l
-3326 3168.92 3323.43 3165.5 3308.16 3164.42 c
-3308.16 3161 l
-3350.46 3161 l
-3350.46 3164 l
-3336.6 3164.73 3334 3168.95 3334 3187.46 c
-3334 3260 l
-3378.72 3161 l
-3381.24 3161 l
-h
-3466.02 3161 m
-f*
-3546.56 3172.88 m
-3543.5 3170.36 3541.34 3169.2 3538.64 3169.2 c
-3534.5 3169.2 3533 3171.78 3533 3179.9 c
-3533 3215 l
-3533 3224.18 3532.16 3229.22 3529.82 3233.36 c
-3526.04 3240.2 3518.3 3243.8 3507.32 3243.8 c
-3498.14 3243.8 3489.5 3241.28 3484.46 3237.14 c
-3479.96 3233.36 3477 3228.14 3477 3223.64 c
-3477 3219.5 3480.46 3215.9 3484.82 3215.9 c
-3489.14 3215.9 3492.92 3219.5 3492.92 3223.46 c
-3492.92 3224.18 3492.74 3225.08 3492.56 3226.34 c
-3492.2 3227.96 3492 3229.4 3492 3230.66 c
-3492 3235.52 3497.77 3239.8 3504.98 3239.8 c
-3513.8 3239.8 3518 3234.47 3518 3224.54 c
-3518 3213.56 l
-3490.76 3202.4 3487.75 3200.96 3480.14 3194.12 c
-3476.18 3190.52 3473.66 3184.4 3473.66 3178.46 c
-3473.66 3167.12 3481.4 3159.2 3492.56 3159.2 c
-3500.48 3159.2 3507.86 3162.98 3518.84 3172.34 c
-3519.74 3162.8 3522.98 3159.2 3530.36 3159.2 c
-3536.48 3159.2 3540.26 3161.36 3546.56 3168.2 c
-h
-3518 3183.14 m
-3518 3177.56 3517.23 3175.94 3513.98 3173.6 c
-3509.66 3171.08 3504.62 3169.2 3500.84 3169.2 c
-3494.54 3169.2 3489.48 3175.51 3489.48 3183.5 c
-3489.48 3184.22 l
-3489.48 3194.84 3496.7 3201.32 3518 3209.24 c
-h
-3546.92 3161 m
-f*
-3547.62 3231.74 m
-3549.24 3231.92 3550.5 3231.92 3552.12 3231.92 c
-3558.24 3231.92 3560 3230.12 3560 3221.66 c
-3560 3137.42 l
-3560 3128.06 3557.94 3126.08 3546.9 3125 c
-3546.9 3122 l
-3590.46 3122 l
-3590.46 3125 l
-3576.96 3125.18 3575 3127.19 3575 3138.68 c
-3575 3166.94 l
-3581.34 3161 3585.4 3159.2 3592.8 3159.2 c
-3614.22 3159.2 3630 3179.36 3630 3205.46 c
-3630 3227.78 3617.65 3243.8 3600.54 3243.8 c
-3590.61 3243.8 3582.8 3239.48 3575 3229.58 c
-3575 3243.44 l
-3573.54 3243.8 l
-3564 3240.02 3557.52 3237.68 3547.62 3234.62 c
-h
-3575 3221.12 m
-3575 3226.52 3584.87 3232.8 3592.98 3232.8 c
-3606.3 3232.8 3615 3219.2 3615 3198.26 c
-3615 3178.46 3606.23 3164.2 3593.34 3164.2 c
-3584.88 3164.2 3575 3171.09 3575 3176.84 c
-h
-3636 3161 m
-f*
-3637.62 3231.74 m
-3639.24 3231.92 3640.5 3231.92 3642.12 3231.92 c
-3648.24 3231.92 3650 3230.12 3650 3221.66 c
-3650 3137.42 l
-3650 3128.06 3647.94 3126.08 3636.9 3125 c
-3636.9 3122 l
-3680.46 3122 l
-3680.46 3125 l
-3666.96 3125.18 3665 3127.19 3665 3138.68 c
-3665 3166.94 l
-3671.34 3161 3675.4 3159.2 3682.8 3159.2 c
-3704.22 3159.2 3720 3179.36 3720 3205.46 c
-3720 3227.78 3707.65 3243.8 3690.54 3243.8 c
-3680.61 3243.8 3672.8 3239.48 3665 3229.58 c
-3665 3243.44 l
-3663.54 3243.8 l
-3654 3240.02 3647.52 3237.68 3637.62 3234.62 c
-h
-3665 3221.12 m
-3665 3226.52 3674.87 3232.8 3682.98 3232.8 c
-3696.3 3232.8 3705 3219.2 3705 3198.26 c
-3705 3178.46 3696.23 3164.2 3683.34 3164.2 c
-3674.88 3164.2 3665 3171.09 3665 3176.84 c
-h
-3726 3161 m
-f*
-3757.5 3243.8 m
-3729.6 3233.9 l
-3729.6 3231.2 l
-3731.04 3231.38 l
-3733.2 3231.74 3735.54 3231.72 3737.16 3231.72 c
-3741.48 3231.72 3743 3228.89 3743 3221.12 c
-3743 3179.36 l
-3743 3166.4 3741.21 3164.42 3728.88 3163.7 c
-3728.88 3161 l
-3771.54 3161 l
-3771.54 3163.7 l
-3759.66 3164.6 3758 3166.4 3758 3179.36 c
-3758 3243.26 l
-h
-3749.22 3284 m
-3744.18 3284 3740 3279.83 3740 3274.76 c
-3740 3269.54 3743.98 3266 3749.04 3266 c
-3754.44 3266 3759 3269.78 3759 3274.76 c
-3759 3279.8 3754.59 3284 3749.22 3284 c
-h
-3776.04 3161 m
-f*
-3778.88 3232.64 m
-3780.14 3233.18 3781.76 3233.36 3783.74 3233.36 c
-3788.78 3233.36 3790 3230.66 3790 3221.84 c
-3790 3177.2 l
-3790 3166.94 3788.09 3164.42 3779.24 3163.7 c
-3779.24 3161 l
-3817.4 3161 l
-3817.4 3163.7 l
-3808.22 3164.42 3805 3166.58 3805 3173.06 c
-3805 3223.64 l
-3813.7 3231.74 3817.95 3233.8 3824.06 3233.8 c
-3832.88 3233.8 3837 3228.25 3837 3216.44 c
-3837 3178.82 l
-3837 3167.48 3834.7 3164.42 3825.86 3163.7 c
-3825.86 3161 l
-3863.3 3161 l
-3863.3 3163.7 l
-3854.48 3164.6 3852 3166.76 3852 3175.58 c
-3852 3216.8 l
-3852 3233.72 3844.2 3243.8 3831.08 3243.8 c
-3822.64 3243.8 3816.94 3240.74 3804.46 3229.22 c
-3804.46 3243.44 l
-3803.72 3243.8 l
-3794.9 3240.56 3788.78 3238.58 3778.88 3235.7 c
-h
-3866 3161 m
-f*
-3950.6 3231 m
-3950.6 3238 l
-3936.74 3238 l
-3933.14 3238 3930.44 3238.5 3926.84 3239.66 c
-3922.88 3241.1 l
-3918.02 3242.9 3913.16 3243.8 3908.48 3243.8 c
-3891.74 3243.8 3878.38 3230.84 3878.38 3214.46 c
-3878.38 3203.12 3883.07 3196.28 3895.16 3190.34 c
-3892.64 3187.82 3890.12 3185.48 3887.42 3183.14 c
-3881.48 3177.92 3879.1 3174.32 3879.1 3170.72 c
-3879.1 3166.76 3881.09 3164.78 3888.68 3161.18 c
-3875.72 3151.82 3871 3145.88 3871 3139.22 c
-3871 3129.68 3884.88 3122 3902.18 3122 c
-3915.14 3122 3928.82 3126.23 3938.18 3133.28 c
-3945.56 3139.04 3949 3144.98 3949 3152.18 c
-3949 3163.34 3940.53 3170.9 3927.2 3171.44 c
-3903.98 3172.52 l
-3894.26 3172.88 3889.94 3174.5 3889.94 3177.38 c
-3889.94 3180.98 3895.88 3187.28 3900.74 3188.72 c
-3904.16 3188.36 l
-3907.4 3188 3909.92 3188 3911 3188 c
-3917.3 3188 3924.32 3190.46 3929.72 3194.84 c
-3936.2 3199.88 3939 3206.36 3939 3215.72 c
-3939 3221 3938.12 3225.18 3935.66 3231 c
-h
-3892.46 3160.64 m
-3898.58 3159.38 3912.8 3158.3 3921.62 3158.3 c
-3938 3158.3 3944 3156.14 3944 3149.48 c
-3944 3139.04 3930.3 3132 3909.74 3132 c
-3893.9 3132 3884 3137.23 3884 3145.16 c
-3884 3149.3 3885.55 3152 3892.46 3160.64 c
-h
-3893.36 3221.84 m
-3893.36 3232.46 3898.4 3238.8 3906.68 3238.8 c
-3912.26 3238.8 3916.94 3235.73 3919.82 3230.3 c
-3923.24 3224 3925 3215.9 3925 3208.52 c
-3925 3198.62 3919.87 3193 3911.9 3193 c
-3900.74 3193 3893.36 3204.43 3893.36 3221.3 c
-h
-3956 3161 m
-f*
-4001 3161 m
-f*
-4004.06 3280 m
-4004.06 3277 l
-4019.18 3276.09 4021 3274.07 4021 3260.54 c
-4021 3180.62 l
-4021 3167.3 4018.71 3164.96 4004.06 3164.42 c
-4004.06 3161 l
-4064.18 3161 l
-4091 3161 4108 3173.42 4108 3193.4 c
-4108 3201.32 4104.85 3208.52 4098.92 3213.74 c
-4093.52 3218.6 4088.66 3220.94 4076.96 3223.64 c
-4086.32 3225.98 4090.1 3227.78 4094.42 3231.56 c
-4098.92 3235.52 4102 3242.18 4102 3249.56 c
-4102 3269.72 4085.85 3280 4054.46 3280 c
-h
-4040 3219.68 m
-4056.94 3219.68 4064.78 3218.78 4071.56 3216.26 c
-4082 3212.12 4087 3204.74 4087 3193.22 c
-4087 3183.5 4083.23 3176.48 4076.06 3172.34 c
-4070.3 3168.92 4063.1 3168 4050.5 3168 c
-4042.22 3168 4040 3169.55 4040 3175.04 c
-h
-4040 3226.88 m
-4040 3268.1 l
-4040 3271.88 4041.16 3273 4043.66 3273 c
-4051.58 3273 l
-4072.28 3273 4083 3264.71 4083 3248.84 c
-4083 3234.8 4073.55 3226.88 4056.8 3226.88 c
-h
-4121.06 3161 m
-f*
-3487 2064.14 m
-3487 1982.6 l
-3487 1967.66 3484.88 1965.32 3470.94 1964.42 c
-3470.94 1961 l
-3521.34 1961 l
-3521.34 1964.42 l
-3508.2 1965.32 3506 1967.84 3506 1980.62 c
-3506 2060.54 l
-3506 2073.32 3508.29 2075.66 3521.34 2076.74 c
-3521.34 2080 l
-3485.52 2080 l
-3445.74 1989.26 l
-3404.16 2080 l
-3368.52 2080 l
-3368.52 2077 l
-3383.28 2076.09 3386 2073.89 3386 2060.54 c
-3386 1987.46 l
-3386 1968.92 3383.43 1965.5 3368.16 1964.42 c
-3368.16 1961 l
-3410.46 1961 l
-3410.46 1964 l
-3396.6 1964.73 3394 1968.95 3394 1987.46 c
-3394 2060 l
-3438.72 1961 l
-3441.24 1961 l
-h
-3526.02 1961 m
-f*
-3606.56 1972.88 m
-3603.5 1970.36 3601.34 1969.2 3598.64 1969.2 c
-3594.5 1969.2 3593 1971.78 3593 1979.9 c
-3593 2015 l
-3593 2024.18 3592.16 2029.22 3589.82 2033.36 c
-3586.04 2040.2 3578.3 2043.8 3567.32 2043.8 c
-3558.14 2043.8 3549.5 2041.28 3544.46 2037.14 c
-3539.96 2033.36 3537 2028.14 3537 2023.64 c
-3537 2019.5 3540.46 2015.9 3544.82 2015.9 c
-3549.14 2015.9 3552.92 2019.5 3552.92 2023.46 c
-3552.92 2024.18 3552.74 2025.08 3552.56 2026.34 c
-3552.2 2027.96 3552 2029.4 3552 2030.66 c
-3552 2035.52 3557.77 2039.8 3564.98 2039.8 c
-3573.8 2039.8 3578 2034.47 3578 2024.54 c
-3578 2013.56 l
-3550.76 2002.4 3547.75 2000.96 3540.14 1994.12 c
-3536.18 1990.52 3533.66 1984.4 3533.66 1978.46 c
-3533.66 1967.12 3541.4 1959.2 3552.56 1959.2 c
-3560.48 1959.2 3567.86 1962.98 3578.84 1972.34 c
-3579.74 1962.8 3582.98 1959.2 3590.36 1959.2 c
-3596.48 1959.2 3600.26 1961.36 3606.56 1968.2 c
-h
-3578 1983.14 m
-3578 1977.56 3577.23 1975.94 3573.98 1973.6 c
-3569.66 1971.08 3564.62 1969.2 3560.84 1969.2 c
-3554.54 1969.2 3549.48 1975.51 3549.48 1983.5 c
-3549.48 1984.22 l
-3549.48 1994.84 3556.7 2001.32 3578 2009.24 c
-h
-3606.92 1961 m
-f*
-3607.62 2031.74 m
-3609.24 2031.92 3610.5 2031.92 3612.12 2031.92 c
-3618.24 2031.92 3620 2030.12 3620 2021.66 c
-3620 1937.42 l
-3620 1928.06 3617.94 1926.08 3606.9 1925 c
-3606.9 1922 l
-3650.46 1922 l
-3650.46 1925 l
-3636.96 1925.18 3635 1927.19 3635 1938.68 c
-3635 1966.94 l
-3641.34 1961 3645.4 1959.2 3652.8 1959.2 c
-3674.22 1959.2 3690 1979.36 3690 2005.46 c
-3690 2027.78 3677.65 2043.8 3660.54 2043.8 c
-3650.61 2043.8 3642.8 2039.48 3635 2029.58 c
-3635 2043.44 l
-3633.54 2043.8 l
-3624 2040.02 3617.52 2037.68 3607.62 2034.62 c
-h
-3635 2021.12 m
-3635 2026.52 3644.87 2032.8 3652.98 2032.8 c
-3666.3 2032.8 3675 2019.2 3675 1998.26 c
-3675 1978.46 3666.23 1964.2 3653.34 1964.2 c
-3644.88 1964.2 3635 1971.09 3635 1976.84 c
-h
-3696 1961 m
-f*
-3697.62 2031.74 m
-3699.24 2031.92 3700.5 2031.92 3702.12 2031.92 c
-3708.24 2031.92 3710 2030.12 3710 2021.66 c
-3710 1937.42 l
-3710 1928.06 3707.94 1926.08 3696.9 1925 c
-3696.9 1922 l
-3740.46 1922 l
-3740.46 1925 l
-3726.96 1925.18 3725 1927.19 3725 1938.68 c
-3725 1966.94 l
-3731.34 1961 3735.4 1959.2 3742.8 1959.2 c
-3764.22 1959.2 3780 1979.36 3780 2005.46 c
-3780 2027.78 3767.65 2043.8 3750.54 2043.8 c
-3740.61 2043.8 3732.8 2039.48 3725 2029.58 c
-3725 2043.44 l
-3723.54 2043.8 l
-3714 2040.02 3707.52 2037.68 3697.62 2034.62 c
-h
-3725 2021.12 m
-3725 2026.52 3734.87 2032.8 3742.98 2032.8 c
-3756.3 2032.8 3765 2019.2 3765 1998.26 c
-3765 1978.46 3756.23 1964.2 3743.34 1964.2 c
-3734.88 1964.2 3725 1971.09 3725 1976.84 c
-h
-3786 1961 m
-f*
-3817.5 2043.8 m
-3789.6 2033.9 l
-3789.6 2031.2 l
-3791.04 2031.38 l
-3793.2 2031.74 3795.54 2031.72 3797.16 2031.72 c
-3801.48 2031.72 3803 2028.89 3803 2021.12 c
-3803 1979.36 l
-3803 1966.4 3801.21 1964.42 3788.88 1963.7 c
-3788.88 1961 l
-3831.54 1961 l
-3831.54 1963.7 l
-3819.66 1964.6 3818 1966.4 3818 1979.36 c
-3818 2043.26 l
-h
-3809.22 2084 m
-3804.18 2084 3800 2079.83 3800 2074.76 c
-3800 2069.54 3803.98 2066 3809.04 2066 c
-3814.44 2066 3819 2069.78 3819 2074.76 c
-3819 2079.8 3814.59 2084 3809.22 2084 c
-h
-3836.04 1961 m
-f*
-3838.88 2032.64 m
-3840.14 2033.18 3841.76 2033.36 3843.74 2033.36 c
-3848.78 2033.36 3850 2030.66 3850 2021.84 c
-3850 1977.2 l
-3850 1966.94 3848.09 1964.42 3839.24 1963.7 c
-3839.24 1961 l
-3877.4 1961 l
-3877.4 1963.7 l
-3868.22 1964.42 3865 1966.58 3865 1973.06 c
-3865 2023.64 l
-3873.7 2031.74 3877.95 2033.8 3884.06 2033.8 c
-3892.88 2033.8 3897 2028.25 3897 2016.44 c
-3897 1978.82 l
-3897 1967.48 3894.7 1964.42 3885.86 1963.7 c
-3885.86 1961 l
-3923.3 1961 l
-3923.3 1963.7 l
-3914.48 1964.6 3912 1966.76 3912 1975.58 c
-3912 2016.8 l
-3912 2033.72 3904.2 2043.8 3891.08 2043.8 c
-3882.64 2043.8 3876.94 2040.74 3864.46 2029.22 c
-3864.46 2043.44 l
-3863.72 2043.8 l
-3854.9 2040.56 3848.78 2038.58 3838.88 2035.7 c
-h
-3926 1961 m
-f*
-4010.6 2031 m
-4010.6 2038 l
-3996.74 2038 l
-3993.14 2038 3990.44 2038.5 3986.84 2039.66 c
-3982.88 2041.1 l
-3978.02 2042.9 3973.16 2043.8 3968.48 2043.8 c
-3951.74 2043.8 3938.38 2030.84 3938.38 2014.46 c
-3938.38 2003.12 3943.07 1996.28 3955.16 1990.34 c
-3952.64 1987.82 3950.12 1985.48 3947.42 1983.14 c
-3941.48 1977.92 3939.1 1974.32 3939.1 1970.72 c
-3939.1 1966.76 3941.09 1964.78 3948.68 1961.18 c
-3935.72 1951.82 3931 1945.88 3931 1939.22 c
-3931 1929.68 3944.88 1922 3962.18 1922 c
-3975.14 1922 3988.82 1926.23 3998.18 1933.28 c
-4005.56 1939.04 4009 1944.98 4009 1952.18 c
-4009 1963.34 4000.53 1970.9 3987.2 1971.44 c
-3963.98 1972.52 l
-3954.26 1972.88 3949.94 1974.5 3949.94 1977.38 c
-3949.94 1980.98 3955.88 1987.28 3960.74 1988.72 c
-3964.16 1988.36 l
-3967.4 1988 3969.92 1988 3971 1988 c
-3977.3 1988 3984.32 1990.46 3989.72 1994.84 c
-3996.2 1999.88 3999 2006.36 3999 2015.72 c
-3999 2021 3998.12 2025.18 3995.66 2031 c
-h
-3952.46 1960.64 m
-3958.58 1959.38 3972.8 1958.3 3981.62 1958.3 c
-3998 1958.3 4004 1956.14 4004 1949.48 c
-4004 1939.04 3990.3 1932 3969.74 1932 c
-3953.9 1932 3944 1937.23 3944 1945.16 c
-3944 1949.3 3945.55 1952 3952.46 1960.64 c
-h
-3953.36 2021.84 m
-3953.36 2032.46 3958.4 2038.8 3966.68 2038.8 c
-3972.26 2038.8 3976.94 2035.73 3979.82 2030.3 c
-3983.24 2024 3985 2015.9 3985 2008.52 c
-3985 1998.62 3979.87 1993 3971.9 1993 c
-3960.74 1993 3953.36 2004.43 3953.36 2021.3 c
-h
-4016 1961 m
-f*
-4061 1961 m
-f*
-4172.6 2042 m
-4170.98 2082.52 l
-4167.2 2082.52 l
-4166.12 2078.84 4163.24 2076.58 4159.82 2076.58 c
-4158.02 2076.58 4155.5 2077.17 4152.62 2078.36 c
-4143.8 2081.24 4134.98 2082.52 4126.16 2082.52 c
-4112.3 2082.52 4098.08 2077.36 4087.1 2068.46 c
-4073.42 2057.12 4066 2040.02 4066 2019.5 c
-4066 1982.96 4089.96 1958.48 4125.8 1958.48 c
-4146.14 1958.48 4163.96 1966.76 4174.94 1981.34 c
-4171.7 1984.58 l
-4158.38 1971.8 4146.5 1966.48 4131.56 1966.48 c
-4120.76 1966.48 4111.04 1969.69 4103.48 1975.94 c
-4092.86 1984.76 4087 2000.96 4087 2021.84 c
-4087 2054.42 4103.71 2075.52 4129.76 2075.52 c
-4140.2 2075.52 4149.38 2071.73 4156.58 2064.5 c
-4162.34 2058.74 4165.04 2053.7 4168.46 2042 c
-h
-4181.06 1961 m
-f*
-3485.6 3962 m
-3483.98 4002.52 l
-3480.2 4002.52 l
-3479.12 3998.84 3476.24 3996.58 3472.82 3996.58 c
-3471.02 3996.58 3468.5 3997.17 3465.62 3998.36 c
-3456.8 4001.24 3447.98 4002.52 3439.16 4002.52 c
-3425.3 4002.52 3411.08 3997.36 3400.1 3988.46 c
-3386.42 3977.12 3379 3960.02 3379 3939.5 c
-3379 3902.96 3402.96 3878.48 3438.8 3878.48 c
-3459.14 3878.48 3476.96 3886.76 3487.94 3901.34 c
-3484.7 3904.58 l
-3471.38 3891.8 3459.5 3886.48 3444.56 3886.48 c
-3433.76 3886.48 3424.04 3889.69 3416.48 3895.94 c
-3405.86 3904.76 3400 3920.96 3400 3941.84 c
-3400 3974.42 3416.71 3995.52 3442.76 3995.52 c
-3453.2 3995.52 3462.38 3991.73 3469.58 3984.5 c
-3475.34 3978.74 3478.04 3973.7 3481.46 3962 c
-h
-3494.06 3881 m
-f*
-3497.14 3952.64 m
-3499.48 3953.18 3500.92 3953.36 3502.9 3953.36 c
-3507.58 3953.36 3509 3950.48 3509 3941.84 c
-3509 3896.3 l
-3509 3886.58 3506.52 3883.88 3496.6 3883.7 c
-3496.6 3881 l
-3536.56 3881 l
-3536.56 3884 l
-3527.02 3884.35 3524 3886.27 3524 3893.06 c
-3524 3943.82 l
-3524 3944.18 3525.23 3945.44 3526.66 3946.88 c
-3530.98 3951.2 3539.08 3954.8 3545.74 3954.8 c
-3553.48 3954.8 3558 3948.2 3558 3935.54 c
-3558 3896.48 l
-3558 3886.4 3555.93 3884.42 3545.2 3883.7 c
-3545.2 3881 l
-3585.52 3881 l
-3585.52 3884 l
-3575.26 3884.18 3573 3887.17 3573 3898.1 c
-3573 3943.46 l
-3578.28 3951.2 3583.91 3954.8 3592.18 3954.8 c
-3602.44 3954.8 3606 3949.85 3606 3934.64 c
-3606 3896.66 l
-3606 3886.4 3604.52 3884.96 3593.8 3883.7 c
-3593.8 3881 l
-3633.22 3881 l
-3633.22 3883.7 l
-3628.54 3884.06 l
-3623.14 3884.42 3621 3887.66 3621 3894.68 c
-3621 3931.76 l
-3621 3953 3613.91 3963.8 3599.92 3963.8 c
-3589.48 3963.8 3580.3 3959.12 3570.58 3948.68 c
-3567.34 3958.94 3561.22 3963.8 3551.5 3963.8 c
-3543.31 3963.8 3538.57 3961.46 3523.28 3949.94 c
-3523.28 3963.44 l
-3522.34 3963.8 l
-3513.16 3960.38 3507.04 3958.4 3497.14 3955.7 c
-h
-3634.04 3881 m
-f*
-3634.62 3951.74 m
-3636.24 3951.92 3637.5 3951.92 3639.12 3951.92 c
-3645.24 3951.92 3647 3950.12 3647 3941.66 c
-3647 3857.42 l
-3647 3848.06 3644.94 3846.08 3633.9 3845 c
-3633.9 3842 l
-3677.46 3842 l
-3677.46 3845 l
-3663.96 3845.18 3662 3847.19 3662 3858.68 c
-3662 3886.94 l
-3668.34 3881 3672.4 3879.2 3679.8 3879.2 c
-3701.22 3879.2 3717 3899.36 3717 3925.46 c
-3717 3947.78 3704.65 3963.8 3687.54 3963.8 c
-3677.61 3963.8 3669.8 3959.48 3662 3949.58 c
-3662 3963.44 l
-3660.54 3963.8 l
-3651 3960.02 3644.52 3957.68 3634.62 3954.62 c
-h
-3662 3941.12 m
-3662 3946.52 3671.87 3952.8 3679.98 3952.8 c
-3693.3 3952.8 3702 3939.2 3702 3918.26 c
-3702 3898.46 3693.23 3884.2 3680.34 3884.2 c
-3671.88 3884.2 3662 3891.09 3662 3896.84 c
-h
-3723 3881 m
-f*
-3844 3984.14 m
-3844 3902.6 l
-3844 3887.66 3841.88 3885.32 3827.94 3884.42 c
-3827.94 3881 l
-3878.34 3881 l
-3878.34 3884.42 l
-3865.2 3885.32 3863 3887.84 3863 3900.62 c
-3863 3980.54 l
-3863 3993.32 3865.29 3995.66 3878.34 3996.74 c
-3878.34 4000 l
-3842.52 4000 l
-3802.74 3909.26 l
-3761.16 4000 l
-3725.52 4000 l
-3725.52 3997 l
-3740.28 3996.09 3743 3993.89 3743 3980.54 c
-3743 3907.46 l
-3743 3888.92 3740.43 3885.5 3725.16 3884.42 c
-3725.16 3881 l
-3767.46 3881 l
-3767.46 3884 l
-3753.6 3884.73 3751 3888.95 3751 3907.46 c
-3751 3980 l
-3795.72 3881 l
-3798.24 3881 l
-h
-3883.02 3881 m
-f*
-3963.56 3892.88 m
-3960.5 3890.36 3958.34 3889.2 3955.64 3889.2 c
-3951.5 3889.2 3950 3891.78 3950 3899.9 c
-3950 3935 l
-3950 3944.18 3949.16 3949.22 3946.82 3953.36 c
-3943.04 3960.2 3935.3 3963.8 3924.32 3963.8 c
-3915.14 3963.8 3906.5 3961.28 3901.46 3957.14 c
-3896.96 3953.36 3894 3948.14 3894 3943.64 c
-3894 3939.5 3897.46 3935.9 3901.82 3935.9 c
-3906.14 3935.9 3909.92 3939.5 3909.92 3943.46 c
-3909.92 3944.18 3909.74 3945.08 3909.56 3946.34 c
-3909.2 3947.96 3909 3949.4 3909 3950.66 c
-3909 3955.52 3914.77 3959.8 3921.98 3959.8 c
-3930.8 3959.8 3935 3954.47 3935 3944.54 c
-3935 3933.56 l
-3907.76 3922.4 3904.75 3920.96 3897.14 3914.12 c
-3893.18 3910.52 3890.66 3904.4 3890.66 3898.46 c
-3890.66 3887.12 3898.4 3879.2 3909.56 3879.2 c
-3917.48 3879.2 3924.86 3882.98 3935.84 3892.34 c
-3936.74 3882.8 3939.98 3879.2 3947.36 3879.2 c
-3953.48 3879.2 3957.26 3881.36 3963.56 3888.2 c
-h
-3935 3903.14 m
-3935 3897.56 3934.23 3895.94 3930.98 3893.6 c
-3926.66 3891.08 3921.62 3889.2 3917.84 3889.2 c
-3911.54 3889.2 3906.48 3895.51 3906.48 3903.5 c
-3906.48 3904.22 l
-3906.48 3914.84 3913.7 3921.32 3935 3929.24 c
-h
-3963.92 3881 m
-f*
-3964.62 3951.74 m
-3966.24 3951.92 3967.5 3951.92 3969.12 3951.92 c
-3975.24 3951.92 3977 3950.12 3977 3941.66 c
-3977 3857.42 l
-3977 3848.06 3974.94 3846.08 3963.9 3845 c
-3963.9 3842 l
-4007.46 3842 l
-4007.46 3845 l
-3993.96 3845.18 3992 3847.19 3992 3858.68 c
-3992 3886.94 l
-3998.34 3881 4002.4 3879.2 4009.8 3879.2 c
-4031.22 3879.2 4047 3899.36 4047 3925.46 c
-4047 3947.78 4034.65 3963.8 4017.54 3963.8 c
-4007.61 3963.8 3999.8 3959.48 3992 3949.58 c
-3992 3963.44 l
-3990.54 3963.8 l
-3981 3960.02 3974.52 3957.68 3964.62 3954.62 c
-h
-3992 3941.12 m
-3992 3946.52 4001.87 3952.8 4009.98 3952.8 c
-4023.3 3952.8 4032 3939.2 4032 3918.26 c
-4032 3898.46 4023.23 3884.2 4010.34 3884.2 c
-4001.88 3884.2 3992 3891.09 3992 3896.84 c
-h
-4053 3881 m
-f*
-1 i
-4433.75 3262.55 330 104.4 re
-Y
-4433.75 3359.75 m
-4755.35 3270.95 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3360.95 m
-4472.15 3382.55 4454.15 3400.55 4432.55 3400.55 c
-4410.95 3400.55 4392.95 3382.55 4392.95 3360.95 c
-4392.95 3339.35 4410.95 3321.35 4432.55 3321.35 c
-4454.15 3321.35 4472.15 3339.35 4472.15 3360.95 c
-f*
-4706.15 3234.95 m
-4737.35 3275.75 l
-4731.35 3327.35 l
-4865.75 3240.95 l
-f*
-4433.75 2868.95 339.6 190.8 re
-Y
-4433.75 3059.75 m
-4764.95 2877.35 l
-S
-0 0 6120 7920 re
-Y
-4472.15 3060.95 m
-4472.15 3082.55 4454.15 3100.55 4432.55 3100.55 c
-4410.95 3100.55 4392.95 3082.55 4392.95 3060.95 c
-4392.95 3039.35 4410.95 3021.35 4432.55 3021.35 c
-4454.15 3021.35 4472.15 3039.35 4472.15 3060.95 c
-f*
-4709.75 2853.35 m
-4748.15 2885.75 l
-4756.55 2936.15 l
-4865.75 2820.95 l
-f*
-2633.75 2105.75 342 294 re
-Y
-2633.75 2399.75 m
-2967.35 2114.15 l
-S
-0 0 6120 7920 re
-Y
-2672.15 2400.95 m
-2672.15 2422.55 2654.15 2440.55 2632.55 2440.55 c
-2610.95 2440.55 2592.95 2422.55 2592.95 2400.95 c
-2592.95 2379.35 2610.95 2361.35 2632.55 2361.35 c
-2654.15 2361.35 2672.15 2379.35 2672.15 2400.95 c
-f*
-2907.35 2103.35 m
-2951.75 2127.35 l
-2968.55 2174.15 l
-3053.75 2039.75 l
-f*
-4433.75 2031.35 342 295.2 re
-Y
-4433.75 2039.75 m
-4767.35 2326.55 l
-S
-0 0 6120 7920 re
-Y
-4472.15 2040.95 m
-4472.15 2062.55 4454.15 2080.55 4432.55 2080.55 c
-4410.95 2080.55 4392.95 2062.55 4392.95 2040.95 c
-4392.95 2019.35 4410.95 2001.35 4432.55 2001.35 c
-4454.15 2001.35 4472.15 2019.35 4472.15 2040.95 c
-f*
-4768.55 2264.15 m
-4751.75 2312.15 l
-4707.35 2336.15 l
-4853.75 2399.75 l
-f*
-4863.35 3232.55 319.2 15.5999 re
-Y
-4860.95 3240.95 m
-5175.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 3242.15 m
-4902.95 3263.75 4884.95 3281.75 4863.35 3281.75 c
-4840.55 3281.75 4822.55 3263.75 4822.55 3242.15 c
-4822.55 3220.55 4840.55 3202.55 4863.35 3202.55 c
-4884.95 3202.55 4902.95 3220.55 4902.95 3242.15 c
-f*
-5133.35 3192.95 m
-5152.55 3240.95 l
-5133.35 3288.95 l
-5285.75 3240.95 l
-f*
-4863.35 2812.55 319.2 15.5999 re
-Y
-4860.95 2820.95 m
-5175.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2822.15 m
-4902.95 2843.75 4884.95 2861.75 4863.35 2861.75 c
-4840.55 2861.75 4822.55 2843.75 4822.55 2822.15 c
-4822.55 2800.55 4840.55 2782.55 4863.35 2782.55 c
-4884.95 2782.55 4902.95 2800.55 4902.95 2822.15 c
-f*
-5133.35 2772.95 m
-5152.55 2820.95 l
-5133.35 2868.95 l
-5285.75 2820.95 l
-f*
-4863.35 2392.55 319.2 15.5999 re
-Y
-4860.95 2400.95 m
-5175.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-4902.95 2402.15 m
-4902.95 2423.75 4884.95 2441.75 4863.35 2441.75 c
-4840.55 2441.75 4822.55 2423.75 4822.55 2402.15 c
-4822.55 2380.55 4840.55 2362.55 4863.35 2362.55 c
-4884.95 2362.55 4902.95 2380.55 4902.95 2402.15 c
-f*
-5133.35 2352.95 m
-5152.55 2400.95 l
-5133.35 2448.95 l
-5285.75 2400.95 l
-f*
-2333.75 3231.35 206.4 16.7996 re
-Y
-2333.75 3239.75 m
-2531.75 3240.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 3240.95 m
-2372.15 3262.55 2354.15 3280.55 2332.55 3280.55 c
-2310.95 3280.55 2292.95 3262.55 2292.95 3240.95 c
-2292.95 3219.35 2310.95 3201.35 2332.55 3201.35 c
-2354.15 3201.35 2372.15 3219.35 2372.15 3240.95 c
-f*
-2493.35 3192.95 m
-2512.55 3240.95 l
-2493.35 3288.95 l
-2645.75 3240.95 l
-f*
-2333.75 2811.35 206.4 16.7996 re
-Y
-2333.75 2819.75 m
-2531.75 2820.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2820.95 m
-2372.15 2842.55 2354.15 2860.55 2332.55 2860.55 c
-2310.95 2860.55 2292.95 2842.55 2292.95 2820.95 c
-2292.95 2799.35 2310.95 2781.35 2332.55 2781.35 c
-2354.15 2781.35 2372.15 2799.35 2372.15 2820.95 c
-f*
-2493.35 2772.95 m
-2512.55 2820.95 l
-2493.35 2868.95 l
-2645.75 2820.95 l
-f*
-2333.75 2391.35 206.4 16.7996 re
-Y
-2333.75 2399.75 m
-2531.75 2400.95 l
-S
-0 0 6120 7920 re
-Y
-2372.15 2400.95 m
-2372.15 2422.55 2354.15 2440.55 2332.55 2440.55 c
-2310.95 2440.55 2292.95 2422.55 2292.95 2400.95 c
-2292.95 2379.35 2310.95 2361.35 2332.55 2361.35 c
-2354.15 2361.35 2372.15 2379.35 2372.15 2400.95 c
-f*
-2493.35 2352.95 m
-2512.55 2400.95 l
-2493.35 2448.95 l
-2645.75 2400.95 l
-f*
-5283.35 3232.55 319.2 15.5999 re
-Y
-5280.95 3240.95 m
-5595.35 3240.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 3242.15 m
-5322.95 3263.75 5304.95 3281.75 5283.35 3281.75 c
-5260.55 3281.75 5242.55 3263.75 5242.55 3242.15 c
-5242.55 3220.55 5260.55 3202.55 5283.35 3202.55 c
-5304.95 3202.55 5322.95 3220.55 5322.95 3242.15 c
-f*
-5553.35 3192.95 m
-5572.55 3240.95 l
-5553.35 3288.95 l
-5705.75 3240.95 l
-f*
-5283.35 2812.55 319.2 15.5999 re
-Y
-5280.95 2820.95 m
-5595.35 2820.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2822.15 m
-5322.95 2843.75 5304.95 2861.75 5283.35 2861.75 c
-5260.55 2861.75 5242.55 2843.75 5242.55 2822.15 c
-5242.55 2800.55 5260.55 2782.55 5283.35 2782.55 c
-5304.95 2782.55 5322.95 2800.55 5322.95 2822.15 c
-f*
-5553.35 2772.95 m
-5572.55 2820.95 l
-5553.35 2868.95 l
-5705.75 2820.95 l
-f*
-5283.35 2392.55 319.2 15.5999 re
-Y
-5280.95 2400.95 m
-5595.35 2400.95 l
-S
-0 0 6120 7920 re
-Y
-5322.95 2402.15 m
-5322.95 2423.75 5304.95 2441.75 5283.35 2441.75 c
-5260.55 2441.75 5242.55 2423.75 5242.55 2402.15 c
-5242.55 2380.55 5260.55 2362.55 5283.35 2362.55 c
-5304.95 2362.55 5322.95 2380.55 5322.95 2402.15 c
-f*
-5553.35 2352.95 m
-5572.55 2400.95 l
-5553.35 2448.95 l
-5705.75 2400.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frames.eps b/ast-5.3-1/sun211_figures/frames.eps
deleted file mode 100644
index a9ae19f..0000000
--- a/ast-5.3-1/sun211_figures/frames.eps
+++ /dev/null
@@ -1,1095 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 141 322 422 581
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:50:26
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-2266.55 5424.95 m
-2266.55 5477.75 2223.35 5522.15 2169.35 5522.15 c
-1582.55 5522.15 l
-1529.75 5522.15 1485.35 5477.75 1485.35 5424.95 c
-1485.35 4778.15 l
-1485.35 4725.35 1529.75 4680.95 1582.55 4680.95 c
-2169.35 4680.95 l
-2223.35 4680.95 2266.55 4725.35 2266.55 4778.15 c
-f*
-1 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-2201.75 5480.15 m
-2201.75 5532.95 2159.75 5576.15 2105.75 5576.15 c
-1527.35 5576.15 l
-1474.55 5576.15 1431.35 5532.95 1431.35 5480.15 c
-1431.35 4841.75 l
-1431.35 4788.95 1474.55 4745.75 1527.35 4745.75 c
-2105.75 4745.75 l
-2158.55 4745.75 2201.75 4788.95 2201.75 4841.75 c
-h
-S
-2019.35 4731.35 15.5999 849.6 re
-Y
-2026.55 5583.35 m
-2026.55 4738.55 l
-S
-2026.55 5212.55 189.6 15.5999 re
-Y
-2024.15 5220.95 m
-2208.95 5220.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 5222.15 m
-2064.95 5243.75 2046.95 5261.75 2025.35 5261.75 c
-2002.55 5261.75 1984.55 5243.75 1984.55 5222.15 c
-1984.55 5200.55 2002.55 5182.55 2025.35 5182.55 c
-2046.95 5182.55 2064.95 5200.55 2064.95 5222.15 c
-f*
-2244.95 5222.15 m
-2244.95 5243.75 2226.95 5261.75 2205.35 5261.75 c
-2182.55 5261.75 2164.55 5243.75 2164.55 5222.15 c
-2164.55 5200.55 2182.55 5182.55 2205.35 5182.55 c
-2226.95 5182.55 2244.95 5200.55 2244.95 5222.15 c
-f*
-2026.55 4972.55 189.6 15.5999 re
-Y
-2024.15 4980.95 m
-2208.95 4980.95 l
-S
-0 0 6120 7920 re
-Y
-2064.95 4982.15 m
-2064.95 5003.75 2046.95 5021.75 2025.35 5021.75 c
-2002.55 5021.75 1984.55 5003.75 1984.55 4982.15 c
-1984.55 4960.55 2002.55 4942.55 2025.35 4942.55 c
-2046.95 4942.55 2064.95 4960.55 2064.95 4982.15 c
-f*
-2244.95 4982.15 m
-2244.95 5003.75 2226.95 5021.75 2205.35 5021.75 c
-2182.55 5021.75 2164.55 5003.75 2164.55 4982.15 c
-2164.55 4960.55 2182.55 4942.55 2205.35 4942.55 c
-2226.95 4942.55 2244.95 4960.55 2244.95 4982.15 c
-f*
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1530 -5401]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1615 -5401]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1677 -5399]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -1747 -5401]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1863 -5399]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1569 -5179]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1671 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1741 -5179]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1779 -5178]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -1851 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -5179]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-39 95 true[1 0 0 1 -2403 -5179]@85 imagemask
-J,fQKrdXtJs8E-#
-s8N'!5QCKY!$D7!!!!Q0huE`^s1eU7#QMR>!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:
-s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7
-"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:
-!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:!!E8:!!!-$^]4?:s1eU7"96.:J-Z+i!8n+^^]8`m
-s1eUVs8Tk7#QOh>!!3-"^]4 at as1eU7+90+V!!iP>!!!'"^]4?7J%u$a!$AuV!!!8>!!!!$^]4?7!.Y%~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -2316 -4939]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -2387 -4939]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -1568 -4944]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 63 true[1 0 0 1 -1670 -4944]@85 imagemask
-5QC]_!WW3"i'78@
-!!3-"s54.^n,NH<s8RTMs*t(L&-)P-!.TM!!"],)!!#66!!!9(n,NG1^]4?Fs53kW+2 at jV&-'EF!"[uf
-!$D5k!!!8^!!",@!!!!(n,NGQrr<$!"8DirJ,TEJ!!2ip!.XnH!!!#s!!*&szrW!!!p](9o!.FnK
-s6p!g!!#4`"97ij!!!!`!!iP^z++OUr^]4?7!"ZjUs1eU7!!!PF&-%.[!!!!(i#ht!z"7SPTz!!D^T
-rVuou!!!&pJ,B9Hzr;ZZpz!.=hAz!!%NKn,NFg!!!!`s6p!gz+917!z!$D7!
-z!!!Q0^]4?7!!!!0s*t(Lz&-%.[z!$D4 at z!!#7_z!!!!`rVuouzJ,B9H
-z!.XnHz!!*&uz!!!'"rVuou!!!!"s8N'!z"98COz!!iP]^]4?7!!!9(O2(_q!!!!0s+fM4z+9)T8z!$D1Bn,NFg!!#7_!VcWp
-!!!"KquHWpzJ+s$Az!<;foIK0?J!!3,h!'^G`!!!'"n,PZQ!!!!$s53l!J,fQL#QN]^+2 at jV
-!!iP^!"[uf!!!Q0^]4o7!!!!@s1eUFp](9o5QBXA&,lP/!<<)o!.Y$a!$D7 at rr`<$p])E9s8N3$s7cQ~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1740 -4944]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1778 -4943]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-66 95 true[1 0 0 1 -1833 -4944]@85 imagemask
-&-)\0s8W,W!"],0
-s8W-!huF#^s8W-!s6p!js8W-!s8VQg!WW3"s8W,o!!*'!s8W-!p](;Ds8W-!s7cQo5QCc`s8Vus!$D7@
-s8W,s!!!Q0s8W-!rVup's8W-!s8Duu#J^<>!!)uu!!D-Z!!!!@!!!&hz%fcS0p](9o!!e#S!.4bH
-!!!+O!!#1_!!!!$J,fQkz!Pe[8%tFW[!!'e7!!g:>!!!#7!!!,Zz!!!!"n,NFgz!;HNoz!!%BH
-z!!!!_zz*rl9 at z!"XS[z!!!8>z!!!!(huE`Wz"7Q9jz!!2ip
-z!!!#szzIK0?Jz!'^G`z!!"*kz!!!!@^]4?7z&)[Efz!!hun
-z!!!8nz!!!!$p](9oz!W2otz!!3'!z!!!$!zzIt.M!z!.TM!z!!#7!
-z!!!!`huE`Wz+5d,!z!$C\1z!!!Q)z!!!!0p](9oz&,ZD-z!!iE%
-z!!!9'z!!!!(rVuouz"9/?$z!!E6$z!!!-$J,fQL!!!!$s*t(Lz!WRZM
-z!!3,8z!!!'"^]4?7!!!!"s1eU7z!WTq8z!!3,Xz!!!'"huEfY!!!!"s53k^z!WV'X
-#64`(!!3,X!!e#S!!!'"huF"4!!!!$s53kZ^]4?7"979Z"2Fm:!!E8Z!!D-Z!!!9(huEf9!!!!(s53kX
-n,NFg&-'EF!Up'h!"]+F!!)co!!",@^]4B4!!!!`s1eU7IK0?J5Q?66!.OtK!.Y$!!!#66!!3-"!!!!`
-^]4K:rr<$!+7K7 at s8Duu!"]&/s8Vus!!!9(s8W,s!!!!$s8W-!p](9o!WW3"s6p!g!!*'!s8V!W!!!"Ks8W,7z+92B at z!"],0rVuou!!!-$s7cQozJ,d:az!"\u-!!!!~>
-Q
-0.564706 g
-4055.75 4824.95 m
-4055.75 4883.75 4008.95 4930.55 3950.15 4930.55 c
-3140.15 4930.55 l
-3081.35 4930.55 3034.55 4883.75 3034.55 4824.95 c
-3034.55 4194.95 l
-3034.55 4136.15 3081.35 4089.35 3140.15 4089.35 c
-3950.15 4089.35 l
-4008.95 4089.35 4055.75 4136.15 4055.75 4194.95 c
-f*
-1 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-f*
-0 g
-3990.95 4881.35 m
-3990.95 4938.95 3945.35 4984.55 3887.75 4984.55 c
-3083.75 4984.55 l
-3026.15 4984.55 2980.55 4938.95 2980.55 4881.35 c
-2980.55 4257.35 l
-2980.55 4199.75 3026.15 4154.15 3083.75 4154.15 c
-3887.75 4154.15 l
-3945.35 4154.15 3990.95 4199.75 3990.95 4257.35 c
-h
-S
-3808.55 4139.75 15.5999 849.6 re
-Y
-3815.75 4991.75 m
-3815.75 4146.95 l
-S
-3815.75 4620.95 190.8 15.5999 re
-Y
-3813.35 4629.35 m
-3998.15 4629.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4630.55 m
-3855.35 4653.35 3837.35 4671.35 3815.75 4671.35 c
-3792.95 4671.35 3774.95 4653.35 3774.95 4630.55 c
-3774.95 4608.95 3792.95 4590.95 3815.75 4590.95 c
-3837.35 4590.95 3855.35 4608.95 3855.35 4630.55 c
-f*
-4035.35 4630.55 m
-4035.35 4653.35 4017.35 4671.35 3995.75 4671.35 c
-3972.95 4671.35 3954.95 4653.35 3954.95 4630.55 c
-3954.95 4608.95 3972.95 4590.95 3995.75 4590.95 c
-4017.35 4590.95 4035.35 4608.95 4035.35 4630.55 c
-f*
-3815.75 4380.95 190.8 15.5999 re
-Y
-3813.35 4389.35 m
-3998.15 4389.35 l
-S
-0 0 6120 7920 re
-Y
-3855.35 4390.55 m
-3855.35 4413.35 3837.35 4431.35 3815.75 4431.35 c
-3792.95 4431.35 3774.95 4413.35 3774.95 4390.55 c
-3774.95 4368.95 3792.95 4350.95 3815.75 4350.95 c
-3837.35 4350.95 3855.35 4368.95 3855.35 4390.55 c
-f*
-4035.35 4390.55 m
-4035.35 4413.35 4017.35 4431.35 3995.75 4431.35 c
-3972.95 4431.35 3954.95 4413.35 3954.95 4390.55 c
-3954.95 4368.95 3972.95 4350.95 3995.75 4350.95 c
-4017.35 4350.95 4035.35 4368.95 4035.35 4390.55 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -3071 -4806]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -3149 -4809]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -3228 -4780]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -3297 -4809]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -3383 -4809]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -3445 -4807]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -3515 -4809]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -3631 -4807]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -3429 -4587]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -3524 -4587]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -4137 -4585]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -4147 -4345]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -3414 -4352]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3515 -4351]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -3577 -4351]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-0.564706 g
-2662.55 3959.75 m
-2662.55 4018.55 2615.75 4065.35 2556.95 4065.35 c
-1746.95 4065.35 l
-1688.15 4065.35 1641.35 4018.55 1641.35 3959.75 c
-1641.35 3329.75 l
-1641.35 3270.95 1688.15 3224.15 1746.95 3224.15 c
-2556.95 3224.15 l
-2615.75 3224.15 2662.55 3270.95 2662.55 3329.75 c
-f*
-1 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-f*
-0 g
-2597.75 4016.15 m
-2597.75 4073.75 2552.15 4119.35 2494.55 4119.35 c
-1690.55 4119.35 l
-1632.95 4119.35 1587.35 4073.75 1587.35 4016.15 c
-1587.35 3392.15 l
-1587.35 3334.55 1632.95 3288.95 1690.55 3288.95 c
-2494.55 3288.95 l
-2552.15 3288.95 2597.75 3334.55 2597.75 3392.15 c
-h
-S
-2415.35 3274.55 15.5999 849.6 re
-Y
-2422.55 4127.75 m
-2422.55 3281.75 l
-S
-2422.55 3520.55 177.6 243.6 re
-Y
-2422.55 3764.15 m
-2591.75 3528.95 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3765.35 m
-2460.95 3788.15 2442.95 3806.15 2421.35 3806.15 c
-2398.55 3806.15 2380.55 3788.15 2380.55 3765.35 c
-2380.55 3743.75 2398.55 3725.75 2421.35 3725.75 c
-2442.95 3725.75 2460.95 3743.75 2460.95 3765.35 c
-f*
-2631.35 3528.95 m
-2631.35 3551.75 2613.35 3569.75 2591.75 3569.75 c
-2568.95 3569.75 2550.95 3551.75 2550.95 3528.95 c
-2550.95 3507.35 2568.95 3489.35 2591.75 3489.35 c
-2613.35 3489.35 2631.35 3507.35 2631.35 3528.95 c
-f*
-2422.55 3515.75 182.4 252 re
-Y
-2422.55 3524.15 m
-2596.55 3767.75 l
-S
-0 0 6120 7920 re
-Y
-2460.95 3525.35 m
-2460.95 3548.15 2442.95 3566.15 2421.35 3566.15 c
-2398.55 3566.15 2380.55 3548.15 2380.55 3525.35 c
-2380.55 3503.75 2398.55 3485.75 2421.35 3485.75 c
-2442.95 3485.75 2460.95 3503.75 2460.95 3525.35 c
-f*
-2634.95 3767.75 m
-2634.95 3790.55 2616.95 3808.55 2595.35 3808.55 c
-2572.55 3808.55 2554.55 3790.55 2554.55 3767.75 c
-2554.55 3746.15 2572.55 3728.15 2595.35 3728.15 c
-2616.95 3728.15 2634.95 3746.15 2634.95 3767.75 c
-f*
-q[1 0 0 1 0 0]concat
-72 100 true[1 0 0 1 -1677 -3941]@85 imagemask
-#CldSIt.M!!!e#S
-5QC``!!!8>!WW3"huE`^^`WUVs82is#N5X^s8W*!!!iQ(s1n[7^]4W>s82j%s6p!ns8V!W!WVop#QOgS
-!!%NH!!iQ'!!!!`rW!3'qu?]s+9)<Gs7cQo!"]*[#QO8n!!!9(^^'nt!!!!(s54.^^]4?7"97iqs*t(L
-!!E8j#QFc(!!!'"p]pg!!!!!"s7ciuz!WW'&qu?]s!!3,t#Q+Q%!!!'"rWi2u!!!!"s8E8uz!WW-(n,NFg
-!!3-!#Oh]n!!!'"rs/#n!!!!$s8N>^z"98B+huE`W!!E9$#N,R^!!!9(rs-=>!!!!0s8N>>z
-+92?G^]4?7!'gM`#J^<>!!%NKrs+&S!!!'"s8N=S!!!!$s8W*!z&-)\/z!'gM`rVuou!!*'!
-s8Duu!!!-$s8W&u!!!!0s8W,sz5QCc`qu?]s!<<*!s7cQo!!iQ(s8Vio!!!Q0s8W,g!!!!`s8W-!n,NFgs8W-!
-s53kW"98E$s8V!W!!iQ(s8W,7!!", at s8W-!J,fR6s8W-!rr<$!J,fQKs8Duu!WW3"s8Vus!!E9$s8W,o
-!!!9(s8W-!n,NG!s8W-!s1eU7&-)\0s8N'!!$D7 at s8Vus!!#7`s8W,g!!!"Ks8W-!^]4?7J,fQKrr<$!
-!<<*!s82is!!*'!s8VQg!!!'"s8W,7!!!!"s8W-!z!WW3"qu?]s!!3-"s6p!g!!!-$s8Tk7!!!!$s8W*!z
-"98E!z!!E9$p](9o!:U*js53kW!!)Kjs8Tk7!!!&h"98CO!!!!"n,r^jz!Up3krVuou!!D]m
-s82is!!!,j"989!!!!!(n,`Rez#Ohcop](9o!"\Q"s7cQo!!!Q!!WVop!!!!@n,WL`z+7K:1
-p](9o!'frQs7cQo!!#7Q!.XbD!!!"Kn,Rt9zs6p"Qqu?]s!WVWh5PtK]!!E8j!$D1?!!!9(n,O!u!!!!0s6p"!rr<$!+91g1#QK;S!.Y%<!!E8Z!!3-"n,NIg
-n,N^ns6p!gJ,TF4s8VQg!'gM`s8RlD!!!Q0s8Virn,NFjs8W,7!Up'h!.Y%J!!2Qh!!!9(huEfI~>
-Q
-q[1 0 0 1 0 0]concat
-76 95 true[1 0 0 1 -1755 -3944]@85 imagemask
-+92B at p`KP9s6q-1
-s8Vj9s8W,g+92B at p`KP9s6pR!s8VQns8W,7!WW3"!!*'!s*t+Ls8DuuJ,fNK!.Y%H!!%NKrr<%Ks82is
-J,fKJ!'gM]!!*'!qu?^]s82iss8Vus!'gM]!!3-"p](:Ys82j!s8VQg!'gM]!!E9$huEaAs82j%s8V!W
-!'gM]!"],0^]4@!s82j-s8RTL!'gM]!$D7 at J,fR6s82j]s8N'!!'gM]!.Y%J!!!!`s82kHs82is!'gM]!<<)s!!!!`
-s82ots7cQo!'gM]!WW2h!!!!`s83!!s53kW!'gM]#QOh^!!!!`s83E-s1eU7!'gM]&-)Z[!!!!`s83u=
-s*t(L!'gM_5QC``!!!!`s8G7_rVuou!'gM`J,fEH!!!!`s8W-!qu?]s!'gM`s8Vio!!!!`s8W-!n,NFg
-!'gM`s8V!W!!!!`s8DuthuE`W!'gM]s8Tk7!!!!`s87BHJ,fQL!'gM]5Q?66!!!!`s83u=z!'gM]&,lP/!!!!`
-s83-"z!'gM]"8i-!!!!!`s82oqz!'gM]!<)ru!!!!`s82kHz!'gM]!'bu6!!!!`s82j=
-^]4?7!'gM]!"[uf!!!!`s82j%n,NFg!'gM]!!Dur!!!!`s82j!qu?]s!'gM]!!3'!!!!!`s82isrr<$!
-!'gM]!!%M!!!!!`s82isJ%u$a!'gM]!!#7Q!!!!`s82is5PP3Y!'gM]!!#7_!!!!`s82isJ,b$!!'gM]!!3-"huEaA
-s82j]s8W*!!'gM]!'gM`rr<$`s82j]s8W*!!'gM]!'gM`rr<$`s82isz!'gM]z!!!!`s82is
-z!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!", at s82isz+92B=z!!", at s82isz+92B=z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 94 true[1 0 0 1 -1833 -3915]@85 imagemask
-!$C\1z!!%NJ
-z!!!'"s*t(L!!!!$s8Tk7z#QOh^z!"],0n,NFg!!", at s7cQo!!!!@s8Vusz5QC9O
-z!'gMAIK0?J!!#7`i'%,@!!!!`s56*Az5QBX`z!'gMA%tFW[!!", at i"(><!!!!@s54-t
-z+917(^]4?7!"]+F"5j.Z!!!9(J-4^0!!!!"rW!&Yz!!!!"n,NFgz!Up'hz!!2ipz!!!#o
-zzp](9oz!;lfsz!!%BHz!!!"HzzIK0?Jz!<)ruz!!*$!
-z!!!'"z!!!!"rr<$!z"93lOz!!E7Oz!!!-$J,fQL!!!!(s1eU7z#QMR>
-z!"]+fz!!!Q0huE`W!!!!0s53kWz+91g1z!$D71z!!#7`n,NFg!!!!`s7cQoz5QCKY
-z!.Y%Hz!!%NKqu?]s!!!$!s82iszs8W&uz!<<)uz!!3-"rVuou!!!'"s8N'!
-!!!!$s8UsVz"98DYJ,fQL!!E9$O+731!!!9(s,V[1!!!!(s8Rkiz&-)Y7^]4?7!"],0#J^<>
-!!", at rr_0Z!!!!@s8E,Yz+92<Bn,NFg!'gM]!Up'h!!#7`quQ9e!!!"Ks82omzJ,f9Dp](9o!.Y%D!;HNo
-!!*'!n,W at d!!!$!s6p#9!!!!"s8VQgIK0?J!WW2X!.FnJ!!3-"huGq@!!!-$s1eV!!!!!$s8Tk7*rl9@
-#QOh>!$;1@!!iQ(J,g[A!!!Q0s*t([J,fQ[s8RTL&&8/F+92?@!"ZjF!$D7@!!!8>!!#7`rVup'huEaA
-s8Duu#N,R^5QC]_!!D]j!.Y%H!!!,j!!%NKqu?^!n,NIgs82is"8Diss8Vus!!iE%!WW3!!!!9'!!iQ(rr<$@rr>:`s8Virs8V"As8W,o"98DZ5QCc`p]LQri'78As7c]rs53~>
-Q
-q[1 0 0 1 0 0]concat
-82 95 true[1 0 0 1 -1904 -3944]@85 imagemask
-5QCc`s8Vio!!!!`
-s8W-!s7cQo!!#7`s8W-!p](9o!'gM`s8W,oz!<<*!s82isz+92B at J,fQL!!!!0s8W*!z
-!!!9(s82isz!!iQ(qu?]sz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9o
-z"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$
-s7cQoz!!E9$p](9oz"98Drz!!!!$s8Vioz!!!-$s7cQoz!!E9$p](:6z
-"98Dr!!!u=!!!!$s8Vio!'C5]!!!-$s7cQo49,?]!!E9$p](:Vz"98Dr!!#+]!!!!$s8Vio!'C5]
-!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!;lfs!!!-$s7cQoqu?]s!!E9$p](<lz"98Dr
-!!2ut!!!!$s8Vio!W2ot!!!-$s7cQrqu?]s!!E9$p](Qsz"98Dr!"\u-!!!!$s8Vio+8c*=!!!-$
-s7cSDqu?]s!!E9$p]:Emz"98Dr+926=!!!!$s8W-!s82is!!!-$s8W-!qu?]s!!E9$s8W,sz
-"98E$s8Vus!!!!$s8W-!s82is!!!-$s7cj!qu?]s!!E9$p]1?lz"98Dr!'gA]!!!!$s8Vio+8c*=!!!-$s7cR)
-qu?]s!!E9$p](Qsz"98Dr!!E-!!!!!$s8Vio!W2ot!!!-$s7cQpqu?]s!!E9$p](<lz"98Dr
-!!)os!!!!$s8Vio!;lfs!!!-$s7cQoHiO-H!!E9$p](;Az"98Dr!!%BH!!!!$s8Vio!'C5`^]4K:
-s7cQo49,K!!!E9$p](:V!!C":"98Dr!!#+]"2Fm=s8Vio!'C5d^]4K:s7cQo)up5Z!!E9$p](9o!!g:>"98Drz
-&&8/Is8Vio!!!!0^]4K:s7cQo!!!PF!!E9$p](9o!$AuV"98Drz+2 at jYs8Vio!!!!`^]4K:s7cQo
-!!#7!!!E9$p](9o!.Vca"98DrzJ%u$ds8Vio!!!$!^]4K:s7cQo!!3,8!!E9$p](9o"96.:"98Dr
-!!!!0s1eU>s8Vio!!",@^]4W>s82is!<<)7!"],0rVup's8Tk75QCc`J-#]Ms1e[8s8W-!s8W-!^d%l!s8W-!s8W,75QCc`s8W-!s8Tl!s8W-!s8W-!s1gl!s8W-!s8W-!^]~>
-Q
-q[1 0 0 1 0 0]concat
-61 67 true[1 0 0 1 -1988 -3944]@85 imagemask
-&-)\0s*t(L&-)\0
-s*t(L&-)\0s*t(L#QOi(rr<$!!<<*!huE`W!.Y%KJ,fQL!'gM`z!$D7 at z!$D7 at z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?z!$D7?
-z!$D7?z!$D7?z!$D7 at z!$D7@!!)uu!$D7@!!3+M!$D7 at J-5he!$D7 at J-Z,4!$D7@^^pJ7!$D7@
-^`WUG!$D7 at i'782!$D7>pj`>=!$D7>s8W,o!$D7=s8W,o!$D7=J,fQD!'gM]5QCcY!'gM]5QCcQ!.Y%H
-+92B1!WW2t&-)\!&-)\-#QOh^&-)\-"98D:&-)\-!<<(L&-)\-!.Y"Kz!$D1?z!!2Qh~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -2051 -3942]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-114 67 true[1 0 0 1 -2121 -3944]@85 imagemask
-5QCc`i'78As1n[7
-s8Tl!s8W,W5QCc`_#OH7s1gl!s8V"As8W,7s8W-!^d%l!s55"!s8RV!s8Vus"98E$!!E9$rW!3's7cQp
-s8Vus!WW2p!!E9$n,NIgs82its8Vio"98DZ!!*'!p](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,
-s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQo
-s8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg
-!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<o
-s6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!h
-s8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W
-!.Y%D!!*'!n,NLhs53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLh
-s53kWJ,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kW
-J,f9D!<<)g!!3-"huEb,s7cQos8VQg!WW2X!!%NKp](<os6p!hs8V!W!.Y%D!!*'!n,NLhs53kWJ,f9D
-!<<)g!!3-"huEb,s82iss8Vio!WW2X!!%NKrVurus82j!s8V!W!.Y%K!!3-"rW!'#s1eU7J,fP!!WW3"!!E9$^]4 at a
-s8Tk8s8W+L#QOh>!!%NKqqqSVs3JIcs8RTL!.Y%Gp]pj!a7'W>s*t(Ls8Voo+92 at nr'15]!!!$!s7lWo
-s8RZMs8W*!!!3-"pj`>DrrE*!s8Duu#QOi!5QCc_!.Y%Kqu?^]s8Vj9s8Vus5QCcY!!#7`s7d-)s7cR9
-s8VQg!'gM`p]pj!n,N^ns53kW5QCcY!WW2X!!E9$J,fQLzJ,]KK!<<#uz!!!!$n,NFg#N,R^!!~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -2238 -3942]@85 imagemask
-!!!!@qu?]s!!!'"
-s1eU7!!!Q0s6p!g!!#7`s82is!!%NKs8N'!!!3-"s8RTL!!E9$s8Tk7!!iQ(s8V!W!"],0s8VQg!$D7@
-s8Vio!'gM`p^d9&!'gM`^]FE7!.Y%K!!%KK!<<)u!!#66!<<)s!!!O[!WW2p!!!8>!WW2h!!!,Z"98Dj
-!!!&h"98DZ!!!&8"98DZz#QOh>z#QOh>z#QOh>z#QOgSz&-)Z[z&-)Z[z&-)Z[
-z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0z&-)Y0
-z&-)Y0z&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)\0s8W,W&-)V/!'gM!&-)V/
-!'gM!&-)V/!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gM!#QOc'!'gL6"98?#!.Y$!"98?#!.Y$!"98B$!.Y$!!WW0"!.Y"K!WW0"!.Y"K!<<'!
-!.XtJ!<<'!!.XtJ!.Y"K!.XnH!'gL6!.XnH!'gL6!<;fo!$D5k!<;fo!"]+F!<;Ng!!iP>!WV'X!!E8Z
-"96.:!!3,h#QK;S!!*&u+9)<@!!#7`s8Duu!!", at s7cQo!!!-$s53kW!!!$!rr<$!!!!!(n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-92 93 true[1 0 0 1 -2036 -3722]@85 imagemask
-5QCc`s*t(L#QOhn
-5QCc`s*t(L#QOhn5QCc`s*t(L&-)\!!<<*!huE`W+92?@!$D7 at z5QCKY!"],-zJ,f!<!!iQ%
-zJ,eF,!!iQ!zs8Tk7!!iQ!!!!!"s8RTL!!E8j!!!!$s8N'!!!E8j!!!!$s8Duu!!E8j!!!!(
-s82is!!E8j!!!!0s7cQo!!E8j!!!!@s7cQo!!E8j!!!!@s6p!g!!E8j!!!!`s53kW!!E8j!!!"Ks1eU7!!E8j!!!$!
-s*t(L!!E8j!!!'"s*t(L!!E8j!!!'"rr<$!!!E8j!!!-$rVuou!!E8j!!!9(qu?]s!!E8j!!!Q0p](9o
-!!E8j!!!Q0n,NFg!!E8j!!", at n,NFg!!E8j!!#7`huE`W!!E8j!!%NK^]4?7!!E8j!!*'!J,fQL!!E8j
-!!*'!z!!E8j!!3-"z!!E8j!!E9#z!!E8j!!iQ%z!!E8j!!iQ!z!!E8j!"],!z!!E8j
-!$D71z!!E8j!'gMAz!!E8j!'gM!z!!E8j!.Y$!z!!E8j!<<'!z!!E8j!WW-!
-z!!E8j"98?#z!!E8j"989!z!!E8j#QOQ!z!!E9$s8VQgz!!E9$s8V!Wz
-!!E9$s8W&uz!!E9$s8W,Wz!!E9$s8W,oz!!E8j"98E$z!!E8j!!iQ(^]4?7!!E8j!!*'!huE`W
-!!E8j!!", at p](9o!!E8j!!!9(qu?]s!!E8j!!!-$rVuou!!E8j!!!$!rr<$!!!E8j!!!"Ks*t(L!!E8j
-!!!!`s*t(L!!E8j!!!!`s1eU7!!E8j!!!!@s1eU7!!E8j!!!!@s53kW!!E8j!!!!0s53kW!!E8j!!!!0
-s53kW!!E8j!!!!0s53kW!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(
-s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g!!E8j!!!!(s6p!g
-!!E8j!!!!(s6p!g!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!0s53kW!!E8j!!!!@s1eU7!!E8j
-!!!!@s1eU7!!E8j!!!!`s1eU7!!E8j!!!!`s*t(L!!E8j!!!"Krr<$!!!E8j!!!$!rr<$!!!E8j!!!'"rVuou!!iPn!!!9(qu?]s!!iQ!!!", at n,NFg!!iQ!!!*'!huE`W!"],/!$D7 at J,fQL
-!'gM`s8W-!z"98E$s8W,oz5QCc`s8W,7z5QCc`s8W&uz5QCc`s8RTLz~>
-Q
-q[1 0 0 1 0 0]concat
-99 95 true[1 0 0 1 -2130 -3722]@85 imagemask
-5QCc]!!!!"s8W-!
-i'78Aqu?]s!WW3"s56-As82is!!3-"s8V!Zs8N'!!!!!$s8Vus!<;rsz!<<)o!!%NDz!!*'!
-n,NGQp](9o!!!"Ks53kW+7K71zJ,d:a!$C\1z!.Y$!!!!Q!z!!%NKJ,fQ[n,NFg!!!$!
-rr<$!#P\9!zs8N'!!!i9!z!<<#u!!!,rz!!*&u!!!!$qu?]s!!!'"qu?]s!W2ot!!!!"s82is!!2ut
-z"989!!!!#uz!!E8rzrVuou!!!-$p](9o!.OtK!!!!(s6p!g!!%KKz#QO8n!!!!`
-z!"]+fz5C`_6!!!Q0huE`W!$?^k!!!!0s1eU7!!"*kz+90+V!!!!@^]4?7!$D6Vz
-&&8/F!!#7`J,fQL!"[uf!!!!`s*t(L!!!8^z5Q:]`!!!!(huE`W!.Y"Kz"7Q9j!!%NJz!!E9$s8W-!
-rVuou!!!-$s8W-!s8Duu!!!!"s8W-!s8Vusz!WW3"s8W,sz!!*'!s8W-!p](9o!!!#s!!!!$
-s7cQozrVuou"97ijz!.FnJ!!E8jz!!%KK!!!9(huE`W!!!!`!!!!(s53kWz5C`_6
-&-(Pfz!$?^k!"]+Fz!!"*k!!",@^]4?7!!!!@^]4?Vs*t(Lz&&8/F+9-ikz!"[uf!'gJ`z
-!!!8^!!#7`z!!!!(huEb,rr<$!z"7Q9jJ,TEJz!!D]j!<<#uz!!!,r!!*&sz
-!!!!"p](<oqu?]sz!W2ous7cQoz!!)os!WVopz!!!#s!!E8jzzrW!'#n,NFg
-z!.FnMs6p!gz!!%KK#QN]^z!!!!`!!iP^zz56)5o^]4?7z!$?_%s1eU7z!!"*k
-+9-ikz!!!!@^`WT,zz&&9:eJ,fQLz!"\!Prr<$!z!!!8^5Q:]`z!!!!(
-i.(_+zz"7Ug>zz!!D`jqu?]sz!!!,rs82isz!!!!"q#C*hzz
-!WE&nzz!!)utp](9oz!!!$!s6p!gzzs8VQgzz!.Y%,zz!!%NKhuE`W
-z!!!!`s1eU7zz5QAM!zz!$D6Vzz!!", at J,fQLz!!!!@s*t(L
-zz&,uV0zz!"])0zz!!!9'zz!!!!(rVuouzz"9&9#
-zz!!E-!zz!!!-!zz!!!!"p](9ozz!VcWpzz!!)Kgzz!!!#gzzz?iU0,!!!!~>
-Q
-q[1 0 0 1 0 0]concat
-62 107 true[1 0 0 1 -2754 -3720]@85 imagemask
-!!!$!huE`W!!!Q0
-rVuou!!#7`s*t(L!!*'!s53kW!!E9$s7cQo!!iQ(s82is!"],0s8N'!!'gMQ+9-ik!.Y$a"96.:!<<'!
-!<:sW!WW-!!.XJ<!WW&t!'g5Y"98,r!$D+=#QO8n!"]&/#QO8n!"]&/&-(Pf!!iN(+90+V!!iOS+90+V
-!!E7O+90+V!!E8:5Q?66!!E8Z5Q?66!!3,XJ,b$!!!3,XJ,]KK!!3,hJ,]KK!!3,hJ,]KK!!*&os8N'!!!*&os8N'!
-!!*&os8Duu!!*&os8Duu!!*&os8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu!!*&ss8Duu
-!!*&ss8Duu!!*&ss8Duu!!*&sJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,tJ,TEJ!!3,t5Q:]`!!3,p5Q:]`
-!!E8r+9)<@!!E8r+9)<@!!E8r+9-ik!!iQ!&-%.[!!iPn#QK;S!"],!#QMR>!"],!"96.:!$D7!!WV'X!$D7!!WV'X
-!'gM!!<;Ng!'gM!!.XbD!.Y$!!'gA]!<<(L!$D1?!WW0"!!iN("98?#!!E7O"98?#!!3,X#QO]%!!%ND
-&-)D)!!", at +91g1!!!9(s8V!W!!!$!s8Tk7!!!!`s8RTL!!!!(s8N'!!!!!(s8Duu!!!!0s82is!!!!@
-s7cQo!!!!`s53kW!!!"Ks1eU7!!!$!rr<$!!!!'"rVuou!!!-$p](9o!!!9(huE`W!!!Q0^]4?7!!", at z!!%NH
-z!!*&oz!!3,Xz!!E8:z!!iN(z!"]&/z!"\u-z!$Ct9z!'frQ
-z!'fBAz!.Vcaz!.TM!!!Dur!<3$!!"]&/!<3$!!$D1?!<)ru!'gJ`!<)ru!.Y"K!<)ru
-!<<'!!<)ru!WW0"!<)ru"98B$!<3$!#QOf(!<3$!&-)V/!.TM!5QC]_!.VcaJ,fEH!'fBBs8Vio!$D+Ds8VQg!"],0s8Tk7!!iQ(s8RTL!!E9$s8Duu!!*'!s6p!g!!#7`s*t(L!!!'"n,NFg~>
-Q
-q[1 0 0 1 0 0]concat
-82 74 true[1 0 0 1 -2743 -3480]@85 imagemask
-!!!$!huE`W&&8/F
-!"],/!!!!`n,NFgJ,fP!!!%ND!!!'"s8V!W!<;rs!!E9$s7cQps82is&-(QPqu?j!rVup?s*tX[!!E9#
-!!#7_!!iOS#QOf(!.XnH"96.As8N'!s7cQps54Ffrr<*"p](<on.5R!J-#]>!!%N<&,:X)"979Z!.Xbc
-n/m/cs53kW5PuV]%tFob^]4?Vr'.t-J.M[q!!",?5C`uh&-'EF!"]&nJ-Wk3s*t(L&-%+Z#J_G]J,fQSs*k"N^`WT,
-!!!9(rW!&95Q?66!!E9#!!C#$rr<$!"989!"2I/$!!!!$s82j!^jl at a!!!'"qu?]sJ,]KK!!3,p!!!"K
-rr<$!!<;fo!!%NKzs7cQo!.XtJ!!!$!p](9oJ,TEJ!!%ND!!!$!rVuou!.XbD!!*&uzJ,B9H
-!<<#u!!!!`qu?]ss8Duu!!#7]!!!$!rVuou!'gG_!!*&uz+8u6?!<<#u!!!!@rVuous8Duu!!",@!!!$!rVuou
-!$D4@!!*&uz+9)<@!<<#u!!!!@s*t(Ls8Duu!!", at J,fTLrVuou!'gL6!!*&uz5QAM!!<<#u
-!!!!`s1eU7s8Duu!!#7`huEb,rVuou!'gMA!!%NKzJ,eF,!.Y"K!!!"Ks6p!gJ,]KK!!%KJn,NH<
-rr<$!!.Ot;!!#7`zrr;`n!'gJ`!!!#uJ+s!D5Q?66!!)qHp](:Ys*t(L!W7HF!!", at J,fQMr'1)Z!$D5k!!!&p
-5PtK]&-'EF!!E!\rVup/s1eU7"8Eu;!!!9(^]4?>n/qZ1!!iP^!!!8n+9)<@"979Z!"[uurr<$$s6p!g
-+5d\0J,fWMn,NGQ^^pHq!!*&o!!#7!#QK;S!.XnH!<7QSs1eU75Q1W`rr<0$^]4?Vrr<<'!!E8:!!!Q0
-i#hjs"979Z!!iQ(s7cQps53kW!WW3"n,NLhn,NFgJ,fQ,!!3,h!!!!@s8RTL!<;Ng!!!9(rVuous7cQo!!%N,z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-96 93 true[1 0 0 1 -2019 -3487]@85 imagemask
-5QCc`s8V!Wz
-5QCc`s8W+Lz5QCc`s8W,sz!.Y%Ks8W-!J,fQL!$D7 at s8W-!n,NFg!!iQ(!!E9$qu?]s!!E9!
-!!!Q0s*t(L!!E9!!!!$!s53kW!!E8r!!!!@s6p!g!!3,p!!!!(s82is!!3,p!!!!"s8Duu!!3,pz
-J,b$!!!3,pz5QAM!!!3,pz+917!!!3,pz#QO8n!!3,pz"98,r!!3,pz!WW&t!!3,pz
-!<;rs!!3,pz!.XtJ!!3,pz!.Y"K!!3,pz!'gJ`!!3,pz!$D5k!!3,pz!$D6V
-!!3,pz!"]+F!!3,pz!!iP^!!3,pz!!iP^!!3,pz!!iPn!!3,pz!!E8j!!3,p
-z!!E8r!!3,pz!!3,p!!3,pz!!3,p!!3,pz!!3,t!!3,pz!!3,t!!3,pz!!*&s!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!*&u!!3,pz!!%NJ!!3,pz
-!!%NJ!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!%NK
-!!3,pz!!%NK!!3,pz!!%NK!!3,pz!!*'!!!3,pz!!*&u!!3,pz!!*&u!!3,p
-z!!*&u!!3,pz!!*&u!!3,pz!!3-!!!3,pz!!3,t!!3,pz!!3,t!!3,pz
-!!E9!!!3,pz!!E9!!!3,pz!!E8r!!3,pz!!iQ!!!3,pz!!iQ!!!3,pz!"],!!!3,pz
-!"],!!!3,pz!$D7!!!3,pz!$D7!!!3,pz!'gM!!!3,pz!.Y$!!!3,pz!<<(L
-!!3,pz!<<'!!!3,pz!WW-!!!3,pz"989!!!3,pz#QO]%!!3,pz&-)D)!!3,p
-z+91g1!!3,pzJ,eF,!!3,pzs8Tk7!!3,p!!!!"s8N'!!!3,p!!!!(s8Duu!!3,p!!!!@s7cQo!!E8r!!!"Ks6p!g!!E9!!!!-$s1eU7!!iQ%!!", at rr<$!!"],0!!iQ(qu?]s
-!$D7 at s8W-!n,NFg!WW3"s8W-!J,fQL5QCc`s8W,oz5QCc`s8W+Lz5QCc`s8Tk7z~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -2121 -3486]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-58 65 true[1 0 0 1 -2184 -3486]@85 imagemask
-!!!'"p](9o!!!Q0
-rr<$!!!#7`s1eU7!!*'!s53kW!!3-"s7cQo!!E9$s82is!"],0s8Duu!$D7 at s8N'!!$D7 at s8RTL!'gM`
-s8Tk7!.Y%H!'fBA!<<)W!!hun!<<(L!!D]j!WW0"!!)co!WW-!!!%BH"989!!!#+]"98,r!!"&?#QO8n
-!!!N0#QN]^!!!6(#QN]^!!!7S&-'EF!!!+O&-%.[!!!&8&-%.[!!!$"&,uV0z+9)<@z+9)<@z+8u6?
-z+8u6?z+8u6?z+8u6?z+8u6?z+8c*=z+8c*=z+8c*=z+8c*=
-z+8c*=z+8c*=z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z#Q+Q%
-z#Q=]'z#Q=]'z"9&9#!!2Qh"9&9#!!i9!!WN-"!"\u-!WN-"!"]&/!<3$!!$D1?!<7QL!$D4@!.TM!!'gJ`!'e7!!'gJ`!$C,!!'gG_!$C,!!'gG_!"\Q!!.XtJ!!i9!!.XnH!!E-!
-!.XbD!!)uu!<;Ng!!%M!!WV'X!!#7Q"96.:!!!Q0s8RTL!!!-$s8Duu!!!$!s7cQo!!!!@s1eU7~>
-Q
-q[1 0 0 1 0 0]concat
-68 69 true[1 0 0 1 -1413 -5707]@85 imagemask
-!!3*"!!*%L!!!Q0
-n,NRjn,NGQs8E!'s82isJ,fP!&-)V/!<<*!^`WUVJ-#]Ms6q-1s1ea:s8VjYs8V!Zs8W,s5QCcQ#QOi(
-s*t(Kn-B!ns8W-!r*Td0s7ehYs7d]Is8V!fs8Vio&-)[F#QOi!!"],0J-#]Mp](j)s*t+Ls7cR)s8RTL
-J,f9D&-)Y0!.Y%D!"],0!!%NKp](j)rr<%Ks7cR!s8N'!J,f9D#QOf(!.Y%D!!iQ(!!%NKp](Errr<%Ks7cQrs8RTL
-J,f9D!WW1M!.Y%D!!*'!J,k*!p](;Ds1eVas7cQo5QAM!J,f9D!$D7!!.Y%D!!!Q0n,Rt<p](:!s7cSD
-s7cQo!WW&tJ,f9D!!%NK!.Y%D!!!!@s1j-ap](9o"97k?s7cQo!!%NHJ,f9D!!!!@s8W,oz"98E$
-p](9o!!#7`s7cQo!!!!(s8Vioz!<<)o!!!7S!!", at p](:Yn,NG1s7cQoJ,B9H+92*9!<<#u!$D79!!3-"!!",@
-p](?prr<$@s7cQps8RTL+92*9"98CO!$D79!!E9$J,g\kp](Ers*t(ks7cQrs8N'!+92*9"98B$!$D79
-!!E9$!!", at n,NLhrVup_s6p!hs82is5QC3Q!WVop!'gMA!!*&o!!%NKhuEcWp](;Ds1eU7J+s!Ds8RTL
-!'g5Y!WW1M!!",=!!E9$!!!!0rr<T0qu?]s#QN`^s7cQo!!3-"s8V!W!!!"Ks8W,7z+92B?z!!E9$n,NFg!!!!0p](9o!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1483 -5686]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-73 97 true[1 0 0 1 -2960 -5116]@85 imagemask
-!&+BQ&,lP/!!!!]
-!!%NKhuE`W!'UAbs8Vus!!!!`!!iQ(rr<$!!'e7 at s8W,7!!!!`i'6]qs53kW!'g7.^^'o7!!!!`rVqBM
-s82is!'gM`!!3-!!!!!`s8Duus8N'!!'gM_!!*'!J,fR6s8DuuJ,d:a!'gM]!!%NK^]4@!s82is5QBXA
-!'gM]!!#7`n,NGQs82is5QC3Q!'gM]!!#7`p](:Ys82is+92*9!'gM]!!", at qu?^]s82is+926=!'gM]!!", at qu?^]
-s82is+92<?!'gM]!!", at rVup_s82is&-)V/!'gM]!!!Q0rr<$`s82is&-)Y0!'gM]!!!Q0rr<$`s82is
-&-)Y0!'gM]!!!Q0rr<$`s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[
-!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6s82is&-)Z[!'gM]!!!Q0s*t)6
-s82is&-)Z[!'gM]!!!Q0s*t)6s82is+92?@!'gM]!!", at rr<$`s82is+92?@!'gM]!!", at rr<$`s82is
-+92<?!'gM]!!", at rVup_s82is5QC]_!'gM]!!#7`rVup_s82is5QCW]!'gM]!!%NKqu?^]s82isJ,f9D
-!'gM_!!%NKp](:Ys8Duus8VQg!'gM`!!3-"n,NGQs8RTMs8V!W!'gM`^]XW:^]4@!s8V!fs8Tk7!'gM`pj`>DJ,fR6
-s8Duts8N'!!'gM]s8W,u!!!!`s87BHs82is!'gM]5QCcQ!!!!`s83E-s53kW!'gM]#QOgS!!!!`s82ot
-qu?]s!'gM]!"ZjF!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz
-!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]
-z!!!!`s82isz!'gM]z!!!!`s82isz!'gM]z!!!"Ks82isz!.Y%Hz
-!!!$!s82isz"98E!z!!#7`s82isz5QCc]z!!#7`s82isz5QCc]z!!!~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -3037 -5095]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-q[1 0 0 1 0 0]concat
-60 69 true[1 0 0 1 -1580 -4260]@85 imagemask
-!!!!0rVuou!!!$!
-s53kW!!!9(s82is!!", at s8N'!!!%NKs8RTL!!*'!s8V!W!!3-"s8VQg!!iQ(s8Vio!"],0s8W&u!$D7@
-rW3$!!$D7 at n,P\'!'gM`^]5I,!.Y%KJ,fhi!<<*!!!!,Z!<<)u!!!&h!WW2t!!!#W!WW2p!!!!a"98Dr
-z"98Djz#QOh^z#QOh^z#QOh>z&-)[Fz&-)[Fz&-)Z[z&-)Z[z&-)Z[
-z+92?@z+92?@z+92?@z+92?@z+92?@z+92?@z+92<?z+92<?
-z+92<?z+92<?z+92<?z+92<?z+92<?z&-)V/z&-)V/z&-)V/
-z&-)V/z#QOc'!!D]j#QOc'!"]&/#QOc'!$D4@"98?#!'gL6"98B$!'gL6"98B$!.Y$a!WW0"!.Y$a!WW0"!.Y$a!<<'!!.Y$a!.Y$!
-!.Y$a!.Y$!!.Y$a!'gL6!.Y$a!$D6V!.Y$a!"]+F!.Y$!!"]+f!.Y$!!!iP^!.Y"K!!3,h!.Y"K!!*&o
-!<<#u!!%NJ!WW&t!!", at L]@,L!!!Q0s8V!W!!!-$s8Tk7!!!$!s8N'!!!!!0s7cQozIfKHK~>
-Q
-q[1 0 0 1 0 0]concat
-40 120 true[1 0 0 1 -1643 -4239]@85 imagemask
-$ig8-!"Ju/!!!O[
-!!!!0huE`W"7Q9j!!2ut!!!#uz56(Z`!$?^k!!!Pf!!!!(n,NFg"8Dir!!2ut!!!#szrVuou
-!.OtK!!%M!!!!!`^]4?75MuMA!$C,!!!",1!!!!0p](9o&,6,)!"\u-!!!9'!!!!(rVuou#QFc(!!iN(
-!!!9(J,fQOs*t(L"96.:!!E8:!!!-$huE`Zs53kW"979Z!!3,h!!!'"n,NFhs6p!g!WVop!!3,p!!!'"p](9ps82is
-!WW&t!!3,t!!!$!qu?]ss8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&u!!!$!rr<$!s8N'!!<<'!
-!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!!!!$!rr<$!s8N'!!<<'!!!*'!
-!!!$!rr<$!s8Duu!<<#u!!*&u!!!$!rVuous8Duu!<<#u!!*&s!!!$!qu?]ts82is!WW&t!!3,p!!!'"p](9ps7cQo
-!WVWh!!3,h!!!'"n,NFhs53kW"979Z!!E8:!!!-$^]4?:s1eU7"93lO!!iOS!!!9(!!!!(rr<$!#Q=]'
-!"\u-!!!Q-!!!!0p](9o+7K71!$C\1!!",!!!!!`^]4?75JR7!!.TM!!!*$!!!!#u!!!!"qu?]s"8Dir
-!!D]j!!!8^!!!!0^]4?75C`_6!.FnJ!!)os!!!,r!!!!(huE`W&&8/F!"T&0!!!E-!!!!)z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frameset.eps b/ast-5.3-1/sun211_figures/frameset.eps
deleted file mode 100644
index 6d44d25..0000000
--- a/ast-5.3-1/sun211_figures/frameset.eps
+++ /dev/null
@@ -1,2990 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 108 516 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 17:14:16
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5153.75 4907.75 m
-5153.75 5184.95 4928.15 5410.55 4650.95 5410.55 c
-1635.35 5410.55 l
-1358.15 5410.55 1132.55 5184.95 1132.55 4907.75 c
-1132.55 1592.15 l
-1132.55 1314.95 1358.15 1089.35 1635.35 1089.35 c
-4650.95 1089.35 l
-4928.15 1089.35 5153.75 1314.95 5153.75 1592.15 c
-f*
-1 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-5088.95 4964.15 m
-5088.95 5240.15 4864.55 5464.55 4588.55 5464.55 c
-1578.95 5464.55 l
-1302.95 5464.55 1078.55 5240.15 1078.55 4964.15 c
-1078.55 1654.55 l
-1078.55 1378.55 1302.95 1154.15 1578.95 1154.15 c
-4588.55 1154.15 l
-4864.55 1154.15 5088.95 1378.55 5088.95 1654.55 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-16 w
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-2447.75 1960.55 m
-2447.75 2070.95 2356.55 2162.15 2244.95 2162.15 c
-1749.35 2162.15 l
-1637.75 2162.15 1546.55 2070.95 1546.55 1960.55 c
-1546.55 1822.55 l
-1546.55 1712.15 1637.75 1620.95 1749.35 1620.95 c
-2244.95 1620.95 l
-2356.55 1620.95 2447.75 1712.15 2447.75 1822.55 c
-f*
-1 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-f*
-0 g
-2378.15 2016.95 m
-2378.15 2123.75 2289.35 2211.35 2180.15 2211.35 c
-1695.35 2211.35 l
-1586.15 2211.35 1497.35 2123.75 1497.35 2016.95 c
-1497.35 1884.95 l
-1497.35 1778.15 1586.15 1690.55 1695.35 1690.55 c
-2180.15 1690.55 l
-2289.35 1690.55 2378.15 1778.15 2378.15 1884.95 c
-h
-S
-0.201248 i
-1725.33 2057 m
-1611.22 2057 l
-1611.22 2052 l
-1625.11 2051.2 1629 2048.18 1629 2037.72 c
-1629 1940.32 l
-1629 1929.85 1626.17 1927.64 1611.22 1926.03 c
-1611.22 1921 l
-1683.67 1921 l
-1683.67 1926 l
-1665.15 1926.81 1662 1929.23 1662 1940.32 c
-1662 1987.21 l
-1682.22 1986.81 1689.55 1979.36 1692.32 1956.02 c
-1697.35 1956.02 l
-1697.35 2024.04 l
-1692.32 2024.04 l
-1688.76 2001.1 1681.82 1994.05 1662 1994.05 c
-1662 2040.74 l
-1662 2048.19 1664.52 2050 1674.41 2050 c
-1693.13 2050 1704.8 2046.64 1711.04 2039.74 c
-1715.47 2034.71 1717.68 2029.27 1720.5 2016.59 c
-1725.33 2016.59 l
-h
-1730.96 1921 m
-f*
-1774.19 2014 m
-1735.84 2014 l
-1735.84 2008.95 l
-1744.49 2007.74 1747 2005.12 1747 1997.07 c
-1747 1937.9 l
-1747 1929.65 1744.93 1927.44 1735.84 1925.83 c
-1735.84 1921 l
-1789.37 1921 l
-1789.37 1925.83 l
-1777.09 1926.63 1775 1929.25 1775 1941.73 c
-1775 1979.76 l
-1775 1990.23 1780.49 1998.88 1786.95 1998.88 c
-1788.56 1998.88 1790.37 1997.47 1792.59 1994.25 c
-1796.41 1988.82 1799.43 1987.01 1804.66 1987.01 c
-1812.11 1987.01 1817.34 1992.64 1817.34 2000.29 c
-1817.34 2009.55 1810.5 2016.41 1801.04 2016.41 c
-1791.1 2016.41 1783.54 2011.12 1774.19 1997.27 c
-h
-1819.35 1921 m
-f*
-1914.19 1933.88 m
-1912.18 1931.87 l
-1911.57 1931.26 1910.97 1931.06 1909.96 1931.06 c
-1907.15 1931.06 1906 1932.67 1906 1936.09 c
-1906 1988.62 l
-1906 2005.73 1890.6 2016.42 1865.89 2016.42 c
-1843.15 2016.42 1827.85 2006.06 1827.85 1990.83 c
-1827.85 1982.38 1832.69 1977.55 1840.94 1977.55 c
-1848.99 1977.55 1854.62 1982.38 1854.62 1989.22 c
-1854.62 1992.04 1853.61 1994.66 1851 1997.88 c
-1849.19 1999.89 1848.58 2001.1 1848.58 2002.3 c
-1848.58 2006.53 1854.02 2009.42 1861.26 2009.42 c
-1873.14 2009.42 1878.86 2004.08 1878.86 1992.04 c
-1878.86 1977.35 l
-1854.91 1970.1 1845.29 1966.48 1837.51 1961.45 c
-1828.46 1955.41 1824 1948.37 1824 1939.52 c
-1824 1927.24 1833.27 1918.18 1846.17 1918.18 c
-1857.84 1918.18 1867.1 1922.21 1878.17 1932.27 c
-1880.38 1922.01 1884.81 1918.18 1894.67 1918.18 c
-1903.32 1918.18 1909.56 1921.4 1917.21 1929.65 c
-h
-1878 1941.13 m
-1872.55 1934.89 1868.52 1932.47 1863.68 1932.47 c
-1857.64 1932.47 1853 1937.91 1853 1945.96 c
-1853 1957.63 1861.61 1965.88 1878 1970.31 c
-h
-1919.62 1921 m
-f*
-1961.4 2014 m
-1922.7 2014 l
-1922.7 2008.95 l
-1931.55 2007.74 1934 2005.32 1934 1997.07 c
-1934 1937.9 l
-1934 1929.65 1931.74 1927.44 1922.7 1925.83 c
-1922.7 1921 l
-1971 1921 l
-1971 1925.83 l
-1963.95 1926.84 1962 1929.65 1962 1937.3 c
-1962 1991.03 l
-1962 1992.04 1964.87 1995.66 1967.18 1997.88 c
-1971.4 2001.1 1975.02 2003.42 1978.65 2003.42 c
-1986.5 2003.42 1990 1998.59 1990 1986 c
-1990 1937.3 l
-1990 1929.05 1987.68 1926.43 1979.85 1925.83 c
-1979.85 1921 l
-2026.95 1921 l
-2026.95 1925.83 l
-2019.9 1926.64 2018 1929.65 2018 1937.3 c
-2018 1991.03 l
-2018 1992.04 2020.73 1995.46 2022.92 1997.68 c
-2027.35 2001.1 2030.97 2003.42 2034.59 2003.42 c
-2042.24 2003.42 2045 1998.38 2045 1986 c
-2045 1937.3 l
-2045 1928.85 2042.85 1926.43 2035.4 1925.83 c
-2035.4 1921 l
-2083.3 1921 l
-2083.3 1926 l
-2075.45 1926.4 2073 1928.78 2073 1937.3 c
-2073 1987.81 l
-2073 2005.12 2062.43 2016.42 2046.07 2016.42 c
-2034.59 2016.42 2026.95 2011.73 2016.48 1998.68 c
-2010.44 2011.36 2003.4 2016.42 1990.72 2016.42 c
-1977.95 2016.42 1968.98 2010.91 1961.4 1998.68 c
-h
-2086.64 1921 m
-f*
-2165.9 1946.16 m
-2157.65 1936.29 2151.61 1932.18 2142.96 1932.18 c
-2135.31 1932.18 2129.27 1935.77 2125.25 1942.94 c
-2121.43 1949.54 2119.82 1956.56 2119.01 1971 c
-2169.73 1971 l
-2168.52 1987.36 2165.5 1996.43 2159.26 2004.12 c
-2152.82 2011.96 2143.36 2016.42 2132.09 2016.42 c
-2106.94 2016.42 2090.03 1996.4 2090.03 1966.88 c
-2090.03 1937.5 2106.53 1918.18 2131.49 1918.18 c
-2147.79 1918.18 2157.65 1924.42 2170.73 1943.34 c
-h
-2118 1978 m
-2118.61 2001.96 2122.23 2009.42 2132.09 2009.42 c
-2137.93 2009.42 2141.55 2006.38 2143.16 2000.49 c
-2144.17 1996.67 2144.57 1991.03 2144.97 1980.77 c
-2144.97 1978 l
-h
-2174.35 1921 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2209 -1921]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3962.15 2110.55 m
-3962.15 2220.95 3870.95 2312.15 3759.35 2312.15 c
-3263.75 2312.15 l
-3152.15 2312.15 3060.95 2220.95 3060.95 2110.55 c
-3060.95 1972.55 l
-3060.95 1862.15 3152.15 1770.95 3263.75 1770.95 c
-3759.35 1770.95 l
-3870.95 1770.95 3962.15 1862.15 3962.15 1972.55 c
-f*
-1 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-f*
-0 g
-3897.35 2168.15 m
-3897.35 2277.35 3808.55 2366.15 3698.15 2366.15 c
-3207.35 2366.15 l
-3095.75 2366.15 3006.95 2277.35 3006.95 2168.15 c
-3006.95 2033.75 l
-3006.95 1924.55 3095.75 1835.75 3207.35 1835.75 c
-3696.95 1835.75 l
-3808.55 1835.75 3897.35 1924.55 3897.35 2033.75 c
-h
-S
-0.201248 i
-3239.33 2207 m
-3125.22 2207 l
-3125.22 2202 l
-3139.11 2201.2 3143 2198.18 3143 2187.72 c
-3143 2090.32 l
-3143 2079.85 3140.17 2077.64 3125.22 2076.03 c
-3125.22 2071 l
-3197.67 2071 l
-3197.67 2076 l
-3179.15 2076.81 3176 2079.23 3176 2090.32 c
-3176 2137.21 l
-3196.22 2136.81 3203.55 2129.36 3206.32 2106.02 c
-3211.35 2106.02 l
-3211.35 2174.04 l
-3206.32 2174.04 l
-3202.76 2151.1 3195.82 2144.05 3176 2144.05 c
-3176 2190.74 l
-3176 2198.19 3178.52 2200 3188.41 2200 c
-3207.13 2200 3218.8 2196.64 3225.04 2189.74 c
-3229.47 2184.71 3231.68 2179.27 3234.5 2166.59 c
-3239.33 2166.59 l
-h
-3244.96 2071 m
-f*
-3289.19 2164 m
-3250.84 2164 l
-3250.84 2158.95 l
-3259.49 2157.74 3262 2155.12 3262 2147.07 c
-3262 2087.9 l
-3262 2079.65 3259.93 2077.44 3250.84 2075.83 c
-3250.84 2071 l
-3304.37 2071 l
-3304.37 2075.83 l
-3292.09 2076.63 3290 2079.25 3290 2091.73 c
-3290 2129.76 l
-3290 2140.23 3295.49 2148.88 3301.95 2148.88 c
-3303.56 2148.88 3305.37 2147.47 3307.59 2144.25 c
-3311.41 2138.82 3314.43 2137.01 3319.66 2137.01 c
-3327.11 2137.01 3332.34 2142.64 3332.34 2150.29 c
-3332.34 2159.55 3325.5 2166.41 3316.04 2166.41 c
-3306.1 2166.41 3298.54 2161.12 3289.19 2147.27 c
-h
-3334.35 2071 m
-f*
-3428.19 2083.88 m
-3426.18 2081.87 l
-3425.57 2081.26 3424.97 2081.06 3423.96 2081.06 c
-3421.15 2081.06 3420 2082.67 3420 2086.09 c
-3420 2138.62 l
-3420 2155.73 3404.6 2166.42 3379.89 2166.42 c
-3357.15 2166.42 3341.85 2156.06 3341.85 2140.83 c
-3341.85 2132.38 3346.69 2127.55 3354.94 2127.55 c
-3362.99 2127.55 3368.62 2132.38 3368.62 2139.22 c
-3368.62 2142.04 3367.61 2144.66 3365 2147.88 c
-3363.19 2149.89 3362.58 2151.1 3362.58 2152.3 c
-3362.58 2156.53 3368.02 2159.42 3375.26 2159.42 c
-3387.14 2159.42 3392.86 2154.08 3392.86 2142.04 c
-3392.86 2127.35 l
-3368.91 2120.1 3359.29 2116.48 3351.51 2111.45 c
-3342.46 2105.41 3338 2098.37 3338 2089.52 c
-3338 2077.24 3347.27 2068.18 3360.17 2068.18 c
-3371.84 2068.18 3381.1 2072.21 3392.17 2082.27 c
-3394.38 2072.01 3398.81 2068.18 3408.67 2068.18 c
-3417.32 2068.18 3423.56 2071.4 3431.21 2079.65 c
-h
-3392 2091.13 m
-3386.55 2084.89 3382.52 2082.47 3377.68 2082.47 c
-3371.64 2082.47 3367 2087.91 3367 2095.96 c
-3367 2107.63 3375.61 2115.88 3392 2120.31 c
-h
-3433.62 2071 m
-f*
-3476.4 2164 m
-3437.7 2164 l
-3437.7 2158.95 l
-3446.55 2157.74 3449 2155.32 3449 2147.07 c
-3449 2087.9 l
-3449 2079.65 3446.74 2077.44 3437.7 2075.83 c
-3437.7 2071 l
-3486 2071 l
-3486 2075.83 l
-3478.95 2076.84 3477 2079.65 3477 2087.3 c
-3477 2141.03 l
-3477 2142.04 3479.87 2145.66 3482.18 2147.88 c
-3486.4 2151.1 3490.02 2153.42 3493.65 2153.42 c
-3501.5 2153.42 3505 2148.59 3505 2136 c
-3505 2087.3 l
-3505 2079.05 3502.68 2076.43 3494.85 2075.83 c
-3494.85 2071 l
-3541.95 2071 l
-3541.95 2075.83 l
-3534.9 2076.64 3533 2079.65 3533 2087.3 c
-3533 2141.03 l
-3533 2142.04 3535.73 2145.46 3537.92 2147.68 c
-3542.35 2151.1 3545.97 2153.42 3549.59 2153.42 c
-3557.24 2153.42 3560 2148.38 3560 2136 c
-3560 2087.3 l
-3560 2078.85 3557.85 2076.43 3550.4 2075.83 c
-3550.4 2071 l
-3598.3 2071 l
-3598.3 2076 l
-3590.45 2076.4 3588 2078.78 3588 2087.3 c
-3588 2137.81 l
-3588 2155.12 3577.43 2166.42 3561.07 2166.42 c
-3549.59 2166.42 3541.95 2161.73 3531.48 2148.68 c
-3525.44 2161.36 3518.4 2166.42 3505.72 2166.42 c
-3492.95 2166.42 3483.98 2160.91 3476.4 2148.68 c
-h
-3601.64 2071 m
-f*
-3680.9 2096.16 m
-3672.65 2086.29 3666.61 2082.18 3657.96 2082.18 c
-3650.31 2082.18 3644.27 2085.77 3640.25 2092.94 c
-3636.43 2099.54 3634.82 2106.56 3634.01 2121 c
-3684.73 2121 l
-3683.52 2137.36 3680.5 2146.43 3674.26 2154.12 c
-3667.82 2161.96 3658.36 2166.42 3647.09 2166.42 c
-3621.94 2166.42 3605.03 2146.4 3605.03 2116.88 c
-3605.03 2087.5 3621.53 2068.18 3646.49 2068.18 c
-3662.79 2068.18 3672.65 2074.42 3685.73 2093.34 c
-h
-3633 2128 m
-3633.61 2151.96 3637.23 2159.42 3647.09 2159.42 c
-3652.93 2159.42 3656.55 2156.38 3658.16 2150.49 c
-3659.17 2146.67 3659.57 2141.03 3659.97 2130.77 c
-3659.97 2128 l
-h
-3689.35 2071 m
-f*
-q[1 0 0 1 0 0]concat
-66 96 true[1 0 0 1 -3723 -2070]@85 imagemask
-!!*'!z!!!9(
-s7cQo!!!!`s8W*!zs8W-!^]4?7!WW3"s7cQo!!E9$s8W&u!!!9(s8W-!!!!!0s8W-!s1eU7&-)\0
-s8V!W!$D7 at s56-2!!", at s8N'(p](:9s8Vus!W2ot+92B1!!)uu!$D7 at huEb,!!", at s*t(L5C`_Es8N'!
-!'e7!&-)P-!!"+V!!iQ!!!!!@huElZhuE`W+5d,"s*t(L!"\Q!!&srY!!!Q!z!!!!0p](9oz&,6,)z
-!"\i)z!!!Q-z!!!!0qu?]sz&,ZD-z!$D+=z!!",?z!!!!@rVuouz
-5Q1W_z!'gG_z!!%NJz!!!$!rVuou!!!!"s8Duuz"98?#z!!iQ'z!!!Q0
-rVuou!!!!@s8DuuzJ,fEHz!<<)sz!!E9$qu?]s!!", at s82is!!!$!s8Vio!!!!(s8W,ozJ,fQK
-p](9o5QCc`s6p!hs8W-!s8VQg!WW3"s8W,W!!*'!s8W-!huEcWs8W-!s1eU7s8W-!s8RTL!.Y%Ks8W+L
-!!%NKs8W-!!!!"Ks8W-!rVuouJ,fQKs82is!'gM`s8Vio!!#7`s8W,g!!!!`s8W-!^]4?7+92B at s*t(L
-!$D7 at s8Duu!!", at s8Vio!!!!@s8W,Wz&-)\0z!"],0n,NFg!!!Q0qu?]s!!!!0^]4?7z#J^<>z
-!!g:>z!!!8^z!!!!$huE`Wz"5j.Zz!!D-Zz!!!,jz!!!!"n,NFgz
-!Up'hz!!2Qhz!!!#ozzs8W-!s6p!g!<<*!s8VQg!!*'!s8W,o!!!"Ks8W-!p](9o
-J,fQKs7cQo!.Y%Ks8Vus!!#7`s8W,s!!!!`s8W-!qu?]s5QCc`s8Duu!'gM`s8W&u!!", at s8W,u!!!!@
-s8W-!rr<$!+92B at s8N'!!$D7 at s8W*!!!!Q0s8W-!J,fQ[s8W-!s*t(L&-)\0s8RTL!!iQ(s8W,7~>
-Q
-1 i
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2855.75 3413.75 m
-2625.35 3369.35 2448.95 3267.35 2384.15 3140.15 c
-S
-2360.15 3190.55 m
-2399.75 3158.15 l
-2450.15 3160.55 l
-2357.75 3030.95 l
-f*
-2178.95 2306.15 m
-2232.95 2368.55 2274.95 2441.75 2302.55 2520.95 c
-S
-2168.15 2369.75 m
-2189.75 2322.95 l
-2237.75 2303.75 l
-2097.35 2226.95 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-3186.95 4588.55 m
-3275.75 4414.55 3440.15 4289.75 3635.75 4250.15 c
-S
-3591.35 4210.55 m
-3616.55 4256.15 l
-3604.55 4306.55 l
-3748.55 4235.75 l
-f*
-3302.15 3256.55 m
-3302.15 3262.55 3302.15 3262.55 3302.15 3255.35 c
-3302.15 3064.55 3456.95 2896.55 3682.55 2846.15 c
-S
-3638.15 2810.15 m
-3664.55 2853.35 l
-3654.95 2902.55 l
-3797.75 2830.55 l
-f*
-4030.55 2122.55 m
-4202.15 2176.55 4323.35 2344.55 4332.95 2540.15 c
-S
-4058.15 2181.35 m
-4048.55 2130.95 l
-4076.15 2088.95 l
-3917.75 2105.75 l
-f*
-0.564706 g
-3638.15 4764.95 m
-3503.75 4800.95 l
-3599.75 4857.35 l
-3446.15 4865.75 l
-3488.15 4936.55 l
-3340.55 4916.15 l
-3323.75 4986.95 l
-3203.75 4942.55 l
-3128.15 5006.15 l
-3052.55 4942.55 l
-2932.55 4986.95 l
-2914.55 4916.15 l
-2765.75 4936.55 l
-2810.15 4865.75 l
-2656.55 4857.35 l
-2752.55 4800.95 l
-2616.95 4764.95 l
-2752.55 4730.15 l
-2656.55 4673.75 l
-2810.15 4664.15 l
-2765.75 4594.55 l
-2914.55 4614.95 l
-2932.55 4542.95 l
-3052.55 4588.55 l
-3128.15 4524.95 l
-3203.75 4588.55 l
-3323.75 4542.95 l
-3340.55 4614.95 l
-3488.15 4594.55 l
-3446.15 4664.15 l
-3599.75 4673.75 l
-3503.75 4730.15 l
-f*
-1 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-f*
-0 g
-3578.15 4824.95 m
-3443.75 4860.95 l
-3539.75 4917.35 l
-3386.15 4925.75 l
-3428.15 4996.55 l
-3280.55 4976.15 l
-3263.75 5046.95 l
-3143.75 5002.55 l
-3068.15 5066.15 l
-2992.55 5002.55 l
-2872.55 5046.95 l
-2854.55 4976.15 l
-2705.75 4996.55 l
-2750.15 4925.75 l
-2596.55 4917.35 l
-2692.55 4860.95 l
-2556.95 4824.95 l
-2692.55 4790.15 l
-2596.55 4733.75 l
-2750.15 4724.15 l
-2705.75 4654.55 l
-2854.55 4674.95 l
-2872.55 4602.95 l
-2992.55 4648.55 l
-3068.15 4584.95 l
-3143.75 4648.55 l
-3263.75 4602.95 l
-3280.55 4674.95 l
-3428.15 4654.55 l
-3386.15 4724.15 l
-3539.75 4733.75 l
-3443.75 4790.15 l
-3578.15 4824.95 l
-3539.75 4824.95 l
-3417.35 4793.75 l
-3506.15 4740.95 l
-3368.15 4733.75 l
-3408.95 4667.75 l
-3273.35 4685.75 l
-3256.55 4617.35 l
-3141.35 4659.35 l
-3068.15 4596.95 l
-2994.95 4659.35 l
-2879.75 4617.35 l
-2861.75 4685.75 l
-2726.15 4667.75 l
-2766.95 4733.75 l
-2630.15 4740.95 l
-2718.95 4793.75 l
-2596.55 4824.95 l
-2717.75 4857.35 l
-2630.15 4910.15 l
-2766.95 4917.35 l
-2726.15 4983.35 l
-2861.75 4964.15 l
-2879.75 5033.75 l
-2994.95 4990.55 l
-3068.15 5052.95 l
-3141.35 4990.55 l
-3256.55 5033.75 l
-3273.35 4964.15 l
-3408.95 4983.35 l
-3368.15 4917.35 l
-3506.15 4910.15 l
-3417.35 4857.35 l
-3539.75 4824.95 l
-3578.15 4824.95 l
-f*
-0.2 i
-2890.08 4876.76 m
-2870.08 4802.52 l
-2867.52 4793.88 2864.48 4791.64 2854.08 4791 c
-2854.08 4787 l
-2904 4787 l
-2904 4791 l
-2894.72 4791.48 2892.48 4792.76 2892.48 4797.88 c
-2892.48 4799.64 2892.8 4801.4 2893.76 4805.08 c
-2893.92 4805.88 l
-2894.08 4806.68 l
-2913.76 4878.52 l
-2916.16 4886.84 2918.56 4889.08 2926.72 4890.04 c
-2926.72 4894 l
-2892.8 4894 l
-2843.2 4817.24 l
-2834.56 4894 l
-2799.2 4894 l
-2799.2 4890 l
-2809.28 4889.52 2810.72 4888.89 2810.72 4884.44 c
-2810.72 4882.2 2810.08 4879.32 2808.96 4875.16 c
-2791.52 4815.48 l
-2785.12 4794.68 2784 4792.92 2775.36 4791 c
-2775.36 4787 l
-2808.48 4787 l
-2808.48 4791 l
-2798.24 4792.28 2795.68 4794.2 2795.68 4800.76 c
-2795.68 4803.48 2796.48 4807.48 2798.72 4815.48 c
-2814.88 4874.52 l
-2825.6 4785.08 l
-2830.08 4785.08 l
-h
-2922.24 4787 m
-f*
-2991.44 4807.32 m
-2984.88 4798.52 2982.48 4795.76 2979.92 4795.76 c
-2978.64 4795.76 2978 4796.86 2978 4798.52 c
-2978 4802.52 2979.44 4809.08 2983.44 4822.2 c
-2994.8 4859.96 l
-2977.04 4858.84 l
-2974.16 4849.4 l
-2972.72 4857.56 2969.2 4861.08 2962.32 4861.08 c
-2942.64 4861.08 2919 4830.27 2919 4805.24 c
-2919 4793.08 2925.74 4784.92 2935.92 4784.92 c
-2945.68 4784.92 2953.04 4790.68 2962.16 4806.04 c
-2960.24 4799.48 2960 4797.56 2960 4795.32 c
-2960 4789.4 2964.76 4784.76 2970.64 4784.76 c
-2978.16 4784.76 2985.52 4791 2994.8 4804.92 c
-h
-2964.56 4854.2 m
-2968.08 4853.88 2970.56 4851 2970.56 4846.68 c
-2970.56 4837.08 2965.24 4819.32 2958.96 4808.28 c
-2954.64 4800.44 2949.84 4795.92 2945.52 4795.92 c
-2941.36 4795.92 2938 4799.75 2938 4804.92 c
-2938 4813.24 2943.42 4829.24 2950.16 4841.08 c
-2954.96 4849.56 2960.24 4854.52 2964.56 4854.2 c
-h
-3002 4787 m
-f*
-3036.56 4860.92 m
-3020.24 4858.36 3014 4857.4 3005.68 4856.44 c
-3005.68 4852 l
-3012.88 4851.69 3014.32 4851.07 3014.32 4848.12 c
-3014.32 4846.52 3013.04 4840.76 3010.8 4832.44 c
-2994.8 4770.36 l
-2991.76 4759.8 2990.48 4758.84 2982.8 4759 c
-2982.8 4754 l
-3022.64 4754 l
-3022.64 4759 l
-3014.64 4759.14 3012.24 4760.16 3012.24 4763.64 c
-3012.24 4765.88 3013.36 4770.68 3016.4 4781.88 c
-3017.52 4785.72 3017.52 4786.04 3018.16 4788.44 c
-3023.76 4785.56 3025.68 4784.92 3029.04 4784.92 c
-3050.8 4784.92 3073.36 4813.88 3073.36 4841.56 c
-3073.36 4853.4 3066.64 4861.08 3056.08 4861.08 c
-3046.96 4861.08 3039.92 4855.92 3030.48 4842.52 c
-h
-3047.12 4849.56 m
-3051.28 4849.24 3053.68 4845.56 3053.36 4840.44 c
-3052.72 4829.88 3047.6 4814.04 3041.84 4803.64 c
-3036.88 4795 3031.76 4789.92 3026.32 4789.92 c
-3022.8 4789.92 3020.08 4792.75 3020.08 4796.28 c
-3020.08 4799 3021.84 4805.56 3026.16 4820.12 c
-3029.68 4831.8 3031.12 4835.8 3033.52 4839.48 c
-3037.52 4845.72 3042.96 4849.88 3047.12 4849.56 c
-h
-3082 4787 m
-f*
-3117.56 4860.92 m
-3101.24 4858.36 3095 4857.4 3086.68 4856.44 c
-3086.68 4852 l
-3093.88 4851.69 3095.32 4851.07 3095.32 4848.12 c
-3095.32 4846.52 3094.04 4840.76 3091.8 4832.44 c
-3075.8 4770.36 l
-3072.76 4759.8 3071.48 4758.84 3063.8 4759 c
-3063.8 4754 l
-3103.64 4754 l
-3103.64 4759 l
-3095.64 4759.14 3093.24 4760.16 3093.24 4763.64 c
-3093.24 4765.88 3094.36 4770.68 3097.4 4781.88 c
-3098.52 4785.72 3098.52 4786.04 3099.16 4788.44 c
-3104.76 4785.56 3106.68 4784.92 3110.04 4784.92 c
-3131.8 4784.92 3154.36 4813.88 3154.36 4841.56 c
-3154.36 4853.4 3147.64 4861.08 3137.08 4861.08 c
-3127.96 4861.08 3120.92 4855.92 3111.48 4842.52 c
-h
-3128.12 4849.56 m
-3132.28 4849.24 3134.68 4845.56 3134.36 4840.44 c
-3133.72 4829.88 3128.6 4814.04 3122.84 4803.64 c
-3117.88 4795 3112.76 4789.92 3107.32 4789.92 c
-3103.8 4789.92 3101.08 4792.75 3101.08 4796.28 c
-3101.08 4799 3102.84 4805.56 3107.16 4820.12 c
-3110.68 4831.8 3112.12 4835.8 3114.52 4839.48 c
-3118.52 4845.72 3123.96 4849.88 3128.12 4849.56 c
-h
-3163 4787 m
-f*
-3196.56 4809.56 m
-3194.32 4806.36 l
-3190.16 4800.12 3186.48 4796.56 3184.08 4796.56 c
-3182.8 4796.56 3182 4797.77 3182 4799.16 c
-3182 4800.6 3182.62 4804.76 3183.12 4807.48 c
-3197.68 4860.92 l
-3189.22 4859 3178.26 4857.4 3166.04 4856.44 c
-3166.04 4852 l
-3167.44 4852 l
-3172.24 4852 3175.48 4850.44 3175.48 4847.48 c
-3175.48 4846.2 3174.71 4843.8 3173.68 4841.08 c
-3164.4 4806.68 l
-3163.12 4802.04 3163 4797.88 3163 4795.64 c
-3163 4789.56 3167.2 4785.56 3173.36 4785.56 c
-3182.96 4785.56 3188.88 4790.36 3200.08 4807.32 c
-h
-3192.88 4896.4 m
-3187.44 4896.4 3183 4891.46 3183 4886.04 c
-3183 4879.8 3187.26 4875.4 3193.04 4875.4 c
-3199.12 4875.4 3204 4879.86 3204 4885.56 c
-3204 4891.48 3199 4896.4 3192.88 4896.4 c
-h
-3206.48 4787 m
-f*
-3281.36 4808.6 m
-3274.96 4798.68 3272.88 4796.56 3270.16 4796.56 c
-3268.88 4796.56 3268 4797.63 3268 4799.16 c
-3268 4800.76 3268.94 4804.12 3271.92 4813.08 c
-3277.68 4830.52 l
-3280.24 4838.04 3282 4845.08 3282 4848.92 c
-3282 4856.76 3277.78 4861.08 3270.16 4861.08 c
-3264.24 4861.08 3258.48 4858.62 3254.16 4854.36 c
-3248.24 4848.76 3245.2 4844.92 3234.48 4829.08 c
-3244.72 4860.76 l
-3234.48 4858.52 3221.68 4856.92 3212.72 4856.6 c
-3212.72 4851.8 l
-3219.44 4851.65 3221.36 4850.92 3221.36 4848.12 c
-3221.36 4846.2 3219.12 4837.72 3214 4819.64 c
-3210.32 4806.68 3209.2 4802.52 3205.04 4787 c
-3224.4 4787 l
-3231.92 4814.68 3237.68 4828.6 3247.6 4841.56 c
-3250.8 4845.88 3255.76 4849.08 3258.64 4849.08 c
-3260.72 4849.08 3263 4847.63 3263 4846.04 c
-3263 4845.56 3262.54 4844.28 3261.84 4842.68 c
-3253.04 4816.12 l
-3250.48 4808.44 3249 4799.32 3249 4795.16 c
-3249 4789.08 3252.84 4785.56 3259.44 4785.56 c
-3269.04 4785.56 3275.6 4791 3284.88 4806.52 c
-h
-3294.96 4787 m
-f*
-3372.48 4856 m
-3354.72 4856 l
-3349.28 4859.58 3344.48 4861.08 3337.12 4861.08 c
-3317.44 4861.08 3301 4848.05 3301 4831.8 c
-3301 4823.64 3305.35 4817.88 3314.4 4814.2 c
-3301.28 4806.84 3299 4804.6 3299 4798.68 c
-3299 4793.56 3301.89 4790.52 3308.96 4788.12 c
-3299.04 4785.72 3295.84 4784.44 3292 4781.4 c
-3289.44 4779.16 3288 4775.32 3288 4771.48 c
-3288 4761.08 3299.56 4755 3317.76 4755 c
-3340.32 4755 3356 4764.72 3356 4778.52 c
-3356 4788.28 3349.6 4793.56 3332.16 4798.52 c
-3323.68 4800.92 l
-3318.56 4802.36 3315 4804.6 3315 4807 c
-3315 4809.56 3317.68 4812.28 3320 4812.28 c
-3320.8 4812.28 3321.92 4812.24 3323.2 4812.12 c
-3324.96 4811.64 3326.24 4811 3328.16 4811 c
-3335.2 4811 3342.4 4813.09 3348.48 4816.92 c
-3357.76 4822.2 3363 4830.36 3363 4839.96 c
-3363 4842.64 3362.59 4844.32 3361.76 4847 c
-3372.48 4847 l
-h
-3314.4 4786.04 m
-3316.32 4785.88 3328.48 4781.72 3332 4780.12 c
-3336.48 4777.88 3339 4775.16 3339 4771 c
-3339 4763.96 3331.8 4760 3319.36 4760 c
-3308.96 4760 3302 4765.1 3302 4772.44 c
-3302 4775.48 3303.32 4778.2 3306.24 4781.24 c
-3308.32 4783.32 3313.12 4786.2 3314.4 4786.04 c
-h
-3336.8 4856.08 m
-3340.96 4856.08 3344 4852.19 3344 4846.52 c
-3344 4841.08 3342.08 4833.4 3339.36 4827.48 c
-3336 4820.12 3331.84 4816 3326.88 4816 c
-3322.56 4816 3320 4819.52 3320 4825.88 c
-3320 4832.28 3322.79 4842.04 3326.24 4848.12 c
-3329.28 4853.4 3332.64 4856.08 3336.8 4856.08 c
-h
-3376 4787 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-0.564706 g
-2894.15 2729.75 m
-2758.55 2765.75 l
-2854.55 2822.15 l
-2700.95 2830.55 l
-2744.15 2901.35 l
-2596.55 2880.95 l
-2578.55 2951.75 l
-2458.55 2907.35 l
-2384.15 2970.95 l
-2307.35 2907.35 l
-2187.35 2951.75 l
-2169.35 2880.95 l
-2020.55 2901.35 l
-2064.95 2830.55 l
-1911.35 2822.15 l
-2007.35 2765.75 l
-1871.75 2729.75 l
-2007.35 2694.95 l
-1911.35 2638.55 l
-2064.95 2630.15 l
-2020.55 2559.35 l
-2169.35 2579.75 l
-2187.35 2508.95 l
-2307.35 2553.35 l
-2384.15 2489.75 l
-2458.55 2553.35 l
-2578.55 2508.95 l
-2596.55 2579.75 l
-2744.15 2559.35 l
-2700.95 2630.15 l
-2854.55 2638.55 l
-2758.55 2694.95 l
-f*
-1 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-f*
-0 g
-2834.15 2789.75 m
-2698.55 2825.75 l
-2794.55 2882.15 l
-2640.95 2890.55 l
-2684.15 2961.35 l
-2536.55 2940.95 l
-2518.55 3011.75 l
-2398.55 2967.35 l
-2324.15 3030.95 l
-2247.35 2967.35 l
-2127.35 3011.75 l
-2109.35 2940.95 l
-1960.55 2961.35 l
-2004.95 2890.55 l
-1851.35 2882.15 l
-1947.35 2825.75 l
-1811.75 2789.75 l
-1947.35 2754.95 l
-1851.35 2698.55 l
-2004.95 2690.15 l
-1960.55 2619.35 l
-2109.35 2639.75 l
-2127.35 2568.95 l
-2247.35 2613.35 l
-2324.15 2549.75 l
-2398.55 2613.35 l
-2518.55 2568.95 l
-2536.55 2639.75 l
-2684.15 2619.35 l
-2640.95 2690.15 l
-2794.55 2698.55 l
-2698.55 2754.95 l
-2834.15 2789.75 l
-2794.55 2789.75 l
-2672.15 2758.55 l
-2760.95 2705.75 l
-2624.15 2698.55 l
-2663.75 2632.55 l
-2528.15 2650.55 l
-2511.35 2582.15 l
-2396.15 2624.15 l
-2324.15 2561.75 l
-2249.75 2624.15 l
-2134.55 2582.15 l
-2117.75 2650.55 l
-1980.95 2632.55 l
-2021.75 2698.55 l
-1884.95 2705.75 l
-1973.75 2758.55 l
-1851.35 2789.75 l
-1972.55 2822.15 l
-1884.95 2874.95 l
-2021.75 2882.15 l
-1980.95 2948.15 l
-2117.75 2930.15 l
-2134.55 2998.55 l
-2249.75 2956.55 l
-2324.15 3018.95 l
-2396.15 2956.55 l
-2511.35 2998.55 l
-2528.15 2930.15 l
-2663.75 2948.15 l
-2624.15 2882.15 l
-2760.95 2874.95 l
-2672.15 2822.15 l
-2794.55 2789.75 l
-2834.15 2789.75 l
-f*
-0.2 i
-2145.08 2840.76 m
-2125.08 2766.52 l
-2122.52 2757.88 2119.48 2755.64 2109.08 2755 c
-2109.08 2751 l
-2159 2751 l
-2159 2755 l
-2149.72 2755.48 2147.48 2756.76 2147.48 2761.88 c
-2147.48 2763.64 2147.8 2765.4 2148.76 2769.08 c
-2148.92 2769.88 l
-2149.08 2770.68 l
-2168.76 2842.52 l
-2171.16 2850.84 2173.56 2853.08 2181.72 2854.04 c
-2181.72 2858 l
-2147.8 2858 l
-2098.2 2781.24 l
-2089.56 2858 l
-2054.2 2858 l
-2054.2 2854 l
-2064.28 2853.52 2065.72 2852.89 2065.72 2848.44 c
-2065.72 2846.2 2065.08 2843.32 2063.96 2839.16 c
-2046.52 2779.48 l
-2040.12 2758.68 2039 2756.92 2030.36 2755 c
-2030.36 2751 l
-2063.48 2751 l
-2063.48 2755 l
-2053.24 2756.28 2050.68 2758.2 2050.68 2764.76 c
-2050.68 2767.48 2051.48 2771.48 2053.72 2779.48 c
-2069.88 2838.52 l
-2080.6 2749.08 l
-2085.08 2749.08 l
-h
-2177.24 2751 m
-f*
-2247.44 2771.32 m
-2240.88 2762.52 2238.48 2759.76 2235.92 2759.76 c
-2234.64 2759.76 2234 2760.86 2234 2762.52 c
-2234 2766.52 2235.44 2773.08 2239.44 2786.2 c
-2250.8 2823.96 l
-2233.04 2822.84 l
-2230.16 2813.4 l
-2228.72 2821.56 2225.2 2825.08 2218.32 2825.08 c
-2198.64 2825.08 2175 2794.27 2175 2769.24 c
-2175 2757.08 2181.74 2748.92 2191.92 2748.92 c
-2201.68 2748.92 2209.04 2754.68 2218.16 2770.04 c
-2216.24 2763.48 2216 2761.56 2216 2759.32 c
-2216 2753.4 2220.76 2748.76 2226.64 2748.76 c
-2234.16 2748.76 2241.52 2755 2250.8 2768.92 c
-h
-2220.56 2818.2 m
-2224.08 2817.88 2226.56 2815 2226.56 2810.68 c
-2226.56 2801.08 2221.24 2783.32 2214.96 2772.28 c
-2210.64 2764.44 2205.84 2759.92 2201.52 2759.92 c
-2197.36 2759.92 2194 2763.75 2194 2768.92 c
-2194 2777.24 2199.42 2793.24 2206.16 2805.08 c
-2210.96 2813.56 2216.24 2818.52 2220.56 2818.2 c
-h
-2258 2751 m
-f*
-2291.56 2824.92 m
-2275.24 2822.36 2269 2821.4 2260.68 2820.44 c
-2260.68 2816 l
-2267.88 2815.69 2269.32 2815.07 2269.32 2812.12 c
-2269.32 2810.52 2268.04 2804.76 2265.8 2796.44 c
-2249.8 2734.36 l
-2246.76 2723.8 2245.48 2722.84 2237.8 2723 c
-2237.8 2718 l
-2277.64 2718 l
-2277.64 2723 l
-2269.64 2723.14 2267.24 2724.16 2267.24 2727.64 c
-2267.24 2729.88 2268.36 2734.68 2271.4 2745.88 c
-2272.52 2749.72 2272.52 2750.04 2273.16 2752.44 c
-2278.76 2749.56 2280.68 2748.92 2284.04 2748.92 c
-2305.8 2748.92 2328.36 2777.88 2328.36 2805.56 c
-2328.36 2817.4 2321.64 2825.08 2311.08 2825.08 c
-2301.96 2825.08 2294.92 2819.92 2285.48 2806.52 c
-h
-2302.12 2813.56 m
-2306.28 2813.24 2308.68 2809.56 2308.36 2804.44 c
-2307.72 2793.88 2302.6 2778.04 2296.84 2767.64 c
-2291.88 2759 2286.76 2753.92 2281.32 2753.92 c
-2277.8 2753.92 2275.08 2756.75 2275.08 2760.28 c
-2275.08 2763 2276.84 2769.56 2281.16 2784.12 c
-2284.68 2795.8 2286.12 2799.8 2288.52 2803.48 c
-2292.52 2809.72 2297.96 2813.88 2302.12 2813.56 c
-h
-2337 2751 m
-f*
-2371.56 2824.92 m
-2355.24 2822.36 2349 2821.4 2340.68 2820.44 c
-2340.68 2816 l
-2347.88 2815.69 2349.32 2815.07 2349.32 2812.12 c
-2349.32 2810.52 2348.04 2804.76 2345.8 2796.44 c
-2329.8 2734.36 l
-2326.76 2723.8 2325.48 2722.84 2317.8 2723 c
-2317.8 2718 l
-2357.64 2718 l
-2357.64 2723 l
-2349.64 2723.14 2347.24 2724.16 2347.24 2727.64 c
-2347.24 2729.88 2348.36 2734.68 2351.4 2745.88 c
-2352.52 2749.72 2352.52 2750.04 2353.16 2752.44 c
-2358.76 2749.56 2360.68 2748.92 2364.04 2748.92 c
-2385.8 2748.92 2408.36 2777.88 2408.36 2805.56 c
-2408.36 2817.4 2401.64 2825.08 2391.08 2825.08 c
-2381.96 2825.08 2374.92 2819.92 2365.48 2806.52 c
-h
-2382.12 2813.56 m
-2386.28 2813.24 2388.68 2809.56 2388.36 2804.44 c
-2387.72 2793.88 2382.6 2778.04 2376.84 2767.64 c
-2371.88 2759 2366.76 2753.92 2361.32 2753.92 c
-2357.8 2753.92 2355.08 2756.75 2355.08 2760.28 c
-2355.08 2763 2356.84 2769.56 2361.16 2784.12 c
-2364.68 2795.8 2366.12 2799.8 2368.52 2803.48 c
-2372.52 2809.72 2377.96 2813.88 2382.12 2813.56 c
-h
-2417 2751 m
-f*
-2452.56 2773.56 m
-2450.32 2770.36 l
-2446.16 2764.12 2442.48 2760.56 2440.08 2760.56 c
-2438.8 2760.56 2438 2761.77 2438 2763.16 c
-2438 2764.6 2438.62 2768.76 2439.12 2771.48 c
-2453.68 2824.92 l
-2445.22 2823 2434.26 2821.4 2422.04 2820.44 c
-2422.04 2816 l
-2423.44 2816 l
-2428.24 2816 2431.48 2814.44 2431.48 2811.48 c
-2431.48 2810.2 2430.71 2807.8 2429.68 2805.08 c
-2420.4 2770.68 l
-2419.12 2766.04 2419 2761.88 2419 2759.64 c
-2419 2753.56 2423.2 2749.56 2429.36 2749.56 c
-2438.96 2749.56 2444.88 2754.36 2456.08 2771.32 c
-h
-2448.88 2860.4 m
-2443.44 2860.4 2439 2855.46 2439 2850.04 c
-2439 2843.8 2443.26 2839.4 2449.04 2839.4 c
-2455.12 2839.4 2460 2843.86 2460 2849.56 c
-2460 2855.48 2455 2860.4 2448.88 2860.4 c
-h
-2462.48 2751 m
-f*
-2536.36 2772.6 m
-2529.96 2762.68 2527.88 2760.56 2525.16 2760.56 c
-2523.88 2760.56 2523 2761.63 2523 2763.16 c
-2523 2764.76 2523.94 2768.12 2526.92 2777.08 c
-2532.68 2794.52 l
-2535.24 2802.04 2537 2809.08 2537 2812.92 c
-2537 2820.76 2532.78 2825.08 2525.16 2825.08 c
-2519.24 2825.08 2513.48 2822.62 2509.16 2818.36 c
-2503.24 2812.76 2500.2 2808.92 2489.48 2793.08 c
-2499.72 2824.76 l
-2489.48 2822.52 2476.68 2820.92 2467.72 2820.6 c
-2467.72 2815.8 l
-2474.44 2815.65 2476.36 2814.92 2476.36 2812.12 c
-2476.36 2810.2 2474.12 2801.72 2469 2783.64 c
-2465.32 2770.68 2464.2 2766.52 2460.04 2751 c
-2479.4 2751 l
-2486.92 2778.68 2492.68 2792.6 2502.6 2805.56 c
-2505.8 2809.88 2510.76 2813.08 2513.64 2813.08 c
-2515.72 2813.08 2518 2811.63 2518 2810.04 c
-2518 2809.56 2517.54 2808.28 2516.84 2806.68 c
-2508.04 2780.12 l
-2505.48 2772.44 2504 2763.32 2504 2759.16 c
-2504 2753.08 2507.84 2749.56 2514.44 2749.56 c
-2524.04 2749.56 2530.6 2755 2539.88 2770.52 c
-h
-2549.96 2751 m
-f*
-2627.48 2820 m
-2609.72 2820 l
-2604.28 2823.58 2599.48 2825.08 2592.12 2825.08 c
-2572.44 2825.08 2556 2812.05 2556 2795.8 c
-2556 2787.64 2560.35 2781.88 2569.4 2778.2 c
-2556.28 2770.84 2554 2768.6 2554 2762.68 c
-2554 2757.56 2556.89 2754.52 2563.96 2752.12 c
-2554.04 2749.72 2550.84 2748.44 2547 2745.4 c
-2544.44 2743.16 2543 2739.32 2543 2735.48 c
-2543 2725.08 2554.56 2719 2572.76 2719 c
-2595.32 2719 2611 2728.72 2611 2742.52 c
-2611 2752.28 2604.6 2757.56 2587.16 2762.52 c
-2578.68 2764.92 l
-2573.56 2766.36 2570 2768.6 2570 2771 c
-2570 2773.56 2572.68 2776.28 2575 2776.28 c
-2575.8 2776.28 2576.92 2776.24 2578.2 2776.12 c
-2579.96 2775.64 2581.24 2775 2583.16 2775 c
-2590.2 2775 2597.4 2777.09 2603.48 2780.92 c
-2612.76 2786.2 2618 2794.36 2618 2803.96 c
-2618 2806.64 2617.59 2808.32 2616.76 2811 c
-2627.48 2811 l
-h
-2569.4 2750.04 m
-2571.32 2749.88 2583.48 2745.72 2587 2744.12 c
-2591.48 2741.88 2594 2739.16 2594 2735 c
-2594 2727.96 2586.8 2724 2574.36 2724 c
-2563.96 2724 2557 2729.1 2557 2736.44 c
-2557 2739.48 2558.32 2742.2 2561.24 2745.24 c
-2563.32 2747.32 2568.12 2750.2 2569.4 2750.04 c
-h
-2591.8 2820.08 m
-2595.96 2820.08 2599 2816.19 2599 2810.52 c
-2599 2805.08 2597.08 2797.4 2594.36 2791.48 c
-2591 2784.12 2586.84 2780 2581.88 2780 c
-2577.56 2780 2575 2783.52 2575 2789.88 c
-2575 2796.28 2577.79 2806.04 2581.24 2812.12 c
-2584.28 2817.4 2587.64 2820.08 2591.8 2820.08 c
-h
-2631 2751 m
-f*
-1 i
-0.564706 g
-4908.95 2769.35 m
-4773.35 2806.55 l
-4869.35 2861.75 l
-4715.75 2871.35 l
-4758.95 2940.95 l
-4611.35 2920.55 l
-4593.35 2992.55 l
-4473.35 2946.95 l
-4398.95 3010.55 l
-4322.15 2946.95 l
-4202.15 2992.55 l
-4185.35 2920.55 l
-4036.55 2940.95 l
-4079.75 2871.35 l
-3926.15 2861.75 l
-4022.15 2806.55 l
-3887.75 2769.35 l
-4022.15 2734.55 l
-3926.15 2678.15 l
-4079.75 2669.75 l
-4036.55 2600.15 l
-4185.35 2619.35 l
-4202.15 2548.55 l
-4322.15 2592.95 l
-4398.95 2529.35 l
-4473.35 2592.95 l
-4593.35 2548.55 l
-4611.35 2619.35 l
-4758.95 2600.15 l
-4715.75 2669.75 l
-4869.35 2678.15 l
-4773.35 2734.55 l
-f*
-1 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-f*
-0 g
-4848.95 2829.35 m
-4713.35 2866.55 l
-4809.35 2921.75 l
-4655.75 2931.35 l
-4698.95 3000.95 l
-4551.35 2980.55 l
-4533.35 3052.55 l
-4413.35 3006.95 l
-4338.95 3070.55 l
-4262.15 3006.95 l
-4142.15 3052.55 l
-4125.35 2980.55 l
-3976.55 3000.95 l
-4019.75 2931.35 l
-3866.15 2921.75 l
-3962.15 2866.55 l
-3827.75 2829.35 l
-3962.15 2794.55 l
-3866.15 2738.15 l
-4019.75 2729.75 l
-3976.55 2660.15 l
-4125.35 2679.35 l
-4142.15 2608.55 l
-4262.15 2652.95 l
-4338.95 2589.35 l
-4413.35 2652.95 l
-4533.35 2608.55 l
-4551.35 2679.35 l
-4698.95 2660.15 l
-4655.75 2729.75 l
-4809.35 2738.15 l
-4713.35 2794.55 l
-4848.95 2829.35 l
-4809.35 2829.35 l
-4686.95 2798.15 l
-4775.75 2746.55 l
-4638.95 2738.15 l
-4678.55 2672.15 l
-4544.15 2691.35 l
-4526.15 2621.75 l
-4410.95 2664.95 l
-4338.95 2602.55 l
-4264.55 2664.95 l
-4149.35 2621.75 l
-4132.55 2691.35 l
-3995.75 2672.15 l
-4037.75 2738.15 l
-3899.75 2746.55 l
-3988.55 2798.15 l
-3866.15 2829.35 l
-3987.35 2861.75 l
-3899.75 2914.55 l
-4037.75 2921.75 l
-3995.75 2988.95 l
-4132.55 2969.75 l
-4149.35 3038.15 l
-4264.55 2996.15 l
-4338.95 3058.55 l
-4410.95 2996.15 l
-4526.15 3038.15 l
-4544.15 2969.75 l
-4678.55 2988.95 l
-4638.95 2921.75 l
-4775.75 2914.55 l
-4686.95 2861.75 l
-4809.35 2829.35 l
-4848.95 2829.35 l
-f*
-0.2 i
-4160.08 2880.76 m
-4140.08 2806.52 l
-4137.52 2797.88 4134.48 2795.64 4124.08 2795 c
-4124.08 2791 l
-4174 2791 l
-4174 2795 l
-4164.72 2795.48 4162.48 2796.76 4162.48 2801.88 c
-4162.48 2803.64 4162.8 2805.4 4163.76 2809.08 c
-4163.92 2809.88 l
-4164.08 2810.68 l
-4183.76 2882.52 l
-4186.16 2890.84 4188.56 2893.08 4196.72 2894.04 c
-4196.72 2898 l
-4162.8 2898 l
-4113.2 2821.24 l
-4104.56 2898 l
-4069.2 2898 l
-4069.2 2894 l
-4079.28 2893.52 4080.72 2892.89 4080.72 2888.44 c
-4080.72 2886.2 4080.08 2883.32 4078.96 2879.16 c
-4061.52 2819.48 l
-4055.12 2798.68 4054 2796.92 4045.36 2795 c
-4045.36 2791 l
-4078.48 2791 l
-4078.48 2795 l
-4068.24 2796.28 4065.68 2798.2 4065.68 2804.76 c
-4065.68 2807.48 4066.48 2811.48 4068.72 2819.48 c
-4084.88 2878.52 l
-4095.6 2789.08 l
-4100.08 2789.08 l
-h
-4192.24 2791 m
-f*
-4262.44 2811.32 m
-4255.88 2802.52 4253.48 2799.76 4250.92 2799.76 c
-4249.64 2799.76 4249 2800.86 4249 2802.52 c
-4249 2806.52 4250.44 2813.08 4254.44 2826.2 c
-4265.8 2863.96 l
-4248.04 2862.84 l
-4245.16 2853.4 l
-4243.72 2861.56 4240.2 2865.08 4233.32 2865.08 c
-4213.64 2865.08 4190 2834.27 4190 2809.24 c
-4190 2797.08 4196.74 2788.92 4206.92 2788.92 c
-4216.68 2788.92 4224.04 2794.68 4233.16 2810.04 c
-4231.24 2803.48 4231 2801.56 4231 2799.32 c
-4231 2793.4 4235.76 2788.76 4241.64 2788.76 c
-4249.16 2788.76 4256.52 2795 4265.8 2808.92 c
-h
-4235.56 2858.2 m
-4239.08 2857.88 4241.56 2855 4241.56 2850.68 c
-4241.56 2841.08 4236.24 2823.32 4229.96 2812.28 c
-4225.64 2804.44 4220.84 2799.92 4216.52 2799.92 c
-4212.36 2799.92 4209 2803.75 4209 2808.92 c
-4209 2817.24 4214.42 2833.24 4221.16 2845.08 c
-4225.96 2853.56 4231.24 2858.52 4235.56 2858.2 c
-h
-4273 2791 m
-f*
-4306.56 2864.92 m
-4290.24 2862.36 4284 2861.4 4275.68 2860.44 c
-4275.68 2856 l
-4282.88 2855.69 4284.32 2855.07 4284.32 2852.12 c
-4284.32 2850.52 4283.04 2844.76 4280.8 2836.44 c
-4264.8 2774.36 l
-4261.76 2763.8 4260.48 2762.84 4252.8 2763 c
-4252.8 2758 l
-4292.64 2758 l
-4292.64 2763 l
-4284.64 2763.14 4282.24 2764.16 4282.24 2767.64 c
-4282.24 2769.88 4283.36 2774.68 4286.4 2785.88 c
-4287.52 2789.72 4287.52 2790.04 4288.16 2792.44 c
-4293.76 2789.56 4295.68 2788.92 4299.04 2788.92 c
-4320.8 2788.92 4343.36 2817.88 4343.36 2845.56 c
-4343.36 2857.4 4336.64 2865.08 4326.08 2865.08 c
-4316.96 2865.08 4309.92 2859.92 4300.48 2846.52 c
-h
-4317.12 2853.56 m
-4321.28 2853.24 4323.68 2849.56 4323.36 2844.44 c
-4322.72 2833.88 4317.6 2818.04 4311.84 2807.64 c
-4306.88 2799 4301.76 2793.92 4296.32 2793.92 c
-4292.8 2793.92 4290.08 2796.75 4290.08 2800.28 c
-4290.08 2803 4291.84 2809.56 4296.16 2824.12 c
-4299.68 2835.8 4301.12 2839.8 4303.52 2843.48 c
-4307.52 2849.72 4312.96 2853.88 4317.12 2853.56 c
-h
-4352 2791 m
-f*
-4386.56 2864.92 m
-4370.24 2862.36 4364 2861.4 4355.68 2860.44 c
-4355.68 2856 l
-4362.88 2855.69 4364.32 2855.07 4364.32 2852.12 c
-4364.32 2850.52 4363.04 2844.76 4360.8 2836.44 c
-4344.8 2774.36 l
-4341.76 2763.8 4340.48 2762.84 4332.8 2763 c
-4332.8 2758 l
-4372.64 2758 l
-4372.64 2763 l
-4364.64 2763.14 4362.24 2764.16 4362.24 2767.64 c
-4362.24 2769.88 4363.36 2774.68 4366.4 2785.88 c
-4367.52 2789.72 4367.52 2790.04 4368.16 2792.44 c
-4373.76 2789.56 4375.68 2788.92 4379.04 2788.92 c
-4400.8 2788.92 4423.36 2817.88 4423.36 2845.56 c
-4423.36 2857.4 4416.64 2865.08 4406.08 2865.08 c
-4396.96 2865.08 4389.92 2859.92 4380.48 2846.52 c
-h
-4397.12 2853.56 m
-4401.28 2853.24 4403.68 2849.56 4403.36 2844.44 c
-4402.72 2833.88 4397.6 2818.04 4391.84 2807.64 c
-4386.88 2799 4381.76 2793.92 4376.32 2793.92 c
-4372.8 2793.92 4370.08 2796.75 4370.08 2800.28 c
-4370.08 2803 4371.84 2809.56 4376.16 2824.12 c
-4379.68 2835.8 4381.12 2839.8 4383.52 2843.48 c
-4387.52 2849.72 4392.96 2853.88 4397.12 2853.56 c
-h
-4432 2791 m
-f*
-4467.56 2813.56 m
-4465.32 2810.36 l
-4461.16 2804.12 4457.48 2800.56 4455.08 2800.56 c
-4453.8 2800.56 4453 2801.77 4453 2803.16 c
-4453 2804.6 4453.62 2808.76 4454.12 2811.48 c
-4468.68 2864.92 l
-4460.22 2863 4449.26 2861.4 4437.04 2860.44 c
-4437.04 2856 l
-4438.44 2856 l
-4443.24 2856 4446.48 2854.44 4446.48 2851.48 c
-4446.48 2850.2 4445.71 2847.8 4444.68 2845.08 c
-4435.4 2810.68 l
-4434.12 2806.04 4434 2801.88 4434 2799.64 c
-4434 2793.56 4438.2 2789.56 4444.36 2789.56 c
-4453.96 2789.56 4459.88 2794.36 4471.08 2811.32 c
-h
-4463.88 2900.4 m
-4458.44 2900.4 4454 2895.46 4454 2890.04 c
-4454 2883.8 4458.26 2879.4 4464.04 2879.4 c
-4470.12 2879.4 4475 2883.86 4475 2889.56 c
-4475 2895.48 4470 2900.4 4463.88 2900.4 c
-h
-4477.48 2791 m
-f*
-4551.36 2812.6 m
-4544.96 2802.68 4542.88 2800.56 4540.16 2800.56 c
-4538.88 2800.56 4538 2801.63 4538 2803.16 c
-4538 2804.76 4538.94 2808.12 4541.92 2817.08 c
-4547.68 2834.52 l
-4550.24 2842.04 4552 2849.08 4552 2852.92 c
-4552 2860.76 4547.78 2865.08 4540.16 2865.08 c
-4534.24 2865.08 4528.48 2862.62 4524.16 2858.36 c
-4518.24 2852.76 4515.2 2848.92 4504.48 2833.08 c
-4514.72 2864.76 l
-4504.48 2862.52 4491.68 2860.92 4482.72 2860.6 c
-4482.72 2855.8 l
-4489.44 2855.65 4491.36 2854.92 4491.36 2852.12 c
-4491.36 2850.2 4489.12 2841.72 4484 2823.64 c
-4480.32 2810.68 4479.2 2806.52 4475.04 2791 c
-4494.4 2791 l
-4501.92 2818.68 4507.68 2832.6 4517.6 2845.56 c
-4520.8 2849.88 4525.76 2853.08 4528.64 2853.08 c
-4530.72 2853.08 4533 2851.63 4533 2850.04 c
-4533 2849.56 4532.54 2848.28 4531.84 2846.68 c
-4523.04 2820.12 l
-4520.48 2812.44 4519 2803.32 4519 2799.16 c
-4519 2793.08 4522.84 2789.56 4529.44 2789.56 c
-4539.04 2789.56 4545.6 2795 4554.88 2810.52 c
-h
-4564.96 2791 m
-f*
-4642.48 2860 m
-4624.72 2860 l
-4619.28 2863.58 4614.48 2865.08 4607.12 2865.08 c
-4587.44 2865.08 4571 2852.05 4571 2835.8 c
-4571 2827.64 4575.35 2821.88 4584.4 2818.2 c
-4571.28 2810.84 4569 2808.6 4569 2802.68 c
-4569 2797.56 4571.89 2794.52 4578.96 2792.12 c
-4569.04 2789.72 4565.84 2788.44 4562 2785.4 c
-4559.44 2783.16 4558 2779.32 4558 2775.48 c
-4558 2765.08 4569.56 2759 4587.76 2759 c
-4610.32 2759 4626 2768.72 4626 2782.52 c
-4626 2792.28 4619.6 2797.56 4602.16 2802.52 c
-4593.68 2804.92 l
-4588.56 2806.36 4585 2808.6 4585 2811 c
-4585 2813.56 4587.68 2816.28 4590 2816.28 c
-4590.8 2816.28 4591.92 2816.24 4593.2 2816.12 c
-4594.96 2815.64 4596.24 2815 4598.16 2815 c
-4605.2 2815 4612.4 2817.09 4618.48 2820.92 c
-4627.76 2826.2 4633 2834.36 4633 2843.96 c
-4633 2846.64 4632.59 2848.32 4631.76 2851 c
-4642.48 2851 l
-h
-4584.4 2790.04 m
-4586.32 2789.88 4598.48 2785.72 4602 2784.12 c
-4606.48 2781.88 4609 2779.16 4609 2775 c
-4609 2767.96 4601.8 2764 4589.36 2764 c
-4578.96 2764 4572 2769.1 4572 2776.44 c
-4572 2779.48 4573.32 2782.2 4576.24 2785.24 c
-4578.32 2787.32 4583.12 2790.2 4584.4 2790.04 c
-h
-4606.8 2860.08 m
-4610.96 2860.08 4614 2856.19 4614 2850.52 c
-4614 2845.08 4612.08 2837.4 4609.36 2831.48 c
-4606 2824.12 4601.84 2820 4596.88 2820 c
-4592.56 2820 4590 2823.52 4590 2829.88 c
-4590 2836.28 4592.79 2846.04 4596.24 2852.12 c
-4599.28 2857.4 4602.64 2860.08 4606.8 2860.08 c
-h
-4646 2791 m
-f*
-1 i
-1 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-f*
-0 g
-1836.95 1421.75 m
-1919.75 1421.75 l
-1919.75 1268.15 l
-2086.55 1268.15 l
-2086.55 1421.75 l
-2166.95 1421.75 l
-2003.75 1572.95 l
-1836.95 1421.75 l
-1863.35 1432.55 l
-2003.75 1559.75 l
-2141.75 1432.55 l
-2075.75 1432.55 l
-2075.75 1278.95 l
-1929.35 1278.95 l
-1929.35 1432.55 l
-1863.35 1432.55 l
-1836.95 1421.75 l
-f*
-0.2 i
-2275.88 1447 m
-2275.88 1442 l
-2288.3 1441.29 2292 1438.45 2292 1429.4 c
-2292 1342.28 l
-2292 1333.1 2289.25 1330.94 2275.88 1329.5 c
-2275.88 1325 l
-2333.84 1325 l
-2364.26 1325 2384 1338.5 2384 1358.84 c
-2384 1367.12 2380.73 1374.32 2374.7 1379.9 c
-2368.4 1385.48 2362.28 1388 2349.68 1390.7 c
-2370.56 1396.82 2378 1404.2 2378 1417.88 c
-2378 1436.42 2361.55 1447 2331.5 1447 c
-h
-2321 1386.74 m
-2325.92 1386.74 l
-2344.46 1386.74 2353 1377.2 2353 1357.22 c
-2353 1339.76 2345.77 1331 2331.5 1331 c
-2323.58 1331 2321 1333.99 2321 1341.74 c
-h
-2321 1432.46 m
-2321 1438.94 2323.39 1442 2330.24 1442 c
-2342.84 1442 2349 1434.03 2349 1416.62 c
-2349 1397.72 2343.08 1392.68 2321 1392.14 c
-h
-2393.06 1325 m
-f*
-2478.14 1336.52 m
-2476.34 1334.72 l
-2475.8 1334.18 2475.26 1334 2474.36 1334 c
-2471.84 1334 2471 1335.44 2471 1338.5 c
-2471 1385.48 l
-2471 1400.78 2457.16 1410.16 2434.94 1410.16 c
-2414.6 1410.16 2400.92 1400.97 2400.92 1387.46 c
-2400.92 1379.9 2405.24 1375.58 2412.62 1375.58 c
-2419.82 1375.58 2424.86 1379.9 2424.86 1386.02 c
-2424.86 1388.54 2423.96 1390.88 2421.62 1393.76 c
-2420 1395.56 2419.46 1396.64 2419.46 1397.72 c
-2419.46 1401.5 2424.32 1404.16 2430.8 1404.16 c
-2441.42 1404.16 2446 1399.37 2446 1388.54 c
-2446 1375.4 l
-2424.89 1368.92 2416.41 1365.68 2409.56 1361.18 c
-2401.46 1355.78 2398 1349.48 2398 1341.56 c
-2398 1330.58 2406.07 1322.48 2417.3 1322.48 c
-2427.74 1322.48 2436.02 1326.08 2445.92 1335.08 c
-2447.9 1325.9 2451.86 1322.48 2460.68 1322.48 c
-2468.42 1322.48 2474 1325.36 2480.84 1332.74 c
-h
-2446 1343 m
-2441.04 1337.42 2437.37 1335.26 2432.96 1335.26 c
-2427.56 1335.26 2424 1340.12 2424 1347.32 c
-2424 1357.76 2431.57 1365.14 2446 1369.1 c
-h
-2483 1325 m
-f*
-2544.22 1383.68 m
-2544.22 1409.8 l
-2540.24 1409.8 l
-2539.16 1407.08 2538.08 1406.2 2535.74 1406.2 c
-2534.66 1406.2 2533.04 1406.55 2530.16 1407.44 c
-2524.4 1409.42 2520.26 1410.16 2516.12 1410.16 c
-2499.74 1410.16 2488 1398.99 2488 1383.86 c
-2488 1371.98 2495.34 1363.7 2513.42 1355.96 c
-2525.84 1350.56 2531 1346.06 2531 1340.3 c
-2531 1333.28 2525.48 1328.48 2517.2 1328.48 c
-2504.6 1328.48 2496.32 1336.62 2492.54 1352.36 c
-2487.5 1352.36 l
-2487.5 1322.66 l
-2492 1322.66 l
-2493.98 1326.44 2495.06 1327.7 2496.68 1327.7 c
-2497.58 1327.7 2499.02 1327.34 2500.82 1326.62 c
-2506.04 1324.46 2515.22 1322.48 2520.26 1322.48 c
-2536.64 1322.48 2548 1333.64 2548 1349.84 c
-2548 1362.62 2541.15 1370.54 2523.14 1377.92 c
-2510.9 1383.14 2506 1387.64 2506 1393.76 c
-2506 1399.7 2510.98 1404.16 2517.74 1404.16 c
-2522.6 1404.16 2527.28 1402.19 2531.24 1398.44 c
-2535.02 1394.84 2537 1391.42 2539.7 1383.68 c
-h
-2553.02 1325 m
-f*
-2624.36 1347.5 m
-2616.98 1338.68 2611.58 1335.48 2603.84 1335.48 c
-2597 1335.48 2591.6 1338.53 2588 1344.62 c
-2584.58 1350.36 2583.14 1356.45 2582.42 1369 c
-2627.78 1369 l
-2626.7 1383.99 2624 1392.3 2618.42 1399.34 c
-2612.66 1406.36 2604.2 1410.16 2594.12 1410.16 c
-2571.62 1410.16 2556.5 1392.33 2556.5 1366.04 c
-2556.5 1339.76 2571.26 1322.48 2593.58 1322.48 c
-2608.16 1322.48 2616.98 1328.06 2628.68 1344.98 c
-h
-2581.52 1376 m
-2582.06 1397.42 2585.3 1404.16 2594.12 1404.16 c
-2599.34 1404.16 2602.58 1401.42 2604.02 1396.1 c
-2604.92 1392.68 2605.28 1387.64 2605.64 1378.46 c
-2605.64 1376 l
-h
-2631.92 1325 m
-f*
-2678 1325 m
-f*
-2781.94 1447 m
-2679.88 1447 l
-2679.88 1442 l
-2692.3 1441.29 2696 1438.63 2696 1429.4 c
-2696 1342.28 l
-2696 1332.92 2693.44 1330.94 2679.88 1329.5 c
-2679.88 1325 l
-2744.68 1325 l
-2744.68 1330 l
-2728.12 1330.69 2725 1332.77 2725 1342.28 c
-2725 1384.22 l
-2743.28 1383.86 2749.91 1377.2 2752.42 1356.32 c
-2756.92 1356.32 l
-2756.92 1417.16 l
-2752.42 1417.16 l
-2749.19 1396.64 2742.92 1390.34 2725 1390.34 c
-2725 1432.1 l
-2725 1438.76 2727.32 1441 2736.4 1441 c
-2753.14 1441 2763.58 1437.8 2769.16 1431.2 c
-2773.12 1426.7 2775.1 1421.84 2777.62 1410.5 c
-2781.94 1410.5 l
-h
-2786.98 1325 m
-f*
-2826.28 1408 m
-2792.22 1408 l
-2792.22 1403.66 l
-2799.96 1402.58 2802 1400.24 2802 1393.04 c
-2802 1340.12 l
-2802 1332.74 2800.19 1330.76 2792.22 1329.32 c
-2792.22 1325 l
-2840.1 1325 l
-2840.1 1329.32 l
-2829.12 1330.04 2827 1332.38 2827 1343.54 c
-2827 1377.56 l
-2827 1386.92 2832.02 1394.66 2837.94 1394.66 c
-2839.38 1394.66 2841 1393.4 2842.98 1390.52 c
-2846.4 1385.66 2849.1 1384.04 2853.78 1384.04 c
-2860.44 1384.04 2865.12 1389.08 2865.12 1395.92 c
-2865.12 1404.2 2859 1410.16 2850.54 1410.16 c
-2841.55 1410.16 2834.73 1405.47 2826.28 1393.22 c
-h
-2866.92 1325 m
-f*
-2953.14 1336.52 m
-2951.34 1334.72 l
-2950.8 1334.18 2950.26 1334 2949.36 1334 c
-2946.84 1334 2946 1335.44 2946 1338.5 c
-2946 1385.48 l
-2946 1400.78 2932.16 1410.16 2909.94 1410.16 c
-2889.6 1410.16 2875.92 1400.97 2875.92 1387.46 c
-2875.92 1379.9 2880.24 1375.58 2887.62 1375.58 c
-2894.82 1375.58 2899.86 1379.9 2899.86 1386.02 c
-2899.86 1388.54 2898.96 1390.88 2896.62 1393.76 c
-2895 1395.56 2894.46 1396.64 2894.46 1397.72 c
-2894.46 1401.5 2899.32 1404.16 2905.8 1404.16 c
-2916.42 1404.16 2921 1399.37 2921 1388.54 c
-2921 1375.4 l
-2899.89 1368.92 2891.41 1365.68 2884.56 1361.18 c
-2876.46 1355.78 2873 1349.48 2873 1341.56 c
-2873 1330.58 2881.07 1322.48 2892.3 1322.48 c
-2902.74 1322.48 2911.02 1326.08 2920.92 1335.08 c
-2922.9 1325.9 2926.86 1322.48 2935.68 1322.48 c
-2943.42 1322.48 2949 1325.36 2955.84 1332.74 c
-h
-2921 1343 m
-2916.04 1337.42 2912.37 1335.26 2907.96 1335.26 c
-2902.56 1335.26 2899 1340.12 2899 1347.32 c
-2899 1357.76 2906.57 1365.14 2921 1369.1 c
-h
-2958 1325 m
-f*
-2995.46 1408 m
-2960.73 1408 l
-2960.73 1403.66 l
-2968.65 1402.58 2971 1400.42 2971 1393.04 c
-2971 1340.12 l
-2971 1332.74 2968.95 1330.76 2960.73 1329.32 c
-2960.73 1325 l
-3003.93 1325 l
-3003.93 1329.32 l
-2997.63 1330.22 2996 1332.74 2996 1339.58 c
-2996 1387.64 l
-2996 1388.54 2998.51 1391.78 3000.51 1393.76 c
-3004.29 1396.64 3007.53 1398.16 3010.77 1398.16 c
-3017.79 1398.16 3021 1394 3021 1383.14 c
-3021 1339.58 l
-3021 1332.2 3018.9 1329.86 3011.85 1329.32 c
-3011.85 1325 l
-3053.97 1325 l
-3053.97 1329.32 l
-3047.67 1330.04 3046 1332.74 3046 1339.58 c
-3046 1387.64 l
-3046 1388.54 3048.43 1391.6 3050.37 1393.58 c
-3054.33 1396.64 3057.57 1398.16 3060.81 1398.16 c
-3067.65 1398.16 3070 1393.82 3070 1383.14 c
-3070 1339.58 l
-3070 1332.02 3068.1 1329.86 3061.53 1329.32 c
-3061.53 1325 l
-3104.37 1325 l
-3104.37 1329 l
-3097.35 1329.37 3095 1331.6 3095 1339.58 c
-3095 1384.76 l
-3095 1400.24 3085.6 1410.16 3071.07 1410.16 c
-3060.81 1410.16 3053.97 1406.01 3044.61 1394.48 c
-3039.21 1405.82 3032.91 1410.16 3021.57 1410.16 c
-3010.2 1410.16 3002.21 1405.29 2995.46 1394.48 c
-h
-3107.94 1325 m
-f*
-3180.36 1347.5 m
-3172.98 1338.68 3167.58 1335.48 3159.84 1335.48 c
-3153 1335.48 3147.6 1338.53 3144 1344.62 c
-3140.58 1350.36 3139.14 1356.45 3138.42 1369 c
-3183.78 1369 l
-3182.7 1383.99 3180 1392.3 3174.42 1399.34 c
-3168.66 1406.36 3160.2 1410.16 3150.12 1410.16 c
-3127.62 1410.16 3112.5 1392.33 3112.5 1366.04 c
-3112.5 1339.76 3127.26 1322.48 3149.58 1322.48 c
-3164.16 1322.48 3172.98 1328.06 3184.68 1344.98 c
-h
-3137.52 1376 m
-3138.06 1397.42 3141.3 1404.16 3150.12 1404.16 c
-3155.34 1404.16 3158.58 1401.42 3160.02 1396.1 c
-3160.92 1392.68 3161.28 1387.64 3161.64 1378.46 c
-3161.64 1376 l
-h
-3187.92 1325 m
-f*
-1 i
-2272.55 1289.75 914.4 15.5999 re
-f
-0.2 i
-3784.26 5016.36 m
-3773.64 5005.2 3767.88 5000.88 3759.06 4997.46 c
-3753.84 4995.3 3747.9 4994.58 3742.86 4994.58 c
-3730.98 4994.58 3719.64 5000.74 3714.42 5009.88 c
-3709.2 5019.42 3707 5032.2 3707 5050.38 c
-3707 5087.64 3718.23 5107.7 3739.8 5107.7 c
-3748.26 5107.7 3756 5104.38 3763.74 5097.36 c
-3771.48 5090.52 3775.62 5084.4 3781.92 5070.72 c
-3786.42 5070.72 l
-3786.42 5113.16 l
-3781.56 5113.16 l
-3778.86 5106.43 3777.06 5104.56 3773.64 5104.56 c
-3771.84 5104.56 3769.5 5105.28 3765.36 5107.08 c
-3754.92 5111.4 3746.1 5113.7 3737.46 5113.7 c
-3701.64 5113.7 3675 5085.84 3675 5048.76 c
-3675 5011.68 3701.21 4985.58 3738.54 4985.58 c
-3759.24 4985.58 3771.48 4991.88 3789.66 5011.86 c
-h
-3795.96 4989 m
-f*
-3859.18 4986.66 m
-3866.78 4989.36 3871.02 4990.08 3882.5 4991.34 c
-3893.66 4992.6 l
-3893.66 4997 l
-3885.74 4997.35 3884 4999.63 3884 5007.18 c
-3884 5072 l
-3847.4 5072 l
-3847.4 5067.66 l
-3856.4 5066.94 3859 5064.78 3859 5057.04 c
-3859 5006.1 l
-3852.88 5000.16 3849.18 4998.48 3843.8 4998.48 c
-3836.42 4998.48 3834 5002 3834 5010.96 c
-3834 5072 l
-3799.88 5072 l
-3799.88 5067.66 l
-3807.26 5066.22 3809 5064.6 3809 5057.04 c
-3809 5011.68 l
-3809 4995.84 3817.89 4986.48 3832.64 4986.48 c
-3842.16 4986.48 3848.56 4989.36 3859.18 4998.36 c
-h
-3897.08 4989 m
-f*
-3935.28 5072 m
-3901.22 5072 l
-3901.22 5067.66 l
-3908.96 5066.58 3911 5064.24 3911 5057.04 c
-3911 5004.12 l
-3911 4996.74 3909.19 4994.76 3901.22 4993.32 c
-3901.22 4989 l
-3949.1 4989 l
-3949.1 4993.32 l
-3938.12 4994.04 3936 4996.38 3936 5007.54 c
-3936 5041.56 l
-3936 5050.92 3941.02 5058.66 3946.94 5058.66 c
-3948.38 5058.66 3950 5057.4 3951.98 5054.52 c
-3955.4 5049.66 3958.1 5048.04 3962.78 5048.04 c
-3969.44 5048.04 3974.12 5053.08 3974.12 5059.92 c
-3974.12 5068.2 3968 5074.16 3959.54 5074.16 c
-3950.55 5074.16 3943.73 5069.47 3935.28 5057.22 c
-h
-3975.92 4989 m
-f*
-4016.28 5072 m
-3982.22 5072 l
-3982.22 5067.66 l
-3989.96 5066.58 3992 5064.24 3992 5057.04 c
-3992 5004.12 l
-3992 4996.74 3990.19 4994.76 3982.22 4993.32 c
-3982.22 4989 l
-4030.1 4989 l
-4030.1 4993.32 l
-4019.12 4994.04 4017 4996.38 4017 5007.54 c
-4017 5041.56 l
-4017 5050.92 4022.02 5058.66 4027.94 5058.66 c
-4029.38 5058.66 4031 5057.4 4032.98 5054.52 c
-4036.4 5049.66 4039.1 5048.04 4043.78 5048.04 c
-4050.44 5048.04 4055.12 5053.08 4055.12 5059.92 c
-4055.12 5068.2 4049 5074.16 4040.54 5074.16 c
-4031.55 5074.16 4024.73 5069.47 4016.28 5057.22 c
-h
-4056.92 4989 m
-f*
-4128.36 5011.5 m
-4120.98 5002.68 4115.58 4999.48 4107.84 4999.48 c
-4101 4999.48 4095.6 5002.53 4092 5008.62 c
-4088.58 5014.36 4087.14 5020.45 4086.42 5033 c
-4131.78 5033 l
-4130.7 5047.99 4128 5056.3 4122.42 5063.34 c
-4116.66 5070.36 4108.2 5074.16 4098.12 5074.16 c
-4075.62 5074.16 4060.5 5056.33 4060.5 5030.04 c
-4060.5 5003.76 4075.26 4986.48 4097.58 4986.48 c
-4112.16 4986.48 4120.98 4992.06 4132.68 5008.98 c
-h
-4085.52 5040 m
-4086.06 5061.42 4089.3 5068.16 4098.12 5068.16 c
-4103.34 5068.16 4106.58 5065.42 4108.02 5060.1 c
-4108.92 5056.68 4109.28 5051.64 4109.64 5042.46 c
-4109.64 5040 l
-h
-4135.92 4989 m
-f*
-4173.82 5072 m
-4139.78 5072 l
-4139.78 5067.66 l
-4147.7 5066.4 4149 5064.6 4149 5057.04 c
-4149 5004.12 l
-4149 4996.56 4147.61 4994.94 4139.78 4993.32 c
-4139.78 4989 l
-4183.16 4989 l
-4183.16 4993.32 l
-4176.5 4994.22 4174 4996.92 4174 5003.58 c
-4174 5051.64 l
-4174 5052.36 4175.4 5054.16 4177.4 5055.96 c
-4181.36 5059.92 4185.68 5062.16 4190 5062.16 c
-4196.12 5062.16 4199 5057.27 4199 5047.14 c
-4199 5003.58 l
-4199 4996.92 4196.71 4994.04 4190.72 4993.32 c
-4190.72 4989 l
-4233.02 4989 l
-4233.02 4993.32 l
-4226 4993.86 4224 4996.02 4224 5003.58 c
-4224 5048.76 l
-4224 5064.24 4214.54 5074.16 4199.9 5074.16 c
-4188.96 5074.16 4180.57 5069.11 4173.82 5058.48 c
-h
-4236.08 4989 m
-f*
-4290.9 5072 m
-4274 5072 l
-4274 5102.4 l
-4269.48 5102.4 l
-4258.5 5086.92 4251.3 5078.82 4239.6 5068.92 c
-4239.6 5064 l
-4249 5064 l
-4249 5005.74 l
-4249 4994.04 4256.73 4986.84 4269.12 4986.84 c
-4281.18 4986.84 4288.38 4992.24 4295.76 5007 c
-4291.26 5008.98 l
-4287.66 5002.14 4284.78 4999.84 4281 4999.84 c
-4275.96 4999.84 4274 5002.83 4274 5009.88 c
-4274 5064 l
-4290.9 5064 l
-h
-4295.94 4989 m
-f*
-4341 4989 m
-f*
-4445.94 5111 m
-4343.88 5111 l
-4343.88 5106 l
-4356.3 5105.29 4360 5102.63 4360 5093.4 c
-4360 5006.28 l
-4360 4996.92 4357.44 4994.94 4343.88 4993.5 c
-4343.88 4989 l
-4408.68 4989 l
-4408.68 4994 l
-4392.12 4994.69 4389 4996.77 4389 5006.28 c
-4389 5048.22 l
-4407.28 5047.86 4413.91 5041.2 4416.42 5020.32 c
-4420.92 5020.32 l
-4420.92 5081.16 l
-4416.42 5081.16 l
-4413.19 5060.64 4406.92 5054.34 4389 5054.34 c
-4389 5096.1 l
-4389 5102.76 4391.32 5105 4400.4 5105 c
-4417.14 5105 4427.58 5101.8 4433.16 5095.2 c
-4437.12 5090.7 4439.1 5085.84 4441.62 5074.5 c
-4445.94 5074.5 l
-h
-4450.98 4989 m
-f*
-4490.28 5072 m
-4456.22 5072 l
-4456.22 5067.66 l
-4463.96 5066.58 4466 5064.24 4466 5057.04 c
-4466 5004.12 l
-4466 4996.74 4464.19 4994.76 4456.22 4993.32 c
-4456.22 4989 l
-4504.1 4989 l
-4504.1 4993.32 l
-4493.12 4994.04 4491 4996.38 4491 5007.54 c
-4491 5041.56 l
-4491 5050.92 4496.02 5058.66 4501.94 5058.66 c
-4503.38 5058.66 4505 5057.4 4506.98 5054.52 c
-4510.4 5049.66 4513.1 5048.04 4517.78 5048.04 c
-4524.44 5048.04 4529.12 5053.08 4529.12 5059.92 c
-4529.12 5068.2 4523 5074.16 4514.54 5074.16 c
-4505.55 5074.16 4498.73 5069.47 4490.28 5057.22 c
-h
-4530.92 4989 m
-f*
-4616.14 5000.52 m
-4614.34 4998.72 l
-4613.8 4998.18 4613.26 4998 4612.36 4998 c
-4609.84 4998 4609 4999.44 4609 5002.5 c
-4609 5049.48 l
-4609 5064.78 4595.16 5074.16 4572.94 5074.16 c
-4552.6 5074.16 4538.92 5064.97 4538.92 5051.46 c
-4538.92 5043.9 4543.24 5039.58 4550.62 5039.58 c
-4557.82 5039.58 4562.86 5043.9 4562.86 5050.02 c
-4562.86 5052.54 4561.96 5054.88 4559.62 5057.76 c
-4558 5059.56 4557.46 5060.64 4557.46 5061.72 c
-4557.46 5065.5 4562.32 5068.16 4568.8 5068.16 c
-4579.42 5068.16 4584 5063.37 4584 5052.54 c
-4584 5039.4 l
-4562.89 5032.92 4554.41 5029.68 4547.56 5025.18 c
-4539.46 5019.78 4536 5013.48 4536 5005.56 c
-4536 4994.58 4544.07 4986.48 4555.3 4986.48 c
-4565.74 4986.48 4574.02 4990.08 4583.92 4999.08 c
-4585.9 4989.9 4589.86 4986.48 4598.68 4986.48 c
-4606.42 4986.48 4612 4989.36 4618.84 4996.74 c
-h
-4584 5007 m
-4579.04 5001.42 4575.37 4999.26 4570.96 4999.26 c
-4565.56 4999.26 4562 5004.12 4562 5011.32 c
-4562 5021.76 4569.57 5029.14 4584 5033.1 c
-h
-4621 4989 m
-f*
-4658.46 5072 m
-4623.73 5072 l
-4623.73 5067.66 l
-4631.65 5066.58 4634 5064.42 4634 5057.04 c
-4634 5004.12 l
-4634 4996.74 4631.95 4994.76 4623.73 4993.32 c
-4623.73 4989 l
-4666.93 4989 l
-4666.93 4993.32 l
-4660.63 4994.22 4659 4996.74 4659 5003.58 c
-4659 5051.64 l
-4659 5052.54 4661.51 5055.78 4663.51 5057.76 c
-4667.29 5060.64 4670.53 5062.16 4673.77 5062.16 c
-4680.79 5062.16 4684 5058 4684 5047.14 c
-4684 5003.58 l
-4684 4996.2 4681.9 4993.86 4674.85 4993.32 c
-4674.85 4989 l
-4716.97 4989 l
-4716.97 4993.32 l
-4710.67 4994.04 4709 4996.74 4709 5003.58 c
-4709 5051.64 l
-4709 5052.54 4711.43 5055.6 4713.37 5057.58 c
-4717.33 5060.64 4720.57 5062.16 4723.81 5062.16 c
-4730.65 5062.16 4733 5057.82 4733 5047.14 c
-4733 5003.58 l
-4733 4996.02 4731.1 4993.86 4724.53 4993.32 c
-4724.53 4989 l
-4767.37 4989 l
-4767.37 4993 l
-4760.35 4993.37 4758 4995.6 4758 5003.58 c
-4758 5048.76 l
-4758 5064.24 4748.6 5074.16 4734.07 5074.16 c
-4723.81 5074.16 4716.97 5070.01 4707.61 5058.48 c
-4702.21 5069.82 4695.91 5074.16 4684.57 5074.16 c
-4673.2 5074.16 4665.21 5069.29 4658.46 5058.48 c
-h
-4770.94 4989 m
-f*
-4843.36 5011.5 m
-4835.98 5002.68 4830.58 4999.48 4822.84 4999.48 c
-4816 4999.48 4810.6 5002.53 4807 5008.62 c
-4803.58 5014.36 4802.14 5020.45 4801.42 5033 c
-4846.78 5033 l
-4845.7 5047.99 4843 5056.3 4837.42 5063.34 c
-4831.66 5070.36 4823.2 5074.16 4813.12 5074.16 c
-4790.62 5074.16 4775.5 5056.33 4775.5 5030.04 c
-4775.5 5003.76 4790.26 4986.48 4812.58 4986.48 c
-4827.16 4986.48 4835.98 4992.06 4847.68 5008.98 c
-h
-4800.52 5040 m
-4801.06 5061.42 4804.3 5068.16 4813.12 5068.16 c
-4818.34 5068.16 4821.58 5065.42 4823.02 5060.1 c
-4823.92 5056.68 4824.28 5051.64 4824.64 5042.46 c
-4824.64 5040 l
-h
-4850.92 4989 m
-f*
-1 i
-3665.75 4954.55 1184.4 15.5999 re
-f
-1 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-f*
-0 g
-4048.55 4732.55 m
-4130.15 4732.55 l
-4130.15 4581.35 l
-4295.75 4581.35 l
-4295.75 4732.55 l
-4378.55 4732.55 l
-4211.75 4886.15 l
-4048.55 4732.55 l
-4073.75 4742.15 l
-4211.75 4871.75 l
-4353.35 4742.15 l
-4286.15 4742.15 l
-4286.15 4590.95 l
-4139.75 4590.95 l
-4139.75 4742.15 l
-4073.75 4742.15 l
-4048.55 4732.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fronta.eps b/ast-5.3-1/sun211_figures/fronta.eps
deleted file mode 100644
index 0369c80..0000000
--- a/ast-5.3-1/sun211_figures/fronta.eps
+++ /dev/null
@@ -1,6473 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:19
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-0 0 1 rg
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fronta_bw.eps b/ast-5.3-1/sun211_figures/fronta_bw.eps
deleted file mode 100644
index 73d133f..0000000
--- a/ast-5.3-1/sun211_figures/fronta_bw.eps
+++ /dev/null
@@ -1,6472 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 20 100 530 631
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:47:36
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 5612 m
-4853 5612 l
-S
-4829 5613 m
-4805 5613 l
-S
-4781 5614 m
-4757 5614 l
-S
-4733 5614 m
-4709 5615 l
-S
-4685 5615 m
-4661 5616 l
-S
-4637 5616 m
-4613 5617 l
-S
-4589 5617 m
-4565 5618 l
-S
-4541 5618 m
-4517 5619 l
-S
-4493 5619 m
-4469 5620 l
-S
-4445 5620 m
-4421 5621 l
-S
-4397 5621 m
-4373 5621 l
-S
-4349 5622 m
-4325 5622 l
-S
-4301 5623 m
-4277 5623 l
-S
-4253 5624 m
-4229 5624 l
-S
-4205 5625 m
-4181 5625 l
-S
-4157 5626 m
-4133 5626 l
-S
-4109 5627 m
-4101 5627 l
-4085 5627 l
-S
-4061 5628 m
-4037 5628 l
-S
-4013 5628 m
-3989 5629 l
-S
-3965 5629 m
-3941 5630 l
-S
-3917 5630 m
-3893 5631 l
-S
-3869 5631 m
-3845 5632 l
-S
-3821 5632 m
-3797 5633 l
-S
-3773 5633 m
-3749 5634 l
-S
-3725 5634 m
-3701 5635 l
-S
-3677 5635 m
-3652 5636 l
-S
-3628 5636 m
-3604 5636 l
-S
-3580 5637 m
-3564 5637 l
-3556 5637 l
-S
-3532 5638 m
-3508 5638 l
-S
-3484 5639 m
-3460 5639 l
-S
-3436 5640 m
-3412 5640 l
-S
-3388 5641 m
-3364 5641 l
-S
-3340 5642 m
-3316 5642 l
-S
-3292 5643 m
-3268 5643 l
-S
-3244 5643 m
-3220 5644 l
-S
-3196 5644 m
-3172 5645 l
-S
-3148 5645 m
-3124 5646 l
-S
-3100 5646 m
-3076 5647 l
-S
-3052 5647 m
-3028 5648 l
-S
-3004 5648 m
-2980 5649 l
-S
-2956 5649 m
-2932 5650 l
-S
-2908 5650 m
-2884 5650 l
-S
-2860 5651 m
-2836 5651 l
-S
-2812 5652 m
-2788 5652 l
-S
-2764 5653 m
-2740 5653 l
-S
-2716 5654 m
-2692 5654 l
-S
-2668 5655 m
-2644 5655 l
-S
-2620 5656 m
-2596 5656 l
-S
-2572 5657 m
-2548 5657 l
-S
-2524 5657 m
-2500 5658 l
-S
-2476 5658 m
-2452 5659 l
-S
-2428 5659 m
-2404 5660 l
-S
-2380 5660 m
-2356 5661 l
-S
-2332 5661 m
-2308 5662 l
-S
-2284 5662 m
-2260 5663 l
-S
-2236 5663 m
-2212 5664 l
-S
-2188 5664 m
-2164 5665 l
-S
-2140 5665 m
-2116 5665 l
-S
-2092 5666 m
-2068 5666 l
-S
-2044 5667 m
-2020 5667 l
-S
-1996 5668 m
-1972 5668 l
-S
-1948 5669 m
-1924 5669 l
-S
-1900 5670 m
-1876 5670 l
-S
-1852 5671 m
-1828 5671 l
-S
-1804 5672 m
-1780 5672 l
-S
-1756 5672 m
-1732 5673 l
-S
-1708 5673 m
-1684 5674 l
-S
-1660 5674 m
-1636 5675 l
-S
-1612 5675 m
-1588 5676 l
-S
-1564 5676 m
-1540 5677 l
-S
-1516 5677 m
-1492 5678 l
-S
-1468 5678 m
-1444 5679 l
-S
-1420 5679 m
-1416 5679 l
-1396 5679 l
-S
-1372 5680 m
-1348 5680 l
-S
-1323 5681 m
-1299 5681 l
-S
-1275 5682 m
-1251 5682 l
-S
-1227 5683 m
-1203 5683 l
-S
-1179 5684 m
-1155 5684 l
-S
-1131 5685 m
-1107 5685 l
-S
-1083 5686 m
-1059 5686 l
-S
-1035 5687 m
-1011 5687 l
-S
-987 5687 m
-963 5688 l
-S
-939 5688 m
-915 5689 l
-S
-891 5689 m
-879 5690 l
-867 5690 l
-S
-843 5690 m
-819 5691 l
-S
-795 5691 m
-771 5692 l
-S
-747 5692 m
-723 5693 l
-S
-699 5693 m
-675 5694 l
-S
-651 5694 m
-627 5694 l
-S
-603 5695 m
-579 5695 l
-S
-555 5696 m
-533 5696 l
-S
-4877 4985 m
-4875 4985 l
-S
-4851 4986 m
-4827 4986 l
-S
-4803 4987 m
-4779 4987 l
-S
-4755 4988 m
-4731 4988 l
-S
-4707 4988 m
-4683 4989 l
-S
-4659 4989 m
-4635 4990 l
-S
-4611 4990 m
-4601 4991 l
-4587 4991 l
-S
-4563 4991 m
-4539 4992 l
-S
-4515 4992 m
-4491 4993 l
-S
-4467 4993 m
-4443 4994 l
-S
-4419 4994 m
-4395 4995 l
-S
-4371 4995 m
-4347 4996 l
-S
-4323 4996 m
-4299 4997 l
-S
-4275 4997 m
-4251 4997 l
-S
-4227 4998 m
-4203 4998 l
-S
-4179 4999 m
-4155 4999 l
-S
-4131 5000 m
-4107 5000 l
-S
-4083 5001 m
-4064 5001 l
-4059 5001 l
-S
-4035 5002 m
-4011 5002 l
-S
-3987 5003 m
-3963 5003 l
-S
-3939 5004 m
-3915 5004 l
-S
-3891 5005 m
-3867 5005 l
-S
-3843 5006 m
-3819 5006 l
-S
-3795 5007 m
-3770 5007 l
-S
-3746 5007 m
-3722 5008 l
-S
-3698 5008 m
-3674 5009 l
-S
-3650 5009 m
-3626 5010 l
-S
-3602 5010 m
-3578 5011 l
-S
-3554 5011 m
-3530 5012 l
-S
-3506 5012 m
-3482 5013 l
-S
-3458 5013 m
-3434 5014 l
-S
-3410 5014 m
-3386 5015 l
-S
-3362 5015 m
-3338 5016 l
-S
-3314 5016 m
-3290 5016 l
-S
-3266 5017 m
-3242 5017 l
-S
-3218 5018 m
-3194 5018 l
-S
-3170 5019 m
-3146 5019 l
-S
-3122 5020 m
-3098 5020 l
-S
-3074 5021 m
-3050 5021 l
-S
-3026 5022 m
-3002 5022 l
-S
-2978 5023 m
-2954 5023 l
-S
-2930 5024 m
-2906 5024 l
-S
-2882 5025 m
-2858 5025 l
-S
-2834 5025 m
-2810 5026 l
-S
-2786 5026 m
-2762 5027 l
-S
-2738 5027 m
-2714 5028 l
-S
-2690 5028 m
-2666 5029 l
-S
-2642 5029 m
-2618 5030 l
-S
-2594 5030 m
-2570 5031 l
-S
-2546 5031 m
-2522 5032 l
-S
-2498 5032 m
-2474 5033 l
-S
-2450 5033 m
-2426 5034 l
-S
-2402 5034 m
-2378 5035 l
-S
-2354 5035 m
-2330 5035 l
-S
-2306 5036 m
-2282 5036 l
-S
-2258 5037 m
-2234 5037 l
-S
-2210 5038 m
-2186 5038 l
-S
-2162 5039 m
-2138 5039 l
-S
-2114 5040 m
-2090 5040 l
-S
-2066 5041 m
-2042 5041 l
-S
-2018 5042 m
-1994 5042 l
-S
-1970 5043 m
-1946 5043 l
-S
-1922 5044 m
-1916 5044 l
-1898 5044 l
-S
-1874 5044 m
-1850 5045 l
-S
-1826 5045 m
-1802 5046 l
-S
-1778 5046 m
-1754 5047 l
-S
-1730 5047 m
-1706 5048 l
-S
-1682 5048 m
-1658 5049 l
-S
-1634 5049 m
-1610 5050 l
-S
-1586 5050 m
-1562 5051 l
-S
-1538 5051 m
-1514 5052 l
-S
-1490 5052 m
-1466 5053 l
-S
-1442 5053 m
-1418 5053 l
-S
-1393 5054 m
-1379 5054 l
-1369 5054 l
-S
-1345 5055 m
-1321 5055 l
-S
-1297 5056 m
-1273 5056 l
-S
-1249 5057 m
-1225 5057 l
-S
-1201 5058 m
-1177 5058 l
-S
-1153 5059 m
-1129 5059 l
-S
-1105 5060 m
-1081 5060 l
-S
-1057 5061 m
-1033 5061 l
-S
-1009 5062 m
-985 5062 l
-S
-961 5063 m
-937 5063 l
-S
-913 5063 m
-889 5064 l
-S
-865 5064 m
-842 5065 l
-841 5065 l
-S
-817 5065 m
-793 5066 l
-S
-769 5066 m
-745 5067 l
-S
-721 5067 m
-697 5068 l
-S
-673 5068 m
-649 5069 l
-S
-625 5069 m
-601 5070 l
-S
-577 5070 m
-553 5071 l
-S
-4873 4359 m
-4849 4359 l
-S
-4825 4360 m
-4801 4360 l
-S
-4777 4361 m
-4753 4361 l
-S
-4729 4362 m
-4705 4362 l
-S
-4681 4362 m
-4657 4363 l
-S
-4633 4363 m
-4609 4364 l
-S
-4585 4364 m
-4563 4365 l
-4561 4365 l
-S
-4537 4365 m
-4513 4366 l
-S
-4489 4366 m
-4465 4367 l
-S
-4441 4367 m
-4417 4368 l
-S
-4393 4368 m
-4369 4369 l
-S
-4345 4369 m
-4321 4370 l
-S
-4297 4370 m
-4273 4371 l
-S
-4249 4371 m
-4225 4372 l
-S
-4201 4372 m
-4177 4373 l
-S
-4153 4373 m
-4129 4374 l
-S
-4105 4374 m
-4081 4375 l
-S
-4057 4375 m
-4033 4375 l
-S
-4009 4376 m
-3985 4376 l
-S
-3961 4377 m
-3937 4377 l
-S
-3913 4378 m
-3889 4378 l
-S
-3865 4379 m
-3841 4379 l
-S
-3816 4380 m
-3792 4380 l
-S
-3768 4381 m
-3744 4381 l
-S
-3720 4382 m
-3696 4382 l
-S
-3672 4383 m
-3648 4383 l
-S
-3624 4384 m
-3600 4384 l
-S
-3576 4385 m
-3552 4385 l
-S
-3528 4386 m
-3504 4386 l
-S
-3480 4387 m
-3456 4387 l
-S
-3432 4387 m
-3408 4388 l
-S
-3384 4388 m
-3360 4389 l
-S
-3336 4389 m
-3312 4390 l
-S
-3288 4390 m
-3264 4391 l
-S
-3240 4391 m
-3216 4392 l
-S
-3192 4392 m
-3168 4393 l
-S
-3144 4393 m
-3120 4394 l
-S
-3096 4394 m
-3072 4395 l
-S
-3048 4395 m
-3024 4396 l
-S
-3000 4396 m
-2976 4397 l
-S
-2952 4397 m
-2928 4398 l
-S
-2904 4398 m
-2880 4399 l
-S
-2856 4399 m
-2832 4400 l
-S
-2808 4400 m
-2784 4400 l
-S
-2760 4401 m
-2736 4401 l
-S
-2712 4402 m
-2688 4402 l
-S
-2664 4403 m
-2640 4403 l
-S
-2616 4404 m
-2592 4404 l
-S
-2568 4405 m
-2544 4405 l
-S
-2520 4406 m
-2496 4406 l
-S
-2472 4407 m
-2448 4407 l
-S
-2424 4408 m
-2416 4408 l
-2400 4408 l
-S
-2376 4409 m
-2352 4409 l
-S
-2328 4410 m
-2304 4410 l
-S
-2280 4411 m
-2256 4411 l
-S
-2232 4412 m
-2208 4412 l
-S
-2184 4413 m
-2160 4413 l
-S
-2136 4413 m
-2112 4414 l
-S
-2088 4414 m
-2064 4415 l
-S
-2040 4415 m
-2016 4416 l
-S
-1992 4416 m
-1968 4417 l
-S
-1944 4417 m
-1920 4418 l
-S
-1896 4418 m
-1879 4419 l
-1872 4419 l
-S
-1848 4419 m
-1824 4420 l
-S
-1800 4420 m
-1776 4421 l
-S
-1752 4421 m
-1728 4422 l
-S
-1704 4422 m
-1680 4423 l
-S
-1656 4423 m
-1632 4424 l
-S
-1608 4424 m
-1584 4425 l
-S
-1560 4425 m
-1536 4426 l
-S
-1512 4426 m
-1488 4426 l
-S
-1464 4427 m
-1439 4427 l
-S
-1415 4428 m
-1391 4428 l
-S
-1367 4429 m
-1343 4429 l
-S
-1319 4430 m
-1295 4430 l
-S
-1271 4431 m
-1247 4431 l
-S
-1223 4432 m
-1199 4432 l
-S
-1175 4433 m
-1151 4433 l
-S
-1127 4434 m
-1103 4434 l
-S
-1079 4435 m
-1055 4435 l
-S
-1031 4436 m
-1007 4436 l
-S
-983 4437 m
-959 4437 l
-S
-935 4438 m
-911 4438 l
-S
-887 4439 m
-863 4439 l
-S
-839 4439 m
-815 4440 l
-S
-791 4440 m
-767 4441 l
-S
-743 4441 m
-719 4442 l
-S
-695 4442 m
-671 4443 l
-S
-647 4443 m
-623 4444 l
-S
-599 4444 m
-575 4445 l
-S
-551 4445 m
-533 4446 l
-S
-4877 3732 m
-4871 3732 l
-S
-4847 3733 m
-4823 3733 l
-S
-4799 3734 m
-4775 3734 l
-S
-4751 3735 m
-4727 3735 l
-S
-4703 3735 m
-4679 3736 l
-S
-4655 3736 m
-4631 3737 l
-S
-4607 3737 m
-4583 3738 l
-S
-4559 3738 m
-4535 3739 l
-S
-4511 3739 m
-4487 3740 l
-S
-4463 3740 m
-4439 3741 l
-S
-4415 3741 m
-4391 3742 l
-S
-4367 3742 m
-4343 3743 l
-S
-4319 3743 m
-4295 3744 l
-S
-4271 3744 m
-4247 3745 l
-S
-4223 3745 m
-4199 3746 l
-S
-4175 3746 m
-4151 3747 l
-S
-4127 3747 m
-4103 3748 l
-S
-4079 3748 m
-4055 3749 l
-S
-4031 3749 m
-4007 3750 l
-S
-3983 3750 m
-3959 3751 l
-S
-3935 3751 m
-3911 3752 l
-S
-3887 3752 m
-3863 3753 l
-S
-3839 3753 m
-3814 3754 l
-S
-3790 3754 m
-3766 3755 l
-S
-3742 3755 m
-3718 3755 l
-S
-3694 3756 m
-3670 3756 l
-S
-3646 3757 m
-3622 3757 l
-S
-3598 3758 m
-3574 3758 l
-S
-3550 3759 m
-3526 3759 l
-S
-3502 3760 m
-3478 3760 l
-S
-3454 3761 m
-3451 3761 l
-3430 3761 l
-S
-3406 3762 m
-3382 3762 l
-S
-3358 3763 m
-3334 3763 l
-S
-3310 3764 m
-3286 3764 l
-S
-3262 3765 m
-3238 3765 l
-S
-3214 3766 m
-3190 3766 l
-S
-3166 3767 m
-3142 3767 l
-S
-3118 3768 m
-3094 3768 l
-S
-3070 3769 m
-3046 3769 l
-S
-3022 3770 m
-2998 3770 l
-S
-2974 3771 m
-2950 3771 l
-S
-2926 3772 m
-2914 3772 l
-2902 3772 l
-S
-2878 3773 m
-2854 3773 l
-S
-2830 3774 m
-2806 3774 l
-S
-2782 3775 m
-2758 3775 l
-S
-2734 3776 m
-2710 3776 l
-S
-2686 3776 m
-2662 3777 l
-S
-2638 3777 m
-2614 3778 l
-S
-2590 3778 m
-2566 3779 l
-S
-2542 3779 m
-2518 3780 l
-S
-2494 3780 m
-2470 3781 l
-S
-2446 3781 m
-2422 3782 l
-S
-2398 3782 m
-2378 3783 l
-2374 3783 l
-S
-2350 3783 m
-2326 3784 l
-S
-2302 3784 m
-2278 3785 l
-S
-2254 3785 m
-2230 3786 l
-S
-2206 3786 m
-2182 3787 l
-S
-2158 3787 m
-2134 3788 l
-S
-2110 3788 m
-2086 3789 l
-S
-2062 3789 m
-2038 3790 l
-S
-2014 3790 m
-1990 3791 l
-S
-1966 3791 m
-1942 3792 l
-S
-1918 3792 m
-1894 3793 l
-S
-1870 3793 m
-1846 3794 l
-S
-1822 3794 m
-1798 3795 l
-S
-1774 3795 m
-1750 3796 l
-S
-1726 3796 m
-1702 3796 l
-S
-1678 3797 m
-1654 3797 l
-S
-1630 3798 m
-1606 3798 l
-S
-1582 3799 m
-1558 3799 l
-S
-1534 3800 m
-1510 3800 l
-S
-1486 3801 m
-1462 3801 l
-S
-1438 3802 m
-1414 3802 l
-S
-1389 3803 m
-1365 3803 l
-S
-1341 3804 m
-1317 3804 l
-S
-1293 3805 m
-1269 3805 l
-S
-1245 3806 m
-1221 3806 l
-S
-1197 3807 m
-1173 3807 l
-S
-1149 3808 m
-1125 3808 l
-S
-1101 3809 m
-1077 3809 l
-S
-1053 3810 m
-1029 3810 l
-S
-1005 3811 m
-981 3811 l
-S
-957 3812 m
-933 3812 l
-S
-909 3813 m
-885 3813 l
-S
-861 3814 m
-837 3814 l
-S
-813 3815 m
-789 3815 l
-S
-765 3816 m
-741 3816 l
-S
-717 3817 m
-693 3817 l
-S
-669 3817 m
-645 3818 l
-S
-621 3818 m
-597 3819 l
-S
-573 3819 m
-549 3820 l
-S
-4869 3105 m
-4845 3106 l
-S
-4821 3106 m
-4797 3107 l
-S
-4773 3107 m
-4749 3108 l
-S
-4725 3108 m
-4701 3109 l
-S
-4677 3109 m
-4653 3110 l
-S
-4629 3110 m
-4605 3111 l
-S
-4581 3111 m
-4557 3112 l
-S
-4533 3112 m
-4509 3113 l
-S
-4485 3113 m
-4461 3114 l
-S
-4437 3114 m
-4413 3115 l
-S
-4389 3115 m
-4365 3116 l
-S
-4341 3116 m
-4317 3117 l
-S
-4293 3117 m
-4269 3118 l
-S
-4245 3118 m
-4221 3119 l
-S
-4197 3119 m
-4173 3120 l
-S
-4149 3120 m
-4125 3121 l
-S
-4101 3121 m
-4077 3122 l
-S
-4053 3122 m
-4029 3123 l
-S
-4005 3123 m
-3981 3124 l
-S
-3957 3124 m
-3950 3124 l
-3933 3125 l
-S
-3909 3125 m
-3885 3126 l
-S
-3861 3126 m
-3837 3127 l
-S
-3813 3127 m
-3789 3128 l
-S
-3764 3128 m
-3740 3129 l
-S
-3716 3129 m
-3692 3130 l
-S
-3668 3130 m
-3644 3131 l
-S
-3620 3131 m
-3596 3132 l
-S
-3572 3132 m
-3548 3133 l
-S
-3524 3133 m
-3500 3134 l
-S
-3476 3134 m
-3452 3135 l
-S
-3428 3135 m
-3413 3135 l
-3404 3136 l
-S
-3380 3136 m
-3356 3137 l
-S
-3332 3137 m
-3308 3138 l
-S
-3284 3138 m
-3260 3139 l
-S
-3236 3139 m
-3212 3140 l
-S
-3188 3140 m
-3164 3141 l
-S
-3140 3141 m
-3116 3142 l
-S
-3092 3142 m
-3068 3143 l
-S
-3044 3143 m
-3020 3144 l
-S
-2996 3144 m
-2972 3145 l
-S
-2948 3145 m
-2924 3146 l
-S
-2900 3146 m
-2876 3147 l
-S
-2852 3147 m
-2828 3148 l
-S
-2804 3148 m
-2780 3149 l
-S
-2756 3149 m
-2732 3150 l
-S
-2708 3150 m
-2684 3151 l
-S
-2660 3151 m
-2636 3152 l
-S
-2612 3152 m
-2588 3152 l
-S
-2564 3153 m
-2540 3153 l
-S
-2516 3154 m
-2492 3154 l
-S
-2468 3155 m
-2444 3155 l
-S
-2420 3156 m
-2396 3156 l
-S
-2372 3157 m
-2348 3157 l
-S
-2324 3158 m
-2300 3158 l
-S
-2276 3159 m
-2252 3159 l
-S
-2228 3160 m
-2204 3160 l
-S
-2180 3161 m
-2156 3161 l
-S
-2132 3162 m
-2108 3162 l
-S
-2084 3163 m
-2060 3163 l
-S
-2036 3164 m
-2012 3164 l
-S
-1988 3165 m
-1964 3165 l
-S
-1940 3166 m
-1916 3166 l
-S
-1892 3167 m
-1868 3167 l
-S
-1844 3168 m
-1820 3168 l
-S
-1796 3169 m
-1772 3169 l
-S
-1748 3170 m
-1724 3170 l
-S
-1700 3171 m
-1676 3171 l
-S
-1652 3172 m
-1628 3172 l
-S
-1604 3173 m
-1580 3173 l
-S
-1556 3174 m
-1532 3174 l
-S
-1508 3175 m
-1484 3175 l
-S
-1460 3176 m
-1436 3176 l
-S
-1412 3177 m
-1388 3177 l
-S
-1364 3178 m
-1340 3178 l
-S
-1315 3179 m
-1291 3179 l
-S
-1267 3180 m
-1265 3180 l
-1243 3180 l
-S
-1219 3181 m
-1195 3181 l
-S
-1171 3182 m
-1147 3182 l
-S
-1123 3183 m
-1099 3183 l
-S
-1075 3184 m
-1051 3184 l
-S
-1027 3185 m
-1003 3185 l
-S
-979 3186 m
-955 3186 l
-S
-931 3187 m
-907 3187 l
-S
-883 3188 m
-859 3188 l
-S
-835 3189 m
-811 3189 l
-S
-787 3190 m
-763 3190 l
-S
-739 3191 m
-728 3191 l
-715 3191 l
-S
-691 3192 m
-667 3192 l
-S
-643 3193 m
-619 3193 l
-S
-595 3194 m
-571 3194 l
-S
-547 3195 m
-533 3195 l
-S
-4877 2479 m
-4867 2479 l
-S
-4843 2479 m
-4819 2480 l
-S
-4795 2480 m
-4771 2481 l
-S
-4747 2481 m
-4723 2482 l
-S
-4699 2482 m
-4675 2483 l
-S
-4651 2483 m
-4627 2484 l
-S
-4603 2484 m
-4579 2485 l
-S
-4555 2485 m
-4531 2486 l
-S
-4507 2486 m
-4483 2487 l
-S
-4459 2487 m
-4448 2488 l
-4435 2488 l
-S
-4411 2488 m
-4387 2489 l
-S
-4363 2489 m
-4339 2490 l
-S
-4315 2490 m
-4291 2491 l
-S
-4267 2491 m
-4243 2492 l
-S
-4219 2492 m
-4195 2493 l
-S
-4171 2493 m
-4147 2494 l
-S
-4123 2494 m
-4099 2495 l
-S
-4075 2495 m
-4051 2496 l
-S
-4027 2496 m
-4003 2497 l
-S
-3979 2497 m
-3955 2498 l
-S
-3931 2498 m
-3911 2499 l
-3907 2499 l
-S
-3883 2499 m
-3859 2500 l
-S
-3835 2500 m
-3811 2501 l
-S
-3787 2501 m
-3763 2502 l
-S
-3739 2502 m
-3715 2503 l
-S
-3691 2503 m
-3667 2504 l
-S
-3642 2504 m
-3618 2505 l
-S
-3594 2505 m
-3570 2506 l
-S
-3546 2506 m
-3522 2507 l
-S
-3498 2507 m
-3474 2508 l
-S
-3450 2508 m
-3426 2509 l
-S
-3402 2509 m
-3378 2510 l
-S
-3354 2510 m
-3330 2511 l
-S
-3306 2511 m
-3282 2512 l
-S
-3258 2512 m
-3234 2513 l
-S
-3210 2513 m
-3186 2514 l
-S
-3162 2514 m
-3138 2515 l
-S
-3114 2515 m
-3090 2516 l
-S
-3066 2516 m
-3042 2517 l
-S
-3018 2517 m
-2994 2518 l
-S
-2970 2519 m
-2946 2519 l
-S
-2922 2520 m
-2898 2520 l
-S
-2874 2521 m
-2850 2521 l
-S
-2826 2522 m
-2802 2522 l
-S
-2778 2523 m
-2754 2523 l
-S
-2730 2524 m
-2706 2524 l
-S
-2682 2525 m
-2658 2525 l
-S
-2634 2526 m
-2610 2526 l
-S
-2586 2527 m
-2562 2527 l
-S
-2538 2528 m
-2514 2528 l
-S
-2490 2529 m
-2466 2529 l
-S
-2442 2530 m
-2418 2530 l
-S
-2394 2531 m
-2370 2531 l
-S
-2346 2532 m
-2322 2532 l
-S
-2298 2533 m
-2274 2533 l
-S
-2250 2534 m
-2226 2534 l
-S
-2202 2535 m
-2178 2535 l
-S
-2154 2536 m
-2130 2536 l
-S
-2106 2537 m
-2082 2537 l
-S
-2058 2538 m
-2034 2538 l
-S
-2010 2539 m
-1986 2539 l
-S
-1962 2540 m
-1938 2540 l
-S
-1914 2541 m
-1890 2541 l
-S
-1866 2542 m
-1842 2542 l
-S
-1818 2543 m
-1794 2543 l
-S
-1770 2544 m
-1763 2544 l
-1746 2544 l
-S
-1722 2545 m
-1698 2545 l
-S
-1674 2546 m
-1650 2546 l
-S
-1626 2547 m
-1602 2547 l
-S
-1578 2548 m
-1554 2548 l
-S
-1530 2549 m
-1506 2549 l
-S
-1482 2550 m
-1458 2550 l
-S
-1434 2551 m
-1410 2551 l
-S
-1386 2552 m
-1362 2552 l
-S
-1338 2553 m
-1314 2553 l
-S
-1290 2554 m
-1266 2554 l
-S
-1242 2555 m
-1226 2555 l
-1218 2555 l
-S
-1194 2556 m
-1170 2556 l
-S
-1145 2557 m
-1121 2557 l
-S
-1097 2558 m
-1073 2558 l
-S
-1049 2559 m
-1025 2559 l
-S
-1001 2560 m
-977 2560 l
-S
-953 2561 m
-929 2561 l
-S
-905 2562 m
-881 2562 l
-S
-857 2563 m
-833 2563 l
-S
-809 2564 m
-785 2564 l
-S
-761 2565 m
-737 2565 l
-S
-713 2566 m
-689 2566 l
-S
-665 2567 m
-641 2567 l
-S
-617 2568 m
-593 2568 l
-S
-569 2569 m
-545 2569 l
-S
-4865 1852 m
-4841 1853 l
-S
-4817 1853 m
-4793 1854 l
-S
-4769 1854 m
-4745 1855 l
-S
-4721 1855 m
-4697 1856 l
-S
-4673 1856 m
-4649 1857 l
-S
-4625 1857 m
-4601 1858 l
-S
-4577 1858 m
-4553 1859 l
-S
-4529 1859 m
-4505 1860 l
-S
-4481 1860 m
-4457 1861 l
-S
-4433 1861 m
-4409 1862 l
-S
-4385 1862 m
-4361 1863 l
-S
-4337 1863 m
-4313 1864 l
-S
-4289 1864 m
-4265 1865 l
-S
-4241 1865 m
-4217 1866 l
-S
-4193 1866 m
-4169 1867 l
-S
-4145 1867 m
-4121 1868 l
-S
-4097 1869 m
-4073 1869 l
-S
-4049 1870 m
-4025 1870 l
-S
-4001 1871 m
-3977 1871 l
-S
-3953 1872 m
-3929 1872 l
-S
-3905 1873 m
-3881 1873 l
-S
-3857 1874 m
-3833 1874 l
-S
-3809 1875 m
-3785 1875 l
-S
-3761 1876 m
-3737 1876 l
-S
-3713 1877 m
-3689 1877 l
-S
-3665 1878 m
-3641 1878 l
-S
-3617 1879 m
-3593 1879 l
-S
-3569 1880 m
-3545 1880 l
-S
-3521 1881 m
-3497 1881 l
-S
-3473 1882 m
-3448 1882 l
-S
-3424 1883 m
-3400 1883 l
-S
-3376 1884 m
-3352 1884 l
-S
-3328 1885 m
-3304 1885 l
-S
-3280 1886 m
-3256 1886 l
-S
-3232 1887 m
-3208 1887 l
-S
-3184 1888 m
-3160 1888 l
-S
-3136 1889 m
-3112 1889 l
-S
-3088 1890 m
-3064 1890 l
-S
-3040 1891 m
-3016 1891 l
-S
-2992 1892 m
-2968 1892 l
-S
-2944 1893 m
-2920 1893 l
-S
-2896 1894 m
-2872 1894 l
-S
-2848 1895 m
-2824 1895 l
-S
-2800 1896 m
-2797 1896 l
-2776 1896 l
-S
-2752 1897 m
-2728 1897 l
-S
-2704 1898 m
-2680 1898 l
-S
-2656 1899 m
-2632 1900 l
-S
-2608 1900 m
-2584 1901 l
-S
-2560 1901 m
-2536 1902 l
-S
-2512 1902 m
-2488 1903 l
-S
-2464 1903 m
-2440 1904 l
-S
-2416 1904 m
-2392 1905 l
-S
-2368 1905 m
-2344 1906 l
-S
-2320 1906 m
-2296 1907 l
-S
-2272 1907 m
-2260 1907 l
-2248 1908 l
-S
-2224 1908 m
-2200 1909 l
-S
-2176 1909 m
-2152 1910 l
-S
-2128 1910 m
-2104 1911 l
-S
-2080 1911 m
-2056 1912 l
-S
-2032 1912 m
-2008 1913 l
-S
-1984 1913 m
-1960 1914 l
-S
-1936 1914 m
-1912 1915 l
-S
-1888 1915 m
-1864 1916 l
-S
-1840 1916 m
-1816 1917 l
-S
-1792 1917 m
-1768 1918 l
-S
-1744 1918 m
-1724 1919 l
-1720 1919 l
-S
-1696 1919 m
-1672 1920 l
-S
-1648 1920 m
-1624 1921 l
-S
-1600 1921 m
-1576 1922 l
-S
-1552 1922 m
-1528 1923 l
-S
-1504 1923 m
-1480 1924 l
-S
-1456 1924 m
-1432 1925 l
-S
-1408 1925 m
-1384 1926 l
-S
-1360 1926 m
-1336 1927 l
-S
-1312 1927 m
-1288 1928 l
-S
-1264 1928 m
-1240 1929 l
-S
-1216 1930 m
-1192 1930 l
-S
-1168 1931 m
-1144 1931 l
-S
-1120 1932 m
-1096 1932 l
-S
-1072 1933 m
-1048 1933 l
-S
-1024 1934 m
-1000 1934 l
-S
-976 1935 m
-952 1935 l
-S
-927 1936 m
-903 1936 l
-S
-879 1937 m
-855 1937 l
-S
-831 1938 m
-807 1938 l
-S
-783 1939 m
-759 1939 l
-S
-735 1940 m
-711 1940 l
-S
-687 1941 m
-663 1941 l
-S
-639 1942 m
-615 1942 l
-S
-591 1943 m
-567 1943 l
-S
-543 1944 m
-533 1944 l
-S
-4877 2742 m
-4876 2728 l
-S
-4875 2704 m
-4873 2680 l
-S
-4872 2656 m
-4870 2632 l
-S
-4869 2608 m
-4867 2584 l
-S
-4866 2560 m
-4864 2536 l
-S
-4863 2512 m
-4861 2488 l
-S
-4860 2464 m
-4858 2440 l
-S
-4857 2416 m
-4855 2392 l
-S
-4854 2368 m
-4852 2344 l
-S
-4851 2320 m
-4849 2296 l
-S
-4848 2273 m
-4846 2249 l
-S
-4845 2225 m
-4843 2201 l
-S
-4842 2177 m
-4840 2153 l
-S
-4838 2129 m
-4838 2121 l
-4837 2105 l
-S
-4835 2081 m
-4834 2057 l
-S
-4832 2033 m
-4831 2009 l
-S
-4829 1985 m
-4828 1961 l
-S
-4826 1937 m
-4825 1913 l
-S
-4823 1889 m
-4822 1865 l
-S
-4820 1841 m
-4819 1817 l
-S
-4817 1793 m
-4816 1777 l
-S
-4502 6121 m
-4501 6113 l
-S
-4500 6089 m
-4498 6065 l
-S
-4497 6041 m
-4496 6017 l
-S
-4494 5993 m
-4493 5969 l
-S
-4491 5945 m
-4490 5921 l
-S
-4489 5897 m
-4488 5888 l
-4487 5874 l
-S
-4486 5850 m
-4484 5826 l
-S
-4483 5802 m
-4482 5778 l
-S
-4480 5754 m
-4479 5730 l
-S
-4477 5706 m
-4476 5682 l
-S
-4475 5658 m
-4473 5634 l
-S
-4472 5610 m
-4470 5586 l
-S
-4469 5562 m
-4468 5538 l
-S
-4466 5514 m
-4465 5490 l
-S
-4463 5466 m
-4462 5442 l
-S
-4461 5418 m
-4459 5394 l
-S
-4458 5370 m
-4457 5351 l
-4456 5346 l
-S
-4455 5322 m
-4454 5298 l
-S
-4452 5274 m
-4451 5250 l
-S
-4449 5226 m
-4448 5202 l
-S
-4446 5178 m
-4445 5155 l
-S
-4444 5131 m
-4442 5107 l
-S
-4441 5083 m
-4439 5059 l
-S
-4438 5035 m
-4436 5011 l
-S
-4435 4987 m
-4434 4963 l
-S
-4432 4939 m
-4431 4915 l
-S
-4429 4891 m
-4428 4867 l
-S
-4426 4843 m
-4425 4819 l
-S
-4424 4795 m
-4422 4771 l
-S
-4421 4747 m
-4419 4723 l
-S
-4418 4699 m
-4416 4675 l
-S
-4415 4651 m
-4414 4627 l
-S
-4412 4603 m
-4411 4579 l
-S
-4409 4555 m
-4408 4531 l
-S
-4406 4507 m
-4405 4484 l
-S
-4403 4460 m
-4402 4436 l
-S
-4401 4412 m
-4399 4388 l
-S
-4398 4364 m
-4396 4340 l
-S
-4395 4316 m
-4393 4292 l
-S
-4392 4268 m
-4390 4244 l
-S
-4389 4220 m
-4388 4196 l
-S
-4386 4172 m
-4385 4148 l
-S
-4383 4124 m
-4382 4100 l
-S
-4380 4076 m
-4379 4052 l
-S
-4377 4028 m
-4376 4004 l
-S
-4374 3980 m
-4373 3956 l
-S
-4372 3932 m
-4370 3908 l
-S
-4369 3884 m
-4367 3860 l
-S
-4366 3836 m
-4364 3813 l
-S
-4363 3789 m
-4361 3765 l
-S
-4360 3741 m
-4358 3717 l
-S
-4357 3693 m
-4355 3669 l
-S
-4354 3645 m
-4353 3621 l
-S
-4351 3597 m
-4350 3573 l
-S
-4348 3549 m
-4347 3525 l
-S
-4345 3501 m
-4344 3477 l
-S
-4342 3453 m
-4341 3429 l
-S
-4339 3405 m
-4338 3381 l
-S
-4336 3357 m
-4335 3333 l
-S
-4333 3309 m
-4332 3285 l
-S
-4330 3261 m
-4329 3237 l
-S
-4327 3213 m
-4327 3206 l
-4326 3190 l
-S
-4324 3166 m
-4323 3142 l
-S
-4321 3118 m
-4320 3094 l
-S
-4318 3070 m
-4317 3046 l
-S
-4316 3022 m
-4314 2998 l
-S
-4313 2974 m
-4311 2950 l
-S
-4310 2926 m
-4308 2902 l
-S
-4307 2878 m
-4305 2854 l
-S
-4304 2830 m
-4302 2806 l
-S
-4301 2782 m
-4299 2758 l
-S
-4298 2734 m
-4296 2710 l
-S
-4295 2686 m
-4294 2670 l
-4293 2662 l
-S
-4292 2638 m
-4290 2614 l
-S
-4289 2590 m
-4287 2567 l
-S
-4286 2543 m
-4284 2519 l
-S
-4283 2495 m
-4281 2471 l
-S
-4280 2447 m
-4278 2423 l
-S
-4277 2399 m
-4275 2375 l
-S
-4274 2351 m
-4272 2327 l
-S
-4270 2303 m
-4269 2279 l
-S
-4267 2255 m
-4266 2231 l
-S
-4264 2207 m
-4263 2183 l
-S
-4261 2159 m
-4260 2135 l
-S
-4258 2111 m
-4257 2087 l
-S
-4255 2063 m
-4254 2039 l
-S
-4252 2015 m
-4251 1991 l
-S
-4249 1968 m
-4248 1944 l
-S
-4246 1920 m
-4245 1896 l
-S
-4243 1872 m
-4242 1848 l
-S
-4240 1824 m
-4239 1800 l
-S
-3923 6120 m
-3921 6096 l
-S
-3920 6072 m
-3918 6048 l
-S
-3917 6024 m
-3916 6000 l
-S
-3914 5976 m
-3913 5952 l
-S
-3912 5928 m
-3910 5904 l
-S
-3909 5880 m
-3907 5856 l
-S
-3906 5832 m
-3905 5808 l
-S
-3903 5784 m
-3902 5760 l
-S
-3900 5736 m
-3899 5712 l
-S
-3898 5688 m
-3896 5664 l
-S
-3895 5640 m
-3893 5616 l
-S
-3892 5592 m
-3890 5568 l
-S
-3889 5544 m
-3888 5521 l
-S
-3886 5497 m
-3885 5473 l
-S
-3883 5449 m
-3882 5425 l
-S
-3881 5401 m
-3879 5377 l
-S
-3878 5353 m
-3876 5329 l
-S
-3875 5305 m
-3874 5281 l
-S
-3872 5257 m
-3871 5233 l
-S
-3869 5209 m
-3868 5185 l
-S
-3866 5161 m
-3865 5137 l
-S
-3864 5113 m
-3862 5089 l
-S
-3861 5065 m
-3859 5041 l
-S
-3858 5017 m
-3857 4993 l
-S
-3855 4969 m
-3854 4945 l
-S
-3852 4921 m
-3851 4897 l
-S
-3849 4873 m
-3848 4849 l
-S
-3847 4826 m
-3845 4802 l
-S
-3844 4778 m
-3842 4754 l
-S
-3841 4730 m
-3839 4706 l
-S
-3838 4682 m
-3836 4658 l
-S
-3835 4634 m
-3834 4610 l
-S
-3832 4586 m
-3831 4562 l
-S
-3829 4538 m
-3828 4514 l
-S
-3826 4490 m
-3825 4466 l
-S
-3823 4442 m
-3822 4418 l
-S
-3821 4394 m
-3819 4370 l
-S
-3818 4346 m
-3816 4322 l
-S
-3815 4298 m
-3814 4290 l
-3813 4274 l
-S
-3812 4250 m
-3810 4226 l
-S
-3809 4202 m
-3808 4178 l
-S
-3806 4155 m
-3805 4131 l
-S
-3803 4107 m
-3802 4083 l
-S
-3800 4059 m
-3799 4035 l
-S
-3797 4011 m
-3796 3987 l
-S
-3794 3963 m
-3793 3939 l
-S
-3792 3915 m
-3790 3891 l
-S
-3789 3867 m
-3787 3843 l
-S
-3786 3819 m
-3784 3795 l
-S
-3783 3771 m
-3782 3754 l
-3781 3747 l
-S
-3780 3723 m
-3778 3699 l
-S
-3777 3675 m
-3775 3651 l
-S
-3774 3627 m
-3772 3603 l
-S
-3771 3579 m
-3770 3555 l
-S
-3768 3531 m
-3767 3508 l
-S
-3765 3484 m
-3764 3460 l
-S
-3762 3436 m
-3761 3412 l
-S
-3759 3388 m
-3758 3364 l
-S
-3756 3340 m
-3755 3316 l
-S
-3753 3292 m
-3752 3268 l
-S
-3750 3244 m
-3749 3220 l
-S
-3747 3196 m
-3746 3172 l
-S
-3744 3148 m
-3743 3124 l
-S
-3741 3100 m
-3740 3076 l
-S
-3738 3052 m
-3737 3028 l
-S
-3735 3004 m
-3734 2980 l
-S
-3732 2956 m
-3731 2932 l
-S
-3730 2908 m
-3728 2885 l
-S
-3727 2861 m
-3725 2837 l
-S
-3724 2813 m
-3722 2789 l
-S
-3721 2765 m
-3719 2741 l
-S
-3718 2717 m
-3716 2693 l
-S
-3715 2669 m
-3713 2645 l
-S
-3712 2621 m
-3710 2597 l
-S
-3709 2573 m
-3707 2549 l
-S
-3706 2525 m
-3704 2501 l
-S
-3703 2477 m
-3701 2453 l
-S
-3699 2429 m
-3698 2405 l
-S
-3696 2381 m
-3695 2357 l
-S
-3693 2333 m
-3692 2309 l
-S
-3690 2286 m
-3689 2262 l
-S
-3687 2238 m
-3686 2214 l
-S
-3684 2190 m
-3683 2166 l
-S
-3681 2142 m
-3680 2118 l
-S
-3678 2094 m
-3677 2070 l
-S
-3675 2046 m
-3674 2022 l
-S
-3672 1998 m
-3671 1974 l
-S
-3669 1950 m
-3668 1926 l
-S
-3666 1902 m
-3665 1878 l
-S
-3663 1854 m
-3662 1830 l
-S
-3660 1806 m
-3658 1782 l
-S
-3343 6102 m
-3341 6078 l
-S
-3340 6054 m
-3339 6030 l
-S
-3337 6006 m
-3336 5982 l
-S
-3334 5958 m
-3333 5934 l
-S
-3332 5910 m
-3332 5910 l
-3330 5887 l
-S
-3329 5863 m
-3327 5839 l
-S
-3326 5815 m
-3325 5791 l
-S
-3323 5767 m
-3322 5743 l
-S
-3320 5719 m
-3319 5695 l
-S
-3318 5671 m
-3316 5647 l
-S
-3315 5623 m
-3313 5599 l
-S
-3312 5575 m
-3311 5551 l
-S
-3309 5527 m
-3308 5503 l
-S
-3306 5479 m
-3305 5455 l
-S
-3304 5431 m
-3302 5407 l
-S
-3301 5383 m
-3300 5374 l
-3299 5359 l
-S
-3298 5335 m
-3296 5311 l
-S
-3295 5287 m
-3294 5263 l
-S
-3292 5239 m
-3291 5215 l
-S
-3289 5191 m
-3288 5168 l
-S
-3287 5144 m
-3285 5120 l
-S
-3284 5096 m
-3282 5072 l
-S
-3281 5048 m
-3279 5024 l
-S
-3278 5000 m
-3277 4976 l
-S
-3275 4952 m
-3274 4928 l
-S
-3272 4904 m
-3271 4880 l
-S
-3269 4856 m
-3268 4838 l
-3268 4832 l
-S
-3267 4808 m
-3265 4784 l
-S
-3264 4760 m
-3262 4736 l
-S
-3261 4712 m
-3259 4688 l
-S
-3258 4664 m
-3256 4640 l
-S
-3255 4616 m
-3254 4592 l
-S
-3252 4568 m
-3251 4544 l
-S
-3249 4520 m
-3248 4497 l
-S
-3246 4473 m
-3245 4449 l
-S
-3244 4425 m
-3242 4401 l
-S
-3241 4377 m
-3239 4353 l
-S
-3238 4329 m
-3236 4305 l
-S
-3235 4281 m
-3233 4257 l
-S
-3232 4233 m
-3231 4209 l
-S
-3229 4185 m
-3228 4161 l
-S
-3226 4137 m
-3225 4113 l
-S
-3223 4089 m
-3222 4065 l
-S
-3220 4041 m
-3219 4017 l
-S
-3217 3993 m
-3216 3969 l
-S
-3214 3945 m
-3213 3921 l
-S
-3212 3897 m
-3210 3873 l
-S
-3209 3849 m
-3207 3826 l
-S
-3206 3802 m
-3204 3778 l
-S
-3203 3754 m
-3201 3730 l
-S
-3200 3706 m
-3198 3682 l
-S
-3197 3658 m
-3195 3634 l
-S
-3194 3610 m
-3192 3586 l
-S
-3191 3562 m
-3190 3538 l
-S
-3188 3514 m
-3187 3490 l
-S
-3185 3466 m
-3184 3442 l
-S
-3182 3418 m
-3181 3394 l
-S
-3179 3370 m
-3178 3346 l
-S
-3176 3322 m
-3175 3298 l
-S
-3173 3274 m
-3172 3250 l
-S
-3170 3226 m
-3169 3203 l
-S
-3167 3179 m
-3166 3155 l
-S
-3164 3131 m
-3163 3107 l
-S
-3161 3083 m
-3160 3059 l
-S
-3158 3035 m
-3157 3011 l
-S
-3155 2987 m
-3154 2963 l
-S
-3152 2939 m
-3151 2915 l
-S
-3149 2891 m
-3148 2867 l
-S
-3146 2843 m
-3145 2819 l
-S
-3143 2795 m
-3142 2771 l
-S
-3141 2747 m
-3139 2723 l
-S
-3138 2699 m
-3137 2694 l
-3136 2675 l
-S
-3135 2651 m
-3133 2627 l
-S
-3131 2603 m
-3130 2580 l
-S
-3128 2556 m
-3127 2532 l
-S
-3125 2508 m
-3124 2484 l
-S
-3122 2460 m
-3121 2436 l
-S
-3119 2412 m
-3118 2388 l
-S
-3116 2364 m
-3115 2340 l
-S
-3113 2316 m
-3112 2292 l
-S
-3110 2268 m
-3109 2244 l
-S
-3107 2220 m
-3106 2196 l
-S
-3104 2172 m
-3103 2158 l
-3103 2148 l
-S
-3101 2124 m
-3100 2100 l
-S
-3098 2076 m
-3097 2052 l
-S
-3095 2028 m
-3094 2004 l
-S
-3092 1981 m
-3091 1957 l
-S
-3089 1933 m
-3088 1909 l
-S
-3086 1885 m
-3084 1861 l
-S
-3083 1837 m
-3081 1813 l
-S
-3080 1789 m
-3079 1777 l
-S
-2765 6121 m
-2764 6109 l
-S
-2763 6085 m
-2761 6061 l
-S
-2760 6037 m
-2759 6013 l
-S
-2757 5989 m
-2756 5965 l
-S
-2755 5941 m
-2753 5921 l
-2753 5917 l
-S
-2752 5893 m
-2750 5869 l
-S
-2749 5845 m
-2748 5821 l
-S
-2746 5797 m
-2745 5773 l
-S
-2743 5749 m
-2742 5725 l
-S
-2741 5701 m
-2739 5677 l
-S
-2738 5653 m
-2736 5629 l
-S
-2735 5605 m
-2733 5581 l
-S
-2732 5557 m
-2731 5534 l
-S
-2729 5510 m
-2728 5486 l
-S
-2726 5462 m
-2725 5438 l
-S
-2724 5414 m
-2722 5390 l
-S
-2721 5366 m
-2719 5342 l
-S
-2718 5318 m
-2717 5294 l
-S
-2715 5270 m
-2714 5246 l
-S
-2712 5222 m
-2711 5198 l
-S
-2709 5174 m
-2708 5150 l
-S
-2707 5126 m
-2705 5102 l
-S
-2704 5078 m
-2702 5054 l
-S
-2701 5030 m
-2699 5006 l
-S
-2698 4982 m
-2697 4958 l
-S
-2695 4934 m
-2694 4910 l
-S
-2692 4886 m
-2691 4862 l
-S
-2689 4839 m
-2688 4815 l
-S
-2687 4791 m
-2685 4767 l
-S
-2684 4743 m
-2682 4719 l
-S
-2681 4695 m
-2679 4671 l
-S
-2678 4647 m
-2677 4623 l
-S
-2675 4599 m
-2674 4575 l
-S
-2672 4551 m
-2671 4527 l
-S
-2669 4503 m
-2668 4479 l
-S
-2666 4455 m
-2665 4431 l
-S
-2664 4407 m
-2662 4383 l
-S
-2661 4359 m
-2659 4335 l
-S
-2658 4311 m
-2656 4287 l
-S
-2655 4263 m
-2653 4239 l
-S
-2652 4215 m
-2651 4191 l
-S
-2649 4168 m
-2648 4144 l
-S
-2646 4120 m
-2645 4096 l
-S
-2643 4072 m
-2642 4048 l
-S
-2640 4024 m
-2639 4000 l
-S
-2637 3976 m
-2636 3952 l
-S
-2634 3928 m
-2633 3904 l
-S
-2632 3880 m
-2630 3856 l
-S
-2629 3832 m
-2627 3808 l
-S
-2626 3784 m
-2625 3778 l
-2624 3760 l
-S
-2623 3736 m
-2621 3712 l
-S
-2620 3688 m
-2618 3664 l
-S
-2617 3640 m
-2615 3616 l
-S
-2614 3592 m
-2612 3568 l
-S
-2611 3544 m
-2610 3521 l
-S
-2608 3497 m
-2607 3473 l
-S
-2605 3449 m
-2604 3425 l
-S
-2602 3401 m
-2601 3377 l
-S
-2599 3353 m
-2598 3329 l
-S
-2596 3305 m
-2595 3281 l
-S
-2593 3257 m
-2592 3242 l
-2592 3233 l
-S
-2590 3209 m
-2589 3185 l
-S
-2587 3161 m
-2586 3137 l
-S
-2584 3113 m
-2583 3089 l
-S
-2581 3065 m
-2580 3041 l
-S
-2578 3017 m
-2577 2993 l
-S
-2575 2969 m
-2574 2945 l
-S
-2572 2921 m
-2571 2898 l
-S
-2569 2874 m
-2568 2850 l
-S
-2566 2826 m
-2565 2802 l
-S
-2563 2778 m
-2562 2754 l
-S
-2560 2730 m
-2559 2706 l
-2559 2706 l
-S
-2557 2682 m
-2556 2658 l
-S
-2554 2634 m
-2553 2610 l
-S
-2551 2586 m
-2550 2562 l
-S
-2548 2538 m
-2547 2514 l
-S
-2545 2490 m
-2544 2466 l
-S
-2542 2442 m
-2541 2418 l
-S
-2539 2394 m
-2538 2370 l
-S
-2536 2346 m
-2535 2322 l
-S
-2533 2299 m
-2532 2275 l
-S
-2530 2251 m
-2529 2227 l
-S
-2527 2203 m
-2526 2179 l
-S
-2524 2155 m
-2523 2131 l
-S
-2521 2107 m
-2520 2083 l
-S
-2518 2059 m
-2517 2035 l
-S
-2515 2011 m
-2514 1987 l
-S
-2512 1963 m
-2511 1939 l
-S
-2509 1915 m
-2507 1891 l
-S
-2506 1867 m
-2504 1843 l
-S
-2503 1819 m
-2501 1795 l
-S
-2186 6115 m
-2184 6091 l
-S
-2183 6067 m
-2182 6043 l
-S
-2180 6019 m
-2179 5995 l
-S
-2177 5971 m
-2176 5947 l
-S
-2175 5923 m
-2173 5900 l
-S
-2172 5876 m
-2170 5852 l
-S
-2169 5828 m
-2168 5804 l
-S
-2166 5780 m
-2165 5756 l
-S
-2163 5732 m
-2162 5708 l
-S
-2161 5684 m
-2159 5660 l
-S
-2158 5636 m
-2156 5612 l
-S
-2155 5588 m
-2154 5564 l
-S
-2152 5540 m
-2151 5516 l
-S
-2149 5492 m
-2148 5468 l
-S
-2147 5444 m
-2145 5420 l
-S
-2144 5396 m
-2142 5372 l
-S
-2141 5348 m
-2139 5324 l
-S
-2138 5300 m
-2137 5276 l
-S
-2135 5252 m
-2134 5228 l
-S
-2132 5205 m
-2131 5181 l
-S
-2129 5157 m
-2128 5133 l
-S
-2127 5109 m
-2125 5085 l
-S
-2124 5061 m
-2122 5037 l
-S
-2121 5013 m
-2120 4989 l
-S
-2118 4965 m
-2117 4941 l
-S
-2115 4917 m
-2114 4893 l
-S
-2112 4869 m
-2112 4861 l
-2111 4845 l
-S
-2110 4821 m
-2108 4797 l
-S
-2107 4773 m
-2105 4749 l
-S
-2104 4725 m
-2102 4701 l
-S
-2101 4677 m
-2099 4653 l
-S
-2098 4629 m
-2097 4605 l
-S
-2095 4581 m
-2094 4557 l
-S
-2092 4533 m
-2091 4510 l
-S
-2089 4486 m
-2088 4462 l
-S
-2086 4438 m
-2085 4414 l
-S
-2084 4390 m
-2082 4366 l
-S
-2081 4342 m
-2080 4325 l
-2079 4318 l
-S
-2078 4294 m
-2076 4270 l
-S
-2075 4246 m
-2073 4222 l
-S
-2072 4198 m
-2071 4174 l
-S
-2069 4150 m
-2068 4126 l
-S
-2066 4102 m
-2065 4078 l
-S
-2063 4054 m
-2062 4030 l
-S
-2060 4006 m
-2059 3982 l
-S
-2057 3958 m
-2056 3934 l
-S
-2054 3910 m
-2053 3886 l
-S
-2052 3863 m
-2050 3839 l
-S
-2049 3815 m
-2047 3791 l
-S
-2046 3767 m
-2044 3743 l
-S
-2043 3719 m
-2041 3695 l
-S
-2040 3671 m
-2038 3647 l
-S
-2037 3623 m
-2035 3599 l
-S
-2034 3575 m
-2032 3551 l
-S
-2031 3527 m
-2030 3503 l
-S
-2028 3479 m
-2027 3455 l
-S
-2025 3431 m
-2024 3407 l
-S
-2022 3383 m
-2021 3359 l
-S
-2019 3335 m
-2018 3311 l
-S
-2016 3287 m
-2015 3263 l
-S
-2013 3239 m
-2012 3216 l
-S
-2010 3192 m
-2009 3168 l
-S
-2007 3144 m
-2006 3120 l
-S
-2004 3096 m
-2003 3072 l
-S
-2001 3048 m
-2000 3024 l
-S
-1998 3000 m
-1997 2976 l
-S
-1995 2952 m
-1994 2928 l
-S
-1992 2904 m
-1991 2880 l
-S
-1989 2856 m
-1988 2832 l
-S
-1986 2808 m
-1985 2784 l
-S
-1983 2760 m
-1982 2736 l
-S
-1980 2712 m
-1979 2688 l
-S
-1977 2664 m
-1976 2640 l
-S
-1974 2617 m
-1973 2593 l
-S
-1971 2569 m
-1970 2545 l
-S
-1968 2521 m
-1967 2497 l
-S
-1965 2473 m
-1964 2449 l
-S
-1962 2425 m
-1961 2401 l
-S
-1959 2377 m
-1958 2353 l
-S
-1956 2329 m
-1955 2305 l
-S
-1953 2281 m
-1952 2257 l
-S
-1950 2233 m
-1949 2209 l
-S
-1947 2185 m
-1947 2182 l
-1946 2161 l
-S
-1944 2137 m
-1943 2113 l
-S
-1941 2089 m
-1940 2065 l
-S
-1938 2041 m
-1937 2018 l
-S
-1935 1994 m
-1933 1970 l
-S
-1932 1946 m
-1930 1922 l
-S
-1929 1898 m
-1927 1874 l
-S
-1926 1850 m
-1924 1826 l
-S
-1923 1802 m
-1921 1778 l
-S
-1606 6098 m
-1604 6074 l
-S
-1603 6050 m
-1602 6026 l
-S
-1600 6002 m
-1599 5978 l
-S
-1598 5954 m
-1597 5944 l
-1596 5930 l
-S
-1595 5906 m
-1593 5882 l
-S
-1592 5858 m
-1591 5834 l
-S
-1589 5810 m
-1588 5786 l
-S
-1586 5762 m
-1585 5738 l
-S
-1583 5714 m
-1582 5690 l
-S
-1581 5666 m
-1579 5642 l
-S
-1578 5618 m
-1576 5594 l
-S
-1575 5571 m
-1574 5547 l
-S
-1572 5523 m
-1571 5499 l
-S
-1569 5475 m
-1568 5451 l
-S
-1567 5427 m
-1566 5408 l
-1565 5403 l
-S
-1564 5379 m
-1562 5355 l
-S
-1561 5331 m
-1560 5307 l
-S
-1558 5283 m
-1557 5259 l
-S
-1555 5235 m
-1554 5211 l
-S
-1552 5187 m
-1551 5163 l
-S
-1550 5139 m
-1548 5115 l
-S
-1547 5091 m
-1545 5067 l
-S
-1544 5043 m
-1542 5019 l
-S
-1541 4995 m
-1540 4971 l
-S
-1538 4947 m
-1537 4923 l
-S
-1535 4899 m
-1534 4876 l
-S
-1532 4852 m
-1531 4828 l
-S
-1530 4804 m
-1528 4780 l
-S
-1527 4756 m
-1525 4732 l
-S
-1524 4708 m
-1522 4684 l
-S
-1521 4660 m
-1519 4636 l
-S
-1518 4612 m
-1517 4588 l
-S
-1515 4564 m
-1514 4540 l
-S
-1512 4516 m
-1511 4492 l
-S
-1509 4468 m
-1508 4444 l
-S
-1507 4420 m
-1505 4396 l
-S
-1504 4372 m
-1502 4348 l
-S
-1501 4324 m
-1499 4300 l
-S
-1498 4276 m
-1496 4252 l
-S
-1495 4228 m
-1493 4205 l
-S
-1492 4181 m
-1491 4157 l
-S
-1489 4133 m
-1488 4109 l
-S
-1486 4085 m
-1485 4061 l
-S
-1483 4037 m
-1482 4013 l
-S
-1480 3989 m
-1479 3965 l
-S
-1477 3941 m
-1476 3917 l
-S
-1475 3893 m
-1473 3869 l
-S
-1472 3845 m
-1470 3821 l
-S
-1469 3797 m
-1467 3773 l
-S
-1466 3749 m
-1464 3725 l
-S
-1463 3701 m
-1461 3677 l
-S
-1460 3653 m
-1458 3629 l
-S
-1457 3605 m
-1455 3581 l
-S
-1454 3558 m
-1452 3534 l
-S
-1451 3510 m
-1449 3486 l
-S
-1448 3462 m
-1447 3438 l
-S
-1445 3414 m
-1444 3390 l
-S
-1442 3366 m
-1441 3342 l
-S
-1439 3318 m
-1438 3294 l
-S
-1436 3270 m
-1436 3266 l
-1435 3246 l
-S
-1433 3222 m
-1432 3198 l
-S
-1430 3174 m
-1429 3150 l
-S
-1427 3126 m
-1426 3102 l
-S
-1424 3078 m
-1423 3054 l
-S
-1421 3030 m
-1420 3006 l
-S
-1418 2982 m
-1417 2958 l
-S
-1415 2935 m
-1414 2911 l
-S
-1412 2887 m
-1411 2863 l
-S
-1409 2839 m
-1408 2815 l
-S
-1406 2791 m
-1405 2767 l
-S
-1403 2743 m
-1403 2730 l
-1402 2719 l
-S
-1400 2695 m
-1399 2671 l
-S
-1397 2647 m
-1396 2623 l
-S
-1394 2599 m
-1393 2575 l
-S
-1391 2551 m
-1390 2527 l
-S
-1388 2503 m
-1387 2479 l
-S
-1385 2455 m
-1384 2431 l
-S
-1382 2407 m
-1381 2383 l
-S
-1379 2359 m
-1378 2336 l
-S
-1376 2312 m
-1375 2288 l
-S
-1373 2264 m
-1372 2240 l
-S
-1370 2216 m
-1369 2194 l
-1369 2192 l
-S
-1367 2168 m
-1366 2144 l
-S
-1364 2120 m
-1363 2096 l
-S
-1361 2072 m
-1360 2048 l
-S
-1358 2024 m
-1356 2000 l
-S
-1355 1976 m
-1353 1952 l
-S
-1352 1928 m
-1350 1904 l
-S
-1349 1880 m
-1347 1856 l
-S
-1346 1832 m
-1344 1808 l
-S
-1343 1784 m
-1342 1777 l
-S
-1028 6121 m
-1027 6104 l
-S
-1026 6080 m
-1025 6056 l
-S
-1023 6032 m
-1022 6008 l
-S
-1020 5984 m
-1019 5960 l
-S
-1018 5937 m
-1016 5913 l
-S
-1015 5889 m
-1013 5865 l
-S
-1012 5841 m
-1011 5817 l
-S
-1009 5793 m
-1008 5769 l
-S
-1006 5745 m
-1005 5721 l
-S
-1004 5697 m
-1002 5673 l
-S
-1001 5649 m
-999 5625 l
-S
-998 5601 m
-997 5577 l
-S
-995 5553 m
-994 5529 l
-S
-992 5505 m
-991 5481 l
-S
-990 5457 m
-988 5433 l
-S
-987 5409 m
-985 5385 l
-S
-984 5361 m
-982 5337 l
-S
-981 5313 m
-980 5289 l
-S
-978 5265 m
-977 5242 l
-S
-975 5218 m
-974 5194 l
-S
-972 5170 m
-971 5146 l
-S
-970 5122 m
-968 5098 l
-S
-967 5074 m
-965 5050 l
-S
-964 5026 m
-962 5002 l
-S
-961 4978 m
-960 4954 l
-S
-958 4930 m
-957 4906 l
-S
-955 4882 m
-954 4858 l
-S
-952 4834 m
-951 4810 l
-S
-950 4786 m
-948 4762 l
-S
-947 4738 m
-945 4714 l
-S
-944 4690 m
-942 4666 l
-S
-941 4642 m
-940 4618 l
-S
-938 4594 m
-937 4571 l
-S
-935 4547 m
-934 4523 l
-S
-932 4499 m
-931 4475 l
-S
-929 4451 m
-928 4427 l
-S
-927 4403 m
-925 4379 l
-S
-924 4355 m
-923 4348 l
-922 4331 l
-S
-921 4307 m
-919 4283 l
-S
-918 4259 m
-916 4235 l
-S
-915 4211 m
-913 4187 l
-S
-912 4163 m
-911 4139 l
-S
-909 4115 m
-908 4091 l
-S
-906 4067 m
-905 4043 l
-S
-903 4019 m
-902 3995 l
-S
-900 3971 m
-899 3947 l
-S
-897 3923 m
-896 3900 l
-S
-895 3876 m
-893 3852 l
-S
-892 3828 m
-891 3813 l
-890 3804 l
-S
-889 3780 m
-887 3756 l
-S
-886 3732 m
-884 3708 l
-S
-883 3684 m
-881 3660 l
-S
-880 3636 m
-878 3612 l
-S
-877 3588 m
-875 3564 l
-S
-874 3540 m
-872 3516 l
-S
-871 3492 m
-869 3468 l
-S
-868 3444 m
-867 3420 l
-S
-865 3396 m
-864 3372 l
-S
-862 3348 m
-861 3324 l
-S
-859 3300 m
-858 3278 l
-858 3277 l
-S
-856 3253 m
-855 3229 l
-S
-853 3205 m
-852 3181 l
-S
-850 3157 m
-849 3133 l
-S
-847 3109 m
-846 3085 l
-S
-844 3061 m
-843 3037 l
-S
-841 3013 m
-840 2989 l
-S
-838 2965 m
-837 2941 l
-S
-835 2917 m
-834 2893 l
-S
-832 2869 m
-831 2845 l
-S
-829 2821 m
-828 2797 l
-S
-826 2773 m
-825 2749 l
-S
-823 2725 m
-822 2701 l
-S
-820 2677 m
-819 2654 l
-S
-817 2630 m
-816 2606 l
-S
-814 2582 m
-813 2558 l
-S
-811 2534 m
-810 2510 l
-S
-808 2486 m
-807 2462 l
-S
-805 2438 m
-804 2414 l
-S
-802 2390 m
-801 2366 l
-S
-799 2342 m
-798 2318 l
-S
-796 2294 m
-795 2270 l
-S
-793 2246 m
-792 2222 l
-S
-790 2198 m
-789 2174 l
-S
-787 2150 m
-786 2126 l
-S
-784 2102 m
-782 2078 l
-S
-781 2055 m
-779 2031 l
-S
-778 2007 m
-776 1983 l
-S
-775 1959 m
-773 1935 l
-S
-772 1911 m
-770 1887 l
-S
-769 1863 m
-767 1839 l
-S
-766 1815 m
-764 1791 l
-S
-4877 6113 m
-4847 6113 l
-S
-4877 5988 m
-4847 5988 l
-S
-4877 5862 m
-4847 5863 l
-S
-4877 5737 m
-4847 5738 l
-S
-4877 5486 m
-4847 5487 l
-S
-4877 5361 m
-4847 5362 l
-S
-4877 5236 m
-4847 5236 l
-S
-4877 5110 m
-4847 5111 l
-S
-4877 4860 m
-4847 4860 l
-S
-4877 4734 m
-4847 4735 l
-S
-4877 4609 m
-4847 4610 l
-S
-4877 4484 m
-4847 4484 l
-S
-4877 4233 m
-4847 4234 l
-S
-4877 4108 m
-4847 4109 l
-S
-4877 3983 m
-4847 3983 l
-S
-4877 3857 m
-4847 3858 l
-S
-4877 3607 m
-4847 3607 l
-S
-4877 3481 m
-4847 3482 l
-S
-4877 3356 m
-4847 3357 l
-S
-4877 3231 m
-4847 3231 l
-S
-4877 2980 m
-4847 2981 l
-S
-4877 2855 m
-4847 2855 l
-S
-4877 2729 m
-4847 2730 l
-S
-4877 2604 m
-4847 2605 l
-S
-4877 2353 m
-4847 2354 l
-S
-4877 2228 m
-4847 2229 l
-S
-4877 2103 m
-4847 2103 l
-S
-4877 1977 m
-4847 1978 l
-S
-4671 1777 m
-4673 1808 l
-S
-4527 1777 m
-4529 1808 l
-S
-4382 1777 m
-4384 1808 l
-S
-4092 1777 m
-4094 1808 l
-S
-3948 1777 m
-3950 1808 l
-S
-3803 1777 m
-3805 1808 l
-S
-3513 1777 m
-3515 1808 l
-S
-3369 1777 m
-3371 1808 l
-S
-3224 1777 m
-3226 1808 l
-S
-2934 1777 m
-2936 1808 l
-S
-2790 1777 m
-2792 1808 l
-S
-2645 1777 m
-2647 1808 l
-S
-2355 1777 m
-2357 1808 l
-S
-2211 1777 m
-2213 1808 l
-S
-2066 1777 m
-2068 1808 l
-S
-1777 1777 m
-1778 1808 l
-S
-1632 1777 m
-1634 1808 l
-S
-1487 1777 m
-1489 1808 l
-S
-1198 1777 m
-1199 1808 l
-S
-1053 1777 m
-1055 1808 l
-S
-908 1777 m
-910 1808 l
-S
-619 1777 m
-621 1808 l
-S
-533 6071 m
-564 6071 l
-S
-533 5946 m
-564 5946 l
-S
-533 5821 m
-564 5821 l
-S
-533 5571 m
-564 5571 l
-S
-533 5446 m
-564 5446 l
-S
-533 5321 m
-564 5321 l
-S
-533 5196 m
-564 5195 l
-S
-533 4946 m
-564 4945 l
-S
-533 4821 m
-564 4820 l
-S
-533 4696 m
-564 4695 l
-S
-533 4571 m
-564 4570 l
-S
-533 4321 m
-564 4320 l
-S
-533 4195 m
-564 4195 l
-S
-533 4070 m
-564 4070 l
-S
-533 3945 m
-564 3945 l
-S
-533 3695 m
-564 3695 l
-S
-533 3570 m
-564 3569 l
-S
-533 3445 m
-564 3444 l
-S
-533 3320 m
-564 3319 l
-S
-533 3070 m
-564 3069 l
-S
-533 2945 m
-564 2944 l
-S
-533 2820 m
-564 2819 l
-S
-533 2695 m
-564 2694 l
-S
-533 2444 m
-564 2444 l
-S
-533 2319 m
-564 2319 l
-S
-533 2194 m
-564 2194 l
-S
-533 2069 m
-564 2068 l
-S
-533 1819 m
-564 1818 l
-S
-4791 6121 m
-4789 6091 l
-S
-4646 6121 m
-4645 6091 l
-S
-4357 6121 m
-4355 6091 l
-S
-4212 6121 m
-4210 6091 l
-S
-4068 6121 m
-4066 6091 l
-S
-3778 6121 m
-3776 6091 l
-S
-3633 6121 m
-3632 6091 l
-S
-3489 6121 m
-3487 6091 l
-S
-3199 6121 m
-3197 6091 l
-S
-3054 6121 m
-3053 6091 l
-S
-2910 6121 m
-2908 6091 l
-S
-2620 6121 m
-2619 6091 l
-S
-2476 6121 m
-2474 6091 l
-S
-2331 6121 m
-2329 6091 l
-S
-2041 6121 m
-2040 6091 l
-S
-1897 6121 m
-1895 6091 l
-S
-1752 6121 m
-1750 6091 l
-S
-1463 6121 m
-1461 6091 l
-S
-1318 6121 m
-1316 6091 l
-S
-1173 6121 m
-1171 6091 l
-S
-884 6121 m
-882 6091 l
-S
-739 6121 m
-737 6091 l
-S
-594 6121 m
-592 6091 l
-S
-4877 1777 m
-4877 2088 l
-4877 2398 l
-4877 2708 l
-4877 3018 l
-4877 3329 l
-4877 3639 l
-4877 3949 l
-4877 4260 l
-4877 4570 l
-4877 4880 l
-4877 5190 l
-4877 5501 l
-4877 5811 l
-4877 6121 l
-S
-4877 6121 m
-4567 6121 l
-4256 6121 l
-3946 6121 l
-3636 6121 l
-3326 6121 l
-3015 6121 l
-2705 6121 l
-2395 6121 l
-2085 6121 l
-1774 6121 l
-1464 6121 l
-1154 6121 l
-843 6121 l
-533 6121 l
-S
-533 6121 m
-533 5811 l
-533 5501 l
-533 5190 l
-533 4880 l
-533 4570 l
-533 4260 l
-533 3949 l
-533 3639 l
-533 3329 l
-533 3018 l
-533 2708 l
-533 2398 l
-533 2088 l
-533 1777 l
-S
-533 1777 m
-843 1777 l
-1154 1777 l
-1464 1777 l
-1774 1777 l
-2085 1777 l
-2395 1777 l
-2705 1777 l
-3015 1777 l
-3326 1777 l
-3636 1777 l
-3946 1777 l
-4256 1777 l
-4567 1777 l
-4877 1777 l
-S
-1 g
-Y
-5029.5 2159.2 m
-4920 2159 l
-4920 2798 l
-5029 2798 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 2185 m
-4935 2227 l
-4966 2204 l
-4966 2216 l
-4969 2223 l
-4973 2227 l
-4984 2231 l
-4992 2231 l
-5003 2227 l
-5011 2219 l
-5014 2208 l
-5014 2197 l
-5011 2185 l
-5007 2182 l
-4999 2178 l
-S
-4935 2257 m
-5014 2257 l
-S
-4977 2257 m
-4966 2268 l
-4962 2276 l
-4962 2287 l
-4966 2294 l
-4977 2298 l
-5014 2298 l
-S
-4954 2328 m
-4951 2328 l
-4943 2332 l
-4939 2336 l
-4935 2343 l
-4935 2358 l
-4939 2366 l
-4943 2370 l
-4951 2373 l
-4958 2373 l
-4966 2370 l
-4977 2362 l
-5014 2325 l
-5014 2377 l
-S
-4935 2422 m
-4939 2411 l
-4951 2403 l
-4969 2400 l
-4981 2400 l
-4999 2403 l
-5011 2411 l
-5014 2422 l
-5014 2430 l
-5011 2441 l
-4999 2449 l
-4981 2452 l
-4969 2452 l
-4951 2449 l
-4939 2441 l
-4935 2430 l
-4935 2422 l
-S
-4962 2479 m
-5014 2479 l
-S
-4977 2479 m
-4966 2490 l
-4962 2497 l
-4962 2509 l
-4966 2516 l
-4977 2520 l
-5014 2520 l
-S
-4977 2520 m
-4966 2531 l
-4962 2539 l
-4962 2550 l
-4966 2558 l
-4977 2561 l
-5014 2561 l
-S
-4935 2610 m
-4939 2599 l
-4951 2591 l
-4969 2588 l
-4981 2588 l
-4999 2591 l
-5011 2599 l
-5014 2610 l
-5014 2618 l
-5011 2629 l
-4999 2637 l
-4981 2640 l
-4969 2640 l
-4951 2637 l
-4939 2629 l
-4935 2618 l
-4935 2610 l
-S
-4935 2685 m
-4939 2674 l
-4951 2667 l
-4969 2663 l
-4981 2663 l
-4999 2667 l
-5011 2674 l
-5014 2685 l
-5014 2693 l
-5011 2704 l
-4999 2712 l
-4981 2716 l
-4969 2716 l
-4951 2712 l
-4939 2704 l
-4935 2693 l
-4935 2685 l
-S
-4973 2779 m
-4966 2776 l
-4962 2764 l
-4962 2753 l
-4966 2742 l
-4973 2738 l
-4981 2742 l
-4984 2749 l
-4988 2768 l
-4992 2776 l
-4999 2779 l
-5003 2779 l
-5011 2776 l
-5014 2764 l
-5014 2753 l
-5011 2742 l
-5003 2738 l
-S
-1 g
-Y
-5029.5 3617.3 m
-4920 3617 l
-4920 3847 l
-5029 3847 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4935 3674 m
-4988 3636 l
-4988 3692 l
-S
-4935 3674 m
-5014 3674 l
-S
-4935 3734 m
-4939 3723 l
-4951 3715 l
-4969 3711 l
-4981 3711 l
-4999 3715 l
-5011 3723 l
-5014 3734 l
-5014 3741 l
-5011 3753 l
-4999 3760 l
-4981 3764 l
-4969 3764 l
-4951 3760 l
-4939 3753 l
-4935 3741 l
-4935 3734 l
-S
-4973 3828 m
-4966 3824 l
-4962 3813 l
-4962 3801 l
-4966 3790 l
-4973 3786 l
-4981 3790 l
-4984 3798 l
-4988 3817 l
-4992 3824 l
-4999 3828 l
-5003 3828 l
-5011 3824 l
-5014 3813 l
-5014 3801 l
-5011 3790 l
-5003 3786 l
-S
-1 g
-Y
-5029.5 4870.5 m
-4920 4870 l
-4920 5100 l
-5029 5100 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4954 4893 m
-4951 4893 l
-4943 4897 l
-4939 4901 l
-4935 4908 l
-4935 4923 l
-4939 4931 l
-4943 4934 l
-4951 4938 l
-4958 4938 l
-4966 4934 l
-4977 4927 l
-5014 4889 l
-5014 4942 l
-S
-4935 4987 m
-4939 4976 l
-4951 4968 l
-4969 4964 l
-4981 4964 l
-4999 4968 l
-5011 4976 l
-5014 4987 l
-5014 4995 l
-5011 5006 l
-4999 5013 l
-4981 5017 l
-4969 5017 l
-4951 5013 l
-4939 5006 l
-4935 4995 l
-4935 4987 l
-S
-4973 5081 m
-4966 5077 l
-4962 5066 l
-4962 5055 l
-4966 5043 l
-4973 5040 l
-4981 5043 l
-4984 5051 l
-4988 5070 l
-4992 5077 l
-4999 5081 l
-5003 5081 l
-5011 5077 l
-5014 5066 l
-5014 5055 l
-5011 5043 l
-5003 5040 l
-S
-1 g
-Y
-2562.2 1200.1 m
-2453 1200 l
-2453 1741 l
-2562 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2468 1256 m
-2521 1219 l
-2521 1275 l
-S
-2468 1256 m
-2547 1256 l
-S
-2483 1305 m
-2480 1313 l
-2468 1324 l
-2547 1324 l
-S
-2495 1377 m
-2498 1373 l
-2502 1377 l
-2498 1381 l
-2495 1377 l
-S
-2540 1377 m
-2543 1373 l
-2547 1377 l
-2543 1381 l
-2540 1377 l
-S
-2468 1414 m
-2468 1456 l
-2498 1433 l
-2498 1444 l
-2502 1452 l
-2506 1456 l
-2517 1459 l
-2525 1459 l
-2536 1456 l
-2543 1448 l
-2547 1437 l
-2547 1426 l
-2543 1414 l
-2540 1411 l
-2532 1407 l
-S
-2468 1505 m
-2472 1493 l
-2483 1486 l
-2502 1482 l
-2513 1482 l
-2532 1486 l
-2543 1493 l
-2547 1505 l
-2547 1512 l
-2543 1523 l
-2532 1531 l
-2513 1535 l
-2502 1535 l
-2483 1531 l
-2472 1523 l
-2468 1512 l
-2468 1505 l
-S
-2495 1565 m
-2498 1561 l
-2502 1565 l
-2498 1568 l
-2495 1565 l
-S
-2540 1565 m
-2543 1561 l
-2547 1565 l
-2543 1568 l
-2540 1565 l
-S
-2468 1617 m
-2472 1606 l
-2483 1599 l
-2502 1595 l
-2513 1595 l
-2532 1599 l
-2543 1606 l
-2547 1617 l
-2547 1625 l
-2543 1636 l
-2532 1644 l
-2513 1647 l
-2502 1647 l
-2483 1644 l
-2472 1636 l
-2468 1625 l
-2468 1617 l
-S
-2468 1693 m
-2472 1681 l
-2483 1674 l
-2502 1670 l
-2513 1670 l
-2532 1674 l
-2543 1681 l
-2547 1693 l
-2547 1700 l
-2543 1711 l
-2532 1719 l
-2513 1723 l
-2502 1723 l
-2483 1719 l
-2472 1711 l
-2468 1700 l
-2468 1693 l
-S
-1 g
-Y
-3141.2 1388.1 m
-3032 1388 l
-3032 1741 l
-3141 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3066 1411 m
-3062 1411 l
-3055 1414 l
-3051 1418 l
-3047 1426 l
-3047 1441 l
-3051 1448 l
-3055 1452 l
-3062 1456 l
-3070 1456 l
-3077 1452 l
-3089 1444 l
-3126 1407 l
-3126 1459 l
-S
-3074 1531 m
-3085 1527 l
-3092 1520 l
-3096 1508 l
-3096 1505 l
-3092 1493 l
-3085 1486 l
-3074 1482 l
-3070 1482 l
-3059 1486 l
-3051 1493 l
-3047 1505 l
-3047 1508 l
-3051 1520 l
-3059 1527 l
-3074 1531 l
-3092 1531 l
-3111 1527 l
-3122 1520 l
-3126 1508 l
-3126 1501 l
-3122 1490 l
-3115 1486 l
-S
-3074 1565 m
-3077 1561 l
-3081 1565 l
-3077 1568 l
-3074 1565 l
-S
-3119 1565 m
-3122 1561 l
-3126 1565 l
-3122 1568 l
-3119 1565 l
-S
-3047 1617 m
-3051 1606 l
-3062 1599 l
-3081 1595 l
-3092 1595 l
-3111 1599 l
-3122 1606 l
-3126 1617 l
-3126 1625 l
-3122 1636 l
-3111 1644 l
-3092 1647 l
-3081 1647 l
-3062 1644 l
-3051 1636 l
-3047 1625 l
-3047 1617 l
-S
-3047 1693 m
-3051 1681 l
-3062 1674 l
-3081 1670 l
-3092 1670 l
-3111 1674 l
-3122 1681 l
-3126 1693 l
-3126 1700 l
-3122 1711 l
-3111 1719 l
-3092 1723 l
-3081 1723 l
-3062 1719 l
-3051 1711 l
-3047 1700 l
-3047 1693 l
-S
-1 g
-Y
-3720.2 1388.1 m
-3611 1388 l
-3611 1741 l
-3720 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3645 1411 m
-3641 1411 l
-3634 1414 l
-3630 1418 l
-3626 1426 l
-3626 1441 l
-3630 1448 l
-3634 1452 l
-3641 1456 l
-3649 1456 l
-3656 1452 l
-3668 1444 l
-3705 1407 l
-3705 1459 l
-S
-3626 1501 m
-3630 1490 l
-3637 1486 l
-3645 1486 l
-3653 1490 l
-3656 1497 l
-3660 1512 l
-3664 1523 l
-3671 1531 l
-3679 1535 l
-3690 1535 l
-3698 1531 l
-3701 1527 l
-3705 1516 l
-3705 1501 l
-3701 1490 l
-3698 1486 l
-3690 1482 l
-3679 1482 l
-3671 1486 l
-3664 1493 l
-3660 1505 l
-3656 1520 l
-3653 1527 l
-3645 1531 l
-3637 1531 l
-3630 1527 l
-3626 1516 l
-3626 1501 l
-S
-3653 1565 m
-3656 1561 l
-3660 1565 l
-3656 1568 l
-3653 1565 l
-S
-3698 1565 m
-3701 1561 l
-3705 1565 l
-3701 1568 l
-3698 1565 l
-S
-3626 1617 m
-3630 1606 l
-3641 1599 l
-3660 1595 l
-3671 1595 l
-3690 1599 l
-3701 1606 l
-3705 1617 l
-3705 1625 l
-3701 1636 l
-3690 1644 l
-3671 1647 l
-3660 1647 l
-3641 1644 l
-3630 1636 l
-3626 1625 l
-3626 1617 l
-S
-3626 1693 m
-3630 1681 l
-3641 1674 l
-3660 1670 l
-3671 1670 l
-3690 1674 l
-3701 1681 l
-3705 1693 l
-3705 1700 l
-3701 1711 l
-3690 1719 l
-3671 1723 l
-3660 1723 l
-3641 1719 l
-3630 1711 l
-3626 1700 l
-3626 1693 l
-S
-1 g
-Y
-4299.2 1388.1 m
-4190 1388 l
-4190 1741 l
-4299 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4224 1411 m
-4220 1411 l
-4213 1414 l
-4209 1418 l
-4205 1426 l
-4205 1441 l
-4209 1448 l
-4213 1452 l
-4220 1456 l
-4228 1456 l
-4235 1452 l
-4247 1444 l
-4284 1407 l
-4284 1459 l
-S
-4205 1535 m
-4284 1497 l
-S
-4205 1482 m
-4205 1535 l
-S
-4231 1565 m
-4235 1561 l
-4239 1565 l
-4235 1568 l
-4231 1565 l
-S
-4277 1565 m
-4280 1561 l
-4284 1565 l
-4280 1568 l
-4277 1565 l
-S
-4205 1617 m
-4209 1606 l
-4220 1599 l
-4239 1595 l
-4250 1595 l
-4269 1599 l
-4280 1606 l
-4284 1617 l
-4284 1625 l
-4280 1636 l
-4269 1644 l
-4250 1647 l
-4239 1647 l
-4220 1644 l
-4209 1636 l
-4205 1625 l
-4205 1617 l
-S
-4205 1693 m
-4209 1681 l
-4220 1674 l
-4239 1670 l
-4250 1670 l
-4269 1674 l
-4280 1681 l
-4284 1693 l
-4284 1700 l
-4280 1711 l
-4269 1719 l
-4250 1723 l
-4239 1723 l
-4220 1719 l
-4209 1711 l
-4205 1700 l
-4205 1693 l
-S
-1 g
-Y
-4878.1 1388.1 m
-4769 1388 l
-4769 1741 l
-4878 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4803 1411 m
-4799 1411 l
-4792 1414 l
-4788 1418 l
-4784 1426 l
-4784 1441 l
-4788 1448 l
-4792 1452 l
-4799 1456 l
-4807 1456 l
-4814 1452 l
-4826 1444 l
-4863 1407 l
-4863 1459 l
-S
-4795 1531 m
-4788 1527 l
-4784 1516 l
-4784 1508 l
-4788 1497 l
-4799 1490 l
-4818 1486 l
-4837 1486 l
-4852 1490 l
-4859 1497 l
-4863 1508 l
-4863 1512 l
-4859 1523 l
-4852 1531 l
-4841 1535 l
-4837 1535 l
-4826 1531 l
-4818 1523 l
-4814 1512 l
-4814 1508 l
-4818 1497 l
-4826 1490 l
-4837 1486 l
-S
-4810 1565 m
-4814 1561 l
-4818 1565 l
-4814 1568 l
-4810 1565 l
-S
-4856 1565 m
-4859 1561 l
-4863 1565 l
-4859 1568 l
-4856 1565 l
-S
-4784 1617 m
-4788 1606 l
-4799 1599 l
-4818 1595 l
-4829 1595 l
-4848 1599 l
-4859 1606 l
-4863 1617 l
-4863 1625 l
-4859 1636 l
-4848 1644 l
-4829 1647 l
-4818 1647 l
-4799 1644 l
-4788 1636 l
-4784 1625 l
-4784 1617 l
-S
-4784 1693 m
-4788 1681 l
-4799 1674 l
-4818 1670 l
-4829 1670 l
-4848 1674 l
-4859 1681 l
-4863 1693 l
-4863 1700 l
-4859 1711 l
-4848 1719 l
-4829 1723 l
-4818 1723 l
-4799 1719 l
-4788 1711 l
-4784 1700 l
-4784 1693 l
-S
-1 g
-Y
-1983.3 1388.1 m
-1874 1388 l
-1874 1741 l
-1983 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1889 1414 m
-1889 1456 l
-1919 1433 l
-1919 1444 l
-1923 1452 l
-1927 1456 l
-1938 1459 l
-1946 1459 l
-1957 1456 l
-1964 1448 l
-1968 1437 l
-1968 1426 l
-1964 1414 l
-1961 1411 l
-1953 1407 l
-S
-1904 1493 m
-1901 1501 l
-1889 1512 l
-1968 1512 l
-S
-1916 1565 m
-1919 1561 l
-1923 1565 l
-1919 1568 l
-1916 1565 l
-S
-1961 1565 m
-1964 1561 l
-1968 1565 l
-1964 1568 l
-1961 1565 l
-S
-1889 1617 m
-1893 1606 l
-1904 1599 l
-1923 1595 l
-1934 1595 l
-1953 1599 l
-1964 1606 l
-1968 1617 l
-1968 1625 l
-1964 1636 l
-1953 1644 l
-1934 1647 l
-1923 1647 l
-1904 1644 l
-1893 1636 l
-1889 1625 l
-1889 1617 l
-S
-1889 1693 m
-1893 1681 l
-1904 1674 l
-1923 1670 l
-1934 1670 l
-1953 1674 l
-1964 1681 l
-1968 1693 l
-1968 1700 l
-1964 1711 l
-1953 1719 l
-1934 1723 l
-1923 1723 l
-1904 1719 l
-1893 1711 l
-1889 1700 l
-1889 1693 l
-S
-1 g
-Y
-1404.3 1388.1 m
-1295 1388 l
-1295 1741 l
-1404 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1310 1414 m
-1310 1456 l
-1340 1433 l
-1340 1444 l
-1344 1452 l
-1348 1456 l
-1359 1459 l
-1367 1459 l
-1378 1456 l
-1385 1448 l
-1389 1437 l
-1389 1426 l
-1385 1414 l
-1382 1411 l
-1374 1407 l
-S
-1329 1486 m
-1325 1486 l
-1318 1490 l
-1314 1493 l
-1310 1501 l
-1310 1516 l
-1314 1523 l
-1318 1527 l
-1325 1531 l
-1333 1531 l
-1340 1527 l
-1352 1520 l
-1389 1482 l
-1389 1535 l
-S
-1337 1565 m
-1340 1561 l
-1344 1565 l
-1340 1568 l
-1337 1565 l
-S
-1382 1565 m
-1385 1561 l
-1389 1565 l
-1385 1568 l
-1382 1565 l
-S
-1310 1617 m
-1314 1606 l
-1325 1599 l
-1344 1595 l
-1355 1595 l
-1374 1599 l
-1385 1606 l
-1389 1617 l
-1389 1625 l
-1385 1636 l
-1374 1644 l
-1355 1647 l
-1344 1647 l
-1325 1644 l
-1314 1636 l
-1310 1625 l
-1310 1617 l
-S
-1310 1693 m
-1314 1681 l
-1325 1674 l
-1344 1670 l
-1355 1670 l
-1374 1674 l
-1385 1681 l
-1389 1693 l
-1389 1700 l
-1385 1711 l
-1374 1719 l
-1355 1723 l
-1344 1723 l
-1325 1719 l
-1314 1711 l
-1310 1700 l
-1310 1693 l
-S
-1 g
-Y
-825.3 1388.1 m
-716 1388 l
-716 1741 l
-825 1741 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-731 1414 m
-731 1456 l
-761 1433 l
-761 1444 l
-765 1452 l
-769 1456 l
-780 1459 l
-788 1459 l
-799 1456 l
-807 1448 l
-810 1437 l
-810 1426 l
-807 1414 l
-803 1411 l
-795 1407 l
-S
-731 1490 m
-731 1531 l
-761 1508 l
-761 1520 l
-765 1527 l
-769 1531 l
-780 1535 l
-788 1535 l
-799 1531 l
-807 1523 l
-810 1512 l
-810 1501 l
-807 1490 l
-803 1486 l
-795 1482 l
-S
-758 1565 m
-761 1561 l
-765 1565 l
-761 1568 l
-758 1565 l
-S
-803 1565 m
-807 1561 l
-810 1565 l
-807 1568 l
-803 1565 l
-S
-731 1617 m
-735 1606 l
-746 1599 l
-765 1595 l
-776 1595 l
-795 1599 l
-807 1606 l
-810 1617 l
-810 1625 l
-807 1636 l
-795 1644 l
-776 1647 l
-765 1647 l
-746 1644 l
-735 1636 l
-731 1625 l
-731 1617 l
-S
-731 1693 m
-735 1681 l
-746 1674 l
-765 1670 l
-776 1670 l
-795 1674 l
-807 1681 l
-810 1693 l
-810 1700 l
-807 1711 l
-795 1719 l
-776 1723 l
-765 1723 l
-746 1719 l
-735 1711 l
-731 1700 l
-731 1693 l
-S
-1 g
-Y
-5319.8 3163 m
-5088 3163 l
-5088 4736 l
-5320 4736 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-5119 3194 m
-5251 3194 l
-S
-5119 3194 m
-5119 3251 l
-5126 3269 l
-5132 3276 l
-5144 3282 l
-5157 3282 l
-5169 3276 l
-5176 3269 l
-5182 3251 l
-5182 3194 l
-S
-5182 3238 m
-5251 3282 l
-S
-5119 3320 m
-5126 3326 l
-5119 3332 l
-5113 3326 l
-5119 3320 l
-S
-5163 3326 m
-5251 3326 l
-S
-5163 3445 m
-5263 3445 l
-5282 3439 l
-5288 3432 l
-5295 3420 l
-5295 3401 l
-5288 3389 l
-S
-5182 3445 m
-5169 3432 l
-5163 3420 l
-5163 3401 l
-5169 3389 l
-5182 3376 l
-5201 3370 l
-5213 3370 l
-5232 3376 l
-5245 3389 l
-5251 3401 l
-5251 3420 l
-5245 3432 l
-5232 3445 l
-S
-5119 3495 m
-5251 3495 l
-S
-5188 3495 m
-5169 3514 l
-5163 3526 l
-5163 3545 l
-5169 3558 l
-5188 3564 l
-5251 3564 l
-S
-5119 3620 m
-5226 3620 l
-5245 3627 l
-5251 3639 l
-5251 3652 l
-S
-5163 3602 m
-5163 3645 l
-S
-5163 3858 m
-5251 3858 l
-S
-5182 3858 m
-5169 3846 l
-5163 3833 l
-5163 3815 l
-5169 3802 l
-5182 3789 l
-5201 3783 l
-5213 3783 l
-5232 3789 l
-5245 3802 l
-5251 3815 l
-5251 3833 l
-5245 3846 l
-5232 3858 l
-S
-5182 3971 m
-5169 3965 l
-5163 3946 l
-5163 3927 l
-5169 3909 l
-5182 3902 l
-5194 3909 l
-5201 3921 l
-5207 3952 l
-5213 3965 l
-5226 3971 l
-5232 3971 l
-5245 3965 l
-5251 3946 l
-5251 3927 l
-5245 3909 l
-5232 3902 l
-S
-5182 4084 m
-5169 4071 l
-5163 4059 l
-5163 4040 l
-5169 4028 l
-5182 4015 l
-5201 4009 l
-5213 4009 l
-5232 4015 l
-5245 4028 l
-5251 4040 l
-5251 4059 l
-5245 4071 l
-5232 4084 l
-S
-5201 4122 m
-5201 4197 l
-5188 4197 l
-5176 4190 l
-5169 4184 l
-5163 4172 l
-5163 4153 l
-5169 4140 l
-5182 4128 l
-5201 4122 l
-5213 4122 l
-5232 4128 l
-5245 4140 l
-5251 4153 l
-5251 4172 l
-5245 4184 l
-5232 4197 l
-S
-5163 4241 m
-5251 4241 l
-S
-5188 4241 m
-5169 4259 l
-5163 4272 l
-5163 4291 l
-5169 4303 l
-5188 4309 l
-5251 4309 l
-S
-5182 4422 m
-5169 4416 l
-5163 4397 l
-5163 4378 l
-5169 4360 l
-5182 4353 l
-5194 4360 l
-5201 4372 l
-5207 4403 l
-5213 4416 l
-5226 4422 l
-5232 4422 l
-5245 4416 l
-5251 4397 l
-5251 4378 l
-5245 4360 l
-5232 4353 l
-S
-5119 4460 m
-5126 4466 l
-5119 4472 l
-5113 4466 l
-5119 4460 l
-S
-5163 4466 m
-5251 4466 l
-S
-5163 4541 m
-5169 4529 l
-5182 4516 l
-5201 4510 l
-5213 4510 l
-5232 4516 l
-5245 4529 l
-5251 4541 l
-5251 4560 l
-5245 4573 l
-5232 4585 l
-5213 4591 l
-5201 4591 l
-5182 4585 l
-5169 4573 l
-5163 4560 l
-5163 4541 l
-S
-5163 4635 m
-5251 4635 l
-S
-5188 4635 m
-5169 4654 l
-5163 4667 l
-5163 4685 l
-5169 4698 l
-5188 4704 l
-5251 4704 l
-S
-1 g
-Y
-3240.9 1170.4 m
-3241 982 l
-2170 982 l
-2170 1170 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3210 1014 m
-3210 1145 l
-S
-3210 1014 m
-3166 1014 l
-3147 1020 l
-3134 1033 l
-3128 1045 l
-3122 1064 l
-3122 1095 l
-3128 1114 l
-3134 1127 l
-3147 1139 l
-3166 1145 l
-3210 1145 l
-S
-3084 1095 m
-3009 1095 l
-3009 1083 l
-3015 1070 l
-3022 1064 l
-3034 1058 l
-3053 1058 l
-3066 1064 l
-3078 1076 l
-3084 1095 l
-3084 1108 l
-3078 1127 l
-3066 1139 l
-3053 1145 l
-3034 1145 l
-3022 1139 l
-3009 1127 l
-S
-2896 1076 m
-2909 1064 l
-2921 1058 l
-2940 1058 l
-2953 1064 l
-2965 1076 l
-2972 1095 l
-2972 1108 l
-2965 1127 l
-2953 1139 l
-2940 1145 l
-2921 1145 l
-2909 1139 l
-2896 1127 l
-S
-2853 1014 m
-2853 1145 l
-S
-2809 1014 m
-2802 1020 l
-2796 1014 l
-2802 1008 l
-2809 1014 l
-S
-2802 1058 m
-2802 1145 l
-S
-2752 1058 m
-2752 1145 l
-S
-2752 1083 m
-2733 1064 l
-2721 1058 l
-2702 1058 l
-2690 1064 l
-2683 1083 l
-2683 1145 l
-S
-2564 1058 m
-2564 1145 l
-S
-2564 1076 m
-2577 1064 l
-2589 1058 l
-2608 1058 l
-2621 1064 l
-2633 1076 l
-2639 1095 l
-2639 1108 l
-2633 1127 l
-2621 1139 l
-2608 1145 l
-2589 1145 l
-2577 1139 l
-2564 1127 l
-S
-2508 1014 m
-2508 1120 l
-2502 1139 l
-2489 1145 l
-2477 1145 l
-S
-2527 1058 m
-2483 1058 l
-S
-2445 1014 m
-2439 1020 l
-2433 1014 l
-2439 1008 l
-2445 1014 l
-S
-2439 1058 m
-2439 1145 l
-S
-2364 1058 m
-2376 1064 l
-2389 1076 l
-2395 1095 l
-2395 1108 l
-2389 1127 l
-2376 1139 l
-2364 1145 l
-2345 1145 l
-2333 1139 l
-2320 1127 l
-2314 1108 l
-2314 1095 l
-2320 1076 l
-2333 1064 l
-2345 1058 l
-2364 1058 l
-S
-2270 1058 m
-2270 1145 l
-S
-2270 1083 m
-2251 1064 l
-2239 1058 l
-2220 1058 l
-2207 1064 l
-2201 1083 l
-2201 1145 l
-S
-1 g
-Y
-371.2 1568.5 m
-186 1568 l
-186 6330 l
-371 6330 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-236 1669 m
-226 1664 l
-216 1654 l
-211 1644 l
-211 1624 l
-216 1614 l
-226 1604 l
-236 1599 l
-251 1594 l
-276 1594 l
-291 1599 l
-301 1604 l
-311 1614 l
-316 1624 l
-316 1644 l
-311 1654 l
-301 1664 l
-291 1669 l
-276 1669 l
-S
-276 1644 m
-276 1669 l
-S
-276 1699 m
-276 1759 l
-266 1759 l
-256 1754 l
-251 1749 l
-246 1739 l
-246 1724 l
-251 1714 l
-261 1704 l
-276 1699 l
-286 1699 l
-301 1704 l
-311 1714 l
-316 1724 l
-316 1739 l
-311 1749 l
-301 1759 l
-S
-246 1814 m
-251 1804 l
-261 1794 l
-276 1789 l
-286 1789 l
-301 1794 l
-311 1804 l
-316 1814 l
-316 1829 l
-311 1839 l
-301 1849 l
-286 1854 l
-276 1854 l
-261 1849 l
-251 1839 l
-246 1829 l
-246 1814 l
-S
-261 1944 m
-251 1934 l
-246 1924 l
-246 1909 l
-251 1899 l
-261 1889 l
-276 1884 l
-286 1884 l
-301 1889 l
-311 1899 l
-316 1909 l
-316 1924 l
-311 1934 l
-301 1944 l
-S
-276 1974 m
-276 2035 l
-266 2035 l
-256 2030 l
-251 2025 l
-246 2015 l
-246 2000 l
-251 1990 l
-261 1979 l
-276 1974 l
-286 1974 l
-301 1979 l
-311 1990 l
-316 2000 l
-316 2015 l
-311 2025 l
-301 2035 l
-S
-246 2070 m
-316 2070 l
-S
-266 2070 m
-251 2085 l
-246 2095 l
-246 2110 l
-251 2120 l
-266 2125 l
-316 2125 l
-S
-211 2170 m
-296 2170 l
-311 2175 l
-316 2185 l
-316 2195 l
-S
-246 2155 m
-246 2190 l
-S
-246 2225 m
-316 2225 l
-S
-276 2225 m
-261 2230 l
-251 2240 l
-246 2250 l
-246 2265 l
-S
-211 2285 m
-216 2290 l
-211 2295 l
-206 2290 l
-211 2285 l
-S
-246 2290 m
-316 2290 l
-S
-261 2385 m
-251 2375 l
-246 2365 l
-246 2350 l
-251 2340 l
-261 2330 l
-276 2325 l
-286 2325 l
-301 2330 l
-311 2340 l
-316 2350 l
-316 2365 l
-311 2375 l
-301 2385 l
-S
-246 2556 m
-316 2556 l
-S
-261 2556 m
-251 2546 l
-246 2536 l
-246 2521 l
-251 2511 l
-261 2501 l
-276 2496 l
-286 2496 l
-301 2501 l
-311 2511 l
-316 2521 l
-316 2536 l
-311 2546 l
-301 2556 l
-S
-246 2596 m
-351 2596 l
-S
-261 2596 m
-251 2606 l
-246 2616 l
-246 2631 l
-251 2641 l
-261 2651 l
-276 2656 l
-286 2656 l
-301 2651 l
-311 2641 l
-316 2631 l
-316 2616 l
-311 2606 l
-301 2596 l
-S
-246 2691 m
-351 2691 l
-S
-261 2691 m
-251 2701 l
-246 2711 l
-246 2726 l
-251 2736 l
-261 2746 l
-276 2751 l
-286 2751 l
-301 2746 l
-311 2736 l
-316 2726 l
-316 2711 l
-311 2701 l
-301 2691 l
-S
-246 2842 m
-316 2842 l
-S
-261 2842 m
-251 2832 l
-246 2822 l
-246 2806 l
-251 2796 l
-261 2786 l
-276 2781 l
-286 2781 l
-301 2786 l
-311 2796 l
-316 2806 l
-316 2822 l
-311 2832 l
-301 2842 l
-S
-246 2882 m
-316 2882 l
-S
-276 2882 m
-261 2887 l
-251 2897 l
-246 2907 l
-246 2922 l
-S
-276 2942 m
-276 3002 l
-266 3002 l
-256 2997 l
-251 2992 l
-246 2982 l
-246 2967 l
-251 2957 l
-261 2947 l
-276 2942 l
-286 2942 l
-301 2947 l
-311 2957 l
-316 2967 l
-316 2982 l
-311 2992 l
-301 3002 l
-S
-246 3037 m
-316 3037 l
-S
-266 3037 m
-251 3052 l
-246 3062 l
-246 3077 l
-251 3087 l
-266 3092 l
-316 3092 l
-S
-211 3137 m
-296 3137 l
-311 3142 l
-316 3152 l
-316 3162 l
-S
-246 3122 m
-246 3157 l
-S
-276 3268 m
-276 3328 l
-266 3328 l
-256 3323 l
-251 3318 l
-246 3308 l
-246 3293 l
-251 3283 l
-261 3273 l
-276 3268 l
-286 3268 l
-301 3273 l
-311 3283 l
-316 3293 l
-316 3308 l
-311 3318 l
-301 3328 l
-S
-246 3418 m
-351 3418 l
-S
-261 3418 m
-251 3408 l
-246 3398 l
-246 3383 l
-251 3373 l
-261 3363 l
-276 3358 l
-286 3358 l
-301 3363 l
-311 3373 l
-316 3383 l
-316 3398 l
-311 3408 l
-301 3418 l
-S
-246 3458 m
-296 3458 l
-311 3463 l
-316 3473 l
-316 3488 l
-311 3498 l
-296 3513 l
-S
-246 3513 m
-316 3513 l
-S
-246 3608 m
-316 3608 l
-S
-261 3608 m
-251 3598 l
-246 3588 l
-246 3573 l
-251 3563 l
-261 3553 l
-276 3548 l
-286 3548 l
-301 3553 l
-311 3563 l
-316 3573 l
-316 3588 l
-311 3598 l
-301 3608 l
-S
-211 3654 m
-296 3654 l
-311 3659 l
-316 3669 l
-316 3679 l
-S
-246 3638 m
-246 3674 l
-S
-246 3729 m
-251 3719 l
-261 3709 l
-276 3704 l
-286 3704 l
-301 3709 l
-311 3719 l
-316 3729 l
-316 3744 l
-311 3754 l
-301 3764 l
-286 3769 l
-276 3769 l
-261 3764 l
-251 3754 l
-246 3744 l
-246 3729 l
-S
-246 3804 m
-316 3804 l
-S
-276 3804 m
-261 3809 l
-251 3819 l
-246 3829 l
-246 3844 l
-S
-211 3864 m
-216 3869 l
-211 3874 l
-206 3869 l
-211 3864 l
-S
-246 3869 m
-316 3869 l
-S
-246 3964 m
-316 3964 l
-S
-261 3964 m
-251 3954 l
-246 3944 l
-246 3929 l
-251 3919 l
-261 3909 l
-276 3904 l
-286 3904 l
-301 3909 l
-311 3919 l
-316 3929 l
-316 3944 l
-311 3954 l
-301 3964 l
-S
-211 4004 m
-316 4004 l
-S
-261 4180 m
-251 4170 l
-246 4160 l
-246 4145 l
-251 4135 l
-261 4125 l
-276 4120 l
-286 4120 l
-301 4125 l
-311 4135 l
-316 4145 l
-316 4160 l
-311 4170 l
-301 4180 l
-S
-246 4235 m
-251 4225 l
-261 4215 l
-276 4210 l
-286 4210 l
-301 4215 l
-311 4225 l
-316 4235 l
-316 4250 l
-311 4260 l
-301 4270 l
-286 4275 l
-276 4275 l
-261 4270 l
-251 4260 l
-246 4250 l
-246 4235 l
-S
-246 4330 m
-251 4320 l
-261 4310 l
-276 4305 l
-286 4305 l
-301 4310 l
-311 4320 l
-316 4330 l
-316 4345 l
-311 4355 l
-301 4365 l
-286 4370 l
-276 4370 l
-261 4365 l
-251 4355 l
-246 4345 l
-246 4330 l
-S
-246 4405 m
-316 4405 l
-S
-276 4405 m
-261 4410 l
-251 4420 l
-246 4430 l
-246 4445 l
-S
-211 4526 m
-316 4526 l
-S
-261 4526 m
-251 4516 l
-246 4506 l
-246 4491 l
-251 4481 l
-261 4470 l
-276 4465 l
-286 4465 l
-301 4470 l
-311 4481 l
-316 4491 l
-316 4506 l
-311 4516 l
-301 4526 l
-S
-211 4561 m
-216 4566 l
-211 4571 l
-206 4566 l
-211 4561 l
-S
-246 4566 m
-316 4566 l
-S
-246 4606 m
-316 4606 l
-S
-266 4606 m
-251 4621 l
-246 4631 l
-246 4646 l
-251 4656 l
-266 4661 l
-316 4661 l
-S
-246 4756 m
-316 4756 l
-S
-261 4756 m
-251 4746 l
-246 4736 l
-246 4721 l
-251 4711 l
-261 4701 l
-276 4696 l
-286 4696 l
-301 4701 l
-311 4711 l
-316 4721 l
-316 4736 l
-311 4746 l
-301 4756 l
-S
-211 4801 m
-296 4801 l
-311 4806 l
-316 4816 l
-316 4826 l
-S
-246 4786 m
-246 4821 l
-S
-276 4851 m
-276 4912 l
-266 4912 l
-256 4907 l
-251 4902 l
-246 4892 l
-246 4876 l
-251 4866 l
-261 4856 l
-276 4851 l
-286 4851 l
-301 4856 l
-311 4866 l
-316 4876 l
-316 4892 l
-311 4902 l
-301 4912 l
-S
-261 4997 m
-251 4992 l
-246 4977 l
-246 4962 l
-251 4947 l
-261 4942 l
-271 4947 l
-276 4957 l
-281 4982 l
-286 4992 l
-296 4997 l
-301 4997 l
-311 4992 l
-316 4977 l
-316 4962 l
-311 4947 l
-301 4942 l
-S
-246 5037 m
-251 5032 l
-256 5037 l
-251 5042 l
-246 5037 l
-S
-311 5042 m
-316 5037 l
-311 5032 l
-306 5037 l
-311 5042 l
-321 5042 l
-331 5037 l
-336 5032 l
-S
-276 5157 m
-276 5217 l
-266 5217 l
-256 5212 l
-251 5207 l
-246 5197 l
-246 5182 l
-251 5172 l
-261 5162 l
-276 5157 l
-286 5157 l
-301 5162 l
-311 5172 l
-316 5182 l
-316 5197 l
-311 5207 l
-301 5217 l
-S
-246 5252 m
-351 5252 l
-S
-261 5252 m
-251 5262 l
-246 5272 l
-246 5287 l
-251 5297 l
-261 5308 l
-276 5313 l
-286 5313 l
-301 5308 l
-311 5297 l
-316 5287 l
-316 5272 l
-311 5262 l
-301 5252 l
-S
-246 5368 m
-251 5358 l
-261 5348 l
-276 5343 l
-286 5343 l
-301 5348 l
-311 5358 l
-316 5368 l
-316 5383 l
-311 5393 l
-301 5403 l
-286 5408 l
-276 5408 l
-261 5403 l
-251 5393 l
-246 5383 l
-246 5368 l
-S
-261 5498 m
-251 5488 l
-246 5478 l
-246 5463 l
-251 5453 l
-261 5443 l
-276 5438 l
-286 5438 l
-301 5443 l
-311 5453 l
-316 5463 l
-316 5478 l
-311 5488 l
-301 5498 l
-S
-211 5533 m
-316 5533 l
-S
-266 5533 m
-251 5548 l
-246 5558 l
-246 5573 l
-251 5583 l
-266 5588 l
-316 5588 l
-S
-211 5749 m
-291 5749 l
-306 5744 l
-311 5739 l
-316 5729 l
-316 5718 l
-311 5708 l
-306 5703 l
-291 5698 l
-281 5698 l
-S
-231 5799 m
-226 5809 l
-211 5824 l
-316 5824 l
-S
-246 5949 m
-261 5944 l
-271 5934 l
-276 5919 l
-276 5914 l
-271 5899 l
-261 5889 l
-246 5884 l
-241 5884 l
-226 5889 l
-216 5899 l
-211 5914 l
-211 5919 l
-216 5934 l
-226 5944 l
-246 5949 l
-271 5949 l
-296 5944 l
-311 5934 l
-316 5919 l
-316 5909 l
-311 5894 l
-301 5889 l
-S
-246 6049 m
-261 6044 l
-271 6034 l
-276 6019 l
-276 6014 l
-271 5999 l
-261 5989 l
-246 5984 l
-241 5984 l
-226 5989 l
-216 5999 l
-211 6014 l
-211 6019 l
-216 6034 l
-226 6044 l
-246 6049 l
-271 6049 l
-296 6044 l
-311 6034 l
-316 6019 l
-316 6009 l
-311 5994 l
-301 5989 l
-S
-211 6155 m
-316 6104 l
-S
-211 6084 m
-211 6155 l
-S
-306 6195 m
-311 6190 l
-316 6195 l
-311 6200 l
-306 6195 l
-S
-211 6295 m
-211 6245 l
-256 6240 l
-251 6245 l
-246 6260 l
-246 6275 l
-251 6290 l
-261 6300 l
-276 6305 l
-286 6305 l
-301 6300 l
-311 6290 l
-316 6275 l
-316 6260 l
-311 6245 l
-306 6240 l
-296 6235 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontb.eps b/ast-5.3-1/sun211_figures/frontb.eps
deleted file mode 100644
index 8572584..0000000
--- a/ast-5.3-1/sun211_figures/frontb.eps
+++ /dev/null
@@ -1,21511 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 1 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-0 g
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-0 0 1 rg
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 1 1 rg
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontb_bw.eps b/ast-5.3-1/sun211_figures/frontb_bw.eps
deleted file mode 100644
index f7883ed..0000000
--- a/ast-5.3-1/sun211_figures/frontb_bw.eps
+++ /dev/null
@@ -1,21509 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 30 189 477 603
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:07:11
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3017 l
-3112 3018 l
-3114 3019 l
-3116 3020 l
-3117 3021 l
-3119 3021 l
-3120 3022 l
-3142 3035 l
-3164 3048 l
-3186 3061 l
-3207 3075 l
-3229 3089 l
-3250 3103 l
-3270 3117 l
-3291 3132 l
-3311 3147 l
-3331 3163 l
-3351 3179 l
-3371 3195 l
-3390 3211 l
-3409 3228 l
-3428 3245 l
-3447 3262 l
-3465 3280 l
-3483 3297 l
-3501 3315 l
-3518 3334 l
-3536 3353 l
-3553 3371 l
-3569 3391 l
-3586 3410 l
-3602 3430 l
-3617 3450 l
-3633 3470 l
-3648 3490 l
-3663 3511 l
-3677 3532 l
-3691 3553 l
-3705 3574 l
-3719 3596 l
-3732 3618 l
-3745 3640 l
-3757 3662 l
-3769 3684 l
-3781 3707 l
-3792 3730 l
-3803 3753 l
-3814 3776 l
-3824 3800 l
-3834 3823 l
-3843 3847 l
-3852 3871 l
-3861 3895 l
-3869 3919 l
-3877 3944 l
-3884 3968 l
-3891 3993 l
-3898 4018 l
-3904 4043 l
-3910 4068 l
-3915 4094 l
-3920 4119 l
-3924 4144 l
-3928 4170 l
-3932 4196 l
-3935 4222 l
-3937 4248 l
-3939 4274 l
-3941 4300 l
-3942 4326 l
-3942 4352 l
-3943 4379 l
-3942 4405 l
-3941 4431 l
-3940 4458 l
-3938 4484 l
-3935 4511 l
-3932 4538 l
-3929 4564 l
-3925 4591 l
-3920 4617 l
-3915 4644 l
-3909 4671 l
-3903 4697 l
-3896 4724 l
-3888 4750 l
-3880 4776 l
-3872 4803 l
-3862 4829 l
-3852 4855 l
-3842 4881 l
-3831 4907 l
-3819 4933 l
-3807 4959 l
-3794 4984 l
-3780 5010 l
-3766 5035 l
-3751 5060 l
-3736 5085 l
-3720 5110 l
-3703 5134 l
-3685 5159 l
-3667 5183 l
-3648 5206 l
-3629 5230 l
-3609 5253 l
-3588 5276 l
-3566 5298 l
-3544 5320 l
-3521 5342 l
-3497 5363 l
-3473 5384 l
-3448 5405 l
-3422 5425 l
-3396 5444 l
-3369 5463 l
-3341 5482 l
-3312 5500 l
-3283 5517 l
-3254 5534 l
-3223 5551 l
-3192 5566 l
-3160 5581 l
-3128 5595 l
-3095 5609 l
-3061 5622 l
-3026 5634 l
-2992 5645 l
-2956 5656 l
-2920 5665 l
-2883 5674 l
-2846 5682 l
-2808 5689 l
-2770 5695 l
-2732 5700 l
-2693 5704 l
-2653 5707 l
-2613 5709 l
-2573 5710 l
-2533 5710 l
-2492 5709 l
-2451 5707 l
-2410 5703 l
-2368 5699 l
-2327 5693 l
-2285 5686 l
-2243 5678 l
-2202 5669 l
-2160 5658 l
-2119 5647 l
-2077 5634 l
-2036 5620 l
-1995 5605 l
-1992 5603 l
-1989 5602 l
-1986 5601 l
-1984 5600 l
-1981 5599 l
-1978 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3018 l
-3110 3019 l
-3111 3021 l
-3112 3022 l
-3112 3023 l
-3113 3025 l
-3113 3026 l
-3122 3046 l
-3129 3067 l
-3137 3087 l
-3145 3108 l
-3152 3129 l
-3159 3150 l
-3166 3171 l
-3172 3192 l
-3179 3213 l
-3185 3234 l
-3191 3256 l
-3196 3277 l
-3202 3299 l
-3207 3320 l
-3212 3342 l
-3217 3364 l
-3222 3386 l
-3226 3408 l
-3230 3430 l
-3234 3452 l
-3238 3475 l
-3242 3497 l
-3245 3519 l
-3248 3542 l
-3251 3564 l
-3254 3587 l
-3257 3610 l
-3259 3632 l
-3261 3655 l
-3263 3678 l
-3265 3700 l
-3266 3723 l
-3268 3746 l
-3269 3769 l
-3270 3792 l
-3270 3815 l
-3271 3838 l
-3271 3861 l
-3271 3884 l
-3271 3907 l
-3271 3929 l
-3270 3952 l
-3269 3975 l
-3268 3998 l
-3267 4021 l
-3266 4044 l
-3264 4067 l
-3263 4090 l
-3261 4113 l
-3259 4136 l
-3256 4158 l
-3254 4181 l
-3251 4204 l
-3248 4227 l
-3245 4249 l
-3242 4272 l
-3238 4294 l
-3234 4317 l
-3230 4339 l
-3226 4362 l
-3222 4384 l
-3217 4406 l
-3212 4429 l
-3207 4451 l
-3202 4473 l
-3197 4495 l
-3191 4517 l
-3186 4538 l
-3180 4560 l
-3173 4582 l
-3167 4603 l
-3160 4625 l
-3154 4646 l
-3146 4667 l
-3139 4688 l
-3132 4709 l
-3124 4730 l
-3116 4751 l
-3108 4771 l
-3100 4792 l
-3092 4812 l
-3083 4832 l
-3074 4852 l
-3065 4872 l
-3055 4892 l
-3046 4912 l
-3036 4931 l
-3026 4950 l
-3016 4970 l
-3005 4989 l
-2995 5007 l
-2984 5026 l
-2973 5044 l
-2962 5063 l
-2950 5081 l
-2938 5099 l
-2926 5116 l
-2914 5134 l
-2902 5151 l
-2889 5168 l
-2876 5185 l
-2863 5202 l
-2849 5218 l
-2836 5234 l
-2822 5250 l
-2808 5266 l
-2793 5281 l
-2778 5296 l
-2764 5311 l
-2748 5326 l
-2733 5340 l
-2717 5355 l
-2701 5368 l
-2685 5382 l
-2668 5395 l
-2652 5408 l
-2634 5421 l
-2617 5433 l
-2599 5445 l
-2581 5457 l
-2563 5468 l
-2544 5479 l
-2526 5489 l
-2506 5499 l
-2487 5509 l
-2467 5519 l
-2447 5528 l
-2426 5536 l
-2405 5544 l
-2384 5552 l
-2362 5559 l
-2340 5566 l
-2318 5572 l
-2295 5578 l
-2272 5583 l
-2248 5587 l
-2224 5591 l
-2200 5595 l
-2175 5598 l
-2150 5600 l
-2124 5601 l
-2098 5602 l
-2072 5602 l
-2045 5602 l
-2017 5600 l
-1989 5598 l
-1987 5598 l
-1985 5598 l
-1983 5597 l
-1981 5597 l
-1979 5597 l
-1977 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3017 l
-3108 3019 l
-3107 3020 l
-3106 3021 l
-3106 3022 l
-3105 3023 l
-3104 3024 l
-3094 3041 l
-3083 3057 l
-3073 3074 l
-3062 3090 l
-3052 3107 l
-3041 3124 l
-3031 3141 l
-3020 3158 l
-3010 3175 l
-2999 3192 l
-2989 3210 l
-2978 3227 l
-2968 3245 l
-2957 3263 l
-2947 3280 l
-2936 3298 l
-2926 3316 l
-2915 3334 l
-2905 3352 l
-2894 3371 l
-2884 3389 l
-2873 3407 l
-2863 3426 l
-2852 3444 l
-2841 3463 l
-2831 3482 l
-2820 3500 l
-2810 3519 l
-2799 3538 l
-2789 3557 l
-2779 3576 l
-2768 3595 l
-2758 3614 l
-2747 3633 l
-2737 3653 l
-2726 3672 l
-2716 3691 l
-2706 3710 l
-2695 3730 l
-2685 3749 l
-2675 3769 l
-2664 3788 l
-2654 3808 l
-2644 3827 l
-2634 3847 l
-2624 3866 l
-2614 3886 l
-2603 3906 l
-2593 3925 l
-2583 3945 l
-2573 3965 l
-2563 3984 l
-2553 4004 l
-2544 4024 l
-2534 4043 l
-2524 4063 l
-2514 4083 l
-2504 4103 l
-2495 4122 l
-2485 4142 l
-2475 4162 l
-2466 4181 l
-2456 4201 l
-2447 4221 l
-2438 4240 l
-2428 4260 l
-2419 4279 l
-2410 4299 l
-2400 4319 l
-2391 4338 l
-2382 4357 l
-2373 4377 l
-2364 4396 l
-2355 4416 l
-2347 4435 l
-2338 4454 l
-2329 4473 l
-2321 4493 l
-2312 4512 l
-2304 4531 l
-2295 4550 l
-2287 4569 l
-2278 4588 l
-2270 4607 l
-2262 4625 l
-2254 4644 l
-2246 4663 l
-2238 4681 l
-2230 4700 l
-2223 4718 l
-2215 4737 l
-2208 4755 l
-2200 4773 l
-2193 4792 l
-2185 4810 l
-2178 4828 l
-2171 4846 l
-2164 4863 l
-2157 4881 l
-2150 4899 l
-2144 4916 l
-2137 4934 l
-2130 4951 l
-2124 4969 l
-2118 4986 l
-2111 5003 l
-2105 5020 l
-2099 5037 l
-2093 5053 l
-2088 5070 l
-2082 5087 l
-2076 5103 l
-2071 5119 l
-2066 5136 l
-2061 5152 l
-2055 5168 l
-2051 5184 l
-2046 5200 l
-2041 5215 l
-2036 5231 l
-2032 5246 l
-2028 5261 l
-2024 5277 l
-2020 5292 l
-2016 5307 l
-2012 5321 l
-2009 5336 l
-2005 5351 l
-2002 5365 l
-1999 5379 l
-1996 5393 l
-1993 5408 l
-1991 5421 l
-1988 5435 l
-1986 5449 l
-1984 5462 l
-1982 5476 l
-1980 5489 l
-1979 5502 l
-1978 5515 l
-1977 5528 l
-1976 5541 l
-1975 5553 l
-1975 5566 l
-1975 5578 l
-1975 5590 l
-1975 5591 l
-1975 5592 l
-1975 5593 l
-1975 5594 l
-1975 5595 l
-1975 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3016 l
-3106 3017 l
-3104 3017 l
-3103 3017 l
-3101 3017 l
-3099 3017 l
-3098 3018 l
-3075 3021 l
-3052 3024 l
-3029 3028 l
-3006 3032 l
-2983 3036 l
-2960 3041 l
-2937 3046 l
-2914 3051 l
-2892 3057 l
-2869 3063 l
-2846 3069 l
-2824 3075 l
-2801 3082 l
-2779 3089 l
-2757 3096 l
-2735 3104 l
-2712 3112 l
-2690 3120 l
-2668 3128 l
-2646 3137 l
-2625 3146 l
-2603 3155 l
-2581 3164 l
-2560 3174 l
-2538 3184 l
-2517 3194 l
-2496 3205 l
-2475 3216 l
-2454 3227 l
-2433 3238 l
-2412 3249 l
-2392 3261 l
-2371 3273 l
-2351 3285 l
-2331 3297 l
-2311 3310 l
-2291 3323 l
-2271 3336 l
-2252 3349 l
-2232 3363 l
-2213 3377 l
-2194 3391 l
-2175 3405 l
-2156 3419 l
-2138 3434 l
-2119 3449 l
-2101 3464 l
-2083 3479 l
-2065 3495 l
-2047 3510 l
-2030 3526 l
-2012 3542 l
-1995 3559 l
-1978 3575 l
-1962 3592 l
-1945 3609 l
-1929 3626 l
-1913 3643 l
-1897 3660 l
-1881 3678 l
-1866 3695 l
-1851 3713 l
-1836 3731 l
-1821 3750 l
-1807 3768 l
-1793 3787 l
-1779 3806 l
-1765 3824 l
-1752 3844 l
-1738 3863 l
-1725 3882 l
-1713 3902 l
-1700 3922 l
-1688 3941 l
-1677 3962 l
-1665 3982 l
-1654 4002 l
-1643 4022 l
-1632 4043 l
-1622 4064 l
-1612 4085 l
-1602 4106 l
-1593 4127 l
-1584 4148 l
-1575 4170 l
-1566 4191 l
-1558 4213 l
-1551 4235 l
-1543 4257 l
-1536 4279 l
-1530 4301 l
-1523 4323 l
-1517 4345 l
-1512 4368 l
-1507 4391 l
-1502 4413 l
-1497 4436 l
-1493 4459 l
-1490 4482 l
-1487 4505 l
-1484 4528 l
-1481 4551 l
-1480 4575 l
-1478 4598 l
-1477 4622 l
-1477 4645 l
-1477 4669 l
-1477 4693 l
-1478 4717 l
-1479 4741 l
-1481 4764 l
-1483 4788 l
-1486 4812 l
-1490 4837 l
-1494 4861 l
-1498 4885 l
-1504 4909 l
-1509 4933 l
-1515 4958 l
-1522 4982 l
-1530 5006 l
-1538 5030 l
-1547 5055 l
-1556 5079 l
-1566 5103 l
-1577 5127 l
-1588 5152 l
-1601 5176 l
-1613 5200 l
-1627 5224 l
-1641 5248 l
-1657 5272 l
-1673 5295 l
-1689 5319 l
-1707 5343 l
-1725 5366 l
-1745 5389 l
-1765 5412 l
-1786 5435 l
-1808 5457 l
-1831 5480 l
-1855 5502 l
-1880 5523 l
-1906 5545 l
-1933 5566 l
-1960 5586 l
-1962 5588 l
-1965 5589 l
-1967 5591 l
-1969 5592 l
-1971 5594 l
-1973 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3108 3015 l
-3106 3014 l
-3104 3014 l
-3103 3013 l
-3101 3012 l
-3100 3011 l
-3098 3010 l
-3076 2998 l
-3053 2987 l
-3030 2975 l
-3007 2965 l
-2984 2954 l
-2961 2944 l
-2938 2934 l
-2914 2925 l
-2890 2916 l
-2866 2907 l
-2842 2899 l
-2818 2891 l
-2794 2883 l
-2769 2876 l
-2745 2869 l
-2720 2863 l
-2695 2857 l
-2671 2852 l
-2646 2846 l
-2620 2842 l
-2595 2837 l
-2570 2833 l
-2545 2830 l
-2519 2827 l
-2494 2824 l
-2468 2822 l
-2443 2820 l
-2417 2819 l
-2392 2818 l
-2366 2817 l
-2340 2817 l
-2315 2818 l
-2289 2818 l
-2263 2820 l
-2237 2821 l
-2211 2824 l
-2186 2826 l
-2160 2829 l
-2134 2833 l
-2109 2837 l
-2083 2842 l
-2057 2847 l
-2032 2852 l
-2006 2858 l
-1981 2865 l
-1955 2872 l
-1930 2879 l
-1905 2887 l
-1880 2896 l
-1855 2905 l
-1830 2914 l
-1805 2925 l
-1780 2935 l
-1756 2946 l
-1732 2958 l
-1707 2970 l
-1683 2983 l
-1660 2996 l
-1636 3010 l
-1612 3024 l
-1589 3039 l
-1566 3054 l
-1543 3070 l
-1521 3087 l
-1499 3104 l
-1477 3122 l
-1455 3140 l
-1433 3159 l
-1412 3178 l
-1391 3198 l
-1371 3218 l
-1351 3239 l
-1331 3261 l
-1312 3283 l
-1293 3306 l
-1274 3329 l
-1256 3353 l
-1238 3378 l
-1221 3403 l
-1204 3429 l
-1188 3455 l
-1172 3482 l
-1156 3509 l
-1142 3537 l
-1128 3565 l
-1114 3594 l
-1101 3624 l
-1089 3654 l
-1077 3685 l
-1066 3716 l
-1055 3748 l
-1046 3780 l
-1037 3812 l
-1028 3846 l
-1021 3879 l
-1014 3914 l
-1008 3948 l
-1003 3983 l
-999 4019 l
-996 4055 l
-993 4091 l
-992 4128 l
-991 4165 l
-992 4202 l
-993 4239 l
-996 4277 l
-999 4315 l
-1003 4354 l
-1009 4392 l
-1015 4431 l
-1023 4470 l
-1032 4509 l
-1041 4548 l
-1052 4587 l
-1065 4625 l
-1078 4664 l
-1092 4703 l
-1108 4742 l
-1124 4780 l
-1142 4818 l
-1161 4856 l
-1181 4894 l
-1202 4931 l
-1225 4968 l
-1248 5004 l
-1273 5040 l
-1298 5075 l
-1325 5110 l
-1353 5144 l
-1382 5178 l
-1412 5210 l
-1442 5242 l
-1474 5273 l
-1507 5304 l
-1540 5333 l
-1575 5361 l
-1610 5389 l
-1646 5415 l
-1682 5441 l
-1719 5465 l
-1757 5488 l
-1796 5511 l
-1835 5532 l
-1874 5552 l
-1914 5571 l
-1955 5588 l
-1957 5589 l
-1960 5591 l
-1963 5592 l
-1966 5593 l
-1969 5594 l
-1972 5595 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3109 3015 l
-3108 3013 l
-3107 3012 l
-3107 3010 l
-3106 3009 l
-3106 3008 l
-3105 3006 l
-3096 2986 l
-3088 2966 l
-3079 2947 l
-3069 2927 l
-3060 2908 l
-3050 2889 l
-3040 2870 l
-3030 2851 l
-3019 2832 l
-3008 2814 l
-2997 2796 l
-2986 2778 l
-2975 2760 l
-2963 2742 l
-2951 2725 l
-2939 2707 l
-2926 2690 l
-2913 2674 l
-2900 2657 l
-2887 2641 l
-2873 2624 l
-2859 2609 l
-2845 2593 l
-2831 2578 l
-2816 2562 l
-2801 2548 l
-2786 2533 l
-2770 2519 l
-2754 2505 l
-2738 2491 l
-2721 2478 l
-2704 2464 l
-2687 2452 l
-2669 2439 l
-2651 2427 l
-2633 2415 l
-2615 2404 l
-2596 2393 l
-2576 2382 l
-2557 2372 l
-2537 2362 l
-2516 2353 l
-2495 2344 l
-2474 2335 l
-2452 2327 l
-2430 2319 l
-2408 2312 l
-2385 2306 l
-2361 2300 l
-2337 2294 l
-2313 2289 l
-2288 2285 l
-2263 2281 l
-2237 2278 l
-2211 2275 l
-2184 2274 l
-2157 2273 l
-2129 2272 l
-2101 2273 l
-2072 2274 l
-2042 2277 l
-2012 2280 l
-1981 2284 l
-1950 2289 l
-1918 2295 l
-1886 2302 l
-1853 2311 l
-1819 2320 l
-1785 2331 l
-1750 2343 l
-1714 2357 l
-1679 2372 l
-1642 2388 l
-1605 2407 l
-1567 2426 l
-1529 2448 l
-1491 2472 l
-1452 2497 l
-1413 2525 l
-1373 2555 l
-1334 2587 l
-1294 2621 l
-1254 2658 l
-1214 2697 l
-1175 2738 l
-1136 2783 l
-1097 2830 l
-1060 2879 l
-1023 2932 l
-987 2987 l
-952 3045 l
-919 3105 l
-888 3169 l
-859 3234 l
-831 3302 l
-829 3307 l
-828 3312 l
-826 3317 l
-824 3322 l
-822 3327 l
-820 3332 l
-819 3337 l
-817 3342 l
-815 3347 l
-813 3352 l
-811 3357 l
-810 3362 l
-808 3367 l
-806 3373 l
-805 3378 l
-803 3383 l
-801 3388 l
-800 3393 l
-798 3398 l
-796 3403 l
-795 3408 l
-793 3414 l
-792 3419 l
-790 3424 l
-789 3429 l
-787 3434 l
-786 3440 l
-784 3445 l
-783 3450 l
-781 3455 l
-780 3461 l
-778 3466 l
-777 3471 l
-775 3476 l
-774 3482 l
-773 3487 l
-771 3492 l
-770 3498 l
-768 3503 l
-767 3508 l
-766 3514 l
-764 3519 l
-763 3524 l
-762 3530 l
-761 3535 l
-759 3540 l
-758 3546 l
-757 3551 l
-756 3557 l
-755 3562 l
-753 3567 l
-752 3573 l
-751 3578 l
-750 3584 l
-749 3589 l
-748 3595 l
-747 3600 l
-746 3606 l
-745 3611 l
-744 3616 l
-743 3622 l
-742 3627 l
-741 3633 l
-740 3638 l
-739 3644 l
-738 3649 l
-737 3655 l
-736 3660 l
-735 3666 l
-734 3672 l
-733 3677 l
-733 3683 l
-732 3688 l
-731 3694 l
-730 3699 l
-729 3705 l
-729 3710 l
-728 3716 l
-727 3722 l
-727 3727 l
-726 3733 l
-725 3738 l
-725 3744 l
-724 3750 l
-723 3755 l
-723 3761 l
-722 3766 l
-722 3772 l
-721 3778 l
-720 3783 l
-720 3789 l
-719 3794 l
-719 3800 l
-719 3806 l
-718 3811 l
-S
-718 3811 m
-718 3817 l
-717 3823 l
-717 3828 l
-716 3834 l
-716 3839 l
-716 3845 l
-715 3851 l
-715 3856 l
-715 3862 l
-715 3868 l
-714 3873 l
-714 3879 l
-714 3885 l
-714 3890 l
-713 3896 l
-713 3902 l
-713 3907 l
-713 3913 l
-713 3918 l
-713 3924 l
-713 3930 l
-713 3935 l
-713 3941 l
-713 3947 l
-713 3952 l
-713 3958 l
-713 3964 l
-713 3969 l
-713 3975 l
-713 3981 l
-713 3986 l
-713 3992 l
-713 3997 l
-713 4003 l
-713 4009 l
-713 4014 l
-714 4020 l
-714 4026 l
-714 4031 l
-714 4037 l
-715 4042 l
-715 4048 l
-715 4054 l
-715 4059 l
-716 4065 l
-716 4071 l
-716 4076 l
-717 4082 l
-717 4087 l
-718 4093 l
-718 4099 l
-718 4104 l
-719 4110 l
-719 4115 l
-720 4121 l
-720 4126 l
-721 4132 l
-721 4137 l
-722 4143 l
-723 4149 l
-723 4154 l
-724 4160 l
-724 4165 l
-725 4171 l
-726 4176 l
-726 4182 l
-727 4187 l
-728 4193 l
-728 4198 l
-729 4204 l
-730 4209 l
-731 4215 l
-731 4220 l
-732 4226 l
-733 4231 l
-734 4237 l
-735 4242 l
-736 4248 l
-737 4253 l
-737 4258 l
-738 4264 l
-739 4269 l
-740 4275 l
-741 4280 l
-742 4285 l
-743 4291 l
-744 4296 l
-745 4302 l
-746 4307 l
-747 4312 l
-748 4318 l
-749 4323 l
-750 4328 l
-751 4334 l
-753 4339 l
-754 4344 l
-755 4350 l
-756 4355 l
-757 4360 l
-758 4365 l
-760 4371 l
-761 4376 l
-762 4381 l
-763 4386 l
-765 4392 l
-766 4397 l
-767 4402 l
-768 4407 l
-770 4412 l
-771 4418 l
-772 4423 l
-774 4428 l
-775 4433 l
-777 4438 l
-778 4443 l
-799 4514 l
-822 4583 l
-848 4649 l
-875 4713 l
-905 4774 l
-936 4833 l
-968 4889 l
-1001 4943 l
-1036 4994 l
-1071 5042 l
-1107 5088 l
-1143 5131 l
-1180 5171 l
-1217 5210 l
-1254 5245 l
-1291 5279 l
-1328 5310 l
-1365 5340 l
-1401 5367 l
-1438 5392 l
-1474 5416 l
-1510 5438 l
-1545 5458 l
-1580 5476 l
-1614 5493 l
-1648 5508 l
-1682 5522 l
-1715 5535 l
-1747 5546 l
-1779 5556 l
-1811 5565 l
-1842 5573 l
-1872 5580 l
-1902 5586 l
-1932 5591 l
-1961 5595 l
-1963 5595 l
-1965 5595 l
-1967 5596 l
-1969 5596 l
-1971 5596 l
-1973 5596 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3110 3015 l
-3111 3014 l
-3111 3013 l
-3112 3012 l
-3113 3010 l
-3114 3009 l
-3114 3008 l
-3125 2992 l
-3135 2976 l
-3146 2960 l
-3156 2945 l
-3166 2929 l
-3176 2914 l
-3187 2899 l
-3197 2884 l
-3207 2869 l
-3217 2854 l
-3228 2839 l
-3238 2825 l
-3248 2811 l
-3258 2796 l
-3268 2782 l
-3278 2769 l
-3288 2755 l
-3298 2741 l
-3308 2728 l
-3318 2715 l
-3328 2702 l
-3338 2689 l
-3348 2676 l
-3358 2664 l
-3368 2652 l
-3378 2639 l
-3388 2628 l
-3398 2616 l
-3408 2604 l
-3417 2593 l
-3427 2582 l
-3437 2571 l
-3447 2560 l
-3457 2550 l
-3466 2539 l
-3476 2529 l
-3486 2519 l
-3496 2510 l
-3506 2500 l
-3515 2491 l
-3525 2482 l
-3535 2473 l
-3545 2465 l
-3555 2457 l
-3565 2449 l
-3574 2441 l
-3584 2434 l
-3594 2427 l
-3604 2420 l
-3614 2413 l
-3625 2407 l
-3635 2401 l
-3645 2395 l
-3656 2390 l
-3666 2385 l
-3677 2380 l
-3687 2376 l
-3698 2372 l
-3709 2368 l
-3721 2365 l
-3732 2362 l
-3744 2360 l
-3755 2358 l
-3768 2357 l
-3780 2356 l
-3793 2356 l
-3806 2356 l
-3819 2357 l
-3833 2359 l
-3848 2361 l
-3863 2364 l
-3878 2368 l
-3895 2373 l
-3912 2379 l
-3930 2386 l
-3949 2395 l
-3969 2405 l
-3991 2416 l
-4014 2430 l
-4038 2446 l
-4065 2465 l
-4093 2486 l
-4125 2511 l
-4159 2541 l
-4196 2576 l
-4238 2618 l
-4283 2669 l
-4287 2673 l
-4290 2677 l
-4294 2681 l
-4297 2685 l
-4301 2689 l
-4304 2693 l
-4308 2698 l
-4312 2702 l
-4315 2706 l
-4319 2711 l
-4323 2716 l
-4326 2720 l
-4330 2725 l
-4334 2730 l
-4338 2734 l
-4342 2739 l
-4346 2744 l
-4349 2749 l
-4353 2755 l
-4357 2760 l
-4361 2765 l
-4365 2770 l
-4369 2776 l
-4373 2781 l
-4378 2787 l
-4382 2793 l
-4386 2798 l
-4390 2804 l
-4394 2810 l
-4399 2816 l
-4403 2822 l
-4407 2829 l
-4411 2835 l
-4416 2841 l
-4420 2848 l
-4425 2855 l
-4429 2861 l
-4434 2868 l
-4438 2875 l
-4443 2882 l
-4447 2889 l
-4452 2897 l
-4456 2904 l
-4461 2912 l
-4466 2919 l
-4470 2927 l
-4475 2935 l
-4480 2943 l
-4485 2951 l
-4489 2960 l
-4494 2968 l
-4499 2977 l
-4504 2986 l
-4509 2994 l
-4514 3003 l
-4519 3013 l
-4524 3022 l
-4529 3032 l
-4534 3041 l
-4539 3051 l
-4544 3061 l
-4549 3071 l
-4554 3082 l
-4559 3092 l
-4564 3103 l
-4569 3114 l
-4574 3125 l
-4579 3136 l
-4584 3148 l
-4589 3159 l
-4594 3171 l
-4599 3183 l
-4605 3196 l
-4610 3208 l
-4615 3221 l
-4620 3234 l
-4625 3247 l
-4630 3261 l
-4635 3274 l
-4640 3288 l
-4645 3302 l
-4649 3317 l
-4654 3331 l
-4659 3346 l
-4664 3362 l
-4669 3377 l
-4673 3393 l
-4678 3409 l
-4682 3425 l
-4687 3441 l
-4691 3458 l
-4695 3475 l
-4700 3493 l
-4704 3510 l
-4708 3528 l
-4712 3547 l
-4715 3565 l
-4719 3584 l
-4723 3603 l
-4726 3623 l
-4729 3643 l
-4732 3663 l
-4735 3683 l
-S
-4735 3683 m
-4738 3704 l
-4741 3725 l
-4743 3747 l
-4745 3768 l
-4747 3790 l
-4749 3813 l
-4751 3835 l
-4752 3858 l
-4753 3881 l
-4754 3905 l
-4754 3929 l
-4755 3953 l
-4755 3978 l
-4754 4002 l
-4754 4027 l
-4753 4053 l
-4751 4078 l
-4750 4104 l
-4748 4130 l
-4745 4157 l
-4743 4183 l
-4740 4210 l
-4736 4237 l
-4732 4264 l
-4728 4292 l
-4723 4319 l
-4718 4347 l
-4713 4375 l
-4707 4403 l
-4701 4431 l
-4694 4459 l
-4686 4488 l
-4679 4516 l
-4671 4545 l
-4662 4573 l
-4653 4602 l
-4643 4630 l
-4633 4659 l
-4623 4687 l
-4612 4716 l
-4600 4744 l
-4589 4772 l
-4576 4800 l
-4564 4828 l
-4550 4856 l
-4537 4883 l
-4523 4911 l
-4509 4938 l
-4494 4965 l
-4479 4992 l
-4463 5018 l
-4447 5044 l
-4431 5070 l
-4414 5095 l
-4397 5121 l
-4380 5146 l
-4363 5170 l
-4345 5194 l
-4327 5218 l
-4309 5241 l
-4290 5264 l
-4271 5287 l
-4252 5309 l
-4233 5331 l
-4214 5352 l
-4195 5373 l
-4175 5393 l
-4155 5413 l
-4136 5433 l
-4116 5452 l
-4096 5471 l
-4076 5489 l
-4056 5507 l
-4036 5524 l
-4016 5541 l
-3996 5558 l
-3976 5574 l
-3956 5589 l
-3936 5604 l
-3916 5619 l
-3896 5634 l
-3876 5648 l
-3856 5661 l
-3837 5674 l
-3817 5687 l
-3798 5700 l
-3778 5712 l
-3759 5723 l
-3740 5735 l
-3721 5746 l
-3702 5756 l
-3684 5767 l
-3665 5777 l
-3647 5786 l
-3629 5795 l
-3611 5804 l
-3593 5813 l
-3575 5822 l
-3558 5830 l
-3540 5838 l
-3523 5845 l
-3506 5852 l
-3489 5859 l
-3473 5866 l
-3456 5873 l
-3440 5879 l
-3424 5885 l
-3408 5891 l
-3392 5897 l
-3377 5902 l
-3362 5907 l
-3346 5912 l
-3331 5917 l
-3317 5922 l
-3302 5926 l
-3288 5931 l
-3273 5935 l
-3259 5939 l
-3246 5943 l
-3232 5946 l
-3218 5950 l
-3205 5953 l
-3192 5956 l
-3179 5960 l
-3166 5963 l
-3153 5965 l
-3141 5968 l
-3128 5971 l
-3116 5973 l
-3104 5976 l
-3092 5978 l
-3081 5980 l
-3069 5982 l
-3058 5984 l
-3046 5986 l
-3035 5988 l
-3024 5989 l
-3014 5991 l
-3003 5993 l
-2992 5994 l
-2982 5995 l
-2972 5997 l
-2962 5998 l
-2952 5999 l
-2942 6000 l
-2932 6001 l
-2923 6002 l
-2913 6003 l
-2904 6004 l
-2895 6005 l
-2885 6006 l
-2876 6006 l
-2868 6007 l
-2859 6008 l
-2850 6008 l
-2842 6009 l
-2833 6009 l
-2825 6009 l
-2817 6010 l
-2809 6010 l
-2801 6010 l
-2793 6011 l
-2785 6011 l
-2777 6011 l
-2770 6011 l
-2762 6011 l
-2755 6011 l
-2747 6012 l
-2740 6012 l
-2733 6012 l
-2726 6012 l
-2719 6011 l
-2712 6011 l
-2705 6011 l
-2699 6011 l
-2692 6011 l
-2685 6011 l
-2679 6011 l
-2673 6010 l
-2666 6010 l
-2660 6010 l
-2654 6010 l
-2648 6009 l
-2642 6009 l
-2636 6009 l
-2630 6008 l
-2624 6008 l
-2618 6008 l
-2613 6007 l
-2607 6007 l
-2601 6006 l
-2596 6006 l
-2590 6006 l
-2585 6005 l
-2580 6005 l
-2575 6004 l
-2569 6004 l
-2564 6003 l
-2559 6003 l
-S
-2559 6003 m
-2554 6002 l
-2549 6002 l
-2544 6001 l
-2539 6001 l
-2535 6000 l
-2530 5999 l
-2468 5991 l
-2415 5981 l
-2369 5971 l
-2328 5960 l
-2292 5950 l
-2260 5939 l
-2232 5928 l
-2206 5918 l
-2184 5907 l
-2163 5896 l
-2144 5886 l
-2127 5875 l
-2112 5865 l
-2098 5855 l
-2085 5844 l
-2073 5834 l
-2063 5823 l
-2053 5813 l
-2044 5803 l
-2036 5792 l
-2028 5782 l
-2021 5771 l
-2015 5761 l
-2010 5750 l
-2004 5739 l
-2000 5728 l
-1996 5717 l
-1992 5706 l
-1989 5695 l
-1986 5684 l
-1983 5673 l
-1981 5661 l
-1979 5650 l
-1978 5638 l
-1977 5626 l
-1976 5615 l
-1975 5603 l
-1975 5602 l
-1975 5601 l
-1975 5600 l
-1975 5599 l
-1975 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3109 3016 m
-3109 3016 l
-3109 3016 l
-3111 3016 l
-3113 3016 l
-3114 3016 l
-3116 3015 l
-3117 3015 l
-3119 3015 l
-3121 3015 l
-3144 3012 l
-3167 3010 l
-3190 3009 l
-3213 3007 l
-3236 3006 l
-3260 3005 l
-3283 3005 l
-3306 3005 l
-3329 3005 l
-3352 3006 l
-3375 3007 l
-3398 3008 l
-3421 3010 l
-3444 3012 l
-3467 3014 l
-3490 3017 l
-3513 3021 l
-3536 3024 l
-3559 3028 l
-3582 3033 l
-3604 3038 l
-3627 3043 l
-3650 3049 l
-3672 3055 l
-3695 3061 l
-3717 3068 l
-3739 3076 l
-3761 3084 l
-3784 3092 l
-3806 3101 l
-3827 3110 l
-3849 3120 l
-3871 3130 l
-3892 3141 l
-3913 3152 l
-3935 3163 l
-3956 3176 l
-3977 3188 l
-3997 3201 l
-4018 3215 l
-4038 3229 l
-4058 3244 l
-4078 3260 l
-4098 3276 l
-4117 3292 l
-4136 3309 l
-4155 3327 l
-4174 3345 l
-4193 3364 l
-4211 3384 l
-4228 3404 l
-4246 3425 l
-4263 3446 l
-4280 3469 l
-4296 3491 l
-4312 3515 l
-4328 3539 l
-4343 3564 l
-4358 3590 l
-4372 3616 l
-4386 3643 l
-4399 3671 l
-4412 3700 l
-4424 3729 l
-4435 3759 l
-4446 3790 l
-4456 3822 l
-4466 3855 l
-4475 3888 l
-4482 3922 l
-4490 3957 l
-4496 3993 l
-4501 4030 l
-4506 4067 l
-4509 4106 l
-4511 4145 l
-4513 4185 l
-4513 4225 l
-4512 4267 l
-4509 4309 l
-4506 4352 l
-4501 4395 l
-4494 4439 l
-4486 4484 l
-4477 4530 l
-4466 4575 l
-4454 4622 l
-4439 4669 l
-4423 4716 l
-4406 4763 l
-4386 4811 l
-4365 4858 l
-4342 4906 l
-4317 4954 l
-4290 5001 l
-4261 5048 l
-4230 5095 l
-4197 5141 l
-4162 5187 l
-4126 5232 l
-4087 5276 l
-4047 5319 l
-4005 5361 l
-3962 5402 l
-3917 5441 l
-3870 5479 l
-3822 5515 l
-3773 5550 l
-3722 5583 l
-3670 5614 l
-3618 5644 l
-3565 5671 l
-3511 5697 l
-3456 5720 l
-3401 5742 l
-3346 5761 l
-3291 5779 l
-3235 5794 l
-3180 5808 l
-3125 5819 l
-3070 5829 l
-3016 5836 l
-2962 5842 l
-2909 5846 l
-2856 5848 l
-2804 5849 l
-2753 5848 l
-2703 5845 l
-2654 5841 l
-2606 5835 l
-2559 5828 l
-2513 5820 l
-2468 5811 l
-2425 5800 l
-2382 5789 l
-2341 5776 l
-2300 5762 l
-2261 5748 l
-2223 5733 l
-2187 5717 l
-2151 5700 l
-2116 5682 l
-2083 5664 l
-2051 5646 l
-2020 5626 l
-1989 5607 l
-1987 5605 l
-1985 5604 l
-1983 5602 l
-1981 5601 l
-1979 5599 l
-1977 5598 l
-1975 5597 l
-1975 5597 l
-1975 5597 l
-S
-3586 3410 m
-3585 3411 l
-3584 3412 l
-3583 3413 l
-3571 3424 l
-3559 3435 l
-3547 3445 l
-3533 3455 l
-3520 3464 l
-3506 3473 l
-3491 3481 l
-3477 3489 l
-3462 3496 l
-3446 3502 l
-3430 3509 l
-3414 3514 l
-3398 3519 l
-3381 3524 l
-3364 3528 l
-3347 3531 l
-3330 3534 l
-3312 3537 l
-3294 3539 l
-3276 3541 l
-3258 3542 l
-3240 3542 l
-3222 3542 l
-3204 3542 l
-3185 3541 l
-3167 3539 l
-3148 3537 l
-3129 3535 l
-3111 3532 l
-3092 3529 l
-3074 3525 l
-3055 3521 l
-3037 3516 l
-3018 3511 l
-3000 3506 l
-2982 3500 l
-2963 3494 l
-2945 3487 l
-2927 3480 l
-2910 3472 l
-2892 3464 l
-2875 3456 l
-2858 3447 l
-2841 3438 l
-2824 3429 l
-2808 3419 l
-2791 3409 l
-2775 3398 l
-2760 3388 l
-2744 3377 l
-2729 3365 l
-2715 3353 l
-2700 3341 l
-2686 3329 l
-2673 3316 l
-2660 3303 l
-2647 3290 l
-2634 3277 l
-2622 3263 l
-2611 3249 l
-2600 3235 l
-2589 3220 l
-2579 3206 l
-2570 3191 l
-2561 3176 l
-2552 3161 l
-2544 3145 l
-2537 3130 l
-2530 3114 l
-2524 3098 l
-2518 3082 l
-2513 3066 l
-2509 3050 l
-2505 3034 l
-2502 3018 l
-2500 3002 l
-2498 2985 l
-2497 2969 l
-2496 2953 l
-2497 2937 l
-2498 2920 l
-2500 2904 l
-2502 2888 l
-2506 2872 l
-2510 2856 l
-2514 2841 l
-2520 2825 l
-2526 2810 l
-2534 2795 l
-2542 2780 l
-2550 2765 l
-2560 2751 l
-2570 2737 l
-2581 2723 l
-2593 2709 l
-2606 2697 l
-2620 2684 l
-2634 2672 l
-2649 2660 l
-2665 2649 l
-2681 2638 l
-2699 2628 l
-2717 2619 l
-2735 2610 l
-2755 2602 l
-2774 2594 l
-2795 2587 l
-2816 2581 l
-2838 2576 l
-2860 2571 l
-2883 2567 l
-2906 2564 l
-2930 2562 l
-2954 2561 l
-2978 2560 l
-3003 2561 l
-3028 2562 l
-3053 2564 l
-3078 2567 l
-3103 2571 l
-3128 2576 l
-3154 2581 l
-3179 2588 l
-3204 2596 l
-3229 2604 l
-3253 2613 l
-3277 2623 l
-3301 2634 l
-3325 2646 l
-3348 2658 l
-3371 2671 l
-3393 2685 l
-3414 2700 l
-3435 2715 l
-3455 2730 l
-3475 2747 l
-3493 2764 l
-3511 2781 l
-3529 2799 l
-3545 2817 l
-3560 2835 l
-3575 2854 l
-3589 2873 l
-3602 2893 l
-3614 2912 l
-3625 2932 l
-3635 2951 l
-3644 2971 l
-3652 2991 l
-3659 3011 l
-3666 3031 l
-3671 3050 l
-3676 3070 l
-3679 3089 l
-3682 3109 l
-3684 3128 l
-3685 3146 l
-3685 3165 l
-3684 3183 l
-3683 3201 l
-3681 3219 l
-3677 3236 l
-3674 3253 l
-3669 3269 l
-3664 3285 l
-3657 3301 l
-3651 3316 l
-3643 3331 l
-3635 3346 l
-3626 3359 l
-3617 3373 l
-3607 3386 l
-3597 3398 l
-3586 3410 l
-S
-3881 3956 m
-3879 3957 l
-3877 3958 l
-3875 3960 l
-3851 3975 l
-3826 3989 l
-3800 4003 l
-3774 4016 l
-3748 4027 l
-3721 4038 l
-3693 4048 l
-3665 4057 l
-3637 4065 l
-3609 4073 l
-3580 4079 l
-3551 4085 l
-3521 4090 l
-3492 4094 l
-3462 4097 l
-3432 4100 l
-3402 4102 l
-3371 4103 l
-3341 4104 l
-3310 4103 l
-3279 4102 l
-3248 4101 l
-3217 4098 l
-3186 4095 l
-3155 4091 l
-3124 4087 l
-3093 4082 l
-3061 4076 l
-3030 4070 l
-2999 4063 l
-2968 4056 l
-2937 4047 l
-2907 4039 l
-2876 4029 l
-2845 4019 l
-2815 4009 l
-2785 3998 l
-2755 3986 l
-2725 3974 l
-2695 3962 l
-2666 3948 l
-2637 3935 l
-2608 3920 l
-2579 3906 l
-2551 3890 l
-2523 3875 l
-2495 3858 l
-2468 3842 l
-2441 3824 l
-2415 3807 l
-2389 3789 l
-2363 3770 l
-2338 3751 l
-2313 3731 l
-2288 3711 l
-2265 3691 l
-2241 3670 l
-2219 3649 l
-2196 3627 l
-2175 3605 l
-2154 3583 l
-2133 3560 l
-2113 3537 l
-2094 3514 l
-2076 3490 l
-2058 3465 l
-2041 3441 l
-2025 3416 l
-2009 3390 l
-1994 3365 l
-1981 3339 l
-1967 3313 l
-1955 3286 l
-1944 3259 l
-1934 3232 l
-1924 3205 l
-1916 3177 l
-1908 3149 l
-1902 3121 l
-1897 3092 l
-1892 3064 l
-1889 3035 l
-1888 3006 l
-1887 2977 l
-1888 2947 l
-1889 2918 l
-1893 2888 l
-1897 2859 l
-1903 2829 l
-1911 2799 l
-1920 2770 l
-1930 2740 l
-1943 2710 l
-1956 2681 l
-1972 2652 l
-1989 2623 l
-2008 2594 l
-2029 2565 l
-2051 2537 l
-2076 2510 l
-2102 2483 l
-2131 2456 l
-2161 2430 l
-2194 2405 l
-2228 2381 l
-2265 2358 l
-2304 2336 l
-2345 2316 l
-2388 2296 l
-2432 2278 l
-2479 2262 l
-2528 2248 l
-2579 2235 l
-2632 2225 l
-2686 2216 l
-2742 2210 l
-2799 2206 l
-2857 2205 l
-2917 2207 l
-2977 2211 l
-3038 2218 l
-3100 2228 l
-3161 2241 l
-3223 2256 l
-3284 2275 l
-3344 2296 l
-3404 2320 l
-3463 2347 l
-3520 2376 l
-3575 2408 l
-3629 2442 l
-3681 2478 l
-3730 2516 l
-3777 2556 l
-3822 2597 l
-3864 2640 l
-3904 2683 l
-3941 2728 l
-3975 2773 l
-4006 2818 l
-4035 2864 l
-4061 2910 l
-4084 2956 l
-4104 3002 l
-4122 3047 l
-4138 3092 l
-4151 3136 l
-4162 3180 l
-4170 3223 l
-4177 3265 l
-4181 3306 l
-4183 3346 l
-4183 3385 l
-4182 3423 l
-4179 3460 l
-4174 3496 l
-4167 3531 l
-4160 3565 l
-4150 3598 l
-4139 3629 l
-4127 3660 l
-4114 3689 l
-4100 3717 l
-4084 3744 l
-4068 3770 l
-4050 3795 l
-4032 3819 l
-4013 3842 l
-3993 3863 l
-3972 3884 l
-3950 3903 l
-3928 3922 l
-3904 3939 l
-3881 3956 l
-S
-3924 4591 m
-3922 4592 l
-3920 4593 l
-3917 4593 l
-3884 4604 l
-3851 4614 l
-3817 4623 l
-3783 4631 l
-3749 4638 l
-3715 4645 l
-3680 4650 l
-3645 4655 l
-3609 4659 l
-3574 4662 l
-3538 4664 l
-3502 4666 l
-3466 4667 l
-3430 4667 l
-3394 4666 l
-3358 4665 l
-3321 4663 l
-3284 4661 l
-3248 4657 l
-3211 4653 l
-3174 4649 l
-3137 4643 l
-3100 4638 l
-3063 4631 l
-3026 4624 l
-2989 4616 l
-2952 4608 l
-2916 4599 l
-2879 4590 l
-2842 4580 l
-2805 4569 l
-2769 4558 l
-2732 4547 l
-2696 4534 l
-2659 4522 l
-2623 4509 l
-2587 4495 l
-2552 4481 l
-2516 4466 l
-2481 4451 l
-2445 4435 l
-2411 4419 l
-2376 4402 l
-2341 4385 l
-2307 4367 l
-2273 4349 l
-2240 4331 l
-2206 4312 l
-2174 4292 l
-2141 4272 l
-2109 4252 l
-2077 4231 l
-2045 4210 l
-2014 4188 l
-1984 4166 l
-1953 4144 l
-1924 4121 l
-1894 4098 l
-1865 4074 l
-1837 4050 l
-1809 4026 l
-1782 4001 l
-1755 3976 l
-1729 3950 l
-1703 3925 l
-1678 3898 l
-1654 3871 l
-1630 3844 l
-1607 3817 l
-1584 3789 l
-1563 3761 l
-1542 3732 l
-1521 3703 l
-1502 3674 l
-1483 3644 l
-1465 3614 l
-1448 3584 l
-1432 3553 l
-1417 3522 l
-1402 3490 l
-1389 3458 l
-1376 3426 l
-1365 3393 l
-1354 3360 l
-1345 3326 l
-1337 3292 l
-1330 3257 l
-1325 3222 l
-1320 3187 l
-1317 3151 l
-1316 3114 l
-1316 3078 l
-1317 3040 l
-1321 3002 l
-1326 2964 l
-1332 2925 l
-1341 2886 l
-1352 2845 l
-1365 2805 l
-1381 2764 l
-1399 2722 l
-1419 2680 l
-1443 2637 l
-1469 2594 l
-1499 2551 l
-1533 2507 l
-1570 2462 l
-1573 2459 l
-1576 2456 l
-1579 2453 l
-1582 2450 l
-1585 2447 l
-1588 2443 l
-1590 2440 l
-1593 2437 l
-1596 2434 l
-1599 2431 l
-1603 2427 l
-1606 2424 l
-1609 2421 l
-1612 2418 l
-1615 2415 l
-1618 2412 l
-1621 2408 l
-1624 2405 l
-1628 2402 l
-1631 2399 l
-1634 2396 l
-1638 2393 l
-1641 2389 l
-1644 2386 l
-1648 2383 l
-1651 2380 l
-1654 2377 l
-1658 2374 l
-1661 2370 l
-1665 2367 l
-1668 2364 l
-1672 2361 l
-1675 2358 l
-1679 2355 l
-1683 2351 l
-1686 2348 l
-1690 2345 l
-1694 2342 l
-1697 2339 l
-1701 2336 l
-1705 2332 l
-1709 2329 l
-1712 2326 l
-1716 2323 l
-1720 2320 l
-1724 2317 l
-1728 2314 l
-1732 2310 l
-1736 2307 l
-1740 2304 l
-1744 2301 l
-1748 2298 l
-1752 2295 l
-1756 2292 l
-1760 2289 l
-1765 2286 l
-1769 2282 l
-1773 2279 l
-1777 2276 l
-1782 2273 l
-1786 2270 l
-1790 2267 l
-1795 2264 l
-1799 2261 l
-1803 2258 l
-1808 2255 l
-1812 2252 l
-1817 2249 l
-1822 2245 l
-1826 2242 l
-1831 2239 l
-1835 2236 l
-1840 2233 l
-1845 2230 l
-1849 2227 l
-1854 2224 l
-1859 2221 l
-1864 2218 l
-1869 2215 l
-1874 2212 l
-1879 2209 l
-1883 2206 l
-1888 2203 l
-1893 2200 l
-1899 2198 l
-1904 2195 l
-1909 2192 l
-1914 2189 l
-1919 2186 l
-S
-1919 2186 m
-1924 2183 l
-1930 2180 l
-1935 2177 l
-1940 2174 l
-1945 2171 l
-1951 2169 l
-1956 2166 l
-1962 2163 l
-1967 2160 l
-1973 2157 l
-1978 2154 l
-1984 2152 l
-1989 2149 l
-1995 2146 l
-2001 2143 l
-2006 2141 l
-2012 2138 l
-2018 2135 l
-2024 2132 l
-2030 2130 l
-2036 2127 l
-2041 2124 l
-2047 2122 l
-2053 2119 l
-2059 2116 l
-2065 2114 l
-2072 2111 l
-2078 2109 l
-2084 2106 l
-2090 2103 l
-2096 2101 l
-2103 2098 l
-2109 2096 l
-2115 2093 l
-2122 2091 l
-2128 2088 l
-2135 2086 l
-2141 2084 l
-2148 2081 l
-2154 2079 l
-2161 2076 l
-2167 2074 l
-2174 2072 l
-2181 2069 l
-2187 2067 l
-2194 2065 l
-2201 2063 l
-2208 2060 l
-2215 2058 l
-2222 2056 l
-2229 2054 l
-2236 2052 l
-2243 2050 l
-2250 2048 l
-2257 2045 l
-2264 2043 l
-2271 2041 l
-2279 2039 l
-2286 2037 l
-2293 2035 l
-2300 2034 l
-2308 2032 l
-2315 2030 l
-2323 2028 l
-2330 2026 l
-2338 2024 l
-2345 2022 l
-2353 2021 l
-2360 2019 l
-2368 2017 l
-2376 2016 l
-2383 2014 l
-2391 2012 l
-2399 2011 l
-2407 2009 l
-2415 2008 l
-2423 2006 l
-2431 2005 l
-2439 2004 l
-2447 2002 l
-2455 2001 l
-2463 1999 l
-2471 1998 l
-2479 1997 l
-2487 1996 l
-2495 1995 l
-2504 1993 l
-2512 1992 l
-2520 1991 l
-2529 1990 l
-2537 1989 l
-2545 1988 l
-2554 1987 l
-2562 1986 l
-2571 1986 l
-2579 1985 l
-2588 1984 l
-2597 1983 l
-2605 1983 l
-2614 1982 l
-2623 1981 l
-2631 1981 l
-2640 1980 l
-2649 1980 l
-2658 1979 l
-2667 1979 l
-2676 1978 l
-2684 1978 l
-2693 1978 l
-2702 1978 l
-2711 1977 l
-2720 1977 l
-2729 1977 l
-2739 1977 l
-2748 1977 l
-2757 1977 l
-2766 1977 l
-2775 1977 l
-2784 1977 l
-2794 1978 l
-2803 1978 l
-2812 1978 l
-2821 1979 l
-2831 1979 l
-2840 1979 l
-2849 1980 l
-2859 1980 l
-2868 1981 l
-2878 1982 l
-2887 1982 l
-2896 1983 l
-2906 1984 l
-2915 1985 l
-2925 1986 l
-2935 1987 l
-2944 1988 l
-2954 1989 l
-2963 1990 l
-2973 1991 l
-2982 1992 l
-2992 1993 l
-3002 1995 l
-3011 1996 l
-3021 1998 l
-3031 1999 l
-3040 2001 l
-3050 2002 l
-3060 2004 l
-3069 2006 l
-3079 2007 l
-3089 2009 l
-3098 2011 l
-3108 2013 l
-3118 2015 l
-3128 2017 l
-3137 2019 l
-3147 2021 l
-3157 2023 l
-3167 2026 l
-3176 2028 l
-3186 2030 l
-3196 2033 l
-3206 2035 l
-3215 2038 l
-3225 2040 l
-3235 2043 l
-3245 2045 l
-3254 2048 l
-3264 2051 l
-3274 2054 l
-3284 2057 l
-3293 2060 l
-3303 2063 l
-3313 2066 l
-3322 2069 l
-3332 2072 l
-3342 2075 l
-3351 2079 l
-3361 2082 l
-3371 2085 l
-3380 2089 l
-3390 2092 l
-3399 2096 l
-3409 2100 l
-3419 2103 l
-3428 2107 l
-3438 2111 l
-3447 2115 l
-3457 2118 l
-3466 2122 l
-3476 2126 l
-3485 2130 l
-3494 2135 l
-3504 2139 l
-3513 2143 l
-3522 2147 l
-3532 2151 l
-3541 2156 l
-3550 2160 l
-S
-3550 2160 m
-3559 2165 l
-3569 2169 l
-3578 2174 l
-3587 2178 l
-3596 2183 l
-3605 2187 l
-3614 2192 l
-3623 2197 l
-3632 2202 l
-3641 2207 l
-3650 2212 l
-3659 2217 l
-3668 2222 l
-3677 2227 l
-3686 2232 l
-3694 2237 l
-3703 2242 l
-3712 2247 l
-3720 2252 l
-3729 2258 l
-3738 2263 l
-3746 2268 l
-3755 2274 l
-3763 2279 l
-3772 2285 l
-3780 2290 l
-3788 2296 l
-3797 2302 l
-3805 2307 l
-3813 2313 l
-3821 2319 l
-3829 2324 l
-3838 2330 l
-3846 2336 l
-3854 2342 l
-3862 2348 l
-3869 2354 l
-3877 2360 l
-3885 2366 l
-3893 2372 l
-3901 2378 l
-3908 2384 l
-3916 2390 l
-3924 2396 l
-3931 2402 l
-3939 2408 l
-3946 2415 l
-3954 2421 l
-3961 2427 l
-3968 2433 l
-3976 2440 l
-3983 2446 l
-3990 2452 l
-3997 2459 l
-4004 2465 l
-4011 2472 l
-4018 2478 l
-4025 2485 l
-4032 2491 l
-4039 2498 l
-4045 2504 l
-4052 2511 l
-4059 2517 l
-4065 2524 l
-4072 2530 l
-4079 2537 l
-4085 2544 l
-4091 2550 l
-4098 2557 l
-4104 2564 l
-4110 2570 l
-4117 2577 l
-4123 2584 l
-4129 2590 l
-4135 2597 l
-4141 2604 l
-4147 2611 l
-4153 2617 l
-4159 2624 l
-4165 2631 l
-4170 2638 l
-4176 2645 l
-4182 2651 l
-4187 2658 l
-4193 2665 l
-4198 2672 l
-4204 2679 l
-4209 2686 l
-4215 2692 l
-4220 2699 l
-4225 2706 l
-4230 2713 l
-4235 2720 l
-4241 2727 l
-4246 2734 l
-4251 2740 l
-4256 2747 l
-4260 2754 l
-4265 2761 l
-4270 2768 l
-4275 2775 l
-4280 2782 l
-4284 2788 l
-4289 2795 l
-4293 2802 l
-4298 2809 l
-4302 2816 l
-4307 2823 l
-4311 2829 l
-4316 2836 l
-4320 2843 l
-4324 2850 l
-4328 2857 l
-4332 2864 l
-4337 2870 l
-4341 2877 l
-4345 2884 l
-4349 2891 l
-4352 2898 l
-4356 2904 l
-4360 2911 l
-4364 2918 l
-4368 2925 l
-4371 2931 l
-4375 2938 l
-4379 2945 l
-4382 2952 l
-4386 2958 l
-4389 2965 l
-4393 2972 l
-4396 2978 l
-4399 2985 l
-4403 2992 l
-4406 2998 l
-4409 3005 l
-4412 3011 l
-4415 3018 l
-4418 3025 l
-4421 3031 l
-4425 3038 l
-4427 3044 l
-4430 3051 l
-4433 3057 l
-4436 3064 l
-4439 3070 l
-4442 3077 l
-4444 3083 l
-4447 3090 l
-4450 3096 l
-4452 3103 l
-4455 3109 l
-4458 3115 l
-4460 3122 l
-4463 3128 l
-4465 3135 l
-4467 3141 l
-4470 3147 l
-4472 3154 l
-4474 3160 l
-4477 3166 l
-4479 3172 l
-4481 3179 l
-4483 3185 l
-4485 3191 l
-4487 3197 l
-4489 3203 l
-4491 3210 l
-4493 3216 l
-4495 3222 l
-4497 3228 l
-4499 3234 l
-4501 3240 l
-4503 3246 l
-4505 3252 l
-4506 3258 l
-4508 3264 l
-4510 3270 l
-4512 3276 l
-4513 3282 l
-4515 3288 l
-4516 3294 l
-4518 3300 l
-4519 3306 l
-4521 3312 l
-4522 3318 l
-4524 3323 l
-4525 3329 l
-4527 3335 l
-4528 3341 l
-4529 3347 l
-4530 3352 l
-4532 3358 l
-4533 3364 l
-4534 3369 l
-4535 3375 l
-4536 3381 l
-4538 3386 l
-4539 3392 l
-4540 3397 l
-S
-4540 3397 m
-4541 3403 l
-4542 3409 l
-4543 3414 l
-4544 3420 l
-4545 3425 l
-4546 3431 l
-4546 3436 l
-4547 3442 l
-4548 3447 l
-4549 3452 l
-4550 3458 l
-4551 3463 l
-4551 3469 l
-4552 3474 l
-4553 3479 l
-4553 3484 l
-4554 3490 l
-4555 3495 l
-4555 3500 l
-4556 3505 l
-4556 3511 l
-4557 3516 l
-4558 3521 l
-4558 3526 l
-4559 3531 l
-4559 3536 l
-4559 3542 l
-4560 3547 l
-4560 3552 l
-4561 3557 l
-4561 3562 l
-4561 3567 l
-4562 3572 l
-4562 3577 l
-4562 3582 l
-4562 3587 l
-4563 3592 l
-4563 3596 l
-4563 3601 l
-4563 3606 l
-4563 3611 l
-4564 3616 l
-4564 3621 l
-4564 3625 l
-4564 3630 l
-4564 3635 l
-4564 3640 l
-4564 3644 l
-4564 3649 l
-4564 3654 l
-4564 3658 l
-4564 3663 l
-4564 3668 l
-4564 3672 l
-4564 3677 l
-4564 3682 l
-4564 3686 l
-4563 3691 l
-4563 3695 l
-4560 3757 l
-4553 3815 l
-4544 3871 l
-4533 3923 l
-4520 3973 l
-4505 4020 l
-4488 4064 l
-4470 4106 l
-4451 4146 l
-4430 4184 l
-4408 4220 l
-4385 4254 l
-4361 4285 l
-4337 4316 l
-4311 4344 l
-4285 4371 l
-4258 4396 l
-4230 4420 l
-4202 4443 l
-4173 4464 l
-4144 4484 l
-4114 4503 l
-4083 4520 l
-4053 4536 l
-4021 4552 l
-3989 4566 l
-3957 4579 l
-3925 4591 l
-S
-3638 5218 m
-3636 5218 l
-3634 5218 l
-3632 5218 l
-3601 5218 l
-3570 5217 l
-3539 5216 l
-3507 5215 l
-3476 5213 l
-3443 5211 l
-3411 5208 l
-3379 5205 l
-3346 5202 l
-3313 5198 l
-3280 5194 l
-3246 5189 l
-3213 5184 l
-3179 5179 l
-3145 5173 l
-3111 5167 l
-3077 5160 l
-3043 5153 l
-3008 5146 l
-2974 5138 l
-2939 5130 l
-2905 5121 l
-2870 5112 l
-2835 5103 l
-2800 5093 l
-2766 5083 l
-2731 5073 l
-2696 5062 l
-2661 5051 l
-2626 5040 l
-2591 5028 l
-2556 5016 l
-2522 5003 l
-2487 4990 l
-2452 4977 l
-2418 4963 l
-2383 4950 l
-2349 4935 l
-2314 4921 l
-2280 4906 l
-2246 4891 l
-2212 4876 l
-2179 4860 l
-2145 4844 l
-2112 4828 l
-2079 4811 l
-2046 4794 l
-2013 4777 l
-1980 4760 l
-1948 4742 l
-1916 4724 l
-1884 4706 l
-1853 4687 l
-1821 4669 l
-1790 4650 l
-1760 4631 l
-1729 4611 l
-1699 4592 l
-1669 4572 l
-1640 4552 l
-1611 4532 l
-1582 4512 l
-1554 4491 l
-1526 4471 l
-1498 4450 l
-1471 4429 l
-1444 4408 l
-1418 4386 l
-1392 4365 l
-1366 4343 l
-1341 4322 l
-1316 4300 l
-1292 4278 l
-1268 4256 l
-1245 4234 l
-1222 4211 l
-1200 4189 l
-1178 4167 l
-1156 4144 l
-1136 4122 l
-1115 4099 l
-1095 4077 l
-1076 4054 l
-1057 4031 l
-1039 4009 l
-1021 3986 l
-1004 3963 l
-987 3940 l
-971 3918 l
-956 3895 l
-941 3872 l
-926 3850 l
-912 3827 l
-899 3804 l
-886 3782 l
-874 3759 l
-863 3737 l
-852 3714 l
-842 3692 l
-832 3670 l
-823 3648 l
-814 3626 l
-807 3604 l
-799 3582 l
-793 3560 l
-787 3539 l
-781 3517 l
-777 3496 l
-773 3475 l
-769 3454 l
-766 3433 l
-764 3412 l
-763 3391 l
-762 3371 l
-761 3350 l
-762 3330 l
-763 3310 l
-765 3290 l
-767 3270 l
-770 3250 l
-774 3230 l
-779 3210 l
-785 3189 l
-792 3167 l
-802 3140 l
-802 3138 l
-803 3136 l
-804 3134 l
-805 3131 l
-806 3129 l
-807 3126 l
-808 3124 l
-810 3121 l
-811 3118 l
-812 3115 l
-814 3112 l
-815 3108 l
-817 3105 l
-819 3100 l
-820 3096 l
-823 3091 l
-825 3086 l
-828 3080 l
-831 3073 l
-835 3065 l
-840 3055 l
-845 3044 l
-852 3030 l
-862 3011 l
-875 2987 l
-894 2951 l
-896 2948 l
-898 2945 l
-899 2942 l
-901 2938 l
-903 2935 l
-906 2931 l
-908 2927 l
-910 2923 l
-912 2919 l
-915 2915 l
-918 2910 l
-920 2906 l
-923 2901 l
-926 2896 l
-929 2891 l
-933 2885 l
-936 2880 l
-940 2874 l
-944 2868 l
-948 2861 l
-952 2854 l
-956 2847 l
-961 2840 l
-966 2832 l
-972 2823 l
-978 2815 l
-984 2806 l
-990 2796 l
-998 2785 l
-1005 2774 l
-1013 2763 l
-1022 2750 l
-1032 2737 l
-1042 2723 l
-1054 2708 l
-1066 2692 l
-1080 2674 l
-1095 2655 l
-1112 2635 l
-1131 2613 l
-1152 2589 l
-1175 2563 l
-1202 2535 l
-1232 2504 l
-1267 2470 l
-S
-1267 2470 m
-1307 2432 l
-1353 2391 l
-1408 2346 l
-1412 2343 l
-1417 2339 l
-1421 2336 l
-1425 2332 l
-1430 2329 l
-1434 2326 l
-1439 2322 l
-1444 2318 l
-1448 2315 l
-1453 2311 l
-1458 2308 l
-1463 2304 l
-1468 2300 l
-1473 2297 l
-1478 2293 l
-1483 2289 l
-1488 2285 l
-1494 2282 l
-1499 2278 l
-1504 2274 l
-1510 2270 l
-1515 2266 l
-1521 2262 l
-1527 2258 l
-1533 2254 l
-1538 2250 l
-1544 2246 l
-1550 2242 l
-1556 2238 l
-1563 2234 l
-1569 2230 l
-1575 2226 l
-1582 2222 l
-1588 2218 l
-1595 2214 l
-1602 2209 l
-1608 2205 l
-1615 2201 l
-1622 2197 l
-1629 2192 l
-1636 2188 l
-1644 2184 l
-1651 2179 l
-1659 2175 l
-1666 2171 l
-1674 2166 l
-1682 2162 l
-1690 2157 l
-1698 2153 l
-1706 2148 l
-1714 2144 l
-1722 2139 l
-1731 2135 l
-1740 2130 l
-1748 2126 l
-1757 2121 l
-1766 2117 l
-1775 2112 l
-1785 2108 l
-1794 2103 l
-1804 2098 l
-1813 2094 l
-1823 2089 l
-1833 2085 l
-1843 2080 l
-1853 2075 l
-1864 2071 l
-1874 2066 l
-1885 2062 l
-1896 2057 l
-1907 2052 l
-1918 2048 l
-1929 2043 l
-1941 2039 l
-1953 2034 l
-1965 2030 l
-1977 2025 l
-1989 2021 l
-2001 2016 l
-2014 2012 l
-2026 2007 l
-2039 2003 l
-2052 1999 l
-2066 1994 l
-2079 1990 l
-2093 1986 l
-2107 1982 l
-2121 1978 l
-2135 1974 l
-2150 1970 l
-2164 1966 l
-2179 1962 l
-2194 1958 l
-2209 1954 l
-2225 1950 l
-2241 1947 l
-2257 1943 l
-2273 1940 l
-2289 1937 l
-2306 1933 l
-2322 1930 l
-2339 1927 l
-2357 1924 l
-2374 1921 l
-2392 1919 l
-2409 1916 l
-2427 1914 l
-2446 1911 l
-2464 1909 l
-2483 1907 l
-2502 1905 l
-2521 1904 l
-2540 1902 l
-2560 1901 l
-2580 1900 l
-2600 1899 l
-2620 1898 l
-2640 1897 l
-2661 1897 l
-2682 1896 l
-2702 1896 l
-2724 1897 l
-2745 1897 l
-2766 1898 l
-2788 1898 l
-2810 1900 l
-2832 1901 l
-2854 1903 l
-2876 1904 l
-2899 1906 l
-2921 1909 l
-2944 1912 l
-2967 1914 l
-2990 1918 l
-3013 1921 l
-3036 1925 l
-3059 1929 l
-3083 1933 l
-3106 1938 l
-3129 1943 l
-3153 1948 l
-3176 1953 l
-3200 1959 l
-3224 1965 l
-3247 1972 l
-3271 1979 l
-3294 1986 l
-3318 1993 l
-3342 2000 l
-3365 2008 l
-3389 2017 l
-3412 2025 l
-3435 2034 l
-3459 2043 l
-3482 2052 l
-3505 2062 l
-3528 2072 l
-3551 2082 l
-3573 2093 l
-3596 2104 l
-3618 2115 l
-3640 2126 l
-3663 2138 l
-3684 2149 l
-3706 2161 l
-3728 2174 l
-3749 2186 l
-3770 2199 l
-3791 2212 l
-3811 2225 l
-3832 2238 l
-3852 2252 l
-3872 2265 l
-3892 2279 l
-3911 2293 l
-3930 2307 l
-3949 2322 l
-3968 2336 l
-3986 2351 l
-4004 2365 l
-4022 2380 l
-4039 2395 l
-4057 2410 l
-4073 2425 l
-4090 2440 l
-4107 2455 l
-4123 2470 l
-4138 2486 l
-4154 2501 l
-4169 2516 l
-4184 2532 l
-4199 2547 l
-4213 2563 l
-4227 2578 l
-4241 2594 l
-4254 2609 l
-S
-4254 2609 m
-4268 2625 l
-4281 2640 l
-4293 2655 l
-4306 2671 l
-4318 2686 l
-4330 2701 l
-4341 2717 l
-4353 2732 l
-4364 2747 l
-4375 2762 l
-4385 2777 l
-4396 2792 l
-4406 2807 l
-4416 2822 l
-4425 2836 l
-4435 2851 l
-4444 2865 l
-4453 2880 l
-4462 2894 l
-4470 2909 l
-4478 2923 l
-4486 2937 l
-4494 2951 l
-4502 2965 l
-4510 2978 l
-4517 2992 l
-4524 3006 l
-4531 3019 l
-4538 3032 l
-4544 3046 l
-4551 3059 l
-4557 3072 l
-4563 3085 l
-4569 3098 l
-4575 3110 l
-4581 3123 l
-4586 3135 l
-4591 3148 l
-4597 3160 l
-4602 3172 l
-4606 3184 l
-4611 3196 l
-4616 3208 l
-4620 3219 l
-4625 3231 l
-4629 3242 l
-4633 3253 l
-4637 3265 l
-4641 3276 l
-4645 3287 l
-4649 3298 l
-4652 3308 l
-4656 3319 l
-4659 3329 l
-4663 3340 l
-4666 3350 l
-4669 3360 l
-4672 3371 l
-4675 3381 l
-4678 3390 l
-4681 3400 l
-4683 3410 l
-4686 3420 l
-4689 3429 l
-4691 3438 l
-4693 3448 l
-4696 3457 l
-4698 3466 l
-4700 3475 l
-4702 3484 l
-4704 3493 l
-4706 3501 l
-4708 3510 l
-4710 3519 l
-4712 3527 l
-4714 3535 l
-4716 3544 l
-4717 3552 l
-4719 3560 l
-4720 3568 l
-4722 3576 l
-4723 3584 l
-4725 3591 l
-4726 3599 l
-4728 3607 l
-4729 3614 l
-4730 3622 l
-4731 3629 l
-4732 3636 l
-4734 3644 l
-4735 3651 l
-4736 3658 l
-4737 3665 l
-4738 3672 l
-4739 3679 l
-4740 3685 l
-4741 3692 l
-4741 3699 l
-4742 3705 l
-4743 3712 l
-4744 3718 l
-4745 3725 l
-4745 3731 l
-4746 3737 l
-4747 3743 l
-4747 3749 l
-4748 3755 l
-4748 3761 l
-4749 3767 l
-4750 3773 l
-4750 3779 l
-4751 3785 l
-4756 3860 l
-4758 3925 l
-4758 3983 l
-4757 4034 l
-4755 4079 l
-4752 4120 l
-4749 4156 l
-4745 4189 l
-4742 4219 l
-4738 4246 l
-4734 4271 l
-4731 4293 l
-4727 4314 l
-4724 4334 l
-4721 4351 l
-4717 4368 l
-4714 4383 l
-4711 4398 l
-4708 4411 l
-4705 4424 l
-4703 4435 l
-4700 4446 l
-4697 4457 l
-4695 4467 l
-4692 4476 l
-4690 4485 l
-4688 4493 l
-4686 4501 l
-4684 4509 l
-4682 4516 l
-4680 4523 l
-4678 4529 l
-4676 4535 l
-4674 4541 l
-4673 4547 l
-4671 4552 l
-4670 4558 l
-4668 4563 l
-4667 4567 l
-4665 4572 l
-4664 4576 l
-4662 4581 l
-4647 4627 l
-4636 4658 l
-4628 4680 l
-4622 4697 l
-4617 4710 l
-4613 4721 l
-4609 4729 l
-4606 4737 l
-4603 4744 l
-4601 4749 l
-4599 4755 l
-4597 4759 l
-4595 4763 l
-4593 4767 l
-4592 4771 l
-4590 4774 l
-4589 4777 l
-4587 4780 l
-4586 4783 l
-4585 4786 l
-4584 4788 l
-4582 4791 l
-4569 4818 l
-4557 4839 l
-4546 4858 l
-4534 4876 l
-4522 4893 l
-4510 4909 l
-4497 4924 l
-4483 4939 l
-4470 4954 l
-4455 4968 l
-4440 4981 l
-4425 4995 l
-4408 5008 l
-4392 5020 l
-4375 5032 l
-4357 5044 l
-4339 5056 l
-4320 5067 l
-4301 5077 l
-4281 5088 l
-4261 5098 l
-4240 5107 l
-4218 5116 l
-S
-4218 5116 m
-4197 5125 l
-4174 5134 l
-4152 5142 l
-4128 5149 l
-4105 5156 l
-4080 5163 l
-4056 5170 l
-4031 5176 l
-4005 5181 l
-3979 5187 l
-3953 5192 l
-3926 5196 l
-3899 5200 l
-3872 5204 l
-3844 5207 l
-3816 5210 l
-3787 5212 l
-3758 5214 l
-3729 5216 l
-3699 5217 l
-3669 5218 l
-3639 5218 l
-S
-2956 5656 m
-2955 5655 l
-2954 5655 l
-2953 5654 l
-2939 5646 l
-2924 5639 l
-2909 5631 l
-2893 5623 l
-2876 5616 l
-2860 5608 l
-2842 5600 l
-2824 5592 l
-2806 5584 l
-2787 5577 l
-2768 5568 l
-2748 5560 l
-2728 5552 l
-2708 5544 l
-2687 5536 l
-2666 5527 l
-2645 5519 l
-2623 5510 l
-2601 5501 l
-2579 5493 l
-2557 5484 l
-2534 5475 l
-2512 5466 l
-2489 5456 l
-2466 5447 l
-2443 5438 l
-2419 5428 l
-2396 5419 l
-2372 5409 l
-2348 5399 l
-2324 5389 l
-2301 5380 l
-2277 5369 l
-2253 5359 l
-2228 5349 l
-2204 5339 l
-2180 5329 l
-2156 5318 l
-2132 5308 l
-2108 5297 l
-2084 5286 l
-2060 5276 l
-2036 5265 l
-2012 5254 l
-1988 5243 l
-1964 5233 l
-1940 5222 l
-1917 5211 l
-1893 5200 l
-1870 5189 l
-1847 5178 l
-1824 5167 l
-1801 5156 l
-1778 5146 l
-1755 5135 l
-1733 5124 l
-1710 5113 l
-1688 5103 l
-1667 5092 l
-1645 5082 l
-1623 5072 l
-1602 5061 l
-1581 5051 l
-1561 5041 l
-1540 5032 l
-1520 5022 l
-1500 5012 l
-1481 5003 l
-1461 4994 l
-1442 4985 l
-1424 4977 l
-1406 4969 l
-1388 4961 l
-1370 4953 l
-1353 4946 l
-1336 4939 l
-1319 4932 l
-1303 4926 l
-1288 4920 l
-1273 4915 l
-1258 4910 l
-1244 4906 l
-1230 4902 l
-1216 4899 l
-1204 4897 l
-1191 4895 l
-1180 4894 l
-1169 4893 l
-1158 4894 l
-1148 4895 l
-1139 4897 l
-1131 4900 l
-1123 4904 l
-1116 4908 l
-1110 4914 l
-1105 4921 l
-1100 4930 l
-1097 4939 l
-1094 4950 l
-1093 4962 l
-1093 4975 l
-1094 4990 l
-1097 5007 l
-1101 5025 l
-1107 5044 l
-1114 5066 l
-1123 5089 l
-1134 5113 l
-1148 5140 l
-1163 5168 l
-1181 5198 l
-1202 5230 l
-1225 5263 l
-1251 5298 l
-1280 5334 l
-1312 5371 l
-1348 5410 l
-1387 5449 l
-1430 5488 l
-1476 5528 l
-1525 5568 l
-1578 5607 l
-1633 5645 l
-1692 5682 l
-1753 5717 l
-1816 5750 l
-1881 5780 l
-1948 5808 l
-2015 5834 l
-2082 5856 l
-2149 5875 l
-2215 5892 l
-2280 5905 l
-2343 5915 l
-2404 5923 l
-2463 5928 l
-2519 5931 l
-2572 5932 l
-2623 5931 l
-2670 5929 l
-2714 5925 l
-2755 5920 l
-2794 5914 l
-2829 5907 l
-2861 5900 l
-2890 5892 l
-2917 5883 l
-2941 5875 l
-2962 5866 l
-2981 5857 l
-2998 5847 l
-3013 5838 l
-3025 5829 l
-3036 5820 l
-3044 5811 l
-3051 5802 l
-3056 5793 l
-3060 5784 l
-3062 5775 l
-3063 5767 l
-3062 5758 l
-3060 5750 l
-3057 5742 l
-3052 5734 l
-3047 5726 l
-3040 5718 l
-3033 5710 l
-3024 5702 l
-3015 5694 l
-3005 5686 l
-2994 5679 l
-2982 5671 l
-2969 5663 l
-2956 5656 l
-S
-3678 4650 m
-3671 4680 l
-S
-3420 4667 m
-3410 4696 l
-S
-2885 4592 m
-2874 4620 l
-S
-2621 4508 m
-2609 4536 l
-S
-2122 4260 m
-2108 4288 l
-S
-1898 4101 m
-1884 4128 l
-S
-1534 3722 m
-1518 3747 l
-S
-1407 3502 m
-1390 3527 l
-S
-1321 2997 m
-1300 3019 l
-S
-1407 2705 m
-1383 2725 l
-S
-2128 2089 m
-2098 2095 l
-S
-2959 1989 m
-2930 1980 l
-S
-4430 3050 m
-4446 3076 l
-S
-4564 3628 m
-4571 3657 l
-S
-4350 4300 m
-4348 4331 l
-S
-4152 4479 m
-4147 4509 l
-S
-3198 3069 m
-3218 3046 l
-S
-3284 3127 m
-3305 3105 l
-S
-3366 3191 m
-3387 3169 l
-S
-3444 3259 m
-3466 3238 l
-S
-3517 3332 m
-3540 3312 l
-S
-3649 3492 m
-3673 3473 l
-S
-3707 3578 m
-3732 3560 l
-S
-3760 3668 m
-3785 3650 l
-S
-3807 3761 m
-3832 3744 l
-S
-3847 3857 m
-3873 3841 l
-S
-3907 4058 m
-3935 4044 l
-S
-3927 4162 m
-3955 4149 l
-S
-3939 4267 m
-3967 4255 l
-S
-3943 4374 m
-3971 4364 l
-S
-3938 4482 m
-3967 4473 l
-S
-3902 4699 m
-3932 4692 l
-S
-3870 4807 m
-3900 4802 l
-S
-3828 4914 m
-3858 4910 l
-S
-3776 5018 m
-3806 5016 l
-S
-3713 5120 m
-3743 5119 l
-S
-3553 5311 m
-3583 5314 l
-S
-3456 5398 m
-3486 5402 l
-S
-3348 5477 m
-3378 5484 l
-S
-3228 5548 m
-3257 5557 l
-S
-3097 5608 m
-3126 5619 l
-S
-2805 5690 m
-2831 5706 l
-S
-2647 5708 m
-2670 5727 l
-S
-2482 5709 m
-2503 5731 l
-S
-2313 5691 m
-2330 5716 l
-S
-2143 5654 m
-2156 5681 l
-S
-3925 4591 m
-3873 4608 l
-3821 4622 l
-3768 4635 l
-3715 4645 l
-3660 4653 l
-3606 4659 l
-3550 4664 l
-3495 4666 l
-3438 4667 l
-3382 4666 l
-3325 4663 l
-3268 4659 l
-3211 4653 l
-3154 4646 l
-S
-3154 4646 m
-3096 4637 l
-3039 4626 l
-2981 4615 l
-2924 4601 l
-2866 4587 l
-2809 4571 l
-2752 4553 l
-2696 4534 l
-2639 4514 l
-2583 4493 l
-2528 4471 l
-2473 4447 l
-2418 4422 l
-2364 4396 l
-S
-2364 4396 m
-2311 4369 l
-2258 4341 l
-2206 4312 l
-2155 4281 l
-2105 4250 l
-2056 4217 l
-2007 4184 l
-1960 4149 l
-1914 4114 l
-1869 4077 l
-1825 4040 l
-1782 4001 l
-1740 3962 l
-1700 3922 l
-S
-1700 3922 m
-1662 3880 l
-1625 3838 l
-1589 3795 l
-1556 3751 l
-1524 3707 l
-1493 3661 l
-1465 3614 l
-1439 3567 l
-1415 3518 l
-1393 3469 l
-1374 3418 l
-1357 3367 l
-1342 3315 l
-1331 3261 l
-S
-1331 3261 m
-1330 3257 l
-1330 3253 l
-1329 3249 l
-1328 3246 l
-1328 3242 l
-1327 3238 l
-1326 3234 l
-1326 3230 l
-1325 3226 l
-1325 3222 l
-1324 3218 l
-1324 3214 l
-1323 3210 l
-1323 3207 l
-1322 3203 l
-1322 3199 l
-1321 3195 l
-1321 3191 l
-1320 3187 l
-1320 3183 l
-1320 3179 l
-1319 3175 l
-1319 3171 l
-1318 3167 l
-1318 3163 l
-1318 3159 l
-1318 3155 l
-1317 3151 l
-1317 3147 l
-1317 3143 l
-1317 3139 l
-1316 3135 l
-1316 3131 l
-1316 3127 l
-1316 3123 l
-1316 3119 l
-1316 3114 l
-1316 3110 l
-1316 3106 l
-1316 3102 l
-1316 3098 l
-1316 3094 l
-1316 3090 l
-1316 3086 l
-1316 3082 l
-1316 3078 l
-1316 3073 l
-1316 3069 l
-1316 3065 l
-1316 3061 l
-1316 3057 l
-1317 3053 l
-1317 3049 l
-1317 3044 l
-1317 3040 l
-1318 3036 l
-1318 3032 l
-1318 3028 l
-1319 3023 l
-1319 3019 l
-1319 3015 l
-1320 3011 l
-1320 3007 l
-1321 3002 l
-1321 2998 l
-1322 2994 l
-1322 2990 l
-1323 2985 l
-1323 2981 l
-1324 2977 l
-1324 2972 l
-1325 2968 l
-1326 2964 l
-1326 2960 l
-1327 2955 l
-1328 2951 l
-1328 2947 l
-1329 2942 l
-1330 2938 l
-1331 2934 l
-1332 2929 l
-1332 2925 l
-1333 2921 l
-1334 2916 l
-1335 2912 l
-1336 2908 l
-1337 2903 l
-1338 2899 l
-1339 2894 l
-1340 2890 l
-1341 2886 l
-1342 2881 l
-1343 2877 l
-1345 2872 l
-1346 2868 l
-1347 2863 l
-1348 2859 l
-1349 2854 l
-1351 2850 l
-1352 2845 l
-1353 2841 l
-1355 2837 l
-1356 2832 l
-1358 2828 l
-1359 2823 l
-1360 2819 l
-1362 2814 l
-1364 2809 l
-1365 2805 l
-1367 2800 l
-1368 2796 l
-1370 2791 l
-1372 2787 l
-1373 2782 l
-1375 2778 l
-1377 2773 l
-1379 2768 l
-1381 2764 l
-1382 2759 l
-1384 2755 l
-1386 2750 l
-1388 2745 l
-1390 2741 l
-1392 2736 l
-1394 2731 l
-1396 2727 l
-1399 2722 l
-1401 2717 l
-1403 2713 l
-1405 2708 l
-1407 2703 l
-1410 2699 l
-1412 2694 l
-1414 2689 l
-1417 2685 l
-1419 2680 l
-1422 2675 l
-1424 2671 l
-1427 2666 l
-1429 2661 l
-1432 2656 l
-1435 2652 l
-1437 2647 l
-1440 2642 l
-1443 2637 l
-1446 2633 l
-1448 2628 l
-1451 2623 l
-1454 2618 l
-1457 2613 l
-1460 2609 l
-1463 2604 l
-1466 2599 l
-1469 2594 l
-1473 2589 l
-1476 2584 l
-1479 2580 l
-1482 2575 l
-1486 2570 l
-1489 2565 l
-1492 2560 l
-1496 2555 l
-1499 2551 l
-1503 2546 l
-1506 2541 l
-1510 2536 l
-1514 2531 l
-1518 2526 l
-1521 2521 l
-1525 2516 l
-1529 2511 l
-1533 2507 l
-1537 2502 l
-1541 2497 l
-1545 2492 l
-1549 2487 l
-1553 2482 l
-1557 2477 l
-1562 2472 l
-1566 2467 l
-1570 2462 l
-1575 2457 l
-1579 2452 l
-1584 2448 l
-1588 2443 l
-1593 2438 l
-1597 2433 l
-1602 2428 l
-1607 2423 l
-1612 2418 l
-1617 2413 l
-1622 2408 l
-1627 2403 l
-1632 2398 l
-1637 2393 l
-1642 2388 l
-S
-1642 2388 m
-1647 2383 l
-1652 2378 l
-1658 2374 l
-1663 2369 l
-1669 2364 l
-1674 2359 l
-1680 2354 l
-1685 2349 l
-1691 2344 l
-1697 2339 l
-1703 2334 l
-1709 2329 l
-1715 2324 l
-1721 2320 l
-1727 2315 l
-1733 2310 l
-1739 2305 l
-1745 2300 l
-1752 2295 l
-1758 2290 l
-1765 2286 l
-1771 2281 l
-1778 2276 l
-1784 2271 l
-1791 2266 l
-1798 2261 l
-1805 2257 l
-1812 2252 l
-1819 2247 l
-1826 2242 l
-1833 2238 l
-1841 2233 l
-1848 2228 l
-1855 2224 l
-1863 2219 l
-1870 2214 l
-1878 2210 l
-1886 2205 l
-1893 2200 l
-1901 2196 l
-1909 2191 l
-1917 2187 l
-1925 2182 l
-1934 2178 l
-1942 2173 l
-1950 2169 l
-1959 2164 l
-1967 2160 l
-1976 2156 l
-1984 2151 l
-1993 2147 l
-2002 2143 l
-2011 2138 l
-2020 2134 l
-2029 2130 l
-2038 2126 l
-2047 2122 l
-2057 2118 l
-2066 2113 l
-2076 2109 l
-2085 2105 l
-2095 2101 l
-2105 2098 l
-2115 2094 l
-2124 2090 l
-2135 2086 l
-2145 2082 l
-2155 2079 l
-2165 2075 l
-2176 2071 l
-2186 2068 l
-2197 2064 l
-2207 2061 l
-2218 2057 l
-2229 2054 l
-2240 2051 l
-2251 2047 l
-2262 2044 l
-2273 2041 l
-2284 2038 l
-2296 2035 l
-2307 2032 l
-2318 2029 l
-2330 2026 l
-2342 2023 l
-2354 2021 l
-2365 2018 l
-2377 2015 l
-2390 2013 l
-2402 2010 l
-2414 2008 l
-2426 2006 l
-2439 2004 l
-2451 2001 l
-2464 1999 l
-2476 1997 l
-2489 1995 l
-2502 1994 l
-2515 1992 l
-2528 1990 l
-2541 1989 l
-2554 1987 l
-2567 1986 l
-2580 1985 l
-2594 1983 l
-2607 1982 l
-2621 1981 l
-2634 1980 l
-2648 1980 l
-2662 1979 l
-2676 1978 l
-2689 1978 l
-2703 1978 l
-2717 1977 l
-2731 1977 l
-2746 1977 l
-2760 1977 l
-2774 1977 l
-2788 1977 l
-2803 1978 l
-2817 1978 l
-2832 1979 l
-2846 1980 l
-2861 1981 l
-2875 1982 l
-2890 1983 l
-2905 1984 l
-2920 1985 l
-2935 1987 l
-2949 1988 l
-2964 1990 l
-2979 1992 l
-2994 1994 l
-3009 1996 l
-3024 1998 l
-3039 2000 l
-3054 2003 l
-3069 2006 l
-3084 2008 l
-3100 2011 l
-3115 2014 l
-3130 2017 l
-3145 2021 l
-3160 2024 l
-3175 2028 l
-3191 2031 l
-3206 2035 l
-3221 2039 l
-3236 2043 l
-3251 2047 l
-3266 2052 l
-3281 2056 l
-3297 2061 l
-3312 2066 l
-3327 2070 l
-3342 2075 l
-3357 2081 l
-3372 2086 l
-3387 2091 l
-3402 2097 l
-3416 2102 l
-3431 2108 l
-3446 2114 l
-3461 2120 l
-3476 2126 l
-3490 2133 l
-3505 2139 l
-3519 2146 l
-3534 2152 l
-3548 2159 l
-3563 2166 l
-3577 2173 l
-3591 2180 l
-3605 2187 l
-3619 2195 l
-3633 2202 l
-3647 2210 l
-3661 2218 l
-3675 2225 l
-3689 2233 l
-3702 2241 l
-3716 2250 l
-3729 2258 l
-3742 2266 l
-3756 2275 l
-3769 2283 l
-3782 2292 l
-3795 2300 l
-3808 2309 l
-3820 2318 l
-3833 2327 l
-3846 2336 l
-3858 2345 l
-3870 2354 l
-3883 2364 l
-3895 2373 l
-S
-3895 2373 m
-3907 2382 l
-3919 2392 l
-3930 2401 l
-3942 2411 l
-3954 2421 l
-3965 2431 l
-3976 2440 l
-3988 2450 l
-3999 2460 l
-4010 2470 l
-4020 2480 l
-4031 2490 l
-4042 2500 l
-4052 2511 l
-4063 2521 l
-4073 2531 l
-4083 2541 l
-4093 2552 l
-4103 2562 l
-4113 2573 l
-4122 2583 l
-4132 2593 l
-4141 2604 l
-4150 2614 l
-4159 2625 l
-4168 2636 l
-4177 2646 l
-4186 2657 l
-4195 2667 l
-4203 2678 l
-4212 2689 l
-4220 2699 l
-4228 2710 l
-4236 2721 l
-4244 2731 l
-4252 2742 l
-4259 2753 l
-4267 2763 l
-4274 2774 l
-4282 2785 l
-4289 2795 l
-4296 2806 l
-4303 2817 l
-4310 2827 l
-4317 2838 l
-4323 2848 l
-4330 2859 l
-4336 2870 l
-4342 2880 l
-4349 2891 l
-4355 2901 l
-4361 2912 l
-4366 2922 l
-4372 2933 l
-4378 2943 l
-4383 2954 l
-4389 2964 l
-4394 2975 l
-4399 2985 l
-4404 2995 l
-4409 3006 l
-4414 3016 l
-4419 3026 l
-4424 3036 l
-4428 3046 l
-4433 3057 l
-4437 3067 l
-4442 3077 l
-4446 3087 l
-4450 3097 l
-4454 3107 l
-4458 3117 l
-4462 3127 l
-4466 3137 l
-4470 3147 l
-4473 3156 l
-4477 3166 l
-4480 3176 l
-4483 3186 l
-4487 3195 l
-4490 3205 l
-4493 3214 l
-4496 3224 l
-4499 3233 l
-4502 3243 l
-4505 3252 l
-4507 3262 l
-4510 3271 l
-4513 3280 l
-4515 3289 l
-4518 3299 l
-4520 3308 l
-4522 3317 l
-4524 3326 l
-4527 3335 l
-4529 3344 l
-4531 3353 l
-4533 3362 l
-4534 3371 l
-4536 3379 l
-4538 3388 l
-4540 3397 l
-4541 3406 l
-4543 3414 l
-4544 3423 l
-4546 3431 l
-4547 3440 l
-4548 3448 l
-4550 3457 l
-4551 3465 l
-4552 3473 l
-4553 3482 l
-4554 3490 l
-4555 3498 l
-4556 3506 l
-4557 3514 l
-4558 3522 l
-4558 3530 l
-4559 3538 l
-4560 3546 l
-4560 3554 l
-4561 3562 l
-4561 3570 l
-4562 3577 l
-4562 3585 l
-4563 3593 l
-4563 3600 l
-4563 3608 l
-4564 3615 l
-4564 3623 l
-4564 3630 l
-4564 3638 l
-4564 3645 l
-4564 3652 l
-4564 3660 l
-4564 3667 l
-4564 3674 l
-4564 3681 l
-4564 3688 l
-4563 3695 l
-4563 3702 l
-4563 3709 l
-4562 3716 l
-4562 3723 l
-4562 3730 l
-4561 3737 l
-4561 3743 l
-4560 3750 l
-4560 3757 l
-4559 3763 l
-4558 3770 l
-4558 3777 l
-4557 3783 l
-4556 3790 l
-4556 3796 l
-4555 3803 l
-4554 3809 l
-4553 3815 l
-4552 3822 l
-4551 3828 l
-4550 3834 l
-4549 3840 l
-4548 3846 l
-4547 3853 l
-4546 3859 l
-4545 3865 l
-4544 3871 l
-4543 3877 l
-4542 3883 l
-4541 3888 l
-4539 3894 l
-4538 3900 l
-4537 3906 l
-4536 3912 l
-4534 3917 l
-4533 3923 l
-4532 3929 l
-4530 3934 l
-4529 3940 l
-4527 3946 l
-4526 3951 l
-4524 3957 l
-4523 3962 l
-4521 3967 l
-4520 3973 l
-4518 3978 l
-4517 3983 l
-4515 3989 l
-4513 3994 l
-4512 3999 l
-4510 4004 l
-4508 4010 l
-4506 4015 l
-4505 4020 l
-4503 4025 l
-4501 4030 l
-S
-4501 4030 m
-4499 4035 l
-4498 4040 l
-4496 4045 l
-4494 4050 l
-4492 4055 l
-4490 4059 l
-4488 4064 l
-4486 4069 l
-4484 4074 l
-4482 4079 l
-4480 4083 l
-4478 4088 l
-4476 4093 l
-4474 4097 l
-4472 4102 l
-4470 4106 l
-4468 4111 l
-4466 4116 l
-4464 4120 l
-4461 4124 l
-4459 4129 l
-4457 4133 l
-4455 4138 l
-4453 4142 l
-4451 4146 l
-4448 4151 l
-4446 4155 l
-4444 4159 l
-4441 4163 l
-4439 4168 l
-4437 4172 l
-4435 4176 l
-4432 4180 l
-4430 4184 l
-4427 4188 l
-4425 4192 l
-4423 4196 l
-4420 4200 l
-4418 4204 l
-4415 4208 l
-4413 4212 l
-4411 4216 l
-4408 4220 l
-4406 4224 l
-4403 4227 l
-4401 4231 l
-4398 4235 l
-4395 4239 l
-4393 4242 l
-4390 4246 l
-4388 4250 l
-4385 4254 l
-4383 4257 l
-4380 4261 l
-4377 4264 l
-4375 4268 l
-4372 4271 l
-4369 4275 l
-4367 4278 l
-4364 4282 l
-4361 4285 l
-4359 4289 l
-4356 4292 l
-4353 4296 l
-4351 4299 l
-4348 4302 l
-4345 4306 l
-4342 4309 l
-4340 4312 l
-4337 4316 l
-4334 4319 l
-4331 4322 l
-4328 4325 l
-4326 4328 l
-4323 4332 l
-4320 4335 l
-4317 4338 l
-4314 4341 l
-4311 4344 l
-4308 4347 l
-4305 4350 l
-4303 4353 l
-4300 4356 l
-4297 4359 l
-4294 4362 l
-4291 4365 l
-4288 4368 l
-4285 4371 l
-4282 4374 l
-4279 4377 l
-4276 4380 l
-4273 4382 l
-4270 4385 l
-4267 4388 l
-4264 4391 l
-4261 4394 l
-4258 4396 l
-4255 4399 l
-4252 4402 l
-4249 4405 l
-4246 4407 l
-4243 4410 l
-4240 4412 l
-4237 4415 l
-4234 4418 l
-4230 4420 l
-4227 4423 l
-4224 4425 l
-4221 4428 l
-4218 4430 l
-4215 4433 l
-4212 4435 l
-4208 4438 l
-4205 4440 l
-4202 4443 l
-4199 4445 l
-4196 4448 l
-4193 4450 l
-4189 4452 l
-4186 4455 l
-4183 4457 l
-4180 4459 l
-4177 4462 l
-4173 4464 l
-4170 4466 l
-4167 4469 l
-4164 4471 l
-4160 4473 l
-4157 4475 l
-4154 4477 l
-4150 4480 l
-4147 4482 l
-4144 4484 l
-4141 4486 l
-4137 4488 l
-4134 4490 l
-4131 4492 l
-4127 4494 l
-4124 4496 l
-4121 4499 l
-4117 4501 l
-4114 4503 l
-4111 4505 l
-4107 4507 l
-4104 4509 l
-4100 4510 l
-4097 4512 l
-4094 4514 l
-4090 4516 l
-4087 4518 l
-4083 4520 l
-4080 4522 l
-4077 4524 l
-4073 4526 l
-4025 4550 l
-3975 4572 l
-3972 4573 l
-3968 4575 l
-3964 4576 l
-3961 4577 l
-3957 4579 l
-3954 4580 l
-3950 4582 l
-3946 4583 l
-3943 4584 l
-3939 4586 l
-3936 4587 l
-3932 4588 l
-3928 4590 l
-3928 4590 l
-3928 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3927 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3926 4590 l
-3925 4591 l
-3925 4591 l
-3925 4591 l
-S
-3109 3016 m
-3148 3038 l
-3186 3061 l
-3223 3085 l
-3260 3110 l
-3296 3136 l
-3331 3163 l
-3366 3191 l
-3400 3219 l
-3433 3249 l
-3465 3280 l
-3497 3311 l
-3527 3343 l
-3557 3376 l
-3586 3410 l
-S
-3586 3410 m
-3613 3445 l
-3640 3480 l
-3666 3516 l
-3691 3553 l
-3715 3590 l
-3738 3629 l
-3760 3668 l
-3781 3707 l
-3800 3747 l
-3819 3788 l
-3836 3829 l
-3852 3871 l
-3867 3913 l
-3881 3956 l
-S
-3881 3956 m
-3893 3999 l
-3904 4043 l
-3914 4087 l
-3922 4132 l
-3929 4177 l
-3935 4222 l
-3939 4267 l
-3941 4313 l
-3943 4359 l
-3942 4405 l
-3940 4451 l
-3937 4498 l
-3931 4544 l
-3925 4591 l
-S
-3925 4591 m
-3916 4637 l
-3906 4684 l
-3894 4730 l
-3880 4776 l
-3865 4823 l
-3847 4868 l
-3828 4914 l
-3807 4959 l
-3784 5004 l
-3759 5048 l
-3732 5091 l
-3703 5134 l
-3672 5177 l
-3639 5218 l
-S
-3639 5218 m
-3603 5258 l
-3566 5298 l
-3527 5336 l
-3485 5374 l
-3442 5410 l
-3396 5444 l
-3348 5477 l
-3298 5509 l
-3246 5538 l
-3192 5566 l
-3136 5592 l
-3078 5616 l
-3018 5637 l
-2956 5656 l
-S
-2956 5656 m
-2952 5657 l
-2947 5658 l
-2943 5660 l
-2938 5661 l
-2934 5662 l
-2929 5663 l
-2924 5664 l
-2920 5665 l
-2915 5667 l
-2911 5668 l
-2906 5669 l
-2902 5670 l
-2897 5671 l
-2892 5672 l
-2888 5673 l
-2883 5674 l
-2879 5675 l
-2874 5676 l
-2869 5677 l
-2865 5678 l
-2860 5679 l
-2855 5680 l
-2851 5681 l
-2846 5682 l
-2841 5683 l
-2837 5684 l
-2832 5685 l
-2827 5686 l
-2823 5687 l
-2818 5687 l
-2813 5688 l
-2808 5689 l
-2804 5690 l
-2799 5691 l
-2794 5691 l
-2789 5692 l
-2785 5693 l
-2780 5694 l
-2775 5694 l
-2770 5695 l
-2765 5696 l
-2761 5697 l
-2756 5697 l
-2751 5698 l
-2746 5698 l
-2741 5699 l
-2737 5700 l
-2732 5700 l
-2727 5701 l
-2722 5701 l
-2717 5702 l
-2712 5702 l
-2707 5703 l
-2702 5703 l
-2698 5704 l
-2693 5704 l
-2688 5705 l
-2683 5705 l
-2678 5706 l
-2673 5706 l
-2668 5706 l
-2663 5707 l
-2658 5707 l
-2653 5707 l
-2648 5708 l
-2643 5708 l
-2638 5708 l
-2633 5709 l
-2628 5709 l
-2623 5709 l
-2618 5709 l
-2613 5709 l
-2608 5710 l
-2603 5710 l
-2598 5710 l
-2593 5710 l
-2588 5710 l
-2583 5710 l
-2578 5710 l
-2573 5710 l
-2568 5710 l
-2563 5711 l
-2558 5711 l
-2553 5711 l
-2548 5711 l
-2543 5710 l
-2538 5710 l
-2533 5710 l
-2528 5710 l
-2522 5710 l
-2517 5710 l
-2512 5710 l
-2507 5710 l
-2502 5710 l
-2497 5709 l
-2492 5709 l
-2487 5709 l
-2482 5709 l
-2476 5708 l
-2471 5708 l
-2466 5708 l
-2461 5708 l
-2456 5707 l
-2451 5707 l
-2446 5707 l
-2441 5706 l
-2435 5706 l
-2430 5705 l
-2425 5705 l
-2420 5704 l
-2415 5704 l
-2410 5703 l
-2404 5703 l
-2399 5702 l
-2394 5702 l
-2389 5701 l
-2384 5701 l
-2379 5700 l
-2373 5700 l
-2368 5699 l
-2363 5698 l
-2358 5698 l
-2353 5697 l
-2347 5696 l
-2342 5695 l
-2337 5695 l
-2332 5694 l
-2327 5693 l
-2321 5692 l
-2316 5692 l
-2311 5691 l
-2306 5690 l
-2301 5689 l
-2295 5688 l
-2290 5687 l
-2285 5686 l
-2280 5685 l
-2275 5684 l
-2269 5683 l
-2264 5682 l
-2259 5681 l
-2254 5680 l
-2249 5679 l
-2243 5678 l
-2238 5677 l
-2233 5676 l
-2228 5675 l
-2223 5674 l
-2217 5673 l
-2212 5671 l
-2207 5670 l
-2202 5669 l
-2197 5668 l
-2191 5666 l
-2186 5665 l
-2181 5664 l
-2176 5663 l
-2171 5661 l
-2165 5660 l
-2160 5658 l
-2155 5657 l
-2150 5656 l
-2145 5654 l
-2139 5653 l
-2134 5651 l
-2129 5650 l
-2124 5648 l
-2119 5647 l
-2113 5645 l
-2108 5644 l
-2103 5642 l
-2098 5641 l
-2093 5639 l
-2088 5637 l
-2082 5636 l
-2077 5634 l
-2072 5632 l
-2067 5631 l
-2062 5629 l
-2057 5627 l
-2052 5625 l
-2046 5624 l
-2041 5622 l
-2036 5620 l
-2031 5618 l
-2026 5616 l
-2021 5614 l
-2016 5612 l
-2011 5610 l
-2005 5609 l
-2000 5607 l
-1995 5605 l
-1990 5603 l
-1985 5601 l
-1980 5599 l
-1975 5597 l
-S
-4756 3875 m
-4759 3878 l
-4759 3882 l
-4759 3887 l
-4759 3891 l
-4759 3896 l
-4759 3900 l
-4759 3905 l
-4759 3909 l
-S
-4759 3909 m
-4759 3913 l
-4759 3918 l
-4759 3922 l
-4759 3927 l
-4759 3931 l
-4759 3936 l
-4759 3940 l
-4759 3945 l
-4759 3949 l
-S
-4759 3949 m
-4759 3954 l
-4759 3958 l
-4759 3963 l
-4759 3967 l
-4759 3972 l
-4759 3976 l
-4759 3981 l
-4759 3985 l
-4759 3989 l
-S
-4759 3989 m
-4759 3994 l
-4759 3998 l
-4759 4003 l
-4759 4007 l
-4759 4012 l
-4759 4016 l
-4759 4021 l
-4759 4025 l
-4759 4030 l
-S
-4756 4041 m
-4759 4039 l
-4759 4034 l
-4759 4030 l
-S
-4716 3545 m
-4718 3547 l
-S
-4718 3547 m
-4718 3551 l
-4718 3556 l
-4718 3560 l
-4718 3565 l
-4721 3567 l
-4723 3569 l
-4723 3574 l
-4723 3578 l
-4723 3583 l
-4723 3587 l
-S
-4723 3587 m
-4723 3592 l
-4725 3594 l
-4727 3596 l
-4727 3601 l
-4727 3605 l
-4727 3610 l
-4727 3614 l
-4730 3616 l
-4732 3619 l
-4732 3623 l
-4732 3627 l
-S
-4732 3627 m
-4732 3632 l
-4732 3636 l
-4732 3641 l
-4732 3645 l
-4734 3648 l
-4736 3650 l
-4736 3654 l
-4736 3659 l
-4736 3663 l
-4736 3668 l
-S
-4736 3668 m
-4736 3672 l
-4736 3677 l
-4738 3679 l
-4741 3681 l
-4741 3686 l
-4741 3690 l
-4741 3694 l
-4741 3699 l
-4741 3703 l
-4741 3708 l
-S
-4741 3708 m
-4743 3710 l
-4745 3712 l
-4745 3717 l
-4745 3721 l
-4745 3726 l
-4745 3730 l
-4745 3735 l
-4745 3739 l
-4745 3744 l
-4745 3748 l
-S
-4745 3748 m
-4747 3750 l
-4750 3753 l
-4750 3757 l
-4750 3762 l
-4750 3766 l
-4750 3770 l
-4750 3775 l
-4750 3779 l
-4750 3784 l
-4750 3788 l
-S
-4750 3788 m
-4750 3793 l
-4750 3797 l
-4752 3800 l
-4754 3802 l
-4754 3806 l
-4754 3811 l
-4754 3815 l
-4754 3820 l
-4754 3824 l
-4754 3829 l
-S
-4754 3829 m
-4754 3833 l
-4754 3838 l
-4754 3842 l
-4754 3846 l
-4754 3851 l
-4754 3855 l
-4754 3860 l
-4754 3864 l
-4754 3869 l
-S
-4754 3869 m
-4754 3873 l
-4756 3875 l
-S
-4754 4070 m
-4754 4065 l
-4754 4061 l
-4754 4056 l
-4754 4052 l
-4754 4048 l
-4754 4043 l
-4756 4041 l
-S
-4754 4070 m
-4754 4074 l
-4754 4079 l
-4754 4083 l
-4754 4088 l
-4754 4092 l
-4754 4097 l
-4754 4101 l
-4754 4106 l
-4754 4110 l
-S
-4754 4110 m
-4754 4115 l
-4752 4117 l
-4750 4119 l
-4750 4124 l
-4750 4128 l
-4750 4132 l
-4750 4137 l
-4750 4141 l
-4750 4146 l
-4750 4150 l
-S
-4750 4150 m
-4750 4155 l
-4750 4159 l
-4750 4164 l
-4750 4168 l
-4747 4170 l
-4745 4173 l
-4745 4177 l
-4745 4182 l
-4745 4186 l
-4745 4191 l
-S
-4745 4191 m
-4745 4195 l
-4745 4199 l
-4745 4204 l
-4745 4208 l
-4743 4211 l
-4741 4213 l
-4741 4217 l
-4741 4222 l
-4741 4226 l
-4741 4231 l
-S
-4741 4231 m
-4741 4235 l
-4741 4240 l
-4738 4242 l
-4736 4244 l
-4736 4249 l
-4736 4253 l
-4736 4258 l
-4736 4262 l
-4736 4267 l
-4736 4271 l
-S
-4736 4271 m
-4734 4273 l
-4732 4275 l
-4732 4280 l
-4732 4284 l
-4732 4289 l
-4732 4293 l
-4732 4298 l
-4730 4300 l
-4727 4302 l
-4727 4307 l
-4727 4311 l
-S
-4727 4311 m
-4727 4316 l
-4727 4320 l
-4727 4325 l
-4725 4327 l
-4723 4329 l
-4723 4334 l
-4723 4338 l
-4723 4342 l
-4723 4347 l
-4721 4349 l
-4718 4351 l
-S
-4716 4372 m
-4718 4369 l
-4718 4365 l
-4718 4360 l
-4718 4356 l
-4718 4351 l
-S
-4676 3384 m
-4678 3386 l
-S
-4678 3386 m
-4678 3391 l
-4678 3395 l
-4680 3397 l
-4683 3400 l
-4683 3404 l
-4683 3408 l
-4683 3413 l
-4685 3415 l
-4687 3417 l
-4687 3422 l
-4687 3426 l
-S
-4687 3426 m
-4687 3431 l
-4689 3433 l
-4692 3435 l
-4692 3440 l
-4692 3444 l
-4692 3449 l
-4694 3451 l
-4696 3453 l
-4696 3458 l
-4696 3462 l
-4696 3467 l
-S
-4696 3467 m
-4698 3469 l
-4701 3471 l
-4701 3476 l
-4701 3480 l
-4701 3484 l
-4703 3487 l
-4705 3489 l
-4705 3493 l
-4705 3498 l
-4705 3502 l
-4707 3505 l
-4709 3507 l
-S
-4709 3507 m
-4709 3511 l
-4709 3516 l
-4709 3520 l
-4709 3525 l
-4712 3527 l
-4714 3529 l
-4714 3534 l
-4714 3538 l
-4714 3543 l
-4716 3545 l
-S
-4714 4392 m
-4714 4387 l
-4714 4383 l
-4714 4378 l
-4714 4374 l
-4716 4372 l
-S
-4714 4392 m
-4712 4394 l
-4709 4396 l
-4709 4401 l
-4709 4405 l
-4709 4410 l
-4709 4414 l
-4707 4416 l
-4705 4418 l
-4705 4423 l
-4705 4427 l
-4705 4432 l
-S
-4705 4432 m
-4703 4434 l
-4701 4436 l
-4701 4441 l
-4701 4445 l
-4701 4450 l
-4698 4452 l
-4696 4454 l
-4696 4459 l
-4696 4463 l
-4696 4468 l
-4694 4470 l
-4692 4472 l
-S
-4692 4472 m
-4692 4477 l
-4692 4481 l
-4692 4486 l
-4689 4488 l
-4687 4490 l
-4687 4494 l
-4687 4499 l
-4687 4503 l
-4685 4506 l
-4683 4508 l
-4683 4512 l
-S
-4676 4537 m
-4678 4535 l
-4678 4530 l
-4678 4526 l
-4678 4521 l
-4680 4519 l
-4683 4517 l
-4683 4512 l
-S
-4636 3259 m
-4638 3261 l
-4638 3265 l
-S
-4638 3265 m
-4638 3270 l
-4640 3272 l
-4642 3274 l
-4642 3279 l
-4642 3283 l
-4645 3286 l
-4647 3288 l
-4647 3292 l
-4647 3297 l
-4649 3299 l
-4651 3301 l
-4651 3306 l
-S
-4651 3306 m
-4651 3310 l
-4654 3312 l
-4656 3315 l
-4656 3319 l
-4656 3324 l
-4658 3326 l
-4660 3328 l
-4660 3333 l
-4660 3337 l
-4663 3339 l
-4665 3341 l
-4665 3346 l
-S
-4665 3346 m
-4665 3350 l
-4667 3353 l
-4669 3355 l
-4669 3359 l
-4669 3364 l
-4669 3368 l
-4671 3371 l
-4674 3373 l
-4674 3377 l
-4674 3382 l
-4676 3384 l
-S
-4669 4553 m
-4671 4550 l
-4674 4548 l
-4674 4544 l
-4674 4539 l
-4676 4537 l
-S
-4669 4553 m
-4669 4557 l
-4669 4561 l
-4669 4566 l
-4667 4568 l
-4665 4570 l
-4665 4575 l
-4665 4579 l
-4663 4582 l
-4660 4584 l
-4660 4588 l
-4660 4593 l
-S
-4660 4593 m
-4658 4595 l
-4656 4597 l
-4656 4602 l
-4656 4606 l
-4654 4608 l
-4651 4611 l
-4651 4615 l
-4651 4620 l
-4649 4622 l
-4647 4624 l
-4647 4629 l
-4647 4633 l
-S
-4636 4662 m
-4638 4660 l
-4638 4655 l
-4638 4651 l
-4640 4649 l
-4642 4646 l
-4642 4642 l
-4642 4637 l
-4645 4635 l
-4647 4633 l
-S
-4595 3156 m
-4598 3158 l
-4598 3163 l
-4598 3167 l
-4600 3169 l
-4602 3172 l
-4602 3176 l
-4604 3178 l
-4607 3181 l
-4607 3185 l
-S
-4607 3185 m
-4607 3190 l
-4609 3192 l
-4611 3194 l
-4611 3198 l
-4613 3201 l
-4616 3203 l
-4616 3207 l
-4616 3212 l
-4618 3214 l
-4620 3216 l
-4620 3221 l
-4622 3223 l
-4625 3225 l
-S
-4625 3225 m
-4625 3230 l
-4625 3234 l
-4627 3236 l
-4629 3239 l
-4629 3243 l
-4629 3248 l
-4631 3250 l
-4633 3252 l
-4633 3257 l
-4636 3259 l
-S
-4629 4673 m
-4631 4671 l
-4633 4669 l
-4633 4664 l
-4636 4662 l
-S
-4629 4673 m
-4629 4678 l
-4629 4682 l
-4627 4684 l
-4625 4687 l
-4625 4691 l
-4625 4696 l
-4622 4698 l
-4620 4700 l
-4620 4704 l
-4618 4707 l
-4616 4709 l
-4616 4713 l
-S
-4616 4713 m
-4616 4718 l
-4613 4720 l
-4611 4722 l
-4611 4727 l
-4609 4729 l
-4607 4731 l
-4607 4736 l
-4607 4740 l
-4604 4742 l
-4602 4745 l
-4602 4749 l
-4600 4751 l
-4598 4754 l
-S
-4595 4765 m
-4598 4763 l
-4598 4758 l
-4598 4754 l
-S
-4555 3067 m
-4557 3069 l
-4557 3073 l
-4560 3076 l
-4562 3078 l
-4562 3082 l
-4562 3087 l
-4564 3089 l
-4566 3091 l
-4566 3096 l
-4569 3098 l
-4571 3100 l
-4571 3105 l
-S
-4571 3105 m
-4573 3107 l
-4575 3109 l
-4575 3114 l
-4578 3116 l
-4580 3118 l
-4580 3122 l
-4582 3125 l
-4584 3127 l
-4584 3131 l
-4584 3136 l
-4587 3138 l
-4589 3140 l
-4589 3145 l
-S
-4589 3145 m
-4591 3147 l
-4593 3149 l
-4593 3154 l
-4595 3156 l
-S
-4580 4794 m
-4582 4792 l
-4584 4789 l
-4584 4785 l
-4587 4783 l
-4589 4780 l
-4589 4776 l
-4591 4774 l
-4593 4772 l
-4593 4767 l
-4595 4765 l
-S
-4580 4794 m
-4580 4798 l
-4580 4803 l
-4578 4805 l
-4575 4807 l
-4575 4812 l
-4573 4814 l
-4571 4816 l
-4571 4821 l
-4569 4823 l
-4566 4825 l
-4566 4830 l
-4564 4832 l
-4562 4834 l
-S
-4555 4854 m
-4557 4852 l
-4557 4847 l
-4557 4843 l
-4560 4841 l
-4562 4839 l
-4562 4834 l
-S
-4515 2991 m
-4517 2993 l
-4520 2995 l
-4522 2997 l
-4522 3002 l
-4524 3004 l
-4526 3006 l
-4526 3011 l
-4528 3013 l
-4531 3015 l
-4531 3020 l
-4533 3022 l
-4535 3024 l
-S
-4535 3024 m
-4535 3029 l
-4537 3031 l
-4540 3033 l
-4540 3038 l
-4542 3040 l
-4544 3042 l
-4544 3047 l
-4546 3049 l
-4549 3051 l
-4549 3055 l
-4551 3058 l
-4553 3060 l
-4553 3064 l
-S
-4555 3067 m
-4553 3064 l
-S
-4544 4874 m
-4546 4872 l
-4549 4870 l
-4549 4865 l
-4551 4863 l
-4553 4861 l
-4553 4856 l
-4555 4854 l
-S
-4544 4874 m
-4544 4879 l
-4542 4881 l
-4540 4883 l
-4540 4888 l
-4537 4890 l
-4535 4892 l
-4535 4897 l
-4533 4899 l
-4531 4901 l
-4531 4906 l
-4528 4908 l
-4526 4910 l
-4526 4915 l
-S
-4515 4930 m
-4517 4928 l
-4517 4923 l
-4520 4921 l
-4522 4919 l
-4524 4917 l
-4526 4915 l
-S
-4475 2915 m
-4477 2917 l
-4477 2921 l
-4479 2924 l
-4482 2926 l
-4482 2930 l
-4484 2933 l
-4486 2935 l
-4486 2939 l
-4488 2941 l
-4490 2944 l
-S
-4490 2944 m
-4493 2946 l
-4495 2948 l
-4495 2953 l
-4497 2955 l
-4499 2957 l
-4499 2962 l
-4502 2964 l
-4504 2966 l
-4504 2971 l
-4506 2973 l
-4508 2975 l
-4508 2979 l
-4511 2982 l
-4513 2984 l
-S
-4513 2984 m
-4513 2988 l
-4515 2991 l
-S
-4504 4955 m
-4504 4950 l
-4506 4948 l
-4508 4946 l
-4508 4941 l
-4511 4939 l
-4513 4937 l
-4513 4932 l
-4515 4930 l
-S
-4504 4955 m
-4502 4957 l
-4499 4959 l
-4499 4964 l
-4497 4966 l
-4495 4968 l
-4493 4970 l
-4490 4973 l
-4490 4977 l
-4488 4979 l
-4486 4982 l
-4486 4986 l
-4484 4988 l
-4482 4990 l
-4482 4995 l
-S
-4475 5002 m
-4477 4999 l
-4479 4997 l
-4482 4995 l
-S
-4435 2852 m
-4437 2854 l
-4439 2857 l
-4441 2859 l
-4441 2863 l
-S
-4441 2863 m
-4444 2866 l
-4446 2868 l
-4448 2870 l
-4450 2872 l
-4450 2877 l
-4452 2879 l
-4455 2881 l
-4455 2886 l
-4457 2888 l
-4459 2890 l
-4461 2892 l
-4464 2895 l
-4464 2899 l
-4466 2901 l
-4468 2903 l
-S
-4468 2903 m
-4468 2908 l
-4470 2910 l
-4473 2912 l
-4475 2915 l
-S
-4455 5035 m
-4457 5033 l
-4459 5031 l
-4459 5026 l
-4461 5024 l
-4464 5022 l
-4466 5020 l
-4468 5017 l
-4468 5013 l
-4470 5011 l
-4473 5008 l
-4473 5004 l
-4475 5002 l
-S
-4435 5069 m
-4437 5066 l
-4439 5064 l
-4441 5062 l
-4441 5058 l
-4444 5055 l
-4446 5053 l
-4446 5049 l
-4448 5046 l
-4450 5044 l
-4452 5042 l
-4455 5040 l
-4455 5035 l
-S
-4394 2790 m
-4397 2792 l
-4397 2796 l
-4399 2798 l
-4401 2801 l
-4403 2803 l
-4406 2805 l
-4406 2810 l
-4408 2812 l
-4410 2814 l
-4412 2816 l
-4414 2819 l
-4414 2823 l
-S
-4414 2823 m
-4417 2825 l
-4419 2828 l
-4421 2830 l
-4423 2832 l
-4423 2836 l
-4426 2839 l
-4428 2841 l
-4430 2843 l
-4432 2845 l
-4432 2850 l
-4435 2852 l
-S
-4432 5075 m
-4432 5071 l
-4435 5069 l
-S
-4432 5075 m
-4430 5078 l
-4428 5080 l
-4426 5082 l
-4423 5084 l
-4423 5089 l
-4421 5091 l
-4419 5093 l
-4417 5096 l
-4414 5098 l
-4414 5102 l
-4412 5104 l
-4410 5107 l
-4408 5109 l
-4406 5111 l
-4406 5116 l
-S
-4394 5131 m
-4397 5129 l
-4397 5125 l
-4399 5122 l
-4401 5120 l
-4403 5118 l
-4406 5116 l
-S
-4354 2736 m
-4356 2738 l
-4359 2740 l
-4361 2743 l
-S
-4361 2743 m
-4363 2745 l
-4365 2747 l
-4365 2752 l
-4368 2754 l
-4370 2756 l
-4372 2758 l
-4374 2760 l
-4377 2763 l
-4379 2765 l
-4379 2769 l
-4381 2772 l
-4383 2774 l
-4385 2776 l
-4388 2778 l
-4388 2783 l
-S
-4388 2783 m
-4390 2785 l
-4392 2787 l
-4394 2790 l
-S
-4374 5156 m
-4377 5154 l
-4379 5151 l
-4381 5149 l
-4383 5147 l
-4385 5145 l
-4388 5142 l
-4388 5138 l
-4390 5136 l
-4392 5133 l
-4394 5131 l
-S
-4354 5185 m
-4356 5183 l
-4359 5180 l
-4361 5178 l
-4363 5176 l
-4365 5174 l
-4365 5169 l
-4368 5167 l
-4370 5165 l
-4372 5163 l
-4374 5160 l
-4374 5156 l
-S
-4314 2682 m
-4316 2685 l
-4318 2687 l
-4321 2689 l
-4323 2691 l
-4325 2693 l
-4325 2698 l
-4327 2700 l
-4330 2702 l
-S
-4330 2702 m
-4332 2705 l
-4334 2707 l
-4336 2709 l
-4339 2711 l
-4339 2716 l
-4341 2718 l
-4343 2720 l
-4345 2723 l
-4347 2725 l
-4350 2727 l
-4352 2729 l
-4352 2734 l
-4354 2736 l
-S
-4347 5196 m
-4350 5194 l
-4352 5192 l
-4352 5187 l
-4354 5185 l
-S
-4347 5196 m
-4345 5198 l
-4343 5201 l
-4341 5203 l
-4339 5205 l
-4339 5209 l
-4336 5212 l
-4334 5214 l
-4332 5216 l
-4330 5218 l
-4327 5221 l
-4325 5223 l
-4325 5227 l
-4323 5230 l
-4321 5232 l
-4318 5234 l
-4316 5236 l
-S
-4314 5239 m
-4316 5236 l
-S
-4274 2633 m
-4276 2635 l
-4278 2638 l
-4280 2640 l
-4283 2642 l
-4285 2644 l
-4287 2647 l
-4289 2649 l
-4289 2653 l
-4292 2655 l
-4294 2658 l
-4296 2660 l
-4298 2662 l
-S
-4298 2662 m
-4301 2664 l
-4303 2667 l
-4305 2669 l
-4307 2671 l
-4309 2673 l
-4312 2676 l
-4312 2680 l
-4314 2682 l
-S
-4314 5239 m
-4312 5241 l
-4309 5243 l
-4307 5245 l
-4307 5250 l
-4305 5252 l
-4303 5254 l
-4301 5256 l
-4298 5259 l
-4296 5261 l
-4294 5263 l
-4292 5265 l
-4289 5268 l
-4289 5272 l
-4287 5274 l
-4285 5277 l
-S
-4274 5288 m
-4276 5285 l
-4278 5283 l
-4280 5281 l
-4283 5279 l
-4285 5277 l
-S
-4233 2584 m
-4236 2586 l
-4238 2588 l
-4240 2591 l
-4240 2595 l
-4242 2597 l
-4245 2600 l
-4247 2602 l
-4249 2604 l
-4251 2606 l
-4254 2609 l
-4256 2611 l
-4258 2613 l
-4260 2615 l
-4263 2617 l
-4265 2620 l
-4267 2622 l
-S
-4267 2622 m
-4267 2626 l
-4269 2629 l
-4271 2631 l
-4274 2633 l
-S
-4249 5317 m
-4251 5314 l
-4254 5312 l
-4256 5310 l
-4258 5308 l
-4260 5306 l
-4263 5303 l
-4265 5301 l
-4267 5299 l
-4267 5294 l
-4269 5292 l
-4271 5290 l
-4274 5288 l
-S
-4233 5337 m
-4236 5335 l
-4236 5330 l
-4238 5328 l
-4240 5326 l
-4242 5323 l
-4245 5321 l
-4247 5319 l
-4249 5317 l
-S
-4193 2544 m
-4196 2546 l
-4198 2548 l
-4200 2550 l
-4202 2553 l
-4204 2555 l
-4207 2557 l
-4209 2559 l
-4211 2562 l
-4213 2564 l
-4216 2566 l
-4218 2568 l
-4220 2571 l
-4222 2573 l
-4225 2575 l
-4227 2577 l
-4229 2579 l
-4231 2582 l
-S
-4233 2584 m
-4231 2582 l
-S
-4213 5357 m
-4216 5355 l
-4218 5352 l
-4220 5350 l
-4222 5348 l
-4225 5346 l
-4227 5344 l
-4229 5341 l
-4231 5339 l
-4233 5337 l
-S
-4193 5377 m
-4196 5375 l
-4198 5373 l
-4200 5370 l
-4202 5368 l
-4204 5366 l
-4207 5364 l
-4209 5361 l
-4211 5359 l
-4213 5357 l
-S
-4153 2499 m
-4155 2501 l
-S
-4155 2501 m
-4158 2504 l
-4160 2506 l
-4162 2508 l
-4164 2510 l
-4166 2512 l
-4169 2515 l
-4171 2517 l
-4173 2519 l
-4175 2521 l
-4178 2524 l
-4180 2526 l
-4182 2528 l
-4184 2530 l
-4187 2533 l
-4189 2535 l
-4191 2537 l
-4191 2542 l
-S
-4193 2544 m
-4191 2542 l
-S
-4173 5397 m
-4175 5395 l
-4178 5393 l
-4180 5390 l
-4182 5388 l
-4184 5386 l
-4187 5384 l
-4189 5382 l
-4191 5379 l
-4193 5377 l
-S
-4153 5422 m
-4155 5420 l
-4158 5417 l
-4160 5415 l
-4162 5413 l
-4164 5411 l
-4166 5408 l
-4169 5406 l
-4171 5404 l
-4173 5402 l
-4173 5397 l
-S
-4113 2463 m
-4117 2463 l
-4120 2466 l
-4122 2468 l
-4124 2470 l
-4126 2472 l
-4128 2474 l
-4131 2477 l
-4133 2479 l
-4135 2481 l
-4137 2483 l
-4140 2486 l
-4142 2488 l
-4144 2490 l
-4146 2492 l
-4149 2495 l
-4151 2497 l
-4153 2499 l
-S
-4137 5437 m
-4140 5435 l
-4142 5433 l
-4144 5431 l
-4146 5428 l
-4149 5426 l
-4151 5424 l
-4153 5422 l
-S
-4113 5457 m
-4115 5455 l
-4117 5453 l
-4120 5451 l
-4122 5449 l
-4124 5446 l
-4126 5444 l
-4128 5442 l
-4131 5440 l
-4135 5440 l
-4137 5437 l
-S
-4073 2423 m
-4075 2425 l
-4077 2428 l
-4079 2430 l
-4082 2432 l
-4084 2434 l
-4086 2436 l
-4088 2439 l
-4090 2441 l
-4093 2443 l
-4095 2445 l
-4097 2448 l
-4099 2450 l
-4102 2452 l
-4104 2454 l
-4106 2457 l
-4108 2459 l
-4111 2461 l
-S
-4113 2463 m
-4111 2461 l
-S
-4093 5478 m
-4095 5475 l
-4097 5473 l
-4099 5471 l
-4102 5469 l
-4104 5466 l
-4106 5464 l
-4108 5462 l
-4111 5460 l
-4113 5457 l
-S
-4073 5498 m
-4075 5495 l
-4077 5493 l
-4079 5491 l
-4082 5489 l
-4084 5487 l
-4086 5484 l
-4088 5482 l
-4090 5480 l
-4093 5478 l
-S
-4032 2387 m
-4035 2390 l
-4037 2392 l
-4039 2394 l
-4041 2396 l
-4044 2399 l
-4046 2401 l
-4048 2403 l
-4050 2405 l
-4053 2407 l
-4055 2410 l
-4057 2412 l
-4059 2414 l
-4064 2414 l
-4066 2416 l
-4068 2419 l
-4070 2421 l
-S
-4073 2423 m
-4070 2421 l
-S
-4048 5518 m
-4050 5516 l
-4053 5513 l
-4055 5511 l
-4057 5509 l
-4059 5507 l
-4061 5504 l
-4064 5502 l
-4068 5502 l
-4070 5500 l
-4073 5498 l
-S
-4032 5529 m
-4037 5529 l
-4039 5527 l
-4041 5525 l
-4044 5522 l
-4046 5520 l
-4048 5518 l
-S
-3992 2356 m
-3994 2358 l
-3997 2361 l
-3999 2363 l
-4001 2365 l
-4006 2365 l
-4008 2367 l
-4010 2369 l
-4012 2372 l
-4015 2374 l
-4017 2376 l
-4019 2378 l
-4021 2381 l
-S
-4021 2381 m
-4023 2383 l
-4026 2385 l
-4028 2387 l
-4032 2387 l
-S
-3999 5558 m
-4001 5556 l
-4006 5556 l
-4008 5554 l
-4010 5551 l
-4012 5549 l
-4015 5547 l
-4017 5545 l
-4019 5542 l
-4021 5540 l
-4023 5538 l
-4026 5536 l
-4028 5533 l
-4030 5531 l
-4032 5529 l
-S
-3992 5565 m
-3994 5563 l
-3997 5560 l
-3999 5558 l
-S
-3952 2325 m
-3954 2327 l
-3956 2329 l
-3961 2329 l
-3963 2331 l
-3965 2334 l
-3968 2336 l
-3970 2338 l
-3972 2340 l
-S
-3972 2340 m
-3974 2343 l
-3979 2343 l
-3981 2345 l
-3983 2347 l
-3985 2349 l
-3988 2352 l
-3990 2354 l
-3992 2356 l
-S
-3952 5596 m
-3954 5594 l
-3956 5592 l
-3961 5592 l
-3963 5589 l
-3965 5587 l
-3968 5585 l
-3970 5583 l
-3972 5580 l
-3974 5578 l
-3977 5576 l
-3979 5574 l
-3983 5574 l
-3985 5571 l
-3988 5569 l
-3990 5567 l
-3992 5565 l
-S
-3912 2293 m
-3914 2296 l
-3916 2298 l
-3918 2300 l
-S
-3918 2300 m
-3921 2302 l
-3925 2302 l
-3927 2305 l
-3930 2307 l
-3932 2309 l
-3934 2311 l
-3936 2314 l
-3939 2316 l
-3943 2316 l
-3945 2318 l
-3947 2320 l
-3950 2323 l
-3952 2325 l
-S
-3950 5598 m
-3952 5596 l
-S
-3912 5627 m
-3914 5625 l
-3916 5623 l
-3918 5621 l
-3921 5618 l
-3925 5618 l
-3927 5616 l
-3930 5614 l
-3932 5612 l
-3934 5609 l
-3936 5607 l
-3939 5605 l
-3943 5605 l
-3945 5603 l
-3947 5601 l
-3950 5598 l
-S
-3872 2267 m
-3876 2267 l
-3878 2269 l
-3880 2271 l
-3883 2273 l
-3885 2276 l
-3889 2276 l
-3892 2278 l
-3894 2280 l
-3896 2282 l
-3898 2285 l
-3901 2287 l
-3903 2289 l
-3907 2289 l
-3909 2291 l
-3912 2293 l
-S
-3896 5638 m
-3898 5636 l
-3901 5634 l
-3903 5632 l
-3907 5632 l
-3909 5630 l
-3912 5627 l
-S
-3872 5654 m
-3876 5654 l
-3878 5652 l
-3880 5650 l
-3883 5647 l
-3885 5645 l
-3887 5643 l
-3889 5641 l
-3894 5641 l
-3896 5638 l
-S
-3831 2240 m
-3836 2240 l
-3838 2242 l
-3840 2244 l
-3842 2247 l
-3845 2249 l
-3849 2249 l
-3851 2251 l
-3854 2253 l
-3856 2256 l
-3858 2258 l
-3863 2258 l
-3865 2260 l
-S
-3865 2260 m
-3867 2262 l
-3869 2264 l
-3872 2267 l
-S
-3838 5679 m
-3840 5676 l
-3842 5674 l
-3845 5672 l
-3849 5672 l
-3851 5670 l
-3854 5668 l
-3856 5665 l
-3858 5663 l
-3863 5663 l
-3865 5661 l
-3867 5659 l
-3869 5656 l
-3872 5654 l
-S
-3831 5681 m
-3836 5681 l
-3838 5679 l
-S
-3791 2213 m
-3796 2213 l
-3798 2215 l
-3800 2218 l
-3802 2220 l
-S
-3802 2220 m
-3804 2222 l
-3809 2222 l
-3811 2224 l
-3813 2226 l
-3816 2229 l
-3818 2231 l
-3822 2231 l
-3825 2233 l
-3827 2235 l
-3829 2238 l
-3831 2240 l
-S
-3831 5681 m
-3829 5683 l
-3827 5685 l
-3825 5688 l
-3822 5690 l
-3818 5690 l
-3816 5692 l
-3813 5694 l
-3811 5697 l
-3809 5699 l
-3804 5699 l
-3802 5701 l
-3800 5703 l
-3796 5703 l
-3793 5706 l
-3791 5708 l
-S
-3751 2186 m
-3753 2188 l
-3755 2191 l
-3760 2191 l
-3762 2193 l
-3764 2195 l
-3766 2197 l
-3769 2200 l
-3773 2200 l
-3775 2202 l
-3778 2204 l
-3782 2204 l
-3784 2206 l
-3787 2209 l
-3789 2211 l
-3791 2213 l
-S
-3775 5719 m
-3778 5717 l
-3780 5714 l
-3782 5712 l
-3787 5712 l
-3789 5710 l
-3791 5708 l
-S
-3751 5735 m
-3753 5732 l
-3755 5730 l
-3758 5728 l
-3760 5726 l
-3764 5726 l
-3766 5723 l
-3769 5721 l
-3773 5721 l
-3775 5719 l
-S
-3711 2164 m
-3713 2166 l
-3715 2168 l
-3720 2168 l
-3722 2171 l
-3724 2173 l
-3729 2173 l
-3731 2175 l
-3733 2177 l
-3737 2177 l
-3740 2180 l
-S
-3740 2180 m
-3742 2182 l
-3744 2184 l
-3746 2186 l
-3751 2186 l
-S
-3711 5757 m
-3713 5755 l
-3715 5752 l
-3720 5752 l
-3722 5750 l
-3724 5748 l
-3729 5748 l
-3731 5746 l
-3733 5744 l
-3735 5741 l
-3737 5739 l
-3742 5739 l
-3744 5737 l
-3746 5735 l
-3751 5735 l
-S
-3670 2142 m
-3673 2144 l
-3675 2146 l
-3679 2146 l
-3682 2148 l
-3684 2150 l
-3688 2150 l
-3691 2153 l
-3693 2155 l
-3697 2155 l
-3699 2157 l
-3702 2159 l
-3706 2159 l
-3708 2162 l
-3711 2164 l
-S
-3704 5759 m
-3706 5757 l
-3711 5757 l
-S
-3670 5779 m
-3673 5777 l
-3675 5775 l
-3679 5775 l
-3682 5773 l
-3684 5770 l
-3688 5770 l
-3691 5768 l
-3693 5766 l
-3697 5766 l
-3699 5764 l
-3702 5761 l
-3704 5759 l
-S
-3630 2119 m
-3632 2121 l
-3635 2124 l
-3639 2124 l
-3641 2126 l
-3644 2128 l
-3648 2128 l
-3650 2130 l
-3653 2133 l
-3657 2133 l
-3659 2135 l
-3661 2137 l
-3664 2139 l
-S
-3670 2142 m
-3666 2142 l
-3664 2139 l
-S
-3630 5797 m
-3635 5797 l
-3637 5795 l
-3639 5793 l
-3644 5793 l
-3646 5790 l
-3648 5788 l
-3653 5788 l
-3655 5786 l
-3657 5784 l
-3661 5784 l
-3664 5781 l
-3666 5779 l
-3670 5779 l
-S
-3590 2101 m
-3594 2101 l
-3597 2104 l
-3599 2106 l
-3603 2106 l
-3606 2108 l
-3608 2110 l
-3612 2110 l
-3615 2112 l
-3617 2115 l
-3621 2115 l
-3623 2117 l
-3626 2119 l
-3630 2119 l
-S
-3628 5799 m
-3630 5797 l
-S
-3590 5819 m
-3592 5817 l
-3594 5815 l
-3599 5815 l
-3601 5813 l
-3603 5811 l
-3608 5811 l
-3612 5811 l
-3615 5808 l
-3617 5806 l
-3621 5806 l
-3623 5804 l
-3626 5802 l
-3628 5799 l
-S
-3550 2083 m
-3554 2083 l
-3556 2086 l
-3559 2088 l
-3563 2088 l
-3565 2090 l
-3568 2092 l
-3572 2092 l
-3577 2092 l
-3579 2095 l
-3581 2097 l
-3585 2097 l
-3588 2099 l
-S
-3590 2101 m
-3588 2099 l
-S
-3550 5837 m
-3554 5837 l
-3556 5835 l
-3559 5833 l
-3563 5833 l
-3565 5831 l
-3568 5828 l
-3572 5828 l
-3574 5826 l
-3577 5824 l
-3581 5824 l
-3583 5822 l
-3585 5819 l
-3590 5819 l
-S
-3510 2066 m
-3514 2066 l
-3516 2068 l
-3518 2070 l
-3523 2070 l
-3527 2070 l
-3530 2072 l
-3532 2075 l
-3536 2075 l
-3539 2077 l
-3541 2079 l
-3545 2079 l
-3548 2081 l
-3550 2083 l
-S
-3548 5840 m
-3550 5837 l
-S
-3510 5855 m
-3514 5855 l
-3516 5853 l
-3518 5851 l
-3523 5851 l
-3525 5849 l
-3527 5846 l
-3532 5846 l
-3536 5846 l
-3539 5844 l
-3541 5842 l
-3545 5842 l
-3548 5840 l
-S
-3469 2048 m
-3474 2048 l
-3476 2050 l
-3478 2052 l
-3483 2052 l
-3485 2054 l
-3487 2057 l
-3492 2057 l
-3496 2057 l
-3498 2059 l
-S
-3498 2059 m
-3501 2061 l
-3505 2061 l
-3507 2063 l
-3510 2066 l
-S
-3469 5873 m
-3472 5871 l
-3474 5869 l
-3478 5869 l
-3483 5869 l
-3485 5866 l
-3487 5864 l
-3492 5864 l
-3494 5862 l
-3496 5860 l
-3501 5860 l
-3505 5860 l
-3507 5857 l
-3510 5855 l
-S
-3429 2030 m
-3431 2032 l
-3434 2034 l
-3438 2034 l
-3440 2037 l
-3442 2039 l
-3447 2039 l
-3451 2039 l
-3454 2041 l
-3456 2043 l
-3460 2043 l
-3463 2045 l
-3465 2048 l
-3469 2048 l
-S
-3454 5880 m
-3456 5878 l
-3460 5878 l
-3463 5875 l
-3465 5873 l
-3469 5873 l
-S
-3429 5887 m
-3434 5887 l
-3438 5887 l
-3440 5884 l
-3442 5882 l
-3447 5882 l
-3451 5882 l
-3454 5880 l
-S
-3389 2016 m
-3393 2016 l
-3396 2019 l
-S
-3396 2019 m
-3398 2021 l
-3402 2021 l
-3405 2023 l
-3407 2025 l
-3411 2025 l
-3416 2025 l
-3418 2028 l
-3420 2030 l
-3425 2030 l
-3429 2030 l
-S
-3389 5904 m
-3391 5902 l
-3393 5900 l
-3398 5900 l
-3402 5900 l
-3405 5898 l
-3407 5895 l
-3411 5895 l
-3416 5895 l
-3418 5893 l
-3420 5891 l
-3425 5891 l
-3427 5889 l
-3429 5887 l
-S
-3349 2003 m
-3353 2003 l
-3355 2005 l
-3358 2007 l
-3362 2007 l
-3367 2007 l
-3369 2010 l
-3371 2012 l
-3375 2012 l
-3380 2012 l
-3382 2014 l
-3384 2016 l
-3389 2016 l
-S
-3349 5918 m
-3353 5918 l
-3355 5916 l
-3358 5913 l
-3362 5913 l
-3367 5913 l
-3369 5911 l
-3371 5909 l
-3375 5909 l
-3378 5907 l
-3380 5904 l
-3384 5904 l
-3389 5904 l
-S
-3308 1990 m
-3313 1990 l
-3315 1992 l
-3317 1994 l
-3322 1994 l
-3326 1994 l
-3329 1996 l
-3331 1999 l
-3335 1999 l
-3340 1999 l
-3342 2001 l
-3344 2003 l
-3349 2003 l
-S
-3342 5920 m
-3344 5918 l
-3349 5918 l
-S
-3308 5931 m
-3311 5929 l
-3313 5927 l
-3317 5927 l
-3322 5927 l
-3326 5927 l
-3329 5925 l
-3331 5922 l
-3335 5922 l
-3340 5922 l
-3342 5920 l
-S
-3268 1976 m
-3270 1978 l
-S
-3270 1978 m
-3273 1981 l
-3277 1981 l
-3282 1981 l
-3284 1983 l
-3286 1985 l
-3291 1985 l
-3295 1985 l
-3299 1985 l
-3302 1987 l
-3304 1990 l
-3308 1990 l
-S
-3268 5940 m
-3273 5940 l
-3277 5940 l
-3282 5940 l
-3284 5938 l
-3286 5936 l
-3291 5936 l
-3295 5936 l
-3297 5933 l
-3299 5931 l
-3304 5931 l
-3308 5931 l
-S
-3228 1967 m
-3232 1967 l
-3237 1967 l
-3239 1969 l
-3241 1972 l
-3246 1972 l
-3250 1972 l
-3255 1972 l
-3257 1974 l
-3259 1976 l
-3264 1976 l
-3268 1976 l
-S
-3228 5954 m
-3232 5954 l
-3235 5951 l
-3237 5949 l
-3241 5949 l
-3246 5949 l
-3250 5949 l
-3253 5947 l
-3255 5945 l
-3259 5945 l
-3264 5945 l
-3266 5942 l
-3268 5940 l
-S
-3188 1958 m
-3192 1958 l
-3197 1958 l
-3201 1958 l
-3203 1961 l
-3206 1963 l
-3210 1963 l
-3215 1963 l
-3219 1963 l
-3221 1965 l
-3224 1967 l
-3228 1967 l
-S
-3203 5960 m
-3206 5958 l
-3210 5958 l
-3215 5958 l
-3219 5958 l
-3221 5956 l
-3224 5954 l
-3228 5954 l
-S
-3188 5962 m
-3192 5962 l
-3197 5962 l
-3201 5962 l
-3203 5960 l
-S
-3148 1945 m
-3150 1947 l
-3152 1949 l
-3156 1949 l
-3161 1949 l
-3165 1949 l
-3168 1952 l
-3170 1954 l
-3174 1954 l
-3179 1954 l
-3183 1954 l
-3186 1956 l
-3188 1958 l
-S
-3188 5962 m
-3186 5965 l
-3183 5967 l
-3179 5967 l
-3174 5967 l
-3170 5967 l
-3168 5969 l
-3165 5971 l
-3161 5971 l
-3156 5971 l
-3152 5971 l
-3148 5971 l
-S
-3107 1936 m
-3110 1938 l
-S
-3110 1938 m
-3112 1940 l
-3116 1940 l
-3121 1940 l
-3125 1940 l
-3127 1943 l
-3130 1945 l
-3134 1945 l
-3139 1945 l
-3143 1945 l
-3148 1945 l
-S
-3107 5980 m
-3112 5980 l
-3116 5980 l
-3121 5980 l
-3125 5980 l
-3127 5978 l
-3130 5976 l
-3134 5976 l
-3139 5976 l
-3143 5976 l
-3145 5974 l
-3148 5971 l
-S
-3067 1932 m
-3072 1932 l
-3076 1932 l
-3081 1932 l
-3085 1932 l
-3087 1934 l
-3089 1936 l
-3094 1936 l
-3098 1936 l
-3103 1936 l
-3107 1936 l
-S
-3067 5989 m
-3072 5989 l
-3076 5989 l
-3081 5989 l
-3083 5987 l
-3085 5985 l
-3089 5985 l
-3094 5985 l
-3098 5985 l
-3103 5985 l
-3105 5983 l
-3107 5980 l
-S
-3027 1923 m
-3031 1923 l
-3036 1923 l
-3038 1925 l
-3040 1927 l
-3045 1927 l
-3049 1927 l
-3054 1927 l
-3058 1927 l
-3060 1929 l
-3063 1932 l
-3067 1932 l
-S
-3027 5998 m
-3031 5998 l
-3034 5996 l
-3036 5994 l
-3040 5994 l
-3045 5994 l
-3049 5994 l
-3054 5994 l
-3056 5992 l
-3058 5989 l
-3063 5989 l
-3067 5989 l
-S
-2987 1918 m
-2991 1918 l
-2996 1918 l
-3000 1918 l
-3005 1918 l
-3007 1920 l
-3009 1923 l
-3013 1923 l
-3018 1923 l
-3022 1923 l
-3027 1923 l
-S
-3002 6000 m
-3005 5998 l
-3009 5998 l
-3013 5998 l
-3018 5998 l
-3022 5998 l
-3027 5998 l
-S
-2987 6003 m
-2991 6003 l
-2996 6003 l
-3000 6003 l
-3002 6000 l
-S
-2946 1914 m
-2951 1914 l
-2955 1914 l
-2960 1914 l
-2964 1914 l
-2969 1914 l
-2973 1914 l
-2975 1916 l
-2978 1918 l
-2982 1918 l
-2987 1918 l
-S
-2987 6003 m
-2982 6003 l
-2978 6003 l
-2973 6003 l
-2971 6005 l
-2969 6007 l
-2964 6007 l
-2960 6007 l
-2955 6007 l
-2951 6007 l
-2946 6007 l
-S
-2906 1909 m
-2911 1909 l
-2915 1909 l
-2920 1909 l
-2924 1909 l
-2929 1909 l
-2933 1909 l
-2938 1909 l
-2942 1909 l
-2944 1911 l
-2946 1914 l
-S
-2906 6012 m
-2911 6012 l
-2915 6012 l
-2920 6012 l
-2924 6012 l
-2929 6012 l
-2933 6012 l
-2935 6009 l
-2938 6007 l
-2942 6007 l
-2946 6007 l
-S
-2866 1905 m
-2870 1905 l
-2875 1905 l
-2879 1905 l
-2884 1905 l
-2888 1905 l
-2893 1905 l
-2897 1905 l
-2902 1905 l
-2904 1907 l
-2906 1909 l
-S
-2866 6016 m
-2870 6016 l
-2875 6016 l
-2879 6016 l
-2884 6016 l
-2888 6016 l
-2893 6016 l
-2895 6014 l
-2897 6012 l
-2902 6012 l
-2906 6012 l
-S
-2826 1900 m
-2830 1900 l
-2835 1900 l
-2839 1900 l
-2844 1900 l
-2848 1900 l
-2853 1900 l
-2855 1902 l
-2857 1905 l
-2862 1905 l
-2866 1905 l
-S
-2826 6021 m
-2830 6021 l
-2835 6021 l
-2839 6021 l
-2841 6018 l
-2844 6016 l
-2848 6016 l
-2853 6016 l
-2857 6016 l
-2862 6016 l
-2866 6016 l
-S
-2826 1900 m
-2821 1900 l
-2817 1900 l
-2812 1900 l
-2808 1900 l
-2803 1900 l
-2799 1900 l
-2794 1900 l
-2790 1900 l
-2786 1900 l
-S
-2786 6021 m
-2790 6021 l
-2794 6021 l
-2799 6021 l
-2803 6021 l
-2808 6021 l
-2812 6021 l
-2817 6021 l
-2821 6021 l
-2826 6021 l
-S
-2745 1896 m
-2750 1896 l
-2754 1896 l
-2759 1896 l
-2763 1896 l
-2768 1896 l
-2772 1896 l
-2777 1896 l
-2779 1898 l
-S
-2786 1900 m
-2781 1900 l
-2779 1898 l
-S
-2745 6025 m
-2750 6025 l
-2754 6025 l
-2757 6023 l
-2759 6021 l
-2763 6021 l
-2768 6021 l
-2772 6021 l
-2777 6021 l
-2781 6021 l
-2786 6021 l
-S
-2705 1896 m
-2710 1896 l
-2714 1896 l
-2719 1896 l
-2723 1896 l
-2727 1896 l
-2732 1896 l
-2736 1896 l
-2741 1896 l
-2745 1896 l
-S
-2705 6025 m
-2710 6025 l
-2714 6025 l
-2719 6025 l
-2723 6025 l
-2727 6025 l
-2732 6025 l
-2736 6025 l
-2741 6025 l
-2745 6025 l
-S
-2665 1896 m
-2669 1896 l
-2674 1896 l
-2678 1896 l
-2683 1896 l
-2687 1896 l
-2692 1896 l
-2696 1896 l
-2701 1896 l
-2705 1896 l
-S
-2665 6025 m
-2669 6025 l
-2674 6025 l
-2678 6025 l
-2683 6025 l
-2687 6025 l
-2692 6025 l
-2696 6025 l
-2701 6025 l
-2705 6025 l
-S
-2625 1896 m
-2629 1896 l
-2634 1896 l
-2638 1896 l
-2643 1896 l
-2647 1896 l
-2651 1896 l
-2656 1896 l
-2660 1896 l
-2665 1896 l
-S
-2625 6021 m
-2629 6021 l
-2631 6023 l
-2634 6025 l
-2638 6025 l
-2643 6025 l
-2647 6025 l
-2651 6025 l
-2656 6025 l
-2660 6025 l
-2665 6025 l
-S
-2614 1898 m
-2616 1896 l
-2620 1896 l
-2625 1896 l
-S
-2584 1900 m
-2589 1900 l
-2593 1900 l
-2598 1900 l
-2602 1900 l
-2607 1900 l
-2611 1900 l
-2614 1898 l
-S
-2584 6021 m
-2589 6021 l
-2593 6021 l
-2598 6021 l
-2602 6021 l
-2607 6021 l
-2611 6021 l
-2616 6021 l
-2620 6021 l
-2625 6021 l
-S
-2584 1900 m
-2580 1900 l
-2576 1900 l
-2571 1900 l
-2567 1900 l
-2562 1900 l
-2558 1900 l
-2553 1900 l
-2549 1900 l
-2544 1900 l
-S
-2544 6016 m
-2546 6018 l
-2549 6021 l
-2553 6021 l
-2558 6021 l
-2562 6021 l
-2567 6021 l
-2571 6021 l
-2576 6021 l
-2580 6021 l
-2584 6021 l
-S
-2544 1900 m
-2540 1900 l
-2538 1902 l
-2535 1905 l
-2531 1905 l
-2526 1905 l
-2522 1905 l
-2517 1905 l
-2513 1905 l
-2508 1905 l
-2504 1905 l
-S
-2504 6016 m
-2508 6016 l
-2513 6016 l
-2517 6016 l
-2522 6016 l
-2526 6016 l
-2531 6016 l
-2535 6016 l
-2540 6016 l
-2544 6016 l
-S
-2464 1909 m
-2468 1909 l
-2473 1909 l
-2477 1909 l
-2482 1909 l
-2484 1907 l
-2486 1905 l
-2491 1905 l
-2495 1905 l
-2500 1905 l
-2504 1905 l
-S
-2464 6012 m
-2468 6012 l
-2473 6012 l
-2477 6012 l
-2482 6012 l
-2486 6012 l
-2491 6012 l
-2493 6014 l
-2495 6016 l
-2500 6016 l
-2504 6016 l
-S
-2424 1914 m
-2428 1914 l
-2433 1914 l
-2437 1914 l
-2441 1914 l
-2444 1911 l
-2446 1909 l
-2450 1909 l
-2455 1909 l
-2459 1909 l
-2464 1909 l
-S
-2424 6007 m
-2428 6007 l
-2433 6007 l
-2437 6007 l
-2441 6007 l
-2446 6007 l
-2450 6007 l
-2453 6009 l
-2455 6012 l
-2459 6012 l
-2464 6012 l
-S
-2383 1918 m
-2388 1918 l
-2392 1918 l
-2397 1918 l
-2401 1918 l
-2406 1918 l
-2410 1918 l
-2412 1916 l
-2415 1914 l
-2419 1914 l
-2424 1914 l
-S
-2383 5998 m
-2386 6000 l
-S
-2386 6000 m
-2388 6003 l
-2392 6003 l
-2397 6003 l
-2401 6003 l
-2406 6003 l
-2410 6003 l
-2415 6003 l
-2417 6005 l
-2419 6007 l
-2424 6007 l
-S
-2343 1927 m
-2348 1927 l
-2352 1927 l
-2354 1925 l
-2357 1923 l
-2361 1923 l
-2365 1923 l
-2370 1923 l
-2374 1923 l
-2379 1923 l
-2381 1920 l
-2383 1918 l
-S
-2343 5994 m
-2348 5994 l
-2352 5994 l
-2357 5994 l
-2359 5996 l
-2361 5998 l
-2365 5998 l
-2370 5998 l
-2374 5998 l
-2379 5998 l
-2383 5998 l
-S
-2303 1936 m
-2305 1934 l
-2307 1932 l
-2312 1932 l
-2316 1932 l
-2321 1932 l
-2325 1932 l
-2327 1929 l
-2330 1927 l
-2334 1927 l
-2339 1927 l
-2343 1927 l
-S
-2303 5985 m
-2305 5987 l
-2307 5989 l
-2312 5989 l
-2316 5989 l
-2321 5989 l
-2325 5989 l
-2330 5989 l
-2332 5992 l
-2334 5994 l
-2339 5994 l
-2343 5994 l
-S
-2283 1938 m
-2285 1936 l
-2290 1936 l
-2294 1936 l
-2298 1936 l
-2303 1936 l
-S
-2263 1940 m
-2267 1940 l
-2272 1940 l
-2276 1940 l
-2281 1940 l
-2283 1938 l
-S
-2263 5976 m
-2265 5978 l
-2267 5980 l
-2272 5980 l
-2276 5980 l
-2281 5980 l
-2283 5983 l
-2285 5985 l
-2290 5985 l
-2294 5985 l
-2298 5985 l
-2303 5985 l
-S
-2263 1940 m
-2260 1943 l
-2258 1945 l
-2254 1945 l
-2249 1945 l
-2245 1945 l
-2240 1945 l
-2238 1947 l
-2236 1949 l
-2231 1949 l
-2227 1949 l
-2222 1949 l
-S
-2222 5967 m
-2225 5969 l
-2227 5971 l
-2231 5971 l
-2236 5971 l
-2240 5971 l
-2243 5974 l
-2245 5976 l
-2249 5976 l
-2254 5976 l
-2258 5976 l
-2263 5976 l
-S
-2182 1963 m
-2184 1961 l
-2187 1958 l
-2191 1958 l
-2196 1958 l
-2200 1958 l
-2202 1956 l
-2205 1954 l
-2209 1954 l
-2214 1954 l
-2218 1954 l
-2220 1952 l
-2222 1949 l
-S
-2182 5958 m
-2184 5960 l
-S
-2184 5960 m
-2187 5962 l
-2191 5962 l
-2196 5962 l
-2200 5962 l
-2202 5965 l
-2205 5967 l
-2209 5967 l
-2214 5967 l
-2218 5967 l
-2222 5967 l
-S
-2142 1972 m
-2147 1972 l
-2149 1969 l
-2151 1967 l
-2155 1967 l
-2160 1967 l
-2164 1967 l
-2167 1965 l
-2169 1963 l
-2173 1963 l
-2178 1963 l
-2182 1963 l
-S
-2142 5949 m
-2147 5949 l
-2151 5949 l
-2153 5951 l
-2155 5954 l
-2160 5954 l
-2164 5954 l
-2169 5954 l
-2171 5956 l
-2173 5958 l
-2178 5958 l
-2182 5958 l
-S
-2117 1978 m
-2120 1976 l
-2124 1976 l
-2129 1976 l
-2133 1976 l
-2135 1974 l
-2138 1972 l
-2142 1972 l
-S
-2102 1985 m
-2104 1983 l
-2106 1981 l
-2111 1981 l
-2115 1981 l
-2117 1978 l
-S
-2102 5936 m
-2104 5938 l
-2106 5940 l
-2111 5940 l
-2115 5940 l
-2120 5940 l
-2122 5942 l
-2124 5945 l
-2129 5945 l
-2133 5945 l
-2135 5947 l
-2138 5949 l
-2142 5949 l
-S
-2062 1994 m
-2066 1994 l
-2071 1994 l
-2073 1992 l
-2075 1990 l
-2079 1990 l
-2084 1990 l
-2086 1987 l
-2088 1985 l
-2093 1985 l
-2097 1985 l
-2102 1985 l
-S
-2062 5922 m
-2064 5925 l
-2066 5927 l
-2071 5927 l
-2075 5927 l
-2077 5929 l
-2079 5931 l
-2084 5931 l
-2088 5931 l
-2091 5933 l
-2093 5936 l
-2097 5936 l
-2102 5936 l
-S
-2021 2007 m
-2026 2007 l
-2030 2007 l
-2033 2005 l
-2035 2003 l
-2039 2003 l
-2044 2003 l
-2046 2001 l
-2048 1999 l
-2053 1999 l
-2057 1999 l
-2059 1996 l
-2062 1994 l
-S
-2021 5909 m
-2024 5911 l
-2026 5913 l
-2030 5913 l
-2035 5913 l
-2037 5916 l
-2039 5918 l
-2044 5918 l
-2048 5918 l
-2050 5920 l
-S
-2062 5922 m
-2057 5922 l
-2053 5922 l
-2050 5920 l
-S
-1992 2019 m
-1995 2016 l
-1999 2016 l
-2003 2016 l
-2006 2014 l
-2008 2012 l
-2012 2012 l
-2017 2012 l
-2019 2010 l
-2021 2007 l
-S
-1981 2025 m
-1983 2023 l
-1986 2021 l
-1990 2021 l
-1992 2019 l
-S
-1981 5895 m
-1983 5898 l
-1986 5900 l
-1990 5900 l
-1995 5900 l
-1997 5902 l
-1999 5904 l
-2003 5904 l
-2008 5904 l
-2010 5907 l
-2012 5909 l
-2017 5909 l
-2021 5909 l
-S
-1941 2039 m
-1945 2039 l
-1948 2037 l
-1950 2034 l
-1954 2034 l
-1957 2032 l
-1959 2030 l
-1963 2030 l
-1968 2030 l
-1970 2028 l
-1972 2025 l
-1977 2025 l
-1981 2025 l
-S
-1941 5882 m
-1945 5882 l
-1948 5884 l
-1950 5887 l
-1954 5887 l
-1959 5887 l
-1961 5889 l
-1963 5891 l
-1968 5891 l
-1970 5893 l
-1972 5895 l
-1977 5895 l
-1981 5895 l
-S
-1901 2057 m
-1903 2054 l
-1905 2052 l
-1910 2052 l
-1912 2050 l
-1914 2048 l
-1919 2048 l
-1923 2048 l
-1925 2045 l
-1928 2043 l
-1932 2043 l
-1934 2041 l
-1936 2039 l
-1941 2039 l
-S
-1901 5864 m
-1903 5866 l
-1905 5869 l
-1910 5869 l
-1914 5869 l
-1916 5871 l
-1919 5873 l
-1923 5873 l
-1925 5875 l
-1928 5878 l
-1932 5878 l
-1936 5878 l
-1939 5880 l
-S
-1941 5882 m
-1939 5880 l
-S
-1890 2059 m
-1892 2057 l
-1896 2057 l
-1901 2057 l
-S
-1860 2075 m
-1863 2072 l
-1865 2070 l
-1869 2070 l
-1872 2068 l
-1874 2066 l
-1878 2066 l
-1881 2063 l
-1883 2061 l
-1887 2061 l
-1890 2059 l
-S
-1860 5846 m
-1863 5849 l
-1865 5851 l
-1869 5851 l
-1872 5853 l
-1874 5855 l
-1878 5855 l
-1881 5857 l
-1883 5860 l
-1887 5860 l
-1892 5860 l
-1894 5862 l
-1896 5864 l
-1901 5864 l
-S
-1820 2092 m
-1823 2090 l
-1825 2088 l
-1829 2088 l
-1831 2086 l
-1834 2083 l
-1838 2083 l
-1840 2081 l
-1843 2079 l
-1847 2079 l
-1849 2077 l
-1852 2075 l
-1856 2075 l
-1860 2075 l
-S
-1820 5828 m
-1823 5831 l
-1825 5833 l
-1829 5833 l
-1831 5835 l
-1834 5837 l
-1838 5837 l
-1840 5840 l
-S
-1840 5840 m
-1843 5842 l
-1847 5842 l
-1852 5842 l
-1854 5844 l
-1856 5846 l
-1860 5846 l
-S
-1800 2099 m
-1802 2097 l
-1807 2097 l
-1811 2097 l
-1814 2095 l
-1816 2092 l
-1820 2092 l
-S
-1780 2110 m
-1782 2108 l
-1785 2106 l
-1789 2106 l
-1791 2104 l
-1793 2101 l
-1798 2101 l
-1800 2099 l
-S
-1780 5811 m
-1785 5811 l
-1787 5813 l
-1789 5815 l
-1793 5815 l
-1796 5817 l
-1798 5819 l
-1802 5819 l
-1805 5822 l
-1807 5824 l
-1811 5824 l
-1814 5826 l
-1816 5828 l
-1820 5828 l
-S
-1740 2128 m
-1744 2128 l
-1747 2126 l
-1749 2124 l
-1753 2124 l
-1755 2121 l
-1758 2119 l
-1762 2119 l
-1764 2117 l
-1767 2115 l
-1771 2115 l
-1773 2112 l
-1776 2110 l
-1780 2110 l
-S
-1740 5788 m
-1742 5790 l
-1744 5793 l
-1749 5793 l
-1751 5795 l
-1753 5797 l
-1758 5797 l
-1760 5799 l
-S
-1760 5799 m
-1762 5802 l
-1767 5802 l
-1769 5804 l
-1771 5806 l
-1776 5806 l
-1778 5808 l
-1780 5811 l
-S
-1724 2139 m
-1726 2137 l
-1731 2137 l
-1733 2135 l
-1735 2133 l
-1738 2130 l
-1740 2128 l
-S
-1700 2150 m
-1704 2150 l
-1706 2148 l
-1709 2146 l
-1713 2146 l
-1715 2144 l
-1717 2142 l
-1722 2142 l
-1724 2139 l
-S
-1700 5770 m
-1704 5770 l
-1706 5773 l
-1709 5775 l
-1713 5775 l
-1715 5777 l
-1717 5779 l
-1722 5779 l
-1724 5781 l
-1726 5784 l
-1731 5784 l
-1733 5786 l
-1735 5788 l
-1740 5788 l
-S
-1659 2173 m
-1664 2173 l
-1666 2171 l
-1668 2168 l
-1673 2168 l
-1675 2166 l
-1677 2164 l
-1682 2164 l
-1684 2162 l
-1686 2159 l
-1688 2157 l
-1691 2155 l
-1695 2155 l
-1697 2153 l
-1700 2150 l
-S
-1659 5744 m
-1662 5746 l
-1664 5748 l
-1666 5750 l
-1668 5752 l
-1673 5752 l
-1675 5755 l
-1677 5757 l
-1682 5757 l
-1684 5759 l
-S
-1684 5759 m
-1686 5761 l
-1691 5761 l
-1693 5764 l
-1695 5766 l
-1697 5768 l
-1700 5770 l
-S
-1653 2180 m
-1655 2177 l
-1657 2175 l
-1659 2173 l
-S
-1619 2200 m
-1621 2197 l
-1624 2195 l
-1628 2195 l
-1630 2193 l
-1633 2191 l
-1635 2188 l
-1637 2186 l
-1642 2186 l
-1644 2184 l
-1646 2182 l
-1650 2182 l
-1653 2180 l
-S
-1619 5721 m
-1621 5723 l
-1624 5726 l
-1628 5726 l
-1630 5728 l
-1633 5730 l
-1637 5730 l
-1639 5732 l
-1642 5735 l
-1644 5737 l
-1646 5739 l
-1650 5739 l
-1653 5741 l
-1655 5744 l
-1659 5744 l
-S
-1586 2220 m
-1588 2218 l
-1590 2215 l
-1592 2213 l
-1597 2213 l
-1599 2211 l
-1601 2209 l
-1606 2209 l
-1608 2206 l
-1610 2204 l
-1612 2202 l
-1615 2200 l
-1619 2200 l
-S
-1579 2222 m
-1583 2222 l
-1586 2220 l
-S
-1579 5694 m
-1581 5697 l
-1583 5699 l
-1586 5701 l
-1588 5703 l
-1592 5703 l
-1595 5706 l
-1597 5708 l
-1599 5710 l
-1601 5712 l
-1606 5712 l
-1608 5714 l
-1610 5717 l
-1615 5717 l
-1617 5719 l
-S
-1619 5721 m
-1617 5719 l
-S
-1579 2222 m
-1577 2224 l
-1574 2226 l
-1572 2229 l
-1570 2231 l
-1566 2231 l
-1563 2233 l
-1561 2235 l
-1559 2238 l
-1557 2240 l
-1552 2240 l
-1550 2242 l
-1548 2244 l
-1545 2247 l
-1543 2249 l
-1539 2249 l
-S
-1539 5672 m
-1543 5672 l
-1545 5674 l
-1548 5676 l
-1550 5679 l
-S
-1550 5679 m
-1552 5681 l
-1557 5681 l
-1559 5683 l
-1561 5685 l
-1563 5688 l
-1566 5690 l
-1570 5690 l
-1572 5692 l
-1574 5694 l
-1579 5694 l
-S
-1523 2260 m
-1525 2258 l
-1530 2258 l
-1532 2256 l
-1534 2253 l
-1536 2251 l
-1539 2249 l
-S
-1499 2280 m
-1501 2278 l
-1503 2276 l
-1505 2273 l
-1507 2271 l
-1510 2269 l
-1512 2267 l
-1516 2267 l
-1519 2264 l
-1521 2262 l
-1523 2260 l
-S
-1499 5641 m
-1501 5643 l
-1503 5645 l
-1505 5647 l
-1507 5650 l
-1512 5650 l
-1514 5652 l
-1516 5654 l
-1519 5656 l
-1521 5659 l
-1525 5659 l
-1528 5661 l
-1530 5663 l
-1532 5665 l
-1534 5668 l
-1536 5670 l
-1539 5672 l
-S
-1469 2300 m
-1472 2298 l
-1474 2296 l
-1476 2293 l
-1478 2291 l
-1481 2289 l
-1485 2289 l
-1487 2287 l
-1490 2285 l
-1492 2282 l
-1494 2280 l
-1499 2280 l
-S
-1458 2307 m
-1461 2305 l
-1463 2302 l
-1467 2302 l
-1469 2300 l
-S
-1458 5614 m
-1463 5614 l
-1465 5616 l
-1467 5618 l
-1469 5621 l
-1472 5623 l
-1474 5625 l
-1476 5627 l
-1481 5627 l
-1483 5630 l
-1485 5632 l
-1487 5634 l
-1490 5636 l
-1492 5638 l
-S
-1499 5641 m
-1494 5641 l
-1492 5638 l
-S
-1418 2338 m
-1420 2336 l
-1423 2334 l
-1425 2331 l
-1427 2329 l
-1431 2329 l
-1434 2327 l
-1436 2325 l
-1438 2323 l
-1440 2320 l
-1443 2318 l
-1445 2316 l
-1449 2316 l
-1452 2314 l
-1454 2311 l
-1456 2309 l
-1458 2307 l
-S
-1418 5583 m
-1420 5585 l
-1423 5587 l
-1427 5587 l
-1429 5589 l
-1431 5592 l
-1434 5594 l
-1436 5596 l
-1438 5598 l
-S
-1438 5598 m
-1440 5601 l
-1445 5601 l
-1447 5603 l
-1449 5605 l
-1452 5607 l
-1454 5609 l
-1456 5612 l
-1458 5614 l
-S
-1416 2340 m
-1418 2338 l
-S
-1378 2369 m
-1380 2367 l
-1382 2365 l
-1387 2365 l
-1389 2363 l
-1391 2361 l
-1393 2358 l
-1396 2356 l
-1398 2354 l
-1400 2352 l
-1402 2349 l
-1405 2347 l
-1409 2347 l
-1411 2345 l
-1414 2343 l
-1416 2340 l
-S
-1378 5551 m
-1382 5551 l
-1385 5554 l
-1387 5556 l
-1389 5558 l
-S
-1389 5558 m
-1391 5560 l
-1393 5563 l
-1396 5565 l
-1398 5567 l
-1400 5569 l
-1405 5569 l
-1407 5571 l
-1409 5574 l
-1411 5576 l
-1414 5578 l
-1416 5580 l
-1418 5583 l
-S
-1367 2381 m
-1369 2378 l
-1371 2376 l
-1373 2374 l
-1376 2372 l
-1378 2369 l
-S
-1338 2405 m
-1340 2403 l
-1342 2401 l
-1344 2399 l
-1347 2396 l
-1349 2394 l
-1351 2392 l
-1353 2390 l
-1355 2387 l
-1360 2387 l
-1362 2385 l
-1364 2383 l
-1367 2381 l
-S
-1338 5516 m
-1340 5518 l
-S
-1340 5518 m
-1342 5520 l
-1344 5522 l
-1347 5525 l
-1351 5525 l
-1353 5527 l
-1355 5529 l
-1358 5531 l
-1360 5533 l
-1362 5536 l
-1364 5538 l
-1367 5540 l
-1369 5542 l
-1371 5545 l
-1373 5547 l
-1376 5549 l
-1378 5551 l
-S
-1318 2421 m
-1320 2419 l
-1324 2419 l
-1326 2416 l
-1329 2414 l
-1331 2412 l
-1333 2410 l
-1335 2407 l
-1338 2405 l
-S
-1297 2441 m
-1300 2439 l
-1302 2436 l
-1304 2434 l
-1306 2432 l
-1309 2430 l
-1311 2428 l
-1313 2425 l
-1315 2423 l
-1318 2421 l
-S
-1297 5480 m
-1300 5482 l
-1302 5484 l
-1304 5487 l
-1306 5489 l
-1309 5491 l
-1311 5493 l
-1315 5493 l
-1318 5495 l
-1320 5498 l
-1322 5500 l
-1324 5502 l
-1326 5504 l
-1329 5507 l
-1331 5509 l
-1333 5511 l
-1335 5513 l
-1338 5516 l
-S
-1277 2461 m
-1280 2459 l
-1282 2457 l
-1284 2454 l
-1286 2452 l
-1288 2450 l
-1291 2448 l
-1293 2445 l
-1295 2443 l
-1297 2441 l
-S
-1257 2481 m
-1259 2479 l
-1262 2477 l
-1264 2474 l
-1266 2472 l
-1268 2470 l
-1271 2468 l
-1273 2466 l
-1275 2463 l
-1277 2461 l
-S
-1257 5440 m
-1259 5442 l
-1262 5444 l
-1264 5446 l
-1266 5449 l
-1268 5451 l
-1271 5453 l
-1273 5455 l
-1275 5457 l
-1277 5460 l
-1280 5462 l
-1282 5464 l
-1284 5466 l
-1286 5469 l
-1288 5471 l
-1291 5473 l
-1293 5475 l
-1295 5478 l
-S
-1297 5480 m
-1295 5478 l
-S
-1233 2501 m
-1235 2499 l
-1237 2497 l
-1239 2495 l
-1242 2492 l
-1244 2490 l
-1246 2488 l
-1248 2486 l
-1250 2483 l
-1253 2481 l
-1257 2481 l
-S
-1217 2517 m
-1219 2515 l
-1221 2512 l
-1224 2510 l
-1226 2508 l
-1228 2506 l
-1230 2504 l
-1233 2501 l
-S
-1217 5399 m
-1219 5402 l
-1221 5404 l
-1224 5406 l
-1226 5408 l
-1228 5411 l
-1230 5413 l
-1233 5415 l
-1235 5417 l
-1237 5420 l
-1239 5422 l
-1242 5424 l
-1244 5426 l
-1246 5428 l
-1248 5431 l
-1250 5433 l
-1253 5435 l
-1255 5437 l
-S
-1257 5440 m
-1255 5437 l
-S
-1197 2542 m
-1199 2539 l
-1201 2537 l
-1204 2535 l
-1206 2533 l
-1208 2530 l
-1210 2528 l
-1212 2526 l
-1215 2524 l
-1215 2519 l
-1217 2517 l
-S
-1177 2562 m
-1179 2559 l
-1181 2557 l
-1183 2555 l
-1186 2553 l
-1188 2550 l
-1190 2548 l
-1192 2546 l
-1195 2544 l
-1197 2542 l
-S
-1177 5359 m
-1179 5361 l
-1181 5364 l
-1183 5366 l
-1186 5368 l
-1188 5370 l
-1190 5373 l
-1192 5375 l
-1195 5377 l
-1197 5379 l
-1199 5382 l
-1201 5384 l
-1204 5386 l
-1206 5388 l
-1208 5390 l
-1210 5393 l
-1212 5395 l
-1215 5397 l
-S
-1217 5399 m
-1215 5397 l
-S
-1157 2582 m
-1159 2579 l
-1161 2577 l
-1163 2575 l
-1166 2573 l
-1168 2571 l
-1170 2568 l
-1172 2566 l
-1175 2564 l
-1177 2562 l
-S
-1137 2606 m
-1139 2604 l
-1141 2602 l
-1143 2600 l
-1145 2597 l
-1148 2595 l
-1150 2593 l
-1152 2591 l
-1152 2586 l
-1154 2584 l
-1157 2582 l
-S
-1137 5314 m
-1139 5317 l
-S
-1139 5317 m
-1141 5319 l
-1143 5321 l
-1145 5323 l
-1148 5326 l
-1150 5328 l
-1152 5330 l
-1154 5332 l
-1157 5335 l
-1159 5337 l
-1161 5339 l
-1161 5344 l
-1163 5346 l
-1166 5348 l
-1168 5350 l
-1170 5352 l
-1172 5355 l
-1175 5357 l
-S
-1177 5359 m
-1175 5357 l
-S
-1125 2622 m
-1125 2617 l
-1128 2615 l
-1130 2613 l
-1132 2611 l
-1134 2609 l
-1137 2606 l
-S
-1096 2655 m
-1099 2653 l
-1099 2649 l
-1101 2647 l
-1103 2644 l
-1105 2642 l
-1107 2640 l
-1110 2638 l
-1112 2635 l
-1114 2633 l
-1116 2631 l
-1119 2629 l
-1121 2626 l
-1123 2624 l
-1125 2622 l
-S
-1096 5265 m
-1099 5268 l
-1101 5270 l
-1103 5272 l
-1103 5277 l
-S
-1103 5277 m
-1105 5279 l
-1107 5281 l
-1110 5283 l
-1112 5285 l
-1114 5288 l
-1116 5290 l
-1119 5292 l
-1121 5294 l
-1123 5297 l
-1125 5299 l
-1128 5301 l
-1130 5303 l
-1130 5308 l
-1132 5310 l
-1134 5312 l
-1137 5314 l
-S
-1090 2662 m
-1092 2660 l
-1094 2658 l
-1096 2655 l
-S
-1090 2662 m
-1087 2664 l
-1085 2667 l
-1083 2669 l
-1081 2671 l
-1081 2676 l
-1078 2678 l
-1076 2680 l
-1074 2682 l
-1072 2685 l
-1069 2687 l
-1067 2689 l
-1065 2691 l
-1063 2693 l
-1063 2698 l
-1061 2700 l
-1058 2702 l
-S
-1056 2705 m
-1058 2702 l
-S
-1056 5216 m
-1058 5218 l
-1061 5221 l
-1063 5223 l
-1065 5225 l
-1067 5227 l
-1067 5232 l
-1069 5234 l
-1072 5236 l
-S
-1072 5236 m
-1074 5239 l
-1076 5241 l
-1078 5243 l
-1081 5245 l
-1083 5247 l
-1085 5250 l
-1085 5254 l
-1087 5256 l
-1090 5259 l
-1092 5261 l
-1094 5263 l
-1096 5265 l
-S
-1056 2705 m
-1054 2707 l
-1052 2709 l
-1049 2711 l
-1049 2716 l
-1047 2718 l
-1045 2720 l
-1043 2723 l
-1040 2725 l
-1038 2727 l
-1036 2729 l
-1036 2734 l
-1034 2736 l
-1031 2738 l
-1029 2740 l
-1027 2743 l
-S
-1016 2758 m
-1018 2756 l
-1020 2754 l
-1023 2752 l
-1023 2747 l
-1025 2745 l
-1027 2743 l
-S
-1016 5163 m
-1018 5165 l
-1020 5167 l
-1023 5169 l
-1025 5171 l
-1027 5174 l
-1027 5178 l
-1029 5180 l
-1031 5183 l
-1034 5185 l
-1036 5187 l
-1038 5189 l
-1040 5192 l
-1040 5196 l
-S
-1040 5196 m
-1043 5198 l
-1045 5201 l
-1047 5203 l
-1049 5205 l
-1052 5207 l
-1054 5209 l
-1054 5214 l
-1056 5216 l
-S
-1000 2783 m
-1000 2778 l
-1002 2776 l
-1005 2774 l
-1007 2772 l
-1009 2769 l
-1011 2767 l
-1014 2765 l
-1014 2760 l
-1016 2758 l
-S
-976 2816 m
-978 2814 l
-980 2812 l
-982 2810 l
-982 2805 l
-985 2803 l
-987 2801 l
-989 2798 l
-991 2796 l
-991 2792 l
-994 2790 l
-996 2787 l
-998 2785 l
-1000 2783 l
-S
-976 5104 m
-978 5107 l
-980 5109 l
-982 5111 l
-982 5116 l
-S
-982 5116 m
-985 5118 l
-987 5120 l
-989 5122 l
-991 5125 l
-994 5127 l
-996 5129 l
-996 5133 l
-998 5136 l
-1000 5138 l
-1002 5140 l
-1005 5142 l
-1005 5147 l
-1007 5149 l
-1009 5151 l
-1011 5154 l
-1014 5156 l
-S
-1014 5156 m
-1014 5160 l
-1016 5163 l
-S
-973 2823 m
-973 2819 l
-976 2816 l
-S
-973 2823 m
-971 2825 l
-969 2828 l
-967 2830 l
-964 2832 l
-964 2836 l
-962 2839 l
-960 2841 l
-958 2843 l
-956 2845 l
-956 2850 l
-953 2852 l
-951 2854 l
-951 2859 l
-949 2861 l
-947 2863 l
-S
-935 2879 m
-938 2877 l
-940 2874 l
-942 2872 l
-942 2868 l
-944 2866 l
-947 2863 l
-S
-935 5037 m
-938 5040 l
-938 5044 l
-940 5046 l
-942 5049 l
-942 5053 l
-944 5055 l
-947 5058 l
-949 5060 l
-951 5062 l
-951 5066 l
-953 5069 l
-956 5071 l
-958 5073 l
-960 5075 l
-S
-960 5075 m
-960 5080 l
-962 5082 l
-964 5084 l
-964 5089 l
-967 5091 l
-969 5093 l
-971 5096 l
-973 5098 l
-973 5102 l
-976 5104 l
-S
-920 2903 m
-922 2901 l
-924 2899 l
-926 2897 l
-929 2895 l
-929 2890 l
-931 2888 l
-933 2886 l
-933 2881 l
-935 2879 l
-S
-920 2903 m
-920 2908 l
-918 2910 l
-915 2912 l
-915 2917 l
-913 2919 l
-911 2921 l
-909 2924 l
-906 2926 l
-906 2930 l
-904 2933 l
-902 2935 l
-902 2939 l
-900 2941 l
-897 2944 l
-S
-895 2950 m
-897 2948 l
-897 2944 l
-S
-895 4970 m
-897 4973 l
-897 4977 l
-900 4979 l
-902 4982 l
-902 4986 l
-904 4988 l
-906 4990 l
-909 4993 l
-911 4995 l
-S
-911 4995 m
-911 4999 l
-913 5002 l
-915 5004 l
-915 5008 l
-918 5011 l
-920 5013 l
-922 5015 l
-924 5017 l
-924 5022 l
-926 5024 l
-929 5026 l
-929 5031 l
-931 5033 l
-933 5035 l
-S
-935 5037 m
-933 5035 l
-S
-875 2984 m
-877 2982 l
-880 2979 l
-880 2975 l
-882 2973 l
-884 2971 l
-884 2966 l
-886 2964 l
-888 2962 l
-888 2957 l
-891 2955 l
-893 2953 l
-895 2950 l
-S
-875 2984 m
-875 2988 l
-873 2991 l
-871 2993 l
-871 2997 l
-868 3000 l
-866 3002 l
-866 3006 l
-864 3009 l
-862 3011 l
-862 3015 l
-859 3017 l
-857 3020 l
-857 3024 l
-S
-855 3026 m
-857 3024 l
-S
-855 4894 m
-857 4897 l
-857 4901 l
-859 4903 l
-862 4906 l
-862 4910 l
-864 4912 l
-866 4915 l
-S
-866 4915 m
-866 4919 l
-868 4921 l
-871 4923 l
-871 4928 l
-873 4930 l
-875 4932 l
-875 4937 l
-877 4939 l
-880 4941 l
-880 4946 l
-882 4948 l
-884 4950 l
-884 4955 l
-S
-884 4955 m
-886 4957 l
-888 4959 l
-891 4961 l
-893 4964 l
-893 4968 l
-895 4970 l
-S
-855 3026 m
-853 3029 l
-851 3031 l
-848 3033 l
-848 3038 l
-846 3040 l
-844 3042 l
-844 3047 l
-844 3051 l
-842 3053 l
-839 3055 l
-839 3060 l
-837 3062 l
-835 3064 l
-S
-835 3064 m
-835 3069 l
-833 3071 l
-830 3073 l
-830 3078 l
-828 3080 l
-826 3082 l
-826 3087 l
-824 3089 l
-821 3091 l
-821 3096 l
-819 3098 l
-817 3100 l
-817 3105 l
-S
-815 3107 m
-817 3105 l
-S
-815 4814 m
-817 4816 l
-817 4821 l
-819 4823 l
-821 4825 l
-821 4830 l
-824 4832 l
-826 4834 l
-S
-826 4834 m
-826 4839 l
-828 4841 l
-830 4843 l
-830 4847 l
-833 4850 l
-835 4852 l
-835 4856 l
-837 4859 l
-839 4861 l
-839 4865 l
-842 4868 l
-844 4870 l
-844 4874 l
-S
-844 4874 m
-846 4877 l
-848 4879 l
-848 4883 l
-851 4885 l
-853 4888 l
-853 4892 l
-855 4894 l
-S
-815 3107 m
-813 3109 l
-813 3114 l
-810 3116 l
-808 3118 l
-808 3122 l
-808 3127 l
-806 3129 l
-804 3131 l
-804 3136 l
-801 3138 l
-799 3140 l
-799 3145 l
-S
-799 3145 m
-797 3147 l
-795 3149 l
-795 3154 l
-795 3158 l
-792 3160 l
-790 3163 l
-790 3167 l
-788 3169 l
-786 3172 l
-786 3176 l
-786 3181 l
-783 3183 l
-781 3185 l
-S
-775 3201 m
-777 3198 l
-777 3194 l
-779 3192 l
-781 3190 l
-781 3185 l
-S
-775 4716 m
-777 4718 l
-777 4722 l
-777 4727 l
-779 4729 l
-781 4731 l
-781 4736 l
-783 4738 l
-786 4740 l
-786 4745 l
-786 4749 l
-788 4751 l
-790 4754 l
-S
-790 4754 m
-790 4758 l
-792 4760 l
-795 4763 l
-795 4767 l
-795 4772 l
-797 4774 l
-799 4776 l
-799 4780 l
-801 4783 l
-804 4785 l
-804 4789 l
-806 4792 l
-808 4794 l
-S
-808 4794 m
-808 4798 l
-810 4801 l
-813 4803 l
-813 4807 l
-813 4812 l
-815 4814 l
-S
-768 3225 m
-768 3221 l
-768 3216 l
-770 3214 l
-772 3212 l
-772 3207 l
-772 3203 l
-775 3201 l
-S
-768 3225 m
-766 3227 l
-763 3230 l
-763 3234 l
-761 3236 l
-759 3239 l
-759 3243 l
-759 3248 l
-757 3250 l
-754 3252 l
-754 3257 l
-754 3261 l
-752 3263 l
-750 3265 l
-S
-750 3265 m
-750 3270 l
-750 3274 l
-748 3277 l
-745 3279 l
-745 3283 l
-743 3286 l
-741 3288 l
-741 3292 l
-741 3297 l
-739 3299 l
-737 3301 l
-737 3306 l
-S
-734 3312 m
-737 3310 l
-737 3306 l
-S
-734 4604 m
-737 4606 l
-737 4611 l
-737 4615 l
-739 4617 l
-741 4620 l
-741 4624 l
-741 4629 l
-743 4631 l
-745 4633 l
-S
-745 4633 m
-745 4637 l
-745 4642 l
-748 4644 l
-750 4646 l
-750 4651 l
-750 4655 l
-752 4658 l
-754 4660 l
-754 4664 l
-754 4669 l
-757 4671 l
-759 4673 l
-S
-759 4673 m
-759 4678 l
-759 4682 l
-761 4684 l
-763 4687 l
-763 4691 l
-766 4693 l
-768 4696 l
-768 4700 l
-768 4704 l
-770 4707 l
-772 4709 l
-772 4713 l
-S
-775 4716 m
-772 4713 l
-S
-723 3346 m
-725 3344 l
-728 3341 l
-728 3337 l
-728 3333 l
-728 3328 l
-730 3326 l
-732 3324 l
-732 3319 l
-732 3315 l
-734 3312 l
-S
-723 3346 m
-723 3350 l
-723 3355 l
-721 3357 l
-719 3359 l
-719 3364 l
-719 3368 l
-716 3371 l
-714 3373 l
-714 3377 l
-714 3382 l
-714 3386 l
-S
-714 3386 m
-712 3388 l
-710 3391 l
-710 3395 l
-710 3400 l
-708 3402 l
-705 3404 l
-705 3408 l
-705 3413 l
-705 3417 l
-703 3420 l
-701 3422 l
-701 3426 l
-S
-694 3451 m
-696 3449 l
-696 3444 l
-696 3440 l
-696 3435 l
-699 3433 l
-701 3431 l
-701 3426 l
-S
-694 4470 m
-696 4472 l
-S
-696 4472 m
-696 4477 l
-696 4481 l
-699 4483 l
-701 4486 l
-701 4490 l
-701 4494 l
-701 4499 l
-703 4501 l
-705 4503 l
-705 4508 l
-705 4512 l
-S
-705 4512 m
-705 4517 l
-708 4519 l
-710 4521 l
-710 4526 l
-710 4530 l
-712 4532 l
-714 4535 l
-714 4539 l
-714 4544 l
-714 4548 l
-716 4550 l
-719 4553 l
-S
-719 4553 m
-719 4557 l
-719 4561 l
-721 4564 l
-723 4566 l
-723 4570 l
-723 4575 l
-725 4577 l
-728 4579 l
-728 4584 l
-728 4588 l
-730 4591 l
-732 4593 l
-S
-732 4593 m
-732 4597 l
-732 4602 l
-734 4604 l
-S
-692 3467 m
-692 3462 l
-692 3458 l
-692 3453 l
-694 3451 l
-S
-692 3467 m
-690 3469 l
-687 3471 l
-687 3476 l
-687 3480 l
-687 3484 l
-685 3487 l
-683 3489 l
-683 3493 l
-683 3498 l
-683 3502 l
-683 3507 l
-S
-683 3507 m
-681 3509 l
-678 3511 l
-678 3516 l
-678 3520 l
-678 3525 l
-676 3527 l
-674 3529 l
-674 3534 l
-674 3538 l
-674 3543 l
-674 3547 l
-S
-674 3547 m
-672 3549 l
-670 3551 l
-670 3556 l
-670 3560 l
-670 3565 l
-670 3569 l
-667 3572 l
-665 3574 l
-665 3578 l
-665 3583 l
-665 3587 l
-S
-665 3587 m
-665 3592 l
-665 3596 l
-663 3598 l
-661 3601 l
-661 3605 l
-661 3610 l
-661 3614 l
-661 3619 l
-658 3621 l
-656 3623 l
-656 3627 l
-S
-654 3652 m
-656 3650 l
-656 3645 l
-656 3641 l
-656 3636 l
-656 3632 l
-656 3627 l
-S
-654 4269 m
-656 4271 l
-S
-656 4271 m
-656 4275 l
-656 4280 l
-656 4284 l
-656 4289 l
-656 4293 l
-658 4296 l
-661 4298 l
-661 4302 l
-661 4307 l
-661 4311 l
-S
-661 4311 m
-661 4316 l
-661 4320 l
-663 4322 l
-665 4325 l
-665 4329 l
-665 4334 l
-665 4338 l
-665 4342 l
-665 4347 l
-667 4349 l
-670 4351 l
-S
-670 4351 m
-670 4356 l
-670 4360 l
-670 4365 l
-670 4369 l
-672 4372 l
-674 4374 l
-674 4378 l
-674 4383 l
-674 4387 l
-676 4389 l
-678 4392 l
-S
-678 4392 m
-678 4396 l
-678 4401 l
-678 4405 l
-678 4410 l
-681 4412 l
-683 4414 l
-683 4418 l
-683 4423 l
-683 4427 l
-685 4430 l
-687 4432 l
-S
-687 4432 m
-687 4436 l
-687 4441 l
-687 4445 l
-687 4450 l
-690 4452 l
-692 4454 l
-692 4459 l
-692 4463 l
-692 4468 l
-694 4470 l
-S
-652 3668 m
-652 3663 l
-652 3659 l
-652 3654 l
-654 3652 l
-S
-652 3668 m
-652 3672 l
-652 3677 l
-652 3681 l
-649 3683 l
-647 3686 l
-647 3690 l
-647 3694 l
-647 3699 l
-647 3703 l
-647 3708 l
-S
-647 3708 m
-647 3712 l
-647 3717 l
-645 3719 l
-643 3721 l
-643 3726 l
-643 3730 l
-643 3735 l
-643 3739 l
-643 3744 l
-643 3748 l
-S
-643 3748 m
-643 3753 l
-643 3757 l
-640 3759 l
-638 3762 l
-638 3766 l
-638 3770 l
-638 3775 l
-638 3779 l
-638 3784 l
-638 3788 l
-S
-638 3788 m
-638 3793 l
-638 3797 l
-638 3802 l
-638 3806 l
-638 3811 l
-636 3813 l
-634 3815 l
-634 3820 l
-634 3824 l
-634 3829 l
-S
-634 3829 m
-634 3833 l
-634 3838 l
-634 3842 l
-634 3846 l
-634 3851 l
-634 3855 l
-634 3860 l
-634 3864 l
-634 3869 l
-S
-634 3869 m
-634 3873 l
-634 3878 l
-634 3882 l
-634 3887 l
-634 3891 l
-634 3896 l
-632 3898 l
-629 3900 l
-629 3905 l
-629 3909 l
-S
-629 3909 m
-629 3913 l
-629 3918 l
-629 3922 l
-629 3927 l
-629 3931 l
-629 3936 l
-629 3940 l
-629 3945 l
-629 3949 l
-S
-629 3949 m
-629 3954 l
-629 3958 l
-629 3963 l
-629 3967 l
-629 3972 l
-629 3976 l
-629 3981 l
-629 3985 l
-629 3989 l
-S
-629 3989 m
-629 3994 l
-629 3998 l
-629 4003 l
-629 4007 l
-629 4012 l
-629 4016 l
-629 4021 l
-632 4023 l
-634 4025 l
-634 4030 l
-S
-634 4030 m
-634 4034 l
-634 4039 l
-634 4043 l
-634 4048 l
-634 4052 l
-634 4056 l
-634 4061 l
-634 4065 l
-634 4070 l
-S
-634 4070 m
-634 4074 l
-634 4079 l
-634 4083 l
-634 4088 l
-634 4092 l
-634 4097 l
-634 4101 l
-634 4106 l
-636 4108 l
-638 4110 l
-S
-638 4110 m
-638 4115 l
-638 4119 l
-638 4124 l
-638 4128 l
-638 4132 l
-638 4137 l
-638 4141 l
-638 4146 l
-638 4150 l
-S
-638 4150 m
-638 4155 l
-638 4159 l
-640 4162 l
-643 4164 l
-643 4168 l
-643 4173 l
-643 4177 l
-643 4182 l
-643 4186 l
-643 4191 l
-S
-643 4191 m
-643 4195 l
-643 4199 l
-645 4202 l
-647 4204 l
-647 4208 l
-647 4213 l
-647 4217 l
-647 4222 l
-647 4226 l
-647 4231 l
-S
-647 4231 m
-647 4235 l
-649 4237 l
-652 4240 l
-652 4244 l
-652 4249 l
-652 4253 l
-652 4258 l
-652 4262 l
-652 4267 l
-654 4269 l
-S
-1 g
-3920 4435 m
-3924 4435 l
-3924 4436 l
-3920 4436 l
-3917 4436 m
-3924 4436 l
-3924 4437 l
-3917 4437 l
-3914 4437 m
-3925 4437 l
-3925 4438 l
-3914 4438 l
-3911 4438 m
-3925 4438 l
-3925 4439 l
-3911 4439 l
-3908 4439 m
-3925 4439 l
-3925 4440 l
-3908 4440 l
-3905 4440 m
-3926 4440 l
-3926 4441 l
-3905 4441 l
-3903 4441 m
-3926 4441 l
-3926 4442 l
-3903 4442 l
-3900 4442 m
-3926 4442 l
-3926 4443 l
-3900 4443 l
-3897 4443 m
-3927 4443 l
-3927 4444 l
-3897 4444 l
-3894 4444 m
-3927 4444 l
-3927 4445 l
-3894 4445 l
-3891 4445 m
-3927 4445 l
-3927 4446 l
-3891 4446 l
-3888 4446 m
-3928 4446 l
-3928 4447 l
-3888 4447 l
-3885 4447 m
-3928 4447 l
-3928 4448 l
-3885 4448 l
-3883 4448 m
-3928 4448 l
-3928 4449 l
-3883 4449 l
-3880 4449 m
-3929 4449 l
-3929 4450 l
-3880 4450 l
-3877 4450 m
-3929 4450 l
-3929 4451 l
-3877 4451 l
-3874 4451 m
-3929 4451 l
-3929 4452 l
-3874 4452 l
-3871 4452 m
-3930 4452 l
-3930 4453 l
-3871 4453 l
-3868 4453 m
-3930 4453 l
-3930 4454 l
-3868 4454 l
-3866 4454 m
-3931 4454 l
-3931 4455 l
-3866 4455 l
-3863 4455 m
-3931 4455 l
-3931 4456 l
-3863 4456 l
-3860 4456 m
-3931 4456 l
-3931 4457 l
-3860 4457 l
-3857 4457 m
-3932 4457 l
-3932 4458 l
-3857 4458 l
-3854 4458 m
-3932 4458 l
-3932 4459 l
-3854 4459 l
-3851 4459 m
-3932 4459 l
-3932 4460 l
-3851 4460 l
-3848 4460 m
-3933 4460 l
-3933 4461 l
-3848 4461 l
-3846 4461 m
-3933 4461 l
-3933 4462 l
-3846 4462 l
-3843 4462 m
-3933 4462 l
-3933 4463 l
-3843 4463 l
-3840 4463 m
-3934 4463 l
-3934 4464 l
-3840 4464 l
-3837 4464 m
-3934 4464 l
-3934 4465 l
-3837 4465 l
-3834 4465 m
-3934 4465 l
-3934 4466 l
-3834 4466 l
-3831 4466 m
-3935 4466 l
-3935 4467 l
-3831 4467 l
-3829 4467 m
-3935 4467 l
-3935 4468 l
-3829 4468 l
-3829 4468 m
-3935 4468 l
-3935 4469 l
-3829 4469 l
-3829 4469 m
-3936 4469 l
-3936 4471 l
-3829 4471 l
-3830 4471 m
-3937 4471 l
-3937 4474 l
-3830 4474 l
-3831 4474 m
-3938 4474 l
-3938 4477 l
-3831 4477 l
-3832 4477 m
-3939 4477 l
-3939 4480 l
-3832 4480 l
-3833 4480 m
-3940 4480 l
-3940 4483 l
-3833 4483 l
-3834 4483 m
-3941 4483 l
-3941 4486 l
-3834 4486 l
-3835 4486 m
-3942 4486 l
-3942 4488 l
-3835 4488 l
-3836 4488 m
-3942 4488 l
-3942 4489 l
-3836 4489 l
-3836 4489 m
-3943 4489 l
-3943 4491 l
-3836 4491 l
-3837 4491 m
-3944 4491 l
-3944 4494 l
-3837 4494 l
-3838 4494 m
-3945 4494 l
-3945 4497 l
-3838 4497 l
-3839 4497 m
-3946 4497 l
-3946 4500 l
-3839 4500 l
-3840 4500 m
-3947 4500 l
-3947 4503 l
-3840 4503 l
-3841 4503 m
-3948 4503 l
-3948 4506 l
-3841 4506 l
-3842 4506 m
-3949 4506 l
-3949 4508 l
-3842 4508 l
-3843 4508 m
-3950 4508 l
-3950 4511 l
-3843 4511 l
-3844 4511 m
-3951 4511 l
-3951 4514 l
-3844 4514 l
-3845 4514 m
-3952 4514 l
-3952 4517 l
-3845 4517 l
-3846 4517 m
-3953 4517 l
-3953 4520 l
-3846 4520 l
-3847 4520 m
-3954 4520 l
-3954 4523 l
-3847 4523 l
-3848 4523 m
-3955 4523 l
-3955 4525 l
-3848 4525 l
-3848 4525 m
-3956 4525 l
-3956 4526 l
-3848 4526 l
-3849 4526 m
-3956 4526 l
-3956 4528 l
-3849 4528 l
-3850 4528 m
-3957 4528 l
-3957 4531 l
-3850 4531 l
-3851 4531 m
-3958 4531 l
-3958 4534 l
-3851 4534 l
-3852 4534 m
-3959 4534 l
-3959 4537 l
-3852 4537 l
-3853 4537 m
-3960 4537 l
-3960 4540 l
-3853 4540 l
-3854 4540 m
-3961 4540 l
-3961 4543 l
-3854 4543 l
-3855 4543 m
-3962 4543 l
-3962 4545 l
-3855 4545 l
-3856 4545 m
-3963 4545 l
-3963 4548 l
-3856 4548 l
-3857 4548 m
-3964 4548 l
-3964 4549 l
-3857 4549 l
-3857 4549 m
-3964 4549 l
-3964 4550 l
-3857 4550 l
-3857 4550 m
-3961 4550 l
-3961 4551 l
-3857 4551 l
-3858 4551 m
-3958 4551 l
-3958 4552 l
-3858 4552 l
-3858 4552 m
-3955 4552 l
-3955 4553 l
-3858 4553 l
-3858 4553 m
-3952 4553 l
-3952 4554 l
-3858 4554 l
-3859 4554 m
-3949 4554 l
-3949 4555 l
-3859 4555 l
-3859 4555 m
-3946 4555 l
-3946 4556 l
-3859 4556 l
-3859 4556 m
-3944 4556 l
-3944 4557 l
-3859 4557 l
-3860 4557 m
-3941 4557 l
-3941 4558 l
-3860 4558 l
-3860 4558 m
-3938 4558 l
-3938 4559 l
-3860 4559 l
-3860 4559 m
-3935 4559 l
-3935 4560 l
-3860 4560 l
-3861 4560 m
-3932 4560 l
-3932 4561 l
-3861 4561 l
-3861 4561 m
-3929 4561 l
-3929 4562 l
-3861 4562 l
-3861 4562 m
-3927 4562 l
-3927 4563 l
-3861 4563 l
-3862 4563 m
-3924 4563 l
-3924 4564 l
-3862 4564 l
-3862 4564 m
-3921 4564 l
-3921 4565 l
-3862 4565 l
-3863 4565 m
-3918 4565 l
-3918 4566 l
-3863 4566 l
-3863 4566 m
-3915 4566 l
-3915 4567 l
-3863 4567 l
-3863 4567 m
-3912 4567 l
-3912 4568 l
-3863 4568 l
-3864 4568 m
-3909 4568 l
-3909 4569 l
-3864 4569 l
-3864 4569 m
-3907 4569 l
-3907 4570 l
-3864 4570 l
-3864 4570 m
-3904 4570 l
-3904 4571 l
-3864 4571 l
-3865 4571 m
-3901 4571 l
-3901 4572 l
-3865 4572 l
-3865 4572 m
-3898 4572 l
-3898 4573 l
-3865 4573 l
-3865 4573 m
-3895 4573 l
-3895 4574 l
-3865 4574 l
-3866 4574 m
-3892 4574 l
-3892 4575 l
-3866 4575 l
-3866 4575 m
-3889 4575 l
-3889 4576 l
-3866 4576 l
-3866 4576 m
-3887 4576 l
-3887 4577 l
-3866 4577 l
-3867 4577 m
-3884 4577 l
-3884 4578 l
-3867 4578 l
-3867 4578 m
-3881 4578 l
-3881 4579 l
-3867 4579 l
-3867 4579 m
-3878 4579 l
-3878 4580 l
-3867 4580 l
-3868 4580 m
-3875 4580 l
-3875 4581 l
-3868 4581 l
-3868 4581 m
-3872 4581 l
-3872 4582 l
-3868 4582 l
-Y
-3963.1 4549 m
-3923 4435 l
-3829 4468 l
-3869 4582 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3885 4466 m
-3899 4465 l
-3911 4475 l
-3921 4493 l
-3926 4505 l
-3928 4526 l
-3925 4540 l
-3914 4548 l
-3906 4551 l
-3893 4551 l
-3881 4542 l
-3870 4524 l
-3866 4512 l
-3863 4491 l
-3867 4476 l
-3877 4468 l
-3885 4466 l
-S
-1 g
-3085 4470 m
-3095 4470 l
-3095 4471 l
-3085 4471 l
-3085 4471 m
-3102 4471 l
-3102 4472 l
-3085 4472 l
-3085 4472 m
-3109 4472 l
-3109 4473 l
-3085 4473 l
-3085 4473 m
-3116 4473 l
-3116 4474 l
-3085 4474 l
-3085 4474 m
-3123 4474 l
-3123 4475 l
-3085 4475 l
-3085 4475 m
-3130 4475 l
-3130 4476 l
-3085 4476 l
-3085 4476 m
-3137 4476 l
-3137 4477 l
-3085 4477 l
-3084 4477 m
-3144 4477 l
-3144 4478 l
-3084 4478 l
-3084 4478 m
-3150 4478 l
-3150 4479 l
-3084 4479 l
-3084 4479 m
-3157 4479 l
-3157 4480 l
-3084 4480 l
-3084 4480 m
-3164 4480 l
-3164 4481 l
-3084 4481 l
-3084 4481 m
-3171 4481 l
-3171 4482 l
-3084 4482 l
-3084 4482 m
-3178 4482 l
-3178 4483 l
-3084 4483 l
-3084 4483 m
-3185 4483 l
-3185 4484 l
-3084 4484 l
-3083 4484 m
-3192 4484 l
-3192 4485 l
-3083 4485 l
-3083 4485 m
-3199 4485 l
-3199 4486 l
-3083 4486 l
-3083 4486 m
-3206 4486 l
-3206 4487 l
-3083 4487 l
-3083 4487 m
-3213 4487 l
-3213 4488 l
-3083 4488 l
-3083 4488 m
-3220 4488 l
-3220 4489 l
-3083 4489 l
-3083 4489 m
-3227 4489 l
-3227 4490 l
-3083 4490 l
-3083 4490 m
-3234 4490 l
-3234 4491 l
-3083 4491 l
-3082 4491 m
-3241 4491 l
-3241 4492 l
-3082 4492 l
-3082 4492 m
-3248 4492 l
-3248 4493 l
-3082 4493 l
-3082 4493 m
-3255 4493 l
-3255 4494 l
-3082 4494 l
-3082 4494 m
-3262 4494 l
-3262 4495 l
-3082 4495 l
-3082 4495 m
-3268 4495 l
-3268 4496 l
-3082 4496 l
-3082 4496 m
-3269 4496 l
-3269 4497 l
-3082 4497 l
-3082 4497 m
-3268 4497 l
-3268 4498 l
-3082 4498 l
-3081 4498 m
-3268 4498 l
-3268 4504 l
-3081 4504 l
-3081 4504 m
-3267 4504 l
-3267 4505 l
-3081 4505 l
-3080 4505 m
-3267 4505 l
-3267 4511 l
-3080 4511 l
-3080 4511 m
-3266 4511 l
-3266 4512 l
-3080 4512 l
-3079 4512 m
-3266 4512 l
-3266 4518 l
-3079 4518 l
-3079 4518 m
-3265 4518 l
-3265 4519 l
-3079 4519 l
-3078 4519 m
-3265 4519 l
-3265 4525 l
-3078 4525 l
-3078 4525 m
-3264 4525 l
-3264 4526 l
-3078 4526 l
-3077 4526 m
-3264 4526 l
-3264 4532 l
-3077 4532 l
-3077 4532 m
-3263 4532 l
-3263 4533 l
-3077 4533 l
-3076 4533 m
-3263 4533 l
-3263 4539 l
-3076 4539 l
-3076 4539 m
-3262 4539 l
-3262 4540 l
-3076 4540 l
-3075 4540 m
-3262 4540 l
-3262 4546 l
-3075 4546 l
-3075 4546 m
-3261 4546 l
-3261 4547 l
-3075 4547 l
-3074 4547 m
-3261 4547 l
-3261 4553 l
-3074 4553 l
-3074 4553 m
-3260 4553 l
-3260 4554 l
-3074 4554 l
-3073 4554 m
-3260 4554 l
-3260 4560 l
-3073 4560 l
-3073 4560 m
-3259 4560 l
-3259 4561 l
-3073 4561 l
-3072 4561 m
-3259 4561 l
-3259 4567 l
-3072 4567 l
-3072 4567 m
-3258 4567 l
-3258 4568 l
-3072 4568 l
-3071 4568 m
-3258 4568 l
-3258 4574 l
-3071 4574 l
-3071 4574 m
-3257 4574 l
-3257 4575 l
-3071 4575 l
-3070 4575 m
-3257 4575 l
-3257 4581 l
-3070 4581 l
-3070 4581 m
-3256 4581 l
-3256 4582 l
-3070 4582 l
-3069 4582 m
-3256 4582 l
-3256 4588 l
-3069 4588 l
-3069 4588 m
-3255 4588 l
-3255 4590 l
-3069 4590 l
-3069 4590 m
-3255 4590 l
-3255 4591 l
-3069 4591 l
-3076 4591 m
-3255 4591 l
-3255 4592 l
-3076 4592 l
-3083 4592 m
-3255 4592 l
-3255 4593 l
-3083 4593 l
-3090 4593 m
-3255 4593 l
-3255 4594 l
-3090 4594 l
-3097 4594 m
-3255 4594 l
-3255 4595 l
-3097 4595 l
-3104 4595 m
-3254 4595 l
-3254 4596 l
-3104 4596 l
-3111 4596 m
-3254 4596 l
-3254 4597 l
-3111 4597 l
-3118 4597 m
-3254 4597 l
-3254 4598 l
-3118 4598 l
-3125 4598 m
-3254 4598 l
-3254 4599 l
-3125 4599 l
-3132 4599 m
-3254 4599 l
-3254 4600 l
-3132 4600 l
-3139 4600 m
-3254 4600 l
-3254 4601 l
-3139 4601 l
-3146 4601 m
-3254 4601 l
-3254 4602 l
-3146 4602 l
-3153 4602 m
-3253 4602 l
-3253 4603 l
-3153 4603 l
-3160 4603 m
-3253 4603 l
-3253 4604 l
-3160 4604 l
-3167 4604 m
-3253 4604 l
-3253 4605 l
-3167 4605 l
-3174 4605 m
-3253 4605 l
-3253 4606 l
-3174 4606 l
-3181 4606 m
-3253 4606 l
-3253 4607 l
-3181 4607 l
-3188 4607 m
-3253 4607 l
-3253 4608 l
-3188 4608 l
-3195 4608 m
-3253 4608 l
-3253 4609 l
-3195 4609 l
-3202 4609 m
-3252 4609 l
-3252 4610 l
-3202 4610 l
-3209 4610 m
-3252 4610 l
-3252 4611 l
-3209 4611 l
-3216 4611 m
-3252 4611 l
-3252 4612 l
-3216 4612 l
-3223 4612 m
-3252 4612 l
-3252 4613 l
-3223 4613 l
-3230 4613 m
-3252 4613 l
-3252 4614 l
-3230 4614 l
-3237 4614 m
-3252 4614 l
-3252 4615 l
-3237 4615 l
-3244 4615 m
-3252 4615 l
-3252 4616 l
-3244 4616 l
-Y
-3086.1 4469.8 m
-3069 4590 l
-3251 4616 l
-3268 4496 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3133 4582 m
-3100 4518 l
-3162 4527 l
-S
-3133 4582 m
-3146 4495 l
-S
-3224 4595 m
-3183 4589 l
-3184 4552 l
-3188 4556 l
-3199 4562 l
-3212 4564 l
-3225 4562 l
-3234 4555 l
-3240 4543 l
-3241 4534 l
-3239 4521 l
-3232 4512 l
-3220 4506 l
-3208 4504 l
-3195 4507 l
-3190 4510 l
-3185 4518 l
-S
-1 g
-2354 4208 m
-2358 4208 l
-2358 4209 l
-2354 4209 l
-2354 4209 m
-2360 4209 l
-2360 4210 l
-2354 4210 l
-2353 4210 m
-2362 4210 l
-2362 4211 l
-2353 4211 l
-2353 4211 m
-2364 4211 l
-2364 4212 l
-2353 4212 l
-2352 4212 m
-2366 4212 l
-2366 4213 l
-2352 4213 l
-2352 4213 m
-2368 4213 l
-2368 4214 l
-2352 4214 l
-2351 4214 m
-2370 4214 l
-2370 4215 l
-2351 4215 l
-2351 4215 m
-2372 4215 l
-2372 4216 l
-2351 4216 l
-2350 4216 m
-2374 4216 l
-2374 4217 l
-2350 4217 l
-2350 4217 m
-2376 4217 l
-2376 4218 l
-2350 4218 l
-2349 4218 m
-2378 4218 l
-2378 4219 l
-2349 4219 l
-2349 4219 m
-2380 4219 l
-2380 4220 l
-2349 4220 l
-2348 4220 m
-2382 4220 l
-2382 4221 l
-2348 4221 l
-2348 4221 m
-2384 4221 l
-2384 4222 l
-2348 4222 l
-2347 4222 m
-2386 4222 l
-2386 4223 l
-2347 4223 l
-2347 4223 m
-2388 4223 l
-2388 4224 l
-2347 4224 l
-2346 4224 m
-2390 4224 l
-2390 4225 l
-2346 4225 l
-2346 4225 m
-2392 4225 l
-2392 4226 l
-2346 4226 l
-2345 4226 m
-2394 4226 l
-2394 4227 l
-2345 4227 l
-2345 4227 m
-2396 4227 l
-2396 4228 l
-2345 4228 l
-2344 4228 m
-2398 4228 l
-2398 4229 l
-2344 4229 l
-2344 4229 m
-2400 4229 l
-2400 4230 l
-2344 4230 l
-2343 4230 m
-2402 4230 l
-2402 4231 l
-2343 4231 l
-2343 4231 m
-2404 4231 l
-2404 4232 l
-2343 4232 l
-2342 4232 m
-2406 4232 l
-2406 4233 l
-2342 4233 l
-2342 4233 m
-2408 4233 l
-2408 4234 l
-2342 4234 l
-2341 4234 m
-2410 4234 l
-2410 4235 l
-2341 4235 l
-2341 4235 m
-2412 4235 l
-2412 4236 l
-2341 4236 l
-2340 4236 m
-2414 4236 l
-2414 4237 l
-2340 4237 l
-2340 4237 m
-2416 4237 l
-2416 4238 l
-2340 4238 l
-2339 4238 m
-2418 4238 l
-2418 4239 l
-2339 4239 l
-2339 4239 m
-2420 4239 l
-2420 4240 l
-2339 4240 l
-2338 4240 m
-2422 4240 l
-2422 4241 l
-2338 4241 l
-2338 4241 m
-2424 4241 l
-2424 4242 l
-2338 4242 l
-2337 4242 m
-2426 4242 l
-2426 4243 l
-2337 4243 l
-2337 4243 m
-2428 4243 l
-2428 4244 l
-2337 4244 l
-2336 4244 m
-2430 4244 l
-2430 4245 l
-2336 4245 l
-2336 4245 m
-2432 4245 l
-2432 4246 l
-2336 4246 l
-2335 4246 m
-2434 4246 l
-2434 4247 l
-2335 4247 l
-2335 4247 m
-2436 4247 l
-2436 4248 l
-2335 4248 l
-2334 4248 m
-2438 4248 l
-2438 4249 l
-2334 4249 l
-2334 4249 m
-2440 4249 l
-2440 4250 l
-2334 4250 l
-2333 4250 m
-2442 4250 l
-2442 4251 l
-2333 4251 l
-2333 4251 m
-2444 4251 l
-2444 4252 l
-2333 4252 l
-2332 4252 m
-2446 4252 l
-2446 4253 l
-2332 4253 l
-2332 4253 m
-2448 4253 l
-2448 4254 l
-2332 4254 l
-2331 4254 m
-2450 4254 l
-2450 4255 l
-2331 4255 l
-2331 4255 m
-2452 4255 l
-2452 4256 l
-2331 4256 l
-2330 4256 m
-2454 4256 l
-2454 4257 l
-2330 4257 l
-2330 4257 m
-2456 4257 l
-2456 4258 l
-2330 4258 l
-2329 4258 m
-2458 4258 l
-2458 4259 l
-2329 4259 l
-2329 4259 m
-2460 4259 l
-2460 4260 l
-2329 4260 l
-2328 4260 m
-2462 4260 l
-2462 4261 l
-2328 4261 l
-2328 4261 m
-2464 4261 l
-2464 4262 l
-2328 4262 l
-2327 4262 m
-2466 4262 l
-2466 4263 l
-2327 4263 l
-2327 4263 m
-2468 4263 l
-2468 4264 l
-2327 4264 l
-2326 4264 m
-2470 4264 l
-2470 4265 l
-2326 4265 l
-2326 4265 m
-2472 4265 l
-2472 4266 l
-2326 4266 l
-2325 4266 m
-2474 4266 l
-2474 4267 l
-2325 4267 l
-2325 4267 m
-2476 4267 l
-2476 4268 l
-2325 4268 l
-2324 4268 m
-2478 4268 l
-2478 4269 l
-2324 4269 l
-2324 4269 m
-2480 4269 l
-2480 4270 l
-2324 4270 l
-2323 4270 m
-2482 4270 l
-2482 4271 l
-2323 4271 l
-2323 4271 m
-2484 4271 l
-2484 4272 l
-2323 4272 l
-2322 4272 m
-2486 4272 l
-2486 4273 l
-2322 4273 l
-2322 4273 m
-2488 4273 l
-2488 4274 l
-2322 4274 l
-2321 4274 m
-2490 4274 l
-2490 4275 l
-2321 4275 l
-2321 4275 m
-2492 4275 l
-2492 4276 l
-2321 4276 l
-2320 4276 m
-2494 4276 l
-2494 4277 l
-2320 4277 l
-2320 4277 m
-2496 4277 l
-2496 4278 l
-2320 4278 l
-2319 4278 m
-2498 4278 l
-2498 4279 l
-2319 4279 l
-2319 4279 m
-2500 4279 l
-2500 4280 l
-2319 4280 l
-2318 4280 m
-2502 4280 l
-2502 4281 l
-2318 4281 l
-2318 4281 m
-2504 4281 l
-2504 4282 l
-2318 4282 l
-2317 4282 m
-2506 4282 l
-2506 4283 l
-2317 4283 l
-2317 4283 m
-2508 4283 l
-2508 4284 l
-2317 4284 l
-2316 4284 m
-2510 4284 l
-2510 4285 l
-2316 4285 l
-2316 4285 m
-2512 4285 l
-2512 4286 l
-2316 4286 l
-2315 4286 m
-2514 4286 l
-2514 4287 l
-2315 4287 l
-2315 4287 m
-2516 4287 l
-2516 4288 l
-2315 4288 l
-2314 4288 m
-2518 4288 l
-2518 4289 l
-2314 4289 l
-2314 4289 m
-2520 4289 l
-2520 4290 l
-2314 4290 l
-2313 4290 m
-2520 4290 l
-2520 4292 l
-2313 4292 l
-2312 4292 m
-2519 4292 l
-2519 4294 l
-2312 4294 l
-2311 4294 m
-2518 4294 l
-2518 4296 l
-2311 4296 l
-2310 4296 m
-2517 4296 l
-2517 4298 l
-2310 4298 l
-2309 4298 m
-2516 4298 l
-2516 4300 l
-2309 4300 l
-2308 4300 m
-2515 4300 l
-2515 4302 l
-2308 4302 l
-2307 4302 m
-2514 4302 l
-2514 4304 l
-2307 4304 l
-2306 4304 m
-2513 4304 l
-2513 4306 l
-2306 4306 l
-2305 4306 m
-2512 4306 l
-2512 4308 l
-2305 4308 l
-2304 4308 m
-2511 4308 l
-2511 4310 l
-2304 4310 l
-2303 4310 m
-2510 4310 l
-2510 4312 l
-2303 4312 l
-2302 4312 m
-2509 4312 l
-2509 4314 l
-2302 4314 l
-2301 4314 m
-2508 4314 l
-2508 4316 l
-2301 4316 l
-2301 4316 m
-2508 4316 l
-2508 4317 l
-2301 4317 l
-2303 4317 m
-2507 4317 l
-2507 4318 l
-2303 4318 l
-2305 4318 m
-2506 4318 l
-2506 4319 l
-2305 4319 l
-2307 4319 m
-2506 4319 l
-2506 4320 l
-2307 4320 l
-2309 4320 m
-2505 4320 l
-2505 4321 l
-2309 4321 l
-2311 4321 m
-2505 4321 l
-2505 4322 l
-2311 4322 l
-2313 4322 m
-2504 4322 l
-2504 4323 l
-2313 4323 l
-2315 4323 m
-2504 4323 l
-2504 4324 l
-2315 4324 l
-2317 4324 m
-2503 4324 l
-2503 4325 l
-2317 4325 l
-2319 4325 m
-2503 4325 l
-2503 4326 l
-2319 4326 l
-2321 4326 m
-2502 4326 l
-2502 4327 l
-2321 4327 l
-2323 4327 m
-2502 4327 l
-2502 4328 l
-2323 4328 l
-2325 4328 m
-2501 4328 l
-2501 4329 l
-2325 4329 l
-2327 4329 m
-2501 4329 l
-2501 4330 l
-2327 4330 l
-2329 4330 m
-2500 4330 l
-2500 4331 l
-2329 4331 l
-2331 4331 m
-2500 4331 l
-2500 4332 l
-2331 4332 l
-2333 4332 m
-2499 4332 l
-2499 4333 l
-2333 4333 l
-2335 4333 m
-2499 4333 l
-2499 4334 l
-2335 4334 l
-2337 4334 m
-2498 4334 l
-2498 4335 l
-2337 4335 l
-2339 4335 m
-2498 4335 l
-2498 4336 l
-2339 4336 l
-2341 4336 m
-2497 4336 l
-2497 4337 l
-2341 4337 l
-2343 4337 m
-2497 4337 l
-2497 4338 l
-2343 4338 l
-2345 4338 m
-2496 4338 l
-2496 4339 l
-2345 4339 l
-2347 4339 m
-2496 4339 l
-2496 4340 l
-2347 4340 l
-2349 4340 m
-2495 4340 l
-2495 4341 l
-2349 4341 l
-2351 4341 m
-2495 4341 l
-2495 4342 l
-2351 4342 l
-2353 4342 m
-2494 4342 l
-2494 4343 l
-2353 4343 l
-2355 4343 m
-2494 4343 l
-2494 4344 l
-2355 4344 l
-2357 4344 m
-2493 4344 l
-2493 4345 l
-2357 4345 l
-2359 4345 m
-2493 4345 l
-2493 4346 l
-2359 4346 l
-2361 4346 m
-2492 4346 l
-2492 4347 l
-2361 4347 l
-2363 4347 m
-2492 4347 l
-2492 4348 l
-2363 4348 l
-2365 4348 m
-2491 4348 l
-2491 4349 l
-2365 4349 l
-2367 4349 m
-2491 4349 l
-2491 4350 l
-2367 4350 l
-2369 4350 m
-2490 4350 l
-2490 4351 l
-2369 4351 l
-2371 4351 m
-2490 4351 l
-2490 4352 l
-2371 4352 l
-2373 4352 m
-2489 4352 l
-2489 4353 l
-2373 4353 l
-2375 4353 m
-2489 4353 l
-2489 4354 l
-2375 4354 l
-2377 4354 m
-2488 4354 l
-2488 4355 l
-2377 4355 l
-2379 4355 m
-2488 4355 l
-2488 4356 l
-2379 4356 l
-2381 4356 m
-2487 4356 l
-2487 4357 l
-2381 4357 l
-2383 4357 m
-2487 4357 l
-2487 4358 l
-2383 4358 l
-2385 4358 m
-2486 4358 l
-2486 4359 l
-2385 4359 l
-2387 4359 m
-2486 4359 l
-2486 4360 l
-2387 4360 l
-2389 4360 m
-2485 4360 l
-2485 4361 l
-2389 4361 l
-2391 4361 m
-2485 4361 l
-2485 4362 l
-2391 4362 l
-2393 4362 m
-2484 4362 l
-2484 4363 l
-2393 4363 l
-2395 4363 m
-2484 4363 l
-2484 4364 l
-2395 4364 l
-2397 4364 m
-2483 4364 l
-2483 4365 l
-2397 4365 l
-2399 4365 m
-2483 4365 l
-2483 4366 l
-2399 4366 l
-2401 4366 m
-2482 4366 l
-2482 4367 l
-2401 4367 l
-2403 4367 m
-2482 4367 l
-2482 4368 l
-2403 4368 l
-2405 4368 m
-2481 4368 l
-2481 4369 l
-2405 4369 l
-2407 4369 m
-2481 4369 l
-2481 4370 l
-2407 4370 l
-2409 4370 m
-2480 4370 l
-2480 4371 l
-2409 4371 l
-2411 4371 m
-2480 4371 l
-2480 4372 l
-2411 4372 l
-2413 4372 m
-2479 4372 l
-2479 4373 l
-2413 4373 l
-2415 4373 m
-2479 4373 l
-2479 4374 l
-2415 4374 l
-2417 4374 m
-2478 4374 l
-2478 4375 l
-2417 4375 l
-2419 4375 m
-2478 4375 l
-2478 4376 l
-2419 4376 l
-2421 4376 m
-2477 4376 l
-2477 4377 l
-2421 4377 l
-2423 4377 m
-2477 4377 l
-2477 4378 l
-2423 4378 l
-2425 4378 m
-2476 4378 l
-2476 4379 l
-2425 4379 l
-2427 4379 m
-2476 4379 l
-2476 4380 l
-2427 4380 l
-2429 4380 m
-2475 4380 l
-2475 4381 l
-2429 4381 l
-2431 4381 m
-2475 4381 l
-2475 4382 l
-2431 4382 l
-2433 4382 m
-2474 4382 l
-2474 4383 l
-2433 4383 l
-2435 4383 m
-2474 4383 l
-2474 4384 l
-2435 4384 l
-2437 4384 m
-2473 4384 l
-2473 4385 l
-2437 4385 l
-2439 4385 m
-2473 4385 l
-2473 4386 l
-2439 4386 l
-2441 4386 m
-2472 4386 l
-2472 4387 l
-2441 4387 l
-2443 4387 m
-2472 4387 l
-2472 4388 l
-2443 4388 l
-2445 4388 m
-2471 4388 l
-2471 4389 l
-2445 4389 l
-2447 4389 m
-2471 4389 l
-2471 4390 l
-2447 4390 l
-2449 4390 m
-2470 4390 l
-2470 4391 l
-2449 4391 l
-2451 4391 m
-2470 4391 l
-2470 4392 l
-2451 4392 l
-2453 4392 m
-2469 4392 l
-2469 4393 l
-2453 4393 l
-2455 4393 m
-2469 4393 l
-2469 4394 l
-2455 4394 l
-2457 4394 m
-2468 4394 l
-2468 4395 l
-2457 4395 l
-2459 4395 m
-2468 4395 l
-2468 4396 l
-2459 4396 l
-2461 4396 m
-2467 4396 l
-2467 4397 l
-2461 4397 l
-2463 4397 m
-2467 4397 l
-2467 4398 l
-2463 4398 l
-Y
-2355.3 4208 m
-2301 4316 l
-2466 4398 l
-2520 4290 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2389 4309 m
-2391 4296 l
-2387 4285 l
-2378 4275 l
-2374 4273 l
-2361 4272 l
-2350 4275 l
-2341 4285 l
-2339 4288 l
-2337 4301 l
-2341 4313 l
-2350 4322 l
-2354 4324 l
-2367 4326 l
-2378 4322 l
-2389 4309 l
-2398 4290 l
-2404 4270 l
-2402 4255 l
-2393 4245 l
-2385 4242 l
-2372 4240 l
-2365 4245 l
-S
-2425 4359 m
-2415 4350 l
-2413 4335 l
-2419 4314 l
-2425 4303 l
-2438 4286 l
-2451 4279 l
-2464 4281 l
-2471 4284 l
-2481 4294 l
-2483 4309 l
-2477 4329 l
-2471 4340 l
-2458 4357 l
-2445 4365 l
-2432 4363 l
-2425 4359 l
-S
-1 g
-1733 3720 m
-1736 3720 l
-1736 3721 l
-1733 3721 l
-1732 3721 m
-1737 3721 l
-1737 3722 l
-1732 3722 l
-1731 3722 m
-1738 3722 l
-1738 3723 l
-1731 3723 l
-1730 3723 m
-1739 3723 l
-1739 3724 l
-1730 3724 l
-1729 3724 m
-1740 3724 l
-1740 3725 l
-1729 3725 l
-1728 3725 m
-1741 3725 l
-1741 3726 l
-1728 3726 l
-1727 3726 m
-1742 3726 l
-1742 3727 l
-1727 3727 l
-1726 3727 m
-1742 3727 l
-1742 3728 l
-1726 3728 l
-1725 3728 m
-1743 3728 l
-1743 3729 l
-1725 3729 l
-1723 3729 m
-1744 3729 l
-1744 3730 l
-1723 3730 l
-1722 3730 m
-1745 3730 l
-1745 3731 l
-1722 3731 l
-1721 3731 m
-1746 3731 l
-1746 3732 l
-1721 3732 l
-1720 3732 m
-1747 3732 l
-1747 3733 l
-1720 3733 l
-1719 3733 m
-1748 3733 l
-1748 3734 l
-1719 3734 l
-1718 3734 m
-1749 3734 l
-1749 3735 l
-1718 3735 l
-1717 3735 m
-1750 3735 l
-1750 3736 l
-1717 3736 l
-1716 3736 m
-1751 3736 l
-1751 3737 l
-1716 3737 l
-1715 3737 m
-1752 3737 l
-1752 3738 l
-1715 3738 l
-1714 3738 m
-1753 3738 l
-1753 3739 l
-1714 3739 l
-1713 3739 m
-1754 3739 l
-1754 3740 l
-1713 3740 l
-1712 3740 m
-1755 3740 l
-1755 3741 l
-1712 3741 l
-1711 3741 m
-1756 3741 l
-1756 3742 l
-1711 3742 l
-1710 3742 m
-1757 3742 l
-1757 3743 l
-1710 3743 l
-1709 3743 m
-1758 3743 l
-1758 3744 l
-1709 3744 l
-1708 3744 m
-1759 3744 l
-1759 3745 l
-1708 3745 l
-1707 3745 m
-1760 3745 l
-1760 3746 l
-1707 3746 l
-1706 3746 m
-1761 3746 l
-1761 3747 l
-1706 3747 l
-1705 3747 m
-1762 3747 l
-1762 3748 l
-1705 3748 l
-1704 3748 m
-1763 3748 l
-1763 3749 l
-1704 3749 l
-1703 3749 m
-1764 3749 l
-1764 3750 l
-1703 3750 l
-1702 3750 m
-1765 3750 l
-1765 3751 l
-1702 3751 l
-1701 3751 m
-1766 3751 l
-1766 3752 l
-1701 3752 l
-1700 3752 m
-1767 3752 l
-1767 3753 l
-1700 3753 l
-1699 3753 m
-1768 3753 l
-1768 3754 l
-1699 3754 l
-1697 3754 m
-1769 3754 l
-1769 3755 l
-1697 3755 l
-1696 3755 m
-1770 3755 l
-1770 3756 l
-1696 3756 l
-1695 3756 m
-1771 3756 l
-1771 3757 l
-1695 3757 l
-1694 3757 m
-1772 3757 l
-1772 3758 l
-1694 3758 l
-1693 3758 m
-1773 3758 l
-1773 3759 l
-1693 3759 l
-1692 3759 m
-1774 3759 l
-1774 3760 l
-1692 3760 l
-1691 3760 m
-1775 3760 l
-1775 3761 l
-1691 3761 l
-1690 3761 m
-1776 3761 l
-1776 3762 l
-1690 3762 l
-1689 3762 m
-1776 3762 l
-1776 3763 l
-1689 3763 l
-1688 3763 m
-1777 3763 l
-1777 3764 l
-1688 3764 l
-1687 3764 m
-1778 3764 l
-1778 3765 l
-1687 3765 l
-1686 3765 m
-1779 3765 l
-1779 3766 l
-1686 3766 l
-1685 3766 m
-1780 3766 l
-1780 3767 l
-1685 3767 l
-1684 3767 m
-1781 3767 l
-1781 3768 l
-1684 3768 l
-1683 3768 m
-1782 3768 l
-1782 3769 l
-1683 3769 l
-1682 3769 m
-1783 3769 l
-1783 3770 l
-1682 3770 l
-1681 3770 m
-1784 3770 l
-1784 3771 l
-1681 3771 l
-1680 3771 m
-1785 3771 l
-1785 3772 l
-1680 3772 l
-1679 3772 m
-1786 3772 l
-1786 3773 l
-1679 3773 l
-1678 3773 m
-1787 3773 l
-1787 3774 l
-1678 3774 l
-1677 3774 m
-1788 3774 l
-1788 3775 l
-1677 3775 l
-1676 3775 m
-1789 3775 l
-1789 3776 l
-1676 3776 l
-1675 3776 m
-1790 3776 l
-1790 3777 l
-1675 3777 l
-1674 3777 m
-1791 3777 l
-1791 3778 l
-1674 3778 l
-1673 3778 m
-1792 3778 l
-1792 3779 l
-1673 3779 l
-1671 3779 m
-1793 3779 l
-1793 3780 l
-1671 3780 l
-1670 3780 m
-1794 3780 l
-1794 3781 l
-1670 3781 l
-1669 3781 m
-1795 3781 l
-1795 3782 l
-1669 3782 l
-1668 3782 m
-1796 3782 l
-1796 3783 l
-1668 3783 l
-1667 3783 m
-1797 3783 l
-1797 3784 l
-1667 3784 l
-1666 3784 m
-1798 3784 l
-1798 3785 l
-1666 3785 l
-1665 3785 m
-1799 3785 l
-1799 3786 l
-1665 3786 l
-1664 3786 m
-1800 3786 l
-1800 3787 l
-1664 3787 l
-1663 3787 m
-1801 3787 l
-1801 3788 l
-1663 3788 l
-1662 3788 m
-1802 3788 l
-1802 3789 l
-1662 3789 l
-1661 3789 m
-1803 3789 l
-1803 3790 l
-1661 3790 l
-1660 3790 m
-1804 3790 l
-1804 3791 l
-1660 3791 l
-1659 3791 m
-1805 3791 l
-1805 3792 l
-1659 3792 l
-1658 3792 m
-1806 3792 l
-1806 3793 l
-1658 3793 l
-1657 3793 m
-1807 3793 l
-1807 3794 l
-1657 3794 l
-1656 3794 m
-1808 3794 l
-1808 3795 l
-1656 3795 l
-1655 3795 m
-1809 3795 l
-1809 3796 l
-1655 3796 l
-1654 3796 m
-1810 3796 l
-1810 3797 l
-1654 3797 l
-1653 3797 m
-1810 3797 l
-1810 3798 l
-1653 3798 l
-1652 3798 m
-1811 3798 l
-1811 3799 l
-1652 3799 l
-1651 3799 m
-1812 3799 l
-1812 3800 l
-1651 3800 l
-1650 3800 m
-1813 3800 l
-1813 3801 l
-1650 3801 l
-1649 3801 m
-1814 3801 l
-1814 3802 l
-1649 3802 l
-1648 3802 m
-1815 3802 l
-1815 3803 l
-1648 3803 l
-1647 3803 m
-1816 3803 l
-1816 3804 l
-1647 3804 l
-1647 3804 m
-1817 3804 l
-1817 3805 l
-1647 3805 l
-1647 3805 m
-1818 3805 l
-1818 3806 l
-1647 3806 l
-1648 3806 m
-1819 3806 l
-1819 3807 l
-1648 3807 l
-1649 3807 m
-1820 3807 l
-1820 3808 l
-1649 3808 l
-1650 3808 m
-1821 3808 l
-1821 3809 l
-1650 3809 l
-1651 3809 m
-1822 3809 l
-1822 3810 l
-1651 3810 l
-1652 3810 m
-1823 3810 l
-1823 3811 l
-1652 3811 l
-1653 3811 m
-1824 3811 l
-1824 3812 l
-1653 3812 l
-1654 3812 m
-1825 3812 l
-1825 3813 l
-1654 3813 l
-1655 3813 m
-1826 3813 l
-1826 3814 l
-1655 3814 l
-1656 3814 m
-1827 3814 l
-1827 3815 l
-1656 3815 l
-1657 3815 m
-1828 3815 l
-1828 3816 l
-1657 3816 l
-1658 3816 m
-1829 3816 l
-1829 3817 l
-1658 3817 l
-1659 3817 m
-1830 3817 l
-1830 3818 l
-1659 3818 l
-1660 3818 m
-1831 3818 l
-1831 3819 l
-1660 3819 l
-1661 3819 m
-1832 3819 l
-1832 3820 l
-1661 3820 l
-1662 3820 m
-1833 3820 l
-1833 3821 l
-1662 3821 l
-1663 3821 m
-1834 3821 l
-1834 3822 l
-1663 3822 l
-1664 3822 m
-1835 3822 l
-1835 3823 l
-1664 3823 l
-1665 3823 m
-1836 3823 l
-1836 3824 l
-1665 3824 l
-1666 3824 m
-1837 3824 l
-1837 3825 l
-1666 3825 l
-1667 3825 m
-1838 3825 l
-1838 3826 l
-1667 3826 l
-1668 3826 m
-1839 3826 l
-1839 3827 l
-1668 3827 l
-1669 3827 m
-1840 3827 l
-1840 3828 l
-1669 3828 l
-1670 3828 m
-1841 3828 l
-1841 3829 l
-1670 3829 l
-1671 3829 m
-1842 3829 l
-1842 3830 l
-1671 3830 l
-1672 3830 m
-1843 3830 l
-1843 3831 l
-1672 3831 l
-1673 3831 m
-1844 3831 l
-1844 3832 l
-1673 3832 l
-1674 3832 m
-1844 3832 l
-1844 3833 l
-1674 3833 l
-1675 3833 m
-1845 3833 l
-1845 3834 l
-1675 3834 l
-1676 3834 m
-1846 3834 l
-1846 3835 l
-1676 3835 l
-1677 3835 m
-1847 3835 l
-1847 3836 l
-1677 3836 l
-1678 3836 m
-1848 3836 l
-1848 3837 l
-1678 3837 l
-1679 3837 m
-1849 3837 l
-1849 3838 l
-1679 3838 l
-1680 3838 m
-1850 3838 l
-1850 3839 l
-1680 3839 l
-1681 3839 m
-1851 3839 l
-1851 3840 l
-1681 3840 l
-1682 3840 m
-1852 3840 l
-1852 3841 l
-1682 3841 l
-1682 3841 m
-1853 3841 l
-1853 3842 l
-1682 3842 l
-1683 3842 m
-1854 3842 l
-1854 3843 l
-1683 3843 l
-1684 3843 m
-1855 3843 l
-1855 3844 l
-1684 3844 l
-1685 3844 m
-1856 3844 l
-1856 3845 l
-1685 3845 l
-1686 3845 m
-1857 3845 l
-1857 3846 l
-1686 3846 l
-1687 3846 m
-1858 3846 l
-1858 3847 l
-1687 3847 l
-1688 3847 m
-1859 3847 l
-1859 3848 l
-1688 3848 l
-1689 3848 m
-1860 3848 l
-1860 3849 l
-1689 3849 l
-1690 3849 m
-1861 3849 l
-1861 3850 l
-1690 3850 l
-1691 3850 m
-1862 3850 l
-1862 3851 l
-1691 3851 l
-1692 3851 m
-1863 3851 l
-1863 3852 l
-1692 3852 l
-1693 3852 m
-1864 3852 l
-1864 3853 l
-1693 3853 l
-1694 3853 m
-1865 3853 l
-1865 3854 l
-1694 3854 l
-1695 3854 m
-1866 3854 l
-1866 3855 l
-1695 3855 l
-1696 3855 m
-1867 3855 l
-1867 3856 l
-1696 3856 l
-1697 3856 m
-1868 3856 l
-1868 3857 l
-1697 3857 l
-1698 3857 m
-1869 3857 l
-1869 3858 l
-1698 3858 l
-1699 3858 m
-1870 3858 l
-1870 3859 l
-1699 3859 l
-1700 3859 m
-1871 3859 l
-1871 3860 l
-1700 3860 l
-1701 3860 m
-1872 3860 l
-1872 3861 l
-1701 3861 l
-1702 3861 m
-1873 3861 l
-1873 3862 l
-1702 3862 l
-1703 3862 m
-1874 3862 l
-1874 3863 l
-1703 3863 l
-1704 3863 m
-1875 3863 l
-1875 3864 l
-1704 3864 l
-1705 3864 m
-1876 3864 l
-1876 3865 l
-1705 3865 l
-1706 3865 m
-1877 3865 l
-1877 3866 l
-1706 3866 l
-1707 3866 m
-1878 3866 l
-1878 3867 l
-1707 3867 l
-1708 3867 m
-1878 3867 l
-1878 3868 l
-1708 3868 l
-1709 3868 m
-1879 3868 l
-1879 3869 l
-1709 3869 l
-1710 3869 m
-1880 3869 l
-1880 3870 l
-1710 3870 l
-1711 3870 m
-1881 3870 l
-1881 3871 l
-1711 3871 l
-1712 3871 m
-1882 3871 l
-1882 3872 l
-1712 3872 l
-1713 3872 m
-1883 3872 l
-1883 3873 l
-1713 3873 l
-1714 3873 m
-1884 3873 l
-1884 3874 l
-1714 3874 l
-1715 3874 m
-1885 3874 l
-1885 3875 l
-1715 3875 l
-1716 3875 m
-1886 3875 l
-1886 3876 l
-1716 3876 l
-1717 3876 m
-1887 3876 l
-1887 3877 l
-1717 3877 l
-1718 3877 m
-1888 3877 l
-1888 3878 l
-1718 3878 l
-1718 3878 m
-1889 3878 l
-1889 3879 l
-1718 3879 l
-1719 3879 m
-1890 3879 l
-1890 3880 l
-1719 3880 l
-1720 3880 m
-1891 3880 l
-1891 3881 l
-1720 3881 l
-1721 3881 m
-1892 3881 l
-1892 3882 l
-1721 3882 l
-1722 3882 m
-1893 3882 l
-1893 3883 l
-1722 3883 l
-1723 3883 m
-1894 3883 l
-1894 3884 l
-1723 3884 l
-1724 3884 m
-1895 3884 l
-1895 3885 l
-1724 3885 l
-1725 3885 m
-1896 3885 l
-1896 3886 l
-1725 3886 l
-1726 3886 m
-1897 3886 l
-1897 3887 l
-1726 3887 l
-1727 3887 m
-1898 3887 l
-1898 3888 l
-1727 3888 l
-1728 3888 m
-1899 3888 l
-1899 3889 l
-1728 3889 l
-1729 3889 m
-1900 3889 l
-1900 3890 l
-1729 3890 l
-1730 3890 m
-1901 3890 l
-1901 3891 l
-1730 3891 l
-1731 3891 m
-1902 3891 l
-1902 3892 l
-1731 3892 l
-1732 3892 m
-1903 3892 l
-1903 3893 l
-1732 3893 l
-1733 3893 m
-1904 3893 l
-1904 3894 l
-1733 3894 l
-1734 3894 m
-1905 3894 l
-1905 3895 l
-1734 3895 l
-1735 3895 m
-1906 3895 l
-1906 3896 l
-1735 3896 l
-1736 3896 m
-1907 3896 l
-1907 3897 l
-1736 3897 l
-1737 3897 m
-1908 3897 l
-1908 3898 l
-1737 3898 l
-1738 3898 m
-1909 3898 l
-1909 3899 l
-1738 3899 l
-1739 3899 m
-1910 3899 l
-1910 3900 l
-1739 3900 l
-1740 3900 m
-1911 3900 l
-1911 3901 l
-1740 3901 l
-1741 3901 m
-1912 3901 l
-1912 3902 l
-1741 3902 l
-1742 3902 m
-1913 3902 l
-1913 3903 l
-1742 3903 l
-1743 3903 m
-1912 3903 l
-1912 3904 l
-1743 3904 l
-1744 3904 m
-1911 3904 l
-1911 3905 l
-1744 3905 l
-1745 3905 m
-1910 3905 l
-1910 3906 l
-1745 3906 l
-1746 3906 m
-1909 3906 l
-1909 3907 l
-1746 3907 l
-1747 3907 m
-1908 3907 l
-1908 3908 l
-1747 3908 l
-1748 3908 m
-1907 3908 l
-1907 3909 l
-1748 3909 l
-1749 3909 m
-1906 3909 l
-1906 3910 l
-1749 3910 l
-1750 3910 m
-1905 3910 l
-1905 3911 l
-1750 3911 l
-1751 3911 m
-1904 3911 l
-1904 3912 l
-1751 3912 l
-1752 3912 m
-1903 3912 l
-1903 3913 l
-1752 3913 l
-1753 3913 m
-1902 3913 l
-1902 3914 l
-1753 3914 l
-1753 3914 m
-1901 3914 l
-1901 3915 l
-1753 3915 l
-1754 3915 m
-1900 3915 l
-1900 3916 l
-1754 3916 l
-1755 3916 m
-1899 3916 l
-1899 3917 l
-1755 3917 l
-1756 3917 m
-1898 3917 l
-1898 3918 l
-1756 3918 l
-1757 3918 m
-1897 3918 l
-1897 3919 l
-1757 3919 l
-1758 3919 m
-1896 3919 l
-1896 3920 l
-1758 3920 l
-1759 3920 m
-1895 3920 l
-1895 3921 l
-1759 3921 l
-1760 3921 m
-1894 3921 l
-1894 3922 l
-1760 3922 l
-1761 3922 m
-1893 3922 l
-1893 3923 l
-1761 3923 l
-1762 3923 m
-1892 3923 l
-1892 3924 l
-1762 3924 l
-1763 3924 m
-1891 3924 l
-1891 3925 l
-1763 3925 l
-1764 3925 m
-1890 3925 l
-1890 3926 l
-1764 3926 l
-1765 3926 m
-1889 3926 l
-1889 3927 l
-1765 3927 l
-1766 3927 m
-1888 3927 l
-1888 3928 l
-1766 3928 l
-1767 3928 m
-1887 3928 l
-1887 3929 l
-1767 3929 l
-1768 3929 m
-1886 3929 l
-1886 3930 l
-1768 3930 l
-1769 3930 m
-1885 3930 l
-1885 3931 l
-1769 3931 l
-1770 3931 m
-1883 3931 l
-1883 3932 l
-1770 3932 l
-1771 3932 m
-1882 3932 l
-1882 3933 l
-1771 3933 l
-1772 3933 m
-1881 3933 l
-1881 3934 l
-1772 3934 l
-1773 3934 m
-1880 3934 l
-1880 3935 l
-1773 3935 l
-1774 3935 m
-1879 3935 l
-1879 3936 l
-1774 3936 l
-1775 3936 m
-1878 3936 l
-1878 3937 l
-1775 3937 l
-1776 3937 m
-1877 3937 l
-1877 3938 l
-1776 3938 l
-1777 3938 m
-1876 3938 l
-1876 3939 l
-1777 3939 l
-1778 3939 m
-1875 3939 l
-1875 3940 l
-1778 3940 l
-1779 3940 m
-1874 3940 l
-1874 3941 l
-1779 3941 l
-1780 3941 m
-1873 3941 l
-1873 3942 l
-1780 3942 l
-1781 3942 m
-1872 3942 l
-1872 3943 l
-1781 3943 l
-1782 3943 m
-1871 3943 l
-1871 3944 l
-1782 3944 l
-1783 3944 m
-1870 3944 l
-1870 3945 l
-1783 3945 l
-1784 3945 m
-1869 3945 l
-1869 3946 l
-1784 3946 l
-1785 3946 m
-1868 3946 l
-1868 3947 l
-1785 3947 l
-1786 3947 m
-1867 3947 l
-1867 3948 l
-1786 3948 l
-1787 3948 m
-1866 3948 l
-1866 3949 l
-1787 3949 l
-1788 3949 m
-1865 3949 l
-1865 3950 l
-1788 3950 l
-1789 3950 m
-1864 3950 l
-1864 3951 l
-1789 3951 l
-1789 3951 m
-1863 3951 l
-1863 3952 l
-1789 3952 l
-1790 3952 m
-1862 3952 l
-1862 3953 l
-1790 3953 l
-1791 3953 m
-1861 3953 l
-1861 3954 l
-1791 3954 l
-1792 3954 m
-1860 3954 l
-1860 3955 l
-1792 3955 l
-1793 3955 m
-1859 3955 l
-1859 3956 l
-1793 3956 l
-1794 3956 m
-1858 3956 l
-1858 3957 l
-1794 3957 l
-1795 3957 m
-1857 3957 l
-1857 3958 l
-1795 3958 l
-1796 3958 m
-1856 3958 l
-1856 3959 l
-1796 3959 l
-1797 3959 m
-1854 3959 l
-1854 3960 l
-1797 3960 l
-1798 3960 m
-1853 3960 l
-1853 3961 l
-1798 3961 l
-1799 3961 m
-1852 3961 l
-1852 3962 l
-1799 3962 l
-1800 3962 m
-1851 3962 l
-1851 3963 l
-1800 3963 l
-1801 3963 m
-1850 3963 l
-1850 3964 l
-1801 3964 l
-1802 3964 m
-1849 3964 l
-1849 3965 l
-1802 3965 l
-1803 3965 m
-1848 3965 l
-1848 3966 l
-1803 3966 l
-1804 3966 m
-1847 3966 l
-1847 3967 l
-1804 3967 l
-1805 3967 m
-1846 3967 l
-1846 3968 l
-1805 3968 l
-1806 3968 m
-1845 3968 l
-1845 3969 l
-1806 3969 l
-1807 3969 m
-1844 3969 l
-1844 3970 l
-1807 3970 l
-1808 3970 m
-1843 3970 l
-1843 3971 l
-1808 3971 l
-1809 3971 m
-1842 3971 l
-1842 3972 l
-1809 3972 l
-1810 3972 m
-1841 3972 l
-1841 3973 l
-1810 3973 l
-1811 3973 m
-1840 3973 l
-1840 3974 l
-1811 3974 l
-1812 3974 m
-1839 3974 l
-1839 3975 l
-1812 3975 l
-1813 3975 m
-1838 3975 l
-1838 3976 l
-1813 3976 l
-1814 3976 m
-1837 3976 l
-1837 3977 l
-1814 3977 l
-1815 3977 m
-1836 3977 l
-1836 3978 l
-1815 3978 l
-1816 3978 m
-1835 3978 l
-1835 3979 l
-1816 3979 l
-1817 3979 m
-1834 3979 l
-1834 3980 l
-1817 3980 l
-1818 3980 m
-1833 3980 l
-1833 3981 l
-1818 3981 l
-1819 3981 m
-1832 3981 l
-1832 3982 l
-1819 3982 l
-1820 3982 m
-1831 3982 l
-1831 3983 l
-1820 3983 l
-1821 3983 m
-1830 3983 l
-1830 3984 l
-1821 3984 l
-1822 3984 m
-1829 3984 l
-1829 3985 l
-1822 3985 l
-1823 3985 m
-1828 3985 l
-1828 3986 l
-1823 3986 l
-1824 3986 m
-1827 3986 l
-1827 3987 l
-1824 3987 l
-Y
-1734.3 3720.1 m
-1647 3804 l
-1825 3987 l
-1912 3903 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1686 3796 m
-1689 3805 l
-1688 3823 l
-1751 3762 l
-S
-1729 3865 m
-1761 3898 l
-1768 3856 l
-1776 3865 l
-1785 3869 l
-1791 3869 l
-1803 3863 l
-1809 3857 l
-1815 3845 l
-1815 3834 l
-1809 3822 l
-1801 3813 l
-1789 3807 l
-1783 3807 l
-1774 3809 l
-S
-1816 3955 m
-1787 3925 l
-1811 3896 l
-1811 3901 l
-1817 3913 l
-1826 3922 l
-1837 3928 l
-1849 3929 l
-1861 3923 l
-1867 3917 l
-1873 3905 l
-1873 3894 l
-1868 3882 l
-1859 3873 l
-1847 3867 l
-1841 3866 l
-1832 3869 l
-S
-1 g
-1467 3111 m
-1471 3111 l
-1471 3112 l
-1467 3112 l
-1462 3112 m
-1471 3112 l
-1471 3113 l
-1462 3113 l
-1456 3113 m
-1471 3113 l
-1471 3114 l
-1456 3114 l
-1451 3114 m
-1471 3114 l
-1471 3115 l
-1451 3115 l
-1446 3115 m
-1472 3115 l
-1472 3116 l
-1446 3116 l
-1441 3116 m
-1472 3116 l
-1472 3117 l
-1441 3117 l
-1435 3117 m
-1472 3117 l
-1472 3118 l
-1435 3118 l
-1430 3118 m
-1472 3118 l
-1472 3119 l
-1430 3119 l
-1425 3119 m
-1472 3119 l
-1472 3120 l
-1425 3120 l
-1419 3120 m
-1472 3120 l
-1472 3121 l
-1419 3121 l
-1414 3121 m
-1473 3121 l
-1473 3122 l
-1414 3122 l
-1409 3122 m
-1473 3122 l
-1473 3123 l
-1409 3123 l
-1403 3123 m
-1473 3123 l
-1473 3124 l
-1403 3124 l
-1398 3124 m
-1473 3124 l
-1473 3125 l
-1398 3125 l
-1393 3125 m
-1473 3125 l
-1473 3126 l
-1393 3126 l
-1388 3126 m
-1474 3126 l
-1474 3127 l
-1388 3127 l
-1382 3127 m
-1474 3127 l
-1474 3128 l
-1382 3128 l
-1377 3128 m
-1474 3128 l
-1474 3129 l
-1377 3129 l
-1372 3129 m
-1474 3129 l
-1474 3130 l
-1372 3130 l
-1366 3130 m
-1474 3130 l
-1474 3131 l
-1366 3131 l
-1361 3131 m
-1475 3131 l
-1475 3132 l
-1361 3132 l
-1356 3132 m
-1475 3132 l
-1475 3133 l
-1356 3133 l
-1351 3133 m
-1475 3133 l
-1475 3134 l
-1351 3134 l
-1351 3134 m
-1475 3134 l
-1475 3137 l
-1351 3137 l
-1351 3137 m
-1476 3137 l
-1476 3140 l
-1351 3140 l
-1352 3140 m
-1476 3140 l
-1476 3142 l
-1352 3142 l
-1352 3142 m
-1477 3142 l
-1477 3145 l
-1352 3145 l
-1353 3145 m
-1477 3145 l
-1477 3147 l
-1353 3147 l
-1353 3147 m
-1478 3147 l
-1478 3150 l
-1353 3150 l
-1354 3150 m
-1478 3150 l
-1478 3153 l
-1354 3153 l
-1354 3153 m
-1479 3153 l
-1479 3156 l
-1354 3156 l
-1355 3156 m
-1479 3156 l
-1479 3158 l
-1355 3158 l
-1355 3158 m
-1480 3158 l
-1480 3161 l
-1355 3161 l
-1356 3161 m
-1480 3161 l
-1480 3163 l
-1356 3163 l
-1356 3163 m
-1481 3163 l
-1481 3166 l
-1356 3166 l
-1357 3166 m
-1481 3166 l
-1481 3169 l
-1357 3169 l
-1357 3169 m
-1482 3169 l
-1482 3172 l
-1357 3172 l
-1358 3172 m
-1482 3172 l
-1482 3174 l
-1358 3174 l
-1358 3174 m
-1483 3174 l
-1483 3177 l
-1358 3177 l
-1359 3177 m
-1483 3177 l
-1483 3180 l
-1359 3180 l
-1359 3180 m
-1484 3180 l
-1484 3182 l
-1359 3182 l
-1360 3182 m
-1484 3182 l
-1484 3185 l
-1360 3185 l
-1360 3185 m
-1485 3185 l
-1485 3188 l
-1360 3188 l
-1361 3188 m
-1485 3188 l
-1485 3190 l
-1361 3190 l
-1361 3190 m
-1486 3190 l
-1486 3193 l
-1361 3193 l
-1362 3193 m
-1486 3193 l
-1486 3196 l
-1362 3196 l
-1362 3196 m
-1487 3196 l
-1487 3198 l
-1362 3198 l
-1363 3198 m
-1487 3198 l
-1487 3201 l
-1363 3201 l
-1363 3201 m
-1488 3201 l
-1488 3204 l
-1363 3204 l
-1364 3204 m
-1488 3204 l
-1488 3206 l
-1364 3206 l
-1364 3206 m
-1489 3206 l
-1489 3209 l
-1364 3209 l
-1365 3209 m
-1489 3209 l
-1489 3212 l
-1365 3212 l
-1365 3212 m
-1490 3212 l
-1490 3214 l
-1365 3214 l
-1366 3214 m
-1490 3214 l
-1490 3217 l
-1366 3217 l
-1366 3217 m
-1491 3217 l
-1491 3220 l
-1366 3220 l
-1367 3220 m
-1491 3220 l
-1491 3222 l
-1367 3222 l
-1367 3222 m
-1492 3222 l
-1492 3225 l
-1367 3225 l
-1368 3225 m
-1492 3225 l
-1492 3228 l
-1368 3228 l
-1368 3228 m
-1493 3228 l
-1493 3230 l
-1368 3230 l
-1369 3230 m
-1493 3230 l
-1493 3233 l
-1369 3233 l
-1369 3233 m
-1494 3233 l
-1494 3236 l
-1369 3236 l
-1370 3236 m
-1494 3236 l
-1494 3238 l
-1370 3238 l
-1370 3238 m
-1495 3238 l
-1495 3241 l
-1370 3241 l
-1371 3241 m
-1495 3241 l
-1495 3244 l
-1371 3244 l
-1371 3244 m
-1496 3244 l
-1496 3246 l
-1371 3246 l
-1372 3246 m
-1496 3246 l
-1496 3249 l
-1372 3249 l
-1372 3249 m
-1497 3249 l
-1497 3252 l
-1372 3252 l
-1373 3252 m
-1497 3252 l
-1497 3254 l
-1373 3254 l
-1373 3254 m
-1498 3254 l
-1498 3257 l
-1373 3257 l
-1374 3257 m
-1498 3257 l
-1498 3260 l
-1374 3260 l
-1374 3260 m
-1499 3260 l
-1499 3262 l
-1374 3262 l
-1375 3262 m
-1499 3262 l
-1499 3265 l
-1375 3265 l
-1375 3265 m
-1500 3265 l
-1500 3267 l
-1375 3267 l
-1376 3267 m
-1500 3267 l
-1500 3271 l
-1376 3271 l
-1376 3271 m
-1501 3271 l
-1501 3273 l
-1376 3273 l
-1377 3273 m
-1501 3273 l
-1501 3276 l
-1377 3276 l
-1377 3276 m
-1502 3276 l
-1502 3278 l
-1377 3278 l
-1378 3278 m
-1502 3278 l
-1502 3281 l
-1378 3281 l
-1378 3281 m
-1503 3281 l
-1503 3283 l
-1378 3283 l
-1379 3283 m
-1503 3283 l
-1503 3287 l
-1379 3287 l
-1379 3287 m
-1504 3287 l
-1504 3289 l
-1379 3289 l
-1380 3289 m
-1504 3289 l
-1504 3292 l
-1380 3292 l
-1380 3292 m
-1505 3292 l
-1505 3294 l
-1380 3294 l
-1381 3294 m
-1505 3294 l
-1505 3297 l
-1381 3297 l
-1381 3297 m
-1506 3297 l
-1506 3299 l
-1381 3299 l
-1382 3299 m
-1506 3299 l
-1506 3303 l
-1382 3303 l
-1382 3303 m
-1507 3303 l
-1507 3305 l
-1382 3305 l
-1383 3305 m
-1507 3305 l
-1507 3308 l
-1383 3308 l
-1383 3308 m
-1508 3308 l
-1508 3310 l
-1383 3310 l
-1384 3310 m
-1508 3310 l
-1508 3313 l
-1384 3313 l
-1384 3313 m
-1509 3313 l
-1509 3315 l
-1384 3315 l
-1385 3315 m
-1509 3315 l
-1509 3319 l
-1385 3319 l
-1385 3319 m
-1510 3319 l
-1510 3321 l
-1385 3321 l
-1386 3321 m
-1510 3321 l
-1510 3324 l
-1386 3324 l
-1386 3324 m
-1511 3324 l
-1511 3326 l
-1386 3326 l
-1387 3326 m
-1511 3326 l
-1511 3329 l
-1387 3329 l
-1387 3329 m
-1512 3329 l
-1512 3331 l
-1387 3331 l
-1388 3331 m
-1512 3331 l
-1512 3335 l
-1388 3335 l
-1388 3335 m
-1513 3335 l
-1513 3337 l
-1388 3337 l
-1389 3337 m
-1513 3337 l
-1513 3340 l
-1389 3340 l
-1389 3340 m
-1514 3340 l
-1514 3342 l
-1389 3342 l
-1390 3342 m
-1514 3342 l
-1514 3345 l
-1390 3345 l
-1390 3345 m
-1515 3345 l
-1515 3347 l
-1390 3347 l
-1391 3347 m
-1515 3347 l
-1515 3351 l
-1391 3351 l
-1391 3351 m
-1516 3351 l
-1516 3353 l
-1391 3353 l
-1392 3353 m
-1516 3353 l
-1516 3356 l
-1392 3356 l
-1392 3356 m
-1517 3356 l
-1517 3358 l
-1392 3358 l
-1393 3358 m
-1517 3358 l
-1517 3362 l
-1393 3362 l
-1393 3362 m
-1518 3362 l
-1518 3363 l
-1393 3363 l
-1394 3363 m
-1512 3363 l
-1512 3364 l
-1394 3364 l
-1394 3364 m
-1507 3364 l
-1507 3365 l
-1394 3365 l
-1394 3365 m
-1501 3365 l
-1501 3366 l
-1394 3366 l
-1394 3366 m
-1496 3366 l
-1496 3367 l
-1394 3367 l
-1394 3367 m
-1490 3367 l
-1490 3368 l
-1394 3368 l
-1394 3368 m
-1485 3368 l
-1485 3369 l
-1394 3369 l
-1395 3369 m
-1480 3369 l
-1480 3370 l
-1395 3370 l
-1395 3370 m
-1474 3370 l
-1474 3371 l
-1395 3371 l
-1395 3371 m
-1469 3371 l
-1469 3372 l
-1395 3372 l
-1395 3372 m
-1463 3372 l
-1463 3373 l
-1395 3373 l
-1395 3373 m
-1458 3373 l
-1458 3374 l
-1395 3374 l
-1396 3374 m
-1453 3374 l
-1453 3375 l
-1396 3375 l
-1396 3375 m
-1447 3375 l
-1447 3376 l
-1396 3376 l
-1396 3376 m
-1442 3376 l
-1442 3377 l
-1396 3377 l
-1396 3377 m
-1436 3377 l
-1436 3378 l
-1396 3378 l
-1396 3378 m
-1431 3378 l
-1431 3379 l
-1396 3379 l
-1397 3379 m
-1426 3379 l
-1426 3380 l
-1397 3380 l
-1397 3380 m
-1420 3380 l
-1420 3381 l
-1397 3381 l
-1397 3381 m
-1415 3381 l
-1415 3382 l
-1397 3382 l
-1397 3382 m
-1409 3382 l
-1409 3383 l
-1397 3383 l
-1397 3383 m
-1404 3383 l
-1404 3384 l
-1397 3384 l
-Y
-1470.2 3111.5 m
-1351 3134 l
-1398 3384 l
-1517 3362 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1388 3148 m
-1385 3157 l
-1375 3172 l
-1462 3156 l
-S
-1389 3242 m
-1390 3229 l
-1398 3223 l
-1406 3221 l
-1415 3224 l
-1421 3231 l
-1428 3247 l
-1434 3259 l
-1444 3265 l
-1453 3268 l
-1465 3265 l
-1473 3260 l
-1476 3255 l
-1478 3242 l
-1475 3225 l
-1468 3214 l
-1463 3211 l
-1454 3208 l
-1442 3210 l
-1435 3216 l
-1428 3226 l
-1426 3239 l
-1425 3256 l
-1423 3265 l
-1415 3271 l
-1407 3272 l
-1398 3270 l
-1392 3258 l
-1389 3242 l
-S
-1405 3328 m
-1407 3315 l
-1417 3304 l
-1437 3296 l
-1449 3294 l
-1471 3294 l
-1485 3300 l
-1491 3312 l
-1493 3320 l
-1491 3333 l
-1480 3343 l
-1460 3351 l
-1448 3354 l
-1427 3354 l
-1413 3348 l
-1406 3336 l
-1405 3328 l
-S
-1 g
-1766 2327 m
-1769 2327 l
-1769 2328 l
-1766 2328 l
-1765 2328 m
-1770 2328 l
-1770 2329 l
-1765 2329 l
-1764 2329 m
-1771 2329 l
-1771 2330 l
-1764 2330 l
-1763 2330 m
-1772 2330 l
-1772 2331 l
-1763 2331 l
-1762 2331 m
-1773 2331 l
-1773 2332 l
-1762 2332 l
-1761 2332 m
-1774 2332 l
-1774 2333 l
-1761 2333 l
-1760 2333 m
-1775 2333 l
-1775 2334 l
-1760 2334 l
-1759 2334 m
-1776 2334 l
-1776 2335 l
-1759 2335 l
-1758 2335 m
-1777 2335 l
-1777 2336 l
-1758 2336 l
-1757 2336 m
-1778 2336 l
-1778 2337 l
-1757 2337 l
-1756 2337 m
-1779 2337 l
-1779 2338 l
-1756 2338 l
-1755 2338 m
-1780 2338 l
-1780 2339 l
-1755 2339 l
-1754 2339 m
-1781 2339 l
-1781 2340 l
-1754 2340 l
-1753 2340 m
-1782 2340 l
-1782 2341 l
-1753 2341 l
-1752 2341 m
-1783 2341 l
-1783 2342 l
-1752 2342 l
-1751 2342 m
-1784 2342 l
-1784 2343 l
-1751 2343 l
-1750 2343 m
-1785 2343 l
-1785 2344 l
-1750 2344 l
-1749 2344 m
-1786 2344 l
-1786 2345 l
-1749 2345 l
-1748 2345 m
-1787 2345 l
-1787 2346 l
-1748 2346 l
-1747 2346 m
-1788 2346 l
-1788 2347 l
-1747 2347 l
-1746 2347 m
-1789 2347 l
-1789 2348 l
-1746 2348 l
-1745 2348 m
-1790 2348 l
-1790 2349 l
-1745 2349 l
-1744 2349 m
-1791 2349 l
-1791 2350 l
-1744 2350 l
-1743 2350 m
-1792 2350 l
-1792 2351 l
-1743 2351 l
-1742 2351 m
-1793 2351 l
-1793 2352 l
-1742 2352 l
-1741 2352 m
-1794 2352 l
-1794 2353 l
-1741 2353 l
-1739 2353 m
-1795 2353 l
-1795 2354 l
-1739 2354 l
-1738 2354 m
-1796 2354 l
-1796 2355 l
-1738 2355 l
-1737 2355 m
-1796 2355 l
-1796 2356 l
-1737 2356 l
-1736 2356 m
-1797 2356 l
-1797 2357 l
-1736 2357 l
-1735 2357 m
-1798 2357 l
-1798 2358 l
-1735 2358 l
-1734 2358 m
-1799 2358 l
-1799 2359 l
-1734 2359 l
-1733 2359 m
-1800 2359 l
-1800 2360 l
-1733 2360 l
-1732 2360 m
-1801 2360 l
-1801 2361 l
-1732 2361 l
-1731 2361 m
-1802 2361 l
-1802 2362 l
-1731 2362 l
-1730 2362 m
-1803 2362 l
-1803 2363 l
-1730 2363 l
-1729 2363 m
-1804 2363 l
-1804 2364 l
-1729 2364 l
-1728 2364 m
-1805 2364 l
-1805 2365 l
-1728 2365 l
-1727 2365 m
-1806 2365 l
-1806 2366 l
-1727 2366 l
-1726 2366 m
-1807 2366 l
-1807 2367 l
-1726 2367 l
-1725 2367 m
-1808 2367 l
-1808 2368 l
-1725 2368 l
-1724 2368 m
-1809 2368 l
-1809 2369 l
-1724 2369 l
-1723 2369 m
-1810 2369 l
-1810 2370 l
-1723 2370 l
-1722 2370 m
-1811 2370 l
-1811 2371 l
-1722 2371 l
-1721 2371 m
-1812 2371 l
-1812 2372 l
-1721 2372 l
-1720 2372 m
-1813 2372 l
-1813 2373 l
-1720 2373 l
-1719 2373 m
-1814 2373 l
-1814 2374 l
-1719 2374 l
-1718 2374 m
-1815 2374 l
-1815 2375 l
-1718 2375 l
-1717 2375 m
-1816 2375 l
-1816 2376 l
-1717 2376 l
-1716 2376 m
-1817 2376 l
-1817 2377 l
-1716 2377 l
-1715 2377 m
-1818 2377 l
-1818 2378 l
-1715 2378 l
-1714 2378 m
-1819 2378 l
-1819 2379 l
-1714 2379 l
-1712 2379 m
-1820 2379 l
-1820 2380 l
-1712 2380 l
-1711 2380 m
-1821 2380 l
-1821 2381 l
-1711 2381 l
-1710 2381 m
-1822 2381 l
-1822 2382 l
-1710 2382 l
-1709 2382 m
-1823 2382 l
-1823 2383 l
-1709 2383 l
-1708 2383 m
-1823 2383 l
-1823 2384 l
-1708 2384 l
-1707 2384 m
-1824 2384 l
-1824 2385 l
-1707 2385 l
-1706 2385 m
-1825 2385 l
-1825 2386 l
-1706 2386 l
-1705 2386 m
-1826 2386 l
-1826 2387 l
-1705 2387 l
-1704 2387 m
-1827 2387 l
-1827 2388 l
-1704 2388 l
-1703 2388 m
-1828 2388 l
-1828 2389 l
-1703 2389 l
-1702 2389 m
-1829 2389 l
-1829 2390 l
-1702 2390 l
-1701 2390 m
-1830 2390 l
-1830 2391 l
-1701 2391 l
-1700 2391 m
-1831 2391 l
-1831 2392 l
-1700 2392 l
-1699 2392 m
-1832 2392 l
-1832 2393 l
-1699 2393 l
-1698 2393 m
-1833 2393 l
-1833 2394 l
-1698 2394 l
-1697 2394 m
-1834 2394 l
-1834 2395 l
-1697 2395 l
-1696 2395 m
-1835 2395 l
-1835 2396 l
-1696 2396 l
-1695 2396 m
-1836 2396 l
-1836 2397 l
-1695 2397 l
-1694 2397 m
-1837 2397 l
-1837 2398 l
-1694 2398 l
-1693 2398 m
-1838 2398 l
-1838 2399 l
-1693 2399 l
-1692 2399 m
-1839 2399 l
-1839 2400 l
-1692 2400 l
-1691 2400 m
-1840 2400 l
-1840 2401 l
-1691 2401 l
-1690 2401 m
-1841 2401 l
-1841 2402 l
-1690 2402 l
-1689 2402 m
-1842 2402 l
-1842 2403 l
-1689 2403 l
-1688 2403 m
-1843 2403 l
-1843 2404 l
-1688 2404 l
-1687 2404 m
-1844 2404 l
-1844 2405 l
-1687 2405 l
-1686 2405 m
-1845 2405 l
-1845 2406 l
-1686 2406 l
-1684 2406 m
-1846 2406 l
-1846 2407 l
-1684 2407 l
-1683 2407 m
-1847 2407 l
-1847 2408 l
-1683 2408 l
-1682 2408 m
-1848 2408 l
-1848 2409 l
-1682 2409 l
-1681 2409 m
-1849 2409 l
-1849 2410 l
-1681 2410 l
-1680 2410 m
-1850 2410 l
-1850 2411 l
-1680 2411 l
-1679 2411 m
-1850 2411 l
-1850 2412 l
-1679 2412 l
-1678 2412 m
-1851 2412 l
-1851 2413 l
-1678 2413 l
-1677 2413 m
-1852 2413 l
-1852 2414 l
-1677 2414 l
-1676 2414 m
-1853 2414 l
-1853 2415 l
-1676 2415 l
-1675 2415 m
-1852 2415 l
-1852 2416 l
-1675 2416 l
-1674 2416 m
-1851 2416 l
-1851 2417 l
-1674 2417 l
-1673 2417 m
-1850 2417 l
-1850 2418 l
-1673 2418 l
-1672 2418 m
-1849 2418 l
-1849 2419 l
-1672 2419 l
-1671 2419 m
-1848 2419 l
-1848 2420 l
-1671 2420 l
-1670 2420 m
-1847 2420 l
-1847 2421 l
-1670 2421 l
-1669 2421 m
-1846 2421 l
-1846 2422 l
-1669 2422 l
-1668 2422 m
-1845 2422 l
-1845 2423 l
-1668 2423 l
-1667 2423 m
-1844 2423 l
-1844 2424 l
-1667 2424 l
-1666 2424 m
-1843 2424 l
-1843 2425 l
-1666 2425 l
-1665 2425 m
-1842 2425 l
-1842 2426 l
-1665 2426 l
-1664 2426 m
-1841 2426 l
-1841 2427 l
-1664 2427 l
-1663 2427 m
-1840 2427 l
-1840 2428 l
-1663 2428 l
-1662 2428 m
-1839 2428 l
-1839 2429 l
-1662 2429 l
-1661 2429 m
-1838 2429 l
-1838 2430 l
-1661 2430 l
-1660 2430 m
-1837 2430 l
-1837 2431 l
-1660 2431 l
-1659 2431 m
-1836 2431 l
-1836 2432 l
-1659 2432 l
-1657 2432 m
-1835 2432 l
-1835 2433 l
-1657 2433 l
-1656 2433 m
-1834 2433 l
-1834 2434 l
-1656 2434 l
-1655 2434 m
-1833 2434 l
-1833 2435 l
-1655 2435 l
-1654 2435 m
-1832 2435 l
-1832 2436 l
-1654 2436 l
-1653 2436 m
-1831 2436 l
-1831 2437 l
-1653 2437 l
-1652 2437 m
-1830 2437 l
-1830 2438 l
-1652 2438 l
-1651 2438 m
-1829 2438 l
-1829 2439 l
-1651 2439 l
-1650 2439 m
-1827 2439 l
-1827 2440 l
-1650 2440 l
-1649 2440 m
-1826 2440 l
-1826 2441 l
-1649 2441 l
-1648 2441 m
-1825 2441 l
-1825 2442 l
-1648 2442 l
-1647 2442 m
-1824 2442 l
-1824 2443 l
-1647 2443 l
-1646 2443 m
-1823 2443 l
-1823 2444 l
-1646 2444 l
-1645 2444 m
-1822 2444 l
-1822 2445 l
-1645 2445 l
-1644 2445 m
-1821 2445 l
-1821 2446 l
-1644 2446 l
-1643 2446 m
-1820 2446 l
-1820 2447 l
-1643 2447 l
-1642 2447 m
-1819 2447 l
-1819 2448 l
-1642 2448 l
-1641 2448 m
-1818 2448 l
-1818 2449 l
-1641 2449 l
-1640 2449 m
-1817 2449 l
-1817 2450 l
-1640 2450 l
-1639 2450 m
-1816 2450 l
-1816 2451 l
-1639 2451 l
-1638 2451 m
-1815 2451 l
-1815 2452 l
-1638 2452 l
-1637 2452 m
-1814 2452 l
-1814 2453 l
-1637 2453 l
-1636 2453 m
-1813 2453 l
-1813 2454 l
-1636 2454 l
-1635 2454 m
-1812 2454 l
-1812 2455 l
-1635 2455 l
-1634 2455 m
-1811 2455 l
-1811 2456 l
-1634 2456 l
-1633 2456 m
-1810 2456 l
-1810 2457 l
-1633 2457 l
-1632 2457 m
-1809 2457 l
-1809 2458 l
-1632 2458 l
-1631 2458 m
-1808 2458 l
-1808 2459 l
-1631 2459 l
-1629 2459 m
-1807 2459 l
-1807 2460 l
-1629 2460 l
-1628 2460 m
-1806 2460 l
-1806 2461 l
-1628 2461 l
-1627 2461 m
-1805 2461 l
-1805 2462 l
-1627 2462 l
-1626 2462 m
-1804 2462 l
-1804 2463 l
-1626 2463 l
-1625 2463 m
-1803 2463 l
-1803 2464 l
-1625 2464 l
-1624 2464 m
-1802 2464 l
-1802 2465 l
-1624 2465 l
-1623 2465 m
-1801 2465 l
-1801 2466 l
-1623 2466 l
-1622 2466 m
-1799 2466 l
-1799 2467 l
-1622 2467 l
-1621 2467 m
-1798 2467 l
-1798 2468 l
-1621 2468 l
-1620 2468 m
-1797 2468 l
-1797 2469 l
-1620 2469 l
-1619 2469 m
-1796 2469 l
-1796 2470 l
-1619 2470 l
-1618 2470 m
-1795 2470 l
-1795 2471 l
-1618 2471 l
-1617 2471 m
-1794 2471 l
-1794 2472 l
-1617 2472 l
-1616 2472 m
-1793 2472 l
-1793 2473 l
-1616 2473 l
-1615 2473 m
-1792 2473 l
-1792 2474 l
-1615 2474 l
-1614 2474 m
-1791 2474 l
-1791 2475 l
-1614 2475 l
-1613 2475 m
-1790 2475 l
-1790 2476 l
-1613 2476 l
-1612 2476 m
-1789 2476 l
-1789 2477 l
-1612 2477 l
-1611 2477 m
-1788 2477 l
-1788 2478 l
-1611 2478 l
-1610 2478 m
-1787 2478 l
-1787 2479 l
-1610 2479 l
-1609 2479 m
-1786 2479 l
-1786 2480 l
-1609 2480 l
-1608 2480 m
-1785 2480 l
-1785 2481 l
-1608 2481 l
-1607 2481 m
-1784 2481 l
-1784 2482 l
-1607 2482 l
-1606 2482 m
-1783 2482 l
-1783 2483 l
-1606 2483 l
-1605 2483 m
-1782 2483 l
-1782 2484 l
-1605 2484 l
-1604 2484 m
-1781 2484 l
-1781 2485 l
-1604 2485 l
-1602 2485 m
-1780 2485 l
-1780 2486 l
-1602 2486 l
-1601 2486 m
-1779 2486 l
-1779 2487 l
-1601 2487 l
-1600 2487 m
-1778 2487 l
-1778 2488 l
-1600 2488 l
-1599 2488 m
-1777 2488 l
-1777 2489 l
-1599 2489 l
-1598 2489 m
-1776 2489 l
-1776 2490 l
-1598 2490 l
-1597 2490 m
-1775 2490 l
-1775 2491 l
-1597 2491 l
-1596 2491 m
-1774 2491 l
-1774 2492 l
-1596 2492 l
-1595 2492 m
-1773 2492 l
-1773 2493 l
-1595 2493 l
-1594 2493 m
-1771 2493 l
-1771 2494 l
-1594 2494 l
-1593 2494 m
-1770 2494 l
-1770 2495 l
-1593 2495 l
-1592 2495 m
-1769 2495 l
-1769 2496 l
-1592 2496 l
-1591 2496 m
-1768 2496 l
-1768 2497 l
-1591 2497 l
-1590 2497 m
-1767 2497 l
-1767 2498 l
-1590 2498 l
-1589 2498 m
-1766 2498 l
-1766 2499 l
-1589 2499 l
-1588 2499 m
-1765 2499 l
-1765 2500 l
-1588 2500 l
-1587 2500 m
-1764 2500 l
-1764 2501 l
-1587 2501 l
-1586 2501 m
-1763 2501 l
-1763 2502 l
-1586 2502 l
-1585 2502 m
-1762 2502 l
-1762 2503 l
-1585 2503 l
-1584 2503 m
-1761 2503 l
-1761 2504 l
-1584 2504 l
-1583 2504 m
-1760 2504 l
-1760 2505 l
-1583 2505 l
-1582 2505 m
-1759 2505 l
-1759 2506 l
-1582 2506 l
-1581 2506 m
-1758 2506 l
-1758 2507 l
-1581 2507 l
-1580 2507 m
-1757 2507 l
-1757 2508 l
-1580 2508 l
-1579 2508 m
-1756 2508 l
-1756 2509 l
-1579 2509 l
-1578 2509 m
-1755 2509 l
-1755 2510 l
-1578 2510 l
-1577 2510 m
-1754 2510 l
-1754 2511 l
-1577 2511 l
-1576 2511 m
-1753 2511 l
-1753 2512 l
-1576 2512 l
-1576 2512 m
-1752 2512 l
-1752 2513 l
-1576 2513 l
-1576 2513 m
-1751 2513 l
-1751 2514 l
-1576 2514 l
-1577 2514 m
-1750 2514 l
-1750 2515 l
-1577 2515 l
-1578 2515 m
-1749 2515 l
-1749 2516 l
-1578 2516 l
-1579 2516 m
-1748 2516 l
-1748 2517 l
-1579 2517 l
-1580 2517 m
-1747 2517 l
-1747 2518 l
-1580 2518 l
-1581 2518 m
-1746 2518 l
-1746 2519 l
-1581 2519 l
-1582 2519 m
-1745 2519 l
-1745 2520 l
-1582 2520 l
-1583 2520 m
-1743 2520 l
-1743 2521 l
-1583 2521 l
-1584 2521 m
-1742 2521 l
-1742 2522 l
-1584 2522 l
-1585 2522 m
-1741 2522 l
-1741 2523 l
-1585 2523 l
-1586 2523 m
-1740 2523 l
-1740 2524 l
-1586 2524 l
-1587 2524 m
-1739 2524 l
-1739 2525 l
-1587 2525 l
-1588 2525 m
-1738 2525 l
-1738 2526 l
-1588 2526 l
-1589 2526 m
-1737 2526 l
-1737 2527 l
-1589 2527 l
-1590 2527 m
-1736 2527 l
-1736 2528 l
-1590 2528 l
-1591 2528 m
-1735 2528 l
-1735 2529 l
-1591 2529 l
-1592 2529 m
-1734 2529 l
-1734 2530 l
-1592 2530 l
-1593 2530 m
-1733 2530 l
-1733 2531 l
-1593 2531 l
-1594 2531 m
-1732 2531 l
-1732 2532 l
-1594 2532 l
-1595 2532 m
-1731 2532 l
-1731 2533 l
-1595 2533 l
-1596 2533 m
-1730 2533 l
-1730 2534 l
-1596 2534 l
-1597 2534 m
-1729 2534 l
-1729 2535 l
-1597 2535 l
-1597 2535 m
-1728 2535 l
-1728 2536 l
-1597 2536 l
-1598 2536 m
-1727 2536 l
-1727 2537 l
-1598 2537 l
-1599 2537 m
-1726 2537 l
-1726 2538 l
-1599 2538 l
-1600 2538 m
-1725 2538 l
-1725 2539 l
-1600 2539 l
-1601 2539 m
-1724 2539 l
-1724 2540 l
-1601 2540 l
-1602 2540 m
-1723 2540 l
-1723 2541 l
-1602 2541 l
-1603 2541 m
-1722 2541 l
-1722 2542 l
-1603 2542 l
-1604 2542 m
-1721 2542 l
-1721 2543 l
-1604 2543 l
-1605 2543 m
-1720 2543 l
-1720 2544 l
-1605 2544 l
-1606 2544 m
-1719 2544 l
-1719 2545 l
-1606 2545 l
-1607 2545 m
-1718 2545 l
-1718 2546 l
-1607 2546 l
-1608 2546 m
-1717 2546 l
-1717 2547 l
-1608 2547 l
-1609 2547 m
-1715 2547 l
-1715 2548 l
-1609 2548 l
-1610 2548 m
-1714 2548 l
-1714 2549 l
-1610 2549 l
-1611 2549 m
-1713 2549 l
-1713 2550 l
-1611 2550 l
-1612 2550 m
-1712 2550 l
-1712 2551 l
-1612 2551 l
-1613 2551 m
-1711 2551 l
-1711 2552 l
-1613 2552 l
-1614 2552 m
-1710 2552 l
-1710 2553 l
-1614 2553 l
-1615 2553 m
-1709 2553 l
-1709 2554 l
-1615 2554 l
-1616 2554 m
-1708 2554 l
-1708 2555 l
-1616 2555 l
-1617 2555 m
-1707 2555 l
-1707 2556 l
-1617 2556 l
-1618 2556 m
-1706 2556 l
-1706 2557 l
-1618 2557 l
-1618 2557 m
-1705 2557 l
-1705 2558 l
-1618 2558 l
-1619 2558 m
-1704 2558 l
-1704 2559 l
-1619 2559 l
-1620 2559 m
-1703 2559 l
-1703 2560 l
-1620 2560 l
-1621 2560 m
-1702 2560 l
-1702 2561 l
-1621 2561 l
-1622 2561 m
-1701 2561 l
-1701 2562 l
-1622 2562 l
-1623 2562 m
-1700 2562 l
-1700 2563 l
-1623 2563 l
-1624 2563 m
-1699 2563 l
-1699 2564 l
-1624 2564 l
-1625 2564 m
-1698 2564 l
-1698 2565 l
-1625 2565 l
-1626 2565 m
-1697 2565 l
-1697 2566 l
-1626 2566 l
-1627 2566 m
-1696 2566 l
-1696 2567 l
-1627 2567 l
-1628 2567 m
-1695 2567 l
-1695 2568 l
-1628 2568 l
-1629 2568 m
-1694 2568 l
-1694 2569 l
-1629 2569 l
-1630 2569 m
-1693 2569 l
-1693 2570 l
-1630 2570 l
-1631 2570 m
-1692 2570 l
-1692 2571 l
-1631 2571 l
-1632 2571 m
-1691 2571 l
-1691 2572 l
-1632 2572 l
-1633 2572 m
-1690 2572 l
-1690 2573 l
-1633 2573 l
-1634 2573 m
-1689 2573 l
-1689 2574 l
-1634 2574 l
-1635 2574 m
-1687 2574 l
-1687 2575 l
-1635 2575 l
-1636 2575 m
-1686 2575 l
-1686 2576 l
-1636 2576 l
-1637 2576 m
-1685 2576 l
-1685 2577 l
-1637 2577 l
-1638 2577 m
-1684 2577 l
-1684 2578 l
-1638 2578 l
-1639 2578 m
-1683 2578 l
-1683 2579 l
-1639 2579 l
-1639 2579 m
-1682 2579 l
-1682 2580 l
-1639 2580 l
-1640 2580 m
-1681 2580 l
-1681 2581 l
-1640 2581 l
-1641 2581 m
-1680 2581 l
-1680 2582 l
-1641 2582 l
-1642 2582 m
-1679 2582 l
-1679 2583 l
-1642 2583 l
-1643 2583 m
-1678 2583 l
-1678 2584 l
-1643 2584 l
-1644 2584 m
-1677 2584 l
-1677 2585 l
-1644 2585 l
-1645 2585 m
-1676 2585 l
-1676 2586 l
-1645 2586 l
-1646 2586 m
-1675 2586 l
-1675 2587 l
-1646 2587 l
-1647 2587 m
-1674 2587 l
-1674 2588 l
-1647 2588 l
-1648 2588 m
-1673 2588 l
-1673 2589 l
-1648 2589 l
-1649 2589 m
-1672 2589 l
-1672 2590 l
-1649 2590 l
-1650 2590 m
-1671 2590 l
-1671 2591 l
-1650 2591 l
-1651 2591 m
-1670 2591 l
-1670 2592 l
-1651 2592 l
-1652 2592 m
-1669 2592 l
-1669 2593 l
-1652 2593 l
-1653 2593 m
-1668 2593 l
-1668 2594 l
-1653 2594 l
-1654 2594 m
-1667 2594 l
-1667 2595 l
-1654 2595 l
-1655 2595 m
-1666 2595 l
-1666 2596 l
-1655 2596 l
-1656 2596 m
-1665 2596 l
-1665 2597 l
-1656 2597 l
-1657 2597 m
-1664 2597 l
-1664 2598 l
-1657 2598 l
-1658 2598 m
-1663 2598 l
-1663 2599 l
-1658 2599 l
-1659 2599 m
-1662 2599 l
-1662 2600 l
-1659 2600 l
-Y
-1852.4 2414.5 m
-1768 2327 l
-1576 2512 l
-1660 2600 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1776 2372 m
-1774 2369 l
-1765 2365 l
-1759 2365 l
-1750 2368 l
-1738 2380 l
-1735 2388 l
-1735 2394 l
-1737 2403 l
-1743 2409 l
-1752 2412 l
-1767 2416 l
-1826 2417 l
-1784 2457 l
-S
-1716 2429 m
-1713 2426 l
-1704 2423 l
-1699 2423 l
-1690 2426 l
-1678 2438 l
-1674 2446 l
-1674 2452 l
-1677 2461 l
-1683 2467 l
-1692 2470 l
-1706 2474 l
-1765 2475 l
-1723 2515 l
-S
-1608 2504 m
-1638 2475 l
-1667 2499 l
-1662 2499 l
-1650 2505 l
-1641 2514 l
-1634 2525 l
-1634 2537 l
-1640 2549 l
-1646 2555 l
-1657 2561 l
-1669 2561 l
-1681 2556 l
-1690 2547 l
-1696 2535 l
-1696 2529 l
-1694 2521 l
-S
-1 g
-3771 2313 m
-3774 2313 l
-3774 2314 l
-3771 2314 l
-3770 2314 m
-3776 2314 l
-3776 2315 l
-3770 2315 l
-3769 2315 m
-3777 2315 l
-3777 2316 l
-3769 2316 l
-3769 2316 m
-3778 2316 l
-3778 2317 l
-3769 2317 l
-3768 2317 m
-3779 2317 l
-3779 2318 l
-3768 2318 l
-3767 2318 m
-3781 2318 l
-3781 2319 l
-3767 2319 l
-3766 2319 m
-3782 2319 l
-3782 2320 l
-3766 2320 l
-3766 2320 m
-3783 2320 l
-3783 2321 l
-3766 2321 l
-3765 2321 m
-3785 2321 l
-3785 2322 l
-3765 2322 l
-3764 2322 m
-3786 2322 l
-3786 2323 l
-3764 2323 l
-3763 2323 m
-3787 2323 l
-3787 2324 l
-3763 2324 l
-3763 2324 m
-3789 2324 l
-3789 2325 l
-3763 2325 l
-3762 2325 m
-3790 2325 l
-3790 2326 l
-3762 2326 l
-3761 2326 m
-3791 2326 l
-3791 2327 l
-3761 2327 l
-3760 2327 m
-3792 2327 l
-3792 2328 l
-3760 2328 l
-3760 2328 m
-3794 2328 l
-3794 2329 l
-3760 2329 l
-3759 2329 m
-3795 2329 l
-3795 2330 l
-3759 2330 l
-3758 2330 m
-3796 2330 l
-3796 2331 l
-3758 2331 l
-3757 2331 m
-3798 2331 l
-3798 2332 l
-3757 2332 l
-3756 2332 m
-3799 2332 l
-3799 2333 l
-3756 2333 l
-3756 2333 m
-3800 2333 l
-3800 2334 l
-3756 2334 l
-3755 2334 m
-3801 2334 l
-3801 2335 l
-3755 2335 l
-3754 2335 m
-3803 2335 l
-3803 2336 l
-3754 2336 l
-3753 2336 m
-3804 2336 l
-3804 2337 l
-3753 2337 l
-3753 2337 m
-3805 2337 l
-3805 2338 l
-3753 2338 l
-3752 2338 m
-3807 2338 l
-3807 2339 l
-3752 2339 l
-3751 2339 m
-3808 2339 l
-3808 2340 l
-3751 2340 l
-3750 2340 m
-3809 2340 l
-3809 2341 l
-3750 2341 l
-3750 2341 m
-3811 2341 l
-3811 2342 l
-3750 2342 l
-3749 2342 m
-3812 2342 l
-3812 2343 l
-3749 2343 l
-3748 2343 m
-3813 2343 l
-3813 2344 l
-3748 2344 l
-3747 2344 m
-3814 2344 l
-3814 2345 l
-3747 2345 l
-3747 2345 m
-3816 2345 l
-3816 2346 l
-3747 2346 l
-3746 2346 m
-3817 2346 l
-3817 2347 l
-3746 2347 l
-3745 2347 m
-3818 2347 l
-3818 2348 l
-3745 2348 l
-3744 2348 m
-3820 2348 l
-3820 2349 l
-3744 2349 l
-3744 2349 m
-3821 2349 l
-3821 2350 l
-3744 2350 l
-3743 2350 m
-3822 2350 l
-3822 2351 l
-3743 2351 l
-3742 2351 m
-3824 2351 l
-3824 2352 l
-3742 2352 l
-3741 2352 m
-3825 2352 l
-3825 2353 l
-3741 2353 l
-3740 2353 m
-3826 2353 l
-3826 2354 l
-3740 2354 l
-3740 2354 m
-3827 2354 l
-3827 2355 l
-3740 2355 l
-3739 2355 m
-3829 2355 l
-3829 2356 l
-3739 2356 l
-3738 2356 m
-3830 2356 l
-3830 2357 l
-3738 2357 l
-3737 2357 m
-3831 2357 l
-3831 2358 l
-3737 2358 l
-3737 2358 m
-3833 2358 l
-3833 2359 l
-3737 2359 l
-3736 2359 m
-3834 2359 l
-3834 2360 l
-3736 2360 l
-3735 2360 m
-3835 2360 l
-3835 2361 l
-3735 2361 l
-3734 2361 m
-3837 2361 l
-3837 2362 l
-3734 2362 l
-3734 2362 m
-3838 2362 l
-3838 2363 l
-3734 2363 l
-3733 2363 m
-3839 2363 l
-3839 2364 l
-3733 2364 l
-3732 2364 m
-3840 2364 l
-3840 2365 l
-3732 2365 l
-3731 2365 m
-3842 2365 l
-3842 2366 l
-3731 2366 l
-3731 2366 m
-3843 2366 l
-3843 2367 l
-3731 2367 l
-3730 2367 m
-3844 2367 l
-3844 2368 l
-3730 2368 l
-3729 2368 m
-3846 2368 l
-3846 2369 l
-3729 2369 l
-3728 2369 m
-3847 2369 l
-3847 2370 l
-3728 2370 l
-3727 2370 m
-3848 2370 l
-3848 2371 l
-3727 2371 l
-3727 2371 m
-3850 2371 l
-3850 2372 l
-3727 2372 l
-3726 2372 m
-3851 2372 l
-3851 2373 l
-3726 2373 l
-3725 2373 m
-3852 2373 l
-3852 2374 l
-3725 2374 l
-3724 2374 m
-3853 2374 l
-3853 2375 l
-3724 2375 l
-3724 2375 m
-3855 2375 l
-3855 2376 l
-3724 2376 l
-3723 2376 m
-3856 2376 l
-3856 2377 l
-3723 2377 l
-3722 2377 m
-3857 2377 l
-3857 2378 l
-3722 2378 l
-3721 2378 m
-3859 2378 l
-3859 2379 l
-3721 2379 l
-3721 2379 m
-3860 2379 l
-3860 2380 l
-3721 2380 l
-3720 2380 m
-3861 2380 l
-3861 2381 l
-3720 2381 l
-3719 2381 m
-3862 2381 l
-3862 2382 l
-3719 2382 l
-3718 2382 m
-3864 2382 l
-3864 2383 l
-3718 2383 l
-3718 2383 m
-3865 2383 l
-3865 2384 l
-3718 2384 l
-3717 2384 m
-3866 2384 l
-3866 2385 l
-3717 2385 l
-3716 2385 m
-3868 2385 l
-3868 2386 l
-3716 2386 l
-3715 2386 m
-3869 2386 l
-3869 2387 l
-3715 2387 l
-3715 2387 m
-3870 2387 l
-3870 2388 l
-3715 2388 l
-3714 2388 m
-3872 2388 l
-3872 2389 l
-3714 2389 l
-3713 2389 m
-3873 2389 l
-3873 2390 l
-3713 2390 l
-3712 2390 m
-3874 2390 l
-3874 2391 l
-3712 2391 l
-3711 2391 m
-3875 2391 l
-3875 2392 l
-3711 2392 l
-3711 2392 m
-3877 2392 l
-3877 2393 l
-3711 2393 l
-3710 2393 m
-3878 2393 l
-3878 2394 l
-3710 2394 l
-3709 2394 m
-3879 2394 l
-3879 2395 l
-3709 2395 l
-3708 2395 m
-3881 2395 l
-3881 2396 l
-3708 2396 l
-3708 2396 m
-3882 2396 l
-3882 2397 l
-3708 2397 l
-3707 2397 m
-3883 2397 l
-3883 2398 l
-3707 2398 l
-3706 2398 m
-3885 2398 l
-3885 2399 l
-3706 2399 l
-3705 2399 m
-3886 2399 l
-3886 2400 l
-3705 2400 l
-3705 2400 m
-3887 2400 l
-3887 2401 l
-3705 2401 l
-3704 2401 m
-3888 2401 l
-3888 2402 l
-3704 2402 l
-3703 2402 m
-3890 2402 l
-3890 2403 l
-3703 2403 l
-3702 2403 m
-3891 2403 l
-3891 2404 l
-3702 2404 l
-3702 2404 m
-3892 2404 l
-3892 2405 l
-3702 2405 l
-3701 2405 m
-3894 2405 l
-3894 2406 l
-3701 2406 l
-3700 2406 m
-3895 2406 l
-3895 2407 l
-3700 2407 l
-3699 2407 m
-3896 2407 l
-3896 2408 l
-3699 2408 l
-3699 2408 m
-3898 2408 l
-3898 2409 l
-3699 2409 l
-3699 2409 m
-3899 2409 l
-3899 2410 l
-3699 2410 l
-3700 2410 m
-3900 2410 l
-3900 2411 l
-3700 2411 l
-3701 2411 m
-3901 2411 l
-3901 2412 l
-3701 2412 l
-3702 2412 m
-3903 2412 l
-3903 2413 l
-3702 2413 l
-3704 2413 m
-3904 2413 l
-3904 2414 l
-3704 2414 l
-3705 2414 m
-3905 2414 l
-3905 2415 l
-3705 2415 l
-3706 2415 m
-3907 2415 l
-3907 2416 l
-3706 2416 l
-3708 2416 m
-3908 2416 l
-3908 2417 l
-3708 2417 l
-3709 2417 m
-3909 2417 l
-3909 2418 l
-3709 2418 l
-3710 2418 m
-3911 2418 l
-3911 2419 l
-3710 2419 l
-3712 2419 m
-3912 2419 l
-3912 2420 l
-3712 2420 l
-3713 2420 m
-3913 2420 l
-3913 2421 l
-3713 2421 l
-3714 2421 m
-3914 2421 l
-3914 2422 l
-3714 2422 l
-3715 2422 m
-3916 2422 l
-3916 2423 l
-3715 2423 l
-3717 2423 m
-3917 2423 l
-3917 2424 l
-3717 2424 l
-3718 2424 m
-3918 2424 l
-3918 2425 l
-3718 2425 l
-3719 2425 m
-3920 2425 l
-3920 2426 l
-3719 2426 l
-3721 2426 m
-3921 2426 l
-3921 2427 l
-3721 2427 l
-3722 2427 m
-3922 2427 l
-3922 2428 l
-3722 2428 l
-3723 2428 m
-3923 2428 l
-3923 2429 l
-3723 2429 l
-3725 2429 m
-3925 2429 l
-3925 2430 l
-3725 2430 l
-3726 2430 m
-3926 2430 l
-3926 2431 l
-3726 2431 l
-3727 2431 m
-3927 2431 l
-3927 2432 l
-3727 2432 l
-3728 2432 m
-3929 2432 l
-3929 2433 l
-3728 2433 l
-3730 2433 m
-3930 2433 l
-3930 2434 l
-3730 2434 l
-3731 2434 m
-3931 2434 l
-3931 2435 l
-3731 2435 l
-3732 2435 m
-3933 2435 l
-3933 2436 l
-3732 2436 l
-3734 2436 m
-3934 2436 l
-3934 2437 l
-3734 2437 l
-3735 2437 m
-3935 2437 l
-3935 2438 l
-3735 2438 l
-3736 2438 m
-3936 2438 l
-3936 2439 l
-3736 2439 l
-3738 2439 m
-3938 2439 l
-3938 2440 l
-3738 2440 l
-3739 2440 m
-3939 2440 l
-3939 2441 l
-3739 2441 l
-3740 2441 m
-3940 2441 l
-3940 2442 l
-3740 2442 l
-3741 2442 m
-3942 2442 l
-3942 2443 l
-3741 2443 l
-3743 2443 m
-3943 2443 l
-3943 2444 l
-3743 2444 l
-3744 2444 m
-3944 2444 l
-3944 2445 l
-3744 2445 l
-3745 2445 m
-3946 2445 l
-3946 2446 l
-3745 2446 l
-3747 2446 m
-3947 2446 l
-3947 2447 l
-3747 2447 l
-3748 2447 m
-3948 2447 l
-3948 2448 l
-3748 2448 l
-3749 2448 m
-3949 2448 l
-3949 2449 l
-3749 2449 l
-3751 2449 m
-3951 2449 l
-3951 2450 l
-3751 2450 l
-3752 2450 m
-3952 2450 l
-3952 2451 l
-3752 2451 l
-3753 2451 m
-3953 2451 l
-3953 2452 l
-3753 2452 l
-3754 2452 m
-3955 2452 l
-3955 2453 l
-3754 2453 l
-3756 2453 m
-3956 2453 l
-3956 2454 l
-3756 2454 l
-3757 2454 m
-3957 2454 l
-3957 2455 l
-3757 2455 l
-3758 2455 m
-3959 2455 l
-3959 2456 l
-3758 2456 l
-3760 2456 m
-3960 2456 l
-3960 2457 l
-3760 2457 l
-3761 2457 m
-3961 2457 l
-3961 2458 l
-3761 2458 l
-3762 2458 m
-3962 2458 l
-3962 2459 l
-3762 2459 l
-3764 2459 m
-3964 2459 l
-3964 2460 l
-3764 2460 l
-3765 2460 m
-3965 2460 l
-3965 2461 l
-3765 2461 l
-3766 2461 m
-3966 2461 l
-3966 2462 l
-3766 2462 l
-3767 2462 m
-3968 2462 l
-3968 2463 l
-3767 2463 l
-3769 2463 m
-3969 2463 l
-3969 2464 l
-3769 2464 l
-3770 2464 m
-3970 2464 l
-3970 2465 l
-3770 2465 l
-3771 2465 m
-3972 2465 l
-3972 2466 l
-3771 2466 l
-3773 2466 m
-3973 2466 l
-3973 2467 l
-3773 2467 l
-3774 2467 m
-3974 2467 l
-3974 2468 l
-3774 2468 l
-3775 2468 m
-3975 2468 l
-3975 2469 l
-3775 2469 l
-3777 2469 m
-3977 2469 l
-3977 2470 l
-3777 2470 l
-3778 2470 m
-3978 2470 l
-3978 2471 l
-3778 2471 l
-3779 2471 m
-3979 2471 l
-3979 2472 l
-3779 2472 l
-3780 2472 m
-3981 2472 l
-3981 2473 l
-3780 2473 l
-3782 2473 m
-3982 2473 l
-3982 2474 l
-3782 2474 l
-3783 2474 m
-3983 2474 l
-3983 2475 l
-3783 2475 l
-3784 2475 m
-3984 2475 l
-3984 2476 l
-3784 2476 l
-3786 2476 m
-3984 2476 l
-3984 2477 l
-3786 2477 l
-3787 2477 m
-3984 2477 l
-3984 2478 l
-3787 2478 l
-3788 2478 m
-3983 2478 l
-3983 2479 l
-3788 2479 l
-3790 2479 m
-3982 2479 l
-3982 2480 l
-3790 2480 l
-3791 2480 m
-3981 2480 l
-3981 2481 l
-3791 2481 l
-3792 2481 m
-3981 2481 l
-3981 2482 l
-3792 2482 l
-3793 2482 m
-3980 2482 l
-3980 2483 l
-3793 2483 l
-3795 2483 m
-3979 2483 l
-3979 2484 l
-3795 2484 l
-3796 2484 m
-3978 2484 l
-3978 2485 l
-3796 2485 l
-3797 2485 m
-3978 2485 l
-3978 2486 l
-3797 2486 l
-3799 2486 m
-3977 2486 l
-3977 2487 l
-3799 2487 l
-3800 2487 m
-3976 2487 l
-3976 2488 l
-3800 2488 l
-3801 2488 m
-3975 2488 l
-3975 2489 l
-3801 2489 l
-3803 2489 m
-3975 2489 l
-3975 2490 l
-3803 2490 l
-3804 2490 m
-3974 2490 l
-3974 2491 l
-3804 2491 l
-3805 2491 m
-3973 2491 l
-3973 2492 l
-3805 2492 l
-3806 2492 m
-3972 2492 l
-3972 2493 l
-3806 2493 l
-3808 2493 m
-3972 2493 l
-3972 2494 l
-3808 2494 l
-3809 2494 m
-3971 2494 l
-3971 2495 l
-3809 2495 l
-3810 2495 m
-3970 2495 l
-3970 2496 l
-3810 2496 l
-3812 2496 m
-3969 2496 l
-3969 2497 l
-3812 2497 l
-3813 2497 m
-3969 2497 l
-3969 2498 l
-3813 2498 l
-3814 2498 m
-3968 2498 l
-3968 2499 l
-3814 2499 l
-3816 2499 m
-3967 2499 l
-3967 2500 l
-3816 2500 l
-3817 2500 m
-3966 2500 l
-3966 2501 l
-3817 2501 l
-3818 2501 m
-3965 2501 l
-3965 2502 l
-3818 2502 l
-3819 2502 m
-3965 2502 l
-3965 2503 l
-3819 2503 l
-3821 2503 m
-3964 2503 l
-3964 2504 l
-3821 2504 l
-3822 2504 m
-3963 2504 l
-3963 2505 l
-3822 2505 l
-3823 2505 m
-3962 2505 l
-3962 2506 l
-3823 2506 l
-3825 2506 m
-3962 2506 l
-3962 2507 l
-3825 2507 l
-3826 2507 m
-3961 2507 l
-3961 2508 l
-3826 2508 l
-3827 2508 m
-3960 2508 l
-3960 2509 l
-3827 2509 l
-3829 2509 m
-3959 2509 l
-3959 2510 l
-3829 2510 l
-3830 2510 m
-3959 2510 l
-3959 2511 l
-3830 2511 l
-3831 2511 m
-3958 2511 l
-3958 2512 l
-3831 2512 l
-3832 2512 m
-3957 2512 l
-3957 2513 l
-3832 2513 l
-3834 2513 m
-3956 2513 l
-3956 2514 l
-3834 2514 l
-3835 2514 m
-3956 2514 l
-3956 2515 l
-3835 2515 l
-3836 2515 m
-3955 2515 l
-3955 2516 l
-3836 2516 l
-3838 2516 m
-3954 2516 l
-3954 2517 l
-3838 2517 l
-3839 2517 m
-3953 2517 l
-3953 2518 l
-3839 2518 l
-3840 2518 m
-3953 2518 l
-3953 2519 l
-3840 2519 l
-3842 2519 m
-3952 2519 l
-3952 2520 l
-3842 2520 l
-3843 2520 m
-3951 2520 l
-3951 2521 l
-3843 2521 l
-3844 2521 m
-3950 2521 l
-3950 2522 l
-3844 2522 l
-3845 2522 m
-3950 2522 l
-3950 2523 l
-3845 2523 l
-3847 2523 m
-3949 2523 l
-3949 2524 l
-3847 2524 l
-3848 2524 m
-3948 2524 l
-3948 2525 l
-3848 2525 l
-3849 2525 m
-3947 2525 l
-3947 2526 l
-3849 2526 l
-3851 2526 m
-3946 2526 l
-3946 2527 l
-3851 2527 l
-3852 2527 m
-3946 2527 l
-3946 2528 l
-3852 2528 l
-3853 2528 m
-3945 2528 l
-3945 2529 l
-3853 2529 l
-3855 2529 m
-3944 2529 l
-3944 2530 l
-3855 2530 l
-3856 2530 m
-3943 2530 l
-3943 2531 l
-3856 2531 l
-3857 2531 m
-3943 2531 l
-3943 2532 l
-3857 2532 l
-3858 2532 m
-3942 2532 l
-3942 2533 l
-3858 2533 l
-3860 2533 m
-3941 2533 l
-3941 2534 l
-3860 2534 l
-3861 2534 m
-3940 2534 l
-3940 2535 l
-3861 2535 l
-3862 2535 m
-3940 2535 l
-3940 2536 l
-3862 2536 l
-3864 2536 m
-3939 2536 l
-3939 2537 l
-3864 2537 l
-3865 2537 m
-3938 2537 l
-3938 2538 l
-3865 2538 l
-3866 2538 m
-3937 2538 l
-3937 2539 l
-3866 2539 l
-3868 2539 m
-3937 2539 l
-3937 2540 l
-3868 2540 l
-3869 2540 m
-3936 2540 l
-3936 2541 l
-3869 2541 l
-3870 2541 m
-3935 2541 l
-3935 2542 l
-3870 2542 l
-3871 2542 m
-3934 2542 l
-3934 2543 l
-3871 2543 l
-3873 2543 m
-3934 2543 l
-3934 2544 l
-3873 2544 l
-3874 2544 m
-3933 2544 l
-3933 2545 l
-3874 2545 l
-3875 2545 m
-3932 2545 l
-3932 2546 l
-3875 2546 l
-3877 2546 m
-3931 2546 l
-3931 2547 l
-3877 2547 l
-3878 2547 m
-3931 2547 l
-3931 2548 l
-3878 2548 l
-3879 2548 m
-3930 2548 l
-3930 2549 l
-3879 2549 l
-3881 2549 m
-3929 2549 l
-3929 2550 l
-3881 2550 l
-3882 2550 m
-3928 2550 l
-3928 2551 l
-3882 2551 l
-3883 2551 m
-3927 2551 l
-3927 2552 l
-3883 2552 l
-3884 2552 m
-3927 2552 l
-3927 2553 l
-3884 2553 l
-3886 2553 m
-3926 2553 l
-3926 2554 l
-3886 2554 l
-3887 2554 m
-3925 2554 l
-3925 2555 l
-3887 2555 l
-3888 2555 m
-3924 2555 l
-3924 2556 l
-3888 2556 l
-3890 2556 m
-3924 2556 l
-3924 2557 l
-3890 2557 l
-3891 2557 m
-3923 2557 l
-3923 2558 l
-3891 2558 l
-3892 2558 m
-3922 2558 l
-3922 2559 l
-3892 2559 l
-3894 2559 m
-3921 2559 l
-3921 2560 l
-3894 2560 l
-3895 2560 m
-3921 2560 l
-3921 2561 l
-3895 2561 l
-3896 2561 m
-3920 2561 l
-3920 2562 l
-3896 2562 l
-3897 2562 m
-3919 2562 l
-3919 2563 l
-3897 2563 l
-3899 2563 m
-3918 2563 l
-3918 2564 l
-3899 2564 l
-3900 2564 m
-3918 2564 l
-3918 2565 l
-3900 2565 l
-3901 2565 m
-3917 2565 l
-3917 2566 l
-3901 2566 l
-3903 2566 m
-3916 2566 l
-3916 2567 l
-3903 2567 l
-3904 2567 m
-3915 2567 l
-3915 2568 l
-3904 2568 l
-3905 2568 m
-3915 2568 l
-3915 2569 l
-3905 2569 l
-3907 2569 m
-3914 2569 l
-3914 2570 l
-3907 2570 l
-3908 2570 m
-3913 2570 l
-3913 2571 l
-3908 2571 l
-3909 2571 m
-3912 2571 l
-3912 2572 l
-3909 2572 l
-Y
-3772.3 2312.9 m
-3699 2409 l
-3911 2572 l
-3984 2476 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3741 2394 m
-3739 2398 l
-3737 2407 l
-3738 2413 l
-3742 2421 l
-3755 2431 l
-3764 2433 l
-3770 2432 l
-3779 2428 l
-3784 2422 l
-3785 2412 l
-3786 2397 l
-3779 2339 l
-3825 2374 l
-S
-3838 2495 m
-3858 2400 l
-S
-3792 2459 m
-3838 2495 l
-S
-3878 2525 m
-3870 2514 l
-3871 2499 l
-3881 2480 l
-3888 2470 l
-3905 2456 l
-3919 2451 l
-3931 2456 l
-3938 2461 l
-3945 2472 l
-3944 2487 l
-3935 2506 l
-3927 2516 l
-3911 2530 l
-3897 2535 l
-3885 2530 l
-3878 2525 l
-S
-1 g
-4405 3855 m
-4409 3855 l
-4409 3856 l
-4405 3856 l
-4405 3856 m
-4412 3856 l
-4412 3857 l
-4405 3857 l
-4404 3857 m
-4415 3857 l
-4415 3858 l
-4404 3858 l
-4404 3858 m
-4418 3858 l
-4418 3859 l
-4404 3859 l
-4404 3859 m
-4421 3859 l
-4421 3860 l
-4404 3860 l
-4403 3860 m
-4424 3860 l
-4424 3861 l
-4403 3861 l
-4403 3861 m
-4427 3861 l
-4427 3862 l
-4403 3862 l
-4403 3862 m
-4429 3862 l
-4429 3863 l
-4403 3863 l
-4402 3863 m
-4432 3863 l
-4432 3864 l
-4402 3864 l
-4402 3864 m
-4435 3864 l
-4435 3865 l
-4402 3865 l
-4402 3865 m
-4438 3865 l
-4438 3866 l
-4402 3866 l
-4401 3866 m
-4441 3866 l
-4441 3867 l
-4401 3867 l
-4401 3867 m
-4444 3867 l
-4444 3868 l
-4401 3868 l
-4401 3868 m
-4447 3868 l
-4447 3869 l
-4401 3869 l
-4400 3869 m
-4449 3869 l
-4449 3870 l
-4400 3870 l
-4400 3870 m
-4452 3870 l
-4452 3871 l
-4400 3871 l
-4399 3871 m
-4455 3871 l
-4455 3872 l
-4399 3872 l
-4399 3872 m
-4458 3872 l
-4458 3873 l
-4399 3873 l
-4399 3873 m
-4461 3873 l
-4461 3874 l
-4399 3874 l
-4398 3874 m
-4464 3874 l
-4464 3875 l
-4398 3875 l
-4398 3875 m
-4467 3875 l
-4467 3876 l
-4398 3876 l
-4398 3876 m
-4469 3876 l
-4469 3877 l
-4398 3877 l
-4397 3877 m
-4472 3877 l
-4472 3878 l
-4397 3878 l
-4397 3878 m
-4475 3878 l
-4475 3879 l
-4397 3879 l
-4397 3879 m
-4478 3879 l
-4478 3880 l
-4397 3880 l
-4396 3880 m
-4481 3880 l
-4481 3881 l
-4396 3881 l
-4396 3881 m
-4484 3881 l
-4484 3882 l
-4396 3882 l
-4396 3882 m
-4487 3882 l
-4487 3883 l
-4396 3883 l
-4395 3883 m
-4489 3883 l
-4489 3884 l
-4395 3884 l
-4395 3884 m
-4492 3884 l
-4492 3885 l
-4395 3885 l
-4395 3885 m
-4495 3885 l
-4495 3886 l
-4395 3886 l
-4394 3886 m
-4498 3886 l
-4498 3887 l
-4394 3887 l
-4394 3887 m
-4501 3887 l
-4501 3888 l
-4394 3888 l
-4393 3888 m
-4504 3888 l
-4504 3889 l
-4393 3889 l
-4393 3889 m
-4507 3889 l
-4507 3890 l
-4393 3890 l
-4393 3890 m
-4509 3890 l
-4509 3891 l
-4393 3891 l
-4392 3891 m
-4512 3891 l
-4512 3892 l
-4392 3892 l
-4392 3892 m
-4515 3892 l
-4515 3893 l
-4392 3893 l
-4392 3893 m
-4518 3893 l
-4518 3894 l
-4392 3894 l
-4391 3894 m
-4521 3894 l
-4521 3895 l
-4391 3895 l
-4391 3895 m
-4521 3895 l
-4521 3897 l
-4391 3897 l
-4390 3897 m
-4520 3897 l
-4520 3899 l
-4390 3899 l
-4390 3899 m
-4519 3899 l
-4519 3900 l
-4390 3900 l
-4389 3900 m
-4519 3900 l
-4519 3902 l
-4389 3902 l
-4389 3902 m
-4518 3902 l
-4518 3903 l
-4389 3903 l
-4388 3903 m
-4518 3903 l
-4518 3905 l
-4388 3905 l
-4387 3905 m
-4517 3905 l
-4517 3908 l
-4387 3908 l
-4386 3908 m
-4516 3908 l
-4516 3911 l
-4386 3911 l
-4385 3911 m
-4515 3911 l
-4515 3914 l
-4385 3914 l
-4384 3914 m
-4514 3914 l
-4514 3917 l
-4384 3917 l
-4383 3917 m
-4513 3917 l
-4513 3919 l
-4383 3919 l
-4383 3919 m
-4512 3919 l
-4512 3920 l
-4383 3920 l
-4382 3920 m
-4512 3920 l
-4512 3922 l
-4382 3922 l
-4381 3922 m
-4511 3922 l
-4511 3925 l
-4381 3925 l
-4380 3925 m
-4510 3925 l
-4510 3928 l
-4380 3928 l
-4379 3928 m
-4509 3928 l
-4509 3931 l
-4379 3931 l
-4378 3931 m
-4508 3931 l
-4508 3934 l
-4378 3934 l
-4377 3934 m
-4507 3934 l
-4507 3937 l
-4377 3937 l
-4376 3937 m
-4506 3937 l
-4506 3939 l
-4376 3939 l
-4375 3939 m
-4505 3939 l
-4505 3942 l
-4375 3942 l
-4374 3942 m
-4504 3942 l
-4504 3945 l
-4374 3945 l
-4373 3945 m
-4503 3945 l
-4503 3948 l
-4373 3948 l
-4372 3948 m
-4502 3948 l
-4502 3951 l
-4372 3951 l
-4371 3951 m
-4501 3951 l
-4501 3954 l
-4371 3954 l
-4370 3954 m
-4500 3954 l
-4500 3956 l
-4370 3956 l
-4369 3956 m
-4500 3956 l
-4500 3957 l
-4369 3957 l
-4369 3957 m
-4499 3957 l
-4499 3959 l
-4369 3959 l
-4368 3959 m
-4498 3959 l
-4498 3962 l
-4368 3962 l
-4367 3962 m
-4497 3962 l
-4497 3965 l
-4367 3965 l
-4366 3965 m
-4496 3965 l
-4496 3968 l
-4366 3968 l
-4365 3968 m
-4495 3968 l
-4495 3971 l
-4365 3971 l
-4364 3971 m
-4494 3971 l
-4494 3973 l
-4364 3973 l
-4363 3973 m
-4494 3973 l
-4494 3974 l
-4363 3974 l
-4363 3974 m
-4493 3974 l
-4493 3976 l
-4363 3976 l
-4362 3976 m
-4492 3976 l
-4492 3979 l
-4362 3979 l
-4361 3979 m
-4491 3979 l
-4491 3982 l
-4361 3982 l
-4360 3982 m
-4490 3982 l
-4490 3985 l
-4360 3985 l
-4359 3985 m
-4489 3985 l
-4489 3988 l
-4359 3988 l
-4358 3988 m
-4488 3988 l
-4488 3990 l
-4358 3990 l
-4357 3990 m
-4488 3990 l
-4488 3991 l
-4357 3991 l
-4357 3991 m
-4487 3991 l
-4487 3993 l
-4357 3993 l
-4356 3993 m
-4487 3993 l
-4487 3994 l
-4356 3994 l
-4356 3994 m
-4486 3994 l
-4486 3996 l
-4356 3996 l
-4355 3996 m
-4485 3996 l
-4485 3999 l
-4355 3999 l
-4354 3999 m
-4484 3999 l
-4484 4002 l
-4354 4002 l
-4353 4002 m
-4483 4002 l
-4483 4005 l
-4353 4005 l
-4352 4005 m
-4482 4005 l
-4482 4007 l
-4352 4007 l
-4351 4007 m
-4482 4007 l
-4482 4008 l
-4351 4008 l
-4351 4008 m
-4481 4008 l
-4481 4010 l
-4351 4010 l
-4350 4010 m
-4481 4010 l
-4481 4011 l
-4350 4011 l
-4350 4011 m
-4480 4011 l
-4480 4013 l
-4350 4013 l
-4349 4013 m
-4480 4013 l
-4480 4014 l
-4349 4014 l
-4349 4014 m
-4479 4014 l
-4479 4016 l
-4349 4016 l
-4348 4016 m
-4478 4016 l
-4478 4019 l
-4348 4019 l
-4347 4019 m
-4477 4019 l
-4477 4022 l
-4347 4022 l
-4346 4022 m
-4476 4022 l
-4476 4024 l
-4346 4024 l
-4345 4024 m
-4476 4024 l
-4476 4025 l
-4345 4025 l
-4345 4025 m
-4475 4025 l
-4475 4027 l
-4345 4027 l
-4344 4027 m
-4475 4027 l
-4475 4028 l
-4344 4028 l
-4344 4028 m
-4474 4028 l
-4474 4030 l
-4344 4030 l
-4343 4030 m
-4474 4030 l
-4474 4031 l
-4343 4031 l
-4343 4031 m
-4473 4031 l
-4473 4033 l
-4343 4033 l
-4342 4033 m
-4472 4033 l
-4472 4036 l
-4342 4036 l
-4341 4036 m
-4471 4036 l
-4471 4039 l
-4341 4039 l
-4340 4039 m
-4470 4039 l
-4470 4041 l
-4340 4041 l
-4339 4041 m
-4470 4041 l
-4470 4042 l
-4339 4042 l
-4339 4042 m
-4469 4042 l
-4469 4044 l
-4339 4044 l
-4338 4044 m
-4469 4044 l
-4469 4045 l
-4338 4045 l
-4338 4045 m
-4468 4045 l
-4468 4047 l
-4338 4047 l
-4337 4047 m
-4468 4047 l
-4468 4048 l
-4337 4048 l
-4337 4048 m
-4467 4048 l
-4467 4050 l
-4337 4050 l
-4336 4050 m
-4467 4050 l
-4467 4051 l
-4336 4051 l
-4336 4051 m
-4466 4051 l
-4466 4053 l
-4336 4053 l
-4335 4053 m
-4465 4053 l
-4465 4056 l
-4335 4056 l
-4334 4056 m
-4464 4056 l
-4464 4058 l
-4334 4058 l
-4333 4058 m
-4464 4058 l
-4464 4059 l
-4333 4059 l
-4333 4059 m
-4463 4059 l
-4463 4061 l
-4333 4061 l
-4332 4061 m
-4463 4061 l
-4463 4062 l
-4332 4062 l
-4332 4062 m
-4462 4062 l
-4462 4064 l
-4332 4064 l
-4331 4064 m
-4462 4064 l
-4462 4065 l
-4331 4065 l
-4331 4065 m
-4461 4065 l
-4461 4067 l
-4331 4067 l
-4330 4067 m
-4461 4067 l
-4461 4068 l
-4330 4068 l
-4330 4068 m
-4460 4068 l
-4460 4070 l
-4330 4070 l
-4329 4070 m
-4460 4070 l
-4460 4071 l
-4329 4071 l
-4329 4071 m
-4459 4071 l
-4459 4073 l
-4329 4073 l
-4328 4073 m
-4458 4073 l
-4458 4075 l
-4328 4075 l
-4327 4075 m
-4458 4075 l
-4458 4076 l
-4327 4076 l
-4327 4076 m
-4457 4076 l
-4457 4078 l
-4327 4078 l
-4326 4078 m
-4457 4078 l
-4457 4079 l
-4326 4079 l
-4326 4079 m
-4456 4079 l
-4456 4081 l
-4326 4081 l
-4325 4081 m
-4456 4081 l
-4456 4082 l
-4325 4082 l
-4325 4082 m
-4455 4082 l
-4455 4084 l
-4325 4084 l
-4324 4084 m
-4455 4084 l
-4455 4085 l
-4324 4085 l
-4324 4085 m
-4454 4085 l
-4454 4087 l
-4324 4087 l
-4323 4087 m
-4454 4087 l
-4454 4088 l
-4323 4088 l
-4323 4088 m
-4453 4088 l
-4453 4090 l
-4323 4090 l
-4322 4090 m
-4452 4090 l
-4452 4092 l
-4322 4092 l
-4321 4092 m
-4452 4092 l
-4452 4093 l
-4321 4093 l
-4321 4093 m
-4451 4093 l
-4451 4095 l
-4321 4095 l
-4320 4095 m
-4451 4095 l
-4451 4096 l
-4320 4096 l
-4320 4096 m
-4450 4096 l
-4450 4098 l
-4320 4098 l
-4319 4098 m
-4450 4098 l
-4450 4099 l
-4319 4099 l
-4319 4099 m
-4449 4099 l
-4449 4101 l
-4319 4101 l
-4318 4101 m
-4449 4101 l
-4449 4102 l
-4318 4102 l
-4318 4102 m
-4448 4102 l
-4448 4104 l
-4318 4104 l
-4317 4104 m
-4448 4104 l
-4448 4105 l
-4317 4105 l
-4317 4105 m
-4447 4105 l
-4447 4107 l
-4317 4107 l
-4317 4107 m
-4447 4107 l
-4447 4108 l
-4317 4108 l
-4319 4108 m
-4446 4108 l
-4446 4109 l
-4319 4109 l
-4322 4109 m
-4446 4109 l
-4446 4110 l
-4322 4110 l
-4325 4110 m
-4445 4110 l
-4445 4111 l
-4325 4111 l
-4328 4111 m
-4445 4111 l
-4445 4112 l
-4328 4112 l
-4331 4112 m
-4445 4112 l
-4445 4113 l
-4331 4113 l
-4334 4113 m
-4444 4113 l
-4444 4114 l
-4334 4114 l
-4337 4114 m
-4444 4114 l
-4444 4115 l
-4337 4115 l
-4340 4115 m
-4444 4115 l
-4444 4116 l
-4340 4116 l
-4342 4116 m
-4443 4116 l
-4443 4117 l
-4342 4117 l
-4345 4117 m
-4443 4117 l
-4443 4118 l
-4345 4118 l
-4348 4118 m
-4443 4118 l
-4443 4119 l
-4348 4119 l
-4351 4119 m
-4442 4119 l
-4442 4120 l
-4351 4120 l
-4354 4120 m
-4442 4120 l
-4442 4121 l
-4354 4121 l
-4357 4121 m
-4442 4121 l
-4442 4122 l
-4357 4122 l
-4360 4122 m
-4441 4122 l
-4441 4123 l
-4360 4123 l
-4363 4123 m
-4441 4123 l
-4441 4124 l
-4363 4124 l
-4365 4124 m
-4441 4124 l
-4441 4125 l
-4365 4125 l
-4368 4125 m
-4440 4125 l
-4440 4126 l
-4368 4126 l
-4371 4126 m
-4440 4126 l
-4440 4127 l
-4371 4127 l
-4374 4127 m
-4440 4127 l
-4440 4128 l
-4374 4128 l
-4377 4128 m
-4439 4128 l
-4439 4129 l
-4377 4129 l
-4380 4129 m
-4439 4129 l
-4439 4130 l
-4380 4130 l
-4383 4130 m
-4438 4130 l
-4438 4131 l
-4383 4131 l
-4386 4131 m
-4438 4131 l
-4438 4132 l
-4386 4132 l
-4388 4132 m
-4438 4132 l
-4438 4133 l
-4388 4133 l
-4391 4133 m
-4437 4133 l
-4437 4134 l
-4391 4134 l
-4394 4134 m
-4437 4134 l
-4437 4135 l
-4394 4135 l
-4397 4135 m
-4437 4135 l
-4437 4136 l
-4397 4136 l
-4400 4136 m
-4436 4136 l
-4436 4137 l
-4400 4137 l
-4403 4137 m
-4436 4137 l
-4436 4138 l
-4403 4138 l
-4406 4138 m
-4436 4138 l
-4436 4139 l
-4406 4139 l
-4409 4139 m
-4435 4139 l
-4435 4140 l
-4409 4140 l
-4411 4140 m
-4435 4140 l
-4435 4141 l
-4411 4141 l
-4414 4141 m
-4435 4141 l
-4435 4142 l
-4414 4142 l
-4417 4142 m
-4434 4142 l
-4434 4143 l
-4417 4143 l
-4420 4143 m
-4434 4143 l
-4434 4144 l
-4420 4144 l
-4423 4144 m
-4434 4144 l
-4434 4145 l
-4423 4145 l
-4426 4145 m
-4433 4145 l
-4433 4146 l
-4426 4146 l
-4429 4146 m
-4433 4146 l
-4433 4147 l
-4429 4147 l
-Y
-4520.4 3895 m
-4406 3855 l
-4317 4107 l
-4432 4147 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4412 3888 m
-4397 3931 l
-4437 3919 l
-4433 3930 l
-4434 3940 l
-4436 3945 l
-4447 3953 l
-4455 3956 l
-4468 3956 l
-4478 3951 l
-4487 3941 l
-4491 3929 l
-4491 3916 l
-4488 3910 l
-4482 3904 l
-S
-4399 3976 m
-4392 3983 l
-4376 3990 l
-4459 4019 l
-S
-4343 4085 m
-4357 4045 l
-4393 4054 l
-4388 4057 l
-4380 4067 l
-4376 4079 l
-4376 4092 l
-4381 4103 l
-4391 4111 l
-4399 4113 l
-4412 4114 l
-4423 4109 l
-4431 4098 l
-4435 4086 l
-4435 4073 l
-4433 4068 l
-4426 4061 l
-S
-1 g
-2971 2971 m
-2974 2971 l
-2974 2972 l
-2971 2972 l
-2970 2972 m
-2976 2972 l
-2976 2973 l
-2970 2973 l
-2970 2973 m
-2978 2973 l
-2978 2974 l
-2970 2974 l
-2969 2974 m
-2980 2974 l
-2980 2975 l
-2969 2975 l
-2969 2975 m
-2982 2975 l
-2982 2976 l
-2969 2976 l
-2968 2976 m
-2984 2976 l
-2984 2977 l
-2968 2977 l
-2968 2977 m
-2985 2977 l
-2985 2978 l
-2968 2978 l
-2967 2978 m
-2987 2978 l
-2987 2979 l
-2967 2979 l
-2966 2979 m
-2989 2979 l
-2989 2980 l
-2966 2980 l
-2966 2980 m
-2991 2980 l
-2991 2981 l
-2966 2981 l
-2965 2981 m
-2993 2981 l
-2993 2982 l
-2965 2982 l
-2965 2982 m
-2994 2982 l
-2994 2983 l
-2965 2983 l
-2964 2983 m
-2996 2983 l
-2996 2984 l
-2964 2984 l
-2964 2984 m
-2998 2984 l
-2998 2985 l
-2964 2985 l
-2963 2985 m
-3000 2985 l
-3000 2986 l
-2963 2986 l
-2963 2986 m
-3002 2986 l
-3002 2987 l
-2963 2987 l
-2962 2987 m
-3003 2987 l
-3003 2988 l
-2962 2988 l
-2961 2988 m
-3005 2988 l
-3005 2989 l
-2961 2989 l
-2961 2989 m
-3007 2989 l
-3007 2990 l
-2961 2990 l
-2960 2990 m
-3009 2990 l
-3009 2991 l
-2960 2991 l
-2960 2991 m
-3011 2991 l
-3011 2992 l
-2960 2992 l
-2959 2992 m
-3013 2992 l
-3013 2993 l
-2959 2993 l
-2959 2993 m
-3014 2993 l
-3014 2994 l
-2959 2994 l
-2958 2994 m
-3016 2994 l
-3016 2995 l
-2958 2995 l
-2958 2995 m
-3018 2995 l
-3018 2996 l
-2958 2996 l
-2957 2996 m
-3020 2996 l
-3020 2997 l
-2957 2997 l
-2956 2997 m
-3022 2997 l
-3022 2998 l
-2956 2998 l
-2956 2998 m
-3023 2998 l
-3023 2999 l
-2956 2999 l
-2955 2999 m
-3025 2999 l
-3025 3000 l
-2955 3000 l
-2955 3000 m
-3027 3000 l
-3027 3001 l
-2955 3001 l
-2954 3001 m
-3029 3001 l
-3029 3002 l
-2954 3002 l
-2954 3002 m
-3031 3002 l
-3031 3003 l
-2954 3003 l
-2953 3003 m
-3032 3003 l
-3032 3004 l
-2953 3004 l
-2953 3004 m
-3034 3004 l
-3034 3005 l
-2953 3005 l
-2952 3005 m
-3036 3005 l
-3036 3006 l
-2952 3006 l
-2951 3006 m
-3038 3006 l
-3038 3007 l
-2951 3007 l
-2951 3007 m
-3040 3007 l
-3040 3008 l
-2951 3008 l
-2950 3008 m
-3042 3008 l
-3042 3009 l
-2950 3009 l
-2950 3009 m
-3043 3009 l
-3043 3010 l
-2950 3010 l
-2949 3010 m
-3045 3010 l
-3045 3011 l
-2949 3011 l
-2949 3011 m
-3047 3011 l
-3047 3012 l
-2949 3012 l
-2948 3012 m
-3049 3012 l
-3049 3013 l
-2948 3013 l
-2948 3013 m
-3051 3013 l
-3051 3014 l
-2948 3014 l
-2947 3014 m
-3052 3014 l
-3052 3015 l
-2947 3015 l
-2946 3015 m
-3054 3015 l
-3054 3016 l
-2946 3016 l
-2946 3016 m
-3056 3016 l
-3056 3017 l
-2946 3017 l
-2945 3017 m
-3058 3017 l
-3058 3018 l
-2945 3018 l
-2945 3018 m
-3060 3018 l
-3060 3019 l
-2945 3019 l
-2944 3019 m
-3061 3019 l
-3061 3020 l
-2944 3020 l
-2944 3020 m
-3063 3020 l
-3063 3021 l
-2944 3021 l
-2943 3021 m
-3065 3021 l
-3065 3022 l
-2943 3022 l
-2943 3022 m
-3067 3022 l
-3067 3023 l
-2943 3023 l
-2942 3023 m
-3069 3023 l
-3069 3024 l
-2942 3024 l
-2941 3024 m
-3071 3024 l
-3071 3025 l
-2941 3025 l
-2941 3025 m
-3072 3025 l
-3072 3026 l
-2941 3026 l
-2940 3026 m
-3074 3026 l
-3074 3027 l
-2940 3027 l
-2940 3027 m
-3076 3027 l
-3076 3028 l
-2940 3028 l
-2939 3028 m
-3078 3028 l
-3078 3029 l
-2939 3029 l
-2939 3029 m
-3080 3029 l
-3080 3030 l
-2939 3030 l
-2938 3030 m
-3081 3030 l
-3081 3031 l
-2938 3031 l
-2938 3031 m
-3083 3031 l
-3083 3032 l
-2938 3032 l
-2937 3032 m
-3085 3032 l
-3085 3033 l
-2937 3033 l
-2936 3033 m
-3087 3033 l
-3087 3034 l
-2936 3034 l
-2936 3034 m
-3089 3034 l
-3089 3035 l
-2936 3035 l
-2935 3035 m
-3090 3035 l
-3090 3036 l
-2935 3036 l
-2935 3036 m
-3092 3036 l
-3092 3037 l
-2935 3037 l
-2934 3037 m
-3094 3037 l
-3094 3038 l
-2934 3038 l
-2934 3038 m
-3096 3038 l
-3096 3039 l
-2934 3039 l
-2933 3039 m
-3098 3039 l
-3098 3040 l
-2933 3040 l
-2933 3040 m
-3099 3040 l
-3099 3041 l
-2933 3041 l
-2932 3041 m
-3101 3041 l
-3101 3042 l
-2932 3042 l
-2931 3042 m
-3103 3042 l
-3103 3043 l
-2931 3043 l
-2931 3043 m
-3105 3043 l
-3105 3044 l
-2931 3044 l
-2930 3044 m
-3107 3044 l
-3107 3045 l
-2930 3045 l
-2930 3045 m
-3109 3045 l
-3109 3046 l
-2930 3046 l
-2929 3046 m
-3110 3046 l
-3110 3047 l
-2929 3047 l
-2929 3047 m
-3112 3047 l
-3112 3048 l
-2929 3048 l
-2928 3048 m
-3114 3048 l
-3114 3049 l
-2928 3049 l
-2928 3049 m
-3116 3049 l
-3116 3050 l
-2928 3050 l
-2927 3050 m
-3118 3050 l
-3118 3051 l
-2927 3051 l
-2926 3051 m
-3119 3051 l
-3119 3052 l
-2926 3052 l
-2926 3052 m
-3121 3052 l
-3121 3053 l
-2926 3053 l
-2925 3053 m
-3123 3053 l
-3123 3054 l
-2925 3054 l
-2925 3054 m
-3125 3054 l
-3125 3055 l
-2925 3055 l
-2924 3055 m
-3127 3055 l
-3127 3056 l
-2924 3056 l
-2924 3056 m
-3128 3056 l
-3128 3057 l
-2924 3057 l
-2923 3057 m
-3130 3057 l
-3130 3058 l
-2923 3058 l
-2923 3058 m
-3132 3058 l
-3132 3059 l
-2923 3059 l
-2922 3059 m
-3134 3059 l
-3134 3060 l
-2922 3060 l
-2921 3060 m
-3136 3060 l
-3136 3061 l
-2921 3061 l
-2921 3061 m
-3138 3061 l
-3138 3062 l
-2921 3062 l
-2920 3062 m
-3139 3062 l
-3139 3063 l
-2920 3063 l
-2920 3063 m
-3141 3063 l
-3141 3064 l
-2920 3064 l
-2919 3064 m
-3143 3064 l
-3143 3065 l
-2919 3065 l
-2919 3065 m
-3145 3065 l
-3145 3066 l
-2919 3066 l
-2918 3066 m
-3147 3066 l
-3147 3067 l
-2918 3067 l
-2918 3067 m
-3148 3067 l
-3148 3068 l
-2918 3068 l
-2917 3068 m
-3150 3068 l
-3150 3069 l
-2917 3069 l
-2916 3069 m
-3152 3069 l
-3152 3070 l
-2916 3070 l
-2916 3070 m
-3154 3070 l
-3154 3071 l
-2916 3071 l
-2915 3071 m
-3156 3071 l
-3156 3072 l
-2915 3072 l
-2915 3072 m
-3157 3072 l
-3157 3073 l
-2915 3073 l
-2914 3073 m
-3159 3073 l
-3159 3074 l
-2914 3074 l
-2914 3074 m
-3161 3074 l
-3161 3075 l
-2914 3075 l
-2913 3075 m
-3163 3075 l
-3163 3076 l
-2913 3076 l
-2913 3076 m
-3165 3076 l
-3165 3077 l
-2913 3077 l
-2913 3077 m
-3167 3077 l
-3167 3078 l
-2913 3078 l
-2914 3078 m
-3168 3078 l
-3168 3079 l
-2914 3079 l
-2916 3079 m
-3170 3079 l
-3170 3080 l
-2916 3080 l
-2918 3080 m
-3172 3080 l
-3172 3081 l
-2918 3081 l
-2920 3081 m
-3174 3081 l
-3174 3082 l
-2920 3082 l
-2922 3082 m
-3176 3082 l
-3176 3083 l
-2922 3083 l
-2923 3083 m
-3177 3083 l
-3177 3084 l
-2923 3084 l
-2925 3084 m
-3179 3084 l
-3179 3085 l
-2925 3085 l
-2927 3085 m
-3181 3085 l
-3181 3086 l
-2927 3086 l
-2929 3086 m
-3183 3086 l
-3183 3087 l
-2929 3087 l
-2931 3087 m
-3185 3087 l
-3185 3088 l
-2931 3088 l
-2933 3088 m
-3186 3088 l
-3186 3089 l
-2933 3089 l
-2934 3089 m
-3188 3089 l
-3188 3090 l
-2934 3090 l
-2936 3090 m
-3190 3090 l
-3190 3091 l
-2936 3091 l
-2938 3091 m
-3192 3091 l
-3192 3092 l
-2938 3092 l
-2940 3092 m
-3194 3092 l
-3194 3093 l
-2940 3093 l
-2942 3093 m
-3196 3093 l
-3196 3094 l
-2942 3094 l
-2943 3094 m
-3197 3094 l
-3197 3095 l
-2943 3095 l
-2945 3095 m
-3199 3095 l
-3199 3096 l
-2945 3096 l
-2947 3096 m
-3201 3096 l
-3201 3097 l
-2947 3097 l
-2949 3097 m
-3203 3097 l
-3203 3098 l
-2949 3098 l
-2951 3098 m
-3205 3098 l
-3205 3099 l
-2951 3099 l
-2953 3099 m
-3206 3099 l
-3206 3100 l
-2953 3100 l
-2954 3100 m
-3208 3100 l
-3208 3101 l
-2954 3101 l
-2956 3101 m
-3210 3101 l
-3210 3102 l
-2956 3102 l
-2958 3102 m
-3212 3102 l
-3212 3103 l
-2958 3103 l
-2960 3103 m
-3214 3103 l
-3214 3104 l
-2960 3104 l
-2962 3104 m
-3215 3104 l
-3215 3105 l
-2962 3105 l
-2963 3105 m
-3217 3105 l
-3217 3106 l
-2963 3106 l
-2965 3106 m
-3219 3106 l
-3219 3107 l
-2965 3107 l
-2967 3107 m
-3221 3107 l
-3221 3108 l
-2967 3108 l
-2969 3108 m
-3223 3108 l
-3223 3109 l
-2969 3109 l
-2971 3109 m
-3224 3109 l
-3224 3110 l
-2971 3110 l
-2973 3110 m
-3224 3110 l
-3224 3111 l
-2973 3111 l
-2974 3111 m
-3224 3111 l
-3224 3112 l
-2974 3112 l
-2976 3112 m
-3223 3112 l
-3223 3113 l
-2976 3113 l
-2978 3113 m
-3223 3113 l
-3223 3114 l
-2978 3114 l
-2980 3114 m
-3222 3114 l
-3222 3115 l
-2980 3115 l
-2982 3115 m
-3222 3115 l
-3222 3116 l
-2982 3116 l
-2983 3116 m
-3221 3116 l
-3221 3117 l
-2983 3117 l
-2985 3117 m
-3221 3117 l
-3221 3118 l
-2985 3118 l
-2987 3118 m
-3220 3118 l
-3220 3119 l
-2987 3119 l
-2989 3119 m
-3220 3119 l
-3220 3120 l
-2989 3120 l
-2991 3120 m
-3219 3120 l
-3219 3121 l
-2991 3121 l
-2993 3121 m
-3218 3121 l
-3218 3122 l
-2993 3122 l
-2994 3122 m
-3218 3122 l
-3218 3123 l
-2994 3123 l
-2996 3123 m
-3217 3123 l
-3217 3124 l
-2996 3124 l
-2998 3124 m
-3217 3124 l
-3217 3125 l
-2998 3125 l
-3000 3125 m
-3216 3125 l
-3216 3126 l
-3000 3126 l
-3002 3126 m
-3216 3126 l
-3216 3127 l
-3002 3127 l
-3004 3127 m
-3215 3127 l
-3215 3128 l
-3004 3128 l
-3005 3128 m
-3215 3128 l
-3215 3129 l
-3005 3129 l
-3007 3129 m
-3214 3129 l
-3214 3130 l
-3007 3130 l
-3009 3130 m
-3214 3130 l
-3214 3131 l
-3009 3131 l
-3011 3131 m
-3213 3131 l
-3213 3132 l
-3011 3132 l
-3013 3132 m
-3212 3132 l
-3212 3133 l
-3013 3133 l
-3014 3133 m
-3212 3133 l
-3212 3134 l
-3014 3134 l
-3016 3134 m
-3211 3134 l
-3211 3135 l
-3016 3135 l
-3018 3135 m
-3211 3135 l
-3211 3136 l
-3018 3136 l
-3020 3136 m
-3210 3136 l
-3210 3137 l
-3020 3137 l
-3022 3137 m
-3210 3137 l
-3210 3138 l
-3022 3138 l
-3024 3138 m
-3209 3138 l
-3209 3139 l
-3024 3139 l
-3025 3139 m
-3209 3139 l
-3209 3140 l
-3025 3140 l
-3027 3140 m
-3208 3140 l
-3208 3141 l
-3027 3141 l
-3029 3141 m
-3208 3141 l
-3208 3142 l
-3029 3142 l
-3031 3142 m
-3207 3142 l
-3207 3143 l
-3031 3143 l
-3033 3143 m
-3206 3143 l
-3206 3144 l
-3033 3144 l
-3034 3144 m
-3206 3144 l
-3206 3145 l
-3034 3145 l
-3036 3145 m
-3205 3145 l
-3205 3146 l
-3036 3146 l
-3038 3146 m
-3205 3146 l
-3205 3147 l
-3038 3147 l
-3040 3147 m
-3204 3147 l
-3204 3148 l
-3040 3148 l
-3042 3148 m
-3204 3148 l
-3204 3149 l
-3042 3149 l
-3044 3149 m
-3203 3149 l
-3203 3150 l
-3044 3150 l
-3045 3150 m
-3203 3150 l
-3203 3151 l
-3045 3151 l
-3047 3151 m
-3202 3151 l
-3202 3152 l
-3047 3152 l
-3049 3152 m
-3202 3152 l
-3202 3153 l
-3049 3153 l
-3051 3153 m
-3201 3153 l
-3201 3154 l
-3051 3154 l
-3053 3154 m
-3200 3154 l
-3200 3155 l
-3053 3155 l
-3054 3155 m
-3200 3155 l
-3200 3156 l
-3054 3156 l
-3056 3156 m
-3199 3156 l
-3199 3157 l
-3056 3157 l
-3058 3157 m
-3199 3157 l
-3199 3158 l
-3058 3158 l
-3060 3158 m
-3198 3158 l
-3198 3159 l
-3060 3159 l
-3062 3159 m
-3198 3159 l
-3198 3160 l
-3062 3160 l
-3064 3160 m
-3197 3160 l
-3197 3161 l
-3064 3161 l
-3065 3161 m
-3197 3161 l
-3197 3162 l
-3065 3162 l
-3067 3162 m
-3196 3162 l
-3196 3163 l
-3067 3163 l
-3069 3163 m
-3195 3163 l
-3195 3164 l
-3069 3164 l
-3071 3164 m
-3195 3164 l
-3195 3165 l
-3071 3165 l
-3073 3165 m
-3194 3165 l
-3194 3166 l
-3073 3166 l
-3074 3166 m
-3194 3166 l
-3194 3167 l
-3074 3167 l
-3076 3167 m
-3193 3167 l
-3193 3168 l
-3076 3168 l
-3078 3168 m
-3193 3168 l
-3193 3169 l
-3078 3169 l
-3080 3169 m
-3192 3169 l
-3192 3170 l
-3080 3170 l
-3082 3170 m
-3192 3170 l
-3192 3171 l
-3082 3171 l
-3084 3171 m
-3191 3171 l
-3191 3172 l
-3084 3172 l
-3085 3172 m
-3191 3172 l
-3191 3173 l
-3085 3173 l
-3087 3173 m
-3190 3173 l
-3190 3174 l
-3087 3174 l
-3089 3174 m
-3189 3174 l
-3189 3175 l
-3089 3175 l
-3091 3175 m
-3189 3175 l
-3189 3176 l
-3091 3176 l
-3093 3176 m
-3188 3176 l
-3188 3177 l
-3093 3177 l
-3095 3177 m
-3188 3177 l
-3188 3178 l
-3095 3178 l
-3096 3178 m
-3187 3178 l
-3187 3179 l
-3096 3179 l
-3098 3179 m
-3187 3179 l
-3187 3180 l
-3098 3180 l
-3100 3180 m
-3186 3180 l
-3186 3181 l
-3100 3181 l
-3102 3181 m
-3186 3181 l
-3186 3182 l
-3102 3182 l
-3104 3182 m
-3185 3182 l
-3185 3183 l
-3104 3183 l
-3105 3183 m
-3185 3183 l
-3185 3184 l
-3105 3184 l
-3107 3184 m
-3184 3184 l
-3184 3185 l
-3107 3185 l
-3109 3185 m
-3183 3185 l
-3183 3186 l
-3109 3186 l
-3111 3186 m
-3183 3186 l
-3183 3187 l
-3111 3187 l
-3113 3187 m
-3182 3187 l
-3182 3188 l
-3113 3188 l
-3115 3188 m
-3182 3188 l
-3182 3189 l
-3115 3189 l
-3116 3189 m
-3181 3189 l
-3181 3190 l
-3116 3190 l
-3118 3190 m
-3181 3190 l
-3181 3191 l
-3118 3191 l
-3120 3191 m
-3180 3191 l
-3180 3192 l
-3120 3192 l
-3122 3192 m
-3180 3192 l
-3180 3193 l
-3122 3193 l
-3124 3193 m
-3179 3193 l
-3179 3194 l
-3124 3194 l
-3125 3194 m
-3179 3194 l
-3179 3195 l
-3125 3195 l
-3127 3195 m
-3178 3195 l
-3178 3196 l
-3127 3196 l
-3129 3196 m
-3177 3196 l
-3177 3197 l
-3129 3197 l
-3131 3197 m
-3177 3197 l
-3177 3198 l
-3131 3198 l
-3133 3198 m
-3176 3198 l
-3176 3199 l
-3133 3199 l
-3135 3199 m
-3176 3199 l
-3176 3200 l
-3135 3200 l
-3136 3200 m
-3175 3200 l
-3175 3201 l
-3136 3201 l
-3138 3201 m
-3175 3201 l
-3175 3202 l
-3138 3202 l
-3140 3202 m
-3174 3202 l
-3174 3203 l
-3140 3203 l
-3142 3203 m
-3174 3203 l
-3174 3204 l
-3142 3204 l
-3144 3204 m
-3173 3204 l
-3173 3205 l
-3144 3205 l
-3145 3205 m
-3173 3205 l
-3173 3206 l
-3145 3206 l
-3147 3206 m
-3172 3206 l
-3172 3207 l
-3147 3207 l
-3149 3207 m
-3171 3207 l
-3171 3208 l
-3149 3208 l
-3151 3208 m
-3171 3208 l
-3171 3209 l
-3151 3209 l
-3153 3209 m
-3170 3209 l
-3170 3210 l
-3153 3210 l
-3155 3210 m
-3170 3210 l
-3170 3211 l
-3155 3211 l
-3156 3211 m
-3169 3211 l
-3169 3212 l
-3156 3212 l
-3158 3212 m
-3169 3212 l
-3169 3213 l
-3158 3213 l
-3160 3213 m
-3168 3213 l
-3168 3214 l
-3160 3214 l
-3162 3214 m
-3168 3214 l
-3168 3215 l
-3162 3215 l
-3164 3215 m
-3167 3215 l
-3167 3216 l
-3164 3216 l
-Y
-2972 2970.9 m
-2913 3077 l
-3166 3216 l
-3224 3110 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2964 3028 m
-3030 3065 l
-S
-3093 3124 m
-3095 3111 l
-3092 3099 l
-3083 3090 l
-3079 3088 l
-3066 3085 l
-3055 3088 l
-3045 3097 l
-3043 3101 l
-3041 3114 l
-3044 3125 l
-3053 3135 l
-3057 3137 l
-3070 3139 l
-3081 3136 l
-3093 3124 l
-3103 3105 l
-3109 3085 l
-3108 3070 l
-3099 3060 l
-3092 3056 l
-3079 3054 l
-3071 3059 l
-S
-3126 3175 m
-3117 3166 l
-3116 3151 l
-3122 3130 l
-3128 3119 l
-3142 3103 l
-3156 3096 l
-3169 3099 l
-3176 3103 l
-3185 3112 l
-3186 3127 l
-3180 3148 l
-3174 3159 l
-3160 3175 l
-3146 3182 l
-3133 3179 l
-3126 3175 l
-S
-1 g
-3473 3317 m
-3476 3317 l
-3476 3318 l
-3473 3318 l
-3472 3318 m
-3476 3318 l
-3476 3319 l
-3472 3319 l
-3471 3319 m
-3477 3319 l
-3477 3320 l
-3471 3320 l
-3470 3320 m
-3478 3320 l
-3478 3321 l
-3470 3321 l
-3469 3321 m
-3479 3321 l
-3479 3322 l
-3469 3322 l
-3467 3322 m
-3480 3322 l
-3480 3323 l
-3467 3323 l
-3466 3323 m
-3480 3323 l
-3480 3324 l
-3466 3324 l
-3465 3324 m
-3481 3324 l
-3481 3325 l
-3465 3325 l
-3464 3325 m
-3482 3325 l
-3482 3326 l
-3464 3326 l
-3463 3326 m
-3483 3326 l
-3483 3327 l
-3463 3327 l
-3461 3327 m
-3484 3327 l
-3484 3328 l
-3461 3328 l
-3460 3328 m
-3485 3328 l
-3485 3329 l
-3460 3329 l
-3459 3329 m
-3485 3329 l
-3485 3330 l
-3459 3330 l
-3458 3330 m
-3486 3330 l
-3486 3331 l
-3458 3331 l
-3457 3331 m
-3487 3331 l
-3487 3332 l
-3457 3332 l
-3455 3332 m
-3488 3332 l
-3488 3333 l
-3455 3333 l
-3454 3333 m
-3489 3333 l
-3489 3334 l
-3454 3334 l
-3453 3334 m
-3490 3334 l
-3490 3335 l
-3453 3335 l
-3452 3335 m
-3490 3335 l
-3490 3336 l
-3452 3336 l
-3451 3336 m
-3491 3336 l
-3491 3337 l
-3451 3337 l
-3449 3337 m
-3492 3337 l
-3492 3338 l
-3449 3338 l
-3448 3338 m
-3493 3338 l
-3493 3339 l
-3448 3339 l
-3447 3339 m
-3494 3339 l
-3494 3340 l
-3447 3340 l
-3446 3340 m
-3494 3340 l
-3494 3341 l
-3446 3341 l
-3445 3341 m
-3495 3341 l
-3495 3342 l
-3445 3342 l
-3443 3342 m
-3496 3342 l
-3496 3343 l
-3443 3343 l
-3442 3343 m
-3497 3343 l
-3497 3344 l
-3442 3344 l
-3441 3344 m
-3498 3344 l
-3498 3345 l
-3441 3345 l
-3440 3345 m
-3499 3345 l
-3499 3346 l
-3440 3346 l
-3438 3346 m
-3499 3346 l
-3499 3347 l
-3438 3347 l
-3437 3347 m
-3500 3347 l
-3500 3348 l
-3437 3348 l
-3436 3348 m
-3501 3348 l
-3501 3349 l
-3436 3349 l
-3435 3349 m
-3502 3349 l
-3502 3350 l
-3435 3350 l
-3434 3350 m
-3503 3350 l
-3503 3351 l
-3434 3351 l
-3432 3351 m
-3504 3351 l
-3504 3352 l
-3432 3352 l
-3431 3352 m
-3504 3352 l
-3504 3353 l
-3431 3353 l
-3430 3353 m
-3505 3353 l
-3505 3354 l
-3430 3354 l
-3429 3354 m
-3506 3354 l
-3506 3355 l
-3429 3355 l
-3428 3355 m
-3507 3355 l
-3507 3356 l
-3428 3356 l
-3426 3356 m
-3508 3356 l
-3508 3357 l
-3426 3357 l
-3425 3357 m
-3508 3357 l
-3508 3358 l
-3425 3358 l
-3424 3358 m
-3509 3358 l
-3509 3359 l
-3424 3359 l
-3423 3359 m
-3510 3359 l
-3510 3360 l
-3423 3360 l
-3422 3360 m
-3511 3360 l
-3511 3361 l
-3422 3361 l
-3420 3361 m
-3512 3361 l
-3512 3362 l
-3420 3362 l
-3419 3362 m
-3513 3362 l
-3513 3363 l
-3419 3363 l
-3418 3363 m
-3513 3363 l
-3513 3364 l
-3418 3364 l
-3417 3364 m
-3514 3364 l
-3514 3365 l
-3417 3365 l
-3416 3365 m
-3515 3365 l
-3515 3366 l
-3416 3366 l
-3414 3366 m
-3516 3366 l
-3516 3367 l
-3414 3367 l
-3413 3367 m
-3517 3367 l
-3517 3368 l
-3413 3368 l
-3412 3368 m
-3518 3368 l
-3518 3369 l
-3412 3369 l
-3411 3369 m
-3518 3369 l
-3518 3370 l
-3411 3370 l
-3409 3370 m
-3519 3370 l
-3519 3371 l
-3409 3371 l
-3408 3371 m
-3520 3371 l
-3520 3372 l
-3408 3372 l
-3407 3372 m
-3521 3372 l
-3521 3373 l
-3407 3373 l
-3406 3373 m
-3522 3373 l
-3522 3374 l
-3406 3374 l
-3405 3374 m
-3522 3374 l
-3522 3375 l
-3405 3375 l
-3403 3375 m
-3523 3375 l
-3523 3376 l
-3403 3376 l
-3402 3376 m
-3524 3376 l
-3524 3377 l
-3402 3377 l
-3401 3377 m
-3525 3377 l
-3525 3378 l
-3401 3378 l
-3400 3378 m
-3526 3378 l
-3526 3379 l
-3400 3379 l
-3399 3379 m
-3527 3379 l
-3527 3380 l
-3399 3380 l
-3397 3380 m
-3527 3380 l
-3527 3381 l
-3397 3381 l
-3396 3381 m
-3528 3381 l
-3528 3382 l
-3396 3382 l
-3395 3382 m
-3529 3382 l
-3529 3383 l
-3395 3383 l
-3394 3383 m
-3530 3383 l
-3530 3384 l
-3394 3384 l
-3393 3384 m
-3531 3384 l
-3531 3385 l
-3393 3385 l
-3391 3385 m
-3532 3385 l
-3532 3386 l
-3391 3386 l
-3390 3386 m
-3532 3386 l
-3532 3387 l
-3390 3387 l
-3389 3387 m
-3533 3387 l
-3533 3388 l
-3389 3388 l
-3388 3388 m
-3534 3388 l
-3534 3389 l
-3388 3389 l
-3387 3389 m
-3535 3389 l
-3535 3390 l
-3387 3390 l
-3385 3390 m
-3536 3390 l
-3536 3391 l
-3385 3391 l
-3384 3391 m
-3537 3391 l
-3537 3392 l
-3384 3392 l
-3383 3392 m
-3537 3392 l
-3537 3393 l
-3383 3393 l
-3382 3393 m
-3538 3393 l
-3538 3394 l
-3382 3394 l
-3381 3394 m
-3539 3394 l
-3539 3395 l
-3381 3395 l
-3381 3395 m
-3540 3395 l
-3540 3396 l
-3381 3396 l
-3381 3396 m
-3541 3396 l
-3541 3397 l
-3381 3397 l
-3382 3397 m
-3541 3397 l
-3541 3398 l
-3382 3398 l
-3383 3398 m
-3542 3398 l
-3542 3399 l
-3383 3399 l
-3384 3399 m
-3543 3399 l
-3543 3400 l
-3384 3400 l
-3385 3400 m
-3544 3400 l
-3544 3401 l
-3385 3401 l
-3385 3401 m
-3545 3401 l
-3545 3402 l
-3385 3402 l
-3386 3402 m
-3546 3402 l
-3546 3403 l
-3386 3403 l
-3387 3403 m
-3546 3403 l
-3546 3404 l
-3387 3404 l
-3388 3404 m
-3547 3404 l
-3547 3405 l
-3388 3405 l
-3389 3405 m
-3548 3405 l
-3548 3406 l
-3389 3406 l
-3390 3406 m
-3549 3406 l
-3549 3407 l
-3390 3407 l
-3390 3407 m
-3550 3407 l
-3550 3408 l
-3390 3408 l
-3391 3408 m
-3551 3408 l
-3551 3409 l
-3391 3409 l
-3392 3409 m
-3551 3409 l
-3551 3410 l
-3392 3410 l
-3393 3410 m
-3552 3410 l
-3552 3411 l
-3393 3411 l
-3394 3411 m
-3553 3411 l
-3553 3412 l
-3394 3412 l
-3395 3412 m
-3554 3412 l
-3554 3413 l
-3395 3413 l
-3395 3413 m
-3555 3413 l
-3555 3414 l
-3395 3414 l
-3396 3414 m
-3555 3414 l
-3555 3415 l
-3396 3415 l
-3397 3415 m
-3556 3415 l
-3556 3416 l
-3397 3416 l
-3398 3416 m
-3557 3416 l
-3557 3417 l
-3398 3417 l
-3399 3417 m
-3558 3417 l
-3558 3418 l
-3399 3418 l
-3400 3418 m
-3559 3418 l
-3559 3419 l
-3400 3419 l
-3400 3419 m
-3560 3419 l
-3560 3420 l
-3400 3420 l
-3401 3420 m
-3560 3420 l
-3560 3421 l
-3401 3421 l
-3402 3421 m
-3561 3421 l
-3561 3422 l
-3402 3422 l
-3403 3422 m
-3562 3422 l
-3562 3423 l
-3403 3423 l
-3404 3423 m
-3563 3423 l
-3563 3424 l
-3404 3424 l
-3405 3424 m
-3564 3424 l
-3564 3425 l
-3405 3425 l
-3405 3425 m
-3565 3425 l
-3565 3426 l
-3405 3426 l
-3406 3426 m
-3565 3426 l
-3565 3427 l
-3406 3427 l
-3407 3427 m
-3566 3427 l
-3566 3428 l
-3407 3428 l
-3408 3428 m
-3567 3428 l
-3567 3429 l
-3408 3429 l
-3409 3429 m
-3568 3429 l
-3568 3430 l
-3409 3430 l
-3410 3430 m
-3569 3430 l
-3569 3432 l
-3410 3432 l
-3411 3432 m
-3570 3432 l
-3570 3433 l
-3411 3433 l
-3412 3433 m
-3571 3433 l
-3571 3434 l
-3412 3434 l
-3413 3434 m
-3572 3434 l
-3572 3435 l
-3413 3435 l
-3414 3435 m
-3573 3435 l
-3573 3436 l
-3414 3436 l
-3414 3436 m
-3574 3436 l
-3574 3437 l
-3414 3437 l
-3415 3437 m
-3574 3437 l
-3574 3438 l
-3415 3438 l
-3416 3438 m
-3575 3438 l
-3575 3439 l
-3416 3439 l
-3417 3439 m
-3576 3439 l
-3576 3440 l
-3417 3440 l
-3418 3440 m
-3577 3440 l
-3577 3441 l
-3418 3441 l
-3419 3441 m
-3578 3441 l
-3578 3442 l
-3419 3442 l
-3419 3442 m
-3579 3442 l
-3579 3443 l
-3419 3443 l
-3420 3443 m
-3579 3443 l
-3579 3444 l
-3420 3444 l
-3421 3444 m
-3580 3444 l
-3580 3445 l
-3421 3445 l
-3422 3445 m
-3581 3445 l
-3581 3446 l
-3422 3446 l
-3423 3446 m
-3582 3446 l
-3582 3447 l
-3423 3447 l
-3424 3447 m
-3583 3447 l
-3583 3449 l
-3424 3449 l
-3425 3449 m
-3584 3449 l
-3584 3450 l
-3425 3450 l
-3426 3450 m
-3585 3450 l
-3585 3451 l
-3426 3451 l
-3427 3451 m
-3586 3451 l
-3586 3452 l
-3427 3452 l
-3428 3452 m
-3587 3452 l
-3587 3453 l
-3428 3453 l
-3429 3453 m
-3588 3453 l
-3588 3455 l
-3429 3455 l
-3430 3455 m
-3589 3455 l
-3589 3456 l
-3430 3456 l
-3431 3456 m
-3590 3456 l
-3590 3457 l
-3431 3457 l
-3432 3457 m
-3591 3457 l
-3591 3458 l
-3432 3458 l
-3433 3458 m
-3592 3458 l
-3592 3459 l
-3433 3459 l
-3434 3459 m
-3593 3459 l
-3593 3461 l
-3434 3461 l
-3435 3461 m
-3594 3461 l
-3594 3462 l
-3435 3462 l
-3436 3462 m
-3595 3462 l
-3595 3463 l
-3436 3463 l
-3437 3463 m
-3596 3463 l
-3596 3464 l
-3437 3464 l
-3438 3464 m
-3597 3464 l
-3597 3465 l
-3438 3465 l
-3439 3465 m
-3598 3465 l
-3598 3467 l
-3439 3467 l
-3440 3467 m
-3599 3467 l
-3599 3468 l
-3440 3468 l
-3441 3468 m
-3600 3468 l
-3600 3469 l
-3441 3469 l
-3442 3469 m
-3601 3469 l
-3601 3470 l
-3442 3470 l
-3443 3470 m
-3602 3470 l
-3602 3472 l
-3443 3472 l
-3444 3472 m
-3603 3472 l
-3603 3473 l
-3444 3473 l
-3445 3473 m
-3604 3473 l
-3604 3474 l
-3445 3474 l
-3446 3474 m
-3605 3474 l
-3605 3475 l
-3446 3475 l
-3447 3475 m
-3606 3475 l
-3606 3476 l
-3447 3476 l
-3448 3476 m
-3607 3476 l
-3607 3478 l
-3448 3478 l
-3449 3478 m
-3608 3478 l
-3608 3479 l
-3449 3479 l
-3450 3479 m
-3609 3479 l
-3609 3480 l
-3450 3480 l
-3451 3480 m
-3610 3480 l
-3610 3481 l
-3451 3481 l
-3452 3481 m
-3611 3481 l
-3611 3482 l
-3452 3482 l
-3453 3482 m
-3612 3482 l
-3612 3484 l
-3453 3484 l
-3454 3484 m
-3613 3484 l
-3613 3485 l
-3454 3485 l
-3455 3485 m
-3614 3485 l
-3614 3486 l
-3455 3486 l
-3456 3486 m
-3615 3486 l
-3615 3487 l
-3456 3487 l
-3457 3487 m
-3616 3487 l
-3616 3488 l
-3457 3488 l
-3458 3488 m
-3616 3488 l
-3616 3489 l
-3458 3489 l
-3458 3489 m
-3617 3489 l
-3617 3490 l
-3458 3490 l
-3459 3490 m
-3618 3490 l
-3618 3491 l
-3459 3491 l
-3460 3491 m
-3619 3491 l
-3619 3492 l
-3460 3492 l
-3461 3492 m
-3620 3492 l
-3620 3493 l
-3461 3493 l
-3462 3493 m
-3621 3493 l
-3621 3494 l
-3462 3494 l
-3463 3494 m
-3621 3494 l
-3621 3495 l
-3463 3495 l
-3463 3495 m
-3622 3495 l
-3622 3496 l
-3463 3496 l
-3464 3496 m
-3623 3496 l
-3623 3497 l
-3464 3497 l
-3465 3497 m
-3624 3497 l
-3624 3498 l
-3465 3498 l
-3466 3498 m
-3625 3498 l
-3625 3499 l
-3466 3499 l
-3467 3499 m
-3626 3499 l
-3626 3500 l
-3467 3500 l
-3468 3500 m
-3626 3500 l
-3626 3501 l
-3468 3501 l
-3468 3501 m
-3627 3501 l
-3627 3502 l
-3468 3502 l
-3469 3502 m
-3628 3502 l
-3628 3503 l
-3469 3503 l
-3470 3503 m
-3629 3503 l
-3629 3504 l
-3470 3504 l
-3471 3504 m
-3630 3504 l
-3630 3505 l
-3471 3505 l
-3472 3505 m
-3630 3505 l
-3630 3506 l
-3472 3506 l
-3473 3506 m
-3631 3506 l
-3631 3507 l
-3473 3507 l
-3473 3507 m
-3632 3507 l
-3632 3508 l
-3473 3508 l
-3474 3508 m
-3633 3508 l
-3633 3509 l
-3474 3509 l
-3475 3509 m
-3634 3509 l
-3634 3510 l
-3475 3510 l
-3476 3510 m
-3635 3510 l
-3635 3511 l
-3476 3511 l
-3477 3511 m
-3635 3511 l
-3635 3512 l
-3477 3512 l
-3477 3512 m
-3636 3512 l
-3636 3513 l
-3477 3513 l
-3478 3513 m
-3637 3513 l
-3637 3514 l
-3478 3514 l
-3479 3514 m
-3638 3514 l
-3638 3515 l
-3479 3515 l
-3480 3515 m
-3639 3515 l
-3639 3516 l
-3480 3516 l
-3481 3516 m
-3640 3516 l
-3640 3517 l
-3481 3517 l
-3482 3517 m
-3640 3517 l
-3640 3518 l
-3482 3518 l
-3482 3518 m
-3641 3518 l
-3641 3519 l
-3482 3519 l
-3483 3519 m
-3642 3519 l
-3642 3520 l
-3483 3520 l
-3484 3520 m
-3643 3520 l
-3643 3521 l
-3484 3521 l
-3485 3521 m
-3644 3521 l
-3644 3522 l
-3485 3522 l
-3486 3522 m
-3644 3522 l
-3644 3523 l
-3486 3523 l
-3487 3523 m
-3645 3523 l
-3645 3524 l
-3487 3524 l
-3487 3524 m
-3646 3524 l
-3646 3525 l
-3487 3525 l
-3488 3525 m
-3647 3525 l
-3647 3526 l
-3488 3526 l
-3489 3526 m
-3648 3526 l
-3648 3527 l
-3489 3527 l
-3490 3527 m
-3649 3527 l
-3649 3528 l
-3490 3528 l
-3491 3528 m
-3649 3528 l
-3649 3529 l
-3491 3529 l
-3492 3529 m
-3650 3529 l
-3650 3530 l
-3492 3530 l
-3492 3530 m
-3651 3530 l
-3651 3531 l
-3492 3531 l
-3493 3531 m
-3652 3531 l
-3652 3532 l
-3493 3532 l
-3494 3532 m
-3653 3532 l
-3653 3533 l
-3494 3533 l
-3495 3533 m
-3654 3533 l
-3654 3534 l
-3495 3534 l
-3496 3534 m
-3654 3534 l
-3654 3535 l
-3496 3535 l
-3497 3535 m
-3655 3535 l
-3655 3536 l
-3497 3536 l
-3497 3536 m
-3656 3536 l
-3656 3537 l
-3497 3537 l
-3498 3537 m
-3657 3537 l
-3657 3538 l
-3498 3538 l
-3499 3538 m
-3658 3538 l
-3658 3539 l
-3499 3539 l
-3500 3539 m
-3658 3539 l
-3658 3540 l
-3500 3540 l
-3501 3540 m
-3659 3540 l
-3659 3541 l
-3501 3541 l
-3502 3541 m
-3657 3541 l
-3657 3542 l
-3502 3542 l
-3502 3542 m
-3656 3542 l
-3656 3543 l
-3502 3543 l
-3503 3543 m
-3655 3543 l
-3655 3544 l
-3503 3544 l
-3504 3544 m
-3654 3544 l
-3654 3545 l
-3504 3545 l
-3505 3545 m
-3652 3545 l
-3652 3546 l
-3505 3546 l
-3506 3546 m
-3651 3546 l
-3651 3547 l
-3506 3547 l
-3506 3547 m
-3650 3547 l
-3650 3548 l
-3506 3548 l
-3507 3548 m
-3649 3548 l
-3649 3549 l
-3507 3549 l
-3508 3549 m
-3648 3549 l
-3648 3550 l
-3508 3550 l
-3509 3550 m
-3646 3550 l
-3646 3551 l
-3509 3551 l
-3510 3551 m
-3645 3551 l
-3645 3552 l
-3510 3552 l
-3511 3552 m
-3644 3552 l
-3644 3553 l
-3511 3553 l
-3511 3553 m
-3643 3553 l
-3643 3554 l
-3511 3554 l
-3512 3554 m
-3642 3554 l
-3642 3555 l
-3512 3555 l
-3513 3555 m
-3640 3555 l
-3640 3556 l
-3513 3556 l
-3514 3556 m
-3639 3556 l
-3639 3557 l
-3514 3557 l
-3515 3557 m
-3638 3557 l
-3638 3558 l
-3515 3558 l
-3516 3558 m
-3637 3558 l
-3637 3559 l
-3516 3559 l
-3516 3559 m
-3636 3559 l
-3636 3560 l
-3516 3560 l
-3517 3560 m
-3634 3560 l
-3634 3561 l
-3517 3561 l
-3518 3561 m
-3633 3561 l
-3633 3562 l
-3518 3562 l
-3519 3562 m
-3632 3562 l
-3632 3563 l
-3519 3563 l
-3520 3563 m
-3631 3563 l
-3631 3564 l
-3520 3564 l
-3521 3564 m
-3630 3564 l
-3630 3565 l
-3521 3565 l
-3521 3565 m
-3628 3565 l
-3628 3566 l
-3521 3566 l
-3522 3566 m
-3627 3566 l
-3627 3567 l
-3522 3567 l
-3523 3567 m
-3626 3567 l
-3626 3568 l
-3523 3568 l
-3524 3568 m
-3625 3568 l
-3625 3569 l
-3524 3569 l
-3525 3569 m
-3623 3569 l
-3623 3570 l
-3525 3570 l
-3526 3570 m
-3622 3570 l
-3622 3571 l
-3526 3571 l
-3526 3571 m
-3621 3571 l
-3621 3572 l
-3526 3572 l
-3527 3572 m
-3620 3572 l
-3620 3573 l
-3527 3573 l
-3528 3573 m
-3619 3573 l
-3619 3574 l
-3528 3574 l
-3529 3574 m
-3617 3574 l
-3617 3575 l
-3529 3575 l
-3530 3575 m
-3616 3575 l
-3616 3576 l
-3530 3576 l
-3531 3576 m
-3615 3576 l
-3615 3577 l
-3531 3577 l
-3531 3577 m
-3614 3577 l
-3614 3578 l
-3531 3578 l
-3532 3578 m
-3613 3578 l
-3613 3579 l
-3532 3579 l
-3533 3579 m
-3611 3579 l
-3611 3580 l
-3533 3580 l
-3534 3580 m
-3610 3580 l
-3610 3581 l
-3534 3581 l
-3535 3581 m
-3609 3581 l
-3609 3582 l
-3535 3582 l
-3535 3582 m
-3608 3582 l
-3608 3583 l
-3535 3583 l
-3536 3583 m
-3607 3583 l
-3607 3584 l
-3536 3584 l
-3537 3584 m
-3605 3584 l
-3605 3585 l
-3537 3585 l
-3538 3585 m
-3604 3585 l
-3604 3586 l
-3538 3586 l
-3539 3586 m
-3603 3586 l
-3603 3587 l
-3539 3587 l
-3540 3587 m
-3602 3587 l
-3602 3588 l
-3540 3588 l
-3540 3588 m
-3601 3588 l
-3601 3589 l
-3540 3589 l
-3541 3589 m
-3599 3589 l
-3599 3590 l
-3541 3590 l
-3542 3590 m
-3598 3590 l
-3598 3591 l
-3542 3591 l
-3543 3591 m
-3597 3591 l
-3597 3592 l
-3543 3592 l
-3544 3592 m
-3596 3592 l
-3596 3593 l
-3544 3593 l
-3545 3593 m
-3594 3593 l
-3594 3594 l
-3545 3594 l
-3545 3594 m
-3593 3594 l
-3593 3595 l
-3545 3595 l
-3546 3595 m
-3592 3595 l
-3592 3596 l
-3546 3596 l
-3547 3596 m
-3591 3596 l
-3591 3597 l
-3547 3597 l
-3548 3597 m
-3590 3597 l
-3590 3598 l
-3548 3598 l
-3549 3598 m
-3588 3598 l
-3588 3599 l
-3549 3599 l
-3550 3599 m
-3587 3599 l
-3587 3600 l
-3550 3600 l
-3550 3600 m
-3586 3600 l
-3586 3601 l
-3550 3601 l
-3551 3601 m
-3585 3601 l
-3585 3602 l
-3551 3602 l
-3552 3602 m
-3584 3602 l
-3584 3603 l
-3552 3603 l
-3553 3603 m
-3582 3603 l
-3582 3604 l
-3553 3604 l
-3554 3604 m
-3581 3604 l
-3581 3605 l
-3554 3605 l
-3555 3605 m
-3580 3605 l
-3580 3606 l
-3555 3606 l
-3555 3606 m
-3579 3606 l
-3579 3607 l
-3555 3607 l
-3556 3607 m
-3578 3607 l
-3578 3608 l
-3556 3608 l
-3557 3608 m
-3576 3608 l
-3576 3609 l
-3557 3609 l
-3558 3609 m
-3575 3609 l
-3575 3610 l
-3558 3610 l
-3559 3610 m
-3574 3610 l
-3574 3611 l
-3559 3611 l
-3560 3611 m
-3573 3611 l
-3573 3612 l
-3560 3612 l
-3560 3612 m
-3572 3612 l
-3572 3613 l
-3560 3613 l
-3561 3613 m
-3570 3613 l
-3570 3614 l
-3561 3614 l
-3562 3614 m
-3569 3614 l
-3569 3615 l
-3562 3615 l
-3563 3615 m
-3568 3615 l
-3568 3616 l
-3563 3616 l
-3564 3616 m
-3567 3616 l
-3567 3617 l
-3564 3617 l
-Y
-3474.6 3317.5 m
-3381 3395 l
-3565 3617 l
-3658 3540 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3446 3368 m
-3494 3426 l
-S
-3518 3515 m
-3509 3517 l
-3498 3510 l
-3492 3503 l
-3488 3491 l
-3492 3476 l
-3505 3460 l
-3522 3447 l
-3537 3439 l
-3549 3440 l
-3560 3447 l
-3563 3451 l
-3567 3463 l
-3566 3475 l
-3559 3486 l
-3556 3488 l
-3544 3493 l
-3532 3492 l
-3521 3485 l
-3518 3482 l
-3513 3470 l
-3515 3458 l
-3522 3447 l
-S
-3543 3564 m
-3538 3552 l
-3542 3538 l
-3556 3521 l
-3566 3513 l
-3584 3503 l
-3599 3502 l
-3611 3509 l
-3616 3515 l
-3621 3527 l
-3616 3542 l
-3603 3558 l
-3593 3566 l
-3574 3576 l
-3559 3578 l
-3548 3571 l
-3543 3564 l
-S
-1 g
-3809 3828 m
-3815 3828 l
-3815 3829 l
-3809 3829 l
-3806 3829 m
-3816 3829 l
-3816 3830 l
-3806 3830 l
-3803 3830 m
-3816 3830 l
-3816 3831 l
-3803 3831 l
-3799 3831 m
-3816 3831 l
-3816 3832 l
-3799 3832 l
-3796 3832 m
-3816 3832 l
-3816 3833 l
-3796 3833 l
-3793 3833 m
-3817 3833 l
-3817 3834 l
-3793 3834 l
-3789 3834 m
-3817 3834 l
-3817 3835 l
-3789 3835 l
-3786 3835 m
-3817 3835 l
-3817 3836 l
-3786 3836 l
-3782 3836 m
-3818 3836 l
-3818 3837 l
-3782 3837 l
-3779 3837 m
-3818 3837 l
-3818 3838 l
-3779 3838 l
-3776 3838 m
-3818 3838 l
-3818 3839 l
-3776 3839 l
-3772 3839 m
-3819 3839 l
-3819 3840 l
-3772 3840 l
-3769 3840 m
-3819 3840 l
-3819 3841 l
-3769 3841 l
-3765 3841 m
-3819 3841 l
-3819 3842 l
-3765 3842 l
-3762 3842 m
-3819 3842 l
-3819 3843 l
-3762 3843 l
-3759 3843 m
-3820 3843 l
-3820 3844 l
-3759 3844 l
-3755 3844 m
-3820 3844 l
-3820 3845 l
-3755 3845 l
-3752 3845 m
-3820 3845 l
-3820 3846 l
-3752 3846 l
-3748 3846 m
-3821 3846 l
-3821 3847 l
-3748 3847 l
-3745 3847 m
-3821 3847 l
-3821 3848 l
-3745 3848 l
-3742 3848 m
-3821 3848 l
-3821 3849 l
-3742 3849 l
-3738 3849 m
-3822 3849 l
-3822 3850 l
-3738 3850 l
-3735 3850 m
-3822 3850 l
-3822 3851 l
-3735 3851 l
-3731 3851 m
-3822 3851 l
-3822 3852 l
-3731 3852 l
-3728 3852 m
-3822 3852 l
-3822 3853 l
-3728 3853 l
-3725 3853 m
-3823 3853 l
-3823 3854 l
-3725 3854 l
-3721 3854 m
-3823 3854 l
-3823 3855 l
-3721 3855 l
-3718 3855 m
-3823 3855 l
-3823 3856 l
-3718 3856 l
-3714 3856 m
-3824 3856 l
-3824 3857 l
-3714 3857 l
-3711 3857 m
-3824 3857 l
-3824 3858 l
-3711 3858 l
-3708 3858 m
-3824 3858 l
-3824 3859 l
-3708 3859 l
-3704 3859 m
-3825 3859 l
-3825 3860 l
-3704 3860 l
-3701 3860 m
-3825 3860 l
-3825 3861 l
-3701 3861 l
-3698 3861 m
-3825 3861 l
-3825 3862 l
-3698 3862 l
-3698 3862 m
-3825 3862 l
-3825 3863 l
-3698 3863 l
-3698 3863 m
-3826 3863 l
-3826 3866 l
-3698 3866 l
-3699 3866 m
-3827 3866 l
-3827 3869 l
-3699 3869 l
-3700 3869 m
-3828 3869 l
-3828 3873 l
-3700 3873 l
-3701 3873 m
-3829 3873 l
-3829 3876 l
-3701 3876 l
-3702 3876 m
-3830 3876 l
-3830 3879 l
-3702 3879 l
-3703 3879 m
-3831 3879 l
-3831 3883 l
-3703 3883 l
-3704 3883 m
-3832 3883 l
-3832 3886 l
-3704 3886 l
-3705 3886 m
-3833 3886 l
-3833 3889 l
-3705 3889 l
-3706 3889 m
-3834 3889 l
-3834 3893 l
-3706 3893 l
-3707 3893 m
-3835 3893 l
-3835 3896 l
-3707 3896 l
-3708 3896 m
-3836 3896 l
-3836 3899 l
-3708 3899 l
-3709 3899 m
-3837 3899 l
-3837 3903 l
-3709 3903 l
-3710 3903 m
-3838 3903 l
-3838 3906 l
-3710 3906 l
-3711 3906 m
-3839 3906 l
-3839 3909 l
-3711 3909 l
-3712 3909 m
-3840 3909 l
-3840 3913 l
-3712 3913 l
-3713 3913 m
-3841 3913 l
-3841 3916 l
-3713 3916 l
-3714 3916 m
-3842 3916 l
-3842 3919 l
-3714 3919 l
-3715 3919 m
-3842 3919 l
-3842 3920 l
-3715 3920 l
-3715 3920 m
-3843 3920 l
-3843 3923 l
-3715 3923 l
-3716 3923 m
-3844 3923 l
-3844 3926 l
-3716 3926 l
-3717 3926 m
-3845 3926 l
-3845 3929 l
-3717 3929 l
-3718 3929 m
-3845 3929 l
-3845 3930 l
-3718 3930 l
-3718 3930 m
-3846 3930 l
-3846 3933 l
-3718 3933 l
-3719 3933 m
-3847 3933 l
-3847 3936 l
-3719 3936 l
-3720 3936 m
-3848 3936 l
-3848 3939 l
-3720 3939 l
-3721 3939 m
-3848 3939 l
-3848 3940 l
-3721 3940 l
-3721 3940 m
-3849 3940 l
-3849 3943 l
-3721 3943 l
-3722 3943 m
-3850 3943 l
-3850 3946 l
-3722 3946 l
-3723 3946 m
-3851 3946 l
-3851 3949 l
-3723 3949 l
-3724 3949 m
-3851 3949 l
-3851 3950 l
-3724 3950 l
-3724 3950 m
-3852 3950 l
-3852 3953 l
-3724 3953 l
-3725 3953 m
-3853 3953 l
-3853 3956 l
-3725 3956 l
-3726 3956 m
-3854 3956 l
-3854 3959 l
-3726 3959 l
-3727 3959 m
-3854 3959 l
-3854 3960 l
-3727 3960 l
-3727 3960 m
-3855 3960 l
-3855 3963 l
-3727 3963 l
-3728 3963 m
-3856 3963 l
-3856 3966 l
-3728 3966 l
-3729 3966 m
-3857 3966 l
-3857 3969 l
-3729 3969 l
-3730 3969 m
-3857 3969 l
-3857 3970 l
-3730 3970 l
-3730 3970 m
-3858 3970 l
-3858 3973 l
-3730 3973 l
-3731 3973 m
-3859 3973 l
-3859 3976 l
-3731 3976 l
-3732 3976 m
-3860 3976 l
-3860 3979 l
-3732 3979 l
-3733 3979 m
-3860 3979 l
-3860 3980 l
-3733 3980 l
-3733 3980 m
-3861 3980 l
-3861 3983 l
-3733 3983 l
-3734 3983 m
-3862 3983 l
-3862 3986 l
-3734 3986 l
-3735 3986 m
-3863 3986 l
-3863 3989 l
-3735 3989 l
-3736 3989 m
-3863 3989 l
-3863 3990 l
-3736 3990 l
-3736 3990 m
-3864 3990 l
-3864 3993 l
-3736 3993 l
-3737 3993 m
-3865 3993 l
-3865 3996 l
-3737 3996 l
-3738 3996 m
-3866 3996 l
-3866 3999 l
-3738 3999 l
-3739 3999 m
-3866 3999 l
-3866 4000 l
-3739 4000 l
-3739 4000 m
-3867 4000 l
-3867 4003 l
-3739 4003 l
-3740 4003 m
-3868 4003 l
-3868 4006 l
-3740 4006 l
-3741 4006 m
-3869 4006 l
-3869 4009 l
-3741 4009 l
-3742 4009 m
-3869 4009 l
-3869 4010 l
-3742 4010 l
-3742 4010 m
-3870 4010 l
-3870 4013 l
-3742 4013 l
-3743 4013 m
-3871 4013 l
-3871 4016 l
-3743 4016 l
-3744 4016 m
-3871 4016 l
-3871 4017 l
-3744 4017 l
-3744 4017 m
-3872 4017 l
-3872 4019 l
-3744 4019 l
-3745 4019 m
-3872 4019 l
-3872 4020 l
-3745 4020 l
-3745 4020 m
-3873 4020 l
-3873 4023 l
-3745 4023 l
-3746 4023 m
-3874 4023 l
-3874 4026 l
-3746 4026 l
-3747 4026 m
-3874 4026 l
-3874 4027 l
-3747 4027 l
-3747 4027 m
-3875 4027 l
-3875 4029 l
-3747 4029 l
-3748 4029 m
-3875 4029 l
-3875 4030 l
-3748 4030 l
-3748 4030 m
-3876 4030 l
-3876 4033 l
-3748 4033 l
-3749 4033 m
-3877 4033 l
-3877 4036 l
-3749 4036 l
-3750 4036 m
-3877 4036 l
-3877 4037 l
-3750 4037 l
-3750 4037 m
-3878 4037 l
-3878 4039 l
-3750 4039 l
-3751 4039 m
-3878 4039 l
-3878 4040 l
-3751 4040 l
-3751 4040 m
-3879 4040 l
-3879 4043 l
-3751 4043 l
-3752 4043 m
-3880 4043 l
-3880 4046 l
-3752 4046 l
-3753 4046 m
-3880 4046 l
-3880 4047 l
-3753 4047 l
-3753 4047 m
-3881 4047 l
-3881 4049 l
-3753 4049 l
-3754 4049 m
-3881 4049 l
-3881 4050 l
-3754 4050 l
-3754 4050 m
-3882 4050 l
-3882 4053 l
-3754 4053 l
-3755 4053 m
-3883 4053 l
-3883 4056 l
-3755 4056 l
-3756 4056 m
-3883 4056 l
-3883 4057 l
-3756 4057 l
-3756 4057 m
-3884 4057 l
-3884 4059 l
-3756 4059 l
-3757 4059 m
-3884 4059 l
-3884 4060 l
-3757 4060 l
-3757 4060 m
-3885 4060 l
-3885 4063 l
-3757 4063 l
-3758 4063 m
-3886 4063 l
-3886 4066 l
-3758 4066 l
-3759 4066 m
-3886 4066 l
-3886 4067 l
-3759 4067 l
-3759 4067 m
-3887 4067 l
-3887 4069 l
-3759 4069 l
-3760 4069 m
-3887 4069 l
-3887 4070 l
-3760 4070 l
-3760 4070 m
-3888 4070 l
-3888 4073 l
-3760 4073 l
-3761 4073 m
-3889 4073 l
-3889 4076 l
-3761 4076 l
-3762 4076 m
-3889 4076 l
-3889 4077 l
-3762 4077 l
-3762 4077 m
-3890 4077 l
-3890 4079 l
-3762 4079 l
-3763 4079 m
-3890 4079 l
-3890 4080 l
-3763 4080 l
-3763 4080 m
-3891 4080 l
-3891 4083 l
-3763 4083 l
-3764 4083 m
-3892 4083 l
-3892 4086 l
-3764 4086 l
-3765 4086 m
-3892 4086 l
-3892 4087 l
-3765 4087 l
-3765 4087 m
-3893 4087 l
-3893 4089 l
-3765 4089 l
-3766 4089 m
-3893 4089 l
-3893 4090 l
-3766 4090 l
-3766 4090 m
-3894 4090 l
-3894 4093 l
-3766 4093 l
-3767 4093 m
-3895 4093 l
-3895 4096 l
-3767 4096 l
-3768 4096 m
-3895 4096 l
-3895 4097 l
-3768 4097 l
-3768 4097 m
-3896 4097 l
-3896 4099 l
-3768 4099 l
-3769 4099 m
-3896 4099 l
-3896 4100 l
-3769 4100 l
-3769 4100 m
-3897 4100 l
-3897 4103 l
-3769 4103 l
-3770 4103 m
-3897 4103 l
-3897 4104 l
-3770 4104 l
-3770 4104 m
-3897 4104 l
-3897 4105 l
-3770 4105 l
-3770 4105 m
-3894 4105 l
-3894 4106 l
-3770 4106 l
-3771 4106 m
-3891 4106 l
-3891 4107 l
-3771 4107 l
-3771 4107 m
-3888 4107 l
-3888 4108 l
-3771 4108 l
-3771 4108 m
-3884 4108 l
-3884 4109 l
-3771 4109 l
-3772 4109 m
-3881 4109 l
-3881 4110 l
-3772 4110 l
-3772 4110 m
-3878 4110 l
-3878 4111 l
-3772 4111 l
-3772 4111 m
-3874 4111 l
-3874 4112 l
-3772 4112 l
-3772 4112 m
-3871 4112 l
-3871 4113 l
-3772 4113 l
-3773 4113 m
-3868 4113 l
-3868 4114 l
-3773 4114 l
-3773 4114 m
-3864 4114 l
-3864 4115 l
-3773 4115 l
-3773 4115 m
-3861 4115 l
-3861 4116 l
-3773 4116 l
-3774 4116 m
-3858 4116 l
-3858 4117 l
-3774 4117 l
-3774 4117 m
-3854 4117 l
-3854 4118 l
-3774 4118 l
-3774 4118 m
-3851 4118 l
-3851 4119 l
-3774 4119 l
-3775 4119 m
-3848 4119 l
-3848 4120 l
-3775 4120 l
-3775 4120 m
-3844 4120 l
-3844 4121 l
-3775 4121 l
-3775 4121 m
-3841 4121 l
-3841 4122 l
-3775 4122 l
-3775 4122 m
-3838 4122 l
-3838 4123 l
-3775 4123 l
-3776 4123 m
-3835 4123 l
-3835 4124 l
-3776 4124 l
-3776 4124 m
-3831 4124 l
-3831 4125 l
-3776 4125 l
-3776 4125 m
-3828 4125 l
-3828 4126 l
-3776 4126 l
-3777 4126 m
-3825 4126 l
-3825 4127 l
-3777 4127 l
-3777 4127 m
-3821 4127 l
-3821 4128 l
-3777 4128 l
-3777 4128 m
-3818 4128 l
-3818 4129 l
-3777 4129 l
-3778 4129 m
-3815 4129 l
-3815 4130 l
-3778 4130 l
-3778 4130 m
-3811 4130 l
-3811 4131 l
-3778 4131 l
-3778 4131 m
-3808 4131 l
-3808 4132 l
-3778 4132 l
-3778 4132 m
-3805 4132 l
-3805 4133 l
-3778 4133 l
-3779 4133 m
-3801 4133 l
-3801 4134 l
-3779 4134 l
-3779 4134 m
-3798 4134 l
-3798 4135 l
-3779 4135 l
-3779 4135 m
-3795 4135 l
-3795 4136 l
-3779 4136 l
-3780 4136 m
-3791 4136 l
-3791 4137 l
-3780 4137 l
-3780 4137 m
-3788 4137 l
-3788 4138 l
-3780 4138 l
-3780 4138 m
-3785 4138 l
-3785 4139 l
-3780 4139 l
-Y
-3814.4 3827.7 m
-3698 3862 l
-3781 4139 l
-3897 4104 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3768 3863 m
-3790 3935 l
-S
-3753 3986 m
-3766 4030 l
-3791 3996 l
-3794 4008 l
-3801 4015 l
-3806 4018 l
-3819 4018 l
-3827 4016 l
-3838 4008 l
-3843 3998 l
-3844 3985 l
-3840 3973 l
-3833 3962 l
-3827 3959 l
-3818 3957 l
-S
-3781 4082 m
-3782 4069 l
-3791 4057 l
-3810 4047 l
-3822 4043 l
-3843 4041 l
-3858 4046 l
-3865 4057 l
-3868 4065 l
-3867 4078 l
-3858 4089 l
-3839 4099 l
-3827 4103 l
-3806 4105 l
-3791 4101 l
-3784 4090 l
-3781 4082 l
-S
-1 g
-3582 5053 m
-3585 5053 l
-3585 5054 l
-3582 5054 l
-3581 5054 m
-3586 5054 l
-3586 5055 l
-3581 5055 l
-3580 5055 m
-3587 5055 l
-3587 5056 l
-3580 5056 l
-3579 5056 m
-3588 5056 l
-3588 5057 l
-3579 5057 l
-3578 5057 m
-3590 5057 l
-3590 5058 l
-3578 5058 l
-3578 5058 m
-3591 5058 l
-3591 5059 l
-3578 5059 l
-3577 5059 m
-3592 5059 l
-3592 5060 l
-3577 5060 l
-3576 5060 m
-3593 5060 l
-3593 5061 l
-3576 5061 l
-3575 5061 m
-3594 5061 l
-3594 5062 l
-3575 5062 l
-3574 5062 m
-3596 5062 l
-3596 5063 l
-3574 5063 l
-3573 5063 m
-3597 5063 l
-3597 5064 l
-3573 5064 l
-3573 5064 m
-3598 5064 l
-3598 5065 l
-3573 5065 l
-3572 5065 m
-3599 5065 l
-3599 5066 l
-3572 5066 l
-3571 5066 m
-3600 5066 l
-3600 5067 l
-3571 5067 l
-3570 5067 m
-3602 5067 l
-3602 5068 l
-3570 5068 l
-3569 5068 m
-3603 5068 l
-3603 5069 l
-3569 5069 l
-3568 5069 m
-3604 5069 l
-3604 5070 l
-3568 5070 l
-3568 5070 m
-3605 5070 l
-3605 5071 l
-3568 5071 l
-3567 5071 m
-3607 5071 l
-3607 5072 l
-3567 5072 l
-3566 5072 m
-3608 5072 l
-3608 5073 l
-3566 5073 l
-3565 5073 m
-3609 5073 l
-3609 5074 l
-3565 5074 l
-3564 5074 m
-3610 5074 l
-3610 5075 l
-3564 5075 l
-3563 5075 m
-3611 5075 l
-3611 5076 l
-3563 5076 l
-3563 5076 m
-3613 5076 l
-3613 5077 l
-3563 5077 l
-3562 5077 m
-3614 5077 l
-3614 5078 l
-3562 5078 l
-3561 5078 m
-3615 5078 l
-3615 5079 l
-3561 5079 l
-3560 5079 m
-3616 5079 l
-3616 5080 l
-3560 5080 l
-3559 5080 m
-3617 5080 l
-3617 5081 l
-3559 5081 l
-3558 5081 m
-3619 5081 l
-3619 5082 l
-3558 5082 l
-3558 5082 m
-3620 5082 l
-3620 5083 l
-3558 5083 l
-3557 5083 m
-3621 5083 l
-3621 5084 l
-3557 5084 l
-3556 5084 m
-3622 5084 l
-3622 5085 l
-3556 5085 l
-3555 5085 m
-3624 5085 l
-3624 5086 l
-3555 5086 l
-3554 5086 m
-3625 5086 l
-3625 5087 l
-3554 5087 l
-3553 5087 m
-3626 5087 l
-3626 5088 l
-3553 5088 l
-3553 5088 m
-3627 5088 l
-3627 5089 l
-3553 5089 l
-3552 5089 m
-3628 5089 l
-3628 5090 l
-3552 5090 l
-3551 5090 m
-3630 5090 l
-3630 5091 l
-3551 5091 l
-3550 5091 m
-3631 5091 l
-3631 5092 l
-3550 5092 l
-3549 5092 m
-3632 5092 l
-3632 5093 l
-3549 5093 l
-3548 5093 m
-3633 5093 l
-3633 5094 l
-3548 5094 l
-3548 5094 m
-3634 5094 l
-3634 5095 l
-3548 5095 l
-3547 5095 m
-3636 5095 l
-3636 5096 l
-3547 5096 l
-3546 5096 m
-3637 5096 l
-3637 5097 l
-3546 5097 l
-3545 5097 m
-3638 5097 l
-3638 5098 l
-3545 5098 l
-3544 5098 m
-3639 5098 l
-3639 5099 l
-3544 5099 l
-3544 5099 m
-3641 5099 l
-3641 5100 l
-3544 5100 l
-3543 5100 m
-3642 5100 l
-3642 5101 l
-3543 5101 l
-3542 5101 m
-3643 5101 l
-3643 5102 l
-3542 5102 l
-3541 5102 m
-3644 5102 l
-3644 5103 l
-3541 5103 l
-3540 5103 m
-3645 5103 l
-3645 5104 l
-3540 5104 l
-3539 5104 m
-3647 5104 l
-3647 5105 l
-3539 5105 l
-3539 5105 m
-3648 5105 l
-3648 5106 l
-3539 5106 l
-3538 5106 m
-3649 5106 l
-3649 5107 l
-3538 5107 l
-3537 5107 m
-3650 5107 l
-3650 5108 l
-3537 5108 l
-3536 5108 m
-3651 5108 l
-3651 5109 l
-3536 5109 l
-3535 5109 m
-3653 5109 l
-3653 5110 l
-3535 5110 l
-3534 5110 m
-3654 5110 l
-3654 5111 l
-3534 5111 l
-3534 5111 m
-3655 5111 l
-3655 5112 l
-3534 5112 l
-3533 5112 m
-3656 5112 l
-3656 5113 l
-3533 5113 l
-3532 5113 m
-3658 5113 l
-3658 5114 l
-3532 5114 l
-3531 5114 m
-3659 5114 l
-3659 5115 l
-3531 5115 l
-3530 5115 m
-3660 5115 l
-3660 5116 l
-3530 5116 l
-3529 5116 m
-3661 5116 l
-3661 5117 l
-3529 5117 l
-3529 5117 m
-3662 5117 l
-3662 5118 l
-3529 5118 l
-3528 5118 m
-3664 5118 l
-3664 5119 l
-3528 5119 l
-3527 5119 m
-3665 5119 l
-3665 5120 l
-3527 5120 l
-3526 5120 m
-3666 5120 l
-3666 5121 l
-3526 5121 l
-3525 5121 m
-3667 5121 l
-3667 5122 l
-3525 5122 l
-3524 5122 m
-3668 5122 l
-3668 5123 l
-3524 5123 l
-3524 5123 m
-3670 5123 l
-3670 5124 l
-3524 5124 l
-3523 5124 m
-3671 5124 l
-3671 5125 l
-3523 5125 l
-3522 5125 m
-3672 5125 l
-3672 5126 l
-3522 5126 l
-3521 5126 m
-3673 5126 l
-3673 5127 l
-3521 5127 l
-3520 5127 m
-3675 5127 l
-3675 5128 l
-3520 5128 l
-3519 5128 m
-3676 5128 l
-3676 5129 l
-3519 5129 l
-3519 5129 m
-3677 5129 l
-3677 5130 l
-3519 5130 l
-3518 5130 m
-3677 5130 l
-3677 5131 l
-3518 5131 l
-3517 5131 m
-3676 5131 l
-3676 5132 l
-3517 5132 l
-3516 5132 m
-3676 5132 l
-3676 5133 l
-3516 5133 l
-3515 5133 m
-3675 5133 l
-3675 5134 l
-3515 5134 l
-3514 5134 m
-3674 5134 l
-3674 5135 l
-3514 5135 l
-3514 5135 m
-3673 5135 l
-3673 5136 l
-3514 5136 l
-3513 5136 m
-3672 5136 l
-3672 5137 l
-3513 5137 l
-3512 5137 m
-3671 5137 l
-3671 5138 l
-3512 5138 l
-3511 5138 m
-3671 5138 l
-3671 5139 l
-3511 5139 l
-3510 5139 m
-3670 5139 l
-3670 5140 l
-3510 5140 l
-3509 5140 m
-3669 5140 l
-3669 5141 l
-3509 5141 l
-3509 5141 m
-3668 5141 l
-3668 5142 l
-3509 5142 l
-3508 5142 m
-3667 5142 l
-3667 5143 l
-3508 5143 l
-3507 5143 m
-3666 5143 l
-3666 5144 l
-3507 5144 l
-3506 5144 m
-3666 5144 l
-3666 5145 l
-3506 5145 l
-3505 5145 m
-3665 5145 l
-3665 5146 l
-3505 5146 l
-3505 5146 m
-3664 5146 l
-3664 5147 l
-3505 5147 l
-3504 5147 m
-3663 5147 l
-3663 5148 l
-3504 5148 l
-3503 5148 m
-3662 5148 l
-3662 5149 l
-3503 5149 l
-3502 5149 m
-3661 5149 l
-3661 5150 l
-3502 5150 l
-3501 5150 m
-3661 5150 l
-3661 5151 l
-3501 5151 l
-3500 5151 m
-3660 5151 l
-3660 5152 l
-3500 5152 l
-3500 5152 m
-3659 5152 l
-3659 5153 l
-3500 5153 l
-3499 5153 m
-3658 5153 l
-3658 5154 l
-3499 5154 l
-3498 5154 m
-3657 5154 l
-3657 5155 l
-3498 5155 l
-3497 5155 m
-3656 5155 l
-3656 5156 l
-3497 5156 l
-3496 5156 m
-3656 5156 l
-3656 5157 l
-3496 5157 l
-3495 5157 m
-3655 5157 l
-3655 5158 l
-3495 5158 l
-3495 5158 m
-3654 5158 l
-3654 5159 l
-3495 5159 l
-3494 5159 m
-3653 5159 l
-3653 5160 l
-3494 5160 l
-3493 5160 m
-3652 5160 l
-3652 5161 l
-3493 5161 l
-3492 5161 m
-3651 5161 l
-3651 5162 l
-3492 5162 l
-3491 5162 m
-3651 5162 l
-3651 5163 l
-3491 5163 l
-3490 5163 m
-3650 5163 l
-3650 5164 l
-3490 5164 l
-3490 5164 m
-3649 5164 l
-3649 5165 l
-3490 5165 l
-3489 5165 m
-3648 5165 l
-3648 5166 l
-3489 5166 l
-3488 5166 m
-3647 5166 l
-3647 5167 l
-3488 5167 l
-3487 5167 m
-3647 5167 l
-3647 5168 l
-3487 5168 l
-3486 5168 m
-3646 5168 l
-3646 5169 l
-3486 5169 l
-3485 5169 m
-3645 5169 l
-3645 5170 l
-3485 5170 l
-3485 5170 m
-3644 5170 l
-3644 5171 l
-3485 5171 l
-3484 5171 m
-3643 5171 l
-3643 5172 l
-3484 5172 l
-3483 5172 m
-3642 5172 l
-3642 5173 l
-3483 5173 l
-3482 5173 m
-3642 5173 l
-3642 5174 l
-3482 5174 l
-3481 5174 m
-3641 5174 l
-3641 5175 l
-3481 5175 l
-3480 5175 m
-3640 5175 l
-3640 5176 l
-3480 5176 l
-3480 5176 m
-3639 5176 l
-3639 5177 l
-3480 5177 l
-3479 5177 m
-3638 5177 l
-3638 5178 l
-3479 5178 l
-3478 5178 m
-3637 5178 l
-3637 5179 l
-3478 5179 l
-3477 5179 m
-3637 5179 l
-3637 5180 l
-3477 5180 l
-3476 5180 m
-3636 5180 l
-3636 5181 l
-3476 5181 l
-3475 5181 m
-3635 5181 l
-3635 5182 l
-3475 5182 l
-3475 5182 m
-3634 5182 l
-3634 5183 l
-3475 5183 l
-3474 5183 m
-3633 5183 l
-3633 5184 l
-3474 5184 l
-3473 5184 m
-3632 5184 l
-3632 5185 l
-3473 5185 l
-3472 5185 m
-3632 5185 l
-3632 5186 l
-3472 5186 l
-3471 5186 m
-3631 5186 l
-3631 5187 l
-3471 5187 l
-3470 5187 m
-3630 5187 l
-3630 5188 l
-3470 5188 l
-3470 5188 m
-3629 5188 l
-3629 5189 l
-3470 5189 l
-3469 5189 m
-3628 5189 l
-3628 5190 l
-3469 5190 l
-3468 5190 m
-3627 5190 l
-3627 5191 l
-3468 5191 l
-3467 5191 m
-3627 5191 l
-3627 5192 l
-3467 5192 l
-3466 5192 m
-3626 5192 l
-3626 5193 l
-3466 5193 l
-3466 5193 m
-3625 5193 l
-3625 5194 l
-3466 5194 l
-3466 5194 m
-3624 5194 l
-3624 5195 l
-3466 5195 l
-3467 5195 m
-3623 5195 l
-3623 5196 l
-3467 5196 l
-3468 5196 m
-3622 5196 l
-3622 5197 l
-3468 5197 l
-3469 5197 m
-3622 5197 l
-3622 5198 l
-3469 5198 l
-3470 5198 m
-3621 5198 l
-3621 5199 l
-3470 5199 l
-3471 5199 m
-3620 5199 l
-3620 5200 l
-3471 5200 l
-3473 5200 m
-3619 5200 l
-3619 5201 l
-3473 5201 l
-3474 5201 m
-3618 5201 l
-3618 5202 l
-3474 5202 l
-3475 5202 m
-3618 5202 l
-3618 5203 l
-3475 5203 l
-3476 5203 m
-3617 5203 l
-3617 5204 l
-3476 5204 l
-3477 5204 m
-3616 5204 l
-3616 5205 l
-3477 5205 l
-3479 5205 m
-3615 5205 l
-3615 5206 l
-3479 5206 l
-3480 5206 m
-3614 5206 l
-3614 5207 l
-3480 5207 l
-3481 5207 m
-3613 5207 l
-3613 5208 l
-3481 5208 l
-3482 5208 m
-3613 5208 l
-3613 5209 l
-3482 5209 l
-3483 5209 m
-3612 5209 l
-3612 5210 l
-3483 5210 l
-3485 5210 m
-3611 5210 l
-3611 5211 l
-3485 5211 l
-3486 5211 m
-3610 5211 l
-3610 5212 l
-3486 5212 l
-3487 5212 m
-3609 5212 l
-3609 5213 l
-3487 5213 l
-3488 5213 m
-3608 5213 l
-3608 5214 l
-3488 5214 l
-3489 5214 m
-3608 5214 l
-3608 5215 l
-3489 5215 l
-3491 5215 m
-3607 5215 l
-3607 5216 l
-3491 5216 l
-3492 5216 m
-3606 5216 l
-3606 5217 l
-3492 5217 l
-3493 5217 m
-3605 5217 l
-3605 5218 l
-3493 5218 l
-3494 5218 m
-3604 5218 l
-3604 5219 l
-3494 5219 l
-3495 5219 m
-3603 5219 l
-3603 5220 l
-3495 5220 l
-3496 5220 m
-3603 5220 l
-3603 5221 l
-3496 5221 l
-3498 5221 m
-3602 5221 l
-3602 5222 l
-3498 5222 l
-3499 5222 m
-3601 5222 l
-3601 5223 l
-3499 5223 l
-3500 5223 m
-3600 5223 l
-3600 5224 l
-3500 5224 l
-3501 5224 m
-3599 5224 l
-3599 5225 l
-3501 5225 l
-3502 5225 m
-3598 5225 l
-3598 5226 l
-3502 5226 l
-3504 5226 m
-3598 5226 l
-3598 5227 l
-3504 5227 l
-3505 5227 m
-3597 5227 l
-3597 5228 l
-3505 5228 l
-3506 5228 m
-3596 5228 l
-3596 5229 l
-3506 5229 l
-3507 5229 m
-3595 5229 l
-3595 5230 l
-3507 5230 l
-3508 5230 m
-3594 5230 l
-3594 5231 l
-3508 5231 l
-3510 5231 m
-3593 5231 l
-3593 5232 l
-3510 5232 l
-3511 5232 m
-3593 5232 l
-3593 5233 l
-3511 5233 l
-3512 5233 m
-3592 5233 l
-3592 5234 l
-3512 5234 l
-3513 5234 m
-3591 5234 l
-3591 5235 l
-3513 5235 l
-3514 5235 m
-3590 5235 l
-3590 5236 l
-3514 5236 l
-3516 5236 m
-3589 5236 l
-3589 5237 l
-3516 5237 l
-3517 5237 m
-3589 5237 l
-3589 5238 l
-3517 5238 l
-3518 5238 m
-3588 5238 l
-3588 5239 l
-3518 5239 l
-3519 5239 m
-3587 5239 l
-3587 5240 l
-3519 5240 l
-3520 5240 m
-3586 5240 l
-3586 5241 l
-3520 5241 l
-3522 5241 m
-3585 5241 l
-3585 5242 l
-3522 5242 l
-3523 5242 m
-3584 5242 l
-3584 5243 l
-3523 5243 l
-3524 5243 m
-3584 5243 l
-3584 5244 l
-3524 5244 l
-3525 5244 m
-3583 5244 l
-3583 5245 l
-3525 5245 l
-3526 5245 m
-3582 5245 l
-3582 5246 l
-3526 5246 l
-3527 5246 m
-3581 5246 l
-3581 5247 l
-3527 5247 l
-3529 5247 m
-3580 5247 l
-3580 5248 l
-3529 5248 l
-3530 5248 m
-3579 5248 l
-3579 5249 l
-3530 5249 l
-3531 5249 m
-3579 5249 l
-3579 5250 l
-3531 5250 l
-3532 5250 m
-3578 5250 l
-3578 5251 l
-3532 5251 l
-3533 5251 m
-3577 5251 l
-3577 5252 l
-3533 5252 l
-3535 5252 m
-3576 5252 l
-3576 5253 l
-3535 5253 l
-3536 5253 m
-3575 5253 l
-3575 5254 l
-3536 5254 l
-3537 5254 m
-3574 5254 l
-3574 5255 l
-3537 5255 l
-3538 5255 m
-3574 5255 l
-3574 5256 l
-3538 5256 l
-3539 5256 m
-3573 5256 l
-3573 5257 l
-3539 5257 l
-3541 5257 m
-3572 5257 l
-3572 5258 l
-3541 5258 l
-3542 5258 m
-3571 5258 l
-3571 5259 l
-3542 5259 l
-3543 5259 m
-3570 5259 l
-3570 5260 l
-3543 5260 l
-3544 5260 m
-3569 5260 l
-3569 5261 l
-3544 5261 l
-3545 5261 m
-3569 5261 l
-3569 5262 l
-3545 5262 l
-3547 5262 m
-3568 5262 l
-3568 5263 l
-3547 5263 l
-3548 5263 m
-3567 5263 l
-3567 5264 l
-3548 5264 l
-3549 5264 m
-3566 5264 l
-3566 5265 l
-3549 5265 l
-3550 5265 m
-3565 5265 l
-3565 5266 l
-3550 5266 l
-3551 5266 m
-3564 5266 l
-3564 5267 l
-3551 5267 l
-3553 5267 m
-3564 5267 l
-3564 5268 l
-3553 5268 l
-3554 5268 m
-3563 5268 l
-3563 5269 l
-3554 5269 l
-3555 5269 m
-3562 5269 l
-3562 5270 l
-3555 5270 l
-3556 5270 m
-3561 5270 l
-3561 5271 l
-3556 5271 l
-3557 5271 m
-3560 5271 l
-3560 5272 l
-3557 5272 l
-Y
-3676.6 5130.1 m
-3583 5053 l
-3466 5194 l
-3559 5272 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3578 5086 m
-3548 5121 l
-3590 5123 l
-3582 5133 l
-3580 5142 l
-3580 5148 l
-3587 5159 l
-3594 5165 l
-3606 5169 l
-3618 5168 l
-3629 5161 l
-3637 5152 l
-3642 5139 l
-3641 5133 l
-3638 5125 l
-S
-3514 5163 m
-3525 5156 l
-3540 5158 l
-3559 5168 l
-3568 5176 l
-3582 5192 l
-3586 5207 l
-3581 5219 l
-3576 5226 l
-3565 5233 l
-3550 5231 l
-3531 5221 l
-3521 5213 l
-3508 5196 l
-3504 5182 l
-3508 5170 l
-3514 5163 l
-S
-1 g
-2996 5490 m
-3001 5490 l
-3001 5491 l
-2996 5491 l
-2992 5491 m
-3001 5491 l
-3001 5492 l
-2992 5492 l
-2989 5492 m
-3001 5492 l
-3001 5493 l
-2989 5493 l
-2985 5493 m
-3002 5493 l
-3002 5494 l
-2985 5494 l
-2982 5494 m
-3002 5494 l
-3002 5495 l
-2982 5495 l
-2978 5495 m
-3002 5495 l
-3002 5496 l
-2978 5496 l
-2975 5496 m
-3002 5496 l
-3002 5497 l
-2975 5497 l
-2971 5497 m
-3003 5497 l
-3003 5498 l
-2971 5498 l
-2968 5498 m
-3003 5498 l
-3003 5499 l
-2968 5499 l
-2964 5499 m
-3003 5499 l
-3003 5500 l
-2964 5500 l
-2961 5500 m
-3004 5500 l
-3004 5501 l
-2961 5501 l
-2957 5501 m
-3004 5501 l
-3004 5502 l
-2957 5502 l
-2954 5502 m
-3004 5502 l
-3004 5503 l
-2954 5503 l
-2950 5503 m
-3004 5503 l
-3004 5504 l
-2950 5504 l
-2947 5504 m
-3005 5504 l
-3005 5505 l
-2947 5505 l
-2943 5505 m
-3005 5505 l
-3005 5506 l
-2943 5506 l
-2939 5506 m
-3005 5506 l
-3005 5507 l
-2939 5507 l
-2936 5507 m
-3006 5507 l
-3006 5508 l
-2936 5508 l
-2932 5508 m
-3006 5508 l
-3006 5509 l
-2932 5509 l
-2929 5509 m
-3006 5509 l
-3006 5510 l
-2929 5510 l
-2925 5510 m
-3006 5510 l
-3006 5511 l
-2925 5511 l
-2922 5511 m
-3007 5511 l
-3007 5512 l
-2922 5512 l
-2918 5512 m
-3007 5512 l
-3007 5513 l
-2918 5513 l
-2915 5513 m
-3007 5513 l
-3007 5514 l
-2915 5514 l
-2911 5514 m
-3008 5514 l
-3008 5515 l
-2911 5515 l
-2908 5515 m
-3008 5515 l
-3008 5516 l
-2908 5516 l
-2904 5516 m
-3008 5516 l
-3008 5517 l
-2904 5517 l
-2901 5517 m
-3008 5517 l
-3008 5518 l
-2901 5518 l
-2897 5518 m
-3009 5518 l
-3009 5519 l
-2897 5519 l
-2894 5519 m
-3009 5519 l
-3009 5520 l
-2894 5520 l
-2890 5520 m
-3009 5520 l
-3009 5521 l
-2890 5521 l
-2887 5521 m
-3010 5521 l
-3010 5522 l
-2887 5522 l
-2883 5522 m
-3010 5522 l
-3010 5523 l
-2883 5523 l
-2879 5523 m
-3010 5523 l
-3010 5524 l
-2879 5524 l
-2876 5524 m
-3010 5524 l
-3010 5525 l
-2876 5525 l
-2872 5525 m
-3011 5525 l
-3011 5526 l
-2872 5526 l
-2869 5526 m
-3011 5526 l
-3011 5527 l
-2869 5527 l
-2865 5527 m
-3011 5527 l
-3011 5528 l
-2865 5528 l
-2862 5528 m
-3012 5528 l
-3012 5529 l
-2862 5529 l
-2858 5529 m
-3012 5529 l
-3012 5530 l
-2858 5530 l
-2855 5530 m
-3012 5530 l
-3012 5531 l
-2855 5531 l
-2851 5531 m
-3012 5531 l
-3012 5532 l
-2851 5532 l
-2848 5532 m
-3013 5532 l
-3013 5533 l
-2848 5533 l
-2844 5533 m
-3013 5533 l
-3013 5534 l
-2844 5534 l
-2841 5534 m
-3013 5534 l
-3013 5535 l
-2841 5535 l
-2837 5535 m
-3014 5535 l
-3014 5536 l
-2837 5536 l
-2834 5536 m
-3014 5536 l
-3014 5537 l
-2834 5537 l
-2830 5537 m
-3014 5537 l
-3014 5538 l
-2830 5538 l
-2827 5538 m
-3014 5538 l
-3014 5539 l
-2827 5539 l
-2827 5539 m
-3015 5539 l
-3015 5540 l
-2827 5540 l
-2827 5540 m
-3015 5540 l
-3015 5542 l
-2827 5542 l
-2827 5542 m
-3016 5542 l
-3016 5543 l
-2827 5543 l
-2828 5543 m
-3016 5543 l
-3016 5546 l
-2828 5546 l
-2828 5546 m
-3017 5546 l
-3017 5547 l
-2828 5547 l
-2829 5547 m
-3017 5547 l
-3017 5549 l
-2829 5549 l
-2829 5549 m
-3018 5549 l
-3018 5550 l
-2829 5550 l
-2830 5550 m
-3018 5550 l
-3018 5553 l
-2830 5553 l
-2830 5553 m
-3019 5553 l
-3019 5554 l
-2830 5554 l
-2831 5554 m
-3019 5554 l
-3019 5556 l
-2831 5556 l
-2831 5556 m
-3020 5556 l
-3020 5557 l
-2831 5557 l
-2832 5557 m
-3020 5557 l
-3020 5560 l
-2832 5560 l
-2832 5560 m
-3021 5560 l
-3021 5561 l
-2832 5561 l
-2833 5561 m
-3021 5561 l
-3021 5563 l
-2833 5563 l
-2833 5563 m
-3022 5563 l
-3022 5564 l
-2833 5564 l
-2834 5564 m
-3022 5564 l
-3022 5567 l
-2834 5567 l
-2834 5567 m
-3023 5567 l
-3023 5568 l
-2834 5568 l
-2835 5568 m
-3023 5568 l
-3023 5570 l
-2835 5570 l
-2835 5570 m
-3024 5570 l
-3024 5571 l
-2835 5571 l
-2836 5571 m
-3024 5571 l
-3024 5574 l
-2836 5574 l
-2836 5574 m
-3025 5574 l
-3025 5575 l
-2836 5575 l
-2837 5575 m
-3025 5575 l
-3025 5577 l
-2837 5577 l
-2837 5577 m
-3026 5577 l
-3026 5578 l
-2837 5578 l
-2838 5578 m
-3026 5578 l
-3026 5581 l
-2838 5581 l
-2838 5581 m
-3027 5581 l
-3027 5582 l
-2838 5582 l
-2839 5582 m
-3027 5582 l
-3027 5584 l
-2839 5584 l
-2839 5584 m
-3028 5584 l
-3028 5585 l
-2839 5585 l
-2840 5585 m
-3028 5585 l
-3028 5588 l
-2840 5588 l
-2840 5588 m
-3029 5588 l
-3029 5589 l
-2840 5589 l
-2841 5589 m
-3029 5589 l
-3029 5591 l
-2841 5591 l
-2841 5591 m
-3030 5591 l
-3030 5592 l
-2841 5592 l
-2842 5592 m
-3030 5592 l
-3030 5595 l
-2842 5595 l
-2842 5595 m
-3031 5595 l
-3031 5596 l
-2842 5596 l
-2843 5596 m
-3031 5596 l
-3031 5598 l
-2843 5598 l
-2843 5598 m
-3032 5598 l
-3032 5599 l
-2843 5599 l
-2844 5599 m
-3032 5599 l
-3032 5602 l
-2844 5602 l
-2844 5602 m
-3033 5602 l
-3033 5603 l
-2844 5603 l
-2845 5603 m
-3033 5603 l
-3033 5605 l
-2845 5605 l
-2845 5605 m
-3034 5605 l
-3034 5606 l
-2845 5606 l
-2846 5606 m
-3034 5606 l
-3034 5607 l
-2846 5607 l
-2846 5607 m
-3030 5607 l
-3030 5608 l
-2846 5608 l
-2846 5608 m
-3027 5608 l
-3027 5609 l
-2846 5609 l
-2846 5609 m
-3023 5609 l
-3023 5610 l
-2846 5610 l
-2847 5610 m
-3020 5610 l
-3020 5611 l
-2847 5611 l
-2847 5611 m
-3016 5611 l
-3016 5612 l
-2847 5612 l
-2847 5612 m
-3013 5612 l
-3013 5613 l
-2847 5613 l
-2848 5613 m
-3009 5613 l
-3009 5614 l
-2848 5614 l
-2848 5614 m
-3006 5614 l
-3006 5615 l
-2848 5615 l
-2848 5615 m
-3002 5615 l
-3002 5616 l
-2848 5616 l
-2848 5616 m
-2999 5616 l
-2999 5617 l
-2848 5617 l
-2849 5617 m
-2995 5617 l
-2995 5618 l
-2849 5618 l
-2849 5618 m
-2991 5618 l
-2991 5619 l
-2849 5619 l
-2849 5619 m
-2988 5619 l
-2988 5620 l
-2849 5620 l
-2850 5620 m
-2984 5620 l
-2984 5621 l
-2850 5621 l
-2850 5621 m
-2981 5621 l
-2981 5622 l
-2850 5622 l
-2850 5622 m
-2977 5622 l
-2977 5623 l
-2850 5623 l
-2850 5623 m
-2974 5623 l
-2974 5624 l
-2850 5624 l
-2851 5624 m
-2970 5624 l
-2970 5625 l
-2851 5625 l
-2851 5625 m
-2967 5625 l
-2967 5626 l
-2851 5626 l
-2851 5626 m
-2963 5626 l
-2963 5627 l
-2851 5627 l
-2852 5627 m
-2960 5627 l
-2960 5628 l
-2852 5628 l
-2852 5628 m
-2956 5628 l
-2956 5629 l
-2852 5629 l
-2852 5629 m
-2953 5629 l
-2953 5630 l
-2852 5630 l
-2852 5630 m
-2949 5630 l
-2949 5631 l
-2852 5631 l
-2853 5631 m
-2945 5631 l
-2945 5632 l
-2853 5632 l
-2853 5632 m
-2942 5632 l
-2942 5633 l
-2853 5633 l
-2853 5633 m
-2938 5633 l
-2938 5634 l
-2853 5634 l
-2854 5634 m
-2935 5634 l
-2935 5635 l
-2854 5635 l
-2854 5635 m
-2931 5635 l
-2931 5636 l
-2854 5636 l
-2854 5636 m
-2928 5636 l
-2928 5637 l
-2854 5637 l
-2854 5637 m
-2924 5637 l
-2924 5638 l
-2854 5638 l
-2855 5638 m
-2921 5638 l
-2921 5639 l
-2855 5639 l
-2855 5639 m
-2917 5639 l
-2917 5640 l
-2855 5640 l
-2855 5640 m
-2914 5640 l
-2914 5641 l
-2855 5641 l
-2856 5641 m
-2910 5641 l
-2910 5642 l
-2856 5642 l
-2856 5642 m
-2907 5642 l
-2907 5643 l
-2856 5643 l
-2856 5643 m
-2903 5643 l
-2903 5644 l
-2856 5644 l
-2856 5644 m
-2899 5644 l
-2899 5645 l
-2856 5645 l
-2857 5645 m
-2896 5645 l
-2896 5646 l
-2857 5646 l
-2857 5646 m
-2892 5646 l
-2892 5647 l
-2857 5647 l
-2857 5647 m
-2889 5647 l
-2889 5648 l
-2857 5648 l
-2858 5648 m
-2885 5648 l
-2885 5649 l
-2858 5649 l
-2858 5649 m
-2882 5649 l
-2882 5650 l
-2858 5650 l
-2858 5650 m
-2878 5650 l
-2878 5651 l
-2858 5651 l
-2858 5651 m
-2875 5651 l
-2875 5652 l
-2858 5652 l
-2859 5652 m
-2871 5652 l
-2871 5653 l
-2859 5653 l
-2859 5653 m
-2868 5653 l
-2868 5654 l
-2859 5654 l
-2859 5654 m
-2864 5654 l
-2864 5655 l
-2859 5655 l
-Y
-3033.1 5606.1 m
-3000 5490 l
-2827 5539 l
-2860 5655 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2940 5537 m
-2941 5528 l
-2952 5521 l
-2960 5518 l
-2973 5519 l
-2985 5529 l
-2995 5548 l
-3000 5568 l
-3001 5585 l
-2995 5595 l
-2984 5603 l
-2980 5604 l
-2967 5603 l
-2957 5597 l
-2949 5586 l
-2948 5582 l
-2949 5569 l
-2955 5559 l
-2965 5551 l
-2969 5550 l
-2983 5551 l
-2993 5557 l
-3000 5568 l
-S
-2884 5540 m
-2897 5541 l
-2909 5550 l
-2918 5569 l
-2922 5581 l
-2923 5603 l
-2919 5617 l
-2908 5624 l
-2900 5627 l
-2887 5626 l
-2875 5616 l
-2866 5597 l
-2862 5585 l
-2860 5564 l
-2865 5550 l
-2876 5542 l
-2884 5540 l
-S
-1 g
-1950 5410 m
-1955 5410 l
-1955 5411 l
-1950 5411 l
-1949 5411 m
-1957 5411 l
-1957 5412 l
-1949 5412 l
-1949 5412 m
-1960 5412 l
-1960 5413 l
-1949 5413 l
-1948 5413 m
-1962 5413 l
-1962 5414 l
-1948 5414 l
-1948 5414 m
-1965 5414 l
-1965 5415 l
-1948 5415 l
-1948 5415 m
-1967 5415 l
-1967 5416 l
-1948 5416 l
-1947 5416 m
-1970 5416 l
-1970 5417 l
-1947 5417 l
-1947 5417 m
-1972 5417 l
-1972 5418 l
-1947 5418 l
-1946 5418 m
-1975 5418 l
-1975 5419 l
-1946 5419 l
-1946 5419 m
-1977 5419 l
-1977 5420 l
-1946 5420 l
-1946 5420 m
-1980 5420 l
-1980 5421 l
-1946 5421 l
-1945 5421 m
-1982 5421 l
-1982 5422 l
-1945 5422 l
-1945 5422 m
-1985 5422 l
-1985 5423 l
-1945 5423 l
-1944 5423 m
-1987 5423 l
-1987 5424 l
-1944 5424 l
-1944 5424 m
-1990 5424 l
-1990 5425 l
-1944 5425 l
-1944 5425 m
-1992 5425 l
-1992 5426 l
-1944 5426 l
-1943 5426 m
-1995 5426 l
-1995 5427 l
-1943 5427 l
-1943 5427 m
-1997 5427 l
-1997 5428 l
-1943 5428 l
-1942 5428 m
-2000 5428 l
-2000 5429 l
-1942 5429 l
-1942 5429 m
-2002 5429 l
-2002 5430 l
-1942 5430 l
-1942 5430 m
-2004 5430 l
-2004 5431 l
-1942 5431 l
-1941 5431 m
-2007 5431 l
-2007 5432 l
-1941 5432 l
-1941 5432 m
-2009 5432 l
-2009 5433 l
-1941 5433 l
-1940 5433 m
-2012 5433 l
-2012 5434 l
-1940 5434 l
-1940 5434 m
-2014 5434 l
-2014 5435 l
-1940 5435 l
-1940 5435 m
-2017 5435 l
-2017 5436 l
-1940 5436 l
-1939 5436 m
-2019 5436 l
-2019 5437 l
-1939 5437 l
-1939 5437 m
-2022 5437 l
-2022 5438 l
-1939 5438 l
-1939 5438 m
-2024 5438 l
-2024 5439 l
-1939 5439 l
-1938 5439 m
-2027 5439 l
-2027 5440 l
-1938 5440 l
-1938 5440 m
-2029 5440 l
-2029 5441 l
-1938 5441 l
-1937 5441 m
-2032 5441 l
-2032 5442 l
-1937 5442 l
-1937 5442 m
-2034 5442 l
-2034 5443 l
-1937 5443 l
-1937 5443 m
-2037 5443 l
-2037 5444 l
-1937 5444 l
-1936 5444 m
-2039 5444 l
-2039 5445 l
-1936 5445 l
-1936 5445 m
-2042 5445 l
-2042 5446 l
-1936 5446 l
-1935 5446 m
-2044 5446 l
-2044 5447 l
-1935 5447 l
-1935 5447 m
-2047 5447 l
-2047 5448 l
-1935 5448 l
-1935 5448 m
-2049 5448 l
-2049 5449 l
-1935 5449 l
-1934 5449 m
-2052 5449 l
-2052 5450 l
-1934 5450 l
-1934 5450 m
-2054 5450 l
-2054 5451 l
-1934 5451 l
-1933 5451 m
-2057 5451 l
-2057 5452 l
-1933 5452 l
-1933 5452 m
-2059 5452 l
-2059 5453 l
-1933 5453 l
-1933 5453 m
-2062 5453 l
-2062 5454 l
-1933 5454 l
-1932 5454 m
-2064 5454 l
-2064 5455 l
-1932 5455 l
-1932 5455 m
-2067 5455 l
-2067 5456 l
-1932 5456 l
-1931 5456 m
-2069 5456 l
-2069 5457 l
-1931 5457 l
-1931 5457 m
-2072 5457 l
-2072 5458 l
-1931 5458 l
-1931 5458 m
-2074 5458 l
-2074 5459 l
-1931 5459 l
-1930 5459 m
-2077 5459 l
-2077 5460 l
-1930 5460 l
-1930 5460 m
-2079 5460 l
-2079 5461 l
-1930 5461 l
-1929 5461 m
-2082 5461 l
-2082 5462 l
-1929 5462 l
-1929 5462 m
-2084 5462 l
-2084 5463 l
-1929 5463 l
-1929 5463 m
-2087 5463 l
-2087 5464 l
-1929 5464 l
-1928 5464 m
-2089 5464 l
-2089 5465 l
-1928 5465 l
-1928 5465 m
-2092 5465 l
-2092 5466 l
-1928 5466 l
-1927 5466 m
-2094 5466 l
-2094 5467 l
-1927 5467 l
-1927 5467 m
-2097 5467 l
-2097 5468 l
-1927 5468 l
-1927 5468 m
-2099 5468 l
-2099 5469 l
-1927 5469 l
-1926 5469 m
-2102 5469 l
-2102 5470 l
-1926 5470 l
-1926 5470 m
-2104 5470 l
-2104 5471 l
-1926 5471 l
-1925 5471 m
-2107 5471 l
-2107 5472 l
-1925 5472 l
-1925 5472 m
-2109 5472 l
-2109 5473 l
-1925 5473 l
-1925 5473 m
-2112 5473 l
-2112 5474 l
-1925 5474 l
-1924 5474 m
-2114 5474 l
-2114 5475 l
-1924 5475 l
-1924 5475 m
-2117 5475 l
-2117 5476 l
-1924 5476 l
-1923 5476 m
-2119 5476 l
-2119 5477 l
-1923 5477 l
-1923 5477 m
-2122 5477 l
-2122 5478 l
-1923 5478 l
-1923 5478 m
-2121 5478 l
-2121 5479 l
-1923 5479 l
-1922 5479 m
-2121 5479 l
-2121 5481 l
-1922 5481 l
-1921 5481 m
-2120 5481 l
-2120 5483 l
-1921 5483 l
-1921 5483 m
-2119 5483 l
-2119 5484 l
-1921 5484 l
-1920 5484 m
-2119 5484 l
-2119 5486 l
-1920 5486 l
-1919 5486 m
-2118 5486 l
-2118 5488 l
-1919 5488 l
-1919 5488 m
-2117 5488 l
-2117 5489 l
-1919 5489 l
-1918 5489 m
-2117 5489 l
-2117 5491 l
-1918 5491 l
-1917 5491 m
-2116 5491 l
-2116 5493 l
-1917 5493 l
-1917 5493 m
-2115 5493 l
-2115 5494 l
-1917 5494 l
-1916 5494 m
-2115 5494 l
-2115 5496 l
-1916 5496 l
-1915 5496 m
-2114 5496 l
-2114 5498 l
-1915 5498 l
-1915 5498 m
-2113 5498 l
-2113 5499 l
-1915 5499 l
-1914 5499 m
-2113 5499 l
-2113 5501 l
-1914 5501 l
-1913 5501 m
-2112 5501 l
-2112 5503 l
-1913 5503 l
-1913 5503 m
-2111 5503 l
-2111 5504 l
-1913 5504 l
-1912 5504 m
-2111 5504 l
-2111 5506 l
-1912 5506 l
-1911 5506 m
-2110 5506 l
-2110 5508 l
-1911 5508 l
-1911 5508 m
-2109 5508 l
-2109 5509 l
-1911 5509 l
-1910 5509 m
-2109 5509 l
-2109 5511 l
-1910 5511 l
-1909 5511 m
-2108 5511 l
-2108 5513 l
-1909 5513 l
-1909 5513 m
-2107 5513 l
-2107 5514 l
-1909 5514 l
-1908 5514 m
-2107 5514 l
-2107 5516 l
-1908 5516 l
-1907 5516 m
-2106 5516 l
-2106 5518 l
-1907 5518 l
-1907 5518 m
-2105 5518 l
-2105 5519 l
-1907 5519 l
-1906 5519 m
-2105 5519 l
-2105 5521 l
-1906 5521 l
-1906 5521 m
-2104 5521 l
-2104 5522 l
-1906 5522 l
-1906 5522 m
-2104 5522 l
-2104 5523 l
-1906 5523 l
-1908 5523 m
-2103 5523 l
-2103 5524 l
-1908 5524 l
-1911 5524 m
-2103 5524 l
-2103 5525 l
-1911 5525 l
-1913 5525 m
-2103 5525 l
-2103 5526 l
-1913 5526 l
-1916 5526 m
-2102 5526 l
-2102 5527 l
-1916 5527 l
-1918 5527 m
-2102 5527 l
-2102 5528 l
-1918 5528 l
-1921 5528 m
-2101 5528 l
-2101 5529 l
-1921 5529 l
-1923 5529 m
-2101 5529 l
-2101 5530 l
-1923 5530 l
-1926 5530 m
-2101 5530 l
-2101 5531 l
-1926 5531 l
-1928 5531 m
-2100 5531 l
-2100 5532 l
-1928 5532 l
-1931 5532 m
-2100 5532 l
-2100 5533 l
-1931 5533 l
-1933 5533 m
-2099 5533 l
-2099 5534 l
-1933 5534 l
-1936 5534 m
-2099 5534 l
-2099 5535 l
-1936 5535 l
-1938 5535 m
-2099 5535 l
-2099 5536 l
-1938 5536 l
-1941 5536 m
-2098 5536 l
-2098 5537 l
-1941 5537 l
-1943 5537 m
-2098 5537 l
-2098 5538 l
-1943 5538 l
-1946 5538 m
-2097 5538 l
-2097 5539 l
-1946 5539 l
-1948 5539 m
-2097 5539 l
-2097 5540 l
-1948 5540 l
-1951 5540 m
-2097 5540 l
-2097 5541 l
-1951 5541 l
-1953 5541 m
-2096 5541 l
-2096 5542 l
-1953 5542 l
-1956 5542 m
-2096 5542 l
-2096 5543 l
-1956 5543 l
-1958 5543 m
-2095 5543 l
-2095 5544 l
-1958 5544 l
-1961 5544 m
-2095 5544 l
-2095 5545 l
-1961 5545 l
-1963 5545 m
-2095 5545 l
-2095 5546 l
-1963 5546 l
-1966 5546 m
-2094 5546 l
-2094 5547 l
-1966 5547 l
-1968 5547 m
-2094 5547 l
-2094 5548 l
-1968 5548 l
-1971 5548 m
-2093 5548 l
-2093 5549 l
-1971 5549 l
-1973 5549 m
-2093 5549 l
-2093 5550 l
-1973 5550 l
-1976 5550 m
-2093 5550 l
-2093 5551 l
-1976 5551 l
-1978 5551 m
-2092 5551 l
-2092 5552 l
-1978 5552 l
-1981 5552 m
-2092 5552 l
-2092 5553 l
-1981 5553 l
-1983 5553 m
-2091 5553 l
-2091 5554 l
-1983 5554 l
-1986 5554 m
-2091 5554 l
-2091 5555 l
-1986 5555 l
-1988 5555 m
-2091 5555 l
-2091 5556 l
-1988 5556 l
-1991 5556 m
-2090 5556 l
-2090 5557 l
-1991 5557 l
-1993 5557 m
-2090 5557 l
-2090 5558 l
-1993 5558 l
-1996 5558 m
-2089 5558 l
-2089 5559 l
-1996 5559 l
-1998 5559 m
-2089 5559 l
-2089 5560 l
-1998 5560 l
-2001 5560 m
-2089 5560 l
-2089 5561 l
-2001 5561 l
-2003 5561 m
-2088 5561 l
-2088 5562 l
-2003 5562 l
-2006 5562 m
-2088 5562 l
-2088 5563 l
-2006 5563 l
-2008 5563 m
-2087 5563 l
-2087 5564 l
-2008 5564 l
-2011 5564 m
-2087 5564 l
-2087 5565 l
-2011 5565 l
-2013 5565 m
-2087 5565 l
-2087 5566 l
-2013 5566 l
-2016 5566 m
-2086 5566 l
-2086 5567 l
-2016 5567 l
-2018 5567 m
-2086 5567 l
-2086 5568 l
-2018 5568 l
-2021 5568 m
-2085 5568 l
-2085 5569 l
-2021 5569 l
-2023 5569 m
-2085 5569 l
-2085 5570 l
-2023 5570 l
-2026 5570 m
-2085 5570 l
-2085 5571 l
-2026 5571 l
-2028 5571 m
-2084 5571 l
-2084 5572 l
-2028 5572 l
-2031 5572 m
-2084 5572 l
-2084 5573 l
-2031 5573 l
-2033 5573 m
-2083 5573 l
-2083 5574 l
-2033 5574 l
-2036 5574 m
-2083 5574 l
-2083 5575 l
-2036 5575 l
-2038 5575 m
-2083 5575 l
-2083 5576 l
-2038 5576 l
-2041 5576 m
-2082 5576 l
-2082 5577 l
-2041 5577 l
-2043 5577 m
-2082 5577 l
-2082 5578 l
-2043 5578 l
-2046 5578 m
-2081 5578 l
-2081 5579 l
-2046 5579 l
-2048 5579 m
-2081 5579 l
-2081 5580 l
-2048 5580 l
-2051 5580 m
-2081 5580 l
-2081 5581 l
-2051 5581 l
-2053 5581 m
-2080 5581 l
-2080 5582 l
-2053 5582 l
-2056 5582 m
-2080 5582 l
-2080 5583 l
-2056 5583 l
-2058 5583 m
-2079 5583 l
-2079 5584 l
-2058 5584 l
-2061 5584 m
-2079 5584 l
-2079 5585 l
-2061 5585 l
-2063 5585 m
-2079 5585 l
-2079 5586 l
-2063 5586 l
-2066 5586 m
-2078 5586 l
-2078 5587 l
-2066 5587 l
-2068 5587 m
-2078 5587 l
-2078 5588 l
-2068 5588 l
-2071 5588 m
-2077 5588 l
-2077 5589 l
-2071 5589 l
-2073 5589 m
-2077 5589 l
-2077 5590 l
-2073 5590 l
-Y
-1950.7 5409.6 m
-1906 5522 l
-2076 5590 l
-2121 5478 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1993 5507 m
-1993 5494 l
-1989 5483 l
-1979 5475 l
-1975 5473 l
-1962 5472 l
-1951 5477 l
-1942 5487 l
-1941 5491 l
-1940 5504 l
-1944 5515 l
-1955 5524 l
-1958 5525 l
-1972 5526 l
-1982 5521 l
-1993 5507 l
-2000 5488 l
-2004 5467 l
-2001 5452 l
-1991 5444 l
-1983 5441 l
-1970 5440 l
-1963 5446 l
-S
-2032 5555 m
-2022 5546 l
-2019 5531 l
-2023 5510 l
-2027 5499 l
-2039 5481 l
-2052 5472 l
-2065 5473 l
-2072 5476 l
-2083 5485 l
-2086 5500 l
-2082 5521 l
-2077 5532 l
-2065 5550 l
-2053 5559 l
-2040 5558 l
-2032 5555 l
-S
-1 g
-Y
-467.2 2211.2 m
-282 2211 l
-282 5715 l
-467 5715 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-307 2236 m
-412 2236 l
-S
-307 2236 m
-307 2301 l
-S
-357 2236 m
-357 2276 l
-S
-412 2236 m
-412 2301 l
-S
-357 2387 m
-347 2377 l
-342 2367 l
-342 2352 l
-347 2341 l
-357 2331 l
-372 2326 l
-382 2326 l
-397 2331 l
-407 2341 l
-412 2352 l
-412 2367 l
-407 2377 l
-397 2387 l
-S
-307 2422 m
-412 2422 l
-S
-307 2457 m
-312 2462 l
-307 2467 l
-302 2462 l
-307 2457 l
-S
-342 2462 m
-412 2462 l
-S
-342 2502 m
-447 2502 l
-S
-357 2502 m
-347 2512 l
-342 2522 l
-342 2537 l
-347 2547 l
-357 2557 l
-372 2562 l
-382 2562 l
-397 2557 l
-407 2547 l
-412 2537 l
-412 2522 l
-407 2512 l
-397 2502 l
-S
-307 2602 m
-392 2602 l
-407 2607 l
-412 2617 l
-412 2627 l
-S
-342 2587 m
-342 2622 l
-S
-307 2652 m
-312 2657 l
-307 2662 l
-302 2657 l
-307 2652 l
-S
-342 2657 m
-412 2657 l
-S
-357 2752 m
-347 2742 l
-342 2732 l
-342 2717 l
-347 2707 l
-357 2697 l
-372 2692 l
-382 2692 l
-397 2697 l
-407 2707 l
-412 2717 l
-412 2732 l
-407 2742 l
-397 2752 l
-S
-357 2923 m
-347 2913 l
-342 2903 l
-342 2888 l
-347 2878 l
-357 2868 l
-372 2863 l
-382 2863 l
-397 2868 l
-407 2878 l
-412 2888 l
-412 2903 l
-407 2913 l
-397 2923 l
-S
-342 2978 m
-347 2968 l
-357 2958 l
-372 2953 l
-382 2953 l
-397 2958 l
-407 2968 l
-412 2978 l
-412 2993 l
-407 3003 l
-397 3013 l
-382 3018 l
-372 3018 l
-357 3013 l
-347 3003 l
-342 2993 l
-342 2978 l
-S
-342 3073 m
-347 3063 l
-357 3053 l
-372 3048 l
-382 3048 l
-397 3053 l
-407 3063 l
-412 3073 l
-412 3088 l
-407 3098 l
-397 3108 l
-382 3113 l
-372 3113 l
-357 3108 l
-347 3098 l
-342 3088 l
-342 3073 l
-S
-342 3148 m
-412 3148 l
-S
-372 3148 m
-357 3153 l
-347 3163 l
-342 3174 l
-342 3189 l
-S
-307 3269 m
-412 3269 l
-S
-357 3269 m
-347 3259 l
-342 3249 l
-342 3234 l
-347 3224 l
-357 3214 l
-372 3209 l
-382 3209 l
-397 3214 l
-407 3224 l
-412 3234 l
-412 3249 l
-407 3259 l
-397 3269 l
-S
-307 3304 m
-312 3309 l
-307 3314 l
-302 3309 l
-307 3304 l
-S
-342 3309 m
-412 3309 l
-S
-342 3349 m
-412 3349 l
-S
-362 3349 m
-347 3364 l
-342 3374 l
-342 3389 l
-347 3399 l
-362 3404 l
-412 3404 l
-S
-342 3499 m
-412 3499 l
-S
-357 3499 m
-347 3489 l
-342 3479 l
-342 3464 l
-347 3454 l
-357 3444 l
-372 3439 l
-382 3439 l
-397 3444 l
-407 3454 l
-412 3464 l
-412 3479 l
-407 3489 l
-397 3499 l
-S
-307 3544 m
-392 3544 l
-407 3549 l
-412 3559 l
-412 3569 l
-S
-342 3529 m
-342 3564 l
-S
-372 3595 m
-372 3655 l
-362 3655 l
-352 3650 l
-347 3645 l
-342 3635 l
-342 3620 l
-347 3610 l
-357 3600 l
-372 3595 l
-382 3595 l
-397 3600 l
-407 3610 l
-412 3620 l
-412 3635 l
-407 3645 l
-397 3655 l
-S
-357 3740 m
-347 3735 l
-342 3720 l
-342 3705 l
-347 3690 l
-357 3685 l
-367 3690 l
-372 3700 l
-377 3725 l
-382 3735 l
-392 3740 l
-397 3740 l
-407 3735 l
-412 3720 l
-412 3705 l
-407 3690 l
-397 3685 l
-S
-342 3780 m
-347 3775 l
-352 3780 l
-347 3785 l
-342 3780 l
-S
-407 3785 m
-412 3780 l
-407 3775 l
-402 3780 l
-407 3785 l
-417 3785 l
-427 3780 l
-432 3775 l
-S
-342 3905 m
-412 3905 l
-S
-362 3905 m
-347 3920 l
-342 3930 l
-342 3945 l
-347 3955 l
-362 3960 l
-412 3960 l
-S
-362 3960 m
-347 3975 l
-342 3985 l
-342 4000 l
-347 4011 l
-362 4016 l
-412 4016 l
-S
-372 4051 m
-372 4111 l
-362 4111 l
-352 4106 l
-347 4101 l
-342 4091 l
-342 4076 l
-347 4066 l
-357 4056 l
-372 4051 l
-382 4051 l
-397 4056 l
-407 4066 l
-412 4076 l
-412 4091 l
-407 4101 l
-397 4111 l
-S
-342 4201 m
-412 4201 l
-S
-357 4201 m
-347 4191 l
-342 4181 l
-342 4166 l
-347 4156 l
-357 4146 l
-372 4141 l
-382 4141 l
-397 4146 l
-407 4156 l
-412 4166 l
-412 4181 l
-407 4191 l
-397 4201 l
-S
-342 4241 m
-412 4241 l
-S
-362 4241 m
-347 4256 l
-342 4266 l
-342 4281 l
-347 4291 l
-362 4296 l
-412 4296 l
-S
-372 4411 m
-372 4472 l
-362 4472 l
-352 4467 l
-347 4462 l
-342 4452 l
-342 4437 l
-347 4427 l
-357 4417 l
-372 4411 l
-382 4411 l
-397 4417 l
-407 4427 l
-412 4437 l
-412 4452 l
-407 4462 l
-397 4472 l
-S
-342 4562 m
-447 4562 l
-S
-357 4562 m
-347 4552 l
-342 4542 l
-342 4527 l
-347 4517 l
-357 4507 l
-372 4502 l
-382 4502 l
-397 4507 l
-407 4517 l
-412 4527 l
-412 4542 l
-407 4552 l
-397 4562 l
-S
-342 4602 m
-392 4602 l
-407 4607 l
-412 4617 l
-412 4632 l
-407 4642 l
-392 4657 l
-S
-342 4657 m
-412 4657 l
-S
-307 4692 m
-312 4697 l
-307 4702 l
-302 4697 l
-307 4692 l
-S
-342 4697 m
-412 4697 l
-S
-342 4737 m
-412 4737 l
-S
-362 4737 m
-347 4752 l
-342 4762 l
-342 4777 l
-347 4787 l
-362 4792 l
-412 4792 l
-S
-342 4853 m
-347 4843 l
-357 4833 l
-372 4827 l
-382 4827 l
-397 4833 l
-407 4843 l
-412 4853 l
-412 4868 l
-407 4878 l
-397 4888 l
-382 4893 l
-372 4893 l
-357 4888 l
-347 4878 l
-342 4868 l
-342 4853 l
-S
-342 4923 m
-412 4978 l
-S
-342 4978 m
-412 4923 l
-S
-307 5133 m
-387 5133 l
-402 5128 l
-407 5123 l
-412 5113 l
-412 5103 l
-407 5093 l
-402 5088 l
-387 5083 l
-377 5083 l
-S
-332 5173 m
-327 5173 l
-317 5178 l
-312 5183 l
-307 5193 l
-307 5213 l
-312 5223 l
-317 5228 l
-327 5233 l
-337 5233 l
-347 5228 l
-362 5218 l
-412 5168 l
-412 5238 l
-S
-307 5299 m
-312 5284 l
-327 5274 l
-352 5269 l
-367 5269 l
-392 5274 l
-407 5284 l
-412 5299 l
-412 5309 l
-407 5324 l
-392 5334 l
-367 5339 l
-352 5339 l
-327 5334 l
-312 5324 l
-307 5309 l
-307 5299 l
-S
-307 5399 m
-312 5384 l
-327 5374 l
-352 5369 l
-367 5369 l
-392 5374 l
-407 5384 l
-412 5399 l
-412 5409 l
-407 5424 l
-392 5434 l
-367 5439 l
-352 5439 l
-327 5434 l
-312 5424 l
-307 5409 l
-307 5399 l
-S
-307 5499 m
-312 5484 l
-327 5474 l
-352 5469 l
-367 5469 l
-392 5474 l
-407 5484 l
-412 5499 l
-412 5509 l
-407 5524 l
-392 5534 l
-367 5539 l
-352 5539 l
-327 5534 l
-312 5524 l
-307 5509 l
-307 5499 l
-S
-402 5579 m
-407 5574 l
-412 5579 l
-407 5584 l
-402 5579 l
-S
-307 5649 m
-312 5634 l
-327 5624 l
-352 5619 l
-367 5619 l
-392 5624 l
-407 5634 l
-412 5649 l
-412 5659 l
-407 5675 l
-392 5685 l
-367 5690 l
-352 5690 l
-327 5685 l
-312 5675 l
-307 5659 l
-307 5649 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontc.eps b/ast-5.3-1/sun211_figures/frontc.eps
deleted file mode 100644
index 668c667..0000000
--- a/ast-5.3-1/sun211_figures/frontc.eps
+++ /dev/null
@@ -1,14114 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:28
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 0 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 1 0 rg
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 0 1 rg
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/frontc_bw.eps b/ast-5.3-1/sun211_figures/frontc_bw.eps
deleted file mode 100644
index cf6e8d0..0000000
--- a/ast-5.3-1/sun211_figures/frontc_bw.eps
+++ /dev/null
@@ -1,14113 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 22 206 490 605
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:48:46
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-4877 3093 m
-4662 3178 l
-4355 3300 l
-4048 3421 l
-3740 3543 l
-3433 3665 l
-3126 3786 l
-2819 3908 l
-2512 4029 l
-2205 4151 l
-2203 4152 l
-2202 4152 l
-2200 4153 l
-2199 4154 l
-2197 4154 l
-2195 4155 l
-2194 4155 l
-2192 4156 l
-2191 4157 l
-2189 4157 l
-2188 4158 l
-2186 4159 l
-2184 4159 l
-2183 4160 l
-2181 4160 l
-2180 4161 l
-2178 4162 l
-2177 4162 l
-2175 4163 l
-2173 4164 l
-2172 4164 l
-2170 4165 l
-2169 4165 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4059 1777 m
-4039 1803 l
-3834 2062 l
-3628 2321 l
-3423 2580 l
-3218 2839 l
-3013 3098 l
-2808 3357 l
-2602 3616 l
-2397 3875 l
-2192 4134 l
-2191 4135 l
-2190 4137 l
-2189 4138 l
-2188 4139 l
-2187 4141 l
-2186 4142 l
-2185 4143 l
-2184 4145 l
-2183 4146 l
-2182 4147 l
-2181 4149 l
-2180 4150 l
-2178 4151 l
-2177 4152 l
-2176 4154 l
-2175 4155 l
-2174 4156 l
-2173 4158 l
-2172 4159 l
-2171 4160 l
-2170 4162 l
-2169 4163 l
-2168 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-2519 1777 m
-2510 1837 l
-2462 2164 l
-2414 2491 l
-2365 2818 l
-2317 3145 l
-2269 3472 l
-2221 3799 l
-2172 4125 l
-2172 4127 l
-2172 4129 l
-2172 4130 l
-2171 4132 l
-2171 4134 l
-2171 4135 l
-2171 4137 l
-2171 4139 l
-2170 4140 l
-2170 4142 l
-2170 4144 l
-2170 4146 l
-2169 4147 l
-2169 4149 l
-2169 4151 l
-2169 4152 l
-2168 4154 l
-2168 4156 l
-2168 4157 l
-2168 4159 l
-2167 4161 l
-2167 4162 l
-2167 4164 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1221 1777 m
-1300 1977 l
-1422 2284 l
-1543 2591 l
-1665 2899 l
-1786 3206 l
-1908 3513 l
-2030 3821 l
-2151 4128 l
-2152 4130 l
-2152 4131 l
-2153 4133 l
-2154 4134 l
-2154 4136 l
-2155 4137 l
-2156 4139 l
-2156 4140 l
-2157 4142 l
-2157 4144 l
-2158 4145 l
-2159 4147 l
-2159 4148 l
-2160 4150 l
-2161 4151 l
-2161 4153 l
-2162 4155 l
-2162 4156 l
-2163 4158 l
-2164 4159 l
-2164 4161 l
-2165 4162 l
-2166 4164 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 2871 m
-581 2909 l
-840 3114 l
-1099 3319 l
-1357 3525 l
-1616 3730 l
-1875 3935 l
-2134 4141 l
-2135 4142 l
-2137 4143 l
-2138 4144 l
-2139 4145 l
-2141 4146 l
-2142 4147 l
-2143 4148 l
-2145 4149 l
-2146 4150 l
-2147 4151 l
-2149 4152 l
-2150 4153 l
-2151 4154 l
-2153 4155 l
-2154 4156 l
-2155 4157 l
-2157 4158 l
-2158 4160 l
-2159 4161 l
-2160 4162 l
-2162 4163 l
-2163 4164 l
-2164 4165 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 3925 m
-818 3967 l
-1145 4015 l
-1472 4064 l
-1799 4112 l
-2126 4160 l
-2127 4161 l
-2129 4161 l
-2131 4161 l
-2132 4161 l
-2134 4162 l
-2136 4162 l
-2137 4162 l
-2139 4162 l
-2141 4163 l
-2142 4163 l
-2144 4163 l
-2146 4163 l
-2147 4164 l
-2149 4164 l
-2151 4164 l
-2152 4164 l
-2154 4165 l
-2156 4165 l
-2157 4165 l
-2159 4165 l
-2161 4165 l
-2162 4166 l
-2164 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-533 4813 m
-592 4790 l
-900 4668 l
-1207 4547 l
-1514 4425 l
-1821 4303 l
-2128 4182 l
-2130 4181 l
-2131 4180 l
-2133 4180 l
-2134 4179 l
-2136 4178 l
-2137 4178 l
-2139 4177 l
-2141 4177 l
-2142 4176 l
-2144 4175 l
-2145 4175 l
-2147 4174 l
-2148 4173 l
-2150 4173 l
-2152 4172 l
-2153 4172 l
-2155 4171 l
-2156 4170 l
-2158 4170 l
-2159 4169 l
-2161 4169 l
-2163 4168 l
-2164 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-618 6121 m
-705 6012 l
-910 5753 l
-1115 5494 l
-1320 5235 l
-1525 4976 l
-1730 4717 l
-1936 4458 l
-2141 4199 l
-2142 4197 l
-2143 4196 l
-2144 4195 l
-2145 4193 l
-2146 4192 l
-2147 4191 l
-2148 4189 l
-2149 4188 l
-2150 4187 l
-2151 4186 l
-2152 4184 l
-2153 4183 l
-2154 4182 l
-2155 4180 l
-2156 4179 l
-2158 4178 l
-2159 4176 l
-2160 4175 l
-2161 4174 l
-2162 4172 l
-2163 4171 l
-2164 4170 l
-2165 4168 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-1878 6121 m
-1919 5842 l
-1967 5515 l
-2016 5188 l
-2064 4861 l
-2112 4534 l
-2160 4207 l
-2161 4206 l
-2161 4204 l
-2161 4202 l
-2161 4201 l
-2162 4199 l
-2162 4197 l
-2162 4196 l
-2162 4194 l
-2163 4192 l
-2163 4191 l
-2163 4189 l
-2163 4187 l
-2164 4186 l
-2164 4184 l
-2164 4182 l
-2164 4181 l
-2165 4179 l
-2165 4177 l
-2165 4176 l
-2165 4174 l
-2166 4172 l
-2166 4171 l
-2166 4169 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4167 l
-2166 4166 l
-2166 4166 l
-S
-2940 6121 m
-2911 6049 l
-2790 5741 l
-2668 5434 l
-2546 5127 l
-2425 4819 l
-2303 4512 l
-2182 4205 l
-2181 4203 l
-2180 4202 l
-2180 4200 l
-2179 4198 l
-2179 4197 l
-2178 4195 l
-2177 4194 l
-2177 4192 l
-2176 4191 l
-2175 4189 l
-2175 4188 l
-2174 4186 l
-2174 4184 l
-2173 4183 l
-2172 4181 l
-2172 4180 l
-2171 4178 l
-2170 4177 l
-2170 4175 l
-2169 4173 l
-2169 4172 l
-2168 4170 l
-2167 4169 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2166 4166 l
-2166 4166 l
-S
-4631 6121 m
-4529 6040 l
-4270 5835 l
-4011 5629 l
-3752 5424 l
-3493 5219 l
-3234 5013 l
-2975 4808 l
-2717 4603 l
-2458 4397 l
-2199 4192 l
-2197 4191 l
-2196 4190 l
-2195 4189 l
-2194 4188 l
-2192 4187 l
-2191 4186 l
-2190 4185 l
-2188 4184 l
-2187 4183 l
-2186 4182 l
-2184 4180 l
-2183 4179 l
-2182 4178 l
-2180 4177 l
-2179 4176 l
-2178 4175 l
-2176 4174 l
-2175 4173 l
-2174 4172 l
-2172 4171 l
-2171 4170 l
-2170 4169 l
-2168 4168 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4167 l
-2167 4166 l
-2166 4166 l
-S
-4877 4567 m
-4822 4559 l
-4495 4511 l
-4168 4462 l
-3841 4414 l
-3514 4366 l
-3188 4317 l
-2861 4269 l
-2534 4221 l
-2207 4172 l
-2206 4172 l
-2204 4172 l
-2202 4172 l
-2201 4171 l
-2199 4171 l
-2197 4171 l
-2196 4171 l
-2194 4170 l
-2192 4170 l
-2191 4170 l
-2189 4170 l
-2187 4169 l
-2186 4169 l
-2184 4169 l
-2182 4169 l
-2181 4168 l
-2179 4168 l
-2177 4168 l
-2176 4168 l
-2174 4167 l
-2172 4167 l
-2171 4167 l
-2169 4167 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2167 4166 l
-2166 4166 l
-S
-4877 2504 m
-4876 2503 l
-4872 2496 l
-4868 2489 l
-4864 2482 l
-4860 2476 l
-4855 2469 l
-4851 2462 l
-4847 2456 l
-4843 2449 l
-4838 2442 l
-4834 2436 l
-4830 2429 l
-4826 2423 l
-4821 2416 l
-4817 2409 l
-4812 2403 l
-4808 2396 l
-4804 2390 l
-4799 2383 l
-4795 2377 l
-4790 2370 l
-4786 2364 l
-4781 2357 l
-4777 2351 l
-4772 2344 l
-4768 2338 l
-4763 2331 l
-4759 2325 l
-4754 2318 l
-4750 2312 l
-4745 2306 l
-4740 2299 l
-4736 2293 l
-4731 2286 l
-4726 2280 l
-4722 2274 l
-4717 2267 l
-4712 2261 l
-4708 2255 l
-4703 2248 l
-4698 2242 l
-4693 2236 l
-4689 2230 l
-4684 2223 l
-4679 2217 l
-4674 2211 l
-4669 2205 l
-4664 2198 l
-4659 2192 l
-4655 2186 l
-4650 2180 l
-4645 2174 l
-4640 2168 l
-4635 2161 l
-4630 2155 l
-4625 2149 l
-4620 2143 l
-4615 2137 l
-4610 2131 l
-4605 2125 l
-4600 2119 l
-4595 2113 l
-4589 2107 l
-4584 2101 l
-4579 2095 l
-4574 2089 l
-4569 2083 l
-4564 2077 l
-4559 2071 l
-4553 2065 l
-4548 2059 l
-4543 2053 l
-4538 2047 l
-4532 2041 l
-4527 2036 l
-4522 2030 l
-4517 2024 l
-4511 2018 l
-4506 2012 l
-4501 2006 l
-4495 2001 l
-4490 1995 l
-4484 1989 l
-4479 1983 l
-4474 1978 l
-4468 1972 l
-4463 1966 l
-4457 1960 l
-4452 1955 l
-4446 1949 l
-4441 1943 l
-4435 1938 l
-4430 1932 l
-4424 1927 l
-4419 1921 l
-4413 1915 l
-4407 1910 l
-4402 1904 l
-4396 1899 l
-4391 1893 l
-4385 1888 l
-4379 1882 l
-4374 1877 l
-4368 1871 l
-4362 1866 l
-4357 1860 l
-4351 1855 l
-4345 1849 l
-4339 1844 l
-4334 1839 l
-4328 1833 l
-4322 1828 l
-4316 1823 l
-4310 1817 l
-4305 1812 l
-4299 1807 l
-4293 1801 l
-4287 1796 l
-4281 1791 l
-4275 1786 l
-4269 1780 l
-4266 1777 l
-S
-4675 6121 m
-4678 6117 l
-4683 6111 l
-4688 6104 l
-4693 6098 l
-4698 6092 l
-4702 6086 l
-4707 6079 l
-4712 6073 l
-4717 6067 l
-4721 6060 l
-4726 6054 l
-4731 6048 l
-4735 6041 l
-4740 6035 l
-4745 6028 l
-4749 6022 l
-4754 6016 l
-4758 6009 l
-4763 6003 l
-4767 5996 l
-4772 5990 l
-4776 5983 l
-4781 5977 l
-4785 5970 l
-4790 5964 l
-4794 5957 l
-4799 5951 l
-4803 5944 l
-4808 5938 l
-4812 5931 l
-4816 5925 l
-4821 5918 l
-4825 5911 l
-4829 5905 l
-4834 5898 l
-4838 5892 l
-4842 5885 l
-4846 5878 l
-4851 5872 l
-4855 5865 l
-4859 5858 l
-4863 5852 l
-4867 5845 l
-4872 5838 l
-4876 5831 l
-4877 5829 l
-S
-4854 3102 m
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3102 l
-4854 3101 l
-4853 3101 l
-4853 3101 l
-4853 3100 l
-4853 3100 l
-4853 3099 l
-4853 3099 l
-4852 3098 l
-4852 3098 l
-4852 3097 l
-4852 3097 l
-4852 3096 l
-4851 3096 l
-4849 3089 l
-4846 3082 l
-4843 3076 l
-4841 3069 l
-4838 3063 l
-4835 3056 l
-4832 3049 l
-4830 3043 l
-4827 3036 l
-4824 3029 l
-4821 3023 l
-4818 3016 l
-4816 3010 l
-4813 3003 l
-4810 2997 l
-4807 2990 l
-4804 2983 l
-4801 2977 l
-4798 2970 l
-4795 2964 l
-4792 2957 l
-4789 2951 l
-4786 2944 l
-4783 2938 l
-4780 2931 l
-4777 2925 l
-4774 2918 l
-4771 2912 l
-4768 2905 l
-4764 2899 l
-4761 2893 l
-4758 2886 l
-4755 2880 l
-4752 2873 l
-4748 2867 l
-4745 2860 l
-4742 2854 l
-4739 2848 l
-4735 2841 l
-4732 2835 l
-4729 2829 l
-4726 2822 l
-4722 2816 l
-4719 2809 l
-4715 2803 l
-4712 2797 l
-4709 2791 l
-4705 2784 l
-4702 2778 l
-4698 2772 l
-4695 2765 l
-4691 2759 l
-4688 2753 l
-4684 2747 l
-4681 2740 l
-4677 2734 l
-4674 2728 l
-4670 2722 l
-4667 2715 l
-4663 2709 l
-4659 2703 l
-4656 2697 l
-4652 2691 l
-4648 2684 l
-4645 2678 l
-4641 2672 l
-4637 2666 l
-4634 2660 l
-4630 2654 l
-4626 2648 l
-4622 2642 l
-4619 2635 l
-4615 2629 l
-4611 2623 l
-4607 2617 l
-4603 2611 l
-4599 2605 l
-4596 2599 l
-4592 2593 l
-4588 2587 l
-4584 2581 l
-4580 2575 l
-4576 2569 l
-4572 2563 l
-4568 2557 l
-4564 2551 l
-4560 2545 l
-4556 2539 l
-4552 2533 l
-4548 2527 l
-4544 2522 l
-4540 2516 l
-4536 2510 l
-4531 2504 l
-4527 2498 l
-4523 2492 l
-4519 2486 l
-4515 2481 l
-4511 2475 l
-4506 2469 l
-4502 2463 l
-4498 2457 l
-4494 2452 l
-4489 2446 l
-4485 2440 l
-4481 2434 l
-4477 2428 l
-4472 2423 l
-4468 2417 l
-4464 2411 l
-4459 2406 l
-4455 2400 l
-4451 2394 l
-4446 2389 l
-4442 2383 l
-4437 2377 l
-4433 2372 l
-4428 2366 l
-4424 2360 l
-4419 2355 l
-4415 2349 l
-4410 2344 l
-4406 2338 l
-4401 2333 l
-4397 2327 l
-4392 2321 l
-4388 2316 l
-4383 2310 l
-4378 2305 l
-4374 2299 l
-4369 2294 l
-4365 2289 l
-4360 2283 l
-4355 2278 l
-4351 2272 l
-4346 2267 l
-4341 2261 l
-4336 2256 l
-4332 2251 l
-4327 2245 l
-4322 2240 l
-4317 2235 l
-4313 2229 l
-4308 2224 l
-4303 2219 l
-4298 2213 l
-4293 2208 l
-4288 2203 l
-4283 2197 l
-4279 2192 l
-4274 2187 l
-4269 2182 l
-4264 2177 l
-4259 2171 l
-4254 2166 l
-4249 2161 l
-4244 2156 l
-4239 2151 l
-4234 2146 l
-4229 2140 l
-4224 2135 l
-4219 2130 l
-4214 2125 l
-4209 2120 l
-4204 2115 l
-4199 2110 l
-4194 2105 l
-4188 2100 l
-4183 2095 l
-4178 2090 l
-4173 2085 l
-4168 2080 l
-4163 2075 l
-4157 2070 l
-4152 2065 l
-S
-4152 2065 m
-4147 2060 l
-4142 2055 l
-4137 2050 l
-4131 2045 l
-4126 2041 l
-4121 2036 l
-4115 2031 l
-4110 2026 l
-4105 2021 l
-4100 2016 l
-4094 2012 l
-4089 2007 l
-4083 2002 l
-4078 1997 l
-4073 1993 l
-4067 1988 l
-4062 1983 l
-4056 1978 l
-4051 1974 l
-4046 1969 l
-4040 1964 l
-4035 1960 l
-4029 1955 l
-4024 1951 l
-4018 1946 l
-4013 1941 l
-4007 1937 l
-4002 1932 l
-3996 1928 l
-3991 1923 l
-3985 1919 l
-3979 1914 l
-3974 1910 l
-3968 1905 l
-3963 1901 l
-3957 1896 l
-3951 1892 l
-3946 1887 l
-3940 1883 l
-3934 1879 l
-3929 1874 l
-3923 1870 l
-3917 1865 l
-3912 1861 l
-3906 1857 l
-3900 1852 l
-3894 1848 l
-3889 1844 l
-3883 1840 l
-3877 1835 l
-3871 1831 l
-3866 1827 l
-3860 1823 l
-3854 1818 l
-3848 1814 l
-3842 1810 l
-3836 1806 l
-3831 1802 l
-3825 1798 l
-3819 1794 l
-3813 1790 l
-3807 1785 l
-3801 1781 l
-3795 1777 l
-S
-4297 6121 m
-4298 6120 l
-4302 6115 l
-4307 6110 l
-4312 6105 l
-4317 6099 l
-4322 6094 l
-4326 6088 l
-4331 6083 l
-4336 6078 l
-4341 6072 l
-4345 6067 l
-4350 6062 l
-4355 6056 l
-4359 6051 l
-4364 6045 l
-4369 6040 l
-4373 6034 l
-4378 6029 l
-4383 6023 l
-4387 6018 l
-4392 6012 l
-4396 6007 l
-4401 6001 l
-4405 5996 l
-4410 5990 l
-4414 5985 l
-4419 5979 l
-4423 5973 l
-4428 5968 l
-4432 5962 l
-4437 5956 l
-4441 5951 l
-4446 5945 l
-4450 5940 l
-4454 5934 l
-4459 5928 l
-4463 5922 l
-4468 5917 l
-4472 5911 l
-4476 5905 l
-4480 5900 l
-4485 5894 l
-4489 5888 l
-4493 5882 l
-4498 5877 l
-4502 5871 l
-4506 5865 l
-4510 5859 l
-4514 5853 l
-4519 5847 l
-4523 5842 l
-4527 5836 l
-4531 5830 l
-4535 5824 l
-4539 5818 l
-4543 5812 l
-4547 5806 l
-4551 5800 l
-4555 5795 l
-4560 5789 l
-4564 5783 l
-4568 5777 l
-4572 5771 l
-4575 5765 l
-4579 5759 l
-4583 5753 l
-4587 5747 l
-4591 5741 l
-4595 5735 l
-4599 5729 l
-4603 5723 l
-4607 5717 l
-4611 5711 l
-4614 5704 l
-4618 5698 l
-4622 5692 l
-4626 5686 l
-4629 5680 l
-4633 5674 l
-4637 5668 l
-4641 5662 l
-4644 5656 l
-4648 5649 l
-4652 5643 l
-4655 5637 l
-4659 5631 l
-4663 5625 l
-4666 5619 l
-4670 5612 l
-4673 5606 l
-4677 5600 l
-4681 5594 l
-4684 5587 l
-4688 5581 l
-4691 5575 l
-4695 5569 l
-4698 5562 l
-4701 5556 l
-4705 5550 l
-4708 5543 l
-4712 5537 l
-4715 5531 l
-4718 5524 l
-4722 5518 l
-4725 5512 l
-4729 5505 l
-4732 5499 l
-4735 5493 l
-4738 5486 l
-4742 5480 l
-4745 5474 l
-4748 5467 l
-4751 5461 l
-4755 5454 l
-4758 5448 l
-4761 5441 l
-4764 5435 l
-4767 5429 l
-4770 5422 l
-4773 5416 l
-4777 5409 l
-4780 5403 l
-4783 5396 l
-4786 5390 l
-4789 5383 l
-4792 5377 l
-4795 5370 l
-4798 5364 l
-4801 5357 l
-4804 5351 l
-4807 5344 l
-4809 5337 l
-4812 5331 l
-4815 5324 l
-4818 5318 l
-4821 5311 l
-4824 5305 l
-4827 5298 l
-4829 5291 l
-4832 5285 l
-4835 5278 l
-4838 5271 l
-4840 5265 l
-4843 5258 l
-4846 5252 l
-4848 5245 l
-4851 5238 l
-4854 5232 l
-4856 5225 l
-4859 5218 l
-4862 5212 l
-4864 5205 l
-4867 5198 l
-4869 5191 l
-4872 5185 l
-4874 5178 l
-4877 5171 l
-4877 5171 l
-S
-4877 3162 m
-4877 3162 l
-4874 3155 l
-4872 3149 l
-4869 3142 l
-4867 3135 l
-4864 3129 l
-4862 3122 l
-4859 3115 l
-4856 3109 l
-4854 3102 l
-S
-4585 3208 m
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3208 l
-4585 3207 l
-4584 3207 l
-4584 3206 l
-4584 3206 l
-4584 3205 l
-4584 3205 l
-4584 3205 l
-4583 3204 l
-4583 3204 l
-4583 3203 l
-4583 3203 l
-4581 3197 l
-4578 3191 l
-4576 3185 l
-4573 3179 l
-4571 3173 l
-4568 3167 l
-4566 3161 l
-4563 3155 l
-4561 3149 l
-4558 3143 l
-4556 3137 l
-4553 3131 l
-4551 3125 l
-4548 3119 l
-4545 3114 l
-4543 3108 l
-4540 3102 l
-4538 3096 l
-4535 3090 l
-4532 3084 l
-4529 3078 l
-4527 3072 l
-4524 3067 l
-4521 3061 l
-4519 3055 l
-4516 3049 l
-4513 3043 l
-4510 3037 l
-4507 3032 l
-4505 3026 l
-4502 3020 l
-4499 3014 l
-4496 3008 l
-4493 3003 l
-4490 2997 l
-4487 2991 l
-4484 2985 l
-4482 2980 l
-4479 2974 l
-4476 2968 l
-4473 2962 l
-4470 2957 l
-4467 2951 l
-4464 2945 l
-4461 2939 l
-4458 2934 l
-4454 2928 l
-4451 2922 l
-4448 2917 l
-4445 2911 l
-4442 2905 l
-4439 2900 l
-4436 2894 l
-4433 2889 l
-4429 2883 l
-4426 2877 l
-4423 2872 l
-4420 2866 l
-4417 2860 l
-4413 2855 l
-4410 2849 l
-4407 2844 l
-4404 2838 l
-4400 2833 l
-4397 2827 l
-4394 2822 l
-4390 2816 l
-4387 2811 l
-4384 2805 l
-4380 2800 l
-4377 2794 l
-4373 2789 l
-4370 2783 l
-4366 2778 l
-4363 2772 l
-4360 2767 l
-4356 2761 l
-4353 2756 l
-4349 2750 l
-4346 2745 l
-4342 2740 l
-4339 2734 l
-4335 2729 l
-4331 2723 l
-4328 2718 l
-4324 2713 l
-4321 2707 l
-4317 2702 l
-4313 2697 l
-4310 2691 l
-4306 2686 l
-4302 2681 l
-4299 2675 l
-4295 2670 l
-4291 2665 l
-4287 2660 l
-4284 2654 l
-4280 2649 l
-4276 2644 l
-4272 2639 l
-4269 2633 l
-4265 2628 l
-4261 2623 l
-4257 2618 l
-4253 2613 l
-4249 2607 l
-4246 2602 l
-4242 2597 l
-4238 2592 l
-4234 2587 l
-4230 2582 l
-4226 2577 l
-4222 2571 l
-4218 2566 l
-4214 2561 l
-4210 2556 l
-4206 2551 l
-4202 2546 l
-4198 2541 l
-4194 2536 l
-4190 2531 l
-4186 2526 l
-4182 2521 l
-4178 2516 l
-4174 2511 l
-4170 2506 l
-4166 2501 l
-4161 2496 l
-4157 2491 l
-4153 2486 l
-4149 2481 l
-4145 2476 l
-4141 2471 l
-4136 2467 l
-4132 2462 l
-4128 2457 l
-4124 2452 l
-4119 2447 l
-4115 2442 l
-4111 2437 l
-4107 2433 l
-4102 2428 l
-4098 2423 l
-4094 2418 l
-4089 2413 l
-4085 2409 l
-4081 2404 l
-4076 2399 l
-4072 2394 l
-4067 2390 l
-4063 2385 l
-4059 2380 l
-4054 2376 l
-4050 2371 l
-4045 2366 l
-4041 2362 l
-4036 2357 l
-4032 2352 l
-4027 2348 l
-4023 2343 l
-4018 2338 l
-4014 2334 l
-4009 2329 l
-4005 2325 l
-4000 2320 l
-3995 2316 l
-3991 2311 l
-3986 2307 l
-3982 2302 l
-3977 2298 l
-3972 2293 l
-3968 2289 l
-3963 2284 l
-3958 2280 l
-3954 2275 l
-S
-3954 2275 m
-3949 2271 l
-3944 2266 l
-3940 2262 l
-3935 2258 l
-3930 2253 l
-3925 2249 l
-3921 2244 l
-3916 2240 l
-3911 2236 l
-3906 2231 l
-3901 2227 l
-3897 2223 l
-3892 2218 l
-3887 2214 l
-3882 2210 l
-3877 2206 l
-3872 2201 l
-3867 2197 l
-3863 2193 l
-3858 2189 l
-3853 2185 l
-3848 2180 l
-3843 2176 l
-3838 2172 l
-3833 2168 l
-3828 2164 l
-3823 2160 l
-3818 2156 l
-3813 2152 l
-3808 2147 l
-3803 2143 l
-3798 2139 l
-3793 2135 l
-3788 2131 l
-3783 2127 l
-3778 2123 l
-3773 2119 l
-3768 2115 l
-3763 2111 l
-3758 2107 l
-3752 2103 l
-3747 2099 l
-3742 2096 l
-3737 2092 l
-3732 2088 l
-3727 2084 l
-3722 2080 l
-3716 2076 l
-3711 2072 l
-3706 2068 l
-3701 2065 l
-3696 2061 l
-3690 2057 l
-3685 2053 l
-3680 2049 l
-3675 2046 l
-3669 2042 l
-3664 2038 l
-3659 2035 l
-3654 2031 l
-3648 2027 l
-3643 2024 l
-3638 2020 l
-3632 2016 l
-3627 2013 l
-3622 2009 l
-3616 2005 l
-3611 2002 l
-3606 1998 l
-3600 1995 l
-3595 1991 l
-3589 1988 l
-3584 1984 l
-3579 1980 l
-3573 1977 l
-3568 1974 l
-3562 1970 l
-3557 1967 l
-3551 1963 l
-3546 1960 l
-3540 1956 l
-3535 1953 l
-3529 1949 l
-3524 1946 l
-3518 1943 l
-3513 1939 l
-3507 1936 l
-3502 1933 l
-3496 1929 l
-3491 1926 l
-3485 1923 l
-3480 1920 l
-3474 1916 l
-3468 1913 l
-3463 1910 l
-3457 1907 l
-3452 1903 l
-3446 1900 l
-3440 1897 l
-3435 1894 l
-3429 1891 l
-3424 1888 l
-3418 1885 l
-3412 1881 l
-3407 1878 l
-3401 1875 l
-3395 1872 l
-3390 1869 l
-3384 1866 l
-3378 1863 l
-3372 1860 l
-3367 1857 l
-3361 1854 l
-3355 1851 l
-3349 1848 l
-3344 1845 l
-3338 1842 l
-3332 1840 l
-3326 1837 l
-3321 1834 l
-3315 1831 l
-3309 1828 l
-3303 1825 l
-3297 1822 l
-3292 1820 l
-3286 1817 l
-3280 1814 l
-3274 1811 l
-3268 1809 l
-3262 1806 l
-3257 1803 l
-3251 1800 l
-3245 1798 l
-3239 1795 l
-3233 1792 l
-3227 1790 l
-3221 1787 l
-3215 1785 l
-3210 1782 l
-3204 1779 l
-3199 1777 l
-S
-1133 1777 m
-1133 1778 l
-1127 1780 l
-1121 1783 l
-1115 1785 l
-1109 1788 l
-1104 1791 l
-1098 1793 l
-1092 1796 l
-1086 1798 l
-1080 1801 l
-1074 1804 l
-1068 1807 l
-1062 1809 l
-1057 1812 l
-1051 1815 l
-1045 1818 l
-1039 1820 l
-1033 1823 l
-1028 1826 l
-1022 1829 l
-1016 1832 l
-1010 1835 l
-1004 1837 l
-999 1840 l
-993 1843 l
-987 1846 l
-981 1849 l
-976 1852 l
-970 1855 l
-964 1858 l
-958 1861 l
-953 1864 l
-947 1867 l
-941 1870 l
-936 1873 l
-930 1876 l
-924 1879 l
-919 1882 l
-913 1885 l
-907 1889 l
-902 1892 l
-896 1895 l
-890 1898 l
-885 1901 l
-879 1904 l
-874 1908 l
-868 1911 l
-862 1914 l
-857 1917 l
-851 1920 l
-846 1924 l
-840 1927 l
-835 1930 l
-829 1934 l
-823 1937 l
-818 1940 l
-812 1944 l
-807 1947 l
-801 1950 l
-796 1954 l
-790 1957 l
-785 1961 l
-780 1964 l
-774 1968 l
-769 1971 l
-763 1974 l
-758 1978 l
-752 1981 l
-747 1985 l
-742 1988 l
-736 1992 l
-731 1996 l
-725 1999 l
-720 2003 l
-715 2006 l
-709 2010 l
-704 2014 l
-699 2017 l
-693 2021 l
-688 2025 l
-683 2028 l
-677 2032 l
-672 2036 l
-667 2039 l
-662 2043 l
-656 2047 l
-651 2051 l
-646 2054 l
-641 2058 l
-635 2062 l
-630 2066 l
-625 2069 l
-620 2073 l
-615 2077 l
-609 2081 l
-604 2085 l
-599 2089 l
-594 2093 l
-589 2097 l
-584 2100 l
-579 2104 l
-573 2108 l
-568 2112 l
-563 2116 l
-558 2120 l
-553 2124 l
-548 2128 l
-543 2132 l
-538 2136 l
-533 2140 l
-S
-3884 6121 m
-3886 6119 l
-3891 6115 l
-3896 6111 l
-3901 6106 l
-3906 6102 l
-3910 6098 l
-3915 6093 l
-3920 6089 l
-3925 6085 l
-3930 6080 l
-3934 6076 l
-3939 6072 l
-3944 6067 l
-3948 6063 l
-3953 6058 l
-3958 6054 l
-3962 6050 l
-3967 6045 l
-3972 6041 l
-3976 6036 l
-3981 6032 l
-3986 6027 l
-3990 6023 l
-3995 6018 l
-3999 6013 l
-4004 6009 l
-4009 6004 l
-4013 6000 l
-4018 5995 l
-4022 5991 l
-4027 5986 l
-4031 5981 l
-4036 5977 l
-4040 5972 l
-4045 5967 l
-4049 5963 l
-4054 5958 l
-4058 5953 l
-4062 5949 l
-4067 5944 l
-4071 5939 l
-4076 5935 l
-4080 5930 l
-4084 5925 l
-4089 5920 l
-4093 5915 l
-4097 5911 l
-4102 5906 l
-4106 5901 l
-4110 5896 l
-4115 5891 l
-4119 5887 l
-4123 5882 l
-4127 5877 l
-4132 5872 l
-4136 5867 l
-4140 5862 l
-4144 5857 l
-4148 5852 l
-4153 5847 l
-4157 5843 l
-4161 5838 l
-4165 5833 l
-4169 5828 l
-4173 5823 l
-4177 5818 l
-4182 5813 l
-4186 5808 l
-4190 5803 l
-4194 5798 l
-4198 5793 l
-4202 5788 l
-4206 5783 l
-4210 5777 l
-4214 5772 l
-4218 5767 l
-4222 5762 l
-4226 5757 l
-4230 5752 l
-4234 5747 l
-4237 5742 l
-4241 5737 l
-4245 5731 l
-4249 5726 l
-4253 5721 l
-4257 5716 l
-4261 5711 l
-4264 5706 l
-4268 5700 l
-4272 5695 l
-4276 5690 l
-4280 5685 l
-4283 5679 l
-4287 5674 l
-4291 5669 l
-4295 5664 l
-4298 5658 l
-4302 5653 l
-4306 5648 l
-4309 5642 l
-4313 5637 l
-4317 5632 l
-4320 5626 l
-4324 5621 l
-4327 5616 l
-4331 5610 l
-4335 5605 l
-4338 5600 l
-4342 5594 l
-4345 5589 l
-4349 5583 l
-4352 5578 l
-4356 5572 l
-4359 5567 l
-4363 5562 l
-4366 5556 l
-4370 5551 l
-4373 5545 l
-4376 5540 l
-4380 5534 l
-4383 5529 l
-4387 5523 l
-4390 5518 l
-4393 5512 l
-4397 5507 l
-4400 5501 l
-4403 5496 l
-4406 5490 l
-4410 5484 l
-4413 5479 l
-4416 5473 l
-4419 5468 l
-4423 5462 l
-4426 5457 l
-4429 5451 l
-4432 5445 l
-4435 5440 l
-4439 5434 l
-4442 5428 l
-4445 5423 l
-4448 5417 l
-4451 5411 l
-4454 5406 l
-4457 5400 l
-4460 5394 l
-4463 5389 l
-4466 5383 l
-4469 5377 l
-4472 5372 l
-4475 5366 l
-4478 5360 l
-4481 5354 l
-4484 5349 l
-4487 5343 l
-4490 5337 l
-4493 5331 l
-4496 5326 l
-4499 5320 l
-4501 5314 l
-4504 5308 l
-4507 5302 l
-4510 5297 l
-4513 5291 l
-4516 5285 l
-4518 5279 l
-4521 5273 l
-4524 5267 l
-4526 5261 l
-4529 5256 l
-4532 5250 l
-4535 5244 l
-4537 5238 l
-4540 5232 l
-4543 5226 l
-4545 5220 l
-4548 5214 l
-4550 5208 l
-4553 5203 l
-4555 5197 l
-4558 5191 l
-4561 5185 l
-4563 5179 l
-4566 5173 l
-4568 5167 l
-4571 5161 l
-4573 5155 l
-4575 5149 l
-4578 5143 l
-4580 5137 l
-4583 5131 l
-4585 5125 l
-4587 5119 l
-4590 5113 l
-4592 5107 l
-4594 5101 l
-4597 5095 l
-4599 5089 l
-4601 5083 l
-4604 5077 l
-S
-4604 5077 m
-4606 5071 l
-4608 5065 l
-4610 5059 l
-4612 5053 l
-4615 5047 l
-4617 5040 l
-4619 5034 l
-4621 5028 l
-4623 5022 l
-4625 5016 l
-4627 5010 l
-4630 5004 l
-4632 4998 l
-4634 4992 l
-4636 4986 l
-4638 4979 l
-4640 4973 l
-4642 4967 l
-4644 4961 l
-4646 4955 l
-4648 4949 l
-4650 4942 l
-4651 4936 l
-4653 4930 l
-4655 4924 l
-4657 4918 l
-4659 4912 l
-4661 4905 l
-4663 4899 l
-4664 4893 l
-4666 4887 l
-4668 4881 l
-4670 4874 l
-4672 4868 l
-4673 4862 l
-4675 4856 l
-4677 4850 l
-4678 4843 l
-4680 4837 l
-4682 4831 l
-4683 4825 l
-4685 4818 l
-4687 4812 l
-4688 4806 l
-4690 4800 l
-4691 4793 l
-4693 4787 l
-4694 4781 l
-4696 4774 l
-4697 4768 l
-4699 4762 l
-4700 4756 l
-4702 4749 l
-4703 4743 l
-4705 4737 l
-4706 4730 l
-4707 4724 l
-4709 4718 l
-4710 4711 l
-4712 4705 l
-4713 4699 l
-4714 4693 l
-4715 4686 l
-4717 4680 l
-4718 4674 l
-4719 4667 l
-4720 4661 l
-4722 4655 l
-4723 4648 l
-4724 4642 l
-4725 4636 l
-4726 4629 l
-4728 4623 l
-4729 4616 l
-4730 4610 l
-4731 4604 l
-4732 4597 l
-4733 4591 l
-4734 4585 l
-4735 4578 l
-4736 4572 l
-4737 4565 l
-4738 4559 l
-4739 4553 l
-4740 4546 l
-4741 4540 l
-4742 4534 l
-4743 4527 l
-4744 4521 l
-4744 4514 l
-4745 4508 l
-4746 4502 l
-4747 4495 l
-4748 4489 l
-4749 4482 l
-4749 4476 l
-4750 4470 l
-4751 4463 l
-4752 4457 l
-4752 4450 l
-4753 4444 l
-4754 4437 l
-4754 4431 l
-4755 4425 l
-4756 4418 l
-4756 4412 l
-4757 4405 l
-4757 4399 l
-4758 4392 l
-4759 4386 l
-4759 4380 l
-4760 4373 l
-4760 4367 l
-4761 4360 l
-4761 4354 l
-4762 4347 l
-4762 4341 l
-4762 4334 l
-4763 4328 l
-4763 4322 l
-4764 4315 l
-4764 4309 l
-4764 4302 l
-4765 4296 l
-4765 4289 l
-4765 4283 l
-4765 4276 l
-4766 4270 l
-4766 4264 l
-4766 4257 l
-4766 4251 l
-4767 4244 l
-4767 4238 l
-4767 4231 l
-4767 4225 l
-4767 4218 l
-4767 4212 l
-4768 4205 l
-4768 4199 l
-4768 4193 l
-4768 4186 l
-4768 4180 l
-4768 4173 l
-4768 4167 l
-4768 4160 l
-4768 4154 l
-4768 4147 l
-4768 4141 l
-4768 4134 l
-4768 4128 l
-4767 4122 l
-4767 4115 l
-4767 4109 l
-4767 4102 l
-4767 4096 l
-4767 4089 l
-4766 4083 l
-4766 4076 l
-4766 4070 l
-4766 4063 l
-4766 4057 l
-4765 4051 l
-4765 4044 l
-4765 4038 l
-4764 4031 l
-4764 4025 l
-4764 4018 l
-4763 4012 l
-4763 4005 l
-4762 3999 l
-4762 3993 l
-4762 3986 l
-4761 3980 l
-4761 3973 l
-4760 3967 l
-4760 3960 l
-4759 3954 l
-4759 3947 l
-4758 3941 l
-4757 3935 l
-4757 3928 l
-4756 3922 l
-4756 3915 l
-4755 3909 l
-4754 3902 l
-4754 3896 l
-4753 3890 l
-4752 3883 l
-4752 3877 l
-4751 3870 l
-4750 3864 l
-4749 3858 l
-4749 3851 l
-4748 3845 l
-4747 3838 l
-4746 3832 l
-4745 3826 l
-4745 3819 l
-4744 3813 l
-S
-4744 3813 m
-4743 3806 l
-4742 3800 l
-4741 3794 l
-4740 3787 l
-4739 3781 l
-4738 3774 l
-4737 3768 l
-4736 3762 l
-4735 3755 l
-4734 3749 l
-4733 3742 l
-4732 3736 l
-4731 3730 l
-4730 3723 l
-4729 3717 l
-4728 3711 l
-4726 3704 l
-4725 3698 l
-4724 3692 l
-4723 3685 l
-4722 3679 l
-4721 3673 l
-4719 3666 l
-4718 3660 l
-4717 3654 l
-4715 3647 l
-4714 3641 l
-4713 3635 l
-4712 3628 l
-4710 3622 l
-4709 3616 l
-4707 3609 l
-4706 3603 l
-4705 3597 l
-4703 3590 l
-4702 3584 l
-4700 3578 l
-4699 3572 l
-4697 3565 l
-4696 3559 l
-4694 3553 l
-4693 3546 l
-4691 3540 l
-4690 3534 l
-4688 3528 l
-4687 3521 l
-4685 3515 l
-4683 3509 l
-4682 3503 l
-4680 3496 l
-4678 3490 l
-4677 3484 l
-4675 3478 l
-4673 3471 l
-4672 3465 l
-4670 3459 l
-4668 3453 l
-4666 3447 l
-4665 3440 l
-4663 3434 l
-4661 3428 l
-4659 3422 l
-4657 3416 l
-4655 3409 l
-4653 3403 l
-4652 3397 l
-4650 3391 l
-4648 3385 l
-4646 3379 l
-4644 3372 l
-4642 3366 l
-4640 3360 l
-4638 3354 l
-4636 3348 l
-4634 3342 l
-4632 3336 l
-4630 3330 l
-4628 3323 l
-4625 3317 l
-4623 3311 l
-4621 3305 l
-4619 3299 l
-4617 3293 l
-4615 3287 l
-4613 3281 l
-4610 3275 l
-4608 3269 l
-4606 3263 l
-4604 3257 l
-4601 3251 l
-4599 3244 l
-4597 3238 l
-4594 3232 l
-4592 3226 l
-4590 3220 l
-4587 3214 l
-4585 3208 l
-S
-4316 3315 m
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3315 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3314 l
-4316 3313 l
-4316 3313 l
-4315 3313 l
-4315 3312 l
-4315 3312 l
-4315 3311 l
-4315 3311 l
-4315 3311 l
-4315 3310 l
-4314 3310 l
-4312 3305 l
-4310 3299 l
-4308 3294 l
-4306 3289 l
-4304 3283 l
-4301 3278 l
-4299 3273 l
-4297 3267 l
-4295 3262 l
-4293 3257 l
-4290 3252 l
-4288 3246 l
-4255 3173 l
-4219 3101 l
-4181 3031 l
-4140 2961 l
-4097 2893 l
-4052 2827 l
-4004 2762 l
-3954 2699 l
-3902 2638 l
-3848 2579 l
-3792 2521 l
-3734 2466 l
-3674 2412 l
-3612 2361 l
-3549 2312 l
-3484 2265 l
-3417 2220 l
-3349 2178 l
-3279 2138 l
-3208 2101 l
-3135 2066 l
-3062 2033 l
-2987 2003 l
-2912 1976 l
-2835 1952 l
-2758 1930 l
-2680 1911 l
-2602 1894 l
-2522 1880 l
-2443 1869 l
-2363 1861 l
-2283 1856 l
-2203 1853 l
-2122 1853 l
-2042 1856 l
-1962 1862 l
-1882 1870 l
-1803 1881 l
-1724 1895 l
-1645 1912 l
-1567 1932 l
-1490 1954 l
-1414 1979 l
-1338 2006 l
-1264 2036 l
-1190 2069 l
-1118 2104 l
-1047 2142 l
-978 2182 l
-909 2224 l
-843 2269 l
-778 2316 l
-714 2366 l
-653 2417 l
-593 2471 l
-535 2526 l
-533 2528 l
-S
-533 5804 m
-572 5842 l
-631 5896 l
-692 5948 l
-755 5998 l
-819 6046 l
-885 6092 l
-930 6121 l
-S
-3403 6121 m
-3459 6085 l
-3525 6039 l
-3589 5990 l
-3652 5940 l
-3712 5887 l
-3771 5832 l
-3828 5776 l
-3883 5717 l
-3936 5656 l
-3986 5594 l
-4035 5530 l
-4081 5464 l
-4125 5397 l
-4166 5328 l
-4205 5258 l
-4242 5186 l
-4276 5114 l
-4308 5040 l
-4337 4965 l
-4363 4889 l
-4387 4812 l
-4408 4735 l
-4426 4657 l
-4442 4578 l
-4455 4498 l
-4465 4419 l
-4472 4339 l
-4477 4258 l
-4479 4178 l
-4478 4098 l
-4474 4018 l
-4467 3937 l
-4458 3858 l
-4446 3778 l
-4431 3699 l
-4414 3621 l
-4393 3543 l
-4370 3466 l
-4345 3390 l
-4316 3315 l
-S
-4048 3421 m
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4048 3421 l
-4047 3421 l
-4047 3420 l
-4047 3420 l
-4047 3420 l
-4047 3419 l
-4047 3419 l
-4047 3419 l
-4046 3418 l
-4046 3418 l
-4046 3418 l
-4046 3417 l
-4046 3417 l
-4044 3412 l
-4042 3408 l
-4040 3403 l
-4038 3398 l
-4036 3394 l
-4035 3389 l
-4033 3384 l
-4031 3380 l
-4029 3375 l
-4027 3371 l
-4025 3366 l
-4023 3361 l
-3994 3297 l
-3962 3234 l
-3929 3172 l
-3893 3112 l
-3856 3052 l
-3816 2994 l
-3774 2938 l
-3731 2883 l
-3685 2829 l
-3638 2777 l
-3589 2727 l
-3538 2678 l
-3486 2632 l
-3432 2587 l
-3376 2544 l
-3319 2503 l
-3261 2464 l
-3201 2427 l
-3140 2392 l
-3078 2359 l
-3014 2328 l
-2950 2300 l
-2885 2274 l
-2819 2250 l
-2752 2229 l
-2684 2209 l
-2616 2193 l
-2547 2178 l
-2478 2166 l
-2408 2156 l
-2338 2149 l
-2268 2144 l
-2198 2142 l
-2128 2142 l
-2058 2145 l
-1988 2150 l
-1918 2157 l
-1848 2167 l
-1779 2179 l
-1710 2194 l
-1642 2211 l
-1575 2230 l
-1508 2252 l
-1442 2276 l
-1377 2302 l
-1312 2331 l
-1249 2362 l
-1187 2395 l
-1126 2430 l
-1067 2467 l
-1008 2506 l
-951 2547 l
-896 2591 l
-842 2636 l
-790 2683 l
-739 2731 l
-690 2782 l
-643 2834 l
-598 2888 l
-554 2943 l
-533 2972 l
-S
-533 5361 m
-539 5369 l
-582 5425 l
-626 5479 l
-673 5532 l
-721 5583 l
-771 5632 l
-823 5680 l
-876 5726 l
-931 5769 l
-987 5811 l
-1045 5851 l
-1104 5889 l
-1165 5925 l
-1226 5959 l
-1289 5991 l
-1353 6020 l
-1418 6047 l
-1484 6072 l
-1550 6095 l
-1617 6115 l
-1641 6121 l
-S
-2692 6121 m
-2727 6112 l
-2794 6091 l
-2861 6068 l
-2926 6043 l
-2991 6015 l
-3055 5985 l
-3117 5953 l
-3179 5919 l
-3239 5883 l
-3298 5845 l
-3355 5805 l
-3412 5762 l
-3466 5718 l
-3519 5672 l
-3571 5624 l
-3620 5574 l
-3668 5523 l
-3714 5470 l
-3759 5416 l
-3801 5359 l
-3842 5302 l
-3880 5243 l
-3916 5183 l
-3951 5121 l
-3983 5059 l
-4012 4995 l
-4040 4931 l
-4065 4865 l
-4089 4799 l
-4109 4732 l
-4128 4664 l
-4144 4595 l
-4158 4526 l
-4169 4457 l
-4178 4387 l
-4184 4317 l
-4188 4247 l
-4190 4177 l
-4189 4106 l
-4186 4036 l
-4180 3966 l
-4172 3896 l
-4161 3827 l
-4148 3758 l
-4133 3689 l
-4115 3621 l
-4095 3554 l
-4072 3487 l
-4048 3421 l
-S
-3779 3527 m
-3779 3527 l
-3779 3527 l
-3778 3527 l
-3778 3526 l
-3778 3526 l
-3778 3526 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3525 l
-3778 3524 l
-3777 3524 l
-3776 3520 l
-3774 3516 l
-3773 3512 l
-3771 3508 l
-3769 3504 l
-3768 3500 l
-3766 3496 l
-3764 3492 l
-3763 3488 l
-3761 3484 l
-3759 3480 l
-3758 3476 l
-3733 3421 l
-3706 3367 l
-3677 3314 l
-3647 3262 l
-3614 3212 l
-3580 3162 l
-3545 3113 l
-3507 3066 l
-3468 3020 l
-3428 2976 l
-3386 2933 l
-3342 2891 l
-3297 2851 l
-3251 2812 l
-3203 2775 l
-3154 2740 l
-3104 2707 l
-3053 2675 l
-3001 2645 l
-2947 2617 l
-2893 2591 l
-2838 2567 l
-2782 2544 l
-2726 2524 l
-2668 2505 l
-2610 2489 l
-2552 2474 l
-2493 2462 l
-2433 2452 l
-2374 2444 l
-2314 2437 l
-2254 2433 l
-2194 2431 l
-2133 2431 l
-2073 2434 l
-2013 2438 l
-1953 2444 l
-1894 2453 l
-1834 2463 l
-1775 2476 l
-1717 2490 l
-1659 2507 l
-1602 2526 l
-1545 2546 l
-1489 2569 l
-1434 2593 l
-1380 2620 l
-1327 2648 l
-1275 2678 l
-1224 2710 l
-1174 2743 l
-1125 2779 l
-1077 2816 l
-1031 2854 l
-986 2895 l
-943 2936 l
-901 2980 l
-861 3024 l
-822 3070 l
-785 3118 l
-749 3166 l
-715 3216 l
-683 3267 l
-653 3319 l
-624 3372 l
-598 3426 l
-573 3481 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-542 4775 l
-564 4831 l
-588 4886 l
-614 4940 l
-642 4994 l
-672 5046 l
-703 5098 l
-736 5148 l
-771 5197 l
-808 5245 l
-846 5292 l
-886 5337 l
-928 5380 l
-970 5423 l
-1015 5464 l
-1060 5503 l
-1107 5540 l
-1156 5576 l
-1205 5611 l
-1256 5643 l
-1308 5674 l
-1361 5703 l
-1415 5730 l
-1469 5755 l
-1525 5778 l
-1581 5800 l
-1638 5819 l
-1696 5836 l
-1754 5852 l
-1813 5865 l
-1872 5876 l
-1931 5886 l
-1991 5893 l
-2051 5898 l
-2111 5901 l
-2172 5902 l
-2232 5900 l
-2292 5897 l
-2352 5892 l
-2412 5884 l
-2471 5875 l
-2530 5863 l
-2589 5849 l
-2647 5834 l
-2705 5816 l
-2762 5796 l
-2818 5775 l
-2873 5751 l
-2928 5726 l
-2981 5698 l
-3034 5669 l
-3086 5638 l
-3136 5605 l
-3186 5571 l
-3234 5534 l
-3280 5496 l
-3326 5457 l
-3370 5416 l
-3413 5373 l
-3454 5329 l
-3493 5284 l
-3531 5237 l
-3568 5189 l
-3602 5140 l
-3635 5089 l
-3666 5038 l
-3696 4985 l
-3723 4931 l
-3749 4877 l
-3772 4821 l
-3794 4765 l
-3814 4708 l
-3832 4651 l
-3848 4593 l
-3861 4534 l
-3873 4475 l
-3883 4415 l
-3890 4356 l
-3896 4296 l
-3899 4235 l
-3901 4175 l
-3900 4115 l
-3897 4055 l
-3892 3995 l
-3885 3935 l
-3876 3875 l
-3865 3816 l
-3852 3757 l
-3837 3699 l
-3819 3641 l
-3800 3584 l
-3779 3528 l
-S
-3510 3634 m
-3510 3634 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3510 3633 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3632 l
-3509 3631 l
-3509 3631 l
-3508 3628 l
-3506 3624 l
-3505 3621 l
-3504 3618 l
-3502 3614 l
-3501 3611 l
-3499 3608 l
-3498 3605 l
-3497 3601 l
-3495 3598 l
-3494 3595 l
-3492 3591 l
-3472 3546 l
-3449 3501 l
-3425 3456 l
-3400 3413 l
-3373 3371 l
-3345 3329 l
-3315 3289 l
-3284 3249 l
-3251 3211 l
-3218 3174 l
-3183 3138 l
-3146 3103 l
-3109 3070 l
-3070 3038 l
-3030 3007 l
-2990 2978 l
-2948 2950 l
-2905 2924 l
-2862 2899 l
-2817 2875 l
-2772 2853 l
-2726 2833 l
-2680 2815 l
-2632 2798 l
-2585 2782 l
-2536 2768 l
-2488 2756 l
-2438 2746 l
-2389 2738 l
-2339 2731 l
-2289 2726 l
-2239 2722 l
-2189 2720 l
-2139 2721 l
-2089 2722 l
-2039 2726 l
-1989 2731 l
-1939 2738 l
-1890 2747 l
-1841 2757 l
-1792 2770 l
-1744 2784 l
-1696 2799 l
-1649 2816 l
-1602 2835 l
-1556 2855 l
-1511 2877 l
-1467 2901 l
-1423 2926 l
-1381 2953 l
-1339 2981 l
-1299 3010 l
-1259 3041 l
-1220 3073 l
-1183 3107 l
-1147 3141 l
-1112 3177 l
-1078 3215 l
-1046 3253 l
-1015 3292 l
-985 3333 l
-957 3375 l
-930 3417 l
-905 3460 l
-881 3505 l
-859 3550 l
-839 3595 l
-820 3642 l
-802 3689 l
-786 3737 l
-772 3785 l
-760 3834 l
-749 3883 l
-740 3932 l
-733 3982 l
-727 4032 l
-724 4082 l
-722 4132 l
-721 4182 l
-723 4232 l
-726 4282 l
-731 4332 l
-737 4382 l
-746 4432 l
-756 4481 l
-768 4530 l
-781 4578 l
-796 4626 l
-813 4673 l
-831 4720 l
-851 4766 l
-873 4811 l
-896 4856 l
-921 4900 l
-947 4943 l
-975 4984 l
-1004 5025 l
-1034 5065 l
-1066 5104 l
-1100 5142 l
-1134 5178 l
-1170 5213 l
-1207 5247 l
-1245 5280 l
-1284 5311 l
-1324 5341 l
-1366 5370 l
-1408 5397 l
-1451 5423 l
-1495 5447 l
-1540 5469 l
-1585 5490 l
-1632 5510 l
-1679 5528 l
-1726 5544 l
-1774 5558 l
-1823 5571 l
-1872 5582 l
-1921 5591 l
-1971 5599 l
-2020 5605 l
-2070 5609 l
-2121 5612 l
-2171 5612 l
-2221 5611 l
-2271 5609 l
-2321 5604 l
-2371 5598 l
-2420 5590 l
-2470 5580 l
-2519 5569 l
-2567 5556 l
-2615 5541 l
-2662 5525 l
-2709 5507 l
-2755 5487 l
-2801 5466 l
-2846 5443 l
-2889 5419 l
-2932 5393 l
-2975 5365 l
-3016 5336 l
-3056 5306 l
-3095 5275 l
-3133 5242 l
-3169 5208 l
-3205 5172 l
-3239 5135 l
-3272 5098 l
-3304 5059 l
-3334 5019 l
-3363 4977 l
-3390 4935 l
-3416 4892 l
-3441 4849 l
-3464 4804 l
-3485 4758 l
-3505 4712 l
-3523 4665 l
-3539 4618 l
-3554 4570 l
-3567 4522 l
-3579 4473 l
-3589 4423 l
-3597 4374 l
-3603 4324 l
-3608 4274 l
-3611 4224 l
-3612 4174 l
-3611 4124 l
-3609 4073 l
-3605 4023 l
-3599 3973 l
-3591 3924 l
-3582 3874 l
-S
-3582 3874 m
-3571 3825 l
-3558 3777 l
-3544 3729 l
-3528 3681 l
-3510 3634 l
-S
-3241 3740 m
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3740 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3739 l
-3241 3738 l
-3241 3738 l
-3240 3738 l
-3239 3735 l
-3238 3733 l
-3237 3730 l
-3236 3727 l
-3235 3725 l
-3234 3722 l
-3233 3720 l
-3232 3717 l
-3231 3714 l
-3229 3712 l
-3228 3709 l
-3227 3706 l
-3211 3670 l
-3193 3634 l
-3174 3598 l
-3153 3564 l
-3132 3530 l
-3109 3497 l
-3085 3464 l
-3060 3433 l
-3034 3402 l
-3007 3373 l
-2979 3344 l
-2950 3316 l
-2920 3289 l
-2889 3264 l
-2858 3239 l
-2825 3216 l
-2792 3193 l
-2757 3172 l
-2723 3152 l
-2687 3134 l
-2651 3116 l
-2614 3100 l
-2577 3085 l
-2539 3071 l
-2501 3059 l
-2462 3048 l
-2423 3038 l
-2384 3030 l
-2344 3023 l
-2305 3018 l
-2265 3014 l
-2225 3011 l
-2185 3010 l
-2144 3010 l
-2104 3011 l
-2064 3014 l
-2024 3018 l
-1985 3024 l
-1945 3031 l
-1906 3039 l
-1867 3049 l
-1828 3060 l
-1790 3072 l
-1752 3086 l
-1715 3101 l
-1678 3118 l
-1642 3135 l
-1607 3154 l
-1572 3174 l
-1538 3195 l
-1505 3218 l
-1472 3241 l
-1440 3266 l
-1410 3292 l
-1380 3319 l
-1351 3346 l
-1323 3375 l
-1296 3405 l
-1270 3436 l
-1245 3467 l
-1221 3500 l
-1199 3533 l
-1178 3567 l
-1157 3602 l
-1138 3637 l
-1121 3673 l
-1104 3710 l
-1089 3747 l
-1075 3785 l
-1062 3823 l
-1051 3861 l
-1041 3900 l
-1033 3939 l
-1026 3979 l
-1020 4019 l
-1015 4059 l
-1012 4099 l
-1011 4139 l
-1010 4179 l
-1011 4219 l
-1014 4259 l
-1018 4299 l
-1023 4339 l
-1030 4379 l
-1038 4418 l
-1047 4457 l
-1058 4496 l
-1070 4534 l
-1084 4572 l
-1098 4609 l
-1114 4646 l
-1132 4682 l
-1150 4718 l
-1170 4753 l
-1191 4787 l
-1213 4821 l
-1236 4854 l
-1261 4885 l
-1286 4916 l
-1313 4947 l
-1340 4976 l
-1369 5004 l
-1399 5031 l
-1429 5057 l
-1460 5082 l
-1493 5106 l
-1526 5129 l
-1560 5151 l
-1594 5171 l
-1629 5191 l
-1665 5209 l
-1702 5226 l
-1739 5241 l
-1776 5255 l
-1814 5268 l
-1853 5280 l
-1892 5290 l
-1931 5299 l
-1970 5306 l
-2010 5313 l
-2050 5317 l
-2090 5321 l
-2130 5323 l
-2170 5323 l
-2210 5322 l
-2250 5320 l
-2290 5317 l
-2330 5312 l
-2370 5305 l
-2409 5297 l
-2448 5288 l
-2487 5278 l
-2525 5266 l
-2563 5253 l
-2601 5239 l
-2638 5223 l
-2674 5206 l
-2710 5188 l
-2745 5168 l
-2779 5147 l
-2813 5126 l
-2846 5102 l
-2878 5078 l
-2909 5053 l
-2939 5027 l
-2969 4999 l
-2997 4971 l
-3025 4942 l
-3051 4911 l
-3076 4880 l
-3101 4848 l
-3124 4815 l
-3146 4782 l
-3166 4747 l
-3186 4712 l
-3204 4676 l
-3221 4640 l
-3237 4603 l
-3252 4566 l
-3265 4528 l
-3277 4489 l
-3287 4451 l
-3296 4411 l
-3304 4372 l
-3311 4332 l
-3316 4293 l
-3319 4253 l
-3322 4212 l
-3323 4172 l
-3322 4132 l
-3320 4092 l
-3317 4052 l
-3312 4012 l
-3306 3972 l
-3299 3933 l
-S
-3299 3933 m
-3290 3894 l
-3280 3855 l
-3268 3816 l
-3256 3778 l
-3241 3741 l
-S
-2973 3847 m
-2973 3847 l
-2972 3847 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3846 l
-2972 3845 l
-2972 3845 l
-2972 3845 l
-2971 3843 l
-2970 3841 l
-2970 3839 l
-2969 3837 l
-2968 3835 l
-2967 3833 l
-2966 3831 l
-2965 3829 l
-2965 3827 l
-2964 3825 l
-2963 3823 l
-2962 3821 l
-2950 3794 l
-2936 3767 l
-2922 3740 l
-2907 3714 l
-2890 3689 l
-2873 3664 l
-2856 3640 l
-2837 3616 l
-2817 3593 l
-2797 3571 l
-2776 3549 l
-2754 3529 l
-2732 3509 l
-2709 3489 l
-2685 3471 l
-2660 3453 l
-2635 3437 l
-2610 3421 l
-2584 3406 l
-2557 3392 l
-2530 3379 l
-2502 3366 l
-2474 3355 l
-2446 3345 l
-2417 3336 l
-2388 3328 l
-2359 3320 l
-2330 3314 l
-2300 3309 l
-2270 3305 l
-2240 3302 l
-2210 3300 l
-2180 3299 l
-2150 3299 l
-2120 3300 l
-2090 3302 l
-2060 3305 l
-2030 3310 l
-2000 3315 l
-1971 3321 l
-1942 3328 l
-1913 3337 l
-1884 3346 l
-1856 3356 l
-1828 3368 l
-1800 3380 l
-1773 3393 l
-1747 3407 l
-1721 3422 l
-1695 3438 l
-1670 3455 l
-1646 3473 l
-1622 3491 l
-1599 3510 l
-1576 3530 l
-1555 3551 l
-1534 3573 l
-1514 3595 l
-1494 3618 l
-1476 3642 l
-1458 3666 l
-1441 3691 l
-1425 3717 l
-1410 3743 l
-1395 3769 l
-1382 3796 l
-1370 3824 l
-1358 3852 l
-1348 3880 l
-1338 3909 l
-1330 3938 l
-1323 3967 l
-1316 3996 l
-1311 4026 l
-1306 4056 l
-1303 4086 l
-1301 4116 l
-1300 4146 l
-1299 4176 l
-1300 4206 l
-1302 4236 l
-1305 4266 l
-1309 4296 l
-1314 4326 l
-1320 4355 l
-1327 4384 l
-1335 4413 l
-1344 4442 l
-1354 4471 l
-1365 4499 l
-1377 4526 l
-1390 4553 l
-1404 4580 l
-1419 4606 l
-1435 4632 l
-1451 4657 l
-1469 4682 l
-1487 4706 l
-1506 4729 l
-1526 4752 l
-1547 4773 l
-1568 4795 l
-1591 4815 l
-1613 4835 l
-1637 4853 l
-1661 4871 l
-1686 4889 l
-1711 4905 l
-1737 4920 l
-1764 4935 l
-1790 4948 l
-1818 4961 l
-1846 4972 l
-1874 4983 l
-1902 4993 l
-1931 5001 l
-1960 5009 l
-1990 5016 l
-2019 5021 l
-2049 5026 l
-2079 5030 l
-2109 5032 l
-2139 5034 l
-2169 5034 l
-2199 5033 l
-2229 5032 l
-2259 5029 l
-2289 5025 l
-2319 5021 l
-2348 5015 l
-2378 5008 l
-2407 5000 l
-2436 4991 l
-2464 4981 l
-2492 4971 l
-2520 4959 l
-2547 4946 l
-2574 4932 l
-2600 4918 l
-2626 4902 l
-2651 4886 l
-2676 4868 l
-2700 4850 l
-2723 4831 l
-2746 4812 l
-2768 4791 l
-2790 4770 l
-2810 4748 l
-2830 4725 l
-2849 4702 l
-2867 4678 l
-2884 4653 l
-2901 4628 l
-2916 4602 l
-2931 4576 l
-2945 4549 l
-2958 4522 l
-2969 4494 l
-2980 4466 l
-2990 4437 l
-2999 4409 l
-3007 4380 l
-3014 4350 l
-3020 4321 l
-3025 4291 l
-3028 4261 l
-3031 4231 l
-3033 4201 l
-3034 4171 l
-3033 4141 l
-3032 4111 l
-3029 4081 l
-3026 4051 l
-3021 4021 l
-3016 3991 l
-S
-3016 3991 m
-3009 3962 l
-3001 3933 l
-2993 3904 l
-2983 3875 l
-2973 3847 l
-S
-2704 3953 m
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3953 l
-2704 3952 l
-2703 3952 l
-2703 3952 l
-2703 3951 l
-2702 3950 l
-2702 3948 l
-2701 3947 l
-2701 3946 l
-2700 3944 l
-2700 3943 l
-2699 3942 l
-2699 3940 l
-2698 3939 l
-2697 3938 l
-2697 3936 l
-2689 3918 l
-2680 3900 l
-2670 3882 l
-2660 3865 l
-2649 3848 l
-2638 3832 l
-2626 3815 l
-2613 3800 l
-2600 3784 l
-2587 3769 l
-2573 3755 l
-2558 3741 l
-2543 3728 l
-2528 3715 l
-2512 3703 l
-2496 3691 l
-2479 3680 l
-2462 3669 l
-2445 3659 l
-2427 3650 l
-2409 3641 l
-2390 3633 l
-2372 3626 l
-2353 3619 l
-2334 3613 l
-2314 3607 l
-2295 3602 l
-2275 3598 l
-2255 3595 l
-2236 3592 l
-2216 3590 l
-2196 3589 l
-2176 3588 l
-2155 3588 l
-2135 3589 l
-2115 3590 l
-2095 3592 l
-2076 3595 l
-2056 3599 l
-2036 3603 l
-2017 3608 l
-1997 3613 l
-1978 3619 l
-1959 3626 l
-1941 3634 l
-1922 3642 l
-1904 3651 l
-1887 3660 l
-1869 3670 l
-1852 3681 l
-1836 3692 l
-1819 3704 l
-1803 3716 l
-1788 3729 l
-1773 3742 l
-1759 3756 l
-1745 3771 l
-1731 3786 l
-1718 3801 l
-1706 3817 l
-1694 3833 l
-1683 3850 l
-1672 3867 l
-1662 3884 l
-1652 3902 l
-1644 3920 l
-1635 3938 l
-1628 3957 l
-1621 3975 l
-1614 3995 l
-1609 4014 l
-1604 4033 l
-1600 4053 l
-1596 4073 l
-1593 4093 l
-1591 4112 l
-1589 4133 l
-1589 4153 l
-1588 4173 l
-1589 4193 l
-1590 4213 l
-1592 4233 l
-1595 4253 l
-1598 4273 l
-1602 4292 l
-1607 4312 l
-1612 4331 l
-1618 4350 l
-1625 4369 l
-1632 4388 l
-1640 4406 l
-1649 4424 l
-1658 4442 l
-1668 4460 l
-1679 4477 l
-1690 4494 l
-1701 4510 l
-1714 4526 l
-1726 4541 l
-1740 4556 l
-1753 4571 l
-1768 4585 l
-1783 4599 l
-1798 4612 l
-1813 4624 l
-1830 4636 l
-1846 4648 l
-1863 4659 l
-1880 4669 l
-1898 4679 l
-1916 4688 l
-1934 4696 l
-1953 4704 l
-1971 4711 l
-1990 4717 l
-2010 4723 l
-2029 4728 l
-2049 4733 l
-2068 4736 l
-2088 4739 l
-2108 4742 l
-2128 4743 l
-2148 4744 l
-2168 4745 l
-2188 4744 l
-2208 4743 l
-2228 4741 l
-2248 4739 l
-2268 4736 l
-2288 4732 l
-2307 4727 l
-2327 4722 l
-2346 4716 l
-2365 4710 l
-2384 4702 l
-2402 4695 l
-2420 4686 l
-2438 4677 l
-2456 4667 l
-2473 4657 l
-2490 4646 l
-2506 4634 l
-2522 4622 l
-2538 4610 l
-2553 4597 l
-2568 4583 l
-2582 4569 l
-2596 4554 l
-2609 4539 l
-2621 4523 l
-2634 4507 l
-2645 4491 l
-2656 4474 l
-2666 4457 l
-2676 4439 l
-2685 4421 l
-2694 4403 l
-2702 4385 l
-2709 4366 l
-2716 4347 l
-2722 4328 l
-2727 4308 l
-2731 4289 l
-2735 4269 l
-2739 4249 l
-2741 4229 l
-2743 4209 l
-2744 4189 l
-2745 4169 l
-2744 4149 l
-2743 4129 l
-2742 4109 l
-2739 4089 l
-2736 4069 l
-2733 4050 l
-S
-2733 4050 m
-2728 4030 l
-2723 4011 l
-2717 3991 l
-2711 3972 l
-2704 3953 l
-S
-2435 4060 m
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4060 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2435 4059 l
-2434 4058 l
-2434 4057 l
-2434 4057 l
-2434 4056 l
-2433 4055 l
-2433 4055 l
-2433 4054 l
-2432 4053 l
-2432 4053 l
-2432 4052 l
-2432 4051 l
-2427 4042 l
-2423 4033 l
-2418 4024 l
-2413 4016 l
-2408 4007 l
-2402 3999 l
-2396 3991 l
-2390 3983 l
-2383 3975 l
-2377 3968 l
-2370 3961 l
-2362 3954 l
-2355 3947 l
-2347 3941 l
-2339 3935 l
-2331 3929 l
-2323 3923 l
-2314 3918 l
-2305 3913 l
-2297 3908 l
-2288 3904 l
-2278 3900 l
-2269 3896 l
-2260 3893 l
-2250 3890 l
-2240 3887 l
-2231 3884 l
-2221 3882 l
-2211 3881 l
-2201 3879 l
-2191 3878 l
-2181 3878 l
-2171 3877 l
-2161 3877 l
-2151 3878 l
-2141 3878 l
-2131 3879 l
-2121 3881 l
-2111 3882 l
-2101 3885 l
-2092 3887 l
-2082 3890 l
-2072 3893 l
-2063 3896 l
-2054 3900 l
-2044 3904 l
-2035 3909 l
-2027 3913 l
-2018 3918 l
-2009 3924 l
-2001 3929 l
-1993 3935 l
-1985 3941 l
-1977 3948 l
-1970 3954 l
-1963 3961 l
-1956 3969 l
-1949 3976 l
-1942 3984 l
-1936 3992 l
-1930 4000 l
-1925 4008 l
-1919 4016 l
-1914 4025 l
-1909 4034 l
-1905 4043 l
-1901 4052 l
-1897 4061 l
-1894 4071 l
-1890 4080 l
-1888 4090 l
-1885 4100 l
-1883 4110 l
-1881 4120 l
-1880 4129 l
-1879 4139 l
-1878 4149 l
-1877 4159 l
-1877 4170 l
-1878 4180 l
-1878 4190 l
-1879 4200 l
-1881 4210 l
-1882 4219 l
-1884 4229 l
-1887 4239 l
-1889 4249 l
-1892 4258 l
-1896 4268 l
-1899 4277 l
-1903 4286 l
-1908 4295 l
-1912 4304 l
-1917 4313 l
-1923 4322 l
-1928 4330 l
-1934 4338 l
-1940 4346 l
-1946 4354 l
-1953 4361 l
-1960 4369 l
-1967 4376 l
-1974 4383 l
-1982 4389 l
-1990 4395 l
-1998 4401 l
-2006 4407 l
-2015 4412 l
-2023 4418 l
-2032 4422 l
-2041 4427 l
-2050 4431 l
-2059 4435 l
-2069 4439 l
-2078 4442 l
-2088 4445 l
-2098 4447 l
-2107 4449 l
-2117 4451 l
-2127 4453 l
-2137 4454 l
-2147 4455 l
-2157 4455 l
-2167 4456 l
-2177 4455 l
-2187 4455 l
-2197 4454 l
-2207 4453 l
-2217 4451 l
-2227 4449 l
-2237 4447 l
-2247 4444 l
-2256 4441 l
-2266 4438 l
-2275 4434 l
-2284 4430 l
-2293 4426 l
-2302 4422 l
-2311 4417 l
-2320 4412 l
-2328 4406 l
-2336 4400 l
-2344 4394 l
-2352 4388 l
-2360 4381 l
-2367 4375 l
-2374 4368 l
-2381 4360 l
-2388 4353 l
-2394 4345 l
-2400 4337 l
-2406 4329 l
-2411 4320 l
-2416 4312 l
-2421 4303 l
-2426 4294 l
-2430 4285 l
-2434 4276 l
-2438 4266 l
-2441 4257 l
-2444 4247 l
-2447 4237 l
-2449 4228 l
-2451 4218 l
-2452 4208 l
-2454 4198 l
-2455 4188 l
-2455 4178 l
-2455 4168 l
-2455 4158 l
-2455 4148 l
-2454 4138 l
-2453 4128 l
-2451 4118 l
-2450 4108 l
-S
-2450 4108 m
-2447 4098 l
-2445 4088 l
-2442 4079 l
-2439 4069 l
-2435 4060 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-3682 3323 m
-3655 3337 l
-S
-3559 3132 m
-3534 3150 l
-S
-3412 2959 m
-3390 2980 l
-S
-3057 2677 m
-3041 2704 l
-S
-2855 2574 m
-2843 2602 l
-S
-2642 2498 m
-2633 2527 l
-S
-2194 2431 m
-2193 2462 l
-S
-1967 2443 m
-1971 2473 l
-S
-1744 2483 m
-1751 2513 l
-S
-1323 2650 m
-1338 2677 l
-S
-1132 2773 m
-1151 2798 l
-S
-960 2920 m
-981 2942 l
-S
-678 3275 m
-704 3291 l
-S
-575 3477 m
-603 3489 l
-S
-651 5010 m
-678 4995 l
-S
-774 5201 m
-799 5183 l
-S
-921 5374 m
-943 5353 l
-S
-1276 5655 m
-1291 5629 l
-S
-1478 5759 m
-1490 5731 l
-S
-1691 5835 m
-1700 5806 l
-S
-2139 5901 m
-2140 5871 l
-S
-2366 5890 m
-2362 5860 l
-S
-2589 5849 m
-2582 5820 l
-S
-3010 5683 m
-2995 5656 l
-S
-3200 5560 m
-3182 5535 l
-S
-3373 5413 m
-3352 5391 l
-S
-3655 5058 m
-3628 5042 l
-S
-3758 4856 m
-3730 4844 l
-S
-3834 4642 m
-3805 4634 l
-S
-3900 4194 m
-3870 4193 l
-S
-3889 3967 m
-3859 3971 l
-S
-3848 3744 m
-3819 3751 l
-S
-4787 3129 m
-4799 3156 l
-S
-4719 3155 m
-4732 3183 l
-S
-4652 3182 m
-4665 3209 l
-S
-4518 3235 m
-4531 3263 l
-S
-4451 3262 m
-4463 3289 l
-S
-4384 3288 m
-4396 3316 l
-S
-4249 3341 m
-4262 3369 l
-S
-4182 3368 m
-4195 3396 l
-S
-4115 3395 m
-4127 3422 l
-S
-3980 3448 m
-3993 3476 l
-S
-3913 3474 m
-3926 3502 l
-S
-3846 3501 m
-3859 3529 l
-S
-3712 3554 m
-3724 3582 l
-S
-3645 3581 m
-3657 3609 l
-S
-3577 3608 m
-3590 3635 l
-S
-3443 3661 m
-3456 3688 l
-S
-3376 3687 m
-3388 3715 l
-S
-3309 3714 m
-3321 3742 l
-S
-3174 3767 m
-3187 3795 l
-S
-3107 3794 m
-3120 3821 l
-S
-3040 3820 m
-3052 3848 l
-S
-2905 3874 m
-2918 3901 l
-S
-2838 3900 m
-2851 3928 l
-S
-2771 3927 m
-2784 3955 l
-S
-2637 3980 m
-2649 4008 l
-S
-2570 4007 m
-2582 4034 l
-S
-2502 4033 m
-2515 4061 l
-S
-2368 4087 m
-2381 4114 l
-S
-2301 4113 m
-2313 4141 l
-S
-2234 4140 m
-2246 4167 l
-S
-3779 3528 m
-3754 3468 l
-3727 3409 l
-3697 3351 l
-3666 3294 l
-3632 3239 l
-3596 3185 l
-3559 3132 l
-3519 3080 l
-3478 3031 l
-3434 2982 l
-3389 2936 l
-3342 2891 l
-3294 2848 l
-3244 2807 l
-S
-3244 2807 m
-3192 2767 l
-3139 2730 l
-3085 2694 l
-3029 2661 l
-2972 2630 l
-2914 2601 l
-2855 2574 l
-2795 2549 l
-2734 2527 l
-2673 2507 l
-2610 2489 l
-2547 2473 l
-2484 2460 l
-2420 2450 l
-S
-2420 2450 m
-2355 2441 l
-2291 2436 l
-2226 2432 l
-2161 2431 l
-2096 2432 l
-2032 2436 l
-1967 2443 l
-1903 2451 l
-1839 2462 l
-1775 2476 l
-1713 2492 l
-1650 2510 l
-1589 2530 l
-1528 2553 l
-S
-1528 2553 m
-1468 2578 l
-1409 2605 l
-1351 2635 l
-1295 2666 l
-1239 2700 l
-1185 2735 l
-1132 2773 l
-1081 2813 l
-1031 2854 l
-983 2898 l
-936 2943 l
-892 2990 l
-849 3038 l
-807 3088 l
-S
-807 3088 m
-768 3140 l
-731 3193 l
-695 3247 l
-662 3303 l
-631 3360 l
-602 3418 l
-575 3477 l
-550 3537 l
-533 3583 l
-S
-533 4749 m
-554 4805 l
-S
-554 4805 m
-579 4865 l
-606 4924 l
-636 4982 l
-667 5038 l
-701 5094 l
-736 5148 l
-774 5201 l
-814 5252 l
-855 5302 l
-899 5350 l
-944 5397 l
-991 5442 l
-1039 5485 l
-1089 5526 l
-S
-1089 5526 m
-1141 5566 l
-1194 5603 l
-1248 5638 l
-1304 5672 l
-1361 5703 l
-1419 5732 l
-1478 5759 l
-1538 5784 l
-1599 5806 l
-1660 5826 l
-1723 5844 l
-1786 5859 l
-1849 5872 l
-1913 5883 l
-S
-1913 5883 m
-1977 5891 l
-2042 5897 l
-2107 5901 l
-2172 5902 l
-2237 5900 l
-2301 5896 l
-2366 5890 l
-2430 5881 l
-2494 5870 l
-2557 5857 l
-2620 5841 l
-2683 5823 l
-2744 5803 l
-2805 5780 l
-S
-2805 5780 m
-2865 5755 l
-2924 5728 l
-2981 5698 l
-3038 5667 l
-3094 5633 l
-3148 5597 l
-3200 5560 l
-3252 5520 l
-3302 5478 l
-3350 5435 l
-3396 5390 l
-3441 5343 l
-3484 5294 l
-3526 5244 l
-S
-3526 5244 m
-3565 5193 l
-3602 5140 l
-3638 5085 l
-3671 5030 l
-3702 4973 l
-3731 4915 l
-3758 4856 l
-3783 4796 l
-3805 4735 l
-3825 4673 l
-3843 4611 l
-3858 4548 l
-3871 4484 l
-3882 4420 l
-S
-3882 4420 m
-3890 4356 l
-3896 4291 l
-3900 4226 l
-3901 4161 l
-3899 4096 l
-3895 4032 l
-3889 3967 l
-3881 3903 l
-3869 3839 l
-3856 3775 l
-3840 3712 l
-3822 3650 l
-3802 3588 l
-3800 3584 l
-3799 3580 l
-3797 3575 l
-3795 3571 l
-3794 3567 l
-3792 3562 l
-3791 3558 l
-3789 3554 l
-3787 3549 l
-3786 3545 l
-3784 3541 l
-3782 3536 l
-3781 3532 l
-3780 3532 l
-3780 3531 l
-3780 3531 l
-3780 3531 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3780 3530 l
-3779 3529 l
-3779 3529 l
-3779 3529 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-3779 3528 l
-S
-4877 3093 m
-4873 3094 l
-4854 3102 l
-S
-4854 3102 m
-4835 3110 l
-4815 3117 l
-4796 3125 l
-4777 3132 l
-4758 3140 l
-4739 3148 l
-4719 3155 l
-4700 3163 l
-4681 3170 l
-4662 3178 l
-4643 3186 l
-4624 3193 l
-4604 3201 l
-4585 3208 l
-S
-4585 3208 m
-4566 3216 l
-4547 3224 l
-4528 3231 l
-4508 3239 l
-4489 3246 l
-4470 3254 l
-4451 3262 l
-4432 3269 l
-4412 3277 l
-4393 3284 l
-4374 3292 l
-4355 3300 l
-4336 3307 l
-4316 3315 l
-S
-4316 3315 m
-4297 3322 l
-4278 3330 l
-4259 3338 l
-4240 3345 l
-4220 3353 l
-4201 3360 l
-4182 3368 l
-4163 3376 l
-4144 3383 l
-4124 3391 l
-4105 3398 l
-4086 3406 l
-4067 3414 l
-4048 3421 l
-S
-4048 3421 m
-4028 3429 l
-4009 3436 l
-3990 3444 l
-3971 3452 l
-3952 3459 l
-3932 3467 l
-3913 3474 l
-3894 3482 l
-3875 3490 l
-3856 3497 l
-3836 3505 l
-3817 3512 l
-3798 3520 l
-3779 3528 l
-S
-3779 3528 m
-3760 3535 l
-3740 3543 l
-3721 3551 l
-3702 3558 l
-3683 3566 l
-3664 3573 l
-3645 3581 l
-3625 3589 l
-3606 3596 l
-3587 3604 l
-3568 3611 l
-3549 3619 l
-3529 3627 l
-3510 3634 l
-S
-3510 3634 m
-3491 3642 l
-3472 3649 l
-3453 3657 l
-3433 3665 l
-3414 3672 l
-3395 3680 l
-3376 3687 l
-3357 3695 l
-3337 3703 l
-3318 3710 l
-3299 3718 l
-3280 3725 l
-3261 3733 l
-3241 3741 l
-S
-3241 3741 m
-3222 3748 l
-3203 3756 l
-3184 3763 l
-3165 3771 l
-3145 3779 l
-3126 3786 l
-3107 3794 l
-3088 3801 l
-3069 3809 l
-3049 3817 l
-3030 3824 l
-3011 3832 l
-2992 3839 l
-2973 3847 l
-S
-2973 3847 m
-2953 3855 l
-2934 3862 l
-2915 3870 l
-2896 3877 l
-2877 3885 l
-2857 3893 l
-2838 3900 l
-2819 3908 l
-2800 3915 l
-2781 3923 l
-2762 3931 l
-2742 3938 l
-2723 3946 l
-2704 3953 l
-S
-2704 3953 m
-2685 3961 l
-2666 3969 l
-2646 3976 l
-2627 3984 l
-2608 3991 l
-2589 3999 l
-2570 4007 l
-2550 4014 l
-2531 4022 l
-2512 4029 l
-2493 4037 l
-2474 4045 l
-2454 4052 l
-2435 4060 l
-S
-2435 4060 m
-2416 4068 l
-2397 4075 l
-2378 4083 l
-2358 4090 l
-2339 4098 l
-2320 4106 l
-2301 4113 l
-2282 4121 l
-2262 4128 l
-2243 4136 l
-2224 4144 l
-2205 4151 l
-2186 4159 l
-2166 4166 l
-S
-2166 4166 m
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-2166 4166 l
-S
-1 g
-3911 3420 m
-3914 3420 l
-3914 3421 l
-3911 3421 l
-3908 3421 m
-3914 3421 l
-3914 3422 l
-3908 3422 l
-3906 3422 m
-3915 3422 l
-3915 3423 l
-3906 3423 l
-3903 3423 m
-3915 3423 l
-3915 3424 l
-3903 3424 l
-3901 3424 m
-3916 3424 l
-3916 3425 l
-3901 3425 l
-3898 3425 m
-3916 3425 l
-3916 3426 l
-3898 3426 l
-3896 3426 m
-3916 3426 l
-3916 3427 l
-3896 3427 l
-3893 3427 m
-3917 3427 l
-3917 3428 l
-3893 3428 l
-3891 3428 m
-3917 3428 l
-3917 3429 l
-3891 3429 l
-3888 3429 m
-3918 3429 l
-3918 3430 l
-3888 3430 l
-3886 3430 m
-3918 3430 l
-3918 3431 l
-3886 3431 l
-3883 3431 m
-3918 3431 l
-3918 3432 l
-3883 3432 l
-3881 3432 m
-3919 3432 l
-3919 3433 l
-3881 3433 l
-3878 3433 m
-3919 3433 l
-3919 3434 l
-3878 3434 l
-3876 3434 m
-3920 3434 l
-3920 3435 l
-3876 3435 l
-3873 3435 m
-3920 3435 l
-3920 3436 l
-3873 3436 l
-3871 3436 m
-3920 3436 l
-3920 3437 l
-3871 3437 l
-3868 3437 m
-3921 3437 l
-3921 3438 l
-3868 3438 l
-3866 3438 m
-3921 3438 l
-3921 3439 l
-3866 3439 l
-3863 3439 m
-3922 3439 l
-3922 3440 l
-3863 3440 l
-3861 3440 m
-3922 3440 l
-3922 3441 l
-3861 3441 l
-3858 3441 m
-3922 3441 l
-3922 3442 l
-3858 3442 l
-3856 3442 m
-3923 3442 l
-3923 3443 l
-3856 3443 l
-3853 3443 m
-3923 3443 l
-3923 3444 l
-3853 3444 l
-3851 3444 m
-3924 3444 l
-3924 3445 l
-3851 3445 l
-3848 3445 m
-3924 3445 l
-3924 3446 l
-3848 3446 l
-3846 3446 m
-3924 3446 l
-3924 3447 l
-3846 3447 l
-3843 3447 m
-3925 3447 l
-3925 3448 l
-3843 3448 l
-3841 3448 m
-3925 3448 l
-3925 3449 l
-3841 3449 l
-3838 3449 m
-3926 3449 l
-3926 3450 l
-3838 3450 l
-3836 3450 m
-3926 3450 l
-3926 3451 l
-3836 3451 l
-3833 3451 m
-3926 3451 l
-3926 3452 l
-3833 3452 l
-3831 3452 m
-3927 3452 l
-3927 3453 l
-3831 3453 l
-3828 3453 m
-3927 3453 l
-3927 3454 l
-3828 3454 l
-3826 3454 m
-3927 3454 l
-3927 3455 l
-3826 3455 l
-3823 3455 m
-3928 3455 l
-3928 3456 l
-3823 3456 l
-3821 3456 m
-3928 3456 l
-3928 3457 l
-3821 3457 l
-3818 3457 m
-3929 3457 l
-3929 3458 l
-3818 3458 l
-3816 3458 m
-3929 3458 l
-3929 3459 l
-3816 3459 l
-3813 3459 m
-3929 3459 l
-3929 3460 l
-3813 3460 l
-3811 3460 m
-3930 3460 l
-3930 3461 l
-3811 3461 l
-3808 3461 m
-3930 3461 l
-3930 3462 l
-3808 3462 l
-3806 3462 m
-3931 3462 l
-3931 3463 l
-3806 3463 l
-3803 3463 m
-3931 3463 l
-3931 3464 l
-3803 3464 l
-3801 3464 m
-3931 3464 l
-3931 3465 l
-3801 3465 l
-3801 3465 m
-3932 3465 l
-3932 3467 l
-3801 3467 l
-3801 3467 m
-3933 3467 l
-3933 3468 l
-3801 3468 l
-3802 3468 m
-3933 3468 l
-3933 3470 l
-3802 3470 l
-3802 3470 m
-3934 3470 l
-3934 3471 l
-3802 3471 l
-3803 3471 m
-3934 3471 l
-3934 3472 l
-3803 3472 l
-3803 3472 m
-3935 3472 l
-3935 3473 l
-3803 3473 l
-3804 3473 m
-3935 3473 l
-3935 3475 l
-3804 3475 l
-3804 3475 m
-3936 3475 l
-3936 3476 l
-3804 3476 l
-3805 3476 m
-3936 3476 l
-3936 3477 l
-3805 3477 l
-3805 3477 m
-3937 3477 l
-3937 3478 l
-3805 3478 l
-3806 3478 m
-3937 3478 l
-3937 3480 l
-3806 3480 l
-3806 3480 m
-3938 3480 l
-3938 3481 l
-3806 3481 l
-3807 3481 m
-3938 3481 l
-3938 3482 l
-3807 3482 l
-3807 3482 m
-3939 3482 l
-3939 3483 l
-3807 3483 l
-3808 3483 m
-3939 3483 l
-3939 3485 l
-3808 3485 l
-3808 3485 m
-3940 3485 l
-3940 3486 l
-3808 3486 l
-3809 3486 m
-3940 3486 l
-3940 3487 l
-3809 3487 l
-3809 3487 m
-3941 3487 l
-3941 3488 l
-3809 3488 l
-3810 3488 m
-3941 3488 l
-3941 3490 l
-3810 3490 l
-3810 3490 m
-3942 3490 l
-3942 3491 l
-3810 3491 l
-3811 3491 m
-3942 3491 l
-3942 3492 l
-3811 3492 l
-3811 3492 m
-3943 3492 l
-3943 3493 l
-3811 3493 l
-3812 3493 m
-3943 3493 l
-3943 3495 l
-3812 3495 l
-3812 3495 m
-3944 3495 l
-3944 3496 l
-3812 3496 l
-3813 3496 m
-3944 3496 l
-3944 3497 l
-3813 3497 l
-3813 3497 m
-3945 3497 l
-3945 3498 l
-3813 3498 l
-3814 3498 m
-3945 3498 l
-3945 3500 l
-3814 3500 l
-3814 3500 m
-3946 3500 l
-3946 3501 l
-3814 3501 l
-3815 3501 m
-3946 3501 l
-3946 3502 l
-3815 3502 l
-3815 3502 m
-3947 3502 l
-3947 3503 l
-3815 3503 l
-3816 3503 m
-3947 3503 l
-3947 3505 l
-3816 3505 l
-3816 3505 m
-3948 3505 l
-3948 3506 l
-3816 3506 l
-3817 3506 m
-3948 3506 l
-3948 3507 l
-3817 3507 l
-3817 3507 m
-3949 3507 l
-3949 3508 l
-3817 3508 l
-3818 3508 m
-3949 3508 l
-3949 3510 l
-3818 3510 l
-3818 3510 m
-3950 3510 l
-3950 3511 l
-3818 3511 l
-3819 3511 m
-3950 3511 l
-3950 3512 l
-3819 3512 l
-3819 3512 m
-3950 3512 l
-3950 3513 l
-3819 3513 l
-3820 3513 m
-3950 3513 l
-3950 3514 l
-3820 3514 l
-3820 3514 m
-3948 3514 l
-3948 3515 l
-3820 3515 l
-3820 3515 m
-3946 3515 l
-3946 3516 l
-3820 3516 l
-3821 3516 m
-3943 3516 l
-3943 3517 l
-3821 3517 l
-3821 3517 m
-3941 3517 l
-3941 3518 l
-3821 3518 l
-3822 3518 m
-3938 3518 l
-3938 3519 l
-3822 3519 l
-3822 3519 m
-3936 3519 l
-3936 3520 l
-3822 3520 l
-3822 3520 m
-3933 3520 l
-3933 3521 l
-3822 3521 l
-3823 3521 m
-3931 3521 l
-3931 3522 l
-3823 3522 l
-3823 3522 m
-3928 3522 l
-3928 3523 l
-3823 3523 l
-3824 3523 m
-3926 3523 l
-3926 3524 l
-3824 3524 l
-3824 3524 m
-3923 3524 l
-3923 3525 l
-3824 3525 l
-3824 3525 m
-3921 3525 l
-3921 3526 l
-3824 3526 l
-3825 3526 m
-3918 3526 l
-3918 3527 l
-3825 3527 l
-3825 3527 m
-3916 3527 l
-3916 3528 l
-3825 3528 l
-3826 3528 m
-3913 3528 l
-3913 3529 l
-3826 3529 l
-3826 3529 m
-3911 3529 l
-3911 3530 l
-3826 3530 l
-3826 3530 m
-3908 3530 l
-3908 3531 l
-3826 3531 l
-3827 3531 m
-3906 3531 l
-3906 3532 l
-3827 3532 l
-3827 3532 m
-3903 3532 l
-3903 3533 l
-3827 3533 l
-3828 3533 m
-3901 3533 l
-3901 3534 l
-3828 3534 l
-3828 3534 m
-3898 3534 l
-3898 3535 l
-3828 3535 l
-3828 3535 m
-3896 3535 l
-3896 3536 l
-3828 3536 l
-3829 3536 m
-3893 3536 l
-3893 3537 l
-3829 3537 l
-3829 3537 m
-3891 3537 l
-3891 3538 l
-3829 3538 l
-3830 3538 m
-3888 3538 l
-3888 3539 l
-3830 3539 l
-3830 3539 m
-3886 3539 l
-3886 3540 l
-3830 3540 l
-3830 3540 m
-3883 3540 l
-3883 3541 l
-3830 3541 l
-3831 3541 m
-3881 3541 l
-3881 3542 l
-3831 3542 l
-3831 3542 m
-3878 3542 l
-3878 3543 l
-3831 3543 l
-3832 3543 m
-3876 3543 l
-3876 3544 l
-3832 3544 l
-3832 3544 m
-3873 3544 l
-3873 3545 l
-3832 3545 l
-3832 3545 m
-3871 3545 l
-3871 3546 l
-3832 3546 l
-3833 3546 m
-3868 3546 l
-3868 3547 l
-3833 3547 l
-3833 3547 m
-3866 3547 l
-3866 3548 l
-3833 3548 l
-3834 3548 m
-3863 3548 l
-3863 3549 l
-3834 3549 l
-3834 3549 m
-3861 3549 l
-3861 3550 l
-3834 3550 l
-3834 3550 m
-3858 3550 l
-3858 3551 l
-3834 3551 l
-3835 3551 m
-3856 3551 l
-3856 3552 l
-3835 3552 l
-3835 3552 m
-3853 3552 l
-3853 3553 l
-3835 3553 l
-3836 3553 m
-3851 3553 l
-3851 3554 l
-3836 3554 l
-3836 3554 m
-3848 3554 l
-3848 3555 l
-3836 3555 l
-3836 3555 m
-3846 3555 l
-3846 3556 l
-3836 3556 l
-3837 3556 m
-3843 3556 l
-3843 3557 l
-3837 3557 l
-3837 3557 m
-3841 3557 l
-3841 3558 l
-3837 3558 l
-Y
-3913.2 3420.2 m
-3801 3465 l
-3838 3558 l
-3950 3513 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3833 3502 m
-3832 3488 l
-3841 3476 l
-3859 3464 l
-3870 3460 l
-3891 3456 l
-3906 3459 l
-3915 3469 l
-3918 3477 l
-3919 3490 l
-3910 3502 l
-3892 3514 l
-3880 3519 l
-3860 3523 l
-3845 3519 l
-3836 3509 l
-3833 3502 l
-S
-1 g
-3305 2646 m
-3308 2646 l
-3308 2647 l
-3305 2647 l
-3304 2647 m
-3309 2647 l
-3309 2648 l
-3304 2648 l
-3304 2648 m
-3310 2648 l
-3310 2649 l
-3304 2649 l
-3303 2649 m
-3311 2649 l
-3311 2650 l
-3303 2650 l
-3302 2650 m
-3313 2650 l
-3313 2651 l
-3302 2651 l
-3301 2651 m
-3314 2651 l
-3314 2652 l
-3301 2652 l
-3300 2652 m
-3315 2652 l
-3315 2653 l
-3300 2653 l
-3300 2653 m
-3317 2653 l
-3317 2654 l
-3300 2654 l
-3299 2654 m
-3318 2654 l
-3318 2655 l
-3299 2655 l
-3298 2655 m
-3319 2655 l
-3319 2656 l
-3298 2656 l
-3297 2656 m
-3320 2656 l
-3320 2657 l
-3297 2657 l
-3296 2657 m
-3322 2657 l
-3322 2658 l
-3296 2658 l
-3296 2658 m
-3323 2658 l
-3323 2659 l
-3296 2659 l
-3295 2659 m
-3324 2659 l
-3324 2660 l
-3295 2660 l
-3294 2660 m
-3325 2660 l
-3325 2661 l
-3294 2661 l
-3293 2661 m
-3327 2661 l
-3327 2662 l
-3293 2662 l
-3292 2662 m
-3328 2662 l
-3328 2663 l
-3292 2663 l
-3292 2663 m
-3329 2663 l
-3329 2664 l
-3292 2664 l
-3291 2664 m
-3331 2664 l
-3331 2665 l
-3291 2665 l
-3290 2665 m
-3332 2665 l
-3332 2666 l
-3290 2666 l
-3289 2666 m
-3333 2666 l
-3333 2667 l
-3289 2667 l
-3288 2667 m
-3334 2667 l
-3334 2668 l
-3288 2668 l
-3288 2668 m
-3336 2668 l
-3336 2669 l
-3288 2669 l
-3287 2669 m
-3337 2669 l
-3337 2670 l
-3287 2670 l
-3286 2670 m
-3338 2670 l
-3338 2671 l
-3286 2671 l
-3285 2671 m
-3340 2671 l
-3340 2672 l
-3285 2672 l
-3284 2672 m
-3341 2672 l
-3341 2673 l
-3284 2673 l
-3284 2673 m
-3342 2673 l
-3342 2674 l
-3284 2674 l
-3283 2674 m
-3343 2674 l
-3343 2675 l
-3283 2675 l
-3282 2675 m
-3345 2675 l
-3345 2676 l
-3282 2676 l
-3281 2676 m
-3346 2676 l
-3346 2677 l
-3281 2677 l
-3281 2677 m
-3347 2677 l
-3347 2678 l
-3281 2678 l
-3280 2678 m
-3348 2678 l
-3348 2679 l
-3280 2679 l
-3279 2679 m
-3350 2679 l
-3350 2680 l
-3279 2680 l
-3278 2680 m
-3351 2680 l
-3351 2681 l
-3278 2681 l
-3277 2681 m
-3352 2681 l
-3352 2682 l
-3277 2682 l
-3277 2682 m
-3354 2682 l
-3354 2683 l
-3277 2683 l
-3276 2683 m
-3355 2683 l
-3355 2684 l
-3276 2684 l
-3275 2684 m
-3356 2684 l
-3356 2685 l
-3275 2685 l
-3274 2685 m
-3357 2685 l
-3357 2686 l
-3274 2686 l
-3273 2686 m
-3359 2686 l
-3359 2687 l
-3273 2687 l
-3273 2687 m
-3360 2687 l
-3360 2688 l
-3273 2688 l
-3272 2688 m
-3361 2688 l
-3361 2689 l
-3272 2689 l
-3271 2689 m
-3363 2689 l
-3363 2690 l
-3271 2690 l
-3270 2690 m
-3364 2690 l
-3364 2691 l
-3270 2691 l
-3269 2691 m
-3365 2691 l
-3365 2692 l
-3269 2692 l
-3269 2692 m
-3366 2692 l
-3366 2693 l
-3269 2693 l
-3268 2693 m
-3368 2693 l
-3368 2694 l
-3268 2694 l
-3267 2694 m
-3369 2694 l
-3369 2695 l
-3267 2695 l
-3266 2695 m
-3370 2695 l
-3370 2696 l
-3266 2696 l
-3265 2696 m
-3371 2696 l
-3371 2697 l
-3265 2697 l
-3265 2697 m
-3373 2697 l
-3373 2698 l
-3265 2698 l
-3264 2698 m
-3374 2698 l
-3374 2699 l
-3264 2699 l
-3263 2699 m
-3375 2699 l
-3375 2700 l
-3263 2700 l
-3262 2700 m
-3377 2700 l
-3377 2701 l
-3262 2701 l
-3261 2701 m
-3378 2701 l
-3378 2702 l
-3261 2702 l
-3261 2702 m
-3379 2702 l
-3379 2703 l
-3261 2703 l
-3260 2703 m
-3380 2703 l
-3380 2704 l
-3260 2704 l
-3259 2704 m
-3382 2704 l
-3382 2705 l
-3259 2705 l
-3258 2705 m
-3383 2705 l
-3383 2706 l
-3258 2706 l
-3257 2706 m
-3384 2706 l
-3384 2707 l
-3257 2707 l
-3257 2707 m
-3385 2707 l
-3385 2708 l
-3257 2708 l
-3256 2708 m
-3385 2708 l
-3385 2709 l
-3256 2709 l
-3255 2709 m
-3385 2709 l
-3385 2710 l
-3255 2710 l
-3254 2710 m
-3384 2710 l
-3384 2711 l
-3254 2711 l
-3254 2711 m
-3383 2711 l
-3383 2712 l
-3254 2712 l
-3253 2712 m
-3382 2712 l
-3382 2713 l
-3253 2713 l
-3252 2713 m
-3382 2713 l
-3382 2714 l
-3252 2714 l
-3251 2714 m
-3381 2714 l
-3381 2715 l
-3251 2715 l
-3250 2715 m
-3380 2715 l
-3380 2716 l
-3250 2716 l
-3250 2716 m
-3379 2716 l
-3379 2717 l
-3250 2717 l
-3249 2717 m
-3378 2717 l
-3378 2718 l
-3249 2718 l
-3248 2718 m
-3378 2718 l
-3378 2719 l
-3248 2719 l
-3247 2719 m
-3377 2719 l
-3377 2720 l
-3247 2720 l
-3246 2720 m
-3376 2720 l
-3376 2721 l
-3246 2721 l
-3246 2721 m
-3375 2721 l
-3375 2722 l
-3246 2722 l
-3245 2722 m
-3374 2722 l
-3374 2723 l
-3245 2723 l
-3244 2723 m
-3374 2723 l
-3374 2724 l
-3244 2724 l
-3243 2724 m
-3373 2724 l
-3373 2725 l
-3243 2725 l
-3242 2725 m
-3372 2725 l
-3372 2726 l
-3242 2726 l
-3242 2726 m
-3371 2726 l
-3371 2727 l
-3242 2727 l
-3241 2727 m
-3370 2727 l
-3370 2728 l
-3241 2728 l
-3240 2728 m
-3370 2728 l
-3370 2729 l
-3240 2729 l
-3239 2729 m
-3369 2729 l
-3369 2730 l
-3239 2730 l
-3238 2730 m
-3368 2730 l
-3368 2731 l
-3238 2731 l
-3238 2731 m
-3367 2731 l
-3367 2732 l
-3238 2732 l
-3237 2732 m
-3367 2732 l
-3367 2733 l
-3237 2733 l
-3236 2733 m
-3366 2733 l
-3366 2734 l
-3236 2734 l
-3235 2734 m
-3365 2734 l
-3365 2735 l
-3235 2735 l
-3234 2735 m
-3364 2735 l
-3364 2736 l
-3234 2736 l
-3234 2736 m
-3363 2736 l
-3363 2737 l
-3234 2737 l
-3233 2737 m
-3363 2737 l
-3363 2738 l
-3233 2738 l
-3232 2738 m
-3362 2738 l
-3362 2739 l
-3232 2739 l
-3231 2739 m
-3361 2739 l
-3361 2740 l
-3231 2740 l
-3231 2740 m
-3360 2740 l
-3360 2741 l
-3231 2741 l
-3231 2741 m
-3359 2741 l
-3359 2742 l
-3231 2742 l
-3232 2742 m
-3359 2742 l
-3359 2743 l
-3232 2743 l
-3233 2743 m
-3358 2743 l
-3358 2744 l
-3233 2744 l
-3234 2744 m
-3357 2744 l
-3357 2745 l
-3234 2745 l
-3236 2745 m
-3356 2745 l
-3356 2746 l
-3236 2746 l
-3237 2746 m
-3355 2746 l
-3355 2747 l
-3237 2747 l
-3238 2747 m
-3355 2747 l
-3355 2748 l
-3238 2748 l
-3239 2748 m
-3354 2748 l
-3354 2749 l
-3239 2749 l
-3241 2749 m
-3353 2749 l
-3353 2750 l
-3241 2750 l
-3242 2750 m
-3352 2750 l
-3352 2751 l
-3242 2751 l
-3243 2751 m
-3352 2751 l
-3352 2752 l
-3243 2752 l
-3245 2752 m
-3351 2752 l
-3351 2753 l
-3245 2753 l
-3246 2753 m
-3350 2753 l
-3350 2754 l
-3246 2754 l
-3247 2754 m
-3349 2754 l
-3349 2755 l
-3247 2755 l
-3248 2755 m
-3348 2755 l
-3348 2756 l
-3248 2756 l
-3250 2756 m
-3348 2756 l
-3348 2757 l
-3250 2757 l
-3251 2757 m
-3347 2757 l
-3347 2758 l
-3251 2758 l
-3252 2758 m
-3346 2758 l
-3346 2759 l
-3252 2759 l
-3253 2759 m
-3345 2759 l
-3345 2760 l
-3253 2760 l
-3255 2760 m
-3344 2760 l
-3344 2761 l
-3255 2761 l
-3256 2761 m
-3344 2761 l
-3344 2762 l
-3256 2762 l
-3257 2762 m
-3343 2762 l
-3343 2763 l
-3257 2763 l
-3259 2763 m
-3342 2763 l
-3342 2764 l
-3259 2764 l
-3260 2764 m
-3341 2764 l
-3341 2765 l
-3260 2765 l
-3261 2765 m
-3340 2765 l
-3340 2766 l
-3261 2766 l
-3262 2766 m
-3340 2766 l
-3340 2767 l
-3262 2767 l
-3264 2767 m
-3339 2767 l
-3339 2768 l
-3264 2768 l
-3265 2768 m
-3338 2768 l
-3338 2769 l
-3265 2769 l
-3266 2769 m
-3337 2769 l
-3337 2770 l
-3266 2770 l
-3267 2770 m
-3337 2770 l
-3337 2771 l
-3267 2771 l
-3269 2771 m
-3336 2771 l
-3336 2772 l
-3269 2772 l
-3270 2772 m
-3335 2772 l
-3335 2773 l
-3270 2773 l
-3271 2773 m
-3334 2773 l
-3334 2774 l
-3271 2774 l
-3273 2774 m
-3333 2774 l
-3333 2775 l
-3273 2775 l
-3274 2775 m
-3333 2775 l
-3333 2776 l
-3274 2776 l
-3275 2776 m
-3332 2776 l
-3332 2777 l
-3275 2777 l
-3276 2777 m
-3331 2777 l
-3331 2778 l
-3276 2778 l
-3278 2778 m
-3330 2778 l
-3330 2779 l
-3278 2779 l
-3279 2779 m
-3329 2779 l
-3329 2780 l
-3279 2780 l
-3280 2780 m
-3329 2780 l
-3329 2781 l
-3280 2781 l
-3281 2781 m
-3328 2781 l
-3328 2782 l
-3281 2782 l
-3283 2782 m
-3327 2782 l
-3327 2783 l
-3283 2783 l
-3284 2783 m
-3326 2783 l
-3326 2784 l
-3284 2784 l
-3285 2784 m
-3325 2784 l
-3325 2785 l
-3285 2785 l
-3287 2785 m
-3325 2785 l
-3325 2786 l
-3287 2786 l
-3288 2786 m
-3324 2786 l
-3324 2787 l
-3288 2787 l
-3289 2787 m
-3323 2787 l
-3323 2788 l
-3289 2788 l
-3290 2788 m
-3322 2788 l
-3322 2789 l
-3290 2789 l
-3292 2789 m
-3322 2789 l
-3322 2790 l
-3292 2790 l
-3293 2790 m
-3321 2790 l
-3321 2791 l
-3293 2791 l
-3294 2791 m
-3320 2791 l
-3320 2792 l
-3294 2792 l
-3295 2792 m
-3319 2792 l
-3319 2793 l
-3295 2793 l
-3297 2793 m
-3318 2793 l
-3318 2794 l
-3297 2794 l
-3298 2794 m
-3318 2794 l
-3318 2795 l
-3298 2795 l
-3299 2795 m
-3317 2795 l
-3317 2796 l
-3299 2796 l
-3301 2796 m
-3316 2796 l
-3316 2797 l
-3301 2797 l
-3302 2797 m
-3315 2797 l
-3315 2798 l
-3302 2798 l
-3303 2798 m
-3314 2798 l
-3314 2799 l
-3303 2799 l
-3304 2799 m
-3314 2799 l
-3314 2800 l
-3304 2800 l
-3306 2800 m
-3313 2800 l
-3313 2801 l
-3306 2801 l
-3307 2801 m
-3312 2801 l
-3312 2802 l
-3307 2802 l
-3308 2802 m
-3311 2802 l
-3311 2803 l
-3308 2803 l
-Y
-3306.2 2646.3 m
-3231 2741 l
-3310 2803 l
-3385 2708 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3274 2727 m
-3272 2731 l
-3270 2740 l
-3270 2746 l
-3274 2754 l
-3287 2764 l
-3297 2766 l
-3302 2766 l
-3311 2762 l
-3316 2755 l
-3318 2746 l
-3319 2731 l
-3312 2672 l
-3358 2709 l
-S
-1 g
-2393 2280 m
-2403 2280 l
-2403 2281 l
-2393 2281 l
-2393 2281 m
-2410 2281 l
-2410 2282 l
-2393 2282 l
-2393 2282 m
-2417 2282 l
-2417 2283 l
-2393 2283 l
-2393 2283 m
-2423 2283 l
-2423 2284 l
-2393 2284 l
-2393 2284 m
-2430 2284 l
-2430 2285 l
-2393 2285 l
-2392 2285 m
-2437 2285 l
-2437 2286 l
-2392 2286 l
-2392 2286 m
-2444 2286 l
-2444 2287 l
-2392 2287 l
-2392 2287 m
-2450 2287 l
-2450 2288 l
-2392 2288 l
-2392 2288 m
-2457 2288 l
-2457 2289 l
-2392 2289 l
-2392 2289 m
-2464 2289 l
-2464 2290 l
-2392 2290 l
-2392 2290 m
-2471 2290 l
-2471 2291 l
-2392 2291 l
-2391 2291 m
-2477 2291 l
-2477 2292 l
-2391 2292 l
-2391 2292 m
-2484 2292 l
-2484 2293 l
-2391 2293 l
-2391 2293 m
-2491 2293 l
-2491 2294 l
-2391 2294 l
-2391 2294 m
-2497 2294 l
-2497 2295 l
-2391 2295 l
-2391 2295 m
-2498 2295 l
-2498 2296 l
-2391 2296 l
-2391 2296 m
-2497 2296 l
-2497 2298 l
-2391 2298 l
-2390 2298 m
-2497 2298 l
-2497 2303 l
-2390 2303 l
-2390 2303 m
-2496 2303 l
-2496 2305 l
-2390 2305 l
-2389 2305 m
-2496 2305 l
-2496 2310 l
-2389 2310 l
-2389 2310 m
-2495 2310 l
-2495 2312 l
-2389 2312 l
-2388 2312 m
-2495 2312 l
-2495 2317 l
-2388 2317 l
-2388 2317 m
-2494 2317 l
-2494 2318 l
-2388 2318 l
-2387 2318 m
-2494 2318 l
-2494 2324 l
-2387 2324 l
-2387 2324 m
-2493 2324 l
-2493 2325 l
-2387 2325 l
-2386 2325 m
-2493 2325 l
-2493 2331 l
-2386 2331 l
-2386 2331 m
-2492 2331 l
-2492 2332 l
-2386 2332 l
-2385 2332 m
-2492 2332 l
-2492 2338 l
-2385 2338 l
-2385 2338 m
-2491 2338 l
-2491 2339 l
-2385 2339 l
-2384 2339 m
-2491 2339 l
-2491 2345 l
-2384 2345 l
-2383 2345 m
-2490 2345 l
-2490 2352 l
-2383 2352 l
-2382 2352 m
-2489 2352 l
-2489 2359 l
-2382 2359 l
-2381 2359 m
-2488 2359 l
-2488 2366 l
-2381 2366 l
-2380 2366 m
-2487 2366 l
-2487 2372 l
-2380 2372 l
-2379 2372 m
-2487 2372 l
-2487 2373 l
-2379 2373 l
-2379 2373 m
-2486 2373 l
-2486 2379 l
-2379 2379 l
-2378 2379 m
-2486 2379 l
-2486 2380 l
-2378 2380 l
-2378 2380 m
-2485 2380 l
-2485 2386 l
-2378 2386 l
-2377 2386 m
-2485 2386 l
-2485 2387 l
-2377 2387 l
-2377 2387 m
-2484 2387 l
-2484 2393 l
-2377 2393 l
-2376 2393 m
-2484 2393 l
-2484 2394 l
-2376 2394 l
-2376 2394 m
-2483 2394 l
-2483 2400 l
-2376 2400 l
-2376 2400 m
-2483 2400 l
-2483 2401 l
-2376 2401 l
-2382 2401 m
-2482 2401 l
-2482 2402 l
-2382 2402 l
-2389 2402 m
-2482 2402 l
-2482 2403 l
-2389 2403 l
-2396 2403 m
-2482 2403 l
-2482 2404 l
-2396 2404 l
-2403 2404 m
-2482 2404 l
-2482 2405 l
-2403 2405 l
-2410 2405 m
-2482 2405 l
-2482 2406 l
-2410 2406 l
-2417 2406 m
-2482 2406 l
-2482 2407 l
-2417 2407 l
-2424 2407 m
-2482 2407 l
-2482 2408 l
-2424 2408 l
-2431 2408 m
-2481 2408 l
-2481 2409 l
-2431 2409 l
-2438 2409 m
-2481 2409 l
-2481 2410 l
-2438 2410 l
-2445 2410 m
-2481 2410 l
-2481 2411 l
-2445 2411 l
-2452 2411 m
-2481 2411 l
-2481 2412 l
-2452 2412 l
-2459 2412 m
-2481 2412 l
-2481 2413 l
-2459 2413 l
-2466 2413 m
-2481 2413 l
-2481 2414 l
-2466 2414 l
-2473 2414 m
-2481 2414 l
-2481 2415 l
-2473 2415 l
-Y
-2393.8 2279.7 m
-2376 2400 l
-2480 2415 l
-2497 2295 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2441 2392 m
-2408 2328 l
-2470 2337 l
-S
-2441 2392 m
-2453 2305 l
-S
-1 g
-1513 2399 m
-1517 2399 l
-1517 2400 l
-1513 2400 l
-1510 2400 m
-1517 2400 l
-1517 2401 l
-1510 2401 l
-1508 2401 m
-1518 2401 l
-1518 2402 l
-1508 2402 l
-1505 2402 m
-1518 2402 l
-1518 2403 l
-1505 2403 l
-1503 2403 m
-1518 2403 l
-1518 2404 l
-1503 2404 l
-1500 2404 m
-1519 2404 l
-1519 2405 l
-1500 2405 l
-1498 2405 m
-1519 2405 l
-1519 2406 l
-1498 2406 l
-1495 2406 m
-1520 2406 l
-1520 2407 l
-1495 2407 l
-1493 2407 m
-1520 2407 l
-1520 2408 l
-1493 2408 l
-1490 2408 m
-1520 2408 l
-1520 2409 l
-1490 2409 l
-1488 2409 m
-1521 2409 l
-1521 2410 l
-1488 2410 l
-1485 2410 m
-1521 2410 l
-1521 2411 l
-1485 2411 l
-1482 2411 m
-1522 2411 l
-1522 2412 l
-1482 2412 l
-1480 2412 m
-1522 2412 l
-1522 2413 l
-1480 2413 l
-1477 2413 m
-1522 2413 l
-1522 2414 l
-1477 2414 l
-1475 2414 m
-1523 2414 l
-1523 2415 l
-1475 2415 l
-1472 2415 m
-1523 2415 l
-1523 2416 l
-1472 2416 l
-1470 2416 m
-1524 2416 l
-1524 2417 l
-1470 2417 l
-1467 2417 m
-1524 2417 l
-1524 2418 l
-1467 2418 l
-1465 2418 m
-1524 2418 l
-1524 2419 l
-1465 2419 l
-1462 2419 m
-1525 2419 l
-1525 2420 l
-1462 2420 l
-1460 2420 m
-1525 2420 l
-1525 2421 l
-1460 2421 l
-1457 2421 m
-1526 2421 l
-1526 2422 l
-1457 2422 l
-1454 2422 m
-1526 2422 l
-1526 2423 l
-1454 2423 l
-1452 2423 m
-1526 2423 l
-1526 2424 l
-1452 2424 l
-1449 2424 m
-1527 2424 l
-1527 2425 l
-1449 2425 l
-1447 2425 m
-1527 2425 l
-1527 2426 l
-1447 2426 l
-1444 2426 m
-1528 2426 l
-1528 2427 l
-1444 2427 l
-1442 2427 m
-1528 2427 l
-1528 2428 l
-1442 2428 l
-1439 2428 m
-1528 2428 l
-1528 2429 l
-1439 2429 l
-1437 2429 m
-1529 2429 l
-1529 2430 l
-1437 2430 l
-1434 2430 m
-1529 2430 l
-1529 2431 l
-1434 2431 l
-1432 2431 m
-1530 2431 l
-1530 2432 l
-1432 2432 l
-1429 2432 m
-1530 2432 l
-1530 2433 l
-1429 2433 l
-1427 2433 m
-1530 2433 l
-1530 2434 l
-1427 2434 l
-1427 2434 m
-1531 2434 l
-1531 2436 l
-1427 2436 l
-1427 2436 m
-1532 2436 l
-1532 2437 l
-1427 2437 l
-1428 2437 m
-1532 2437 l
-1532 2439 l
-1428 2439 l
-1428 2439 m
-1533 2439 l
-1533 2440 l
-1428 2440 l
-1429 2440 m
-1533 2440 l
-1533 2441 l
-1429 2441 l
-1429 2441 m
-1534 2441 l
-1534 2442 l
-1429 2442 l
-1430 2442 m
-1534 2442 l
-1534 2444 l
-1430 2444 l
-1430 2444 m
-1535 2444 l
-1535 2445 l
-1430 2445 l
-1431 2445 m
-1535 2445 l
-1535 2446 l
-1431 2446 l
-1431 2446 m
-1536 2446 l
-1536 2447 l
-1431 2447 l
-1432 2447 m
-1536 2447 l
-1536 2449 l
-1432 2449 l
-1432 2449 m
-1537 2449 l
-1537 2450 l
-1432 2450 l
-1433 2450 m
-1537 2450 l
-1537 2451 l
-1433 2451 l
-1433 2451 m
-1538 2451 l
-1538 2452 l
-1433 2452 l
-1434 2452 m
-1538 2452 l
-1538 2454 l
-1434 2454 l
-1434 2454 m
-1539 2454 l
-1539 2455 l
-1434 2455 l
-1435 2455 m
-1539 2455 l
-1539 2456 l
-1435 2456 l
-1435 2456 m
-1540 2456 l
-1540 2457 l
-1435 2457 l
-1436 2457 m
-1540 2457 l
-1540 2459 l
-1436 2459 l
-1436 2459 m
-1541 2459 l
-1541 2460 l
-1436 2460 l
-1437 2460 m
-1541 2460 l
-1541 2461 l
-1437 2461 l
-1437 2461 m
-1542 2461 l
-1542 2462 l
-1437 2462 l
-1438 2462 m
-1542 2462 l
-1542 2464 l
-1438 2464 l
-1438 2464 m
-1543 2464 l
-1543 2465 l
-1438 2465 l
-1439 2465 m
-1543 2465 l
-1543 2466 l
-1439 2466 l
-1439 2466 m
-1544 2466 l
-1544 2467 l
-1439 2467 l
-1440 2467 m
-1544 2467 l
-1544 2469 l
-1440 2469 l
-1440 2469 m
-1545 2469 l
-1545 2470 l
-1440 2470 l
-1441 2470 m
-1545 2470 l
-1545 2471 l
-1441 2471 l
-1441 2471 m
-1546 2471 l
-1546 2472 l
-1441 2472 l
-1442 2472 m
-1546 2472 l
-1546 2474 l
-1442 2474 l
-1442 2474 m
-1547 2474 l
-1547 2475 l
-1442 2475 l
-1443 2475 m
-1547 2475 l
-1547 2476 l
-1443 2476 l
-1443 2476 m
-1548 2476 l
-1548 2477 l
-1443 2477 l
-1444 2477 m
-1548 2477 l
-1548 2479 l
-1444 2479 l
-1444 2479 m
-1549 2479 l
-1549 2480 l
-1444 2480 l
-1445 2480 m
-1549 2480 l
-1549 2481 l
-1445 2481 l
-1445 2481 m
-1550 2481 l
-1550 2482 l
-1445 2482 l
-1446 2482 m
-1550 2482 l
-1550 2484 l
-1446 2484 l
-1446 2484 m
-1551 2484 l
-1551 2485 l
-1446 2485 l
-1447 2485 m
-1551 2485 l
-1551 2486 l
-1447 2486 l
-1447 2486 m
-1552 2486 l
-1552 2487 l
-1447 2487 l
-1448 2487 m
-1552 2487 l
-1552 2489 l
-1448 2489 l
-1448 2489 m
-1553 2489 l
-1553 2490 l
-1448 2490 l
-1449 2490 m
-1553 2490 l
-1553 2491 l
-1449 2491 l
-1449 2491 m
-1554 2491 l
-1554 2492 l
-1449 2492 l
-1450 2492 m
-1554 2492 l
-1554 2494 l
-1450 2494 l
-1450 2494 m
-1555 2494 l
-1555 2495 l
-1450 2495 l
-1451 2495 m
-1555 2495 l
-1555 2496 l
-1451 2496 l
-1451 2496 m
-1556 2496 l
-1556 2497 l
-1451 2497 l
-1452 2497 m
-1556 2497 l
-1556 2499 l
-1452 2499 l
-1452 2499 m
-1557 2499 l
-1557 2500 l
-1452 2500 l
-1453 2500 m
-1557 2500 l
-1557 2501 l
-1453 2501 l
-1453 2501 m
-1558 2501 l
-1558 2502 l
-1453 2502 l
-1454 2502 m
-1558 2502 l
-1558 2504 l
-1454 2504 l
-1454 2504 m
-1559 2504 l
-1559 2505 l
-1454 2505 l
-1455 2505 m
-1559 2505 l
-1559 2506 l
-1455 2506 l
-1455 2506 m
-1560 2506 l
-1560 2507 l
-1455 2507 l
-1456 2507 m
-1560 2507 l
-1560 2509 l
-1456 2509 l
-1456 2509 m
-1561 2509 l
-1561 2510 l
-1456 2510 l
-1457 2510 m
-1561 2510 l
-1561 2511 l
-1457 2511 l
-1457 2511 m
-1561 2511 l
-1561 2512 l
-1457 2512 l
-1458 2512 m
-1559 2512 l
-1559 2513 l
-1458 2513 l
-1458 2513 m
-1556 2513 l
-1556 2514 l
-1458 2514 l
-1458 2514 m
-1554 2514 l
-1554 2515 l
-1458 2515 l
-1459 2515 m
-1551 2515 l
-1551 2516 l
-1459 2516 l
-1459 2516 m
-1549 2516 l
-1549 2517 l
-1459 2517 l
-1460 2517 m
-1546 2517 l
-1546 2518 l
-1460 2518 l
-1460 2518 m
-1544 2518 l
-1544 2519 l
-1460 2519 l
-1460 2519 m
-1541 2519 l
-1541 2520 l
-1460 2520 l
-1461 2520 m
-1539 2520 l
-1539 2521 l
-1461 2521 l
-1461 2521 m
-1537 2521 l
-1537 2522 l
-1461 2522 l
-1462 2522 m
-1534 2522 l
-1534 2523 l
-1462 2523 l
-1462 2523 m
-1532 2523 l
-1532 2524 l
-1462 2524 l
-1462 2524 m
-1529 2524 l
-1529 2525 l
-1462 2525 l
-1463 2525 m
-1527 2525 l
-1527 2526 l
-1463 2526 l
-1463 2526 m
-1524 2526 l
-1524 2527 l
-1463 2527 l
-1464 2527 m
-1522 2527 l
-1522 2528 l
-1464 2528 l
-1464 2528 m
-1519 2528 l
-1519 2529 l
-1464 2529 l
-1464 2529 m
-1517 2529 l
-1517 2530 l
-1464 2530 l
-1465 2530 m
-1514 2530 l
-1514 2531 l
-1465 2531 l
-1465 2531 m
-1512 2531 l
-1512 2532 l
-1465 2532 l
-1466 2532 m
-1509 2532 l
-1509 2533 l
-1466 2533 l
-1466 2533 m
-1507 2533 l
-1507 2534 l
-1466 2534 l
-1466 2534 m
-1505 2534 l
-1505 2535 l
-1466 2535 l
-1467 2535 m
-1502 2535 l
-1502 2536 l
-1467 2536 l
-1467 2536 m
-1500 2536 l
-1500 2537 l
-1467 2537 l
-1468 2537 m
-1497 2537 l
-1497 2538 l
-1468 2538 l
-1468 2538 m
-1495 2538 l
-1495 2539 l
-1468 2539 l
-1468 2539 m
-1492 2539 l
-1492 2540 l
-1468 2540 l
-1469 2540 m
-1490 2540 l
-1490 2541 l
-1469 2541 l
-1469 2541 m
-1487 2541 l
-1487 2542 l
-1469 2542 l
-1470 2542 m
-1485 2542 l
-1485 2543 l
-1470 2543 l
-1470 2543 m
-1482 2543 l
-1482 2544 l
-1470 2544 l
-1470 2544 m
-1480 2544 l
-1480 2545 l
-1470 2545 l
-1471 2545 m
-1477 2545 l
-1477 2546 l
-1471 2546 l
-1471 2546 m
-1475 2546 l
-1475 2547 l
-1471 2547 l
-Y
-1560.7 2511 m
-1516 2399 l
-1427 2434 l
-1472 2547 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1461 2452 m
-1462 2443 l
-1472 2434 l
-1479 2431 l
-1493 2430 l
-1505 2439 l
-1517 2457 l
-1524 2476 l
-1527 2493 l
-1522 2504 l
-1512 2513 l
-1508 2514 l
-1495 2515 l
-1484 2510 l
-1475 2500 l
-1474 2496 l
-1473 2483 l
-1478 2472 l
-1488 2464 l
-1492 2462 l
-1505 2461 l
-1516 2466 l
-1524 2476 l
-S
-1 g
-721 2958 m
-724 2958 l
-724 2959 l
-721 2959 l
-720 2959 m
-725 2959 l
-725 2960 l
-720 2960 l
-719 2960 m
-726 2960 l
-726 2961 l
-719 2961 l
-718 2961 m
-728 2961 l
-728 2962 l
-718 2962 l
-718 2962 m
-729 2962 l
-729 2963 l
-718 2963 l
-717 2963 m
-730 2963 l
-730 2964 l
-717 2964 l
-716 2964 m
-731 2964 l
-731 2965 l
-716 2965 l
-715 2965 m
-733 2965 l
-733 2966 l
-715 2966 l
-714 2966 m
-734 2966 l
-734 2967 l
-714 2967 l
-714 2967 m
-735 2967 l
-735 2968 l
-714 2968 l
-713 2968 m
-737 2968 l
-737 2969 l
-713 2969 l
-712 2969 m
-738 2969 l
-738 2970 l
-712 2970 l
-711 2970 m
-739 2970 l
-739 2971 l
-711 2971 l
-710 2971 m
-740 2971 l
-740 2972 l
-710 2972 l
-710 2972 m
-742 2972 l
-742 2973 l
-710 2973 l
-709 2973 m
-743 2973 l
-743 2974 l
-709 2974 l
-708 2974 m
-744 2974 l
-744 2975 l
-708 2975 l
-707 2975 m
-746 2975 l
-746 2976 l
-707 2976 l
-706 2976 m
-747 2976 l
-747 2977 l
-706 2977 l
-706 2977 m
-748 2977 l
-748 2978 l
-706 2978 l
-705 2978 m
-749 2978 l
-749 2979 l
-705 2979 l
-704 2979 m
-751 2979 l
-751 2980 l
-704 2980 l
-703 2980 m
-752 2980 l
-752 2981 l
-703 2981 l
-702 2981 m
-753 2981 l
-753 2982 l
-702 2982 l
-702 2982 m
-754 2982 l
-754 2983 l
-702 2983 l
-701 2983 m
-756 2983 l
-756 2984 l
-701 2984 l
-700 2984 m
-757 2984 l
-757 2985 l
-700 2985 l
-699 2985 m
-758 2985 l
-758 2986 l
-699 2986 l
-698 2986 m
-760 2986 l
-760 2987 l
-698 2987 l
-698 2987 m
-761 2987 l
-761 2988 l
-698 2988 l
-697 2988 m
-762 2988 l
-762 2989 l
-697 2989 l
-696 2989 m
-763 2989 l
-763 2990 l
-696 2990 l
-695 2990 m
-765 2990 l
-765 2991 l
-695 2991 l
-694 2991 m
-766 2991 l
-766 2992 l
-694 2992 l
-694 2992 m
-767 2992 l
-767 2993 l
-694 2993 l
-693 2993 m
-769 2993 l
-769 2994 l
-693 2994 l
-692 2994 m
-770 2994 l
-770 2995 l
-692 2995 l
-691 2995 m
-771 2995 l
-771 2996 l
-691 2996 l
-691 2996 m
-772 2996 l
-772 2997 l
-691 2997 l
-690 2997 m
-774 2997 l
-774 2998 l
-690 2998 l
-689 2998 m
-775 2998 l
-775 2999 l
-689 2999 l
-688 2999 m
-776 2999 l
-776 3000 l
-688 3000 l
-687 3000 m
-778 3000 l
-778 3001 l
-687 3001 l
-687 3001 m
-779 3001 l
-779 3002 l
-687 3002 l
-686 3002 m
-780 3002 l
-780 3003 l
-686 3003 l
-685 3003 m
-781 3003 l
-781 3004 l
-685 3004 l
-684 3004 m
-783 3004 l
-783 3005 l
-684 3005 l
-683 3005 m
-784 3005 l
-784 3006 l
-683 3006 l
-683 3006 m
-785 3006 l
-785 3007 l
-683 3007 l
-682 3007 m
-786 3007 l
-786 3008 l
-682 3008 l
-681 3008 m
-788 3008 l
-788 3009 l
-681 3009 l
-680 3009 m
-789 3009 l
-789 3010 l
-680 3010 l
-679 3010 m
-790 3010 l
-790 3011 l
-679 3011 l
-679 3011 m
-792 3011 l
-792 3012 l
-679 3012 l
-678 3012 m
-793 3012 l
-793 3013 l
-678 3013 l
-677 3013 m
-794 3013 l
-794 3014 l
-677 3014 l
-676 3014 m
-795 3014 l
-795 3015 l
-676 3015 l
-675 3015 m
-797 3015 l
-797 3016 l
-675 3016 l
-675 3016 m
-798 3016 l
-798 3017 l
-675 3017 l
-674 3017 m
-799 3017 l
-799 3018 l
-674 3018 l
-673 3018 m
-801 3018 l
-801 3019 l
-673 3019 l
-672 3019 m
-802 3019 l
-802 3020 l
-672 3020 l
-671 3020 m
-803 3020 l
-803 3021 l
-671 3021 l
-671 3021 m
-804 3021 l
-804 3022 l
-671 3022 l
-670 3022 m
-806 3022 l
-806 3023 l
-670 3023 l
-669 3023 m
-807 3023 l
-807 3024 l
-669 3024 l
-668 3024 m
-808 3024 l
-808 3025 l
-668 3025 l
-667 3025 m
-809 3025 l
-809 3026 l
-667 3026 l
-667 3026 m
-811 3026 l
-811 3027 l
-667 3027 l
-666 3027 m
-812 3027 l
-812 3028 l
-666 3028 l
-665 3028 m
-813 3028 l
-813 3029 l
-665 3029 l
-664 3029 m
-815 3029 l
-815 3030 l
-664 3030 l
-663 3030 m
-816 3030 l
-816 3031 l
-663 3031 l
-663 3031 m
-817 3031 l
-817 3032 l
-663 3032 l
-662 3032 m
-818 3032 l
-818 3033 l
-662 3033 l
-661 3033 m
-817 3033 l
-817 3034 l
-661 3034 l
-660 3034 m
-817 3034 l
-817 3035 l
-660 3035 l
-660 3035 m
-816 3035 l
-816 3036 l
-660 3036 l
-660 3036 m
-815 3036 l
-815 3037 l
-660 3037 l
-661 3037 m
-814 3037 l
-814 3038 l
-661 3038 l
-662 3038 m
-813 3038 l
-813 3039 l
-662 3039 l
-663 3039 m
-813 3039 l
-813 3040 l
-663 3040 l
-665 3040 m
-812 3040 l
-812 3041 l
-665 3041 l
-666 3041 m
-811 3041 l
-811 3042 l
-666 3042 l
-667 3042 m
-810 3042 l
-810 3043 l
-667 3043 l
-668 3043 m
-809 3043 l
-809 3044 l
-668 3044 l
-670 3044 m
-809 3044 l
-809 3045 l
-670 3045 l
-671 3045 m
-808 3045 l
-808 3046 l
-671 3046 l
-672 3046 m
-807 3046 l
-807 3047 l
-672 3047 l
-673 3047 m
-806 3047 l
-806 3048 l
-673 3048 l
-675 3048 m
-805 3048 l
-805 3049 l
-675 3049 l
-676 3049 m
-805 3049 l
-805 3050 l
-676 3050 l
-677 3050 m
-804 3050 l
-804 3051 l
-677 3051 l
-679 3051 m
-803 3051 l
-803 3052 l
-679 3052 l
-680 3052 m
-802 3052 l
-802 3053 l
-680 3053 l
-681 3053 m
-802 3053 l
-802 3054 l
-681 3054 l
-682 3054 m
-801 3054 l
-801 3055 l
-682 3055 l
-684 3055 m
-800 3055 l
-800 3056 l
-684 3056 l
-685 3056 m
-799 3056 l
-799 3057 l
-685 3057 l
-686 3057 m
-798 3057 l
-798 3058 l
-686 3058 l
-687 3058 m
-798 3058 l
-798 3059 l
-687 3059 l
-689 3059 m
-797 3059 l
-797 3060 l
-689 3060 l
-690 3060 m
-796 3060 l
-796 3061 l
-690 3061 l
-691 3061 m
-795 3061 l
-795 3062 l
-691 3062 l
-692 3062 m
-794 3062 l
-794 3063 l
-692 3063 l
-694 3063 m
-794 3063 l
-794 3064 l
-694 3064 l
-695 3064 m
-793 3064 l
-793 3065 l
-695 3065 l
-696 3065 m
-792 3065 l
-792 3066 l
-696 3066 l
-698 3066 m
-791 3066 l
-791 3067 l
-698 3067 l
-699 3067 m
-790 3067 l
-790 3068 l
-699 3068 l
-700 3068 m
-790 3068 l
-790 3069 l
-700 3069 l
-701 3069 m
-789 3069 l
-789 3070 l
-701 3070 l
-703 3070 m
-788 3070 l
-788 3071 l
-703 3071 l
-704 3071 m
-787 3071 l
-787 3072 l
-704 3072 l
-705 3072 m
-786 3072 l
-786 3073 l
-705 3073 l
-706 3073 m
-786 3073 l
-786 3074 l
-706 3074 l
-708 3074 m
-785 3074 l
-785 3075 l
-708 3075 l
-709 3075 m
-784 3075 l
-784 3076 l
-709 3076 l
-710 3076 m
-783 3076 l
-783 3077 l
-710 3077 l
-711 3077 m
-782 3077 l
-782 3078 l
-711 3078 l
-713 3078 m
-782 3078 l
-782 3079 l
-713 3079 l
-714 3079 m
-781 3079 l
-781 3080 l
-714 3080 l
-715 3080 m
-780 3080 l
-780 3081 l
-715 3081 l
-717 3081 m
-779 3081 l
-779 3082 l
-717 3082 l
-718 3082 m
-779 3082 l
-779 3083 l
-718 3083 l
-719 3083 m
-778 3083 l
-778 3084 l
-719 3084 l
-720 3084 m
-777 3084 l
-777 3085 l
-720 3085 l
-722 3085 m
-776 3085 l
-776 3086 l
-722 3086 l
-723 3086 m
-775 3086 l
-775 3087 l
-723 3087 l
-724 3087 m
-775 3087 l
-775 3088 l
-724 3088 l
-725 3088 m
-774 3088 l
-774 3089 l
-725 3089 l
-727 3089 m
-773 3089 l
-773 3090 l
-727 3090 l
-728 3090 m
-772 3090 l
-772 3091 l
-728 3091 l
-729 3091 m
-771 3091 l
-771 3092 l
-729 3092 l
-730 3092 m
-771 3092 l
-771 3093 l
-730 3093 l
-732 3093 m
-770 3093 l
-770 3094 l
-732 3094 l
-733 3094 m
-769 3094 l
-769 3095 l
-733 3095 l
-734 3095 m
-768 3095 l
-768 3096 l
-734 3096 l
-736 3096 m
-767 3096 l
-767 3097 l
-736 3097 l
-737 3097 m
-767 3097 l
-767 3098 l
-737 3098 l
-738 3098 m
-766 3098 l
-766 3099 l
-738 3099 l
-739 3099 m
-765 3099 l
-765 3100 l
-739 3100 l
-741 3100 m
-764 3100 l
-764 3101 l
-741 3101 l
-742 3101 m
-763 3101 l
-763 3102 l
-742 3102 l
-743 3102 m
-763 3102 l
-763 3103 l
-743 3103 l
-744 3103 m
-762 3103 l
-762 3104 l
-744 3104 l
-746 3104 m
-761 3104 l
-761 3105 l
-746 3105 l
-747 3105 m
-760 3105 l
-760 3106 l
-747 3106 l
-748 3106 m
-759 3106 l
-759 3107 l
-748 3107 l
-749 3107 m
-759 3107 l
-759 3108 l
-749 3108 l
-751 3108 m
-758 3108 l
-758 3109 l
-751 3109 l
-752 3109 m
-757 3109 l
-757 3110 l
-752 3110 l
-753 3110 m
-756 3110 l
-756 3111 l
-753 3111 l
-Y
-817.3 3032.5 m
-722 2958 l
-660 3036 l
-755 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-709 3001 m
-720 2993 l
-730 2995 l
-736 3000 l
-740 3009 l
-738 3018 l
-731 3034 l
-727 3046 l
-728 3058 l
-732 3066 l
-742 3074 l
-751 3076 l
-757 3075 l
-768 3068 l
-778 3055 l
-783 3043 l
-782 3037 l
-778 3028 l
-768 3020 l
-759 3019 l
-747 3020 l
-736 3027 l
-723 3038 l
-714 3042 l
-705 3040 l
-699 3035 l
-695 3026 l
-699 3014 l
-709 3001 l
-S
-1 g
-1009 5498 m
-1013 5498 l
-1013 5499 l
-1009 5499 l
-1008 5499 m
-1014 5499 l
-1014 5500 l
-1008 5500 l
-1007 5500 m
-1015 5500 l
-1015 5501 l
-1007 5501 l
-1006 5501 m
-1017 5501 l
-1017 5502 l
-1006 5502 l
-1006 5502 m
-1018 5502 l
-1018 5503 l
-1006 5503 l
-1005 5503 m
-1019 5503 l
-1019 5504 l
-1005 5504 l
-1004 5504 m
-1020 5504 l
-1020 5505 l
-1004 5505 l
-1003 5505 m
-1022 5505 l
-1022 5506 l
-1003 5506 l
-1002 5506 m
-1023 5506 l
-1023 5507 l
-1002 5507 l
-1002 5507 m
-1024 5507 l
-1024 5508 l
-1002 5508 l
-1001 5508 m
-1025 5508 l
-1025 5509 l
-1001 5509 l
-1000 5509 m
-1027 5509 l
-1027 5510 l
-1000 5510 l
-999 5510 m
-1028 5510 l
-1028 5511 l
-999 5511 l
-998 5511 m
-1029 5511 l
-1029 5512 l
-998 5512 l
-998 5512 m
-1030 5512 l
-1030 5513 l
-998 5513 l
-997 5513 m
-1032 5513 l
-1032 5514 l
-997 5514 l
-996 5514 m
-1033 5514 l
-1033 5515 l
-996 5515 l
-995 5515 m
-1034 5515 l
-1034 5516 l
-995 5516 l
-994 5516 m
-1035 5516 l
-1035 5517 l
-994 5517 l
-994 5517 m
-1037 5517 l
-1037 5518 l
-994 5518 l
-993 5518 m
-1038 5518 l
-1038 5519 l
-993 5519 l
-992 5519 m
-1039 5519 l
-1039 5520 l
-992 5520 l
-991 5520 m
-1040 5520 l
-1040 5521 l
-991 5521 l
-990 5521 m
-1042 5521 l
-1042 5522 l
-990 5522 l
-990 5522 m
-1043 5522 l
-1043 5523 l
-990 5523 l
-989 5523 m
-1044 5523 l
-1044 5524 l
-989 5524 l
-988 5524 m
-1045 5524 l
-1045 5525 l
-988 5525 l
-987 5525 m
-1047 5525 l
-1047 5526 l
-987 5526 l
-986 5526 m
-1048 5526 l
-1048 5527 l
-986 5527 l
-986 5527 m
-1049 5527 l
-1049 5528 l
-986 5528 l
-985 5528 m
-1050 5528 l
-1050 5529 l
-985 5529 l
-984 5529 m
-1052 5529 l
-1052 5530 l
-984 5530 l
-983 5530 m
-1053 5530 l
-1053 5531 l
-983 5531 l
-982 5531 m
-1054 5531 l
-1054 5532 l
-982 5532 l
-982 5532 m
-1055 5532 l
-1055 5533 l
-982 5533 l
-981 5533 m
-1057 5533 l
-1057 5534 l
-981 5534 l
-980 5534 m
-1058 5534 l
-1058 5535 l
-980 5535 l
-979 5535 m
-1059 5535 l
-1059 5536 l
-979 5536 l
-978 5536 m
-1061 5536 l
-1061 5537 l
-978 5537 l
-978 5537 m
-1062 5537 l
-1062 5538 l
-978 5538 l
-977 5538 m
-1063 5538 l
-1063 5539 l
-977 5539 l
-976 5539 m
-1064 5539 l
-1064 5540 l
-976 5540 l
-975 5540 m
-1066 5540 l
-1066 5541 l
-975 5541 l
-974 5541 m
-1067 5541 l
-1067 5542 l
-974 5542 l
-974 5542 m
-1068 5542 l
-1068 5543 l
-974 5543 l
-973 5543 m
-1069 5543 l
-1069 5544 l
-973 5544 l
-972 5544 m
-1071 5544 l
-1071 5545 l
-972 5545 l
-971 5545 m
-1072 5545 l
-1072 5546 l
-971 5546 l
-970 5546 m
-1073 5546 l
-1073 5547 l
-970 5547 l
-970 5547 m
-1074 5547 l
-1074 5548 l
-970 5548 l
-969 5548 m
-1076 5548 l
-1076 5549 l
-969 5549 l
-968 5549 m
-1077 5549 l
-1077 5550 l
-968 5550 l
-967 5550 m
-1078 5550 l
-1078 5551 l
-967 5551 l
-966 5551 m
-1079 5551 l
-1079 5552 l
-966 5552 l
-966 5552 m
-1081 5552 l
-1081 5553 l
-966 5553 l
-965 5553 m
-1082 5553 l
-1082 5554 l
-965 5554 l
-964 5554 m
-1083 5554 l
-1083 5555 l
-964 5555 l
-963 5555 m
-1084 5555 l
-1084 5556 l
-963 5556 l
-962 5556 m
-1086 5556 l
-1086 5557 l
-962 5557 l
-962 5557 m
-1087 5557 l
-1087 5558 l
-962 5558 l
-961 5558 m
-1088 5558 l
-1088 5559 l
-961 5559 l
-960 5559 m
-1089 5559 l
-1089 5560 l
-960 5560 l
-959 5560 m
-1091 5560 l
-1091 5561 l
-959 5561 l
-958 5561 m
-1092 5561 l
-1092 5562 l
-958 5562 l
-958 5562 m
-1093 5562 l
-1093 5563 l
-958 5563 l
-957 5563 m
-1094 5563 l
-1094 5564 l
-957 5564 l
-956 5564 m
-1096 5564 l
-1096 5565 l
-956 5565 l
-955 5565 m
-1097 5565 l
-1097 5566 l
-955 5566 l
-954 5566 m
-1098 5566 l
-1098 5567 l
-954 5567 l
-954 5567 m
-1099 5567 l
-1099 5568 l
-954 5568 l
-953 5568 m
-1101 5568 l
-1101 5569 l
-953 5569 l
-952 5569 m
-1102 5569 l
-1102 5570 l
-952 5570 l
-951 5570 m
-1103 5570 l
-1103 5571 l
-951 5571 l
-950 5571 m
-1105 5571 l
-1105 5572 l
-950 5572 l
-950 5572 m
-1106 5572 l
-1106 5573 l
-950 5573 l
-949 5573 m
-1107 5573 l
-1107 5574 l
-949 5574 l
-948 5574 m
-1108 5574 l
-1108 5575 l
-948 5575 l
-947 5575 m
-1110 5575 l
-1110 5576 l
-947 5576 l
-946 5576 m
-1111 5576 l
-1111 5577 l
-946 5577 l
-946 5577 m
-1112 5577 l
-1112 5578 l
-946 5578 l
-945 5578 m
-1113 5578 l
-1113 5579 l
-945 5579 l
-944 5579 m
-1115 5579 l
-1115 5580 l
-944 5580 l
-943 5580 m
-1116 5580 l
-1116 5581 l
-943 5581 l
-942 5581 m
-1117 5581 l
-1117 5582 l
-942 5582 l
-942 5582 m
-1118 5582 l
-1118 5583 l
-942 5583 l
-941 5583 m
-1120 5583 l
-1120 5584 l
-941 5584 l
-940 5584 m
-1121 5584 l
-1121 5585 l
-940 5585 l
-939 5585 m
-1122 5585 l
-1122 5586 l
-939 5586 l
-938 5586 m
-1123 5586 l
-1123 5587 l
-938 5587 l
-938 5587 m
-1125 5587 l
-1125 5588 l
-938 5588 l
-937 5588 m
-1126 5588 l
-1126 5589 l
-937 5589 l
-936 5589 m
-1127 5589 l
-1127 5590 l
-936 5590 l
-935 5590 m
-1128 5590 l
-1128 5591 l
-935 5591 l
-935 5591 m
-1130 5591 l
-1130 5592 l
-935 5592 l
-935 5592 m
-1131 5592 l
-1131 5593 l
-935 5593 l
-936 5593 m
-1132 5593 l
-1132 5594 l
-936 5594 l
-937 5594 m
-1133 5594 l
-1133 5595 l
-937 5595 l
-938 5595 m
-1135 5595 l
-1135 5596 l
-938 5596 l
-939 5596 m
-1136 5596 l
-1136 5597 l
-939 5597 l
-941 5597 m
-1137 5597 l
-1137 5598 l
-941 5598 l
-942 5598 m
-1138 5598 l
-1138 5599 l
-942 5599 l
-943 5599 m
-1140 5599 l
-1140 5600 l
-943 5600 l
-944 5600 m
-1141 5600 l
-1141 5601 l
-944 5601 l
-946 5601 m
-1142 5601 l
-1142 5602 l
-946 5602 l
-947 5602 m
-1143 5602 l
-1143 5603 l
-947 5603 l
-948 5603 m
-1145 5603 l
-1145 5604 l
-948 5604 l
-949 5604 m
-1146 5604 l
-1146 5605 l
-949 5605 l
-951 5605 m
-1147 5605 l
-1147 5606 l
-951 5606 l
-952 5606 m
-1148 5606 l
-1148 5607 l
-952 5607 l
-953 5607 m
-1148 5607 l
-1148 5608 l
-953 5608 l
-954 5608 m
-1148 5608 l
-1148 5609 l
-954 5609 l
-956 5609 m
-1147 5609 l
-1147 5610 l
-956 5610 l
-957 5610 m
-1146 5610 l
-1146 5611 l
-957 5611 l
-958 5611 m
-1145 5611 l
-1145 5612 l
-958 5612 l
-959 5612 m
-1144 5612 l
-1144 5613 l
-959 5613 l
-961 5613 m
-1144 5613 l
-1144 5614 l
-961 5614 l
-962 5614 m
-1143 5614 l
-1143 5615 l
-962 5615 l
-963 5615 m
-1142 5615 l
-1142 5616 l
-963 5616 l
-964 5616 m
-1141 5616 l
-1141 5617 l
-964 5617 l
-966 5617 m
-1140 5617 l
-1140 5618 l
-966 5618 l
-967 5618 m
-1140 5618 l
-1140 5619 l
-967 5619 l
-968 5619 m
-1139 5619 l
-1139 5620 l
-968 5620 l
-969 5620 m
-1138 5620 l
-1138 5621 l
-969 5621 l
-971 5621 m
-1137 5621 l
-1137 5622 l
-971 5622 l
-972 5622 m
-1136 5622 l
-1136 5623 l
-972 5623 l
-973 5623 m
-1136 5623 l
-1136 5624 l
-973 5624 l
-974 5624 m
-1135 5624 l
-1135 5625 l
-974 5625 l
-976 5625 m
-1134 5625 l
-1134 5626 l
-976 5626 l
-977 5626 m
-1133 5626 l
-1133 5627 l
-977 5627 l
-978 5627 m
-1132 5627 l
-1132 5628 l
-978 5628 l
-979 5628 m
-1132 5628 l
-1132 5629 l
-979 5629 l
-981 5629 m
-1131 5629 l
-1131 5630 l
-981 5630 l
-982 5630 m
-1130 5630 l
-1130 5631 l
-982 5631 l
-983 5631 m
-1129 5631 l
-1129 5632 l
-983 5632 l
-984 5632 m
-1128 5632 l
-1128 5633 l
-984 5633 l
-986 5633 m
-1128 5633 l
-1128 5634 l
-986 5634 l
-987 5634 m
-1127 5634 l
-1127 5635 l
-987 5635 l
-988 5635 m
-1126 5635 l
-1126 5636 l
-988 5636 l
-989 5636 m
-1125 5636 l
-1125 5637 l
-989 5637 l
-991 5637 m
-1124 5637 l
-1124 5638 l
-991 5638 l
-992 5638 m
-1124 5638 l
-1124 5639 l
-992 5639 l
-993 5639 m
-1123 5639 l
-1123 5640 l
-993 5640 l
-994 5640 m
-1122 5640 l
-1122 5641 l
-994 5641 l
-996 5641 m
-1121 5641 l
-1121 5642 l
-996 5642 l
-997 5642 m
-1120 5642 l
-1120 5643 l
-997 5643 l
-998 5643 m
-1120 5643 l
-1120 5644 l
-998 5644 l
-999 5644 m
-1119 5644 l
-1119 5645 l
-999 5645 l
-1001 5645 m
-1118 5645 l
-1118 5646 l
-1001 5646 l
-1002 5646 m
-1117 5646 l
-1117 5647 l
-1002 5647 l
-1003 5647 m
-1116 5647 l
-1116 5648 l
-1003 5648 l
-1004 5648 m
-1116 5648 l
-1116 5649 l
-1004 5649 l
-1005 5649 m
-1115 5649 l
-1115 5650 l
-1005 5650 l
-1007 5650 m
-1114 5650 l
-1114 5651 l
-1007 5651 l
-1008 5651 m
-1113 5651 l
-1113 5652 l
-1008 5652 l
-1009 5652 m
-1112 5652 l
-1112 5653 l
-1009 5653 l
-1010 5653 m
-1112 5653 l
-1112 5654 l
-1010 5654 l
-1012 5654 m
-1111 5654 l
-1111 5655 l
-1012 5655 l
-1013 5655 m
-1110 5655 l
-1110 5656 l
-1013 5656 l
-1014 5656 m
-1109 5656 l
-1109 5657 l
-1014 5657 l
-1015 5657 m
-1108 5657 l
-1108 5658 l
-1015 5658 l
-1017 5658 m
-1108 5658 l
-1108 5659 l
-1017 5659 l
-1018 5659 m
-1107 5659 l
-1107 5660 l
-1018 5660 l
-1019 5660 m
-1106 5660 l
-1106 5661 l
-1019 5661 l
-1020 5661 m
-1105 5661 l
-1105 5662 l
-1020 5662 l
-1022 5662 m
-1104 5662 l
-1104 5663 l
-1022 5663 l
-1023 5663 m
-1104 5663 l
-1104 5664 l
-1023 5664 l
-1024 5664 m
-1103 5664 l
-1103 5665 l
-1024 5665 l
-1025 5665 m
-1102 5665 l
-1102 5666 l
-1025 5666 l
-1027 5666 m
-1101 5666 l
-1101 5667 l
-1027 5667 l
-1028 5667 m
-1100 5667 l
-1100 5668 l
-1028 5668 l
-1029 5668 m
-1100 5668 l
-1100 5669 l
-1029 5669 l
-1030 5669 m
-1099 5669 l
-1099 5670 l
-1030 5670 l
-1032 5670 m
-1098 5670 l
-1098 5671 l
-1032 5671 l
-1033 5671 m
-1097 5671 l
-1097 5672 l
-1033 5672 l
-1034 5672 m
-1096 5672 l
-1096 5673 l
-1034 5673 l
-1035 5673 m
-1096 5673 l
-1096 5674 l
-1035 5674 l
-1037 5674 m
-1095 5674 l
-1095 5675 l
-1037 5675 l
-1038 5675 m
-1094 5675 l
-1094 5676 l
-1038 5676 l
-1039 5676 m
-1093 5676 l
-1093 5677 l
-1039 5677 l
-1040 5677 m
-1092 5677 l
-1092 5678 l
-1040 5678 l
-1042 5678 m
-1092 5678 l
-1092 5679 l
-1042 5679 l
-1043 5679 m
-1091 5679 l
-1091 5680 l
-1043 5680 l
-1044 5680 m
-1090 5680 l
-1090 5681 l
-1044 5681 l
-1045 5681 m
-1089 5681 l
-1089 5682 l
-1045 5682 l
-1047 5682 m
-1088 5682 l
-1088 5683 l
-1047 5683 l
-1048 5683 m
-1088 5683 l
-1088 5684 l
-1048 5684 l
-1049 5684 m
-1087 5684 l
-1087 5685 l
-1049 5685 l
-1050 5685 m
-1086 5685 l
-1086 5686 l
-1050 5686 l
-1052 5686 m
-1085 5686 l
-1085 5687 l
-1052 5687 l
-1053 5687 m
-1084 5687 l
-1084 5688 l
-1053 5688 l
-1054 5688 m
-1084 5688 l
-1084 5689 l
-1054 5689 l
-1055 5689 m
-1083 5689 l
-1083 5690 l
-1055 5690 l
-1057 5690 m
-1082 5690 l
-1082 5691 l
-1057 5691 l
-1058 5691 m
-1081 5691 l
-1081 5692 l
-1058 5692 l
-1059 5692 m
-1080 5692 l
-1080 5693 l
-1059 5693 l
-1060 5693 m
-1080 5693 l
-1080 5694 l
-1060 5694 l
-1062 5694 m
-1079 5694 l
-1079 5695 l
-1062 5695 l
-1063 5695 m
-1078 5695 l
-1078 5696 l
-1063 5696 l
-1064 5696 m
-1077 5696 l
-1077 5697 l
-1064 5697 l
-1065 5697 m
-1076 5697 l
-1076 5698 l
-1065 5698 l
-1067 5698 m
-1076 5698 l
-1076 5699 l
-1067 5699 l
-1068 5699 m
-1075 5699 l
-1075 5700 l
-1068 5700 l
-1069 5700 m
-1074 5700 l
-1074 5701 l
-1069 5701 l
-1070 5701 m
-1073 5701 l
-1073 5702 l
-1070 5702 l
-Y
-1010.5 5497.6 m
-935 5592 l
-1072 5702 l
-1148 5607 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-972 5579 m
-976 5588 l
-978 5605 l
-1033 5537 l
-S
-1050 5663 m
-1054 5591 l
-1103 5630 l
-S
-1050 5663 m
-1105 5594 l
-S
-1 g
-1830 5898 m
-1841 5898 l
-1841 5899 l
-1830 5899 l
-1830 5899 m
-1847 5899 l
-1847 5900 l
-1830 5900 l
-1830 5900 m
-1854 5900 l
-1854 5901 l
-1830 5901 l
-1830 5901 m
-1861 5901 l
-1861 5902 l
-1830 5902 l
-1829 5902 m
-1867 5902 l
-1867 5903 l
-1829 5903 l
-1829 5903 m
-1874 5903 l
-1874 5904 l
-1829 5904 l
-1829 5904 m
-1881 5904 l
-1881 5905 l
-1829 5905 l
-1829 5905 m
-1887 5905 l
-1887 5906 l
-1829 5906 l
-1829 5906 m
-1894 5906 l
-1894 5907 l
-1829 5907 l
-1829 5907 m
-1901 5907 l
-1901 5908 l
-1829 5908 l
-1829 5908 m
-1907 5908 l
-1907 5909 l
-1829 5909 l
-1828 5909 m
-1914 5909 l
-1914 5910 l
-1828 5910 l
-1828 5910 m
-1921 5910 l
-1921 5911 l
-1828 5911 l
-1828 5911 m
-1927 5911 l
-1927 5912 l
-1828 5912 l
-1828 5912 m
-1934 5912 l
-1934 5913 l
-1828 5913 l
-1828 5913 m
-1941 5913 l
-1941 5914 l
-1828 5914 l
-1828 5914 m
-1947 5914 l
-1947 5915 l
-1828 5915 l
-1827 5915 m
-1954 5915 l
-1954 5916 l
-1827 5916 l
-1827 5916 m
-1961 5916 l
-1961 5917 l
-1827 5917 l
-1827 5917 m
-1967 5917 l
-1967 5918 l
-1827 5918 l
-1827 5918 m
-1974 5918 l
-1974 5919 l
-1827 5919 l
-1827 5919 m
-1981 5919 l
-1981 5920 l
-1827 5920 l
-1827 5920 m
-1987 5920 l
-1987 5921 l
-1827 5921 l
-1827 5921 m
-1994 5921 l
-1994 5922 l
-1827 5922 l
-1826 5922 m
-2000 5922 l
-2000 5923 l
-1826 5923 l
-1826 5923 m
-2000 5923 l
-2000 5929 l
-1826 5929 l
-1825 5929 m
-2000 5929 l
-2000 5930 l
-1825 5930 l
-1825 5930 m
-1999 5930 l
-1999 5936 l
-1825 5936 l
-1824 5936 m
-1999 5936 l
-1999 5937 l
-1824 5937 l
-1824 5937 m
-1998 5937 l
-1998 5942 l
-1824 5942 l
-1823 5942 m
-1998 5942 l
-1998 5943 l
-1823 5943 l
-1823 5943 m
-1997 5943 l
-1997 5949 l
-1823 5949 l
-1822 5949 m
-1997 5949 l
-1997 5950 l
-1822 5950 l
-1822 5950 m
-1996 5950 l
-1996 5956 l
-1822 5956 l
-1821 5956 m
-1996 5956 l
-1996 5957 l
-1821 5957 l
-1821 5957 m
-1995 5957 l
-1995 5963 l
-1821 5963 l
-1820 5963 m
-1994 5963 l
-1994 5969 l
-1820 5969 l
-1819 5969 m
-1994 5969 l
-1994 5970 l
-1819 5970 l
-1819 5970 m
-1993 5970 l
-1993 5976 l
-1819 5976 l
-1818 5976 m
-1993 5976 l
-1993 5977 l
-1818 5977 l
-1818 5977 m
-1992 5977 l
-1992 5983 l
-1818 5983 l
-1817 5983 m
-1991 5983 l
-1991 5990 l
-1817 5990 l
-1816 5990 m
-1990 5990 l
-1990 5996 l
-1816 5996 l
-1815 5996 m
-1990 5996 l
-1990 5997 l
-1815 5997 l
-1815 5997 m
-1989 5997 l
-1989 6003 l
-1815 6003 l
-1814 6003 m
-1989 6003 l
-1989 6004 l
-1814 6004 l
-1814 6004 m
-1988 6004 l
-1988 6010 l
-1814 6010 l
-1813 6010 m
-1987 6010 l
-1987 6017 l
-1813 6017 l
-1813 6017 m
-1986 6017 l
-1986 6018 l
-1813 6018 l
-1819 6018 m
-1986 6018 l
-1986 6019 l
-1819 6019 l
-1826 6019 m
-1986 6019 l
-1986 6020 l
-1826 6020 l
-1832 6020 m
-1986 6020 l
-1986 6021 l
-1832 6021 l
-1839 6021 m
-1986 6021 l
-1986 6022 l
-1839 6022 l
-1845 6022 m
-1986 6022 l
-1986 6023 l
-1845 6023 l
-1852 6023 m
-1986 6023 l
-1986 6024 l
-1852 6024 l
-1858 6024 m
-1985 6024 l
-1985 6025 l
-1858 6025 l
-1865 6025 m
-1985 6025 l
-1985 6026 l
-1865 6026 l
-1871 6026 m
-1985 6026 l
-1985 6027 l
-1871 6027 l
-1878 6027 m
-1985 6027 l
-1985 6028 l
-1878 6028 l
-1884 6028 m
-1985 6028 l
-1985 6029 l
-1884 6029 l
-1891 6029 m
-1985 6029 l
-1985 6030 l
-1891 6030 l
-1897 6030 m
-1984 6030 l
-1984 6031 l
-1897 6031 l
-1904 6031 m
-1984 6031 l
-1984 6032 l
-1904 6032 l
-1910 6032 m
-1984 6032 l
-1984 6033 l
-1910 6033 l
-1917 6033 m
-1984 6033 l
-1984 6034 l
-1917 6034 l
-1923 6034 m
-1984 6034 l
-1984 6035 l
-1923 6035 l
-1930 6035 m
-1984 6035 l
-1984 6036 l
-1930 6036 l
-1936 6036 m
-1984 6036 l
-1984 6037 l
-1936 6037 l
-1943 6037 m
-1983 6037 l
-1983 6038 l
-1943 6038 l
-1949 6038 m
-1983 6038 l
-1983 6039 l
-1949 6039 l
-1956 6039 m
-1983 6039 l
-1983 6040 l
-1956 6040 l
-1962 6040 m
-1983 6040 l
-1983 6041 l
-1962 6041 l
-1969 6041 m
-1983 6041 l
-1983 6042 l
-1969 6042 l
-1975 6042 m
-1983 6042 l
-1983 6043 l
-1975 6043 l
-Y
-1830.7 5897.6 m
-1813 6017 l
-1982 6043 l
-2000 5923 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1838 5987 m
-1846 5993 l
-1856 6007 l
-1869 5920 l
-S
-1962 6010 m
-1956 6018 l
-1943 6020 l
-1935 6019 l
-1923 6013 l
-1917 5999 l
-1916 5978 l
-1919 5957 l
-1925 5941 l
-1935 5934 l
-1948 5932 l
-1952 5933 l
-1964 5939 l
-1971 5948 l
-1973 5961 l
-1973 5965 l
-1967 5977 l
-1957 5984 l
-1944 5986 l
-1940 5986 l
-1928 5980 l
-1921 5970 l
-1919 5957 l
-S
-1 g
-2892 5791 m
-2896 5791 l
-2896 5792 l
-2892 5792 l
-2889 5792 m
-2896 5792 l
-2896 5793 l
-2889 5793 l
-2887 5793 m
-2897 5793 l
-2897 5794 l
-2887 5794 l
-2884 5794 m
-2897 5794 l
-2897 5795 l
-2884 5795 l
-2882 5795 m
-2897 5795 l
-2897 5796 l
-2882 5796 l
-2879 5796 m
-2898 5796 l
-2898 5797 l
-2879 5797 l
-2877 5797 m
-2898 5797 l
-2898 5798 l
-2877 5798 l
-2874 5798 m
-2899 5798 l
-2899 5799 l
-2874 5799 l
-2872 5799 m
-2899 5799 l
-2899 5800 l
-2872 5800 l
-2869 5800 m
-2899 5800 l
-2899 5801 l
-2869 5801 l
-2867 5801 m
-2900 5801 l
-2900 5802 l
-2867 5802 l
-2864 5802 m
-2900 5802 l
-2900 5803 l
-2864 5803 l
-2861 5803 m
-2901 5803 l
-2901 5804 l
-2861 5804 l
-2859 5804 m
-2901 5804 l
-2901 5805 l
-2859 5805 l
-2856 5805 m
-2901 5805 l
-2901 5806 l
-2856 5806 l
-2854 5806 m
-2902 5806 l
-2902 5807 l
-2854 5807 l
-2851 5807 m
-2902 5807 l
-2902 5808 l
-2851 5808 l
-2849 5808 m
-2903 5808 l
-2903 5809 l
-2849 5809 l
-2846 5809 m
-2903 5809 l
-2903 5810 l
-2846 5810 l
-2844 5810 m
-2903 5810 l
-2903 5811 l
-2844 5811 l
-2841 5811 m
-2904 5811 l
-2904 5812 l
-2841 5812 l
-2839 5812 m
-2904 5812 l
-2904 5813 l
-2839 5813 l
-2836 5813 m
-2904 5813 l
-2904 5814 l
-2836 5814 l
-2834 5814 m
-2905 5814 l
-2905 5815 l
-2834 5815 l
-2831 5815 m
-2905 5815 l
-2905 5816 l
-2831 5816 l
-2828 5816 m
-2906 5816 l
-2906 5817 l
-2828 5817 l
-2826 5817 m
-2906 5817 l
-2906 5818 l
-2826 5818 l
-2823 5818 m
-2906 5818 l
-2906 5819 l
-2823 5819 l
-2821 5819 m
-2907 5819 l
-2907 5820 l
-2821 5820 l
-2818 5820 m
-2907 5820 l
-2907 5821 l
-2818 5821 l
-2816 5821 m
-2908 5821 l
-2908 5822 l
-2816 5822 l
-2813 5822 m
-2908 5822 l
-2908 5823 l
-2813 5823 l
-2811 5823 m
-2908 5823 l
-2908 5824 l
-2811 5824 l
-2808 5824 m
-2909 5824 l
-2909 5825 l
-2808 5825 l
-2806 5825 m
-2909 5825 l
-2909 5826 l
-2806 5826 l
-2803 5826 m
-2910 5826 l
-2910 5827 l
-2803 5827 l
-2801 5827 m
-2910 5827 l
-2910 5828 l
-2801 5828 l
-2798 5828 m
-2910 5828 l
-2910 5829 l
-2798 5829 l
-2795 5829 m
-2911 5829 l
-2911 5830 l
-2795 5830 l
-2793 5830 m
-2911 5830 l
-2911 5831 l
-2793 5831 l
-2790 5831 m
-2911 5831 l
-2911 5832 l
-2790 5832 l
-2788 5832 m
-2912 5832 l
-2912 5833 l
-2788 5833 l
-2785 5833 m
-2912 5833 l
-2912 5834 l
-2785 5834 l
-2783 5834 m
-2913 5834 l
-2913 5835 l
-2783 5835 l
-2780 5835 m
-2913 5835 l
-2913 5836 l
-2780 5836 l
-2778 5836 m
-2913 5836 l
-2913 5837 l
-2778 5837 l
-2775 5837 m
-2914 5837 l
-2914 5838 l
-2775 5838 l
-2773 5838 m
-2914 5838 l
-2914 5839 l
-2773 5839 l
-2770 5839 m
-2915 5839 l
-2915 5840 l
-2770 5840 l
-2768 5840 m
-2915 5840 l
-2915 5841 l
-2768 5841 l
-2765 5841 m
-2915 5841 l
-2915 5842 l
-2765 5842 l
-2762 5842 m
-2916 5842 l
-2916 5843 l
-2762 5843 l
-2760 5843 m
-2916 5843 l
-2916 5844 l
-2760 5844 l
-2757 5844 m
-2917 5844 l
-2917 5845 l
-2757 5845 l
-2755 5845 m
-2917 5845 l
-2917 5846 l
-2755 5846 l
-2752 5846 m
-2917 5846 l
-2917 5847 l
-2752 5847 l
-2750 5847 m
-2918 5847 l
-2918 5848 l
-2750 5848 l
-2747 5848 m
-2918 5848 l
-2918 5849 l
-2747 5849 l
-2745 5849 m
-2918 5849 l
-2918 5850 l
-2745 5850 l
-2742 5850 m
-2919 5850 l
-2919 5851 l
-2742 5851 l
-2740 5851 m
-2919 5851 l
-2919 5852 l
-2740 5852 l
-2737 5852 m
-2920 5852 l
-2920 5853 l
-2737 5853 l
-2735 5853 m
-2920 5853 l
-2920 5854 l
-2735 5854 l
-2735 5854 m
-2920 5854 l
-2920 5855 l
-2735 5855 l
-2735 5855 m
-2921 5855 l
-2921 5857 l
-2735 5857 l
-2736 5857 m
-2922 5857 l
-2922 5860 l
-2736 5860 l
-2737 5860 m
-2923 5860 l
-2923 5862 l
-2737 5862 l
-2738 5862 m
-2924 5862 l
-2924 5865 l
-2738 5865 l
-2739 5865 m
-2925 5865 l
-2925 5867 l
-2739 5867 l
-2740 5867 m
-2926 5867 l
-2926 5870 l
-2740 5870 l
-2741 5870 m
-2927 5870 l
-2927 5872 l
-2741 5872 l
-2742 5872 m
-2927 5872 l
-2927 5873 l
-2742 5873 l
-2742 5873 m
-2928 5873 l
-2928 5875 l
-2742 5875 l
-2743 5875 m
-2929 5875 l
-2929 5877 l
-2743 5877 l
-2744 5877 m
-2929 5877 l
-2929 5878 l
-2744 5878 l
-2744 5878 m
-2930 5878 l
-2930 5880 l
-2744 5880 l
-2745 5880 m
-2931 5880 l
-2931 5882 l
-2745 5882 l
-2746 5882 m
-2931 5882 l
-2931 5883 l
-2746 5883 l
-2746 5883 m
-2932 5883 l
-2932 5885 l
-2746 5885 l
-2747 5885 m
-2933 5885 l
-2933 5887 l
-2747 5887 l
-2748 5887 m
-2933 5887 l
-2933 5888 l
-2748 5888 l
-2748 5888 m
-2934 5888 l
-2934 5890 l
-2748 5890 l
-2749 5890 m
-2934 5890 l
-2934 5891 l
-2749 5891 l
-2749 5891 m
-2935 5891 l
-2935 5892 l
-2749 5892 l
-2750 5892 m
-2935 5892 l
-2935 5893 l
-2750 5893 l
-2750 5893 m
-2936 5893 l
-2936 5895 l
-2750 5895 l
-2751 5895 m
-2936 5895 l
-2936 5896 l
-2751 5896 l
-2751 5896 m
-2937 5896 l
-2937 5897 l
-2751 5897 l
-2752 5897 m
-2937 5897 l
-2937 5898 l
-2752 5898 l
-2752 5898 m
-2938 5898 l
-2938 5900 l
-2752 5900 l
-2753 5900 m
-2938 5900 l
-2938 5901 l
-2753 5901 l
-2753 5901 m
-2939 5901 l
-2939 5902 l
-2753 5902 l
-2754 5902 m
-2939 5902 l
-2939 5903 l
-2754 5903 l
-2754 5903 m
-2939 5903 l
-2939 5904 l
-2754 5904 l
-2754 5904 m
-2939 5904 l
-2939 5905 l
-2754 5905 l
-2755 5905 m
-2937 5905 l
-2937 5906 l
-2755 5906 l
-2755 5906 m
-2934 5906 l
-2934 5907 l
-2755 5907 l
-2756 5907 m
-2932 5907 l
-2932 5908 l
-2756 5908 l
-2756 5908 m
-2929 5908 l
-2929 5909 l
-2756 5909 l
-2756 5909 m
-2927 5909 l
-2927 5910 l
-2756 5910 l
-2757 5910 m
-2924 5910 l
-2924 5911 l
-2757 5911 l
-2757 5911 m
-2922 5911 l
-2922 5912 l
-2757 5912 l
-2758 5912 m
-2919 5912 l
-2919 5913 l
-2758 5913 l
-2758 5913 m
-2917 5913 l
-2917 5914 l
-2758 5914 l
-2758 5914 m
-2914 5914 l
-2914 5915 l
-2758 5915 l
-2759 5915 m
-2912 5915 l
-2912 5916 l
-2759 5916 l
-2759 5916 m
-2909 5916 l
-2909 5917 l
-2759 5917 l
-2760 5917 m
-2906 5917 l
-2906 5918 l
-2760 5918 l
-2760 5918 m
-2904 5918 l
-2904 5919 l
-2760 5919 l
-2760 5919 m
-2901 5919 l
-2901 5920 l
-2760 5920 l
-2761 5920 m
-2899 5920 l
-2899 5921 l
-2761 5921 l
-2761 5921 m
-2896 5921 l
-2896 5922 l
-2761 5922 l
-2762 5922 m
-2894 5922 l
-2894 5923 l
-2762 5923 l
-2762 5923 m
-2891 5923 l
-2891 5924 l
-2762 5924 l
-2762 5924 m
-2889 5924 l
-2889 5925 l
-2762 5925 l
-2763 5925 m
-2886 5925 l
-2886 5926 l
-2763 5926 l
-2763 5926 m
-2884 5926 l
-2884 5927 l
-2763 5927 l
-2764 5927 m
-2881 5927 l
-2881 5928 l
-2764 5928 l
-2764 5928 m
-2879 5928 l
-2879 5929 l
-2764 5929 l
-2764 5929 m
-2876 5929 l
-2876 5930 l
-2764 5930 l
-2765 5930 m
-2874 5930 l
-2874 5931 l
-2765 5931 l
-2765 5931 m
-2871 5931 l
-2871 5932 l
-2765 5932 l
-2766 5932 m
-2869 5932 l
-2869 5933 l
-2766 5933 l
-2766 5933 m
-2866 5933 l
-2866 5934 l
-2766 5934 l
-2766 5934 m
-2864 5934 l
-2864 5935 l
-2766 5935 l
-2767 5935 m
-2861 5935 l
-2861 5936 l
-2767 5936 l
-2767 5936 m
-2859 5936 l
-2859 5937 l
-2767 5937 l
-2768 5937 m
-2856 5937 l
-2856 5938 l
-2768 5938 l
-2768 5938 m
-2854 5938 l
-2854 5939 l
-2768 5939 l
-2768 5939 m
-2851 5939 l
-2851 5940 l
-2768 5940 l
-2769 5940 m
-2849 5940 l
-2849 5941 l
-2769 5941 l
-2769 5941 m
-2846 5941 l
-2846 5942 l
-2769 5942 l
-2770 5942 m
-2843 5942 l
-2843 5943 l
-2770 5943 l
-2770 5943 m
-2841 5943 l
-2841 5944 l
-2770 5944 l
-2770 5944 m
-2838 5944 l
-2838 5945 l
-2770 5945 l
-2771 5945 m
-2836 5945 l
-2836 5946 l
-2771 5946 l
-2771 5946 m
-2833 5946 l
-2833 5947 l
-2771 5947 l
-2772 5947 m
-2831 5947 l
-2831 5948 l
-2772 5948 l
-2772 5948 m
-2828 5948 l
-2828 5949 l
-2772 5949 l
-2772 5949 m
-2826 5949 l
-2826 5950 l
-2772 5950 l
-2773 5950 m
-2823 5950 l
-2823 5951 l
-2773 5951 l
-2773 5951 m
-2821 5951 l
-2821 5952 l
-2773 5952 l
-2774 5952 m
-2818 5952 l
-2818 5953 l
-2774 5953 l
-2774 5953 m
-2816 5953 l
-2816 5954 l
-2774 5954 l
-2774 5954 m
-2813 5954 l
-2813 5955 l
-2774 5955 l
-2775 5955 m
-2811 5955 l
-2811 5956 l
-2775 5956 l
-2775 5956 m
-2808 5956 l
-2808 5957 l
-2775 5957 l
-2776 5957 m
-2806 5957 l
-2806 5958 l
-2776 5958 l
-2776 5958 m
-2803 5958 l
-2803 5959 l
-2776 5959 l
-2776 5959 m
-2801 5959 l
-2801 5960 l
-2776 5960 l
-2777 5960 m
-2798 5960 l
-2798 5961 l
-2777 5961 l
-2777 5961 m
-2796 5961 l
-2796 5962 l
-2777 5962 l
-2778 5962 m
-2793 5962 l
-2793 5963 l
-2778 5963 l
-2778 5963 m
-2791 5963 l
-2791 5964 l
-2778 5964 l
-2778 5964 m
-2788 5964 l
-2788 5965 l
-2778 5965 l
-2779 5965 m
-2786 5965 l
-2786 5966 l
-2779 5966 l
-2779 5966 m
-2783 5966 l
-2783 5967 l
-2779 5967 l
-Y
-2939 5903.9 m
-2895 5791 l
-2735 5854 l
-2780 5967 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2887 5830 m
-2878 5829 l
-2862 5822 l
-2894 5904 l
-S
-2796 5848 m
-2809 5847 l
-2816 5854 l
-2819 5861 l
-2818 5871 l
-2812 5878 l
-2798 5888 l
-2788 5896 l
-2783 5907 l
-2782 5916 l
-2787 5928 l
-2794 5934 l
-2799 5936 l
-2812 5936 l
-2828 5930 l
-2838 5921 l
-2840 5916 l
-2841 5906 l
-2837 5895 l
-2830 5889 l
-2819 5884 l
-2806 5885 l
-2789 5887 l
-2779 5886 l
-2772 5880 l
-2769 5872 l
-2770 5863 l
-2780 5854 l
-2796 5848 l
-S
-1 g
-3616 5200 m
-3619 5200 l
-3619 5201 l
-3616 5201 l
-3615 5201 m
-3620 5201 l
-3620 5202 l
-3615 5202 l
-3614 5202 m
-3621 5202 l
-3621 5203 l
-3614 5203 l
-3613 5203 m
-3623 5203 l
-3623 5204 l
-3613 5204 l
-3612 5204 m
-3624 5204 l
-3624 5205 l
-3612 5205 l
-3612 5205 m
-3625 5205 l
-3625 5206 l
-3612 5206 l
-3611 5206 m
-3626 5206 l
-3626 5207 l
-3611 5207 l
-3610 5207 m
-3628 5207 l
-3628 5208 l
-3610 5208 l
-3609 5208 m
-3629 5208 l
-3629 5209 l
-3609 5209 l
-3608 5209 m
-3630 5209 l
-3630 5210 l
-3608 5210 l
-3608 5210 m
-3631 5210 l
-3631 5211 l
-3608 5211 l
-3607 5211 m
-3633 5211 l
-3633 5212 l
-3607 5212 l
-3606 5212 m
-3634 5212 l
-3634 5213 l
-3606 5213 l
-3605 5213 m
-3635 5213 l
-3635 5214 l
-3605 5214 l
-3604 5214 m
-3636 5214 l
-3636 5215 l
-3604 5215 l
-3604 5215 m
-3638 5215 l
-3638 5216 l
-3604 5216 l
-3603 5216 m
-3639 5216 l
-3639 5217 l
-3603 5217 l
-3602 5217 m
-3640 5217 l
-3640 5218 l
-3602 5218 l
-3601 5218 m
-3641 5218 l
-3641 5219 l
-3601 5219 l
-3600 5219 m
-3643 5219 l
-3643 5220 l
-3600 5220 l
-3600 5220 m
-3644 5220 l
-3644 5221 l
-3600 5221 l
-3599 5221 m
-3645 5221 l
-3645 5222 l
-3599 5222 l
-3598 5222 m
-3647 5222 l
-3647 5223 l
-3598 5223 l
-3597 5223 m
-3648 5223 l
-3648 5224 l
-3597 5224 l
-3596 5224 m
-3649 5224 l
-3649 5225 l
-3596 5225 l
-3596 5225 m
-3650 5225 l
-3650 5226 l
-3596 5226 l
-3595 5226 m
-3652 5226 l
-3652 5227 l
-3595 5227 l
-3594 5227 m
-3653 5227 l
-3653 5228 l
-3594 5228 l
-3593 5228 m
-3654 5228 l
-3654 5229 l
-3593 5229 l
-3592 5229 m
-3655 5229 l
-3655 5230 l
-3592 5230 l
-3592 5230 m
-3657 5230 l
-3657 5231 l
-3592 5231 l
-3591 5231 m
-3658 5231 l
-3658 5232 l
-3591 5232 l
-3590 5232 m
-3659 5232 l
-3659 5233 l
-3590 5233 l
-3589 5233 m
-3660 5233 l
-3660 5234 l
-3589 5234 l
-3588 5234 m
-3662 5234 l
-3662 5235 l
-3588 5235 l
-3588 5235 m
-3663 5235 l
-3663 5236 l
-3588 5236 l
-3587 5236 m
-3664 5236 l
-3664 5237 l
-3587 5237 l
-3586 5237 m
-3665 5237 l
-3665 5238 l
-3586 5238 l
-3585 5238 m
-3667 5238 l
-3667 5239 l
-3585 5239 l
-3584 5239 m
-3668 5239 l
-3668 5240 l
-3584 5240 l
-3584 5240 m
-3669 5240 l
-3669 5241 l
-3584 5241 l
-3583 5241 m
-3670 5241 l
-3670 5242 l
-3583 5242 l
-3582 5242 m
-3672 5242 l
-3672 5243 l
-3582 5243 l
-3581 5243 m
-3673 5243 l
-3673 5244 l
-3581 5244 l
-3580 5244 m
-3674 5244 l
-3674 5245 l
-3580 5245 l
-3580 5245 m
-3676 5245 l
-3676 5246 l
-3580 5246 l
-3579 5246 m
-3677 5246 l
-3677 5247 l
-3579 5247 l
-3578 5247 m
-3678 5247 l
-3678 5248 l
-3578 5248 l
-3577 5248 m
-3679 5248 l
-3679 5249 l
-3577 5249 l
-3576 5249 m
-3681 5249 l
-3681 5250 l
-3576 5250 l
-3575 5250 m
-3682 5250 l
-3682 5251 l
-3575 5251 l
-3575 5251 m
-3683 5251 l
-3683 5252 l
-3575 5252 l
-3574 5252 m
-3684 5252 l
-3684 5253 l
-3574 5253 l
-3573 5253 m
-3686 5253 l
-3686 5254 l
-3573 5254 l
-3572 5254 m
-3687 5254 l
-3687 5255 l
-3572 5255 l
-3571 5255 m
-3688 5255 l
-3688 5256 l
-3571 5256 l
-3571 5256 m
-3689 5256 l
-3689 5257 l
-3571 5257 l
-3570 5257 m
-3691 5257 l
-3691 5258 l
-3570 5258 l
-3569 5258 m
-3692 5258 l
-3692 5259 l
-3569 5259 l
-3568 5259 m
-3693 5259 l
-3693 5260 l
-3568 5260 l
-3567 5260 m
-3694 5260 l
-3694 5261 l
-3567 5261 l
-3567 5261 m
-3696 5261 l
-3696 5262 l
-3567 5262 l
-3566 5262 m
-3697 5262 l
-3697 5263 l
-3566 5263 l
-3565 5263 m
-3698 5263 l
-3698 5264 l
-3565 5264 l
-3564 5264 m
-3699 5264 l
-3699 5265 l
-3564 5265 l
-3563 5265 m
-3701 5265 l
-3701 5266 l
-3563 5266 l
-3563 5266 m
-3702 5266 l
-3702 5267 l
-3563 5267 l
-3562 5267 m
-3703 5267 l
-3703 5268 l
-3562 5268 l
-3561 5268 m
-3705 5268 l
-3705 5269 l
-3561 5269 l
-3560 5269 m
-3706 5269 l
-3706 5270 l
-3560 5270 l
-3559 5270 m
-3707 5270 l
-3707 5271 l
-3559 5271 l
-3559 5271 m
-3708 5271 l
-3708 5272 l
-3559 5272 l
-3558 5272 m
-3710 5272 l
-3710 5273 l
-3558 5273 l
-3557 5273 m
-3711 5273 l
-3711 5274 l
-3557 5274 l
-3556 5274 m
-3712 5274 l
-3712 5275 l
-3556 5275 l
-3555 5275 m
-3712 5275 l
-3712 5276 l
-3555 5276 l
-3555 5276 m
-3711 5276 l
-3711 5277 l
-3555 5277 l
-3554 5277 m
-3711 5277 l
-3711 5278 l
-3554 5278 l
-3553 5278 m
-3710 5278 l
-3710 5279 l
-3553 5279 l
-3552 5279 m
-3709 5279 l
-3709 5280 l
-3552 5280 l
-3551 5280 m
-3708 5280 l
-3708 5281 l
-3551 5281 l
-3551 5281 m
-3707 5281 l
-3707 5282 l
-3551 5282 l
-3550 5282 m
-3707 5282 l
-3707 5283 l
-3550 5283 l
-3549 5283 m
-3706 5283 l
-3706 5284 l
-3549 5284 l
-3548 5284 m
-3705 5284 l
-3705 5285 l
-3548 5285 l
-3547 5285 m
-3704 5285 l
-3704 5286 l
-3547 5286 l
-3547 5286 m
-3703 5286 l
-3703 5287 l
-3547 5287 l
-3546 5287 m
-3703 5287 l
-3703 5288 l
-3546 5288 l
-3545 5288 m
-3702 5288 l
-3702 5289 l
-3545 5289 l
-3544 5289 m
-3701 5289 l
-3701 5290 l
-3544 5290 l
-3543 5290 m
-3700 5290 l
-3700 5291 l
-3543 5291 l
-3543 5291 m
-3699 5291 l
-3699 5292 l
-3543 5292 l
-3542 5292 m
-3699 5292 l
-3699 5293 l
-3542 5293 l
-3541 5293 m
-3698 5293 l
-3698 5294 l
-3541 5294 l
-3540 5294 m
-3697 5294 l
-3697 5295 l
-3540 5295 l
-3539 5295 m
-3696 5295 l
-3696 5296 l
-3539 5296 l
-3538 5296 m
-3695 5296 l
-3695 5298 l
-3538 5298 l
-3537 5298 m
-3694 5298 l
-3694 5299 l
-3537 5299 l
-3536 5299 m
-3693 5299 l
-3693 5300 l
-3536 5300 l
-3535 5300 m
-3692 5300 l
-3692 5301 l
-3535 5301 l
-3534 5301 m
-3691 5301 l
-3691 5303 l
-3534 5303 l
-3533 5303 m
-3690 5303 l
-3690 5304 l
-3533 5304 l
-3532 5304 m
-3689 5304 l
-3689 5305 l
-3532 5305 l
-3531 5305 m
-3688 5305 l
-3688 5306 l
-3531 5306 l
-3530 5306 m
-3687 5306 l
-3687 5308 l
-3530 5308 l
-3529 5308 m
-3686 5308 l
-3686 5309 l
-3529 5309 l
-3528 5309 m
-3685 5309 l
-3685 5310 l
-3528 5310 l
-3527 5310 m
-3684 5310 l
-3684 5311 l
-3527 5311 l
-3526 5311 m
-3683 5311 l
-3683 5313 l
-3526 5313 l
-3525 5313 m
-3682 5313 l
-3682 5314 l
-3525 5314 l
-3524 5314 m
-3681 5314 l
-3681 5315 l
-3524 5315 l
-3523 5315 m
-3680 5315 l
-3680 5316 l
-3523 5316 l
-3522 5316 m
-3679 5316 l
-3679 5318 l
-3522 5318 l
-3521 5318 m
-3678 5318 l
-3678 5319 l
-3521 5319 l
-3520 5319 m
-3677 5319 l
-3677 5320 l
-3520 5320 l
-3519 5320 m
-3676 5320 l
-3676 5321 l
-3519 5321 l
-3518 5321 m
-3675 5321 l
-3675 5323 l
-3518 5323 l
-3517 5323 m
-3674 5323 l
-3674 5324 l
-3517 5324 l
-3516 5324 m
-3673 5324 l
-3673 5325 l
-3516 5325 l
-3515 5325 m
-3672 5325 l
-3672 5326 l
-3515 5326 l
-3514 5326 m
-3672 5326 l
-3672 5327 l
-3514 5327 l
-3514 5327 m
-3671 5327 l
-3671 5328 l
-3514 5328 l
-3513 5328 m
-3670 5328 l
-3670 5329 l
-3513 5329 l
-3512 5329 m
-3669 5329 l
-3669 5330 l
-3512 5330 l
-3511 5330 m
-3668 5330 l
-3668 5331 l
-3511 5331 l
-3510 5331 m
-3668 5331 l
-3668 5332 l
-3510 5332 l
-3510 5332 m
-3667 5332 l
-3667 5333 l
-3510 5333 l
-3509 5333 m
-3666 5333 l
-3666 5334 l
-3509 5334 l
-3508 5334 m
-3665 5334 l
-3665 5335 l
-3508 5335 l
-3507 5335 m
-3664 5335 l
-3664 5336 l
-3507 5336 l
-3506 5336 m
-3664 5336 l
-3664 5337 l
-3506 5337 l
-3506 5337 m
-3663 5337 l
-3663 5338 l
-3506 5338 l
-3505 5338 m
-3662 5338 l
-3662 5339 l
-3505 5339 l
-3504 5339 m
-3661 5339 l
-3661 5340 l
-3504 5340 l
-3503 5340 m
-3660 5340 l
-3660 5341 l
-3503 5341 l
-3502 5341 m
-3660 5341 l
-3660 5342 l
-3502 5342 l
-3502 5342 m
-3659 5342 l
-3659 5343 l
-3502 5343 l
-3502 5343 m
-3658 5343 l
-3658 5344 l
-3502 5344 l
-3503 5344 m
-3657 5344 l
-3657 5345 l
-3503 5345 l
-3504 5345 m
-3656 5345 l
-3656 5346 l
-3504 5346 l
-3505 5346 m
-3656 5346 l
-3656 5347 l
-3505 5347 l
-3507 5347 m
-3655 5347 l
-3655 5348 l
-3507 5348 l
-3508 5348 m
-3654 5348 l
-3654 5349 l
-3508 5349 l
-3509 5349 m
-3653 5349 l
-3653 5350 l
-3509 5350 l
-3510 5350 m
-3652 5350 l
-3652 5351 l
-3510 5351 l
-3512 5351 m
-3652 5351 l
-3652 5352 l
-3512 5352 l
-3513 5352 m
-3651 5352 l
-3651 5353 l
-3513 5353 l
-3514 5353 m
-3650 5353 l
-3650 5354 l
-3514 5354 l
-3515 5354 m
-3649 5354 l
-3649 5355 l
-3515 5355 l
-3517 5355 m
-3648 5355 l
-3648 5356 l
-3517 5356 l
-3518 5356 m
-3648 5356 l
-3648 5357 l
-3518 5357 l
-3519 5357 m
-3647 5357 l
-3647 5358 l
-3519 5358 l
-3520 5358 m
-3646 5358 l
-3646 5359 l
-3520 5359 l
-3522 5359 m
-3645 5359 l
-3645 5360 l
-3522 5360 l
-3523 5360 m
-3644 5360 l
-3644 5361 l
-3523 5361 l
-3524 5361 m
-3644 5361 l
-3644 5362 l
-3524 5362 l
-3525 5362 m
-3643 5362 l
-3643 5363 l
-3525 5363 l
-3527 5363 m
-3642 5363 l
-3642 5364 l
-3527 5364 l
-3528 5364 m
-3641 5364 l
-3641 5365 l
-3528 5365 l
-3529 5365 m
-3640 5365 l
-3640 5366 l
-3529 5366 l
-3530 5366 m
-3640 5366 l
-3640 5367 l
-3530 5367 l
-3532 5367 m
-3639 5367 l
-3639 5368 l
-3532 5368 l
-3533 5368 m
-3638 5368 l
-3638 5369 l
-3533 5369 l
-3534 5369 m
-3637 5369 l
-3637 5370 l
-3534 5370 l
-3535 5370 m
-3636 5370 l
-3636 5371 l
-3535 5371 l
-3537 5371 m
-3636 5371 l
-3636 5372 l
-3537 5372 l
-3538 5372 m
-3635 5372 l
-3635 5373 l
-3538 5373 l
-3539 5373 m
-3634 5373 l
-3634 5374 l
-3539 5374 l
-3540 5374 m
-3633 5374 l
-3633 5375 l
-3540 5375 l
-3542 5375 m
-3633 5375 l
-3633 5376 l
-3542 5376 l
-3543 5376 m
-3632 5376 l
-3632 5377 l
-3543 5377 l
-3544 5377 m
-3631 5377 l
-3631 5378 l
-3544 5378 l
-3545 5378 m
-3630 5378 l
-3630 5379 l
-3545 5379 l
-3547 5379 m
-3629 5379 l
-3629 5380 l
-3547 5380 l
-3548 5380 m
-3629 5380 l
-3629 5381 l
-3548 5381 l
-3549 5381 m
-3628 5381 l
-3628 5382 l
-3549 5382 l
-3550 5382 m
-3627 5382 l
-3627 5383 l
-3550 5383 l
-3551 5383 m
-3626 5383 l
-3626 5384 l
-3551 5384 l
-3553 5384 m
-3625 5384 l
-3625 5385 l
-3553 5385 l
-3554 5385 m
-3625 5385 l
-3625 5386 l
-3554 5386 l
-3555 5386 m
-3624 5386 l
-3624 5387 l
-3555 5387 l
-3556 5387 m
-3623 5387 l
-3623 5388 l
-3556 5388 l
-3558 5388 m
-3622 5388 l
-3622 5389 l
-3558 5389 l
-3559 5389 m
-3621 5389 l
-3621 5390 l
-3559 5390 l
-3560 5390 m
-3621 5390 l
-3621 5391 l
-3560 5391 l
-3561 5391 m
-3620 5391 l
-3620 5392 l
-3561 5392 l
-3563 5392 m
-3619 5392 l
-3619 5393 l
-3563 5393 l
-3564 5393 m
-3618 5393 l
-3618 5394 l
-3564 5394 l
-3565 5394 m
-3617 5394 l
-3617 5395 l
-3565 5395 l
-3566 5395 m
-3617 5395 l
-3617 5396 l
-3566 5396 l
-3568 5396 m
-3616 5396 l
-3616 5397 l
-3568 5397 l
-3569 5397 m
-3615 5397 l
-3615 5398 l
-3569 5398 l
-3570 5398 m
-3614 5398 l
-3614 5399 l
-3570 5399 l
-3571 5399 m
-3613 5399 l
-3613 5400 l
-3571 5400 l
-3573 5400 m
-3613 5400 l
-3613 5401 l
-3573 5401 l
-3574 5401 m
-3612 5401 l
-3612 5402 l
-3574 5402 l
-3575 5402 m
-3611 5402 l
-3611 5403 l
-3575 5403 l
-3576 5403 m
-3610 5403 l
-3610 5404 l
-3576 5404 l
-3578 5404 m
-3609 5404 l
-3609 5405 l
-3578 5405 l
-3579 5405 m
-3609 5405 l
-3609 5406 l
-3579 5406 l
-3580 5406 m
-3608 5406 l
-3608 5407 l
-3580 5407 l
-3581 5407 m
-3607 5407 l
-3607 5408 l
-3581 5408 l
-3583 5408 m
-3606 5408 l
-3606 5409 l
-3583 5409 l
-3584 5409 m
-3605 5409 l
-3605 5410 l
-3584 5410 l
-3585 5410 m
-3605 5410 l
-3605 5411 l
-3585 5411 l
-3586 5411 m
-3604 5411 l
-3604 5412 l
-3586 5412 l
-3588 5412 m
-3603 5412 l
-3603 5413 l
-3588 5413 l
-3589 5413 m
-3602 5413 l
-3602 5414 l
-3589 5414 l
-3590 5414 m
-3601 5414 l
-3601 5415 l
-3590 5415 l
-3591 5415 m
-3601 5415 l
-3601 5416 l
-3591 5416 l
-3593 5416 m
-3600 5416 l
-3600 5417 l
-3593 5417 l
-3594 5417 m
-3599 5417 l
-3599 5418 l
-3594 5418 l
-3595 5418 m
-3598 5418 l
-3598 5419 l
-3595 5419 l
-Y
-3711.6 5275 m
-3617 5200 l
-3502 5343 l
-3597 5419 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3631 5243 m
-3627 5240 l
-3618 5238 l
-3612 5239 l
-3604 5243 l
-3593 5256 l
-3592 5265 l
-3592 5271 l
-3596 5279 l
-3603 5284 l
-3612 5286 l
-3627 5288 l
-3685 5281 l
-3649 5327 l
-S
-3549 5311 m
-3560 5304 l
-3575 5305 l
-3594 5315 l
-3604 5323 l
-3618 5339 l
-3622 5353 l
-3618 5366 l
-3613 5372 l
-3602 5380 l
-3587 5378 l
-3568 5369 l
-3558 5361 l
-3544 5344 l
-3539 5330 l
-3544 5318 l
-3549 5311 l
-S
-1 g
-3938 4336 m
-3946 4336 l
-3946 4337 l
-3938 4337 l
-3938 4337 m
-3953 4337 l
-3953 4338 l
-3938 4338 l
-3938 4338 m
-3960 4338 l
-3960 4339 l
-3938 4339 l
-3938 4339 m
-3967 4339 l
-3967 4340 l
-3938 4340 l
-3938 4340 m
-3973 4340 l
-3973 4341 l
-3938 4341 l
-3938 4341 m
-3980 4341 l
-3980 4342 l
-3938 4342 l
-3937 4342 m
-3987 4342 l
-3987 4343 l
-3937 4343 l
-3937 4343 m
-3994 4343 l
-3994 4344 l
-3937 4344 l
-3937 4344 m
-4001 4344 l
-4001 4345 l
-3937 4345 l
-3937 4345 m
-4007 4345 l
-4007 4346 l
-3937 4346 l
-3937 4346 m
-4014 4346 l
-4014 4347 l
-3937 4347 l
-3937 4347 m
-4021 4347 l
-4021 4348 l
-3937 4348 l
-3936 4348 m
-4028 4348 l
-4028 4349 l
-3936 4349 l
-3936 4349 m
-4035 4349 l
-4035 4350 l
-3936 4350 l
-3936 4350 m
-4041 4350 l
-4041 4351 l
-3936 4351 l
-3936 4351 m
-4048 4351 l
-4048 4352 l
-3936 4352 l
-3936 4352 m
-4055 4352 l
-4055 4353 l
-3936 4353 l
-3936 4353 m
-4059 4353 l
-4059 4354 l
-3936 4354 l
-3936 4354 m
-4059 4354 l
-4059 4355 l
-3936 4355 l
-3935 4355 m
-4059 4355 l
-4059 4357 l
-3935 4357 l
-3935 4357 m
-4058 4357 l
-4058 4361 l
-3935 4361 l
-3934 4361 m
-4058 4361 l
-4058 4364 l
-3934 4364 l
-3934 4364 m
-4057 4364 l
-4057 4368 l
-3934 4368 l
-3933 4368 m
-4057 4368 l
-4057 4371 l
-3933 4371 l
-3933 4371 m
-4056 4371 l
-4056 4374 l
-3933 4374 l
-3932 4374 m
-4056 4374 l
-4056 4377 l
-3932 4377 l
-3932 4377 m
-4055 4377 l
-4055 4381 l
-3932 4381 l
-3931 4381 m
-4055 4381 l
-4055 4384 l
-3931 4384 l
-3931 4384 m
-4054 4384 l
-4054 4387 l
-3931 4387 l
-3930 4387 m
-4054 4387 l
-4054 4390 l
-3930 4390 l
-3930 4390 m
-4053 4390 l
-4053 4394 l
-3930 4394 l
-3929 4394 m
-4053 4394 l
-4053 4397 l
-3929 4397 l
-3929 4397 m
-4052 4397 l
-4052 4400 l
-3929 4400 l
-3928 4400 m
-4052 4400 l
-4052 4404 l
-3928 4404 l
-3928 4404 m
-4051 4404 l
-4051 4407 l
-3928 4407 l
-3927 4407 m
-4051 4407 l
-4051 4410 l
-3927 4410 l
-3927 4410 m
-4050 4410 l
-4050 4413 l
-3927 4413 l
-3926 4413 m
-4050 4413 l
-4050 4417 l
-3926 4417 l
-3926 4417 m
-4049 4417 l
-4049 4420 l
-3926 4420 l
-3925 4420 m
-4049 4420 l
-4049 4423 l
-3925 4423 l
-3925 4423 m
-4048 4423 l
-4048 4426 l
-3925 4426 l
-3924 4426 m
-4048 4426 l
-4048 4430 l
-3924 4430 l
-3924 4430 m
-4047 4430 l
-4047 4432 l
-3924 4432 l
-3923 4432 m
-4047 4432 l
-4047 4437 l
-3923 4437 l
-3923 4437 m
-4046 4437 l
-4046 4439 l
-3923 4439 l
-3922 4439 m
-4046 4439 l
-4046 4443 l
-3922 4443 l
-3922 4443 m
-4045 4443 l
-4045 4445 l
-3922 4445 l
-3921 4445 m
-4045 4445 l
-4045 4450 l
-3921 4450 l
-3921 4450 m
-4044 4450 l
-4044 4452 l
-3921 4452 l
-3920 4452 m
-4044 4452 l
-4044 4456 l
-3920 4456 l
-3920 4456 m
-4043 4456 l
-4043 4458 l
-3920 4458 l
-3919 4458 m
-4043 4458 l
-4043 4463 l
-3919 4463 l
-3919 4463 m
-4042 4463 l
-4042 4465 l
-3919 4465 l
-3918 4465 m
-4042 4465 l
-4042 4470 l
-3918 4470 l
-3918 4470 m
-4041 4470 l
-4041 4471 l
-3918 4471 l
-3917 4471 m
-4041 4471 l
-4041 4476 l
-3917 4476 l
-3917 4476 m
-4040 4476 l
-4040 4478 l
-3917 4478 l
-3916 4478 m
-4040 4478 l
-4040 4483 l
-3916 4483 l
-3916 4483 m
-4039 4483 l
-4039 4484 l
-3916 4484 l
-3915 4484 m
-4039 4484 l
-4039 4489 l
-3915 4489 l
-3915 4489 m
-4038 4489 l
-4038 4491 l
-3915 4491 l
-3914 4491 m
-4038 4491 l
-4038 4496 l
-3914 4496 l
-3914 4496 m
-4037 4496 l
-4037 4497 l
-3914 4497 l
-3913 4497 m
-4037 4497 l
-4037 4503 l
-3913 4503 l
-3913 4503 m
-4036 4503 l
-4036 4504 l
-3913 4504 l
-3912 4504 m
-4036 4504 l
-4036 4509 l
-3912 4509 l
-3912 4509 m
-4035 4509 l
-4035 4510 l
-3912 4510 l
-3911 4510 m
-4035 4510 l
-4035 4516 l
-3911 4516 l
-3911 4516 m
-4034 4516 l
-4034 4517 l
-3911 4517 l
-3911 4517 m
-4034 4517 l
-4034 4518 l
-3911 4518 l
-3917 4518 m
-4034 4518 l
-4034 4519 l
-3917 4519 l
-3924 4519 m
-4034 4519 l
-4034 4520 l
-3924 4520 l
-3931 4520 m
-4034 4520 l
-4034 4521 l
-3931 4521 l
-3937 4521 m
-4034 4521 l
-4034 4522 l
-3937 4522 l
-3944 4522 m
-4033 4522 l
-4033 4523 l
-3944 4523 l
-3951 4523 m
-4033 4523 l
-4033 4524 l
-3951 4524 l
-3957 4524 m
-4033 4524 l
-4033 4525 l
-3957 4525 l
-3964 4525 m
-4033 4525 l
-4033 4526 l
-3964 4526 l
-3971 4526 m
-4033 4526 l
-4033 4527 l
-3971 4527 l
-3977 4527 m
-4033 4527 l
-4033 4528 l
-3977 4528 l
-3984 4528 m
-4033 4528 l
-4033 4529 l
-3984 4529 l
-3991 4529 m
-4032 4529 l
-4032 4530 l
-3991 4530 l
-3997 4530 m
-4032 4530 l
-4032 4531 l
-3997 4531 l
-4004 4531 m
-4032 4531 l
-4032 4532 l
-4004 4532 l
-4011 4532 m
-4032 4532 l
-4032 4533 l
-4011 4533 l
-4017 4533 m
-4032 4533 l
-4032 4534 l
-4017 4534 l
-4024 4534 m
-4032 4534 l
-4032 4535 l
-4024 4535 l
-Y
-4058.5 4353.6 m
-3939 4336 l
-3911 4517 l
-4031 4535 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3972 4366 m
-3968 4365 l
-3959 4368 l
-3954 4372 l
-3949 4379 l
-3947 4396 l
-3949 4405 l
-3953 4410 l
-3961 4415 l
-3969 4416 l
-3978 4413 l
-3991 4407 l
-4039 4372 l
-4030 4430 l
-S
-3960 4449 m
-3956 4448 l
-3947 4451 l
-3942 4454 l
-3937 4462 l
-3934 4478 l
-3937 4487 l
-3941 4492 l
-3948 4497 l
-3956 4499 l
-3965 4496 l
-3979 4489 l
-4026 4454 l
-4018 4512 l
-S
-1 g
-2292 3957 m
-2296 3957 l
-2296 3958 l
-2292 3958 l
-2289 3958 m
-2296 3958 l
-2296 3959 l
-2289 3959 l
-2287 3959 m
-2297 3959 l
-2297 3960 l
-2287 3960 l
-2284 3960 m
-2297 3960 l
-2297 3961 l
-2284 3961 l
-2282 3961 m
-2297 3961 l
-2297 3962 l
-2282 3962 l
-2279 3962 m
-2298 3962 l
-2298 3963 l
-2279 3963 l
-2277 3963 m
-2298 3963 l
-2298 3964 l
-2277 3964 l
-2274 3964 m
-2299 3964 l
-2299 3965 l
-2274 3965 l
-2272 3965 m
-2299 3965 l
-2299 3966 l
-2272 3966 l
-2269 3966 m
-2299 3966 l
-2299 3967 l
-2269 3967 l
-2267 3967 m
-2300 3967 l
-2300 3968 l
-2267 3968 l
-2264 3968 m
-2300 3968 l
-2300 3969 l
-2264 3969 l
-2262 3969 m
-2301 3969 l
-2301 3970 l
-2262 3970 l
-2259 3970 m
-2301 3970 l
-2301 3971 l
-2259 3971 l
-2256 3971 m
-2301 3971 l
-2301 3972 l
-2256 3972 l
-2254 3972 m
-2302 3972 l
-2302 3973 l
-2254 3973 l
-2251 3973 m
-2302 3973 l
-2302 3974 l
-2251 3974 l
-2249 3974 m
-2303 3974 l
-2303 3975 l
-2249 3975 l
-2246 3975 m
-2303 3975 l
-2303 3976 l
-2246 3976 l
-2244 3976 m
-2303 3976 l
-2303 3977 l
-2244 3977 l
-2241 3977 m
-2304 3977 l
-2304 3978 l
-2241 3978 l
-2239 3978 m
-2304 3978 l
-2304 3979 l
-2239 3979 l
-2236 3979 m
-2305 3979 l
-2305 3980 l
-2236 3980 l
-2234 3980 m
-2305 3980 l
-2305 3981 l
-2234 3981 l
-2231 3981 m
-2305 3981 l
-2305 3982 l
-2231 3982 l
-2229 3982 m
-2306 3982 l
-2306 3983 l
-2229 3983 l
-2226 3983 m
-2306 3983 l
-2306 3984 l
-2226 3984 l
-2224 3984 m
-2307 3984 l
-2307 3985 l
-2224 3985 l
-2221 3985 m
-2307 3985 l
-2307 3986 l
-2221 3986 l
-2218 3986 m
-2307 3986 l
-2307 3987 l
-2218 3987 l
-2216 3987 m
-2308 3987 l
-2308 3988 l
-2216 3988 l
-2213 3988 m
-2308 3988 l
-2308 3989 l
-2213 3989 l
-2211 3989 m
-2308 3989 l
-2308 3990 l
-2211 3990 l
-2208 3990 m
-2309 3990 l
-2309 3991 l
-2208 3991 l
-2206 3991 m
-2309 3991 l
-2309 3992 l
-2206 3992 l
-2203 3992 m
-2310 3992 l
-2310 3993 l
-2203 3993 l
-2201 3993 m
-2310 3993 l
-2310 3994 l
-2201 3994 l
-2198 3994 m
-2310 3994 l
-2310 3995 l
-2198 3995 l
-2196 3995 m
-2311 3995 l
-2311 3996 l
-2196 3996 l
-2193 3996 m
-2311 3996 l
-2311 3997 l
-2193 3997 l
-2191 3997 m
-2312 3997 l
-2312 3998 l
-2191 3998 l
-2188 3998 m
-2312 3998 l
-2312 3999 l
-2188 3999 l
-2186 3999 m
-2312 3999 l
-2312 4000 l
-2186 4000 l
-2183 4000 m
-2313 4000 l
-2313 4001 l
-2183 4001 l
-2180 4001 m
-2313 4001 l
-2313 4002 l
-2180 4002 l
-2178 4002 m
-2314 4002 l
-2314 4003 l
-2178 4003 l
-2175 4003 m
-2314 4003 l
-2314 4004 l
-2175 4004 l
-2173 4004 m
-2314 4004 l
-2314 4005 l
-2173 4005 l
-2170 4005 m
-2315 4005 l
-2315 4006 l
-2170 4006 l
-2168 4006 m
-2315 4006 l
-2315 4007 l
-2168 4007 l
-2165 4007 m
-2316 4007 l
-2316 4008 l
-2165 4008 l
-2163 4008 m
-2316 4008 l
-2316 4009 l
-2163 4009 l
-2160 4009 m
-2316 4009 l
-2316 4010 l
-2160 4010 l
-2158 4010 m
-2317 4010 l
-2317 4011 l
-2158 4011 l
-2155 4011 m
-2317 4011 l
-2317 4012 l
-2155 4012 l
-2153 4012 m
-2318 4012 l
-2318 4013 l
-2153 4013 l
-2150 4013 m
-2318 4013 l
-2318 4014 l
-2150 4014 l
-2147 4014 m
-2318 4014 l
-2318 4015 l
-2147 4015 l
-2145 4015 m
-2319 4015 l
-2319 4016 l
-2145 4016 l
-2142 4016 m
-2319 4016 l
-2319 4017 l
-2142 4017 l
-2140 4017 m
-2320 4017 l
-2320 4018 l
-2140 4018 l
-2137 4018 m
-2320 4018 l
-2320 4019 l
-2137 4019 l
-2135 4019 m
-2320 4019 l
-2320 4020 l
-2135 4020 l
-2132 4020 m
-2321 4020 l
-2321 4021 l
-2132 4021 l
-2130 4021 m
-2321 4021 l
-2321 4022 l
-2130 4022 l
-2127 4022 m
-2321 4022 l
-2321 4023 l
-2127 4023 l
-2125 4023 m
-2322 4023 l
-2322 4024 l
-2125 4024 l
-2122 4024 m
-2322 4024 l
-2322 4025 l
-2122 4025 l
-2120 4025 m
-2323 4025 l
-2323 4026 l
-2120 4026 l
-2117 4026 m
-2323 4026 l
-2323 4027 l
-2117 4027 l
-2115 4027 m
-2323 4027 l
-2323 4028 l
-2115 4028 l
-2112 4028 m
-2324 4028 l
-2324 4029 l
-2112 4029 l
-2109 4029 m
-2324 4029 l
-2324 4030 l
-2109 4030 l
-2107 4030 m
-2325 4030 l
-2325 4031 l
-2107 4031 l
-2104 4031 m
-2325 4031 l
-2325 4032 l
-2104 4032 l
-2102 4032 m
-2325 4032 l
-2325 4033 l
-2102 4033 l
-2099 4033 m
-2326 4033 l
-2326 4034 l
-2099 4034 l
-2097 4034 m
-2326 4034 l
-2326 4035 l
-2097 4035 l
-2094 4035 m
-2327 4035 l
-2327 4036 l
-2094 4036 l
-2092 4036 m
-2327 4036 l
-2327 4037 l
-2092 4037 l
-2089 4037 m
-2327 4037 l
-2327 4038 l
-2089 4038 l
-2087 4038 m
-2328 4038 l
-2328 4039 l
-2087 4039 l
-2084 4039 m
-2328 4039 l
-2328 4040 l
-2084 4040 l
-2082 4040 m
-2329 4040 l
-2329 4041 l
-2082 4041 l
-2079 4041 m
-2329 4041 l
-2329 4042 l
-2079 4042 l
-2077 4042 m
-2329 4042 l
-2329 4043 l
-2077 4043 l
-2074 4043 m
-2330 4043 l
-2330 4044 l
-2074 4044 l
-2071 4044 m
-2330 4044 l
-2330 4045 l
-2071 4045 l
-2069 4045 m
-2331 4045 l
-2331 4046 l
-2069 4046 l
-2066 4046 m
-2331 4046 l
-2331 4047 l
-2066 4047 l
-2064 4047 m
-2331 4047 l
-2331 4048 l
-2064 4048 l
-2061 4048 m
-2332 4048 l
-2332 4049 l
-2061 4049 l
-2059 4049 m
-2332 4049 l
-2332 4050 l
-2059 4050 l
-2056 4050 m
-2333 4050 l
-2333 4051 l
-2056 4051 l
-2054 4051 m
-2333 4051 l
-2333 4052 l
-2054 4052 l
-2051 4052 m
-2333 4052 l
-2333 4053 l
-2051 4053 l
-2049 4053 m
-2334 4053 l
-2334 4054 l
-2049 4054 l
-2046 4054 m
-2334 4054 l
-2334 4055 l
-2046 4055 l
-2044 4055 m
-2334 4055 l
-2334 4056 l
-2044 4056 l
-2041 4056 m
-2335 4056 l
-2335 4057 l
-2041 4057 l
-2038 4057 m
-2335 4057 l
-2335 4058 l
-2038 4058 l
-2036 4058 m
-2336 4058 l
-2336 4059 l
-2036 4059 l
-2033 4059 m
-2336 4059 l
-2336 4060 l
-2033 4060 l
-2031 4060 m
-2336 4060 l
-2336 4061 l
-2031 4061 l
-2028 4061 m
-2337 4061 l
-2337 4062 l
-2028 4062 l
-2026 4062 m
-2337 4062 l
-2337 4063 l
-2026 4063 l
-2023 4063 m
-2338 4063 l
-2338 4064 l
-2023 4064 l
-2021 4064 m
-2338 4064 l
-2338 4065 l
-2021 4065 l
-2018 4065 m
-2338 4065 l
-2338 4066 l
-2018 4066 l
-2016 4066 m
-2339 4066 l
-2339 4067 l
-2016 4067 l
-2013 4067 m
-2339 4067 l
-2339 4068 l
-2013 4068 l
-2011 4068 m
-2340 4068 l
-2340 4069 l
-2011 4069 l
-2008 4069 m
-2340 4069 l
-2340 4070 l
-2008 4070 l
-2006 4070 m
-2338 4070 l
-2338 4071 l
-2006 4071 l
-2003 4071 m
-2335 4071 l
-2335 4072 l
-2003 4072 l
-2000 4072 m
-2333 4072 l
-2333 4073 l
-2000 4073 l
-1998 4073 m
-2330 4073 l
-2330 4074 l
-1998 4074 l
-1995 4074 m
-2328 4074 l
-2328 4075 l
-1995 4075 l
-1993 4075 m
-2325 4075 l
-2325 4076 l
-1993 4076 l
-1990 4076 m
-2323 4076 l
-2323 4077 l
-1990 4077 l
-1988 4077 m
-2320 4077 l
-2320 4078 l
-1988 4078 l
-1985 4078 m
-2318 4078 l
-2318 4079 l
-1985 4079 l
-1983 4079 m
-2315 4079 l
-2315 4080 l
-1983 4080 l
-1980 4080 m
-2312 4080 l
-2312 4081 l
-1980 4081 l
-1978 4081 m
-2310 4081 l
-2310 4082 l
-1978 4082 l
-1975 4082 m
-2307 4082 l
-2307 4083 l
-1975 4083 l
-1973 4083 m
-2305 4083 l
-2305 4084 l
-1973 4084 l
-1970 4084 m
-2302 4084 l
-2302 4085 l
-1970 4085 l
-1968 4085 m
-2300 4085 l
-2300 4086 l
-1968 4086 l
-1965 4086 m
-2297 4086 l
-2297 4087 l
-1965 4087 l
-1962 4087 m
-2295 4087 l
-2295 4088 l
-1962 4088 l
-1960 4088 m
-2292 4088 l
-2292 4089 l
-1960 4089 l
-1957 4089 m
-2290 4089 l
-2290 4090 l
-1957 4090 l
-1955 4090 m
-2287 4090 l
-2287 4091 l
-1955 4091 l
-1952 4091 m
-2285 4091 l
-2285 4092 l
-1952 4092 l
-1950 4092 m
-2282 4092 l
-2282 4093 l
-1950 4093 l
-1947 4093 m
-2280 4093 l
-2280 4094 l
-1947 4094 l
-1945 4094 m
-2277 4094 l
-2277 4095 l
-1945 4095 l
-1942 4095 m
-2275 4095 l
-2275 4096 l
-1942 4096 l
-1940 4096 m
-2272 4096 l
-2272 4097 l
-1940 4097 l
-1937 4097 m
-2270 4097 l
-2270 4098 l
-1937 4098 l
-1935 4098 m
-2267 4098 l
-2267 4099 l
-1935 4099 l
-1932 4099 m
-2265 4099 l
-2265 4100 l
-1932 4100 l
-1930 4100 m
-2262 4100 l
-2262 4101 l
-1930 4101 l
-1930 4101 m
-2259 4101 l
-2259 4102 l
-1930 4102 l
-1930 4102 m
-2257 4102 l
-2257 4103 l
-1930 4103 l
-1930 4103 m
-2254 4103 l
-2254 4104 l
-1930 4104 l
-1931 4104 m
-2252 4104 l
-2252 4105 l
-1931 4105 l
-1931 4105 m
-2249 4105 l
-2249 4106 l
-1931 4106 l
-1931 4106 m
-2247 4106 l
-2247 4107 l
-1931 4107 l
-1932 4107 m
-2244 4107 l
-2244 4108 l
-1932 4108 l
-1932 4108 m
-2242 4108 l
-2242 4109 l
-1932 4109 l
-1933 4109 m
-2239 4109 l
-2239 4110 l
-1933 4110 l
-1933 4110 m
-2237 4110 l
-2237 4111 l
-1933 4111 l
-1933 4111 m
-2234 4111 l
-2234 4112 l
-1933 4112 l
-1934 4112 m
-2232 4112 l
-2232 4113 l
-1934 4113 l
-1934 4113 m
-2229 4113 l
-2229 4114 l
-1934 4114 l
-1935 4114 m
-2227 4114 l
-2227 4115 l
-1935 4115 l
-1935 4115 m
-2224 4115 l
-2224 4116 l
-1935 4116 l
-1935 4116 m
-2222 4116 l
-2222 4117 l
-1935 4117 l
-1936 4117 m
-2219 4117 l
-2219 4118 l
-1936 4118 l
-1936 4118 m
-2217 4118 l
-2217 4119 l
-1936 4119 l
-1937 4119 m
-2214 4119 l
-2214 4120 l
-1937 4120 l
-1937 4120 m
-2212 4120 l
-2212 4121 l
-1937 4121 l
-1937 4121 m
-2209 4121 l
-2209 4122 l
-1937 4122 l
-1938 4122 m
-2207 4122 l
-2207 4123 l
-1938 4123 l
-1938 4123 m
-2204 4123 l
-2204 4124 l
-1938 4124 l
-1938 4124 m
-2201 4124 l
-2201 4125 l
-1938 4125 l
-1939 4125 m
-2199 4125 l
-2199 4126 l
-1939 4126 l
-1939 4126 m
-2196 4126 l
-2196 4127 l
-1939 4127 l
-1940 4127 m
-2194 4127 l
-2194 4128 l
-1940 4128 l
-1940 4128 m
-2191 4128 l
-2191 4129 l
-1940 4129 l
-1940 4129 m
-2189 4129 l
-2189 4130 l
-1940 4130 l
-1941 4130 m
-2186 4130 l
-2186 4131 l
-1941 4131 l
-1941 4131 m
-2184 4131 l
-2184 4132 l
-1941 4132 l
-1942 4132 m
-2181 4132 l
-2181 4133 l
-1942 4133 l
-1942 4133 m
-2179 4133 l
-2179 4134 l
-1942 4134 l
-1942 4134 m
-2176 4134 l
-2176 4135 l
-1942 4135 l
-1943 4135 m
-2174 4135 l
-2174 4136 l
-1943 4136 l
-1943 4136 m
-2171 4136 l
-2171 4137 l
-1943 4137 l
-1944 4137 m
-2169 4137 l
-2169 4138 l
-1944 4138 l
-1944 4138 m
-2166 4138 l
-2166 4139 l
-1944 4139 l
-1944 4139 m
-2164 4139 l
-2164 4140 l
-1944 4140 l
-1945 4140 m
-2161 4140 l
-2161 4141 l
-1945 4141 l
-1945 4141 m
-2159 4141 l
-2159 4142 l
-1945 4142 l
-1945 4142 m
-2156 4142 l
-2156 4143 l
-1945 4143 l
-1946 4143 m
-2154 4143 l
-2154 4144 l
-1946 4144 l
-1946 4144 m
-2151 4144 l
-2151 4145 l
-1946 4145 l
-1947 4145 m
-2149 4145 l
-2149 4146 l
-1947 4146 l
-1947 4146 m
-2146 4146 l
-2146 4147 l
-1947 4147 l
-1947 4147 m
-2143 4147 l
-2143 4148 l
-1947 4148 l
-1948 4148 m
-2141 4148 l
-2141 4149 l
-1948 4149 l
-1948 4149 m
-2138 4149 l
-2138 4150 l
-1948 4150 l
-1949 4150 m
-2136 4150 l
-2136 4151 l
-1949 4151 l
-1949 4151 m
-2133 4151 l
-2133 4152 l
-1949 4152 l
-1949 4152 m
-2131 4152 l
-2131 4153 l
-1949 4153 l
-1950 4153 m
-2128 4153 l
-2128 4154 l
-1950 4154 l
-1950 4154 m
-2126 4154 l
-2126 4155 l
-1950 4155 l
-1951 4155 m
-2123 4155 l
-2123 4156 l
-1951 4156 l
-1951 4156 m
-2121 4156 l
-2121 4157 l
-1951 4157 l
-1951 4157 m
-2118 4157 l
-2118 4158 l
-1951 4158 l
-1952 4158 m
-2116 4158 l
-2116 4159 l
-1952 4159 l
-1952 4159 m
-2113 4159 l
-2113 4160 l
-1952 4160 l
-1952 4160 m
-2111 4160 l
-2111 4161 l
-1952 4161 l
-1953 4161 m
-2108 4161 l
-2108 4162 l
-1953 4162 l
-1953 4162 m
-2106 4162 l
-2106 4163 l
-1953 4163 l
-1954 4163 m
-2103 4163 l
-2103 4164 l
-1954 4164 l
-1954 4164 m
-2101 4164 l
-2101 4165 l
-1954 4165 l
-1954 4165 m
-2098 4165 l
-2098 4166 l
-1954 4166 l
-1955 4166 m
-2096 4166 l
-2096 4167 l
-1955 4167 l
-1955 4167 m
-2093 4167 l
-2093 4168 l
-1955 4168 l
-1956 4168 m
-2091 4168 l
-2091 4169 l
-1956 4169 l
-1956 4169 m
-2088 4169 l
-2088 4170 l
-1956 4170 l
-1956 4170 m
-2085 4170 l
-2085 4171 l
-1956 4171 l
-1957 4171 m
-2083 4171 l
-2083 4172 l
-1957 4172 l
-1957 4172 m
-2080 4172 l
-2080 4173 l
-1957 4173 l
-1958 4173 m
-2078 4173 l
-2078 4174 l
-1958 4174 l
-1958 4174 m
-2075 4174 l
-2075 4175 l
-1958 4175 l
-1958 4175 m
-2073 4175 l
-2073 4176 l
-1958 4176 l
-1959 4176 m
-2070 4176 l
-2070 4177 l
-1959 4177 l
-1959 4177 m
-2068 4177 l
-2068 4178 l
-1959 4178 l
-1959 4178 m
-2065 4178 l
-2065 4179 l
-1959 4179 l
-1960 4179 m
-2063 4179 l
-2063 4180 l
-1960 4180 l
-1960 4180 m
-2060 4180 l
-2060 4181 l
-1960 4181 l
-1961 4181 m
-2058 4181 l
-2058 4182 l
-1961 4182 l
-1961 4182 m
-2055 4182 l
-2055 4183 l
-1961 4183 l
-1961 4183 m
-2053 4183 l
-2053 4184 l
-1961 4184 l
-1962 4184 m
-2050 4184 l
-2050 4185 l
-1962 4185 l
-1962 4185 m
-2048 4185 l
-2048 4186 l
-1962 4186 l
-1963 4186 m
-2045 4186 l
-2045 4187 l
-1963 4187 l
-1963 4187 m
-2043 4187 l
-2043 4188 l
-1963 4188 l
-1963 4188 m
-2040 4188 l
-2040 4189 l
-1963 4189 l
-1964 4189 m
-2038 4189 l
-2038 4190 l
-1964 4190 l
-1964 4190 m
-2035 4190 l
-2035 4191 l
-1964 4191 l
-1965 4191 m
-2033 4191 l
-2033 4192 l
-1965 4192 l
-1965 4192 m
-2030 4192 l
-2030 4193 l
-1965 4193 l
-1965 4193 m
-2027 4193 l
-2027 4194 l
-1965 4194 l
-1966 4194 m
-2025 4194 l
-2025 4195 l
-1966 4195 l
-1966 4195 m
-2022 4195 l
-2022 4196 l
-1966 4196 l
-1966 4196 m
-2020 4196 l
-2020 4197 l
-1966 4197 l
-1967 4197 m
-2017 4197 l
-2017 4198 l
-1967 4198 l
-1967 4198 m
-2015 4198 l
-2015 4199 l
-1967 4199 l
-1968 4199 m
-2012 4199 l
-2012 4200 l
-1968 4200 l
-1968 4200 m
-2010 4200 l
-2010 4201 l
-1968 4201 l
-1968 4201 m
-2007 4201 l
-2007 4202 l
-1968 4202 l
-1969 4202 m
-2005 4202 l
-2005 4203 l
-1969 4203 l
-1969 4203 m
-2002 4203 l
-2002 4204 l
-1969 4204 l
-1970 4204 m
-2000 4204 l
-2000 4205 l
-1970 4205 l
-1970 4205 m
-1997 4205 l
-1997 4206 l
-1970 4206 l
-1970 4206 m
-1995 4206 l
-1995 4207 l
-1970 4207 l
-1971 4207 m
-1992 4207 l
-1992 4208 l
-1971 4208 l
-1971 4208 m
-1990 4208 l
-1990 4209 l
-1971 4209 l
-1972 4209 m
-1987 4209 l
-1987 4210 l
-1972 4210 l
-1972 4210 m
-1985 4210 l
-1985 4211 l
-1972 4211 l
-1972 4211 m
-1982 4211 l
-1982 4212 l
-1972 4212 l
-1973 4212 m
-1980 4212 l
-1980 4213 l
-1973 4213 l
-1973 4213 m
-1977 4213 l
-1977 4214 l
-1973 4214 l
-Y
-2339.2 4069.2 m
-2295 3957 l
-1930 4101 l
-1974 4214 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2242 4027 m
-2250 4037 l
-2261 4042 l
-2274 4041 l
-2278 4040 l
-2288 4031 l
-2293 4020 l
-2292 4007 l
-2291 4003 l
-2282 3993 l
-2271 3988 l
-2258 3989 l
-2254 3991 l
-2244 3999 l
-2239 4010 l
-2242 4027 l
-2249 4046 l
-2261 4064 l
-2273 4073 l
-2286 4072 l
-2294 4069 l
-2304 4061 l
-2305 4051 l
-S
-2180 4020 m
-2194 4019 l
-2206 4028 l
-2217 4046 l
-2222 4057 l
-2226 4078 l
-2223 4093 l
-2213 4101 l
-2205 4104 l
-2192 4105 l
-2179 4097 l
-2168 4079 l
-2163 4067 l
-2159 4046 l
-2162 4031 l
-2173 4023 l
-2180 4020 l
-S
-2129 4072 m
-2134 4074 l
-2132 4079 l
-2127 4077 l
-2129 4072 l
-S
-2147 4118 m
-2153 4121 l
-2150 4126 l
-2145 4124 l
-2147 4118 l
-S
-2064 4066 m
-2077 4065 l
-2089 4074 l
-2101 4092 l
-2106 4103 l
-2109 4124 l
-2106 4139 l
-2096 4148 l
-2088 4151 l
-2075 4151 l
-2063 4143 l
-2051 4125 l
-2047 4113 l
-2043 4092 l
-2046 4078 l
-2056 4069 l
-2064 4066 l
-S
-1986 4097 m
-1999 4096 l
-2012 4105 l
-2023 4122 l
-2028 4134 l
-2032 4155 l
-2029 4170 l
-2018 4178 l
-2011 4181 l
-1998 4182 l
-1985 4173 l
-1974 4156 l
-1969 4144 l
-1965 4123 l
-1968 4108 l
-1978 4100 l
-1986 4097 l
-S
-1 g
-2732 3782 m
-2736 3782 l
-2736 3783 l
-2732 3783 l
-2729 3783 m
-2736 3783 l
-2736 3784 l
-2729 3784 l
-2727 3784 m
-2737 3784 l
-2737 3785 l
-2727 3785 l
-2724 3785 m
-2737 3785 l
-2737 3786 l
-2724 3786 l
-2722 3786 m
-2737 3786 l
-2737 3787 l
-2722 3787 l
-2719 3787 m
-2738 3787 l
-2738 3788 l
-2719 3788 l
-2717 3788 m
-2738 3788 l
-2738 3789 l
-2717 3789 l
-2714 3789 m
-2739 3789 l
-2739 3790 l
-2714 3790 l
-2712 3790 m
-2739 3790 l
-2739 3791 l
-2712 3791 l
-2709 3791 m
-2739 3791 l
-2739 3792 l
-2709 3792 l
-2707 3792 m
-2740 3792 l
-2740 3793 l
-2707 3793 l
-2704 3793 m
-2740 3793 l
-2740 3794 l
-2704 3794 l
-2702 3794 m
-2741 3794 l
-2741 3795 l
-2702 3795 l
-2699 3795 m
-2741 3795 l
-2741 3796 l
-2699 3796 l
-2697 3796 m
-2741 3796 l
-2741 3797 l
-2697 3797 l
-2694 3797 m
-2742 3797 l
-2742 3798 l
-2694 3798 l
-2692 3798 m
-2742 3798 l
-2742 3799 l
-2692 3799 l
-2689 3799 m
-2743 3799 l
-2743 3800 l
-2689 3800 l
-2687 3800 m
-2743 3800 l
-2743 3801 l
-2687 3801 l
-2684 3801 m
-2743 3801 l
-2743 3802 l
-2684 3802 l
-2682 3802 m
-2744 3802 l
-2744 3803 l
-2682 3803 l
-2679 3803 m
-2744 3803 l
-2744 3804 l
-2679 3804 l
-2677 3804 m
-2745 3804 l
-2745 3805 l
-2677 3805 l
-2674 3805 m
-2745 3805 l
-2745 3806 l
-2674 3806 l
-2672 3806 m
-2745 3806 l
-2745 3807 l
-2672 3807 l
-2669 3807 m
-2746 3807 l
-2746 3808 l
-2669 3808 l
-2667 3808 m
-2746 3808 l
-2746 3809 l
-2667 3809 l
-2664 3809 m
-2747 3809 l
-2747 3810 l
-2664 3810 l
-2662 3810 m
-2747 3810 l
-2747 3811 l
-2662 3811 l
-2659 3811 m
-2747 3811 l
-2747 3812 l
-2659 3812 l
-2657 3812 m
-2748 3812 l
-2748 3813 l
-2657 3813 l
-2654 3813 m
-2748 3813 l
-2748 3814 l
-2654 3814 l
-2652 3814 m
-2749 3814 l
-2749 3815 l
-2652 3815 l
-2649 3815 m
-2749 3815 l
-2749 3816 l
-2649 3816 l
-2646 3816 m
-2749 3816 l
-2749 3817 l
-2646 3817 l
-2644 3817 m
-2750 3817 l
-2750 3818 l
-2644 3818 l
-2641 3818 m
-2750 3818 l
-2750 3819 l
-2641 3819 l
-2639 3819 m
-2750 3819 l
-2750 3820 l
-2639 3820 l
-2636 3820 m
-2751 3820 l
-2751 3821 l
-2636 3821 l
-2634 3821 m
-2751 3821 l
-2751 3822 l
-2634 3822 l
-2631 3822 m
-2752 3822 l
-2752 3823 l
-2631 3823 l
-2629 3823 m
-2752 3823 l
-2752 3824 l
-2629 3824 l
-2626 3824 m
-2752 3824 l
-2752 3825 l
-2626 3825 l
-2624 3825 m
-2753 3825 l
-2753 3826 l
-2624 3826 l
-2621 3826 m
-2753 3826 l
-2753 3827 l
-2621 3827 l
-2619 3827 m
-2754 3827 l
-2754 3828 l
-2619 3828 l
-2616 3828 m
-2754 3828 l
-2754 3829 l
-2616 3829 l
-2614 3829 m
-2754 3829 l
-2754 3830 l
-2614 3830 l
-2611 3830 m
-2755 3830 l
-2755 3831 l
-2611 3831 l
-2609 3831 m
-2755 3831 l
-2755 3832 l
-2609 3832 l
-2606 3832 m
-2756 3832 l
-2756 3833 l
-2606 3833 l
-2604 3833 m
-2756 3833 l
-2756 3834 l
-2604 3834 l
-2601 3834 m
-2756 3834 l
-2756 3835 l
-2601 3835 l
-2599 3835 m
-2757 3835 l
-2757 3836 l
-2599 3836 l
-2596 3836 m
-2757 3836 l
-2757 3837 l
-2596 3837 l
-2594 3837 m
-2758 3837 l
-2758 3838 l
-2594 3838 l
-2591 3838 m
-2758 3838 l
-2758 3839 l
-2591 3839 l
-2589 3839 m
-2758 3839 l
-2758 3840 l
-2589 3840 l
-2586 3840 m
-2759 3840 l
-2759 3841 l
-2586 3841 l
-2584 3841 m
-2759 3841 l
-2759 3842 l
-2584 3842 l
-2581 3842 m
-2760 3842 l
-2760 3843 l
-2581 3843 l
-2579 3843 m
-2760 3843 l
-2760 3844 l
-2579 3844 l
-2576 3844 m
-2760 3844 l
-2760 3845 l
-2576 3845 l
-2574 3845 m
-2761 3845 l
-2761 3846 l
-2574 3846 l
-2571 3846 m
-2761 3846 l
-2761 3847 l
-2571 3847 l
-2569 3847 m
-2762 3847 l
-2762 3848 l
-2569 3848 l
-2566 3848 m
-2762 3848 l
-2762 3849 l
-2566 3849 l
-2564 3849 m
-2762 3849 l
-2762 3850 l
-2564 3850 l
-2564 3850 m
-2763 3850 l
-2763 3852 l
-2564 3852 l
-2564 3852 m
-2764 3852 l
-2764 3853 l
-2564 3853 l
-2565 3853 m
-2764 3853 l
-2764 3855 l
-2565 3855 l
-2566 3855 m
-2765 3855 l
-2765 3858 l
-2566 3858 l
-2567 3858 m
-2766 3858 l
-2766 3860 l
-2567 3860 l
-2568 3860 m
-2767 3860 l
-2767 3863 l
-2568 3863 l
-2569 3863 m
-2768 3863 l
-2768 3865 l
-2569 3865 l
-2570 3865 m
-2769 3865 l
-2769 3868 l
-2570 3868 l
-2571 3868 m
-2770 3868 l
-2770 3870 l
-2571 3870 l
-2572 3870 m
-2771 3870 l
-2771 3873 l
-2572 3873 l
-2573 3873 m
-2772 3873 l
-2772 3875 l
-2573 3875 l
-2574 3875 m
-2773 3875 l
-2773 3878 l
-2574 3878 l
-2575 3878 m
-2774 3878 l
-2774 3880 l
-2575 3880 l
-2576 3880 m
-2775 3880 l
-2775 3883 l
-2576 3883 l
-2577 3883 m
-2776 3883 l
-2776 3885 l
-2577 3885 l
-2578 3885 m
-2777 3885 l
-2777 3888 l
-2578 3888 l
-2579 3888 m
-2778 3888 l
-2778 3890 l
-2579 3890 l
-2580 3890 m
-2779 3890 l
-2779 3893 l
-2580 3893 l
-2581 3893 m
-2780 3893 l
-2780 3894 l
-2581 3894 l
-2581 3894 m
-2780 3894 l
-2780 3895 l
-2581 3895 l
-2582 3895 m
-2779 3895 l
-2779 3896 l
-2582 3896 l
-2582 3896 m
-2777 3896 l
-2777 3897 l
-2582 3897 l
-2582 3897 m
-2774 3897 l
-2774 3898 l
-2582 3898 l
-2583 3898 m
-2772 3898 l
-2772 3899 l
-2583 3899 l
-2583 3899 m
-2769 3899 l
-2769 3900 l
-2583 3900 l
-2584 3900 m
-2767 3900 l
-2767 3901 l
-2584 3901 l
-2584 3901 m
-2764 3901 l
-2764 3902 l
-2584 3902 l
-2584 3902 m
-2762 3902 l
-2762 3903 l
-2584 3903 l
-2585 3903 m
-2759 3903 l
-2759 3904 l
-2585 3904 l
-2585 3904 m
-2757 3904 l
-2757 3905 l
-2585 3905 l
-2586 3905 m
-2754 3905 l
-2754 3906 l
-2586 3906 l
-2586 3906 m
-2752 3906 l
-2752 3907 l
-2586 3907 l
-2586 3907 m
-2749 3907 l
-2749 3908 l
-2586 3908 l
-2587 3908 m
-2747 3908 l
-2747 3909 l
-2587 3909 l
-2587 3909 m
-2744 3909 l
-2744 3910 l
-2587 3910 l
-2588 3910 m
-2741 3910 l
-2741 3911 l
-2588 3911 l
-2588 3911 m
-2739 3911 l
-2739 3912 l
-2588 3912 l
-2588 3912 m
-2736 3912 l
-2736 3913 l
-2588 3913 l
-2589 3913 m
-2734 3913 l
-2734 3914 l
-2589 3914 l
-2589 3914 m
-2731 3914 l
-2731 3915 l
-2589 3915 l
-2590 3915 m
-2729 3915 l
-2729 3916 l
-2590 3916 l
-2590 3916 m
-2726 3916 l
-2726 3917 l
-2590 3917 l
-2590 3917 m
-2724 3917 l
-2724 3918 l
-2590 3918 l
-2591 3918 m
-2721 3918 l
-2721 3919 l
-2591 3919 l
-2591 3919 m
-2719 3919 l
-2719 3920 l
-2591 3920 l
-2592 3920 m
-2716 3920 l
-2716 3921 l
-2592 3921 l
-2592 3921 m
-2714 3921 l
-2714 3922 l
-2592 3922 l
-2592 3922 m
-2711 3922 l
-2711 3923 l
-2592 3923 l
-2593 3923 m
-2708 3923 l
-2708 3924 l
-2593 3924 l
-2593 3924 m
-2706 3924 l
-2706 3925 l
-2593 3925 l
-2594 3925 m
-2703 3925 l
-2703 3926 l
-2594 3926 l
-2594 3926 m
-2701 3926 l
-2701 3927 l
-2594 3927 l
-2594 3927 m
-2698 3927 l
-2698 3928 l
-2594 3928 l
-2595 3928 m
-2696 3928 l
-2696 3929 l
-2595 3929 l
-2595 3929 m
-2693 3929 l
-2693 3930 l
-2595 3930 l
-2596 3930 m
-2691 3930 l
-2691 3931 l
-2596 3931 l
-2596 3931 m
-2688 3931 l
-2688 3932 l
-2596 3932 l
-2596 3932 m
-2686 3932 l
-2686 3933 l
-2596 3933 l
-2597 3933 m
-2683 3933 l
-2683 3934 l
-2597 3934 l
-2597 3934 m
-2681 3934 l
-2681 3935 l
-2597 3935 l
-2598 3935 m
-2678 3935 l
-2678 3936 l
-2598 3936 l
-2598 3936 m
-2675 3936 l
-2675 3937 l
-2598 3937 l
-2598 3937 m
-2673 3937 l
-2673 3938 l
-2598 3938 l
-2599 3938 m
-2670 3938 l
-2670 3939 l
-2599 3939 l
-2599 3939 m
-2668 3939 l
-2668 3940 l
-2599 3940 l
-2600 3940 m
-2665 3940 l
-2665 3941 l
-2600 3941 l
-2600 3941 m
-2663 3941 l
-2663 3942 l
-2600 3942 l
-2600 3942 m
-2660 3942 l
-2660 3943 l
-2600 3943 l
-2601 3943 m
-2658 3943 l
-2658 3944 l
-2601 3944 l
-2601 3944 m
-2655 3944 l
-2655 3945 l
-2601 3945 l
-2602 3945 m
-2653 3945 l
-2653 3946 l
-2602 3946 l
-2602 3946 m
-2650 3946 l
-2650 3947 l
-2602 3947 l
-2602 3947 m
-2648 3947 l
-2648 3948 l
-2602 3948 l
-2603 3948 m
-2645 3948 l
-2645 3949 l
-2603 3949 l
-2603 3949 m
-2642 3949 l
-2642 3950 l
-2603 3950 l
-2604 3950 m
-2640 3950 l
-2640 3951 l
-2604 3951 l
-2604 3951 m
-2637 3951 l
-2637 3952 l
-2604 3952 l
-2604 3952 m
-2635 3952 l
-2635 3953 l
-2604 3953 l
-2605 3953 m
-2632 3953 l
-2632 3954 l
-2605 3954 l
-2605 3954 m
-2630 3954 l
-2630 3955 l
-2605 3955 l
-2606 3955 m
-2627 3955 l
-2627 3956 l
-2606 3956 l
-2606 3956 m
-2625 3956 l
-2625 3957 l
-2606 3957 l
-2606 3957 m
-2622 3957 l
-2622 3958 l
-2606 3958 l
-2607 3958 m
-2620 3958 l
-2620 3959 l
-2607 3959 l
-2607 3959 m
-2617 3959 l
-2617 3960 l
-2607 3960 l
-2608 3960 m
-2615 3960 l
-2615 3961 l
-2608 3961 l
-2608 3961 m
-2612 3961 l
-2612 3962 l
-2608 3962 l
-Y
-2779.5 3894.8 m
-2735 3782 l
-2564 3850 l
-2609 3962 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2675 3824 m
-2714 3808 l
-2732 3842 l
-2726 3840 l
-2713 3840 l
-2701 3845 l
-2691 3853 l
-2687 3864 l
-2687 3877 l
-2690 3885 l
-2699 3895 l
-2710 3900 l
-2723 3899 l
-2735 3895 l
-2745 3886 l
-2747 3881 l
-2748 3871 l
-S
-2625 3844 m
-2638 3843 l
-2645 3849 l
-2648 3857 l
-2647 3866 l
-2641 3873 l
-2627 3883 l
-2617 3892 l
-2612 3903 l
-2611 3912 l
-2616 3924 l
-2623 3930 l
-2628 3932 l
-2641 3932 l
-2657 3925 l
-2667 3917 l
-2669 3911 l
-2670 3902 l
-2666 3891 l
-2659 3884 l
-2648 3880 l
-2635 3880 l
-2617 3883 l
-2608 3882 l
-2601 3876 l
-2598 3868 l
-2599 3858 l
-2609 3850 l
-2625 3844 l
-S
-1 g
-3269 3569 m
-3273 3569 l
-3273 3570 l
-3269 3570 l
-3267 3570 m
-3273 3570 l
-3273 3571 l
-3267 3571 l
-3264 3571 m
-3274 3571 l
-3274 3572 l
-3264 3572 l
-3262 3572 m
-3274 3572 l
-3274 3573 l
-3262 3573 l
-3259 3573 m
-3274 3573 l
-3274 3574 l
-3259 3574 l
-3257 3574 m
-3275 3574 l
-3275 3575 l
-3257 3575 l
-3254 3575 m
-3275 3575 l
-3275 3576 l
-3254 3576 l
-3252 3576 m
-3276 3576 l
-3276 3577 l
-3252 3577 l
-3249 3577 m
-3276 3577 l
-3276 3578 l
-3249 3578 l
-3247 3578 m
-3276 3578 l
-3276 3579 l
-3247 3579 l
-3244 3579 m
-3277 3579 l
-3277 3580 l
-3244 3580 l
-3242 3580 m
-3277 3580 l
-3277 3581 l
-3242 3581 l
-3239 3581 m
-3278 3581 l
-3278 3582 l
-3239 3582 l
-3237 3582 m
-3278 3582 l
-3278 3583 l
-3237 3583 l
-3234 3583 m
-3278 3583 l
-3278 3584 l
-3234 3584 l
-3232 3584 m
-3279 3584 l
-3279 3585 l
-3232 3585 l
-3229 3585 m
-3279 3585 l
-3279 3586 l
-3229 3586 l
-3227 3586 m
-3280 3586 l
-3280 3587 l
-3227 3587 l
-3224 3587 m
-3280 3587 l
-3280 3588 l
-3224 3588 l
-3222 3588 m
-3280 3588 l
-3280 3589 l
-3222 3589 l
-3219 3589 m
-3281 3589 l
-3281 3590 l
-3219 3590 l
-3217 3590 m
-3281 3590 l
-3281 3591 l
-3217 3591 l
-3214 3591 m
-3282 3591 l
-3282 3592 l
-3214 3592 l
-3212 3592 m
-3282 3592 l
-3282 3593 l
-3212 3593 l
-3209 3593 m
-3282 3593 l
-3282 3594 l
-3209 3594 l
-3207 3594 m
-3283 3594 l
-3283 3595 l
-3207 3595 l
-3204 3595 m
-3283 3595 l
-3283 3596 l
-3204 3596 l
-3202 3596 m
-3284 3596 l
-3284 3597 l
-3202 3597 l
-3199 3597 m
-3284 3597 l
-3284 3598 l
-3199 3598 l
-3197 3598 m
-3284 3598 l
-3284 3599 l
-3197 3599 l
-3194 3599 m
-3285 3599 l
-3285 3600 l
-3194 3600 l
-3192 3600 m
-3285 3600 l
-3285 3601 l
-3192 3601 l
-3189 3601 m
-3286 3601 l
-3286 3602 l
-3189 3602 l
-3187 3602 m
-3286 3602 l
-3286 3603 l
-3187 3603 l
-3184 3603 m
-3286 3603 l
-3286 3604 l
-3184 3604 l
-3182 3604 m
-3287 3604 l
-3287 3605 l
-3182 3605 l
-3179 3605 m
-3287 3605 l
-3287 3606 l
-3179 3606 l
-3177 3606 m
-3288 3606 l
-3288 3607 l
-3177 3607 l
-3174 3607 m
-3288 3607 l
-3288 3608 l
-3174 3608 l
-3172 3608 m
-3288 3608 l
-3288 3609 l
-3172 3609 l
-3169 3609 m
-3289 3609 l
-3289 3610 l
-3169 3610 l
-3167 3610 m
-3289 3610 l
-3289 3611 l
-3167 3611 l
-3164 3611 m
-3290 3611 l
-3290 3612 l
-3164 3612 l
-3162 3612 m
-3290 3612 l
-3290 3613 l
-3162 3613 l
-3159 3613 m
-3290 3613 l
-3290 3614 l
-3159 3614 l
-3157 3614 m
-3291 3614 l
-3291 3615 l
-3157 3615 l
-3154 3615 m
-3291 3615 l
-3291 3616 l
-3154 3616 l
-3152 3616 m
-3292 3616 l
-3292 3617 l
-3152 3617 l
-3149 3617 m
-3292 3617 l
-3292 3618 l
-3149 3618 l
-3147 3618 m
-3292 3618 l
-3292 3619 l
-3147 3619 l
-3144 3619 m
-3293 3619 l
-3293 3620 l
-3144 3620 l
-3142 3620 m
-3293 3620 l
-3293 3621 l
-3142 3621 l
-3139 3621 m
-3294 3621 l
-3294 3622 l
-3139 3622 l
-3137 3622 m
-3294 3622 l
-3294 3623 l
-3137 3623 l
-3134 3623 m
-3294 3623 l
-3294 3624 l
-3134 3624 l
-3132 3624 m
-3295 3624 l
-3295 3625 l
-3132 3625 l
-3129 3625 m
-3295 3625 l
-3295 3626 l
-3129 3626 l
-3127 3626 m
-3296 3626 l
-3296 3627 l
-3127 3627 l
-3124 3627 m
-3296 3627 l
-3296 3628 l
-3124 3628 l
-3122 3628 m
-3296 3628 l
-3296 3629 l
-3122 3629 l
-3119 3629 m
-3297 3629 l
-3297 3630 l
-3119 3630 l
-3117 3630 m
-3297 3630 l
-3297 3631 l
-3117 3631 l
-3114 3631 m
-3298 3631 l
-3298 3632 l
-3114 3632 l
-3112 3632 m
-3298 3632 l
-3298 3633 l
-3112 3633 l
-3109 3633 m
-3298 3633 l
-3298 3634 l
-3109 3634 l
-3107 3634 m
-3299 3634 l
-3299 3635 l
-3107 3635 l
-3104 3635 m
-3299 3635 l
-3299 3636 l
-3104 3636 l
-3102 3636 m
-3300 3636 l
-3300 3637 l
-3102 3637 l
-3102 3637 m
-3300 3637 l
-3300 3639 l
-3102 3639 l
-3102 3639 m
-3301 3639 l
-3301 3640 l
-3102 3640 l
-3103 3640 m
-3301 3640 l
-3301 3641 l
-3103 3641 l
-3103 3641 m
-3302 3641 l
-3302 3643 l
-3103 3643 l
-3104 3643 m
-3302 3643 l
-3302 3644 l
-3104 3644 l
-3104 3644 m
-3303 3644 l
-3303 3645 l
-3104 3645 l
-3105 3645 m
-3303 3645 l
-3303 3646 l
-3105 3646 l
-3105 3646 m
-3304 3646 l
-3304 3648 l
-3105 3648 l
-3106 3648 m
-3304 3648 l
-3304 3649 l
-3106 3649 l
-3106 3649 m
-3305 3649 l
-3305 3650 l
-3106 3650 l
-3107 3650 m
-3305 3650 l
-3305 3651 l
-3107 3651 l
-3107 3651 m
-3306 3651 l
-3306 3653 l
-3107 3653 l
-3108 3653 m
-3306 3653 l
-3306 3654 l
-3108 3654 l
-3108 3654 m
-3307 3654 l
-3307 3655 l
-3108 3655 l
-3109 3655 m
-3307 3655 l
-3307 3656 l
-3109 3656 l
-3109 3656 m
-3308 3656 l
-3308 3658 l
-3109 3658 l
-3110 3658 m
-3308 3658 l
-3308 3659 l
-3110 3659 l
-3110 3659 m
-3309 3659 l
-3309 3661 l
-3110 3661 l
-3111 3661 m
-3310 3661 l
-3310 3663 l
-3111 3663 l
-3112 3663 m
-3310 3663 l
-3310 3664 l
-3112 3664 l
-3112 3664 m
-3311 3664 l
-3311 3666 l
-3112 3666 l
-3113 3666 m
-3312 3666 l
-3312 3668 l
-3113 3668 l
-3114 3668 m
-3312 3668 l
-3312 3669 l
-3114 3669 l
-3114 3669 m
-3313 3669 l
-3313 3671 l
-3114 3671 l
-3115 3671 m
-3314 3671 l
-3314 3673 l
-3115 3673 l
-3116 3673 m
-3314 3673 l
-3314 3674 l
-3116 3674 l
-3116 3674 m
-3315 3674 l
-3315 3676 l
-3116 3676 l
-3117 3676 m
-3316 3676 l
-3316 3679 l
-3117 3679 l
-3118 3679 m
-3317 3679 l
-3317 3681 l
-3118 3681 l
-3119 3681 m
-3317 3681 l
-3317 3682 l
-3119 3682 l
-3119 3682 m
-3317 3682 l
-3317 3683 l
-3119 3683 l
-3119 3683 m
-3315 3683 l
-3315 3684 l
-3119 3684 l
-3120 3684 m
-3312 3684 l
-3312 3685 l
-3120 3685 l
-3120 3685 m
-3310 3685 l
-3310 3686 l
-3120 3686 l
-3121 3686 m
-3307 3686 l
-3307 3687 l
-3121 3687 l
-3121 3687 m
-3305 3687 l
-3305 3688 l
-3121 3688 l
-3121 3688 m
-3302 3688 l
-3302 3689 l
-3121 3689 l
-3122 3689 m
-3300 3689 l
-3300 3690 l
-3122 3690 l
-3122 3690 m
-3297 3690 l
-3297 3691 l
-3122 3691 l
-3123 3691 m
-3295 3691 l
-3295 3692 l
-3123 3692 l
-3123 3692 m
-3292 3692 l
-3292 3693 l
-3123 3693 l
-3123 3693 m
-3290 3693 l
-3290 3694 l
-3123 3694 l
-3124 3694 m
-3287 3694 l
-3287 3695 l
-3124 3695 l
-3124 3695 m
-3285 3695 l
-3285 3696 l
-3124 3696 l
-3124 3696 m
-3282 3696 l
-3282 3697 l
-3124 3697 l
-3125 3697 m
-3280 3697 l
-3280 3698 l
-3125 3698 l
-3125 3698 m
-3277 3698 l
-3277 3699 l
-3125 3699 l
-3126 3699 m
-3275 3699 l
-3275 3700 l
-3126 3700 l
-3126 3700 m
-3272 3700 l
-3272 3701 l
-3126 3701 l
-3126 3701 m
-3270 3701 l
-3270 3702 l
-3126 3702 l
-3127 3702 m
-3267 3702 l
-3267 3703 l
-3127 3703 l
-3127 3703 m
-3265 3703 l
-3265 3704 l
-3127 3704 l
-3128 3704 m
-3262 3704 l
-3262 3705 l
-3128 3705 l
-3128 3705 m
-3259 3705 l
-3259 3706 l
-3128 3706 l
-3128 3706 m
-3257 3706 l
-3257 3707 l
-3128 3707 l
-3129 3707 m
-3254 3707 l
-3254 3708 l
-3129 3708 l
-3129 3708 m
-3252 3708 l
-3252 3709 l
-3129 3709 l
-3130 3709 m
-3249 3709 l
-3249 3710 l
-3130 3710 l
-3130 3710 m
-3247 3710 l
-3247 3711 l
-3130 3711 l
-3130 3711 m
-3244 3711 l
-3244 3712 l
-3130 3712 l
-3131 3712 m
-3242 3712 l
-3242 3713 l
-3131 3713 l
-3131 3713 m
-3239 3713 l
-3239 3714 l
-3131 3714 l
-3131 3714 m
-3237 3714 l
-3237 3715 l
-3131 3715 l
-3132 3715 m
-3234 3715 l
-3234 3716 l
-3132 3716 l
-3132 3716 m
-3232 3716 l
-3232 3717 l
-3132 3717 l
-3133 3717 m
-3229 3717 l
-3229 3718 l
-3133 3718 l
-3133 3718 m
-3227 3718 l
-3227 3719 l
-3133 3719 l
-3133 3719 m
-3224 3719 l
-3224 3720 l
-3133 3720 l
-3134 3720 m
-3222 3720 l
-3222 3721 l
-3134 3721 l
-3134 3721 m
-3219 3721 l
-3219 3722 l
-3134 3722 l
-3135 3722 m
-3217 3722 l
-3217 3723 l
-3135 3723 l
-3135 3723 m
-3214 3723 l
-3214 3724 l
-3135 3724 l
-3135 3724 m
-3212 3724 l
-3212 3725 l
-3135 3725 l
-3136 3725 m
-3209 3725 l
-3209 3726 l
-3136 3726 l
-3136 3726 m
-3207 3726 l
-3207 3727 l
-3136 3727 l
-3137 3727 m
-3204 3727 l
-3204 3728 l
-3137 3728 l
-3137 3728 m
-3202 3728 l
-3202 3729 l
-3137 3729 l
-3137 3729 m
-3199 3729 l
-3199 3730 l
-3137 3730 l
-3138 3730 m
-3197 3730 l
-3197 3731 l
-3138 3731 l
-3138 3731 m
-3194 3731 l
-3194 3732 l
-3138 3732 l
-3138 3732 m
-3192 3732 l
-3192 3733 l
-3138 3733 l
-3139 3733 m
-3189 3733 l
-3189 3734 l
-3139 3734 l
-3139 3734 m
-3187 3734 l
-3187 3735 l
-3139 3735 l
-3140 3735 m
-3184 3735 l
-3184 3736 l
-3140 3736 l
-3140 3736 m
-3182 3736 l
-3182 3737 l
-3140 3737 l
-3140 3737 m
-3179 3737 l
-3179 3738 l
-3140 3738 l
-3141 3738 m
-3177 3738 l
-3177 3739 l
-3141 3739 l
-3141 3739 m
-3174 3739 l
-3174 3740 l
-3141 3740 l
-3142 3740 m
-3172 3740 l
-3172 3741 l
-3142 3741 l
-3142 3741 m
-3169 3741 l
-3169 3742 l
-3142 3742 l
-3142 3742 m
-3167 3742 l
-3167 3743 l
-3142 3743 l
-3143 3743 m
-3164 3743 l
-3164 3744 l
-3143 3744 l
-3143 3744 m
-3162 3744 l
-3162 3745 l
-3143 3745 l
-3144 3745 m
-3159 3745 l
-3159 3746 l
-3144 3746 l
-3144 3746 m
-3157 3746 l
-3157 3747 l
-3144 3747 l
-3144 3747 m
-3154 3747 l
-3154 3748 l
-3144 3748 l
-3145 3748 m
-3152 3748 l
-3152 3749 l
-3145 3749 l
-3145 3749 m
-3149 3749 l
-3149 3750 l
-3145 3750 l
-Y
-3317 3681.9 m
-3272 3569 l
-3102 3637 l
-3146 3750 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3213 3611 m
-3251 3596 l
-3269 3629 l
-3264 3627 l
-3250 3627 l
-3239 3632 l
-3229 3640 l
-3224 3651 l
-3225 3665 l
-3228 3672 l
-3236 3682 l
-3247 3687 l
-3260 3686 l
-3272 3682 l
-3282 3673 l
-3284 3668 l
-3285 3659 l
-S
-3136 3655 m
-3136 3646 l
-3147 3637 l
-3154 3634 l
-3167 3633 l
-3180 3642 l
-3191 3660 l
-3199 3679 l
-3201 3696 l
-3197 3707 l
-3187 3716 l
-3183 3717 l
-3170 3718 l
-3159 3713 l
-3150 3703 l
-3149 3699 l
-3148 3686 l
-3153 3675 l
-3163 3667 l
-3167 3665 l
-3180 3664 l
-3191 3669 l
-3199 3679 l
-S
-1 g
-4344 3144 m
-4348 3144 l
-4348 3145 l
-4344 3145 l
-4341 3145 m
-4348 3145 l
-4348 3146 l
-4341 3146 l
-4339 3146 m
-4349 3146 l
-4349 3147 l
-4339 3147 l
-4336 3147 m
-4349 3147 l
-4349 3148 l
-4336 3148 l
-4334 3148 m
-4350 3148 l
-4350 3149 l
-4334 3149 l
-4331 3149 m
-4350 3149 l
-4350 3150 l
-4331 3150 l
-4329 3150 m
-4350 3150 l
-4350 3151 l
-4329 3151 l
-4326 3151 m
-4351 3151 l
-4351 3152 l
-4326 3152 l
-4324 3152 m
-4351 3152 l
-4351 3153 l
-4324 3153 l
-4321 3153 m
-4352 3153 l
-4352 3154 l
-4321 3154 l
-4319 3154 m
-4352 3154 l
-4352 3155 l
-4319 3155 l
-4316 3155 m
-4352 3155 l
-4352 3156 l
-4316 3156 l
-4314 3156 m
-4353 3156 l
-4353 3157 l
-4314 3157 l
-4311 3157 m
-4353 3157 l
-4353 3158 l
-4311 3158 l
-4308 3158 m
-4354 3158 l
-4354 3159 l
-4308 3159 l
-4306 3159 m
-4354 3159 l
-4354 3160 l
-4306 3160 l
-4303 3160 m
-4354 3160 l
-4354 3161 l
-4303 3161 l
-4301 3161 m
-4355 3161 l
-4355 3162 l
-4301 3162 l
-4298 3162 m
-4355 3162 l
-4355 3163 l
-4298 3163 l
-4296 3163 m
-4356 3163 l
-4356 3164 l
-4296 3164 l
-4293 3164 m
-4356 3164 l
-4356 3165 l
-4293 3165 l
-4291 3165 m
-4356 3165 l
-4356 3166 l
-4291 3166 l
-4288 3166 m
-4357 3166 l
-4357 3167 l
-4288 3167 l
-4286 3167 m
-4357 3167 l
-4357 3168 l
-4286 3168 l
-4283 3168 m
-4358 3168 l
-4358 3169 l
-4283 3169 l
-4281 3169 m
-4358 3169 l
-4358 3170 l
-4281 3170 l
-4278 3170 m
-4358 3170 l
-4358 3171 l
-4278 3171 l
-4275 3171 m
-4359 3171 l
-4359 3172 l
-4275 3172 l
-4273 3172 m
-4359 3172 l
-4359 3173 l
-4273 3173 l
-4270 3173 m
-4360 3173 l
-4360 3174 l
-4270 3174 l
-4268 3174 m
-4360 3174 l
-4360 3175 l
-4268 3175 l
-4265 3175 m
-4360 3175 l
-4360 3176 l
-4265 3176 l
-4263 3176 m
-4361 3176 l
-4361 3177 l
-4263 3177 l
-4260 3177 m
-4361 3177 l
-4361 3178 l
-4260 3178 l
-4258 3178 m
-4362 3178 l
-4362 3179 l
-4258 3179 l
-4255 3179 m
-4362 3179 l
-4362 3180 l
-4255 3180 l
-4253 3180 m
-4362 3180 l
-4362 3181 l
-4253 3181 l
-4250 3181 m
-4363 3181 l
-4363 3182 l
-4250 3182 l
-4248 3182 m
-4363 3182 l
-4363 3183 l
-4248 3183 l
-4245 3183 m
-4364 3183 l
-4364 3184 l
-4245 3184 l
-4242 3184 m
-4364 3184 l
-4364 3185 l
-4242 3185 l
-4240 3185 m
-4364 3185 l
-4364 3186 l
-4240 3186 l
-4237 3186 m
-4365 3186 l
-4365 3187 l
-4237 3187 l
-4235 3187 m
-4365 3187 l
-4365 3188 l
-4235 3188 l
-4232 3188 m
-4366 3188 l
-4366 3189 l
-4232 3189 l
-4230 3189 m
-4366 3189 l
-4366 3190 l
-4230 3190 l
-4227 3190 m
-4366 3190 l
-4366 3191 l
-4227 3191 l
-4225 3191 m
-4367 3191 l
-4367 3192 l
-4225 3192 l
-4222 3192 m
-4367 3192 l
-4367 3193 l
-4222 3193 l
-4220 3193 m
-4368 3193 l
-4368 3194 l
-4220 3194 l
-4217 3194 m
-4368 3194 l
-4368 3195 l
-4217 3195 l
-4215 3195 m
-4368 3195 l
-4368 3196 l
-4215 3196 l
-4212 3196 m
-4369 3196 l
-4369 3197 l
-4212 3197 l
-4209 3197 m
-4369 3197 l
-4369 3198 l
-4209 3198 l
-4207 3198 m
-4370 3198 l
-4370 3199 l
-4207 3199 l
-4204 3199 m
-4370 3199 l
-4370 3200 l
-4204 3200 l
-4202 3200 m
-4370 3200 l
-4370 3201 l
-4202 3201 l
-4199 3201 m
-4371 3201 l
-4371 3202 l
-4199 3202 l
-4197 3202 m
-4371 3202 l
-4371 3203 l
-4197 3203 l
-4194 3203 m
-4372 3203 l
-4372 3204 l
-4194 3204 l
-4192 3204 m
-4372 3204 l
-4372 3205 l
-4192 3205 l
-4189 3205 m
-4372 3205 l
-4372 3206 l
-4189 3206 l
-4187 3206 m
-4373 3206 l
-4373 3207 l
-4187 3207 l
-4184 3207 m
-4373 3207 l
-4373 3208 l
-4184 3208 l
-4182 3208 m
-4374 3208 l
-4374 3209 l
-4182 3209 l
-4179 3209 m
-4374 3209 l
-4374 3210 l
-4179 3210 l
-4177 3210 m
-4374 3210 l
-4374 3211 l
-4177 3211 l
-4177 3211 m
-4375 3211 l
-4375 3213 l
-4177 3213 l
-4177 3213 m
-4376 3213 l
-4376 3214 l
-4177 3214 l
-4178 3214 m
-4376 3214 l
-4376 3216 l
-4178 3216 l
-4178 3216 m
-4377 3216 l
-4377 3217 l
-4178 3217 l
-4179 3217 m
-4377 3217 l
-4377 3218 l
-4179 3218 l
-4179 3218 m
-4378 3218 l
-4378 3219 l
-4179 3219 l
-4180 3219 m
-4378 3219 l
-4378 3221 l
-4180 3221 l
-4180 3221 m
-4379 3221 l
-4379 3222 l
-4180 3222 l
-4181 3222 m
-4379 3222 l
-4379 3223 l
-4181 3223 l
-4181 3223 m
-4380 3223 l
-4380 3224 l
-4181 3224 l
-4182 3224 m
-4380 3224 l
-4380 3226 l
-4182 3226 l
-4182 3226 m
-4381 3226 l
-4381 3227 l
-4182 3227 l
-4183 3227 m
-4381 3227 l
-4381 3228 l
-4183 3228 l
-4183 3228 m
-4382 3228 l
-4382 3229 l
-4183 3229 l
-4184 3229 m
-4382 3229 l
-4382 3231 l
-4184 3231 l
-4184 3231 m
-4383 3231 l
-4383 3232 l
-4184 3232 l
-4185 3232 m
-4383 3232 l
-4383 3233 l
-4185 3233 l
-4185 3233 m
-4384 3233 l
-4384 3235 l
-4185 3235 l
-4186 3235 m
-4384 3235 l
-4384 3236 l
-4186 3236 l
-4186 3236 m
-4385 3236 l
-4385 3237 l
-4186 3237 l
-4187 3237 m
-4385 3237 l
-4385 3238 l
-4187 3238 l
-4187 3238 m
-4386 3238 l
-4386 3240 l
-4187 3240 l
-4188 3240 m
-4386 3240 l
-4386 3241 l
-4188 3241 l
-4188 3241 m
-4387 3241 l
-4387 3242 l
-4188 3242 l
-4189 3242 m
-4387 3242 l
-4387 3243 l
-4189 3243 l
-4189 3243 m
-4388 3243 l
-4388 3245 l
-4189 3245 l
-4190 3245 m
-4388 3245 l
-4388 3246 l
-4190 3246 l
-4190 3246 m
-4389 3246 l
-4389 3247 l
-4190 3247 l
-4191 3247 m
-4389 3247 l
-4389 3248 l
-4191 3248 l
-4191 3248 m
-4390 3248 l
-4390 3250 l
-4191 3250 l
-4192 3250 m
-4390 3250 l
-4390 3251 l
-4192 3251 l
-4192 3251 m
-4391 3251 l
-4391 3253 l
-4192 3253 l
-4193 3253 m
-4392 3253 l
-4392 3255 l
-4193 3255 l
-4194 3255 m
-4392 3255 l
-4392 3256 l
-4194 3256 l
-4194 3256 m
-4392 3256 l
-4392 3257 l
-4194 3257 l
-4194 3257 m
-4390 3257 l
-4390 3258 l
-4194 3258 l
-4195 3258 m
-4388 3258 l
-4388 3259 l
-4195 3259 l
-4195 3259 m
-4385 3259 l
-4385 3260 l
-4195 3260 l
-4196 3260 m
-4383 3260 l
-4383 3261 l
-4196 3261 l
-4196 3261 m
-4380 3261 l
-4380 3262 l
-4196 3262 l
-4196 3262 m
-4378 3262 l
-4378 3263 l
-4196 3263 l
-4197 3263 m
-4375 3263 l
-4375 3264 l
-4197 3264 l
-4197 3264 m
-4373 3264 l
-4373 3265 l
-4197 3265 l
-4198 3265 m
-4370 3265 l
-4370 3266 l
-4198 3266 l
-4198 3266 m
-4368 3266 l
-4368 3267 l
-4198 3267 l
-4198 3267 m
-4365 3267 l
-4365 3268 l
-4198 3268 l
-4199 3268 m
-4363 3268 l
-4363 3269 l
-4199 3269 l
-4199 3269 m
-4360 3269 l
-4360 3270 l
-4199 3270 l
-4199 3270 m
-4357 3270 l
-4357 3271 l
-4199 3271 l
-4200 3271 m
-4355 3271 l
-4355 3272 l
-4200 3272 l
-4200 3272 m
-4352 3272 l
-4352 3273 l
-4200 3273 l
-4201 3273 m
-4350 3273 l
-4350 3274 l
-4201 3274 l
-4201 3274 m
-4347 3274 l
-4347 3275 l
-4201 3275 l
-4201 3275 m
-4345 3275 l
-4345 3276 l
-4201 3276 l
-4202 3276 m
-4342 3276 l
-4342 3277 l
-4202 3277 l
-4202 3277 m
-4340 3277 l
-4340 3278 l
-4202 3278 l
-4203 3278 m
-4337 3278 l
-4337 3279 l
-4203 3279 l
-4203 3279 m
-4335 3279 l
-4335 3280 l
-4203 3280 l
-4203 3280 m
-4332 3280 l
-4332 3281 l
-4203 3281 l
-4204 3281 m
-4330 3281 l
-4330 3282 l
-4204 3282 l
-4204 3282 m
-4327 3282 l
-4327 3283 l
-4204 3283 l
-4205 3283 m
-4325 3283 l
-4325 3284 l
-4205 3284 l
-4205 3284 m
-4322 3284 l
-4322 3285 l
-4205 3285 l
-4205 3285 m
-4320 3285 l
-4320 3286 l
-4205 3286 l
-4206 3286 m
-4317 3286 l
-4317 3287 l
-4206 3287 l
-4206 3287 m
-4315 3287 l
-4315 3288 l
-4206 3288 l
-4206 3288 m
-4312 3288 l
-4312 3289 l
-4206 3289 l
-4207 3289 m
-4310 3289 l
-4310 3290 l
-4207 3290 l
-4207 3290 m
-4307 3290 l
-4307 3291 l
-4207 3291 l
-4208 3291 m
-4305 3291 l
-4305 3292 l
-4208 3292 l
-4208 3292 m
-4302 3292 l
-4302 3293 l
-4208 3293 l
-4208 3293 m
-4300 3293 l
-4300 3294 l
-4208 3294 l
-4209 3294 m
-4297 3294 l
-4297 3295 l
-4209 3295 l
-4209 3295 m
-4295 3295 l
-4295 3296 l
-4209 3296 l
-4210 3296 m
-4292 3296 l
-4292 3297 l
-4210 3297 l
-4210 3297 m
-4289 3297 l
-4289 3298 l
-4210 3298 l
-4210 3298 m
-4287 3298 l
-4287 3299 l
-4210 3299 l
-4211 3299 m
-4284 3299 l
-4284 3300 l
-4211 3300 l
-4211 3300 m
-4282 3300 l
-4282 3301 l
-4211 3301 l
-4212 3301 m
-4279 3301 l
-4279 3302 l
-4212 3302 l
-4212 3302 m
-4277 3302 l
-4277 3303 l
-4212 3303 l
-4212 3303 m
-4274 3303 l
-4274 3304 l
-4212 3304 l
-4213 3304 m
-4272 3304 l
-4272 3305 l
-4213 3305 l
-4213 3305 m
-4269 3305 l
-4269 3306 l
-4213 3306 l
-4213 3306 m
-4267 3306 l
-4267 3307 l
-4213 3307 l
-4214 3307 m
-4264 3307 l
-4264 3308 l
-4214 3308 l
-4214 3308 m
-4262 3308 l
-4262 3309 l
-4214 3309 l
-4215 3309 m
-4259 3309 l
-4259 3310 l
-4215 3310 l
-4215 3310 m
-4257 3310 l
-4257 3311 l
-4215 3311 l
-4215 3311 m
-4254 3311 l
-4254 3312 l
-4215 3312 l
-4216 3312 m
-4252 3312 l
-4252 3313 l
-4216 3313 l
-4216 3313 m
-4249 3313 l
-4249 3314 l
-4216 3314 l
-4217 3314 m
-4247 3314 l
-4247 3315 l
-4217 3315 l
-4217 3315 m
-4244 3315 l
-4244 3316 l
-4217 3316 l
-4217 3316 m
-4242 3316 l
-4242 3317 l
-4217 3317 l
-4218 3317 m
-4239 3317 l
-4239 3318 l
-4218 3318 l
-4218 3318 m
-4237 3318 l
-4237 3319 l
-4218 3319 l
-4219 3319 m
-4234 3319 l
-4234 3320 l
-4219 3320 l
-4219 3320 m
-4232 3320 l
-4232 3321 l
-4219 3321 l
-4219 3321 m
-4229 3321 l
-4229 3322 l
-4219 3322 l
-4220 3322 m
-4227 3322 l
-4227 3323 l
-4220 3323 l
-4220 3323 m
-4224 3323 l
-4224 3324 l
-4220 3324 l
-Y
-4392 3256.1 m
-4347 3144 l
-4177 3211 l
-4221 3324 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4288 3185 m
-4326 3170 l
-4344 3203 l
-4339 3201 l
-4325 3202 l
-4314 3206 l
-4304 3215 l
-4299 3226 l
-4300 3239 l
-4303 3247 l
-4311 3257 l
-4322 3261 l
-4335 3261 l
-4347 3256 l
-4357 3247 l
-4359 3242 l
-4360 3233 l
-S
-4260 3218 m
-4259 3215 l
-4252 3208 l
-4246 3206 l
-4237 3205 l
-4221 3211 l
-4215 3218 l
-4213 3224 l
-4212 3233 l
-4215 3241 l
-4222 3247 l
-4235 3256 l
-4289 3279 l
-4234 3301 l
-S
-1 g
-4877 2933 m
-4878 2933 l
-4878 2934 l
-4877 2934 l
-4874 2934 m
-4878 2934 l
-4878 2935 l
-4874 2935 l
-4872 2935 m
-4878 2935 l
-4878 2936 l
-4872 2936 l
-4869 2936 m
-4878 2936 l
-4878 2937 l
-4869 2937 l
-4867 2937 m
-4878 2937 l
-4878 2938 l
-4867 2938 l
-4864 2938 m
-4878 2938 l
-4878 2939 l
-4864 2939 l
-4862 2939 m
-4878 2939 l
-4878 2940 l
-4862 2940 l
-4859 2940 m
-4878 2940 l
-4878 2941 l
-4859 2941 l
-4856 2941 m
-4878 2941 l
-4878 2942 l
-4856 2942 l
-4854 2942 m
-4878 2942 l
-4878 2943 l
-4854 2943 l
-4851 2943 m
-4878 2943 l
-4878 2944 l
-4851 2944 l
-4849 2944 m
-4878 2944 l
-4878 2945 l
-4849 2945 l
-4846 2945 m
-4878 2945 l
-4878 2946 l
-4846 2946 l
-4844 2946 m
-4878 2946 l
-4878 2947 l
-4844 2947 l
-4841 2947 m
-4878 2947 l
-4878 2948 l
-4841 2948 l
-4839 2948 m
-4878 2948 l
-4878 2949 l
-4839 2949 l
-4836 2949 m
-4878 2949 l
-4878 2950 l
-4836 2950 l
-4833 2950 m
-4878 2950 l
-4878 2951 l
-4833 2951 l
-4831 2951 m
-4878 2951 l
-4878 2952 l
-4831 2952 l
-4828 2952 m
-4878 2952 l
-4878 2953 l
-4828 2953 l
-4826 2953 m
-4878 2953 l
-4878 2954 l
-4826 2954 l
-4823 2954 m
-4878 2954 l
-4878 2955 l
-4823 2955 l
-4821 2955 m
-4878 2955 l
-4878 2956 l
-4821 2956 l
-4818 2956 m
-4878 2956 l
-4878 2957 l
-4818 2957 l
-4816 2957 m
-4878 2957 l
-4878 2958 l
-4816 2958 l
-4813 2958 m
-4878 2958 l
-4878 2959 l
-4813 2959 l
-4810 2959 m
-4878 2959 l
-4878 2960 l
-4810 2960 l
-4808 2960 m
-4878 2960 l
-4878 2961 l
-4808 2961 l
-4805 2961 m
-4878 2961 l
-4878 2962 l
-4805 2962 l
-4803 2962 m
-4878 2962 l
-4878 2963 l
-4803 2963 l
-4800 2963 m
-4878 2963 l
-4878 2964 l
-4800 2964 l
-4798 2964 m
-4878 2964 l
-4878 2965 l
-4798 2965 l
-4795 2965 m
-4878 2965 l
-4878 2966 l
-4795 2966 l
-4793 2966 m
-4878 2966 l
-4878 2967 l
-4793 2967 l
-4790 2967 m
-4878 2967 l
-4878 2968 l
-4790 2968 l
-4788 2968 m
-4878 2968 l
-4878 2969 l
-4788 2969 l
-4785 2969 m
-4878 2969 l
-4878 2970 l
-4785 2970 l
-4782 2970 m
-4878 2970 l
-4878 2971 l
-4782 2971 l
-4780 2971 m
-4878 2971 l
-4878 2972 l
-4780 2972 l
-4777 2972 m
-4878 2972 l
-4878 2973 l
-4777 2973 l
-4775 2973 m
-4878 2973 l
-4878 2974 l
-4775 2974 l
-4772 2974 m
-4878 2974 l
-4878 2975 l
-4772 2975 l
-4770 2975 m
-4878 2975 l
-4878 2976 l
-4770 2976 l
-4767 2976 m
-4878 2976 l
-4878 2977 l
-4767 2977 l
-4765 2977 m
-4878 2977 l
-4878 2978 l
-4765 2978 l
-4762 2978 m
-4878 2978 l
-4878 2979 l
-4762 2979 l
-4759 2979 m
-4878 2979 l
-4878 2980 l
-4759 2980 l
-4757 2980 m
-4878 2980 l
-4878 2981 l
-4757 2981 l
-4754 2981 m
-4878 2981 l
-4878 2982 l
-4754 2982 l
-4752 2982 m
-4878 2982 l
-4878 2983 l
-4752 2983 l
-4749 2983 m
-4878 2983 l
-4878 2984 l
-4749 2984 l
-4747 2984 m
-4878 2984 l
-4878 2985 l
-4747 2985 l
-4744 2985 m
-4878 2985 l
-4878 2986 l
-4744 2986 l
-4742 2986 m
-4878 2986 l
-4878 2987 l
-4742 2987 l
-4739 2987 m
-4878 2987 l
-4878 2988 l
-4739 2988 l
-4736 2988 m
-4878 2988 l
-4878 2989 l
-4736 2989 l
-4734 2989 m
-4878 2989 l
-4878 2990 l
-4734 2990 l
-4731 2990 m
-4878 2990 l
-4878 2991 l
-4731 2991 l
-4729 2991 m
-4878 2991 l
-4878 2992 l
-4729 2992 l
-4726 2992 m
-4878 2992 l
-4878 2993 l
-4726 2993 l
-4724 2993 m
-4878 2993 l
-4878 2994 l
-4724 2994 l
-4721 2994 m
-4878 2994 l
-4878 2995 l
-4721 2995 l
-4719 2995 m
-4878 2995 l
-4878 2996 l
-4719 2996 l
-4716 2996 m
-4878 2996 l
-4878 2997 l
-4716 2997 l
-4714 2997 m
-4878 2997 l
-4878 2998 l
-4714 2998 l
-4714 2998 m
-4878 2998 l
-4878 2999 l
-4714 2999 l
-4714 2999 m
-4878 2999 l
-4878 3001 l
-4714 3001 l
-4715 3001 m
-4878 3001 l
-4878 3004 l
-4715 3004 l
-4716 3004 m
-4878 3004 l
-4878 3006 l
-4716 3006 l
-4717 3006 m
-4878 3006 l
-4878 3009 l
-4717 3009 l
-4718 3009 m
-4878 3009 l
-4878 3011 l
-4718 3011 l
-4719 3011 m
-4878 3011 l
-4878 3014 l
-4719 3014 l
-4720 3014 m
-4878 3014 l
-4878 3016 l
-4720 3016 l
-4721 3016 m
-4878 3016 l
-4878 3019 l
-4721 3019 l
-4722 3019 m
-4878 3019 l
-4878 3021 l
-4722 3021 l
-4723 3021 m
-4878 3021 l
-4878 3024 l
-4723 3024 l
-4724 3024 m
-4878 3024 l
-4878 3026 l
-4724 3026 l
-4725 3026 m
-4878 3026 l
-4878 3029 l
-4725 3029 l
-4726 3029 m
-4878 3029 l
-4878 3031 l
-4726 3031 l
-4727 3031 m
-4878 3031 l
-4878 3034 l
-4727 3034 l
-4728 3034 m
-4878 3034 l
-4878 3036 l
-4728 3036 l
-4729 3036 m
-4878 3036 l
-4878 3039 l
-4729 3039 l
-4730 3039 m
-4878 3039 l
-4878 3041 l
-4730 3041 l
-4731 3041 m
-4878 3041 l
-4878 3043 l
-4731 3043 l
-4731 3043 m
-4878 3043 l
-4878 3044 l
-4731 3044 l
-4732 3044 m
-4878 3044 l
-4878 3045 l
-4732 3045 l
-4732 3045 m
-4878 3045 l
-4878 3046 l
-4732 3046 l
-4733 3046 m
-4878 3046 l
-4878 3047 l
-4733 3047 l
-4733 3047 m
-4878 3047 l
-4878 3048 l
-4733 3048 l
-4733 3048 m
-4878 3048 l
-4878 3049 l
-4733 3049 l
-4734 3049 m
-4878 3049 l
-4878 3050 l
-4734 3050 l
-4734 3050 m
-4878 3050 l
-4878 3051 l
-4734 3051 l
-4735 3051 m
-4878 3051 l
-4878 3052 l
-4735 3052 l
-4735 3052 m
-4878 3052 l
-4878 3053 l
-4735 3053 l
-4735 3053 m
-4878 3053 l
-4878 3054 l
-4735 3054 l
-4736 3054 m
-4878 3054 l
-4878 3055 l
-4736 3055 l
-4736 3055 m
-4878 3055 l
-4878 3056 l
-4736 3056 l
-4737 3056 m
-4878 3056 l
-4878 3057 l
-4737 3057 l
-4737 3057 m
-4878 3057 l
-4878 3058 l
-4737 3058 l
-4737 3058 m
-4878 3058 l
-4878 3059 l
-4737 3059 l
-4738 3059 m
-4878 3059 l
-4878 3060 l
-4738 3060 l
-4738 3060 m
-4878 3060 l
-4878 3061 l
-4738 3061 l
-4739 3061 m
-4878 3061 l
-4878 3062 l
-4739 3062 l
-4739 3062 m
-4878 3062 l
-4878 3063 l
-4739 3063 l
-4739 3063 m
-4878 3063 l
-4878 3064 l
-4739 3064 l
-4740 3064 m
-4878 3064 l
-4878 3065 l
-4740 3065 l
-4740 3065 m
-4875 3065 l
-4875 3066 l
-4740 3066 l
-4741 3066 m
-4873 3066 l
-4873 3067 l
-4741 3067 l
-4741 3067 m
-4870 3067 l
-4870 3068 l
-4741 3068 l
-4741 3068 m
-4868 3068 l
-4868 3069 l
-4741 3069 l
-4742 3069 m
-4865 3069 l
-4865 3070 l
-4742 3070 l
-4742 3070 m
-4863 3070 l
-4863 3071 l
-4742 3071 l
-4743 3071 m
-4860 3071 l
-4860 3072 l
-4743 3072 l
-4743 3072 m
-4858 3072 l
-4858 3073 l
-4743 3073 l
-4743 3073 m
-4855 3073 l
-4855 3074 l
-4743 3074 l
-4744 3074 m
-4853 3074 l
-4853 3075 l
-4744 3075 l
-4744 3075 m
-4850 3075 l
-4850 3076 l
-4744 3076 l
-4745 3076 m
-4848 3076 l
-4848 3077 l
-4745 3077 l
-4745 3077 m
-4845 3077 l
-4845 3078 l
-4745 3078 l
-4745 3078 m
-4842 3078 l
-4842 3079 l
-4745 3079 l
-4746 3079 m
-4840 3079 l
-4840 3080 l
-4746 3080 l
-4746 3080 m
-4837 3080 l
-4837 3081 l
-4746 3081 l
-4747 3081 m
-4835 3081 l
-4835 3082 l
-4747 3082 l
-4747 3082 m
-4832 3082 l
-4832 3083 l
-4747 3083 l
-4747 3083 m
-4830 3083 l
-4830 3084 l
-4747 3084 l
-4748 3084 m
-4827 3084 l
-4827 3085 l
-4748 3085 l
-4748 3085 m
-4825 3085 l
-4825 3086 l
-4748 3086 l
-4749 3086 m
-4822 3086 l
-4822 3087 l
-4749 3087 l
-4749 3087 m
-4820 3087 l
-4820 3088 l
-4749 3088 l
-4749 3088 m
-4817 3088 l
-4817 3089 l
-4749 3089 l
-4750 3089 m
-4815 3089 l
-4815 3090 l
-4750 3090 l
-4750 3090 m
-4812 3090 l
-4812 3091 l
-4750 3091 l
-4751 3091 m
-4810 3091 l
-4810 3092 l
-4751 3092 l
-4751 3092 m
-4807 3092 l
-4807 3093 l
-4751 3093 l
-4751 3093 m
-4805 3093 l
-4805 3094 l
-4751 3094 l
-4752 3094 m
-4802 3094 l
-4802 3095 l
-4752 3095 l
-4752 3095 m
-4800 3095 l
-4800 3096 l
-4752 3096 l
-4753 3096 m
-4797 3096 l
-4797 3097 l
-4753 3097 l
-4753 3097 m
-4795 3097 l
-4795 3098 l
-4753 3098 l
-4753 3098 m
-4792 3098 l
-4792 3099 l
-4753 3099 l
-4754 3099 m
-4790 3099 l
-4790 3100 l
-4754 3100 l
-4754 3100 m
-4787 3100 l
-4787 3101 l
-4754 3101 l
-4755 3101 m
-4785 3101 l
-4785 3102 l
-4755 3102 l
-4755 3102 m
-4782 3102 l
-4782 3103 l
-4755 3103 l
-4755 3103 m
-4780 3103 l
-4780 3104 l
-4755 3104 l
-4756 3104 m
-4777 3104 l
-4777 3105 l
-4756 3105 l
-4756 3105 m
-4775 3105 l
-4775 3106 l
-4756 3106 l
-4757 3106 m
-4772 3106 l
-4772 3107 l
-4757 3107 l
-4757 3107 m
-4770 3107 l
-4770 3108 l
-4757 3108 l
-4757 3108 m
-4767 3108 l
-4767 3109 l
-4757 3109 l
-4758 3109 m
-4765 3109 l
-4765 3110 l
-4758 3110 l
-4758 3110 m
-4762 3110 l
-4762 3111 l
-4758 3111 l
-Y
-4929.5 3043.2 m
-4885 2931 l
-4714 2998 l
-4759 3111 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-4825 2972 m
-4864 2957 l
-4882 2990 l
-4876 2988 l
-4863 2989 l
-4851 2993 l
-4841 3002 l
-4836 3013 l
-4837 3026 l
-4840 3034 l
-4849 3044 l
-4860 3048 l
-4873 3048 l
-4884 3043 l
-4895 3035 l
-4897 3029 l
-4898 3020 l
-S
-4771 2994 m
-4784 2993 l
-4796 3002 l
-4808 3020 l
-4812 3031 l
-4816 3052 l
-4813 3067 l
-4803 3075 l
-4795 3078 l
-4782 3079 l
-4770 3071 l
-4758 3053 l
-4753 3041 l
-4750 3020 l
-4753 3005 l
-4763 2997 l
-4771 2994 l
-S
-1 g
-Y
-362 3391.6 m
-207 3392 l
-207 4507 l
-362 4507 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-228 3413 m
-316 3413 l
-S
-228 3413 m
-228 3467 l
-S
-270 3413 m
-270 3446 l
-S
-228 3488 m
-316 3488 l
-S
-228 3546 m
-287 3488 l
-S
-266 3509 m
-316 3546 l
-S
-228 3621 m
-228 3580 l
-266 3575 l
-262 3580 l
-258 3592 l
-258 3605 l
-262 3617 l
-270 3626 l
-283 3630 l
-291 3630 l
-303 3626 l
-312 3617 l
-316 3605 l
-316 3592 l
-312 3580 l
-308 3575 l
-299 3571 l
-S
-258 3726 m
-345 3726 l
-S
-270 3726 m
-262 3734 l
-258 3742 l
-258 3755 l
-262 3763 l
-270 3772 l
-283 3776 l
-291 3776 l
-303 3772 l
-312 3763 l
-316 3755 l
-316 3742 l
-312 3734 l
-303 3726 l
-S
-258 3822 m
-262 3813 l
-270 3805 l
-283 3801 l
-291 3801 l
-303 3805 l
-312 3813 l
-316 3822 l
-316 3834 l
-312 3843 l
-303 3851 l
-291 3855 l
-283 3855 l
-270 3851 l
-262 3843 l
-258 3834 l
-258 3822 l
-S
-228 3884 m
-316 3884 l
-S
-258 3964 m
-316 3964 l
-S
-270 3964 m
-262 3955 l
-258 3947 l
-258 3935 l
-262 3926 l
-270 3918 l
-283 3914 l
-291 3914 l
-303 3918 l
-312 3926 l
-316 3935 l
-316 3947 l
-312 3955 l
-303 3964 l
-S
-258 3997 m
-316 3997 l
-S
-283 3997 m
-270 4001 l
-262 4010 l
-258 4018 l
-258 4031 l
-S
-258 4118 m
-316 4118 l
-S
-283 4118 m
-270 4123 l
-262 4131 l
-258 4139 l
-258 4152 l
-S
-283 4169 m
-283 4219 l
-274 4219 l
-266 4214 l
-262 4210 l
-258 4202 l
-258 4189 l
-262 4181 l
-270 4173 l
-283 4169 l
-291 4169 l
-303 4173 l
-312 4181 l
-316 4189 l
-316 4202 l
-312 4210 l
-303 4219 l
-S
-258 4294 m
-324 4294 l
-337 4290 l
-341 4285 l
-345 4277 l
-345 4265 l
-341 4256 l
-S
-270 4294 m
-262 4285 l
-258 4277 l
-258 4265 l
-262 4256 l
-270 4248 l
-283 4244 l
-291 4244 l
-303 4248 l
-312 4256 l
-316 4265 l
-316 4277 l
-312 4285 l
-303 4294 l
-S
-228 4323 m
-232 4327 l
-228 4331 l
-224 4327 l
-228 4323 l
-S
-258 4327 m
-316 4327 l
-S
-258 4377 m
-262 4369 l
-270 4361 l
-283 4356 l
-291 4356 l
-303 4361 l
-312 4369 l
-316 4377 l
-316 4390 l
-312 4398 l
-303 4407 l
-291 4411 l
-283 4411 l
-270 4407 l
-262 4398 l
-258 4390 l
-258 4377 l
-S
-258 4440 m
-316 4440 l
-S
-274 4440 m
-262 4453 l
-258 4461 l
-258 4473 l
-262 4482 l
-274 4486 l
-316 4486 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsalign.eps b/ast-5.3-1/sun211_figures/fsalign.eps
deleted file mode 100644
index 197f293..0000000
--- a/ast-5.3-1/sun211_figures/fsalign.eps
+++ /dev/null
@@ -1,5444 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 36 91 566 744
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 16:33:47
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5654.15 3802.55 m
-5654.15 4022.15 5475.35 4200.95 5255.75 4200.95 c
-2070.95 4200.95 l
-1851.35 4200.95 1672.55 4022.15 1672.55 3802.55 c
-1672.55 1598.15 l
-1672.55 1378.55 1851.35 1199.75 2070.95 1199.75 c
-5255.75 1199.75 l
-5475.35 1199.75 5654.15 1378.55 5654.15 1598.15 c
-f*
-1 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5589.35 3857.75 m
-5589.35 4077.35 5411.75 4254.95 5192.15 4254.95 c
-2015.75 4254.95 l
-1796.15 4254.95 1618.55 4077.35 1618.55 3857.75 c
-1618.55 1661.75 l
-1618.55 1442.15 1796.15 1264.55 2015.75 1264.55 c
-5192.15 1264.55 l
-5411.75 1264.55 5589.35 1442.15 5589.35 1661.75 c
-h
-S
-0.564706 g
-4634.15 7005.35 m
-4634.15 7212.95 4466.15 7380.95 4258.55 7380.95 c
-1157.75 7380.95 l
-950.15 7380.95 782.15 7212.95 782.15 7005.35 c
-782.15 4755.35 l
-782.15 4547.75 950.15 4379.75 1157.75 4379.75 c
-4258.55 4379.75 l
-4466.15 4379.75 4634.15 4547.75 4634.15 4755.35 c
-f*
-1 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-f*
-0 g
-4569.35 7061.75 m
-4569.35 7268.15 4402.55 7434.95 4196.15 7434.95 c
-1101.35 7434.95 l
-894.95 7434.95 728.15 7268.15 728.15 7061.75 c
-728.15 4817.75 l
-728.15 4611.35 894.95 4444.55 1101.35 4444.55 c
-4196.15 4444.55 l
-4402.55 4444.55 4569.35 4611.35 4569.35 4817.75 c
-h
-S
-0.564706 g
-1962.95 7095.35 m
-1962.95 7205.75 1871.75 7296.95 1760.15 7296.95 c
-1263.35 7296.95 l
-1151.75 7296.95 1060.55 7205.75 1060.55 7095.35 c
-1060.55 6957.35 l
-1060.55 6846.95 1151.75 6755.75 1263.35 6755.75 c
-1760.15 6755.75 l
-1871.75 6755.75 1962.95 6846.95 1962.95 6957.35 c
-f*
-1 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-f*
-0 g
-1898.15 7152.95 m
-1898.15 7262.15 1809.35 7350.95 1697.75 7350.95 c
-1206.95 7350.95 l
-1096.55 7350.95 1006.55 7262.15 1006.55 7152.95 c
-1006.55 7018.55 l
-1006.55 6909.35 1095.35 6820.55 1206.95 6820.55 c
-1697.75 6820.55 l
-1809.35 6820.55 1898.15 6909.35 1898.15 7018.55 c
-h
-S
-0.201248 i
-1239.33 7192 m
-1125.22 7192 l
-1125.22 7187 l
-1139.11 7186.2 1143 7183.18 1143 7172.72 c
-1143 7075.32 l
-1143 7064.85 1140.17 7062.64 1125.22 7061.03 c
-1125.22 7056 l
-1197.67 7056 l
-1197.67 7061 l
-1179.15 7061.81 1176 7064.23 1176 7075.32 c
-1176 7122.21 l
-1196.22 7121.81 1203.55 7114.36 1206.32 7091.02 c
-1211.35 7091.02 l
-1211.35 7159.04 l
-1206.32 7159.04 l
-1202.76 7136.1 1195.82 7129.05 1176 7129.05 c
-1176 7175.74 l
-1176 7183.19 1178.52 7185 1188.41 7185 c
-1207.13 7185 1218.8 7181.64 1225.04 7174.74 c
-1229.47 7169.71 1231.68 7164.27 1234.5 7151.59 c
-1239.33 7151.59 l
-h
-1244.96 7056 m
-f*
-1289.19 7149 m
-1250.84 7149 l
-1250.84 7143.95 l
-1259.49 7142.74 1262 7140.12 1262 7132.07 c
-1262 7072.9 l
-1262 7064.65 1259.93 7062.44 1250.84 7060.83 c
-1250.84 7056 l
-1304.37 7056 l
-1304.37 7060.83 l
-1292.09 7061.63 1290 7064.25 1290 7076.73 c
-1290 7114.76 l
-1290 7125.23 1295.49 7133.88 1301.95 7133.88 c
-1303.56 7133.88 1305.37 7132.47 1307.59 7129.25 c
-1311.41 7123.82 1314.43 7122.01 1319.66 7122.01 c
-1327.11 7122.01 1332.34 7127.64 1332.34 7135.29 c
-1332.34 7144.55 1325.5 7151.41 1316.04 7151.41 c
-1306.1 7151.41 1298.54 7146.12 1289.19 7132.27 c
-h
-1334.35 7056 m
-f*
-1429.19 7068.88 m
-1427.18 7066.87 l
-1426.57 7066.26 1425.97 7066.06 1424.96 7066.06 c
-1422.15 7066.06 1421 7067.67 1421 7071.09 c
-1421 7123.62 l
-1421 7140.73 1405.6 7151.42 1380.89 7151.42 c
-1358.15 7151.42 1342.85 7141.06 1342.85 7125.83 c
-1342.85 7117.38 1347.69 7112.55 1355.94 7112.55 c
-1363.99 7112.55 1369.62 7117.38 1369.62 7124.22 c
-1369.62 7127.04 1368.61 7129.66 1366 7132.88 c
-1364.19 7134.89 1363.58 7136.1 1363.58 7137.3 c
-1363.58 7141.53 1369.02 7144.42 1376.26 7144.42 c
-1388.14 7144.42 1393.86 7139.08 1393.86 7127.04 c
-1393.86 7112.35 l
-1369.91 7105.1 1360.29 7101.48 1352.51 7096.45 c
-1343.46 7090.41 1339 7083.37 1339 7074.52 c
-1339 7062.24 1348.27 7053.18 1361.17 7053.18 c
-1372.84 7053.18 1382.1 7057.21 1393.17 7067.27 c
-1395.38 7057.01 1399.81 7053.18 1409.67 7053.18 c
-1418.32 7053.18 1424.56 7056.4 1432.21 7064.65 c
-h
-1393 7076.13 m
-1387.55 7069.89 1383.52 7067.47 1378.68 7067.47 c
-1372.64 7067.47 1368 7072.91 1368 7080.96 c
-1368 7092.63 1376.61 7100.88 1393 7105.31 c
-h
-1434.62 7056 m
-f*
-1476.4 7149 m
-1437.7 7149 l
-1437.7 7143.95 l
-1446.55 7142.74 1449 7140.32 1449 7132.07 c
-1449 7072.9 l
-1449 7064.65 1446.74 7062.44 1437.7 7060.83 c
-1437.7 7056 l
-1486 7056 l
-1486 7060.83 l
-1478.95 7061.84 1477 7064.65 1477 7072.3 c
-1477 7126.03 l
-1477 7127.04 1479.87 7130.66 1482.18 7132.88 c
-1486.4 7136.1 1490.02 7138.42 1493.65 7138.42 c
-1501.5 7138.42 1505 7133.59 1505 7121 c
-1505 7072.3 l
-1505 7064.05 1502.68 7061.43 1494.85 7060.83 c
-1494.85 7056 l
-1541.95 7056 l
-1541.95 7060.83 l
-1534.9 7061.64 1533 7064.65 1533 7072.3 c
-1533 7126.03 l
-1533 7127.04 1535.73 7130.46 1537.92 7132.68 c
-1542.35 7136.1 1545.97 7138.42 1549.59 7138.42 c
-1557.24 7138.42 1560 7133.38 1560 7121 c
-1560 7072.3 l
-1560 7063.85 1557.85 7061.43 1550.4 7060.83 c
-1550.4 7056 l
-1598.3 7056 l
-1598.3 7061 l
-1590.45 7061.4 1588 7063.78 1588 7072.3 c
-1588 7122.81 l
-1588 7140.12 1577.43 7151.42 1561.07 7151.42 c
-1549.59 7151.42 1541.95 7146.73 1531.48 7133.68 c
-1525.44 7146.36 1518.4 7151.42 1505.72 7151.42 c
-1492.95 7151.42 1483.98 7145.91 1476.4 7133.68 c
-h
-1601.64 7056 m
-f*
-1679.9 7081.16 m
-1671.65 7071.29 1665.61 7067.18 1656.96 7067.18 c
-1649.31 7067.18 1643.27 7070.77 1639.25 7077.94 c
-1635.43 7084.54 1633.82 7091.56 1633.01 7106 c
-1683.73 7106 l
-1682.52 7122.36 1679.5 7131.43 1673.26 7139.12 c
-1666.82 7146.96 1657.36 7151.42 1646.09 7151.42 c
-1620.94 7151.42 1604.03 7131.4 1604.03 7101.88 c
-1604.03 7072.5 1620.53 7053.18 1645.49 7053.18 c
-1661.79 7053.18 1671.65 7059.42 1684.73 7078.34 c
-h
-1632 7113 m
-1632.61 7136.96 1636.23 7144.42 1646.09 7144.42 c
-1651.93 7144.42 1655.55 7141.38 1657.16 7135.49 c
-1658.17 7131.67 1658.57 7126.03 1658.97 7115.77 c
-1658.97 7113 l
-h
-1688.35 7056 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1732 -7056]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4422.95 6294.95 m
-4422.95 6406.55 4331.75 6497.75 4220.15 6497.75 c
-3723.35 6497.75 l
-3611.75 6497.75 3520.55 6406.55 3520.55 6294.95 c
-3520.55 6158.15 l
-3520.55 6046.55 3611.75 5955.35 3723.35 5955.35 c
-4220.15 5955.35 l
-4331.75 5955.35 4422.95 6046.55 4422.95 6158.15 c
-f*
-1 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-f*
-16 w
-0 g
-4353.35 6351.35 m
-4353.35 6459.35 4264.55 6546.95 4155.35 6546.95 c
-3669.35 6546.95 l
-3560.15 6546.95 3471.35 6459.35 3471.35 6351.35 c
-3471.35 6220.55 l
-3471.35 6112.55 3560.15 6024.95 3669.35 6024.95 c
-4155.35 6024.95 l
-4264.55 6024.95 4353.35 6112.55 4353.35 6220.55 c
-h
-S
-0.201248 i
-3699.33 6393 m
-3585.22 6393 l
-3585.22 6388 l
-3599.11 6387.2 3603 6384.18 3603 6373.72 c
-3603 6276.32 l
-3603 6265.85 3600.17 6263.64 3585.22 6262.03 c
-3585.22 6257 l
-3657.67 6257 l
-3657.67 6262 l
-3639.15 6262.81 3636 6265.23 3636 6276.32 c
-3636 6323.21 l
-3656.22 6322.81 3663.55 6315.36 3666.32 6292.02 c
-3671.35 6292.02 l
-3671.35 6360.04 l
-3666.32 6360.04 l
-3662.76 6337.1 3655.82 6330.05 3636 6330.05 c
-3636 6376.74 l
-3636 6384.19 3638.52 6386 3648.41 6386 c
-3667.13 6386 3678.8 6382.64 3685.04 6375.74 c
-3689.47 6370.71 3691.68 6365.27 3694.5 6352.59 c
-3699.33 6352.59 l
-h
-3704.96 6257 m
-f*
-3749.19 6350 m
-3710.84 6350 l
-3710.84 6344.95 l
-3719.49 6343.74 3722 6341.12 3722 6333.07 c
-3722 6273.9 l
-3722 6265.65 3719.93 6263.44 3710.84 6261.83 c
-3710.84 6257 l
-3764.37 6257 l
-3764.37 6261.83 l
-3752.09 6262.63 3750 6265.25 3750 6277.73 c
-3750 6315.76 l
-3750 6326.23 3755.49 6334.88 3761.95 6334.88 c
-3763.56 6334.88 3765.37 6333.47 3767.59 6330.25 c
-3771.41 6324.82 3774.43 6323.01 3779.66 6323.01 c
-3787.11 6323.01 3792.34 6328.64 3792.34 6336.29 c
-3792.34 6345.55 3785.5 6352.41 3776.04 6352.41 c
-3766.1 6352.41 3758.54 6347.12 3749.19 6333.27 c
-h
-3794.35 6257 m
-f*
-3889.19 6269.88 m
-3887.18 6267.87 l
-3886.57 6267.26 3885.97 6267.06 3884.96 6267.06 c
-3882.15 6267.06 3881 6268.67 3881 6272.09 c
-3881 6324.62 l
-3881 6341.73 3865.6 6352.42 3840.89 6352.42 c
-3818.15 6352.42 3802.85 6342.06 3802.85 6326.83 c
-3802.85 6318.38 3807.69 6313.55 3815.94 6313.55 c
-3823.99 6313.55 3829.62 6318.38 3829.62 6325.22 c
-3829.62 6328.04 3828.61 6330.66 3826 6333.88 c
-3824.19 6335.89 3823.58 6337.1 3823.58 6338.3 c
-3823.58 6342.53 3829.02 6345.42 3836.26 6345.42 c
-3848.14 6345.42 3853.86 6340.08 3853.86 6328.04 c
-3853.86 6313.35 l
-3829.91 6306.1 3820.29 6302.48 3812.51 6297.45 c
-3803.46 6291.41 3799 6284.37 3799 6275.52 c
-3799 6263.24 3808.27 6254.18 3821.17 6254.18 c
-3832.84 6254.18 3842.1 6258.21 3853.17 6268.27 c
-3855.38 6258.01 3859.81 6254.18 3869.67 6254.18 c
-3878.32 6254.18 3884.56 6257.4 3892.21 6265.65 c
-h
-3853 6277.13 m
-3847.55 6270.89 3843.52 6268.47 3838.68 6268.47 c
-3832.64 6268.47 3828 6273.91 3828 6281.96 c
-3828 6293.63 3836.61 6301.88 3853 6306.31 c
-h
-3894.62 6257 m
-f*
-3936.4 6350 m
-3897.7 6350 l
-3897.7 6344.95 l
-3906.55 6343.74 3909 6341.32 3909 6333.07 c
-3909 6273.9 l
-3909 6265.65 3906.74 6263.44 3897.7 6261.83 c
-3897.7 6257 l
-3946 6257 l
-3946 6261.83 l
-3938.95 6262.84 3937 6265.65 3937 6273.3 c
-3937 6327.03 l
-3937 6328.04 3939.87 6331.66 3942.18 6333.88 c
-3946.4 6337.1 3950.02 6339.42 3953.65 6339.42 c
-3961.5 6339.42 3965 6334.59 3965 6322 c
-3965 6273.3 l
-3965 6265.05 3962.68 6262.43 3954.85 6261.83 c
-3954.85 6257 l
-4001.95 6257 l
-4001.95 6261.83 l
-3994.9 6262.64 3993 6265.65 3993 6273.3 c
-3993 6327.03 l
-3993 6328.04 3995.73 6331.46 3997.92 6333.68 c
-4002.35 6337.1 4005.97 6339.42 4009.59 6339.42 c
-4017.24 6339.42 4020 6334.38 4020 6322 c
-4020 6273.3 l
-4020 6264.85 4017.85 6262.43 4010.4 6261.83 c
-4010.4 6257 l
-4058.3 6257 l
-4058.3 6262 l
-4050.45 6262.4 4048 6264.78 4048 6273.3 c
-4048 6323.81 l
-4048 6341.12 4037.43 6352.42 4021.07 6352.42 c
-4009.59 6352.42 4001.95 6347.73 3991.48 6334.68 c
-3985.44 6347.36 3978.4 6352.42 3965.72 6352.42 c
-3952.95 6352.42 3943.98 6346.91 3936.4 6334.68 c
-h
-4061.64 6257 m
-f*
-4139.9 6282.16 m
-4131.65 6272.29 4125.61 6268.18 4116.96 6268.18 c
-4109.31 6268.18 4103.27 6271.77 4099.25 6278.94 c
-4095.43 6285.54 4093.82 6292.56 4093.01 6307 c
-4143.73 6307 l
-4142.52 6323.36 4139.5 6332.43 4133.26 6340.12 c
-4126.82 6347.96 4117.36 6352.42 4106.09 6352.42 c
-4080.94 6352.42 4064.03 6332.4 4064.03 6302.88 c
-4064.03 6273.5 4080.53 6254.18 4105.49 6254.18 c
-4121.79 6254.18 4131.65 6260.42 4144.73 6279.34 c
-h
-4092 6314 m
-4092.61 6337.96 4096.23 6345.42 4106.09 6345.42 c
-4111.93 6345.42 4115.55 6342.38 4117.16 6336.49 c
-4118.17 6332.67 4118.57 6327.03 4118.97 6316.77 c
-4118.97 6314 l
-h
-4148.35 6257 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4184 -6255]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3494.15 5588.15 m
-3494.15 5698.55 3402.95 5789.75 3291.35 5789.75 c
-2795.75 5789.75 l
-2684.15 5789.75 2592.95 5698.55 2592.95 5588.15 c
-2592.95 5450.15 l
-2592.95 5339.75 2684.15 5248.55 2795.75 5248.55 c
-3291.35 5248.55 l
-3402.95 5248.55 3494.15 5339.75 3494.15 5450.15 c
-f*
-1 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-f*
-32 w
-0 g
-3414.95 5642.15 m
-3414.95 5745.35 3328.55 5829.35 3221.75 5829.35 c
-2746.55 5829.35 l
-2639.75 5829.35 2553.35 5745.35 2553.35 5642.15 c
-2553.35 5514.95 l
-2553.35 5411.75 2639.75 5327.75 2746.55 5327.75 c
-3221.75 5327.75 l
-3328.55 5327.75 3414.95 5411.75 3414.95 5514.95 c
-h
-S
-0.201248 i
-2782.33 5685 m
-2668.22 5685 l
-2668.22 5680 l
-2682.11 5679.2 2686 5676.18 2686 5665.72 c
-2686 5568.32 l
-2686 5557.85 2683.17 5555.64 2668.22 5554.03 c
-2668.22 5549 l
-2740.67 5549 l
-2740.67 5554 l
-2722.15 5554.81 2719 5557.23 2719 5568.32 c
-2719 5615.21 l
-2739.22 5614.81 2746.55 5607.36 2749.32 5584.02 c
-2754.35 5584.02 l
-2754.35 5652.04 l
-2749.32 5652.04 l
-2745.76 5629.1 2738.82 5622.05 2719 5622.05 c
-2719 5668.74 l
-2719 5676.19 2721.52 5678 2731.41 5678 c
-2750.13 5678 2761.8 5674.64 2768.04 5667.74 c
-2772.47 5662.71 2774.68 5657.27 2777.5 5644.59 c
-2782.33 5644.59 l
-h
-2787.96 5549 m
-f*
-2831.19 5642 m
-2792.84 5642 l
-2792.84 5636.95 l
-2801.49 5635.74 2804 5633.12 2804 5625.07 c
-2804 5565.9 l
-2804 5557.65 2801.93 5555.44 2792.84 5553.83 c
-2792.84 5549 l
-2846.37 5549 l
-2846.37 5553.83 l
-2834.09 5554.63 2832 5557.25 2832 5569.73 c
-2832 5607.76 l
-2832 5618.23 2837.49 5626.88 2843.95 5626.88 c
-2845.56 5626.88 2847.37 5625.47 2849.59 5622.25 c
-2853.41 5616.82 2856.43 5615.01 2861.66 5615.01 c
-2869.11 5615.01 2874.34 5620.64 2874.34 5628.29 c
-2874.34 5637.55 2867.5 5644.41 2858.04 5644.41 c
-2848.1 5644.41 2840.54 5639.12 2831.19 5625.27 c
-h
-2876.35 5549 m
-f*
-2971.19 5561.88 m
-2969.18 5559.87 l
-2968.57 5559.26 2967.97 5559.06 2966.96 5559.06 c
-2964.15 5559.06 2963 5560.67 2963 5564.09 c
-2963 5616.62 l
-2963 5633.73 2947.6 5644.42 2922.89 5644.42 c
-2900.15 5644.42 2884.85 5634.06 2884.85 5618.83 c
-2884.85 5610.38 2889.69 5605.55 2897.94 5605.55 c
-2905.99 5605.55 2911.62 5610.38 2911.62 5617.22 c
-2911.62 5620.04 2910.61 5622.66 2908 5625.88 c
-2906.19 5627.89 2905.58 5629.1 2905.58 5630.3 c
-2905.58 5634.53 2911.02 5637.42 2918.26 5637.42 c
-2930.14 5637.42 2935.86 5632.08 2935.86 5620.04 c
-2935.86 5605.35 l
-2911.91 5598.1 2902.29 5594.48 2894.51 5589.45 c
-2885.46 5583.41 2881 5576.37 2881 5567.52 c
-2881 5555.24 2890.27 5546.18 2903.17 5546.18 c
-2914.84 5546.18 2924.1 5550.21 2935.17 5560.27 c
-2937.38 5550.01 2941.81 5546.18 2951.67 5546.18 c
-2960.32 5546.18 2966.56 5549.4 2974.21 5557.65 c
-h
-2935 5569.13 m
-2929.55 5562.89 2925.52 5560.47 2920.68 5560.47 c
-2914.64 5560.47 2910 5565.91 2910 5573.96 c
-2910 5585.63 2918.61 5593.88 2935 5598.31 c
-h
-2976.62 5549 m
-f*
-3018.4 5642 m
-2979.7 5642 l
-2979.7 5636.95 l
-2988.55 5635.74 2991 5633.32 2991 5625.07 c
-2991 5565.9 l
-2991 5557.65 2988.74 5555.44 2979.7 5553.83 c
-2979.7 5549 l
-3028 5549 l
-3028 5553.83 l
-3020.95 5554.84 3019 5557.65 3019 5565.3 c
-3019 5619.03 l
-3019 5620.04 3021.87 5623.66 3024.18 5625.88 c
-3028.4 5629.1 3032.02 5631.42 3035.65 5631.42 c
-3043.5 5631.42 3047 5626.59 3047 5614 c
-3047 5565.3 l
-3047 5557.05 3044.68 5554.43 3036.85 5553.83 c
-3036.85 5549 l
-3083.95 5549 l
-3083.95 5553.83 l
-3076.9 5554.64 3075 5557.65 3075 5565.3 c
-3075 5619.03 l
-3075 5620.04 3077.73 5623.46 3079.92 5625.68 c
-3084.35 5629.1 3087.97 5631.42 3091.59 5631.42 c
-3099.24 5631.42 3102 5626.38 3102 5614 c
-3102 5565.3 l
-3102 5556.85 3099.85 5554.43 3092.4 5553.83 c
-3092.4 5549 l
-3140.3 5549 l
-3140.3 5554 l
-3132.45 5554.4 3130 5556.78 3130 5565.3 c
-3130 5615.81 l
-3130 5633.12 3119.43 5644.42 3103.07 5644.42 c
-3091.59 5644.42 3083.95 5639.73 3073.48 5626.68 c
-3067.44 5639.36 3060.4 5644.42 3047.72 5644.42 c
-3034.95 5644.42 3025.98 5638.91 3018.4 5626.68 c
-h
-3143.64 5549 m
-f*
-3223.9 5574.16 m
-3215.65 5564.29 3209.61 5560.18 3200.96 5560.18 c
-3193.31 5560.18 3187.27 5563.77 3183.25 5570.94 c
-3179.43 5577.54 3177.82 5584.56 3177.01 5599 c
-3227.73 5599 l
-3226.52 5615.36 3223.5 5624.43 3217.26 5632.12 c
-3210.82 5639.96 3201.36 5644.42 3190.09 5644.42 c
-3164.94 5644.42 3148.03 5624.4 3148.03 5594.88 c
-3148.03 5565.5 3164.53 5546.18 3189.49 5546.18 c
-3205.79 5546.18 3215.65 5552.42 3228.73 5571.34 c
-h
-3176 5606 m
-3176.61 5629.96 3180.23 5637.42 3190.09 5637.42 c
-3195.93 5637.42 3199.55 5634.38 3201.16 5628.49 c
-3202.17 5624.67 3202.57 5619.03 3202.97 5608.77 c
-3202.97 5606 l
-h
-3232.35 5549 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3266 -5549]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-16 w
-1456.55 6790.55 m
-1456.55 6798.95 1456.55 6798.95 1456.55 6790.55 c
-1456.55 6654.95 1490.15 6524.15 1552.55 6426.95 c
-S
-1481.75 6436.55 m
-1541.75 6453.35 l
-1574.15 6506.15 l
-1641.35 6324.95 l
-f*
-1949.75 5826.95 m
-2034.95 5715.35 2206.55 5634.95 2412.95 5608.55 c
-S
-2366.15 5556.95 m
-2392.55 5613.35 l
-2374.55 5672.15 l
-2554.55 5601.35 l
-f*
-8 w
-2531.75 7204.55 m
-2429.75 7304.15 2284.55 7361.75 2130.95 7361.75 c
-2026.55 7361.75 1924.55 7335.35 1836.95 7284.95 c
-S
-2466.95 7198.55 m
-2514.95 7214.15 l
-2538.95 7259.75 l
-2602.55 7113.35 l
-f*
-2886.95 6628.55 m
-2975.75 6454.55 3140.15 6329.75 3335.75 6290.15 c
-S
-3291.35 6250.55 m
-3316.55 6296.15 l
-3304.55 6346.55 l
-3448.55 6275.75 l
-f*
-0.564706 g
-3338.15 6804.95 m
-3203.75 6840.95 l
-3299.75 6897.35 l
-3146.15 6905.75 l
-3188.15 6976.55 l
-3040.55 6956.15 l
-3023.75 7026.95 l
-2903.75 6982.55 l
-2828.15 7046.15 l
-2752.55 6982.55 l
-2632.55 7026.95 l
-2614.55 6956.15 l
-2465.75 6976.55 l
-2510.15 6905.75 l
-2356.55 6897.35 l
-2452.55 6840.95 l
-2316.95 6804.95 l
-2452.55 6770.15 l
-2356.55 6713.75 l
-2510.15 6704.15 l
-2465.75 6634.55 l
-2614.55 6654.95 l
-2632.55 6582.95 l
-2752.55 6628.55 l
-2828.15 6564.95 l
-2903.75 6628.55 l
-3023.75 6582.95 l
-3040.55 6654.95 l
-3188.15 6634.55 l
-3146.15 6704.15 l
-3299.75 6713.75 l
-3203.75 6770.15 l
-f*
-1 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-f*
-0 g
-3278.15 6864.95 m
-3143.75 6900.95 l
-3239.75 6957.35 l
-3086.15 6965.75 l
-3128.15 7036.55 l
-2980.55 7016.15 l
-2963.75 7086.95 l
-2843.75 7042.55 l
-2768.15 7106.15 l
-2692.55 7042.55 l
-2572.55 7086.95 l
-2554.55 7016.15 l
-2405.75 7036.55 l
-2450.15 6965.75 l
-2296.55 6957.35 l
-2392.55 6900.95 l
-2256.95 6864.95 l
-2392.55 6830.15 l
-2296.55 6773.75 l
-2450.15 6764.15 l
-2405.75 6694.55 l
-2554.55 6714.95 l
-2572.55 6642.95 l
-2692.55 6688.55 l
-2768.15 6624.95 l
-2843.75 6688.55 l
-2963.75 6642.95 l
-2980.55 6714.95 l
-3128.15 6694.55 l
-3086.15 6764.15 l
-3239.75 6773.75 l
-3143.75 6830.15 l
-3278.15 6864.95 l
-3239.75 6864.95 l
-3117.35 6833.75 l
-3206.15 6780.95 l
-3068.15 6773.75 l
-3108.95 6707.75 l
-2973.35 6725.75 l
-2956.55 6657.35 l
-2841.35 6699.35 l
-2768.15 6636.95 l
-2694.95 6699.35 l
-2579.75 6657.35 l
-2561.75 6725.75 l
-2426.15 6707.75 l
-2466.95 6773.75 l
-2330.15 6780.95 l
-2418.95 6833.75 l
-2296.55 6864.95 l
-2417.75 6897.35 l
-2330.15 6950.15 l
-2466.95 6957.35 l
-2426.15 7023.35 l
-2561.75 7004.15 l
-2579.75 7073.75 l
-2694.95 7030.55 l
-2768.15 7092.95 l
-2841.35 7030.55 l
-2956.55 7073.75 l
-2973.35 7004.15 l
-3108.95 7023.35 l
-3068.15 6957.35 l
-3206.15 6950.15 l
-3117.35 6897.35 l
-3239.75 6864.95 l
-3278.15 6864.95 l
-f*
-0.2 i
-2590.08 6916.76 m
-2570.08 6842.52 l
-2567.52 6833.88 2564.48 6831.64 2554.08 6831 c
-2554.08 6827 l
-2604 6827 l
-2604 6831 l
-2594.72 6831.48 2592.48 6832.76 2592.48 6837.88 c
-2592.48 6839.64 2592.8 6841.4 2593.76 6845.08 c
-2593.92 6845.88 l
-2594.08 6846.68 l
-2613.76 6918.52 l
-2616.16 6926.84 2618.56 6929.08 2626.72 6930.04 c
-2626.72 6934 l
-2592.8 6934 l
-2543.2 6857.24 l
-2534.56 6934 l
-2499.2 6934 l
-2499.2 6930 l
-2509.28 6929.52 2510.72 6928.89 2510.72 6924.44 c
-2510.72 6922.2 2510.08 6919.32 2508.96 6915.16 c
-2491.52 6855.48 l
-2485.12 6834.68 2484 6832.92 2475.36 6831 c
-2475.36 6827 l
-2508.48 6827 l
-2508.48 6831 l
-2498.24 6832.28 2495.68 6834.2 2495.68 6840.76 c
-2495.68 6843.48 2496.48 6847.48 2498.72 6855.48 c
-2514.88 6914.52 l
-2525.6 6825.08 l
-2530.08 6825.08 l
-h
-2622.24 6827 m
-f*
-2691.44 6847.32 m
-2684.88 6838.52 2682.48 6835.76 2679.92 6835.76 c
-2678.64 6835.76 2678 6836.86 2678 6838.52 c
-2678 6842.52 2679.44 6849.08 2683.44 6862.2 c
-2694.8 6899.96 l
-2677.04 6898.84 l
-2674.16 6889.4 l
-2672.72 6897.56 2669.2 6901.08 2662.32 6901.08 c
-2642.64 6901.08 2619 6870.27 2619 6845.24 c
-2619 6833.08 2625.74 6824.92 2635.92 6824.92 c
-2645.68 6824.92 2653.04 6830.68 2662.16 6846.04 c
-2660.24 6839.48 2660 6837.56 2660 6835.32 c
-2660 6829.4 2664.76 6824.76 2670.64 6824.76 c
-2678.16 6824.76 2685.52 6831 2694.8 6844.92 c
-h
-2664.56 6894.2 m
-2668.08 6893.88 2670.56 6891 2670.56 6886.68 c
-2670.56 6877.08 2665.24 6859.32 2658.96 6848.28 c
-2654.64 6840.44 2649.84 6835.92 2645.52 6835.92 c
-2641.36 6835.92 2638 6839.75 2638 6844.92 c
-2638 6853.24 2643.42 6869.24 2650.16 6881.08 c
-2654.96 6889.56 2660.24 6894.52 2664.56 6894.2 c
-h
-2702 6827 m
-f*
-2736.56 6900.92 m
-2720.24 6898.36 2714 6897.4 2705.68 6896.44 c
-2705.68 6892 l
-2712.88 6891.69 2714.32 6891.07 2714.32 6888.12 c
-2714.32 6886.52 2713.04 6880.76 2710.8 6872.44 c
-2694.8 6810.36 l
-2691.76 6799.8 2690.48 6798.84 2682.8 6799 c
-2682.8 6794 l
-2722.64 6794 l
-2722.64 6799 l
-2714.64 6799.14 2712.24 6800.16 2712.24 6803.64 c
-2712.24 6805.88 2713.36 6810.68 2716.4 6821.88 c
-2717.52 6825.72 2717.52 6826.04 2718.16 6828.44 c
-2723.76 6825.56 2725.68 6824.92 2729.04 6824.92 c
-2750.8 6824.92 2773.36 6853.88 2773.36 6881.56 c
-2773.36 6893.4 2766.64 6901.08 2756.08 6901.08 c
-2746.96 6901.08 2739.92 6895.92 2730.48 6882.52 c
-h
-2747.12 6889.56 m
-2751.28 6889.24 2753.68 6885.56 2753.36 6880.44 c
-2752.72 6869.88 2747.6 6854.04 2741.84 6843.64 c
-2736.88 6835 2731.76 6829.92 2726.32 6829.92 c
-2722.8 6829.92 2720.08 6832.75 2720.08 6836.28 c
-2720.08 6839 2721.84 6845.56 2726.16 6860.12 c
-2729.68 6871.8 2731.12 6875.8 2733.52 6879.48 c
-2737.52 6885.72 2742.96 6889.88 2747.12 6889.56 c
-h
-2782 6827 m
-f*
-2817.56 6900.92 m
-2801.24 6898.36 2795 6897.4 2786.68 6896.44 c
-2786.68 6892 l
-2793.88 6891.69 2795.32 6891.07 2795.32 6888.12 c
-2795.32 6886.52 2794.04 6880.76 2791.8 6872.44 c
-2775.8 6810.36 l
-2772.76 6799.8 2771.48 6798.84 2763.8 6799 c
-2763.8 6794 l
-2803.64 6794 l
-2803.64 6799 l
-2795.64 6799.14 2793.24 6800.16 2793.24 6803.64 c
-2793.24 6805.88 2794.36 6810.68 2797.4 6821.88 c
-2798.52 6825.72 2798.52 6826.04 2799.16 6828.44 c
-2804.76 6825.56 2806.68 6824.92 2810.04 6824.92 c
-2831.8 6824.92 2854.36 6853.88 2854.36 6881.56 c
-2854.36 6893.4 2847.64 6901.08 2837.08 6901.08 c
-2827.96 6901.08 2820.92 6895.92 2811.48 6882.52 c
-h
-2828.12 6889.56 m
-2832.28 6889.24 2834.68 6885.56 2834.36 6880.44 c
-2833.72 6869.88 2828.6 6854.04 2822.84 6843.64 c
-2817.88 6835 2812.76 6829.92 2807.32 6829.92 c
-2803.8 6829.92 2801.08 6832.75 2801.08 6836.28 c
-2801.08 6839 2802.84 6845.56 2807.16 6860.12 c
-2810.68 6871.8 2812.12 6875.8 2814.52 6879.48 c
-2818.52 6885.72 2823.96 6889.88 2828.12 6889.56 c
-h
-2863 6827 m
-f*
-2896.56 6849.56 m
-2894.32 6846.36 l
-2890.16 6840.12 2886.48 6836.56 2884.08 6836.56 c
-2882.8 6836.56 2882 6837.77 2882 6839.16 c
-2882 6840.6 2882.62 6844.76 2883.12 6847.48 c
-2897.68 6900.92 l
-2889.22 6899 2878.26 6897.4 2866.04 6896.44 c
-2866.04 6892 l
-2867.44 6892 l
-2872.24 6892 2875.48 6890.44 2875.48 6887.48 c
-2875.48 6886.2 2874.71 6883.8 2873.68 6881.08 c
-2864.4 6846.68 l
-2863.12 6842.04 2863 6837.88 2863 6835.64 c
-2863 6829.56 2867.2 6825.56 2873.36 6825.56 c
-2882.96 6825.56 2888.88 6830.36 2900.08 6847.32 c
-h
-2892.88 6936.4 m
-2887.44 6936.4 2883 6931.46 2883 6926.04 c
-2883 6919.8 2887.26 6915.4 2893.04 6915.4 c
-2899.12 6915.4 2904 6919.86 2904 6925.56 c
-2904 6931.48 2899 6936.4 2892.88 6936.4 c
-h
-2906.48 6827 m
-f*
-2981.36 6848.6 m
-2974.96 6838.68 2972.88 6836.56 2970.16 6836.56 c
-2968.88 6836.56 2968 6837.63 2968 6839.16 c
-2968 6840.76 2968.94 6844.12 2971.92 6853.08 c
-2977.68 6870.52 l
-2980.24 6878.04 2982 6885.08 2982 6888.92 c
-2982 6896.76 2977.78 6901.08 2970.16 6901.08 c
-2964.24 6901.08 2958.48 6898.62 2954.16 6894.36 c
-2948.24 6888.76 2945.2 6884.92 2934.48 6869.08 c
-2944.72 6900.76 l
-2934.48 6898.52 2921.68 6896.92 2912.72 6896.6 c
-2912.72 6891.8 l
-2919.44 6891.65 2921.36 6890.92 2921.36 6888.12 c
-2921.36 6886.2 2919.12 6877.72 2914 6859.64 c
-2910.32 6846.68 2909.2 6842.52 2905.04 6827 c
-2924.4 6827 l
-2931.92 6854.68 2937.68 6868.6 2947.6 6881.56 c
-2950.8 6885.88 2955.76 6889.08 2958.64 6889.08 c
-2960.72 6889.08 2963 6887.63 2963 6886.04 c
-2963 6885.56 2962.54 6884.28 2961.84 6882.68 c
-2953.04 6856.12 l
-2950.48 6848.44 2949 6839.32 2949 6835.16 c
-2949 6829.08 2952.84 6825.56 2959.44 6825.56 c
-2969.04 6825.56 2975.6 6831 2984.88 6846.52 c
-h
-2994.96 6827 m
-f*
-3072.48 6896 m
-3054.72 6896 l
-3049.28 6899.58 3044.48 6901.08 3037.12 6901.08 c
-3017.44 6901.08 3001 6888.05 3001 6871.8 c
-3001 6863.64 3005.35 6857.88 3014.4 6854.2 c
-3001.28 6846.84 2999 6844.6 2999 6838.68 c
-2999 6833.56 3001.89 6830.52 3008.96 6828.12 c
-2999.04 6825.72 2995.84 6824.44 2992 6821.4 c
-2989.44 6819.16 2988 6815.32 2988 6811.48 c
-2988 6801.08 2999.56 6795 3017.76 6795 c
-3040.32 6795 3056 6804.72 3056 6818.52 c
-3056 6828.28 3049.6 6833.56 3032.16 6838.52 c
-3023.68 6840.92 l
-3018.56 6842.36 3015 6844.6 3015 6847 c
-3015 6849.56 3017.68 6852.28 3020 6852.28 c
-3020.8 6852.28 3021.92 6852.24 3023.2 6852.12 c
-3024.96 6851.64 3026.24 6851 3028.16 6851 c
-3035.2 6851 3042.4 6853.09 3048.48 6856.92 c
-3057.76 6862.2 3063 6870.36 3063 6879.96 c
-3063 6882.64 3062.59 6884.32 3061.76 6887 c
-3072.48 6887 l
-h
-3014.4 6826.04 m
-3016.32 6825.88 3028.48 6821.72 3032 6820.12 c
-3036.48 6817.88 3039 6815.16 3039 6811 c
-3039 6803.96 3031.8 6800 3019.36 6800 c
-3008.96 6800 3002 6805.1 3002 6812.44 c
-3002 6815.48 3003.32 6818.2 3006.24 6821.24 c
-3008.32 6823.32 3013.12 6826.2 3014.4 6826.04 c
-h
-3036.8 6896.08 m
-3040.96 6896.08 3044 6892.19 3044 6886.52 c
-3044 6881.08 3042.08 6873.4 3039.36 6867.48 c
-3036 6860.12 3031.84 6856 3026.88 6856 c
-3022.56 6856 3020 6859.52 3020 6865.88 c
-3020 6872.28 3022.79 6882.04 3026.24 6888.12 c
-3029.28 6893.4 3032.64 6896.08 3036.8 6896.08 c
-h
-3076 6827 m
-f*
-1 i
-0.564706 g
-2408.15 6009.35 m
-2273.75 6046.55 l
-2369.75 6101.75 l
-2216.15 6111.35 l
-2258.15 6180.95 l
-2110.55 6160.55 l
-2093.75 6232.55 l
-1973.75 6186.95 l
-1898.15 6250.55 l
-1822.55 6186.95 l
-1702.55 6232.55 l
-1684.55 6160.55 l
-1535.75 6180.95 l
-1580.15 6111.35 l
-1426.55 6101.75 l
-1522.55 6046.55 l
-1386.95 6009.35 l
-1522.55 5974.55 l
-1426.55 5918.15 l
-1580.15 5909.75 l
-1535.75 5840.15 l
-1684.55 5859.35 l
-1702.55 5788.55 l
-1822.55 5832.95 l
-1898.15 5769.35 l
-1973.75 5832.95 l
-2093.75 5788.55 l
-2110.55 5859.35 l
-2258.15 5840.15 l
-2216.15 5909.75 l
-2369.75 5918.15 l
-2273.75 5974.55 l
-f*
-1 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-f*
-0 g
-2348.15 6069.35 m
-2213.75 6106.55 l
-2309.75 6161.75 l
-2156.15 6171.35 l
-2198.15 6240.95 l
-2050.55 6220.55 l
-2033.75 6292.55 l
-1913.75 6246.95 l
-1838.15 6310.55 l
-1762.55 6246.95 l
-1642.55 6292.55 l
-1624.55 6220.55 l
-1475.75 6240.95 l
-1520.15 6171.35 l
-1366.55 6161.75 l
-1462.55 6106.55 l
-1326.95 6069.35 l
-1462.55 6034.55 l
-1366.55 5978.15 l
-1520.15 5969.75 l
-1475.75 5900.15 l
-1624.55 5919.35 l
-1642.55 5848.55 l
-1762.55 5892.95 l
-1838.15 5829.35 l
-1913.75 5892.95 l
-2033.75 5848.55 l
-2050.55 5919.35 l
-2198.15 5900.15 l
-2156.15 5969.75 l
-2309.75 5978.15 l
-2213.75 6034.55 l
-2348.15 6069.35 l
-2271.35 6069.35 l
-2162.15 6041.75 l
-2242.55 5994.95 l
-2122.55 5987.75 l
-2159.75 5924.15 l
-2036.15 5942.15 l
-2019.35 5874.95 l
-1910.15 5915.75 l
-1838.15 5855.75 l
-1766.15 5915.75 l
-1655.75 5874.95 l
-1640.15 5942.15 l
-1516.55 5924.15 l
-1554.95 5987.75 l
-1433.75 5994.95 l
-1514.15 6041.75 l
-1404.95 6069.35 l
-1514.15 6098.15 l
-1433.75 6146.15 l
-1554.95 6153.35 l
-1516.55 6215.75 l
-1640.15 6198.95 l
-1655.75 6266.15 l
-1766.15 6224.15 l
-1838.15 6284.15 l
-1910.15 6224.15 l
-2019.35 6266.15 l
-2036.15 6198.95 l
-2159.75 6215.75 l
-2122.55 6153.35 l
-2242.55 6146.15 l
-2162.15 6098.15 l
-2271.35 6069.35 l
-2348.15 6069.35 l
-f*
-0.2 i
-1660.08 6120.76 m
-1640.08 6046.52 l
-1637.52 6037.88 1634.48 6035.64 1624.08 6035 c
-1624.08 6031 l
-1674 6031 l
-1674 6035 l
-1664.72 6035.48 1662.48 6036.76 1662.48 6041.88 c
-1662.48 6043.64 1662.8 6045.4 1663.76 6049.08 c
-1663.92 6049.88 l
-1664.08 6050.68 l
-1683.76 6122.52 l
-1686.16 6130.84 1688.56 6133.08 1696.72 6134.04 c
-1696.72 6138 l
-1662.8 6138 l
-1613.2 6061.24 l
-1604.56 6138 l
-1569.2 6138 l
-1569.2 6134 l
-1579.28 6133.52 1580.72 6132.89 1580.72 6128.44 c
-1580.72 6126.2 1580.08 6123.32 1578.96 6119.16 c
-1561.52 6059.48 l
-1555.12 6038.68 1554 6036.92 1545.36 6035 c
-1545.36 6031 l
-1578.48 6031 l
-1578.48 6035 l
-1568.24 6036.28 1565.68 6038.2 1565.68 6044.76 c
-1565.68 6047.48 1566.48 6051.48 1568.72 6059.48 c
-1584.88 6118.52 l
-1595.6 6029.08 l
-1600.08 6029.08 l
-h
-1692.24 6031 m
-f*
-1761.44 6051.32 m
-1754.88 6042.52 1752.48 6039.76 1749.92 6039.76 c
-1748.64 6039.76 1748 6040.86 1748 6042.52 c
-1748 6046.52 1749.44 6053.08 1753.44 6066.2 c
-1764.8 6103.96 l
-1747.04 6102.84 l
-1744.16 6093.4 l
-1742.72 6101.56 1739.2 6105.08 1732.32 6105.08 c
-1712.64 6105.08 1689 6074.27 1689 6049.24 c
-1689 6037.08 1695.74 6028.92 1705.92 6028.92 c
-1715.68 6028.92 1723.04 6034.68 1732.16 6050.04 c
-1730.24 6043.48 1730 6041.56 1730 6039.32 c
-1730 6033.4 1734.76 6028.76 1740.64 6028.76 c
-1748.16 6028.76 1755.52 6035 1764.8 6048.92 c
-h
-1734.56 6098.2 m
-1738.08 6097.88 1740.56 6095 1740.56 6090.68 c
-1740.56 6081.08 1735.24 6063.32 1728.96 6052.28 c
-1724.64 6044.44 1719.84 6039.92 1715.52 6039.92 c
-1711.36 6039.92 1708 6043.75 1708 6048.92 c
-1708 6057.24 1713.42 6073.24 1720.16 6085.08 c
-1724.96 6093.56 1730.24 6098.52 1734.56 6098.2 c
-h
-1772 6031 m
-f*
-1806.56 6104.92 m
-1790.24 6102.36 1784 6101.4 1775.68 6100.44 c
-1775.68 6096 l
-1782.88 6095.69 1784.32 6095.07 1784.32 6092.12 c
-1784.32 6090.52 1783.04 6084.76 1780.8 6076.44 c
-1764.8 6014.36 l
-1761.76 6003.8 1760.48 6002.84 1752.8 6003 c
-1752.8 5998 l
-1792.64 5998 l
-1792.64 6003 l
-1784.64 6003.14 1782.24 6004.16 1782.24 6007.64 c
-1782.24 6009.88 1783.36 6014.68 1786.4 6025.88 c
-1787.52 6029.72 1787.52 6030.04 1788.16 6032.44 c
-1793.76 6029.56 1795.68 6028.92 1799.04 6028.92 c
-1820.8 6028.92 1843.36 6057.88 1843.36 6085.56 c
-1843.36 6097.4 1836.64 6105.08 1826.08 6105.08 c
-1816.96 6105.08 1809.92 6099.92 1800.48 6086.52 c
-h
-1817.12 6093.56 m
-1821.28 6093.24 1823.68 6089.56 1823.36 6084.44 c
-1822.72 6073.88 1817.6 6058.04 1811.84 6047.64 c
-1806.88 6039 1801.76 6033.92 1796.32 6033.92 c
-1792.8 6033.92 1790.08 6036.75 1790.08 6040.28 c
-1790.08 6043 1791.84 6049.56 1796.16 6064.12 c
-1799.68 6075.8 1801.12 6079.8 1803.52 6083.48 c
-1807.52 6089.72 1812.96 6093.88 1817.12 6093.56 c
-h
-1852 6031 m
-f*
-1887.56 6104.92 m
-1871.24 6102.36 1865 6101.4 1856.68 6100.44 c
-1856.68 6096 l
-1863.88 6095.69 1865.32 6095.07 1865.32 6092.12 c
-1865.32 6090.52 1864.04 6084.76 1861.8 6076.44 c
-1845.8 6014.36 l
-1842.76 6003.8 1841.48 6002.84 1833.8 6003 c
-1833.8 5998 l
-1873.64 5998 l
-1873.64 6003 l
-1865.64 6003.14 1863.24 6004.16 1863.24 6007.64 c
-1863.24 6009.88 1864.36 6014.68 1867.4 6025.88 c
-1868.52 6029.72 1868.52 6030.04 1869.16 6032.44 c
-1874.76 6029.56 1876.68 6028.92 1880.04 6028.92 c
-1901.8 6028.92 1924.36 6057.88 1924.36 6085.56 c
-1924.36 6097.4 1917.64 6105.08 1907.08 6105.08 c
-1897.96 6105.08 1890.92 6099.92 1881.48 6086.52 c
-h
-1898.12 6093.56 m
-1902.28 6093.24 1904.68 6089.56 1904.36 6084.44 c
-1903.72 6073.88 1898.6 6058.04 1892.84 6047.64 c
-1887.88 6039 1882.76 6033.92 1877.32 6033.92 c
-1873.8 6033.92 1871.08 6036.75 1871.08 6040.28 c
-1871.08 6043 1872.84 6049.56 1877.16 6064.12 c
-1880.68 6075.8 1882.12 6079.8 1884.52 6083.48 c
-1888.52 6089.72 1893.96 6093.88 1898.12 6093.56 c
-h
-1933 6031 m
-f*
-1966.56 6053.56 m
-1964.32 6050.36 l
-1960.16 6044.12 1956.48 6040.56 1954.08 6040.56 c
-1952.8 6040.56 1952 6041.77 1952 6043.16 c
-1952 6044.6 1952.62 6048.76 1953.12 6051.48 c
-1967.68 6104.92 l
-1959.22 6103 1948.26 6101.4 1936.04 6100.44 c
-1936.04 6096 l
-1937.44 6096 l
-1942.24 6096 1945.48 6094.44 1945.48 6091.48 c
-1945.48 6090.2 1944.71 6087.8 1943.68 6085.08 c
-1934.4 6050.68 l
-1933.12 6046.04 1933 6041.88 1933 6039.64 c
-1933 6033.56 1937.2 6029.56 1943.36 6029.56 c
-1952.96 6029.56 1958.88 6034.36 1970.08 6051.32 c
-h
-1962.88 6140.4 m
-1957.44 6140.4 1953 6135.46 1953 6130.04 c
-1953 6123.8 1957.26 6119.4 1963.04 6119.4 c
-1969.12 6119.4 1974 6123.86 1974 6129.56 c
-1974 6135.48 1969 6140.4 1962.88 6140.4 c
-h
-1976.48 6031 m
-f*
-2051.36 6052.6 m
-2044.96 6042.68 2042.88 6040.56 2040.16 6040.56 c
-2038.88 6040.56 2038 6041.63 2038 6043.16 c
-2038 6044.76 2038.94 6048.12 2041.92 6057.08 c
-2047.68 6074.52 l
-2050.24 6082.04 2052 6089.08 2052 6092.92 c
-2052 6100.76 2047.78 6105.08 2040.16 6105.08 c
-2034.24 6105.08 2028.48 6102.62 2024.16 6098.36 c
-2018.24 6092.76 2015.2 6088.92 2004.48 6073.08 c
-2014.72 6104.76 l
-2004.48 6102.52 1991.68 6100.92 1982.72 6100.6 c
-1982.72 6095.8 l
-1989.44 6095.65 1991.36 6094.92 1991.36 6092.12 c
-1991.36 6090.2 1989.12 6081.72 1984 6063.64 c
-1980.32 6050.68 1979.2 6046.52 1975.04 6031 c
-1994.4 6031 l
-2001.92 6058.68 2007.68 6072.6 2017.6 6085.56 c
-2020.8 6089.88 2025.76 6093.08 2028.64 6093.08 c
-2030.72 6093.08 2033 6091.63 2033 6090.04 c
-2033 6089.56 2032.54 6088.28 2031.84 6086.68 c
-2023.04 6060.12 l
-2020.48 6052.44 2019 6043.32 2019 6039.16 c
-2019 6033.08 2022.84 6029.56 2029.44 6029.56 c
-2039.04 6029.56 2045.6 6035 2054.88 6050.52 c
-h
-2064.96 6031 m
-f*
-2142.48 6100 m
-2124.72 6100 l
-2119.28 6103.58 2114.48 6105.08 2107.12 6105.08 c
-2087.44 6105.08 2071 6092.05 2071 6075.8 c
-2071 6067.64 2075.35 6061.88 2084.4 6058.2 c
-2071.28 6050.84 2069 6048.6 2069 6042.68 c
-2069 6037.56 2071.89 6034.52 2078.96 6032.12 c
-2069.04 6029.72 2065.84 6028.44 2062 6025.4 c
-2059.44 6023.16 2058 6019.32 2058 6015.48 c
-2058 6005.08 2069.56 5999 2087.76 5999 c
-2110.32 5999 2126 6008.72 2126 6022.52 c
-2126 6032.28 2119.6 6037.56 2102.16 6042.52 c
-2093.68 6044.92 l
-2088.56 6046.36 2085 6048.6 2085 6051 c
-2085 6053.56 2087.68 6056.28 2090 6056.28 c
-2090.8 6056.28 2091.92 6056.24 2093.2 6056.12 c
-2094.96 6055.64 2096.24 6055 2098.16 6055 c
-2105.2 6055 2112.4 6057.09 2118.48 6060.92 c
-2127.76 6066.2 2133 6074.36 2133 6083.96 c
-2133 6086.64 2132.59 6088.32 2131.76 6091 c
-2142.48 6091 l
-h
-2084.4 6030.04 m
-2086.32 6029.88 2098.48 6025.72 2102 6024.12 c
-2106.48 6021.88 2109 6019.16 2109 6015 c
-2109 6007.96 2101.8 6004 2089.36 6004 c
-2078.96 6004 2072 6009.1 2072 6016.44 c
-2072 6019.48 2073.32 6022.2 2076.24 6025.24 c
-2078.32 6027.32 2083.12 6030.2 2084.4 6030.04 c
-h
-2106.8 6100.08 m
-2110.96 6100.08 2114 6096.19 2114 6090.52 c
-2114 6085.08 2112.08 6077.4 2109.36 6071.48 c
-2106 6064.12 2101.84 6060 2096.88 6060 c
-2092.56 6060 2090 6063.52 2090 6069.88 c
-2090 6076.28 2092.79 6086.04 2096.24 6092.12 c
-2099.28 6097.4 2102.64 6100.08 2106.8 6100.08 c
-h
-2146 6031 m
-f*
-1 i
-1 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-f*
-0 g
-3922.55 6609.35 m
-4088.15 6760.55 l
-4006.55 6760.55 l
-4006.55 6914.15 l
-3839.75 6914.15 l
-3839.75 6760.55 l
-3758.15 6760.55 l
-3922.55 6609.35 l
-3922.55 6623.75 l
-3783.35 6750.95 l
-3849.35 6750.95 l
-3849.35 6904.55 l
-3995.75 6904.55 l
-3995.75 6750.95 l
-4061.75 6750.95 l
-3922.55 6623.75 l
-3922.55 6609.35 l
-f*
-0.2 i
-3475.88 7147 m
-3475.88 7142 l
-3488.3 7141.29 3492 7138.45 3492 7129.4 c
-3492 7042.28 l
-3492 7033.1 3489.25 7030.94 3475.88 7029.5 c
-3475.88 7025 l
-3533.84 7025 l
-3564.26 7025 3584 7038.5 3584 7058.84 c
-3584 7067.12 3580.73 7074.32 3574.7 7079.9 c
-3568.4 7085.48 3562.28 7088 3549.68 7090.7 c
-3570.56 7096.82 3578 7104.2 3578 7117.88 c
-3578 7136.42 3561.55 7147 3531.5 7147 c
-h
-3521 7086.74 m
-3525.92 7086.74 l
-3544.46 7086.74 3553 7077.2 3553 7057.22 c
-3553 7039.76 3545.77 7031 3531.5 7031 c
-3523.58 7031 3521 7033.99 3521 7041.74 c
-h
-3521 7132.46 m
-3521 7138.94 3523.39 7142 3530.24 7142 c
-3542.84 7142 3549 7134.03 3549 7116.62 c
-3549 7097.72 3543.08 7092.68 3521 7092.14 c
-h
-3593.06 7025 m
-f*
-3678.14 7036.52 m
-3676.34 7034.72 l
-3675.8 7034.18 3675.26 7034 3674.36 7034 c
-3671.84 7034 3671 7035.44 3671 7038.5 c
-3671 7085.48 l
-3671 7100.78 3657.16 7110.16 3634.94 7110.16 c
-3614.6 7110.16 3600.92 7100.97 3600.92 7087.46 c
-3600.92 7079.9 3605.24 7075.58 3612.62 7075.58 c
-3619.82 7075.58 3624.86 7079.9 3624.86 7086.02 c
-3624.86 7088.54 3623.96 7090.88 3621.62 7093.76 c
-3620 7095.56 3619.46 7096.64 3619.46 7097.72 c
-3619.46 7101.5 3624.32 7104.16 3630.8 7104.16 c
-3641.42 7104.16 3646 7099.37 3646 7088.54 c
-3646 7075.4 l
-3624.89 7068.92 3616.41 7065.68 3609.56 7061.18 c
-3601.46 7055.78 3598 7049.48 3598 7041.56 c
-3598 7030.58 3606.07 7022.48 3617.3 7022.48 c
-3627.74 7022.48 3636.02 7026.08 3645.92 7035.08 c
-3647.9 7025.9 3651.86 7022.48 3660.68 7022.48 c
-3668.42 7022.48 3674 7025.36 3680.84 7032.74 c
-h
-3646 7043 m
-3641.04 7037.42 3637.37 7035.26 3632.96 7035.26 c
-3627.56 7035.26 3624 7040.12 3624 7047.32 c
-3624 7057.76 3631.57 7065.14 3646 7069.1 c
-h
-3683 7025 m
-f*
-3744.22 7083.68 m
-3744.22 7109.8 l
-3740.24 7109.8 l
-3739.16 7107.08 3738.08 7106.2 3735.74 7106.2 c
-3734.66 7106.2 3733.04 7106.55 3730.16 7107.44 c
-3724.4 7109.42 3720.26 7110.16 3716.12 7110.16 c
-3699.74 7110.16 3688 7098.99 3688 7083.86 c
-3688 7071.98 3695.34 7063.7 3713.42 7055.96 c
-3725.84 7050.56 3731 7046.06 3731 7040.3 c
-3731 7033.28 3725.48 7028.48 3717.2 7028.48 c
-3704.6 7028.48 3696.32 7036.62 3692.54 7052.36 c
-3687.5 7052.36 l
-3687.5 7022.66 l
-3692 7022.66 l
-3693.98 7026.44 3695.06 7027.7 3696.68 7027.7 c
-3697.58 7027.7 3699.02 7027.34 3700.82 7026.62 c
-3706.04 7024.46 3715.22 7022.48 3720.26 7022.48 c
-3736.64 7022.48 3748 7033.64 3748 7049.84 c
-3748 7062.62 3741.15 7070.54 3723.14 7077.92 c
-3710.9 7083.14 3706 7087.64 3706 7093.76 c
-3706 7099.7 3710.98 7104.16 3717.74 7104.16 c
-3722.6 7104.16 3727.28 7102.19 3731.24 7098.44 c
-3735.02 7094.84 3737 7091.42 3739.7 7083.68 c
-h
-3753.02 7025 m
-f*
-3824.36 7047.5 m
-3816.98 7038.68 3811.58 7035.48 3803.84 7035.48 c
-3797 7035.48 3791.6 7038.53 3788 7044.62 c
-3784.58 7050.36 3783.14 7056.45 3782.42 7069 c
-3827.78 7069 l
-3826.7 7083.99 3824 7092.3 3818.42 7099.34 c
-3812.66 7106.36 3804.2 7110.16 3794.12 7110.16 c
-3771.62 7110.16 3756.5 7092.33 3756.5 7066.04 c
-3756.5 7039.76 3771.26 7022.48 3793.58 7022.48 c
-3808.16 7022.48 3816.98 7028.06 3828.68 7044.98 c
-h
-3781.52 7076 m
-3782.06 7097.42 3785.3 7104.16 3794.12 7104.16 c
-3799.34 7104.16 3802.58 7101.42 3804.02 7096.1 c
-3804.92 7092.68 3805.28 7087.64 3805.64 7078.46 c
-3805.64 7076 l
-h
-3831.92 7025 m
-f*
-3878 7025 m
-f*
-3981.94 7147 m
-3879.88 7147 l
-3879.88 7142 l
-3892.3 7141.29 3896 7138.63 3896 7129.4 c
-3896 7042.28 l
-3896 7032.92 3893.44 7030.94 3879.88 7029.5 c
-3879.88 7025 l
-3944.68 7025 l
-3944.68 7030 l
-3928.12 7030.69 3925 7032.77 3925 7042.28 c
-3925 7084.22 l
-3943.28 7083.86 3949.91 7077.2 3952.42 7056.32 c
-3956.92 7056.32 l
-3956.92 7117.16 l
-3952.42 7117.16 l
-3949.19 7096.64 3942.92 7090.34 3925 7090.34 c
-3925 7132.1 l
-3925 7138.76 3927.32 7141 3936.4 7141 c
-3953.14 7141 3963.58 7137.8 3969.16 7131.2 c
-3973.12 7126.7 3975.1 7121.84 3977.62 7110.5 c
-3981.94 7110.5 l
-h
-3986.98 7025 m
-f*
-4026.28 7108 m
-3992.22 7108 l
-3992.22 7103.66 l
-3999.96 7102.58 4002 7100.24 4002 7093.04 c
-4002 7040.12 l
-4002 7032.74 4000.19 7030.76 3992.22 7029.32 c
-3992.22 7025 l
-4040.1 7025 l
-4040.1 7029.32 l
-4029.12 7030.04 4027 7032.38 4027 7043.54 c
-4027 7077.56 l
-4027 7086.92 4032.02 7094.66 4037.94 7094.66 c
-4039.38 7094.66 4041 7093.4 4042.98 7090.52 c
-4046.4 7085.66 4049.1 7084.04 4053.78 7084.04 c
-4060.44 7084.04 4065.12 7089.08 4065.12 7095.92 c
-4065.12 7104.2 4059 7110.16 4050.54 7110.16 c
-4041.55 7110.16 4034.73 7105.47 4026.28 7093.22 c
-h
-4066.92 7025 m
-f*
-4153.14 7036.52 m
-4151.34 7034.72 l
-4150.8 7034.18 4150.26 7034 4149.36 7034 c
-4146.84 7034 4146 7035.44 4146 7038.5 c
-4146 7085.48 l
-4146 7100.78 4132.16 7110.16 4109.94 7110.16 c
-4089.6 7110.16 4075.92 7100.97 4075.92 7087.46 c
-4075.92 7079.9 4080.24 7075.58 4087.62 7075.58 c
-4094.82 7075.58 4099.86 7079.9 4099.86 7086.02 c
-4099.86 7088.54 4098.96 7090.88 4096.62 7093.76 c
-4095 7095.56 4094.46 7096.64 4094.46 7097.72 c
-4094.46 7101.5 4099.32 7104.16 4105.8 7104.16 c
-4116.42 7104.16 4121 7099.37 4121 7088.54 c
-4121 7075.4 l
-4099.89 7068.92 4091.41 7065.68 4084.56 7061.18 c
-4076.46 7055.78 4073 7049.48 4073 7041.56 c
-4073 7030.58 4081.07 7022.48 4092.3 7022.48 c
-4102.74 7022.48 4111.02 7026.08 4120.92 7035.08 c
-4122.9 7025.9 4126.86 7022.48 4135.68 7022.48 c
-4143.42 7022.48 4149 7025.36 4155.84 7032.74 c
-h
-4121 7043 m
-4116.04 7037.42 4112.37 7035.26 4107.96 7035.26 c
-4102.56 7035.26 4099 7040.12 4099 7047.32 c
-4099 7057.76 4106.57 7065.14 4121 7069.1 c
-h
-4158 7025 m
-f*
-4195.46 7108 m
-4160.73 7108 l
-4160.73 7103.66 l
-4168.65 7102.58 4171 7100.42 4171 7093.04 c
-4171 7040.12 l
-4171 7032.74 4168.95 7030.76 4160.73 7029.32 c
-4160.73 7025 l
-4203.93 7025 l
-4203.93 7029.32 l
-4197.63 7030.22 4196 7032.74 4196 7039.58 c
-4196 7087.64 l
-4196 7088.54 4198.51 7091.78 4200.51 7093.76 c
-4204.29 7096.64 4207.53 7098.16 4210.77 7098.16 c
-4217.79 7098.16 4221 7094 4221 7083.14 c
-4221 7039.58 l
-4221 7032.2 4218.9 7029.86 4211.85 7029.32 c
-4211.85 7025 l
-4253.97 7025 l
-4253.97 7029.32 l
-4247.67 7030.04 4246 7032.74 4246 7039.58 c
-4246 7087.64 l
-4246 7088.54 4248.43 7091.6 4250.37 7093.58 c
-4254.33 7096.64 4257.57 7098.16 4260.81 7098.16 c
-4267.65 7098.16 4270 7093.82 4270 7083.14 c
-4270 7039.58 l
-4270 7032.02 4268.1 7029.86 4261.53 7029.32 c
-4261.53 7025 l
-4304.37 7025 l
-4304.37 7029 l
-4297.35 7029.37 4295 7031.6 4295 7039.58 c
-4295 7084.76 l
-4295 7100.24 4285.6 7110.16 4271.07 7110.16 c
-4260.81 7110.16 4253.97 7106.01 4244.61 7094.48 c
-4239.21 7105.82 4232.91 7110.16 4221.57 7110.16 c
-4210.2 7110.16 4202.21 7105.29 4195.46 7094.48 c
-h
-4307.94 7025 m
-f*
-4380.36 7047.5 m
-4372.98 7038.68 4367.58 7035.48 4359.84 7035.48 c
-4353 7035.48 4347.6 7038.53 4344 7044.62 c
-4340.58 7050.36 4339.14 7056.45 4338.42 7069 c
-4383.78 7069 l
-4382.7 7083.99 4380 7092.3 4374.42 7099.34 c
-4368.66 7106.36 4360.2 7110.16 4350.12 7110.16 c
-4327.62 7110.16 4312.5 7092.33 4312.5 7066.04 c
-4312.5 7039.76 4327.26 7022.48 4349.58 7022.48 c
-4364.16 7022.48 4372.98 7028.06 4384.68 7044.98 c
-h
-4337.52 7076 m
-4338.06 7097.42 4341.3 7104.16 4350.12 7104.16 c
-4355.34 7104.16 4358.58 7101.42 4360.02 7096.1 c
-4360.92 7092.68 4361.28 7087.64 4361.64 7078.46 c
-4361.64 7076 l
-h
-4387.92 7025 m
-f*
-1 i
-3472.55 6989.75 914.4 15.5999 re
-f
-0.2 i
-2524.26 4716.36 m
-2513.64 4705.2 2507.88 4700.88 2499.06 4697.46 c
-2493.84 4695.3 2487.9 4694.58 2482.86 4694.58 c
-2470.98 4694.58 2459.64 4700.74 2454.42 4709.88 c
-2449.2 4719.42 2447 4732.2 2447 4750.38 c
-2447 4787.64 2458.23 4807.7 2479.8 4807.7 c
-2488.26 4807.7 2496 4804.38 2503.74 4797.36 c
-2511.48 4790.52 2515.62 4784.4 2521.92 4770.72 c
-2526.42 4770.72 l
-2526.42 4813.16 l
-2521.56 4813.16 l
-2518.86 4806.43 2517.06 4804.56 2513.64 4804.56 c
-2511.84 4804.56 2509.5 4805.28 2505.36 4807.08 c
-2494.92 4811.4 2486.1 4813.7 2477.46 4813.7 c
-2441.64 4813.7 2415 4785.84 2415 4748.76 c
-2415 4711.68 2441.21 4685.58 2478.54 4685.58 c
-2499.24 4685.58 2511.48 4691.88 2529.66 4711.86 c
-h
-2535.96 4689 m
-f*
-2599.18 4686.66 m
-2606.78 4689.36 2611.02 4690.08 2622.5 4691.34 c
-2633.66 4692.6 l
-2633.66 4697 l
-2625.74 4697.35 2624 4699.63 2624 4707.18 c
-2624 4772 l
-2587.4 4772 l
-2587.4 4767.66 l
-2596.4 4766.94 2599 4764.78 2599 4757.04 c
-2599 4706.1 l
-2592.88 4700.16 2589.18 4698.48 2583.8 4698.48 c
-2576.42 4698.48 2574 4702 2574 4710.96 c
-2574 4772 l
-2539.88 4772 l
-2539.88 4767.66 l
-2547.26 4766.22 2549 4764.6 2549 4757.04 c
-2549 4711.68 l
-2549 4695.84 2557.89 4686.48 2572.64 4686.48 c
-2582.16 4686.48 2588.56 4689.36 2599.18 4698.36 c
-h
-2637.08 4689 m
-f*
-2675.28 4772 m
-2641.22 4772 l
-2641.22 4767.66 l
-2648.96 4766.58 2651 4764.24 2651 4757.04 c
-2651 4704.12 l
-2651 4696.74 2649.19 4694.76 2641.22 4693.32 c
-2641.22 4689 l
-2689.1 4689 l
-2689.1 4693.32 l
-2678.12 4694.04 2676 4696.38 2676 4707.54 c
-2676 4741.56 l
-2676 4750.92 2681.02 4758.66 2686.94 4758.66 c
-2688.38 4758.66 2690 4757.4 2691.98 4754.52 c
-2695.4 4749.66 2698.1 4748.04 2702.78 4748.04 c
-2709.44 4748.04 2714.12 4753.08 2714.12 4759.92 c
-2714.12 4768.2 2708 4774.16 2699.54 4774.16 c
-2690.55 4774.16 2683.73 4769.47 2675.28 4757.22 c
-h
-2715.92 4689 m
-f*
-2756.28 4772 m
-2722.22 4772 l
-2722.22 4767.66 l
-2729.96 4766.58 2732 4764.24 2732 4757.04 c
-2732 4704.12 l
-2732 4696.74 2730.19 4694.76 2722.22 4693.32 c
-2722.22 4689 l
-2770.1 4689 l
-2770.1 4693.32 l
-2759.12 4694.04 2757 4696.38 2757 4707.54 c
-2757 4741.56 l
-2757 4750.92 2762.02 4758.66 2767.94 4758.66 c
-2769.38 4758.66 2771 4757.4 2772.98 4754.52 c
-2776.4 4749.66 2779.1 4748.04 2783.78 4748.04 c
-2790.44 4748.04 2795.12 4753.08 2795.12 4759.92 c
-2795.12 4768.2 2789 4774.16 2780.54 4774.16 c
-2771.55 4774.16 2764.73 4769.47 2756.28 4757.22 c
-h
-2796.92 4689 m
-f*
-2868.36 4711.5 m
-2860.98 4702.68 2855.58 4699.48 2847.84 4699.48 c
-2841 4699.48 2835.6 4702.53 2832 4708.62 c
-2828.58 4714.36 2827.14 4720.45 2826.42 4733 c
-2871.78 4733 l
-2870.7 4747.99 2868 4756.3 2862.42 4763.34 c
-2856.66 4770.36 2848.2 4774.16 2838.12 4774.16 c
-2815.62 4774.16 2800.5 4756.33 2800.5 4730.04 c
-2800.5 4703.76 2815.26 4686.48 2837.58 4686.48 c
-2852.16 4686.48 2860.98 4692.06 2872.68 4708.98 c
-h
-2825.52 4740 m
-2826.06 4761.42 2829.3 4768.16 2838.12 4768.16 c
-2843.34 4768.16 2846.58 4765.42 2848.02 4760.1 c
-2848.92 4756.68 2849.28 4751.64 2849.64 4742.46 c
-2849.64 4740 l
-h
-2875.92 4689 m
-f*
-2913.82 4772 m
-2879.78 4772 l
-2879.78 4767.66 l
-2887.7 4766.4 2889 4764.6 2889 4757.04 c
-2889 4704.12 l
-2889 4696.56 2887.61 4694.94 2879.78 4693.32 c
-2879.78 4689 l
-2923.16 4689 l
-2923.16 4693.32 l
-2916.5 4694.22 2914 4696.92 2914 4703.58 c
-2914 4751.64 l
-2914 4752.36 2915.4 4754.16 2917.4 4755.96 c
-2921.36 4759.92 2925.68 4762.16 2930 4762.16 c
-2936.12 4762.16 2939 4757.27 2939 4747.14 c
-2939 4703.58 l
-2939 4696.92 2936.71 4694.04 2930.72 4693.32 c
-2930.72 4689 l
-2973.02 4689 l
-2973.02 4693.32 l
-2966 4693.86 2964 4696.02 2964 4703.58 c
-2964 4748.76 l
-2964 4764.24 2954.54 4774.16 2939.9 4774.16 c
-2928.96 4774.16 2920.57 4769.11 2913.82 4758.48 c
-h
-2976.08 4689 m
-f*
-3030.9 4772 m
-3014 4772 l
-3014 4802.4 l
-3009.48 4802.4 l
-2998.5 4786.92 2991.3 4778.82 2979.6 4768.92 c
-2979.6 4764 l
-2989 4764 l
-2989 4705.74 l
-2989 4694.04 2996.73 4686.84 3009.12 4686.84 c
-3021.18 4686.84 3028.38 4692.24 3035.76 4707 c
-3031.26 4708.98 l
-3027.66 4702.14 3024.78 4699.84 3021 4699.84 c
-3015.96 4699.84 3014 4702.83 3014 4709.88 c
-3014 4764 l
-3030.9 4764 l
-h
-3035.94 4689 m
-f*
-3081 4689 m
-f*
-3185.94 4811 m
-3083.88 4811 l
-3083.88 4806 l
-3096.3 4805.29 3100 4802.63 3100 4793.4 c
-3100 4706.28 l
-3100 4696.92 3097.44 4694.94 3083.88 4693.5 c
-3083.88 4689 l
-3148.68 4689 l
-3148.68 4694 l
-3132.12 4694.69 3129 4696.77 3129 4706.28 c
-3129 4748.22 l
-3147.28 4747.86 3153.91 4741.2 3156.42 4720.32 c
-3160.92 4720.32 l
-3160.92 4781.16 l
-3156.42 4781.16 l
-3153.19 4760.64 3146.92 4754.34 3129 4754.34 c
-3129 4796.1 l
-3129 4802.76 3131.32 4805 3140.4 4805 c
-3157.14 4805 3167.58 4801.8 3173.16 4795.2 c
-3177.12 4790.7 3179.1 4785.84 3181.62 4774.5 c
-3185.94 4774.5 l
-h
-3190.98 4689 m
-f*
-3230.28 4772 m
-3196.22 4772 l
-3196.22 4767.66 l
-3203.96 4766.58 3206 4764.24 3206 4757.04 c
-3206 4704.12 l
-3206 4696.74 3204.19 4694.76 3196.22 4693.32 c
-3196.22 4689 l
-3244.1 4689 l
-3244.1 4693.32 l
-3233.12 4694.04 3231 4696.38 3231 4707.54 c
-3231 4741.56 l
-3231 4750.92 3236.02 4758.66 3241.94 4758.66 c
-3243.38 4758.66 3245 4757.4 3246.98 4754.52 c
-3250.4 4749.66 3253.1 4748.04 3257.78 4748.04 c
-3264.44 4748.04 3269.12 4753.08 3269.12 4759.92 c
-3269.12 4768.2 3263 4774.16 3254.54 4774.16 c
-3245.55 4774.16 3238.73 4769.47 3230.28 4757.22 c
-h
-3270.92 4689 m
-f*
-3356.14 4700.52 m
-3354.34 4698.72 l
-3353.8 4698.18 3353.26 4698 3352.36 4698 c
-3349.84 4698 3349 4699.44 3349 4702.5 c
-3349 4749.48 l
-3349 4764.78 3335.16 4774.16 3312.94 4774.16 c
-3292.6 4774.16 3278.92 4764.97 3278.92 4751.46 c
-3278.92 4743.9 3283.24 4739.58 3290.62 4739.58 c
-3297.82 4739.58 3302.86 4743.9 3302.86 4750.02 c
-3302.86 4752.54 3301.96 4754.88 3299.62 4757.76 c
-3298 4759.56 3297.46 4760.64 3297.46 4761.72 c
-3297.46 4765.5 3302.32 4768.16 3308.8 4768.16 c
-3319.42 4768.16 3324 4763.37 3324 4752.54 c
-3324 4739.4 l
-3302.89 4732.92 3294.41 4729.68 3287.56 4725.18 c
-3279.46 4719.78 3276 4713.48 3276 4705.56 c
-3276 4694.58 3284.07 4686.48 3295.3 4686.48 c
-3305.74 4686.48 3314.02 4690.08 3323.92 4699.08 c
-3325.9 4689.9 3329.86 4686.48 3338.68 4686.48 c
-3346.42 4686.48 3352 4689.36 3358.84 4696.74 c
-h
-3324 4707 m
-3319.04 4701.42 3315.37 4699.26 3310.96 4699.26 c
-3305.56 4699.26 3302 4704.12 3302 4711.32 c
-3302 4721.76 3309.57 4729.14 3324 4733.1 c
-h
-3361 4689 m
-f*
-3398.46 4772 m
-3363.73 4772 l
-3363.73 4767.66 l
-3371.65 4766.58 3374 4764.42 3374 4757.04 c
-3374 4704.12 l
-3374 4696.74 3371.95 4694.76 3363.73 4693.32 c
-3363.73 4689 l
-3406.93 4689 l
-3406.93 4693.32 l
-3400.63 4694.22 3399 4696.74 3399 4703.58 c
-3399 4751.64 l
-3399 4752.54 3401.51 4755.78 3403.51 4757.76 c
-3407.29 4760.64 3410.53 4762.16 3413.77 4762.16 c
-3420.79 4762.16 3424 4758 3424 4747.14 c
-3424 4703.58 l
-3424 4696.2 3421.9 4693.86 3414.85 4693.32 c
-3414.85 4689 l
-3456.97 4689 l
-3456.97 4693.32 l
-3450.67 4694.04 3449 4696.74 3449 4703.58 c
-3449 4751.64 l
-3449 4752.54 3451.43 4755.6 3453.37 4757.58 c
-3457.33 4760.64 3460.57 4762.16 3463.81 4762.16 c
-3470.65 4762.16 3473 4757.82 3473 4747.14 c
-3473 4703.58 l
-3473 4696.02 3471.1 4693.86 3464.53 4693.32 c
-3464.53 4689 l
-3507.37 4689 l
-3507.37 4693 l
-3500.35 4693.37 3498 4695.6 3498 4703.58 c
-3498 4748.76 l
-3498 4764.24 3488.6 4774.16 3474.07 4774.16 c
-3463.81 4774.16 3456.97 4770.01 3447.61 4758.48 c
-3442.21 4769.82 3435.91 4774.16 3424.57 4774.16 c
-3413.2 4774.16 3405.21 4769.29 3398.46 4758.48 c
-h
-3510.94 4689 m
-f*
-3583.36 4711.5 m
-3575.98 4702.68 3570.58 4699.48 3562.84 4699.48 c
-3556 4699.48 3550.6 4702.53 3547 4708.62 c
-3543.58 4714.36 3542.14 4720.45 3541.42 4733 c
-3586.78 4733 l
-3585.7 4747.99 3583 4756.3 3577.42 4763.34 c
-3571.66 4770.36 3563.2 4774.16 3553.12 4774.16 c
-3530.62 4774.16 3515.5 4756.33 3515.5 4730.04 c
-3515.5 4703.76 3530.26 4686.48 3552.58 4686.48 c
-3567.16 4686.48 3575.98 4692.06 3587.68 4708.98 c
-h
-3540.52 4740 m
-3541.06 4761.42 3544.3 4768.16 3553.12 4768.16 c
-3558.34 4768.16 3561.58 4765.42 3563.02 4760.1 c
-3563.92 4756.68 3564.28 4751.64 3564.64 4742.46 c
-3564.64 4740 l
-h
-3590.92 4689 m
-f*
-1 i
-2405.75 4654.55 1184.4 15.5999 re
-f
-1 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-f*
-0 g
-3014.15 4881.35 m
-3178.55 5032.55 l
-3095.75 5032.55 l
-3095.75 5186.15 l
-2930.15 5186.15 l
-2930.15 5032.55 l
-2847.35 5032.55 l
-3014.15 4881.35 l
-3014.15 4894.55 l
-2873.75 5021.75 l
-2939.75 5021.75 l
-2939.75 5176.55 l
-3086.15 5176.55 l
-3086.15 5021.75 l
-3152.15 5021.75 l
-3014.15 4894.55 l
-3014.15 4881.35 l
-f*
-0.564706 g
-2922.95 3375.35 m
-2922.95 3485.75 2831.75 3576.95 2720.15 3576.95 c
-2223.35 3576.95 l
-2111.75 3576.95 2020.55 3485.75 2020.55 3375.35 c
-2020.55 3237.35 l
-2020.55 3126.95 2111.75 3035.75 2223.35 3035.75 c
-2720.15 3035.75 l
-2831.75 3035.75 2922.95 3126.95 2922.95 3237.35 c
-f*
-1 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-f*
-0 g
-2858.15 3432.95 m
-2858.15 3542.15 2769.35 3630.95 2657.75 3630.95 c
-2166.95 3630.95 l
-2056.55 3630.95 1966.55 3542.15 1966.55 3432.95 c
-1966.55 3298.55 l
-1966.55 3189.35 2055.35 3100.55 2166.95 3100.55 c
-2657.75 3100.55 l
-2769.35 3100.55 2858.15 3189.35 2858.15 3298.55 c
-h
-S
-0.201248 i
-2199.33 3472 m
-2085.22 3472 l
-2085.22 3467 l
-2099.11 3466.2 2103 3463.18 2103 3452.72 c
-2103 3355.32 l
-2103 3344.85 2100.17 3342.64 2085.22 3341.03 c
-2085.22 3336 l
-2157.67 3336 l
-2157.67 3341 l
-2139.15 3341.81 2136 3344.23 2136 3355.32 c
-2136 3402.21 l
-2156.22 3401.81 2163.55 3394.36 2166.32 3371.02 c
-2171.35 3371.02 l
-2171.35 3439.04 l
-2166.32 3439.04 l
-2162.76 3416.1 2155.82 3409.05 2136 3409.05 c
-2136 3455.74 l
-2136 3463.19 2138.52 3465 2148.41 3465 c
-2167.13 3465 2178.8 3461.64 2185.04 3454.74 c
-2189.47 3449.71 2191.68 3444.27 2194.5 3431.59 c
-2199.33 3431.59 l
-h
-2204.96 3336 m
-f*
-2249.19 3429 m
-2210.84 3429 l
-2210.84 3423.95 l
-2219.49 3422.74 2222 3420.12 2222 3412.07 c
-2222 3352.9 l
-2222 3344.65 2219.93 3342.44 2210.84 3340.83 c
-2210.84 3336 l
-2264.37 3336 l
-2264.37 3340.83 l
-2252.09 3341.63 2250 3344.25 2250 3356.73 c
-2250 3394.76 l
-2250 3405.23 2255.49 3413.88 2261.95 3413.88 c
-2263.56 3413.88 2265.37 3412.47 2267.59 3409.25 c
-2271.41 3403.82 2274.43 3402.01 2279.66 3402.01 c
-2287.11 3402.01 2292.34 3407.64 2292.34 3415.29 c
-2292.34 3424.55 2285.5 3431.41 2276.04 3431.41 c
-2266.1 3431.41 2258.54 3426.12 2249.19 3412.27 c
-h
-2294.35 3336 m
-f*
-2389.19 3348.88 m
-2387.18 3346.87 l
-2386.57 3346.26 2385.97 3346.06 2384.96 3346.06 c
-2382.15 3346.06 2381 3347.67 2381 3351.09 c
-2381 3403.62 l
-2381 3420.73 2365.6 3431.42 2340.89 3431.42 c
-2318.15 3431.42 2302.85 3421.06 2302.85 3405.83 c
-2302.85 3397.38 2307.69 3392.55 2315.94 3392.55 c
-2323.99 3392.55 2329.62 3397.38 2329.62 3404.22 c
-2329.62 3407.04 2328.61 3409.66 2326 3412.88 c
-2324.19 3414.89 2323.58 3416.1 2323.58 3417.3 c
-2323.58 3421.53 2329.02 3424.42 2336.26 3424.42 c
-2348.14 3424.42 2353.86 3419.08 2353.86 3407.04 c
-2353.86 3392.35 l
-2329.91 3385.1 2320.29 3381.48 2312.51 3376.45 c
-2303.46 3370.41 2299 3363.37 2299 3354.52 c
-2299 3342.24 2308.27 3333.18 2321.17 3333.18 c
-2332.84 3333.18 2342.1 3337.21 2353.17 3347.27 c
-2355.38 3337.01 2359.81 3333.18 2369.67 3333.18 c
-2378.32 3333.18 2384.56 3336.4 2392.21 3344.65 c
-h
-2353 3356.13 m
-2347.55 3349.89 2343.52 3347.47 2338.68 3347.47 c
-2332.64 3347.47 2328 3352.91 2328 3360.96 c
-2328 3372.63 2336.61 3380.88 2353 3385.31 c
-h
-2394.62 3336 m
-f*
-2436.4 3429 m
-2397.7 3429 l
-2397.7 3423.95 l
-2406.55 3422.74 2409 3420.32 2409 3412.07 c
-2409 3352.9 l
-2409 3344.65 2406.74 3342.44 2397.7 3340.83 c
-2397.7 3336 l
-2446 3336 l
-2446 3340.83 l
-2438.95 3341.84 2437 3344.65 2437 3352.3 c
-2437 3406.03 l
-2437 3407.04 2439.87 3410.66 2442.18 3412.88 c
-2446.4 3416.1 2450.02 3418.42 2453.65 3418.42 c
-2461.5 3418.42 2465 3413.59 2465 3401 c
-2465 3352.3 l
-2465 3344.05 2462.68 3341.43 2454.85 3340.83 c
-2454.85 3336 l
-2501.95 3336 l
-2501.95 3340.83 l
-2494.9 3341.64 2493 3344.65 2493 3352.3 c
-2493 3406.03 l
-2493 3407.04 2495.73 3410.46 2497.92 3412.68 c
-2502.35 3416.1 2505.97 3418.42 2509.59 3418.42 c
-2517.24 3418.42 2520 3413.38 2520 3401 c
-2520 3352.3 l
-2520 3343.85 2517.85 3341.43 2510.4 3340.83 c
-2510.4 3336 l
-2558.3 3336 l
-2558.3 3341 l
-2550.45 3341.4 2548 3343.78 2548 3352.3 c
-2548 3402.81 l
-2548 3420.12 2537.43 3431.42 2521.07 3431.42 c
-2509.59 3431.42 2501.95 3426.73 2491.48 3413.68 c
-2485.44 3426.36 2478.4 3431.42 2465.72 3431.42 c
-2452.95 3431.42 2443.98 3425.91 2436.4 3413.68 c
-h
-2561.64 3336 m
-f*
-2639.9 3361.16 m
-2631.65 3351.29 2625.61 3347.18 2616.96 3347.18 c
-2609.31 3347.18 2603.27 3350.77 2599.25 3357.94 c
-2595.43 3364.54 2593.82 3371.56 2593.01 3386 c
-2643.73 3386 l
-2642.52 3402.36 2639.5 3411.43 2633.26 3419.12 c
-2626.82 3426.96 2617.36 3431.42 2606.09 3431.42 c
-2580.94 3431.42 2564.03 3411.4 2564.03 3381.88 c
-2564.03 3352.5 2580.53 3333.18 2605.49 3333.18 c
-2621.79 3333.18 2631.65 3339.42 2644.73 3358.34 c
-h
-2592 3393 m
-2592.61 3416.96 2596.23 3424.42 2606.09 3424.42 c
-2611.93 3424.42 2615.55 3421.38 2617.16 3415.49 c
-2618.17 3411.67 2618.57 3406.03 2618.97 3395.77 c
-2618.97 3393 l
-h
-2648.35 3336 m
-f*
-q[1 0 0 1 0 0]concat
-66 97 true[1 0 0 1 -2684 -3336]@85 imagemask
-z"98D:z
-!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z
-"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$
-s8Tk7z"98D:z!!E9$^]4?7!!!-$s1eU7!!!!$s8Tk7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!
-s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!
-s8TkVs8W-!s8W,7+92B at s8W-!^`WUVs8W-!s1f`Vs8W-!s8TkVs8W-!s8W,7++O=k"98D:!"XS[!!E9$
-^]4n\!!!-$s1eU>huE`Zs8Tk7"7Q9j"98D:!!D]j!!E9$^]4E1!!!-$s1eU7qu?^!s8Tk7!;lfs"98D:!!%HJ!!E9$
-^]4@!!!!-$s1eU75C`_9s8Tk7!$?^k"98D:!!!PF!!E9$^]4?FhuElZs1eU7#Oh]qs8Tk7!!D]j"98D:
-!!!,r!!E9$^]4?8qu?j!s1eU7!;lg!s8Tk7!!%HJ"98D:!!!"K!!E9$^]4?75C`k9s1eU7!$?^ns8Tk7
-!!"+V"98D:!!!!0huj#Z^]4?7#N,^as1eU7!!D]ms8Tk7!!!,r"98D:!!!!"qud!!^]4?7!;ls!s1eU7!!%HMs8Tk7
-!!!"K"98D:z56Lrc^]4?7!$?jns1eU7!!!PIs8Tk7!!!!0j8].pz#NPja^]4?7!!Dims1eU7
-!!!&ss8Tk7!!!!"qu?]3z!<<*!^]4?7!!%NKs1eU7!!!!`s8Tk7z5QCc!z!$D7@^]4?7
-!!!Q0s1eU7!!!!(s8Tk7z#QOh>z!!E9$^]4?7!!!'"s1eU7zs8Tk7z!<<)7z!!%NK^]4?7
-!!!!`s1eU7z+90+Vz!$D6Vz!!!Q0^]4?7!!!!(s1eU7z"96.:z!!E8:!!~>
-Q
-1 i
-0.564706 g
-5322.95 3054.95 m
-5322.95 3166.55 5231.75 3257.75 5120.15 3257.75 c
-4623.35 3257.75 l
-4511.75 3257.75 4420.55 3166.55 4420.55 3054.95 c
-4420.55 2918.15 l
-4420.55 2806.55 4511.75 2715.35 4623.35 2715.35 c
-5120.15 2715.35 l
-5231.75 2715.35 5322.95 2806.55 5322.95 2918.15 c
-f*
-1 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-f*
-16 w
-0 g
-5253.35 3111.35 m
-5253.35 3219.35 5164.55 3306.95 5055.35 3306.95 c
-4569.35 3306.95 l
-4460.15 3306.95 4371.35 3219.35 4371.35 3111.35 c
-4371.35 2980.55 l
-4371.35 2872.55 4460.15 2784.95 4569.35 2784.95 c
-5055.35 2784.95 l
-5164.55 2784.95 5253.35 2872.55 5253.35 2980.55 c
-h
-S
-0.201248 i
-4599.33 3153 m
-4485.22 3153 l
-4485.22 3148 l
-4499.11 3147.2 4503 3144.18 4503 3133.72 c
-4503 3036.32 l
-4503 3025.85 4500.17 3023.64 4485.22 3022.03 c
-4485.22 3017 l
-4557.67 3017 l
-4557.67 3022 l
-4539.15 3022.81 4536 3025.23 4536 3036.32 c
-4536 3083.21 l
-4556.22 3082.81 4563.55 3075.36 4566.32 3052.02 c
-4571.35 3052.02 l
-4571.35 3120.04 l
-4566.32 3120.04 l
-4562.76 3097.1 4555.82 3090.05 4536 3090.05 c
-4536 3136.74 l
-4536 3144.19 4538.52 3146 4548.41 3146 c
-4567.13 3146 4578.8 3142.64 4585.04 3135.74 c
-4589.47 3130.71 4591.68 3125.27 4594.5 3112.59 c
-4599.33 3112.59 l
-h
-4604.96 3017 m
-f*
-4649.19 3110 m
-4610.84 3110 l
-4610.84 3104.95 l
-4619.49 3103.74 4622 3101.12 4622 3093.07 c
-4622 3033.9 l
-4622 3025.65 4619.93 3023.44 4610.84 3021.83 c
-4610.84 3017 l
-4664.37 3017 l
-4664.37 3021.83 l
-4652.09 3022.63 4650 3025.25 4650 3037.73 c
-4650 3075.76 l
-4650 3086.23 4655.49 3094.88 4661.95 3094.88 c
-4663.56 3094.88 4665.37 3093.47 4667.59 3090.25 c
-4671.41 3084.82 4674.43 3083.01 4679.66 3083.01 c
-4687.11 3083.01 4692.34 3088.64 4692.34 3096.29 c
-4692.34 3105.55 4685.5 3112.41 4676.04 3112.41 c
-4666.1 3112.41 4658.54 3107.12 4649.19 3093.27 c
-h
-4694.35 3017 m
-f*
-4789.19 3029.88 m
-4787.18 3027.87 l
-4786.57 3027.26 4785.97 3027.06 4784.96 3027.06 c
-4782.15 3027.06 4781 3028.67 4781 3032.09 c
-4781 3084.62 l
-4781 3101.73 4765.6 3112.42 4740.89 3112.42 c
-4718.15 3112.42 4702.85 3102.06 4702.85 3086.83 c
-4702.85 3078.38 4707.69 3073.55 4715.94 3073.55 c
-4723.99 3073.55 4729.62 3078.38 4729.62 3085.22 c
-4729.62 3088.04 4728.61 3090.66 4726 3093.88 c
-4724.19 3095.89 4723.58 3097.1 4723.58 3098.3 c
-4723.58 3102.53 4729.02 3105.42 4736.26 3105.42 c
-4748.14 3105.42 4753.86 3100.08 4753.86 3088.04 c
-4753.86 3073.35 l
-4729.91 3066.1 4720.29 3062.48 4712.51 3057.45 c
-4703.46 3051.41 4699 3044.37 4699 3035.52 c
-4699 3023.24 4708.27 3014.18 4721.17 3014.18 c
-4732.84 3014.18 4742.1 3018.21 4753.17 3028.27 c
-4755.38 3018.01 4759.81 3014.18 4769.67 3014.18 c
-4778.32 3014.18 4784.56 3017.4 4792.21 3025.65 c
-h
-4753 3037.13 m
-4747.55 3030.89 4743.52 3028.47 4738.68 3028.47 c
-4732.64 3028.47 4728 3033.91 4728 3041.96 c
-4728 3053.63 4736.61 3061.88 4753 3066.31 c
-h
-4794.62 3017 m
-f*
-4836.4 3110 m
-4797.7 3110 l
-4797.7 3104.95 l
-4806.55 3103.74 4809 3101.32 4809 3093.07 c
-4809 3033.9 l
-4809 3025.65 4806.74 3023.44 4797.7 3021.83 c
-4797.7 3017 l
-4846 3017 l
-4846 3021.83 l
-4838.95 3022.84 4837 3025.65 4837 3033.3 c
-4837 3087.03 l
-4837 3088.04 4839.87 3091.66 4842.18 3093.88 c
-4846.4 3097.1 4850.02 3099.42 4853.65 3099.42 c
-4861.5 3099.42 4865 3094.59 4865 3082 c
-4865 3033.3 l
-4865 3025.05 4862.68 3022.43 4854.85 3021.83 c
-4854.85 3017 l
-4901.95 3017 l
-4901.95 3021.83 l
-4894.9 3022.64 4893 3025.65 4893 3033.3 c
-4893 3087.03 l
-4893 3088.04 4895.73 3091.46 4897.92 3093.68 c
-4902.35 3097.1 4905.97 3099.42 4909.59 3099.42 c
-4917.24 3099.42 4920 3094.38 4920 3082 c
-4920 3033.3 l
-4920 3024.85 4917.85 3022.43 4910.4 3021.83 c
-4910.4 3017 l
-4958.3 3017 l
-4958.3 3022 l
-4950.45 3022.4 4948 3024.78 4948 3033.3 c
-4948 3083.81 l
-4948 3101.12 4937.43 3112.42 4921.07 3112.42 c
-4909.59 3112.42 4901.95 3107.73 4891.48 3094.68 c
-4885.44 3107.36 4878.4 3112.42 4865.72 3112.42 c
-4852.95 3112.42 4843.98 3106.91 4836.4 3094.68 c
-h
-4961.64 3017 m
-f*
-5039.9 3042.16 m
-5031.65 3032.29 5025.61 3028.18 5016.96 3028.18 c
-5009.31 3028.18 5003.27 3031.77 4999.25 3038.94 c
-4995.43 3045.54 4993.82 3052.56 4993.01 3067 c
-5043.73 3067 l
-5042.52 3083.36 5039.5 3092.43 5033.26 3100.12 c
-5026.82 3107.96 5017.36 3112.42 5006.09 3112.42 c
-4980.94 3112.42 4964.03 3092.4 4964.03 3062.88 c
-4964.03 3033.5 4980.53 3014.18 5005.49 3014.18 c
-5021.79 3014.18 5031.65 3020.42 5044.73 3039.34 c
-h
-4992 3074 m
-4992.61 3097.96 4996.23 3105.42 5006.09 3105.42 c
-5011.93 3105.42 5015.55 3102.38 5017.16 3096.49 c
-5018.17 3092.67 5018.57 3087.03 5018.97 3076.77 c
-5018.97 3074 l
-h
-5048.35 3017 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -5092 -3017]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-2904.95 2348.15 m
-2904.95 2458.55 2813.75 2549.75 2702.15 2549.75 c
-2206.55 2549.75 l
-2094.95 2549.75 2003.75 2458.55 2003.75 2348.15 c
-2003.75 2210.15 l
-2003.75 2099.75 2094.95 2008.55 2206.55 2008.55 c
-2702.15 2008.55 l
-2813.75 2008.55 2904.95 2099.75 2904.95 2210.15 c
-f*
-1 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-f*
-32 w
-0 g
-2825.75 2402.15 m
-2825.75 2505.35 2739.35 2589.35 2632.55 2589.35 c
-2157.35 2589.35 l
-2050.55 2589.35 1964.15 2505.35 1964.15 2402.15 c
-1964.15 2274.95 l
-1964.15 2171.75 2050.55 2087.75 2157.35 2087.75 c
-2632.55 2087.75 l
-2739.35 2087.75 2825.75 2171.75 2825.75 2274.95 c
-h
-S
-0.201248 i
-2182.33 2445 m
-2068.22 2445 l
-2068.22 2440 l
-2082.11 2439.2 2086 2436.18 2086 2425.72 c
-2086 2328.32 l
-2086 2317.85 2083.17 2315.64 2068.22 2314.03 c
-2068.22 2309 l
-2140.67 2309 l
-2140.67 2314 l
-2122.15 2314.81 2119 2317.23 2119 2328.32 c
-2119 2375.21 l
-2139.22 2374.81 2146.55 2367.36 2149.32 2344.02 c
-2154.35 2344.02 l
-2154.35 2412.04 l
-2149.32 2412.04 l
-2145.76 2389.1 2138.82 2382.05 2119 2382.05 c
-2119 2428.74 l
-2119 2436.19 2121.52 2438 2131.41 2438 c
-2150.13 2438 2161.8 2434.64 2168.04 2427.74 c
-2172.47 2422.71 2174.68 2417.27 2177.5 2404.59 c
-2182.33 2404.59 l
-h
-2187.96 2309 m
-f*
-2231.19 2402 m
-2192.84 2402 l
-2192.84 2396.95 l
-2201.49 2395.74 2204 2393.12 2204 2385.07 c
-2204 2325.9 l
-2204 2317.65 2201.93 2315.44 2192.84 2313.83 c
-2192.84 2309 l
-2246.37 2309 l
-2246.37 2313.83 l
-2234.09 2314.63 2232 2317.25 2232 2329.73 c
-2232 2367.76 l
-2232 2378.23 2237.49 2386.88 2243.95 2386.88 c
-2245.56 2386.88 2247.37 2385.47 2249.59 2382.25 c
-2253.41 2376.82 2256.43 2375.01 2261.66 2375.01 c
-2269.11 2375.01 2274.34 2380.64 2274.34 2388.29 c
-2274.34 2397.55 2267.5 2404.41 2258.04 2404.41 c
-2248.1 2404.41 2240.54 2399.12 2231.19 2385.27 c
-h
-2276.35 2309 m
-f*
-2371.19 2321.88 m
-2369.18 2319.87 l
-2368.57 2319.26 2367.97 2319.06 2366.96 2319.06 c
-2364.15 2319.06 2363 2320.67 2363 2324.09 c
-2363 2376.62 l
-2363 2393.73 2347.6 2404.42 2322.89 2404.42 c
-2300.15 2404.42 2284.85 2394.06 2284.85 2378.83 c
-2284.85 2370.38 2289.69 2365.55 2297.94 2365.55 c
-2305.99 2365.55 2311.62 2370.38 2311.62 2377.22 c
-2311.62 2380.04 2310.61 2382.66 2308 2385.88 c
-2306.19 2387.89 2305.58 2389.1 2305.58 2390.3 c
-2305.58 2394.53 2311.02 2397.42 2318.26 2397.42 c
-2330.14 2397.42 2335.86 2392.08 2335.86 2380.04 c
-2335.86 2365.35 l
-2311.91 2358.1 2302.29 2354.48 2294.51 2349.45 c
-2285.46 2343.41 2281 2336.37 2281 2327.52 c
-2281 2315.24 2290.27 2306.18 2303.17 2306.18 c
-2314.84 2306.18 2324.1 2310.21 2335.17 2320.27 c
-2337.38 2310.01 2341.81 2306.18 2351.67 2306.18 c
-2360.32 2306.18 2366.56 2309.4 2374.21 2317.65 c
-h
-2335 2329.13 m
-2329.55 2322.89 2325.52 2320.47 2320.68 2320.47 c
-2314.64 2320.47 2310 2325.91 2310 2333.96 c
-2310 2345.63 2318.61 2353.88 2335 2358.31 c
-h
-2376.62 2309 m
-f*
-2418.4 2402 m
-2379.7 2402 l
-2379.7 2396.95 l
-2388.55 2395.74 2391 2393.32 2391 2385.07 c
-2391 2325.9 l
-2391 2317.65 2388.74 2315.44 2379.7 2313.83 c
-2379.7 2309 l
-2428 2309 l
-2428 2313.83 l
-2420.95 2314.84 2419 2317.65 2419 2325.3 c
-2419 2379.03 l
-2419 2380.04 2421.87 2383.66 2424.18 2385.88 c
-2428.4 2389.1 2432.02 2391.42 2435.65 2391.42 c
-2443.5 2391.42 2447 2386.59 2447 2374 c
-2447 2325.3 l
-2447 2317.05 2444.68 2314.43 2436.85 2313.83 c
-2436.85 2309 l
-2483.95 2309 l
-2483.95 2313.83 l
-2476.9 2314.64 2475 2317.65 2475 2325.3 c
-2475 2379.03 l
-2475 2380.04 2477.73 2383.46 2479.92 2385.68 c
-2484.35 2389.1 2487.97 2391.42 2491.59 2391.42 c
-2499.24 2391.42 2502 2386.38 2502 2374 c
-2502 2325.3 l
-2502 2316.85 2499.85 2314.43 2492.4 2313.83 c
-2492.4 2309 l
-2540.3 2309 l
-2540.3 2314 l
-2532.45 2314.4 2530 2316.78 2530 2325.3 c
-2530 2375.81 l
-2530 2393.12 2519.43 2404.42 2503.07 2404.42 c
-2491.59 2404.42 2483.95 2399.73 2473.48 2386.68 c
-2467.44 2399.36 2460.4 2404.42 2447.72 2404.42 c
-2434.95 2404.42 2425.98 2398.91 2418.4 2386.68 c
-h
-2543.64 2309 m
-f*
-2623.9 2334.16 m
-2615.65 2324.29 2609.61 2320.18 2600.96 2320.18 c
-2593.31 2320.18 2587.27 2323.77 2583.25 2330.94 c
-2579.43 2337.54 2577.82 2344.56 2577.01 2359 c
-2627.73 2359 l
-2626.52 2375.36 2623.5 2384.43 2617.26 2392.12 c
-2610.82 2399.96 2601.36 2404.42 2590.09 2404.42 c
-2564.94 2404.42 2548.03 2384.4 2548.03 2354.88 c
-2548.03 2325.5 2564.53 2306.18 2589.49 2306.18 c
-2605.79 2306.18 2615.65 2312.42 2628.73 2331.34 c
-h
-2576 2366 m
-2576.61 2389.96 2580.23 2397.42 2590.09 2397.42 c
-2595.93 2397.42 2599.55 2394.38 2601.16 2388.49 c
-2602.17 2384.67 2602.57 2379.03 2602.97 2368.77 c
-2602.97 2366 l
-h
-2632.35 2309 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -2666 -2307]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-16 w
-3375.35 2243.75 m
-3324.95 2510.15 3179.75 2691.35 3016.55 2691.35 c
-2968.55 2691.35 2920.55 2675.75 2876.15 2645.75 c
-S
-2870.15 2711.75 m
-2894.15 2654.15 l
-2949.35 2628.95 l
-2776.55 2542.55 l
-f*
-0.564706 g
-4298.15 2844.95 m
-4163.75 2880.95 l
-4259.75 2937.35 l
-4106.15 2945.75 l
-4148.15 3016.55 l
-4000.55 2996.15 l
-3983.75 3066.95 l
-3863.75 3022.55 l
-3788.15 3086.15 l
-3712.55 3022.55 l
-3592.55 3066.95 l
-3574.55 2996.15 l
-3425.75 3016.55 l
-3470.15 2945.75 l
-3316.55 2937.35 l
-3412.55 2880.95 l
-3276.95 2844.95 l
-3412.55 2810.15 l
-3316.55 2753.75 l
-3470.15 2744.15 l
-3425.75 2674.55 l
-3574.55 2694.95 l
-3592.55 2622.95 l
-3712.55 2668.55 l
-3788.15 2604.95 l
-3863.75 2668.55 l
-3983.75 2622.95 l
-4000.55 2694.95 l
-4148.15 2674.55 l
-4106.15 2744.15 l
-4259.75 2753.75 l
-4163.75 2810.15 l
-f*
-1 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-f*
-0 g
-4238.15 2904.95 m
-4103.75 2940.95 l
-4199.75 2997.35 l
-4046.15 3005.75 l
-4088.15 3076.55 l
-3940.55 3056.15 l
-3923.75 3126.95 l
-3803.75 3082.55 l
-3728.15 3146.15 l
-3652.55 3082.55 l
-3532.55 3126.95 l
-3514.55 3056.15 l
-3365.75 3076.55 l
-3410.15 3005.75 l
-3256.55 2997.35 l
-3352.55 2940.95 l
-3216.95 2904.95 l
-3352.55 2870.15 l
-3256.55 2813.75 l
-3410.15 2804.15 l
-3365.75 2734.55 l
-3514.55 2754.95 l
-3532.55 2682.95 l
-3652.55 2728.55 l
-3728.15 2664.95 l
-3803.75 2728.55 l
-3923.75 2682.95 l
-3940.55 2754.95 l
-4088.15 2734.55 l
-4046.15 2804.15 l
-4199.75 2813.75 l
-4103.75 2870.15 l
-4238.15 2904.95 l
-4161.35 2904.95 l
-4052.15 2877.35 l
-4132.55 2829.35 l
-4012.55 2822.15 l
-4049.75 2759.75 l
-3926.15 2777.75 l
-3909.35 2709.35 l
-3800.15 2751.35 l
-3728.15 2691.35 l
-3656.15 2751.35 l
-3545.75 2709.35 l
-3530.15 2777.75 l
-3406.55 2759.75 l
-3444.95 2822.15 l
-3323.75 2829.35 l
-3404.15 2877.35 l
-3294.95 2904.95 l
-3404.15 2933.75 l
-3323.75 2980.55 l
-3444.95 2988.95 l
-3406.55 3051.35 l
-3530.15 3033.35 l
-3545.75 3100.55 l
-3656.15 3059.75 l
-3728.15 3119.75 l
-3800.15 3059.75 l
-3909.35 3100.55 l
-3926.15 3033.35 l
-4049.75 3051.35 l
-4012.55 2988.95 l
-4132.55 2980.55 l
-4052.15 2933.75 l
-4161.35 2904.95 l
-4238.15 2904.95 l
-f*
-0.2 i
-3550.08 2956.76 m
-3530.08 2882.52 l
-3527.52 2873.88 3524.48 2871.64 3514.08 2871 c
-3514.08 2867 l
-3564 2867 l
-3564 2871 l
-3554.72 2871.48 3552.48 2872.76 3552.48 2877.88 c
-3552.48 2879.64 3552.8 2881.4 3553.76 2885.08 c
-3553.92 2885.88 l
-3554.08 2886.68 l
-3573.76 2958.52 l
-3576.16 2966.84 3578.56 2969.08 3586.72 2970.04 c
-3586.72 2974 l
-3552.8 2974 l
-3503.2 2897.24 l
-3494.56 2974 l
-3459.2 2974 l
-3459.2 2970 l
-3469.28 2969.52 3470.72 2968.89 3470.72 2964.44 c
-3470.72 2962.2 3470.08 2959.32 3468.96 2955.16 c
-3451.52 2895.48 l
-3445.12 2874.68 3444 2872.92 3435.36 2871 c
-3435.36 2867 l
-3468.48 2867 l
-3468.48 2871 l
-3458.24 2872.28 3455.68 2874.2 3455.68 2880.76 c
-3455.68 2883.48 3456.48 2887.48 3458.72 2895.48 c
-3474.88 2954.52 l
-3485.6 2865.08 l
-3490.08 2865.08 l
-h
-3582.24 2867 m
-f*
-3651.44 2887.32 m
-3644.88 2878.52 3642.48 2875.76 3639.92 2875.76 c
-3638.64 2875.76 3638 2876.86 3638 2878.52 c
-3638 2882.52 3639.44 2889.08 3643.44 2902.2 c
-3654.8 2939.96 l
-3637.04 2938.84 l
-3634.16 2929.4 l
-3632.72 2937.56 3629.2 2941.08 3622.32 2941.08 c
-3602.64 2941.08 3579 2910.27 3579 2885.24 c
-3579 2873.08 3585.74 2864.92 3595.92 2864.92 c
-3605.68 2864.92 3613.04 2870.68 3622.16 2886.04 c
-3620.24 2879.48 3620 2877.56 3620 2875.32 c
-3620 2869.4 3624.76 2864.76 3630.64 2864.76 c
-3638.16 2864.76 3645.52 2871 3654.8 2884.92 c
-h
-3624.56 2934.2 m
-3628.08 2933.88 3630.56 2931 3630.56 2926.68 c
-3630.56 2917.08 3625.24 2899.32 3618.96 2888.28 c
-3614.64 2880.44 3609.84 2875.92 3605.52 2875.92 c
-3601.36 2875.92 3598 2879.75 3598 2884.92 c
-3598 2893.24 3603.42 2909.24 3610.16 2921.08 c
-3614.96 2929.56 3620.24 2934.52 3624.56 2934.2 c
-h
-3662 2867 m
-f*
-3696.56 2940.92 m
-3680.24 2938.36 3674 2937.4 3665.68 2936.44 c
-3665.68 2932 l
-3672.88 2931.69 3674.32 2931.07 3674.32 2928.12 c
-3674.32 2926.52 3673.04 2920.76 3670.8 2912.44 c
-3654.8 2850.36 l
-3651.76 2839.8 3650.48 2838.84 3642.8 2839 c
-3642.8 2834 l
-3682.64 2834 l
-3682.64 2839 l
-3674.64 2839.14 3672.24 2840.16 3672.24 2843.64 c
-3672.24 2845.88 3673.36 2850.68 3676.4 2861.88 c
-3677.52 2865.72 3677.52 2866.04 3678.16 2868.44 c
-3683.76 2865.56 3685.68 2864.92 3689.04 2864.92 c
-3710.8 2864.92 3733.36 2893.88 3733.36 2921.56 c
-3733.36 2933.4 3726.64 2941.08 3716.08 2941.08 c
-3706.96 2941.08 3699.92 2935.92 3690.48 2922.52 c
-h
-3707.12 2929.56 m
-3711.28 2929.24 3713.68 2925.56 3713.36 2920.44 c
-3712.72 2909.88 3707.6 2894.04 3701.84 2883.64 c
-3696.88 2875 3691.76 2869.92 3686.32 2869.92 c
-3682.8 2869.92 3680.08 2872.75 3680.08 2876.28 c
-3680.08 2879 3681.84 2885.56 3686.16 2900.12 c
-3689.68 2911.8 3691.12 2915.8 3693.52 2919.48 c
-3697.52 2925.72 3702.96 2929.88 3707.12 2929.56 c
-h
-3742 2867 m
-f*
-3777.56 2940.92 m
-3761.24 2938.36 3755 2937.4 3746.68 2936.44 c
-3746.68 2932 l
-3753.88 2931.69 3755.32 2931.07 3755.32 2928.12 c
-3755.32 2926.52 3754.04 2920.76 3751.8 2912.44 c
-3735.8 2850.36 l
-3732.76 2839.8 3731.48 2838.84 3723.8 2839 c
-3723.8 2834 l
-3763.64 2834 l
-3763.64 2839 l
-3755.64 2839.14 3753.24 2840.16 3753.24 2843.64 c
-3753.24 2845.88 3754.36 2850.68 3757.4 2861.88 c
-3758.52 2865.72 3758.52 2866.04 3759.16 2868.44 c
-3764.76 2865.56 3766.68 2864.92 3770.04 2864.92 c
-3791.8 2864.92 3814.36 2893.88 3814.36 2921.56 c
-3814.36 2933.4 3807.64 2941.08 3797.08 2941.08 c
-3787.96 2941.08 3780.92 2935.92 3771.48 2922.52 c
-h
-3788.12 2929.56 m
-3792.28 2929.24 3794.68 2925.56 3794.36 2920.44 c
-3793.72 2909.88 3788.6 2894.04 3782.84 2883.64 c
-3777.88 2875 3772.76 2869.92 3767.32 2869.92 c
-3763.8 2869.92 3761.08 2872.75 3761.08 2876.28 c
-3761.08 2879 3762.84 2885.56 3767.16 2900.12 c
-3770.68 2911.8 3772.12 2915.8 3774.52 2919.48 c
-3778.52 2925.72 3783.96 2929.88 3788.12 2929.56 c
-h
-3823 2867 m
-f*
-3856.56 2889.56 m
-3854.32 2886.36 l
-3850.16 2880.12 3846.48 2876.56 3844.08 2876.56 c
-3842.8 2876.56 3842 2877.77 3842 2879.16 c
-3842 2880.6 3842.62 2884.76 3843.12 2887.48 c
-3857.68 2940.92 l
-3849.22 2939 3838.26 2937.4 3826.04 2936.44 c
-3826.04 2932 l
-3827.44 2932 l
-3832.24 2932 3835.48 2930.44 3835.48 2927.48 c
-3835.48 2926.2 3834.71 2923.8 3833.68 2921.08 c
-3824.4 2886.68 l
-3823.12 2882.04 3823 2877.88 3823 2875.64 c
-3823 2869.56 3827.2 2865.56 3833.36 2865.56 c
-3842.96 2865.56 3848.88 2870.36 3860.08 2887.32 c
-h
-3852.88 2976.4 m
-3847.44 2976.4 3843 2971.46 3843 2966.04 c
-3843 2959.8 3847.26 2955.4 3853.04 2955.4 c
-3859.12 2955.4 3864 2959.86 3864 2965.56 c
-3864 2971.48 3859 2976.4 3852.88 2976.4 c
-h
-3866.48 2867 m
-f*
-3941.36 2888.6 m
-3934.96 2878.68 3932.88 2876.56 3930.16 2876.56 c
-3928.88 2876.56 3928 2877.63 3928 2879.16 c
-3928 2880.76 3928.94 2884.12 3931.92 2893.08 c
-3937.68 2910.52 l
-3940.24 2918.04 3942 2925.08 3942 2928.92 c
-3942 2936.76 3937.78 2941.08 3930.16 2941.08 c
-3924.24 2941.08 3918.48 2938.62 3914.16 2934.36 c
-3908.24 2928.76 3905.2 2924.92 3894.48 2909.08 c
-3904.72 2940.76 l
-3894.48 2938.52 3881.68 2936.92 3872.72 2936.6 c
-3872.72 2931.8 l
-3879.44 2931.65 3881.36 2930.92 3881.36 2928.12 c
-3881.36 2926.2 3879.12 2917.72 3874 2899.64 c
-3870.32 2886.68 3869.2 2882.52 3865.04 2867 c
-3884.4 2867 l
-3891.92 2894.68 3897.68 2908.6 3907.6 2921.56 c
-3910.8 2925.88 3915.76 2929.08 3918.64 2929.08 c
-3920.72 2929.08 3923 2927.63 3923 2926.04 c
-3923 2925.56 3922.54 2924.28 3921.84 2922.68 c
-3913.04 2896.12 l
-3910.48 2888.44 3909 2879.32 3909 2875.16 c
-3909 2869.08 3912.84 2865.56 3919.44 2865.56 c
-3929.04 2865.56 3935.6 2871 3944.88 2886.52 c
-h
-3954.96 2867 m
-f*
-4032.48 2936 m
-4014.72 2936 l
-4009.28 2939.58 4004.48 2941.08 3997.12 2941.08 c
-3977.44 2941.08 3961 2928.05 3961 2911.8 c
-3961 2903.64 3965.35 2897.88 3974.4 2894.2 c
-3961.28 2886.84 3959 2884.6 3959 2878.68 c
-3959 2873.56 3961.89 2870.52 3968.96 2868.12 c
-3959.04 2865.72 3955.84 2864.44 3952 2861.4 c
-3949.44 2859.16 3948 2855.32 3948 2851.48 c
-3948 2841.08 3959.56 2835 3977.76 2835 c
-4000.32 2835 4016 2844.72 4016 2858.52 c
-4016 2868.28 4009.6 2873.56 3992.16 2878.52 c
-3983.68 2880.92 l
-3978.56 2882.36 3975 2884.6 3975 2887 c
-3975 2889.56 3977.68 2892.28 3980 2892.28 c
-3980.8 2892.28 3981.92 2892.24 3983.2 2892.12 c
-3984.96 2891.64 3986.24 2891 3988.16 2891 c
-3995.2 2891 4002.4 2893.09 4008.48 2896.92 c
-4017.76 2902.2 4023 2910.36 4023 2919.96 c
-4023 2922.64 4022.59 2924.32 4021.76 2927 c
-4032.48 2927 l
-h
-3974.4 2866.04 m
-3976.32 2865.88 3988.48 2861.72 3992 2860.12 c
-3996.48 2857.88 3999 2855.16 3999 2851 c
-3999 2843.96 3991.8 2840 3979.36 2840 c
-3968.96 2840 3962 2845.1 3962 2852.44 c
-3962 2855.48 3963.32 2858.2 3966.24 2861.24 c
-3968.32 2863.32 3973.12 2866.2 3974.4 2866.04 c
-h
-3996.8 2936.08 m
-4000.96 2936.08 4004 2932.19 4004 2926.52 c
-4004 2921.08 4002.08 2913.4 3999.36 2907.48 c
-3996 2900.12 3991.84 2896 3986.88 2896 c
-3982.56 2896 3980 2899.52 3980 2905.88 c
-3980 2912.28 3982.79 2922.04 3986.24 2928.12 c
-3989.28 2933.4 3992.64 2936.08 3996.8 2936.08 c
-h
-4036 2867 m
-f*
-1 i
-0.564706 g
-4088.15 3789.35 m
-3953.75 3826.55 l
-4049.75 3881.75 l
-3896.15 3891.35 l
-3938.15 3960.95 l
-3790.55 3940.55 l
-3773.75 4012.55 l
-3653.75 3966.95 l
-3578.15 4030.55 l
-3502.55 3966.95 l
-3382.55 4012.55 l
-3364.55 3940.55 l
-3215.75 3960.95 l
-3260.15 3891.35 l
-3106.55 3881.75 l
-3202.55 3826.55 l
-3066.95 3789.35 l
-3202.55 3754.55 l
-3106.55 3698.15 l
-3260.15 3689.75 l
-3215.75 3620.15 l
-3364.55 3639.35 l
-3382.55 3568.55 l
-3502.55 3612.95 l
-3578.15 3549.35 l
-3653.75 3612.95 l
-3773.75 3568.55 l
-3790.55 3639.35 l
-3938.15 3620.15 l
-3896.15 3689.75 l
-4049.75 3698.15 l
-3953.75 3754.55 l
-f*
-1 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-f*
-0 g
-4028.15 3849.35 m
-3893.75 3886.55 l
-3989.75 3941.75 l
-3836.15 3951.35 l
-3878.15 4020.95 l
-3730.55 4000.55 l
-3713.75 4072.55 l
-3593.75 4026.95 l
-3518.15 4090.55 l
-3442.55 4026.95 l
-3322.55 4072.55 l
-3304.55 4000.55 l
-3155.75 4020.95 l
-3200.15 3951.35 l
-3046.55 3941.75 l
-3142.55 3886.55 l
-3006.95 3849.35 l
-3142.55 3814.55 l
-3046.55 3758.15 l
-3200.15 3749.75 l
-3155.75 3680.15 l
-3304.55 3699.35 l
-3322.55 3628.55 l
-3442.55 3672.95 l
-3518.15 3609.35 l
-3593.75 3672.95 l
-3713.75 3628.55 l
-3730.55 3699.35 l
-3878.15 3680.15 l
-3836.15 3749.75 l
-3989.75 3758.15 l
-3893.75 3814.55 l
-4028.15 3849.35 l
-3951.35 3849.35 l
-3842.15 3821.75 l
-3922.55 3774.95 l
-3802.55 3767.75 l
-3839.75 3704.15 l
-3716.15 3722.15 l
-3699.35 3654.95 l
-3590.15 3695.75 l
-3518.15 3635.75 l
-3446.15 3695.75 l
-3335.75 3654.95 l
-3320.15 3722.15 l
-3196.55 3704.15 l
-3234.95 3767.75 l
-3113.75 3774.95 l
-3194.15 3821.75 l
-3084.95 3849.35 l
-3194.15 3878.15 l
-3113.75 3926.15 l
-3234.95 3933.35 l
-3196.55 3995.75 l
-3320.15 3978.95 l
-3335.75 4046.15 l
-3446.15 4004.15 l
-3518.15 4064.15 l
-3590.15 4004.15 l
-3699.35 4046.15 l
-3716.15 3978.95 l
-3839.75 3995.75 l
-3802.55 3933.35 l
-3922.55 3926.15 l
-3842.15 3878.15 l
-3951.35 3849.35 l
-4028.15 3849.35 l
-f*
-0.2 i
-3340.08 3900.76 m
-3320.08 3826.52 l
-3317.52 3817.88 3314.48 3815.64 3304.08 3815 c
-3304.08 3811 l
-3354 3811 l
-3354 3815 l
-3344.72 3815.48 3342.48 3816.76 3342.48 3821.88 c
-3342.48 3823.64 3342.8 3825.4 3343.76 3829.08 c
-3343.92 3829.88 l
-3344.08 3830.68 l
-3363.76 3902.52 l
-3366.16 3910.84 3368.56 3913.08 3376.72 3914.04 c
-3376.72 3918 l
-3342.8 3918 l
-3293.2 3841.24 l
-3284.56 3918 l
-3249.2 3918 l
-3249.2 3914 l
-3259.28 3913.52 3260.72 3912.89 3260.72 3908.44 c
-3260.72 3906.2 3260.08 3903.32 3258.96 3899.16 c
-3241.52 3839.48 l
-3235.12 3818.68 3234 3816.92 3225.36 3815 c
-3225.36 3811 l
-3258.48 3811 l
-3258.48 3815 l
-3248.24 3816.28 3245.68 3818.2 3245.68 3824.76 c
-3245.68 3827.48 3246.48 3831.48 3248.72 3839.48 c
-3264.88 3898.52 l
-3275.6 3809.08 l
-3280.08 3809.08 l
-h
-3372.24 3811 m
-f*
-3441.44 3831.32 m
-3434.88 3822.52 3432.48 3819.76 3429.92 3819.76 c
-3428.64 3819.76 3428 3820.86 3428 3822.52 c
-3428 3826.52 3429.44 3833.08 3433.44 3846.2 c
-3444.8 3883.96 l
-3427.04 3882.84 l
-3424.16 3873.4 l
-3422.72 3881.56 3419.2 3885.08 3412.32 3885.08 c
-3392.64 3885.08 3369 3854.27 3369 3829.24 c
-3369 3817.08 3375.74 3808.92 3385.92 3808.92 c
-3395.68 3808.92 3403.04 3814.68 3412.16 3830.04 c
-3410.24 3823.48 3410 3821.56 3410 3819.32 c
-3410 3813.4 3414.76 3808.76 3420.64 3808.76 c
-3428.16 3808.76 3435.52 3815 3444.8 3828.92 c
-h
-3414.56 3878.2 m
-3418.08 3877.88 3420.56 3875 3420.56 3870.68 c
-3420.56 3861.08 3415.24 3843.32 3408.96 3832.28 c
-3404.64 3824.44 3399.84 3819.92 3395.52 3819.92 c
-3391.36 3819.92 3388 3823.75 3388 3828.92 c
-3388 3837.24 3393.42 3853.24 3400.16 3865.08 c
-3404.96 3873.56 3410.24 3878.52 3414.56 3878.2 c
-h
-3452 3811 m
-f*
-3486.56 3884.92 m
-3470.24 3882.36 3464 3881.4 3455.68 3880.44 c
-3455.68 3876 l
-3462.88 3875.69 3464.32 3875.07 3464.32 3872.12 c
-3464.32 3870.52 3463.04 3864.76 3460.8 3856.44 c
-3444.8 3794.36 l
-3441.76 3783.8 3440.48 3782.84 3432.8 3783 c
-3432.8 3778 l
-3472.64 3778 l
-3472.64 3783 l
-3464.64 3783.14 3462.24 3784.16 3462.24 3787.64 c
-3462.24 3789.88 3463.36 3794.68 3466.4 3805.88 c
-3467.52 3809.72 3467.52 3810.04 3468.16 3812.44 c
-3473.76 3809.56 3475.68 3808.92 3479.04 3808.92 c
-3500.8 3808.92 3523.36 3837.88 3523.36 3865.56 c
-3523.36 3877.4 3516.64 3885.08 3506.08 3885.08 c
-3496.96 3885.08 3489.92 3879.92 3480.48 3866.52 c
-h
-3497.12 3873.56 m
-3501.28 3873.24 3503.68 3869.56 3503.36 3864.44 c
-3502.72 3853.88 3497.6 3838.04 3491.84 3827.64 c
-3486.88 3819 3481.76 3813.92 3476.32 3813.92 c
-3472.8 3813.92 3470.08 3816.75 3470.08 3820.28 c
-3470.08 3823 3471.84 3829.56 3476.16 3844.12 c
-3479.68 3855.8 3481.12 3859.8 3483.52 3863.48 c
-3487.52 3869.72 3492.96 3873.88 3497.12 3873.56 c
-h
-3532 3811 m
-f*
-3567.56 3884.92 m
-3551.24 3882.36 3545 3881.4 3536.68 3880.44 c
-3536.68 3876 l
-3543.88 3875.69 3545.32 3875.07 3545.32 3872.12 c
-3545.32 3870.52 3544.04 3864.76 3541.8 3856.44 c
-3525.8 3794.36 l
-3522.76 3783.8 3521.48 3782.84 3513.8 3783 c
-3513.8 3778 l
-3553.64 3778 l
-3553.64 3783 l
-3545.64 3783.14 3543.24 3784.16 3543.24 3787.64 c
-3543.24 3789.88 3544.36 3794.68 3547.4 3805.88 c
-3548.52 3809.72 3548.52 3810.04 3549.16 3812.44 c
-3554.76 3809.56 3556.68 3808.92 3560.04 3808.92 c
-3581.8 3808.92 3604.36 3837.88 3604.36 3865.56 c
-3604.36 3877.4 3597.64 3885.08 3587.08 3885.08 c
-3577.96 3885.08 3570.92 3879.92 3561.48 3866.52 c
-h
-3578.12 3873.56 m
-3582.28 3873.24 3584.68 3869.56 3584.36 3864.44 c
-3583.72 3853.88 3578.6 3838.04 3572.84 3827.64 c
-3567.88 3819 3562.76 3813.92 3557.32 3813.92 c
-3553.8 3813.92 3551.08 3816.75 3551.08 3820.28 c
-3551.08 3823 3552.84 3829.56 3557.16 3844.12 c
-3560.68 3855.8 3562.12 3859.8 3564.52 3863.48 c
-3568.52 3869.72 3573.96 3873.88 3578.12 3873.56 c
-h
-3613 3811 m
-f*
-3646.56 3833.56 m
-3644.32 3830.36 l
-3640.16 3824.12 3636.48 3820.56 3634.08 3820.56 c
-3632.8 3820.56 3632 3821.77 3632 3823.16 c
-3632 3824.6 3632.62 3828.76 3633.12 3831.48 c
-3647.68 3884.92 l
-3639.22 3883 3628.26 3881.4 3616.04 3880.44 c
-3616.04 3876 l
-3617.44 3876 l
-3622.24 3876 3625.48 3874.44 3625.48 3871.48 c
-3625.48 3870.2 3624.71 3867.8 3623.68 3865.08 c
-3614.4 3830.68 l
-3613.12 3826.04 3613 3821.88 3613 3819.64 c
-3613 3813.56 3617.2 3809.56 3623.36 3809.56 c
-3632.96 3809.56 3638.88 3814.36 3650.08 3831.32 c
-h
-3642.88 3920.4 m
-3637.44 3920.4 3633 3915.46 3633 3910.04 c
-3633 3903.8 3637.26 3899.4 3643.04 3899.4 c
-3649.12 3899.4 3654 3903.86 3654 3909.56 c
-3654 3915.48 3649 3920.4 3642.88 3920.4 c
-h
-3656.48 3811 m
-f*
-3731.36 3832.6 m
-3724.96 3822.68 3722.88 3820.56 3720.16 3820.56 c
-3718.88 3820.56 3718 3821.63 3718 3823.16 c
-3718 3824.76 3718.94 3828.12 3721.92 3837.08 c
-3727.68 3854.52 l
-3730.24 3862.04 3732 3869.08 3732 3872.92 c
-3732 3880.76 3727.78 3885.08 3720.16 3885.08 c
-3714.24 3885.08 3708.48 3882.62 3704.16 3878.36 c
-3698.24 3872.76 3695.2 3868.92 3684.48 3853.08 c
-3694.72 3884.76 l
-3684.48 3882.52 3671.68 3880.92 3662.72 3880.6 c
-3662.72 3875.8 l
-3669.44 3875.65 3671.36 3874.92 3671.36 3872.12 c
-3671.36 3870.2 3669.12 3861.72 3664 3843.64 c
-3660.32 3830.68 3659.2 3826.52 3655.04 3811 c
-3674.4 3811 l
-3681.92 3838.68 3687.68 3852.6 3697.6 3865.56 c
-3700.8 3869.88 3705.76 3873.08 3708.64 3873.08 c
-3710.72 3873.08 3713 3871.63 3713 3870.04 c
-3713 3869.56 3712.54 3868.28 3711.84 3866.68 c
-3703.04 3840.12 l
-3700.48 3832.44 3699 3823.32 3699 3819.16 c
-3699 3813.08 3702.84 3809.56 3709.44 3809.56 c
-3719.04 3809.56 3725.6 3815 3734.88 3830.52 c
-h
-3744.96 3811 m
-f*
-3822.48 3880 m
-3804.72 3880 l
-3799.28 3883.58 3794.48 3885.08 3787.12 3885.08 c
-3767.44 3885.08 3751 3872.05 3751 3855.8 c
-3751 3847.64 3755.35 3841.88 3764.4 3838.2 c
-3751.28 3830.84 3749 3828.6 3749 3822.68 c
-3749 3817.56 3751.89 3814.52 3758.96 3812.12 c
-3749.04 3809.72 3745.84 3808.44 3742 3805.4 c
-3739.44 3803.16 3738 3799.32 3738 3795.48 c
-3738 3785.08 3749.56 3779 3767.76 3779 c
-3790.32 3779 3806 3788.72 3806 3802.52 c
-3806 3812.28 3799.6 3817.56 3782.16 3822.52 c
-3773.68 3824.92 l
-3768.56 3826.36 3765 3828.6 3765 3831 c
-3765 3833.56 3767.68 3836.28 3770 3836.28 c
-3770.8 3836.28 3771.92 3836.24 3773.2 3836.12 c
-3774.96 3835.64 3776.24 3835 3778.16 3835 c
-3785.2 3835 3792.4 3837.09 3798.48 3840.92 c
-3807.76 3846.2 3813 3854.36 3813 3863.96 c
-3813 3866.64 3812.59 3868.32 3811.76 3871 c
-3822.48 3871 l
-h
-3764.4 3810.04 m
-3766.32 3809.88 3778.48 3805.72 3782 3804.12 c
-3786.48 3801.88 3789 3799.16 3789 3795 c
-3789 3787.96 3781.8 3784 3769.36 3784 c
-3758.96 3784 3752 3789.1 3752 3796.44 c
-3752 3799.48 3753.32 3802.2 3756.24 3805.24 c
-3758.32 3807.32 3763.12 3810.2 3764.4 3810.04 c
-h
-3786.8 3880.08 m
-3790.96 3880.08 3794 3876.19 3794 3870.52 c
-3794 3865.08 3792.08 3857.4 3789.36 3851.48 c
-3786 3844.12 3781.84 3840 3776.88 3840 c
-3772.56 3840 3770 3843.52 3770 3849.88 c
-3770 3856.28 3772.79 3866.04 3776.24 3872.12 c
-3779.28 3877.4 3782.64 3880.08 3786.8 3880.08 c
-h
-3826 3811 m
-f*
-1 i
-1 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-f*
-0 g
-4822.55 3368.15 m
-4988.15 3521.75 l
-4906.55 3521.75 l
-4906.55 3672.95 l
-4739.75 3672.95 l
-4739.75 3521.75 l
-4658.15 3521.75 l
-4822.55 3368.15 l
-4822.55 3382.55 l
-4683.35 3512.15 l
-4749.35 3512.15 l
-4749.35 3663.35 l
-4895.75 3663.35 l
-4895.75 3512.15 l
-4964.15 3512.15 l
-4822.55 3382.55 l
-4822.55 3368.15 l
-f*
-0.2 i
-4375.88 3907 m
-4375.88 3902 l
-4388.3 3901.29 4392 3898.45 4392 3889.4 c
-4392 3802.28 l
-4392 3793.1 4389.25 3790.94 4375.88 3789.5 c
-4375.88 3785 l
-4433.84 3785 l
-4464.26 3785 4484 3798.5 4484 3818.84 c
-4484 3827.12 4480.73 3834.32 4474.7 3839.9 c
-4468.4 3845.48 4462.28 3848 4449.68 3850.7 c
-4470.56 3856.82 4478 3864.2 4478 3877.88 c
-4478 3896.42 4461.55 3907 4431.5 3907 c
-h
-4421 3846.74 m
-4425.92 3846.74 l
-4444.46 3846.74 4453 3837.2 4453 3817.22 c
-4453 3799.76 4445.77 3791 4431.5 3791 c
-4423.58 3791 4421 3793.99 4421 3801.74 c
-h
-4421 3892.46 m
-4421 3898.94 4423.39 3902 4430.24 3902 c
-4442.84 3902 4449 3894.03 4449 3876.62 c
-4449 3857.72 4443.08 3852.68 4421 3852.14 c
-h
-4493.06 3785 m
-f*
-4578.14 3796.52 m
-4576.34 3794.72 l
-4575.8 3794.18 4575.26 3794 4574.36 3794 c
-4571.84 3794 4571 3795.44 4571 3798.5 c
-4571 3845.48 l
-4571 3860.78 4557.16 3870.16 4534.94 3870.16 c
-4514.6 3870.16 4500.92 3860.97 4500.92 3847.46 c
-4500.92 3839.9 4505.24 3835.58 4512.62 3835.58 c
-4519.82 3835.58 4524.86 3839.9 4524.86 3846.02 c
-4524.86 3848.54 4523.96 3850.88 4521.62 3853.76 c
-4520 3855.56 4519.46 3856.64 4519.46 3857.72 c
-4519.46 3861.5 4524.32 3864.16 4530.8 3864.16 c
-4541.42 3864.16 4546 3859.37 4546 3848.54 c
-4546 3835.4 l
-4524.89 3828.92 4516.41 3825.68 4509.56 3821.18 c
-4501.46 3815.78 4498 3809.48 4498 3801.56 c
-4498 3790.58 4506.07 3782.48 4517.3 3782.48 c
-4527.74 3782.48 4536.02 3786.08 4545.92 3795.08 c
-4547.9 3785.9 4551.86 3782.48 4560.68 3782.48 c
-4568.42 3782.48 4574 3785.36 4580.84 3792.74 c
-h
-4546 3803 m
-4541.04 3797.42 4537.37 3795.26 4532.96 3795.26 c
-4527.56 3795.26 4524 3800.12 4524 3807.32 c
-4524 3817.76 4531.57 3825.14 4546 3829.1 c
-h
-4583 3785 m
-f*
-4644.22 3843.68 m
-4644.22 3869.8 l
-4640.24 3869.8 l
-4639.16 3867.08 4638.08 3866.2 4635.74 3866.2 c
-4634.66 3866.2 4633.04 3866.55 4630.16 3867.44 c
-4624.4 3869.42 4620.26 3870.16 4616.12 3870.16 c
-4599.74 3870.16 4588 3858.99 4588 3843.86 c
-4588 3831.98 4595.34 3823.7 4613.42 3815.96 c
-4625.84 3810.56 4631 3806.06 4631 3800.3 c
-4631 3793.28 4625.48 3788.48 4617.2 3788.48 c
-4604.6 3788.48 4596.32 3796.62 4592.54 3812.36 c
-4587.5 3812.36 l
-4587.5 3782.66 l
-4592 3782.66 l
-4593.98 3786.44 4595.06 3787.7 4596.68 3787.7 c
-4597.58 3787.7 4599.02 3787.34 4600.82 3786.62 c
-4606.04 3784.46 4615.22 3782.48 4620.26 3782.48 c
-4636.64 3782.48 4648 3793.64 4648 3809.84 c
-4648 3822.62 4641.15 3830.54 4623.14 3837.92 c
-4610.9 3843.14 4606 3847.64 4606 3853.76 c
-4606 3859.7 4610.98 3864.16 4617.74 3864.16 c
-4622.6 3864.16 4627.28 3862.19 4631.24 3858.44 c
-4635.02 3854.84 4637 3851.42 4639.7 3843.68 c
-h
-4653.02 3785 m
-f*
-4724.36 3807.5 m
-4716.98 3798.68 4711.58 3795.48 4703.84 3795.48 c
-4697 3795.48 4691.6 3798.53 4688 3804.62 c
-4684.58 3810.36 4683.14 3816.45 4682.42 3829 c
-4727.78 3829 l
-4726.7 3843.99 4724 3852.3 4718.42 3859.34 c
-4712.66 3866.36 4704.2 3870.16 4694.12 3870.16 c
-4671.62 3870.16 4656.5 3852.33 4656.5 3826.04 c
-4656.5 3799.76 4671.26 3782.48 4693.58 3782.48 c
-4708.16 3782.48 4716.98 3788.06 4728.68 3804.98 c
-h
-4681.52 3836 m
-4682.06 3857.42 4685.3 3864.16 4694.12 3864.16 c
-4699.34 3864.16 4702.58 3861.42 4704.02 3856.1 c
-4704.92 3852.68 4705.28 3847.64 4705.64 3838.46 c
-4705.64 3836 l
-h
-4731.92 3785 m
-f*
-4778 3785 m
-f*
-4881.94 3907 m
-4779.88 3907 l
-4779.88 3902 l
-4792.3 3901.29 4796 3898.63 4796 3889.4 c
-4796 3802.28 l
-4796 3792.92 4793.44 3790.94 4779.88 3789.5 c
-4779.88 3785 l
-4844.68 3785 l
-4844.68 3790 l
-4828.12 3790.69 4825 3792.77 4825 3802.28 c
-4825 3844.22 l
-4843.28 3843.86 4849.91 3837.2 4852.42 3816.32 c
-4856.92 3816.32 l
-4856.92 3877.16 l
-4852.42 3877.16 l
-4849.19 3856.64 4842.92 3850.34 4825 3850.34 c
-4825 3892.1 l
-4825 3898.76 4827.32 3901 4836.4 3901 c
-4853.14 3901 4863.58 3897.8 4869.16 3891.2 c
-4873.12 3886.7 4875.1 3881.84 4877.62 3870.5 c
-4881.94 3870.5 l
-h
-4886.98 3785 m
-f*
-4926.28 3868 m
-4892.22 3868 l
-4892.22 3863.66 l
-4899.96 3862.58 4902 3860.24 4902 3853.04 c
-4902 3800.12 l
-4902 3792.74 4900.19 3790.76 4892.22 3789.32 c
-4892.22 3785 l
-4940.1 3785 l
-4940.1 3789.32 l
-4929.12 3790.04 4927 3792.38 4927 3803.54 c
-4927 3837.56 l
-4927 3846.92 4932.02 3854.66 4937.94 3854.66 c
-4939.38 3854.66 4941 3853.4 4942.98 3850.52 c
-4946.4 3845.66 4949.1 3844.04 4953.78 3844.04 c
-4960.44 3844.04 4965.12 3849.08 4965.12 3855.92 c
-4965.12 3864.2 4959 3870.16 4950.54 3870.16 c
-4941.55 3870.16 4934.73 3865.47 4926.28 3853.22 c
-h
-4966.92 3785 m
-f*
-5053.14 3796.52 m
-5051.34 3794.72 l
-5050.8 3794.18 5050.26 3794 5049.36 3794 c
-5046.84 3794 5046 3795.44 5046 3798.5 c
-5046 3845.48 l
-5046 3860.78 5032.16 3870.16 5009.94 3870.16 c
-4989.6 3870.16 4975.92 3860.97 4975.92 3847.46 c
-4975.92 3839.9 4980.24 3835.58 4987.62 3835.58 c
-4994.82 3835.58 4999.86 3839.9 4999.86 3846.02 c
-4999.86 3848.54 4998.96 3850.88 4996.62 3853.76 c
-4995 3855.56 4994.46 3856.64 4994.46 3857.72 c
-4994.46 3861.5 4999.32 3864.16 5005.8 3864.16 c
-5016.42 3864.16 5021 3859.37 5021 3848.54 c
-5021 3835.4 l
-4999.89 3828.92 4991.41 3825.68 4984.56 3821.18 c
-4976.46 3815.78 4973 3809.48 4973 3801.56 c
-4973 3790.58 4981.07 3782.48 4992.3 3782.48 c
-5002.74 3782.48 5011.02 3786.08 5020.92 3795.08 c
-5022.9 3785.9 5026.86 3782.48 5035.68 3782.48 c
-5043.42 3782.48 5049 3785.36 5055.84 3792.74 c
-h
-5021 3803 m
-5016.04 3797.42 5012.37 3795.26 5007.96 3795.26 c
-5002.56 3795.26 4999 3800.12 4999 3807.32 c
-4999 3817.76 5006.57 3825.14 5021 3829.1 c
-h
-5058 3785 m
-f*
-5095.46 3868 m
-5060.73 3868 l
-5060.73 3863.66 l
-5068.65 3862.58 5071 3860.42 5071 3853.04 c
-5071 3800.12 l
-5071 3792.74 5068.95 3790.76 5060.73 3789.32 c
-5060.73 3785 l
-5103.93 3785 l
-5103.93 3789.32 l
-5097.63 3790.22 5096 3792.74 5096 3799.58 c
-5096 3847.64 l
-5096 3848.54 5098.51 3851.78 5100.51 3853.76 c
-5104.29 3856.64 5107.53 3858.16 5110.77 3858.16 c
-5117.79 3858.16 5121 3854 5121 3843.14 c
-5121 3799.58 l
-5121 3792.2 5118.9 3789.86 5111.85 3789.32 c
-5111.85 3785 l
-5153.97 3785 l
-5153.97 3789.32 l
-5147.67 3790.04 5146 3792.74 5146 3799.58 c
-5146 3847.64 l
-5146 3848.54 5148.43 3851.6 5150.37 3853.58 c
-5154.33 3856.64 5157.57 3858.16 5160.81 3858.16 c
-5167.65 3858.16 5170 3853.82 5170 3843.14 c
-5170 3799.58 l
-5170 3792.02 5168.1 3789.86 5161.53 3789.32 c
-5161.53 3785 l
-5204.37 3785 l
-5204.37 3789 l
-5197.35 3789.37 5195 3791.6 5195 3799.58 c
-5195 3844.76 l
-5195 3860.24 5185.6 3870.16 5171.07 3870.16 c
-5160.81 3870.16 5153.97 3866.01 5144.61 3854.48 c
-5139.21 3865.82 5132.91 3870.16 5121.57 3870.16 c
-5110.2 3870.16 5102.21 3865.29 5095.46 3854.48 c
-h
-5207.94 3785 m
-f*
-5280.36 3807.5 m
-5272.98 3798.68 5267.58 3795.48 5259.84 3795.48 c
-5253 3795.48 5247.6 3798.53 5244 3804.62 c
-5240.58 3810.36 5239.14 3816.45 5238.42 3829 c
-5283.78 3829 l
-5282.7 3843.99 5280 3852.3 5274.42 3859.34 c
-5268.66 3866.36 5260.2 3870.16 5250.12 3870.16 c
-5227.62 3870.16 5212.5 3852.33 5212.5 3826.04 c
-5212.5 3799.76 5227.26 3782.48 5249.58 3782.48 c
-5264.16 3782.48 5272.98 3788.06 5284.68 3804.98 c
-h
-5237.52 3836 m
-5238.06 3857.42 5241.3 3864.16 5250.12 3864.16 c
-5255.34 3864.16 5258.58 3861.42 5260.02 3856.1 c
-5260.92 3852.68 5261.28 3847.64 5261.64 3838.46 c
-5261.64 3836 l
-h
-5287.92 3785 m
-f*
-1 i
-4372.55 3749.75 914.4 15.5999 re
-f
-0.2 i
-1924.26 1536.36 m
-1913.64 1525.2 1907.88 1520.88 1899.06 1517.46 c
-1893.84 1515.3 1887.9 1514.58 1882.86 1514.58 c
-1870.98 1514.58 1859.64 1520.74 1854.42 1529.88 c
-1849.2 1539.42 1847 1552.2 1847 1570.38 c
-1847 1607.64 1858.23 1627.7 1879.8 1627.7 c
-1888.26 1627.7 1896 1624.38 1903.74 1617.36 c
-1911.48 1610.52 1915.62 1604.4 1921.92 1590.72 c
-1926.42 1590.72 l
-1926.42 1633.16 l
-1921.56 1633.16 l
-1918.86 1626.43 1917.06 1624.56 1913.64 1624.56 c
-1911.84 1624.56 1909.5 1625.28 1905.36 1627.08 c
-1894.92 1631.4 1886.1 1633.7 1877.46 1633.7 c
-1841.64 1633.7 1815 1605.84 1815 1568.76 c
-1815 1531.68 1841.21 1505.58 1878.54 1505.58 c
-1899.24 1505.58 1911.48 1511.88 1929.66 1531.86 c
-h
-1935.96 1509 m
-f*
-1999.18 1506.66 m
-2006.78 1509.36 2011.02 1510.08 2022.5 1511.34 c
-2033.66 1512.6 l
-2033.66 1517 l
-2025.74 1517.35 2024 1519.63 2024 1527.18 c
-2024 1592 l
-1987.4 1592 l
-1987.4 1587.66 l
-1996.4 1586.94 1999 1584.78 1999 1577.04 c
-1999 1526.1 l
-1992.88 1520.16 1989.18 1518.48 1983.8 1518.48 c
-1976.42 1518.48 1974 1522 1974 1530.96 c
-1974 1592 l
-1939.88 1592 l
-1939.88 1587.66 l
-1947.26 1586.22 1949 1584.6 1949 1577.04 c
-1949 1531.68 l
-1949 1515.84 1957.89 1506.48 1972.64 1506.48 c
-1982.16 1506.48 1988.56 1509.36 1999.18 1518.36 c
-h
-2037.08 1509 m
-f*
-2075.28 1592 m
-2041.22 1592 l
-2041.22 1587.66 l
-2048.96 1586.58 2051 1584.24 2051 1577.04 c
-2051 1524.12 l
-2051 1516.74 2049.19 1514.76 2041.22 1513.32 c
-2041.22 1509 l
-2089.1 1509 l
-2089.1 1513.32 l
-2078.12 1514.04 2076 1516.38 2076 1527.54 c
-2076 1561.56 l
-2076 1570.92 2081.02 1578.66 2086.94 1578.66 c
-2088.38 1578.66 2090 1577.4 2091.98 1574.52 c
-2095.4 1569.66 2098.1 1568.04 2102.78 1568.04 c
-2109.44 1568.04 2114.12 1573.08 2114.12 1579.92 c
-2114.12 1588.2 2108 1594.16 2099.54 1594.16 c
-2090.55 1594.16 2083.73 1589.47 2075.28 1577.22 c
-h
-2115.92 1509 m
-f*
-2156.28 1592 m
-2122.22 1592 l
-2122.22 1587.66 l
-2129.96 1586.58 2132 1584.24 2132 1577.04 c
-2132 1524.12 l
-2132 1516.74 2130.19 1514.76 2122.22 1513.32 c
-2122.22 1509 l
-2170.1 1509 l
-2170.1 1513.32 l
-2159.12 1514.04 2157 1516.38 2157 1527.54 c
-2157 1561.56 l
-2157 1570.92 2162.02 1578.66 2167.94 1578.66 c
-2169.38 1578.66 2171 1577.4 2172.98 1574.52 c
-2176.4 1569.66 2179.1 1568.04 2183.78 1568.04 c
-2190.44 1568.04 2195.12 1573.08 2195.12 1579.92 c
-2195.12 1588.2 2189 1594.16 2180.54 1594.16 c
-2171.55 1594.16 2164.73 1589.47 2156.28 1577.22 c
-h
-2196.92 1509 m
-f*
-2268.36 1531.5 m
-2260.98 1522.68 2255.58 1519.48 2247.84 1519.48 c
-2241 1519.48 2235.6 1522.53 2232 1528.62 c
-2228.58 1534.36 2227.14 1540.45 2226.42 1553 c
-2271.78 1553 l
-2270.7 1567.99 2268 1576.3 2262.42 1583.34 c
-2256.66 1590.36 2248.2 1594.16 2238.12 1594.16 c
-2215.62 1594.16 2200.5 1576.33 2200.5 1550.04 c
-2200.5 1523.76 2215.26 1506.48 2237.58 1506.48 c
-2252.16 1506.48 2260.98 1512.06 2272.68 1528.98 c
-h
-2225.52 1560 m
-2226.06 1581.42 2229.3 1588.16 2238.12 1588.16 c
-2243.34 1588.16 2246.58 1585.42 2248.02 1580.1 c
-2248.92 1576.68 2249.28 1571.64 2249.64 1562.46 c
-2249.64 1560 l
-h
-2275.92 1509 m
-f*
-2313.82 1592 m
-2279.78 1592 l
-2279.78 1587.66 l
-2287.7 1586.4 2289 1584.6 2289 1577.04 c
-2289 1524.12 l
-2289 1516.56 2287.61 1514.94 2279.78 1513.32 c
-2279.78 1509 l
-2323.16 1509 l
-2323.16 1513.32 l
-2316.5 1514.22 2314 1516.92 2314 1523.58 c
-2314 1571.64 l
-2314 1572.36 2315.4 1574.16 2317.4 1575.96 c
-2321.36 1579.92 2325.68 1582.16 2330 1582.16 c
-2336.12 1582.16 2339 1577.27 2339 1567.14 c
-2339 1523.58 l
-2339 1516.92 2336.71 1514.04 2330.72 1513.32 c
-2330.72 1509 l
-2373.02 1509 l
-2373.02 1513.32 l
-2366 1513.86 2364 1516.02 2364 1523.58 c
-2364 1568.76 l
-2364 1584.24 2354.54 1594.16 2339.9 1594.16 c
-2328.96 1594.16 2320.57 1589.11 2313.82 1578.48 c
-h
-2376.08 1509 m
-f*
-2430.9 1592 m
-2414 1592 l
-2414 1622.4 l
-2409.48 1622.4 l
-2398.5 1606.92 2391.3 1598.82 2379.6 1588.92 c
-2379.6 1584 l
-2389 1584 l
-2389 1525.74 l
-2389 1514.04 2396.73 1506.84 2409.12 1506.84 c
-2421.18 1506.84 2428.38 1512.24 2435.76 1527 c
-2431.26 1528.98 l
-2427.66 1522.14 2424.78 1519.84 2421 1519.84 c
-2415.96 1519.84 2414 1522.83 2414 1529.88 c
-2414 1584 l
-2430.9 1584 l
-h
-2435.94 1509 m
-f*
-2481 1509 m
-f*
-2585.94 1631 m
-2483.88 1631 l
-2483.88 1626 l
-2496.3 1625.29 2500 1622.63 2500 1613.4 c
-2500 1526.28 l
-2500 1516.92 2497.44 1514.94 2483.88 1513.5 c
-2483.88 1509 l
-2548.68 1509 l
-2548.68 1514 l
-2532.12 1514.69 2529 1516.77 2529 1526.28 c
-2529 1568.22 l
-2547.28 1567.86 2553.91 1561.2 2556.42 1540.32 c
-2560.92 1540.32 l
-2560.92 1601.16 l
-2556.42 1601.16 l
-2553.19 1580.64 2546.92 1574.34 2529 1574.34 c
-2529 1616.1 l
-2529 1622.76 2531.32 1625 2540.4 1625 c
-2557.14 1625 2567.58 1621.8 2573.16 1615.2 c
-2577.12 1610.7 2579.1 1605.84 2581.62 1594.5 c
-2585.94 1594.5 l
-h
-2590.98 1509 m
-f*
-2630.28 1592 m
-2596.22 1592 l
-2596.22 1587.66 l
-2603.96 1586.58 2606 1584.24 2606 1577.04 c
-2606 1524.12 l
-2606 1516.74 2604.19 1514.76 2596.22 1513.32 c
-2596.22 1509 l
-2644.1 1509 l
-2644.1 1513.32 l
-2633.12 1514.04 2631 1516.38 2631 1527.54 c
-2631 1561.56 l
-2631 1570.92 2636.02 1578.66 2641.94 1578.66 c
-2643.38 1578.66 2645 1577.4 2646.98 1574.52 c
-2650.4 1569.66 2653.1 1568.04 2657.78 1568.04 c
-2664.44 1568.04 2669.12 1573.08 2669.12 1579.92 c
-2669.12 1588.2 2663 1594.16 2654.54 1594.16 c
-2645.55 1594.16 2638.73 1589.47 2630.28 1577.22 c
-h
-2670.92 1509 m
-f*
-2756.14 1520.52 m
-2754.34 1518.72 l
-2753.8 1518.18 2753.26 1518 2752.36 1518 c
-2749.84 1518 2749 1519.44 2749 1522.5 c
-2749 1569.48 l
-2749 1584.78 2735.16 1594.16 2712.94 1594.16 c
-2692.6 1594.16 2678.92 1584.97 2678.92 1571.46 c
-2678.92 1563.9 2683.24 1559.58 2690.62 1559.58 c
-2697.82 1559.58 2702.86 1563.9 2702.86 1570.02 c
-2702.86 1572.54 2701.96 1574.88 2699.62 1577.76 c
-2698 1579.56 2697.46 1580.64 2697.46 1581.72 c
-2697.46 1585.5 2702.32 1588.16 2708.8 1588.16 c
-2719.42 1588.16 2724 1583.37 2724 1572.54 c
-2724 1559.4 l
-2702.89 1552.92 2694.41 1549.68 2687.56 1545.18 c
-2679.46 1539.78 2676 1533.48 2676 1525.56 c
-2676 1514.58 2684.07 1506.48 2695.3 1506.48 c
-2705.74 1506.48 2714.02 1510.08 2723.92 1519.08 c
-2725.9 1509.9 2729.86 1506.48 2738.68 1506.48 c
-2746.42 1506.48 2752 1509.36 2758.84 1516.74 c
-h
-2724 1527 m
-2719.04 1521.42 2715.37 1519.26 2710.96 1519.26 c
-2705.56 1519.26 2702 1524.12 2702 1531.32 c
-2702 1541.76 2709.57 1549.14 2724 1553.1 c
-h
-2761 1509 m
-f*
-2798.46 1592 m
-2763.73 1592 l
-2763.73 1587.66 l
-2771.65 1586.58 2774 1584.42 2774 1577.04 c
-2774 1524.12 l
-2774 1516.74 2771.95 1514.76 2763.73 1513.32 c
-2763.73 1509 l
-2806.93 1509 l
-2806.93 1513.32 l
-2800.63 1514.22 2799 1516.74 2799 1523.58 c
-2799 1571.64 l
-2799 1572.54 2801.51 1575.78 2803.51 1577.76 c
-2807.29 1580.64 2810.53 1582.16 2813.77 1582.16 c
-2820.79 1582.16 2824 1578 2824 1567.14 c
-2824 1523.58 l
-2824 1516.2 2821.9 1513.86 2814.85 1513.32 c
-2814.85 1509 l
-2856.97 1509 l
-2856.97 1513.32 l
-2850.67 1514.04 2849 1516.74 2849 1523.58 c
-2849 1571.64 l
-2849 1572.54 2851.43 1575.6 2853.37 1577.58 c
-2857.33 1580.64 2860.57 1582.16 2863.81 1582.16 c
-2870.65 1582.16 2873 1577.82 2873 1567.14 c
-2873 1523.58 l
-2873 1516.02 2871.1 1513.86 2864.53 1513.32 c
-2864.53 1509 l
-2907.37 1509 l
-2907.37 1513 l
-2900.35 1513.37 2898 1515.6 2898 1523.58 c
-2898 1568.76 l
-2898 1584.24 2888.6 1594.16 2874.07 1594.16 c
-2863.81 1594.16 2856.97 1590.01 2847.61 1578.48 c
-2842.21 1589.82 2835.91 1594.16 2824.57 1594.16 c
-2813.2 1594.16 2805.21 1589.29 2798.46 1578.48 c
-h
-2910.94 1509 m
-f*
-2983.36 1531.5 m
-2975.98 1522.68 2970.58 1519.48 2962.84 1519.48 c
-2956 1519.48 2950.6 1522.53 2947 1528.62 c
-2943.58 1534.36 2942.14 1540.45 2941.42 1553 c
-2986.78 1553 l
-2985.7 1567.99 2983 1576.3 2977.42 1583.34 c
-2971.66 1590.36 2963.2 1594.16 2953.12 1594.16 c
-2930.62 1594.16 2915.5 1576.33 2915.5 1550.04 c
-2915.5 1523.76 2930.26 1506.48 2952.58 1506.48 c
-2967.16 1506.48 2975.98 1512.06 2987.68 1528.98 c
-h
-2940.52 1560 m
-2941.06 1581.42 2944.3 1588.16 2953.12 1588.16 c
-2958.34 1588.16 2961.58 1585.42 2963.02 1580.1 c
-2963.92 1576.68 2964.28 1571.64 2964.64 1562.46 c
-2964.64 1560 l
-h
-2990.92 1509 m
-f*
-1 i
-1805.75 1474.55 1184.4 15.5999 re
-f
-1 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-f*
-0 g
-2414.15 1700.15 m
-2577.35 1853.75 l
-2495.75 1853.75 l
-2495.75 2004.95 l
-2330.15 2004.95 l
-2330.15 1853.75 l
-2247.35 1853.75 l
-2414.15 1700.15 l
-2414.15 1713.35 l
-2272.55 1842.95 l
-2339.75 1842.95 l
-2339.75 1994.15 l
-2486.15 1994.15 l
-2486.15 1842.95 l
-2552.15 1842.95 l
-2414.15 1713.35 l
-2414.15 1700.15 l
-f*
-0.201248 i
-4490.33 1642 m
-4376.22 1642 l
-4376.22 1637 l
-4390.11 1636.2 4394 1633.18 4394 1622.72 c
-4394 1525.32 l
-4394 1514.85 4391.17 1512.64 4376.22 1511.03 c
-4376.22 1506 l
-4448.67 1506 l
-4448.67 1511 l
-4430.15 1511.81 4427 1514.23 4427 1525.32 c
-4427 1572.21 l
-4447.22 1571.81 4454.55 1564.36 4457.32 1541.02 c
-4462.35 1541.02 l
-4462.35 1609.04 l
-4457.32 1609.04 l
-4453.76 1586.1 4446.82 1579.05 4427 1579.05 c
-4427 1625.74 l
-4427 1633.19 4429.52 1635 4439.41 1635 c
-4458.13 1635 4469.8 1631.64 4476.04 1624.74 c
-4480.47 1619.71 4482.68 1614.27 4485.5 1601.59 c
-4490.33 1601.59 l
-h
-4495.96 1506 m
-f*
-4539.19 1599 m
-4500.84 1599 l
-4500.84 1593.95 l
-4509.49 1592.74 4512 1590.12 4512 1582.07 c
-4512 1522.9 l
-4512 1514.65 4509.93 1512.44 4500.84 1510.83 c
-4500.84 1506 l
-4554.37 1506 l
-4554.37 1510.83 l
-4542.09 1511.63 4540 1514.25 4540 1526.73 c
-4540 1564.76 l
-4540 1575.23 4545.49 1583.88 4551.95 1583.88 c
-4553.56 1583.88 4555.37 1582.47 4557.59 1579.25 c
-4561.41 1573.82 4564.43 1572.01 4569.66 1572.01 c
-4577.11 1572.01 4582.34 1577.64 4582.34 1585.29 c
-4582.34 1594.55 4575.5 1601.41 4566.04 1601.41 c
-4556.1 1601.41 4548.54 1596.12 4539.19 1582.27 c
-h
-4584.35 1506 m
-f*
-4679.19 1518.88 m
-4677.18 1516.87 l
-4676.57 1516.26 4675.97 1516.06 4674.96 1516.06 c
-4672.15 1516.06 4671 1517.67 4671 1521.09 c
-4671 1573.62 l
-4671 1590.73 4655.6 1601.42 4630.89 1601.42 c
-4608.15 1601.42 4592.85 1591.06 4592.85 1575.83 c
-4592.85 1567.38 4597.69 1562.55 4605.94 1562.55 c
-4613.99 1562.55 4619.62 1567.38 4619.62 1574.22 c
-4619.62 1577.04 4618.61 1579.66 4616 1582.88 c
-4614.19 1584.89 4613.58 1586.1 4613.58 1587.3 c
-4613.58 1591.53 4619.02 1594.42 4626.26 1594.42 c
-4638.14 1594.42 4643.86 1589.08 4643.86 1577.04 c
-4643.86 1562.35 l
-4619.91 1555.1 4610.29 1551.48 4602.51 1546.45 c
-4593.46 1540.41 4589 1533.37 4589 1524.52 c
-4589 1512.24 4598.27 1503.18 4611.17 1503.18 c
-4622.84 1503.18 4632.1 1507.21 4643.17 1517.27 c
-4645.38 1507.01 4649.81 1503.18 4659.67 1503.18 c
-4668.32 1503.18 4674.56 1506.4 4682.21 1514.65 c
-h
-4643 1526.13 m
-4637.55 1519.89 4633.52 1517.47 4628.68 1517.47 c
-4622.64 1517.47 4618 1522.91 4618 1530.96 c
-4618 1542.63 4626.61 1550.88 4643 1555.31 c
-h
-4684.62 1506 m
-f*
-4725.4 1599 m
-4686.7 1599 l
-4686.7 1593.95 l
-4695.55 1592.74 4698 1590.32 4698 1582.07 c
-4698 1522.9 l
-4698 1514.65 4695.74 1512.44 4686.7 1510.83 c
-4686.7 1506 l
-4735 1506 l
-4735 1510.83 l
-4727.95 1511.84 4726 1514.65 4726 1522.3 c
-4726 1576.03 l
-4726 1577.04 4728.87 1580.66 4731.18 1582.88 c
-4735.4 1586.1 4739.02 1588.42 4742.65 1588.42 c
-4750.5 1588.42 4754 1583.59 4754 1571 c
-4754 1522.3 l
-4754 1514.05 4751.68 1511.43 4743.85 1510.83 c
-4743.85 1506 l
-4790.95 1506 l
-4790.95 1510.83 l
-4783.9 1511.64 4782 1514.65 4782 1522.3 c
-4782 1576.03 l
-4782 1577.04 4784.73 1580.46 4786.92 1582.68 c
-4791.35 1586.1 4794.97 1588.42 4798.59 1588.42 c
-4806.24 1588.42 4809 1583.38 4809 1571 c
-4809 1522.3 l
-4809 1513.85 4806.85 1511.43 4799.4 1510.83 c
-4799.4 1506 l
-4847.3 1506 l
-4847.3 1511 l
-4839.45 1511.4 4837 1513.78 4837 1522.3 c
-4837 1572.81 l
-4837 1590.12 4826.43 1601.42 4810.07 1601.42 c
-4798.59 1601.42 4790.95 1596.73 4780.48 1583.68 c
-4774.44 1596.36 4767.4 1601.42 4754.72 1601.42 c
-4741.95 1601.42 4732.98 1595.91 4725.4 1583.68 c
-h
-4850.64 1506 m
-f*
-4930.9 1531.16 m
-4922.65 1521.29 4916.61 1517.18 4907.96 1517.18 c
-4900.31 1517.18 4894.27 1520.77 4890.25 1527.94 c
-4886.43 1534.54 4884.82 1541.56 4884.01 1556 c
-4934.73 1556 l
-4933.52 1572.36 4930.5 1581.43 4924.26 1589.12 c
-4917.82 1596.96 4908.36 1601.42 4897.09 1601.42 c
-4871.94 1601.42 4855.03 1581.4 4855.03 1551.88 c
-4855.03 1522.5 4871.53 1503.18 4896.49 1503.18 c
-4912.79 1503.18 4922.65 1509.42 4935.73 1528.34 c
-h
-4883 1563 m
-4883.61 1586.96 4887.23 1594.42 4897.09 1594.42 c
-4902.93 1594.42 4906.55 1591.38 4908.16 1585.49 c
-4909.17 1581.67 4909.57 1576.03 4909.97 1565.77 c
-4909.97 1563 l
-h
-4939.35 1506 m
-f*
-5036.16 1601.59 m
-5036.16 1645.22 l
-5030.37 1645.22 l
-5028.96 1639.82 5027.55 1638.42 5023.93 1638.42 c
-5022.12 1638.42 5019.7 1639.03 5015.47 1640.43 c
-5006.22 1643.86 4999.78 1645.02 4991.93 1645.02 c
-4964.56 1645.02 4948 1629.54 4948 1604.01 c
-4948 1598.98 4948.75 1594.75 4950.07 1590.73 c
-4954.29 1580.06 4965.16 1570.6 4982.27 1562.35 c
-4995.75 1555.91 l
-5013.46 1547.46 5018 1542.22 5018 1531.56 c
-5018 1517.67 5008.25 1509.18 4992.94 1509.18 c
-4981.26 1509.18 4971.6 1513.89 4963.96 1523.31 c
-4958.12 1530.75 4955.3 1537.6 4951.88 1551.88 c
-4946.04 1551.88 l
-4946.04 1502.18 l
-4951.88 1502.18 l
-4953.09 1507.41 4954.7 1509.02 4957.92 1509.02 c
-4959.53 1509.02 4961.74 1508.42 4966.17 1507.01 c
-4976.03 1503.59 4983.48 1502.18 4992.33 1502.18 c
-5022.12 1502.18 5042 1519.28 5042 1544.64 c
-5042 1559.73 5033.04 1574.83 5020.1 1581.27 c
-4990.52 1595.96 l
-4974.22 1604.01 4970 1608.84 4970 1618.7 c
-4970 1631.18 4978.37 1638.02 4991.93 1638.02 c
-5000.99 1638.02 5009.44 1634.47 5016.68 1627.55 c
-5023.53 1620.51 5026.75 1614.67 5030.77 1601.59 c
-h
-5050.89 1506 m
-f*
-5129.9 1531.16 m
-5121.65 1521.29 5115.61 1517.18 5106.96 1517.18 c
-5099.31 1517.18 5093.27 1520.77 5089.25 1527.94 c
-5085.43 1534.54 5083.82 1541.56 5083.01 1556 c
-5133.73 1556 l
-5132.52 1572.36 5129.5 1581.43 5123.26 1589.12 c
-5116.82 1596.96 5107.36 1601.42 5096.09 1601.42 c
-5070.94 1601.42 5054.03 1581.4 5054.03 1551.88 c
-5054.03 1522.5 5070.53 1503.18 5095.49 1503.18 c
-5111.79 1503.18 5121.65 1509.42 5134.73 1528.34 c
-h
-5082 1563 m
-5082.61 1586.96 5086.23 1594.42 5096.09 1594.42 c
-5101.93 1594.42 5105.55 1591.38 5107.16 1585.49 c
-5108.17 1581.67 5108.57 1576.03 5108.97 1565.77 c
-5108.97 1563 l
-h
-5138.35 1506 m
-f*
-5199.38 1599 m
-5180 1599 l
-5180 1632.79 l
-5175.43 1632.79 l
-5163.16 1615.48 5155.11 1606.42 5142.02 1595.35 c
-5142.02 1590 l
-5152 1590 l
-5152 1524.72 l
-5152 1511.64 5160.84 1503.59 5175.03 1503.59 c
-5188.51 1503.59 5196.56 1509.62 5204.81 1526.12 c
-5199.78 1528.34 l
-5195.76 1520.69 5192.54 1517.59 5188.31 1517.59 c
-5182.68 1517.59 5180 1521.09 5180 1529.34 c
-5180 1590 l
-5199.38 1590 l
-h
-5205.02 1506 m
-f*
-5255.31 1506 m
-f*
-5258.22 1642 m
-5258.22 1637 l
-5272.11 1636.2 5276 1632.98 5276 1622.72 c
-5276 1525.32 l
-5276 1515.06 5272.97 1512.64 5258.22 1511.03 c
-5258.22 1506 l
-5323.02 1506 l
-5357.03 1506 5380 1521.09 5380 1543.83 c
-5380 1553.09 5376.03 1561.14 5368.71 1567.38 c
-5361.66 1573.62 5354.82 1576.44 5340.73 1579.46 c
-5364.08 1586.3 5373 1594.55 5373 1609.84 c
-5373 1630.57 5354.39 1642 5320.41 1642 c
-h
-5308 1575.03 m
-5314.17 1575.03 l
-5334.9 1575.03 5345 1564.36 5345 1542.02 c
-5345 1522.5 5336.73 1513 5320.41 1513 c
-5311.55 1513 5308 1516.26 5308 1524.72 c
-h
-5308 1626.15 m
-5308 1633.39 5310.85 1636 5319 1636 c
-5333.08 1636 5340 1627.35 5340 1608.44 c
-5340 1587.3 5333.23 1581.67 5308 1581.07 c
-h
-5389.23 1506 m
-f*
-1041.33 4883 m
-927.22 4883 l
-927.22 4878 l
-941.106 4877.2 945 4874.18 945 4863.72 c
-945 4766.32 l
-945 4755.85 942.171 4753.64 927.22 4752.03 c
-927.22 4747 l
-999.67 4747 l
-999.67 4752 l
-981.155 4752.81 978 4755.23 978 4766.32 c
-978 4813.21 l
-998.215 4812.81 1005.55 4805.36 1008.32 4782.02 c
-1013.35 4782.02 l
-1013.35 4850.04 l
-1008.32 4850.04 l
-1004.76 4827.1 997.819 4820.05 978 4820.05 c
-978 4866.74 l
-978 4874.19 980.521 4876 990.412 4876 c
-1009.13 4876 1020.8 4872.64 1027.04 4865.74 c
-1031.47 4860.71 1033.68 4855.27 1036.5 4842.59 c
-1041.33 4842.59 l
-h
-1046.96 4747 m
-f*
-1090.19 4840 m
-1051.84 4840 l
-1051.84 4834.95 l
-1060.49 4833.74 1063 4831.12 1063 4823.07 c
-1063 4763.9 l
-1063 4755.65 1060.93 4753.44 1051.84 4751.83 c
-1051.84 4747 l
-1105.37 4747 l
-1105.37 4751.83 l
-1093.09 4752.63 1091 4755.25 1091 4767.73 c
-1091 4805.76 l
-1091 4816.23 1096.49 4824.88 1102.95 4824.88 c
-1104.56 4824.88 1106.37 4823.47 1108.59 4820.25 c
-1112.41 4814.82 1115.43 4813.01 1120.66 4813.01 c
-1128.11 4813.01 1133.34 4818.64 1133.34 4826.29 c
-1133.34 4835.55 1126.5 4842.41 1117.04 4842.41 c
-1107.1 4842.41 1099.54 4837.12 1090.19 4823.27 c
-h
-1135.35 4747 m
-f*
-1230.19 4759.88 m
-1228.18 4757.87 l
-1227.57 4757.26 1226.97 4757.06 1225.96 4757.06 c
-1223.15 4757.06 1222 4758.67 1222 4762.09 c
-1222 4814.62 l
-1222 4831.73 1206.6 4842.42 1181.89 4842.42 c
-1159.15 4842.42 1143.85 4832.06 1143.85 4816.83 c
-1143.85 4808.38 1148.69 4803.55 1156.94 4803.55 c
-1164.99 4803.55 1170.62 4808.38 1170.62 4815.22 c
-1170.62 4818.04 1169.61 4820.66 1167 4823.88 c
-1165.19 4825.89 1164.58 4827.1 1164.58 4828.3 c
-1164.58 4832.53 1170.02 4835.42 1177.26 4835.42 c
-1189.14 4835.42 1194.86 4830.08 1194.86 4818.04 c
-1194.86 4803.35 l
-1170.91 4796.1 1161.29 4792.48 1153.51 4787.45 c
-1144.46 4781.41 1140 4774.37 1140 4765.52 c
-1140 4753.24 1149.27 4744.18 1162.17 4744.18 c
-1173.84 4744.18 1183.1 4748.21 1194.17 4758.27 c
-1196.38 4748.01 1200.81 4744.18 1210.67 4744.18 c
-1219.32 4744.18 1225.56 4747.4 1233.21 4755.65 c
-h
-1194 4767.13 m
-1188.55 4760.89 1184.52 4758.47 1179.68 4758.47 c
-1173.64 4758.47 1169 4763.91 1169 4771.96 c
-1169 4783.63 1177.61 4791.88 1194 4796.31 c
-h
-1235.62 4747 m
-f*
-1277.4 4840 m
-1238.7 4840 l
-1238.7 4834.95 l
-1247.55 4833.74 1250 4831.32 1250 4823.07 c
-1250 4763.9 l
-1250 4755.65 1247.74 4753.44 1238.7 4751.83 c
-1238.7 4747 l
-1287 4747 l
-1287 4751.83 l
-1279.95 4752.84 1278 4755.65 1278 4763.3 c
-1278 4817.03 l
-1278 4818.04 1280.87 4821.66 1283.18 4823.88 c
-1287.4 4827.1 1291.02 4829.42 1294.65 4829.42 c
-1302.5 4829.42 1306 4824.59 1306 4812 c
-1306 4763.3 l
-1306 4755.05 1303.68 4752.43 1295.85 4751.83 c
-1295.85 4747 l
-1342.95 4747 l
-1342.95 4751.83 l
-1335.9 4752.64 1334 4755.65 1334 4763.3 c
-1334 4817.03 l
-1334 4818.04 1336.73 4821.46 1338.92 4823.68 c
-1343.35 4827.1 1346.97 4829.42 1350.59 4829.42 c
-1358.24 4829.42 1361 4824.38 1361 4812 c
-1361 4763.3 l
-1361 4754.85 1358.85 4752.43 1351.4 4751.83 c
-1351.4 4747 l
-1399.3 4747 l
-1399.3 4752 l
-1391.45 4752.4 1389 4754.78 1389 4763.3 c
-1389 4813.81 l
-1389 4831.12 1378.43 4842.42 1362.07 4842.42 c
-1350.59 4842.42 1342.95 4837.73 1332.48 4824.68 c
-1326.44 4837.36 1319.4 4842.42 1306.72 4842.42 c
-1293.95 4842.42 1284.98 4836.91 1277.4 4824.68 c
-h
-1402.64 4747 m
-f*
-1481.9 4772.16 m
-1473.65 4762.29 1467.61 4758.18 1458.96 4758.18 c
-1451.31 4758.18 1445.27 4761.77 1441.25 4768.94 c
-1437.43 4775.54 1435.82 4782.56 1435.01 4797 c
-1485.73 4797 l
-1484.52 4813.36 1481.5 4822.43 1475.26 4830.12 c
-1468.82 4837.96 1459.36 4842.42 1448.09 4842.42 c
-1422.94 4842.42 1406.03 4822.4 1406.03 4792.88 c
-1406.03 4763.5 1422.53 4744.18 1447.49 4744.18 c
-1463.79 4744.18 1473.65 4750.42 1486.73 4769.34 c
-h
-1434 4804 m
-1434.61 4827.96 1438.23 4835.42 1448.09 4835.42 c
-1453.93 4835.42 1457.55 4832.38 1459.16 4826.49 c
-1460.17 4822.67 1460.57 4817.03 1460.97 4806.77 c
-1460.97 4804 l
-h
-1490.35 4747 m
-f*
-1587.16 4842.59 m
-1587.16 4886.22 l
-1581.37 4886.22 l
-1579.96 4880.82 1578.55 4879.42 1574.93 4879.42 c
-1573.12 4879.42 1570.7 4880.03 1566.47 4881.43 c
-1557.22 4884.86 1550.78 4886.02 1542.93 4886.02 c
-1515.56 4886.02 1499 4870.54 1499 4845.01 c
-1499 4839.98 1499.75 4835.75 1501.07 4831.73 c
-1505.29 4821.06 1516.16 4811.6 1533.27 4803.35 c
-1546.75 4796.91 l
-1564.46 4788.46 1569 4783.22 1569 4772.56 c
-1569 4758.67 1559.25 4750.18 1543.94 4750.18 c
-1532.26 4750.18 1522.6 4754.89 1514.96 4764.31 c
-1509.12 4771.75 1506.3 4778.6 1502.88 4792.88 c
-1497.04 4792.88 l
-1497.04 4743.18 l
-1502.88 4743.18 l
-1504.09 4748.41 1505.7 4750.02 1508.92 4750.02 c
-1510.53 4750.02 1512.74 4749.42 1517.17 4748.01 c
-1527.03 4744.59 1534.48 4743.18 1543.33 4743.18 c
-1573.12 4743.18 1593 4760.28 1593 4785.64 c
-1593 4800.73 1584.04 4815.83 1571.1 4822.27 c
-1541.52 4836.96 l
-1525.22 4845.01 1521 4849.84 1521 4859.7 c
-1521 4872.18 1529.37 4879.02 1542.93 4879.02 c
-1551.99 4879.02 1560.44 4875.47 1567.68 4868.55 c
-1574.53 4861.51 1577.75 4855.67 1581.77 4842.59 c
-h
-1601.89 4747 m
-f*
-1681.9 4772.16 m
-1673.65 4762.29 1667.61 4758.18 1658.96 4758.18 c
-1651.31 4758.18 1645.27 4761.77 1641.25 4768.94 c
-1637.43 4775.54 1635.82 4782.56 1635.01 4797 c
-1685.73 4797 l
-1684.52 4813.36 1681.5 4822.43 1675.26 4830.12 c
-1668.82 4837.96 1659.36 4842.42 1648.09 4842.42 c
-1622.94 4842.42 1606.03 4822.4 1606.03 4792.88 c
-1606.03 4763.5 1622.53 4744.18 1647.49 4744.18 c
-1663.79 4744.18 1673.65 4750.42 1686.73 4769.34 c
-h
-1634 4804 m
-1634.61 4827.96 1638.23 4835.42 1648.09 4835.42 c
-1653.93 4835.42 1657.55 4832.38 1659.16 4826.49 c
-1660.17 4822.67 1660.57 4817.03 1660.97 4806.77 c
-1660.97 4804 l
-h
-1690.35 4747 m
-f*
-1750.38 4840 m
-1731 4840 l
-1731 4873.79 l
-1726.43 4873.79 l
-1714.16 4856.48 1706.11 4847.42 1693.02 4836.35 c
-1693.02 4831 l
-1703 4831 l
-1703 4765.72 l
-1703 4752.64 1711.84 4744.59 1726.03 4744.59 c
-1739.51 4744.59 1747.56 4750.62 1755.81 4767.12 c
-1750.78 4769.34 l
-1746.76 4761.69 1743.54 4758.59 1739.31 4758.59 c
-1733.68 4758.59 1731 4762.09 1731 4770.34 c
-1731 4831 l
-1750.38 4831 l
-h
-1756.02 4747 m
-f*
-1807.31 4747 m
-f*
-1944.66 4752.03 m
-1935.81 4752.03 1933.59 4754.85 1922.72 4780 c
-1877.85 4885.82 l
-1872.21 4885.82 l
-1827.53 4775.58 l
-1819.89 4756.66 1817.47 4753.84 1807.81 4752.03 c
-1807.81 4747 l
-1848.66 4747 l
-1848.66 4752.03 l
-1836.79 4752.84 1832.16 4755.05 1832.16 4760.28 c
-1832.16 4762.9 1833.57 4767.53 1838 4778.6 c
-1841.02 4787 l
-1886.3 4787 l
-1893.14 4770.9 1895.56 4763.76 1895.56 4759.28 c
-1895.56 4754.85 1892.94 4753.04 1885.9 4752.63 c
-1879.46 4752.03 l
-1879.46 4747 l
-1944.66 4747 l
-h
-1844.04 4795 m
-1862.95 4843.4 l
-1883.28 4795 l
-h
-1951.3 4747 m
-f*
-1 i
-32 w
-942.95 6694.55 m
-618.95 6336.95 432.95 5816.15 432.95 5268.95 c
-432.95 4305.35 1001.75 3495.35 1751.75 3390.95 c
-S
-954.95 6592.55 m
-921.35 6668.15 l
-844.55 6699.35 l
-1072.55 6822.95 l
-f*
-1682.15 3323.75 m
-1720.55 3398.15 l
-1697.75 3478.55 l
-1936.55 3378.95 l
-f*
-0.564706 g
-4962.95 2235.35 m
-4962.95 2345.75 4871.75 2436.95 4760.15 2436.95 c
-4263.35 2436.95 l
-4151.75 2436.95 4060.55 2345.75 4060.55 2235.35 c
-4060.55 2097.35 l
-4060.55 1986.95 4151.75 1895.75 4263.35 1895.75 c
-4760.15 1895.75 l
-4871.75 1895.75 4962.95 1986.95 4962.95 2097.35 c
-f*
-1 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-f*
-8 w
-0 g
-4898.15 2292.95 m
-4898.15 2402.15 4809.35 2490.95 4697.75 2490.95 c
-4206.95 2490.95 l
-4096.55 2490.95 4006.55 2402.15 4006.55 2292.95 c
-4006.55 2158.55 l
-4006.55 2049.35 4095.35 1960.55 4206.95 1960.55 c
-4697.75 1960.55 l
-4809.35 1960.55 4898.15 2049.35 4898.15 2158.55 c
-h
-S
-0.201248 i
-4239.33 2332 m
-4125.22 2332 l
-4125.22 2327 l
-4139.11 2326.2 4143 2323.18 4143 2312.72 c
-4143 2215.32 l
-4143 2204.85 4140.17 2202.64 4125.22 2201.03 c
-4125.22 2196 l
-4197.67 2196 l
-4197.67 2201 l
-4179.15 2201.81 4176 2204.23 4176 2215.32 c
-4176 2262.21 l
-4196.22 2261.81 4203.55 2254.36 4206.32 2231.02 c
-4211.35 2231.02 l
-4211.35 2299.04 l
-4206.32 2299.04 l
-4202.76 2276.1 4195.82 2269.05 4176 2269.05 c
-4176 2315.74 l
-4176 2323.19 4178.52 2325 4188.41 2325 c
-4207.13 2325 4218.8 2321.64 4225.04 2314.74 c
-4229.47 2309.71 4231.68 2304.27 4234.5 2291.59 c
-4239.33 2291.59 l
-h
-4244.96 2196 m
-f*
-4289.19 2289 m
-4250.84 2289 l
-4250.84 2283.95 l
-4259.49 2282.74 4262 2280.12 4262 2272.07 c
-4262 2212.9 l
-4262 2204.65 4259.93 2202.44 4250.84 2200.83 c
-4250.84 2196 l
-4304.37 2196 l
-4304.37 2200.83 l
-4292.09 2201.63 4290 2204.25 4290 2216.73 c
-4290 2254.76 l
-4290 2265.23 4295.49 2273.88 4301.95 2273.88 c
-4303.56 2273.88 4305.37 2272.47 4307.59 2269.25 c
-4311.41 2263.82 4314.43 2262.01 4319.66 2262.01 c
-4327.11 2262.01 4332.34 2267.64 4332.34 2275.29 c
-4332.34 2284.55 4325.5 2291.41 4316.04 2291.41 c
-4306.1 2291.41 4298.54 2286.12 4289.19 2272.27 c
-h
-4334.35 2196 m
-f*
-4429.19 2208.88 m
-4427.18 2206.87 l
-4426.57 2206.26 4425.97 2206.06 4424.96 2206.06 c
-4422.15 2206.06 4421 2207.67 4421 2211.09 c
-4421 2263.62 l
-4421 2280.73 4405.6 2291.42 4380.89 2291.42 c
-4358.15 2291.42 4342.85 2281.06 4342.85 2265.83 c
-4342.85 2257.38 4347.69 2252.55 4355.94 2252.55 c
-4363.99 2252.55 4369.62 2257.38 4369.62 2264.22 c
-4369.62 2267.04 4368.61 2269.66 4366 2272.88 c
-4364.19 2274.89 4363.58 2276.1 4363.58 2277.3 c
-4363.58 2281.53 4369.02 2284.42 4376.26 2284.42 c
-4388.14 2284.42 4393.86 2279.08 4393.86 2267.04 c
-4393.86 2252.35 l
-4369.91 2245.1 4360.29 2241.48 4352.51 2236.45 c
-4343.46 2230.41 4339 2223.37 4339 2214.52 c
-4339 2202.24 4348.27 2193.18 4361.17 2193.18 c
-4372.84 2193.18 4382.1 2197.21 4393.17 2207.27 c
-4395.38 2197.01 4399.81 2193.18 4409.67 2193.18 c
-4418.32 2193.18 4424.56 2196.4 4432.21 2204.65 c
-h
-4393 2216.13 m
-4387.55 2209.89 4383.52 2207.47 4378.68 2207.47 c
-4372.64 2207.47 4368 2212.91 4368 2220.96 c
-4368 2232.63 4376.61 2240.88 4393 2245.31 c
-h
-4434.62 2196 m
-f*
-4476.4 2289 m
-4437.7 2289 l
-4437.7 2283.95 l
-4446.55 2282.74 4449 2280.32 4449 2272.07 c
-4449 2212.9 l
-4449 2204.65 4446.74 2202.44 4437.7 2200.83 c
-4437.7 2196 l
-4486 2196 l
-4486 2200.83 l
-4478.95 2201.84 4477 2204.65 4477 2212.3 c
-4477 2266.03 l
-4477 2267.04 4479.87 2270.66 4482.18 2272.88 c
-4486.4 2276.1 4490.02 2278.42 4493.65 2278.42 c
-4501.5 2278.42 4505 2273.59 4505 2261 c
-4505 2212.3 l
-4505 2204.05 4502.68 2201.43 4494.85 2200.83 c
-4494.85 2196 l
-4541.95 2196 l
-4541.95 2200.83 l
-4534.9 2201.64 4533 2204.65 4533 2212.3 c
-4533 2266.03 l
-4533 2267.04 4535.73 2270.46 4537.92 2272.68 c
-4542.35 2276.1 4545.97 2278.42 4549.59 2278.42 c
-4557.24 2278.42 4560 2273.38 4560 2261 c
-4560 2212.3 l
-4560 2203.85 4557.85 2201.43 4550.4 2200.83 c
-4550.4 2196 l
-4598.3 2196 l
-4598.3 2201 l
-4590.45 2201.4 4588 2203.78 4588 2212.3 c
-4588 2262.81 l
-4588 2280.12 4577.43 2291.42 4561.07 2291.42 c
-4549.59 2291.42 4541.95 2286.73 4531.48 2273.68 c
-4525.44 2286.36 4518.4 2291.42 4505.72 2291.42 c
-4492.95 2291.42 4483.98 2285.91 4476.4 2273.68 c
-h
-4601.64 2196 m
-f*
-4679.9 2221.16 m
-4671.65 2211.29 4665.61 2207.18 4656.96 2207.18 c
-4649.31 2207.18 4643.27 2210.77 4639.25 2217.94 c
-4635.43 2224.54 4633.82 2231.56 4633.01 2246 c
-4683.73 2246 l
-4682.52 2262.36 4679.5 2271.43 4673.26 2279.12 c
-4666.82 2286.96 4657.36 2291.42 4646.09 2291.42 c
-4620.94 2291.42 4604.03 2271.4 4604.03 2241.88 c
-4604.03 2212.5 4620.53 2193.18 4645.49 2193.18 c
-4661.79 2193.18 4671.65 2199.42 4684.73 2218.34 c
-h
-4632 2253 m
-4632.61 2276.96 4636.23 2284.42 4646.09 2284.42 c
-4651.93 2284.42 4655.55 2281.38 4657.16 2275.49 c
-4658.17 2271.67 4658.57 2266.03 4658.97 2255.77 c
-4658.97 2253 l
-h
-4688.35 2196 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4724 -2196]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-0.564706 g
-3968.15 1929.35 m
-3833.75 1966.55 l
-3929.75 2021.75 l
-3776.15 2031.35 l
-3818.15 2100.95 l
-3670.55 2080.55 l
-3653.75 2152.55 l
-3533.75 2106.95 l
-3458.15 2170.55 l
-3382.55 2106.95 l
-3262.55 2152.55 l
-3244.55 2080.55 l
-3095.75 2100.95 l
-3140.15 2031.35 l
-2986.55 2021.75 l
-3082.55 1966.55 l
-2946.95 1929.35 l
-3082.55 1894.55 l
-2986.55 1838.15 l
-3140.15 1829.75 l
-3095.75 1760.15 l
-3244.55 1779.35 l
-3262.55 1708.55 l
-3382.55 1752.95 l
-3458.15 1689.35 l
-3533.75 1752.95 l
-3653.75 1708.55 l
-3670.55 1779.35 l
-3818.15 1760.15 l
-3776.15 1829.75 l
-3929.75 1838.15 l
-3833.75 1894.55 l
-f*
-1 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-f*
-0 g
-3908.15 1989.35 m
-3773.75 2026.55 l
-3869.75 2081.75 l
-3716.15 2091.35 l
-3758.15 2160.95 l
-3610.55 2140.55 l
-3593.75 2212.55 l
-3473.75 2166.95 l
-3398.15 2230.55 l
-3322.55 2166.95 l
-3202.55 2212.55 l
-3184.55 2140.55 l
-3035.75 2160.95 l
-3080.15 2091.35 l
-2926.55 2081.75 l
-3022.55 2026.55 l
-2886.95 1989.35 l
-3022.55 1954.55 l
-2926.55 1898.15 l
-3080.15 1889.75 l
-3035.75 1820.15 l
-3184.55 1839.35 l
-3202.55 1768.55 l
-3322.55 1812.95 l
-3398.15 1749.35 l
-3473.75 1812.95 l
-3593.75 1768.55 l
-3610.55 1839.35 l
-3758.15 1820.15 l
-3716.15 1889.75 l
-3869.75 1898.15 l
-3773.75 1954.55 l
-3908.15 1989.35 l
-3831.35 1989.35 l
-3722.15 1961.75 l
-3802.55 1914.95 l
-3682.55 1907.75 l
-3719.75 1844.15 l
-3596.15 1862.15 l
-3579.35 1794.95 l
-3470.15 1835.75 l
-3398.15 1775.75 l
-3326.15 1835.75 l
-3215.75 1794.95 l
-3200.15 1862.15 l
-3076.55 1844.15 l
-3114.95 1907.75 l
-2993.75 1914.95 l
-3074.15 1961.75 l
-2964.95 1989.35 l
-3074.15 2018.15 l
-2993.75 2066.15 l
-3114.95 2073.35 l
-3076.55 2135.75 l
-3200.15 2118.95 l
-3215.75 2186.15 l
-3326.15 2144.15 l
-3398.15 2204.15 l
-3470.15 2144.15 l
-3579.35 2186.15 l
-3596.15 2118.95 l
-3719.75 2135.75 l
-3682.55 2073.35 l
-3802.55 2066.15 l
-3722.15 2018.15 l
-3831.35 1989.35 l
-3908.15 1989.35 l
-f*
-0.2 i
-3220.08 2040.76 m
-3200.08 1966.52 l
-3197.52 1957.88 3194.48 1955.64 3184.08 1955 c
-3184.08 1951 l
-3234 1951 l
-3234 1955 l
-3224.72 1955.48 3222.48 1956.76 3222.48 1961.88 c
-3222.48 1963.64 3222.8 1965.4 3223.76 1969.08 c
-3223.92 1969.88 l
-3224.08 1970.68 l
-3243.76 2042.52 l
-3246.16 2050.84 3248.56 2053.08 3256.72 2054.04 c
-3256.72 2058 l
-3222.8 2058 l
-3173.2 1981.24 l
-3164.56 2058 l
-3129.2 2058 l
-3129.2 2054 l
-3139.28 2053.52 3140.72 2052.89 3140.72 2048.44 c
-3140.72 2046.2 3140.08 2043.32 3138.96 2039.16 c
-3121.52 1979.48 l
-3115.12 1958.68 3114 1956.92 3105.36 1955 c
-3105.36 1951 l
-3138.48 1951 l
-3138.48 1955 l
-3128.24 1956.28 3125.68 1958.2 3125.68 1964.76 c
-3125.68 1967.48 3126.48 1971.48 3128.72 1979.48 c
-3144.88 2038.52 l
-3155.6 1949.08 l
-3160.08 1949.08 l
-h
-3252.24 1951 m
-f*
-3321.44 1971.32 m
-3314.88 1962.52 3312.48 1959.76 3309.92 1959.76 c
-3308.64 1959.76 3308 1960.86 3308 1962.52 c
-3308 1966.52 3309.44 1973.08 3313.44 1986.2 c
-3324.8 2023.96 l
-3307.04 2022.84 l
-3304.16 2013.4 l
-3302.72 2021.56 3299.2 2025.08 3292.32 2025.08 c
-3272.64 2025.08 3249 1994.27 3249 1969.24 c
-3249 1957.08 3255.74 1948.92 3265.92 1948.92 c
-3275.68 1948.92 3283.04 1954.68 3292.16 1970.04 c
-3290.24 1963.48 3290 1961.56 3290 1959.32 c
-3290 1953.4 3294.76 1948.76 3300.64 1948.76 c
-3308.16 1948.76 3315.52 1955 3324.8 1968.92 c
-h
-3294.56 2018.2 m
-3298.08 2017.88 3300.56 2015 3300.56 2010.68 c
-3300.56 2001.08 3295.24 1983.32 3288.96 1972.28 c
-3284.64 1964.44 3279.84 1959.92 3275.52 1959.92 c
-3271.36 1959.92 3268 1963.75 3268 1968.92 c
-3268 1977.24 3273.42 1993.24 3280.16 2005.08 c
-3284.96 2013.56 3290.24 2018.52 3294.56 2018.2 c
-h
-3332 1951 m
-f*
-3366.56 2024.92 m
-3350.24 2022.36 3344 2021.4 3335.68 2020.44 c
-3335.68 2016 l
-3342.88 2015.69 3344.32 2015.07 3344.32 2012.12 c
-3344.32 2010.52 3343.04 2004.76 3340.8 1996.44 c
-3324.8 1934.36 l
-3321.76 1923.8 3320.48 1922.84 3312.8 1923 c
-3312.8 1918 l
-3352.64 1918 l
-3352.64 1923 l
-3344.64 1923.14 3342.24 1924.16 3342.24 1927.64 c
-3342.24 1929.88 3343.36 1934.68 3346.4 1945.88 c
-3347.52 1949.72 3347.52 1950.04 3348.16 1952.44 c
-3353.76 1949.56 3355.68 1948.92 3359.04 1948.92 c
-3380.8 1948.92 3403.36 1977.88 3403.36 2005.56 c
-3403.36 2017.4 3396.64 2025.08 3386.08 2025.08 c
-3376.96 2025.08 3369.92 2019.92 3360.48 2006.52 c
-h
-3377.12 2013.56 m
-3381.28 2013.24 3383.68 2009.56 3383.36 2004.44 c
-3382.72 1993.88 3377.6 1978.04 3371.84 1967.64 c
-3366.88 1959 3361.76 1953.92 3356.32 1953.92 c
-3352.8 1953.92 3350.08 1956.75 3350.08 1960.28 c
-3350.08 1963 3351.84 1969.56 3356.16 1984.12 c
-3359.68 1995.8 3361.12 1999.8 3363.52 2003.48 c
-3367.52 2009.72 3372.96 2013.88 3377.12 2013.56 c
-h
-3412 1951 m
-f*
-3447.56 2024.92 m
-3431.24 2022.36 3425 2021.4 3416.68 2020.44 c
-3416.68 2016 l
-3423.88 2015.69 3425.32 2015.07 3425.32 2012.12 c
-3425.32 2010.52 3424.04 2004.76 3421.8 1996.44 c
-3405.8 1934.36 l
-3402.76 1923.8 3401.48 1922.84 3393.8 1923 c
-3393.8 1918 l
-3433.64 1918 l
-3433.64 1923 l
-3425.64 1923.14 3423.24 1924.16 3423.24 1927.64 c
-3423.24 1929.88 3424.36 1934.68 3427.4 1945.88 c
-3428.52 1949.72 3428.52 1950.04 3429.16 1952.44 c
-3434.76 1949.56 3436.68 1948.92 3440.04 1948.92 c
-3461.8 1948.92 3484.36 1977.88 3484.36 2005.56 c
-3484.36 2017.4 3477.64 2025.08 3467.08 2025.08 c
-3457.96 2025.08 3450.92 2019.92 3441.48 2006.52 c
-h
-3458.12 2013.56 m
-3462.28 2013.24 3464.68 2009.56 3464.36 2004.44 c
-3463.72 1993.88 3458.6 1978.04 3452.84 1967.64 c
-3447.88 1959 3442.76 1953.92 3437.32 1953.92 c
-3433.8 1953.92 3431.08 1956.75 3431.08 1960.28 c
-3431.08 1963 3432.84 1969.56 3437.16 1984.12 c
-3440.68 1995.8 3442.12 1999.8 3444.52 2003.48 c
-3448.52 2009.72 3453.96 2013.88 3458.12 2013.56 c
-h
-3493 1951 m
-f*
-3526.56 1973.56 m
-3524.32 1970.36 l
-3520.16 1964.12 3516.48 1960.56 3514.08 1960.56 c
-3512.8 1960.56 3512 1961.77 3512 1963.16 c
-3512 1964.6 3512.62 1968.76 3513.12 1971.48 c
-3527.68 2024.92 l
-3519.22 2023 3508.26 2021.4 3496.04 2020.44 c
-3496.04 2016 l
-3497.44 2016 l
-3502.24 2016 3505.48 2014.44 3505.48 2011.48 c
-3505.48 2010.2 3504.71 2007.8 3503.68 2005.08 c
-3494.4 1970.68 l
-3493.12 1966.04 3493 1961.88 3493 1959.64 c
-3493 1953.56 3497.2 1949.56 3503.36 1949.56 c
-3512.96 1949.56 3518.88 1954.36 3530.08 1971.32 c
-h
-3522.88 2060.4 m
-3517.44 2060.4 3513 2055.46 3513 2050.04 c
-3513 2043.8 3517.26 2039.4 3523.04 2039.4 c
-3529.12 2039.4 3534 2043.86 3534 2049.56 c
-3534 2055.48 3529 2060.4 3522.88 2060.4 c
-h
-3536.48 1951 m
-f*
-3611.36 1972.6 m
-3604.96 1962.68 3602.88 1960.56 3600.16 1960.56 c
-3598.88 1960.56 3598 1961.63 3598 1963.16 c
-3598 1964.76 3598.94 1968.12 3601.92 1977.08 c
-3607.68 1994.52 l
-3610.24 2002.04 3612 2009.08 3612 2012.92 c
-3612 2020.76 3607.78 2025.08 3600.16 2025.08 c
-3594.24 2025.08 3588.48 2022.62 3584.16 2018.36 c
-3578.24 2012.76 3575.2 2008.92 3564.48 1993.08 c
-3574.72 2024.76 l
-3564.48 2022.52 3551.68 2020.92 3542.72 2020.6 c
-3542.72 2015.8 l
-3549.44 2015.65 3551.36 2014.92 3551.36 2012.12 c
-3551.36 2010.2 3549.12 2001.72 3544 1983.64 c
-3540.32 1970.68 3539.2 1966.52 3535.04 1951 c
-3554.4 1951 l
-3561.92 1978.68 3567.68 1992.6 3577.6 2005.56 c
-3580.8 2009.88 3585.76 2013.08 3588.64 2013.08 c
-3590.72 2013.08 3593 2011.63 3593 2010.04 c
-3593 2009.56 3592.54 2008.28 3591.84 2006.68 c
-3583.04 1980.12 l
-3580.48 1972.44 3579 1963.32 3579 1959.16 c
-3579 1953.08 3582.84 1949.56 3589.44 1949.56 c
-3599.04 1949.56 3605.6 1955 3614.88 1970.52 c
-h
-3624.96 1951 m
-f*
-3702.48 2020 m
-3684.72 2020 l
-3679.28 2023.58 3674.48 2025.08 3667.12 2025.08 c
-3647.44 2025.08 3631 2012.05 3631 1995.8 c
-3631 1987.64 3635.35 1981.88 3644.4 1978.2 c
-3631.28 1970.84 3629 1968.6 3629 1962.68 c
-3629 1957.56 3631.89 1954.52 3638.96 1952.12 c
-3629.04 1949.72 3625.84 1948.44 3622 1945.4 c
-3619.44 1943.16 3618 1939.32 3618 1935.48 c
-3618 1925.08 3629.56 1919 3647.76 1919 c
-3670.32 1919 3686 1928.72 3686 1942.52 c
-3686 1952.28 3679.6 1957.56 3662.16 1962.52 c
-3653.68 1964.92 l
-3648.56 1966.36 3645 1968.6 3645 1971 c
-3645 1973.56 3647.68 1976.28 3650 1976.28 c
-3650.8 1976.28 3651.92 1976.24 3653.2 1976.12 c
-3654.96 1975.64 3656.24 1975 3658.16 1975 c
-3665.2 1975 3672.4 1977.09 3678.48 1980.92 c
-3687.76 1986.2 3693 1994.36 3693 2003.96 c
-3693 2006.64 3692.59 2008.32 3691.76 2011 c
-3702.48 2011 l
-h
-3644.4 1950.04 m
-3646.32 1949.88 3658.48 1945.72 3662 1944.12 c
-3666.48 1941.88 3669 1939.16 3669 1935 c
-3669 1927.96 3661.8 1924 3649.36 1924 c
-3638.96 1924 3632 1929.1 3632 1936.44 c
-3632 1939.48 3633.32 1942.2 3636.24 1945.24 c
-3638.32 1947.32 3643.12 1950.2 3644.4 1950.04 c
-h
-3666.8 2020.08 m
-3670.96 2020.08 3674 2016.19 3674 2010.52 c
-3674 2005.08 3672.08 1997.4 3669.36 1991.48 c
-3666 1984.12 3661.84 1980 3656.88 1980 c
-3652.56 1980 3650 1983.52 3650 1989.88 c
-3650 1996.28 3652.79 2006.04 3656.24 2012.12 c
-3659.28 2017.4 3662.64 2020.08 3666.8 2020.08 c
-h
-3706 1951 m
-f*
-1 i
-16 w
-3681.35 1641.35 m
-3749.75 1571.75 3842.15 1533.35 3938.15 1533.35 c
-4139.75 1533.35 4304.15 1702.55 4304.15 1911.35 c
-4304.15 1926.95 4304.15 1942.55 4301.75 1956.95 c
-S
-3759.35 1642.55 m
-3700.55 1625.75 l
-3668.15 1572.95 l
-3603.35 1756.55 l
-f*
-4449.35 3286.55 m
-4382.15 3365.75 4295.75 3410.15 4204.55 3410.15 c
-4095.35 3410.15 3990.95 3345.35 3922.55 3233.75 c
-S
-3892.55 3297.35 m
-3935.75 3251.75 l
-3996.95 3248.15 l
-3867.35 3104.15 l
-f*
-3825.35 2710.55 m
-3833.75 2628.95 3864.95 2553.35 3911.75 2494.55 c
-S
-3844.55 2488.55 m
-3899.75 2516.15 l
-3921.35 2574.95 l
-4019.75 2406.95 l
-f*
-2993.75 3830.15 m
-2837.75 3830.15 2690.15 3794.15 2579.75 3729.35 c
-S
-2595.35 3800.15 m
-2609.75 3740.15 l
-2661.35 3706.55 l
-2476.55 3647.75 l
-f*
-4568.15 3344.15 m
-4443.35 3527.75 4288.55 3671.75 4116.95 3762.95 c
-S
-4185.35 3790.55 m
-4139.75 3748.55 l
-4134.95 3687.35 l
-3993.35 3819.35 l
-f*
-0.279998 i
-550 3530.52 m
-550 3388 l
-550 3372.32 546.055 3368.96 524.919 3367 c
-524.919 3360 l
-617.878 3360 l
-617.878 3367 l
-596.039 3369.8 593 3372.88 593 3392.76 c
-593 3516.52 l
-593 3536.68 597.24 3540.88 617.878 3542.28 c
-617.878 3549 l
-547.319 3549 l
-491.319 3417.12 l
-435.319 3549 l
-364.48 3549 l
-364.48 3542.28 l
-384.92 3540.6 389 3536.96 389 3522.4 c
-389 3389.4 l
-389 3372.6 385.417 3369.24 363.92 3367 c
-363.92 3360 l
-429.439 3360 l
-429.439 3367 l
-406.479 3368.68 400.999 3374 400.999 3394.72 c
-400.999 3526.32 l
-471.719 3360 l
-479.279 3360 l
-h
-624.318 3360 m
-f*
-682 3489 m
-628.48 3489 l
-628.48 3482.36 l
-640.8 3479.84 643 3477.32 643 3465.84 c
-643 3383.52 l
-643 3372.04 641.082 3369.8 628.48 3366.72 c
-628.48 3360 l
-695.4 3360 l
-695.4 3366.72 l
-685.6 3368.12 682 3372.04 682 3382.68 c
-h
-662.92 3553.2 m
-650.32 3553.2 641 3543.8 641 3531.64 c
-641 3519.32 650.154 3510.2 662.36 3510.2 c
-674.68 3510.2 684 3519.39 684 3531.64 c
-684 3543.68 674.569 3553.2 662.92 3553.2 c
-h
-701.839 3360 m
-f*
-797.12 3451.28 m
-797.12 3491.8 l
-791.04 3491.8 l
-789.36 3487.66 787.68 3486.2 784.04 3486.2 c
-782.36 3486.2 779.84 3486.78 775.36 3488.24 c
-766.4 3491.32 759.96 3492.36 753.52 3492.36 c
-728.04 3492.36 710 3475.03 710 3451.56 c
-710 3433.08 721.353 3420.2 749.32 3408.16 c
-768.64 3399.76 776 3392.76 776 3383.8 c
-776 3372.88 767.68 3365.08 755.2 3365.08 c
-735.6 3365.08 722.72 3377.86 716.841 3402.56 c
-709.001 3402.56 l
-709.001 3356.36 l
-716.001 3356.36 l
-719.081 3362.24 720.761 3364.2 723.281 3364.2 c
-724.681 3364.2 726.921 3363.64 729.721 3362.52 c
-737.841 3359.16 752.121 3356.08 759.96 3356.08 c
-785.44 3356.08 803.001 3373.44 803.001 3398.64 c
-803.001 3418.52 792.383 3430.84 764.44 3442.32 c
-745.401 3450.44 738.001 3457.44 738.001 3466.96 c
-738.001 3476.2 745.654 3483.36 756.041 3483.36 c
-763.601 3483.36 770.881 3480.22 777.041 3474.24 c
-782.92 3468.64 786 3463.32 790.2 3451.28 c
-h
-810.919 3360 m
-f*
-906.12 3451.28 m
-906.12 3491.8 l
-900.04 3491.8 l
-898.36 3487.66 896.68 3486.2 893.04 3486.2 c
-891.36 3486.2 888.84 3486.78 884.36 3488.24 c
-875.4 3491.32 868.96 3492.36 862.52 3492.36 c
-837.04 3492.36 819 3475.03 819 3451.56 c
-819 3433.08 830.353 3420.2 858.32 3408.16 c
-877.64 3399.76 885 3392.76 885 3383.8 c
-885 3372.88 876.68 3365.08 864.2 3365.08 c
-844.6 3365.08 831.72 3377.86 825.841 3402.56 c
-818.001 3402.56 l
-818.001 3356.36 l
-825.001 3356.36 l
-828.081 3362.24 829.761 3364.2 832.281 3364.2 c
-833.681 3364.2 835.921 3363.64 838.721 3362.52 c
-846.841 3359.16 861.121 3356.08 868.96 3356.08 c
-894.44 3356.08 912.001 3373.44 912.001 3398.64 c
-912.001 3418.52 901.383 3430.84 873.44 3442.32 c
-854.401 3450.44 847.001 3457.44 847.001 3466.96 c
-847.001 3476.2 854.654 3483.36 865.041 3483.36 c
-872.601 3483.36 879.881 3480.22 886.041 3474.24 c
-891.92 3468.64 895 3463.32 899.2 3451.28 c
-h
-919.919 3360 m
-f*
-978 3489 m
-924.48 3489 l
-924.48 3482.36 l
-936.8 3479.84 939 3477.32 939 3465.84 c
-939 3383.52 l
-939 3372.04 937.082 3369.8 924.48 3366.72 c
-924.48 3360 l
-991.4 3360 l
-991.4 3366.72 l
-981.6 3368.12 978 3372.04 978 3382.68 c
-h
-958.92 3553.2 m
-946.32 3553.2 937 3543.8 937 3531.64 c
-937 3519.32 946.154 3510.2 958.36 3510.2 c
-970.68 3510.2 980 3519.39 980 3531.64 c
-980 3543.68 970.569 3553.2 958.92 3553.2 c
-h
-997.839 3360 m
-f*
-1056.72 3489 m
-1002.88 3489 l
-1002.88 3482.36 l
-1015.2 3480.4 1018 3477.6 1018 3465.84 c
-1018 3383.52 l
-1018 3371.76 1015.72 3369.24 1002.88 3366.72 c
-1002.88 3360 l
-1070.36 3360 l
-1070.36 3366.72 l
-1060 3368.12 1057 3372.32 1057 3382.68 c
-1057 3457.44 l
-1057 3458.56 1058.81 3461.36 1061.4 3464.16 c
-1067.56 3470.32 1074.28 3474.36 1081 3474.36 c
-1090.52 3474.36 1095 3466.58 1095 3450.44 c
-1095 3382.68 l
-1095 3372.32 1091.44 3367.84 1082.12 3366.72 c
-1082.12 3360 l
-1147.92 3360 l
-1147.92 3366.72 l
-1137 3367.56 1134 3370.92 1134 3382.68 c
-1134 3452.96 l
-1134 3477.04 1119.24 3492.36 1096.4 3492.36 c
-1079.75 3492.36 1066.99 3484.55 1056.72 3468.08 c
-h
-1152.68 3360 m
-f*
-1287.96 3471 m
-1287.96 3486 l
-1251.56 3486 l
-1239.24 3490.68 1231.4 3492.36 1220.2 3492.36 c
-1186.88 3492.36 1164 3473.91 1164 3447.36 c
-1164 3437.84 1167.15 3428.6 1173.44 3420.76 c
-1179.6 3414.04 1184.92 3410.4 1198.08 3404.8 c
-1175.96 3397.52 1165.4 3386.6 1165.4 3372.04 c
-1165.4 3360.56 1170.3 3355.52 1187.72 3349.08 c
-1170.08 3346.56 1161 3339.56 1161 3328.08 c
-1161 3311.84 1181.94 3302 1217.12 3302 c
-1263.88 3302 1288 3316.67 1288 3344.6 c
-1288 3366.16 1270.73 3379 1242.32 3379 c
-1224.12 3379 l
-1201.72 3379 1196.12 3380.97 1196.12 3388.84 c
-1196.12 3397.24 1204.24 3403.12 1215.16 3403.12 c
-1240.64 3403.12 1241.48 3403.12 1250.72 3407.04 c
-1267.8 3414.04 1277 3426.36 1277 3444 c
-1277 3455.02 1273.48 3463.28 1265.28 3471 c
-h
-1243.72 3345 m
-1258.84 3345 1266 3340.66 1266 3331.44 c
-1266 3318.56 1250.64 3311 1223 3311 c
-1198.36 3311 1186 3317.53 1186 3330.04 c
-1186 3335.75 1187.86 3338.74 1195.28 3345 c
-h
-1219.92 3483.36 m
-1233.36 3483.36 1239 3473.11 1239 3447.36 c
-1239 3421.04 1233.87 3410.96 1220.2 3410.96 c
-1206.76 3410.96 1202 3421.04 1202 3447.08 c
-1202 3473.4 1206.96 3483.36 1219.92 3483.36 c
-h
-1293 3360 m
-f*
-717.639 3087.56 m
-709.519 3087.56 l
-699.999 3065.72 694.679 3057.04 684.879 3048.08 c
-673.399 3037.72 657.719 3033 635.879 3033 c
-618.8 3033 614 3036.57 614 3048.36 c
-614 3180.52 l
-614 3201.52 617.886 3205.16 642.039 3206.28 c
-642.039 3213 l
-544.32 3213 l
-544.32 3206 l
-563.36 3204.9 568 3200.48 568 3186.4 c
-568 3050.88 l
-568 3036.6 564.42 3033.52 544.32 3031 c
-544.32 3024 l
-706.159 3024 l
-h
-725.759 3024 m
-f*
-783 3153 m
-729.48 3153 l
-729.48 3146.36 l
-741.8 3143.84 744 3141.32 744 3129.84 c
-744 3047.52 l
-744 3036.04 742.082 3033.8 729.48 3030.72 c
-729.48 3024 l
-796.4 3024 l
-796.4 3030.72 l
-786.6 3032.12 783 3036.04 783 3046.68 c
-h
-763.92 3217.2 m
-751.32 3217.2 742 3207.8 742 3195.64 c
-742 3183.32 751.154 3174.2 763.36 3174.2 c
-775.68 3174.2 785 3183.39 785 3195.64 c
-785 3207.68 775.569 3217.2 763.92 3217.2 c
-h
-802.839 3024 m
-f*
-863.72 3153 m
-809.88 3153 l
-809.88 3146.36 l
-822.2 3144.4 825 3141.6 825 3129.84 c
-825 3047.52 l
-825 3035.76 822.717 3033.24 809.88 3030.72 c
-809.88 3024 l
-877.359 3024 l
-877.359 3030.72 l
-867 3032.12 864 3036.32 864 3046.68 c
-864 3121.44 l
-864 3122.56 865.811 3125.36 868.4 3128.16 c
-874.56 3134.32 881.28 3138.36 888 3138.36 c
-897.52 3138.36 902 3130.58 902 3114.44 c
-902 3046.68 l
-902 3036.32 898.437 3031.84 889.12 3030.72 c
-889.12 3024 l
-954.919 3024 l
-954.919 3030.72 l
-943.999 3031.56 941 3034.92 941 3046.68 c
-941 3116.96 l
-941 3141.04 926.238 3156.36 903.399 3156.36 c
-886.75 3156.36 873.987 3148.55 863.72 3132.08 c
-h
-959.679 3024 m
-f*
-1102.64 3153.08 m
-1042.72 3153.08 l
-1042.72 3146.64 l
-1049.44 3145.52 l
-1056.44 3144.68 1059.24 3142.72 1059.24 3139.08 c
-1059.24 3136.56 1056.44 3131.52 1053.36 3128.44 c
-1018 3092.6 l
-1018 3213 l
-965.16 3213 l
-965.16 3206.56 l
-974.68 3205.72 979 3200.96 979 3190.32 c
-979 3047.52 l
-979 3036.6 974.675 3031.56 965.16 3030.72 c
-965.16 3024 l
-1032.08 3024 l
-1032.08 3030.72 l
-1018.92 3032.68 1018 3034.36 1018 3047.52 c
-1018 3079.44 l
-1023.96 3086.16 l
-1050.56 3048.64 l
-1055.6 3041.64 1057.28 3038.28 1057.28 3036.04 c
-1057.28 3032.68 1053.36 3031 1045.52 3030.72 c
-1045.52 3024 l
-1111.04 3024 l
-1111.04 3031 l
-1107.96 3031 1106.56 3031.78 1104.04 3034.92 c
-1049.72 3109.96 l
-1077.72 3139.36 1085 3144.4 1102.64 3146.64 c
-h
-1114.68 3024 m
-f*
-0.24 i
-4919.04 4974 m
-4919.04 5025.84 l
-4911.96 5025.84 l
-4910.28 5019.55 4908.6 5017.92 4904.28 5017.92 c
-4902.12 5017.92 4899.24 5018.64 4894.2 5020.32 c
-4883.16 5024.4 4875.48 5025.6 4866.12 5025.6 c
-4833.48 5025.6 4814 5007.21 4814 4976.88 c
-4814 4970.88 4814.8 4965.84 4816.2 4961.04 c
-4821.24 4948.32 4834.2 4937.04 4854.6 4927.2 c
-4870.68 4919.52 l
-4891.8 4909.44 4897 4903.2 4897 4890.48 c
-4897 4873.92 4885.46 4863.44 4867.32 4863.44 c
-4853.4 4863.44 4841.88 4869.17 4832.76 4880.64 c
-4825.8 4889.52 4822.44 4897.68 4818.36 4914.72 c
-4811.4 4914.72 l
-4811.4 4855.44 l
-4818.36 4855.44 l
-4819.8 4861.68 4821.72 4863.6 4825.56 4863.6 c
-4827.48 4863.6 4830.12 4862.88 4835.4 4861.2 c
-4847.16 4857.12 4856.04 4855.44 4866.6 4855.44 c
-4902.12 4855.44 4926 4875.84 4926 4906.08 c
-4926 4924.08 4915.25 4942.08 4899.72 4949.76 c
-4864.44 4967.28 l
-4845 4976.88 4840 4982.64 4840 4994.4 c
-4840 5009.28 4849.97 5017.6 4866.12 5017.6 c
-4876.92 5017.6 4887 5013.31 4895.64 5004.96 c
-4903.8 4996.56 4907.64 4989.6 4912.44 4974 c
-h
-4936.44 4860 m
-f*
-4998.96 4973.88 m
-4967.28 4973.88 4944 4949.01 4944 4914.72 c
-4944 4881.36 4967.04 4856.64 4998 4856.64 c
-5029.44 4856.64 5052 4881.36 5052 4914.96 c
-5052 4948.32 5029.06 4973.88 4998.96 4973.88 c
-h
-4998.24 4965.88 m
-5012.4 4965.88 5017 4953.21 5017 4912.32 c
-5017 4876.56 5012.19 4864.64 4998.24 4864.64 c
-4984.32 4864.64 4979 4876.73 4979 4911.12 c
-4979 4937.28 4980.27 4948.08 4984.08 4956.24 c
-4986.72 4962.72 4991.76 4965.88 4998.24 4965.88 c
-h
-5058 4860 m
-f*
-5140.24 4856.88 m
-5150.59 4860.48 5156.36 4861.44 5172 4863.12 c
-5186.88 4864.8 l
-5186.88 4871 l
-5176.32 4871.46 5174 4874.42 5174 4884.24 c
-5174 4971 l
-5125.2 4971 l
-5125.2 4964.88 l
-5137.2 4963.92 5140 4961.04 5140 4950.72 c
-5140 4882.8 l
-5132.11 4874.88 5127.33 4872.64 5120.4 4872.64 c
-5110.56 4872.64 5107 4877.33 5107 4889.28 c
-5107 4971 l
-5061.84 4971 l
-5061.84 4964.88 l
-5071.68 4962.96 5073 4960.8 5073 4950.72 c
-5073 4890.24 l
-5073 4869.12 5085.23 4856.64 5105.52 4856.64 c
-5117.97 4856.64 5126.35 4860.48 5140.24 4872.48 c
-h
-5191.44 4860 m
-f*
-5244.04 4971 m
-5197.96 4971 l
-5197.96 4964.88 l
-5208.28 4963.44 5211 4960.32 5211 4950.72 c
-5211 4880.16 l
-5211 4870.32 5208.59 4867.68 5197.96 4865.76 c
-5197.96 4860 l
-5261.8 4860 l
-5261.8 4865.76 l
-5247.16 4866.72 5245 4869.84 5245 4884.72 c
-5245 4930.08 l
-5245 4942.56 5251.39 4952.88 5258.92 4952.88 c
-5260.84 4952.88 5263 4951.2 5265.64 4947.36 c
-5270.2 4940.88 5273.8 4938.72 5280.04 4938.72 c
-5288.92 4938.72 5295.16 4945.44 5295.16 4954.56 c
-5295.16 4965.6 5287 4973.88 5275.72 4973.88 c
-5263.99 4973.88 5255.07 4967.54 5244.04 4950.96 c
-h
-5297.56 4860 m
-f*
-5396.88 4886.16 m
-5388 4876.08 5381.76 4872.64 5371.92 4872.64 c
-5351.04 4872.64 5338 4893.55 5338 4926.24 c
-5338 4950.96 5345.62 4965.88 5358 4965.88 c
-5361.84 4965.88 5365.44 4964.04 5366.88 4961.52 c
-5368.08 4959.36 5368.08 4959.36 5368.08 4949.28 c
-5368.32 4937.28 5372.4 4932 5381.52 4932 c
-5391.6 4932 5397.84 4937.76 5397.84 4947.12 c
-5397.84 4962 5381.76 4973.88 5360.88 4973.88 c
-5328 4973.88 5304 4948.53 5304 4913.52 c
-5304 4880.16 5325.36 4856.64 5355.36 4856.64 c
-5373.84 4856.64 5387.28 4864.08 5401.2 4881.84 c
-h
-5404.56 4860 m
-f*
-5499.48 4890 m
-5489.64 4878.24 5482.44 4873.64 5472.12 4873.64 c
-5463 4873.64 5455.8 4877.81 5451 4886.16 c
-5446.44 4893.89 5444.52 4902.1 5443.56 4919 c
-5504.04 4919 l
-5502.6 4938.82 5499 4949.81 5491.56 4959.12 c
-5483.88 4968.48 5472.6 4973.88 5459.16 4973.88 c
-5429.16 4973.88 5409 4949.97 5409 4914.72 c
-5409 4879.68 5428.68 4856.64 5458.44 4856.64 c
-5477.88 4856.64 5489.64 4864.08 5505.24 4886.64 c
-h
-5442.36 4928 m
-5443.08 4956.56 5447.4 4965.88 5459.16 4965.88 c
-5466.12 4965.88 5470.44 4962.11 5472.36 4954.8 c
-5473.56 4950.24 5474.04 4943.52 5474.52 4931.28 c
-5474.52 4928 l
-h
-5509.56 4860 m
-f*
-1 i
-4803.35 4811.75 705.6 21.5999 re
-f
-32 w
-3701.75 4956.95 1041.6 457.2 re
-Y
-3701.75 5392.55 m
-4733.75 4979.75 l
-S
-0 0 6120 7920 re
-Y
-3791.75 5439.35 m
-3735.35 5379.35 l
-3735.35 5296.55 l
-3533.75 5459.75 l
-f*
-0.24 i
-449 981.84 m
-449 971.28 443.084 966.48 429.36 966 c
-429.36 960 l
-505.2 960 l
-530.88 960 554.88 969.12 570 984.96 c
-583.92 999.12 592 1019.76 592 1042.8 c
-592 1092.24 558.49 1122 502.56 1122 c
-429.36 1122 l
-429.36 1116.24 l
-444.72 1114.8 449 1111.2 449 1100.16 c
-h
-488 1105.68 m
-488 1111.2 492.854 1114 502.32 1114 c
-519.36 1114 531.36 1106.35 539.76 1090.08 c
-546.48 1077.36 550 1059.84 550 1039.2 c
-550 1016.88 545.379 996.48 537.84 985.68 c
-529.68 974.16 517.92 968 502.08 968 c
-491.28 968 488 971.21 488 982.32 c
-h
-599.28 960 m
-f*
-696.48 990 m
-686.64 978.24 679.44 973.64 669.12 973.64 c
-660 973.64 652.8 977.813 648 986.16 c
-643.44 993.887 641.52 1002.1 640.56 1019 c
-701.04 1019 l
-699.6 1038.82 696 1049.81 688.56 1059.12 c
-680.88 1068.48 669.6 1073.88 656.16 1073.88 c
-626.16 1073.88 606 1049.97 606 1014.72 c
-606 979.68 625.68 956.64 655.44 956.64 c
-674.88 956.64 686.64 964.08 702.24 986.64 c
-h
-639.36 1028 m
-640.08 1056.56 644.4 1065.88 656.16 1065.88 c
-663.12 1065.88 667.44 1062.11 669.36 1054.8 c
-670.56 1050.24 671.04 1043.52 671.52 1031.28 c
-671.52 1028 l
-h
-706.56 960 m
-f*
-788.96 1038.24 m
-788.96 1073.4 l
-783.32 1073.4 l
-781.88 1069.53 780.44 1068.6 777.32 1068.6 c
-775.88 1068.6 773.72 1068.98 769.88 1069.92 c
-762.2 1072.56 756.68 1073.88 751.16 1073.88 c
-729.32 1073.88 713 1058.85 713 1038.48 c
-713 1022.64 722.979 1011.6 747.56 1001.28 c
-764.12 994.08 771 988.08 771 980.4 c
-771 971.04 763.64 964.64 752.6 964.64 c
-735.8 964.64 724.76 975.494 719.72 996.48 c
-713 996.48 l
-713 956.88 l
-719 956.88 l
-721.64 961.92 723.08 963.6 725.24 963.6 c
-726.44 963.6 728.36 963.12 730.76 962.16 c
-737.719 959.28 749.959 956.64 756.679 956.64 c
-778.52 956.64 794 971.52 794 993.12 c
-794 1010.16 784.78 1020.72 760.52 1030.56 c
-744.199 1037.52 737 1043.52 737 1051.68 c
-737 1059.6 743.923 1065.88 753.32 1065.88 c
-759.8 1065.88 766.04 1063.14 771.32 1057.92 c
-776.36 1053.12 779 1048.56 782.6 1038.24 c
-h
-800.36 960 m
-f*
-873.2 1071 m
-851 1071 l
-851 1111.2 l
-844.64 1111.2 l
-830 1090.56 820.4 1079.76 804.8 1066.56 c
-804.8 1060 l
-817 1060 l
-817 982.32 l
-817 966.72 827.427 957.12 844.16 957.12 c
-860.24 957.12 869.84 964.32 879.68 984 c
-873.68 986.64 l
-868.88 977.52 865.04 974.119 860 974.119 c
-853.28 974.119 851 978.211 851 987.84 c
-851 1060 l
-873.2 1060 l
-h
-879.92 960 m
-f*
-929 1071 m
-882.84 1071 l
-882.84 1064.88 l
-893.4 1062.72 895 1060.56 895 1050.72 c
-895 980.16 l
-895 970.32 893.394 968.4 882.84 965.76 c
-882.84 960 l
-940.2 960 l
-940.2 965.76 l
-931.8 966.96 929 970.32 929 979.44 c
-h
-912.36 1125.6 m
-901.56 1125.6 894 1117.54 894 1107.12 c
-894 1096.56 901.663 1088.6 911.88 1088.6 c
-922.44 1088.6 931 1096.54 931 1107.12 c
-931 1117.44 922.661 1125.6 912.36 1125.6 c
-h
-945.72 960 m
-f*
-997.76 1071 m
-952.04 1071 l
-952.04 1064.88 l
-962.6 1063.2 964 1060.8 964 1050.72 c
-964 980.16 l
-964 970.08 962.195 967.92 952.04 965.76 c
-952.04 960 l
-1009.88 960 l
-1009.88 965.76 l
-1001 966.96 998 970.56 998 979.44 c
-998 1043.52 l
-998 1044.48 999.729 1046.88 1002.2 1049.28 c
-1007.48 1054.56 1013.24 1057.88 1019 1057.88 c
-1027.16 1057.88 1031 1051.26 1031 1037.52 c
-1031 979.44 l
-1031 970.56 1027.95 966.72 1019.96 965.76 c
-1019.96 960 l
-1076.36 960 l
-1076.36 965.76 l
-1067 966.48 1065 969.36 1065 979.44 c
-1065 1039.68 l
-1065 1060.32 1052.12 1073.88 1032.2 1073.88 c
-1017.75 1073.88 1006.67 1067.04 997.76 1052.64 c
-h
-1080.44 960 m
-f*
-1193.52 975.36 m
-1191.12 972.96 l
-1190.4 972.24 1189.68 972 1188.48 972 c
-1185.12 972 1184 973.92 1184 978 c
-1184 1040.64 l
-1184 1061.04 1165.54 1073.88 1135.92 1073.88 c
-1108.8 1073.88 1090.56 1061.49 1090.56 1043.28 c
-1090.56 1033.2 1096.32 1027.44 1106.16 1027.44 c
-1115.76 1027.44 1122.48 1033.2 1122.48 1041.36 c
-1122.48 1044.72 1121.28 1047.84 1118.16 1051.68 c
-1116 1054.08 1115.28 1055.52 1115.28 1056.96 c
-1115.28 1062 1121.76 1065.88 1130.4 1065.88 c
-1144.56 1065.88 1151 1059.39 1151 1044.72 c
-1151 1027.2 l
-1122.67 1018.56 1111.28 1014.24 1102.08 1008.24 c
-1091.28 1001.04 1086 992.64 1086 982.08 c
-1086 967.44 1097.04 956.64 1112.4 956.64 c
-1126.32 956.64 1137.36 961.44 1150.56 973.44 c
-1153.2 961.2 1158.48 956.64 1170.24 956.64 c
-1180.56 956.64 1188 960.48 1197.12 970.321 c
-h
-1150 984 m
-1143.64 976.561 1138.93 973.681 1133.28 973.681 c
-1126.08 973.681 1121 980.161 1121 989.761 c
-1121 1003.68 1130.98 1013.52 1150 1018.8 c
-h
-1200 960 m
-f*
-1273.2 1071 m
-1251 1071 l
-1251 1111.2 l
-1244.64 1111.2 l
-1230 1090.56 1220.4 1079.76 1204.8 1066.56 c
-1204.8 1060 l
-1217 1060 l
-1217 982.32 l
-1217 966.72 1227.43 957.12 1244.16 957.12 c
-1260.24 957.12 1269.84 964.32 1279.68 984 c
-1273.68 986.64 l
-1268.88 977.52 1265.04 974.119 1260 974.119 c
-1253.28 974.119 1251 978.211 1251 987.84 c
-1251 1060 l
-1273.2 1060 l
-h
-1279.92 960 m
-f*
-1330 1071 m
-1283.84 1071 l
-1283.84 1064.88 l
-1294.4 1062.72 1296 1060.56 1296 1050.72 c
-1296 980.16 l
-1296 970.32 1294.39 968.4 1283.84 965.76 c
-1283.84 960 l
-1341.2 960 l
-1341.2 965.76 l
-1332.8 966.96 1330 970.32 1330 979.44 c
-h
-1313.36 1125.6 m
-1302.56 1125.6 1295 1117.54 1295 1107.12 c
-1295 1096.56 1302.66 1088.6 1312.88 1088.6 c
-1323.44 1088.6 1332 1096.54 1332 1107.12 c
-1332 1117.44 1323.66 1125.6 1313.36 1125.6 c
-h
-1346.72 960 m
-f*
-1406.96 1073.88 m
-1375.28 1073.88 1352 1049.01 1352 1014.72 c
-1352 981.36 1375.04 956.64 1406 956.64 c
-1437.44 956.64 1460 981.36 1460 1014.96 c
-1460 1048.32 1437.06 1073.88 1406.96 1073.88 c
-h
-1406.24 1065.88 m
-1420.4 1065.88 1425 1053.21 1425 1012.32 c
-1425 976.56 1420.19 964.64 1406.24 964.64 c
-1392.32 964.64 1387 976.734 1387 1011.12 c
-1387 1037.28 1388.27 1048.08 1392.08 1056.24 c
-1394.72 1062.72 1399.76 1065.88 1406.24 1065.88 c
-h
-1466 960 m
-f*
-1516.76 1071 m
-1471.04 1071 l
-1471.04 1064.88 l
-1481.6 1063.2 1483 1060.8 1483 1050.72 c
-1483 980.16 l
-1483 970.08 1481.19 967.92 1471.04 965.76 c
-1471.04 960 l
-1528.88 960 l
-1528.88 965.76 l
-1520 966.96 1517 970.56 1517 979.44 c
-1517 1043.52 l
-1517 1044.48 1518.73 1046.88 1521.2 1049.28 c
-1526.48 1054.56 1532.24 1057.88 1538 1057.88 c
-1546.16 1057.88 1550 1051.26 1550 1037.52 c
-1550 979.44 l
-1550 970.56 1546.95 966.72 1538.96 965.76 c
-1538.96 960 l
-1595.36 960 l
-1595.36 965.76 l
-1586 966.48 1584 969.36 1584 979.44 c
-1584 1039.68 l
-1584 1060.32 1571.12 1073.88 1551.2 1073.88 c
-1536.75 1073.88 1525.67 1067.04 1516.76 1052.64 c
-h
-1599.44 960 m
-f*
-1 i
-425.75 911.751 1172.4 21.5999 re
-f
-1133.75 1190.15 669.6 772.8 re
-Y
-1133.75 1199.75 m
-1793.75 1962.95 l
-S
-0 0 6120 7920 re
-Y
-1809.35 1862.15 m
-1772.15 1936.55 l
-1691.75 1962.95 l
-1913.75 2099.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsconvert.eps b/ast-5.3-1/sun211_figures/fsconvert.eps
deleted file mode 100644
index cd0d973..0000000
--- a/ast-5.3-1/sun211_figures/fsconvert.eps
+++ /dev/null
@@ -1,1748 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 95 389 528 576
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/23 14:34:13
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5273.75 5475.35 m
-5273.75 5600.15 5172.95 5700.95 5048.15 5700.95 c
-1238.15 5700.95 l
-1113.35 5700.95 1012.55 5600.15 1012.55 5475.35 c
-1012.55 4125.35 l
-1012.55 4000.55 1113.35 3899.75 1238.15 3899.75 c
-5048.15 3899.75 l
-5172.95 3899.75 5273.75 4000.55 5273.75 4125.35 c
-f*
-1 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5208.95 5531.75 m
-5208.95 5655.35 5109.35 5754.95 4984.55 5754.95 c
-1182.95 5754.95 l
-1058.15 5754.95 958.55 5655.35 958.55 5531.75 c
-958.55 4187.75 l
-958.55 4064.15 1058.15 3964.55 1182.95 3964.55 c
-4984.55 3964.55 l
-5109.35 3964.55 5208.95 4064.15 5208.95 4187.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1395.35 5256.95 l
-1283.75 5256.95 1192.55 5165.75 1192.55 5055.35 c
-1192.55 4917.35 l
-1192.55 4806.95 1283.75 4715.75 1395.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1342.55 5306.15 l
-1232.15 5306.15 1143.35 5218.55 1143.35 5111.75 c
-1143.35 4979.75 l
-1143.35 4872.95 1232.15 4785.35 1342.55 4785.35 c
-1994.15 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1339.16 5171.59 m
-1339.16 5215.22 l
-1333.37 5215.22 l
-1331.96 5209.82 1330.55 5208.42 1326.93 5208.42 c
-1325.12 5208.42 1322.7 5209.03 1318.47 5210.43 c
-1309.22 5213.86 1302.78 5215.02 1294.93 5215.02 c
-1267.56 5215.02 1251 5199.54 1251 5174.01 c
-1251 5168.98 1251.75 5164.75 1253.07 5160.73 c
-1257.29 5150.06 1268.16 5140.6 1285.27 5132.35 c
-1298.75 5125.91 l
-1316.46 5117.46 1321 5112.22 1321 5101.56 c
-1321 5087.67 1311.25 5079.18 1295.94 5079.18 c
-1284.26 5079.18 1274.6 5083.89 1266.96 5093.31 c
-1261.12 5100.75 1258.3 5107.6 1254.88 5121.88 c
-1249.04 5121.88 l
-1249.04 5072.18 l
-1254.88 5072.18 l
-1256.09 5077.41 1257.7 5079.02 1260.92 5079.02 c
-1262.53 5079.02 1264.74 5078.42 1269.17 5077.01 c
-1279.03 5073.59 1286.48 5072.18 1295.33 5072.18 c
-1325.12 5072.18 1345 5089.28 1345 5114.64 c
-1345 5129.73 1336.04 5144.83 1323.1 5151.27 c
-1293.52 5165.96 l
-1277.22 5174.01 1273 5178.84 1273 5188.7 c
-1273 5201.18 1281.37 5208.02 1294.93 5208.02 c
-1303.99 5208.02 1312.44 5204.47 1319.68 5197.55 c
-1326.53 5190.51 1329.75 5184.67 1333.77 5171.59 c
-h
-1353.89 5076 m
-f*
-1456.24 5168.78 m
-1413.17 5168.78 l
-1413.17 5164.15 l
-1418 5163.34 l
-1423.03 5162.74 1425.05 5161.33 1425.05 5158.71 c
-1425.05 5156.9 1423.03 5153.28 1420.82 5151.07 c
-1395 5125.31 l
-1395 5212 l
-1357.43 5212 l
-1357.43 5207.21 l
-1364.27 5206.61 1367 5203.19 1367 5195.54 c
-1367 5092.91 l
-1367 5085.06 1364.01 5081.43 1357.43 5080.83 c
-1357.43 5076 l
-1405.53 5076 l
-1405.53 5080.83 l
-1396.07 5082.24 1395 5083.45 1395 5092.91 c
-1395 5115.85 l
-1399.69 5120.68 l
-1418.81 5093.71 l
-1422.43 5088.68 1423.64 5086.26 1423.64 5084.65 c
-1423.64 5082.24 1420.82 5081.03 1415.19 5080.83 c
-1415.19 5076 l
-1462.28 5076 l
-1462.28 5081 l
-1460.06 5081 1459.06 5081.57 1457.25 5083.85 c
-1418.2 5137.78 l
-1438.33 5158.91 1443.56 5162.54 1456.24 5164.15 c
-h
-1464.89 5076 m
-f*
-1561.6 5169 m
-1531.21 5169 l
-1531.21 5163.95 l
-1539.86 5163.54 1542.28 5162.13 1542.28 5157.3 c
-1542.28 5154.89 1541.88 5153.48 1540.07 5148.25 c
-1526.38 5109.61 l
-1511.89 5146.84 l
-1507.87 5157.1 1507.87 5157.1 1507.87 5158.71 c
-1507.87 5161.73 1510.28 5163.34 1515.31 5163.74 c
-1518.53 5163.95 l
-1518.53 5169 l
-1468 5169 l
-1468 5163.95 l
-1472.57 5163.34 1473.82 5162.74 1475.06 5161.13 c
-1476.87 5158.71 1484.32 5142.81 1488.34 5132.75 c
-1512.49 5073.38 l
-1508.87 5062.72 l
-1505.45 5052.66 1500.42 5046 1495.59 5046 c
-1493.78 5046 1492 5047.71 1492 5049.64 c
-1492 5049.84 1492 5050.24 1492.37 5050.84 c
-1492.57 5051.85 1492.77 5052.86 1492.77 5053.66 c
-1492.77 5059.5 1487.94 5063.52 1481.1 5063.52 c
-1473.45 5063.52 1468 5058.29 1468 5050.64 c
-1468 5041.18 1476.14 5035 1487.74 5035 c
-1494.58 5035 1500.42 5037.13 1504.65 5041.39 c
-1508.87 5046.01 1512.9 5054.06 1519.94 5072.98 c
-1549.93 5152.88 l
-1553.35 5161.33 1555.36 5163.14 1561.6 5163.95 c
-h
-1565.62 5076 m
-f*
-1682.33 5212 m
-1568.22 5212 l
-1568.22 5207 l
-1582.11 5206.2 1586 5203.18 1586 5192.72 c
-1586 5095.32 l
-1586 5084.85 1583.17 5082.64 1568.22 5081.03 c
-1568.22 5076 l
-1640.67 5076 l
-1640.67 5081 l
-1622.15 5081.81 1619 5084.23 1619 5095.32 c
-1619 5142.21 l
-1639.22 5141.81 1646.55 5134.36 1649.32 5111.02 c
-1654.35 5111.02 l
-1654.35 5179.04 l
-1649.32 5179.04 l
-1645.76 5156.1 1638.82 5149.05 1619 5149.05 c
-1619 5195.74 l
-1619 5203.19 1621.52 5205 1631.41 5205 c
-1650.13 5205 1661.8 5201.64 1668.04 5194.74 c
-1672.47 5189.71 1674.68 5184.27 1677.5 5171.59 c
-1682.33 5171.59 l
-h
-1687.96 5076 m
-f*
-1731.19 5169 m
-1692.84 5169 l
-1692.84 5163.95 l
-1701.49 5162.74 1704 5160.12 1704 5152.07 c
-1704 5092.9 l
-1704 5084.65 1701.93 5082.44 1692.84 5080.83 c
-1692.84 5076 l
-1746.37 5076 l
-1746.37 5080.83 l
-1734.09 5081.63 1732 5084.25 1732 5096.73 c
-1732 5134.76 l
-1732 5145.23 1737.49 5153.88 1743.95 5153.88 c
-1745.56 5153.88 1747.37 5152.47 1749.59 5149.25 c
-1753.41 5143.82 1756.43 5142.01 1761.66 5142.01 c
-1769.11 5142.01 1774.34 5147.64 1774.34 5155.29 c
-1774.34 5164.55 1767.5 5171.41 1758.04 5171.41 c
-1748.1 5171.41 1740.54 5166.12 1731.19 5152.27 c
-h
-1776.35 5076 m
-f*
-1871.19 5088.88 m
-1869.18 5086.87 l
-1868.57 5086.26 1867.97 5086.06 1866.96 5086.06 c
-1864.15 5086.06 1863 5087.67 1863 5091.09 c
-1863 5143.62 l
-1863 5160.73 1847.6 5171.42 1822.89 5171.42 c
-1800.15 5171.42 1784.85 5161.06 1784.85 5145.83 c
-1784.85 5137.38 1789.69 5132.55 1797.94 5132.55 c
-1805.99 5132.55 1811.62 5137.38 1811.62 5144.22 c
-1811.62 5147.04 1810.61 5149.66 1808 5152.88 c
-1806.19 5154.89 1805.58 5156.1 1805.58 5157.3 c
-1805.58 5161.53 1811.02 5164.42 1818.26 5164.42 c
-1830.14 5164.42 1835.86 5159.08 1835.86 5147.04 c
-1835.86 5132.35 l
-1811.91 5125.1 1802.29 5121.48 1794.51 5116.45 c
-1785.46 5110.41 1781 5103.37 1781 5094.52 c
-1781 5082.24 1790.27 5073.18 1803.17 5073.18 c
-1814.84 5073.18 1824.1 5077.21 1835.17 5087.27 c
-1837.38 5077.01 1841.81 5073.18 1851.67 5073.18 c
-1860.32 5073.18 1866.56 5076.4 1874.21 5084.65 c
-h
-1835 5096.13 m
-1829.55 5089.89 1825.52 5087.47 1820.68 5087.47 c
-1814.64 5087.47 1810 5092.91 1810 5100.96 c
-1810 5112.63 1818.61 5120.88 1835 5125.31 c
-h
-1876.62 5076 m
-f*
-1919.4 5169 m
-1880.7 5169 l
-1880.7 5163.95 l
-1889.55 5162.74 1892 5160.32 1892 5152.07 c
-1892 5092.9 l
-1892 5084.65 1889.74 5082.44 1880.7 5080.83 c
-1880.7 5076 l
-1929 5076 l
-1929 5080.83 l
-1921.95 5081.84 1920 5084.65 1920 5092.3 c
-1920 5146.03 l
-1920 5147.04 1922.87 5150.66 1925.18 5152.88 c
-1929.4 5156.1 1933.02 5158.42 1936.65 5158.42 c
-1944.5 5158.42 1948 5153.59 1948 5141 c
-1948 5092.3 l
-1948 5084.05 1945.68 5081.43 1937.85 5080.83 c
-1937.85 5076 l
-1984.95 5076 l
-1984.95 5080.83 l
-1977.9 5081.64 1976 5084.65 1976 5092.3 c
-1976 5146.03 l
-1976 5147.04 1978.73 5150.46 1980.92 5152.68 c
-1985.35 5156.1 1988.97 5158.42 1992.59 5158.42 c
-2000.24 5158.42 2003 5153.38 2003 5141 c
-2003 5092.3 l
-2003 5083.85 2000.85 5081.43 1993.4 5080.83 c
-1993.4 5076 l
-2041.3 5076 l
-2041.3 5081 l
-2033.45 5081.4 2031 5083.78 2031 5092.3 c
-2031 5142.81 l
-2031 5160.12 2020.43 5171.42 2004.07 5171.42 c
-1992.59 5171.42 1984.95 5166.73 1974.48 5153.68 c
-1968.44 5166.36 1961.4 5171.42 1948.72 5171.42 c
-1935.95 5171.42 1926.98 5165.91 1919.4 5153.68 c
-h
-2044.64 5076 m
-f*
-2122.9 5101.16 m
-2114.65 5091.29 2108.61 5087.18 2099.96 5087.18 c
-2092.31 5087.18 2086.27 5090.77 2082.25 5097.94 c
-2078.43 5104.54 2076.82 5111.56 2076.01 5126 c
-2126.73 5126 l
-2125.52 5142.36 2122.5 5151.43 2116.26 5159.12 c
-2109.82 5166.96 2100.36 5171.42 2089.09 5171.42 c
-2063.94 5171.42 2047.03 5151.4 2047.03 5121.88 c
-2047.03 5092.5 2063.53 5073.18 2088.49 5073.18 c
-2104.79 5073.18 2114.65 5079.42 2127.73 5098.34 c
-h
-2075 5133 m
-2075.61 5156.96 2079.23 5164.42 2089.09 5164.42 c
-2094.93 5164.42 2098.55 5161.38 2100.16 5155.49 c
-2101.17 5151.67 2101.57 5146.03 2101.97 5135.77 c
-2101.97 5133 l
-h
-2131.35 5076 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -1659 -4890]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5033.75 5048.15 m
-5033.75 5158.55 4942.55 5249.75 4830.95 5249.75 c
-4126.55 5249.75 l
-4014.95 5249.75 3923.75 5158.55 3923.75 5048.15 c
-3923.75 4910.15 l
-3923.75 4799.75 4014.95 4708.55 4126.55 4708.55 c
-4830.95 4708.55 l
-4942.55 4708.55 5033.75 4799.75 5033.75 4910.15 c
-f*
-1 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-f*
-0 g
-4964.15 5104.55 m
-4964.15 5211.35 4875.35 5298.95 4766.15 5298.95 c
-4073.75 5298.95 l
-3963.35 5298.95 3874.55 5211.35 3874.55 5104.55 c
-3874.55 4972.55 l
-3874.55 4865.75 3963.35 4778.15 4073.75 4778.15 c
-4764.95 4778.15 l
-4875.35 4778.15 4964.15 4865.75 4964.15 4972.55 c
-h
-S
-0.201248 i
-4082.16 5164.59 m
-4082.16 5208.22 l
-4076.37 5208.22 l
-4074.96 5202.82 4073.55 5201.42 4069.93 5201.42 c
-4068.12 5201.42 4065.7 5202.03 4061.47 5203.43 c
-4052.22 5206.86 4045.78 5208.02 4037.93 5208.02 c
-4010.56 5208.02 3994 5192.54 3994 5167.01 c
-3994 5161.98 3994.75 5157.75 3996.07 5153.73 c
-4000.29 5143.06 4011.16 5133.6 4028.27 5125.35 c
-4041.75 5118.91 l
-4059.46 5110.46 4064 5105.22 4064 5094.56 c
-4064 5080.67 4054.25 5072.18 4038.94 5072.18 c
-4027.26 5072.18 4017.6 5076.89 4009.96 5086.31 c
-4004.12 5093.75 4001.3 5100.6 3997.88 5114.88 c
-3992.04 5114.88 l
-3992.04 5065.18 l
-3997.88 5065.18 l
-3999.09 5070.41 4000.7 5072.02 4003.92 5072.02 c
-4005.53 5072.02 4007.74 5071.42 4012.17 5070.01 c
-4022.03 5066.59 4029.48 5065.18 4038.33 5065.18 c
-4068.12 5065.18 4088 5082.28 4088 5107.64 c
-4088 5122.73 4079.04 5137.83 4066.1 5144.27 c
-4036.52 5158.96 l
-4020.22 5167.01 4016 5171.84 4016 5181.7 c
-4016 5194.18 4024.37 5201.02 4037.93 5201.02 c
-4046.99 5201.02 4055.44 5197.47 4062.68 5190.55 c
-4069.53 5183.51 4072.75 5177.67 4076.77 5164.59 c
-h
-4096.89 5069 m
-f*
-4200.24 5161.78 m
-4157.17 5161.78 l
-4157.17 5157.15 l
-4162 5156.34 l
-4167.03 5155.74 4169.05 5154.33 4169.05 5151.71 c
-4169.05 5149.9 4167.03 5146.28 4164.82 5144.07 c
-4139 5118.31 l
-4139 5205 l
-4101.43 5205 l
-4101.43 5200.21 l
-4108.27 5199.61 4111 5196.19 4111 5188.54 c
-4111 5085.91 l
-4111 5078.06 4108.01 5074.43 4101.43 5073.83 c
-4101.43 5069 l
-4149.53 5069 l
-4149.53 5073.83 l
-4140.07 5075.24 4139 5076.45 4139 5085.91 c
-4139 5108.85 l
-4143.69 5113.68 l
-4162.81 5086.71 l
-4166.43 5081.68 4167.64 5079.26 4167.64 5077.65 c
-4167.64 5075.24 4164.82 5074.03 4159.19 5073.83 c
-4159.19 5069 l
-4206.28 5069 l
-4206.28 5074 l
-4204.06 5074 4203.06 5074.57 4201.25 5076.85 c
-4162.2 5130.78 l
-4182.33 5151.91 4187.56 5155.54 4200.24 5157.15 c
-h
-4208.89 5069 m
-f*
-4303.6 5162 m
-4273.21 5162 l
-4273.21 5156.95 l
-4281.86 5156.54 4284.28 5155.13 4284.28 5150.3 c
-4284.28 5147.89 4283.88 5146.48 4282.07 5141.25 c
-4268.38 5102.61 l
-4253.89 5139.84 l
-4249.87 5150.1 4249.87 5150.1 4249.87 5151.71 c
-4249.87 5154.73 4252.28 5156.34 4257.31 5156.74 c
-4260.53 5156.95 l
-4260.53 5162 l
-4210 5162 l
-4210 5156.95 l
-4214.57 5156.34 4215.82 5155.74 4217.06 5154.13 c
-4218.87 5151.71 4226.32 5135.81 4230.34 5125.75 c
-4254.49 5066.38 l
-4250.87 5055.72 l
-4247.45 5045.66 4242.42 5039 4237.59 5039 c
-4235.78 5039 4234 5040.71 4234 5042.64 c
-4234 5042.84 4234 5043.24 4234.37 5043.84 c
-4234.57 5044.85 4234.77 5045.86 4234.77 5046.66 c
-4234.77 5052.5 4229.94 5056.52 4223.1 5056.52 c
-4215.45 5056.52 4210 5051.29 4210 5043.64 c
-4210 5034.18 4218.14 5028 4229.74 5028 c
-4236.58 5028 4242.42 5030.13 4246.65 5034.39 c
-4250.87 5039.01 4254.9 5047.06 4261.94 5065.98 c
-4291.93 5145.88 l
-4295.35 5154.33 4297.36 5156.14 4303.6 5156.95 c
-h
-4307.62 5069 m
-f*
-4425.33 5205 m
-4311.22 5205 l
-4311.22 5200 l
-4325.11 5199.2 4329 5196.18 4329 5185.72 c
-4329 5088.32 l
-4329 5077.85 4326.17 5075.64 4311.22 5074.03 c
-4311.22 5069 l
-4383.67 5069 l
-4383.67 5074 l
-4365.15 5074.81 4362 5077.23 4362 5088.32 c
-4362 5135.21 l
-4382.22 5134.81 4389.55 5127.36 4392.32 5104.02 c
-4397.35 5104.02 l
-4397.35 5172.04 l
-4392.32 5172.04 l
-4388.76 5149.1 4381.82 5142.05 4362 5142.05 c
-4362 5188.74 l
-4362 5196.19 4364.52 5198 4374.41 5198 c
-4393.13 5198 4404.8 5194.64 4411.04 5187.74 c
-4415.47 5182.71 4417.68 5177.27 4420.5 5164.59 c
-4425.33 5164.59 l
-h
-4430.96 5069 m
-f*
-4474.19 5162 m
-4435.84 5162 l
-4435.84 5156.95 l
-4444.49 5155.74 4447 5153.12 4447 5145.07 c
-4447 5085.9 l
-4447 5077.65 4444.93 5075.44 4435.84 5073.83 c
-4435.84 5069 l
-4489.37 5069 l
-4489.37 5073.83 l
-4477.09 5074.63 4475 5077.25 4475 5089.73 c
-4475 5127.76 l
-4475 5138.23 4480.49 5146.88 4486.95 5146.88 c
-4488.56 5146.88 4490.37 5145.47 4492.59 5142.25 c
-4496.41 5136.82 4499.43 5135.01 4504.66 5135.01 c
-4512.11 5135.01 4517.34 5140.64 4517.34 5148.29 c
-4517.34 5157.55 4510.5 5164.41 4501.04 5164.41 c
-4491.1 5164.41 4483.54 5159.12 4474.19 5145.27 c
-h
-4519.35 5069 m
-f*
-4614.19 5081.88 m
-4612.18 5079.87 l
-4611.57 5079.26 4610.97 5079.06 4609.96 5079.06 c
-4607.15 5079.06 4606 5080.67 4606 5084.09 c
-4606 5136.62 l
-4606 5153.73 4590.6 5164.42 4565.89 5164.42 c
-4543.15 5164.42 4527.85 5154.06 4527.85 5138.83 c
-4527.85 5130.38 4532.69 5125.55 4540.94 5125.55 c
-4548.99 5125.55 4554.62 5130.38 4554.62 5137.22 c
-4554.62 5140.04 4553.61 5142.66 4551 5145.88 c
-4549.19 5147.89 4548.58 5149.1 4548.58 5150.3 c
-4548.58 5154.53 4554.02 5157.42 4561.26 5157.42 c
-4573.14 5157.42 4578.86 5152.08 4578.86 5140.04 c
-4578.86 5125.35 l
-4554.91 5118.1 4545.29 5114.48 4537.51 5109.45 c
-4528.46 5103.41 4524 5096.37 4524 5087.52 c
-4524 5075.24 4533.27 5066.18 4546.17 5066.18 c
-4557.84 5066.18 4567.1 5070.21 4578.17 5080.27 c
-4580.38 5070.01 4584.81 5066.18 4594.67 5066.18 c
-4603.32 5066.18 4609.56 5069.4 4617.21 5077.65 c
-h
-4578 5089.13 m
-4572.55 5082.89 4568.52 5080.47 4563.68 5080.47 c
-4557.64 5080.47 4553 5085.91 4553 5093.96 c
-4553 5105.63 4561.61 5113.88 4578 5118.31 c
-h
-4619.62 5069 m
-f*
-4661.4 5162 m
-4622.7 5162 l
-4622.7 5156.95 l
-4631.55 5155.74 4634 5153.32 4634 5145.07 c
-4634 5085.9 l
-4634 5077.65 4631.74 5075.44 4622.7 5073.83 c
-4622.7 5069 l
-4671 5069 l
-4671 5073.83 l
-4663.95 5074.84 4662 5077.65 4662 5085.3 c
-4662 5139.03 l
-4662 5140.04 4664.87 5143.66 4667.18 5145.88 c
-4671.4 5149.1 4675.02 5151.42 4678.65 5151.42 c
-4686.5 5151.42 4690 5146.59 4690 5134 c
-4690 5085.3 l
-4690 5077.05 4687.68 5074.43 4679.85 5073.83 c
-4679.85 5069 l
-4726.95 5069 l
-4726.95 5073.83 l
-4719.9 5074.64 4718 5077.65 4718 5085.3 c
-4718 5139.03 l
-4718 5140.04 4720.73 5143.46 4722.92 5145.68 c
-4727.35 5149.1 4730.97 5151.42 4734.59 5151.42 c
-4742.24 5151.42 4745 5146.38 4745 5134 c
-4745 5085.3 l
-4745 5076.85 4742.85 5074.43 4735.4 5073.83 c
-4735.4 5069 l
-4783.3 5069 l
-4783.3 5074 l
-4775.45 5074.4 4773 5076.78 4773 5085.3 c
-4773 5135.81 l
-4773 5153.12 4762.43 5164.42 4746.07 5164.42 c
-4734.59 5164.42 4726.95 5159.73 4716.48 5146.68 c
-4710.44 5159.36 4703.4 5164.42 4690.72 5164.42 c
-4677.95 5164.42 4668.98 5158.91 4661.4 5146.68 c
-h
-4786.64 5069 m
-f*
-4865.9 5094.16 m
-4857.65 5084.29 4851.61 5080.18 4842.96 5080.18 c
-4835.31 5080.18 4829.27 5083.77 4825.25 5090.94 c
-4821.43 5097.54 4819.82 5104.56 4819.01 5119 c
-4869.73 5119 l
-4868.52 5135.36 4865.5 5144.43 4859.26 5152.12 c
-4852.82 5159.96 4843.36 5164.42 4832.09 5164.42 c
-4806.94 5164.42 4790.03 5144.4 4790.03 5114.88 c
-4790.03 5085.5 4806.53 5066.18 4831.49 5066.18 c
-4847.79 5066.18 4857.65 5072.42 4870.73 5091.34 c
-h
-4818 5126 m
-4818.61 5149.96 4822.23 5157.42 4832.09 5157.42 c
-4837.93 5157.42 4841.55 5154.38 4843.16 5148.49 c
-4844.17 5144.67 4844.57 5139.03 4844.97 5128.77 c
-4844.97 5126 l
-h
-4874.35 5069 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -4394 -4883]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-2175.35 4842.95 m
-2222.15 4748.15 2351.75 4684.55 2496.95 4684.55 c
-2577.35 4684.55 2655.35 4703.75 2717.75 4740.95 c
-S
-2709.35 4683.35 m
-2694.95 4733.75 l
-2650.55 4758.95 l
-2799.35 4816.55 l
-f*
-0.564706 g
-3668.15 4929.35 m
-3533.75 4966.55 l
-3629.75 5021.75 l
-3476.15 5031.35 l
-3518.15 5100.95 l
-3370.55 5080.55 l
-3353.75 5152.55 l
-3233.75 5106.95 l
-3158.15 5170.55 l
-3082.55 5106.95 l
-2962.55 5152.55 l
-2944.55 5080.55 l
-2795.75 5100.95 l
-2840.15 5031.35 l
-2686.55 5021.75 l
-2782.55 4966.55 l
-2646.95 4929.35 l
-2782.55 4894.55 l
-2686.55 4838.15 l
-2840.15 4829.75 l
-2795.75 4760.15 l
-2944.55 4779.35 l
-2962.55 4708.55 l
-3082.55 4752.95 l
-3158.15 4689.35 l
-3233.75 4752.95 l
-3353.75 4708.55 l
-3370.55 4779.35 l
-3518.15 4760.15 l
-3476.15 4829.75 l
-3629.75 4838.15 l
-3533.75 4894.55 l
-f*
-1 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-f*
-0 g
-3608.15 4989.35 m
-3473.75 5026.55 l
-3569.75 5081.75 l
-3416.15 5091.35 l
-3458.15 5160.95 l
-3310.55 5140.55 l
-3293.75 5212.55 l
-3173.75 5166.95 l
-3098.15 5230.55 l
-3022.55 5166.95 l
-2902.55 5212.55 l
-2884.55 5140.55 l
-2735.75 5160.95 l
-2780.15 5091.35 l
-2626.55 5081.75 l
-2722.55 5026.55 l
-2586.95 4989.35 l
-2722.55 4954.55 l
-2626.55 4898.15 l
-2780.15 4889.75 l
-2735.75 4820.15 l
-2884.55 4839.35 l
-2902.55 4768.55 l
-3022.55 4812.95 l
-3098.15 4749.35 l
-3173.75 4812.95 l
-3293.75 4768.55 l
-3310.55 4839.35 l
-3458.15 4820.15 l
-3416.15 4889.75 l
-3569.75 4898.15 l
-3473.75 4954.55 l
-3608.15 4989.35 l
-3569.75 4989.35 l
-3447.35 4958.15 l
-3536.15 4906.55 l
-3398.15 4898.15 l
-3438.95 4832.15 l
-3303.35 4851.35 l
-3286.55 4781.75 l
-3171.35 4824.95 l
-3098.15 4762.55 l
-3024.95 4824.95 l
-2909.75 4781.75 l
-2891.75 4851.35 l
-2756.15 4832.15 l
-2796.95 4898.15 l
-2660.15 4906.55 l
-2748.95 4958.15 l
-2626.55 4989.35 l
-2747.75 5021.75 l
-2660.15 5074.55 l
-2796.95 5081.75 l
-2756.15 5148.95 l
-2891.75 5129.75 l
-2909.75 5198.15 l
-3024.95 5156.15 l
-3098.15 5218.55 l
-3171.35 5156.15 l
-3286.55 5198.15 l
-3303.35 5129.75 l
-3438.95 5148.95 l
-3398.15 5081.75 l
-3536.15 5074.55 l
-3447.35 5021.75 l
-3569.75 4989.35 l
-3608.15 4989.35 l
-f*
-0.2 i
-2920.08 5040.76 m
-2900.08 4966.52 l
-2897.52 4957.88 2894.48 4955.64 2884.08 4955 c
-2884.08 4951 l
-2934 4951 l
-2934 4955 l
-2924.72 4955.48 2922.48 4956.76 2922.48 4961.88 c
-2922.48 4963.64 2922.8 4965.4 2923.76 4969.08 c
-2923.92 4969.88 l
-2924.08 4970.68 l
-2943.76 5042.52 l
-2946.16 5050.84 2948.56 5053.08 2956.72 5054.04 c
-2956.72 5058 l
-2922.8 5058 l
-2873.2 4981.24 l
-2864.56 5058 l
-2829.2 5058 l
-2829.2 5054 l
-2839.28 5053.52 2840.72 5052.89 2840.72 5048.44 c
-2840.72 5046.2 2840.08 5043.32 2838.96 5039.16 c
-2821.52 4979.48 l
-2815.12 4958.68 2814 4956.92 2805.36 4955 c
-2805.36 4951 l
-2838.48 4951 l
-2838.48 4955 l
-2828.24 4956.28 2825.68 4958.2 2825.68 4964.76 c
-2825.68 4967.48 2826.48 4971.48 2828.72 4979.48 c
-2844.88 5038.52 l
-2855.6 4949.08 l
-2860.08 4949.08 l
-h
-2952.24 4951 m
-f*
-3021.44 4971.32 m
-3014.88 4962.52 3012.48 4959.76 3009.92 4959.76 c
-3008.64 4959.76 3008 4960.86 3008 4962.52 c
-3008 4966.52 3009.44 4973.08 3013.44 4986.2 c
-3024.8 5023.96 l
-3007.04 5022.84 l
-3004.16 5013.4 l
-3002.72 5021.56 2999.2 5025.08 2992.32 5025.08 c
-2972.64 5025.08 2949 4994.27 2949 4969.24 c
-2949 4957.08 2955.74 4948.92 2965.92 4948.92 c
-2975.68 4948.92 2983.04 4954.68 2992.16 4970.04 c
-2990.24 4963.48 2990 4961.56 2990 4959.32 c
-2990 4953.4 2994.76 4948.76 3000.64 4948.76 c
-3008.16 4948.76 3015.52 4955 3024.8 4968.92 c
-h
-2994.56 5018.2 m
-2998.08 5017.88 3000.56 5015 3000.56 5010.68 c
-3000.56 5001.08 2995.24 4983.32 2988.96 4972.28 c
-2984.64 4964.44 2979.84 4959.92 2975.52 4959.92 c
-2971.36 4959.92 2968 4963.75 2968 4968.92 c
-2968 4977.24 2973.42 4993.24 2980.16 5005.08 c
-2984.96 5013.56 2990.24 5018.52 2994.56 5018.2 c
-h
-3032 4951 m
-f*
-3066.56 5024.92 m
-3050.24 5022.36 3044 5021.4 3035.68 5020.44 c
-3035.68 5016 l
-3042.88 5015.69 3044.32 5015.07 3044.32 5012.12 c
-3044.32 5010.52 3043.04 5004.76 3040.8 4996.44 c
-3024.8 4934.36 l
-3021.76 4923.8 3020.48 4922.84 3012.8 4923 c
-3012.8 4918 l
-3052.64 4918 l
-3052.64 4923 l
-3044.64 4923.14 3042.24 4924.16 3042.24 4927.64 c
-3042.24 4929.88 3043.36 4934.68 3046.4 4945.88 c
-3047.52 4949.72 3047.52 4950.04 3048.16 4952.44 c
-3053.76 4949.56 3055.68 4948.92 3059.04 4948.92 c
-3080.8 4948.92 3103.36 4977.88 3103.36 5005.56 c
-3103.36 5017.4 3096.64 5025.08 3086.08 5025.08 c
-3076.96 5025.08 3069.92 5019.92 3060.48 5006.52 c
-h
-3077.12 5013.56 m
-3081.28 5013.24 3083.68 5009.56 3083.36 5004.44 c
-3082.72 4993.88 3077.6 4978.04 3071.84 4967.64 c
-3066.88 4959 3061.76 4953.92 3056.32 4953.92 c
-3052.8 4953.92 3050.08 4956.75 3050.08 4960.28 c
-3050.08 4963 3051.84 4969.56 3056.16 4984.12 c
-3059.68 4995.8 3061.12 4999.8 3063.52 5003.48 c
-3067.52 5009.72 3072.96 5013.88 3077.12 5013.56 c
-h
-3112 4951 m
-f*
-3147.56 5024.92 m
-3131.24 5022.36 3125 5021.4 3116.68 5020.44 c
-3116.68 5016 l
-3123.88 5015.69 3125.32 5015.07 3125.32 5012.12 c
-3125.32 5010.52 3124.04 5004.76 3121.8 4996.44 c
-3105.8 4934.36 l
-3102.76 4923.8 3101.48 4922.84 3093.8 4923 c
-3093.8 4918 l
-3133.64 4918 l
-3133.64 4923 l
-3125.64 4923.14 3123.24 4924.16 3123.24 4927.64 c
-3123.24 4929.88 3124.36 4934.68 3127.4 4945.88 c
-3128.52 4949.72 3128.52 4950.04 3129.16 4952.44 c
-3134.76 4949.56 3136.68 4948.92 3140.04 4948.92 c
-3161.8 4948.92 3184.36 4977.88 3184.36 5005.56 c
-3184.36 5017.4 3177.64 5025.08 3167.08 5025.08 c
-3157.96 5025.08 3150.92 5019.92 3141.48 5006.52 c
-h
-3158.12 5013.56 m
-3162.28 5013.24 3164.68 5009.56 3164.36 5004.44 c
-3163.72 4993.88 3158.6 4978.04 3152.84 4967.64 c
-3147.88 4959 3142.76 4953.92 3137.32 4953.92 c
-3133.8 4953.92 3131.08 4956.75 3131.08 4960.28 c
-3131.08 4963 3132.84 4969.56 3137.16 4984.12 c
-3140.68 4995.8 3142.12 4999.8 3144.52 5003.48 c
-3148.52 5009.72 3153.96 5013.88 3158.12 5013.56 c
-h
-3193 4951 m
-f*
-3226.56 4973.56 m
-3224.32 4970.36 l
-3220.16 4964.12 3216.48 4960.56 3214.08 4960.56 c
-3212.8 4960.56 3212 4961.77 3212 4963.16 c
-3212 4964.6 3212.62 4968.76 3213.12 4971.48 c
-3227.68 5024.92 l
-3219.22 5023 3208.26 5021.4 3196.04 5020.44 c
-3196.04 5016 l
-3197.44 5016 l
-3202.24 5016 3205.48 5014.44 3205.48 5011.48 c
-3205.48 5010.2 3204.71 5007.8 3203.68 5005.08 c
-3194.4 4970.68 l
-3193.12 4966.04 3193 4961.88 3193 4959.64 c
-3193 4953.56 3197.2 4949.56 3203.36 4949.56 c
-3212.96 4949.56 3218.88 4954.36 3230.08 4971.32 c
-h
-3222.88 5060.4 m
-3217.44 5060.4 3213 5055.46 3213 5050.04 c
-3213 5043.8 3217.26 5039.4 3223.04 5039.4 c
-3229.12 5039.4 3234 5043.86 3234 5049.56 c
-3234 5055.48 3229 5060.4 3222.88 5060.4 c
-h
-3236.48 4951 m
-f*
-3311.36 4972.6 m
-3304.96 4962.68 3302.88 4960.56 3300.16 4960.56 c
-3298.88 4960.56 3298 4961.63 3298 4963.16 c
-3298 4964.76 3298.94 4968.12 3301.92 4977.08 c
-3307.68 4994.52 l
-3310.24 5002.04 3312 5009.08 3312 5012.92 c
-3312 5020.76 3307.78 5025.08 3300.16 5025.08 c
-3294.24 5025.08 3288.48 5022.62 3284.16 5018.36 c
-3278.24 5012.76 3275.2 5008.92 3264.48 4993.08 c
-3274.72 5024.76 l
-3264.48 5022.52 3251.68 5020.92 3242.72 5020.6 c
-3242.72 5015.8 l
-3249.44 5015.65 3251.36 5014.92 3251.36 5012.12 c
-3251.36 5010.2 3249.12 5001.72 3244 4983.64 c
-3240.32 4970.68 3239.2 4966.52 3235.04 4951 c
-3254.4 4951 l
-3261.92 4978.68 3267.68 4992.6 3277.6 5005.56 c
-3280.8 5009.88 3285.76 5013.08 3288.64 5013.08 c
-3290.72 5013.08 3293 5011.63 3293 5010.04 c
-3293 5009.56 3292.54 5008.28 3291.84 5006.68 c
-3283.04 4980.12 l
-3280.48 4972.44 3279 4963.32 3279 4959.16 c
-3279 4953.08 3282.84 4949.56 3289.44 4949.56 c
-3299.04 4949.56 3305.6 4955 3314.88 4970.52 c
-h
-3324.96 4951 m
-f*
-3402.48 5020 m
-3384.72 5020 l
-3379.28 5023.58 3374.48 5025.08 3367.12 5025.08 c
-3347.44 5025.08 3331 5012.05 3331 4995.8 c
-3331 4987.64 3335.35 4981.88 3344.4 4978.2 c
-3331.28 4970.84 3329 4968.6 3329 4962.68 c
-3329 4957.56 3331.89 4954.52 3338.96 4952.12 c
-3329.04 4949.72 3325.84 4948.44 3322 4945.4 c
-3319.44 4943.16 3318 4939.32 3318 4935.48 c
-3318 4925.08 3329.56 4919 3347.76 4919 c
-3370.32 4919 3386 4928.72 3386 4942.52 c
-3386 4952.28 3379.6 4957.56 3362.16 4962.52 c
-3353.68 4964.92 l
-3348.56 4966.36 3345 4968.6 3345 4971 c
-3345 4973.56 3347.68 4976.28 3350 4976.28 c
-3350.8 4976.28 3351.92 4976.24 3353.2 4976.12 c
-3354.96 4975.64 3356.24 4975 3358.16 4975 c
-3365.2 4975 3372.4 4977.09 3378.48 4980.92 c
-3387.76 4986.2 3393 4994.36 3393 5003.96 c
-3393 5006.64 3392.59 5008.32 3391.76 5011 c
-3402.48 5011 l
-h
-3344.4 4950.04 m
-3346.32 4949.88 3358.48 4945.72 3362 4944.12 c
-3366.48 4941.88 3369 4939.16 3369 4935 c
-3369 4927.96 3361.8 4924 3349.36 4924 c
-3338.96 4924 3332 4929.1 3332 4936.44 c
-3332 4939.48 3333.32 4942.2 3336.24 4945.24 c
-3338.32 4947.32 3343.12 4950.2 3344.4 4950.04 c
-h
-3366.8 5020.08 m
-3370.96 5020.08 3374 5016.19 3374 5010.52 c
-3374 5005.08 3372.08 4997.4 3369.36 4991.48 c
-3366 4984.12 3361.84 4980 3356.88 4980 c
-3352.56 4980 3350 4983.52 3350 4989.88 c
-3350 4996.28 3352.79 5006.04 3356.24 5012.12 c
-3359.28 5017.4 3362.64 5020.08 3366.8 5020.08 c
-h
-3406 4951 m
-f*
-1 i
-1 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-f*
-0 g
-1515.35 4526.15 m
-1596.95 4526.15 l
-1596.95 4374.95 l
-1763.75 4374.95 l
-1763.75 4526.15 l
-1845.35 4526.15 l
-1680.95 4679.75 l
-1515.35 4526.15 l
-1539.35 4535.75 l
-1680.95 4666.55 l
-1820.15 4535.75 l
-1754.15 4535.75 l
-1754.15 4384.55 l
-1607.75 4384.55 l
-1607.75 4535.75 l
-1539.35 4535.75 l
-1515.35 4526.15 l
-f*
-0.2 i
-1255.88 4259 m
-1255.88 4254 l
-1268.3 4253.29 1272 4250.45 1272 4241.4 c
-1272 4154.28 l
-1272 4145.1 1269.25 4142.94 1255.88 4141.5 c
-1255.88 4137 l
-1313.84 4137 l
-1344.26 4137 1364 4150.5 1364 4170.84 c
-1364 4179.12 1360.73 4186.32 1354.7 4191.9 c
-1348.4 4197.48 1342.28 4200 1329.68 4202.7 c
-1350.56 4208.82 1358 4216.2 1358 4229.88 c
-1358 4248.42 1341.55 4259 1311.5 4259 c
-h
-1301 4198.74 m
-1305.92 4198.74 l
-1324.46 4198.74 1333 4189.2 1333 4169.22 c
-1333 4151.76 1325.77 4143 1311.5 4143 c
-1303.58 4143 1301 4145.99 1301 4153.74 c
-h
-1301 4244.46 m
-1301 4250.94 1303.39 4254 1310.24 4254 c
-1322.84 4254 1329 4246.03 1329 4228.62 c
-1329 4209.72 1323.08 4204.68 1301 4204.14 c
-h
-1373.06 4137 m
-f*
-1458.14 4148.52 m
-1456.34 4146.72 l
-1455.8 4146.18 1455.26 4146 1454.36 4146 c
-1451.84 4146 1451 4147.44 1451 4150.5 c
-1451 4197.48 l
-1451 4212.78 1437.16 4222.16 1414.94 4222.16 c
-1394.6 4222.16 1380.92 4212.97 1380.92 4199.46 c
-1380.92 4191.9 1385.24 4187.58 1392.62 4187.58 c
-1399.82 4187.58 1404.86 4191.9 1404.86 4198.02 c
-1404.86 4200.54 1403.96 4202.88 1401.62 4205.76 c
-1400 4207.56 1399.46 4208.64 1399.46 4209.72 c
-1399.46 4213.5 1404.32 4216.16 1410.8 4216.16 c
-1421.42 4216.16 1426 4211.37 1426 4200.54 c
-1426 4187.4 l
-1404.89 4180.92 1396.41 4177.68 1389.56 4173.18 c
-1381.46 4167.78 1378 4161.48 1378 4153.56 c
-1378 4142.58 1386.07 4134.48 1397.3 4134.48 c
-1407.74 4134.48 1416.02 4138.08 1425.92 4147.08 c
-1427.9 4137.9 1431.86 4134.48 1440.68 4134.48 c
-1448.42 4134.48 1454 4137.36 1460.84 4144.74 c
-h
-1426 4155 m
-1421.04 4149.42 1417.37 4147.26 1412.96 4147.26 c
-1407.56 4147.26 1404 4152.12 1404 4159.32 c
-1404 4169.76 1411.57 4177.14 1426 4181.1 c
-h
-1463 4137 m
-f*
-1524.22 4195.68 m
-1524.22 4221.8 l
-1520.24 4221.8 l
-1519.16 4219.08 1518.08 4218.2 1515.74 4218.2 c
-1514.66 4218.2 1513.04 4218.55 1510.16 4219.44 c
-1504.4 4221.42 1500.26 4222.16 1496.12 4222.16 c
-1479.74 4222.16 1468 4210.99 1468 4195.86 c
-1468 4183.98 1475.34 4175.7 1493.42 4167.96 c
-1505.84 4162.56 1511 4158.06 1511 4152.3 c
-1511 4145.28 1505.48 4140.48 1497.2 4140.48 c
-1484.6 4140.48 1476.32 4148.62 1472.54 4164.36 c
-1467.5 4164.36 l
-1467.5 4134.66 l
-1472 4134.66 l
-1473.98 4138.44 1475.06 4139.7 1476.68 4139.7 c
-1477.58 4139.7 1479.02 4139.34 1480.82 4138.62 c
-1486.04 4136.46 1495.22 4134.48 1500.26 4134.48 c
-1516.64 4134.48 1528 4145.64 1528 4161.84 c
-1528 4174.62 1521.15 4182.54 1503.14 4189.92 c
-1490.9 4195.14 1486 4199.64 1486 4205.76 c
-1486 4211.7 1490.98 4216.16 1497.74 4216.16 c
-1502.6 4216.16 1507.28 4214.19 1511.24 4210.44 c
-1515.02 4206.84 1517 4203.42 1519.7 4195.68 c
-h
-1533.02 4137 m
-f*
-1604.36 4159.5 m
-1596.98 4150.68 1591.58 4147.48 1583.84 4147.48 c
-1577 4147.48 1571.6 4150.53 1568 4156.62 c
-1564.58 4162.36 1563.14 4168.45 1562.42 4181 c
-1607.78 4181 l
-1606.7 4195.99 1604 4204.3 1598.42 4211.34 c
-1592.66 4218.36 1584.2 4222.16 1574.12 4222.16 c
-1551.62 4222.16 1536.5 4204.33 1536.5 4178.04 c
-1536.5 4151.76 1551.26 4134.48 1573.58 4134.48 c
-1588.16 4134.48 1596.98 4140.06 1608.68 4156.98 c
-h
-1561.52 4188 m
-1562.06 4209.42 1565.3 4216.16 1574.12 4216.16 c
-1579.34 4216.16 1582.58 4213.42 1584.02 4208.1 c
-1584.92 4204.68 1585.28 4199.64 1585.64 4190.46 c
-1585.64 4188 l
-h
-1611.92 4137 m
-f*
-1658 4137 m
-f*
-1761.94 4259 m
-1659.88 4259 l
-1659.88 4254 l
-1672.3 4253.29 1676 4250.63 1676 4241.4 c
-1676 4154.28 l
-1676 4144.92 1673.44 4142.94 1659.88 4141.5 c
-1659.88 4137 l
-1724.68 4137 l
-1724.68 4142 l
-1708.12 4142.69 1705 4144.77 1705 4154.28 c
-1705 4196.22 l
-1723.28 4195.86 1729.91 4189.2 1732.42 4168.32 c
-1736.92 4168.32 l
-1736.92 4229.16 l
-1732.42 4229.16 l
-1729.19 4208.64 1722.92 4202.34 1705 4202.34 c
-1705 4244.1 l
-1705 4250.76 1707.32 4253 1716.4 4253 c
-1733.14 4253 1743.58 4249.8 1749.16 4243.2 c
-1753.12 4238.7 1755.1 4233.84 1757.62 4222.5 c
-1761.94 4222.5 l
-h
-1766.98 4137 m
-f*
-1806.28 4220 m
-1772.22 4220 l
-1772.22 4215.66 l
-1779.96 4214.58 1782 4212.24 1782 4205.04 c
-1782 4152.12 l
-1782 4144.74 1780.19 4142.76 1772.22 4141.32 c
-1772.22 4137 l
-1820.1 4137 l
-1820.1 4141.32 l
-1809.12 4142.04 1807 4144.38 1807 4155.54 c
-1807 4189.56 l
-1807 4198.92 1812.02 4206.66 1817.94 4206.66 c
-1819.38 4206.66 1821 4205.4 1822.98 4202.52 c
-1826.4 4197.66 1829.1 4196.04 1833.78 4196.04 c
-1840.44 4196.04 1845.12 4201.08 1845.12 4207.92 c
-1845.12 4216.2 1839 4222.16 1830.54 4222.16 c
-1821.55 4222.16 1814.73 4217.47 1806.28 4205.22 c
-h
-1846.92 4137 m
-f*
-1933.14 4148.52 m
-1931.34 4146.72 l
-1930.8 4146.18 1930.26 4146 1929.36 4146 c
-1926.84 4146 1926 4147.44 1926 4150.5 c
-1926 4197.48 l
-1926 4212.78 1912.16 4222.16 1889.94 4222.16 c
-1869.6 4222.16 1855.92 4212.97 1855.92 4199.46 c
-1855.92 4191.9 1860.24 4187.58 1867.62 4187.58 c
-1874.82 4187.58 1879.86 4191.9 1879.86 4198.02 c
-1879.86 4200.54 1878.96 4202.88 1876.62 4205.76 c
-1875 4207.56 1874.46 4208.64 1874.46 4209.72 c
-1874.46 4213.5 1879.32 4216.16 1885.8 4216.16 c
-1896.42 4216.16 1901 4211.37 1901 4200.54 c
-1901 4187.4 l
-1879.89 4180.92 1871.41 4177.68 1864.56 4173.18 c
-1856.46 4167.78 1853 4161.48 1853 4153.56 c
-1853 4142.58 1861.07 4134.48 1872.3 4134.48 c
-1882.74 4134.48 1891.02 4138.08 1900.92 4147.08 c
-1902.9 4137.9 1906.86 4134.48 1915.68 4134.48 c
-1923.42 4134.48 1929 4137.36 1935.84 4144.74 c
-h
-1901 4155 m
-1896.04 4149.42 1892.37 4147.26 1887.96 4147.26 c
-1882.56 4147.26 1879 4152.12 1879 4159.32 c
-1879 4169.76 1886.57 4177.14 1901 4181.1 c
-h
-1938 4137 m
-f*
-1975.46 4220 m
-1940.73 4220 l
-1940.73 4215.66 l
-1948.65 4214.58 1951 4212.42 1951 4205.04 c
-1951 4152.12 l
-1951 4144.74 1948.95 4142.76 1940.73 4141.32 c
-1940.73 4137 l
-1983.93 4137 l
-1983.93 4141.32 l
-1977.63 4142.22 1976 4144.74 1976 4151.58 c
-1976 4199.64 l
-1976 4200.54 1978.51 4203.78 1980.51 4205.76 c
-1984.29 4208.64 1987.53 4210.16 1990.77 4210.16 c
-1997.79 4210.16 2001 4206 2001 4195.14 c
-2001 4151.58 l
-2001 4144.2 1998.9 4141.86 1991.85 4141.32 c
-1991.85 4137 l
-2033.97 4137 l
-2033.97 4141.32 l
-2027.67 4142.04 2026 4144.74 2026 4151.58 c
-2026 4199.64 l
-2026 4200.54 2028.43 4203.6 2030.37 4205.58 c
-2034.33 4208.64 2037.57 4210.16 2040.81 4210.16 c
-2047.65 4210.16 2050 4205.82 2050 4195.14 c
-2050 4151.58 l
-2050 4144.02 2048.1 4141.86 2041.53 4141.32 c
-2041.53 4137 l
-2084.37 4137 l
-2084.37 4141 l
-2077.35 4141.37 2075 4143.6 2075 4151.58 c
-2075 4196.76 l
-2075 4212.24 2065.6 4222.16 2051.07 4222.16 c
-2040.81 4222.16 2033.97 4218.01 2024.61 4206.48 c
-2019.21 4217.82 2012.91 4222.16 2001.57 4222.16 c
-1990.2 4222.16 1982.21 4217.29 1975.46 4206.48 c
-h
-2087.94 4137 m
-f*
-2160.36 4159.5 m
-2152.98 4150.68 2147.58 4147.48 2139.84 4147.48 c
-2133 4147.48 2127.6 4150.53 2124 4156.62 c
-2120.58 4162.36 2119.14 4168.45 2118.42 4181 c
-2163.78 4181 l
-2162.7 4195.99 2160 4204.3 2154.42 4211.34 c
-2148.66 4218.36 2140.2 4222.16 2130.12 4222.16 c
-2107.62 4222.16 2092.5 4204.33 2092.5 4178.04 c
-2092.5 4151.76 2107.26 4134.48 2129.58 4134.48 c
-2144.16 4134.48 2152.98 4140.06 2164.68 4156.98 c
-h
-2117.52 4188 m
-2118.06 4209.42 2121.3 4216.16 2130.12 4216.16 c
-2135.34 4216.16 2138.58 4213.42 2140.02 4208.1 c
-2140.92 4204.68 2141.28 4199.64 2141.64 4190.46 c
-2141.64 4188 l
-h
-2167.92 4137 m
-f*
-1 i
-1252.55 4102.55 914.4 15.5999 re
-f
-0.2 i
-3964.26 4176.36 m
-3953.64 4165.2 3947.88 4160.88 3939.06 4157.46 c
-3933.84 4155.3 3927.9 4154.58 3922.86 4154.58 c
-3910.98 4154.58 3899.64 4160.74 3894.42 4169.88 c
-3889.2 4179.42 3887 4192.2 3887 4210.38 c
-3887 4247.64 3898.23 4267.7 3919.8 4267.7 c
-3928.26 4267.7 3936 4264.38 3943.74 4257.36 c
-3951.48 4250.52 3955.62 4244.4 3961.92 4230.72 c
-3966.42 4230.72 l
-3966.42 4273.16 l
-3961.56 4273.16 l
-3958.86 4266.43 3957.06 4264.56 3953.64 4264.56 c
-3951.84 4264.56 3949.5 4265.28 3945.36 4267.08 c
-3934.92 4271.4 3926.1 4273.7 3917.46 4273.7 c
-3881.64 4273.7 3855 4245.84 3855 4208.76 c
-3855 4171.68 3881.21 4145.58 3918.54 4145.58 c
-3939.24 4145.58 3951.48 4151.88 3969.66 4171.86 c
-h
-3975.96 4149 m
-f*
-4039.18 4146.66 m
-4046.78 4149.36 4051.02 4150.08 4062.5 4151.34 c
-4073.66 4152.6 l
-4073.66 4157 l
-4065.74 4157.35 4064 4159.63 4064 4167.18 c
-4064 4232 l
-4027.4 4232 l
-4027.4 4227.66 l
-4036.4 4226.94 4039 4224.78 4039 4217.04 c
-4039 4166.1 l
-4032.88 4160.16 4029.18 4158.48 4023.8 4158.48 c
-4016.42 4158.48 4014 4162 4014 4170.96 c
-4014 4232 l
-3979.88 4232 l
-3979.88 4227.66 l
-3987.26 4226.22 3989 4224.6 3989 4217.04 c
-3989 4171.68 l
-3989 4155.84 3997.89 4146.48 4012.64 4146.48 c
-4022.16 4146.48 4028.56 4149.36 4039.18 4158.36 c
-h
-4077.08 4149 m
-f*
-4115.28 4232 m
-4081.22 4232 l
-4081.22 4227.66 l
-4088.96 4226.58 4091 4224.24 4091 4217.04 c
-4091 4164.12 l
-4091 4156.74 4089.19 4154.76 4081.22 4153.32 c
-4081.22 4149 l
-4129.1 4149 l
-4129.1 4153.32 l
-4118.12 4154.04 4116 4156.38 4116 4167.54 c
-4116 4201.56 l
-4116 4210.92 4121.02 4218.66 4126.94 4218.66 c
-4128.38 4218.66 4130 4217.4 4131.98 4214.52 c
-4135.4 4209.66 4138.1 4208.04 4142.78 4208.04 c
-4149.44 4208.04 4154.12 4213.08 4154.12 4219.92 c
-4154.12 4228.2 4148 4234.16 4139.54 4234.16 c
-4130.55 4234.16 4123.73 4229.47 4115.28 4217.22 c
-h
-4155.92 4149 m
-f*
-4196.28 4232 m
-4162.22 4232 l
-4162.22 4227.66 l
-4169.96 4226.58 4172 4224.24 4172 4217.04 c
-4172 4164.12 l
-4172 4156.74 4170.19 4154.76 4162.22 4153.32 c
-4162.22 4149 l
-4210.1 4149 l
-4210.1 4153.32 l
-4199.12 4154.04 4197 4156.38 4197 4167.54 c
-4197 4201.56 l
-4197 4210.92 4202.02 4218.66 4207.94 4218.66 c
-4209.38 4218.66 4211 4217.4 4212.98 4214.52 c
-4216.4 4209.66 4219.1 4208.04 4223.78 4208.04 c
-4230.44 4208.04 4235.12 4213.08 4235.12 4219.92 c
-4235.12 4228.2 4229 4234.16 4220.54 4234.16 c
-4211.55 4234.16 4204.73 4229.47 4196.28 4217.22 c
-h
-4236.92 4149 m
-f*
-4308.36 4171.5 m
-4300.98 4162.68 4295.58 4159.48 4287.84 4159.48 c
-4281 4159.48 4275.6 4162.53 4272 4168.62 c
-4268.58 4174.36 4267.14 4180.45 4266.42 4193 c
-4311.78 4193 l
-4310.7 4207.99 4308 4216.3 4302.42 4223.34 c
-4296.66 4230.36 4288.2 4234.16 4278.12 4234.16 c
-4255.62 4234.16 4240.5 4216.33 4240.5 4190.04 c
-4240.5 4163.76 4255.26 4146.48 4277.58 4146.48 c
-4292.16 4146.48 4300.98 4152.06 4312.68 4168.98 c
-h
-4265.52 4200 m
-4266.06 4221.42 4269.3 4228.16 4278.12 4228.16 c
-4283.34 4228.16 4286.58 4225.42 4288.02 4220.1 c
-4288.92 4216.68 4289.28 4211.64 4289.64 4202.46 c
-4289.64 4200 l
-h
-4315.92 4149 m
-f*
-4353.82 4232 m
-4319.78 4232 l
-4319.78 4227.66 l
-4327.7 4226.4 4329 4224.6 4329 4217.04 c
-4329 4164.12 l
-4329 4156.56 4327.61 4154.94 4319.78 4153.32 c
-4319.78 4149 l
-4363.16 4149 l
-4363.16 4153.32 l
-4356.5 4154.22 4354 4156.92 4354 4163.58 c
-4354 4211.64 l
-4354 4212.36 4355.4 4214.16 4357.4 4215.96 c
-4361.36 4219.92 4365.68 4222.16 4370 4222.16 c
-4376.12 4222.16 4379 4217.27 4379 4207.14 c
-4379 4163.58 l
-4379 4156.92 4376.71 4154.04 4370.72 4153.32 c
-4370.72 4149 l
-4413.02 4149 l
-4413.02 4153.32 l
-4406 4153.86 4404 4156.02 4404 4163.58 c
-4404 4208.76 l
-4404 4224.24 4394.54 4234.16 4379.9 4234.16 c
-4368.96 4234.16 4360.57 4229.11 4353.82 4218.48 c
-h
-4416.08 4149 m
-f*
-4470.9 4232 m
-4454 4232 l
-4454 4262.4 l
-4449.48 4262.4 l
-4438.5 4246.92 4431.3 4238.82 4419.6 4228.92 c
-4419.6 4224 l
-4429 4224 l
-4429 4165.74 l
-4429 4154.04 4436.73 4146.84 4449.12 4146.84 c
-4461.18 4146.84 4468.38 4152.24 4475.76 4167 c
-4471.26 4168.98 l
-4467.66 4162.14 4464.78 4159.84 4461 4159.84 c
-4455.96 4159.84 4454 4162.83 4454 4169.88 c
-4454 4224 l
-4470.9 4224 l
-h
-4475.94 4149 m
-f*
-4521 4149 m
-f*
-4625.94 4271 m
-4523.88 4271 l
-4523.88 4266 l
-4536.3 4265.29 4540 4262.63 4540 4253.4 c
-4540 4166.28 l
-4540 4156.92 4537.44 4154.94 4523.88 4153.5 c
-4523.88 4149 l
-4588.68 4149 l
-4588.68 4154 l
-4572.12 4154.69 4569 4156.77 4569 4166.28 c
-4569 4208.22 l
-4587.28 4207.86 4593.91 4201.2 4596.42 4180.32 c
-4600.92 4180.32 l
-4600.92 4241.16 l
-4596.42 4241.16 l
-4593.19 4220.64 4586.92 4214.34 4569 4214.34 c
-4569 4256.1 l
-4569 4262.76 4571.32 4265 4580.4 4265 c
-4597.14 4265 4607.58 4261.8 4613.16 4255.2 c
-4617.12 4250.7 4619.1 4245.84 4621.62 4234.5 c
-4625.94 4234.5 l
-h
-4630.98 4149 m
-f*
-4670.28 4232 m
-4636.22 4232 l
-4636.22 4227.66 l
-4643.96 4226.58 4646 4224.24 4646 4217.04 c
-4646 4164.12 l
-4646 4156.74 4644.19 4154.76 4636.22 4153.32 c
-4636.22 4149 l
-4684.1 4149 l
-4684.1 4153.32 l
-4673.12 4154.04 4671 4156.38 4671 4167.54 c
-4671 4201.56 l
-4671 4210.92 4676.02 4218.66 4681.94 4218.66 c
-4683.38 4218.66 4685 4217.4 4686.98 4214.52 c
-4690.4 4209.66 4693.1 4208.04 4697.78 4208.04 c
-4704.44 4208.04 4709.12 4213.08 4709.12 4219.92 c
-4709.12 4228.2 4703 4234.16 4694.54 4234.16 c
-4685.55 4234.16 4678.73 4229.47 4670.28 4217.22 c
-h
-4710.92 4149 m
-f*
-4796.14 4160.52 m
-4794.34 4158.72 l
-4793.8 4158.18 4793.26 4158 4792.36 4158 c
-4789.84 4158 4789 4159.44 4789 4162.5 c
-4789 4209.48 l
-4789 4224.78 4775.16 4234.16 4752.94 4234.16 c
-4732.6 4234.16 4718.92 4224.97 4718.92 4211.46 c
-4718.92 4203.9 4723.24 4199.58 4730.62 4199.58 c
-4737.82 4199.58 4742.86 4203.9 4742.86 4210.02 c
-4742.86 4212.54 4741.96 4214.88 4739.62 4217.76 c
-4738 4219.56 4737.46 4220.64 4737.46 4221.72 c
-4737.46 4225.5 4742.32 4228.16 4748.8 4228.16 c
-4759.42 4228.16 4764 4223.37 4764 4212.54 c
-4764 4199.4 l
-4742.89 4192.92 4734.41 4189.68 4727.56 4185.18 c
-4719.46 4179.78 4716 4173.48 4716 4165.56 c
-4716 4154.58 4724.07 4146.48 4735.3 4146.48 c
-4745.74 4146.48 4754.02 4150.08 4763.92 4159.08 c
-4765.9 4149.9 4769.86 4146.48 4778.68 4146.48 c
-4786.42 4146.48 4792 4149.36 4798.84 4156.74 c
-h
-4764 4167 m
-4759.04 4161.42 4755.37 4159.26 4750.96 4159.26 c
-4745.56 4159.26 4742 4164.12 4742 4171.32 c
-4742 4181.76 4749.57 4189.14 4764 4193.1 c
-h
-4801 4149 m
-f*
-4838.46 4232 m
-4803.73 4232 l
-4803.73 4227.66 l
-4811.65 4226.58 4814 4224.42 4814 4217.04 c
-4814 4164.12 l
-4814 4156.74 4811.95 4154.76 4803.73 4153.32 c
-4803.73 4149 l
-4846.93 4149 l
-4846.93 4153.32 l
-4840.63 4154.22 4839 4156.74 4839 4163.58 c
-4839 4211.64 l
-4839 4212.54 4841.51 4215.78 4843.51 4217.76 c
-4847.29 4220.64 4850.53 4222.16 4853.77 4222.16 c
-4860.79 4222.16 4864 4218 4864 4207.14 c
-4864 4163.58 l
-4864 4156.2 4861.9 4153.86 4854.85 4153.32 c
-4854.85 4149 l
-4896.97 4149 l
-4896.97 4153.32 l
-4890.67 4154.04 4889 4156.74 4889 4163.58 c
-4889 4211.64 l
-4889 4212.54 4891.43 4215.6 4893.37 4217.58 c
-4897.33 4220.64 4900.57 4222.16 4903.81 4222.16 c
-4910.65 4222.16 4913 4217.82 4913 4207.14 c
-4913 4163.58 l
-4913 4156.02 4911.1 4153.86 4904.53 4153.32 c
-4904.53 4149 l
-4947.37 4149 l
-4947.37 4153 l
-4940.35 4153.37 4938 4155.6 4938 4163.58 c
-4938 4208.76 l
-4938 4224.24 4928.6 4234.16 4914.07 4234.16 c
-4903.81 4234.16 4896.97 4230.01 4887.61 4218.48 c
-4882.21 4229.82 4875.91 4234.16 4864.57 4234.16 c
-4853.2 4234.16 4845.21 4229.29 4838.46 4218.48 c
-h
-4950.94 4149 m
-f*
-5023.36 4171.5 m
-5015.98 4162.68 5010.58 4159.48 5002.84 4159.48 c
-4996 4159.48 4990.6 4162.53 4987 4168.62 c
-4983.58 4174.36 4982.14 4180.45 4981.42 4193 c
-5026.78 4193 l
-5025.7 4207.99 5023 4216.3 5017.42 4223.34 c
-5011.66 4230.36 5003.2 4234.16 4993.12 4234.16 c
-4970.62 4234.16 4955.5 4216.33 4955.5 4190.04 c
-4955.5 4163.76 4970.26 4146.48 4992.58 4146.48 c
-5007.16 4146.48 5015.98 4152.06 5027.68 4168.98 c
-h
-4980.52 4200 m
-4981.06 4221.42 4984.3 4228.16 4993.12 4228.16 c
-4998.34 4228.16 5001.58 4225.42 5003.02 4220.1 c
-5003.92 4216.68 5004.28 4211.64 5004.64 4202.46 c
-5004.64 4200 l
-h
-5030.92 4149 m
-f*
-1 i
-3845.75 4114.55 1184.4 15.5999 re
-f
-1 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-f*
-0 g
-4451.75 4341.35 m
-4618.55 4492.55 l
-4535.75 4492.55 l
-4535.75 4646.15 l
-4370.15 4646.15 l
-4370.15 4492.55 l
-4288.55 4492.55 l
-4451.75 4341.35 l
-4451.75 4354.55 l
-4313.75 4481.75 l
-4379.75 4481.75 l
-4379.75 4636.55 l
-4526.15 4636.55 l
-4526.15 4481.75 l
-4592.15 4481.75 l
-4451.75 4354.55 l
-4451.75 4341.35 l
-f*
-0.201248 i
-1299.33 5632 m
-1185.22 5632 l
-1185.22 5627 l
-1199.11 5626.2 1203 5623.18 1203 5612.72 c
-1203 5515.32 l
-1203 5504.85 1200.17 5502.64 1185.22 5501.03 c
-1185.22 5496 l
-1257.67 5496 l
-1257.67 5501 l
-1239.15 5501.81 1236 5504.23 1236 5515.32 c
-1236 5562.21 l
-1256.22 5561.81 1263.55 5554.36 1266.32 5531.02 c
-1271.35 5531.02 l
-1271.35 5599.04 l
-1266.32 5599.04 l
-1262.76 5576.1 1255.82 5569.05 1236 5569.05 c
-1236 5615.74 l
-1236 5623.19 1238.52 5625 1248.41 5625 c
-1267.13 5625 1278.8 5621.64 1285.04 5614.74 c
-1289.47 5609.71 1291.68 5604.27 1294.5 5591.59 c
-1299.33 5591.59 l
-h
-1304.96 5496 m
-f*
-1349.19 5589 m
-1310.84 5589 l
-1310.84 5583.95 l
-1319.49 5582.74 1322 5580.12 1322 5572.07 c
-1322 5512.9 l
-1322 5504.65 1319.93 5502.44 1310.84 5500.83 c
-1310.84 5496 l
-1364.37 5496 l
-1364.37 5500.83 l
-1352.09 5501.63 1350 5504.25 1350 5516.73 c
-1350 5554.76 l
-1350 5565.23 1355.49 5573.88 1361.95 5573.88 c
-1363.56 5573.88 1365.37 5572.47 1367.59 5569.25 c
-1371.41 5563.82 1374.43 5562.01 1379.66 5562.01 c
-1387.11 5562.01 1392.34 5567.64 1392.34 5575.29 c
-1392.34 5584.55 1385.5 5591.41 1376.04 5591.41 c
-1366.1 5591.41 1358.54 5586.12 1349.19 5572.27 c
-h
-1394.35 5496 m
-f*
-1489.19 5508.88 m
-1487.18 5506.87 l
-1486.57 5506.26 1485.97 5506.06 1484.96 5506.06 c
-1482.15 5506.06 1481 5507.67 1481 5511.09 c
-1481 5563.62 l
-1481 5580.73 1465.6 5591.42 1440.89 5591.42 c
-1418.15 5591.42 1402.85 5581.06 1402.85 5565.83 c
-1402.85 5557.38 1407.69 5552.55 1415.94 5552.55 c
-1423.99 5552.55 1429.62 5557.38 1429.62 5564.22 c
-1429.62 5567.04 1428.61 5569.66 1426 5572.88 c
-1424.19 5574.89 1423.58 5576.1 1423.58 5577.3 c
-1423.58 5581.53 1429.02 5584.42 1436.26 5584.42 c
-1448.14 5584.42 1453.86 5579.08 1453.86 5567.04 c
-1453.86 5552.35 l
-1429.91 5545.1 1420.29 5541.48 1412.51 5536.45 c
-1403.46 5530.41 1399 5523.37 1399 5514.52 c
-1399 5502.24 1408.27 5493.18 1421.17 5493.18 c
-1432.84 5493.18 1442.1 5497.21 1453.17 5507.27 c
-1455.38 5497.01 1459.81 5493.18 1469.67 5493.18 c
-1478.32 5493.18 1484.56 5496.4 1492.21 5504.65 c
-h
-1453 5516.13 m
-1447.55 5509.89 1443.52 5507.47 1438.68 5507.47 c
-1432.64 5507.47 1428 5512.91 1428 5520.96 c
-1428 5532.63 1436.61 5540.88 1453 5545.31 c
-h
-1494.62 5496 m
-f*
-1536.4 5589 m
-1497.7 5589 l
-1497.7 5583.95 l
-1506.55 5582.74 1509 5580.32 1509 5572.07 c
-1509 5512.9 l
-1509 5504.65 1506.74 5502.44 1497.7 5500.83 c
-1497.7 5496 l
-1546 5496 l
-1546 5500.83 l
-1538.95 5501.84 1537 5504.65 1537 5512.3 c
-1537 5566.03 l
-1537 5567.04 1539.87 5570.66 1542.18 5572.88 c
-1546.4 5576.1 1550.02 5578.42 1553.65 5578.42 c
-1561.5 5578.42 1565 5573.59 1565 5561 c
-1565 5512.3 l
-1565 5504.05 1562.68 5501.43 1554.85 5500.83 c
-1554.85 5496 l
-1601.95 5496 l
-1601.95 5500.83 l
-1594.9 5501.64 1593 5504.65 1593 5512.3 c
-1593 5566.03 l
-1593 5567.04 1595.73 5570.46 1597.92 5572.68 c
-1602.35 5576.1 1605.97 5578.42 1609.59 5578.42 c
-1617.24 5578.42 1620 5573.38 1620 5561 c
-1620 5512.3 l
-1620 5503.85 1617.85 5501.43 1610.4 5500.83 c
-1610.4 5496 l
-1658.3 5496 l
-1658.3 5501 l
-1650.45 5501.4 1648 5503.78 1648 5512.3 c
-1648 5562.81 l
-1648 5580.12 1637.43 5591.42 1621.07 5591.42 c
-1609.59 5591.42 1601.95 5586.73 1591.48 5573.68 c
-1585.44 5586.36 1578.4 5591.42 1565.72 5591.42 c
-1552.95 5591.42 1543.98 5585.91 1536.4 5573.68 c
-h
-1661.64 5496 m
-f*
-1739.9 5521.16 m
-1731.65 5511.29 1725.61 5507.18 1716.96 5507.18 c
-1709.31 5507.18 1703.27 5510.77 1699.25 5517.94 c
-1695.43 5524.54 1693.82 5531.56 1693.01 5546 c
-1743.73 5546 l
-1742.52 5562.36 1739.5 5571.43 1733.26 5579.12 c
-1726.82 5586.96 1717.36 5591.42 1706.09 5591.42 c
-1680.94 5591.42 1664.03 5571.4 1664.03 5541.88 c
-1664.03 5512.5 1680.53 5493.18 1705.49 5493.18 c
-1721.79 5493.18 1731.65 5499.42 1744.73 5518.34 c
-h
-1692 5553 m
-1692.61 5576.96 1696.23 5584.42 1706.09 5584.42 c
-1711.93 5584.42 1715.55 5581.38 1717.16 5575.49 c
-1718.17 5571.67 1718.57 5566.03 1718.97 5555.77 c
-1718.97 5553 l
-h
-1748.35 5496 m
-f*
-1845.16 5591.59 m
-1845.16 5635.22 l
-1839.37 5635.22 l
-1837.96 5629.82 1836.55 5628.42 1832.93 5628.42 c
-1831.12 5628.42 1828.7 5629.03 1824.47 5630.43 c
-1815.22 5633.86 1808.78 5635.02 1800.93 5635.02 c
-1773.56 5635.02 1757 5619.54 1757 5594.01 c
-1757 5588.98 1757.75 5584.75 1759.07 5580.73 c
-1763.29 5570.06 1774.16 5560.6 1791.27 5552.35 c
-1804.75 5545.91 l
-1822.46 5537.46 1827 5532.22 1827 5521.56 c
-1827 5507.67 1817.25 5499.18 1801.94 5499.18 c
-1790.26 5499.18 1780.6 5503.89 1772.96 5513.31 c
-1767.12 5520.75 1764.3 5527.6 1760.88 5541.88 c
-1755.04 5541.88 l
-1755.04 5492.18 l
-1760.88 5492.18 l
-1762.09 5497.41 1763.7 5499.02 1766.92 5499.02 c
-1768.53 5499.02 1770.74 5498.42 1775.17 5497.01 c
-1785.03 5493.59 1792.48 5492.18 1801.33 5492.18 c
-1831.12 5492.18 1851 5509.28 1851 5534.64 c
-1851 5549.73 1842.04 5564.83 1829.1 5571.27 c
-1799.52 5585.96 l
-1783.22 5594.01 1779 5598.84 1779 5608.7 c
-1779 5621.18 1787.37 5628.02 1800.93 5628.02 c
-1809.99 5628.02 1818.44 5624.47 1825.68 5617.55 c
-1832.53 5610.51 1835.75 5604.67 1839.77 5591.59 c
-h
-1859.89 5496 m
-f*
-1940.9 5521.16 m
-1932.65 5511.29 1926.61 5507.18 1917.96 5507.18 c
-1910.31 5507.18 1904.27 5510.77 1900.25 5517.94 c
-1896.43 5524.54 1894.82 5531.56 1894.01 5546 c
-1944.73 5546 l
-1943.52 5562.36 1940.5 5571.43 1934.26 5579.12 c
-1927.82 5586.96 1918.36 5591.42 1907.09 5591.42 c
-1881.94 5591.42 1865.03 5571.4 1865.03 5541.88 c
-1865.03 5512.5 1881.53 5493.18 1906.49 5493.18 c
-1922.79 5493.18 1932.65 5499.42 1945.73 5518.34 c
-h
-1893 5553 m
-1893.61 5576.96 1897.23 5584.42 1907.09 5584.42 c
-1912.93 5584.42 1916.55 5581.38 1918.16 5575.49 c
-1919.17 5571.67 1919.57 5566.03 1919.97 5555.77 c
-1919.97 5553 l
-h
-1949.35 5496 m
-f*
-2010.38 5589 m
-1991 5589 l
-1991 5622.79 l
-1986.43 5622.79 l
-1974.16 5605.48 1966.11 5596.42 1953.02 5585.35 c
-1953.02 5580 l
-1963 5580 l
-1963 5514.72 l
-1963 5501.64 1971.84 5493.59 1986.03 5493.59 c
-1999.51 5493.59 2007.56 5499.62 2015.81 5516.12 c
-2010.78 5518.34 l
-2006.76 5510.69 2003.54 5507.59 1999.31 5507.59 c
-1993.68 5507.59 1991 5511.09 1991 5519.34 c
-1991 5580 l
-2010.38 5580 l
-h
-2016.02 5496 m
-f*
-1 i
-3845.75 5319.35 m
-3800.15 5330.15 3752.15 5336.15 3702.95 5336.15 c
-3534.95 5336.15 3387.35 5266.55 3341.75 5164.55 c
-S
-3790.55 5280.95 m
-3825.35 5319.35 l
-3821.75 5370.95 l
-3951.35 5276.15 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsexample.eps b/ast-5.3-1/sun211_figures/fsexample.eps
deleted file mode 100644
index d9d5632..0000000
--- a/ast-5.3-1/sun211_figures/fsexample.eps
+++ /dev/null
@@ -1,1786 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 114 303 503 613
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/11 14:23:38
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5024.15 5691.35 m
-5024.15 5900.15 4854.95 6070.55 4644.95 6070.55 c
-1581.35 6070.55 l
-1372.55 6070.55 1202.15 5900.15 1202.15 5691.35 c
-1202.15 3418.55 l
-1202.15 3208.55 1372.55 3039.35 1581.35 3039.35 c
-4644.95 3039.35 l
-4854.95 3039.35 5024.15 3208.55 5024.15 3418.55 c
-f*
-1 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-f*
-8 w
-1 J
-1 j
-0 g
-4959.35 5747.75 m
-4959.35 5955.35 4790.15 6124.55 4582.55 6124.55 c
-1526.15 6124.55 l
-1317.35 6124.55 1148.15 5955.35 1148.15 5747.75 c
-1148.15 3480.95 l
-1148.15 3273.35 1317.35 3104.15 1526.15 3104.15 c
-4581.35 3104.15 l
-4790.15 3104.15 4959.35 3273.35 4959.35 3480.95 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-f*
-16 w
-0 g
-2193.35 5111.75 m
-2193.35 5218.55 2104.55 5306.15 1995.35 5306.15 c
-1509.35 5306.15 l
-1400.15 5306.15 1311.35 5218.55 1311.35 5111.75 c
-1311.35 4979.75 l
-1311.35 4872.95 1400.15 4785.35 1509.35 4785.35 c
-1995.35 4785.35 l
-2104.55 4785.35 2193.35 4872.95 2193.35 4979.75 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 4254.95 m
-4722.95 4366.55 4631.75 4457.75 4520.15 4457.75 c
-4023.35 4457.75 l
-3911.75 4457.75 3820.55 4366.55 3820.55 4254.95 c
-3820.55 4118.15 l
-3820.55 4006.55 3911.75 3915.35 4023.35 3915.35 c
-4520.15 3915.35 l
-4631.75 3915.35 4722.95 4006.55 4722.95 4118.15 c
-f*
-1 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-f*
-0 g
-4653.35 4311.35 m
-4653.35 4419.35 4564.55 4506.95 4455.35 4506.95 c
-3969.35 4506.95 l
-3860.15 4506.95 3771.35 4419.35 3771.35 4311.35 c
-3771.35 4180.55 l
-3771.35 4072.55 3860.15 3984.95 3969.35 3984.95 c
-4455.35 3984.95 l
-4564.55 3984.95 4653.35 4072.55 4653.35 4180.55 c
-h
-S
-0.201248 i
-3999.33 4353 m
-3885.22 4353 l
-3885.22 4348 l
-3899.11 4347.2 3903 4344.18 3903 4333.72 c
-3903 4236.32 l
-3903 4225.85 3900.17 4223.64 3885.22 4222.03 c
-3885.22 4217 l
-3957.67 4217 l
-3957.67 4222 l
-3939.15 4222.81 3936 4225.23 3936 4236.32 c
-3936 4283.21 l
-3956.22 4282.81 3963.55 4275.36 3966.32 4252.02 c
-3971.35 4252.02 l
-3971.35 4320.04 l
-3966.32 4320.04 l
-3962.76 4297.1 3955.82 4290.05 3936 4290.05 c
-3936 4336.74 l
-3936 4344.19 3938.52 4346 3948.41 4346 c
-3967.13 4346 3978.8 4342.64 3985.04 4335.74 c
-3989.47 4330.71 3991.68 4325.27 3994.5 4312.59 c
-3999.33 4312.59 l
-h
-4004.96 4217 m
-f*
-4049.19 4310 m
-4010.84 4310 l
-4010.84 4304.95 l
-4019.49 4303.74 4022 4301.12 4022 4293.07 c
-4022 4233.9 l
-4022 4225.65 4019.93 4223.44 4010.84 4221.83 c
-4010.84 4217 l
-4064.37 4217 l
-4064.37 4221.83 l
-4052.09 4222.63 4050 4225.25 4050 4237.73 c
-4050 4275.76 l
-4050 4286.23 4055.49 4294.88 4061.95 4294.88 c
-4063.56 4294.88 4065.37 4293.47 4067.59 4290.25 c
-4071.41 4284.82 4074.43 4283.01 4079.66 4283.01 c
-4087.11 4283.01 4092.34 4288.64 4092.34 4296.29 c
-4092.34 4305.55 4085.5 4312.41 4076.04 4312.41 c
-4066.1 4312.41 4058.54 4307.12 4049.19 4293.27 c
-h
-4094.35 4217 m
-f*
-4189.19 4229.88 m
-4187.18 4227.87 l
-4186.57 4227.26 4185.97 4227.06 4184.96 4227.06 c
-4182.15 4227.06 4181 4228.67 4181 4232.09 c
-4181 4284.62 l
-4181 4301.73 4165.6 4312.42 4140.89 4312.42 c
-4118.15 4312.42 4102.85 4302.06 4102.85 4286.83 c
-4102.85 4278.38 4107.69 4273.55 4115.94 4273.55 c
-4123.99 4273.55 4129.62 4278.38 4129.62 4285.22 c
-4129.62 4288.04 4128.61 4290.66 4126 4293.88 c
-4124.19 4295.89 4123.58 4297.1 4123.58 4298.3 c
-4123.58 4302.53 4129.02 4305.42 4136.26 4305.42 c
-4148.14 4305.42 4153.86 4300.08 4153.86 4288.04 c
-4153.86 4273.35 l
-4129.91 4266.1 4120.29 4262.48 4112.51 4257.45 c
-4103.46 4251.41 4099 4244.37 4099 4235.52 c
-4099 4223.24 4108.27 4214.18 4121.17 4214.18 c
-4132.84 4214.18 4142.1 4218.21 4153.17 4228.27 c
-4155.38 4218.01 4159.81 4214.18 4169.67 4214.18 c
-4178.32 4214.18 4184.56 4217.4 4192.21 4225.65 c
-h
-4153 4237.13 m
-4147.55 4230.89 4143.52 4228.47 4138.68 4228.47 c
-4132.64 4228.47 4128 4233.91 4128 4241.96 c
-4128 4253.63 4136.61 4261.88 4153 4266.31 c
-h
-4194.62 4217 m
-f*
-4236.4 4310 m
-4197.7 4310 l
-4197.7 4304.95 l
-4206.55 4303.74 4209 4301.32 4209 4293.07 c
-4209 4233.9 l
-4209 4225.65 4206.74 4223.44 4197.7 4221.83 c
-4197.7 4217 l
-4246 4217 l
-4246 4221.83 l
-4238.95 4222.84 4237 4225.65 4237 4233.3 c
-4237 4287.03 l
-4237 4288.04 4239.87 4291.66 4242.18 4293.88 c
-4246.4 4297.1 4250.02 4299.42 4253.65 4299.42 c
-4261.5 4299.42 4265 4294.59 4265 4282 c
-4265 4233.3 l
-4265 4225.05 4262.68 4222.43 4254.85 4221.83 c
-4254.85 4217 l
-4301.95 4217 l
-4301.95 4221.83 l
-4294.9 4222.64 4293 4225.65 4293 4233.3 c
-4293 4287.03 l
-4293 4288.04 4295.73 4291.46 4297.92 4293.68 c
-4302.35 4297.1 4305.97 4299.42 4309.59 4299.42 c
-4317.24 4299.42 4320 4294.38 4320 4282 c
-4320 4233.3 l
-4320 4224.85 4317.85 4222.43 4310.4 4221.83 c
-4310.4 4217 l
-4358.3 4217 l
-4358.3 4222 l
-4350.45 4222.4 4348 4224.78 4348 4233.3 c
-4348 4283.81 l
-4348 4301.12 4337.43 4312.42 4321.07 4312.42 c
-4309.59 4312.42 4301.95 4307.73 4291.48 4294.68 c
-4285.44 4307.36 4278.4 4312.42 4265.72 4312.42 c
-4252.95 4312.42 4243.98 4306.91 4236.4 4294.68 c
-h
-4361.64 4217 m
-f*
-4439.9 4242.16 m
-4431.65 4232.29 4425.61 4228.18 4416.96 4228.18 c
-4409.31 4228.18 4403.27 4231.77 4399.25 4238.94 c
-4395.43 4245.54 4393.82 4252.56 4393.01 4267 c
-4443.73 4267 l
-4442.52 4283.36 4439.5 4292.43 4433.26 4300.12 c
-4426.82 4307.96 4417.36 4312.42 4406.09 4312.42 c
-4380.94 4312.42 4364.03 4292.4 4364.03 4262.88 c
-4364.03 4233.5 4380.53 4214.18 4405.49 4214.18 c
-4421.79 4214.18 4431.65 4220.42 4444.73 4239.34 c
-h
-4392 4274 m
-4392.61 4297.96 4396.23 4305.42 4406.09 4305.42 c
-4411.93 4305.42 4415.55 4302.38 4417.16 4296.49 c
-4418.17 4292.67 4418.57 4287.03 4418.97 4276.77 c
-4418.97 4274 l
-h
-4448.35 4217 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -4215]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-f*
-8 w
-0 g
-3740.15 3605.75 m
-3740.15 3714.95 3651.35 3803.75 3540.95 3803.75 c
-3050.15 3803.75 l
-2938.55 3803.75 2849.75 3714.95 2849.75 3605.75 c
-2849.75 3471.35 l
-2849.75 3362.15 2938.55 3273.35 3050.15 3273.35 c
-3539.75 3273.35 l
-3651.35 3273.35 3740.15 3362.15 3740.15 3471.35 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 4758.95 m
-1754.15 4599.35 1794.95 4446.95 1865.75 4338.95 c
-S
-1809.35 4346.15 m
-1858.55 4359.35 l
-1884.95 4403.75 l
-1940.15 4253.75 l
-f*
-32 w
-2733.35 5222.15 m
-2644.55 5277.35 2538.95 5307.35 2430.95 5307.35 c
-2345.75 5307.35 2260.55 5288.15 2184.95 5253.35 c
-S
-2630.15 5194.55 m
-2703.35 5234.15 l
-2729.75 5314.55 l
-2870.15 5096.15 l
-f*
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -1998 -3991]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-2136 3991 m
-f*
-2159.52 4088.28 m
-2163.68 4088.92 2166.56 4089.08 2169.6 4089.08 c
-2174.56 4089.08 2176.96 4087.32 2176.96 4083.8 c
-2176.96 4082.84 2176.64 4081.4 2176.32 4079.96 c
-2155.84 4006.52 l
-2153.12 3997.72 2148.32 3995 2136.8 3995 c
-2136.8 3991 l
-2192 3991 l
-2192 3995 l
-2179.36 3995.15 2176.48 3996.38 2176.48 4002.04 c
-2176.48 4003.64 2176.64 4004.12 2178.4 4010.68 c
-2203.04 4100.28 l
-2188.48 4096.76 2178.24 4094.68 2159.84 4091.96 c
-h
-2216 3991 m
-f*
-2268.32 4100.24 m
-2259.52 4100.24 2250.72 4096.09 2243.52 4088.76 c
-2228.64 4073.4 2219 4047.64 2219 4023.96 c
-2219 4002.68 2229.13 3988.76 2244.32 3988.76 c
-2250.88 3988.76 2257.12 3990.84 2263.04 3995.16 c
-2279.52 4007 2292 4036.28 2292 4061.72 c
-2292 4085.08 2282.69 4100.24 2268.32 4100.24 c
-h
-2268 4095.24 m
-2272.96 4095.24 2276 4091.07 2276 4084.12 c
-2276 4080.92 2275.13 4075.48 2273.92 4069.24 c
-2271.2 4056.28 2263.52 4026.68 2260.16 4016.44 c
-2254.56 3999.8 2249.92 3993.76 2243.2 3993.76 c
-2238.4 3993.76 2235 3997.78 2235 4003.96 c
-2235 4013.88 2243.42 4049.4 2251.04 4070.84 c
-2257.12 4088.76 2261.92 4095.24 2268 4095.24 c
-h
-2296 3991 m
-f*
-1 i
-1 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-f*
-0 g
-4058.15 4720.55 m
-4139.75 4720.55 l
-4139.75 4569.35 l
-4306.55 4569.35 l
-4306.55 4720.55 l
-4388.15 4720.55 l
-4222.55 4874.15 l
-4058.15 4720.55 l
-4083.35 4731.35 l
-4222.55 4860.95 l
-4364.15 4731.35 l
-4295.75 4731.35 l
-4295.75 4580.15 l
-4149.35 4580.15 l
-4149.35 4731.35 l
-4083.35 4731.35 l
-4058.15 4720.55 l
-f*
-0.2 i
-3755.26 5012.36 m
-3744.64 5001.2 3738.88 4996.88 3730.06 4993.46 c
-3724.84 4991.3 3718.9 4990.58 3713.86 4990.58 c
-3701.98 4990.58 3690.64 4996.74 3685.42 5005.88 c
-3680.2 5015.42 3678 5028.2 3678 5046.38 c
-3678 5083.64 3689.23 5103.7 3710.8 5103.7 c
-3719.26 5103.7 3727 5100.38 3734.74 5093.36 c
-3742.48 5086.52 3746.62 5080.4 3752.92 5066.72 c
-3757.42 5066.72 l
-3757.42 5109.16 l
-3752.56 5109.16 l
-3749.86 5102.43 3748.06 5100.56 3744.64 5100.56 c
-3742.84 5100.56 3740.5 5101.28 3736.36 5103.08 c
-3725.92 5107.4 3717.1 5109.7 3708.46 5109.7 c
-3672.64 5109.7 3646 5081.84 3646 5044.76 c
-3646 5007.68 3672.21 4981.58 3709.54 4981.58 c
-3730.24 4981.58 3742.48 4987.88 3760.66 5007.86 c
-h
-3766.96 4985 m
-f*
-3830.18 4982.66 m
-3837.78 4985.36 3842.02 4986.08 3853.5 4987.34 c
-3864.66 4988.6 l
-3864.66 4993 l
-3856.74 4993.35 3855 4995.63 3855 5003.18 c
-3855 5068 l
-3818.4 5068 l
-3818.4 5063.66 l
-3827.4 5062.94 3830 5060.78 3830 5053.04 c
-3830 5002.1 l
-3823.88 4996.16 3820.18 4994.48 3814.8 4994.48 c
-3807.42 4994.48 3805 4998 3805 5006.96 c
-3805 5068 l
-3770.88 5068 l
-3770.88 5063.66 l
-3778.26 5062.22 3780 5060.6 3780 5053.04 c
-3780 5007.68 l
-3780 4991.84 3788.89 4982.48 3803.64 4982.48 c
-3813.16 4982.48 3819.56 4985.36 3830.18 4994.36 c
-h
-3868.08 4985 m
-f*
-3906.28 5068 m
-3872.22 5068 l
-3872.22 5063.66 l
-3879.96 5062.58 3882 5060.24 3882 5053.04 c
-3882 5000.12 l
-3882 4992.74 3880.19 4990.76 3872.22 4989.32 c
-3872.22 4985 l
-3920.1 4985 l
-3920.1 4989.32 l
-3909.12 4990.04 3907 4992.38 3907 5003.54 c
-3907 5037.56 l
-3907 5046.92 3912.02 5054.66 3917.94 5054.66 c
-3919.38 5054.66 3921 5053.4 3922.98 5050.52 c
-3926.4 5045.66 3929.1 5044.04 3933.78 5044.04 c
-3940.44 5044.04 3945.12 5049.08 3945.12 5055.92 c
-3945.12 5064.2 3939 5070.16 3930.54 5070.16 c
-3921.55 5070.16 3914.73 5065.47 3906.28 5053.22 c
-h
-3946.92 4985 m
-f*
-3987.28 5068 m
-3953.22 5068 l
-3953.22 5063.66 l
-3960.96 5062.58 3963 5060.24 3963 5053.04 c
-3963 5000.12 l
-3963 4992.74 3961.19 4990.76 3953.22 4989.32 c
-3953.22 4985 l
-4001.1 4985 l
-4001.1 4989.32 l
-3990.12 4990.04 3988 4992.38 3988 5003.54 c
-3988 5037.56 l
-3988 5046.92 3993.02 5054.66 3998.94 5054.66 c
-4000.38 5054.66 4002 5053.4 4003.98 5050.52 c
-4007.4 5045.66 4010.1 5044.04 4014.78 5044.04 c
-4021.44 5044.04 4026.12 5049.08 4026.12 5055.92 c
-4026.12 5064.2 4020 5070.16 4011.54 5070.16 c
-4002.55 5070.16 3995.73 5065.47 3987.28 5053.22 c
-h
-4027.92 4985 m
-f*
-4099.36 5007.5 m
-4091.98 4998.68 4086.58 4995.48 4078.84 4995.48 c
-4072 4995.48 4066.6 4998.53 4063 5004.62 c
-4059.58 5010.36 4058.14 5016.45 4057.42 5029 c
-4102.78 5029 l
-4101.7 5043.99 4099 5052.3 4093.42 5059.34 c
-4087.66 5066.36 4079.2 5070.16 4069.12 5070.16 c
-4046.62 5070.16 4031.5 5052.33 4031.5 5026.04 c
-4031.5 4999.76 4046.26 4982.48 4068.58 4982.48 c
-4083.16 4982.48 4091.98 4988.06 4103.68 5004.98 c
-h
-4056.52 5036 m
-4057.06 5057.42 4060.3 5064.16 4069.12 5064.16 c
-4074.34 5064.16 4077.58 5061.42 4079.02 5056.1 c
-4079.92 5052.68 4080.28 5047.64 4080.64 5038.46 c
-4080.64 5036 l
-h
-4106.92 4985 m
-f*
-4144.82 5068 m
-4110.78 5068 l
-4110.78 5063.66 l
-4118.7 5062.4 4120 5060.6 4120 5053.04 c
-4120 5000.12 l
-4120 4992.56 4118.61 4990.94 4110.78 4989.32 c
-4110.78 4985 l
-4154.16 4985 l
-4154.16 4989.32 l
-4147.5 4990.22 4145 4992.92 4145 4999.58 c
-4145 5047.64 l
-4145 5048.36 4146.4 5050.16 4148.4 5051.96 c
-4152.36 5055.92 4156.68 5058.16 4161 5058.16 c
-4167.12 5058.16 4170 5053.27 4170 5043.14 c
-4170 4999.58 l
-4170 4992.92 4167.71 4990.04 4161.72 4989.32 c
-4161.72 4985 l
-4204.02 4985 l
-4204.02 4989.32 l
-4197 4989.86 4195 4992.02 4195 4999.58 c
-4195 5044.76 l
-4195 5060.24 4185.54 5070.16 4170.9 5070.16 c
-4159.96 5070.16 4151.57 5065.11 4144.82 5054.48 c
-h
-4207.08 4985 m
-f*
-4261.9 5068 m
-4245 5068 l
-4245 5098.4 l
-4240.48 5098.4 l
-4229.5 5082.92 4222.3 5074.82 4210.6 5064.92 c
-4210.6 5060 l
-4220 5060 l
-4220 5001.74 l
-4220 4990.04 4227.73 4982.84 4240.12 4982.84 c
-4252.18 4982.84 4259.38 4988.24 4266.76 5003 c
-4262.26 5004.98 l
-4258.66 4998.14 4255.78 4995.84 4252 4995.84 c
-4246.96 4995.84 4245 4998.83 4245 5005.88 c
-4245 5060 l
-4261.9 5060 l
-h
-4266.94 4985 m
-f*
-4312 4985 m
-f*
-4417.94 5107 m
-4315.88 5107 l
-4315.88 5102 l
-4328.3 5101.29 4332 5098.63 4332 5089.4 c
-4332 5002.28 l
-4332 4992.92 4329.44 4990.94 4315.88 4989.5 c
-4315.88 4985 l
-4380.68 4985 l
-4380.68 4990 l
-4364.12 4990.69 4361 4992.77 4361 5002.28 c
-4361 5044.22 l
-4379.28 5043.86 4385.91 5037.2 4388.42 5016.32 c
-4392.92 5016.32 l
-4392.92 5077.16 l
-4388.42 5077.16 l
-4385.19 5056.64 4378.92 5050.34 4361 5050.34 c
-4361 5092.1 l
-4361 5098.76 4363.32 5101 4372.4 5101 c
-4389.14 5101 4399.58 5097.8 4405.16 5091.2 c
-4409.12 5086.7 4411.1 5081.84 4413.62 5070.5 c
-4417.94 5070.5 l
-h
-4422.98 4985 m
-f*
-4461.28 5068 m
-4427.22 5068 l
-4427.22 5063.66 l
-4434.96 5062.58 4437 5060.24 4437 5053.04 c
-4437 5000.12 l
-4437 4992.74 4435.19 4990.76 4427.22 4989.32 c
-4427.22 4985 l
-4475.1 4985 l
-4475.1 4989.32 l
-4464.12 4990.04 4462 4992.38 4462 5003.54 c
-4462 5037.56 l
-4462 5046.92 4467.02 5054.66 4472.94 5054.66 c
-4474.38 5054.66 4476 5053.4 4477.98 5050.52 c
-4481.4 5045.66 4484.1 5044.04 4488.78 5044.04 c
-4495.44 5044.04 4500.12 5049.08 4500.12 5055.92 c
-4500.12 5064.2 4494 5070.16 4485.54 5070.16 c
-4476.55 5070.16 4469.73 5065.47 4461.28 5053.22 c
-h
-4501.92 4985 m
-f*
-4587.14 4996.52 m
-4585.34 4994.72 l
-4584.8 4994.18 4584.26 4994 4583.36 4994 c
-4580.84 4994 4580 4995.44 4580 4998.5 c
-4580 5045.48 l
-4580 5060.78 4566.16 5070.16 4543.94 5070.16 c
-4523.6 5070.16 4509.92 5060.97 4509.92 5047.46 c
-4509.92 5039.9 4514.24 5035.58 4521.62 5035.58 c
-4528.82 5035.58 4533.86 5039.9 4533.86 5046.02 c
-4533.86 5048.54 4532.96 5050.88 4530.62 5053.76 c
-4529 5055.56 4528.46 5056.64 4528.46 5057.72 c
-4528.46 5061.5 4533.32 5064.16 4539.8 5064.16 c
-4550.42 5064.16 4555 5059.37 4555 5048.54 c
-4555 5035.4 l
-4533.89 5028.92 4525.41 5025.68 4518.56 5021.18 c
-4510.46 5015.78 4507 5009.48 4507 5001.56 c
-4507 4990.58 4515.07 4982.48 4526.3 4982.48 c
-4536.74 4982.48 4545.02 4986.08 4554.92 4995.08 c
-4556.9 4985.9 4560.86 4982.48 4569.68 4982.48 c
-4577.42 4982.48 4583 4985.36 4589.84 4992.74 c
-h
-4555 5003 m
-4550.04 4997.42 4546.37 4995.26 4541.96 4995.26 c
-4536.56 4995.26 4533 5000.12 4533 5007.32 c
-4533 5017.76 4540.57 5025.14 4555 5029.1 c
-h
-4592 4985 m
-f*
-4629.46 5068 m
-4594.73 5068 l
-4594.73 5063.66 l
-4602.65 5062.58 4605 5060.42 4605 5053.04 c
-4605 5000.12 l
-4605 4992.74 4602.95 4990.76 4594.73 4989.32 c
-4594.73 4985 l
-4637.93 4985 l
-4637.93 4989.32 l
-4631.63 4990.22 4630 4992.74 4630 4999.58 c
-4630 5047.64 l
-4630 5048.54 4632.51 5051.78 4634.51 5053.76 c
-4638.29 5056.64 4641.53 5058.16 4644.77 5058.16 c
-4651.79 5058.16 4655 5054 4655 5043.14 c
-4655 4999.58 l
-4655 4992.2 4652.9 4989.86 4645.85 4989.32 c
-4645.85 4985 l
-4687.97 4985 l
-4687.97 4989.32 l
-4681.67 4990.04 4680 4992.74 4680 4999.58 c
-4680 5047.64 l
-4680 5048.54 4682.43 5051.6 4684.37 5053.58 c
-4688.33 5056.64 4691.57 5058.16 4694.81 5058.16 c
-4701.65 5058.16 4704 5053.82 4704 5043.14 c
-4704 4999.58 l
-4704 4992.02 4702.1 4989.86 4695.53 4989.32 c
-4695.53 4985 l
-4738.37 4985 l
-4738.37 4989 l
-4731.35 4989.37 4729 4991.6 4729 4999.58 c
-4729 5044.76 l
-4729 5060.24 4719.6 5070.16 4705.07 5070.16 c
-4694.81 5070.16 4687.97 5066.01 4678.61 5054.48 c
-4673.21 5065.82 4666.91 5070.16 4655.57 5070.16 c
-4644.2 5070.16 4636.21 5065.29 4629.46 5054.48 c
-h
-4741.94 4985 m
-f*
-4814.36 5007.5 m
-4806.98 4998.68 4801.58 4995.48 4793.84 4995.48 c
-4787 4995.48 4781.6 4998.53 4778 5004.62 c
-4774.58 5010.36 4773.14 5016.45 4772.42 5029 c
-4817.78 5029 l
-4816.7 5043.99 4814 5052.3 4808.42 5059.34 c
-4802.66 5066.36 4794.2 5070.16 4784.12 5070.16 c
-4761.62 5070.16 4746.5 5052.33 4746.5 5026.04 c
-4746.5 4999.76 4761.26 4982.48 4783.58 4982.48 c
-4798.16 4982.48 4806.98 4988.06 4818.68 5004.98 c
-h
-4771.52 5036 m
-4772.06 5057.42 4775.3 5064.16 4784.12 5064.16 c
-4789.34 5064.16 4792.58 5061.42 4794.02 5056.1 c
-4794.92 5052.68 4795.28 5047.64 4795.64 5038.46 c
-4795.64 5036 l
-h
-4821.92 4985 m
-f*
-1 i
-3636.95 4949.75 1184.4 15.5999 re
-f
-0.2 i
-1323.88 5932 m
-1323.88 5927 l
-1336.3 5926.29 1340 5923.45 1340 5914.4 c
-1340 5827.28 l
-1340 5818.1 1337.25 5815.94 1323.88 5814.5 c
-1323.88 5810 l
-1381.84 5810 l
-1412.26 5810 1432 5823.5 1432 5843.84 c
-1432 5852.12 1428.73 5859.32 1422.7 5864.9 c
-1416.4 5870.48 1410.28 5873 1397.68 5875.7 c
-1418.56 5881.82 1426 5889.2 1426 5902.88 c
-1426 5921.42 1409.55 5932 1379.5 5932 c
-h
-1369 5871.74 m
-1373.92 5871.74 l
-1392.46 5871.74 1401 5862.2 1401 5842.22 c
-1401 5824.76 1393.77 5816 1379.5 5816 c
-1371.58 5816 1369 5818.99 1369 5826.74 c
-h
-1369 5917.46 m
-1369 5923.94 1371.39 5927 1378.24 5927 c
-1390.84 5927 1397 5919.03 1397 5901.62 c
-1397 5882.72 1391.08 5877.68 1369 5877.14 c
-h
-1441.06 5810 m
-f*
-1526.14 5821.52 m
-1524.34 5819.72 l
-1523.8 5819.18 1523.26 5819 1522.36 5819 c
-1519.84 5819 1519 5820.44 1519 5823.5 c
-1519 5870.48 l
-1519 5885.78 1505.16 5895.16 1482.94 5895.16 c
-1462.6 5895.16 1448.92 5885.97 1448.92 5872.46 c
-1448.92 5864.9 1453.24 5860.58 1460.62 5860.58 c
-1467.82 5860.58 1472.86 5864.9 1472.86 5871.02 c
-1472.86 5873.54 1471.96 5875.88 1469.62 5878.76 c
-1468 5880.56 1467.46 5881.64 1467.46 5882.72 c
-1467.46 5886.5 1472.32 5889.16 1478.8 5889.16 c
-1489.42 5889.16 1494 5884.37 1494 5873.54 c
-1494 5860.4 l
-1472.89 5853.92 1464.41 5850.68 1457.56 5846.18 c
-1449.46 5840.78 1446 5834.48 1446 5826.56 c
-1446 5815.58 1454.07 5807.48 1465.3 5807.48 c
-1475.74 5807.48 1484.02 5811.08 1493.92 5820.08 c
-1495.9 5810.9 1499.86 5807.48 1508.68 5807.48 c
-1516.42 5807.48 1522 5810.36 1528.84 5817.74 c
-h
-1494 5828 m
-1489.04 5822.42 1485.37 5820.26 1480.96 5820.26 c
-1475.56 5820.26 1472 5825.12 1472 5832.32 c
-1472 5842.76 1479.57 5850.14 1494 5854.1 c
-h
-1531 5810 m
-f*
-1592.22 5868.68 m
-1592.22 5894.8 l
-1588.24 5894.8 l
-1587.16 5892.08 1586.08 5891.2 1583.74 5891.2 c
-1582.66 5891.2 1581.04 5891.55 1578.16 5892.44 c
-1572.4 5894.42 1568.26 5895.16 1564.12 5895.16 c
-1547.74 5895.16 1536 5883.99 1536 5868.86 c
-1536 5856.98 1543.34 5848.7 1561.42 5840.96 c
-1573.84 5835.56 1579 5831.06 1579 5825.3 c
-1579 5818.28 1573.48 5813.48 1565.2 5813.48 c
-1552.6 5813.48 1544.32 5821.62 1540.54 5837.36 c
-1535.5 5837.36 l
-1535.5 5807.66 l
-1540 5807.66 l
-1541.98 5811.44 1543.06 5812.7 1544.68 5812.7 c
-1545.58 5812.7 1547.02 5812.34 1548.82 5811.62 c
-1554.04 5809.46 1563.22 5807.48 1568.26 5807.48 c
-1584.64 5807.48 1596 5818.64 1596 5834.84 c
-1596 5847.62 1589.15 5855.54 1571.14 5862.92 c
-1558.9 5868.14 1554 5872.64 1554 5878.76 c
-1554 5884.7 1558.98 5889.16 1565.74 5889.16 c
-1570.6 5889.16 1575.28 5887.19 1579.24 5883.44 c
-1583.02 5879.84 1585 5876.42 1587.7 5868.68 c
-h
-1601.02 5810 m
-f*
-1673.36 5832.5 m
-1665.98 5823.68 1660.58 5820.48 1652.84 5820.48 c
-1646 5820.48 1640.6 5823.53 1637 5829.62 c
-1633.58 5835.36 1632.14 5841.45 1631.42 5854 c
-1676.78 5854 l
-1675.7 5868.99 1673 5877.3 1667.42 5884.34 c
-1661.66 5891.36 1653.2 5895.16 1643.12 5895.16 c
-1620.62 5895.16 1605.5 5877.33 1605.5 5851.04 c
-1605.5 5824.76 1620.26 5807.48 1642.58 5807.48 c
-1657.16 5807.48 1665.98 5813.06 1677.68 5829.98 c
-h
-1630.52 5861 m
-1631.06 5882.42 1634.3 5889.16 1643.12 5889.16 c
-1648.34 5889.16 1651.58 5886.42 1653.02 5881.1 c
-1653.92 5877.68 1654.28 5872.64 1654.64 5863.46 c
-1654.64 5861 l
-h
-1680.92 5810 m
-f*
-1726 5810 m
-f*
-1831.94 5932 m
-1729.88 5932 l
-1729.88 5927 l
-1742.3 5926.29 1746 5923.63 1746 5914.4 c
-1746 5827.28 l
-1746 5817.92 1743.44 5815.94 1729.88 5814.5 c
-1729.88 5810 l
-1794.68 5810 l
-1794.68 5815 l
-1778.12 5815.69 1775 5817.77 1775 5827.28 c
-1775 5869.22 l
-1793.28 5868.86 1799.91 5862.2 1802.42 5841.32 c
-1806.92 5841.32 l
-1806.92 5902.16 l
-1802.42 5902.16 l
-1799.19 5881.64 1792.92 5875.34 1775 5875.34 c
-1775 5917.1 l
-1775 5923.76 1777.32 5926 1786.4 5926 c
-1803.14 5926 1813.58 5922.8 1819.16 5916.2 c
-1823.12 5911.7 1825.1 5906.84 1827.62 5895.5 c
-1831.94 5895.5 l
-h
-1836.98 5810 m
-f*
-1875.28 5893 m
-1841.22 5893 l
-1841.22 5888.66 l
-1848.96 5887.58 1851 5885.24 1851 5878.04 c
-1851 5825.12 l
-1851 5817.74 1849.19 5815.76 1841.22 5814.32 c
-1841.22 5810 l
-1889.1 5810 l
-1889.1 5814.32 l
-1878.12 5815.04 1876 5817.38 1876 5828.54 c
-1876 5862.56 l
-1876 5871.92 1881.02 5879.66 1886.94 5879.66 c
-1888.38 5879.66 1890 5878.4 1891.98 5875.52 c
-1895.4 5870.66 1898.1 5869.04 1902.78 5869.04 c
-1909.44 5869.04 1914.12 5874.08 1914.12 5880.92 c
-1914.12 5889.2 1908 5895.16 1899.54 5895.16 c
-1890.55 5895.16 1883.73 5890.47 1875.28 5878.22 c
-h
-1915.92 5810 m
-f*
-2001.14 5821.52 m
-1999.34 5819.72 l
-1998.8 5819.18 1998.26 5819 1997.36 5819 c
-1994.84 5819 1994 5820.44 1994 5823.5 c
-1994 5870.48 l
-1994 5885.78 1980.16 5895.16 1957.94 5895.16 c
-1937.6 5895.16 1923.92 5885.97 1923.92 5872.46 c
-1923.92 5864.9 1928.24 5860.58 1935.62 5860.58 c
-1942.82 5860.58 1947.86 5864.9 1947.86 5871.02 c
-1947.86 5873.54 1946.96 5875.88 1944.62 5878.76 c
-1943 5880.56 1942.46 5881.64 1942.46 5882.72 c
-1942.46 5886.5 1947.32 5889.16 1953.8 5889.16 c
-1964.42 5889.16 1969 5884.37 1969 5873.54 c
-1969 5860.4 l
-1947.89 5853.92 1939.41 5850.68 1932.56 5846.18 c
-1924.46 5840.78 1921 5834.48 1921 5826.56 c
-1921 5815.58 1929.07 5807.48 1940.3 5807.48 c
-1950.74 5807.48 1959.02 5811.08 1968.92 5820.08 c
-1970.9 5810.9 1974.86 5807.48 1983.68 5807.48 c
-1991.42 5807.48 1997 5810.36 2003.84 5817.74 c
-h
-1969 5828 m
-1964.04 5822.42 1960.37 5820.26 1955.96 5820.26 c
-1950.56 5820.26 1947 5825.12 1947 5832.32 c
-1947 5842.76 1954.57 5850.14 1969 5854.1 c
-h
-2006 5810 m
-f*
-2043.46 5893 m
-2008.73 5893 l
-2008.73 5888.66 l
-2016.65 5887.58 2019 5885.42 2019 5878.04 c
-2019 5825.12 l
-2019 5817.74 2016.95 5815.76 2008.73 5814.32 c
-2008.73 5810 l
-2051.93 5810 l
-2051.93 5814.32 l
-2045.63 5815.22 2044 5817.74 2044 5824.58 c
-2044 5872.64 l
-2044 5873.54 2046.51 5876.78 2048.51 5878.76 c
-2052.29 5881.64 2055.53 5883.16 2058.77 5883.16 c
-2065.79 5883.16 2069 5879 2069 5868.14 c
-2069 5824.58 l
-2069 5817.2 2066.9 5814.86 2059.85 5814.32 c
-2059.85 5810 l
-2101.97 5810 l
-2101.97 5814.32 l
-2095.67 5815.04 2094 5817.74 2094 5824.58 c
-2094 5872.64 l
-2094 5873.54 2096.43 5876.6 2098.37 5878.58 c
-2102.33 5881.64 2105.57 5883.16 2108.81 5883.16 c
-2115.65 5883.16 2118 5878.82 2118 5868.14 c
-2118 5824.58 l
-2118 5817.02 2116.1 5814.86 2109.53 5814.32 c
-2109.53 5810 l
-2152.37 5810 l
-2152.37 5814 l
-2145.35 5814.37 2143 5816.6 2143 5824.58 c
-2143 5869.76 l
-2143 5885.24 2133.6 5895.16 2119.07 5895.16 c
-2108.81 5895.16 2101.97 5891.01 2092.61 5879.48 c
-2087.21 5890.82 2080.91 5895.16 2069.57 5895.16 c
-2058.2 5895.16 2050.21 5890.29 2043.46 5879.48 c
-h
-2155.94 5810 m
-f*
-2228.36 5832.5 m
-2220.98 5823.68 2215.58 5820.48 2207.84 5820.48 c
-2201 5820.48 2195.6 5823.53 2192 5829.62 c
-2188.58 5835.36 2187.14 5841.45 2186.42 5854 c
-2231.78 5854 l
-2230.7 5868.99 2228 5877.3 2222.42 5884.34 c
-2216.66 5891.36 2208.2 5895.16 2198.12 5895.16 c
-2175.62 5895.16 2160.5 5877.33 2160.5 5851.04 c
-2160.5 5824.76 2175.26 5807.48 2197.58 5807.48 c
-2212.16 5807.48 2220.98 5813.06 2232.68 5829.98 c
-h
-2185.52 5861 m
-2186.06 5882.42 2189.3 5889.16 2198.12 5889.16 c
-2203.34 5889.16 2206.58 5886.42 2208.02 5881.1 c
-2208.92 5877.68 2209.28 5872.64 2209.64 5863.46 c
-2209.64 5861 l
-h
-2235.92 5810 m
-f*
-1 i
-1320.95 5775.35 914.4 15.5999 re
-f
-1 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-f*
-0 g
-1773.35 5370.95 m
-1937.75 5522.15 l
-1856.15 5522.15 l
-1856.15 5675.75 l
-1689.35 5675.75 l
-1689.35 5522.15 l
-1607.75 5522.15 l
-1773.35 5370.95 l
-1773.35 5384.15 l
-1634.15 5512.55 l
-1700.15 5512.55 l
-1700.15 5666.15 l
-1846.55 5666.15 l
-1846.55 5512.55 l
-1912.55 5512.55 l
-1773.35 5384.15 l
-1773.35 5370.95 l
-f*
-0.201248 i
-3939.33 5883 m
-3825.22 5883 l
-3825.22 5878 l
-3839.11 5877.2 3843 5874.18 3843 5863.72 c
-3843 5766.32 l
-3843 5755.85 3840.17 5753.64 3825.22 5752.03 c
-3825.22 5747 l
-3897.67 5747 l
-3897.67 5752 l
-3879.15 5752.81 3876 5755.23 3876 5766.32 c
-3876 5813.21 l
-3896.22 5812.81 3903.55 5805.36 3906.32 5782.02 c
-3911.35 5782.02 l
-3911.35 5850.04 l
-3906.32 5850.04 l
-3902.76 5827.1 3895.82 5820.05 3876 5820.05 c
-3876 5866.74 l
-3876 5874.19 3878.52 5876 3888.41 5876 c
-3907.13 5876 3918.8 5872.64 3925.04 5865.74 c
-3929.47 5860.71 3931.68 5855.27 3934.5 5842.59 c
-3939.33 5842.59 l
-h
-3944.96 5747 m
-f*
-3989.19 5840 m
-3950.84 5840 l
-3950.84 5834.95 l
-3959.49 5833.74 3962 5831.12 3962 5823.07 c
-3962 5763.9 l
-3962 5755.65 3959.93 5753.44 3950.84 5751.83 c
-3950.84 5747 l
-4004.37 5747 l
-4004.37 5751.83 l
-3992.09 5752.63 3990 5755.25 3990 5767.73 c
-3990 5805.76 l
-3990 5816.23 3995.49 5824.88 4001.95 5824.88 c
-4003.56 5824.88 4005.37 5823.47 4007.59 5820.25 c
-4011.41 5814.82 4014.43 5813.01 4019.66 5813.01 c
-4027.11 5813.01 4032.34 5818.64 4032.34 5826.29 c
-4032.34 5835.55 4025.5 5842.41 4016.04 5842.41 c
-4006.1 5842.41 3998.54 5837.12 3989.19 5823.27 c
-h
-4034.35 5747 m
-f*
-4129.19 5759.88 m
-4127.18 5757.87 l
-4126.57 5757.26 4125.97 5757.06 4124.96 5757.06 c
-4122.15 5757.06 4121 5758.67 4121 5762.09 c
-4121 5814.62 l
-4121 5831.73 4105.6 5842.42 4080.89 5842.42 c
-4058.15 5842.42 4042.85 5832.06 4042.85 5816.83 c
-4042.85 5808.38 4047.69 5803.55 4055.94 5803.55 c
-4063.99 5803.55 4069.62 5808.38 4069.62 5815.22 c
-4069.62 5818.04 4068.61 5820.66 4066 5823.88 c
-4064.19 5825.89 4063.58 5827.1 4063.58 5828.3 c
-4063.58 5832.53 4069.02 5835.42 4076.26 5835.42 c
-4088.14 5835.42 4093.86 5830.08 4093.86 5818.04 c
-4093.86 5803.35 l
-4069.91 5796.1 4060.29 5792.48 4052.51 5787.45 c
-4043.46 5781.41 4039 5774.37 4039 5765.52 c
-4039 5753.24 4048.27 5744.18 4061.17 5744.18 c
-4072.84 5744.18 4082.1 5748.21 4093.17 5758.27 c
-4095.38 5748.01 4099.81 5744.18 4109.67 5744.18 c
-4118.32 5744.18 4124.56 5747.4 4132.21 5755.65 c
-h
-4093 5767.13 m
-4087.55 5760.89 4083.52 5758.47 4078.68 5758.47 c
-4072.64 5758.47 4068 5763.91 4068 5771.96 c
-4068 5783.63 4076.61 5791.88 4093 5796.31 c
-h
-4134.62 5747 m
-f*
-4176.4 5840 m
-4137.7 5840 l
-4137.7 5834.95 l
-4146.55 5833.74 4149 5831.32 4149 5823.07 c
-4149 5763.9 l
-4149 5755.65 4146.74 5753.44 4137.7 5751.83 c
-4137.7 5747 l
-4186 5747 l
-4186 5751.83 l
-4178.95 5752.84 4177 5755.65 4177 5763.3 c
-4177 5817.03 l
-4177 5818.04 4179.87 5821.66 4182.18 5823.88 c
-4186.4 5827.1 4190.02 5829.42 4193.65 5829.42 c
-4201.5 5829.42 4205 5824.59 4205 5812 c
-4205 5763.3 l
-4205 5755.05 4202.68 5752.43 4194.85 5751.83 c
-4194.85 5747 l
-4241.95 5747 l
-4241.95 5751.83 l
-4234.9 5752.64 4233 5755.65 4233 5763.3 c
-4233 5817.03 l
-4233 5818.04 4235.73 5821.46 4237.92 5823.68 c
-4242.35 5827.1 4245.97 5829.42 4249.59 5829.42 c
-4257.24 5829.42 4260 5824.38 4260 5812 c
-4260 5763.3 l
-4260 5754.85 4257.85 5752.43 4250.4 5751.83 c
-4250.4 5747 l
-4298.3 5747 l
-4298.3 5752 l
-4290.45 5752.4 4288 5754.78 4288 5763.3 c
-4288 5813.81 l
-4288 5831.12 4277.43 5842.42 4261.07 5842.42 c
-4249.59 5842.42 4241.95 5837.73 4231.48 5824.68 c
-4225.44 5837.36 4218.4 5842.42 4205.72 5842.42 c
-4192.95 5842.42 4183.98 5836.91 4176.4 5824.68 c
-h
-4301.64 5747 m
-f*
-4379.9 5772.16 m
-4371.65 5762.29 4365.61 5758.18 4356.96 5758.18 c
-4349.31 5758.18 4343.27 5761.77 4339.25 5768.94 c
-4335.43 5775.54 4333.82 5782.56 4333.01 5797 c
-4383.73 5797 l
-4382.52 5813.36 4379.5 5822.43 4373.26 5830.12 c
-4366.82 5837.96 4357.36 5842.42 4346.09 5842.42 c
-4320.94 5842.42 4304.03 5822.4 4304.03 5792.88 c
-4304.03 5763.5 4320.53 5744.18 4345.49 5744.18 c
-4361.79 5744.18 4371.65 5750.42 4384.73 5769.34 c
-h
-4332 5804 m
-4332.61 5827.96 4336.23 5835.42 4346.09 5835.42 c
-4351.93 5835.42 4355.55 5832.38 4357.16 5826.49 c
-4358.17 5822.67 4358.57 5817.03 4358.97 5806.77 c
-4358.97 5804 l
-h
-4388.35 5747 m
-f*
-4485.16 5842.59 m
-4485.16 5886.22 l
-4479.37 5886.22 l
-4477.96 5880.82 4476.55 5879.42 4472.93 5879.42 c
-4471.12 5879.42 4468.7 5880.03 4464.47 5881.43 c
-4455.22 5884.86 4448.78 5886.02 4440.93 5886.02 c
-4413.56 5886.02 4397 5870.54 4397 5845.01 c
-4397 5839.98 4397.75 5835.75 4399.07 5831.73 c
-4403.29 5821.06 4414.16 5811.6 4431.27 5803.35 c
-4444.75 5796.91 l
-4462.46 5788.46 4467 5783.22 4467 5772.56 c
-4467 5758.67 4457.25 5750.18 4441.94 5750.18 c
-4430.26 5750.18 4420.6 5754.89 4412.96 5764.31 c
-4407.12 5771.75 4404.3 5778.6 4400.88 5792.88 c
-4395.04 5792.88 l
-4395.04 5743.18 l
-4400.88 5743.18 l
-4402.09 5748.41 4403.7 5750.02 4406.92 5750.02 c
-4408.53 5750.02 4410.74 5749.42 4415.17 5748.01 c
-4425.03 5744.59 4432.48 5743.18 4441.33 5743.18 c
-4471.12 5743.18 4491 5760.28 4491 5785.64 c
-4491 5800.73 4482.04 5815.83 4469.1 5822.27 c
-4439.52 5836.96 l
-4423.22 5845.01 4419 5849.84 4419 5859.7 c
-4419 5872.18 4427.37 5879.02 4440.93 5879.02 c
-4449.99 5879.02 4458.44 5875.47 4465.68 5868.55 c
-4472.53 5861.51 4475.75 5855.67 4479.77 5842.59 c
-h
-4499.89 5747 m
-f*
-4580.9 5772.16 m
-4572.65 5762.29 4566.61 5758.18 4557.96 5758.18 c
-4550.31 5758.18 4544.27 5761.77 4540.25 5768.94 c
-4536.43 5775.54 4534.82 5782.56 4534.01 5797 c
-4584.73 5797 l
-4583.52 5813.36 4580.5 5822.43 4574.26 5830.12 c
-4567.82 5837.96 4558.36 5842.42 4547.09 5842.42 c
-4521.94 5842.42 4505.03 5822.4 4505.03 5792.88 c
-4505.03 5763.5 4521.53 5744.18 4546.49 5744.18 c
-4562.79 5744.18 4572.65 5750.42 4585.73 5769.34 c
-h
-4533 5804 m
-4533.61 5827.96 4537.23 5835.42 4547.09 5835.42 c
-4552.93 5835.42 4556.55 5832.38 4558.16 5826.49 c
-4559.17 5822.67 4559.57 5817.03 4559.97 5806.77 c
-4559.97 5804 l
-h
-4589.35 5747 m
-f*
-4650.38 5840 m
-4631 5840 l
-4631 5873.79 l
-4626.43 5873.79 l
-4614.16 5856.48 4606.11 5847.42 4593.02 5836.35 c
-4593.02 5831 l
-4603 5831 l
-4603 5765.72 l
-4603 5752.64 4611.84 5744.59 4626.03 5744.59 c
-4639.51 5744.59 4647.56 5750.62 4655.81 5767.12 c
-4650.78 5769.34 l
-4646.76 5761.69 4643.54 5758.59 4639.31 5758.59 c
-4633.68 5758.59 4631 5762.09 4631 5770.34 c
-4631 5831 l
-4650.38 5831 l
-h
-4656.02 5747 m
-f*
-1 i
-8 w
-2213.75 3834.95 m
-2280.95 3696.95 2475.35 3592.55 2718.95 3562.55 c
-S
-2678.15 3520.55 m
-2700.95 3567.35 l
-2687.75 3616.55 l
-2835.35 3556.55 l
-f*
-0.564706 g
-3686.15 4768.55 m
-3542.15 4810.55 l
-3645.35 4877.75 l
-3480.95 4887.35 l
-3527.75 4968.95 l
-3369.35 4946.15 l
-3351.35 5030.15 l
-3221.75 4977.35 l
-3143.75 5050.55 l
-3062.15 4977.35 l
-2933.75 5030.15 l
-2914.55 4946.15 l
-2757.35 4968.95 l
-2804.15 4887.35 l
-2639.75 4877.75 l
-2741.75 4810.55 l
-2598.95 4768.55 l
-2741.75 4728.95 l
-2639.75 4661.75 l
-2804.15 4652.15 l
-2757.35 4570.55 l
-2914.55 4594.55 l
-2933.75 4509.35 l
-3062.15 4562.15 l
-3143.75 4488.95 l
-3221.75 4562.15 l
-3351.35 4509.35 l
-3369.35 4594.55 l
-3527.75 4570.55 l
-3480.95 4652.15 l
-3645.35 4661.75 l
-3542.15 4728.95 l
-f*
-1 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-f*
-0 g
-3626.15 4828.55 m
-3482.15 4870.55 l
-3585.35 4937.75 l
-3420.95 4947.35 l
-3467.75 5028.95 l
-3309.35 5006.15 l
-3291.35 5090.15 l
-3161.75 5037.35 l
-3083.75 5110.55 l
-3002.15 5037.35 l
-2873.75 5090.15 l
-2854.55 5006.15 l
-2697.35 5028.95 l
-2744.15 4947.35 l
-2579.75 4937.75 l
-2681.75 4870.55 l
-2538.95 4828.55 l
-2681.75 4788.95 l
-2579.75 4721.75 l
-2744.15 4712.15 l
-2697.35 4630.55 l
-2854.55 4654.55 l
-2873.75 4569.35 l
-3002.15 4622.15 l
-3083.75 4548.95 l
-3161.75 4622.15 l
-3291.35 4569.35 l
-3309.35 4654.55 l
-3467.75 4630.55 l
-3420.95 4712.15 l
-3585.35 4721.75 l
-3482.15 4788.95 l
-3626.15 4828.55 l
-3480.95 4829.75 l
-3386.15 4803.35 l
-3460.55 4754.15 l
-3354.95 4748.15 l
-3392.15 4682.15 l
-3278.15 4700.15 l
-3262.55 4624.55 l
-3153.35 4668.95 l
-3083.75 4601.75 l
-3010.55 4668.95 l
-2902.55 4624.55 l
-2885.75 4700.15 l
-2771.75 4682.15 l
-2810.15 4748.15 l
-2703.35 4754.15 l
-2778.95 4803.35 l
-2684.15 4829.75 l
-2777.75 4857.35 l
-2703.35 4904.15 l
-2810.15 4911.35 l
-2771.75 4977.35 l
-2885.75 4960.55 l
-2902.55 5034.95 l
-3010.55 4990.55 l
-3083.75 5057.75 l
-3153.35 4990.55 l
-3262.55 5034.95 l
-3278.15 4960.55 l
-3392.15 4977.35 l
-3354.95 4911.35 l
-3460.55 4904.15 l
-3387.35 4857.35 l
-3480.95 4829.75 l
-3626.15 4828.55 l
-f*
-q[1 0 0 1 0 0]concat
-105 70 true[1 0 0 1 -2961 -4787]@85 imagemask
-!$D7 at rVup's8W+L
-!!!"Ks8W+L!$D7 at s53kW!<<*!s53lAs8W,o!!!'"s8W,g!.Y%Ks82is!WW3"s6p#<s8W,u!!!'"s8W,o
-!.Y%Ks8Duu!WW3"s7cSDs8W-!!!!'"s8W,s!.Y%Ks8N'!!WW3"s82kHs8W-!!!!'"s8W,s!.Y%Ks8N'!
-!<<*!s82j]s8W-!!!!"Ks8W,s!$D7 at s8N'!!.Y%Ks82j=s8W-!!!!!`s8W,o!"],0s8Duu!"],0s6p!js8W,s!!!!$
-s8W,7!!*'!s6p!g!!#7`s1eU7J,fP!z+92B1!!*'!rr<$!!!!9(s7cQps8W&uz"98E!!!E9$
-qu?]s!!!'"s8N'(s8Vioz!.Y%KJ.M\[n,NFg!!!!`s8V"!s8V!Wz!$D7 at n3?sQ^]4?7!!!!(
-s8VkDs8RTLz!!E9$rr<#uz!!!!"s8W-!s8Duuz!!%NKs8W,szz5QCc`s7cQoz!!!Q0
-s8W,gzz#QOi(s53kWz!!!-$s8W,7zz!<<*!s*t(Lz!!!"Ks8W*!z
-z!'gM`rVuouz!!!!0s8Vuszz!!iQ(qu?]sz!!!!0s8W&uzz!$D7@
-rr<$!z!!!!`s8W,7zz!.Y%Ks53kWz!!!$!s8W,ozz!WW3"s82isz!!!-$s8W,u
-zz#QOi(s8RTLz!!!Q0s8W-!^]4?7z+92B at s8VQgz!!#7`s6'F^p](9oz
-J,fPds8W&uz!!*'!s+14Mrr<$!!!!!"s8W*!J,fP!z!!E9$rW#1_s53kW!!!!(s8Vus&-)\!
-z!"],0p](R!s82is!!!"Ks8VQg!WW3"J,fQL!WW3"p](Ers8VQg!!!-$s8Vus"98E$p](9o"98E$rW!3's8Vus!!!-$s8W*!&-)\0rVuou#QOi(rr<T0s8W*!!!!9(s8W+L&-)\0rr<$!
-#QOi(s*tX[s8W*!!!!-$s8W+L#QOi(rr<$!"98E$s1em>s8W+L!!!'"s8W+L#QOi(s*t(L!WW3"s*t4O
-s8W*!!!!$!s8W+L!WW3"rr<$!!.Y%Krr<'!s8W&u!!!!`s8W&u!.Y%Kqu?]s!"],0p](:9s8VQg~>
-Q
-0.2 i
-3099 4787 m
-f*
-3129.52 4877 m
-3170.16 4877 l
-3175.92 4894 l
-3130.64 4894 l
-3109.68 4846.52 l
-3120.08 4846.04 3125.04 4845.08 3130.96 4842.04 c
-3141.2 4836.92 3147 4827.64 3147 4817.24 c
-3147 4803.48 3136.98 4790.92 3125.68 4790.92 c
-3122.16 4790.92 3120.4 4792.44 3117.04 4798.2 c
-3113.2 4804.6 3110.48 4806.68 3105.68 4806.68 c
-3100.08 4806.68 3096.24 4803 3096.24 4797.56 c
-3096.24 4789.88 3104.56 4784.92 3117.2 4784.92 c
-3143.6 4784.92 3164 4803.32 3164 4827.16 c
-3164 4839.32 3158.69 4849.56 3149.04 4855.96 c
-3143.44 4859.8 3139.12 4861.24 3124.08 4864.44 c
-h
-3178 4787 m
-f*
-1 i
-32 w
-3191.75 4581.35 m
-3269.75 4442.15 3400.55 4336.55 3557.75 4284.95 c
-S
-3483.35 4228.55 m
-3531.35 4298.15 l
-3516.95 4380.95 l
-3742.55 4252.55 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsmerge.eps b/ast-5.3-1/sun211_figures/fsmerge.eps
deleted file mode 100644
index 6aa1bfd..0000000
--- a/ast-5.3-1/sun211_figures/fsmerge.eps
+++ /dev/null
@@ -1,5238 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 57 88 535 732
-%..................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 16:06:29
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5339.75 6665.75 m
-5339.75 6989.75 5075.75 7253.75 4751.75 7253.75 c
-1220.15 7253.75 l
-896.15 7253.75 632.15 6989.75 632.15 6665.75 c
-632.15 1478.15 l
-632.15 1154.15 896.15 890.151 1220.15 890.151 c
-4751.75 890.151 l
-5075.75 890.151 5339.75 1154.15 5339.75 1478.15 c
-f*
-1 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5274.95 6720.95 m
-5274.95 7044.95 5012.15 7307.75 4688.15 7307.75 c
-1164.95 7307.75 l
-840.95 7307.75 578.15 7044.95 578.15 6720.95 c
-578.15 1541.75 l
-578.15 1217.75 840.95 954.95 1164.95 954.95 c
-4688.15 954.95 l
-5012.15 954.95 5274.95 1217.75 5274.95 1541.75 c
-h
-S
-1 g
-5054.15 3765.35 m
-5054.15 3972.95 4886.15 4140.95 4678.55 4140.95 c
-1577.75 4140.95 l
-1370.15 4140.95 1202.15 3972.95 1202.15 3765.35 c
-1202.15 1515.35 l
-1202.15 1307.75 1370.15 1139.75 1577.75 1139.75 c
-4678.55 1139.75 l
-4886.15 1139.75 5054.15 1307.75 5054.15 1515.35 c
-f*
-0 g
-1580.15 4130.15 m
-1578.95 4139.75 l
-1514.15 4133.75 l
-1515.35 4122.95 l
-f*
-1515.35 4122.95 m
-1514.15 4133.75 l
-1514.15 4133.75 l
-1516.55 4122.95 l
-f*
-1516.55 4122.95 m
-1514.15 4133.75 l
-1498.55 4130.15 l
-1500.95 4119.35 l
-f*
-1445.75 4104.95 m
-1442.15 4113.35 l
-1390.55 4089.35 l
-1395.35 4080.95 l
-f*
-1395.35 4080.95 m
-1390.55 4089.35 l
-1390.55 4089.35 l
-1397.75 4080.95 l
-f*
-1397.75 4080.95 m
-1390.55 4089.35 l
-1371.35 4076.15 l
-1377.35 4068.95 l
-f*
-1331.75 4031.75 m
-1324.55 4040.15 l
-1290.95 4006.55 l
-1296.95 3998.15 l
-f*
-1296.95 3998.15 m
-1290.95 4006.55 l
-1290.95 4006.55 l
-1299.35 3999.35 l
-f*
-1299.35 3999.35 m
-1290.95 4006.55 l
-1274.15 3980.15 l
-1281.35 3974.15 l
-f*
-1252.55 3924.95 m
-1244.15 3929.75 l
-1226.15 3893.75 l
-1234.55 3890.15 l
-f*
-1234.55 3890.15 m
-1226.15 3893.75 l
-1226.15 3893.75 l
-1235.75 3891.35 l
-f*
-1235.75 3891.35 m
-1226.15 3893.75 l
-1216.55 3854.15 l
-1226.15 3851.75 l
-f*
-1216.55 3794.15 m
-1205.75 3796.55 l
-1203.35 3764.15 l
-1214.15 3762.95 l
-f*
-1214.15 3762.95 m
-1203.35 3764.15 l
-1203.35 3764.15 l
-1214.15 3764.15 l
-f*
-1203.35 3716.15 10.7996 47.9998 re
-f*
-1203.35 3575.75 10.7996 80.3999 re
-f*
-1203.35 3436.55 10.7996 79.2 re
-f*
-1203.35 3296.15 10.7996 80.3999 re
-f*
-1203.35 3155.75 10.7996 80.3999 re
-f*
-1203.35 3016.55 10.7996 79.2 re
-f*
-1203.35 2876.15 10.7996 80.3999 re
-f*
-1203.35 2735.75 10.7996 80.3999 re
-f*
-1203.35 2596.55 10.7996 79.2 re
-f*
-1203.35 2456.15 10.7996 80.3999 re
-f*
-1203.35 2315.75 10.7996 80.3999 re
-f*
-1203.35 2176.55 10.7996 79.2 re
-f*
-1203.35 2036.15 10.7996 80.3999 re
-f*
-1203.35 1895.75 10.7996 80.3999 re
-f*
-1203.35 1756.55 10.7996 79.2 re
-f*
-1203.35 1616.15 10.7996 80.3999 re
-f*
-1203.35 1512.95 10.7996 43.2 re
-f*
-1214.15 1512.95 m
-1203.35 1512.95 l
-1203.35 1512.95 l
-1214.15 1514.15 l
-f*
-1214.15 1514.15 m
-1203.35 1512.95 l
-1206.95 1475.75 l
-1217.75 1476.95 l
-f*
-1227.35 1419.35 m
-1217.75 1416.95 l
-1226.15 1384.55 l
-1235.75 1386.95 l
-f*
-1235.75 1386.95 m
-1226.15 1384.55 l
-1226.15 1384.55 l
-1234.55 1388.15 l
-f*
-1234.55 1388.15 m
-1226.15 1384.55 l
-1246.55 1342.55 l
-1254.95 1347.35 l
-f*
-1284.95 1298.15 m
-1277.75 1292.15 l
-1290.95 1271.75 l
-1299.35 1277.75 l
-f*
-1299.35 1277.75 m
-1290.95 1271.75 l
-1290.95 1271.75 l
-1298.15 1280.15 l
-f*
-1298.15 1280.15 m
-1290.95 1271.75 l
-1329.35 1233.35 l
-1337.75 1240.55 l
-f*
-1383.35 1205.75 m
-1377.35 1198.55 l
-1390.55 1188.95 l
-1397.75 1196.15 l
-f*
-1397.75 1196.15 m
-1390.55 1188.95 l
-1390.55 1188.95 l
-1395.35 1197.35 l
-f*
-1395.35 1197.35 m
-1390.55 1188.95 l
-1446.95 1162.55 l
-1451.75 1170.95 l
-f*
-1508.15 1156.55 m
-1505.75 1146.95 l
-1514.15 1144.55 l
-1516.55 1154.15 l
-f*
-1516.55 1154.15 m
-1514.15 1144.55 l
-1514.15 1144.55 l
-1515.35 1154.15 l
-f*
-1515.35 1154.15 m
-1514.15 1144.55 l
-1578.95 1138.55 l
-1580.15 1148.15 l
-f*
-1580.15 1148.15 m
-1578.95 1138.55 l
-1578.95 1138.55 l
-1578.95 1148.15 l
-f*
-1578.95 1138.55 6 9.6001 re
-f*
-1644.95 1138.55 80.3999 9.6001 re
-f*
-1785.35 1138.55 79.2 9.6001 re
-f*
-1924.55 1138.55 80.3999 9.6001 re
-f*
-2064.95 1138.55 80.3999 9.6001 re
-f*
-2205.35 1138.55 79.2 9.6001 re
-f*
-2344.55 1138.55 80.3999 9.6001 re
-f*
-2484.95 1138.55 80.3999 9.6001 re
-f*
-2625.35 1138.55 79.2002 9.6001 re
-f*
-2764.55 1138.55 80.3999 9.6001 re
-f*
-2904.95 1138.55 80.3999 9.6001 re
-f*
-3045.35 1138.55 79.2002 9.6001 re
-f*
-3184.55 1138.55 80.3999 9.6001 re
-f*
-3324.95 1138.55 80.3999 9.6001 re
-f*
-3465.35 1138.55 79.2 9.6001 re
-f*
-3604.55 1138.55 80.3999 9.6001 re
-f*
-3744.95 1138.55 80.3999 9.6001 re
-f*
-3885.35 1138.55 79.2 9.6001 re
-f*
-4024.55 1138.55 80.3999 9.6001 re
-f*
-4164.95 1138.55 80.3999 9.6001 re
-f*
-4305.35 1138.55 79.2 9.6001 re
-f*
-4444.55 1138.55 80.3999 9.6001 re
-f*
-4584.95 1138.55 80.3999 9.6001 re
-f*
-4724.15 1151.75 m
-4725.35 1142.15 l
-4744.55 1144.55 l
-4743.35 1154.15 l
-f*
-4743.35 1154.15 m
-4744.55 1144.55 l
-4744.55 1144.55 l
-4742.15 1154.15 l
-f*
-4742.15 1154.15 m
-4744.55 1144.55 l
-4803.35 1160.15 l
-4800.95 1169.75 l
-f*
-4853.75 1192.55 m
-4857.35 1182.95 l
-4866.95 1188.95 l
-4863.35 1197.35 l
-f*
-4863.35 1197.35 m
-4866.95 1188.95 l
-4866.95 1188.95 l
-4860.95 1197.35 l
-f*
-4860.95 1197.35 m
-4866.95 1188.95 l
-4920.95 1226.15 l
-4916.15 1234.55 l
-f*
-4916.15 1234.55 m
-4920.95 1226.15 l
-4920.95 1226.15 l
-4913.75 1233.35 l
-f*
-4913.75 1233.35 m
-4920.95 1226.15 l
-4922.15 1227.35 l
-4916.15 1234.55 l
-f*
-4958.15 1277.75 m
-4965.35 1269.35 l
-4967.75 1271.75 l
-4960.55 1280.15 l
-f*
-4960.55 1280.15 m
-4967.75 1271.75 l
-4967.75 1271.75 l
-4958.15 1278.95 l
-f*
-4958.15 1278.95 m
-4967.75 1271.75 l
-5004.95 1325.75 l
-4997.75 1331.75 l
-f*
-4997.75 1331.75 m
-5004.95 1325.75 l
-5004.95 1325.75 l
-4996.55 1329.35 l
-f*
-4996.55 1329.35 m
-5004.95 1325.75 l
-5008.55 1334.15 l
-5000.15 1340.15 l
-f*
-5024.15 1391.75 m
-5033.75 1389.35 l
-5048.15 1448.15 l
-5038.55 1450.55 l
-f*
-5038.55 1450.55 m
-5048.15 1448.15 l
-5048.15 1448.15 l
-5038.55 1449.35 l
-f*
-5038.55 1449.35 m
-5048.15 1448.15 l
-5049.35 1467.35 l
-5039.75 1468.55 l
-f*
-5044.55 1527.35 10.7996 80.3999 re
-f*
-5044.55 1667.75 10.7996 79.2 re
-f*
-5044.55 1806.95 10.7996 80.3999 re
-f*
-5044.55 1947.35 10.7996 80.3999 re
-f*
-5044.55 2087.75 10.7996 79.2 re
-f*
-5044.55 2226.95 10.7996 80.3999 re
-f*
-5044.55 2367.35 10.7996 80.3999 re
-f*
-5044.55 2507.75 10.7996 79.2 re
-f*
-5044.55 2646.95 10.7996 80.3999 re
-f*
-5044.55 2787.35 10.7996 80.3999 re
-f*
-5044.55 2927.75 10.7996 79.2 re
-f*
-5044.55 3066.95 10.7996 80.3999 re
-f*
-5044.55 3207.35 10.7996 80.3999 re
-f*
-5044.55 3347.75 10.7996 79.2 re
-f*
-5044.55 3486.95 10.7996 80.3999 re
-f*
-5044.55 3627.35 10.7996 80.3999 re
-f*
-5044.55 3766.55 m
-5055.35 3767.75 l
-5048.15 3830.15 l
-5038.55 3828.95 l
-f*
-5038.55 3828.95 m
-5048.15 3830.15 l
-5048.15 3830.15 l
-5038.55 3827.75 l
-f*
-5038.55 3827.75 m
-5048.15 3830.15 l
-5044.55 3846.95 l
-5034.95 3844.55 l
-f*
-5018.15 3899.75 m
-5027.75 3903.35 l
-5004.95 3952.55 l
-4996.55 3948.95 l
-f*
-4996.55 3948.95 m
-5004.95 3952.55 l
-5004.95 3952.55 l
-4996.55 3946.55 l
-f*
-4996.55 3946.55 m
-5004.95 3952.55 l
-4989.35 3972.95 l
-4980.95 3968.15 l
-f*
-4946.15 4013.75 m
-4953.35 4019.75 l
-4920.95 4052.15 l
-4913.75 4046.15 l
-f*
-4913.75 4046.15 m
-4920.95 4052.15 l
-4920.95 4052.15 l
-4914.95 4043.75 l
-f*
-4914.95 4043.75 m
-4920.95 4052.15 l
-4893.35 4071.35 l
-4887.35 4062.95 l
-f*
-4838.15 4091.75 m
-4841.75 4101.35 l
-4808.15 4116.95 l
-4804.55 4108.55 l
-f*
-4804.55 4108.55 m
-4808.15 4116.95 l
-4808.15 4116.95 l
-4805.75 4107.35 l
-f*
-4805.75 4107.35 m
-4808.15 4116.95 l
-4767.35 4127.75 l
-4764.95 4118.15 l
-f*
-4707.35 4127.75 m
-4708.55 4137.35 l
-4679.75 4139.75 l
-4678.55 4130.15 l
-f*
-4678.55 4130.15 m
-4679.75 4139.75 l
-4679.75 4139.75 l
-4679.75 4130.15 l
-f*
-4628.15 4130.15 51.5999 9.59961 re
-f*
-4488.95 4130.15 79.2 9.59961 re
-f*
-4348.55 4130.15 80.3999 9.59961 re
-f*
-4208.15 4130.15 80.3999 9.59961 re
-f*
-4068.95 4130.15 79.2 9.59961 re
-f*
-3928.55 4130.15 80.3999 9.59961 re
-f*
-3788.15 4130.15 80.3999 9.59961 re
-f*
-3648.95 4130.15 79.2 9.59961 re
-f*
-3508.55 4130.15 80.3999 9.59961 re
-f*
-3368.15 4130.15 80.3999 9.59961 re
-f*
-3228.95 4130.15 79.2 9.59961 re
-f*
-3088.55 4130.15 80.3999 9.59961 re
-f*
-2948.15 4130.15 80.3999 9.59961 re
-f*
-2808.95 4130.15 79.2 9.59961 re
-f*
-2668.55 4130.15 80.3999 9.59961 re
-f*
-2528.15 4130.15 80.3999 9.59961 re
-f*
-2388.95 4130.15 79.2 9.59961 re
-f*
-2248.55 4130.15 80.3999 9.59961 re
-f*
-2108.15 4130.15 80.3999 9.59961 re
-f*
-1968.95 4130.15 79.2 9.59961 re
-f*
-1828.55 4130.15 80.3999 9.59961 re
-f*
-1688.15 4130.15 80.3999 9.59961 re
-f*
-1578.95 4130.15 49.2002 9.59961 re
-f*
-0.564706 g
-2262.95 6855.35 m
-2262.95 6965.75 2171.75 7056.95 2060.15 7056.95 c
-1563.35 7056.95 l
-1451.75 7056.95 1360.55 6965.75 1360.55 6855.35 c
-1360.55 6717.35 l
-1360.55 6606.95 1451.75 6515.75 1563.35 6515.75 c
-2060.15 6515.75 l
-2171.75 6515.75 2262.95 6606.95 2262.95 6717.35 c
-f*
-1 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-f*
-0 g
-2198.15 6912.95 m
-2198.15 7022.15 2109.35 7110.95 1997.75 7110.95 c
-1506.95 7110.95 l
-1396.55 7110.95 1306.55 7022.15 1306.55 6912.95 c
-1306.55 6778.55 l
-1306.55 6669.35 1395.35 6580.55 1506.95 6580.55 c
-1997.75 6580.55 l
-2109.35 6580.55 2198.15 6669.35 2198.15 6778.55 c
-h
-S
-0.201248 i
-1539.33 6952 m
-1425.22 6952 l
-1425.22 6947 l
-1439.11 6946.2 1443 6943.18 1443 6932.72 c
-1443 6835.32 l
-1443 6824.85 1440.17 6822.64 1425.22 6821.03 c
-1425.22 6816 l
-1497.67 6816 l
-1497.67 6821 l
-1479.15 6821.81 1476 6824.23 1476 6835.32 c
-1476 6882.21 l
-1496.22 6881.81 1503.55 6874.36 1506.32 6851.02 c
-1511.35 6851.02 l
-1511.35 6919.04 l
-1506.32 6919.04 l
-1502.76 6896.1 1495.82 6889.05 1476 6889.05 c
-1476 6935.74 l
-1476 6943.19 1478.52 6945 1488.41 6945 c
-1507.13 6945 1518.8 6941.64 1525.04 6934.74 c
-1529.47 6929.71 1531.68 6924.27 1534.5 6911.59 c
-1539.33 6911.59 l
-h
-1544.96 6816 m
-f*
-1589.19 6909 m
-1550.84 6909 l
-1550.84 6903.95 l
-1559.49 6902.74 1562 6900.12 1562 6892.07 c
-1562 6832.9 l
-1562 6824.65 1559.93 6822.44 1550.84 6820.83 c
-1550.84 6816 l
-1604.37 6816 l
-1604.37 6820.83 l
-1592.09 6821.63 1590 6824.25 1590 6836.73 c
-1590 6874.76 l
-1590 6885.23 1595.49 6893.88 1601.95 6893.88 c
-1603.56 6893.88 1605.37 6892.47 1607.59 6889.25 c
-1611.41 6883.82 1614.43 6882.01 1619.66 6882.01 c
-1627.11 6882.01 1632.34 6887.64 1632.34 6895.29 c
-1632.34 6904.55 1625.5 6911.41 1616.04 6911.41 c
-1606.1 6911.41 1598.54 6906.12 1589.19 6892.27 c
-h
-1634.35 6816 m
-f*
-1729.19 6828.88 m
-1727.18 6826.87 l
-1726.57 6826.26 1725.97 6826.06 1724.96 6826.06 c
-1722.15 6826.06 1721 6827.67 1721 6831.09 c
-1721 6883.62 l
-1721 6900.73 1705.6 6911.42 1680.89 6911.42 c
-1658.15 6911.42 1642.85 6901.06 1642.85 6885.83 c
-1642.85 6877.38 1647.69 6872.55 1655.94 6872.55 c
-1663.99 6872.55 1669.62 6877.38 1669.62 6884.22 c
-1669.62 6887.04 1668.61 6889.66 1666 6892.88 c
-1664.19 6894.89 1663.58 6896.1 1663.58 6897.3 c
-1663.58 6901.53 1669.02 6904.42 1676.26 6904.42 c
-1688.14 6904.42 1693.86 6899.08 1693.86 6887.04 c
-1693.86 6872.35 l
-1669.91 6865.1 1660.29 6861.48 1652.51 6856.45 c
-1643.46 6850.41 1639 6843.37 1639 6834.52 c
-1639 6822.24 1648.27 6813.18 1661.17 6813.18 c
-1672.84 6813.18 1682.1 6817.21 1693.17 6827.27 c
-1695.38 6817.01 1699.81 6813.18 1709.67 6813.18 c
-1718.32 6813.18 1724.56 6816.4 1732.21 6824.65 c
-h
-1693 6836.13 m
-1687.55 6829.89 1683.52 6827.47 1678.68 6827.47 c
-1672.64 6827.47 1668 6832.91 1668 6840.96 c
-1668 6852.63 1676.61 6860.88 1693 6865.31 c
-h
-1734.62 6816 m
-f*
-1776.4 6909 m
-1737.7 6909 l
-1737.7 6903.95 l
-1746.55 6902.74 1749 6900.32 1749 6892.07 c
-1749 6832.9 l
-1749 6824.65 1746.74 6822.44 1737.7 6820.83 c
-1737.7 6816 l
-1786 6816 l
-1786 6820.83 l
-1778.95 6821.84 1777 6824.65 1777 6832.3 c
-1777 6886.03 l
-1777 6887.04 1779.87 6890.66 1782.18 6892.88 c
-1786.4 6896.1 1790.02 6898.42 1793.65 6898.42 c
-1801.5 6898.42 1805 6893.59 1805 6881 c
-1805 6832.3 l
-1805 6824.05 1802.68 6821.43 1794.85 6820.83 c
-1794.85 6816 l
-1841.95 6816 l
-1841.95 6820.83 l
-1834.9 6821.64 1833 6824.65 1833 6832.3 c
-1833 6886.03 l
-1833 6887.04 1835.73 6890.46 1837.92 6892.68 c
-1842.35 6896.1 1845.97 6898.42 1849.59 6898.42 c
-1857.24 6898.42 1860 6893.38 1860 6881 c
-1860 6832.3 l
-1860 6823.85 1857.85 6821.43 1850.4 6820.83 c
-1850.4 6816 l
-1898.3 6816 l
-1898.3 6821 l
-1890.45 6821.4 1888 6823.78 1888 6832.3 c
-1888 6882.81 l
-1888 6900.12 1877.43 6911.42 1861.07 6911.42 c
-1849.59 6911.42 1841.95 6906.73 1831.48 6893.68 c
-1825.44 6906.36 1818.4 6911.42 1805.72 6911.42 c
-1792.95 6911.42 1783.98 6905.91 1776.4 6893.68 c
-h
-1901.64 6816 m
-f*
-1979.9 6841.16 m
-1971.65 6831.29 1965.61 6827.18 1956.96 6827.18 c
-1949.31 6827.18 1943.27 6830.77 1939.25 6837.94 c
-1935.43 6844.54 1933.82 6851.56 1933.01 6866 c
-1983.73 6866 l
-1982.52 6882.36 1979.5 6891.43 1973.26 6899.12 c
-1966.82 6906.96 1957.36 6911.42 1946.09 6911.42 c
-1920.94 6911.42 1904.03 6891.4 1904.03 6861.88 c
-1904.03 6832.5 1920.53 6813.18 1945.49 6813.18 c
-1961.79 6813.18 1971.65 6819.42 1984.73 6838.34 c
-h
-1932 6873 m
-1932.61 6896.96 1936.23 6904.42 1946.09 6904.42 c
-1951.93 6904.42 1955.55 6901.38 1957.16 6895.49 c
-1958.17 6891.67 1958.57 6886.03 1958.97 6875.77 c
-1958.97 6873 l
-h
-1988.35 6816 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -6816]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4722.95 6054.95 m
-4722.95 6166.55 4631.75 6257.75 4520.15 6257.75 c
-4023.35 6257.75 l
-3911.75 6257.75 3820.55 6166.55 3820.55 6054.95 c
-3820.55 5918.15 l
-3820.55 5806.55 3911.75 5715.35 4023.35 5715.35 c
-4520.15 5715.35 l
-4631.75 5715.35 4722.95 5806.55 4722.95 5918.15 c
-f*
-1 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-f*
-16 w
-0 g
-4653.35 6111.35 m
-4653.35 6219.35 4564.55 6306.95 4455.35 6306.95 c
-3969.35 6306.95 l
-3860.15 6306.95 3771.35 6219.35 3771.35 6111.35 c
-3771.35 5980.55 l
-3771.35 5872.55 3860.15 5784.95 3969.35 5784.95 c
-4455.35 5784.95 l
-4564.55 5784.95 4653.35 5872.55 4653.35 5980.55 c
-h
-S
-0.201248 i
-3999.33 6153 m
-3885.22 6153 l
-3885.22 6148 l
-3899.11 6147.2 3903 6144.18 3903 6133.72 c
-3903 6036.32 l
-3903 6025.85 3900.17 6023.64 3885.22 6022.03 c
-3885.22 6017 l
-3957.67 6017 l
-3957.67 6022 l
-3939.15 6022.81 3936 6025.23 3936 6036.32 c
-3936 6083.21 l
-3956.22 6082.81 3963.55 6075.36 3966.32 6052.02 c
-3971.35 6052.02 l
-3971.35 6120.04 l
-3966.32 6120.04 l
-3962.76 6097.1 3955.82 6090.05 3936 6090.05 c
-3936 6136.74 l
-3936 6144.19 3938.52 6146 3948.41 6146 c
-3967.13 6146 3978.8 6142.64 3985.04 6135.74 c
-3989.47 6130.71 3991.68 6125.27 3994.5 6112.59 c
-3999.33 6112.59 l
-h
-4004.96 6017 m
-f*
-4049.19 6110 m
-4010.84 6110 l
-4010.84 6104.95 l
-4019.49 6103.74 4022 6101.12 4022 6093.07 c
-4022 6033.9 l
-4022 6025.65 4019.93 6023.44 4010.84 6021.83 c
-4010.84 6017 l
-4064.37 6017 l
-4064.37 6021.83 l
-4052.09 6022.63 4050 6025.25 4050 6037.73 c
-4050 6075.76 l
-4050 6086.23 4055.49 6094.88 4061.95 6094.88 c
-4063.56 6094.88 4065.37 6093.47 4067.59 6090.25 c
-4071.41 6084.82 4074.43 6083.01 4079.66 6083.01 c
-4087.11 6083.01 4092.34 6088.64 4092.34 6096.29 c
-4092.34 6105.55 4085.5 6112.41 4076.04 6112.41 c
-4066.1 6112.41 4058.54 6107.12 4049.19 6093.27 c
-h
-4094.35 6017 m
-f*
-4189.19 6029.88 m
-4187.18 6027.87 l
-4186.57 6027.26 4185.97 6027.06 4184.96 6027.06 c
-4182.15 6027.06 4181 6028.67 4181 6032.09 c
-4181 6084.62 l
-4181 6101.73 4165.6 6112.42 4140.89 6112.42 c
-4118.15 6112.42 4102.85 6102.06 4102.85 6086.83 c
-4102.85 6078.38 4107.69 6073.55 4115.94 6073.55 c
-4123.99 6073.55 4129.62 6078.38 4129.62 6085.22 c
-4129.62 6088.04 4128.61 6090.66 4126 6093.88 c
-4124.19 6095.89 4123.58 6097.1 4123.58 6098.3 c
-4123.58 6102.53 4129.02 6105.42 4136.26 6105.42 c
-4148.14 6105.42 4153.86 6100.08 4153.86 6088.04 c
-4153.86 6073.35 l
-4129.91 6066.1 4120.29 6062.48 4112.51 6057.45 c
-4103.46 6051.41 4099 6044.37 4099 6035.52 c
-4099 6023.24 4108.27 6014.18 4121.17 6014.18 c
-4132.84 6014.18 4142.1 6018.21 4153.17 6028.27 c
-4155.38 6018.01 4159.81 6014.18 4169.67 6014.18 c
-4178.32 6014.18 4184.56 6017.4 4192.21 6025.65 c
-h
-4153 6037.13 m
-4147.55 6030.89 4143.52 6028.47 4138.68 6028.47 c
-4132.64 6028.47 4128 6033.91 4128 6041.96 c
-4128 6053.63 4136.61 6061.88 4153 6066.31 c
-h
-4194.62 6017 m
-f*
-4236.4 6110 m
-4197.7 6110 l
-4197.7 6104.95 l
-4206.55 6103.74 4209 6101.32 4209 6093.07 c
-4209 6033.9 l
-4209 6025.65 4206.74 6023.44 4197.7 6021.83 c
-4197.7 6017 l
-4246 6017 l
-4246 6021.83 l
-4238.95 6022.84 4237 6025.65 4237 6033.3 c
-4237 6087.03 l
-4237 6088.04 4239.87 6091.66 4242.18 6093.88 c
-4246.4 6097.1 4250.02 6099.42 4253.65 6099.42 c
-4261.5 6099.42 4265 6094.59 4265 6082 c
-4265 6033.3 l
-4265 6025.05 4262.68 6022.43 4254.85 6021.83 c
-4254.85 6017 l
-4301.95 6017 l
-4301.95 6021.83 l
-4294.9 6022.64 4293 6025.65 4293 6033.3 c
-4293 6087.03 l
-4293 6088.04 4295.73 6091.46 4297.92 6093.68 c
-4302.35 6097.1 4305.97 6099.42 4309.59 6099.42 c
-4317.24 6099.42 4320 6094.38 4320 6082 c
-4320 6033.3 l
-4320 6024.85 4317.85 6022.43 4310.4 6021.83 c
-4310.4 6017 l
-4358.3 6017 l
-4358.3 6022 l
-4350.45 6022.4 4348 6024.78 4348 6033.3 c
-4348 6083.81 l
-4348 6101.12 4337.43 6112.42 4321.07 6112.42 c
-4309.59 6112.42 4301.95 6107.73 4291.48 6094.68 c
-4285.44 6107.36 4278.4 6112.42 4265.72 6112.42 c
-4252.95 6112.42 4243.98 6106.91 4236.4 6094.68 c
-h
-4361.64 6017 m
-f*
-4439.9 6042.16 m
-4431.65 6032.29 4425.61 6028.18 4416.96 6028.18 c
-4409.31 6028.18 4403.27 6031.77 4399.25 6038.94 c
-4395.43 6045.54 4393.82 6052.56 4393.01 6067 c
-4443.73 6067 l
-4442.52 6083.36 4439.5 6092.43 4433.26 6100.12 c
-4426.82 6107.96 4417.36 6112.42 4406.09 6112.42 c
-4380.94 6112.42 4364.03 6092.4 4364.03 6062.88 c
-4364.03 6033.5 4380.53 6014.18 4405.49 6014.18 c
-4421.79 6014.18 4431.65 6020.42 4444.73 6039.34 c
-h
-4392 6074 m
-4392.61 6097.96 4396.23 6105.42 4406.09 6105.42 c
-4411.93 6105.42 4415.55 6102.38 4417.16 6096.49 c
-4418.17 6092.67 4418.57 6087.03 4418.97 6076.77 c
-4418.97 6074 l
-h
-4448.35 6017 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4484 -6015]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3794.15 5348.15 m
-3794.15 5458.55 3702.95 5549.75 3591.35 5549.75 c
-3095.75 5549.75 l
-2984.15 5549.75 2892.95 5458.55 2892.95 5348.15 c
-2892.95 5210.15 l
-2892.95 5099.75 2984.15 5008.55 3095.75 5008.55 c
-3591.35 5008.55 l
-3702.95 5008.55 3794.15 5099.75 3794.15 5210.15 c
-f*
-1 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-f*
-8 w
-0 g
-3729.35 5405.75 m
-3729.35 5514.95 3640.55 5603.75 3530.15 5603.75 c
-3039.35 5603.75 l
-2927.75 5603.75 2838.95 5514.95 2838.95 5405.75 c
-2838.95 5271.35 l
-2838.95 5162.15 2927.75 5073.35 3039.35 5073.35 c
-3528.95 5073.35 l
-3640.55 5073.35 3729.35 5162.15 3729.35 5271.35 c
-h
-S
-0.201248 i
-3082.33 5445 m
-2968.22 5445 l
-2968.22 5440 l
-2982.11 5439.2 2986 5436.18 2986 5425.72 c
-2986 5328.32 l
-2986 5317.85 2983.17 5315.64 2968.22 5314.03 c
-2968.22 5309 l
-3040.67 5309 l
-3040.67 5314 l
-3022.15 5314.81 3019 5317.23 3019 5328.32 c
-3019 5375.21 l
-3039.22 5374.81 3046.55 5367.36 3049.32 5344.02 c
-3054.35 5344.02 l
-3054.35 5412.04 l
-3049.32 5412.04 l
-3045.76 5389.1 3038.82 5382.05 3019 5382.05 c
-3019 5428.74 l
-3019 5436.19 3021.52 5438 3031.41 5438 c
-3050.13 5438 3061.8 5434.64 3068.04 5427.74 c
-3072.47 5422.71 3074.68 5417.27 3077.5 5404.59 c
-3082.33 5404.59 l
-h
-3087.96 5309 m
-f*
-3131.19 5402 m
-3092.84 5402 l
-3092.84 5396.95 l
-3101.49 5395.74 3104 5393.12 3104 5385.07 c
-3104 5325.9 l
-3104 5317.65 3101.93 5315.44 3092.84 5313.83 c
-3092.84 5309 l
-3146.37 5309 l
-3146.37 5313.83 l
-3134.09 5314.63 3132 5317.25 3132 5329.73 c
-3132 5367.76 l
-3132 5378.23 3137.49 5386.88 3143.95 5386.88 c
-3145.56 5386.88 3147.37 5385.47 3149.59 5382.25 c
-3153.41 5376.82 3156.43 5375.01 3161.66 5375.01 c
-3169.11 5375.01 3174.34 5380.64 3174.34 5388.29 c
-3174.34 5397.55 3167.5 5404.41 3158.04 5404.41 c
-3148.1 5404.41 3140.54 5399.12 3131.19 5385.27 c
-h
-3176.35 5309 m
-f*
-3271.19 5321.88 m
-3269.18 5319.87 l
-3268.57 5319.26 3267.97 5319.06 3266.96 5319.06 c
-3264.15 5319.06 3263 5320.67 3263 5324.09 c
-3263 5376.62 l
-3263 5393.73 3247.6 5404.42 3222.89 5404.42 c
-3200.15 5404.42 3184.85 5394.06 3184.85 5378.83 c
-3184.85 5370.38 3189.69 5365.55 3197.94 5365.55 c
-3205.99 5365.55 3211.62 5370.38 3211.62 5377.22 c
-3211.62 5380.04 3210.61 5382.66 3208 5385.88 c
-3206.19 5387.89 3205.58 5389.1 3205.58 5390.3 c
-3205.58 5394.53 3211.02 5397.42 3218.26 5397.42 c
-3230.14 5397.42 3235.86 5392.08 3235.86 5380.04 c
-3235.86 5365.35 l
-3211.91 5358.1 3202.29 5354.48 3194.51 5349.45 c
-3185.46 5343.41 3181 5336.37 3181 5327.52 c
-3181 5315.24 3190.27 5306.18 3203.17 5306.18 c
-3214.84 5306.18 3224.1 5310.21 3235.17 5320.27 c
-3237.38 5310.01 3241.81 5306.18 3251.67 5306.18 c
-3260.32 5306.18 3266.56 5309.4 3274.21 5317.65 c
-h
-3235 5329.13 m
-3229.55 5322.89 3225.52 5320.47 3220.68 5320.47 c
-3214.64 5320.47 3210 5325.91 3210 5333.96 c
-3210 5345.63 3218.61 5353.88 3235 5358.31 c
-h
-3276.62 5309 m
-f*
-3318.4 5402 m
-3279.7 5402 l
-3279.7 5396.95 l
-3288.55 5395.74 3291 5393.32 3291 5385.07 c
-3291 5325.9 l
-3291 5317.65 3288.74 5315.44 3279.7 5313.83 c
-3279.7 5309 l
-3328 5309 l
-3328 5313.83 l
-3320.95 5314.84 3319 5317.65 3319 5325.3 c
-3319 5379.03 l
-3319 5380.04 3321.87 5383.66 3324.18 5385.88 c
-3328.4 5389.1 3332.02 5391.42 3335.65 5391.42 c
-3343.5 5391.42 3347 5386.59 3347 5374 c
-3347 5325.3 l
-3347 5317.05 3344.68 5314.43 3336.85 5313.83 c
-3336.85 5309 l
-3383.95 5309 l
-3383.95 5313.83 l
-3376.9 5314.64 3375 5317.65 3375 5325.3 c
-3375 5379.03 l
-3375 5380.04 3377.73 5383.46 3379.92 5385.68 c
-3384.35 5389.1 3387.97 5391.42 3391.59 5391.42 c
-3399.24 5391.42 3402 5386.38 3402 5374 c
-3402 5325.3 l
-3402 5316.85 3399.85 5314.43 3392.4 5313.83 c
-3392.4 5309 l
-3440.3 5309 l
-3440.3 5314 l
-3432.45 5314.4 3430 5316.78 3430 5325.3 c
-3430 5375.81 l
-3430 5393.12 3419.43 5404.42 3403.07 5404.42 c
-3391.59 5404.42 3383.95 5399.73 3373.48 5386.68 c
-3367.44 5399.36 3360.4 5404.42 3347.72 5404.42 c
-3334.95 5404.42 3325.98 5398.91 3318.4 5386.68 c
-h
-3443.64 5309 m
-f*
-3523.9 5334.16 m
-3515.65 5324.29 3509.61 5320.18 3500.96 5320.18 c
-3493.31 5320.18 3487.27 5323.77 3483.25 5330.94 c
-3479.43 5337.54 3477.82 5344.56 3477.01 5359 c
-3527.73 5359 l
-3526.52 5375.36 3523.5 5384.43 3517.26 5392.12 c
-3510.82 5399.96 3501.36 5404.42 3490.09 5404.42 c
-3464.94 5404.42 3448.03 5384.4 3448.03 5354.88 c
-3448.03 5325.5 3464.53 5306.18 3489.49 5306.18 c
-3505.79 5306.18 3515.65 5312.42 3528.73 5331.34 c
-h
-3476 5366 m
-3476.61 5389.96 3480.23 5397.42 3490.09 5397.42 c
-3495.93 5397.42 3499.55 5394.38 3501.16 5388.49 c
-3502.17 5384.67 3502.57 5379.03 3502.97 5368.77 c
-3502.97 5366 l
-h
-3532.35 5309 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -5309]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-1751.75 6550.55 m
-1751.75 6558.95 1751.75 6558.95 1751.75 6550.55 c
-1751.75 6402.95 1791.35 6261.35 1863.35 6160.55 c
-S
-1804.55 6166.55 m
-1853.75 6182.15 l
-1878.95 6227.75 l
-1940.15 6080.15 l
-f*
-2244.95 5584.55 m
-2334.95 5466.95 2519.75 5382.95 2740.55 5361.35 c
-S
-2699.75 5318.15 m
-2721.35 5364.95 l
-2705.75 5412.95 l
-2854.55 5356.55 l
-f*
-2831.75 6964.55 m
-2729.75 7064.15 2584.55 7121.75 2430.95 7121.75 c
-2326.55 7121.75 2224.55 7095.35 2136.95 7044.95 c
-S
-2766.95 6958.55 m
-2814.95 6974.15 l
-2838.95 7019.75 l
-2902.55 6873.35 l
-f*
-3186.95 6388.55 m
-3275.75 6214.55 3440.15 6089.75 3635.75 6050.15 c
-S
-3591.35 6010.55 m
-3616.55 6056.15 l
-3604.55 6106.55 l
-3748.55 6035.75 l
-f*
-0.564706 g
-3638.15 6564.95 m
-3503.75 6600.95 l
-3599.75 6657.35 l
-3446.15 6665.75 l
-3488.15 6736.55 l
-3340.55 6716.15 l
-3323.75 6786.95 l
-3203.75 6742.55 l
-3128.15 6806.15 l
-3052.55 6742.55 l
-2932.55 6786.95 l
-2914.55 6716.15 l
-2765.75 6736.55 l
-2810.15 6665.75 l
-2656.55 6657.35 l
-2752.55 6600.95 l
-2616.95 6564.95 l
-2752.55 6530.15 l
-2656.55 6473.75 l
-2810.15 6464.15 l
-2765.75 6394.55 l
-2914.55 6414.95 l
-2932.55 6342.95 l
-3052.55 6388.55 l
-3128.15 6324.95 l
-3203.75 6388.55 l
-3323.75 6342.95 l
-3340.55 6414.95 l
-3488.15 6394.55 l
-3446.15 6464.15 l
-3599.75 6473.75 l
-3503.75 6530.15 l
-f*
-1 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-f*
-0 g
-3578.15 6624.95 m
-3443.75 6660.95 l
-3539.75 6717.35 l
-3386.15 6725.75 l
-3428.15 6796.55 l
-3280.55 6776.15 l
-3263.75 6846.95 l
-3143.75 6802.55 l
-3068.15 6866.15 l
-2992.55 6802.55 l
-2872.55 6846.95 l
-2854.55 6776.15 l
-2705.75 6796.55 l
-2750.15 6725.75 l
-2596.55 6717.35 l
-2692.55 6660.95 l
-2556.95 6624.95 l
-2692.55 6590.15 l
-2596.55 6533.75 l
-2750.15 6524.15 l
-2705.75 6454.55 l
-2854.55 6474.95 l
-2872.55 6402.95 l
-2992.55 6448.55 l
-3068.15 6384.95 l
-3143.75 6448.55 l
-3263.75 6402.95 l
-3280.55 6474.95 l
-3428.15 6454.55 l
-3386.15 6524.15 l
-3539.75 6533.75 l
-3443.75 6590.15 l
-3578.15 6624.95 l
-3539.75 6624.95 l
-3417.35 6593.75 l
-3506.15 6540.95 l
-3368.15 6533.75 l
-3408.95 6467.75 l
-3273.35 6485.75 l
-3256.55 6417.35 l
-3141.35 6459.35 l
-3068.15 6396.95 l
-2994.95 6459.35 l
-2879.75 6417.35 l
-2861.75 6485.75 l
-2726.15 6467.75 l
-2766.95 6533.75 l
-2630.15 6540.95 l
-2718.95 6593.75 l
-2596.55 6624.95 l
-2717.75 6657.35 l
-2630.15 6710.15 l
-2766.95 6717.35 l
-2726.15 6783.35 l
-2861.75 6764.15 l
-2879.75 6833.75 l
-2994.95 6790.55 l
-3068.15 6852.95 l
-3141.35 6790.55 l
-3256.55 6833.75 l
-3273.35 6764.15 l
-3408.95 6783.35 l
-3368.15 6717.35 l
-3506.15 6710.15 l
-3417.35 6657.35 l
-3539.75 6624.95 l
-3578.15 6624.95 l
-f*
-0.2 i
-2890.08 6676.76 m
-2870.08 6602.52 l
-2867.52 6593.88 2864.48 6591.64 2854.08 6591 c
-2854.08 6587 l
-2904 6587 l
-2904 6591 l
-2894.72 6591.48 2892.48 6592.76 2892.48 6597.88 c
-2892.48 6599.64 2892.8 6601.4 2893.76 6605.08 c
-2893.92 6605.88 l
-2894.08 6606.68 l
-2913.76 6678.52 l
-2916.16 6686.84 2918.56 6689.08 2926.72 6690.04 c
-2926.72 6694 l
-2892.8 6694 l
-2843.2 6617.24 l
-2834.56 6694 l
-2799.2 6694 l
-2799.2 6690 l
-2809.28 6689.52 2810.72 6688.89 2810.72 6684.44 c
-2810.72 6682.2 2810.08 6679.32 2808.96 6675.16 c
-2791.52 6615.48 l
-2785.12 6594.68 2784 6592.92 2775.36 6591 c
-2775.36 6587 l
-2808.48 6587 l
-2808.48 6591 l
-2798.24 6592.28 2795.68 6594.2 2795.68 6600.76 c
-2795.68 6603.48 2796.48 6607.48 2798.72 6615.48 c
-2814.88 6674.52 l
-2825.6 6585.08 l
-2830.08 6585.08 l
-h
-2922.24 6587 m
-f*
-2991.44 6607.32 m
-2984.88 6598.52 2982.48 6595.76 2979.92 6595.76 c
-2978.64 6595.76 2978 6596.86 2978 6598.52 c
-2978 6602.52 2979.44 6609.08 2983.44 6622.2 c
-2994.8 6659.96 l
-2977.04 6658.84 l
-2974.16 6649.4 l
-2972.72 6657.56 2969.2 6661.08 2962.32 6661.08 c
-2942.64 6661.08 2919 6630.27 2919 6605.24 c
-2919 6593.08 2925.74 6584.92 2935.92 6584.92 c
-2945.68 6584.92 2953.04 6590.68 2962.16 6606.04 c
-2960.24 6599.48 2960 6597.56 2960 6595.32 c
-2960 6589.4 2964.76 6584.76 2970.64 6584.76 c
-2978.16 6584.76 2985.52 6591 2994.8 6604.92 c
-h
-2964.56 6654.2 m
-2968.08 6653.88 2970.56 6651 2970.56 6646.68 c
-2970.56 6637.08 2965.24 6619.32 2958.96 6608.28 c
-2954.64 6600.44 2949.84 6595.92 2945.52 6595.92 c
-2941.36 6595.92 2938 6599.75 2938 6604.92 c
-2938 6613.24 2943.42 6629.24 2950.16 6641.08 c
-2954.96 6649.56 2960.24 6654.52 2964.56 6654.2 c
-h
-3002 6587 m
-f*
-3036.56 6660.92 m
-3020.24 6658.36 3014 6657.4 3005.68 6656.44 c
-3005.68 6652 l
-3012.88 6651.69 3014.32 6651.07 3014.32 6648.12 c
-3014.32 6646.52 3013.04 6640.76 3010.8 6632.44 c
-2994.8 6570.36 l
-2991.76 6559.8 2990.48 6558.84 2982.8 6559 c
-2982.8 6554 l
-3022.64 6554 l
-3022.64 6559 l
-3014.64 6559.14 3012.24 6560.16 3012.24 6563.64 c
-3012.24 6565.88 3013.36 6570.68 3016.4 6581.88 c
-3017.52 6585.72 3017.52 6586.04 3018.16 6588.44 c
-3023.76 6585.56 3025.68 6584.92 3029.04 6584.92 c
-3050.8 6584.92 3073.36 6613.88 3073.36 6641.56 c
-3073.36 6653.4 3066.64 6661.08 3056.08 6661.08 c
-3046.96 6661.08 3039.92 6655.92 3030.48 6642.52 c
-h
-3047.12 6649.56 m
-3051.28 6649.24 3053.68 6645.56 3053.36 6640.44 c
-3052.72 6629.88 3047.6 6614.04 3041.84 6603.64 c
-3036.88 6595 3031.76 6589.92 3026.32 6589.92 c
-3022.8 6589.92 3020.08 6592.75 3020.08 6596.28 c
-3020.08 6599 3021.84 6605.56 3026.16 6620.12 c
-3029.68 6631.8 3031.12 6635.8 3033.52 6639.48 c
-3037.52 6645.72 3042.96 6649.88 3047.12 6649.56 c
-h
-3082 6587 m
-f*
-3117.56 6660.92 m
-3101.24 6658.36 3095 6657.4 3086.68 6656.44 c
-3086.68 6652 l
-3093.88 6651.69 3095.32 6651.07 3095.32 6648.12 c
-3095.32 6646.52 3094.04 6640.76 3091.8 6632.44 c
-3075.8 6570.36 l
-3072.76 6559.8 3071.48 6558.84 3063.8 6559 c
-3063.8 6554 l
-3103.64 6554 l
-3103.64 6559 l
-3095.64 6559.14 3093.24 6560.16 3093.24 6563.64 c
-3093.24 6565.88 3094.36 6570.68 3097.4 6581.88 c
-3098.52 6585.72 3098.52 6586.04 3099.16 6588.44 c
-3104.76 6585.56 3106.68 6584.92 3110.04 6584.92 c
-3131.8 6584.92 3154.36 6613.88 3154.36 6641.56 c
-3154.36 6653.4 3147.64 6661.08 3137.08 6661.08 c
-3127.96 6661.08 3120.92 6655.92 3111.48 6642.52 c
-h
-3128.12 6649.56 m
-3132.28 6649.24 3134.68 6645.56 3134.36 6640.44 c
-3133.72 6629.88 3128.6 6614.04 3122.84 6603.64 c
-3117.88 6595 3112.76 6589.92 3107.32 6589.92 c
-3103.8 6589.92 3101.08 6592.75 3101.08 6596.28 c
-3101.08 6599 3102.84 6605.56 3107.16 6620.12 c
-3110.68 6631.8 3112.12 6635.8 3114.52 6639.48 c
-3118.52 6645.72 3123.96 6649.88 3128.12 6649.56 c
-h
-3163 6587 m
-f*
-3196.56 6609.56 m
-3194.32 6606.36 l
-3190.16 6600.12 3186.48 6596.56 3184.08 6596.56 c
-3182.8 6596.56 3182 6597.77 3182 6599.16 c
-3182 6600.6 3182.62 6604.76 3183.12 6607.48 c
-3197.68 6660.92 l
-3189.22 6659 3178.26 6657.4 3166.04 6656.44 c
-3166.04 6652 l
-3167.44 6652 l
-3172.24 6652 3175.48 6650.44 3175.48 6647.48 c
-3175.48 6646.2 3174.71 6643.8 3173.68 6641.08 c
-3164.4 6606.68 l
-3163.12 6602.04 3163 6597.88 3163 6595.64 c
-3163 6589.56 3167.2 6585.56 3173.36 6585.56 c
-3182.96 6585.56 3188.88 6590.36 3200.08 6607.32 c
-h
-3192.88 6696.4 m
-3187.44 6696.4 3183 6691.46 3183 6686.04 c
-3183 6679.8 3187.26 6675.4 3193.04 6675.4 c
-3199.12 6675.4 3204 6679.86 3204 6685.56 c
-3204 6691.48 3199 6696.4 3192.88 6696.4 c
-h
-3206.48 6587 m
-f*
-3281.36 6608.6 m
-3274.96 6598.68 3272.88 6596.56 3270.16 6596.56 c
-3268.88 6596.56 3268 6597.63 3268 6599.16 c
-3268 6600.76 3268.94 6604.12 3271.92 6613.08 c
-3277.68 6630.52 l
-3280.24 6638.04 3282 6645.08 3282 6648.92 c
-3282 6656.76 3277.78 6661.08 3270.16 6661.08 c
-3264.24 6661.08 3258.48 6658.62 3254.16 6654.36 c
-3248.24 6648.76 3245.2 6644.92 3234.48 6629.08 c
-3244.72 6660.76 l
-3234.48 6658.52 3221.68 6656.92 3212.72 6656.6 c
-3212.72 6651.8 l
-3219.44 6651.65 3221.36 6650.92 3221.36 6648.12 c
-3221.36 6646.2 3219.12 6637.72 3214 6619.64 c
-3210.32 6606.68 3209.2 6602.52 3205.04 6587 c
-3224.4 6587 l
-3231.92 6614.68 3237.68 6628.6 3247.6 6641.56 c
-3250.8 6645.88 3255.76 6649.08 3258.64 6649.08 c
-3260.72 6649.08 3263 6647.63 3263 6646.04 c
-3263 6645.56 3262.54 6644.28 3261.84 6642.68 c
-3253.04 6616.12 l
-3250.48 6608.44 3249 6599.32 3249 6595.16 c
-3249 6589.08 3252.84 6585.56 3259.44 6585.56 c
-3269.04 6585.56 3275.6 6591 3284.88 6606.52 c
-h
-3294.96 6587 m
-f*
-3372.48 6656 m
-3354.72 6656 l
-3349.28 6659.58 3344.48 6661.08 3337.12 6661.08 c
-3317.44 6661.08 3301 6648.05 3301 6631.8 c
-3301 6623.64 3305.35 6617.88 3314.4 6614.2 c
-3301.28 6606.84 3299 6604.6 3299 6598.68 c
-3299 6593.56 3301.89 6590.52 3308.96 6588.12 c
-3299.04 6585.72 3295.84 6584.44 3292 6581.4 c
-3289.44 6579.16 3288 6575.32 3288 6571.48 c
-3288 6561.08 3299.56 6555 3317.76 6555 c
-3340.32 6555 3356 6564.72 3356 6578.52 c
-3356 6588.28 3349.6 6593.56 3332.16 6598.52 c
-3323.68 6600.92 l
-3318.56 6602.36 3315 6604.6 3315 6607 c
-3315 6609.56 3317.68 6612.28 3320 6612.28 c
-3320.8 6612.28 3321.92 6612.24 3323.2 6612.12 c
-3324.96 6611.64 3326.24 6611 3328.16 6611 c
-3335.2 6611 3342.4 6613.09 3348.48 6616.92 c
-3357.76 6622.2 3363 6630.36 3363 6639.96 c
-3363 6642.64 3362.59 6644.32 3361.76 6647 c
-3372.48 6647 l
-h
-3314.4 6586.04 m
-3316.32 6585.88 3328.48 6581.72 3332 6580.12 c
-3336.48 6577.88 3339 6575.16 3339 6571 c
-3339 6563.96 3331.8 6560 3319.36 6560 c
-3308.96 6560 3302 6565.1 3302 6572.44 c
-3302 6575.48 3303.32 6578.2 3306.24 6581.24 c
-3308.32 6583.32 3313.12 6586.2 3314.4 6586.04 c
-h
-3336.8 6656.08 m
-3340.96 6656.08 3344 6652.19 3344 6646.52 c
-3344 6641.08 3342.08 6633.4 3339.36 6627.48 c
-3336 6620.12 3331.84 6616 3326.88 6616 c
-3322.56 6616 3320 6619.52 3320 6625.88 c
-3320 6632.28 3322.79 6642.04 3326.24 6648.12 c
-3329.28 6653.4 3332.64 6656.08 3336.8 6656.08 c
-h
-3376 6587 m
-f*
-1 i
-0.564706 g
-2708.15 5769.35 m
-2573.75 5806.55 l
-2669.75 5861.75 l
-2516.15 5871.35 l
-2558.15 5940.95 l
-2410.55 5920.55 l
-2393.75 5992.55 l
-2273.75 5946.95 l
-2198.15 6010.55 l
-2122.55 5946.95 l
-2002.55 5992.55 l
-1984.55 5920.55 l
-1835.75 5940.95 l
-1880.15 5871.35 l
-1726.55 5861.75 l
-1822.55 5806.55 l
-1686.95 5769.35 l
-1822.55 5734.55 l
-1726.55 5678.15 l
-1880.15 5669.75 l
-1835.75 5600.15 l
-1984.55 5619.35 l
-2002.55 5548.55 l
-2122.55 5592.95 l
-2198.15 5529.35 l
-2273.75 5592.95 l
-2393.75 5548.55 l
-2410.55 5619.35 l
-2558.15 5600.15 l
-2516.15 5669.75 l
-2669.75 5678.15 l
-2573.75 5734.55 l
-f*
-1 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-f*
-0 g
-2648.15 5829.35 m
-2513.75 5866.55 l
-2609.75 5921.75 l
-2456.15 5931.35 l
-2498.15 6000.95 l
-2350.55 5980.55 l
-2333.75 6052.55 l
-2213.75 6006.95 l
-2138.15 6070.55 l
-2062.55 6006.95 l
-1942.55 6052.55 l
-1924.55 5980.55 l
-1775.75 6000.95 l
-1820.15 5931.35 l
-1666.55 5921.75 l
-1762.55 5866.55 l
-1626.95 5829.35 l
-1762.55 5794.55 l
-1666.55 5738.15 l
-1820.15 5729.75 l
-1775.75 5660.15 l
-1924.55 5679.35 l
-1942.55 5608.55 l
-2062.55 5652.95 l
-2138.15 5589.35 l
-2213.75 5652.95 l
-2333.75 5608.55 l
-2350.55 5679.35 l
-2498.15 5660.15 l
-2456.15 5729.75 l
-2609.75 5738.15 l
-2513.75 5794.55 l
-2648.15 5829.35 l
-2609.75 5829.35 l
-2487.35 5798.15 l
-2576.15 5746.55 l
-2438.15 5738.15 l
-2478.95 5672.15 l
-2343.35 5691.35 l
-2326.55 5621.75 l
-2211.35 5664.95 l
-2138.15 5602.55 l
-2064.95 5664.95 l
-1949.75 5621.75 l
-1931.75 5691.35 l
-1796.15 5672.15 l
-1836.95 5738.15 l
-1700.15 5746.55 l
-1788.95 5798.15 l
-1666.55 5829.35 l
-1787.75 5861.75 l
-1700.15 5914.55 l
-1836.95 5921.75 l
-1796.15 5988.95 l
-1931.75 5969.75 l
-1949.75 6038.15 l
-2064.95 5996.15 l
-2138.15 6058.55 l
-2211.35 5996.15 l
-2326.55 6038.15 l
-2343.35 5969.75 l
-2478.95 5988.95 l
-2438.15 5921.75 l
-2576.15 5914.55 l
-2487.35 5861.75 l
-2609.75 5829.35 l
-2648.15 5829.35 l
-f*
-0.2 i
-1960.08 5880.76 m
-1940.08 5806.52 l
-1937.52 5797.88 1934.48 5795.64 1924.08 5795 c
-1924.08 5791 l
-1974 5791 l
-1974 5795 l
-1964.72 5795.48 1962.48 5796.76 1962.48 5801.88 c
-1962.48 5803.64 1962.8 5805.4 1963.76 5809.08 c
-1963.92 5809.88 l
-1964.08 5810.68 l
-1983.76 5882.52 l
-1986.16 5890.84 1988.56 5893.08 1996.72 5894.04 c
-1996.72 5898 l
-1962.8 5898 l
-1913.2 5821.24 l
-1904.56 5898 l
-1869.2 5898 l
-1869.2 5894 l
-1879.28 5893.52 1880.72 5892.89 1880.72 5888.44 c
-1880.72 5886.2 1880.08 5883.32 1878.96 5879.16 c
-1861.52 5819.48 l
-1855.12 5798.68 1854 5796.92 1845.36 5795 c
-1845.36 5791 l
-1878.48 5791 l
-1878.48 5795 l
-1868.24 5796.28 1865.68 5798.2 1865.68 5804.76 c
-1865.68 5807.48 1866.48 5811.48 1868.72 5819.48 c
-1884.88 5878.52 l
-1895.6 5789.08 l
-1900.08 5789.08 l
-h
-1992.24 5791 m
-f*
-2061.44 5811.32 m
-2054.88 5802.52 2052.48 5799.76 2049.92 5799.76 c
-2048.64 5799.76 2048 5800.86 2048 5802.52 c
-2048 5806.52 2049.44 5813.08 2053.44 5826.2 c
-2064.8 5863.96 l
-2047.04 5862.84 l
-2044.16 5853.4 l
-2042.72 5861.56 2039.2 5865.08 2032.32 5865.08 c
-2012.64 5865.08 1989 5834.27 1989 5809.24 c
-1989 5797.08 1995.74 5788.92 2005.92 5788.92 c
-2015.68 5788.92 2023.04 5794.68 2032.16 5810.04 c
-2030.24 5803.48 2030 5801.56 2030 5799.32 c
-2030 5793.4 2034.76 5788.76 2040.64 5788.76 c
-2048.16 5788.76 2055.52 5795 2064.8 5808.92 c
-h
-2034.56 5858.2 m
-2038.08 5857.88 2040.56 5855 2040.56 5850.68 c
-2040.56 5841.08 2035.24 5823.32 2028.96 5812.28 c
-2024.64 5804.44 2019.84 5799.92 2015.52 5799.92 c
-2011.36 5799.92 2008 5803.75 2008 5808.92 c
-2008 5817.24 2013.42 5833.24 2020.16 5845.08 c
-2024.96 5853.56 2030.24 5858.52 2034.56 5858.2 c
-h
-2072 5791 m
-f*
-2106.56 5864.92 m
-2090.24 5862.36 2084 5861.4 2075.68 5860.44 c
-2075.68 5856 l
-2082.88 5855.69 2084.32 5855.07 2084.32 5852.12 c
-2084.32 5850.52 2083.04 5844.76 2080.8 5836.44 c
-2064.8 5774.36 l
-2061.76 5763.8 2060.48 5762.84 2052.8 5763 c
-2052.8 5758 l
-2092.64 5758 l
-2092.64 5763 l
-2084.64 5763.14 2082.24 5764.16 2082.24 5767.64 c
-2082.24 5769.88 2083.36 5774.68 2086.4 5785.88 c
-2087.52 5789.72 2087.52 5790.04 2088.16 5792.44 c
-2093.76 5789.56 2095.68 5788.92 2099.04 5788.92 c
-2120.8 5788.92 2143.36 5817.88 2143.36 5845.56 c
-2143.36 5857.4 2136.64 5865.08 2126.08 5865.08 c
-2116.96 5865.08 2109.92 5859.92 2100.48 5846.52 c
-h
-2117.12 5853.56 m
-2121.28 5853.24 2123.68 5849.56 2123.36 5844.44 c
-2122.72 5833.88 2117.6 5818.04 2111.84 5807.64 c
-2106.88 5799 2101.76 5793.92 2096.32 5793.92 c
-2092.8 5793.92 2090.08 5796.75 2090.08 5800.28 c
-2090.08 5803 2091.84 5809.56 2096.16 5824.12 c
-2099.68 5835.8 2101.12 5839.8 2103.52 5843.48 c
-2107.52 5849.72 2112.96 5853.88 2117.12 5853.56 c
-h
-2152 5791 m
-f*
-2187.56 5864.92 m
-2171.24 5862.36 2165 5861.4 2156.68 5860.44 c
-2156.68 5856 l
-2163.88 5855.69 2165.32 5855.07 2165.32 5852.12 c
-2165.32 5850.52 2164.04 5844.76 2161.8 5836.44 c
-2145.8 5774.36 l
-2142.76 5763.8 2141.48 5762.84 2133.8 5763 c
-2133.8 5758 l
-2173.64 5758 l
-2173.64 5763 l
-2165.64 5763.14 2163.24 5764.16 2163.24 5767.64 c
-2163.24 5769.88 2164.36 5774.68 2167.4 5785.88 c
-2168.52 5789.72 2168.52 5790.04 2169.16 5792.44 c
-2174.76 5789.56 2176.68 5788.92 2180.04 5788.92 c
-2201.8 5788.92 2224.36 5817.88 2224.36 5845.56 c
-2224.36 5857.4 2217.64 5865.08 2207.08 5865.08 c
-2197.96 5865.08 2190.92 5859.92 2181.48 5846.52 c
-h
-2198.12 5853.56 m
-2202.28 5853.24 2204.68 5849.56 2204.36 5844.44 c
-2203.72 5833.88 2198.6 5818.04 2192.84 5807.64 c
-2187.88 5799 2182.76 5793.92 2177.32 5793.92 c
-2173.8 5793.92 2171.08 5796.75 2171.08 5800.28 c
-2171.08 5803 2172.84 5809.56 2177.16 5824.12 c
-2180.68 5835.8 2182.12 5839.8 2184.52 5843.48 c
-2188.52 5849.72 2193.96 5853.88 2198.12 5853.56 c
-h
-2233 5791 m
-f*
-2266.56 5813.56 m
-2264.32 5810.36 l
-2260.16 5804.12 2256.48 5800.56 2254.08 5800.56 c
-2252.8 5800.56 2252 5801.77 2252 5803.16 c
-2252 5804.6 2252.62 5808.76 2253.12 5811.48 c
-2267.68 5864.92 l
-2259.22 5863 2248.26 5861.4 2236.04 5860.44 c
-2236.04 5856 l
-2237.44 5856 l
-2242.24 5856 2245.48 5854.44 2245.48 5851.48 c
-2245.48 5850.2 2244.71 5847.8 2243.68 5845.08 c
-2234.4 5810.68 l
-2233.12 5806.04 2233 5801.88 2233 5799.64 c
-2233 5793.56 2237.2 5789.56 2243.36 5789.56 c
-2252.96 5789.56 2258.88 5794.36 2270.08 5811.32 c
-h
-2262.88 5900.4 m
-2257.44 5900.4 2253 5895.46 2253 5890.04 c
-2253 5883.8 2257.26 5879.4 2263.04 5879.4 c
-2269.12 5879.4 2274 5883.86 2274 5889.56 c
-2274 5895.48 2269 5900.4 2262.88 5900.4 c
-h
-2276.48 5791 m
-f*
-2351.36 5812.6 m
-2344.96 5802.68 2342.88 5800.56 2340.16 5800.56 c
-2338.88 5800.56 2338 5801.63 2338 5803.16 c
-2338 5804.76 2338.94 5808.12 2341.92 5817.08 c
-2347.68 5834.52 l
-2350.24 5842.04 2352 5849.08 2352 5852.92 c
-2352 5860.76 2347.78 5865.08 2340.16 5865.08 c
-2334.24 5865.08 2328.48 5862.62 2324.16 5858.36 c
-2318.24 5852.76 2315.2 5848.92 2304.48 5833.08 c
-2314.72 5864.76 l
-2304.48 5862.52 2291.68 5860.92 2282.72 5860.6 c
-2282.72 5855.8 l
-2289.44 5855.65 2291.36 5854.92 2291.36 5852.12 c
-2291.36 5850.2 2289.12 5841.72 2284 5823.64 c
-2280.32 5810.68 2279.2 5806.52 2275.04 5791 c
-2294.4 5791 l
-2301.92 5818.68 2307.68 5832.6 2317.6 5845.56 c
-2320.8 5849.88 2325.76 5853.08 2328.64 5853.08 c
-2330.72 5853.08 2333 5851.63 2333 5850.04 c
-2333 5849.56 2332.54 5848.28 2331.84 5846.68 c
-2323.04 5820.12 l
-2320.48 5812.44 2319 5803.32 2319 5799.16 c
-2319 5793.08 2322.84 5789.56 2329.44 5789.56 c
-2339.04 5789.56 2345.6 5795 2354.88 5810.52 c
-h
-2364.96 5791 m
-f*
-2442.48 5860 m
-2424.72 5860 l
-2419.28 5863.58 2414.48 5865.08 2407.12 5865.08 c
-2387.44 5865.08 2371 5852.05 2371 5835.8 c
-2371 5827.64 2375.35 5821.88 2384.4 5818.2 c
-2371.28 5810.84 2369 5808.6 2369 5802.68 c
-2369 5797.56 2371.89 5794.52 2378.96 5792.12 c
-2369.04 5789.72 2365.84 5788.44 2362 5785.4 c
-2359.44 5783.16 2358 5779.32 2358 5775.48 c
-2358 5765.08 2369.56 5759 2387.76 5759 c
-2410.32 5759 2426 5768.72 2426 5782.52 c
-2426 5792.28 2419.6 5797.56 2402.16 5802.52 c
-2393.68 5804.92 l
-2388.56 5806.36 2385 5808.6 2385 5811 c
-2385 5813.56 2387.68 5816.28 2390 5816.28 c
-2390.8 5816.28 2391.92 5816.24 2393.2 5816.12 c
-2394.96 5815.64 2396.24 5815 2398.16 5815 c
-2405.2 5815 2412.4 5817.09 2418.48 5820.92 c
-2427.76 5826.2 2433 5834.36 2433 5843.96 c
-2433 5846.64 2432.59 5848.32 2431.76 5851 c
-2442.48 5851 l
-h
-2384.4 5790.04 m
-2386.32 5789.88 2398.48 5785.72 2402 5784.12 c
-2406.48 5781.88 2409 5779.16 2409 5775 c
-2409 5767.96 2401.8 5764 2389.36 5764 c
-2378.96 5764 2372 5769.1 2372 5776.44 c
-2372 5779.48 2373.32 5782.2 2376.24 5785.24 c
-2378.32 5787.32 2383.12 5790.2 2384.4 5790.04 c
-h
-2406.8 5860.08 m
-2410.96 5860.08 2414 5856.19 2414 5850.52 c
-2414 5845.08 2412.08 5837.4 2409.36 5831.48 c
-2406 5824.12 2401.84 5820 2396.88 5820 c
-2392.56 5820 2390 5823.52 2390 5829.88 c
-2390 5836.28 2392.79 5846.04 2396.24 5852.12 c
-2399.28 5857.4 2402.64 5860.08 2406.8 5860.08 c
-h
-2446 5791 m
-f*
-1 i
-1 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-f*
-0 g
-4222.55 6369.35 m
-4388.15 6520.55 l
-4306.55 6520.55 l
-4306.55 6674.15 l
-4139.75 6674.15 l
-4139.75 6520.55 l
-4058.15 6520.55 l
-4222.55 6369.35 l
-4222.55 6383.75 l
-4083.35 6510.95 l
-4149.35 6510.95 l
-4149.35 6664.55 l
-4295.75 6664.55 l
-4295.75 6510.95 l
-4361.75 6510.95 l
-4222.55 6383.75 l
-4222.55 6369.35 l
-f*
-0.2 i
-3775.88 6907 m
-3775.88 6902 l
-3788.3 6901.29 3792 6898.45 3792 6889.4 c
-3792 6802.28 l
-3792 6793.1 3789.25 6790.94 3775.88 6789.5 c
-3775.88 6785 l
-3833.84 6785 l
-3864.26 6785 3884 6798.5 3884 6818.84 c
-3884 6827.12 3880.73 6834.32 3874.7 6839.9 c
-3868.4 6845.48 3862.28 6848 3849.68 6850.7 c
-3870.56 6856.82 3878 6864.2 3878 6877.88 c
-3878 6896.42 3861.55 6907 3831.5 6907 c
-h
-3821 6846.74 m
-3825.92 6846.74 l
-3844.46 6846.74 3853 6837.2 3853 6817.22 c
-3853 6799.76 3845.77 6791 3831.5 6791 c
-3823.58 6791 3821 6793.99 3821 6801.74 c
-h
-3821 6892.46 m
-3821 6898.94 3823.39 6902 3830.24 6902 c
-3842.84 6902 3849 6894.03 3849 6876.62 c
-3849 6857.72 3843.08 6852.68 3821 6852.14 c
-h
-3893.06 6785 m
-f*
-3978.14 6796.52 m
-3976.34 6794.72 l
-3975.8 6794.18 3975.26 6794 3974.36 6794 c
-3971.84 6794 3971 6795.44 3971 6798.5 c
-3971 6845.48 l
-3971 6860.78 3957.16 6870.16 3934.94 6870.16 c
-3914.6 6870.16 3900.92 6860.97 3900.92 6847.46 c
-3900.92 6839.9 3905.24 6835.58 3912.62 6835.58 c
-3919.82 6835.58 3924.86 6839.9 3924.86 6846.02 c
-3924.86 6848.54 3923.96 6850.88 3921.62 6853.76 c
-3920 6855.56 3919.46 6856.64 3919.46 6857.72 c
-3919.46 6861.5 3924.32 6864.16 3930.8 6864.16 c
-3941.42 6864.16 3946 6859.37 3946 6848.54 c
-3946 6835.4 l
-3924.89 6828.92 3916.41 6825.68 3909.56 6821.18 c
-3901.46 6815.78 3898 6809.48 3898 6801.56 c
-3898 6790.58 3906.07 6782.48 3917.3 6782.48 c
-3927.74 6782.48 3936.02 6786.08 3945.92 6795.08 c
-3947.9 6785.9 3951.86 6782.48 3960.68 6782.48 c
-3968.42 6782.48 3974 6785.36 3980.84 6792.74 c
-h
-3946 6803 m
-3941.04 6797.42 3937.37 6795.26 3932.96 6795.26 c
-3927.56 6795.26 3924 6800.12 3924 6807.32 c
-3924 6817.76 3931.57 6825.14 3946 6829.1 c
-h
-3983 6785 m
-f*
-4044.22 6843.68 m
-4044.22 6869.8 l
-4040.24 6869.8 l
-4039.16 6867.08 4038.08 6866.2 4035.74 6866.2 c
-4034.66 6866.2 4033.04 6866.55 4030.16 6867.44 c
-4024.4 6869.42 4020.26 6870.16 4016.12 6870.16 c
-3999.74 6870.16 3988 6858.99 3988 6843.86 c
-3988 6831.98 3995.34 6823.7 4013.42 6815.96 c
-4025.84 6810.56 4031 6806.06 4031 6800.3 c
-4031 6793.28 4025.48 6788.48 4017.2 6788.48 c
-4004.6 6788.48 3996.32 6796.62 3992.54 6812.36 c
-3987.5 6812.36 l
-3987.5 6782.66 l
-3992 6782.66 l
-3993.98 6786.44 3995.06 6787.7 3996.68 6787.7 c
-3997.58 6787.7 3999.02 6787.34 4000.82 6786.62 c
-4006.04 6784.46 4015.22 6782.48 4020.26 6782.48 c
-4036.64 6782.48 4048 6793.64 4048 6809.84 c
-4048 6822.62 4041.15 6830.54 4023.14 6837.92 c
-4010.9 6843.14 4006 6847.64 4006 6853.76 c
-4006 6859.7 4010.98 6864.16 4017.74 6864.16 c
-4022.6 6864.16 4027.28 6862.19 4031.24 6858.44 c
-4035.02 6854.84 4037 6851.42 4039.7 6843.68 c
-h
-4053.02 6785 m
-f*
-4124.36 6807.5 m
-4116.98 6798.68 4111.58 6795.48 4103.84 6795.48 c
-4097 6795.48 4091.6 6798.53 4088 6804.62 c
-4084.58 6810.36 4083.14 6816.45 4082.42 6829 c
-4127.78 6829 l
-4126.7 6843.99 4124 6852.3 4118.42 6859.34 c
-4112.66 6866.36 4104.2 6870.16 4094.12 6870.16 c
-4071.62 6870.16 4056.5 6852.33 4056.5 6826.04 c
-4056.5 6799.76 4071.26 6782.48 4093.58 6782.48 c
-4108.16 6782.48 4116.98 6788.06 4128.68 6804.98 c
-h
-4081.52 6836 m
-4082.06 6857.42 4085.3 6864.16 4094.12 6864.16 c
-4099.34 6864.16 4102.58 6861.42 4104.02 6856.1 c
-4104.92 6852.68 4105.28 6847.64 4105.64 6838.46 c
-4105.64 6836 l
-h
-4131.92 6785 m
-f*
-4178 6785 m
-f*
-4281.94 6907 m
-4179.88 6907 l
-4179.88 6902 l
-4192.3 6901.29 4196 6898.63 4196 6889.4 c
-4196 6802.28 l
-4196 6792.92 4193.44 6790.94 4179.88 6789.5 c
-4179.88 6785 l
-4244.68 6785 l
-4244.68 6790 l
-4228.12 6790.69 4225 6792.77 4225 6802.28 c
-4225 6844.22 l
-4243.28 6843.86 4249.91 6837.2 4252.42 6816.32 c
-4256.92 6816.32 l
-4256.92 6877.16 l
-4252.42 6877.16 l
-4249.19 6856.64 4242.92 6850.34 4225 6850.34 c
-4225 6892.1 l
-4225 6898.76 4227.32 6901 4236.4 6901 c
-4253.14 6901 4263.58 6897.8 4269.16 6891.2 c
-4273.12 6886.7 4275.1 6881.84 4277.62 6870.5 c
-4281.94 6870.5 l
-h
-4286.98 6785 m
-f*
-4326.28 6868 m
-4292.22 6868 l
-4292.22 6863.66 l
-4299.96 6862.58 4302 6860.24 4302 6853.04 c
-4302 6800.12 l
-4302 6792.74 4300.19 6790.76 4292.22 6789.32 c
-4292.22 6785 l
-4340.1 6785 l
-4340.1 6789.32 l
-4329.12 6790.04 4327 6792.38 4327 6803.54 c
-4327 6837.56 l
-4327 6846.92 4332.02 6854.66 4337.94 6854.66 c
-4339.38 6854.66 4341 6853.4 4342.98 6850.52 c
-4346.4 6845.66 4349.1 6844.04 4353.78 6844.04 c
-4360.44 6844.04 4365.12 6849.08 4365.12 6855.92 c
-4365.12 6864.2 4359 6870.16 4350.54 6870.16 c
-4341.55 6870.16 4334.73 6865.47 4326.28 6853.22 c
-h
-4366.92 6785 m
-f*
-4453.14 6796.52 m
-4451.34 6794.72 l
-4450.8 6794.18 4450.26 6794 4449.36 6794 c
-4446.84 6794 4446 6795.44 4446 6798.5 c
-4446 6845.48 l
-4446 6860.78 4432.16 6870.16 4409.94 6870.16 c
-4389.6 6870.16 4375.92 6860.97 4375.92 6847.46 c
-4375.92 6839.9 4380.24 6835.58 4387.62 6835.58 c
-4394.82 6835.58 4399.86 6839.9 4399.86 6846.02 c
-4399.86 6848.54 4398.96 6850.88 4396.62 6853.76 c
-4395 6855.56 4394.46 6856.64 4394.46 6857.72 c
-4394.46 6861.5 4399.32 6864.16 4405.8 6864.16 c
-4416.42 6864.16 4421 6859.37 4421 6848.54 c
-4421 6835.4 l
-4399.89 6828.92 4391.41 6825.68 4384.56 6821.18 c
-4376.46 6815.78 4373 6809.48 4373 6801.56 c
-4373 6790.58 4381.07 6782.48 4392.3 6782.48 c
-4402.74 6782.48 4411.02 6786.08 4420.92 6795.08 c
-4422.9 6785.9 4426.86 6782.48 4435.68 6782.48 c
-4443.42 6782.48 4449 6785.36 4455.84 6792.74 c
-h
-4421 6803 m
-4416.04 6797.42 4412.37 6795.26 4407.96 6795.26 c
-4402.56 6795.26 4399 6800.12 4399 6807.32 c
-4399 6817.76 4406.57 6825.14 4421 6829.1 c
-h
-4458 6785 m
-f*
-4495.46 6868 m
-4460.73 6868 l
-4460.73 6863.66 l
-4468.65 6862.58 4471 6860.42 4471 6853.04 c
-4471 6800.12 l
-4471 6792.74 4468.95 6790.76 4460.73 6789.32 c
-4460.73 6785 l
-4503.93 6785 l
-4503.93 6789.32 l
-4497.63 6790.22 4496 6792.74 4496 6799.58 c
-4496 6847.64 l
-4496 6848.54 4498.51 6851.78 4500.51 6853.76 c
-4504.29 6856.64 4507.53 6858.16 4510.77 6858.16 c
-4517.79 6858.16 4521 6854 4521 6843.14 c
-4521 6799.58 l
-4521 6792.2 4518.9 6789.86 4511.85 6789.32 c
-4511.85 6785 l
-4553.97 6785 l
-4553.97 6789.32 l
-4547.67 6790.04 4546 6792.74 4546 6799.58 c
-4546 6847.64 l
-4546 6848.54 4548.43 6851.6 4550.37 6853.58 c
-4554.33 6856.64 4557.57 6858.16 4560.81 6858.16 c
-4567.65 6858.16 4570 6853.82 4570 6843.14 c
-4570 6799.58 l
-4570 6792.02 4568.1 6789.86 4561.53 6789.32 c
-4561.53 6785 l
-4604.37 6785 l
-4604.37 6789 l
-4597.35 6789.37 4595 6791.6 4595 6799.58 c
-4595 6844.76 l
-4595 6860.24 4585.6 6870.16 4571.07 6870.16 c
-4560.81 6870.16 4553.97 6866.01 4544.61 6854.48 c
-4539.21 6865.82 4532.91 6870.16 4521.57 6870.16 c
-4510.2 6870.16 4502.21 6865.29 4495.46 6854.48 c
-h
-4607.94 6785 m
-f*
-4680.36 6807.5 m
-4672.98 6798.68 4667.58 6795.48 4659.84 6795.48 c
-4653 6795.48 4647.6 6798.53 4644 6804.62 c
-4640.58 6810.36 4639.14 6816.45 4638.42 6829 c
-4683.78 6829 l
-4682.7 6843.99 4680 6852.3 4674.42 6859.34 c
-4668.66 6866.36 4660.2 6870.16 4650.12 6870.16 c
-4627.62 6870.16 4612.5 6852.33 4612.5 6826.04 c
-4612.5 6799.76 4627.26 6782.48 4649.58 6782.48 c
-4664.16 6782.48 4672.98 6788.06 4684.68 6804.98 c
-h
-4637.52 6836 m
-4638.06 6857.42 4641.3 6864.16 4650.12 6864.16 c
-4655.34 6864.16 4658.58 6861.42 4660.02 6856.1 c
-4660.92 6852.68 4661.28 6847.64 4661.64 6838.46 c
-4661.64 6836 l
-h
-4687.92 6785 m
-f*
-1 i
-3772.55 6749.75 914.4 15.5999 re
-f
-0.2 i
-2678.88 4570.52 m
-2643.78 4570.52 2619 4545.21 2619 4509.12 c
-2619 4472.04 2642.99 4446.48 2677.98 4446.48 c
-2712.54 4446.48 2737 4472.04 2737 4508.58 c
-2737 4524.96 2731.9 4539.9 2722.98 4550.34 c
-2712.18 4563.12 2695.8 4570.52 2678.88 4570.52 c
-h
-2677.44 4563.52 m
-2685.9 4563.52 2693.46 4561.05 2699.94 4556.1 c
-2710.2 4547.46 2716 4530.18 2716 4509.66 c
-2716 4488.06 2711.25 4472.4 2701.56 4462.5 c
-2695.44 4456.38 2687.16 4453.48 2678.16 4453.48 c
-2669.88 4453.48 2662.14 4456.01 2655.84 4461.06 c
-2645.76 4469.34 2640 4487.34 2640 4508.76 c
-2640 4525.86 2644.54 4542.96 2651.34 4551.6 c
-2658 4559.52 2667.72 4563.52 2677.44 4563.52 c
-h
-2742.96 4449 m
-f*
-2746.42 4561.14 m
-2747.5 4561.14 l
-2749.48 4561.32 2751.64 4561.5 2753.08 4561.5 c
-2758.84 4561.5 2761 4558.98 2761 4550.52 c
-2761 4464.66 l
-2761 4454.94 2758.41 4452.6 2746.78 4451.7 c
-2746.78 4449 l
-2789.26 4449 l
-2789.26 4452 l
-2777.74 4452.7 2776 4454.46 2776 4464.12 c
-2776 4571.58 l
-2775.04 4571.94 l
-2765.68 4568.88 2758.84 4567.08 2746.42 4564.02 c
-h
-2793.04 4449 m
-f*
-2854.92 4447.2 m
-2881.38 4456.56 l
-2881.38 4460 l
-2878.32 4459.26 2878.14 4459.82 2877.24 4459.82 c
-2870.76 4459.82 2869 4461.69 2869 4469.52 c
-2869 4571.58 l
-2868.42 4571.94 l
-2859.78 4568.88 2853.48 4567.08 2841.96 4564.02 c
-2841.96 4561.14 l
-2843.4 4561.32 2844.48 4561.32 2845.92 4561.32 c
-2852.58 4561.32 2854 4559.52 2854 4552.14 c
-2854 4524.06 l
-2847.23 4529.82 2842.42 4531.8 2835.3 4531.8 c
-2814.6 4531.8 2798 4511.46 2798 4485.9 c
-2798 4462.86 2811.26 4447.2 2831.16 4447.2 c
-2841.15 4447.2 2847.93 4450.8 2854 4459.26 c
-2854 4447.74 l
-h
-2854 4467.36 m
-2854 4466.1 2853 4464.12 2851.5 4462.32 c
-2848.26 4458.54 2843.76 4456.2 2838.18 4456.2 c
-2823.06 4456.2 2813 4470.74 2813 4493.1 c
-2813 4513.44 2821.95 4526.8 2835.84 4526.8 c
-2845.56 4526.8 2854 4518.32 2854 4508.76 c
-h
-2883 4449 m
-f*
-2928 4449 m
-f*
-3040.6 4530 m
-3038.98 4570.52 l
-3035.2 4570.52 l
-3034.12 4566.84 3031.24 4564.58 3027.82 4564.58 c
-3026.02 4564.58 3023.5 4565.17 3020.62 4566.36 c
-3011.8 4569.24 3002.98 4570.52 2994.16 4570.52 c
-2980.3 4570.52 2966.08 4565.36 2955.1 4556.46 c
-2941.42 4545.12 2934 4528.02 2934 4507.5 c
-2934 4470.96 2957.96 4446.48 2993.8 4446.48 c
-3014.14 4446.48 3031.96 4454.76 3042.94 4469.34 c
-3039.7 4472.58 l
-3026.38 4459.8 3014.5 4454.48 2999.56 4454.48 c
-2988.76 4454.48 2979.04 4457.69 2971.48 4463.94 c
-2960.86 4472.76 2955 4488.96 2955 4509.84 c
-2955 4542.42 2971.71 4563.52 2997.76 4563.52 c
-3008.2 4563.52 3017.38 4559.73 3024.58 4552.5 c
-3030.34 4546.74 3033.04 4541.7 3036.46 4530 c
-h
-3049.06 4449 m
-f*
-3135.22 4458 m
-3134.32 4458 l
-3126.04 4458 3124 4459.98 3124 4468.26 c
-3124 4530 l
-3095.62 4530 l
-3095.62 4527 l
-3106.78 4526.46 3109 4524.65 3109 4515.6 c
-3109 4473.3 l
-3109 4468.44 3108.08 4465.74 3105.88 4464.12 c
-3100.84 4459.8 3095.26 4457.2 3089.68 4457.2 c
-3082.66 4457.2 3077 4463.52 3077 4471.32 c
-3077 4530 l
-3050.62 4530 l
-3050.62 4527.48 l
-3059.26 4526.94 3062 4524.24 3062 4515.96 c
-3062 4470.6 l
-3062 4456.38 3070.55 4447.2 3083.56 4447.2 c
-3090.22 4447.2 3097.24 4450.08 3102.1 4454.94 c
-3109.9 4462.68 l
-3109.9 4447.74 l
-3110.56 4447.38 l
-3119.56 4450.98 3126.04 4452.96 3135.22 4455.48 c
-h
-3139 4449 m
-f*
-3140.26 4519.2 m
-3142.78 4519.74 3144.4 4519.92 3146.56 4519.92 c
-3151.06 4519.92 3153 4517.04 3153 4509.12 c
-3153 4464.12 l
-3153 4455.12 3151.71 4453.86 3139.9 4451.7 c
-3139.9 4449 l
-3183.1 4449 l
-3183.1 4452 l
-3170.86 4452.53 3168 4455.17 3168 4465.2 c
-3168 4505.7 l
-3168 4511.46 3175.44 4520.46 3180.4 4520.46 c
-3181.48 4520.46 3183.1 4519.56 3185.08 4517.76 c
-3187.96 4515.06 3189.94 4514.16 3192.28 4514.16 c
-3196.6 4514.16 3199.3 4517.22 3199.3 4522.26 c
-3199.3 4528.2 3195.52 4531.8 3189.4 4531.8 c
-3181.91 4531.8 3176.92 4527.84 3168 4514.88 c
-3168 4531.44 l
-3166.9 4531.8 l
-3157.36 4528.02 3150.88 4525.5 3140.26 4522.08 c
-h
-3198.94 4449 m
-f*
-3200.26 4519.2 m
-3202.78 4519.74 3204.4 4519.92 3206.56 4519.92 c
-3211.06 4519.92 3213 4517.04 3213 4509.12 c
-3213 4464.12 l
-3213 4455.12 3211.71 4453.86 3199.9 4451.7 c
-3199.9 4449 l
-3243.1 4449 l
-3243.1 4452 l
-3230.86 4452.53 3228 4455.17 3228 4465.2 c
-3228 4505.7 l
-3228 4511.46 3235.44 4520.46 3240.4 4520.46 c
-3241.48 4520.46 3243.1 4519.56 3245.08 4517.76 c
-3247.96 4515.06 3249.94 4514.16 3252.28 4514.16 c
-3256.6 4514.16 3259.3 4517.22 3259.3 4522.26 c
-3259.3 4528.2 3255.52 4531.8 3249.4 4531.8 c
-3241.91 4531.8 3236.92 4527.84 3228 4514.88 c
-3228 4531.44 l
-3226.9 4531.8 l
-3217.36 4528.02 3210.88 4525.5 3200.26 4522.08 c
-h
-3258.94 4449 m
-f*
-3332.44 4478.52 m
-3323.8 4464.84 3316.06 4459.2 3304.54 4459.2 c
-3294.64 4459.2 3287.08 4464.02 3281.86 4474.02 c
-3278.26 4481.08 3276.82 4487.42 3276.46 4499 c
-3331.9 4499 l
-3330.46 4510.63 3328.66 4515.82 3324.16 4521.54 c
-3318.76 4528.02 3310.48 4531.8 3301.12 4531.8 c
-3278.8 4531.8 3263.5 4513.8 3263.5 4487.52 c
-3263.5 4462.68 3276.46 4447.2 3297.16 4447.2 c
-3314.44 4447.2 3327.76 4457.82 3335.32 4477.26 c
-h
-3276.82 4504 m
-3278.8 4518.66 3284.92 4524.8 3295.9 4524.8 c
-3306.88 4524.8 3311.2 4519.74 3313.54 4504 c
-h
-3338.92 4449 m
-f*
-3340.88 4520.64 m
-3342.14 4521.18 3343.76 4521.36 3345.74 4521.36 c
-3350.78 4521.36 3352 4518.66 3352 4509.84 c
-3352 4465.2 l
-3352 4454.94 3350.09 4452.42 3341.24 4451.7 c
-3341.24 4449 l
-3379.4 4449 l
-3379.4 4451.7 l
-3370.22 4452.42 3367 4454.58 3367 4461.06 c
-3367 4511.64 l
-3375.7 4519.74 3379.95 4521.8 3386.06 4521.8 c
-3394.88 4521.8 3399 4516.25 3399 4504.44 c
-3399 4466.82 l
-3399 4455.48 3396.7 4452.42 3387.86 4451.7 c
-3387.86 4449 l
-3425.3 4449 l
-3425.3 4451.7 l
-3416.48 4452.6 3414 4454.76 3414 4463.58 c
-3414 4504.8 l
-3414 4521.72 3406.2 4531.8 3393.08 4531.8 c
-3384.64 4531.8 3378.94 4528.74 3366.46 4517.22 c
-3366.46 4531.44 l
-3365.72 4531.8 l
-3356.9 4528.56 3350.78 4526.58 3340.88 4523.7 c
-h
-3428 4449 m
-f*
-3474 4530 m
-3456 4530 l
-3456 4550.88 l
-3456 4552.68 3455.56 4553.22 3454.46 4553.22 c
-3453.38 4551.42 3452.12 4549.8 3450.86 4548.18 c
-3444.2 4538.28 3438.08 4531.62 3433.4 4528.92 c
-3431.42 4527.66 3430 4526.58 3430 4525.5 c
-3430 4525.29 3430.26 4525.14 3431.06 4525 c
-3441 4525 l
-3441 4470.06 l
-3441 4454.94 3446.26 4447.2 3456.44 4447.2 c
-3465.44 4447.2 3472.28 4451.52 3478.22 4460.88 c
-3475.88 4462.86 l
-3471.92 4458.18 3469.04 4456.2 3465.08 4456.2 c
-3458.42 4456.2 3456 4460.98 3456 4472.76 c
-3456 4525 l
-3474 4525 l
-h
-3478.04 4449 m
-f*
-3524 4449 m
-f*
-3609.22 4490.58 m
-3609.22 4532.34 l
-3605.08 4532.34 l
-3602.92 4517.94 3599.68 4515 3585.28 4515 c
-3560 4515 l
-3560 4555.2 l
-3560 4560.24 3560.77 4561 3564.94 4561 c
-3589.42 4561 l
-3609.76 4561 3613.72 4558.35 3616.78 4542.42 c
-3621.28 4542.42 l
-3620.74 4568 l
-3525.16 4568 l
-3525.16 4564.74 l
-3538.48 4563.66 3541 4561.32 3541 4548.54 c
-3541 4470.6 l
-3541 4455.66 3539 4453.32 3525.16 4452.42 c
-3525.16 4449 l
-3575.56 4449 l
-3575.56 4452 l
-3561.7 4452.74 3560 4455.32 3560 4468.62 c
-3560 4508 l
-3585.28 4508 l
-3599.86 4508 3602.92 4505.28 3605.08 4490.58 c
-h
-3623.08 4449 m
-f*
-3625.26 4519.2 m
-3627.78 4519.74 3629.4 4519.92 3631.56 4519.92 c
-3636.06 4519.92 3638 4517.04 3638 4509.12 c
-3638 4464.12 l
-3638 4455.12 3636.71 4453.86 3624.9 4451.7 c
-3624.9 4449 l
-3668.1 4449 l
-3668.1 4452 l
-3655.86 4452.53 3653 4455.17 3653 4465.2 c
-3653 4505.7 l
-3653 4511.46 3660.44 4520.46 3665.4 4520.46 c
-3666.48 4520.46 3668.1 4519.56 3670.08 4517.76 c
-3672.96 4515.06 3674.94 4514.16 3677.28 4514.16 c
-3681.6 4514.16 3684.3 4517.22 3684.3 4522.26 c
-3684.3 4528.2 3680.52 4531.8 3674.4 4531.8 c
-3666.91 4531.8 3661.92 4527.84 3653 4514.88 c
-3653 4531.44 l
-3651.9 4531.8 l
-3642.36 4528.02 3635.88 4525.5 3625.26 4522.08 c
-h
-3683.94 4449 m
-f*
-3763.56 4460.88 m
-3760.5 4458.36 3758.34 4457.2 3755.64 4457.2 c
-3751.5 4457.2 3750 4459.78 3750 4467.9 c
-3750 4503 l
-3750 4512.18 3749.16 4517.22 3746.82 4521.36 c
-3743.04 4528.2 3735.3 4531.8 3724.32 4531.8 c
-3715.14 4531.8 3706.5 4529.28 3701.46 4525.14 c
-3696.96 4521.36 3694 4516.14 3694 4511.64 c
-3694 4507.5 3697.46 4503.9 3701.82 4503.9 c
-3706.14 4503.9 3709.92 4507.5 3709.92 4511.46 c
-3709.92 4512.18 3709.74 4513.08 3709.56 4514.34 c
-3709.2 4515.96 3709 4517.4 3709 4518.66 c
-3709 4523.52 3714.77 4527.8 3721.98 4527.8 c
-3730.8 4527.8 3735 4522.47 3735 4512.54 c
-3735 4501.56 l
-3707.76 4490.4 3704.75 4488.96 3697.14 4482.12 c
-3693.18 4478.52 3690.66 4472.4 3690.66 4466.46 c
-3690.66 4455.12 3698.4 4447.2 3709.56 4447.2 c
-3717.48 4447.2 3724.86 4450.98 3735.84 4460.34 c
-3736.74 4450.8 3739.98 4447.2 3747.36 4447.2 c
-3753.48 4447.2 3757.26 4449.36 3763.56 4456.2 c
-h
-3735 4471.14 m
-3735 4465.56 3734.23 4463.94 3730.98 4461.6 c
-3726.66 4459.08 3721.62 4457.2 3717.84 4457.2 c
-3711.54 4457.2 3706.48 4463.51 3706.48 4471.5 c
-3706.48 4472.22 l
-3706.48 4482.84 3713.7 4489.32 3735 4497.24 c
-h
-3763.92 4449 m
-f*
-3766.14 4520.64 m
-3768.48 4521.18 3769.92 4521.36 3771.9 4521.36 c
-3776.58 4521.36 3778 4518.48 3778 4509.84 c
-3778 4464.3 l
-3778 4454.58 3775.52 4451.88 3765.6 4451.7 c
-3765.6 4449 l
-3805.56 4449 l
-3805.56 4452 l
-3796.02 4452.35 3793 4454.27 3793 4461.06 c
-3793 4511.82 l
-3793 4512.18 3794.23 4513.44 3795.66 4514.88 c
-3799.98 4519.2 3808.08 4522.8 3814.74 4522.8 c
-3822.48 4522.8 3827 4516.2 3827 4503.54 c
-3827 4464.48 l
-3827 4454.4 3824.93 4452.42 3814.2 4451.7 c
-3814.2 4449 l
-3854.52 4449 l
-3854.52 4452 l
-3844.26 4452.18 3842 4455.17 3842 4466.1 c
-3842 4511.46 l
-3847.28 4519.2 3852.91 4522.8 3861.18 4522.8 c
-3871.44 4522.8 3875 4517.85 3875 4502.64 c
-3875 4464.66 l
-3875 4454.4 3873.52 4452.96 3862.8 4451.7 c
-3862.8 4449 l
-3902.22 4449 l
-3902.22 4451.7 l
-3897.54 4452.06 l
-3892.14 4452.42 3890 4455.66 3890 4462.68 c
-3890 4499.76 l
-3890 4521 3882.91 4531.8 3868.92 4531.8 c
-3858.48 4531.8 3849.3 4527.12 3839.58 4516.68 c
-3836.34 4526.94 3830.22 4531.8 3820.5 4531.8 c
-3812.31 4531.8 3807.57 4529.46 3792.28 4517.94 c
-3792.28 4531.44 l
-3791.34 4531.8 l
-3782.16 4528.38 3776.04 4526.4 3766.14 4523.7 c
-h
-3903.04 4449 m
-f*
-3976.44 4478.52 m
-3967.8 4464.84 3960.06 4459.2 3948.54 4459.2 c
-3938.64 4459.2 3931.08 4464.02 3925.86 4474.02 c
-3922.26 4481.08 3920.82 4487.42 3920.46 4499 c
-3975.9 4499 l
-3974.46 4510.63 3972.66 4515.82 3968.16 4521.54 c
-3962.76 4528.02 3954.48 4531.8 3945.12 4531.8 c
-3922.8 4531.8 3907.5 4513.8 3907.5 4487.52 c
-3907.5 4462.68 3920.46 4447.2 3941.16 4447.2 c
-3958.44 4447.2 3971.76 4457.82 3979.32 4477.26 c
-h
-3920.82 4504 m
-3922.8 4518.66 3928.92 4524.8 3939.9 4524.8 c
-3950.88 4524.8 3955.2 4519.74 3957.54 4504 c
-h
-3982.92 4449 m
-f*
-1 i
-1 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-f*
-0 g
-3311.75 4641.35 m
-3478.55 4792.55 l
-3395.75 4792.55 l
-3395.75 4946.15 l
-3230.15 4946.15 l
-3230.15 4792.55 l
-3148.55 4792.55 l
-3311.75 4641.35 l
-3311.75 4654.55 l
-3173.75 4781.75 l
-3239.75 4781.75 l
-3239.75 4936.55 l
-3386.15 4936.55 l
-3386.15 4781.75 l
-3452.15 4781.75 l
-3311.75 4654.55 l
-3311.75 4641.35 l
-f*
-0.564706 g
-2322.95 3735.35 m
-2322.95 3845.75 2231.75 3936.95 2120.15 3936.95 c
-1623.35 3936.95 l
-1511.75 3936.95 1420.55 3845.75 1420.55 3735.35 c
-1420.55 3597.35 l
-1420.55 3486.95 1511.75 3395.75 1623.35 3395.75 c
-2120.15 3395.75 l
-2231.75 3395.75 2322.95 3486.95 2322.95 3597.35 c
-f*
-1 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-f*
-0 g
-2258.15 3792.95 m
-2258.15 3902.15 2169.35 3990.95 2057.75 3990.95 c
-1566.95 3990.95 l
-1456.55 3990.95 1366.55 3902.15 1366.55 3792.95 c
-1366.55 3658.55 l
-1366.55 3549.35 1455.35 3460.55 1566.95 3460.55 c
-2057.75 3460.55 l
-2169.35 3460.55 2258.15 3549.35 2258.15 3658.55 c
-h
-S
-0.201248 i
-1599.33 3832 m
-1485.22 3832 l
-1485.22 3827 l
-1499.11 3826.2 1503 3823.18 1503 3812.72 c
-1503 3715.32 l
-1503 3704.85 1500.17 3702.64 1485.22 3701.03 c
-1485.22 3696 l
-1557.67 3696 l
-1557.67 3701 l
-1539.15 3701.81 1536 3704.23 1536 3715.32 c
-1536 3762.21 l
-1556.22 3761.81 1563.55 3754.36 1566.32 3731.02 c
-1571.35 3731.02 l
-1571.35 3799.04 l
-1566.32 3799.04 l
-1562.76 3776.1 1555.82 3769.05 1536 3769.05 c
-1536 3815.74 l
-1536 3823.19 1538.52 3825 1548.41 3825 c
-1567.13 3825 1578.8 3821.64 1585.04 3814.74 c
-1589.47 3809.71 1591.68 3804.27 1594.5 3791.59 c
-1599.33 3791.59 l
-h
-1604.96 3696 m
-f*
-1649.19 3789 m
-1610.84 3789 l
-1610.84 3783.95 l
-1619.49 3782.74 1622 3780.12 1622 3772.07 c
-1622 3712.9 l
-1622 3704.65 1619.93 3702.44 1610.84 3700.83 c
-1610.84 3696 l
-1664.37 3696 l
-1664.37 3700.83 l
-1652.09 3701.63 1650 3704.25 1650 3716.73 c
-1650 3754.76 l
-1650 3765.23 1655.49 3773.88 1661.95 3773.88 c
-1663.56 3773.88 1665.37 3772.47 1667.59 3769.25 c
-1671.41 3763.82 1674.43 3762.01 1679.66 3762.01 c
-1687.11 3762.01 1692.34 3767.64 1692.34 3775.29 c
-1692.34 3784.55 1685.5 3791.41 1676.04 3791.41 c
-1666.1 3791.41 1658.54 3786.12 1649.19 3772.27 c
-h
-1694.35 3696 m
-f*
-1789.19 3708.88 m
-1787.18 3706.87 l
-1786.57 3706.26 1785.97 3706.06 1784.96 3706.06 c
-1782.15 3706.06 1781 3707.67 1781 3711.09 c
-1781 3763.62 l
-1781 3780.73 1765.6 3791.42 1740.89 3791.42 c
-1718.15 3791.42 1702.85 3781.06 1702.85 3765.83 c
-1702.85 3757.38 1707.69 3752.55 1715.94 3752.55 c
-1723.99 3752.55 1729.62 3757.38 1729.62 3764.22 c
-1729.62 3767.04 1728.61 3769.66 1726 3772.88 c
-1724.19 3774.89 1723.58 3776.1 1723.58 3777.3 c
-1723.58 3781.53 1729.02 3784.42 1736.26 3784.42 c
-1748.14 3784.42 1753.86 3779.08 1753.86 3767.04 c
-1753.86 3752.35 l
-1729.91 3745.1 1720.29 3741.48 1712.51 3736.45 c
-1703.46 3730.41 1699 3723.37 1699 3714.52 c
-1699 3702.24 1708.27 3693.18 1721.17 3693.18 c
-1732.84 3693.18 1742.1 3697.21 1753.17 3707.27 c
-1755.38 3697.01 1759.81 3693.18 1769.67 3693.18 c
-1778.32 3693.18 1784.56 3696.4 1792.21 3704.65 c
-h
-1753 3716.13 m
-1747.55 3709.89 1743.52 3707.47 1738.68 3707.47 c
-1732.64 3707.47 1728 3712.91 1728 3720.96 c
-1728 3732.63 1736.61 3740.88 1753 3745.31 c
-h
-1794.62 3696 m
-f*
-1836.4 3789 m
-1797.7 3789 l
-1797.7 3783.95 l
-1806.55 3782.74 1809 3780.32 1809 3772.07 c
-1809 3712.9 l
-1809 3704.65 1806.74 3702.44 1797.7 3700.83 c
-1797.7 3696 l
-1846 3696 l
-1846 3700.83 l
-1838.95 3701.84 1837 3704.65 1837 3712.3 c
-1837 3766.03 l
-1837 3767.04 1839.87 3770.66 1842.18 3772.88 c
-1846.4 3776.1 1850.02 3778.42 1853.65 3778.42 c
-1861.5 3778.42 1865 3773.59 1865 3761 c
-1865 3712.3 l
-1865 3704.05 1862.68 3701.43 1854.85 3700.83 c
-1854.85 3696 l
-1901.95 3696 l
-1901.95 3700.83 l
-1894.9 3701.64 1893 3704.65 1893 3712.3 c
-1893 3766.03 l
-1893 3767.04 1895.73 3770.46 1897.92 3772.68 c
-1902.35 3776.1 1905.97 3778.42 1909.59 3778.42 c
-1917.24 3778.42 1920 3773.38 1920 3761 c
-1920 3712.3 l
-1920 3703.85 1917.85 3701.43 1910.4 3700.83 c
-1910.4 3696 l
-1958.3 3696 l
-1958.3 3701 l
-1950.45 3701.4 1948 3703.78 1948 3712.3 c
-1948 3762.81 l
-1948 3780.12 1937.43 3791.42 1921.07 3791.42 c
-1909.59 3791.42 1901.95 3786.73 1891.48 3773.68 c
-1885.44 3786.36 1878.4 3791.42 1865.72 3791.42 c
-1852.95 3791.42 1843.98 3785.91 1836.4 3773.68 c
-h
-1961.64 3696 m
-f*
-2039.9 3721.16 m
-2031.65 3711.29 2025.61 3707.18 2016.96 3707.18 c
-2009.31 3707.18 2003.27 3710.77 1999.25 3717.94 c
-1995.43 3724.54 1993.82 3731.56 1993.01 3746 c
-2043.73 3746 l
-2042.52 3762.36 2039.5 3771.43 2033.26 3779.12 c
-2026.82 3786.96 2017.36 3791.42 2006.09 3791.42 c
-1980.94 3791.42 1964.03 3771.4 1964.03 3741.88 c
-1964.03 3712.5 1980.53 3693.18 2005.49 3693.18 c
-2021.79 3693.18 2031.65 3699.42 2044.73 3718.34 c
-h
-1992 3753 m
-1992.61 3776.96 1996.23 3784.42 2006.09 3784.42 c
-2011.93 3784.42 2015.55 3781.38 2017.16 3775.49 c
-2018.17 3771.67 2018.57 3766.03 2018.97 3755.77 c
-2018.97 3753 l
-h
-2048.35 3696 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2092 -3696]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-4782.95 2934.95 m
-4782.95 3046.55 4691.75 3137.75 4580.15 3137.75 c
-4083.35 3137.75 l
-3971.75 3137.75 3880.55 3046.55 3880.55 2934.95 c
-3880.55 2798.15 l
-3880.55 2686.55 3971.75 2595.35 4083.35 2595.35 c
-4580.15 2595.35 l
-4691.75 2595.35 4782.95 2686.55 4782.95 2798.15 c
-f*
-1 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-f*
-0 g
-4718.15 2992.55 m
-4718.15 3102.95 4629.35 3191.75 4517.75 3191.75 c
-4026.95 3191.75 l
-3916.55 3191.75 3826.55 3102.95 3826.55 2992.55 c
-3826.55 2859.35 l
-3826.55 2748.95 3915.35 2660.15 4026.95 2660.15 c
-4517.75 2660.15 l
-4629.35 2660.15 4718.15 2748.95 4718.15 2859.35 c
-h
-S
-0.201248 i
-4059.33 3033 m
-3945.22 3033 l
-3945.22 3028 l
-3959.11 3027.2 3963 3024.18 3963 3013.72 c
-3963 2916.32 l
-3963 2905.85 3960.17 2903.64 3945.22 2902.03 c
-3945.22 2897 l
-4017.67 2897 l
-4017.67 2902 l
-3999.15 2902.81 3996 2905.23 3996 2916.32 c
-3996 2963.21 l
-4016.22 2962.81 4023.55 2955.36 4026.32 2932.02 c
-4031.35 2932.02 l
-4031.35 3000.04 l
-4026.32 3000.04 l
-4022.76 2977.1 4015.82 2970.05 3996 2970.05 c
-3996 3016.74 l
-3996 3024.19 3998.52 3026 4008.41 3026 c
-4027.13 3026 4038.8 3022.64 4045.04 3015.74 c
-4049.47 3010.71 4051.68 3005.27 4054.5 2992.59 c
-4059.33 2992.59 l
-h
-4064.96 2897 m
-f*
-4109.19 2990 m
-4070.84 2990 l
-4070.84 2984.95 l
-4079.49 2983.74 4082 2981.12 4082 2973.07 c
-4082 2913.9 l
-4082 2905.65 4079.93 2903.44 4070.84 2901.83 c
-4070.84 2897 l
-4124.37 2897 l
-4124.37 2901.83 l
-4112.09 2902.63 4110 2905.25 4110 2917.73 c
-4110 2955.76 l
-4110 2966.23 4115.49 2974.88 4121.95 2974.88 c
-4123.56 2974.88 4125.37 2973.47 4127.59 2970.25 c
-4131.41 2964.82 4134.43 2963.01 4139.66 2963.01 c
-4147.11 2963.01 4152.34 2968.64 4152.34 2976.29 c
-4152.34 2985.55 4145.5 2992.41 4136.04 2992.41 c
-4126.1 2992.41 4118.54 2987.12 4109.19 2973.27 c
-h
-4154.35 2897 m
-f*
-4249.19 2909.88 m
-4247.18 2907.87 l
-4246.57 2907.26 4245.97 2907.06 4244.96 2907.06 c
-4242.15 2907.06 4241 2908.67 4241 2912.09 c
-4241 2964.62 l
-4241 2981.73 4225.6 2992.42 4200.89 2992.42 c
-4178.15 2992.42 4162.85 2982.06 4162.85 2966.83 c
-4162.85 2958.38 4167.69 2953.55 4175.94 2953.55 c
-4183.99 2953.55 4189.62 2958.38 4189.62 2965.22 c
-4189.62 2968.04 4188.61 2970.66 4186 2973.88 c
-4184.19 2975.89 4183.58 2977.1 4183.58 2978.3 c
-4183.58 2982.53 4189.02 2985.42 4196.26 2985.42 c
-4208.14 2985.42 4213.86 2980.08 4213.86 2968.04 c
-4213.86 2953.35 l
-4189.91 2946.1 4180.29 2942.48 4172.51 2937.45 c
-4163.46 2931.41 4159 2924.37 4159 2915.52 c
-4159 2903.24 4168.27 2894.18 4181.17 2894.18 c
-4192.84 2894.18 4202.1 2898.21 4213.17 2908.27 c
-4215.38 2898.01 4219.81 2894.18 4229.67 2894.18 c
-4238.32 2894.18 4244.56 2897.4 4252.21 2905.65 c
-h
-4213 2917.13 m
-4207.55 2910.89 4203.52 2908.47 4198.68 2908.47 c
-4192.64 2908.47 4188 2913.91 4188 2921.96 c
-4188 2933.63 4196.61 2941.88 4213 2946.31 c
-h
-4254.62 2897 m
-f*
-4296.4 2990 m
-4257.7 2990 l
-4257.7 2984.95 l
-4266.55 2983.74 4269 2981.32 4269 2973.07 c
-4269 2913.9 l
-4269 2905.65 4266.74 2903.44 4257.7 2901.83 c
-4257.7 2897 l
-4306 2897 l
-4306 2901.83 l
-4298.95 2902.84 4297 2905.65 4297 2913.3 c
-4297 2967.03 l
-4297 2968.04 4299.87 2971.66 4302.18 2973.88 c
-4306.4 2977.1 4310.02 2979.42 4313.65 2979.42 c
-4321.5 2979.42 4325 2974.59 4325 2962 c
-4325 2913.3 l
-4325 2905.05 4322.68 2902.43 4314.85 2901.83 c
-4314.85 2897 l
-4361.95 2897 l
-4361.95 2901.83 l
-4354.9 2902.64 4353 2905.65 4353 2913.3 c
-4353 2967.03 l
-4353 2968.04 4355.73 2971.46 4357.92 2973.68 c
-4362.35 2977.1 4365.97 2979.42 4369.59 2979.42 c
-4377.24 2979.42 4380 2974.38 4380 2962 c
-4380 2913.3 l
-4380 2904.85 4377.85 2902.43 4370.4 2901.83 c
-4370.4 2897 l
-4418.3 2897 l
-4418.3 2902 l
-4410.45 2902.4 4408 2904.78 4408 2913.3 c
-4408 2963.81 l
-4408 2981.12 4397.43 2992.42 4381.07 2992.42 c
-4369.59 2992.42 4361.95 2987.73 4351.48 2974.68 c
-4345.44 2987.36 4338.4 2992.42 4325.72 2992.42 c
-4312.95 2992.42 4303.98 2986.91 4296.4 2974.68 c
-h
-4421.64 2897 m
-f*
-4499.9 2922.16 m
-4491.65 2912.29 4485.61 2908.18 4476.96 2908.18 c
-4469.31 2908.18 4463.27 2911.77 4459.25 2918.94 c
-4455.43 2925.54 4453.82 2932.56 4453.01 2947 c
-4503.73 2947 l
-4502.52 2963.36 4499.5 2972.43 4493.26 2980.12 c
-4486.82 2987.96 4477.36 2992.42 4466.09 2992.42 c
-4440.94 2992.42 4424.03 2972.4 4424.03 2942.88 c
-4424.03 2913.5 4440.53 2894.18 4465.49 2894.18 c
-4481.79 2894.18 4491.65 2900.42 4504.73 2919.34 c
-h
-4452 2954 m
-4452.61 2977.96 4456.23 2985.42 4466.09 2985.42 c
-4471.93 2985.42 4475.55 2982.38 4477.16 2976.49 c
-4478.17 2972.67 4478.57 2967.03 4478.97 2956.77 c
-4478.97 2954 l
-h
-4508.35 2897 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4544 -2895]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3864.95 2228.15 m
-3864.95 2338.55 3773.75 2429.75 3662.15 2429.75 c
-3166.55 2429.75 l
-3054.95 2429.75 2963.75 2338.55 2963.75 2228.15 c
-2963.75 2090.15 l
-2963.75 1979.75 3054.95 1888.55 3166.55 1888.55 c
-3662.15 1888.55 l
-3773.75 1888.55 3864.95 1979.75 3864.95 2090.15 c
-f*
-1 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-f*
-16 w
-0 g
-3795.35 2284.55 m
-3795.35 2391.35 3706.55 2478.95 3597.35 2478.95 c
-3112.55 2478.95 l
-3003.35 2478.95 2914.55 2391.35 2914.55 2284.55 c
-2914.55 2152.55 l
-2914.55 2045.75 3003.35 1958.15 3112.55 1958.15 c
-3597.35 1958.15 l
-3706.55 1958.15 3795.35 2045.75 3795.35 2152.55 c
-h
-S
-0.201248 i
-3142.33 2325 m
-3028.22 2325 l
-3028.22 2320 l
-3042.11 2319.2 3046 2316.18 3046 2305.72 c
-3046 2208.32 l
-3046 2197.85 3043.17 2195.64 3028.22 2194.03 c
-3028.22 2189 l
-3100.67 2189 l
-3100.67 2194 l
-3082.15 2194.81 3079 2197.23 3079 2208.32 c
-3079 2255.21 l
-3099.22 2254.81 3106.55 2247.36 3109.32 2224.02 c
-3114.35 2224.02 l
-3114.35 2292.04 l
-3109.32 2292.04 l
-3105.76 2269.1 3098.82 2262.05 3079 2262.05 c
-3079 2308.74 l
-3079 2316.19 3081.52 2318 3091.41 2318 c
-3110.13 2318 3121.8 2314.64 3128.04 2307.74 c
-3132.47 2302.71 3134.68 2297.27 3137.5 2284.59 c
-3142.33 2284.59 l
-h
-3147.96 2189 m
-f*
-3191.19 2282 m
-3152.84 2282 l
-3152.84 2276.95 l
-3161.49 2275.74 3164 2273.12 3164 2265.07 c
-3164 2205.9 l
-3164 2197.65 3161.93 2195.44 3152.84 2193.83 c
-3152.84 2189 l
-3206.37 2189 l
-3206.37 2193.83 l
-3194.09 2194.63 3192 2197.25 3192 2209.73 c
-3192 2247.76 l
-3192 2258.23 3197.49 2266.88 3203.95 2266.88 c
-3205.56 2266.88 3207.37 2265.47 3209.59 2262.25 c
-3213.41 2256.82 3216.43 2255.01 3221.66 2255.01 c
-3229.11 2255.01 3234.34 2260.64 3234.34 2268.29 c
-3234.34 2277.55 3227.5 2284.41 3218.04 2284.41 c
-3208.1 2284.41 3200.54 2279.12 3191.19 2265.27 c
-h
-3236.35 2189 m
-f*
-3331.19 2201.88 m
-3329.18 2199.87 l
-3328.57 2199.26 3327.97 2199.06 3326.96 2199.06 c
-3324.15 2199.06 3323 2200.67 3323 2204.09 c
-3323 2256.62 l
-3323 2273.73 3307.6 2284.42 3282.89 2284.42 c
-3260.15 2284.42 3244.85 2274.06 3244.85 2258.83 c
-3244.85 2250.38 3249.69 2245.55 3257.94 2245.55 c
-3265.99 2245.55 3271.62 2250.38 3271.62 2257.22 c
-3271.62 2260.04 3270.61 2262.66 3268 2265.88 c
-3266.19 2267.89 3265.58 2269.1 3265.58 2270.3 c
-3265.58 2274.53 3271.02 2277.42 3278.26 2277.42 c
-3290.14 2277.42 3295.86 2272.08 3295.86 2260.04 c
-3295.86 2245.35 l
-3271.91 2238.1 3262.29 2234.48 3254.51 2229.45 c
-3245.46 2223.41 3241 2216.37 3241 2207.52 c
-3241 2195.24 3250.27 2186.18 3263.17 2186.18 c
-3274.84 2186.18 3284.1 2190.21 3295.17 2200.27 c
-3297.38 2190.01 3301.81 2186.18 3311.67 2186.18 c
-3320.32 2186.18 3326.56 2189.4 3334.21 2197.65 c
-h
-3295 2209.13 m
-3289.55 2202.89 3285.52 2200.47 3280.68 2200.47 c
-3274.64 2200.47 3270 2205.91 3270 2213.96 c
-3270 2225.63 3278.61 2233.88 3295 2238.31 c
-h
-3336.62 2189 m
-f*
-3378.4 2282 m
-3339.7 2282 l
-3339.7 2276.95 l
-3348.55 2275.74 3351 2273.32 3351 2265.07 c
-3351 2205.9 l
-3351 2197.65 3348.74 2195.44 3339.7 2193.83 c
-3339.7 2189 l
-3388 2189 l
-3388 2193.83 l
-3380.95 2194.84 3379 2197.65 3379 2205.3 c
-3379 2259.03 l
-3379 2260.04 3381.87 2263.66 3384.18 2265.88 c
-3388.4 2269.1 3392.02 2271.42 3395.65 2271.42 c
-3403.5 2271.42 3407 2266.59 3407 2254 c
-3407 2205.3 l
-3407 2197.05 3404.68 2194.43 3396.85 2193.83 c
-3396.85 2189 l
-3443.95 2189 l
-3443.95 2193.83 l
-3436.9 2194.64 3435 2197.65 3435 2205.3 c
-3435 2259.03 l
-3435 2260.04 3437.73 2263.46 3439.92 2265.68 c
-3444.35 2269.1 3447.97 2271.42 3451.59 2271.42 c
-3459.24 2271.42 3462 2266.38 3462 2254 c
-3462 2205.3 l
-3462 2196.85 3459.85 2194.43 3452.4 2193.83 c
-3452.4 2189 l
-3500.3 2189 l
-3500.3 2194 l
-3492.45 2194.4 3490 2196.78 3490 2205.3 c
-3490 2255.81 l
-3490 2273.12 3479.43 2284.42 3463.07 2284.42 c
-3451.59 2284.42 3443.95 2279.73 3433.48 2266.68 c
-3427.44 2279.36 3420.4 2284.42 3407.72 2284.42 c
-3394.95 2284.42 3385.98 2278.91 3378.4 2266.68 c
-h
-3503.64 2189 m
-f*
-3583.9 2214.16 m
-3575.65 2204.29 3569.61 2200.18 3560.96 2200.18 c
-3553.31 2200.18 3547.27 2203.77 3543.25 2210.94 c
-3539.43 2217.54 3537.82 2224.56 3537.01 2239 c
-3587.73 2239 l
-3586.52 2255.36 3583.5 2264.43 3577.26 2272.12 c
-3570.82 2279.96 3561.36 2284.42 3550.09 2284.42 c
-3524.94 2284.42 3508.03 2264.4 3508.03 2234.88 c
-3508.03 2205.5 3524.53 2186.18 3549.49 2186.18 c
-3565.79 2186.18 3575.65 2192.42 3588.73 2211.34 c
-h
-3536 2246 m
-3536.61 2269.96 3540.23 2277.42 3550.09 2277.42 c
-3555.93 2277.42 3559.55 2274.38 3561.16 2268.49 c
-3562.17 2264.67 3562.57 2259.03 3562.97 2248.77 c
-3562.97 2246 l
-h
-3592.35 2189 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3626 -2189]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1811.75 3430.55 m
-1811.75 3438.95 1811.75 3438.95 1811.75 3430.55 c
-1811.75 3282.95 1851.35 3141.35 1923.35 3040.55 c
-S
-1864.55 3046.55 m
-1913.75 3062.15 l
-1938.95 3107.75 l
-2000.15 2960.15 l
-f*
-2304.95 2464.55 m
-2394.95 2346.95 2579.75 2262.95 2800.55 2241.35 c
-S
-2759.75 2198.15 m
-2781.35 2244.95 l
-2765.75 2292.95 l
-2914.55 2236.55 l
-f*
-2891.75 3844.55 m
-2789.75 3944.15 2644.55 4001.75 2490.95 4001.75 c
-2386.55 4001.75 2284.55 3975.35 2196.95 3924.95 c
-S
-2826.95 3838.55 m
-2874.95 3854.15 l
-2898.95 3899.75 l
-2962.55 3753.35 l
-f*
-3246.95 3268.55 m
-3335.75 3094.55 3500.15 2969.75 3695.75 2930.15 c
-S
-3651.35 2890.55 m
-3676.55 2936.15 l
-3664.55 2986.55 l
-3808.55 2915.75 l
-f*
-0.564706 g
-3698.15 3444.95 m
-3563.75 3480.95 l
-3659.75 3537.35 l
-3506.15 3545.75 l
-3548.15 3616.55 l
-3400.55 3596.15 l
-3383.75 3666.95 l
-3263.75 3622.55 l
-3188.15 3686.15 l
-3112.55 3622.55 l
-2992.55 3666.95 l
-2974.55 3596.15 l
-2825.75 3616.55 l
-2870.15 3545.75 l
-2716.55 3537.35 l
-2812.55 3480.95 l
-2676.95 3444.95 l
-2812.55 3410.15 l
-2716.55 3353.75 l
-2870.15 3344.15 l
-2825.75 3274.55 l
-2974.55 3294.95 l
-2992.55 3222.95 l
-3112.55 3268.55 l
-3188.15 3204.95 l
-3263.75 3268.55 l
-3383.75 3222.95 l
-3400.55 3294.95 l
-3548.15 3274.55 l
-3506.15 3344.15 l
-3659.75 3353.75 l
-3563.75 3410.15 l
-f*
-1 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-f*
-0 g
-3638.15 3504.95 m
-3503.75 3540.95 l
-3599.75 3597.35 l
-3446.15 3605.75 l
-3488.15 3676.55 l
-3340.55 3656.15 l
-3323.75 3726.95 l
-3203.75 3682.55 l
-3128.15 3746.15 l
-3052.55 3682.55 l
-2932.55 3726.95 l
-2914.55 3656.15 l
-2765.75 3676.55 l
-2810.15 3605.75 l
-2656.55 3597.35 l
-2752.55 3540.95 l
-2616.95 3504.95 l
-2752.55 3470.15 l
-2656.55 3413.75 l
-2810.15 3404.15 l
-2765.75 3334.55 l
-2914.55 3354.95 l
-2932.55 3282.95 l
-3052.55 3328.55 l
-3128.15 3264.95 l
-3203.75 3328.55 l
-3323.75 3282.95 l
-3340.55 3354.95 l
-3488.15 3334.55 l
-3446.15 3404.15 l
-3599.75 3413.75 l
-3503.75 3470.15 l
-3638.15 3504.95 l
-3599.75 3504.95 l
-3477.35 3473.75 l
-3566.15 3420.95 l
-3428.15 3413.75 l
-3468.95 3347.75 l
-3333.35 3365.75 l
-3316.55 3297.35 l
-3201.35 3339.35 l
-3128.15 3276.95 l
-3054.95 3339.35 l
-2939.75 3297.35 l
-2921.75 3365.75 l
-2786.15 3347.75 l
-2826.95 3413.75 l
-2690.15 3420.95 l
-2778.95 3473.75 l
-2656.55 3504.95 l
-2777.75 3537.35 l
-2690.15 3590.15 l
-2826.95 3597.35 l
-2786.15 3663.35 l
-2921.75 3644.15 l
-2939.75 3713.75 l
-3054.95 3670.55 l
-3128.15 3732.95 l
-3201.35 3670.55 l
-3316.55 3713.75 l
-3333.35 3644.15 l
-3468.95 3663.35 l
-3428.15 3597.35 l
-3566.15 3590.15 l
-3477.35 3537.35 l
-3599.75 3504.95 l
-3638.15 3504.95 l
-f*
-0.2 i
-2950.08 3556.76 m
-2930.08 3482.52 l
-2927.52 3473.88 2924.48 3471.64 2914.08 3471 c
-2914.08 3467 l
-2964 3467 l
-2964 3471 l
-2954.72 3471.48 2952.48 3472.76 2952.48 3477.88 c
-2952.48 3479.64 2952.8 3481.4 2953.76 3485.08 c
-2953.92 3485.88 l
-2954.08 3486.68 l
-2973.76 3558.52 l
-2976.16 3566.84 2978.56 3569.08 2986.72 3570.04 c
-2986.72 3574 l
-2952.8 3574 l
-2903.2 3497.24 l
-2894.56 3574 l
-2859.2 3574 l
-2859.2 3570 l
-2869.28 3569.52 2870.72 3568.89 2870.72 3564.44 c
-2870.72 3562.2 2870.08 3559.32 2868.96 3555.16 c
-2851.52 3495.48 l
-2845.12 3474.68 2844 3472.92 2835.36 3471 c
-2835.36 3467 l
-2868.48 3467 l
-2868.48 3471 l
-2858.24 3472.28 2855.68 3474.2 2855.68 3480.76 c
-2855.68 3483.48 2856.48 3487.48 2858.72 3495.48 c
-2874.88 3554.52 l
-2885.6 3465.08 l
-2890.08 3465.08 l
-h
-2982.24 3467 m
-f*
-3051.44 3487.32 m
-3044.88 3478.52 3042.48 3475.76 3039.92 3475.76 c
-3038.64 3475.76 3038 3476.86 3038 3478.52 c
-3038 3482.52 3039.44 3489.08 3043.44 3502.2 c
-3054.8 3539.96 l
-3037.04 3538.84 l
-3034.16 3529.4 l
-3032.72 3537.56 3029.2 3541.08 3022.32 3541.08 c
-3002.64 3541.08 2979 3510.27 2979 3485.24 c
-2979 3473.08 2985.74 3464.92 2995.92 3464.92 c
-3005.68 3464.92 3013.04 3470.68 3022.16 3486.04 c
-3020.24 3479.48 3020 3477.56 3020 3475.32 c
-3020 3469.4 3024.76 3464.76 3030.64 3464.76 c
-3038.16 3464.76 3045.52 3471 3054.8 3484.92 c
-h
-3024.56 3534.2 m
-3028.08 3533.88 3030.56 3531 3030.56 3526.68 c
-3030.56 3517.08 3025.24 3499.32 3018.96 3488.28 c
-3014.64 3480.44 3009.84 3475.92 3005.52 3475.92 c
-3001.36 3475.92 2998 3479.75 2998 3484.92 c
-2998 3493.24 3003.42 3509.24 3010.16 3521.08 c
-3014.96 3529.56 3020.24 3534.52 3024.56 3534.2 c
-h
-3062 3467 m
-f*
-3096.56 3540.92 m
-3080.24 3538.36 3074 3537.4 3065.68 3536.44 c
-3065.68 3532 l
-3072.88 3531.69 3074.32 3531.07 3074.32 3528.12 c
-3074.32 3526.52 3073.04 3520.76 3070.8 3512.44 c
-3054.8 3450.36 l
-3051.76 3439.8 3050.48 3438.84 3042.8 3439 c
-3042.8 3434 l
-3082.64 3434 l
-3082.64 3439 l
-3074.64 3439.14 3072.24 3440.16 3072.24 3443.64 c
-3072.24 3445.88 3073.36 3450.68 3076.4 3461.88 c
-3077.52 3465.72 3077.52 3466.04 3078.16 3468.44 c
-3083.76 3465.56 3085.68 3464.92 3089.04 3464.92 c
-3110.8 3464.92 3133.36 3493.88 3133.36 3521.56 c
-3133.36 3533.4 3126.64 3541.08 3116.08 3541.08 c
-3106.96 3541.08 3099.92 3535.92 3090.48 3522.52 c
-h
-3107.12 3529.56 m
-3111.28 3529.24 3113.68 3525.56 3113.36 3520.44 c
-3112.72 3509.88 3107.6 3494.04 3101.84 3483.64 c
-3096.88 3475 3091.76 3469.92 3086.32 3469.92 c
-3082.8 3469.92 3080.08 3472.75 3080.08 3476.28 c
-3080.08 3479 3081.84 3485.56 3086.16 3500.12 c
-3089.68 3511.8 3091.12 3515.8 3093.52 3519.48 c
-3097.52 3525.72 3102.96 3529.88 3107.12 3529.56 c
-h
-3142 3467 m
-f*
-3177.56 3540.92 m
-3161.24 3538.36 3155 3537.4 3146.68 3536.44 c
-3146.68 3532 l
-3153.88 3531.69 3155.32 3531.07 3155.32 3528.12 c
-3155.32 3526.52 3154.04 3520.76 3151.8 3512.44 c
-3135.8 3450.36 l
-3132.76 3439.8 3131.48 3438.84 3123.8 3439 c
-3123.8 3434 l
-3163.64 3434 l
-3163.64 3439 l
-3155.64 3439.14 3153.24 3440.16 3153.24 3443.64 c
-3153.24 3445.88 3154.36 3450.68 3157.4 3461.88 c
-3158.52 3465.72 3158.52 3466.04 3159.16 3468.44 c
-3164.76 3465.56 3166.68 3464.92 3170.04 3464.92 c
-3191.8 3464.92 3214.36 3493.88 3214.36 3521.56 c
-3214.36 3533.4 3207.64 3541.08 3197.08 3541.08 c
-3187.96 3541.08 3180.92 3535.92 3171.48 3522.52 c
-h
-3188.12 3529.56 m
-3192.28 3529.24 3194.68 3525.56 3194.36 3520.44 c
-3193.72 3509.88 3188.6 3494.04 3182.84 3483.64 c
-3177.88 3475 3172.76 3469.92 3167.32 3469.92 c
-3163.8 3469.92 3161.08 3472.75 3161.08 3476.28 c
-3161.08 3479 3162.84 3485.56 3167.16 3500.12 c
-3170.68 3511.8 3172.12 3515.8 3174.52 3519.48 c
-3178.52 3525.72 3183.96 3529.88 3188.12 3529.56 c
-h
-3223 3467 m
-f*
-3256.56 3489.56 m
-3254.32 3486.36 l
-3250.16 3480.12 3246.48 3476.56 3244.08 3476.56 c
-3242.8 3476.56 3242 3477.77 3242 3479.16 c
-3242 3480.6 3242.62 3484.76 3243.12 3487.48 c
-3257.68 3540.92 l
-3249.22 3539 3238.26 3537.4 3226.04 3536.44 c
-3226.04 3532 l
-3227.44 3532 l
-3232.24 3532 3235.48 3530.44 3235.48 3527.48 c
-3235.48 3526.2 3234.71 3523.8 3233.68 3521.08 c
-3224.4 3486.68 l
-3223.12 3482.04 3223 3477.88 3223 3475.64 c
-3223 3469.56 3227.2 3465.56 3233.36 3465.56 c
-3242.96 3465.56 3248.88 3470.36 3260.08 3487.32 c
-h
-3252.88 3576.4 m
-3247.44 3576.4 3243 3571.46 3243 3566.04 c
-3243 3559.8 3247.26 3555.4 3253.04 3555.4 c
-3259.12 3555.4 3264 3559.86 3264 3565.56 c
-3264 3571.48 3259 3576.4 3252.88 3576.4 c
-h
-3266.48 3467 m
-f*
-3341.36 3488.6 m
-3334.96 3478.68 3332.88 3476.56 3330.16 3476.56 c
-3328.88 3476.56 3328 3477.63 3328 3479.16 c
-3328 3480.76 3328.94 3484.12 3331.92 3493.08 c
-3337.68 3510.52 l
-3340.24 3518.04 3342 3525.08 3342 3528.92 c
-3342 3536.76 3337.78 3541.08 3330.16 3541.08 c
-3324.24 3541.08 3318.48 3538.62 3314.16 3534.36 c
-3308.24 3528.76 3305.2 3524.92 3294.48 3509.08 c
-3304.72 3540.76 l
-3294.48 3538.52 3281.68 3536.92 3272.72 3536.6 c
-3272.72 3531.8 l
-3279.44 3531.65 3281.36 3530.92 3281.36 3528.12 c
-3281.36 3526.2 3279.12 3517.72 3274 3499.64 c
-3270.32 3486.68 3269.2 3482.52 3265.04 3467 c
-3284.4 3467 l
-3291.92 3494.68 3297.68 3508.6 3307.6 3521.56 c
-3310.8 3525.88 3315.76 3529.08 3318.64 3529.08 c
-3320.72 3529.08 3323 3527.63 3323 3526.04 c
-3323 3525.56 3322.54 3524.28 3321.84 3522.68 c
-3313.04 3496.12 l
-3310.48 3488.44 3309 3479.32 3309 3475.16 c
-3309 3469.08 3312.84 3465.56 3319.44 3465.56 c
-3329.04 3465.56 3335.6 3471 3344.88 3486.52 c
-h
-3354.96 3467 m
-f*
-3432.48 3536 m
-3414.72 3536 l
-3409.28 3539.58 3404.48 3541.08 3397.12 3541.08 c
-3377.44 3541.08 3361 3528.05 3361 3511.8 c
-3361 3503.64 3365.35 3497.88 3374.4 3494.2 c
-3361.28 3486.84 3359 3484.6 3359 3478.68 c
-3359 3473.56 3361.89 3470.52 3368.96 3468.12 c
-3359.04 3465.72 3355.84 3464.44 3352 3461.4 c
-3349.44 3459.16 3348 3455.32 3348 3451.48 c
-3348 3441.08 3359.56 3435 3377.76 3435 c
-3400.32 3435 3416 3444.72 3416 3458.52 c
-3416 3468.28 3409.6 3473.56 3392.16 3478.52 c
-3383.68 3480.92 l
-3378.56 3482.36 3375 3484.6 3375 3487 c
-3375 3489.56 3377.68 3492.28 3380 3492.28 c
-3380.8 3492.28 3381.92 3492.24 3383.2 3492.12 c
-3384.96 3491.64 3386.24 3491 3388.16 3491 c
-3395.2 3491 3402.4 3493.09 3408.48 3496.92 c
-3417.76 3502.2 3423 3510.36 3423 3519.96 c
-3423 3522.64 3422.59 3524.32 3421.76 3527 c
-3432.48 3527 l
-h
-3374.4 3466.04 m
-3376.32 3465.88 3388.48 3461.72 3392 3460.12 c
-3396.48 3457.88 3399 3455.16 3399 3451 c
-3399 3443.96 3391.8 3440 3379.36 3440 c
-3368.96 3440 3362 3445.1 3362 3452.44 c
-3362 3455.48 3363.32 3458.2 3366.24 3461.24 c
-3368.32 3463.32 3373.12 3466.2 3374.4 3466.04 c
-h
-3396.8 3536.08 m
-3400.96 3536.08 3404 3532.19 3404 3526.52 c
-3404 3521.08 3402.08 3513.4 3399.36 3507.48 c
-3396 3500.12 3391.84 3496 3386.88 3496 c
-3382.56 3496 3380 3499.52 3380 3505.88 c
-3380 3512.28 3382.79 3522.04 3386.24 3528.12 c
-3389.28 3533.4 3392.64 3536.08 3396.8 3536.08 c
-h
-3436 3467 m
-f*
-1 i
-0.564706 g
-2768.15 2649.35 m
-2633.75 2686.55 l
-2729.75 2741.75 l
-2576.15 2751.35 l
-2618.15 2820.95 l
-2470.55 2800.55 l
-2453.75 2872.55 l
-2333.75 2826.95 l
-2258.15 2890.55 l
-2182.55 2826.95 l
-2062.55 2872.55 l
-2044.55 2800.55 l
-1895.75 2820.95 l
-1940.15 2751.35 l
-1786.55 2741.75 l
-1882.55 2686.55 l
-1746.95 2649.35 l
-1882.55 2614.55 l
-1786.55 2558.15 l
-1940.15 2549.75 l
-1895.75 2480.15 l
-2044.55 2499.35 l
-2062.55 2428.55 l
-2182.55 2472.95 l
-2258.15 2409.35 l
-2333.75 2472.95 l
-2453.75 2428.55 l
-2470.55 2499.35 l
-2618.15 2480.15 l
-2576.15 2549.75 l
-2729.75 2558.15 l
-2633.75 2614.55 l
-f*
-1 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-f*
-0 g
-2708.15 2709.35 m
-2573.75 2746.55 l
-2669.75 2801.75 l
-2516.15 2811.35 l
-2558.15 2880.95 l
-2410.55 2860.55 l
-2393.75 2932.55 l
-2273.75 2886.95 l
-2198.15 2950.55 l
-2122.55 2886.95 l
-2002.55 2932.55 l
-1984.55 2860.55 l
-1835.75 2880.95 l
-1880.15 2811.35 l
-1726.55 2801.75 l
-1822.55 2746.55 l
-1686.95 2709.35 l
-1822.55 2674.55 l
-1726.55 2618.15 l
-1880.15 2609.75 l
-1835.75 2540.15 l
-1984.55 2559.35 l
-2002.55 2488.55 l
-2122.55 2532.95 l
-2198.15 2469.35 l
-2273.75 2532.95 l
-2393.75 2488.55 l
-2410.55 2559.35 l
-2558.15 2540.15 l
-2516.15 2609.75 l
-2669.75 2618.15 l
-2573.75 2674.55 l
-2708.15 2709.35 l
-2669.75 2709.35 l
-2547.35 2678.15 l
-2636.15 2626.55 l
-2498.15 2618.15 l
-2538.95 2552.15 l
-2403.35 2571.35 l
-2386.55 2501.75 l
-2271.35 2544.95 l
-2198.15 2482.55 l
-2124.95 2544.95 l
-2009.75 2501.75 l
-1991.75 2571.35 l
-1856.15 2552.15 l
-1896.95 2618.15 l
-1760.15 2626.55 l
-1848.95 2678.15 l
-1726.55 2709.35 l
-1847.75 2741.75 l
-1760.15 2794.55 l
-1896.95 2801.75 l
-1856.15 2868.95 l
-1991.75 2849.75 l
-2009.75 2918.15 l
-2124.95 2876.15 l
-2198.15 2938.55 l
-2271.35 2876.15 l
-2386.55 2918.15 l
-2403.35 2849.75 l
-2538.95 2868.95 l
-2498.15 2801.75 l
-2636.15 2794.55 l
-2547.35 2741.75 l
-2669.75 2709.35 l
-2708.15 2709.35 l
-f*
-0.2 i
-2020.08 2760.76 m
-2000.08 2686.52 l
-1997.52 2677.88 1994.48 2675.64 1984.08 2675 c
-1984.08 2671 l
-2034 2671 l
-2034 2675 l
-2024.72 2675.48 2022.48 2676.76 2022.48 2681.88 c
-2022.48 2683.64 2022.8 2685.4 2023.76 2689.08 c
-2023.92 2689.88 l
-2024.08 2690.68 l
-2043.76 2762.52 l
-2046.16 2770.84 2048.56 2773.08 2056.72 2774.04 c
-2056.72 2778 l
-2022.8 2778 l
-1973.2 2701.24 l
-1964.56 2778 l
-1929.2 2778 l
-1929.2 2774 l
-1939.28 2773.52 1940.72 2772.89 1940.72 2768.44 c
-1940.72 2766.2 1940.08 2763.32 1938.96 2759.16 c
-1921.52 2699.48 l
-1915.12 2678.68 1914 2676.92 1905.36 2675 c
-1905.36 2671 l
-1938.48 2671 l
-1938.48 2675 l
-1928.24 2676.28 1925.68 2678.2 1925.68 2684.76 c
-1925.68 2687.48 1926.48 2691.48 1928.72 2699.48 c
-1944.88 2758.52 l
-1955.6 2669.08 l
-1960.08 2669.08 l
-h
-2052.24 2671 m
-f*
-2121.44 2691.32 m
-2114.88 2682.52 2112.48 2679.76 2109.92 2679.76 c
-2108.64 2679.76 2108 2680.86 2108 2682.52 c
-2108 2686.52 2109.44 2693.08 2113.44 2706.2 c
-2124.8 2743.96 l
-2107.04 2742.84 l
-2104.16 2733.4 l
-2102.72 2741.56 2099.2 2745.08 2092.32 2745.08 c
-2072.64 2745.08 2049 2714.27 2049 2689.24 c
-2049 2677.08 2055.74 2668.92 2065.92 2668.92 c
-2075.68 2668.92 2083.04 2674.68 2092.16 2690.04 c
-2090.24 2683.48 2090 2681.56 2090 2679.32 c
-2090 2673.4 2094.76 2668.76 2100.64 2668.76 c
-2108.16 2668.76 2115.52 2675 2124.8 2688.92 c
-h
-2094.56 2738.2 m
-2098.08 2737.88 2100.56 2735 2100.56 2730.68 c
-2100.56 2721.08 2095.24 2703.32 2088.96 2692.28 c
-2084.64 2684.44 2079.84 2679.92 2075.52 2679.92 c
-2071.36 2679.92 2068 2683.75 2068 2688.92 c
-2068 2697.24 2073.42 2713.24 2080.16 2725.08 c
-2084.96 2733.56 2090.24 2738.52 2094.56 2738.2 c
-h
-2132 2671 m
-f*
-2166.56 2744.92 m
-2150.24 2742.36 2144 2741.4 2135.68 2740.44 c
-2135.68 2736 l
-2142.88 2735.69 2144.32 2735.07 2144.32 2732.12 c
-2144.32 2730.52 2143.04 2724.76 2140.8 2716.44 c
-2124.8 2654.36 l
-2121.76 2643.8 2120.48 2642.84 2112.8 2643 c
-2112.8 2638 l
-2152.64 2638 l
-2152.64 2643 l
-2144.64 2643.14 2142.24 2644.16 2142.24 2647.64 c
-2142.24 2649.88 2143.36 2654.68 2146.4 2665.88 c
-2147.52 2669.72 2147.52 2670.04 2148.16 2672.44 c
-2153.76 2669.56 2155.68 2668.92 2159.04 2668.92 c
-2180.8 2668.92 2203.36 2697.88 2203.36 2725.56 c
-2203.36 2737.4 2196.64 2745.08 2186.08 2745.08 c
-2176.96 2745.08 2169.92 2739.92 2160.48 2726.52 c
-h
-2177.12 2733.56 m
-2181.28 2733.24 2183.68 2729.56 2183.36 2724.44 c
-2182.72 2713.88 2177.6 2698.04 2171.84 2687.64 c
-2166.88 2679 2161.76 2673.92 2156.32 2673.92 c
-2152.8 2673.92 2150.08 2676.75 2150.08 2680.28 c
-2150.08 2683 2151.84 2689.56 2156.16 2704.12 c
-2159.68 2715.8 2161.12 2719.8 2163.52 2723.48 c
-2167.52 2729.72 2172.96 2733.88 2177.12 2733.56 c
-h
-2212 2671 m
-f*
-2247.56 2744.92 m
-2231.24 2742.36 2225 2741.4 2216.68 2740.44 c
-2216.68 2736 l
-2223.88 2735.69 2225.32 2735.07 2225.32 2732.12 c
-2225.32 2730.52 2224.04 2724.76 2221.8 2716.44 c
-2205.8 2654.36 l
-2202.76 2643.8 2201.48 2642.84 2193.8 2643 c
-2193.8 2638 l
-2233.64 2638 l
-2233.64 2643 l
-2225.64 2643.14 2223.24 2644.16 2223.24 2647.64 c
-2223.24 2649.88 2224.36 2654.68 2227.4 2665.88 c
-2228.52 2669.72 2228.52 2670.04 2229.16 2672.44 c
-2234.76 2669.56 2236.68 2668.92 2240.04 2668.92 c
-2261.8 2668.92 2284.36 2697.88 2284.36 2725.56 c
-2284.36 2737.4 2277.64 2745.08 2267.08 2745.08 c
-2257.96 2745.08 2250.92 2739.92 2241.48 2726.52 c
-h
-2258.12 2733.56 m
-2262.28 2733.24 2264.68 2729.56 2264.36 2724.44 c
-2263.72 2713.88 2258.6 2698.04 2252.84 2687.64 c
-2247.88 2679 2242.76 2673.92 2237.32 2673.92 c
-2233.8 2673.92 2231.08 2676.75 2231.08 2680.28 c
-2231.08 2683 2232.84 2689.56 2237.16 2704.12 c
-2240.68 2715.8 2242.12 2719.8 2244.52 2723.48 c
-2248.52 2729.72 2253.96 2733.88 2258.12 2733.56 c
-h
-2293 2671 m
-f*
-2326.56 2693.56 m
-2324.32 2690.36 l
-2320.16 2684.12 2316.48 2680.56 2314.08 2680.56 c
-2312.8 2680.56 2312 2681.77 2312 2683.16 c
-2312 2684.6 2312.62 2688.76 2313.12 2691.48 c
-2327.68 2744.92 l
-2319.22 2743 2308.26 2741.4 2296.04 2740.44 c
-2296.04 2736 l
-2297.44 2736 l
-2302.24 2736 2305.48 2734.44 2305.48 2731.48 c
-2305.48 2730.2 2304.71 2727.8 2303.68 2725.08 c
-2294.4 2690.68 l
-2293.12 2686.04 2293 2681.88 2293 2679.64 c
-2293 2673.56 2297.2 2669.56 2303.36 2669.56 c
-2312.96 2669.56 2318.88 2674.36 2330.08 2691.32 c
-h
-2322.88 2780.4 m
-2317.44 2780.4 2313 2775.46 2313 2770.04 c
-2313 2763.8 2317.26 2759.4 2323.04 2759.4 c
-2329.12 2759.4 2334 2763.86 2334 2769.56 c
-2334 2775.48 2329 2780.4 2322.88 2780.4 c
-h
-2336.48 2671 m
-f*
-2411.36 2692.6 m
-2404.96 2682.68 2402.88 2680.56 2400.16 2680.56 c
-2398.88 2680.56 2398 2681.63 2398 2683.16 c
-2398 2684.76 2398.94 2688.12 2401.92 2697.08 c
-2407.68 2714.52 l
-2410.24 2722.04 2412 2729.08 2412 2732.92 c
-2412 2740.76 2407.78 2745.08 2400.16 2745.08 c
-2394.24 2745.08 2388.48 2742.62 2384.16 2738.36 c
-2378.24 2732.76 2375.2 2728.92 2364.48 2713.08 c
-2374.72 2744.76 l
-2364.48 2742.52 2351.68 2740.92 2342.72 2740.6 c
-2342.72 2735.8 l
-2349.44 2735.65 2351.36 2734.92 2351.36 2732.12 c
-2351.36 2730.2 2349.12 2721.72 2344 2703.64 c
-2340.32 2690.68 2339.2 2686.52 2335.04 2671 c
-2354.4 2671 l
-2361.92 2698.68 2367.68 2712.6 2377.6 2725.56 c
-2380.8 2729.88 2385.76 2733.08 2388.64 2733.08 c
-2390.72 2733.08 2393 2731.63 2393 2730.04 c
-2393 2729.56 2392.54 2728.28 2391.84 2726.68 c
-2383.04 2700.12 l
-2380.48 2692.44 2379 2683.32 2379 2679.16 c
-2379 2673.08 2382.84 2669.56 2389.44 2669.56 c
-2399.04 2669.56 2405.6 2675 2414.88 2690.52 c
-h
-2424.96 2671 m
-f*
-2502.48 2740 m
-2484.72 2740 l
-2479.28 2743.58 2474.48 2745.08 2467.12 2745.08 c
-2447.44 2745.08 2431 2732.05 2431 2715.8 c
-2431 2707.64 2435.35 2701.88 2444.4 2698.2 c
-2431.28 2690.84 2429 2688.6 2429 2682.68 c
-2429 2677.56 2431.89 2674.52 2438.96 2672.12 c
-2429.04 2669.72 2425.84 2668.44 2422 2665.4 c
-2419.44 2663.16 2418 2659.32 2418 2655.48 c
-2418 2645.08 2429.56 2639 2447.76 2639 c
-2470.32 2639 2486 2648.72 2486 2662.52 c
-2486 2672.28 2479.6 2677.56 2462.16 2682.52 c
-2453.68 2684.92 l
-2448.56 2686.36 2445 2688.6 2445 2691 c
-2445 2693.56 2447.68 2696.28 2450 2696.28 c
-2450.8 2696.28 2451.92 2696.24 2453.2 2696.12 c
-2454.96 2695.64 2456.24 2695 2458.16 2695 c
-2465.2 2695 2472.4 2697.09 2478.48 2700.92 c
-2487.76 2706.2 2493 2714.36 2493 2723.96 c
-2493 2726.64 2492.59 2728.32 2491.76 2731 c
-2502.48 2731 l
-h
-2444.4 2670.04 m
-2446.32 2669.88 2458.48 2665.72 2462 2664.12 c
-2466.48 2661.88 2469 2659.16 2469 2655 c
-2469 2647.96 2461.8 2644 2449.36 2644 c
-2438.96 2644 2432 2649.1 2432 2656.44 c
-2432 2659.48 2433.32 2662.2 2436.24 2665.24 c
-2438.32 2667.32 2443.12 2670.2 2444.4 2670.04 c
-h
-2466.8 2740.08 m
-2470.96 2740.08 2474 2736.19 2474 2730.52 c
-2474 2725.08 2472.08 2717.4 2469.36 2711.48 c
-2466 2704.12 2461.84 2700 2456.88 2700 c
-2452.56 2700 2450 2703.52 2450 2709.88 c
-2450 2716.28 2452.79 2726.04 2456.24 2732.12 c
-2459.28 2737.4 2462.64 2740.08 2466.8 2740.08 c
-h
-2506 2671 m
-f*
-1 i
-1 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-f*
-0 g
-4282.55 3248.15 m
-4448.15 3401.75 l
-4366.55 3401.75 l
-4366.55 3552.95 l
-4199.75 3552.95 l
-4199.75 3401.75 l
-4118.15 3401.75 l
-4282.55 3248.15 l
-4282.55 3262.55 l
-4143.35 3392.15 l
-4209.35 3392.15 l
-4209.35 3543.35 l
-4355.75 3543.35 l
-4355.75 3392.15 l
-4424.15 3392.15 l
-4282.55 3262.55 l
-4282.55 3248.15 l
-f*
-0.2 i
-3770.88 3786.52 m
-3735.78 3786.52 3711 3761.21 3711 3725.12 c
-3711 3688.04 3734.99 3662.48 3769.98 3662.48 c
-3804.54 3662.48 3829 3688.04 3829 3724.58 c
-3829 3740.96 3823.9 3755.9 3814.98 3766.34 c
-3804.18 3779.12 3787.8 3786.52 3770.88 3786.52 c
-h
-3769.44 3779.52 m
-3777.9 3779.52 3785.46 3777.05 3791.94 3772.1 c
-3802.2 3763.46 3808 3746.18 3808 3725.66 c
-3808 3704.06 3803.25 3688.4 3793.56 3678.5 c
-3787.44 3672.38 3779.16 3669.48 3770.16 3669.48 c
-3761.88 3669.48 3754.14 3672.01 3747.84 3677.06 c
-3737.76 3685.34 3732 3703.34 3732 3724.76 c
-3732 3741.86 3736.54 3758.96 3743.34 3767.6 c
-3750 3775.52 3759.72 3779.52 3769.44 3779.52 c
-h
-3834.96 3665 m
-f*
-3838.42 3777.14 m
-3839.5 3777.14 l
-3841.48 3777.32 3843.64 3777.5 3845.08 3777.5 c
-3850.84 3777.5 3853 3774.98 3853 3766.52 c
-3853 3680.66 l
-3853 3670.94 3850.41 3668.6 3838.78 3667.7 c
-3838.78 3665 l
-3881.26 3665 l
-3881.26 3668 l
-3869.74 3668.7 3868 3670.46 3868 3680.12 c
-3868 3787.58 l
-3867.04 3787.94 l
-3857.68 3784.88 3850.84 3783.08 3838.42 3780.02 c
-h
-3885.04 3665 m
-f*
-3946.92 3663.2 m
-3973.38 3672.56 l
-3973.38 3676 l
-3970.32 3675.26 3970.14 3675.82 3969.24 3675.82 c
-3962.76 3675.82 3961 3677.69 3961 3685.52 c
-3961 3787.58 l
-3960.42 3787.94 l
-3951.78 3784.88 3945.48 3783.08 3933.96 3780.02 c
-3933.96 3777.14 l
-3935.4 3777.32 3936.48 3777.32 3937.92 3777.32 c
-3944.58 3777.32 3946 3775.52 3946 3768.14 c
-3946 3740.06 l
-3939.23 3745.82 3934.42 3747.8 3927.3 3747.8 c
-3906.6 3747.8 3890 3727.46 3890 3701.9 c
-3890 3678.86 3903.26 3663.2 3923.16 3663.2 c
-3933.15 3663.2 3939.93 3666.8 3946 3675.26 c
-3946 3663.74 l
-h
-3946 3683.36 m
-3946 3682.1 3945 3680.12 3943.5 3678.32 c
-3940.26 3674.54 3935.76 3672.2 3930.18 3672.2 c
-3915.06 3672.2 3905 3686.74 3905 3709.1 c
-3905 3729.44 3913.95 3742.8 3927.84 3742.8 c
-3937.56 3742.8 3946 3734.32 3946 3724.76 c
-h
-3975 3665 m
-f*
-4020 3665 m
-f*
-4023.06 3784 m
-4023.06 3781 l
-4038.18 3780.09 4040 3778.07 4040 3764.54 c
-4040 3684.62 l
-4040 3671.3 4037.71 3668.96 4023.06 3668.42 c
-4023.06 3665 l
-4083.18 3665 l
-4110 3665 4127 3677.42 4127 3697.4 c
-4127 3705.32 4123.85 3712.52 4117.92 3717.74 c
-4112.52 3722.6 4107.66 3724.94 4095.96 3727.64 c
-4105.32 3729.98 4109.1 3731.78 4113.42 3735.56 c
-4117.92 3739.52 4121 3746.18 4121 3753.56 c
-4121 3773.72 4104.85 3784 4073.46 3784 c
-h
-4059 3723.68 m
-4075.94 3723.68 4083.78 3722.78 4090.56 3720.26 c
-4101 3716.12 4106 3708.74 4106 3697.22 c
-4106 3687.5 4102.23 3680.48 4095.06 3676.34 c
-4089.3 3672.92 4082.1 3672 4069.5 3672 c
-4061.22 3672 4059 3673.55 4059 3679.04 c
-h
-4059 3730.88 m
-4059 3772.1 l
-4059 3775.88 4060.16 3777 4062.66 3777 c
-4070.58 3777 l
-4091.28 3777 4102 3768.71 4102 3752.84 c
-4102 3738.8 4092.55 3730.88 4075.8 3730.88 c
-h
-4140.06 3665 m
-f*
-4219.56 3676.88 m
-4216.5 3674.36 4214.34 3673.2 4211.64 3673.2 c
-4207.5 3673.2 4206 3675.78 4206 3683.9 c
-4206 3719 l
-4206 3728.18 4205.16 3733.22 4202.82 3737.36 c
-4199.04 3744.2 4191.3 3747.8 4180.32 3747.8 c
-4171.14 3747.8 4162.5 3745.28 4157.46 3741.14 c
-4152.96 3737.36 4150 3732.14 4150 3727.64 c
-4150 3723.5 4153.46 3719.9 4157.82 3719.9 c
-4162.14 3719.9 4165.92 3723.5 4165.92 3727.46 c
-4165.92 3728.18 4165.74 3729.08 4165.56 3730.34 c
-4165.2 3731.96 4165 3733.4 4165 3734.66 c
-4165 3739.52 4170.77 3743.8 4177.98 3743.8 c
-4186.8 3743.8 4191 3738.47 4191 3728.54 c
-4191 3717.56 l
-4163.76 3706.4 4160.75 3704.96 4153.14 3698.12 c
-4149.18 3694.52 4146.66 3688.4 4146.66 3682.46 c
-4146.66 3671.12 4154.4 3663.2 4165.56 3663.2 c
-4173.48 3663.2 4180.86 3666.98 4191.84 3676.34 c
-4192.74 3666.8 4195.98 3663.2 4203.36 3663.2 c
-4209.48 3663.2 4213.26 3665.36 4219.56 3672.2 c
-h
-4191 3687.14 m
-4191 3681.56 4190.23 3679.94 4186.98 3677.6 c
-4182.66 3675.08 4177.62 3673.2 4173.84 3673.2 c
-4167.54 3673.2 4162.48 3679.51 4162.48 3687.5 c
-4162.48 3688.22 l
-4162.48 3698.84 4169.7 3705.32 4191 3713.24 c
-h
-4219.92 3665 m
-f*
-4277.06 3721.52 m
-4276.34 3746 l
-4274 3746 l
-4273.64 3745.64 l
-4272.02 3744.38 4271.84 3744.2 4271.12 3744.2 c
-4270.04 3744.2 4268.24 3744.56 4266.26 3745.46 c
-4262.48 3746.9 4258.34 3747.62 4254.02 3747.62 c
-4239.26 3747.62 4229 3738.62 4229 3725.48 c
-4229 3715.4 4234.81 3708.38 4250.24 3699.56 c
-4260.68 3693.62 l
-4266.98 3690.02 4270 3685.7 4270 3680.12 c
-4270 3672.2 4264.26 3667.2 4255.1 3667.2 c
-4242.68 3667.2 4236.38 3674.03 4232.24 3692.36 c
-4229.18 3692.36 l
-4229.18 3664.28 l
-4231.7 3664.28 l
-4232.96 3666.08 4233.68 3666.44 4235.84 3666.44 c
-4237.82 3666.44 4239.8 3666.08 4244.12 3665 c
-4249.16 3663.92 4253.66 3663.2 4257.44 3663.2 c
-4271.12 3663.2 4283 3673.64 4283 3686.24 c
-4283 3695.24 4278.76 3701.18 4267.52 3707.66 c
-4248.08 3719.18 l
-4243.04 3722.06 4240 3726.56 4240 3731.42 c
-4240 3738.8 4245.72 3743.62 4254.2 3743.62 c
-4264.46 3743.62 4269.86 3737.69 4274 3721.52 c
-h
-4290.02 3665 m
-f*
-4363.44 3694.52 m
-4354.8 3680.84 4347.06 3675.2 4335.54 3675.2 c
-4325.64 3675.2 4318.08 3680.02 4312.86 3690.02 c
-4309.26 3697.08 4307.82 3703.42 4307.46 3715 c
-4362.9 3715 l
-4361.46 3726.63 4359.66 3731.82 4355.16 3737.54 c
-4349.76 3744.02 4341.48 3747.8 4332.12 3747.8 c
-4309.8 3747.8 4294.5 3729.8 4294.5 3703.52 c
-4294.5 3678.68 4307.46 3663.2 4328.16 3663.2 c
-4345.44 3663.2 4358.76 3673.82 4366.32 3693.26 c
-h
-4307.82 3720 m
-4309.8 3734.66 4315.92 3740.8 4326.9 3740.8 c
-4337.88 3740.8 4342.2 3735.74 4344.54 3720 c
-h
-4369.92 3665 m
-f*
-4415 3665 m
-f*
-4501.22 3706.58 m
-4501.22 3748.34 l
-4497.08 3748.34 l
-4494.92 3733.94 4491.68 3731 4477.28 3731 c
-4452 3731 l
-4452 3771.2 l
-4452 3776.24 4452.77 3777 4456.94 3777 c
-4481.42 3777 l
-4501.76 3777 4505.72 3774.35 4508.78 3758.42 c
-4513.28 3758.42 l
-4512.74 3784 l
-4417.16 3784 l
-4417.16 3780.74 l
-4430.48 3779.66 4433 3777.32 4433 3764.54 c
-4433 3686.6 l
-4433 3671.66 4431 3669.32 4417.16 3668.42 c
-4417.16 3665 l
-4467.56 3665 l
-4467.56 3668 l
-4453.7 3668.74 4452 3671.32 4452 3684.62 c
-4452 3724 l
-4477.28 3724 l
-4491.86 3724 4494.92 3721.28 4497.08 3706.58 c
-h
-4515.08 3665 m
-f*
-4516.26 3735.2 m
-4518.78 3735.74 4520.4 3735.92 4522.56 3735.92 c
-4527.06 3735.92 4529 3733.04 4529 3725.12 c
-4529 3680.12 l
-4529 3671.12 4527.71 3669.86 4515.9 3667.7 c
-4515.9 3665 l
-4559.1 3665 l
-4559.1 3668 l
-4546.86 3668.53 4544 3671.17 4544 3681.2 c
-4544 3721.7 l
-4544 3727.46 4551.44 3736.46 4556.4 3736.46 c
-4557.48 3736.46 4559.1 3735.56 4561.08 3733.76 c
-4563.96 3731.06 4565.94 3730.16 4568.28 3730.16 c
-4572.6 3730.16 4575.3 3733.22 4575.3 3738.26 c
-4575.3 3744.2 4571.52 3747.8 4565.4 3747.8 c
-4557.91 3747.8 4552.92 3743.84 4544 3730.88 c
-4544 3747.44 l
-4542.9 3747.8 l
-4533.36 3744.02 4526.88 3741.5 4516.26 3738.08 c
-h
-4574.94 3665 m
-f*
-4654.56 3676.88 m
-4651.5 3674.36 4649.34 3673.2 4646.64 3673.2 c
-4642.5 3673.2 4641 3675.78 4641 3683.9 c
-4641 3719 l
-4641 3728.18 4640.16 3733.22 4637.82 3737.36 c
-4634.04 3744.2 4626.3 3747.8 4615.32 3747.8 c
-4606.14 3747.8 4597.5 3745.28 4592.46 3741.14 c
-4587.96 3737.36 4585 3732.14 4585 3727.64 c
-4585 3723.5 4588.46 3719.9 4592.82 3719.9 c
-4597.14 3719.9 4600.92 3723.5 4600.92 3727.46 c
-4600.92 3728.18 4600.74 3729.08 4600.56 3730.34 c
-4600.2 3731.96 4600 3733.4 4600 3734.66 c
-4600 3739.52 4605.77 3743.8 4612.98 3743.8 c
-4621.8 3743.8 4626 3738.47 4626 3728.54 c
-4626 3717.56 l
-4598.76 3706.4 4595.75 3704.96 4588.14 3698.12 c
-4584.18 3694.52 4581.66 3688.4 4581.66 3682.46 c
-4581.66 3671.12 4589.4 3663.2 4600.56 3663.2 c
-4608.48 3663.2 4615.86 3666.98 4626.84 3676.34 c
-4627.74 3666.8 4630.98 3663.2 4638.36 3663.2 c
-4644.48 3663.2 4648.26 3665.36 4654.56 3672.2 c
-h
-4626 3687.14 m
-4626 3681.56 4625.23 3679.94 4621.98 3677.6 c
-4617.66 3675.08 4612.62 3673.2 4608.84 3673.2 c
-4602.54 3673.2 4597.48 3679.51 4597.48 3687.5 c
-4597.48 3688.22 l
-4597.48 3698.84 4604.7 3705.32 4626 3713.24 c
-h
-4654.92 3665 m
-f*
-4658.14 3736.64 m
-4660.48 3737.18 4661.92 3737.36 4663.9 3737.36 c
-4668.58 3737.36 4670 3734.48 4670 3725.84 c
-4670 3680.3 l
-4670 3670.58 4667.52 3667.88 4657.6 3667.7 c
-4657.6 3665 l
-4697.56 3665 l
-4697.56 3668 l
-4688.02 3668.35 4685 3670.27 4685 3677.06 c
-4685 3727.82 l
-4685 3728.18 4686.23 3729.44 4687.66 3730.88 c
-4691.98 3735.2 4700.08 3738.8 4706.74 3738.8 c
-4714.48 3738.8 4719 3732.2 4719 3719.54 c
-4719 3680.48 l
-4719 3670.4 4716.93 3668.42 4706.2 3667.7 c
-4706.2 3665 l
-4746.52 3665 l
-4746.52 3668 l
-4736.26 3668.18 4734 3671.17 4734 3682.1 c
-4734 3727.46 l
-4739.28 3735.2 4744.91 3738.8 4753.18 3738.8 c
-4763.44 3738.8 4767 3733.85 4767 3718.64 c
-4767 3680.66 l
-4767 3670.4 4765.52 3668.96 4754.8 3667.7 c
-4754.8 3665 l
-4794.22 3665 l
-4794.22 3667.7 l
-4789.54 3668.06 l
-4784.14 3668.42 4782 3671.66 4782 3678.68 c
-4782 3715.76 l
-4782 3737 4774.91 3747.8 4760.92 3747.8 c
-4750.48 3747.8 4741.3 3743.12 4731.58 3732.68 c
-4728.34 3742.94 4722.22 3747.8 4712.5 3747.8 c
-4704.31 3747.8 4699.57 3745.46 4684.28 3733.94 c
-4684.28 3747.44 l
-4683.34 3747.8 l
-4674.16 3744.38 4668.04 3742.4 4658.14 3739.7 c
-h
-4795.04 3665 m
-f*
-4868.44 3694.52 m
-4859.8 3680.84 4852.06 3675.2 4840.54 3675.2 c
-4830.64 3675.2 4823.08 3680.02 4817.86 3690.02 c
-4814.26 3697.08 4812.82 3703.42 4812.46 3715 c
-4867.9 3715 l
-4866.46 3726.63 4864.66 3731.82 4860.16 3737.54 c
-4854.76 3744.02 4846.48 3747.8 4837.12 3747.8 c
-4814.8 3747.8 4799.5 3729.8 4799.5 3703.52 c
-4799.5 3678.68 4812.46 3663.2 4833.16 3663.2 c
-4850.44 3663.2 4863.76 3673.82 4871.32 3693.26 c
-h
-4812.82 3720 m
-4814.8 3734.66 4820.92 3740.8 4831.9 3740.8 c
-4842.88 3740.8 4847.2 3735.74 4849.54 3720 c
-h
-4874.92 3665 m
-f*
-2884.26 1356.36 m
-2873.64 1345.2 2867.88 1340.88 2859.06 1337.46 c
-2853.84 1335.3 2847.9 1334.58 2842.86 1334.58 c
-2830.98 1334.58 2819.64 1340.74 2814.42 1349.88 c
-2809.2 1359.42 2807 1372.2 2807 1390.38 c
-2807 1427.64 2818.23 1447.7 2839.8 1447.7 c
-2848.26 1447.7 2856 1444.38 2863.74 1437.36 c
-2871.48 1430.52 2875.62 1424.4 2881.92 1410.72 c
-2886.42 1410.72 l
-2886.42 1453.16 l
-2881.56 1453.16 l
-2878.86 1446.43 2877.06 1444.56 2873.64 1444.56 c
-2871.84 1444.56 2869.5 1445.28 2865.36 1447.08 c
-2854.92 1451.4 2846.1 1453.7 2837.46 1453.7 c
-2801.64 1453.7 2775 1425.84 2775 1388.76 c
-2775 1351.68 2801.21 1325.58 2838.54 1325.58 c
-2859.24 1325.58 2871.48 1331.88 2889.66 1351.86 c
-h
-2895.96 1329 m
-f*
-2959.18 1326.66 m
-2966.78 1329.36 2971.02 1330.08 2982.5 1331.34 c
-2993.66 1332.6 l
-2993.66 1337 l
-2985.74 1337.35 2984 1339.63 2984 1347.18 c
-2984 1412 l
-2947.4 1412 l
-2947.4 1407.66 l
-2956.4 1406.94 2959 1404.78 2959 1397.04 c
-2959 1346.1 l
-2952.88 1340.16 2949.18 1338.48 2943.8 1338.48 c
-2936.42 1338.48 2934 1342 2934 1350.96 c
-2934 1412 l
-2899.88 1412 l
-2899.88 1407.66 l
-2907.26 1406.22 2909 1404.6 2909 1397.04 c
-2909 1351.68 l
-2909 1335.84 2917.89 1326.48 2932.64 1326.48 c
-2942.16 1326.48 2948.56 1329.36 2959.18 1338.36 c
-h
-2997.08 1329 m
-f*
-3035.28 1412 m
-3001.22 1412 l
-3001.22 1407.66 l
-3008.96 1406.58 3011 1404.24 3011 1397.04 c
-3011 1344.12 l
-3011 1336.74 3009.19 1334.76 3001.22 1333.32 c
-3001.22 1329 l
-3049.1 1329 l
-3049.1 1333.32 l
-3038.12 1334.04 3036 1336.38 3036 1347.54 c
-3036 1381.56 l
-3036 1390.92 3041.02 1398.66 3046.94 1398.66 c
-3048.38 1398.66 3050 1397.4 3051.98 1394.52 c
-3055.4 1389.66 3058.1 1388.04 3062.78 1388.04 c
-3069.44 1388.04 3074.12 1393.08 3074.12 1399.92 c
-3074.12 1408.2 3068 1414.16 3059.54 1414.16 c
-3050.55 1414.16 3043.73 1409.47 3035.28 1397.22 c
-h
-3075.92 1329 m
-f*
-3116.28 1412 m
-3082.22 1412 l
-3082.22 1407.66 l
-3089.96 1406.58 3092 1404.24 3092 1397.04 c
-3092 1344.12 l
-3092 1336.74 3090.19 1334.76 3082.22 1333.32 c
-3082.22 1329 l
-3130.1 1329 l
-3130.1 1333.32 l
-3119.12 1334.04 3117 1336.38 3117 1347.54 c
-3117 1381.56 l
-3117 1390.92 3122.02 1398.66 3127.94 1398.66 c
-3129.38 1398.66 3131 1397.4 3132.98 1394.52 c
-3136.4 1389.66 3139.1 1388.04 3143.78 1388.04 c
-3150.44 1388.04 3155.12 1393.08 3155.12 1399.92 c
-3155.12 1408.2 3149 1414.16 3140.54 1414.16 c
-3131.55 1414.16 3124.73 1409.47 3116.28 1397.22 c
-h
-3156.92 1329 m
-f*
-3228.36 1351.5 m
-3220.98 1342.68 3215.58 1339.48 3207.84 1339.48 c
-3201 1339.48 3195.6 1342.53 3192 1348.62 c
-3188.58 1354.36 3187.14 1360.45 3186.42 1373 c
-3231.78 1373 l
-3230.7 1387.99 3228 1396.3 3222.42 1403.34 c
-3216.66 1410.36 3208.2 1414.16 3198.12 1414.16 c
-3175.62 1414.16 3160.5 1396.33 3160.5 1370.04 c
-3160.5 1343.76 3175.26 1326.48 3197.58 1326.48 c
-3212.16 1326.48 3220.98 1332.06 3232.68 1348.98 c
-h
-3185.52 1380 m
-3186.06 1401.42 3189.3 1408.16 3198.12 1408.16 c
-3203.34 1408.16 3206.58 1405.42 3208.02 1400.1 c
-3208.92 1396.68 3209.28 1391.64 3209.64 1382.46 c
-3209.64 1380 l
-h
-3235.92 1329 m
-f*
-3273.82 1412 m
-3239.78 1412 l
-3239.78 1407.66 l
-3247.7 1406.4 3249 1404.6 3249 1397.04 c
-3249 1344.12 l
-3249 1336.56 3247.61 1334.94 3239.78 1333.32 c
-3239.78 1329 l
-3283.16 1329 l
-3283.16 1333.32 l
-3276.5 1334.22 3274 1336.92 3274 1343.58 c
-3274 1391.64 l
-3274 1392.36 3275.4 1394.16 3277.4 1395.96 c
-3281.36 1399.92 3285.68 1402.16 3290 1402.16 c
-3296.12 1402.16 3299 1397.27 3299 1387.14 c
-3299 1343.58 l
-3299 1336.92 3296.71 1334.04 3290.72 1333.32 c
-3290.72 1329 l
-3333.02 1329 l
-3333.02 1333.32 l
-3326 1333.86 3324 1336.02 3324 1343.58 c
-3324 1388.76 l
-3324 1404.24 3314.54 1414.16 3299.9 1414.16 c
-3288.96 1414.16 3280.57 1409.11 3273.82 1398.48 c
-h
-3336.08 1329 m
-f*
-3390.9 1412 m
-3374 1412 l
-3374 1442.4 l
-3369.48 1442.4 l
-3358.5 1426.92 3351.3 1418.82 3339.6 1408.92 c
-3339.6 1404 l
-3349 1404 l
-3349 1345.74 l
-3349 1334.04 3356.73 1326.84 3369.12 1326.84 c
-3381.18 1326.84 3388.38 1332.24 3395.76 1347 c
-3391.26 1348.98 l
-3387.66 1342.14 3384.78 1339.84 3381 1339.84 c
-3375.96 1339.84 3374 1342.83 3374 1349.88 c
-3374 1404 l
-3390.9 1404 l
-h
-3395.94 1329 m
-f*
-3441 1329 m
-f*
-3545.94 1451 m
-3443.88 1451 l
-3443.88 1446 l
-3456.3 1445.29 3460 1442.63 3460 1433.4 c
-3460 1346.28 l
-3460 1336.92 3457.44 1334.94 3443.88 1333.5 c
-3443.88 1329 l
-3508.68 1329 l
-3508.68 1334 l
-3492.12 1334.69 3489 1336.77 3489 1346.28 c
-3489 1388.22 l
-3507.28 1387.86 3513.91 1381.2 3516.42 1360.32 c
-3520.92 1360.32 l
-3520.92 1421.16 l
-3516.42 1421.16 l
-3513.19 1400.64 3506.92 1394.34 3489 1394.34 c
-3489 1436.1 l
-3489 1442.76 3491.32 1445 3500.4 1445 c
-3517.14 1445 3527.58 1441.8 3533.16 1435.2 c
-3537.12 1430.7 3539.1 1425.84 3541.62 1414.5 c
-3545.94 1414.5 l
-h
-3550.98 1329 m
-f*
-3590.28 1412 m
-3556.22 1412 l
-3556.22 1407.66 l
-3563.96 1406.58 3566 1404.24 3566 1397.04 c
-3566 1344.12 l
-3566 1336.74 3564.19 1334.76 3556.22 1333.32 c
-3556.22 1329 l
-3604.1 1329 l
-3604.1 1333.32 l
-3593.12 1334.04 3591 1336.38 3591 1347.54 c
-3591 1381.56 l
-3591 1390.92 3596.02 1398.66 3601.94 1398.66 c
-3603.38 1398.66 3605 1397.4 3606.98 1394.52 c
-3610.4 1389.66 3613.1 1388.04 3617.78 1388.04 c
-3624.44 1388.04 3629.12 1393.08 3629.12 1399.92 c
-3629.12 1408.2 3623 1414.16 3614.54 1414.16 c
-3605.55 1414.16 3598.73 1409.47 3590.28 1397.22 c
-h
-3630.92 1329 m
-f*
-3716.14 1340.52 m
-3714.34 1338.72 l
-3713.8 1338.18 3713.26 1338 3712.36 1338 c
-3709.84 1338 3709 1339.44 3709 1342.5 c
-3709 1389.48 l
-3709 1404.78 3695.16 1414.16 3672.94 1414.16 c
-3652.6 1414.16 3638.92 1404.97 3638.92 1391.46 c
-3638.92 1383.9 3643.24 1379.58 3650.62 1379.58 c
-3657.82 1379.58 3662.86 1383.9 3662.86 1390.02 c
-3662.86 1392.54 3661.96 1394.88 3659.62 1397.76 c
-3658 1399.56 3657.46 1400.64 3657.46 1401.72 c
-3657.46 1405.5 3662.32 1408.16 3668.8 1408.16 c
-3679.42 1408.16 3684 1403.37 3684 1392.54 c
-3684 1379.4 l
-3662.89 1372.92 3654.41 1369.68 3647.56 1365.18 c
-3639.46 1359.78 3636 1353.48 3636 1345.56 c
-3636 1334.58 3644.07 1326.48 3655.3 1326.48 c
-3665.74 1326.48 3674.02 1330.08 3683.92 1339.08 c
-3685.9 1329.9 3689.86 1326.48 3698.68 1326.48 c
-3706.42 1326.48 3712 1329.36 3718.84 1336.74 c
-h
-3684 1347 m
-3679.04 1341.42 3675.37 1339.26 3670.96 1339.26 c
-3665.56 1339.26 3662 1344.12 3662 1351.32 c
-3662 1361.76 3669.57 1369.14 3684 1373.1 c
-h
-3721 1329 m
-f*
-3758.46 1412 m
-3723.73 1412 l
-3723.73 1407.66 l
-3731.65 1406.58 3734 1404.42 3734 1397.04 c
-3734 1344.12 l
-3734 1336.74 3731.95 1334.76 3723.73 1333.32 c
-3723.73 1329 l
-3766.93 1329 l
-3766.93 1333.32 l
-3760.63 1334.22 3759 1336.74 3759 1343.58 c
-3759 1391.64 l
-3759 1392.54 3761.51 1395.78 3763.51 1397.76 c
-3767.29 1400.64 3770.53 1402.16 3773.77 1402.16 c
-3780.79 1402.16 3784 1398 3784 1387.14 c
-3784 1343.58 l
-3784 1336.2 3781.9 1333.86 3774.85 1333.32 c
-3774.85 1329 l
-3816.97 1329 l
-3816.97 1333.32 l
-3810.67 1334.04 3809 1336.74 3809 1343.58 c
-3809 1391.64 l
-3809 1392.54 3811.43 1395.6 3813.37 1397.58 c
-3817.33 1400.64 3820.57 1402.16 3823.81 1402.16 c
-3830.65 1402.16 3833 1397.82 3833 1387.14 c
-3833 1343.58 l
-3833 1336.02 3831.1 1333.86 3824.53 1333.32 c
-3824.53 1329 l
-3867.37 1329 l
-3867.37 1333 l
-3860.35 1333.37 3858 1335.6 3858 1343.58 c
-3858 1388.76 l
-3858 1404.24 3848.6 1414.16 3834.07 1414.16 c
-3823.81 1414.16 3816.97 1410.01 3807.61 1398.48 c
-3802.21 1409.82 3795.91 1414.16 3784.57 1414.16 c
-3773.2 1414.16 3765.21 1409.29 3758.46 1398.48 c
-h
-3870.94 1329 m
-f*
-3943.36 1351.5 m
-3935.98 1342.68 3930.58 1339.48 3922.84 1339.48 c
-3916 1339.48 3910.6 1342.53 3907 1348.62 c
-3903.58 1354.36 3902.14 1360.45 3901.42 1373 c
-3946.78 1373 l
-3945.7 1387.99 3943 1396.3 3937.42 1403.34 c
-3931.66 1410.36 3923.2 1414.16 3913.12 1414.16 c
-3890.62 1414.16 3875.5 1396.33 3875.5 1370.04 c
-3875.5 1343.76 3890.26 1326.48 3912.58 1326.48 c
-3927.16 1326.48 3935.98 1332.06 3947.68 1348.98 c
-h
-3900.52 1380 m
-3901.06 1401.42 3904.3 1408.16 3913.12 1408.16 c
-3918.34 1408.16 3921.58 1405.42 3923.02 1400.1 c
-3923.92 1396.68 3924.28 1391.64 3924.64 1382.46 c
-3924.64 1380 l
-h
-3950.92 1329 m
-f*
-1 i
-2765.75 1294.55 1184.4 15.5999 re
-f
-1 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-f*
-0 g
-3371.75 1520.15 m
-3538.55 1673.75 l
-3455.75 1673.75 l
-3455.75 1824.95 l
-3290.15 1824.95 l
-3290.15 1673.75 l
-3208.55 1673.75 l
-3371.75 1520.15 l
-3371.75 1533.35 l
-3233.75 1662.95 l
-3299.75 1662.95 l
-3299.75 1814.15 l
-3446.15 1814.15 l
-3446.15 1662.95 l
-3513.35 1662.95 l
-3371.75 1533.35 l
-3371.75 1520.15 l
-f*
-0.201248 i
-1610.33 1522 m
-1496.22 1522 l
-1496.22 1517 l
-1510.11 1516.2 1514 1513.18 1514 1502.72 c
-1514 1405.32 l
-1514 1394.85 1511.17 1392.64 1496.22 1391.03 c
-1496.22 1386 l
-1568.67 1386 l
-1568.67 1391 l
-1550.15 1391.81 1547 1394.23 1547 1405.32 c
-1547 1452.21 l
-1567.22 1451.81 1574.55 1444.36 1577.32 1421.02 c
-1582.35 1421.02 l
-1582.35 1489.04 l
-1577.32 1489.04 l
-1573.76 1466.1 1566.82 1459.05 1547 1459.05 c
-1547 1505.74 l
-1547 1513.19 1549.52 1515 1559.41 1515 c
-1578.13 1515 1589.8 1511.64 1596.04 1504.74 c
-1600.47 1499.71 1602.68 1494.27 1605.5 1481.59 c
-1610.33 1481.59 l
-h
-1615.96 1386 m
-f*
-1659.19 1479 m
-1620.84 1479 l
-1620.84 1473.95 l
-1629.49 1472.74 1632 1470.12 1632 1462.07 c
-1632 1402.9 l
-1632 1394.65 1629.93 1392.44 1620.84 1390.83 c
-1620.84 1386 l
-1674.37 1386 l
-1674.37 1390.83 l
-1662.09 1391.63 1660 1394.25 1660 1406.73 c
-1660 1444.76 l
-1660 1455.23 1665.49 1463.88 1671.95 1463.88 c
-1673.56 1463.88 1675.37 1462.47 1677.59 1459.25 c
-1681.41 1453.82 1684.43 1452.01 1689.66 1452.01 c
-1697.11 1452.01 1702.34 1457.64 1702.34 1465.29 c
-1702.34 1474.55 1695.5 1481.41 1686.04 1481.41 c
-1676.1 1481.41 1668.54 1476.12 1659.19 1462.27 c
-h
-1704.35 1386 m
-f*
-1799.19 1398.88 m
-1797.18 1396.87 l
-1796.57 1396.26 1795.97 1396.06 1794.96 1396.06 c
-1792.15 1396.06 1791 1397.67 1791 1401.09 c
-1791 1453.62 l
-1791 1470.73 1775.6 1481.42 1750.89 1481.42 c
-1728.15 1481.42 1712.85 1471.06 1712.85 1455.83 c
-1712.85 1447.38 1717.69 1442.55 1725.94 1442.55 c
-1733.99 1442.55 1739.62 1447.38 1739.62 1454.22 c
-1739.62 1457.04 1738.61 1459.66 1736 1462.88 c
-1734.19 1464.89 1733.58 1466.1 1733.58 1467.3 c
-1733.58 1471.53 1739.02 1474.42 1746.26 1474.42 c
-1758.14 1474.42 1763.86 1469.08 1763.86 1457.04 c
-1763.86 1442.35 l
-1739.91 1435.1 1730.29 1431.48 1722.51 1426.45 c
-1713.46 1420.41 1709 1413.37 1709 1404.52 c
-1709 1392.24 1718.27 1383.18 1731.17 1383.18 c
-1742.84 1383.18 1752.1 1387.21 1763.17 1397.27 c
-1765.38 1387.01 1769.81 1383.18 1779.67 1383.18 c
-1788.32 1383.18 1794.56 1386.4 1802.21 1394.65 c
-h
-1763 1406.13 m
-1757.55 1399.89 1753.52 1397.47 1748.68 1397.47 c
-1742.64 1397.47 1738 1402.91 1738 1410.96 c
-1738 1422.63 1746.61 1430.88 1763 1435.31 c
-h
-1804.62 1386 m
-f*
-1845.4 1479 m
-1806.7 1479 l
-1806.7 1473.95 l
-1815.55 1472.74 1818 1470.32 1818 1462.07 c
-1818 1402.9 l
-1818 1394.65 1815.74 1392.44 1806.7 1390.83 c
-1806.7 1386 l
-1855 1386 l
-1855 1390.83 l
-1847.95 1391.84 1846 1394.65 1846 1402.3 c
-1846 1456.03 l
-1846 1457.04 1848.87 1460.66 1851.18 1462.88 c
-1855.4 1466.1 1859.02 1468.42 1862.65 1468.42 c
-1870.5 1468.42 1874 1463.59 1874 1451 c
-1874 1402.3 l
-1874 1394.05 1871.68 1391.43 1863.85 1390.83 c
-1863.85 1386 l
-1910.95 1386 l
-1910.95 1390.83 l
-1903.9 1391.64 1902 1394.65 1902 1402.3 c
-1902 1456.03 l
-1902 1457.04 1904.73 1460.46 1906.92 1462.68 c
-1911.35 1466.1 1914.97 1468.42 1918.59 1468.42 c
-1926.24 1468.42 1929 1463.38 1929 1451 c
-1929 1402.3 l
-1929 1393.85 1926.85 1391.43 1919.4 1390.83 c
-1919.4 1386 l
-1967.3 1386 l
-1967.3 1391 l
-1959.45 1391.4 1957 1393.78 1957 1402.3 c
-1957 1452.81 l
-1957 1470.12 1946.43 1481.42 1930.07 1481.42 c
-1918.59 1481.42 1910.95 1476.73 1900.48 1463.68 c
-1894.44 1476.36 1887.4 1481.42 1874.72 1481.42 c
-1861.95 1481.42 1852.98 1475.91 1845.4 1463.68 c
-h
-1970.64 1386 m
-f*
-2050.9 1411.16 m
-2042.65 1401.29 2036.61 1397.18 2027.96 1397.18 c
-2020.31 1397.18 2014.27 1400.77 2010.25 1407.94 c
-2006.43 1414.54 2004.82 1421.56 2004.01 1436 c
-2054.73 1436 l
-2053.52 1452.36 2050.5 1461.43 2044.26 1469.12 c
-2037.82 1476.96 2028.36 1481.42 2017.09 1481.42 c
-1991.94 1481.42 1975.03 1461.4 1975.03 1431.88 c
-1975.03 1402.5 1991.53 1383.18 2016.49 1383.18 c
-2032.79 1383.18 2042.65 1389.42 2055.73 1408.34 c
-h
-2003 1443 m
-2003.61 1466.96 2007.23 1474.42 2017.09 1474.42 c
-2022.93 1474.42 2026.55 1471.38 2028.16 1465.49 c
-2029.17 1461.67 2029.57 1456.03 2029.97 1445.77 c
-2029.97 1443 l
-h
-2059.35 1386 m
-f*
-2156.16 1481.59 m
-2156.16 1525.22 l
-2150.37 1525.22 l
-2148.96 1519.82 2147.55 1518.42 2143.93 1518.42 c
-2142.12 1518.42 2139.7 1519.03 2135.47 1520.43 c
-2126.22 1523.86 2119.78 1525.02 2111.93 1525.02 c
-2084.56 1525.02 2068 1509.54 2068 1484.01 c
-2068 1478.98 2068.75 1474.75 2070.07 1470.73 c
-2074.29 1460.06 2085.16 1450.6 2102.27 1442.35 c
-2115.75 1435.91 l
-2133.46 1427.46 2138 1422.22 2138 1411.56 c
-2138 1397.67 2128.25 1389.18 2112.94 1389.18 c
-2101.26 1389.18 2091.6 1393.89 2083.96 1403.31 c
-2078.12 1410.75 2075.3 1417.6 2071.88 1431.88 c
-2066.04 1431.88 l
-2066.04 1382.18 l
-2071.88 1382.18 l
-2073.09 1387.41 2074.7 1389.02 2077.92 1389.02 c
-2079.53 1389.02 2081.74 1388.42 2086.17 1387.01 c
-2096.03 1383.59 2103.48 1382.18 2112.33 1382.18 c
-2142.12 1382.18 2162 1399.28 2162 1424.64 c
-2162 1439.73 2153.04 1454.83 2140.1 1461.27 c
-2110.52 1475.96 l
-2094.22 1484.01 2090 1488.84 2090 1498.7 c
-2090 1511.18 2098.37 1518.02 2111.93 1518.02 c
-2120.99 1518.02 2129.44 1514.47 2136.68 1507.55 c
-2143.53 1500.51 2146.75 1494.67 2150.77 1481.59 c
-h
-2170.89 1386 m
-f*
-2249.9 1411.16 m
-2241.65 1401.29 2235.61 1397.18 2226.96 1397.18 c
-2219.31 1397.18 2213.27 1400.77 2209.25 1407.94 c
-2205.43 1414.54 2203.82 1421.56 2203.01 1436 c
-2253.73 1436 l
-2252.52 1452.36 2249.5 1461.43 2243.26 1469.12 c
-2236.82 1476.96 2227.36 1481.42 2216.09 1481.42 c
-2190.94 1481.42 2174.03 1461.4 2174.03 1431.88 c
-2174.03 1402.5 2190.53 1383.18 2215.49 1383.18 c
-2231.79 1383.18 2241.65 1389.42 2254.73 1408.34 c
-h
-2202 1443 m
-2202.61 1466.96 2206.23 1474.42 2216.09 1474.42 c
-2221.93 1474.42 2225.55 1471.38 2227.16 1465.49 c
-2228.17 1461.67 2228.57 1456.03 2228.97 1445.77 c
-2228.97 1443 l
-h
-2258.35 1386 m
-f*
-2319.38 1479 m
-2300 1479 l
-2300 1512.79 l
-2295.43 1512.79 l
-2283.16 1495.48 2275.11 1486.42 2262.02 1475.35 c
-2262.02 1470 l
-2272 1470 l
-2272 1404.72 l
-2272 1391.64 2280.84 1383.59 2295.03 1383.59 c
-2308.51 1383.59 2316.56 1389.62 2324.81 1406.12 c
-2319.78 1408.34 l
-2315.76 1400.69 2312.54 1397.59 2308.31 1397.59 c
-2302.68 1397.59 2300 1401.09 2300 1409.34 c
-2300 1470 l
-2319.38 1470 l
-h
-2325.02 1386 m
-f*
-2375.31 1386 m
-f*
-2378.22 1522 m
-2378.22 1517 l
-2392.11 1516.2 2396 1512.98 2396 1502.72 c
-2396 1405.32 l
-2396 1395.06 2392.97 1392.64 2378.22 1391.03 c
-2378.22 1386 l
-2443.02 1386 l
-2477.03 1386 2500 1401.09 2500 1423.83 c
-2500 1433.09 2496.03 1441.14 2488.71 1447.38 c
-2481.66 1453.62 2474.82 1456.44 2460.73 1459.46 c
-2484.08 1466.3 2493 1474.55 2493 1489.84 c
-2493 1510.57 2474.39 1522 2440.41 1522 c
-h
-2428 1455.03 m
-2434.17 1455.03 l
-2454.9 1455.03 2465 1444.36 2465 1422.02 c
-2465 1402.5 2456.73 1393 2440.41 1393 c
-2431.55 1393 2428 1396.26 2428 1404.72 c
-h
-2428 1506.15 m
-2428 1513.39 2430.85 1516 2439 1516 c
-2453.08 1516 2460 1507.35 2460 1488.44 c
-2460 1467.3 2453.23 1461.67 2428 1461.07 c
-h
-2509.23 1386 m
-f*
-1 i
-0.564706 g
-2228.15 4743.35 m
-2030.15 4823.75 l
-2170.55 4948.55 l
-1944.95 4966.55 l
-2007.35 5121.35 l
-1790.15 5075.75 l
-1763.75 5236.55 l
-1586.15 5135.75 l
-1475.75 5276.15 l
-1364.15 5135.75 l
-1186.55 5236.55 l
-1160.15 5075.75 l
-940.55 5121.35 l
-1005.35 4966.55 l
-778.55 4948.55 l
-920.15 4823.75 l
-720.95 4743.35 l
-920.15 4666.55 l
-778.55 4540.55 l
-1005.35 4523.75 l
-940.55 4368.95 l
-1160.15 4413.35 l
-1186.55 4253.75 l
-1364.15 4353.35 l
-1475.75 4212.95 l
-1586.15 4353.35 l
-1763.75 4253.75 l
-1790.15 4413.35 l
-2007.35 4368.95 l
-1944.95 4523.75 l
-2170.55 4540.55 l
-2030.15 4666.55 l
-f*
-1 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-f*
-0 g
-2168.15 4803.35 m
-1970.15 4883.75 l
-2110.55 5008.55 l
-1884.95 5026.55 l
-1947.35 5181.35 l
-1730.15 5135.75 l
-1703.75 5296.55 l
-1526.15 5195.75 l
-1415.75 5336.15 l
-1304.15 5195.75 l
-1126.55 5296.55 l
-1100.15 5135.75 l
-880.55 5181.35 l
-945.35 5026.55 l
-718.55 5008.55 l
-860.15 4883.75 l
-660.95 4803.35 l
-860.15 4726.55 l
-718.55 4600.55 l
-945.35 4583.75 l
-880.55 4428.95 l
-1100.15 4473.35 l
-1126.55 4313.75 l
-1304.15 4413.35 l
-1415.75 4272.95 l
-1526.15 4413.35 l
-1703.75 4313.75 l
-1730.15 4473.35 l
-1947.35 4428.95 l
-1884.95 4583.75 l
-2110.55 4600.55 l
-1970.15 4726.55 l
-2168.15 4803.35 l
-2060.15 4804.55 l
-1894.55 4739.75 l
-2014.55 4632.95 l
-1827.35 4618.55 l
-1882.55 4481.75 l
-1697.75 4521.35 l
-1673.75 4376.15 l
-1516.55 4464.95 l
-1415.75 4337.75 l
-1313.75 4464.95 l
-1156.55 4376.15 l
-1132.55 4521.35 l
-946.55 4481.75 l
-1001.75 4618.55 l
-814.55 4632.95 l
-934.55 4739.75 l
-770.15 4804.55 l
-934.55 4870.55 l
-814.55 4976.15 l
-1001.75 4990.55 l
-946.55 5127.35 l
-1132.55 5088.95 l
-1156.55 5232.95 l
-1313.75 5144.15 l
-1415.75 5272.55 l
-1516.55 5144.15 l
-1673.75 5232.95 l
-1697.75 5088.95 l
-1882.55 5127.35 l
-1827.35 4990.55 l
-2014.55 4976.15 l
-1894.55 4870.55 l
-2060.15 4804.55 l
-2168.15 4803.35 l
-f*
-0.201248 i
-1328.58 5044 m
-1289.34 5044 l
-1289.34 5038.6 l
-1300.41 5037.6 1302.22 5036.39 1306.04 5027.54 c
-1281.89 4944.82 l
-1274.04 4918.46 1272.64 4916.24 1261.57 4914.03 c
-1261.57 4909 l
-1303.43 4909 l
-1303.43 4914.03 l
-1291.55 4915.04 1287.33 4918.06 1287.33 4925.91 c
-1287.33 4929.73 1288.53 4936.37 1290.95 4944.82 c
-1310.87 5016.47 l
-1362.59 4905.98 l
-1368.23 4905.98 l
-1397.01 5007.81 l
-1404.86 5034.38 1405.86 5035.99 1417.53 5038.6 c
-1417.53 5044 l
-1375.47 5044 l
-1375.47 5038.6 l
-1387.35 5037.6 1391.57 5034.38 1391.57 5026.73 c
-1391.57 5022.91 1390.16 5016.06 1387.95 5007.81 c
-1371.85 4950.05 l
-h
-1412.3 4909 m
-f*
-1475.8 4937.58 m
-1466.54 4923.69 1460.7 4919.38 1452.05 4919.38 c
-1443.6 4919.38 1439 4924.98 1439 4935.77 c
-1439 4938.99 1439.46 4941.6 1440.38 4945.63 c
-1461.31 4949.65 1471.17 4954.08 1481.23 4963.34 c
-1488.27 4969.78 1492 4977.22 1492 4984.47 c
-1492 4994.73 1483.19 5001.62 1470.97 5001.62 c
-1441.79 5001.62 1413 4968.99 1413 4935.97 c
-1413 4918.86 1425.88 4906.38 1443.4 4906.38 c
-1458.89 4906.38 1469.56 4914.23 1481.63 4934.16 c
-h
-1441.79 4952.07 m
-1449.03 4980.04 1458.29 4994.62 1467.95 4994.62 c
-1471.77 4994.62 1473 4992.64 1473 4988.49 c
-1473 4979.64 1469.78 4970.98 1463.72 4964.34 c
-1458.29 4958.51 1453.26 4955.69 1441.79 4952.07 c
-h
-1501.35 4909 m
-f*
-1504.22 4990.91 m
-1509.25 4990.91 1510.86 4990.71 1512.47 4989.3 c
-1516.7 4986.08 1519.52 4967.16 1520.12 4939.19 c
-1520.52 4923.49 l
-1520.52 4922.48 l
-1520.52 4922.28 1520.52 4919.26 1520.32 4915.44 c
-1520.12 4906.38 l
-1525.55 4906.38 l
-1537.02 4923.69 l
-1545.28 4937.58 1552.92 4951.06 1559.77 4963.74 c
-1564.39 4906.38 l
-1569.83 4906.38 l
-1607.06 4945.83 1624 4972.59 1624 4989.5 c
-1624 4996.14 1618.63 5001.62 1612.29 5001.62 c
-1606.25 5001.62 1601.02 4996.15 1601.02 4989.9 c
-1601.02 4986.88 1602.23 4984.27 1605.25 4980.04 c
-1608.06 4976.22 1609 4973.6 1609 4971.59 c
-1609 4965.55 1602.83 4955.89 1585.32 4935.16 c
-1578.88 5001.62 l
-1573.45 5001.62 l
-1556.55 4972.63 1553.33 4966.83 1542.06 4946.63 c
-1541.45 4971.59 1540.04 4984.67 1535.41 5001.98 c
-1527.16 5000.17 1520.92 4999.16 1504.22 4996.34 c
-h
-1635.23 4909 m
-f*
-1215.46 4781.9 m
-1190.3 4688.52 l
-1187.08 4677.65 1183.26 4674.84 1170.18 4674.03 c
-1170.18 4669 l
-1232.97 4669 l
-1232.97 4674 l
-1221.3 4674.61 1218.48 4676.22 1218.48 4682.69 c
-1218.48 4684.9 1218.88 4687.11 1220.09 4691.74 c
-1220.29 4692.75 l
-1220.49 4693.75 l
-1245.24 4784.11 l
-1248.26 4794.58 1251.28 4797.4 1261.55 4798.6 c
-1261.55 4804 l
-1218.88 4804 l
-1156.49 4707.04 l
-1145.63 4804 l
-1101.15 4804 l
-1101.15 4799 l
-1113.83 4798.36 1115.64 4797.51 1115.64 4791.56 c
-1115.64 4788.74 1114.84 4785.12 1113.43 4779.89 c
-1091.49 4704.82 l
-1083.44 4678.66 1082.03 4676.45 1071.16 4674.03 c
-1071.16 4669 l
-1112.82 4669 l
-1112.82 4674.03 l
-1099.94 4675.64 1096.72 4678.06 1096.72 4686.31 c
-1096.72 4689.73 1097.73 4694.76 1100.55 4704.82 c
-1120.87 4779.08 l
-1134.36 4666.59 l
-1139.99 4666.59 l
-h
-1255.91 4669 m
-f*
-1342.34 4694.56 m
-1334.09 4683.49 1331.07 4680.18 1327.85 4680.18 c
-1326.24 4680.18 1326 4681.51 1326 4683.49 c
-1326 4688.52 1327.66 4696.77 1332.28 4713.27 c
-1346.57 4760.77 l
-1324.23 4759.36 l
-1320.61 4747.49 l
-1318.8 4757.75 1314.37 4761.62 1305.71 4761.62 c
-1280.96 4761.62 1251 4723.18 1251 4691.94 c
-1251 4676.65 1259.56 4666.38 1272.51 4666.38 c
-1284.78 4666.38 1294.04 4673.63 1305.51 4692.95 c
-1303.1 4684.7 1303 4682.28 1303 4679.47 c
-1303 4672.02 1308.9 4666.18 1316.18 4666.18 c
-1325.64 4666.18 1334.89 4674.03 1346.57 4691.54 c
-h
-1308.53 4753.52 m
-1312.96 4753.12 1316.28 4749.5 1316.28 4744.07 c
-1316.28 4731.99 1309.5 4709.65 1301.49 4695.77 c
-1296.05 4685.91 1290.02 4680.38 1284.58 4680.38 c
-1279.35 4680.38 1276 4685.14 1276 4691.54 c
-1276 4702 1282.43 4722.13 1290.42 4737.02 c
-1296.46 4747.69 1303.1 4753.93 1308.53 4753.52 c
-h
-1355.62 4669 m
-f*
-1398.47 4761.98 m
-1377.94 4758.76 1370.09 4757.55 1359.63 4756.34 c
-1359.63 4751 l
-1368.68 4750.59 1370.5 4749.77 1370.5 4745.88 c
-1370.5 4743.86 1368.89 4736.62 1366.07 4726.15 c
-1345.94 4648.07 l
-1342.12 4634.79 1340.51 4632.8 1330.85 4633 c
-1330.85 4627 l
-1380.96 4627 l
-1380.96 4633 l
-1370.9 4633.21 1367.88 4634.65 1367.88 4639.62 c
-1367.88 4642.44 1369.29 4648.47 1373.11 4662.56 c
-1374.52 4667.39 1374.52 4667.79 1375.33 4670.81 c
-1382.37 4667.19 1384.78 4666.38 1389.01 4666.38 c
-1416.38 4666.38 1444.76 4702.81 1444.76 4737.63 c
-1444.76 4752.52 1436.3 4761.62 1423.02 4761.62 c
-1411.55 4761.62 1402.7 4755.28 1390.82 4738.83 c
-h
-1411.75 4747.69 m
-1416.98 4747.29 1420 4742.66 1419.6 4736.22 c
-1418.8 4722.93 1412.36 4703.01 1405.11 4689.93 c
-1398.87 4679.06 1392.43 4673.38 1385.59 4673.38 c
-1381.16 4673.38 1377.74 4676.62 1377.74 4680.67 c
-1377.74 4684.09 1379.95 4692.34 1385.39 4710.66 c
-1389.82 4725.35 1391.63 4730.38 1394.65 4735.01 c
-1399.68 4742.86 1406.52 4748.09 1411.75 4747.69 c
-h
-1455.62 4669 m
-f*
-1498.47 4761.98 m
-1477.94 4758.76 1470.09 4757.55 1459.63 4756.34 c
-1459.63 4751 l
-1468.68 4750.59 1470.5 4749.77 1470.5 4745.88 c
-1470.5 4743.86 1468.89 4736.62 1466.07 4726.15 c
-1445.94 4648.07 l
-1442.12 4634.79 1440.51 4632.8 1430.85 4633 c
-1430.85 4627 l
-1480.96 4627 l
-1480.96 4633 l
-1470.9 4633.21 1467.88 4634.65 1467.88 4639.62 c
-1467.88 4642.44 1469.29 4648.47 1473.11 4662.56 c
-1474.52 4667.39 1474.52 4667.79 1475.33 4670.81 c
-1482.37 4667.19 1484.78 4666.38 1489.01 4666.38 c
-1516.38 4666.38 1544.76 4702.81 1544.76 4737.63 c
-1544.76 4752.52 1536.3 4761.62 1523.02 4761.62 c
-1511.55 4761.62 1502.7 4755.28 1490.82 4738.83 c
-h
-1511.75 4747.69 m
-1516.98 4747.29 1520 4742.66 1519.6 4736.22 c
-1518.8 4722.93 1512.36 4703.01 1505.11 4689.93 c
-1498.87 4679.06 1492.43 4673.38 1485.59 4673.38 c
-1481.16 4673.38 1477.74 4676.62 1477.74 4680.67 c
-1477.74 4684.09 1479.95 4692.34 1485.39 4710.66 c
-1489.82 4725.35 1491.63 4730.38 1494.65 4735.01 c
-1499.68 4742.86 1506.52 4748.09 1511.75 4747.69 c
-h
-1555.62 4669 m
-f*
-1598.47 4697.38 m
-1595.65 4693.35 l
-1590.42 4685.5 1585.79 4681.19 1582.77 4681.19 c
-1581.16 4681.19 1580 4682.64 1580 4684.29 c
-1580 4686.11 1580.87 4691.34 1581.56 4694.76 c
-1599.88 4761.98 l
-1589.17 4759.56 1575.29 4757.55 1559.82 4756.34 c
-1559.82 4751 l
-1561.84 4751 l
-1567.88 4751 1571.7 4748.96 1571.7 4745.07 c
-1571.7 4743.46 1570.84 4740.44 1569.69 4737.02 c
-1558.02 4693.75 l
-1556.41 4687.92 1556 4682.69 1556 4679.87 c
-1556 4672.22 1561.39 4667.19 1569.29 4667.19 c
-1581.36 4667.19 1588.81 4673.23 1602.9 4694.56 c
-h
-1593.84 4807.02 m
-1587 4807.02 1581 4800.61 1581 4793.57 c
-1581 4785.72 1586.53 4780.02 1594.04 4780.02 c
-1601.69 4780.02 1608 4785.71 1608 4792.97 c
-1608 4800.42 1601.64 4807.02 1593.84 4807.02 c
-h
-1610.95 4669 m
-f*
-1705.79 4696.17 m
-1697.74 4683.69 1695.12 4681.19 1691.7 4681.19 c
-1690.09 4681.19 1689 4682.47 1689 4684.29 c
-1689 4686.31 1690.18 4690.53 1693.91 4701.8 c
-1701.16 4723.74 l
-1704.38 4733.2 1706 4742.05 1706 4746.88 c
-1706 4756.74 1700.91 4761.62 1691.7 4761.62 c
-1684.25 4761.62 1677.01 4758.73 1671.58 4753.73 c
-1664.13 4746.68 1660.31 4741.85 1646.82 4721.93 c
-1659.7 4761.78 l
-1646.82 4758.96 1630.72 4756.38 1619.45 4755.98 c
-1619.45 4751.04 l
-1627.9 4750.83 1630.32 4749.8 1630.32 4745.88 c
-1630.32 4743.46 1627.5 4732.8 1621.06 4710.05 c
-1616.43 4693.75 1615.02 4688.52 1609.79 4669 c
-1634.14 4669 l
-1643.6 4703.82 1650.85 4721.32 1663.32 4737.63 c
-1667.35 4743.06 1673.59 4747.62 1677.21 4747.62 c
-1679.83 4747.62 1682 4745.54 1682 4743.26 c
-1682 4742.66 1681.69 4741.05 1681.24 4739.03 c
-1670.17 4705.63 l
-1666.95 4695.97 1665 4684.5 1665 4679.26 c
-1665 4671.62 1669.86 4667.19 1678.22 4667.19 c
-1690.29 4667.19 1698.54 4674.03 1710.22 4693.55 c
-h
-1722.89 4669 m
-f*
-1818.2 4755 m
-1795.86 4755 l
-1789.02 4760.07 1782.98 4761.62 1773.72 4761.62 c
-1748.97 4761.62 1729 4745.48 1729 4725.35 c
-1729 4715.09 1734.25 4707.84 1745.14 4703.21 c
-1728.64 4693.96 1726 4691.14 1726 4683.69 c
-1726 4677.25 1729.57 4673.43 1738.3 4670.41 c
-1725.82 4667.39 1721.8 4665.78 1716.97 4661.96 c
-1713.75 4659.14 1711 4654.31 1711 4649.48 c
-1711 4636.4 1725.9 4628 1749.37 4628 c
-1777.75 4628 1798 4640.54 1798 4658.33 c
-1798 4670.61 1789.81 4677.25 1767.48 4683.49 c
-1756.82 4686.51 l
-1750.38 4688.32 1747 4691.14 1747 4694.16 c
-1747 4697.38 1749.78 4700.61 1752.19 4700.61 c
-1753.19 4700.61 1754.6 4700.61 1756.21 4700.6 c
-1758.43 4699.99 1760.04 4699 1762.45 4699 c
-1771.31 4699 1780.36 4701.69 1788.01 4706.63 c
-1799.68 4713.27 1806 4723.54 1806 4735.61 c
-1806 4738.81 1805.57 4740.8 1804.71 4744 c
-1818.2 4744 l
-h
-1745.14 4667.79 m
-1747.56 4667.59 1762.85 4662.36 1767.28 4660.35 c
-1772.92 4657.53 1776 4654.11 1776 4648.88 c
-1776 4640.02 1766.97 4635 1751.38 4635 c
-1738.3 4635 1729 4641.44 1729 4650.69 c
-1729 4654.51 1730.83 4657.93 1734.88 4661.76 c
-1737.5 4664.37 1743.53 4667.99 1745.14 4667.79 c
-h
-1773.32 4754.62 m
-1778.55 4754.62 1782 4750.24 1782 4743.86 c
-1782 4737.02 1779.74 4727.36 1776.54 4719.92 c
-1772.31 4710.66 1767.08 4706 1760.84 4706 c
-1755.41 4706 1752 4710.24 1752 4717.9 c
-1752 4725.95 1755.6 4738.23 1760.04 4745.88 c
-1763.86 4752.52 1768.09 4754.62 1773.32 4754.62 c
-h
-1822.62 4669 m
-f*
-1 i
-32 w
-1580.15 6552.95 m
-1512.95 6454.55 1457.75 6062.15 1438.55 5537.75 c
-S
-1361.75 5567.75 m
-1438.55 5532.95 l
-1517.75 5561.75 l
-1432.55 5316.95 l
-f*
-1110.95 4252.55 m
-1026.95 4064.15 982.55 3862.55 982.55 3657.35 c
-982.55 2787.35 1758.95 2079.35 2723.75 2069.75 c
-S
-2663.75 1992.95 m
-2693.75 2070.95 l
-2661.35 2148.95 l
-2909.75 2075.75 l
-f*
-0.201248 i
-4161.33 5063 m
-4047.22 5063 l
-4047.22 5058 l
-4061.11 5057.2 4065 5054.18 4065 5043.72 c
-4065 4946.32 l
-4065 4935.85 4062.17 4933.64 4047.22 4932.03 c
-4047.22 4927 l
-4119.67 4927 l
-4119.67 4932 l
-4101.15 4932.81 4098 4935.23 4098 4946.32 c
-4098 4993.21 l
-4118.22 4992.81 4125.55 4985.36 4128.32 4962.02 c
-4133.35 4962.02 l
-4133.35 5030.04 l
-4128.32 5030.04 l
-4124.76 5007.1 4117.82 5000.05 4098 5000.05 c
-4098 5046.74 l
-4098 5054.19 4100.52 5056 4110.41 5056 c
-4129.13 5056 4140.8 5052.64 4147.04 5045.74 c
-4151.47 5040.71 4153.68 5035.27 4156.5 5022.59 c
-4161.33 5022.59 l
-h
-4166.96 4927 m
-f*
-4210.19 5020 m
-4171.84 5020 l
-4171.84 5014.95 l
-4180.49 5013.74 4183 5011.12 4183 5003.07 c
-4183 4943.9 l
-4183 4935.65 4180.93 4933.44 4171.84 4931.83 c
-4171.84 4927 l
-4225.37 4927 l
-4225.37 4931.83 l
-4213.09 4932.63 4211 4935.25 4211 4947.73 c
-4211 4985.76 l
-4211 4996.23 4216.49 5004.88 4222.95 5004.88 c
-4224.56 5004.88 4226.37 5003.47 4228.59 5000.25 c
-4232.41 4994.82 4235.43 4993.01 4240.66 4993.01 c
-4248.11 4993.01 4253.34 4998.64 4253.34 5006.29 c
-4253.34 5015.55 4246.5 5022.41 4237.04 5022.41 c
-4227.1 5022.41 4219.54 5017.12 4210.19 5003.27 c
-h
-4255.35 4927 m
-f*
-4350.19 4939.88 m
-4348.18 4937.87 l
-4347.57 4937.26 4346.97 4937.06 4345.96 4937.06 c
-4343.15 4937.06 4342 4938.67 4342 4942.09 c
-4342 4994.62 l
-4342 5011.73 4326.6 5022.42 4301.89 5022.42 c
-4279.15 5022.42 4263.85 5012.06 4263.85 4996.83 c
-4263.85 4988.38 4268.69 4983.55 4276.94 4983.55 c
-4284.99 4983.55 4290.62 4988.38 4290.62 4995.22 c
-4290.62 4998.04 4289.61 5000.66 4287 5003.88 c
-4285.19 5005.89 4284.58 5007.1 4284.58 5008.3 c
-4284.58 5012.53 4290.02 5015.42 4297.26 5015.42 c
-4309.14 5015.42 4314.86 5010.08 4314.86 4998.04 c
-4314.86 4983.35 l
-4290.91 4976.1 4281.29 4972.48 4273.51 4967.45 c
-4264.46 4961.41 4260 4954.37 4260 4945.52 c
-4260 4933.24 4269.27 4924.18 4282.17 4924.18 c
-4293.84 4924.18 4303.1 4928.21 4314.17 4938.27 c
-4316.38 4928.01 4320.81 4924.18 4330.67 4924.18 c
-4339.32 4924.18 4345.56 4927.4 4353.21 4935.65 c
-h
-4314 4947.13 m
-4308.55 4940.89 4304.52 4938.47 4299.68 4938.47 c
-4293.64 4938.47 4289 4943.91 4289 4951.96 c
-4289 4963.63 4297.61 4971.88 4314 4976.31 c
-h
-4355.62 4927 m
-f*
-4397.4 5020 m
-4358.7 5020 l
-4358.7 5014.95 l
-4367.55 5013.74 4370 5011.32 4370 5003.07 c
-4370 4943.9 l
-4370 4935.65 4367.74 4933.44 4358.7 4931.83 c
-4358.7 4927 l
-4407 4927 l
-4407 4931.83 l
-4399.95 4932.84 4398 4935.65 4398 4943.3 c
-4398 4997.03 l
-4398 4998.04 4400.87 5001.66 4403.18 5003.88 c
-4407.4 5007.1 4411.02 5009.42 4414.65 5009.42 c
-4422.5 5009.42 4426 5004.59 4426 4992 c
-4426 4943.3 l
-4426 4935.05 4423.68 4932.43 4415.85 4931.83 c
-4415.85 4927 l
-4462.95 4927 l
-4462.95 4931.83 l
-4455.9 4932.64 4454 4935.65 4454 4943.3 c
-4454 4997.03 l
-4454 4998.04 4456.73 5001.46 4458.92 5003.68 c
-4463.35 5007.1 4466.97 5009.42 4470.59 5009.42 c
-4478.24 5009.42 4481 5004.38 4481 4992 c
-4481 4943.3 l
-4481 4934.85 4478.85 4932.43 4471.4 4931.83 c
-4471.4 4927 l
-4519.3 4927 l
-4519.3 4932 l
-4511.45 4932.4 4509 4934.78 4509 4943.3 c
-4509 4993.81 l
-4509 5011.12 4498.43 5022.42 4482.07 5022.42 c
-4470.59 5022.42 4462.95 5017.73 4452.48 5004.68 c
-4446.44 5017.36 4439.4 5022.42 4426.72 5022.42 c
-4413.95 5022.42 4404.98 5016.91 4397.4 5004.68 c
-h
-4522.64 4927 m
-f*
-4601.9 4952.16 m
-4593.65 4942.29 4587.61 4938.18 4578.96 4938.18 c
-4571.31 4938.18 4565.27 4941.77 4561.25 4948.94 c
-4557.43 4955.54 4555.82 4962.56 4555.01 4977 c
-4605.73 4977 l
-4604.52 4993.36 4601.5 5002.43 4595.26 5010.12 c
-4588.82 5017.96 4579.36 5022.42 4568.09 5022.42 c
-4542.94 5022.42 4526.03 5002.4 4526.03 4972.88 c
-4526.03 4943.5 4542.53 4924.18 4567.49 4924.18 c
-4583.79 4924.18 4593.65 4930.42 4606.73 4949.34 c
-h
-4554 4984 m
-4554.61 5007.96 4558.23 5015.42 4568.09 5015.42 c
-4573.93 5015.42 4577.55 5012.38 4579.16 5006.49 c
-4580.17 5002.67 4580.57 4997.03 4580.97 4986.77 c
-4580.97 4984 l
-h
-4610.35 4927 m
-f*
-4707.16 5022.59 m
-4707.16 5066.22 l
-4701.37 5066.22 l
-4699.96 5060.82 4698.55 5059.42 4694.93 5059.42 c
-4693.12 5059.42 4690.7 5060.03 4686.47 5061.43 c
-4677.22 5064.86 4670.78 5066.02 4662.93 5066.02 c
-4635.56 5066.02 4619 5050.54 4619 5025.01 c
-4619 5019.98 4619.75 5015.75 4621.07 5011.73 c
-4625.29 5001.06 4636.16 4991.6 4653.27 4983.35 c
-4666.75 4976.91 l
-4684.46 4968.46 4689 4963.22 4689 4952.56 c
-4689 4938.67 4679.25 4930.18 4663.94 4930.18 c
-4652.26 4930.18 4642.6 4934.89 4634.96 4944.31 c
-4629.12 4951.75 4626.3 4958.6 4622.88 4972.88 c
-4617.04 4972.88 l
-4617.04 4923.18 l
-4622.88 4923.18 l
-4624.09 4928.41 4625.7 4930.02 4628.92 4930.02 c
-4630.53 4930.02 4632.74 4929.42 4637.17 4928.01 c
-4647.03 4924.59 4654.48 4923.18 4663.33 4923.18 c
-4693.12 4923.18 4713 4940.28 4713 4965.64 c
-4713 4980.73 4704.04 4995.83 4691.1 5002.27 c
-4661.52 5016.96 l
-4645.22 5025.01 4641 5029.84 4641 5039.7 c
-4641 5052.18 4649.37 5059.02 4662.93 5059.02 c
-4671.99 5059.02 4680.44 5055.47 4687.68 5048.55 c
-4694.53 5041.51 4697.75 5035.67 4701.77 5022.59 c
-h
-4721.89 4927 m
-f*
-4801.9 4952.16 m
-4793.65 4942.29 4787.61 4938.18 4778.96 4938.18 c
-4771.31 4938.18 4765.27 4941.77 4761.25 4948.94 c
-4757.43 4955.54 4755.82 4962.56 4755.01 4977 c
-4805.73 4977 l
-4804.52 4993.36 4801.5 5002.43 4795.26 5010.12 c
-4788.82 5017.96 4779.36 5022.42 4768.09 5022.42 c
-4742.94 5022.42 4726.03 5002.4 4726.03 4972.88 c
-4726.03 4943.5 4742.53 4924.18 4767.49 4924.18 c
-4783.79 4924.18 4793.65 4930.42 4806.73 4949.34 c
-h
-4754 4984 m
-4754.61 5007.96 4758.23 5015.42 4768.09 5015.42 c
-4773.93 5015.42 4777.55 5012.38 4779.16 5006.49 c
-4780.17 5002.67 4780.57 4997.03 4780.97 4986.77 c
-4780.97 4984 l
-h
-4810.35 4927 m
-f*
-4870.38 5020 m
-4851 5020 l
-4851 5053.79 l
-4846.43 5053.79 l
-4834.16 5036.48 4826.11 5027.42 4813.02 5016.35 c
-4813.02 5011 l
-4823 5011 l
-4823 4945.72 l
-4823 4932.64 4831.84 4924.59 4846.03 4924.59 c
-4859.51 4924.59 4867.56 4930.62 4875.81 4947.12 c
-4870.78 4949.34 l
-4866.76 4941.69 4863.54 4938.59 4859.31 4938.59 c
-4853.68 4938.59 4851 4942.09 4851 4950.34 c
-4851 5011 l
-4870.38 5011 l
-h
-4876.02 4927 m
-f*
-4927.31 4927 m
-f*
-5064.66 4932.03 m
-5055.81 4932.03 5053.59 4934.85 5042.72 4960 c
-4997.85 5065.82 l
-4992.21 5065.82 l
-4947.53 4955.58 l
-4939.89 4936.66 4937.47 4933.84 4927.81 4932.03 c
-4927.81 4927 l
-4968.66 4927 l
-4968.66 4932.03 l
-4956.79 4932.84 4952.16 4935.05 4952.16 4940.28 c
-4952.16 4942.9 4953.57 4947.53 4958 4958.6 c
-4961.02 4967 l
-5006.3 4967 l
-5013.14 4950.9 5015.56 4943.76 5015.56 4939.28 c
-5015.56 4934.85 5012.94 4933.04 5005.9 4932.63 c
-4999.46 4932.03 l
-4999.46 4927 l
-5064.66 4927 l
-h
-4964.04 4975 m
-4982.95 5023.4 l
-5003.28 4975 l
-h
-5071.3 4927 m
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/fsremap.eps b/ast-5.3-1/sun211_figures/fsremap.eps
deleted file mode 100644
index a3d572a..0000000
--- a/ast-5.3-1/sun211_figures/fsremap.eps
+++ /dev/null
@@ -1,2532 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 107 245 551 547
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/10 17:51:58
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5506.55 5042.15 m
-5506.55 5244.95 5340.95 5410.55 5138.15 5410.55 c
-1500.95 5410.55 l
-1298.15 5410.55 1132.55 5244.95 1132.55 5042.15 c
-1132.55 2828.15 l
-1132.55 2625.35 1298.15 2459.75 1500.95 2459.75 c
-5138.15 2459.75 l
-5340.95 2459.75 5506.55 2625.35 5506.55 2828.15 c
-f*
-1 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-5441.75 5097.35 m
-5441.75 5300.15 5277.35 5464.55 5074.55 5464.55 c
-1445.75 5464.55 l
-1242.95 5464.55 1078.55 5300.15 1078.55 5097.35 c
-1078.55 2891.75 l
-1078.55 2688.95 1242.95 2524.55 1445.75 2524.55 c
-5074.55 2524.55 l
-5277.35 2524.55 5441.75 2688.95 5441.75 2891.75 c
-h
-S
-0.564706 g
-2262.95 5055.35 m
-2262.95 5165.75 2171.75 5256.95 2060.15 5256.95 c
-1563.35 5256.95 l
-1451.75 5256.95 1360.55 5165.75 1360.55 5055.35 c
-1360.55 4917.35 l
-1360.55 4806.95 1451.75 4715.75 1563.35 4715.75 c
-2060.15 4715.75 l
-2171.75 4715.75 2262.95 4806.95 2262.95 4917.35 c
-f*
-1 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-f*
-0 g
-2198.15 5112.95 m
-2198.15 5222.15 2109.35 5310.95 1997.75 5310.95 c
-1506.95 5310.95 l
-1396.55 5310.95 1306.55 5222.15 1306.55 5112.95 c
-1306.55 4978.55 l
-1306.55 4869.35 1395.35 4780.55 1506.95 4780.55 c
-1997.75 4780.55 l
-2109.35 4780.55 2198.15 4869.35 2198.15 4978.55 c
-h
-S
-0.201248 i
-1539.33 5152 m
-1425.22 5152 l
-1425.22 5147 l
-1439.11 5146.2 1443 5143.18 1443 5132.72 c
-1443 5035.32 l
-1443 5024.85 1440.17 5022.64 1425.22 5021.03 c
-1425.22 5016 l
-1497.67 5016 l
-1497.67 5021 l
-1479.15 5021.81 1476 5024.23 1476 5035.32 c
-1476 5082.21 l
-1496.22 5081.81 1503.55 5074.36 1506.32 5051.02 c
-1511.35 5051.02 l
-1511.35 5119.04 l
-1506.32 5119.04 l
-1502.76 5096.1 1495.82 5089.05 1476 5089.05 c
-1476 5135.74 l
-1476 5143.19 1478.52 5145 1488.41 5145 c
-1507.13 5145 1518.8 5141.64 1525.04 5134.74 c
-1529.47 5129.71 1531.68 5124.27 1534.5 5111.59 c
-1539.33 5111.59 l
-h
-1544.96 5016 m
-f*
-1589.19 5109 m
-1550.84 5109 l
-1550.84 5103.95 l
-1559.49 5102.74 1562 5100.12 1562 5092.07 c
-1562 5032.9 l
-1562 5024.65 1559.93 5022.44 1550.84 5020.83 c
-1550.84 5016 l
-1604.37 5016 l
-1604.37 5020.83 l
-1592.09 5021.63 1590 5024.25 1590 5036.73 c
-1590 5074.76 l
-1590 5085.23 1595.49 5093.88 1601.95 5093.88 c
-1603.56 5093.88 1605.37 5092.47 1607.59 5089.25 c
-1611.41 5083.82 1614.43 5082.01 1619.66 5082.01 c
-1627.11 5082.01 1632.34 5087.64 1632.34 5095.29 c
-1632.34 5104.55 1625.5 5111.41 1616.04 5111.41 c
-1606.1 5111.41 1598.54 5106.12 1589.19 5092.27 c
-h
-1634.35 5016 m
-f*
-1729.19 5028.88 m
-1727.18 5026.87 l
-1726.57 5026.26 1725.97 5026.06 1724.96 5026.06 c
-1722.15 5026.06 1721 5027.67 1721 5031.09 c
-1721 5083.62 l
-1721 5100.73 1705.6 5111.42 1680.89 5111.42 c
-1658.15 5111.42 1642.85 5101.06 1642.85 5085.83 c
-1642.85 5077.38 1647.69 5072.55 1655.94 5072.55 c
-1663.99 5072.55 1669.62 5077.38 1669.62 5084.22 c
-1669.62 5087.04 1668.61 5089.66 1666 5092.88 c
-1664.19 5094.89 1663.58 5096.1 1663.58 5097.3 c
-1663.58 5101.53 1669.02 5104.42 1676.26 5104.42 c
-1688.14 5104.42 1693.86 5099.08 1693.86 5087.04 c
-1693.86 5072.35 l
-1669.91 5065.1 1660.29 5061.48 1652.51 5056.45 c
-1643.46 5050.41 1639 5043.37 1639 5034.52 c
-1639 5022.24 1648.27 5013.18 1661.17 5013.18 c
-1672.84 5013.18 1682.1 5017.21 1693.17 5027.27 c
-1695.38 5017.01 1699.81 5013.18 1709.67 5013.18 c
-1718.32 5013.18 1724.56 5016.4 1732.21 5024.65 c
-h
-1693 5036.13 m
-1687.55 5029.89 1683.52 5027.47 1678.68 5027.47 c
-1672.64 5027.47 1668 5032.91 1668 5040.96 c
-1668 5052.63 1676.61 5060.88 1693 5065.31 c
-h
-1734.62 5016 m
-f*
-1776.4 5109 m
-1737.7 5109 l
-1737.7 5103.95 l
-1746.55 5102.74 1749 5100.32 1749 5092.07 c
-1749 5032.9 l
-1749 5024.65 1746.74 5022.44 1737.7 5020.83 c
-1737.7 5016 l
-1786 5016 l
-1786 5020.83 l
-1778.95 5021.84 1777 5024.65 1777 5032.3 c
-1777 5086.03 l
-1777 5087.04 1779.87 5090.66 1782.18 5092.88 c
-1786.4 5096.1 1790.02 5098.42 1793.65 5098.42 c
-1801.5 5098.42 1805 5093.59 1805 5081 c
-1805 5032.3 l
-1805 5024.05 1802.68 5021.43 1794.85 5020.83 c
-1794.85 5016 l
-1841.95 5016 l
-1841.95 5020.83 l
-1834.9 5021.64 1833 5024.65 1833 5032.3 c
-1833 5086.03 l
-1833 5087.04 1835.73 5090.46 1837.92 5092.68 c
-1842.35 5096.1 1845.97 5098.42 1849.59 5098.42 c
-1857.24 5098.42 1860 5093.38 1860 5081 c
-1860 5032.3 l
-1860 5023.85 1857.85 5021.43 1850.4 5020.83 c
-1850.4 5016 l
-1898.3 5016 l
-1898.3 5021 l
-1890.45 5021.4 1888 5023.78 1888 5032.3 c
-1888 5082.81 l
-1888 5100.12 1877.43 5111.42 1861.07 5111.42 c
-1849.59 5111.42 1841.95 5106.73 1831.48 5093.68 c
-1825.44 5106.36 1818.4 5111.42 1805.72 5111.42 c
-1792.95 5111.42 1783.98 5105.91 1776.4 5093.68 c
-h
-1901.64 5016 m
-f*
-1979.9 5041.16 m
-1971.65 5031.29 1965.61 5027.18 1956.96 5027.18 c
-1949.31 5027.18 1943.27 5030.77 1939.25 5037.94 c
-1935.43 5044.54 1933.82 5051.56 1933.01 5066 c
-1983.73 5066 l
-1982.52 5082.36 1979.5 5091.43 1973.26 5099.12 c
-1966.82 5106.96 1957.36 5111.42 1946.09 5111.42 c
-1920.94 5111.42 1904.03 5091.4 1904.03 5061.88 c
-1904.03 5032.5 1920.53 5013.18 1945.49 5013.18 c
-1961.79 5013.18 1971.65 5019.42 1984.73 5038.34 c
-h
-1932 5073 m
-1932.61 5096.96 1936.23 5104.42 1946.09 5104.42 c
-1951.93 5104.42 1955.55 5101.38 1957.16 5095.49 c
-1958.17 5091.67 1958.57 5086.03 1958.97 5075.77 c
-1958.97 5073 l
-h
-1988.35 5016 m
-f*
-q[1 0 0 1 0 0]concat
-54 97 true[1 0 0 1 -2032 -5016]@85 imagemask
-J,fQKs8W"Hs8W-!
-s87BHs8W-!qud!!s8W&u!"],0s6p!g"98E$^]4?8s8W+L!!!$!s8N'!!!%NKrr<$!!.Y%KzJ,fKJ
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z
-5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`
-s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`
-rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_
-!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu
-!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!#7`rVuou!'gM_z5QC]_!!!!`s8Duu!!%NKrVuou
-!.Y%J!!$s<J,fKJ!.FqJs8DuuJ,fQKrVup_s8W,u!!!Q0s8W&u!!3-"s8Duu!.Y%KrVuou+92B?!!!!(s8W&u!!!$!s8Duu
-!!#7`rVuou!"],/z"98?#zJ,TEJ!!!!@rVuou!!!9'z!!3'!z!'UA_z%KHJ~>
-Q
-1 i
-0.564706 g
-5052.95 3933.35 m
-5052.95 4043.75 4961.75 4134.95 4850.15 4134.95 c
-4353.35 4134.95 l
-4241.75 4134.95 4150.55 4043.75 4150.55 3933.35 c
-4150.55 3795.35 l
-4150.55 3684.95 4241.75 3593.75 4353.35 3593.75 c
-4850.15 3593.75 l
-4961.75 3593.75 5052.95 3684.95 5052.95 3795.35 c
-f*
-1 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-f*
-16 w
-0 g
-4983.35 3989.75 m
-4983.35 4096.55 4894.55 4184.15 4785.35 4184.15 c
-4299.35 4184.15 l
-4190.15 4184.15 4101.35 4096.55 4101.35 3989.75 c
-4101.35 3857.75 l
-4101.35 3750.95 4190.15 3663.35 4299.35 3663.35 c
-4785.35 3663.35 l
-4894.55 3663.35 4983.35 3750.95 4983.35 3857.75 c
-h
-S
-0.201248 i
-4329.33 4030 m
-4215.22 4030 l
-4215.22 4025 l
-4229.11 4024.2 4233 4021.18 4233 4010.72 c
-4233 3913.32 l
-4233 3902.85 4230.17 3900.64 4215.22 3899.03 c
-4215.22 3894 l
-4287.67 3894 l
-4287.67 3899 l
-4269.15 3899.81 4266 3902.23 4266 3913.32 c
-4266 3960.21 l
-4286.22 3959.81 4293.55 3952.36 4296.32 3929.02 c
-4301.35 3929.02 l
-4301.35 3997.04 l
-4296.32 3997.04 l
-4292.76 3974.1 4285.82 3967.05 4266 3967.05 c
-4266 4013.74 l
-4266 4021.19 4268.52 4023 4278.41 4023 c
-4297.13 4023 4308.8 4019.64 4315.04 4012.74 c
-4319.47 4007.71 4321.68 4002.27 4324.5 3989.59 c
-4329.33 3989.59 l
-h
-4334.96 3894 m
-f*
-4379.19 3987 m
-4340.84 3987 l
-4340.84 3981.95 l
-4349.49 3980.74 4352 3978.12 4352 3970.07 c
-4352 3910.9 l
-4352 3902.65 4349.93 3900.44 4340.84 3898.83 c
-4340.84 3894 l
-4394.37 3894 l
-4394.37 3898.83 l
-4382.09 3899.63 4380 3902.25 4380 3914.73 c
-4380 3952.76 l
-4380 3963.23 4385.49 3971.88 4391.95 3971.88 c
-4393.56 3971.88 4395.37 3970.47 4397.59 3967.25 c
-4401.41 3961.82 4404.43 3960.01 4409.66 3960.01 c
-4417.11 3960.01 4422.34 3965.64 4422.34 3973.29 c
-4422.34 3982.55 4415.5 3989.41 4406.04 3989.41 c
-4396.1 3989.41 4388.54 3984.12 4379.19 3970.27 c
-h
-4424.35 3894 m
-f*
-4519.19 3906.88 m
-4517.18 3904.87 l
-4516.57 3904.26 4515.97 3904.06 4514.96 3904.06 c
-4512.15 3904.06 4511 3905.67 4511 3909.09 c
-4511 3961.62 l
-4511 3978.73 4495.6 3989.42 4470.89 3989.42 c
-4448.15 3989.42 4432.85 3979.06 4432.85 3963.83 c
-4432.85 3955.38 4437.69 3950.55 4445.94 3950.55 c
-4453.99 3950.55 4459.62 3955.38 4459.62 3962.22 c
-4459.62 3965.04 4458.61 3967.66 4456 3970.88 c
-4454.19 3972.89 4453.58 3974.1 4453.58 3975.3 c
-4453.58 3979.53 4459.02 3982.42 4466.26 3982.42 c
-4478.14 3982.42 4483.86 3977.08 4483.86 3965.04 c
-4483.86 3950.35 l
-4459.91 3943.1 4450.29 3939.48 4442.51 3934.45 c
-4433.46 3928.41 4429 3921.37 4429 3912.52 c
-4429 3900.24 4438.27 3891.18 4451.17 3891.18 c
-4462.84 3891.18 4472.1 3895.21 4483.17 3905.27 c
-4485.38 3895.01 4489.81 3891.18 4499.67 3891.18 c
-4508.32 3891.18 4514.56 3894.4 4522.21 3902.65 c
-h
-4483 3914.13 m
-4477.55 3907.89 4473.52 3905.47 4468.68 3905.47 c
-4462.64 3905.47 4458 3910.91 4458 3918.96 c
-4458 3930.63 4466.61 3938.88 4483 3943.31 c
-h
-4524.62 3894 m
-f*
-4566.4 3987 m
-4527.7 3987 l
-4527.7 3981.95 l
-4536.55 3980.74 4539 3978.32 4539 3970.07 c
-4539 3910.9 l
-4539 3902.65 4536.74 3900.44 4527.7 3898.83 c
-4527.7 3894 l
-4576 3894 l
-4576 3898.83 l
-4568.95 3899.84 4567 3902.65 4567 3910.3 c
-4567 3964.03 l
-4567 3965.04 4569.87 3968.66 4572.18 3970.88 c
-4576.4 3974.1 4580.02 3976.42 4583.65 3976.42 c
-4591.5 3976.42 4595 3971.59 4595 3959 c
-4595 3910.3 l
-4595 3902.05 4592.68 3899.43 4584.85 3898.83 c
-4584.85 3894 l
-4631.95 3894 l
-4631.95 3898.83 l
-4624.9 3899.64 4623 3902.65 4623 3910.3 c
-4623 3964.03 l
-4623 3965.04 4625.73 3968.46 4627.92 3970.68 c
-4632.35 3974.1 4635.97 3976.42 4639.59 3976.42 c
-4647.24 3976.42 4650 3971.38 4650 3959 c
-4650 3910.3 l
-4650 3901.85 4647.85 3899.43 4640.4 3898.83 c
-4640.4 3894 l
-4688.3 3894 l
-4688.3 3899 l
-4680.45 3899.4 4678 3901.78 4678 3910.3 c
-4678 3960.81 l
-4678 3978.12 4667.43 3989.42 4651.07 3989.42 c
-4639.59 3989.42 4631.95 3984.73 4621.48 3971.68 c
-4615.44 3984.36 4608.4 3989.42 4595.72 3989.42 c
-4582.95 3989.42 4573.98 3983.91 4566.4 3971.68 c
-h
-4691.64 3894 m
-f*
-4769.9 3919.16 m
-4761.65 3909.29 4755.61 3905.18 4746.96 3905.18 c
-4739.31 3905.18 4733.27 3908.77 4729.25 3915.94 c
-4725.43 3922.54 4723.82 3929.56 4723.01 3944 c
-4773.73 3944 l
-4772.52 3960.36 4769.5 3969.43 4763.26 3977.12 c
-4756.82 3984.96 4747.36 3989.42 4736.09 3989.42 c
-4710.94 3989.42 4694.03 3969.4 4694.03 3939.88 c
-4694.03 3910.5 4710.53 3891.18 4735.49 3891.18 c
-4751.79 3891.18 4761.65 3897.42 4774.73 3916.34 c
-h
-4722 3951 m
-4722.61 3974.96 4726.23 3982.42 4736.09 3982.42 c
-4741.93 3982.42 4745.55 3979.38 4747.16 3973.49 c
-4748.17 3969.67 4748.57 3964.03 4748.97 3953.77 c
-4748.97 3951 l
-h
-4778.35 3894 m
-f*
-q[1 0 0 1 0 0]concat
-66 99 true[1 0 0 1 -4814 -3892]@85 imagemask
-!!%NHz!!!9(
-s6p!g!!!!`s8W&uzs8W-!^]4?7!WW3"s6p!g!!iQ(s8Vus!!!Q0s8W-!!!!!0s8W+Ls*t(L+92B?
-!'fBA!$D7 at p](io!!#7`s6p!np](:Ys8V!W"9&9#5QCc!!!3*"!'gM`J,fTLJ,hh6rr<$!s1eUVs8Duu
-!.Vca+92*9!!%N,!"],!!!!"Kn,N^nhuE`WJ+s!Gs*t(L!'g5Y!.4bH!!#7]z!!!!`qu?]sz5Q1W_z
-!'gG_z!!#7`z!!!!`rr<$!z5Q:]`z!'gL6z!!%NKJ,fQL!!!"Ks*t(Lz
-J,b$!z!.Y$az!!*'!^]4?7!!!$!s1eU7!!!!"s8Tk7z!WW28z!!E9$^]4?7!!!9(
-s1eU7!!!!(s8Tk7z&-)[Fz!$D7@^]4?7!!#7`s1eU7!!!"Ks8RTL!!!!"s8W+Lz"98E$J,fQL!"],0
-rr<$!!!", at s8N'!!!!"Ks8W*!!!!!$s8W,uz&-)\0rVuou!.Y%Ks82is!!E9$s8Vio!!!9(s8W,g
-!!!!(s8W-!n,NFg"98E$s53kW!!%NKs8Tk7!!!!0s8W+Lz"98E$z!!*'!qu?]s!!!"Ks6p!g
-z+90+Vz!"]*[z!!!9(^]4?7!!!!(s6p!gz"98,rz!!3,tz!!!'"rVuou!!!!"s8N'!
-z!<<(Lz!!*'!^]4?7!!!$!s1eU7zs8V!Wz!<<)Wz!!*'!huE`W!!!$!s6p!g
-zs8VQg"+U at O!<<)g!!g:>!!3-"n,NR+!!!'"s6p!hhuE`Xs8VQg!Up'h"98Dj!!)co!!E9$n,NH9
-!!!9(s6p!gIK0?Ys8VQg!'^G`+92B!!!"*k!'gM`huEa!huNfWs53kW&,m+>s8Tk7!!iQ(s8W,7!!!-$s8W-!J,fQMs8W-!s*t(L!.Y%Ks8N'!
-!!#7`s8W&u!!!!@s8W,sz#QOi(p](9o!!3-"s53kW!!!"Ks8RTLz&-)P-z!!#66!!!!~>
-Q
-1 i
-0.564706 g
-3804.95 3548.15 m
-3804.95 3658.55 3713.75 3749.75 3602.15 3749.75 c
-3106.55 3749.75 l
-2994.95 3749.75 2903.75 3658.55 2903.75 3548.15 c
-2903.75 3410.15 l
-2903.75 3299.75 2994.95 3208.55 3106.55 3208.55 c
-3602.15 3208.55 l
-3713.75 3208.55 3804.95 3299.75 3804.95 3410.15 c
-f*
-1 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-f*
-0 g
-3735.35 3604.55 m
-3735.35 3711.35 3646.55 3798.95 3537.35 3798.95 c
-3052.55 3798.95 l
-2943.35 3798.95 2854.55 3711.35 2854.55 3604.55 c
-2854.55 3472.55 l
-2854.55 3365.75 2943.35 3278.15 3052.55 3278.15 c
-3537.35 3278.15 l
-3646.55 3278.15 3735.35 3365.75 3735.35 3472.55 c
-h
-S
-0.201248 i
-3082.33 3645 m
-2968.22 3645 l
-2968.22 3640 l
-2982.11 3639.2 2986 3636.18 2986 3625.72 c
-2986 3528.32 l
-2986 3517.85 2983.17 3515.64 2968.22 3514.03 c
-2968.22 3509 l
-3040.67 3509 l
-3040.67 3514 l
-3022.15 3514.81 3019 3517.23 3019 3528.32 c
-3019 3575.21 l
-3039.22 3574.81 3046.55 3567.36 3049.32 3544.02 c
-3054.35 3544.02 l
-3054.35 3612.04 l
-3049.32 3612.04 l
-3045.76 3589.1 3038.82 3582.05 3019 3582.05 c
-3019 3628.74 l
-3019 3636.19 3021.52 3638 3031.41 3638 c
-3050.13 3638 3061.8 3634.64 3068.04 3627.74 c
-3072.47 3622.71 3074.68 3617.27 3077.5 3604.59 c
-3082.33 3604.59 l
-h
-3087.96 3509 m
-f*
-3131.19 3602 m
-3092.84 3602 l
-3092.84 3596.95 l
-3101.49 3595.74 3104 3593.12 3104 3585.07 c
-3104 3525.9 l
-3104 3517.65 3101.93 3515.44 3092.84 3513.83 c
-3092.84 3509 l
-3146.37 3509 l
-3146.37 3513.83 l
-3134.09 3514.63 3132 3517.25 3132 3529.73 c
-3132 3567.76 l
-3132 3578.23 3137.49 3586.88 3143.95 3586.88 c
-3145.56 3586.88 3147.37 3585.47 3149.59 3582.25 c
-3153.41 3576.82 3156.43 3575.01 3161.66 3575.01 c
-3169.11 3575.01 3174.34 3580.64 3174.34 3588.29 c
-3174.34 3597.55 3167.5 3604.41 3158.04 3604.41 c
-3148.1 3604.41 3140.54 3599.12 3131.19 3585.27 c
-h
-3176.35 3509 m
-f*
-3271.19 3521.88 m
-3269.18 3519.87 l
-3268.57 3519.26 3267.97 3519.06 3266.96 3519.06 c
-3264.15 3519.06 3263 3520.67 3263 3524.09 c
-3263 3576.62 l
-3263 3593.73 3247.6 3604.42 3222.89 3604.42 c
-3200.15 3604.42 3184.85 3594.06 3184.85 3578.83 c
-3184.85 3570.38 3189.69 3565.55 3197.94 3565.55 c
-3205.99 3565.55 3211.62 3570.38 3211.62 3577.22 c
-3211.62 3580.04 3210.61 3582.66 3208 3585.88 c
-3206.19 3587.89 3205.58 3589.1 3205.58 3590.3 c
-3205.58 3594.53 3211.02 3597.42 3218.26 3597.42 c
-3230.14 3597.42 3235.86 3592.08 3235.86 3580.04 c
-3235.86 3565.35 l
-3211.91 3558.1 3202.29 3554.48 3194.51 3549.45 c
-3185.46 3543.41 3181 3536.37 3181 3527.52 c
-3181 3515.24 3190.27 3506.18 3203.17 3506.18 c
-3214.84 3506.18 3224.1 3510.21 3235.17 3520.27 c
-3237.38 3510.01 3241.81 3506.18 3251.67 3506.18 c
-3260.32 3506.18 3266.56 3509.4 3274.21 3517.65 c
-h
-3235 3529.13 m
-3229.55 3522.89 3225.52 3520.47 3220.68 3520.47 c
-3214.64 3520.47 3210 3525.91 3210 3533.96 c
-3210 3545.63 3218.61 3553.88 3235 3558.31 c
-h
-3276.62 3509 m
-f*
-3318.4 3602 m
-3279.7 3602 l
-3279.7 3596.95 l
-3288.55 3595.74 3291 3593.32 3291 3585.07 c
-3291 3525.9 l
-3291 3517.65 3288.74 3515.44 3279.7 3513.83 c
-3279.7 3509 l
-3328 3509 l
-3328 3513.83 l
-3320.95 3514.84 3319 3517.65 3319 3525.3 c
-3319 3579.03 l
-3319 3580.04 3321.87 3583.66 3324.18 3585.88 c
-3328.4 3589.1 3332.02 3591.42 3335.65 3591.42 c
-3343.5 3591.42 3347 3586.59 3347 3574 c
-3347 3525.3 l
-3347 3517.05 3344.68 3514.43 3336.85 3513.83 c
-3336.85 3509 l
-3383.95 3509 l
-3383.95 3513.83 l
-3376.9 3514.64 3375 3517.65 3375 3525.3 c
-3375 3579.03 l
-3375 3580.04 3377.73 3583.46 3379.92 3585.68 c
-3384.35 3589.1 3387.97 3591.42 3391.59 3591.42 c
-3399.24 3591.42 3402 3586.38 3402 3574 c
-3402 3525.3 l
-3402 3516.85 3399.85 3514.43 3392.4 3513.83 c
-3392.4 3509 l
-3440.3 3509 l
-3440.3 3514 l
-3432.45 3514.4 3430 3516.78 3430 3525.3 c
-3430 3575.81 l
-3430 3593.12 3419.43 3604.42 3403.07 3604.42 c
-3391.59 3604.42 3383.95 3599.73 3373.48 3586.68 c
-3367.44 3599.36 3360.4 3604.42 3347.72 3604.42 c
-3334.95 3604.42 3325.98 3598.91 3318.4 3586.68 c
-h
-3443.64 3509 m
-f*
-3523.9 3534.16 m
-3515.65 3524.29 3509.61 3520.18 3500.96 3520.18 c
-3493.31 3520.18 3487.27 3523.77 3483.25 3530.94 c
-3479.43 3537.54 3477.82 3544.56 3477.01 3559 c
-3527.73 3559 l
-3526.52 3575.36 3523.5 3584.43 3517.26 3592.12 c
-3510.82 3599.96 3501.36 3604.42 3490.09 3604.42 c
-3464.94 3604.42 3448.03 3584.4 3448.03 3554.88 c
-3448.03 3525.5 3464.53 3506.18 3489.49 3506.18 c
-3505.79 3506.18 3515.65 3512.42 3528.73 3531.34 c
-h
-3476 3566 m
-3476.61 3589.96 3480.23 3597.42 3490.09 3597.42 c
-3495.93 3597.42 3499.55 3594.38 3501.16 3588.49 c
-3502.17 3584.67 3502.57 3579.03 3502.97 3568.77 c
-3502.97 3566 l
-h
-3532.35 3509 m
-f*
-q[1 0 0 1 0 0]concat
-67 97 true[1 0 0 1 -3566 -3509]@85 imagemask
-5QCc`s8W,o!'gM`
-s8W-!p]*PYs8W-!s7cR9s8W-!s8Vio&-)\0s8W,s!!iQ(s8W-!qu@!%s8W-!s82j!s8W-!s8Vus!WW3"
-s8W,s!!*'!s8W-!rVuqJs8W-!s8Duu5QCc`s8W&u!$D7 at s8W,u!!!Q0s8W-!rVup's8W-!s8N'!"98E$
-s8W*!!!3-"s8W-!!!!$!s8W-!rr<$!s8W-!s8RTL!.FnJ!!E7O!!#4`!!!"KJ,fQkJ,fQL++O=k&&8/F!"XS[!!hE^
-!!!8>!!!,j!!!!(^]4?8p](9o"2Fm:!W2ot!!C":!!*$!!!!&8!!!"KJ,fQMhuE`W5JR7!!8mhW!$C,!
-z!!!Q!z!!!!0p](9oz#Q+Q%z!!E3#z!!!'"z!!!!"s*t(Lz!<9h7
-z!!%N,z!!!"Kn,NFgz5PP3Yz!$D+=z!!",?z!!!!0rr<$!z&-%.[z!!iP>
-z!!!-$huE`W!!!!$s6p!gz!WVopz!!3,pz!!!'"qu?]szs8Duuz!<<'!
-z!!*'!z!!!"Ks*t(LzJ,b$!z!.Y$az!!%NK^]4?7!!!!`s53kWz5QBXA
-z!'gMAz!!#7`n,NFg!!!!`s6p!gz5QC3Qz!'gMQz!!#7`p](9o!!!!`s7cQozJ,f9D
-#CldS!.Y%D!!e#S!!%NKp](Q7!!!$!s7cQr^]4?7s8Vio"5j.Z!WW2p!!2Qh!!3-"p](?i!!!-$s7cQo
-p](:!s8Vio!;lfs&-)\!!!%KK!$D7 at n,NH<J,hh6s6p!g5MuPAs8VQg!'gGns8W,W!!", at s8W-!huE`f
-s8W-!s1eU7&-)\0s8Tk7!!iQ(s8W+L!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s8Duu!!*'!s8Vus!!!"Ks8W,sz
-5QCc`n,NFg!"],0s53kW!!!9(s8Tk7!!!!"s8W*!z!.Y%Hz!!", at huE`Wzqu?]s!!~>
-Q
-1 i
-8 w
-1751.75 4750.55 m
-1751.75 4758.95 1751.75 4758.95 1751.75 4750.55 c
-1751.75 4602.95 1791.35 4461.35 1863.35 4360.55 c
-S
-1804.55 4366.55 m
-1853.75 4382.15 l
-1878.95 4427.75 l
-1940.15 4280.15 l
-f*
-2244.95 3784.55 m
-2334.95 3666.95 2519.75 3582.95 2740.55 3561.35 c
-S
-2699.75 3518.15 m
-2721.35 3564.95 l
-2705.75 3612.95 l
-2854.55 3556.55 l
-f*
-2831.75 5164.55 m
-2729.75 5264.15 2584.55 5321.75 2430.95 5321.75 c
-2326.55 5321.75 2224.55 5295.35 2136.95 5244.95 c
-S
-2766.95 5158.55 m
-2814.95 5174.15 l
-2838.95 5219.75 l
-2902.55 5073.35 l
-f*
-32 w
-3062.15 4598.15 m
-3158.15 4380.95 3362.15 4242.95 3585.35 4242.95 c
-3738.95 4242.95 3887.75 4310.15 3995.75 4427.75 c
-S
-4016.15 4337.75 m
-3971.75 4407.35 l
-3891.35 4428.95 l
-4100.15 4582.55 l
-f*
-0.564706 g
-3616.55 4779.35 m
-3480.95 4816.55 l
-3576.95 4871.75 l
-3423.35 4881.35 l
-3466.55 4950.95 l
-3318.95 4930.55 l
-3300.95 5002.55 l
-3180.95 4956.95 l
-3106.55 5020.55 l
-3029.75 4956.95 l
-2909.75 5002.55 l
-2891.75 4930.55 l
-2744.15 4950.95 l
-2787.35 4881.35 l
-2633.75 4871.75 l
-2729.75 4816.55 l
-2595.35 4779.35 l
-2729.75 4744.55 l
-2633.75 4688.15 l
-2787.35 4679.75 l
-2744.15 4610.15 l
-2891.75 4629.35 l
-2909.75 4558.55 l
-3029.75 4602.95 l
-3106.55 4539.35 l
-3180.95 4602.95 l
-3300.95 4558.55 l
-3318.95 4629.35 l
-3466.55 4610.15 l
-3423.35 4679.75 l
-3576.95 4688.15 l
-3480.95 4744.55 l
-f*
-1 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-f*
-0 g
-3556.55 4839.35 m
-3420.95 4876.55 l
-3516.95 4931.75 l
-3363.35 4941.35 l
-3406.55 5010.95 l
-3258.95 4990.55 l
-3240.95 5062.55 l
-3120.95 5016.95 l
-3046.55 5080.55 l
-2969.75 5016.95 l
-2849.75 5062.55 l
-2831.75 4990.55 l
-2684.15 5010.95 l
-2727.35 4941.35 l
-2573.75 4931.75 l
-2669.75 4876.55 l
-2535.35 4839.35 l
-2669.75 4804.55 l
-2573.75 4748.15 l
-2727.35 4739.75 l
-2684.15 4670.15 l
-2831.75 4689.35 l
-2849.75 4618.55 l
-2969.75 4662.95 l
-3046.55 4599.35 l
-3120.95 4662.95 l
-3240.95 4618.55 l
-3258.95 4689.35 l
-3406.55 4670.15 l
-3363.35 4739.75 l
-3516.95 4748.15 l
-3420.95 4804.55 l
-3556.55 4839.35 l
-3516.95 4839.35 l
-3394.55 4808.15 l
-3483.35 4756.55 l
-3346.55 4748.15 l
-3386.15 4682.15 l
-3250.55 4701.35 l
-3233.75 4631.75 l
-3118.55 4674.95 l
-3046.55 4612.55 l
-2972.15 4674.95 l
-2856.95 4631.75 l
-2840.15 4701.35 l
-2703.35 4682.15 l
-2745.35 4748.15 l
-2607.35 4756.55 l
-2696.15 4808.15 l
-2573.75 4839.35 l
-2694.95 4871.75 l
-2607.35 4924.55 l
-2745.35 4931.75 l
-2703.35 4998.95 l
-2840.15 4979.75 l
-2856.95 5048.15 l
-2972.15 5006.15 l
-3046.55 5068.55 l
-3118.55 5006.15 l
-3233.75 5048.15 l
-3250.55 4979.75 l
-3386.15 4998.95 l
-3346.55 4931.75 l
-3483.35 4924.55 l
-3394.55 4871.75 l
-3516.95 4839.35 l
-3556.55 4839.35 l
-f*
-0.2 i
-2867.08 4890.76 m
-2847.08 4816.52 l
-2844.52 4807.88 2841.48 4805.64 2831.08 4805 c
-2831.08 4801 l
-2881 4801 l
-2881 4805 l
-2871.72 4805.48 2869.48 4806.76 2869.48 4811.88 c
-2869.48 4813.64 2869.8 4815.4 2870.76 4819.08 c
-2870.92 4819.88 l
-2871.08 4820.68 l
-2890.76 4892.52 l
-2893.16 4900.84 2895.56 4903.08 2903.72 4904.04 c
-2903.72 4908 l
-2869.8 4908 l
-2820.2 4831.24 l
-2811.56 4908 l
-2776.2 4908 l
-2776.2 4904 l
-2786.28 4903.52 2787.72 4902.89 2787.72 4898.44 c
-2787.72 4896.2 2787.08 4893.32 2785.96 4889.16 c
-2768.52 4829.48 l
-2762.12 4808.68 2761 4806.92 2752.36 4805 c
-2752.36 4801 l
-2785.48 4801 l
-2785.48 4805 l
-2775.24 4806.28 2772.68 4808.2 2772.68 4814.76 c
-2772.68 4817.48 2773.48 4821.48 2775.72 4829.48 c
-2791.88 4888.52 l
-2802.6 4799.08 l
-2807.08 4799.08 l
-h
-2899.24 4801 m
-f*
-2969.44 4821.32 m
-2962.88 4812.52 2960.48 4809.76 2957.92 4809.76 c
-2956.64 4809.76 2956 4810.86 2956 4812.52 c
-2956 4816.52 2957.44 4823.08 2961.44 4836.2 c
-2972.8 4873.96 l
-2955.04 4872.84 l
-2952.16 4863.4 l
-2950.72 4871.56 2947.2 4875.08 2940.32 4875.08 c
-2920.64 4875.08 2897 4844.27 2897 4819.24 c
-2897 4807.08 2903.74 4798.92 2913.92 4798.92 c
-2923.68 4798.92 2931.04 4804.68 2940.16 4820.04 c
-2938.24 4813.48 2938 4811.56 2938 4809.32 c
-2938 4803.4 2942.76 4798.76 2948.64 4798.76 c
-2956.16 4798.76 2963.52 4805 2972.8 4818.92 c
-h
-2942.56 4868.2 m
-2946.08 4867.88 2948.56 4865 2948.56 4860.68 c
-2948.56 4851.08 2943.24 4833.32 2936.96 4822.28 c
-2932.64 4814.44 2927.84 4809.92 2923.52 4809.92 c
-2919.36 4809.92 2916 4813.75 2916 4818.92 c
-2916 4827.24 2921.42 4843.24 2928.16 4855.08 c
-2932.96 4863.56 2938.24 4868.52 2942.56 4868.2 c
-h
-2980 4801 m
-f*
-3013.56 4874.92 m
-2997.24 4872.36 2991 4871.4 2982.68 4870.44 c
-2982.68 4866 l
-2989.88 4865.69 2991.32 4865.07 2991.32 4862.12 c
-2991.32 4860.52 2990.04 4854.76 2987.8 4846.44 c
-2971.8 4784.36 l
-2968.76 4773.8 2967.48 4772.84 2959.8 4773 c
-2959.8 4768 l
-2999.64 4768 l
-2999.64 4773 l
-2991.64 4773.14 2989.24 4774.16 2989.24 4777.64 c
-2989.24 4779.88 2990.36 4784.68 2993.4 4795.88 c
-2994.52 4799.72 2994.52 4800.04 2995.16 4802.44 c
-3000.76 4799.56 3002.68 4798.92 3006.04 4798.92 c
-3027.8 4798.92 3050.36 4827.88 3050.36 4855.56 c
-3050.36 4867.4 3043.64 4875.08 3033.08 4875.08 c
-3023.96 4875.08 3016.92 4869.92 3007.48 4856.52 c
-h
-3024.12 4863.56 m
-3028.28 4863.24 3030.68 4859.56 3030.36 4854.44 c
-3029.72 4843.88 3024.6 4828.04 3018.84 4817.64 c
-3013.88 4809 3008.76 4803.92 3003.32 4803.92 c
-2999.8 4803.92 2997.08 4806.75 2997.08 4810.28 c
-2997.08 4813 2998.84 4819.56 3003.16 4834.12 c
-3006.68 4845.8 3008.12 4849.8 3010.52 4853.48 c
-3014.52 4859.72 3019.96 4863.88 3024.12 4863.56 c
-h
-3059 4801 m
-f*
-3094.56 4874.92 m
-3078.24 4872.36 3072 4871.4 3063.68 4870.44 c
-3063.68 4866 l
-3070.88 4865.69 3072.32 4865.07 3072.32 4862.12 c
-3072.32 4860.52 3071.04 4854.76 3068.8 4846.44 c
-3052.8 4784.36 l
-3049.76 4773.8 3048.48 4772.84 3040.8 4773 c
-3040.8 4768 l
-3080.64 4768 l
-3080.64 4773 l
-3072.64 4773.14 3070.24 4774.16 3070.24 4777.64 c
-3070.24 4779.88 3071.36 4784.68 3074.4 4795.88 c
-3075.52 4799.72 3075.52 4800.04 3076.16 4802.44 c
-3081.76 4799.56 3083.68 4798.92 3087.04 4798.92 c
-3108.8 4798.92 3131.36 4827.88 3131.36 4855.56 c
-3131.36 4867.4 3124.64 4875.08 3114.08 4875.08 c
-3104.96 4875.08 3097.92 4869.92 3088.48 4856.52 c
-h
-3105.12 4863.56 m
-3109.28 4863.24 3111.68 4859.56 3111.36 4854.44 c
-3110.72 4843.88 3105.6 4828.04 3099.84 4817.64 c
-3094.88 4809 3089.76 4803.92 3084.32 4803.92 c
-3080.8 4803.92 3078.08 4806.75 3078.08 4810.28 c
-3078.08 4813 3079.84 4819.56 3084.16 4834.12 c
-3087.68 4845.8 3089.12 4849.8 3091.52 4853.48 c
-3095.52 4859.72 3100.96 4863.88 3105.12 4863.56 c
-h
-3140 4801 m
-f*
-3174.56 4823.56 m
-3172.32 4820.36 l
-3168.16 4814.12 3164.48 4810.56 3162.08 4810.56 c
-3160.8 4810.56 3160 4811.77 3160 4813.16 c
-3160 4814.6 3160.62 4818.76 3161.12 4821.48 c
-3175.68 4874.92 l
-3167.22 4873 3156.26 4871.4 3144.04 4870.44 c
-3144.04 4866 l
-3145.44 4866 l
-3150.24 4866 3153.48 4864.44 3153.48 4861.48 c
-3153.48 4860.2 3152.71 4857.8 3151.68 4855.08 c
-3142.4 4820.68 l
-3141.12 4816.04 3141 4811.88 3141 4809.64 c
-3141 4803.56 3145.2 4799.56 3151.36 4799.56 c
-3160.96 4799.56 3166.88 4804.36 3178.08 4821.32 c
-h
-3170.88 4910.4 m
-3165.44 4910.4 3161 4905.46 3161 4900.04 c
-3161 4893.8 3165.26 4889.4 3171.04 4889.4 c
-3177.12 4889.4 3182 4893.86 3182 4899.56 c
-3182 4905.48 3177 4910.4 3170.88 4910.4 c
-h
-3184.48 4801 m
-f*
-3258.36 4822.6 m
-3251.96 4812.68 3249.88 4810.56 3247.16 4810.56 c
-3245.88 4810.56 3245 4811.63 3245 4813.16 c
-3245 4814.76 3245.94 4818.12 3248.92 4827.08 c
-3254.68 4844.52 l
-3257.24 4852.04 3259 4859.08 3259 4862.92 c
-3259 4870.76 3254.78 4875.08 3247.16 4875.08 c
-3241.24 4875.08 3235.48 4872.62 3231.16 4868.36 c
-3225.24 4862.76 3222.2 4858.92 3211.48 4843.08 c
-3221.72 4874.76 l
-3211.48 4872.52 3198.68 4870.92 3189.72 4870.6 c
-3189.72 4865.8 l
-3196.44 4865.65 3198.36 4864.92 3198.36 4862.12 c
-3198.36 4860.2 3196.12 4851.72 3191 4833.64 c
-3187.32 4820.68 3186.2 4816.52 3182.04 4801 c
-3201.4 4801 l
-3208.92 4828.68 3214.68 4842.6 3224.6 4855.56 c
-3227.8 4859.88 3232.76 4863.08 3235.64 4863.08 c
-3237.72 4863.08 3240 4861.63 3240 4860.04 c
-3240 4859.56 3239.54 4858.28 3238.84 4856.68 c
-3230.04 4830.12 l
-3227.48 4822.44 3226 4813.32 3226 4809.16 c
-3226 4803.08 3229.84 4799.56 3236.44 4799.56 c
-3246.04 4799.56 3252.6 4805 3261.88 4820.52 c
-h
-3271.96 4801 m
-f*
-3349.48 4870 m
-3331.72 4870 l
-3326.28 4873.58 3321.48 4875.08 3314.12 4875.08 c
-3294.44 4875.08 3278 4862.05 3278 4845.8 c
-3278 4837.64 3282.35 4831.88 3291.4 4828.2 c
-3278.28 4820.84 3276 4818.6 3276 4812.68 c
-3276 4807.56 3278.89 4804.52 3285.96 4802.12 c
-3276.04 4799.72 3272.84 4798.44 3269 4795.4 c
-3266.44 4793.16 3265 4789.32 3265 4785.48 c
-3265 4775.08 3276.56 4769 3294.76 4769 c
-3317.32 4769 3333 4778.72 3333 4792.52 c
-3333 4802.28 3326.6 4807.56 3309.16 4812.52 c
-3300.68 4814.92 l
-3295.56 4816.36 3292 4818.6 3292 4821 c
-3292 4823.56 3294.68 4826.28 3297 4826.28 c
-3297.8 4826.28 3298.92 4826.24 3300.2 4826.12 c
-3301.96 4825.64 3303.24 4825 3305.16 4825 c
-3312.2 4825 3319.4 4827.09 3325.48 4830.92 c
-3334.76 4836.2 3340 4844.36 3340 4853.96 c
-3340 4856.64 3339.59 4858.32 3338.76 4861 c
-3349.48 4861 l
-h
-3291.4 4800.04 m
-3293.32 4799.88 3305.48 4795.72 3309 4794.12 c
-3313.48 4791.88 3316 4789.16 3316 4785 c
-3316 4777.96 3308.8 4774 3296.36 4774 c
-3285.96 4774 3279 4779.1 3279 4786.44 c
-3279 4789.48 3280.32 4792.2 3283.24 4795.24 c
-3285.32 4797.32 3290.12 4800.2 3291.4 4800.04 c
-h
-3313.8 4870.08 m
-3317.96 4870.08 3321 4866.19 3321 4860.52 c
-3321 4855.08 3319.08 4847.4 3316.36 4841.48 c
-3313 4834.12 3308.84 4830 3303.88 4830 c
-3299.56 4830 3297 4833.52 3297 4839.88 c
-3297 4846.28 3299.79 4856.04 3303.24 4862.12 c
-3306.28 4867.4 3309.64 4870.08 3313.8 4870.08 c
-h
-3353 4801 m
-f*
-1 i
-0.564706 g
-2708.15 3969.35 m
-2573.75 4006.55 l
-2669.75 4061.75 l
-2516.15 4071.35 l
-2558.15 4140.95 l
-2410.55 4120.55 l
-2393.75 4192.55 l
-2273.75 4146.95 l
-2198.15 4210.55 l
-2122.55 4146.95 l
-2002.55 4192.55 l
-1984.55 4120.55 l
-1835.75 4140.95 l
-1880.15 4071.35 l
-1726.55 4061.75 l
-1822.55 4006.55 l
-1686.95 3969.35 l
-1822.55 3934.55 l
-1726.55 3878.15 l
-1880.15 3869.75 l
-1835.75 3800.15 l
-1984.55 3819.35 l
-2002.55 3748.55 l
-2122.55 3792.95 l
-2198.15 3729.35 l
-2273.75 3792.95 l
-2393.75 3748.55 l
-2410.55 3819.35 l
-2558.15 3800.15 l
-2516.15 3869.75 l
-2669.75 3878.15 l
-2573.75 3934.55 l
-f*
-1 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-f*
-0 g
-2648.15 4029.35 m
-2513.75 4066.55 l
-2609.75 4121.75 l
-2456.15 4131.35 l
-2498.15 4200.95 l
-2350.55 4180.55 l
-2333.75 4252.55 l
-2213.75 4206.95 l
-2138.15 4270.55 l
-2062.55 4206.95 l
-1942.55 4252.55 l
-1924.55 4180.55 l
-1775.75 4200.95 l
-1820.15 4131.35 l
-1666.55 4121.75 l
-1762.55 4066.55 l
-1626.95 4029.35 l
-1762.55 3994.55 l
-1666.55 3938.15 l
-1820.15 3929.75 l
-1775.75 3860.15 l
-1924.55 3879.35 l
-1942.55 3808.55 l
-2062.55 3852.95 l
-2138.15 3789.35 l
-2213.75 3852.95 l
-2333.75 3808.55 l
-2350.55 3879.35 l
-2498.15 3860.15 l
-2456.15 3929.75 l
-2609.75 3938.15 l
-2513.75 3994.55 l
-2648.15 4029.35 l
-2609.75 4029.35 l
-2487.35 3998.15 l
-2576.15 3946.55 l
-2438.15 3938.15 l
-2478.95 3872.15 l
-2343.35 3891.35 l
-2326.55 3821.75 l
-2211.35 3864.95 l
-2138.15 3802.55 l
-2064.95 3864.95 l
-1949.75 3821.75 l
-1931.75 3891.35 l
-1796.15 3872.15 l
-1836.95 3938.15 l
-1700.15 3946.55 l
-1788.95 3998.15 l
-1666.55 4029.35 l
-1787.75 4061.75 l
-1700.15 4114.55 l
-1836.95 4121.75 l
-1796.15 4188.95 l
-1931.75 4169.75 l
-1949.75 4238.15 l
-2064.95 4196.15 l
-2138.15 4258.55 l
-2211.35 4196.15 l
-2326.55 4238.15 l
-2343.35 4169.75 l
-2478.95 4188.95 l
-2438.15 4121.75 l
-2576.15 4114.55 l
-2487.35 4061.75 l
-2609.75 4029.35 l
-2648.15 4029.35 l
-f*
-0.2 i
-1960.08 4080.76 m
-1940.08 4006.52 l
-1937.52 3997.88 1934.48 3995.64 1924.08 3995 c
-1924.08 3991 l
-1974 3991 l
-1974 3995 l
-1964.72 3995.48 1962.48 3996.76 1962.48 4001.88 c
-1962.48 4003.64 1962.8 4005.4 1963.76 4009.08 c
-1963.92 4009.88 l
-1964.08 4010.68 l
-1983.76 4082.52 l
-1986.16 4090.84 1988.56 4093.08 1996.72 4094.04 c
-1996.72 4098 l
-1962.8 4098 l
-1913.2 4021.24 l
-1904.56 4098 l
-1869.2 4098 l
-1869.2 4094 l
-1879.28 4093.52 1880.72 4092.89 1880.72 4088.44 c
-1880.72 4086.2 1880.08 4083.32 1878.96 4079.16 c
-1861.52 4019.48 l
-1855.12 3998.68 1854 3996.92 1845.36 3995 c
-1845.36 3991 l
-1878.48 3991 l
-1878.48 3995 l
-1868.24 3996.28 1865.68 3998.2 1865.68 4004.76 c
-1865.68 4007.48 1866.48 4011.48 1868.72 4019.48 c
-1884.88 4078.52 l
-1895.6 3989.08 l
-1900.08 3989.08 l
-h
-1992.24 3991 m
-f*
-2061.44 4011.32 m
-2054.88 4002.52 2052.48 3999.76 2049.92 3999.76 c
-2048.64 3999.76 2048 4000.86 2048 4002.52 c
-2048 4006.52 2049.44 4013.08 2053.44 4026.2 c
-2064.8 4063.96 l
-2047.04 4062.84 l
-2044.16 4053.4 l
-2042.72 4061.56 2039.2 4065.08 2032.32 4065.08 c
-2012.64 4065.08 1989 4034.27 1989 4009.24 c
-1989 3997.08 1995.74 3988.92 2005.92 3988.92 c
-2015.68 3988.92 2023.04 3994.68 2032.16 4010.04 c
-2030.24 4003.48 2030 4001.56 2030 3999.32 c
-2030 3993.4 2034.76 3988.76 2040.64 3988.76 c
-2048.16 3988.76 2055.52 3995 2064.8 4008.92 c
-h
-2034.56 4058.2 m
-2038.08 4057.88 2040.56 4055 2040.56 4050.68 c
-2040.56 4041.08 2035.24 4023.32 2028.96 4012.28 c
-2024.64 4004.44 2019.84 3999.92 2015.52 3999.92 c
-2011.36 3999.92 2008 4003.75 2008 4008.92 c
-2008 4017.24 2013.42 4033.24 2020.16 4045.08 c
-2024.96 4053.56 2030.24 4058.52 2034.56 4058.2 c
-h
-2072 3991 m
-f*
-2106.56 4064.92 m
-2090.24 4062.36 2084 4061.4 2075.68 4060.44 c
-2075.68 4056 l
-2082.88 4055.69 2084.32 4055.07 2084.32 4052.12 c
-2084.32 4050.52 2083.04 4044.76 2080.8 4036.44 c
-2064.8 3974.36 l
-2061.76 3963.8 2060.48 3962.84 2052.8 3963 c
-2052.8 3958 l
-2092.64 3958 l
-2092.64 3963 l
-2084.64 3963.14 2082.24 3964.16 2082.24 3967.64 c
-2082.24 3969.88 2083.36 3974.68 2086.4 3985.88 c
-2087.52 3989.72 2087.52 3990.04 2088.16 3992.44 c
-2093.76 3989.56 2095.68 3988.92 2099.04 3988.92 c
-2120.8 3988.92 2143.36 4017.88 2143.36 4045.56 c
-2143.36 4057.4 2136.64 4065.08 2126.08 4065.08 c
-2116.96 4065.08 2109.92 4059.92 2100.48 4046.52 c
-h
-2117.12 4053.56 m
-2121.28 4053.24 2123.68 4049.56 2123.36 4044.44 c
-2122.72 4033.88 2117.6 4018.04 2111.84 4007.64 c
-2106.88 3999 2101.76 3993.92 2096.32 3993.92 c
-2092.8 3993.92 2090.08 3996.75 2090.08 4000.28 c
-2090.08 4003 2091.84 4009.56 2096.16 4024.12 c
-2099.68 4035.8 2101.12 4039.8 2103.52 4043.48 c
-2107.52 4049.72 2112.96 4053.88 2117.12 4053.56 c
-h
-2152 3991 m
-f*
-2187.56 4064.92 m
-2171.24 4062.36 2165 4061.4 2156.68 4060.44 c
-2156.68 4056 l
-2163.88 4055.69 2165.32 4055.07 2165.32 4052.12 c
-2165.32 4050.52 2164.04 4044.76 2161.8 4036.44 c
-2145.8 3974.36 l
-2142.76 3963.8 2141.48 3962.84 2133.8 3963 c
-2133.8 3958 l
-2173.64 3958 l
-2173.64 3963 l
-2165.64 3963.14 2163.24 3964.16 2163.24 3967.64 c
-2163.24 3969.88 2164.36 3974.68 2167.4 3985.88 c
-2168.52 3989.72 2168.52 3990.04 2169.16 3992.44 c
-2174.76 3989.56 2176.68 3988.92 2180.04 3988.92 c
-2201.8 3988.92 2224.36 4017.88 2224.36 4045.56 c
-2224.36 4057.4 2217.64 4065.08 2207.08 4065.08 c
-2197.96 4065.08 2190.92 4059.92 2181.48 4046.52 c
-h
-2198.12 4053.56 m
-2202.28 4053.24 2204.68 4049.56 2204.36 4044.44 c
-2203.72 4033.88 2198.6 4018.04 2192.84 4007.64 c
-2187.88 3999 2182.76 3993.92 2177.32 3993.92 c
-2173.8 3993.92 2171.08 3996.75 2171.08 4000.28 c
-2171.08 4003 2172.84 4009.56 2177.16 4024.12 c
-2180.68 4035.8 2182.12 4039.8 2184.52 4043.48 c
-2188.52 4049.72 2193.96 4053.88 2198.12 4053.56 c
-h
-2233 3991 m
-f*
-2266.56 4013.56 m
-2264.32 4010.36 l
-2260.16 4004.12 2256.48 4000.56 2254.08 4000.56 c
-2252.8 4000.56 2252 4001.77 2252 4003.16 c
-2252 4004.6 2252.62 4008.76 2253.12 4011.48 c
-2267.68 4064.92 l
-2259.22 4063 2248.26 4061.4 2236.04 4060.44 c
-2236.04 4056 l
-2237.44 4056 l
-2242.24 4056 2245.48 4054.44 2245.48 4051.48 c
-2245.48 4050.2 2244.71 4047.8 2243.68 4045.08 c
-2234.4 4010.68 l
-2233.12 4006.04 2233 4001.88 2233 3999.64 c
-2233 3993.56 2237.2 3989.56 2243.36 3989.56 c
-2252.96 3989.56 2258.88 3994.36 2270.08 4011.32 c
-h
-2262.88 4100.4 m
-2257.44 4100.4 2253 4095.46 2253 4090.04 c
-2253 4083.8 2257.26 4079.4 2263.04 4079.4 c
-2269.12 4079.4 2274 4083.86 2274 4089.56 c
-2274 4095.48 2269 4100.4 2262.88 4100.4 c
-h
-2276.48 3991 m
-f*
-2351.36 4012.6 m
-2344.96 4002.68 2342.88 4000.56 2340.16 4000.56 c
-2338.88 4000.56 2338 4001.63 2338 4003.16 c
-2338 4004.76 2338.94 4008.12 2341.92 4017.08 c
-2347.68 4034.52 l
-2350.24 4042.04 2352 4049.08 2352 4052.92 c
-2352 4060.76 2347.78 4065.08 2340.16 4065.08 c
-2334.24 4065.08 2328.48 4062.62 2324.16 4058.36 c
-2318.24 4052.76 2315.2 4048.92 2304.48 4033.08 c
-2314.72 4064.76 l
-2304.48 4062.52 2291.68 4060.92 2282.72 4060.6 c
-2282.72 4055.8 l
-2289.44 4055.65 2291.36 4054.92 2291.36 4052.12 c
-2291.36 4050.2 2289.12 4041.72 2284 4023.64 c
-2280.32 4010.68 2279.2 4006.52 2275.04 3991 c
-2294.4 3991 l
-2301.92 4018.68 2307.68 4032.6 2317.6 4045.56 c
-2320.8 4049.88 2325.76 4053.08 2328.64 4053.08 c
-2330.72 4053.08 2333 4051.63 2333 4050.04 c
-2333 4049.56 2332.54 4048.28 2331.84 4046.68 c
-2323.04 4020.12 l
-2320.48 4012.44 2319 4003.32 2319 3999.16 c
-2319 3993.08 2322.84 3989.56 2329.44 3989.56 c
-2339.04 3989.56 2345.6 3995 2354.88 4010.52 c
-h
-2364.96 3991 m
-f*
-2442.48 4060 m
-2424.72 4060 l
-2419.28 4063.58 2414.48 4065.08 2407.12 4065.08 c
-2387.44 4065.08 2371 4052.05 2371 4035.8 c
-2371 4027.64 2375.35 4021.88 2384.4 4018.2 c
-2371.28 4010.84 2369 4008.6 2369 4002.68 c
-2369 3997.56 2371.89 3994.52 2378.96 3992.12 c
-2369.04 3989.72 2365.84 3988.44 2362 3985.4 c
-2359.44 3983.16 2358 3979.32 2358 3975.48 c
-2358 3965.08 2369.56 3959 2387.76 3959 c
-2410.32 3959 2426 3968.72 2426 3982.52 c
-2426 3992.28 2419.6 3997.56 2402.16 4002.52 c
-2393.68 4004.92 l
-2388.56 4006.36 2385 4008.6 2385 4011 c
-2385 4013.56 2387.68 4016.28 2390 4016.28 c
-2390.8 4016.28 2391.92 4016.24 2393.2 4016.12 c
-2394.96 4015.64 2396.24 4015 2398.16 4015 c
-2405.2 4015 2412.4 4017.09 2418.48 4020.92 c
-2427.76 4026.2 2433 4034.36 2433 4043.96 c
-2433 4046.64 2432.59 4048.32 2431.76 4051 c
-2442.48 4051 l
-h
-2384.4 3990.04 m
-2386.32 3989.88 2398.48 3985.72 2402 3984.12 c
-2406.48 3981.88 2409 3979.16 2409 3975 c
-2409 3967.96 2401.8 3964 2389.36 3964 c
-2378.96 3964 2372 3969.1 2372 3976.44 c
-2372 3979.48 2373.32 3982.2 2376.24 3985.24 c
-2378.32 3987.32 2383.12 3990.2 2384.4 3990.04 c
-h
-2406.8 4060.08 m
-2410.96 4060.08 2414 4056.19 2414 4050.52 c
-2414 4045.08 2412.08 4037.4 2409.36 4031.48 c
-2406 4024.12 2401.84 4020 2396.88 4020 c
-2392.56 4020 2390 4023.52 2390 4029.88 c
-2390 4036.28 2392.79 4046.04 2396.24 4052.12 c
-2399.28 4057.4 2402.64 4060.08 2406.8 4060.08 c
-h
-2446 3991 m
-f*
-1 i
-1 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-f*
-0 g
-4396.55 3387.35 m
-4476.95 3387.35 l
-4476.95 3233.75 l
-4643.75 3233.75 l
-4643.75 3387.35 l
-4726.55 3387.35 l
-4559.75 3538.55 l
-4396.55 3387.35 l
-4420.55 3396.95 l
-4559.75 3524.15 l
-4700.15 3396.95 l
-4634.15 3396.95 l
-4634.15 3243.35 l
-4487.75 3243.35 l
-4487.75 3396.95 l
-4420.55 3396.95 l
-4396.55 3387.35 l
-f*
-0.2 i
-4135.88 3119 m
-4135.88 3114 l
-4148.3 3113.29 4152 3110.45 4152 3101.4 c
-4152 3014.28 l
-4152 3005.1 4149.25 3002.94 4135.88 3001.5 c
-4135.88 2997 l
-4193.84 2997 l
-4224.26 2997 4244 3010.5 4244 3030.84 c
-4244 3039.12 4240.73 3046.32 4234.7 3051.9 c
-4228.4 3057.48 4222.28 3060 4209.68 3062.7 c
-4230.56 3068.82 4238 3076.2 4238 3089.88 c
-4238 3108.42 4221.55 3119 4191.5 3119 c
-h
-4181 3058.74 m
-4185.92 3058.74 l
-4204.46 3058.74 4213 3049.2 4213 3029.22 c
-4213 3011.76 4205.77 3003 4191.5 3003 c
-4183.58 3003 4181 3005.99 4181 3013.74 c
-h
-4181 3104.46 m
-4181 3110.94 4183.39 3114 4190.24 3114 c
-4202.84 3114 4209 3106.03 4209 3088.62 c
-4209 3069.72 4203.08 3064.68 4181 3064.14 c
-h
-4253.06 2997 m
-f*
-4338.14 3008.52 m
-4336.34 3006.72 l
-4335.8 3006.18 4335.26 3006 4334.36 3006 c
-4331.84 3006 4331 3007.44 4331 3010.5 c
-4331 3057.48 l
-4331 3072.78 4317.16 3082.16 4294.94 3082.16 c
-4274.6 3082.16 4260.92 3072.97 4260.92 3059.46 c
-4260.92 3051.9 4265.24 3047.58 4272.62 3047.58 c
-4279.82 3047.58 4284.86 3051.9 4284.86 3058.02 c
-4284.86 3060.54 4283.96 3062.88 4281.62 3065.76 c
-4280 3067.56 4279.46 3068.64 4279.46 3069.72 c
-4279.46 3073.5 4284.32 3076.16 4290.8 3076.16 c
-4301.42 3076.16 4306 3071.37 4306 3060.54 c
-4306 3047.4 l
-4284.89 3040.92 4276.41 3037.68 4269.56 3033.18 c
-4261.46 3027.78 4258 3021.48 4258 3013.56 c
-4258 3002.58 4266.07 2994.48 4277.3 2994.48 c
-4287.74 2994.48 4296.02 2998.08 4305.92 3007.08 c
-4307.9 2997.9 4311.86 2994.48 4320.68 2994.48 c
-4328.42 2994.48 4334 2997.36 4340.84 3004.74 c
-h
-4306 3015 m
-4301.04 3009.42 4297.37 3007.26 4292.96 3007.26 c
-4287.56 3007.26 4284 3012.12 4284 3019.32 c
-4284 3029.76 4291.57 3037.14 4306 3041.1 c
-h
-4343 2997 m
-f*
-4404.22 3055.68 m
-4404.22 3081.8 l
-4400.24 3081.8 l
-4399.16 3079.08 4398.08 3078.2 4395.74 3078.2 c
-4394.66 3078.2 4393.04 3078.55 4390.16 3079.44 c
-4384.4 3081.42 4380.26 3082.16 4376.12 3082.16 c
-4359.74 3082.16 4348 3070.99 4348 3055.86 c
-4348 3043.98 4355.34 3035.7 4373.42 3027.96 c
-4385.84 3022.56 4391 3018.06 4391 3012.3 c
-4391 3005.28 4385.48 3000.48 4377.2 3000.48 c
-4364.6 3000.48 4356.32 3008.62 4352.54 3024.36 c
-4347.5 3024.36 l
-4347.5 2994.66 l
-4352 2994.66 l
-4353.98 2998.44 4355.06 2999.7 4356.68 2999.7 c
-4357.58 2999.7 4359.02 2999.34 4360.82 2998.62 c
-4366.04 2996.46 4375.22 2994.48 4380.26 2994.48 c
-4396.64 2994.48 4408 3005.64 4408 3021.84 c
-4408 3034.62 4401.15 3042.54 4383.14 3049.92 c
-4370.9 3055.14 4366 3059.64 4366 3065.76 c
-4366 3071.7 4370.98 3076.16 4377.74 3076.16 c
-4382.6 3076.16 4387.28 3074.19 4391.24 3070.44 c
-4395.02 3066.84 4397 3063.42 4399.7 3055.68 c
-h
-4413.02 2997 m
-f*
-4484.36 3019.5 m
-4476.98 3010.68 4471.58 3007.48 4463.84 3007.48 c
-4457 3007.48 4451.6 3010.53 4448 3016.62 c
-4444.58 3022.36 4443.14 3028.45 4442.42 3041 c
-4487.78 3041 l
-4486.7 3055.99 4484 3064.3 4478.42 3071.34 c
-4472.66 3078.36 4464.2 3082.16 4454.12 3082.16 c
-4431.62 3082.16 4416.5 3064.33 4416.5 3038.04 c
-4416.5 3011.76 4431.26 2994.48 4453.58 2994.48 c
-4468.16 2994.48 4476.98 3000.06 4488.68 3016.98 c
-h
-4441.52 3048 m
-4442.06 3069.42 4445.3 3076.16 4454.12 3076.16 c
-4459.34 3076.16 4462.58 3073.42 4464.02 3068.1 c
-4464.92 3064.68 4465.28 3059.64 4465.64 3050.46 c
-4465.64 3048 l
-h
-4491.92 2997 m
-f*
-4538 2997 m
-f*
-4641.94 3119 m
-4539.88 3119 l
-4539.88 3114 l
-4552.3 3113.29 4556 3110.63 4556 3101.4 c
-4556 3014.28 l
-4556 3004.92 4553.44 3002.94 4539.88 3001.5 c
-4539.88 2997 l
-4604.68 2997 l
-4604.68 3002 l
-4588.12 3002.69 4585 3004.77 4585 3014.28 c
-4585 3056.22 l
-4603.28 3055.86 4609.91 3049.2 4612.42 3028.32 c
-4616.92 3028.32 l
-4616.92 3089.16 l
-4612.42 3089.16 l
-4609.19 3068.64 4602.92 3062.34 4585 3062.34 c
-4585 3104.1 l
-4585 3110.76 4587.32 3113 4596.4 3113 c
-4613.14 3113 4623.58 3109.8 4629.16 3103.2 c
-4633.12 3098.7 4635.1 3093.84 4637.62 3082.5 c
-4641.94 3082.5 l
-h
-4646.98 2997 m
-f*
-4686.28 3080 m
-4652.22 3080 l
-4652.22 3075.66 l
-4659.96 3074.58 4662 3072.24 4662 3065.04 c
-4662 3012.12 l
-4662 3004.74 4660.19 3002.76 4652.22 3001.32 c
-4652.22 2997 l
-4700.1 2997 l
-4700.1 3001.32 l
-4689.12 3002.04 4687 3004.38 4687 3015.54 c
-4687 3049.56 l
-4687 3058.92 4692.02 3066.66 4697.94 3066.66 c
-4699.38 3066.66 4701 3065.4 4702.98 3062.52 c
-4706.4 3057.66 4709.1 3056.04 4713.78 3056.04 c
-4720.44 3056.04 4725.12 3061.08 4725.12 3067.92 c
-4725.12 3076.2 4719 3082.16 4710.54 3082.16 c
-4701.55 3082.16 4694.73 3077.47 4686.28 3065.22 c
-h
-4726.92 2997 m
-f*
-4813.14 3008.52 m
-4811.34 3006.72 l
-4810.8 3006.18 4810.26 3006 4809.36 3006 c
-4806.84 3006 4806 3007.44 4806 3010.5 c
-4806 3057.48 l
-4806 3072.78 4792.16 3082.16 4769.94 3082.16 c
-4749.6 3082.16 4735.92 3072.97 4735.92 3059.46 c
-4735.92 3051.9 4740.24 3047.58 4747.62 3047.58 c
-4754.82 3047.58 4759.86 3051.9 4759.86 3058.02 c
-4759.86 3060.54 4758.96 3062.88 4756.62 3065.76 c
-4755 3067.56 4754.46 3068.64 4754.46 3069.72 c
-4754.46 3073.5 4759.32 3076.16 4765.8 3076.16 c
-4776.42 3076.16 4781 3071.37 4781 3060.54 c
-4781 3047.4 l
-4759.89 3040.92 4751.41 3037.68 4744.56 3033.18 c
-4736.46 3027.78 4733 3021.48 4733 3013.56 c
-4733 3002.58 4741.07 2994.48 4752.3 2994.48 c
-4762.74 2994.48 4771.02 2998.08 4780.92 3007.08 c
-4782.9 2997.9 4786.86 2994.48 4795.68 2994.48 c
-4803.42 2994.48 4809 2997.36 4815.84 3004.74 c
-h
-4781 3015 m
-4776.04 3009.42 4772.37 3007.26 4767.96 3007.26 c
-4762.56 3007.26 4759 3012.12 4759 3019.32 c
-4759 3029.76 4766.57 3037.14 4781 3041.1 c
-h
-4818 2997 m
-f*
-4855.46 3080 m
-4820.73 3080 l
-4820.73 3075.66 l
-4828.65 3074.58 4831 3072.42 4831 3065.04 c
-4831 3012.12 l
-4831 3004.74 4828.95 3002.76 4820.73 3001.32 c
-4820.73 2997 l
-4863.93 2997 l
-4863.93 3001.32 l
-4857.63 3002.22 4856 3004.74 4856 3011.58 c
-4856 3059.64 l
-4856 3060.54 4858.51 3063.78 4860.51 3065.76 c
-4864.29 3068.64 4867.53 3070.16 4870.77 3070.16 c
-4877.79 3070.16 4881 3066 4881 3055.14 c
-4881 3011.58 l
-4881 3004.2 4878.9 3001.86 4871.85 3001.32 c
-4871.85 2997 l
-4913.97 2997 l
-4913.97 3001.32 l
-4907.67 3002.04 4906 3004.74 4906 3011.58 c
-4906 3059.64 l
-4906 3060.54 4908.43 3063.6 4910.37 3065.58 c
-4914.33 3068.64 4917.57 3070.16 4920.81 3070.16 c
-4927.65 3070.16 4930 3065.82 4930 3055.14 c
-4930 3011.58 l
-4930 3004.02 4928.1 3001.86 4921.53 3001.32 c
-4921.53 2997 l
-4964.37 2997 l
-4964.37 3001 l
-4957.35 3001.37 4955 3003.6 4955 3011.58 c
-4955 3056.76 l
-4955 3072.24 4945.6 3082.16 4931.07 3082.16 c
-4920.81 3082.16 4913.97 3078.01 4904.61 3066.48 c
-4899.21 3077.82 4892.91 3082.16 4881.57 3082.16 c
-4870.2 3082.16 4862.21 3077.29 4855.46 3066.48 c
-h
-4967.94 2997 m
-f*
-5040.36 3019.5 m
-5032.98 3010.68 5027.58 3007.48 5019.84 3007.48 c
-5013 3007.48 5007.6 3010.53 5004 3016.62 c
-5000.58 3022.36 4999.14 3028.45 4998.42 3041 c
-5043.78 3041 l
-5042.7 3055.99 5040 3064.3 5034.42 3071.34 c
-5028.66 3078.36 5020.2 3082.16 5010.12 3082.16 c
-4987.62 3082.16 4972.5 3064.33 4972.5 3038.04 c
-4972.5 3011.76 4987.26 2994.48 5009.58 2994.48 c
-5024.16 2994.48 5032.98 3000.06 5044.68 3016.98 c
-h
-4997.52 3048 m
-4998.06 3069.42 5001.3 3076.16 5010.12 3076.16 c
-5015.34 3076.16 5018.58 3073.42 5020.02 3068.1 c
-5020.92 3064.68 5021.28 3059.64 5021.64 3050.46 c
-5021.64 3048 l
-h
-5047.92 2997 m
-f*
-1 i
-4132.55 2962.55 914.4 15.5999 re
-f
-0.2 i
-2824.26 2676.36 m
-2813.64 2665.2 2807.88 2660.88 2799.06 2657.46 c
-2793.84 2655.3 2787.9 2654.58 2782.86 2654.58 c
-2770.98 2654.58 2759.64 2660.74 2754.42 2669.88 c
-2749.2 2679.42 2747 2692.2 2747 2710.38 c
-2747 2747.64 2758.23 2767.7 2779.8 2767.7 c
-2788.26 2767.7 2796 2764.38 2803.74 2757.36 c
-2811.48 2750.52 2815.62 2744.4 2821.92 2730.72 c
-2826.42 2730.72 l
-2826.42 2773.16 l
-2821.56 2773.16 l
-2818.86 2766.43 2817.06 2764.56 2813.64 2764.56 c
-2811.84 2764.56 2809.5 2765.28 2805.36 2767.08 c
-2794.92 2771.4 2786.1 2773.7 2777.46 2773.7 c
-2741.64 2773.7 2715 2745.84 2715 2708.76 c
-2715 2671.68 2741.21 2645.58 2778.54 2645.58 c
-2799.24 2645.58 2811.48 2651.88 2829.66 2671.86 c
-h
-2835.96 2649 m
-f*
-2899.18 2646.66 m
-2906.78 2649.36 2911.02 2650.08 2922.5 2651.34 c
-2933.66 2652.6 l
-2933.66 2657 l
-2925.74 2657.35 2924 2659.63 2924 2667.18 c
-2924 2732 l
-2887.4 2732 l
-2887.4 2727.66 l
-2896.4 2726.94 2899 2724.78 2899 2717.04 c
-2899 2666.1 l
-2892.88 2660.16 2889.18 2658.48 2883.8 2658.48 c
-2876.42 2658.48 2874 2662 2874 2670.96 c
-2874 2732 l
-2839.88 2732 l
-2839.88 2727.66 l
-2847.26 2726.22 2849 2724.6 2849 2717.04 c
-2849 2671.68 l
-2849 2655.84 2857.89 2646.48 2872.64 2646.48 c
-2882.16 2646.48 2888.56 2649.36 2899.18 2658.36 c
-h
-2937.08 2649 m
-f*
-2975.28 2732 m
-2941.22 2732 l
-2941.22 2727.66 l
-2948.96 2726.58 2951 2724.24 2951 2717.04 c
-2951 2664.12 l
-2951 2656.74 2949.19 2654.76 2941.22 2653.32 c
-2941.22 2649 l
-2989.1 2649 l
-2989.1 2653.32 l
-2978.12 2654.04 2976 2656.38 2976 2667.54 c
-2976 2701.56 l
-2976 2710.92 2981.02 2718.66 2986.94 2718.66 c
-2988.38 2718.66 2990 2717.4 2991.98 2714.52 c
-2995.4 2709.66 2998.1 2708.04 3002.78 2708.04 c
-3009.44 2708.04 3014.12 2713.08 3014.12 2719.92 c
-3014.12 2728.2 3008 2734.16 2999.54 2734.16 c
-2990.55 2734.16 2983.73 2729.47 2975.28 2717.22 c
-h
-3015.92 2649 m
-f*
-3056.28 2732 m
-3022.22 2732 l
-3022.22 2727.66 l
-3029.96 2726.58 3032 2724.24 3032 2717.04 c
-3032 2664.12 l
-3032 2656.74 3030.19 2654.76 3022.22 2653.32 c
-3022.22 2649 l
-3070.1 2649 l
-3070.1 2653.32 l
-3059.12 2654.04 3057 2656.38 3057 2667.54 c
-3057 2701.56 l
-3057 2710.92 3062.02 2718.66 3067.94 2718.66 c
-3069.38 2718.66 3071 2717.4 3072.98 2714.52 c
-3076.4 2709.66 3079.1 2708.04 3083.78 2708.04 c
-3090.44 2708.04 3095.12 2713.08 3095.12 2719.92 c
-3095.12 2728.2 3089 2734.16 3080.54 2734.16 c
-3071.55 2734.16 3064.73 2729.47 3056.28 2717.22 c
-h
-3096.92 2649 m
-f*
-3168.36 2671.5 m
-3160.98 2662.68 3155.58 2659.48 3147.84 2659.48 c
-3141 2659.48 3135.6 2662.53 3132 2668.62 c
-3128.58 2674.36 3127.14 2680.45 3126.42 2693 c
-3171.78 2693 l
-3170.7 2707.99 3168 2716.3 3162.42 2723.34 c
-3156.66 2730.36 3148.2 2734.16 3138.12 2734.16 c
-3115.62 2734.16 3100.5 2716.33 3100.5 2690.04 c
-3100.5 2663.76 3115.26 2646.48 3137.58 2646.48 c
-3152.16 2646.48 3160.98 2652.06 3172.68 2668.98 c
-h
-3125.52 2700 m
-3126.06 2721.42 3129.3 2728.16 3138.12 2728.16 c
-3143.34 2728.16 3146.58 2725.42 3148.02 2720.1 c
-3148.92 2716.68 3149.28 2711.64 3149.64 2702.46 c
-3149.64 2700 l
-h
-3175.92 2649 m
-f*
-3213.82 2732 m
-3179.78 2732 l
-3179.78 2727.66 l
-3187.7 2726.4 3189 2724.6 3189 2717.04 c
-3189 2664.12 l
-3189 2656.56 3187.61 2654.94 3179.78 2653.32 c
-3179.78 2649 l
-3223.16 2649 l
-3223.16 2653.32 l
-3216.5 2654.22 3214 2656.92 3214 2663.58 c
-3214 2711.64 l
-3214 2712.36 3215.4 2714.16 3217.4 2715.96 c
-3221.36 2719.92 3225.68 2722.16 3230 2722.16 c
-3236.12 2722.16 3239 2717.27 3239 2707.14 c
-3239 2663.58 l
-3239 2656.92 3236.71 2654.04 3230.72 2653.32 c
-3230.72 2649 l
-3273.02 2649 l
-3273.02 2653.32 l
-3266 2653.86 3264 2656.02 3264 2663.58 c
-3264 2708.76 l
-3264 2724.24 3254.54 2734.16 3239.9 2734.16 c
-3228.96 2734.16 3220.57 2729.11 3213.82 2718.48 c
-h
-3276.08 2649 m
-f*
-3330.9 2732 m
-3314 2732 l
-3314 2762.4 l
-3309.48 2762.4 l
-3298.5 2746.92 3291.3 2738.82 3279.6 2728.92 c
-3279.6 2724 l
-3289 2724 l
-3289 2665.74 l
-3289 2654.04 3296.73 2646.84 3309.12 2646.84 c
-3321.18 2646.84 3328.38 2652.24 3335.76 2667 c
-3331.26 2668.98 l
-3327.66 2662.14 3324.78 2659.84 3321 2659.84 c
-3315.96 2659.84 3314 2662.83 3314 2669.88 c
-3314 2724 l
-3330.9 2724 l
-h
-3335.94 2649 m
-f*
-3381 2649 m
-f*
-3485.94 2771 m
-3383.88 2771 l
-3383.88 2766 l
-3396.3 2765.29 3400 2762.63 3400 2753.4 c
-3400 2666.28 l
-3400 2656.92 3397.44 2654.94 3383.88 2653.5 c
-3383.88 2649 l
-3448.68 2649 l
-3448.68 2654 l
-3432.12 2654.69 3429 2656.77 3429 2666.28 c
-3429 2708.22 l
-3447.28 2707.86 3453.91 2701.2 3456.42 2680.32 c
-3460.92 2680.32 l
-3460.92 2741.16 l
-3456.42 2741.16 l
-3453.19 2720.64 3446.92 2714.34 3429 2714.34 c
-3429 2756.1 l
-3429 2762.76 3431.32 2765 3440.4 2765 c
-3457.14 2765 3467.58 2761.8 3473.16 2755.2 c
-3477.12 2750.7 3479.1 2745.84 3481.62 2734.5 c
-3485.94 2734.5 l
-h
-3490.98 2649 m
-f*
-3530.28 2732 m
-3496.22 2732 l
-3496.22 2727.66 l
-3503.96 2726.58 3506 2724.24 3506 2717.04 c
-3506 2664.12 l
-3506 2656.74 3504.19 2654.76 3496.22 2653.32 c
-3496.22 2649 l
-3544.1 2649 l
-3544.1 2653.32 l
-3533.12 2654.04 3531 2656.38 3531 2667.54 c
-3531 2701.56 l
-3531 2710.92 3536.02 2718.66 3541.94 2718.66 c
-3543.38 2718.66 3545 2717.4 3546.98 2714.52 c
-3550.4 2709.66 3553.1 2708.04 3557.78 2708.04 c
-3564.44 2708.04 3569.12 2713.08 3569.12 2719.92 c
-3569.12 2728.2 3563 2734.16 3554.54 2734.16 c
-3545.55 2734.16 3538.73 2729.47 3530.28 2717.22 c
-h
-3570.92 2649 m
-f*
-3656.14 2660.52 m
-3654.34 2658.72 l
-3653.8 2658.18 3653.26 2658 3652.36 2658 c
-3649.84 2658 3649 2659.44 3649 2662.5 c
-3649 2709.48 l
-3649 2724.78 3635.16 2734.16 3612.94 2734.16 c
-3592.6 2734.16 3578.92 2724.97 3578.92 2711.46 c
-3578.92 2703.9 3583.24 2699.58 3590.62 2699.58 c
-3597.82 2699.58 3602.86 2703.9 3602.86 2710.02 c
-3602.86 2712.54 3601.96 2714.88 3599.62 2717.76 c
-3598 2719.56 3597.46 2720.64 3597.46 2721.72 c
-3597.46 2725.5 3602.32 2728.16 3608.8 2728.16 c
-3619.42 2728.16 3624 2723.37 3624 2712.54 c
-3624 2699.4 l
-3602.89 2692.92 3594.41 2689.68 3587.56 2685.18 c
-3579.46 2679.78 3576 2673.48 3576 2665.56 c
-3576 2654.58 3584.07 2646.48 3595.3 2646.48 c
-3605.74 2646.48 3614.02 2650.08 3623.92 2659.08 c
-3625.9 2649.9 3629.86 2646.48 3638.68 2646.48 c
-3646.42 2646.48 3652 2649.36 3658.84 2656.74 c
-h
-3624 2667 m
-3619.04 2661.42 3615.37 2659.26 3610.96 2659.26 c
-3605.56 2659.26 3602 2664.12 3602 2671.32 c
-3602 2681.76 3609.57 2689.14 3624 2693.1 c
-h
-3661 2649 m
-f*
-3698.46 2732 m
-3663.73 2732 l
-3663.73 2727.66 l
-3671.65 2726.58 3674 2724.42 3674 2717.04 c
-3674 2664.12 l
-3674 2656.74 3671.95 2654.76 3663.73 2653.32 c
-3663.73 2649 l
-3706.93 2649 l
-3706.93 2653.32 l
-3700.63 2654.22 3699 2656.74 3699 2663.58 c
-3699 2711.64 l
-3699 2712.54 3701.51 2715.78 3703.51 2717.76 c
-3707.29 2720.64 3710.53 2722.16 3713.77 2722.16 c
-3720.79 2722.16 3724 2718 3724 2707.14 c
-3724 2663.58 l
-3724 2656.2 3721.9 2653.86 3714.85 2653.32 c
-3714.85 2649 l
-3756.97 2649 l
-3756.97 2653.32 l
-3750.67 2654.04 3749 2656.74 3749 2663.58 c
-3749 2711.64 l
-3749 2712.54 3751.43 2715.6 3753.37 2717.58 c
-3757.33 2720.64 3760.57 2722.16 3763.81 2722.16 c
-3770.65 2722.16 3773 2717.82 3773 2707.14 c
-3773 2663.58 l
-3773 2656.02 3771.1 2653.86 3764.53 2653.32 c
-3764.53 2649 l
-3807.37 2649 l
-3807.37 2653 l
-3800.35 2653.37 3798 2655.6 3798 2663.58 c
-3798 2708.76 l
-3798 2724.24 3788.6 2734.16 3774.07 2734.16 c
-3763.81 2734.16 3756.97 2730.01 3747.61 2718.48 c
-3742.21 2729.82 3735.91 2734.16 3724.57 2734.16 c
-3713.2 2734.16 3705.21 2729.29 3698.46 2718.48 c
-h
-3810.94 2649 m
-f*
-3883.36 2671.5 m
-3875.98 2662.68 3870.58 2659.48 3862.84 2659.48 c
-3856 2659.48 3850.6 2662.53 3847 2668.62 c
-3843.58 2674.36 3842.14 2680.45 3841.42 2693 c
-3886.78 2693 l
-3885.7 2707.99 3883 2716.3 3877.42 2723.34 c
-3871.66 2730.36 3863.2 2734.16 3853.12 2734.16 c
-3830.62 2734.16 3815.5 2716.33 3815.5 2690.04 c
-3815.5 2663.76 3830.26 2646.48 3852.58 2646.48 c
-3867.16 2646.48 3875.98 2652.06 3887.68 2668.98 c
-h
-3840.52 2700 m
-3841.06 2721.42 3844.3 2728.16 3853.12 2728.16 c
-3858.34 2728.16 3861.58 2725.42 3863.02 2720.1 c
-3863.92 2716.68 3864.28 2711.64 3864.64 2702.46 c
-3864.64 2700 l
-h
-3890.92 2649 m
-f*
-1 i
-2705.75 2614.55 1184.4 15.5999 re
-f
-1 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-f*
-0 g
-3311.75 2840.15 m
-3478.55 2993.75 l
-3395.75 2993.75 l
-3395.75 3144.95 l
-3230.15 3144.95 l
-3230.15 2993.75 l
-3148.55 2993.75 l
-3311.75 2840.15 l
-3311.75 2853.35 l
-3173.75 2982.95 l
-3239.75 2982.95 l
-3239.75 3134.15 l
-3386.15 3134.15 l
-3386.15 2982.95 l
-3453.35 2982.95 l
-3311.75 2853.35 l
-3311.75 2840.15 l
-f*
-0.201248 i
-1359.33 3052 m
-1245.22 3052 l
-1245.22 3047 l
-1259.11 3046.2 1263 3043.18 1263 3032.72 c
-1263 2935.32 l
-1263 2924.85 1260.17 2922.64 1245.22 2921.03 c
-1245.22 2916 l
-1317.67 2916 l
-1317.67 2921 l
-1299.15 2921.81 1296 2924.23 1296 2935.32 c
-1296 2982.21 l
-1316.22 2981.81 1323.55 2974.36 1326.32 2951.02 c
-1331.35 2951.02 l
-1331.35 3019.04 l
-1326.32 3019.04 l
-1322.76 2996.1 1315.82 2989.05 1296 2989.05 c
-1296 3035.74 l
-1296 3043.19 1298.52 3045 1308.41 3045 c
-1327.13 3045 1338.8 3041.64 1345.04 3034.74 c
-1349.47 3029.71 1351.68 3024.27 1354.5 3011.59 c
-1359.33 3011.59 l
-h
-1364.96 2916 m
-f*
-1409.19 3009 m
-1370.84 3009 l
-1370.84 3003.95 l
-1379.49 3002.74 1382 3000.12 1382 2992.07 c
-1382 2932.9 l
-1382 2924.65 1379.93 2922.44 1370.84 2920.83 c
-1370.84 2916 l
-1424.37 2916 l
-1424.37 2920.83 l
-1412.09 2921.63 1410 2924.25 1410 2936.73 c
-1410 2974.76 l
-1410 2985.23 1415.49 2993.88 1421.95 2993.88 c
-1423.56 2993.88 1425.37 2992.47 1427.59 2989.25 c
-1431.41 2983.82 1434.43 2982.01 1439.66 2982.01 c
-1447.11 2982.01 1452.34 2987.64 1452.34 2995.29 c
-1452.34 3004.55 1445.5 3011.41 1436.04 3011.41 c
-1426.1 3011.41 1418.54 3006.12 1409.19 2992.27 c
-h
-1454.35 2916 m
-f*
-1549.19 2928.88 m
-1547.18 2926.87 l
-1546.57 2926.26 1545.97 2926.06 1544.96 2926.06 c
-1542.15 2926.06 1541 2927.67 1541 2931.09 c
-1541 2983.62 l
-1541 3000.73 1525.6 3011.42 1500.89 3011.42 c
-1478.15 3011.42 1462.85 3001.06 1462.85 2985.83 c
-1462.85 2977.38 1467.69 2972.55 1475.94 2972.55 c
-1483.99 2972.55 1489.62 2977.38 1489.62 2984.22 c
-1489.62 2987.04 1488.61 2989.66 1486 2992.88 c
-1484.19 2994.89 1483.58 2996.1 1483.58 2997.3 c
-1483.58 3001.53 1489.02 3004.42 1496.26 3004.42 c
-1508.14 3004.42 1513.86 2999.08 1513.86 2987.04 c
-1513.86 2972.35 l
-1489.91 2965.1 1480.29 2961.48 1472.51 2956.45 c
-1463.46 2950.41 1459 2943.37 1459 2934.52 c
-1459 2922.24 1468.27 2913.18 1481.17 2913.18 c
-1492.84 2913.18 1502.1 2917.21 1513.17 2927.27 c
-1515.38 2917.01 1519.81 2913.18 1529.67 2913.18 c
-1538.32 2913.18 1544.56 2916.4 1552.21 2924.65 c
-h
-1513 2936.13 m
-1507.55 2929.89 1503.52 2927.47 1498.68 2927.47 c
-1492.64 2927.47 1488 2932.91 1488 2940.96 c
-1488 2952.63 1496.61 2960.88 1513 2965.31 c
-h
-1554.62 2916 m
-f*
-1596.4 3009 m
-1557.7 3009 l
-1557.7 3003.95 l
-1566.55 3002.74 1569 3000.32 1569 2992.07 c
-1569 2932.9 l
-1569 2924.65 1566.74 2922.44 1557.7 2920.83 c
-1557.7 2916 l
-1606 2916 l
-1606 2920.83 l
-1598.95 2921.84 1597 2924.65 1597 2932.3 c
-1597 2986.03 l
-1597 2987.04 1599.87 2990.66 1602.18 2992.88 c
-1606.4 2996.1 1610.02 2998.42 1613.65 2998.42 c
-1621.5 2998.42 1625 2993.59 1625 2981 c
-1625 2932.3 l
-1625 2924.05 1622.68 2921.43 1614.85 2920.83 c
-1614.85 2916 l
-1661.95 2916 l
-1661.95 2920.83 l
-1654.9 2921.64 1653 2924.65 1653 2932.3 c
-1653 2986.03 l
-1653 2987.04 1655.73 2990.46 1657.92 2992.68 c
-1662.35 2996.1 1665.97 2998.42 1669.59 2998.42 c
-1677.24 2998.42 1680 2993.38 1680 2981 c
-1680 2932.3 l
-1680 2923.85 1677.85 2921.43 1670.4 2920.83 c
-1670.4 2916 l
-1718.3 2916 l
-1718.3 2921 l
-1710.45 2921.4 1708 2923.78 1708 2932.3 c
-1708 2982.81 l
-1708 3000.12 1697.43 3011.42 1681.07 3011.42 c
-1669.59 3011.42 1661.95 3006.73 1651.48 2993.68 c
-1645.44 3006.36 1638.4 3011.42 1625.72 3011.42 c
-1612.95 3011.42 1603.98 3005.91 1596.4 2993.68 c
-h
-1721.64 2916 m
-f*
-1799.9 2941.16 m
-1791.65 2931.29 1785.61 2927.18 1776.96 2927.18 c
-1769.31 2927.18 1763.27 2930.77 1759.25 2937.94 c
-1755.43 2944.54 1753.82 2951.56 1753.01 2966 c
-1803.73 2966 l
-1802.52 2982.36 1799.5 2991.43 1793.26 2999.12 c
-1786.82 3006.96 1777.36 3011.42 1766.09 3011.42 c
-1740.94 3011.42 1724.03 2991.4 1724.03 2961.88 c
-1724.03 2932.5 1740.53 2913.18 1765.49 2913.18 c
-1781.79 2913.18 1791.65 2919.42 1804.73 2938.34 c
-h
-1752 2973 m
-1752.61 2996.96 1756.23 3004.42 1766.09 3004.42 c
-1771.93 3004.42 1775.55 3001.38 1777.16 2995.49 c
-1778.17 2991.67 1778.57 2986.03 1778.97 2975.77 c
-1778.97 2973 l
-h
-1808.35 2916 m
-f*
-1905.16 3011.59 m
-1905.16 3055.22 l
-1899.37 3055.22 l
-1897.96 3049.82 1896.55 3048.42 1892.93 3048.42 c
-1891.12 3048.42 1888.7 3049.03 1884.47 3050.43 c
-1875.22 3053.86 1868.78 3055.02 1860.93 3055.02 c
-1833.56 3055.02 1817 3039.54 1817 3014.01 c
-1817 3008.98 1817.75 3004.75 1819.07 3000.73 c
-1823.29 2990.06 1834.16 2980.6 1851.27 2972.35 c
-1864.75 2965.91 l
-1882.46 2957.46 1887 2952.22 1887 2941.56 c
-1887 2927.67 1877.25 2919.18 1861.94 2919.18 c
-1850.26 2919.18 1840.6 2923.89 1832.96 2933.31 c
-1827.12 2940.75 1824.3 2947.6 1820.88 2961.88 c
-1815.04 2961.88 l
-1815.04 2912.18 l
-1820.88 2912.18 l
-1822.09 2917.41 1823.7 2919.02 1826.92 2919.02 c
-1828.53 2919.02 1830.74 2918.42 1835.17 2917.01 c
-1845.03 2913.59 1852.48 2912.18 1861.33 2912.18 c
-1891.12 2912.18 1911 2929.28 1911 2954.64 c
-1911 2969.73 1902.04 2984.83 1889.1 2991.27 c
-1859.52 3005.96 l
-1843.22 3014.01 1839 3018.84 1839 3028.7 c
-1839 3041.18 1847.37 3048.02 1860.93 3048.02 c
-1869.99 3048.02 1878.44 3044.47 1885.68 3037.55 c
-1892.53 3030.51 1895.75 3024.67 1899.77 3011.59 c
-h
-1919.89 2916 m
-f*
-2000.9 2941.16 m
-1992.65 2931.29 1986.61 2927.18 1977.96 2927.18 c
-1970.31 2927.18 1964.27 2930.77 1960.25 2937.94 c
-1956.43 2944.54 1954.82 2951.56 1954.01 2966 c
-2004.73 2966 l
-2003.52 2982.36 2000.5 2991.43 1994.26 2999.12 c
-1987.82 3006.96 1978.36 3011.42 1967.09 3011.42 c
-1941.94 3011.42 1925.03 2991.4 1925.03 2961.88 c
-1925.03 2932.5 1941.53 2913.18 1966.49 2913.18 c
-1982.79 2913.18 1992.65 2919.42 2005.73 2938.34 c
-h
-1953 2973 m
-1953.61 2996.96 1957.23 3004.42 1967.09 3004.42 c
-1972.93 3004.42 1976.55 3001.38 1978.16 2995.49 c
-1979.17 2991.67 1979.57 2986.03 1979.97 2975.77 c
-1979.97 2973 l
-h
-2009.35 2916 m
-f*
-2070.38 3009 m
-2051 3009 l
-2051 3042.79 l
-2046.43 3042.79 l
-2034.16 3025.48 2026.11 3016.42 2013.02 3005.35 c
-2013.02 3000 l
-2023 3000 l
-2023 2934.72 l
-2023 2921.64 2031.84 2913.59 2046.03 2913.59 c
-2059.51 2913.59 2067.56 2919.62 2075.81 2936.12 c
-2070.78 2938.34 l
-2066.76 2930.69 2063.54 2927.59 2059.31 2927.59 c
-2053.68 2927.59 2051 2931.09 2051 2939.34 c
-2051 3000 l
-2070.38 3000 l
-h
-2076.02 2916 m
-f*
-1 i
-0.564706 g
-5033.75 4836.95 m
-4866.95 4894.55 l
-4985.75 4983.35 l
-4796.15 4996.55 l
-4848.95 5105.75 l
-4666.55 5074.55 l
-4644.95 5187.35 l
-4496.15 5116.55 l
-4404.95 5216.15 l
-4311.35 5116.55 l
-4162.55 5187.35 l
-4140.95 5074.55 l
-3957.35 5105.75 l
-4011.35 4996.55 l
-3820.55 4983.35 l
-3939.35 4894.55 l
-3773.75 4836.95 l
-3939.35 4781.75 l
-3820.55 4692.95 l
-4011.35 4680.95 l
-3957.35 4570.55 l
-4140.95 4602.95 l
-4162.55 4490.15 l
-4311.35 4560.95 l
-4404.95 4461.35 l
-4496.15 4560.95 l
-4644.95 4490.15 l
-4666.55 4602.95 l
-4848.95 4570.55 l
-4796.15 4680.95 l
-4985.75 4692.95 l
-4866.95 4781.75 l
-f*
-1 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-f*
-0 g
-4973.75 4896.95 m
-4806.95 4954.55 l
-4925.75 5043.35 l
-4736.15 5056.55 l
-4788.95 5165.75 l
-4606.55 5134.55 l
-4584.95 5247.35 l
-4436.15 5176.55 l
-4344.95 5276.15 l
-4251.35 5176.55 l
-4102.55 5247.35 l
-4080.95 5134.55 l
-3897.35 5165.75 l
-3951.35 5056.55 l
-3760.55 5043.35 l
-3879.35 4954.55 l
-3713.75 4896.95 l
-3879.35 4841.75 l
-3760.55 4752.95 l
-3951.35 4740.95 l
-3897.35 4630.55 l
-4080.95 4662.95 l
-4102.55 4550.15 l
-4251.35 4620.95 l
-4344.95 4521.35 l
-4436.15 4620.95 l
-4584.95 4550.15 l
-4606.55 4662.95 l
-4788.95 4630.55 l
-4736.15 4740.95 l
-4925.75 4752.95 l
-4806.95 4841.75 l
-4973.75 4896.95 l
-4850.15 4898.15 l
-4721.75 4856.15 l
-4816.55 4786.55 l
-4674.95 4776.95 l
-4718.15 4683.35 l
-4575.35 4709.75 l
-4554.95 4608.95 l
-4426.55 4670.15 l
-4344.95 4580.15 l
-4259.75 4670.15 l
-4132.55 4608.95 l
-4113.35 4709.75 l
-3966.95 4683.35 l
-4013.75 4776.95 l
-3870.95 4786.55 l
-3964.55 4856.15 l
-3837.35 4898.15 l
-3963.35 4942.55 l
-3870.95 5010.95 l
-4013.75 5019.35 l
-3966.95 5112.95 l
-4113.35 5088.95 l
-4132.55 5188.55 l
-4259.75 5127.35 l
-4344.95 5217.35 l
-4426.55 5127.35 l
-4554.95 5188.55 l
-4575.35 5088.95 l
-4719.35 5112.95 l
-4674.95 5019.35 l
-4816.55 5010.95 l
-4724.15 4942.55 l
-4850.15 4898.15 l
-4973.75 4896.95 l
-f*
-0.2 i
-4251.96 5065 m
-4220.76 5065 l
-4220.76 5061.04 l
-4229.56 5060.24 4231 5059.28 4234.04 5052.24 c
-4214.84 4986.48 l
-4208.6 4965.52 4207.48 4963.76 4198.68 4962 c
-4198.68 4958 l
-4231.96 4958 l
-4231.96 4962 l
-4222.52 4962.8 4219.16 4965.2 4219.16 4971.44 c
-4219.16 4974.48 4220.12 4979.76 4222.04 4986.48 c
-4237.88 5043.44 l
-4279 4955.6 l
-4283.48 4955.6 l
-4306.36 5036.56 l
-4312.6 5057.68 4313.4 5058.96 4322.68 5061.04 c
-4322.68 5065 l
-4289.24 5065 l
-4289.24 5061.04 l
-4298.68 5060.24 4302.04 5057.68 4302.04 5051.6 c
-4302.04 5048.56 4300.92 5043.12 4299.16 5036.56 c
-4286.36 4990.64 l
-h
-4318.52 4958 m
-f*
-4369.72 4980.72 m
-4362.36 4969.68 4357.72 4965.92 4350.84 4965.92 c
-4344.12 4965.92 4341 4970.48 4341 4979.28 c
-4341 4981.84 4341.19 4983.92 4341.56 4987.12 c
-4358.2 4990.32 4366.04 4993.84 4374.04 5001.2 c
-4379.64 5006.32 4383 5012.24 4383 5018 c
-4383 5026.16 4375.83 5032.08 4365.88 5032.08 c
-4342.68 5032.08 4320 5005.92 4320 4979.44 c
-4320 4965.84 4330.15 4955.92 4343.96 4955.92 c
-4356.28 4955.92 4364.76 4962.16 4374.36 4978 c
-h
-4342.68 4992.24 m
-4348.44 5014.48 4355.8 5027.08 4363.48 5027.08 c
-4366.52 5027.08 4368 5025.18 4368 5021.2 c
-4368 5014.16 4365.27 5007.28 4360.12 5002 c
-4355.8 4997.36 4351.8 4995.12 4342.68 4992.24 c
-h
-4390.04 4958 m
-f*
-4391.56 5023.12 m
-4395.56 5023.12 4396.84 5022.96 4398.12 5021.84 c
-4401.48 5019.28 4403.72 5004.24 4404.2 4982 c
-4404.52 4969.52 l
-4404.52 4968.72 l
-4404.52 4968.56 4404.52 4966.16 4404.36 4963.12 c
-4404.2 4955.92 l
-4408.52 4955.92 l
-4417.64 4969.68 l
-4424.2 4980.72 4430.28 4991.44 4435.72 5001.52 c
-4439.4 4955.92 l
-4443.72 4955.92 l
-4473.32 4987.28 4487 5008.56 4487 5022 c
-4487 5027.28 4482.63 5032.08 4477.48 5032.08 c
-4472.68 5032.08 4468.52 5027.52 4468.52 5022.32 c
-4468.52 5019.92 4469.48 5017.84 4471.88 5014.48 c
-4474.12 5011.44 4475 5009.36 4475 5007.76 c
-4475 5002.96 4470.06 4995.28 4456.04 4978.8 c
-4450.92 5032.08 l
-4446.6 5032.08 l
-4433.16 5008.8 4430.6 5004.14 4421.64 4987.92 c
-4421.16 5007.76 4420.04 5018.16 4416.36 5031.92 c
-4409.8 5030.48 4404.84 5029.68 4391.56 5027.44 c
-h
-4495.72 4958 m
-f*
-4162.08 4855.76 m
-4142.08 4781.52 l
-4139.52 4772.88 4136.48 4770.64 4126.08 4770 c
-4126.08 4766 l
-4176 4766 l
-4176 4770 l
-4166.72 4770.48 4164.48 4771.76 4164.48 4776.88 c
-4164.48 4778.64 4164.8 4780.4 4165.76 4784.08 c
-4165.92 4784.88 l
-4166.08 4785.68 l
-4185.76 4857.52 l
-4188.16 4865.84 4190.56 4868.08 4198.72 4869.04 c
-4198.72 4873 l
-4164.8 4873 l
-4115.2 4796.24 l
-4106.56 4873 l
-4071.2 4873 l
-4071.2 4869 l
-4081.28 4868.52 4082.72 4867.89 4082.72 4863.44 c
-4082.72 4861.2 4082.08 4858.32 4080.96 4854.16 c
-4063.52 4794.48 l
-4057.12 4773.68 4056 4771.92 4047.36 4770 c
-4047.36 4766 l
-4080.48 4766 l
-4080.48 4770 l
-4070.24 4771.28 4067.68 4773.2 4067.68 4779.76 c
-4067.68 4782.48 4068.48 4786.48 4070.72 4794.48 c
-4086.88 4853.52 l
-4097.6 4764.08 l
-4102.08 4764.08 l
-h
-4194.24 4766 m
-f*
-4264.44 4786.32 m
-4257.88 4777.52 4255.48 4774.76 4252.92 4774.76 c
-4251.64 4774.76 4251 4775.86 4251 4777.52 c
-4251 4781.52 4252.44 4788.08 4256.44 4801.2 c
-4267.8 4838.96 l
-4250.04 4837.84 l
-4247.16 4828.4 l
-4245.72 4836.56 4242.2 4840.08 4235.32 4840.08 c
-4215.64 4840.08 4192 4809.27 4192 4784.24 c
-4192 4772.08 4198.74 4763.92 4208.92 4763.92 c
-4218.68 4763.92 4226.04 4769.68 4235.16 4785.04 c
-4233.24 4778.48 4233 4776.56 4233 4774.32 c
-4233 4768.4 4237.76 4763.76 4243.64 4763.76 c
-4251.16 4763.76 4258.52 4770 4267.8 4783.92 c
-h
-4237.56 4833.2 m
-4241.08 4832.88 4243.56 4830 4243.56 4825.68 c
-4243.56 4816.08 4238.24 4798.32 4231.96 4787.28 c
-4227.64 4779.44 4222.84 4774.92 4218.52 4774.92 c
-4214.36 4774.92 4211 4778.75 4211 4783.92 c
-4211 4792.24 4216.42 4808.24 4223.16 4820.08 c
-4227.96 4828.56 4233.24 4833.52 4237.56 4833.2 c
-h
-4275 4766 m
-f*
-4309.56 4839.92 m
-4293.24 4837.36 4287 4836.4 4278.68 4835.44 c
-4278.68 4831 l
-4285.88 4830.69 4287.32 4830.07 4287.32 4827.12 c
-4287.32 4825.52 4286.04 4819.76 4283.8 4811.44 c
-4267.8 4749.36 l
-4264.76 4738.8 4263.48 4737.84 4255.8 4738 c
-4255.8 4733 l
-4295.64 4733 l
-4295.64 4738 l
-4287.64 4738.14 4285.24 4739.16 4285.24 4742.64 c
-4285.24 4744.88 4286.36 4749.68 4289.4 4760.88 c
-4290.52 4764.72 4290.52 4765.04 4291.16 4767.44 c
-4296.76 4764.56 4298.68 4763.92 4302.04 4763.92 c
-4323.8 4763.92 4346.36 4792.88 4346.36 4820.56 c
-4346.36 4832.4 4339.64 4840.08 4329.08 4840.08 c
-4319.96 4840.08 4312.92 4834.92 4303.48 4821.52 c
-h
-4320.12 4828.56 m
-4324.28 4828.24 4326.68 4824.56 4326.36 4819.44 c
-4325.72 4808.88 4320.6 4793.04 4314.84 4782.64 c
-4309.88 4774 4304.76 4768.92 4299.32 4768.92 c
-4295.8 4768.92 4293.08 4771.75 4293.08 4775.28 c
-4293.08 4778 4294.84 4784.56 4299.16 4799.12 c
-4302.68 4810.8 4304.12 4814.8 4306.52 4818.48 c
-4310.52 4824.72 4315.96 4828.88 4320.12 4828.56 c
-h
-4355 4766 m
-f*
-4389.56 4839.92 m
-4373.24 4837.36 4367 4836.4 4358.68 4835.44 c
-4358.68 4831 l
-4365.88 4830.69 4367.32 4830.07 4367.32 4827.12 c
-4367.32 4825.52 4366.04 4819.76 4363.8 4811.44 c
-4347.8 4749.36 l
-4344.76 4738.8 4343.48 4737.84 4335.8 4738 c
-4335.8 4733 l
-4375.64 4733 l
-4375.64 4738 l
-4367.64 4738.14 4365.24 4739.16 4365.24 4742.64 c
-4365.24 4744.88 4366.36 4749.68 4369.4 4760.88 c
-4370.52 4764.72 4370.52 4765.04 4371.16 4767.44 c
-4376.76 4764.56 4378.68 4763.92 4382.04 4763.92 c
-4403.8 4763.92 4426.36 4792.88 4426.36 4820.56 c
-4426.36 4832.4 4419.64 4840.08 4409.08 4840.08 c
-4399.96 4840.08 4392.92 4834.92 4383.48 4821.52 c
-h
-4400.12 4828.56 m
-4404.28 4828.24 4406.68 4824.56 4406.36 4819.44 c
-4405.72 4808.88 4400.6 4793.04 4394.84 4782.64 c
-4389.88 4774 4384.76 4768.92 4379.32 4768.92 c
-4375.8 4768.92 4373.08 4771.75 4373.08 4775.28 c
-4373.08 4778 4374.84 4784.56 4379.16 4799.12 c
-4382.68 4810.8 4384.12 4814.8 4386.52 4818.48 c
-4390.52 4824.72 4395.96 4828.88 4400.12 4828.56 c
-h
-4435 4766 m
-f*
-4469.56 4788.56 m
-4467.32 4785.36 l
-4463.16 4779.12 4459.48 4775.56 4457.08 4775.56 c
-4455.8 4775.56 4455 4776.77 4455 4778.16 c
-4455 4779.6 4455.62 4783.76 4456.12 4786.48 c
-4470.68 4839.92 l
-4462.22 4838 4451.26 4836.4 4439.04 4835.44 c
-4439.04 4831 l
-4440.44 4831 l
-4445.24 4831 4448.48 4829.44 4448.48 4826.48 c
-4448.48 4825.2 4447.71 4822.8 4446.68 4820.08 c
-4437.4 4785.68 l
-4436.12 4781.04 4436 4776.88 4436 4774.64 c
-4436 4768.56 4440.2 4764.56 4446.36 4764.56 c
-4455.96 4764.56 4461.88 4769.36 4473.08 4786.32 c
-h
-4465.88 4875.4 m
-4460.44 4875.4 4456 4870.46 4456 4865.04 c
-4456 4858.8 4460.26 4854.4 4466.04 4854.4 c
-4472.12 4854.4 4477 4858.86 4477 4864.56 c
-4477 4870.48 4472 4875.4 4465.88 4875.4 c
-h
-4479.48 4766 m
-f*
-4553.36 4787.6 m
-4546.96 4777.68 4544.88 4775.56 4542.16 4775.56 c
-4540.88 4775.56 4540 4776.63 4540 4778.16 c
-4540 4779.76 4540.94 4783.12 4543.92 4792.08 c
-4549.68 4809.52 l
-4552.24 4817.04 4554 4824.08 4554 4827.92 c
-4554 4835.76 4549.78 4840.08 4542.16 4840.08 c
-4536.24 4840.08 4530.48 4837.62 4526.16 4833.36 c
-4520.24 4827.76 4517.2 4823.92 4506.48 4808.08 c
-4516.72 4839.76 l
-4506.48 4837.52 4493.68 4835.92 4484.72 4835.6 c
-4484.72 4830.8 l
-4491.44 4830.65 4493.36 4829.92 4493.36 4827.12 c
-4493.36 4825.2 4491.12 4816.72 4486 4798.64 c
-4482.32 4785.68 4481.2 4781.52 4477.04 4766 c
-4496.4 4766 l
-4503.92 4793.68 4509.68 4807.6 4519.6 4820.56 c
-4522.8 4824.88 4527.76 4828.08 4530.64 4828.08 c
-4532.72 4828.08 4535 4826.63 4535 4825.04 c
-4535 4824.56 4534.54 4823.28 4533.84 4821.68 c
-4525.04 4795.12 l
-4522.48 4787.44 4521 4778.32 4521 4774.16 c
-4521 4768.08 4524.84 4764.56 4531.44 4764.56 c
-4541.04 4764.56 4547.6 4770 4556.88 4785.52 c
-h
-4566.96 4766 m
-f*
-4644.48 4835 m
-4626.72 4835 l
-4621.28 4838.58 4616.48 4840.08 4609.12 4840.08 c
-4589.44 4840.08 4573 4827.05 4573 4810.8 c
-4573 4802.64 4577.35 4796.88 4586.4 4793.2 c
-4573.28 4785.84 4571 4783.6 4571 4777.68 c
-4571 4772.56 4573.89 4769.52 4580.96 4767.12 c
-4571.04 4764.72 4567.84 4763.44 4564 4760.4 c
-4561.44 4758.16 4560 4754.32 4560 4750.48 c
-4560 4740.08 4571.56 4734 4589.76 4734 c
-4612.32 4734 4628 4743.72 4628 4757.52 c
-4628 4767.28 4621.6 4772.56 4604.16 4777.52 c
-4595.68 4779.92 l
-4590.56 4781.36 4587 4783.6 4587 4786 c
-4587 4788.56 4589.68 4791.28 4592 4791.28 c
-4592.8 4791.28 4593.92 4791.24 4595.2 4791.12 c
-4596.96 4790.64 4598.24 4790 4600.16 4790 c
-4607.2 4790 4614.4 4792.09 4620.48 4795.92 c
-4629.76 4801.2 4635 4809.36 4635 4818.96 c
-4635 4821.64 4634.59 4823.32 4633.76 4826 c
-4644.48 4826 l
-h
-4586.4 4765.04 m
-4588.32 4764.88 4600.48 4760.72 4604 4759.12 c
-4608.48 4756.88 4611 4754.16 4611 4750 c
-4611 4742.96 4603.8 4739 4591.36 4739 c
-4580.96 4739 4574 4744.1 4574 4751.44 c
-4574 4754.48 4575.32 4757.2 4578.24 4760.24 c
-4580.32 4762.32 4585.12 4765.2 4586.4 4765.04 c
-h
-4608.8 4835.08 m
-4612.96 4835.08 4616 4831.19 4616 4825.52 c
-4616 4820.08 4614.08 4812.4 4611.36 4806.48 c
-4608 4799.12 4603.84 4795 4598.88 4795 c
-4594.56 4795 4592 4798.52 4592 4804.88 c
-4592 4811.28 4594.79 4821.04 4598.24 4827.12 c
-4601.28 4832.4 4604.64 4835.08 4608.8 4835.08 c
-h
-4648 4766 m
-f*
-1 i
-5048.15 4276.55 m
-5061.35 4314.95 5067.35 4354.55 5067.35 4395.35 c
-5067.35 4517.75 5010.95 4632.95 4913.75 4706.15 c
-S
-5002.55 4371.35 m
-5055.35 4306.55 l
-5138.15 4295.75 l
-4949.75 4116.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/gridplot.eps b/ast-5.3-1/sun211_figures/gridplot.eps
deleted file mode 100644
index 8d10486..0000000
--- a/ast-5.3-1/sun211_figures/gridplot.eps
+++ /dev/null
@@ -1,16726 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:43
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-1 0 1 rg
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-0 g
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-0 0 1 rg
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-1 0 0 rg
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/gridplot_bw.eps b/ast-5.3-1/sun211_figures/gridplot_bw.eps
deleted file mode 100644
index f2a2dea..0000000
--- a/ast-5.3-1/sun211_figures/gridplot_bw.eps
+++ /dev/null
@@ -1,16724 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 97 220 409 571
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 15:41:51
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-0.36 w
-1 J
-1 j
-0 g
-533.21 1777.32 4343.81 4343.81 re
-Y
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3317 l
-2985 3318 l
-2986 3319 l
-2987 3319 l
-2988 3320 l
-2990 3320 l
-2991 3321 l
-3005 3329 l
-3020 3338 l
-3034 3347 l
-3049 3356 l
-3063 3365 l
-3077 3375 l
-3091 3385 l
-3105 3395 l
-3118 3405 l
-3132 3415 l
-3145 3426 l
-3158 3436 l
-3171 3447 l
-3184 3459 l
-3197 3470 l
-3209 3482 l
-3222 3493 l
-3234 3505 l
-3246 3517 l
-3257 3530 l
-3269 3542 l
-3280 3555 l
-3291 3568 l
-3302 3581 l
-3313 3594 l
-3324 3607 l
-3334 3621 l
-3344 3634 l
-3354 3648 l
-3364 3662 l
-3373 3676 l
-3382 3691 l
-3391 3705 l
-3400 3720 l
-3409 3735 l
-3417 3750 l
-3425 3765 l
-3433 3780 l
-3441 3795 l
-3448 3810 l
-3455 3826 l
-3462 3842 l
-3469 3858 l
-3475 3873 l
-3481 3890 l
-3487 3906 l
-3492 3922 l
-3497 3938 l
-3502 3955 l
-3507 3971 l
-3512 3988 l
-3516 4005 l
-3519 4022 l
-3523 4039 l
-3526 4056 l
-3529 4073 l
-3532 4090 l
-3534 4107 l
-3536 4125 l
-3538 4142 l
-3539 4159 l
-3540 4177 l
-3541 4194 l
-3541 4212 l
-3541 4230 l
-3541 4247 l
-3541 4265 l
-3540 4283 l
-3538 4301 l
-3537 4318 l
-3535 4336 l
-3532 4354 l
-3529 4372 l
-3526 4390 l
-3523 4407 l
-3519 4425 l
-3515 4443 l
-3510 4461 l
-3505 4479 l
-3500 4496 l
-3494 4514 l
-3488 4531 l
-3481 4549 l
-3474 4567 l
-3467 4584 l
-3459 4601 l
-3451 4618 l
-3442 4636 l
-3433 4653 l
-3423 4670 l
-3413 4686 l
-3403 4703 l
-3392 4720 l
-3381 4736 l
-3369 4752 l
-3357 4768 l
-3344 4784 l
-3331 4800 l
-3318 4815 l
-3304 4831 l
-3289 4846 l
-3274 4860 l
-3259 4875 l
-3243 4889 l
-3227 4903 l
-3210 4917 l
-3193 4931 l
-3175 4944 l
-3157 4956 l
-3138 4969 l
-3119 4981 l
-3100 4993 l
-3080 5004 l
-3059 5015 l
-3038 5025 l
-3017 5035 l
-2995 5045 l
-2973 5054 l
-2951 5063 l
-2928 5071 l
-2904 5078 l
-2880 5085 l
-2856 5092 l
-2832 5098 l
-2807 5103 l
-2782 5108 l
-2756 5112 l
-2730 5115 l
-2704 5118 l
-2678 5120 l
-2651 5121 l
-2624 5122 l
-2597 5122 l
-2569 5121 l
-2542 5120 l
-2514 5117 l
-2487 5114 l
-2459 5110 l
-2431 5106 l
-2403 5100 l
-2375 5094 l
-2347 5087 l
-2319 5079 l
-2292 5071 l
-2264 5061 l
-2237 5051 l
-2235 5050 l
-2233 5050 l
-2231 5049 l
-2229 5048 l
-2227 5047 l
-2225 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3318 l
-2983 3319 l
-2983 3320 l
-2984 3321 l
-2984 3322 l
-2984 3323 l
-2984 3324 l
-2985 3337 l
-2986 3351 l
-2987 3364 l
-2988 3378 l
-2989 3392 l
-2990 3406 l
-2991 3420 l
-2991 3434 l
-2992 3448 l
-2992 3462 l
-2992 3476 l
-2992 3490 l
-2992 3504 l
-2992 3518 l
-2992 3533 l
-2992 3547 l
-2992 3561 l
-2991 3576 l
-2991 3590 l
-2990 3605 l
-2989 3619 l
-2988 3634 l
-2988 3648 l
-2986 3663 l
-2985 3678 l
-2984 3692 l
-2983 3707 l
-2982 3722 l
-2980 3736 l
-2978 3751 l
-2977 3766 l
-2975 3780 l
-2973 3795 l
-2971 3810 l
-2969 3825 l
-2967 3839 l
-2965 3854 l
-2963 3869 l
-2961 3884 l
-2958 3899 l
-2956 3913 l
-2953 3928 l
-2950 3943 l
-2948 3958 l
-2945 3972 l
-2942 3987 l
-2939 4002 l
-2936 4016 l
-2933 4031 l
-2929 4046 l
-2926 4060 l
-2923 4075 l
-2919 4089 l
-2916 4104 l
-2912 4119 l
-2908 4133 l
-2904 4147 l
-2900 4162 l
-2897 4176 l
-2893 4191 l
-2888 4205 l
-2884 4219 l
-2880 4233 l
-2876 4247 l
-2871 4262 l
-2867 4276 l
-2862 4290 l
-2858 4304 l
-2853 4317 l
-2848 4331 l
-2843 4345 l
-2838 4359 l
-2833 4372 l
-2828 4386 l
-2823 4400 l
-2818 4413 l
-2812 4426 l
-2807 4440 l
-2802 4453 l
-2796 4466 l
-2790 4479 l
-2785 4492 l
-2779 4505 l
-2773 4518 l
-2767 4531 l
-2761 4543 l
-2755 4556 l
-2749 4568 l
-2743 4581 l
-2737 4593 l
-2730 4605 l
-2724 4617 l
-2717 4629 l
-2711 4641 l
-2704 4653 l
-2697 4664 l
-2691 4676 l
-2684 4687 l
-2677 4699 l
-2670 4710 l
-2662 4721 l
-2655 4732 l
-2648 4743 l
-2641 4753 l
-2633 4764 l
-2626 4774 l
-2618 4785 l
-2610 4795 l
-2602 4805 l
-2594 4815 l
-2586 4825 l
-2578 4834 l
-2570 4844 l
-2562 4853 l
-2554 4862 l
-2545 4871 l
-2537 4880 l
-2528 4888 l
-2519 4897 l
-2510 4905 l
-2501 4913 l
-2492 4921 l
-2483 4929 l
-2474 4937 l
-2464 4944 l
-2455 4951 l
-2445 4958 l
-2435 4965 l
-2425 4972 l
-2415 4978 l
-2405 4984 l
-2394 4990 l
-2384 4996 l
-2373 5001 l
-2362 5006 l
-2351 5011 l
-2340 5016 l
-2328 5020 l
-2317 5025 l
-2305 5028 l
-2293 5032 l
-2281 5035 l
-2268 5038 l
-2256 5041 l
-2243 5043 l
-2230 5045 l
-2229 5045 l
-2228 5045 l
-2227 5045 l
-2226 5045 l
-2225 5045 l
-2224 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3317 l
-2981 3318 l
-2980 3318 l
-2979 3318 l
-2978 3319 l
-2977 3319 l
-2976 3320 l
-2963 3325 l
-2950 3331 l
-2936 3336 l
-2923 3342 l
-2910 3348 l
-2896 3355 l
-2883 3361 l
-2870 3368 l
-2857 3374 l
-2844 3381 l
-2831 3388 l
-2818 3396 l
-2805 3403 l
-2792 3410 l
-2779 3418 l
-2766 3426 l
-2754 3434 l
-2741 3442 l
-2728 3450 l
-2716 3458 l
-2703 3467 l
-2691 3475 l
-2678 3484 l
-2666 3493 l
-2654 3502 l
-2642 3511 l
-2630 3520 l
-2618 3529 l
-2606 3539 l
-2594 3548 l
-2582 3558 l
-2570 3567 l
-2559 3577 l
-2547 3587 l
-2535 3597 l
-2524 3608 l
-2513 3618 l
-2501 3628 l
-2490 3639 l
-2479 3649 l
-2468 3660 l
-2457 3671 l
-2446 3682 l
-2436 3693 l
-2425 3704 l
-2415 3715 l
-2404 3726 l
-2394 3737 l
-2384 3749 l
-2373 3760 l
-2363 3772 l
-2353 3783 l
-2344 3795 l
-2334 3807 l
-2324 3819 l
-2315 3831 l
-2305 3843 l
-2296 3855 l
-2287 3867 l
-2278 3879 l
-2269 3892 l
-2260 3904 l
-2252 3916 l
-2243 3929 l
-2235 3942 l
-2226 3954 l
-2218 3967 l
-2210 3980 l
-2202 3992 l
-2194 4005 l
-2187 4018 l
-2179 4031 l
-2172 4044 l
-2165 4057 l
-2158 4070 l
-2151 4083 l
-2144 4096 l
-2137 4110 l
-2131 4123 l
-2125 4136 l
-2118 4150 l
-2112 4163 l
-2107 4176 l
-2101 4190 l
-2095 4203 l
-2090 4217 l
-2085 4231 l
-2080 4244 l
-2075 4258 l
-2070 4271 l
-2066 4285 l
-2062 4299 l
-2058 4312 l
-2054 4326 l
-2050 4340 l
-2046 4354 l
-2043 4368 l
-2040 4381 l
-2037 4395 l
-2034 4409 l
-2032 4423 l
-2029 4437 l
-2027 4451 l
-2025 4465 l
-2024 4479 l
-2022 4493 l
-2021 4507 l
-2020 4521 l
-2019 4535 l
-2019 4548 l
-2019 4562 l
-2019 4576 l
-2019 4590 l
-2019 4604 l
-2020 4618 l
-2021 4632 l
-2022 4646 l
-2024 4660 l
-2026 4674 l
-2028 4688 l
-2031 4702 l
-2033 4716 l
-2036 4730 l
-2040 4744 l
-2044 4758 l
-2048 4771 l
-2052 4785 l
-2057 4799 l
-2062 4813 l
-2068 4827 l
-2073 4840 l
-2080 4854 l
-2086 4868 l
-2094 4881 l
-2101 4895 l
-2109 4908 l
-2117 4922 l
-2126 4935 l
-2136 4949 l
-2146 4962 l
-2156 4975 l
-2167 4988 l
-2178 5001 l
-2190 5014 l
-2203 5027 l
-2216 5039 l
-2217 5040 l
-2218 5041 l
-2219 5042 l
-2220 5043 l
-2221 5044 l
-2222 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2982 3316 l
-2981 3316 l
-2980 3315 l
-2979 3315 l
-2978 3314 l
-2977 3313 l
-2976 3313 l
-2961 3305 l
-2946 3297 l
-2930 3290 l
-2915 3282 l
-2899 3275 l
-2884 3268 l
-2868 3262 l
-2852 3256 l
-2836 3250 l
-2820 3244 l
-2804 3238 l
-2788 3233 l
-2772 3228 l
-2755 3223 l
-2739 3219 l
-2722 3214 l
-2706 3210 l
-2689 3207 l
-2672 3203 l
-2656 3200 l
-2639 3197 l
-2622 3194 l
-2605 3192 l
-2588 3190 l
-2571 3188 l
-2554 3187 l
-2537 3185 l
-2520 3185 l
-2502 3184 l
-2485 3184 l
-2468 3184 l
-2451 3184 l
-2433 3184 l
-2416 3185 l
-2399 3186 l
-2382 3188 l
-2364 3190 l
-2347 3192 l
-2330 3194 l
-2313 3197 l
-2295 3200 l
-2278 3203 l
-2261 3207 l
-2244 3211 l
-2227 3215 l
-2210 3220 l
-2193 3225 l
-2176 3231 l
-2159 3236 l
-2143 3242 l
-2126 3249 l
-2109 3255 l
-2093 3263 l
-2076 3270 l
-2060 3278 l
-2044 3286 l
-2028 3294 l
-2012 3303 l
-1996 3313 l
-1980 3322 l
-1965 3332 l
-1949 3342 l
-1934 3353 l
-1919 3364 l
-1904 3376 l
-1889 3388 l
-1875 3400 l
-1860 3412 l
-1846 3425 l
-1832 3439 l
-1818 3452 l
-1805 3466 l
-1792 3481 l
-1779 3496 l
-1766 3511 l
-1753 3527 l
-1741 3543 l
-1729 3559 l
-1718 3576 l
-1707 3593 l
-1696 3611 l
-1685 3629 l
-1675 3647 l
-1665 3666 l
-1655 3685 l
-1646 3704 l
-1638 3724 l
-1629 3744 l
-1621 3765 l
-1614 3786 l
-1607 3807 l
-1600 3828 l
-1594 3850 l
-1589 3873 l
-1584 3895 l
-1579 3918 l
-1576 3941 l
-1572 3965 l
-1569 3989 l
-1567 4013 l
-1566 4037 l
-1565 4061 l
-1564 4086 l
-1564 4111 l
-1565 4136 l
-1567 4162 l
-1569 4187 l
-1572 4213 l
-1576 4239 l
-1580 4265 l
-1585 4291 l
-1591 4317 l
-1598 4343 l
-1605 4369 l
-1613 4395 l
-1622 4421 l
-1632 4447 l
-1642 4473 l
-1653 4499 l
-1665 4524 l
-1678 4550 l
-1691 4575 l
-1705 4600 l
-1720 4625 l
-1736 4649 l
-1753 4673 l
-1770 4697 l
-1788 4720 l
-1806 4743 l
-1826 4765 l
-1846 4787 l
-1866 4808 l
-1888 4829 l
-1909 4849 l
-1932 4869 l
-1955 4888 l
-1978 4907 l
-2002 4924 l
-2027 4941 l
-2052 4958 l
-2077 4973 l
-2103 4988 l
-2129 5002 l
-2156 5016 l
-2182 5028 l
-2209 5040 l
-2211 5041 l
-2213 5042 l
-2215 5043 l
-2217 5043 l
-2219 5044 l
-2221 5045 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2983 3316 l
-2983 3315 l
-2983 3314 l
-2983 3313 l
-2983 3312 l
-2983 3311 l
-2982 3310 l
-2981 3297 l
-2979 3283 l
-2977 3270 l
-2976 3257 l
-2974 3244 l
-2971 3231 l
-2969 3218 l
-2967 3205 l
-2964 3192 l
-2962 3179 l
-2959 3167 l
-2956 3154 l
-2953 3142 l
-2950 3130 l
-2947 3117 l
-2943 3105 l
-2940 3093 l
-2936 3081 l
-2932 3069 l
-2928 3057 l
-2924 3046 l
-2920 3034 l
-2915 3023 l
-2911 3012 l
-2906 3000 l
-2901 2989 l
-2896 2978 l
-2890 2967 l
-2885 2957 l
-2879 2946 l
-2873 2936 l
-2867 2925 l
-2861 2915 l
-2855 2905 l
-2848 2895 l
-2841 2885 l
-2834 2876 l
-2827 2866 l
-2819 2857 l
-2811 2848 l
-2803 2839 l
-2795 2830 l
-2786 2821 l
-2778 2813 l
-2768 2804 l
-2759 2796 l
-2749 2788 l
-2739 2781 l
-2729 2773 l
-2718 2766 l
-2707 2759 l
-2695 2752 l
-2684 2745 l
-2671 2739 l
-2659 2733 l
-2645 2727 l
-2632 2722 l
-2618 2717 l
-2603 2712 l
-2588 2707 l
-2572 2703 l
-2556 2700 l
-2539 2696 l
-2521 2694 l
-2503 2691 l
-2483 2689 l
-2464 2688 l
-2443 2687 l
-2421 2687 l
-2399 2688 l
-2375 2690 l
-2351 2692 l
-2326 2695 l
-2299 2700 l
-2271 2705 l
-2242 2712 l
-2212 2720 l
-2180 2729 l
-2148 2741 l
-2113 2754 l
-2077 2769 l
-2040 2787 l
-2002 2807 l
-1962 2829 l
-1920 2855 l
-1878 2884 l
-1834 2917 l
-1831 2919 l
-1828 2922 l
-1825 2924 l
-1822 2927 l
-1819 2930 l
-1816 2932 l
-1812 2935 l
-1809 2937 l
-1806 2940 l
-1803 2943 l
-1800 2945 l
-1797 2948 l
-1793 2951 l
-1790 2954 l
-1787 2956 l
-1784 2959 l
-1781 2962 l
-1777 2965 l
-1774 2968 l
-1771 2971 l
-1768 2974 l
-1765 2976 l
-1761 2979 l
-1758 2982 l
-1755 2985 l
-1752 2988 l
-1749 2991 l
-1745 2994 l
-1742 2998 l
-1739 3001 l
-1736 3004 l
-1732 3007 l
-1729 3010 l
-1726 3013 l
-1723 3017 l
-1720 3020 l
-1716 3023 l
-1713 3026 l
-1710 3030 l
-1707 3033 l
-1703 3036 l
-1700 3040 l
-1697 3043 l
-1694 3047 l
-1691 3050 l
-1687 3054 l
-1684 3057 l
-1681 3061 l
-1678 3064 l
-1675 3068 l
-1671 3071 l
-1668 3075 l
-1665 3079 l
-1662 3082 l
-1659 3086 l
-1655 3090 l
-1652 3094 l
-1649 3097 l
-1646 3101 l
-1643 3105 l
-1640 3109 l
-1636 3113 l
-1633 3117 l
-1630 3121 l
-1627 3125 l
-1624 3129 l
-1621 3133 l
-1618 3137 l
-1614 3141 l
-1611 3145 l
-1608 3149 l
-1605 3153 l
-1602 3157 l
-1599 3161 l
-1596 3165 l
-1593 3170 l
-1590 3174 l
-1587 3178 l
-1584 3183 l
-1581 3187 l
-1578 3191 l
-1575 3196 l
-1572 3200 l
-1569 3204 l
-1566 3209 l
-1563 3213 l
-1560 3218 l
-1557 3222 l
-1554 3227 l
-1551 3231 l
-1548 3236 l
-1545 3241 l
-1542 3245 l
-1539 3250 l
-1536 3255 l
-1534 3259 l
-1531 3264 l
-1528 3269 l
-1525 3274 l
-1522 3279 l
-1519 3283 l
-1517 3288 l
-1514 3293 l
-S
-1514 3293 m
-1511 3298 l
-1508 3303 l
-1506 3308 l
-1503 3313 l
-1500 3318 l
-1498 3323 l
-1495 3328 l
-1492 3333 l
-1490 3338 l
-1487 3343 l
-1485 3348 l
-1482 3353 l
-1479 3359 l
-1477 3364 l
-1474 3369 l
-1472 3374 l
-1469 3379 l
-1467 3385 l
-1465 3390 l
-1462 3395 l
-1460 3401 l
-1457 3406 l
-1455 3411 l
-1453 3417 l
-1450 3422 l
-1448 3428 l
-1446 3433 l
-1443 3438 l
-1441 3444 l
-1439 3449 l
-1437 3455 l
-1435 3461 l
-1432 3466 l
-1430 3472 l
-1428 3477 l
-1426 3483 l
-1424 3488 l
-1422 3494 l
-1420 3500 l
-1418 3505 l
-1416 3511 l
-1414 3517 l
-1412 3522 l
-1410 3528 l
-1408 3534 l
-1407 3540 l
-1405 3545 l
-1403 3551 l
-1401 3557 l
-1399 3563 l
-1398 3569 l
-1396 3574 l
-1394 3580 l
-1393 3586 l
-1391 3592 l
-1390 3598 l
-1388 3604 l
-1386 3609 l
-1385 3615 l
-1383 3621 l
-1382 3627 l
-1381 3633 l
-1379 3639 l
-1378 3645 l
-1376 3651 l
-1375 3657 l
-1374 3663 l
-1373 3669 l
-1371 3675 l
-1370 3681 l
-1369 3687 l
-1368 3693 l
-1367 3699 l
-1365 3705 l
-1364 3711 l
-1363 3717 l
-1362 3723 l
-1361 3729 l
-1360 3735 l
-1359 3741 l
-1359 3747 l
-1358 3753 l
-1357 3759 l
-1356 3765 l
-1355 3771 l
-1354 3777 l
-1354 3783 l
-1353 3789 l
-1352 3795 l
-1352 3801 l
-1351 3807 l
-1350 3813 l
-1350 3819 l
-1349 3825 l
-1349 3831 l
-1348 3837 l
-1348 3843 l
-1347 3849 l
-1347 3855 l
-1347 3861 l
-1346 3867 l
-1346 3873 l
-1346 3879 l
-1345 3885 l
-1345 3891 l
-1345 3897 l
-1345 3902 l
-1345 3908 l
-1344 3914 l
-1344 3920 l
-1344 3926 l
-1344 3932 l
-1344 3938 l
-1344 3944 l
-1344 3950 l
-1344 3956 l
-1344 3961 l
-1344 3967 l
-1345 3973 l
-1345 3979 l
-1345 3985 l
-1345 3991 l
-1345 3996 l
-1346 4002 l
-1346 4008 l
-1346 4014 l
-1346 4019 l
-1347 4025 l
-1347 4031 l
-1348 4037 l
-1348 4042 l
-1348 4048 l
-1349 4054 l
-1349 4059 l
-1350 4065 l
-1350 4071 l
-1351 4076 l
-1352 4082 l
-1352 4087 l
-1353 4093 l
-1354 4098 l
-1354 4104 l
-1355 4109 l
-1356 4115 l
-1356 4120 l
-1357 4126 l
-1358 4131 l
-1359 4137 l
-1360 4142 l
-1360 4148 l
-1361 4153 l
-1362 4158 l
-1363 4164 l
-1364 4169 l
-1365 4174 l
-1366 4180 l
-1367 4185 l
-1368 4190 l
-1369 4195 l
-1370 4201 l
-1371 4206 l
-1372 4211 l
-1373 4216 l
-1374 4221 l
-1375 4226 l
-1377 4231 l
-1378 4236 l
-1379 4242 l
-1380 4247 l
-1381 4252 l
-1383 4257 l
-1384 4262 l
-1385 4267 l
-1386 4271 l
-1388 4276 l
-1389 4281 l
-1390 4286 l
-1392 4291 l
-1393 4296 l
-1394 4301 l
-1396 4305 l
-1397 4310 l
-1399 4315 l
-1400 4320 l
-1401 4324 l
-1403 4329 l
-1404 4334 l
-1406 4338 l
-1407 4343 l
-1409 4348 l
-1410 4352 l
-1412 4357 l
-1413 4361 l
-1415 4366 l
-1416 4370 l
-1418 4375 l
-1420 4379 l
-1421 4384 l
-1423 4388 l
-S
-1423 4388 m
-1424 4392 l
-1426 4397 l
-1428 4401 l
-1429 4406 l
-1431 4410 l
-1433 4414 l
-1434 4418 l
-1436 4423 l
-1438 4427 l
-1439 4431 l
-1441 4435 l
-1443 4439 l
-1445 4443 l
-1446 4448 l
-1448 4452 l
-1450 4456 l
-1452 4460 l
-1453 4464 l
-1455 4468 l
-1457 4472 l
-1483 4525 l
-1509 4575 l
-1537 4620 l
-1564 4662 l
-1592 4701 l
-1620 4736 l
-1647 4769 l
-1674 4798 l
-1701 4825 l
-1727 4850 l
-1753 4872 l
-1778 4893 l
-1802 4911 l
-1826 4928 l
-1849 4944 l
-1871 4958 l
-1893 4970 l
-1914 4981 l
-1935 4991 l
-1955 5001 l
-1975 5009 l
-1994 5016 l
-2012 5022 l
-2030 5028 l
-2048 5032 l
-2065 5037 l
-2082 5040 l
-2098 5043 l
-2114 5045 l
-2130 5047 l
-2145 5048 l
-2160 5048 l
-2174 5049 l
-2189 5048 l
-2203 5048 l
-2216 5046 l
-2217 5046 l
-2218 5046 l
-2219 5046 l
-2220 5046 l
-2221 5046 l
-2222 5046 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-2983 3317 m
-2983 3317 l
-2983 3317 l
-2984 3316 l
-2985 3316 l
-2986 3316 l
-2987 3315 l
-2988 3315 l
-2989 3315 l
-2990 3314 l
-3003 3309 l
-3017 3304 l
-3030 3299 l
-3044 3295 l
-3058 3291 l
-3071 3286 l
-3085 3282 l
-3099 3279 l
-3113 3275 l
-3126 3272 l
-3140 3268 l
-3154 3265 l
-3168 3263 l
-3182 3260 l
-3195 3258 l
-3209 3255 l
-3223 3254 l
-3237 3252 l
-3251 3250 l
-3265 3249 l
-3279 3248 l
-3293 3247 l
-3307 3247 l
-3321 3247 l
-3335 3247 l
-3349 3247 l
-3363 3247 l
-3377 3248 l
-3391 3249 l
-3405 3251 l
-3419 3252 l
-3433 3254 l
-3447 3257 l
-3461 3259 l
-3475 3262 l
-3489 3265 l
-3502 3269 l
-3516 3273 l
-3530 3277 l
-3544 3281 l
-3558 3286 l
-3572 3292 l
-3586 3297 l
-3600 3304 l
-3614 3310 l
-3627 3317 l
-3641 3324 l
-3655 3332 l
-3668 3341 l
-3682 3349 l
-3695 3359 l
-3709 3368 l
-3722 3379 l
-3736 3389 l
-3749 3401 l
-3762 3413 l
-3775 3425 l
-3788 3438 l
-3801 3452 l
-3814 3467 l
-3826 3482 l
-3839 3498 l
-3851 3514 l
-3863 3532 l
-3875 3550 l
-3886 3569 l
-3897 3588 l
-3908 3609 l
-3919 3631 l
-3929 3653 l
-3939 3677 l
-3949 3701 l
-3958 3727 l
-3966 3753 l
-3974 3781 l
-3981 3809 l
-3988 3839 l
-3993 3870 l
-3998 3903 l
-4002 3936 l
-4005 3971 l
-4007 4006 l
-4007 4043 l
-4007 4082 l
-4005 4121 l
-4001 4161 l
-3996 4203 l
-3989 4245 l
-3980 4289 l
-3969 4333 l
-3957 4378 l
-3942 4423 l
-3925 4469 l
-3905 4515 l
-3884 4561 l
-3860 4607 l
-3834 4653 l
-3805 4698 l
-3774 4742 l
-3741 4785 l
-3706 4827 l
-3669 4868 l
-3631 4907 l
-3590 4944 l
-3549 4979 l
-3506 5012 l
-3462 5043 l
-3417 5072 l
-3372 5098 l
-3327 5122 l
-3281 5144 l
-3236 5163 l
-3190 5181 l
-3146 5196 l
-3101 5209 l
-3058 5220 l
-3015 5229 l
-2973 5236 l
-2932 5242 l
-2892 5246 l
-2854 5248 l
-2816 5249 l
-2779 5249 l
-2744 5247 l
-2710 5245 l
-2677 5241 l
-2645 5237 l
-2615 5232 l
-2585 5226 l
-2557 5219 l
-2529 5211 l
-2503 5203 l
-2478 5195 l
-2454 5186 l
-2430 5176 l
-2408 5167 l
-2387 5156 l
-2366 5146 l
-2346 5135 l
-2327 5124 l
-2309 5112 l
-2292 5101 l
-2276 5089 l
-2260 5077 l
-2245 5064 l
-2230 5052 l
-2229 5051 l
-2228 5050 l
-2227 5049 l
-2226 5048 l
-2225 5047 l
-2224 5047 l
-2223 5046 l
-2223 5046 l
-2223 5046 l
-S
-3302 3581 m
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3302 3581 l
-3301 3582 l
-3301 3582 l
-3300 3583 l
-3299 3584 l
-3299 3584 l
-3298 3585 l
-3298 3585 l
-3297 3586 l
-3297 3586 l
-3296 3587 l
-3295 3588 l
-3295 3588 l
-3294 3589 l
-3286 3596 l
-3277 3603 l
-3268 3610 l
-3259 3617 l
-3249 3623 l
-3239 3628 l
-3229 3634 l
-3218 3639 l
-3207 3643 l
-3196 3648 l
-3185 3651 l
-3174 3655 l
-3162 3658 l
-3150 3661 l
-3138 3663 l
-3126 3665 l
-3114 3666 l
-3101 3668 l
-3089 3669 l
-3076 3669 l
-3064 3669 l
-3051 3669 l
-3038 3669 l
-3025 3668 l
-3012 3666 l
-2999 3665 l
-2986 3663 l
-2974 3661 l
-2961 3658 l
-2948 3655 l
-2935 3652 l
-2922 3649 l
-2909 3645 l
-2897 3641 l
-2884 3636 l
-2872 3632 l
-2859 3627 l
-2847 3621 l
-2835 3616 l
-2823 3610 l
-2811 3604 l
-2799 3597 l
-2787 3591 l
-2776 3584 l
-2765 3577 l
-2754 3569 l
-2743 3562 l
-2733 3554 l
-2722 3546 l
-2712 3537 l
-2703 3529 l
-2693 3520 l
-2684 3511 l
-2675 3502 l
-2666 3493 l
-2658 3483 l
-2650 3473 l
-2642 3464 l
-2635 3454 l
-2628 3443 l
-2621 3433 l
-2615 3423 l
-2609 3412 l
-2604 3401 l
-2599 3391 l
-2594 3380 l
-2590 3369 l
-2586 3358 l
-2583 3347 l
-2580 3335 l
-2577 3324 l
-2575 3313 l
-2574 3302 l
-2573 3290 l
-2573 3279 l
-2573 3268 l
-2573 3256 l
-2574 3245 l
-2576 3234 l
-2578 3223 l
-2581 3212 l
-2584 3201 l
-2588 3190 l
-2592 3179 l
-2597 3169 l
-2603 3158 l
-2609 3148 l
-2616 3138 l
-2623 3128 l
-2631 3119 l
-2639 3110 l
-2648 3101 l
-2658 3092 l
-2668 3084 l
-2678 3076 l
-2689 3068 l
-2701 3061 l
-2713 3054 l
-2726 3048 l
-2739 3042 l
-2753 3036 l
-2767 3031 l
-2782 3027 l
-2796 3023 l
-2812 3020 l
-2828 3017 l
-2844 3014 l
-2860 3013 l
-2877 3012 l
-2894 3011 l
-2911 3012 l
-2928 3012 l
-2945 3014 l
-2963 3016 l
-2980 3019 l
-2998 3022 l
-3015 3026 l
-3033 3031 l
-3050 3036 l
-3067 3042 l
-3084 3049 l
-3101 3056 l
-3118 3064 l
-3134 3072 l
-3150 3081 l
-3165 3090 l
-3181 3100 l
-3195 3110 l
-3210 3121 l
-3223 3132 l
-3236 3144 l
-3249 3156 l
-3261 3168 l
-3273 3181 l
-3284 3193 l
-3294 3206 l
-3303 3220 l
-3312 3233 l
-3321 3247 l
-3328 3260 l
-3335 3274 l
-3342 3288 l
-3347 3302 l
-3352 3315 l
-3357 3329 l
-3360 3343 l
-3363 3356 l
-3366 3370 l
-3367 3383 l
-3369 3396 l
-3369 3409 l
-3369 3422 l
-3368 3435 l
-3367 3447 l
-3365 3459 l
-3362 3471 l
-3359 3482 l
-3356 3494 l
-3352 3505 l
-3347 3515 l
-3342 3526 l
-3337 3536 l
-3331 3545 l
-3324 3555 l
-3317 3564 l
-3310 3572 l
-3302 3581 l
-S
-3500 3947 m
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3500 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3499 3947 l
-3498 3948 l
-3496 3949 l
-3495 3950 l
-3494 3951 l
-3493 3951 l
-3492 3952 l
-3490 3953 l
-3489 3954 l
-3488 3954 l
-3487 3955 l
-3486 3956 l
-3484 3957 l
-3483 3957 l
-3466 3968 l
-3448 3977 l
-3430 3986 l
-3412 3994 l
-3393 4002 l
-3374 4008 l
-3354 4015 l
-3335 4020 l
-3315 4025 l
-3295 4030 l
-3275 4034 l
-3254 4037 l
-3234 4040 l
-3213 4042 l
-3192 4044 l
-3171 4045 l
-3149 4045 l
-3128 4045 l
-3107 4045 l
-3085 4044 l
-3064 4042 l
-3042 4041 l
-3021 4038 l
-2999 4035 l
-2977 4032 l
-2956 4028 l
-2934 4024 l
-2913 4019 l
-2891 4014 l
-2870 4008 l
-2848 4002 l
-2827 3996 l
-2806 3989 l
-2785 3981 l
-2764 3974 l
-2743 3966 l
-2722 3957 l
-2701 3948 l
-2681 3939 l
-2661 3929 l
-2641 3919 l
-2621 3909 l
-2601 3898 l
-2582 3887 l
-2563 3876 l
-2544 3864 l
-2526 3852 l
-2507 3839 l
-2489 3826 l
-2472 3813 l
-2454 3800 l
-2437 3786 l
-2421 3772 l
-2405 3758 l
-2389 3743 l
-2373 3728 l
-2358 3713 l
-2343 3697 l
-2329 3681 l
-2315 3665 l
-2302 3649 l
-2289 3632 l
-2277 3615 l
-2265 3598 l
-2254 3581 l
-2243 3563 l
-2233 3545 l
-2224 3527 l
-2215 3509 l
-2207 3490 l
-2199 3472 l
-2192 3453 l
-2186 3433 l
-2181 3414 l
-2176 3395 l
-2172 3375 l
-2169 3355 l
-2166 3335 l
-2165 3315 l
-2164 3295 l
-2164 3274 l
-2166 3254 l
-2168 3233 l
-2171 3213 l
-2175 3192 l
-2180 3172 l
-2186 3151 l
-2194 3130 l
-2202 3110 l
-2212 3089 l
-2223 3069 l
-2235 3049 l
-2249 3029 l
-2264 3009 l
-2280 2990 l
-2297 2971 l
-2316 2952 l
-2336 2934 l
-2358 2916 l
-2382 2899 l
-2406 2883 l
-2433 2867 l
-2461 2853 l
-2490 2839 l
-2521 2826 l
-2553 2814 l
-2586 2804 l
-2622 2795 l
-2658 2787 l
-2695 2781 l
-2734 2777 l
-2774 2774 l
-2814 2773 l
-2856 2775 l
-2898 2778 l
-2940 2783 l
-2983 2790 l
-3026 2799 l
-3068 2810 l
-3111 2824 l
-3153 2839 l
-3194 2856 l
-3234 2876 l
-3273 2897 l
-3312 2920 l
-3348 2944 l
-3383 2970 l
-3417 2997 l
-3449 3025 l
-3479 3054 l
-3507 3084 l
-3533 3115 l
-3557 3146 l
-3580 3178 l
-3600 3209 l
-3618 3241 l
-3634 3273 l
-3649 3305 l
-3662 3336 l
-3672 3368 l
-3681 3398 l
-3689 3429 l
-3695 3458 l
-3699 3487 l
-3701 3516 l
-3703 3544 l
-3703 3571 l
-3701 3597 l
-3699 3623 l
-3695 3647 l
-3690 3671 l
-3684 3694 l
-3677 3717 l
-3669 3738 l
-3661 3759 l
-3651 3779 l
-3640 3798 l
-3629 3816 l
-3617 3834 l
-3605 3851 l
-3591 3867 l
-3577 3882 l
-3563 3896 l
-3548 3910 l
-3532 3923 l
-3516 3935 l
-3500 3947 l
-S
-3529 4372 m
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3529 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3528 4372 l
-3526 4373 l
-3525 4374 l
-3523 4374 l
-3521 4375 l
-3520 4375 l
-3518 4376 l
-3516 4376 l
-3515 4377 l
-3513 4377 l
-3511 4378 l
-3510 4378 l
-3508 4379 l
-3507 4380 l
-3483 4387 l
-3460 4393 l
-3436 4399 l
-3413 4404 l
-3389 4408 l
-3364 4412 l
-3340 4415 l
-3316 4418 l
-3291 4420 l
-3266 4421 l
-3241 4422 l
-3216 4423 l
-3191 4423 l
-3166 4422 l
-3140 4421 l
-3115 4420 l
-3090 4418 l
-3064 4415 l
-3038 4412 l
-3013 4409 l
-2987 4405 l
-2961 4401 l
-2936 4396 l
-2910 4391 l
-2884 4385 l
-2859 4379 l
-2833 4372 l
-2808 4366 l
-2782 4358 l
-2757 4351 l
-2731 4343 l
-2706 4334 l
-2681 4325 l
-2656 4316 l
-2631 4306 l
-2606 4297 l
-2581 4286 l
-2557 4276 l
-2532 4265 l
-2508 4253 l
-2484 4242 l
-2460 4229 l
-2436 4217 l
-2413 4204 l
-2390 4191 l
-2367 4178 l
-2344 4164 l
-2322 4150 l
-2299 4136 l
-2277 4121 l
-2256 4107 l
-2234 4091 l
-2213 4076 l
-2192 4060 l
-2172 4044 l
-2152 4028 l
-2132 4011 l
-2113 3994 l
-2094 3977 l
-2075 3959 l
-2057 3942 l
-2039 3923 l
-2022 3905 l
-2005 3887 l
-1989 3868 l
-1973 3849 l
-1957 3829 l
-1942 3809 l
-1928 3790 l
-1914 3769 l
-1901 3749 l
-1888 3728 l
-1876 3707 l
-1864 3686 l
-1853 3664 l
-1843 3642 l
-1833 3620 l
-1824 3598 l
-1816 3575 l
-1809 3552 l
-1802 3529 l
-1797 3505 l
-1792 3481 l
-1788 3457 l
-1785 3432 l
-1783 3407 l
-1782 3382 l
-1782 3356 l
-1783 3330 l
-1785 3304 l
-1789 3277 l
-1794 3250 l
-1800 3222 l
-1808 3194 l
-1818 3166 l
-1829 3137 l
-1842 3108 l
-1858 3079 l
-1875 3049 l
-1895 3019 l
-1917 2989 l
-1941 2958 l
-1969 2927 l
-2000 2896 l
-2034 2865 l
-2072 2835 l
-2114 2805 l
-2117 2803 l
-2120 2801 l
-2123 2798 l
-2127 2796 l
-2130 2794 l
-2133 2792 l
-2136 2790 l
-2140 2788 l
-2143 2786 l
-2146 2784 l
-2150 2782 l
-2153 2780 l
-2156 2778 l
-2160 2775 l
-2163 2773 l
-2167 2771 l
-2170 2769 l
-2174 2767 l
-2177 2765 l
-2181 2763 l
-2185 2761 l
-2188 2759 l
-2192 2757 l
-2195 2755 l
-2199 2753 l
-2203 2751 l
-2207 2749 l
-2210 2747 l
-2214 2745 l
-2218 2743 l
-2222 2741 l
-2226 2739 l
-2229 2737 l
-2233 2735 l
-2237 2734 l
-2241 2732 l
-2245 2730 l
-2249 2728 l
-2253 2726 l
-2257 2724 l
-2261 2722 l
-2265 2720 l
-2270 2718 l
-2274 2717 l
-2278 2715 l
-2282 2713 l
-2286 2711 l
-2291 2709 l
-2295 2708 l
-2299 2706 l
-2304 2704 l
-2308 2702 l
-2312 2700 l
-2317 2699 l
-2321 2697 l
-2326 2695 l
-2330 2694 l
-2335 2692 l
-2339 2690 l
-2344 2689 l
-2348 2687 l
-2353 2685 l
-2358 2684 l
-2362 2682 l
-2367 2681 l
-2372 2679 l
-S
-2372 2679 m
-2376 2677 l
-2381 2676 l
-2386 2674 l
-2391 2673 l
-2396 2671 l
-2400 2670 l
-2405 2668 l
-2410 2667 l
-2415 2666 l
-2420 2664 l
-2425 2663 l
-2430 2661 l
-2435 2660 l
-2440 2659 l
-2446 2657 l
-2451 2656 l
-2456 2655 l
-2461 2653 l
-2466 2652 l
-2472 2651 l
-2477 2650 l
-2482 2649 l
-2487 2647 l
-2493 2646 l
-2498 2645 l
-2504 2644 l
-2509 2643 l
-2514 2642 l
-2520 2641 l
-2525 2640 l
-2531 2639 l
-2537 2638 l
-2542 2637 l
-2548 2636 l
-2553 2635 l
-2559 2634 l
-2565 2633 l
-2570 2633 l
-2576 2632 l
-2582 2631 l
-2588 2630 l
-2593 2630 l
-2599 2629 l
-2605 2628 l
-2611 2627 l
-2617 2627 l
-2623 2626 l
-2629 2626 l
-2635 2625 l
-2641 2625 l
-2647 2624 l
-2653 2624 l
-2659 2623 l
-2665 2623 l
-2671 2623 l
-2677 2622 l
-2683 2622 l
-2689 2622 l
-2696 2621 l
-2702 2621 l
-2708 2621 l
-2714 2621 l
-2721 2621 l
-2727 2621 l
-2733 2621 l
-2739 2621 l
-2746 2621 l
-2752 2621 l
-2759 2621 l
-2765 2621 l
-2771 2621 l
-2778 2621 l
-2784 2621 l
-2791 2622 l
-2797 2622 l
-2804 2622 l
-2810 2623 l
-2817 2623 l
-2823 2623 l
-2830 2624 l
-2836 2624 l
-2843 2625 l
-2850 2625 l
-2856 2626 l
-2863 2627 l
-2869 2627 l
-2876 2628 l
-2883 2629 l
-2889 2630 l
-2896 2631 l
-2903 2631 l
-2909 2632 l
-2916 2633 l
-2923 2634 l
-2929 2635 l
-2936 2636 l
-2943 2637 l
-2950 2639 l
-2956 2640 l
-2963 2641 l
-2970 2642 l
-2977 2644 l
-2983 2645 l
-2990 2646 l
-2997 2648 l
-3004 2649 l
-3010 2651 l
-3017 2652 l
-3024 2654 l
-3031 2655 l
-3038 2657 l
-3044 2659 l
-3051 2660 l
-3058 2662 l
-3065 2664 l
-3071 2666 l
-3078 2668 l
-3085 2670 l
-3092 2672 l
-3098 2674 l
-3105 2676 l
-3112 2678 l
-3119 2680 l
-3125 2682 l
-3132 2684 l
-3139 2687 l
-3146 2689 l
-3152 2691 l
-3159 2694 l
-3166 2696 l
-3172 2698 l
-3179 2701 l
-3186 2703 l
-3192 2706 l
-3199 2709 l
-3205 2711 l
-3212 2714 l
-3219 2717 l
-3225 2719 l
-3232 2722 l
-3238 2725 l
-3245 2728 l
-3251 2731 l
-3258 2734 l
-3264 2737 l
-3271 2740 l
-3277 2743 l
-3284 2746 l
-3290 2749 l
-3296 2752 l
-3303 2755 l
-3309 2758 l
-3315 2762 l
-3322 2765 l
-3328 2768 l
-3334 2772 l
-3340 2775 l
-3347 2778 l
-3353 2782 l
-3359 2785 l
-3365 2789 l
-3371 2792 l
-3377 2796 l
-3383 2800 l
-3389 2803 l
-3395 2807 l
-3401 2811 l
-3407 2814 l
-3413 2818 l
-3419 2822 l
-3425 2826 l
-3431 2829 l
-3437 2833 l
-3442 2837 l
-3448 2841 l
-3454 2845 l
-3460 2849 l
-3465 2853 l
-3471 2857 l
-3476 2861 l
-3482 2865 l
-3488 2869 l
-3493 2873 l
-3499 2878 l
-3504 2882 l
-3509 2886 l
-3515 2890 l
-3520 2894 l
-3525 2899 l
-3531 2903 l
-3536 2907 l
-3541 2911 l
-3546 2916 l
-3551 2920 l
-3556 2925 l
-3562 2929 l
-3567 2933 l
-3572 2938 l
-3577 2942 l
-S
-3577 2942 m
-3581 2947 l
-3586 2951 l
-3591 2956 l
-3596 2960 l
-3601 2965 l
-3606 2969 l
-3610 2974 l
-3615 2978 l
-3620 2983 l
-3624 2987 l
-3629 2992 l
-3633 2996 l
-3638 3001 l
-3642 3006 l
-3647 3010 l
-3651 3015 l
-3655 3020 l
-3660 3024 l
-3664 3029 l
-3668 3034 l
-3672 3038 l
-3676 3043 l
-3681 3048 l
-3685 3052 l
-3689 3057 l
-3693 3062 l
-3697 3067 l
-3701 3071 l
-3705 3076 l
-3708 3081 l
-3712 3086 l
-3716 3090 l
-3720 3095 l
-3724 3100 l
-3727 3105 l
-3731 3109 l
-3734 3114 l
-3738 3119 l
-3742 3124 l
-3745 3128 l
-3749 3133 l
-3752 3138 l
-3755 3143 l
-3759 3147 l
-3762 3152 l
-3765 3157 l
-3769 3162 l
-3772 3166 l
-3775 3171 l
-3778 3176 l
-3781 3181 l
-3784 3185 l
-3787 3190 l
-3791 3195 l
-3793 3200 l
-3796 3204 l
-3799 3209 l
-3802 3214 l
-3805 3219 l
-3808 3223 l
-3811 3228 l
-3813 3233 l
-3816 3238 l
-3819 3242 l
-3821 3247 l
-3824 3252 l
-3827 3256 l
-3829 3261 l
-3832 3266 l
-3834 3270 l
-3837 3275 l
-3839 3280 l
-3842 3284 l
-3844 3289 l
-3846 3294 l
-3849 3298 l
-3851 3303 l
-3853 3307 l
-3855 3312 l
-3858 3317 l
-3860 3321 l
-3862 3326 l
-3864 3330 l
-3866 3335 l
-3868 3339 l
-3870 3344 l
-3872 3348 l
-3874 3353 l
-3876 3358 l
-3878 3362 l
-3880 3366 l
-3882 3371 l
-3883 3375 l
-3885 3380 l
-3887 3384 l
-3889 3389 l
-3890 3393 l
-3892 3398 l
-3894 3402 l
-3895 3406 l
-3897 3411 l
-3899 3415 l
-3900 3419 l
-3902 3424 l
-3903 3428 l
-3905 3432 l
-3906 3437 l
-3907 3441 l
-3909 3445 l
-3910 3450 l
-3912 3454 l
-3913 3458 l
-3914 3462 l
-3916 3467 l
-3917 3471 l
-3918 3475 l
-3919 3479 l
-3920 3483 l
-3922 3488 l
-3923 3492 l
-3924 3496 l
-3925 3500 l
-3926 3504 l
-3927 3508 l
-3928 3512 l
-3929 3516 l
-3930 3520 l
-3931 3524 l
-3932 3528 l
-3933 3532 l
-3934 3536 l
-3935 3540 l
-3936 3544 l
-3937 3548 l
-3938 3552 l
-3938 3556 l
-3939 3560 l
-3940 3564 l
-3941 3568 l
-3941 3572 l
-3942 3576 l
-3950 3629 l
-3956 3679 l
-3958 3727 l
-3957 3772 l
-3955 3815 l
-3950 3855 l
-3944 3893 l
-3936 3930 l
-3926 3964 l
-3916 3996 l
-3904 4027 l
-3891 4055 l
-3877 4083 l
-3863 4108 l
-3847 4133 l
-3831 4156 l
-3814 4177 l
-3797 4197 l
-3779 4217 l
-3760 4235 l
-3741 4252 l
-3722 4268 l
-3702 4283 l
-3681 4297 l
-3661 4310 l
-3640 4322 l
-3618 4334 l
-3596 4344 l
-3574 4354 l
-3552 4363 l
-3529 4372 l
-S
-3338 4792 m
-3338 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3337 4792 l
-3336 4792 l
-3336 4792 l
-3336 4792 l
-3335 4792 l
-3333 4792 l
-3332 4792 l
-3330 4792 l
-3329 4792 l
-3327 4792 l
-3326 4792 l
-3324 4792 l
-3323 4792 l
-3321 4792 l
-3320 4792 l
-3318 4792 l
-3316 4792 l
-3295 4792 l
-3273 4791 l
-3251 4790 l
-3229 4789 l
-3207 4787 l
-3185 4786 l
-3162 4783 l
-3139 4781 l
-3116 4778 l
-3093 4775 l
-3070 4772 l
-3047 4769 l
-3023 4765 l
-3000 4761 l
-2976 4756 l
-2952 4751 l
-2928 4746 l
-2904 4741 l
-2880 4736 l
-2856 4730 l
-2832 4724 l
-2808 4717 l
-2784 4711 l
-2760 4704 l
-2736 4697 l
-2711 4689 l
-2687 4682 l
-2663 4674 l
-2639 4665 l
-2614 4657 l
-2590 4648 l
-2566 4639 l
-2542 4630 l
-2518 4621 l
-2494 4611 l
-2470 4601 l
-2446 4591 l
-2423 4581 l
-2399 4570 l
-2376 4560 l
-2352 4549 l
-2329 4537 l
-2306 4526 l
-2283 4514 l
-2260 4503 l
-2237 4491 l
-2215 4478 l
-2192 4466 l
-2170 4453 l
-2148 4441 l
-2126 4428 l
-2105 4415 l
-2083 4401 l
-2062 4388 l
-2041 4375 l
-2021 4361 l
-2000 4347 l
-1980 4333 l
-1960 4319 l
-1940 4305 l
-1921 4290 l
-1902 4276 l
-1883 4261 l
-1864 4246 l
-1846 4232 l
-1828 4217 l
-1810 4202 l
-1793 4187 l
-1776 4171 l
-1759 4156 l
-1743 4141 l
-1727 4125 l
-1711 4110 l
-1696 4094 l
-1681 4079 l
-1666 4063 l
-1652 4048 l
-1638 4032 l
-1624 4016 l
-1611 4000 l
-1598 3985 l
-1586 3969 l
-1574 3953 l
-1562 3937 l
-1551 3921 l
-1540 3906 l
-1530 3890 l
-1520 3874 l
-1510 3858 l
-1501 3843 l
-1492 3827 l
-1484 3811 l
-1476 3796 l
-1469 3780 l
-1462 3765 l
-1455 3749 l
-1449 3734 l
-1443 3719 l
-1438 3703 l
-1433 3688 l
-1429 3673 l
-1425 3658 l
-1421 3643 l
-1418 3629 l
-1416 3614 l
-1414 3599 l
-1412 3585 l
-1411 3571 l
-1410 3556 l
-1410 3542 l
-1410 3528 l
-1411 3514 l
-1412 3500 l
-1414 3486 l
-1416 3473 l
-1419 3459 l
-1422 3444 l
-1427 3430 l
-1432 3414 l
-1439 3395 l
-1440 3393 l
-1441 3391 l
-1441 3389 l
-1442 3388 l
-1443 3386 l
-1444 3383 l
-1445 3381 l
-1446 3379 l
-1447 3376 l
-1448 3373 l
-1450 3370 l
-1451 3367 l
-1453 3363 l
-1455 3359 l
-1457 3354 l
-1460 3348 l
-1463 3341 l
-1468 3333 l
-1473 3322 l
-1480 3308 l
-1491 3289 l
-1507 3259 l
-1509 3256 l
-1510 3254 l
-1512 3251 l
-1514 3248 l
-1515 3245 l
-1517 3241 l
-1519 3238 l
-1522 3234 l
-1524 3231 l
-1526 3227 l
-1529 3223 l
-1531 3219 l
-1534 3214 l
-1537 3210 l
-1540 3205 l
-1543 3200 l
-1547 3194 l
-1551 3188 l
-1555 3182 l
-1559 3176 l
-1564 3169 l
-1568 3162 l
-1574 3154 l
-1580 3146 l
-1586 3138 l
-1593 3128 l
-1600 3118 l
-1608 3108 l
-1617 3096 l
-1627 3084 l
-1638 3070 l
-S
-1638 3070 m
-1650 3056 l
-1664 3040 l
-1679 3023 l
-1696 3004 l
-1716 2983 l
-1739 2960 l
-1765 2935 l
-1796 2908 l
-1832 2877 l
-1875 2844 l
-1926 2807 l
-1930 2804 l
-1934 2801 l
-1939 2798 l
-1943 2796 l
-1947 2793 l
-1952 2790 l
-1956 2787 l
-1960 2784 l
-1965 2781 l
-1970 2778 l
-1974 2775 l
-1979 2773 l
-1984 2770 l
-1989 2767 l
-1994 2764 l
-1999 2761 l
-2004 2758 l
-2009 2755 l
-2014 2752 l
-2020 2748 l
-2025 2745 l
-2030 2742 l
-2036 2739 l
-2042 2736 l
-2047 2733 l
-2053 2730 l
-2059 2727 l
-2065 2724 l
-2071 2720 l
-2077 2717 l
-2084 2714 l
-2090 2711 l
-2096 2708 l
-2103 2705 l
-2110 2701 l
-2116 2698 l
-2123 2695 l
-2130 2692 l
-2137 2689 l
-2144 2685 l
-2152 2682 l
-2159 2679 l
-2166 2676 l
-2174 2673 l
-2182 2669 l
-2190 2666 l
-2198 2663 l
-2206 2660 l
-2214 2657 l
-2222 2654 l
-2231 2651 l
-2239 2647 l
-2248 2644 l
-2257 2641 l
-2266 2638 l
-2275 2635 l
-2284 2632 l
-2293 2629 l
-2303 2626 l
-2312 2623 l
-2322 2621 l
-2332 2618 l
-2342 2615 l
-2353 2612 l
-2363 2610 l
-2373 2607 l
-2384 2604 l
-2395 2602 l
-2406 2599 l
-2417 2597 l
-2428 2595 l
-2440 2592 l
-2451 2590 l
-2463 2588 l
-2475 2586 l
-2487 2584 l
-2499 2582 l
-2512 2580 l
-2524 2578 l
-2537 2577 l
-2550 2575 l
-2563 2574 l
-2576 2573 l
-2589 2571 l
-2602 2570 l
-2616 2569 l
-2630 2569 l
-2644 2568 l
-2658 2567 l
-2672 2567 l
-2686 2567 l
-2701 2567 l
-2715 2567 l
-2730 2567 l
-2745 2567 l
-2760 2568 l
-2775 2568 l
-2790 2569 l
-2806 2570 l
-2821 2571 l
-2837 2573 l
-2852 2574 l
-2868 2576 l
-2884 2578 l
-2900 2580 l
-2916 2583 l
-2932 2585 l
-2948 2588 l
-2964 2591 l
-2980 2594 l
-2997 2598 l
-3013 2601 l
-3029 2605 l
-3046 2609 l
-3062 2613 l
-3078 2618 l
-3095 2623 l
-3111 2628 l
-3128 2633 l
-3144 2638 l
-3160 2644 l
-3177 2649 l
-3193 2655 l
-3209 2662 l
-3225 2668 l
-3241 2675 l
-3257 2682 l
-3273 2689 l
-3289 2696 l
-3305 2703 l
-3320 2711 l
-3336 2719 l
-3351 2727 l
-3366 2735 l
-3381 2743 l
-3396 2752 l
-3411 2760 l
-3426 2769 l
-3440 2778 l
-3455 2787 l
-3469 2797 l
-3483 2806 l
-3497 2815 l
-3510 2825 l
-3524 2835 l
-3537 2845 l
-3550 2855 l
-3563 2865 l
-3575 2875 l
-3588 2885 l
-3600 2895 l
-3612 2906 l
-3624 2916 l
-3636 2927 l
-3647 2937 l
-3658 2948 l
-3670 2958 l
-3680 2969 l
-3691 2980 l
-3701 2990 l
-3712 3001 l
-3722 3012 l
-3731 3023 l
-3741 3033 l
-3750 3044 l
-3760 3055 l
-3769 3066 l
-3777 3076 l
-3786 3087 l
-3794 3098 l
-3803 3108 l
-3811 3119 l
-3818 3129 l
-3826 3140 l
-3834 3150 l
-3841 3161 l
-3848 3171 l
-3855 3181 l
-3862 3192 l
-3868 3202 l
-3875 3212 l
-3881 3222 l
-3887 3232 l
-3893 3242 l
-3899 3252 l
-3905 3262 l
-3910 3271 l
-3916 3281 l
-S
-3916 3281 m
-3921 3291 l
-3926 3300 l
-3931 3309 l
-3936 3319 l
-3940 3328 l
-3945 3337 l
-3949 3346 l
-3954 3355 l
-3958 3364 l
-3962 3373 l
-3966 3382 l
-3970 3391 l
-3974 3399 l
-3977 3408 l
-3981 3416 l
-3984 3425 l
-3988 3433 l
-3991 3441 l
-3994 3449 l
-3997 3457 l
-4000 3465 l
-4003 3473 l
-4006 3481 l
-4009 3489 l
-4012 3496 l
-4014 3504 l
-4017 3512 l
-4019 3519 l
-4022 3526 l
-4024 3533 l
-4026 3541 l
-4028 3548 l
-4030 3555 l
-4032 3562 l
-4034 3569 l
-4036 3575 l
-4038 3582 l
-4040 3589 l
-4042 3595 l
-4043 3602 l
-4045 3608 l
-4047 3615 l
-4048 3621 l
-4050 3627 l
-4051 3633 l
-4053 3639 l
-4054 3645 l
-4055 3651 l
-4057 3657 l
-4058 3663 l
-4059 3669 l
-4060 3675 l
-4061 3680 l
-4062 3686 l
-4064 3691 l
-4065 3697 l
-4066 3702 l
-4066 3707 l
-4067 3713 l
-4068 3718 l
-4069 3723 l
-4070 3728 l
-4071 3733 l
-4072 3738 l
-4072 3743 l
-4073 3748 l
-4074 3753 l
-4074 3758 l
-4075 3762 l
-4076 3767 l
-4076 3772 l
-4077 3776 l
-4078 3781 l
-4078 3785 l
-4079 3790 l
-4079 3794 l
-4080 3799 l
-4080 3803 l
-4085 3859 l
-4087 3907 l
-4088 3949 l
-4087 3987 l
-4086 4019 l
-4084 4049 l
-4082 4075 l
-4080 4098 l
-4077 4119 l
-4075 4138 l
-4072 4156 l
-4070 4172 l
-4067 4186 l
-4065 4199 l
-4063 4212 l
-4060 4223 l
-4058 4234 l
-4056 4244 l
-4054 4253 l
-4052 4262 l
-4050 4270 l
-4048 4277 l
-4047 4284 l
-4028 4352 l
-4016 4390 l
-4008 4413 l
-4002 4429 l
-3997 4441 l
-3994 4451 l
-3991 4458 l
-3988 4465 l
-3986 4470 l
-3984 4474 l
-3982 4478 l
-3981 4482 l
-3980 4485 l
-3978 4488 l
-3977 4491 l
-3976 4493 l
-3975 4495 l
-3974 4498 l
-3973 4500 l
-3972 4501 l
-3971 4503 l
-3971 4505 l
-3970 4507 l
-3969 4508 l
-3968 4510 l
-3968 4511 l
-3967 4513 l
-3966 4514 l
-3966 4515 l
-3965 4517 l
-3964 4518 l
-3964 4519 l
-3963 4521 l
-3962 4522 l
-3962 4523 l
-3961 4524 l
-3960 4525 l
-3960 4526 l
-3959 4528 l
-3959 4529 l
-3958 4530 l
-3958 4531 l
-3950 4545 l
-3942 4557 l
-3933 4569 l
-3925 4580 l
-3916 4591 l
-3907 4602 l
-3897 4612 l
-3887 4622 l
-3877 4632 l
-3866 4641 l
-3855 4650 l
-3844 4659 l
-3832 4667 l
-3820 4675 l
-3807 4683 l
-3794 4691 l
-3780 4698 l
-3767 4706 l
-3752 4712 l
-3738 4719 l
-3723 4725 l
-3708 4731 l
-3692 4737 l
-3676 4743 l
-3660 4748 l
-3643 4753 l
-3627 4757 l
-3609 4762 l
-3592 4766 l
-3574 4770 l
-3556 4773 l
-3537 4776 l
-3518 4779 l
-3499 4782 l
-3480 4784 l
-3461 4786 l
-3441 4788 l
-3421 4789 l
-3400 4790 l
-3380 4791 l
-3359 4792 l
-3338 4792 l
-S
-2880 5085 m
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2880 5085 l
-2879 5085 l
-2878 5084 l
-2878 5084 l
-2877 5083 l
-2876 5083 l
-2876 5083 l
-2875 5082 l
-2874 5082 l
-2874 5082 l
-2873 5081 l
-2872 5081 l
-2871 5080 l
-2871 5080 l
-2861 5075 l
-2850 5069 l
-2839 5064 l
-2828 5059 l
-2816 5053 l
-2804 5048 l
-2791 5043 l
-2778 5037 l
-2765 5031 l
-2752 5026 l
-2738 5020 l
-2724 5015 l
-2710 5009 l
-2696 5003 l
-2681 4997 l
-2666 4991 l
-2651 4985 l
-2636 4979 l
-2620 4973 l
-2605 4967 l
-2589 4960 l
-2573 4954 l
-2557 4948 l
-2541 4941 l
-2525 4935 l
-2509 4928 l
-2492 4921 l
-2476 4915 l
-2459 4908 l
-2442 4901 l
-2426 4894 l
-2409 4887 l
-2392 4880 l
-2376 4873 l
-2359 4865 l
-2342 4858 l
-2325 4851 l
-2309 4843 l
-2292 4836 l
-2275 4829 l
-2259 4821 l
-2242 4814 l
-2225 4806 l
-2209 4799 l
-2192 4791 l
-2176 4784 l
-2160 4776 l
-2144 4768 l
-2127 4761 l
-2111 4753 l
-2096 4746 l
-2080 4738 l
-2064 4731 l
-2049 4723 l
-2033 4716 l
-2018 4709 l
-2003 4701 l
-1988 4694 l
-1973 4687 l
-1959 4680 l
-1945 4673 l
-1930 4666 l
-1916 4660 l
-1903 4653 l
-1889 4647 l
-1876 4641 l
-1863 4635 l
-1850 4629 l
-1837 4623 l
-1825 4618 l
-1813 4612 l
-1801 4607 l
-1789 4603 l
-1778 4598 l
-1767 4594 l
-1756 4590 l
-1746 4587 l
-1736 4584 l
-1726 4581 l
-1717 4579 l
-1708 4577 l
-1699 4576 l
-1691 4575 l
-1683 4575 l
-1676 4575 l
-1669 4575 l
-1663 4577 l
-1657 4579 l
-1652 4582 l
-1647 4585 l
-1643 4589 l
-1639 4594 l
-1636 4600 l
-1634 4607 l
-1633 4615 l
-1632 4624 l
-1633 4633 l
-1634 4644 l
-1636 4656 l
-1640 4669 l
-1644 4683 l
-1650 4699 l
-1657 4716 l
-1666 4734 l
-1676 4753 l
-1688 4773 l
-1702 4795 l
-1718 4818 l
-1735 4842 l
-1755 4867 l
-1778 4893 l
-1802 4919 l
-1829 4947 l
-1859 4974 l
-1891 5002 l
-1925 5029 l
-1962 5056 l
-2001 5083 l
-2043 5108 l
-2085 5132 l
-2130 5155 l
-2175 5175 l
-2222 5194 l
-2268 5211 l
-2315 5226 l
-2361 5238 l
-2407 5248 l
-2451 5256 l
-2494 5263 l
-2536 5267 l
-2575 5270 l
-2613 5271 l
-2649 5270 l
-2682 5269 l
-2713 5266 l
-2742 5263 l
-2769 5259 l
-2793 5254 l
-2816 5249 l
-2836 5243 l
-2855 5238 l
-2871 5232 l
-2886 5225 l
-2899 5219 l
-2911 5213 l
-2920 5206 l
-2929 5200 l
-2936 5194 l
-2941 5187 l
-2946 5181 l
-2949 5175 l
-2951 5169 l
-2952 5163 l
-2952 5157 l
-2951 5151 l
-2949 5145 l
-2946 5140 l
-2943 5134 l
-2938 5128 l
-2933 5123 l
-2928 5117 l
-2921 5112 l
-2914 5107 l
-2907 5101 l
-2898 5096 l
-2890 5091 l
-2880 5085 l
-S
-3421 4402 m
-3413 4431 l
-S
-3307 4418 m
-3299 4448 l
-S
-3191 4423 m
-3182 4452 l
-S
-3073 4416 m
-3063 4445 l
-S
-2953 4399 m
-2942 4428 l
-S
-2714 4337 m
-2703 4365 l
-S
-2598 4293 m
-2586 4321 l
-S
-2484 4242 m
-2471 4269 l
-S
-2374 4183 m
-2361 4210 l
-S
-2270 4117 m
-2256 4144 l
-S
-2081 3965 m
-2067 3992 l
-S
-1999 3880 m
-1984 3906 l
-S
-1928 3790 m
-1912 3815 l
-S
-1868 3693 m
-1851 3718 l
-S
-1822 3590 m
-1804 3615 l
-S
-1781 3365 m
-1761 3387 l
-S
-1796 3241 m
-1774 3262 l
-S
-1842 3108 m
-1819 3128 l
-S
-1933 2968 m
-1908 2985 l
-S
-2086 2825 m
-2058 2838 l
-S
-2673 2622 m
-2643 2620 l
-S
-3103 2675 m
-3081 2654 l
-S
-3509 2886 m
-3537 2898 l
-S
-3785 3187 m
-3805 3210 l
-S
-3920 3482 m
-3933 3510 l
-S
-3939 3918 m
-3942 3948 l
-S
-3887 4065 m
-3887 4095 l
-S
-3814 4177 m
-3812 4207 l
-S
-3728 4263 m
-3725 4293 l
-S
-3633 4326 m
-3627 4356 l
-S
-3043 3352 m
-3063 3330 l
-S
-3100 3391 m
-3121 3369 l
-S
-3155 3434 m
-3177 3413 l
-S
-3207 3480 m
-3230 3459 l
-S
-3256 3529 m
-3279 3509 l
-S
-3345 3636 m
-3369 3617 l
-S
-3384 3693 m
-3409 3676 l
-S
-3419 3753 m
-3445 3737 l
-S
-3450 3816 m
-3476 3800 l
-S
-3477 3880 m
-3504 3865 l
-S
-3518 4015 m
-3545 4002 l
-S
-3531 4084 m
-3559 4072 l
-S
-3539 4155 m
-3567 4144 l
-S
-3541 4227 m
-3570 4217 l
-S
-3538 4299 m
-3567 4290 l
-S
-3514 4445 m
-3544 4438 l
-S
-3493 4517 m
-3523 4512 l
-S
-3465 4588 m
-3495 4585 l
-S
-3430 4658 m
-3460 4656 l
-S
-3387 4726 m
-3418 4726 l
-S
-3281 4854 m
-3311 4857 l
-S
-3216 4913 m
-3246 4917 l
-S
-3143 4966 m
-3173 4973 l
-S
-3063 5013 m
-3092 5022 l
-S
-2975 5053 m
-3003 5064 l
-S
-2779 5108 m
-2805 5124 l
-S
-2673 5120 m
-2697 5139 l
-S
-2563 5121 m
-2584 5142 l
-S
-2450 5109 m
-2468 5133 l
-S
-2336 5084 m
-2350 5111 l
-S
-3529 4372 m
-3483 4387 l
-3436 4399 l
-3389 4408 l
-3340 4415 l
-3291 4420 l
-3241 4422 l
-3191 4423 l
-3140 4421 l
-3090 4418 l
-3038 4412 l
-2987 4405 l
-2936 4396 l
-2884 4385 l
-2833 4372 l
-S
-2833 4372 m
-2782 4358 l
-2731 4343 l
-2681 4325 l
-2631 4306 l
-2581 4286 l
-2532 4265 l
-2484 4242 l
-2436 4217 l
-2390 4191 l
-2344 4164 l
-2299 4136 l
-2256 4107 l
-2213 4076 l
-2172 4044 l
-S
-2172 4044 m
-2132 4011 l
-2094 3977 l
-2057 3942 l
-2022 3905 l
-1989 3868 l
-1957 3829 l
-1928 3790 l
-1901 3749 l
-1876 3707 l
-1853 3664 l
-1833 3620 l
-1832 3617 l
-1831 3614 l
-1829 3610 l
-1828 3607 l
-1827 3604 l
-1826 3601 l
-1824 3598 l
-1823 3594 l
-1822 3591 l
-1821 3588 l
-1820 3585 l
-1819 3581 l
-1817 3578 l
-1816 3575 l
-1815 3572 l
-1814 3568 l
-1813 3565 l
-1812 3562 l
-1811 3558 l
-1810 3555 l
-1809 3552 l
-1808 3549 l
-1807 3545 l
-1806 3542 l
-1805 3539 l
-1804 3535 l
-1803 3532 l
-1802 3529 l
-1801 3525 l
-1801 3522 l
-1800 3518 l
-1799 3515 l
-1798 3512 l
-1797 3508 l
-1797 3505 l
-1796 3501 l
-1795 3498 l
-1794 3495 l
-1794 3491 l
-1793 3488 l
-1792 3484 l
-1792 3481 l
-S
-1792 3481 m
-1791 3477 l
-1790 3474 l
-1790 3471 l
-1789 3467 l
-1789 3464 l
-1788 3460 l
-1788 3457 l
-1787 3453 l
-1787 3450 l
-1786 3446 l
-1786 3443 l
-1785 3439 l
-1785 3436 l
-1785 3432 l
-1784 3428 l
-1784 3425 l
-1784 3421 l
-1783 3418 l
-1783 3414 l
-1783 3411 l
-1783 3407 l
-1782 3403 l
-1782 3400 l
-1782 3396 l
-1782 3393 l
-1782 3389 l
-1782 3385 l
-1782 3382 l
-1781 3378 l
-1781 3374 l
-1781 3371 l
-1781 3367 l
-1781 3364 l
-1781 3360 l
-1782 3356 l
-1782 3352 l
-1782 3349 l
-1782 3345 l
-1782 3341 l
-1782 3338 l
-1782 3334 l
-1783 3330 l
-1783 3326 l
-1783 3323 l
-1784 3319 l
-1784 3315 l
-1784 3311 l
-1785 3308 l
-1785 3304 l
-1786 3300 l
-1786 3296 l
-1787 3292 l
-1787 3289 l
-1788 3285 l
-1788 3281 l
-1789 3277 l
-1789 3273 l
-1790 3269 l
-1791 3265 l
-1791 3262 l
-1792 3258 l
-1793 3254 l
-1794 3250 l
-1795 3246 l
-1795 3242 l
-1796 3238 l
-1797 3234 l
-1798 3230 l
-1799 3226 l
-1800 3222 l
-1801 3218 l
-1802 3214 l
-1803 3210 l
-1805 3206 l
-1806 3202 l
-1807 3198 l
-1808 3194 l
-1809 3190 l
-1811 3186 l
-1812 3182 l
-1814 3178 l
-1815 3174 l
-1816 3170 l
-1818 3166 l
-1819 3162 l
-1821 3158 l
-1822 3154 l
-1824 3150 l
-1826 3146 l
-1827 3142 l
-1829 3137 l
-1831 3133 l
-1833 3129 l
-1835 3125 l
-1836 3121 l
-1838 3117 l
-1840 3113 l
-1842 3108 l
-1844 3104 l
-1846 3100 l
-1849 3096 l
-1851 3092 l
-1853 3087 l
-1855 3083 l
-1858 3079 l
-1860 3075 l
-1862 3070 l
-1865 3066 l
-1867 3062 l
-1870 3058 l
-1872 3053 l
-1875 3049 l
-1878 3045 l
-1880 3041 l
-1883 3036 l
-1886 3032 l
-1889 3028 l
-1892 3023 l
-1895 3019 l
-1898 3015 l
-1901 3010 l
-1904 3006 l
-1907 3002 l
-1910 2997 l
-1913 2993 l
-1917 2989 l
-1920 2984 l
-1923 2980 l
-1927 2975 l
-1930 2971 l
-1934 2967 l
-1938 2962 l
-1941 2958 l
-1945 2953 l
-1949 2949 l
-1953 2945 l
-1957 2940 l
-1961 2936 l
-1965 2931 l
-1969 2927 l
-1973 2923 l
-1978 2918 l
-1982 2914 l
-1986 2909 l
-1991 2905 l
-1995 2901 l
-2000 2896 l
-2005 2892 l
-2009 2887 l
-2014 2883 l
-2019 2879 l
-2024 2874 l
-2029 2870 l
-2034 2865 l
-2039 2861 l
-2045 2857 l
-2050 2852 l
-2055 2848 l
-2061 2844 l
-2066 2839 l
-2072 2835 l
-2078 2831 l
-2084 2826 l
-2090 2822 l
-2096 2818 l
-2102 2813 l
-2108 2809 l
-2114 2805 l
-2120 2801 l
-2127 2796 l
-2133 2792 l
-2140 2788 l
-2146 2784 l
-2153 2780 l
-2160 2775 l
-2167 2771 l
-2174 2767 l
-2181 2763 l
-2188 2759 l
-2195 2755 l
-2203 2751 l
-2210 2747 l
-2218 2743 l
-2226 2739 l
-2233 2735 l
-2241 2732 l
-2249 2728 l
-2257 2724 l
-2265 2720 l
-2274 2717 l
-2282 2713 l
-2291 2709 l
-2299 2706 l
-2308 2702 l
-2317 2699 l
-2326 2695 l
-S
-2326 2695 m
-2335 2692 l
-2344 2689 l
-2353 2685 l
-2362 2682 l
-2372 2679 l
-2381 2676 l
-2391 2673 l
-2400 2670 l
-2410 2667 l
-2420 2664 l
-2430 2661 l
-2440 2659 l
-2451 2656 l
-2461 2653 l
-2472 2651 l
-2482 2649 l
-2493 2646 l
-2504 2644 l
-2514 2642 l
-2525 2640 l
-2537 2638 l
-2548 2636 l
-2559 2634 l
-2570 2633 l
-2582 2631 l
-2593 2630 l
-2605 2628 l
-2617 2627 l
-2629 2626 l
-2641 2625 l
-2653 2624 l
-2665 2623 l
-2677 2622 l
-2689 2622 l
-2702 2621 l
-2714 2621 l
-2727 2621 l
-2739 2621 l
-2752 2621 l
-2765 2621 l
-2778 2621 l
-2791 2622 l
-2804 2622 l
-2817 2623 l
-2830 2624 l
-2843 2625 l
-2856 2626 l
-2869 2627 l
-2883 2629 l
-2896 2631 l
-2909 2632 l
-2923 2634 l
-2936 2636 l
-2950 2639 l
-2963 2641 l
-2977 2644 l
-2990 2646 l
-3004 2649 l
-3017 2652 l
-3031 2655 l
-3044 2659 l
-3058 2662 l
-3071 2666 l
-3085 2670 l
-3098 2674 l
-3112 2678 l
-3125 2682 l
-3139 2687 l
-3152 2691 l
-3166 2696 l
-3179 2701 l
-3192 2706 l
-3205 2711 l
-3219 2717 l
-3232 2722 l
-3245 2728 l
-3258 2734 l
-3271 2740 l
-3284 2746 l
-3296 2752 l
-3309 2758 l
-3322 2765 l
-3334 2772 l
-3347 2778 l
-3359 2785 l
-3371 2792 l
-3383 2800 l
-3395 2807 l
-3407 2814 l
-3419 2822 l
-3431 2829 l
-3442 2837 l
-3454 2845 l
-3465 2853 l
-3476 2861 l
-3488 2869 l
-3499 2878 l
-3509 2886 l
-3520 2894 l
-3531 2903 l
-3541 2911 l
-3551 2920 l
-3562 2929 l
-3572 2938 l
-3581 2947 l
-3591 2956 l
-3601 2965 l
-3610 2974 l
-3620 2983 l
-3629 2992 l
-3638 3001 l
-3647 3010 l
-3655 3020 l
-3664 3029 l
-3672 3038 l
-3681 3048 l
-3689 3057 l
-3697 3067 l
-3705 3076 l
-3712 3086 l
-3720 3095 l
-3727 3105 l
-3734 3114 l
-3742 3124 l
-3749 3133 l
-3755 3143 l
-3762 3152 l
-3769 3162 l
-3775 3171 l
-3781 3181 l
-3787 3190 l
-3793 3200 l
-3799 3209 l
-3805 3219 l
-3811 3228 l
-3816 3238 l
-3821 3247 l
-3827 3256 l
-3832 3266 l
-3837 3275 l
-3842 3284 l
-3846 3294 l
-3851 3303 l
-3855 3312 l
-3860 3321 l
-3864 3330 l
-3868 3339 l
-3872 3348 l
-3876 3358 l
-3880 3366 l
-3883 3375 l
-3887 3384 l
-3890 3393 l
-3894 3402 l
-3897 3411 l
-3900 3419 l
-3903 3428 l
-3906 3437 l
-3909 3445 l
-3912 3454 l
-3914 3462 l
-3917 3471 l
-3919 3479 l
-3922 3488 l
-3924 3496 l
-3926 3504 l
-3928 3512 l
-3930 3520 l
-3932 3528 l
-3934 3536 l
-3936 3544 l
-3938 3552 l
-3939 3560 l
-3941 3568 l
-3942 3576 l
-3944 3583 l
-3945 3591 l
-3946 3599 l
-3947 3606 l
-3948 3614 l
-3949 3621 l
-3950 3629 l
-3951 3636 l
-3952 3643 l
-3953 3650 l
-3954 3658 l
-3954 3665 l
-3955 3672 l
-3956 3679 l
-3956 3686 l
-3956 3693 l
-3957 3700 l
-3957 3706 l
-3957 3713 l
-3958 3720 l
-3958 3727 l
-S
-3958 3727 m
-3958 3733 l
-3958 3740 l
-3958 3746 l
-3958 3753 l
-3958 3759 l
-3958 3765 l
-3957 3772 l
-3957 3778 l
-3957 3784 l
-3956 3790 l
-3956 3797 l
-3956 3803 l
-3955 3809 l
-3955 3815 l
-3954 3821 l
-3954 3826 l
-3953 3832 l
-3952 3838 l
-3952 3844 l
-3951 3849 l
-3950 3855 l
-3949 3861 l
-3948 3866 l
-3948 3872 l
-3947 3877 l
-3946 3883 l
-3945 3888 l
-3944 3893 l
-3943 3899 l
-3942 3904 l
-3940 3909 l
-3939 3914 l
-3938 3919 l
-3937 3924 l
-3936 3930 l
-3934 3935 l
-3933 3940 l
-3932 3944 l
-3931 3949 l
-3929 3954 l
-3928 3959 l
-3926 3964 l
-3925 3968 l
-3923 3973 l
-3922 3978 l
-3920 3982 l
-3919 3987 l
-3917 3992 l
-3916 3996 l
-3914 4001 l
-3912 4005 l
-3911 4009 l
-3909 4014 l
-3907 4018 l
-3906 4022 l
-3904 4027 l
-3902 4031 l
-3900 4035 l
-3899 4039 l
-3897 4043 l
-3895 4047 l
-3893 4051 l
-3891 4055 l
-3889 4059 l
-3887 4063 l
-3885 4067 l
-3883 4071 l
-3881 4075 l
-3879 4079 l
-3877 4083 l
-3875 4086 l
-3873 4090 l
-3871 4094 l
-3869 4097 l
-3867 4101 l
-3865 4105 l
-3863 4108 l
-3860 4112 l
-3858 4115 l
-3856 4119 l
-3854 4122 l
-3852 4126 l
-3849 4129 l
-3847 4133 l
-3845 4136 l
-3843 4139 l
-3840 4143 l
-3838 4146 l
-3836 4149 l
-3833 4152 l
-3831 4156 l
-3829 4159 l
-3826 4162 l
-3824 4165 l
-3821 4168 l
-3819 4171 l
-3817 4174 l
-3814 4177 l
-3812 4180 l
-3809 4183 l
-3807 4186 l
-3804 4189 l
-3802 4192 l
-3799 4195 l
-3797 4197 l
-3794 4200 l
-3792 4203 l
-3789 4206 l
-3787 4209 l
-3784 4211 l
-3781 4214 l
-3779 4217 l
-3776 4219 l
-3774 4222 l
-3771 4225 l
-3768 4227 l
-3766 4230 l
-3763 4232 l
-3760 4235 l
-3758 4237 l
-3755 4240 l
-3752 4242 l
-3749 4245 l
-3747 4247 l
-3744 4249 l
-3741 4252 l
-3738 4254 l
-3736 4256 l
-3733 4259 l
-3730 4261 l
-3727 4263 l
-3725 4266 l
-3722 4268 l
-3719 4270 l
-3716 4272 l
-3713 4274 l
-3710 4276 l
-3708 4279 l
-3705 4281 l
-3702 4283 l
-3699 4285 l
-3696 4287 l
-3693 4289 l
-3690 4291 l
-3687 4293 l
-3684 4295 l
-3681 4297 l
-3679 4299 l
-3676 4301 l
-3673 4303 l
-3670 4304 l
-3667 4306 l
-3664 4308 l
-3661 4310 l
-3658 4312 l
-3655 4314 l
-3652 4315 l
-3649 4317 l
-3646 4319 l
-3643 4321 l
-3640 4322 l
-3637 4324 l
-3634 4326 l
-3631 4327 l
-3627 4329 l
-3624 4331 l
-3621 4332 l
-3618 4334 l
-3615 4335 l
-3612 4337 l
-3609 4338 l
-3606 4340 l
-3603 4341 l
-3600 4343 l
-3596 4344 l
-3593 4346 l
-3590 4347 l
-3587 4349 l
-3584 4350 l
-3581 4352 l
-3578 4353 l
-3574 4354 l
-3571 4356 l
-3568 4357 l
-3565 4358 l
-3562 4360 l
-3558 4361 l
-3555 4362 l
-3552 4363 l
-3549 4365 l
-3546 4366 l
-3542 4367 l
-3539 4368 l
-3536 4370 l
-3533 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-3532 4371 l
-S
-3532 4371 m
-3532 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3531 4371 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-3530 4372 l
-S
-2983 3317 m
-3009 3332 l
-3034 3347 l
-3060 3363 l
-3084 3380 l
-3108 3397 l
-3132 3415 l
-3155 3434 l
-3178 3453 l
-3200 3473 l
-3222 3493 l
-3243 3514 l
-3263 3536 l
-3283 3558 l
-3302 3581 l
-S
-3302 3581 m
-3321 3604 l
-3339 3628 l
-3356 3652 l
-3373 3676 l
-3389 3702 l
-3405 3727 l
-3419 3753 l
-3433 3780 l
-3446 3807 l
-3459 3834 l
-3470 3862 l
-3481 3890 l
-3491 3918 l
-3500 3947 l
-S
-3500 3947 m
-3508 3976 l
-3516 4005 l
-3522 4034 l
-3528 4064 l
-3532 4094 l
-3536 4125 l
-3539 4155 l
-3541 4186 l
-3541 4216 l
-3541 4247 l
-3540 4278 l
-3537 4310 l
-3534 4341 l
-3529 4372 l
-S
-3529 4372 m
-3524 4403 l
-3517 4434 l
-3509 4465 l
-3500 4496 l
-3489 4527 l
-3478 4558 l
-3465 4588 l
-3451 4618 l
-3435 4648 l
-3418 4678 l
-3400 4707 l
-3381 4736 l
-3360 4764 l
-3338 4792 l
-S
-3338 4792 m
-3314 4819 l
-3289 4846 l
-3263 4871 l
-3235 4896 l
-3206 4921 l
-3175 4944 l
-3143 4966 l
-3110 4987 l
-3075 5007 l
-3038 5025 l
-3001 5043 l
-2962 5058 l
-2922 5073 l
-2880 5085 l
-S
-2880 5085 m
-2838 5096 l
-2794 5105 l
-2750 5113 l
-2704 5118 l
-2658 5121 l
-2610 5122 l
-2563 5121 l
-2514 5117 l
-2466 5111 l
-2417 5103 l
-2368 5093 l
-2319 5079 l
-2271 5064 l
-2223 5046 l
-S
-4073 3746 m
-4075 3748 l
-S
-4075 3748 m
-4075 3753 l
-4075 3757 l
-4075 3762 l
-4075 3766 l
-4075 3770 l
-4075 3775 l
-4077 3777 l
-4079 3779 l
-4079 3784 l
-4079 3788 l
-S
-4079 3788 m
-4079 3793 l
-4079 3797 l
-4079 3802 l
-4079 3806 l
-4079 3811 l
-4079 3815 l
-4082 3817 l
-4084 3820 l
-4084 3824 l
-4084 3829 l
-S
-4084 3829 m
-4084 3833 l
-4084 3838 l
-4084 3842 l
-4084 3846 l
-4084 3851 l
-4084 3855 l
-4084 3860 l
-4084 3864 l
-4084 3869 l
-S
-4084 3869 m
-4084 3873 l
-4084 3878 l
-4086 3880 l
-4088 3882 l
-4088 3887 l
-4088 3891 l
-4088 3896 l
-4088 3900 l
-4088 3905 l
-4088 3909 l
-S
-4088 3909 m
-4088 3913 l
-4088 3918 l
-4088 3922 l
-4088 3927 l
-4088 3931 l
-4088 3936 l
-4088 3940 l
-4088 3945 l
-4088 3949 l
-S
-4088 3949 m
-4088 3954 l
-4088 3958 l
-4088 3963 l
-4088 3967 l
-4088 3972 l
-4088 3976 l
-4088 3981 l
-4088 3985 l
-4088 3989 l
-S
-4088 3989 m
-4088 3994 l
-4088 3998 l
-4088 4003 l
-4088 4007 l
-4088 4012 l
-4088 4016 l
-4086 4018 l
-4084 4021 l
-4084 4025 l
-4084 4030 l
-S
-4084 4030 m
-4084 4034 l
-4084 4039 l
-4084 4043 l
-4084 4048 l
-4084 4052 l
-4084 4056 l
-4084 4061 l
-4084 4065 l
-4084 4070 l
-S
-4084 4070 m
-4084 4074 l
-4084 4079 l
-4082 4081 l
-4079 4083 l
-4079 4088 l
-4079 4092 l
-4079 4097 l
-4079 4101 l
-4079 4106 l
-4079 4110 l
-S
-4079 4110 m
-4079 4115 l
-4079 4119 l
-4077 4121 l
-4075 4124 l
-4075 4128 l
-4075 4132 l
-4075 4137 l
-4075 4141 l
-4075 4146 l
-4075 4150 l
-S
-4073 4153 m
-4075 4150 l
-S
-4032 3563 m
-4035 3565 l
-4035 3569 l
-4035 3574 l
-4037 3576 l
-4039 3578 l
-4039 3583 l
-4039 3587 l
-S
-4039 3587 m
-4039 3592 l
-4041 3594 l
-4044 3596 l
-4044 3601 l
-4044 3605 l
-4044 3610 l
-4046 3612 l
-4048 3614 l
-4048 3619 l
-4048 3623 l
-4048 3627 l
-S
-4048 3627 m
-4050 3630 l
-4053 3632 l
-4053 3636 l
-4053 3641 l
-4053 3645 l
-4055 3648 l
-4057 3650 l
-4057 3654 l
-4057 3659 l
-4057 3663 l
-4057 3668 l
-S
-4057 3668 m
-4059 3670 l
-4061 3672 l
-4061 3677 l
-4061 3681 l
-4061 3686 l
-4061 3690 l
-4064 3692 l
-4066 3694 l
-4066 3699 l
-4066 3703 l
-4066 3708 l
-S
-4066 3708 m
-4066 3712 l
-4066 3717 l
-4068 3719 l
-4070 3721 l
-4070 3726 l
-4070 3730 l
-4070 3735 l
-4070 3739 l
-4070 3744 l
-4073 3746 l
-S
-4073 4153 m
-4070 4155 l
-4070 4159 l
-4070 4164 l
-4070 4168 l
-4070 4173 l
-4070 4177 l
-4068 4179 l
-4066 4182 l
-4066 4186 l
-4066 4191 l
-S
-4066 4191 m
-4066 4195 l
-4066 4199 l
-4066 4204 l
-4064 4206 l
-4061 4208 l
-4061 4213 l
-4061 4217 l
-4061 4222 l
-4061 4226 l
-4059 4229 l
-4057 4231 l
-S
-4057 4231 m
-4057 4235 l
-4057 4240 l
-4057 4244 l
-4057 4249 l
-4055 4251 l
-4053 4253 l
-4053 4258 l
-4053 4262 l
-4053 4267 l
-4050 4269 l
-4048 4271 l
-S
-4048 4271 m
-4048 4275 l
-4048 4280 l
-4048 4284 l
-4046 4287 l
-4044 4289 l
-4044 4293 l
-4044 4298 l
-4044 4302 l
-4041 4305 l
-4039 4307 l
-4039 4311 l
-S
-4032 4336 m
-4035 4334 l
-4035 4329 l
-4035 4325 l
-4037 4322 l
-4039 4320 l
-4039 4316 l
-4039 4311 l
-S
-3992 3442 m
-3994 3444 l
-3994 3449 l
-3994 3453 l
-3997 3455 l
-3999 3458 l
-3999 3462 l
-3999 3467 l
-S
-3999 3467 m
-4001 3469 l
-4003 3471 l
-4003 3476 l
-4006 3478 l
-4008 3480 l
-4008 3484 l
-4008 3489 l
-4010 3491 l
-4012 3493 l
-4012 3498 l
-4012 3502 l
-4015 3505 l
-4017 3507 l
-S
-4017 3507 m
-4017 3511 l
-4017 3516 l
-4019 3518 l
-4021 3520 l
-4021 3525 l
-4021 3529 l
-4023 3531 l
-4026 3534 l
-4026 3538 l
-4026 3543 l
-4028 3545 l
-4030 3547 l
-S
-4030 3547 m
-4030 3551 l
-4030 3556 l
-4030 3560 l
-4032 3563 l
-S
-4030 4351 m
-4030 4347 l
-4030 4342 l
-4030 4338 l
-4032 4336 l
-S
-4030 4351 m
-4028 4354 l
-4026 4356 l
-4026 4360 l
-4026 4365 l
-4023 4367 l
-4021 4369 l
-4021 4374 l
-4021 4378 l
-4019 4380 l
-4017 4383 l
-4017 4387 l
-4017 4392 l
-S
-4017 4392 m
-4015 4394 l
-4012 4396 l
-4012 4401 l
-4012 4405 l
-4010 4407 l
-4008 4410 l
-4008 4414 l
-4008 4418 l
-4006 4421 l
-4003 4423 l
-4003 4427 l
-4001 4430 l
-3999 4432 l
-S
-3992 4456 m
-3994 4454 l
-3994 4450 l
-3994 4445 l
-3997 4443 l
-3999 4441 l
-3999 4436 l
-3999 4432 l
-S
-3952 3353 m
-3954 3355 l
-3954 3359 l
-3956 3362 l
-3959 3364 l
-3959 3368 l
-3961 3371 l
-3963 3373 l
-3963 3377 l
-3965 3379 l
-3968 3382 l
-3968 3386 l
-S
-3968 3386 m
-3970 3388 l
-3972 3391 l
-3972 3395 l
-3972 3400 l
-3974 3402 l
-3977 3404 l
-3977 3408 l
-3979 3411 l
-3981 3413 l
-3981 3417 l
-3983 3420 l
-3985 3422 l
-3985 3426 l
-S
-3985 3426 m
-3985 3431 l
-3988 3433 l
-3990 3435 l
-3990 3440 l
-3992 3442 l
-S
-3985 4472 m
-3985 4468 l
-3988 4465 l
-3990 4463 l
-3990 4459 l
-3992 4456 l
-S
-3985 4472 m
-3985 4477 l
-3983 4479 l
-3981 4481 l
-3981 4486 l
-3979 4488 l
-3977 4490 l
-3977 4494 l
-3974 4497 l
-3972 4499 l
-3972 4503 l
-3972 4508 l
-3970 4510 l
-3968 4512 l
-S
-3952 4546 m
-3954 4544 l
-3954 4539 l
-3956 4537 l
-3959 4535 l
-3959 4530 l
-3961 4528 l
-3963 4526 l
-3963 4521 l
-3965 4519 l
-3968 4517 l
-3968 4512 l
-S
-3912 3272 m
-3914 3274 l
-3914 3279 l
-3916 3281 l
-3918 3283 l
-3918 3288 l
-3921 3290 l
-3923 3292 l
-3923 3297 l
-3925 3299 l
-3927 3301 l
-3927 3306 l
-S
-3927 3306 m
-3930 3308 l
-3932 3310 l
-3932 3315 l
-3934 3317 l
-3936 3319 l
-3936 3324 l
-3939 3326 l
-3941 3328 l
-3941 3333 l
-3943 3335 l
-3945 3337 l
-3945 3341 l
-3947 3344 l
-3950 3346 l
-S
-3950 3346 m
-3950 3350 l
-3952 3353 l
-S
-3950 4553 m
-3950 4548 l
-3952 4546 l
-S
-3950 4553 m
-3947 4555 l
-3945 4557 l
-3945 4561 l
-3943 4564 l
-3941 4566 l
-3941 4570 l
-3939 4573 l
-3936 4575 l
-3936 4579 l
-3934 4582 l
-3932 4584 l
-3932 4588 l
-3930 4591 l
-3927 4593 l
-S
-3912 4626 m
-3914 4624 l
-3914 4620 l
-3916 4617 l
-3918 4615 l
-3918 4611 l
-3921 4608 l
-3923 4606 l
-3923 4602 l
-3925 4599 l
-3927 4597 l
-3927 4593 l
-S
-3872 3205 m
-3874 3207 l
-3874 3212 l
-3876 3214 l
-3878 3216 l
-3878 3221 l
-3880 3223 l
-3883 3225 l
-S
-3883 3225 m
-3885 3227 l
-3887 3230 l
-3887 3234 l
-3889 3236 l
-3892 3239 l
-3894 3241 l
-3896 3243 l
-3896 3248 l
-3898 3250 l
-3901 3252 l
-3901 3257 l
-3903 3259 l
-3905 3261 l
-3905 3265 l
-S
-3905 3265 m
-3907 3268 l
-3909 3270 l
-3912 3272 l
-S
-3905 4633 m
-3907 4631 l
-3909 4629 l
-3912 4626 l
-S
-3905 4633 m
-3905 4637 l
-3903 4640 l
-3901 4642 l
-3901 4646 l
-3898 4649 l
-3896 4651 l
-3896 4655 l
-3894 4658 l
-3892 4660 l
-3889 4662 l
-3887 4664 l
-3887 4669 l
-3885 4671 l
-3883 4673 l
-S
-3872 4693 m
-3874 4691 l
-3874 4687 l
-3876 4684 l
-3878 4682 l
-3878 4678 l
-3880 4675 l
-3883 4673 l
-S
-3831 3147 m
-3834 3149 l
-3836 3152 l
-3838 3154 l
-3838 3158 l
-3840 3160 l
-3842 3163 l
-3845 3165 l
-3847 3167 l
-3847 3172 l
-3849 3174 l
-3851 3176 l
-3854 3178 l
-3856 3181 l
-3856 3185 l
-S
-3856 3185 m
-3858 3187 l
-3860 3190 l
-3863 3192 l
-3865 3194 l
-3865 3198 l
-3867 3201 l
-3869 3203 l
-3872 3205 l
-S
-3856 4713 m
-3858 4711 l
-3860 4709 l
-3863 4707 l
-3865 4704 l
-3865 4700 l
-3867 4698 l
-3869 4696 l
-3872 4693 l
-S
-3831 4751 m
-3834 4749 l
-3836 4747 l
-3838 4745 l
-3838 4740 l
-3840 4738 l
-3842 4736 l
-3845 4734 l
-3847 4731 l
-3847 4727 l
-3849 4725 l
-3851 4722 l
-3854 4720 l
-3856 4718 l
-3856 4713 l
-S
-3791 3093 m
-3793 3096 l
-3796 3098 l
-3798 3100 l
-3798 3105 l
-S
-3798 3105 m
-3800 3107 l
-3802 3109 l
-3804 3111 l
-3807 3114 l
-3809 3116 l
-3811 3118 l
-3811 3122 l
-3813 3125 l
-3816 3127 l
-3818 3129 l
-3820 3131 l
-3822 3134 l
-3825 3136 l
-3825 3140 l
-3827 3143 l
-3829 3145 l
-S
-3831 3147 m
-3829 3145 l
-S
-3829 4754 m
-3831 4751 l
-S
-3829 4754 m
-3827 4756 l
-3825 4758 l
-3825 4763 l
-3822 4765 l
-3820 4767 l
-3818 4769 l
-3816 4772 l
-3813 4774 l
-3811 4776 l
-3811 4780 l
-3809 4783 l
-3807 4785 l
-3804 4787 l
-3802 4789 l
-3800 4792 l
-3798 4794 l
-S
-3791 4805 m
-3793 4803 l
-3796 4801 l
-3798 4798 l
-3798 4794 l
-S
-3751 3044 m
-3753 3047 l
-3755 3049 l
-3758 3051 l
-3760 3053 l
-3762 3055 l
-3762 3060 l
-3764 3062 l
-3766 3064 l
-S
-3766 3064 m
-3769 3067 l
-3771 3069 l
-3773 3071 l
-3775 3073 l
-3778 3076 l
-3780 3078 l
-3782 3080 l
-3784 3082 l
-3784 3087 l
-3787 3089 l
-3789 3091 l
-3791 3093 l
-S
-3766 4834 m
-3769 4832 l
-3771 4830 l
-3773 4827 l
-3775 4825 l
-3778 4823 l
-3780 4821 l
-3782 4818 l
-3784 4816 l
-3784 4812 l
-3787 4810 l
-3789 4807 l
-3791 4805 l
-S
-3751 4854 m
-3753 4852 l
-3755 4850 l
-3758 4847 l
-3760 4845 l
-3762 4843 l
-3762 4839 l
-3764 4836 l
-3766 4834 l
-S
-3711 3000 m
-3713 3002 l
-3715 3004 l
-3717 3006 l
-3720 3009 l
-3722 3011 l
-3724 3013 l
-3726 3015 l
-3729 3017 l
-3731 3020 l
-3731 3024 l
-S
-3731 3024 m
-3733 3026 l
-3735 3029 l
-3737 3031 l
-3740 3033 l
-3742 3035 l
-3744 3038 l
-3746 3040 l
-3749 3042 l
-3751 3044 l
-S
-3731 4874 m
-3733 4872 l
-3735 4870 l
-3737 4868 l
-3740 4865 l
-3742 4863 l
-3744 4861 l
-3746 4859 l
-3749 4856 l
-3751 4854 l
-S
-3711 4899 m
-3713 4897 l
-3715 4894 l
-3717 4892 l
-3720 4890 l
-3722 4888 l
-3724 4885 l
-3726 4883 l
-3729 4881 l
-3731 4879 l
-3731 4874 l
-S
-3670 2959 m
-3673 2962 l
-3675 2964 l
-3677 2966 l
-3679 2968 l
-3682 2971 l
-3684 2973 l
-3686 2975 l
-3688 2977 l
-3691 2979 l
-3693 2982 l
-3695 2984 l
-S
-3695 2984 m
-3697 2986 l
-3699 2988 l
-3702 2991 l
-3704 2993 l
-3706 2995 l
-3708 2997 l
-3711 3000 l
-S
-3695 4915 m
-3697 4912 l
-3699 4910 l
-3702 4908 l
-3704 4906 l
-3706 4903 l
-3708 4901 l
-3711 4899 l
-S
-3670 4939 m
-3673 4937 l
-3675 4935 l
-3677 4932 l
-3679 4930 l
-3682 4928 l
-3684 4926 l
-3686 4923 l
-3688 4921 l
-3691 4919 l
-3693 4917 l
-3695 4915 l
-S
-3630 2924 m
-3635 2924 l
-3637 2926 l
-3639 2928 l
-3641 2930 l
-3644 2933 l
-3646 2935 l
-3648 2937 l
-3650 2939 l
-3653 2941 l
-3655 2944 l
-S
-3655 2944 m
-3657 2946 l
-3659 2948 l
-3661 2950 l
-3664 2953 l
-3666 2955 l
-3668 2957 l
-3670 2959 l
-S
-3655 4955 m
-3657 4953 l
-3659 4950 l
-3661 4948 l
-3664 4946 l
-3666 4944 l
-3668 4941 l
-3670 4939 l
-S
-3630 4975 m
-3635 4975 l
-3637 4973 l
-3639 4970 l
-3641 4968 l
-3644 4966 l
-3646 4964 l
-3648 4961 l
-3650 4959 l
-3653 4957 l
-3655 4955 l
-S
-3590 2888 m
-3592 2890 l
-3594 2892 l
-3599 2892 l
-3601 2895 l
-3603 2897 l
-3606 2899 l
-3608 2901 l
-3610 2903 l
-S
-3610 2903 m
-3612 2906 l
-3615 2908 l
-3617 2910 l
-3619 2912 l
-3621 2915 l
-3623 2917 l
-3626 2919 l
-3628 2921 l
-3630 2924 l
-S
-3610 4995 m
-3612 4993 l
-3615 4990 l
-3617 4988 l
-3619 4986 l
-3621 4984 l
-3623 4982 l
-3626 4979 l
-3628 4977 l
-3630 4975 l
-S
-3590 5011 m
-3592 5008 l
-3594 5006 l
-3599 5006 l
-3601 5004 l
-3603 5002 l
-3606 4999 l
-3608 4997 l
-3610 4995 l
-S
-3550 2857 m
-3554 2857 l
-3556 2859 l
-3559 2861 l
-3561 2863 l
-S
-3561 2863 m
-3563 2866 l
-3565 2868 l
-3568 2870 l
-3572 2870 l
-3574 2872 l
-3577 2874 l
-3579 2877 l
-3581 2879 l
-3583 2881 l
-3585 2883 l
-3588 2886 l
-3590 2888 l
-S
-3561 5035 m
-3563 5033 l
-3565 5031 l
-3568 5028 l
-3572 5028 l
-3574 5026 l
-3577 5024 l
-3579 5022 l
-3581 5020 l
-3583 5017 l
-3585 5015 l
-3588 5013 l
-3590 5011 l
-S
-3550 5042 m
-3554 5042 l
-3556 5040 l
-3559 5037 l
-3561 5035 l
-S
-3510 2825 m
-3512 2828 l
-3514 2830 l
-3518 2830 l
-3521 2832 l
-3523 2834 l
-3525 2836 l
-3527 2839 l
-3530 2841 l
-3532 2843 l
-3536 2843 l
-3539 2845 l
-3541 2848 l
-3543 2850 l
-3545 2852 l
-3548 2854 l
-3550 2857 l
-S
-3510 5073 m
-3512 5071 l
-3514 5069 l
-3518 5069 l
-3521 5066 l
-3523 5064 l
-3525 5062 l
-3527 5060 l
-3530 5058 l
-3532 5055 l
-3536 5055 l
-3539 5053 l
-3541 5051 l
-3543 5049 l
-3545 5046 l
-3548 5044 l
-3550 5042 l
-S
-3469 2798 m
-3474 2798 l
-3476 2801 l
-3478 2803 l
-3480 2805 l
-3483 2807 l
-3487 2807 l
-3489 2810 l
-3492 2812 l
-3494 2814 l
-3496 2816 l
-3501 2816 l
-3503 2819 l
-3505 2821 l
-3507 2823 l
-S
-3510 2825 m
-3507 2823 l
-S
-3507 5075 m
-3510 5073 l
-S
-3469 5100 m
-3474 5100 l
-3476 5098 l
-3478 5096 l
-3480 5093 l
-3483 5091 l
-3487 5091 l
-3489 5089 l
-3492 5087 l
-3494 5084 l
-3496 5082 l
-3501 5082 l
-3503 5080 l
-3505 5078 l
-3507 5075 l
-S
-3429 2772 m
-3431 2774 l
-3434 2776 l
-3438 2776 l
-3440 2778 l
-3442 2781 l
-3447 2781 l
-3449 2783 l
-S
-3449 2783 m
-3451 2785 l
-3454 2787 l
-3456 2790 l
-3460 2790 l
-3463 2792 l
-3465 2794 l
-3467 2796 l
-3469 2798 l
-S
-3449 5116 m
-3451 5113 l
-3454 5111 l
-3456 5109 l
-3460 5109 l
-3463 5107 l
-3465 5104 l
-3467 5102 l
-3469 5100 l
-S
-3429 5127 m
-3431 5125 l
-3434 5122 l
-3438 5122 l
-3440 5120 l
-3442 5118 l
-3447 5118 l
-3449 5116 l
-S
-3389 2749 m
-3393 2749 l
-3396 2752 l
-3398 2754 l
-3402 2754 l
-3405 2756 l
-3407 2758 l
-3411 2758 l
-3413 2760 l
-3416 2763 l
-3418 2765 l
-3420 2767 l
-3425 2767 l
-3427 2769 l
-3429 2772 l
-S
-3389 5149 m
-3393 5149 l
-3396 5147 l
-3398 5145 l
-3402 5145 l
-3405 5142 l
-3407 5140 l
-3411 5140 l
-3413 5138 l
-3416 5136 l
-3418 5133 l
-3420 5131 l
-3425 5131 l
-3427 5129 l
-3429 5127 l
-S
-3349 2727 m
-3353 2727 l
-3355 2729 l
-3358 2731 l
-3362 2731 l
-3364 2734 l
-3367 2736 l
-3371 2736 l
-3373 2738 l
-3375 2740 l
-3380 2740 l
-3382 2743 l
-S
-3382 2743 m
-3384 2745 l
-3387 2747 l
-3389 2749 l
-S
-3382 5156 m
-3384 5154 l
-3387 5151 l
-3389 5149 l
-S
-3349 5171 m
-3353 5171 l
-3355 5169 l
-3358 5167 l
-3362 5167 l
-3364 5165 l
-3367 5163 l
-3371 5163 l
-3373 5160 l
-3375 5158 l
-3380 5158 l
-3382 5156 l
-S
-3308 2705 m
-3311 2707 l
-3313 2709 l
-3317 2709 l
-3320 2711 l
-3322 2714 l
-3326 2714 l
-3329 2716 l
-3331 2718 l
-3335 2718 l
-3337 2720 l
-3340 2723 l
-3344 2723 l
-3346 2725 l
-3349 2727 l
-S
-3308 5194 m
-3311 5192 l
-3313 5189 l
-3317 5189 l
-3320 5187 l
-3322 5185 l
-3326 5185 l
-3329 5183 l
-3331 5180 l
-3335 5180 l
-3337 5178 l
-3340 5176 l
-3344 5176 l
-3346 5174 l
-3349 5171 l
-S
-3268 2687 m
-3273 2687 l
-3275 2689 l
-3277 2691 l
-3282 2691 l
-3284 2693 l
-3286 2696 l
-3291 2696 l
-3293 2698 l
-3295 2700 l
-3299 2700 l
-3302 2702 l
-S
-3308 2705 m
-3304 2705 l
-3302 2702 l
-S
-3302 5196 m
-3304 5194 l
-3308 5194 l
-S
-3268 5212 m
-3273 5212 l
-3275 5209 l
-3277 5207 l
-3282 5207 l
-3284 5205 l
-3286 5203 l
-3291 5203 l
-3293 5201 l
-3295 5198 l
-3299 5198 l
-3302 5196 l
-S
-3228 2669 m
-3232 2669 l
-3235 2671 l
-3237 2673 l
-3241 2673 l
-3244 2676 l
-3246 2678 l
-3250 2678 l
-3253 2680 l
-3255 2682 l
-3259 2682 l
-3264 2682 l
-3266 2685 l
-3268 2687 l
-S
-3228 5230 m
-3232 5230 l
-3235 5227 l
-3237 5225 l
-3241 5225 l
-3244 5223 l
-3246 5221 l
-3250 5221 l
-3253 5218 l
-3255 5216 l
-3259 5216 l
-3264 5216 l
-3266 5214 l
-3268 5212 l
-S
-3188 2655 m
-3192 2655 l
-3197 2655 l
-3199 2658 l
-3201 2660 l
-3206 2660 l
-3210 2660 l
-3212 2662 l
-S
-3212 2662 m
-3215 2664 l
-3219 2664 l
-3221 2667 l
-3224 2669 l
-3228 2669 l
-S
-3212 5236 m
-3215 5234 l
-3219 5234 l
-3221 5232 l
-3224 5230 l
-3228 5230 l
-S
-3188 5243 m
-3192 5243 l
-3197 5243 l
-3199 5241 l
-3201 5239 l
-3206 5239 l
-3210 5239 l
-3212 5236 l
-S
-3148 2638 m
-3150 2640 l
-3152 2642 l
-3156 2642 l
-3161 2642 l
-3163 2644 l
-3165 2647 l
-3170 2647 l
-3174 2647 l
-3177 2649 l
-3179 2651 l
-3183 2651 l
-3186 2653 l
-3188 2655 l
-S
-3148 5261 m
-3150 5259 l
-3152 5256 l
-3156 5256 l
-3161 5256 l
-3163 5254 l
-3165 5252 l
-3170 5252 l
-3174 5252 l
-3177 5250 l
-3179 5247 l
-3183 5247 l
-3186 5245 l
-3188 5243 l
-S
-3107 2624 m
-3110 2626 l
-3112 2629 l
-3116 2629 l
-3121 2629 l
-3123 2631 l
-3125 2633 l
-3130 2633 l
-3134 2633 l
-3136 2635 l
-3139 2638 l
-3143 2638 l
-3148 2638 l
-S
-3107 5274 m
-3110 5272 l
-3112 5270 l
-3116 5270 l
-3121 5270 l
-3123 5268 l
-3125 5265 l
-3130 5265 l
-3134 5265 l
-3136 5263 l
-3139 5261 l
-3143 5261 l
-3148 5261 l
-S
-3067 2615 m
-3072 2615 l
-3076 2615 l
-3078 2617 l
-3081 2620 l
-3085 2620 l
-3089 2620 l
-3092 2622 l
-S
-3107 2624 m
-3103 2624 l
-3098 2624 l
-3094 2624 l
-3092 2622 l
-S
-3092 5277 m
-3094 5274 l
-3098 5274 l
-3103 5274 l
-3107 5274 l
-S
-3067 5283 m
-3072 5283 l
-3076 5283 l
-3078 5281 l
-3081 5279 l
-3085 5279 l
-3089 5279 l
-3092 5277 l
-S
-3027 2606 m
-3031 2606 l
-3036 2606 l
-3040 2606 l
-3043 2609 l
-3045 2611 l
-3049 2611 l
-3054 2611 l
-3058 2611 l
-3060 2613 l
-3063 2615 l
-3067 2615 l
-S
-3027 5292 m
-3031 5292 l
-3036 5292 l
-3040 5292 l
-3043 5290 l
-3045 5288 l
-3049 5288 l
-3054 5288 l
-3058 5288 l
-3060 5285 l
-3063 5283 l
-3067 5283 l
-S
-2987 2597 m
-2991 2597 l
-2996 2597 l
-3000 2597 l
-3005 2597 l
-3007 2600 l
-3009 2602 l
-3013 2602 l
-3018 2602 l
-3022 2602 l
-3025 2604 l
-3027 2606 l
-S
-2987 5301 m
-2991 5301 l
-2996 5301 l
-3000 5301 l
-3005 5301 l
-3007 5299 l
-3009 5297 l
-3013 5297 l
-3018 5297 l
-3022 5297 l
-3025 5294 l
-3027 5292 l
-S
-2946 2588 m
-2951 2588 l
-2955 2588 l
-2960 2588 l
-2962 2591 l
-2964 2593 l
-2969 2593 l
-2973 2593 l
-2978 2593 l
-2982 2593 l
-2984 2595 l
-2987 2597 l
-S
-2946 5310 m
-2951 5310 l
-2955 5310 l
-2960 5310 l
-2962 5308 l
-2964 5306 l
-2969 5306 l
-2973 5306 l
-2978 5306 l
-2982 5306 l
-2984 5303 l
-2987 5301 l
-S
-2906 2579 m
-2908 2582 l
-S
-2908 2582 m
-2911 2584 l
-2915 2584 l
-2920 2584 l
-2924 2584 l
-2929 2584 l
-2933 2584 l
-2935 2586 l
-2938 2588 l
-2942 2588 l
-2946 2588 l
-S
-2908 5317 m
-2911 5314 l
-2915 5314 l
-2920 5314 l
-2924 5314 l
-2929 5314 l
-2933 5314 l
-2935 5312 l
-2938 5310 l
-2942 5310 l
-2946 5310 l
-S
-2906 5319 m
-2908 5317 l
-S
-2866 2575 m
-2870 2575 l
-2875 2575 l
-2877 2577 l
-2879 2579 l
-2884 2579 l
-2888 2579 l
-2893 2579 l
-2897 2579 l
-2902 2579 l
-2906 2579 l
-S
-2906 5319 m
-2902 5319 l
-2897 5319 l
-2893 5319 l
-2888 5319 l
-2884 5319 l
-2879 5319 l
-2877 5321 l
-2875 5323 l
-2870 5323 l
-2866 5323 l
-S
-2826 2571 m
-2830 2571 l
-2835 2571 l
-2837 2573 l
-2839 2575 l
-2844 2575 l
-2848 2575 l
-2853 2575 l
-2857 2575 l
-2862 2575 l
-2866 2575 l
-S
-2826 5328 m
-2830 5328 l
-2835 5328 l
-2837 5326 l
-2839 5323 l
-2844 5323 l
-2848 5323 l
-2853 5323 l
-2857 5323 l
-2862 5323 l
-2866 5323 l
-S
-2786 2571 m
-2790 2571 l
-2794 2571 l
-2799 2571 l
-2803 2571 l
-2808 2571 l
-2812 2571 l
-2817 2571 l
-2821 2571 l
-2826 2571 l
-S
-2786 5328 m
-2790 5328 l
-2794 5328 l
-2799 5328 l
-2803 5328 l
-2808 5328 l
-2812 5328 l
-2817 5328 l
-2821 5328 l
-2826 5328 l
-S
-2745 2566 m
-2750 2566 l
-2754 2566 l
-2759 2566 l
-2763 2566 l
-2768 2566 l
-2772 2566 l
-2774 2568 l
-2777 2571 l
-2781 2571 l
-2786 2571 l
-S
-2745 5332 m
-2750 5332 l
-2754 5332 l
-2759 5332 l
-2763 5332 l
-2768 5332 l
-2772 5332 l
-2774 5330 l
-2777 5328 l
-2781 5328 l
-2786 5328 l
-S
-2705 2566 m
-2710 2566 l
-2714 2566 l
-2719 2566 l
-2723 2566 l
-2727 2566 l
-2732 2566 l
-2736 2566 l
-2741 2566 l
-2745 2566 l
-S
-2705 5332 m
-2710 5332 l
-2714 5332 l
-2719 5332 l
-2723 5332 l
-2727 5332 l
-2732 5332 l
-2736 5332 l
-2741 5332 l
-2745 5332 l
-S
-2665 2566 m
-2669 2566 l
-2674 2566 l
-2678 2566 l
-2683 2566 l
-2687 2566 l
-2692 2566 l
-2696 2566 l
-2701 2566 l
-2705 2566 l
-S
-2665 5332 m
-2669 5332 l
-2674 5332 l
-2678 5332 l
-2683 5332 l
-2687 5332 l
-2692 5332 l
-2696 5332 l
-2701 5332 l
-2705 5332 l
-S
-2625 2571 m
-2629 2571 l
-2634 2571 l
-2636 2568 l
-2638 2566 l
-2643 2566 l
-2647 2566 l
-2651 2566 l
-2656 2566 l
-2660 2566 l
-2665 2566 l
-S
-2625 5328 m
-2629 5328 l
-2634 5328 l
-2636 5330 l
-2638 5332 l
-2643 5332 l
-2647 5332 l
-2651 5332 l
-2656 5332 l
-2660 5332 l
-2665 5332 l
-S
-2584 2571 m
-2589 2571 l
-2593 2571 l
-2598 2571 l
-2602 2571 l
-2607 2571 l
-2611 2571 l
-2616 2571 l
-2620 2571 l
-2625 2571 l
-S
-2584 5328 m
-2589 5328 l
-2593 5328 l
-2598 5328 l
-2602 5328 l
-2607 5328 l
-2611 5328 l
-2616 5328 l
-2620 5328 l
-2625 5328 l
-S
-2544 2575 m
-2549 2575 l
-2553 2575 l
-2558 2575 l
-2562 2575 l
-2567 2575 l
-2571 2575 l
-2573 2573 l
-2576 2571 l
-2580 2571 l
-2584 2571 l
-S
-2544 5323 m
-2549 5323 l
-2553 5323 l
-2558 5323 l
-2562 5323 l
-2567 5323 l
-2571 5323 l
-2573 5326 l
-2576 5328 l
-2580 5328 l
-2584 5328 l
-S
-2504 2579 m
-2508 2579 l
-2513 2579 l
-2517 2579 l
-2522 2579 l
-2526 2579 l
-2531 2579 l
-2533 2577 l
-2535 2575 l
-2540 2575 l
-2544 2575 l
-S
-2504 5319 m
-2508 5319 l
-2513 5319 l
-2517 5319 l
-2522 5319 l
-2526 5319 l
-2531 5319 l
-2533 5321 l
-2535 5323 l
-2540 5323 l
-2544 5323 l
-S
-2502 2582 m
-2504 2579 l
-S
-2464 2588 m
-2468 2588 l
-2473 2588 l
-2475 2586 l
-2477 2584 l
-2482 2584 l
-2486 2584 l
-2491 2584 l
-2495 2584 l
-2500 2584 l
-2502 2582 l
-S
-2464 5310 m
-2468 5310 l
-2473 5310 l
-2475 5312 l
-2477 5314 l
-2482 5314 l
-2486 5314 l
-2491 5314 l
-2495 5314 l
-2500 5314 l
-2502 5317 l
-S
-2504 5319 m
-2502 5317 l
-S
-2424 2597 m
-2426 2595 l
-2428 2593 l
-2433 2593 l
-2437 2593 l
-2441 2593 l
-2446 2593 l
-2448 2591 l
-2450 2588 l
-2455 2588 l
-2459 2588 l
-2464 2588 l
-S
-2424 5301 m
-2426 5303 l
-2428 5306 l
-2433 5306 l
-2437 5306 l
-2441 5306 l
-2446 5306 l
-2448 5308 l
-2450 5310 l
-2455 5310 l
-2459 5310 l
-2464 5310 l
-S
-2383 2606 m
-2386 2604 l
-2388 2602 l
-2392 2602 l
-2397 2602 l
-2401 2602 l
-2403 2600 l
-2406 2597 l
-2410 2597 l
-2415 2597 l
-2419 2597 l
-2424 2597 l
-S
-2383 5292 m
-2386 5294 l
-2388 5297 l
-2392 5297 l
-2397 5297 l
-2401 5297 l
-2403 5299 l
-2406 5301 l
-2410 5301 l
-2415 5301 l
-2419 5301 l
-2424 5301 l
-S
-2343 2615 m
-2348 2615 l
-2350 2613 l
-2352 2611 l
-2357 2611 l
-2361 2611 l
-2365 2611 l
-2368 2609 l
-2370 2606 l
-2374 2606 l
-2379 2606 l
-2383 2606 l
-S
-2343 5283 m
-2348 5283 l
-2350 5285 l
-2352 5288 l
-2357 5288 l
-2361 5288 l
-2365 5288 l
-2368 5290 l
-2370 5292 l
-2374 5292 l
-2379 5292 l
-2383 5292 l
-S
-2319 2622 m
-2321 2620 l
-2325 2620 l
-2330 2620 l
-2332 2617 l
-2334 2615 l
-2339 2615 l
-2343 2615 l
-S
-2303 2624 m
-2307 2624 l
-2312 2624 l
-2316 2624 l
-2319 2622 l
-S
-2303 5274 m
-2307 5274 l
-2312 5274 l
-2316 5274 l
-2319 5277 l
-S
-2319 5277 m
-2321 5279 l
-2325 5279 l
-2330 5279 l
-2332 5281 l
-2334 5283 l
-2339 5283 l
-2343 5283 l
-S
-2303 2624 m
-2301 2626 l
-2298 2629 l
-2294 2629 l
-2290 2629 l
-2287 2631 l
-2285 2633 l
-2281 2633 l
-2276 2633 l
-2274 2635 l
-2272 2638 l
-2267 2638 l
-2263 2638 l
-S
-2263 5261 m
-2267 5261 l
-2272 5261 l
-2274 5263 l
-2276 5265 l
-2281 5265 l
-2285 5265 l
-2287 5268 l
-2290 5270 l
-2294 5270 l
-2298 5270 l
-2301 5272 l
-2303 5274 l
-S
-2222 2655 m
-2225 2653 l
-2227 2651 l
-2231 2651 l
-2234 2649 l
-2236 2647 l
-2240 2647 l
-2245 2647 l
-2247 2644 l
-2249 2642 l
-2254 2642 l
-2258 2642 l
-2260 2640 l
-2263 2638 l
-S
-2222 5243 m
-2225 5245 l
-2227 5247 l
-2231 5247 l
-2234 5250 l
-2236 5252 l
-2240 5252 l
-2245 5252 l
-2247 5254 l
-2249 5256 l
-2254 5256 l
-2258 5256 l
-2260 5259 l
-2263 5261 l
-S
-2198 2662 m
-2200 2660 l
-2205 2660 l
-2209 2660 l
-2211 2658 l
-2214 2655 l
-2218 2655 l
-2222 2655 l
-S
-2182 2669 m
-2187 2669 l
-2189 2667 l
-2191 2664 l
-2196 2664 l
-2198 2662 l
-S
-2182 5230 m
-2187 5230 l
-2189 5232 l
-2191 5234 l
-2196 5234 l
-2198 5236 l
-S
-2198 5236 m
-2200 5239 l
-2205 5239 l
-2209 5239 l
-2211 5241 l
-2214 5243 l
-2218 5243 l
-2222 5243 l
-S
-2142 2687 m
-2144 2685 l
-2147 2682 l
-2151 2682 l
-2155 2682 l
-2158 2680 l
-2160 2678 l
-2164 2678 l
-2167 2676 l
-2169 2673 l
-2173 2673 l
-2176 2671 l
-2178 2669 l
-2182 2669 l
-S
-2142 5212 m
-2144 5214 l
-2147 5216 l
-2151 5216 l
-2155 5216 l
-2158 5218 l
-2160 5221 l
-2164 5221 l
-2167 5223 l
-2169 5225 l
-2173 5225 l
-2176 5227 l
-2178 5230 l
-2182 5230 l
-S
-2109 2702 m
-2111 2700 l
-2115 2700 l
-2117 2698 l
-2120 2696 l
-2124 2696 l
-2126 2693 l
-2129 2691 l
-2133 2691 l
-2135 2689 l
-2138 2687 l
-2142 2687 l
-S
-2102 2705 m
-2106 2705 l
-2109 2702 l
-S
-2102 5194 m
-2106 5194 l
-2109 5196 l
-S
-2109 5196 m
-2111 5198 l
-2115 5198 l
-2117 5201 l
-2120 5203 l
-2124 5203 l
-2126 5205 l
-2129 5207 l
-2133 5207 l
-2135 5209 l
-2138 5212 l
-2142 5212 l
-S
-2102 2705 m
-2100 2707 l
-2097 2709 l
-2093 2709 l
-2091 2711 l
-2088 2714 l
-2084 2714 l
-2082 2716 l
-2079 2718 l
-2075 2718 l
-2073 2720 l
-2071 2723 l
-2066 2723 l
-2064 2725 l
-2062 2727 l
-S
-2062 5171 m
-2064 5174 l
-2066 5176 l
-2071 5176 l
-2073 5178 l
-2075 5180 l
-2079 5180 l
-2082 5183 l
-2084 5185 l
-2088 5185 l
-2091 5187 l
-2093 5189 l
-2097 5189 l
-2100 5192 l
-2102 5194 l
-S
-2028 2743 m
-2030 2740 l
-2035 2740 l
-2037 2738 l
-2039 2736 l
-2044 2736 l
-2046 2734 l
-2048 2731 l
-2053 2731 l
-2055 2729 l
-2057 2727 l
-2062 2727 l
-S
-2021 2749 m
-2024 2747 l
-2026 2745 l
-2028 2743 l
-S
-2021 5149 m
-2024 5151 l
-2026 5154 l
-2028 5156 l
-S
-2028 5156 m
-2030 5158 l
-2035 5158 l
-2037 5160 l
-2039 5163 l
-2044 5163 l
-2046 5165 l
-2048 5167 l
-2053 5167 l
-2055 5169 l
-2057 5171 l
-2062 5171 l
-S
-1981 2772 m
-1983 2769 l
-1986 2767 l
-1990 2767 l
-1992 2765 l
-1995 2763 l
-1997 2760 l
-1999 2758 l
-2003 2758 l
-2006 2756 l
-2008 2754 l
-2012 2754 l
-2015 2752 l
-2017 2749 l
-2021 2749 l
-S
-1981 5127 m
-1983 5129 l
-1986 5131 l
-1990 5131 l
-1992 5133 l
-1995 5136 l
-1997 5138 l
-1999 5140 l
-2003 5140 l
-2006 5142 l
-2008 5145 l
-2012 5145 l
-2015 5147 l
-2017 5149 l
-2021 5149 l
-S
-1961 2783 m
-1963 2781 l
-1968 2781 l
-1970 2778 l
-1972 2776 l
-1977 2776 l
-1979 2774 l
-1981 2772 l
-S
-1941 2798 m
-1943 2796 l
-1945 2794 l
-1948 2792 l
-1950 2790 l
-1954 2790 l
-1957 2787 l
-1959 2785 l
-1961 2783 l
-S
-1941 5100 m
-1943 5102 l
-1945 5104 l
-1948 5107 l
-1950 5109 l
-1954 5109 l
-1957 5111 l
-1959 5113 l
-1961 5116 l
-S
-1961 5116 m
-1963 5118 l
-1968 5118 l
-1970 5120 l
-1972 5122 l
-1977 5122 l
-1979 5125 l
-1981 5127 l
-S
-1903 2823 m
-1905 2821 l
-1907 2819 l
-1910 2816 l
-1914 2816 l
-1916 2814 l
-1919 2812 l
-1921 2810 l
-1923 2807 l
-1928 2807 l
-1930 2805 l
-1932 2803 l
-1934 2801 l
-1936 2798 l
-1941 2798 l
-S
-1901 2825 m
-1903 2823 l
-S
-1901 5073 m
-1903 5075 l
-S
-1903 5075 m
-1905 5078 l
-1907 5080 l
-1910 5082 l
-1914 5082 l
-1916 5084 l
-1919 5087 l
-1921 5089 l
-1923 5091 l
-1928 5091 l
-1930 5093 l
-1932 5096 l
-1934 5098 l
-1936 5100 l
-1941 5100 l
-S
-1901 2825 m
-1898 2828 l
-1896 2830 l
-1892 2830 l
-1890 2832 l
-1887 2834 l
-1885 2836 l
-1883 2839 l
-1881 2841 l
-1878 2843 l
-1874 2843 l
-1872 2845 l
-1869 2848 l
-1867 2850 l
-1865 2852 l
-1863 2854 l
-1860 2857 l
-S
-1860 5042 m
-1863 5044 l
-1865 5046 l
-1867 5049 l
-1869 5051 l
-1872 5053 l
-1874 5055 l
-1878 5055 l
-1881 5058 l
-1883 5060 l
-1885 5062 l
-1887 5064 l
-1890 5066 l
-1892 5069 l
-1896 5069 l
-1898 5071 l
-1901 5073 l
-S
-1849 2863 m
-1852 2861 l
-1854 2859 l
-1856 2857 l
-1860 2857 l
-S
-1820 2888 m
-1823 2886 l
-1825 2883 l
-1827 2881 l
-1829 2879 l
-1831 2877 l
-1834 2874 l
-1836 2872 l
-1838 2870 l
-1843 2870 l
-1845 2868 l
-1847 2866 l
-1849 2863 l
-S
-1820 5011 m
-1823 5013 l
-1825 5015 l
-1827 5017 l
-1829 5020 l
-1831 5022 l
-1834 5024 l
-1836 5026 l
-1838 5028 l
-1843 5028 l
-1845 5031 l
-1847 5033 l
-1849 5035 l
-S
-1849 5035 m
-1852 5037 l
-1854 5040 l
-1856 5042 l
-1860 5042 l
-S
-1800 2903 m
-1802 2901 l
-1805 2899 l
-1807 2897 l
-1809 2895 l
-1811 2892 l
-1816 2892 l
-1818 2890 l
-1820 2888 l
-S
-1780 2924 m
-1782 2921 l
-1785 2919 l
-1787 2917 l
-1789 2915 l
-1791 2912 l
-1793 2910 l
-1796 2908 l
-1798 2906 l
-1800 2903 l
-S
-1780 4975 m
-1782 4977 l
-1785 4979 l
-1787 4982 l
-1789 4984 l
-1791 4986 l
-1793 4988 l
-1796 4990 l
-1798 4993 l
-1800 4995 l
-S
-1800 4995 m
-1802 4997 l
-1805 4999 l
-1807 5002 l
-1809 5004 l
-1811 5006 l
-1816 5006 l
-1818 5008 l
-1820 5011 l
-S
-1755 2944 m
-1758 2941 l
-1760 2939 l
-1762 2937 l
-1764 2935 l
-1767 2933 l
-1769 2930 l
-1771 2928 l
-1773 2926 l
-1776 2924 l
-1780 2924 l
-S
-1740 2959 m
-1742 2957 l
-1744 2955 l
-1747 2953 l
-1749 2950 l
-1751 2948 l
-1753 2946 l
-1755 2944 l
-S
-1740 4939 m
-1742 4941 l
-1744 4944 l
-1747 4946 l
-1749 4948 l
-1751 4950 l
-1753 4953 l
-1755 4955 l
-S
-1755 4955 m
-1758 4957 l
-1760 4959 l
-1762 4961 l
-1764 4964 l
-1767 4966 l
-1769 4968 l
-1771 4970 l
-1773 4973 l
-1776 4975 l
-1780 4975 l
-S
-1715 2984 m
-1717 2982 l
-1720 2979 l
-1722 2977 l
-1724 2975 l
-1726 2973 l
-1729 2971 l
-1731 2968 l
-1733 2966 l
-1735 2964 l
-1738 2962 l
-1740 2959 l
-S
-1700 3000 m
-1702 2997 l
-1704 2995 l
-1706 2993 l
-1709 2991 l
-1711 2988 l
-1713 2986 l
-1715 2984 l
-S
-1700 4899 m
-1702 4901 l
-1704 4903 l
-1706 4906 l
-1709 4908 l
-1711 4910 l
-1713 4912 l
-1715 4915 l
-S
-1715 4915 m
-1717 4917 l
-1720 4919 l
-1722 4921 l
-1724 4923 l
-1726 4926 l
-1729 4928 l
-1731 4930 l
-1733 4932 l
-1735 4935 l
-1738 4937 l
-1740 4939 l
-S
-1679 3024 m
-1679 3020 l
-1682 3017 l
-1684 3015 l
-1686 3013 l
-1688 3011 l
-1691 3009 l
-1693 3006 l
-1695 3004 l
-1697 3002 l
-1700 3000 l
-S
-1659 3044 m
-1662 3042 l
-1664 3040 l
-1666 3038 l
-1668 3035 l
-1671 3033 l
-1673 3031 l
-1675 3029 l
-1677 3026 l
-1679 3024 l
-S
-1659 4854 m
-1662 4856 l
-1664 4859 l
-1666 4861 l
-1668 4863 l
-1671 4865 l
-1673 4868 l
-1675 4870 l
-1677 4872 l
-1679 4874 l
-S
-1679 4874 m
-1679 4879 l
-1682 4881 l
-1684 4883 l
-1686 4885 l
-1688 4888 l
-1691 4890 l
-1693 4892 l
-1695 4894 l
-1697 4897 l
-1700 4899 l
-S
-1644 3064 m
-1646 3062 l
-1648 3060 l
-1648 3055 l
-1650 3053 l
-1653 3051 l
-1655 3049 l
-1657 3047 l
-1659 3044 l
-S
-1619 3093 m
-1621 3091 l
-1624 3089 l
-1626 3087 l
-1626 3082 l
-1628 3080 l
-1630 3078 l
-1633 3076 l
-1635 3073 l
-1637 3071 l
-1639 3069 l
-1642 3067 l
-1644 3064 l
-S
-1619 4805 m
-1621 4807 l
-1624 4810 l
-1626 4812 l
-1626 4816 l
-1628 4818 l
-1630 4821 l
-1633 4823 l
-1635 4825 l
-1637 4827 l
-1639 4830 l
-1642 4832 l
-1644 4834 l
-S
-1644 4834 m
-1646 4836 l
-1648 4839 l
-1648 4843 l
-1650 4845 l
-1653 4847 l
-1655 4850 l
-1657 4852 l
-1659 4854 l
-S
-1612 3105 m
-1612 3100 l
-1615 3098 l
-1617 3096 l
-1619 3093 l
-S
-1612 3105 m
-1610 3107 l
-1608 3109 l
-1606 3111 l
-1604 3114 l
-1601 3116 l
-1599 3118 l
-1599 3122 l
-1597 3125 l
-1595 3127 l
-1592 3129 l
-1590 3131 l
-1588 3134 l
-1586 3136 l
-1586 3140 l
-1583 3143 l
-1581 3145 l
-S
-1579 3147 m
-1581 3145 l
-S
-1579 4751 m
-1581 4754 l
-S
-1581 4754 m
-1583 4756 l
-1586 4758 l
-1586 4763 l
-1588 4765 l
-1590 4767 l
-1592 4769 l
-1595 4772 l
-1597 4774 l
-1599 4776 l
-1599 4780 l
-1601 4783 l
-1604 4785 l
-1606 4787 l
-1608 4789 l
-1610 4792 l
-1612 4794 l
-S
-1612 4794 m
-1612 4798 l
-1615 4801 l
-1617 4803 l
-1619 4805 l
-S
-1579 3147 m
-1577 3149 l
-1574 3152 l
-1572 3154 l
-1572 3158 l
-1570 3160 l
-1568 3163 l
-1566 3165 l
-1563 3167 l
-1563 3172 l
-1561 3174 l
-1559 3176 l
-1557 3178 l
-1554 3181 l
-1554 3185 l
-S
-1539 3205 m
-1541 3203 l
-1543 3201 l
-1545 3198 l
-1545 3194 l
-1548 3192 l
-1550 3190 l
-1552 3187 l
-1554 3185 l
-S
-1539 4693 m
-1541 4696 l
-1543 4698 l
-1545 4700 l
-1545 4704 l
-1548 4707 l
-1550 4709 l
-1552 4711 l
-1554 4713 l
-S
-1554 4713 m
-1554 4718 l
-1557 4720 l
-1559 4722 l
-1561 4725 l
-1563 4727 l
-1563 4731 l
-1566 4734 l
-1568 4736 l
-1570 4738 l
-1572 4740 l
-1572 4745 l
-1574 4747 l
-1577 4749 l
-1579 4751 l
-S
-1528 3225 m
-1530 3223 l
-1532 3221 l
-1532 3216 l
-1534 3214 l
-1536 3212 l
-1536 3207 l
-1539 3205 l
-S
-1528 3225 m
-1525 3227 l
-1523 3230 l
-1523 3234 l
-1521 3236 l
-1519 3239 l
-1516 3241 l
-1514 3243 l
-1514 3248 l
-1512 3250 l
-1510 3252 l
-1510 3257 l
-1507 3259 l
-1505 3261 l
-1505 3265 l
-S
-1499 3272 m
-1501 3270 l
-1503 3268 l
-1505 3265 l
-S
-1499 4626 m
-1501 4629 l
-1503 4631 l
-1505 4633 l
-S
-1505 4633 m
-1505 4637 l
-1507 4640 l
-1510 4642 l
-1510 4646 l
-1512 4649 l
-1514 4651 l
-1514 4655 l
-1516 4658 l
-1519 4660 l
-1521 4662 l
-1523 4664 l
-1523 4669 l
-1525 4671 l
-1528 4673 l
-S
-1528 4673 m
-1530 4675 l
-1532 4678 l
-1532 4682 l
-1534 4684 l
-1536 4687 l
-1536 4691 l
-1539 4693 l
-S
-1483 3306 m
-1483 3301 l
-1485 3299 l
-1487 3297 l
-1487 3292 l
-1490 3290 l
-1492 3288 l
-1492 3283 l
-1494 3281 l
-1496 3279 l
-1496 3274 l
-1499 3272 l
-S
-1483 3306 m
-1481 3308 l
-1478 3310 l
-1478 3315 l
-1476 3317 l
-1474 3319 l
-1474 3324 l
-1472 3326 l
-1469 3328 l
-1469 3333 l
-1467 3335 l
-1465 3337 l
-1465 3341 l
-1463 3344 l
-1461 3346 l
-S
-1458 3353 m
-1461 3350 l
-1461 3346 l
-S
-1458 4546 m
-1461 4548 l
-1461 4553 l
-S
-1461 4553 m
-1463 4555 l
-1465 4557 l
-1465 4561 l
-1467 4564 l
-1469 4566 l
-1469 4570 l
-1472 4573 l
-1474 4575 l
-1474 4579 l
-1476 4582 l
-1478 4584 l
-1478 4588 l
-1481 4591 l
-1483 4593 l
-S
-1483 4593 m
-1483 4597 l
-1485 4599 l
-1487 4602 l
-1487 4606 l
-1490 4608 l
-1492 4611 l
-1492 4615 l
-1494 4617 l
-1496 4620 l
-1496 4624 l
-1499 4626 l
-S
-1443 3386 m
-1443 3382 l
-1445 3379 l
-1447 3377 l
-1447 3373 l
-1449 3371 l
-1452 3368 l
-1452 3364 l
-1454 3362 l
-1456 3359 l
-1456 3355 l
-1458 3353 l
-S
-1443 3386 m
-1440 3388 l
-1438 3391 l
-1438 3395 l
-1438 3400 l
-1436 3402 l
-1434 3404 l
-1434 3408 l
-1431 3411 l
-1429 3413 l
-1429 3417 l
-1427 3420 l
-1425 3422 l
-1425 3426 l
-S
-1418 3442 m
-1420 3440 l
-1420 3435 l
-1423 3433 l
-1425 3431 l
-1425 3426 l
-S
-1418 4456 m
-1420 4459 l
-1420 4463 l
-1423 4465 l
-1425 4468 l
-1425 4472 l
-S
-1425 4472 m
-1425 4477 l
-1427 4479 l
-1429 4481 l
-1429 4486 l
-1431 4488 l
-1434 4490 l
-1434 4494 l
-1436 4497 l
-1438 4499 l
-1438 4503 l
-1438 4508 l
-1440 4510 l
-1443 4512 l
-S
-1443 4512 m
-1443 4517 l
-1445 4519 l
-1447 4521 l
-1447 4526 l
-1449 4528 l
-1452 4530 l
-1452 4535 l
-1454 4537 l
-1456 4539 l
-1456 4544 l
-1458 4546 l
-S
-1411 3467 m
-1411 3462 l
-1411 3458 l
-1414 3455 l
-1416 3453 l
-1416 3449 l
-1416 3444 l
-1418 3442 l
-S
-1411 3467 m
-1409 3469 l
-1407 3471 l
-1407 3476 l
-1405 3478 l
-1402 3480 l
-1402 3484 l
-1402 3489 l
-1400 3491 l
-1398 3493 l
-1398 3498 l
-1398 3502 l
-1396 3505 l
-1393 3507 l
-S
-1393 3507 m
-1393 3511 l
-1393 3516 l
-1391 3518 l
-1389 3520 l
-1389 3525 l
-1389 3529 l
-1387 3531 l
-1385 3534 l
-1385 3538 l
-1385 3543 l
-1382 3545 l
-1380 3547 l
-S
-1378 3563 m
-1380 3560 l
-1380 3556 l
-1380 3551 l
-1380 3547 l
-S
-1378 4336 m
-1380 4338 l
-1380 4342 l
-1380 4347 l
-1380 4351 l
-S
-1380 4351 m
-1382 4354 l
-1385 4356 l
-1385 4360 l
-1385 4365 l
-1387 4367 l
-1389 4369 l
-1389 4374 l
-1389 4378 l
-1391 4380 l
-1393 4383 l
-1393 4387 l
-1393 4392 l
-S
-1393 4392 m
-1396 4394 l
-1398 4396 l
-1398 4401 l
-1398 4405 l
-1400 4407 l
-1402 4410 l
-1402 4414 l
-1402 4418 l
-1405 4421 l
-1407 4423 l
-1407 4427 l
-1409 4430 l
-1411 4432 l
-S
-1411 4432 m
-1411 4436 l
-1411 4441 l
-1414 4443 l
-1416 4445 l
-1416 4450 l
-1416 4454 l
-1418 4456 l
-S
-1371 3587 m
-1371 3583 l
-1371 3578 l
-1373 3576 l
-1376 3574 l
-1376 3569 l
-1376 3565 l
-1378 3563 l
-S
-1371 3587 m
-1371 3592 l
-1369 3594 l
-1367 3596 l
-1367 3601 l
-1367 3605 l
-1367 3610 l
-1364 3612 l
-1362 3614 l
-1362 3619 l
-1362 3623 l
-1362 3627 l
-S
-1362 3627 m
-1360 3630 l
-1358 3632 l
-1358 3636 l
-1358 3641 l
-1358 3645 l
-1355 3648 l
-1353 3650 l
-1353 3654 l
-1353 3659 l
-1353 3663 l
-1353 3668 l
-S
-1353 3668 m
-1351 3670 l
-1349 3672 l
-1349 3677 l
-1349 3681 l
-1349 3686 l
-1349 3690 l
-1347 3692 l
-1344 3694 l
-1344 3699 l
-1344 3703 l
-1344 3708 l
-S
-1338 3746 m
-1340 3744 l
-1340 3739 l
-1340 3735 l
-1340 3730 l
-1340 3726 l
-1340 3721 l
-1342 3719 l
-1344 3717 l
-1344 3712 l
-1344 3708 l
-S
-1338 4153 m
-1340 4155 l
-1340 4159 l
-1340 4164 l
-1340 4168 l
-1340 4173 l
-1340 4177 l
-1342 4179 l
-1344 4182 l
-1344 4186 l
-1344 4191 l
-S
-1344 4191 m
-1344 4195 l
-1344 4199 l
-1344 4204 l
-1347 4206 l
-1349 4208 l
-1349 4213 l
-1349 4217 l
-1349 4222 l
-1349 4226 l
-1351 4229 l
-1353 4231 l
-S
-1353 4231 m
-1353 4235 l
-1353 4240 l
-1353 4244 l
-1353 4249 l
-1355 4251 l
-1358 4253 l
-1358 4258 l
-1358 4262 l
-1358 4267 l
-1360 4269 l
-1362 4271 l
-S
-1362 4271 m
-1362 4275 l
-1362 4280 l
-1362 4284 l
-1364 4287 l
-1367 4289 l
-1367 4293 l
-1367 4298 l
-1367 4302 l
-1369 4305 l
-1371 4307 l
-1371 4311 l
-S
-1371 4311 m
-1371 4316 l
-1371 4320 l
-1373 4322 l
-1376 4325 l
-1376 4329 l
-1376 4334 l
-1378 4336 l
-S
-1335 3748 m
-1338 3746 l
-S
-1335 3748 m
-1335 3753 l
-1335 3757 l
-1335 3762 l
-1335 3766 l
-1335 3770 l
-1335 3775 l
-1333 3777 l
-1331 3779 l
-1331 3784 l
-1331 3788 l
-S
-1331 3788 m
-1331 3793 l
-1331 3797 l
-1331 3802 l
-1331 3806 l
-1331 3811 l
-1331 3815 l
-1329 3817 l
-1326 3820 l
-1326 3824 l
-1326 3829 l
-S
-1326 3829 m
-1326 3833 l
-1326 3838 l
-1326 3842 l
-1326 3846 l
-1326 3851 l
-1326 3855 l
-1326 3860 l
-1326 3864 l
-1326 3869 l
-S
-1326 3869 m
-1326 3873 l
-1326 3878 l
-1324 3880 l
-1322 3882 l
-1322 3887 l
-1322 3891 l
-1322 3896 l
-1322 3900 l
-1322 3905 l
-1322 3909 l
-S
-1322 3909 m
-1322 3913 l
-1322 3918 l
-1322 3922 l
-1322 3927 l
-1322 3931 l
-1322 3936 l
-1322 3940 l
-1322 3945 l
-1322 3949 l
-S
-1322 3949 m
-1322 3954 l
-1322 3958 l
-1322 3963 l
-1322 3967 l
-1322 3972 l
-1322 3976 l
-1322 3981 l
-1322 3985 l
-1322 3989 l
-S
-1322 3989 m
-1322 3994 l
-1322 3998 l
-1322 4003 l
-1322 4007 l
-1322 4012 l
-1322 4016 l
-1324 4018 l
-1326 4021 l
-1326 4025 l
-1326 4030 l
-S
-1326 4030 m
-1326 4034 l
-1326 4039 l
-1326 4043 l
-1326 4048 l
-1326 4052 l
-1326 4056 l
-1326 4061 l
-1326 4065 l
-1326 4070 l
-S
-1326 4070 m
-1326 4074 l
-1326 4079 l
-1329 4081 l
-1331 4083 l
-1331 4088 l
-1331 4092 l
-1331 4097 l
-1331 4101 l
-1331 4106 l
-1331 4110 l
-S
-1331 4110 m
-1331 4115 l
-1331 4119 l
-1333 4121 l
-1335 4124 l
-1335 4128 l
-1335 4132 l
-1335 4137 l
-1335 4141 l
-1335 4146 l
-1335 4150 l
-S
-1338 4153 m
-1335 4150 l
-S
-1 g
-3879 3594 m
-3928 3594 l
-3928 3595 l
-3879 3595 l
-3842 3595 m
-3928 3595 l
-3928 3596 l
-3842 3596 l
-3806 3596 m
-3928 3596 l
-3928 3597 l
-3806 3597 l
-3806 3597 m
-3928 3597 l
-3928 3614 l
-3806 3614 l
-3806 3614 m
-3929 3614 l
-3929 3636 l
-3806 3636 l
-3807 3636 m
-3929 3636 l
-3929 3655 l
-3807 3655 l
-3807 3655 m
-3930 3655 l
-3930 3674 l
-3807 3674 l
-3808 3674 m
-3930 3674 l
-3930 3696 l
-3808 3696 l
-3808 3696 m
-3931 3696 l
-3931 3712 l
-3808 3712 l
-3809 3712 m
-3931 3712 l
-3931 3737 l
-3809 3737 l
-3809 3737 m
-3932 3737 l
-3932 3750 l
-3809 3750 l
-3810 3750 m
-3932 3750 l
-3932 3778 l
-3810 3778 l
-3810 3778 m
-3933 3778 l
-3933 3788 l
-3810 3788 l
-3811 3788 m
-3933 3788 l
-3933 3819 l
-3811 3819 l
-3811 3819 m
-3934 3819 l
-3934 3826 l
-3811 3826 l
-3812 3826 m
-3934 3826 l
-3934 3861 l
-3812 3861 l
-3812 3861 m
-3934 3861 l
-3934 3862 l
-3812 3862 l
-3812 3862 m
-3894 3862 l
-3894 3863 l
-3812 3863 l
-3812 3863 m
-3854 3863 l
-3854 3864 l
-3812 3864 l
-Y
-3927.5 3593.7 m
-3806 3597 l
-3813 3864 l
-3934 3861 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3824 3626 m
-3825 3672 l
-3858 3646 l
-3858 3658 l
-3863 3666 l
-3867 3670 l
-3879 3674 l
-3888 3674 l
-3900 3670 l
-3908 3661 l
-3912 3648 l
-3912 3636 l
-3907 3623 l
-3903 3619 l
-3895 3615 l
-S
-3826 3726 m
-3830 3713 l
-3843 3705 l
-3863 3700 l
-3876 3699 l
-3897 3703 l
-3910 3711 l
-3914 3724 l
-3914 3732 l
-3911 3745 l
-3898 3753 l
-3877 3758 l
-3865 3758 l
-3844 3755 l
-3831 3747 l
-3827 3734 l
-3826 3726 l
-S
-3829 3809 m
-3832 3797 l
-3845 3788 l
-3866 3783 l
-3878 3783 l
-3899 3787 l
-3912 3795 l
-3916 3807 l
-3917 3815 l
-3913 3828 l
-3900 3837 l
-3880 3841 l
-3867 3842 l
-3846 3838 l
-3833 3830 l
-3829 3818 l
-3829 3809 l
-S
-1 g
-2463 2687 m
-2467 2687 l
-2467 2688 l
-2463 2688 l
-2460 2688 m
-2467 2688 l
-2467 2689 l
-2460 2689 l
-2458 2689 m
-2468 2689 l
-2468 2690 l
-2458 2690 l
-2455 2690 m
-2468 2690 l
-2468 2691 l
-2455 2691 l
-2453 2691 m
-2468 2691 l
-2468 2692 l
-2453 2692 l
-2450 2692 m
-2469 2692 l
-2469 2693 l
-2450 2693 l
-2448 2693 m
-2469 2693 l
-2469 2694 l
-2448 2694 l
-2445 2694 m
-2470 2694 l
-2470 2695 l
-2445 2695 l
-2442 2695 m
-2470 2695 l
-2470 2696 l
-2442 2696 l
-2440 2696 m
-2470 2696 l
-2470 2697 l
-2440 2697 l
-2437 2697 m
-2471 2697 l
-2471 2698 l
-2437 2698 l
-2435 2698 m
-2471 2698 l
-2471 2699 l
-2435 2699 l
-2432 2699 m
-2472 2699 l
-2472 2700 l
-2432 2700 l
-2430 2700 m
-2472 2700 l
-2472 2701 l
-2430 2701 l
-2427 2701 m
-2472 2701 l
-2472 2702 l
-2427 2702 l
-2424 2702 m
-2473 2702 l
-2473 2703 l
-2424 2703 l
-2422 2703 m
-2473 2703 l
-2473 2704 l
-2422 2704 l
-2419 2704 m
-2473 2704 l
-2473 2705 l
-2419 2705 l
-2417 2705 m
-2474 2705 l
-2474 2706 l
-2417 2706 l
-2414 2706 m
-2474 2706 l
-2474 2707 l
-2414 2707 l
-2412 2707 m
-2475 2707 l
-2475 2708 l
-2412 2708 l
-2409 2708 m
-2475 2708 l
-2475 2709 l
-2409 2709 l
-2406 2709 m
-2475 2709 l
-2475 2710 l
-2406 2710 l
-2404 2710 m
-2476 2710 l
-2476 2711 l
-2404 2711 l
-2401 2711 m
-2476 2711 l
-2476 2712 l
-2401 2712 l
-2399 2712 m
-2477 2712 l
-2477 2713 l
-2399 2713 l
-2396 2713 m
-2477 2713 l
-2477 2714 l
-2396 2714 l
-2394 2714 m
-2477 2714 l
-2477 2715 l
-2394 2715 l
-2391 2715 m
-2478 2715 l
-2478 2716 l
-2391 2716 l
-2388 2716 m
-2478 2716 l
-2478 2717 l
-2388 2717 l
-2386 2717 m
-2479 2717 l
-2479 2718 l
-2386 2718 l
-2383 2718 m
-2479 2718 l
-2479 2719 l
-2383 2719 l
-2381 2719 m
-2479 2719 l
-2479 2720 l
-2381 2720 l
-2378 2720 m
-2480 2720 l
-2480 2721 l
-2378 2721 l
-2376 2721 m
-2480 2721 l
-2480 2722 l
-2376 2722 l
-2373 2722 m
-2480 2722 l
-2480 2723 l
-2373 2723 l
-2371 2723 m
-2481 2723 l
-2481 2724 l
-2371 2724 l
-2368 2724 m
-2481 2724 l
-2481 2725 l
-2368 2725 l
-2365 2725 m
-2482 2725 l
-2482 2726 l
-2365 2726 l
-2363 2726 m
-2482 2726 l
-2482 2727 l
-2363 2727 l
-2360 2727 m
-2482 2727 l
-2482 2728 l
-2360 2728 l
-2358 2728 m
-2483 2728 l
-2483 2729 l
-2358 2729 l
-2355 2729 m
-2483 2729 l
-2483 2730 l
-2355 2730 l
-2353 2730 m
-2484 2730 l
-2484 2731 l
-2353 2731 l
-2350 2731 m
-2484 2731 l
-2484 2732 l
-2350 2732 l
-2347 2732 m
-2484 2732 l
-2484 2733 l
-2347 2733 l
-2345 2733 m
-2485 2733 l
-2485 2734 l
-2345 2734 l
-2342 2734 m
-2485 2734 l
-2485 2735 l
-2342 2735 l
-2340 2735 m
-2486 2735 l
-2486 2736 l
-2340 2736 l
-2337 2736 m
-2486 2736 l
-2486 2737 l
-2337 2737 l
-2335 2737 m
-2486 2737 l
-2486 2738 l
-2335 2738 l
-2332 2738 m
-2487 2738 l
-2487 2739 l
-2332 2739 l
-2329 2739 m
-2487 2739 l
-2487 2740 l
-2329 2740 l
-2327 2740 m
-2487 2740 l
-2487 2741 l
-2327 2741 l
-2324 2741 m
-2488 2741 l
-2488 2742 l
-2324 2742 l
-2322 2742 m
-2488 2742 l
-2488 2743 l
-2322 2743 l
-2319 2743 m
-2489 2743 l
-2489 2744 l
-2319 2744 l
-2317 2744 m
-2489 2744 l
-2489 2745 l
-2317 2745 l
-2314 2745 m
-2489 2745 l
-2489 2746 l
-2314 2746 l
-2311 2746 m
-2490 2746 l
-2490 2747 l
-2311 2747 l
-2309 2747 m
-2490 2747 l
-2490 2748 l
-2309 2748 l
-2306 2748 m
-2491 2748 l
-2491 2749 l
-2306 2749 l
-2304 2749 m
-2491 2749 l
-2491 2750 l
-2304 2750 l
-2301 2750 m
-2491 2750 l
-2491 2751 l
-2301 2751 l
-2299 2751 m
-2492 2751 l
-2492 2752 l
-2299 2752 l
-2296 2752 m
-2492 2752 l
-2492 2753 l
-2296 2753 l
-2294 2753 m
-2493 2753 l
-2493 2754 l
-2294 2754 l
-2291 2754 m
-2493 2754 l
-2493 2755 l
-2291 2755 l
-2288 2755 m
-2493 2755 l
-2493 2756 l
-2288 2756 l
-2286 2756 m
-2494 2756 l
-2494 2757 l
-2286 2757 l
-2283 2757 m
-2494 2757 l
-2494 2758 l
-2283 2758 l
-2281 2758 m
-2494 2758 l
-2494 2759 l
-2281 2759 l
-2278 2759 m
-2495 2759 l
-2495 2760 l
-2278 2760 l
-2276 2760 m
-2495 2760 l
-2495 2761 l
-2276 2761 l
-2273 2761 m
-2496 2761 l
-2496 2762 l
-2273 2762 l
-2270 2762 m
-2496 2762 l
-2496 2763 l
-2270 2763 l
-2268 2763 m
-2496 2763 l
-2496 2764 l
-2268 2764 l
-2265 2764 m
-2497 2764 l
-2497 2765 l
-2265 2765 l
-2263 2765 m
-2497 2765 l
-2497 2766 l
-2263 2766 l
-2260 2766 m
-2498 2766 l
-2498 2767 l
-2260 2767 l
-2258 2767 m
-2498 2767 l
-2498 2768 l
-2258 2768 l
-2255 2768 m
-2498 2768 l
-2498 2769 l
-2255 2769 l
-2252 2769 m
-2499 2769 l
-2499 2770 l
-2252 2770 l
-2250 2770 m
-2499 2770 l
-2499 2771 l
-2250 2771 l
-2247 2771 m
-2500 2771 l
-2500 2772 l
-2247 2772 l
-2245 2772 m
-2500 2772 l
-2500 2773 l
-2245 2773 l
-2242 2773 m
-2500 2773 l
-2500 2774 l
-2242 2774 l
-2240 2774 m
-2501 2774 l
-2501 2775 l
-2240 2775 l
-2237 2775 m
-2501 2775 l
-2501 2776 l
-2237 2776 l
-2234 2776 m
-2501 2776 l
-2501 2777 l
-2234 2777 l
-2232 2777 m
-2502 2777 l
-2502 2778 l
-2232 2778 l
-2229 2778 m
-2502 2778 l
-2502 2779 l
-2229 2779 l
-2227 2779 m
-2503 2779 l
-2503 2780 l
-2227 2780 l
-2224 2780 m
-2503 2780 l
-2503 2781 l
-2224 2781 l
-2222 2781 m
-2503 2781 l
-2503 2782 l
-2222 2782 l
-2219 2782 m
-2504 2782 l
-2504 2783 l
-2219 2783 l
-2217 2783 m
-2504 2783 l
-2504 2784 l
-2217 2784 l
-2217 2784 m
-2505 2784 l
-2505 2787 l
-2217 2787 l
-2218 2787 m
-2506 2787 l
-2506 2789 l
-2218 2789 l
-2218 2789 m
-2507 2789 l
-2507 2790 l
-2218 2790 l
-2219 2790 m
-2507 2790 l
-2507 2792 l
-2219 2792 l
-2220 2792 m
-2508 2792 l
-2508 2795 l
-2220 2795 l
-2221 2795 m
-2509 2795 l
-2509 2797 l
-2221 2797 l
-2222 2797 m
-2510 2797 l
-2510 2800 l
-2222 2800 l
-2223 2800 m
-2510 2800 l
-2510 2801 l
-2223 2801 l
-2223 2801 m
-2508 2801 l
-2508 2802 l
-2223 2802 l
-2224 2802 m
-2505 2802 l
-2505 2803 l
-2224 2803 l
-2224 2803 m
-2503 2803 l
-2503 2804 l
-2224 2804 l
-2224 2804 m
-2500 2804 l
-2500 2805 l
-2224 2805 l
-2225 2805 m
-2498 2805 l
-2498 2806 l
-2225 2806 l
-2225 2806 m
-2495 2806 l
-2495 2807 l
-2225 2807 l
-2225 2807 m
-2492 2807 l
-2492 2808 l
-2225 2808 l
-2226 2808 m
-2490 2808 l
-2490 2809 l
-2226 2809 l
-2226 2809 m
-2487 2809 l
-2487 2810 l
-2226 2810 l
-2227 2810 m
-2485 2810 l
-2485 2811 l
-2227 2811 l
-2227 2811 m
-2482 2811 l
-2482 2812 l
-2227 2812 l
-2227 2812 m
-2480 2812 l
-2480 2813 l
-2227 2813 l
-2228 2813 m
-2477 2813 l
-2477 2814 l
-2228 2814 l
-2228 2814 m
-2474 2814 l
-2474 2815 l
-2228 2815 l
-2229 2815 m
-2472 2815 l
-2472 2816 l
-2229 2816 l
-2229 2816 m
-2469 2816 l
-2469 2817 l
-2229 2817 l
-2229 2817 m
-2467 2817 l
-2467 2818 l
-2229 2818 l
-2230 2818 m
-2464 2818 l
-2464 2819 l
-2230 2819 l
-2230 2819 m
-2462 2819 l
-2462 2820 l
-2230 2820 l
-2231 2820 m
-2459 2820 l
-2459 2821 l
-2231 2821 l
-2231 2821 m
-2457 2821 l
-2457 2822 l
-2231 2822 l
-2231 2822 m
-2454 2822 l
-2454 2823 l
-2231 2823 l
-2232 2823 m
-2451 2823 l
-2451 2824 l
-2232 2824 l
-2232 2824 m
-2449 2824 l
-2449 2825 l
-2232 2825 l
-2232 2825 m
-2446 2825 l
-2446 2826 l
-2232 2826 l
-2233 2826 m
-2444 2826 l
-2444 2827 l
-2233 2827 l
-2233 2827 m
-2441 2827 l
-2441 2828 l
-2233 2828 l
-2234 2828 m
-2439 2828 l
-2439 2829 l
-2234 2829 l
-2234 2829 m
-2436 2829 l
-2436 2830 l
-2234 2830 l
-2234 2830 m
-2433 2830 l
-2433 2831 l
-2234 2831 l
-2235 2831 m
-2431 2831 l
-2431 2832 l
-2235 2832 l
-2235 2832 m
-2428 2832 l
-2428 2833 l
-2235 2833 l
-2236 2833 m
-2426 2833 l
-2426 2834 l
-2236 2834 l
-2236 2834 m
-2423 2834 l
-2423 2835 l
-2236 2835 l
-2236 2835 m
-2421 2835 l
-2421 2836 l
-2236 2836 l
-2237 2836 m
-2418 2836 l
-2418 2837 l
-2237 2837 l
-2237 2837 m
-2415 2837 l
-2415 2838 l
-2237 2838 l
-2238 2838 m
-2413 2838 l
-2413 2839 l
-2238 2839 l
-2238 2839 m
-2410 2839 l
-2410 2840 l
-2238 2840 l
-2238 2840 m
-2408 2840 l
-2408 2841 l
-2238 2841 l
-2239 2841 m
-2405 2841 l
-2405 2842 l
-2239 2842 l
-2239 2842 m
-2403 2842 l
-2403 2843 l
-2239 2843 l
-2239 2843 m
-2400 2843 l
-2400 2844 l
-2239 2844 l
-2240 2844 m
-2397 2844 l
-2397 2845 l
-2240 2845 l
-2240 2845 m
-2395 2845 l
-2395 2846 l
-2240 2846 l
-2241 2846 m
-2392 2846 l
-2392 2847 l
-2241 2847 l
-2241 2847 m
-2390 2847 l
-2390 2848 l
-2241 2848 l
-2241 2848 m
-2387 2848 l
-2387 2849 l
-2241 2849 l
-2242 2849 m
-2385 2849 l
-2385 2850 l
-2242 2850 l
-2242 2850 m
-2382 2850 l
-2382 2851 l
-2242 2851 l
-2243 2851 m
-2380 2851 l
-2380 2852 l
-2243 2852 l
-2243 2852 m
-2377 2852 l
-2377 2853 l
-2243 2853 l
-2243 2853 m
-2374 2853 l
-2374 2854 l
-2243 2854 l
-2244 2854 m
-2372 2854 l
-2372 2855 l
-2244 2855 l
-2244 2855 m
-2369 2855 l
-2369 2856 l
-2244 2856 l
-2245 2856 m
-2367 2856 l
-2367 2857 l
-2245 2857 l
-2245 2857 m
-2364 2857 l
-2364 2858 l
-2245 2858 l
-2245 2858 m
-2362 2858 l
-2362 2859 l
-2245 2859 l
-2246 2859 m
-2359 2859 l
-2359 2860 l
-2246 2860 l
-2246 2860 m
-2356 2860 l
-2356 2861 l
-2246 2861 l
-2246 2861 m
-2354 2861 l
-2354 2862 l
-2246 2862 l
-2247 2862 m
-2351 2862 l
-2351 2863 l
-2247 2863 l
-2247 2863 m
-2349 2863 l
-2349 2864 l
-2247 2864 l
-2248 2864 m
-2346 2864 l
-2346 2865 l
-2248 2865 l
-2248 2865 m
-2344 2865 l
-2344 2866 l
-2248 2866 l
-2248 2866 m
-2341 2866 l
-2341 2867 l
-2248 2867 l
-2249 2867 m
-2338 2867 l
-2338 2868 l
-2249 2868 l
-2249 2868 m
-2336 2868 l
-2336 2869 l
-2249 2869 l
-2250 2869 m
-2333 2869 l
-2333 2870 l
-2250 2870 l
-2250 2870 m
-2331 2870 l
-2331 2871 l
-2250 2871 l
-2250 2871 m
-2328 2871 l
-2328 2872 l
-2250 2872 l
-2251 2872 m
-2326 2872 l
-2326 2873 l
-2251 2873 l
-2251 2873 m
-2323 2873 l
-2323 2874 l
-2251 2874 l
-2252 2874 m
-2321 2874 l
-2321 2875 l
-2252 2875 l
-2252 2875 m
-2318 2875 l
-2318 2876 l
-2252 2876 l
-2252 2876 m
-2315 2876 l
-2315 2877 l
-2252 2877 l
-2253 2877 m
-2313 2877 l
-2313 2878 l
-2253 2878 l
-2253 2878 m
-2310 2878 l
-2310 2879 l
-2253 2879 l
-2253 2879 m
-2308 2879 l
-2308 2880 l
-2253 2880 l
-2254 2880 m
-2305 2880 l
-2305 2881 l
-2254 2881 l
-2254 2881 m
-2303 2881 l
-2303 2882 l
-2254 2882 l
-2255 2882 m
-2300 2882 l
-2300 2883 l
-2255 2883 l
-2255 2883 m
-2297 2883 l
-2297 2884 l
-2255 2884 l
-2255 2884 m
-2295 2884 l
-2295 2885 l
-2255 2885 l
-2256 2885 m
-2292 2885 l
-2292 2886 l
-2256 2886 l
-2256 2886 m
-2290 2886 l
-2290 2887 l
-2256 2887 l
-2257 2887 m
-2287 2887 l
-2287 2888 l
-2257 2888 l
-2257 2888 m
-2285 2888 l
-2285 2889 l
-2257 2889 l
-2257 2889 m
-2282 2889 l
-2282 2890 l
-2257 2890 l
-2258 2890 m
-2279 2890 l
-2279 2891 l
-2258 2891 l
-2258 2891 m
-2277 2891 l
-2277 2892 l
-2258 2892 l
-2259 2892 m
-2274 2892 l
-2274 2893 l
-2259 2893 l
-2259 2893 m
-2272 2893 l
-2272 2894 l
-2259 2894 l
-2259 2894 m
-2269 2894 l
-2269 2895 l
-2259 2895 l
-2260 2895 m
-2267 2895 l
-2267 2896 l
-2260 2896 l
-2260 2896 m
-2264 2896 l
-2264 2897 l
-2260 2897 l
-Y
-2509.9 2800 m
-2466 2687 l
-2217 2784 l
-2261 2897 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2456 2731 m
-2455 2727 l
-2448 2721 l
-2442 2719 l
-2433 2718 l
-2418 2724 l
-2411 2731 l
-2409 2736 l
-2408 2746 l
-2411 2753 l
-2418 2760 l
-2430 2768 l
-2484 2792 l
-2430 2813 l
-S
-2336 2756 m
-2396 2795 l
-2338 2818 l
-S
-2336 2756 m
-2368 2838 l
-S
-2274 2780 m
-2287 2780 l
-2299 2788 l
-2311 2806 l
-2315 2818 l
-2319 2839 l
-2316 2853 l
-2305 2862 l
-2298 2865 l
-2284 2866 l
-2272 2857 l
-2261 2839 l
-2256 2827 l
-2252 2806 l
-2256 2792 l
-2266 2783 l
-2274 2780 l
-S
-1 g
-1926 3331 m
-1931 3331 l
-1931 3332 l
-1926 3332 l
-1921 3332 m
-1932 3332 l
-1932 3333 l
-1921 3333 l
-1916 3333 m
-1932 3333 l
-1932 3334 l
-1916 3334 l
-1910 3334 m
-1932 3334 l
-1932 3335 l
-1910 3335 l
-1905 3335 m
-1932 3335 l
-1932 3336 l
-1905 3336 l
-1900 3336 m
-1932 3336 l
-1932 3337 l
-1900 3337 l
-1895 3337 m
-1932 3337 l
-1932 3338 l
-1895 3338 l
-1890 3338 m
-1933 3338 l
-1933 3339 l
-1890 3339 l
-1884 3339 m
-1933 3339 l
-1933 3340 l
-1884 3340 l
-1879 3340 m
-1933 3340 l
-1933 3341 l
-1879 3341 l
-1874 3341 m
-1933 3341 l
-1933 3342 l
-1874 3342 l
-1869 3342 m
-1933 3342 l
-1933 3343 l
-1869 3343 l
-1864 3343 m
-1934 3343 l
-1934 3344 l
-1864 3344 l
-1858 3344 m
-1934 3344 l
-1934 3345 l
-1858 3345 l
-1853 3345 m
-1934 3345 l
-1934 3346 l
-1853 3346 l
-1848 3346 m
-1934 3346 l
-1934 3347 l
-1848 3347 l
-1843 3347 m
-1934 3347 l
-1934 3348 l
-1843 3348 l
-1838 3348 m
-1935 3348 l
-1935 3349 l
-1838 3349 l
-1832 3349 m
-1935 3349 l
-1935 3350 l
-1832 3350 l
-1827 3350 m
-1935 3350 l
-1935 3351 l
-1827 3351 l
-1822 3351 m
-1935 3351 l
-1935 3352 l
-1822 3352 l
-1817 3352 m
-1935 3352 l
-1935 3353 l
-1817 3353 l
-1812 3353 m
-1936 3353 l
-1936 3354 l
-1812 3354 l
-1812 3354 m
-1936 3354 l
-1936 3359 l
-1812 3359 l
-1812 3359 m
-1937 3359 l
-1937 3360 l
-1812 3360 l
-1813 3360 m
-1937 3360 l
-1937 3364 l
-1813 3364 l
-1813 3364 m
-1938 3364 l
-1938 3365 l
-1813 3365 l
-1814 3365 m
-1938 3365 l
-1938 3369 l
-1814 3369 l
-1814 3369 m
-1939 3369 l
-1939 3370 l
-1814 3370 l
-1815 3370 m
-1939 3370 l
-1939 3375 l
-1815 3375 l
-1815 3375 m
-1940 3375 l
-1940 3376 l
-1815 3376 l
-1816 3376 m
-1940 3376 l
-1940 3380 l
-1816 3380 l
-1816 3380 m
-1941 3380 l
-1941 3381 l
-1816 3381 l
-1817 3381 m
-1941 3381 l
-1941 3385 l
-1817 3385 l
-1817 3385 m
-1942 3385 l
-1942 3386 l
-1817 3386 l
-1818 3386 m
-1942 3386 l
-1942 3390 l
-1818 3390 l
-1818 3390 m
-1943 3390 l
-1943 3392 l
-1818 3392 l
-1819 3392 m
-1943 3392 l
-1943 3396 l
-1819 3396 l
-1819 3396 m
-1944 3396 l
-1944 3397 l
-1819 3397 l
-1820 3397 m
-1944 3397 l
-1944 3401 l
-1820 3401 l
-1820 3401 m
-1945 3401 l
-1945 3402 l
-1820 3402 l
-1821 3402 m
-1945 3402 l
-1945 3406 l
-1821 3406 l
-1821 3406 m
-1946 3406 l
-1946 3408 l
-1821 3408 l
-1822 3408 m
-1946 3408 l
-1946 3412 l
-1822 3412 l
-1822 3412 m
-1947 3412 l
-1947 3413 l
-1822 3413 l
-1823 3413 m
-1947 3413 l
-1947 3417 l
-1823 3417 l
-1823 3417 m
-1948 3417 l
-1948 3418 l
-1823 3418 l
-1824 3418 m
-1948 3418 l
-1948 3422 l
-1824 3422 l
-1824 3422 m
-1949 3422 l
-1949 3424 l
-1824 3424 l
-1825 3424 m
-1949 3424 l
-1949 3427 l
-1825 3427 l
-1825 3427 m
-1950 3427 l
-1950 3429 l
-1825 3429 l
-1826 3429 m
-1950 3429 l
-1950 3433 l
-1826 3433 l
-1826 3433 m
-1951 3433 l
-1951 3434 l
-1826 3434 l
-1827 3434 m
-1951 3434 l
-1951 3438 l
-1827 3438 l
-1827 3438 m
-1952 3438 l
-1952 3440 l
-1827 3440 l
-1828 3440 m
-1952 3440 l
-1952 3443 l
-1828 3443 l
-1828 3443 m
-1953 3443 l
-1953 3445 l
-1828 3445 l
-1829 3445 m
-1953 3445 l
-1953 3448 l
-1829 3448 l
-1829 3448 m
-1954 3448 l
-1954 3450 l
-1829 3450 l
-1830 3450 m
-1954 3450 l
-1954 3454 l
-1830 3454 l
-1830 3454 m
-1955 3454 l
-1955 3456 l
-1830 3456 l
-1831 3456 m
-1955 3456 l
-1955 3459 l
-1831 3459 l
-1831 3459 m
-1956 3459 l
-1956 3461 l
-1831 3461 l
-1832 3461 m
-1956 3461 l
-1956 3464 l
-1832 3464 l
-1832 3464 m
-1957 3464 l
-1957 3466 l
-1832 3466 l
-1833 3466 m
-1957 3466 l
-1957 3470 l
-1833 3470 l
-1833 3470 m
-1958 3470 l
-1958 3472 l
-1833 3472 l
-1834 3472 m
-1958 3472 l
-1958 3475 l
-1834 3475 l
-1834 3475 m
-1959 3475 l
-1959 3477 l
-1834 3477 l
-1835 3477 m
-1959 3477 l
-1959 3480 l
-1835 3480 l
-1835 3480 m
-1960 3480 l
-1960 3482 l
-1835 3482 l
-1836 3482 m
-1960 3482 l
-1960 3485 l
-1836 3485 l
-1836 3485 m
-1961 3485 l
-1961 3487 l
-1836 3487 l
-1837 3487 m
-1961 3487 l
-1961 3491 l
-1837 3491 l
-1837 3491 m
-1962 3491 l
-1962 3493 l
-1837 3493 l
-1838 3493 m
-1962 3493 l
-1962 3496 l
-1838 3496 l
-1838 3496 m
-1963 3496 l
-1963 3498 l
-1838 3498 l
-1839 3498 m
-1963 3498 l
-1963 3501 l
-1839 3501 l
-1839 3501 m
-1964 3501 l
-1964 3503 l
-1839 3503 l
-1840 3503 m
-1964 3503 l
-1964 3507 l
-1840 3507 l
-1840 3507 m
-1965 3507 l
-1965 3509 l
-1840 3509 l
-1841 3509 m
-1965 3509 l
-1965 3512 l
-1841 3512 l
-1841 3512 m
-1966 3512 l
-1966 3514 l
-1841 3514 l
-1842 3514 m
-1966 3514 l
-1966 3517 l
-1842 3517 l
-1842 3517 m
-1967 3517 l
-1967 3519 l
-1842 3519 l
-1843 3519 m
-1967 3519 l
-1967 3522 l
-1843 3522 l
-1843 3522 m
-1968 3522 l
-1968 3525 l
-1843 3525 l
-1844 3525 m
-1968 3525 l
-1968 3528 l
-1844 3528 l
-1844 3528 m
-1969 3528 l
-1969 3530 l
-1844 3530 l
-1845 3530 m
-1969 3530 l
-1969 3533 l
-1845 3533 l
-1845 3533 m
-1970 3533 l
-1970 3535 l
-1845 3535 l
-1846 3535 m
-1970 3535 l
-1970 3538 l
-1846 3538 l
-1846 3538 m
-1971 3538 l
-1971 3541 l
-1846 3541 l
-1847 3541 m
-1971 3541 l
-1971 3544 l
-1847 3544 l
-1847 3544 m
-1972 3544 l
-1972 3546 l
-1847 3546 l
-1848 3546 m
-1972 3546 l
-1972 3549 l
-1848 3549 l
-1848 3549 m
-1973 3549 l
-1973 3551 l
-1848 3551 l
-1849 3551 m
-1973 3551 l
-1973 3554 l
-1849 3554 l
-1849 3554 m
-1974 3554 l
-1974 3557 l
-1849 3557 l
-1850 3557 m
-1974 3557 l
-1974 3559 l
-1850 3559 l
-1850 3559 m
-1975 3559 l
-1975 3562 l
-1850 3562 l
-1851 3562 m
-1975 3562 l
-1975 3565 l
-1851 3565 l
-1851 3565 m
-1976 3565 l
-1976 3567 l
-1851 3567 l
-1852 3567 m
-1976 3567 l
-1976 3570 l
-1852 3570 l
-1852 3570 m
-1977 3570 l
-1977 3573 l
-1852 3573 l
-1853 3573 m
-1977 3573 l
-1977 3575 l
-1853 3575 l
-1853 3575 m
-1978 3575 l
-1978 3578 l
-1853 3578 l
-1854 3578 m
-1978 3578 l
-1978 3581 l
-1854 3581 l
-1854 3581 m
-1978 3581 l
-1978 3582 l
-1854 3582 l
-1854 3582 m
-1973 3582 l
-1973 3583 l
-1854 3583 l
-1855 3583 m
-1968 3583 l
-1968 3584 l
-1855 3584 l
-1855 3584 m
-1963 3584 l
-1963 3585 l
-1855 3585 l
-1855 3585 m
-1958 3585 l
-1958 3586 l
-1855 3586 l
-1855 3586 m
-1953 3586 l
-1953 3587 l
-1855 3587 l
-1855 3587 m
-1947 3587 l
-1947 3588 l
-1855 3588 l
-1855 3588 m
-1942 3588 l
-1942 3589 l
-1855 3589 l
-1856 3589 m
-1937 3589 l
-1937 3590 l
-1856 3590 l
-1856 3590 m
-1932 3590 l
-1932 3591 l
-1856 3591 l
-1856 3591 m
-1927 3591 l
-1927 3592 l
-1856 3592 l
-1856 3592 m
-1922 3592 l
-1922 3593 l
-1856 3593 l
-1856 3593 m
-1916 3593 l
-1916 3594 l
-1856 3594 l
-1857 3594 m
-1911 3594 l
-1911 3595 l
-1857 3595 l
-1857 3595 m
-1906 3595 l
-1906 3596 l
-1857 3596 l
-1857 3596 m
-1901 3596 l
-1901 3597 l
-1857 3597 l
-1857 3597 m
-1896 3597 l
-1896 3598 l
-1857 3598 l
-1857 3598 m
-1891 3598 l
-1891 3599 l
-1857 3599 l
-1858 3599 m
-1885 3599 l
-1885 3600 l
-1858 3600 l
-1858 3600 m
-1880 3600 l
-1880 3601 l
-1858 3601 l
-1858 3601 m
-1875 3601 l
-1875 3602 l
-1858 3602 l
-1858 3602 m
-1870 3602 l
-1870 3603 l
-1858 3603 l
-1858 3603 m
-1865 3603 l
-1865 3604 l
-1858 3604 l
-Y
-1930.7 3331.2 m
-1812 3354 l
-1859 3604 l
-1978 3581 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1848 3368 m
-1846 3377 l
-1836 3392 l
-1922 3375 l
-S
-1849 3461 m
-1851 3448 l
-1858 3443 l
-1867 3441 l
-1876 3444 l
-1881 3451 l
-1888 3467 l
-1895 3478 l
-1905 3485 l
-1914 3487 l
-1926 3485 l
-1933 3479 l
-1937 3475 l
-1938 3461 l
-1935 3445 l
-1929 3434 l
-1924 3430 l
-1915 3428 l
-1903 3430 l
-1895 3436 l
-1889 3445 l
-1887 3459 l
-1886 3476 l
-1883 3485 l
-1876 3490 l
-1868 3492 l
-1859 3489 l
-1852 3478 l
-1849 3461 l
-S
-1866 3548 m
-1867 3535 l
-1878 3524 l
-1898 3516 l
-1910 3514 l
-1931 3514 l
-1945 3520 l
-1952 3531 l
-1953 3539 l
-1952 3553 l
-1941 3563 l
-1921 3571 l
-1909 3573 l
-1887 3573 l
-1874 3567 l
-1867 3556 l
-1866 3548 l
-S
-1 g
-2178 3840 m
-2182 3840 l
-2182 3841 l
-2178 3841 l
-2178 3841 m
-2183 3841 l
-2183 3842 l
-2178 3842 l
-2177 3842 m
-2184 3842 l
-2184 3843 l
-2177 3843 l
-2176 3843 m
-2186 3843 l
-2186 3844 l
-2176 3844 l
-2175 3844 m
-2187 3844 l
-2187 3845 l
-2175 3845 l
-2174 3845 m
-2188 3845 l
-2188 3846 l
-2174 3846 l
-2174 3846 m
-2189 3846 l
-2189 3847 l
-2174 3847 l
-2173 3847 m
-2191 3847 l
-2191 3848 l
-2173 3848 l
-2172 3848 m
-2192 3848 l
-2192 3849 l
-2172 3849 l
-2171 3849 m
-2193 3849 l
-2193 3850 l
-2171 3850 l
-2170 3850 m
-2194 3850 l
-2194 3851 l
-2170 3851 l
-2170 3851 m
-2196 3851 l
-2196 3852 l
-2170 3852 l
-2169 3852 m
-2197 3852 l
-2197 3853 l
-2169 3853 l
-2168 3853 m
-2198 3853 l
-2198 3854 l
-2168 3854 l
-2167 3854 m
-2199 3854 l
-2199 3855 l
-2167 3855 l
-2166 3855 m
-2201 3855 l
-2201 3856 l
-2166 3856 l
-2166 3856 m
-2202 3856 l
-2202 3857 l
-2166 3857 l
-2165 3857 m
-2203 3857 l
-2203 3858 l
-2165 3858 l
-2164 3858 m
-2204 3858 l
-2204 3859 l
-2164 3859 l
-2163 3859 m
-2206 3859 l
-2206 3860 l
-2163 3860 l
-2162 3860 m
-2207 3860 l
-2207 3861 l
-2162 3861 l
-2162 3861 m
-2208 3861 l
-2208 3862 l
-2162 3862 l
-2161 3862 m
-2209 3862 l
-2209 3863 l
-2161 3863 l
-2160 3863 m
-2211 3863 l
-2211 3864 l
-2160 3864 l
-2159 3864 m
-2212 3864 l
-2212 3865 l
-2159 3865 l
-2158 3865 m
-2213 3865 l
-2213 3866 l
-2158 3866 l
-2158 3866 m
-2214 3866 l
-2214 3867 l
-2158 3867 l
-2157 3867 m
-2216 3867 l
-2216 3868 l
-2157 3868 l
-2156 3868 m
-2217 3868 l
-2217 3869 l
-2156 3869 l
-2155 3869 m
-2218 3869 l
-2218 3870 l
-2155 3870 l
-2154 3870 m
-2219 3870 l
-2219 3871 l
-2154 3871 l
-2154 3871 m
-2221 3871 l
-2221 3872 l
-2154 3872 l
-2153 3872 m
-2222 3872 l
-2222 3873 l
-2153 3873 l
-2152 3873 m
-2223 3873 l
-2223 3874 l
-2152 3874 l
-2151 3874 m
-2224 3874 l
-2224 3875 l
-2151 3875 l
-2150 3875 m
-2226 3875 l
-2226 3876 l
-2150 3876 l
-2150 3876 m
-2227 3876 l
-2227 3877 l
-2150 3877 l
-2149 3877 m
-2228 3877 l
-2228 3878 l
-2149 3878 l
-2148 3878 m
-2229 3878 l
-2229 3879 l
-2148 3879 l
-2147 3879 m
-2231 3879 l
-2231 3880 l
-2147 3880 l
-2146 3880 m
-2232 3880 l
-2232 3881 l
-2146 3881 l
-2146 3881 m
-2233 3881 l
-2233 3882 l
-2146 3882 l
-2145 3882 m
-2234 3882 l
-2234 3883 l
-2145 3883 l
-2144 3883 m
-2236 3883 l
-2236 3884 l
-2144 3884 l
-2143 3884 m
-2237 3884 l
-2237 3885 l
-2143 3885 l
-2143 3885 m
-2238 3885 l
-2238 3886 l
-2143 3886 l
-2142 3886 m
-2239 3886 l
-2239 3887 l
-2142 3887 l
-2141 3887 m
-2241 3887 l
-2241 3888 l
-2141 3888 l
-2140 3888 m
-2242 3888 l
-2242 3889 l
-2140 3889 l
-2139 3889 m
-2243 3889 l
-2243 3890 l
-2139 3890 l
-2139 3890 m
-2244 3890 l
-2244 3891 l
-2139 3891 l
-2138 3891 m
-2246 3891 l
-2246 3892 l
-2138 3892 l
-2137 3892 m
-2247 3892 l
-2247 3893 l
-2137 3893 l
-2136 3893 m
-2248 3893 l
-2248 3894 l
-2136 3894 l
-2135 3894 m
-2249 3894 l
-2249 3895 l
-2135 3895 l
-2135 3895 m
-2251 3895 l
-2251 3896 l
-2135 3896 l
-2134 3896 m
-2252 3896 l
-2252 3897 l
-2134 3897 l
-2133 3897 m
-2253 3897 l
-2253 3898 l
-2133 3898 l
-2132 3898 m
-2254 3898 l
-2254 3899 l
-2132 3899 l
-2131 3899 m
-2256 3899 l
-2256 3900 l
-2131 3900 l
-2131 3900 m
-2257 3900 l
-2257 3901 l
-2131 3901 l
-2130 3901 m
-2258 3901 l
-2258 3902 l
-2130 3902 l
-2129 3902 m
-2259 3902 l
-2259 3903 l
-2129 3903 l
-2128 3903 m
-2261 3903 l
-2261 3904 l
-2128 3904 l
-2127 3904 m
-2262 3904 l
-2262 3905 l
-2127 3905 l
-2127 3905 m
-2263 3905 l
-2263 3906 l
-2127 3906 l
-2126 3906 m
-2264 3906 l
-2264 3907 l
-2126 3907 l
-2125 3907 m
-2266 3907 l
-2266 3908 l
-2125 3908 l
-2124 3908 m
-2267 3908 l
-2267 3909 l
-2124 3909 l
-2123 3909 m
-2268 3909 l
-2268 3910 l
-2123 3910 l
-2123 3910 m
-2269 3910 l
-2269 3911 l
-2123 3911 l
-2122 3911 m
-2271 3911 l
-2271 3912 l
-2122 3912 l
-2121 3912 m
-2272 3912 l
-2272 3913 l
-2121 3913 l
-2120 3913 m
-2273 3913 l
-2273 3914 l
-2120 3914 l
-2119 3914 m
-2274 3914 l
-2274 3915 l
-2119 3915 l
-2119 3915 m
-2276 3915 l
-2276 3916 l
-2119 3916 l
-2118 3916 m
-2277 3916 l
-2277 3917 l
-2118 3917 l
-2117 3917 m
-2278 3917 l
-2278 3918 l
-2117 3918 l
-2116 3918 m
-2279 3918 l
-2279 3919 l
-2116 3919 l
-2115 3919 m
-2281 3919 l
-2281 3920 l
-2115 3920 l
-2115 3920 m
-2282 3920 l
-2282 3921 l
-2115 3921 l
-2114 3921 m
-2283 3921 l
-2283 3922 l
-2114 3922 l
-2113 3922 m
-2284 3922 l
-2284 3923 l
-2113 3923 l
-2112 3923 m
-2286 3923 l
-2286 3924 l
-2112 3924 l
-2111 3924 m
-2287 3924 l
-2287 3925 l
-2111 3925 l
-2111 3925 m
-2288 3925 l
-2288 3926 l
-2111 3926 l
-2110 3926 m
-2289 3926 l
-2289 3927 l
-2110 3927 l
-2109 3927 m
-2291 3927 l
-2291 3928 l
-2109 3928 l
-2108 3928 m
-2292 3928 l
-2292 3929 l
-2108 3929 l
-2107 3929 m
-2293 3929 l
-2293 3930 l
-2107 3930 l
-2107 3930 m
-2294 3930 l
-2294 3931 l
-2107 3931 l
-2106 3931 m
-2296 3931 l
-2296 3932 l
-2106 3932 l
-2105 3932 m
-2297 3932 l
-2297 3933 l
-2105 3933 l
-2104 3933 m
-2298 3933 l
-2298 3934 l
-2104 3934 l
-2104 3934 m
-2299 3934 l
-2299 3935 l
-2104 3935 l
-2104 3935 m
-2301 3935 l
-2301 3936 l
-2104 3936 l
-2105 3936 m
-2302 3936 l
-2302 3937 l
-2105 3937 l
-2106 3937 m
-2303 3937 l
-2303 3938 l
-2106 3938 l
-2107 3938 m
-2304 3938 l
-2304 3939 l
-2107 3939 l
-2109 3939 m
-2306 3939 l
-2306 3940 l
-2109 3940 l
-2110 3940 m
-2307 3940 l
-2307 3941 l
-2110 3941 l
-2111 3941 m
-2308 3941 l
-2308 3942 l
-2111 3942 l
-2112 3942 m
-2309 3942 l
-2309 3943 l
-2112 3943 l
-2114 3943 m
-2311 3943 l
-2311 3944 l
-2114 3944 l
-2115 3944 m
-2312 3944 l
-2312 3945 l
-2115 3945 l
-2116 3945 m
-2313 3945 l
-2313 3946 l
-2116 3946 l
-2117 3946 m
-2314 3946 l
-2314 3947 l
-2117 3947 l
-2119 3947 m
-2316 3947 l
-2316 3948 l
-2119 3948 l
-2120 3948 m
-2317 3948 l
-2317 3949 l
-2120 3949 l
-2121 3949 m
-2318 3949 l
-2318 3950 l
-2121 3950 l
-2122 3950 m
-2319 3950 l
-2319 3951 l
-2122 3951 l
-2124 3951 m
-2321 3951 l
-2321 3952 l
-2124 3952 l
-2125 3952 m
-2322 3952 l
-2322 3953 l
-2125 3953 l
-2126 3953 m
-2323 3953 l
-2323 3954 l
-2126 3954 l
-2127 3954 m
-2324 3954 l
-2324 3955 l
-2127 3955 l
-2129 3955 m
-2326 3955 l
-2326 3956 l
-2129 3956 l
-2130 3956 m
-2327 3956 l
-2327 3957 l
-2130 3957 l
-2131 3957 m
-2328 3957 l
-2328 3958 l
-2131 3958 l
-2132 3958 m
-2329 3958 l
-2329 3959 l
-2132 3959 l
-2134 3959 m
-2331 3959 l
-2331 3960 l
-2134 3960 l
-2135 3960 m
-2332 3960 l
-2332 3961 l
-2135 3961 l
-2136 3961 m
-2333 3961 l
-2333 3962 l
-2136 3962 l
-2138 3962 m
-2334 3962 l
-2334 3963 l
-2138 3963 l
-2139 3963 m
-2336 3963 l
-2336 3964 l
-2139 3964 l
-2140 3964 m
-2337 3964 l
-2337 3965 l
-2140 3965 l
-2141 3965 m
-2338 3965 l
-2338 3966 l
-2141 3966 l
-2143 3966 m
-2339 3966 l
-2339 3967 l
-2143 3967 l
-2144 3967 m
-2341 3967 l
-2341 3968 l
-2144 3968 l
-2145 3968 m
-2342 3968 l
-2342 3969 l
-2145 3969 l
-2146 3969 m
-2343 3969 l
-2343 3970 l
-2146 3970 l
-2148 3970 m
-2344 3970 l
-2344 3971 l
-2148 3971 l
-2149 3971 m
-2346 3971 l
-2346 3972 l
-2149 3972 l
-2150 3972 m
-2347 3972 l
-2347 3973 l
-2150 3973 l
-2151 3973 m
-2348 3973 l
-2348 3974 l
-2151 3974 l
-2153 3974 m
-2349 3974 l
-2349 3975 l
-2153 3975 l
-2154 3975 m
-2351 3975 l
-2351 3976 l
-2154 3976 l
-2155 3976 m
-2352 3976 l
-2352 3977 l
-2155 3977 l
-2156 3977 m
-2353 3977 l
-2353 3978 l
-2156 3978 l
-2158 3978 m
-2354 3978 l
-2354 3979 l
-2158 3979 l
-2159 3979 m
-2356 3979 l
-2356 3980 l
-2159 3980 l
-2160 3980 m
-2357 3980 l
-2357 3981 l
-2160 3981 l
-2161 3981 m
-2358 3981 l
-2358 3982 l
-2161 3982 l
-2163 3982 m
-2359 3982 l
-2359 3983 l
-2163 3983 l
-2164 3983 m
-2361 3983 l
-2361 3984 l
-2164 3984 l
-2165 3984 m
-2362 3984 l
-2362 3985 l
-2165 3985 l
-2166 3985 m
-2363 3985 l
-2363 3986 l
-2166 3986 l
-2168 3986 m
-2364 3986 l
-2364 3987 l
-2168 3987 l
-2169 3987 m
-2366 3987 l
-2366 3988 l
-2169 3988 l
-2170 3988 m
-2367 3988 l
-2367 3989 l
-2170 3989 l
-2172 3989 m
-2368 3989 l
-2368 3990 l
-2172 3990 l
-2173 3990 m
-2369 3990 l
-2369 3991 l
-2173 3991 l
-2174 3991 m
-2371 3991 l
-2371 3992 l
-2174 3992 l
-2175 3992 m
-2372 3992 l
-2372 3993 l
-2175 3993 l
-2177 3993 m
-2373 3993 l
-2373 3994 l
-2177 3994 l
-2178 3994 m
-2374 3994 l
-2374 3995 l
-2178 3995 l
-2179 3995 m
-2376 3995 l
-2376 3996 l
-2179 3996 l
-2180 3996 m
-2377 3996 l
-2377 3997 l
-2180 3997 l
-2182 3997 m
-2378 3997 l
-2378 3998 l
-2182 3998 l
-2183 3998 m
-2379 3998 l
-2379 3999 l
-2183 3999 l
-2184 3999 m
-2379 3999 l
-2379 4000 l
-2184 4000 l
-2185 4000 m
-2379 4000 l
-2379 4001 l
-2185 4001 l
-2187 4001 m
-2378 4001 l
-2378 4002 l
-2187 4002 l
-2188 4002 m
-2377 4002 l
-2377 4003 l
-2188 4003 l
-2189 4003 m
-2376 4003 l
-2376 4004 l
-2189 4004 l
-2190 4004 m
-2375 4004 l
-2375 4005 l
-2190 4005 l
-2192 4005 m
-2375 4005 l
-2375 4006 l
-2192 4006 l
-2193 4006 m
-2374 4006 l
-2374 4007 l
-2193 4007 l
-2194 4007 m
-2373 4007 l
-2373 4008 l
-2194 4008 l
-2195 4008 m
-2372 4008 l
-2372 4009 l
-2195 4009 l
-2197 4009 m
-2371 4009 l
-2371 4010 l
-2197 4010 l
-2198 4010 m
-2371 4010 l
-2371 4011 l
-2198 4011 l
-2199 4011 m
-2370 4011 l
-2370 4012 l
-2199 4012 l
-2200 4012 m
-2369 4012 l
-2369 4013 l
-2200 4013 l
-2202 4013 m
-2368 4013 l
-2368 4014 l
-2202 4014 l
-2203 4014 m
-2367 4014 l
-2367 4015 l
-2203 4015 l
-2204 4015 m
-2367 4015 l
-2367 4016 l
-2204 4016 l
-2206 4016 m
-2366 4016 l
-2366 4017 l
-2206 4017 l
-2207 4017 m
-2365 4017 l
-2365 4018 l
-2207 4018 l
-2208 4018 m
-2364 4018 l
-2364 4019 l
-2208 4019 l
-2209 4019 m
-2363 4019 l
-2363 4020 l
-2209 4020 l
-2211 4020 m
-2363 4020 l
-2363 4021 l
-2211 4021 l
-2212 4021 m
-2362 4021 l
-2362 4022 l
-2212 4022 l
-2213 4022 m
-2361 4022 l
-2361 4023 l
-2213 4023 l
-2214 4023 m
-2360 4023 l
-2360 4024 l
-2214 4024 l
-2216 4024 m
-2359 4024 l
-2359 4025 l
-2216 4025 l
-2217 4025 m
-2358 4025 l
-2358 4026 l
-2217 4026 l
-2218 4026 m
-2358 4026 l
-2358 4027 l
-2218 4027 l
-2219 4027 m
-2357 4027 l
-2357 4028 l
-2219 4028 l
-2221 4028 m
-2356 4028 l
-2356 4029 l
-2221 4029 l
-2222 4029 m
-2355 4029 l
-2355 4030 l
-2222 4030 l
-2223 4030 m
-2354 4030 l
-2354 4031 l
-2223 4031 l
-2224 4031 m
-2354 4031 l
-2354 4032 l
-2224 4032 l
-2226 4032 m
-2353 4032 l
-2353 4033 l
-2226 4033 l
-2227 4033 m
-2352 4033 l
-2352 4034 l
-2227 4034 l
-2228 4034 m
-2351 4034 l
-2351 4035 l
-2228 4035 l
-2229 4035 m
-2350 4035 l
-2350 4036 l
-2229 4036 l
-2231 4036 m
-2350 4036 l
-2350 4037 l
-2231 4037 l
-2232 4037 m
-2349 4037 l
-2349 4038 l
-2232 4038 l
-2233 4038 m
-2348 4038 l
-2348 4039 l
-2233 4039 l
-2234 4039 m
-2347 4039 l
-2347 4040 l
-2234 4040 l
-2236 4040 m
-2346 4040 l
-2346 4041 l
-2236 4041 l
-2237 4041 m
-2346 4041 l
-2346 4042 l
-2237 4042 l
-2238 4042 m
-2345 4042 l
-2345 4043 l
-2238 4043 l
-2240 4043 m
-2344 4043 l
-2344 4044 l
-2240 4044 l
-2241 4044 m
-2343 4044 l
-2343 4045 l
-2241 4045 l
-2242 4045 m
-2342 4045 l
-2342 4046 l
-2242 4046 l
-2243 4046 m
-2341 4046 l
-2341 4047 l
-2243 4047 l
-2245 4047 m
-2341 4047 l
-2341 4048 l
-2245 4048 l
-2246 4048 m
-2340 4048 l
-2340 4049 l
-2246 4049 l
-2247 4049 m
-2339 4049 l
-2339 4050 l
-2247 4050 l
-2248 4050 m
-2338 4050 l
-2338 4051 l
-2248 4051 l
-2250 4051 m
-2337 4051 l
-2337 4052 l
-2250 4052 l
-2251 4052 m
-2337 4052 l
-2337 4053 l
-2251 4053 l
-2252 4053 m
-2336 4053 l
-2336 4054 l
-2252 4054 l
-2253 4054 m
-2335 4054 l
-2335 4055 l
-2253 4055 l
-2255 4055 m
-2334 4055 l
-2334 4056 l
-2255 4056 l
-2256 4056 m
-2333 4056 l
-2333 4057 l
-2256 4057 l
-2257 4057 m
-2333 4057 l
-2333 4058 l
-2257 4058 l
-2258 4058 m
-2332 4058 l
-2332 4059 l
-2258 4059 l
-2260 4059 m
-2331 4059 l
-2331 4060 l
-2260 4060 l
-2261 4060 m
-2330 4060 l
-2330 4061 l
-2261 4061 l
-2262 4061 m
-2329 4061 l
-2329 4062 l
-2262 4062 l
-2263 4062 m
-2329 4062 l
-2329 4063 l
-2263 4063 l
-2265 4063 m
-2328 4063 l
-2328 4064 l
-2265 4064 l
-2266 4064 m
-2327 4064 l
-2327 4065 l
-2266 4065 l
-2267 4065 m
-2326 4065 l
-2326 4066 l
-2267 4066 l
-2268 4066 m
-2325 4066 l
-2325 4067 l
-2268 4067 l
-2270 4067 m
-2325 4067 l
-2325 4068 l
-2270 4068 l
-2271 4068 m
-2324 4068 l
-2324 4069 l
-2271 4069 l
-2272 4069 m
-2323 4069 l
-2323 4070 l
-2272 4070 l
-2274 4070 m
-2322 4070 l
-2322 4071 l
-2274 4071 l
-2275 4071 m
-2321 4071 l
-2321 4072 l
-2275 4072 l
-2276 4072 m
-2320 4072 l
-2320 4073 l
-2276 4073 l
-2277 4073 m
-2320 4073 l
-2320 4074 l
-2277 4074 l
-2279 4074 m
-2319 4074 l
-2319 4075 l
-2279 4075 l
-2280 4075 m
-2318 4075 l
-2318 4076 l
-2280 4076 l
-2281 4076 m
-2317 4076 l
-2317 4077 l
-2281 4077 l
-2282 4077 m
-2316 4077 l
-2316 4078 l
-2282 4078 l
-2284 4078 m
-2316 4078 l
-2316 4079 l
-2284 4079 l
-2285 4079 m
-2315 4079 l
-2315 4080 l
-2285 4080 l
-2286 4080 m
-2314 4080 l
-2314 4081 l
-2286 4081 l
-2287 4081 m
-2313 4081 l
-2313 4082 l
-2287 4082 l
-2289 4082 m
-2312 4082 l
-2312 4083 l
-2289 4083 l
-2290 4083 m
-2312 4083 l
-2312 4084 l
-2290 4084 l
-2291 4084 m
-2311 4084 l
-2311 4085 l
-2291 4085 l
-2292 4085 m
-2310 4085 l
-2310 4086 l
-2292 4086 l
-2294 4086 m
-2309 4086 l
-2309 4087 l
-2294 4087 l
-2295 4087 m
-2308 4087 l
-2308 4088 l
-2295 4088 l
-2296 4088 m
-2308 4088 l
-2308 4089 l
-2296 4089 l
-2297 4089 m
-2307 4089 l
-2307 4090 l
-2297 4090 l
-2299 4090 m
-2306 4090 l
-2306 4091 l
-2299 4091 l
-2300 4091 m
-2305 4091 l
-2305 4092 l
-2300 4092 l
-2301 4092 m
-2304 4092 l
-2304 4093 l
-2301 4093 l
-Y
-2179.8 3839.8 m
-2104 3935 l
-2303 4093 l
-2379 3999 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2141 3921 m
-2145 3930 l
-2147 3947 l
-2202 3879 l
-S
-2203 3965 m
-2200 3968 l
-2198 3977 l
-2199 3983 l
-2203 3992 l
-2216 4002 l
-2225 4004 l
-2231 4003 l
-2239 4000 l
-2245 3993 l
-2247 3984 l
-2248 3969 l
-2241 3910 l
-2287 3947 l
-S
-2271 4046 m
-2264 4035 l
-2266 4020 l
-2275 4001 l
-2283 3992 l
-2299 3978 l
-2314 3973 l
-2326 3978 l
-2333 3983 l
-2340 3994 l
-2339 4009 l
-2329 4028 l
-2321 4038 l
-2305 4052 l
-2290 4056 l
-2278 4052 l
-2271 4046 l
-S
-1 g
-2789 4191 m
-2795 4191 l
-2795 4192 l
-2789 4192 l
-2789 4192 m
-2799 4192 l
-2799 4193 l
-2789 4193 l
-2789 4193 m
-2802 4193 l
-2802 4194 l
-2789 4194 l
-2789 4194 m
-2806 4194 l
-2806 4195 l
-2789 4195 l
-2788 4195 m
-2810 4195 l
-2810 4196 l
-2788 4196 l
-2788 4196 m
-2814 4196 l
-2814 4197 l
-2788 4197 l
-2788 4197 m
-2817 4197 l
-2817 4198 l
-2788 4198 l
-2788 4198 m
-2821 4198 l
-2821 4199 l
-2788 4199 l
-2787 4199 m
-2825 4199 l
-2825 4200 l
-2787 4200 l
-2787 4200 m
-2829 4200 l
-2829 4201 l
-2787 4201 l
-2787 4201 m
-2833 4201 l
-2833 4202 l
-2787 4202 l
-2786 4202 m
-2836 4202 l
-2836 4203 l
-2786 4203 l
-2786 4203 m
-2840 4203 l
-2840 4204 l
-2786 4204 l
-2786 4204 m
-2844 4204 l
-2844 4205 l
-2786 4205 l
-2786 4205 m
-2848 4205 l
-2848 4206 l
-2786 4206 l
-2785 4206 m
-2851 4206 l
-2851 4207 l
-2785 4207 l
-2785 4207 m
-2855 4207 l
-2855 4208 l
-2785 4208 l
-2785 4208 m
-2859 4208 l
-2859 4209 l
-2785 4209 l
-2785 4209 m
-2863 4209 l
-2863 4210 l
-2785 4210 l
-2784 4210 m
-2866 4210 l
-2866 4211 l
-2784 4211 l
-2784 4211 m
-2870 4211 l
-2870 4212 l
-2784 4212 l
-2784 4212 m
-2874 4212 l
-2874 4213 l
-2784 4213 l
-2784 4213 m
-2878 4213 l
-2878 4214 l
-2784 4214 l
-2783 4214 m
-2882 4214 l
-2882 4215 l
-2783 4215 l
-2783 4215 m
-2885 4215 l
-2885 4216 l
-2783 4216 l
-2783 4216 m
-2889 4216 l
-2889 4217 l
-2783 4217 l
-2782 4217 m
-2893 4217 l
-2893 4218 l
-2782 4218 l
-2782 4218 m
-2897 4218 l
-2897 4219 l
-2782 4219 l
-2782 4219 m
-2900 4219 l
-2900 4220 l
-2782 4220 l
-2782 4220 m
-2904 4220 l
-2904 4221 l
-2782 4221 l
-2781 4221 m
-2908 4221 l
-2908 4222 l
-2781 4222 l
-2781 4222 m
-2912 4222 l
-2912 4223 l
-2781 4223 l
-2781 4223 m
-2915 4223 l
-2915 4224 l
-2781 4224 l
-2781 4224 m
-2919 4224 l
-2919 4225 l
-2781 4225 l
-2780 4225 m
-2923 4225 l
-2923 4226 l
-2780 4226 l
-2780 4226 m
-2927 4226 l
-2927 4227 l
-2780 4227 l
-2780 4227 m
-2931 4227 l
-2931 4228 l
-2780 4228 l
-2780 4228 m
-2934 4228 l
-2934 4229 l
-2780 4229 l
-2779 4229 m
-2938 4229 l
-2938 4230 l
-2779 4230 l
-2779 4230 m
-2942 4230 l
-2942 4231 l
-2779 4231 l
-2779 4231 m
-2946 4231 l
-2946 4232 l
-2779 4232 l
-2778 4232 m
-2949 4232 l
-2949 4233 l
-2778 4233 l
-2778 4233 m
-2953 4233 l
-2953 4234 l
-2778 4234 l
-2778 4234 m
-2957 4234 l
-2957 4235 l
-2778 4235 l
-2778 4235 m
-2961 4235 l
-2961 4236 l
-2778 4236 l
-2777 4236 m
-2964 4236 l
-2964 4237 l
-2777 4237 l
-2777 4237 m
-2964 4237 l
-2964 4240 l
-2777 4240 l
-2776 4240 m
-2964 4240 l
-2964 4241 l
-2776 4241 l
-2776 4241 m
-2963 4241 l
-2963 4244 l
-2776 4244 l
-2775 4244 m
-2963 4244 l
-2963 4245 l
-2775 4245 l
-2775 4245 m
-2962 4245 l
-2962 4247 l
-2775 4247 l
-2774 4247 m
-2962 4247 l
-2962 4249 l
-2774 4249 l
-2774 4249 m
-2961 4249 l
-2961 4251 l
-2774 4251 l
-2773 4251 m
-2961 4251 l
-2961 4253 l
-2773 4253 l
-2773 4253 m
-2960 4253 l
-2960 4255 l
-2773 4255 l
-2772 4255 m
-2960 4255 l
-2960 4256 l
-2772 4256 l
-2772 4256 m
-2959 4256 l
-2959 4259 l
-2772 4259 l
-2771 4259 m
-2959 4259 l
-2959 4260 l
-2771 4260 l
-2771 4260 m
-2958 4260 l
-2958 4262 l
-2771 4262 l
-2770 4262 m
-2958 4262 l
-2958 4264 l
-2770 4264 l
-2770 4264 m
-2957 4264 l
-2957 4266 l
-2770 4266 l
-2769 4266 m
-2957 4266 l
-2957 4268 l
-2769 4268 l
-2769 4268 m
-2956 4268 l
-2956 4270 l
-2769 4270 l
-2768 4270 m
-2956 4270 l
-2956 4271 l
-2768 4271 l
-2768 4271 m
-2955 4271 l
-2955 4274 l
-2768 4274 l
-2767 4274 m
-2955 4274 l
-2955 4275 l
-2767 4275 l
-2767 4275 m
-2954 4275 l
-2954 4277 l
-2767 4277 l
-2766 4277 m
-2954 4277 l
-2954 4279 l
-2766 4279 l
-2766 4279 m
-2953 4279 l
-2953 4281 l
-2766 4281 l
-2765 4281 m
-2953 4281 l
-2953 4283 l
-2765 4283 l
-2765 4283 m
-2952 4283 l
-2952 4285 l
-2765 4285 l
-2764 4285 m
-2952 4285 l
-2952 4287 l
-2764 4287 l
-2764 4287 m
-2951 4287 l
-2951 4289 l
-2764 4289 l
-2763 4289 m
-2951 4289 l
-2951 4290 l
-2763 4290 l
-2763 4290 m
-2950 4290 l
-2950 4292 l
-2763 4292 l
-2762 4292 m
-2950 4292 l
-2950 4294 l
-2762 4294 l
-2762 4294 m
-2949 4294 l
-2949 4296 l
-2762 4296 l
-2761 4296 m
-2949 4296 l
-2949 4298 l
-2761 4298 l
-2761 4298 m
-2948 4298 l
-2948 4300 l
-2761 4300 l
-2760 4300 m
-2948 4300 l
-2948 4302 l
-2760 4302 l
-2760 4302 m
-2947 4302 l
-2947 4304 l
-2760 4304 l
-2759 4304 m
-2947 4304 l
-2947 4305 l
-2759 4305 l
-2759 4305 m
-2946 4305 l
-2946 4307 l
-2759 4307 l
-2759 4307 m
-2946 4307 l
-2946 4308 l
-2759 4308 l
-2759 4308 m
-2946 4308 l
-2946 4309 l
-2759 4309 l
-2762 4309 m
-2945 4309 l
-2945 4310 l
-2762 4310 l
-2766 4310 m
-2945 4310 l
-2945 4311 l
-2766 4311 l
-2770 4311 m
-2945 4311 l
-2945 4312 l
-2770 4312 l
-2774 4312 m
-2945 4312 l
-2945 4313 l
-2774 4313 l
-2777 4313 m
-2944 4313 l
-2944 4314 l
-2777 4314 l
-2781 4314 m
-2944 4314 l
-2944 4315 l
-2781 4315 l
-2785 4315 m
-2944 4315 l
-2944 4316 l
-2785 4316 l
-2789 4316 m
-2944 4316 l
-2944 4317 l
-2789 4317 l
-2793 4317 m
-2943 4317 l
-2943 4318 l
-2793 4318 l
-2796 4318 m
-2943 4318 l
-2943 4319 l
-2796 4319 l
-2800 4319 m
-2943 4319 l
-2943 4320 l
-2800 4320 l
-2804 4320 m
-2943 4320 l
-2943 4321 l
-2804 4321 l
-2808 4321 m
-2942 4321 l
-2942 4322 l
-2808 4322 l
-2811 4322 m
-2942 4322 l
-2942 4323 l
-2811 4323 l
-2815 4323 m
-2942 4323 l
-2942 4324 l
-2815 4324 l
-2819 4324 m
-2941 4324 l
-2941 4325 l
-2819 4325 l
-2823 4325 m
-2941 4325 l
-2941 4326 l
-2823 4326 l
-2827 4326 m
-2941 4326 l
-2941 4327 l
-2827 4327 l
-2830 4327 m
-2941 4327 l
-2941 4328 l
-2830 4328 l
-2834 4328 m
-2940 4328 l
-2940 4329 l
-2834 4329 l
-2838 4329 m
-2940 4329 l
-2940 4330 l
-2838 4330 l
-2842 4330 m
-2940 4330 l
-2940 4331 l
-2842 4331 l
-2846 4331 m
-2940 4331 l
-2940 4332 l
-2846 4332 l
-2849 4332 m
-2939 4332 l
-2939 4333 l
-2849 4333 l
-2853 4333 m
-2939 4333 l
-2939 4334 l
-2853 4334 l
-2857 4334 m
-2939 4334 l
-2939 4335 l
-2857 4335 l
-2861 4335 m
-2939 4335 l
-2939 4336 l
-2861 4336 l
-2864 4336 m
-2938 4336 l
-2938 4337 l
-2864 4337 l
-2868 4337 m
-2938 4337 l
-2938 4338 l
-2868 4338 l
-2872 4338 m
-2938 4338 l
-2938 4339 l
-2872 4339 l
-2876 4339 m
-2937 4339 l
-2937 4340 l
-2876 4340 l
-2880 4340 m
-2937 4340 l
-2937 4341 l
-2880 4341 l
-2883 4341 m
-2937 4341 l
-2937 4342 l
-2883 4342 l
-2887 4342 m
-2937 4342 l
-2937 4343 l
-2887 4343 l
-2891 4343 m
-2936 4343 l
-2936 4344 l
-2891 4344 l
-2895 4344 m
-2936 4344 l
-2936 4345 l
-2895 4345 l
-2898 4345 m
-2936 4345 l
-2936 4346 l
-2898 4346 l
-2902 4346 m
-2936 4346 l
-2936 4347 l
-2902 4347 l
-2906 4347 m
-2935 4347 l
-2935 4348 l
-2906 4348 l
-2910 4348 m
-2935 4348 l
-2935 4349 l
-2910 4349 l
-2914 4349 m
-2935 4349 l
-2935 4350 l
-2914 4350 l
-2917 4350 m
-2935 4350 l
-2935 4351 l
-2917 4351 l
-2921 4351 m
-2934 4351 l
-2934 4352 l
-2921 4352 l
-2925 4352 m
-2934 4352 l
-2934 4353 l
-2925 4353 l
-2929 4353 m
-2934 4353 l
-2934 4354 l
-2929 4354 l
-Y
-2790.2 4190.9 m
-2759 4308 l
-2933 4354 l
-2964 4237 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2836 4298 m
-2829 4305 l
-2816 4306 l
-2808 4304 l
-2797 4296 l
-2792 4282 l
-2793 4261 l
-2799 4241 l
-2807 4226 l
-2817 4220 l
-2830 4219 l
-2834 4220 l
-2845 4227 l
-2851 4237 l
-2852 4250 l
-2851 4254 l
-2844 4266 l
-2834 4272 l
-2821 4272 l
-2817 4271 l
-2806 4264 l
-2800 4254 l
-2799 4241 l
-S
-2885 4324 m
-2874 4317 l
-2869 4302 l
-2870 4281 l
-2873 4269 l
-2883 4250 l
-2894 4240 l
-2907 4239 l
-2915 4241 l
-2926 4248 l
-2931 4263 l
-2930 4284 l
-2927 4296 l
-2917 4315 l
-2906 4325 l
-2893 4326 l
-2885 4324 l
-S
-1 g
-3525 4216 m
-3529 4216 l
-3529 4217 l
-3525 4217 l
-3522 4217 m
-3529 4217 l
-3529 4218 l
-3522 4218 l
-3519 4218 m
-3530 4218 l
-3530 4219 l
-3519 4219 l
-3516 4219 m
-3530 4219 l
-3530 4220 l
-3516 4220 l
-3513 4220 m
-3530 4220 l
-3530 4221 l
-3513 4221 l
-3510 4221 m
-3531 4221 l
-3531 4222 l
-3510 4222 l
-3507 4222 m
-3531 4222 l
-3531 4223 l
-3507 4223 l
-3504 4223 m
-3531 4223 l
-3531 4224 l
-3504 4224 l
-3502 4224 m
-3532 4224 l
-3532 4225 l
-3502 4225 l
-3499 4225 m
-3532 4225 l
-3532 4226 l
-3499 4226 l
-3496 4226 m
-3532 4226 l
-3532 4227 l
-3496 4227 l
-3493 4227 m
-3533 4227 l
-3533 4228 l
-3493 4228 l
-3490 4228 m
-3533 4228 l
-3533 4229 l
-3490 4229 l
-3487 4229 m
-3533 4229 l
-3533 4230 l
-3487 4230 l
-3484 4230 m
-3534 4230 l
-3534 4231 l
-3484 4231 l
-3481 4231 m
-3534 4231 l
-3534 4232 l
-3481 4232 l
-3479 4232 m
-3534 4232 l
-3534 4233 l
-3479 4233 l
-3476 4233 m
-3535 4233 l
-3535 4234 l
-3476 4234 l
-3473 4234 m
-3535 4234 l
-3535 4235 l
-3473 4235 l
-3470 4235 m
-3536 4235 l
-3536 4236 l
-3470 4236 l
-3467 4236 m
-3536 4236 l
-3536 4237 l
-3467 4237 l
-3464 4237 m
-3536 4237 l
-3536 4238 l
-3464 4238 l
-3461 4238 m
-3537 4238 l
-3537 4239 l
-3461 4239 l
-3458 4239 m
-3537 4239 l
-3537 4240 l
-3458 4240 l
-3456 4240 m
-3537 4240 l
-3537 4241 l
-3456 4241 l
-3453 4241 m
-3538 4241 l
-3538 4242 l
-3453 4242 l
-3450 4242 m
-3538 4242 l
-3538 4243 l
-3450 4243 l
-3447 4243 m
-3538 4243 l
-3538 4244 l
-3447 4244 l
-3444 4244 m
-3539 4244 l
-3539 4245 l
-3444 4245 l
-3441 4245 m
-3539 4245 l
-3539 4246 l
-3441 4246 l
-3438 4246 m
-3539 4246 l
-3539 4247 l
-3438 4247 l
-3435 4247 m
-3540 4247 l
-3540 4248 l
-3435 4248 l
-3433 4248 m
-3540 4248 l
-3540 4249 l
-3433 4249 l
-3433 4249 m
-3540 4249 l
-3540 4250 l
-3433 4250 l
-3433 4250 m
-3541 4250 l
-3541 4252 l
-3433 4252 l
-3434 4252 m
-3541 4252 l
-3541 4253 l
-3434 4253 l
-3434 4253 m
-3542 4253 l
-3542 4255 l
-3434 4255 l
-3435 4255 m
-3543 4255 l
-3543 4258 l
-3435 4258 l
-3436 4258 m
-3544 4258 l
-3544 4261 l
-3436 4261 l
-3437 4261 m
-3545 4261 l
-3545 4264 l
-3437 4264 l
-3438 4264 m
-3546 4264 l
-3546 4267 l
-3438 4267 l
-3439 4267 m
-3547 4267 l
-3547 4269 l
-3439 4269 l
-3440 4269 m
-3547 4269 l
-3547 4270 l
-3440 4270 l
-3440 4270 m
-3548 4270 l
-3548 4272 l
-3440 4272 l
-3441 4272 m
-3548 4272 l
-3548 4273 l
-3441 4273 l
-3441 4273 m
-3549 4273 l
-3549 4275 l
-3441 4275 l
-3442 4275 m
-3550 4275 l
-3550 4278 l
-3442 4278 l
-3443 4278 m
-3551 4278 l
-3551 4281 l
-3443 4281 l
-3444 4281 m
-3552 4281 l
-3552 4284 l
-3444 4284 l
-3445 4284 m
-3553 4284 l
-3553 4287 l
-3445 4287 l
-3446 4287 m
-3554 4287 l
-3554 4289 l
-3446 4289 l
-3447 4289 m
-3554 4289 l
-3554 4290 l
-3447 4290 l
-3447 4290 m
-3555 4290 l
-3555 4292 l
-3447 4292 l
-3448 4292 m
-3555 4292 l
-3555 4293 l
-3448 4293 l
-3448 4293 m
-3556 4293 l
-3556 4295 l
-3448 4295 l
-3449 4295 m
-3557 4295 l
-3557 4298 l
-3449 4298 l
-3450 4298 m
-3558 4298 l
-3558 4301 l
-3450 4301 l
-3451 4301 m
-3559 4301 l
-3559 4304 l
-3451 4304 l
-3452 4304 m
-3560 4304 l
-3560 4306 l
-3452 4306 l
-3453 4306 m
-3560 4306 l
-3560 4307 l
-3453 4307 l
-3453 4307 m
-3561 4307 l
-3561 4309 l
-3453 4309 l
-3454 4309 m
-3561 4309 l
-3561 4310 l
-3454 4310 l
-3454 4310 m
-3562 4310 l
-3562 4312 l
-3454 4312 l
-3455 4312 m
-3563 4312 l
-3563 4315 l
-3455 4315 l
-3456 4315 m
-3564 4315 l
-3564 4318 l
-3456 4318 l
-3457 4318 m
-3565 4318 l
-3565 4321 l
-3457 4321 l
-3458 4321 m
-3566 4321 l
-3566 4324 l
-3458 4324 l
-3459 4324 m
-3567 4324 l
-3567 4326 l
-3459 4326 l
-3460 4326 m
-3567 4326 l
-3567 4327 l
-3460 4327 l
-3460 4327 m
-3568 4327 l
-3568 4329 l
-3460 4329 l
-3461 4329 m
-3568 4329 l
-3568 4330 l
-3461 4330 l
-3461 4330 m
-3569 4330 l
-3569 4331 l
-3461 4331 l
-3461 4331 m
-3566 4331 l
-3566 4332 l
-3461 4332 l
-3462 4332 m
-3563 4332 l
-3563 4333 l
-3462 4333 l
-3462 4333 m
-3560 4333 l
-3560 4334 l
-3462 4334 l
-3462 4334 m
-3557 4334 l
-3557 4335 l
-3462 4335 l
-3463 4335 m
-3554 4335 l
-3554 4336 l
-3463 4336 l
-3463 4336 m
-3551 4336 l
-3551 4337 l
-3463 4337 l
-3463 4337 m
-3549 4337 l
-3549 4338 l
-3463 4338 l
-3464 4338 m
-3546 4338 l
-3546 4339 l
-3464 4339 l
-3464 4339 m
-3543 4339 l
-3543 4340 l
-3464 4340 l
-3464 4340 m
-3540 4340 l
-3540 4341 l
-3464 4341 l
-3465 4341 m
-3537 4341 l
-3537 4342 l
-3465 4342 l
-3465 4342 m
-3534 4342 l
-3534 4343 l
-3465 4343 l
-3465 4343 m
-3531 4343 l
-3531 4344 l
-3465 4344 l
-3466 4344 m
-3528 4344 l
-3528 4345 l
-3466 4345 l
-3466 4345 m
-3525 4345 l
-3525 4346 l
-3466 4346 l
-3467 4346 m
-3523 4346 l
-3523 4347 l
-3467 4347 l
-3467 4347 m
-3520 4347 l
-3520 4348 l
-3467 4348 l
-3467 4348 m
-3517 4348 l
-3517 4349 l
-3467 4349 l
-3468 4349 m
-3514 4349 l
-3514 4350 l
-3468 4350 l
-3468 4350 m
-3511 4350 l
-3511 4351 l
-3468 4351 l
-3468 4351 m
-3508 4351 l
-3508 4352 l
-3468 4352 l
-3469 4352 m
-3505 4352 l
-3505 4353 l
-3469 4353 l
-3469 4353 m
-3502 4353 l
-3502 4354 l
-3469 4354 l
-3469 4354 m
-3499 4354 l
-3499 4355 l
-3469 4355 l
-3470 4355 m
-3497 4355 l
-3497 4356 l
-3470 4356 l
-3470 4356 m
-3494 4356 l
-3494 4357 l
-3470 4357 l
-3470 4357 m
-3491 4357 l
-3491 4358 l
-3470 4358 l
-3471 4358 m
-3488 4358 l
-3488 4359 l
-3471 4359 l
-3471 4359 m
-3485 4359 l
-3485 4360 l
-3471 4360 l
-3471 4360 m
-3482 4360 l
-3482 4361 l
-3471 4361 l
-3472 4361 m
-3479 4361 l
-3479 4362 l
-3472 4362 l
-3472 4362 m
-3476 4362 l
-3476 4363 l
-3472 4363 l
-Y
-3568 4330.1 m
-3528 4216 l
-3433 4249 l
-3473 4363 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3490 4247 m
-3503 4246 l
-3515 4256 l
-3526 4274 l
-3530 4286 l
-3533 4307 l
-3530 4321 l
-3519 4329 l
-3511 4332 l
-3498 4332 l
-3486 4323 l
-3475 4305 l
-3471 4293 l
-3468 4272 l
-3472 4257 l
-3482 4249 l
-3490 4247 l
-S
-1 g
-2845 3271 m
-2847 3271 l
-2847 3272 l
-2845 3272 l
-2845 3272 m
-2849 3272 l
-2849 3273 l
-2845 3273 l
-2844 3273 m
-2851 3273 l
-2851 3274 l
-2844 3274 l
-2843 3274 m
-2853 3274 l
-2853 3275 l
-2843 3275 l
-2843 3275 m
-2855 3275 l
-2855 3276 l
-2843 3276 l
-2842 3276 m
-2856 3276 l
-2856 3277 l
-2842 3277 l
-2842 3277 m
-2858 3277 l
-2858 3278 l
-2842 3278 l
-2841 3278 m
-2860 3278 l
-2860 3279 l
-2841 3279 l
-2841 3279 m
-2862 3279 l
-2862 3280 l
-2841 3280 l
-2840 3280 m
-2864 3280 l
-2864 3281 l
-2840 3281 l
-2840 3281 m
-2865 3281 l
-2865 3282 l
-2840 3282 l
-2839 3282 m
-2867 3282 l
-2867 3283 l
-2839 3283 l
-2838 3283 m
-2869 3283 l
-2869 3284 l
-2838 3284 l
-2838 3284 m
-2871 3284 l
-2871 3285 l
-2838 3285 l
-2837 3285 m
-2873 3285 l
-2873 3286 l
-2837 3286 l
-2837 3286 m
-2874 3286 l
-2874 3287 l
-2837 3287 l
-2836 3287 m
-2876 3287 l
-2876 3288 l
-2836 3288 l
-2836 3288 m
-2878 3288 l
-2878 3289 l
-2836 3289 l
-2835 3289 m
-2880 3289 l
-2880 3290 l
-2835 3290 l
-2835 3290 m
-2882 3290 l
-2882 3291 l
-2835 3291 l
-2834 3291 m
-2883 3291 l
-2883 3292 l
-2834 3292 l
-2834 3292 m
-2885 3292 l
-2885 3293 l
-2834 3293 l
-2833 3293 m
-2887 3293 l
-2887 3294 l
-2833 3294 l
-2832 3294 m
-2889 3294 l
-2889 3295 l
-2832 3295 l
-2832 3295 m
-2891 3295 l
-2891 3296 l
-2832 3296 l
-2831 3296 m
-2892 3296 l
-2892 3297 l
-2831 3297 l
-2831 3297 m
-2894 3297 l
-2894 3298 l
-2831 3298 l
-2830 3298 m
-2896 3298 l
-2896 3299 l
-2830 3299 l
-2830 3299 m
-2898 3299 l
-2898 3300 l
-2830 3300 l
-2829 3300 m
-2900 3300 l
-2900 3301 l
-2829 3301 l
-2829 3301 m
-2902 3301 l
-2902 3302 l
-2829 3302 l
-2828 3302 m
-2903 3302 l
-2903 3303 l
-2828 3303 l
-2827 3303 m
-2905 3303 l
-2905 3304 l
-2827 3304 l
-2827 3304 m
-2907 3304 l
-2907 3305 l
-2827 3305 l
-2826 3305 m
-2909 3305 l
-2909 3306 l
-2826 3306 l
-2826 3306 m
-2911 3306 l
-2911 3307 l
-2826 3307 l
-2825 3307 m
-2912 3307 l
-2912 3308 l
-2825 3308 l
-2825 3308 m
-2914 3308 l
-2914 3309 l
-2825 3309 l
-2824 3309 m
-2916 3309 l
-2916 3310 l
-2824 3310 l
-2824 3310 m
-2918 3310 l
-2918 3311 l
-2824 3311 l
-2823 3311 m
-2920 3311 l
-2920 3312 l
-2823 3312 l
-2822 3312 m
-2921 3312 l
-2921 3313 l
-2822 3313 l
-2822 3313 m
-2923 3313 l
-2923 3314 l
-2822 3314 l
-2821 3314 m
-2925 3314 l
-2925 3315 l
-2821 3315 l
-2821 3315 m
-2927 3315 l
-2927 3316 l
-2821 3316 l
-2820 3316 m
-2929 3316 l
-2929 3317 l
-2820 3317 l
-2820 3317 m
-2930 3317 l
-2930 3318 l
-2820 3318 l
-2819 3318 m
-2932 3318 l
-2932 3319 l
-2819 3319 l
-2819 3319 m
-2934 3319 l
-2934 3320 l
-2819 3320 l
-2818 3320 m
-2936 3320 l
-2936 3321 l
-2818 3321 l
-2817 3321 m
-2938 3321 l
-2938 3322 l
-2817 3322 l
-2817 3322 m
-2939 3322 l
-2939 3323 l
-2817 3323 l
-2816 3323 m
-2941 3323 l
-2941 3324 l
-2816 3324 l
-2816 3324 m
-2943 3324 l
-2943 3325 l
-2816 3325 l
-2815 3325 m
-2945 3325 l
-2945 3326 l
-2815 3326 l
-2815 3326 m
-2947 3326 l
-2947 3327 l
-2815 3327 l
-2814 3327 m
-2949 3327 l
-2949 3328 l
-2814 3328 l
-2814 3328 m
-2950 3328 l
-2950 3329 l
-2814 3329 l
-2813 3329 m
-2952 3329 l
-2952 3330 l
-2813 3330 l
-2812 3330 m
-2954 3330 l
-2954 3331 l
-2812 3331 l
-2812 3331 m
-2956 3331 l
-2956 3332 l
-2812 3332 l
-2811 3332 m
-2958 3332 l
-2958 3333 l
-2811 3333 l
-2811 3333 m
-2959 3333 l
-2959 3334 l
-2811 3334 l
-2810 3334 m
-2961 3334 l
-2961 3335 l
-2810 3335 l
-2810 3335 m
-2963 3335 l
-2963 3336 l
-2810 3336 l
-2809 3336 m
-2965 3336 l
-2965 3337 l
-2809 3337 l
-2809 3337 m
-2967 3337 l
-2967 3338 l
-2809 3338 l
-2808 3338 m
-2968 3338 l
-2968 3339 l
-2808 3339 l
-2808 3339 m
-2970 3339 l
-2970 3340 l
-2808 3340 l
-2807 3340 m
-2972 3340 l
-2972 3341 l
-2807 3341 l
-2806 3341 m
-2974 3341 l
-2974 3342 l
-2806 3342 l
-2806 3342 m
-2976 3342 l
-2976 3343 l
-2806 3343 l
-2805 3343 m
-2977 3343 l
-2977 3344 l
-2805 3344 l
-2805 3344 m
-2979 3344 l
-2979 3345 l
-2805 3345 l
-2804 3345 m
-2981 3345 l
-2981 3346 l
-2804 3346 l
-2804 3346 m
-2983 3346 l
-2983 3347 l
-2804 3347 l
-2803 3347 m
-2985 3347 l
-2985 3348 l
-2803 3348 l
-2803 3348 m
-2986 3348 l
-2986 3349 l
-2803 3349 l
-2802 3349 m
-2988 3349 l
-2988 3350 l
-2802 3350 l
-2801 3350 m
-2990 3350 l
-2990 3351 l
-2801 3351 l
-2801 3351 m
-2992 3351 l
-2992 3352 l
-2801 3352 l
-2800 3352 m
-2994 3352 l
-2994 3353 l
-2800 3353 l
-2800 3353 m
-2995 3353 l
-2995 3354 l
-2800 3354 l
-2799 3354 m
-2997 3354 l
-2997 3355 l
-2799 3355 l
-2799 3355 m
-2999 3355 l
-2999 3356 l
-2799 3356 l
-2798 3356 m
-3001 3356 l
-3001 3357 l
-2798 3357 l
-2798 3357 m
-3003 3357 l
-3003 3358 l
-2798 3358 l
-2797 3358 m
-3005 3358 l
-3005 3359 l
-2797 3359 l
-2796 3359 m
-3006 3359 l
-3006 3360 l
-2796 3360 l
-2796 3360 m
-3008 3360 l
-3008 3361 l
-2796 3361 l
-2795 3361 m
-3010 3361 l
-3010 3362 l
-2795 3362 l
-2795 3362 m
-3012 3362 l
-3012 3363 l
-2795 3363 l
-2794 3363 m
-3014 3363 l
-3014 3364 l
-2794 3364 l
-2794 3364 m
-3015 3364 l
-3015 3365 l
-2794 3365 l
-2793 3365 m
-3017 3365 l
-3017 3366 l
-2793 3366 l
-2793 3366 m
-3019 3366 l
-3019 3367 l
-2793 3367 l
-2792 3367 m
-3021 3367 l
-3021 3368 l
-2792 3368 l
-2791 3368 m
-3023 3368 l
-3023 3369 l
-2791 3369 l
-2791 3369 m
-3024 3369 l
-3024 3370 l
-2791 3370 l
-2790 3370 m
-3026 3370 l
-3026 3371 l
-2790 3371 l
-2790 3371 m
-3028 3371 l
-3028 3372 l
-2790 3372 l
-2789 3372 m
-3030 3372 l
-3030 3373 l
-2789 3373 l
-2789 3373 m
-3032 3373 l
-3032 3374 l
-2789 3374 l
-2788 3374 m
-3033 3374 l
-3033 3375 l
-2788 3375 l
-2788 3375 m
-3035 3375 l
-3035 3376 l
-2788 3376 l
-2787 3376 m
-3037 3376 l
-3037 3377 l
-2787 3377 l
-2787 3377 m
-3039 3377 l
-3039 3378 l
-2787 3378 l
-2787 3378 m
-3041 3378 l
-3041 3379 l
-2787 3379 l
-2788 3379 m
-3042 3379 l
-3042 3380 l
-2788 3380 l
-2790 3380 m
-3044 3380 l
-3044 3381 l
-2790 3381 l
-2792 3381 m
-3046 3381 l
-3046 3382 l
-2792 3382 l
-2794 3382 m
-3048 3382 l
-3048 3383 l
-2794 3383 l
-2796 3383 m
-3050 3383 l
-3050 3384 l
-2796 3384 l
-2797 3384 m
-3052 3384 l
-3052 3385 l
-2797 3385 l
-2799 3385 m
-3053 3385 l
-3053 3386 l
-2799 3386 l
-2801 3386 m
-3055 3386 l
-3055 3387 l
-2801 3387 l
-2803 3387 m
-3057 3387 l
-3057 3388 l
-2803 3388 l
-2805 3388 m
-3059 3388 l
-3059 3389 l
-2805 3389 l
-2806 3389 m
-3061 3389 l
-3061 3390 l
-2806 3390 l
-2808 3390 m
-3062 3390 l
-3062 3391 l
-2808 3391 l
-2810 3391 m
-3064 3391 l
-3064 3392 l
-2810 3392 l
-2812 3392 m
-3066 3392 l
-3066 3393 l
-2812 3393 l
-2814 3393 m
-3068 3393 l
-3068 3394 l
-2814 3394 l
-2816 3394 m
-3070 3394 l
-3070 3395 l
-2816 3395 l
-2817 3395 m
-3071 3395 l
-3071 3396 l
-2817 3396 l
-2819 3396 m
-3073 3396 l
-3073 3397 l
-2819 3397 l
-2821 3397 m
-3075 3397 l
-3075 3398 l
-2821 3398 l
-2823 3398 m
-3077 3398 l
-3077 3399 l
-2823 3399 l
-2825 3399 m
-3079 3399 l
-3079 3400 l
-2825 3400 l
-2826 3400 m
-3080 3400 l
-3080 3401 l
-2826 3401 l
-2828 3401 m
-3082 3401 l
-3082 3402 l
-2828 3402 l
-2830 3402 m
-3084 3402 l
-3084 3403 l
-2830 3403 l
-2832 3403 m
-3086 3403 l
-3086 3404 l
-2832 3404 l
-2834 3404 m
-3088 3404 l
-3088 3405 l
-2834 3405 l
-2835 3405 m
-3089 3405 l
-3089 3406 l
-2835 3406 l
-2837 3406 m
-3091 3406 l
-3091 3407 l
-2837 3407 l
-2839 3407 m
-3093 3407 l
-3093 3408 l
-2839 3408 l
-2841 3408 m
-3095 3408 l
-3095 3409 l
-2841 3409 l
-2843 3409 m
-3097 3409 l
-3097 3410 l
-2843 3410 l
-2845 3410 m
-3098 3410 l
-3098 3411 l
-2845 3411 l
-2846 3411 m
-3099 3411 l
-3099 3412 l
-2846 3412 l
-2848 3412 m
-3098 3412 l
-3098 3413 l
-2848 3413 l
-2850 3413 m
-3097 3413 l
-3097 3414 l
-2850 3414 l
-2852 3414 m
-3097 3414 l
-3097 3415 l
-2852 3415 l
-2854 3415 m
-3096 3415 l
-3096 3416 l
-2854 3416 l
-2855 3416 m
-3096 3416 l
-3096 3417 l
-2855 3417 l
-2857 3417 m
-3095 3417 l
-3095 3418 l
-2857 3418 l
-2859 3418 m
-3095 3418 l
-3095 3419 l
-2859 3419 l
-2861 3419 m
-3094 3419 l
-3094 3420 l
-2861 3420 l
-2863 3420 m
-3093 3420 l
-3093 3421 l
-2863 3421 l
-2864 3421 m
-3093 3421 l
-3093 3422 l
-2864 3422 l
-2866 3422 m
-3092 3422 l
-3092 3423 l
-2866 3423 l
-2868 3423 m
-3092 3423 l
-3092 3424 l
-2868 3424 l
-2870 3424 m
-3091 3424 l
-3091 3425 l
-2870 3425 l
-2872 3425 m
-3091 3425 l
-3091 3426 l
-2872 3426 l
-2874 3426 m
-3090 3426 l
-3090 3427 l
-2874 3427 l
-2875 3427 m
-3090 3427 l
-3090 3428 l
-2875 3428 l
-2877 3428 m
-3089 3428 l
-3089 3429 l
-2877 3429 l
-2879 3429 m
-3088 3429 l
-3088 3430 l
-2879 3430 l
-2881 3430 m
-3088 3430 l
-3088 3431 l
-2881 3431 l
-2883 3431 m
-3087 3431 l
-3087 3432 l
-2883 3432 l
-2884 3432 m
-3087 3432 l
-3087 3433 l
-2884 3433 l
-2886 3433 m
-3086 3433 l
-3086 3434 l
-2886 3434 l
-2888 3434 m
-3086 3434 l
-3086 3435 l
-2888 3435 l
-2890 3435 m
-3085 3435 l
-3085 3436 l
-2890 3436 l
-2892 3436 m
-3085 3436 l
-3085 3437 l
-2892 3437 l
-2893 3437 m
-3084 3437 l
-3084 3438 l
-2893 3438 l
-2895 3438 m
-3083 3438 l
-3083 3439 l
-2895 3439 l
-2897 3439 m
-3083 3439 l
-3083 3440 l
-2897 3440 l
-2899 3440 m
-3082 3440 l
-3082 3441 l
-2899 3441 l
-2901 3441 m
-3082 3441 l
-3082 3442 l
-2901 3442 l
-2903 3442 m
-3081 3442 l
-3081 3443 l
-2903 3443 l
-2904 3443 m
-3081 3443 l
-3081 3444 l
-2904 3444 l
-2906 3444 m
-3080 3444 l
-3080 3445 l
-2906 3445 l
-2908 3445 m
-3080 3445 l
-3080 3446 l
-2908 3446 l
-2910 3446 m
-3079 3446 l
-3079 3447 l
-2910 3447 l
-2912 3447 m
-3078 3447 l
-3078 3448 l
-2912 3448 l
-2913 3448 m
-3078 3448 l
-3078 3449 l
-2913 3449 l
-2915 3449 m
-3077 3449 l
-3077 3450 l
-2915 3450 l
-2917 3450 m
-3077 3450 l
-3077 3451 l
-2917 3451 l
-2919 3451 m
-3076 3451 l
-3076 3452 l
-2919 3452 l
-2921 3452 m
-3076 3452 l
-3076 3453 l
-2921 3453 l
-2922 3453 m
-3075 3453 l
-3075 3454 l
-2922 3454 l
-2924 3454 m
-3075 3454 l
-3075 3455 l
-2924 3455 l
-2926 3455 m
-3074 3455 l
-3074 3456 l
-2926 3456 l
-2928 3456 m
-3073 3456 l
-3073 3457 l
-2928 3457 l
-2930 3457 m
-3073 3457 l
-3073 3458 l
-2930 3458 l
-2932 3458 m
-3072 3458 l
-3072 3459 l
-2932 3459 l
-2933 3459 m
-3072 3459 l
-3072 3460 l
-2933 3460 l
-2935 3460 m
-3071 3460 l
-3071 3461 l
-2935 3461 l
-2937 3461 m
-3071 3461 l
-3071 3462 l
-2937 3462 l
-2939 3462 m
-3070 3462 l
-3070 3463 l
-2939 3463 l
-2941 3463 m
-3070 3463 l
-3070 3464 l
-2941 3464 l
-2942 3464 m
-3069 3464 l
-3069 3465 l
-2942 3465 l
-2944 3465 m
-3068 3465 l
-3068 3466 l
-2944 3466 l
-2946 3466 m
-3068 3466 l
-3068 3467 l
-2946 3467 l
-2948 3467 m
-3067 3467 l
-3067 3468 l
-2948 3468 l
-2950 3468 m
-3067 3468 l
-3067 3469 l
-2950 3469 l
-2951 3469 m
-3066 3469 l
-3066 3470 l
-2951 3470 l
-2953 3470 m
-3066 3470 l
-3066 3471 l
-2953 3471 l
-2955 3471 m
-3065 3471 l
-3065 3472 l
-2955 3472 l
-2957 3472 m
-3065 3472 l
-3065 3473 l
-2957 3473 l
-2959 3473 m
-3064 3473 l
-3064 3474 l
-2959 3474 l
-2961 3474 m
-3063 3474 l
-3063 3475 l
-2961 3475 l
-2962 3475 m
-3063 3475 l
-3063 3476 l
-2962 3476 l
-2964 3476 m
-3062 3476 l
-3062 3477 l
-2964 3477 l
-2966 3477 m
-3062 3477 l
-3062 3478 l
-2966 3478 l
-2968 3478 m
-3061 3478 l
-3061 3479 l
-2968 3479 l
-2970 3479 m
-3061 3479 l
-3061 3480 l
-2970 3480 l
-2971 3480 m
-3060 3480 l
-3060 3481 l
-2971 3481 l
-2973 3481 m
-3060 3481 l
-3060 3482 l
-2973 3482 l
-2975 3482 m
-3059 3482 l
-3059 3483 l
-2975 3483 l
-2977 3483 m
-3058 3483 l
-3058 3484 l
-2977 3484 l
-2979 3484 m
-3058 3484 l
-3058 3485 l
-2979 3485 l
-2980 3485 m
-3057 3485 l
-3057 3486 l
-2980 3486 l
-2982 3486 m
-3057 3486 l
-3057 3487 l
-2982 3487 l
-2984 3487 m
-3056 3487 l
-3056 3488 l
-2984 3488 l
-2986 3488 m
-3056 3488 l
-3056 3489 l
-2986 3489 l
-2988 3489 m
-3055 3489 l
-3055 3490 l
-2988 3490 l
-2990 3490 m
-3055 3490 l
-3055 3491 l
-2990 3491 l
-2991 3491 m
-3054 3491 l
-3054 3492 l
-2991 3492 l
-2993 3492 m
-3053 3492 l
-3053 3493 l
-2993 3493 l
-2995 3493 m
-3053 3493 l
-3053 3494 l
-2995 3494 l
-2997 3494 m
-3052 3494 l
-3052 3495 l
-2997 3495 l
-2999 3495 m
-3052 3495 l
-3052 3496 l
-2999 3496 l
-3000 3496 m
-3051 3496 l
-3051 3497 l
-3000 3497 l
-3002 3497 m
-3051 3497 l
-3051 3498 l
-3002 3498 l
-3004 3498 m
-3050 3498 l
-3050 3499 l
-3004 3499 l
-3006 3499 m
-3050 3499 l
-3050 3500 l
-3006 3500 l
-3008 3500 m
-3049 3500 l
-3049 3501 l
-3008 3501 l
-3009 3501 m
-3048 3501 l
-3048 3502 l
-3009 3502 l
-3011 3502 m
-3048 3502 l
-3048 3503 l
-3011 3503 l
-3013 3503 m
-3047 3503 l
-3047 3504 l
-3013 3504 l
-3015 3504 m
-3047 3504 l
-3047 3505 l
-3015 3505 l
-3017 3505 m
-3046 3505 l
-3046 3506 l
-3017 3506 l
-3019 3506 m
-3046 3506 l
-3046 3507 l
-3019 3507 l
-3020 3507 m
-3045 3507 l
-3045 3508 l
-3020 3508 l
-3022 3508 m
-3045 3508 l
-3045 3509 l
-3022 3509 l
-3024 3509 m
-3044 3509 l
-3044 3510 l
-3024 3510 l
-3026 3510 m
-3043 3510 l
-3043 3511 l
-3026 3511 l
-3028 3511 m
-3043 3511 l
-3043 3512 l
-3028 3512 l
-3029 3512 m
-3042 3512 l
-3042 3513 l
-3029 3513 l
-3031 3513 m
-3042 3513 l
-3042 3514 l
-3031 3514 l
-3033 3514 m
-3041 3514 l
-3041 3515 l
-3033 3515 l
-3035 3515 m
-3041 3515 l
-3041 3516 l
-3035 3516 l
-3037 3516 m
-3040 3516 l
-3040 3517 l
-3037 3517 l
-Y
-2845.9 3271.5 m
-2787 3378 l
-3039 3517 l
-3098 3411 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2838 3329 m
-2904 3366 l
-S
-2967 3424 m
-2969 3411 l
-2966 3400 l
-2957 3390 l
-2953 3388 l
-2940 3386 l
-2929 3389 l
-2919 3398 l
-2917 3402 l
-2915 3415 l
-2918 3426 l
-2927 3436 l
-2931 3438 l
-2944 3440 l
-2955 3437 l
-2967 3424 l
-2977 3406 l
-2983 3386 l
-2982 3371 l
-2973 3361 l
-2966 3357 l
-2953 3354 l
-2945 3360 l
-S
-3000 3476 m
-2991 3466 l
-2990 3451 l
-2996 3431 l
-3002 3420 l
-3016 3404 l
-3029 3397 l
-3042 3399 l
-3050 3403 l
-3059 3413 l
-3060 3428 l
-3054 3448 l
-3047 3459 l
-3034 3476 l
-3020 3483 l
-3007 3480 l
-3000 3476 l
-S
-1 g
-3190 3488 m
-3192 3488 l
-3192 3489 l
-3190 3489 l
-3189 3489 m
-3193 3489 l
-3193 3490 l
-3189 3490 l
-3187 3490 m
-3194 3490 l
-3194 3491 l
-3187 3491 l
-3186 3491 m
-3195 3491 l
-3195 3492 l
-3186 3492 l
-3185 3492 m
-3196 3492 l
-3196 3493 l
-3185 3493 l
-3184 3493 m
-3197 3493 l
-3197 3494 l
-3184 3494 l
-3183 3494 m
-3197 3494 l
-3197 3495 l
-3183 3495 l
-3181 3495 m
-3198 3495 l
-3198 3496 l
-3181 3496 l
-3180 3496 m
-3199 3496 l
-3199 3497 l
-3180 3497 l
-3179 3497 m
-3200 3497 l
-3200 3498 l
-3179 3498 l
-3178 3498 m
-3201 3498 l
-3201 3499 l
-3178 3499 l
-3176 3499 m
-3202 3499 l
-3202 3500 l
-3176 3500 l
-3175 3500 m
-3202 3500 l
-3202 3501 l
-3175 3501 l
-3174 3501 m
-3203 3501 l
-3203 3502 l
-3174 3502 l
-3173 3502 m
-3204 3502 l
-3204 3503 l
-3173 3503 l
-3172 3503 m
-3205 3503 l
-3205 3504 l
-3172 3504 l
-3170 3504 m
-3206 3504 l
-3206 3505 l
-3170 3505 l
-3169 3505 m
-3207 3505 l
-3207 3506 l
-3169 3506 l
-3168 3506 m
-3207 3506 l
-3207 3507 l
-3168 3507 l
-3167 3507 m
-3208 3507 l
-3208 3508 l
-3167 3508 l
-3166 3508 m
-3209 3508 l
-3209 3509 l
-3166 3509 l
-3164 3509 m
-3210 3509 l
-3210 3510 l
-3164 3510 l
-3163 3510 m
-3211 3510 l
-3211 3511 l
-3163 3511 l
-3162 3511 m
-3212 3511 l
-3212 3512 l
-3162 3512 l
-3161 3512 m
-3212 3512 l
-3212 3513 l
-3161 3513 l
-3159 3513 m
-3213 3513 l
-3213 3514 l
-3159 3514 l
-3158 3514 m
-3214 3514 l
-3214 3515 l
-3158 3515 l
-3157 3515 m
-3215 3515 l
-3215 3516 l
-3157 3516 l
-3156 3516 m
-3216 3516 l
-3216 3517 l
-3156 3517 l
-3155 3517 m
-3216 3517 l
-3216 3518 l
-3155 3518 l
-3153 3518 m
-3217 3518 l
-3217 3519 l
-3153 3519 l
-3152 3519 m
-3218 3519 l
-3218 3520 l
-3152 3520 l
-3151 3520 m
-3219 3520 l
-3219 3521 l
-3151 3521 l
-3150 3521 m
-3220 3521 l
-3220 3522 l
-3150 3522 l
-3149 3522 m
-3221 3522 l
-3221 3523 l
-3149 3523 l
-3147 3523 m
-3221 3523 l
-3221 3524 l
-3147 3524 l
-3146 3524 m
-3222 3524 l
-3222 3525 l
-3146 3525 l
-3145 3525 m
-3223 3525 l
-3223 3526 l
-3145 3526 l
-3144 3526 m
-3224 3526 l
-3224 3527 l
-3144 3527 l
-3142 3527 m
-3225 3527 l
-3225 3528 l
-3142 3528 l
-3141 3528 m
-3226 3528 l
-3226 3529 l
-3141 3529 l
-3140 3529 m
-3226 3529 l
-3226 3530 l
-3140 3530 l
-3139 3530 m
-3227 3530 l
-3227 3531 l
-3139 3531 l
-3138 3531 m
-3228 3531 l
-3228 3532 l
-3138 3532 l
-3136 3532 m
-3229 3532 l
-3229 3533 l
-3136 3533 l
-3135 3533 m
-3230 3533 l
-3230 3534 l
-3135 3534 l
-3134 3534 m
-3231 3534 l
-3231 3535 l
-3134 3535 l
-3133 3535 m
-3231 3535 l
-3231 3536 l
-3133 3536 l
-3132 3536 m
-3232 3536 l
-3232 3537 l
-3132 3537 l
-3130 3537 m
-3233 3537 l
-3233 3538 l
-3130 3538 l
-3129 3538 m
-3234 3538 l
-3234 3539 l
-3129 3539 l
-3128 3539 m
-3235 3539 l
-3235 3540 l
-3128 3540 l
-3127 3540 m
-3236 3540 l
-3236 3541 l
-3127 3541 l
-3125 3541 m
-3236 3541 l
-3236 3542 l
-3125 3542 l
-3124 3542 m
-3237 3542 l
-3237 3543 l
-3124 3543 l
-3123 3543 m
-3238 3543 l
-3238 3544 l
-3123 3544 l
-3122 3544 m
-3239 3544 l
-3239 3545 l
-3122 3545 l
-3121 3545 m
-3240 3545 l
-3240 3546 l
-3121 3546 l
-3119 3546 m
-3240 3546 l
-3240 3547 l
-3119 3547 l
-3118 3547 m
-3241 3547 l
-3241 3548 l
-3118 3548 l
-3117 3548 m
-3242 3548 l
-3242 3549 l
-3117 3549 l
-3116 3549 m
-3243 3549 l
-3243 3550 l
-3116 3550 l
-3115 3550 m
-3244 3550 l
-3244 3551 l
-3115 3551 l
-3113 3551 m
-3245 3551 l
-3245 3552 l
-3113 3552 l
-3112 3552 m
-3245 3552 l
-3245 3553 l
-3112 3553 l
-3111 3553 m
-3246 3553 l
-3246 3554 l
-3111 3554 l
-3110 3554 m
-3247 3554 l
-3247 3555 l
-3110 3555 l
-3108 3555 m
-3248 3555 l
-3248 3556 l
-3108 3556 l
-3107 3556 m
-3249 3556 l
-3249 3557 l
-3107 3557 l
-3106 3557 m
-3250 3557 l
-3250 3558 l
-3106 3558 l
-3105 3558 m
-3250 3558 l
-3250 3559 l
-3105 3559 l
-3104 3559 m
-3251 3559 l
-3251 3560 l
-3104 3560 l
-3102 3560 m
-3252 3560 l
-3252 3561 l
-3102 3561 l
-3101 3561 m
-3253 3561 l
-3253 3562 l
-3101 3562 l
-3100 3562 m
-3254 3562 l
-3254 3563 l
-3100 3563 l
-3099 3563 m
-3255 3563 l
-3255 3564 l
-3099 3564 l
-3098 3564 m
-3255 3564 l
-3255 3565 l
-3098 3565 l
-3098 3565 m
-3256 3565 l
-3256 3566 l
-3098 3566 l
-3098 3566 m
-3257 3566 l
-3257 3567 l
-3098 3567 l
-3099 3567 m
-3258 3567 l
-3258 3568 l
-3099 3568 l
-3100 3568 m
-3259 3568 l
-3259 3569 l
-3100 3569 l
-3101 3569 m
-3260 3569 l
-3260 3570 l
-3101 3570 l
-3102 3570 m
-3260 3570 l
-3260 3571 l
-3102 3571 l
-3102 3571 m
-3261 3571 l
-3261 3572 l
-3102 3572 l
-3103 3572 m
-3262 3572 l
-3262 3573 l
-3103 3573 l
-3104 3573 m
-3263 3573 l
-3263 3574 l
-3104 3574 l
-3105 3574 m
-3264 3574 l
-3264 3575 l
-3105 3575 l
-3106 3575 m
-3265 3575 l
-3265 3576 l
-3106 3576 l
-3107 3576 m
-3265 3576 l
-3265 3577 l
-3107 3577 l
-3107 3577 m
-3266 3577 l
-3266 3578 l
-3107 3578 l
-3108 3578 m
-3267 3578 l
-3267 3579 l
-3108 3579 l
-3109 3579 m
-3268 3579 l
-3268 3580 l
-3109 3580 l
-3110 3580 m
-3269 3580 l
-3269 3581 l
-3110 3581 l
-3111 3581 m
-3269 3581 l
-3269 3582 l
-3111 3582 l
-3111 3582 m
-3270 3582 l
-3270 3583 l
-3111 3583 l
-3112 3583 m
-3271 3583 l
-3271 3584 l
-3112 3584 l
-3113 3584 m
-3272 3584 l
-3272 3585 l
-3113 3585 l
-3114 3585 m
-3273 3585 l
-3273 3586 l
-3114 3586 l
-3115 3586 m
-3274 3586 l
-3274 3587 l
-3115 3587 l
-3116 3587 m
-3274 3587 l
-3274 3588 l
-3116 3588 l
-3116 3588 m
-3275 3588 l
-3275 3589 l
-3116 3589 l
-3117 3589 m
-3276 3589 l
-3276 3590 l
-3117 3590 l
-3118 3590 m
-3277 3590 l
-3277 3591 l
-3118 3591 l
-3119 3591 m
-3278 3591 l
-3278 3592 l
-3119 3592 l
-3120 3592 m
-3279 3592 l
-3279 3594 l
-3120 3594 l
-3121 3594 m
-3280 3594 l
-3280 3595 l
-3121 3595 l
-3122 3595 m
-3281 3595 l
-3281 3596 l
-3122 3596 l
-3123 3596 m
-3282 3596 l
-3282 3597 l
-3123 3597 l
-3124 3597 m
-3283 3597 l
-3283 3598 l
-3124 3598 l
-3125 3598 m
-3284 3598 l
-3284 3600 l
-3125 3600 l
-3126 3600 m
-3285 3600 l
-3285 3601 l
-3126 3601 l
-3127 3601 m
-3286 3601 l
-3286 3602 l
-3127 3602 l
-3128 3602 m
-3287 3602 l
-3287 3603 l
-3128 3603 l
-3129 3603 m
-3288 3603 l
-3288 3604 l
-3129 3604 l
-3130 3604 m
-3289 3604 l
-3289 3606 l
-3130 3606 l
-3131 3606 m
-3290 3606 l
-3290 3607 l
-3131 3607 l
-3132 3607 m
-3291 3607 l
-3291 3608 l
-3132 3608 l
-3133 3608 m
-3292 3608 l
-3292 3609 l
-3133 3609 l
-3134 3609 m
-3293 3609 l
-3293 3610 l
-3134 3610 l
-3134 3610 m
-3294 3610 l
-3294 3611 l
-3134 3611 l
-3135 3611 m
-3294 3611 l
-3294 3612 l
-3135 3612 l
-3136 3612 m
-3295 3612 l
-3295 3613 l
-3136 3613 l
-3137 3613 m
-3296 3613 l
-3296 3614 l
-3137 3614 l
-3138 3614 m
-3297 3614 l
-3297 3615 l
-3138 3615 l
-3139 3615 m
-3298 3615 l
-3298 3617 l
-3139 3617 l
-3140 3617 m
-3299 3617 l
-3299 3618 l
-3140 3618 l
-3141 3618 m
-3300 3618 l
-3300 3619 l
-3141 3619 l
-3142 3619 m
-3301 3619 l
-3301 3620 l
-3142 3620 l
-3143 3620 m
-3302 3620 l
-3302 3621 l
-3143 3621 l
-3143 3621 m
-3303 3621 l
-3303 3622 l
-3143 3622 l
-3144 3622 m
-3303 3622 l
-3303 3623 l
-3144 3623 l
-3145 3623 m
-3304 3623 l
-3304 3624 l
-3145 3624 l
-3146 3624 m
-3305 3624 l
-3305 3625 l
-3146 3625 l
-3147 3625 m
-3306 3625 l
-3306 3626 l
-3147 3626 l
-3148 3626 m
-3307 3626 l
-3307 3627 l
-3148 3627 l
-3148 3627 m
-3308 3627 l
-3308 3628 l
-3148 3628 l
-3149 3628 m
-3308 3628 l
-3308 3629 l
-3149 3629 l
-3150 3629 m
-3309 3629 l
-3309 3630 l
-3150 3630 l
-3151 3630 m
-3310 3630 l
-3310 3631 l
-3151 3631 l
-3152 3631 m
-3311 3631 l
-3311 3632 l
-3152 3632 l
-3152 3632 m
-3312 3632 l
-3312 3633 l
-3152 3633 l
-3153 3633 m
-3313 3633 l
-3313 3634 l
-3153 3634 l
-3154 3634 m
-3313 3634 l
-3313 3635 l
-3154 3635 l
-3155 3635 m
-3314 3635 l
-3314 3636 l
-3155 3636 l
-3156 3636 m
-3315 3636 l
-3315 3637 l
-3156 3637 l
-3157 3637 m
-3316 3637 l
-3316 3638 l
-3157 3638 l
-3157 3638 m
-3317 3638 l
-3317 3639 l
-3157 3639 l
-3158 3639 m
-3318 3639 l
-3318 3640 l
-3158 3640 l
-3159 3640 m
-3318 3640 l
-3318 3641 l
-3159 3641 l
-3160 3641 m
-3319 3641 l
-3319 3642 l
-3160 3642 l
-3161 3642 m
-3320 3642 l
-3320 3643 l
-3161 3643 l
-3162 3643 m
-3321 3643 l
-3321 3644 l
-3162 3644 l
-3162 3644 m
-3322 3644 l
-3322 3645 l
-3162 3645 l
-3163 3645 m
-3322 3645 l
-3322 3646 l
-3163 3646 l
-3164 3646 m
-3323 3646 l
-3323 3647 l
-3164 3647 l
-3165 3647 m
-3324 3647 l
-3324 3648 l
-3165 3648 l
-3166 3648 m
-3325 3648 l
-3325 3649 l
-3166 3649 l
-3166 3649 m
-3326 3649 l
-3326 3650 l
-3166 3650 l
-3167 3650 m
-3327 3650 l
-3327 3651 l
-3167 3651 l
-3168 3651 m
-3327 3651 l
-3327 3652 l
-3168 3652 l
-3169 3652 m
-3328 3652 l
-3328 3653 l
-3169 3653 l
-3170 3653 m
-3329 3653 l
-3329 3654 l
-3170 3654 l
-3171 3654 m
-3330 3654 l
-3330 3655 l
-3171 3655 l
-3171 3655 m
-3331 3655 l
-3331 3656 l
-3171 3656 l
-3172 3656 m
-3332 3656 l
-3332 3657 l
-3172 3657 l
-3173 3657 m
-3332 3657 l
-3332 3658 l
-3173 3658 l
-3174 3658 m
-3333 3658 l
-3333 3659 l
-3174 3659 l
-3175 3659 m
-3334 3659 l
-3334 3660 l
-3175 3660 l
-3175 3660 m
-3335 3660 l
-3335 3661 l
-3175 3661 l
-3176 3661 m
-3336 3661 l
-3336 3662 l
-3176 3662 l
-3177 3662 m
-3337 3662 l
-3337 3663 l
-3177 3663 l
-3178 3663 m
-3337 3663 l
-3337 3664 l
-3178 3664 l
-3179 3664 m
-3338 3664 l
-3338 3665 l
-3179 3665 l
-3180 3665 m
-3339 3665 l
-3339 3666 l
-3180 3666 l
-3180 3666 m
-3340 3666 l
-3340 3667 l
-3180 3667 l
-3181 3667 m
-3341 3667 l
-3341 3668 l
-3181 3668 l
-3182 3668 m
-3342 3668 l
-3342 3669 l
-3182 3669 l
-3183 3669 m
-3342 3669 l
-3342 3670 l
-3183 3670 l
-3184 3670 m
-3343 3670 l
-3343 3671 l
-3184 3671 l
-3184 3671 m
-3344 3671 l
-3344 3672 l
-3184 3672 l
-3185 3672 m
-3345 3672 l
-3345 3673 l
-3185 3673 l
-3186 3673 m
-3346 3673 l
-3346 3674 l
-3186 3674 l
-3187 3674 m
-3347 3674 l
-3347 3675 l
-3187 3675 l
-3188 3675 m
-3347 3675 l
-3347 3676 l
-3188 3676 l
-3189 3676 m
-3348 3676 l
-3348 3677 l
-3189 3677 l
-3189 3677 m
-3349 3677 l
-3349 3678 l
-3189 3678 l
-3190 3678 m
-3350 3678 l
-3350 3679 l
-3190 3679 l
-3191 3679 m
-3351 3679 l
-3351 3680 l
-3191 3680 l
-3192 3680 m
-3351 3680 l
-3351 3681 l
-3192 3681 l
-3193 3681 m
-3352 3681 l
-3352 3682 l
-3193 3682 l
-3194 3682 m
-3353 3682 l
-3353 3683 l
-3194 3683 l
-3194 3683 m
-3354 3683 l
-3354 3684 l
-3194 3684 l
-3195 3684 m
-3355 3684 l
-3355 3685 l
-3195 3685 l
-3196 3685 m
-3356 3685 l
-3356 3686 l
-3196 3686 l
-3197 3686 m
-3356 3686 l
-3356 3687 l
-3197 3687 l
-3198 3687 m
-3357 3687 l
-3357 3688 l
-3198 3688 l
-3198 3688 m
-3358 3688 l
-3358 3689 l
-3198 3689 l
-3199 3689 m
-3359 3689 l
-3359 3690 l
-3199 3690 l
-3200 3690 m
-3360 3690 l
-3360 3691 l
-3200 3691 l
-3201 3691 m
-3361 3691 l
-3361 3692 l
-3201 3692 l
-3202 3692 m
-3361 3692 l
-3361 3693 l
-3202 3693 l
-3203 3693 m
-3362 3693 l
-3362 3694 l
-3203 3694 l
-3203 3694 m
-3363 3694 l
-3363 3695 l
-3203 3695 l
-3204 3695 m
-3364 3695 l
-3364 3696 l
-3204 3696 l
-3205 3696 m
-3365 3696 l
-3365 3697 l
-3205 3697 l
-3206 3697 m
-3366 3697 l
-3366 3698 l
-3206 3698 l
-3207 3698 m
-3366 3698 l
-3366 3699 l
-3207 3699 l
-3207 3699 m
-3367 3699 l
-3367 3700 l
-3207 3700 l
-3208 3700 m
-3368 3700 l
-3368 3701 l
-3208 3701 l
-3209 3701 m
-3369 3701 l
-3369 3702 l
-3209 3702 l
-3210 3702 m
-3370 3702 l
-3370 3703 l
-3210 3703 l
-3211 3703 m
-3371 3703 l
-3371 3704 l
-3211 3704 l
-3212 3704 m
-3371 3704 l
-3371 3705 l
-3212 3705 l
-3212 3705 m
-3372 3705 l
-3372 3706 l
-3212 3706 l
-3213 3706 m
-3373 3706 l
-3373 3707 l
-3213 3707 l
-3214 3707 m
-3374 3707 l
-3374 3708 l
-3214 3708 l
-3215 3708 m
-3375 3708 l
-3375 3709 l
-3215 3709 l
-3216 3709 m
-3375 3709 l
-3375 3710 l
-3216 3710 l
-3216 3710 m
-3375 3710 l
-3375 3711 l
-3216 3711 l
-3217 3711 m
-3374 3711 l
-3374 3712 l
-3217 3712 l
-3218 3712 m
-3373 3712 l
-3373 3713 l
-3218 3713 l
-3219 3713 m
-3372 3713 l
-3372 3714 l
-3219 3714 l
-3220 3714 m
-3371 3714 l
-3371 3715 l
-3220 3715 l
-3221 3715 m
-3369 3715 l
-3369 3716 l
-3221 3716 l
-3221 3716 m
-3368 3716 l
-3368 3717 l
-3221 3717 l
-3222 3717 m
-3367 3717 l
-3367 3718 l
-3222 3718 l
-3223 3718 m
-3366 3718 l
-3366 3719 l
-3223 3719 l
-3224 3719 m
-3365 3719 l
-3365 3720 l
-3224 3720 l
-3225 3720 m
-3363 3720 l
-3363 3721 l
-3225 3721 l
-3226 3721 m
-3362 3721 l
-3362 3722 l
-3226 3722 l
-3226 3722 m
-3361 3722 l
-3361 3723 l
-3226 3723 l
-3227 3723 m
-3360 3723 l
-3360 3724 l
-3227 3724 l
-3228 3724 m
-3359 3724 l
-3359 3725 l
-3228 3725 l
-3229 3725 m
-3357 3725 l
-3357 3726 l
-3229 3726 l
-3230 3726 m
-3356 3726 l
-3356 3727 l
-3230 3727 l
-3230 3727 m
-3355 3727 l
-3355 3728 l
-3230 3728 l
-3231 3728 m
-3354 3728 l
-3354 3729 l
-3231 3729 l
-3232 3729 m
-3353 3729 l
-3353 3730 l
-3232 3730 l
-3233 3730 m
-3351 3730 l
-3351 3731 l
-3233 3731 l
-3234 3731 m
-3350 3731 l
-3350 3732 l
-3234 3732 l
-3235 3732 m
-3349 3732 l
-3349 3733 l
-3235 3733 l
-3235 3733 m
-3348 3733 l
-3348 3734 l
-3235 3734 l
-3236 3734 m
-3347 3734 l
-3347 3735 l
-3236 3735 l
-3237 3735 m
-3345 3735 l
-3345 3736 l
-3237 3736 l
-3238 3736 m
-3344 3736 l
-3344 3737 l
-3238 3737 l
-3239 3737 m
-3343 3737 l
-3343 3738 l
-3239 3738 l
-3239 3738 m
-3342 3738 l
-3342 3739 l
-3239 3739 l
-3240 3739 m
-3341 3739 l
-3341 3740 l
-3240 3740 l
-3241 3740 m
-3339 3740 l
-3339 3741 l
-3241 3741 l
-3242 3741 m
-3338 3741 l
-3338 3742 l
-3242 3742 l
-3243 3742 m
-3337 3742 l
-3337 3743 l
-3243 3743 l
-3244 3743 m
-3336 3743 l
-3336 3744 l
-3244 3744 l
-3244 3744 m
-3335 3744 l
-3335 3745 l
-3244 3745 l
-3245 3745 m
-3333 3745 l
-3333 3746 l
-3245 3746 l
-3246 3746 m
-3332 3746 l
-3332 3747 l
-3246 3747 l
-3247 3747 m
-3331 3747 l
-3331 3748 l
-3247 3748 l
-3248 3748 m
-3330 3748 l
-3330 3749 l
-3248 3749 l
-3248 3749 m
-3328 3749 l
-3328 3750 l
-3248 3750 l
-3249 3750 m
-3327 3750 l
-3327 3751 l
-3249 3751 l
-3250 3751 m
-3326 3751 l
-3326 3752 l
-3250 3752 l
-3251 3752 m
-3325 3752 l
-3325 3753 l
-3251 3753 l
-3252 3753 m
-3324 3753 l
-3324 3754 l
-3252 3754 l
-3253 3754 m
-3322 3754 l
-3322 3755 l
-3253 3755 l
-3253 3755 m
-3321 3755 l
-3321 3756 l
-3253 3756 l
-3254 3756 m
-3320 3756 l
-3320 3757 l
-3254 3757 l
-3255 3757 m
-3319 3757 l
-3319 3758 l
-3255 3758 l
-3256 3758 m
-3318 3758 l
-3318 3759 l
-3256 3759 l
-3257 3759 m
-3316 3759 l
-3316 3760 l
-3257 3760 l
-3258 3760 m
-3315 3760 l
-3315 3761 l
-3258 3761 l
-3258 3761 m
-3314 3761 l
-3314 3762 l
-3258 3762 l
-3259 3762 m
-3313 3762 l
-3313 3763 l
-3259 3763 l
-3260 3763 m
-3312 3763 l
-3312 3764 l
-3260 3764 l
-3261 3764 m
-3310 3764 l
-3310 3765 l
-3261 3765 l
-3262 3765 m
-3309 3765 l
-3309 3766 l
-3262 3766 l
-3262 3766 m
-3308 3766 l
-3308 3767 l
-3262 3767 l
-3263 3767 m
-3307 3767 l
-3307 3768 l
-3263 3768 l
-3264 3768 m
-3306 3768 l
-3306 3769 l
-3264 3769 l
-3265 3769 m
-3304 3769 l
-3304 3770 l
-3265 3770 l
-3266 3770 m
-3303 3770 l
-3303 3771 l
-3266 3771 l
-3267 3771 m
-3302 3771 l
-3302 3772 l
-3267 3772 l
-3267 3772 m
-3301 3772 l
-3301 3773 l
-3267 3773 l
-3268 3773 m
-3300 3773 l
-3300 3774 l
-3268 3774 l
-3269 3774 m
-3298 3774 l
-3298 3775 l
-3269 3775 l
-3270 3775 m
-3297 3775 l
-3297 3776 l
-3270 3776 l
-3271 3776 m
-3296 3776 l
-3296 3777 l
-3271 3777 l
-3271 3777 m
-3295 3777 l
-3295 3778 l
-3271 3778 l
-3272 3778 m
-3294 3778 l
-3294 3779 l
-3272 3779 l
-3273 3779 m
-3292 3779 l
-3292 3780 l
-3273 3780 l
-3274 3780 m
-3291 3780 l
-3291 3781 l
-3274 3781 l
-3275 3781 m
-3290 3781 l
-3290 3782 l
-3275 3782 l
-3276 3782 m
-3289 3782 l
-3289 3783 l
-3276 3783 l
-3276 3783 m
-3288 3783 l
-3288 3784 l
-3276 3784 l
-3277 3784 m
-3286 3784 l
-3286 3785 l
-3277 3785 l
-3278 3785 m
-3285 3785 l
-3285 3786 l
-3278 3786 l
-3279 3786 m
-3284 3786 l
-3284 3787 l
-3279 3787 l
-3280 3787 m
-3283 3787 l
-3283 3788 l
-3280 3788 l
-Y
-3191.3 3488.2 m
-3098 3565 l
-3281 3788 l
-3375 3710 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3163 3539 m
-3211 3597 l
-S
-3235 3685 m
-3226 3687 l
-3214 3680 l
-3209 3674 l
-3204 3662 l
-3209 3647 l
-3222 3631 l
-3238 3617 l
-3254 3610 l
-3266 3611 l
-3277 3618 l
-3279 3621 l
-3284 3634 l
-3283 3645 l
-3276 3657 l
-3273 3659 l
-3260 3664 l
-3249 3663 l
-3238 3656 l
-3235 3653 l
-3230 3640 l
-3231 3629 l
-3238 3617 l
-S
-3260 3735 m
-3255 3723 l
-3259 3708 l
-3273 3692 l
-3282 3684 l
-3301 3674 l
-3316 3672 l
-3327 3679 l
-3333 3686 l
-3337 3698 l
-3333 3712 l
-3320 3729 l
-3310 3737 l
-3291 3747 l
-3276 3749 l
-3265 3742 l
-3260 3735 l
-S
-1 g
-3431 3818 m
-3434 3818 l
-3434 3819 l
-3431 3819 l
-3427 3819 m
-3435 3819 l
-3435 3820 l
-3427 3820 l
-3424 3820 m
-3435 3820 l
-3435 3821 l
-3424 3821 l
-3421 3821 m
-3435 3821 l
-3435 3822 l
-3421 3822 l
-3417 3822 m
-3436 3822 l
-3436 3823 l
-3417 3823 l
-3414 3823 m
-3436 3823 l
-3436 3824 l
-3414 3824 l
-3411 3824 m
-3436 3824 l
-3436 3825 l
-3411 3825 l
-3407 3825 m
-3437 3825 l
-3437 3826 l
-3407 3826 l
-3404 3826 m
-3437 3826 l
-3437 3827 l
-3404 3827 l
-3401 3827 m
-3437 3827 l
-3437 3828 l
-3401 3828 l
-3397 3828 m
-3437 3828 l
-3437 3829 l
-3397 3829 l
-3394 3829 m
-3438 3829 l
-3438 3830 l
-3394 3830 l
-3391 3830 m
-3438 3830 l
-3438 3831 l
-3391 3831 l
-3387 3831 m
-3438 3831 l
-3438 3832 l
-3387 3832 l
-3384 3832 m
-3439 3832 l
-3439 3833 l
-3384 3833 l
-3381 3833 m
-3439 3833 l
-3439 3834 l
-3381 3834 l
-3377 3834 m
-3439 3834 l
-3439 3835 l
-3377 3835 l
-3374 3835 m
-3440 3835 l
-3440 3836 l
-3374 3836 l
-3371 3836 m
-3440 3836 l
-3440 3837 l
-3371 3837 l
-3367 3837 m
-3440 3837 l
-3440 3838 l
-3367 3838 l
-3364 3838 m
-3440 3838 l
-3440 3839 l
-3364 3839 l
-3361 3839 m
-3441 3839 l
-3441 3840 l
-3361 3840 l
-3357 3840 m
-3441 3840 l
-3441 3841 l
-3357 3841 l
-3354 3841 m
-3441 3841 l
-3441 3842 l
-3354 3842 l
-3351 3842 m
-3442 3842 l
-3442 3843 l
-3351 3843 l
-3347 3843 m
-3442 3843 l
-3442 3844 l
-3347 3844 l
-3344 3844 m
-3442 3844 l
-3442 3845 l
-3344 3845 l
-3341 3845 m
-3442 3845 l
-3442 3846 l
-3341 3846 l
-3337 3846 m
-3443 3846 l
-3443 3847 l
-3337 3847 l
-3334 3847 m
-3443 3847 l
-3443 3848 l
-3334 3848 l
-3331 3848 m
-3443 3848 l
-3443 3849 l
-3331 3849 l
-3327 3849 m
-3444 3849 l
-3444 3850 l
-3327 3850 l
-3324 3850 m
-3444 3850 l
-3444 3851 l
-3324 3851 l
-3321 3851 m
-3444 3851 l
-3444 3852 l
-3321 3852 l
-3318 3852 m
-3445 3852 l
-3445 3853 l
-3318 3853 l
-3318 3853 m
-3445 3853 l
-3445 3856 l
-3318 3856 l
-3318 3856 m
-3446 3856 l
-3446 3857 l
-3318 3857 l
-3319 3857 m
-3446 3857 l
-3446 3859 l
-3319 3859 l
-3319 3859 m
-3447 3859 l
-3447 3860 l
-3319 3860 l
-3320 3860 m
-3447 3860 l
-3447 3862 l
-3320 3862 l
-3320 3862 m
-3448 3862 l
-3448 3864 l
-3320 3864 l
-3321 3864 m
-3448 3864 l
-3448 3866 l
-3321 3866 l
-3321 3866 m
-3449 3866 l
-3449 3867 l
-3321 3867 l
-3322 3867 m
-3449 3867 l
-3449 3869 l
-3322 3869 l
-3322 3869 m
-3450 3869 l
-3450 3870 l
-3322 3870 l
-3323 3870 m
-3450 3870 l
-3450 3872 l
-3323 3872 l
-3323 3872 m
-3451 3872 l
-3451 3874 l
-3323 3874 l
-3324 3874 m
-3451 3874 l
-3451 3876 l
-3324 3876 l
-3324 3876 m
-3452 3876 l
-3452 3877 l
-3324 3877 l
-3325 3877 m
-3452 3877 l
-3452 3879 l
-3325 3879 l
-3325 3879 m
-3453 3879 l
-3453 3880 l
-3325 3880 l
-3326 3880 m
-3453 3880 l
-3453 3882 l
-3326 3882 l
-3326 3882 m
-3454 3882 l
-3454 3884 l
-3326 3884 l
-3327 3884 m
-3454 3884 l
-3454 3886 l
-3327 3886 l
-3327 3886 m
-3455 3886 l
-3455 3887 l
-3327 3887 l
-3328 3887 m
-3455 3887 l
-3455 3889 l
-3328 3889 l
-3328 3889 m
-3456 3889 l
-3456 3891 l
-3328 3891 l
-3329 3891 m
-3456 3891 l
-3456 3892 l
-3329 3892 l
-3329 3892 m
-3457 3892 l
-3457 3894 l
-3329 3894 l
-3330 3894 m
-3457 3894 l
-3457 3896 l
-3330 3896 l
-3330 3896 m
-3458 3896 l
-3458 3897 l
-3330 3897 l
-3331 3897 m
-3458 3897 l
-3458 3899 l
-3331 3899 l
-3331 3899 m
-3459 3899 l
-3459 3901 l
-3331 3901 l
-3332 3901 m
-3459 3901 l
-3459 3902 l
-3332 3902 l
-3332 3902 m
-3460 3902 l
-3460 3904 l
-3332 3904 l
-3333 3904 m
-3460 3904 l
-3460 3906 l
-3333 3906 l
-3333 3906 m
-3461 3906 l
-3461 3907 l
-3333 3907 l
-3334 3907 m
-3461 3907 l
-3461 3909 l
-3334 3909 l
-3334 3909 m
-3462 3909 l
-3462 3911 l
-3334 3911 l
-3335 3911 m
-3462 3911 l
-3462 3913 l
-3335 3913 l
-3335 3913 m
-3463 3913 l
-3463 3914 l
-3335 3914 l
-3336 3914 m
-3463 3914 l
-3463 3916 l
-3336 3916 l
-3336 3916 m
-3464 3916 l
-3464 3917 l
-3336 3917 l
-3337 3917 m
-3464 3917 l
-3464 3919 l
-3337 3919 l
-3337 3919 m
-3465 3919 l
-3465 3921 l
-3337 3921 l
-3338 3921 m
-3465 3921 l
-3465 3923 l
-3338 3923 l
-3338 3923 m
-3466 3923 l
-3466 3924 l
-3338 3924 l
-3339 3924 m
-3466 3924 l
-3466 3926 l
-3339 3926 l
-3339 3926 m
-3467 3926 l
-3467 3928 l
-3339 3928 l
-3340 3928 m
-3467 3928 l
-3467 3929 l
-3340 3929 l
-3340 3929 m
-3468 3929 l
-3468 3931 l
-3340 3931 l
-3341 3931 m
-3468 3931 l
-3468 3933 l
-3341 3933 l
-3341 3933 m
-3469 3933 l
-3469 3934 l
-3341 3934 l
-3342 3934 m
-3469 3934 l
-3469 3936 l
-3342 3936 l
-3342 3936 m
-3470 3936 l
-3470 3938 l
-3342 3938 l
-3343 3938 m
-3470 3938 l
-3470 3939 l
-3343 3939 l
-3343 3939 m
-3471 3939 l
-3471 3941 l
-3343 3941 l
-3344 3941 m
-3471 3941 l
-3471 3943 l
-3344 3943 l
-3344 3943 m
-3472 3943 l
-3472 3944 l
-3344 3944 l
-3345 3944 m
-3472 3944 l
-3472 3946 l
-3345 3946 l
-3345 3946 m
-3473 3946 l
-3473 3948 l
-3345 3948 l
-3346 3948 m
-3473 3948 l
-3473 3949 l
-3346 3949 l
-3346 3949 m
-3474 3949 l
-3474 3951 l
-3346 3951 l
-3347 3951 m
-3474 3951 l
-3474 3953 l
-3347 3953 l
-3347 3953 m
-3475 3953 l
-3475 3954 l
-3347 3954 l
-3348 3954 m
-3475 3954 l
-3475 3956 l
-3348 3956 l
-3348 3956 m
-3476 3956 l
-3476 3958 l
-3348 3958 l
-3349 3958 m
-3476 3958 l
-3476 3959 l
-3349 3959 l
-3349 3959 m
-3477 3959 l
-3477 3961 l
-3349 3961 l
-3350 3961 m
-3477 3961 l
-3477 3963 l
-3350 3963 l
-3350 3963 m
-3478 3963 l
-3478 3965 l
-3350 3965 l
-3351 3965 m
-3478 3965 l
-3478 3966 l
-3351 3966 l
-3351 3966 m
-3479 3966 l
-3479 3968 l
-3351 3968 l
-3352 3968 m
-3479 3968 l
-3479 3970 l
-3352 3970 l
-3352 3970 m
-3480 3970 l
-3480 3971 l
-3352 3971 l
-3353 3971 m
-3480 3971 l
-3480 3973 l
-3353 3973 l
-3353 3973 m
-3481 3973 l
-3481 3975 l
-3353 3975 l
-3354 3975 m
-3481 3975 l
-3481 3976 l
-3354 3976 l
-3354 3976 m
-3482 3976 l
-3482 3978 l
-3354 3978 l
-3355 3978 m
-3482 3978 l
-3482 3980 l
-3355 3980 l
-3355 3980 m
-3483 3980 l
-3483 3981 l
-3355 3981 l
-3356 3981 m
-3483 3981 l
-3483 3983 l
-3356 3983 l
-3356 3983 m
-3484 3983 l
-3484 3985 l
-3356 3985 l
-3357 3985 m
-3484 3985 l
-3484 3986 l
-3357 3986 l
-3357 3986 m
-3485 3986 l
-3485 3988 l
-3357 3988 l
-3358 3988 m
-3485 3988 l
-3485 3990 l
-3358 3990 l
-3358 3990 m
-3486 3990 l
-3486 3991 l
-3358 3991 l
-3359 3991 m
-3486 3991 l
-3486 3993 l
-3359 3993 l
-3359 3993 m
-3487 3993 l
-3487 3995 l
-3359 3995 l
-3360 3995 m
-3487 3995 l
-3487 3996 l
-3360 3996 l
-3360 3996 m
-3488 3996 l
-3488 3998 l
-3360 3998 l
-3361 3998 m
-3488 3998 l
-3488 4000 l
-3361 4000 l
-3361 4000 m
-3489 4000 l
-3489 4002 l
-3361 4002 l
-3362 4002 m
-3489 4002 l
-3489 4003 l
-3362 4003 l
-3362 4003 m
-3490 4003 l
-3490 4005 l
-3362 4005 l
-3363 4005 m
-3490 4005 l
-3490 4006 l
-3363 4006 l
-3363 4006 m
-3491 4006 l
-3491 4008 l
-3363 4008 l
-3364 4008 m
-3491 4008 l
-3491 4010 l
-3364 4010 l
-3364 4010 m
-3492 4010 l
-3492 4012 l
-3364 4012 l
-3365 4012 m
-3492 4012 l
-3492 4013 l
-3365 4013 l
-3365 4013 m
-3493 4013 l
-3493 4015 l
-3365 4015 l
-3366 4015 m
-3493 4015 l
-3493 4016 l
-3366 4016 l
-3366 4016 m
-3494 4016 l
-3494 4018 l
-3366 4018 l
-3367 4018 m
-3494 4018 l
-3494 4020 l
-3367 4020 l
-3367 4020 m
-3495 4020 l
-3495 4022 l
-3367 4022 l
-3368 4022 m
-3495 4022 l
-3495 4023 l
-3368 4023 l
-3368 4023 m
-3496 4023 l
-3496 4025 l
-3368 4025 l
-3369 4025 m
-3496 4025 l
-3496 4026 l
-3369 4026 l
-3369 4026 m
-3497 4026 l
-3497 4029 l
-3369 4029 l
-3370 4029 m
-3497 4029 l
-3497 4030 l
-3370 4030 l
-3370 4030 m
-3498 4030 l
-3498 4032 l
-3370 4032 l
-3371 4032 m
-3498 4032 l
-3498 4033 l
-3371 4033 l
-3371 4033 m
-3499 4033 l
-3499 4035 l
-3371 4035 l
-3372 4035 m
-3499 4035 l
-3499 4037 l
-3372 4037 l
-3372 4037 m
-3500 4037 l
-3500 4039 l
-3372 4039 l
-3373 4039 m
-3500 4039 l
-3500 4040 l
-3373 4040 l
-3373 4040 m
-3501 4040 l
-3501 4042 l
-3373 4042 l
-3374 4042 m
-3501 4042 l
-3501 4043 l
-3374 4043 l
-3374 4043 m
-3502 4043 l
-3502 4045 l
-3374 4045 l
-3375 4045 m
-3502 4045 l
-3502 4047 l
-3375 4047 l
-3375 4047 m
-3503 4047 l
-3503 4049 l
-3375 4049 l
-3376 4049 m
-3503 4049 l
-3503 4050 l
-3376 4050 l
-3376 4050 m
-3504 4050 l
-3504 4052 l
-3376 4052 l
-3377 4052 m
-3504 4052 l
-3504 4053 l
-3377 4053 l
-3377 4053 m
-3505 4053 l
-3505 4055 l
-3377 4055 l
-3378 4055 m
-3505 4055 l
-3505 4057 l
-3378 4057 l
-3378 4057 m
-3506 4057 l
-3506 4059 l
-3378 4059 l
-3379 4059 m
-3506 4059 l
-3506 4060 l
-3379 4060 l
-3379 4060 m
-3507 4060 l
-3507 4062 l
-3379 4062 l
-3380 4062 m
-3507 4062 l
-3507 4063 l
-3380 4063 l
-3380 4063 m
-3508 4063 l
-3508 4066 l
-3380 4066 l
-3381 4066 m
-3508 4066 l
-3508 4067 l
-3381 4067 l
-3381 4067 m
-3509 4067 l
-3509 4069 l
-3381 4069 l
-3382 4069 m
-3509 4069 l
-3509 4070 l
-3382 4070 l
-3382 4070 m
-3510 4070 l
-3510 4072 l
-3382 4072 l
-3383 4072 m
-3510 4072 l
-3510 4073 l
-3383 4073 l
-3383 4073 m
-3511 4073 l
-3511 4076 l
-3383 4076 l
-3384 4076 m
-3511 4076 l
-3511 4077 l
-3384 4077 l
-3384 4077 m
-3512 4077 l
-3512 4079 l
-3384 4079 l
-3385 4079 m
-3512 4079 l
-3512 4080 l
-3385 4080 l
-3385 4080 m
-3513 4080 l
-3513 4082 l
-3385 4082 l
-3386 4082 m
-3513 4082 l
-3513 4083 l
-3386 4083 l
-3386 4083 m
-3514 4083 l
-3514 4086 l
-3386 4086 l
-3387 4086 m
-3514 4086 l
-3514 4087 l
-3387 4087 l
-3387 4087 m
-3515 4087 l
-3515 4089 l
-3387 4089 l
-3388 4089 m
-3515 4089 l
-3515 4090 l
-3388 4090 l
-3388 4090 m
-3516 4090 l
-3516 4092 l
-3388 4092 l
-3389 4092 m
-3516 4092 l
-3516 4093 l
-3389 4093 l
-3389 4093 m
-3517 4093 l
-3517 4094 l
-3389 4094 l
-3389 4094 m
-3516 4094 l
-3516 4095 l
-3389 4095 l
-3389 4095 m
-3513 4095 l
-3513 4096 l
-3389 4096 l
-3390 4096 m
-3510 4096 l
-3510 4097 l
-3390 4097 l
-3390 4097 m
-3507 4097 l
-3507 4098 l
-3390 4098 l
-3390 4098 m
-3503 4098 l
-3503 4099 l
-3390 4099 l
-3391 4099 m
-3500 4099 l
-3500 4100 l
-3391 4100 l
-3391 4100 m
-3497 4100 l
-3497 4101 l
-3391 4101 l
-3391 4101 m
-3493 4101 l
-3493 4102 l
-3391 4102 l
-3391 4102 m
-3490 4102 l
-3490 4103 l
-3391 4103 l
-3392 4103 m
-3487 4103 l
-3487 4104 l
-3392 4104 l
-3392 4104 m
-3483 4104 l
-3483 4105 l
-3392 4105 l
-3392 4105 m
-3480 4105 l
-3480 4106 l
-3392 4106 l
-3393 4106 m
-3477 4106 l
-3477 4107 l
-3393 4107 l
-3393 4107 m
-3473 4107 l
-3473 4108 l
-3393 4108 l
-3393 4108 m
-3470 4108 l
-3470 4109 l
-3393 4109 l
-3394 4109 m
-3467 4109 l
-3467 4110 l
-3394 4110 l
-3394 4110 m
-3463 4110 l
-3463 4111 l
-3394 4111 l
-3394 4111 m
-3460 4111 l
-3460 4112 l
-3394 4112 l
-3394 4112 m
-3457 4112 l
-3457 4113 l
-3394 4113 l
-3395 4113 m
-3454 4113 l
-3454 4114 l
-3395 4114 l
-3395 4114 m
-3450 4114 l
-3450 4115 l
-3395 4115 l
-3395 4115 m
-3447 4115 l
-3447 4116 l
-3395 4116 l
-3396 4116 m
-3444 4116 l
-3444 4117 l
-3396 4117 l
-3396 4117 m
-3440 4117 l
-3440 4118 l
-3396 4118 l
-3396 4118 m
-3437 4118 l
-3437 4119 l
-3396 4119 l
-3397 4119 m
-3434 4119 l
-3434 4120 l
-3397 4120 l
-3397 4120 m
-3430 4120 l
-3430 4121 l
-3397 4121 l
-3397 4121 m
-3427 4121 l
-3427 4122 l
-3397 4122 l
-3397 4122 m
-3424 4122 l
-3424 4123 l
-3397 4123 l
-3398 4123 m
-3420 4123 l
-3420 4124 l
-3398 4124 l
-3398 4124 m
-3417 4124 l
-3417 4125 l
-3398 4125 l
-3398 4125 m
-3414 4125 l
-3414 4126 l
-3398 4126 l
-3399 4126 m
-3410 4126 l
-3410 4127 l
-3399 4127 l
-3399 4127 m
-3407 4127 l
-3407 4128 l
-3399 4128 l
-3399 4128 m
-3404 4128 l
-3404 4129 l
-3399 4129 l
-Y
-3433.7 3818.2 m
-3318 3853 l
-3400 4129 l
-3516 4094 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3388 3854 m
-3409 3926 l
-S
-3372 3976 m
-3385 4020 l
-3410 3987 l
-3414 3999 l
-3420 4005 l
-3425 4008 l
-3438 4009 l
-3446 4006 l
-3457 3999 l
-3463 3988 l
-3463 3975 l
-3460 3963 l
-3452 3952 l
-3447 3949 l
-3438 3948 l
-S
-3401 4072 m
-3401 4059 l
-3411 4047 l
-3430 4037 l
-3442 4034 l
-3463 4032 l
-3477 4036 l
-3485 4047 l
-3487 4055 l
-3487 4068 l
-3477 4080 l
-3458 4090 l
-3446 4093 l
-3425 4095 l
-3411 4091 l
-3403 4080 l
-3401 4072 l
-S
-1 g
-3282 4627 m
-3285 4627 l
-3285 4628 l
-3282 4628 l
-3281 4628 m
-3286 4628 l
-3286 4629 l
-3281 4629 l
-3280 4629 m
-3287 4629 l
-3287 4630 l
-3280 4630 l
-3279 4630 m
-3288 4630 l
-3288 4631 l
-3279 4631 l
-3278 4631 m
-3290 4631 l
-3290 4632 l
-3278 4632 l
-3277 4632 m
-3291 4632 l
-3291 4633 l
-3277 4633 l
-3277 4633 m
-3292 4633 l
-3292 4634 l
-3277 4634 l
-3276 4634 m
-3293 4634 l
-3293 4635 l
-3276 4635 l
-3275 4635 m
-3294 4635 l
-3294 4636 l
-3275 4636 l
-3274 4636 m
-3296 4636 l
-3296 4637 l
-3274 4637 l
-3273 4637 m
-3297 4637 l
-3297 4638 l
-3273 4638 l
-3272 4638 m
-3298 4638 l
-3298 4639 l
-3272 4639 l
-3272 4639 m
-3299 4639 l
-3299 4640 l
-3272 4640 l
-3271 4640 m
-3300 4640 l
-3300 4641 l
-3271 4641 l
-3270 4641 m
-3302 4641 l
-3302 4642 l
-3270 4642 l
-3269 4642 m
-3303 4642 l
-3303 4643 l
-3269 4643 l
-3268 4643 m
-3304 4643 l
-3304 4644 l
-3268 4644 l
-3267 4644 m
-3305 4644 l
-3305 4645 l
-3267 4645 l
-3267 4645 m
-3306 4645 l
-3306 4646 l
-3267 4646 l
-3266 4646 m
-3308 4646 l
-3308 4647 l
-3266 4647 l
-3265 4647 m
-3309 4647 l
-3309 4648 l
-3265 4648 l
-3264 4648 m
-3310 4648 l
-3310 4649 l
-3264 4649 l
-3263 4649 m
-3311 4649 l
-3311 4650 l
-3263 4650 l
-3262 4650 m
-3312 4650 l
-3312 4651 l
-3262 4651 l
-3262 4651 m
-3314 4651 l
-3314 4652 l
-3262 4652 l
-3261 4652 m
-3315 4652 l
-3315 4653 l
-3261 4653 l
-3260 4653 m
-3316 4653 l
-3316 4654 l
-3260 4654 l
-3259 4654 m
-3317 4654 l
-3317 4655 l
-3259 4655 l
-3258 4655 m
-3318 4655 l
-3318 4656 l
-3258 4656 l
-3257 4656 m
-3320 4656 l
-3320 4657 l
-3257 4657 l
-3257 4657 m
-3321 4657 l
-3321 4658 l
-3257 4658 l
-3256 4658 m
-3322 4658 l
-3322 4659 l
-3256 4659 l
-3255 4659 m
-3323 4659 l
-3323 4660 l
-3255 4660 l
-3254 4660 m
-3324 4660 l
-3324 4661 l
-3254 4661 l
-3253 4661 m
-3326 4661 l
-3326 4662 l
-3253 4662 l
-3252 4662 m
-3327 4662 l
-3327 4663 l
-3252 4663 l
-3252 4663 m
-3328 4663 l
-3328 4664 l
-3252 4664 l
-3251 4664 m
-3329 4664 l
-3329 4665 l
-3251 4665 l
-3250 4665 m
-3330 4665 l
-3330 4666 l
-3250 4666 l
-3249 4666 m
-3332 4666 l
-3332 4667 l
-3249 4667 l
-3248 4667 m
-3333 4667 l
-3333 4668 l
-3248 4668 l
-3247 4668 m
-3334 4668 l
-3334 4669 l
-3247 4669 l
-3247 4669 m
-3335 4669 l
-3335 4670 l
-3247 4670 l
-3246 4670 m
-3336 4670 l
-3336 4671 l
-3246 4671 l
-3245 4671 m
-3338 4671 l
-3338 4672 l
-3245 4672 l
-3244 4672 m
-3339 4672 l
-3339 4673 l
-3244 4673 l
-3243 4673 m
-3340 4673 l
-3340 4674 l
-3243 4674 l
-3242 4674 m
-3341 4674 l
-3341 4675 l
-3242 4675 l
-3241 4675 m
-3342 4675 l
-3342 4676 l
-3241 4676 l
-3241 4676 m
-3344 4676 l
-3344 4677 l
-3241 4677 l
-3240 4677 m
-3345 4677 l
-3345 4678 l
-3240 4678 l
-3239 4678 m
-3346 4678 l
-3346 4679 l
-3239 4679 l
-3238 4679 m
-3347 4679 l
-3347 4680 l
-3238 4680 l
-3237 4680 m
-3348 4680 l
-3348 4681 l
-3237 4681 l
-3236 4681 m
-3350 4681 l
-3350 4682 l
-3236 4682 l
-3236 4682 m
-3351 4682 l
-3351 4683 l
-3236 4683 l
-3235 4683 m
-3352 4683 l
-3352 4684 l
-3235 4684 l
-3234 4684 m
-3353 4684 l
-3353 4685 l
-3234 4685 l
-3233 4685 m
-3354 4685 l
-3354 4686 l
-3233 4686 l
-3232 4686 m
-3356 4686 l
-3356 4687 l
-3232 4687 l
-3231 4687 m
-3357 4687 l
-3357 4688 l
-3231 4688 l
-3231 4688 m
-3358 4688 l
-3358 4689 l
-3231 4689 l
-3230 4689 m
-3359 4689 l
-3359 4690 l
-3230 4690 l
-3229 4690 m
-3360 4690 l
-3360 4691 l
-3229 4691 l
-3228 4691 m
-3362 4691 l
-3362 4692 l
-3228 4692 l
-3227 4692 m
-3363 4692 l
-3363 4693 l
-3227 4693 l
-3226 4693 m
-3364 4693 l
-3364 4694 l
-3226 4694 l
-3226 4694 m
-3365 4694 l
-3365 4695 l
-3226 4695 l
-3225 4695 m
-3366 4695 l
-3366 4696 l
-3225 4696 l
-3224 4696 m
-3368 4696 l
-3368 4697 l
-3224 4697 l
-3223 4697 m
-3369 4697 l
-3369 4698 l
-3223 4698 l
-3222 4698 m
-3370 4698 l
-3370 4699 l
-3222 4699 l
-3221 4699 m
-3371 4699 l
-3371 4700 l
-3221 4700 l
-3221 4700 m
-3372 4700 l
-3372 4701 l
-3221 4701 l
-3220 4701 m
-3374 4701 l
-3374 4702 l
-3220 4702 l
-3219 4702 m
-3375 4702 l
-3375 4703 l
-3219 4703 l
-3218 4703 m
-3376 4703 l
-3376 4704 l
-3218 4704 l
-3217 4704 m
-3376 4704 l
-3376 4705 l
-3217 4705 l
-3216 4705 m
-3376 4705 l
-3376 4706 l
-3216 4706 l
-3216 4706 m
-3375 4706 l
-3375 4707 l
-3216 4707 l
-3215 4707 m
-3374 4707 l
-3374 4708 l
-3215 4708 l
-3214 4708 m
-3373 4708 l
-3373 4709 l
-3214 4709 l
-3213 4709 m
-3372 4709 l
-3372 4710 l
-3213 4710 l
-3212 4710 m
-3372 4710 l
-3372 4711 l
-3212 4711 l
-3211 4711 m
-3371 4711 l
-3371 4712 l
-3211 4712 l
-3211 4712 m
-3370 4712 l
-3370 4713 l
-3211 4713 l
-3210 4713 m
-3369 4713 l
-3369 4714 l
-3210 4714 l
-3209 4714 m
-3368 4714 l
-3368 4715 l
-3209 4715 l
-3208 4715 m
-3367 4715 l
-3367 4716 l
-3208 4716 l
-3207 4716 m
-3367 4716 l
-3367 4717 l
-3207 4717 l
-3206 4717 m
-3366 4717 l
-3366 4718 l
-3206 4718 l
-3206 4718 m
-3365 4718 l
-3365 4719 l
-3206 4719 l
-3205 4719 m
-3364 4719 l
-3364 4720 l
-3205 4720 l
-3204 4720 m
-3363 4720 l
-3363 4721 l
-3204 4721 l
-3203 4721 m
-3362 4721 l
-3362 4722 l
-3203 4722 l
-3202 4722 m
-3362 4722 l
-3362 4723 l
-3202 4723 l
-3201 4723 m
-3361 4723 l
-3361 4724 l
-3201 4724 l
-3200 4724 m
-3360 4724 l
-3360 4725 l
-3200 4725 l
-3200 4725 m
-3359 4725 l
-3359 4726 l
-3200 4726 l
-3199 4726 m
-3358 4726 l
-3358 4727 l
-3199 4727 l
-3198 4727 m
-3358 4727 l
-3358 4728 l
-3198 4728 l
-3197 4728 m
-3357 4728 l
-3357 4729 l
-3197 4729 l
-3196 4729 m
-3356 4729 l
-3356 4730 l
-3196 4730 l
-3195 4730 m
-3355 4730 l
-3355 4731 l
-3195 4731 l
-3195 4731 m
-3354 4731 l
-3354 4732 l
-3195 4732 l
-3194 4732 m
-3353 4732 l
-3353 4733 l
-3194 4733 l
-3193 4733 m
-3353 4733 l
-3353 4734 l
-3193 4734 l
-3192 4734 m
-3352 4734 l
-3352 4735 l
-3192 4735 l
-3191 4735 m
-3351 4735 l
-3351 4736 l
-3191 4736 l
-3190 4736 m
-3350 4736 l
-3350 4737 l
-3190 4737 l
-3190 4737 m
-3349 4737 l
-3349 4738 l
-3190 4738 l
-3189 4738 m
-3348 4738 l
-3348 4739 l
-3189 4739 l
-3188 4739 m
-3348 4739 l
-3348 4740 l
-3188 4740 l
-3187 4740 m
-3347 4740 l
-3347 4741 l
-3187 4741 l
-3186 4741 m
-3346 4741 l
-3346 4742 l
-3186 4742 l
-3185 4742 m
-3345 4742 l
-3345 4743 l
-3185 4743 l
-3185 4743 m
-3344 4743 l
-3344 4744 l
-3185 4744 l
-3184 4744 m
-3344 4744 l
-3344 4745 l
-3184 4745 l
-3183 4745 m
-3343 4745 l
-3343 4746 l
-3183 4746 l
-3182 4746 m
-3342 4746 l
-3342 4747 l
-3182 4747 l
-3181 4747 m
-3341 4747 l
-3341 4748 l
-3181 4748 l
-3180 4748 m
-3340 4748 l
-3340 4749 l
-3180 4749 l
-3180 4749 m
-3339 4749 l
-3339 4750 l
-3180 4750 l
-3179 4750 m
-3339 4750 l
-3339 4751 l
-3179 4751 l
-3178 4751 m
-3338 4751 l
-3338 4752 l
-3178 4752 l
-3177 4752 m
-3337 4752 l
-3337 4753 l
-3177 4753 l
-3176 4753 m
-3336 4753 l
-3336 4754 l
-3176 4754 l
-3175 4754 m
-3335 4754 l
-3335 4755 l
-3175 4755 l
-3175 4755 m
-3334 4755 l
-3334 4756 l
-3175 4756 l
-3174 4756 m
-3334 4756 l
-3334 4757 l
-3174 4757 l
-3173 4757 m
-3333 4757 l
-3333 4758 l
-3173 4758 l
-3172 4758 m
-3332 4758 l
-3332 4759 l
-3172 4759 l
-3171 4759 m
-3331 4759 l
-3331 4760 l
-3171 4760 l
-3170 4760 m
-3330 4760 l
-3330 4762 l
-3170 4762 l
-3169 4762 m
-3329 4762 l
-3329 4763 l
-3169 4763 l
-3168 4763 m
-3328 4763 l
-3328 4764 l
-3168 4764 l
-3167 4764 m
-3327 4764 l
-3327 4765 l
-3167 4765 l
-3166 4765 m
-3326 4765 l
-3326 4766 l
-3166 4766 l
-3165 4766 m
-3325 4766 l
-3325 4767 l
-3165 4767 l
-3165 4767 m
-3325 4767 l
-3325 4768 l
-3165 4768 l
-3165 4768 m
-3324 4768 l
-3324 4769 l
-3165 4769 l
-3166 4769 m
-3323 4769 l
-3323 4770 l
-3166 4770 l
-3167 4770 m
-3322 4770 l
-3322 4771 l
-3167 4771 l
-3168 4771 m
-3321 4771 l
-3321 4772 l
-3168 4772 l
-3169 4772 m
-3320 4772 l
-3320 4773 l
-3169 4773 l
-3171 4773 m
-3320 4773 l
-3320 4774 l
-3171 4774 l
-3172 4774 m
-3319 4774 l
-3319 4775 l
-3172 4775 l
-3173 4775 m
-3318 4775 l
-3318 4776 l
-3173 4776 l
-3174 4776 m
-3317 4776 l
-3317 4777 l
-3174 4777 l
-3175 4777 m
-3316 4777 l
-3316 4778 l
-3175 4778 l
-3177 4778 m
-3316 4778 l
-3316 4779 l
-3177 4779 l
-3178 4779 m
-3315 4779 l
-3315 4780 l
-3178 4780 l
-3179 4780 m
-3314 4780 l
-3314 4781 l
-3179 4781 l
-3180 4781 m
-3313 4781 l
-3313 4782 l
-3180 4782 l
-3181 4782 m
-3312 4782 l
-3312 4783 l
-3181 4783 l
-3183 4783 m
-3311 4783 l
-3311 4784 l
-3183 4784 l
-3184 4784 m
-3311 4784 l
-3311 4785 l
-3184 4785 l
-3185 4785 m
-3310 4785 l
-3310 4786 l
-3185 4786 l
-3186 4786 m
-3309 4786 l
-3309 4787 l
-3186 4787 l
-3187 4787 m
-3308 4787 l
-3308 4788 l
-3187 4788 l
-3189 4788 m
-3307 4788 l
-3307 4789 l
-3189 4789 l
-3190 4789 m
-3306 4789 l
-3306 4790 l
-3190 4790 l
-3191 4790 m
-3306 4790 l
-3306 4791 l
-3191 4791 l
-3192 4791 m
-3305 4791 l
-3305 4792 l
-3192 4792 l
-3193 4792 m
-3304 4792 l
-3304 4793 l
-3193 4793 l
-3195 4793 m
-3303 4793 l
-3303 4794 l
-3195 4794 l
-3196 4794 m
-3302 4794 l
-3302 4795 l
-3196 4795 l
-3197 4795 m
-3302 4795 l
-3302 4796 l
-3197 4796 l
-3198 4796 m
-3301 4796 l
-3301 4797 l
-3198 4797 l
-3199 4797 m
-3300 4797 l
-3300 4798 l
-3199 4798 l
-3201 4798 m
-3299 4798 l
-3299 4799 l
-3201 4799 l
-3202 4799 m
-3298 4799 l
-3298 4800 l
-3202 4800 l
-3203 4800 m
-3297 4800 l
-3297 4801 l
-3203 4801 l
-3204 4801 m
-3297 4801 l
-3297 4802 l
-3204 4802 l
-3205 4802 m
-3296 4802 l
-3296 4803 l
-3205 4803 l
-3207 4803 m
-3295 4803 l
-3295 4804 l
-3207 4804 l
-3208 4804 m
-3294 4804 l
-3294 4805 l
-3208 4805 l
-3209 4805 m
-3293 4805 l
-3293 4806 l
-3209 4806 l
-3210 4806 m
-3292 4806 l
-3292 4807 l
-3210 4807 l
-3212 4807 m
-3292 4807 l
-3292 4808 l
-3212 4808 l
-3213 4808 m
-3291 4808 l
-3291 4809 l
-3213 4809 l
-3214 4809 m
-3290 4809 l
-3290 4810 l
-3214 4810 l
-3215 4810 m
-3289 4810 l
-3289 4811 l
-3215 4811 l
-3216 4811 m
-3288 4811 l
-3288 4812 l
-3216 4812 l
-3218 4812 m
-3288 4812 l
-3288 4813 l
-3218 4813 l
-3219 4813 m
-3287 4813 l
-3287 4814 l
-3219 4814 l
-3220 4814 m
-3286 4814 l
-3286 4815 l
-3220 4815 l
-3221 4815 m
-3285 4815 l
-3285 4816 l
-3221 4816 l
-3222 4816 m
-3284 4816 l
-3284 4817 l
-3222 4817 l
-3224 4817 m
-3283 4817 l
-3283 4818 l
-3224 4818 l
-3225 4818 m
-3283 4818 l
-3283 4819 l
-3225 4819 l
-3226 4819 m
-3282 4819 l
-3282 4820 l
-3226 4820 l
-3227 4820 m
-3281 4820 l
-3281 4821 l
-3227 4821 l
-3228 4821 m
-3280 4821 l
-3280 4822 l
-3228 4822 l
-3230 4822 m
-3279 4822 l
-3279 4823 l
-3230 4823 l
-3231 4823 m
-3278 4823 l
-3278 4824 l
-3231 4824 l
-3232 4824 m
-3278 4824 l
-3278 4825 l
-3232 4825 l
-3233 4825 m
-3277 4825 l
-3277 4826 l
-3233 4826 l
-3234 4826 m
-3276 4826 l
-3276 4827 l
-3234 4827 l
-3236 4827 m
-3275 4827 l
-3275 4828 l
-3236 4828 l
-3237 4828 m
-3274 4828 l
-3274 4829 l
-3237 4829 l
-3238 4829 m
-3274 4829 l
-3274 4830 l
-3238 4830 l
-3239 4830 m
-3273 4830 l
-3273 4831 l
-3239 4831 l
-3240 4831 m
-3272 4831 l
-3272 4832 l
-3240 4832 l
-3242 4832 m
-3271 4832 l
-3271 4833 l
-3242 4833 l
-3243 4833 m
-3270 4833 l
-3270 4834 l
-3243 4834 l
-3244 4834 m
-3269 4834 l
-3269 4835 l
-3244 4835 l
-3245 4835 m
-3269 4835 l
-3269 4836 l
-3245 4836 l
-3246 4836 m
-3268 4836 l
-3268 4837 l
-3246 4837 l
-3248 4837 m
-3267 4837 l
-3267 4838 l
-3248 4838 l
-3249 4838 m
-3266 4838 l
-3266 4839 l
-3249 4839 l
-3250 4839 m
-3265 4839 l
-3265 4840 l
-3250 4840 l
-3251 4840 m
-3264 4840 l
-3264 4841 l
-3251 4841 l
-3252 4841 m
-3264 4841 l
-3264 4842 l
-3252 4842 l
-3254 4842 m
-3263 4842 l
-3263 4843 l
-3254 4843 l
-3255 4843 m
-3262 4843 l
-3262 4844 l
-3255 4844 l
-3256 4844 m
-3261 4844 l
-3261 4845 l
-3256 4845 l
-3257 4845 m
-3260 4845 l
-3260 4846 l
-3257 4846 l
-Y
-3375.8 4704.2 m
-3283 4627 l
-3165 4768 l
-3259 4846 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-3277 4660 m
-3247 4695 l
-3289 4698 l
-3281 4707 l
-3279 4716 l
-3280 4722 l
-3287 4733 l
-3293 4739 l
-3305 4743 l
-3317 4742 l
-3328 4735 l
-3336 4726 l
-3341 4713 l
-3341 4708 l
-3337 4699 l
-S
-3213 4737 m
-3224 4730 l
-3239 4732 l
-3258 4742 l
-3267 4750 l
-3281 4767 l
-3285 4781 l
-3280 4793 l
-3275 4800 l
-3264 4807 l
-3249 4805 l
-3230 4795 l
-3220 4787 l
-3207 4770 l
-3203 4756 l
-3207 4744 l
-3213 4737 l
-S
-1 g
-2920 4919 m
-2925 4919 l
-2925 4920 l
-2920 4920 l
-2916 4920 m
-2925 4920 l
-2925 4921 l
-2916 4921 l
-2913 4921 m
-2925 4921 l
-2925 4922 l
-2913 4922 l
-2909 4922 m
-2926 4922 l
-2926 4923 l
-2909 4923 l
-2906 4923 m
-2926 4923 l
-2926 4924 l
-2906 4924 l
-2902 4924 m
-2926 4924 l
-2926 4925 l
-2902 4925 l
-2899 4925 m
-2927 4925 l
-2927 4926 l
-2899 4926 l
-2895 4926 m
-2927 4926 l
-2927 4927 l
-2895 4927 l
-2892 4927 m
-2927 4927 l
-2927 4928 l
-2892 4928 l
-2888 4928 m
-2927 4928 l
-2927 4929 l
-2888 4929 l
-2885 4929 m
-2928 4929 l
-2928 4930 l
-2885 4930 l
-2881 4930 m
-2928 4930 l
-2928 4931 l
-2881 4931 l
-2878 4931 m
-2928 4931 l
-2928 4932 l
-2878 4932 l
-2874 4932 m
-2929 4932 l
-2929 4933 l
-2874 4933 l
-2871 4933 m
-2929 4933 l
-2929 4934 l
-2871 4934 l
-2867 4934 m
-2929 4934 l
-2929 4935 l
-2867 4935 l
-2864 4935 m
-2929 4935 l
-2929 4936 l
-2864 4936 l
-2860 4936 m
-2930 4936 l
-2930 4937 l
-2860 4937 l
-2857 4937 m
-2930 4937 l
-2930 4938 l
-2857 4938 l
-2853 4938 m
-2930 4938 l
-2930 4939 l
-2853 4939 l
-2850 4939 m
-2931 4939 l
-2931 4940 l
-2850 4940 l
-2846 4940 m
-2931 4940 l
-2931 4941 l
-2846 4941 l
-2843 4941 m
-2931 4941 l
-2931 4942 l
-2843 4942 l
-2839 4942 m
-2931 4942 l
-2931 4943 l
-2839 4943 l
-2836 4943 m
-2932 4943 l
-2932 4944 l
-2836 4944 l
-2832 4944 m
-2932 4944 l
-2932 4945 l
-2832 4945 l
-2829 4945 m
-2932 4945 l
-2932 4946 l
-2829 4946 l
-2825 4946 m
-2933 4946 l
-2933 4947 l
-2825 4947 l
-2822 4947 m
-2933 4947 l
-2933 4948 l
-2822 4948 l
-2818 4948 m
-2933 4948 l
-2933 4949 l
-2818 4949 l
-2815 4949 m
-2933 4949 l
-2933 4950 l
-2815 4950 l
-2811 4950 m
-2934 4950 l
-2934 4951 l
-2811 4951 l
-2808 4951 m
-2934 4951 l
-2934 4952 l
-2808 4952 l
-2804 4952 m
-2934 4952 l
-2934 4953 l
-2804 4953 l
-2801 4953 m
-2935 4953 l
-2935 4954 l
-2801 4954 l
-2797 4954 m
-2935 4954 l
-2935 4955 l
-2797 4955 l
-2794 4955 m
-2935 4955 l
-2935 4956 l
-2794 4956 l
-2790 4956 m
-2935 4956 l
-2935 4957 l
-2790 4957 l
-2787 4957 m
-2936 4957 l
-2936 4958 l
-2787 4958 l
-2783 4958 m
-2936 4958 l
-2936 4959 l
-2783 4959 l
-2780 4959 m
-2936 4959 l
-2936 4960 l
-2780 4960 l
-2776 4960 m
-2937 4960 l
-2937 4961 l
-2776 4961 l
-2773 4961 m
-2937 4961 l
-2937 4962 l
-2773 4962 l
-2769 4962 m
-2937 4962 l
-2937 4963 l
-2769 4963 l
-2766 4963 m
-2937 4963 l
-2937 4964 l
-2766 4964 l
-2762 4964 m
-2938 4964 l
-2938 4965 l
-2762 4965 l
-2759 4965 m
-2938 4965 l
-2938 4966 l
-2759 4966 l
-2755 4966 m
-2938 4966 l
-2938 4967 l
-2755 4967 l
-2752 4967 m
-2939 4967 l
-2939 4968 l
-2752 4968 l
-2752 4968 m
-2939 4968 l
-2939 4971 l
-2752 4971 l
-2752 4971 m
-2940 4971 l
-2940 4972 l
-2752 4972 l
-2753 4972 m
-2940 4972 l
-2940 4974 l
-2753 4974 l
-2753 4974 m
-2941 4974 l
-2941 4976 l
-2753 4976 l
-2754 4976 m
-2941 4976 l
-2941 4978 l
-2754 4978 l
-2754 4978 m
-2942 4978 l
-2942 4979 l
-2754 4979 l
-2755 4979 m
-2942 4979 l
-2942 4981 l
-2755 4981 l
-2755 4981 m
-2943 4981 l
-2943 4983 l
-2755 4983 l
-2756 4983 m
-2943 4983 l
-2943 4985 l
-2756 4985 l
-2756 4985 m
-2944 4985 l
-2944 4986 l
-2756 4986 l
-2757 4986 m
-2944 4986 l
-2944 4988 l
-2757 4988 l
-2757 4988 m
-2945 4988 l
-2945 4990 l
-2757 4990 l
-2758 4990 m
-2945 4990 l
-2945 4992 l
-2758 4992 l
-2758 4992 m
-2946 4992 l
-2946 4993 l
-2758 4993 l
-2759 4993 m
-2946 4993 l
-2946 4995 l
-2759 4995 l
-2759 4995 m
-2947 4995 l
-2947 4997 l
-2759 4997 l
-2760 4997 m
-2947 4997 l
-2947 4999 l
-2760 4999 l
-2760 4999 m
-2948 4999 l
-2948 5000 l
-2760 5000 l
-2761 5000 m
-2948 5000 l
-2948 5002 l
-2761 5002 l
-2761 5002 m
-2949 5002 l
-2949 5004 l
-2761 5004 l
-2762 5004 m
-2949 5004 l
-2949 5006 l
-2762 5006 l
-2762 5006 m
-2950 5006 l
-2950 5007 l
-2762 5007 l
-2763 5007 m
-2950 5007 l
-2950 5009 l
-2763 5009 l
-2763 5009 m
-2951 5009 l
-2951 5011 l
-2763 5011 l
-2764 5011 m
-2951 5011 l
-2951 5013 l
-2764 5013 l
-2764 5013 m
-2952 5013 l
-2952 5015 l
-2764 5015 l
-2765 5015 m
-2952 5015 l
-2952 5016 l
-2765 5016 l
-2765 5016 m
-2953 5016 l
-2953 5018 l
-2765 5018 l
-2766 5018 m
-2953 5018 l
-2953 5020 l
-2766 5020 l
-2766 5020 m
-2954 5020 l
-2954 5022 l
-2766 5022 l
-2767 5022 m
-2954 5022 l
-2954 5023 l
-2767 5023 l
-2767 5023 m
-2955 5023 l
-2955 5025 l
-2767 5025 l
-2768 5025 m
-2955 5025 l
-2955 5026 l
-2768 5026 l
-2768 5026 m
-2956 5026 l
-2956 5029 l
-2768 5029 l
-2769 5029 m
-2956 5029 l
-2956 5030 l
-2769 5030 l
-2769 5030 m
-2957 5030 l
-2957 5032 l
-2769 5032 l
-2770 5032 m
-2957 5032 l
-2957 5033 l
-2770 5033 l
-2770 5033 m
-2958 5033 l
-2958 5035 l
-2770 5035 l
-2770 5035 m
-2958 5035 l
-2958 5036 l
-2770 5036 l
-2771 5036 m
-2957 5036 l
-2957 5037 l
-2771 5037 l
-2771 5037 m
-2953 5037 l
-2953 5038 l
-2771 5038 l
-2771 5038 m
-2950 5038 l
-2950 5039 l
-2771 5039 l
-2772 5039 m
-2946 5039 l
-2946 5040 l
-2772 5040 l
-2772 5040 m
-2943 5040 l
-2943 5041 l
-2772 5041 l
-2772 5041 m
-2939 5041 l
-2939 5042 l
-2772 5042 l
-2772 5042 m
-2936 5042 l
-2936 5043 l
-2772 5043 l
-2773 5043 m
-2932 5043 l
-2932 5044 l
-2773 5044 l
-2773 5044 m
-2929 5044 l
-2929 5045 l
-2773 5045 l
-2773 5045 m
-2925 5045 l
-2925 5046 l
-2773 5046 l
-2774 5046 m
-2922 5046 l
-2922 5047 l
-2774 5047 l
-2774 5047 m
-2918 5047 l
-2918 5048 l
-2774 5048 l
-2774 5048 m
-2915 5048 l
-2915 5049 l
-2774 5049 l
-2774 5049 m
-2911 5049 l
-2911 5050 l
-2774 5050 l
-2775 5050 m
-2908 5050 l
-2908 5051 l
-2775 5051 l
-2775 5051 m
-2904 5051 l
-2904 5052 l
-2775 5052 l
-2775 5052 m
-2901 5052 l
-2901 5053 l
-2775 5053 l
-2775 5053 m
-2897 5053 l
-2897 5054 l
-2775 5054 l
-2776 5054 m
-2894 5054 l
-2894 5055 l
-2776 5055 l
-2776 5055 m
-2890 5055 l
-2890 5056 l
-2776 5056 l
-2776 5056 m
-2887 5056 l
-2887 5057 l
-2776 5057 l
-2777 5057 m
-2883 5057 l
-2883 5058 l
-2777 5058 l
-2777 5058 m
-2880 5058 l
-2880 5059 l
-2777 5059 l
-2777 5059 m
-2876 5059 l
-2876 5060 l
-2777 5060 l
-2777 5060 m
-2873 5060 l
-2873 5061 l
-2777 5061 l
-2778 5061 m
-2869 5061 l
-2869 5062 l
-2778 5062 l
-2778 5062 m
-2866 5062 l
-2866 5063 l
-2778 5063 l
-2778 5063 m
-2862 5063 l
-2862 5064 l
-2778 5064 l
-2779 5064 m
-2859 5064 l
-2859 5065 l
-2779 5065 l
-2779 5065 m
-2855 5065 l
-2855 5066 l
-2779 5066 l
-2779 5066 m
-2852 5066 l
-2852 5067 l
-2779 5067 l
-2779 5067 m
-2848 5067 l
-2848 5068 l
-2779 5068 l
-2780 5068 m
-2845 5068 l
-2845 5069 l
-2780 5069 l
-2780 5069 m
-2841 5069 l
-2841 5070 l
-2780 5070 l
-2780 5070 m
-2838 5070 l
-2838 5071 l
-2780 5071 l
-2781 5071 m
-2834 5071 l
-2834 5072 l
-2781 5072 l
-2781 5072 m
-2831 5072 l
-2831 5073 l
-2781 5073 l
-2781 5073 m
-2827 5073 l
-2827 5074 l
-2781 5074 l
-2781 5074 m
-2824 5074 l
-2824 5075 l
-2781 5075 l
-2782 5075 m
-2820 5075 l
-2820 5076 l
-2782 5076 l
-2782 5076 m
-2817 5076 l
-2817 5077 l
-2782 5077 l
-2782 5077 m
-2813 5077 l
-2813 5078 l
-2782 5078 l
-2783 5078 m
-2810 5078 l
-2810 5079 l
-2783 5079 l
-2783 5079 m
-2806 5079 l
-2806 5080 l
-2783 5080 l
-2783 5080 m
-2803 5080 l
-2803 5081 l
-2783 5081 l
-2783 5081 m
-2799 5081 l
-2799 5082 l
-2783 5082 l
-2784 5082 m
-2796 5082 l
-2796 5083 l
-2784 5083 l
-2784 5083 m
-2792 5083 l
-2792 5084 l
-2784 5084 l
-2784 5084 m
-2789 5084 l
-2789 5085 l
-2784 5085 l
-Y
-2957.5 5035.7 m
-2924 4919 l
-2752 4968 l
-2785 5085 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2864 4967 m
-2866 4958 l
-2877 4950 l
-2885 4948 l
-2898 4948 l
-2909 4958 l
-2919 4977 l
-2925 4997 l
-2925 5014 l
-2920 5025 l
-2909 5032 l
-2905 5033 l
-2892 5033 l
-2881 5027 l
-2874 5016 l
-2873 5012 l
-2873 4999 l
-2879 4989 l
-2890 4981 l
-2894 4980 l
-2907 4981 l
-2917 4986 l
-2925 4997 l
-S
-2808 4970 m
-2822 4970 l
-2833 4980 l
-2843 4999 l
-2846 5011 l
-2848 5032 l
-2843 5046 l
-2832 5054 l
-2824 5056 l
-2811 5056 l
-2800 5046 l
-2790 5027 l
-2787 5015 l
-2785 4994 l
-2789 4979 l
-2800 4972 l
-2808 4970 l
-S
-1 g
-2198 4859 m
-2203 4859 l
-2203 4860 l
-2198 4860 l
-2198 4860 m
-2205 4860 l
-2205 4861 l
-2198 4861 l
-2197 4861 m
-2208 4861 l
-2208 4862 l
-2197 4862 l
-2197 4862 m
-2210 4862 l
-2210 4863 l
-2197 4863 l
-2196 4863 m
-2213 4863 l
-2213 4864 l
-2196 4864 l
-2196 4864 m
-2215 4864 l
-2215 4865 l
-2196 4865 l
-2196 4865 m
-2218 4865 l
-2218 4866 l
-2196 4866 l
-2195 4866 m
-2220 4866 l
-2220 4867 l
-2195 4867 l
-2195 4867 m
-2223 4867 l
-2223 4868 l
-2195 4868 l
-2194 4868 m
-2225 4868 l
-2225 4869 l
-2194 4869 l
-2194 4869 m
-2228 4869 l
-2228 4870 l
-2194 4870 l
-2194 4870 m
-2230 4870 l
-2230 4871 l
-2194 4871 l
-2193 4871 m
-2233 4871 l
-2233 4872 l
-2193 4872 l
-2193 4872 m
-2235 4872 l
-2235 4873 l
-2193 4873 l
-2192 4873 m
-2238 4873 l
-2238 4874 l
-2192 4874 l
-2192 4874 m
-2240 4874 l
-2240 4875 l
-2192 4875 l
-2192 4875 m
-2243 4875 l
-2243 4876 l
-2192 4876 l
-2191 4876 m
-2245 4876 l
-2245 4877 l
-2191 4877 l
-2191 4877 m
-2248 4877 l
-2248 4878 l
-2191 4878 l
-2190 4878 m
-2250 4878 l
-2250 4879 l
-2190 4879 l
-2190 4879 m
-2253 4879 l
-2253 4880 l
-2190 4880 l
-2190 4880 m
-2255 4880 l
-2255 4881 l
-2190 4881 l
-2189 4881 m
-2258 4881 l
-2258 4882 l
-2189 4882 l
-2189 4882 m
-2260 4882 l
-2260 4883 l
-2189 4883 l
-2188 4883 m
-2263 4883 l
-2263 4884 l
-2188 4884 l
-2188 4884 m
-2265 4884 l
-2265 4885 l
-2188 4885 l
-2188 4885 m
-2268 4885 l
-2268 4886 l
-2188 4886 l
-2187 4886 m
-2270 4886 l
-2270 4887 l
-2187 4887 l
-2187 4887 m
-2273 4887 l
-2273 4888 l
-2187 4888 l
-2186 4888 m
-2275 4888 l
-2275 4889 l
-2186 4889 l
-2186 4889 m
-2278 4889 l
-2278 4890 l
-2186 4890 l
-2186 4890 m
-2280 4890 l
-2280 4891 l
-2186 4891 l
-2185 4891 m
-2283 4891 l
-2283 4892 l
-2185 4892 l
-2185 4892 m
-2285 4892 l
-2285 4893 l
-2185 4893 l
-2184 4893 m
-2288 4893 l
-2288 4894 l
-2184 4894 l
-2184 4894 m
-2290 4894 l
-2290 4895 l
-2184 4895 l
-2184 4895 m
-2293 4895 l
-2293 4896 l
-2184 4896 l
-2183 4896 m
-2295 4896 l
-2295 4897 l
-2183 4897 l
-2183 4897 m
-2298 4897 l
-2298 4898 l
-2183 4898 l
-2182 4898 m
-2300 4898 l
-2300 4899 l
-2182 4899 l
-2182 4899 m
-2303 4899 l
-2303 4900 l
-2182 4900 l
-2182 4900 m
-2305 4900 l
-2305 4901 l
-2182 4901 l
-2181 4901 m
-2308 4901 l
-2308 4902 l
-2181 4902 l
-2181 4902 m
-2310 4902 l
-2310 4903 l
-2181 4903 l
-2180 4903 m
-2313 4903 l
-2313 4904 l
-2180 4904 l
-2180 4904 m
-2315 4904 l
-2315 4905 l
-2180 4905 l
-2180 4905 m
-2318 4905 l
-2318 4906 l
-2180 4906 l
-2179 4906 m
-2320 4906 l
-2320 4907 l
-2179 4907 l
-2179 4907 m
-2323 4907 l
-2323 4908 l
-2179 4908 l
-2178 4908 m
-2325 4908 l
-2325 4909 l
-2178 4909 l
-2178 4909 m
-2328 4909 l
-2328 4910 l
-2178 4910 l
-2178 4910 m
-2330 4910 l
-2330 4911 l
-2178 4911 l
-2177 4911 m
-2333 4911 l
-2333 4912 l
-2177 4912 l
-2177 4912 m
-2335 4912 l
-2335 4913 l
-2177 4913 l
-2176 4913 m
-2338 4913 l
-2338 4914 l
-2176 4914 l
-2176 4914 m
-2340 4914 l
-2340 4915 l
-2176 4915 l
-2176 4915 m
-2343 4915 l
-2343 4916 l
-2176 4916 l
-2175 4916 m
-2345 4916 l
-2345 4917 l
-2175 4917 l
-2175 4917 m
-2348 4917 l
-2348 4918 l
-2175 4918 l
-2174 4918 m
-2350 4918 l
-2350 4919 l
-2174 4919 l
-2174 4919 m
-2353 4919 l
-2353 4920 l
-2174 4920 l
-2174 4920 m
-2355 4920 l
-2355 4921 l
-2174 4921 l
-2173 4921 m
-2358 4921 l
-2358 4922 l
-2173 4922 l
-2173 4922 m
-2360 4922 l
-2360 4923 l
-2173 4923 l
-2172 4923 m
-2363 4923 l
-2363 4924 l
-2172 4924 l
-2172 4924 m
-2365 4924 l
-2365 4925 l
-2172 4925 l
-2172 4925 m
-2368 4925 l
-2368 4926 l
-2172 4926 l
-2171 4926 m
-2370 4926 l
-2370 4927 l
-2171 4927 l
-2171 4927 m
-2370 4927 l
-2370 4928 l
-2171 4928 l
-2170 4928 m
-2370 4928 l
-2370 4930 l
-2170 4930 l
-2170 4930 m
-2369 4930 l
-2369 4931 l
-2170 4931 l
-2169 4931 m
-2369 4931 l
-2369 4932 l
-2169 4932 l
-2169 4932 m
-2368 4932 l
-2368 4933 l
-2169 4933 l
-2168 4933 m
-2368 4933 l
-2368 4935 l
-2168 4935 l
-2168 4935 m
-2367 4935 l
-2367 4936 l
-2168 4936 l
-2167 4936 m
-2367 4936 l
-2367 4937 l
-2167 4937 l
-2167 4937 m
-2366 4937 l
-2366 4938 l
-2167 4938 l
-2166 4938 m
-2366 4938 l
-2366 4940 l
-2166 4940 l
-2166 4940 m
-2365 4940 l
-2365 4941 l
-2166 4941 l
-2165 4941 m
-2365 4941 l
-2365 4942 l
-2165 4942 l
-2165 4942 m
-2364 4942 l
-2364 4943 l
-2165 4943 l
-2164 4943 m
-2364 4943 l
-2364 4945 l
-2164 4945 l
-2164 4945 m
-2363 4945 l
-2363 4946 l
-2164 4946 l
-2163 4946 m
-2363 4946 l
-2363 4947 l
-2163 4947 l
-2163 4947 m
-2362 4947 l
-2362 4948 l
-2163 4948 l
-2162 4948 m
-2362 4948 l
-2362 4950 l
-2162 4950 l
-2162 4950 m
-2361 4950 l
-2361 4951 l
-2162 4951 l
-2161 4951 m
-2361 4951 l
-2361 4952 l
-2161 4952 l
-2161 4952 m
-2360 4952 l
-2360 4953 l
-2161 4953 l
-2160 4953 m
-2360 4953 l
-2360 4955 l
-2160 4955 l
-2160 4955 m
-2359 4955 l
-2359 4956 l
-2160 4956 l
-2159 4956 m
-2359 4956 l
-2359 4957 l
-2159 4957 l
-2159 4957 m
-2358 4957 l
-2358 4958 l
-2159 4958 l
-2158 4958 m
-2358 4958 l
-2358 4959 l
-2158 4959 l
-2158 4959 m
-2357 4959 l
-2357 4961 l
-2158 4961 l
-2157 4961 m
-2357 4961 l
-2357 4962 l
-2157 4962 l
-2157 4962 m
-2356 4962 l
-2356 4963 l
-2157 4963 l
-2156 4963 m
-2356 4963 l
-2356 4964 l
-2156 4964 l
-2156 4964 m
-2355 4964 l
-2355 4966 l
-2156 4966 l
-2155 4966 m
-2355 4966 l
-2355 4967 l
-2155 4967 l
-2155 4967 m
-2354 4967 l
-2354 4968 l
-2155 4968 l
-2154 4968 m
-2354 4968 l
-2354 4969 l
-2154 4969 l
-2154 4969 m
-2353 4969 l
-2353 4971 l
-2154 4971 l
-2154 4971 m
-2353 4971 l
-2353 4972 l
-2154 4972 l
-2156 4972 m
-2352 4972 l
-2352 4973 l
-2156 4973 l
-2158 4973 m
-2352 4973 l
-2352 4974 l
-2158 4974 l
-2161 4974 m
-2351 4974 l
-2351 4975 l
-2161 4975 l
-2163 4975 m
-2351 4975 l
-2351 4976 l
-2163 4976 l
-2166 4976 m
-2351 4976 l
-2351 4977 l
-2166 4977 l
-2168 4977 m
-2350 4977 l
-2350 4978 l
-2168 4978 l
-2171 4978 m
-2350 4978 l
-2350 4979 l
-2171 4979 l
-2173 4979 m
-2349 4979 l
-2349 4980 l
-2173 4980 l
-2176 4980 m
-2349 4980 l
-2349 4981 l
-2176 4981 l
-2178 4981 m
-2349 4981 l
-2349 4982 l
-2178 4982 l
-2181 4982 m
-2348 4982 l
-2348 4983 l
-2181 4983 l
-2183 4983 m
-2348 4983 l
-2348 4984 l
-2183 4984 l
-2186 4984 m
-2347 4984 l
-2347 4985 l
-2186 4985 l
-2188 4985 m
-2347 4985 l
-2347 4986 l
-2188 4986 l
-2190 4986 m
-2346 4986 l
-2346 4987 l
-2190 4987 l
-2193 4987 m
-2346 4987 l
-2346 4988 l
-2193 4988 l
-2195 4988 m
-2346 4988 l
-2346 4989 l
-2195 4989 l
-2198 4989 m
-2345 4989 l
-2345 4990 l
-2198 4990 l
-2200 4990 m
-2345 4990 l
-2345 4991 l
-2200 4991 l
-2203 4991 m
-2344 4991 l
-2344 4992 l
-2203 4992 l
-2205 4992 m
-2344 4992 l
-2344 4993 l
-2205 4993 l
-2208 4993 m
-2344 4993 l
-2344 4994 l
-2208 4994 l
-2210 4994 m
-2343 4994 l
-2343 4995 l
-2210 4995 l
-2213 4995 m
-2343 4995 l
-2343 4996 l
-2213 4996 l
-2215 4996 m
-2342 4996 l
-2342 4997 l
-2215 4997 l
-2218 4997 m
-2342 4997 l
-2342 4998 l
-2218 4998 l
-2220 4998 m
-2342 4998 l
-2342 4999 l
-2220 4999 l
-2222 4999 m
-2341 4999 l
-2341 5000 l
-2222 5000 l
-2225 5000 m
-2341 5000 l
-2341 5001 l
-2225 5001 l
-2227 5001 m
-2340 5001 l
-2340 5002 l
-2227 5002 l
-2230 5002 m
-2340 5002 l
-2340 5003 l
-2230 5003 l
-2232 5003 m
-2340 5003 l
-2340 5004 l
-2232 5004 l
-2235 5004 m
-2339 5004 l
-2339 5005 l
-2235 5005 l
-2237 5005 m
-2339 5005 l
-2339 5006 l
-2237 5006 l
-2240 5006 m
-2338 5006 l
-2338 5007 l
-2240 5007 l
-2242 5007 m
-2338 5007 l
-2338 5008 l
-2242 5008 l
-2245 5008 m
-2338 5008 l
-2338 5009 l
-2245 5009 l
-2247 5009 m
-2337 5009 l
-2337 5010 l
-2247 5010 l
-2250 5010 m
-2337 5010 l
-2337 5011 l
-2250 5011 l
-2252 5011 m
-2336 5011 l
-2336 5012 l
-2252 5012 l
-2255 5012 m
-2336 5012 l
-2336 5013 l
-2255 5013 l
-2257 5013 m
-2335 5013 l
-2335 5014 l
-2257 5014 l
-2259 5014 m
-2335 5014 l
-2335 5015 l
-2259 5015 l
-2262 5015 m
-2335 5015 l
-2335 5016 l
-2262 5016 l
-2264 5016 m
-2334 5016 l
-2334 5017 l
-2264 5017 l
-2267 5017 m
-2334 5017 l
-2334 5018 l
-2267 5018 l
-2269 5018 m
-2333 5018 l
-2333 5019 l
-2269 5019 l
-2272 5019 m
-2333 5019 l
-2333 5020 l
-2272 5020 l
-2274 5020 m
-2333 5020 l
-2333 5021 l
-2274 5021 l
-2277 5021 m
-2332 5021 l
-2332 5022 l
-2277 5022 l
-2279 5022 m
-2332 5022 l
-2332 5023 l
-2279 5023 l
-2282 5023 m
-2331 5023 l
-2331 5024 l
-2282 5024 l
-2284 5024 m
-2331 5024 l
-2331 5025 l
-2284 5025 l
-2287 5025 m
-2331 5025 l
-2331 5026 l
-2287 5026 l
-2289 5026 m
-2330 5026 l
-2330 5027 l
-2289 5027 l
-2291 5027 m
-2330 5027 l
-2330 5028 l
-2291 5028 l
-2294 5028 m
-2329 5028 l
-2329 5029 l
-2294 5029 l
-2296 5029 m
-2329 5029 l
-2329 5030 l
-2296 5030 l
-2299 5030 m
-2329 5030 l
-2329 5031 l
-2299 5031 l
-2301 5031 m
-2328 5031 l
-2328 5032 l
-2301 5032 l
-2304 5032 m
-2328 5032 l
-2328 5033 l
-2304 5033 l
-2306 5033 m
-2327 5033 l
-2327 5034 l
-2306 5034 l
-2309 5034 m
-2327 5034 l
-2327 5035 l
-2309 5035 l
-2311 5035 m
-2327 5035 l
-2327 5036 l
-2311 5036 l
-2314 5036 m
-2326 5036 l
-2326 5037 l
-2314 5037 l
-2316 5037 m
-2326 5037 l
-2326 5038 l
-2316 5038 l
-2319 5038 m
-2325 5038 l
-2325 5039 l
-2319 5039 l
-2321 5039 m
-2325 5039 l
-2325 5040 l
-2321 5040 l
-Y
-2199 4858.8 m
-2154 4971 l
-2324 5040 l
-2370 4927 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-2241 4957 m
-2242 4943 l
-2237 4932 l
-2227 4924 l
-2223 4922 l
-2210 4922 l
-2199 4926 l
-2190 4936 l
-2189 4940 l
-2188 4953 l
-2193 4964 l
-2203 4973 l
-2207 4974 l
-2220 4975 l
-2231 4970 l
-2241 4957 l
-2249 4937 l
-2252 4916 l
-2249 4901 l
-2239 4893 l
-2232 4890 l
-2218 4889 l
-2211 4895 l
-S
-2280 5004 m
-2270 4995 l
-2267 4981 l
-2271 4960 l
-2276 4948 l
-2287 4930 l
-2300 4922 l
-2313 4922 l
-2321 4926 l
-2331 4934 l
-2334 4949 l
-2330 4970 l
-2325 4981 l
-2314 4999 l
-2301 5008 l
-2288 5007 l
-2280 5004 l
-S
-1 g
-974 2200 m
-1160 2200 l
-1160 5703 l
-974 5703 l
-Y
-1159.9 2200 m
-974 2200 l
-974 5703 l
-1160 5703 l
-f*
-0 g
-0 0 5420 7898.46 re
-Y
-1000 2225 m
-1105 2225 l
-S
-1000 2225 m
-1000 2290 l
-S
-1050 2225 m
-1050 2265 l
-S
-1105 2225 m
-1105 2290 l
-S
-1050 2375 m
-1040 2365 l
-1035 2355 l
-1035 2340 l
-1040 2330 l
-1050 2320 l
-1065 2315 l
-1075 2315 l
-1090 2320 l
-1100 2330 l
-1105 2340 l
-1105 2355 l
-1100 2365 l
-1090 2375 l
-S
-1000 2411 m
-1105 2411 l
-S
-1000 2446 m
-1005 2451 l
-1000 2456 l
-995 2451 l
-1000 2446 l
-S
-1035 2451 m
-1105 2451 l
-S
-1035 2491 m
-1140 2491 l
-S
-1050 2491 m
-1040 2501 l
-1035 2511 l
-1035 2526 l
-1040 2536 l
-1050 2546 l
-1065 2551 l
-1075 2551 l
-1090 2546 l
-1100 2536 l
-1105 2526 l
-1105 2511 l
-1100 2501 l
-1090 2491 l
-S
-1000 2591 m
-1085 2591 l
-1100 2596 l
-1105 2606 l
-1105 2616 l
-S
-1035 2576 m
-1035 2611 l
-S
-1000 2641 m
-1005 2646 l
-1000 2651 l
-995 2646 l
-1000 2641 l
-S
-1035 2646 m
-1105 2646 l
-S
-1050 2741 m
-1040 2731 l
-1035 2721 l
-1035 2706 l
-1040 2696 l
-1050 2686 l
-1065 2681 l
-1075 2681 l
-1090 2686 l
-1100 2696 l
-1105 2706 l
-1105 2721 l
-1100 2731 l
-1090 2741 l
-S
-1050 2912 m
-1040 2902 l
-1035 2892 l
-1035 2877 l
-1040 2867 l
-1050 2857 l
-1065 2852 l
-1075 2852 l
-1090 2857 l
-1100 2867 l
-1105 2877 l
-1105 2892 l
-1100 2902 l
-1090 2912 l
-S
-1035 2967 m
-1040 2957 l
-1050 2947 l
-1065 2942 l
-1075 2942 l
-1090 2947 l
-1100 2957 l
-1105 2967 l
-1105 2982 l
-1100 2992 l
-1090 3002 l
-1075 3007 l
-1065 3007 l
-1050 3002 l
-1040 2992 l
-1035 2982 l
-1035 2967 l
-S
-1035 3062 m
-1040 3052 l
-1050 3042 l
-1065 3037 l
-1075 3037 l
-1090 3042 l
-1100 3052 l
-1105 3062 l
-1105 3077 l
-1100 3087 l
-1090 3097 l
-1075 3102 l
-1065 3102 l
-1050 3097 l
-1040 3087 l
-1035 3077 l
-1035 3062 l
-S
-1035 3137 m
-1105 3137 l
-S
-1065 3137 m
-1050 3142 l
-1040 3152 l
-1035 3162 l
-1035 3177 l
-S
-1000 3258 m
-1105 3258 l
-S
-1050 3258 m
-1040 3248 l
-1035 3238 l
-1035 3222 l
-1040 3212 l
-1050 3202 l
-1065 3197 l
-1075 3197 l
-1090 3202 l
-1100 3212 l
-1105 3222 l
-1105 3238 l
-1100 3248 l
-1090 3258 l
-S
-1000 3293 m
-1005 3298 l
-1000 3303 l
-995 3298 l
-1000 3293 l
-S
-1035 3298 m
-1105 3298 l
-S
-1035 3338 m
-1105 3338 l
-S
-1055 3338 m
-1040 3353 l
-1035 3363 l
-1035 3378 l
-1040 3388 l
-1055 3393 l
-1105 3393 l
-S
-1035 3488 m
-1105 3488 l
-S
-1050 3488 m
-1040 3478 l
-1035 3468 l
-1035 3453 l
-1040 3443 l
-1050 3433 l
-1065 3428 l
-1075 3428 l
-1090 3433 l
-1100 3443 l
-1105 3453 l
-1105 3468 l
-1100 3478 l
-1090 3488 l
-S
-1000 3533 m
-1085 3533 l
-1100 3538 l
-1105 3548 l
-1105 3558 l
-S
-1035 3518 m
-1035 3553 l
-S
-1065 3583 m
-1065 3643 l
-1055 3643 l
-1045 3638 l
-1040 3633 l
-1035 3623 l
-1035 3608 l
-1040 3598 l
-1050 3588 l
-1065 3583 l
-1075 3583 l
-1090 3588 l
-1100 3598 l
-1105 3608 l
-1105 3623 l
-1100 3633 l
-1090 3643 l
-S
-1050 3729 m
-1040 3724 l
-1035 3709 l
-1035 3694 l
-1040 3679 l
-1050 3674 l
-1060 3679 l
-1065 3689 l
-1070 3714 l
-1075 3724 l
-1085 3729 l
-1090 3729 l
-1100 3724 l
-1105 3709 l
-1105 3694 l
-1100 3679 l
-1090 3674 l
-S
-1035 3769 m
-1040 3764 l
-1045 3769 l
-1040 3774 l
-1035 3769 l
-S
-1100 3774 m
-1105 3769 l
-1100 3764 l
-1095 3769 l
-1100 3774 l
-1110 3774 l
-1120 3769 l
-1125 3764 l
-S
-1035 3894 m
-1105 3894 l
-S
-1055 3894 m
-1040 3909 l
-1035 3919 l
-1035 3934 l
-1040 3944 l
-1055 3949 l
-1105 3949 l
-S
-1055 3949 m
-1040 3964 l
-1035 3974 l
-1035 3989 l
-1040 3999 l
-1055 4004 l
-1105 4004 l
-S
-1065 4039 m
-1065 4100 l
-1055 4100 l
-1045 4095 l
-1040 4090 l
-1035 4080 l
-1035 4065 l
-1040 4054 l
-1050 4044 l
-1065 4039 l
-1075 4039 l
-1090 4044 l
-1100 4054 l
-1105 4065 l
-1105 4080 l
-1100 4090 l
-1090 4100 l
-S
-1035 4190 m
-1105 4190 l
-S
-1050 4190 m
-1040 4180 l
-1035 4170 l
-1035 4155 l
-1040 4145 l
-1050 4135 l
-1065 4130 l
-1075 4130 l
-1090 4135 l
-1100 4145 l
-1105 4155 l
-1105 4170 l
-1100 4180 l
-1090 4190 l
-S
-1035 4230 m
-1105 4230 l
-S
-1055 4230 m
-1040 4245 l
-1035 4255 l
-1035 4270 l
-1040 4280 l
-1055 4285 l
-1105 4285 l
-S
-1065 4400 m
-1065 4460 l
-1055 4460 l
-1045 4455 l
-1040 4450 l
-1035 4440 l
-1035 4425 l
-1040 4415 l
-1050 4405 l
-1065 4400 l
-1075 4400 l
-1090 4405 l
-1100 4415 l
-1105 4425 l
-1105 4440 l
-1100 4450 l
-1090 4460 l
-S
-1035 4551 m
-1140 4551 l
-S
-1050 4551 m
-1040 4541 l
-1035 4531 l
-1035 4516 l
-1040 4506 l
-1050 4496 l
-1065 4491 l
-1075 4491 l
-1090 4496 l
-1100 4506 l
-1105 4516 l
-1105 4531 l
-1100 4541 l
-1090 4551 l
-S
-1035 4591 m
-1085 4591 l
-1100 4596 l
-1105 4606 l
-1105 4621 l
-1100 4631 l
-1085 4646 l
-S
-1035 4646 m
-1105 4646 l
-S
-1000 4681 m
-1005 4686 l
-1000 4691 l
-995 4686 l
-1000 4681 l
-S
-1035 4686 m
-1105 4686 l
-S
-1035 4726 m
-1105 4726 l
-S
-1055 4726 m
-1040 4741 l
-1035 4751 l
-1035 4766 l
-1040 4776 l
-1055 4781 l
-1105 4781 l
-S
-1035 4841 m
-1040 4831 l
-1050 4821 l
-1065 4816 l
-1075 4816 l
-1090 4821 l
-1100 4831 l
-1105 4841 l
-1105 4856 l
-1100 4866 l
-1090 4876 l
-1075 4881 l
-1065 4881 l
-1050 4876 l
-1040 4866 l
-1035 4856 l
-1035 4841 l
-S
-1035 4912 m
-1105 4967 l
-S
-1035 4967 m
-1105 4912 l
-S
-1000 5122 m
-1080 5122 l
-1095 5117 l
-1100 5112 l
-1105 5102 l
-1105 5092 l
-1100 5082 l
-1095 5077 l
-1080 5072 l
-1070 5072 l
-S
-1025 5162 m
-1020 5162 l
-1010 5167 l
-1005 5172 l
-1000 5182 l
-1000 5202 l
-1005 5212 l
-1010 5217 l
-1020 5222 l
-1030 5222 l
-1040 5217 l
-1055 5207 l
-1105 5157 l
-1105 5227 l
-S
-1000 5287 m
-1005 5272 l
-1020 5262 l
-1045 5257 l
-1060 5257 l
-1085 5262 l
-1100 5272 l
-1105 5287 l
-1105 5297 l
-1100 5313 l
-1085 5323 l
-1060 5328 l
-1045 5328 l
-1020 5323 l
-1005 5313 l
-1000 5297 l
-1000 5287 l
-S
-1000 5388 m
-1005 5373 l
-1020 5363 l
-1045 5358 l
-1060 5358 l
-1085 5363 l
-1100 5373 l
-1105 5388 l
-1105 5398 l
-1100 5413 l
-1085 5423 l
-1060 5428 l
-1045 5428 l
-1020 5423 l
-1005 5413 l
-1000 5398 l
-1000 5388 l
-S
-1000 5488 m
-1005 5473 l
-1020 5463 l
-1045 5458 l
-1060 5458 l
-1085 5463 l
-1100 5473 l
-1105 5488 l
-1105 5498 l
-1100 5513 l
-1085 5523 l
-1060 5528 l
-1045 5528 l
-1020 5523 l
-1005 5513 l
-1000 5498 l
-1000 5488 l
-S
-1095 5568 m
-1100 5563 l
-1105 5568 l
-1100 5573 l
-1095 5568 l
-S
-1000 5638 m
-1005 5623 l
-1020 5613 l
-1045 5608 l
-1060 5608 l
-1085 5613 l
-1100 5623 l
-1105 5638 l
-1105 5648 l
-1100 5663 l
-1085 5673 l
-1060 5678 l
-1045 5678 l
-1020 5673 l
-1005 5663 l
-1000 5648 l
-1000 5638 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/mapping.eps b/ast-5.3-1/sun211_figures/mapping.eps
deleted file mode 100644
index 7a88895..0000000
--- a/ast-5.3-1/sun211_figures/mapping.eps
+++ /dev/null
@@ -1,1003 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 118 85 511 258
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 15:19:04
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3923.75 2106.95 m
-3923.75 2181.35 3863.75 2242.55 3788.15 2242.55 c
-2378.15 2242.55 l
-2303.75 2242.55 2242.55 2181.35 2242.55 2106.95 c
-2242.55 1296.95 l
-2242.55 1222.55 2303.75 1161.35 2378.15 1161.35 c
-3788.15 1161.35 l
-3863.75 1161.35 3923.75 1222.55 3923.75 1296.95 c
-f*
-1 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3858.95 2163.35 m
-3858.95 2236.55 3798.95 2296.55 3725.75 2296.55 c
-2322.95 2296.55 l
-2248.55 2296.55 2188.55 2236.55 2188.55 2163.35 c
-2188.55 1359.35 l
-2188.55 1286.15 2248.55 1226.15 2321.75 1226.15 c
-3725.75 1226.15 l
-3798.95 1226.15 3858.95 1286.15 3858.95 1359.35 c
-h
-S
-3863.75 2052.95 318 15.5999 re
-Y
-3861.35 2061.35 m
-4174.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 2061.35 m
-3902.15 2084.15 3884.15 2102.15 3862.55 2102.15 c
-3840.95 2102.15 3822.95 2084.15 3822.95 2061.35 c
-3822.95 2039.75 3840.95 2021.75 3862.55 2021.75 c
-3884.15 2021.75 3902.15 2039.75 3902.15 2061.35 c
-f*
-4133.75 2013.35 m
-4151.75 2061.35 l
-4133.75 2108.15 l
-4286.15 2061.35 l
-f*
-3863.75 1752.95 315.6 15.5999 re
-Y
-3861.35 1761.35 m
-4172.15 1761.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1761.35 m
-3902.15 1784.15 3884.15 1802.15 3862.55 1802.15 c
-3840.95 1802.15 3822.95 1784.15 3822.95 1761.35 c
-3822.95 1739.75 3840.95 1721.75 3862.55 1721.75 c
-3884.15 1721.75 3902.15 1739.75 3902.15 1761.35 c
-f*
-4131.35 1713.35 m
-4149.35 1761.35 l
-4131.35 1808.15 l
-4283.75 1761.35 l
-f*
-3863.75 1452.95 318 15.5999 re
-Y
-3861.35 1461.35 m
-4174.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-3902.15 1461.35 m
-3902.15 1484.15 3884.15 1502.15 3862.55 1502.15 c
-3840.95 1502.15 3822.95 1484.15 3822.95 1461.35 c
-3822.95 1439.75 3840.95 1421.75 3862.55 1421.75 c
-3884.15 1421.75 3902.15 1439.75 3902.15 1461.35 c
-f*
-4133.75 1413.35 m
-4151.75 1461.35 l
-4133.75 1508.15 l
-4286.15 1461.35 l
-f*
-1763.75 2052.95 318 15.5999 re
-Y
-1761.35 2061.35 m
-2074.55 2061.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 2061.35 m
-1802.15 2084.15 1784.15 2102.15 1762.55 2102.15 c
-1740.95 2102.15 1722.95 2084.15 1722.95 2061.35 c
-1722.95 2039.75 1740.95 2021.75 1762.55 2021.75 c
-1784.15 2021.75 1802.15 2039.75 1802.15 2061.35 c
-f*
-2033.75 2013.35 m
-2051.75 2061.35 l
-2033.75 2108.15 l
-2186.15 2061.35 l
-f*
-1763.75 1452.95 318 15.5999 re
-Y
-1761.35 1461.35 m
-2074.55 1461.35 l
-S
-0 0 6120 7920 re
-Y
-1802.15 1461.35 m
-1802.15 1484.15 1784.15 1502.15 1762.55 1502.15 c
-1740.95 1502.15 1722.95 1484.15 1722.95 1461.35 c
-1722.95 1439.75 1740.95 1421.75 1762.55 1421.75 c
-1784.15 1421.75 1802.15 1439.75 1802.15 1461.35 c
-f*
-2033.75 1413.35 m
-2051.75 1461.35 l
-2033.75 1508.15 l
-2186.15 1461.35 l
-f*
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -1379 -1821]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1425 -1821]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -1495 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -1565 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1635 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -1189 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1283 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -1352 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -1422 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -1469 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -1538 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -1578 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -1647 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -1710 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -1748 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -1811 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-96 97 true[1 0 0 1 -4574 -1819]@85 imagemask
-z!"]*[z
-z"98E#zz+92B@^]4?7zs8W-!p](9o!!!!$s8W-!rVuou!!!!0s82lss*t(L!!!!`
-s1eUVs53kW!!!"KrVup#s6p!g!!!'"p](9os82is!!!-$n,NFgJ,TEJ!!!9(^]4?7+9)<@!!!Q0J,fQL
-&-%.[!!", at z#QMR>!!#7_z"979Z!!%NHz!WVWh!!*&oz!WVop!!3,pz!<;rs!!E8jz
-!.XtJ!!E8jz!.XtJ!!iP^z!'gJ`!"]+Fz!'gL6!"]+Fz!$D5k!$D6Vz!$D6V
-!$D5kz!"]+F!'gL6z!"]+f!'gJ`z!!iP^!.Y"Kz!!iPn!.Y"Kz!!iPn!<<#u
-z!!E8r!<<#uz!!E8r!<<#uz!!E8r!WW-!z!!E9!!WW-!z!!3,t!WW&tz!!3,t!WW&t
-z!!3,t"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z!!3-!"98,rz
-!!*&u"98,rz!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!
-#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!z!!*'!#QOQ!
-z!!*&u"989!z!!*&u"989!z!!3-!"989!z!!3-!"989!z!!3-!"989!z
-!!3-!!WW&tz!!3,t!WW&tz!!3,t!WW-!z!!E9!!WW-!z!!E9!!<<#uz!!E8r!<<#uz
-!!E8r!<<'!z!!iQ!!.Y"Kz!!iPn!.Y"Kz!!iPn!'gL6z!!iP^!'gL6z!"]+f
-!$D5kz!"]+F!$D6Vz!$D6V!"]+Fz!$D5k!"]+fz!'gL6!!iP^z!'gJ`!!E8j
-z!.XtJ!!3,hz!.XtJ!!3,pz!<;rs!!*&sz!WVop!!%NHz"97ij!!#7_z"979Z!!", at z#QMR>!!!Q0^]4?7+9-ik!!!9(huE`W
-5Q:]`!!!-$n,NFgJ,TEJ!!!$!qu?]ts7cQo!!!"Krr<$(s6p!g!!!!@s1eUVs1eU7!!!!0s82otrr<$!
-!!!!$s8W-!qu?]szJ,fQKn,NFgz+92B@^]4?7z!WW2tzz!"]*[z~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4675 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4745 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 94 true[1 0 0 1 -4784 -1791]@85 imagemask
-J,fQKhuE`W!.Y%K
-s53kW!!!Q0s8V!W!!!!"s8VQgz!<<(Lz!!%NKz!!!"KrVuouz5Q1W_z!'gA]
-z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]z!!!!`qu?]sz5PtK]
-z!'gA]z!!#7]z!!!!`qu?]sz5PtK]z!'gA]z!!#7]"979Z!!!!`r"&i*
-z5Q!bGrr<$!!'gC2s8Tk7!!#7^rr>:Q!!!!`s7cR)p](9o5QBXA#Q+Q%!'gM!!!E3#!!#7`J,fWM
-!!!!`rr<$!s*t(L5Q1W_!.Vca!'gA]!!#7A!!#7]!!!!`huEaAqu?]s+7K715PtK]!$Ct9!'gA]!!!Q)!!#7]!!!!0
-qu?^]qu?]s&,ZD-5PtK]!!iK'!'gA]!!!9'!!#7]!!!!(rVup_qu?]s#QFc(5PtK]!!iN(!'gA]!!!-$
-!!#7]!!!!$s*t)6qu?]s"93lO5PtK]!!E7O!'gA]!!!-$J,hh3!!!!$s*t)6qu?]s"96.:5PtK]!!E8:
-!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s"96.:5PtK]!!E8:!'gA]!!!-$^]6Us!!!!$s1eV!qu?]s#QMR>5PtK]!!iP>
-!'gA]!!!9(^]6Us!!!!(s1eV!qu?]s#QMR>5PtK]!"]*[!'gA]!!!Q0J,hh3!!!!0s*t)6qu?]s+9-ik
-5PtK]!$D5k!'gA]!!",@!!#7]!!!!`rr<$`qu?]sJ,]KK5Q1W_!.XtJ!'gJ`!!*&u!!#7`J,fWMqu?^]
-s1eU:s82isJ,eF,#QOQ!!<<#m!"],!!.Y%Hrr at QKn,Rt<r."bHs53lAs85+]s8Tk7#QO]Ds8W+L!!*&s&-)\0!!!!@qud!!rVuou"8i3"s7cQo!!%BHJ,eF,!!!!=!"]*[!!!~>
-Q
-q[1 0 0 1 0 0]concat
-67 64 true[1 0 0 1 -4854 -1820]@85 imagemask
-!!!9(J-!Fc!!!!@
-s53qIzJ,f9ErVuou!<<)u!WTq8!!3-"rrN/t!!!-$s8RZMs*t(Ss8W,8s8V!W&-)\0iW&r9!"],!
-#P%il!!!Q0^]F92n,NG1s*t)ts53kW+9)<@+917!!$D4@!"]+F!!#7_!!!9(^]4@!rVup's1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]
-"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!
-s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$
-^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!
-qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!#7]!!!-$^]4@!qu?^!s1eU75PtK]"96.:!'gA]!!E8:!!%NH
-!!!-$^]4 at aqu?^%s1eU7s82is#QMR>!WW&t!"]+F!!iQ%!!%NK^]8laqu at 9-s1eVas82j-s8Tk7~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4923 -1820]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-88 97 true[1 0 0 1 -4430 -1651]@85 imagemask
-z!$D6Vz
-!!!!$s8W&uz!!#7`s8V!Wz!WW3"s7cQo!!!!(s8W-!rr<$!!!", at s8W-!^]4?7!.Y%KJ-Z,D
-zs8VQg!'g5Y!!!-$s1eU7#Q=]'!!iQ'!!!!"rr<$!&-)D)!!!"K^]4@!s6p!g!!",!!!%NK^]4?7
-!"\Q!!<<(Lz"8Diss8N'!!!!!"qu?ctrVuou!!!"J!!E9!z!!#4`#QOQ!z!$;1Os6p!gz%fd.?
-n,NFg!!!!'!$D7!zz5QAM!z!!!!`s1eU7z!!%NKJ,fQLz!.Y$!zz
-s8N'!z!!!$!rr<$!z!!*'!zz!WW-!z!!!!"s8Duuz!!!'"rVuouz
-!!E9!zz"989!z!!!!$s82isz!!!9(qu?]sz!!iQ!zz#QOQ!z!!!!(s7cQo
-z!!!9(p](9oz!!iQ!zz&-)D)z!!!!0s6p!gz!!!Q0n,NFgz!"],!
-zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0
-s6p!gz!!!Q0n,NFgz!"],!zz&-),!z!!!!0s6p!gz!!!Q0n,NFgz!"],!z
-z#QO8nz!!!!(s6p!gz!!!9(p](9oz!!iQ!zz#QOQ!z!!!!$s7cQo
-z!!!-$p](9oz!!E9!zz"989!z!!!!"s82isz!$21 at qu?]sz*Wc<?
-z!!!!?!<<#uz!!#1_s8Duuz!'UC4rr<$!z4og*4z!!!"J!'gL6z!!%HJ5Q?66z
-!.4bgs*t(Lzqu at i=^]4?7!!!#s!"]+fz!!2ut#QN]^z"8i-$s6p!g!!!!$qu?j!p](9o
-!!!9%!!3,pz!"\u-!<;rsz+8c*=J,TEJ!!!!`qu?^]rr<$!!!%NH!!", at J,fQL!<;rs!"]+F
-!!!!"s82is#QO8n!!!-$qu?]ts7cQo!!iQ%!!!$!rVuou+926=!!#7`J,fS!s82is!$D71!!E9$qu?]s
-#QOf(+92B=!!!!"s8W-!s5X"W!!!"Ks8W,u!;lfs!!!Q0s8V!WHiO-H!!3-"rVup\z!"]+F!!#+~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4524 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -4593 -1652]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -4664 -1653]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -4710 -1652]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-35 95 true[1 0 0 1 -4779 -1653]@85 imagemask
-5QCc`i'78As54"Z
-s8N'!5QC3Q!$D7!!!!Q0^]4?Fs1eU7&-%.[!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L
-#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S
-!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQS
-s*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!!iOS!!!9(J,fQSs*t(L#QK;S!"]*[!!!Q0J,fQ[s*t(k
-5Q?66+92 at k!!iQ(J,fTLs*t(L+9-ik!!E7O!!!$!J,fQL++O=k!!@`Ozzzzz
-zzzzzzzzzzzzzzzz!!!&p!!!!$
-qu?]s#Q=]'!"])0!!!Q0!!!!@s*t(L+9-ik!$D5k!!", at J,fQks*t(L&,uV0!!iN(!!!-#!!!!"p](9~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -4819 -1653]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -4889 -1652]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-39 82 true[1 0 0 1 -4951 -1652]@85 imagemask
-!!%N<!!!$!qu?^!
-s8N'!#QOgS!!iQ(^]4oFs53kfs8VQg+9-ld!$D4 at 49-K'!$2+^rW!E.5Q1Wc!'gG_!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]
-!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`
-qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]!'gA]!!#7]!!!!`qu?]s
-5PtK]!'gA]!!#7]!!!!`qu?]s5PtK]5QCc`n3?sQs6q-1s8VQns8W,g"989!!!3,t!!!$!qu?]sJ,B9H
-!'gA]!!",=!!!!0qu?]s#Q+Q%!!E-!!!!-!!!!!"qu?]s!;lfs!!%BH!!!"Hz49,?]!#tt=!!!E-!!!!-!!!~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -4989 -1652]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -5052 -1652]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-0.201248 i
-2711.08 1704.82 m
-2702.03 1705.43 2700.01 1707.44 2692.97 1722.33 c
-2642.86 1836.42 l
-2638.83 1836.42 l
-2596.97 1737.83 l
-2584.09 1708.45 2581.68 1705.43 2572.02 1704.82 c
-2572.02 1701 l
-2611.87 1701 l
-2611.87 1704.8 l
-2602.21 1704.8 2598.18 1707.42 2598.18 1713.07 c
-2598.18 1715.49 2598.79 1718.31 2599.79 1720.92 c
-2609.05 1745 l
-2661.78 1745 l
-2670.03 1725.15 l
-2672.44 1719.51 2673.85 1714.48 2673.85 1711.46 c
-2673.85 1709.65 2672.64 1707.44 2671.03 1706.63 c
-2668.62 1705.23 2667.01 1704.8 2659.76 1704.8 c
-2659.76 1701 l
-2711.08 1701 l
-h
-2612.47 1753 m
-2635.61 1808.06 l
-2658.96 1753 l
-h
-2714.3 1701 m
-f*
-2763.31 1701 m
-f*
-2898 1816.32 m
-2898 1725.15 l
-2898 1708.45 2895.67 1705.83 2880.33 1704.82 c
-2880.33 1701 l
-2936.68 1701 l
-2936.68 1704.82 l
-2921.99 1705.83 2919 1708.65 2919 1722.94 c
-2919 1812.29 l
-2919 1826.58 2921.64 1829.2 2936.68 1830.4 c
-2936.68 1834 l
-2896.63 1834 l
-2852.15 1732.6 l
-2805.67 1834 l
-2765.82 1834 l
-2765.82 1830 l
-2782.32 1829.02 2785 1826.65 2785 1812.29 c
-2785 1730.58 l
-2785 1709.85 2782.17 1706.03 2765.42 1704.82 c
-2765.42 1701 l
-2812.71 1701 l
-2812.71 1705 l
-2797.21 1705.8 2794 1710.4 2794 1730.58 c
-2794 1811.69 l
-2844.31 1701 l
-2847.12 1701 l
-h
-2941.91 1701 m
-f*
-3029.95 1714.28 m
-3026.53 1711.47 3024.12 1709.99 3021.1 1709.99 c
-3016.47 1709.99 3015 1712.92 3015 1722.13 c
-3015 1761.37 l
-3015 1771.64 3014.01 1777.27 3011.24 1781.9 c
-3007.01 1789.55 2998.36 1794.01 2986.08 1794.01 c
-2975.82 1794.01 2966.16 1791.03 2960.52 1786.13 c
-2955.49 1781.9 2952 1776.07 2952 1771.03 c
-2952 1766.41 2955.94 1762.38 2960.92 1762.38 c
-2965.75 1762.38 2969.98 1766.41 2969.98 1770.83 c
-2969.98 1771.64 2969.78 1772.64 2969.58 1774.05 c
-2969.18 1775.86 2969 1777.47 2969 1778.88 c
-2969 1784.32 2975.43 1789.01 2983.46 1789.01 c
-2993.33 1789.01 2999 1783.08 2999 1772.04 c
-2999 1759.76 l
-2967.83 1747.29 2964.39 1745.68 2955.69 1738.03 c
-2951.26 1734 2948.45 1727.16 2948.45 1720.52 c
-2948.45 1707.84 2957.1 1698.99 2969.58 1698.99 c
-2978.43 1698.99 2986.68 1703.21 2998.96 1713.68 c
-2999.97 1703.01 3003.59 1698.99 3011.84 1698.99 c
-3018.68 1698.99 3022.91 1701.4 3029.95 1709.05 c
-h
-2999 1725.75 m
-2999 1719.51 2997.95 1717.7 2993.53 1715.09 c
-2988.7 1712.27 2983.06 1710.99 2978.84 1710.99 c
-2971.79 1710.99 2966.18 1717.69 2966.18 1726.16 c
-2966.18 1726.96 l
-2966.18 1738.83 2974.49 1746.08 2999 1754.93 c
-h
-3030.35 1701 m
-f*
-3031.81 1780.09 m
-3033.62 1780.29 3035.03 1780.29 3036.84 1780.29 c
-3043.69 1780.29 3045 1778.28 3045 1768.82 c
-3045 1674.64 l
-3045 1664.17 3042.8 1661.96 3031.01 1660.75 c
-3031.01 1658 l
-3079.71 1658 l
-3079.71 1662 l
-3064.61 1662.19 3062 1664.25 3062 1676.05 c
-3062 1707.64 l
-3069.24 1701 3073.87 1698.99 3082.32 1698.99 c
-3106.27 1698.99 3124 1721.53 3124 1750.71 c
-3124 1775.66 3110.16 1794.01 3090.98 1794.01 c
-3079.71 1794.01 3070.85 1789.05 3062 1777.68 c
-3062 1793.17 l
-3060.79 1793.57 l
-3050.12 1789.35 3042.88 1786.73 3031.81 1783.31 c
-h
-3062 1768.22 m
-3062 1774.25 3073.27 1782.01 3082.53 1782.01 c
-3097.42 1782.01 3107 1766.52 3107 1742.66 c
-3107 1720.52 3097.25 1704.99 3082.93 1704.99 c
-3073.47 1704.99 3062 1712.47 3062 1718.71 c
-h
-3130.62 1701 m
-f*
-3130.81 1780.09 m
-3132.62 1780.29 3134.03 1780.29 3135.84 1780.29 c
-3142.69 1780.29 3144 1778.28 3144 1768.82 c
-3144 1674.64 l
-3144 1664.17 3141.8 1661.96 3130.01 1660.75 c
-3130.01 1658 l
-3178.71 1658 l
-3178.71 1662 l
-3163.61 1662.19 3161 1664.25 3161 1676.05 c
-3161 1707.64 l
-3168.24 1701 3172.87 1698.99 3181.32 1698.99 c
-3205.27 1698.99 3223 1721.53 3223 1750.71 c
-3223 1775.66 3209.16 1794.01 3189.98 1794.01 c
-3178.71 1794.01 3169.85 1789.05 3161 1777.68 c
-3161 1793.17 l
-3159.79 1793.57 l
-3149.12 1789.35 3141.88 1786.73 3130.81 1783.31 c
-h
-3161 1768.22 m
-3161 1774.25 3172.27 1782.01 3181.53 1782.01 c
-3196.42 1782.01 3206 1766.52 3206 1742.66 c
-3206 1720.52 3196.25 1704.99 3181.93 1704.99 c
-3172.47 1704.99 3161 1712.47 3161 1718.71 c
-h
-3229.62 1701 m
-f*
-3265.22 1793.57 m
-3234.02 1782.51 l
-3234.02 1779.49 l
-3235.64 1779.69 l
-3238.05 1780.09 3240.67 1779.8 3242.48 1779.8 c
-3247.31 1779.8 3249 1776.71 3249 1768.22 c
-3249 1721.53 l
-3249 1707.04 3247 1704.82 3233.22 1704.02 c
-3233.22 1701 l
-3280.92 1701 l
-3280.92 1704.02 l
-3267.63 1705.02 3266 1707.04 3266 1721.53 c
-3266 1792.97 l
-h
-3255.96 1839 m
-3250.33 1839 3245 1834.12 3245 1828.19 c
-3245 1822.35 3249.73 1818 3255.76 1818 c
-3261.8 1818 3266 1822.4 3266 1828.19 c
-3266 1833.82 3261.47 1839 3255.96 1839 c
-h
-3285.95 1701 m
-f*
-3288.22 1781.1 m
-3289.63 1781.7 3291.44 1781.9 3293.65 1781.9 c
-3299.29 1781.9 3301 1778.88 3301 1769.02 c
-3301 1719.11 l
-3301 1707.64 3298.8 1704.82 3288.62 1704.02 c
-3288.62 1701 l
-3331.29 1701 l
-3331.29 1704.02 l
-3321.02 1704.82 3318 1707.24 3318 1714.48 c
-3318 1771.03 l
-3327.46 1780.09 3332.09 1783.01 3338.73 1783.01 c
-3348.59 1783.01 3353 1776.61 3353 1762.98 c
-3353 1720.92 l
-3353 1708.24 3350.47 1704.82 3340.75 1704.02 c
-3340.75 1701 l
-3382.61 1701 l
-3382.61 1704.02 l
-3372.74 1705.02 3370 1707.44 3370 1717.3 c
-3370 1763.39 l
-3370 1782.3 3361.27 1794.01 3346.58 1794.01 c
-3337.32 1794.01 3331.08 1790.5 3317.4 1777.27 c
-3317.4 1793.17 l
-3315.99 1793.57 l
-3306.13 1789.95 3299.29 1787.74 3288.22 1784.52 c
-h
-3385.62 1701 m
-f*
-3479.59 1779 m
-3479.59 1787 l
-3464.09 1787 l
-3460.07 1787 3457.05 1787.58 3453.02 1788.95 c
-3448.59 1790.56 l
-3443.16 1792.57 3437.73 1794.01 3432.5 1794.01 c
-3413.78 1794.01 3399.25 1779.33 3399.25 1760.77 c
-3399.25 1748.09 3404.38 1740.44 3417.6 1733.8 c
-3414.79 1730.99 3411.97 1728.37 3408.95 1725.75 c
-3402.31 1719.92 3400.06 1715.89 3400.06 1711.87 c
-3400.06 1707.44 3402.19 1705.23 3410.36 1701.2 c
-3395.87 1690.74 3391 1684.1 3391 1676.65 c
-3391 1665.98 3406.33 1657 3425.45 1657 c
-3439.94 1657 3455.24 1661.88 3465.7 1670.01 c
-3473.95 1676.45 3478 1683.09 3478 1691.14 c
-3478 1703.62 3468.45 1712.07 3453.43 1712.67 c
-3427.46 1713.88 l
-3416.6 1714.28 3411.77 1716.09 3411.77 1719.31 c
-3411.77 1723.34 3418.41 1730.38 3423.84 1731.99 c
-3427.67 1731.59 l
-3431.29 1731.19 3434.1 1731 3435.31 1731 c
-3442.36 1731 3450.2 1733.81 3456.24 1738.84 c
-3463.49 1744.47 3466 1751.72 3466 1762.18 c
-3466 1767.99 3465.18 1772.59 3462.88 1779 c
-h
-3414.58 1700.6 m
-3421.43 1699.19 3437.32 1697.98 3447.19 1697.98 c
-3465.5 1697.98 3472 1695.57 3472 1688.12 c
-3472 1676.45 3456.76 1668 3433.9 1668 c
-3416.19 1668 3405 1674.07 3405 1683.29 c
-3405 1687.92 3406.76 1690.94 3414.58 1700.6 c
-h
-3415.59 1769.02 m
-3415.59 1780.9 3421.23 1788.01 3430.48 1788.01 c
-3436.72 1788.01 3441.95 1784.57 3445.17 1778.48 c
-3449 1771.44 3451 1762.38 3451 1754.13 c
-3451 1743.06 3445.25 1736 3436.32 1736 c
-3423.84 1736 3415.59 1749.09 3415.59 1768.42 c
-h
-3485.62 1701 m
-f*
-q[1 0 0 1 0 0]concat
-76 93 true[1 0 0 1 -2731 -2481]@85 imagemask
-5QCc`s*t(L!!#7`
-s8W+Lz5QCc`s*t(L!!!$!s8VQgz!$D7 at z!!!!0s8Duuz!"],-z!!!!(s7cQo
-z!!iQ!z!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz
-!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$
-s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jzhuE`Zs6p!g!!(pW
-!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Z
-s6p!g!!hE^!!E8j!!!!(huE`Zs6p!g!"[uf!!E8j!!!!`huE`Zs6p!g!WV'X!!E9$s8W-!huE`Zs8W-!
-s8V!W!!E9$s8W-!huE`Zs8W-!s8V!W!!E9$s8W-!huE`Zs6p!g!WV'X!!E8j!!!!`huE`Zs6p!g!$C,!
-!!E8j!!!!0huE`Zs6p!g!!hE^!!E8j!!!!$huE`Zs6p!g!!D-Z!!E8j!!!!$huE`Zs6p!g!!2!X!!E8j!!!!"huE`Z
-s6p!g!!2!X!!E8j!!!!"huE`Zs6p!g!!(pW!!E8jzhuE`Zs6p!gz!!E8jz!!!!$s6p!g
-z!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!gz!!E8jz!!!!$s6p!g!!!"<
-!!E8jz!,qo?s6p!g!!!#g!!E8jz!:Tsjs6p!g!!!#g!!E8jz!:Tsjs6p!g!!!&h!!E8j
-z!Up'ks6p!g!!!,j!!E8jz"7Q9ms6p!g!!!8n!!iPnz&+BQ(s6p!g!!",1!"],)z
-J+*F[s82is!!iPn!'gM`s8W-!s6p-js8W-!s8W,g5QCc`s8W-!s6r8Qs8W-!s8W,g5QCc`s8W-!s6p~>
-Q
-q[1 0 0 1 0 0]concat
-66 65 true[1 0 0 1 -2809 -2480]@85 imagemask
-!!!!@s1eU7z
-s8Vioz"98E$z!"],0s1eU7!!#7`!'fBA!!!"Kp](j"!!!!"s6p!nqu?]s"979Z"9&9#!!iP>
-!!3*"!!!Q0J,fTLJ,fQkrr<$!J%u$a+8u6?!.Wo,!'gG_!!#7A!!%NH!!!!`n,NH<qu?]s+8>g9s7cQo
-!$Ct9!<;fo!!",=!!3,p!!!!0qu?ctn,NFg&,lP2s6p!g!"]&/"97ij!!!Q0!!E8Z!!!!0rr<<(huE`W#QFc/s53kW
-!!iOS#QN]^!!!9(J-Z+i!!!!(s*tX[^]4?7#QK;bs1eU7!!iP>&-'EF!!!9(^^pI\!!!!(s1f0F^]4?7
-#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!(s1f0FJ,fQL#QMRMs*t(L!!iP>&-%.[!!!9(^^pHq!!!!0
-s1f0FJ,fQL&-'EMs*t(L!"]+F#QK;S!!!Q0J-Z+)!!!!0s*t at SJ,fQL+9-irs*t(L!$D5k"93lO!!",@!!E7O!!!!@rr<*"^]4?75Q:]as1eU7!'gG_!WTq8!!%NJ!!*&7!!!"Kqu?`shuE`WJ,B9H
-J)C;,!<;fo!'frQ!!3,p!!#7Q!!!'"n,NG1p](9rs53kW&,6,)#QMR>!!iE%!"]*[!!!-#!!",@!!!!"
-rr<$`rVuou!<9h7J,B9H!!#7Q"97ij!!!!@s8W,Wz#QOi(J,fQL!!*'!qu?]s!!!!@s53kW!!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -2879 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-97 65 true[1 0 0 1 -2927 -2479]@85 imagemask
-z^]4?7(]XO9
-z!Pe[8!#tt=z!!2!X!!#+]z!!!,Z!!!!_z!!!!$n,NFgIK0?Jz"7Q9j!.OtK
-z!!i9!!!%KKz!!!9!!!!$!z!!!!0qu?]ss*t(Lz&,ZD-!WRZMz!"]&/!!3,8
-z!!",?!!!'"^]4?7!!!!@rr<$$s1eU7z5Q:]`"979Zz!'gL6!!E8Zz!!#7`J,fiSn,NFg!!!"K
-s1eU>s6p!gzJ,d:a&-),!z!<;f/!"],)z!!*&nhuF;ep](9o!!!$!j59nZr;6Np!!!!"
-s5WSK+8l$:z!WV-J!'gC/z!!E8;p]*PRIK0?J!!!-$_"[mopc\ZX!!!!$s+("IJ+,Z&z
-#QK>P!.XK&z!!iOSIK4le*rl9@!!!Q0!.FqJi#dIL!!!!0rr>7`s54E<z&,lPn!WV'g^]4?7!$D1?++aI-
-&&8/F!!",?!$?dl^^%XT!!!!`qu at 7[s*t at 4z5PtKl_uG5hhuE`W!'gA]#KQjp"7Q9j!!%ND!!h]e
-!!2Qh!!!"Kp](EZrr<)hzJ+*F?s8N'"p](9o!<;Ng"98?#!;HNo!!*&g!!3-!!!)co!!!'"huEfX
-qu?_E!!!!"s53kWs82isHiO-H!WV'X!<;rs!.FnJ!!E8:!!%ND!!#1_!!!-$^]4 at ap](:X!!!!(s*t(LJ+s!D*rl9@
-#QK;S!<;Ng!$;1@!!iOS!!*&g!!"*k!!!Q0!!!$!huE`fJ,fQ[rr<$"s53kW%tFW[+9)<@!WV'X!!g:>
-!$D1?!!3,8!!!8>!!",?!!!-$^]4?>huEaAqu?^!s1eU7#N,R^5PtK]#QK;S!!D-Z!.XnH!!iOS!!!,j
-!!%NH!!!9(J,fQOn,NIgqu?^-s*t(L"8Dirs82is+9-ik!!Dur!WW&t!$D6V!!!-!!!E9#!!%NKhuE`frW!3's1e[8s8Duu5Q:^*s8VQns8W+L!<<(L+92B1#QOi(J,oWLJ,~>
-Q
-q[1 0 0 1 0 0]concat
-62 65 true[1 0 0 1 -3026 -2480]@85 imagemask
-!!E8:!!iE%!"],!
-!$D4@!$D7=!'gM!!'gM`!'gMA!.Y%KJ:IUg!<<*!i.(e%!WW3"n:1K9!WW3"r."bE"98?$rr;a5"98,r
-5QC3U"98,r&-),!#QO8n"979Z#QN]^!WV'X#QN]^!WV'X#QN]^!<:sW#QMR>!<:sW#QMR>!<:sW#QMR>
-!<:sW"96.:!<:sW"96.:!<:sW"96.:!<:sW!WTq8!<:sW!WTq8!<:sW!<:sW!<:sW!<:sW!<:sW!.XJ<!<:sW!'frQ
-!<:sW!$Ct9!<:sW!"\u-!<:sW!!E3#!<:sW!!3*"!<:sW!!*%L!<:sW!!#7A!<:sW!!!Q)!<:sW!!!-#
-!<:sW!!!"KJH+O-!!!!@i;_^8!!!!(q#B7Pzs8V!Wz5QBXAz#QN]^z!WV'Xz
-!<:sWz!<:sW!$?^k!<:sW!'e7!!<:sW!.Wo,!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<:sW!<;Ng!<9h7!.XJ<!<9h7!.XJ<!<9h7!'frQ!WTq8!'frQ!WRZM!$Ct9
-!WRZM!"\i)"9/?$!!iE%#Q=]'!!E3#&,ZD-!!3+M5PP3Y!!%NKs6p!g!!!Q0s1eU7!!!'"rVuou~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3089 -2481]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-69 97 true[1 0 0 1 -3135 -2480]@85 imagemask
-!!!'"n,_GI!!!!0
-s8E&sz5QCb7rr<$!!<<*!_>iEn!!3-"s5F"U!!!9(s8VWhs*t([s8W,ps8VQg+926=rVuom!$D7!
-!'gM`p]*PY^]4oFqu?_Hs*t(Ss6p!gJ,]KK"97ij!<<#u!!E8Z!!3,t!!!'"huEfXp](9ps53kXs6p!g
-!WV'X"97ij!!3,X!!E8Z!!!'"huElZhuE`Xs53k^s53kW!WV'X#QMR>!!3,X!!iP>!!!'"huF#^^]4?8s53kfs*t(L
-!WV'X&-%.[!!3,X!"]*[!!!'"huF;fJ,fQMs53kfs*t(L!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"
-s53kfrr<$!!WV'X&,uV0!!3,X!"])0!!!'"huF;f!!!!"s53kfrr<$!!WV'X#QFc(!!3,X!!iN(!!!'"
-huF#^!!!!"s53k^rr<$!!WV'X#QFc(!!3,X!!E6$!!!'"huElZJ,fQMs53kZs*t(L!WV'X!WRZM!!3,X!!3+M!!!'"
-huEfXJ,fQMs53kWs1eU7!WV'X!<9h7!!3,X!!%Ma!!!'"huEb,huE`Xs53kW5MuMA"979Z!$C\1!!E8Z
-!!",1!!!-$huE`fp](:!s53kW#Q+Q%&-(Pf!!E-!!"]+f!!!'!!!", at huE`Ws*t)6s53kW!.Vcas8V!W
-!!#7Q"9&8X!!!!0s8VWhhuE`W#QOh_s53kW!!3-"JcFX.!!!!`rW3&Wz!!!'"huE`W!!!!"s53kWz!WV'X
-z!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kW
-z!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W
-!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!$s53kWz#QN]^z"98DZz!!E9$huE`W
-!!!-$s53kWz5QBXAz!!E8Zz!!!"KhuE`Wz&)[Efz!!2!Xz!!!!A!!~>
-Q
-q[1 0 0 1 0 0]concat
-44 93 true[1 0 0 1 -2821 -861]@85 imagemask
-+92B at s6q-1s8W,g
-+92B at s6p"Qs8Vus!!iQ(^]4?:s8RTL!!3-"!!!!"s8Duu!!3-!zs8Duu!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&sz
-s82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is
-!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&szs82is!!*&s
-zs82is!!3-!!!!!"s8Duu!!E9$!!!!$s8RTL!"],0^]4B7s8Vus+92B at s6q-1s8W,g+92B at s6p~>
-Q
-q[1 0 0 1 0 0]concat
-68 64 true[1 0 0 1 -2868 -861]@85 imagemask
-+92B@!WW3"n/q]1
-rrN0"s6p9ns7cSDs8RTLs8Tk7&-)P-!.Y"K!!iQ!!!#7`!!!-$n,NGQrVup#s6p!g+8u6?"979Z!$D1?
-!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?
-!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!
-s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"
-huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",?!!!'"huEa!rVup!s53kW+8u6?!WV'X!$D1?!!3,X!!",@!!!-$huEa!
-s*t(Os1eU7+90+V"96.:!$D7!!!iP>!!#7`p](j)^]4@!rqla,s*t(LJ,Xot5Q?665QC^Is8W*!!'gM_
-&-)\0!!!Q0rWiK'rVup!s8E-#s82is!'gG`s8Vio!!!9'!.Y%<zrW"&?huE`W!$2+Frr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-67 65 true[1 0 0 1 -2937 -859]@85 imagemask
-z(]XO9z
-!&srYz!!#+]z!!!"HzzIK0?Jz!.FnJz!!*$!z!!!$!z!!!!"
-rr<$!z!WRZMz!!3+Mz!!!-$^]4?7!!!!$s1eU7z#QMR>z!!iP^z!!!Q0
-huE`W!!!!0s6p!gz&-),!z!$D71z!!",?p](9o!!!!`r:g6lz5Q#m/z!'g7+z!!%ND
-HiO-H!!!"Kpc\ZXzs6r2Pz!<;OQz!!3,X*rl9@!!!'"i#_q!!!!!"s54E<z"96.I
-J,fQL!!E8:&&8/F!!!9(J-Wji!!!!(s*t?iz#QK;VhuE`W!"])0"5j.Z!!!Q0!!D]j!!!!@rVuug
-z+8u6 at n,NFg!'gG_!VcWp!!#7]!!)co!!!!`qu?`pzJ+s!DHiO-H!.XbD!.4bH!!*&o!!%HJ!!!$!n,NGPzs6p!g4obQ_!WV'X!'^G`!!3,X!!")@!!!-$huEa!J,fQOs1eU7%tFW[
-#QMR>!"XS[!!iOS!!!PF!!!Q0J,fQS^]4?Fs*t(L#N,R^+9)<@!!hE^!$D4@!!!,j!!#7`!!!!$n,NGQ
-rr<$!"8DirJ,]KK!!Dur!<<'!!!!9%!!3-"J,fQ[rW!3's53kW5Q?6Us8Vus!WW2X+92B=!!3-"hu~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3007 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-q[1 0 0 1 0 0]concat
-47 64 true[1 0 0 1 -3069 -861]@85 imagemask
-J,fQK^]8las8Tk7
-+92B9!!!'"s1eU7!.Y$!!!!!`rr<$!!'gJ`!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?
-!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@rVuou!$D1?!!!!@
-rVuou!$D1?!!!!@rVuou!$D1?!!!!@rr<$!!$D4@!!!!@s*t(L!$D5k!!!!`s1ea+!'gJ@#Q+QdrbrDG
-!.Xum+9$cir]Yi2J,fKis8F,?rX]&."98?2s8E"JrWiK&!"]&2s82j!rW3&s!!%HJJ+s!D*WR;?~>
-Q
-q[1 0 0 1 0 0]concat
-49 65 true[1 0 0 1 -3116 -860]@85 imagemask
-!ItFThuE`X^jlC^
-!!!'"s8W*!!!3,p!.TM!!WV'X+5d,"s1eUFn,NLhJ,fiL!!3*"!!Dur!WE'!"8i-"qu?]trVuus!!!'!
-!!2ip!!3*"!VcWp!WN-#n,NFhrr<)h!!!'"J-"R.!!3+M!T3qX"93lPhuE`Zs*t-c!!!9(J-!Fc!"]*[
-!Pe[8+9-il^]4@!s*t(L!!%NKz!WW0"!!!!(s8N'!!!!Q0rVuou!'gM]zs8Vus!!!-$s7cQo!!iQ(n,NFg
-+92AV!!!!`s8RTL!!*'!rr<$!!WW2t!!!!$s8VQg!!!9(s53kW!"],0J,fQL+92<?!!!!`s82is!!%NK
-n,NFg!.Y$azs8RTL!!!$!rVuou!!*&oz!WVWh!!!!"s53kW0E;.R^]4?g!!3+M!!$s<!WRZM
-!,qo=rr<$!Du]q=!!!#g!!3*"!!)Kg!<3$!!:Tsgrr<$"n,NIg!!!&h!!%KK!!D]j!.TM!#Oh]n5C`_=n,NG1^]4o7!!",!!$C\1!"\Q!5O\XQ"8i3"n,NFhs8W,g!!!"Ks6st-!!!Q0J,fQ~>
-Q
-q[1 0 0 1 0 0]concat
-59 65 true[1 0 0 1 -3171 -860]@85 imagemask
-!!!-$p](9o!!",@
-rr<$!!!%NKs1eU7!!*'!s6p!g!!E9$s82is!!iQ(s8Duu!"],0s8N'!!$D7 at s8Tk7!'gM`s8V!W!.Y%K
-s8V!W!.Y%D!'frQ!<<)W!!i9!!<<(L!!2ut!WW-!!!)uu!WW&t!!%HJ"98,r!!#4`"97ij!!")@#QO8n
-!!!O[#QN]^!!!7S#QMR>!!!,:#QMR>!!!&8&-%.[!!!&X&-%.[!!!#W&,uV0!!!!a&,uV0z&,uV0z&,lP/
-z&,lP/z&,lP/z&,lP/z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-
-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&,ZD-z&-)\0s8W+L#QOi(s8W+L#QOi(
-s8W*!#QOi(s8W*!#Q+Q%!'gJ`"8i-!!'gJ`"8i-!!'gJ`!W2ot!'gG_!WE'!!'gG_!WE'!!.XtJ!<)ru!.XtJ!.OtK!.XnH!.OtK!<;rs!'bu6!<;fo!$?^k!<;fo!$AuV!WVWh!"[uf"979Z!!hun
-#QN]^!!Dur&-'EF!!3'!5Q?66!!%NKs8N'!!!#7`s82is!!!Q0s6p!g!!!-$s1eU7!!!"Krr<$!~>
-Q
-1 i
-16 w
-2513.75 2386.55 896.4 25.2 re
-Y
-2511.35 2399.75 m
-3401.75 2399.75 l
-S
-0 0 6120 7920 re
-Y
-3374.15 2357.75 m
-3387.35 2399.75 l
-3374.15 2441.75 l
-3473.75 2399.75 l
-f*
-2585.75 1006.55 897.6 25.2 re
-Y
-3476.15 1019.75 m
-2583.35 1019.75 l
-S
-0 0 6120 7920 re
-Y
-2613.35 1061.75 m
-2600.15 1019.75 l
-2613.35 977.75 l
-2513.75 1019.75 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/overgrid.eps b/ast-5.3-1/sun211_figures/overgrid.eps
deleted file mode 100644
index 9835925..0000000
--- a/ast-5.3-1/sun211_figures/overgrid.eps
+++ /dev/null
@@ -1,6080 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 17 141 489 645
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/12 18:39:31
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 false 3 colorimage
-a2c6>`PpfpiNfbp
-c-=MC\@ArS[FE^U^:q=q^:p>9U9:Z%U8"BIQ'I&WKp at pgMi3KQ3&gm<z*??.#zzz
-z!&uqt=BJ[*<E2"<3,rqXAnGY;OccH8UrLEodaHRneC<jOm-O**jlPU\hVS2.r5m(&kND$RcHcIi
-s8W-!s8W-!s8W-!s1>nTZEgd<Xf]7K]Y;+o_83t-`l>a,^:h4nZEgd8WMt]0Lm=6jZEgcYF`g\a<<rj9,pai;!!%"Y
-EBZQMzzzz!!$8/>_e)iK7edg&J8eoCMn$-Mi3M#['[`g_qs8,mHs;ecd1nAlL431
-q"XXJkii'Hs4#QJgY:K_s8W-!s8W-!s8W-!s8TI5[$[5JXf\^rSXl[VVnB[TX/i;0[^N$/V50o_['[3'
-P*1][MNX-c>?b<!6ULhR!!WW3!!!!j8P&m^z#mgn<!!!3-"onW'!!!"4BP<<^Mg9Sn'GM6k at q2F7Vk9TRQBmiY
-aiViRcI:7kjlPUdk2tdejkSYHmHs;thVQi7f%\s6s8W-!s8W-!s8W-!s8W+UM2 at CYP(%k/SXl=MW2QD`
-TpqO at ZEgclLkq:[P_Y$LI!g<RAnIX+ScA`j$k*P-4ZsPr('"=7()@Yczzzzz
-Bk_:9L5'kpFrMA>KS5#c['[0GZ_XCmf\"j*e'm%)g>:]CdF$A0mdB6"k2G:Xf%/F0hqul1df9 at Is8W-!s8W-!s8W-!
-N/W^HJUr&jG_q96MMd:dUSEBkJV8]0C2.L#D/E-I;#gRr"U,&Z.Ol&D&c_n3!s8W>'GLNIzz
-!!!6/#64`("9\i-z!/ZPhC2.L;KnUB^)2!Qo_83t!]"5Yk^UUe`e^`4?naYo0lK%$eo()A,gt^T9
-g"tTBe^`4Cp%A at bs8W-!s8W-!s8W-!s.>pUH[C*F?!UuOA6`AEBP;'S:/5M;BjG"M8P)JR!!!-)"?AJ&6psEC!!!TC
-&HDe2zzz"9\i.!<E9)!rr<$$O[>L?XISaCP at IrIt)rH;cAI,LUOY"Y-+qKaN3/lgrmma
-c-=N%n*fB"jm;@#s8W,lp%@_>mG[$_l07I4s8W-!s8W-!s8W-!s8S7FP&>/T;,L1Y6ps."4?5D^4Ztqb
-1c-^5.f]PL!!!!<)]MCA8iARc+!2RV/M-r&!"KJK&J5TTzz!!!!^4ZukJ=!&M+I=6O2R$`/EH$4 at SK7efC
-Q^?4OeC`F+lK[ZWb0&i-jl,1Wp at e4Bk2tacjQ#:\kND$olg*cukjn<8s8W-!s8W-!s8W-!s8W*S1,;Bk
-80]?(/1`=k)]JbWz'bqG`zz9he>E4?Q;29LVB=4$,Ml6pt$T<B)rtz!!!fO(Igk`
-91qoP9heAX:0_%/&eYh"F`i%XHa9r_X/i;?`PoU,^Y%2kcHa_]cd1b9k3;-pkih6ag=l#an+?8EiSibMgY:uWl2Ue`
-s8W-!s8W-!s8W-!.OlnS#mgS3zzzzzz!)ZTjF)uD at Df8-97oN>b8kM]_
-?XJ2.HiO-H%LrtM=''csI!'RSF`hh_LkpG+Hpg at jEH,uCG^-U&[&g at 1bKJ)Qbfnu%hpKj!aN2HajlPRa
-jR2I(lg*lqiSj1kmEX#&g"G'=j5^1>s8W-!s8W-!s8W-!rr<$!zzzzzz+!2Rn77Cs+
-C0Y"K2`EZZ5!ELfA;Z8%G'8%CBk_-iAP5ZhM2@(8H?s=@C4C__WMukUN/W47IZ9>HMMd:ZR at 1On\(THf
-[^NWpe^a!OlcI8jhr!>eq>':>l.atIbfn<&oCLu$in2o9k2th+s8W-!s8W-!s8W-!s8N'!zz
-zzz!!#AR6XF)*A7T4S>$>*5>!YG??=$rVDf:VpNLcW2Vl-G(AS%sEXGD[gZ*CQ_IX[EAOgqp2MMd:6
-F`j:IT");?ZEgdZbKIB(\)ui8n*f_rf%/I)fCAD$kih7)p\4">lh'iAq>'jChVQi7f'DYfs8W-!s8W-!
-s8W-!s8W*!!!#)B4(;Z.2`EYqzz<`W7=DJj]DG\Ll+JqAS_@:="iD1-h\It)s1Ocd&Z[CNiY
-T:_ag]Y();V8:!a]"5J%IX[cURr<4`H?sm[F`kgJaiMQEf%/F(f at T-Gjo>A\cd0r1p%@V8lK76kp\4FTp%@D,jS8NF
-p%A";io85-c2[hDs8W-!s8W-!s8W-!0ekCrBP;:$DJO$'4?P_^1G]CH$X[7J;,L1[7Rgfp at 8g*'H[C*a
-G^, at 5OdVW*UnjfiYHPUO]WA39]tM+j]"5Ja\p&@BBP;'tDf:YrNcoShS"#npdF#5(Z+drdp\4F7f\#`a
-n_DpTiSibNgt_,Wkk=`Dm-O*&kigdUg[aq+`5KUJg=lT,s8W-!s8W-!s8W-!s'B#<KS5#(H$Nq2A8Q1#EH,u*?XGfR
-3HK7_G'8%HDJk#VJTc3[H?smrN/XO,UU[hDZa7!=X/i\;[\BLj]"5J[['YL>KStbH>?b='St<!`X08_1
-]=Y\raN35phX'Uqs8W,alK[Eij6Z.!io8t]kig^Qg$S1om-O*,mdB9$kLnPAl07I4s8W-!s8W-!s8W-!
-s8T'tWL&s<JqAT%I!gs7NbE*>;GpD/Ci"9<G&q_G>?b<LDJk5bLLaq+MMd:dUSGN9]rnN at _o'BmX/i\;[aNUPWiE)*
-Za6$dR#6cYR[T\=TqT*1]=behgY:K<gt_>cmecnYmdBN8o^qhLp#=ujcHa_tk2uI6pupr*jQ,ClnaY8a
-fZ(qNs8W-!s8W-!s8W-!s8W+XN/W.3I#a5IQ^=&%P*23"R#Hu_I=6NeG'8b#MJ?m at 7RfkCUniZsKT1tN
-Q^=&U_SXdNe$HBe]Y(o#bKJ>^d^Q]pW2QYZPa&/HWMukr`l?$2]Y)"o^Zt+LjQ,Cflg*p(m,[6gkND%,rVccrs6f=C
-n*f`2lg*cukiq?rkih6RbKKqcs8W-!s8W-!s8W-!s8W-!Z*CQpO,oZqR%g=LR$a8GZ*AY&HYdM7K7ef>
-P*0QpC2.KuLPLY5I=8&mW5?Eg\[f8UZ*CL9YJ%W_\$ria_o'!o\?E*>Za7!/SXl.8R(U)Ef%/Ec]tNC`
-iV`WOn*f`*j5]e(o]G;ukih6okih*gjT#8[n*f`$h;.,Oj5T(Xg"G'Ys8W-!s8W-!s8W-!s8W-!s/DusSXl=*KnXMd
-EK#j8R at 0IG=]q2^R]39cU8"B=M2 at .KMlNeWXK8LpSt<O)\tc$qUnjg$^V@:g\BE(=daHRU]=ZA6cE++K
-USFTfYHPsc`n]A)dF$@th;.bsp%eFZjlPUcjlQ=6q>0sak2th+s8W&rrVHBekih6nkNDC*n`&Qfs8W-!
-s8W-!s8W-!s8W-!s8T.#X/rD(KnY5&FEE at rM1U>2 at q0#0O,p9>WK3+$R at 0JDX/iP3ZF[WYPa%E?[C*KQ\$riUg=k8l
-]"6;:dFHdt`5KU%[C)TtSr&;\X/i;'Xf]pqce-n&_o'CSk2u7*o&\upmHs<<qtoU at kiV$ioCMS>lg+TN
-s7Z0[naZ/(gY:lQk5YJ]s8W-!s8W-!s8W-!s8W+cQ^<YiN-9AfDf9Pu>?cl<LQdpcVl-GuZEgO3X-f9A
-USFTKPa%K"QBmi&U8"BST:a9Kb1+qjkih6^f at SL#e"WS2Y-+q(V59QHR$jA1bKJ)WdaHe#f\"j/]tM,-daIUQn*'!!
-lg*m.oCM>8m+^:Lr;?Kcp%@D,jRVm4lK[['n*g;Vs8W-!s8W-!s8W-!s8W-!V5:#fWMu/JQ'R`%TqS0]
-XK8M)XI>TH[C*EQ\[f,U[?m5HW2QYXP*2N4TsM)3]"5K*f\#$9h:L91[C*EP\@AH7Vpa#AV5:#cVP^5f
-VT-Wqgt^]5daICEl/^pdiSiban*fB"jo>A\o()A-h;.Memdfr>s8W-!s8UBicL(#ds8W-!s8W-!s8W-!s8W-!s8W-!
-s.c?a^:q=u_SX1,_QL&EP*2!G_o'F2`4s(%`l?$WiShMb^9tAVWiE(nU8#0-\@/iSdaHRpf%.dX`6lu[
-`l?$Cc-=qpfu:qLVP^6Hh;,rb_U?l\o()A9l08!<q!%&-kND$^g=kHAhu*EMp\4FJlg+QLroiS0e^`4,
-hVRGYkPtS^s8W-!s8W-!s8W-!s8W-!s8U[$f"&?%Unjg*`Pog8`O`Xlbfn;ZdaHe#f]2#Pe^`4*gt^B-e&]VOeC<"'
-gt^)rbK at uMhVR,:dF%FOn'B>+b0%l#TqT]Sbd"FXgt^]Eio9"Yj7Dm6j5]1emHs0&l1=N<p at e4WqtoaH
-m-jE3rr2onqYL'bqY9j\aN2H^io:"<s8W-!s8W-!s8W-!s8W-!s8W,;`5L-Re&]VOaN2H_j5\8'aku"5
-cd0qif\"[%e'umsaiVZB_o(6`gXXj)eC<"!f%/C%e^N!rlK[ZqjQ+nCf%&=$dF$@je'ljte\oDEkih7+q>&e"g\^mF
-k2tgnmHs&uk4SE?q"XXJkihC"m/-\Wj5]1_kNDmFs4c;_hr!>ks8W-!s8W-!s8W-!s8W-!s8W-!]tM,%
-b0&/\dbEO2j5]1[j5]7_jkAGBf\"ir`l?Z`f\+s2aiVZbj5\tOh9XEncd0r!jlP+Gf?MRbjQ,Cak2t:I
-fAkoObKJ)WdaI"/hV?oAlg*m0p%@\<m.'W9q>'jSmdBB*lM:8Okih6umdB,qj5T(XgY:K]rVbd:j/oGcs8W-!s8W-!
-s8W-!s8W-!s8W-!s2`:&eC<"2kND*ol.k(Llg*llgt]HN\_Z)tgt^]QmdB2ujkntQe^`3RYHQ^8gXXj)
-jQ,C>_o(-Zf\bTDnaZ/(gY:]GiV<3Cg=k9KmdB6"k4/!3q"XXLlK\0>pu:;mn*f`8naZ2 at o)JaikND$i
-jlQ.,o_SF\m-O*"jQ-@@s8W-!s8W-!s8W-!s8W-!s8W-!s8VBLlJ^^\eC<"Ap at dP,j5oCab0%likNCOOg#M,Qhr!>@
-eC;ppdc09G[C*F)k2u7*o%;UIa2c6ZiSj1kmHEcthr!>Ae^`jGkMtU_lg*lqiSj(elKRQtm-O*)lg+9<
-pA+O[rr2omq>'[To]YN&naZ/Eq"W\$h<jUsf\"jVs8W-!s8W-!s8W-!s8W-!s8W-!s8W,RgY9BR]["gJ
-naZ.qcd2C]pu12j`l?$Cc->J9kjIm,k2tgmm-N!Ac*=OYnaZ/Ao^qA2kiCgcgt^]5daGb>]Dqp2iSibXk2tdejlbgi
-lK[Zpj5^+:rV60_rVc]fp%?tif_>.7o()A-h;.Pgn+QJKqtp9IhVRqup!M17s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!o^qeKp%@1uhWEt_hr!>gqto7,hUpK5g=k9Oo((SkguIGTs8W,dmHrKUf%Ja0o^qe%cd1tE
-m,?p^k2tghkND7"mHs<.mdBN&io91ckktAVb0%l\g=kfUl0.?poCMS2hr!JSj7W*<r;?KhqYK"&gu%#Hm-O)if%0m$
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4Z2\l07Hmj5]OomIp8Io()A"daI"/hWjCkmdBMtgY;/amap(B
-kih6UcHb;'hSd at Ng"G'Rq"Wt4jlGL`mHs<4oCLeoh;$f at hr!>VlKZpMeb8_1lK[ZtkND:$mdp&AoCMSI
-p at e+LoBu&7s8W,np\4O\qX!S8p%A"Xs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8U?gc11>oc-=Mtl06O?ccs_Zh;-o2
-bfno!h=gR9mHs<0n*fi<o$5P+io8tam-Ma3`nT8&h;-oIj5]k,p>Y)ko^qe=kND3um.0`<lg*m3q"XRV
-p@@eFq"XXSnaZMRqu?]ro^qe?l07KulL431mdBNCs8V<Hkgn>9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W,UhVR)Eh;R>OdaHS#hVQr=g$.bccHa_kh;.D_lh0rDf%/F>mHr0Cc, at Q=j5]1Gcd1nAlK@?nkih7+q>'dZp\FX\
-j5]1al07a.nb)SJs8W,rqtpEns8Dopp at e4?j5]Usn+#r<q>'jRmHs?0md]i;o^qeUs8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!g"G'MoCM84lI+,/iSibQhr"8*q:=-Jm-O)jf at THYmf*4bf\"if]"5r&
-a6DjQmdBN*k2tmkkje35lg*m$l08$>q=4"FmdBMsg=ko[m/I"`l07I!m-Ns"ki_-lmdBN0m-Niqjmr!5lK[[7s8VHP
-m+0b=mHs<@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5W/"l07H`f%0-OlIXY>hVR,>e^aEgpZh&/
-q"XXas8V?Jl0 at R!aN2H>_SYa/maft?e'ldqeC='[o'>W-iSibip\3\,ipH.#oCMS1hVRP_lKRQtk2th#
-p\4LZq=!e at mHs<4oCM/.kM+bGg"G'Ys8V?Jl-e#.s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V3Bjk8>?hr!>X
-m-O**m+9k at m-O*4p at dn@mIp8In*f`+jQ,1ShTF!`jQ,CSf\"p3g?@balK[ZtkNDd at r:TaUp at e4Hm-OB:
-o_SF\o()ABo()8<n)rlsq"XXMlg*g"l2L\]s8W,emdB]<oCr"RkND$]g"HE*s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W,^kND3um+gCOj5]1`kihR,naGr8rVc]kqYKs\p\FX\mdBN0m-Mp=bL+_biSibdo((r*k55&Q
-r;?K`o((DafC/1sjlPU_iSjY0qWR/,lg*m1p at de:lKdd%daHS:p%@\<m-jE3lg*m,naY;cg&D!Mp at e4[
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!o()A+gY;,_mHX!%kih6nkND$kkPY8Ur;?K]n*fl>
-oChnOcd0r"k2tacjR;R+gt^]AhVRGYkP4iIp%A"Ur;>pJm-F!'io8tmq"XIPoD/4Xm-O**m-Ncmj6>gmlg*lujlQ+*
-oDSXdiSibXk2tdejlu$os8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s6An7n*f`8naZGNq:aQV
-q>'j_qYKF>kj7[&lg*m7r;?!Nm_?NOcd0r8r;>^>k5"iKo^qeCmHsW at p@S"LkND$lkihC"m.^8KlK[['
-n*fuDp=S$Mkih7%oCMeRq>^Kps8W,blg*]qk5+rNjlPUVf\$6(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8V]^oDejjjlPUsp%A at bs82]js8W-!s8W-!s7c9^gY:K2daH^tf&#9?oCMSBn*f#cgZ[kbo^qeOq>'^V
-p%S4Ts8W,\jlPXek5"iKlg*m'm-OZJr9ES4hVR,7cHb5#h#73Ml07I4s8U?gc0Xf`kND%.s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,hnaZ&8mcs*&q>'jPlg+9<p?(N"m-O*/naZ#6mHEcteC<!rdaI at Ckf:`a
-h;-o_q>&n(hZ*WUkND$unaZ2 at o)/F`q>'jNl08-Dr:fs[s8W,ko^qkNp?Lr.p at e4[s8VQVn,NFfoCMRs
-bKJo)irB&Ys8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih71s8VfdpAb0mrVc]iq"WRs
-gAh3Qs8W,^kNCXUgsjj'm-O**m-OB:o_/"Pj5]1op\3CqgAV!KlK[['n*fW0m-X3-r;?Kcp%A.Vq<I81p%A"Xs8V?J
-l1t/No^qeMp\4U`r;Zfsio8tcmdC,Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Tg
-o()AOs8V``o_\O_p%A"FmHsK8o)8Ocs8W,Le^a*UmdBN2mHs<$j5]h*p&+acrr2oVio9e0q=aOUp\4F[
-r;?Tps8;fmrVc]iq"XFNo&Jcjo^qeRr;>dBkjIm,mHs<4oCMVHo^;/8s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8VHPm,[6gs8W-!s8VQVn+QJKs8W,mp at e+LoB#)qlK[Zoio9Comd9E/jQ,CYhVS,*
-qWdA2rVc]Ykih6okhb1Qlg*m*n*g;Vs82]jp%A"TqtosTo&\upnaZ/8lg+TNs8;fmmHs<'k2u7*o)Jai
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Of\#NUlgF3/q"XX\qYKXJme?JMkih6nkND!ik2G:X
-oCMSGo^q;.k4\NBqtp9`p%A at bs5N%tb0%m,s8V9FkNM-ns8W,`l07m6p&"X`q>'jXoCN"^s7GsUkih6n
-kNDO2p&4jflg*ldeC=Nus8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih6sm-OWH
-qu?]rg"G'MoCMkVqt9XTlK[[-p%A%Pp?V&1p at e4AjlPgolf[Hon*f`5mdAuihuE`VlK[[7s8VZ\o(2JEoCMSQrr2fl
-qsNn?p at e4[s8V]^oCDJClK[['n*f>ujN#<]s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s6oFFnaZ/Bp%A1XqY0aYp%A"Ur;?9^p@@eFjlPUJbfoJAmJm4de^`4Ms8Vlhq"==Qo^qeJ
-o^q,$iS<5DnaZ/?o()h\s8W-!p\4FHl07g2oDJOalg*m9rr2<PmIB`:h;-oQlg+TNs8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VWZn`f<&qtp9Mio9e0q<-r(f at SX%dF%FOn*f`6n*f`6n*g;V
-s8W-!naZ/Ir;>gDl21AThVR,Rl07EqkiCgclK[["lK\!4oD\ago^qeUs8W&rrVHBel07HrkihX0oDJOa
-kih71s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,\jlP1Kg%"V&g"G'GmHs`Fq;L;k
-q"XXZq"XIPoD/4XiSibPhVS50rT<8)s8W,fn*g;Vs5rJ+o^qeQqto$uf_YI at p%A"<j5]OomJQn[s8W,h
-naZSVrVuotr;?K`o()28mJm4ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!gt^]Eio91ckk+N>o^qe?l08$>q>^Kpp\4F6f at TlqqW6i#o()ADo^qV at n,NFfg=k9[rr2<PmI0N4rr2ofo()DD
-oBbi1s8W,cm-OE<p%S4TmHs<2naZMRqqg2dp at e4+cd2Xks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s7lBanaZ/Ao^q;.k4J<<j5]2"s8V<Hkk"E;mdBNCs8VWZn_N$WjlPUm
-n*g;Vs8W-!iSibYkNDO2p&G'lqYL'dr;?<`p[n+Mp at e4CkNDR4pA"FXdF$A>r;?Kjr9!/(s8W-!s8W-!s8W-!s8W-!
-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V]^oCV\IhVR,`p\4=Po_naes8W,cm-Ns"
-kkb/Pp\4F\rVbm at k55&Qo()AAnaZ8Do[VLBq"XXTo((o(jmhm2iSibdo()GFo^_SDo^qeIoCM>8m.BrB
-hr!>Xm-Ma3`rH)=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W*~>
-Q
-0.36 w
-1 J
-1 j
-1 0 0 rg
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-0 0 1 rg
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/overgrid_bw.eps b/ast-5.3-1/sun211_figures/overgrid_bw.eps
deleted file mode 100644
index 7046ecb..0000000
--- a/ast-5.3-1/sun211_figures/overgrid_bw.eps
+++ /dev/null
@@ -1,6001 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 138 489 648
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1998/06/15 11:01:49
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-543.14 1777.49 4343.48 4343.48 re
-Y
-q[10 0 0 10 0 0]concat
-51 51 8[0.117417 0 0 0.117417 -6.377 -20.871]@85 image
-ai*)CcFL:2^:pAF
-UQ^:nNA^b:+92BA!!!!W='%;#B9T+/eC<sPjPU!ZlH]G0s8W,5Z`_$V`5KC(Z`&\DZZfIX-3/'Jz
-!!$8[Je2a7NO-R\n':4eqWe+1g&M*Ps8TEmY+;N*W3`7oZ]gB4>X8>n!(Hqg$3150!,%:8'k4,4R*!Y'
-jQ,CTn))XJs8W-!s+lkeSZ&<SZ\Xg$I:o)N$9Jt&'`\46zB8CaNK!VeYg!n^4cL9iOeDJdUs8W-!NIlA1LnfQR
-ChurK"Y1,a"Vh";!!!0&"TSOYCk<UX^:CtgeF2\`p#"H[eFikAs8W+iI9^5dB1urC7K<TR5l_Grz
-"TSN&$=[h'I8Pg,Y0#SCcL9iZs7Pj<lMpnas8S:!;*d9*4#SSh!#nTi+=dF'&-)\1!'=7)I@,5&Jsb'@
-lH/,Ep#P2plK[['s8W-!s"Qti.iSHg'`\469KPp;4%<:0!!!a'9MA,b&9<3*Y/J'-cHbM9lIkY!hq@;ps8W-!.gc7V
-z!!!!rEbn3B9O`DM&6F:#Eeo-0Ed+jmaj/ehalMOOlJM'Ug#W25s8W*!zz+@^0P2F1f3
-G at tP^Lja)kW/Z4bNL790\^]odhtlWkcLp8OjT#8[s8N'!z!!#;i at U*/(@WII!W+W8hY'lMENH1T#
-ZcTc=n'p%ZlLjH8qVTffs8W-!rr>,i2?3^W=)<(nJmrPEJs3OOS\Cl;\UC#hI<*HOeCip_cLpJ`p%@DBp#"'ps8W-!
-0kY<=4#%(O;+>"lI<UmBUTV>6^:CduB6&uUS^+CPqUt>jhq@;flK['k`7b1js8W+(Jp1[?Eah+NGAMkT
-I>t#4Z`^X0\[-mI>b/%#\]Naos6A\6hs/n`n*fPplMpnas8T$bJpiVk;/CGs>\o4*NMF4j`3-GrW3_kI
-R%q4+g"Gijn+HA2cK+iejR:d?s8W-!s,DGdR$3nsI<UK`7\bQpR)IL\^<+m8W0=0Y`4itNjQc$kjT#8Kn*93'lH0)+
-s8W-!Z]1?IR'V3WJs1"eLjc5?\[/HQ\\u%]Z^mJte at si:n)X0&lK[I1n)*3`g&M*Ps8W+tSUtmAQrfZR
-UPOo.Y+<+uUV=:\e at El-UTVPgcJS<kjQ-16jT#8VlK[j!s8W-!s8T7)JoZ[!@[!aMR&I@%PI%g1ft#DX
-`3Z"jY--('`8pUPn+u>1p$2SMn(He%s8W-!s-SdiEa4EaW3`XoUQ_(4URfNVlIj[^Y+qAOajf"s^=;W:lLjGqqXrqB
-lL4cQs8W-!USsBDSZ],_ZamE0W0=!_\_5liZam$aUSt-0g!o<Jhs]Y+p##62s8UC5s8W-!s8W+o^;Rsm
-PJkDRaksh=W2$o0cIBeXaj/SXUYj#>n*9c7jOrGep$2SBeDK?es8W-!s8UTZUVt*]cICP.eDJcteDJBi
-hp1]9adp_`hr!MfjR;C,p%n.Gs8)TgalNL%s8W-!s2<F/alLS$cIp^sai)l^eC<!tlK$IEcIC@^lMB31jR;1&qWdAB
-jQ-?ohuE`Vs8W-!^<+[RjQ,CTfu2RsalM@)cK*L#jQ,"Tajf5*lLjW7qX<_GlL3fpg&L-9s8W-!s8W,@
-eEZ>VlJK/0hs]X`e?7KSjM]a/n(HUpg$e"jqWdq<n*frLlK%X7lK&!Fs8W-!s8VBAeFhn`am.R?hpg05
-ZfLT.akuRPhpg`JlJLmllK\'=s8)ERn+tr1g&M*Ps8W-!s4P-3n':de`6RZ:jQb$sn+Gu,g!mb9hrNk`lK&!As7P(<
-n)*U,qVUtks8W-!s8W-!p%@5'htl6`g$dhZs6nIjp!3$`jQ,dun)Wd1ak>tEp#"j'qYK+,n'qC;s8W-!
-s8W,PlK%F,p!hman(I0_lH\;*g%sdjn+GSqhs/_alK[j2p%A"Hs7Q6Rp&G'ls8W-!s8UC5cK`^#hp1-P
-n*f_jhs//5hrOIkp$1i2lMC2HqX=:\p$1i2n,M\&s8W-!s8W-!s52_keDJsEcJRp[eF1]$jNd&OlMC2MjQc4,s8)cq
-p#PT1qX<nAp&G'ls8W-!s8W-!g%FX[hr":[n'ph+ft#5in)Wd&lK\67n(I"+lK[["n*9!&lMp/!n,NFf
-s8W-!s8W,[lI>+Khph>aqZ#jGai*YteC<sPht>mqp##'"jRrB<n+Gu!g&L?es8W-!s8W-!s8V05hs0[`
-n+H/Bn)WBJjOr5OlK\6=p$25Hn*f`+qWdAGs6oXRjOsS5s8W-!s8W-!s6B(+jQc4&s8)Ebn*eBDht?(,qX<,+jPTh!
-lLjH-eFi+qlL3F+p&G'ls8W-!s8W-!n(I0plK[I,qX=+McK+'Tg#))kp%mt=jSJQGlK[HqlK%X<hrNk`
-s8W-!s8W-!s8W,an*g,+qYKLBlMBt`cMHVup$_SHlK[[2lL4E!lLk#Rs6A\AjOsS5s8W-!s8W-!s8Vcl
-jRrQLs8W,qg!nO/p$^T!p%n at Ss5`8;lL4T7hp1-ZlMo/pjT#8[s8W-!s8W-!s6oFAqWdb7n*f`1eC<d*htl71jR;R6
-qWdqMs7Q'Mp&FL\ouZ:ps8W-!s8W-!s8W-!lMpPWs8(FKs6ALklL4E=jRq4+lL4$,qXs^Mp&F=Rp%A1]
-jR<-Ks8W-!s8W-!s8W,qn,N(Wp$_ALs4$N+n)X0<s53\GqYL6gs8)3Fp&F=Gn+HABs8W-!s8W-!s8W-!
-s8VBFs8VQ\s7Q'GlJM(!jPTh!s6An,lL4cLp%n.<n*9rLn)Ws;s8W-!s8W-!s8W-!s4Q]+qYK[RlK%$`p%@D=qXsmL
-aoCYks6B:RqXsm]lK\'BlI>k6s8W-!s8W-!s8W-!lL4TLg%G47lLji8p#PE!n*f06lMp>Gp&FmWp&F^R
-lL3fUs8W-!s8W-!s8W-!s8W,fn+HPMp%n at SjNd5oeGoC<p%@5"n*g;Vp$25HlMp>Ahs17As8W-!s8W-!
-s8W-!s8VQQqVV/1g!9'Tn*g;Vn+u>Ghs0LflK\'Bp&G'glK\'=lMpnas8W-!s8W-!s8W-!s5_l%g$edpqYKm]hr"Ip
-s6p!Kp%mA<p#PT<s6p!fqXs=Ws8W-!s8W-!s8W-!s8W-!g#))fp$2DRp"B3&n+H/Lg&LO0s6oXGs6oXR
-n*g,1p!3U;s8W-!s8W-!s8W-!s8W,qn+Gc7jT"N<n,Mk6jR<-Khs0n7qYKmXp#PfBcMICus8W-!s8W-!
-s8W-!s8W-!s8Vcbht?[Bs6AnGp&F+Ln*fr!qX<M6hs^7,p%@eHhs\M`s8W-!s8W-!s8W-!s8W-!rr~>
-Q
-5.04 w
-1 J
-1 j
-0 g
-2283 1777 m
-2286 1812 l
-2290 1870 l
-2293 1927 l
-2296 1985 l
-2299 2042 l
-2301 2100 l
-2302 2158 l
-2303 2216 l
-2303 2274 l
-2302 2332 l
-2301 2390 l
-2299 2448 l
-2297 2506 l
-2294 2564 l
-2291 2622 l
-2287 2680 l
-2282 2738 l
-2277 2796 l
-2271 2854 l
-2265 2913 l
-2258 2971 l
-2250 3029 l
-2242 3087 l
-2233 3145 l
-2223 3202 l
-2213 3260 l
-2203 3318 l
-2192 3376 l
-2180 3433 l
-2167 3491 l
-2154 3548 l
-2141 3606 l
-2126 3663 l
-2112 3720 l
-2096 3777 l
-2080 3834 l
-2063 3891 l
-2046 3948 l
-2028 4004 l
-2010 4061 l
-1991 4117 l
-1971 4173 l
-1951 4229 l
-1930 4284 l
-1909 4340 l
-1887 4395 l
-1865 4451 l
-1841 4505 l
-1818 4560 l
-1816 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1911 1777 m
-1913 1784 l
-1924 1834 l
-1935 1885 l
-1945 1936 l
-1955 1987 l
-1964 2038 l
-1973 2089 l
-1981 2141 l
-1989 2193 l
-1997 2244 l
-2004 2296 l
-2010 2349 l
-2016 2401 l
-2021 2453 l
-2026 2506 l
-2031 2559 l
-2035 2611 l
-2038 2664 l
-2041 2717 l
-2044 2770 l
-2045 2824 l
-2047 2877 l
-2048 2931 l
-2048 2984 l
-2048 3038 l
-2047 3092 l
-2046 3145 l
-2044 3199 l
-2042 3253 l
-2039 3307 l
-2035 3362 l
-2031 3416 l
-2027 3470 l
-2022 3524 l
-2016 3579 l
-2010 3633 l
-2003 3688 l
-1996 3742 l
-1988 3797 l
-1979 3851 l
-1970 3906 l
-1961 3960 l
-1950 4015 l
-1940 4070 l
-1928 4124 l
-1916 4179 l
-1904 4233 l
-1891 4288 l
-1877 4342 l
-1863 4397 l
-1848 4451 l
-1832 4506 l
-1816 4560 l
-1815 4564 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1813 4570 l
-1813 4570 l
-S
-1433 1777 m
-1446 1809 l
-1464 1851 l
-1482 1893 l
-1499 1935 l
-1516 1978 l
-1532 2020 l
-1549 2063 l
-1564 2106 l
-1580 2149 l
-1595 2193 l
-1610 2236 l
-1624 2280 l
-1638 2324 l
-1651 2368 l
-1665 2413 l
-1677 2457 l
-1690 2502 l
-1702 2547 l
-1714 2592 l
-1725 2637 l
-1736 2682 l
-1746 2728 l
-1756 2773 l
-1766 2819 l
-1775 2865 l
-1784 2911 l
-1793 2958 l
-1801 3004 l
-1808 3051 l
-1816 3097 l
-1822 3144 l
-1829 3191 l
-1835 3239 l
-1840 3286 l
-1845 3333 l
-1850 3381 l
-1854 3429 l
-1857 3477 l
-1861 3525 l
-1863 3573 l
-1866 3621 l
-1867 3670 l
-1869 3718 l
-1870 3767 l
-1870 3816 l
-1870 3865 l
-1869 3914 l
-1868 3963 l
-1866 4012 l
-1864 4062 l
-1862 4111 l
-1859 4161 l
-1855 4210 l
-1851 4260 l
-1846 4310 l
-1841 4360 l
-1835 4410 l
-1829 4460 l
-1822 4511 l
-1815 4561 l
-1814 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-732 1777 m
-733 1778 l
-758 1811 l
-782 1843 l
-807 1876 l
-831 1908 l
-855 1941 l
-878 1974 l
-902 2007 l
-925 2041 l
-948 2074 l
-971 2108 l
-993 2141 l
-1015 2175 l
-1037 2209 l
-1059 2243 l
-1081 2278 l
-1102 2312 l
-1123 2347 l
-1143 2382 l
-1164 2417 l
-1184 2452 l
-1204 2487 l
-1224 2522 l
-1243 2558 l
-1262 2593 l
-1281 2629 l
-1300 2665 l
-1318 2701 l
-1336 2738 l
-1354 2774 l
-1371 2811 l
-1388 2847 l
-1405 2884 l
-1422 2921 l
-1438 2958 l
-1454 2995 l
-1470 3033 l
-1485 3070 l
-1500 3108 l
-1515 3146 l
-1530 3184 l
-1544 3222 l
-1558 3260 l
-1571 3299 l
-1584 3338 l
-1597 3376 l
-1610 3415 l
-1622 3454 l
-1634 3493 l
-1645 3533 l
-1657 3572 l
-1667 3612 l
-1678 3651 l
-1688 3691 l
-1698 3731 l
-1707 3772 l
-1716 3812 l
-1725 3852 l
-1733 3893 l
-1741 3934 l
-1749 3975 l
-1756 4016 l
-1763 4057 l
-1769 4098 l
-1775 4140 l
-1781 4181 l
-1786 4223 l
-1791 4265 l
-1795 4307 l
-1799 4349 l
-1803 4392 l
-1806 4434 l
-1809 4477 l
-1811 4519 l
-1813 4562 l
-1813 4565 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 2622 m
-551 2630 l
-577 2656 l
-602 2682 l
-628 2709 l
-653 2736 l
-678 2762 l
-703 2789 l
-728 2816 l
-753 2843 l
-777 2870 l
-801 2897 l
-825 2925 l
-849 2952 l
-873 2979 l
-896 3007 l
-920 3034 l
-943 3062 l
-966 3090 l
-988 3118 l
-1011 3146 l
-1033 3174 l
-1055 3202 l
-1077 3230 l
-1099 3258 l
-1120 3287 l
-1142 3315 l
-1163 3344 l
-1184 3372 l
-1204 3401 l
-1225 3430 l
-1245 3459 l
-1265 3488 l
-1285 3517 l
-1304 3546 l
-1324 3575 l
-1343 3605 l
-1362 3634 l
-1381 3664 l
-1399 3693 l
-1417 3723 l
-1435 3753 l
-1453 3783 l
-1470 3813 l
-1488 3843 l
-1505 3873 l
-1521 3903 l
-1538 3934 l
-1554 3964 l
-1570 3995 l
-1586 4026 l
-1601 4056 l
-1616 4087 l
-1631 4118 l
-1646 4150 l
-1661 4181 l
-1675 4212 l
-1689 4244 l
-1702 4275 l
-1715 4307 l
-1728 4339 l
-1741 4370 l
-1754 4402 l
-1766 4435 l
-1778 4467 l
-1789 4499 l
-1800 4532 l
-1811 4564 l
-1812 4567 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 3506 m
-561 3518 l
-588 3538 l
-615 3558 l
-642 3577 l
-669 3597 l
-696 3616 l
-723 3636 l
-749 3656 l
-776 3675 l
-802 3695 l
-828 3714 l
-854 3734 l
-880 3754 l
-906 3773 l
-932 3793 l
-957 3813 l
-982 3832 l
-1008 3852 l
-1033 3872 l
-1057 3891 l
-1082 3911 l
-1107 3931 l
-1131 3950 l
-1156 3970 l
-1180 3990 l
-1204 4010 l
-1228 4029 l
-1251 4049 l
-1275 4069 l
-1298 4089 l
-1321 4108 l
-1344 4128 l
-1367 4148 l
-1390 4168 l
-1413 4188 l
-1435 4207 l
-1457 4227 l
-1480 4247 l
-1501 4267 l
-1523 4287 l
-1545 4307 l
-1566 4327 l
-1588 4346 l
-1609 4366 l
-1630 4386 l
-1650 4406 l
-1671 4426 l
-1691 4446 l
-1711 4466 l
-1731 4486 l
-1751 4506 l
-1771 4526 l
-1791 4546 l
-1810 4567 l
-1811 4568 l
-1813 4569 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4183 m
-554 4186 l
-584 4197 l
-615 4208 l
-645 4219 l
-675 4229 l
-705 4240 l
-735 4250 l
-765 4260 l
-795 4271 l
-825 4281 l
-855 4291 l
-884 4301 l
-914 4311 l
-943 4320 l
-973 4330 l
-1002 4340 l
-1031 4349 l
-1060 4358 l
-1089 4368 l
-1118 4377 l
-1147 4386 l
-1176 4395 l
-1204 4403 l
-1233 4412 l
-1261 4421 l
-1290 4429 l
-1318 4438 l
-1346 4446 l
-1374 4454 l
-1402 4462 l
-1430 4470 l
-1457 4478 l
-1485 4486 l
-1513 4493 l
-1540 4501 l
-1567 4508 l
-1595 4515 l
-1622 4523 l
-1649 4530 l
-1676 4536 l
-1702 4543 l
-1729 4550 l
-1756 4556 l
-1782 4563 l
-1809 4569 l
-1810 4570 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 4696 m
-548 4696 l
-582 4697 l
-617 4698 l
-651 4698 l
-685 4699 l
-719 4699 l
-753 4699 l
-788 4698 l
-822 4698 l
-855 4697 l
-889 4696 l
-923 4695 l
-957 4693 l
-990 4692 l
-1024 4690 l
-1058 4688 l
-1091 4685 l
-1124 4683 l
-1158 4680 l
-1191 4677 l
-1224 4674 l
-1257 4670 l
-1290 4666 l
-1323 4663 l
-1356 4658 l
-1389 4654 l
-1421 4649 l
-1454 4644 l
-1487 4639 l
-1519 4633 l
-1551 4628 l
-1584 4622 l
-1616 4615 l
-1648 4609 l
-1680 4602 l
-1712 4595 l
-1744 4587 l
-1776 4580 l
-1808 4572 l
-1810 4571 l
-1812 4571 l
-1812 4570 l
-1812 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5102 m
-557 5098 l
-596 5089 l
-634 5079 l
-672 5068 l
-710 5058 l
-748 5047 l
-786 5035 l
-823 5024 l
-861 5012 l
-899 4999 l
-936 4987 l
-974 4974 l
-1011 4960 l
-1048 4947 l
-1085 4933 l
-1122 4918 l
-1159 4904 l
-1196 4889 l
-1233 4873 l
-1270 4857 l
-1306 4841 l
-1343 4825 l
-1379 4808 l
-1416 4790 l
-1452 4773 l
-1488 4755 l
-1524 4736 l
-1560 4717 l
-1595 4698 l
-1631 4678 l
-1666 4658 l
-1702 4638 l
-1737 4617 l
-1772 4596 l
-1807 4574 l
-1809 4573 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-1813 4570 l
-S
-543 5444 m
-564 5435 l
-605 5414 l
-646 5394 l
-687 5373 l
-728 5352 l
-769 5330 l
-810 5308 l
-850 5285 l
-890 5262 l
-931 5239 l
-971 5215 l
-1011 5191 l
-1050 5166 l
-1090 5141 l
-1129 5115 l
-1169 5089 l
-1208 5063 l
-1247 5036 l
-1285 5008 l
-1324 4981 l
-1362 4952 l
-1400 4923 l
-1438 4894 l
-1476 4865 l
-1514 4834 l
-1551 4804 l
-1588 4773 l
-1625 4741 l
-1662 4709 l
-1699 4677 l
-1735 4644 l
-1771 4610 l
-1807 4576 l
-1809 4574 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-543 5757 m
-554 5749 l
-597 5720 l
-640 5690 l
-683 5660 l
-726 5629 l
-768 5598 l
-810 5567 l
-852 5535 l
-893 5502 l
-935 5469 l
-976 5435 l
-1017 5401 l
-1057 5367 l
-1098 5332 l
-1138 5297 l
-1178 5261 l
-1217 5224 l
-1256 5187 l
-1295 5150 l
-1334 5112 l
-1372 5074 l
-1410 5035 l
-1448 4996 l
-1486 4956 l
-1523 4916 l
-1559 4876 l
-1596 4835 l
-1632 4793 l
-1668 4751 l
-1703 4709 l
-1738 4666 l
-1773 4622 l
-1807 4578 l
-1810 4575 l
-1812 4572 l
-1812 4572 l
-1812 4571 l
-1812 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-543 6064 m
-569 6042 l
-613 6005 l
-656 5967 l
-700 5929 l
-742 5890 l
-785 5851 l
-827 5812 l
-868 5772 l
-910 5731 l
-951 5691 l
-991 5649 l
-1031 5607 l
-1071 5565 l
-1110 5522 l
-1149 5479 l
-1188 5436 l
-1226 5392 l
-1264 5347 l
-1301 5302 l
-1338 5257 l
-1375 5211 l
-1411 5165 l
-1446 5118 l
-1482 5071 l
-1516 5024 l
-1551 4976 l
-1584 4928 l
-1618 4879 l
-1651 4830 l
-1683 4781 l
-1715 4731 l
-1746 4681 l
-1777 4630 l
-1808 4579 l
-1810 4576 l
-1812 4572 l
-1812 4572 l
-1812 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-804 6121 m
-831 6091 l
-871 6046 l
-911 6000 l
-950 5954 l
-989 5907 l
-1027 5860 l
-1065 5813 l
-1102 5765 l
-1139 5717 l
-1175 5669 l
-1211 5620 l
-1246 5571 l
-1280 5521 l
-1315 5471 l
-1348 5421 l
-1381 5371 l
-1414 5320 l
-1445 5269 l
-1477 5218 l
-1508 5166 l
-1538 5114 l
-1567 5062 l
-1597 5009 l
-1625 4957 l
-1653 4903 l
-1681 4850 l
-1707 4797 l
-1734 4743 l
-1759 4689 l
-1784 4635 l
-1809 4580 l
-1811 4576 l
-1812 4572 l
-1812 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1061 6121 m
-1070 6107 l
-1104 6057 l
-1138 6007 l
-1171 5956 l
-1203 5905 l
-1235 5854 l
-1266 5803 l
-1297 5751 l
-1327 5700 l
-1356 5648 l
-1384 5596 l
-1412 5544 l
-1440 5491 l
-1467 5439 l
-1493 5386 l
-1518 5333 l
-1543 5280 l
-1567 5227 l
-1591 5173 l
-1614 5120 l
-1636 5066 l
-1658 5013 l
-1679 4959 l
-1700 4905 l
-1720 4851 l
-1739 4797 l
-1758 4743 l
-1776 4689 l
-1793 4634 l
-1810 4580 l
-1811 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1301 6121 m
-1308 6108 l
-1334 6057 l
-1360 6006 l
-1384 5955 l
-1408 5904 l
-1432 5853 l
-1455 5802 l
-1477 5751 l
-1498 5700 l
-1519 5649 l
-1539 5598 l
-1558 5547 l
-1577 5495 l
-1595 5444 l
-1613 5393 l
-1630 5342 l
-1646 5291 l
-1662 5240 l
-1677 5189 l
-1691 5138 l
-1705 5087 l
-1718 5036 l
-1731 4985 l
-1743 4934 l
-1755 4883 l
-1766 4832 l
-1776 4782 l
-1786 4731 l
-1795 4680 l
-1804 4630 l
-1812 4579 l
-1812 4576 l
-1813 4572 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1567 6121 m
-1568 6117 l
-1585 6070 l
-1601 6023 l
-1617 5976 l
-1632 5929 l
-1646 5882 l
-1659 5835 l
-1672 5789 l
-1685 5742 l
-1697 5696 l
-1708 5650 l
-1718 5603 l
-1728 5557 l
-1738 5512 l
-1747 5466 l
-1755 5420 l
-1763 5375 l
-1770 5329 l
-1776 5284 l
-1783 5239 l
-1788 5194 l
-1793 5149 l
-1798 5104 l
-1802 5060 l
-1805 5015 l
-1808 4971 l
-1811 4927 l
-1813 4883 l
-1814 4839 l
-1815 4795 l
-1816 4751 l
-1816 4708 l
-1816 4664 l
-1815 4621 l
-1814 4578 l
-1813 4575 l
-1813 4572 l
-1813 4572 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-S
-1922 6121 m
-1923 6116 l
-1930 6076 l
-1937 6037 l
-1943 5998 l
-1949 5959 l
-1954 5921 l
-1958 5882 l
-1962 5844 l
-1966 5806 l
-1969 5768 l
-1971 5730 l
-1973 5693 l
-1975 5655 l
-1976 5618 l
-1976 5581 l
-1976 5544 l
-1976 5508 l
-1975 5471 l
-1974 5435 l
-1972 5399 l
-1970 5363 l
-1967 5327 l
-1964 5292 l
-1961 5256 l
-1957 5221 l
-1953 5186 l
-1948 5150 l
-1943 5116 l
-1938 5081 l
-1932 5046 l
-1926 5012 l
-1920 4978 l
-1913 4943 l
-1906 4909 l
-1898 4875 l
-1890 4842 l
-1882 4808 l
-1874 4774 l
-1865 4741 l
-1855 4708 l
-1846 4675 l
-1836 4642 l
-1826 4609 l
-1815 4576 l
-1814 4574 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1813 4571 l
-1813 4571 l
-1813 4570 l
-1813 4570 l
-S
-2562 6121 m
-2562 6116 l
-2562 6089 l
-2562 6062 l
-2562 6035 l
-2561 6009 l
-2560 5983 l
-2558 5957 l
-2556 5931 l
-2553 5906 l
-2550 5880 l
-2546 5855 l
-2543 5830 l
-2538 5806 l
-2534 5781 l
-2529 5757 l
-2523 5733 l
-2517 5709 l
-2511 5685 l
-2505 5661 l
-2498 5638 l
-2491 5615 l
-2483 5591 l
-2476 5568 l
-2468 5545 l
-2459 5523 l
-2451 5500 l
-2442 5477 l
-2432 5455 l
-2423 5432 l
-2413 5410 l
-2403 5388 l
-2392 5366 l
-2381 5344 l
-2370 5322 l
-2359 5300 l
-2348 5279 l
-2336 5257 l
-2324 5236 l
-2311 5214 l
-2299 5193 l
-2286 5171 l
-2273 5150 l
-2260 5129 l
-2246 5108 l
-2232 5087 l
-2218 5066 l
-2204 5045 l
-2190 5024 l
-2175 5003 l
-2160 4982 l
-2145 4961 l
-2129 4941 l
-2114 4920 l
-2098 4899 l
-2082 4879 l
-2066 4858 l
-2049 4838 l
-2033 4817 l
-2016 4797 l
-1999 4776 l
-1981 4756 l
-1964 4736 l
-1946 4715 l
-1928 4695 l
-1910 4675 l
-1892 4655 l
-1873 4634 l
-1855 4614 l
-1836 4594 l
-1817 4574 l
-1815 4572 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4571 l
-1814 4570 l
-1813 4570 l
-1813 4570 l
-S
-4454 1777 m
-4454 1785 l
-4454 1798 l
-4454 1810 l
-4454 1822 l
-4453 1834 l
-4453 1847 l
-4453 1859 l
-4453 1871 l
-4452 1882 l
-4452 1894 l
-4452 1906 l
-4451 1918 l
-4451 1929 l
-4451 1941 l
-4450 1952 l
-4450 1964 l
-4449 1975 l
-4449 1986 l
-4448 1998 l
-4448 2009 l
-4447 2020 l
-4447 2031 l
-4446 2042 l
-4446 2053 l
-4445 2064 l
-4445 2075 l
-4444 2086 l
-4443 2096 l
-4443 2107 l
-4442 2118 l
-4442 2128 l
-4441 2139 l
-4440 2149 l
-4440 2159 l
-4439 2170 l
-4428 2309 l
-4415 2438 l
-4401 2558 l
-4385 2670 l
-4369 2775 l
-4352 2874 l
-4334 2966 l
-4316 3052 l
-4297 3134 l
-4278 3210 l
-4259 3283 l
-4240 3351 l
-4221 3416 l
-4201 3477 l
-4182 3534 l
-4163 3589 l
-4143 3641 l
-4124 3691 l
-4105 3738 l
-4085 3783 l
-4066 3825 l
-4047 3866 l
-4028 3905 l
-4009 3942 l
-3990 3977 l
-3971 4011 l
-3952 4043 l
-3933 4074 l
-3914 4104 l
-3895 4132 l
-3876 4159 l
-3858 4185 l
-3839 4210 l
-3820 4234 l
-3801 4257 l
-3783 4279 l
-3764 4300 l
-3745 4320 l
-3726 4340 l
-3708 4358 l
-3689 4376 l
-3670 4393 l
-3651 4410 l
-3633 4425 l
-3614 4441 l
-3595 4455 l
-3576 4469 l
-3557 4482 l
-3538 4495 l
-3519 4507 l
-3500 4519 l
-3481 4531 l
-3462 4541 l
-3442 4552 l
-3423 4561 l
-3404 4571 l
-3384 4580 l
-3365 4589 l
-3345 4597 l
-3325 4605 l
-3306 4612 l
-3286 4619 l
-3266 4626 l
-3246 4632 l
-3226 4638 l
-3206 4644 l
-3186 4649 l
-3165 4654 l
-3145 4659 l
-3125 4663 l
-3104 4668 l
-3083 4671 l
-3063 4675 l
-3042 4678 l
-3021 4681 l
-3000 4684 l
-2979 4687 l
-2958 4689 l
-2936 4691 l
-2915 4693 l
-2894 4694 l
-2872 4696 l
-2850 4697 l
-2828 4698 l
-2807 4698 l
-2785 4699 l
-2762 4699 l
-2740 4699 l
-2718 4699 l
-2696 4699 l
-2673 4698 l
-2650 4697 l
-2628 4696 l
-2605 4695 l
-2582 4694 l
-2559 4692 l
-2536 4690 l
-2513 4689 l
-2489 4686 l
-2466 4684 l
-2442 4682 l
-2418 4679 l
-2395 4676 l
-2371 4674 l
-2347 4670 l
-2323 4667 l
-2298 4664 l
-2274 4660 l
-2250 4657 l
-2225 4653 l
-2201 4649 l
-2176 4644 l
-2151 4640 l
-2126 4636 l
-2101 4631 l
-2076 4626 l
-2050 4621 l
-2025 4616 l
-2000 4611 l
-1974 4606 l
-1948 4601 l
-1922 4595 l
-1896 4589 l
-1870 4583 l
-1844 4577 l
-1818 4571 l
-1816 4571 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-4071 1777 m
-4067 1810 l
-4057 1881 l
-4046 1950 l
-4034 2018 l
-4021 2084 l
-4007 2148 l
-3993 2211 l
-3979 2273 l
-3963 2333 l
-3947 2392 l
-3931 2450 l
-3914 2506 l
-3897 2561 l
-3879 2615 l
-3860 2667 l
-3842 2719 l
-3822 2769 l
-3803 2818 l
-3783 2866 l
-3762 2913 l
-3742 2959 l
-3721 3004 l
-3699 3048 l
-3678 3091 l
-3656 3134 l
-3633 3175 l
-3611 3215 l
-3588 3255 l
-3565 3293 l
-3542 3331 l
-3518 3368 l
-3494 3404 l
-3470 3440 l
-3446 3474 l
-3421 3508 l
-3397 3541 l
-3372 3574 l
-3347 3606 l
-3321 3637 l
-3296 3667 l
-3270 3697 l
-3245 3726 l
-3219 3754 l
-3192 3782 l
-3166 3810 l
-3140 3836 l
-3113 3863 l
-3086 3888 l
-3059 3913 l
-3032 3938 l
-3005 3962 l
-2978 3985 l
-2950 4008 l
-2922 4030 l
-2895 4052 l
-2867 4074 l
-2839 4094 l
-2811 4115 l
-2782 4135 l
-2754 4154 l
-2725 4174 l
-2697 4192 l
-2668 4210 l
-2639 4228 l
-2610 4246 l
-2581 4263 l
-2552 4279 l
-2522 4295 l
-2493 4311 l
-2463 4326 l
-2433 4341 l
-2404 4356 l
-2374 4370 l
-2344 4384 l
-2314 4398 l
-2283 4411 l
-2253 4424 l
-2223 4436 l
-2192 4448 l
-2162 4460 l
-2131 4472 l
-2100 4483 l
-2069 4493 l
-2038 4504 l
-2007 4514 l
-1976 4524 l
-1945 4534 l
-1914 4543 l
-1882 4552 l
-1851 4560 l
-1819 4569 l
-1817 4569 l
-1815 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3631 1777 m
-3622 1824 l
-3610 1887 l
-3597 1950 l
-3583 2011 l
-3568 2072 l
-3553 2132 l
-3537 2191 l
-3521 2249 l
-3504 2307 l
-3486 2363 l
-3468 2419 l
-3450 2474 l
-3431 2528 l
-3411 2582 l
-3391 2635 l
-3370 2687 l
-3349 2738 l
-3328 2789 l
-3306 2839 l
-3283 2888 l
-3260 2936 l
-3237 2984 l
-3213 3031 l
-3189 3078 l
-3165 3123 l
-3140 3168 l
-3115 3213 l
-3089 3256 l
-3063 3300 l
-3037 3342 l
-3010 3384 l
-2984 3425 l
-2956 3466 l
-2929 3506 l
-2901 3545 l
-2873 3584 l
-2845 3622 l
-2816 3659 l
-2787 3696 l
-2758 3733 l
-2728 3769 l
-2699 3804 l
-2669 3839 l
-2639 3873 l
-2608 3907 l
-2578 3940 l
-2547 3972 l
-2516 4004 l
-2484 4036 l
-2453 4067 l
-2421 4098 l
-2389 4128 l
-2357 4157 l
-2325 4186 l
-2292 4215 l
-2260 4243 l
-2227 4270 l
-2194 4298 l
-2160 4324 l
-2127 4350 l
-2094 4376 l
-2060 4401 l
-2026 4426 l
-1992 4451 l
-1958 4475 l
-1923 4498 l
-1889 4521 l
-1854 4544 l
-1820 4566 l
-1817 4568 l
-1815 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-3251 1777 m
-3241 1834 l
-3230 1898 l
-3218 1960 l
-3205 2023 l
-3192 2084 l
-3178 2146 l
-3164 2206 l
-3149 2266 l
-3133 2326 l
-3116 2385 l
-3099 2444 l
-3082 2502 l
-3063 2559 l
-3045 2616 l
-3025 2673 l
-3005 2728 l
-2985 2784 l
-2964 2839 l
-2942 2893 l
-2920 2947 l
-2898 3000 l
-2875 3052 l
-2851 3105 l
-2827 3156 l
-2803 3207 l
-2778 3258 l
-2753 3308 l
-2727 3357 l
-2700 3406 l
-2674 3454 l
-2647 3502 l
-2619 3549 l
-2591 3596 l
-2563 3642 l
-2534 3688 l
-2505 3733 l
-2476 3778 l
-2446 3822 l
-2416 3866 l
-2386 3909 l
-2355 3951 l
-2324 3993 l
-2292 4035 l
-2260 4076 l
-2228 4117 l
-2196 4157 l
-2163 4196 l
-2130 4235 l
-2096 4274 l
-2063 4312 l
-2029 4349 l
-1995 4386 l
-1960 4423 l
-1926 4459 l
-1891 4494 l
-1855 4529 l
-1820 4564 l
-1817 4566 l
-1815 4569 l
-1815 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2919 1777 m
-2914 1822 l
-2907 1885 l
-2898 1949 l
-2890 2012 l
-2880 2074 l
-2870 2137 l
-2859 2199 l
-2848 2261 l
-2836 2322 l
-2823 2383 l
-2809 2444 l
-2795 2505 l
-2781 2565 l
-2765 2625 l
-2749 2685 l
-2733 2744 l
-2715 2803 l
-2698 2861 l
-2679 2919 l
-2660 2977 l
-2641 3034 l
-2621 3091 l
-2600 3148 l
-2579 3204 l
-2557 3260 l
-2535 3315 l
-2512 3370 l
-2489 3425 l
-2465 3479 l
-2440 3533 l
-2415 3586 l
-2390 3639 l
-2364 3692 l
-2338 3744 l
-2311 3795 l
-2283 3847 l
-2255 3898 l
-2227 3948 l
-2198 3998 l
-2169 4047 l
-2139 4096 l
-2109 4145 l
-2079 4193 l
-2048 4241 l
-2016 4288 l
-1985 4335 l
-1952 4381 l
-1920 4427 l
-1887 4473 l
-1853 4518 l
-1819 4562 l
-1817 4565 l
-1815 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2606 1777 m
-2606 1788 l
-2604 1850 l
-2602 1912 l
-2599 1973 l
-2595 2035 l
-2590 2096 l
-2585 2158 l
-2579 2219 l
-2573 2280 l
-2566 2341 l
-2558 2402 l
-2550 2463 l
-2541 2524 l
-2531 2584 l
-2521 2645 l
-2510 2705 l
-2499 2765 l
-2487 2825 l
-2474 2885 l
-2461 2944 l
-2447 3004 l
-2432 3063 l
-2417 3122 l
-2401 3181 l
-2385 3239 l
-2367 3297 l
-2350 3355 l
-2332 3413 l
-2313 3471 l
-2293 3528 l
-2273 3585 l
-2253 3642 l
-2232 3698 l
-2210 3755 l
-2188 3810 l
-2165 3866 l
-2142 3922 l
-2118 3977 l
-2093 4031 l
-2068 4086 l
-2042 4140 l
-2016 4194 l
-1990 4247 l
-1963 4300 l
-1935 4353 l
-1907 4406 l
-1878 4458 l
-1849 4509 l
-1819 4561 l
-1817 4565 l
-1814 4568 l
-1814 4568 l
-1814 4569 l
-1814 4569 l
-1814 4569 l
-1814 4570 l
-1814 4570 l
-1813 4570 l
-S
-2890 6121 m
-2892 6118 l
-2906 6096 l
-2920 6075 l
-2934 6054 l
-2948 6032 l
-2962 6011 l
-2976 5989 l
-2990 5968 l
-3003 5946 l
-3017 5924 l
-3031 5902 l
-3044 5880 l
-3058 5858 l
-3071 5836 l
-3084 5814 l
-3097 5792 l
-3111 5770 l
-3124 5748 l
-3137 5725 l
-3150 5703 l
-3162 5681 l
-3175 5658 l
-3188 5635 l
-3200 5613 l
-3213 5590 l
-3225 5567 l
-3238 5545 l
-3250 5522 l
-3262 5499 l
-3274 5476 l
-3286 5453 l
-3298 5430 l
-3310 5407 l
-3322 5384 l
-3334 5360 l
-3345 5337 l
-3357 5314 l
-3368 5291 l
-3380 5267 l
-3391 5244 l
-3402 5220 l
-3413 5197 l
-3424 5173 l
-3435 5150 l
-3446 5126 l
-3457 5103 l
-3468 5079 l
-3478 5055 l
-3489 5032 l
-3499 5008 l
-3509 4984 l
-3519 4961 l
-3530 4937 l
-3540 4913 l
-3549 4889 l
-3559 4865 l
-3569 4841 l
-3579 4817 l
-3588 4793 l
-3598 4769 l
-3607 4745 l
-3616 4721 l
-3625 4697 l
-3634 4673 l
-3643 4649 l
-3652 4625 l
-3661 4601 l
-3670 4577 l
-3678 4553 l
-3687 4529 l
-3695 4505 l
-3704 4481 l
-3712 4457 l
-3720 4433 l
-3728 4409 l
-3736 4385 l
-3744 4361 l
-3751 4337 l
-3759 4312 l
-3766 4288 l
-3774 4264 l
-3781 4240 l
-3788 4216 l
-3796 4192 l
-3803 4168 l
-3810 4144 l
-3816 4120 l
-3823 4096 l
-3830 4072 l
-3836 4048 l
-3843 4024 l
-3849 4000 l
-3855 3976 l
-3861 3953 l
-3868 3929 l
-3874 3905 l
-3879 3881 l
-3885 3857 l
-3891 3833 l
-3896 3810 l
-3902 3786 l
-3907 3762 l
-3913 3738 l
-3918 3715 l
-3923 3691 l
-3928 3668 l
-3933 3644 l
-3938 3621 l
-3942 3597 l
-3947 3574 l
-3952 3550 l
-3956 3527 l
-3960 3504 l
-3965 3480 l
-3969 3457 l
-3973 3434 l
-3977 3411 l
-3981 3387 l
-3985 3364 l
-3989 3341 l
-3992 3318 l
-3996 3295 l
-3999 3272 l
-4003 3249 l
-4006 3227 l
-4009 3204 l
-4012 3181 l
-4015 3158 l
-4018 3136 l
-4021 3113 l
-4024 3091 l
-4026 3068 l
-4029 3046 l
-4032 3023 l
-4034 3001 l
-4036 2979 l
-4039 2957 l
-4041 2934 l
-4043 2912 l
-4045 2890 l
-4047 2868 l
-4049 2846 l
-4051 2825 l
-4052 2803 l
-4054 2781 l
-4055 2759 l
-4057 2738 l
-4058 2716 l
-4060 2695 l
-4061 2673 l
-4062 2652 l
-4063 2631 l
-4064 2609 l
-4065 2588 l
-4066 2567 l
-4067 2546 l
-4068 2525 l
-4068 2504 l
-4069 2483 l
-4069 2462 l
-4070 2442 l
-4070 2421 l
-4070 2401 l
-4071 2380 l
-4071 2360 l
-4071 2339 l
-4071 2319 l
-4071 2299 l
-4071 2279 l
-4071 2259 l
-4071 2239 l
-4070 2219 l
-4070 2199 l
-4069 2179 l
-4069 2159 l
-4068 2140 l
-4068 2120 l
-4067 2100 l
-4066 2081 l
-4066 2062 l
-4065 2042 l
-4064 2023 l
-4063 2004 l
-4062 1985 l
-4061 1966 l
-4060 1947 l
-4059 1928 l
-4057 1910 l
-4056 1891 l
-4055 1872 l
-4053 1854 l
-4052 1835 l
-4050 1817 l
-4049 1799 l
-4047 1781 l
-4047 1777 l
-S
-868 1777 m
-823 1845 l
-772 1921 l
-722 1998 l
-672 2076 l
-623 2155 l
-573 2235 l
-543 2285 l
-S
-2598 6121 m
-2601 6118 l
-2611 6104 l
-2620 6091 l
-2630 6078 l
-2639 6064 l
-2649 6051 l
-2658 6038 l
-2668 6024 l
-2677 6011 l
-2686 5997 l
-2696 5984 l
-2705 5970 l
-2714 5956 l
-2724 5943 l
-2733 5929 l
-2742 5915 l
-2751 5901 l
-2761 5887 l
-2770 5874 l
-2779 5860 l
-2788 5846 l
-2797 5832 l
-2806 5818 l
-2815 5804 l
-2824 5790 l
-2833 5775 l
-2842 5761 l
-2850 5747 l
-2859 5733 l
-2868 5719 l
-2877 5704 l
-2886 5690 l
-2894 5676 l
-2903 5661 l
-2912 5647 l
-2920 5633 l
-2929 5618 l
-2937 5604 l
-2946 5589 l
-2954 5574 l
-2963 5560 l
-2971 5545 l
-2979 5531 l
-2988 5516 l
-2996 5501 l
-3004 5487 l
-3012 5472 l
-3020 5457 l
-3028 5442 l
-3037 5427 l
-3045 5412 l
-3053 5398 l
-3061 5383 l
-3068 5368 l
-3076 5353 l
-3084 5338 l
-3092 5323 l
-3100 5308 l
-3108 5293 l
-3115 5278 l
-3123 5263 l
-3130 5247 l
-3138 5232 l
-3146 5217 l
-3153 5202 l
-3160 5187 l
-3168 5172 l
-3175 5156 l
-3183 5141 l
-3190 5126 l
-3197 5111 l
-3204 5095 l
-3211 5080 l
-3218 5065 l
-3225 5049 l
-3233 5034 l
-3239 5018 l
-3246 5003 l
-3253 4988 l
-3260 4972 l
-3267 4957 l
-3274 4941 l
-3280 4926 l
-3287 4910 l
-3294 4895 l
-3300 4879 l
-3307 4864 l
-3313 4848 l
-3320 4833 l
-3326 4817 l
-3332 4802 l
-3339 4786 l
-3345 4771 l
-3351 4755 l
-3357 4739 l
-3364 4724 l
-3370 4708 l
-3376 4693 l
-3382 4677 l
-3388 4661 l
-3393 4646 l
-3399 4630 l
-3405 4614 l
-3411 4599 l
-3417 4583 l
-3422 4567 l
-3428 4552 l
-3433 4536 l
-3439 4521 l
-3444 4505 l
-3450 4489 l
-3455 4474 l
-3461 4458 l
-3466 4442 l
-3471 4427 l
-3476 4411 l
-3481 4395 l
-3487 4380 l
-3492 4364 l
-3497 4348 l
-3502 4333 l
-3506 4317 l
-3511 4301 l
-3516 4286 l
-3521 4270 l
-3526 4254 l
-3530 4239 l
-3535 4223 l
-3540 4208 l
-3544 4192 l
-3549 4176 l
-3553 4161 l
-3557 4145 l
-3562 4130 l
-3566 4114 l
-3570 4098 l
-3574 4083 l
-3579 4067 l
-3583 4052 l
-3587 4036 l
-3591 4021 l
-3595 4005 l
-3599 3990 l
-3603 3974 l
-3606 3959 l
-3610 3943 l
-3614 3928 l
-3618 3912 l
-3621 3897 l
-3625 3882 l
-3628 3866 l
-3632 3851 l
-3635 3836 l
-3639 3820 l
-3642 3805 l
-3645 3790 l
-3649 3774 l
-3652 3759 l
-3655 3744 l
-3658 3728 l
-3661 3713 l
-3664 3698 l
-3667 3683 l
-3670 3668 l
-3673 3653 l
-3676 3637 l
-3679 3622 l
-3682 3607 l
-3684 3592 l
-3687 3577 l
-3690 3562 l
-3692 3547 l
-3695 3532 l
-3697 3517 l
-3700 3502 l
-3702 3487 l
-3705 3472 l
-3707 3457 l
-3709 3443 l
-3711 3428 l
-3714 3413 l
-3716 3398 l
-3718 3383 l
-3720 3369 l
-3722 3354 l
-3724 3339 l
-3726 3325 l
-3728 3310 l
-3730 3295 l
-3731 3281 l
-3733 3266 l
-3735 3252 l
-3737 3237 l
-3738 3223 l
-3740 3208 l
-3741 3194 l
-3743 3180 l
-3744 3165 l
-3746 3151 l
-S
-3746 3151 m
-3747 3137 l
-3749 3122 l
-3750 3108 l
-3751 3094 l
-3752 3080 l
-3754 3065 l
-3755 3051 l
-3756 3037 l
-3757 3023 l
-3758 3009 l
-3759 2995 l
-3760 2981 l
-3761 2967 l
-3762 2953 l
-3763 2940 l
-3763 2926 l
-3764 2912 l
-3765 2898 l
-3765 2884 l
-3766 2871 l
-3767 2857 l
-3767 2843 l
-3768 2830 l
-3768 2816 l
-3769 2803 l
-3769 2789 l
-3770 2776 l
-3770 2762 l
-3770 2749 l
-3771 2736 l
-3771 2722 l
-3771 2709 l
-3771 2696 l
-3771 2682 l
-3771 2669 l
-3772 2656 l
-3772 2643 l
-3772 2630 l
-3772 2617 l
-3771 2604 l
-3771 2591 l
-3771 2578 l
-3771 2565 l
-3771 2552 l
-3771 2539 l
-3770 2527 l
-3770 2514 l
-3770 2501 l
-3769 2488 l
-3769 2476 l
-3769 2463 l
-3768 2451 l
-3768 2438 l
-3767 2426 l
-3766 2413 l
-3766 2401 l
-3765 2389 l
-3765 2376 l
-3764 2364 l
-3763 2352 l
-3762 2339 l
-3762 2327 l
-3761 2315 l
-3760 2303 l
-3759 2291 l
-3758 2279 l
-3757 2267 l
-3756 2255 l
-3756 2243 l
-3755 2231 l
-3753 2220 l
-3752 2208 l
-3751 2196 l
-3750 2184 l
-3749 2173 l
-3748 2161 l
-3747 2150 l
-3745 2138 l
-3744 2127 l
-3743 2115 l
-3742 2104 l
-3740 2092 l
-3739 2081 l
-3738 2070 l
-3736 2058 l
-3735 2047 l
-3733 2036 l
-3732 2025 l
-3730 2014 l
-3729 2003 l
-3727 1992 l
-3726 1981 l
-3724 1970 l
-3722 1959 l
-3721 1948 l
-3719 1937 l
-3717 1927 l
-3716 1916 l
-3714 1905 l
-3712 1895 l
-3710 1884 l
-3709 1874 l
-3707 1863 l
-3705 1853 l
-3703 1842 l
-3701 1832 l
-3699 1821 l
-3697 1811 l
-3695 1801 l
-3693 1791 l
-3691 1780 l
-3691 1777 l
-S
-1826 1777 m
-1793 1806 l
-1747 1847 l
-1702 1889 l
-1657 1933 l
-1612 1979 l
-1567 2026 l
-1523 2075 l
-1478 2125 l
-1434 2177 l
-1389 2230 l
-1345 2285 l
-1301 2341 l
-1258 2398 l
-1214 2456 l
-1171 2515 l
-1128 2576 l
-1085 2637 l
-1042 2700 l
-1000 2763 l
-958 2827 l
-916 2893 l
-875 2959 l
-834 3025 l
-793 3093 l
-752 3161 l
-712 3230 l
-672 3299 l
-633 3369 l
-594 3439 l
-555 3510 l
-543 3532 l
-S
-2210 6121 m
-2215 6114 l
-2222 6106 l
-2228 6099 l
-2235 6091 l
-2241 6083 l
-2248 6076 l
-2254 6068 l
-2261 6060 l
-2267 6052 l
-2273 6044 l
-2280 6036 l
-2286 6029 l
-2293 6021 l
-2299 6013 l
-2305 6005 l
-2312 5997 l
-2318 5989 l
-2324 5981 l
-2331 5973 l
-2337 5965 l
-2343 5957 l
-2349 5948 l
-2356 5940 l
-2362 5932 l
-2368 5924 l
-2375 5916 l
-2381 5908 l
-2387 5899 l
-2393 5891 l
-2399 5883 l
-2406 5874 l
-2412 5866 l
-2418 5858 l
-2424 5849 l
-2430 5841 l
-2436 5833 l
-2442 5824 l
-2449 5816 l
-2455 5807 l
-2461 5799 l
-2467 5790 l
-2473 5782 l
-2479 5773 l
-2485 5764 l
-2491 5756 l
-2497 5747 l
-2503 5739 l
-2509 5730 l
-2515 5721 l
-2521 5713 l
-2527 5704 l
-2533 5695 l
-2539 5686 l
-2545 5678 l
-2550 5669 l
-2556 5660 l
-2562 5651 l
-2568 5642 l
-2574 5633 l
-2580 5625 l
-2586 5616 l
-2591 5607 l
-2597 5598 l
-2603 5589 l
-2609 5580 l
-2614 5571 l
-2620 5562 l
-2626 5553 l
-2631 5544 l
-2637 5535 l
-2643 5526 l
-2648 5517 l
-2654 5508 l
-2660 5498 l
-2665 5489 l
-2671 5480 l
-2676 5471 l
-2682 5462 l
-2687 5453 l
-2693 5443 l
-2698 5434 l
-2704 5425 l
-2709 5416 l
-2715 5406 l
-2720 5397 l
-2725 5388 l
-2731 5378 l
-2736 5369 l
-2742 5360 l
-2747 5350 l
-2752 5341 l
-2757 5332 l
-2763 5322 l
-2768 5313 l
-2773 5303 l
-2778 5294 l
-2784 5284 l
-2789 5275 l
-2794 5265 l
-2799 5256 l
-2804 5246 l
-2809 5237 l
-2814 5227 l
-2820 5218 l
-2825 5208 l
-2830 5199 l
-2835 5189 l
-2840 5179 l
-2845 5170 l
-2850 5160 l
-2854 5151 l
-2859 5141 l
-2864 5131 l
-2869 5122 l
-2874 5112 l
-2879 5102 l
-2884 5093 l
-2888 5083 l
-2893 5073 l
-2898 5063 l
-2903 5054 l
-2907 5044 l
-2912 5034 l
-2917 5024 l
-2921 5015 l
-2926 5005 l
-2931 4995 l
-2935 4985 l
-2940 4976 l
-2944 4966 l
-2949 4956 l
-2953 4946 l
-2958 4936 l
-2962 4926 l
-2967 4917 l
-2971 4907 l
-2976 4897 l
-2980 4887 l
-2984 4877 l
-2989 4867 l
-2993 4857 l
-2997 4847 l
-3001 4838 l
-3006 4828 l
-3010 4818 l
-3014 4808 l
-3018 4798 l
-3022 4788 l
-3027 4778 l
-3031 4768 l
-3035 4758 l
-3039 4748 l
-3043 4738 l
-3047 4728 l
-3051 4718 l
-3055 4708 l
-3059 4698 l
-3063 4688 l
-3067 4678 l
-3071 4669 l
-3074 4659 l
-3078 4649 l
-3082 4639 l
-3086 4629 l
-3090 4619 l
-3093 4609 l
-3097 4599 l
-3101 4589 l
-3104 4579 l
-3108 4569 l
-3112 4559 l
-3115 4549 l
-3119 4539 l
-3123 4529 l
-3126 4519 l
-3130 4509 l
-3133 4499 l
-3137 4489 l
-3140 4479 l
-3143 4469 l
-3147 4459 l
-3150 4449 l
-3153 4439 l
-3157 4429 l
-3160 4419 l
-3163 4409 l
-3167 4399 l
-3170 4389 l
-3173 4379 l
-3176 4369 l
-3179 4359 l
-3183 4349 l
-3186 4339 l
-3189 4329 l
-3192 4319 l
-3195 4309 l
-3198 4299 l
-3201 4289 l
-3204 4279 l
-S
-3204 4279 m
-3207 4269 l
-3210 4259 l
-3213 4249 l
-3216 4239 l
-3218 4229 l
-3221 4219 l
-3224 4209 l
-3227 4199 l
-3230 4189 l
-3232 4180 l
-3235 4170 l
-3238 4160 l
-3240 4150 l
-3243 4140 l
-3246 4130 l
-3248 4120 l
-3251 4110 l
-3253 4100 l
-3256 4091 l
-3258 4081 l
-3261 4071 l
-3263 4061 l
-3266 4051 l
-3268 4041 l
-3270 4031 l
-3273 4022 l
-3275 4012 l
-3277 4002 l
-3280 3992 l
-3282 3982 l
-3284 3973 l
-3286 3963 l
-3289 3953 l
-3291 3943 l
-3293 3934 l
-3295 3924 l
-3297 3914 l
-3299 3904 l
-3301 3895 l
-3303 3885 l
-3305 3875 l
-3307 3866 l
-3309 3856 l
-3311 3846 l
-3313 3837 l
-3315 3827 l
-3317 3817 l
-3319 3808 l
-3320 3798 l
-3322 3788 l
-3324 3779 l
-3326 3769 l
-3328 3760 l
-3329 3750 l
-3331 3741 l
-3333 3731 l
-3334 3722 l
-3336 3712 l
-3337 3702 l
-3339 3693 l
-3340 3684 l
-3342 3674 l
-3343 3665 l
-3345 3655 l
-3346 3646 l
-3348 3636 l
-3349 3627 l
-3351 3618 l
-3352 3608 l
-3353 3599 l
-3355 3589 l
-3356 3580 l
-3357 3571 l
-3358 3561 l
-3360 3552 l
-3361 3543 l
-3362 3534 l
-3363 3524 l
-3364 3515 l
-3365 3506 l
-3367 3497 l
-3368 3488 l
-3369 3478 l
-3370 3469 l
-3371 3460 l
-3372 3451 l
-3373 3442 l
-3374 3433 l
-3375 3424 l
-3375 3415 l
-3376 3405 l
-3377 3396 l
-3378 3387 l
-3379 3378 l
-3380 3369 l
-3380 3360 l
-3381 3351 l
-3382 3342 l
-3383 3334 l
-3383 3325 l
-3384 3316 l
-3385 3307 l
-3385 3298 l
-3386 3289 l
-3386 3280 l
-3387 3272 l
-3387 3263 l
-3388 3254 l
-3389 3245 l
-3389 3236 l
-3389 3228 l
-3390 3219 l
-3390 3210 l
-3391 3202 l
-3391 3193 l
-3391 3184 l
-3392 3176 l
-3392 3167 l
-3392 3159 l
-3393 3150 l
-3393 3141 l
-3393 3133 l
-3393 3124 l
-3394 3116 l
-3394 3107 l
-3394 3099 l
-3394 3091 l
-3394 3082 l
-3394 3074 l
-3394 3065 l
-3394 3057 l
-3395 3049 l
-3395 3040 l
-3395 3032 l
-3395 3024 l
-3395 3016 l
-3394 3007 l
-3394 2999 l
-3394 2991 l
-3394 2983 l
-3394 2975 l
-3394 2966 l
-3394 2958 l
-3394 2950 l
-3393 2942 l
-3393 2934 l
-3393 2926 l
-3393 2918 l
-3393 2910 l
-3392 2902 l
-3392 2894 l
-3392 2886 l
-3391 2878 l
-3391 2870 l
-3391 2862 l
-3390 2855 l
-3390 2847 l
-3389 2839 l
-3389 2831 l
-3388 2823 l
-3388 2816 l
-3387 2808 l
-3387 2800 l
-3386 2793 l
-3386 2785 l
-3385 2777 l
-3385 2770 l
-3384 2762 l
-3384 2754 l
-3383 2747 l
-3382 2739 l
-3382 2732 l
-3381 2724 l
-3380 2717 l
-3380 2709 l
-3379 2702 l
-3378 2695 l
-3377 2687 l
-3377 2680 l
-3376 2672 l
-3375 2665 l
-3374 2658 l
-3373 2651 l
-3373 2643 l
-3372 2636 l
-3371 2629 l
-3370 2622 l
-3369 2615 l
-3368 2607 l
-3367 2600 l
-3366 2593 l
-3365 2586 l
-3364 2579 l
-3363 2572 l
-3362 2565 l
-3361 2558 l
-3360 2551 l
-3359 2544 l
-3358 2537 l
-S
-3358 2537 m
-3357 2530 l
-3356 2523 l
-3355 2517 l
-3354 2510 l
-3352 2503 l
-3351 2496 l
-3350 2489 l
-3349 2483 l
-3348 2476 l
-3347 2469 l
-3345 2463 l
-3344 2456 l
-3343 2449 l
-3342 2443 l
-3340 2436 l
-3339 2430 l
-3338 2423 l
-3336 2417 l
-3335 2410 l
-3334 2404 l
-3332 2397 l
-3331 2391 l
-3330 2384 l
-3328 2378 l
-3327 2372 l
-3325 2365 l
-3324 2359 l
-3322 2353 l
-3321 2347 l
-3319 2340 l
-3318 2334 l
-3316 2328 l
-3315 2322 l
-3313 2316 l
-3312 2310 l
-3310 2303 l
-3309 2297 l
-3307 2291 l
-3306 2285 l
-3304 2279 l
-3302 2273 l
-3301 2267 l
-3299 2261 l
-3298 2256 l
-3296 2250 l
-3294 2244 l
-3293 2238 l
-3291 2232 l
-3289 2226 l
-3287 2221 l
-3286 2215 l
-3284 2209 l
-3282 2203 l
-3281 2198 l
-3279 2192 l
-3277 2187 l
-3275 2181 l
-3273 2175 l
-3272 2170 l
-3270 2164 l
-3268 2159 l
-3266 2153 l
-3264 2148 l
-3262 2142 l
-3261 2137 l
-3259 2132 l
-3257 2126 l
-3255 2121 l
-3253 2116 l
-3251 2110 l
-3249 2105 l
-3247 2100 l
-3245 2094 l
-3243 2089 l
-3241 2084 l
-3239 2079 l
-3237 2074 l
-3235 2069 l
-3233 2064 l
-3231 2059 l
-3229 2053 l
-3227 2048 l
-3225 2043 l
-3223 2038 l
-3221 2034 l
-3219 2029 l
-3217 2024 l
-3215 2019 l
-3213 2014 l
-3211 2009 l
-3208 2004 l
-3206 1999 l
-3204 1995 l
-3202 1990 l
-3200 1985 l
-3198 1981 l
-3196 1976 l
-3193 1971 l
-3191 1967 l
-3189 1962 l
-3187 1957 l
-3185 1953 l
-3182 1948 l
-3180 1944 l
-3178 1939 l
-3176 1935 l
-3173 1930 l
-3171 1926 l
-3169 1922 l
-3167 1917 l
-3164 1913 l
-3162 1908 l
-3160 1904 l
-3157 1900 l
-3155 1896 l
-3153 1891 l
-3150 1887 l
-3148 1883 l
-3146 1879 l
-3143 1875 l
-3141 1870 l
-3139 1866 l
-3136 1862 l
-3134 1858 l
-3131 1854 l
-3129 1850 l
-3127 1846 l
-3124 1842 l
-3122 1838 l
-3119 1834 l
-3117 1830 l
-3114 1827 l
-3112 1823 l
-3110 1819 l
-3107 1815 l
-3105 1811 l
-3102 1807 l
-3100 1804 l
-3097 1800 l
-3095 1796 l
-3092 1793 l
-3090 1789 l
-3087 1785 l
-3085 1782 l
-3082 1778 l
-3082 1777 l
-S
-2296 2538 m
-2295 2538 l
-2295 2538 l
-2295 2538 l
-2293 2538 l
-2290 2538 l
-2258 2546 l
-2226 2555 l
-2193 2565 l
-2160 2578 l
-2126 2593 l
-2093 2609 l
-2060 2627 l
-2026 2647 l
-1992 2668 l
-1958 2691 l
-1925 2715 l
-1891 2741 l
-1857 2769 l
-1823 2798 l
-1789 2828 l
-1755 2859 l
-1721 2892 l
-1687 2926 l
-1654 2962 l
-1620 2998 l
-1587 3036 l
-1554 3074 l
-1520 3114 l
-1487 3155 l
-1455 3197 l
-1422 3239 l
-1390 3283 l
-1357 3327 l
-1325 3372 l
-1294 3418 l
-1262 3465 l
-1231 3512 l
-1200 3560 l
-1170 3609 l
-1140 3658 l
-1110 3708 l
-1080 3759 l
-1051 3809 l
-1022 3861 l
-994 3912 l
-966 3964 l
-939 4017 l
-912 4070 l
-885 4122 l
-859 4176 l
-834 4229 l
-809 4283 l
-784 4336 l
-760 4390 l
-737 4444 l
-714 4498 l
-692 4552 l
-671 4606 l
-650 4659 l
-630 4713 l
-610 4767 l
-592 4820 l
-574 4873 l
-557 4926 l
-543 4969 l
-S
-1633 6121 m
-1679 6086 l
-1733 6042 l
-1787 5995 l
-1841 5945 l
-1895 5893 l
-1949 5839 l
-2003 5782 l
-2056 5722 l
-2109 5660 l
-2161 5596 l
-2212 5530 l
-2262 5461 l
-2311 5391 l
-2359 5319 l
-2405 5245 l
-2450 5170 l
-2494 5093 l
-2536 5015 l
-2576 4936 l
-2614 4857 l
-2650 4776 l
-2685 4695 l
-2717 4614 l
-2747 4532 l
-2775 4450 l
-2801 4369 l
-2825 4288 l
-2846 4207 l
-2866 4127 l
-2883 4048 l
-2897 3970 l
-2910 3893 l
-2920 3818 l
-2929 3743 l
-2935 3671 l
-2939 3600 l
-2941 3531 l
-2941 3463 l
-2939 3398 l
-2936 3335 l
-2930 3274 l
-2923 3215 l
-2914 3159 l
-2904 3104 l
-2892 3053 l
-2878 3003 l
-2863 2956 l
-2847 2912 l
-2829 2870 l
-2811 2830 l
-2791 2793 l
-2770 2759 l
-2748 2727 l
-2724 2697 l
-2701 2670 l
-2676 2645 l
-2650 2623 l
-2624 2604 l
-2597 2586 l
-2569 2571 l
-2540 2559 l
-2511 2548 l
-2482 2540 l
-2452 2535 l
-2421 2531 l
-2391 2529 l
-2359 2530 l
-2328 2533 l
-2296 2538 l
-S
-2149 3569 m
-2149 3569 l
-2149 3569 l
-2149 3569 l
-2148 3569 l
-2147 3569 l
-2130 3570 l
-2114 3571 l
-2096 3573 l
-2079 3577 l
-2062 3581 l
-2044 3587 l
-2026 3594 l
-2008 3601 l
-1990 3610 l
-1971 3619 l
-1953 3629 l
-1934 3641 l
-1915 3653 l
-1897 3666 l
-1878 3680 l
-1859 3695 l
-1840 3710 l
-1821 3726 l
-1802 3744 l
-1783 3761 l
-1764 3780 l
-1745 3799 l
-1726 3819 l
-1708 3840 l
-1689 3861 l
-1670 3883 l
-1652 3906 l
-1633 3929 l
-1615 3952 l
-1597 3976 l
-1579 4001 l
-1562 4026 l
-1544 4052 l
-1527 4078 l
-1510 4104 l
-1493 4131 l
-1476 4158 l
-1460 4186 l
-1444 4213 l
-1428 4242 l
-1413 4270 l
-1397 4299 l
-1383 4327 l
-1368 4356 l
-1354 4385 l
-1340 4415 l
-1326 4444 l
-1313 4474 l
-1301 4503 l
-1288 4533 l
-1276 4563 l
-1265 4592 l
-1254 4622 l
-1243 4651 l
-1233 4681 l
-1224 4710 l
-1215 4739 l
-1206 4768 l
-1198 4797 l
-1190 4826 l
-1183 4854 l
-1176 4883 l
-1170 4910 l
-1165 4938 l
-1160 4965 l
-1156 4992 l
-1152 5019 l
-1149 5045 l
-1146 5071 l
-1144 5096 l
-1143 5121 l
-1142 5145 l
-1142 5169 l
-1143 5192 l
-1144 5215 l
-1146 5237 l
-1148 5258 l
-1151 5279 l
-1155 5299 l
-1160 5318 l
-1165 5337 l
-1171 5355 l
-1178 5372 l
-1185 5388 l
-1193 5404 l
-1201 5419 l
-1211 5432 l
-1220 5445 l
-1231 5458 l
-1242 5469 l
-1254 5479 l
-1267 5488 l
-1280 5496 l
-1294 5504 l
-1309 5510 l
-1324 5515 l
-1340 5519 l
-1356 5523 l
-1373 5525 l
-1390 5526 l
-1408 5525 l
-1427 5524 l
-1446 5522 l
-1466 5518 l
-1486 5513 l
-1506 5508 l
-1527 5501 l
-1549 5492 l
-1571 5483 l
-1593 5473 l
-1615 5461 l
-1638 5448 l
-1661 5434 l
-1684 5419 l
-1708 5403 l
-1731 5385 l
-1755 5367 l
-1779 5347 l
-1803 5326 l
-1826 5304 l
-1850 5282 l
-1874 5258 l
-1898 5233 l
-1921 5207 l
-1945 5180 l
-1968 5153 l
-1991 5124 l
-2014 5095 l
-2036 5065 l
-2058 5034 l
-2079 5002 l
-2101 4970 l
-2121 4937 l
-2141 4904 l
-2161 4870 l
-2180 4835 l
-2199 4800 l
-2216 4765 l
-2234 4729 l
-2250 4694 l
-2266 4657 l
-2281 4621 l
-2295 4585 l
-2309 4549 l
-2322 4512 l
-2334 4476 l
-2345 4440 l
-2355 4404 l
-2365 4368 l
-2373 4333 l
-2381 4298 l
-2388 4263 l
-2394 4229 l
-2400 4195 l
-2404 4162 l
-2408 4129 l
-2410 4097 l
-2412 4066 l
-2413 4035 l
-2414 4005 l
-2413 3976 l
-2412 3948 l
-2410 3920 l
-2407 3894 l
-2403 3868 l
-2399 3844 l
-2393 3820 l
-2388 3797 l
-2381 3775 l
-2374 3755 l
-2366 3735 l
-2357 3716 l
-2348 3699 l
-2338 3682 l
-2328 3667 l
-2317 3653 l
-2306 3640 l
-2294 3628 l
-2281 3617 l
-2268 3607 l
-2255 3599 l
-2241 3591 l
-2227 3585 l
-2212 3579 l
-2197 3575 l
-2181 3572 l
-2166 3570 l
-2149 3569 l
-S
-543 1777 m
-853 1777 l
-1164 1777 l
-1474 1777 l
-1784 1777 l
-2094 1777 l
-2405 1777 l
-2715 1777 l
-3025 1777 l
-3335 1777 l
-3646 1777 l
-3956 1777 l
-4266 1777 l
-4288 1777 l
-4310 1777 l
-4333 1777 l
-4355 1777 l
-4377 1777 l
-4399 1777 l
-4421 1777 l
-4443 1777 l
-4466 1777 l
-4488 1777 l
-4489 1777 l
-4491 1777 l
-4492 1777 l
-4494 1777 l
-4496 1777 l
-4497 1777 l
-4499 1777 l
-4500 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-4502 1777 l
-S
-3299 6121 m
-3299 6121 l
-3299 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3298 6121 l
-3297 6121 l
-3296 6121 l
-3294 6121 l
-3293 6121 l
-3291 6121 l
-3269 6121 l
-3247 6121 l
-3225 6121 l
-3202 6121 l
-3180 6121 l
-3158 6121 l
-3136 6121 l
-3114 6121 l
-3092 6121 l
-3069 6121 l
-3047 6121 l
-3025 6121 l
-2715 6121 l
-2405 6121 l
-2094 6121 l
-1784 6121 l
-1474 6121 l
-1164 6121 l
-853 6121 l
-543 6121 l
-S
-543 6121 m
-543 5811 l
-543 5500 l
-543 5190 l
-543 4880 l
-543 4570 l
-543 4259 l
-543 3949 l
-543 3639 l
-543 3329 l
-543 3018 l
-543 2708 l
-543 2398 l
-543 2088 l
-543 1777 l
-S
-4505 1818 m
-4505 1813 l
-4505 1809 l
-4505 1804 l
-4505 1800 l
-4505 1795 l
-4505 1791 l
-4505 1786 l
-4505 1782 l
-4505 1777 l
-S
-4505 1858 m
-4505 1853 l
-4505 1849 l
-4505 1845 l
-4505 1840 l
-4505 1836 l
-4505 1831 l
-4505 1827 l
-4505 1822 l
-4505 1818 l
-S
-4505 1898 m
-4505 1894 l
-4505 1889 l
-4505 1885 l
-4505 1880 l
-4505 1876 l
-4505 1871 l
-4505 1867 l
-4505 1862 l
-4505 1858 l
-S
-4505 1938 m
-4505 1934 l
-4505 1929 l
-4505 1925 l
-4505 1920 l
-4505 1916 l
-4505 1912 l
-4505 1907 l
-4505 1903 l
-4505 1898 l
-S
-4500 1979 m
-4500 1974 l
-4500 1970 l
-4500 1965 l
-4500 1961 l
-4500 1956 l
-4500 1952 l
-4502 1950 l
-4505 1947 l
-4505 1943 l
-4505 1938 l
-S
-4500 2019 m
-4500 2014 l
-4500 2010 l
-4500 2005 l
-4500 2001 l
-4500 1996 l
-4500 1992 l
-4500 1988 l
-4500 1983 l
-4500 1979 l
-S
-4500 2059 m
-4500 2055 l
-4500 2050 l
-4500 2046 l
-4500 2041 l
-4500 2037 l
-4500 2032 l
-4500 2028 l
-4500 2023 l
-4500 2019 l
-S
-4500 2099 m
-4500 2095 l
-4500 2090 l
-4500 2086 l
-4500 2081 l
-4500 2077 l
-4500 2072 l
-4500 2068 l
-4500 2063 l
-4500 2059 l
-S
-4500 2139 m
-4500 2135 l
-4500 2131 l
-4500 2126 l
-4500 2122 l
-4500 2117 l
-4500 2113 l
-4500 2108 l
-4500 2104 l
-4500 2099 l
-S
-4496 2180 m
-4496 2175 l
-4496 2171 l
-4496 2166 l
-4496 2162 l
-4496 2157 l
-4496 2153 l
-4496 2148 l
-4498 2146 l
-4500 2144 l
-4500 2139 l
-S
-4496 2220 m
-4496 2215 l
-4496 2211 l
-4496 2206 l
-4496 2202 l
-4496 2198 l
-4496 2193 l
-4496 2189 l
-4496 2184 l
-4496 2180 l
-S
-4491 2260 m
-4491 2256 l
-4493 2253 l
-4496 2251 l
-4496 2247 l
-4496 2242 l
-4496 2238 l
-4496 2233 l
-4496 2229 l
-4496 2224 l
-4496 2220 l
-S
-4491 2300 m
-4491 2296 l
-4491 2291 l
-4491 2287 l
-4491 2282 l
-4491 2278 l
-4491 2274 l
-4491 2269 l
-4491 2265 l
-4491 2260 l
-S
-4487 2341 m
-4489 2338 l
-4491 2336 l
-4491 2332 l
-4491 2327 l
-4491 2323 l
-4491 2318 l
-4491 2314 l
-4491 2309 l
-4491 2305 l
-4491 2300 l
-S
-4487 2341 m
-4487 2345 l
-4487 2349 l
-4487 2354 l
-4487 2358 l
-4487 2363 l
-4487 2367 l
-4487 2372 l
-4487 2376 l
-4487 2381 l
-S
-4482 2421 m
-4482 2416 l
-4482 2412 l
-4484 2410 l
-S
-4487 2381 m
-4487 2385 l
-4487 2390 l
-4487 2394 l
-4487 2399 l
-4487 2403 l
-4487 2408 l
-4484 2410 l
-S
-4482 2461 m
-4482 2457 l
-4482 2452 l
-4482 2448 l
-4482 2443 l
-4482 2439 l
-4482 2434 l
-4482 2430 l
-4482 2425 l
-4482 2421 l
-S
-4478 2501 m
-4478 2497 l
-4478 2492 l
-4478 2488 l
-4478 2484 l
-4478 2479 l
-4478 2475 l
-4480 2472 l
-4482 2470 l
-4482 2466 l
-4482 2461 l
-S
-4473 2542 m
-4473 2537 l
-4473 2533 l
-4473 2528 l
-4476 2526 l
-4478 2524 l
-4478 2519 l
-4478 2515 l
-4478 2510 l
-4478 2506 l
-4478 2501 l
-S
-4469 2582 m
-4471 2580 l
-4473 2577 l
-4473 2573 l
-4473 2568 l
-4473 2564 l
-4473 2559 l
-4473 2555 l
-4473 2551 l
-4473 2546 l
-4473 2542 l
-S
-4469 2622 m
-4469 2618 l
-4469 2613 l
-4469 2609 l
-4469 2604 l
-4469 2600 l
-4469 2595 l
-4469 2591 l
-4469 2586 l
-4469 2582 l
-S
-4464 2662 m
-4464 2658 l
-4464 2653 l
-4464 2649 l
-4464 2644 l
-4464 2640 l
-4464 2635 l
-4464 2631 l
-4467 2629 l
-4469 2627 l
-4469 2622 l
-S
-4460 2702 m
-4460 2698 l
-4460 2694 l
-4460 2689 l
-4460 2685 l
-4460 2680 l
-4460 2676 l
-4462 2673 l
-4464 2671 l
-4464 2667 l
-4464 2662 l
-S
-4455 2743 m
-4455 2738 l
-4455 2734 l
-4455 2729 l
-4455 2725 l
-4455 2720 l
-4458 2718 l
-4460 2716 l
-4460 2711 l
-4460 2707 l
-4460 2702 l
-S
-4451 2783 m
-4451 2778 l
-4451 2774 l
-4451 2770 l
-4451 2765 l
-4451 2761 l
-4453 2758 l
-4455 2756 l
-4455 2752 l
-4455 2747 l
-4455 2743 l
-S
-4446 2823 m
-4446 2819 l
-4446 2814 l
-4446 2810 l
-4446 2805 l
-4446 2801 l
-4449 2799 l
-4451 2796 l
-4451 2792 l
-4451 2787 l
-4451 2783 l
-S
-4442 2863 m
-4442 2859 l
-4442 2854 l
-4442 2850 l
-4442 2845 l
-4442 2841 l
-4444 2839 l
-S
-4446 2823 m
-4446 2828 l
-4446 2832 l
-4446 2837 l
-4444 2839 l
-S
-4438 2904 m
-4438 2899 l
-4438 2895 l
-4438 2890 l
-4438 2886 l
-4438 2881 l
-4438 2877 l
-4440 2875 l
-4442 2872 l
-4442 2868 l
-4442 2863 l
-S
-4429 2944 m
-4431 2942 l
-4433 2939 l
-4433 2935 l
-4433 2930 l
-4433 2926 l
-4433 2921 l
-4433 2917 l
-4433 2913 l
-4435 2910 l
-4438 2908 l
-4438 2904 l
-S
-4424 2984 m
-4424 2980 l
-4424 2975 l
-4426 2973 l
-4429 2971 l
-4429 2966 l
-4429 2962 l
-4429 2957 l
-4429 2953 l
-4429 2948 l
-4429 2944 l
-S
-4420 3024 m
-4420 3020 l
-4420 3015 l
-4420 3011 l
-4422 3009 l
-4424 3006 l
-4424 3002 l
-4424 2997 l
-4424 2993 l
-4424 2988 l
-4424 2984 l
-S
-4415 3064 m
-4415 3060 l
-4415 3056 l
-4415 3051 l
-4415 3047 l
-4415 3042 l
-4417 3040 l
-4420 3038 l
-4420 3033 l
-4420 3029 l
-4420 3024 l
-S
-4406 3105 m
-4406 3100 l
-4408 3098 l
-4411 3096 l
-4411 3091 l
-4411 3087 l
-4411 3082 l
-4411 3078 l
-4411 3073 l
-4411 3069 l
-4413 3067 l
-4415 3064 l
-S
-4402 3145 m
-4402 3140 l
-4402 3136 l
-4402 3131 l
-4402 3127 l
-4404 3125 l
-S
-4406 3105 m
-4406 3109 l
-4406 3114 l
-4406 3118 l
-4406 3123 l
-4404 3125 l
-S
-4393 3185 m
-4395 3183 l
-4397 3181 l
-4397 3176 l
-4397 3172 l
-4397 3167 l
-4397 3163 l
-4397 3158 l
-4400 3156 l
-4402 3154 l
-4402 3149 l
-4402 3145 l
-S
-4388 3225 m
-4388 3221 l
-4388 3216 l
-4388 3212 l
-4391 3210 l
-4393 3207 l
-4393 3203 l
-4393 3199 l
-4393 3194 l
-4393 3190 l
-4393 3185 l
-S
-4379 3266 m
-4379 3261 l
-4382 3259 l
-4384 3257 l
-4384 3252 l
-4384 3248 l
-4384 3243 l
-4384 3239 l
-4386 3236 l
-4388 3234 l
-4388 3230 l
-4388 3225 l
-S
-4375 3306 m
-4375 3301 l
-4375 3297 l
-4375 3292 l
-4375 3288 l
-4377 3286 l
-4379 3283 l
-4379 3279 l
-4379 3274 l
-4379 3270 l
-4379 3266 l
-S
-4366 3346 m
-4366 3341 l
-4366 3337 l
-4368 3335 l
-4370 3333 l
-4370 3328 l
-4370 3324 l
-4370 3319 l
-4370 3315 l
-4373 3312 l
-4375 3310 l
-4375 3306 l
-S
-4357 3386 m
-4359 3384 l
-4362 3382 l
-4362 3377 l
-4362 3373 l
-4362 3368 l
-4362 3364 l
-4364 3362 l
-S
-4366 3346 m
-4366 3350 l
-4366 3355 l
-4366 3359 l
-4364 3362 l
-S
-4353 3426 m
-4353 3422 l
-4353 3417 l
-4353 3413 l
-4353 3409 l
-4355 3406 l
-4357 3404 l
-4357 3400 l
-4357 3395 l
-4357 3391 l
-4357 3386 l
-S
-4344 3467 m
-4344 3462 l
-4344 3458 l
-4344 3453 l
-4346 3451 l
-4348 3449 l
-4348 3444 l
-4348 3440 l
-4348 3435 l
-4348 3431 l
-4350 3429 l
-4353 3426 l
-S
-4335 3507 m
-4335 3502 l
-4335 3498 l
-4337 3496 l
-4339 3493 l
-4339 3489 l
-4339 3484 l
-4339 3480 l
-4339 3476 l
-4341 3473 l
-4344 3471 l
-4344 3467 l
-S
-4326 3547 m
-4326 3543 l
-4328 3540 l
-4330 3538 l
-4330 3534 l
-4330 3529 l
-4330 3525 l
-4330 3520 l
-4333 3518 l
-4335 3516 l
-4335 3511 l
-4335 3507 l
-S
-4317 3587 m
-4317 3583 l
-4319 3581 l
-4321 3578 l
-4321 3574 l
-4321 3569 l
-4321 3565 l
-4324 3563 l
-S
-4326 3547 m
-4326 3552 l
-4326 3556 l
-4326 3560 l
-4324 3563 l
-S
-4308 3627 m
-4308 3623 l
-4310 3621 l
-4312 3619 l
-4312 3614 l
-4312 3610 l
-4312 3605 l
-4315 3603 l
-4317 3601 l
-4317 3596 l
-4317 3592 l
-4317 3587 l
-S
-4299 3668 m
-4299 3663 l
-4301 3661 l
-4303 3659 l
-4303 3654 l
-4303 3650 l
-4303 3645 l
-4306 3643 l
-4308 3641 l
-4308 3636 l
-4308 3632 l
-4308 3627 l
-S
-4290 3708 m
-4290 3703 l
-4292 3701 l
-4295 3699 l
-4295 3695 l
-4295 3690 l
-4295 3686 l
-4297 3683 l
-4299 3681 l
-4299 3677 l
-4299 3672 l
-4299 3668 l
-S
-4281 3748 m
-4281 3744 l
-4281 3739 l
-4283 3737 l
-S
-4283 3737 m
-4286 3735 l
-4286 3730 l
-4286 3726 l
-4286 3721 l
-4288 3719 l
-4290 3717 l
-4290 3712 l
-4290 3708 l
-S
-4272 3788 m
-4272 3784 l
-4272 3779 l
-4274 3777 l
-4277 3775 l
-4277 3770 l
-4277 3766 l
-4277 3762 l
-4279 3759 l
-4281 3757 l
-4281 3753 l
-4281 3748 l
-S
-4263 3829 m
-4263 3824 l
-4263 3820 l
-4263 3815 l
-4265 3813 l
-4268 3811 l
-4268 3806 l
-4268 3802 l
-4268 3797 l
-4270 3795 l
-4272 3793 l
-4272 3788 l
-S
-4250 3869 m
-4252 3867 l
-4254 3864 l
-4254 3860 l
-4254 3855 l
-4254 3851 l
-4257 3849 l
-4259 3846 l
-4259 3842 l
-4259 3838 l
-4259 3833 l
-4261 3831 l
-4263 3829 l
-S
-4241 3909 m
-4241 3905 l
-4243 3902 l
-S
-4243 3902 m
-4245 3900 l
-4245 3896 l
-4245 3891 l
-4245 3887 l
-4248 3884 l
-4250 3882 l
-4250 3878 l
-4250 3873 l
-4250 3869 l
-S
-4232 3949 m
-4232 3945 l
-4232 3940 l
-4232 3936 l
-4234 3934 l
-4236 3931 l
-4236 3927 l
-4236 3922 l
-4239 3920 l
-4241 3918 l
-4241 3913 l
-4241 3909 l
-S
-4219 3989 m
-4221 3987 l
-4223 3985 l
-4223 3981 l
-4223 3976 l
-4223 3972 l
-4225 3969 l
-4228 3967 l
-4228 3963 l
-4228 3958 l
-4228 3954 l
-4230 3951 l
-4232 3949 l
-S
-4210 4030 m
-4210 4025 l
-4210 4021 l
-4212 4018 l
-4214 4016 l
-4214 4012 l
-4214 4007 l
-4214 4003 l
-4216 4001 l
-4219 3998 l
-4219 3994 l
-4219 3989 l
-S
-4196 4070 m
-4198 4068 l
-4201 4065 l
-4201 4061 l
-4201 4056 l
-4201 4052 l
-4203 4050 l
-S
-4203 4050 m
-4205 4048 l
-4205 4043 l
-4205 4039 l
-4207 4036 l
-4210 4034 l
-4210 4030 l
-S
-4187 4110 m
-4187 4106 l
-4187 4101 l
-4190 4099 l
-4192 4097 l
-4192 4092 l
-4192 4088 l
-4192 4083 l
-4194 4081 l
-4196 4079 l
-4196 4074 l
-4196 4070 l
-S
-4174 4150 m
-4174 4146 l
-4176 4144 l
-4178 4141 l
-4178 4137 l
-4178 4132 l
-4181 4130 l
-4183 4128 l
-4183 4124 l
-4183 4119 l
-4183 4115 l
-4185 4112 l
-4187 4110 l
-S
-4160 4191 m
-4163 4188 l
-S
-4163 4188 m
-4165 4186 l
-4165 4182 l
-4165 4177 l
-4167 4175 l
-4169 4173 l
-4169 4168 l
-4169 4164 l
-4172 4161 l
-4174 4159 l
-4174 4155 l
-4174 4150 l
-S
-4152 4231 m
-4152 4226 l
-4152 4222 l
-4154 4220 l
-4156 4217 l
-4156 4213 l
-4156 4208 l
-4158 4206 l
-4160 4204 l
-4160 4199 l
-4160 4195 l
-4160 4191 l
-S
-4138 4271 m
-4138 4266 l
-4140 4264 l
-4143 4262 l
-4143 4258 l
-4143 4253 l
-4145 4251 l
-4147 4249 l
-4147 4244 l
-4147 4240 l
-4147 4235 l
-4149 4233 l
-4152 4231 l
-S
-4125 4311 m
-4125 4307 l
-4127 4304 l
-4129 4302 l
-4129 4298 l
-4129 4293 l
-4131 4291 l
-4134 4289 l
-4134 4284 l
-4134 4280 l
-4136 4278 l
-4138 4275 l
-4138 4271 l
-S
-4111 4351 m
-4114 4349 l
-4116 4347 l
-4116 4342 l
-4116 4338 l
-4118 4336 l
-4120 4334 l
-4120 4329 l
-4120 4325 l
-4122 4322 l
-S
-4125 4311 m
-4125 4316 l
-4125 4320 l
-4122 4322 l
-S
-4098 4392 m
-4100 4389 l
-4102 4387 l
-4102 4383 l
-4102 4378 l
-4105 4376 l
-4107 4374 l
-4107 4369 l
-4107 4365 l
-4109 4363 l
-4111 4360 l
-4111 4356 l
-4111 4351 l
-S
-4085 4432 m
-4087 4430 l
-4089 4427 l
-4089 4423 l
-4089 4418 l
-4091 4416 l
-4093 4414 l
-4093 4409 l
-4093 4405 l
-4096 4403 l
-4098 4401 l
-4098 4396 l
-4098 4392 l
-S
-4071 4472 m
-4073 4470 l
-4076 4468 l
-4076 4463 l
-4076 4459 l
-4078 4456 l
-4080 4454 l
-4080 4450 l
-4080 4445 l
-4082 4443 l
-S
-4085 4432 m
-4085 4436 l
-4085 4441 l
-4082 4443 l
-S
-4058 4512 m
-4060 4510 l
-4062 4508 l
-4062 4503 l
-4062 4499 l
-4064 4497 l
-4067 4494 l
-4067 4490 l
-4067 4485 l
-4069 4483 l
-4071 4481 l
-4071 4477 l
-4071 4472 l
-S
-4044 4552 m
-4047 4550 l
-4049 4548 l
-4049 4544 l
-4049 4539 l
-4051 4537 l
-4053 4535 l
-4053 4530 l
-4053 4526 l
-4055 4523 l
-4058 4521 l
-4058 4517 l
-4058 4512 l
-S
-4031 4593 m
-4031 4588 l
-4033 4586 l
-4035 4584 l
-4035 4579 l
-4035 4575 l
-4038 4573 l
-4040 4570 l
-4040 4566 l
-4040 4561 l
-4042 4559 l
-S
-4044 4552 m
-4044 4557 l
-4042 4559 l
-S
-4017 4633 m
-4017 4628 l
-4017 4624 l
-4020 4622 l
-4022 4620 l
-4022 4615 l
-4024 4613 l
-4026 4611 l
-4026 4606 l
-4026 4602 l
-4029 4599 l
-4031 4597 l
-4031 4593 l
-S
-4000 4673 m
-4002 4671 l
-S
-4002 4671 m
-4004 4669 l
-4004 4664 l
-4006 4662 l
-4009 4660 l
-4009 4655 l
-4009 4651 l
-4011 4649 l
-4013 4646 l
-4013 4642 l
-4013 4637 l
-4015 4635 l
-4017 4633 l
-S
-3986 4713 m
-3988 4711 l
-3991 4709 l
-3991 4704 l
-3991 4700 l
-3993 4698 l
-3995 4695 l
-3995 4691 l
-3995 4687 l
-3997 4684 l
-4000 4682 l
-4000 4678 l
-4000 4673 l
-S
-3973 4754 m
-3973 4749 l
-3973 4745 l
-3975 4742 l
-3977 4740 l
-3977 4736 l
-3979 4733 l
-3982 4731 l
-3982 4727 l
-3982 4722 l
-3984 4720 l
-3986 4718 l
-3986 4713 l
-S
-3955 4794 m
-3957 4792 l
-3959 4789 l
-3959 4785 l
-3959 4780 l
-3962 4778 l
-S
-3962 4778 m
-3964 4776 l
-3964 4771 l
-3966 4769 l
-3968 4767 l
-3968 4763 l
-3968 4758 l
-3971 4756 l
-3973 4754 l
-S
-3942 4834 m
-3942 4830 l
-3944 4827 l
-3946 4825 l
-3946 4821 l
-3946 4816 l
-3948 4814 l
-3950 4812 l
-3950 4807 l
-3953 4805 l
-3955 4803 l
-3955 4798 l
-3955 4794 l
-S
-3924 4874 m
-3926 4872 l
-3928 4870 l
-3928 4865 l
-3928 4861 l
-3930 4859 l
-3933 4856 l
-3933 4852 l
-3935 4850 l
-3937 4847 l
-3937 4843 l
-3937 4838 l
-3939 4836 l
-3942 4834 l
-S
-3910 4914 m
-3910 4910 l
-3910 4906 l
-3912 4903 l
-3915 4901 l
-3915 4897 l
-3917 4894 l
-3919 4892 l
-3919 4888 l
-3919 4883 l
-3921 4881 l
-S
-3924 4874 m
-3924 4879 l
-3921 4881 l
-S
-3892 4955 m
-3892 4950 l
-3895 4948 l
-3897 4946 l
-3897 4941 l
-3899 4939 l
-3901 4937 l
-3901 4932 l
-3901 4928 l
-3904 4926 l
-3906 4923 l
-3906 4919 l
-3908 4917 l
-3910 4914 l
-S
-3874 4995 m
-3877 4993 l
-3879 4990 l
-3879 4986 l
-3879 4981 l
-3881 4979 l
-S
-3881 4979 m
-3883 4977 l
-3883 4973 l
-3886 4970 l
-3888 4968 l
-3888 4964 l
-3890 4961 l
-3892 4959 l
-3892 4955 l
-S
-3857 5035 m
-3859 5033 l
-3861 5031 l
-3861 5026 l
-3863 5024 l
-3866 5022 l
-3866 5017 l
-3868 5015 l
-3870 5013 l
-3870 5008 l
-3870 5004 l
-3872 5002 l
-3874 4999 l
-3874 4995 l
-S
-3843 5075 m
-3843 5071 l
-3843 5066 l
-3845 5064 l
-3848 5062 l
-3848 5057 l
-3850 5055 l
-3852 5053 l
-3852 5049 l
-3854 5046 l
-3857 5044 l
-3857 5040 l
-3857 5035 l
-S
-3825 5116 m
-3825 5111 l
-3828 5109 l
-3830 5107 l
-3830 5102 l
-3830 5098 l
-3832 5095 l
-3834 5093 l
-3834 5089 l
-3836 5086 l
-3839 5084 l
-3839 5080 l
-3841 5078 l
-S
-3843 5075 m
-3841 5078 l
-S
-3807 5156 m
-3807 5151 l
-3810 5149 l
-3812 5147 l
-3812 5142 l
-3812 5138 l
-3814 5136 l
-3816 5133 l
-3816 5129 l
-3819 5127 l
-3821 5124 l
-3821 5120 l
-3823 5118 l
-3825 5116 l
-S
-3790 5196 m
-3790 5191 l
-3792 5189 l
-3794 5187 l
-3794 5183 l
-3796 5180 l
-3799 5178 l
-3799 5174 l
-3799 5169 l
-3801 5167 l
-S
-3801 5167 m
-3803 5165 l
-3803 5160 l
-3805 5158 l
-3807 5156 l
-S
-3772 5236 m
-3772 5232 l
-3774 5229 l
-3776 5227 l
-3776 5223 l
-3776 5218 l
-3778 5216 l
-3781 5214 l
-3781 5209 l
-3783 5207 l
-3785 5205 l
-3785 5200 l
-3787 5198 l
-3790 5196 l
-S
-3754 5276 m
-3754 5272 l
-3754 5267 l
-3756 5265 l
-3758 5263 l
-3758 5259 l
-3761 5256 l
-S
-3761 5256 m
-3763 5254 l
-3763 5250 l
-3765 5247 l
-3767 5245 l
-3767 5241 l
-3769 5238 l
-3772 5236 l
-S
-3731 5317 m
-3734 5314 l
-3736 5312 l
-3736 5308 l
-3738 5305 l
-3740 5303 l
-3740 5299 l
-3743 5297 l
-3745 5294 l
-3745 5290 l
-3747 5288 l
-3749 5285 l
-3749 5281 l
-3752 5279 l
-3754 5276 l
-S
-3714 5357 m
-3716 5355 l
-3718 5352 l
-3718 5348 l
-3718 5343 l
-3720 5341 l
-S
-3720 5341 m
-3723 5339 l
-3723 5334 l
-3725 5332 l
-3727 5330 l
-3727 5326 l
-3729 5323 l
-3731 5321 l
-3731 5317 l
-S
-3696 5397 m
-3696 5393 l
-3698 5390 l
-3700 5388 l
-3700 5384 l
-3702 5381 l
-3705 5379 l
-3705 5375 l
-3707 5372 l
-3709 5370 l
-3709 5366 l
-3711 5364 l
-3714 5361 l
-3714 5357 l
-S
-3673 5437 m
-3676 5435 l
-3678 5433 l
-3678 5428 l
-3680 5426 l
-S
-3680 5426 m
-3682 5424 l
-3682 5419 l
-3685 5417 l
-3687 5415 l
-3687 5410 l
-3689 5408 l
-3691 5406 l
-3691 5402 l
-3694 5399 l
-3696 5397 l
-S
-3656 5477 m
-3656 5473 l
-3658 5471 l
-3660 5469 l
-3660 5464 l
-3662 5462 l
-3664 5460 l
-3664 5455 l
-3667 5453 l
-3669 5451 l
-3669 5446 l
-3671 5444 l
-3673 5442 l
-3673 5437 l
-S
-3633 5518 m
-3635 5515 l
-3638 5513 l
-3638 5509 l
-3640 5507 l
-S
-3640 5507 m
-3642 5504 l
-3642 5500 l
-3644 5498 l
-3647 5495 l
-3647 5491 l
-3649 5489 l
-3651 5486 l
-3651 5482 l
-3653 5480 l
-3656 5477 l
-S
-3615 5558 m
-3615 5553 l
-3618 5551 l
-3620 5549 l
-3620 5545 l
-3622 5542 l
-3624 5540 l
-3624 5536 l
-3626 5533 l
-3629 5531 l
-3629 5527 l
-3631 5524 l
-3633 5522 l
-3633 5518 l
-S
-3593 5598 m
-3595 5596 l
-3597 5594 l
-3597 5589 l
-3600 5587 l
-S
-3600 5587 m
-3602 5585 l
-3602 5580 l
-3604 5578 l
-3606 5576 l
-3606 5571 l
-3609 5569 l
-3611 5567 l
-3611 5562 l
-3613 5560 l
-3615 5558 l
-S
-3575 5638 m
-3575 5634 l
-3577 5632 l
-3580 5629 l
-3580 5625 l
-3582 5623 l
-3584 5620 l
-3584 5616 l
-3586 5614 l
-3588 5612 l
-3588 5607 l
-3591 5605 l
-3593 5603 l
-3593 5598 l
-S
-3553 5679 m
-3553 5674 l
-3555 5672 l
-3557 5670 l
-3557 5665 l
-3559 5663 l
-S
-3559 5663 m
-3562 5661 l
-3562 5656 l
-3564 5654 l
-3566 5652 l
-3568 5650 l
-3571 5647 l
-3571 5643 l
-3573 5641 l
-3575 5638 l
-S
-3530 5719 m
-3533 5717 l
-3535 5714 l
-3535 5710 l
-3537 5708 l
-3539 5705 l
-3539 5701 l
-3542 5699 l
-3544 5696 l
-3544 5692 l
-3546 5690 l
-3548 5688 l
-3548 5683 l
-3551 5681 l
-3553 5679 l
-S
-3508 5759 m
-3510 5757 l
-3513 5755 l
-3513 5750 l
-3515 5748 l
-3517 5746 l
-3517 5741 l
-3519 5739 l
-S
-3519 5739 m
-3521 5737 l
-3521 5732 l
-3524 5730 l
-3526 5728 l
-3526 5723 l
-3528 5721 l
-3530 5719 l
-S
-3486 5799 m
-3488 5797 l
-3490 5795 l
-3490 5790 l
-3492 5788 l
-3495 5786 l
-3495 5781 l
-3497 5779 l
-3499 5777 l
-3499 5772 l
-3501 5770 l
-3504 5768 l
-3506 5766 l
-3508 5763 l
-3508 5759 l
-S
-3463 5839 m
-3466 5837 l
-3468 5835 l
-3468 5831 l
-3470 5828 l
-3472 5826 l
-3472 5822 l
-3475 5819 l
-3477 5817 l
-3479 5815 l
-S
-3479 5815 m
-3481 5813 l
-3481 5808 l
-3483 5806 l
-3486 5804 l
-3486 5799 l
-S
-3441 5880 m
-3443 5877 l
-3445 5875 l
-3445 5871 l
-3448 5868 l
-3450 5866 l
-3450 5862 l
-3452 5860 l
-3454 5857 l
-3454 5853 l
-3457 5851 l
-3459 5848 l
-3461 5846 l
-3463 5844 l
-3463 5839 l
-S
-3419 5920 m
-3421 5918 l
-3423 5915 l
-3423 5911 l
-3425 5909 l
-3428 5906 l
-3428 5902 l
-3430 5900 l
-3432 5898 l
-3432 5893 l
-3434 5891 l
-3437 5889 l
-3439 5886 l
-S
-3441 5880 m
-3441 5884 l
-3439 5886 l
-S
-3396 5960 m
-3396 5956 l
-3399 5953 l
-S
-3399 5953 m
-3401 5951 l
-3401 5947 l
-3403 5944 l
-3405 5942 l
-3408 5940 l
-3410 5938 l
-3410 5933 l
-3412 5931 l
-3414 5929 l
-3414 5924 l
-3416 5922 l
-3419 5920 l
-S
-3370 6000 m
-3372 5998 l
-3374 5996 l
-3376 5994 l
-3378 5991 l
-3378 5987 l
-3381 5985 l
-3383 5982 l
-3383 5978 l
-3385 5976 l
-3387 5974 l
-3390 5971 l
-3392 5969 l
-3392 5965 l
-3394 5962 l
-3396 5960 l
-S
-3347 6041 m
-3349 6038 l
-3352 6036 l
-3352 6032 l
-3354 6029 l
-3356 6027 l
-3356 6023 l
-3358 6020 l
-S
-3358 6020 m
-3361 6018 l
-3363 6016 l
-3365 6014 l
-3365 6009 l
-3367 6007 l
-3370 6005 l
-3370 6000 l
-S
-3325 6081 m
-3325 6076 l
-3327 6074 l
-3329 6072 l
-3329 6067 l
-3332 6065 l
-3334 6063 l
-3336 6061 l
-3338 6058 l
-3338 6054 l
-3340 6052 l
-3343 6049 l
-3345 6047 l
-3347 6045 l
-3347 6041 l
-S
-3298 6121 m
-3300 6119 l
-3303 6116 l
-3303 6112 l
-3305 6110 l
-3307 6108 l
-3309 6105 l
-3311 6103 l
-3311 6099 l
-3314 6096 l
-3316 6094 l
-3316 6090 l
-3318 6087 l
-S
-3318 6087 m
-3320 6085 l
-3323 6083 l
-3325 6081 l
-S
-1 g
-Y
-2232.6 1612.9 m
-2233 1734 l
-2333 1734 l
-2333 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2279 1717 m
-2266 1713 l
-2258 1701 l
-2253 1680 l
-2253 1667 l
-2258 1646 l
-2266 1634 l
-2279 1630 l
-2287 1630 l
-2299 1634 l
-2308 1646 l
-2312 1667 l
-2312 1680 l
-2308 1701 l
-2299 1713 l
-2287 1717 l
-2279 1717 l
-S
-1 g
-Y
-1873.8 1612.9 m
-1874 1734 l
-1936 1734 l
-1936 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1895 1701 m
-1903 1705 l
-1916 1717 l
-1916 1630 l
-S
-1 g
-Y
-1382.7 1612.9 m
-1383 1734 l
-1483 1734 l
-1483 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-1408 1696 m
-1408 1701 l
-1412 1709 l
-1416 1713 l
-1424 1717 l
-1441 1717 l
-1450 1713 l
-1454 1709 l
-1458 1701 l
-1458 1692 l
-1454 1684 l
-1445 1671 l
-1404 1630 l
-1462 1630 l
-S
-1 g
-Y
-682.1 1612.9 m
-682 1734 l
-782 1734 l
-782 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-711 1717 m
-757 1717 l
-732 1684 l
-745 1684 l
-753 1680 l
-757 1676 l
-761 1663 l
-761 1655 l
-757 1642 l
-749 1634 l
-736 1630 l
-724 1630 l
-711 1634 l
-707 1638 l
-703 1646 l
-S
-1 g
-Y
-2514.3 1612.9 m
-2514 1734 l
-2698 1734 l
-2698 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2539 1696 m
-2539 1701 l
-2544 1709 l
-2548 1713 l
-2556 1717 l
-2573 1717 l
-2581 1713 l
-2585 1709 l
-2589 1701 l
-2589 1692 l
-2585 1684 l
-2577 1671 l
-2535 1630 l
-2594 1630 l
-S
-2627 1717 m
-2673 1717 l
-2648 1684 l
-2660 1684 l
-2669 1680 l
-2673 1676 l
-2677 1663 l
-2677 1655 l
-2673 1642 l
-2665 1634 l
-2652 1630 l
-2640 1630 l
-2627 1634 l
-2623 1638 l
-2619 1646 l
-S
-1 g
-Y
-2826.8 1612.9 m
-2827 1734 l
-3011 1734 l
-3011 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2852 1696 m
-2852 1701 l
-2856 1709 l
-2860 1713 l
-2869 1717 l
-2885 1717 l
-2894 1713 l
-2898 1709 l
-2902 1701 l
-2902 1692 l
-2898 1684 l
-2889 1671 l
-2848 1630 l
-2906 1630 l
-S
-2935 1696 m
-2935 1701 l
-2940 1709 l
-2944 1713 l
-2952 1717 l
-2969 1717 l
-2977 1713 l
-2981 1709 l
-2985 1701 l
-2985 1692 l
-2981 1684 l
-2973 1671 l
-2931 1630 l
-2990 1630 l
-S
-1 g
-Y
-3158.7 1612.9 m
-3159 1734 l
-3317 1734 l
-3317 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3184 1696 m
-3184 1701 l
-3188 1709 l
-3192 1713 l
-3200 1717 l
-3217 1717 l
-3226 1713 l
-3230 1709 l
-3234 1701 l
-3234 1692 l
-3230 1684 l
-3221 1671 l
-3180 1630 l
-3238 1630 l
-S
-3276 1701 m
-3284 1705 l
-3297 1717 l
-3297 1630 l
-S
-1 g
-Y
-3539 1612.9 m
-3539 1734 l
-3723 1734 l
-3723 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-3564 1696 m
-3564 1701 l
-3568 1709 l
-3572 1713 l
-3581 1717 l
-3597 1717 l
-3606 1713 l
-3610 1709 l
-3614 1701 l
-3614 1692 l
-3610 1684 l
-3602 1671 l
-3560 1630 l
-3618 1630 l
-S
-3668 1717 m
-3656 1713 l
-3648 1701 l
-3643 1680 l
-3643 1667 l
-3648 1646 l
-3656 1634 l
-3668 1630 l
-3677 1630 l
-3689 1634 l
-3698 1646 l
-3702 1667 l
-3702 1680 l
-3698 1701 l
-3689 1713 l
-3677 1717 l
-3668 1717 l
-S
-1 g
-Y
-3992.1 1612.9 m
-3992 1734 l
-4159 1734 l
-4159 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4013 1701 m
-4021 1705 l
-4034 1717 l
-4034 1630 l
-S
-4138 1688 m
-4134 1676 l
-4126 1667 l
-4113 1663 l
-4109 1663 l
-4097 1667 l
-4088 1676 l
-4084 1688 l
-4084 1692 l
-4088 1705 l
-4097 1713 l
-4109 1717 l
-4113 1717 l
-4126 1713 l
-4134 1705 l
-4138 1688 l
-4138 1667 l
-4134 1646 l
-4126 1634 l
-4113 1630 l
-4105 1630 l
-4092 1634 l
-4088 1642 l
-S
-1 g
-Y
-4375 1612.9 m
-4375 1734 l
-4546 1734 l
-4546 1613 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-4396 1701 m
-4404 1705 l
-4417 1717 l
-4417 1630 l
-S
-4488 1717 m
-4475 1713 l
-4471 1705 l
-4471 1696 l
-4475 1688 l
-4484 1684 l
-4500 1680 l
-4513 1676 l
-4521 1667 l
-4525 1659 l
-4525 1646 l
-4521 1638 l
-4517 1634 l
-4504 1630 l
-4488 1630 l
-4475 1634 l
-4471 1638 l
-4467 1646 l
-4467 1659 l
-4471 1667 l
-4479 1676 l
-4492 1680 l
-4509 1684 l
-4517 1688 l
-4521 1696 l
-4521 1705 l
-4517 1713 l
-4504 1717 l
-4488 1717 l
-S
-1 g
-Y
-324.3 2215.9 m
-324 2337 l
-508 2337 l
-508 2216 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-395 2320 m
-354 2320 l
-349 2283 l
-354 2287 l
-366 2291 l
-379 2291 l
-391 2287 l
-399 2279 l
-404 2266 l
-404 2258 l
-399 2245 l
-391 2237 l
-379 2233 l
-366 2233 l
-354 2237 l
-349 2241 l
-345 2249 l
-S
-454 2320 m
-441 2316 l
-433 2304 l
-429 2283 l
-429 2270 l
-433 2249 l
-441 2237 l
-454 2233 l
-462 2233 l
-475 2237 l
-483 2249 l
-487 2270 l
-487 2283 l
-483 2304 l
-475 2316 l
-462 2320 l
-454 2320 l
-S
-1 g
-Y
-328.5 3463.3 m
-328 3584 l
-508 3584 l
-508 3463 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-399 3555 m
-395 3564 l
-383 3568 l
-374 3568 l
-362 3564 l
-354 3551 l
-349 3530 l
-349 3509 l
-354 3493 l
-362 3484 l
-374 3480 l
-379 3480 l
-391 3484 l
-399 3493 l
-404 3505 l
-404 3509 l
-399 3522 l
-391 3530 l
-379 3534 l
-374 3534 l
-362 3530 l
-354 3522 l
-349 3509 l
-S
-454 3568 m
-441 3564 l
-433 3551 l
-429 3530 l
-429 3518 l
-433 3497 l
-441 3484 l
-454 3480 l
-462 3480 l
-475 3484 l
-483 3497 l
-487 3518 l
-487 3530 l
-483 3551 l
-475 3564 l
-462 3568 l
-454 3568 l
-S
-1 g
-Y
-324.3 4900 m
-324 5021 l
-508 5021 l
-508 4900 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-404 5004 m
-362 4917 l
-S
-345 5004 m
-404 5004 l
-S
-454 5004 m
-441 5000 l
-433 4988 l
-429 4967 l
-429 4954 l
-433 4933 l
-441 4921 l
-454 4917 l
-462 4917 l
-475 4921 l
-483 4933 l
-487 4954 l
-487 4967 l
-483 4988 l
-475 5000 l
-462 5004 l
-454 5004 l
-S
-1 g
-Y
-2021.5 1398.2 m
-2022 1553 l
-3070 1553 l
-3070 1398 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-2042 1532 m
-2042 1444 l
-S
-2042 1532 m
-2080 1532 l
-2093 1528 l
-2097 1524 l
-2101 1515 l
-2101 1507 l
-2097 1498 l
-2093 1494 l
-2080 1490 l
-2042 1490 l
-S
-2072 1490 m
-2101 1444 l
-S
-2126 1532 m
-2130 1528 l
-2134 1532 l
-2130 1536 l
-2126 1532 l
-S
-2130 1503 m
-2130 1444 l
-S
-2209 1503 m
-2209 1436 l
-2205 1423 l
-2201 1419 l
-2193 1415 l
-2180 1415 l
-2172 1419 l
-S
-2209 1490 m
-2201 1498 l
-2193 1503 l
-2180 1503 l
-2172 1498 l
-2164 1490 l
-2159 1478 l
-2159 1469 l
-2164 1457 l
-2172 1448 l
-2180 1444 l
-2193 1444 l
-2201 1448 l
-2209 1457 l
-S
-2243 1532 m
-2243 1444 l
-S
-2243 1486 m
-2255 1498 l
-2264 1503 l
-2276 1503 l
-2285 1498 l
-2289 1486 l
-2289 1444 l
-S
-2326 1532 m
-2326 1461 l
-2331 1448 l
-2339 1444 l
-2347 1444 l
-S
-2314 1503 m
-2343 1503 l
-S
-2485 1503 m
-2485 1444 l
-S
-2485 1490 m
-2477 1498 l
-2468 1503 l
-2456 1503 l
-2448 1498 l
-2439 1490 l
-2435 1478 l
-2435 1469 l
-2439 1457 l
-2448 1448 l
-2456 1444 l
-2468 1444 l
-2477 1448 l
-2485 1457 l
-S
-2560 1490 m
-2556 1498 l
-2544 1503 l
-2531 1503 l
-2519 1498 l
-2514 1490 l
-2519 1482 l
-2527 1478 l
-2548 1473 l
-2556 1469 l
-2560 1461 l
-2560 1457 l
-2556 1448 l
-2544 1444 l
-2531 1444 l
-2519 1448 l
-2514 1457 l
-S
-2636 1490 m
-2627 1498 l
-2619 1503 l
-2606 1503 l
-2598 1498 l
-2590 1490 l
-2585 1478 l
-2585 1469 l
-2590 1457 l
-2598 1448 l
-2606 1444 l
-2619 1444 l
-2627 1448 l
-2636 1457 l
-S
-2661 1478 m
-2711 1478 l
-2711 1486 l
-2707 1494 l
-2702 1498 l
-2694 1503 l
-2681 1503 l
-2673 1498 l
-2665 1490 l
-2661 1478 l
-2661 1469 l
-2665 1457 l
-2673 1448 l
-2681 1444 l
-2694 1444 l
-2702 1448 l
-2711 1457 l
-S
-2740 1503 m
-2740 1444 l
-S
-2740 1486 m
-2752 1498 l
-2761 1503 l
-2773 1503 l
-2782 1498 l
-2786 1486 l
-2786 1444 l
-S
-2861 1490 m
-2857 1498 l
-2844 1503 l
-2832 1503 l
-2819 1498 l
-2815 1490 l
-2819 1482 l
-2828 1478 l
-2849 1473 l
-2857 1469 l
-2861 1461 l
-2861 1457 l
-2857 1448 l
-2844 1444 l
-2832 1444 l
-2819 1448 l
-2815 1457 l
-S
-2886 1532 m
-2890 1528 l
-2894 1532 l
-2890 1536 l
-2886 1532 l
-S
-2890 1503 m
-2890 1444 l
-S
-2940 1503 m
-2932 1498 l
-2924 1490 l
-2920 1478 l
-2920 1469 l
-2924 1457 l
-2932 1448 l
-2940 1444 l
-2953 1444 l
-2961 1448 l
-2970 1457 l
-2974 1469 l
-2974 1478 l
-2970 1490 l
-2961 1498 l
-2953 1503 l
-2940 1503 l
-S
-3003 1503 m
-3003 1444 l
-S
-3003 1486 m
-3016 1498 l
-3024 1503 l
-3036 1503 l
-3045 1498 l
-3049 1486 l
-3049 1444 l
-S
-1 g
-Y
-285 3592.2 m
-160 3592 l
-160 4306 l
-285 4306 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-181 3613 m
-268 3613 l
-S
-181 3613 m
-181 3642 l
-185 3655 l
-193 3663 l
-201 3667 l
-214 3672 l
-235 3672 l
-247 3667 l
-256 3663 l
-264 3655 l
-268 3642 l
-268 3613 l
-S
-235 3697 m
-235 3747 l
-227 3747 l
-218 3743 l
-214 3738 l
-210 3730 l
-210 3718 l
-214 3709 l
-222 3701 l
-235 3697 l
-243 3697 l
-256 3701 l
-264 3709 l
-268 3718 l
-268 3730 l
-264 3738 l
-256 3747 l
-S
-222 3822 m
-214 3814 l
-210 3805 l
-210 3793 l
-214 3784 l
-222 3776 l
-235 3772 l
-243 3772 l
-256 3776 l
-264 3784 l
-268 3793 l
-268 3805 l
-264 3814 l
-256 3822 l
-S
-181 3851 m
-268 3851 l
-S
-181 3880 m
-185 3885 l
-181 3889 l
-176 3885 l
-181 3880 l
-S
-210 3885 m
-268 3885 l
-S
-210 3918 m
-268 3918 l
-S
-227 3918 m
-214 3931 l
-210 3939 l
-210 3951 l
-214 3960 l
-227 3964 l
-268 3964 l
-S
-210 4043 m
-268 4043 l
-S
-222 4043 m
-214 4035 l
-210 4027 l
-210 4014 l
-214 4006 l
-222 3997 l
-235 3993 l
-243 3993 l
-256 3997 l
-264 4006 l
-268 4014 l
-268 4027 l
-264 4035 l
-256 4043 l
-S
-181 4081 m
-252 4081 l
-264 4085 l
-268 4093 l
-268 4102 l
-S
-210 4068 m
-210 4098 l
-S
-181 4123 m
-185 4127 l
-181 4131 l
-176 4127 l
-181 4123 l
-S
-210 4127 m
-268 4127 l
-S
-210 4177 m
-214 4169 l
-222 4160 l
-235 4156 l
-243 4156 l
-256 4160 l
-264 4169 l
-268 4177 l
-268 4189 l
-264 4198 l
-256 4206 l
-243 4210 l
-235 4210 l
-222 4206 l
-214 4198 l
-210 4189 l
-210 4177 l
-S
-210 4240 m
-268 4240 l
-S
-227 4240 m
-214 4252 l
-210 4261 l
-210 4273 l
-214 4281 l
-227 4286 l
-268 4286 l
-S
-1 g
-Y
-924.3 6283 m
-924 6468 l
-4172 6468 l
-4172 6283 l
-f*
-0 g
-0 0 5429.76 7898.46 re
-Y
-949 6443 m
-949 6338 l
-S
-949 6443 m
-1015 6443 l
-S
-949 6393 m
-989 6393 l
-S
-1040 6443 m
-1040 6338 l
-S
-1110 6443 m
-1040 6373 l
-S
-1065 6398 m
-1110 6338 l
-S
-1200 6443 m
-1150 6443 l
-1145 6398 l
-1150 6403 l
-1165 6408 l
-1180 6408 l
-1195 6403 l
-1205 6393 l
-1210 6378 l
-1210 6368 l
-1205 6353 l
-1195 6343 l
-1180 6338 l
-1165 6338 l
-1150 6343 l
-1145 6348 l
-1140 6358 l
-S
-1380 6393 m
-1370 6403 l
-1360 6408 l
-1345 6408 l
-1335 6403 l
-1325 6393 l
-1320 6378 l
-1320 6368 l
-1325 6353 l
-1335 6343 l
-1345 6338 l
-1360 6338 l
-1370 6343 l
-1380 6353 l
-S
-1436 6408 m
-1426 6403 l
-1415 6393 l
-1410 6378 l
-1410 6368 l
-1415 6353 l
-1426 6343 l
-1436 6338 l
-1451 6338 l
-1461 6343 l
-1471 6353 l
-1476 6368 l
-1476 6378 l
-1471 6393 l
-1461 6403 l
-1451 6408 l
-1436 6408 l
-S
-1531 6408 m
-1521 6403 l
-1511 6393 l
-1506 6378 l
-1506 6368 l
-1511 6353 l
-1521 6343 l
-1531 6338 l
-1546 6338 l
-1556 6343 l
-1566 6353 l
-1571 6368 l
-1571 6378 l
-1566 6393 l
-1556 6403 l
-1546 6408 l
-1531 6408 l
-S
-1606 6408 m
-1606 6338 l
-S
-1606 6378 m
-1611 6393 l
-1621 6403 l
-1631 6408 l
-1646 6408 l
-S
-1726 6443 m
-1726 6338 l
-S
-1726 6393 m
-1716 6403 l
-1706 6408 l
-1691 6408 l
-1681 6403 l
-1671 6393 l
-1666 6378 l
-1666 6368 l
-1671 6353 l
-1681 6343 l
-1691 6338 l
-1706 6338 l
-1716 6343 l
-1726 6353 l
-S
-1761 6443 m
-1766 6438 l
-1771 6443 l
-1766 6448 l
-1761 6443 l
-S
-1766 6408 m
-1766 6338 l
-S
-1806 6408 m
-1806 6338 l
-S
-1806 6388 m
-1821 6403 l
-1831 6408 l
-1847 6408 l
-1857 6403 l
-1862 6388 l
-1862 6338 l
-S
-1957 6408 m
-1957 6338 l
-S
-1957 6393 m
-1947 6403 l
-1937 6408 l
-1922 6408 l
-1912 6403 l
-1902 6393 l
-1897 6378 l
-1897 6368 l
-1902 6353 l
-1912 6343 l
-1922 6338 l
-1937 6338 l
-1947 6343 l
-1957 6353 l
-S
-2002 6443 m
-2002 6358 l
-2007 6343 l
-2017 6338 l
-2027 6338 l
-S
-1987 6408 m
-2022 6408 l
-S
-2052 6378 m
-2112 6378 l
-2112 6388 l
-2107 6398 l
-2102 6403 l
-2092 6408 l
-2077 6408 l
-2067 6403 l
-2057 6393 l
-2052 6378 l
-2052 6368 l
-2057 6353 l
-2067 6343 l
-2077 6338 l
-2092 6338 l
-2102 6343 l
-2112 6353 l
-S
-2197 6393 m
-2192 6403 l
-2177 6408 l
-2162 6408 l
-2147 6403 l
-2142 6393 l
-2147 6383 l
-2157 6378 l
-2182 6373 l
-2192 6368 l
-2197 6358 l
-2197 6353 l
-2192 6343 l
-2177 6338 l
-2162 6338 l
-2147 6343 l
-2142 6353 l
-S
-2237 6408 m
-2232 6403 l
-2237 6398 l
-2242 6403 l
-2237 6408 l
-S
-2242 6343 m
-2237 6338 l
-2232 6343 l
-2237 6348 l
-2242 6343 l
-2242 6333 l
-2237 6323 l
-2232 6318 l
-S
-2363 6408 m
-2363 6338 l
-S
-2363 6388 m
-2378 6403 l
-2388 6408 l
-2403 6408 l
-2413 6403 l
-2418 6388 l
-2418 6338 l
-S
-2418 6388 m
-2433 6403 l
-2443 6408 l
-2458 6408 l
-2468 6403 l
-2473 6388 l
-2473 6338 l
-S
-2508 6378 m
-2568 6378 l
-2568 6388 l
-2563 6398 l
-2558 6403 l
-2548 6408 l
-2533 6408 l
-2523 6403 l
-2513 6393 l
-2508 6378 l
-2508 6368 l
-2513 6353 l
-2523 6343 l
-2533 6338 l
-2548 6338 l
-2558 6343 l
-2568 6353 l
-S
-2658 6408 m
-2658 6338 l
-S
-2658 6393 m
-2648 6403 l
-2638 6408 l
-2623 6408 l
-2613 6403 l
-2603 6393 l
-2598 6378 l
-2598 6368 l
-2603 6353 l
-2613 6343 l
-2623 6338 l
-2638 6338 l
-2648 6343 l
-2658 6353 l
-S
-2699 6408 m
-2699 6338 l
-S
-2699 6388 m
-2714 6403 l
-2724 6408 l
-2739 6408 l
-2749 6403 l
-2754 6388 l
-2754 6338 l
-S
-2869 6378 m
-2929 6378 l
-2929 6388 l
-2924 6398 l
-2919 6403 l
-2909 6408 l
-2894 6408 l
-2884 6403 l
-2874 6393 l
-2869 6378 l
-2869 6368 l
-2874 6353 l
-2884 6343 l
-2894 6338 l
-2909 6338 l
-2919 6343 l
-2929 6353 l
-S
-3019 6408 m
-3019 6303 l
-S
-3019 6393 m
-3009 6403 l
-2999 6408 l
-2984 6408 l
-2974 6403 l
-2964 6393 l
-2959 6378 l
-2959 6368 l
-2964 6353 l
-2974 6343 l
-2984 6338 l
-2999 6338 l
-3009 6343 l
-3019 6353 l
-S
-3059 6408 m
-3059 6358 l
-3064 6343 l
-3074 6338 l
-3090 6338 l
-3100 6343 l
-3115 6358 l
-S
-3115 6408 m
-3115 6338 l
-S
-3150 6443 m
-3155 6438 l
-3160 6443 l
-3155 6448 l
-3150 6443 l
-S
-3155 6408 m
-3155 6338 l
-S
-3195 6408 m
-3195 6338 l
-S
-3195 6388 m
-3210 6403 l
-3220 6408 l
-3235 6408 l
-3245 6403 l
-3250 6388 l
-3250 6338 l
-S
-3310 6408 m
-3300 6403 l
-3290 6393 l
-3285 6378 l
-3285 6368 l
-3290 6353 l
-3300 6343 l
-3310 6338 l
-3325 6338 l
-3335 6343 l
-3345 6353 l
-3350 6368 l
-3350 6378 l
-3345 6393 l
-3335 6403 l
-3325 6408 l
-3310 6408 l
-S
-3380 6408 m
-3435 6338 l
-S
-3435 6408 m
-3380 6338 l
-S
-3591 6443 m
-3591 6363 l
-3586 6348 l
-3581 6343 l
-3571 6338 l
-3561 6338 l
-3551 6343 l
-3546 6348 l
-3541 6363 l
-3541 6373 l
-S
-3631 6418 m
-3631 6423 l
-3636 6433 l
-3641 6438 l
-3651 6443 l
-3671 6443 l
-3681 6438 l
-3686 6433 l
-3691 6423 l
-3691 6413 l
-3686 6403 l
-3676 6388 l
-3626 6338 l
-3696 6338 l
-S
-3756 6443 m
-3741 6438 l
-3731 6423 l
-3726 6398 l
-3726 6383 l
-3731 6358 l
-3741 6343 l
-3756 6338 l
-3766 6338 l
-3781 6343 l
-3791 6358 l
-3796 6383 l
-3796 6398 l
-3791 6423 l
-3781 6438 l
-3766 6443 l
-3756 6443 l
-S
-3856 6443 m
-3841 6438 l
-3831 6423 l
-3826 6398 l
-3826 6383 l
-3831 6358 l
-3841 6343 l
-3856 6338 l
-3866 6338 l
-3881 6343 l
-3891 6358 l
-3896 6383 l
-3896 6398 l
-3891 6423 l
-3881 6438 l
-3866 6443 l
-3856 6443 l
-S
-3957 6443 m
-3942 6438 l
-3932 6423 l
-3927 6398 l
-3927 6383 l
-3932 6358 l
-3942 6343 l
-3957 6338 l
-3967 6338 l
-3982 6343 l
-3992 6358 l
-3997 6383 l
-3997 6398 l
-3992 6423 l
-3982 6438 l
-3967 6443 l
-3957 6443 l
-S
-4037 6348 m
-4032 6343 l
-4037 6338 l
-4042 6343 l
-4037 6348 l
-S
-4107 6443 m
-4092 6438 l
-4082 6423 l
-4077 6398 l
-4077 6383 l
-4082 6358 l
-4092 6343 l
-4107 6338 l
-4117 6338 l
-4132 6343 l
-4142 6358 l
-4147 6383 l
-4147 6398 l
-4142 6423 l
-4132 6438 l
-4117 6443 l
-4107 6443 l
-S
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/parallel.eps b/ast-5.3-1/sun211_figures/parallel.eps
deleted file mode 100644
index 5baa971..0000000
--- a/ast-5.3-1/sun211_figures/parallel.eps
+++ /dev/null
@@ -1,988 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 152 155 463 420
-%................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/05 14:50:56
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-4253.75 3863.75 m
-4253.75 4016.15 4128.95 4140.95 3976.55 4140.95 c
-2309.75 4140.95 l
-2157.35 4140.95 2032.55 4016.15 2032.55 3863.75 c
-2032.55 1836.95 l
-2032.55 1684.55 2157.35 1559.75 2309.75 1559.75 c
-3976.55 1559.75 l
-4128.95 1559.75 4253.75 1684.55 4253.75 1836.95 c
-f*
-1 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-f*
-8 w
-1 J
-1 j
-0 g
-4188.95 3918.95 m
-4188.95 4071.35 4065.35 4194.95 3912.95 4194.95 c
-2254.55 4194.95 l
-2102.15 4194.95 1978.55 4071.35 1978.55 3918.95 c
-1978.55 1900.55 l
-1978.55 1748.15 2102.15 1624.55 2254.55 1624.55 c
-3912.95 1624.55 l
-4065.35 1624.55 4188.95 1748.15 4188.95 1900.55 c
-h
-S
-1983.35 3352.55 308.4 103.2 re
-Y
-1983.35 3360.95 m
-2283.35 3448.55 l
-S
-0 0 6120 7920 re
-Y
-2022.95 3362.15 m
-2022.95 3383.75 2004.95 3401.75 1983.35 3401.75 c
-1960.55 3401.75 1942.55 3383.75 1942.55 3362.15 c
-1942.55 3340.55 1960.55 3322.55 1983.35 3322.55 c
-2004.95 3322.55 2022.95 3340.55 2022.95 3362.15 c
-f*
-2259.35 3392.15 m
-2265.35 3442.55 l
-2234.15 3482.15 l
-2393.75 3479.75 l
-f*
-0.564706 g
-3833.75 3651.35 m
-3833.75 3722.15 3776.15 3780.95 3704.15 3780.95 c
-2582.15 3780.95 l
-2510.15 3780.95 2452.55 3722.15 2452.55 3651.35 c
-2452.55 2872.55 l
-2452.55 2800.55 2510.15 2742.95 2582.15 2742.95 c
-3704.15 2742.95 l
-3776.15 2742.95 3833.75 2800.55 3833.75 2872.55 c
-f*
-1 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-f*
-0 g
-3768.95 3706.55 m
-3768.95 3777.35 3712.55 3834.95 3640.55 3834.95 c
-2526.95 3834.95 l
-2456.15 3834.95 2398.55 3777.35 2398.55 3706.55 c
-2398.55 2934.95 l
-2398.55 2865.35 2456.15 2807.75 2526.95 2807.75 c
-3640.55 2807.75 l
-3711.35 2807.75 3768.95 2865.35 3768.95 2934.95 c
-h
-S
-0.564706 g
-3833.75 2325.35 m
-3833.75 2367.35 3800.15 2400.95 3758.15 2400.95 c
-2528.15 2400.95 l
-2486.15 2400.95 2452.55 2367.35 2452.55 2325.35 c
-2452.55 1875.35 l
-2452.55 1833.35 2486.15 1799.75 2528.15 1799.75 c
-3758.15 1799.75 l
-3800.15 1799.75 3833.75 1833.35 3833.75 1875.35 c
-f*
-1 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-f*
-0 g
-3768.95 2381.75 m
-3768.95 2422.55 3736.55 2454.95 3694.55 2454.95 c
-2472.95 2454.95 l
-2430.95 2454.95 2398.55 2422.55 2398.55 2381.75 c
-2398.55 1937.75 l
-2398.55 1896.95 2430.95 1864.55 2472.95 1864.55 c
-3694.55 1864.55 l
-3736.55 1864.55 3768.95 1896.95 3768.95 1937.75 c
-h
-S
-1983.35 2932.55 320.4 190.8 re
-Y
-1983.35 2940.95 m
-2295.35 3123.35 l
-S
-0 0 6120 7920 re
-Y
-2022.95 2942.15 m
-2022.95 2963.75 2004.95 2981.75 1983.35 2981.75 c
-1960.55 2981.75 1942.55 2963.75 1942.55 2942.15 c
-1942.55 2920.55 1960.55 2902.55 1983.35 2902.55 c
-2004.95 2902.55 2022.95 2920.55 2022.95 2942.15 c
-f*
-2285.75 3062.15 m
-2277.35 3112.55 l
-2237.75 3144.95 l
-2393.75 3179.75 l
-f*
-0.2 i
-2762 3384.14 m
-2762 3302.6 l
-2762 3287.66 2759.88 3285.32 2745.94 3284.42 c
-2745.94 3281 l
-2796.34 3281 l
-2796.34 3284.42 l
-2783.2 3285.32 2781 3287.84 2781 3300.62 c
-2781 3380.54 l
-2781 3393.32 2783.29 3395.66 2796.34 3396.74 c
-2796.34 3400 l
-2760.52 3400 l
-2720.74 3309.26 l
-2679.16 3400 l
-2643.52 3400 l
-2643.52 3397 l
-2658.28 3396.09 2661 3393.89 2661 3380.54 c
-2661 3307.46 l
-2661 3288.92 2658.43 3285.5 2643.16 3284.42 c
-2643.16 3281 l
-2685.46 3281 l
-2685.46 3284 l
-2671.6 3284.73 2669 3288.95 2669 3307.46 c
-2669 3380 l
-2713.72 3281 l
-2716.24 3281 l
-h
-2801.02 3281 m
-f*
-2880.56 3292.88 m
-2877.5 3290.36 2875.34 3289.2 2872.64 3289.2 c
-2868.5 3289.2 2867 3291.78 2867 3299.9 c
-2867 3335 l
-2867 3344.18 2866.16 3349.22 2863.82 3353.36 c
-2860.04 3360.2 2852.3 3363.8 2841.32 3363.8 c
-2832.14 3363.8 2823.5 3361.28 2818.46 3357.14 c
-2813.96 3353.36 2811 3348.14 2811 3343.64 c
-2811 3339.5 2814.46 3335.9 2818.82 3335.9 c
-2823.14 3335.9 2826.92 3339.5 2826.92 3343.46 c
-2826.92 3344.18 2826.74 3345.08 2826.56 3346.34 c
-2826.2 3347.96 2826 3349.4 2826 3350.66 c
-2826 3355.52 2831.77 3359.8 2838.98 3359.8 c
-2847.8 3359.8 2852 3354.47 2852 3344.54 c
-2852 3333.56 l
-2824.76 3322.4 2821.75 3320.96 2814.14 3314.12 c
-2810.18 3310.52 2807.66 3304.4 2807.66 3298.46 c
-2807.66 3287.12 2815.4 3279.2 2826.56 3279.2 c
-2834.48 3279.2 2841.86 3282.98 2852.84 3292.34 c
-2853.74 3282.8 2856.98 3279.2 2864.36 3279.2 c
-2870.48 3279.2 2874.26 3281.36 2880.56 3288.2 c
-h
-2852 3303.14 m
-2852 3297.56 2851.23 3295.94 2847.98 3293.6 c
-2843.66 3291.08 2838.62 3289.2 2834.84 3289.2 c
-2828.54 3289.2 2823.48 3295.51 2823.48 3303.5 c
-2823.48 3304.22 l
-2823.48 3314.84 2830.7 3321.32 2852 3329.24 c
-h
-2880.92 3281 m
-f*
-2882.62 3351.74 m
-2884.24 3351.92 2885.5 3351.92 2887.12 3351.92 c
-2893.24 3351.92 2895 3350.12 2895 3341.66 c
-2895 3257.42 l
-2895 3248.06 2892.94 3246.08 2881.9 3245 c
-2881.9 3242 l
-2925.46 3242 l
-2925.46 3245 l
-2911.96 3245.18 2910 3247.19 2910 3258.68 c
-2910 3286.94 l
-2916.34 3281 2920.4 3279.2 2927.8 3279.2 c
-2949.22 3279.2 2965 3299.36 2965 3325.46 c
-2965 3347.78 2952.65 3363.8 2935.54 3363.8 c
-2925.61 3363.8 2917.8 3359.48 2910 3349.58 c
-2910 3363.44 l
-2908.54 3363.8 l
-2899 3360.02 2892.52 3357.68 2882.62 3354.62 c
-h
-2910 3341.12 m
-2910 3346.52 2919.87 3352.8 2927.98 3352.8 c
-2941.3 3352.8 2950 3339.2 2950 3318.26 c
-2950 3298.46 2941.23 3284.2 2928.34 3284.2 c
-2919.88 3284.2 2910 3291.09 2910 3296.84 c
-h
-2971 3281 m
-f*
-2972.62 3351.74 m
-2974.24 3351.92 2975.5 3351.92 2977.12 3351.92 c
-2983.24 3351.92 2985 3350.12 2985 3341.66 c
-2985 3257.42 l
-2985 3248.06 2982.94 3246.08 2971.9 3245 c
-2971.9 3242 l
-3015.46 3242 l
-3015.46 3245 l
-3001.96 3245.18 3000 3247.19 3000 3258.68 c
-3000 3286.94 l
-3006.34 3281 3010.4 3279.2 3017.8 3279.2 c
-3039.22 3279.2 3055 3299.36 3055 3325.46 c
-3055 3347.78 3042.65 3363.8 3025.54 3363.8 c
-3015.61 3363.8 3007.8 3359.48 3000 3349.58 c
-3000 3363.44 l
-2998.54 3363.8 l
-2989 3360.02 2982.52 3357.68 2972.62 3354.62 c
-h
-3000 3341.12 m
-3000 3346.52 3009.87 3352.8 3017.98 3352.8 c
-3031.3 3352.8 3040 3339.2 3040 3318.26 c
-3040 3298.46 3031.23 3284.2 3018.34 3284.2 c
-3009.88 3284.2 3000 3291.09 3000 3296.84 c
-h
-3061 3281 m
-f*
-3092.5 3363.8 m
-3064.6 3353.9 l
-3064.6 3351.2 l
-3066.04 3351.38 l
-3068.2 3351.74 3070.54 3351.72 3072.16 3351.72 c
-3076.48 3351.72 3078 3348.89 3078 3341.12 c
-3078 3299.36 l
-3078 3286.4 3076.21 3284.42 3063.88 3283.7 c
-3063.88 3281 l
-3106.54 3281 l
-3106.54 3283.7 l
-3094.66 3284.6 3093 3286.4 3093 3299.36 c
-3093 3363.26 l
-h
-3084.22 3404 m
-3079.18 3404 3075 3399.83 3075 3394.76 c
-3075 3389.54 3078.98 3386 3084.04 3386 c
-3089.44 3386 3094 3389.78 3094 3394.76 c
-3094 3399.8 3089.59 3404 3084.22 3404 c
-h
-3111.04 3281 m
-f*
-3113.88 3352.64 m
-3115.14 3353.18 3116.76 3353.36 3118.74 3353.36 c
-3123.78 3353.36 3125 3350.66 3125 3341.84 c
-3125 3297.2 l
-3125 3286.94 3123.09 3284.42 3114.24 3283.7 c
-3114.24 3281 l
-3152.4 3281 l
-3152.4 3283.7 l
-3143.22 3284.42 3140 3286.58 3140 3293.06 c
-3140 3343.64 l
-3148.7 3351.74 3152.95 3353.8 3159.06 3353.8 c
-3167.88 3353.8 3172 3348.25 3172 3336.44 c
-3172 3298.82 l
-3172 3287.48 3169.7 3284.42 3160.86 3283.7 c
-3160.86 3281 l
-3198.3 3281 l
-3198.3 3283.7 l
-3189.48 3284.6 3187 3286.76 3187 3295.58 c
-3187 3336.8 l
-3187 3353.72 3179.2 3363.8 3166.08 3363.8 c
-3157.64 3363.8 3151.94 3360.74 3139.46 3349.22 c
-3139.46 3363.44 l
-3138.72 3363.8 l
-3129.9 3360.56 3123.78 3358.58 3113.88 3355.7 c
-h
-3201 3281 m
-f*
-3285.6 3351 m
-3285.6 3358 l
-3271.74 3358 l
-3268.14 3358 3265.44 3358.5 3261.84 3359.66 c
-3257.88 3361.1 l
-3253.02 3362.9 3248.16 3363.8 3243.48 3363.8 c
-3226.74 3363.8 3213.38 3350.84 3213.38 3334.46 c
-3213.38 3323.12 3218.07 3316.28 3230.16 3310.34 c
-3227.64 3307.82 3225.12 3305.48 3222.42 3303.14 c
-3216.48 3297.92 3214.1 3294.32 3214.1 3290.72 c
-3214.1 3286.76 3216.09 3284.78 3223.68 3281.18 c
-3210.72 3271.82 3206 3265.88 3206 3259.22 c
-3206 3249.68 3219.88 3242 3237.18 3242 c
-3250.14 3242 3263.82 3246.23 3273.18 3253.28 c
-3280.56 3259.04 3284 3264.98 3284 3272.18 c
-3284 3283.34 3275.53 3290.9 3262.2 3291.44 c
-3238.98 3292.52 l
-3229.26 3292.88 3224.94 3294.5 3224.94 3297.38 c
-3224.94 3300.98 3230.88 3307.28 3235.74 3308.72 c
-3239.16 3308.36 l
-3242.4 3308 3244.92 3308 3246 3308 c
-3252.3 3308 3259.32 3310.46 3264.72 3314.84 c
-3271.2 3319.88 3274 3326.36 3274 3335.72 c
-3274 3341 3273.12 3345.18 3270.66 3351 c
-h
-3227.46 3280.64 m
-3233.58 3279.38 3247.8 3278.3 3256.62 3278.3 c
-3273 3278.3 3279 3276.14 3279 3269.48 c
-3279 3259.04 3265.3 3252 3244.74 3252 c
-3228.9 3252 3219 3257.23 3219 3265.16 c
-3219 3269.3 3220.55 3272 3227.46 3280.64 c
-h
-3228.36 3341.84 m
-3228.36 3352.46 3233.4 3358.8 3241.68 3358.8 c
-3247.26 3358.8 3251.94 3355.73 3254.82 3350.3 c
-3258.24 3344 3260 3335.9 3260 3328.52 c
-3260 3318.62 3254.87 3313 3246.9 3313 c
-3235.74 3313 3228.36 3324.43 3228.36 3341.3 c
-h
-3291 3281 m
-f*
-3336 3281 m
-f*
-3463.08 3284.42 m
-3454.98 3284.96 3453.18 3286.76 3446.88 3300.08 c
-3402.06 3402.16 l
-3398.46 3402.16 l
-3361.02 3313.94 l
-3349.5 3287.66 3347.34 3284.96 3338.7 3284.42 c
-3338.7 3281 l
-3374.34 3281 l
-3374.34 3284.82 l
-3365.7 3284.82 3362.1 3287.03 3362.1 3291.8 c
-3362.1 3293.96 3362.64 3296.48 3363.54 3298.82 c
-3371.82 3320 l
-3418.98 3320 l
-3426.36 3302.6 l
-3428.52 3297.56 3429.78 3293.06 3429.78 3290.36 c
-3429.78 3288.74 3428.7 3286.76 3427.26 3286.04 c
-3425.1 3284.78 3423.66 3284.82 3417.18 3284.82 c
-3417.18 3281 l
-3463.08 3281 l
-h
-3374.88 3327 m
-3395.58 3376.76 l
-3416.46 3327 l
-h
-3465.96 3281 m
-f*
-2827 2184.14 m
-2827 2102.6 l
-2827 2087.66 2824.88 2085.32 2810.94 2084.42 c
-2810.94 2081 l
-2861.34 2081 l
-2861.34 2084.42 l
-2848.2 2085.32 2846 2087.84 2846 2100.62 c
-2846 2180.54 l
-2846 2193.32 2848.29 2195.66 2861.34 2196.74 c
-2861.34 2200 l
-2825.52 2200 l
-2785.74 2109.26 l
-2744.16 2200 l
-2708.52 2200 l
-2708.52 2197 l
-2723.28 2196.09 2726 2193.89 2726 2180.54 c
-2726 2107.46 l
-2726 2088.92 2723.43 2085.5 2708.16 2084.42 c
-2708.16 2081 l
-2750.46 2081 l
-2750.46 2084 l
-2736.6 2084.73 2734 2088.95 2734 2107.46 c
-2734 2180 l
-2778.72 2081 l
-2781.24 2081 l
-h
-2866.02 2081 m
-f*
-2946.56 2092.88 m
-2943.5 2090.36 2941.34 2089.2 2938.64 2089.2 c
-2934.5 2089.2 2933 2091.78 2933 2099.9 c
-2933 2135 l
-2933 2144.18 2932.16 2149.22 2929.82 2153.36 c
-2926.04 2160.2 2918.3 2163.8 2907.32 2163.8 c
-2898.14 2163.8 2889.5 2161.28 2884.46 2157.14 c
-2879.96 2153.36 2877 2148.14 2877 2143.64 c
-2877 2139.5 2880.46 2135.9 2884.82 2135.9 c
-2889.14 2135.9 2892.92 2139.5 2892.92 2143.46 c
-2892.92 2144.18 2892.74 2145.08 2892.56 2146.34 c
-2892.2 2147.96 2892 2149.4 2892 2150.66 c
-2892 2155.52 2897.77 2159.8 2904.98 2159.8 c
-2913.8 2159.8 2918 2154.47 2918 2144.54 c
-2918 2133.56 l
-2890.76 2122.4 2887.75 2120.96 2880.14 2114.12 c
-2876.18 2110.52 2873.66 2104.4 2873.66 2098.46 c
-2873.66 2087.12 2881.4 2079.2 2892.56 2079.2 c
-2900.48 2079.2 2907.86 2082.98 2918.84 2092.34 c
-2919.74 2082.8 2922.98 2079.2 2930.36 2079.2 c
-2936.48 2079.2 2940.26 2081.36 2946.56 2088.2 c
-h
-2918 2103.14 m
-2918 2097.56 2917.23 2095.94 2913.98 2093.6 c
-2909.66 2091.08 2904.62 2089.2 2900.84 2089.2 c
-2894.54 2089.2 2889.48 2095.51 2889.48 2103.5 c
-2889.48 2104.22 l
-2889.48 2114.84 2896.7 2121.32 2918 2129.24 c
-h
-2946.92 2081 m
-f*
-2947.62 2151.74 m
-2949.24 2151.92 2950.5 2151.92 2952.12 2151.92 c
-2958.24 2151.92 2960 2150.12 2960 2141.66 c
-2960 2057.42 l
-2960 2048.06 2957.94 2046.08 2946.9 2045 c
-2946.9 2042 l
-2990.46 2042 l
-2990.46 2045 l
-2976.96 2045.18 2975 2047.19 2975 2058.68 c
-2975 2086.94 l
-2981.34 2081 2985.4 2079.2 2992.8 2079.2 c
-3014.22 2079.2 3030 2099.36 3030 2125.46 c
-3030 2147.78 3017.65 2163.8 3000.54 2163.8 c
-2990.61 2163.8 2982.8 2159.48 2975 2149.58 c
-2975 2163.44 l
-2973.54 2163.8 l
-2964 2160.02 2957.52 2157.68 2947.62 2154.62 c
-h
-2975 2141.12 m
-2975 2146.52 2984.87 2152.8 2992.98 2152.8 c
-3006.3 2152.8 3015 2139.2 3015 2118.26 c
-3015 2098.46 3006.23 2084.2 2993.34 2084.2 c
-2984.88 2084.2 2975 2091.09 2975 2096.84 c
-h
-3036 2081 m
-f*
-3037.62 2151.74 m
-3039.24 2151.92 3040.5 2151.92 3042.12 2151.92 c
-3048.24 2151.92 3050 2150.12 3050 2141.66 c
-3050 2057.42 l
-3050 2048.06 3047.94 2046.08 3036.9 2045 c
-3036.9 2042 l
-3080.46 2042 l
-3080.46 2045 l
-3066.96 2045.18 3065 2047.19 3065 2058.68 c
-3065 2086.94 l
-3071.34 2081 3075.4 2079.2 3082.8 2079.2 c
-3104.22 2079.2 3120 2099.36 3120 2125.46 c
-3120 2147.78 3107.65 2163.8 3090.54 2163.8 c
-3080.61 2163.8 3072.8 2159.48 3065 2149.58 c
-3065 2163.44 l
-3063.54 2163.8 l
-3054 2160.02 3047.52 2157.68 3037.62 2154.62 c
-h
-3065 2141.12 m
-3065 2146.52 3074.87 2152.8 3082.98 2152.8 c
-3096.3 2152.8 3105 2139.2 3105 2118.26 c
-3105 2098.46 3096.23 2084.2 3083.34 2084.2 c
-3074.88 2084.2 3065 2091.09 3065 2096.84 c
-h
-3126 2081 m
-f*
-3157.5 2163.8 m
-3129.6 2153.9 l
-3129.6 2151.2 l
-3131.04 2151.38 l
-3133.2 2151.74 3135.54 2151.72 3137.16 2151.72 c
-3141.48 2151.72 3143 2148.89 3143 2141.12 c
-3143 2099.36 l
-3143 2086.4 3141.21 2084.42 3128.88 2083.7 c
-3128.88 2081 l
-3171.54 2081 l
-3171.54 2083.7 l
-3159.66 2084.6 3158 2086.4 3158 2099.36 c
-3158 2163.26 l
-h
-3149.22 2204 m
-3144.18 2204 3140 2199.83 3140 2194.76 c
-3140 2189.54 3143.98 2186 3149.04 2186 c
-3154.44 2186 3159 2189.78 3159 2194.76 c
-3159 2199.8 3154.59 2204 3149.22 2204 c
-h
-3176.04 2081 m
-f*
-3178.88 2152.64 m
-3180.14 2153.18 3181.76 2153.36 3183.74 2153.36 c
-3188.78 2153.36 3190 2150.66 3190 2141.84 c
-3190 2097.2 l
-3190 2086.94 3188.09 2084.42 3179.24 2083.7 c
-3179.24 2081 l
-3217.4 2081 l
-3217.4 2083.7 l
-3208.22 2084.42 3205 2086.58 3205 2093.06 c
-3205 2143.64 l
-3213.7 2151.74 3217.95 2153.8 3224.06 2153.8 c
-3232.88 2153.8 3237 2148.25 3237 2136.44 c
-3237 2098.82 l
-3237 2087.48 3234.7 2084.42 3225.86 2083.7 c
-3225.86 2081 l
-3263.3 2081 l
-3263.3 2083.7 l
-3254.48 2084.6 3252 2086.76 3252 2095.58 c
-3252 2136.8 l
-3252 2153.72 3244.2 2163.8 3231.08 2163.8 c
-3222.64 2163.8 3216.94 2160.74 3204.46 2149.22 c
-3204.46 2163.44 l
-3203.72 2163.8 l
-3194.9 2160.56 3188.78 2158.58 3178.88 2155.7 c
-h
-3266 2081 m
-f*
-3350.6 2151 m
-3350.6 2158 l
-3336.74 2158 l
-3333.14 2158 3330.44 2158.5 3326.84 2159.66 c
-3322.88 2161.1 l
-3318.02 2162.9 3313.16 2163.8 3308.48 2163.8 c
-3291.74 2163.8 3278.38 2150.84 3278.38 2134.46 c
-3278.38 2123.12 3283.07 2116.28 3295.16 2110.34 c
-3292.64 2107.82 3290.12 2105.48 3287.42 2103.14 c
-3281.48 2097.92 3279.1 2094.32 3279.1 2090.72 c
-3279.1 2086.76 3281.09 2084.78 3288.68 2081.18 c
-3275.72 2071.82 3271 2065.88 3271 2059.22 c
-3271 2049.68 3284.88 2042 3302.18 2042 c
-3315.14 2042 3328.82 2046.23 3338.18 2053.28 c
-3345.56 2059.04 3349 2064.98 3349 2072.18 c
-3349 2083.34 3340.53 2090.9 3327.2 2091.44 c
-3303.98 2092.52 l
-3294.26 2092.88 3289.94 2094.5 3289.94 2097.38 c
-3289.94 2100.98 3295.88 2107.28 3300.74 2108.72 c
-3304.16 2108.36 l
-3307.4 2108 3309.92 2108 3311 2108 c
-3317.3 2108 3324.32 2110.46 3329.72 2114.84 c
-3336.2 2119.88 3339 2126.36 3339 2135.72 c
-3339 2141 3338.12 2145.18 3335.66 2151 c
-h
-3292.46 2080.64 m
-3298.58 2079.38 3312.8 2078.3 3321.62 2078.3 c
-3338 2078.3 3344 2076.14 3344 2069.48 c
-3344 2059.04 3330.3 2052 3309.74 2052 c
-3293.9 2052 3284 2057.23 3284 2065.16 c
-3284 2069.3 3285.55 2072 3292.46 2080.64 c
-h
-3293.36 2141.84 m
-3293.36 2152.46 3298.4 2158.8 3306.68 2158.8 c
-3312.26 2158.8 3316.94 2155.73 3319.82 2150.3 c
-3323.24 2144 3325 2135.9 3325 2128.52 c
-3325 2118.62 3319.87 2113 3311.9 2113 c
-3300.74 2113 3293.36 2124.43 3293.36 2141.3 c
-h
-3356 2081 m
-f*
-3401 2081 m
-f*
-3404.06 2200 m
-3404.06 2197 l
-3419.18 2196.09 3421 2194.07 3421 2180.54 c
-3421 2100.62 l
-3421 2087.3 3418.71 2084.96 3404.06 2084.42 c
-3404.06 2081 l
-3464.18 2081 l
-3491 2081 3508 2093.42 3508 2113.4 c
-3508 2121.32 3504.85 2128.52 3498.92 2133.74 c
-3493.52 2138.6 3488.66 2140.94 3476.96 2143.64 c
-3486.32 2145.98 3490.1 2147.78 3494.42 2151.56 c
-3498.92 2155.52 3502 2162.18 3502 2169.56 c
-3502 2189.72 3485.85 2200 3454.46 2200 c
-h
-3440 2139.68 m
-3456.94 2139.68 3464.78 2138.78 3471.56 2136.26 c
-3482 2132.12 3487 2124.74 3487 2113.22 c
-3487 2103.5 3483.23 2096.48 3476.06 2092.34 c
-3470.3 2088.92 3463.1 2088 3450.5 2088 c
-3442.22 2088 3440 2089.55 3440 2095.04 c
-h
-3440 2146.88 m
-3440 2188.1 l
-3440 2191.88 3441.16 2193 3443.66 2193 c
-3451.58 2193 l
-3472.28 2193 3483 2184.71 3483 2168.84 c
-3483 2154.8 3473.55 2146.88 3456.8 2146.88 c
-h
-3521.06 2081 m
-f*
-2825.6 4082 m
-2823.98 4122.52 l
-2820.2 4122.52 l
-2819.12 4118.84 2816.24 4116.58 2812.82 4116.58 c
-2811.02 4116.58 2808.5 4117.17 2805.62 4118.36 c
-2796.8 4121.24 2787.98 4122.52 2779.16 4122.52 c
-2765.3 4122.52 2751.08 4117.36 2740.1 4108.46 c
-2726.42 4097.12 2719 4080.02 2719 4059.5 c
-2719 4022.96 2742.96 3998.48 2778.8 3998.48 c
-2799.14 3998.48 2816.96 4006.76 2827.94 4021.34 c
-2824.7 4024.58 l
-2811.38 4011.8 2799.5 4006.48 2784.56 4006.48 c
-2773.76 4006.48 2764.04 4009.69 2756.48 4015.94 c
-2745.86 4024.76 2740 4040.96 2740 4061.84 c
-2740 4094.42 2756.71 4115.52 2782.76 4115.52 c
-2793.2 4115.52 2802.38 4111.73 2809.58 4104.5 c
-2815.34 4098.74 2818.04 4093.7 2821.46 4082 c
-h
-2834.06 4001 m
-f*
-2837.14 4072.64 m
-2839.48 4073.18 2840.92 4073.36 2842.9 4073.36 c
-2847.58 4073.36 2849 4070.48 2849 4061.84 c
-2849 4016.3 l
-2849 4006.58 2846.52 4003.88 2836.6 4003.7 c
-2836.6 4001 l
-2876.56 4001 l
-2876.56 4004 l
-2867.02 4004.35 2864 4006.27 2864 4013.06 c
-2864 4063.82 l
-2864 4064.18 2865.23 4065.44 2866.66 4066.88 c
-2870.98 4071.2 2879.08 4074.8 2885.74 4074.8 c
-2893.48 4074.8 2898 4068.2 2898 4055.54 c
-2898 4016.48 l
-2898 4006.4 2895.93 4004.42 2885.2 4003.7 c
-2885.2 4001 l
-2925.52 4001 l
-2925.52 4004 l
-2915.26 4004.18 2913 4007.17 2913 4018.1 c
-2913 4063.46 l
-2918.28 4071.2 2923.91 4074.8 2932.18 4074.8 c
-2942.44 4074.8 2946 4069.85 2946 4054.64 c
-2946 4016.66 l
-2946 4006.4 2944.52 4004.96 2933.8 4003.7 c
-2933.8 4001 l
-2973.22 4001 l
-2973.22 4003.7 l
-2968.54 4004.06 l
-2963.14 4004.42 2961 4007.66 2961 4014.68 c
-2961 4051.76 l
-2961 4073 2953.91 4083.8 2939.92 4083.8 c
-2929.48 4083.8 2920.3 4079.12 2910.58 4068.68 c
-2907.34 4078.94 2901.22 4083.8 2891.5 4083.8 c
-2883.31 4083.8 2878.57 4081.46 2863.28 4069.94 c
-2863.28 4083.44 l
-2862.34 4083.8 l
-2853.16 4080.38 2847.04 4078.4 2837.14 4075.7 c
-h
-2974.04 4001 m
-f*
-2974.62 4071.74 m
-2976.24 4071.92 2977.5 4071.92 2979.12 4071.92 c
-2985.24 4071.92 2987 4070.12 2987 4061.66 c
-2987 3977.42 l
-2987 3968.06 2984.94 3966.08 2973.9 3965 c
-2973.9 3962 l
-3017.46 3962 l
-3017.46 3965 l
-3003.96 3965.18 3002 3967.19 3002 3978.68 c
-3002 4006.94 l
-3008.34 4001 3012.4 3999.2 3019.8 3999.2 c
-3041.22 3999.2 3057 4019.36 3057 4045.46 c
-3057 4067.78 3044.65 4083.8 3027.54 4083.8 c
-3017.61 4083.8 3009.8 4079.48 3002 4069.58 c
-3002 4083.44 l
-3000.54 4083.8 l
-2991 4080.02 2984.52 4077.68 2974.62 4074.62 c
-h
-3002 4061.12 m
-3002 4066.52 3011.87 4072.8 3019.98 4072.8 c
-3033.3 4072.8 3042 4059.2 3042 4038.26 c
-3042 4018.46 3033.23 4004.2 3020.34 4004.2 c
-3011.88 4004.2 3002 4011.09 3002 4016.84 c
-h
-3063 4001 m
-f*
-3184 4104.14 m
-3184 4022.6 l
-3184 4007.66 3181.88 4005.32 3167.94 4004.42 c
-3167.94 4001 l
-3218.34 4001 l
-3218.34 4004.42 l
-3205.2 4005.32 3203 4007.84 3203 4020.62 c
-3203 4100.54 l
-3203 4113.32 3205.29 4115.66 3218.34 4116.74 c
-3218.34 4120 l
-3182.52 4120 l
-3142.74 4029.26 l
-3101.16 4120 l
-3065.52 4120 l
-3065.52 4117 l
-3080.28 4116.09 3083 4113.89 3083 4100.54 c
-3083 4027.46 l
-3083 4008.92 3080.43 4005.5 3065.16 4004.42 c
-3065.16 4001 l
-3107.46 4001 l
-3107.46 4004 l
-3093.6 4004.73 3091 4008.95 3091 4027.46 c
-3091 4100 l
-3135.72 4001 l
-3138.24 4001 l
-h
-3223.02 4001 m
-f*
-3303.56 4012.88 m
-3300.5 4010.36 3298.34 4009.2 3295.64 4009.2 c
-3291.5 4009.2 3290 4011.78 3290 4019.9 c
-3290 4055 l
-3290 4064.18 3289.16 4069.22 3286.82 4073.36 c
-3283.04 4080.2 3275.3 4083.8 3264.32 4083.8 c
-3255.14 4083.8 3246.5 4081.28 3241.46 4077.14 c
-3236.96 4073.36 3234 4068.14 3234 4063.64 c
-3234 4059.5 3237.46 4055.9 3241.82 4055.9 c
-3246.14 4055.9 3249.92 4059.5 3249.92 4063.46 c
-3249.92 4064.18 3249.74 4065.08 3249.56 4066.34 c
-3249.2 4067.96 3249 4069.4 3249 4070.66 c
-3249 4075.52 3254.77 4079.8 3261.98 4079.8 c
-3270.8 4079.8 3275 4074.47 3275 4064.54 c
-3275 4053.56 l
-3247.76 4042.4 3244.75 4040.96 3237.14 4034.12 c
-3233.18 4030.52 3230.66 4024.4 3230.66 4018.46 c
-3230.66 4007.12 3238.4 3999.2 3249.56 3999.2 c
-3257.48 3999.2 3264.86 4002.98 3275.84 4012.34 c
-3276.74 4002.8 3279.98 3999.2 3287.36 3999.2 c
-3293.48 3999.2 3297.26 4001.36 3303.56 4008.2 c
-h
-3275 4023.14 m
-3275 4017.56 3274.23 4015.94 3270.98 4013.6 c
-3266.66 4011.08 3261.62 4009.2 3257.84 4009.2 c
-3251.54 4009.2 3246.48 4015.51 3246.48 4023.5 c
-3246.48 4024.22 l
-3246.48 4034.84 3253.7 4041.32 3275 4049.24 c
-h
-3303.92 4001 m
-f*
-3304.62 4071.74 m
-3306.24 4071.92 3307.5 4071.92 3309.12 4071.92 c
-3315.24 4071.92 3317 4070.12 3317 4061.66 c
-3317 3977.42 l
-3317 3968.06 3314.94 3966.08 3303.9 3965 c
-3303.9 3962 l
-3347.46 3962 l
-3347.46 3965 l
-3333.96 3965.18 3332 3967.19 3332 3978.68 c
-3332 4006.94 l
-3338.34 4001 3342.4 3999.2 3349.8 3999.2 c
-3371.22 3999.2 3387 4019.36 3387 4045.46 c
-3387 4067.78 3374.65 4083.8 3357.54 4083.8 c
-3347.61 4083.8 3339.8 4079.48 3332 4069.58 c
-3332 4083.44 l
-3330.54 4083.8 l
-3321 4080.02 3314.52 4077.68 3304.62 4074.62 c
-h
-3332 4061.12 m
-3332 4066.52 3341.87 4072.8 3349.98 4072.8 c
-3363.3 4072.8 3372 4059.2 3372 4038.26 c
-3372 4018.46 3363.23 4004.2 3350.34 4004.2 c
-3341.88 4004.2 3332 4011.09 3332 4016.84 c
-h
-3393 4001 m
-f*
-1 i
-3773.75 3382.55 330 104.4 re
-Y
-3773.75 3479.75 m
-4095.35 3390.95 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3480.95 m
-3812.15 3502.55 3794.15 3520.55 3772.55 3520.55 c
-3750.95 3520.55 3732.95 3502.55 3732.95 3480.95 c
-3732.95 3459.35 3750.95 3441.35 3772.55 3441.35 c
-3794.15 3441.35 3812.15 3459.35 3812.15 3480.95 c
-f*
-4046.15 3354.95 m
-4077.35 3395.75 l
-4071.35 3447.35 l
-4205.75 3360.95 l
-f*
-3773.75 2988.95 339.6 190.8 re
-Y
-3773.75 3179.75 m
-4104.95 2997.35 l
-S
-0 0 6120 7920 re
-Y
-3812.15 3180.95 m
-3812.15 3202.55 3794.15 3220.55 3772.55 3220.55 c
-3750.95 3220.55 3732.95 3202.55 3732.95 3180.95 c
-3732.95 3159.35 3750.95 3141.35 3772.55 3141.35 c
-3794.15 3141.35 3812.15 3159.35 3812.15 3180.95 c
-f*
-4049.75 2973.35 m
-4088.15 3005.75 l
-4096.55 3056.15 l
-4205.75 2940.95 l
-f*
-1973.75 2225.75 342 294 re
-Y
-1973.75 2519.75 m
-2307.35 2234.15 l
-S
-0 0 6120 7920 re
-Y
-2012.15 2520.95 m
-2012.15 2542.55 1994.15 2560.55 1972.55 2560.55 c
-1950.95 2560.55 1932.95 2542.55 1932.95 2520.95 c
-1932.95 2499.35 1950.95 2481.35 1972.55 2481.35 c
-1994.15 2481.35 2012.15 2499.35 2012.15 2520.95 c
-f*
-2247.35 2223.35 m
-2291.75 2247.35 l
-2308.55 2294.15 l
-2393.75 2159.75 l
-f*
-3773.75 2151.35 342 295.2 re
-Y
-3773.75 2159.75 m
-4107.35 2446.55 l
-S
-0 0 6120 7920 re
-Y
-3812.15 2160.95 m
-3812.15 2182.55 3794.15 2200.55 3772.55 2200.55 c
-3750.95 2200.55 3732.95 2182.55 3732.95 2160.95 c
-3732.95 2139.35 3750.95 2121.35 3772.55 2121.35 c
-3794.15 2121.35 3812.15 2139.35 3812.15 2160.95 c
-f*
-4108.55 2384.15 m
-4091.75 2432.15 l
-4047.35 2456.15 l
-4193.75 2519.75 l
-f*
-4203.35 3352.55 319.2 15.5999 re
-Y
-4200.95 3360.95 m
-4515.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 3362.15 m
-4242.95 3383.75 4224.95 3401.75 4203.35 3401.75 c
-4180.55 3401.75 4162.55 3383.75 4162.55 3362.15 c
-4162.55 3340.55 4180.55 3322.55 4203.35 3322.55 c
-4224.95 3322.55 4242.95 3340.55 4242.95 3362.15 c
-f*
-4473.35 3312.95 m
-4492.55 3360.95 l
-4473.35 3408.95 l
-4625.75 3360.95 l
-f*
-4203.35 2932.55 319.2 15.5999 re
-Y
-4200.95 2940.95 m
-4515.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2942.15 m
-4242.95 2963.75 4224.95 2981.75 4203.35 2981.75 c
-4180.55 2981.75 4162.55 2963.75 4162.55 2942.15 c
-4162.55 2920.55 4180.55 2902.55 4203.35 2902.55 c
-4224.95 2902.55 4242.95 2920.55 4242.95 2942.15 c
-f*
-4473.35 2892.95 m
-4492.55 2940.95 l
-4473.35 2988.95 l
-4625.75 2940.95 l
-f*
-4203.35 2512.55 319.2 15.5999 re
-Y
-4200.95 2520.95 m
-4515.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-4242.95 2522.15 m
-4242.95 2543.75 4224.95 2561.75 4203.35 2561.75 c
-4180.55 2561.75 4162.55 2543.75 4162.55 2522.15 c
-4162.55 2500.55 4180.55 2482.55 4203.35 2482.55 c
-4224.95 2482.55 4242.95 2500.55 4242.95 2522.15 c
-f*
-4473.35 2472.95 m
-4492.55 2520.95 l
-4473.35 2568.95 l
-4625.75 2520.95 l
-f*
-1563.35 3352.55 319.2 15.5999 re
-Y
-1560.95 3360.95 m
-1875.35 3360.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 3362.15 m
-1602.95 3383.75 1584.95 3401.75 1563.35 3401.75 c
-1540.55 3401.75 1522.55 3383.75 1522.55 3362.15 c
-1522.55 3340.55 1540.55 3322.55 1563.35 3322.55 c
-1584.95 3322.55 1602.95 3340.55 1602.95 3362.15 c
-f*
-1833.35 3312.95 m
-1852.55 3360.95 l
-1833.35 3408.95 l
-1985.75 3360.95 l
-f*
-1563.35 2932.55 319.2 15.5999 re
-Y
-1560.95 2940.95 m
-1875.35 2940.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2942.15 m
-1602.95 2963.75 1584.95 2981.75 1563.35 2981.75 c
-1540.55 2981.75 1522.55 2963.75 1522.55 2942.15 c
-1522.55 2920.55 1540.55 2902.55 1563.35 2902.55 c
-1584.95 2902.55 1602.95 2920.55 1602.95 2942.15 c
-f*
-1833.35 2892.95 m
-1852.55 2940.95 l
-1833.35 2988.95 l
-1985.75 2940.95 l
-f*
-1563.35 2512.55 319.2 15.5999 re
-Y
-1560.95 2520.95 m
-1875.35 2520.95 l
-S
-0 0 6120 7920 re
-Y
-1602.95 2522.15 m
-1602.95 2543.75 1584.95 2561.75 1563.35 2561.75 c
-1540.55 2561.75 1522.55 2543.75 1522.55 2522.15 c
-1522.55 2500.55 1540.55 2482.55 1563.35 2482.55 c
-1584.95 2482.55 1602.95 2500.55 1602.95 2522.15 c
-f*
-1833.35 2472.95 m
-1852.55 2520.95 l
-1833.35 2568.95 l
-1985.75 2520.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/series.eps b/ast-5.3-1/sun211_figures/series.eps
deleted file mode 100644
index be928fc..0000000
--- a/ast-5.3-1/sun211_figures/series.eps
+++ /dev/null
@@ -1,970 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 44 119 541 306
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/12 16:38:48
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-5033.75 2775.35 m
-5033.75 2900.15 4932.95 3000.95 4808.15 3000.95 c
-1178.15 3000.95 l
-1053.35 3000.95 952.55 2900.15 952.55 2775.35 c
-952.55 1425.35 l
-952.55 1300.55 1053.35 1199.75 1178.15 1199.75 c
-4808.15 1199.75 l
-4932.95 1199.75 5033.75 1300.55 5033.75 1425.35 c
-f*
-1 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-f*
-8 w
-1 J
-1 j
-0 g
-4968.95 2831.75 m
-4968.95 2955.35 4869.35 3054.95 4744.55 3054.95 c
-1122.95 3054.95 l
-998.15 3054.95 898.55 2955.35 898.55 2831.75 c
-898.55 1487.75 l
-898.55 1364.15 998.15 1264.55 1122.95 1264.55 c
-4744.55 1264.55 l
-4869.35 1264.55 4968.95 1364.15 4968.95 1487.75 c
-h
-S
-903.35 2212.55 319.2 15.5999 re
-Y
-900.95 2220.95 m
-1215.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 2222.15 m
-942.95 2243.75 924.95 2261.75 903.35 2261.75 c
-880.55 2261.75 862.55 2243.75 862.55 2222.15 c
-862.55 2200.55 880.55 2182.55 903.35 2182.55 c
-924.95 2182.55 942.95 2200.55 942.95 2222.15 c
-f*
-1173.35 2172.95 m
-1192.55 2220.95 l
-1173.35 2268.95 l
-1325.75 2220.95 l
-f*
-0.564706 g
-2793.35 2331.35 m
-2793.35 2402.15 2735.75 2460.95 2663.75 2460.95 c
-1524.95 2460.95 l
-1452.95 2460.95 1395.35 2402.15 1395.35 2331.35 c
-1395.35 1552.55 l
-1395.35 1480.55 1452.95 1422.95 1524.95 1422.95 c
-2663.75 1422.95 l
-2735.75 1422.95 2793.35 1480.55 2793.35 1552.55 c
-f*
-1 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-f*
-0 g
-2728.55 2386.55 m
-2728.55 2457.35 2672.15 2514.95 2600.15 2514.95 c
-1469.75 2514.95 l
-1398.95 2514.95 1341.35 2457.35 1341.35 2386.55 c
-1341.35 1614.95 l
-1341.35 1545.35 1398.95 1487.75 1469.75 1487.75 c
-2600.15 1487.75 l
-2670.95 1487.75 2728.55 1545.35 2728.55 1614.95 c
-h
-S
-0.564706 g
-4624.55 2327.75 m
-4624.55 2400.95 4564.55 2460.95 4491.35 2460.95 c
-3359.75 2460.95 l
-3286.55 2460.95 3226.55 2400.95 3226.55 2327.75 c
-3226.55 1527.35 l
-3226.55 1454.15 3286.55 1394.15 3359.75 1394.15 c
-4491.35 1394.15 l
-4564.55 1394.15 4624.55 1454.15 4624.55 1527.35 c
-f*
-1 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-f*
-0 g
-4559.75 2382.95 m
-4559.75 2456.15 4500.95 2514.95 4427.75 2514.95 c
-3304.55 2514.95 l
-3231.35 2514.95 3172.55 2456.15 3172.55 2382.95 c
-3172.55 1590.95 l
-3172.55 1517.75 3231.35 1458.95 3304.55 1458.95 c
-4427.75 1458.95 l
-4500.95 1458.95 4559.75 1517.75 4559.75 1590.95 c
-h
-S
-903.35 1792.55 319.2 15.5999 re
-Y
-900.95 1800.95 m
-1215.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-942.95 1802.15 m
-942.95 1823.75 924.95 1841.75 903.35 1841.75 c
-880.55 1841.75 862.55 1823.75 862.55 1802.15 c
-862.55 1780.55 880.55 1762.55 903.35 1762.55 c
-924.95 1762.55 942.95 1780.55 942.95 1802.15 c
-f*
-1173.35 1752.95 m
-1192.55 1800.95 l
-1173.35 1848.95 l
-1325.75 1800.95 l
-f*
-2724.95 2272.55 340.8 15.5999 re
-Y
-2722.55 2280.95 m
-3058.55 2280.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 2282.15 m
-2763.35 2303.75 2745.35 2321.75 2723.75 2321.75 c
-2702.15 2321.75 2684.15 2303.75 2684.15 2282.15 c
-2684.15 2260.55 2702.15 2242.55 2723.75 2242.55 c
-2745.35 2242.55 2763.35 2260.55 2763.35 2282.15 c
-f*
-3017.75 2232.95 m
-3035.75 2280.95 l
-3017.75 2328.95 l
-3170.15 2280.95 l
-f*
-2724.95 1672.55 339.6 15.5999 re
-Y
-2722.55 1680.95 m
-3057.35 1680.95 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1682.15 m
-2763.35 1703.75 2745.35 1721.75 2723.75 1721.75 c
-2702.15 1721.75 2684.15 1703.75 2684.15 1682.15 c
-2684.15 1660.55 2702.15 1642.55 2723.75 1642.55 c
-2745.35 1642.55 2763.35 1660.55 2763.35 1682.15 c
-f*
-3016.55 1632.95 m
-3034.55 1680.95 l
-3016.55 1728.95 l
-3168.95 1680.95 l
-f*
-2724.95 1974.95 340.8 15.5999 re
-Y
-2722.55 1983.35 m
-3058.55 1983.35 l
-S
-0 0 6120 7920 re
-Y
-2763.35 1984.55 m
-2763.35 2006.15 2745.35 2024.15 2723.75 2024.15 c
-2702.15 2024.15 2684.15 2006.15 2684.15 1984.55 c
-2684.15 1962.95 2702.15 1944.95 2723.75 1944.95 c
-2745.35 1944.95 2763.35 1962.95 2763.35 1984.55 c
-f*
-3017.75 1936.55 m
-3035.75 1983.35 l
-3017.75 2031.35 l
-3170.15 1983.35 l
-f*
-4558.55 2216.15 304.8 15.5999 re
-Y
-4556.15 2224.55 m
-4856.15 2224.55 l
-S
-0 0 6120 7920 re
-Y
-4596.95 2225.75 m
-4596.95 2247.35 4578.95 2265.35 4557.35 2265.35 c
-4535.75 2265.35 4517.75 2247.35 4517.75 2225.75 c
-4517.75 2204.15 4535.75 2186.15 4557.35 2186.15 c
-4578.95 2186.15 4596.95 2204.15 4596.95 2225.75 c
-f*
-4816.55 2177.75 m
-4834.55 2224.55 l
-4816.55 2272.55 l
-4968.95 2224.55 l
-f*
-4558.55 1791.35 304.8 15.5999 re
-Y
-4556.15 1799.75 m
-4856.15 1799.75 l
-S
-0 0 6120 7920 re
-Y
-4596.95 1800.95 m
-4596.95 1822.55 4578.95 1840.55 4557.35 1840.55 c
-4535.75 1840.55 4517.75 1822.55 4517.75 1800.95 c
-4517.75 1779.35 4535.75 1761.35 4557.35 1761.35 c
-4578.95 1761.35 4596.95 1779.35 4596.95 1800.95 c
-f*
-4816.55 1751.75 m
-4834.55 1799.75 l
-4816.55 1847.75 l
-4968.95 1799.75 l
-f*
-0.2 i
-1742 2064.14 m
-1742 1982.6 l
-1742 1967.66 1739.88 1965.32 1725.94 1964.42 c
-1725.94 1961 l
-1776.34 1961 l
-1776.34 1964.42 l
-1763.2 1965.32 1761 1967.84 1761 1980.62 c
-1761 2060.54 l
-1761 2073.32 1763.29 2075.66 1776.34 2076.74 c
-1776.34 2080 l
-1740.52 2080 l
-1700.74 1989.26 l
-1659.16 2080 l
-1623.52 2080 l
-1623.52 2077 l
-1638.28 2076.09 1641 2073.89 1641 2060.54 c
-1641 1987.46 l
-1641 1968.92 1638.43 1965.5 1623.16 1964.42 c
-1623.16 1961 l
-1665.46 1961 l
-1665.46 1964 l
-1651.6 1964.73 1649 1968.95 1649 1987.46 c
-1649 2060 l
-1693.72 1961 l
-1696.24 1961 l
-h
-1781.02 1961 m
-f*
-1860.56 1972.88 m
-1857.5 1970.36 1855.34 1969.2 1852.64 1969.2 c
-1848.5 1969.2 1847 1971.78 1847 1979.9 c
-1847 2015 l
-1847 2024.18 1846.16 2029.22 1843.82 2033.36 c
-1840.04 2040.2 1832.3 2043.8 1821.32 2043.8 c
-1812.14 2043.8 1803.5 2041.28 1798.46 2037.14 c
-1793.96 2033.36 1791 2028.14 1791 2023.64 c
-1791 2019.5 1794.46 2015.9 1798.82 2015.9 c
-1803.14 2015.9 1806.92 2019.5 1806.92 2023.46 c
-1806.92 2024.18 1806.74 2025.08 1806.56 2026.34 c
-1806.2 2027.96 1806 2029.4 1806 2030.66 c
-1806 2035.52 1811.77 2039.8 1818.98 2039.8 c
-1827.8 2039.8 1832 2034.47 1832 2024.54 c
-1832 2013.56 l
-1804.76 2002.4 1801.75 2000.96 1794.14 1994.12 c
-1790.18 1990.52 1787.66 1984.4 1787.66 1978.46 c
-1787.66 1967.12 1795.4 1959.2 1806.56 1959.2 c
-1814.48 1959.2 1821.86 1962.98 1832.84 1972.34 c
-1833.74 1962.8 1836.98 1959.2 1844.36 1959.2 c
-1850.48 1959.2 1854.26 1961.36 1860.56 1968.2 c
-h
-1832 1983.14 m
-1832 1977.56 1831.23 1975.94 1827.98 1973.6 c
-1823.66 1971.08 1818.62 1969.2 1814.84 1969.2 c
-1808.54 1969.2 1803.48 1975.51 1803.48 1983.5 c
-1803.48 1984.22 l
-1803.48 1994.84 1810.7 2001.32 1832 2009.24 c
-h
-1860.92 1961 m
-f*
-1862.62 2031.74 m
-1864.24 2031.92 1865.5 2031.92 1867.12 2031.92 c
-1873.24 2031.92 1875 2030.12 1875 2021.66 c
-1875 1937.42 l
-1875 1928.06 1872.94 1926.08 1861.9 1925 c
-1861.9 1922 l
-1905.46 1922 l
-1905.46 1925 l
-1891.96 1925.18 1890 1927.19 1890 1938.68 c
-1890 1966.94 l
-1896.34 1961 1900.4 1959.2 1907.8 1959.2 c
-1929.22 1959.2 1945 1979.36 1945 2005.46 c
-1945 2027.78 1932.65 2043.8 1915.54 2043.8 c
-1905.61 2043.8 1897.8 2039.48 1890 2029.58 c
-1890 2043.44 l
-1888.54 2043.8 l
-1879 2040.02 1872.52 2037.68 1862.62 2034.62 c
-h
-1890 2021.12 m
-1890 2026.52 1899.87 2032.8 1907.98 2032.8 c
-1921.3 2032.8 1930 2019.2 1930 1998.26 c
-1930 1978.46 1921.23 1964.2 1908.34 1964.2 c
-1899.88 1964.2 1890 1971.09 1890 1976.84 c
-h
-1951 1961 m
-f*
-1952.62 2031.74 m
-1954.24 2031.92 1955.5 2031.92 1957.12 2031.92 c
-1963.24 2031.92 1965 2030.12 1965 2021.66 c
-1965 1937.42 l
-1965 1928.06 1962.94 1926.08 1951.9 1925 c
-1951.9 1922 l
-1995.46 1922 l
-1995.46 1925 l
-1981.96 1925.18 1980 1927.19 1980 1938.68 c
-1980 1966.94 l
-1986.34 1961 1990.4 1959.2 1997.8 1959.2 c
-2019.22 1959.2 2035 1979.36 2035 2005.46 c
-2035 2027.78 2022.65 2043.8 2005.54 2043.8 c
-1995.61 2043.8 1987.8 2039.48 1980 2029.58 c
-1980 2043.44 l
-1978.54 2043.8 l
-1969 2040.02 1962.52 2037.68 1952.62 2034.62 c
-h
-1980 2021.12 m
-1980 2026.52 1989.87 2032.8 1997.98 2032.8 c
-2011.3 2032.8 2020 2019.2 2020 1998.26 c
-2020 1978.46 2011.23 1964.2 1998.34 1964.2 c
-1989.88 1964.2 1980 1971.09 1980 1976.84 c
-h
-2041 1961 m
-f*
-2072.5 2043.8 m
-2044.6 2033.9 l
-2044.6 2031.2 l
-2046.04 2031.38 l
-2048.2 2031.74 2050.54 2031.72 2052.16 2031.72 c
-2056.48 2031.72 2058 2028.89 2058 2021.12 c
-2058 1979.36 l
-2058 1966.4 2056.21 1964.42 2043.88 1963.7 c
-2043.88 1961 l
-2086.54 1961 l
-2086.54 1963.7 l
-2074.66 1964.6 2073 1966.4 2073 1979.36 c
-2073 2043.26 l
-h
-2064.22 2084 m
-2059.18 2084 2055 2079.83 2055 2074.76 c
-2055 2069.54 2058.98 2066 2064.04 2066 c
-2069.44 2066 2074 2069.78 2074 2074.76 c
-2074 2079.8 2069.59 2084 2064.22 2084 c
-h
-2091.04 1961 m
-f*
-2093.88 2032.64 m
-2095.14 2033.18 2096.76 2033.36 2098.74 2033.36 c
-2103.78 2033.36 2105 2030.66 2105 2021.84 c
-2105 1977.2 l
-2105 1966.94 2103.09 1964.42 2094.24 1963.7 c
-2094.24 1961 l
-2132.4 1961 l
-2132.4 1963.7 l
-2123.22 1964.42 2120 1966.58 2120 1973.06 c
-2120 2023.64 l
-2128.7 2031.74 2132.95 2033.8 2139.06 2033.8 c
-2147.88 2033.8 2152 2028.25 2152 2016.44 c
-2152 1978.82 l
-2152 1967.48 2149.7 1964.42 2140.86 1963.7 c
-2140.86 1961 l
-2178.3 1961 l
-2178.3 1963.7 l
-2169.48 1964.6 2167 1966.76 2167 1975.58 c
-2167 2016.8 l
-2167 2033.72 2159.2 2043.8 2146.08 2043.8 c
-2137.64 2043.8 2131.94 2040.74 2119.46 2029.22 c
-2119.46 2043.44 l
-2118.72 2043.8 l
-2109.9 2040.56 2103.78 2038.58 2093.88 2035.7 c
-h
-2181 1961 m
-f*
-2265.6 2031 m
-2265.6 2038 l
-2251.74 2038 l
-2248.14 2038 2245.44 2038.5 2241.84 2039.66 c
-2237.88 2041.1 l
-2233.02 2042.9 2228.16 2043.8 2223.48 2043.8 c
-2206.74 2043.8 2193.38 2030.84 2193.38 2014.46 c
-2193.38 2003.12 2198.07 1996.28 2210.16 1990.34 c
-2207.64 1987.82 2205.12 1985.48 2202.42 1983.14 c
-2196.48 1977.92 2194.1 1974.32 2194.1 1970.72 c
-2194.1 1966.76 2196.09 1964.78 2203.68 1961.18 c
-2190.72 1951.82 2186 1945.88 2186 1939.22 c
-2186 1929.68 2199.88 1922 2217.18 1922 c
-2230.14 1922 2243.82 1926.23 2253.18 1933.28 c
-2260.56 1939.04 2264 1944.98 2264 1952.18 c
-2264 1963.34 2255.53 1970.9 2242.2 1971.44 c
-2218.98 1972.52 l
-2209.26 1972.88 2204.94 1974.5 2204.94 1977.38 c
-2204.94 1980.98 2210.88 1987.28 2215.74 1988.72 c
-2219.16 1988.36 l
-2222.4 1988 2224.92 1988 2226 1988 c
-2232.3 1988 2239.32 1990.46 2244.72 1994.84 c
-2251.2 1999.88 2254 2006.36 2254 2015.72 c
-2254 2021 2253.12 2025.18 2250.66 2031 c
-h
-2207.46 1960.64 m
-2213.58 1959.38 2227.8 1958.3 2236.62 1958.3 c
-2253 1958.3 2259 1956.14 2259 1949.48 c
-2259 1939.04 2245.3 1932 2224.74 1932 c
-2208.9 1932 2199 1937.23 2199 1945.16 c
-2199 1949.3 2200.55 1952 2207.46 1960.64 c
-h
-2208.36 2021.84 m
-2208.36 2032.46 2213.4 2038.8 2221.68 2038.8 c
-2227.26 2038.8 2231.94 2035.73 2234.82 2030.3 c
-2238.24 2024 2240 2015.9 2240 2008.52 c
-2240 1998.62 2234.87 1993 2226.9 1993 c
-2215.74 1993 2208.36 2004.43 2208.36 2021.3 c
-h
-2271 1961 m
-f*
-2316 1961 m
-f*
-2443.08 1964.42 m
-2434.98 1964.96 2433.18 1966.76 2426.88 1980.08 c
-2382.06 2082.16 l
-2378.46 2082.16 l
-2341.02 1993.94 l
-2329.5 1967.66 2327.34 1964.96 2318.7 1964.42 c
-2318.7 1961 l
-2354.34 1961 l
-2354.34 1964.82 l
-2345.7 1964.82 2342.1 1967.03 2342.1 1971.8 c
-2342.1 1973.96 2342.64 1976.48 2343.54 1978.82 c
-2351.82 2000 l
-2398.98 2000 l
-2406.36 1982.6 l
-2408.52 1977.56 2409.78 1973.06 2409.78 1970.36 c
-2409.78 1968.74 2408.7 1966.76 2407.26 1966.04 c
-2405.1 1964.78 2403.66 1964.82 2397.18 1964.82 c
-2397.18 1961 l
-2443.08 1961 l
-h
-2354.88 2007 m
-2375.58 2056.76 l
-2396.46 2007 l
-h
-2445.96 1961 m
-f*
-3607 2064.14 m
-3607 1982.6 l
-3607 1967.66 3604.88 1965.32 3590.94 1964.42 c
-3590.94 1961 l
-3641.34 1961 l
-3641.34 1964.42 l
-3628.2 1965.32 3626 1967.84 3626 1980.62 c
-3626 2060.54 l
-3626 2073.32 3628.29 2075.66 3641.34 2076.74 c
-3641.34 2080 l
-3605.52 2080 l
-3565.74 1989.26 l
-3524.16 2080 l
-3488.52 2080 l
-3488.52 2077 l
-3503.28 2076.09 3506 2073.89 3506 2060.54 c
-3506 1987.46 l
-3506 1968.92 3503.43 1965.5 3488.16 1964.42 c
-3488.16 1961 l
-3530.46 1961 l
-3530.46 1964 l
-3516.6 1964.73 3514 1968.95 3514 1987.46 c
-3514 2060 l
-3558.72 1961 l
-3561.24 1961 l
-h
-3646.02 1961 m
-f*
-3726.56 1972.88 m
-3723.5 1970.36 3721.34 1969.2 3718.64 1969.2 c
-3714.5 1969.2 3713 1971.78 3713 1979.9 c
-3713 2015 l
-3713 2024.18 3712.16 2029.22 3709.82 2033.36 c
-3706.04 2040.2 3698.3 2043.8 3687.32 2043.8 c
-3678.14 2043.8 3669.5 2041.28 3664.46 2037.14 c
-3659.96 2033.36 3657 2028.14 3657 2023.64 c
-3657 2019.5 3660.46 2015.9 3664.82 2015.9 c
-3669.14 2015.9 3672.92 2019.5 3672.92 2023.46 c
-3672.92 2024.18 3672.74 2025.08 3672.56 2026.34 c
-3672.2 2027.96 3672 2029.4 3672 2030.66 c
-3672 2035.52 3677.77 2039.8 3684.98 2039.8 c
-3693.8 2039.8 3698 2034.47 3698 2024.54 c
-3698 2013.56 l
-3670.76 2002.4 3667.75 2000.96 3660.14 1994.12 c
-3656.18 1990.52 3653.66 1984.4 3653.66 1978.46 c
-3653.66 1967.12 3661.4 1959.2 3672.56 1959.2 c
-3680.48 1959.2 3687.86 1962.98 3698.84 1972.34 c
-3699.74 1962.8 3702.98 1959.2 3710.36 1959.2 c
-3716.48 1959.2 3720.26 1961.36 3726.56 1968.2 c
-h
-3698 1983.14 m
-3698 1977.56 3697.23 1975.94 3693.98 1973.6 c
-3689.66 1971.08 3684.62 1969.2 3680.84 1969.2 c
-3674.54 1969.2 3669.48 1975.51 3669.48 1983.5 c
-3669.48 1984.22 l
-3669.48 1994.84 3676.7 2001.32 3698 2009.24 c
-h
-3726.92 1961 m
-f*
-3727.62 2031.74 m
-3729.24 2031.92 3730.5 2031.92 3732.12 2031.92 c
-3738.24 2031.92 3740 2030.12 3740 2021.66 c
-3740 1937.42 l
-3740 1928.06 3737.94 1926.08 3726.9 1925 c
-3726.9 1922 l
-3770.46 1922 l
-3770.46 1925 l
-3756.96 1925.18 3755 1927.19 3755 1938.68 c
-3755 1966.94 l
-3761.34 1961 3765.4 1959.2 3772.8 1959.2 c
-3794.22 1959.2 3810 1979.36 3810 2005.46 c
-3810 2027.78 3797.65 2043.8 3780.54 2043.8 c
-3770.61 2043.8 3762.8 2039.48 3755 2029.58 c
-3755 2043.44 l
-3753.54 2043.8 l
-3744 2040.02 3737.52 2037.68 3727.62 2034.62 c
-h
-3755 2021.12 m
-3755 2026.52 3764.87 2032.8 3772.98 2032.8 c
-3786.3 2032.8 3795 2019.2 3795 1998.26 c
-3795 1978.46 3786.23 1964.2 3773.34 1964.2 c
-3764.88 1964.2 3755 1971.09 3755 1976.84 c
-h
-3816 1961 m
-f*
-3817.62 2031.74 m
-3819.24 2031.92 3820.5 2031.92 3822.12 2031.92 c
-3828.24 2031.92 3830 2030.12 3830 2021.66 c
-3830 1937.42 l
-3830 1928.06 3827.94 1926.08 3816.9 1925 c
-3816.9 1922 l
-3860.46 1922 l
-3860.46 1925 l
-3846.96 1925.18 3845 1927.19 3845 1938.68 c
-3845 1966.94 l
-3851.34 1961 3855.4 1959.2 3862.8 1959.2 c
-3884.22 1959.2 3900 1979.36 3900 2005.46 c
-3900 2027.78 3887.65 2043.8 3870.54 2043.8 c
-3860.61 2043.8 3852.8 2039.48 3845 2029.58 c
-3845 2043.44 l
-3843.54 2043.8 l
-3834 2040.02 3827.52 2037.68 3817.62 2034.62 c
-h
-3845 2021.12 m
-3845 2026.52 3854.87 2032.8 3862.98 2032.8 c
-3876.3 2032.8 3885 2019.2 3885 1998.26 c
-3885 1978.46 3876.23 1964.2 3863.34 1964.2 c
-3854.88 1964.2 3845 1971.09 3845 1976.84 c
-h
-3906 1961 m
-f*
-3937.5 2043.8 m
-3909.6 2033.9 l
-3909.6 2031.2 l
-3911.04 2031.38 l
-3913.2 2031.74 3915.54 2031.72 3917.16 2031.72 c
-3921.48 2031.72 3923 2028.89 3923 2021.12 c
-3923 1979.36 l
-3923 1966.4 3921.21 1964.42 3908.88 1963.7 c
-3908.88 1961 l
-3951.54 1961 l
-3951.54 1963.7 l
-3939.66 1964.6 3938 1966.4 3938 1979.36 c
-3938 2043.26 l
-h
-3929.22 2084 m
-3924.18 2084 3920 2079.83 3920 2074.76 c
-3920 2069.54 3923.98 2066 3929.04 2066 c
-3934.44 2066 3939 2069.78 3939 2074.76 c
-3939 2079.8 3934.59 2084 3929.22 2084 c
-h
-3956.04 1961 m
-f*
-3958.88 2032.64 m
-3960.14 2033.18 3961.76 2033.36 3963.74 2033.36 c
-3968.78 2033.36 3970 2030.66 3970 2021.84 c
-3970 1977.2 l
-3970 1966.94 3968.09 1964.42 3959.24 1963.7 c
-3959.24 1961 l
-3997.4 1961 l
-3997.4 1963.7 l
-3988.22 1964.42 3985 1966.58 3985 1973.06 c
-3985 2023.64 l
-3993.7 2031.74 3997.95 2033.8 4004.06 2033.8 c
-4012.88 2033.8 4017 2028.25 4017 2016.44 c
-4017 1978.82 l
-4017 1967.48 4014.7 1964.42 4005.86 1963.7 c
-4005.86 1961 l
-4043.3 1961 l
-4043.3 1963.7 l
-4034.48 1964.6 4032 1966.76 4032 1975.58 c
-4032 2016.8 l
-4032 2033.72 4024.2 2043.8 4011.08 2043.8 c
-4002.64 2043.8 3996.94 2040.74 3984.46 2029.22 c
-3984.46 2043.44 l
-3983.72 2043.8 l
-3974.9 2040.56 3968.78 2038.58 3958.88 2035.7 c
-h
-4046 1961 m
-f*
-4130.6 2031 m
-4130.6 2038 l
-4116.74 2038 l
-4113.14 2038 4110.44 2038.5 4106.84 2039.66 c
-4102.88 2041.1 l
-4098.02 2042.9 4093.16 2043.8 4088.48 2043.8 c
-4071.74 2043.8 4058.38 2030.84 4058.38 2014.46 c
-4058.38 2003.12 4063.07 1996.28 4075.16 1990.34 c
-4072.64 1987.82 4070.12 1985.48 4067.42 1983.14 c
-4061.48 1977.92 4059.1 1974.32 4059.1 1970.72 c
-4059.1 1966.76 4061.09 1964.78 4068.68 1961.18 c
-4055.72 1951.82 4051 1945.88 4051 1939.22 c
-4051 1929.68 4064.88 1922 4082.18 1922 c
-4095.14 1922 4108.82 1926.23 4118.18 1933.28 c
-4125.56 1939.04 4129 1944.98 4129 1952.18 c
-4129 1963.34 4120.53 1970.9 4107.2 1971.44 c
-4083.98 1972.52 l
-4074.26 1972.88 4069.94 1974.5 4069.94 1977.38 c
-4069.94 1980.98 4075.88 1987.28 4080.74 1988.72 c
-4084.16 1988.36 l
-4087.4 1988 4089.92 1988 4091 1988 c
-4097.3 1988 4104.32 1990.46 4109.72 1994.84 c
-4116.2 1999.88 4119 2006.36 4119 2015.72 c
-4119 2021 4118.12 2025.18 4115.66 2031 c
-h
-4072.46 1960.64 m
-4078.58 1959.38 4092.8 1958.3 4101.62 1958.3 c
-4118 1958.3 4124 1956.14 4124 1949.48 c
-4124 1939.04 4110.3 1932 4089.74 1932 c
-4073.9 1932 4064 1937.23 4064 1945.16 c
-4064 1949.3 4065.55 1952 4072.46 1960.64 c
-h
-4073.36 2021.84 m
-4073.36 2032.46 4078.4 2038.8 4086.68 2038.8 c
-4092.26 2038.8 4096.94 2035.73 4099.82 2030.3 c
-4103.24 2024 4105 2015.9 4105 2008.52 c
-4105 1998.62 4099.87 1993 4091.9 1993 c
-4080.74 1993 4073.36 2004.43 4073.36 2021.3 c
-h
-4136 1961 m
-f*
-4181 1961 m
-f*
-4184.06 2080 m
-4184.06 2077 l
-4199.18 2076.09 4201 2074.07 4201 2060.54 c
-4201 1980.62 l
-4201 1967.3 4198.71 1964.96 4184.06 1964.42 c
-4184.06 1961 l
-4244.18 1961 l
-4271 1961 4288 1973.42 4288 1993.4 c
-4288 2001.32 4284.85 2008.52 4278.92 2013.74 c
-4273.52 2018.6 4268.66 2020.94 4256.96 2023.64 c
-4266.32 2025.98 4270.1 2027.78 4274.42 2031.56 c
-4278.92 2035.52 4282 2042.18 4282 2049.56 c
-4282 2069.72 4265.85 2080 4234.46 2080 c
-h
-4220 2019.68 m
-4236.94 2019.68 4244.78 2018.78 4251.56 2016.26 c
-4262 2012.12 4267 2004.74 4267 1993.22 c
-4267 1983.5 4263.23 1976.48 4256.06 1972.34 c
-4250.3 1968.92 4243.1 1968 4230.5 1968 c
-4222.22 1968 4220 1969.55 4220 1975.04 c
-h
-4220 2026.88 m
-4220 2068.1 l
-4220 2071.88 4221.16 2073 4223.66 2073 c
-4231.58 2073 l
-4252.28 2073 4263 2064.71 4263 2048.84 c
-4263 2034.8 4253.55 2026.88 4236.8 2026.88 c
-h
-4301.06 1961 m
-f*
-2645.6 2822 m
-2643.98 2862.52 l
-2640.2 2862.52 l
-2639.12 2858.84 2636.24 2856.58 2632.82 2856.58 c
-2631.02 2856.58 2628.5 2857.17 2625.62 2858.36 c
-2616.8 2861.24 2607.98 2862.52 2599.16 2862.52 c
-2585.3 2862.52 2571.08 2857.36 2560.1 2848.46 c
-2546.42 2837.12 2539 2820.02 2539 2799.5 c
-2539 2762.96 2562.96 2738.48 2598.8 2738.48 c
-2619.14 2738.48 2636.96 2746.76 2647.94 2761.34 c
-2644.7 2764.58 l
-2631.38 2751.8 2619.5 2746.48 2604.56 2746.48 c
-2593.76 2746.48 2584.04 2749.69 2576.48 2755.94 c
-2565.86 2764.76 2560 2780.96 2560 2801.84 c
-2560 2834.42 2576.71 2855.52 2602.76 2855.52 c
-2613.2 2855.52 2622.38 2851.73 2629.58 2844.5 c
-2635.34 2838.74 2638.04 2833.7 2641.46 2822 c
-h
-2654.06 2741 m
-f*
-2657.14 2812.64 m
-2659.48 2813.18 2660.92 2813.36 2662.9 2813.36 c
-2667.58 2813.36 2669 2810.48 2669 2801.84 c
-2669 2756.3 l
-2669 2746.58 2666.52 2743.88 2656.6 2743.7 c
-2656.6 2741 l
-2696.56 2741 l
-2696.56 2744 l
-2687.02 2744.35 2684 2746.27 2684 2753.06 c
-2684 2803.82 l
-2684 2804.18 2685.23 2805.44 2686.66 2806.88 c
-2690.98 2811.2 2699.08 2814.8 2705.74 2814.8 c
-2713.48 2814.8 2718 2808.2 2718 2795.54 c
-2718 2756.48 l
-2718 2746.4 2715.93 2744.42 2705.2 2743.7 c
-2705.2 2741 l
-2745.52 2741 l
-2745.52 2744 l
-2735.26 2744.18 2733 2747.17 2733 2758.1 c
-2733 2803.46 l
-2738.28 2811.2 2743.91 2814.8 2752.18 2814.8 c
-2762.44 2814.8 2766 2809.85 2766 2794.64 c
-2766 2756.66 l
-2766 2746.4 2764.52 2744.96 2753.8 2743.7 c
-2753.8 2741 l
-2793.22 2741 l
-2793.22 2743.7 l
-2788.54 2744.06 l
-2783.14 2744.42 2781 2747.66 2781 2754.68 c
-2781 2791.76 l
-2781 2813 2773.91 2823.8 2759.92 2823.8 c
-2749.48 2823.8 2740.3 2819.12 2730.58 2808.68 c
-2727.34 2818.94 2721.22 2823.8 2711.5 2823.8 c
-2703.31 2823.8 2698.57 2821.46 2683.28 2809.94 c
-2683.28 2823.44 l
-2682.34 2823.8 l
-2673.16 2820.38 2667.04 2818.4 2657.14 2815.7 c
-h
-2794.04 2741 m
-f*
-2794.62 2811.74 m
-2796.24 2811.92 2797.5 2811.92 2799.12 2811.92 c
-2805.24 2811.92 2807 2810.12 2807 2801.66 c
-2807 2717.42 l
-2807 2708.06 2804.94 2706.08 2793.9 2705 c
-2793.9 2702 l
-2837.46 2702 l
-2837.46 2705 l
-2823.96 2705.18 2822 2707.19 2822 2718.68 c
-2822 2746.94 l
-2828.34 2741 2832.4 2739.2 2839.8 2739.2 c
-2861.22 2739.2 2877 2759.36 2877 2785.46 c
-2877 2807.78 2864.65 2823.8 2847.54 2823.8 c
-2837.61 2823.8 2829.8 2819.48 2822 2809.58 c
-2822 2823.44 l
-2820.54 2823.8 l
-2811 2820.02 2804.52 2817.68 2794.62 2814.62 c
-h
-2822 2801.12 m
-2822 2806.52 2831.87 2812.8 2839.98 2812.8 c
-2853.3 2812.8 2862 2799.2 2862 2778.26 c
-2862 2758.46 2853.23 2744.2 2840.34 2744.2 c
-2831.88 2744.2 2822 2751.09 2822 2756.84 c
-h
-2883 2741 m
-f*
-3004 2844.14 m
-3004 2762.6 l
-3004 2747.66 3001.88 2745.32 2987.94 2744.42 c
-2987.94 2741 l
-3038.34 2741 l
-3038.34 2744.42 l
-3025.2 2745.32 3023 2747.84 3023 2760.62 c
-3023 2840.54 l
-3023 2853.32 3025.29 2855.66 3038.34 2856.74 c
-3038.34 2860 l
-3002.52 2860 l
-2962.74 2769.26 l
-2921.16 2860 l
-2885.52 2860 l
-2885.52 2857 l
-2900.28 2856.09 2903 2853.89 2903 2840.54 c
-2903 2767.46 l
-2903 2748.92 2900.43 2745.5 2885.16 2744.42 c
-2885.16 2741 l
-2927.46 2741 l
-2927.46 2744 l
-2913.6 2744.73 2911 2748.95 2911 2767.46 c
-2911 2840 l
-2955.72 2741 l
-2958.24 2741 l
-h
-3043.02 2741 m
-f*
-3123.56 2752.88 m
-3120.5 2750.36 3118.34 2749.2 3115.64 2749.2 c
-3111.5 2749.2 3110 2751.78 3110 2759.9 c
-3110 2795 l
-3110 2804.18 3109.16 2809.22 3106.82 2813.36 c
-3103.04 2820.2 3095.3 2823.8 3084.32 2823.8 c
-3075.14 2823.8 3066.5 2821.28 3061.46 2817.14 c
-3056.96 2813.36 3054 2808.14 3054 2803.64 c
-3054 2799.5 3057.46 2795.9 3061.82 2795.9 c
-3066.14 2795.9 3069.92 2799.5 3069.92 2803.46 c
-3069.92 2804.18 3069.74 2805.08 3069.56 2806.34 c
-3069.2 2807.96 3069 2809.4 3069 2810.66 c
-3069 2815.52 3074.77 2819.8 3081.98 2819.8 c
-3090.8 2819.8 3095 2814.47 3095 2804.54 c
-3095 2793.56 l
-3067.76 2782.4 3064.75 2780.96 3057.14 2774.12 c
-3053.18 2770.52 3050.66 2764.4 3050.66 2758.46 c
-3050.66 2747.12 3058.4 2739.2 3069.56 2739.2 c
-3077.48 2739.2 3084.86 2742.98 3095.84 2752.34 c
-3096.74 2742.8 3099.98 2739.2 3107.36 2739.2 c
-3113.48 2739.2 3117.26 2741.36 3123.56 2748.2 c
-h
-3095 2763.14 m
-3095 2757.56 3094.23 2755.94 3090.98 2753.6 c
-3086.66 2751.08 3081.62 2749.2 3077.84 2749.2 c
-3071.54 2749.2 3066.48 2755.51 3066.48 2763.5 c
-3066.48 2764.22 l
-3066.48 2774.84 3073.7 2781.32 3095 2789.24 c
-h
-3123.92 2741 m
-f*
-3124.62 2811.74 m
-3126.24 2811.92 3127.5 2811.92 3129.12 2811.92 c
-3135.24 2811.92 3137 2810.12 3137 2801.66 c
-3137 2717.42 l
-3137 2708.06 3134.94 2706.08 3123.9 2705 c
-3123.9 2702 l
-3167.46 2702 l
-3167.46 2705 l
-3153.96 2705.18 3152 2707.19 3152 2718.68 c
-3152 2746.94 l
-3158.34 2741 3162.4 2739.2 3169.8 2739.2 c
-3191.22 2739.2 3207 2759.36 3207 2785.46 c
-3207 2807.78 3194.65 2823.8 3177.54 2823.8 c
-3167.61 2823.8 3159.8 2819.48 3152 2809.58 c
-3152 2823.44 l
-3150.54 2823.8 l
-3141 2820.02 3134.52 2817.68 3124.62 2814.62 c
-h
-3152 2801.12 m
-3152 2806.52 3161.87 2812.8 3169.98 2812.8 c
-3183.3 2812.8 3192 2799.2 3192 2778.26 c
-3192 2758.46 3183.23 2744.2 3170.34 2744.2 c
-3161.88 2744.2 3152 2751.09 3152 2756.84 c
-h
-3213 2741 m
-f*
-1 i
-483.35 2212.55 319.2 15.5999 re
-Y
-480.95 2220.95 m
-795.35 2220.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 2222.15 m
-522.95 2243.75 504.95 2261.75 483.35 2261.75 c
-460.55 2261.75 442.55 2243.75 442.55 2222.15 c
-442.55 2200.55 460.55 2182.55 483.35 2182.55 c
-504.95 2182.55 522.95 2200.55 522.95 2222.15 c
-f*
-753.35 2172.95 m
-772.55 2220.95 l
-753.35 2268.95 l
-905.75 2220.95 l
-f*
-483.35 1792.55 319.2 15.5999 re
-Y
-480.95 1800.95 m
-795.35 1800.95 l
-S
-0 0 6120 7920 re
-Y
-522.95 1802.15 m
-522.95 1823.75 504.95 1841.75 483.35 1841.75 c
-460.55 1841.75 442.55 1823.75 442.55 1802.15 c
-442.55 1780.55 460.55 1762.55 483.35 1762.55 c
-504.95 1762.55 522.95 1780.55 522.95 1802.15 c
-f*
-753.35 1752.95 m
-772.55 1800.95 l
-753.35 1848.95 l
-905.75 1800.95 l
-f*
-4966.55 2212.55 333.6 16.7996 re
-Y
-4966.55 2222.15 m
-5291.75 2220.95 l
-S
-0 0 6120 7920 re
-Y
-5004.95 2223.35 m
-5004.95 2244.95 4986.95 2262.95 4965.35 2262.95 c
-4942.55 2262.95 4924.55 2244.95 4924.55 2223.35 c
-4924.55 2201.75 4942.55 2183.75 4965.35 2183.75 c
-4986.95 2183.75 5004.95 2201.75 5004.95 2223.35 c
-f*
-5253.35 2172.95 m
-5272.55 2220.95 l
-5253.35 2268.95 l
-5405.75 2220.95 l
-f*
-4968.95 1791.35 330 16.7996 re
-Y
-4968.95 1799.75 m
-5290.55 1800.95 l
-S
-0 0 6120 7920 re
-Y
-5007.35 1800.95 m
-5007.35 1822.55 4989.35 1840.55 4967.75 1840.55 c
-4944.95 1840.55 4926.95 1822.55 4926.95 1800.95 c
-4926.95 1779.35 4944.95 1761.35 4967.75 1761.35 c
-4989.35 1761.35 5007.35 1779.35 5007.35 1800.95 c
-f*
-5253.35 1752.95 m
-5272.55 1800.95 l
-5253.35 1848.95 l
-5405.75 1800.95 l
-f*
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/sun211_figures/simpexamp.eps b/ast-5.3-1/sun211_figures/simpexamp.eps
deleted file mode 100644
index 7f56ceb..0000000
--- a/ast-5.3-1/sun211_figures/simpexamp.eps
+++ /dev/null
@@ -1,1197 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 43 353 522 564
-%.................................
-%%Creator: Aladdin Ghostscript 503 (epswrite)
-%%CreationDate: 1997/12/19 15:31:00
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 2
-%%EndComments
-%%BeginProlog
-% This copyright applies to everything between here and the %%EndProlog:
-% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
-%%BeginResource: procset GS_pswrite_ProcSet
-/GS_pswrite_ProcSet 40 dict dup begin
-/!{bind def}bind def/X{load def}!
-/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
-/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
-/m/moveto X/l/lineto X/c/curveto X/h/closepath X
-/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
-/re{4 -2 roll m exch dup lx exch ly neg lx h}!
-/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
-/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
-/@/currentfile X/|{string readstring pop}!
-/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
-/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
-/Ic{Ix false 1 colorimage}!
-/@85{@/ASCII85Decode filter}!
-end def
-%%EndResource
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-save GS_pswrite_ProcSet begin 0.1 0.1 scale
-%%EndPageSetup
-1 g
-0 0 6120 7920 re
-Y
-f
-0.564706 g
-3233.75 5340.95 m
-3233.75 5373.35 3206.15 5400.95 3173.75 5400.95 c
-2452.55 5400.95 l
-2420.15 5400.95 2392.55 5373.35 2392.55 5340.95 c
-2392.55 4979.75 l
-2392.55 4947.35 2420.15 4919.75 2452.55 4919.75 c
-3173.75 4919.75 l
-3206.15 4919.75 3233.75 4947.35 3233.75 4979.75 c
-f*
-1 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-f*
-8 w
-1 J
-1 j
-0 g
-3168.95 5396.15 m
-3168.95 5428.55 3142.55 5454.95 3110.15 5454.95 c
-2397.35 5454.95 l
-2364.95 5454.95 2338.55 5428.55 2338.55 5396.15 c
-2338.55 5043.35 l
-2338.55 5010.95 2364.95 4984.55 2397.35 4984.55 c
-3110.15 4984.55 l
-3142.55 4984.55 3168.95 5010.95 3168.95 5043.35 c
-h
-S
-0.564706 g
-2693.75 4320.95 m
-2693.75 4353.35 2667.35 4380.95 2633.75 4380.95 c
-2272.55 4380.95 l
-2240.15 4380.95 2212.55 4353.35 2212.55 4320.95 c
-2212.55 3719.75 l
-2212.55 3687.35 2240.15 3659.75 2272.55 3659.75 c
-2633.75 3659.75 l
-2667.35 3659.75 2693.75 3687.35 2693.75 3719.75 c
-f*
-1 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-f*
-0 g
-2628.95 4376.15 m
-2628.95 4408.55 2603.75 4434.95 2570.15 4434.95 c
-2217.35 4434.95 l
-2184.95 4434.95 2158.55 4408.55 2158.55 4376.15 c
-2158.55 3783.35 l
-2158.55 3750.95 2184.95 3724.55 2217.35 3724.55 c
-2570.15 3724.55 l
-2602.55 3724.55 2628.95 3750.95 2628.95 3783.35 c
-h
-S
-0.564706 g
-3473.75 4320.95 m
-3473.75 4353.35 3447.35 4380.95 3413.75 4380.95 c
-3052.55 4380.95 l
-3020.15 4380.95 2992.55 4353.35 2992.55 4320.95 c
-2992.55 3719.75 l
-2992.55 3687.35 3020.15 3659.75 3052.55 3659.75 c
-3413.75 3659.75 l
-3447.35 3659.75 3473.75 3687.35 3473.75 3719.75 c
-f*
-1 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-f*
-0 g
-3408.95 4376.15 m
-3408.95 4408.55 3383.75 4434.95 3350.15 4434.95 c
-2997.35 4434.95 l
-2964.95 4434.95 2938.55 4408.55 2938.55 4376.15 c
-2938.55 3783.35 l
-2938.55 3750.95 2964.95 3724.55 2997.35 3724.55 c
-3350.15 3724.55 l
-3382.55 3724.55 3408.95 3750.95 3408.95 3783.35 c
-h
-S
-0.564706 g
-1793.75 5468.15 m
-1793.75 5530.55 1743.35 5580.95 1680.95 5580.95 c
-1005.35 5580.95 l
-942.95 5580.95 892.55 5530.55 892.55 5468.15 c
-892.55 3652.55 l
-892.55 3590.15 942.95 3539.75 1005.35 3539.75 c
-1680.95 3539.75 l
-1743.35 3539.75 1793.75 3590.15 1793.75 3652.55 c
-f*
-1 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-f*
-0 g
-1728.95 5523.35 m
-1728.95 5584.55 1679.75 5634.95 1618.55 5634.95 c
-948.95 5634.95 l
-887.75 5634.95 838.55 5584.55 838.55 5523.35 c
-838.55 3716.15 l
-838.55 3653.75 887.75 3604.55 948.95 3604.55 c
-1618.55 3604.55 l
-1679.75 3604.55 1728.95 3653.75 1728.95 3716.15 c
-h
-S
-473.75 5151.35 254.4 15.5999 re
-Y
-471.35 5159.75 m
-720.95 5159.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 5160.95 m
-512.15 5182.55 494.15 5200.55 472.55 5200.55 c
-450.95 5200.55 432.95 5182.55 432.95 5160.95 c
-432.95 5139.35 450.95 5121.35 472.55 5121.35 c
-494.15 5121.35 512.15 5139.35 512.15 5160.95 c
-f*
-681.35 5111.75 m
-699.35 5159.75 l
-681.35 5207.75 l
-833.75 5159.75 l
-f*
-473.75 4611.35 254.4 15.5999 re
-Y
-471.35 4619.75 m
-720.95 4619.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4620.95 m
-512.15 4642.55 494.15 4660.55 472.55 4660.55 c
-450.95 4660.55 432.95 4642.55 432.95 4620.95 c
-432.95 4599.35 450.95 4581.35 472.55 4581.35 c
-494.15 4581.35 512.15 4599.35 512.15 4620.95 c
-f*
-681.35 4571.75 m
-699.35 4619.75 l
-681.35 4667.75 l
-833.75 4619.75 l
-f*
-473.75 4071.35 254.4 15.5999 re
-Y
-471.35 4079.75 m
-720.95 4079.75 l
-S
-0 0 6120 7920 re
-Y
-512.15 4080.95 m
-512.15 4102.55 494.15 4120.55 472.55 4120.55 c
-450.95 4120.55 432.95 4102.55 432.95 4080.95 c
-432.95 4059.35 450.95 4041.35 472.55 4041.35 c
-494.15 4041.35 512.15 4059.35 512.15 4080.95 c
-f*
-681.35 4031.75 m
-699.35 4079.75 l
-681.35 4127.75 l
-833.75 4079.75 l
-f*
-1733.75 5151.35 495.6 64.7996 re
-Y
-1733.75 5159.75 m
-2220.95 5208.95 l
-S
-0 0 6120 7920 re
-Y
-1772.15 5160.95 m
-1772.15 5182.55 1754.15 5200.55 1732.55 5200.55 c
-1710.95 5200.55 1692.95 5182.55 1692.95 5160.95 c
-1692.95 5139.35 1710.95 5121.35 1732.55 5121.35 c
-1754.15 5121.35 1772.15 5139.35 1772.15 5160.95 c
-f*
-2186.15 5157.35 m
-2200.55 5206.55 l
-2177.75 5252.15 l
-2333.75 5219.75 l
-f*
-1733.75 4325.75 342 294 re
-Y
-1733.75 4619.75 m
-2067.35 4334.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4620.95 m
-1772.15 4642.55 1754.15 4660.55 1732.55 4660.55 c
-1710.95 4660.55 1692.95 4642.55 1692.95 4620.95 c
-1692.95 4599.35 1710.95 4581.35 1732.55 4581.35 c
-1754.15 4581.35 1772.15 4599.35 1772.15 4620.95 c
-f*
-2007.35 4323.35 m
-2051.75 4347.35 l
-2068.55 4394.15 l
-2153.75 4259.75 l
-f*
-1733.75 3935.75 322.8 151.2 re
-Y
-1733.75 4079.75 m
-2048.15 3944.15 l
-S
-0 0 6120 7920 re
-Y
-1772.15 4080.95 m
-1772.15 4102.55 1754.15 4120.55 1732.55 4120.55 c
-1710.95 4120.55 1692.95 4102.55 1692.95 4080.95 c
-1692.95 4059.35 1710.95 4041.35 1732.55 4041.35 c
-1754.15 4041.35 1772.15 4059.35 1772.15 4080.95 c
-f*
-1995.35 3916.55 m
-2031.35 3952.55 l
-2032.55 4002.95 l
-2153.75 3899.75 l
-f*
-833.75 4670.15 811.2 489.6 re
-Y
-833.75 5159.75 m
-1636.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-872.15 5160.95 m
-872.15 5182.55 854.15 5200.55 832.55 5200.55 c
-810.95 5200.55 792.95 5182.55 792.95 5160.95 c
-792.95 5139.35 810.95 5121.35 832.55 5121.35 c
-854.15 5121.35 872.15 5139.35 872.15 5160.95 c
-f*
-1578.95 4656.95 m
-1618.55 4688.15 l
-1626.95 4738.55 l
-1733.75 4619.75 l
-f*
-833.75 4611.35 811.2 490.8 re
-Y
-833.75 4619.75 m
-1636.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-872.15 4620.95 m
-872.15 4642.55 854.15 4660.55 832.55 4660.55 c
-810.95 4660.55 792.95 4642.55 792.95 4620.95 c
-792.95 4599.35 810.95 4581.35 832.55 4581.35 c
-854.15 4581.35 872.15 4599.35 872.15 4620.95 c
-f*
-1626.95 5040.95 m
-1618.55 5091.35 l
-1578.95 5122.55 l
-1733.75 5159.75 l
-f*
-833.75 4071.35 795.6 15.5999 re
-Y
-831.35 4079.75 m
-1622.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-1581.35 4031.75 m
-1599.35 4079.75 l
-1581.35 4127.75 l
-1733.75 4079.75 l
-f*
-0.564706 g
-4853.75 5468.15 m
-4853.75 5530.55 4803.35 5580.95 4740.95 5580.95 c
-4065.35 5580.95 l
-4002.95 5580.95 3952.55 5530.55 3952.55 5468.15 c
-3952.55 3652.55 l
-3952.55 3590.15 4002.95 3539.75 4065.35 3539.75 c
-4740.95 3539.75 l
-4803.35 3539.75 4853.75 3590.15 4853.75 3652.55 c
-f*
-1 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-f*
-0 g
-4788.95 5523.35 m
-4788.95 5584.55 4739.75 5634.95 4678.55 5634.95 c
-4008.95 5634.95 l
-3947.75 5634.95 3898.55 5584.55 3898.55 5523.35 c
-3898.55 3716.15 l
-3898.55 3653.75 3947.75 3604.55 4008.95 3604.55 c
-4678.55 3604.55 l
-4739.75 3604.55 4788.95 3653.75 4788.95 3716.15 c
-h
-S
-3173.75 5160.95 613.2 65.9998 re
-Y
-3173.75 5219.75 m
-3778.55 5169.35 l
-S
-0 0 6120 7920 re
-Y
-3212.15 5220.95 m
-3212.15 5242.55 3194.15 5260.55 3172.55 5260.55 c
-3150.95 5260.55 3132.95 5242.55 3132.95 5220.95 c
-3132.95 5199.35 3150.95 5181.35 3172.55 5181.35 c
-3194.15 5181.35 3212.15 5199.35 3212.15 5220.95 c
-f*
-3737.75 5124.95 m
-3759.35 5170.55 l
-3746.15 5219.75 l
-3893.75 5159.75 l
-f*
-3413.75 4251.35 396 301.2 re
-Y
-3413.75 4259.75 m
-3801.35 4552.55 l
-S
-0 0 6120 7920 re
-Y
-3452.15 4260.95 m
-3452.15 4282.55 3434.15 4300.55 3412.55 4300.55 c
-3390.95 4300.55 3372.95 4282.55 3372.95 4260.95 c
-3372.95 4239.35 3390.95 4221.35 3412.55 4221.35 c
-3434.15 4221.35 3452.15 4239.35 3452.15 4260.95 c
-f*
-3800.15 4491.35 m
-3785.75 4539.35 l
-3742.55 4566.95 l
-3893.75 4619.75 l
-f*
-3413.75 3891.35 380.4 156 re
-Y
-3413.75 3899.75 m
-3785.75 4040.15 l
-S
-0 0 6120 7920 re
-Y
-3452.15 3900.95 m
-3452.15 3922.55 3434.15 3940.55 3412.55 3940.55 c
-3390.95 3940.55 3372.95 3922.55 3372.95 3900.95 c
-3372.95 3879.35 3390.95 3861.35 3412.55 3861.35 c
-3434.15 3861.35 3452.15 3879.35 3452.15 3900.95 c
-f*
-3767.75 3981.35 m
-3768.95 4031.75 l
-3734.15 4070.15 l
-3893.75 4079.75 l
-f*
-4793.75 5151.35 315.6 15.5999 re
-Y
-4791.35 5159.75 m
-5102.15 5159.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 5160.95 m
-4832.15 5182.55 4814.15 5200.55 4792.55 5200.55 c
-4770.95 5200.55 4752.95 5182.55 4752.95 5160.95 c
-4752.95 5139.35 4770.95 5121.35 4792.55 5121.35 c
-4814.15 5121.35 4832.15 5139.35 4832.15 5160.95 c
-f*
-5061.35 5111.75 m
-5079.35 5159.75 l
-5061.35 5207.75 l
-5213.75 5159.75 l
-f*
-4793.75 4611.35 315.6 15.5999 re
-Y
-4791.35 4619.75 m
-5102.15 4619.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4620.95 m
-4832.15 4642.55 4814.15 4660.55 4792.55 4660.55 c
-4770.95 4660.55 4752.95 4642.55 4752.95 4620.95 c
-4752.95 4599.35 4770.95 4581.35 4792.55 4581.35 c
-4814.15 4581.35 4832.15 4599.35 4832.15 4620.95 c
-f*
-5061.35 4571.75 m
-5079.35 4619.75 l
-5061.35 4667.75 l
-5213.75 4619.75 l
-f*
-4793.75 4071.35 315.6 15.5999 re
-Y
-4791.35 4079.75 m
-5102.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4832.15 4080.95 m
-4832.15 4102.55 4814.15 4120.55 4792.55 4120.55 c
-4770.95 4120.55 4752.95 4102.55 4752.95 4080.95 c
-4752.95 4059.35 4770.95 4041.35 4792.55 4041.35 c
-4814.15 4041.35 4832.15 4059.35 4832.15 4080.95 c
-f*
-5061.35 4031.75 m
-5079.35 4079.75 l
-5061.35 4127.75 l
-5213.75 4079.75 l
-f*
-3893.75 4670.15 811.2 489.6 re
-Y
-3893.75 5159.75 m
-4696.55 4678.55 l
-S
-0 0 6120 7920 re
-Y
-3932.15 5160.95 m
-3932.15 5182.55 3914.15 5200.55 3892.55 5200.55 c
-3870.95 5200.55 3852.95 5182.55 3852.95 5160.95 c
-3852.95 5139.35 3870.95 5121.35 3892.55 5121.35 c
-3914.15 5121.35 3932.15 5139.35 3932.15 5160.95 c
-f*
-4638.95 4656.95 m
-4678.55 4688.15 l
-4686.95 4738.55 l
-4793.75 4619.75 l
-f*
-3893.75 4611.35 811.2 490.8 re
-Y
-3893.75 4619.75 m
-4696.55 5102.15 l
-S
-0 0 6120 7920 re
-Y
-3932.15 4620.95 m
-3932.15 4642.55 3914.15 4660.55 3892.55 4660.55 c
-3870.95 4660.55 3852.95 4642.55 3852.95 4620.95 c
-3852.95 4599.35 3870.95 4581.35 3892.55 4581.35 c
-3914.15 4581.35 3932.15 4599.35 3932.15 4620.95 c
-f*
-4686.95 5040.95 m
-4678.55 5091.35 l
-4638.95 5122.55 l
-4793.75 5159.75 l
-f*
-3893.75 4071.35 795.6 15.5999 re
-Y
-3891.35 4079.75 m
-4682.15 4079.75 l
-S
-0 0 6120 7920 re
-Y
-4641.35 4031.75 m
-4659.35 4079.75 l
-4641.35 4127.75 l
-4793.75 4079.75 l
-f*
-2633.75 4251.35 194.4 15.5999 re
-Y
-2631.35 4259.75 m
-2820.95 4259.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 4260.95 m
-2672.15 4282.55 2654.15 4300.55 2632.55 4300.55 c
-2610.95 4300.55 2592.95 4282.55 2592.95 4260.95 c
-2592.95 4239.35 2610.95 4221.35 2632.55 4221.35 c
-2654.15 4221.35 2672.15 4239.35 2672.15 4260.95 c
-f*
-2781.35 4211.75 m
-2799.35 4259.75 l
-2781.35 4307.75 l
-2933.75 4259.75 l
-f*
-2633.75 3891.35 194.4 15.5999 re
-Y
-2631.35 3899.75 m
-2820.95 3899.75 l
-S
-0 0 6120 7920 re
-Y
-2672.15 3900.95 m
-2672.15 3922.55 2654.15 3940.55 2632.55 3940.55 c
-2610.95 3940.55 2592.95 3922.55 2592.95 3900.95 c
-2592.95 3879.35 2610.95 3861.35 2632.55 3861.35 c
-2654.15 3861.35 2672.15 3879.35 2672.15 3900.95 c
-f*
-2781.35 3851.75 m
-2799.35 3899.75 l
-2781.35 3947.75 l
-2933.75 3899.75 l
-f*
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -939 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -1028 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -1100 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -1154 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -1277 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -1427 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -1491 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-89 106 true[1 0 0 1 -3999 -5340]@85 imagemask
-"98E$s8Tk7z
-"98E$s8Tk7z"98E$s8Tk7z!'gM`s6p!gz!!E9$rr<$!z!!*'!rVuouz!!%NK
-p](9oz!!#7`p](9oz!!#7`n,NFgz!!#7`n,NFgz!!#7`n,NFgz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!",@
-huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`W
-z!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz!!", at huE`Wz
-!!", at huE`Wz!!", at n,NE<z!!", at s8W,uz!!", at s8W-!huE`W!!", at s8W-!qu?]s!!", at s8W-!rr<$!
-!!", at s8W-!s1eU7!!", at qu@9-s6p!g!!", at huEcWs82is!!", at huEa!s8Duu!!", at huE`^s8N'!!!",@
-huE`Xs8RTL!!", at huE`Ws8Tk7!!", at huE`WJ,eF,!!", at huE`W5QC3Q!!", at huE`W+91g1!!", at huE`W
-&-)D)!!", at huE`W#QOQ!!!", at huE`W#QO]%!!", at huE`W"989!!!", at huE`W"98?#!!", at huE`W!WW-!!!", at huE`W
-!WW0"!!", at huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W!<<'!!!", at huE`W!<<(L!!", at huE`W!<<(L
-!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!",@
-huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!<<(L!!", at huE`W!WW1M!!", at huE`W!WW0"!!",@
-huE`W!WW0"!!", at huE`W!WW0"!!", at huE`W"98B$!!", at huE`W"98?#!!", at huE`W#QOc'!!", at huE`W
-#QO]%!!", at huE`W&-)P-!!", at huE`W+92*9!!", at huE`W5QCKY!!", at huE`WJ,f!<!!", at huE`Ws8V!W
-!!", at huE`Xs8Tk7!!#7`huE`^s8RTL!!#7`huEaAs8N'!!!%NKn,NLhs82is!!%NKp],gDs6p!g!!*'!s8W-!s53kW
-!!iQ(s8W-!rr<$!!.Y%Ks8W-!qu?]s"98E$s8W-!huE`W"98E$s8W,uz"98E$s8W*!z~>
-Q
-q[1 0 0 1 0 0]concat
-71 76 true[1 0 0 1 -4088 -5338]@85 imagemask
-z56(Z`z
-&-)P-z!.Y%KJ,fQL!!3-"s53kW!!!9(s8Vio!!!!0s8W,uz+92B at rr<$!!.Y%Ks8RTL!!*'!
-s8W,W!!!$!s8W-!n,NFhs8W-!s7cQo"98E$KE(iL!!iQ(n,OR.!!!9(s1eU:rVup/s8N'!!<3$!+926=
-!!%M!!$D79!!!!@J,g\kn,NFg&&800s53kW!!hE^5QAM!!!!,Z!.Y$a!!!!"n,Rt<J,fQL!Up)=rr<$!!!)cos8N'!
-!!!"D!<<#uz495E\z!'C8]qu?]s!!"&?s82is!!!!-!<;foz!!3,pz!!!'"p](9o
-!!!!"s6p!gz!WVWhz!!3,hz!!!'"n,NFg!!!!"s53kWz!WV'Xz!!3,Xz
-!!!'"huE`W!!!!"s53kWz!WV'Xz!!3,Xz!!!'"huE`W!!!!"s53kWz!<:sWz!!*&Wz
-!!!$!s8W-!s8VQgs8W-!s8W,g!<<*!s8W-!huJ9,s8W-!s53m,s8W-!s8V!WJ)C;,!$D7!!'fBA!!",@
-huH""!!!!@s53lAhuE`W+90+V+7K71!$D6V!$C\1!!#7`^]4o7!!!!`s1eUFp](9o5Q?66#P\9!!'gL6
-!!i9!!!%NKJ,f]L!!!"Krr<$"qu?]ss8N'!!WE'!!<<#u!!*$!!!3,t!!!"KJ,fWMqu?]s5JR7$s7cQo!$C,!&-),!!!!Q)!$D7!!!!!(
-s24m:^]4?7!WW3"s*t(L!!*'!s8Duu!!!!`s8Vioz#QOh^z!!*'!z!!!!$huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-57 74 true[1 0 0 1 -4160 -5340]@85 imagemask
-&-)\0s1eU7&-)\0
-s1eU7&-)\0p](9o!.Y%K^]4?7!"],0z!!iQ'z!!E9!z!!E9!z!!3,tz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,pz!!3,p
-z!!3,pz!!3,pz!!3,tz!!3,tz!!3-!z!!3-!z!!3-"z!!3-"
-!!)co!!E8uJ-5cN!!E8u^^'i=!!iQ"i",hf#S6t1pcncY&-)\)IfKEJ&-)\)J,fP!"98Dr5QCb6!.Y%D
-+92 at k!"],)&-)Y0!!3,p#QOf(!!%ND"98B$!!!Q)!WW-!!!!,r!<;rs!!!"D!'g5Yz!!@`O~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -4214 -5340]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -4337 -5340]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -4487 -5338]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -4551 -5305]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-116 108 true[1 0 0 1 -2464 -5158]@85 imagemask
-z!!#7`qu?]s
-zz#QOi(huE`Wz!!!"Ks8W,szz!!3-"s8W+Lzz#QOi(s8V!Wz
-!!!!@s8W-!s7cQoz!!#7`s8W-!qu?]sz!<<*!!!3-"z!!!!"s8VQg!$D5kz!!!-$
-s*t(L"96.:z!!iQ'zs53kWz&-)P-!!!!`n,NFg!!!!@s7cQo!!!Q)z!!", at n,NFg!!iE%z
-!'gMAz"8i-!zJ,d:a!!!!"rVuou!!!"Ks*t(L!!!$!z!!*'!z!!%KKz!<<'!
-z!.TM!zs8Duuz5C`_6!!!'"rVuou!!!!@^]4?7!!3,tz!!"+Vz"989!z
-!"ZjF!!!!$s82isz&)[Ef!!!-$p](9o!!!!0huE`W!!E8rz!!!Pfz#QOQ!z!!hE^!!!!(s7cQo
-z#Oh]n!!!9(p](9o!!!!(n,NFg!!iPnz!!!8nz#QO8nz!!hun!!!!(s6p!gz
-"7Q9j!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz
-&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!
-z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z
-!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!g
-z"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz
-"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir
-!!!Q0n,NFg!!!!$p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$
-p](9o!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o
-!"],!z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!
-z!!!,rz&-),!z!!Dur!!!!0s6p!gz"8Dir!!!Q0n,NFg!!!!$p](9o!"],!z!!!9!z
-&-),!z!!iE%!!!!0s6p!gz#Q+Q%!!!Q0n,NFg!!!!(qu?]s!$D71z!!!9%z+92*9
-z!"]&/!!!!@s7cQoz&,lP/!!#7`qu?]s!!!!@rr<$!!'gM]z!!#7`J,fQLs8W*!z
-!.Y$a!!!-$s8Tk7!!!!$s8Vio!.Y%Ks8Duu!!#7`s8RTSs8W-!s53kW!WW3"s6p9ns8W-!huE`Xs8W-!n-B!ns8W,W!!!'"s8W,g~>
-Q
-q[1 0 0 1 0 0]concat
-81 74 true[1 0 0 1 -2579 -5160]@85 imagemask
-"98E$rrN0"s8RTO
-s8W-!!WW3"s*t.Ms8W&us8W-!!!!Q0s1eUFs8V!W!!iQ(!!!-$s*t(L"98?#!!3-"!!!!"s8Duu!<<'!
-!!!'"qu?]ss8N'!!!*&s!!!$!rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"K
-rVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ
-!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs
-!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!
-qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou
-!<;rs!!%NJzs82is!.XtJ!!!$!qu?]sJ,TEJ!!*&s!!!"KrVuou!<;rs!!%NJzs82is!.XtJ!!!$!qu?]s
-s8Duu!!*&u!!!$!qu?]s!<<'!!!*&szs8RTL!<;rs!!!$!s1eU8s82is!!3-"huEfXp](9o!WW2p
-!!E8r!!!!$s8Diq#QOQ!!!!9(r-n\gs6p!g"98E!5Oe^Qn,NFjs8W!=s8W,W!!!-$s83E-s8V!W!!%NK
-r!39%s1eU7!!iQ%"98E$J,fQL!<;rss8W*!z+8c+gs8Duu!!!!$qu at i=p](9o!!!"H!!iP^z!!!Q1!'C5]!!!~>
-Q
-q[1 0 0 1 0 0]concat
-43 109 true[1 0 0 1 -2660 -5160]@85 imagemask
-"98E$s54"Zs8W,W
-!WW3"s1eU>s8Vio!!3-"huE`Ws8Tk7!!%NKJ,fQLJ,b$!!!%NKz5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z
-5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`
-!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`z5Q:]`!!#7`
-z5Q:]`!!#7`z5Q:]`!!%NKzJ,]KK!W`9#!!!,ms8N'!"98E$!!!$!s8N'!!$D7@!!!!$s8N'!!!%NK
-z+9)<@!!!-$z!.OtK!!!!0zzzzzzzzzz
-zzzzzzzzzzzzzzzz
-zzzzz"+U at O!!",1z5PP3Y!!%NHzJ,TEJ!!*'!zs8N'!!!*'!zs8N'!!!*'!zs8N'!!!%NJzJ,TEJ!!#7]z+8>g9!!!Pf!!!~>
-Q
-q[1 0 0 1 0 0]concat
-48 95 true[1 0 0 1 -2704 -5158]@85 imagemask
-!!!!]z"979Z
-!!!9(p](9o+92<?!!#7`s*t(L5QCc!!!%NKs53kWs8W,g!!*'!kP,#Ws8N)s!!3-!!'C5^s82j<!!3,p
-!"T&1s7cQu!!E8r!!!!$s7cQo!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$
-s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g
-!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j
-!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!!$s6p!g!!E8j!!!9(s8W,g#QOi(s6p-js8W,g!WW3"s6p#<s8W,g
-!'gMQ!!!!@s6p!g!"],!!!!!(s6p!g!!E8j!!!!"s6p!g!!*&gzJ+*F<!!#7Qz+7K71!!",1
-z&+BQ!!!!8nz#Oh]n!!!,jz!Up'h!!!#gz!:Tsg!!!"<z!&+BQ!!!!A!!!~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2750 -5160]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2898 -5158]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2962 -5125]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-98 106 true[1 0 0 1 -2385 -4560]@85 imagemask
-&-)\0s8W-!s8W,u
-!"],0s8W-!s8W-!rW!3's8W-!s8W-!s8E!'s8W-!s8W-!s8W&u"98E$s8W-!s8W,u!!3-"s8W-!s8W-!
-rW!!!s53kW!!!!`s8N'!s8V!Wz!WW0"!.Y%<z!!#7`!!#7`p](9o!!!!0rr<$`s7cQoz
-#QFc(+926=z!!E6$!"],/z!!!'"!!!Q0rr<$!zs*t(Ss8N'!z!.TM!"98COz!!#66!!3-"
-^]4?7!!!!`J,fWMs1eU7z++O=ks8V!Wz!$?^k!.Y%<z!!!O[!!%NKn,NFg!!!!0J,fR6
-s7cQoz#J^<>+926=z!!g:>!"],/z!!!8>!!!Q0rVuou!!!!$^]4?>s8N'!z"2Fm:
-"98COz!!C":!!E9$J,fQL!!!&8!!!'"s1eU7zzs8V!Wzz!.Y%<zz!!%NKn,NFg
-z!!!!`s7cQozz+926=zz!$D7=zz!!!Q0rVuouz!!!!(s8N'!
-zz"98COzz!!E9$J,fQLz!!!'"s1eU7zzs8V!Wzz!<<)W
-zz!!%NKn,NFgz!!!!`s7cQozz+92*9zz!$D7=zz!!!Q0rVuouz
-!!!!(s8N'!zz#QOf(zz!!E9$J,fQLz!!!'"s1eU7zzs8Tk7z
-z!<<)Wzz!!%NKn,NFgz!!!!`s7cQozz5QCKYzz!$D7=z
-z!!!Q0rVuouz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz!!!'"s1eU7z!!!!"
-s8Tk7zz!<<)Wzz!!%NKn,NFgz!!!!`s6p!gzz5QCKYzz
-!$D7=zz!!!Q0qu?]sz!!!!(s8Duuzz#QOf(zz!!E9$J,fQLz
-!!!'"s*t(Lz!!!!"s8Tk7zz!<<)Wzz!!%NKhuE`Wz!!!!`s6p!gzz5QCKY
-zz!$D7=zn,NFg!!!Q0qu?]s!:Tsg!!!!0s8Duu!!)coz#QOf(!!!#oz!!E9$
-zGQ7^D!!!'"s*t(L!-eJD!!!!"s8Tk7!!%BHz!<<)W!!!"Hz!!%NKhuE`WHiO-H!!!"K
-s6p!g!.FnJz5QCKY!!%HJz!$D79!!!"Kz!!!Q0qu?]sIfKHK!!!!0s8Duu!'bu6z#QOf(!!#7!z!!E9$!!!!`huE`W!!!-$s*t(L5O\XQ!!!!"s8Tk7!'gA]
-z!<<)7!!#7`z!!%NKhuEaAs53kW!!!"Ks6p!g5QC]_z5QC3Q!$D7 at s8W-!s8W,o!!",@
-s8W-!s8W-!qu?^=s8W-!s8W-!s8Duu+92B at s8W-!s8W&u!$D7 at s8W-!s8W,u!!", at s8W-!s8W-!rVu~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2490 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-70 76 true[1 0 0 1 -2570 -4558]@85 imagemask
-zp](9oz
-5QBXAz!WW3!z!"],0s*t(L!!#7`s8V!W!!!"Ks5F"Q!!!!"s8E!?qu?]s"98,r#QFc(!!iP^
-!!3+M!!",@^]4B7^]4@!s*t(LJ)C;,J,]KK!'frQ!.XtJ!!",9!!*&s!!!!@qu?ctp](9o&,ZD0s7cQo
-!"]&/"97ij!!!9(!!iPn!!!!(rr<<(huE`W"93l^s53kW!!E7O&-(Pf!!!-$^`WTl!!!!"s1f`V^]4?7!WV(Bs1eU7
-!!3,X5Q?66!!!'"n3?r'!!!!"s6tO<J,fQL!<;P<rr<$!!!*&gJ,]KK!!!$!pj`;Dzs7h*Dz
-!<;iorVuou!!*&os8Duu!!!$!q#C<nzs8;orz!<;usrVuou!!*&ss8Duu!!!$!r;ZZpz
-s8;opz!<;usqu?]s!!*&ss82is!!!$!r;ZZpzs8;opz!WW)tqu?]s!!3,ts82is!!!'"r."VE!!!!"
-s87BEz!WVqEqu?]s!!E8rJ,B9H!!!-$pj`2A!!!!$s7ehVz"98-\qu?]s!!iPn5Q1W_!!!9(
-n/qW0!!!!(s6q-0z&-(Q0rVuou!"]+f&,lP/!!!Q0^^pGF!!!!@s1em>z+9-irs*t(L!'gL6
-"93lO!!#7`!!3,8!!!"KrW!!!^]4?7s8Duus53kW!<;rs!.XJ<!!3,p!!#7Q!!!-$n,NG1qu?^%s53kW&,lP/+90+V!!iN(!'gL6!!!'"
-^]FK7zs8F,?qu?]s!'gM`s6p!g!!!Q0s8Tk7!!!!$s8W*!z!'gMQz!!!#sz~>
-Q
-q[1 0 0 1 0 0]concat
-127 74 true[1 0 0 1 -2642 -4560]@85 imagemask
-#QOi(s+(.Ls8VR!
-s8W,u#QOi(s+(.Ls8VR!s8W,u!WW3"n,P]Qs8E!/s8W,o!"],0J,fWMs7cQoJ,fKJ!!E9$!!!"Ks53kW
-+926=!!E9#!!!"Ks53kW#QOQ!!!3-!!!!!`s1eU7#QOQ!!!3,t!!!!`s1eU7#QO8n!!*&s!!!!@s1eU7
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s
-!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L"97ij!!*&s!!!!@s*t(L
-"979Z!!*&s!!!!`s*t(L"979Z!!*&s!!!!`s1eU7#QN]^!!*&u!!!!`s1eU7#QN]^!!*'!!!!!`s53kW
-#QN]^!!*'!J,fS!s6p!g#QMR>!!3-"^]4 at as7cQo&-'EF!!3,sn,NIgrql`r&-'EF!!3,qp](<or-n\H+9-ik!!E8rrr<*"r',]35Q?66"98Dr5JRO(p`JDos8N'!"98Dr+9"M)p]pg0s8N'!"98Dr
-&-)\0n,r^js8Duu!'gMY"98E$huWlXs82is!!iQ!!WW3"huJ9,s82is!!*&o!.Y%K^]6V!s7cQo!!",9
-!$D7@!!!Q0s53kW!!!,r!"],/!!!-$s1eU7!!!"D!!3,p!!!"Krr<$!z!!!N0!!!!"huE`W~>
-Q
-q[1 0 0 1 0 0]concat
-141 106 true[1 0 0 1 -2766 -4560]@85 imagemask
-#QOi(s53kW)uos=
-s8W-!s7cj!s8W,W!!"&?!!*'!s8W,o#QOi(s53kW4obQ_s8W-!s7cSDs8Vus!!#1_!!!9(s8W+L!!iQ(
-^]4?756(Z`!.Y%Kp](9ps8N'!!!%KK!!!!@s8V!W!!*&uzIt.M!!"],0J,fQLJ,B9H!!*%L!!!!(
-s8RTL!!#7Yzs1eU7!!E9$z5PP3Y!!3,8!!!!$s8N'!!!",9!!!!"s53kW!!E9$z+7K71!!E8Z!!!!"
-s8Duu!!",1!!!!$s53kW!!3-!z+7K71!!iPn!!!!"s8Duu!!!Q!!!!!(s6p!g!!3-!z&)[Ef
-!"],)!!!!"s8Duu!!!Pf!!!!0s7cQo!!3-!z&)[Ef!"],-!!!!"s8Duu!!!Pf!!!!@s82is!!3-!
-z&)[Ef!$D7?!!!!"s8Duu!!!Pf!!!!`s8Duu!!3-!z&)[Ef!'gM`!!!!"s8Duu!!!Pf!!!"Ks8N'!!!3-!
-z&)[Ef!.Y%K!!!!"s8Duu!!!Pf!!!$!s8RTL!!3-!z&)[Ef!<<*!J,fQMs8Duu!!!Pf!!!'"
-s1c>L!!3-!z&)[Ef!WW1l^]4?8s8Duu!!!Pf!!!-$ru^/!!!3-!z&)[Ef"98B3huE`Xs8Duu
-!!!Pf!!!-$rX\Ju!!3-!z&)[Ef#QOc.n,NFhs8Duu!!!Pf!!!9(rWhom!!3-!z&)[Ef&-)P0p](9ps8Duu
-!!!Pf!!!Q0quc]o!!3-!z&)[Ef+92*<qu?]ts8Duu!!!Pf!!", at p]:9m!!3-!z&)[Ef5QC3R
-rVup!s8Duu!!!Pf!!#7`n,WFf!!3-!z&)[EfJ,eF,rr<$"s8Duu!!!Pf!!%NKhuJ6,!!3-!z
-&)[Efs8Tk7IfKHLs8Duu!!!Pf!!*'!^]8k7!!3-!z&)[Efs8RTL5C`_7s8Duu!!!Pf!!3-"J,hgL!!3-!z
-&)[Egs8RTL+2 at jWs8Duu!!!Pf!!E9$!!",!!!3-!z&)[Eis8N'!&)[Egs8Duu!!!Pf!!iQ'!!!Q!
-!!3-!z&)[Ems8Duu#Oh]os8Duu!!!Pf!"],-!!!9!!!3-!z&)[Eus82is#P\9"s8Duu!!!Pf
-!$D79!!!,r!!3-!z&)[F0s7cQo"8i-"s8Duu!!!Pf!'gMQ!!!&t!!3-!z&)[FPs6p!g!WE'"s8Duu!!!Pf
-!'gMQ!!!#u!!3-!z&)[G;s53kW!<3$"s8Duu!!!Pf!.Y%,!!!$!!!3-!z&)[Hfs1eU7!.TM"
-s8Duu!!!Pf!<<)7!!!"KJ-#]Lz&)[Kgs*t(L!'bu7s8Duu!!!Pf!WW1M!!!!`^]FK7z&)[Qi
-rr<$!!$AuWs8Duu!!!Pf"98B$!!!!@huWlWz&)[]mrVuou!"[ugs8Duu!!!Pf#QOc'!!!!0n,`Rgz&)[uu
-rVuou!"\Q"s8Duu!!!Pf&-)P-!!!!(p]:Eoz&)[uuqu?]s!!i9"s8Duu!!!Pf+92*9!!!!$quQis
-z&)\Q0p](9o!!E-"s8Duu!!!Pf5QC3Q!!!!"quQisz&)]\Pn,NFg!!3'"s8Duu!!!PfJ,eF,
-!!!!"rW3&uz&)_s;huE`W!!*$"s8Duu!!!Pfs8Tk7zrrN0!z&)dKf^]4?7!!%M"s8Duu!!!Pgs8RTL
-zIt at Y!z&)mQgJ,fQL!!#7"s8Duu!!!Pis8RTLz5JdC!z&**]iz!!"+Ws8Duu
-!!!Pis8N'!z+6!8!z&*Nulz!!","s8Duu!!!Pms8Duuz&+T]!z&+BPrz
-!!!Q"s8Duu!!!Pus82isz#PnE!z&-)\)z!!!9"s8Duu!!!Q0s7cQoz"9&9!z&-)\!z
-!!!-"s8Duu!!!Q0s6p!gz"9&9!z&-)\!z!!!'"s8Duu!!!Q0s53kWz!WW3!z
-&-)[fz!!!$!s8Duu!!!Q0s1eU7z!<<)uz&-)[Fz!!!"Ks8N'!!!", at s*t(Lz
-!.Y%Kz+92 at kz!!!!`s8N'!!!", at rr<$!z!'gM`J,fQL5QC``z!!!!`s8RTL!!%NKrVuouz!$D7 at huE`Xs8W&uz!!!!@s8Vio!$D7 at rVuouz
-!"],0s*t at Ss8Vusz!!!!0s8W,o#QOi(qu?]sz!!iQ(s7cj!s8Vioz!!!!(s8W,o~>
-Q
-q[1 0 0 1 0 0]concat
-66 76 true[1 0 0 1 -2917 -4558]@85 imagemask
-!!)Kg!!%6D!!",@
-!!!-$J,fS!s53k^s53kWs8Vio&-)D)"98E#!$D7=!!iQ(rr=/@rW!K/s8Tl!s8N'0s8W,W5QCb6+92B@
-pcnfY^`WUV+8gWgO2+![p]:ADrrKo"s6p#<J,TG`5QBXA+92<?!.Y$a!!iQ%!!%NKJ,fWMqu?_Hs*t(L
-s82isJ,b$!!<;rs!.Y"K!!%NH!!%NK!!!"Kqu?_Hrr<$!J,B9HJ,]KK!.XnH!.Y"K!!%NH!!#7`!!!"Kqu?^]rr<$!
-J,B9H5Q:]`!.XnH!$D4@!!%NH!!",@!!!"Kqu?^-rr<$!J,B9H&-%.[!.XnH!!iOS!!%NH!!!-$^]4 at a
-qu?]ts1eU7J,B9H!<:sW!.XnH!!%N<!!%NH!!!!`p](;Dqu?]s&,ZD-J,B9H!!iN(!.XnH!!!'"J,k)s
-zJ)C<Vqu?]s!$Ct9J,B9H!!!9'!.XnH!!!!"s+#Usz!'fCkqu?]s!!!Q)J,B9H!!!!"s*sqHz!.Y%H
-z!!", at qu?]s!!!!$s82isz!<;rsz!!%NHz!!!"Kqu?]squ?]sJ,B9H"9&9#!.XnH
-!!iN(!!%NH!!!9(J,fS!qu?^-s1eU7J,B9H&-'EF!.XnH!"]+F!!%NH!!!Q0^]4 at aqu?^-s1eU7J+s!D
-&-'EF!.XbD!!iP>!!%ND!!!9(^]4 at ap](9rs1eU7s6p!g"96.:!<;Ng!!3,8!!*&W!!!'"huEfXhuE`Ws53kZs1eU7!.XJ<"93lO!!#7Y
-!"]*[!!!!0rW"&>z#QNc_qu?]s!!3-"s7cQo!!!!`s8V!Wz#QOf(z!!!PFz~>
-Q
-q[1 0 0 1 0 0]concat
-78 109 true[1 0 0 1 -2979 -4525]@85 imagemask
-&-)\0s53kW!!!Q0
-s8W,Wz&-)\0s53kW!!!$!s8VQgz!$D7 at z!!!!(s8Duuz!!E9!z!!!!$s82is
-z!!E9!z!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz
-!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"
-s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQo
-z!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cQoz!!3,pz!!!!"s7cRXz
-!!3,p#QOQ!!!!!"s7d]9rr<$!!!3,p5QCc!!!!!"s7lWos6p!g!!3,qs5F"Q!!!!"s82cq+8u6?!!3-"p](R!!!!!"
-s8V!W"93lO!!3-"J,fWM^]4?8s8N'!!<:sW!!3-!!!!"Kn,NFhs82is!'g5Y!!3,t!!!!@p](9ps7cQo
-!$D+=!!3,p!!!!0rVup!s7cQo!"]&/!!3,p!!!!(rr<$"s7cQo!!iOS!!3,p!!!!$s*t(Ms7cQo!!E8:
-!!3,p!!!!$s1eU8s7cQo!!E8:!!3,p!!!!"s53kXs7cQo!!3,X!!3,p!!!!"s6p!hs7cQo!!3,h!!3,p!!!!"s6p!h
-s7cQo!!*&g!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo!!*&o!!3,pzs7cQps7cQo
-!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s!!3,pzs82its7cQo!!*&s
-!!3,pzs82its7cQo!!*&s!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82its7cQo!!3,t!!3,p!!!!"s82it
-s7cQo!!E9!!!3,p!!!!$s7cQps7cQo!!E8r!!3,p!!!!$s7cQps7cQo!!iQ!!!3,p!!!!(s7cQps7cQo
-!"],!!!3,p!!!!0s6p!hs7cQo!$D71!!3,p!!!!@s53kXs82is!'gMA!!3-!!!!"Ks1eU8s8N'!!<<)7
-!!3-"J,fWMs*t(Os8V!W"98CO!!E9$n,N^nrr<$0s82cq+92?@&-)\*s5F"XrW!K/s7lWos8Vus#QOi!J,fQKp](<os7ehYs8VQg!$D79+92B@
-huE`Zs7d-)s8Tk7!!%ND"98E$J,fQL+8>m:s8Duu!!!,r!.Y%Dz!-eJSs53kW!!!!1!!%BH!!!~>
-Q
-q[1 0 0 1 0 0]concat
-51 75 true[1 0 0 1 -3067 -4558]@85 imagemask
-!!!!]!!!!=!$D7!
-!!!u at s8Vus!$D7 at s8N'!+92?Os1eUVs53m,huFl!J,g\\!$D1?!!i9!+8c*="8i- at p](9rrW"&0!!!'"
-!$C\1!!3*"+5d,!!<7Qk^]4?7s*u3,!!!$!^`S(,!!*&7++O=k!<9hVJ,fQLs54t!!!!$!i#_q!!!3,X
-*WQ0?!WV(!!!!!$s54pu!!!9(i#Vju!"]+f)uos=+917=!!!!`s1eU7!!%NK^]4?7!WW28!!!!(s8RTL!!!Q0s*t(L
-!'gM`zs8W*!!!!-$s8Duu!!iQ(qu?]s+92B9!!!"Ks8VQg!!*'!s53kW"98E$J,fQSs8W*!!!!Q0
-s82is!$D7 at n,NFgJ,fQ,!!!$!s8RTL!!*'!rVuou!WW2t!!!!$s8VQg!!!9(s1eU7!!iQ(z&-)V/
-!!!!0s7cQo!!!Q0huE`W!$D6Vz+9-ik!#tt\rr<$!)uq)[!!!!]!$D+=!!#+]+8c*=!'C6'qu?]sHiP8`!!!"H!$Ct9!!%BH&,6,)!;HO)p](9op](j"!!!&p!!i9!!!2ip#Q+Q%"8Diuqu?^!p](Eo
-!!!9!!!3'!!"\i)!<3$!+8>g9J%u&6p](:Yn,`Ra!!", at s8Vio!!iQ(rceDC!WW2h2uipY5Q?66!!~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -2313 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-65 112 true[1 0 0 1 -2408 -4018]@85 imagemask
-!$D79z!!3-"
-s*t(L!!!9(s8Vio!!!!0s8W,uz5QCc`s1eU7!'gM`s8VQg!!%NKs1f`O!!!$!s8N'$rVuous8Vus
-!<3$!!<<)g!!%Ma!!*'!huEa!huEcWs*t(L&+BQ!J,]KK!!i9!!.XnH!!!9%!!#7Q!!!!$rVup'z
-!WE'!z!!*$!z!!!$!J,fQLzJ%u$az!.Vcaz!!#7Az!!!!`huE`Wz5O\XQz
-!$C\1z!!",1z!!!!@p](9oz+8>g9z!"\i)z!!!Q-z!!!!0qu?]sz
-&,ZD-z!"\u-z!!!Q-z!!!!0rVuouz&,lP/z!"]&/z!!!Q/z!!!!0
-rVuouz&,lP/z!$D1?z!!",?z!!!!@rVuouz+8u6?z!$D1?z!!#7_z!!!!`
-rVuouzJ,TEJz!.XtJz!!*&sz!!!$!qu?]s!!!!"s82isz"989!z!!E9!
-z!!!9(p](9o!!!!0s7cQoz+92*9z!.Y%<z!!*'!n,NFg!!!'"s53kW!!!!(s8V!W
-z+92AVz!.Y%KJ,fQL!!3-"s*t(L!!!9(s8N'!!!!!`s8W&u!!!!$s8W,sz5QCc`p](9o#QOi(s6p!g
-#QOi(s8V!W!!iQ(s8W,7!!!-$s8W-!J,fQOs8W-!rr<$!!WW3"s82is!!3-"s8Vio!!!'"s8W,Wz
-s8W-!J,fQL!<<*!qu?]s!!%NKs53kW!!!"Ks8N'!z5QC3Qz!'gG_z!!"+Vz!!!!@
-^]4?7z&&8/Fz!"[ufz!!!8^z!!!!(n,NFgz#Oh]nz!!Durz!!!,rz!!!!"
-qu?]sz!W2otz!!)uuz!!!#uzzIfKHKz!.Y%Ks8Tk7!!#7`s8W,W!!!!`
-s8W-!huE`W5QCc`s6p!g!$D7 at s8VQg!!", at s8W,o!!!!0s8W-!p](9o&-)\0s7cQo!!iQ(s8Vus!!!9(
-s8W,s!!!!$s8W-!rVuou"98E$s8Duu!!3-"s8W*!z!!!!0zz#64`(z!!@`Oz!!!$"~>
-Q
-q[1 0 0 1 0 0]concat
-82 67 true[1 0 0 1 -3033 -4020]@85 imagemask
-&-)\-!!!-$s8N'@
-s8W*!!!iQ(s+!?6s8N'!&-)\0^d%l!rr<$0s8W,75QCc`!!!Q0s8TkVs8W&u!!iQ(s*tX[s82is"98E$
-!!*%Lz!'frQ!.VcazJ)C;,+7K71!!!$!J,fQ[p](9o!!3*"!!!9%z"9&9#!!E3#!!!!(
-qu?]s!WN-"!!!Q)zs*t(L!$C\1!!!"K^]4?75MuMA!!#7A!!!"K^]4?7!$C\1!!*%Lz&,6,)!WN-"!!!!(
-qu?^!rVuou!!!-#!!!Q-z!!3*"!$Ct9z!<9h75O\XQzJ)C<VhuE`W!!!!`n,WL(z
-!!",9!WRZMz!"\u0rr<$!z#Q=u-z!!!!$rt##-z!!!$!TC;g\z!!%NKhuE`W
-z!'gM!zz+9-ikz!!!!0rr<$!z!!!9'zz!!iK'zz&,uV0z!!!!@
-s*t(Lz!!#7`^]4?7z!.Y%,zzs.Ac\z!!!'"&,6,)z!!E3*qu?]sz
-#Q+]'z!!!!@p]:DFz!!#7Q!.Vcaz!.Wo,5MuMAzs1eUVn,NFg!!!'"J,g,Tz
-!!E3#!!iE%z#Q+Q%"9&9#!!!!0p](9prr<$!!!",1!!!$!J,fQL!'fBA!!%MazJ%u$a!'fBA!!!$!J,fQL
-+7K71!!3*"!!!!0p](9o"9&9#!!!9%!!!!(qu?]s!!E3#!!!Q)z!WN-"!<<)u!!!-$s6p!js8W*!
-!"],0qu?j!s8N'!&-)\-!!E9$rr<$0s8Vus"98E$!!!Q0s82j!s8W*!!"],0qu?cts8Duu"98Dj!!~>
-Q
-q[1 0 0 1 0 0]concat
-79 110 true[1 0 0 1 -3120 -4018]@85 imagemask
-z&-'EFz
-!!%NKqu?]s!!!!$s8W*!z!"],0s1eU7!!!!`quHcTz!.XJ<5PP3Y!!!$!huFksz!WRZM
-#Q=]'!!!-$!!!-$z#Q=]'!WRZM!!!Q/!!!'"^]4?7+8c*=!<:sW!!#7Y!!!"Kn,NFg5PP3Y!.XJ<
-!!%N<!!!!`p](9os6p!g!'gA]!!*&W!!!!@qu?]ts53kW!$D1?!!3,X!!!!@rVup#s1eU7!"])0!!E8:!!!!0rr<$(
-s1eU7!"]*[!!iOS!!!!(s*t(Ss*t(L!!iOS!"]*[!!!!(s1eUFs*t(L!!iP>!"])0!!!!$s53l!rr<$!
-!!E8Z!$D4@!!!!$s53l!rr<$!!!E8j!'gJ`!!!!$s6p"QrVuou!!3,h!'gG_!!!!"s6p"QrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s82lsrVuou!!3,t!<;rszs82ls
-qu?]s!!*&s!<;rszs82lsqu?]s!!*&s!<;rszs82lsqu?]s!!*&u!WW&tzs8E'!qu?]s
-!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u
-!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E'!
-qu?]s!!*&u!WW&tzs8E'!qu?]s!!*&u!WW&tzs8E#uqu?]s!!*&s!<;rszs82lsqu?]s
-!!*&s!<;rszs82lsrVuou!!3,t!<<#u!!!!"s82lsrVuou!!3,t!.XtJ!!!!"s7cSDrVuou!!3,p
-!.XtJ!!!!"s7cSDrVuou!!3,p!.XtJ!!!!"s7cRYrVuou!!3,h!'gJ`!!!!$s6p"Qrr<$!!!E8j!$D4@!!!!$s6p"1
-rr<$!!!E8Z!$D4@!!!!$s53l!s*t(L!!iP^!"]*[!!!!(s1eUFs*t(L!!iP>!!iOS!!!!(s*t(Ss1eU7
-!!iOS!!iP>!!!!0s*t(Os1eU7!"])0!!E8:!!!!0rr<$"s53kW!$D1?!!3,X!!!!@rVuous6p!g!'gA]
-!!%N<!!!!`p](9oJ+*F<!'g5Y!!#7Y!!!"Kn,NFg+8c*=!<:sW!!",=!!!$!huE`W&,lP/!WTq8!!!9(!!!-$J,fQL"9/?$#QFc(!!!'"J,g,Zz!<:sW+8c*=
-!!!"Kn,P]Bz!$D+>s53kW!!!!0s8W+Lz!!E9$rr<$!zJ,f9Dz!!!Q0^]4?7~>
-Q
-q[1 0 0 1 0 0]concat
-24 18 true[1 0 0 1 -3209 -4018]@85 imagemask
-!"ZjF5O\Z&p]1?l!WW-"s8E-#rr`<$"98B's8N3$rr`<$!WW-"s8E#uquD6A!'frQ&&8~>
-Q
-q[1 0 0 1 0 0]concat
-71 108 true[1 0 0 1 -3248 -4020]@85 imagemask
-s8W-!s8W,s!<<*!
-s8W-!rW)uus8W-!s8E"Js8W-!s8W*!5QCc`s8W-!!$D7 at s8W-!rr<T0s8W-!s8RTSs8W-!s8W+L"98E$
-s8W-!^]FK8s8W-!s1eX7s8W-!s8Tk7J,fQKs8W,W!'^G`!!!!@huFjLz#Oh^(^]4?7!!2Qh#N,R^
-!!!#g!!D]jzp](Ekz!-eJEqu?]s!!#+]!<)ru!!!!=!!%KKz)uot'z!"Ju/++O=kz!"ZjF
-z!!!8^z!!!!$n,NFgz!VcWpz!!)osz!!!"Jzz56(Z`z!$?^k
-z!!!PFz!!!!(huE`Wz"7Q9jz!!Durz!!!&tzzrVuouz!.OtK
-z!!#66z!!!!@^]4?7z+5d,!z!"[ufz!!!8nz!!!!$p](9oz"8i-!z!!3'!
-z!!!$!zzs*t(Lz!.Vcaz!!%Maz!!!!`huE`Wz+7K71z!$Ct9
-z!!!Q)z!!!!0qu?]sz#Q=]'z!!iK'z!!!9(z!!!!$s*t(Lz"93lO
-z!!3,8z!!!'"^]4?7!!!!"s53kWz!<:sWz!!*&gz!!!$!n,NFgzs6p!gz!<;fo
-z!!%NDz!!!"Kp](9ozJ,B9Hz!.XnHz!!%NHz!!!"Kqu?]szJ,TEJ
-z!.XtJn,NFg!!%NJ!:Tsg!!!"KrW)]nzJ,TFmz!<<#uGQ7^D!!*&u!.4bH!!!$!rW#%\
-zs8E!^z!WW-!56(Z`!!3-!!$;1@!!!-$qu at gh!!!!$s82j=J,fQL#QO]%&&8/F!"],-!"[uf!!", at p](Qg!!!!`s7cR!p](9oJ,f9D"8i-!!<<)g!!E3#!!E9$n,NLh
-J,g,[s53kWs6p#<s8Tk7!.Y%Ks8W,7!!#7`s8W-!J,fR6s8W-!rr<$!+92B at s8Duu!!iQ(s8Vus!!!-$
-s8W,o!!!!"s8W-!huE`W!.Y%Ks1eU7!!#7`s8N'!!!!!0s8Vusz!WW2hz!!#7`z~>
-Q
-end showpage restore
-%%PageTrailer
-%%Trailer
-%%Pages: 1
diff --git a/ast-5.3-1/switchmap.c b/ast-5.3-1/switchmap.c
deleted file mode 100644
index d00e4b7..0000000
--- a/ast-5.3-1/switchmap.c
+++ /dev/null
@@ -1,2875 +0,0 @@
-/*
-*class++
-*  Name:
-*     SwitchMap
-
-*  Purpose:
-*     A Mapping that encapsulates a set of alternate Mappings.
-
-*  Constructor Function:
-c     astSwitchMap
-f     AST_SWITCHMAP
-
-*  Description:
-*     A SwitchMap is a Mapping which represents a set of alternate
-*     Mappings, each of which is used to transform positions within a 
-*     particular region of the input or output coordinate system of the 
-*     SwitchMap.
-*     
-*     A SwitchMap can encapsulate any number of Mappings, but they must
-*     all have the same number of inputs (Nin attribute value) and the 
-*     same number of outputs (Nout attribute value). The SwitchMap itself 
-*     inherits these same values for its Nin and Nout attributes. Each of
-*     these Mappings represents a "route" through the switch, and are
-*     referred to as "route" Mappings below. Each route Mapping transforms 
-*     positions between the input and output coordinate space of the entire 
-*     SwitchMap, but only one Mapping will be used to transform any given
-*     position. The selection of the appropriate route Mapping to use with 
-*     any given input position is made by another Mapping, called the
-*     "selector" Mapping. Each SwitchMap encapsulates two selector
-*     Mappings in addition to its route Mappings; one for use with the
-*     SwitchMap's forward transformation (called the "forward selector
-*     Mapping"), and one for use with the SwitchMap's inverse transformation 
-*     (called the "inverse selector Mapping"). The forward selector Mapping
-*     must have the same number of inputs as the route Mappings, but
-*     should have only one output. Likewise, the inverse selector Mapping
-*     must have the same number of outputs as the route Mappings, but
-*     should have only one input. 
-*
-*     When the SwitchMap is used to transform a position in the forward
-*     direction (from input to output), each supplied input position is
-*     first transformed by the forward transformation of the forward selector 
-*     Mapping. This produces a single output value for each input position 
-*     referred to as the selector value. The nearest integer to the selector 
-*     value is found, and is used to index the array of route Mappings (the 
-*     first supplied route Mapping has index 1, the second route Mapping has 
-*     index 2, etc). If the nearest integer to the selector value is less 
-*     than 1 or greater than the number of route Mappings, then the SwitchMap 
-*     output position is set to a value of AST__BAD on every axis. Otherwise, 
-*     the forward transformation of the selected route Mapping is used to 
-*     transform the supplied input position to produce the SwitchMap output 
-*     position. 
-*
-*     When the SwitchMap is used to transform a position in the inverse
-*     direction (from "output" to "input"), each supplied "output" position 
-*     is first transformed by the inverse transformation of the inverse 
-*     selector Mapping. This produces a selector value for each "output" 
-*     position. Again, the nearest integer to the selector value is found, 
-*     and is used to index the array of route Mappings. If this selector 
-*     index value is within the bounds of the array of route Mappings, then 
-*     the inverse transformation of the selected route Mapping is used to 
-*     transform the supplied "output" position to produce the SwitchMap 
-*     "input" position. If the selector index value is outside the bounds 
-*     of the array of route Mappings, then the SwitchMap "input" position is 
-*     set to a value of AST__BAD on every axis. 
-*
-*     In practice, appropriate selector Mappings should be chosen to
-*     associate a different route Mapping with each region of coordinate 
-*     space. Note that the SelectorMap class of Mapping is particularly 
-*     appropriate for this purpose.
-*
-*     If a compound Mapping contains a SwitchMap in series with its own
-*     inverse, the combination of the two adjacent SwitchMaps will be 
-*     replaced by a UnitMap when the compound Mapping is simplified using
-c     astSimplify.
-f     AST_SIMPLIFY.
-
-*  Inheritance:
-*     The SwitchMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The SwitchMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The SwitchMap class does not define any new functions beyond those
-f     The SwitchMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     13-MAR-2006 (DSB):
-*        Original version.
-*     17-MAR-2006 (DSB):
-*        Guard against AST__BAD selector values.
-*     9-MAY-2006 (DSB):
-*        Check selector Mapping pointers are not NULL before calling
-*        astEqual in Equal.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS SwitchMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "unitmap.h"             /* Unit Mappings */
-#include "channel.h"             /* I/O channels */
-#include "switchmap.h"           /* Interface definition for this class */
-#include "frame.h"               /* Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(SwitchMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(SwitchMap,Class_Init)
-#define class_vtab astGLOBAL(SwitchMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstSwitchMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstSwitchMap *astSwitchMapId_( void *, void *, int, void **, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetObjSize( AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static AstMapping *GetSelector( AstSwitchMap *, int, int *, int * );
-static AstMapping *GetRoute( AstSwitchMap *, double, int *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two SwitchMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     SwitchMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two SwitchMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a SwitchMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the SwitchMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *fsmap1;
-   AstMapping *fsmap2;
-   AstMapping *ismap1;
-   AstMapping *ismap2;
-   AstMapping *rmap1;
-   AstMapping *rmap2;
-   AstSwitchMap *that;        
-   AstSwitchMap *this;        
-   int fsinv1;
-   int fsinv2;
-   int isinv1;
-   int i;
-   int isinv2;
-   int nroute;
-   int result;                
-   int rinv1;
-   int rinv2;         
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two SwitchMap structures. */
-   this = (AstSwitchMap *) this_object;
-   that = (AstSwitchMap *) that_object;
-
-/* Check the second object is a SwitchMap. We know the first is a
-   SwitchMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsASwitchMap( that ) ) {
-
-/* Check they have the same number of route mappings. */
-      nroute = this->nroute;
-      if( that->nroute == nroute ) {
-   
-/* Get the forward selector Mappings from the two SwitchMaps. */
-         fsmap1 = GetSelector( this, 1, &fsinv1, status );
-         fsmap2 = GetSelector( that, 1, &fsinv2, status );
-   
-/* Are they equal? */
-         if( ( !fsmap1 && !fsmap2 ) || 
-             ( fsmap1 && fsmap2 && astEqual( fsmap1, fsmap2 ) ) ) {
-   
-/* Get the inverse selector Mappings from the two SwitchMaps. */
-            ismap1 = GetSelector( this, 0, &isinv1, status );
-            ismap2 = GetSelector( that, 0, &isinv2, status );
-   
-/* Are they equal? */
-            if( ( !ismap1 && !ismap2 ) || 
-                ( ismap1 && ismap2 && astEqual( ismap1, ismap2 ) ) ) {
-   
-/* Loop over the route mappings, breaking as soon as two unequal route
-   Mappings are found. Re-instate the original values for the route
-   Mapping Invert flag after testing the route Mappings for equality. */
-               result = 1;
-               for( i = 0; result && i < nroute; i++ ) {
-                  rmap1 = GetRoute( this, (double) ( i + 1 ), &rinv1, status );
-                  rmap2 = GetRoute( that, (double) ( i + 1 ), &rinv2, status );
-                  if( !astEqual( rmap1, rmap2 ) ) result = 0;
-                  astSetInvert( rmap2, rinv2 );
-                  astSetInvert( rmap1, rinv1 );
-               }
-            }
-   
-/* Reinstate the invert flags for the inverse selector Mappings. Ensure
-   this is done in the opposite order to which the selector Mappings were
-   obtained (in case they are in fact the same Mapping). */
-            if( ismap2 ) astSetInvert( ismap2, isinv2 );
-            if( ismap1 ) astSetInvert( ismap1, isinv1 );
-         }
-   
-/* Reinstate the invert flags for the forward selector Mappings. Ensure
-   this is done in the oppsote order to which the selector Mappings were
-   obtained (in case they are in fact the same Mapping). */
-         if( fsmap2 ) astSetInvert( fsmap2, fsinv2 );
-         if( fsmap1 ) astSetInvert( fsmap1, fsinv1 );
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     SwitchMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied SwitchMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the SwitchMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstSwitchMap *this;
-   int i;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the SwitchMap structure. */
-   this = (AstSwitchMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by this class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   result += astGetObjSize( this->fsmap );
-   result += astGetObjSize( this->ismap );
-
-   for( i = 0; i < this->nroute; i++ ) {
-      result += astGetObjSize( this->routemap[ i ] );
-   }    
-
-   result += astGetObjSize( this->routeinv );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static AstMapping *GetRoute( AstSwitchMap *this, double sel, int *inv, int *status ){
-/*
-*  Name:
-*     GetRoute
-
-*  Purpose:
-*     Return a pointer to a route Mapping, handling all Invert flags.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstMapping *GetRoute( AstSwitchMap *this, double sel, int *inv, int *status )
-
-*  Class Membership:
-*     SwitchMap method.
-
-*  Description:
-*     This function returns a pointer to a route Mapping (specified by a
-*     floating point selector value) for the given SwitchMap, taking account 
-*     of the state of the Invert flag of both the route Mapping and the
-*     SwitchMap.
-
-*  Parameters:
-*     this
-*        Pointer to the SwitchMap.
-*     sel
-*        The selector value. The nearest integer value (minus 1) is used
-*        to index the array of route Mappings stored in the SwitchMap. A
-*        NULL pointer is returned if the selector value is out of range.
-*     inv
-*        Pointer to an int in which to return the original value of the
-*        Invert flag of the returned Mapping. The astSetInvert method
-*        should be used to re-instate this value once all use of the Mapping 
-*        has been completed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     A pointer to the route Mapping to use. Note, the returned pointer 
-*     should NOT be annulled when no longer needed. NULL is returned
-*     (without error) if the SwitchMap does not have a route Mapping for the 
-*     requested selector value. The forward transformation of the
-*     returned Mapping will implenment the forward transformation of the
-*     required route Mapping (and vice-versa).
-
-*/
-
-/* Local Variables: */
-   AstMapping *ret;
-   int rindex;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Check selector value is good. */
-   if( sel != AST__BAD ) {
-
-/* Convert the supplied floating point selector value into an integer
-   index into the array of route Mappings held in the supplied SwitchMap. */
-      rindex = (int)( sel + 0.5 ) - 1;
-
-/* Return the null pointer if the index is out of range. */
-      if( rindex >= 0 && rindex < this->nroute ) {
-
-/* Get the required route Mapping. */
-         ret = ( this->routemap )[ rindex ];
-
-/* Return its original invert flag. */
-         *inv = astGetInvert( ret );
-
-/* Set the Invert flag back to the value it had when the SwitchMap was
-   created. */
-         astSetInvert( ret, this->routeinv[ rindex ] );
-
-/* If the SwitchMap has since been inverted, also invert the returned
-   route Mapping, so that the forward transformation of the returned 
-   Mapping implements the forward transformation of the supplied 
-   SwitchMap (and vice-versa). */
-         if( astGetInvert( this ) ) astInvert( ret );
-      }
-   }
-
-/* Return the pointer. */
-   return ret;
-
-}
-
-static AstMapping *GetSelector( AstSwitchMap *this, int fwd, int *inv, int *status ){
-/*
-*  Name:
-*     GetSelector
-
-*  Purpose:
-*     Return a pointer to a selector Mapping, handling all Invert flags.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstMapping *GetSelector( AstSwitchMap *this, int fwd, int *inv, int *status )
-
-*  Class Membership:
-*     SwitchMap method.
-
-*  Description:
-*     This function returns a pointer to either the forward or inverse
-*     selector Mapping for the given SwitchMap, taking account of the
-*     state of the Invert flag of bothe the selector Mapping and the
-*     SwitchMap.
-
-*  Parameters:
-*     this
-*        Pointer to the SwitchMap.
-*     fwd
-*        If non-zero, return the forward selector Mapping. Otherwise,
-*        return the inverse selector Mapping.
-*     inv
-*        Pointer to an int in which to return the original value of the
-*        Invert flag of the returned Mapping. The astSetInvert method
-*        should be used to re-instate this value once all use of the Mapping 
-*        has been completed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returns:
-*     A pointer to the selector Mapping to use. Note, the returned pointer 
-*     should NOT be annulled when no longer needed. NULL is returned
-*     (without error) if the SwitchMap does not have a Mapping for the 
-*     requested selector.
-
-*/
-
-/* Local Variables: */
-   AstMapping *ret;
-   int swinv;
-
-/* Initialise */
-   ret = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* See if the SwitchMap has been inverted. */
-   swinv = astGetInvert( this );
-
-/* If the SwitchMap has been inverted, the forward and inverse selector
-   Mappings should be reversed. */
-   if( ( !swinv && !fwd ) || ( swinv && fwd ) ){
-      ret = this->ismap;
-      if( ret ) {
-         *inv = astGetInvert( ret );
-         astSetInvert( ret, this->isinv );
-      }
-
-   } else {
-      ret = this->fsmap;
-      if( ret ) {
-         *inv = astGetInvert( ret );
-         astSetInvert( ret, this->fsinv );
-      }
-   }
-
-   if( ret && swinv ) astInvert( ret );
-
-/* Return the pointer. */
-   return ret;
-
-}
-
-void astInitSwitchMapVtab_(  AstSwitchMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSwitchMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a SwitchMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     void astInitSwitchMapVtab( AstSwitchMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     SwitchMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the SwitchMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsASwitchMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->Rate = Rate;
-   mapping->RemoveRegions = RemoveRegions;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "SwitchMap", "Alternate regionalised Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     SwitchMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstSwitchMap *this;       /* Pointer to SwitchMap structure */
-   int i;                      /* Loop count */
-   int result;                 /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the SwitchMap structure. */
-   this = (AstSwitchMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->fsmap, mode, extra, fail );
-   if( !result ) result = astManageLock( this->ismap, mode, extra, fail );
-   for( i = 0; i < this->nroute; i++ ) {
-      if( !result ) result = astManageLock( this->routemap[ i ], mode, 
-                                            extra, fail );
-   }
-
-   return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a SwitchMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     SwitchMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated SwitchMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated SwitchMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated SwitchMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the SwitchMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        SwitchMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated SwitchMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSwitchMap *map;
-   AstMapping *new;
-   int i; 
-   int nroute;
-   int result;
-   int fsinv_old;
-   int isinv_old;
-   int *rinv_old;
-   AstMapping *sfsmap;
-   AstMapping *sismap;
-   int simp;
-   AstMapping **srmap;
-   AstSwitchMap *swneb;
-   int ilo;
-   int equal;
-
-/* Initialise.*/
-   result = -1;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to this SwitchMap, and note the number of route Mappings. */
-   map = (AstSwitchMap *) this;
-   nroute = map->nroute;
-
-/* Temporarily put the Invert flag of all encapsulated Mappings (both
-   route and selector) back to the values they had when the SwitchMap was
-   created, noting their current values so that they can be re-instated
-   later. If the SwitchMap itself has been inverted, swap all the original 
-   invert flags. */
-   if( map->fsmap ) {
-      fsinv_old = astGetInvert( map->fsmap );
-      astSetInvert( map->fsmap, map->fsinv );
-   } else {
-      fsinv_old = 0;
-   }
-
-   if( map->ismap ) {
-      isinv_old = astGetInvert( map->ismap );
-      astSetInvert( map->ismap, map->isinv );
-   } else {
-      isinv_old = 0;
-   }
-
-   rinv_old = astMalloc( sizeof( int )*nroute );
-   if( astOK ) {
-      for( i = 0; i < nroute; i++ ) {
-         rinv_old[ i ] = astGetInvert( map->routemap[ i ] );
-         astSetInvert( map->routemap[ i ], map->routeinv[ i ] );
-      }
-   }
-
-/* If possible, merge the SwitchMap with a neighbouring SwitchMap. */
-/* =============================================================== */
-/* Only do this if we are combining the Mappings in series. */
-   if( series ) {
-
-/* Is the higher neighbour a SwitchMap? If so get a pointer to it, and
-   note the index of the lower of the two adjacent SwitchMaps. */
-      if( where < ( *nmap - 1 ) && 
-          astIsASwitchMap( ( *map_list )[ where + 1 ] ) ){
-         swneb = (AstSwitchMap *) ( *map_list )[ where + 1 ];
-         ilo = where;
-
-/* If not, is the lower neighbour a SwitchMap? If so get a pointer to it, and
-   note the index of the lower of the two adjacent SwitchMaps. */
-      } else if( where > 0 && 
-                 astIsASwitchMap( ( *map_list )[ where - 1 ] ) ){
-         swneb = (AstSwitchMap *) ( *map_list )[ where - 1 ];
-         ilo =  where - 1;
-
-      } else {
-         swneb = NULL;
-      }
-
-/* If a neighbouring SwitchMap was found, we can replace the pair by a
-   UnitMap if the two SwitchMaps are equal but have opposite values for
-   their Invert flags. Temporarily invert the neighbour, then compare 
-   the two SwitchMaps for equality, then re-invert the neighbour. */
-      if( swneb ) {
-         astInvert( swneb );
-         equal = astEqual( map, swneb );
-         astInvert( swneb );
-
-/* If the two SwitchMaps are equal but opposite, annul the first of the two 
-   Mappings, and replace it with a UnitMap. Also set the invert flag. */ 
-         if( equal ) {
-            new = (AstMapping *) astUnitMap( astGetNin( ( *map_list )[ ilo ] ), "", status );
-            (void) astAnnul( ( *map_list )[ ilo ] );
-            ( *map_list )[ ilo ] = new;
-            ( *invert_list )[ ilo ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-            (void) astAnnul( ( *map_list )[ ilo + 1 ] );
-            for ( i = ilo + 2; i < *nmap; i++ ) {
-               ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-               ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-            }
-
-/* Clear the vacated element at the end. */
-            ( *map_list )[ *nmap - 1 ] = NULL;
-            ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap )--;
-            result = where;
-         }
-      }
-   }
-
-/* Attempt to simplify the SwitchMap on its own. */
-/* ============================================= */
-/* Only do this if no change was made above. */
-   if( result == -1 ) {
-
-/* If the SwitchMap is inverted, create an equal SwitchMap which is not 
-   inverted. To do this, invert and swap the selector Mappings, and
-   invert all the route Mappings. We use astSetInvert rather than astInvert 
-   because two or more more stored pointers may point to the same Mapping 
-   in which case that Mapping would be inverted more than once with
-   unpredictable results. */
-      if( ( *invert_list )[ where ] ) {
-         if( map->fsmap ) astSetInvert( map->fsmap, !(map->fsinv) );
-         if( map->ismap ) astSetInvert( map->ismap, !(map->isinv) );
-         for( i = 0; i < nroute; i++ ) {
-            astSetInvert( map->routemap[ i ], !(map->routeinv[ i ]) );
-         }
-   
-         new = (AstMapping *) astSwitchMap( map->ismap, map->fsmap, nroute, (void **) map->routemap, "", status );
-   
-         (void) astAnnul( ( *map_list )[ where ] );
-         ( *map_list )[ where ] = (AstMapping *) new;
-         ( *invert_list )[ where ] = 0;
-         result = where;
-
-/* Otherwise, try to simplify each of the encapsulated Mappings, noting
-   if any simplification takes place. */
-      } else {
-         sfsmap = ( map->fsmap ) ? astSimplify( map->fsmap ) : NULL;
-         sismap = ( map->ismap ) ? astSimplify( map->ismap ) : NULL;
-         simp = ( sfsmap != map->fsmap ) || ( sismap != map->ismap );
-   
-         srmap = astMalloc( sizeof( AstMapping * )*nroute );
-         if( astOK ) {
-            for( i = 0; i < nroute; i++ ) {
-               srmap[ i ] = astSimplify( map->routemap[ i ] );
-               simp = simp || ( srmap[ i ] != map->routemap[ i ] );
-            }
-         }
-
-/* If any simplification took place, construct a new SwitchMap from these 
-    simplified Mappings. */
-         if( simp ) { 
-            (void) astAnnul( ( *map_list )[ where ] );
-            ( *map_list )[ where ] = (AstMapping *) astSwitchMap( sfsmap, sismap,
-                                                    nroute, (void **) srmap, "", status );
-            result = where;
-         }
-
-/* Release resources. */
-         if( sfsmap ) sfsmap = astAnnul( sfsmap );
-         if( sismap ) sismap = astAnnul( sismap );
-         if( srmap ) {
-            for( i = 0; i < nroute; i++ ) srmap[ i ] = astAnnul( srmap[ i ] );
-            srmap = astFree( srmap );
-         }
-      }
-   }
-
-/* Re-instate the original Invert values for the encapsulated Mappings. */
-   if( map->fsmap ) astSetInvert( map->fsmap, fsinv_old );
-   if( map->ismap ) astSetInvert( map->ismap, isinv_old );
-   if( rinv_old ) {
-      for( i = 0; i < nroute; i++ ) {
-         astSetInvert( map->routemap[ i ], rinv_old[ i ] );
-      }
-      rinv_old = astFree( rinv_old );
-   }
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     SwitchMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. Also evaluates the second derivative.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   AstSwitchMap *map;
-   AstMapping *smap;
-   AstMapping *rmap;
-   double result;
-   double sel;
-   int fsinv;
-   int rinv;
-   int nin;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Get a pointer to the SwitchMap structure. */
-   map = (AstSwitchMap *) this;
-
-/* Get a pointer to the effective foward selector Mapping, and its current 
-   invert flag (this takes account of whether the SwtichMap has been
-   inverted or not). This call resets the selector's invert flag temporarily 
-   back to the value it had when the SwitchMap was created. */
-   smap = GetSelector( map, 1, &fsinv, status );
-
-/* If the SwitchMap has no forward selector Mapping, return AST__BAD. */
-   if( smap ) {
-
-/* Get the number of inputs */
-      nin = astGetNin( smap );
-
-/* Transform the supplied position using the selector Mapping. The output
-   value is the selector value that indicates which route Mapping to use. */
-      astTranN( smap, 1, nin, 1, at, 1, 1, 1, &sel );
-
-/* Get the index of the route Mapping to use, and check it is valid (if
-   not, return AST__BAD if not). This takes account of whether the
-   SwitchMap has been inverted, and also temporarily re-instates the
-   original value of the route Mapping's Invert flag . */
-      rmap = GetRoute( map, sel, &rinv, status );
-      if( rmap ) {
-
-/* Use the astRate method of the route Mapping. */
-         result = astRate( rmap, at, ax1, ax2 );
-
-/* Reset the Invert flag for the route Mapping. */
-         astSetInvert( rmap, rinv );
-      }
-   
-/* Reset the Invert flag for the selector Mapping. */
-      astSetInvert( smap, fsinv );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     SwitchMap method (over-rides the astRemoveRegions method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a SwitchMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel SwitchMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the SwitchMap class invokes the
-*     astRemoveRegions method on all the component Mappings, and joins
-*     the results together into a new SwitchMap.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstMapping **temp;            /* Array of new route Mappings */
-   AstMapping *newfsmap;         /* New forward selector Mapping */
-   AstMapping *newismap;         /* New inverse selector Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   AstSwitchMap *new;            /* Pointer to new SwitchMap */
-   AstSwitchMap *this;           /* Pointer to SwitchMap structure */
-   int changed;                  /* Has any mapping been changed? */
-   int i;                        /* Loop count */
-   int nax;                      /* Number of Frame axes */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the SwitchMap. */
-   this = (AstSwitchMap *) this_mapping;
-
-/* Allocate an array to hold the modified Mapping pointers. */
-   temp = astMalloc( sizeof( AstMapping *)*( this->nroute ) );
-   if( astOK ) {
-
-/* Invoke the astRemoveRegions method on all the component Mappings. */
-      changed = 0;
-      for( i = 0; i < this->nroute; i++ ) {
-         temp[ i ] = astRemoveRegions( this->routemap[ i ] );
-
-/* Note if any Mapping was changed. */
-         if( temp[ i ] != this->routemap[ i ] ) {
-            changed = 1;
-
-/* The implementation of the astRemoveRegions method provided by the
-   Region class returns a Frame rather than a UnitMap. But we need
-   Mappings here, not Frames. So if the new Mapping is a Frame, replace 
-   it with an equivalent UnitMap. */
-            if( astIsAFrame( temp[ i ] ) ) {
-               nax = astGetNin( temp[ i ] );
-               (void) astAnnul( temp[ i ] );
-               temp[ i ] = (AstMapping *) astUnitMap( nax, " ", status );
-            }
-         }
-      }
-
-/* And on the other ancillary Mappings */
-      if( this->fsmap ) {
-         newfsmap = astRemoveRegions( this->fsmap );
-         if( newfsmap != this->fsmap ) {
-            changed = 1;
-            if( astIsAFrame( newfsmap ) ) {
-               nax = astGetNin( newfsmap );
-               (void) astAnnul( newfsmap );
-               newfsmap = (AstMapping *) astUnitMap( nax, " ", status );
-            }
-         }
-
-      } else {
-         newfsmap = NULL;
-      }
-
-      if( this->ismap ) {
-         newismap = astRemoveRegions( this->ismap );
-         if( newismap != this->ismap ) {
-            changed = 1;
-            if( astIsAFrame( newismap ) ) {
-               nax = astGetNin( newismap );
-               (void) astAnnul( newismap );
-               newismap = (AstMapping *) astUnitMap( nax, " ", status );
-            }
-         }
-
-      } else {
-         newismap = NULL;
-      }
-
-/* If no component was modified, just return a clone of the supplied
-   pointer. */
-      if( ! changed ) {
-         result = astClone( this );
-
-/* Otherwise, we need to create a new Mapping to return. We take a deep 
-   copy of the supplied SwitchMap and then modify the Mappings so that 
-   we retain any extra information in the supplied SwitchMap. */
-      } else {
-         new = astCopy( this );
-
-         for( i = 0; i < this->nroute; i++ ) {
-            (void) astAnnul( new->routemap[ i ] );
-            new->routemap[ i ] = astClone( temp[ i ] );
-         }
-
-         if( newfsmap ) {
-            (void) astAnnul( new->fsmap );
-            new->fsmap = astClone( newfsmap );
-         }
-
-         if( newismap ) {
-            (void) astAnnul( new->ismap );
-            new->ismap = astClone( newismap );
-         }
-
-         result = (AstMapping *) new;
-      }
-
-/* Free resources. */
-      for( i = 0; i < this->nroute; i++ ) {
-         temp[ i ] = astAnnul( temp[ i ] );
-      }
-
-      if( newfsmap ) newfsmap = astAnnul( newfsmap );
-      if( newismap ) newismap = astAnnul( newismap );
-   }
-
-   temp = astFree( temp );
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-int astSwitchList_( AstSwitchMap *this, int invert, int *nmap, 
-                    AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*+
-*  Name:
-*     astSwitchList
-
-*  Purpose:
-*     Extract the selector and route Mappings from a SwitchMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     int astSwitchList( AstSwitchMap *this, int invert, int *nmap, 
-*                        AstMapping ***map_list, int **invert_list ) 
-
-*  Class Membership:
-*     SwitchMap member function.
-
-*  Description:
-*     This function extracts the route and selector Mappings form a
-*     SwitchMap.
-
-*  Parameters:
-*     this
-*        Pointer to the SwitchMap to be decomposed (it is not actually 
-*        modified by this function).
-*     invert
-*        The value to which the SwitchMap's Invert attribute is to be
-*        (notionally) set before performing the decomposition. Normally, 
-*        the value supplied here will be the actual Invert value obtained 
-*        from the SwitchMap (e.g. using astGetInvert).  Sometimes, however, 
-*        when a SwitchMap is encapsulated within another structure, that 
-*        structure may retain an Invert value (in order to prevent external
-*        interference) which should be used instead.
-*
-*        Note that the actual Invert value of the SwitchMap supplied is
-*        not used (or modified) by this function.
-*     nmap
-*        The address of an int in which to return a count of the number of
-*        individual Mappings in the decomposition. The supplied value is
-*        ignored.
-*     map_list
-*        Address of a pointer to an array of Mapping pointers. The value
-*        supplied on entry is ignored. On exit, it points at a dynamically 
-*        allocated array containing Mapping pointers ("*nmap" in number) that 
-*        result from the decomposition requested. 
-*
-*        The returned Mapping pointers returned will identify the following 
-*        sequence of Mappings; forward selector mapping (or NULL if the
-*        SwitchMap has no forward selector Mapping), inverse selector 
-*        mapping (or NULL if the SwitchMap has no inverse selector Mapping),
-*        the route Mappings in the order they were supplied when the 
-*        SwitchMap was constructed.
-*
-*        All the Mapping pointers returned by this function should be
-*        annulled by the caller, using astAnnul, when no longer
-*        required. The dynamic array holding these pointers should
-*        also be freed, using astFree.
-*     invert_list
-*        Address of a pointer to an array of int. The value supplied on 
-*        entry is ignored. On exit, it points at a dynamically allocated 
-*        array containing Invert attribute values ("*nmap" in number) that
-*        result from the decomposition requested. 
-*
-*        The returned Invert values returned identify the values which must
-*        be assigned to the Invert attributes of the corresponding
-*        Mappings (whose pointers are in the "*map_list" array) before
-*        they are applied. Note that these values may differ from the
-*        actual Invert attribute values of these Mappings, which are
-*        not relevant.
-*
-*        The dynamic array holding these values should be freed by the
-*        caller, using astFree, when no longer required.
-
-*  Returned Value:
-*     The number of route Mappings stored in the SwitchMap.
-
-*  Notes:
-*     - It is unspecified to what extent the original SwitchMap and the
-*     individual (decomposed) Mappings are inter-dependent. Consequently, 
-*     the individual Mappings cannot be modified without risking 
-*     modification of the original SwitchMap.
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then the *nmap value, the
-*     list of Mapping pointers and the list of Invert values will all
-*     be returned unchanged.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *map;              /* Pointer to Mapping to return */
-   int inv;                      /* Original Invert flag for Mapping */
-   int i;                        /* Route Mapping index */
-   int oldinv;                   /* Original Invert flag for SwitchMap */
-   int result;                   /* Returned value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Store the numbe of route Mappings */
-   result = this->nroute;
-   *nmap = result + 2;
-
-/* Allocate the required arrays. */
-   *map_list = astMalloc( sizeof( AstMapping * )*(size_t) *nmap );
-   *invert_list = astMalloc( sizeof( int )*(size_t) *nmap );
-
-/* Check the pointers can be used safely. */
-   if( astOK ) {
-
-/* Temporaily set the requested Invert flag for the SwitchMap. */
-      oldinv = astGetInvert( this );
-      astSetInvert( this, invert );
-
-/* Get the forward selector Mapping. */
-      map = GetSelector( this, 1, &inv, status );
-
-/* If the SwitchMap has a forward selector Mapping, return a clone of the
-   Mapping pointer, and the invert flag to be used with it, then
-   re-instate the original invert flag value (which was modified by
-   GetSelector). */
-      if( map ) {
-         ( *map_list )[ 0 ] = astClone( map );
-         ( *invert_list )[ 0 ] = astGetInvert( map );
-         astSetInvert( map, inv );
-
-/* If the SwitchMap does not has a forward selector Mapping, return a
-   NULL pointer. */
-      } else {
-         ( *map_list )[ 0 ] = NULL;   
-         ( *invert_list )[ 0 ] = 0;
-      }
-
-/* Likewise, get and return the inverse selector Mapping.*/
-      map = GetSelector( this, 0, &inv, status );
-      if( map ) {
-         ( *map_list )[ 1 ] = astClone( map );
-         ( *invert_list )[ 1 ] = astGetInvert( map );
-         astSetInvert( map, inv );
-      } else {
-         ( *map_list )[ 1 ] = NULL;   
-         ( *invert_list )[ 1 ] = 0;
-      }
-
-/* Loop round all route Mappings. */
-      for( i = 0; i < result; i++ ){
-
-/* Get the next route Mapping. */
-         map = GetRoute( this, (double) i + 1.0, &inv, status );
-
-/* If the SwitchMap has a route Mapping for the current selector value, 
-   return a clone of the Mapping pointer, and the invert flag to be used 
-   with it, then re-instate the original invert flag value (which was 
-   modified by GetRoute). */
-         if( map ) {
-            ( *map_list )[ i + 2 ] = astClone( map );
-            ( *invert_list )[ i + 2 ] = astGetInvert( map );
-            astSetInvert( map, inv );
-
-/* If the SwitchMap does not has a route Mapping for the current selector
-   value, return a NULL pointer. */
-         } else {
-            ( *map_list )[ i + 2 ] = NULL;   
-            ( *invert_list )[ i + 2 ] = 0;
-         }
-
-      }
-
-/* Re-instate the original Ivert flag for the SwitchMap. */
-      astSetInvert( this, oldinv );
-
-   }
-
-/* If an error has occurred, free the returned arrays. */
-   if( !astOK ) {
-      *map_list = astFree( *map_list );
-      *invert_list= astFree( *invert_list );
-      result= 0;
-      *nmap = 0;
-   } 
-
-/* Return the result */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a SwitchMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     SwitchMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a SwitchMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Mapping.
-*     This implies applying each of the SwitchMap's component Mappings in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the SwitchMap.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the SwitchMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstMapping *rmap;  
-   AstMapping *selmap;
-   AstPointSet *ps1;
-   AstPointSet *ps1a;
-   AstPointSet *ps2;
-   AstPointSet *ps2a;
-   AstPointSet *result;
-   AstPointSet *selps;
-   AstSwitchMap *map;  
-   double **in_ptr;
-   double **out_ptr;
-   double **ptr1;
-   double **ptr2;
-   double **sel_ptr;
-   double *outv;
-   double *sel;
-   int *popmap;
-   int iroute;
-   int ipoint;
-   int j;
-   int k;
-   int maxpop;
-   int ncin;
-   int ncout;
-   int npoint;
-   int nroute;
-   int rindex;
-   int rinv;
-   int selinv;
-   int totpop;
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the SwitchMap. */
-   map = (AstSwitchMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
-   Mappings of the SwitchMap to generate the output coordinate values. */
-
-/* Get the number of input and output coords. */
-   if( forward ) {
-      ncin = astGetNin( this );
-      ncout = astGetNout( this );
-   } else {
-      ncin = astGetNout( this );
-      ncout = astGetNin( this );
-   }
-
-/* Get the appropriate selector Mapping. */
-   selmap = GetSelector( map, forward, &selinv, status );
-
-/* Transform the supplied positions using the above selector Mapping. */
-   selps = astTransform( selmap, in, forward, NULL );
-
-/* Get a pointer to the array holding the selector value. */
-   sel_ptr = astGetPoints( selps );
-
-/* Get a pointer to the array holding the input values. */
-   in_ptr = astGetPoints( in );
-
-/* Get a pointer to the array in which to store the results, and the total
-   number of points being transformed. */
-   out_ptr = astGetPoints( result );
-   npoint = astGetNpoint( result );
-
-/* We now count how many positions are to be tranformed by each of the
-   route Mappings. */
-   nroute = map->nroute;
-   popmap = astMalloc( sizeof( int )*nroute );
-   if( astOK ) {
-      for( iroute = 0; iroute < nroute; iroute++ ) popmap[ iroute ] = 0;
-
-      sel = sel_ptr[ 0 ];
-      for( ipoint = 0; ipoint < npoint; ipoint++,sel++ ) {
-         if( *sel != AST__BAD ) {
-            rindex = (int)( *sel + 0.5 ) - 1;
-            if( rindex >= 0 && rindex < nroute ) ( popmap[ rindex ] )++;
-         }
-      }   
-
-/* Find the number of points transformed by the most popular route Mapping. 
-   Also find the total number of points transformed by any route Mapping. */
-      totpop = 0;
-      maxpop = 0;
-      for( iroute = 0; iroute < nroute; iroute++ ) {
-         if( popmap[ iroute ] > maxpop ) maxpop = popmap[ iroute ];
-         totpop += popmap[ iroute ];
-      }
-      if( maxpop == 0 ) maxpop = 1;
-
-/* If some of the points are not transformed by any route Mapping.
-   Initialise the whole output array to hold AST__BAD at every point. */
-      if( totpop < npoint ) {
-         for( j = 0; j < ncout; j++ ) {
-            outv = out_ptr[ j ];
-            for( ipoint = 0; ipoint < npoint; ipoint++ ) *(outv++) = AST__BAD;
-         }
-      }
-
-/* Create a PointSet large enough to hold all the supplied positions
-   which are to be transformed by the most popular route Mapping. */
-      ps1 = astPointSet( maxpop, ncin, "", status );
-      ptr1 = astGetPoints( ps1 );
-
-/* Create a PointSet large enough to hold all the output positions
-   created by the most popular route Mapping. */
-      ps2 = astPointSet( maxpop, ncout, "", status );
-      ptr2 = astGetPoints( ps2 );
-      if( astOK ) {
-
-/* Loop round each route Mapping which is used by at least 1 point. */
-         for( iroute = 0; iroute < nroute; iroute++ ) {
-            if( popmap[ iroute ] >0 ) {
-               rmap = GetRoute( map, (double)( iroute + 1 ), &rinv, status );
-
-/* Construct two PointSets of the correct size to hold the input and
-   output points to be processed with the current route Mapping. We
-   re-use the memory allocated for the largest route Mapping's PointSet. */
-               if( popmap[ iroute ] != maxpop ) {
-                  ps1a = astPointSet( popmap[ iroute ], ncin, "", status );
-                  astSetPoints( ps1a, ptr1 );
-                  ps2a = astPointSet( popmap[ iroute ], ncout, "", status );
-                  astSetPoints( ps2a, ptr2 );
-               } else {
-                  ps1a = astClone( ps1 );
-                  ps2a = astClone( ps2 );
-               }
-
-/* Fill the input PointSet with the input positions which are to be
-   transformed using the current route Mapping. */
-               sel = sel_ptr[ 0 ];
-               k = 0;
-               for( ipoint = 0; ipoint < npoint; ipoint++,sel++ ) {
-                  if( *sel != AST__BAD ) {
-                     rindex = (int)( *sel + 0.5 ) - 1;
-                     if( rindex == iroute ) {
-                        for( j = 0; j < ncin; j++ ) {
-                           ptr1[ j ][ k ] = in_ptr[ j ][ ipoint ];
-                        }
-                        k++;
-                     }
-                  }
-               }   
-
-/* Use the route Mapping to transform this PointSet. */
-               (void) astTransform( rmap, ps1a, forward, ps2a );
-
-/* Copy the axis values from the resulting PointSet back into the results
-   array. */
-               sel = sel_ptr[ 0 ];
-               k = 0;
-               for( ipoint = 0; ipoint < npoint; ipoint++,sel++ ) {
-                  if( *sel != AST__BAD ) {
-                     rindex = (int)( *sel + 0.5 ) - 1;
-                     if( rindex == iroute ) {
-                        for( j = 0; j < ncout; j++ ) {
-                           out_ptr[ j ][ ipoint ] = ptr2[ j ][ k ];
-                        }
-                        k++;
-                     }
-                  }   
-               }
-
-/* Free resources. */
-               ps1a = astAnnul( ps1a );
-               ps2a = astAnnul( ps2a );
-
-/* Re-instate the Invert flag for the route Mapping. */
-               astSetInvert( rmap, rinv );
-            }
-         }
-      }
-
-/* Free resources. */
-      ps1 = astAnnul( ps1 );
-      ps2 = astAnnul( ps2 );
-   }
-
-   selps = astAnnul( selps );
-   popmap = astFree( popmap );
-
-/* Re-instate the Invert flag of the selector Mapping. */
-   astSetInvert( selmap, selinv );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for SwitchMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for SwitchMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Mappings within the SwitchMap.
-*/
-
-/* Local Variables: */
-   AstSwitchMap *in;                /* Pointer to input SwitchMap */
-   AstSwitchMap *out;               /* Pointer to output SwitchMap */
-   int i;                           /* Loop count */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output SwitchMaps. */
-   in = (AstSwitchMap *) objin;
-   out = (AstSwitchMap *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Mappings,etc, from the output SwitchMap. */
-   out->fsmap = NULL;
-   out->ismap = NULL;
-   out->routemap = NULL;
-   out->routeinv = NULL;
-
-/* Make copies of these Mappings, etc, and store pointers to them in the output
-   SwitchMap structure. */
-   if( in->fsmap ) out->fsmap = astCopy( in->fsmap );
-   if( in->ismap ) out->ismap = astCopy( in->ismap );
-
-   out->routemap = astMalloc( sizeof( AstMapping * )*( in->nroute ) );
-   out->routeinv = astMalloc( sizeof( int )*( in->nroute ) );
-   if( astOK ) {
-      for( i = 0; i < in->nroute; i++ ) {
-         out->routemap[ i ] = astCopy( in->routemap[ i ] );
-         out->routeinv[ i ] = in->routeinv[ i ];
-      }
-   }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for SwitchMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for SwitchMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstSwitchMap *this;              /* Pointer to SwitchMap */
-   int i;
-
-/* Obtain a pointer to the SwitchMap structure. */
-   this = (AstSwitchMap *) obj;
-
-/* Free dynamically allocated resources. */
-   if( this->fsmap ) this->fsmap = astAnnul( this->fsmap );
-   if( this->ismap ) this->ismap = astAnnul( this->ismap );
-   for( i = 0; i < this->nroute; i++ ) {
-      this->routemap[ i ] = astAnnul( this->routemap[ i ] );
-   }   
-   this->routemap = astFree( this->routemap );
-   this->routeinv = astFree( this->routeinv );
-
-/* Clear the remaining SwitchMap variables. */
-   this->nroute = 0;
-   this->fsinv = 0;
-   this->isinv = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for SwitchMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the SwitchMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the SwitchMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstSwitchMap *this;
-   int ival;          
-   int set;           
-   int i;
-   char buf[ 20 ];    
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the SwitchMap structure. */
-   this = (AstSwitchMap *) this_object;
-
-/* Write out values representing the instance variables for the SwitchMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Forward selector Mapping */
-/* ------------------------ */
-   if( this->fsmap ) {
-      astWriteObject( channel, "FSMap", 1, 1, this->fsmap, 
-                      "Forward selector Mapping" );
-
-/* Forward selector Invert flag. */
-/* ----------------------------- */
-      ival = this->fsinv;
-      set = ( ival != 0 );
-      astWriteInt( channel, "FSInv", set, 0, ival,
-                   ival ? "Fwd selector used in inverse direction" :
-                          "Fwd selector used in forward direction" );
-   }
-
-
-/* Inverse selector Mapping */
-/* ------------------------ */
-   if( this->ismap ) {
-      astWriteObject( channel, "ISMap", 1, 1, this->ismap, 
-                      "Inverse selector Mapping" );
-
-/* Forward selector Invert flag. */
-/* ----------------------------- */
-      ival = this->isinv;
-      set = ( ival != 0 );
-      astWriteInt( channel, "ISInv", set, 0, ival,
-                   ival ? "Inv selector used in inverse direction" :
-                          "Inv selector used in forward direction" );
-   }
-
-/* Loop to dump each route Mapping and its invert flag. */
-/* ---------------------------------------------------- */
-   for( i = 0; i < this->nroute; i++ ) {
-      sprintf( buf, "RMap%d", i + 1 );
-      astWriteObject( channel, buf, 1, 1, this->routemap[ i ], 
-                      "Route Mapping" );
-     
-      ival = this->routeinv[ i ];
-      set = ( ival != 0 );
-      sprintf( buf, "RInv%d", i + 1 );
-      astWriteInt( channel, buf, set, 0, ival,
-                   ival ? "Route Mapping used in inverse direction" :
-                          "Route Mapping used in forward direction" );
-   }
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsASwitchMap and astCheckSwitchMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(SwitchMap,Mapping)
-astMAKE_CHECK(SwitchMap)
-
-AstSwitchMap *astSwitchMap_( void *fsmap_void, void *ismap_void, int nroute, 
-                             void **routemaps_void, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astSwitchMap
-
-*  Purpose:
-*     Create a SwitchMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstSwitchMap *astSwitchMap( AstMapping *fsmap, AstMapping *ismap,
-*                                 int nroute, AstMapping **routemaps,
-*                                 const char *options, ... )
-
-*  Class Membership:
-*     SwitchMap constructor.
-
-*  Description:
-*     This function creates a new SwitchMap and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     fsmap
-*        Pointer to the forward selector Mapping 
-*     ismap
-*        Pointer to the inverse selector Mapping 
-*     nroute
-*        The number of route Mappings.
-*     routemaps
-*        An array of pointers to the route Mappings.
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new SwitchMap. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new SwitchMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic SwitchMap constructor which is
-*     available via the protected interface to the SwitchMap class.  A
-*     public interface is provided by the astSwitchMapId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "map1" and "map2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSwitchMap *new;            /* Pointer to new SwitchMap */
-   AstMapping *fsmap;            /* Pointer to fwd selector Mapping */
-   AstMapping *ismap;            /* Pointer to inv selector Mapping */
-   AstMapping **routemaps;       /* Array of route Mapping pointers */
-   int i;                        /* Route Mappings index */
-   va_list args;                 /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Report an error if no route Mappings have been supplied. */
-   if( nroute <= 0 ) astError( AST__BDPAR, "astSwitchMap(SwitchMap): "
-                               "Bad number of route Mappings (%d) specified.", status, 
-                               nroute );
-
-/* Otherwise create an array to hold the route Mapping pointers. */
-   routemaps = astMalloc( sizeof( AstMapping * )*nroute );
-
-/* Obtain and validate pointers to the Mapping structures provided. */
-   if( astOK ) {
-      fsmap = fsmap_void ? astCheckMapping( fsmap_void ) : NULL;
-      ismap = ismap_void ? astCheckMapping( ismap_void ) : NULL;
-      for( i = 0; i < nroute; i++ ) {
-         routemaps[ i ] = astCheckMapping( routemaps_void[ i ] );
-      }
-   }
-
-   if ( astOK ) {
-
-/* Initialise the SwitchMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitSwitchMap( NULL, sizeof( AstSwitchMap ), !class_init, &class_vtab,
-                              "SwitchMap", fsmap, ismap, nroute, routemaps );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new SwitchMap's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free memory used to hold the route Mapping pointers. */
-   routemaps = astFree( routemaps );
-
-/* Return a pointer to the new SwitchMap. */
-   return new;
-}
-
-AstSwitchMap *astSwitchMapId_( void *fsmap_void, void *ismap_void, int nroute, 
-                               void **routemaps_void, const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astSwitchMap
-f     AST_SWITCHMAP
-
-*  Purpose:
-*     Create a SwitchMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "switchmap.h"
-c     AstSwitchMap *astSwitchMap( AstMapping *fsmap, AstMapping *ismap,
-c                                 int nroute, AstMapping *routemaps[],
-c                                 const char *options, ... )
-f     RESULT = AST_SWITCHMAP( FSMAP, ISMAP, NROUTE, ROUTEMAPS, OPTIONS, 
-f                             STATUS )
-
-*  Class Membership:
-*     SwitchMap constructor.
-
-*  Description:
-*     This function creates a new SwitchMap and optionally initialises
-*     its attributes.
-*
-*     A SwitchMap is a Mapping which represents a set of alternate
-*     Mappings, each of which is used to transform positions within a 
-*     particular region of the input or output coordinate system of the 
-*     SwitchMap.
-*     
-*     A SwitchMap can encapsulate any number of Mappings, but they must
-*     all have the same number of inputs (Nin attribute value) and the 
-*     same number of outputs (Nout attribute value). The SwitchMap itself 
-*     inherits these same values for its Nin and Nout attributes. Each of
-*     these Mappings represents a "route" through the switch, and are
-*     referred to as "route" Mappings below. Each route Mapping transforms 
-*     positions between the input and output coordinate space of the entire 
-*     SwitchMap, but only one Mapping will be used to transform any given
-*     position. The selection of the appropriate route Mapping to use with 
-*     any given input position is made by another Mapping, called the
-*     "selector" Mapping. Each SwitchMap encapsulates two selector
-*     Mappings in addition to its route Mappings; one for use with the
-*     SwitchMap's forward transformation (called the "forward selector
-*     Mapping"), and one for use with the SwitchMap's inverse transformation 
-*     (called the "inverse selector Mapping"). The forward selector Mapping
-*     must have the same number of inputs as the route Mappings, but
-*     should have only one output. Likewise, the inverse selector Mapping
-*     must have the same number of outputs as the route Mappings, but
-*     should have only one input. 
-*
-*     When the SwitchMap is used to transform a position in the forward
-*     direction (from input to output), each supplied input position is
-*     first transformed by the forward transformation of the forward selector 
-*     Mapping. This produces a single output value for each input position 
-*     referred to as the selector value. The nearest integer to the selector 
-*     value is found, and is used to index the array of route Mappings (the 
-*     first supplied route Mapping has index 1, the second route Mapping has 
-*     index 2, etc). If the nearest integer to the selector value is less 
-*     than 1 or greater than the number of route Mappings, then the SwitchMap 
-*     output position is set to a value of AST__BAD on every axis. Otherwise, 
-*     the forward transformation of the selected route Mapping is used to 
-*     transform the supplied input position to produce the SwitchMap output 
-*     position. 
-*
-*     When the SwitchMap is used to transform a position in the inverse
-*     direction (from "output" to "input"), each supplied "output" position 
-*     is first transformed by the inverse transformation of the inverse 
-*     selector Mapping. This produces a selector value for each "output" 
-*     position. Again, the nearest integer to the selector value is found, 
-*     and is used to index the array of route Mappings. If this selector 
-*     index value is within the bounds of the array of route Mappings, then 
-*     the inverse transformation of the selected route Mapping is used to 
-*     transform the supplied "output" position to produce the SwitchMap 
-*     "input" position. If the selector index value is outside the bounds 
-*     of the array of route Mappings, then the SwitchMap "input" position is 
-*     set to a value of AST__BAD on every axis. 
-*
-*     In practice, appropriate selector Mappings should be chosen to
-*     associate a different route Mapping with each region of coordinate 
-*     space. Note that the SelectorMap class of Mapping is particularly 
-*     appropriate for this purpose.
-*
-*     If a compound Mapping contains a SwitchMap in series with its own
-*     inverse, the combination of the two adjacent SwitchMaps will be 
-*     replaced by a UnitMap when the compound Mapping is simplified using
-c     astSimplify.
-f     AST_SIMPLIFY.
-
-*  Parameters:
-c     fsmap
-f     FSMAP = INTEGER (Given)
-*        Pointer to the forward selector Mapping. This must have a
-*        defined forward transformation, but need not have a defined
-*        inverse transformation. It must have one output, and the number of
-*        inputs must match the number of inputs of each of the supplied 
-*        route Mappings.
-c        NULL
-f        AST__NULL
-*        may be supplied, in which case the SwitchMap will have an undefined 
-*        forward Mapping.
-c     ismap
-f     ISMAP = INTEGER (Given)
-*        Pointer to the inverse selector Mapping. This must have a
-*        defined inverse transformation, but need not have a defined
-*        forward transformation. It must have one input, and the number of
-*        outputs must match the number of outputs of each of the supplied 
-*        route Mappings.
-c        NULL
-f        AST__NULL
-*        may be supplied, in which case the SwitchMap will have an undefined 
-*        inverse Mapping.
-c     nroute
-f     NROUTE = INTEGER (Given)
-*        The number of supplied route Mappings.
-c     routemaps
-f     ROUTEMAPS( NROUTE ) = INTEGER (Given)
-*        An array of pointers to the route Mappings. All the supplied
-*        route Mappings must have common values for the Nin and Nout 
-*        attributes, and these values define the number of inputs and
-*        outputs of the SwitchMap.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new SwitchMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new SwitchMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astSwitchMap()
-f     AST_SWITCHMAP = INTEGER
-*        A pointer to the new SwitchMap.
-
-*  Notes:
-c     - Note that the component Mappings supplied are not copied by
-c     astSwitchMap (the new SwitchMap simply retains a reference to
-c     them). They may continue to be used for other purposes, but
-c     should not be deleted. If a SwitchMap containing a copy of its
-c     component Mappings is required, then a copy of the SwitchMap should
-c     be made using astCopy.
-f     - Note that the component Mappings supplied are not copied by
-f     AST_SWITCHMAP (the new SwitchMap simply retains a reference to
-f     them). They may continue to be used for other purposes, but
-f     should not be deleted. If a SwitchMap containing a copy of its
-f     component Mappings is required, then a copy of the SwitchMap should
-f     be made using AST_COPY.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astSwitchMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astSwitchMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "map1" and "map2" parameters
-*     are of type (void *) and are converted from an ID value to a
-*     pointer and validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astSwitchMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSwitchMap *new;            /* Pointer to new SwitchMap */
-   AstMapping *fsmap;            /* Pointer to fwd selector Mapping */
-   AstMapping *ismap;            /* Pointer to inv selector Mapping */
-   AstMapping **routemaps;       /* Array of route Mapping pointers */
-   int i;                        /* Route Mappings index */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Report an error if no route Mappings have been supplied. */
-   if( nroute <= 0 ) astError( AST__BDPAR, "astSwitchMap(SwitchMap): "
-                               " Bad number of route Mappings (%d) specified.", status, 
-                               nroute );
-
-/* Otherwise create an array to hold the route Mapping pointers. */
-   routemaps = astMalloc( sizeof( AstMapping * )*nroute );
-
-/* Obtain and validate pointers to the Mapping structures provided. */
-   if( astOK ) {
-      fsmap = fsmap_void ? astCheckMapping( astMakePointer(fsmap_void) ) : NULL;
-      ismap = ismap_void ? astCheckMapping( astMakePointer(ismap_void) ) : NULL;
-      for( i = 0; i < nroute; i++ ) {
-         routemaps[ i ] = astVerifyMapping( astMakePointer(routemaps_void[ i ]) );
-      }
-   }
-
-   if ( astOK ) {
-
-/* Initialise the SwitchMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitSwitchMap( NULL, sizeof( AstSwitchMap ), !class_init, &class_vtab,
-                              "SwitchMap", fsmap, ismap, nroute, routemaps );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new SwitchMap's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Free memory used to hold the route Mapping pointers. */
-   routemaps = astFree( routemaps );
-
-/* Return an ID value for the new SwitchMap. */
-   return astMakeId( new );
-}
-
-AstSwitchMap *astInitSwitchMap_( void *mem, size_t size, int init,
-                                 AstSwitchMapVtab *vtab, const char *name,
-                                 AstMapping *fsmap, AstMapping *ismap,
-                                 int nroute, AstMapping **routemaps, int *status ) {
-/*
-*+
-*  Name:
-*     astInitSwitchMap
-
-*  Purpose:
-*     Initialise a SwitchMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstSwitchMap *astInitSwitchMap( void *mem, size_t size, int init,
-*                                     AstSwitchMapVtab *vtab, const char *name,
-*                                     AstMapping *fsmap, AstMapping *ismap,
-*                                     int nroute, AstMapping **routemaps )
-
-*  Class Membership:
-*     SwitchMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new SwitchMap object. It allocates memory (if necessary) to
-*     accommodate the SwitchMap plus any additional data associated with the
-*     derived class. It then initialises a SwitchMap structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a SwitchMap at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the SwitchMap is to be initialised.
-*        This must be of sufficient size to accommodate the SwitchMap data
-*        (sizeof(SwitchMap)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the SwitchMap (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        SwitchMap structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the SwitchMap's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new SwitchMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     fsmap
-*        Pointer to the forward selector Mapping.
-*     ismap
-*        Pointer to the inverse selector Mapping.
-*     nroute
-*        The number of route Mappings supplied.
-*     routemaps
-*        An array holdiong pointers to the route Mappings.
-
-*  Returned Value:
-*     A pointer to the new SwitchMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstSwitchMap *new;            /* Pointer to new SwitchMap */
-   int i;                        /* Loop count */
-   int nin;                      /* No. input coordinates for SwitchMap */
-   int nout;                     /* No. output coordinates for SwitchMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitSwitchMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check that all route Mappings have common values for Nin and Nout.*/
-   nin = astGetNin( routemaps[ 0 ] );
-   nout = astGetNout( routemaps[ 0 ] );
-   for( i = 1; i < nroute; i++ ) {
-      if( nin != astGetNin( routemaps[ i ] ) ){ 
-         if( astOK ) {
-            astError( AST__BADNI, "astInitSwitchMap(%s): Route Mapping "
-                      "number %d has %d input(s) but the first route "
-                      "Mapping has %d input(s).", status, name, i + 1, 
-                      astGetNin( routemaps[ i ] ), nin );
-         }
-
-      } else if( nout != astGetNout( routemaps[ i ] ) ){ 
-         if( astOK ) {
-            astError( AST__BADNO, "astInitSwitchMap(%s): Route Mapping "
-                      "number %d has %d output(s) but the first route "
-                      "Mapping has %d output(s).", status, name, i + 1, 
-                      astGetNin( routemaps[ i ] ), nin );
-         }
-      }
-   }
-
-/* If supplied, report an error if fsmap has no forward transformation,
-   or if it has an incorrect number of inputs or output. */
-   if( fsmap && astOK ) {
-      if( !astGetTranForward( fsmap ) ) {
-         astError( AST__INTRD, "astInitSwitchMap(%s): The forward selector Mapping "
-              "is not able to transform coordinates in the forward direction.", status,
-              name );
-
-      } else if( astGetNin( fsmap ) != nin ){ 
-         astError( AST__BADNI, "astInitSwitchMap(%s): The forward selector "
-                   "Mapping has %d input(s) but the SwitchMap has %d "
-                   "input(s).", status, name, astGetNin( fsmap ), nin );
-
-      } else if( astGetNout( fsmap ) != 1 ){ 
-         astError( AST__BADNO, "astInitSwitchMap(%s): The forward selector "
-                   "Mapping has %d outputs but should only have 1.", status, name, 
-                   astGetNout( fsmap ) );
-      }
-   }
-
-/* If supplied, report an error if ismap has no inverse transformation,
-   or if it has an incorrect number of inputs or outputs. */
-   if( ismap && astOK ) {
-      if( !astGetTranInverse( ismap ) ) {
-         astError( AST__INTRD, "astInitSwitchMap(%s): The inverse selector Mapping "
-              "is not able to transform coordinates in the inverse direction.", status,
-              name );
-      } else if( nout != astGetNout( ismap ) ){ 
-         astError( AST__BADNO, "astInitSwitchMap(%s): The inverse selector "
-                   "Mapping has %d output(s) but the SwitchMap has %d "
-                   "output(s).", status, name, astGetNout( ismap ), nout );
-
-      } else if( astGetNin( ismap ) != 1 ){ 
-         astError( AST__BADNI, "astInitSwitchMap(%s): The inverse selector "
-                   "Mapping has %d inputs but should only have 1.", status, name, 
-                   astGetNin( ismap ) );
-
-      }
-   }
-
-/* Report an error if neither ismap nor fsmap were supplied. */
-   if( !fsmap && !ismap && astOK ) {
-      astError( AST__INTRD, "astInitSwitchMap(%s): No selector Mappings "
-                "supplied.", status, name );
-   }
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the SwitchMap structure, allocating memory if necessary. Specify
-   the number of input and output coordinates and in which directions the
-   Mapping should be defined. */
-   if ( astOK ) {
-      new = (AstSwitchMap *) astInitMapping( mem, size, 0, 
-                                             (AstMappingVtab *) vtab, name,
-                                             nin, nout, 
-                                             ( fsmap != NULL ),
-                                             ( ismap != NULL ) );
-      if ( astOK ) {
-
-/* Initialise the SwitchMap data. */
-/* --------------------------- */
-/* Store pointers to the selector Mappings. */
-         new->fsmap = fsmap ? astClone( fsmap ) : NULL;
-         new->ismap = ismap ? astClone( ismap ) : NULL;
-
-/* Save the initial values of the inversion flags for these Mappings. */
-         new->fsinv = fsmap ? astGetInvert( fsmap ) : 0;
-         new->isinv = ismap ? astGetInvert( ismap ) : 0;
-
-/* Create arrays for the route Mappings. */
-         new->routemap = astMalloc( sizeof( AstMapping * )*nroute );
-         new->routeinv = astMalloc( sizeof( int )*nroute );
-
-/* Store pointers to the route Mappings and their invert flags. */
-         if( astOK ) {
-            new->nroute = nroute;
-            for( i = 0; i < nroute; i++ ) {
-               new->routemap[ i ] = astClone( routemaps[ i ] );
-               new->routeinv[ i ] = astGetInvert( routemaps[ i ] );
-            }
-         } else {
-            new->nroute = 0;
-         }
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstSwitchMap *astLoadSwitchMap_( void *mem, size_t size,
-                                 AstSwitchMapVtab *vtab, const char *name,
-                                 AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadSwitchMap
-
-*  Purpose:
-*     Load a SwitchMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "switchmap.h"
-*     AstSwitchMap *astLoadSwitchMap( void *mem, size_t size,
-*                                     AstSwitchMapVtab *vtab, const char *name,
-*                                     AstChannel *channel )
-
-*  Class Membership:
-*     SwitchMap loader.
-
-*  Description:
-*     This function is provided to load a new SwitchMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     SwitchMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a SwitchMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the SwitchMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        SwitchMap data (sizeof(SwitchMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the SwitchMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the SwitchMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstSwitchMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new SwitchMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the SwitchMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "SwitchMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new SwitchMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstSwitchMap *new;               
-   AstMapping *rmap;
-   int i;
-   char buf[ 20 ];
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this SwitchMap. In this case the
-   SwitchMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstSwitchMap );
-      vtab = &class_vtab;
-      name = "SwitchMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitSwitchMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built SwitchMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "SwitchMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Forward Selector Mapping and its Invert flag. */
-/* --------------------------------------------- */
-      new->fsmap = astReadObject( channel, "fsmap", NULL );
-      new->fsinv = astReadInt( channel, "fsinv", 0 );
-      new->fsinv = ( new->fsinv != 0 );
-
-/* Inverse Selector Mapping and its Invert flag. */
-/* --------------------------------------------- */
-      new->ismap = astReadObject( channel, "ismap", NULL );
-      new->isinv = astReadInt( channel, "isinv", new->fsinv );
-      new->isinv = ( new->isinv != 0 );
-
-/* Loop to load each route Mapping and its invert flag. */
-/* ---------------------------------------------------- */
-      new->routemap = NULL;
-      new->routeinv = NULL;
-      i = 0;
-      while( astOK ) {
-         sprintf( buf, "rmap%d", i + 1 );
-         rmap = astReadObject( channel, buf, NULL );
-         if( rmap ) {
-            new->routemap = astGrow( new->routemap, i + 1, sizeof( AstMapping *) );
-            new->routeinv = astGrow( new->routeinv, i + 1, sizeof( int ) );
-            if( astOK ) {
-               new->routemap[ i ] = rmap;
-               sprintf( buf, "rinv%d", i + 1 );
-               new->routeinv[ i ] = astReadInt( channel, buf, 0 );
-               new->routeinv[ i ] = ( new->routeinv[ i ] != 0 );
-               i++;
-            }
-         } else {
-            break;
-         }
-      }
-
-/* Number of route Mappings. */
-      new->nroute = i;
-
-/* If an error occurred, clean up by deleting the new SwitchMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new SwitchMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/switchmap.h b/ast-5.3-1/switchmap.h
deleted file mode 100644
index 3a30f4b..0000000
--- a/ast-5.3-1/switchmap.h
+++ /dev/null
@@ -1,289 +0,0 @@
-#if !defined( SWITCHMAP_INCLUDED )  /* Include this file only once */
-#define SWITCHMAP_INCLUDED
-/*
-*+
-*  Name:
-*     switchmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the SwitchMap class.
-
-*  Invocation:
-*     #include "switchmap.h"
-
-*  Description:
-*     This include file defines the interface to the SwitchMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc. needed to use this class.
-
-*  Inheritance:
-*     The SwitchMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Merge a SwitchMap within a sequence of Mappings.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsASwitchMap
-*           Test class membership.
-*        astSwitchMap
-*           Create a SwitchMap.
-*
-*     Protected:
-*        astCheckSwitchMap
-*           Validate class membership.
-*        astInitSwitchMap
-*           Initialise a SwitchMap.
-*        astInitSwitchMapVtab
-*           Initialise the virtual function table for the SwitchMap class.
-*        astLoadSwitchMap
-*           Load a SwitchMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstSwitchMap
-*           SwitchMap object type.
-*
-*     Protected:
-*        AstSwitchMapVtab
-*           SwitchMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     13-MAR-2006 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* SwitchMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstSwitchMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;       /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstMapping *fsmap;       /* Pointer to forward selector Mapping */
-   AstMapping *ismap;       /* Pointer to inverse selector Mapping */
-   int fsinv;               /* Inversion flag for forward selector Mapping */
-   int isinv;               /* Inversion flag for inverse selector Mapping */
-   int nroute;              /* The number of route Mappings in the SwitchMap */
-   AstMapping **routemap;   /* Array of route Mapping pointers */
-   int *routeinv;           /* Array of inversion flags for route Mappings */
-} AstSwitchMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstSwitchMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstSwitchMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstSwitchMapGlobals {
-   AstSwitchMapVtab Class_Vtab;
-   int Class_Init;
-} AstSwitchMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitSwitchMapGlobals_( AstSwitchMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(SwitchMap)           /* Check class membership */
-astPROTO_ISA(SwitchMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstSwitchMap *astSwitchMap_( void *, void *, int, void **, const char *, int *, ...);
-#else
-AstSwitchMap *astSwitchMapId_( void *, void *, int, void **, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstSwitchMap *astInitSwitchMap_( void *, size_t, int, AstSwitchMapVtab *,
-                                 const char *, AstMapping *, AstMapping *,
-                                 int, AstMapping **, int * );
-
-/* Vtab initialiser. */
-void astInitSwitchMapVtab_( AstSwitchMapVtab *, const char *, int * );
-
-/* Loader. */
-AstSwitchMap *astLoadSwitchMap_( void *, size_t, AstSwitchMapVtab *,
-                                 const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-#if defined(astCLASS)            /* Protected */
-
-int astSwitchList_( AstSwitchMap *, int, int *, AstMapping ***, int **, int * );
-
-#endif
-
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckSwitchMap(this) astINVOKE_CHECK(SwitchMap,this,0)
-#define astVerifySwitchMap(this) astINVOKE_CHECK(SwitchMap,this,1)
-
-/* Test class membership. */
-#define astIsASwitchMap(this) astINVOKE_ISA(SwitchMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astSwitchMap astINVOKE(F,astSwitchMap_)
-#else
-#define astSwitchMap astINVOKE(F,astSwitchMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitSwitchMap(mem,size,init,vtab,name,fsmap,ismap,nroute,routemaps) \
-astINVOKE(O,astInitSwitchMap_(mem,size,init,vtab,name,astCheckMapping(fsmap),\
-          astCheckMapping(ismap),nroute,routemaps,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitSwitchMapVtab(vtab,name) astINVOKE(V,astInitSwitchMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadSwitchMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadSwitchMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#define astSwitchList astSwitchList_
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckSwitchMap to validate SwitchMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/timeframe.c b/ast-5.3-1/timeframe.c
deleted file mode 100644
index 3f3462a..0000000
--- a/ast-5.3-1/timeframe.c
+++ /dev/null
@@ -1,6957 +0,0 @@
-/*
-*class++
-*  Name:
-*     TimeFrame
-
-*  Purpose:
-*     Time coordinate system description.
-
-*  Constructor Function:
-c     astTimeFrame
-f     AST_TIMEFRAME
-
-*  Description:
-*     A TimeFrame is a specialised form of one-dimensional Frame which 
-*     represents various coordinate systems used to describe positions in
-*     time.
-*
-*     A TimeFrame represents a moment in time as either an Modified Julian 
-*     Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-*     as determined by the System attribute. Optionally, a zero point can be 
-*     specified (using attribute TimeOrigin) which results in the TimeFrame 
-*     representing time offsets from the specified zero point.
-*
-*     Even though JD and MJD are defined as being in units of days, the
-*     TimeFrame class allows other units to be used (via the Unit attribute) 
-*     on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1 
-*     hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs 
-*     can be described in units other than the usual years. Besselian epoch 
-*     are always represented in units of (tropical) years.
-*
-*     The TimeScale attribute allows the time scale to be specified (that
-*     is, the physical process used to define the rate of flow of time).
-*     MJD, JD and Julian epoch can be used to represent a time in any
-*     supported time scale. However, Besselian epoch may only be used with the 
-*     "TT" (Terrestrial Time) time scale. The list of supported time scales
-*     includes universal time and siderial time. Strictly, these represent 
-*     angles rather than time scales, but are included in the list since
-*     they are in common use and are often thought of as time scales.
-*
-*     When a time value is formatted it can be formated either as a simple
-*     floating point value, or as a Gregorian date (see the Format
-*     attribute).
-
-*  Inheritance:
-*     The TimeFrame class inherits from the Frame class.
-
-*  Attributes:
-*     In addition to those attributes common to all Frames, every
-*     TimeFrame also has the following attributes:
-*
-*     - AlignTimeScale: Time scale in which to align TimeFrames
-*     - LTOffset: The offset of Local Time from UTC, in hours.
-*     - TimeOrigin: The zero point for TimeFrame axis values
-*     - TimeScale: The timescale used by the TimeFrame
-*
-*     Several of the Frame attributes inherited by the TimeFrame class 
-*     refer to a specific axis of the Frame (for instance Unit(axis), 
-*     Label(axis), etc). Since a TimeFrame is strictly one-dimensional,
-*     it allows these attributes to be specified without an axis index.
-*     So for instance, "Unit" is allowed in place of "Unit(1)".
-
-*  Functions:
-c     In addition to those functions applicable to all Frames, the
-c     following functions may also be applied to all TimeFrames:
-f     In addition to those routines applicable to all Frames, the
-f     following routines may also be applied to all TimeFrames:
-*
-c     - astCurrentTime: Return the current system time
-f     - AST_CURRENTTIME: Return the current system time
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     NG: Norman Gray (Starlink)
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     XX-Aug-2003 (NG):
-*        Original version, drawing heavily on specframe.c.
-*     20-MAY-2005 (NG):
-*        Merged into main AST system.
-*     25-MAY-2005 (DSB):
-*        Extensive modifications to add extra timescales, unit support,
-*        support for relative times, etc, and to make it more like the
-*        other AST Frame classes.
-*     12-AUG-2005 (DSB):
-*        Remove ClockLon and ClockLat attributes. Use the new ObsLon and
-*        ObsLat attributes in the parent Frame class instead. Note, for
-*        backward compatibility the public attribute accessors and the 
-*        astLoadTimeFrame functions still recogonise ClockLon and ClockLat,
-*        but use the ObsLat/ObsLon attributes internally.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     29-JUN-2006 (DSB):
-*        - Activate astAbbrev function for abbreviating leading fields in
-*        plot labels.
-*        - Include TimeOrigin in default Label.
-*     30-JUN-2006 (DSB):
-*        When splitting a date/time string into fields, allow each field 
-*        to include a decimal point.
-*     30-JUN-2006 (DSB):
-*        Allow astAbbrev to have a null "str1" value.
-*     16-OCT-2006 (DSB):
-*        Allow conversions between UTC and UT1 (using the new Frame attribute 
-*     1-NOV-2006 (DSB):
-*        Correct sign of longitude passed to TimeMap contrutcorss in
-*        function MakeMap.
-*     31-JAN-2007 (DSB):
-*        Modified so that a TimeFrame can be used as a template to find a
-*        TimeFrame contained within a CmpFrame. This involves changes in
-*        Match and the removal of the local versions of SetMaxAxes and
-*        SetMinAxes.
-*     3-SEP-2007 (DSB):
-*        In SubFrame, since AlignSystem is extended by the TimeFrame class
-*        it needs to be cleared before invoking the parent SubFrame
-*        method in cases where the result Frame is not a TimeFrame.
-*     2-OCT-2007 (DSB):
-*        In Overlay, clear AlignSystem as well as System before calling
-*        the parent overlay method.
-*     2-OCT-2007 (DSB):
-*        Added "LT" (Local Time) time scale.
-*     9-DEC-2008 (DSB):
-*        Ensure Format string pointer is used correctly.
-*     19-JAN-2009 (DSB):
-*        Ensure "<bad>" is returned by astFormat if the axis value is bad.
-*     31-MAR-2009 (DSB):
-*        Extend TimeFrame "iso" Format to allow it to specify the character to
-*        place between the time and date strings.
-*     15-APR-2009 (DSB):
-*        Increase the number of nice calendar time axis gaps allowed by
-*        the Gap function. Previously, there was a jump from 1 day to 1
-*        year making it difficult to plot calendar axes covering time 
-*        ranges of the order of 0.5 to 2 years. Now, nice numbers of days 
-*        are allowed as intermediate gaps. Since months do not all have
-*        the same number of days, this means that the day number at major
-*        ticks will bounce around a bit.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS TimeFrame
-
-/* Define the first and last acceptable System values. */
-#define FIRST_SYSTEM AST__MJD
-#define LAST_SYSTEM AST__BEPOCH
-
-/* Define the first and last acceptable TimeScale values. */
-#define FIRST_TS AST__TAI
-#define LAST_TS AST__LT
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E3*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* The supported time scales fall into two groups. Time scales in the
-   first group depend on the clock position. That is, transformation
-   between a time scale in one group and a timescale in the other group 
-   requires the clock position, as does transformation between two time 
-   scales within the first group. Define a macro which tests if a given 
-   timescale belongs to the first group. */
-#define CLOCK_SCALE(ts) \
-      ( ( ts == AST__LMST || \
-          ts == AST__LAST || \
-          ts == AST__TDB || \
-          ts == AST__TCB ) ? 1 : 0 )
-
-
-/* Define a macro which tests if a given timescale requires a Dut1 value 
-   in order to convert from the timescale to UTC. */
-#define DUT1_SCALE(ts) \
-      ( ( ts == AST__LMST || \
-          ts == AST__LAST || \
-          ts == AST__GMST || \
-          ts == AST__UT1 ) ? 1 : 0 )
-
-/* Define a macro which tests if a given timescale requires a LTOffset value 
-   in order to convert from the timescale to UTC. */
-#define LTOFFSET_SCALE(ts) \
-      ( ( ts == AST__LT ) ? 1 : 0 )
-
-/* The Unix epoch (00:00:00 UTC 1 January 1970 AD) as an absolute MJD in
-   the UTC timescale. */
-#define UNIX_EPOCH 40587.0
-   
-/* Header files. */
-/* ============= */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "unit.h"                /* Units management facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "timemap.h"             /* Time coordinate Mappings */
-#include "frame.h"               /* Parent Frame class */
-#include "timeframe.h"           /* Interface definition for this class */
-#include "mapping.h"             /* Coordinate Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "shiftmap.h"            /* Shift of origins */
-#include "pal.h"              /* SlaLib interface */
-
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stddef.h>
-#include <math.h>
-#include <time.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are used or extended by this
-   class. */
-static AstSystemType (* parent_getalignsystem)( AstFrame *, int * );
-static AstSystemType (* parent_getsystem)( AstFrame *, int * );
-static double (* parent_gap)( AstFrame *, int, double, int *, int * );
-static const char *(* parent_abbrev)( AstFrame *, int, const char *, const char *, const char *, int * );
-static const char *(* parent_format)( AstFrame *, int, double, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static const char *(* parent_getdomain)( AstFrame *, int * );
-static const char *(* parent_getlabel)( AstFrame *, int, int * );
-static const char *(* parent_getsymbol)( AstFrame *, int, int * );
-static const char *(* parent_gettitle)( AstFrame *, int * );
-static const char *(* parent_getunit)( AstFrame *, int, int * );
-static double (* parent_getepoch)( AstFrame *, int * );
-static int (* parent_match)( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int (* parent_subframe)( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static int (* parent_unformat)( AstFrame *, int, const char *, double *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_clearsystem)( AstFrame *, int * );
-static void (* parent_overlay)( AstFrame *, const int *, AstFrame *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static void (* parent_setsystem)( AstFrame *, AstSystemType, int * );
-static void (* parent_setunit)( AstFrame *, int, const char *, int * );
-
-/* The Unix epoch (00:00:00 UTC 1 January 1970 AD) as an absolute MJD in
-   the TAI timescale. */
-static double tai_epoch;   
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->Format_Buff[ 0 ] = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetLabel_Buff[ 0 ] = 0; \
-   globals->GetSymbol_Buff[ 0 ] = 0; \
-   globals->GetTitle_Buff[ 0 ] = 0; \
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(TimeFrame)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(TimeFrame,Class_Init)
-#define class_vtab astGLOBAL(TimeFrame,Class_Vtab)
-#define format_buff astGLOBAL(TimeFrame,Format_Buff)
-#define getattrib_buff astGLOBAL(TimeFrame,GetAttrib_Buff)
-#define getlabel_buff astGLOBAL(TimeFrame,GetLabel_Buff)
-#define getsymbol_buff astGLOBAL(TimeFrame,GetSymbol_Buff)
-#define gettitle_buff astGLOBAL(TimeFrame,GetTitle_Buff)
-
-
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* Buffers for strings returned by various functions. */
-static char getattrib_buff[ AST__TIMEFRAME_GETATTRIB_BUFF_LEN + 1 ];
-static char format_buff[ AST__TIMEFRAME_FORMAT_BUFF_LEN + 1 ];
-static char getlabel_buff[ AST__TIMEFRAME_GETLABEL_BUFF_LEN + 1 ]; 
-static char getsymbol_buff[ AST__TIMEFRAME_GETSYMBOL_BUFF_LEN + 1 ]; 
-static char gettitle_buff[ AST__TIMEFRAME_GETTITLE_BUFF_LEN + 1 ]; 
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstTimeFrameVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *MakeMap( AstTimeFrame *, AstSystemType, AstSystemType, AstTimeScaleType, AstTimeScaleType, double, double, const char *, const char *, const char *, int * );
-static AstSystemType GetAlignSystem( AstFrame *, int * );
-static AstSystemType SystemCode( AstFrame *, const char *, int * );
-static AstSystemType ValidateSystem( AstFrame *, AstSystemType, const char *, int * );
-static AstTimeScaleType TimeScaleCode( const char *, int * );
-static const char *DefUnit( AstSystemType, const char *, const char *, int * );
-static const char *Format( AstFrame *, int, double, int * );
-static const char *GetDomain( AstFrame *, int * );
-static const char *GetLabel( AstFrame *, int, int * );
-static const char *GetSymbol( AstFrame *, int, int * );
-static const char *GetTitle( AstFrame *, int * );
-static const char *GetUnit( AstFrame *, int, int * );
-static const char *SystemLabel( AstSystemType, int * );
-static const char *SystemString( AstFrame *, AstSystemType, int * );
-static const char *TimeScaleString( AstTimeScaleType, int * );
-static double CurrentTime( AstTimeFrame *, int * );
-static double FromMJD( AstTimeFrame *, double, int * );
-static double GetEpoch( AstFrame *, int * );
-static double GetTimeOriginCur( AstTimeFrame *, int * );
-static double ToMJD( AstSystemType, double, int * );
-static double ToUnits( AstTimeFrame *, const char *, double, const char *, int * );
-static int DateFormat( const char *, int *, char *, int * );
-static int GetActiveUnit( AstFrame *, int * );
-static int MakeTimeMapping( AstTimeFrame *, AstTimeFrame *, AstTimeFrame *, int, AstMapping **, int * );
-static int Match( AstFrame *, AstFrame *, int **, int **, AstMapping **, AstFrame **, int * );
-static int SubFrame( AstFrame *, AstFrame *, int, const int *, const int *, AstMapping **, AstFrame **, int * );
-static int TestActiveUnit( AstFrame *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void OriginScale( AstTimeFrame *, AstTimeScaleType, const char *, int * );
-static void OriginSystem( AstTimeFrame *, AstSystemType, const char *, int * );
-static void Overlay( AstFrame *, const int *, AstFrame *, int * );
-static void SetUnit( AstFrame *, int, const char *, int * );
-static void VerifyAttrs( AstTimeFrame *, const char *, const char *, const char *, int * );
-static AstMapping *ToMJDMap( AstSystemType, double, int * );
-static int Unformat( AstFrame *, int, const char *, double *, int * );
-static const char *Abbrev( AstFrame *, int, const char *, const char *, const char *, int * );
-static double Gap( AstFrame *, int, double, int *, int * );
-
-static AstSystemType GetSystem( AstFrame *, int * );
-static void SetSystem( AstFrame *, AstSystemType, int * );
-static void ClearSystem( AstFrame *, int * );
-
-static double GetTimeOrigin( AstTimeFrame *, int * );
-static int TestTimeOrigin( AstTimeFrame *, int * );
-static void ClearTimeOrigin( AstTimeFrame *, int * );
-static void SetTimeOrigin( AstTimeFrame *, double, int * );
-
-static double GetLTOffset( AstTimeFrame *, int * );
-static int TestLTOffset( AstTimeFrame *, int * );
-static void ClearLTOffset( AstTimeFrame *, int * );
-static void SetLTOffset( AstTimeFrame *, double, int * );
-
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-
-static AstTimeScaleType GetAlignTimeScale( AstTimeFrame *, int * );
-static int TestAlignTimeScale( AstTimeFrame *, int * );
-static void ClearAlignTimeScale( AstTimeFrame *, int * );
-static void SetAlignTimeScale( AstTimeFrame *, AstTimeScaleType, int * );
-
-static AstTimeScaleType GetTimeScale( AstTimeFrame *, int * );
-static int TestTimeScale( AstTimeFrame *, int * );
-static void ClearTimeScale( AstTimeFrame *, int * );
-static void SetTimeScale( AstTimeFrame *, AstTimeScaleType, int * );
-
-/* Member functions. */
-/* ================= */
-static const char *Abbrev( AstFrame *this_frame, int axis,  const char *fmt, 
-                           const char *str1, const char *str2, int *status ) {
-/*
-*  Name:
-*     Abbrev
-
-*  Purpose:
-*     Abbreviate a formatted Frame axis value by skipping leading fields.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *Abbrev( AstFrame *this, int axis, const char *fmt, 
-*                         const char *str1, const char *str2, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astAbbrev protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function compares two Frame axis values that have been
-*     formatted (using astFormat) and determines if they have any
-*     redundant leading fields (i.e. leading fields in common which
-*     can be suppressed when tabulating the values or plotting them on
-*     the axis of a graph).
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the Frame axis for which the values have been
-*        formatted (axis numbering starts at zero for the first axis).
-*     fmt
-*        Pointer to a constant null-terminated string containing the
-*        format specification used to format the two values.
-*     str1
-*        Pointer to a constant null-terminated string containing the
-*        first formatted value. If this is null, the returned pointer
-*        points to the start of the final field in str2.
-*     str2
-*        Pointer to a constant null-terminated string containing the
-*        second formatted value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer into the "str2" string which locates the first
-*     character in the first field that differs between the two
-*     formatted values.
-*
-*     If the two values have no leading fields in common, the returned
-*     value will point at the start of string "str2". If the two
-*     values are equal, it will point at the terminating null at the
-*     end of this string.
-
-*  Notes:
-*     - This function assumes that the format specification used was
-*     the same when both values were formatted and that they both
-*     apply to the same Frame axis.
-*     - A pointer to the start of "str2" will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *p1;               
-   const char *p2;               
-   const char *result;           
-   int df;
-   int nc1;
-   int nc2;
-   int ndp;            
-
-/* Initialise. */
-   result = str2;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index. */
-   astValidateAxis( this_frame, axis, "astAbbrev" );
-
-/* Use the parent astAbbrev function unless the Format attribute indicates 
-   that axis values are to be formatted as multi-field date/time strings. */
-   df = DateFormat( fmt, &ndp, NULL, status );
-   if( !df ) {
-      result = (*parent_abbrev)( this_frame, axis,  fmt, str1, str2, status );
-
-/* Otherwise, if no "str1" string was supplied find the start of the 
-   last field in "str2". */
-   } else if( !str1 ){
-
-/* Initialise a pointer to the start of the next field in the "str2" string
-   (skip leading spaces). */
-      p2 = str2;
-      while( *p2 && isspace( *p2 ) ) p2++;
-            
-/* Check the entire string, saving the start of the next field as the
-   returned pointer. */
-      while( *p2 ) {
-         result = p2;
-
-/* Each field in a date/time field consists of digits only (and maybe a
-   decimal point). Find the number of leading digits/dots in this field
-   and increment the point to the following character (the first delimiter
-   character). */
-         p2 += strspn( p2, "0123456789." );
-
-/* Skip inter-field (non-numeric) delimiters. */
-         p2 += strcspn( p2, "0123456789." );
-      }
-
-/* Otherwise, if an "str1" string was supplied find the start of the 
-   first differing field in "str2". */
-   } else {
-
-/* Initialise pointers to the start of the next field in each string
-   (skip leading spaces). */
-      p1 = str1;
-      p2 = str2;
-      while( *p1 && isspace( *p1 ) ) p1++;
-      while( *p2 && isspace( *p2 ) ) p2++;
-            
-/* Check the entire string */
-      result = p2;
-      while( *p1 && *p2 ) {
-
-/* Each field in a date/time field consists of digits only (and maybe a
-   decimal point). Find the number of leading digits/dots in each string */
-         nc1 = strspn( p1, "0123456789." );
-         nc2 = strspn( p2, "0123456789." );
-
-/* If the next field has different lengths in the two strings, or of the 
-   content of the fields differ, break out of th eloop, leaving "result"
-   pointing to the start of the current field. */
-         if( nc1 != nc2 || strncmp( p1, p2, nc1 ) ) {
-            break;
-
-/* If the next field is identical in the two strings, skip to the
-   character following the end of the field. */
-         } else {
-            p1 += nc1;
-            p2 += nc2;
-
-/* Skip inter-field (non-numeric) delimiters. */
-            p1 += strcspn( p1, "0123456789." );
-            p2 += strcspn( p2, "0123456789." );
-         }
-
-/* Prepare to check the next field. */
-         result = p2;
-      }
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = str2;
-
-/* Return the result. */
-   return result;
-}
-
-static int DateFormat( const char *fmt, int *ndp, char *sep, int *status ){
-/*
-*  Name:
-*     DateFormat
-
-*  Purpose:
-*     Determine if TimeFrame values should be formatted as a date.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int DateFormat( const char *fmt, int *ndp, char *sep, int *status )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*    This function returns a flag indicating if the supplied Format string
-*    requires the TimeFrame value to be formatted as a date and/or time of 
-*    day.
-
-*  Parameters:
-*     fmt
-*        Pointer to Format string.
-*     ndp
-*        A pointer to an integer in which is returned a value indicating
-*        if a time is required as well as a date. A value of -1 will be
-*        returned in no time is required, otherwise the returned value will 
-*        equal the number of decimal places required for the seconds field.
-*     ndp
-*        A pointer to a char in which is returned the character that
-*        should be used to separate the date and time fields. Ignored if
-*        NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the formatted TimeFrame value should include a date.
-
-*/
-
-/* Local Variables: */
-   const char *c;
-   int nc;
-   int result;
-
-/* Initialise  */
-   result = 0;
-   *ndp = -1;
-
-/* Check the Format string */
-   if( fmt ) {
-
-/* Find the first non-white character */
-      c = fmt;
-      while( *c && isspace( *c ) ) c++;
-
-/* If the first non-white character starts the string "iso" 
-   assume a date is required. If so see if a time is also required 
-   (indicated by 1 dot following) and how many seconds of precision are 
-   required (the interegr following the dot). */
-      if( !strncmp( c, "iso", 3 ) ) {
-         result = 1;
-         if( sscanf( c, "iso.%d%n", ndp, &nc ) == 1 ) {
-
-/* Check the separate character (if any) at the end of the format string.
-   Only "T" is allowed. A space is used if no separator is given. */
-            if( sep ) *sep = ( c[ nc ] == 'T' || c[ nc ] == 't' ) ? 'T' : ' ';
-
-         } else {
-            *ndp = -1;
-         }
-      }
-   }
-
-   return result;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astClearAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     TimeFrame, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to the TimeFrame structure */
-   char *new_attrib;             /* Pointer value to new attribute name */
-   int len;                      /* Length of attrib string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the "attrib" string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   TimeFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strcmp( attrib, "direction" ) || 
-        !strcmp( attrib, "bottom" ) ||
-        !strcmp( attrib, "top" ) ||
-        !strcmp( attrib, "format" ) ||
-        !strcmp( attrib, "label" ) ||
-        !strcmp( attrib, "symbol" ) ||
-        !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
-   "(1)" and then use the parent ClearAttrib method. */
-      new_attrib = astMalloc( len + 4 );
-      if( new_attrib ) {
-         memcpy( new_attrib, attrib, len );
-         memcpy( new_attrib + len, "(1)", 4 ); 
-         (*parent_clearattrib)( this_object, new_attrib, status );
-         new_attrib = astFree( new_attrib );
-      }
-
-/* AlignTimeScale. */
-/* --------------- */
-   } else if ( !strcmp( attrib, "aligntimescale" ) ) {
-      astClearAlignTimeScale( this );
-
-/* ClockLat. */
-/* --------- */
-/* Retained for backward compatibility with older versions of AST in which 
-   TimeFrame had ClockLon/Lat attributes (now ObsLon/Lat are used instead). */
-   } else if ( !strcmp( attrib, "clocklat" ) ) {
-      astClearAttrib( this, "obslat" );
-
-/* ClockLon. */
-/* --------- */
-/* Retained for backward compatibility with older versions of AST in which 
-   TimeFrame had ClockLon/Lat attributes (now ObsLon/Lat are used instead). */
-   } else if ( !strcmp( attrib, "clocklon" ) ) {
-      astClearAttrib( this, "obslon" );
-
-/* LTOffset. */
-/* --------- */
-   } else if ( !strcmp( attrib, "ltoffset" ) ) {
-      astClearLTOffset( this );
-
-/* TimeOrigin. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "timeorigin" ) ) {
-      astClearTimeOrigin( this );
-
-/* TimeScale. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "timescale" ) ) {
-      astClearTimeScale( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     ClearSystem
-
-*  Purpose:
-*     Clear the System attribute for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void ClearSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astClearSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function clears the System attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstSystemType oldsys;         /* System before clearing */
-   AstTimeFrame *this;           /* Pointer to TimeFrame structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* Save the original system */
-   oldsys = astGetSystem( this_frame );
-
-/* Use the parent ClearSystem method to clear the System value. */
-   (*parent_clearsystem)( this_frame, status );
-
-/* Do nothing more if the system has not actually changed. */
-   if( astGetSystem( this_frame ) != oldsys ) {
-
-/* Modify the TimeOrigin value to use the new System */
-      OriginSystem( this, oldsys, "astClearSystem", status );
-
-/* Clear attributes which have system-specific defaults. */
-      astClearLabel( this_frame, 0 );
-      astClearSymbol( this_frame, 0 );
-      astClearTitle( this_frame );
-
-/* If the old system was BEPOCH also clear units and timescale. This is
-   because we need to ensure that TimeScale=TT and Unit=yr will be used
-   in future (these are the only acceptable values for System=BEPOCH). */
-      if( oldsys == AST__BEPOCH ) {
-         astClearUnit( this_frame, 0 );
-         astClearTimeScale( (AstTimeFrame *) this_frame );
-      }
-   }
-}
-
-static void ClearTimeScale( AstTimeFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astClearTimeScale
-
-*  Purpose:
-*     Clear the TimeScale attribute for a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void astClearTimeScale( AstTimeFrame *this )
-
-*  Class Membership:
-*     TimeFrame virtual function 
-
-*  Description:
-*     This function clears the TimeScale attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If the System is currently set to BEPOCH, then the TimeScale will
-   either be set to TT or will be unset (since SetTimeScale will not
-   allow any other value than TT if the System is BEPOCH). Therefore, if
-   System is BEPOCH, we will not need to modify the TimeOrigin value,
-   since it will already be appropriate. Otherwise, we modify the
-   TimeOrigin value stored in the TimeFrame structure to refer to the 
-   default timescale (TAI or TT). */
-   if( astGetSystem( this ) != AST__BEPOCH ) OriginScale( this, AST__TAI, 
-                                                     "astClearTimeScale", status );
-
-/* Store a bad value for the timescale in the TimeFrame structure. */
-   this->timescale = AST__BADTS;
-}
-
-static double CurrentTime( AstTimeFrame *this, int *status ){
-/*
-*++
-*  Name:
-c     astCurrentTime
-f     AST_CURRENTTIME
-
-*  Purpose:
-*     Return the current system time.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "timeframe.h"
-c     double astCurrentTime( AstTimeFrame *this )
-f     RESULT = AST_CURRENTTIME( THIS, STATUS )
-
-*  Class Membership:
-*     TimeFrame method.
-
-*  Description:
-c     This function 
-f     This routine 
-*     returns the current system time, represented in the form specified
-*     by the supplied TimeFrame. That is, the returned floating point
-*     value should be interpreted using the attribute values of the
-*     TimeFrame. This includes System, TimeOrigin, LTOffset, TimeScale, 
-*     and Unit.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the TimeFrame.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astCurrentTime()
-f     AST_CURRENTTIME = DOUBLE
-c        A TimeFrame axis value representing the current system time.
-
-*  Notes:
-*     - Values of AST__BAD will be returned if this function is
-c     invoked with the AST error status set, or if it should fail for
-f     invoked with STATUS set to an error value, or if it should fail for
-*     any reason.
-*     - It is assumes that the system time (returned by the C time()
-*     function) follows the POSIX standard, representing a continuous 
-*     monotonic increasing count of SI seconds since the epoch 00:00:00 
-*     UTC 1 January 1970 AD (equivalent to TAI with a constant offset).
-*     Resolution is one second.
-*     - An error will be reported if the TimeFrame has a TimeScale value
-*     which cannot be converted to TAI (e.g. "angular" systems such as
-*     UT1, GMST, LMST and LAST).
-*     - Any inaccuracy in the system clock will be reflected in the value
-*     returned by this function.
-*--
-*/
-
-/* Local Constants: */
-
-/* Local Variables: */
-   AstMapping *map;
-   double result;
-   double systime;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a Mapping from the system time (TAI seconds relative to "tai_epoch")
-   to the system represented by the supplied TimeFrame. */
-   map = MakeMap( this, AST__MJD, astGetSystem( this ), 
-                  AST__TAI, astGetTimeScale( this ),
-                  tai_epoch, astGetTimeOrigin( this ),
-                  "s", astGetUnit( this, 0 ), "astCurrentTime", status );
-   if( !map ) {
-      astError( AST__INCTS, "astCurrentTime(%s): Cannot convert the "
-                "current system time to the required timescale (%s).", status,
-                astGetClass( this ), 
-                TimeScaleString( astGetTimeScale( this ), status ) );
-
-/* Get the system time. The "time" function returns a "time_t" which may be
-   encoded in any way. We use "difftime" to convert this into a floating
-   point number of seconds by taking the difference between the current
-   time and zero time. This assumes nothing about the structure of a
-  "time_t" except that zero can be cast into a time_t representing
-   the epoch. */
-   } else {
-      systime = difftime( time( NULL ), (time_t) 0 );
-
-/* Use the Mapping to convert the time into the requied system. */
-      astTran1( map, 1, &systime, 1, &result );
-
-/* Free resources */
-      map = astAnnul( map );
-   }
-
-/* Set result to AST__BAD if an error occurred. */
-   if( !astOK ) result = AST__BAD;   
-
-/* Return the result. */
-   return result;
-}
-
-static const char *DefUnit( AstSystemType system, const char *method,
-                            const char *class, int *status ){
-/*
-*  Name:
-*     DefUnit
-
-*  Purpose:
-*     Return the default units for a time coordinate system type.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *DefUnit( AstSystemType system, const char *method,
-*                          const char *class, int *status )
-
-*  Class Membership:
-*     TimeFrame member function.
-
-*  Description:
-*     This function returns a textual representation of the default 
-*     units associated with the specified time coordinate system.
-
-*  Parameters:
-*     system
-*        The time coordinate system.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A string describing the default units. This string follows the
-*     units syntax described in FITS WCS paper I "Representations of world
-*     coordinates in FITS" (Greisen & Calabretta).
-
-*  Notes:
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Value to return */
-
-/* Initialize */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get an identifier for the default units. */
-   if( system == AST__MJD ) {
-      result = "d";
-   } else if( system == AST__JD ) {
-      result = "d";
-   } else if( system == AST__BEPOCH ) {
-      result = "yr";
-   } else if( system == AST__JEPOCH ) {
-      result = "yr";
-
-/* Report an error if the coordinate system was not recognised. */
-   } else {
-      astError( AST__SCSIN, "%s(%s): Corrupt %s contains illegal System "
-                "identification code (%d).", status, method, class, class, 
-                (int) system );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *Format( AstFrame *this_frame, int axis, double value, int *status ) {
-/*
-*  Name:
-*     Format
-
-*  Purpose:
-*     Format a coordinate value for a TimeFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *Format( AstFrame *this, int axis, double value, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astFormat method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to a string containing the formatted
-*     (character) version of a coordinate value for a TimeFrame axis. The
-*     formatting applied is that specified by a previous invocation of the
-*     astSetFormat method. A suitable default format is applied if necessary.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     axis
-*        The number of the axis (zero-based) for which formatting is to be
-*        performed.
-*     value
-*        The coordinate value to be formatted, in radians.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the formatted value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            
-   AstMapping *map;       
-   AstSystemType sys;
-   AstTimeFrame *this;    
-   AstTimeScaleType ts;   
-   char *d;    
-   char sep;
-   char tbuf[ 100 ];
-   char sign[ 2 ];
-   const char *fmt;    
-   const char *result;    
-   const char *u;
-   double fd;
-   double mjd;            
-   double off;
-   int df;
-   int id;
-   int ihmsf[ 4 ];    
-   int im;
-   int iy;
-   int j;
-   int ndp;               
-   int tlen;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astFormat" );
-
-/* Check if a bad coordinate value was supplied and return a pointer to an
-   appropriate string if necessary. */
-   if ( value == AST__BAD ) {
-      result = "<bad>";
-   } else {
-
-/* If the format string does not indicate a date/time format, invoke the
-   parent Format method. */
-      fmt = astGetFormat( this, 0 );
-      df = DateFormat( fmt, &ndp, &sep, status );
-      if( !df ) {
-         result = (*parent_format)( this_frame, axis, value, status );
-
-/* Otherwise, format the value as a date/time */
-      } else {
-
-/* Convert the value to an absolute MJD in units of days. */
-         ts = astGetTimeScale( this );
-         sys = astGetSystem( this );
-         off = astGetTimeOrigin( this );
-         u = astGetUnit( this, 0 );
-         map = MakeMap( this, sys, AST__MJD, ts, ts, off, 0.0, u, "d", 
-                        "astFormat", status );
-         if( map ) {
-            astTran1( map, 1, &value, 1, &mjd );
-            map = astAnnul( map );
-
-/* If no time fields will be produced, round to the nearest day. */
-            if( ndp < 0 ) mjd = (int) ( mjd + 0.5 );
-
-/* Convert the MJD into a set of numeric date fields, plus day fraction,
-   and format them. */
-            palSlaDjcl( mjd, &iy, &im, &id, &fd, &j );
-            d = format_buff;
-            d += sprintf( d, "%4d-%2.2d-%2.2d", iy, im, id );
-
-/* If required, convert the day fraction into a set of numerical time
-   fields. */
-            if( ndp >= 0 ) {
-               palSlaDd2tf( ndp, fd, sign, ihmsf );
-
-/* Format the time fields. */
-               if( ndp > 0 ) {
-                  tlen = sprintf( tbuf, "%c%2.2d:%2.2d:%2.2d.%*.*d", sep, 
-                                  ihmsf[0], ihmsf[1], ihmsf[2], ndp, ndp, 
-                                  ihmsf[3] );
-               } else {
-                  tlen = sprintf( tbuf, "%c%2.2d:%2.2d:%2.2d", sep, ihmsf[0],
-                                  ihmsf[1], ihmsf[2] );
-               }
-
-/* Add in the formatted time. */
-               d += sprintf( d, "%s", tbuf );
-
-            }
-            result = format_buff;         
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static double FromMJD( AstTimeFrame *this, double oldval, int *status ){
-/*
-*
-*  Name:
-*     FromMJD
-
-*  Purpose:
-*     Convert a supplied MJD value to the System of the supplied TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double FromMJD( AstTimeFrame *this, double oldval, int *status )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function converts the supplied time value from an MJD to 
-*     the System of the supplied TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     oldval
-*        The value to be converted. It is assume to be an absolute MJD
-*        value (i.e. zero offset) in units of days.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The converted value (with zero offset), in the default units
-*     associated with the System of "this".
-
-*/
-
-/* Local Variables: */
-   AstTimeMap *timemap;
-   AstSystemType newsys;
-   double args[ 2 ];
-   double result;              
-   
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the System attribute from the supplied TimeFrame. */
-   newsys = astGetSystem( this );
-
-/* If this is MJD just return the value unchanged. */
-   if( newsys == AST__MJD ) {
-      result = oldval;
-
-/* Otherwise create a TimeMap wich converts from the MJD to the required
-   system, and use it to transform the supplied value. */
-   } else {
-      timemap = astTimeMap( 0, "", status );
-
-/* The supplied and returned values are assumed to have zero offset.*/
-      args[ 0 ] = 0.0;
-      args[ 1 ] = 0.0;
-
-/* If required, add a TimeMap conversion which converts from MJD to the
-   new system. */
-      if( newsys == AST__JD ) {
-         astTimeAdd( timemap, "MJDTOJD", args );
-
-      } else if( newsys == AST__JEPOCH ) {
-         astTimeAdd( timemap, "MJDTOJEP", args );
-
-      } else if( newsys == AST__BEPOCH ) {
-         astTimeAdd( timemap, "MJDTOBEP", args );
-      }
-
-/* Use the TimeMap to convert the supplied value. */
-      astTran1( timemap, 1, &oldval, 1, &result );
-
-/* Free resources */
-      timemap = astAnnul( timemap );
-
-   }
-
-/* Return the result */
-   return result;
-}
-
-
-static double Gap( AstFrame *this_frame, int axis, double gap, int *ntick, int *status ) {
-/*
-*  Name:
-*     Gap
-
-*  Purpose:
-*     Find a "nice" gap for tabulating Frame axis values.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double Gap( AstFrame *this, int axis, double gap, int *ntick, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGap protected
-*     method inherited from the Frame class).
-
-*     This function returns a gap size which produces a nicely spaced
-*     series of formatted values for a Frame axis, the returned gap
-*     size being as close as possible to the supplied target gap
-*     size. It also returns a convenient number of divisions into
-*     which the gap can be divided.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     axis
-*        The number of the axis (zero-based) for which a gap is to be found.
-*     gap
-*        The target gap size.
-*     ntick
-*        Address of an int in which to return a convenient number of
-*        divisions into which the gap can be divided.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The nice gap size.
-
-*  Notes:
-*     - A value of zero is returned if the target gap size is zero.
-*     - A negative gap size is returned if the supplied gap size is negative.
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstTimeFrame *this;           
-   AstTimeScaleType ts;
-   const char *fmt;
-   double mjdgap;
-   double result;           
-   double xin[2];
-   double xout[2];
-   int df;
-   int ndp;
-
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Validate the axis index. */
-   astValidateAxis( this_frame, axis, "astGap" );
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* Use the parent astGap function unless the Format attribute indicates 
-   that axis values are to be formatted as multi-field date/time strings. */
-   fmt = astGetFormat( this, 0 );
-   df = DateFormat( fmt, &ndp, NULL, status );
-   if( !df ) {
-      result = (*parent_gap)( this_frame, axis, gap, ntick, status );
-
-/* Otherwise. */
-   } else {
-     
-/* Get a Mapping which converts TimeFrame values to MJD values. */
-      ts = astGetTimeScale( this );
-      map = MakeMap( this, astGetSystem( this ), AST__MJD, ts, ts, 
-                     astGetTimeOrigin( this ), 0.0, astGetUnit( this, 0 ), 
-                     "d", "astGap", status );
-      if( map ) {
-
-/* Use it to transform two TimeFrame times to MJD. The first is the
-   current time, and the second is the current time plus the target gap. */
-         xin[ 0 ] = astCurrentTime( this );
-         xin[ 1 ] = xin[ 0 ] + gap;    
-         astTran1( map, 2, xin, 1, xout );
-
-/* Find the target MJD gap. */
-         mjdgap = xout[ 1 ] - xout[ 0 ];
-
-/* If it is 1 year or more, use the parent astGap method to find a nice
-   number of years, and convert back to days. */
-         if( mjdgap >= 365.25 ) {
-            mjdgap = 365.25*(*parent_gap)( this_frame, axis, mjdgap/365.25, ntick, status );
-
-/* If it is more than 270 days days use 1 year. */
-         } else if( mjdgap > 270.0 ) {
-            mjdgap = 365.25;
-            *ntick = 4;
-
-/* If it is more than 150 days days use 180 days (roughly half a year).
-   Use 6 divisions (30 days each, or roughly 1 month). */
-         } else if( mjdgap > 150.0 ) {
-            mjdgap = 180.0;
-            *ntick = 6;
-
-/* If it is more than 90 days days use 120 days (roughly 4 months). */
-         } else if( mjdgap > 90.0 ) {
-            mjdgap = 120.0;
-            *ntick = 4;
-
-/* If it is more than 45 days days use 60 days (roughly 2 months). */
-         } else if( mjdgap > 45.0 ) {
-            mjdgap = 60.0;
-            *ntick = 2;
-
-/* If it is more than 22 days days use 30 days (roughly one month). Use 3
-   ten day divisions. */
-         } else if( mjdgap > 22.0 ) {
-            mjdgap = 30.0;
-            *ntick = 3;
-
-/* If it is more than 12 days days use 15 days (roughly half a month). */
-         } else if( mjdgap > 12.0 ) {
-            mjdgap = 15.0;
-            *ntick = 3;
-
-/* If it is more than 7.5 days days use 10 days, with 5 two-day divisions. */
-         } else if( mjdgap > 7.5 ) {
-            mjdgap = 10.0;
-            *ntick = 5;
-
-/* If it is more than 4.5 days days use 5 days. */
-         } else if( mjdgap > 4.5 ) {
-            mjdgap = 5.0;
-            *ntick = 5;
-
-/* If it is more than 3 days days use 4 days. */
-         } else if( mjdgap > 3.0 ) {
-            mjdgap = 4.0;
-            *ntick = 4;
-
-/* If it is more than 1.5 days days use 2 days. */
-         } else if( mjdgap > 1.5 ) {
-            mjdgap = 2.0;
-            *ntick = 2;
-
-/* If it is more than 0.5 of a day use 1 day. */
-         } else if( mjdgap > 0.5 ) {
-            mjdgap = 1.0;
-            *ntick = 4;
-
-/* Otherwise, if the format indicates that no time field is allowed, 
-   use 1 day. */
-         } else if( ndp < 0 ) {
-            mjdgap = 1.0;
-            *ntick = 2;
-
-/* Otherwise (i.e. if the target gap is 0.5 day or less and the format 
-   indicates that a time field is allowed), choose a value which looks
-   nice. */
-         } else if( mjdgap >= 6.0/24.0 ) {    /* 12 hours */
-            mjdgap = 12.0/24.0;
-            *ntick = 4;
-    
-         } else if( mjdgap >= 3.0/24.0 ) {     /* 6 hours */
-            mjdgap = 6.0/24.0;
-            *ntick = 3;
-    
-         } else if( mjdgap >= 1.0/24.0 ) {     /* 2 hours */
-            mjdgap = 2.0/24.0;
-            *ntick = 4;
-    
-         } else if( mjdgap >= 15.0/1440.0 ) {  /* 30 minutes */
-            mjdgap = 30.0/1440.0;
-            *ntick = 3;
-    
-         } else if( mjdgap >= 5.0/1440.0 ) {  /* 10 minutes */
-            mjdgap = 10.0/1440.0;
-            *ntick = 5;
-    
-         } else if( mjdgap >= 0.5/1440.0 ) {   /* 1 minute */
-            mjdgap = 1.0/1440.0;
-            *ntick = 4;
-
-         } else if( mjdgap >= 15.0/86400.0 ) { /* 30 seconds */
-            mjdgap = 30.0/86400.0;
-            *ntick = 3;
-    
-         } else if( mjdgap >= 5.0/86400.0 ) { /* 10 seconds */
-            mjdgap = 10.0/86400.0;
-            *ntick = 5;
-    
-         } else if( mjdgap >= 0.5/86400.0 ) {  /* 1 second */
-            mjdgap = 1.0/86400.0;
-            *ntick = 4;
-    
-         } else {                              /* Less than 1 second */
-            mjdgap = 86400.0*(*parent_gap)( this_frame, axis, mjdgap/86400.0, ntick, status );
-
-         }              
-
-/* Convert the MJD gap back into the system of the supplied TimeFrame. */
-         xout[ 1 ] = xout[ 0 ] + mjdgap;
-         astTran1( map, 2, xout, 0, xin );
-         result = xin[ 1 ] - xin[ 0 ];
-
-/* Free resources */
-         map = astAnnul( map );
-
-/* If no Mapping could be found, use the parent astGap method. */
-      } else {
-         result = (*parent_gap)( this_frame, axis, gap, ntick, status );
-      }
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = 0.0;
-
-/* Return the result. */
-   return result;
-}
-
-static int GetActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetActiveUnit
-
-*  Purpose:
-*     Obtain the value of the ActiveUnit flag for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int GetActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns the value of the ActiveUnit flag for a
-*    TimeFrame, which is always 1.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The value to use for the ActiveUnit flag (1).
-
-*/
-   return 1;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the protected astGetAttrib
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a TimeFrame, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - The returned string pointer may point at memory allocated
-*     within the TimeFrame, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the TimeFrame. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to the TimeFrame structure */
-   AstTimeScaleType ts;          /* Time scale */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   char *new_attrib;             /* Pointer value to new attribute name */
-   const char *result;           /* Pointer value to return */
-   double dval;                  /* Attribute value */
-   int len;                      /* Length of attrib string */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   TimeFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strcmp( attrib, "direction" ) || 
-        !strcmp( attrib, "bottom" ) ||
-        !strcmp( attrib, "top" ) ||
-        !strcmp( attrib, "format" ) ||
-        !strcmp( attrib, "label" ) ||
-        !strcmp( attrib, "symbol" ) ||
-        !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
-   "(1)" and then use the parent GetAttrib method. */
-      new_attrib = astMalloc( len + 4 );
-      if( new_attrib ) {
-         memcpy( new_attrib, attrib, len );
-         memcpy( new_attrib + len, "(1)", 4 ); 
-         result = (*parent_getattrib)( this_object, new_attrib, status );
-         new_attrib = astFree( new_attrib );
-      }
-
-/* AlignTimeScale. */
-/* --------------- */
-/* Obtain the AlignTimeScale code and convert to a string. */
-   } else if ( !strcmp( attrib, "aligntimescale" ) ) {
-      ts = astGetAlignTimeScale( this );
-      if ( astOK ) {
-         result = TimeScaleString( ts, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid AlignTimeScale "
-                     "identification code (%d).", status, astGetClass( this ), 
-                     astGetClass( this ), (int) ts );
-         }
-      }
-
-/* ClockLat. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clocklat" ) ) {
-      result = astGetAttrib( this, "obslat" );
-
-/* ClockLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clocklon" ) ) {
-      result = astGetAttrib( this, "obslon" );
-
-/* TimeOrigin. */
-/* ----------- */
-   } else if ( !strcmp( attrib, "timeorigin" ) ) {
-      dval = GetTimeOriginCur( this, status );
-      if( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* LTOffset. */
-/* --------- */
-   } else if ( !strcmp( attrib, "ltoffset" ) ) {
-      dval = astGetLTOffset( this );
-      if( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* TimeScale. */
-/* ---------- */
-/* Obtain the TimeScale code and convert to a string. */
-   } else if ( !strcmp( attrib, "timescale" ) ) {
-      ts = astGetTimeScale( this );
-      if ( astOK ) {
-         result = TimeScaleString( ts, status );
-
-/* Report an error if the value was not recognised. */
-         if ( !result ) {
-            astError( AST__SCSIN,
-                     "astGetAttrib(%s): Corrupt %s contains invalid TimeScale "
-                     "identification code (%d).", status, astGetClass( this ), 
-                     astGetClass( this ), (int) ts );
-         }
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetTimeOriginCur( AstTimeFrame *this, int *status ) {
-/*
-*  Name:
-*     GetTimeOriginCur
-
-*  Purpose:
-*     Obtain the TimeOrigin attribute for a TimeFrame in current units.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double GetTimeOriginCur( AstTimeFrame *this, int *status )
-
-*  Class Membership:
-*     TimeFrame virtual function 
-
-*  Description:
-*     This function returns the TimeOrigin attribute for a TimeFrame, in
-*     the current units of the TimeFrame. The protected astGetTimeOrigin
-*     method can be used to obtain the time origin in the default units of 
-*     the TimeFrame's System.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The TimeOrigin value, in the units, system and timescale specified
-*     by the current values of the Unit, System and TimeScale attributes
-*     within "this".
-
-*  Notes:
-*     - AST__BAD is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   const char *cur;
-   const char *def;
-   double result;         
-   double defval;
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the value in the default units */
-   result = astGetTimeOrigin( this );
-
-/* If non-zero we convert to the current units.*/
-   if( result != 0.0 && result != AST__BAD ) {
-
-/* Get the default units for the TimeFrame's System. */
-      def = DefUnit( astGetSystem( this ), "astGetTimeOrigin", "TimeFrame", status );
-
-/* Get the current units from the TimeFrame. */
-      cur = astGetUnit( this, 0 );
-
-/* If the units differ, get a Mapping from default to current units. */
-      if( cur && def ){
-         if( strcmp( cur, def ) ) {
-            map = astUnitMapper( def, cur, NULL, NULL );
-
-/* Report an error if the units are incompatible. */
-            if( !map ) {
-               astError( AST__BADUN, "%s(%s): The current units (%s) are not suitable "
-                         "for a TimeFrame.", status, "astGetTimeOrigin", astGetClass( this ), 
-                         cur );
-
-/* Otherwise, transform the stored origin value.*/
-            } else {
-               defval = result;
-               astTran1( map, 1, &defval, 1, &result );
-               map = astAnnul( map );
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetDomain( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetDomain
-
-*  Purpose:
-*     Obtain a pointer to the Domain attribute string for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *GetDomain( AstFrame *this, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetDomain protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function returns a pointer to the Domain attribute string
-*    for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a constant null-terminated string containing the
-*     Domain value.
-
-*  Notes:
-*     - The returned pointer or the string it refers to may become
-*     invalid following further invocation of this function or
-*     modification of the TimeFrame.
-*     - A NULL pointer is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to TimeFrame structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* If a Domain attribute string has been set, invoke the parent method
-   to obtain a pointer to it. */
-   if ( astTestDomain( this ) ) {
-      result = (*parent_getdomain)( this_frame, status );
-
-/* Otherwise, provide a pointer to a suitable default string. */
-   } else {
-      result = "TIME";
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetEpoch( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetEpoch
-
-*  Purpose:
-*     Get a value for the Epoch attribute of a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double GetEpoch( AstFrame *this, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetEpoch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function returns a value for the Epoch attribute of a
-*     TimeFrame.  
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Epoch attribute value.
-
-*  Notes:
-*     - A value of AST__BAD will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstSystemType sys;
-   AstTimeFrame *this;
-   AstTimeScaleType ts;
-   const char *u;
-   double oldval;
-   double result;   
-
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* If an Epoch attribute value has been set, invoke the parent method
-   to obtain it. */
-   if ( astTestEpoch( this ) ) {
-      result = (*parent_getepoch)( this_frame, status );
-
-/* Otherwise, if the TimeOrigin value is set in the TimeFrame,
-   return it, converted to an absolute TDB MJD. */
-   } else if( astTestTimeOrigin( this ) ){
-
-/* Get the required properties of the TimeFrame. */
-      oldval = astGetTimeOrigin( this );
-      ts = astGetTimeScale( this );
-      sys = astGetSystem( this );
-      u = DefUnit( sys, "astGetEpoch", "TimeFrame", status );
-
-/* Epoch is defined as a TDB value. If the timescale is stored in an angular 
-   timescale such as UT1, then we would not normally be able to convert it
-   to TDB since knowledge of DUT1 is required (the difference between UTC
-   and UT1). Since the default Epoch value is not critical we assume a DUT1 
-   value of zero in this case. We first map the stored value to UT1 then 
-   from UTC to TDB (using the approximation UT1 == UTC). */
-      if( ts == AST__UT1 || ts == AST__GMST || 
-          ts == AST__LAST || ts == AST__LMST ) {
-         map = MakeMap( this, sys, AST__MJD, ts, AST__UT1, 0.0, 0.0, u,
-                        "d", "astGetEpoch", status );
-         if( map ) {
-            astTran1( map, 1, &oldval, 1, &result );
-            map = astAnnul( map );
-
-/* Update the values to use when converting to TBD. */
-            oldval = result;
-            ts = AST__UTC;
-            sys = AST__MJD;
-            u = "d";
-
-         } else if( astOK ) {
-            astError( AST__INTER, "astGetEpoch(%s): No Mapping from %s to "
-                      "UT1 (AST internal programming error).", status, 
-                      astGetClass( this ), TimeScaleString(  ts, status ) );
-         }
-      }
-
-/* Now convert to TDB */
-      map = MakeMap( this, sys, AST__MJD, ts, AST__TDB, 0.0, 0.0, u,
-                     "d", "astGetEpoch", status );
-      if( map ) {
-         oldval = astGetTimeOrigin( this );
-         astTran1( map, 1, &oldval, 1, &result );
-         map = astAnnul( map );
-
-      } else if( astOK ) {
-         astError( AST__INTER, "astGetEpoch(%s): No Mapping from %s to "
-                   "TDB (AST internal programming error).", status, 
-                   astGetClass( this ), TimeScaleString(  ts, status ) );
-      }
-
-/* Otherwise, return the default Epoch value from the parent Frame. */
-   } else {
-      result =  (*parent_getepoch)( this_frame, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetLabel( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetLabel
-
-*  Purpose:
-*     Access the Label string for a TimeFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *GetLabel( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetLabel method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Label string for a specified axis
-*     of a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstMapping *map;              /* Mapping between units */
-   AstSystemType system;         /* Code identifying type of time coordinates */
-   char *new_lab;                /* Modified label string */
-   const char *fmt;              /* Pointer to original Format string */
-   const char *result;           /* Pointer to label string */
-   double ltoff;                 /* Local Time offset from UTC (hours) */
-   double orig;                  /* Time origin (seconds) */
-   int fmtSet;                   /* Was Format attribute set? */
-   int ndp;                      /* Number of decimal places for seconds field */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetLabel" );
-
-/* Check if a value has been set for the required axis label string. If so,
-   invoke the parent astGetLabel method to obtain a pointer to it. */
-   if ( astTestLabel( this, axis ) ) {
-      result = (*parent_getlabel)( this, axis, status );
-
-/* Otherwise, provide a suitable default label. */
-   } else {
-
-/* If the Format attribute indicates that time values will be formatted
-   as dates, then choose a suitable label. */
-      fmt = astGetFormat( this, 0 );
-      if( DateFormat( fmt, &ndp, NULL, status ) ) {
-         result = ( ndp >= 0 ) ? "Date/Time" : "Date";
-
-/* Otherwise, identify the time coordinate system described by the 
-   TimeFrame. */
-      } else {        
-         system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default label string. */
-         if ( astOK ) {
-            result = strcpy( getlabel_buff, SystemLabel( system, status ) );
-            getlabel_buff[ 0 ] = toupper( getlabel_buff[ 0 ] );
-
-/* If a non-zero TimeOrigin has been specified, include the offset now as a 
-   date/time string. */
-            orig = astGetTimeOrigin( this );
-            if( orig != 0.0 ) {
-
-/* Save the Format attribute, and then temporarily set it to give a date/time 
-   string. */
-               fmt = astStore( NULL, fmt, strlen( fmt ) + 1 );
-               fmtSet = astTestFormat( this, 0 );
-               astSetFormat( this, 0, "iso.0" );
-
-/* Format the origin value as an absolute time and append it to the
-   returned label string. Note, the origin always corresponds to a
-   TimeFrame axis value of zero. */
-               sprintf( getlabel_buff + strlen( getlabel_buff ), " offset from %s", 
-                        astFormat( this, 0, 0.0 ) );
-
-/* Re-instate the original Format value. */
-               if( fmtSet ) {
-                  astSetFormat( this, 0, fmt );                        
-               } else {
-                  astClearFormat( this, 0 );
-               }
-
-/* Free the memory holding the copy of the format string. */
-               fmt = astFree( (char *) fmt );
-
-/* If the time of day is "00:00:00", remove it. */
-               if( !strcmp( getlabel_buff + strlen( getlabel_buff ) - 8, "00:00:00" ) ) {
-                  getlabel_buff[ strlen( getlabel_buff ) - 8 ] = 0;
-               }
-            }
-
-/* Modify this default to take account of the current value of the Unit 
-   attribute, if set. */
-            if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the 
-   units indicated by the Unit attribute. This Mapping is used to modify
-   the existing default label appropriately. For instance, if the default
-   units is "yr" and the actual units is "log(yr)", then the default label
-   of "Julian epoch" is changed to "log( Julian epoch )". */
-               map = astUnitMapper( DefUnit( system, "astGetLabel", 
-                                             astGetClass( this ), status ),
-                                    astGetUnit( this, axis ), result,
-                                    &new_lab );
-               if( new_lab ) {
-                  result = strcpy( getlabel_buff, new_lab );
-                  new_lab = astFree( new_lab );
-               }
-
-/* Annul the unused Mapping. */
-               if( map ) map = astAnnul( map );
-            }
-         }
-      }
-
-/* If the time is a Local Time, indicate the offset from UTC. */
-      if( astGetTimeScale( this ) == AST__LT ) {
-         ltoff = astGetLTOffset( this );
-         if( ltoff >= 0.0 ) {
-            sprintf( getlabel_buff, "%s (UTC+%g)", result, ltoff );
-         } else {
-            sprintf( getlabel_buff, "%s (UTC-%g)", result, -ltoff );
-         }
-         result = getlabel_buff;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetSymbol( AstFrame *this, int axis, int *status ) {
-/*
-*  Name:
-*     GetSymbol
-
-*  Purpose:
-*     Obtain a pointer to the Symbol string for a TimeFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *GetSymbol( AstFrame *this, int axis, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetSymbol method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Symbol string for a specified axis
-*     of a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     axis
-*        Axis index (zero-based) identifying the axis for which information is
-*        required.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated character string containing the
-*     requested information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstMapping *map;              /* Mapping between units */
-   AstSystemType system;         /* Code identifying type of sky coordinates */
-   char *new_sym;                /* Modified symbol string */
-   const char *result;           /* Pointer to symbol string */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Initialise. */
-   result = NULL;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetSymbol" );
-
-/* Check if a value has been set for the required axis symbol string. If so,
-   invoke the parent astGetSymbol method to obtain a pointer to it. */
-   if ( astTestSymbol( this, axis ) ) {
-      result = (*parent_getsymbol)( this, axis, status );
-
-/* Otherwise, identify the sky coordinate system described by the TimeFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* If OK, supply a pointer to a suitable default Symbol string. */
-      if ( astOK ) {
-
-         if( system == AST__MJD ) {
-	    result = "MJD";
-         } else if( system == AST__JD ) {
-	    result = "JD";
-         } else if( system == AST__BEPOCH ) {
-	    result = "BEP";
-         } else if( system == AST__JEPOCH ) {
-	    result = "JEP";
-
-/* Report an error if the coordinate system was not recognised. */
-         } else {
-	    astError( AST__SCSIN, "astGetSymbol(%s): Corrupt %s contains "
-		      "invalid System identification code (%d).", status, 
-                      astGetClass( this ), astGetClass( this ), (int) system );
-         }
-
-/* Modify this default to take account of the current value of the Unit 
-   attribute, if set. */
-         if( astTestUnit( this, axis ) ) {
-
-/* Find a Mapping from the default Units for the current System, to the 
-   units indicated by the Unit attribute. This Mapping is used to modify
-   the existing default symbol appropriately. For instance, if the default
-   units is "yr" and the actual units is "log(yr)", then the default symbol
-   of "JEP" is changed to "log( JEP )". */
-            map = astUnitMapper( DefUnit( system, "astGetSymbol", 
-                                          astGetClass( this ), status ),
-                                 astGetUnit( this, axis ), result,
-                                 &new_sym );
-            if( new_sym ) {
-               result = strcpy( getsymbol_buff, new_sym );
-               new_sym = astFree( new_sym );
-            }
-
-/* Annul the unused Mapping. */
-            if( map ) map = astAnnul( map );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetAlignSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetAlignSystem
-
-*  Purpose:
-*     Obtain the AlignSystem attribute for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "Specframe.h"
-*     AstSystemType GetAlignSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetAlignSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the AlignSystem attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The AlignSystem value.
-
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to TimeFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* If a AlignSystem attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestAlignSystem( this ) ) {
-      result = (*parent_getalignsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__MJD;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstTimeScaleType GetAlignTimeScale( AstTimeFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetAlignTimeScale
-
-*  Purpose:
-*     Obtain the AlignTimeScale attribute for a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstTimeScaleType GetAlignTimeScale( AstTimeFrame *this )
-
-*  Class Membership:
-*     TimeFrame virtual function 
-
-*  Description:
-*     This function returns the System attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADTS is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstTimeScaleType result;         
-   AstTimeScaleType ts;
-
-/* Initialise. */
-   result = AST__BADTS;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If a value has been set, return it. */
-   if( this->aligntimescale != AST__BADTS ) {
-      result = this->aligntimescale;
-
-/* Otherwise, return a default depending on the current TimeScale value */
-   } else {
-      ts = astGetTimeScale( this );
-      if ( ts == AST__UT1 || ts == AST__LAST || ts == AST__LMST || ts == AST__GMST ) {
-         result = AST__UT1;
-      } else {
-         result = AST__TAI;
-      }
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstSystemType GetSystem( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetSystem
-
-*  Purpose:
-*     Obtain the System attribute for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstSystemType GetSystem( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns the System attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADSYSTEM is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to TimeFrame structure */
-   AstSystemType result;         /* Value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* If a System attribute has been set, invoke the parent method to obtain 
-   it. */
-   if ( astTestSystem( this ) ) {
-      result = (*parent_getsystem)( this_frame, status );
-
-/* Otherwise, provide a suitable default. */
-   } else {
-      result = AST__MJD;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstTimeScaleType GetTimeScale( AstTimeFrame *this, int *status ) {
-/*
-*+
-*  Name:
-*     astGetTimeScale
-
-*  Purpose:
-*     Obtain the TimeScale attribute for a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstTimeScaleType GetTimeScale( AstTimeFrame *this )
-
-*  Class Membership:
-*     TimeFrame virtual function 
-
-*  Description:
-*     This function returns the System attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-
-*  Returned Value:
-*     The System value.
-
-*  Notes:
-*     - AST__BADTS is returned if this function is invoked with
-*     the global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstTimeScaleType result;         
-
-/* Initialise. */
-   result = AST__BADTS;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If a value has been set, return it. */
-   if( this->timescale != AST__BADTS ) {
-      result = this->timescale;
-
-/* Otherwise, return a default depending on the current System value. */
-   } else {
-      if ( astGetSystem( this ) == AST__BEPOCH ) {
-         result = AST__TT;
-      } else {
-         result = AST__TAI;
-      }
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetTitle( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     GetTitle
-
-*  Purpose:
-*     Obtain a pointer to the Title string for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *GetTitle( AstFrame *this_frame, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetTitle method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Title string for a TimeFrame.
-*     A pointer to a suitable default string is returned if no Title value has
-*     previously been set.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null-terminated character string containing the requested
-*     information.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstSystemType system;         /* Code identifying type of coordinates */
-   AstTimeScaleType ts;          /* Time scale value */
-   AstTimeFrame *this;           /* Pointer to TimeFrame structure */
-   const char *fmt;              /* Pointer to original Format string */
-   const char *result;           /* Pointer to result string */
-   double ltoff;                 /* Local Time offset from UTC (hours) */
-   double orig;                  /* Time origin (seconds) */
-   int fmtSet;                   /* Was Format attribute set? */
-   int nc;                       /* No. of characters added */
-   int ndp;                      /* Number of decimal places */
-   int pos;                      /* Buffer position to enter text */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_frame);
-
-/* Initialise. */
-   result = NULL;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* See if a Title string has been set. If so, use the parent astGetTitle
-   method to obtain a pointer to it. */
-   if ( astTestTitle( this ) ) {
-      result = (*parent_gettitle)( this_frame, status );
-
-/* Otherwise, we will generate a default Title string. Obtain the values of the
-   TimeFrame's attributes that determine what this string will be. */
-   } else {
-      system = astGetSystem( this );
-      orig = GetTimeOriginCur( this, status );
-      ts = astGetTimeScale( this );
-      if ( astOK ) {
-         result = gettitle_buff;
-
-/* Begin with the system's default label. */
-         pos = sprintf( gettitle_buff, "%s", SystemLabel( system, status ) );
-         gettitle_buff[ 0 ] = toupper( gettitle_buff[ 0 ] );
-
-/* Append the time scale code, if a value has been set for the timescale. 
-   Do not do this if the system is BEPOCH since BEPOCH can only be used
-   with the TT timescale. */
-         if( system != AST__BEPOCH && astTestTimeScale( this ) ) {
-            nc = sprintf( gettitle_buff + pos, " [%s", TimeScaleString( ts, status ) );
-            pos += nc;
-
-/* For Local Time, include the offset from UTC. */
-            if( ts == AST__LT ) {
-               ltoff = astGetLTOffset( this );
-               if( ltoff >= 0.0 ) {
-                  nc = sprintf( gettitle_buff + pos, " (UTC+%g)", ltoff );
-               } else {
-                  nc = sprintf( gettitle_buff + pos, " (UTC-%g)", -ltoff );
-               }
-               pos += nc;
-            }
-
-/* Close the brackets. */
-            nc = sprintf( gettitle_buff + pos, "]" );
-            pos += nc;
-         }
-
-/* If a non-zero offset has been specified, and the Format attribute does
-   not indicate a date string (which is always absolute), include the
-   offset now as a date/time string. */
-         fmt = astGetFormat( this, 0 );
-         if( orig != 0.0 && !DateFormat( fmt, &ndp, NULL, status ) ) {
-
-/* Save the Format attribute, and then temporarily set it to give a date/time 
-   string. */
-            fmt = astStore( NULL, fmt, strlen( fmt ) + 1 );
-            fmtSet = astTestFormat( this, 0 );
-            astSetFormat( this, 0, "iso.0" );
-
-/* Format the origin value as an absolute time and append it to the
-   returned title string. Note, the origin always corresponds to a
-   TimeFrame axis value of zero. */
-            nc = sprintf( gettitle_buff+pos, " offset from %s", 
-                          astFormat( this, 0, 0.0 ) );
-            pos += nc;
-
-/* Re-instate the original Format value. */
-            if( fmtSet ) {
-               astSetFormat( this, 0, fmt );                        
-            } else {
-               astClearFormat( this, 0 );
-            }
-
-/* Free the Format string copy. */
-            fmt = astFree( (char *) fmt );
-
-         }
-      }
-   }
-
-/* If an error occurred, clear the returned pointer value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *GetUnit( AstFrame *this_frame, int axis, int *status ) {
-/*
-*  Name:
-*     GetUnit
-
-*  Purpose:
-*     Obtain a pointer to the Unit string for a TimeFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *GetUnit( AstFrame *this_frame, int axis )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astGetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function returns a pointer to the Unit string for a specified axis
-*     of a TimeFrame. If the Unit attribute has not been set for the axis, a
-*     pointer to a suitable default string is returned instead.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-
-*  Returned Value:
-*     A pointer to a null-terminated string containing the Unit value.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to the TimeFrame structure */
-   AstSystemType system;         /* The TimeFrame's System value */
-   const char *result;           /* Pointer value to return */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astGetUnit" );
-
-/* If a value has been set for the Unit attribute, use the parent 
-   GetUnit method to return a pointer to the required Unit string. */
-   if( astTestUnit( this, axis ) ){
-      result = (*parent_getunit)( this_frame, axis, status );
-
-/* Otherwise, identify the time coordinate system described by the 
-   TimeFrame. */
-   } else {
-      system = astGetSystem( this );
-
-/* Return a string describing the default units. */
-      result = DefUnit( system, "astGetUnit", astGetClass( this ), status );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-void astInitTimeFrameVtab_(  AstTimeFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitTimeFrameVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void astInitTimeFrameVtab( AstTimeFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     TimeFrame vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the TimeFrame class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstFrameVtab *frame;          /* Pointer to Frame component of Vtab */
-   AstMapping *map;              /* Temporary Maping */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   double utc_epoch;             /* Unix epoch as a UTC MJD */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitFrameVtab( (AstFrameVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsATimeFrame) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstFrameVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-   vtab->ClearAlignTimeScale = ClearAlignTimeScale;
-   vtab->TestAlignTimeScale = TestAlignTimeScale;
-   vtab->GetAlignTimeScale = GetAlignTimeScale;
-   vtab->SetAlignTimeScale = SetAlignTimeScale;
-
-   vtab->ClearTimeOrigin = ClearTimeOrigin;
-   vtab->TestTimeOrigin = TestTimeOrigin;
-   vtab->GetTimeOrigin = GetTimeOrigin;
-   vtab->SetTimeOrigin = SetTimeOrigin;
-
-   vtab->ClearLTOffset = ClearLTOffset;
-   vtab->TestLTOffset = TestLTOffset;
-   vtab->GetLTOffset = GetLTOffset;
-   vtab->SetLTOffset = SetLTOffset;
-
-   vtab->ClearTimeScale = ClearTimeScale;
-   vtab->TestTimeScale = TestTimeScale;
-   vtab->GetTimeScale = GetTimeScale;
-   vtab->SetTimeScale = SetTimeScale;
-
-   vtab->CurrentTime = CurrentTime;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   frame = (AstFrameVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_getdomain = frame->GetDomain;
-   frame->GetDomain = GetDomain;
-
-   parent_getsystem = frame->GetSystem;
-   frame->GetSystem = GetSystem;
-   parent_setsystem = frame->SetSystem;
-   frame->SetSystem = SetSystem;
-   parent_clearsystem = frame->ClearSystem;
-   frame->ClearSystem = ClearSystem;
-
-   parent_getalignsystem = frame->GetAlignSystem;
-   frame->GetAlignSystem = GetAlignSystem;
-
-   parent_getlabel = frame->GetLabel;
-   frame->GetLabel = GetLabel;
-
-   parent_getsymbol = frame->GetSymbol;
-   frame->GetSymbol = GetSymbol;
-
-   parent_gettitle = frame->GetTitle;
-   frame->GetTitle = GetTitle;
-
-   parent_getepoch = frame->GetEpoch;
-   frame->GetEpoch = GetEpoch;
-
-   parent_getunit = frame->GetUnit;
-   frame->GetUnit = GetUnit;
-
-   parent_setunit = frame->SetUnit;
-   frame->SetUnit = SetUnit;
-
-   parent_match = frame->Match;
-   frame->Match = Match;
-
-   parent_overlay = frame->Overlay;
-   frame->Overlay = Overlay;
-
-   parent_subframe = frame->SubFrame;
-   frame->SubFrame = SubFrame;
-
-   parent_format = frame->Format;
-   frame->Format = Format;
-
-   parent_unformat = frame->Unformat;
-   frame->Unformat = Unformat;
-
-   parent_abbrev = frame->Abbrev;
-   frame->Abbrev = Abbrev;
-
-   parent_gap = frame->Gap;
-   frame->Gap = Gap;
-
-/* Store replacement pointers for methods which will be over-ridden by new
-   member functions implemented here. */
-   frame->GetActiveUnit = GetActiveUnit;
-   frame->TestActiveUnit = TestActiveUnit;
-   frame->ValidateSystem = ValidateSystem;
-   frame->SystemString = SystemString;
-   frame->SystemCode = SystemCode;
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetDump( vtab, Dump, "TimeFrame",
-               "Description of time coordinate system" );
-
-/* Convert the Unix Epoch (00:00:00 UTC 1 January 1970 AD) from UTC to TAI. */
-   LOCK_MUTEX2
-   map = MakeMap( NULL, AST__MJD, AST__MJD, AST__UTC, AST__TAI,
-                  0.0, 0.0, "d", "d", "astInitTimeFrameVtab", status );
-   utc_epoch = UNIX_EPOCH;
-   astTran1( map, 1, &utc_epoch, 1, &tai_epoch );
-   map = astAnnul( map );
-   UNLOCK_MUTEX2
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static AstMapping *MakeMap( AstTimeFrame *this, AstSystemType sys1, 
-                            AstSystemType sys2, AstTimeScaleType ts1, 
-                            AstTimeScaleType ts2, double off1, double off2,
-                            const char *unit1, const char *unit2,
-                            const char *method, int *status ){
-/*
-*  Name:
-*     MakeMap
-
-*  Purpose:
-*     Make a Mapping between stated timescales and systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstMapping *MakeMap( AstTimeFrame *this, AstSystemType sys1, 
-*                          AstSystemType sys2, AstTimeScaleType ts1, 
-*                          AstTimeScaleType ts2, double off1, double off2,
-*                          const char *unit1, const char unit2,
-*                          const char *method, int *status )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function creates a Mapping from a stated pair of System and
-*     TimeScale to another stated pair.
-
-*  Parameters:
-*     this
-*        A TimeFrame which specifies extra attributes (the clock position, 
-*        time zone, etc) for both input and output. 
-*     sys1
-*        The input System.
-*     sys2
-*        The output System.
-*     ts1
-*        The input System.
-*     ts2
-*        The output System.
-*     off1
-*        The axis offset used with the input, in the defaults units
-*        associated with "sys1".
-*     off2
-*        The axis offset used with the output, in the defaults units
-*        associated with "sys2".
-*     unit1
-*        The input units.
-*     unit2
-*        The output units.
-*     method
-*        A string containing the method name to include in error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Mapping. NULL if the timescales were
-*     incompatible.
-
-*/
-
-
-/* Local Variables: */
-   AstMapping *result;
-   AstMapping *tmap;
-   AstMapping *tmap2;
-   AstMapping *umap;
-   AstMapping *umap1;
-   AstMapping *umap2;
-   AstTimeMap *timemap;
-   const char *du;
-   double args[ 4 ];
-   double args_lt[ 1 ];
-   double args_ut[ 1 ];
-   double shift;
-
-/* Check the global error status. */
-   result = NULL;
-   if ( !astOK ) return result;
-
-/* If the timescales are equal... */
-   if( ts1 == ts2 ) {
-
-/* and the time systems are equal... */
-      if( sys1 == sys2 ) {
-
-/* and the time offsets are equal... */
-         if( EQUAL( off1, off2 ) ) {
-
-/* and the units are equal, return a UnitMap. */
-            if( !strcmp( unit1, unit2 ) ) {
-               result = (AstMapping *) astUnitMap( 1, "", status );            
-
-/* If only the units differ, return the appropriate units Mapping. */
-            } else {
-               result = astUnitMapper( unit1, unit2, NULL, NULL );
-            }
-
-/* If the time offsets differ... */
-         } else {
-
-/* Transform the difference in offsets from the default units associated
-   with the (common) system, to the units associated with the output. */
-            shift = off1 - off2;
-            du = DefUnit( sys1, method, "TimeFrame", status );
-            if( du && strcmp( du, unit2 ) && shift != 0.0 ) {
-               umap = astUnitMapper( DefUnit( sys1, method, "TimeFrame", status ), 
-                                     unit2, NULL, NULL );
-               astTran1( umap, 1, &shift, 1, &shift );
-               umap = astAnnul( umap );
-            }
-
-/* Create a ShiftMap to apply the shift. */
-            result = (AstMapping *) astShiftMap( 1, &shift, "", status );            
-
-/* If the input and output units also differ, include the appropriate units 
-   Mapping. */
-            if( strcmp( unit1, unit2 ) ) {
-               umap = astUnitMapper( unit1, unit2, NULL, NULL );
-               tmap = (AstMapping *) astCmpMap( umap, result, 1, "", status );
-               umap = astAnnul( umap );
-               (void) astAnnul( result );
-               result = tmap;
-            }
-         }
-      }
-   }
-
-/* If the systems and/or timescales differ, we convert first from the
-   input frame to a common frame, then from the common frame to the output
-   frame. */
-   if( !result ) {
-
-/* First, a Mapping from the input units to the default units for the
-   input System (these are the units expected by the TimeMap conversions). */
-      umap1 = astUnitMapper( unit1, DefUnit( sys1, method, "TimeFrame", status ), 
-                             NULL, NULL );
-
-/* Now create a null TimeMap. */
-      timemap = astTimeMap( 0, "", status );
-
-/* Store the input time offsets to use. They correspond to the same moment in
-   time (the second is the MJD equivalent of the first). */
-      args[ 0 ] = off1;
-      args[ 1 ] = ToMJD( sys1, off1, status );
-
-/* Add a conversion from the input System to MJD. */
-      if( sys1 == AST__JD ) {
-         astTimeAdd( timemap, "JDTOMJD", args );
-
-      } else if( sys1 == AST__JEPOCH ) {
-         astTimeAdd( timemap, "JEPTOMJD", args );
-   
-      } else if( sys1 == AST__BEPOCH ) {
-         astTimeAdd( timemap, "BEPTOMJD", args );
-      }
-
-/* All timescale conversions except UTTOUTC and UTCTOUT require the input (MJD)
-   offset as the first argument. In general, the observers longitude, latitude 
-   and altitude are also needed. The Frame class stores longitude values in a 
-   +ve eastwards sense, but the TimeMap class needs +ve westwards, so negate 
-   the longitude. */
-      args[ 0 ] = args[ 1 ];
-      args[ 1 ] = this ? -astGetObsLon( this ) : 0.0;
-      args[ 2 ] = this ? astGetObsLat( this ) : 0.0;
-      args[ 3 ] = this ? astGetObsAlt( this ) : 0.0;
-
-/* The UTTOUTC and UTCTOUT conversions required just the DUT1 value. */
-      args_ut[ 0 ] = this ? astGetDut1( this ) : 0.0;
-
-/* The LTTOUTC and UTCTOLT conversions required just the time zone
-   correction. */
-      args_lt[ 0 ] = this ? astGetLTOffset( this ) : 0.0;
-
-/* If the input and output timescales differ, now add a conversion from the 
-   input timescale to TAI. */
-      if( ts1 != ts2 ) {
-         if( ts1 == AST__TAI ) {
-       
-         } else if( ts1 == AST__UTC ) {
-            astTimeAdd( timemap, "UTCTOTAI", args );
-       
-         } else if( ts1 == AST__TT ) {
-            astTimeAdd( timemap, "TTTOTAI", args );
-       
-         } else if( ts1 == AST__TDB ) {
-            astTimeAdd( timemap, "TDBTOTT", args );
-            astTimeAdd( timemap, "TTTOTAI", args );
-       
-         } else if( ts1 == AST__TCG ) {
-            astTimeAdd( timemap, "TCGTOTT", args );
-            astTimeAdd( timemap, "TTTOTAI", args );
-       
-         } else if( ts1 == AST__LT ) {
-            astTimeAdd( timemap, "LTTOUTC", args_lt );
-            astTimeAdd( timemap, "UTCTOTAI", args );
-       
-         } else if( ts1 == AST__TCB ) {
-            astTimeAdd( timemap, "TCBTOTDB", args );
-            astTimeAdd( timemap, "TDBTOTT", args );
-            astTimeAdd( timemap, "TTTOTAI", args );
-       
-         } else if( ts1 == AST__UT1 ) {
-            astTimeAdd( timemap, "UTTOUTC", args_ut );
-            astTimeAdd( timemap, "UTCTOTAI", args );
-       
-         } else if( ts1 == AST__GMST ) {
-            astTimeAdd( timemap, "GMSTTOUT", args );
-            astTimeAdd( timemap, "UTTOUTC", args_ut );
-            astTimeAdd( timemap, "UTCTOTAI", args );
-       
-         } else if( ts1 == AST__LAST ) {
-            astTimeAdd( timemap, "LASTTOLMST", args );
-            astTimeAdd( timemap, "LMSTTOGMST", args );
-            astTimeAdd( timemap, "GMSTTOUT", args );
-            astTimeAdd( timemap, "UTTOUTC", args_ut );
-            astTimeAdd( timemap, "UTCTOTAI", args );
-      
-         } else if( ts1 == AST__LMST ) {
-            astTimeAdd( timemap, "LMSTTOGMST", args );
-            astTimeAdd( timemap, "GMSTTOUT", args );
-            astTimeAdd( timemap, "UTTOUTC", args_ut );
-            astTimeAdd( timemap, "UTCTOTAI", args );
-         }
-
-/* Now add a conversion from TAI to the output timescale. */
-         if( ts2 == AST__TAI ) {
-
-         } else if( ts2 == AST__UTC ) {
-            astTimeAdd( timemap, "TAITOUTC", args );
-
-         } else if( ts2 == AST__TT ) {
-            astTimeAdd( timemap, "TAITOTT", args );
-
-         } else if( ts2 == AST__TDB ) {
-            astTimeAdd( timemap, "TAITOTT", args );
-            astTimeAdd( timemap, "TTTOTDB", args );
-
-         } else if( ts2 == AST__TCG ) {
-            astTimeAdd( timemap, "TAITOTT", args );
-            astTimeAdd( timemap, "TTTOTCG", args );
-
-         } else if( ts2 == AST__TCB ) {
-            astTimeAdd( timemap, "TAITOTT", args );
-            astTimeAdd( timemap, "TTTOTDB", args );
-            astTimeAdd( timemap, "TDBTOTCB", args );
-
-         } else if( ts2 == AST__UT1 ) {
-            astTimeAdd( timemap, "TAITOUTC", args );
-            astTimeAdd( timemap, "UTCTOUT", args_ut );
-
-         } else if( ts2 == AST__GMST ) {
-            astTimeAdd( timemap, "TAITOUTC", args );
-            astTimeAdd( timemap, "UTCTOUT", args_ut );
-            astTimeAdd( timemap, "UTTOGMST", args );
-
-         } else if( ts2 == AST__LAST ) {
-            astTimeAdd( timemap, "TAITOUTC", args );
-            astTimeAdd( timemap, "UTCTOUT", args_ut );
-            astTimeAdd( timemap, "UTTOGMST", args );
-            astTimeAdd( timemap, "GMSTTOLMST", args );
-            astTimeAdd( timemap, "LMSTTOLAST", args );
-
-         } else if( ts2 == AST__LMST ) {
-            astTimeAdd( timemap, "TAITOUTC", args );
-            astTimeAdd( timemap, "UTCTOUT", args_ut );
-            astTimeAdd( timemap, "UTTOGMST", args );
-            astTimeAdd( timemap, "GMSTTOLMST", args );
-
-         } else if( ts2 == AST__LT ) {
-            astTimeAdd( timemap, "TAITOUTC", args );
-            astTimeAdd( timemap, "UTCTOLT", args_lt );
-       
-         }
-      } 
-
-/* Add a conversion from MJD to the output System, if needed. */
-      args[ 1 ] = off2;
-      if( sys2 == AST__MJD ) {
-         if( args[ 0 ] != off2 ) astTimeAdd( timemap, "MJDTOMJD", args ); 
-   
-      } else if( sys2 == AST__JD ) {
-         astTimeAdd( timemap, "MJDTOJD", args );
-   
-      } else if( sys2 == AST__JEPOCH ) {
-         astTimeAdd( timemap, "MJDTOJEP", args );
-   
-      } else if( sys2 == AST__BEPOCH ) {
-         astTimeAdd( timemap, "MJDTOBEP", args );
-      }
-
-/* Now, create a Mapping from the default units for the output System (these 
-   are the units produced by the TimeMap conversions) to the requested
-   output units. */
-      umap2 = astUnitMapper( DefUnit( sys2, method, "TimeFrame", status ), unit2, 
-                             NULL, NULL );
-
-/* If OK, combine the Mappings in series. Note, umap1 and umap2 should
-   always be non-NULL because the suitablity of units strings is checked 
-   within OriginSystem - called from within SetSystem. */
-      if( umap1 && umap2 ) {
-         tmap = (AstMapping *) astCmpMap( umap1, timemap, 1, "", status );      
-         tmap2 = (AstMapping *) astCmpMap( tmap, umap2, 1, "", status );      
-         tmap = astAnnul( tmap );
-         result = astSimplify( tmap2 );
-         tmap2 = astAnnul( tmap2 );
-      }
-   
-/* Free remaining resources */
-      if( umap1 ) umap1 = astAnnul( umap1 );
-      if( umap2 ) umap2 = astAnnul( umap2 );
-      timemap = astAnnul( timemap );
-   }
-
-/* Return NULL if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static int MakeTimeMapping( AstTimeFrame *target, AstTimeFrame *result,
-                            AstTimeFrame *align_frm, int report, 
-                            AstMapping **map, int *status ) {
-/*
-*  Name:
-*     MakeTimeMapping
-
-*  Purpose:
-*     Generate a Mapping between two TimeFrames.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int MakeTimeMapping( AstTimeFrame *target, AstTimeFrame *result,
-*                          AstTimeFrame *align_frm, int report, 
-*                          AstMapping **map, int *status ) {
-
-*  Class Membership:
-*     TimeFrame member function.
-
-*  Description:
-*     This function takes two TimeFrames and generates a Mapping that
-*     converts between them, taking account of differences in their
-*     coordinate systems, offsets, timescales, units, etc.
-
-*  Parameters:
-*     target
-*        Pointer to the first TimeFrame.
-*     result
-*        Pointer to the second TimeFrame.
-*     align_frm
-*        A TimeFrame defining the system and time scale in which to 
-*        align the target and result TimeFrames. The AlignSystem and
-*        AlignTimeScale attributes are used for this purpose.
-*     report
-*        Should errors be reported if no match is possible? These reports
-*        will describe why no match was possible.
-*     map
-*        Pointer to a location which is to receive a pointer to the
-*        returned Mapping. The forward transformation of this Mapping
-*        will convert from "target" coordinates to "result"
-*        coordinates, and the inverse transformation will convert in
-*        the opposite direction (all coordinate values in radians).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the Mapping could be generated, or zero if the two
-*     TimeFrames are sufficiently un-related that no meaningful Mapping
-*     can be produced (albeit an "unmeaningful" Mapping will be returned
-*     in this case, which will need to be annulled).
-
-*  Notes:
-*     A value of zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map1;             /* Intermediate Mapping */
-   AstMapping *map2;             /* Intermediate Mapping */
-   AstMapping *tmap;             /* Intermediate Mapping */
-   AstSystemType sys1;           /* Code to identify input system */
-   AstSystemType sys2;           /* Code to identify output system */
-   AstTimeScaleType align_ts;    /* Alignment time scale */
-   AstTimeScaleType ts1;         /* Input time scale */
-   AstTimeScaleType ts2;         /* Output time scale */
-   const char *align_unit;       /* Units used for alignment */
-   const char *u1;               /* Input target units */
-   const char *u2;               /* Output target units */
-   double align_off;             /* Axis offset */
-   double ltoff1;                /* Input axis Local Time offset */
-   double ltoff2;                /* Output axis Local Time offset */
-   double off1;                  /* Input axis offset */
-   double off2;                  /* Output axis offset */
-   int arclk;                    /* Align->result depends on clock position? */
-   int ardut;                    /* Align->result depends on Dut1? */
-   int arlto;                    /* Align->result depends on LT offset? */
-   int clkdiff;                  /* Do target and result clock positions differ? */
-   int dut1diff;                 /* Do target and result Dut1 values differ? */
-   int ltodiff;                  /* Do target and result LTOffset values differ? */
-   int match;                    /* Mapping can be generated? */
-   int taclk;                    /* Target->align depends on clock position? */
-   int tadut;                    /* Target->align depends on Dut1? */
-   int talto;                    /* Target->align depends on LT offset? */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise the returned values. */
-   match = 0;
-   *map = NULL;
-
-/* Get the required properties of the input (target) TimeFrame */
-   sys1 = astGetSystem( target );
-   ts1 = astGetTimeScale( target );
-   off1 = astGetTimeOrigin( target );
-   u1 = astGetUnit( target, 0 );
-   ltoff1= astGetLTOffset( target );
-
-/* Get the required properties of the output (result) TimeFrame */
-   sys2 = astGetSystem( result );
-   ts2 = astGetTimeScale( result );
-   off2 = astGetTimeOrigin( result );
-   u2 = astGetUnit( result, 0 );
-   ltoff2= astGetLTOffset( result );
-
-/* Get the timescale in which alignment is to be performed. The alignment
-   System does not matter since they all supported time systems are linearly 
-   related, and so the choice of alignment System has no effect on the total 
-   Mapping. We arbitrarily choose MJD as the alignment System (if needed). */
-   align_ts = astGetAlignTimeScale( align_frm );
-
-/* The main difference between this function and the MakeMap function is
-   that this function takes account of the requested alignment frame. But
-   the alignment Frame only makes a difference to the overall Mapping if
-   1) the observer's positions are different in the target and result Frame,
-   and 2) one or both of the Mappings to or from the alignment frame depends 
-   on the observer's position. If either of these 2 conditions is not met,
-   then the alignment frame can be ignored, and the simpler MakeMap function
-   can be called. See if the observer's positions differ. */
-   clkdiff = ( astGetObsLon( target ) != astGetObsLon( result ) ||
-               astGetObsLat( target ) != astGetObsLat( result ) ||
-               astGetObsAlt( target ) != astGetObsAlt( result ) );
-
-/* See if the Mapping from target to alignment frame depends on the 
-   observer's position. */
-   taclk = CLOCK_SCALE( ts1 ) || CLOCK_SCALE( align_ts );
-
-/* See if the Mapping from alignment to result frame depends on the 
-   observer's position. */
-   arclk = CLOCK_SCALE( align_ts ) || CLOCK_SCALE( ts2 );
-
-/* In addition, the alignment frame is significant if either of the Mappings 
-   depends on DUT1 and the values of the DUT1 attribute are different for the
-   two TimeFrames. */
-   dut1diff = ( astGetDut1( target ) != astGetDut1( result ) );
-   tadut = DUT1_SCALE( ts1 ) != DUT1_SCALE( align_ts );
-   ardut = DUT1_SCALE( align_ts ) != DUT1_SCALE( ts2 );
-
-/* In addition, the alignment frame is significant if either of the Mappings 
-   depends on LTOffset and the values of the LTOffset attribute are different 
-   for the two TimeFrames. */
-   ltodiff = ( ltoff1 != ltoff2 );
-   talto = LTOFFSET_SCALE( ts1 ) != LTOFFSET_SCALE( align_ts );
-   arlto = LTOFFSET_SCALE( align_ts ) != LTOFFSET_SCALE( ts2 );
-
-/* If the alignment frame can be ignored, use MakeMap */
-   if( ( !clkdiff || !( taclk || arclk ) ) &&
-       ( !ltodiff || !( talto || arlto ) ) &&
-       ( !dut1diff || !( tadut || ardut ) ) ) {
-      *map = MakeMap( target, sys1, sys2, ts1, ts2, off1, off2, u1, u2, 
-                      "astSubFrame", status );
-      if( *map ) match = 1;
-
-/* Otherwise, we create the Mapping in two parts; first a Mapping from
-   the target Frame to the alignment Frame (using the target clock, dut1
-   and ltoffset), then a Mapping from the alignment Frame to the results 
-   Frame (using the result clock, dut1 and ltoffset). */
-   } else {
-
-/* Create a Mapping from target units/system/timescale/offset to MJD in 
-   the alignment timescale with default units and offset equal to the MJD
-   equivalent of the target offset. */
-      align_off = ToMJD( sys1, off1, status );
-      align_unit = DefUnit( AST__MJD, "MakeTimeMap", "TimeFrame", status );
-      map1 = MakeMap( target, sys1, AST__MJD, ts1, align_ts, off1, align_off, 
-                      u1, align_unit, "MakeTimeMap", status );
-
-/* Report an error if the timescales were incompatible. */
-      if( !map1 ){
-         match = 0;
-         if( report && astOK ) {
-            astError( AST__INCTS, "astMatch(%s): Alignment in requested "
-                   "timescale (%s) is not possible since one or both of the "
-                   "TimeFrames being aligned refer to the %s timescale.", status,
-                   astGetClass( target ), TimeScaleString( align_ts, status ),
-                   TimeScaleString( ts1, status ) );
-         }
-      }   
-
-/* We now create a Mapping that converts from the alignment System (MJD), 
-   TimeScale and offset to the result coordinate system. */
-      map2 = MakeMap( result, AST__MJD, sys2, align_ts, ts2, align_off, off2, 
-                      align_unit, u2, "MakeTimeMap", status );
-
-/* Report an error if the timescales were incompatible. */
-      if( !map2 ){
-         match = 0;
-         if( report && astOK ) {
-            astError( AST__INCTS, "astMatch(%s): Alignment in requested "
-                   "timescale (%s) is not possible since one or both of the "
-                   "TimeFrames being aligned refer to the %s timescale.", status,
-                   astGetClass( result ), TimeScaleString( align_ts, status ),
-                   TimeScaleString( ts2, status ) );
-         }
-      }   
-
-/* Combine these two Mappings. */
-      if( map1 && map2 ) {
-         match = 1;
-         tmap = (AstMapping *) astCmpMap( map1, map2, 1, "", status );
-         *map = astSimplify( tmap );
-         tmap = astAnnul( tmap );
-      }
-   
-/* Free resources. */
-      if( map1 ) map1 = astAnnul( map1 );
-      if( map2 ) map2 = astAnnul( map2 );
-   }
-
-/* If an error occurred, annul the returned Mapping and clear the returned 
-   values. */
-   if ( !astOK ) {
-      *map = astAnnul( *map );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static int Match( AstFrame *template_frame, AstFrame *target,
-                  int **template_axes, int **target_axes, AstMapping **map,
-                  AstFrame **result, int *status ) {
-/*
-*  Name:
-*     Match
-
-*  Purpose:
-*     Determine if conversion is possible between two coordinate systems.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int Match( AstFrame *template, AstFrame *target,
-*                int **template_axes, int **target_axes,
-*                AstMapping **map, AstFrame **result, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the protected astMatch method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function matches a "template" TimeFrame to a "target" Frame and
-*     determines whether it is possible to convert coordinates between them.
-*     If it is, a mapping that performs the transformation is returned along
-*     with a new Frame that describes the coordinate system that results when
-*     this mapping is applied to the "target" coordinate system. In addition,
-*     information is returned to allow the axes in this "result" Frame to be
-*     associated with the corresponding axes in the "target" and "template"
-*     Frames from which they are derived.
-
-*  Parameters:
-*     template
-*        Pointer to the template TimeFrame. This describes the coordinate 
-*        system (or set of possible coordinate systems) into which we wish to 
-*        convert our coordinates.
-*     target
-*        Pointer to the target Frame. This describes the coordinate system in
-*        which we already have coordinates.
-*     template_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the template TimeFrame axis from 
-*        which it is derived. If it is not derived from any template 
-*        TimeFrame axis, a value of -1 will be returned instead.
-*     target_axes
-*        Address of a location where a pointer to int will be returned if the
-*        requested coordinate conversion is possible. This pointer will point
-*        at a dynamically allocated array of integers with one element for each
-*        axis of the "result" Frame (see below). It must be freed by the caller
-*        (using astFree) when no longer required.
-*
-*        For each axis in the result Frame, the corresponding element of this
-*        array will return the index of the target Frame axis from which it
-*        is derived. If it is not derived from any target Frame axis, a value
-*        of -1 will be returned instead.
-*     map
-*        Address of a location where a pointer to a new Mapping will be
-*        returned if the requested coordinate conversion is possible. If
-*        returned, the forward transformation of this Mapping may be used to
-*        convert coordinates between the "target" Frame and the "result"
-*        Frame (see below) and the inverse transformation will convert in the
-*        opposite direction.
-*     result
-*        Address of a location where a pointer to a new Frame will be returned
-*        if the requested coordinate conversion is possible. If returned, this
-*        Frame describes the coordinate system that results from applying the
-*        returned Mapping (above) to the "target" coordinate system. In
-*        general, this Frame will combine attributes from (and will therefore
-*        be more specific than) both the target and the template Frames. In
-*        particular, when the template allows the possibility of transformaing
-*        to any one of a set of alternative coordinate systems, the "result"
-*        Frame will indicate which of the alternatives was used.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if the requested coordinate conversion is
-*     possible. Otherwise zero is returned (this will not in itself result in
-*     an error condition).
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     This implementation addresses the matching of a TimeFrame class 
-*     object to any other class of Frame. A TimeFrame will match any class 
-*     of TimeFrame (i.e. possibly from a derived class) but will not match 
-*     a less specialised class of Frame.
-*/
-
-   AstFrame *frame0;             /* Pointer to Frame underlying axis 0 */
-   AstTimeFrame *template;       /* Pointer to template TimeFrame structure */
-   int iaxis0;                   /* Axis index underlying axis 0 */
-   int iaxis;                    /* Axis index */
-   int match;                    /* Coordinate conversion possible? */
-   int target_axis0;             /* Index of TimeFrame axis in the target */
-   int target_naxes;             /* Number of target axes */
-
-/* Initialise the returned values. */
-   *template_axes = NULL;
-   *target_axes = NULL;
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the template TimeFrame structure. */
-   template = (AstTimeFrame *) template_frame;
-
-/* Obtain the number of axes in the target Frame. */
-   target_naxes = astGetNaxes( target );
-
-/* The first criterion for a match is that the template matches as a
-   Frame class object. This ensures that the number of axes (1) and
-   domain, etc. of the target Frame are suitable. Invoke the parent
-   "astMatch" method to verify this. */
-   match = (*parent_match)( template_frame, target,
-                            template_axes, target_axes, map, result, status );
-
-/* If a match was found, annul the returned objects, which are not
-   needed, but keep the memory allocated for the axis association
-   arrays, which we will re-use. */
-   if ( astOK && match ) {
-      *map = astAnnul( *map );
-      *result = astAnnul( *result );
-   }
-
-/* If OK so far, obtain pointers to the primary Frames which underlie
-   all target axes. Stop when a TimeFrame axis is found. */
-   if ( match && astOK ) {
-      match = 0;
-      for( iaxis = 0; iaxis < target_naxes; iaxis++ ) {
-         astPrimaryFrame( target, iaxis, &frame0, &iaxis0 );
-         if( astIsATimeFrame( frame0 ) ) {
-            frame0 = astAnnul( frame0 );
-            target_axis0 = iaxis;
-            match = 1;
-            break;
-         } else {
-            frame0 = astAnnul( frame0 );
-         }
-      }
-   }
-
-/* Check at least one TimeFrame axis was found it the target. Store the
-   axis associataions. */
-   if( match && astOK ) {
-      (*template_axes)[ 0 ] = 0;
-      (*target_axes)[ 0 ] = target_axis0;
-
-/* Use the target's "astSubFrame" method to create a new Frame (the
-   result Frame) with copies of the target axes in the required
-   order. This process also overlays the template attributes on to the
-   target Frame and returns a Mapping between the target and result
-   Frames which effects the required coordinate conversion. */
-      match = astSubFrame( target, template, 1, *target_axes, *template_axes,
-                           map, result );
-   }
-
-/* If an error occurred, or conversion to the result Frame's coordinate 
-   system was not possible, then free all memory, annul the returned 
-   objects, and reset the returned value. */
-   if ( !astOK || !match ) {
-      *template_axes = astFree( *template_axes );
-      *target_axes = astFree( *target_axes );
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-}
-
-static void OriginScale( AstTimeFrame *this, AstTimeScaleType newts,
-                         const char *method, int *status ){
-/*
-*  Name:
-*     OriginScale
-
-*  Purpose:
-*     Convert the TimeOrigin in a TimeFrame to a new timescale.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void OriginScale( AstTimeFrame *this, AstTimeScaleType newts,
-*                       const char *method, int *status )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function converts the value of the TimeOrigin attribute stored
-*     within a supplied TimeFrame from the timescale currently associated
-*     with the TimeFrame, to the new timescale indicated by "newts".
-
-*  Parameters:
-*     this
-*        Point to the TimeFrame. On entry, the TimeOrigin value is
-*        assumed to refer to the timescale given by the astGetTimeScale
-*        method. On exit, the TimeOrigin value refers to the timescale 
-*        supplied in "newts". The TimeScale attribute of the TimeFrame
-*        should then be modified in order to keep things consistent.
-*     newts
-*        The timescale to which the TimeOrigin value stored within "this"
-*        should refer on exit. 
-*     method
-*        Pointer to a string holding the name of the method to be
-*        included in any error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
-   AstMapping *map;
-   AstSystemType sys;
-   AstTimeScaleType oldts;
-   const char *u;
-   double newval;
-   double oldval;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do nothing if the TimeOrigin attribute has not been assigned a value. */
-   if( astTestTimeOrigin( this ) ) {
-
-/* Do nothing if the Scale will not change. */
-      oldts = astGetTimeScale( this );
-      if( newts != oldts ) {
-
-/* Create a Mapping to perform the TimeScale change. */
-         sys = astGetSystem( this );
-         u = DefUnit( sys, method, "TimeFrame", status ), 
-         map = MakeMap( this, sys, sys, oldts, newts, 0.0, 0.0, u, u, 
-                        method, status );
-
-/* Use the Mapping to convert the stored TimeOrigin value. */
-         if( map ) {
-            oldval = astGetTimeOrigin( this );
-            astTran1( map, 1, &oldval, 1, &newval );
-
-/* Store the new value */
-            astSetTimeOrigin( this, newval );
-
-/* Free resources */
-            map = astAnnul( map );
-
-         } else if( astOK ) {
-            astError( AST__INCTS, "%s(%s): Cannot convert the TimeOrigin "
-                      "value to a different timescale because of "
-                      "incompatible time scales.", status, method, 
-                      astGetClass( this ) );
-         }
-      }
-   }
-}
-
-static void OriginSystem( AstTimeFrame *this, AstSystemType oldsys, 
-                          const char *method, int *status ){
-/*
-*  Name:
-*     OriginSystem
-
-*  Purpose:
-*     Convert the TimeOrigin in a TimeFrame to a new System.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void OriginSystem( AstTimeFrame *this, AstSystemType oldsys, 
-*                        const char *method, int *status )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function converts the value of the TimeOrigin attribute stored
-*     within a supplied TimeFrame from its original System, etc, to the 
-*     System, etc, currently associated with the TimeFrame.
-
-*  Parameters:
-*     this
-*        Point to the TimeFrame. On entry, the TimeOrigin value is
-*        assumed to refer to the System given by "oldsys", etc. On exit, the
-*        TimeOrigin value refers to the System returned by the astGetSystem 
-*        method, etc.
-*     oldsys
-*        The System to which the TimeOrigin value stored within "this"
-*        refers on entry. 
-*     method
-*        A string containing the method name for error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstSystemType newsys;
-   AstTimeScaleType ts;
-   const char *oldu;
-   const char *newu;
-   double newval;
-   double oldval;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Do nothing if the TimeOrigin attribute has not been assigned a value. */
-   if( astTestTimeOrigin( this ) ) {
-
-/* Do nothing if the System has not changed. */
-      newsys = astGetSystem( this );
-      if( oldsys != newsys ) {
-
-/* Create a Mapping to perform the System change. */
-         ts = astGetTimeScale( this );
-         oldu = DefUnit( oldsys, method, "TimeFrame", status ), 
-         newu = DefUnit( newsys, method, "TimeFrame", status ), 
-         map = MakeMap( this, oldsys, newsys, ts, ts, 0.0, 0.0, oldu, newu, 
-                        method, status );
-
-/* Use the Mapping to convert the stored TimeOrigin value. */
-         if( map ) {
-            oldval = astGetTimeOrigin( this );
-            astTran1( map, 1, &oldval, 1, &newval );
-
-/* Store the new value */
-            astSetTimeOrigin( this, newval );
-
-/* Free resources */
-            map = astAnnul( map );
-
-         } else if( astOK ) {
-            astError( AST__INCTS, "%s(%s): Cannot convert the TimeOrigin "
-                      "value to a different System because of incompatible "
-                      "time scales.", status, method, astGetClass( this ) );
-         }
-      }
-   }
-}
-
-static void Overlay( AstFrame *template, const int *template_axes,
-                     AstFrame *result, int *status ) {
-/*
-*  Name:
-*     Overlay
-
-*  Purpose:
-*     Overlay the attributes of a template TimeFrame on to another Frame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void Overlay( AstFrame *template, const int *template_axes,
-*                   AstFrame *result, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the protected astOverlay method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function overlays attributes of a TimeFrame (the "template") on to
-*     another Frame, so as to over-ride selected attributes of that second
-*     Frame. Normally only those attributes which have been specifically set
-*     in the template will be transferred. This implements a form of
-*     defaulting, in which a Frame acquires attributes from the template, but
-*     retains its original attributes (as the default) if new values have not
-*     previously been explicitly set in the template.
-*
-*     Note that if the result Frame is a TimeFrame and a change of time
-*     coordinate system occurs as a result of overlaying its System
-*     attribute, then some of its original attribute values may no
-*     longer be appropriate (e.g. the Title, or attributes describing
-*     its axes). In this case, these will be cleared before overlaying
-*     any new values.
-
-*  Parameters:
-*     template
-*        Pointer to the template TimeFrame, for which values should have been
-*        explicitly set for any attribute which is to be transferred.
-*     template_axes
-*        Pointer to an array of int, with one element for each axis of the
-*        "result" Frame (see below). For each axis in the result frame, the
-*        corresponding element of this array should contain the (zero-based)
-*        index of the template axis to which it corresponds. This array is used
-*        to establish from which template axis any axis-dependent attributes
-*        should be obtained.
-*
-*        If any axis in the result Frame is not associated with a template
-*        axis, the corresponding element of this array should be set to -1.
-*        
-*        If a NULL pointer is supplied, the template and result axis
-*        indicies are assumed to be identical.
-*     result
-*        Pointer to the Frame which is to receive the new attribute values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  In general, if the result Frame is not from the same class as the
-*     template TimeFrame, or from a class derived from it, then attributes may
-*     exist in the template TimeFrame which do not exist in the result Frame. 
-*     In this case, these attributes will not be transferred.
-*/
-
-
-/* Local Variables: */
-   const char *new_class;        /* Pointer to template class string */
-   const char *old_class;        /* Pointer to result class string */
-   const char *method;           /* Pointer to method string */
-   AstSystemType new_alignsystem;/* Code identifying new alignment coords */
-   AstSystemType new_system;     /* Code identifying new cordinates */
-   AstSystemType old_system;     /* Code identifying old coordinates */
-   int resetSystem;              /* Was the template System value cleared? */
-   int timeframe;                /* Result Frame is a TimeFrame? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise strings used in error messages. */
-   new_class = astGetClass( template );   
-   old_class = astGetClass( result );   
-   method = "astOverlay";
-
-/* Get the old and new systems. */
-   old_system = astGetSystem( result );
-   new_system = astGetSystem( template );
-
-/* If the result Frame is a TimeFrame, we must test to see if overlaying its
-   System attribute will change the type of coordinate system it describes. 
-   Determine the value of this attribute for the result and template 
-   TimeFrames. */
-   resetSystem = 0;
-   timeframe = astIsATimeFrame( result );
-   if( timeframe ) {
-
-/* If the coordinate system will change, any value already set for the result
-   TimeFrame's Title, etc,  will no longer be appropriate, so clear it. */
-      if ( new_system != old_system ) {
-         astClearTitle( result );
-         astClearLabel( result, 0 );
-         astClearSymbol( result, 0 );
-      }
-
-/* If the result Frame is not a TimeFrame, we must temporarily clear the
-   System and AlignSystem values since the values used by this class are only
-   appropriate to this class. */
-   } else {
-      if( astTestSystem( template ) ) {
-         astClearSystem( template );
-
-         new_alignsystem = astGetAlignSystem( template );
-         astClearAlignSystem( template );
-
-         resetSystem = 1;
-      }
-   }
-
-/* Invoke the parent class astOverlay method to transfer attributes inherited
-   from the parent class. */
-   (*parent_overlay)( template, template_axes, result, status );
-
-/* Reset the System and AlignSystem values if necessary */
-   if( resetSystem ) {
-      astSetSystem( template, new_system );
-      astSetAlignSystem( template, new_alignsystem );
-   }
-
-/* Check if the result Frame is a TimeFrame or from a class derived from
-   TimeFrame. If not, we cannot transfer TimeFrame attributes to it as it is
-   insufficiently specialised. In this case simply omit these attributes. */
-   if ( timeframe && astOK ) {
-
-/* Define macros that test whether an attribute is set in the template and,
-   if so, transfers its value to the result. */
-#define OVERLAY(attribute) \
-   if ( astTest##attribute( template ) ) { \
-      astSet##attribute( result, astGet##attribute( template ) ); \
-   }
-
-/* Use the macro to transfer each TimeFrame attribute in turn. Note,
-   SourceVRF must be overlayed before SourceVel. Otherwise the stored value 
-   for SourceVel would be changed from the default SourceVRF to the specified
-   SourceVRF when SourceVRF was overlayed. */
-      OVERLAY(AlignTimeScale)
-      OVERLAY(LTOffset)
-      OVERLAY(TimeOrigin)
-      OVERLAY(TimeScale)
-   }
-
-/* Undefine macros local to this function. */
-#undef OVERLAY
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void SetAttrib( AstObject *this, const char *setting, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (extends the astSetAttrib method inherited from
-*     the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a TimeFrame, the attribute
-*     and its value being specified by means of a string of the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in lower
-*     case with no white space present. The value to the right of the "="
-*     should be a suitable textual representation of the value to be assigned
-*     and this will be interpreted according to the attribute's data type.
-*     White space surrounding the value is only significant for string
-*     attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This protected method is intended to be invoked by the Object astSet
-*     method and makes additional attributes accessible to it.
-*/
-
-/* Local Vaiables: */
-   AstTimeFrame *this;           /* Pointer to the TimeFrame structure */
-   AstTimeScaleType ts;          /* time scale type code */
-   char *a;                      /* Pointer to next character */
-   char *new_setting;            /* Pointer value to new attribute setting */
-   double dval;                  /* Double atribute value */
-   double mjd;                   /* MJD read from setting */
-   double origin;                /* TimeOrigin value */
-   int len;                      /* Length of setting string */
-   int namelen;                  /* Length of attribute name in setting */
-   int nc;                       /* Number of characters read by astSscanf */
-   int off;                      /* Offset of attribute value */
-   int rep;                      /* Original error reporting state */
-   int ulen;                     /* Used length of setting string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = strlen( setting );
-
-/* Obtain the used length of the setting string. */
-   ulen = astChrLen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse the
-   setting string and extract the attribute value (or an offset to it in the
-   case of string values). In each case, use the value set in "nc" to check
-   that the entire string was matched. Once a value has been obtained, use the
-   appropriate method to set it. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   TimeFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strncmp( setting, "direction=", 10 ) || 
-        !strncmp( setting, "bottom=", 7 ) ||
-        !strncmp( setting, "top=", 4 ) ||
-        !strncmp( setting, "format=", 7 ) ||
-        !strncmp( setting, "label=", 6 ) ||
-        !strncmp( setting, "symbol=", 7 ) ||
-        !strncmp( setting, "unit=", 5 ) ) {
-
-/* Create a new setting string from the original by appending the string
-   "(1)" to the end of the attribute name and then use the parent SetAttrib 
-   method. */
-      new_setting = astMalloc( len + 4 );
-      if( new_setting ) {
-         memcpy( new_setting, setting, len + 1 );
-         a = strchr( new_setting, '=' );
-         namelen = a - new_setting;
-         memcpy( a, "(1)", 4 );
-         a += 3;
-         strcpy( a, setting + namelen );
-         (*parent_setattrib)( this_object, new_setting, status );
-         new_setting = astFree( new_setting );
-      }
-
-/* AlignTimeScale. */
-/* --------------- */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "aligntimescale=%n%*s %n", &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Convert the string to a TimeScale code before use. */
-      ts = TimeScaleCode( setting + off, status );
-      if ( ts != AST__BADTS ) {
-         astSetAlignTimeScale( this, ts );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid time scale "
-                   "description \"%s\".", status, astGetClass( this ), setting+off );
-      }
-
-/* ClockLat. */
-/* ------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "clocklat=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-      new_setting = astMalloc( sizeof( char )*(size_t) len + 1 );
-      new_setting[ 0 ] = 'o';
-      new_setting[ 1 ] = 'b';
-      new_setting[ 2 ] = 's';
-      strcpy( new_setting + 3, setting + 5 );
-      astSetAttrib( this, new_setting );
-      new_setting = astFree( new_setting );
-
-/* ClockLon. */
-/* ------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "clocklon=%n%*s %n", &off, &nc ) )
-              && ( nc >= 7 ) ) {
-      new_setting = astMalloc( sizeof( char )*(size_t) len + 1 );
-      new_setting[ 0 ] = 'o';
-      new_setting[ 1 ] = 'b';
-      new_setting[ 2 ] = 's';
-      strcpy( new_setting + 3, setting + 5 );
-      astSetAttrib( this, new_setting );
-      new_setting = astFree( new_setting );
-
-/* LTOffset */
-/* -------- */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "ltoffset= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-      astSetLTOffset( this, dval );
-
-/* TimeOrigin */
-/* ---------- */
-
-/* Floating-point without any units indication - assume the current Unit 
-   value. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "timeorigin= %lg %n", &dval, &nc ) )
-        && ( nc >= len ) ) {
-
-      astSetTimeOrigin( this, ToUnits( this, astGetUnit( this, 0 ), dval,
-                                       "astSetTimeOrigin", status ) );
-
-/* Floating-point with units. */
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "timeorigin= %lg %n%*s %n", &dval, &off, &nc ) )
-        && ( nc >= len ) ) {
-
-/* Defer error reporting in case a date string was given which starts
-   with a floating point number, then convert the supplied value to the
-   default units for the TimeFrame's System. */
-      rep = astReporting( 0 );
-      origin = ToUnits( this, setting + off, dval, "astSetTimeOrigin", status );
-      if( !astOK ) astClearStatus;
-      astReporting( rep );
-
-/* If the origin was converted, store it. */
-      if( origin != AST__BAD ) {
-         astSetTimeOrigin( this, origin );
-
-/* Otherwise, interpret the string as a date. Convert first to MJD then to 
-   default system. */
-      } else if ( nc = 0,
-           ( 0 == astSscanf( setting, "timeorigin=%n%*[^\n]%n", &off, &nc ) )
-           && ( nc >= len ) ) {
-         mjd = astReadDateTime( setting + off );
-         if ( astOK ) {
-            astSetTimeOrigin( this, FromMJD( this, mjd, status ) );
-
-/* Report contextual information if the conversion failed. */
-         } else {
-            astError( AST__ATTIN, "astSetAttrib(%s): Invalid TimeOrigin value "
-                      "\"%s\" given.", status, astGetClass( this ), setting + off );
-         }
-      }
-
-/* String (assumed to be a date). Convert first to MJD then to default
-   system. */
-   } else if ( nc = 0,
-        ( 0 == astSscanf( setting, "timeorigin=%n%*[^\n]%n", &off, &nc ) )
-        && ( nc >= len ) ) {
-      mjd = astReadDateTime( setting + off );
-      if ( astOK ) {
-         astSetTimeOrigin( this, FromMJD( this, mjd, status ) );
-
-/* Report contextual information if the conversion failed. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid TimeOrigin value "
-                   "\"%s\" given.", status, astGetClass( this ), setting + off );
-      }
-
-/* TimeScale. */
-/* ---------- */
-   } else if ( nc = 0,
-              ( 0 == astSscanf( setting, "timescale=%n%*s %n", &off, &nc ) )
-              && ( nc >= len ) ) {
-
-/* Convert the string to a TimeScale code before use. */
-      ts = TimeScaleCode( setting + off, status );
-      if ( ts != AST__BADTS ) {
-         astSetTimeScale( this, ts );
-
-/* Report an error if the string value wasn't recognised. */
-      } else {
-         astError( AST__ATTIN, "astSetAttrib(%s): Invalid time scale "
-                   "description \"%s\".", status, astGetClass( this ), setting + off );
-      }
-
-/* Pass any unrecognised setting to the parent method for further
-   interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status ) {
-/*
-*  Name:
-*     SetSystem
-
-*  Purpose:
-*     Set the System attribute for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void SetSystem( AstFrame *this_frame, AstSystemType newsys, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astSetSystem protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function sets the System attribute for a TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     newsys
-*        The new System value to be stored.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to TimeFrame structure */
-   AstSystemType oldsys;         /* Original System value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* If we are changing the System to BEPOCH, set the Unit attribute to
-   "yr" and TimeScale to "TT". */ 
-   if( newsys == AST__BEPOCH ) {
-      astSetUnit( this_frame, 0, "yr" );
-      astSetTimeScale( (AstTimeFrame *) this_frame, AST__TT );
-   }
-
-/* Save the original System value */
-   oldsys = astGetSystem( this_frame );
-
-/* Use the parent SetSystem method to store the new System value. */
-   (*parent_setsystem)( this_frame, newsys, status );
-
-/* If the system has changed... */
-   if( oldsys != newsys ) {
-
-/* Modify the stored TimeOrigin. */
-      OriginSystem( this, oldsys, "astSetSystem", status );
-
-/* Clear all attributes which have system-specific defaults. */
-      astClearLabel( this_frame, 0 );
-      astClearSymbol( this_frame, 0 );
-      astClearTitle( this_frame );
-   }
-}
-
-static void SetTimeScale( AstTimeFrame *this, AstTimeScaleType value, int *status ) {
-/*
-*+
-*  Name:
-*     astSetTimeScale
-
-*  Purpose:
-*     Set the TimeScale attribute for a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void astSetTimeScale( AstTimeFrame *this, AstTimeScaleType value )
-
-*  Class Membership:
-*     TimeFrame virtual function 
-
-*  Description:
-*     This function set a new value for the TimeScale attribute for a 
-*     TimeFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     value
-*        The new value.
-
-*-
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Verify the supplied timescale value */
-   if( value < FIRST_TS || value > LAST_TS ) {
-      astError( AST__ATTIN, "%s(%s): Bad value (%d) given for TimeScale "
-                "attribute.", status, "astSetTimeScale", astGetClass( this ), 
-                (int) value );
-
-/* Report an error if System is set to BEPOCH and an in appropriate
-   TimeScale was supplied. */
-   } else if( astGetSystem( this ) == AST__BEPOCH && 
-              value != AST__TT ) {
-      astError( AST__ATTIN, "%s(%s): Supplied TimeScale (%s) cannot be "
-                "used because the %s represents Besselian Epoch which "
-                "is defined in terms of TT.", status, "astSetTimeScale",
-                astGetClass( this ), TimeScaleString( value, status ),
-                astGetClass( this ) );
-
-/* Otherwise set the new TimeScale */
-   } else {
-
-/* Modify the TimeOrigin value stored in the TimeFrame structure to refer 
-   to the new timescale. */
-      OriginScale( this, value, "astSetTimeScale", status );
-
-/* Store the new value for the timescale in the TimeFrame structure. */
-      this->timescale = value;
-
-   }
-}
-
-static void SetUnit( AstFrame *this_frame, int axis, const char *value, int *status ) {
-/*
-*  Name:
-*     SetUnit
-
-*  Purpose:
-*     Set a pointer to the Unit string for a TimeFrame's axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void SetUnit( AstFrame *this_frame, int axis, const char *value )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astSetUnit method inherited
-*     from the Frame class).
-
-*  Description:
-*     This function stores a pointer to the Unit string for a specified axis
-*     of a TimeFrame. It also stores the string in the "usedunits" array
-*     in the TimeFrame structure, in the element associated with the
-*     current System.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     axis
-*        The number of the axis (zero-based) for which information is required.
-*     unit
-*        The new string to store.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
-   astValidateAxis( this, axis, "astSetUnit" );
-
-/* Report an error if System is set to BEPOCH and an in appropriate
-   Unit was supplied. */
-   if( astGetSystem( this ) == AST__BEPOCH && strcmp( "yr", value ) ) {
-      astError( AST__ATTIN, "astSetUnit(%s): Supplied Unit (%s) cannot "
-                "be used because the %s represents Besselian Epoch which "
-                "is defined in units of years (yr).", status, astGetClass( this ),
-                value, astGetClass( this ) );
-
-/* Otherwise use the parent SetUnit method to store the value in the Axis
-   structure */
-   } else {
-      (*parent_setunit)( this_frame, axis, value, status );
-   }
-}
-
-static AstTimeScaleType TimeScaleCode( const char *ts, int *status ) {
-/*
-*  Name:
-*     TimeScaleCode
-
-*  Purpose:
-*     Convert a string into a time scale type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstTimeScaleType TimeScaleCode( const char *ts )
-
-*  Class Membership:
-*     TimeFrame member function.
-
-*  Description:
-*     This function converts a string used for the external description of 
-*     a time scale into a TimeFrame time scale type code  (TimeScale attribute 
-*     value). It is the inverse of the TimeScaleString function.
-
-*  Parameters:
-*     ts
-*        Pointer to a constant null-terminated string containing the
-*        external description of the time scale.
-
-*  Returned Value:
-*     The TimeScale type code.
-
-*  Notes:
-*     - A value of AST__BADTS is returned if the time scale 
-*     description was not recognised. This does not produce an error.
-*     - A value of AST__BADTS is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeScaleType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADTS;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the timescale string against each possibility and assign the
-   result. */
-   if ( astChrMatch( "TAI", ts ) ) {
-      result = AST__TAI;
-
-   } else if ( astChrMatch( "UTC", ts ) ) {
-      result = AST__UTC;
-
-   } else if ( astChrMatch( "UT1", ts ) ) {
-      result = AST__UT1;
-
-   } else if ( astChrMatch( "GMST", ts ) ) {
-      result = AST__GMST;
-
-   } else if ( astChrMatch( "LAST", ts ) ) {
-      result = AST__LAST;
-
-   } else if ( astChrMatch( "LMST", ts ) ) {
-      result = AST__LMST;
-
-   } else if ( astChrMatch( "TT", ts ) ) {
-      result = AST__TT;
-
-   } else if ( astChrMatch( "TDB", ts ) ) {
-      result = AST__TDB;
-
-   } else if ( astChrMatch( "TCG", ts ) ) {
-      result = AST__TCG;
-
-   } else if ( astChrMatch( "TCB", ts ) ) {
-      result = AST__TCB;
-
-   } else if ( astChrMatch( "LT", ts ) ) {
-      result = AST__LT;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *TimeScaleString( AstTimeScaleType ts, int *status ) {
-/*
-*  Name:
-*     TimeScaleString
-
-*  Purpose:
-*     Convert a time scale type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *TimeScaleString( AstTimeScaleType ts, int *status )
-
-*  Class Membership:
-*     TimeFrame member function.
-
-*  Description:
-*     This function converts a TimeFrame time scale type code (TimeScale 
-*     attribute value) into a string suitable for use as an external 
-*     representation of the time scale type.
-
-*  Parameters:
-*     ts
-*        The time scale type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the time scale
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the timescale value against each possibility and convert to a
-   string pointer. */
-   switch ( ts ) {
-
-   case AST__TAI:
-      result = "TAI";
-      break;
-
-   case AST__UTC:
-      result = "UTC";
-      break;
-
-   case AST__UT1:
-      result = "UT1";
-      break;
-
-   case AST__GMST:
-      result = "GMST";
-      break;
-
-   case AST__LAST:
-      result = "LAST";
-      break;
-
-   case AST__LMST:
-      result = "LMST";
-      break;
-
-   case AST__TT:
-      result = "TT";
-      break;
-
-   case AST__TDB:
-      result = "TDB";
-      break;
-
-   case AST__TCB:
-      result = "TCB";
-      break;
-
-   case AST__TCG:
-      result = "TCG";
-      break;
-
-   case AST__LT:
-      result = "LT";
-      break;
-
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int SubFrame( AstFrame *target_frame, AstFrame *template,
-                     int result_naxes, const int *target_axes,
-                     const int *template_axes, AstMapping **map,
-                     AstFrame **result, int *status ) {
-/*
-*  Name:
-*     SubFrame
-
-*  Purpose:
-*     Select axes from a TimeFrame and convert to the new coordinate 
-*     system.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int SubFrame( AstFrame *target, AstFrame *template,
-*                   int result_naxes, const int *target_axes,
-*                   const int *template_axes, AstMapping **map,
-*                   AstFrame **result, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the protected astSubFrame 
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function selects a requested sub-set (or super-set) of the axes
-*     from a "target" TimeFrame and creates a new Frame with copies of
-*     the selected axes assembled in the requested order. It then
-*     optionally overlays the attributes of a "template" Frame on to the
-*     result. It returns both the resulting Frame and a Mapping that
-*     describes how to convert between the coordinate systems described by
-*     the target and result Frames. If necessary, this Mapping takes
-*     account of any differences in the Frames' attributes due to the
-*     influence of the template.
-
-*  Parameters:
-*     target
-*        Pointer to the target TimeFrame, from which axes are to be 
-*        selected.
-*     template
-*        Pointer to the template Frame, from which new attributes for the
-*        result Frame are to be obtained. Optionally, this may be NULL, in
-*        which case no overlaying of template attributes will be performed.
-*     result_naxes
-*        Number of axes to be selected from the target Frame. This number may
-*        be greater than or less than the number of axes in this Frame (or
-*        equal).
-*     target_axes
-*        Pointer to an array of int with result_naxes elements, giving a list
-*        of the (zero-based) axis indices of the axes to be selected from the
-*        target TimeFrame. The order in which these are given determines
-*        the order in which the axes appear in the result Frame. If any of the
-*        values in this array is set to -1, the corresponding result axis will
-*        not be derived from the target Frame, but will be assigned default
-*        attributes instead.
-*     template_axes
-*        Pointer to an array of int with result_naxes elements. This should
-*        contain a list of the template axes (given as zero-based axis indices)
-*        with which the axes of the result Frame are to be associated. This
-*        array determines which axes are used when overlaying axis-dependent
-*        attributes of the template on to the result. If any element of this
-*        array is set to -1, the corresponding result axis will not receive any
-*        template attributes.
-*
-*        If the template argument is given as NULL, this array is not used and
-*        a NULL pointer may also be supplied here.
-*     map
-*        Address of a location to receive a pointer to the returned Mapping.
-*        The forward transformation of this Mapping will describe how to
-*        convert coordinates from the coordinate system described by the target
-*        TimeFrame to that described by the result Frame. The inverse
-*        transformation will convert in the opposite direction.
-*     result
-*        Address of a location to receive a pointer to the result Frame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value is returned if coordinate conversion is possible
-*     between the target and the result Frame. Otherwise zero is returned and
-*     *map and *result are returned as NULL (but this will not in itself
-*     result in an error condition). In general, coordinate conversion should
-*     always be possible if no template Frame is supplied but may not always
-*     be possible otherwise.
-
-*  Notes:
-*     -  A value of zero will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-
-*  Implementation Notes:
-*     -  This implementation addresses the selection of axes from a 
-*     TimeFrame object. This results in another object of the same class 
-*     only if the single TimeFrame axis is selected exactly once. 
-*     Otherwise, the result is a Frame class object which inherits the 
-*     TimeFrame's axis information (if appropriate) but none of the other 
-*     properties of a TimeFrame.
-*     -  In the event that a TimeFrame results, the returned Mapping will 
-*     take proper account of the relationship between the target and result 
-*     coordinate systems.
-*     -  In the event that a Frame class object results, the returned Mapping
-*     will only represent a selection/permutation of axes.
-
-*  Implementation Deficiencies:
-*     -  Any axis selection is currently permitted. Probably this should be
-*     restricted so that each axis can only be selected once. The
-*     astValidateAxisSelection method will do this but currently there are bugs
-*     in the CmpFrame class that cause axis selections which will not pass this
-*     test. Install the validation when these are fixed.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *target;      /* Pointer to the TimeFrame structure */
-   AstTimeFrame *temp;        /* Pointer to copy of target TimeFrame */
-   AstTimeFrame *align_frm;   /* Frame in which to align the TimeFrames */
-   int match;                 /* Coordinate conversion is possible? */
-
-/* Initialise the returned values. */
-   *map = NULL;
-   *result = NULL;
-   match = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return match;
-
-/* Obtain a pointer to the target TimeFrame structure. */
-   target = (AstTimeFrame *) target_frame;
-
-/* Result is a TimeFrame. */
-/* -------------------------- */
-/* Check if the result Frame is to have one axis obtained by selecting
-   the single target TimeFrame axis. If so, the result will also be 
-   a TimeFrame. */
-   if ( ( result_naxes == 1 ) && ( target_axes[ 0 ] == 0 ) ) {
-
-/* Form the result from a copy of the target. */
-      *result = astCopy( target );
-
-/* If required, overlay the template attributes on to the result TimeFrame.
-   Also choose the Frame which defined the alignment system and time scale 
-   (via its AlignSystem and AlignTimeScale attributes) in which to align the 
-   two TimeFrames. This is the template (if there is a template). */
-      if ( template ) {
-         astOverlay( template, template_axes, *result );
-         if( astIsATimeFrame( template ) ) {
-            align_frm = astClone( template );
-         } else {
-            align_frm = astClone( target );
-         }
-
-/* If no template was supplied, align in the System and TimeScale of the
-   target. */
-      } else {
-         VerifyAttrs( target, "convert between different time systems", 
-                      "TimeScale", "astMatch", status );
-         align_frm = astClone( target );
-      }
-
-/* Generate a Mapping that takes account of changes in the sky coordinate
-   system (equinox, epoch, etc.) between the target TimeFrame and the result
-   TimeFrame. If this Mapping can be generated, set "match" to indicate that
-   coordinate conversion is possible. */
-      match = ( MakeTimeMapping( target, (AstTimeFrame *) *result, 
-                align_frm, 0, map, status ) != 0 );
-
-/* Free resources. */
-      align_frm = astAnnul( align_frm );
-
-/* Result is not a TimeFrame. */
-/* ------------------------------ */
-/* In this case, we select axes as if the target were from the Frame
-   class.  However, since the resulting data will then be separated
-   from their enclosing TimeFrame, default attribute values may differ
-   if the methods for obtaining them were over-ridden by the TimeFrame
-   class. To overcome this, we ensure that these values are explicitly
-   set for the result Frame (rather than relying on their defaults). */
-   } else {
-
-/* Make a temporary copy of the target TimeFrame. We will explicitly
-   set the attribute values in this copy so as not to modify the original. */
-      temp = astCopy( target );
-
-/* Define a macro to test if an attribute is set. If not, set it
-   explicitly to its default value. */
-#define SET(attribute) \
-   if ( !astTest##attribute( temp ) ) { \
-      astSet##attribute( temp, astGet##attribute( temp ) ); \
-   }
-
-/* Set attribute values which apply to the Frame as a whole and which
-   we want to retain, but whose defaults are over-ridden by the
-   TimeFrame class. */
-      SET(Domain)
-      SET(Title)
-
-/* Define a macro to test if an attribute is set for axis zero (the only
-   axis of a TimeFrame). If not, set it explicitly to its default value. */
-#define SET_AXIS(attribute) \
-   if ( !astTest##attribute( temp, 0 ) ) { \
-      astSet##attribute( temp, 0, \
-                         astGet##attribute( temp, 0 ) ); \
-   }
-
-/* Use this macro to set explicit values for all the axis attributes
-   for which the TimeFrame class over-rides the default value. */
-      SET_AXIS(Label)
-      SET_AXIS(Symbol)
-      SET_AXIS(Unit)
-
-/* Clear attributes which have an extended range of values allowed by
-   this class. */
-      astClearSystem( temp );
-      astClearAlignSystem( temp );
-
-/* Invoke the astSubFrame method inherited from the Frame class to
-   produce the result Frame by selecting the required set of axes and
-   overlaying the template Frame's attributes. */
-      match = (*parent_subframe)( (AstFrame *) temp, template,
-                                  result_naxes, target_axes, template_axes,
-                                  map, result, status );
-
-/* Delete the temporary copy of the target TimeFrame. */
-      temp = astDelete( temp );
-   }
-
-/* If an error occurred or no match was found, annul the returned
-   objects and reset the returned result. */
-   if ( !astOK || !match ) {
-      if( *map ) *map = astAnnul( *map );
-      if( *result ) *result = astAnnul( *result );
-      match = 0;
-   }
-
-/* Return the result. */
-   return match;
-
-/* Undefine macros local to this function. */
-#undef SET
-#undef SET_AXIS
-}
-
-static AstSystemType SystemCode( AstFrame *this, const char *system, int *status ) {
-/*
-*  Name:
-*     SystemCode
-
-*  Purpose:
-*     Convert a string into a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstSystemType SystemCode( AstFrame *this, const char *system, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astSystemCode method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a string used for the external description of 
-*     a coordinate system into a TimeFrame coordinate system type code 
-*     (System attribute value). It is the inverse of the astSystemString 
-*     function.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        Pointer to a constant null-terminated string containing the
-*        external description of the sky coordinate system.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The System type code.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM is returned if the sky coordinate
-*     system description was not recognised. This does not produce an
-*     error.
-*     - A value of AST__BADSYSTEM is also returned if this function
-*     is invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;      /* Result value to return */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" string against each possibility and assign the
-   result. */
-   if ( astChrMatch( "MJD", system ) || astChrMatch( "Modified Julian Date", system ) ) {
-      result = AST__MJD;
-
-   } else if ( astChrMatch( "JD", system ) || astChrMatch( "Julian Date", system ) ) {
-      result = AST__JD;
-
-   } else if ( astChrMatch( "BEPOCH", system ) || astChrMatch( "Besselian Epoch", system ) ) {
-      result = AST__BEPOCH;
-
-   } else if ( astChrMatch( "JEPOCH", system ) || astChrMatch( "Julian Epoch", system ) ) {
-      result = AST__JEPOCH;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *SystemLabel( AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemLabel
-
-*  Purpose:
-*     Return a label for a coordinate system type code.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *SystemLabel( AstSystemType system, int *status )
-
-*  Class Membership:
-*     TimeFrame member function.
-
-*  Description:
-*     This function converts a TimeFrame coordinate system type code
-*     (System attribute value) into a descriptive string for human readers.
-
-*  Parameters:
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the sky coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. */
-   switch ( system ) {
-
-   case AST__MJD:
-      result = "Modified Julian Date";
-      break;
-
-   case AST__JD:
-      result = "Julian Date";
-      break;
-
-   case AST__JEPOCH:
-      result = "Julian Epoch";
-      break;
-
-   case AST__BEPOCH:
-      result = "Besselian Epoch";
-      break;
-
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static const char *SystemString( AstFrame *this, AstSystemType system, int *status ) {
-/*
-*  Name:
-*     SystemString
-
-*  Purpose:
-*     Convert a coordinate system type code into a string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     const char *SystemString( AstFrame *this, AstSystemType system, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astSystemString method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function converts a TimeFrame coordinate system type code
-*     (System attribute value) into a string suitable for use as an
-*     external representation of the coordinate system type.
-
-*  Parameters:
-*     this
-*        The Frame.
-*     system
-*        The coordinate system type code.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string containing the
-*     textual equivalent of the type code supplied.
-
-*  Notes:
-*     - A NULL pointer value is returned if the sky coordinate system
-*     code was not recognised. This does not produce an error.
-*     - A NULL pointer value is also returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Match the "system" value against each possibility and convert to a
-   string pointer. (Where possible, return the same string as would be
-   used in the FITS WCS representation of the coordinate system). */
-   switch ( system ) {
-
-   case AST__MJD:
-      result = "MJD";
-      break;
-
-   case AST__JD:
-      result = "JD";
-      break;
-
-   case AST__JEPOCH:
-      result = "JEPOCH";
-      break;
-
-   case AST__BEPOCH:
-      result = "BEPOCH";
-      break;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static int TestActiveUnit( AstFrame *this_frame, int *status ) {
-/*
-*  Name:
-*     TestActiveUnit
-
-*  Purpose:
-*     Test the ActiveUnit flag for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int TestActiveUnit( AstFrame *this_frame, int *status ) 
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astTestActiveUnit protected
-*     method inherited from the Frame class).
-
-*  Description:
-*    This function test the value of the ActiveUnit flag for a TimeFrame, 
-*    which is always "unset". 
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The result of the test (0).
-
-*/
-   return 0;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astTestAttrib protected
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a TimeFrame's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - This function uses one-based axis numbering so that it is
-*     suitable for external (public) use.
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to the TimeFrame structure */
-   char *new_attrib;             /* Pointer value to new attribute name */
-   int len;                      /* Length of attrib string */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* First look for axis attributes defined by the Frame class. Since a
-   TimeFrame has only 1 axis, we allow these attributes to be specified
-   without a trailing "(axis)" string. */
-   if ( !strcmp( attrib, "direction" ) || 
-        !strcmp( attrib, "bottom" ) ||
-        !strcmp( attrib, "top" ) ||
-        !strcmp( attrib, "format" ) ||
-        !strcmp( attrib, "label" ) ||
-        !strcmp( attrib, "symbol" ) ||
-        !strcmp( attrib, "unit" ) ) {
-
-/* Create a new attribute name from the original by appending the string
-   "(1)" and then use the parent TestAttrib method. */
-      new_attrib = astMalloc( len + 4 );
-      if( new_attrib ) {
-         memcpy( new_attrib, attrib, len );
-         memcpy( new_attrib + len, "(1)", 4 ); 
-         result = (*parent_testattrib)( this_object, new_attrib, status );
-         new_attrib = astFree( new_attrib );
-      }
-
-/* AlignTimeScale. */
-/* --------------- */
-   } else if ( !strcmp( attrib, "aligntimescale" ) ) {
-      result = astTestAlignTimeScale( this );
-
-/* ClockLat. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clocklat" ) ) {
-      result = astTestAttrib( this, "obslat" );
-
-/* ClockLon. */
-/* ------- */
-   } else if ( !strcmp( attrib, "clocklon" ) ) {
-      result = astTestAttrib( this, "obslon" );
-
-/* LTOffset. */
-/* --------- */
-   } else if ( !strcmp( attrib, "ltoffset" ) ) {
-      result = astTestLTOffset( this );
-
-/* TimeOrigin. */
-/* --------- */
-   } else if ( !strcmp( attrib, "timeorigin" ) ) {
-      result = astTestTimeOrigin( this );
-
-/* TimeScale. */
-/* ---------- */
-   } else if ( !strcmp( attrib, "timescale" ) ) {
-      result = astTestTimeScale( this );
-
-/* If the attribute is not recognised, pass it on to the parent method
-   for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static double ToMJD( AstSystemType oldsys, double oldval, int *status ){
-/*
-*  Name:
-*     ToMJD
-
-*  Purpose:
-*     Convert a time value from TimeFrame's System to MJD.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double ToMJD( AstSystemType oldsys, double oldval, int *status ){
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function converts the supplied value from the supplied System 
-*     to an MJD.
-
-*  Parameters:
-*     oldsys
-*        The System in which the oldval is supplied.
-*     oldval
-*        The value to convert, assumed to be in the default units
-*        associated with "oldsys".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The MJD value corresponding to "oldval"
-
-*  Notes:
-*     - Both old and new value are assumed to be absolute (i.e. have zero
-*     offset).
-
-*/
-
-/* Local Variables; */
-   AstMapping *map;
-   double result;              
-   
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the old system is MJD just return the value unchanged. */
-   if( oldsys == AST__MJD ) {
-      result = oldval;
-
-/* Otherwise create a TimeMap wich converts from the TimeFrame system to
-   MJD, and use it to transform the supplied value. */
-   } else {
-      map = ToMJDMap( oldsys, 0.0, status );
-
-/* Use the TimeMap to convert the supplied value. */
-      astTran1( map, 1, &oldval, 1, &result );
-
-/* Free resources */
-      map = astAnnul( map );
-
-   }
-
-/* Return the result */
-   return result;
-}
-
-static AstMapping *ToMJDMap( AstSystemType oldsys, double off, int *status ){
-/*
-*  Name:
-*     ToMJDMap
-
-*  Purpose:
-*     Create a Mapping from a specified System to MJD.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstMapping *ToMJDMap( AstSystemType oldsys, double off, int *status ){
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function creates a Mapping which converts from the supplied
-*     system and offset to absolute MJD.
-
-*  Parameters:
-*     oldsys
-*        The System in which the oldval is supplied.
-*     off
-*        The axis offset used with the old System, assumed to be in the
-*        default system associated with oldsys.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Mapping.
-
-*/
-
-/* Local Variables; */
-   AstTimeMap *timemap;
-   double args[ 2 ];
-   
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Create a null TimeMap */
-   timemap = astTimeMap( 0, "", status );
-
-/* Set the offsets for the supplied and returned values. */
-   args[ 0 ] = off;
-   args[ 1 ] = 0.0;
-
-/* If required, add a TimeMap conversion which converts from the TimeFrame
-   system to MJD. */
-   if( oldsys == AST__MJD ) {
-/*      if( off != 0.0 ) astTimeAdd( timemap, "MJDTOMJD", args ); */
-      astTimeAdd( timemap, "MJDTOMJD", args );
-
-   } else if( oldsys == AST__JD ) {
-      astTimeAdd( timemap, "JDTOMJD", args );
-
-   } else if( oldsys == AST__JEPOCH ) {
-      astTimeAdd( timemap, "JEPTOMJD", args );
-
-   } else if( oldsys == AST__BEPOCH ) {
-      astTimeAdd( timemap, "BEPTOMJD", args );
-   }
-
-/* Return the result */
-   return (AstMapping *) timemap;
-}
-
-static double ToUnits( AstTimeFrame *this, const char *oldunit, double oldval,
-                       const char *method, int *status ){
-/*
-*
-*  Name:
-*     ToUnits
-
-*  Purpose:
-*     Convert a supplied time value to the default units of the supplied TimeFrame.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     double ToUnits( AstTimeFrame *this, const char *oldunit, double oldval,
-*                     const char *method, int *status )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function converts the supplied time value from the supplied
-*     units to the default units associated with the supplied TimeFrame's
-*     System.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     oldunit
-*        The units in which "oldval" is supplied.
-*     oldval
-*        The value to be converted.
-*     method
-*        Pointer to a string holding the name of the method to be
-*        included in any error messages. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The converted value.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   const char *defunit;
-   double result;              
-   
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get default units associated with the System attribute of the supplied
-   TimeFrame, and find a Mapping from the old units to the default. */
-   defunit = DefUnit( astGetSystem( this ), method, "TimeFrame", status );
-   map = astUnitMapper( oldunit, defunit, NULL, NULL );
-   if( map ) {
-
-/* Use the Mapping to convert the supplied value. */
-      astTran1( map, 1, &oldval, 1, &result );
-
-/* Free resources. */
-      map = astAnnul( map );
-
-/* Report an error if no conversion is possible. */
-   } else if( astOK ){
-      astError( AST__BADUN, "%s(%s): Cannot convert the supplied attribute "
-                "value from units of %s to %s.", status, method, astGetClass( this ), 
-                 oldunit, defunit );
-   }
-
-/* Return the result */
-   return result;
-}
-
-static int Unformat( AstFrame *this_frame, int axis, const char *string,
-                     double *value, int *status ) {
-/*
-*  Name:
-*     Unformat
-
-*  Purpose:
-*     Read a formatted coordinate value for a TimeFrame axis.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int Unformat( AstFrame *this, int axis, const char *string,
-*                   double *value, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the public astUnformat
-*     method inherited from the Frame class).
-
-*  Description:
-*     This function reads a formatted coordinate value for a TimeFrame
-*     axis (supplied as a string) and returns the equivalent numerical
-*     value as a double. It also returns the number of characters read
-*     from the string.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame.
-*     axis
-*        The number of the TimeFrame axis for which the coordinate
-*        value is to be read (axis numbering starts at zero for the
-*        first axis).
-*     string
-*        Pointer to a constant null-terminated string containing the
-*        formatted coordinate value.
-*     value
-*        Pointer to a double in which the coordinate value read will
-*        be returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of characters read from the string to obtain the
-*     coordinate value.
-
-*  Notes:
-*     - Any white space at the beginning of the string will be
-*     skipped, as also will any trailing white space following the
-*     coordinate value read. The function's return value will reflect
-*     this.
-*     - A function value of zero (and no coordinate value) will be
-*     returned, without error, if the string supplied does not contain
-*     a suitably formatted value.
-*     - The string "<bad>" is recognised as a special case and will
-*     generate the value AST__BAD, without error. The test for this
-*     string is case-insensitive and permits embedded white space.
-*     - A function result of zero will be returned and no coordinate
-*     value will be returned via the "value" pointer if this function
-*     is invoked with the global error status set, or if it should
-*     fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;
-   AstTimeFrame *this;
-   AstTimeScaleType ts1;
-   AstTimeScaleType ts2;
-   const char *c;
-   char *old_fmt; 
-   char *str;
-   const char *txt; 
-   double mjd;
-   double val1;
-   int l;
-   int lt;
-   int nc1;
-   int nc;            
-   int ndp;
-   int rep;
-
-/* Initialise. */
-   nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return nc;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_frame;
-
-/* Validate the axis index. */
-   (void) astValidateAxis( this, axis, "astUnformat" );
-
-/* First attempt to read the value using the parent unformat method, and
-   note how many characters were used. We temporarily clear the Format 
-   attribute if it has been set to a date format, since the parent Frame 
-   class does not understand date format.*/
-   txt = astGetFormat( this, axis );
-   if( DateFormat( txt, &ndp, NULL, status ) ) {
-       old_fmt = astStore( NULL, txt, strlen( txt ) + 1 );
-       astClearFormat( this, axis );
-   } else {
-       old_fmt = NULL;
-   }
-
-   nc1 = (*parent_unformat)( this_frame, axis, string, &val1, status );
-
-/* Re-instate the original Format */
-   if( old_fmt ) {
-      astSetFormat( this,axis, old_fmt );
-      old_fmt = astFree( old_fmt );
-   }
-
-/* The astReadDateTime function (defined within frame.c) does not allow
-   for any extra text to be appended to the end of the formatted date/time
-   (AST__BAD is returned if any such extra text is present). But astUnformat 
-   is contracted to allow such text. So we need to make multiple attempts
-   at reading the date/time in order to find the longest leading string
-   which gives a non-bad value. First take a copy of the supplied string 
-   si we can terminate it at any point we wish. */
-   l = astChrLen( string );
-   str = astStore( NULL, string, l + 1 );
-
-/* Now attempt to read an ISO date from the start of the string. We
-   switch off error reporting to avoid reports of unsuitable syntax. */
-   rep = astReporting( 0 );
-
-/* Attempt to read a date/time from the whol string. If this fails
-   terminate the string in order to make it one character shorter and try
-   again. */
-   for( lt = l; lt > 0; lt-- ) {
-      str[ lt ] = 0;
-      mjd = astReadDateTime( str );
-      if( !astOK ) astClearStatus;
-      if( mjd != AST__BAD ) break;
-   }
-
-/* Re-instate error reporting. */
-   astReporting( rep );
-
-/* Free resources. */
-   str = astFree( str );
-
-/* If the whole non-blank start of the string was consumed, add on any
-   trailing white space. */
-   if( lt >= l ) lt = strlen( string );
-
-/* If no date/time could be read, or if reading the value as a
-   floating point value was at least as good, return the floating point
-   value (assumed to be in the system and units of the TimeFrame. */
-   if( mjd == AST__BAD || nc1 >= l ) {
-      *value = val1;      
-      nc = nc1;
-
-/* Otherwise, if a date/time was read convert it to the TimeFrame system,
-   etc. */
-   } else if( mjd != AST__BAD ) {
-
-/* Save the number of character read from the supplied string. */
-      nc = lt;
-
-/* We require a value in the timescale of the supplied TimeFrame. Get
-   this TimeScale. */
-      ts2 = astGetTimeScale( this );
-
-/* If the supplied string gave the date/time as a Besselian epoch, the
-   input timescale is TT, otherwise it is assumed to be the TimeScale of
-   the TimeFrame. Locate the first non-space character. */
-      c = string;
-      while( *c && isspace( *c ) ) c++;
-
-/* If the first non-space is a "B", assuming a TT timescale. Otherwise
-   assume the timescale of the supplied TimeFrame. */
-      ts1 = ( *c == 'B' || *c == 'b' ) ? AST__TT : ts2;
-
-/* Create the Mapping and use it to transform the mjd value. */
-      map = MakeMap( this, AST__MJD, astGetSystem( this ), ts1, ts2, 
-                     0.0, astGetTimeOrigin( this ), "d", 
-                     astGetUnit( this, 0 ), "astFormat", status );
-      if( map ) {
-         astTran1( map, 1, &mjd, 1, value );
-         map = astAnnul( map );
-      } else {
-         astError( AST__INCTS, "astUnformat(%s): Cannot convert the "
-                "supplied date/time string (%s) to the required "
-                "timescale (%s).", status, astGetClass( this ), string, 
-                TimeScaleString( ts2, status ) );
-      }        
-   }
-
-/* Return the number of characters read. */
-   return nc;
-}
-
-static int ValidateSystem( AstFrame *this, AstSystemType system, const char *method, int *status ) {
-/*
-*
-*  Name:
-*     ValidateSystem
-
-*  Purpose:
-*     Validate a value for a Frame's System attribute.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     int ValidateSystem( AstFrame *this, AstSystemType system, 
-*                         const char *method, int *status )
-
-*  Class Membership:
-*     TimeFrame member function (over-rides the astValidateSystem method
-*     inherited from the Frame class).
-
-*  Description:
-*     This function checks the validity of the supplied system value.
-*     If the value is valid, it is returned unchanged. Otherwise, an
-*     error is reported and a value of AST__BADSYSTEM is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the Frame.
-*     system
-*        The system value to be checked. 
-*     method
-*        Pointer to a constant null-terminated character string
-*        containing the name of the method that invoked this function
-*        to validate an axis index. This method name is used solely
-*        for constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The validated system value.
-
-*  Notes:
-*     - A value of AST__BADSYSTEM will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstSystemType result;              /* Validated system value */
-
-/* Initialise. */
-   result = AST__BADSYSTEM;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the value is out of bounds, report an error. */
-   if ( system < FIRST_SYSTEM || system > LAST_SYSTEM ) {
-         astError( AST__AXIIN, "%s(%s): Bad value (%d) given for the System "
-                   "or AlignSystem attribute of a %s.", status, method, 
-                   astGetClass( this ), (int) system, astGetClass( this ) );
-
-/* Otherwise, return the supplied value. */
-   } else {
-      result = system;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void VerifyAttrs( AstTimeFrame *this, const char *purp, 
-                         const char *attrs, const char *method, int *status ) {
-/*
-*  Name:
-*     VerifyAttrs
-
-*  Purpose:
-*     Verify that usable attribute values are available.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     void VerifyAttrs( AstTimeFrame *this, const char *purp, 
-*                       const char *attrs, const char *method, int *status  )
-
-*  Class Membership:
-*     TimeFrame member function 
-
-*  Description:
-*     This function tests each attribute listed in "attrs". It returns
-*     without action if 1) an explicit value has been set for each attribute
-*     or 2) the UseDefs attribute of the supplied TimeFrame is non-zero.
-*
-*     If UseDefs is zero (indicating that default values should not be
-*     used for attributes), and any of the named attributes does not have
-*     an explicitly set value, then an error is reported.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame. 
-*     purp
-*        Pointer to a text string containing a message which will be
-*        included in any error report. This shouldindicate the purpose
-*        for which the attribute value is required. 
-*     attrs
-*        A string holding a space separated list of attribute names.
-*     method
-*        A string holding the name of the calling method for use in error
-*        messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   const char *a;
-   const char *desc;
-   const char *p;
-   int len;
-   int set;
-   int state;
-
-/* Check inherited status */
-   if( !astOK ) return;
-
-/* Stop compiler warnings about uninitialised variables */
-   a = NULL;
-   desc = NULL;
-   len = 0;
-   set = 0;
-
-/* If the TimeFrame has a non-zero value for its UseDefs attribute, then
-   all attributes are assumed to have usable values, since the defaults 
-   will be used if no explicit value has been set. So we only need to do
-   any checks if UseDefs is zero. */
-   if( !astGetUseDefs( this ) ) {   
-
-/* Loop round the "attrs" string identifying the start and length of each
-   non-blank word in the string. */
-      state = 0;
-      p = attrs;
-      while( 1 ) {
-         if( state == 0 ) {
-            if( !isspace( *p ) ) {
-               a = p;
-               len = 1;
-               state = 1;
-            }
-         } else {
-            if( isspace( *p ) || !*p ) {
-   
-/* The end of a word has just been reached. Compare it to each known
-   attribute value. Get a flag indicating if the attribute has a set
-   value, and a string describing the attribute.*/
-               if( len > 0 ) {
-
-                  if( !strncmp( "ObsLat", a, len ) ) {
-                     set = astTestObsLat( this );
-                     desc = "observer latitude";
-
-                  } else if( !strncmp( "ObsLon", a, len ) ) {
-                     set = astTestObsLon( this );
-                     desc = "observer longitude";
-
-                  } else if( !strncmp( "ObsAlt", a, len ) ) {
-                     set = astTestObsAlt( this );
-                     desc = "observer altitude";
-
-                  } else if( !strncmp( "Dut1", a, len ) ) {
-                     set = astTestDut1( this );
-                     desc = "UT1-UTC correction";
-
-                  } else if( !strncmp( "TimeOrigin", a, len ) ) {
-                     set = astTestTimeOrigin( this );
-                     desc = "time offset";
-
-                  } else if( !strncmp( "LTOffset", a, len ) ) {
-                     set = astTestLTOffset( this );
-                     desc = "local time offset";
-
-                  } else if( !strncmp( "TimeScale", a, len ) ) {
-                     set = astTestTimeScale( this );
-                     desc = "time scale";
-
-                  } else {
-                     astError( AST__INTER, "VerifyAttrs(TimeFrame): "
-                               "Unknown attribute name \"%.*s\" supplied (AST "
-                               "internal programming error).", status, len, a );
-                  }
-
-/* If the attribute does not have a set value, report an error. */
-                  if( !set && astOK ) {
-                     astError( AST__NOVAL, "%s(%s): Cannot %s.", status, method,
-                               astGetClass( this ), purp );
-                     astError( AST__NOVAL, "No value has been set for "
-                               "the AST \"%.*s\" attribute (%s).", status, len, a,
-                               desc );
-                  }
-
-/* Continue the word search algorithm. */
-               }
-               len = 0;
-               state = 0;
-            } else {
-               len++;
-            }
-         }
-         if( !*(p++) ) break;
-      }
-   }
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-
-/*
-*att++
-*  Name:
-*     TimeOrigin
-
-*  Purpose:
-*     The zero point for TimeFrame axis values
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This specifies the origin from which all time values are measured.
-*     The default value (zero) results in the TimeFrame describing
-*     absolute time values in the system given by the System attribute
-*     (e.g. MJD, Julian epoch, etc). If a TimeFrame is to be used to
-*     describe elapsed time since some origin, the TimeOrigin attribute 
-*     should be set to hold the required origin value. The TimeOrigin value 
-*     stored inside the TimeFrame structure is modified whenever TimeFrame 
-*     attribute values are changed so that it refers to the original moment 
-*     in time. 
-*
-*  Input Formats:
-*     The formats accepted when setting a TimeOrigin value are listed
-*     below. They are all case-insensitive and are generally tolerant
-*     of extra white space and alternative field delimiters:
-*
-*     - Besselian Epoch: Expressed in decimal years, with or without
-*     decimal places ("B1950" or "B1976.13" for example).
-*
-*     - Julian Epoch: Expressed in decimal years, with or without
-*     decimal places ("J2000" or "J2100.9" for example).
-*
-*     - Units: An unqualified decimal value is interpreted as a value in
-*     the system specified by the TimeFrame's System attribute, in the
-*     units given by the TimeFrame's Unit attribute. Alternatively, an 
-*     appropriate unit string can be appended to the end of the floating 
-*     point value ("123.4 d" for example), in which case the supplied value 
-*     is scaled into the units specified by the Unit attribute.
-*
-*     - Julian Date: With or without decimal places ("JD 2454321.9" for
-*     example).
-*
-*     - Modified Julian Date: With or without decimal places
-*     ("MJD 54321.4" for example).
-*
-*     - Gregorian Calendar Date: With the month expressed either as an
-*     integer or a 3-character abbreviation, and with optional decimal
-*     places to represent a fraction of a day ("1996-10-2" or
-*     "1996-Oct-2.6" for example). If no fractional part of a day is
-*     given, the time refers to the start of the day (zero hours).
-*
-*     - Gregorian Date and Time: Any calendar date (as above) but with
-*     a fraction of a day expressed as hours, minutes and seconds
-*     ("1996-Oct-2 12:13:56.985" for example). The date and time can be 
-*     separated by a space or by a "T" (as used by ISO8601 format).
-
-*  Output Format:
-*     When enquiring TimeOrigin values, the returned formatted floating
-*     point value represents a value in the TimeFrame's System, in the unit 
-*     specified by the TimeFrame's Unit attribute.
-
-*  Applicability:
-*     TimeFrame
-*        All TimeFrames have this attribute.
-
-*att--
-*/
-/* The time origin, stored internally in the default units associated
-   with the current System value. Clear the TimeOrigin value  by setting it 
-   to AST__BAD, which gives 0.0 as the default value. Any value is acceptable. */
-astMAKE_CLEAR(TimeFrame,TimeOrigin,timeorigin,AST__BAD)
-astMAKE_GET(TimeFrame,TimeOrigin,double,0.0,((this->timeorigin!=AST__BAD)?this->timeorigin:0.0))
-astMAKE_SET(TimeFrame,TimeOrigin,double,timeorigin,value)
-astMAKE_TEST(TimeFrame,TimeOrigin,( this->timeorigin != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     LTOffset
-
-*  Purpose:
-*     The offset from UTC to Local Time, in hours.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This specifies the offset from UTC to Local Time, in hours (fractional 
-*     hours can be supplied). It is positive for time zones east of Greenwich. 
-*     AST uses the figure as given, without making any attempt to correct for 
-*     daylight saving. The default value is zero.
-
-*  Applicability:
-*     TimeFrame
-*        All TimeFrames have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(TimeFrame,LTOffset,ltoffset,AST__BAD)
-astMAKE_GET(TimeFrame,LTOffset,double,0.0,((this->ltoffset!=AST__BAD)?this->ltoffset:0.0))
-astMAKE_SET(TimeFrame,LTOffset,double,ltoffset,value)
-astMAKE_TEST(TimeFrame,LTOffset,( this->ltoffset != AST__BAD ))
-
-/*
-*att++
-*  Name:
-*     AlignTimeScale
-
-*  Purpose:
-*     Time scale to use when aligning TimeFrames.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute controls how a TimeFrame behaves when it is used (by
-c     astFindFrame or astConvert) as a template to match another (target)
-f     AST_FINDFRAME or AST_CONVERT) as a template to match another (target)
-*     TimeFrame. It identifies the time scale in which alignment is 
-*     to occur. See the TimeScale attribute for a desription of the values 
-*     which may be assigned to this attribute. The default AlignTimeScale 
-*     value depends on the current value of TimeScale: if TimeScale is
-*     UT1, GMST, LMST or LAST, the default for AlignTimeScale is UT1, for all
-*     other TimeScales the default is TAI.
-*
-c     When astFindFrame or astConvert is used on two TimeFrames (potentially 
-f     When AST_FindFrame or AST_CONVERT is used on two TimeFrames (potentially 
-*     describing different time coordinate systems), it returns a Mapping 
-*     which can be used to transform a position in one TimeFrame into the
-*     corresponding position in the other. The Mapping is made up of the
-*     following steps in the indicated order:
-*
-*     - Map values from the system used by the target (MJD, JD, etc) to the 
-*     system specified by the AlignSystem attribute.
-*
-*     - Map these values from the target's time scale to the time scale 
-*     specified by the AlignTimeScale attribute.
-*
-*     - Map these values from the time scale specified by the AlignTimeScale 
-*     attribute, to the template's time scale.
-*
-*     - Map these values from the system specified by the AlignSystem 
-*     attribute, to the system used by the template.
-
-*  Applicability:
-*     TimeFrame
-*        All TimeFrames have this attribute.
-
-*att--
-*/
-astMAKE_TEST(TimeFrame,AlignTimeScale,( this->aligntimescale != AST__BADTS ))
-astMAKE_CLEAR(TimeFrame,AlignTimeScale,aligntimescale,AST__BADTS)
-astMAKE_SET(TimeFrame,AlignTimeScale,AstTimeScaleType,aligntimescale,(
-            ( ( value >= FIRST_TS ) && ( value <= LAST_TS ) ) ?
-                 value :
-                 ( astError( AST__ATTIN, "%s(%s): Bad value (%d) "
-                             "given for AlignTimeScale attribute.", status,
-                             "astSetAlignTimeScale", astGetClass( this ), (int) value ),
-
-/* Leave the value unchanged on error. */
-                                            this->aligntimescale ) ) )
-
-/*
-*att++
-*  Name:
-*     TimeScale
-
-*  Purpose:
-*     Time scale.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute identifies the time scale to which the time axis values 
-*     of a TimeFrame refer, and may take any of the values listed in the 
-*     "Time Scales" section (below).
-*
-*     The default TimeScale value depends on the current System value; if
-*     the current TimeFrame system is "Besselian epoch" the default is
-*     "TT", otherwise it is "TAI". Note, if the System attribute is set
-*     so that the TimeFrame represents Besselian Epoch, then an error
-*     will be reported if an attempt is made to set the TimeScale to 
-*     anything other than TT.
-* 
-*     Note, the supported time scales fall into two groups. The first group 
-*     containing  UT1, GMST, LAST and LMST define time in terms of the 
-*     orientation of the earth. The second group (containing all the remaining
-*     time scales) define time in terms of an atomic process. Since the rate of 
-*     rotation of the earth varies in an unpredictable way, conversion between 
-*     two timescales in different groups relies on a value being supplied for 
-*     the Dut1 attribute (defined by the parent Frame class). This attribute 
-*     specifies the difference between the UT1 and UTC time scales, in seconds,
-*     and defaults to zero. See the documentation for the Dut1 attribute for 
-*     further details. 
-
-*  Applicability:
-*     TimeFrame
-*        All TimeFrames have this attribute.
-
-*  Time Scales:
-*     The TimeFrame class supports the following TimeScale values (all are
-*     case-insensitive):
-*
-*     - "TAI" - International Atomic Time
-*     - "UTC" - Coordinated Universal Time
-*     - "UT1" - Universal Time
-*     - "GMST" - Greenwich Mean Sidereal Time
-*     - "LAST" - Local Apparent Sidereal Time
-*     - "LMST" - Local Mean Sidereal Time
-*     - "TT" - Terrestrial Time
-*     - "TDB" - Barycentric Dynamical Time
-*     - "TCB" - Barycentric Coordinate Time
-*     - "TCG" - Geocentric Coordinate Time
-*     - "LT" - Local Time (the offset from UTC is given by attribute LTOffset)
-*
-*     An very informative description of these and other time scales is
-*     available at http://www.ucolick.org/~sla/leapsecs/timescales.html.
-
-*  UTC Warnings:
-*     UTC should ideally be expressed using separate hours, minutes and 
-*     seconds fields (or at least in seconds for a given date) if leap seconds 
-*     are to be taken into account. Since the TimeFrame class represents 
-*     each moment in time using a single floating point number (the axis value)
-*     there will be an ambiguity during a leap second. Thus an error of up to 
-*     1 second can result when using AST to convert a UTC time to another 
-*     time scale if the time occurs within a leap second. Leap seconds 
-*     occur at most twice a year, and are introduced to take account of 
-*     variation in the rotation of the earth. The most recent leap second 
-*     occurred on 1st January 1999. Although in the vast majority of cases 
-*     leap second ambiguities won't matter, there are potential problems in 
-*     on-line data acquisition systems and in critical applications involving 
-*     taking the difference between two times. 
-
-*att--
-*/
-astMAKE_TEST(TimeFrame,TimeScale,( this->timescale != AST__BADTS ))
-
-/* Copy constructor. */
-/* ----------------- */
-
-/* Destructor. */
-/* ----------- */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for TimeFrame objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the TimeFrame class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeFrame whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstTimeFrame *this;           /* Pointer to the TimeFrame structure */
-   AstTimeScaleType ts;          /* TimeScale attribute value */
-   const char *sval;             /* Pointer to string value */
-   double dval;                  /* Double value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeFrame structure. */
-   this = (AstTimeFrame *) this_object;
-
-/* Write out values representing the instance variables for the
-   TimeFrame class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* TimeScale. */
-/* ---------- */
-   set = TestTimeScale( this, status );
-   ts = set ? GetTimeScale( this, status ) : astGetTimeScale( this );
-
-/* If set, convert explicitly to a string for the external
-   representation. */
-   sval = "";
-   if ( set ) {
-      if ( astOK ) {
-         sval = TimeScaleString( ts, status );
-
-/* Report an error if the TimeScale value was not recognised. */
-         if ( !sval ) {
-            astError( AST__SCSIN,
-                     "%s(%s): Corrupt %s contains invalid time scale "
-                     "identification code (%d).", status, "astWrite", 
-                     astGetClass( channel ), astGetClass( this ), (int) ts );
-         }
-      }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-   } else {
-      sval = astGetAttrib( this_object, "timescale" );
-   }
-
-/* Write out the value. */
-   astWriteString( channel, "TmScl", set, 1, sval, "Time scale" );
-
-/* AlignTimeScale. */
-/* --------------- */
-   set = TestAlignTimeScale( this, status );
-   ts = set ? GetAlignTimeScale( this, status ) : astGetAlignTimeScale( this );
-
-/* If set, convert explicitly to a string for the external representation. */
-   if ( set ) {
-      if ( astOK ) {
-         sval = TimeScaleString( ts, status );
-
-/* Report an error if the TimeScale value was not recognised. */
-         if ( !sval ) {
-            astError( AST__SCSIN,
-                     "%s(%s): Corrupt %s contains invalid alignment time "
-                     "scale identification code (%d).", status, "astWrite", 
-                     astGetClass( channel ), astGetClass( this ), (int) ts );
-         }
-      }
-
-/* If not set, use astGetAttrib which returns a string value using
-   (possibly over-ridden) methods. */
-   } else {
-      sval = astGetAttrib( this_object, "aligntimescale" );
-   }
-
-/* Write out the value. */
-   astWriteString( channel, "ATmScl", set, 0, sval, "Alignment time scale" );
-
-/* TimeOrigin. */
-/* ----------- */
-   set = TestTimeOrigin( this, status );
-   dval = set ? GetTimeOrigin( this, status ) : astGetTimeOrigin( this );
-   astWriteDouble( channel, "TmOrg", set, 0, dval, "Time offset" );
-
-/* LTOffset. */
-/* --------- */
-   set = TestLTOffset( this, status );
-   dval = set ? GetLTOffset( this, status ) : astGetLTOffset( this );
-   astWriteDouble( channel, "LTOff", set, 0, dval, "Local Time offset from UTC" );
-
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsATimeFrame and astCheckTimeFrame functions using the 
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(TimeFrame,Frame)
-astMAKE_CHECK(TimeFrame)
-
-AstTimeFrame *astTimeFrame_( const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astTimeFrame
-
-*  Purpose:
-*     Create a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstTimeFrame *astTimeFrame( const char *options, int *status, ... )
-
-*  Class Membership:
-*     TimeFrame constructor.
-
-*  Description:
-*     This function creates a new TimeFrame and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new TimeFrame. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new TimeFrame.
-
-*  Notes:
-*     -  A NULL pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic TimeFrame constructor which
-*     is available via the protected interface to the TimeFrame class.
-*     A public interface is provided by the astTimeFrameId_ function.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *um;               /* Mapping from default to actual units */
-   AstTimeFrame *new;            /* Pointer to new TimeFrame */
-   AstSystemType s;              /* System */
-   const char *u;                /* Units string */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the TimeFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitTimeFrame( NULL, sizeof( AstTimeFrame ), !class_init, 
-                           &class_vtab, "TimeFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new TimeFrame's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* Check the Units are appropriate for the System. */
-      u = astGetUnit( new, 0 );
-      s = astGetSystem( new );
-      um = astUnitMapper( DefUnit( s, "astTimeFrame", "TimeFrame", status ), 
-                          u, NULL, NULL );
-      if( um ) {
-         um = astAnnul( um );
-      } else {
-         astError( AST__BADUN, "astTimeFrame: Inappropriate units (%s) "
-                   "specified for a %s axis.", status, u, SystemLabel( s, status ) );
-      }      
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new TimeFrame. */
-   return new;
-}
-
-AstTimeFrame *astInitTimeFrame_( void *mem, size_t size, int init,
-                                 AstTimeFrameVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitTimeFrame
-
-*  Purpose:
-*     Initialise a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstTimeFrame *astInitTimeFrame( void *mem, size_t size, int init,
-*                                     AstFrameVtab *vtab, const char *name )
-
-*  Class Membership:
-*     TimeFrame initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new TimeFrame object. It allocates memory (if
-*     necessary) to accommodate the TimeFrame plus any additional data
-*     associated with the derived class. It then initialises a
-*     TimeFrame structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual function
-*     table for a TimeFrame at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the TimeFrame is to be
-*	created. This must be of sufficient size to accommodate the
-*	TimeFrame data (sizeof(TimeFrame)) plus any data used by
-*	the derived class. If a value of NULL is given, this function
-*	will allocate the memory itself using the "size" parameter to
-*	determine its size.
-*     size
-*        The amount of memory used by the TimeFrame (plus derived
-*	class data). This will be used to allocate memory if a value of
-*	NULL is given for the "mem" parameter. This value is also stored
-*	in the TimeFrame structure, so a valid value must be supplied
-*	even if not required for allocating memory.
-*     init
-*        A logical flag indicating if the TimeFrame's virtual function
-*	table is to be initialised. If this value is non-zero, the
-*	virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*	associated with the new TimeFrame.
-*     name
-*        Pointer to a constant null-terminated character string which
-*	contains the name of the class to which the new object belongs
-*	(it is this pointer value that will subsequently be returned by
-*	the astGetClass method).
-
-*  Returned Value:
-*     A pointer to the new TimeFrame.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstTimeFrame *new;        /* Pointer to the new TimeFrame */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitTimeFrameVtab( vtab, name );
-
-/* Initialise a 1D Frame structure (the parent class) as the first component
-   within the TimeFrame structure, allocating memory if necessary. */
-   new = (AstTimeFrame *) astInitFrame( mem, size, 0,
-                                        (AstFrameVtab *) vtab, name, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the TimeFrame data. */
-/* ----------------------------- */
-/* Initialise all attributes to their "undefined" values. */
-      new->timeorigin = AST__BAD;
-      new->ltoffset = AST__BAD;
-      new->timescale = AST__BADTS;
-      new->aligntimescale = AST__BADTS;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstTimeFrame *astLoadTimeFrame_( void *mem, size_t size,
-                                 AstTimeFrameVtab *vtab, 
-                                 const char *name, AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadTimeFrame
-
-*  Purpose:
-*     Load a TimeFrame.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timeframe.h"
-*     AstTimeFrame *astLoadTimeFrame( void *mem, size_t size,
-*                                      AstTimeFrameVtab *vtab, 
-*                                      const char *name, AstChannel *channel )
-
-*  Class Membership:
-*     TimeFrame loader.
-
-*  Description:
-*     This function is provided to load a new TimeFrame using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     TimeFrame structure in this memory, using data read from the
-*     input Channel.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the TimeFrame is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        TimeFrame data (sizeof(TimeFrame)) plus any data used by
-*        derived classes. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the TimeFrame (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the TimeFrame structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstTimeFrame) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new TimeFrame. If this is NULL, a pointer
-*        to the (static) virtual function table for the TimeFrame class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "TimeFrame" is used instead.
-
-*  Returned Value:
-*     A pointer to the new TimeFrame.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstTimeFrame *new;            /* Pointer to the new TimeFrame */
-   char *sval;                   /* Pointer to string value */
-   double obslat;                /* Value for ObsLat attribute */
-   double obslon;                /* Value for ObsLon attribute */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this TimeFrame. In this case the
-   TimeFrame belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstTimeFrame );
-      vtab = &class_vtab;
-      name = "TimeFrame";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitTimeFrameVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built TimeFrame. */
-   new = astLoadFrame( mem, size, (AstFrameVtab *) vtab, name,
-                       channel );
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-       astReadClassData( channel, "TimeFrame" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* TimeScale. */
-/* ---------- */
-/* Set the default and read the external representation as a string. */
-       new->timescale = AST__BADTS;
-       sval = astReadString( channel, "tmscl", NULL );
-
-/* If a value was read, convert from a string to a TimeScale code. */
-       if ( sval ) {
-          if ( astOK ) {
-             new->timescale = TimeScaleCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
-             if ( new->timescale == AST__BADTS ) {
-                astError( AST__ATTIN,
-                          "astRead(%s): Invalid time scale description "
-                          "\"%s\".", status, astGetClass( channel ), sval );
-             }
-          }
-
-/* Free the string value. */
-          sval = astFree( sval );
-       }
-
-/* AlignTimeScale. */
-/* --------------- */
-/* Set the default and read the external representation as a string. */
-       new->aligntimescale = AST__BADTS;
-       sval = astReadString( channel, "atmscl", NULL );
-
-/* If a value was read, convert from a string to a TimeScale code. */
-       if ( sval ) {
-          if ( astOK ) {
-             new->aligntimescale = TimeScaleCode( sval, status );
-
-/* Report an error if the value wasn't recognised. */
-             if ( new->aligntimescale == AST__BADTS ) {
-                astError( AST__ATTIN,
-                          "astRead(%s): Invalid alignment time scale "
-                          "description \"%s\".", status, astGetClass( channel ), sval );
-             }
-          }
-
-/* Free the string value. */
-          sval = astFree( sval );
-       }
-
-/* ClockLat. */
-/* --------- */
-/* Retained for backward compatibility with older versions of AST in
-   which TimeFrame had a ClockLat attribute (now ObsLat is used instead). */
-      if( !astTestObsLat( new ) ) {
-         obslat = astReadDouble( channel, "cllat", AST__BAD );
-         if ( obslat != AST__BAD ) astSetObsLat( new, obslat );
-      }
-
-/* ClockLon. */
-/* ------- */
-/* Retained for backward compatibility with older versions of AST in
-   which TimeFrame had a ClockLon attribute (now ObsLon is used instead). */
-      if( !astTestObsLon( new ) ) {
-         obslon = astReadDouble( channel, "cllon", AST__BAD );
-         if ( obslon != AST__BAD ) astSetObsLon( new, obslon );
-      }
-
-/* TimeOrigin. */
-/* --------- */
-      new->timeorigin = astReadDouble( channel, "tmorg", AST__BAD );
-      if ( TestTimeOrigin( new, status ) ) SetTimeOrigin( new, new->timeorigin, status );
-
-/* LTOffset. */
-/* --------- */
-      new->ltoffset = astReadDouble( channel, "ltoff", AST__BAD );
-      if ( TestLTOffset( new, status ) ) SetLTOffset( new, new->ltoffset, status );
-
-/* If an error occurred, clean up by deleting the new TimeFrame. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new TimeFrame pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astSetTimeScale_( AstTimeFrame *this, AstTimeScaleType value, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,TimeFrame,SetTimeScale))(this,value, status );
-}
-
-void astClearTimeScale_( AstTimeFrame *this, int *status ){
-   if ( !astOK ) return;
-   (**astMEMBER(this,TimeFrame,ClearTimeScale))(this, status );
-}
-
-AstTimeScaleType astGetAlignTimeScale_( AstTimeFrame *this, int *status ) {
-   if ( !astOK ) return AST__BADTS;
-   return (**astMEMBER(this,TimeFrame,GetAlignTimeScale))(this, status );
-}
-
-AstTimeScaleType astGetTimeScale_( AstTimeFrame *this, int *status ) {
-   if ( !astOK ) return AST__BADTS;
-   return (**astMEMBER(this,TimeFrame,GetTimeScale))(this, status );
-}
-
-double astCurrentTime_( AstTimeFrame *this, int *status ){
-   if ( !astOK ) return AST__BAD;
-   return (**astMEMBER(this,TimeFrame,CurrentTime))(this, status );
-}
-   
-
-
-/* Special public interface functions. */
-/* =================================== */
-/* These provide the public interface to certain special functions
-   whose public interface cannot be handled using macros (such as
-   astINVOKE) alone. In general, they are named after the
-   corresponding protected version of the function, but with "Id"
-   appended to the name. */
-
-/* Public Interface Function Prototypes. */
-/* ------------------------------------- */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstTimeFrame *astTimeFrameId_( const char *, ... );
-
-/* Special interface function implementations. */
-/* ------------------------------------------- */
-AstTimeFrame *astTimeFrameId_( const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astTimeFrame
-f     AST_TIMEFRAME
-
-*  Purpose:
-*     Create a TimeFrame.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "timeframe.h"
-c     AstTimeFrame *astTimeFrame( const char *options, ... )
-f     RESULT = AST_TIMEFRAME( OPTIONS, STATUS )
-
-*  Class Membership:
-*     TimeFrame constructor.
-
-*  Description:
-*     This function creates a new TimeFrame and optionally initialises
-*     its attributes.
-*
-*     A TimeFrame is a specialised form of one-dimensional Frame which 
-*     represents various coordinate systems used to describe positions in
-*     time.
-*
-*     A TimeFrame represents a moment in time as either an Modified Julian 
-*     Date (MJD), a Julian Date (JD), a Besselian epoch or a Julian epoch,
-*     as determined by the System attribute. Optionally, a zero point can be 
-*     specified (using attribute TimeOrigin) which results in the TimeFrame 
-*     representing time offsets from the specified zero point.
-*
-*     Even though JD and MJD are defined as being in units of days, the
-*     TimeFrame class allows other units to be used (via the Unit attribute) 
-*     on the basis of simple scalings (60 seconds = 1 minute, 60 minutes = 1 
-*     hour, 24 hours = 1 day, 365.25 days = 1 year). Likewise, Julian epochs 
-*     can be described in units other than the usual years. Besselian epoch 
-*     are always represented in units of (tropical) years.
-*
-*     The TimeScale attribute allows the time scale to be specified (that
-*     is, the physical proces used to define the rate of flow of time).
-*     MJD, JD and Julian epoch can be used to represent a time in any
-*     supported time scale. However, Besselian epoch may only be used with the 
-*     "TT" (Terrestrial Time) time scale. The list of supported time scales
-*     includes universal time and siderial time. Strictly, these represent 
-*     angles rather than time scales, but are included in the list since
-*     they are in common use and are often thought of as time scales.
-*
-*     When a time value is formatted it can be formated either as a simple
-*     floating point value, or as a Gregorian date (see the Format
-*     attribute).
-
-*  Parameters:
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new TimeFrame. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new TimeFrame. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astTimeFrame()
-f     AST_TIMEFRAME = INTEGER
-*        A pointer to the new TimeFrame.
-
-*  Notes:
-*     - When conversion between two TimeFrames is requested (as when
-c     supplying TimeFrames to astConvert),
-f     supplying TimeFrames AST_CONVERT),
-*     account will be taken of the nature of the time coordinate systems 
-*     they represent, together with any qualifying time scale, offset,
-*     unit, etc. The AlignSystem and AlignTimeScale attributes will also be 
-*     taken into account. 
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astTimeFrame constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astTimeFrame_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - The variable argument list also prevents this function from
-*     invoking astTimeFrame_ directly, so it must be a
-*     re-implementation of it in all respects, except for the final
-*     conversion of the result to an ID value.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMapping *um;               /* Mapping from default to actual units */
-   AstTimeFrame *new;            /* Pointer to new TimeFrame */
-   AstSystemType s;              /* System */
-   const char *u;                /* Units string */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the TimeFrame, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitTimeFrame( NULL, sizeof( AstTimeFrame ), !class_init, 
-                           &class_vtab, "TimeFrame" );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new TimeFrame's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* Check the Units are appropriate for the System. */
-      u = astGetUnit( new, 0 );
-      s = astGetSystem( new );
-      um = astUnitMapper( DefUnit( s, "astTimeFrame", "TimeFrame", status ), 
-                          u, NULL, NULL );
-      if( um ) {
-         um = astAnnul( um );
-      } else {
-         astError( AST__BADUN, "astTimeFrame: Inappropriate units (%s) "
-                   "specified for a %s axis.", status, u, SystemLabel( s, status ) );
-      }      
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new TimeFrame. */
-   return astMakeId( new );
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/timeframe.h b/ast-5.3-1/timeframe.h
deleted file mode 100644
index 36739af..0000000
--- a/ast-5.3-1/timeframe.h
+++ /dev/null
@@ -1,320 +0,0 @@
-#if !defined( TIMEFRAME_INCLUDED ) /* Include this file only once */
-#define TIMEFRAME_INCLUDED
-/*
-*+
-*  Name:
-*     timeframe.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the TimeFrame class.
-
-*  Invocation:
-*     #include "timeframe.h"
-
-*  Description:
-*     This include file defines the interface to the TimeFrame class
-*     and provides the type definitions, function prototypes and
-*     macros, etc. needed to use this class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     20-MAY-2005 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Parent Frame class */
-#include "skyframe.h"            /* Celestial coordinate systems */
-
-/* Macros. */
-/* ======= */
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-
-#if defined(astCLASS)            /* Protected */
-
-/* Values used to represent different System attribute values. */
-#define AST__MJD    1
-#define AST__JD     2
-#define AST__JEPOCH 3
-#define AST__BEPOCH 4
-
-/* Values used to represent different TimeScale attribute values. */
-#define AST__BADTS        0
-#define AST__TAI          1
-#define AST__UTC          2
-#define AST__UT1          3
-#define AST__GMST         4
-#define AST__LAST         5
-#define AST__LMST         6
-#define AST__TT           7
-#define AST__TDB          8
-#define AST__TCB          9
-#define AST__TCG         10
-#define AST__LT          11
-
-/* Define constants used to size global arrays in this module. */
-#define AST__TIMEFRAME_FORMAT_BUFF_LEN 200
-#define AST__TIMEFRAME_GETATTRIB_BUFF_LEN 50
-#define AST__TIMEFRAME_GETLABEL_BUFF_LEN 200
-#define AST__TIMEFRAME_GETSYMBOL_BUFF_LEN 20
-#define AST__TIMEFRAME_GETTITLE_BUFF_LEN 200
-
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* Integer type used to store the TimeScale attribute. */
-typedef int AstTimeScaleType;
-
-/* TimeFrame structure. */
-/* ------------------- */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstTimeFrame {
-
-/* Attributes inherited from the parent class. */
-   AstFrame frame;               /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double ltoffset;              /* Offset from UTC to Local Time */
-   double timeorigin;            /* Zero point for time axis */
-   AstTimeScaleType timescale;   /* Time scale */
-   AstTimeScaleType aligntimescale; /* Alignment time scale */
-} AstTimeFrame;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all objects in the
-   class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstTimeFrameVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstFrameVtab frame_vtab;      /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double (* CurrentTime)( AstTimeFrame *, int * );
-
-   double (* GetLTOffset)( AstTimeFrame *, int * );
-   int (* TestLTOffset)( AstTimeFrame *, int * );
-   void (* ClearLTOffset)( AstTimeFrame *, int * );
-   void (* SetLTOffset)( AstTimeFrame *, double, int * );
-
-   double (* GetTimeOrigin)( AstTimeFrame *, int * );
-   int (* TestTimeOrigin)( AstTimeFrame *, int * );
-   void (* ClearTimeOrigin)( AstTimeFrame *, int * );
-   void (* SetTimeOrigin)( AstTimeFrame *, double, int * );
-
-   AstTimeScaleType (* GetTimeScale)( AstTimeFrame *, int * );
-   int (* TestTimeScale)( AstTimeFrame *, int * );
-   void (* ClearTimeScale)( AstTimeFrame *, int * );
-   void (* SetTimeScale)( AstTimeFrame *, AstTimeScaleType, int * );
-
-   AstTimeScaleType (* GetAlignTimeScale)( AstTimeFrame *, int * );
-   int (* TestAlignTimeScale)( AstTimeFrame *, int * );
-   void (* ClearAlignTimeScale)( AstTimeFrame *, int * );
-   void (* SetAlignTimeScale)( AstTimeFrame *, AstTimeScaleType, int * );
-
-} AstTimeFrameVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstTimeFrameGlobals {
-   AstTimeFrameVtab Class_Vtab;
-   int Class_Init;
-   char Format_Buff[ AST__TIMEFRAME_FORMAT_BUFF_LEN + 1 ];
-   char GetAttrib_Buff[ AST__TIMEFRAME_GETATTRIB_BUFF_LEN + 1 ];
-   char GetLabel_Buff[ AST__TIMEFRAME_GETLABEL_BUFF_LEN + 1 ];
-   char GetSymbol_Buff[ AST__TIMEFRAME_GETSYMBOL_BUFF_LEN + 1 ];
-   char GetTitle_Buff[ AST__TIMEFRAME_GETTITLE_BUFF_LEN + 1 ];
-} AstTimeFrameGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(TimeFrame)         /* Check class membership */
-astPROTO_ISA(TimeFrame)           /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-AstTimeFrame *astTimeFrame_( const char *, int *, ...);
-#else
-AstTimeFrame *astTimeFrameId_( const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstTimeFrame *astInitTimeFrame_( void *, size_t, int, AstTimeFrameVtab *,
-                                 const char *, int * );
-
-/* Vtab initialiser. */
-void astInitTimeFrameVtab_( AstTimeFrameVtab *, const char *, int * );
-
-/* Loader. */
-AstTimeFrame *astLoadTimeFrame_( void *, size_t, AstTimeFrameVtab *,
-                                 const char *, AstChannel *channel, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitTimeFrameGlobals_( AstTimeFrameGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-double astCurrentTime_( AstTimeFrame *, int * );
-
-#if defined(astCLASS)            /* Protected */
-
-double astGetLTOffset_( AstTimeFrame *, int * );
-int astTestLTOffset_( AstTimeFrame *, int * );
-void astClearLTOffset_( AstTimeFrame *, int * );
-void astSetLTOffset_( AstTimeFrame *, double, int * );
-
-double astGetTimeOrigin_( AstTimeFrame *, int * );
-int astTestTimeOrigin_( AstTimeFrame *, int * );
-void astClearTimeOrigin_( AstTimeFrame *, int * );
-void astSetTimeOrigin_( AstTimeFrame *, double, int * );
-
-AstTimeScaleType astGetTimeScale_( AstTimeFrame *, int * );
-int astTestTimeScale_( AstTimeFrame *, int * );
-void astClearTimeScale_( AstTimeFrame *, int * );
-void astSetTimeScale_( AstTimeFrame *, AstTimeScaleType, int * );
-
-AstTimeScaleType astGetAlignTimeScale_( AstTimeFrame *, int * );
-int astTestAlignTimeScale_( AstTimeFrame *, int * );
-void astClearAlignTimeScale_( AstTimeFrame *, int * );
-void astSetAlignTimeScale_( AstTimeFrame *, AstTimeScaleType, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckTimeFrame(this) astINVOKE_CHECK(TimeFrame,this,0)
-#define astVerifyTimeFrame(this) astINVOKE_CHECK(TimeFrame,this,1)
-
-/* Test class membership. */
-#define astIsATimeFrame(this) astINVOKE_ISA(TimeFrame,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected */
-#define astTimeFrame astINVOKE(F,astTimeFrame_)
-#else
-#define astTimeFrame astINVOKE(F,astTimeFrameId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitTimeFrame(mem,size,init,vtab,name) \
-astINVOKE(O,astInitTimeFrame_(mem,size,init,vtab,name,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitTimeFrameVtab(vtab,name) astINVOKE(V,astInitTimeFrameVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadTimeFrame(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadTimeFrame_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-
-/* None. */
-
-/* Interfaces to protected member functions. */
-/* ----------------------------------------- */
-/* Here we make use of astCheckTimeFrame to validate TimeFrame pointers
-   before use. This provides a contextual error report if a pointer to
-   the wrong sort of object is supplied. */
-
-#define astCurrentTime(this) astINVOKE(V,astCurrentTime_(astCheckTimeFrame(this),STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-
-#define astGetTimeOrigin(this) astINVOKE(V,astGetTimeOrigin_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestTimeOrigin(this) astINVOKE(V,astTestTimeOrigin_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearTimeOrigin(this) astINVOKE(V,astClearTimeOrigin_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetTimeOrigin(this,value) astINVOKE(V,astSetTimeOrigin_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#define astGetLTOffset(this) astINVOKE(V,astGetLTOffset_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestLTOffset(this) astINVOKE(V,astTestLTOffset_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearLTOffset(this) astINVOKE(V,astClearLTOffset_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetLTOffset(this,value) astINVOKE(V,astSetLTOffset_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#define astGetTimeScale(this) astINVOKE(V,astGetTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestTimeScale(this) astINVOKE(V,astTestTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearTimeScale(this) astINVOKE(V,astClearTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetTimeScale(this,value) astINVOKE(V,astSetTimeScale_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#define astGetAlignTimeScale(this) astINVOKE(V,astGetAlignTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astTestAlignTimeScale(this) astINVOKE(V,astTestAlignTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astClearAlignTimeScale(this) astINVOKE(V,astClearAlignTimeScale_(astCheckTimeFrame(this),STATUS_PTR))
-#define astSetAlignTimeScale(this,value) astINVOKE(V,astSetAlignTimeScale_(astCheckTimeFrame(this),value,STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/timemap.c b/ast-5.3-1/timemap.c
deleted file mode 100644
index b66e571..0000000
--- a/ast-5.3-1/timemap.c
+++ /dev/null
@@ -1,5180 +0,0 @@
-/*
-*class++
-*  Name:
-*     TimeMap
-
-*  Purpose:
-*     Sequence of time coordinate conversions.
-
-*  Constructor Function:
-c     astTimeMap (also see astTimeAdd)
-f     AST_TIMEMAP (also see AST_TIMEADD)
-
-*  Description:
-*     A TimeMap is a specialised form of 1-dimensional Mapping which can be 
-*     used to represent a sequence of conversions between standard time
-*     coordinate systems.
-*
-*     When a TimeMap is first created, it simply performs a unit
-c     (null) Mapping. Using the astTimeAdd
-f     (null) Mapping. Using the AST_TIMEADD
-c     function, a series of coordinate conversion steps may then be
-f     routine, a series of coordinate conversion steps may then be
-*     added. This allows multi-step conversions between a variety of 
-*     time coordinate systems to be assembled out of a set of building 
-*     blocks.
-*
-*     For details of the individual coordinate conversions available,
-c     see the description of the astTimeAdd function.
-f     see the description of the AST_TIMEADD routine.
-
-*  Inheritance:
-*     The TimeMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The TimeMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     In addition to those functions applicable to all Mappings, the
-c     following function may also be applied to all TimeMaps:
-f     In addition to those routines applicable to all Mappings, the
-f     following routine may also be applied to all TimeMaps:
-*
-c     - astTimeAdd: Add a time coordinate conversion to an TimeMap
-f     - AST_TIMEADD: Add a time coordinate conversion to an TimeMap
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     NG: Norman Gray (Starlink)
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     5-Sep-2003 (NG):
-*        Original version (drawing heavily on specmap.c)
-*     25-MAY-2005 (DSB):
-*        Extensive modifications to make it more AST-like.
-*     10-AUG-2005 (DSB):
-*        Add 2006 leap second.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*     15-OCT-2006 (DSB):
-*        Add conversions between UT1 and UTC (UTTOUTC and UTCTOUT).
-*     3-APR-2008 (DSB):
-*        Only call memcpy if the source and destination pointers are
-*        different.
-*     15-APR-2008 (DSB):
-*        Add missing "break;" statement to "case AST__LMSTTOGMST:" 
-*        in Transform.
-*     20-MAY-2008 (DSB):
-*        Add conversions between Local Time and UTC (LTTOUTC and UTCTOLT).
-*     18-JUN-2009 (DSB):
-*        Add OBSALT to argument list for TTTOTDB and TDBTOTT. Change
-*        CLOCKLAT/LON to OBSLAT/LON for consistency with other classes.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS TimeMap
-
-/* Codes to identify time coordinate conversions. */
-#define AST__TIME_NULL   0       /* Null value */
-#define AST__MJDTOMJD    1       /* MJD to MJD */
-#define AST__MJDTOJD     2       /* MJD to JD */
-#define AST__JDTOMJD     3       /* JD to MJD */
-#define AST__MJDTOBEP    4       /* MJD to Besselian epoch */
-#define AST__BEPTOMJD    5       /* Besselian epoch to MJD */
-#define AST__MJDTOJEP    6       /* MJD to Julian epoch */
-#define AST__JEPTOMJD    7       /* Julian epoch to MJD */
-#define AST__TAITOUTC    8       /* TAI to UTC */
-#define AST__UTCTOTAI    9       /* UTC to TAI */
-#define AST__TTTOTAI    10       /* TT to TAI */
-#define AST__TAITOTT    11       /* TAI to TT */
-#define AST__TDBTOTT    12       /* TDB to TT */
-#define AST__TTTOTDB    13       /* TT to TDB */
-#define AST__TCGTOTT    14       /* TCG to TT */
-#define AST__TTTOTCG    15       /* TT to TCG */
-#define AST__TCBTOTDB   16       /* TCB to TDB */
-#define AST__TDBTOTCB   17       /* TDB to TCB */
-#define AST__UTTOGMST   18       /* UT to GMST */
-#define AST__GMSTTOUT   19       /* GMST to UT1 */
-#define AST__GMSTTOLMST 20       /* GMST to LMST */
-#define AST__LMSTTOGMST 21       /* LMST to GMST */
-#define AST__LASTTOLMST 22       /* LAST to LMST */
-#define AST__LMSTTOLAST 23       /* LMST to LAST */
-#define AST__UTTOUTC    24       /* UT1 to UTC */
-#define AST__UTCTOUT    25       /* UTC to UT1 */
-#define AST__LTTOUTC    26       /* Local Time to UTC */
-#define AST__UTCTOLT    27       /* UTC to Local Time */
-
-/* Maximum number of arguments required by a conversion. */
-#define MAX_ARGS 6
-
-/* The alphabet (used for generating keywords for arguments). */
-#define ALPHABET "abcdefghijklmnopqrstuvwxyz"
-
-/* Angle conversion */
-#define PI 3.1415926535897932384626433832795028841971693993751
-#define D2PI (2*PI)
-#define PIBY2 (PI/2.0)
-#define D2R (PI/180.0)
-#define R2D (180.0/PI)
-
-/* Other constants */
-#define SPD 86400
-#define LG 6.969290134E-10
-#define LB 1.55051976772E-8
-#define P0 6.55E-5
-#define TTOFF 32.184
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "pal.h"              /* SLALIB interface */
-#include "slamap.h"              /* Spatial sla mappings */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "unitmap.h"             /* Unit (null) Mappings */
-#include "timemap.h"             /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double (* parent_rate)( AstMapping *, double *, int, int, int * );
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(TimeMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(TimeMap,Class_Init)
-#define class_vtab astGLOBAL(TimeMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstTimeMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstTimeMap *astTimeMapId_( int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *CvtString( int, const char **, int *, int *, const char *[ MAX_ARGS ], int * );
-static double Gmsta( double, double, int, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static double Rcc( double, double, double, double, double, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int CvtCode( const char *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void AddArgs( int, double *, int * );
-static void AddTimeCvt( AstTimeMap *, int, const double *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void TimeAdd( AstTimeMap *, const char *, const double[], int * );
-
-static int GetObjSize( AstObject *, int * );
-/* Member functions. */
-/* ================= */
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two TimeMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     TimeMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two TimeMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a TimeMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the TimeMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeMap *that;        
-   AstTimeMap *this;        
-   const char *argdesc[ MAX_ARGS ]; 
-   const char *comment;      
-   int i, j;           
-   int nargs;              
-   int nin;
-   int nout;
-   int result;
-   int szargs;             
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two TimeMap structures. */
-   this = (AstTimeMap *) this_object;
-   that = (AstTimeMap *) that_object;
-
-/* Check the second object is a TimeMap. We know the first is a
-   TimeMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsATimeMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two TimeMaps differ, it may still be possible 
-   for them to be equivalent. First compare the TimeMaps if their Invert 
-   flags are the same. In this case all the attributes of the two TimeMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-            if( this->ncvt == that->ncvt ) {
-               result = 1;
-               for( i = 0; i < this->ncvt && result; i++ ) {
-                  if( this->cvttype[ i ] != that->cvttype[ i ] ) {
-                     result = 0;
-                  } else {
-                     CvtString( this->cvttype[ i ], &comment, &nargs, &szargs, argdesc, status );
-                     for( j = 0; j < nargs; j++ ) {
-                        if( !astEQUAL( this->cvtargs[ i ][ j ],
-                                       that->cvtargs[ i ][ j ] ) ){
-                           result = 0;
-                           break;
-                        }
-                     }
-                  }
-               }
-            }
-
-/* If the Invert flags for the two TimeMaps differ, the attributes of the two 
-   TimeMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a TimeMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     TimeMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied TimeMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTimeMap *this;         /* Pointer to TimeMap structure */
-   int result;               /* Result value to return */
-   int cvt;                  /* Loop counter for coordinate conversions */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the TimeMap structure. */
-   this = (AstTimeMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-
-   for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
-      result += astTSizeOf( this->cvtargs[ cvt ] );
-   }
-
-   result += astTSizeOf( this->cvtargs );
-   result += astTSizeOf( this->cvttype );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-
-static void AddArgs( int cvttype, double *cvtargs, int *status ) {
-/*
-*  Name:
-*     AddArgs
-
-*  Purpose:
-*     Set values for addition conversion arguments.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     void AddArgs( int cvttype, double *cvtargs, int *status )
-
-*  Class Membership:
-*     TimeMap member function.
-
-*  Description:
-*     This function stores value for additional conversion arguments,
-*     based on the values supplied for the user arguments.
-
-*  Parameters:
-*     cvttype
-*        The conversion type.
-*     cvtargs
-*        The arguments for the conversion.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   double r;                     /* Distance from Earth axis (AU) */
-   double z;                     /* Distance from plane of Earth equator (AU) */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Test for each valid code value in turn and assign the appropriate
-   extra values. */
-   switch ( cvttype ) {
-
-   case AST__MJDTOMJD:
-      cvtargs[ 2 ] = cvtargs[ 0 ] - cvtargs[ 1 ];
-      break;
-
-   case AST__MJDTOJD:
-      cvtargs[ 2 ] = cvtargs[ 0 ] - cvtargs[ 1 ] + 2400000.5;
-      break;
-
-   case AST__JDTOMJD:
-      cvtargs[ 2 ] = cvtargs[ 0 ] - cvtargs[ 1 ] - 2400000.5;
-      break;
-
-   case AST__MJDTOBEP:
-      cvtargs[ 2 ] = palSlaEpb( cvtargs[ 0 ] ) - palSlaEpb( 0.0 ) - cvtargs[ 1 ];
-      cvtargs[ 3 ] = palSlaEpb2d( cvtargs[ 1 ] ) - palSlaEpb2d( 0.0 ) - cvtargs[ 0 ];
-      break;
-
-   case AST__BEPTOMJD:
-      cvtargs[ 2 ] = palSlaEpb2d( cvtargs[ 0 ] ) - palSlaEpb2d( 0.0 ) - cvtargs[ 1 ];
-      cvtargs[ 3 ] = palSlaEpb( cvtargs[ 1 ] ) - palSlaEpb( 0.0 ) - cvtargs[ 0 ];
-      break;
-
-   case AST__MJDTOJEP:
-      cvtargs[ 2 ] = palSlaEpj( cvtargs[ 0 ] ) - palSlaEpj( 0.0 ) - cvtargs[ 1 ];
-      cvtargs[ 3 ] = palSlaEpj2d( cvtargs[ 1 ] ) - palSlaEpj2d( 0.0 ) - cvtargs[ 0 ];
-      break;
-
-   case AST__JEPTOMJD:
-      cvtargs[ 2 ] = palSlaEpj2d( cvtargs[ 0 ] ) - palSlaEpj2d( 0.0 ) - cvtargs[ 1 ];
-      cvtargs[ 3 ] = palSlaEpj( cvtargs[ 1 ] ) - palSlaEpj( 0.0 ) - cvtargs[ 0 ];
-      break;
-
-   case AST__TTTOTDB:
-      palSlaGeoc( cvtargs[ 2 ], cvtargs[ 3 ], &r, &z );      
-      cvtargs[ 4 ] = 0.001*r*AST__AU;
-      cvtargs[ 5 ] = 0.001*z*AST__AU;
-      break;
-
-   case AST__TDBTOTT:
-      palSlaGeoc( cvtargs[ 2 ], cvtargs[ 3 ], &r, &z );      
-      cvtargs[ 4 ] = 0.001*r*AST__AU;
-      cvtargs[ 5 ] = 0.001*z*AST__AU;
-      break;
-
-   case AST__TDBTOTCB:
-      cvtargs[ 1 ] = LB*( cvtargs[ 0 ] - (TTOFF/SPD) 
-                                        - 43144.0 ) + P0/SPD;
-      break;
-
-   case AST__TCBTOTDB:
-      cvtargs[ 1 ] = LB*( cvtargs[ 0 ] - (TTOFF/SPD) 
-                                        - 43144.0 ) + P0/SPD;
-      break;
-
-   case AST__TTTOTCG:
-      cvtargs[ 1 ] = LG*( cvtargs[ 0 ] - (TTOFF/SPD) - 43144.0 );
-      break;
-
-   case AST__TCGTOTT:
-      cvtargs[ 1 ] = LG*( cvtargs[ 0 ] - (TTOFF/SPD) - 43144.0 );
-      break;
-
-   }         
-}
-
-static void AddTimeCvt( AstTimeMap *this, int cvttype, const double *args, int *status ) {
-/*
-*  Name:
-*     AddTimeCvt
-
-*  Purpose:
-*     Add a coordinate conversion step to an TimeMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     void AddTimeCvt( AstTimeMap *this, int cvttype, const double *args )
-
-*  Class Membership:
-*     TimeMap member function.
-
-*  Description:
-*     This function allows one of the supported time coordinate
-*     conversions to be appended to a TimeMap. When a TimeMap is first
-*     created (using astTimeMap), it simply performs a unit mapping. By
-*     using AddTimeCvt repeatedly, a series of coordinate conversions may
-*     then be specified which the TimeMap will subsequently perform in
-*     sequence. This allows a complex coordinate conversion to be
-*     assembled out of the basic building blocks. The TimeMap will also
-*     perform the inverse coordinate conversion (applying the individual
-*     conversion steps in reverse) if required.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeMap.
-*     cvttype
-*        A code to identify which time coordinate conversion is to be
-*        appended.  See the "Coordinate Conversions" section for details 
-*        of those available.
-*     args
-*        Pointer to an array of double containing the argument values
-*        required to fully specify the required coordinate
-*        conversion. The number of arguments depends on the conversion
-*        (see the "Coordinate Conversions" section for details). This 
-*        value is ignored and may be NULL if no arguments are required.
-
-*  Returned Value:
-*     void.
-
-*  Coordinate Conversions:
-*     The following values may be supplied for the "cvttype" parameter
-*     in order to specify the coordinate conversion to be performed.
-*     The argument(s) required to fully specify each conversion are
-*     indicated in parentheses after each value, and described at the end
-*     of the list. Values for these should be given in the array pointed 
-*     at by "args". 
-*
-*        AST__MJDTOMJD( MJDOFF1, MJDOFF2 )
-*           Convert Modified Julian Date from one offset to another.
-*        AST__MJDTOJD( MJDOFF, JDOFF )
-*           Convert Modified Julian Date to Julian Date.
-*        AST__JDTOMJD( JDOFF, MJDOFF )
-*           Convert Julian Date to Modified Julian Date.
-*        AST__MJDTOBEP( MJDOFF, BEPOFF )
-*           Convert Modified Julian Date to Besselian epoch.
-*        AST__BEPTOMJD( BEPOFF, MJDOFF )
-*           Convert Besselian epoch to Modified Julian Date.
-*        AST__MJDTOJEP( MJDOFF, JEPOFF )
-*           Convert Modified Julian Date to Julian epoch.
-*        AST__JEPTOMJD( JEPOFF, MJDOFF )
-*           Convert Julian epoch to Modified Julian Date.
-*        AST__TAITOUTC( MJDOFF )
-*           Convert a TAI MJD to a UTC MJD.
-*        AST__UTCTOTAI( MJDOFF )
-*           Convert a UTC MJD to a TAI MJD.
-*        AST__TAITOTT( MJDOFF )
-*           Convert a TAI MJD to a TT MJD.
-*        AST__TTTOTAI( MJDOFF )
-*           Convert a TT MJD to a TAI MJD.
-*        AST__TTTOTDB( MJDOFF, OBSLON, OBSLAT, OBSALT )
-*           Convert a TT MJD to a TDB MJD.
-*        AST__TDBTOTT( MJDOFF, OBSLON, OBSLAT, OBSALT )
-*           Convert a TDB MJD to a TT MJD.
-*        AST__TTTOTCG( MJDOFF )
-*           Convert a TT MJD to a TCG MJD.
-*        AST__TCGTOTT( MJDOFF )
-*           Convert a TCG MJD to a TT MJD.
-*        AST__TDBTOTCB( MJDOFF)
-*           Convert a TAI MJD to a TCB MJD.
-*        AST__TCBTOTDB( MJDOFF)
-*           Convert a TCB MJD to a TDB MJD.
-*        AST__UTTOGMST( MJDOFF )
-*           Convert a UT MJD to a GMST MJD.
-*        AST__GMSTTOUT( MJDOFF )
-*           Convert a GMST MJD to a UT MJD.
-*        AST__GMSTTOLMST( MJDOFF, OBSLON, OBSLAT )
-*           Convert a GMST MJD to a LMST MJD.
-*        AST__LMSTTOGMST( MJDOFF, OBSLON, OBSLAT )
-*           Convert a LMST MJD to a GMST MJD.
-*        AST__LASTTOLMST( MJDOFF, OBSLON, OBSLAT )
-*           Convert a LAST MJD to a LMST MJD.
-*        AST__LMSTTOLAST( MJDOFF, OBSLON, OBSLAT )
-*           Convert a LMST MJD to a LAST MJD.
-*        AST__UTTOUTC( DUT1 )
-*           Convert a UT1 MJD to a UTC MJD.
-*        AST__UTCTOUT( DUT1 )
-*           Convert a UTC MJD to a UT1 MJD.
-*        AST__LTTOUTC( LTOFF )
-*           Convert a local time MJD to a UTC MJD.
-*        AST__UTCTOLT( LTOFF )
-*           Convert a UTC MJD to a local time MJD.
-*
-*     The units for the values processed by the above conversions are as
-*     follows: 
-*
-*     - MJD, MJDOFF, JD, JDOFF: days
-*     - Julian epochs, BEPOFF: Tropical years
-*     - Besselian epochs, JEPOFF: Julian years
-*
-*     The arguments used in the above conversions are as follows:
-*
-*     - MJDOFF: Offset to be added to each MJD value
-*     - JDOFF: Offset to be added to each JD value
-*     - JEPOFF: Offset to be added to each Julian epoch value
-*     - BEPOFF: Offset to be added to each Besselian epoch value
-*     - OBSLON: Observer's longitude in radians (+ve westwards)
-*     - OBSLAT: Observer's geodetic latitude in radians (+ve northwards)
-*     - OBSALT: Observer's geodetic altitude in metres.
-*     - DUT1: The value of UT1-UTC
-*     - LTOFF: The offset between Local Time and UTC (in hours, positive 
-*     for time zones east of Greenwich).
-
-*  Notes:
-*     - The specified conversion is appended only if the TimeMap's
-*     Invert attribute is zero. If it is non-zero, this function
-*     effectively prefixes the inverse of the conversion specified
-*     instead.
-*/
-
-/* Local Variables: */
-   const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   const char *cvt_string;       /* Pointer to conversion type string */
-   int i;                        /* Argument index */
-   int nargs;                    /* Number of user-supplied arguments */
-   int ncvt;                     /* Number of coordinate conversions */
-   int szargs;                   /* Size of arguments array */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Validate the coordinate conversion type and obtain the number of
-   required user-supplied arguments, and the size of the array in which
-   to put the user-supplied arguments (the array may leave room after
-   the user-supplied arguments for various useful pre-calculated values). */
-   cvt_string = CvtString( cvttype, &comment, &nargs, &szargs, argdesc, status );
-
-/* If the coordinate conversion type was not valid, then report an
-   error. */
-   if ( astOK && !cvt_string ) {
-      astError( AST__TIMIN, "AddTimeCvt(%s): Invalid time coordinate "
-                "conversion type (%d).", status, astGetClass( this ),    
-                (int) cvttype );
-   }
-
-/* Note the number of coordinate conversions already stored in the TimeMap. */
-   if ( astOK ) {
-      ncvt = this->ncvt;
-
-/* Extend the array of conversion types and the array of pointers to
-   their argument lists to accommodate the new one. */
-      this->cvttype = (int *) astGrow( this->cvttype, ncvt + 1,
-                                       sizeof( int ) );
-      this->cvtargs = (double **) astGrow( this->cvtargs, ncvt + 1,
-                                           sizeof( double * ) );
-
-/* Allocate memory for the argument list, putting a pointer to it into 
-   the TimeMap. */
-      this->cvtargs[ ncvt ] = astMalloc( sizeof( double ) * (size_t) szargs );
-
-/* Store the conversion type and increment the conversion count. Also
-   copy the supplied arguments into the memory allocated above and put
-   suitable values in any elements of the argument array which are beyond
-   the end of the user-supplied arguments. These are intermediate values 
-   calculated on the basis of the user-supplied arguments. */
-      if ( astOK ) {
-         this->cvttype[ ncvt ] = cvttype;
-         for( i = 0; i < nargs; i++ ) this->cvtargs[ ncvt ][ i ] = args[ i ];
-         for( i = nargs; i < szargs; i++ ) this->cvtargs[ ncvt ][ i ] = AST__BAD;
-         this->ncvt++;
-
-/* Test for each valid code value in turn and assign the appropriate extra values. */
-         AddArgs( cvttype, this->cvtargs[ ncvt ], status );
-      }
-   }
-}
-
-static int CvtCode( const char *cvt_string, int *status ) {
-/*
-*  Name:
-*     CvtCode
-
-*  Purpose:
-*     Convert a conversion type from a string representation to a code value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     int CvtCode( const char *cvt_string, int *status )
-
-*  Class Membership:
-*     TimeMap member function.
-
-*  Description:
-*     This function accepts a string used to repersent one of the
-*     TimeMap coordinate conversions and converts it into a code
-*     value for internal use.
-
-*  Parameters:
-*     cvt_string
-*        Pointer to a constant null-terminated string representing a
-*        time coordinate conversion. This is case sensitive and should
-*        contain no unnecessary white space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The equivalent conversion code. If the string was not
-*     recognised, the code AST__TIME_NULL is returned, without error.
-
-*  Notes:
-*     - A value of AST__TIME_NULL will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = AST__TIME_NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Test the string against each recognised value in turn and assign
-   the result. */
-   if ( astChrMatch( cvt_string, "MJDTOJD" ) ) {
-      result = AST__MJDTOJD;
-
-   } else if ( astChrMatch( cvt_string, "MJDTOMJD" ) ) {
-      result = AST__MJDTOMJD;
-
-   } else if ( astChrMatch( cvt_string, "JDTOMJD" ) ) {
-      result = AST__JDTOMJD;
-
-   } else if ( astChrMatch( cvt_string, "JDTOMJD" ) ) { 
-      result = AST__JDTOMJD; 
-
-   } else if ( astChrMatch( cvt_string, "MJDTOBEP" ) ) { 
-      result = AST__MJDTOBEP; 
-
-   } else if ( astChrMatch( cvt_string, "BEPTOMJD" ) ) { 
-      result = AST__BEPTOMJD; 
-
-   } else if ( astChrMatch( cvt_string, "MJDTOJEP" ) ) { 
-      result = AST__MJDTOJEP; 
-
-   } else if ( astChrMatch( cvt_string, "JEPTOMJD" ) ) { 
-      result = AST__JEPTOMJD; 
-
-   } else if ( astChrMatch( cvt_string, "TAITOUTC" ) ) { 
-      result = AST__TAITOUTC; 
-
-   } else if ( astChrMatch( cvt_string, "UTCTOTAI" ) ) { 
-      result = AST__UTCTOTAI; 
-
-   } else if ( astChrMatch( cvt_string, "TAITOTT" ) ) { 
-      result = AST__TAITOTT; 
-
-   } else if ( astChrMatch( cvt_string, "TTTOTAI" ) ) { 
-      result = AST__TTTOTAI; 
-
-   } else if ( astChrMatch( cvt_string, "TTTOTDB" ) ) { 
-      result = AST__TTTOTDB; 
-
-   } else if ( astChrMatch( cvt_string, "TDBTOTT" ) ) { 
-      result = AST__TDBTOTT; 
-
-   } else if ( astChrMatch( cvt_string, "TTTOTCG" ) ) { 
-      result = AST__TTTOTCG; 
-
-   } else if ( astChrMatch( cvt_string, "TCGTOTT" ) ) { 
-      result = AST__TCGTOTT; 
-
-   } else if ( astChrMatch( cvt_string, "TDBTOTCB" ) ) { 
-      result = AST__TDBTOTCB; 
-
-   } else if ( astChrMatch( cvt_string, "TCBTOTDB" ) ) { 
-      result = AST__TCBTOTDB; 
-
-   } else if ( astChrMatch( cvt_string, "UTTOGMST" ) ) { 
-      result = AST__UTTOGMST; 
-
-   } else if ( astChrMatch( cvt_string, "GMSTTOUT" ) ) { 
-      result = AST__GMSTTOUT; 
-
-   } else if ( astChrMatch( cvt_string, "GMSTTOLMST" ) ) { 
-      result = AST__GMSTTOLMST; 
-
-   } else if ( astChrMatch( cvt_string, "LMSTTOGMST" ) ) { 
-      result = AST__LMSTTOGMST; 
-
-   } else if ( astChrMatch( cvt_string, "LASTTOLMST" ) ) { 
-      result = AST__LASTTOLMST; 
-
-   } else if ( astChrMatch( cvt_string, "LMSTTOLAST" ) ) { 
-      result = AST__LMSTTOLAST; 
-
-   } else if ( astChrMatch( cvt_string, "UTTOUTC" ) ) { 
-      result = AST__UTTOUTC;    
-
-   } else if ( astChrMatch( cvt_string, "UTCTOUT" ) ) { 
-      result = AST__UTCTOUT;    
-
-   } else if ( astChrMatch( cvt_string, "LTTOUTC" ) ) { 
-      result = AST__LTTOUTC;    
-
-   } else if ( astChrMatch( cvt_string, "UTCTOLT" ) ) { 
-      result = AST__UTCTOLT;    
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *CvtString( int cvt_code, const char **comment,
-                              int *nargs, int *szargs,
-                              const char *arg[ MAX_ARGS ], int *status ) {
-/*
-*  Name:
-*     CvtString
-
-*  Purpose:
-*     Convert a conversion type from a code value to a string representation.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     const char *CvtString( int cvt_code, const char **comment, int *nargs, 
-*                            int *szargs, const char *arg[ MAX_ARGS ], int *status )
-
-*  Class Membership:
-*     TimeMap member function.
-
-*  Description:
-*     This function accepts a code value used to represent one of the
-*     TimeMap coordinate conversions and converts it into an
-*     equivalent string representation. It also returns a descriptive
-*     comment and information about the arguments required in order to
-*     perform the conversion.
-
-*  Parameters:
-*     cvt_code
-*        The conversion code.
-*     comment
-*        Address of a location to return a pointer to a constant
-*        null-terminated string containing a description of the
-*        conversion.
-*     nargs
-*        Address of an int in which to return the number of arguments
-*        required from the user in order to perform the conversion (may 
-*        be zero).
-*     szargs
-*        Address of an int in which to return the number of arguments
-*        associated with the conversion. This may be bigger than "nargs"
-*        if the conversion can pre-calculate useful values on the basis
-*        of the user-supplied values. Such precalculated values are
-*        stored after the last user-supplied argument.
-*     arg
-*        An array in which to return a pointer to a constant
-*        null-terminated string for each argument (above) containing a
-*        description of what each argument represents. This includes both
-*        user-supplied arguments and pre-calculated values.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a constant null-terminated string representation of
-*     the conversion code value supplied. If the code supplied is not
-*     valid, a NULL pointer will be returned, without error.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set, or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   const char *result;          /* Result pointer to return */
-
-/* Initialise the returned values. */
-   *comment = NULL;
-   *nargs = 0;
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-      
-/* Test for each valid code value in turn and assign the appropriate
-   return values. */
-   switch ( cvt_code ) {
-
-   case AST__MJDTOMJD:
-      *comment = "Convert MJD between offsets";
-      result = "MJDTOMJD";
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "Input MJD offset";
-      arg[ 1 ] = "Output MJD offset";
-      arg[ 2 ] = "Combined offset";
-      break;
-
-   case AST__MJDTOJD:
-      *comment = "Convert MJD to JD";
-      result = "MJDTOJD";
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "JD offset";
-      arg[ 2 ] = "Combined offset";
-      break;
-
-   case AST__JDTOMJD:
-      *comment = "Convert JD to MJD";
-      result = "JDTOMJD";
-      *nargs = 2;
-      *szargs = 3;
-      arg[ 0 ] = "JD offset";
-      arg[ 1 ] = "MJD offset";
-      arg[ 2 ] = "Combined offset";
-      break;
-
-   case AST__MJDTOBEP:
-      *comment = "Convert MJD to Besselian epoch";
-      result = "MJDTOBEP";
-      *nargs = 2;
-      *szargs = 4;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Besselian epoch offset";
-      arg[ 2 ] = "Combined forward offset";
-      arg[ 3 ] = "Combined inverse offset";
-      break;
-
-   case AST__BEPTOMJD:
-      *comment = "Convert Besselian epoch to MJD";
-      result = "BEPTOMJD";
-      *nargs = 2;
-      *szargs = 4;
-      arg[ 0 ] = "Besselian epoch offset";
-      arg[ 1 ] = "MJD offset";
-      arg[ 2 ] = "Combined forward offset";
-      arg[ 3 ] = "Combined inverse offset";
-      break;
-
-   case AST__MJDTOJEP:
-      *comment = "Convert MJD to Julian epoch";
-      result = "MJDTOJEP";
-      *nargs = 2;
-      *szargs = 4;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Julian epoch offset";
-      arg[ 2 ] = "Combined forward offset";
-      arg[ 3 ] = "Combined inverse offset";
-      break;
-
-   case AST__JEPTOMJD:
-      *comment = "Convert Julian epoch to MJD";
-      result = "JEPTOMJD";
-      *nargs = 2;
-      *szargs = 4;
-      arg[ 0 ] = "Julian epoch offset";
-      arg[ 1 ] = "MJD offset";
-      arg[ 2 ] = "Combined forward offset";
-      arg[ 3 ] = "Combined inverse offset";
-      break;
-
-   case AST__TAITOUTC:
-      *comment = "Convert TAI to UTC";
-      result = "TAITOUTC";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "MJD offset";
-      break;
-
-   case AST__UTCTOTAI:
-      *comment = "Convert UTC to TAI";
-      result = "UTCTOTAI";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "MJD offset";
-      break;
-
-   case AST__TAITOTT:
-      *comment = "Convert TAI to TT";
-      result = "TAITOTT";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "MJD offset";
-      break;
-
-   case AST__TTTOTAI:
-      *comment = "Convert TT to TAI";
-      result = "TTTOTAI";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "MJD offset";
-      break;
-
-   case AST__TTTOTDB:
-      *comment = "Convert TT to TDB";
-      result = "TTTOTDB";
-      *nargs = 4;
-      *szargs = 6;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Observer longitude";
-      arg[ 2 ] = "Observer latitude";
-      arg[ 3 ] = "Observer altitude";
-      arg[ 4 ] = "Distance from earth spin axis";
-      arg[ 5 ] = "Distance north of equatorial plane";
-      break;
-
-   case AST__TDBTOTT:
-      *comment = "Convert TDB to TT";
-      result = "TDBTOTT";
-      *nargs = 4;
-      *szargs = 6;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Observer longitude";
-      arg[ 2 ] = "Observer latitude";
-      arg[ 3 ] = "Observer altitude";
-      arg[ 4 ] = "Distance from earth spin axis";
-      arg[ 5 ] = "Distance north of equatorial plane";
-      break;
-
-   case AST__TTTOTCG:
-      *comment = "Convert TT to TCG";
-      result = "TTTOTCG";
-      *nargs = 1;
-      *szargs = 2;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "TCG offset";
-      break;
-
-   case AST__TCGTOTT:
-      *comment = "Convert TCG to TT";
-      result = "TCGTOTT";
-      *nargs = 1;
-      *szargs = 2;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "TCG offset";
-      break;
-
-   case AST__TDBTOTCB:
-      *comment = "Convert TDB to TCB";
-      result = "TDBTOTCB";
-      *nargs = 1;
-      *szargs = 2;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "TCB offset";
-      break;
-
-   case AST__TCBTOTDB:
-      *comment = "Convert TCB to TDB";
-      result = "TCBTOTDB";
-      *nargs = 1;
-      *szargs = 2;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "TCB offset";
-      break;
-
-   case AST__UTTOGMST:
-      *comment = "Convert UT to GMST";
-      result = "UTTOGMST";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "MJD offset";
-      break;
-
-   case AST__GMSTTOUT:
-      *comment = "Convert GMST to UT";
-      result = "GMSTTOUT";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "MJD offset";
-      break;
-
-   case AST__GMSTTOLMST:
-      *comment = "Convert GMST to LMST";
-      result = "GMSTTOLMST";
-      *nargs = 3;
-      *szargs = 3;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Observer longitude";
-      arg[ 2 ] = "Observer latitude";
-      break;
-
-   case AST__LMSTTOGMST:
-      *comment = "Convert LMST to GMST";
-      result = "LMSTTOGMST";
-      *nargs = 3;
-      *szargs = 3;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Observer longitude";
-      arg[ 2 ] = "Observer latitude";
-      break;
-
-   case AST__LASTTOLMST:
-      *comment = "Convert LAST to LMST";
-      result = "LASTTOLMST";
-      *nargs = 3;
-      *szargs = 3;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Observer longitude";
-      arg[ 2 ] = "Observer latitude";
-      break;
-
-   case AST__LMSTTOLAST:
-      *comment = "Convert LMST to LAST";
-      result = "LMSTTOLAST";
-      *nargs = 3;
-      *szargs = 3;
-      arg[ 0 ] = "MJD offset";
-      arg[ 1 ] = "Observer longitude";
-      arg[ 2 ] = "Observer latitude";
-      break;
-
-   case AST__UTTOUTC:
-      *comment = "Convert UT1 to UTC";
-      result = "UTTOUTC";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "DUT1";
-      break;
-
-   case AST__UTCTOUT:
-      *comment = "Convert UTC to UT1";
-      result = "UTCTOUT";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "DUT1";
-      break;
-
-   case AST__LTTOUTC:
-      *comment = "Convert Local Time to UTC";
-      result = "LTTOUTC";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "LTOFF";
-      break;
-
-   case AST__UTCTOLT:
-      *comment = "Convert UTC to Local Time";
-      result = "UTCTOLT";
-      *nargs = 1;
-      *szargs = 1;
-      arg[ 0 ] = "LTOFF";
-      break;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-double astDat_( double in, int forward, int *status ){
-/*
-*+
-*  Name:
-*     Dat
-
-*  Purpose:
-*     Convert between UTC and TAI.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     double astDat( double in, int forward )
-
-*  Class Membership:
-*     TimeMap member function 
-
-*  Description:
-*     This function returns the difference between Coordinated Universal Time 
-*     (UTC) and International Atomic Time (TAI), at a given epoch.
-
-*  Parameters:
-*     in
-*        UTC date or TAI time (as selected by "forward"), as an absolute 
-*        MJD.
-*     forward
-*        If non-zero, "in" should be a UTC value, and the returned value
-*        is TAI-UTC. If zero, "in" should be a TAI value, and the returned 
-*        value is UTC-TAI.
-
-*  Returned Value:
-*     Either UTC-TAI or TAI-UTC (as indicated by "forward") in units of
-*     seconds.
-
-*  Notes:
-*     - The UTC is specified to be a date rather than a time to indicate
-*     that care needs to be taken not to specify an instant which lies
-*     within a leap second.  Though in most cases UTC can include the
-*     fractional part, correct behaviour on the day of a leap second
-*     can only be guaranteed up to the end of the second 23:59:59.
-*     - For epochs from 1961 January 1 onwards, the expressions from the
-*     file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used.
-*     - The 5ms time step at 1961 January 1 is taken from 2.58.1 (p87) of
-*     the 1992 Explanatory Supplement.
-*     - UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper
-*     to call the routine with an earlier epoch.  However, if this
-*     is attempted, the TAI-UTC expression for the year 1960 is used.
-
-*  Implementation Details:
-*     - This function is based on SLA_DAT by P.T.Wallace.
-*     - This routine must be updated on each occasion that a leap second is
-*     announced
-*     - Latest leap second:  2009 January 1
-
-*-
-*/
-
-/* Local Variables: */
-   double result;
-
-/* Initialise the returned value. */
-   if( in == AST__BAD ) return AST__BAD;
-
-/* First do TAI-UTC at a given UTC 
-   ------------------------------- */
-   if( forward ) {
-
-/* 2009 January 1 */
-      if ( in >= 54832.0 ) {
-         result = 34.0;
-
-/* 2006 January 1 */
-      } else if( in >= 53736.0 ) {
-         result = 33.0;
-
-/* 1999 January 1 */
-      } else if( in >= 51179.0 ){
-         result = 32.0;
-
-/* 1997 July 1 */
-      } else if( in >= 50630.0 ){
-         result = 31.0;
-
-/* 1996 January 1 */
-      } else if( in >= 50083.0 ){
-         result = 30.0;
-
-/* 1994 July 1 */
-      } else if( in >= 49534.0 ){
-         result = 29.0;
-
-/* 1993 July 1 */
-      } else if( in >= 49169.0 ){
-         result = 28.0;
-
-/* 1992 July 1 */
-      } else if( in >= 48804.0 ){
-         result = 27.0;
-
-/* 1991 January 1 */
-      } else if( in >= 48257.0 ){
-         result = 26.0;
-
-/* 1990 January 1 */
-      } else if( in >= 47892.0 ){
-         result = 25.0;
-
-/* 1988 January 1 */
-      } else if( in >= 47161.0 ){
-         result = 24.0;
-
-/* 1985 July 1 */
-      } else if( in >= 46247.0 ){
-         result = 23.0;
-
-/* 1983 July 1 */
-      } else if( in >= 45516.0 ){
-         result = 22.0;
-
-/* 1982 July 1 */
-      } else if( in >= 45151.0 ){
-         result = 21.0;
-
-/* 1981 July 1 */
-      } else if( in >= 44786.0 ){
-         result = 20.0;
-
-/* 1980 January 1 */
-      } else if( in >= 44239.0 ){
-         result = 19.0;
-
-/* 1979 January 1 */
-      } else if( in >= 43874.0 ){
-         result = 18.0;
-
-/* 1978 January 1 */
-      } else if( in >= 43509.0 ){
-         result = 17.0;
-
-/* 1977 January 1 */
-      } else if( in >= 43144.0 ){
-         result = 16.0;
-
-/* 1976 January 1 */
-      } else if( in >= 42778.0 ){
-         result = 15.0;
-
-/* 1975 January 1 */
-      } else if( in >= 42413.0 ){
-         result = 14.0;
-
-/* 1974 January 1 */
-      } else if( in >= 42048.0 ){
-         result = 13.0;
-
-/* 1973 January 1 */
-      } else if( in >= 41683.0 ){
-         result = 12.0;
-
-/* 1972 July 1 */
-      } else if( in >= 41499.0 ){
-         result = 11.0;
-
-/* 1972 January 1 */
-      } else if( in >= 41317.0 ){
-         result = 10.0;
-
-/* 1968 February 1 */
-      } else if( in >= 39887.0 ){
-         result = 4.2131700 + ( in - 39126.0 )*0.002592;
-
-/* 1966 January 1 */
-      } else if( in >= 39126.0 ){
-         result = 4.3131700 + ( in - 39126.0 )*0.002592;
-
-/* 1965 September 1 */
-      } else if( in >= 39004.0 ){
-         result = 3.8401300 + ( in - 38761.0 )*0.001296;
-
-/* 1965 July 1 */
-      } else if( in >= 38942.0 ){
-         result = 3.7401300 + ( in - 38761.0 )*0.001296;
-
-/* 1965 March 1 */
-      } else if( in >= 38820.0 ){
-         result = 3.6401300 + ( in - 38761.0 )*0.001296;
-
-/* 1965 January 1 */
-      } else if( in >= 38761.0 ){
-         result = 3.5401300 + ( in - 38761.0 )*0.001296;
-
-/* 1964 September 1 */
-      } else if( in >= 38639.0 ){
-         result = 3.4401300 + ( in - 38761.0 )*0.001296;
-
-/* 1964 April 1 */
-      } else if( in >= 38486.0 ){
-         result = 3.3401300 + ( in - 38761.0 )*0.001296;
-
-/* 1964 January 1 */
-      } else if( in >= 38395.0 ){
-         result = 3.2401300 + ( in - 38761.0 )*0.001296;
-
-/* 1963 November 1 */
-      } else if( in >= 38334.0 ){
-         result = 1.9458580 + ( in - 37665.0 )*0.0011232;
-
-/* 1962 January 1 */
-      } else if( in >= 37665.0 ){
-         result = 1.8458580 + ( in - 37665.0 )*0.0011232;
-
-/* 1961 August 1 */
-      } else if( in >= 37512.0 ){
-         result = 1.3728180 + ( in - 37300.0 )*0.001296;
-
-/* 1961 January 1 */
-      } else if( in >= 37300.0 ){
-         result = 1.4228180 + ( in - 37300.0 )*0.001296;
-
-/* Before that */
-      } else {
-         result = 1.4178180 + ( in - 37300.0 )*0.001296;
-      }
-
-/* Now do UTC-TAI at a given TAI. 
-   ------------------------------  */
-   } else {
-
-
-/* 2009 January 1 */
-      if( in >= 54832.0 + 34.0/SPD ) {
-         result = -34.0;
-
-/* 2006 January 1 */
-      } else if( in >= 53736.0 + 33.0/SPD ){
-         result = -33.0;
-
-/* 1999 January 1 */
-      } else if( in >= 51179.0 + 32.0/SPD ){
-         result = -32.0;
-
-/* 1997 July 1 */
-      } else if( in >= 50630.0 + 31.0/SPD ){
-         result = -31.0;
-
-/* 1996 January 1 */
-      } else if( in >= 50083.0 + 30.0/SPD ){
-         result = -30.0;
-
-/* 1994 July 1 */
-      } else if( in >= 49534.0 + 29.0/SPD ){
-         result = -29.0;
-
-/* 1993 July 1 */
-      } else if( in >= 49169.0 + 28.0/SPD ){
-         result = -28.0;
-
-/* 1992 July 1 */
-      } else if( in >= 48804.0 + 27.0/SPD ){
-         result = -27.0;
-
-/* 1991 January 1 */
-      } else if( in >= 48257.0 + 26.0/SPD ){
-         result = -26.0;
-
-/* 1990 January 1 */
-      } else if( in >= 47892.0 + 25.0/SPD ){
-         result = -25.0;
-
-/* 1988 January 1 */
-      } else if( in >= 47161.0 + 24.0/SPD ){
-         result = -24.0;
-
-/* 1985 July 1 */
-      } else if( in >= 46247.0 + 23.0/SPD ){
-         result = -23.0;
-
-/* 1983 July 1 */
-      } else if( in >= 45516.0 + 22.0/SPD ){
-         result = -22.0;
-
-/* 1982 July 1 */
-      } else if( in >= 45151.0 + 21.0/SPD ){
-         result = -21.0;
-
-/* 1981 July 1 */
-      } else if( in >= 44786.0 + 20.0/SPD ){
-         result = -20.0;
-
-/* 1980 January 1 */
-      } else if( in >= 44239.0 + 19.0/SPD ){
-         result = -19.0;
-
-/* 1979 January 1 */
-      } else if( in >= 43874.0 + 18.0/SPD ){
-         result = -18.0;
-
-/* 1978 January 1 */
-      } else if( in >= 43509.0 + 17.0/SPD ){
-         result = -17.0;
-
-/* 1977 January 1 */
-      } else if( in >= 43144.0 + 16.0/SPD ){
-         result = -16.0;
-
-/* 1976 January 1 */
-      } else if( in >= 42778.0 + 15.0/SPD ){
-         result = -15.0;
-
-/* 1975 January 1 */
-      } else if( in >= 42413.0 + 14.0/SPD ){
-         result = -14.0;
-
-/* 1974 January 1 */
-      } else if( in >= 42048.0 + 13.0/SPD ){
-         result = -13.0;
-
-/* 1973 January 1 */
-      } else if( in >= 41683.0 + 12.0/SPD ){
-         result = -12.0;
-
-/* 1972 July 1 */
-      } else if( in >= 41499.0 + 11.0/SPD ){
-         result = -11.0;
-
-/* 1972 January 1 */
-      } else if( in >= 41317.0 + 10.0/SPD ){
-         result = -10.0;
-
-/* 1968 February 1 */
-      } else if( in >= 39887.0 + ( 4.2131700 
-                                  + ( 39887.0 - 39126.0 )*0.002592 )/SPD ){
-         result = -( 4.2131700 + ( in - 39126.0 )*0.002592 )/1.02592;
-
-/* 1966 January 1 */
-      } else if( in >= 39126.0 + ( 4.3131700
-                                  + ( 39126.0 - 39126.0 )*0.002592 )/SPD ){
-         result = -( 4.2131700 + ( in - 39126.0 )*0.002592 )/1.02592;
-
-/* 1965 September 1 */
-      } else if( in >= 39004.0 + ( 3.8401300
-                                  + ( 39004.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.8401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1965 July 1 */
-      } else if( in >= 38942.0 + ( 3.7401300
-                                  + ( 38942.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.7401300 + ( in - 38761.0 )*0.001296 )/1.01296;
-
-/* 1965 March 1 */
-      } else if( in >= 38820.0 + ( 3.6401300
-                                  + ( 38820.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.6401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1965 January 1 */
-      } else if( in >= 38761.0 + ( 3.5401300
-                                   + ( 38761.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.5401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1964 September 1 */
-      } else if( in >= 38639.0 + ( 3.4401300
-                                   + ( 38639.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.4401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1964 April 1 */
-      } else if( in >= 38486.0 + ( 3.3401300
-                                   + ( 38486.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.3401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1964 January 1 */
-      } else if( in >= 38395.0 + ( 3.2401300
-                                   + ( 38395.0 - 38761.0 )*0.001296 )/SPD ){
-         result = -( 3.2401300 + ( in - 38761.0 )*0.001296 )/1.001296;
-
-/* 1963 November 1 */
-      } else if( in >= 38334.0 + ( 1.9458580
-                                   + ( 38334.0 - 37665.0 )*0.0011232 )/SPD ){
-         result = -( 1.9458580 + ( in - 37665.0 )*0.0011232 )/1.0011232;
-
-/* 1962 January 1 */
-      } else if( in >= 37665.0 + ( 1.8458580
-                                   + ( 37665.0 - 37665.0 )*0.0011232 )/SPD ){
-         result = -( 1.8458580 + ( in - 37665.0 )*0.0011232 )/1.0011232;
-
-/* 1961 August 1 */
-      } else if( in >= 37512.0 + ( 1.3728180
-                                   + ( 37512.0 - 37300.0 )*0.001296 )/SPD ){
-         result = -( 1.3728180 + ( in - 37300.0 )*0.001296 )/1.001296;
-
-/* 1961 January 1 */
-      } else if( in >= 37300.0 + ( 1.4228180
-                                   + ( 37300.0 - 37300.0 )*0.001296 )/SPD ){
-         result = -( 1.4228180 + ( in - 37300.0 )*0.001296 )/1.001296;
-
-/* Before that */
-      } else {
-         result = -( 1.4178180 + ( in - 37300.0 )*0.001296 )/1.001296;
-      }
-   }
-
-/* Return the result */
-   return result;
-}
-
-static double Gmsta( double in, double off, int forward, int *status ){
-/*
-*  Name:
-*     Gmsta
-
-*  Purpose:
-*     Convert between  Universal Time (UT) and Greenwich Mean Sidereal Time (GMST).
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     double Gmsta( double in, double off, int forward, int *status ){
-
-*  Class Membership:
-*     TimeMap member function 
-
-*  Description:
-*     This functions converts between UT and GMST. Both timescales are
-*     represented by an MJD, rather than as an angle (as is done by SLALIB) 
-*     in order to facilitate conversions from GMST to UT1. This means
-*     that whole days are retained.
-
-*  Parameters:
-*     in
-*        The time to convert, represented as an offset in days from the MJD 
-*        zero-point specified by "off". The time is either UT1 or GMST, as
-*        selected by "forward").
-*     off
-*        The MJD value corresponding to a value of 0.0 for "in".
-*     forward
-*        If non-zero, "in" should be a UT1 value, and the returned value
-*        is GMST. If zero, "in" should be a GMST value, and the returned 
-*        value is UT1.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     An offset in days from the MJD given by "off". When the returned
-*     value is added to "off" the sum is a GMST MJD (if "forward" is
-*     non-zero), or a UT1 MJD (if "forward" is zero),
-
-*  Notes:
-*     - This function is based on SLA_GMST by P.T.Wallace.
-
-*/
-
-/* Local Variables: */
-   double dgdu;
-   double g;
-   double result;
-   double t;
-   double utl;
-   int nit;
-
-/* Initialise the returned value. */
-   if( in == AST__BAD || off == AST__BAD ) return AST__BAD;
-
-/* First deal with UT1 -> GMST
-   --------------------------- */
-   if( forward ) {
-
-/* Julian centuries since J2000. */
-      t = ( off + in - 51544.5 )/36525.0;
-
-/* GMST at this UT1. */
-      result = in + ( 24110.54841 + ( 8640184.812866 + ( 0.093104 - 
-                      6.2E-6*t )*t )*t )/86400.0;
-
-/* Now deal with GMST -> UT1
-   ----------------------- */
-   } else {
-
-/* Form an initial guess at the UT1 value using the inverse of a linear 
-   approximation to the UT1->GMST equation. */
-      result = 0.996997348638869*in + 154.49194372222 - 0.00300265136113098*off;
-
-/* Loop round improving the guess, until the guess stops changing, or 10
-   iterations have been performed. */
-      utl = AST__BAD;       
-      nit = 0;
-      while( result != utl && nit++ < 10 ){
-
-/* Calculate the GMST at the current UT1 guess. */
-         t = ( off + result - 51544.5 )/36525.0;
-         g = result + ( 24110.54841 + ( 8640184.812866 + ( 0.093104 - 
-                      6.2E-6*t )*t )*t )/86400.0;
-
-/* Calculate the rate of change of GMST with respect to UT1 at the current
-   UT1 guess. */
-         dgdu = 1.0 + ( 8640184.812866 + 
-                  ( 0.186208 - 12.4E-6*t )*t)/(36525.0*86400.0);
-
-/* Improve the UT1 guess. */
-         utl = result;
-         result = result - ( g - in )/dgdu;
-      }
-   }
-
-/* Return the result */
-   return result;
-}
-
-void astInitTimeMapVtab_(  AstTimeMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitTimeMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a TimeMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     void astInitTimeMapVtab( AstTimeMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     TimeMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the TimeMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsATimeMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-   vtab->TimeAdd = TimeAdd;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_rate = mapping->Rate;
-   mapping->Rate = Rate;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;  
-
-/* Declare the copy constructor, destructor and class dump
-   function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "TimeMap",
-               "Conversion between time coordinate systems" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a TimeMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     TimeMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated TimeMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated TimeMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated TimeMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the TimeMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        TimeMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated TimeMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   AstTimeMap *timemap;            /* Pointer to TimeMap */
-   const char *argdesc[ MAX_ARGS ]; /* Argument descriptions (junk) */
-   const char *class;            /* Pointer to Mapping class string */
-   const char *comment;          /* Pointer to comment string (junk) */
-   double (*cvtargs)[ MAX_ARGS ]; /* Pointer to argument arrays */
-   double tmp;                   /* Temporary storage */
-   int *cvttype;                 /* Pointer to transformation type codes */
-   int *szarg;                   /* Pointer to argument count array */
-   int done;                     /* Finished (no further simplification)? */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt1;                    /* Loop initial value */
-   int icvt2;                    /* Loop final value */
-   int icvt;                     /* Loop counter for transformation steps */
-   int ikeep;                    /* Index to store step being kept */
-   int imap1;                    /* Index of first TimeMap to merge */
-   int imap2;                    /* Index of last TimeMap to merge */
-   int imap;                     /* Loop counter for Mappings */
-   int inc;                      /* Increment for transformation step loop */
-   int invert;                   /* TimeMap applied in inverse direction? */
-   int istep;                    /* Loop counter for transformation steps */
-   int keep;                     /* Keep transformation step? */
-   int narg;                     /* Number of user-supplied arguments */
-   int ngone;                    /* Number of Mappings eliminated */
-   int nstep0;                   /* Original number of transformation steps */
-   int nstep;                    /* Total number of transformation steps */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Simplification possible? */
-   int unit;                     /* Replacement Mapping is a UnitMap? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* TimeMaps can only be merged if they are in series (or if there is
-   only one Mapping present, in which case it makes no difference), so
-   do nothing if they are not. */
-   if ( series || ( *nmap == 1 ) ) {
-
-/* Initialise the number of transformation steps to be merged to equal
-   the number in the nominated TimeMap. */
-      nstep = ( (AstTimeMap *) ( *map_list )[ where ] )->ncvt;
-
-/* Search adjacent lower-numbered Mappings until one is found which is
-   not a TimeMap. Accumulate the number of transformation steps involved in 
-   any TimeMaps found. */
-      imap1 = where;
-      while ( ( imap1 - 1 >= 0 ) && astOK ) {
-         class = astGetClass( ( *map_list )[ imap1 - 1 ] );
-         if ( !astOK || strcmp( class, "TimeMap" ) ) break;
-         nstep += ( (AstTimeMap *) ( *map_list )[ imap1 - 1 ] )->ncvt;
-         imap1--;
-      }
-
-/* Similarly search adjacent higher-numbered Mappings. */
-      imap2 = where;
-      while ( ( imap2 + 1 < *nmap ) && astOK ) {
-         class = astGetClass( ( *map_list )[ imap2 + 1 ] );
-         if ( !astOK || strcmp( class, "TimeMap" ) ) break;
-         nstep += ( (AstTimeMap *) ( *map_list )[ imap2 + 1 ] )->ncvt;
-         imap2++;
-      }
-
-/* Remember the initial number of transformation steps. */
-      nstep0 = nstep;
-
-/* Allocate memory for accumulating a list of all the transformation
-   steps involved in all the TimeMaps found. */
-      cvttype = astMalloc( sizeof( int ) * (size_t) nstep );
-      cvtargs = astMalloc( sizeof( double[ MAX_ARGS ] ) * (size_t) nstep );
-      szarg = astMalloc( sizeof( int ) * (size_t) nstep );
-
-/* Loop to obtain the transformation data for each TimeMap being merged. */
-      nstep = 0;
-      for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-
-/* Obtain a pointer to the TimeMap and note if it is being applied in
-   its inverse direction. */
-         timemap = (AstTimeMap *) ( *map_list )[ imap ];
-         invert = ( *invert_list )[ imap ];
-
-/* Set up loop limits and an increment to scan the transformation
-   steps in each TimeMap in either the forward or reverse direction, as
-   dictated by the associated "invert" value. */
-         icvt1 = invert ? timemap->ncvt - 1 : 0;
-         icvt2 = invert ? -1 : timemap->ncvt;
-         inc = invert ? -1 : 1;
-
-/* Loop through each transformation step in the TimeMap. */
-         for ( icvt = icvt1; icvt != icvt2; icvt += inc ) {
-
-/* Store the transformation type code and use "CvtString" to determine
-   the associated number of arguments. Then store these arguments. */
-            cvttype[ nstep ] = timemap->cvttype[ icvt ];
-            (void) CvtString( cvttype[ nstep ], &comment, 
-                              &narg, szarg + nstep, argdesc, status );
-            if ( !astOK ) break;
-            for ( iarg = 0; iarg < szarg[ nstep ]; iarg++ ) {
-               cvtargs[ nstep ][ iarg ] = timemap->cvtargs[ icvt ][ iarg ];
-            }
-
-/* If the TimeMap is inverted, we must not only accumulate its
-   transformation steps in reverse, but also apply them in
-   reverse. For some steps this means changing arguments, for some it
-   means changing the transformation type code to a complementary
-   value, and for others it means both.  Define macros to perform each
-   of the required changes. */
-
-/* Macro to exchange a transformation type code for its inverse (and
-   vice versa). */
-#define SWAP_CODES( code1, code2 ) \
-            if ( cvttype[ nstep ] == code1 ) { \
-               cvttype[ nstep ] = code2; \
-               AddArgs(  code2, cvtargs[ nstep ], status ); \
-            } else if ( cvttype[ nstep ] == code2 ) { \
-               cvttype[ nstep ] = code1; \
-               AddArgs(  code1, cvtargs[ nstep ], status ); \
-            }
-
-/* Macro to exchange a transformation type code for its inverse (and
-   vice versa), and swap the order of its 2 arguments. */
-#define SWAP_CODES2( code1, code2 ) \
-            if ( cvttype[ nstep ] == code1 ) { \
-               cvttype[ nstep ] = code2; \
-               tmp = cvtargs[ nstep ][ 0 ]; \
-               cvtargs[ nstep ][ 0 ] = cvtargs[ nstep ][ 1 ]; \
-               cvtargs[ nstep ][ 1 ] = tmp; \
-               AddArgs(  cvttype[ nstep ], cvtargs[ nstep ], status ); \
-            } else if ( cvttype[ nstep ] == code2 ) { \
-               cvttype[ nstep ] = code1; \
-               tmp = cvtargs[ nstep ][ 0 ]; \
-               cvtargs[ nstep ][ 0 ] = cvtargs[ nstep ][ 1 ]; \
-               cvtargs[ nstep ][ 1 ] = tmp; \
-               AddArgs(  cvttype[ nstep ], cvtargs[ nstep ], status ); \
-            }
-
-/* Use these macros to apply the changes where needed. */
-            if ( invert ) {
-
-/* Exchange transformation codes for their inverses. */
-               SWAP_CODES( AST__TAITOUTC, AST__UTCTOTAI ) 
-               SWAP_CODES( AST__TAITOTT, AST__TTTOTAI ) 
-               SWAP_CODES( AST__TTTOTDB, AST__TDBTOTT ) 
-               SWAP_CODES( AST__TDBTOTCB, AST__TCBTOTDB ) 
-               SWAP_CODES( AST__TTTOTCG, AST__TCGTOTT ) 
-               SWAP_CODES( AST__UTTOGMST, AST__GMSTTOUT ) 
-               SWAP_CODES( AST__GMSTTOLMST, AST__LMSTTOGMST ) 
-               SWAP_CODES( AST__LASTTOLMST, AST__LMSTTOLAST ) 
-               SWAP_CODES( AST__UTTOUTC, AST__UTCTOUT ) 
-               SWAP_CODES( AST__LTTOUTC, AST__UTCTOLT ) 
-
-/* Exchange transformation codes for their inverses, and swap the offset
-   values. */
-               SWAP_CODES2( AST__MJDTOMJD, AST__MJDTOMJD ) 
-               SWAP_CODES2( AST__MJDTOJD, AST__JDTOMJD ) 
-               SWAP_CODES2( AST__MJDTOBEP, AST__BEPTOMJD ) 
-               SWAP_CODES2( AST__MJDTOJEP, AST__JEPTOMJD ) 
-
-            }
-
-/* Undefine the local macros. */
-#undef SWAP_CODES
-#undef SWAP_CODES2
-
-/* Count the transformation steps. */
-            nstep++;
-         }
-      }
-
-/* Loop to simplify the sequence of transformation steps until no
-   further improvement is possible. */
-      done = 0;
-      while ( astOK && !done ) {
-
-/* Examine each remaining transformation step in turn.  */
-         ikeep = -1;
-         for ( istep = 0; istep < nstep; istep++ ) {
-
-/* Initially assume we will retain the current step. */
-            keep = 1;
-
-/* We can eliminate changes of system which have no effect. */
-            if( ( cvttype[ istep ] == AST__MJDTOMJD ||
-                  cvttype[ istep ] == AST__MJDTOJD ||
-                  cvttype[ istep ] == AST__JDTOMJD ) &&
-                cvtargs[ istep ][ 2 ] == 0.0 ) {
-               keep = 0;
-
-/* The only simplifications for the conversions currently in this class act 
-   to combine adjacent transformation steps, so only apply them while there 
-   are at least 2 steps left. */
-            } else if ( istep < ( nstep - 1 ) ) {
-
-/* Define a macro to test if two adjacent transformation type codes
-   have specified values. */
-#define PAIR_CVT( code1, code2 ) \
-               ( ( cvttype[ istep ] == code1 ) && \
-                 ( cvttype[ istep + 1 ] == code2 ) )
-
-/* Define a macro to test if two adjacent transformation type codes
-   have specified values, either way round. */
-#define PAIR_CVT2( code1, code2 ) \
-               ( ( PAIR_CVT( code1, code2 ) ) || \
-                 ( PAIR_CVT( code2, code1 ) ) )
-
-/* If a correction is followed by its inverse, and the user-supplied argument 
-   values are unchanged (we do not need to test values stored in the
-   argument array which were not supplied by the user), we can eliminate them. 
-   First check for conversions which have a single user-supplied argument. */
-               if( ( PAIR_CVT2( AST__TAITOUTC, AST__UTCTOTAI ) ||
-                     PAIR_CVT2( AST__TAITOTT, AST__TTTOTAI ) ||
-                     PAIR_CVT2( AST__UTTOGMST, AST__GMSTTOUT ) ||
-                     PAIR_CVT2( AST__TTTOTCG, AST__TCGTOTT ) || 
-                     PAIR_CVT2( AST__TTTOTCG, AST__TCGTOTT ) || 
-                     PAIR_CVT2( AST__UTTOUTC, AST__UTCTOUT ) ||
-                     PAIR_CVT2( AST__LTTOUTC, AST__UTCTOLT ) ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have two user-supplied arguments
-   (test they are swapped). */
-               } else if( ( PAIR_CVT2( AST__MJDTOJD, AST__JDTOMJD ) || 
-                            PAIR_CVT2( AST__MJDTOMJD, AST__MJDTOMJD ) || 
-                            PAIR_CVT2( AST__MJDTOBEP, AST__BEPTOMJD ) || 
-                            PAIR_CVT2( AST__MJDTOJEP, AST__JEPTOMJD ) ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 1 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 1 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have three user-supplied arguments. */
-               } else if( ( PAIR_CVT2( AST__TDBTOTCB, AST__TCBTOTDB ) ||
-                            PAIR_CVT2( AST__GMSTTOLMST, AST__LMSTTOGMST ) ||
-                            PAIR_CVT2( AST__LASTTOLMST, AST__LMSTTOLAST ) ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 1 ], 
-                                 cvtargs[ istep + 1 ][ 1 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 2 ], 
-                                 cvtargs[ istep + 1 ][ 2 ] ) ) {
-                  istep++;
-                  keep = 0;
-
-/* Now check for conversions which have four user-supplied arguments. */
-               } else if( ( PAIR_CVT2( AST__TTTOTDB, AST__TDBTOTT ) ) &&
-                          EQUAL( cvtargs[ istep ][ 0 ], 
-                                 cvtargs[ istep + 1 ][ 0 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 1 ], 
-                                 cvtargs[ istep + 1 ][ 1 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 2 ], 
-                                 cvtargs[ istep + 1 ][ 2 ] ) &&
-                          EQUAL( cvtargs[ istep ][ 3 ], 
-                                 cvtargs[ istep + 1 ][ 3 ] ) ) {
-                  istep++;
-                  keep = 0;
-               }
-
-/* Undefine the local macros. */
-#undef PAIR_CVT
-#undef PAIR_CVT2
-            }
-
-/* If the current transformation (possibly modified above) is being
-   kept, then increment the index that identifies its new location in
-   the list of transformation steps. */
-            if ( keep ) {
-               ikeep++;
-
-/* If the new location is different to its current location, copy the
-   transformation data into the new location. */
-               if ( ikeep != istep ) {
-                  cvttype[ ikeep ] = cvttype[ istep ];
-                  for ( iarg = 0; iarg < szarg[ istep ]; iarg++ ) {
-                     cvtargs[ ikeep ][ iarg ] = cvtargs[ istep ][ iarg ];
-                  }
-                  szarg[ ikeep ] = szarg[ istep ];
-               }
-            }
-         }
-
-/* Note if no simplification was achieved on this iteration (i.e. the
-   number of transformation steps was not reduced). This is the signal
-   to quit. */
-         done = ( ( ikeep + 1 ) >= nstep );
-
-/* Note how many transformation steps now remain. */
-         nstep = ikeep + 1;
-      }
-
-/* Determine how many Mappings can be eliminated by condensing all
-   those considered above into a single Mapping. */
-      if ( astOK ) {
-         ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap (a null
-   Mapping). This will only be the case if all the transformation
-   steps were eliminated above. */
-         unit = ( nstep == 0 );
-
-/* Determine if simplification is possible. This will be the case if
-   (a) Mappings were eliminated ("ngone" is non-zero), or (b) the
-   number of transformation steps was reduced, or (c) the TimeMap(s)
-   can be replaced by a UnitMap, or (d) if there was initially only
-   one TimeMap present, its invert flag was set (this flag will always
-   be cleared in the replacement Mapping). */
-         simpler = ngone || ( nstep < nstep0 ) || unit ||
-                   ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
-         if ( simpler ) {
-
-/* If the replacement Mapping is a UnitMap, then create it. */
-            if ( unit ) {
-               new = (AstMapping *)
-                        astUnitMap( astGetNin( ( *map_list )[ where ] ), "", status );
-
-/* Otherwise, create a replacement TimeMap and add each of the
-   remaining transformation steps to it. */
-            } else {
-               new = (AstMapping *) astTimeMap( 0, "", status );
-               for ( istep = 0; istep < nstep; istep++ ) {
-                  AddTimeCvt( (AstTimeMap *) new, cvttype[ istep ],
-                             cvtargs[ istep ], status );
-               }
-            }
-
-/* Annul the pointers to the Mappings being eliminated. */
-            if ( astOK ) {
-               for ( imap = imap1; imap <= imap2; imap++ ) {
-                  ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
-               }
-
-/* Insert the pointer and invert value for the new Mapping. */
-               ( *map_list )[ imap1 ] = new;
-               ( *invert_list )[ imap1 ] = 0;
-
-/* Move any subsequent Mapping information down to close the gap. */
-               for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
-                  ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
-               }
-
-/* Blank out any information remaining at the end of the arrays. */
-               for ( imap = ( *nmap - ngone ); imap < *nmap; imap++ ) {
-                  ( *map_list )[ imap ] = NULL;
-                  ( *invert_list )[ imap ] = 0;
-               }
-
-/* Decrement the Mapping count and return the index of the first
-   Mapping which was eliminated. */
-               ( *nmap ) -= ngone;
-               result = imap1;
-
-/* If an error occurred, annul the new Mapping pointer. */
-            } else {
-               new = astAnnul( new );
-            }
-         }
-      }
-
-/* Free the memory used for the transformation steps. */
-      cvttype = astFree( cvttype );
-      cvtargs = astFree( cvtargs );
-      szarg = astFree( szarg );
-   }
-
-/* If an error occurred, clear the returned value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     TimeMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*  Implementation Deficiencies:
-*     The initial version of this implementation only deals with
-*     frequency->wavelength conversions. This is because the slowness of
-*     the numerical differentiation implemented by the astRate method in 
-*     the parent Mapping class is cripples conversion between SpecFluxFrames.
-*     Such conversions only rely on rate of change of wavelength with
-*     respect to frequency. This implementation should be extended when
-*     needed.
-
-*/
-
-/* Local Variables: */
-   AstTimeMap *map;
-   double result;
-   int cvt;
-   int i;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the TimeMap structure. */
-   map = (AstTimeMap *) this;
-
-/* Initialise the returned value. */
-   result = 1.0;   
-
-/* Loop round each conversion. */
-   for( i = 0; i < map->ncvt; i++ ) {
-
-/* Store the type of the current conversion.*/
-      cvt = map->cvttype[ i ];
-
-/* Many of the time conversions are linear. If this is the case, multiply 
-   the total rate of change by the rate of change for this step. */
-      if( cvt == AST__MJDTOBEP ) {
-         result *= 1.0/365.242198781;
-
-      } else if( cvt == AST__BEPTOMJD ) {
-         result *= 365.242198781;
-
-      } else if( cvt == AST__MJDTOJEP ) {
-         result *= 1.0/365.25;
-
-      } else if( cvt == AST__JEPTOMJD ) {
-         result *= 365.25;
-
-/* The GMST scales is not linear, so break if we encounter it, and use the 
-   (numerical) parent astRate method. The other time scale conversions are 
-   assumed to have a slope of unity. In fact the slope will be ever so 
-   slightly different to unity. */
-      } else if( cvt == AST__UTTOGMST || cvt == AST__GMSTTOUT ) {
-         result = AST__BAD;
-         break;         
-      }
-   }
-
-/* If this is non-linear TimeMap, use the astRate method inherited from the 
-   parent Mapping class. */
-   if( result == AST__BAD ) result = (*parent_rate)( this, at, ax1, ax2, status );
-
-/* Return the result. */
-   return result;
-}
-
-static double Rcc( double tdb, double ut1, double wl, double u, double v, int *status ){
-/*
-*  Name:
-*     Rcc
-
-*  Purpose:
-*     Find difference between TDB and TT.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     double Rcc( double tdb, double ut1, double wl, double u, double v, int *status )
-
-*  Class Membership:
-*     TimeMap member function 
-
-*  Description:
-*     Relativistic clock correction:  the difference between proper time at
-*     a point on the surface of the Earth and coordinate time in the Solar
-*     System barycentric space-time frame of reference.
-*
-*     The proper time is terrestrial time, TT;  the coordinate time is an
-*     implementation of barycentric dynamical time, TDB.
-
-*  Parameters:
-*     tdb
-*        TDB as an MJD.
-*     ut1
-*        Universal time (only the fraction of the day is relevant)
-*     wl
-*        Observer longitude (radians west)
-*     u
-*        Observer distance from Earth spin axis (km)
-*     v
-*        Observer distance north of Earth equatorial plane (km)
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The clock correction, TDB-TT, in seconds. TDB is coordinate time in the 
-*     solar system barycentre frame of reference, in units chosen to eliminate 
-*     the scale difference with respect to terrestrial time. TT is the proper 
-*     time for clocks at mean sea level on the Earth.
-
-*  Notes:
-*     - This function is a translation of the fortran routine SLA_RCC
-*     written by by P.T.Wallace.
-*
-*     - The argument TDB is, strictly, the barycentric coordinate time;
-*     however, the terrestrial time TT can in practice be used without
-*     any significant loss of accuracy.
-*     
-*     - The result returned by Rcc comprises a main (annual)
-*     sinusoidal term of amplitude approximately 0.00166 seconds, plus
-*     planetary and lunar terms up to about 20 microseconds, and diurnal
-*     terms up to 2 microseconds.  The variation arises from the
-*     transverse Doppler effect and the gravitational red-shift as the
-*     observer varies in speed and moves through different gravitational
-*     potentials.
-*     
-*     - The geocentric model is that of Fairhead & Bretagnon (1990), in
-*     its full form.  It was supplied by Fairhead (private
-*     communication) as a FORTRAN subroutine.  The original Fairhead
-*     routine used explicit formulae, in such large numbers that
-*     problems were experienced with certain compilers (Microsoft
-*     Fortran on PC aborted with stack overflow, Convex compiled
-*     successfully but extremely slowly).  The present implementation is
-*     a complete recoding, with the original Fairhead coefficients held
-*     in a table.  To optimise arithmetic precision, the terms are
-*     accumulated in reverse order, smallest first.  A number of other
-*     coding changes were made, in order to match the calling sequence
-*     of previous versions of the present routine, and to comply with
-*     Starlink programming standards.  The numerical results compared
-*     with those from the Fairhead form are essentially unaffected by
-*     the changes, the differences being at the 10^-20 sec level.
-*
-*     - The topocentric part of the model is from Moyer (1981) and
-*     Murray (1983).  It is an approximation to the expression
-*     ( v / c ) . ( r / c ), where v is the barycentric velocity of
-*     the Earth, r is the geocentric position of the observer and
-*     c is the speed of light.
-*
-*     - During the interval 1950-2050, the absolute accuracy of is better
-*     than +/- 3 nanoseconds relative to direct numerical integrations
-*     using the JPL DE200/LE200 solar system ephemeris.
-*
-*     - The IAU definition of TDB was that it must differ from TT only by
-*     periodic terms.  Though practical, this is an imprecise definition
-*     which ignores the existence of very long-period and secular
-*     effects in the dynamics of the solar system.  As a consequence,
-*     different implementations of TDB will, in general, differ in zero-
-*     point and will drift linearly relative to one other.
-*
-*     - TDB was, in principle, superseded by new coordinate timescales
-*     which the IAU introduced in 1991:  geocentric coordinate time,
-*     TCG, and barycentric coordinate time, TCB.  However, Rcc
-*     can be used to implement the periodic part of TCB-TCG.
-
-*  References:
-*     - Fairhead, L., & Bretagnon, P., Astron.Astrophys., 229, 240-247
-*     (1990).
-*
-*     - Moyer, T.D., Cel.Mech., 23, 33 (1981).
-*
-*     - Murray, C.A., Vectorial Astrometry, Adam Hilger (1983).
-*
-*     - Seidelmann, P.K. et al, Explanatory Supplement to the
-*     Astronomical Almanac, Chapter 2, University Science Books
-*     (1992).
-*
-*     - Simon J.L., Bretagnon P., Chapront J., Chapront-Touze M.,
-*     Francou G. & Laskar J., Astron.Astrophys., 282, 663-683 (1994).
-*/
-
-
-
-
-
-/* -----------------------------------------------------------------------
-*
-*  Fairhead and Bretagnon canonical coefficients
-*
-*  787 sets of three coefficients.
-*
-*  Each set is amplitude (microseconds)
-*              frequency (radians per Julian millennium since J2000),
-*              phase (radians).
-*
-*  Sets   0-473 are the T**0 terms,
-*   "   474-678  "   "  T**1   "
-*   "   679-763  "   "  T**2   "
-*   "   764-783  "   "  T**3   "
-*   "   784-786  "   "  T**4   "  .
-*/
-   static double fairhd[ 787 ][ 3 ] = {
-
-     { 1656.674564E-6,    6283.075849991, 6.240054195},
-     {   22.417471E-6,    5753.384884897, 4.296977442},
-     {   13.839792E-6,   12566.151699983, 6.196904410},
-     {    4.770086E-6,     529.690965095, 0.444401603},
-     {    4.676740E-6,    6069.776754553, 4.021195093},
-     {    2.256707E-6,     213.299095438, 5.543113262},
-     {    1.694205E-6,      -3.523118349, 5.025132748},
-     {    1.554905E-6,   77713.771467920, 5.198467090},
-     {    1.276839E-6,    7860.419392439, 5.988822341},
-     {    1.193379E-6,    5223.693919802, 3.649823730},
-     {    1.115322E-6,    3930.209696220, 1.422745069},
-     {    0.794185E-6,   11506.769769794, 2.322313077},
-     {    0.447061E-6,      26.298319800, 3.615796498},
-     {    0.435206E-6,    -398.149003408, 4.349338347},
-     {    0.600309E-6,    1577.343542448, 2.678271909},
-     {    0.496817E-6,    6208.294251424, 5.696701824},
-     {    0.486306E-6,    5884.926846583, 0.520007179},
-     {    0.432392E-6,      74.781598567, 2.435898309},
-     {    0.468597E-6,    6244.942814354, 5.866398759},
-     {    0.375510E-6,    5507.553238667, 4.103476804},
-     {    0.243085E-6,    -775.522611324, 3.651837925},
-     {    0.173435E-6,   18849.227549974, 6.153743485},
-     {    0.230685E-6,    5856.477659115, 4.773852582},
-     {    0.203747E-6,   12036.460734888, 4.333987818},
-     {    0.143935E-6,    -796.298006816, 5.957517795},
-     {    0.159080E-6,   10977.078804699, 1.890075226},
-     {    0.119979E-6,      38.133035638, 4.551585768},
-     {    0.118971E-6,    5486.777843175, 1.914547226},
-     {    0.116120E-6,    1059.381930189, 0.873504123},
-     {    0.137927E-6,   11790.629088659, 1.135934669},
-     {    0.098358E-6,    2544.314419883, 0.092793886},
-     {    0.101868E-6,   -5573.142801634, 5.984503847},
-     {    0.080164E-6,     206.185548437, 2.095377709},
-     {    0.079645E-6,    4694.002954708, 2.949233637},
-     {    0.062617E-6,      20.775395492, 2.654394814},
-     {    0.075019E-6,    2942.463423292, 4.980931759},
-     {    0.064397E-6,    5746.271337896, 1.280308748},
-     {    0.063814E-6,    5760.498431898, 4.167901731},
-     {    0.048042E-6,    2146.165416475, 1.495846011},
-     {    0.048373E-6,     155.420399434, 2.251573730},
-     {    0.058844E-6,     426.598190876, 4.839650148},
-     {    0.046551E-6,      -0.980321068, 0.921573539},
-     {    0.054139E-6,   17260.154654690, 3.411091093},
-     {    0.042411E-6,    6275.962302991, 2.869567043},
-     {    0.040184E-6,      -7.113547001, 3.565975565},
-     {    0.036564E-6,    5088.628839767, 3.324679049},
-     {    0.040759E-6,   12352.852604545, 3.981496998},
-     {    0.036507E-6,     801.820931124, 6.248866009},
-     {    0.036955E-6,    3154.687084896, 5.071801441},
-     {    0.042732E-6,     632.783739313, 5.720622217},
-     {    0.042560E-6,  161000.685737473, 1.270837679},
-     {    0.040480E-6,   15720.838784878, 2.546610123},
-     {    0.028244E-6,   -6286.598968340, 5.069663519},
-     {    0.033477E-6,    6062.663207553, 4.144987272},
-     {    0.034867E-6,     522.577418094, 5.210064075},
-     {    0.032438E-6,    6076.890301554, 0.749317412},
-     {    0.030215E-6,    7084.896781115, 3.389610345},
-     {    0.029247E-6,  -71430.695617928, 4.183178762},
-     {    0.033529E-6,    9437.762934887, 2.404714239},
-     {    0.032423E-6,    8827.390269875, 5.541473556},
-     {    0.027567E-6,    6279.552731642, 5.040846034},
-     {    0.029862E-6,   12139.553509107, 1.770181024},
-     {    0.022509E-6,   10447.387839604, 1.460726241},
-     {    0.020937E-6,    8429.241266467, 0.652303414},
-     {    0.020322E-6,     419.484643875, 3.735430632},
-     {    0.024816E-6,   -1194.447010225, 1.087136918},
-     {    0.025196E-6,    1748.016413067, 2.901883301},
-     {    0.021691E-6,   14143.495242431, 5.952658009},
-     {    0.017673E-6,    6812.766815086, 3.186129845},
-     {    0.022567E-6,    6133.512652857, 3.307984806},
-     {    0.016155E-6,   10213.285546211, 1.331103168},
-     {    0.014751E-6,    1349.867409659, 4.308933301},
-     {    0.015949E-6,    -220.412642439, 4.005298270},
-     {    0.015974E-6,   -2352.866153772, 6.145309371},
-     {    0.014223E-6,   17789.845619785, 2.104551349},
-     {    0.017806E-6,      73.297125859, 3.475975097},
-     {    0.013671E-6,    -536.804512095, 5.971672571},
-     {    0.011942E-6,    8031.092263058, 2.053414715},
-     {    0.014318E-6,   16730.463689596, 3.016058075},
-     {    0.012462E-6,     103.092774219, 1.737438797},
-     {    0.010962E-6,       3.590428652, 2.196567739},
-     {    0.015078E-6,   19651.048481098, 3.969480770},
-     {    0.010396E-6,     951.718406251, 5.717799605},
-     {    0.011707E-6,   -4705.732307544, 2.654125618},
-     {    0.010453E-6,    5863.591206116, 1.913704550},
-     {    0.012420E-6,    4690.479836359, 4.734090399},
-     {    0.011847E-6,    5643.178563677, 5.489005403},
-     {    0.008610E-6,    3340.612426700, 3.661698944},
-     {    0.011622E-6,    5120.601145584, 4.863931876},
-     {    0.010825E-6,     553.569402842, 0.842715011},
-     {    0.008666E-6,    -135.065080035, 3.293406547},
-     {    0.009963E-6,     149.563197135, 4.870690598},
-     {    0.009858E-6,    6309.374169791, 1.061816410},
-     {    0.007959E-6,     316.391869657, 2.465042647},
-     {    0.010099E-6,     283.859318865, 1.942176992},
-     {    0.007147E-6,    -242.728603974, 3.661486981},
-     {    0.007505E-6,    5230.807466803, 4.920937029},
-     {    0.008323E-6,   11769.853693166, 1.229392026},
-     {    0.007490E-6,   -6256.777530192, 3.658444681},
-     {    0.009370E-6,  149854.400134205, 0.673880395},
-     {    0.007117E-6,      38.027672636, 5.294249518},
-     {    0.007857E-6,   12168.002696575, 0.525733528},
-     {    0.007019E-6,    6206.809778716, 0.837688810},
-     {    0.006056E-6,     955.599741609, 4.194535082},
-     {    0.008107E-6,   13367.972631107, 3.793235253},
-     {    0.006731E-6,    5650.292110678, 5.639906583},
-     {    0.007332E-6,      36.648562930, 0.114858677},
-     {    0.006366E-6,    4164.311989613, 2.262081818},
-     {    0.006858E-6,    5216.580372801, 0.642063318},
-     {    0.006919E-6,    6681.224853400, 6.018501522},
-     {    0.006826E-6,    7632.943259650, 3.458654112},
-     {    0.005308E-6,   -1592.596013633, 2.500382359},
-     {    0.005096E-6,   11371.704689758, 2.547107806},
-     {    0.004841E-6,    5333.900241022, 0.437078094},
-     {    0.005582E-6,    5966.683980335, 2.246174308},
-     {    0.006304E-6,   11926.254413669, 2.512929171},
-     {    0.006603E-6,   23581.258177318, 5.393136889},
-     {    0.005123E-6,      -1.484472708, 2.999641028},
-     {    0.004648E-6,    1589.072895284, 1.275847090},
-     {    0.005119E-6,    6438.496249426, 1.486539246},
-     {    0.004521E-6,    4292.330832950, 6.140635794},
-     {    0.005680E-6,   23013.539539587, 4.557814849},
-     {    0.005488E-6,      -3.455808046, 0.090675389},
-     {    0.004193E-6,    7234.794256242, 4.869091389},
-     {    0.003742E-6,    7238.675591600, 4.691976180},
-     {    0.004148E-6,    -110.206321219, 3.016173439},
-     {    0.004553E-6,   11499.656222793, 5.554998314},
-     {    0.004892E-6,    5436.993015240, 1.475415597},
-     {    0.004044E-6,    4732.030627343, 1.398784824},
-     {    0.004164E-6,   12491.370101415, 5.650931916},
-     {    0.004349E-6,   11513.883316794, 2.181745369},
-     {    0.003919E-6,   12528.018664345, 5.823319737},
-     {    0.003129E-6,    6836.645252834, 0.003844094},
-     {    0.004080E-6,   -7058.598461315, 3.690360123},
-     {    0.003270E-6,      76.266071276, 1.517189902},
-     {    0.002954E-6,    6283.143160294, 4.447203799},
-     {    0.002872E-6,      28.449187468, 1.158692983},
-     {    0.002881E-6,     735.876513532, 0.349250250},
-     {    0.003279E-6,    5849.364112115, 4.893384368},
-     {    0.003625E-6,    6209.778724132, 1.473760578},
-     {    0.003074E-6,     949.175608970, 5.185878737},
-     {    0.002775E-6,    9917.696874510, 1.030026325},
-     {    0.002646E-6,   10973.555686350, 3.918259169},
-     {    0.002575E-6,   25132.303399966, 6.109659023},
-     {    0.003500E-6,     263.083923373, 1.892100742},
-     {    0.002740E-6,   18319.536584880, 4.320519510},
-     {    0.002464E-6,     202.253395174, 4.698203059},
-     {    0.002409E-6,       2.542797281, 5.325009315},
-     {    0.003354E-6,  -90955.551694697, 1.942656623},
-     {    0.002296E-6,    6496.374945429, 5.061810696},
-     {    0.003002E-6,    6172.869528772, 2.797822767},
-     {    0.003202E-6,   27511.467873537, 0.531673101},
-     {    0.002954E-6,   -6283.008539689, 4.533471191},
-     {    0.002353E-6,     639.897286314, 3.734548088},
-     {    0.002401E-6,   16200.772724501, 2.605547070},
-     {    0.003053E-6,  233141.314403759, 3.029030662},
-     {    0.003024E-6,   83286.914269554, 2.355556099},
-     {    0.002863E-6,   17298.182327326, 5.240963796},
-     {    0.002103E-6,   -7079.373856808, 5.756641637},
-     {    0.002303E-6,   83996.847317911, 2.013686814},
-     {    0.002303E-6,   18073.704938650, 1.089100410},
-     {    0.002381E-6,      63.735898303, 0.759188178},
-     {    0.002493E-6,    6386.168624210, 0.645026535},
-     {    0.002366E-6,       3.932153263, 6.215885448},
-     {    0.002169E-6,   11015.106477335, 4.845297676},
-     {    0.002397E-6,    6243.458341645, 3.809290043},
-     {    0.002183E-6,    1162.474704408, 6.179611691},
-     {    0.002353E-6,    6246.427287062, 4.781719760},
-     {    0.002199E-6,    -245.831646229, 5.956152284},
-     {    0.001729E-6,    3894.181829542, 1.264976635},
-     {    0.001896E-6,   -3128.388765096, 4.914231596},
-     {    0.002085E-6,      35.164090221, 1.405158503},
-     {    0.002024E-6,   14712.317116458, 2.752035928},
-     {    0.001737E-6,    6290.189396992, 5.280820144},
-     {    0.002229E-6,     491.557929457, 1.571007057},
-     {    0.001602E-6,   14314.168113050, 4.203664806},
-     {    0.002186E-6,     454.909366527, 1.402101526},
-     {    0.001897E-6,   22483.848574493, 4.167932508},
-     {    0.001825E-6,   -3738.761430108, 0.545828785},
-     {    0.001894E-6,    1052.268383188, 5.817167450},
-     {    0.001421E-6,      20.355319399, 2.419886601},
-     {    0.001408E-6,   10984.192351700, 2.732084787},
-     {    0.001847E-6,   10873.986030480, 2.903477885},
-     {    0.001391E-6,   -8635.942003763, 0.593891500},
-     {    0.001388E-6,      -7.046236698, 1.166145902},
-     {    0.001810E-6,  -88860.057071188, 0.487355242},
-     {    0.001288E-6,   -1990.745017041, 3.913022880},
-     {    0.001297E-6,   23543.230504682, 3.063805171},
-     {    0.001335E-6,    -266.607041722, 3.995764039},
-     {    0.001376E-6,   10969.965257698, 5.152914309},
-     {    0.001745E-6,  244287.600007027, 3.626395673},
-     {    0.001649E-6,   31441.677569757, 1.952049260},
-     {    0.001416E-6,    9225.539273283, 4.996408389},
-     {    0.001238E-6,    4804.209275927, 5.503379738},
-     {    0.001472E-6,    4590.910180489, 4.164913291},
-     {    0.001169E-6,    6040.347246017, 5.841719038},
-     {    0.001039E-6,    5540.085789459, 2.769753519},
-     {    0.001004E-6,    -170.672870619, 0.755008103},
-     {    0.001284E-6,   10575.406682942, 5.306538209},
-     {    0.001278E-6,      71.812653151, 4.713486491},
-     {    0.001321E-6,   18209.330263660, 2.624866359},
-     {    0.001297E-6,   21228.392023546, 0.382603541},
-     {    0.000954E-6,    6282.095528923, 0.882213514},
-     {    0.001145E-6,    6058.731054289, 1.169483931},
-     {    0.000979E-6,    5547.199336460, 5.448375984},
-     {    0.000987E-6,   -6262.300454499, 2.656486959},
-     {    0.001070E-6, -154717.609887482, 1.827624012},
-     {    0.000991E-6,    4701.116501708, 4.387001801},
-     {    0.001155E-6,     -14.227094002, 3.042700750},
-     {    0.001176E-6,     277.034993741, 3.335519004},
-     {    0.000890E-6,   13916.019109642, 5.601498297},
-     {    0.000884E-6,   -1551.045222648, 1.088831705},
-     {    0.000876E-6,    5017.508371365, 3.969902609},
-     {    0.000806E-6,   15110.466119866, 5.142876744},
-     {    0.000773E-6,   -4136.910433516, 0.022067765},
-     {    0.001077E-6,     175.166059800, 1.844913056},
-     {    0.000954E-6,   -6284.056171060, 0.968480906},
-     {    0.000737E-6,    5326.786694021, 4.923831588},
-     {    0.000845E-6,    -433.711737877, 4.749245231},
-     {    0.000819E-6,    8662.240323563, 5.991247817},
-     {    0.000852E-6,     199.072001436, 2.189604979},
-     {    0.000723E-6,   17256.631536341, 6.068719637},
-     {    0.000940E-6,    6037.244203762, 6.197428148},
-     {    0.000885E-6,   11712.955318231, 3.280414875},
-     {    0.000706E-6,   12559.038152982, 2.824848947},
-     {    0.000732E-6,    2379.164473572, 2.501813417},
-     {    0.000764E-6,   -6127.655450557, 2.236346329},
-     {    0.000908E-6,     131.541961686, 2.521257490},
-     {    0.000907E-6,   35371.887265976, 3.370195967},
-     {    0.000673E-6,    1066.495477190, 3.876512374},
-     {    0.000814E-6,   17654.780539750, 4.627122566},
-     {    0.000630E-6,      36.027866677, 0.156368499},
-     {    0.000798E-6,     515.463871093, 5.151962502},
-     {    0.000798E-6,     148.078724426, 5.909225055},
-     {    0.000806E-6,     309.278322656, 6.054064447},
-     {    0.000607E-6,     -39.617508346, 2.839021623},
-     {    0.000601E-6,     412.371096874, 3.984225404},
-     {    0.000646E-6,   11403.676995575, 3.852959484},
-     {    0.000704E-6,   13521.751441591, 2.300991267},
-     {    0.000603E-6,  -65147.619767937, 4.140083146},
-     {    0.000609E-6,   10177.257679534, 0.437122327},
-     {    0.000631E-6,    5767.611978898, 4.026532329},
-     {    0.000576E-6,   11087.285125918, 4.760293101},
-     {    0.000674E-6,   14945.316173554, 6.270510511},
-     {    0.000726E-6,    5429.879468239, 6.039606892},
-     {    0.000710E-6,   28766.924424484, 5.672617711},
-     {    0.000647E-6,   11856.218651625, 3.397132627},
-     {    0.000678E-6,   -5481.254918868, 6.249666675},
-     {    0.000618E-6,   22003.914634870, 2.466427018},
-     {    0.000738E-6,    6134.997125565, 2.242668890},
-     {    0.000660E-6,     625.670192312, 5.864091907},
-     {    0.000694E-6,    3496.032826134, 2.668309141},
-     {    0.000531E-6,    6489.261398429, 1.681888780},
-     {    0.000611E-6, -143571.324284214, 2.424978312},
-     {    0.000575E-6,   12043.574281889, 4.216492400},
-     {    0.000553E-6,   12416.588502848, 4.772158039},
-     {    0.000689E-6,    4686.889407707, 6.224271088},
-     {    0.000495E-6,    7342.457780181, 3.817285811},
-     {    0.000567E-6,    3634.621024518, 1.649264690},
-     {    0.000515E-6,   18635.928454536, 3.945345892},
-     {    0.000486E-6,    -323.505416657, 4.061673868},
-     {    0.000662E-6,   25158.601719765, 1.794058369},
-     {    0.000509E-6,     846.082834751, 3.053874588},
-     {    0.000472E-6,  -12569.674818332, 5.112133338},
-     {    0.000461E-6,    6179.983075773, 0.513669325},
-     {    0.000641E-6,   83467.156352816, 3.210727723},
-     {    0.000520E-6,   10344.295065386, 2.445597761},
-     {    0.000493E-6,   18422.629359098, 1.676939306},
-     {    0.000478E-6,    1265.567478626, 5.487314569},
-     {    0.000472E-6,     -18.159247265, 1.999707589},
-     {    0.000559E-6,   11190.377900137, 5.783236356},
-     {    0.000494E-6,    9623.688276691, 3.022645053},
-     {    0.000463E-6,    5739.157790895, 1.411223013},
-     {    0.000432E-6,   16858.482532933, 1.179256434},
-     {    0.000574E-6,   72140.628666286, 1.758191830},
-     {    0.000484E-6,   17267.268201691, 3.290589143},
-     {    0.000550E-6,    4907.302050146, 0.864024298},
-     {    0.000399E-6,      14.977853527, 2.094441910},
-     {    0.000491E-6,     224.344795702, 0.878372791},
-     {    0.000432E-6,   20426.571092422, 6.003829241},
-     {    0.000481E-6,    5749.452731634, 4.309591964},
-     {    0.000480E-6,    5757.317038160, 1.142348571},
-     {    0.000485E-6,    6702.560493867, 0.210580917},
-     {    0.000426E-6,    6055.549660552, 4.274476529},
-     {    0.000480E-6,    5959.570433334, 5.031351030},
-     {    0.000466E-6,   12562.628581634, 4.959581597},
-     {    0.000520E-6,   39302.096962196, 4.788002889},
-     {    0.000458E-6,   12132.439962106, 1.880103788},
-     {    0.000470E-6,   12029.347187887, 1.405611197},
-     {    0.000416E-6,   -7477.522860216, 1.082356330},
-     {    0.000449E-6,   11609.862544012, 4.179989585},
-     {    0.000465E-6,   17253.041107690, 0.353496295},
-     {    0.000362E-6,   -4535.059436924, 1.583849576},
-     {    0.000383E-6,   21954.157609398, 3.747376371},
-     {    0.000389E-6,      17.252277143, 1.395753179},
-     {    0.000331E-6,   18052.929543158, 0.566790582},
-     {    0.000430E-6,   13517.870106233, 0.685827538},
-     {    0.000368E-6,   -5756.908003246, 0.731374317},
-     {    0.000330E-6,   10557.594160824, 3.710043680},
-     {    0.000332E-6,   20199.094959633, 1.652901407},
-     {    0.000384E-6,   11933.367960670, 5.827781531},
-     {    0.000387E-6,   10454.501386605, 2.541182564},
-     {    0.000325E-6,   15671.081759407, 2.178850542},
-     {    0.000318E-6,     138.517496871, 2.253253037},
-     {    0.000305E-6,    9388.005909415, 0.578340206},
-     {    0.000352E-6,    5749.861766548, 3.000297967},
-     {    0.000311E-6,    6915.859589305, 1.693574249},
-     {    0.000297E-6,   24072.921469776, 1.997249392},
-     {    0.000363E-6,    -640.877607382, 5.071820966},
-     {    0.000323E-6,   12592.450019783, 1.072262823},
-     {    0.000341E-6,   12146.667056108, 4.700657997},
-     {    0.000290E-6,    9779.108676125, 1.812320441},
-     {    0.000342E-6,    6132.028180148, 4.322238614},
-     {    0.000329E-6,    6268.848755990, 3.033827743},
-     {    0.000374E-6,   17996.031168222, 3.388716544},
-     {    0.000285E-6,    -533.214083444, 4.687313233},
-     {    0.000338E-6,    6065.844601290, 0.877776108},
-     {    0.000276E-6,      24.298513841, 0.770299429},
-     {    0.000336E-6,   -2388.894020449, 5.353796034},
-     {    0.000290E-6,    3097.883822726, 4.075291557},
-     {    0.000318E-6,     709.933048357, 5.941207518},
-     {    0.000271E-6,   13095.842665077, 3.208912203},
-     {    0.000331E-6,    6073.708907816, 4.007881169},
-     {    0.000292E-6,     742.990060533, 2.714333592},
-     {    0.000362E-6,   29088.811415985, 3.215977013},
-     {    0.000280E-6,   12359.966151546, 0.710872502},
-     {    0.000267E-6,   10440.274292604, 4.730108488},
-     {    0.000262E-6,     838.969287750, 1.327720272},
-     {    0.000250E-6,   16496.361396202, 0.898769761},
-     {    0.000325E-6,   20597.243963041, 0.180044365},
-     {    0.000268E-6,    6148.010769956, 5.152666276},
-     {    0.000284E-6,    5636.065016677, 5.655385808},
-     {    0.000301E-6,    6080.822454817, 2.135396205},
-     {    0.000294E-6,    -377.373607916, 3.708784168},
-     {    0.000236E-6,    2118.763860378, 1.733578756},
-     {    0.000234E-6,    5867.523359379, 5.575209112},
-     {    0.000268E-6, -226858.238553767, 0.069432392},
-     {    0.000265E-6,  167283.761587465, 4.369302826},
-     {    0.000280E-6,   28237.233459389, 5.304829118},
-     {    0.000292E-6,   12345.739057544, 4.096094132},
-     {    0.000223E-6,   19800.945956225, 3.069327406},
-     {    0.000301E-6,   43232.306658416, 6.205311188},
-     {    0.000264E-6,   18875.525869774, 1.417263408},
-     {    0.000304E-6,   -1823.175188677, 3.409035232},
-     {    0.000301E-6,     109.945688789, 0.510922054},
-     {    0.000260E-6,     813.550283960, 2.389438934},
-     {    0.000299E-6,  316428.228673312, 5.384595078},
-     {    0.000211E-6,    5756.566278634, 3.789392838},
-     {    0.000209E-6,    5750.203491159, 1.661943545},
-     {    0.000240E-6,   12489.885628707, 5.684549045},
-     {    0.000216E-6,    6303.851245484, 3.862942261},
-     {    0.000203E-6,    1581.959348283, 5.549853589},
-     {    0.000200E-6,    5642.198242609, 1.016115785},
-     {    0.000197E-6,     -70.849445304, 4.690702525},
-     {    0.000227E-6,    6287.008003254, 2.911891613},
-     {    0.000197E-6,     533.623118358, 1.048982898},
-     {    0.000205E-6,   -6279.485421340, 1.829362730},
-     {    0.000209E-6,  -10988.808157535, 2.636140084},
-     {    0.000208E-6,    -227.526189440, 4.127883842},
-     {    0.000191E-6,     415.552490612, 4.401165650},
-     {    0.000190E-6,   29296.615389579, 4.175658539},
-     {    0.000264E-6,   66567.485864652, 4.601102551},
-     {    0.000256E-6,   -3646.350377354, 0.506364778},
-     {    0.000188E-6,   13119.721102825, 2.032195842},
-     {    0.000185E-6,    -209.366942175, 4.694756586},
-     {    0.000198E-6,   25934.124331089, 3.832703118},
-     {    0.000195E-6,    4061.219215394, 3.308463427},
-     {    0.000234E-6,    5113.487598583, 1.716090661},
-     {    0.000188E-6,    1478.866574064, 5.686865780},
-     {    0.000222E-6,   11823.161639450, 1.942386641},
-     {    0.000181E-6,   10770.893256262, 1.999482059},
-     {    0.000171E-6,    6546.159773364, 1.182807992},
-     {    0.000206E-6,      70.328180442, 5.934076062},
-     {    0.000169E-6,   20995.392966449, 2.169080622},
-     {    0.000191E-6,   10660.686935042, 5.405515999},
-     {    0.000228E-6,   33019.021112205, 4.656985514},
-     {    0.000184E-6,   -4933.208440333, 3.327476868},
-     {    0.000220E-6,    -135.625325010, 1.765430262},
-     {    0.000166E-6,   23141.558382925, 3.454132746},
-     {    0.000191E-6,    6144.558353121, 5.020393445},
-     {    0.000180E-6,    6084.003848555, 0.602182191},
-     {    0.000163E-6,   17782.732072784, 4.960593133},
-     {    0.000225E-6,   16460.333529525, 2.596451817},
-     {    0.000222E-6,    5905.702242076, 3.731990323},
-     {    0.000204E-6,     227.476132789, 5.636192701},
-     {    0.000159E-6,   16737.577236597, 3.600691544},
-     {    0.000200E-6,    6805.653268085, 0.868220961},
-     {    0.000187E-6,   11919.140866668, 2.629456641},
-     {    0.000161E-6,     127.471796607, 2.862574720},
-     {    0.000205E-6,    6286.666278643, 1.742882331},
-     {    0.000189E-6,     153.778810485, 4.812372643},
-     {    0.000168E-6,   16723.350142595, 0.027860588},
-     {    0.000149E-6,   11720.068865232, 0.659721876},
-     {    0.000189E-6,    5237.921013804, 5.245313000},
-     {    0.000143E-6,    6709.674040867, 4.317625647},
-     {    0.000146E-6,    4487.817406270, 4.815297007},
-     {    0.000144E-6,    -664.756045130, 5.381366880},
-     {    0.000175E-6,    5127.714692584, 4.728443327},
-     {    0.000162E-6,    6254.626662524, 1.435132069},
-     {    0.000187E-6,   47162.516354635, 1.354371923},
-     {    0.000146E-6,   11080.171578918, 3.369695406},
-     {    0.000180E-6,    -348.924420448, 2.490902145},
-     {    0.000148E-6,     151.047669843, 3.799109588},
-     {    0.000157E-6,    6197.248551160, 1.284375887},
-     {    0.000167E-6,     146.594251718, 0.759969109},
-     {    0.000133E-6,   -5331.357443741, 5.409701889},
-     {    0.000154E-6,      95.979227218, 3.366890614},
-     {    0.000148E-6,   -6418.140930027, 3.384104996},
-     {    0.000128E-6,   -6525.804453965, 3.803419985},
-     {    0.000130E-6,   11293.470674356, 0.939039445},
-     {    0.000152E-6,   -5729.506447149, 0.734117523},
-     {    0.000138E-6,     210.117701700, 2.564216078},
-     {    0.000123E-6,    6066.595360816, 4.517099537},
-     {    0.000140E-6,   18451.078546566, 0.642049130},
-     {    0.000126E-6,   11300.584221356, 3.485280663},
-     {    0.000119E-6,   10027.903195729, 3.217431161},
-     {    0.000151E-6,    4274.518310832, 4.404359108},
-     {    0.000117E-6,    6072.958148291, 0.366324650},
-     {    0.000165E-6,   -7668.637425143, 4.298212528},
-     {    0.000117E-6,   -6245.048177356, 5.379518958},
-     {    0.000130E-6,   -5888.449964932, 4.527681115},
-     {    0.000121E-6,    -543.918059096, 6.109429504},
-     {    0.000162E-6,    9683.594581116, 5.720092446},
-     {    0.000141E-6,    6219.339951688, 0.679068671},
-     {    0.000118E-6,   22743.409379516, 4.881123092},
-     {    0.000129E-6,    1692.165669502, 0.351407289},
-     {    0.000126E-6,    5657.405657679, 5.146592349},
-     {    0.000114E-6,     728.762966531, 0.520791814},
-     {    0.000120E-6,      52.596639600, 0.948516300},
-     {    0.000115E-6,      65.220371012, 3.504914846},
-     {    0.000126E-6,    5881.403728234, 5.577502482},
-     {    0.000158E-6,  163096.180360983, 2.957128968},
-     {    0.000134E-6,   12341.806904281, 2.598576764},
-     {    0.000151E-6,   16627.370915377, 3.985702050},
-     {    0.000109E-6,    1368.660252845, 0.014730471},
-     {    0.000131E-6,    6211.263196841, 0.085077024},
-     {    0.000146E-6,    5792.741760812, 0.708426604},
-     {    0.000146E-6,     -77.750543984, 3.121576600},
-     {    0.000107E-6,    5341.013788022, 0.288231904},
-     {    0.000138E-6,    6281.591377283, 2.797450317},
-     {    0.000113E-6,   -6277.552925684, 2.788904128},
-     {    0.000115E-6,    -525.758811831, 5.895222200},
-     {    0.000138E-6,    6016.468808270, 6.096188999},
-     {    0.000139E-6,   23539.707386333, 2.028195445},
-     {    0.000146E-6,   -4176.041342449, 4.660008502},
-     {    0.000107E-6,   16062.184526117, 4.066520001},
-     {    0.000142E-6,   83783.548222473, 2.936315115},
-     {    0.000128E-6,    9380.959672717, 3.223844306},
-     {    0.000135E-6,    6205.325306007, 1.638054048},
-     {    0.000101E-6,    2699.734819318, 5.481603249},
-     {    0.000104E-6,    -568.821874027, 2.205734493},
-     {    0.000103E-6,    6321.103522627, 2.440421099},
-     {    0.000119E-6,    6321.208885629, 2.547496264},
-     {    0.000138E-6,    1975.492545856, 2.314608466},
-     {    0.000121E-6,     137.033024162, 4.539108237},
-     {    0.000123E-6,   19402.796952817, 4.538074405},
-     {    0.000119E-6,   22805.735565994, 2.869040566},
-     {    0.000133E-6,   64471.991241142, 6.056405489},
-     {    0.000129E-6,     -85.827298831, 2.540635083},
-     {    0.000131E-6,   13613.804277336, 4.005732868},
-     {    0.000104E-6,    9814.604100291, 1.959967212},
-     {    0.000112E-6,   16097.679950283, 3.589026260},
-     {    0.000123E-6,    2107.034507542, 1.728627253},
-     {    0.000121E-6,   36949.230808424, 6.072332087},
-     {    0.000108E-6,  -12539.853380183, 3.716133846},
-     {    0.000113E-6,   -7875.671863624, 2.725771122},
-     {    0.000109E-6,    4171.425536614, 4.033338079},
-     {    0.000101E-6,    6247.911759770, 3.441347021},
-     {    0.000113E-6,    7330.728427345, 0.656372122},
-     {    0.000113E-6,   51092.726050855, 2.791483066},
-     {    0.000106E-6,    5621.842923210, 1.815323326},
-     {    0.000101E-6,     111.430161497, 5.711033677},
-     {    0.000103E-6,     909.818733055, 2.812745443},
-     {    0.000101E-6,    1790.642637886, 1.965746028},
-     {  102.156724E-6,    6283.075849991, 4.249032005},
-     {    1.706807E-6,   12566.151699983, 4.205904248},
-     {    0.269668E-6,     213.299095438, 3.400290479},
-     {    0.265919E-6,     529.690965095, 5.836047367},
-     {    0.210568E-6,      -3.523118349, 6.262738348},
-     {    0.077996E-6,    5223.693919802, 4.670344204},
-     {    0.054764E-6,    1577.343542448, 4.534800170},
-     {    0.059146E-6,      26.298319800, 1.083044735},
-     {    0.034420E-6,    -398.149003408, 5.980077351},
-     {    0.032088E-6,   18849.227549974, 4.162913471},
-     {    0.033595E-6,    5507.553238667, 5.980162321},
-     {    0.029198E-6,    5856.477659115, 0.623811863},
-     {    0.027764E-6,     155.420399434, 3.745318113},
-     {    0.025190E-6,    5746.271337896, 2.980330535},
-     {    0.022997E-6,    -796.298006816, 1.174411803},
-     {    0.024976E-6,    5760.498431898, 2.467913690},
-     {    0.021774E-6,     206.185548437, 3.854787540},
-     {    0.017925E-6,    -775.522611324, 1.092065955},
-     {    0.013794E-6,     426.598190876, 2.699831988},
-     {    0.013276E-6,    6062.663207553, 5.845801920},
-     {    0.011774E-6,   12036.460734888, 2.292832062},
-     {    0.012869E-6,    6076.890301554, 5.333425680},
-     {    0.012152E-6,    1059.381930189, 6.222874454},
-     {    0.011081E-6,      -7.113547001, 5.154724984},
-     {    0.010143E-6,    4694.002954708, 4.044013795},
-     {    0.009357E-6,    5486.777843175, 3.416081409},
-     {    0.010084E-6,     522.577418094, 0.749320262},
-     {    0.008587E-6,   10977.078804699, 2.777152598},
-     {    0.008628E-6,    6275.962302991, 4.562060226},
-     {    0.008158E-6,    -220.412642439, 5.806891533},
-     {    0.007746E-6,    2544.314419883, 1.603197066},
-     {    0.007670E-6,    2146.165416475, 3.000200440},
-     {    0.007098E-6,      74.781598567, 0.443725817},
-     {    0.006180E-6,    -536.804512095, 1.302642751},
-     {    0.005818E-6,    5088.628839767, 4.827723531},
-     {    0.004945E-6,   -6286.598968340, 0.268305170},
-     {    0.004774E-6,    1349.867409659, 5.808636673},
-     {    0.004687E-6,    -242.728603974, 5.154890570},
-     {    0.006089E-6,    1748.016413067, 4.403765209},
-     {    0.005975E-6,   -1194.447010225, 2.583472591},
-     {    0.004229E-6,     951.718406251, 0.931172179},
-     {    0.005264E-6,     553.569402842, 2.336107252},
-     {    0.003049E-6,    5643.178563677, 1.362634430},
-     {    0.002974E-6,    6812.766815086, 1.583012668},
-     {    0.003403E-6,   -2352.866153772, 2.552189886},
-     {    0.003030E-6,     419.484643875, 5.286473844},
-     {    0.003210E-6,      -7.046236698, 1.863796539},
-     {    0.003058E-6,    9437.762934887, 4.226420633},
-     {    0.002589E-6,   12352.852604545, 1.991935820},
-     {    0.002927E-6,    5216.580372801, 2.319951253},
-     {    0.002425E-6,    5230.807466803, 3.084752833},
-     {    0.002656E-6,    3154.687084896, 2.487447866},
-     {    0.002445E-6,   10447.387839604, 2.347139160},
-     {    0.002990E-6,    4690.479836359, 6.235872050},
-     {    0.002890E-6,    5863.591206116, 0.095197563},
-     {    0.002498E-6,    6438.496249426, 2.994779800},
-     {    0.001889E-6,    8031.092263058, 3.569003717},
-     {    0.002567E-6,     801.820931124, 3.425611498},
-     {    0.001803E-6,  -71430.695617928, 2.192295512},
-     {    0.001782E-6,       3.932153263, 5.180433689},
-     {    0.001694E-6,   -4705.732307544, 4.641779174},
-     {    0.001704E-6,   -1592.596013633, 3.997097652},
-     {    0.001735E-6,    5849.364112115, 0.417558428},
-     {    0.001643E-6,    8429.241266467, 2.180619584},
-     {    0.001680E-6,      38.133035638, 4.164529426},
-     {    0.002045E-6,    7084.896781115, 0.526323854},
-     {    0.001458E-6,    4292.330832950, 1.356098141},
-     {    0.001437E-6,      20.355319399, 3.895439360},
-     {    0.001738E-6,    6279.552731642, 0.087484036},
-     {    0.001367E-6,   14143.495242431, 3.987576591},
-     {    0.001344E-6,    7234.794256242, 0.090454338},
-     {    0.001438E-6,   11499.656222793, 0.974387904},
-     {    0.001257E-6,    6836.645252834, 1.509069366},
-     {    0.001358E-6,   11513.883316794, 0.495572260},
-     {    0.001628E-6,    7632.943259650, 4.968445721},
-     {    0.001169E-6,     103.092774219, 2.838496795},
-     {    0.001162E-6,    4164.311989613, 3.408387778},
-     {    0.001092E-6,    6069.776754553, 3.617942651},
-     {    0.001008E-6,   17789.845619785, 0.286350174},
-     {    0.001008E-6,     639.897286314, 1.610762073},
-     {    0.000918E-6,   10213.285546211, 5.532798067},
-     {    0.001011E-6,   -6256.777530192, 0.661826484},
-     {    0.000753E-6,   16730.463689596, 3.905030235},
-     {    0.000737E-6,   11926.254413669, 4.641956361},
-     {    0.000694E-6,    3340.612426700, 2.111120332},
-     {    0.000701E-6,    3894.181829542, 2.760823491},
-     {    0.000689E-6,    -135.065080035, 4.768800780},
-     {    0.000700E-6,   13367.972631107, 5.760439898},
-     {    0.000664E-6,    6040.347246017, 1.051215840},
-     {    0.000654E-6,    5650.292110678, 4.911332503},
-     {    0.000788E-6,    6681.224853400, 4.699648011},
-     {    0.000628E-6,    5333.900241022, 5.024608847},
-     {    0.000755E-6,    -110.206321219, 4.370971253},
-     {    0.000628E-6,    6290.189396992, 3.660478857},
-     {    0.000635E-6,   25132.303399966, 4.121051532},
-     {    0.000534E-6,    5966.683980335, 1.173284524},
-     {    0.000543E-6,    -433.711737877, 0.345585464},
-     {    0.000517E-6,   -1990.745017041, 5.414571768},
-     {    0.000504E-6,    5767.611978898, 2.328281115},
-     {    0.000485E-6,    5753.384884897, 1.685874771},
-     {    0.000463E-6,    7860.419392439, 5.297703006},
-     {    0.000604E-6,     515.463871093, 0.591998446},
-     {    0.000443E-6,   12168.002696575, 4.830881244},
-     {    0.000570E-6,     199.072001436, 3.899190272},
-     {    0.000465E-6,   10969.965257698, 0.476681802},
-     {    0.000424E-6,   -7079.373856808, 1.112242763},
-     {    0.000427E-6,     735.876513532, 1.994214480},
-     {    0.000478E-6,   -6127.655450557, 3.778025483},
-     {    0.000414E-6,   10973.555686350, 5.441088327},
-     {    0.000512E-6,    1589.072895284, 0.107123853},
-     {    0.000378E-6,   10984.192351700, 0.915087231},
-     {    0.000402E-6,   11371.704689758, 4.107281715},
-     {    0.000453E-6,    9917.696874510, 1.917490952},
-     {    0.000395E-6,     149.563197135, 2.763124165},
-     {    0.000371E-6,    5739.157790895, 3.112111866},
-     {    0.000350E-6,   11790.629088659, 0.440639857},
-     {    0.000356E-6,    6133.512652857, 5.444568842},
-     {    0.000344E-6,     412.371096874, 5.676832684},
-     {    0.000383E-6,     955.599741609, 5.559734846},
-     {    0.000333E-6,    6496.374945429, 0.261537984},
-     {    0.000340E-6,    6055.549660552, 5.975534987},
-     {    0.000334E-6,    1066.495477190, 2.335063907},
-     {    0.000399E-6,   11506.769769794, 5.321230910},
-     {    0.000314E-6,   18319.536584880, 2.313312404},
-     {    0.000424E-6,    1052.268383188, 1.211961766},
-     {    0.000307E-6,      63.735898303, 3.169551388},
-     {    0.000329E-6,      29.821438149, 6.106912080},
-     {    0.000357E-6,    6309.374169791, 4.223760346},
-     {    0.000312E-6,   -3738.761430108, 2.180556645},
-     {    0.000301E-6,     309.278322656, 1.499984572},
-     {    0.000268E-6,   12043.574281889, 2.447520648},
-     {    0.000257E-6,   12491.370101415, 3.662331761},
-     {    0.000290E-6,     625.670192312, 1.272834584},
-     {    0.000256E-6,    5429.879468239, 1.913426912},
-     {    0.000339E-6,    3496.032826134, 4.165930011},
-     {    0.000283E-6,    3930.209696220, 4.325565754},
-     {    0.000241E-6,   12528.018664345, 3.832324536},
-     {    0.000304E-6,    4686.889407707, 1.612348468},
-     {    0.000259E-6,   16200.772724501, 3.470173146},
-     {    0.000238E-6,   12139.553509107, 1.147977842},
-     {    0.000236E-6,    6172.869528772, 3.776271728},
-     {    0.000296E-6,   -7058.598461315, 0.460368852},
-     {    0.000306E-6,   10575.406682942, 0.554749016},
-     {    0.000251E-6,   17298.182327326, 0.834332510},
-     {    0.000290E-6,    4732.030627343, 4.759564091},
-     {    0.000261E-6,    5884.926846583, 0.298259862},
-     {    0.000249E-6,    5547.199336460, 3.749366406},
-     {    0.000213E-6,   11712.955318231, 5.415666119},
-     {    0.000223E-6,    4701.116501708, 2.703203558},
-     {    0.000268E-6,    -640.877607382, 0.283670793},
-     {    0.000209E-6,    5636.065016677, 1.238477199},
-     {    0.000193E-6,   10177.257679534, 1.943251340},
-     {    0.000182E-6,    6283.143160294, 2.456157599},
-     {    0.000184E-6,    -227.526189440, 5.888038582},
-     {    0.000182E-6,   -6283.008539689, 0.241332086},
-     {    0.000228E-6,   -6284.056171060, 2.657323816},
-     {    0.000166E-6,    7238.675591600, 5.930629110},
-     {    0.000167E-6,    3097.883822726, 5.570955333},
-     {    0.000159E-6,    -323.505416657, 5.786670700},
-     {    0.000154E-6,   -4136.910433516, 1.517805532},
-     {    0.000176E-6,   12029.347187887, 3.139266834},
-     {    0.000167E-6,   12132.439962106, 3.556352289},
-     {    0.000153E-6,     202.253395174, 1.463313961},
-     {    0.000157E-6,   17267.268201691, 1.586837396},
-     {    0.000142E-6,   83996.847317911, 0.022670115},
-     {    0.000152E-6,   17260.154654690, 0.708528947},
-     {    0.000144E-6,    6084.003848555, 5.187075177},
-     {    0.000135E-6,    5756.566278634, 1.993229262},
-     {    0.000134E-6,    5750.203491159, 3.457197134},
-     {    0.000144E-6,    5326.786694021, 6.066193291},
-     {    0.000160E-6,   11015.106477335, 1.710431974},
-     {    0.000133E-6,    3634.621024518, 2.836451652},
-     {    0.000134E-6,   18073.704938650, 5.453106665},
-     {    0.000134E-6,    1162.474704408, 5.326898811},
-     {    0.000128E-6,    5642.198242609, 2.511652591},
-     {    0.000160E-6,     632.783739313, 5.628785365},
-     {    0.000132E-6,   13916.019109642, 0.819294053},
-     {    0.000122E-6,   14314.168113050, 5.677408071},
-     {    0.000125E-6,   12359.966151546, 5.251984735},
-     {    0.000121E-6,    5749.452731634, 2.210924603},
-     {    0.000136E-6,    -245.831646229, 1.646502367},
-     {    0.000120E-6,    5757.317038160, 3.240883049},
-     {    0.000134E-6,   12146.667056108, 3.059480037},
-     {    0.000137E-6,    6206.809778716, 1.867105418},
-     {    0.000141E-6,   17253.041107690, 2.069217456},
-     {    0.000129E-6,   -7477.522860216, 2.781469314},
-     {    0.000116E-6,    5540.085789459, 4.281176991},
-     {    0.000116E-6,    9779.108676125, 3.320925381},
-     {    0.000129E-6,    5237.921013804, 3.497704076},
-     {    0.000113E-6,    5959.570433334, 0.983210840},
-     {    0.000122E-6,    6282.095528923, 2.674938860},
-     {    0.000140E-6,     -11.045700264, 4.957936982},
-     {    0.000108E-6,   23543.230504682, 1.390113589},
-     {    0.000106E-6,  -12569.674818332, 0.429631317},
-     {    0.000110E-6,    -266.607041722, 5.501340197},
-     {    0.000115E-6,   12559.038152982, 4.691456618},
-     {    0.000134E-6,   -2388.894020449, 0.577313584},
-     {    0.000109E-6,   10440.274292604, 6.218148717},
-     {    0.000102E-6,    -543.918059096, 1.477842615},
-     {    0.000108E-6,   21228.392023546, 2.237753948},
-     {    0.000101E-6,   -4535.059436924, 3.100492232},
-     {    0.000103E-6,      76.266071276, 5.594294322},
-     {    0.000104E-6,     949.175608970, 5.674287810},
-     {    0.000101E-6,   13517.870106233, 2.196632348},
-     {    0.000100E-6,   11933.367960670, 4.056084160},
-     {    4.322990E-6,    6283.075849991, 2.642893748},
-     {    0.406495E-6,       0.000000000, 4.712388980},
-     {    0.122605E-6,   12566.151699983, 2.438140634},
-     {    0.019476E-6,     213.299095438, 1.642186981},
-     {    0.016916E-6,     529.690965095, 4.510959344},
-     {    0.013374E-6,      -3.523118349, 1.502210314},
-     {    0.008042E-6,      26.298319800, 0.478549024},
-     {    0.007824E-6,     155.420399434, 5.254710405},
-     {    0.004894E-6,    5746.271337896, 4.683210850},
-     {    0.004875E-6,    5760.498431898, 0.759507698},
-     {    0.004416E-6,    5223.693919802, 6.028853166},
-     {    0.004088E-6,      -7.113547001, 0.060926389},
-     {    0.004433E-6,   77713.771467920, 3.627734103},
-     {    0.003277E-6,   18849.227549974, 2.327912542},
-     {    0.002703E-6,    6062.663207553, 1.271941729},
-     {    0.003435E-6,    -775.522611324, 0.747446224},
-     {    0.002618E-6,    6076.890301554, 3.633715689},
-     {    0.003146E-6,     206.185548437, 5.647874613},
-     {    0.002544E-6,    1577.343542448, 6.232904270},
-     {    0.002218E-6,    -220.412642439, 1.309509946},
-     {    0.002197E-6,    5856.477659115, 2.407212349},
-     {    0.002897E-6,    5753.384884897, 5.863842246},
-     {    0.001766E-6,     426.598190876, 0.754113147},
-     {    0.001738E-6,    -796.298006816, 2.714942671},
-     {    0.001695E-6,     522.577418094, 2.629369842},
-     {    0.001584E-6,    5507.553238667, 1.341138229},
-     {    0.001503E-6,    -242.728603974, 0.377699736},
-     {    0.001552E-6,    -536.804512095, 2.904684667},
-     {    0.001370E-6,    -398.149003408, 1.265599125},
-     {    0.001889E-6,   -5573.142801634, 4.413514859},
-     {    0.001722E-6,    6069.776754553, 2.445966339},
-     {    0.001124E-6,    1059.381930189, 5.041799657},
-     {    0.001258E-6,     553.569402842, 3.849557278},
-     {    0.000831E-6,     951.718406251, 2.471094709},
-     {    0.000767E-6,    4694.002954708, 5.363125422},
-     {    0.000756E-6,    1349.867409659, 1.046195744},
-     {    0.000775E-6,     -11.045700264, 0.245548001},
-     {    0.000597E-6,    2146.165416475, 4.543268798},
-     {    0.000568E-6,    5216.580372801, 4.178853144},
-     {    0.000711E-6,    1748.016413067, 5.934271972},
-     {    0.000499E-6,   12036.460734888, 0.624434410},
-     {    0.000671E-6,   -1194.447010225, 4.136047594},
-     {    0.000488E-6,    5849.364112115, 2.209679987},
-     {    0.000621E-6,    6438.496249426, 4.518860804},
-     {    0.000495E-6,   -6286.598968340, 1.868201275},
-     {    0.000456E-6,    5230.807466803, 1.271231591},
-     {    0.000451E-6,    5088.628839767, 0.084060889},
-     {    0.000435E-6,    5643.178563677, 3.324456609},
-     {    0.000387E-6,   10977.078804699, 4.052488477},
-     {    0.000547E-6,  161000.685737473, 2.841633844},
-     {    0.000522E-6,    3154.687084896, 2.171979966},
-     {    0.000375E-6,    5486.777843175, 4.983027306},
-     {    0.000421E-6,    5863.591206116, 4.546432249},
-     {    0.000439E-6,    7084.896781115, 0.522967921},
-     {    0.000309E-6,    2544.314419883, 3.172606705},
-     {    0.000347E-6,    4690.479836359, 1.479586566},
-     {    0.000317E-6,     801.820931124, 3.553088096},
-     {    0.000262E-6,     419.484643875, 0.606635550},
-     {    0.000248E-6,    6836.645252834, 3.014082064},
-     {    0.000245E-6,   -1592.596013633, 5.519526220},
-     {    0.000225E-6,    4292.330832950, 2.877956536},
-     {    0.000214E-6,    7234.794256242, 1.605227587},
-     {    0.000205E-6,    5767.611978898, 0.625804796},
-     {    0.000180E-6,   10447.387839604, 3.499954526},
-     {    0.000229E-6,     199.072001436, 5.632304604},
-     {    0.000214E-6,     639.897286314, 5.960227667},
-     {    0.000175E-6,    -433.711737877, 2.162417992},
-     {    0.000209E-6,     515.463871093, 2.322150893},
-     {    0.000173E-6,    6040.347246017, 2.556183691},
-     {    0.000184E-6,    6309.374169791, 4.732296790},
-     {    0.000227E-6,  149854.400134205, 5.385812217},
-     {    0.000154E-6,    8031.092263058, 5.120720920},
-     {    0.000151E-6,    5739.157790895, 4.815000443},
-     {    0.000197E-6,    7632.943259650, 0.222827271},
-     {    0.000197E-6,      74.781598567, 3.910456770},
-     {    0.000138E-6,    6055.549660552, 1.397484253},
-     {    0.000149E-6,   -6127.655450557, 5.333727496},
-     {    0.000137E-6,    3894.181829542, 4.281749907},
-     {    0.000135E-6,    9437.762934887, 5.979971885},
-     {    0.000139E-6,   -2352.866153772, 4.715630782},
-     {    0.000142E-6,    6812.766815086, 0.513330157},
-     {    0.000120E-6,   -4705.732307544, 0.194160689},
-     {    0.000131E-6,  -71430.695617928, 0.000379226},
-     {    0.000124E-6,    6279.552731642, 2.122264908},
-     {    0.000108E-6,   -6256.777530192, 0.883445696},
-     {    0.143388E-6,    6283.075849991, 1.131453581},
-     {    0.006671E-6,   12566.151699983, 0.775148887},
-     {    0.001480E-6,     155.420399434, 0.480016880},
-     {    0.000934E-6,     213.299095438, 6.144453084},
-     {    0.000795E-6,     529.690965095, 2.941595619},
-     {    0.000673E-6,    5746.271337896, 0.120415406},
-     {    0.000672E-6,    5760.498431898, 5.317009738},
-     {    0.000389E-6,    -220.412642439, 3.090323467},
-     {    0.000373E-6,    6062.663207553, 3.003551964},
-     {    0.000360E-6,    6076.890301554, 1.918913041},
-     {    0.000316E-6,     -21.340641002, 5.545798121},
-     {    0.000315E-6,    -242.728603974, 1.884932563},
-     {    0.000278E-6,     206.185548437, 1.266254859},
-     {    0.000238E-6,    -536.804512095, 4.532664830},
-     {    0.000185E-6,     522.577418094, 4.578313856},
-     {    0.000245E-6,   18849.227549974, 0.587467082},
-     {    0.000180E-6,     426.598190876, 5.151178553},
-     {    0.000200E-6,     553.569402842, 5.355983739},
-     {    0.000141E-6,    5223.693919802, 1.336556009},
-     {    0.000104E-6,    5856.477659115, 4.239842759},
-     {    0.003826E-6,    6283.075849991, 5.705257275},
-     {    0.000303E-6,   12566.151699983, 5.407132842},
-     {    0.000209E-6,     155.420399434, 1.989815753}
-   };
-
-/* -------------------------------------------------------------------- */
-
-/* Local Variables: */
-   double t, tsol, w, elsun, emsun, d, elj, els, wt, w0, w1, w2, w3, w4, 
-          wf, wj;
-   int i;
-
-
-/* Time since J2000.0 in Julian millennia. */
-   t = ( tdb - 51544.5 )/365250;
-
-
-
-/* -------------------- Topocentric terms ----------------------------- */
-
-/* Convert UT1 to local solar time in radians. */
-   tsol = fmod( ut1, 1.0 )*D2PI - wl;
-
-/* FUNDAMENTAL ARGUMENTS:  Simon et al 1994 */
-
-/* Combine time argument (millennia ) with deg/arcsec factor. */
-   w = t / 3600.0;
-
-/* Sun Mean Longitude. */
-   elsun = fmod( 280.46645683 + 1296027711.03429*w, 360.0 )*D2R;
-
-/* Sun Mean Anomaly. */
-   emsun = fmod( 357.52910918 + 1295965810.481*w, 360.0 )*D2R;
-
-/* Mean Elongation of Moon from Sun. */
-   d = fmod( 297.85019547 + 16029616012.090*w, 360.0 )*D2R;
-
-/* Mean Longitude of Jupiter. */
-   elj = fmod( 34.35151874 + 109306899.89453*w, 360.0 )*D2R;
-
-/* Mean Longitude of Saturn. */
-   els = fmod( 50.07744430 + 44046398.47038*w, 360.0 )*D2R;
-
-/* TOPOCENTRIC TERMS:  Moyer 1981 and Murray 1983. */
-   wt =   + 0.00029E-10*u*sin( tsol + elsun - els )
-          + 0.00100E-10*u*sin( tsol - 2*emsun )
-          + 0.00133E-10*u*sin( tsol - d )
-          + 0.00133E-10*u*sin( tsol + elsun - elj )
-          - 0.00229E-10*u*sin( tsol + 2*elsun + emsun )
-          - 0.0220E-10*v*cos( elsun + emsun )
-          + 0.05312E-10*u*sin( tsol - emsun )
-          - 0.13677E-10*u*sin( tsol + 2*elsun )
-          - 1.3184E-10*v*cos( elsun )
-          + 3.17679E-10*u*sin( tsol );
-
-
-
-/* --------------- Fairhead model --------------------------------------- */
-
-/* t**0 */
-   w0 = 0;
-   for( i = 473; i >= 0; i-- ) {
-      w0 = w0 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
-   }
-
-/* t**1 */
-   w1 = 0;
-   for( i = 678; i >= 474; i-- ) {
-      w1 = w1 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
-   }
-
-/* t**2 */
-   w2 = 0;
-   for( i = 763; i >= 679; i-- ) {
-      w2 = w2 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
-   }
-
-/* t**3 */
-   w3 = 0;
-   for( i = 783; i >= 764; i-- ) {
-      w3 = w3 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
-   }
-
-/* t**4 */
-   w4 = 0;
-   for( i = 786; i >= 784; i-- ) {
-      w4 = w4 + fairhd[ i ][ 0 ]*sin( fairhd[ i ][ 1 ]*t + fairhd[ i ][ 2 ] );
-   }
-
-/* Multiply by powers of T and combine. */
-   wf = t*( t*( t*( t*w4 + w3 ) + w2 ) + w1 ) + w0;
-
-/* Adjustments to use JPL planetary masses instead of IAU. */
-   wj =    0.00065E-6  * sin(  6069.776754  *t  +  4.021194  )  + 
-           0.00033E-6  * sin(   213.299095  *t  +  5.543132  )  + 
-        ( -0.00196E-6  * sin( 6208.294251   *t  +  5.696701  ) ) + 
-        ( -0.00173E-6  * sin(   74.781599   *t  +  2.435900  ) ) + 
-           0.03638E-6*t*t;
-
-
-
-/* -------------------------------------------------------------------- */
-
-/* Final result:  TDB-TT in seconds. */
-   return wt + wf + wj;
-
-}
-
-static void TimeAdd( AstTimeMap *this, const char *cvt, const double args[], int *status ) {
-/*
-*++
-*  Name:
-c     astTimeAdd
-f     AST_TIMEADD
-
-*  Purpose:
-*     Add a time coordinate conversion to a TimeMap.
-
-*  Type:
-*     Public virtual function.
-
-*  Synopsis:
-c     #include "timemap.h"
-c     void astTimeAdd( AstTimeMap *this, const char *cvt, const double args[] )
-f     CALL AST_TIMEADD( THIS, CVT, ARGS, STATUS )
-
-*  Class Membership:
-*     TimeMap method.
-
-*  Description:
-c     This function adds one of the standard time coordinate
-f     This routine adds one of the standard time coordinate
-*     system conversions listed below to an existing TimeMap.
-*
-c     When a TimeMap is first created (using astTimeMap), it simply
-f     When a TimeMap is first created (using AST_TIMEMAP), it simply
-c     performs a unit (null) Mapping. By using astTimeAdd (repeatedly
-f     performs a unit (null) Mapping. By using AST_TIMEADD (repeatedly
-*     if necessary), one or more coordinate conversion steps may then
-*     be added, which the TimeMap will perform in sequence. This allows
-*     multi-step conversions between a variety of time coordinate
-*     systems to be assembled out of the building blocks provided by
-*     this class.
-*
-*     Normally, if a TimeMap's Invert attribute is zero (the default),
-*     then its forward transformation is performed by carrying out
-*     each of the individual coordinate conversions specified by
-c     astTimeAdd in the order given (i.e. with the most recently added
-f     AST_TIMEADD in the order given (i.e. with the most recently added
-*     conversion applied last).
-*
-*     This order is reversed if the TimeMap's Invert attribute is
-*     non-zero (or if the inverse transformation is requested by any
-*     other means) and each individual coordinate conversion is also
-*     replaced by its own inverse. This process inverts the overall
-*     effect of the TimeMap. In this case, the first conversion to be
-*     applied would be the inverse of the one most recently added.
-
-*  Parameters:
-c     this
-f     THIS = INTEGER (Given)
-*        Pointer to the TimeMap.
-c     cvt
-f     CVT = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string which identifies the
-f        A character string which identifies the
-*        time coordinate conversion to be added to the
-*        TimeMap. See the "Available Conversions" section for details of
-*        those available.
-c     args
-f     ARGS( * ) = DOUBLE PRECISION (Given)
-*        An array containing argument values for the time
-*        coordinate conversion. The number of arguments required, and
-*        hence the number of array elements used, depends on the
-*        conversion specified (see the "Available Conversions"
-*        section). This array is ignored
-c        and a NULL pointer may be supplied
-*        if no arguments are needed.
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Notes:
-*     - When assembling a multi-stage conversion, it can sometimes be
-*     difficult to determine the most economical conversion path. A solution 
-*     to this is to include all the steps which are (logically) necessary, 
-*     but then to use 
-c     astSimplify to simplify the resulting
-f     AST_SIMPLIFY to simplify the resulting
-*     TimeMap. The simplification process will eliminate any steps
-*     which turn out not to be needed.
-c     - This function does not check to ensure that the sequence of
-f     - This routine does not check to ensure that the sequence of
-*     coordinate conversions added to a TimeMap is physically
-*     meaningful.
-
-*  Available Conversions:
-*     The following strings (which are case-insensitive) may be supplied
-c     via the "cvt" parameter to indicate which time coordinate
-f     via the CVT argument to indicate which time coordinate
-*     conversion is to be added to the TimeMap. Where arguments are needed by
-*     the conversion, they are listed in parentheses. Values for
-c     these arguments should be given, via the "args" array, in the
-f     these arguments should be given, via the ARGS array, in the
-*     order indicated. Units and argument names are described at the end of 
-*     the list of conversions, and "MJD" means Modified Julian Date.
-*
-*     - "MJDTOMJD"  (MJDOFF1,MJDOFF2): Convert MJD from one offset to another.
-*     - "MJDTOJD"  (MJDOFF,JDOFF): Convert MJD to Julian Date.
-*     - "JDTOMJD"  (JDOFF,MJDOFF): Convert Julian Date to MJD.
-*     - "MJDTOBEP" (MJDOFF,BEPOFF): Convert MJD to Besselian epoch.
-*     - "BEPTOMJD" (BEPOFF,MJDOFF): Convert Besselian epoch to MJD.
-*     - "MJDTOJEP" (MJDOFF,JEPOFF): Convert MJD to Julian epoch.
-*     - "JEPTOMJD" (JEPOFF,MJDOFF): Convert Julian epoch to MJD.
-*     - "TAITOUTC" (MJDOFF): Convert a TAI MJD to a UTC MJD.
-*     - "UTCTOTAI" (MJDOFF): Convert a UTC MJD to a TAI MJD.
-*     - "TAITOTT"  (MJDOFF): Convert a TAI MJD to a TT MJD.
-*     - "TTTOTAI"  (MJDOFF): Convert a TT MJD to a TAI MJD.
-*     - "TTTOTDB"  (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TT MJD to a TDB MJD.
-*     - "TDBTOTT"  (MJDOFF, OBSLON, OBSLAT, OBSALT): Convert a TDB MJD to a TT MJD.
-*     - "TTTOTCG"  (MJDOFF): Convert a TT MJD to a TCG MJD.
-*     - "TCGTOTT"  (MJDOFF): Convert a TCG MJD to a TT MJD.
-*     - "TDBTOTCB" (MJDOFF): Convert a TDB MJD to a TCB MJD.
-*     - "TCBTOTDB" (MJDOFF): Convert a TCB MJD to a TDB MJD.
-*     - "UTTOGMST" (MJDOFF): Convert a UT MJD to a GMST MJD.
-*     - "GMSTTOUT" (MJDOFF): Convert a GMST MJD to a UT MJD.
-*     - "GMSTTOLMST" (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-*     - "LMSTTOGMST" (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-*     - "LASTTOLMST" (MJDOFF, OBSLON, OBSLAT): Convert a GMST MJD to a LMST MJD.
-*     - "LMSTTOLAST" (MJDOFF, OBSLON, OBSLAT): Convert a LMST MJD to a GMST MJD.
-*     - "UTTOUTC" (DUT1): Convert a UT1 MJD to a UTC MJD.
-*     - "UTCTOUT" (DUT1): Convert a UTC MJD to a UT1 MJD.
-*     - "LTTOUTC" (LTOFF): Convert a Local Time MJD to a UTC MJD.
-*     - "UTCTOLT" (LTOFF): Convert a UTC MJD to a Local Time MJD.
-*
-*     The units for the values processed by the above conversions are as
-*     follows: 
-*
-*     - Julian epochs and offsets: Julian years
-*     - Besselian epochs and offsets: Tropical years
-*     - Modified Julian Dates and offsets: days
-*     - Julian Dates and offsets: days
-*
-*     The arguments used in the above conversions are the zero-points 
-*     used by the 
-c     astTransform function.
-f     AST_TRANSFORM routine.
-*     The axis values supplied and returned by 
-c     astTransform 
-f     AST_TRANSFORM 
-*     are offsets away from these zero-points:
-*
-*     - MJDOFF: The zero-point being used with MJD values.
-*     - JDOFF: The zero-point being used with Julian Date values.
-*     - BEPOFF: The zero-point being used with Besselian epoch values.
-*     - JEPOFF: The zero-point being used with Julian epoch values.
-*     - OBSLON: Observer longitude in radians (+ve westwards).
-*     - OBSLAT: Observer geodetic latitude (IAU 1975) in radians (+ve northwards).
-*     - OBSALT: Observer geodetic altitude (IAU 1975) in metres.
-*     - DUT1: The UT1-UTC value to use. 
-*     - LTOFF: The offset between Local Time and UTC (in hours, positive 
-*     for time zones east of Greenwich).
-*--
-*/
-
-/* Local Variables: */
-   int cvttype;                  /* Conversion type code */
-
-/* Check the inherited status. */
-   if ( !astOK ) return;
-
-/* Validate the type string supplied and obtain the equivalent
-   conversion type code. */
-   cvttype = CvtCode( cvt, status );
-
-/* If the string was not recognised, then report an error. */
-   if ( astOK && ( cvttype == AST__TIME_NULL ) ) {
-      astError( AST__TIMIN,
-                "%s(%s): Invalid TimeMap time coordinate "
-                "conversion type \"%s\".", status, "astAddTime", astGetClass( this ), cvt );
-   }
-
-/* Add the new conversion to the TimeMap. */
-   AddTimeCvt( this, cvttype, args, status );
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a TimeMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     TimeMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a TimeMap and a set of points encapsulated
-*     in a PointSet and transforms the points so as to perform the
-*     sequence of time coordinate conversions specified by
-*     previous invocations of astTimeAdd.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the TimeMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstTimeMap *map;              /* Pointer to TimeMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *args;                 /* Pointer to argument list for conversion */
-   double *time;                 /* Pointer to output time axis value array */
-   double gmstx;                 /* GMST offset (in days) */
-   double tai;                   /* Absolute TAI value (in days) */
-   double tdb;                   /* Absolute TDB value (in days) */
-   double tt;                    /* Absolute TT value (in days) */
-   double utc;                   /* Absolute UTC value (in days) */
-   int ct;                       /* Conversion type */
-   int cvt;                      /* Loop counter for conversions */
-   int end;                      /* Termination index for conversion loop */
-   int inc;                      /* Increment for conversion loop */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-   int start;                    /* Starting index for conversion loop */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the TimeMap. */
-   map = (AstTimeMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   coordinate conversions needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord_in = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse transformation, according
-   to the direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( this ) ) forward = !forward;
-
-/* Transform the coordinate values. */
-/* -------------------------------- */
-/* Use "time" as a synonym for the array of time axis values stored in 
-   the output PointSet. */
-   if ( astOK ) {
-      time = ptr_out[ 0 ];
-
-/* Initialise the output coordinate values by copying the input ones. */
-      if( time != ptr_in[ 0 ] ) {
-         (void) memcpy( time, ptr_in[ 0 ], sizeof( double ) * (size_t) npoint );
-      }
-
-/* We will loop to apply each time coordinate conversion in turn to the
-   (time) array. However, if the inverse transformation was requested,
-   we must loop through these transformations in reverse order, so set up
-   appropriate limits and an increment to control this loop. */
-      start = forward ? 0 : map->ncvt - 1;
-      end = forward ? map->ncvt : -1;
-      inc = forward ? 1 : -1;
-
-/* Loop through the coordinate conversions in the required order and obtain a
-   pointer to the argument list for the current conversion. */
-      for ( cvt = start; cvt != end; cvt += inc ) {
-         args = map->cvtargs[ cvt ];
-
-/* Classify the SLALIB sky coordinate conversion to be applied. */
-         ct = map->cvttype[ cvt ];
-         switch ( ct ) {
-
-/* MJD to MJD. */
-/* ---------- */
-            case AST__MJDTOMJD:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 2 ];
-                     }
-                  }
-               }
-               break;
-
-/* MJD to JD. */
-/* ---------- */
-            case AST__MJDTOJD:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 2 ];
-                     }
-                  }
-               }
-               break;
-
-/* JD to MJD. */
-/* ---------- */
-            case AST__JDTOMJD:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 2 ];
-                     }
-                  }
-               }
-               break;
-
-/* MJD to Besselian epoch. */
-/* ----------------------- */
-            case AST__MJDTOBEP:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpb( time[ point ] ) + args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpb2d( time[ point ] ) + args[ 3 ];
-                     }
-                  }
-               }
-               break;
-
-/* Besselian epoch to MJD. */
-/* ----------------------- */
-            case AST__BEPTOMJD:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpb2d( time[ point ] ) + args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpb( time[ point ] ) + args[ 3 ];
-                     }
-                  }
-               }
-               break;
-
-/* MJD to Julian epoch. */
-/* -------------------- */
-            case AST__MJDTOJEP:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpj( time[ point ] ) + args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpj2d( time[ point ] ) + args[ 3 ];
-                     }
-                  }
-               }
-               break;
-
-/* Julian epoch to MJD. */
-/* -------------------- */
-            case AST__JEPTOMJD:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpj2d( time[ point ] ) + args[ 2 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = palSlaEpj( time[ point ] ) + args[ 3 ];
-                     }
-                  }
-               }
-               break;
-
-/* TAI to UTC. */
-/* ----------- */
-            case AST__TAITOUTC:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += astDat( time[ point ] + 
-                                              args[ 0 ], 0 )/SPD;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += astDat( time[ point ] + 
-                                              args[ 0 ], 1 )/SPD;
-                     }
-                  }
-               }
-               break;
-
-/* UTC to TAI. */
-/* ----------- */
-            case AST__UTCTOTAI:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += astDat( time[ point ] + 
-                                              args[ 0 ], 1 )/SPD;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += astDat( time[ point ] + 
-                                              args[ 0 ], 0 )/SPD;
-                     }
-                  }
-               }
-               break;
-
-/* TAI to TT. */
-/* ---------- */
-            case AST__TAITOTT:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += (TTOFF/SPD);
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= (TTOFF/SPD);
-                     }
-                  }
-               }
-               break;
-
-/* TT to TAI. */
-/* ---------- */
-            case AST__TTTOTAI:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= (TTOFF/SPD);
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += (TTOFF/SPD);
-                     }
-                  }
-               }
-               break;
-
-/* TT to TDB. */
-/* ---------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation 
-   to UT1, and that TT is a good approximation to TDB. */
-            case AST__TTTOTDB:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        tt = time[ point ] + args[ 0 ];
-                        tai = tt - (TTOFF/SPD);
-                        utc = tai + astDat( tai, 0 )/SPD;
-                        time[ point ] += Rcc( tt, utc, args[ 1 ], args[ 4 ],
-                                              args[ 5 ], status )/SPD;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        tdb = time[ point ] + args[ 0 ];
-                        tai = tdb - (TTOFF/SPD);
-                        utc = tai + astDat( tai, 0 )/SPD;
-                        time[ point ] -= Rcc( tdb, utc, args[ 1 ], args[ 4 ],
-                                                args[ 5 ], status )/SPD;
-                     }
-                  }
-               }
-               break;
-
-/* TDB to TT. */
-/* ---------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation 
-   to UT1, and that TT is a good approximation to TDB. */
-            case AST__TDBTOTT:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        tdb = time[ point ] + args[ 0 ];
-                        tai = tdb - (TTOFF/SPD);
-                        utc = tai + astDat( tai, 0 )/SPD;
-                        time[ point ] -= Rcc( tdb, utc, args[ 1 ], args[ 4 ],
-                                                args[ 5 ], status )/SPD;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        tt = time[ point ] + args[ 0 ];
-                        tai = tt - (TTOFF/SPD);
-                        utc = tai + astDat( tai, 0 )/SPD;
-                        time[ point ] += Rcc( tt, utc, args[ 1 ], args[ 4 ],
-                                              args[ 5 ], status )/SPD;
-                     }
-                  }
-               }
-               break;
-
-/* TT to TCG. */
-/* ---------- */
-            case AST__TTTOTCG:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += time[ point ]*LG + args[ 1 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = ( time[ point ] - args[ 1 ] ) /
-                                         ( 1.0 + LG );
-                     }
-                  }
-               }
-               break;
-
-/* TCG to TT. */
-/* ---------- */
-            case AST__TCGTOTT:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = ( time[ point ] - args[ 1 ] ) /
-                                         ( 1.0 + LG );
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += time[ point ]*LG + args[ 1 ];
-                     }
-                  }
-               }
-               break;
-
-/* TDB to TCB. */
-/* ----------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation 
-   to UT1, and that TT is a good approximation to both TDB and TCB. */
-            case AST__TDBTOTCB:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += time[ point ]*LB + args[ 1 ];
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = ( time[ point ] - args[ 1 ] ) /
-                                         ( 1.0 + LB );
-                     }
-                  }
-               }
-               break;
-
-/* TCB to TDB. */
-/* ----------- */
-/* For the purpose of estimating TDB-TT, we assume UTC is a good approximation 
-   to UT1, and that TT is a good approximation to TDB. */
-            case AST__TCBTOTDB:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = ( time[ point ] - args[ 1 ] ) /
-                                         ( 1.0 + LB );
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += time[ point ]*LB + args[ 1 ];
-                     }
-                  }
-               }
-               break;
-
-/* UT to GMST . */
-/* ------------ */
-            case AST__UTTOGMST:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = Gmsta( time[ point ], args[ 0 ], 1, status );
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = Gmsta( time[ point ], args[ 0 ], 0, status );
-                     }
-                  }
-               }
-               break;
-
-/* GMST to UT. */
-/* ----------- */
-            case AST__GMSTTOUT:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = Gmsta( time[ point ], args[ 0 ], 0, status );
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] = Gmsta( time[ point ], args[ 0 ], 1, status );
-                     }
-                  }
-               }
-               break;
-
-/* GMST to LMST. */
-/* ------------- */
-            case AST__GMSTTOLMST:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 1 ]/D2PI;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 1 ]/D2PI;
-                     }
-                  }
-               }
-               break;
-
-/* LMST to GMST. */
-/* ------------- */
-            case AST__LMSTTOGMST:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 1 ]/D2PI;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 1 ]/D2PI;
-                     }
-                  }
-               }
-               break;
-
-/* UT1 to UTC. */
-/* ------------- */
-            case AST__UTTOUTC:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 0 ]/86400.0;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 0 ]/86400.0;
-                     }
-                  }
-               }
-               break;
-
-
-/* UTC to UT1. */
-/* ------------- */
-            case AST__UTCTOUT:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 0 ]/86400.0;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 0 ]/86400.0;
-                     }
-                  }
-               }
-               break;
-            
-/* LT to UTC. */
-/* ---------- */
-            case AST__LTTOUTC:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 0 ]/24.0;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 0 ]/24.0;
-                     }
-                  }
-               }
-               break;
-
-
-/* UTC to LT. */
-/* ---------- */
-            case AST__UTCTOLT:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] += args[ 0 ]/24.0;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        time[ point ] -= args[ 0 ]/24.0;
-                     }
-                  }
-               }
-               break;
-            
-/* LMST to LAST. */
-/* ------------- */
-/* Calculating the equation of the equinoxes required TDB. So we need to
-   convert the given LMST to TDB. We first convert LMST to UT1. UT1 is
-   equal to UTC to within 1 second. We then add on 32 seconds to get TAI
-   (this value is correct since 1999 - for earlier epochs an error of the
-   order of a minute will be introduced in the TAI value). We then add on
-   TTOFF seconds to get TT. This TT is then used as an approximation to
-   TDB. The total error in TDB is of the order of a few minutes, which
-   corresponds to an error of a few tens of microseconds in the equation of
-   the equinoxes. The sla precession-nutation model is accurate to around 3 
-   mas = 200 us, so the error in TDB will be insignificant. */
-            case AST__LMSTTOLAST:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        gmstx = time[ point ] + args[ 1 ]/D2PI;
-                        tdb = Gmsta( gmstx, args[ 0 ], 0, status ) 
-                              + args[ 0 ] + (32 + TTOFF)/SPD;
-                        time[ point ] += palSlaEqeqx( tdb )/D2PI;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        gmstx = time[ point ] + args[ 1 ]/D2PI;
-                        tdb = Gmsta( gmstx, args[ 0 ], 0, status ) 
-                              + args[ 0 ] + (32+TTOFF)/SPD;
-                        time[ point ] -= palSlaEqeqx( tdb )/D2PI;
-                     }
-                  }
-               }
-               break;
-
-/* LAST to LMST. */
-/* ------------- */
-            case AST__LASTTOLMST:
-               if ( forward ) {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        gmstx = time[ point ] + args[ 1 ]/D2PI;
-                        tdb = Gmsta( gmstx, args[ 0 ], 0, status ) 
-                              + args[ 0 ] + (32+TTOFF)/SPD;
-                        time[ point ] -= palSlaEqeqx( tdb )/D2PI;
-                     }
-                  }
-               } else {
-                  for ( point = 0; point < npoint; point++ ) { 
-                     if ( time[ point ] != AST__BAD ) {
-                        gmstx = time[ point ] + args[ 1 ]/D2PI;
-                        tdb = Gmsta( gmstx, args[ 0 ], 0, status ) 
-                              + args[ 0 ] + (32 + TTOFF)/SPD;
-                        time[ point ] += palSlaEqeqx( tdb )/D2PI;
-                     }
-                  }
-               }
-            
-         }
-      }
-   }
-
-/* If an error has occurred and a new PointSet may have been created, then
-   clean up by annulling it. In any case, ensure that a NULL result is
-   returned.*/
-   if ( !astOK ) {
-      if ( !out ) result = astAnnul( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for TimeMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for TimeMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstTimeMap *in;                /* Pointer to input TimeMap */
-   AstTimeMap *out;               /* Pointer to output TimeMap */
-   int cvt;                       /* Loop counter for coordinate conversions */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output TimeMap structures. */
-   in = (AstTimeMap *) objin;
-   out = (AstTimeMap *) objout;
-
-/* For safety, first clear any references to the input memory from the output
-   TimeMap. */
-   out->cvtargs = NULL;
-   out->cvttype = NULL;
-
-/* Allocate memory for the output array of argument list pointers. */
-   out->cvtargs = astMalloc( sizeof( double * ) * (size_t) in->ncvt );
-
-/* If necessary, allocate memory and make a copy of the input array of
-   coordinate conversion codes. */
-   if ( in->cvttype ) out->cvttype = astStore( NULL, in->cvttype,
-                                               sizeof( int )
-                                               * (size_t) in->ncvt );
-
-/* If OK, loop through each conversion in the input TimeMap and make a copy of
-   its argument list, storing the new pointer in the output argument list
-   array. */
-   if ( astOK ) {
-      for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
-         out->cvtargs[ cvt ] = astStore( NULL, in->cvtargs[ cvt ],
-                                         astSizeOf( in->cvtargs[ cvt ] ) );
-      }
-
-/* If an error occurred while copying the argument lists, loop through the
-   conversions again and clean up by ensuring that the new memory allocated for
-   each argument list is freed. */
-      if ( !astOK ) {
-         for ( cvt = 0; cvt < in->ncvt; cvt++ ) {
-            out->cvtargs[ cvt ] = astFree( out->cvtargs[ cvt ] );
-	 }
-      }
-   }
-
-/* If an error occurred, free all other memory allocated above. */
-   if ( !astOK ) {
-      out->cvtargs = astFree( out->cvtargs );
-      out->cvttype = astFree( out->cvttype );
-   }
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for TimeMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for TimeMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstTimeMap *this;              /* Pointer to TimeMap */
-   int cvt;                       /* Loop counter for coordinate conversions */
-
-/* Obtain a pointer to the TimeMap structure. */
-   this = (AstTimeMap *) obj;
-
-/* Loop to free the memory containing the argument list for each coordinate
-   conversion. */
-   for ( cvt = 0; cvt < this->ncvt; cvt++ ) {
-      this->cvtargs[ cvt ] = astFree( this->cvtargs[ cvt ] );
-   }
-
-/* Free the memory holding the array of conversion types and the array of
-   argument list pointers. */
-   this->cvtargs = astFree( this->cvtargs );
-   this->cvttype = astFree( this->cvttype );
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for TimeMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the TimeMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the TimeMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstTimeMap *this;             /* Pointer to the TimeMap structure */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   const char *sval;             /* Pointer to string value */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt;                     /* Loop counter for conversion steps */
-   int ival;                     /* Integer value */
-   int nargs;                    /* Number of user-supplied arguments */
-   int szargs;                   /* Number of stored arguments */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TimeMap structure. */
-   this = (AstTimeMap *) this_object;
-
-/* Write out values representing the instance variables for the TimeMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Regard this as "set" if it is non-zero. */
-   ival = this->ncvt;
-   set = ( ival != 0 );
-   astWriteInt( channel, "Ntime", set, 0, ival, "Number of conversion steps" );
-
-/* Write out data for each conversion step... */
-   for ( icvt = 0; icvt < this->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Change each conversion type code into an equivalent string and
-   obtain associated descriptive information. If the conversion code
-   was not recognised, report an error and give up. */
-      if ( astOK ) {
-         sval = CvtString( this->cvttype[ icvt ], &comment, 
-                           &nargs, &szargs, argdesc, status );
-         if ( astOK && !sval ) {
-            astError( AST__TIMIN,
-                      "astWrite(%s): Corrupt %s contains invalid TimeMap "
-                      "time coordinate conversion code (%d).", status,
-                      astGetClass( channel ), astGetClass( this ),
-                      (int) this->cvttype[ icvt ] );
-            break;
-         }
-
-/* Create an appropriate keyword and write out the conversion code
-   information. */
-         (void) sprintf( key, "Time%d", icvt + 1 );
-         astWriteString( channel, key, 1, 1, sval, comment );
-
-/* Write out data for each conversion argument... */
-         for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and write out the argument value,
-   accompanied by the descriptive comment obtained above. */
-            if( this->cvtargs[ icvt ][ iarg ] != AST__BAD ) {
-               (void) sprintf( key, "Time%d%c", icvt + 1, ALPHABET[ iarg ] );
-               astWriteDouble( channel, key, 1, 1, this->cvtargs[ icvt ][ iarg ],
-                               argdesc[ iarg ] );
-            }
-         }
-
-/* Quit looping if an error occurs. */
-         if ( !astOK ) break;
-      }
-   }
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsATimeMap and astCheckTimeMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(TimeMap,Mapping)
-astMAKE_CHECK(TimeMap)
-
-AstTimeMap *astTimeMap_( int flags, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astTimeMap
-f     AST_TIMEMAP
-
-*  Purpose:
-*     Create a TimeMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "timemap.h"
-c     AstTimeMap *astTimeMap( int flags, const char *options, ... )
-f     RESULT = AST_TIMEMAP( FLAGS, OPTIONS, STATUS )
-
-*  Class Membership:
-*     TimeMap constructor.
-
-*  Description:
-*     This function creates a new TimeMap and optionally initialises
-*     its attributes.
-*
-*     A TimeMap is a specialised form of 1-dimensional Mapping which can be 
-*     used to represent a sequence of conversions between standard time
-*     coordinate systems.
-*
-*     When a TimeMap is first created, it simply performs a unit
-c     (null) Mapping. Using the astTimeAdd
-f     (null) Mapping. Using the AST_TIMEADD
-c     function, a series of coordinate conversion steps may then be
-f     routine, a series of coordinate conversion steps may then be
-*     added. This allows multi-step conversions between a variety of 
-*     time coordinate systems to be assembled out of a set of building 
-*     blocks.
-*
-*     For details of the individual coordinate conversions available,
-c     see the description of the astTimeAdd function.
-f     see the description of the AST_TIMEADD routine.
-
-*  Parameters:
-c     flags
-f     FLAGS = INTEGER (Given)
-c        This parameter is reserved for future use and should currently
-f        This argument is reserved for future use and should currently
-*        always be set to zero.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new TimeMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-c        If no initialisation is required, a zero-length string may be
-c        supplied.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new TimeMap. The syntax used is identical to that for the
-f        AST_SET routine. If no initialisation is required, a blank
-f        value may be supplied.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astTimeMap()
-f     AST_TIMEMAP = INTEGER
-*        A pointer to the new TimeMap.
-
-*  Notes:
-*     - The nature and units of the coordinate values supplied for the
-*     first input (i.e. the time input) of a TimeMap must be appropriate 
-*     to the first conversion step applied by the TimeMap. For instance, if 
-*     the first conversion step is "MJDTOBEP" (Modified Julian Date to
-*     Besselian epoch) then the coordinate values for the first input should
-*     be date in units of days. Similarly, the nature and units of the 
-*     coordinate values returned by a TimeMap will be determined by the
-*     last conversion step applied by the TimeMap. 
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstTimeMap *new;              /* Pointer to the new TimeMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the TimeMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitTimeMap( NULL, sizeof( AstTimeMap ), !class_init, &class_vtab,
-                        "TimeMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new TimeMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new TimeMap. */
-   return new;
-}
-
-AstTimeMap *astTimeMapId_( int flags, const char *options, ... ) {
-/*
-*  Name:
-*     astTimeMapId_
-
-*  Purpose:
-*     Create a TimeMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     AstTimeMap *astTimeMapId_( int flags, const char *options, ... )
-
-*  Class Membership:
-*     TimeMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astTimeMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astTimeMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astTimeMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astTimeMap_.
-
-*  Returned Value:
-*     The ID value associated with the new TimeMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstTimeMap *new;              /* Pointer to the new TimeMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the TimeMap, allocating memory and initialising the virtual
-   function table as well if necessary. */
-   new = astInitTimeMap( NULL, sizeof( AstTimeMap ), !class_init, &class_vtab,
-                        "TimeMap", flags );
-
-/* If successful, note that the virtual function table has been initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new TimeMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new TimeMap. */
-   return astMakeId( new );
-}
-
-AstTimeMap *astInitTimeMap_( void *mem, size_t size, int init,
-                             AstTimeMapVtab *vtab, const char *name,
-                             int flags, int *status ) {
-/*
-*+
-*  Name:
-*     astInitTimeMap
-
-*  Purpose:
-*     Initialise a TimeMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     AstTimeMap *astInitTimeMap( void *mem, size_t size, int init,
-*                               AstTimeMapVtab *vtab, const char *name,
-*                               int flags )
-
-*  Class Membership:
-*     TimeMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new TimeMap object. It allocates memory (if necessary) to accommodate
-*     the TimeMap plus any additional data associated with the derived class.
-*     It then initialises a TimeMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a TimeMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the TimeMap is to be initialised.
-*        This must be of sufficient size to accommodate the TimeMap data
-*        (sizeof(TimeMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the TimeMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the TimeMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the TimeMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new TimeMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astClass
-*        method).
-*     flags
-*        This parameter is reserved for future use. It is currently ignored.
-
-*  Returned Value:
-*     A pointer to the new TimeMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstTimeMap *new;               /* Pointer to the new TimeMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitTimeMapVtab( vtab, name );
-
-/* Initialise a 1D Mapping structure (the parent class) as the first component
-   within the TimeMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstTimeMap *) astInitMapping( mem, size, 0,
-                                       (AstMappingVtab *) vtab, name,
-                                       1, 1, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the TimeMap data. */
-/* --------------------------- */
-/* The initial state is with no conversions set, in which condition the
-   TimeMap simply implements a unit mapping. */
-      new->ncvt = 0;
-      new->cvtargs = NULL;
-      new->cvttype = NULL;
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstTimeMap *astLoadTimeMap_( void *mem, size_t size,
-                           AstTimeMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadTimeMap
-
-*  Purpose:
-*     Load a TimeMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "timemap.h"
-*     AstTimeMap *astLoadTimeMap( void *mem, size_t size,
-*                               AstTimeMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     TimeMap loader.
-
-*  Description:
-*     This function is provided to load a new TimeMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     TimeMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a TimeMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the TimeMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        TimeMap data (sizeof(TimeMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the TimeMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the TimeMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstTimeMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new TimeMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the TimeMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "TimeMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new TimeMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstTimeMap *new;              /* Pointer to the new TimeMap */
-   char *sval;                   /* Pointer to string value */
-   char key[ KEY_LEN + 1 ];      /* Buffer for keyword string */
-   const char *argdesc[ MAX_ARGS ]; /* Pointers to argument descriptions */
-   const char *comment;          /* Pointer to comment string */
-   int iarg;                     /* Loop counter for arguments */
-   int icvt;                     /* Loop counter for conversion steps */
-   int nargs;                    /* Number of user-supplied arguments */
-   int szargs;                   /* Number of stored arguments */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this TimeMap. In this case the
-   TimeMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstTimeMap );
-      vtab = &class_vtab;
-      name = "TimeMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitTimeMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built TimeMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "TimeMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Number of conversion steps. */
-/* --------------------------- */
-/* Read the number of conversion steps and allocate memory to hold
-   data for each step. */
-      new->ncvt = astReadInt( channel, "ntime", 0 );
-      if ( new->ncvt < 0 ) new->ncvt = 0;
-      new->cvttype = astMalloc( sizeof( int ) * (size_t) new->ncvt );
-      new->cvtargs = astMalloc( sizeof( double * ) * (size_t) new->ncvt );
-
-/* If an error occurred, ensure that all allocated memory is freed. */
-      if ( !astOK ) {
-         new->cvttype = astFree( new->cvttype );
-         new->cvtargs = astFree( new->cvtargs );
-
-/* Otherwise, initialise the argument pointer array. */
-      } else {
-         for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-            new->cvtargs[ icvt ] = NULL;
-         }
-
-/* Read in data for each conversion step... */
-         for ( icvt = 0; icvt < new->ncvt; icvt++ ) {
-
-/* Conversion type. */
-/* ---------------- */
-/* Create an appropriate keyword and read the string representation of
-   the conversion type. */
-            (void) sprintf( key, "time%d", icvt + 1 );
-            sval = astReadString( channel, key, NULL );
-
-/* If no value was read, report an error. */
-            if ( astOK ) {
-               if ( !sval ) {
-                  astError( AST__BADIN,
-                            "astRead(%s): A time coordinate conversion "
-                            "type is missing from the input TimeMap data.", status,
-                            astGetClass( channel ) );
-
-/* Otherwise, convert the string representation into the required
-   conversion type code. */
-               } else {
-                  new->cvttype[ icvt ] = CvtCode( sval, status );
-
-/* If the string was not recognised, report an error. */
-                  if ( new->cvttype[ icvt ] == AST__TIME_NULL ) {
-                     astError( AST__BADIN,
-                              "astRead(%s): Invalid time conversion "
-                              "type \"%s\" in TimeMap data.", status,
-                              astGetClass( channel ), sval );
-                  }
-               }
-
-/* Free the memory holding the string value. */
-               sval = astFree( sval );
-            }
-
-/* Obtain the number of arguments associated with the conversion and
-   allocate memory to hold them. */
-            (void) CvtString( new->cvttype[ icvt ], &comment, 
-                              &nargs, &szargs, argdesc, status );
-            new->cvtargs[ icvt ] = astMalloc( sizeof( double ) *
-                                              (size_t) szargs );
-
-/* Read in data for each argument... */
-            if ( astOK ) {
-               for ( iarg = 0; iarg < szargs; iarg++ ) {
-
-/* Arguments. */
-/* ---------- */
-/* Create an appropriate keyword and read each argument value. */
-                  (void) sprintf( key, "time%d%c", icvt + 1, ALPHABET[ iarg ] );
-                  new->cvtargs[ icvt ][ iarg ] = astReadDouble( channel, key,
-                                                                AST__BAD );
-               }
-            }
-
-/* Quit looping if an error occurs. */
-            if ( !astOK ) break;
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new TimeMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new TimeMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-void astTimeAdd_( AstTimeMap *this, const char *cvt, const double args[], int *status ) {
-   if ( !astOK ) return;
-   (**astMEMBER(this,TimeMap,TimeAdd))( this, cvt, args, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/timemap.h b/ast-5.3-1/timemap.h
deleted file mode 100644
index 8e1c540..0000000
--- a/ast-5.3-1/timemap.h
+++ /dev/null
@@ -1,285 +0,0 @@
-#if !defined( TIMEMAP_INCLUDED )  /* Include this file only once */
-#define TIMEMAP_INCLUDED
-/*
-*+
-*  Name:
-*     timemap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the TimeMap class.
-
-*  Invocation:
-*     #include "timemap.h"
-
-*  Description:
-*     This include file defines the interface to the TimeMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The TimeMap class encapsulates various time coordinate 
-*     conversions. Since, typically, a sequence of these conversions is 
-*     required, a TimeMap can be used to accumulate a series of conversions 
-*     which it then applies in sequence.
-
-*  Inheritance:
-*     The TimeMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        astTransform
-*           Use an TimeMap to transform a set of points.
-
-*     Protected:
-*        astMapMerge
-*           Simplify a sequence of Mappings containing an TimeMap.
-
-*  New Methods Defined:
-*     Public:
-*        astTimeAdd
-*           Add a coordinate conversion step to an TimeMap.
-
-*     Private:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsATimeMap
-*           Test class membership.
-*        astTimeMap
-*           Create an TimeMap.
-
-*     Protected:
-*        astCheckTimeMap
-*           Validate class membership.
-*        astInitTimeMap
-*           Initialise an TimeMap.
-*        astLoadTimeMap
-*           Load an TimeMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstTimeMap
-*           TimeMap object type.
-
-*     Protected:
-*        AstTimeMapVtab
-*           TimeMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     24-MAY-2005 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* TimeMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstTimeMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int *cvttype;                 /* Pointer to array of conversion types */
-   double **cvtargs;             /* Pointer to argument list pointer array */
-   int ncvt;                     /* Number of conversions to perform */
-} AstTimeMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstTimeMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   void (* TimeAdd)( AstTimeMap *, const char *, const double[], int * );
-} AstTimeMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstTimeMapGlobals {
-   AstTimeMapVtab Class_Vtab;
-   int Class_Init;
-} AstTimeMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitTimeMapGlobals_( AstTimeMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(TimeMap)           /* Check class membership */
-astPROTO_ISA(TimeMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstTimeMap *astTimeMap_( int, const char *, int *, ...);
-#else
-AstTimeMap *astTimeMapId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstTimeMap *astInitTimeMap_( void *, size_t, int, AstTimeMapVtab *,
-                             const char *, int, int * );
-
-/* Vtab initialiser. */
-void astInitTimeMapVtab_( AstTimeMapVtab *, const char *, int * );
-
-/* Loader. */
-AstTimeMap *astLoadTimeMap_( void *, size_t, AstTimeMapVtab *,
-                             const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-void astTimeAdd_( AstTimeMap *, const char *, const double[], int * );
-
-#if defined(astCLASS)            /* Protected. */
-double astDat_( double, int, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckTimeMap(this) astINVOKE_CHECK(TimeMap,this,0)
-#define astVerifyTimeMap(this) astINVOKE_CHECK(TimeMap,this,1)
-
-/* Test class membership. */
-#define astIsATimeMap(this) astINVOKE_ISA(TimeMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astTimeMap astINVOKE(F,astTimeMap_)
-#else
-#define astTimeMap astINVOKE(F,astTimeMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitTimeMap(mem,size,init,vtab,name,flags) \
-astINVOKE(O,astInitTimeMap_(mem,size,init,vtab,name,flags,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitTimeMapVtab(vtab,name) astINVOKE(V,astInitTimeMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadTimeMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadTimeMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckTimeMap to validate TimeMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-#define astTimeAdd(this,cvt,args) \
-astINVOKE(V,astTimeAdd_(astCheckTimeMap(this),cvt,args,STATUS_PTR))
-
-#if defined(astCLASS)            /* Protected */
-#define astDat(in,forward) astDat_(in,forward,STATUS_PTR)
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/tpn.c b/ast-5.3-1/tpn.c
deleted file mode 100644
index 3a2f26e..0000000
--- a/ast-5.3-1/tpn.c
+++ /dev/null
@@ -1,382 +0,0 @@
-#include <math.h>
-#include <stdlib.h>
-#include "wcsmath.h"
-#include "wcstrig.h"
-#include "proj.h"
-
-#define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X))
-#define TPN 999
-
-/*============================================================================
-*   TAN: gnomonic projection, with correction terms.
-*
-*   This projection is no longer part of the FITSWCS standard, but is
-*   retained here for use b the AST library as a means of implementing 
-*   the IRAF TNX projection, and the DSS encoding.
-*
-*   Given and/or returned:
-*      prj->p       Array of latitude coefficients
-*      prj->p2      Array of longitude coefficients
-*      prj->flag    TPN, or -TPN if prj->flag is given < 0.
-*      prj->r0      r0; reset to 180/pi if 0.
-*
-*   Returned:
-*      prj->code    "TPN"
-*      prj->phi0     0.0
-*      prj->theta0  90.0
-*      prj->astPRJfwd  Pointer to astTPNfwd().
-*      prj->astPRJrev  Pointer to astTPNrev().
-*      prj->w[ 0 ]     Set to 0.0 if a simple tan projection is required
-*                      (with no polynomial correction). Otherwise, set to 1.0.
-*===========================================================================*/
-
-int astTPNset(prj)
-
-struct AstPrjPrm *prj;
-
-{
-   int m;
-
-   prj->flag   = copysign(TPN, prj->flag);
-   prj->phi0   =  0.0;
-   prj->theta0 = 90.0;
-
-   if (prj->r0 == 0.0) prj->r0 = R2D;
-
-   prj->astPRJfwd = astTPNfwd;
-   prj->astPRJrev = astTPNrev;
-
-/* If all co-efficients have their "unit" values, we do not need to
-   use the polynomial correction. */
-   prj->w[ 0 ] = 0.0;
-
-   if( prj->p[ 0 ] != 0.0 || prj->p2[ 0 ] != 0.0 ) {
-      prj->w[ 0 ] = 1.0;
-
-   } else if( prj->p[ 1 ] != 1.0 || prj->p2[ 1 ] != 1.0 ) {
-      prj->w[ 0 ] = 1.0;
-
-   } else {
-      for( m = 2; m < WCSLIB_MXPAR; m++ ){
-         if( prj->p[ m ] != 0.0 || prj->p2[ m ] != 0.0 ){
-            prj->w[ 0 ] = 1.0;
-            break;
-         } 
-      }   
-   }
-
-   return 0;
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTPNfwd(phi, theta, prj, xx, yy)
-
-const double phi, theta;
-double *xx, *yy;
-struct AstPrjPrm *prj;
-
-{
-   double r, s, xi, eta, x2, xy, y2, r2, x3, x2y, xy2, y3, r3, x4, x3y,
-          x2y2, xy3, y4, x5, x4y, x3y2, x2y3, xy4, y5, r5, x6, x5y, x4y2,
-	  x3y3, x2y4, xy5, y6, x7, x6y, x5y2, x4y3, x3y4, x2y5, xy6, y7,
-	  r7, tol, f, g, fx, fy, gx, gy, dx, dy, x, y, denom;
-   double *a, *b;
-   int i, ok;
-
-   if (abs(prj->flag) != TPN ) {
-      if (astTPNset(prj)) return 1;
-   }
-
-   s = astSind(theta);
-   if (prj->flag > 0 && s < 0.0) {
-      return 2;
-   }
-
-   r =  prj->r0*astCosd(theta)/s;
-   xi =  r*astSind(phi);
-   eta = -r*astCosd(phi);
-
-   /* Simple tan */
-   if( prj->w[ 0 ] == 0.0 ){
-      *xx = xi;
-      *yy = eta;
-
-   /* Tan with polynomial corrections: Iterate using Newton's method to
-      get the (x,y) corresponding to the above (xi,eta). */ 
-   } else {
-      a = prj->p2;
-      b = prj->p;
-
-   /* Initial guess: linear solution assuming a3,... and b3,... are zero. */
-      denom = a[1]*b[1] - a[2]*b[2];
-      if( denom != 0.0 ) {
-         x = ( xi*b[1] - eta*a[2] - a[0]*b[1] + b[0]*a[2] )/denom;
-         y = -( xi*b[2] - eta*a[1] - a[0]*b[2] + b[0]*a[1] )/denom;
-
-      } else {
-         if( a[1] != 0.0 ){
-            x = ( xi - a[0] )/a[1];
-         } else {
-            x = a[0];
-         }
-
-         if( b[1] != 0.0 ){
-            y = ( eta - b[0] )/b[1];
-         } else {
-            y = b[0];
-         }
-      }
-
-/* Iterate up to 50 times, until the required relative accuracy is
-   achieved. */
-      tol = 1.0E-5;
-      ok = 0;
-      for (i = 0; i < 50; i++) {
-
-/* Get required products of the current x and y values */
-         x2 = x*x;
-         xy = x*y;
-         y2 = y*y;
-   
-         r2 = x2 + y2;
-         r = sqrt( r2 );
-   
-         x3 = x2*x;
-         x2y = x2*y;
-         xy2 = x*y2;
-         y3 = y*y2;
-   
-         r3 = r*r2;
-   
-         x4 = x3*x;
-         x3y = x3*y;
-         x2y2 = x2*y2;
-         xy3 = x*y3;
-         y4 = y*y3;
-         
-         x5 = x4*x;
-         x4y = x4*y;
-         x3y2 = x3*y2;
-         x2y3 = x2*y3;
-         xy4 = x*y4;
-         y5 = y*y4;
-   
-         r5 = r3*r2;
-   
-         x6 = x5*x;
-         x5y = x5*y;
-         x4y2 = x4*y2;
-         x3y3 = x3*y3;
-         x2y4 = x2*y4;
-         xy5 = x*y5;
-         y6 = y*y5;
-   
-         x7 = x6*x;
-         x6y = x6*y;
-         x5y2 = x5*y2;
-         x4y3 = x4*y3;
-         x3y4 = x3*y4;
-         x2y5 = x2*y5;
-         xy6 = x*y6;
-         y7 = y*y6;
-   
-         r7 = r5*r2;
-   
-/* Get the xi and eta models corresponding to the current x and y values */
-         f =   a[0]       + a[1]*x     + a[2]*y     + a[3]*r     + a[4]*x2 
-              + a[5]*xy    + a[6]*y2    + a[7]*x3    + a[8]*x2y   + a[9]*xy2   
-              + a[10]*y3   + a[11]*r3   + a[12]*x4   + a[13]*x3y  + a[14]*x2y2 
-              + a[15]*xy3  + a[16]*y4   + a[17]*x5   + a[18]*x4y  + a[19]*x3y2 
-              + a[20]*x2y3 + a[21]*xy4  + a[22]*y5   + a[23]*r5   + a[24]*x6   
-              + a[25]*x5y  + a[26]*x4y2 + a[27]*x3y3 + a[28]*x2y4 + a[29]*xy5  
-              + a[30]*y6   + a[31]*x7   + a[32]*x6y  + a[33]*x5y2 + a[34]*x4y3 
-              + a[35]*x3y4 + a[36]*x2y5 + a[37]*xy6  + a[38]*y7   + a[39]*r7;
-   
-         g =  b[0]       + b[1]*y     + b[2]*x     + b[3]*r     + b[4]*y2 
-              + b[5]*xy    + b[6]*x2    + b[7]*y3    + b[8]*xy2   + b[9]*x2y   
-              + b[10]*x3   + b[11]*r3   + b[12]*y4   + b[13]*xy3  + b[14]*x2y2 
-              + b[15]*x3y  + b[16]*x4   + b[17]*y5   + b[18]*xy4  + b[19]*x2y3
-              + b[20]*x3y2 + b[21]*x4y  + b[22]*x5   + b[23]*r5   + b[24]*y6   
-              + b[25]*xy5  + b[26]*x2y4 + b[27]*x3y3 + b[28]*x4y2 + b[29]*x5y  
-              + b[30]*x6   + b[31]*y7   + b[32]*xy6  + b[33]*x2y5 + b[34]*x3y4 
-              + b[35]*x4y3 + b[36]*x5y2 + b[37]*x6y  + b[38]*x7   + b[39]*r7;
-
-/* Partial derivative of xi wrt x... */
-         fx = a[1]         + a[3]*( (r!=0.0)?(x/r):0.0 ) + 2*a[4]*x + 
-              a[5]*y       + 3*a[7]*x2    + 2*a[8]*xy    + a[9]*y2 + 
-              3*a[11]*r*x  + 4*a[12]*x3   + 3*a[13]*x2y  + 2*a[14]*xy2  + 
-	      a[15]*y3     + 5*a[17]*x4   + 4*a[18]*x3y  + 3*a[19]*x2y2 + 
-	      2*a[20]*xy3  + a[21]*y4     + 5*a[23]*r3*x + 6*a[24]*x5  + 
-              5*a[25]*x4y  + 4*a[26]*x3y2 + 3*a[27]*x2y3 + 2*a[28]*xy4  + 
-	      a[29]*y5     + 7*a[31]*x6   + 6*a[32]*x5y  + 5*a[33]*x4y2 + 
-              4*a[34]*x3y3 + 3*a[35]*x2y4 + 2*a[36]*xy5  + a[37]*y6 + 
-              7*a[39]*r5*x;
-
-/* Partial derivative of xi wrt y... */
-         fy = a[2]         + a[3]*( (r!=0.0)?(y/r):0.0 ) + a[5]*x +
-              2*a[6]*y     + a[8]*x2      + 2*a[9]*xy    + 3*a[10]*y2 +
-	      3*a[11]*r*y  + a[13]*x3     + 2*a[14]*x2y  + 3*a[15]*xy2 +
-	      4*a[16]*y3   + a[18]*x4     + 2*a[19]*x3y  + 3*a[20]*x2y2 +
-	      4*a[21]*xy3  + 5*a[22]*y4   + 5*a[23]*r3*y + a[25]*x5 +
-	      2*a[26]*x4y  + 3*a[27]*x3y2 + 4*a[28]*x2y3 + 5*a[29]*xy4 + 
-              6*a[30]*y5   + a[32]*x6     + 2*a[33]*x5y  + 3*a[34]*x4y2 + 
-              4*a[35]*x3y3 + 5*a[36]*x2y4 + 6*a[37]*xy5  + 7*a[38]*y6 + 
-              7*a[39]*r5*y;
-
-/* Partial derivative of eta wrt x... */
-         gx = b[2]         + b[3]*( (r!=0.0)?(x/r):0.0 ) + b[5]*y +
-              2*b[6]*x     + b[8]*y2      + 2*b[9]*xy    + 3*b[10]*x2 +
-	      3*b[11]*r*x  + b[13]*y3     + 2*b[14]*xy2  + 3*b[15]*x2y +
-	      4*b[16]*x3   + b[18]*y4     + 2*b[19]*xy3  + 3*b[20]*x2y2 +
-	      4*b[21]*x3y  + 5*b[22]*x4   + 5*b[23]*r3*x + b[25]*y5 +
-	      2*b[26]*xy4  + 3*b[27]*x2y3 + 4*b[28]*x3y2 + 5*b[29]*x4y +
-	      6*b[30]*x5   + b[32]*y6     + 2*b[33]*xy5  + 3*b[34]*x2y4 +
-	      4*b[35]*x3y3 + 5*b[36]*x4y2 + 6*b[37]*x5y  + 7*b[38]*x6 +
-	      7*b[39]*r5*x;
-
-/* Partial derivative of eta wrt y... */
-         gy = b[1]         + b[3]*( (r!=0.0)?(y/r):0.0 ) + 2*b[4]*y +
-              b[5]*x       + 3*b[7]*y2    + 2*b[8]*xy    + b[9]*x2 + 
-              3*b[11]*r*y  + 4*b[12]*y3   + 3*b[13]*xy2  + 2*b[14]*x2y  + 
-	      b[15]*x3     + 5*b[17]*y4   + 4*b[18]*xy3  + 3*b[19]*x2y2 + 
-	      2*b[20]*x3y  + b[21]*x4     + 5*b[23]*r3*y + 6*b[24]*y5  + 
-	      5*b[25]*xy4  + 4*b[26]*x2y3 + 3*b[27]*x3y2 + 2*b[28]*x4y  + 
-	      b[29]*x5     + 7*b[31]*y6   + 6*b[32]*xy5  + 5*b[33]*x2y4 +
-	      4*b[34]*x3y3 + 3*b[35]*x4y2 + 2*b[36]*x5y  + b[37]*x6     + 
-              7*b[39]*r5*y;
-
-/* Calculate new x and y values. */
-         f = f - xi;
-         g = g - eta;
-         dx = ( (-f*gy) + (g*fy) ) / ( (fx*gy) - (fy*gx) );
-         dy = ( (-g*fx) + (f*gx) ) / ( (fx*gy) - (fy*gx) );
-         x += dx;
-         y += dy;
-
-/* Check if convergence has been achieved. */
-         if( fabs(dx) <= tol*fabs(x) && fabs(dy) <= tol*fabs(y) ) {
-            ok = 1;
-            break;
-         }
-      }
-
-      *xx = x;
-      *yy = y;
-
-      if( !ok ) return 2;
-
-   }
-
-   return 0;
-
-}
-
-/*--------------------------------------------------------------------------*/
-
-int astTPNrev(x, y, prj, phi, theta)
-
-const double x, y;
-double *phi, *theta;
-struct AstPrjPrm *prj;
-
-{
-   double r, xi, eta, x2, xy, y2, r2, x3, x2y, xy2, y3, r3, x4, x3y,
-          x2y2, xy3, y4, x5, x4y, x3y2, x2y3, xy4, y5, r5, x6, x5y, x4y2,
-	  x3y3, x2y4, xy5, y6, x7, x6y, x5y2, x4y3, x3y4, x2y5, xy6, y7,
-	  r7;
-   double *a, *b;
-
-   if (abs(prj->flag) != TPN ) {
-      if (astTPNset(prj)) return 1;
-   }
-
-   /* Simple tan */
-   if( prj->w[ 0 ] == 0.0 ){
-      xi = x;
-      eta = y;
-
-   /* Tan with polynomial corrections. */
-   } else {
-      x2 = x*x;
-      xy = x*y;
-      y2 = y*y;
-
-      r2 = x2 + y2;
-      r = sqrt( r2 );
-
-      x3 = x2*x;
-      x2y = x2*y;
-      xy2 = x*y2;
-      y3 = y*y2;
-
-      r3 = r*r2;
-
-      x4 = x3*x;
-      x3y = x3*y;
-      x2y2 = x2*y2;
-      xy3 = x*y3;
-      y4 = y*y3;
-      
-      x5 = x4*x;
-      x4y = x4*y;
-      x3y2 = x3*y2;
-      x2y3 = x2*y3;
-      xy4 = x*y4;
-      y5 = y*y4;
-
-      r5 = r3*r2;
-
-      x6 = x5*x;
-      x5y = x5*y;
-      x4y2 = x4*y2;
-      x3y3 = x3*y3;
-      x2y4 = x2*y4;
-      xy5 = x*y5;
-      y6 = y*y5;
-
-      x7 = x6*x;
-      x6y = x6*y;
-      x5y2 = x5*y2;
-      x4y3 = x4*y3;
-      x3y4 = x3*y4;
-      x2y5 = x2*y5;
-      xy6 = x*y6;
-      y7 = y*y6;
-
-      r7 = r5*r2;
-
-      a = prj->p2;
-      xi =   a[0]       + a[1]*x     + a[2]*y     + a[3]*r     + a[4]*x2 
-           + a[5]*xy    + a[6]*y2    + a[7]*x3    + a[8]*x2y   + a[9]*xy2   
-           + a[10]*y3   + a[11]*r3   + a[12]*x4   + a[13]*x3y  + a[14]*x2y2 
-           + a[15]*xy3  + a[16]*y4   + a[17]*x5   + a[18]*x4y  + a[19]*x3y2  
-           + a[20]*x2y3 + a[21]*xy4  + a[22]*y5   + a[23]*r5   + a[24]*x6   
-           + a[25]*x5y  + a[26]*x4y2 + a[27]*x3y3 + a[28]*x2y4 + a[29]*xy5  
-           + a[30]*y6   + a[31]*x7   + a[32]*x6y  + a[33]*x5y2 + a[34]*x4y3 
-           + a[35]*x3y4 + a[36]*x2y5 + a[37]*xy6  + a[38]*y7   + a[39]*r7;
-
-      b = prj->p;
-      eta =  b[0]       + b[1]*y     + b[2]*x     + b[3]*r     + b[4]*y2 
-           + b[5]*xy    + b[6]*x2    + b[7]*y3    + b[8]*xy2   + b[9]*x2y   
-           + b[10]*x3   + b[11]*r3   + b[12]*y4   + b[13]*xy3  + b[14]*x2y2 
-           + b[15]*x3y  + b[16]*x4   + b[17]*y5   + b[18]*xy4  + b[19]*x2y3  
-           + b[20]*x3y2 + b[21]*x4y  + b[22]*x5   + b[23]*r5   + b[24]*y6   
-           + b[25]*xy5  + b[26]*x2y4 + b[27]*x3y3 + b[28]*x4y2 + b[29]*x5y  
-           + b[30]*x6   + b[31]*y7   + b[32]*xy6  + b[33]*x2y5 + b[34]*x3y4 
-           + b[35]*x4y3 + b[36]*x5y2 + b[37]*x6y  + b[38]*x7   + b[39]*r7;
-
-   }
-
-   /* Now do the tan projection */
-   r = sqrt(xi*xi + eta*eta);
-   if (r == 0.0) {
-      *phi = 0.0;
-   } else {
-      *phi = astATan2d(xi, -eta);
-   }
-   *theta = astATan2d(prj->r0, r);
-
-   return 0;
-}
-
diff --git a/ast-5.3-1/tranmap.c b/ast-5.3-1/tranmap.c
deleted file mode 100644
index 328c27b..0000000
--- a/ast-5.3-1/tranmap.c
+++ /dev/null
@@ -1,2327 +0,0 @@
-/*
-*class++
-*  Name:
-*     TranMap
-
-*  Purpose:
-*     Mapping with specified forward and inverse transformations.
-
-*  Constructor Function:
-c     astTranMap
-f     AST_TRANMAP
-
-*  Description:
-*     A TranMap is a Mapping which combines the forward transformation of
-*     a supplied Mapping with the inverse transformation of another
-*     supplied Mapping, ignoring the un-used transformation in each
-*     Mapping (indeed the un-used transformation need not exist).
-*
-*     When the forward transformation of the TranMap is referred to, the
-*     transformation actually used is the forward transformation of the
-*     first Mapping supplied when the TranMap was constructed. Likewise, 
-*     when the inverse transformation of the TranMap is referred to, the
-*     transformation actually used is the inverse transformation of the
-*     second Mapping supplied when the TranMap was constructed.
-
-*  Inheritance:
-*     The TranMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The TranMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The TranMap class does not define any new functions beyond those
-f     The TranMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     10-FEB-2004 (DSB):
-*        Original version.
-*     19-JAN-2005 (DSB):
-*        Fix memory leak.
-*     14-FEB-2006 (DSB):
-*        - Over-ride the astDecompose method.
-*        - Fix bug in MapSplit related to use of invert flags.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS TranMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "permmap.h"             /* Coordinate permutation Mappings */
-#include "cmpmap.h"              /* Compound Mappings */
-#include "unitmap.h"             /* Unit Mappings */
-#include "tranmap.h"             /* Interface definition for this class */
-#include "frame.h"               /* Frames */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-#if defined(THREAD_SAFE)
-static int (* parent_managelock)( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(TranMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(TranMap,Class_Init)
-#define class_vtab astGLOBAL(TranMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstTranMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstTranMap *astTranMapId_( void *, void *, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstMapping *RemoveRegions( AstMapping *, int * );
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void Decompose( AstMapping *, AstMapping **, AstMapping **, int *, int *, int *, int * );
-static int GetObjSize( AstObject *, int * );
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *, int, int, AstObject **, int * );
-#endif
-
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two TranMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     TranMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two TranMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a TranMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the TranMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTranMap *that;        
-   AstTranMap *this;        
-   int nin;
-   int nout;
-   int result;
-   int that_inv1;
-   int that_inv2;
-   int this_inv1;
-   int this_inv2;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two TranMap structures. */
-   this = (AstTranMap *) this_object;
-   that = (AstTranMap *) that_object;
-
-/* Check the second object is a TranMap. We know the first is a
-   TranMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsATranMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* Temporarily re-instate the original Invert flag values. */
-         that_inv1 = astGetInvert( that->map1 );
-         that_inv2 = astGetInvert( that->map2 );
-         this_inv1 = astGetInvert( this->map1 );
-         this_inv2 = astGetInvert( this->map2 );
-
-         astSetInvert( this->map1, this->invert1 );
-         astSetInvert( this->map2, this->invert2 );
-         astSetInvert( that->map1, that->invert1 );
-         astSetInvert( that->map2, that->invert2 );
-
-/* If the Invert flags for the two TranMaps differ, it may still be possible 
-   for them to be equivalent. First compare the TranMaps if their Invert 
-   flags are the same. In this case all the attributes of the two TranMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-            if( astEqual( this->map1, that->map1 ) &&
-                astEqual( this->map2, that->map2 ) ) {
-               result = 1;
-            }
-
-/* If the Invert flags for the two TranMaps differ, the attributes of the two 
-   TranMaps must be inversely related to each other. */
-         } else {
-
-            astInvert( that->map1 );
-            astInvert( that->map2 );
-
-            if( astEqual( this->map1, that->map2 ) &&
-                astEqual( this->map2, that->map1 ) ) {
-               result = 1;
-            }
-
-         }
-
-/* Restore the original Invert flag values. */
-         astSetInvert( this->map1, this_inv1 );
-         astSetInvert( this->map2, this_inv2 );
-         astSetInvert( that->map1, that_inv1 );
-         astSetInvert( that->map2, that_inv2 );
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     TranMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied TranMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the TranMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstTranMap *this;         /* Pointer to TranMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the TranMap structure. */
-   this = (AstTranMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astGetObjSize( this->map1 );
-   result += astGetObjSize( this->map2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static void Decompose( AstMapping *this_mapping, AstMapping **map1, 
-                       AstMapping **map2, int *series, int *invert1, 
-                       int *invert2, int *status ) {
-/*
-*
-*  Name:
-*     Decompose
-
-*  Purpose:
-*     Decompose a Mapping into two component Mappings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     void Decompose( AstMapping *this, AstMapping **map1, 
-*                     AstMapping **map2, int *series,
-*                     int *invert1, int *invert2, int *status )
-
-*  Class Membership:
-*     TranMap member function (over-rides the protected astDecompose
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns pointers to the two Mappings encapsulated by
-*     a TranMap.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping.
-*     map1
-*        Address of a location to receive a pointer to first component
-*        Mapping (the forward Mapping).
-*     map2
-*        Address of a location to receive a pointer to second component
-*        Mapping (the inverse Mapping). 
-*     series
-*        Address of a location to receive a value indicating if the
-*        component Mappings are applied in series or parallel. A non-zero
-*        value means that the supplied Mapping is equivalent to applying map1 
-*        followed by map2 in series. A zero value means that the supplied
-*        Mapping is equivalent to applying map1 to the lower numbered axes
-*        and map2 to the higher numbered axes, in parallel. Zero is
-*        returned for a TranMap.
-*     invert1
-*        The value of the Invert attribute to be used with map1. 
-*     invert2
-*        The value of the Invert attribute to be used with map2. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - Any changes made to the component Mappings using the returned
-*     pointers will be reflected in the supplied Mapping.
-
-*-
-*/
-
-
-/* Local Variables: */
-   AstTranMap *this;             /* Pointer to TranMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TranMap structure. */
-   this = (AstTranMap *) this_mapping;
-
-/* If the TranMap has been inverted, return the Mappings in reverse
-   order with inverted Invert falgs. */
-   if( astGetInvert( this ) ) {
-      if( map1 ) *map1 = astClone( this->map2 );
-      if( map2 ) *map2 = astClone( this->map1 );
-      if( invert1 ) *invert1 = this->invert2 ? 0 : 1;
-      if( invert2 ) *invert2 = this->invert1 ? 0 : 1;
-
-/* If the TranMap has not been inverted, return the Mappings in their
-   original order with their original Invert flags. */
-   } else {
-      if( map1 ) *map1 = astClone( this->map1 );
-      if( map2 ) *map2 = astClone( this->map2 );
-      if( invert1 ) *invert1 = this->invert1;
-      if( invert2 ) *invert2 = this->invert2;
-   }
-}
-
-void astInitTranMapVtab_(  AstTranMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitTranMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a TranMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     void astInitTranMapVtab( AstTranMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     TranMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the TranMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsATranMap) to determine if an object belongs to
-   this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   mapping->RemoveRegions = RemoveRegions;
-
-#if defined(THREAD_SAFE)
-   parent_managelock = object->ManageLock;
-   object->ManageLock = ManageLock;
-#endif
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_mapsplit = mapping->MapSplit;
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->Decompose = Decompose;
-   mapping->MapMerge = MapMerge;
-   mapping->Rate = Rate;
-
-/* Declare the copy constructor, destructor and class dump function. */
-   astSetCopy( vtab, Copy );
-   astSetDelete( vtab, Delete );
-   astSetDump( vtab, Dump, "TranMap", "Compound Transformation Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-#if defined(THREAD_SAFE)
-static int ManageLock( AstObject *this_object, int mode, int extra, 
-                       AstObject **fail, int *status ) {
-/*
-*  Name:
-*     ManageLock
-
-*  Purpose:
-*     Manage the thread lock on an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "object.h"
-*     AstObject *ManageLock( AstObject *this, int mode, int extra, 
-*                            AstObject **fail, int *status ) 
-
-*  Class Membership:
-*     TranMap member function (over-rides the astManageLock protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function manages the thread lock on the supplied Object. The
-*     lock can be locked, unlocked or checked by this function as 
-*     deteremined by parameter "mode". See astLock for details of the way
-*     these locks are used.
-
-*  Parameters:
-*     this
-*        Pointer to the Object.
-*     mode
-*        An integer flag indicating what the function should do:
-*
-*        AST__LOCK: Lock the Object for exclusive use by the calling
-*        thread. The "extra" value indicates what should be done if the
-*        Object is already locked (wait or report an error - see astLock).
-*
-*        AST__UNLOCK: Unlock the Object for use by other threads.
-*
-*        AST__CHECKLOCK: Check that the object is locked for use by the
-*        calling thread (report an error if not).
-*     extra
-*        Extra mode-specific information. 
-*     fail
-*        If a non-zero function value is returned, a pointer to the
-*        Object that caused the failure is returned at "*fail". This may
-*        be "this" or it may be an Object contained within "this". Note,
-*        the Object's reference count is not incremented, and so the
-*        returned pointer should not be annulled. A NULL pointer is 
-*        returned if this function returns a value of zero.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*    A local status value: 
-*        0 - Success
-*        1 - Could not lock or unlock the object because it was already 
-*            locked by another thread.
-*        2 - Failed to lock a POSIX mutex
-*        3 - Failed to unlock a POSIX mutex
-*        4 - Bad "mode" value supplied.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variables: */
-   AstTranMap *this;       /* Pointer to TranMap structure */
-   int result;             /* Returned status value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the supplied pointer is not NULL. */
-   if( !this_object ) return result;
-
-/* Obtain a pointers to the TranMap structure. */
-   this = (AstTranMap *) this_object;
-
-/* Invoke the ManageLock method inherited from the parent class. */
-   if( !result ) result = (*parent_managelock)( this_object, mode, extra,
-                                                fail, status );
-
-/* Invoke the astManageLock method on any Objects contained within
-   the supplied Object. */
-   if( !result ) result = astManageLock( this->map1, mode, extra, fail );
-   if( !result ) result = astManageLock( this->map2, mode, extra, fail );
-
-   return result;
-
-}
-#endif
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a TranMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     TranMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated TranMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated TranMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated TranMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the TranMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        TranMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated TranMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *cmap;              /* Pointer to compound Mapping */
-   AstMapping *cmap_f;           /* Pointer to compound Mapping */
-   AstMapping *cmap_i;           /* Pointer to compound Mapping */
-   AstMapping *hmap1;            /* Pointer to 1st comp of higher TranMap */
-   AstMapping *hmap2;            /* Pointer to 2nd comp of higher TranMap */
-   AstMapping *hmap_f;           /* Pointer to fwd Mapping of higher TranMap */
-   AstMapping *hmap_i;           /* Pointer to inv Mapping of higher TranMap */
-   AstMapping *map1;             /* Pointer to 1st comp of nominated TranMap */
-   AstMapping *map2;             /* Pointer to 2nd comp of nominated TranMap */
-   AstMapping *map_f;            /* Pointer to fwd Mapping of nominated TranMap */
-   AstMapping *map_i;            /* Pointer to inv Mapping of nominated TranMap */
-   AstMapping *smap;             /* Pointer to simplified Mapping */
-   AstMapping *smap_f;           /* Pointer to simplified Mapping */
-   AstMapping *smap_i;           /* Pointer to simplified Mapping */
-   AstTranMap *hmap;             /* Pointer to higher TranMap */
-   AstTranMap *map;              /* Pointer to this TranMap */
-   AstTranMap *new;              /* Pointer to merged TranMap */
-   int i;                        /* Loop count */
-   int old_hinv1;                /* Original Invert flag for hmap->map1 */
-   int old_hinv2;                /* Original Invert flag for hmap->map2 */
-   int old_inv1;                 /* Original Invert flag for this->map1 */
-   int old_inv2;                 /* Original Invert flag for this->map2 */
-   int result;                   /* The value to return */
-
-/* Initialise.*/
-   result = -1;
-
-/* Check the inherited status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to this TranMap. */
-   map = (AstTranMap *) this;
-
-/* Get the two component Mappings,and temporarily set their Invert
-   attributes back to the values they had when the TranMap was created,
-   saving their current Invert values so that they can be re-instated later. */
-   map1 = map->map1;
-   old_inv1 = astGetInvert( map1 );
-   astSetInvert( map1, map->invert1 );
-
-   map2 = map->map2;
-   old_inv2 = astGetInvert( map2 );
-   astSetInvert( map2, map->invert2 );
-
-/* Simplify the TranMap on its own. */
-/* ================================ */
-
-/* If the TranMap is inverted, creat an equal TranMap which is not inverted. 
-   To do this, invert and swap the component Mappings. */
-   if( ( *invert_list )[ where ] ) {
-      astInvert( map1 );
-      astInvert( map2 );
-      new = astTranMap( map2, map1, "", status );
-      astInvert( map1 );
-      astInvert( map2 );
-
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) new;
-      ( *invert_list )[ where ] = 0;
-      result = where;
-
-/* Otherwise, try to simplify each of the component Mappings. */
-   } else {
-      smap_f = astSimplify( map1 );
-      smap_i = astSimplify( map2 );
-
-/* Assume some simplification took place if the pointers have changed. */
-      if( smap_f != map1 || smap_i != map2 ) { 
-
-/* Construct a new TranMap from these simplifgied Mappings. */
-         (void) astAnnul( ( *map_list )[ where ] );
-         ( *map_list )[ where ] = (AstMapping *) astTranMap( smap_f, smap_i, "", status );
-         result = where;
-
-/* Otherwise, if the both component Mappings are defined in both directions... */
-      } else if( astGetTranForward( map1 ) && astGetTranInverse( map1 ) &&    
-                 astGetTranForward( map2 ) && astGetTranInverse( map2 ) ) {
-
-/* Form a series CmpMap from the two component Mappings, with the second
-   Mapping inverted. */
-         astInvert( map2 );
-         cmap = astCmpMap( map1, map2, 1, "", status );
-         astInvert( map2 );
-
-/* If this CmpMap simplifies to a UnitMap, then the two components of the 
-   TranMap are equal, and so we can replace the entire TranMap with either
-   of its components. Note, we leave the supplied invert flag unchanged,
-   since the copycreated below refers to the Mapping as it was when the
-   TranMap was created. However, we invert the returned Mapping if
-   necessary. */
-         smap = astSimplify( cmap );
-         if( astIsAUnitMap( smap ) ) {
-            (void) astAnnul( ( *map_list )[ where ] );
-            ( *map_list )[ where ] = astCopy( map1 );
-            if( ( *invert_list )[ where ] ) astInvert( ( *map_list )[ where ] );
-            result = where;
-         }
-
-/* Release resources. */
-         smap = astAnnul( smap );
-         cmap = astAnnul( cmap );
-      }
-
-/* Release resources. */
-      smap_f = astAnnul( smap_f );
-      smap_i = astAnnul( smap_i );
-   }
-
-/* Merge the TranMap with a neighbouring TranMap. */
-/* ============================================== */
-/* Only do this if no change was made above, and we are combining the
-   Mappings in series. */
-   if( result == -1 && series ) {
-
-/* Is the higher neighbour a TranMap? */
-      if( where < ( *nmap - 1 ) && 
-          astIsATranMap( ( *map_list )[ where + 1 ] ) ){
-
-/* Get the two component Mappings of the higher TranMap, and temporarily set 
-   their Invert attributes back to the values they had when the TranMap was 
-   created, saving their current Invert values so that they can be re-instated 
-   later. */
-         hmap = (AstTranMap *) ( *map_list )[ where + 1 ];
-
-         hmap1 = hmap->map1;
-         old_hinv1 = astGetInvert( hmap1 );
-         astSetInvert( hmap1, hmap->invert1 );
-
-         hmap2 = hmap->map2;
-         old_hinv2 = astGetInvert( hmap2 );
-         astSetInvert( hmap2, hmap->invert2 );
-
-/* Get the Mappings which defines the forward and inverse transformation of 
-   the lower TranMap ("this"). Then, map_f and map_i are pointers to
-   Mappings which could be used to construct a new TranMap which would be
-   equivalent to "this" with the supplied invert setting. */
-         if( ( *invert_list )[ where ] ) {
-            map_f = map2;
-            map_i = map1;
-            astInvert( map_f );
-            astInvert( map_i );
-         } else {
-            map_f = map1;
-            map_i = map2;
-         }
-
-/* Likewise, get the Mappings which defines the forward and inverse 
-   transformation of the higher TranMap. */
-         if( ( *invert_list )[ where + 1 ] ) {
-            hmap_f = hmap2;
-            hmap_i = hmap1;
-            astInvert( hmap_f );
-            astInvert( hmap_i );
-         } else {
-            hmap_f = hmap1;
-            hmap_i = hmap2;
-         }
-
-/* Combine the two forward Mappings together into a series CmpMap, and
-   simplify it. */
-         cmap_f = (AstMapping *) astCmpMap( map_f,  hmap_f, 1, "", status );
-         smap_f = astSimplify( cmap_f );
-
-/* Do the same for the inverse Mappings */
-         cmap_i = (AstMapping *) astCmpMap( map_i,  hmap_i, 1, "", status );
-         smap_i = astSimplify( cmap_i );
-
-/* Was any simplification performed? We assume this is the case if the
-   either of the simplied pointer differs from the original pointer. */
-         if( cmap_f != smap_f || cmap_i != smap_i ) {
-
-/* In which case,construct a new TranMap from the simplified Mappings. */
-            new = astTranMap( smap_f, smap_i, "", status );
-
-         } else {
-            new = NULL;
-         }
-
-/* Free resources.*/
-         cmap_f = astAnnul( cmap_f );
-         smap_f = astAnnul( smap_f );
-         cmap_i = astAnnul( cmap_i );
-         smap_i = astAnnul( smap_i );
-
-/* Re-instate the original Invert values for the component Mappings of
-   the higher TranMap. */
-         astSetInvert( hmap1, old_hinv1 );
-         astSetInvert( hmap2, old_hinv2 );
-
-/* If we have a new TranMap, annul the first of the two Mappings, and replace 
-   it with the merged TranMap. Also set the invert flag. */ 
-         if( new ) {
-            (void) astAnnul( ( *map_list )[ where ] );
-            ( *map_list )[ where ] = (AstMapping *) new;
-            ( *invert_list )[ where ] = 0;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-            (void) astAnnul( ( *map_list )[ where + 1 ] );
-            for ( i = where + 2; i < *nmap; i++ ) {
-               ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-               ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-            }
-
-/* Clear the vacated element at the end. */
-            ( *map_list )[ *nmap - 1 ] = NULL;
-            ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-            ( *nmap )--;
-            result = where;
-         }
-      }
-   }
-
-/* Re-instate the original Invert values for the component Mappings. */
-   astSetInvert( map1, old_inv1 );
-   astSetInvert( map2, old_inv2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     TranMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     TranMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing TranMap. This is only possible if the specified inputs
-*     correspond to some subset of the TranMap outputs. That is, there
-*     must exist a subset of the TranMap outputs for which each output
-*     depends only on the selected TranMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied TranMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the TranMap to be split (the TranMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied TranMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied TranMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied TranMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstMapping *fmap;          /* Pointer to forward Mapping in supplied TranMap */
-   AstMapping *imap;          /* Pointer to inverse Mapping in supplied TranMap */
-   AstMapping *rfmap;         /* Pointer to split forward Mapping */
-   AstMapping *rimap;         /* Pointer to split inverse Mapping */
-   AstTranMap *this;          /* Pointer to TranMap structure */
-   int *ires;                 /* I/ps of inv Mapping dependent on selected o/ps */
-   int *out;                  /* O/ps of fwd Mapping dependent on selected i/ps */
-   int *result;               /* Pointer to returned array */
-   int finv;                  /* Invert flag to use with fmap */
-   int i;                     /* Loop count */
-   int iinv;                  /* Invert flag to use with imap */
-   int nout;                  /* No. of outputs dependent on selected inputs */
-   int ok;                    /* Can required Mapping be created? */
-   int old_finv;              /* Original Invert flag for fmap */
-   int old_iinv;              /* Original Invert flag for imap */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
-   result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
-   if( !result ) {
-
-/* Get a pointer to the TranMap structure. */
-      this = (AstTranMap *) this_map;
-
-/* Get pointers to the forward and inverse Mappings, taking into account
-   whether the TranMap has been inverted. */
-      if( !astGetInvert( this ) ) {
-         fmap = this->map1;
-         finv = this->invert1;
-         imap = this->map2;
-         iinv = this->invert2;
-      } else {
-         imap = this->map1;
-         iinv = !( this->invert1 );
-         fmap = this->map2;
-         finv = !( this->invert2 );
-      }
-
-/* Temporarily set the Invert flag of both Mappings back to their
-   original values. */ 
-      old_finv = astGetInvert( fmap );
-      astSetInvert( fmap, finv );
-      old_iinv = astGetInvert( imap );
-      astSetInvert( imap, iinv );
-
-/* Try to split the forward Mapping. */
-      out = astMapSplit( fmap, nin, in, &rfmap );
-
-/* Check the split could be done. */
-      if( out ) {
-
-/* Get the number of outputs which are fed by the selected inputs. */
-         nout = astGetNout( rfmap );
-
-/* See if the inverse Mapping can be split using these outputs as inputs. */
-         astInvert( imap );
-         ires = astMapSplit( imap, nout, out, &rimap );
-         astInvert( imap );
-         if( ires ) {
-            astInvert( rimap );
-
-/* Check that the resulting inputs are the same as the supplied inputs. */
-            if( astGetNin( rimap ) == nin ) {
-               ok = 1;
-               for( i = 0; i < nin; i++ ) {
-                  if( in[ i ] != ires[ i ] ) {
-                     ok = 0;
-                     break;
-                  }
-               }
-
-/* If so create the required new TranMap. */
-               if( ok ) {
-                  *map = (AstMapping *) astTranMap( rfmap, rimap, "", status );
-                  result = out;
-               }
-            }
-
-/* Free resources. */
-            ires = astFree( ires );
-            rimap = astAnnul( rimap );
-         }
-
-         if( !result ) out = astFree( out );
-         rfmap = astAnnul( rfmap );
-      }
-
-/* Re-instate the Invert flags of the component Mappings. */
-      astSetInvert( fmap, old_finv );
-      astSetInvert( imap, old_iinv );
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     TranMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. Also evaluates the second derivative.
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   AstTranMap *map;
-   AstMapping *cmap;
-   double result;
-   int cinv;
-   int old_inv;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the TranMap structure. */
-   map = (AstTranMap *) this;
-
-/* Choose the component Mapping to use, and get its original Invert
-   value. Invert this if the TranMap itself has been inverted (this is
-   because the astRate function has no "invert" argument so we need to
-   invert the Mapping before calling astRate). */
-   if( astGetInvert( this ) ) {
-      cmap = map->map2;
-      cinv = !(map->invert2);
-   } else {
-      cmap = map->map1;
-      cinv = map->invert1;
-   }
-
-/* Temporarily set the Invert flag of the component Mapping back to its
-   original value. */ 
-   old_inv = astGetInvert( cmap );
-   astSetInvert( cmap, cinv );
-
-/* Use the astRate method of the component Mapping. */
-   result = astRate( cmap, at, ax1, ax2 );
-
-/* Re-instate the Invert flag of the component Mapping. */
-   astSetInvert( cmap, old_inv );
-
-/* Return the result. */
-   return result;
-}
-
-static AstMapping *RemoveRegions( AstMapping *this_mapping, int *status ) {
-/*
-*  Name:
-*     RemoveRegions
-
-*  Purpose:
-*     Remove any Regions from a Mapping.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     AstMapping *RemoveRegions( AstMapping *this, int *status )
-
-*  Class Membership:
-*     TranMap method (over-rides the astRemoveRegions method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function searches the supplied Mapping (which may be a 
-*     compound Mapping such as a TranMap) for any component Mappings 
-*     that are instances of the AST Region class. It then creates a new
-*     Mapping from which all Regions have been removed. If a Region
-*     cannot simply be removed (for instance, if it is a component of a
-*     parallel TranMap), then it is replaced with an equivalent UnitMap 
-*     in the returned Mapping.
-*
-*     The implementation provided by the TranMap class invokes the
-*     astRemoveRegions method on the two component Mappings, and joins
-*     the results together into a new TranMap.
-
-*  Parameters:
-*     this
-*        Pointer to the original Region.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the modified mapping.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the AST error status set, or if it should fail for
-*     any reason.
-*/
-
-/* Local Variables: */
-   AstTranMap *new;              /* Pointer to new TranMap */
-   AstTranMap *this;             /* Pointer to TranMap structure */
-   AstMapping *newmap1;          /* New first component Mapping */
-   AstMapping *newmap2;          /* New second component Mapping */
-   AstMapping *result;           /* Result pointer to return */
-   int nax;                      /* Number of Frame axes */
-   int unit1;                    /* Is new first Mapping a UnitMap? */
-   int unit2;                    /* Is new second Mapping a UnitMap? */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the TranMap. */
-   this = (AstTranMap *) this_mapping;
-
-/* Invoke the astRemoveRegions method on the two component Mappings. */
-   newmap1 = astRemoveRegions( this->map1 );
-   newmap2 = astRemoveRegions( this->map2 );
-
-/* If neither component was modified, just return a clone of the supplied
-   pointer. */
-   if( this->map1 == newmap1 && this->map2 == newmap2 ) {
-      result = astClone( this );
-
-/* Otherwise, we need to create a new Mapping to return. */
-   } else {
-
-/* The implementation of the astRemoveRegions method provided by the
-   Region class returns a Frame rather than a UnitMap. But we need
-   Mappings here, not Frames. So if either of these new Mappings is 
-   a Frame, replace it with an equivalent UnitMap. Also, get flags
-   indicating if either Mapping is a UnitMap.*/
-      if( astIsAFrame( newmap1 ) ) {
-         nax = astGetNin( newmap1 );
-         (void) astAnnul( newmap1 );
-         newmap1 = (AstMapping *) astUnitMap( nax, " ", status );
-         unit1 = 1;
-      } else {
-         unit1 = astIsAUnitMap( newmap1 );
-      }
-   
-      if( astIsAFrame( newmap2 ) ) {
-         nax = astGetNin( newmap2 );
-         (void) astAnnul( newmap2 );
-         newmap2 = (AstMapping *) astUnitMap( nax, " ", status );
-         unit2 = 1;
-      } else {
-         unit2 = astIsAUnitMap( newmap2 );
-      }
-
-/* If both new Mappings are UnitMaps, return an equivalent UnitMap. */
-      if( unit1 && unit2 ) {
-         result = (AstMapping *) astUnitMap( astGetNin( newmap1 ) + 
-                                             astGetNin( newmap2 ), " ", 
-                                             status );
-
-/* Otherwise, return a new TranMap containing the two new Mappings. */
-      } else {
-         new = astCopy( this );
-         (void) astAnnul( new->map1 );
-         (void) astAnnul( new->map2 );
-         new->map1 = astClone( newmap1 );
-         new->map2 = astClone( newmap2 );
-         result = (AstMapping *) new;
-      }
-   }
-
-/* Free resources. */
-   newmap1 = astAnnul( newmap1 );
-   newmap2 = astAnnul( newmap2 );
-
-/* Annul the returned Mapping if an error has occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result. */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a TranMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     TranMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a TranMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required Mapping.
-*     This implies applying each of the TranMap's component Mappings in turn,
-*     either in series or in parallel.
-
-*  Parameters:
-*     this
-*        Pointer to the TranMap.
-*     in
-*        Pointer to the PointSet associated with the input coordinate values.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the TranMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstMapping *cmap;             /* Mapping which defines the required transformation */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstTranMap *map;              /* Pointer to TranMap to be applied */
-   int cinv;                     /* Invert flag when TranMap was created */
-   int old_inv;                  /* Invert flag on entry to this function */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the TranMap. */
-   map = (AstTranMap *) this;
-
-/* Apply the parent Mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We now extend the parent astTransform method by applying the component
-   Mappings of the TranMap to generate the output coordinate values. */
-
-/* Determine whether to apply the forward or inverse Mapping, according to the
-   direction specified and whether the Mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Choose the component Mapping to use, and get its original Invert value. */
-   if( forward ) {
-      cmap = map->map1;
-      cinv = map->invert1;
-   }else {
-      cmap = map->map2;
-      cinv = map->invert2;
-   }
-
-/* Temporarily set the Invert flag of the component Mapping back to its
-   original value. */ 
-   old_inv = astGetInvert( cmap );
-   astSetInvert( cmap, cinv );
-
-/* Use the Transform method of the component Mapping. */
-   result = astTransform( cmap, in, forward, out );
-
-/* Re-instate the Invert flag of the component Mapping. */
-   astSetInvert( cmap, old_inv );
-
-/* If an error occurred, clean up by deleting the output PointSet (if
-   allocated by this function) and setting a NULL result pointer. */
-   if ( !astOK ) {
-      if ( !out ) result = astDelete( result );
-      result = NULL;
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for TranMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for TranMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the component
-*     Mappings within the TranMap.
-*/
-
-/* Local Variables: */
-   AstTranMap *in;                /* Pointer to input TranMap */
-   AstTranMap *out;               /* Pointer to output TranMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output TranMaps. */
-   in = (AstTranMap *) objin;
-   out = (AstTranMap *) objout;
-
-/* For safety, start by clearing any references to the input component
-   Mappings from the output TranMap. */
-   out->map1 = NULL;
-   out->map2 = NULL;
-
-/* Make copies of these Mappings and store pointers to them in the output
-   TranMap structure. */
-   out->map1 = astCopy( in->map1 );
-   out->map2 = astCopy( in->map2 );
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for TranMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for TranMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstTranMap *this;              /* Pointer to TranMap */
-
-/* Obtain a pointer to the TranMap structure. */
-   this = (AstTranMap *) obj;
-
-/* Annul the pointers to the component Mappings. */
-   this->map1 = astAnnul( this->map1 );
-   this->map2 = astAnnul( this->map2 );
-
-/* Clear the remaining TranMap variables. */
-   this->invert1 = 0;
-   this->invert2 = 0;
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for TranMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the TranMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the TranMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstTranMap *this;              /* Pointer to the TranMap structure */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the TranMap structure. */
-   this = (AstTranMap *) this_object;
-
-/* Write out values representing the instance variables for the TranMap
-   class.  Accompany these with appropriate comment strings, possibly
-   depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* First Invert flag. */
-/* ------------------ */
-   ival = this->invert1;
-   set = ( ival != 0 );
-   astWriteInt( channel, "InvA", set, 0, ival,
-                ival ? "First Mapping used in inverse direction" :
-                       "First Mapping used in forward direction" );
-
-/* Second Invert flag. */
-/* ------------------- */
-   ival = this->invert2;
-   set = ( ival != 0 );
-   astWriteInt( channel, "InvB", set, 0, ival,
-                ival ? "Second Mapping used in inverse direction" :
-                       "Second Mapping used in forward direction" );
-
-/* First Mapping. */ 
-/* -------------- */
-   astWriteObject( channel, "MapA", 1, 1, this->map1, 
-                   "Mapping for forward transformation" );
-
-/* Second Mapping. */
-/* --------------- */
-   astWriteObject( channel, "MapB", 1, 1, this->map2,
-                   "Mapping for inverse transformation" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsATranMap and astCheckTranMap functions using the
-   macros defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(TranMap,Mapping)
-astMAKE_CHECK(TranMap)
-
-AstTranMap *astTranMap_( void *map1_void, void *map2_void, const char *options, int *status, ...) {
-/*
-*+
-*  Name:
-*     astTranMap
-
-*  Purpose:
-*     Create a TranMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     AstTranMap *astTranMap( AstMapping *map1, AstMapping *map2, const char *options, int *status, ... )
-
-*  Class Membership:
-*     TranMap constructor.
-
-*  Description:
-*     This function creates a new TranMap and optionally initialises its
-*     attributes.
-
-*  Parameters:
-*     map1
-*        Pointer to the first Mapping (which deinfes the forward
-*        transformation).
-*     map2
-*        Pointer to the second Mapping (which deinfes the inverse
-*        transformation).
-*     options
-*        Pointer to a null terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new TranMap. The syntax used is the same as for the
-*        astSet method and may include "printf" format specifiers identified
-*        by "%" symbols in the normal way.
-*     status
-*        Pointer to the inherited status variable.
-*     ...
-*        If the "options" string contains "%" format specifiers, then an
-*        optional list of arguments may follow it in order to supply values to
-*        be substituted for these specifiers. The rules for supplying these
-*        are identical to those for the astSet method (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     A pointer to the new TranMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-
-*  Implementation Notes:
-*     - This function implements the basic TranMap constructor which is
-*     available via the protected interface to the TranMap class.  A
-*     public interface is provided by the astTranMapId_ function.
-*     - Because this function has a variable argument list, it is
-*     invoked by a macro that evaluates to a function pointer (not a
-*     function invocation) and no checking or casting of arguments is
-*     performed before the function is invoked. Because of this, the
-*     "map1" and "map2" parameters are of type (void *) and are
-*     converted and validated within the function itself.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstTranMap *new;              /* Pointer to new TranMap */
-   AstMapping *map1;             /* Pointer to first Mapping structure */
-   AstMapping *map2;             /* Pointer to second Mapping structure */
-   va_list args;                 /* Variable argument list */
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain and validate pointers to the Mapping structures provided. */
-   map1 = astCheckMapping( map1_void );
-   map2 = astCheckMapping( map2_void );
-   if ( astOK ) {
-
-/* Initialise the TranMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitTranMap( NULL, sizeof( AstTranMap ), !class_init, &class_vtab,
-                           "TranMap", map1, map2 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new TranMap's
-   attributes. */
-         va_start( args, status );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new TranMap. */
-   return new;
-}
-
-AstTranMap *astTranMapId_( void *map1_void, void *map2_void, 
-                           const char *options, ... ) {
-/*
-*++
-*  Name:
-c     astTranMap
-f     AST_TRANMAP
-
-*  Purpose:
-*     Create a TranMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "tranmap.h"
-c     AstTranMap *astTranMap( AstMapping *map1, AstMapping *map2,
-c                           const char *options, ... )
-f     RESULT = AST_TRANMAP( MAP1, MAP2, OPTIONS, STATUS )
-
-*  Class Membership:
-*     TranMap constructor.
-
-*  Description:
-*     This function creates a new TranMap and optionally initialises
-*     its attributes.
-*
-*     A TranMap is a Mapping which combines the forward transformation of
-*     a supplied Mapping with the inverse transformation of another
-*     supplied Mapping, ignoring the un-used transformation in each
-*     Mapping (indeed the un-used transformation need not exist).
-*
-*     When the forward transformation of the TranMap is referred to, the
-*     transformation actually used is the forward transformation of the
-*     first Mapping supplied when the TranMap was constructed. Likewise, 
-*     when the inverse transformation of the TranMap is referred to, the
-*     transformation actually used is the inverse transformation of the
-*     second Mapping supplied when the TranMap was constructed.
-
-*  Parameters:
-c     map1
-f     MAP1 = INTEGER (Given)
-*        Pointer to the first component Mapping, which defines the
-*        forward transformation.
-c     map2
-f     MAP2 = INTEGER (Given)
-*        Pointer to the second component Mapping, which defines the
-*        inverse transformation.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new TranMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new TranMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astTranMap()
-f     AST_TRANMAP = INTEGER
-*        A pointer to the new TranMap.
-
-*  Notes:
-*     - The number of output coordinates generated by the two Mappings
-*     (their Nout attribute) must be equal, as must the number of input
-*     coordinates accepted by each Mapping (their Nin attribute).
-*     - The forward transformation of the first Mapping must exist.
-*     - The inverse transformation of the second Mapping must exist.
-c     - Note that the component Mappings supplied are not copied by
-c     astTranMap (the new TranMap simply retains a reference to
-c     them). They may continue to be used for other purposes, but
-c     should not be deleted. If a TranMap containing a copy of its
-c     component Mappings is required, then a copy of the TranMap should
-c     be made using astCopy.
-f     - Note that the component Mappings supplied are not copied by
-f     AST_TRANMAP (the new TranMap simply retains a reference to
-f     them). They may continue to be used for other purposes, but
-f     should not be deleted. If a TranMap containing a copy of its
-f     component Mappings is required, then a copy of the TranMap should
-f     be made using AST_COPY.
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-
-*  Implementation Notes:
-*     - This function implements the external (public) interface to
-*     the astTranMap constructor function. It returns an ID value
-*     (instead of a true C pointer) to external users, and must be
-*     provided because astTranMap_ has a variable argument list which
-*     cannot be encapsulated in a macro (where this conversion would
-*     otherwise occur).
-*     - Because no checking or casting of arguments is performed
-*     before the function is invoked, the "map1" and "map2" parameters
-*     are of type (void *) and are converted from an ID value to a
-*     pointer and validated within the function itself.
-*     - The variable argument list also prevents this function from
-*     invoking astTranMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the conversions between IDs
-*     and pointers on input/output of Objects.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstTranMap *new;               /* Pointer to new TranMap */
-   AstMapping *map1;             /* Pointer to first Mapping structure */
-   AstMapping *map2;             /* Pointer to second Mapping structure */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise. */
-   new = NULL;
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return new;
-
-/* Obtain the Mapping pointers from the ID's supplied and validate the
-   pointers to ensure they identify valid Mappings. */
-   map1 = astVerifyMapping( astMakePointer( map1_void ) );
-   map2 = astVerifyMapping( astMakePointer( map2_void ) );
-   if ( astOK ) {
-
-/* Initialise the TranMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-      new = astInitTranMap( NULL, sizeof( AstTranMap ), !class_init, &class_vtab,
-                           "TranMap", map1, map2 );
-
-/* If successful, note that the virtual function table has been initialised. */
-      if ( astOK ) {
-         class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new TranMap's
-   attributes. */
-         va_start( args, options );
-         astVSet( new, options, NULL, args );
-         va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return an ID value for the new TranMap. */
-   return astMakeId( new );
-}
-
-AstTranMap *astInitTranMap_( void *mem, size_t size, int init,
-                           AstTranMapVtab *vtab, const char *name,
-                           AstMapping *map1, AstMapping *map2, int *status ) {
-/*
-*+
-*  Name:
-*     astInitTranMap
-
-*  Purpose:
-*     Initialise a TranMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     AstTranMap *astInitTranMap( void *mem, size_t size, int init,
-*                               AstTranMapVtab *vtab, const char *name,
-*                               AstMapping *map1, AstMapping *map2 )
-
-*  Class Membership:
-*     TranMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new TranMap object. It allocates memory (if necessary) to
-*     accommodate the TranMap plus any additional data associated with the
-*     derived class. It then initialises a TranMap structure at the start
-*     of this memory. If the "init" flag is set, it also initialises the
-*     contents of a virtual function table for a TranMap at the start of
-*     the memory passed via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the TranMap is to be initialised.
-*        This must be of sufficient size to accommodate the TranMap data
-*        (sizeof(TranMap)) plus any data used by the derived class. If a
-*        value of NULL is given, this function will allocate the memory itself
-*        using the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the TranMap (plus derived class
-*        data). This will be used to allocate memory if a value of NULL is
-*        given for the "mem" parameter. This value is also stored in the
-*        TranMap structure, so a valid value must be supplied even if not
-*        required for allocating memory.
-*     init
-*        A logical flag indicating if the TranMap's virtual function table
-*        is to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new TranMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     map1
-*        Pointer to the first Mapping.
-*     map2
-*        Pointer to the second Mapping.
-
-*  Returned Value:
-*     A pointer to the new TranMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstTranMap *new;               /* Pointer to new TranMap */
-   int nin;                      /* No. input coordinates for TranMap */
-   int nout;                     /* No. output coordinates for TranMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitTranMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Report an error if map1 has no forward transformation. */
-   if( !astGetTranForward( map1 ) && astOK ) {
-      astError( AST__INTRD, "astInitTranMap(%s): The first supplied Mapping "
-              "is not able to transform coordinates in the forward direction.", status,
-              name );
-   }
-
-/* Report an error if map2 has no inverse transformation. */
-   if( !astGetTranInverse( map2 ) && astOK ) {
-      astError( AST__INTRD, "astInitTranMap(%s): The second supplied Mapping "
-              "is not able to transform coordinates in the inverse direction.", status,
-              name );
-   }
-
-/* Check that the number of coordinates are compatible and report an error if 
-   they are not. */
-   nout = astGetNout( map1 );
-   if ( astGetNout( map2 ) != nout && astOK ) {
-      astError( AST__INNCO, "astInitTranMap(%s): The number of output "
-                      "coordinates per point (%d) for the first Mapping "
-                      "supplied does not match the number of output "
-                      "coordinates (%d) for the second Mapping.", status, name, nout,
-                      astGetNout( map2 ) );
-   }
-
-   nin = astGetNin( map1 );
-   if ( astGetNin( map2 ) != nin && astOK ) {
-      astError( AST__INNCO, "astInitTranMap(%s): The number of input "
-                      "coordinates per point (%d) for the first Mapping "
-                      "supplied does not match the number of input "
-                      "coordinates (%d) for the second Mapping.", status, name, nin,
-                      astGetNin( map2 ) );
-   }
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the TranMap structure, allocating memory if necessary. Specify
-   the number of input and output coordinates and in which directions the
-   Mapping should be defined. */
-   if ( astOK ) {
-      new = (AstTranMap *) astInitMapping( mem, size, 0,
-                                          (AstMappingVtab *) vtab, name,
-                                          nin, nout, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the TranMap data. */
-/* --------------------------- */
-/* Store pointers to the component Mappings. */
-         new->map1 = astClone( map1 );
-         new->map2 = astClone( map2 );
-
-/* Save the initial values of the inversion flags for these Mappings. */
-         new->invert1 = astGetInvert( map1 );
-         new->invert2 = astGetInvert( map2 );
-
-/* If an error occurred, clean up by annulling the Mapping pointers and
-   deleting the new object. */
-         if ( !astOK ) {
-            new->map1 = astAnnul( new->map1 );
-            new->map2 = astAnnul( new->map2 );
-            new = astDelete( new );
-         }
-      }
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstTranMap *astLoadTranMap_( void *mem, size_t size,
-                           AstTranMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadTranMap
-
-*  Purpose:
-*     Load a TranMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "tranmap.h"
-*     AstTranMap *astLoadTranMap( void *mem, size_t size,
-*                               AstTranMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     TranMap loader.
-
-*  Description:
-*     This function is provided to load a new TranMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     TranMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a TranMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the TranMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        TranMap data (sizeof(TranMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the TranMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the TranMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstTranMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new TranMap. If this is NULL, a pointer to
-*        the (static) virtual function table for the TranMap class is
-*        used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "TranMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new TranMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstTranMap *new;               /* Pointer to the new TranMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this TranMap. In this case the
-   TranMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstTranMap );
-      vtab = &class_vtab;
-      name = "TranMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitTranMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built TranMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "TranMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* First Invert flag. */
-/* ------------------ */
-      new->invert1 = astReadInt( channel, "inva", 0 );
-      new->invert1 = ( new->invert1 != 0 );
-
-/* Second Invert flag. */
-/* ------------------- */
-      new->invert2 = astReadInt( channel, "invb", 0 );
-      new->invert2 = ( new->invert2 != 0 );
-
-/* First Mapping. */
-/* -------------- */
-      new->map1 = astReadObject( channel, "mapa", NULL );
-
-/* Second Mapping. */
-/* --------------- */
-      new->map2 = astReadObject( channel, "mapb", NULL );
-
-/* If an error occurred, clean up by deleting the new TranMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new TranMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* None. */
-
-
-
-
diff --git a/ast-5.3-1/tranmap.h b/ast-5.3-1/tranmap.h
deleted file mode 100644
index 1449536..0000000
--- a/ast-5.3-1/tranmap.h
+++ /dev/null
@@ -1,276 +0,0 @@
-#if !defined( TRANMAP_INCLUDED )  /* Include this file only once */
-#define TRANMAP_INCLUDED
-/*
-*+
-*  Name:
-*     tranmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the TranMap class.
-
-*  Invocation:
-*     #include "tranmap.h"
-
-*  Description:
-*     This include file defines the interface to the TranMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc. needed to use this class.
-
-*  Inheritance:
-*     The TranMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Merge a TranMap within a sequence of Mappings.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsATranMap
-*           Test class membership.
-*        astTranMap
-*           Create a TranMap.
-*
-*     Protected:
-*        astCheckTranMap
-*           Validate class membership.
-*        astInitTranMap
-*           Initialise a TranMap.
-*        astInitTranMapVtab
-*           Initialise the virtual function table for the TranMap class.
-*        astLoadTranMap
-*           Load a TranMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstTranMap
-*           TranMap object type.
-*
-*     Protected:
-*        AstTranMapVtab
-*           TranMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     10-FEB-2004 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate Mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* TranMap structure. */
-/* ----------------- */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstTranMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   AstMapping *map1;             /* Pointer to first Mapping */
-   AstMapping *map2;             /* Pointer to second Mapping */
-   int invert1;                  /* Inversion flag for first Mapping */
-   int invert2;                  /* Inversion flag for second Mapping */
-} AstTranMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstTranMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstTranMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstTranMapGlobals {
-   AstTranMapVtab Class_Vtab;
-   int Class_Init;
-} AstTranMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitTranMapGlobals_( AstTranMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(TranMap)           /* Check class membership */
-astPROTO_ISA(TranMap)             /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstTranMap *astTranMap_( void *, void *, const char *, int *, ...);
-#else
-AstTranMap *astTranMapId_( void *, void *, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstTranMap *astInitTranMap_( void *, size_t, int, AstTranMapVtab *,
-                           const char *, AstMapping *, AstMapping *, int * );
-
-/* Vtab initialiser. */
-void astInitTranMapVtab_( AstTranMapVtab *, const char *, int * );
-
-/* Loader. */
-AstTranMap *astLoadTranMap_( void *, size_t, AstTranMapVtab *,
-                           const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckTranMap(this) astINVOKE_CHECK(TranMap,this,0)
-#define astVerifyTranMap(this) astINVOKE_CHECK(TranMap,this,1)
-
-/* Test class membership. */
-#define astIsATranMap(this) astINVOKE_ISA(TranMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astTranMap astINVOKE(F,astTranMap_)
-#else
-#define astTranMap astINVOKE(F,astTranMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitTranMap(mem,size,init,vtab,name,map1,map2) \
-astINVOKE(O,astInitTranMap_(mem,size,init,vtab,name,astCheckMapping(map1),astCheckMapping(map2),STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitTranMapVtab(vtab,name) astINVOKE(V,astInitTranMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadTranMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadTranMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckTranMap to validate TranMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/unit.c b/ast-5.3-1/unit.c
deleted file mode 100644
index 3f2634b..0000000
--- a/ast-5.3-1/unit.c
+++ /dev/null
@@ -1,6224 +0,0 @@
-/*
-*  Name:
-*     unit.c
-
-*  Purpose:
-*     Implement unit conversion functions.
-
-*  Description:
-*     This file implements the Unit module which is used for identifying
-*     units and transforming between them. It follows the recommendations
-*     for unit handling contained within FITS WCS paper I (Greisen &
-*     Calabretta). All methods have protected access.
-
-*  Methods:
-*     astUnitMapper: Create a Mapping between two systems of units.
-*     astUnitLabel: Returns a label for a given unit symbol.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     10-DEC-2002 (DSB):
-*        Original version.
-*     10-FEB-2004 (DSB):
-*        Added debug conditional code to keep track of memory leaks.
-*     15-JUL-2004 (DSB):
-*        In astUnitMapper: if no Mapping can be found from input to
-*        output units (e.g. because fo the less than perfect simplication
-*        algorithm in SimplifyTree), try finding a Mapping from output to 
-*        input units and inverting the result.
-*     14-DEC-2004 (DSB):
-*        In CreateTree, move the invocation of FixConstants from after 
-*        InvertConstants to before InvertConstants. This is because
-*        InvertConstants ignores nodes which contain all constant
-*        arguments. This results in constants not being inverted in
-*        expressions such as "1/60 deg" (because all arguments are 
-*        constant in the the "1/60" node).
-*     18-JAN-2005 (DSB):
-*        Fix memory leaks.
-*     2-FEB-2005 (DSB):
-*        - Avoid using astStore to allocate more storage than is supplied
-*        in the "data" pointer. This can cause access violations since 
-*        astStore will then read beyond the end of the "data" area.
-*     15-FEB-2005 (DSB):
-*        - Modified CleanExp to fix up some common units mistakes.
-*     21-FEB-2005 (DSB):
-*        - Modified CleanExp to accept <word><digit> as equivalent to 
-*        <word>^<digit>.
-*        - Modified MakeTree to do case insensitive checking if case
-*        sensitive checking failsto produce a match to a multiplier/unit
-*        symbol combination. If this still produces no match, do a case
-*        insensitive match for multiplier/unit label.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     6-APR-2006 (DSB):
-*        Modify CleanExp to convert "MJY/STER" to standard form ("MJy/sr").
-*     7-JUL-2006 (DSB):
-*        Correct initialisation of "word" flag in CleanExp. 
-*     17-MAY-2007 (DSB):
-*        Simplify the units string returned by astUnitNormaliser.
-*        - Fix indexing bug in CombineFactors.
-*     26-MAY-2007 (DSB):
-*        - Correct error reporting in astUNitNormaliser.
-*        - Fix bug in CleanExp that caused (for example) "-2" to be
-*        converted to "^-2".
-*     2-DEC-2008 (DSB):
-*        Correct memory allocation bug in CleanExp.
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Define the astCLASS macro (even although this is not a class
-   implementation) to obtain access to the protected error and memory
-   handling functions. */
-#define astCLASS
-#define PI 3.141592653589793
-#define E 2.718281828459045
-
-/* Macro which returns the nearest integer to a given floating point 
-   value. */
-#define NINT(x) (int)((x)+(((x)>0.0)?0.5:-0.5))
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Macro identifying a character as lower or upper case letter, digit or
-+ or -. */
-#define ISWORD(c) (isalnum(c)||((c)=='+')||((c)=='-'))
-
-/* The number of basic dimension quantities used for dimensional analysis. 
-   In addition to the usual M, L and T, this includes pseudo-dimensions 
-   describing strictly dimensionless quantities such as plane angle, 
-   magnitude, etc. */
-#define NQUANT 9
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "error.h"               
-#include "memory.h"              
-#include "pointset.h"            
-#include "mapping.h"             
-#include "unitmap.h"             
-#include "zoommap.h"             
-#include "mathmap.h"             
-#include "unit.h"                
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-
-#ifdef THREAD_SAFE
-#include <pthread.h>
-#endif
-
-/* Module Type Definitions. */
-/* ======================== */
-
-/* This declaration enumerates the codes for the operations which may
-   legally be included in a units expression. */
-typedef enum {
-   OP_LDCON,                     /* Load constant */
-   OP_LDVAR,                     /* Load variable */
-   OP_LOG,                       /* Common logarithm */
-   OP_LN,                        /* Natural logarithm */
-   OP_EXP,                       /* Natural exponential */
-   OP_SQRT,                      /* Square root */
-   OP_POW,                       /* Exponentiate */
-   OP_DIV,                       /* Division */
-   OP_MULT,                      /* Multiplication */
-   OP_LDPI,                      /* Load constant PI */
-   OP_LDE,                       /* Load constant E */
-   OP_NULL                       /* Null operation */
-} Oper;
-
-/* A structure describing a standard multiplier prefix. */
-typedef struct Multiplier {
-   const char *label;       /* Multipler label string (null terminated) */
-   const char *sym;         /* Multipler symbol string (null terminated) */
-   int symlen;              /* Length of symbol (without trailing null ) */
-   int lablen;              /* Length of label (without trailing null ) */
-   double scale;            /* The scale factor associated with the prefix */
-   struct Multiplier *next; /* Next Multiplier in linked list */
-} Multiplier;
-
-/* A structure describing a single node in a tree representation of a
-   single units expression. */
-typedef struct UnitNode {
-   Oper opcode;             /* Code for operation performed by this node */
-   int narg;                /* No. of arguments used by the operation */
-   struct UnitNode **arg;   /* Array of pointers to argument nodes */
-   double con;              /* Constant to be loaded by OP_LDCON operations */
-   struct KnownUnit *unit;  /* Known unit referred to by OP_LDVAR nodes */
-   Multiplier *mult;        /* Multiplier used by OP_LDVAR nodes */
-   const char *name;        /* User-defined unit referred to by OP_LDVAR 
-                               nodes (no multiplier prefix included) */
-} UnitNode;
-
-/* A structure describing a known unit. */
-typedef struct KnownUnit {
-   const char *sym;         /* Unit symbol string (null terminated) */
-   const char *label;       /* Unit label string (null terminated) */
-   int symlen;              /* Length of symbol (without trailing null ) */
-   int lablen;              /* Length of label (without trailing null ) */
-   struct UnitNode *head;   /* Head of definition tree (NULL for basic units) */
-   struct KnownUnit *next;  /* Next KnownUnit in linked list */
-   struct KnownUnit *use;   /* KnownUnit to be used in place of this one */
-} KnownUnit;
-
-/* Module Variables. */
-/* ================= */
-
-/* A pointer to the KnownUnit structure at the head of a linked list of
-   such structures containing definitions of all known units. */
-static KnownUnit *known_units = NULL;
-
-/* An array of pointers to KnownUnits which list the basic quantities
-used in dimensional analysis. */
-static KnownUnit *quant_units[ NQUANT ];
-
-/* A pointer to the Multiplier structure at the head of a linked list of
-   such structures containing definitions of all known multipliers. */
-static Multiplier *multipliers = NULL;
-
-/* Set up mutexes */
-#ifdef THREAD_SAFE
-
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX1 pthread_mutex_lock( &mutex1 ); 
-#define UNLOCK_MUTEX1 pthread_mutex_unlock( &mutex1 ); 
-
-static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX2 pthread_mutex_lock( &mutex2 ); 
-#define UNLOCK_MUTEX2 pthread_mutex_unlock( &mutex2 ); 
-
-#else
-
-#define LOCK_MUTEX1 
-#define UNLOCK_MUTEX1 
-
-#define LOCK_MUTEX2
-#define UNLOCK_MUTEX2
-
-#endif
-
-/* Prototypes for Private Functions. */
-/* ================================= */
-static AstMapping *MakeMapping( UnitNode *, int * );
-static KnownUnit *GetKnownUnits( int, int * );
-static Multiplier *GetMultipliers( int * );
-static UnitNode *ConcatTree( UnitNode *, UnitNode *, int * );
-static UnitNode *CopyTree( UnitNode *, int * );
-static UnitNode *CreateTree( const char *, int, int, int * );
-static UnitNode *FixUnits( UnitNode *, UnitNode *, int * );
-static UnitNode *FreeTree( UnitNode *, int * );
-static UnitNode *MakeTree( const char *, int, int, int * );
-static UnitNode *MakeLabelTree( const char *, int, int * );
-static UnitNode *NewNode( UnitNode *, Oper, int * );
-static UnitNode *CombineFactors( UnitNode **, double *, int, double, int * );
-static const char *CleanExp( const char *, int * );
-static int EndsWith( const char *, int, const char *, int * );
-static int CmpTree( UnitNode *, UnitNode *, int, int * );
-static void FixConstants( UnitNode **, int, int * );
-static void InvertConstants( UnitNode **, int * );
-static UnitNode *InvertTree( UnitNode *, UnitNode *, int * );
-static void LocateUnits( UnitNode *, UnitNode ***, int *, int * );
-static void MakeKnownUnit( const char *, const char *, const char *, int * );
-static void MakeUnitAlias( const char *, const char *, int * );
-static void RemakeTree( UnitNode **, int * );
-static int SimplifyTree( UnitNode **, int, int * );
-static int ComplicateTree( UnitNode **, int * );
-static int ReplaceNode( UnitNode *, UnitNode *, UnitNode *, int * );
-static void FindFactors( UnitNode *, UnitNode ***, double **, int *, double *, int * );
-static const char *MakeExp( UnitNode *, int, int, int * );
-static int DimAnal( UnitNode *, double[NQUANT], double *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static int SplitUnit( const char *, int, const char *, int, Multiplier **, int *, int * );
-static UnitNode *ModifyPrefix( UnitNode *, int * );
-static int ConStart( const char *, double *, int *, int * );
-
-/*  Debug functions... 
-static const char *DisplayTree( UnitNode *, int );
-static void OpSym( UnitNode *, char * );
-static const char *OpName( Oper );
-static const char *TreeExp( UnitNode * );
-*/
-
-/* Function implementations. */
-/* ========================= */
-static const char *CleanExp( const char *exp, int *status ) {
-/*
-*  Name:
-*     CleanExp
-
-*  Purpose:
-*     Produce a clean copy of a units expression.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     const char *CleanExp( const char *exp )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a pointer to dynamic memory containing a
-*     cleaned copy of the supplied units expression. Cleaning consists of
-*     the following operations:
-*        - removal of leading and trailing white space.
-*        - replacement of multiple adjacent spaces by a single space
-*        - removal of spaces adjacent to a parenthesis
-*        - removal of spaces adjacent to a binary operator
-*        - translates various common non-standard units into equivalent
-*          standard units.
-*
-*     Such carefull handling of spaces is necessary since a space is 
-*     recognised by the MakeTree function as a multiplication operator.
-
-*  Parameters:
-*     exp
-*        A pointer to the expression to be cleaned.
-
-*  Returned Value:
-*     A pointer to the cleaned expression, which should be freed using
-*     astFree when no longer needed.
-
-*  Notes:
-*     - This function returns NULL if it is invoked with the global error 
-*     status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   char **tok;
-   char *p;
-   char *r;
-   char *result;
-   char *s;
-   char *t;
-   char *w;
-   const char *start;
-   int i;
-   int l;
-   int len;
-   char *tt;
-   int ntok;
-   int po;
-   int ps;
-   int word;
-
-/* Initialise */
-   result = NULL;
-
-/* Check inherited status */
-   if( !astOK ) return result;
-
-/* Split the supplied string up into tokens. Each block of contiguous
-   alphanumeric characters is a token. Each contiguous block of 
-   non-alphanumerical characters is also a token. The + and - signs are
-   counted as alphanumeric. */
-   start = exp;
-   p = (char *) exp - 1;
-   word = ISWORD( *( p + 1 ) );
-   ntok = 0;
-   tok = NULL;
-   while( *(++p) ){
-      if( word ) {
-         if( !ISWORD( *p ) ) {
-            l = p - start;
-            t = astStore( NULL, start, l + 1 );
-            if( t ) t[ l ] = 0;            
-            tok = astGrow( tok, ntok + 1, sizeof( char * ) );
-            if( tok ) tok[ ntok++ ] = t;
-            start = p;
-            word = 0;
-         }
-      } else {
-         if( ISWORD( *p ) ) {
-            l = p - start;
-            t = astStore( NULL, start, l + 1 );
-            if( t ) t[ l ] = 0;            
-            tok = astGrow( tok, ntok + 1, sizeof( char * ) );
-            if( tok ) tok[ ntok++ ] = t;
-            start = p;
-            word = 1;
-         }
-      }
-   }
-
-   l = p - start;
-   t = astStore( NULL, start, l + 1 );
-   if( t ) t[ l ] = 0;            
-   tok = astGrow( tok, ntok + 1, sizeof( char * ) );
-   if( tok ) tok[ ntok++ ] = t;
-
-/* Check the tokens for known non-standard unit syntax, and replace with the 
-   equivalent standard syntax. Starlink SPLAT has a class called UnitUtilities 
-   which has more of these common units mistakes. AST has to be a bit
-   more conservative than SPLAT though because of its wider remit. */
-   len = 0;
-   tt = NULL;
-   for( i = 0; i < ntok; i++ ) {
-      t = tok[ i ];
-      l = strlen( t );
-      tt = astStore( tt, t, l + 1 );
-
-/* Any alphabetical word followed by a digit is taken as <word>^<digit>. 
-   Any alphabetical word followed by a sign and a digit is taken as 
-   <word>^<sign><digit>. */
-      if( l > 1 && *t != '-' && *t != '+' && 
-          strcspn( t, "0123456789" ) == l - 1 ) {
-         tok[ i ] = astMalloc( l + 2 );
-         if( tok[ i ] ) {
-            strcpy( tok[ i ], t );
-            w = t + l - 2;
-            if( *w != '+' && *w != '-' ) {
-               tok[ i ][ l - 1 ] = '^';
-               strcpy( tok[ i ] + l, t + l - 1 );
-            } else {
-               tok[ i ][ l - 2 ] = '^';
-               strcpy( tok[ i ] + l - 1, t + l - 2 );
-            }
-            t = astFree( t );
-         }
-         l++;
-
-/* If the word ends with "micron" change to "(<start>m*1.0E-6)". Should be OK 
-   for things like "Kmicron". */
-      } else if( ( s = strstr( t, "micron" ) ) ) {
-         tok[ i ] = astMalloc( s - t + 11 );
-         if( tok[ i ] ) {
-            w = tok[ i ];
-            *(w++) = '(';
-            if( s > t ) {
-               strncpy( w, t, s - t );
-               w += s - t;
-            }
-            strcpy( w, "m*1.0E-6)" );
-            l = s - t + 11;
-            t = astFree( t );
-         }
-
-/* Convert "STER" to "sr". */
-      } else if( !Ustrcmp( t, "STER", status ) ) {
-         tok[ i ] = astStore( NULL, "sr", 3 );
-         l = 2;
-         t = astFree( t );
-
-/* If the word ends with "JY" and is preceeded by a single character, change 
-   to "<start>Jy". Should be OK for things like "MJY". */
-      } else if( l == 3 && !strcmp( t + 1, "JY" ) ) {
-         tok[ i ][ 2 ] = 'y';
-
-/* If the word begins with "nano" (case-insensitive) change "nano" to
-   "n". Such changes are usually handled by SplitUnit, but we need to
-   handle this as a special case here since scanf seems to read "nan" as 
-   a string representation of NaN. */
-      } else if( !Ustrncmp( t, "nano", 4, status ) ) {
-         tok[ i ] = astStore( NULL, t + 3, l - 2 );
-         if( tok[ i ] ) {
-            *(tok[ i ]) = 'n';
-            t = astFree( t );
-         }
-         l -= 3;
-      }
-
-/* Update the total length of the string. */
-      len += l;
-   }
-   tt = astFree( tt );
-
-/* Concatentate the tokens into a single string, freeing the individual
-   strings. */
-   result = astMalloc( len + 1 );
-   if( result ) {
-      p = result;
-      for( i = 0; i < ntok; i++ ) {
-         len = strlen( tok[ i ] );
-         memcpy( p, tok[ i ], len );
-         p += len;
-         tok[ i ] = astFree( tok[ i ] );
-      }
-      *p = 0;
-      tok = astFree( tok );
-
-/* Now do other cleaning. 
-   ---------------------- */
-
-/* Initialise a pointer to the previous character read from the string. */
-      r = result - 1;
-
-/* Initialise a pointer to the next character to be written to the string. */
-      w = result;
-
-/* Pretend the previous character written to the string was a space. */
-      ps = 1;
-
-/* Read all the supplied string, copying it to earlier parts of the
-   string discarding leading spaces and multiple adjacent embedded spaces in
-   the process. */
-      while( *(++r) ) {
-
-/* If the character read is a space, only write it to the string if the
-   previous character written was not a space (in which case set a flag
-   to indicate that the previous character written to the string is now a
-   space). */
-         if( isspace( *r ) ) {
-            if( !ps ) {
-               *(w++) = *r;
-               ps = 1;
-            }
-
-/* Write all non-space characters to the string, and clear the flag which 
-   indicates if the previous character written to the string was a space. */
-         } else {
-            *(w++) = *r;
-            ps = 0;
-         }
-      }
-
-/* If the last character written to the string was a space, reduce the
-   length of the string by one since we do not want any trailing spaces. */
-      if( ps ) w--;
-
-/* Terminate the string. */
-      *w = 0;
-
-/* We now need to pass through the string again, this time removing any
-   spaces which are adjacent to a binary operator or a parenthesis. */
-      r = result - 1;
-      w = result;
-      ps = 0;
-      po = 0;
-      while( *(++r) ) {
-
-/* If the current character is a space, only write it if the previous
-   written character was not an operator or parenthesis. */
-         if( isspace( *r ) ) {
-            if( !po ) {
-               *(w++) = *r;
-               po = 1;
-               ps = 1;
-            }
-
-/* If the current character is an operator or parenthesis, back up one 
-   character before writing it out if the previous written character was 
-   a space. */
-         } else if( *r == '*' || *r == '/' || *r == '^' || *r == '.' ||
-                    *r == ')' || *r == '(' ) {
-            if( ps ) w--;
-            *(w++) = *r;
-            po = 1;
-            ps = 0;
-
-/* If the current character is not a space and not an operator symbol, 
-   just write it out. */
-         } else {
-            *(w++) = *r;
-            po = 0;
-            ps = 0;
-         }
-      }
-
-/* Terminate the string. */
-      if( ps ) w--;
-      *w = 0;
-
-   }
-
-/* Return the result. */
-   return (const char *) result;
-}
-
-static int CmpTree( UnitNode *tree1, UnitNode *tree2, int exact, int *status ) {
-/*
-*  Name:
-*     CmpTree
-
-*  Purpose:
-*     Compares two trees of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int CmpTree( UnitNode *tree1, UnitNode *tree2, int exact, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a zero value if the two trees are
-*     equivalent. This requires the trees to have identical structure
-*     except that, if "exact" is zero, arguments for OP_MULT nodes can 
-*     be swapped.
-*
-*     If the trees are not equivalent then a value of +1 or -1 is returned
-*     depending on whether tree1 should be placed before or after tree2
-*     in a sorted list of trees.
-
-*  Parameters:
-*     tree1
-*        A pointer to the UnitNode at the head of the first tree.
-*     tree2
-*        A pointer to the UnitNode at the head of the second tree.
-*     exact
-*        If non-zero, then OP_MULT nodes must have their arguments the
-*        same way round in order for the OP_MULT nodes to match. Otherwise,
-*        OP_MULT nodes with equivalent arguments match even if the
-*        arguments are swapped.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the two trees are equal. +1 if tree1 should be placed before 
-*     tree2 in a sorted list of trees. -1 if tree1 should be placed after
-*     tree2 in a sorted list of trees.
-
-* Notes:
-*     - Zero is returned if an error has already occurred, or
-*     if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
-   int result;
-   int i;
-   Oper op;
-
-/* Initialise. */
-   result = 0;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* If the op codes differ, compare them as integers. */
-   op = tree1->opcode;
-   if( op != tree2->opcode ) {
-      result = ( op > tree2->opcode ) ? 1: -1;
-
-/* If both supplied nodes are OP_LDVAR nodes, compare the associated names. */
-   } else if( op == OP_LDVAR ){
-      result = strcmp( tree1->name, tree2->name );
-
-/* If both supplied nodes are constant nodes, compare the constant values. */
-   } else if( tree1->con != AST__BAD ){
-      result = EQUAL( tree1->con, tree2->con ) ? 0 : ( 
-                 ( tree1->con > tree2->con ) ? 1 : -1 ); 
-
-/* Otherwise, compare the arguments for the node. */
-   } else {
-      for( i = 0; i < tree1->narg; i++ ) {
-         result = CmpTree( tree1->arg[ i ], tree2->arg[ i ], exact, status );
-         if( result ) break;
-      }
-
-/* If the head nodes of the two trees are OP_MULT nodes, and the above
-   check determined they are different, this may be just because they 
-   have their operands swapped. If "exact" si zero, this is considered an 
-   insignificant difference between the two trees which we should ignore. 
-   To check for this try comparing the arguments again, this time swapping 
-   the arguments of tree2. */
-      if( result && op == OP_MULT && !exact ) {
-         for( i = 0; i < tree1->narg; i++ ) {
-            result = CmpTree( tree1->arg[ i ], tree2->arg[ 1 - i ], 0, status );
-            if( result ) break;
-         }
-      }
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the answer. */
-   return result;
-}
-
-static UnitNode *CombineFactors( UnitNode **factors, double *powers, 
-                                 int nfactor, double coeff, int *status ) {
-/*
-*  Name:
-*     CombineFactors
-
-*  Purpose:
-*     Create a tree which represents the product of the supplied factors.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *CombineFactors( UnitNode **factors, double *powers, 
-*                               int nfactor, double coeff, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function createa a tree of UnitNodes which represents the
-*     product of the supplied factors, and the supplied coefficient.
-*     The factors are sorted before being combined, using the sort order
-*     implemented by the CmpTree function.
-
-*  Parameters:
-*     factors
-*        A pointer to an array with "nfactor" elements, each element being 
-*        a pointer to a UnitNode which is a factor of the required tree.
-*        On exit, the array is sorted.
-*     powers
-*        A pointer to an array with "nfactor" elements, each element being a 
-*        double holding the power of the associated factor in "factors".
-*        On exit, the array reflects the sorting applied to "factors".
-*     nfactor
-*        The number of elements in the "factors" and "powers" arrays. 
-*     coeff
-*        The overall coefficient to be applied to the product of the factors. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a UnitNode which is at the head of the new tree.
-
-* Notes:
-*     - A NULL pointer is returned if an error has already occurred, or
-*     if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
-   UnitNode *result;
-   int i;
-   int j;
-   int jp;
-   int done;
-   UnitNode *ftmp;
-   UnitNode *node1;
-   UnitNode *node2;
-   UnitNode *pnode;
-   double ptmp;
-  
-/* Initialise. */
-   result = NULL;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Sort the supplied list of factors, modifying the powers array
-   correspondingly. A simple bubblesort algorithm is used since there
-   will only be a handfull of factors. */
-   for( i = nfactor - 1; i > 0; i-- ) {
-      done = 1;
-      for( j = 0, jp = 1; j < i; j++, jp++ ) {
-         if( CmpTree( factors[ j ], factors[ jp ], 0, status ) > 0 ) {
-            ftmp = factors[ j ];
-            factors[ j ] = factors[ jp ];
-            factors[ jp ] = ftmp;
-
-            ptmp = powers[ j ];
-            powers[ j ] = powers[ jp ];
-            powers[ jp ] = ptmp;
-
-            done = 0;
-         }
-      }
-      if( done ) break;
-   }
-
-/* The first root term of the returned tree is the coefficient, unless the
-   coefficient is 1.0, in which case it will be the first factor. */
-   if( coeff != 1.0 ) {
-      node1 = NewNode( NULL, OP_LDCON, status );
-      if( astOK ) node1->con = coeff;
-   } else {
-      node1 = NULL;
-   }
-
-/* Loop through the factors. */
-   for( i = 0; i < nfactor; i++ ) {
-
-/* If the power of this factor is zero, we ignore the factor. */
-      if( powers[ i ] != 0.0 ) {
-
-/* If the power of this factor is one, we use the factor directly. */
-         if( EQUAL( powers[ i ], 1.0 ) ) {
-            node2 = CopyTree( factors[ i ], status );
-
-/* Otherwise, for non-zero, non-unity powers, we create a POW node for 
-   the factor. */
-         } else {
-            node2 = NewNode( NULL, OP_POW, status );
-            pnode = NewNode( NULL, OP_LDCON, status );
-            if( astOK ) {
-               pnode->con = powers[ i ];
-               node2->arg[ 0 ] = CopyTree( factors[ i ], status );
-               node2->arg[ 1 ] = pnode;
-            }
-         }
-
-/* We now combine node1 and node2 using an OP_MULT node, which becomes
-   the "node1" for the next pass. On the first pass we may have no node1 (if 
-   the supplied coefficient was 1.0), in which case we reserve the current 
-   node2 as the node1 for the next pass. */
-         if( node1 ) {
-            result = NewNode( NULL, OP_MULT, status );
-            if( astOK ) {
-               result->arg[ 0 ] = node1;
-               result->arg[ 1 ] = node2;
-               node1 = result;
-            }
-         } else {
-            node1 = node2;
-         }
-      }
-   }
-
-/* Ensure we have a node to return. */
-   if( astOK ) {
-      if( !result ) result = node1;
-      if( !result ) {
-         result = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) result->con = 1.0;
-      }
-   }
-
-/* If an error has occurred, free any new tree. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
-   return result;
-}
-
-static int ComplicateTree( UnitNode **node, int *status ) {
-/*
-*  Name:
-*     ComplicateTree
-
-*  Purpose:
-*     Removes standardisations introduced by SimplifyTree.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int ComplicateTree( UnitNode **node )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function modifies a tree of UnitNodes by removing standardisations 
-*     introduced by SimplifyTree. The standardisations removed are ones
-*     which would make the corresponding algebraic expression (as produced 
-*     by MakeExp) unnatural to a human reader.
-
-*  Parameters:
-*     node
-*        The address of a pointer to the UnitNode at the head of the tree 
-*        which is to be complicated. On exit the supplied tree is freed and
-*        a pointer to a new tree is placed at the given address.
-
-*  Returned Value:
-*     Non-zero if any change was introduced into the tree.
-
-*/
-
-/* Local Variables: */
-   int i;
-   UnitNode *newnode;
-   UnitNode *node1;
-   UnitNode *node2;
-   UnitNode *node3;
-   Oper op;
-   double con;
-   double fk;
-   int k;
-   int result;
-   double kcon;
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Initiallially, we have no replacement node. */
-   newnode = NULL;
-   node1 = NULL;
-   node3 = NULL;
-
-/* Complicate the sub-trees corresponding to the arguments of the node at
-   the head of the supplied tree. */
-   for( i = 0; i < (*node)->narg; i++ ) {
-      if( ComplicateTree( &( (*node)->arg[ i ] ), status ) ) result = 1;
-   }
-
-/* Now undo specific simplifications appropriate to the nature of the node at 
-   the head of the tree. */
-   op = (*node)->opcode;
-
-/* If the head is an OP_MULT node with a constant first argument and
-   a "LN" second argument, rearrange the nodes to represent ln(x**k) instead 
-   of k*ln(x). If k is an integer multiple of "0.1/ln(10)" convert the "ln" 
-   function into a "log" (base 10) function. Check for "k==1" in which
-   case we do not need a POW node. */
-   if( (*node)->opcode == OP_MULT ) {
-
-      con = (*node)->arg[ 0 ]->con;
-      if( con != AST__BAD && (*node)->arg[ 1 ]->opcode == OP_LN ) {      
-         fk = 10.0*con*log( 10.0 );
-         k = NINT(fk);
-         if( EQUAL(fk,k) ) {
-            newnode = NewNode( NULL, OP_LOG, status );
-            con = k/10.0;
-         } else {
-            newnode = NewNode( NULL, OP_LN, status );
-         }
-
-         node2 = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
-         if( !EQUAL( con, 1.0 ) ){
-            node1 = CopyTree( (*node)->arg[ 0 ], status );
-            node3 = NewNode( NULL, OP_POW, status );
-         }
-
-         if( astOK ) {
-            if( !EQUAL( con, 1.0 ) ){
-               node1->con = con;
-               node3->arg[ 0 ] = node2;
-               node3->arg[ 1 ] = node1;
-               newnode->arg[ 0 ] = node3;            
-            } else {
-               newnode->arg[ 0 ] = node2;            
-            }         
-         }
-
-/* Replace "(A**-1)*B" with "B/A" */
-      } else if( (*node)->arg[ 0 ]->opcode == OP_POW &&
-                 EQUAL( (*node)->arg[ 0 ]->arg[ 1 ]->con, -1.0 )) {      
-         newnode = NewNode( NULL, OP_DIV, status );
-         if( astOK ) {
-            newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );             
-            newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-         }
-
-/* Replace "B*(A**-1)" with "B/A" */
-      } else if( (*node)->arg[ 1 ]->opcode == OP_POW &&
-                 EQUAL( (*node)->arg[ 1 ]->arg[ 1 ]->con, -1.0 )) {      
-         newnode = NewNode( NULL, OP_DIV, status );
-         if( astOK ) {
-            newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );             
-            newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
-         }
-
-/* Convert (x**k)*(y**k) to (x*y)**k. */
-      } else if( (*node)->arg[ 0 ]->opcode == OP_POW &&
-                 (*node)->arg[ 1 ]->opcode == OP_POW &&
-                 EQUAL( (*node)->arg[ 0 ]->arg[ 1 ]->con, 
-                        (*node)->arg[ 1 ]->arg[ 1 ]->con )) {      
-         newnode = NewNode( NULL, OP_POW, status );
-         node1 = NewNode( NULL, OP_MULT, status );
-         if( astOK ) {
-            node1->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-            node1->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
-            newnode->arg[ 0 ] = node1;
-            newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 1 ], status );
-         }
-
-/* Convert c*sqrt(x) to sqrt((c**2)*x) (if c > 0). */
-      } else if( (kcon=(*node)->arg[ 0 ]->con) != AST__BAD &&
-                 kcon > 0.0 && (*node)->arg[ 1 ]->opcode == OP_SQRT ) {
-         newnode = NewNode( NULL, OP_SQRT, status );
-         node1 = NewNode( NULL, OP_MULT, status );
-         node2 = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) {
-            node2->con = kcon*kcon;
-            node1->arg[ 0 ] = node2;
-            node1->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ]->arg[ 0 ], status );
-            newnode->arg[ 0 ] = node1;
-         }
-      }
-
-/* If the head node is a POW node, replace "x**0.5" by sqrt(x) */
-   } else if( (*node)->opcode == OP_POW ) {
-      if( EQUAL( (*node)->arg[ 1 ]->con, 0.5 ) ) {
-         newnode = NewNode( NULL, OP_SQRT, status );
-         if( astOK ) {
-            newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
-         }
-      }
-   }
-
-/* If we have produced a new node which is identical to the old node,
-   free it. Otherwise, indicate we have made some changes. */
-   if( newnode ) {
-      if( !CmpTree( newnode, *node, 1, status ) ) {
-         newnode = FreeTree( newnode, status );
-      } else {
-         result = 1;
-      }
-   }
-
-/* If an error has occurred, free any new node. */
-   if( !astOK ) {
-      newnode = FreeTree( newnode, status );
-      result = 0;
-   }
-
-/* If we have a replacement node, free the supplied tree and return a
-   pointer to the new tree. */
-   if( newnode ) {
-      FreeTree( *node, status );
-      *node = newnode;
-   }
-
-/* If the above produced some change, try simplifying (without
-   re-introducing the standardisation we have just got rid of!) and
-   then re-complicating the tree. */
-   if( result ) {
-      SimplifyTree( node, 0, status );
-      ComplicateTree( node, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static UnitNode *ConcatTree( UnitNode *tree1, UnitNode *tree2, int *status ) {
-/*
-*  Name:
-*     ConcatTree
-
-*  Purpose:
-*     Concatenate two trees together.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *ConcatTree( UnitNode *tree1, UnitNode *tree2, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function a pointer to the head of a new tree of UnitNodes which
-*     is formed by feeding the output of "tree1" (i.e. the quantity
-*     represented by the node at the head of tree1) into the (single)
-*     input of "tree2" (i.e. the single OP_LDVAR Node containined within
-*     tree2).
-
-*  Parameters:
-*     tree1
-*        A pointer to the first tree.
-*     tree2
-*        A pointer to the second tree. This should have no more than one 
-*        OP_LDVAR node.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a UnitNode which is at the head of the new tree.
-
-* Notes:
-*     - If "tree2" contains zero units, a NULL pointer is returned but no
-*     error is reported.
-*     - If "tree2" contains more than one unit, an error is reported
-*     error is reported.
-*     - A NULL pointer is returned if an error has already occurred, or
-*     if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
-   UnitNode *result;
-   UnitNode **units;
-   int nunits;
-  
-/* Initialise. */
-   result = NULL;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Produce a copy of tree2. */
-   result = CopyTree( tree2, status );   
-
-/* Locate the OP_LDVAR node in the copy of tree2. */
-   units = NULL;
-   nunits = 0;
-   LocateUnits( result, &units, &nunits, status );
-
-/* If no OP_LDVAR nodes were found in tree2, we cannot concatenate the 
-   trees. */
-   if( nunits > 0 ) {
-
-/* Report an error if the number of pointers returned is larger than 1. */
-      if( nunits > 1 && astOK ) {
-         astError( AST__INTER, "ConcatTree(unit): tree2 uses %d units - "
-                   "should be 1 (internal AST programming error).", status, nunits );
-      }
-
-/* Replace the OP_LDVAR node in the copy of tree2 with a copy of tree1. */
-      if( astOK ) {
-
-/* If the node at the head of the supplied tree2 is the node to be
-   replaced, just free the tree created earlier and return a copy of
-   tree1. */
-         if( units[ 0 ] == result ) {
-            FreeTree( result, status );
-            result = CopyTree( tree1, status );
-
-/* Otherwise, search for the node to be replaced and do the substitution
-   within the tree created earlier. */
-         } else {      
-            ReplaceNode( result, units[ 0 ], CopyTree( tree1, status ), status );
-         }
-      }
-   }
-
-/* Free resources. */
-   units = astFree( units );
-
-/* If an error has occurred, free any new tree. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
-   return result;
-}
-
-static int ConStart( const char *text, double *val, int *nc, int *status ) {
-/*
-*  Name:
-*     ConStart
-
-*  Purpose:
-*     See if the supplied string starts with a literal numeric constant.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int ConStart( const char *text, double *val, int *nc, int *status ) 
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function checks if the supplied string starts with a literal
-*     numeric constant and returns it if it does. It is a wrap-up for scanf
-*     since scanf has non-standard behaviour on some platforms (e.g. Cygwin 
-*     scanf interprets the character "n" as a floating point number!).
-
-*  Parameters:
-*     text
-*        The text to check.
-*     val
-*        Address of a double to receive any numerical constant read
-*        from the start of the string. Unity is returned if the string 
-*        does not start with a numerical constant.
-*     nc
-*        Address of an int to receive the number of characters used to
-*        create the value returned in "val". Zero is returned if the
-*        string does not start with a numerical constant.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the text started with a numerical constant.
-
-*/
-
-/* Local Variables: */
-   int result;
-   const char *c;
-
-/* Initialise */      
-   *nc = 0;
-   *val = 1.0;
-
-/* Return zero if no text was supplied */
-   if( !text ) return 0;
-
-/* Use sscanf to see if the string begin with a numerical constant */
-   result = astSscanf( text, "%lf%n", val, nc );
-
-/* If so, check that the first non-blank character in the string 
-   is not "N" (interpreted by Cygwin as numerical zero!). */
-   if( result ) {
-      c = text;
-      while( isspace( *c ) ) c++;   
-      if( *c == 'n' || *c == 'N' ) {
-         result = 0;
-         *nc = 0;
-         *val = 1.0;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static UnitNode *CopyTree( UnitNode *tree, int *status ) {
-/*
-*  Name:
-*     CopyTree
-
-*  Purpose:
-*     Create a new tree of UnitNodes containing a copy of a given tree.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *CopyTree( UnitNode *tree, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function creates a copy of the supplied tree of UnitNodes.
-
-*  Parameters:
-*     tree
-*        The UnitNode at the head of the tree to be copied.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the UnitNode at the head of the new tree.
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked with 
-*     the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   UnitNode **args;
-   UnitNode *result;
-   int i;
-   int narg;      
-   
-/* Initialise. */
-   result = NULL;
-
-/* Check the inherited status. */
-   if( !astOK || !tree ) return result;
-
-/* Create a new node to represent the head of the supplied tree. */
-   result = astMalloc( sizeof( UnitNode ) );
-  
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Copy the fields of the supplied node. */
-      narg = tree->narg;
-
-      result->arg = NULL;
-      result->unit = tree->unit;
-      result->mult = tree->mult;
-      result->opcode = tree->opcode;
-      result->narg = narg;
-      result->con = tree->con;
-      result->name = tree->name ? astStore( NULL, tree->name, 
-                                            strlen( tree->name ) + 1 ) : NULL;
-
-/* Create an array of UnitNode pointers for the arguments. */
-      args = astMalloc( narg*sizeof( UnitNode * ) );
-      if( astOK ) {
-         result->arg = args;
-
-/* Copy the sub-trees headed by the argument nodes. */
-         for( i = 0; i < narg; i++ ) {
-            args[ i ] = CopyTree( tree->arg[ i ], status );
-         }
-      }
-   }
-
-/* Free any result if an error occurred. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
-   return result;
-}
-
-static UnitNode *CreateTree( const char *exp, int basic, int lock, int *status ){
-/*
-*  Name:
-*     CreateTree
-
-*  Purpose:
-*     Convert an algebraic units expression into a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *CreateTree( const char *exp, int basic, int lock, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function converts the supplied algebraic units expression into
-*     a tree of UnitNodes. The result tree can optionally be expanded to
-*     create a tree in which the "roots" (LDVAR nodes) all refer to
-*     basic units. 
-
-*  Parameters:
-*     exp
-*        The units expression. This should not include any leading or
-*        trailing spaces.
-*     basic
-*        Should the tree created from parsing "exp" be expanded so that
-*        the leaf nodes of the tree are all basic units?
-*     lock
-*        Use a mutex to guard access to the KnownUnits list?
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a UnitNode which forms the head of a tree of UnitNodes
-*     representing the supplied unit expression.
-
-*  Notes:
-*     -  A NULL value is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   UnitNode *result;
-   const char *cleanex;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status, and that we have a string. */
-   if ( !astOK ) return result;
-
-/* Produce a clean copy of the supplied string. This has no leading
-   or trailing white space, and any spaces adjacent to operators within
-   the string are removed (this is needed because spaces are treated as
-   multiplication symbols). */
-   cleanex = CleanExp( exp, status );
-
-/* If the string is blank, return the NULL pointer. Otherwise, create a 
-   tree of UnitNodes describing the units. The returned tree has LDVAR 
-   nodes which refer to the unit symbols contained in the supplied string. */
-   if( cleanex && (*cleanex) ) {
-      result = MakeTree( cleanex, strlen( cleanex ), lock, status );
-
-/* Replace each subtree which simply combines constants (i.e. which has no 
-   OP_LDVAR nodes) with a single OP_LDCON node. */
-      FixConstants( &result, 0, status );
-
-/* Invert literal constant unit multipliers. */
-      InvertConstants( &result, status );
-
-/* Now replace each LDVAR node which refers to a known derived unit with
-   a sub-tree which defines the derived unit in terms of known basic units.
-   The LDVAR nodes in the resulting tree all refer to basic units. */
-      if( basic ) RemakeTree( &result, status );
-   }
-
-/* Free resources. */
-   cleanex = astFree( (void *) cleanex );
-
-/* Free any returned tree if an error has occurred. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
-   return result;
-}
-
-static int DimAnal( UnitNode *node, double powers[NQUANT], double *scale, int *status ) {
-/*
-*  Name:
-*     DimAnal
-
-*  Purpose:
-*     Perform a dimensional analysis of a unit tree.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int DimAnal( UnitNode *node, double powers[NQUANT], double *scale, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a set of powers and a scaling factor which 
-*     represent the units tree.
-
-*  Parameters:
-*     node
-*        Pointer to the UnitNode at the head of the unit tree.
-*     powers
-*        An array in which are returned the powers for each of the following 
-*        basic units (in the order shown): kilogramme, metre, second, radian, 
-*        Kelvin, count, photon, magnitude, pixel. If the supplied unit does 
-*        not depend on a given basic unit a value of 0.0 will be returned in 
-*        the array. The returns values represent a system of units which is a 
-*        scaled form of the supplied units, expressed in the basic units of m, 
-*        kg, s, rad, K count,photon, mag and pixel. For instance, a returned 
-*        array of [1,0,-2,0,0,0,0,0,0] would represent "m/s**2".
-*     scale
-*        Pointer to a location at which to return a scaling factor for the 
-*        supplied units. The is the value, in the units represented by the 
-*        returned powers, which corresponds to a value of 1.0 in the supplied 
-*        units.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the tree was analysed succesfully. Zero otherwise.
-
-*  Notes:
-*     -  Zero is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables; */
-   Oper oper;
-   int result;
-   int i;
-   double p0[ NQUANT ];
-   double p1[ NQUANT ];
-   double s0;
-   double s1;
-
-/* Check inherited status */
-   if( !astOK ) return 0;
-
-/* Initialise the powers of all dimensions to zero, and set the scaling
-   factor to unity. */
-   result = 1;
-   *scale = 1.0;
-   for( i = 0; i < NQUANT; i++ ) powers[ i ] = 0.0;
-
-/* Load constant: constant is dimensionaless so leave powers unchanged,
-   and set the scaling factor. */
-   oper = node->opcode;
-   if( oper == OP_LDCON ) {
-      *scale = 1.0/node->con;
-
-/* Load variable: check it is one of the basic known dimensional
-   quantities. If so, set the power of the quantity to unity and store
-   the scale factor. If the unit is "g" modify the scale factor so that
-   the analysis quantity is "kg". */
-   } else if( oper == OP_LDVAR ) {
-      result = 0;
-      for( i = 0; i < NQUANT; i++ ) {
-         if( node->unit == quant_units[ i ] ) {
-            powers[ i ] = 1.0;
-            *scale = node->mult ? 1.0/node->mult->scale : 1.0;
-            if( !strcmp( node->unit->sym, "g" ) ) *scale *= 0.001;
-            result = 1;
-            break;
-         }
-      }
-
-/* How does dimensional analysis handle log or exp units?*/
-   } else if( oper == OP_LOG ) {
-      result= 0;
-
-   } else if( oper == OP_LN ) {
-      result= 0;
-
-   } else if( oper == OP_EXP ) {
-      result= 0;
-
-/* Get the powers for the child unit and then multiply each by 0.5 and
-   take the square root of the scale factor. */
-   } else if( oper == OP_SQRT ) {
-      result = DimAnal( node->arg[0], powers, scale, status );
-      if( result ) {
-         for( i = 0; i < NQUANT; i++ ) powers[ i ]*= 0.5;
-         *scale = sqrt( *scale );
-      }
-
-/* Similarly for pow nodes. */
-   } else if( oper == OP_POW ) {
-      result = DimAnal( node->arg[0], powers, scale, status );
-      if( result ) {
-         double power = node->arg[1]->con;
-         for( i = 0; i < NQUANT; i++ ) powers[ i ]*= power;
-         *scale = pow( *scale, power );
-      }
-
-/* Binary operators. Analyses the operands dimensions and combine. */
-   } else if( oper == OP_DIV ) {
-      if( DimAnal( node->arg[0], p0, &s0, status ) &&
-          DimAnal( node->arg[1], p1, &s1, status ) ) {
-         for( i = 0; i < NQUANT; i++ ) powers[ i ] = p0[ i ] - p1[ i ];
-         *scale = s0/s1;
-      } else {
-         result = 0;
-      }
-
-   } else if( oper == OP_MULT ) {
-      if( DimAnal( node->arg[0], p0, &s0, status ) &&
-          DimAnal( node->arg[1], p1, &s1, status ) ) {
-         for( i = 0; i < NQUANT; i++ ) powers[ i ] = p0[ i ] + p1[ i ];
-         *scale = s0*s1;
-      } else {
-         result = 0;
-      }
-
-/* Named constants are dimensionless */
-   } else if( oper == OP_LDPI ) {
-      *scale = 1.0/PI;
-
-   } else if( oper == OP_LDE ) {
-      *scale = 1.0/E;
-   
-   }
-
-   return result;
-
-}
-
-static int EndsWith( const char *c, int nc, const char *test, int *status ){
-/*
-*  Name:
-*     EndsWith
-
-*  Purpose:
-*     See if a string ends with another string
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int EndsWith( const char *c, int nc, const char *test, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function sees if the string given by "c" ends with the string
-*     given by "test". The comparison is case-insensitive.
-
-*  Parameters:
-*     c
-*        A pointer to the last character in the string to be tested.
-*     nc
-*        The number of characters in the string to be tested.
-*     test
-*        A pointer to the string to be tested for.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the string "c" ends with the string "test".
-
-*/
-
-/* Local Variables: */
-   const char *start;
-   int i;
-   int result;
-   int tlen;
-
-/* initialise. */
-   result = 0;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Check the string being tested for is not longer than the string being
-   tested. */
-   tlen = strlen( test );
-   if( tlen <= nc ){
-
-/* Get a pointer to where the matching string would start if the string "c" 
-   ends with the required string "test". */
-      start = c - tlen + 1;
-
-/* Do the comparison. */
-      result = 1;
-      for( i = 0; i < tlen; i++ ) {
-         if( tolower( start[ i ] ) != tolower( test[ i ] ) ) {
-            result = 0;
-            break;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-static void FindFactors( UnitNode *node, UnitNode ***factors, double **powers, 
-                         int *nfactor, double *coeff, int *status ){
-/*
-*  Name:
-*     FindFactors
-
-*  Purpose:
-*     Find the factors within an expression given by a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void FindFactors( UnitNode *node, UnitNode ***factors, double **powers, 
-*                       int *nfactor, double *coeff, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function analyses the supplied tree of UnitNoes and returns
-*     an array of pointers to nodes within the supplied tree which form
-*     factors of the tree. The power associated with each factor is also
-*     returned, together with an overall coefficient for the tree. The
-*     expression represented by the tree is thus the product of the 
-*     coefficient with each of the factors, each raised to the associated
-*     power.
-
-*  Parameters:
-*     node
-*        A pointer to the UnitNode at the head of the tree which is to be 
-*        analysed.
-*     factors
-*        The address at which to return a pointer to an array with "*nfactor" 
-*        elements, each element being a pointer to a UnitNode within the
-*        supplied tree which is a factor of the supplied tree.
-*     powers
-*        The address at which to return a pointer to an array with "*nfactor" 
-*        elements, each element being a double holding the power of the
-*        associated factor in "*factors".
-*     nfactor
-*        The address of an int containing the number of elements in the
-*        returned "*factors" and "*powers" arrays. 
-*     coeff
-*        The address of a double containing the overall coefficient to be
-*        applied to the product of the factors. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - If the supplied node is a constant node, then "*coeff" is
-*     returned holding the value of the constant and "*nfactor" is returned
-*     equal to zero ("*factors" and "*powers" are returned holding NULL).
-*     - If an error has already occurred, or if this function fails, then
-*     "*factors" and "*powers" are returned holding NULL, "*nfactor" is
-*     returned holding zero and "*coeff" is returned holding 1.0.
-
-*/
-
-/* Local Variables: */
-   int i;
-   int j;
-   int found;
-   UnitNode **fact1;
-   double *pow1;
-   double coeff1;
-   int nfac1;
-   double con;
-
-/* Initialise */
-   *factors = NULL;
-   *powers = NULL;
-   *nfactor = 0;
-   *coeff = 1.0;
-
-/* Check inherited status. */
-   if( !astOK ) return;
-
-/* If the node at the head of the supplied tree is an OP_MULT node... */
-   if( node->opcode == OP_MULT ) {
-
-/* Find the factors of the two arguments of the OP_MULT node. */
-      FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
-      FindFactors( node->arg[ 1 ], &fact1, &pow1, &nfac1, &coeff1, status );
-
-/* Combine the two lists. Loop round the factors of the seocnd argument. */
-      for( i = 0; i < nfac1; i++ ) {
-
-/* See if there is already an equivalent factor in the returned list of 
-   factors. */
-         found = 0;
-         for( j = 0; j < *nfactor; j++ ) {
-            if( !CmpTree( (*factors)[ j ], fact1[ i ], 0, status ) ){
-               found = 1;
-               break;
-            }
-         }
-
-/* If so, increment the power of the factor. */
-         if( found ) {
-            (*powers)[ j ] += pow1[ i ];
-
-/* Otherwise, add the factor to the end of the returned list. */
-         } else {
-            *factors = astGrow( *factors, *nfactor + 1, sizeof( UnitNode *) );
-            *powers = astGrow( *powers, *nfactor + 1, sizeof( double ) );
-            if( astOK ) {
-               (*factors)[ *nfactor ] = fact1[ i ];
-               (*powers)[ (*nfactor)++ ] = pow1[ i ];
-            }
-         }
-      }
-
-/* Modify the overall coefficient. */
-      *coeff *= coeff1;
-
-/* Free resources */
-      fact1 = astFree( fact1 );
-      pow1 = astFree( pow1 );
-
-/* If the node at the head of the supplied tree is an OP_POW node, */
-   } else if( node->opcode == OP_POW ) {
-
-/* Find the factors of the first argument. */
-      FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
-
-/* Multiply all the factor powers by the constant exponent of the POW
-   node. */
-      con = node->arg[ 1 ]->con;
-      for( j = 0; j < *nfactor; j++ ) {
-         (*powers)[ j ] *= con;
-      }
-
-/* Exponentiate the coefficient. */
-      if( *coeff >= 0.0 || (int) con == con ) {
-         *coeff = pow( *coeff, con );
-      } else {
-         astError( AST__BADUN, "Simplifying a units expression requires a "
-                   "negative value to be raised to a non-intergal power." , status);
-      }
-
-/* If the node at the head of the supplied tree is an OP_DIV node, */
-   } else if( node->opcode == OP_DIV ) {
-
-/* Find the factors of the two arguments of the OP_DIV node. */
-      FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
-      FindFactors( node->arg[ 1 ], &fact1, &pow1, &nfac1, &coeff1, status );
-
-/* Combine the two lists. Loop round the factors of the second argument
-   (the denominator). */
-      for( i = 0; i < nfac1; i++ ) {
-
-/* See if there is already an equivalent factor in the returned list of 
-   factors. */
-         found = 0;
-         for( j = 0; j < *nfactor; j++ ) {
-            if( !CmpTree( (*factors)[ j ], fact1[ i ], 0, status ) ){
-               found = 1;
-               break;
-            }
-         }
-
-/* If so, decrement the power of the factor. */
-         if( found ) {
-            (*powers)[ j ] -= pow1[ i ];
-
-/* Otherwise, add the factor to the end of the returned list, with a
-   negated power. */
-         } else {
-            *factors = astGrow( *factors, *nfactor + 1, sizeof( UnitNode *) );
-            *powers = astGrow( *powers, *nfactor + 1, sizeof( double ) );
-            if( astOK ) {
-               (*factors)[ *nfactor ] = fact1[ i ];
-               (*powers)[ (*nfactor)++ ] = -pow1[ i ];
-            }
-         }
-      }
-
-/* Modify the overall coefficient. */
-      if( coeff1 != 0.0 ) {
-         *coeff /= coeff1;
-      } else {
-         astError( AST__BADUN, "Simplifying a units expression"
-                   "requires a division by zero." , status);
-      }
-
-/* Free resources */
-      fact1 = astFree( fact1 );
-      pow1 = astFree( pow1 );
-
-/* If the node at the head of the supplied tree is an OP_SQRT node, */
-   } else if( node->opcode == OP_SQRT ) {
-
-/* Find the factors of the argument. */
-      FindFactors( node->arg[ 0 ], factors, powers, nfactor, coeff, status );
-
-/* Multiply all the factor powers by 0.5. */
-      for( j = 0; j < *nfactor; j++ ) {
-         (*powers)[ j ] *= 0.5;
-      }
-
-/* Square root the coefficient. */
-      if( *coeff >= 0.0 ) {
-         *coeff = sqrt( *coeff );
-      } else {
-         astError( AST__BADUN, "Simplifying a units expression requires "
-                   "the square root of a negative value to be taken." , status);
-      }
-
-/* If the node at the head of the supplied tree is constant we have no
-   factors but we have a coeffcient. */
-   } else if( node->con != AST__BAD ) {
-      *coeff = node->con;
-
-/* Other nodes have no factors other than themselves, so just return a 
-   pointer to the supplied node. */
-   } else {
-      *factors = astMalloc( sizeof( UnitNode *) );
-      *powers = astMalloc( sizeof( double ) );
-      if( astOK ) {
-         *nfactor = 1;
-         (*factors)[ 0 ] = node;
-         (*powers)[ 0 ] = 1.0;
-         *coeff = 1.0;
-      }        
-   }
-
-/* If an error has occurred, free any returned resources. */
-   if( !astOK ) {
-      *factors = astFree( *factors );
-      *powers = astFree( *powers );
-      *nfactor = 0;
-      *coeff = 1.0;
-   }
-}
-
-static void FixConstants( UnitNode **node, int unity, int *status ) {
-/*
-*  Name:
-*     FixConstants
-
-*  Purpose:
-*     Take the reciprocal of all constants in a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void FixConstants( UnitNode **node, int unity, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function replaces sub-trees which have a constant value by
-*     a single OP_LDCON node which loads the appropriate constant.
-
-*  Parameters:
-*     node
-*        The address of a pointer to the UnitNode at the head of the tree 
-*        which is to be fixed. On exit the supplied tree is freed and a
-*        pointer to a new tree is palced at he given address.
-*     unity
-*        If non-zero, then all multiplicative constants are set to 1.0, and 
-*        their original values are forgotten, but only if the other
-*        argument of the OP_MULT node is an OP_LDVAR, OP_POW or OP_SQRT Node.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int i;
-   UnitNode *newnode;
-   int allcon;
-   Oper op;
-   double newcon;
-
-/* Check inherited status and pointer. */
-   if( !astOK || !node || !(*node) ) return;
-
-/* Initiallially, we have no replacement node */
-   newnode = NULL;
-   newcon = AST__BAD;
-
-/* There is nothing to fix if the node has no arguments. */
-   if( (*node)->narg > 0 ) {
-
-/* Note the op code for the node. */
-      op = (*node)->opcode;
-
-/* Fix up the argument nodes. Also note if all the arguments are
-   constants. */
-      allcon = 1;
-      for( i = 0; i < (*node)->narg; i++ ) {
-         FixConstants( &( (*node)->arg[ i ] ), unity, status );
-         if( (*node)->arg[ i ]->con == AST__BAD ) allcon = 0;
-      }
-
-/* If an OP_MULT nodes within a simplified tree has a constant argument,
-   it will always be argument zero.  If this is an OP_MULT node and arg[0]
-   is constant and "unity" is non-zero and arg[1] is an OP_LDVAR, OP_POW
-   or OP_SQRT node, replace the constant value by 1.0. */
-      if( unity && op == OP_MULT && 
-          (*node)->arg[ 0 ]->con != AST__BAD && 
-          ( (*node)->arg[ 1 ]->opcode == OP_LDVAR ||
-            (*node)->arg[ 1 ]->opcode == OP_SQRT ||
-            (*node)->arg[ 1 ]->opcode == OP_POW ) ) {
-         (*node)->arg[ 0 ]->con = 1.0;
-      }
-
-/* If the arguments of this node are all constants, replace the node by
-   an OP_LDCON node which loads the resulting constant value. */
-      if( allcon ) {
-         if( (*node)->narg > 0 ) {
-            newnode = NewNode( NULL, OP_LDCON, status );
-            if( astOK ) {
-               if( op == OP_LOG ) {
-                  if( (*node)->arg[ 0 ]->con > 0.0 ) {
-                     newcon = log10( (*node)->arg[ 0 ]->con );
-                  } else {
-                     astError( AST__BADUN, "Illegal negative or zero constant "
-                               "value '%g' encountered.", status, 
-                               (*node)->arg[ 0 ]->con );
-                  }
-               } else if( op == OP_LN ){   
-                  if( (*node)->arg[ 0 ]->con > 0.0 ) {
-                     newcon = log( (*node)->arg[ 0 ]->con );
-                  } else {
-                     astError( AST__BADUN, "Illegal negative or zero constant value "
-                               "'%g' encountered.", status, (*node)->arg[ 0 ]->con );
-                  }
-               } else if( op == OP_EXP ){  
-                  newcon = exp( (*node)->arg[ 0 ]->con );
-   
-               } else if( op == OP_SQRT ){ 
-                  if( (*node)->arg[ 0 ]->con >= 0.0 ) {
-                     newcon = sqrt( (*node)->arg[ 0 ]->con );
-                  } else {
-                     astError( AST__BADUN, "Illegal negative constant value "
-                               "'%g' encountered.", status, (*node)->arg[ 0 ]->con );
-                  }
-   
-               } else if( op == OP_POW ){  
-                  if( (*node)->arg[ 0 ]->con >= 0.0 || 
-                      (int) (*node)->arg[ 1 ]->con == (*node)->arg[ 1 ]->con ) {
-                     newcon = pow( (*node)->arg[ 0 ]->con, 
-                                   (*node)->arg[ 1 ]->con );
-                  } else {
-                     astError( AST__BADUN, "Illegal negative constant value "
-                               "'%g' encountered.", status, (*node)->arg[ 0 ]->con );
-                  }
-   
-               } else if( op == OP_DIV ){  
-                  if( (*node)->arg[ 1 ]->con != 0.0 ) {
-                     newcon = (*node)->arg[ 0 ]->con / (*node)->arg[ 1 ]->con;
-                  } else {
-                     astError( AST__BADUN, "Illegal zero constant value encountered." , status);
-                  }
-   
-               } else if( op == OP_MULT ){ 
-                  newcon = (*node)->arg[ 0 ]->con * (*node)->arg[ 1 ]->con;
-   
-               }
-
-
-               if( astOK ) newnode->con = newcon;
-            }
-         }
-      }
-   }
-
-/* If an error has occurred, free any new node. */
-   if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
-   pointer to the new tree. */
-   if( newnode ) {
-      FreeTree( *node, status );
-      *node = newnode;
-   }
-
-}
-
-static UnitNode *FixUnits( UnitNode *node, UnitNode *test, int *status ) {
-/*
-*  Name:
-*     FixUnits
-
-*  Purpose:
-*     Assign a constant value to all units except for one.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *FixUnits( UnitNode *node, UnitNode *test, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a copy of the supplied tree of UnitNodes. All
-*     OP_LDVAR nodes within the copy which refer to units which differ 
-*     from those referred to by the supplied test node are replaced by 
-*     OP_LDCON nodes which load the constant value 1.0.
-
-*  Parameters:
-*     node
-*        A pointer to the UnitNode at the head of the tree to be used.
-*     test
-*        A pointer to an OP_LDVAR node which defines the units which are
-*        *not* to be replaced by a constant value of 1.0.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a UnitNode which is at the head of a tree of UnitNodes
-*     which forms the required copy of th einput tree.
-
-* Notes:
-*     - A NULL pointer is returned if an error has already occurred, or
-*     if this function fails for any reason.
-
-*/
-
-/* Local Variables: */
-   int i;
-   UnitNode *result;
-
-/* Initialise. */
-   result = NULL;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Create a complete copy of the supplied tree. */
-   result = CopyTree( node, status );
-
-/* Is the node at the head of the supplied tree an OP_LDVAR node? */
-   if( node->opcode == OP_LDVAR ) {
-
-/* Does it refer to a unit which differs from that of the test node? If so 
-   annul the copy created above and return a new OP_LDCON node which loads 
-   the constant value 1.0. */
-      if( strcmp( test->name, node->name ) ) {
-         FreeTree( result, status );
-         result = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) result->con = 1.0;
-      }
-
-/* If the supplied node is not an OP_LDVAR node, check each argument of
-   the head node. */
-   } else {
-      for( i = 0; i < node->narg; i++ ) {
-
-/* Free the resources used to hold this argument in the tree copy created
-   above. */
-         FreeTree( result->arg[ i ], status );
-
-/* Create a new argument tree by calling this function recursively to 
-   fix units in the argument sub-trees. */
-         result->arg[ i ] = FixUnits( node->arg[ i ], test, status );
-      }
-   }
-
-/* If an error has occurred, free any new tree. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the answer. */
-   return result;
-}
-
-static UnitNode *FreeTree( UnitNode *node, int *status ) {
-/*
-*  Name:
-*     FreeTree
-
-*  Purpose:
-*     Free resources used by a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *FreeTree( UnitNode *node, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function frees the memory used to store a tree of UnitNodes.
-
-*  Parameters:
-*     node
-*        A pointer to the UnitNode at the head of the tree which is to be 
-*        freed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A NULL pointer is returned.
-
-*  Notes:
-*     - This function attempts to execute even if it is invoked with 
-*     the global error status set.
-*/
-
-/* Local Variables: */
-   int i;
-
-/* Check a node was supplied. */
-   if( node ) {
-
-/* Recursively free any argument nodes. */
-      if( node->arg ) {
-         for( i = 0; i < node->narg; i++ ) {
-            (node->arg)[ i ] = FreeTree( (node->arg)[ i ], status );
-         }
-         node->arg = astFree( node->arg );
-      }
-
-/* Nullify other pointers for safety. */
-      node->unit = NULL;
-      node->mult = NULL;
-
-/* Free the copy of the symbol string (if any). */
-      node->name = astFree( (char *) node->name );
-
-/* Free the memory holding the node. */
-      node = astFree( node );
-   }
-
-/* Return a null pointer. */
-   return NULL;
-}
-
-static KnownUnit *GetKnownUnits( int lock, int *status ) {
-/*
-*  Name:
-*     GetKnownUnits
-
-*  Purpose:
-*     Get a pointer to the head of a linked list of known unit definitions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     KnownUnit *GetKnownUnits( int lock, int *status ) 
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a pointer to the head of a linked list of known 
-*     unit definitions. The unit definitions are created as static module
-*     variables if they have not previously been created.
-
-*  Parameters:
-*     lock 
-*        If non-zero, then lock a mutex prior to accessing the list of
-*        known units. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the first known unit definition.
-
-*  Notes:
-*     - A NULL pointer is returned if it is invoked with the global error 
-*     status set, or if an error occurs.
-*/
-
-/* Local Variables: */
-   int iq;
-   KnownUnit *result;
-
-/* Initialise. */
-   result = NULL;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Ensure the known units list is only initialised once. */
-   if( lock ) {
-      LOCK_MUTEX1
-   }
-
-/* If the linked list of KnownUnit structures describing the known units
-   has not yet been created, create it now. A pointer to the head of the 
-   linked list is put into the static variable "known_units". */
-   if( !known_units ) {
-
-/* At the same time we store pointers to the units describing the basic 
-   quantities used in dimensional analysis. Initialise th index of the
-   next such unit. */
-      iq = 0;
-
-/* Create definitions for the known units. First do all IAU basic units.
-   We include "g" instead of "kg" because otherwise we would have to
-   refer to a gramme as a milli-kilogramme. */
-      MakeKnownUnit( "g", "gram", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "m", "metre", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "s", "second", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "rad", "radian", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "K", "Kelvin", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "A", "Ampere", NULL, status );
-      MakeKnownUnit( "mol", "mole", NULL, status );
-      MakeKnownUnit( "cd", "candela", NULL, status );
-
-/* Now do all IAU derived units. Unit definitions may only refer to units
-   which have already been defined. */
-      MakeKnownUnit( "sr", "steradian", "rad rad", status );
-      MakeKnownUnit( "Hz", "Hertz", "1/s", status );
-      MakeKnownUnit( "N", "Newton", "kg m/s**2", status );
-      MakeKnownUnit( "J", "Joule", "N m", status );
-      MakeKnownUnit( "W", "Watt", "J/s", status );
-      MakeKnownUnit( "C", "Coulomb", "A s", status );
-      MakeKnownUnit( "V", "Volt", "J/C", status );
-      MakeKnownUnit( "Pa", "Pascal", "N/m**2", status );
-      MakeKnownUnit( "Ohm", "Ohm", "V/A", status );
-      MakeKnownUnit( "S", "Siemens", "A/V", status );
-      MakeKnownUnit( "F", "Farad", "C/V", status );
-      MakeKnownUnit( "Wb", "Weber", "V s", status );
-      MakeKnownUnit( "T", "Tesla", "Wb/m**2", status );
-      MakeKnownUnit( "H", "Henry", "Wb/A", status );
-      MakeKnownUnit( "lm", "lumen", "cd sr", status );
-      MakeKnownUnit( "lx", "lux", "lm/m**2", status );
-
-/* Now do additional derived and basic units listed in the FITS-WCS paper. */
-      MakeKnownUnit( "deg", "degree", "pi/180 rad", status );
-      MakeKnownUnit( "arcmin", "arc-minute", "1/60 deg", status );
-      MakeKnownUnit( "arcsec", "arc-second", "1/3600 deg", status );
-      MakeKnownUnit( "mas", "milli-arcsecond", "1/3600000 deg", status );
-      MakeKnownUnit( "min", "minute", "60 s", status );
-      MakeKnownUnit( "h", "hour", "3600 s", status );
-      MakeKnownUnit( "d", "day", "86400 s", status );
-      MakeKnownUnit( "yr", "year", "31557600 s", status );
-      MakeKnownUnit( "a", "year", "31557600 s", status );
-      MakeKnownUnit( "eV", "electron-Volt", "1.60217733E-19 J", status );
-      MakeKnownUnit( "erg", "erg", "1.0E-7 J", status );
-      MakeKnownUnit( "Ry", "Rydberg", "13.605692 eV", status );
-      MakeKnownUnit( "solMass", "solar mass", "1.9891E30 kg", status );
-      MakeKnownUnit( "u", "unified atomic mass unit", "1.6605387E-27 kg", status );
-      MakeKnownUnit( "solLum", "solar luminosity", "3.8268E26 W", status );
-      MakeKnownUnit( "Angstrom", "Angstrom", "1.0E-10 m", status );
-      MakeKnownUnit( "micron", "micron", "1.0E-6 m", status );
-      MakeKnownUnit( "solRad", "solar radius", "6.9599E8 m", status );
-      MakeKnownUnit( "AU", "astronomical unit", "1.49598E11 m", status );
-      MakeKnownUnit( "lyr", "light year", "9.460730E15 m", status );
-      MakeKnownUnit( "pc", "parsec", "3.0867E16 m", status );
-      MakeKnownUnit( "count", "count", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "photon", "photon", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "Jy", "Jansky", "1.0E-26 W /m**2 /Hz", status );
-      MakeKnownUnit( "mag", "magnitude", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "G", "Gauss", "1.0E-4 T", status );
-      MakeKnownUnit( "pixel", "pixel", NULL, status );
-      quant_units[ iq++ ] = known_units;
-      MakeKnownUnit( "barn", "barn", "1.0E-28 m**2", status );
-      MakeKnownUnit( "D", "Debye", "(1.0E-29/3) C.m", status );
-
-      if( iq != NQUANT && astOK ) {
-         astError( AST__INTER, "unit(GetKnownUnits): %d basic quantities "
-                   "noted but this should be %d (internal AST programming "
-                   "error).", status, iq, NQUANT );
-      }
-
-/* Unit aliases... */
-      MakeUnitAlias( "Angstrom", "A", status );
-      MakeUnitAlias( "Angstrom", "Ang", status );
-      MakeUnitAlias( "count", "ct", status );
-      MakeUnitAlias( "photon", "ph", status );
-      MakeUnitAlias( "Jy", "Jan", status );
-      MakeUnitAlias( "pixel", "pix", status );
-      MakeUnitAlias( "s", "sec", status );
-      MakeUnitAlias( "m", "meter", status );
-   }
-
-/* If succesful, return the pointer to the head of the list. */
-   if( astOK ) result = known_units;
-
-/* Allow the next thread to proceed. */
-   if( lock ) {
-      UNLOCK_MUTEX1
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static Multiplier *GetMultipliers( int *status ) {
-/*
-*  Name:
-*     GetMultiplier
-
-*  Purpose:
-*     Get a pointer to the head of a linked list of multiplier definitions.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     Multiplier *Multipliers( void ) 
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a pointer to the head of a linked list of known 
-*     multiplier definitions. The multiplier definitions are created as 
-*     static module variables if they have not previously been created.
-
-*  Returned Value:
-*     A pointer to the first known multiplier definition.
-
-*  Notes:
-*     - A NULL pointer is returned if it is invoked with the global error 
-*     status set, or if an error occurs.
-*/
-
-/* Local Variables: */
-   Multiplier *result;
-   Multiplier *mult;
-
-/* Initialise. */
-   result = NULL;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Ensure the list is only initialised by one thread. */
-   LOCK_MUTEX2
-
-/* If the linked list of Multiplier structures describing the known
-   multipliers has not yet been created, create it now. A pointer to the 
-   head of the linked list is put into the static variable "multipliers". */
-   if( !multipliers ) {
-
-/* Define a macro to create a multiplier struncture and add it to the
-   linked list of multiplier structures. */
-#define MAKEMULT(s,sl,sc,lab,ll) \
-      mult = astMalloc( sizeof( Multiplier ) ); \
-      if( astOK ) { \
-         mult->sym = s; \
-         mult->symlen = sl; \
-         mult->lablen = ll; \
-         mult->scale = sc; \
-         mult->label = lab; \
-         mult->next = multipliers; \
-         multipliers = mult; \
-      }
-
-/* Use the above macro to create all the standard multipliers listed in the
-   FITS WCS paper I. */   
-      MAKEMULT("d",1,1.0E-1,"deci",4)
-      MAKEMULT("c",1,1.0E-2,"centi",5)
-      MAKEMULT("m",1,1.0E-3,"milli",5)
-      MAKEMULT("u",1,1.0E-6,"micro",5)
-      MAKEMULT("n",1,1.0E-9,"nano",4)
-      MAKEMULT("p",1,1.0E-12,"pico",4)
-      MAKEMULT("f",1,1.0E-15,"femto",5)
-      MAKEMULT("a",1,1.0E-18,"atto",4)
-      MAKEMULT("z",1,1.0E-21,"zepto",5)
-      MAKEMULT("y",1,1.0E-24,"yocto",5)
-      MAKEMULT("da",2,1.0E1,"deca",4)
-      MAKEMULT("h",1,1.0E2,"hecto",5)
-      MAKEMULT("k",1,1.0E3,"kilo",4)
-      MAKEMULT("M",1,1.0E6,"mega",4)
-      MAKEMULT("G",1,1.0E9,"giga",4)
-      MAKEMULT("T",1,1.0E12,"tera",4)
-      MAKEMULT("P",1,1.0E15,"peta",4)
-      MAKEMULT("E",1,1.0E18,"exa",3)
-      MAKEMULT("Z",1,1.0E21,"zetta",5)
-      MAKEMULT("Y",1,1.0E24,"yotta",5)
-
-/* Undefine the macro. */
-#undef MAKEMULT
-
-   }
-
-/* If succesful, return the pointer to the head of the list. */
-   if( astOK ) result = multipliers;
-
-/* Allow the next thread to proceed. */
-   UNLOCK_MUTEX2
-
-/* Return the result. */
-   return result;
-}
-
-static void InvertConstants( UnitNode **node, int *status ) {
-/*
-*  Name:
-*     InvertConstants
-
-*  Purpose:
-*     Take the reciprocal of all constants in a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void InvertConstants( UnitNode **node, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function replaces constant unit coefficients by their reciprocal.
-*     This is because a string such as "0.01 m" will be interpreted as 
-*     meaning "multiply a value in metres by 0.01 to get the value in the
-*     required units", whereas what is actually meant is "use units of
-*     0.01 of a metre" which requires us to divide the value in metres by
-*     0.01, not multiply it.
-
-*  Parameters:
-*     node
-*        The address of a pointer to the UnitNode at the head of the tree.
-*        On exit the supplied tree is freed and a pointer to a new tree is 
-*        placed at the given address.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int i;
-   UnitNode *newnode;
-   int allcon;
-   Oper op;
-
-/* Check inherited status and pointer. */
-   if( !astOK || !node || !(*node) ) return;
-
-/* Initiallially, we have no replacement node */
-   newnode = NULL;
-
-/* There is nothing to fix if the node has no arguments. */
-   if( (*node)->narg > 0 ) {
-
-/* Note the op code for the node. */
-      op = (*node)->opcode;
-
-/* Fix up the argument nodes. Also note if all the arguments are
-   constants. */
-      allcon = 1;
-      for( i = 0; i < (*node)->narg; i++ ) {
-         InvertConstants( &( (*node)->arg[ i ] ), status );
-         if( (*node)->arg[ i ]->con == AST__BAD ) allcon = 0;
-      }
-
-/* If all nodes are constant, there are no co-efficients to invert. */
-      if( !allcon ) {
-
-/* Iif this is a multiplication node, see if either of its arguments 
-   is a constant. If so, invert the constant. This is because a string like
-   "0.01 m" means "each unit is 0.01 of a metre". Therefore, to transform
-   a value in metres into required units means multiplying the metres
-   value by 100.0 (i.e the reciprocal of 0.01), not 0.01. */
-         if( op == OP_MULT ) {
-            for( i = 0; i < 2; i++ ) {
-               if( (*node)->arg[ i ]->con != AST__BAD ) {
-                  if( (*node)->arg[ i ]->con != 0.0 ) {
-
-                     (*node)->arg[ i ]->con = 1.0/(*node)->arg[ i ]->con;
-                  } else {
-                     astError( AST__BADUN, "Illegal zero constant encountered." , status);
-                  }
-               }
-            }
-
-/* Likewise, check for division nodes in which the denominator is
-   constant. */
-         } else if( op == OP_DIV ) {
-            if( (*node)->arg[ 1 ]->con != AST__BAD ) {
-               if( (*node)->arg[ 1 ]->con != 0.0 ) {
-                  (*node)->arg[ 1 ]->con = 1.0/(*node)->arg[ 1 ]->con;
-               } else {
-                  astError( AST__BADUN, "Illegal zero constant encountered." , status);
-               }
-            }
-
-/* If this is a "pow" node check that the second argument is constant
-   (required by FITS WCS paper I). */
-         } else if( op == OP_POW ) {
-            if( (*node)->arg[ 1 ]->con == AST__BAD ) {
-               astError( AST__BADUN, "Illegal variable exponent." , status);
-            }
-         }
-      }
-   }
-
-/* If an error has occurred, free any new node. */
-   if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
-   pointer to the new tree. */
-   if( newnode ) {
-      FreeTree( *node, status );
-      *node = newnode;
-   }
-}
-
-static UnitNode *InvertTree( UnitNode *fwdnode, UnitNode *src, int *status ) {
-/*
-*  Name:
-*     InvertTree
-
-*  Purpose:
-*     Invert a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *InvertTree( UnitNode *fwdnode, UnitNode *src )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function inverts a tree of UnitNodes. The supplied tree should
-*     have exactly one OP_LDVAR node. This will be the quantity represented 
-*     by the node at the head of the returned tree.
-
-*  Parameters:
-*     fwdnode
-*        A pointer to the UnitNode at the head of the tree which is to be 
-*        inverted.
-*     src 
-*        A pointer to a UnitNode which is to be used as the root of the
-*        inverted tree. That is, the output from this node should form
-*        the (one and only) varying input to the inverted tree. If the
-*        supplied tree is succesfulyl inverted, the tree of which "src"
-*        is the head will be contained within the returned inverted tree.
-*        Therefore "src" only needs to be freed explicitly if this
-*        function fails to invert the supplied tree for any reason. If
-*        this function succeeds, then "src" will be freed as part of
-*        freeing the returned inverted tree.
-
-*  Returned Value:
-*     A pointer to a UnitNode which forms the head of the inverted tree.
-
-*  Algorithm:
-*     The algorithm works through the supplied forward tree, from the head
-*     to the roots. First, the supplied node at the head of the forward
-*     tree is inverted. To be invertable, the supplied head node must have
-*     exactly one varying argument (any other arguments must be fixed,
-*     i.e. not vary). This varying argument becomes the output of the
-*     inverted node. The other (fixed) arguments to the forward node are
-*     also used as arguments to the inverted node. The supplied "src" node
-*     is used as the single varying input to the inverted node. Having
-*     inverted the supplied forward head node, this function is called
-*     recursively to invert the lower parts of the forward tree (i.e. the
-*     part of the forward tree which provided the varying input to node
-*     which has just been inverted).
-
-*  Notes:
-*     - It is assumed that he supplied forward tree has been simplified
-*     using SimplifyTree. This means that the tree contains no nodes with
-*     the following op codes: OP_LOG, OP_SQRT. OP_DIV (SimplifyTree
-*     converts these nodes into OP_LN, OP_POW and OP_MULT nodes).
-*     - A value of NULL will be returned if this function is invoked with 
-*     the global error status set, or if it should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   UnitNode *newnode;
-   UnitNode *nextnode;
-   UnitNode *result;
-   UnitNode *node1;
-   Oper fop;
-   int varg;
-
-/* Initialise */
-   result = NULL;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Initiallially, we have no replacement node */
-   newnode = NULL;
-   nextnode = NULL;
-
-/* Save the op code at the head of the forward tree. */
-   fop = fwdnode->opcode;
-
-/* If the head of the forward tree is a OP_EXP node. Inverse of
-   "exp(x)" is "ln(x)". */
-   if( fop == OP_EXP ) {
-      newnode = NewNode( NULL, OP_LN, status );
-      if( astOK ) {
-         newnode->arg[ 0 ] = src;
-         nextnode = fwdnode->arg[ 0 ];
-      }
-
-/* If the head of the forward tree is a OP_LN node. Inverse of
-   "ln(x)" is "exp(x)". */
-   } else if( fop == OP_LN ) {
-      newnode = NewNode( NULL, OP_EXP, status );
-      if( astOK ) {
-         newnode->arg[ 0 ] = src;
-         nextnode = fwdnode->arg[ 0 ];
-      }
-
-/* If the head of the forward tree is a OP_POW node. Inverse of 
-   "x**k" is "x**(1/k)" */
-   } else if( fop == OP_POW ) {
-      newnode = NewNode( NULL, OP_POW, status );
-      node1 = NewNode( NULL, OP_LDCON, status );
-      if( astOK ) {
-         node1->con = 1.0/fwdnode->arg[ 1 ]->con;
-         newnode->arg[ 0 ] = src;
-         newnode->arg[ 1 ] = node1;
-         nextnode = fwdnode->arg[ 0 ];
-      }
-
-/* If the head of the forward tree is a OP_MULT node... */
-   } else if( fop == OP_MULT ) {
-
-/* The node is only invertable if it has one constant node and one
-   non-constant node. Get the index of the varying argument. */
-      if( fwdnode->arg[ 0 ]->con != AST__BAD &&
-          fwdnode->arg[ 1 ]->con == AST__BAD ) {
-         varg = 1;
-      } else if( fwdnode->arg[ 0 ]->con == AST__BAD &&
-                 fwdnode->arg[ 1 ]->con != AST__BAD ) {
-         varg = 0;
-      } else {
-         varg = -1; 
-      }
-      if( varg != -1 ) {      
-
-/* The inverse of "k*x" is "(1/k)*x" (we use MULT nodes instead of DIV
-   nodes to maintain the standardisation implemented by SimplifyTree). */
-         newnode = NewNode( NULL, OP_MULT, status );
-         node1 = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) {
-            node1->con = 1.0/fwdnode->arg[ 1 - varg ]->con;
-            newnode->arg[ 0 ] = node1;
-            newnode->arg[ 1 ] = src;
-            nextnode = fwdnode->arg[ varg ];
-         }
-      }      
-
-/* If the head of the forward tree is a OP_LDVAR node, there is nothing
-   left to invert. SO return a pointer to the suppleid source node. */
-   } else if( fop == OP_LDVAR ) {
-      result = src;
-      nextnode = NULL;      
-
-/* If the head of the forward tree is any other node (e.g. a OP_LDCON node),
-   the tree cannot be inverted. */
-   } else {
-      nextnode = NULL;      
-   }
-
-/* If we managed to invert the node at the head of the supplied tree,
-   continue to invert its varying argument node (if any). */
-   if( nextnode && newnode ) result = InvertTree( nextnode, newnode, status );
-
-/* If the tree could not be inverted, free the newnode. */
-   if( !result ) newnode = FreeTree( newnode, status );
-
-/* If an error has occurred, free any new node. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
-   return result;
-
-}
-
-static void LocateUnits( UnitNode *node, UnitNode ***units, int *nunits, int *status ){
-/*
-*  Name:
-*     LocateUnits
-
-*  Purpose:
-*     Locate the units used by a supplied tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void LocateUnits( UnitNode *node, UnitNode ***units, int *nunits, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function locates the units used by a supplied tree of 
-*     UnitNodes.
-
-*  Parameters:
-*     node
-*        A pointer to the UnitNode at the head of the tree to be searched.
-*     units
-*        The address at which is stored a pointer to an array of "*nunits"
-*        elements. Each element of the array holds a pointer to a UnitNode.
-*        The array is extended on exit to hold pointers to the OP_LDVAR nodes
-*        within the supplied tree (i.e. nodes which represent named units, 
-*        either known or unknown). A node is only included in the returned 
-*        array if no other node for the same unit is already included in the 
-*        array. A NULL pointer should be supplied on the first invocation of
-*        this function. 
-*     nunits
-*        The address of an integer which holds the number of elements in
-*        the array given by "*units". Updated on exit to included any
-*        elements added to the array. Zero should be supplied on the first 
-*        invocation of this function. 
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   int i;
-   int found;
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Is the node at the head of the supplied tree an OP_LDVAR node? */
-   if( node->opcode == OP_LDVAR ) {
-
-/* If an array was supplied, see if it already contains a pointer to a node 
-   which refers to the same units. */
-      found = 0;
-      if( *units ) {
-         for( i = 0; i < *nunits; i++ ) {
-            if( !strcmp( (*units)[ i ]->name, node->name ) ) {
-               found = 1;
-               break;
-            }
-         }
-      }
-
-/* If not, ensure the array is big enough and add a pointer to the
-   supplied node to the array. */
-      if( !found ) {
-         *units = astGrow( *units, *nunits + 1, sizeof( UnitNode * ) );
-         if( astOK ) (*units)[ (*nunits)++ ] = node;
-      }
-
-/* If the supplied node is not an OP_LDVAR node, call this function
-   recursively to search the argument sub-trees. */
-   } else {
-      for( i = 0; i < node->narg; i++ ) {
-         LocateUnits( node->arg[ i ], units, nunits, status );
-      }
-   }
-}
-
-static const char *MakeExp( UnitNode *tree, int mathmap, int top, int *status ) {
-/*
-*  Name:
-*     MakeExp
-
-*  Purpose:
-*     Make an algebraic expression from a supplied tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     const char *MakeExp( UnitNode *tree, int mathmap, int top, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function produces a string holding an algebraic expression 
-*     corresponding to a supplied tree of UnitNodes.
-
-*  Parameters:
-*     tree
-*        A pointer to the UnitNode at the head of the tree to be converted
-*        into an algebraic expression. 
-*     mathmap
-*        If zero, format as an axis label expression. If 1, format as a 
-*        MathMap expression. If 2, format as a FITS unit string. 
-*     top
-*        Should be non-zero for a top-level entry to this function, and
-*        zero for a recursive entry.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the cleaned expression, which should be freed using
-*     astFree when no longer needed.
-
-*  Notes:
-*     - This function returns NULL if it is invoked with the global error 
-*     status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   UnitNode *newtree;
-   UnitNode *sunit;
-   char *a;
-   char *result;
-   char buff[200];
-   const char *arg0;
-   const char *arg1;
-   const char *mtxt;
-   int larg0;
-   int larg1;          
-   int lbuff;
-   int mlen;
-   int par;
-   int tlen;
-
-/* Check inherited status. */
-   result = NULL;
-   if( !astOK ) return result;
-
-/* Modify the tree to make the resulting transformation functions more 
-   natural to human readers. */
-   newtree = CopyTree( tree, status );
-   ComplicateTree( &newtree, status );
-
-/* If we are producing an axis label... */
-   if( !mathmap ) {
-
-/* Fix all multiplicative constants to 1.0 if they multiply an OP_LDVAR
-   OP_SQRT or OP_POW node. This is on the assumption that the returned label 
-   should not include any simple unit scaling (e.g. if the output label would 
-   be "2.345*wavelength", we prefer simply to use "wavelength" since a scaled 
-   wavelength is still a wavelength - i.e. simple scaling does not change 
-   the dimensions of a quantity). */
-      FixConstants( &newtree, 1, status );
-
-/* Simplify the tree again to get rid of the 1.0 terms which may have
-   been introduced by the previous line (but do not re-introduce any
-   standardisations - removing them was the reason for calling ComplicateTree).
-   If this simplication introduces any changes, try fixing multiplicative 
-   constants again, and so on, until no more changes occur. */
-      while( SimplifyTree( &newtree, 0, status ) ) {
-         FixConstants( &newtree, 1, status );
-      }
-
-   }
-
-/* Produce a string describing the action performed by the UnitNode at
-   the head of the supplied tree, and then invoke this function recursively
-   to format any arguments of the head node. */
-
-/* Constant valued nodes... just format the constant in a local buffer and
-   then copy the buffer. */
-   if( newtree->con != AST__BAD ) {
-      lbuff = sprintf( buff, "%.*g", DBL_DIG, newtree->con );
-      result = astStore( NULL, buff, lbuff + 1 );
-
-/* "Load Variable Value" nodes - return the variable name. If this is a
-   recursive call to this function, and we are producing a label, append a 
-   single space before and after the name. */
-   } else if( newtree->opcode ==  OP_LDVAR ) {
-      tlen = strlen( newtree->name );
-
-      if( !mathmap && !top ){ 
-         result = astMalloc( tlen + 3 );
-         if( result ) {
-            result[ 0 ] = ' ';
-            memcpy( result + 1, newtree->name, tlen );
-            memcpy( result + tlen + 1, " ", 2 );
-         }  
-
-      } else if( mathmap == 2 ) {
-
-         if( newtree->mult ) {
-           mlen = newtree->mult->symlen;
-           mtxt = newtree->mult->sym;
-         } else {
-           mlen = 0;
-           mtxt = NULL;
-         }
-
-         result = astMalloc( tlen + 1 + mlen );
-         if( result ) {
-            if( mtxt ) memcpy( result, mtxt, mlen );
-            memcpy( result + mlen, newtree->name, tlen + 1 );
-         }
-
-      } else {
-         result = astStore( NULL, newtree->name, tlen + 1 );
-      }
-
-/* Single argument functions... place the argument in parentheses after
-   the function name. */
-   } else if( newtree->opcode ==  OP_LOG ) {  
-      arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-      larg0 = strlen( arg0 );
-      if( mathmap == 1 ) {
-         result = astMalloc( larg0 + 8 );
-         if( result ) memcpy( result, "log10(", 7 );
-         a = result + 6;
-      } else { 
-         result = astMalloc( larg0 + 6 );
-         if( result ) memcpy( result, "log(", 5 );
-         a = result + 4;
-      }
-      if( result ){
-         memcpy( a, arg0, larg0 + 1 );
-         memcpy( a + larg0, ")", 2 );
-      }
-      arg0 = astFree( (void *) arg0 );
-
-   } else if( newtree->opcode ==  OP_LN ) {   
-      arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-      larg0 = strlen( arg0 );
-      if( mathmap == 1 ) {
-         result = astMalloc( larg0 + 6 );
-         if( result ) memcpy( result, "log(", 5 );
-         a = result + 4;
-      } else {
-         result = astMalloc( larg0 + 5 );
-         if( result ) memcpy( result, "ln(", 4 );
-         a = result + 3;
-      }
-      if( astOK ){
-         memcpy( a, arg0, larg0 );
-         memcpy( a + larg0, ")", 2 );
-      }
-      arg0 = astFree( (void *) arg0 );
-
-   } else if( newtree->opcode ==  OP_EXP ) {  
-      arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-      larg0 = strlen( arg0 );
-      result = astMalloc( larg0 + 6 );
-      if( result ){
-         memcpy( result, "exp(", 5 );
-         memcpy( result + 4, arg0, larg0 );
-         memcpy( result + 4 + larg0, ")", 2 );
-      }
-      arg0 = astFree( (void *) arg0 );
-
-   } else if( newtree->opcode ==  OP_SQRT ) { 
-      arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-      larg0 = strlen( arg0 );
-      result = astMalloc( larg0 + 7 );
-      if( result ){
-         memcpy( result, "sqrt(", 6 );
-         memcpy( result + 5, arg0, larg0 );
-         memcpy( result + 5 + larg0, ")", 2 );
-      }
-      arg0 = astFree( (void *) arg0 );
-
-/* POW... the exponent (arg[1]) is always a constant and so does not need 
-   to be placed in parentheses. The first argument only needs to be
-   placed in parentheses if it is a two arg node (except we also put it
-   in parentheses if it is an OP_LDVAR node and "mathmap" is zero - this is
-   because such OP_LDVAR nodes will correspond to axis labels which will
-   have spaces before and after them which would look odd if not encloses
-   in parentheses). */
-   } else if( newtree->opcode ==  OP_POW ) {  
-
-      arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-      larg0 = strlen( arg0 );
-
-      arg1 = MakeExp( newtree->arg[ 1 ], mathmap, 0, status );
-      larg1 = strlen( arg1 );
-
-      if( newtree->arg[ 0 ]->narg == 2 ||
-          (newtree->arg[ 0 ]->opcode == OP_LDVAR && !mathmap) ) {
-         par = 1;
-         result = astMalloc( larg0 + larg1 + 7 );
-         if( result ) memcpy( result, "(", 2 );
-         a = result + 1;
-      } else {
-         par = 0;
-         result = astMalloc( larg0 + larg1 + 5 );
-         a = result;
-      }
-
-      if( result ) {
-         memcpy( a, arg0, larg0 );
-         a += larg0;
-         if( par ) *(a++) = ')';
-         memcpy( a, "**", 3 );
-         a += 2;
-         memcpy( a, arg1, larg1 );
-         a += larg1;
-         *a = 0;
-      }
-
-      arg0 = astFree( (void *) arg0 );
-      arg1 = astFree( (void *) arg1 );
-
-/* DIV... the first argument (numerator) never needs to be in parentheses.
-   The second argument (denominator) only needs to be placed in parentheses 
-   if it is a MULT node. */
-   } else if( newtree->opcode ==  OP_DIV ) {  
-
-      if( mathmap == 2 && ( sunit = ModifyPrefix( newtree, status ) ) ) {
-         result = (char *) MakeExp( sunit, mathmap, 0, status );
-         sunit = FreeTree( sunit, status );
-
-      } else {         
-         arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-         larg0 = strlen( arg0 );
-   
-         arg1 = MakeExp( newtree->arg[ 1 ], mathmap, 0, status );
-         larg1 = strlen( arg1 );
-   
-         if( newtree->arg[ 1 ]->opcode == OP_MULT &&
-             strchr( arg1, '*' ) ) {
-            par = 1;
-            result = astMalloc( larg0 + larg1 + 4 );
-         } else {
-            par = 0;
-            result = astMalloc( larg0 + larg1 + 2 );
-         }
-   
-         if( result ) {
-            memcpy( result, arg0, larg0 );
-            a = result + larg0;
-            *(a++) = '/';
-            if( par ) *(a++) = '(';
-            memcpy( a, arg1, larg1 );
-            a += larg1;
-            if( par ) *(a++) = ')';
-            *a = 0;
-         }
-   
-         arg0 = astFree( (void *) arg0 );
-         arg1 = astFree( (void *) arg1 );
-      }
-
-/* MULT... the second argument never needs to be in parentheses. The first 
-   argument only needs to be placed in parentheses if it is a DIV or POW 
-   node. */
-   } else if( newtree->opcode ==  OP_MULT ) { 
-      if( mathmap == 2 && ( sunit = ModifyPrefix( newtree, status ) ) ) {
-         result = (char *) MakeExp( sunit, mathmap, 0, status );
-         sunit = FreeTree( sunit, status );
-
-      } else {
-         arg0 = MakeExp( newtree->arg[ 0 ], mathmap, 0, status );
-         larg0 = strlen( arg0 );
-   
-         arg1 = MakeExp( newtree->arg[ 1 ], mathmap, 0, status );
-         larg1 = strlen( arg1 );
-
-/* If this is a top-level entry and we are producing an axis label, do
-   not include any constant multiplicative terms. */
-         if( top && !mathmap ) {
-            if( newtree->arg[ 0 ]->con != AST__BAD ) arg0 = astFree( (void *) arg0 );
-            if( newtree->arg[ 1 ]->con != AST__BAD ) arg1 = astFree( (void *) arg1 );
-         }
-
-/* If we have two arguments, concatentate them, placing the operands in 
-   parentheses if necessary. */
-         if( arg0 && arg1 ) {
-   
-            if( ( newtree->arg[ 0 ]->opcode == OP_DIV && 
-                  strchr( arg0, '/' ) ) ||
-                ( newtree->arg[ 0 ]->opcode == OP_POW &&
-                  strstr( arg0, "**" ) ) ) {
-               par = 1;
-               result = astMalloc( larg0 + larg1 + 4 );
-               if( result ) result[ 0 ] = '(';
-               a = result + 1;
-            } else {
-               par = 0;
-               result = astMalloc( larg0 + larg1 + 2 );
-               a = result;
-            }
-      
-            if( result ) {
-               memcpy( a, arg0, larg0 );
-               a += larg0;
-               if( par ) *(a++) = ')';
-               *(a++) = '*';
-               memcpy( a, arg1, larg1 );
-               a += larg1;
-               *a = 0;
-            }
-      
-            arg0 = astFree( (void *) arg0 );
-            arg1 = astFree( (void *) arg1 );
-
-/* If we do not have two arguments, just return the one we do have. */
-         } else if( arg0 ){
-            result = (char *) arg0;
-   
-         } else {
-            result = (char *) arg1;
-         }
-      }
-   }
-
-/* Free the complicated tree. */
-   newtree = FreeTree( newtree, status );
-
-/* Free the returned string if an error has occurred. */
-   if( !astOK ) result = astFree( result );
-
-/* Return the result. */
-   return (const char *) result;
-}
-
-static void MakeKnownUnit( const char *sym, const char *label, const char *exp, int *status ){
-/*
-*  Name:
-*     MakeKnownUnit
-
-*  Purpose:
-*     Create a KnownUnit structure describing a known unit.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void MakeKnownUnit( const char *sym, const char *label, const char *exp, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function creates a KnownUnit structure decribing a known unit,
-*     and adds it to the head of the linked list of known units stored in
-*     a module variable.
-
-*  Parameters:
-*     sym
-*        A pointer to a string which can be used as a symbol to represent
-*        the new named unit. Once defined, this symbol can be included within 
-*        the definition of other derived units. The string should contain 
-*        only alphabetical characters (no digits, spaces, punctuation,
-*        etc). Symbols are case sensitive (e.g. "s" is second, but "S" is
-*        Siemens). The string should not include any multiplier prefix.
-*     label
-*        Pointer to a null terminated string containing the label for
-*        the required units. No restriction on content.
-*     exp
-*        This should be a pointer to a null terminated string containing
-*        a definition of the required unit. See the description of the
-*        "in" and "out" parameters for the astUnitMapper function.
-*
-*        A NULL pointer or a blank string may supplied for "exp", which
-*        is interpreted as a request for a new basic unit to be created with 
-*        the symbol and label given by the other parameters. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The supplied symbol and label strings are not copied. The
-*     supplied pointers are simply stored in the returned structure.
-*     Therefore the strings to which the pointers point should not be
-*     modified after this function returned (in fact this function is
-*     always called with literal strings for these arguments).
-*/
-
-/* Local Variables: */
-   KnownUnit *result;
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Indicate that subsequent memory allocations may never be freed (other
-   than by any AST exit handler). */
-   astBeginPM;
-
-/* Allocate memory for the structure, and check the returned pointer can
-   be used safely. */
-   result = astMalloc( sizeof( KnownUnit ) );
-   if( astOK ) {
-
-/* In case of errors, first nullify the pointer to the next KnownUnit. */
-      result->next = NULL;      
-
-/* Store the supplied label and symbol pointers. */
-      result->sym = sym;
-      result->label = label;
-
-/* Store the length of the symbol (without the trailing null character). */
-      result->symlen = strlen( sym );
-
-/* Store the length of the label (without the trailing null character). */
-      result->lablen = strlen( label );
-
-/* Create a tree of UnitNodes describing the unit if an expression was
-   supplied. */
-      result->head = exp ? CreateTree( exp, 1, 0, status ) : NULL;
-
-/* Unit aliases are replaced in use by the KnownUnit pointed to by the
-   "use" component of the structure. Indicate this KnownUnitis not an
-    alias by setting its "use" component NULL. */
-      result->use = NULL; 
-   }
-
-/* Mark the end of the section in which memory allocations may never be  
-   freed (other than by any AST exit handler). */
-   astEndPM;
-
-/* If an error has occurred, free any returned structure. */
-   if( !astOK ) {
-      result->head = FreeTree( result->head, status );
-      result = astFree( result ) ;
-
-/* Otherwise, add the new KnownUnit to the head of the linked list of
-   known units. */
-   } else {
-      result->next = known_units;
-      known_units = result;
-   }
-
-}
-
-static AstMapping *MakeMapping( UnitNode *tree, int *status ) {
-/*
-*  Name:
-*     MakeMapping
-
-*  Purpose:
-*     Create a new Mapping from a given tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     AstMapping *MakeMapping( UnitNode *tree )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function creates a Mapping with a forward transformation equal
-*     to the transformation described by the tree of UnitNodes. The head
-*     node of the tree corresponds to the output of the Mapping.
-
-*  Parameters:
-*     tree
-*        The UnitNode at the head of the tree to be used. It should have
-*        exactly one OP_LDVAR node, and should have been simplified using
-*        the SimplifyTree function.
-
-*  Returned Value:
-*     A pointer to the Mapping. Its Nin and Nout attributes will both be 1.
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked with 
-*     the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *result;
-   UnitNode *inv;
-   UnitNode *src;
-   const char *fwdexp;
-   char *fwdfun;
-   const char *invexp;
-   char *invfun;
-   int lfwd;
-   int linv;
-   
-/* Initialise. */
-   result = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* First see if a UnitMap can be used to represent the Mapping from 
-   input units to output units. This will be the case if the supplied tree 
-   consists of a aingle OP_LDVAR node (corresponding to the input units). */
-   if( tree->opcode == OP_LDVAR ) {
-      result = (AstMapping *) astUnitMap( 1, "", status );
-
-/* Now see if a UnitMap or ZoomMap can be used to represent the Mapping from 
-   input units to output units. This will be the case if the supplied tree 
-   consists of a OP_MULT node with one constant argument and on OP_LDVAR
-   argument (corresponding to the input units). The standardisation done by
-   SimplifyTree will have ensured that the constant will be argument 0
-   (and will also have converted "x/k" trees into "(1/k)*x" trees). */
-   } else if( tree->opcode == OP_MULT && 
-              tree->arg[ 0 ]->con != AST__BAD &&
-              tree->arg[ 1 ]->opcode == OP_LDVAR ) {
-
-      if( tree->arg[ 0 ]->con == 1.0 ) {
-         result = (AstMapping *) astUnitMap( 1, "", status );
-      } else {
-         result = (AstMapping *) astZoomMap( 1, tree->arg[ 0 ]->con, "", status );
-      }
-
-/* For other trees we need to create a MathMap. */
-   } else {
-
-/* Format the supplied tree as an algebraic expression, and get its length. */
-      fwdexp = MakeExp( tree, 1, 1, status );
-      lfwd = strlen( fwdexp );
-
-/* The MathMap constructor requires the forward and inverse
-   transformation functions to be specified as equations (i.e. including an
-   equals sign). We use the output variable name "output_units" (the
-   astUnitMapper function creates the supplied tree usign the variable
-   name "input_units" ). */
-      lfwd += 13;
-
-/* Invert the supplied tree and create an algebraic expression from it. */
-      src = NewNode( NULL, OP_LDVAR, status );
-      if( astOK ) src->name = astStore( NULL, "output_units", 13 );
-      inv = InvertTree( tree, src, status );
-      if( !inv ) {
-         src = FreeTree( src, status );
-         astError( AST__BADUN, "MakeMapping(Unit): Failed to invert "
-                   "supplied tree '%s' (internal AST programming error).", status, 
-                   fwdexp );
-
-/* If inverted succesfully (which it should be since astUnitMapper should
-   have checked this)... */
-      } else {
-
-/* Format the inverted tree as an algebraic expression, and get its
-   length, adding on extra characters for the variable name ("input_units")
-   and equals sign. */
-         invexp = MakeExp( inv, 1, 1, status );
-         linv = strlen( invexp );
-         linv += 12;
-
-/* Allocate memory for the transformation functions, plus an extra
-   character for the trailing null. */
-         fwdfun = astMalloc( lfwd + 1 );
-         invfun = astMalloc( linv + 1 );
-         if( invfun ) {
-            memcpy( fwdfun, "output_units=", 14 );
-            memcpy( invfun, "input_units=", 13 );
- 
-/* Append the expressions following the equals signs. */
-            strcpy( fwdfun + 13, fwdexp );
-            strcpy( invfun + 12, invexp );
-
-/* Create the MathMap. */
-            result = (AstMapping *) astMathMap( 1, 1, 1, 
-                                                (const char **) &fwdfun, 1, 
-                                                (const char **) &invfun, 
-                                                "SimpFI=1,SimpIF=1", status );
-         }
-
-/* Free resources. */
-         inv = FreeTree( inv, status );
-         fwdfun = astFree( fwdfun );  
-         invfun = astFree( invfun );  
-         invexp = astFree( (void *) invexp );  
-      }
-      fwdexp = astFree( (void *) fwdexp );  
-   }
-
-/* Free any result if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the answer. */
-   return result;
-}
-
-static UnitNode *MakeLabelTree( const char *lab, int nc, int *status ){
-/*
-*  Name:
-*     MakeLabelTree
-
-*  Purpose:
-*     Convert an axis label into a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *MakeLabelTree( const char *lab, int nc, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function converts an axis label into a tree of UnitNodes. 
-*     It is assumed the supplied label represents some "basic" label 
-*     modified by the application of one or more single function arguments
-*     and/or exponentiation operators. The (single) OP_LDVAR node in the 
-*     returned tree refers to the basic label (it is stored as the "name"
-*     component of UnitNode structure).
-
-*  Parameters:
-*     lab
-*        The label expression. 
-*     nc
-*        The number of characters from "lab" to use.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a UnitNode which forms the head of a tree of UnitNodes
-*     representing the supplied label expression.
-
-*  Notes:
-*     -  A NULL value is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   Oper op;
-   UnitNode *result;
-   char buff[ 10 ];
-   const char *c;
-   const char *exp;
-   int depth;
-   int i;
-   int oplen;
-   int n;
-   double con;
-
-/* Initialise */
-   result = NULL;
-   oplen = 0;
-
-/* Check the global error status, and that we have a string. */
-   if ( !astOK || !lab || !nc ) return result;
-
-/* Get a pointer to the first non-blank character, and store the number of 
-   characters to examine (this excludes any trailing white space). */  
-   exp = lab;
-   while( isspace( *exp ) ) exp++;
-   c = lab + nc - 1; 
-   while( c >= exp && isspace( *c ) ) c--;
-   nc = c - exp + 1;
-
-/* Scan through the supplied string looking for the first pow operator at 
-   zero depth of nesting within parentheses. */
-   depth = 0;
-   c = exp;
-   i = 0;
-   op = OP_NULL;
-   while( i < nc && *c ){
-
-/* If this character is an opening parenthesis, increment the depth of
-   nesting. */
-      if( *c == '(' ) {
-         depth++;   
-
-/* If this character is an closing parenthesis, decrement the depth of
-   nesting. Report an error if it ever goes negative. */
-      } else if( *c == ')' ) {
-         depth--;   
-         if( depth < 0 && astOK ) {
-            astError( AST__BADUN, "Missing opening parenthesis." , status);
-            break;
-         }
-
-/* Ignore all other characters unless they are at zero depth of nesting. 
-   Also ignore spaces. */
-      } else if( depth == 0 && !isspace( *c ) ) {
-
-/* Compare the next part of the string with each of the "pow" operators. */
-         if( !strncmp( c, "**", 2 ) ) {
-            op = OP_POW;
-            oplen = 2;
-         } else if( *c == '^' ) {
-            op = OP_POW;
-            oplen = 1;
-         }
-
-/* If an operator was found, break out of the loop. */
-         if( op != OP_NULL ) break;
-      }
-
-/* Pass on to check the next character. */
-      i++;
-      c++;
-   }
-
-/* If a "pow" operator was found, the strings on either side of it should be 
-   valid unit expressions, in which case we use this routine recursively to 
-   create corresponding trees of UnitNodes. */
-   if( op != OP_NULL ) {
-
-/* Create a UnitNode for the operator. */
-      result = NewNode( NULL, op, status );
-      if( astOK ) {
-
-/* Create a tree of unit nodes from the string which preceeds the binary
-   operator. Report an error if it cannot be done. */
-        result->arg[ 0 ] = MakeLabelTree( exp, i, status );
-        if( !result->arg[ 0 ] && astOK ) {
-           for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-           buff[ oplen ] = 0;
-           astError( AST__BADUN, "Missing operand before '%s'.", status, buff );
-        }
-
-/* Create a tree of unit nodes from the string which follows the binary
-   operator. Report an error if it cannot be done. */
-         result->arg[ 1 ] = MakeLabelTree( c + oplen, nc - i - oplen, status );
-         if( !result->arg[ 1 ] && astOK ) {
-             for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-            buff[ oplen ] = 0;
-            astError( AST__BADUN, "Missing operand after '%s'.", status, buff );
-         }
-      }
-
-/* If no binary operator was found at depth zero, see if the supplied string 
-   starts with a function name (the only legal place for a function name 
-   given that the string has no binary operators at depth zero). */
-   } else {
-      if( !strncmp( exp, "sqrt(", 5 ) || !strncmp( exp, "SQRT(", 5 ) ) {
-         op = OP_SQRT;
-         oplen = 4;
-      } else if( !strncmp( exp, "exp(", 4 ) || !strncmp( exp, "EXP(", 4 ) ) {
-         op = OP_EXP;
-         oplen = 3;
-      } else if( !strncmp( exp, "ln(", 3 ) || !strncmp( exp, "LN(", 3 ) ) {
-         op = OP_LN;
-         oplen = 2;
-      } else if( !strncmp( exp, "log(", 4 ) || !strncmp( exp, "LOG(", 4 ) ) {
-         op = OP_LOG;
-         oplen = 3;
-      }
-
-/* If a function was found, the string following the function name
-   (including the opening parenthesis) should form a legal units
-   expresssion (all the supported functions take a single argument and 
-   so we do not need to worry about comma-separated lists of function 
-   arguments). Use this routine recursively to create a tree of UnitNodes
-   from the string which forms the function argument. */
-      if( op != OP_NULL ) {
-
-/* Create a UnitNode for the function. */
-         result = NewNode( NULL, op, status );
-         if( astOK ) {
-
-/* Create a tree of unit nodes from the string which follows the function
-   name. Report an error if it cannot be done. */
-            result->arg[ 0 ] = MakeLabelTree( exp + oplen, nc - oplen, status );
-            if( !result->arg[ 0 ] && astOK ) {
-               for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-               buff[ oplen ] = 0;
-               astError( AST__BADUN, "Missing argument for '%s'.", status, buff );
-            }
-         }
-
-/* Arrive here if the supplied string does not contain a POW operator
-   or function at depth zero. Check to see if the whole string is contained
-   within parentheses, In which we interpret the contents of the
-   parentheses as a units expression. It is safe simply to check the
-   first and last characters (a string like "(fred)(Harry)" is not a
-   legal possibility since there should be an operator in the middle).*/
-      } else if( nc > 0 && ( exp[ 0 ] == '(' && exp[ nc - 1 ] == ')' ) ) {
-         result = MakeLabelTree( exp + 1, nc - 2, status );
-
-/* Does the string begin with a numerical constant? */
-      } else if( ConStart( exp, &con, &n, status ) == 1 ) {
-
-/* If the entire string was a numerical constant, represent it by a LDCON
-   node. */
-         if( n == nc ) {
-            result = NewNode( NULL, OP_LDCON, status );
-            if( astOK ) result->con = con;
-
-/* If there was anything following the numerical constant, report an
-   error. */
-         } else if( astOK ){
-            astError( AST__BADUN, "Missing operator after "
-                      "numerical string '%.*s'.", status, n, exp );
-         }
-
-/* The only legal possibility left is that the string represents the basic
-   label. Create an OP_LDVAR node for it and store the basic label as
-   the node name, omitting any enclosing white space. */
-      } else {
-         result = NewNode( NULL, OP_LDVAR, status );
-         if( astOK ) {
-            result->name = astStore( NULL, exp, nc + 1 );
-            if( astOK ) ( (char *) result->name)[ nc ] = 0;
-         }
-      }
-   }
-
-/* Free any returned tree if an error has occurred. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
-   return result;
-}
-
-static UnitNode *MakeTree( const char *exp, int nc, int lock, int *status ){
-/*
-*  Name:
-*     MakeTree
-
-*  Purpose:
-*     Convert an algebraic units expression into a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *MakeTree( const char *exp, int nc, int lock, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function converts an algebraic units expression into a tree of
-*     UnitNodes. It is a service routine for CreateTree. The roots of the 
-*     returned tree (i.e. the LDVAR nodes) refer to the unit symbols
-*     contained within the supplied expression (i.e. definitions of these
-*     units are not grafted onto the tree in place of the original nodes,
-*     as is done by CreateTree).
-
-*  Parameters:
-*     exp
-*        The units expression. This should not include any leading or
-*        trailing spaces.
-*     nc
-*        The number of characters from "exp" to use.
-*     lock
-*        Use a mutex to guard access to the KnownUnits list?
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a UnitNode which forms the head of a tree of UnitNodes
-*     representing the supplied unit expression.
-
-*  Notes:
-*     -  A NULL value is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   KnownUnit *munit;
-   KnownUnit *unit;
-   Multiplier *mmult;
-   Multiplier *mult;
-   Oper op;
-   UnitNode *result;
-   char buff[ 10 ];
-   char d;
-   const char *c;
-   double con;
-   int depth;
-   int i;
-   int l;                
-   int maxlen;
-   int n;           
-   int oplen;
-   int plural;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status, and that we have a string. */
-   if ( !astOK || !exp || nc <= 0 ) return result;
-
-/* Scan through the supplied string from the end to the start looking for 
-   the last multiplication or division operator at zero depth of nesting 
-   within parentheses. We go backwards through the string in order to
-   give the correct priority to multiple division operators (i.e. "a/b/c"
-   needs to be interpreted as "(a/b)/c", not "a/(b/c)"). */
-   op = OP_NULL;
-   oplen = 1;
-   depth = 0;
-   c = exp + nc - 1;
-   i = nc - 1;
-   while( i >= 0 ){
-
-/* If this character is an opening parenthesis, decrement the depth of
-   nesting. Report an error if it ever goes negative. */
-      if( *c == '(' ) {
-         depth--;   
-         if( depth < 0 && astOK ) {
-            astError( AST__BADUN, "Missing closing parenthesis." , status);
-            break;
-         }
-
-/* An opening parenthesis at level zero must always be either the first
-   character in the string, or be preceeded by the name of a function, or 
-   be preceeded by an operator. If none of these are true, assume there is 
-   an implicit multiplication operator before the parenthesis. */
-         if( depth == 0 && i > 0 ) {
-            d = *( c - 1 );
-            if( d != '*' && d != '/' && d != '^' && d != '.' && d != ' ' &&
-                !EndsWith( c, i + 1, "sqrt(", status ) && !EndsWith( c, i + 1, "exp(", status ) && 
-                !EndsWith( c, i + 1, "ln(", status ) && !EndsWith( c, i + 1, "log(", status ) ) {
-               op = OP_MULT;
-               oplen = 0;
-               break;
-            }
-         }
-
-/* If this character is an closing parenthesis, increment the depth of
-   nesting. */
-      } else if( *c == ')' ) {
-         depth++;   
-
-/* A closing parenthesis at level zero must always be either the last
-   character in the string, or be followed by an operator. If neither of
-   these are true, assume there is an implicit multiplication operator. */
-         if( depth == 1 && i < nc - 1 ) {
-            d = *(c+1);
-            if( d != '*' && d != '/' && d != '^' && d != '.' && d != ' ') {
-               op = OP_MULT;
-               oplen = 0;
-
-/* Correct "i" so that it gives the length of the left hand operand of
-   the implicit MULT operator, correct "c" so that it points to the first
-   character in the right hand operand, and leave the loop. */
-               i++;
-               c++;
-               break;
-            }
-         }
-
-/* Ignore all other characters unless they are at zero depth of nesting. */
-      } else if( depth == 0 ) {
-
-/* Compare the next part of the string with each of the multiplication 
-   and division operators. */
-         if( *c == '/' ) {
-            op = OP_DIV;
-
-         } else if( *c == ' ' ) {
-            op = OP_MULT;            
-
-/* An asterisk is only treated as a multiplication symbol if it does not occur
-   before or after another asterisk. */
-         } else if( *c == '*' ) {
-            if(  c == exp ) {
-               if( *(c+1) != '*' ) op = OP_MULT;            
-            } else if( i == nc - 1 ) {
-               if( *(c-1) != '*' ) op = OP_MULT;            
-            } else {
-               if( *(c+1) != '*' && *(c-1) != '*' ) op = OP_MULT;            
-            }
-
-/* A dot is only treated as a multiplication symbol if it does not occur
-   between two digits. */
-         } else if( *c == '.' ) {
-            if( ( c == exp || !isdigit( *(c-1) ) ) && 
-                ( i == nc - 1 || !isdigit( *(c+1) ) ) ) {
-               op = OP_MULT;            
-            }
-         }
-      }
-
-/* If an operator was found, break out of the loop. */
-      if( op != OP_NULL ) break;
-
-/* Pass on to check the next character. */
-      i--;
-      c--;
-   }
-
-/* If a multiplication or division operator was found, the strings on either 
-   side of it should be valid unit expressions, in which case we use this 
-   routine recursively to create corresponding trees of UnitNodes. */
-   if( op != OP_NULL ) {
-
-/* Create a UnitNode for the binary operator. */
-      result = NewNode( NULL, op, status );
-      if( astOK ) {
-
-/* Create a tree of unit nodes from the string which preceeds the binary
-   operator. Report an error if it cannot be done. */
-         result->arg[ 0 ] = MakeTree( exp, i, lock, status );
-         if( !result->arg[ 0 ] && astOK ) {
-            for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-            buff[ oplen ] = 0;
-            astError( AST__BADUN, "Missing operand before '%s'.", status, buff );
-         }
-
-/* Create a tree of unit nodes from the string which follows the binary
-   operator. Report an error if it cannot be done. */
-         result->arg[ 1 ] = MakeTree( c + oplen, nc - i - oplen, lock, status );
-         if( !result->arg[ 1 ] && astOK ) {
-            for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-            buff[ oplen ] = 0;
-            astError( AST__BADUN, "Missing operand after '%s'.", status, buff );
-         }
-      }
-
-/* If no multiplication or division operator was found at depth zero, check 
-   that the final depth of nesting was zero. Report an error if not. */
-   } else if( depth > 0 && astOK ) {
-      astError( AST__BADUN, "Missing opening parenthesis." , status);
-
-/* Otherwise check for a "Pow" operator at depth zero. */
-   } else {
-
-/* Scan through the supplied string looking for the first pow operator at 
-   zero depth of nesting within parentheses. */
-      depth = 0;
-      c = exp;
-      i = 0;
-      while( i < nc && *c ){
-
-/* If this character is an opening parenthesis, increment the depth of
-   nesting. */
-         if( *c == '(' ) {
-            depth++;   
-
-/* If this character is an closing parenthesis, decrement the depth of
-   nesting. Report an error if it ever goes negative. */
-         } else if( *c == ')' ) {
-            depth--;   
-            if( depth < 0 && astOK ) {
-               astError( AST__BADUN, "Missing opening parenthesis." , status);
-               break;
-            }
-
-/* Ignore all other characters unless they are at zero depth of nesting. */
-         } else if( depth == 0 ) {
-
-/* Compare the next part of the string with each of the "pow" operators. */
-            if( !strncmp( c, "**", 2 ) ) {
-               op = OP_POW;
-               oplen = 2;
-            } else if( *c == '^' ) {
-               op = OP_POW;
-               oplen = 1;
-            }
-
-/* If an operator was found, break out of the loop. */
-            if( op != OP_NULL ) break;
-         }
-
-/* Pass on to check the next character. */
-         i++;
-         c++;
-      }
-
-/* If a "pow" operator was found, the strings on either side of it should be 
-   valid unit expressions, in which case we use this routine recursively to 
-   create corresponding trees of UnitNodes. */
-      if( op != OP_NULL ) {
-
-/* Create a UnitNode for the operator. */
-         result = NewNode( NULL, op, status );
-         if( astOK ) {
-
-/* Create a tree of unit nodes from the string which preceeds the binary
-   operator. Report an error if it cannot be done. */
-            result->arg[ 0 ] = MakeTree( exp, i, lock, status );
-            if( !result->arg[ 0 ] && astOK ) {
-               for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-               buff[ oplen ] = 0;
-               astError( AST__BADUN, "Missing operand before '%s'.", status, buff );
-            }
-
-/* Create a tree of unit nodes from the string which follows the binary
-   operator. Report an error if it cannot be done. */
-            result->arg[ 1 ] = MakeTree( c + oplen, nc - i - oplen, lock, status );
-            if( !result->arg[ 1 ] && astOK ) {
-                for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-               buff[ oplen ] = 0;
-               astError( AST__BADUN, "Missing operand after '%s'.", status, buff );
-            }
-         }
-
-/* If no binary operator was found at depth zero, see if the supplied string 
-   starts with a function name (the only legal place for a function name 
-   given that the string has no binary operators at depth zero). */
-      } else {
-         if( !strncmp( exp, "sqrt(", 5 ) || !strncmp( exp, "SQRT(", 5 ) ) {
-            op = OP_SQRT;
-            oplen = 4;
-         } else if( !strncmp( exp, "exp(", 4 ) || !strncmp( exp, "EXP(", 4 ) ) {
-            op = OP_EXP;
-            oplen = 3;
-         } else if( !strncmp( exp, "ln(", 3 ) || !strncmp( exp, "LN(", 3 ) ) {
-            op = OP_LN;
-            oplen = 2;
-         } else if( !strncmp( exp, "log(", 4 ) || !strncmp( exp, "LOG(", 4 ) ) {
-            op = OP_LOG;
-            oplen = 3;
-         }
-
-/* If a function was found, the string following the function name
-   (including the opening parenthesis) should form a legal units
-   expresssion (all the supported functions take a single argument and 
-   so we do not need to worry about comma-separated lists of function 
-   arguments). Use this routine recursively to create a tree of UnitNodes
-   from the string which forms the function argument. */
-         if( op != OP_NULL ) {
-
-/* Create a UnitNode for the function. */
-            result = NewNode( NULL, op, status );
-            if( astOK ) {
-
-/* Create a tree of unit nodes from the string which follows the function
-   name. Report an error if it cannot be done. */
-               result->arg[ 0 ] = MakeTree( exp + oplen, nc - oplen, lock, status );
-               if( !result->arg[ 0 ] && astOK ) {
-                  for( i = 0; i < oplen; i++ ) buff[ i ] = c[ i ];
-                  buff[ oplen ] = 0;
-                  astError( AST__BADUN, "Missing argument for '%s'.", status, buff );
-               }
-            }
-
-/* Arrive here if the supplied string does not contain a binary operator
-   or function at depth zero. Check to see if the whole string is contained
-   within parentheses, In which we interpret the contents of the
-   parentheses as a units expression. It is safe simply to check the
-   first and last characters (a string like "(fred)(Harry)" is not a
-   legal possibility since there should be an operator in the middle).*/
-         } else if( exp[ 0 ] == '(' && exp[ nc - 1 ] == ')' ) {
-            result = MakeTree( exp + 1, nc - 2, lock, status );
-
-/* Does the string begin with a numerical constant? */
-         } else if( ConStart( exp, &con, &n, status ) == 1 ) {
-
-/* If the entire string was a numerical constant, represent it by a LDCON
-   node. */
-            if( n == nc ) {
-               result = NewNode( NULL, OP_LDCON, status );
-               if( astOK ) result->con = con;
-
-/* If there was anything following the numerical constant, report an
-   error. */
-            } else if( astOK ){
-               astError( AST__BADUN, "Missing operator after "
-                         "numerical string '%.*s'.", status, n, exp );
-            }
-
-/* Does the string represent one of the named constants? If so represent it 
-   by a an appropriate operator. */
-         } else if( nc == 2 && ( !strncmp( exp, "pi", 2 ) || 
-                                 !strncmp( exp, "PI", 2 ) ) ) {
-            result = NewNode( NULL, OP_LDPI, status );
-
-         } else if( nc == 1 && ( !strncmp( exp, "e", 1 ) || 
-                                 !strncmp( exp, "E", 1 ) ) ) {
-            result = NewNode( NULL, OP_LDE, status );
-
-/* The only legal possibility left is that the string represents the name
-   of a basic unit, possibly prefixed by a multiplier character. */
-         } else {
-
-/* See if the string ends with the symbol for any of the known basic
-   units. If it matches more than one basic unit, choose the longest. 
-   First ensure descriptions of the known units are  available. */
-            mmult = NULL;
-            plural = 0;
-            while( 1 ) {
-               unit = GetKnownUnits( lock, status );
-
-               maxlen = -1;
-               munit = NULL;
-               while( unit ) {
-                  if( SplitUnit( exp, nc, unit->sym, 1, &mult, &l, status ) ) {
-                     if( l > maxlen ) {
-                        maxlen = l;
-                        munit = unit;
-                        mmult = mult;
-                     }
-                  } 
-                  unit = unit->next;
-               }
-
-/* If the above did not produce a match, try matching the unit symbol
-   case insensitive. */
-               if( !munit ) {
-                  unit = GetKnownUnits( lock, status );
-                  while( unit ) {
-                     if( SplitUnit( exp, nc, unit->sym, 0, &mult, &l, status ) ) {
-                        if( l > maxlen ) {
-                           maxlen = l;
-                           munit = unit;
-                           mmult = mult;
-                        }
-                     } 
-                     unit = unit->next;
-                  }
-               }
-
-/* If the above did not produce a match, try matching the unit label
-   case insensitive. */
-               if( !munit ) {
-                  unit = GetKnownUnits( lock, status );
-                  while( unit ) {
-                     if( SplitUnit( exp, nc, unit->label, 0, &mult, &l, status ) ) {
-                        if( l > maxlen ) {
-                           maxlen = l;
-                           munit = unit;
-                           mmult = mult;
-                        }
-                     } 
-                     unit = unit->next;
-                  }
-               }
-
-/* If we still do not have a match, and if the string ends with "s", try
-   removing the "s" (which could be a plural as in "Angstroms") and
-   trying again. */
-               if( !munit && nc > 1 && !plural && 
-                   ( exp[ nc - 1 ] == 's' || exp[ nc - 1 ] == 'S' ) ) {
-                  plural = 1;
-                  nc--;
-               } else {
-                  break;
-               }
-            }
-            if( plural ) nc++;
-
-/* If a known unit and multiplier combination was found, create an
-   OP_LDVAR node from it. */
-            unit = munit;
-            mult = mmult;
-            if( unit ) {
-
-/* If the unit is an alias for another unit, it will have a non-NULL
-   value for its "use" component.In this case, use the unit for which the 
-   identified unit is an alias. */
-               result = NewNode( NULL, OP_LDVAR, status );
-               if( astOK ) {
-                  result->unit = unit->use ? unit->use : unit;
-                  result->mult = mult;
-                  result->name = astStore( NULL, result->unit->sym, result->unit->symlen + 1 );
-               }
-
-/* If no known unit and multiplier combination was found, we assume the
-   string represents a new user-defined basic unit, possibly preceeded by a
-   standard multiplier prefix. */
-            } else {
-
-/* Check the string to see if starts with a known multiplier prefix (but
-   do not allow the multiplier to account for the entire string). */
-               mult = GetMultipliers( status );
-               c = exp;
-               while( mult ) {
-                  n = nc - mult->symlen;
-                  if( n > 0 && !strncmp( exp, mult->sym, mult->symlen ) ) {
-                     c += mult->symlen;
-                     break;
-                  }
-                  mult = mult->next;
-               }
-               if( !mult ) n = nc;
-
-/* Check there are no illegal characters in the following string. */
-               for( i = 0; i < n && astOK; i++ ) {
-                  if( !isalpha( c[ i ] ) ) {
-                     astError( AST__BADUN, "Illegal character '%c' found.", status, c[ i ] );
-                     break;
-                  }
-               }
-
-/* If succesfull, create an OP_LDVAR node for th user-defined basic unit. */
-               if( astOK ) {
-                  result = NewNode( NULL, OP_LDVAR, status );
-                  if( astOK ) {
-                     result->mult = mult;
-                     result->name = astStore( NULL, c, n + 1 );
-                     if( astOK ) ( (char *) result->name)[ n ] = 0;
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Free any returned tree if an error has occurred. */
-   if( !astOK ) result = FreeTree( result, status );
-
-/* Return the result. */
-   return result;
-}
-
-static void MakeUnitAlias( const char *sym, const char *alias, int *status ){
-/*
-*  Name:
-*     MakeUnitAlias
-
-*  Purpose:
-*     Create a KnownUnit structure describing an alias for a known unit.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void MakeUnitAlias( const char *sym, const char *alias, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function creates a KnownUnit structure decribing an alias for a
-*     known unit, and adds it to the head of the linked list of known units 
-*     stored in a module variable. An alias is a KnownUnit which is
-*     identical to an existing known but which has a different symbol.
-
-*  Parameters:
-*     sym
-*        A pointer to the symbol string of an existing KnwonUnit. The string 
-*        should not include any multiplier prefix.
-*     alias
-*        A pointer to the symbol string to use as the alasi for the existing 
-*        KnownUnit. The string should not include any multiplier prefix.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  The supplied symbol and label strings are not copied. The
-*     supplied pointers are simply stored in the returned structure.
-*     Therefore the strings to which the pointers point should not be
-*     modified after this function returned (in fact this function is
-*     always called with literal strings for these arguments).
-*/
-
-/* Local Variables: */
-   KnownUnit *unit;
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Search the existing list of KnownUnits for the specified symbol. */
-   unit = known_units;
-   while( unit ) {
-      if( !strcmp( sym, unit->sym ) ) {
-
-/* Create a new KnownUnit for the alias. It will becomes the head of the
-   known units chain. */
-         MakeKnownUnit( alias, unit->label, NULL, status );
-
-/* Store a pointer to the KnownUnit which is to be used in place of the
-   alias. */
-         known_units->use = unit;
-
-/* Leave the loop. */         
-         break;
-      }
-
-/* Move on to check the next existing KnownUnit. */
-      unit = unit->next;
-   }
-
-/* Report an error if the supplied unit was not found. */
-   if( !unit ) {
-      astError( AST__INTER, "MakeUnitAlias(Unit): Cannot find existing "
-                "units \"%s\" to associate with the alias \"%s\" (AST "
-                "internal programming error).", status, sym, alias );
-   }
-}
-
-static UnitNode *ModifyPrefix( UnitNode *old, int *status ) {
-/*
-*  Name:
-*     ModifyPrefix
-
-*  Purpose:
-*     Replace a MULT or DIV node with a LDVAR and suitable multiplier.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *ModifyPrefix( UnitNode *old, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function checks the supplied node. If it is a DIV or MULT node
-*     in which one argument is an LDVAR and the other is a constant, then
-*     its checks to see if the constant can be absorbed into the LDVAR by
-*     changing the multiplier in the LDVAR node. If so, it returns a new 
-*     node which is an LDVAR with the modified multiplier. Otherwise it
-*     returns NULL.
-
-*  Parameters:
-*     old
-*        Pointer to an existing UnitNode to be checked.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new UnitNode.
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked with 
-*     the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   Multiplier *mult;
-   Multiplier *mmult;
-   UnitNode *ldcon;
-   UnitNode *ldvar;
-   UnitNode *newtree;
-   UnitNode *result;
-   double con;
-   double cmult;
-   double r;
-   double rmin;
-   int recip;              
-   int changed;
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* Indicate that we have not yet found any reason to return a changed
-   node. */
-   changed = 0;
-
-/* Check the supplied node is a DIV or MULT node. */
-   if( old->opcode == OP_DIV || old->opcode == OP_MULT ) {
-
-/* Get a copy of the supplied tree which we can modify safely. */
-      newtree = CopyTree( old, status );
-
-/* Identify the LDVAR argument (if any). */
-      if( newtree->arg[ 0 ]->opcode == OP_LDVAR ) { 
-         ldvar = newtree->arg[ 0 ];
-
-      } else if( newtree->arg[ 1 ]->opcode == OP_LDVAR ) { 
-         ldvar = newtree->arg[ 1 ];
-
-      } else {
-         ldvar = NULL;
-      }
-
-/* Identify the LDCON argument (if any). */
-      if( newtree->arg[ 0 ]->opcode == OP_LDCON ) { 
-         ldcon = newtree->arg[ 0 ];
-
-      } else if( newtree->arg[ 1 ]->opcode == OP_LDCON ) { 
-         ldcon = newtree->arg[ 1 ];
-
-      } else {
-         ldcon = NULL;
-      }
-
-/* If either was not found, return NULL. */
-      if( !ldvar || !ldcon ) {
-         newtree = FreeTree( newtree, status );
-
-/* Otherwise, extract the multiplier constant. If there is no multiplier, the
-   constant is 1.0. */
-      } else {      
-         cmult = ldvar->mult ? ldvar->mult->scale: 1.0;
-
-/* Extract the constant. */
-         con = ldcon->con;
-
-/* Combine the multiplier and the constant. The resulting constant is a
-   factor which is used to multiply the LDVAR quantity. If the original 
-   node is a DIV node in which the LDVAR is in the denominator, then
-   flag that we need to reciprocate the new MULT node which represents
-   "constant*LDVAR" before returning. */
-         if( newtree->opcode == OP_MULT ) {
-            con = con*cmult;
-            recip = 0;
-         } else {
-            con = cmult/con;
-            recip = ( ldvar == newtree->arg[ 1 ] );
-         }
-
-/* Find the closest known multiplier to the new constant. */
-         rmin = ( con > 1 ) ? con : 1.0/con;
-         mmult = NULL;
-         mult = GetMultipliers( status );
-         while( mult ) {
-            r = ( con > mult->scale) ? con/mult->scale : mult->scale/con;
-            if( r < rmin ) {
-               mmult = mult;
-               rmin = r;
-            }
-            mult = mult->next;
-         }
-
-/* Modify the constant to take account of the new multiplier chosen
-   above. "mmult" will be NULL if the best multiplier is unity. */
-         if( mmult ) con = con/mmult->scale;
-
-/* If they have changed, associate the chosen multiplier with the LDVAR node, 
-   and the constant with the LDCON node. */
-         if( ldvar->mult != mmult ) {
-            ldvar->mult = mmult;
-            changed = 1;
-         }         
-
-         if( ldcon->con != con ) {
-            ldcon->con = con;
-            changed = 1;
-         }
-
-/* Unless the node is proportional to the reciprocal of the variable, the
-   new node should be a MULT node (it may originally have been a DIV). */
-         if( !recip ) {
-            if( newtree->opcode != OP_MULT ){
-               newtree->opcode = OP_MULT;
-               changed = 1;
-            }
-            
-/* If the constant is 1.0 we can just return the LDVAR node by itself. */
-            if( fabs( con - 1.0 ) < 1.0E-6 ) {
-               result = CopyTree( ldvar, status );
-               newtree = FreeTree( newtree, status );
-               changed = 1;
-
-/* Otherwise return the modified tree containing both LDVAR and LDCON nodes. */
-            } else {
-               result = newtree;
-            }
-
-/* If the node is proportional to the reciprocal of the variable, the
-   new node will already be a DIV node and will have an LDCON as the first
-   argument (numerator) and an LDVAR as the second argument (denominator). */
-         } else {
-            
-/* The first argument (the numerator) should be the reciprocal of the constant 
-   found above. */
-            ldcon->con = 1.0/ldcon->con;
-            if( !EQUAL( ldcon->con, old->arg[0]->con ) ) changed = 1;
-
-/* Return the modified tree containing both LDVAR and LDCON nodes. */
-            result = newtree;
-         }
-      }
-   }
-
-/* If the new and old trees are equivalent, then we do not need to return
-   it. */
-   if( !changed && result ) result = FreeTree( result, status );
-
-/* Return the answer. */
-   return result;
-}
-
-
-static UnitNode *NewNode( UnitNode *old, Oper code, int *status ) {
-/*
-*  Name:
-*     NewNode
-
-*  Purpose:
-*     Create and initialise a new UnitNode.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     UnitNode *NewNode( UnitNode *old, Oper code, int *status ) 
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function creates and initialises a new UnitNode, or
-*     re-initialises an existing UnitNode to use a different op code.
-
-*  Parameters:
-*     old
-*        Pointer to an existing UnitNode to be modified, or NULL to create
-*        a new UnitNode.
-*     code
-*        The op code for the new UnitNode.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new UnitNode.
-
-*  Notes:
-*     - A value of NULL will be returned if this function is invoked with 
-*     the global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   UnitNode **args;
-   UnitNode *result;
-   int i;
-
-/* Initialise. */
-   result = NULL;
-   args = NULL;
-
-/* Check the inherited status. */
-   if( !astOK ) return result;
-
-/* If an existig UnitNode was supplied, free any memory used to hold
-   pointers to its arguments. */
-   if( old ) {
-      old->arg = astFree( old->arg );
-      result = old;
-
-/* Otherwise, allocate memory for a new structure. */
-   } else {
-      result = astMalloc( sizeof( UnitNode ) );
-   }
-
-/* Check the pointer can be used safely. */
-   if( astOK ) {
-
-/* Initialise the members of the UnitNode structure. */
-      result->opcode = code;
-      result->arg = NULL;
-      result->con = AST__BAD;
-      result->name = NULL;
-      result->unit = NULL;
-      result->mult = NULL;
-      result->narg = 0;
-
-      switch( code ){
-         case OP_LDPI:
-            result->con = PI;
-            break;
-
-         case OP_LDE:
-            result->con = E;
-            break;
-
-         case OP_LOG:  
-         case OP_LN:   
-         case OP_EXP:  
-         case OP_SQRT: 
-            result->narg = 1;
-            break;
-
-         case OP_POW:  
-         case OP_DIV:  
-         case OP_MULT: 
-            result->narg = 2;
-            break;
-
-         default:
-            ;
-      }
-
-/* Allocate memory for the UnitNode pointers which will locate the
-   nodes forming the arguments to the new node. */
-      args = astMalloc( (result->narg)*sizeof( UnitNode * ) );
-      if( astOK ) {
-         result->arg = args;
-
-/* Initialise the argument pointers to NULL. */
-         for( i = 0; i < result->narg; i++ ) args[ i ] = NULL;
-      }
-   }
-
-/* Free any result if an error occurred. */
-   if( !astOK ) {
-      args = astFree( args );
-      result = astFree( result );
-   }
-
-/* Return the answer. */
-   return result;
-}
-
-static void RemakeTree( UnitNode **node, int *status ) {
-/*
-*  Name:
-*     RemakeTree
-
-*  Purpose:
-*     Replace derived units within a tree of UnitNodes by basic units.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     void RemakeTree( UnitNode **node, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function searches for LDVAR nodes (i.e. references to unit
-*     symbols) within the given tree, and replaces each such node which 
-*     refers to known derived unit with a sub-tree of nodes which
-*     define the derived unit in terms of known basic units.
-
-*  Parameters:
-*     node
-*        The address of a pointer to the UnitNode at the head of the tree 
-*        which is to be simplified. On exit the supplied tree is freed and a
-*        pointer to a new tree is placed at the given address.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   KnownUnit *unit;
-   int i;
-   UnitNode *newnode;
-
-/* Check inherited status. */
-   if( !astOK ) return;
-
-/* Initially, we have no replacement node */
-   newnode = NULL;
-
-/* If this is an LDVAR node... */
-   if( (*node)->opcode == OP_LDVAR ) {
-
-/* If the LDVAR node has a multiplier associated with it, we need to
-   introduce a OP_MULT node to perform the scaling. */ 
-      if( (*node)->mult ) {
-         newnode = NewNode( NULL, OP_MULT, status );
-         if( astOK ) {
-            newnode->arg[0] = NewNode( NULL, OP_LDCON, status ); 
-            if( astOK ) {
-               newnode->arg[0]->con = 1.0/(*node)->mult->scale;
-
-/* See if the node refers to a known unit. If not, or if the known unit
-   is a basic unit (i.e. not a derived unit) use the supplied node for
-   the second argument of the OP_MULT node (without the multiplier). 
-   Otherwise, use a copy of the tree which defines the derived unit. */
-               unit = (*node)->unit;
-               if( unit && unit->head ) {
-                  newnode->arg[1] = CopyTree( unit->head, status );
-               } else {
-                  newnode->arg[1] = CopyTree( *node, status );
-                  if( astOK ) newnode->arg[1]->mult = NULL;
-               }
-            }
-         }
-
-/* If no multiplier is supplied, the replacement node is simply the tree
-   which defines the unscaled unit (if known), or the original node (if
-   unknown). */
-      } else {
-         unit = (*node)->unit;
-         if( unit && unit->head ) newnode = CopyTree( unit->head, status );
-      }
-
-/* If this is not an LDVAR Node, remake the sub-trees which form the 
-   arguments of this node. */
-   } else {
-      for( i = 0; i < (*node)->narg; i++ ) {
-         RemakeTree( &((*node)->arg[ i ]), status );
-      }
-   }
-
-/* If an error has occurred, free any new node. */
-   if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
-   pointer to the new tree. */
-   if( newnode ) {
-      FreeTree( *node, status );
-      *node = newnode;
-   }
-}
-
-static int ReplaceNode( UnitNode *target, UnitNode *old, UnitNode *new, int *status ) {
-/*
-*  Name:
-*     ReplaceNode
-
-*  Purpose:
-*     Replace a node within a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int ReplaceNode( UnitNode *target, UnitNode *old, UnitNode *new, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function replaces a specified node within a tree of UnitNodes
-*     with another given node. The original node is freed if found.
-
-*  Parameters:
-*     target
-*        A pointer to the UnitNode at the head of the tree containing the
-*        node to be replaced.
-*     old
-*        A pointer to the UnitNode to be replaced.
-*     new
-*        A pointer to the UnitNode to replace "old".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Return Value:
-*     Non-zero if the "old" node was found and replaced (in which case
-*     the "old" node will have been freed).
-
-*  Notes:
-*     - It is assumed that the "old" node occurs at most once within the
-*     target tree. 
-*     - The node at the head of the target tree is not compared with the
-*     "old" node. It is assumed the called will already have done this.
-*     - A value of zero is returned if an error has already occurred, or
-*     if this function fails for any reason. 
-
-*/
-
-/* Local Variables: */
-   int i;
-   int result;
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Loop round the arguments of the node at the head of the target tree. 
-   Break out of the loop as soone as the old node is found. */
-   for( i = 0; i < target->narg; i++ ) {
-
-/* If this argument is the node to be replaced, free the old one and store
-   the new one, and then leave the loop. */
-      if( target->arg[ i ] == old ) {
-         FreeTree( old, status );
-         target->arg[ i ] = new;
-         result = 1;
-         break;
-
-/* Otherwise use this function recursively to search for the old node
-   within the current argument. */
-      } else {
-         if( ReplaceNode( target->arg[ i ], old, new, status ) ) break;
-      }
-   }
-
-/* If an error has occurred, return zero. */
-   if( !astOK ) result = 0;
-
-/* Return the answer. */
-   return result;
-}
-
-static int SimplifyTree( UnitNode **node, int std, int *status ) {
-/*
-*  Name:
-*     SimplifyTree
-
-*  Purpose:
-*     Simplify a tree of UnitNodes.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int SimplifyTree( UnitNode **node, int std, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function simplifies a tree of UnitNodes. It is assumed that
-*     all the OP_LDVAR nodes in the tree refer to the same basic unit.
-*     A primary purpose of this function is to standardise the tree so
-*     that trees which implement equivalent transformations but which 
-*     have different structures can be compared (for instance, so that
-*     "2*x" and "x*2" are treated as equal trees). If "std" is non-zero, 
-*     reducing the complexity of the tree is only of secondary importance. 
-*     This explains why some "simplifications" actually produced trees which 
-*     are more complicated.
-
-*  Parameters:
-*     node
-*        The address of a pointer to the UnitNode at the head of the tree 
-*        which is to be simplified. On exit the supplied tree is freed and a
-*        pointer to a new tree is placed at the given address.
-*     std
-*        If non-zero, perform standardisations. Otherwise only perform
-*        genuine simplifications. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if some change was made to the tree.
-
-*/
-
-/* Local Variables: */
-   int i;
-   UnitNode *newnode;
-   UnitNode *node1;
-   UnitNode *node2;
-   Oper op;
-   UnitNode **factors;
-   double *powers;
-   int nfactor;
-   double coeff;
-   int result;
-
-/* Initialise */
-   result = 0;
-
-/* Check inherited status. */
-   if( !astOK ) return result;
-
-/* Initiallially, we have no replacement node. */
-   newnode = NULL;
-
-/* First replace any complex constant expressions any corresponding
-   OP_LDCON nodes. */
-   FixConstants( node, 0, status );
-
-/* Simplify the sub-trees corresponding to the arguments of the node at
-   the head of the supplied tree. */
-   for( i = 0; i < (*node)->narg; i++ ) {
-      if( SimplifyTree( &( (*node)->arg[ i ] ), std, status ) ) result = 1;
-   }
-
-/* Now do specific simplifications appropriate to the nature of the node at 
-   the head of the tree. */
-   op = (*node)->opcode;
-
-/* Natural log */
-/* =========== */
-/* We standardise argument powers into coefficients of the LN value. */
-   if( op == OP_LN ) {
-
-/* If the argument is a OP_EXP node, they cancel out. Return a copy of the 
-   argument of OP_EXP node. */
-      if( (*node)->arg[ 0 ]->opcode == OP_EXP ) {
-         newnode = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-
-/* If the argument is an OP_POW node, rearrange the nodes to represent
-   k*ln(x) instead of ln(x**k) (note pow nodes always have a constant
-   exponent - this is checked in InvertConstants). SQRT arguments will 
-   not occur because they will have been changed into POW nodes when the 
-   arguments of the supplied head node were simplified above. */
-      } else if( std && (*node)->arg[ 0 ]->opcode == OP_POW ) {
-         newnode = NewNode( NULL, OP_MULT, status );
-         node1 = CopyTree( (*node)->arg[ 0 ]->arg[ 1 ], status );
-         node2 = NewNode( NULL, OP_LN, status );
-         if( astOK ) {
-            node2->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-            newnode->arg[ 0 ] = node1;
-            newnode->arg[ 1 ] = node2;
-         }
-      }
-
-/* Common log */
-/* ========== */
-/* We standardise natural logs into common logs. */
-   } else if( op == OP_LOG ) {
-      if( std ) {
-         newnode = NewNode( NULL, OP_DIV, status );
-         node1 = NewNode( NULL, OP_LN, status );
-         node2 = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) {
-            node1->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
-            node2->con = log( 10.0 );
-            newnode->arg[ 0 ] = node1;
-            newnode->arg[ 1 ] = node2;
-         }
-      }
-
-/* Exponential */
-/* =========== */
-/* We prefer to minimise the number of EXP nodes, so, for instance, we do not 
-   change "exp(x*y)" to "exp(x)+exp(y)" (and the code for ADD nodes does
-   the inverse conversion). */
-   } else if( op == OP_EXP ) {
-
-/* If the argument is an OP_LN node, they cancel out. Return a copy of the 
-   argument of the OP_LN node. Common log arguments will not occur because
-   they will have been changed into natural logs when the arguments of 
-   the supplied head node were simplified above. */
-      if( (*node)->arg[ 0 ]->opcode == OP_LN ) {
-         newnode = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-      }
-
-/* Square root */
-/* =========== */
-/* We standardise sqrt nodes into pow nodes. */
-   } else if( op == OP_SQRT ) {
-      if( std ) {
-         newnode = NewNode( NULL, OP_POW, status );
-         node1 = CopyTree( (*node)->arg[ 0 ], status );
-         node2 = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) {
-            node2->con = 0.5;
-            newnode->arg[ 0 ] = node1;
-            newnode->arg[ 1 ] = node2;
-         }
-      }
-
-/* Exponentiation */
-/* ============== */
-/* We want to simplfy factors. So, for instance, (x*y)**k is converted to 
-   (x**k)*(y**k). */
-   } else if( op == OP_POW ) {
-
-/* If the first argument is an OP_EXP node, then change "(e**x)**k" into
-   "e**(k*x)" */
-      if( (*node)->arg[ 0 ]->opcode == OP_EXP ) {
-         newnode = NewNode( NULL, OP_EXP, status );
-         node1 = NewNode( NULL, OP_MULT, status );
-         if( astOK ) {
-            node1->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
-            node1->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-            newnode->arg[ 0 ] = node1;
-         }
-
-/* "x**0" can be replaced by 1.0 */
-      } else if( (*node)->arg[ 1 ]->con == 0.0 ) {
-         newnode = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) newnode->con = 1.0;
-
-/* "x**1" can be replaced by x */
-      } else if( EQUAL( (*node)->arg[ 1 ]->con, 1.0 ) ) {
-         newnode = CopyTree( (*node)->arg[ 0 ], status );
-
-/* If the first argument is an OP_POW node, then change "(x**k1)**k2" into
-   "x**(k1*k2)" */
-      } else if( (*node)->arg[ 0 ]->opcode == OP_POW ) {
-         newnode = NewNode( NULL, OP_POW, status );
-         node1 = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) {
-            node1->con = ( (*node)->arg[ 0 ]->arg[ 1 ]->con )*
-                         ( (*node)->arg[ 1 ]->con );
-            newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-            newnode->arg[ 1 ] = node1;
-         }
-
-/* If the first argument is an OP_MULT node, then change "(x*y)**k" into
-   "(x**(k))*(y**(k))" */
-      } else if( std && (*node)->arg[ 0 ]->opcode == OP_MULT ) {
-         newnode = NewNode( NULL, OP_MULT, status );
-         node1 = NewNode( NULL, OP_POW, status );
-         if( astOK ) {
-            node1->arg[ 1 ] = CopyTree( (*node)->arg[ 1 ], status );
-            node2 = CopyTree( node1, status );
-            node1->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 0 ], status );
-            node2->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ]->arg[ 1 ], status );
-            newnode->arg[ 0 ] = node1;
-            newnode->arg[ 1 ] = node2;
-         }
-      }
-
-/* Division. */
-/* ========= */
-/* We standardise divisions into corresponding multiplications. */
-   } else if( op == OP_DIV ) {
-
-/* Division by 1 is removed. */
-      if( EQUAL( (*node)->arg[ 1 ]->con, 1.0 ) ){
-         newnode = CopyTree( (*node)->arg[ 0 ], status );
-
-/* Division by any other constant (except zero) is turned into a
-   multiplication by the reciprocal constant. */
-      } else if( (*node)->arg[ 1 ]->con != AST__BAD ) {
-         if( (*node)->arg[ 1 ]->con != 0.0 ) {
-            newnode = NewNode( NULL, OP_MULT, status );
-            node1 = NewNode( NULL, OP_LDCON, status );
-            if( astOK ) {
-               node1->con = 1.0/(*node)->arg[ 1 ]->con;
-               newnode->arg[ 0 ] = node1;
-               newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ], status );
-            }
-         } else {
-            astError( AST__BADUN, "Simplifying a units expression"
-                      "requires a division by zero." , status);
-         }
-
-/* Other divisions "x/y" are turned into "x*(y**(-1))" */
-      } else if( std ) {
-         newnode = NewNode( NULL, OP_MULT, status );
-         node1 = NewNode( NULL, OP_POW, status );
-         node2 = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) {
-            node2->con = -1.0;
-            node1->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
-            node1->arg[ 1 ] = node2;
-            newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 0 ], status );
-            newnode->arg[ 1 ] = node1;
-         }
-      }
-
-/* Multiplication */
-/* ============== */
-   } else if( op == OP_MULT ) {
-
-/* If the right hand argument is constant, swap the arguments. */
-      if( (*node)->arg[ 1 ]->con != AST__BAD ) {
-         newnode = NewNode( NULL, OP_MULT, status );
-         if( astOK ) {
-            newnode->arg[ 0 ] = CopyTree( (*node)->arg[ 1 ], status );
-            newnode->arg[ 1 ] = CopyTree( (*node)->arg[ 0 ], status );
-         }
-
-/* Multiplication by zero produces a constant zero. */
-      } else if( (*node)->arg[ 0 ]->con == 0.0 ){
-         newnode = NewNode( NULL, OP_LDCON, status );
-         if( astOK ) newnode->con = 0.0;
-
-/* Multiplication by 1 is removed. */
-      } else if( EQUAL( (*node)->arg[ 0 ]->con, 1.0 ) ){
-         newnode = CopyTree( (*node)->arg[ 1 ], status );
-
-/* For other MULT nodes, analyse the tree to find a list of all its
-   factors with an associated power for each one, and an overall constant
-   coefficient. */
-      } else if( std ) {
-         FindFactors( (*node), &factors, &powers, &nfactor, &coeff, status );
-
-/* Produce a new tree from these factors. The factors are standardised by
-   ordering them alphabetically (after conversion to a character string). */
-         newnode = CombineFactors( factors, powers, nfactor, coeff, status );
-
-/* Free resources */
-         factors = astFree( factors );
-         powers = astFree( powers );
-
-      }
-   }
-
-/* If we have produced a new node which is identical to the old node,
-   free it. Otherwise, indicate we have made some changes. */
-   if( newnode ) {
-      if( !CmpTree( newnode, *node, 1, status ) ) {
-         newnode = FreeTree( newnode, status );
-      } else {
-         result = 1;
-      }
-   }
-
-/* If an error has occurred, free any new node. */
-   if( !astOK ) newnode = FreeTree( newnode, status );
-
-/* If we have a replacement node, free the supplied tree and return a
-   pointer to the new tree. */
-   if( newnode ) {
-      FreeTree( *node, status );
-      *node = newnode;
-   }
-
-/* If the above produced some change, try re-simplifying the tree. */
-   if( result ) SimplifyTree( node, std, status );
-
-/* Return the result. */
-   return result;
-
-}
-
-static int SplitUnit( const char *str, int ls, const char *u, int cs, 
-                      Multiplier **mult, int *l, int *status ) {
-/*
-*  Name:
-*     SplitUnit
-
-*  Purpose:
-*     Split a given string into unit name and multiplier.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int SplitUnit( const char *str, int ls, const char *u, int cs, 
-*                    Multiplier **mult, int *l, int *status  ) 
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     Returns non-zer0 if the supplied string ends with the supplied unit
-*     name or label, and any leading string is a known multiplier.
-
-*  Parameters:
-*     str
-*        The string to test, typically containing a multiplier and a unit
-*        symbol or label.
-*     ls
-*        Number of characters to use from "str" (not including trailing null)
-*     u
-*        Pointer to the unit label or symbol string to be searched for.
-*     cs 
-*        If non-zero, the test for "u" is case insensitive.
-*     mult
-*        Address of a location at which to return the multiplier at the
-*        start of the supplied string. NULL is returned if the supplied
-*        string does not match the supplied unit, or if the string
-*        includes no multiplier.
-*     l
-*        Address of an int in which to return the length of "u".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if "str" ends with "u" and starts with a null string or a
-*     known multiplier string.
-
-*/
-
-/* Local Variables: */
-   int ret;                
-   int lm;
-   int lu;
-
-/* Initialise */
-   ret = 0;
-   *mult = NULL;
-   *l = 0;
-
-/* Check inherited status. */
-   if( !astOK ) return ret;   
-
-/* Find the number of characters in the supplied unit label or symbol. The 
-   difference between lu and ls must be the length of the multiplier. */
-   lu = strlen( u );
-   lm = ls - lu;
-
-/* Make sure "str" is not shorter than "u" */
-   if( lm >= 0 ) {
-
-/* Compare the end of "str" against "u" */
-      if( cs ? !strncmp( str + lm, u, lu ) : 
-               !Ustrncmp( str + lm, u, lu, status ) ) {
-         ret = 1;
-
-/* If "str" ends with "u", see if it starts with a known multiplier */
-         if( lm > 0 ) {
-            ret = 0;
-            *mult = GetMultipliers( status );
-            while( *mult ) {
-               if( (*mult)->symlen == lm && !strncmp( str, (*mult)->sym, lm ) ) {
-                  ret = 1;
-                  break;
-               }
-               *mult = (*mult)->next;
-            }
-
-/* If not, try again using case-insensitive matching. */
-            if( !ret ) {
-               *mult = GetMultipliers( status );
-               while( *mult ) {
-                  if( (*mult)->symlen == lm && !Ustrncmp( str, (*mult)->sym, lm, status ) ) {
-                     ret = 1;
-                     break;
-                  }
-                  *mult = (*mult)->next;
-               }
-            }
-
-/* If not, try again using case-insensitive matching against the
-   multiplier label. */
-            if( !ret ) {
-               *mult = GetMultipliers( status );
-               while( *mult ) {
-                  if( (*mult)->lablen == lm && !Ustrncmp( str, (*mult)->label, lm, status ) ) {
-                     ret = 1;
-                     break;
-                  }
-                  *mult = (*mult)->next;
-               }
-            }
-
-         }
-      }
-   }
-
-   *l = lu;
-   return ret;
-} 
-
-double astUnitAnalyser_( const char *in, double powers[9], int *status ){
-/*
-*+
-*  Name:
-*     astUnitAnalyser
-
-*  Purpose:
-*     Perform a dimensional analysis of a unti string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     double astUnitAnalyser_( const char *in, double powers[9] )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function parses the supplied units string if possible, and
-*     returns a set of pwoers and a scaling factor which represent the 
-*     units string. 
-
-*  Parameters:
-*     in
-*        A string representation of the units, for instance "km/h". 
-*     powers
-*        An array in which are returned the powers for each of the following 
-*        basic units (in the order shown): kilogramme, metre, second, radian, 
-*        Kelvin, count, photon, magnitude, pixel. If the supplied unit does 
-*        not depend on a given basic unit a value of 0.0 will be returned in 
-*        the array. The returns values represent a system of units which is a 
-*        scaled form of the supplied units, expressed in the basic units of m, 
-*        kg, s, rad, K count,photon, mag and pixel. For instance, a returned 
-*        array of [1,0,-2,0,0,0,0,0,0] would represent "m/s**2".
-
-*  Returned Value:
-*     A scaling factor for the supplied units. The is the value, in the
-*     units represented by the returned powers, which corresponds to a
-*     value of 1.0 in the supplied units.
-
-*  Notes:
-*     -  An error will be reported if the units string cannot be parsed
-*     or refers to units or functions which cannot be analysed in this way.
-*     -  AST__BAD is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   UnitNode *in_tree;
-   double result;
-
-/* Initialise */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Parse the input units string, producing a tree of UnitNodes which
-   represents the input units. A pointer to the UnitNode at the head of
-   the tree is returned if succesfull. Report a context message if this 
-   fails. */
-   in_tree = CreateTree( in, 1, 1, status );
-   if( in_tree ) {
-
-/* Analyse the tree */
-      if( !DimAnal( in_tree, powers, &result, status ) && astOK ) {
-         result = AST__BAD;
-         astError( AST__BADUN, "astUnitAnalyser: Error analysing input "
-                   "units string '%s' (it may contain unsupported "
-                   "functions or dimensionless units).", status, in );
-      }
-
-/* Free the tree. */
-      in_tree = FreeTree( in_tree, status );
-
-   } else if( astOK ) {
-      astError( AST__BADUN, "astUnitAnalyser: Error parsing input "
-                "units string '%s'.", status, in );
-   }
-
-/* Return the result */
-   return result;
-}
-
-const char *astUnitLabel_( const char *sym, int *status ){
-/*
-*+
-*  Name:
-*     astUnitLabel
-
-*  Purpose:
-*     Return a string label for a given unit symbol.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     const char *astUnitLabel( const char *sym )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a pointer to a constant string containing a
-*     descriptive label for the unit specified by the given unit symbol.
-
-*  Parameters:
-*     sym
-*        A string holing a known unit symbol.
-
-*  Returned Value:
-*     A pointer to constant string holding a descriptive label for the
-*     supplied unit. A NULL pointer is returned (without error) if the
-*     supplied unit is unknown.
-
-*  Notes:
-*     -  A NULL pointer is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *result;
-   KnownUnit *unit; 
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Ensure descriptions of the known units are available. */
-   unit = GetKnownUnits( 1, status );
-
-/* Loop through the chain of known units looking for a unit with a symbol
-   equal to the supplied string. If found, store a pointer to its label
-   and break out of the loop. */
-   while( unit ) {
-      if( !strcmp( sym, unit->sym ) ) {
-         result = unit->label;
-         break;
-      }
-
-      unit = unit->next;
-   }
-
-/* Return the answer. */
-   return result;
-}
-
-AstMapping *astUnitMapper_( const char *in, const char *out, 
-                            const char *in_lab, char **out_lab, int *status ){
-/*
-*+
-*  Name:
-*     astUnitMapper
-
-*  Purpose:
-*     Create a Mapping between two system of units.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     AstMapping *astUnitMapper( const char *in, const char *out,
-*                                const char *in_lab, char **out_lab )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function creates a Mapping between two specified system of
-*     units. It also modifes a supplied label (which is typically 
-*     the axis label associated with the input units) so that it includes 
-*     any functional change implied by the supplied "in" and "out" units.
-
-*  Parameters:
-*     in
-*        A string representation of the input units, for instance "km/h". 
-*        See "Unit Representations:" below.
-*     out
-*        A string representation of the output units, for instance "m/s". 
-*        See "Unit Representations:" below.
-*     in_lab
-*        A label describing the quantity associated with the input units.
-*        If the "in" string is the Units attribute of an Axis, then
-*        "in_lab" should be the Label of the same Axis. May be supplied
-*        NULL in which case "out_lab" is ignored. 
-*     out_lab
-*        The address at which to return a pointer to a label describing the 
-*        quantity associated with the output units. For instance, if the
-*        input and output units are "Hz" and "sqrt(Hz)", and the input
-*        label is "Frequency", then the returned output label will be
-*        "sqrt( Frequency )". The returned label is stored in dynamically
-*        allocated memory which should be freed (using astFree) when no longer
-*        needed.
-
-*  Returned Value:
-*     A pointer to a Mapping which can be used to transform values in the
-*     "in" system of units into the "out" system of units. The Mapping
-*     will have 1 input and 1 output.
-
-*  Unit Representations:
-*     The string supplied for "in" and "out" should represent a system of
-*     units following the recommendations of the FITS WCS paper I
-*     "Representation of World Coordinates in FITS" (Greisen & Calabretta).
-*     Various commonly used variants are also allowed.
-*
-*     To summarise, a string describing a system of units should be an
-*     algebraic expression which combines one or more named units. The
-*     following functions and operators may be used within these algebraic 
-*     expressions:
-*
-*     - "*": multiplication. A period "." or space " " may also be used
-*       to represent multiplication (a period is only interpreted as a
-*       multiplication operator if it is not positioned between two digits,
-*       and a space is only interpreted as a multiplication operator if it 
-*       occurs between two operands).
-*     - "/": division. 
-*     - "**": exponentiation. The exponent (i.e. the operand following the
-*       exponentiation operator) must be a constant. The symbol "^" is also
-*       interpreted as an exponentiation operator. Exponentiation is also
-*       implied by an integer following a unit name without any separator
-*       (e.g. "cm2" is "cm^2").
-*     - log(): Common logarithm.
-*     - ln(): Natural logarithm.
-*     - sqrt(): Square root.
-*     - exp(): Exponential.
-*
-*     Function names are case insensitive. White space may be included
-*     within an expression (note that white space between two operands
-*     will be interpreted as a muiltiplication operator as described 
-*     above). Parentheses may be used to indicate the order in which
-*     expressions are to be evaluated (normal mathematical precedence is
-*     used otherwise). The following symbols may be used to represent 
-*     constants:
-*
-*     - "pi"
-*     - "e"
-*
-*     These symbols are also case in-sensitive. 
-*
-*     The above operators and functions are used to combine together one
-*     or more "unit symbols". The following base unit symbols are recognised:
-*
-*     - "m":  metre.
-*     - "g":  gram.
-*     - "s":  second.
-*     - "rad":  radian.
-*     - "sr":  steradian.
-*     - "K":  Kelvin.
-*     - "mol":  mole.
-*     - "cd":  candela.
-*
-*     The following symbols for units derived fro the above basic units are 
-*     recognised:
-*
-*     - "sec":  second (1 s)
-*     - "Hz":  Hertz  (1/s).
-*     - "N":  Newton  (kg m/s**2).
-*     - "J":  Joule  (N m).
-*     - "W":  Watt  (J/s).
-*     - "C":  Coulomb  (A s).
-*     - "V":  Volt  (J/C).
-*     - "Pa":  Pascal  (N/m**2).
-*     - "Ohm":  Ohm  (V/A).
-*     - "S":  Siemens  (A/V).
-*     - "F":  Farad  (C/V).
-*     - "Wb":  Weber  (V s).
-*     - "T":  Tesla  (Wb/m**2).
-*     - "H":  Henry  (Wb/A).
-*     - "lm":  lumen  (cd sr).
-*     - "lx":  lux  (lm/m**2).
-*     - "deg":  degree  (pi/180 rad).
-*     - "arcmin":  arc-minute  (1/60 deg).
-*     - "arcsec":  arc-second  (1/3600 deg).
-*     - "mas":  milli-arcsecond  (1/3600000 deg).
-*     - "min":  minute  (60 s).
-*     - "h":  hour  (3600 s).
-*     - "d":  day  (86400 s).
-*     - "yr":  year  (31557600 s).
-*     - "a":  year  (31557600 s).
-*     - "eV":  electron-Volt  (1.60217733E-19 J).
-*     - "erg":  erg  (1.0E-7 J).
-*     - "Ry":  Rydberg  (13.605692 eV).
-*     - "solMass":  solar mass  (1.9891E30 kg).
-*     - "u":  unified atomic mass unit  (1.6605387E-27 kg).
-*     - "solLum":  solar luminosity  (3.8268E26 W).
-*     - "Angstrom":  Angstrom  (1.0E-10 m).
-*     - "Ang":  Angstrom
-*     - "A":  Angstrom
-*     - "micron":  micron (1.0E-6 m).
-*     - "solRad":  solar radius  (6.9599E8 m).
-*     - "AU":  astronomical unit  (1.49598E11 m).
-*     - "lyr":  light year  (9.460730E15 m).
-*     - "pc":  parsec  (3.0867E16 m).
-*     - "count":  count.
-*     - "ct":  count.
-*     - "photon":  photon.
-*     - "ph":  photon.
-*     - "Jy":  Jansky  (1.0E-26 W /m**2 /Hz).
-*     - "Jan":  Jansky  
-*     - "mag":  magnitude.
-*     - "G":  Gauss  (1.0E-4 T).
-*     - "pixel":  pixel.
-*     - "pix":  pixel.
-*     - "barn":  barn  (1.0E-28 m**2).
-*     - "D":  Debye  (1.0E-29/3 C.m).
-*
-*     Note, AST follows the widespread practice within astronomy of using 
-*     "A" as an alias for "Angstrom". This replaces the association of "A" 
-*     with Ampere included in the FITS-WCS standard.
-*
-*     In addition, any other unknown unit symbol may be used (but of course 
-*     no mapping will be possible between unknown units).
-*
-*     Unit symbols may be preceeded with a numerical constant (for
-*     instance "1000 m") or a standard multiplier symbol (for instance "km")
-*     to represent some multiple of the unit. The following standard
-*     multipliers are recognised:
-*
-*     - "d":   deci   (1.0E-1)  
-*     - "c":   centi  (1.0E-2)  
-*     - "m":   milli  (1.0E-3)  
-*     - "u":   micro  (1.0E-6)  
-*     - "n":   nano   (1.0E-9)  
-*     - "p":   pico   (1.0E-12) 
-*     - "f":   femto  (1.0E-15) 
-*     - "a":   atto   (1.0E-18) 
-*     - "z":   zepto  (1.0E-21) 
-*     - "y":   yocto  (1.0E-24) 
-*     - "da":  deca   (1.0E1)   
-*     - "h":   hecto  (1.0E2)   
-*     - "k":   kilo   (1.0E3)   
-*     - "M":   mega   (1.0E6)   
-*     - "G":   giga   (1.0E9)   
-*     - "T":   tera   (1.0E12)  
-*     - "P":   peta   (1.0E15)  
-*     - "E":   exa    (1.0E18)  
-*     - "Z":   zetta  (1.0E21)  
-*     - "Y":   yotta  (1.0E24)  
-
-*  Notes:
-*     -  NULL values are returned without error if the supplied units are
-*     incompatible (for instance, if the input and output units are "kg"
-*     and "m" ).
-*     -  NULL values are returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstMapping *result;
-   UnitNode **units;
-   UnitNode *in_tree;
-   UnitNode *intemp;
-   UnitNode *inv;         
-   UnitNode *labtree;
-   UnitNode *newtest;
-   UnitNode *out_tree;
-   UnitNode *outtemp;
-   UnitNode *src;
-   UnitNode *testtree;
-   UnitNode *tmp;         
-   UnitNode *totaltree;
-   UnitNode *totlabtree;
-   const char *c;
-   const char *exp;
-   int i;
-   int nc;             
-   int nunits;
-   int ipass;
-
-/* Initialise */
-   result = NULL;
-   if( in_lab ) *out_lab = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* A quick check for a common simple case: if the two strings are 
-   identical, return a UnitMap.*/
-   if( !strcmp( in, out ) ) {
-      if( in_lab ) *out_lab = astStore( NULL, in_lab, strlen( in_lab ) + 1 );
-      return (AstMapping *) astUnitMap( 1, "", status );
-   }   
-
-/* More initialisation. */
-   in_tree = NULL;
-   out_tree = NULL;
-   units = NULL;
-
-/* Parse the input units string, producing a tree of UnitNodes which
-   represents the input units. A pointer to the UnitNode at the head of
-   the tree is returned if succesfull. Report a context message if this 
-   fails. The returned tree contains branch nodes which correspond to
-   operators or functions, and leaf nodes which represent constant values
-   or named basic units (m, s, g, K, etc). Each branch node has one or more
-   "arguments" (i.e. child nodes) which are operated on or combined by
-   the branch node in some way to produce the nodes "value". This value
-   is then used as an argument for the node's parent node (if any). If
-   the string supplied by the user refers to any known derived units (e.g. "N",
-   Newton) then each such unit is represented in the returned tree by a
-   complete sub-tree in which the head node corresponds to the derived
-   unit (e.g. "N") and the leaf nodes correspond to the basic units needed 
-   to define the derived unit ( for instance, "m", "s" and "g" - metres, 
-   seconds and grammes), or numerical constants. Thus every leaf node in the 
-   returned tree will be a basic unit (i.e. a unit which is not defined in 
-   terms of other units), or a numerical constant. */
-   in_tree = CreateTree( in, 1, 1, status );
-   if( !astOK ) astError( AST__BADUN, "astUnitMapper: Error parsing input "
-                          "units string '%s'.", status, in );
-
-/* Do the same for the output units. */
-   if( astOK ) {   
-      out_tree = CreateTree( out, 1, 1, status );
-      if( !astOK ) astError( AST__BADUN, "astUnitMapper: Error parsing output "
-                             "units string '%s'.", status, out );
-   } 
-
-/* If a blank string is supplied for both input and output units, then
-   assume a UnitMap is the appropriate Mapping. */
-   if( !in_tree && !out_tree && astOK ) {
-      result = (AstMapping *) astUnitMap( 1, "", status );
-      if( in_lab ) *out_lab = astStore( NULL, in_lab, strlen( in_lab ) + 1 );
-
-/* Otherwise, if we have both input and output trees... */
-   } else if( in_tree && out_tree && astOK ) {
-
-/* Locate all the basic units used within either of these two trees. An
-   array is formed in which each element is a pointer to a UnitNode
-   contained within one of the trees created above. Each basic unit
-   referred to in either tree will have a single entry in this array
-   (even if the unit is referred to more than once). */
-      units = NULL;
-      nunits = 0;
-      LocateUnits( in_tree, &units, &nunits, status );
-      LocateUnits( out_tree, &units, &nunits, status );
-
-/* Due to the simple nature of the simplification process in SimplifyTree,
-   the following alogorithm sometimes fails to find a Mapping form input
-   to output units, but can find a Mapping from output to input units.
-   In this latter case, we can get the required Mapping from input to
-   output  simply by inverting the Mapign from output to input. So try
-   first with the units in the original order. If this fails to find a
-   Mapping, try again with the units swapped, and note that the final
-   Mapping should be inverted before being used. */
-      for( ipass = 0; ipass < 2; ipass++ ){
-         if( ipass == 1 ) {
-            tmp = in_tree;            
-            in_tree = out_tree;            
-            out_tree = tmp;
-         }
-
-/* We are going to create a new tree of UnitNodes in which the head node
-   corresponds to the requested output units, and which has a single
-   non-constant leaf node corresponding to the input units. Initialise a 
-   pointer to this new tree to indicate that it has not yet been created. */
-         testtree = NULL;
-
-/* Loop round each basic unit used in the definition of either the input
-   or the output units (i.e. the elements of the array created above by
-   "LocateUnits"). The unit selected by this loop is referred to as the 
-   "current" unit. On each pass through this loop, we create a tree which
-   is a candidate for the final required tree (the "test tree" pointed to
-   by the testtree pointer initialised above). In order for a mapping to
-   be possible between input and output units, the test tree created on
-   each pass through this loop must be equivalent to the test tree for the
-   previous pass (in other words, all the test trees must be equivalent). 
-   We break out of the loop (and return a NULL Mapping) as soon as we find 
-   a test tree which differs from the previous test tree. */
-         for( i = 0; i < nunits; i++ ) {
-
-/* Create copies of the trees describing the input and output units, in which 
-   all units other than the current unit are set to a constant value of 1. 
-   This is done by replacing OP_LDVAR nodes (i.e. nodes which "load" the
-   value of a named basic unit) by OP_LDCON nodes (i.e. nodes which load
-   a specified constant value) in the tree copy. */
-            intemp = FixUnits( in_tree, units[ i ], status );         
-            outtemp = FixUnits( out_tree, units[ i ], status );         
-
-/* Simplify these trees. An important side-effect of this simplification
-   is that trees are "standardised" which allows them to be compared for
-   equivalence. A single mathematical expression can often be represented 
-   in many different ways (for instance "A/B" is equivalent to "(B**(-1))*A"). 
-   Standardisation is a process of forcing all equivalent representations
-   into a single "standard" form. Without standardisation, trees representing 
-   the above two expressions would not be considered to be equivalent
-   since thy would contain different nodes and have different structures.
-   As a consequence of this standardisation, the "simplification" performed 
-   by SimplifyTree can sometimes actually make the tree more complicated 
-   (in terms of the number of nodes in the tree). */
-            SimplifyTree( &intemp, 1, status );
-            SimplifyTree( &outtemp, 1, status );
-
-/* If either of the simplified trees does not depend on the current unit,
-   then the node at the head of the simplified tree will have a constant
-   value (because all the units other than the current unit have been fixed
-   to a constant value of 1.0 above by FixUnits, leaving only the current
-   unit to vary in value). If both simplified trees are constants, then 
-   neither tree depends on the current basic unit (i.e. references to the 
-   current basic unit cancel out within each string expression - for
-   instance if converting from "m.s.Hz" to "km" and the current unit
-   is "s", then the "s.Hz" term will cause the "s" units to cancel out). In 
-   this case ignore this basic unit and pass on to the next. */
-            if( outtemp->con != AST__BAD && intemp->con != AST__BAD ) {
-
-/* If just one simplified tree is constant, then the two units cannot
-   match since one depends on the current basic unit and the other does 
-   not. Free any test tree from previous passes and break out of the loop. */
-            } else if( outtemp->con != AST__BAD || intemp->con != AST__BAD ) {
-               intemp = FreeTree( intemp, status );
-               outtemp = FreeTree( outtemp, status );
-               testtree = FreeTree( testtree, status );
-               break;
-
-/* If neither simplified tree is constant, both depend on the current
-   basic unit and so we can continue to see if their dependencies are
-   equivalent. */
-            } else {
-
-/* We are going to create a new tree which is the inverse of the above
-   simplified "intemp" tree. That is, the new tree will have a head node
-   corresponding to the current unit, and a single non-constant leaf node
-   corresponding to the input units. Create an OP_LDVAR node which can be
-   used as the leaf node for this inverted tree. If the input tree is 
-   inverted successfully, this root node becomes part of the inverted tree, 
-   and so does not need to be freed explicitly (it will be freed when the 
-   inverted tree is freed). */
-               src = NewNode( NULL, OP_LDVAR, status );
-               if( astOK ) src->name = astStore( NULL, "input_units", 12 );
-
-/* Now produce the inverted input tree. If the tree cannot be inverted, a
-   null pointer is returned. Check for this. Otherwise a pointer to the
-   UnitNode at the head of the inverted tree is returned. */
-               inv = InvertTree( intemp, src, status );
-               if( inv ) {
-
-/* Concatenate this tree (which goes from "input units" to "current unit") 
-   with the simplified output tree (which goes from "current unit" to 
-   "output units"), to get a new tree which goes from input units to output
-   units. */
-                  totaltree = ConcatTree( inv, outtemp, status );
-
-/* Simplify this tree. */
-                  SimplifyTree( &totaltree, 1, status );
-
-/* Compare this simplified tree with the tree produced for the previous
-   unit (if any). If they differ, we cannot map between the supplied
-   units so annul the test tree and break out of the loop. If this is the
-   first unit to be tested, use the total tree as the test tree for the
-   next unit. */
-                  if( testtree ) {
-                     if( CmpTree( totaltree, testtree, 0, status ) ) testtree = FreeTree( testtree, status );
-                     totaltree = FreeTree( totaltree, status );
-                     if( !testtree ) break;
-                  } else {
-                     testtree = totaltree;
-                  }
-               }
-
-/* If the input tree was inverted, free the inverted tree. */
-               if( inv ) {
-                  inv = FreeTree( inv, status );
-
-/* If the input tree could not be inverted, we cannot convert between input 
-   and output units. Free the node which was created to be the root of the 
-   inverted tree (and which has consequently not been incorporated into the
-   inverted tree), free any testtree and break out of the loop. */
-               } else {
-                  src = FreeTree( src, status );
-                  testtree = FreeTree( testtree, status );
-                  break;
-               }
-            }
-
-/* Free the other trees. */
-            intemp = FreeTree( intemp, status );
-            outtemp = FreeTree( outtemp, status );
-
-         }
-
-/* If all the basic units used by either of the supplied system of units 
-   produced the same test tree, leave the "swap in and out units" loop. */
-         if( testtree ) break;
-
-      }
-
-/* If the input and output units have been swapped, swap them back to
-   their original order, and invert the test tree (if there is one). */
-      if( ipass > 0 ) {
-         tmp = in_tree;            
-         in_tree = out_tree;            
-         out_tree = tmp;
-         if( testtree ) {
-            src = NewNode( NULL, OP_LDVAR, status );
-            if( astOK ) src->name = astStore( NULL, "input_units", 12 );
-            newtest = InvertTree( testtree, src, status );
-            FreeTree( testtree, status );
-            testtree = newtest;
-            if( !newtest ) src = FreeTree( src, status );
-         } 
-      }
-
-/* If all the basic units used by either of the supplied system of units 
-   produced the same test tree, create a Mapping which is equivalent to the
-   test tree and return it. */
-      if( testtree ) {
-         result = MakeMapping( testtree, status );
-
-/* We now go on to produce the output axis label from the supplied input
-   axis label. Get a tree of UnitNodes which describes the supplied label
-   associated with the input axis. The tree will have single OP_LDVAR node 
-   corresponding to the basic label (i.e. the label without any single 
-   argument functions or exponentiation operators applied). */
-         if( in_lab && astOK ) {
-
-/* Get a pointer to the first non-blank character, and store the number of 
-   characters to examine (this excludes any trailing white space). */  
-            exp = in_lab;
-            while( isspace( *exp ) ) exp++;
-            c = exp + strlen( exp ) - 1; 
-            while( c >= exp && isspace( *c ) ) c--;
-            nc = c - exp + 1;
-
-/* Create the tree. */
-            labtree = MakeLabelTree( exp, nc, status );
-            if( astOK ) {
-
-/* Concatenate this tree (which goes from "basic label" to "input label") 
-   with the test tree found above (which goes from "input units" to "output 
-   units"), to get a tree which goes from basic label to output label. */
-               totlabtree = ConcatTree( labtree, testtree, status );
-
-/* Simplify this tree. */
-               SimplifyTree( &totlabtree, 1, status );
-
-/* Create the output label from this tree. */
-               *out_lab = (char *) MakeExp( totlabtree, 0, 1, status );
-
-/* Free the trees. */
-               totlabtree = FreeTree( totlabtree, status );
-               labtree = FreeTree( labtree, status );
-
-/* Report a context error if the input label could not be parsed. */
-            } else {
-               astError( AST__BADUN, "astUnitMapper: Error parsing axis "
-                         "label '%s'.", status, in_lab );
-            }
-         }
-
-/* Free the units tree. */
-         testtree = FreeTree( testtree, status );
-
-      }
-   }
-
-/* Free resources. */
-   in_tree = FreeTree( in_tree, status );
-   out_tree = FreeTree( out_tree, status );
-   units = astFree( units );
-
-/* If an error has occurred, annul the returned Mapping. */
-   if( !astOK ) {
-      result = astAnnul( result );
-      if( in_lab ) *out_lab = astFree( *out_lab );
-   }
-
-/* Return the result. */
-   return result;
-
-}
-
-const char *astUnitNormaliser_( const char *in, int *status ){
-/*
-*+
-*  Name:
-*     astUnitNormalizer
-
-*  Purpose:
-*     Normalise a unit string into FITS-WCS format.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     const char *astUnitNormaliser( const char *in )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     This function returns a standard FITS-WCS form of the supplied unit
-*     string.
-
-*  Parameters:
-*     in
-*        A string representation of the units, for instance "km/h". 
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string holding the normalized
-*     unit string. It should be freed using astFree when no longer needed.
-
-*  Notes:
-*     -  An error will be reported if the units string cannot be parsed.
-*     -  NULL is returned if this function is invoked with the
-*     global error status set or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   UnitNode *in_tree;
-   double dval;
-   const char *result;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Parse the input units string, producing a tree of UnitNodes which
-   represents the input units. A pointer to the UnitNode at the head of
-   the tree is returned if succesfull. Report a context message if this 
-   fails. */
-   in_tree = CreateTree( in, 0, 1, status );
-   if( in_tree ) {
-
-/* Simplify the units expression, only doing genuine simplifications. */
-      SimplifyTree( &in_tree, 1, status );
-
-/* Invert literal constant unit multipliers. This is because a constant of 
-   say 1000 for a unit of "m" means "multiply the value in metres by 1000", 
-   but a unit string of "1000 m" means "value in units of 1000 m" (i.e. 
-   *divide* the value in metres by 1000). */
-      InvertConstants( &in_tree, status );
-
-/* Convert the tree into string form. */
-      result = MakeExp( in_tree, 2, 1, status );
-
-/* If the result is a constant value, return a blank string. */
-      if( 1 == astSscanf( result, "%lg", &dval ) ) {
-         *((char *) result) = 0;
-      }
-
-/* Free the tree. */
-      in_tree = FreeTree( in_tree, status );
-
-   } else {
-      astError( AST__BADUN, "astUnitNormaliser: Error parsing input "
-                "units string '%s'.", status, in );
-   }
-
-/* Return the result */
-   return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-*  Name:
-*     Ustrcmp
-
-*  Purpose:
-*     A case blind version of strcmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int Ustrcmp( const char *a, const char *b, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the two strings, and 1 
-*     otherwise. Comparisons are case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strcmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Loop round each character. */
-   while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strncmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unit.h"
-*     int Ustrncmp( const char *a, const char *b, size_t n, int *status )
-
-*  Class Membership:
-*     Unit member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the first "n"
-*     characters of the two strings, and 1 otherwise. Comparisons are
-*     case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     n
-*        The maximum number of characters to compare.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strncmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int i;                  /* Character index */
-   int ret;                /* Returned value */
-
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Check pointer have been supplied. */
-   if( !a || !b ) return ret;   
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Compare up to "n" characters. */
-   for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-/* The rest of this file contains functions which are of use for debugging 
-   this module. They are usually commented out. 
-
-static const char *DisplayTree( UnitNode *node, int ind ) {
-   int i;
-   char buf[200];
-   const char *result;
-   char *a;
-   const char *arg[ 2 ];
-   int rl;
-   int slen;
-   const opsym[ 100 ];
-
-   result = "";
-
-   for( i = 0; i < ind; i++ ) buf[ i ] = ' ';
-   buf[ ind ] = 0;
-
-   if( !node ) {
-      printf( "%s <null>\n", buf );
-   } else {
-
-      printf( "%s Code: '%s' (%d)\n", buf, OpName( node->opcode ), node->opcode );
-      printf( "%s Narg: %d\n", buf, node->narg );
-      printf( "%s Constant: %g\n", buf, node->con );
-      printf( "%s Name: %s\n", buf, node->name?node->name:"" );
-      printf( "%s Unit: %s\n", buf, node->unit?node->unit->sym:"" );
-      printf( "%s Mult: %s\n", buf, node->mult?node->mult->sym:"" );
-
-      OpSym( node, opsym );
-      slen = strlen( opsym );
-      rl = slen;
-
-      if( node->narg == 0 ) {
-         result = astMalloc( rl + 1 );
-         if( astOK ) strcpy( (char *) result, opsym );
-
-      } else if( node->narg == 1 ) {
-         rl += 2;
-         printf( "%s Arg 0:\n", buf );
-         arg[ 0 ] = DisplayTree( (node->arg)[ 0 ], ind + 2 );
-         rl += strlen( arg[ 0 ] );
-   
-         result = astMalloc( rl + 1 );
-         if( astOK ) {
-            a = (char *) result;
-            strcpy( a, opsym );
-            a += slen;
-            *(a++) = '(';
-            strcpy( a, arg[0] );
-            a += strlen( arg[ 0 ] );
-            *(a++) = ')';
-         }
-
-      } else {
-         rl += 4;
-         for( i = 0; i < node->narg; i++ ) {
-            printf( "%s Arg %d:\n", buf, i );
-            arg[ i ] = DisplayTree( (node->arg)[ i ], ind + 2 );
-            rl += strlen( arg[ i ] );
-         }
-   
-         result = astMalloc( rl + 1 );
-         if( astOK ) {
-            a = (char *) result;
-            *(a++) = '(';
-            strcpy( a, arg[0] );
-            a += strlen( arg[ 0 ] );
-            *(a++) = ')';
-            strcpy( a, opsym );
-            a += slen;
-            *(a++) = '(';
-            strcpy( a, arg[1] );
-            a += strlen( arg[ 1 ] );
-            *(a++) = ')';
-         }
-      }
-   }
-
-   if( !astOK ) {
-      astFree( (void *) result );
-      result = "";
-   }
-
-   return result;
-}
-
-static const char *OpName( Oper op ) {
-   const char *name;
-
-   if( op ==  OP_LDCON ) {
-      name = "LDCON";
-   } else if( op ==  OP_LDVAR ) {
-      name = "LDVAR";
-   } else if( op ==  OP_LOG ) {  
-      name = "LOG";
-   } else if( op ==  OP_LN ) {   
-      name = "LN";
-   } else if( op ==  OP_EXP ) {  
-      name = "EXP";
-   } else if( op ==  OP_SQRT ) { 
-      name = "SQRT";
-   } else if( op ==  OP_POW ) {  
-      name = "POW";
-   } else if( op ==  OP_DIV ) {  
-      name = "DIV";
-   } else if( op ==  OP_MULT ) { 
-      name = "MULT";
-   } else if( op ==  OP_LDPI ) { 
-      name = "LDPI";
-   } else if( op ==  OP_LDE ) {  
-      name = "LDE";
-   } else if( op ==  OP_NULL ) {
-      name = "NULL";
-   } else {
-      name = "<unknown op code>";
-   }
-
-   return name;
-}
-
-static void OpSym( UnitNode *node, char *buff ) {
-   const char *sym = NULL;
-
-   if( node->con != AST__BAD ) {
-      sprintf( buff, "%g", node->con );
-
-   } else if( node->opcode ==  OP_LDVAR ) {
-      sym = node->name;
-
-   } else if( node->opcode ==  OP_LOG ) {  
-      sym = "log";
-
-   } else if( node->opcode ==  OP_LN ) {   
-      sym = "ln";
-
-   } else if( node->opcode ==  OP_EXP ) {  
-      sym = "exp";
-
-   } else if( node->opcode ==  OP_SQRT ) { 
-      sym = "sqrt";
-
-   } else if( node->opcode ==  OP_POW ) {  
-      sym = "**";
-
-   } else if( node->opcode ==  OP_DIV ) {  
-      sym = "/";
-
-   } else if( node->opcode ==  OP_MULT ) { 
-      sym = "*";
-
-   } else if( node->opcode ==  OP_NULL ) {
-      sym = "NULL";
-
-   } else {
-      sym = "<unknown op code>";
-   }
-
-   if( sym ) strcpy( buff, sym );
-}
-
-static const char *TreeExp( UnitNode *node ) {
-   char buff[ 100 ];
-   char buff2[ 100 ];
-
-   if( node->narg == 0 ) {
-      OpSym( node, buff );
-
-   } else if( node->narg == 1 ) {
-      OpSym( node, buff2 );
-      sprintf( buff, "%s(%s)", buff2, TreeExp( node->arg[ 0 ] ) );
-
-   } else if( node->narg == 2 ) {
-      OpSym( node, buff2 );
-      sprintf( buff, "(%s)%s(%s)", TreeExp( node->arg[ 0 ] ), buff2,
-                                   TreeExp( node->arg[ 1 ] ) );
-   }
-
-   return astStore( NULL, buff, strlen( buff ) + 1 );
-}
-
-*/
-
-
-
-
diff --git a/ast-5.3-1/unit.h b/ast-5.3-1/unit.h
deleted file mode 100644
index 63303f1..0000000
--- a/ast-5.3-1/unit.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#if !defined( UNIT_INCLUDED )  /* Include this file only once */
-#define UNIT_INCLUDED
-/*
-*+
-*  Name:
-*     unit.h
-
-*  Purpose:
-*     Define the interface to the Unit module.
-
-*  Description:
-*     This module defines functions which identify units and transform
-*     between them.
-*
-*     Note that this module is not a class implementation, although it
-*     resembles one.
-
-*  Functions Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     10-DEC-2002 (DSB):
-*        Original version.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-#include "mapping.h"             /* Coordinate mappings */
-
-/* C header files. */
-/* --------------- */
-
-/* Function prototypes. */
-/* ==================== */
-#if defined(astCLASS)            /* Protected  */
-AstMapping *astUnitMapper_( const char *, const char *, const char *,
-                            char **, int * );
-const char *astUnitLabel_( const char *, int * );
-double astUnitAnalyser_( const char *, double[9], int * );
-const char *astUnitNormaliser_( const char *, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module. */
-
-#if defined(astCLASS)            /* Protected */
-#define astUnitMapper(in,out,inlab,outlab) astINVOKE(O,astUnitMapper_(in,out,inlab,outlab,STATUS_PTR))
-#define astUnitAnalyser(in,powers) astUnitAnalyser_(in,powers,STATUS_PTR) 
-#define astUnitNormaliser(in) astUnitNormaliser_(in,STATUS_PTR) 
-#define astUnitLabel(sym) astINVOKE(O,astUnitLabel_(sym,STATUS_PTR))
-#endif
-#endif
-
-
-
diff --git a/ast-5.3-1/unitmap.c b/ast-5.3-1/unitmap.c
deleted file mode 100644
index 4bf8815..0000000
--- a/ast-5.3-1/unitmap.c
+++ /dev/null
@@ -1,1418 +0,0 @@
-/*
-*class++
-*  Name:
-*     UnitMap
-
-*  Purpose:
-*     Unit (null) Mapping.
-
-*  Constructor Function:
-c     astUnitMap
-f     AST_UNITMAP
-
-*  Description:
-*     A UnitMap is a unit (null) Mapping that has no effect on the
-*     coordinates supplied to it. They are simply copied. This can be
-*     useful if a Mapping is required (e.g. to pass to another
-c     function) but you do not want it to have any effect.
-f     routine) but you do not want it to have any effect.
-*     The Nin and Nout attributes of a UnitMap are always equal and
-*     are specified when it is created.
-
-*  Inheritance:
-*     The UnitMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The UnitMap class does not define any new attributes beyond
-*     those which are applicable to all Mappings.
-
-*  Functions:
-c     The UnitMap class does not define any new functions beyond those
-f     The UnitMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     7-FEB-1996 (RFWS):
-*        Original version.
-*     13-DEC-1996 (RFWS):
-*        Over-ride the astMapMerge method.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitUnitMapVtab
-*        method.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS UnitMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "object.h"              /* Base Object class */
-#include "memory.h"              /* AST memory management */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "unitmap.h"             /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stddef.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(UnitMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(UnitMap,Class_Init)
-#define class_vtab astGLOBAL(UnitMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstUnitMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstUnitMap *astUnitMapId_( int, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-
-/* Member functions. */
-/* ================= */
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two UnitMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     UnitMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two UnitMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a UnitMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the UnitMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstUnitMap *that;        
-   AstUnitMap *this;        
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two UnitMap structures. */
-   this = (AstUnitMap *) this_object;
-   that = (AstUnitMap *) that_object;
-
-/* Check the second object is a UnitMap. We know the first is a
-   UnitMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAUnitMap( that ) ) {
-
-/* Get the number of inputs check they are the same for both. */
-      result = ( astGetNin( this ) == astGetNin( that ) );
-
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a UnitMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     UnitMap member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is always one.
-
-*  Parameters:
-*     this
-*        Pointer to the UnitMap.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 1;
-}
-
-void astInitUnitMapVtab_(  AstUnitMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitUnitMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a UnitMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     void astInitUnitMapVtab( AstUnitMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     UnitMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the UnitMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAUnitMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that
-   provide virtual methods for this class. */
-
-/* None. */
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->MapSplit = MapSplit;
-   mapping->Rate = Rate;
-   mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump function. There is no copy constructor or
-   destructor. */
-   astSetDump( vtab, Dump, "UnitMap", "Unit (null) Mapping" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a UnitMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     UnitMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated UnitMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated UnitMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated UnitMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the UnitMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        UnitMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated UnitMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *new;              /* Pointer to replacement UnitMap */
-   const char *class;            /* Pointer to Mapping class string */
-   int i1;                       /* Index of first UnitMap to merge */
-   int i2;                       /* Index of last UnitMap to merge */
-   int i;                        /* Loop counter for Mappings */
-   int ngone;                    /* Number of UnitMaps eliminated */
-   int nin;                      /* Number of coordinates for UnitMap */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* If the Mapping sequence consists of a single UnitMap, simply check
-   if the asociated Invert flag is set, and clear it if necessary. */
-   if ( *nmap == 1 ) {
-      if ( ( *invert_list )[ 0 ] ) {
-         ( *invert_list )[ 0 ] = 0;
-
-/* Note if the Mapping sequence was modified. */
-         result = 0;
-      }
-
-/* In series. */
-/* ========== */
-/* If a UnitMap occurs in series with any other Mapping, it can simply
-   be eliminated, so annul its Mapping pointer. */
-   } else if ( *nmap > 1 ) {
-      if ( series ) {
-         ( *map_list )[ where ] = astAnnul( ( *map_list )[ where ] );
-
-/* Loop to move any following pointers and their Invert flags down in
-   the array to fill the gap, and clear the vacated elements at the
-   end of the arrays. */
-         for ( i = where + 1; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap )--;
-         result = where;
-         
-/* In parallel. */
-/* ============ */
-/* If a UnitMap occurs in parallel with other Mappings, it can be
-   merged with any UnitMaps on either side of itself. */
-      } else {
-
-/* Initialise indices to identify any adjacent UnitMaps and the number
-   of coordinates to be handled by the replacement. */
-         i1 = i2 = where;
-         nin = astGetNin( ( *map_list )[ where ] );
-
-/* Loop to inspect earlier Mappings, obtaining the Mapping Class name
-   and checking it is "UnitMap". Quit looping as soon as any other
-   class of Mapping is found. */
-         while ( i1 - 1 >= 0 ) {
-            class = astGetClass( ( *map_list )[ i1 - 1 ] );
-            if ( !astOK || strcmp( class, "UnitMap" ) ) break;
-
-/* Update the index of the earliest UnitMap that is to be merged and
-   increment the total number of coordinates involved. */
-            i1--;
-            nin += astGetNin( ( *map_list )[ i1 ] );
-         }
-
-/* Repeat the above process to inspect any later Mappings in the
-   sequence. */
-         while ( i2 + 1 < *nmap ) {
-            class = astGetClass( ( *map_list )[ i2 + 1 ] );
-            if ( !astOK || strcmp( class, "UnitMap" ) ) break;
-            i2++;
-            nin += astGetNin( ( *map_list )[ i2 ] );
-         }
-
-/* Calculate the net number of Mappings that can be removed from the
-   sequence and check if this is zero, meaning that there were no
-   adjacent UnitMaps to merge with. */
-         if ( astOK ) {
-            ngone = i2 - i1;
-            if ( !ngone ) {
-
-/* If so, simply check if the nominated UnitMap's Invert flag is set,
-   and clear it if necessary. */
-               if ( ( *invert_list )[ where ] ) {
-                  ( *invert_list )[ where ] = 0;
-
-/* Note if the Mapping sequence was modified. */
-                  result = where;
-               }
-
-/* If UnitMaps can be merged, create the replacement UnitMap. */
-            } else {
-               new = (AstMapping *) astUnitMap( nin, "", status );
-               if ( astOK ) {
-
-/* Annul the pointers to all the UnitMaps that are being replaced. */
-                  for ( i = i1; i <= i2; i++ ) {
-                     ( *map_list )[ i ] = astAnnul( ( *map_list )[ i ] );
-                  }
-
-/* Insert the new pointer and the associated Invert flag. */               
-                  ( *map_list )[ i1 ] = new;
-                  ( *invert_list )[ i1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
-   in the arrays. */
-                  for ( i = i2 + 1; i < *nmap; i++ ) {
-                     ( *map_list )[ i - ngone ] = ( *map_list )[ i ];
-                     ( *invert_list )[ i - ngone ] = ( *invert_list )[ i ];
-                  }
-
-/* Clear the vacated elements at the end. */
-                  for ( i = *nmap - ngone; i < *nmap; i++ ) {
-                     ( *map_list )[ i ] = NULL;
-                     ( *invert_list )[ i ] = 0;
-                  }
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-                  ( *nmap ) -= ngone;
-                  result = i1;
-               }
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     UnitMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     UnitMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing UnitMap. This is only possible if the specified inputs
-*     correspond to some subset of the UnitMap outputs. That is, there
-*     must exist a subset of the UnitMap outputs for which each output
-*     depends only on the selected UnitMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied UnitMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the UnitMap to be split (the UnitMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied UnitMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied UnitMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied UnitMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstUnitMap *this;          /* Pointer to UnitMap structure */
-   int *result;               /* Pointer to returned array */
-   int i;                     /* Loop count */
-   int iin;                   /* Mapping input index */
-   int mnin;                  /* No. of Mapping inputs */
-   int ok;                    /* Are input indices OK? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the UnitMap structure. */
-   this = (AstUnitMap *) this_map;
-
-/* Allocate memory for the returned array and create a UnitMap with the
-   required number of axes. */
-   result = astMalloc( sizeof( int )*(size_t) nin );
-   *map = (AstMapping *) astUnitMap( nin, "", status );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Store the required output axis indices. At the same time check that each 
-   axis is valid. */
-      mnin = astGetNin( this );
-      ok = 1;
-      for( i = 0; i < nin; i++ ) {
-         iin = in[ i ];
-         if( iin >= 0 && iin < mnin ) {
-            result[ i ] = iin;
-         } else {
-            ok = 0;
-            break;
-         }
-      }
-
-/* If the "in" array contained any invalid values, free the returned
-   resources. */
-      if( !ok ) { 
-         result = astFree( result );
-         *map = astAnnul( *map );
-      }
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     UnitMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-   return ( ax1 == ax2 ) ? 1.0 : 0.0;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a UnitMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     UnitMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a UnitMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to perform the identity
-*     transformation (i.e. simply copies the coordinate values).
-
-*  Parameters:
-*     this
-*        Pointer to the UnitMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation. In this case, both transformations are equivalent.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the UnitMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstUnitMap *map;              /* Pointer to UnitMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int npoint;                   /* Number of points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the UnitMap. */
-   map = (AstUnitMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   coordinate copy needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord_in = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* We need not determine whether to apply the forward or inverse
-   transformation, as they are both the same. */
-
-/* Copy the coordinate values. */
-/* --------------------------- */
-   if ( astOK ) {
-
-/* Loop to copy the values for each coordinate. Use a memory copy for speed. */
-      for ( coord = 0; coord < ncoord_in; coord++ ) {
-         (void) memcpy( (void *) ptr_out[ coord ],
-                        (const void *) ptr_in[ coord ],
-                        sizeof( double ) * (size_t) npoint );
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for UnitMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the UnitMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the UnitMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstUnitMap *this;             /* Pointer to the UnitMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the UnitMap structure. */
-   this = (AstUnitMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   UnitMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* There are no values to write, so return without further action. */
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAUnitMap and astCheckUnitMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(UnitMap,Mapping)
-astMAKE_CHECK(UnitMap)
-
-AstUnitMap *astUnitMap_( int ncoord, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astUnitMap
-f     AST_UNITMAP
-
-*  Purpose:
-*     Create a UnitMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "unitmap.h"
-c     AstUnitMap *astUnitMap( int ncoord, const char *options, ... )
-f     RESULT = AST_UNITMAP( NCOORD, OPTIONS, STATUS )
-
-*  Class Membership:
-*     UnitMap constructor.
-
-*  Description:
-*     This function creates a new UnitMap and optionally initialises
-*     its attributes.
-*
-*     A UnitMap is a unit (null) Mapping that has no effect on the
-*     coordinates supplied to it. They are simply copied. This can be
-*     useful if a Mapping is required (e.g. to pass to another
-c     function) but you do not want it to have any effect.
-f     routine) but you do not want it to have any effect.
-
-*  Parameters:
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of input and output coordinates (these numbers are
-*        necessarily the same).
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new UnitMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new UnitMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astUnitMap()
-f     AST_UNITMAP = INTEGER
-*        A pointer to the new UnitMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstUnitMap *new;              /* Pointer to new UnitMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the UnitMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitUnitMap( NULL, sizeof( AstUnitMap ), !class_init, &class_vtab,
-                         "UnitMap", ncoord );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   UnitMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new UnitMap. */
-   return new;
-}
-
-AstUnitMap *astUnitMapId_( int ncoord, const char *options, ... ) {
-/*
-*  Name:
-*     astUnitMapId_
-
-*  Purpose:
-*     Create a UnitMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     AstUnitMap *astUnitMapId_( int ncoord, const char *options, ... )
-
-*  Class Membership:
-*     UnitMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astUnitMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astUnitMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astUnitMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astUnitMap_.
-
-*  Returned Value:
-*     The ID value associated with the new UnitMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstUnitMap *new;              /* Pointer to new UnitMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the UnitMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitUnitMap( NULL, sizeof( AstUnitMap ), !class_init, &class_vtab,
-                         "UnitMap", ncoord );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   UnitMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new UnitMap. */
-   return astMakeId( new );
-}
-
-AstUnitMap *astInitUnitMap_( void *mem, size_t size, int init,
-                             AstUnitMapVtab *vtab, const char *name,
-                             int ncoord, int *status ) {
-/*
-*+
-*  Name:
-*     astInitUnitMap
-
-*  Purpose:
-*     Initialise a UnitMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     AstUnitMap *astInitUnitMap( void *mem, size_t size, int init,
-*                                 AstUnitMapVtab *vtab, const char *name,
-*                                 int ncoord )
-
-*  Class Membership:
-*     UnitMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new UnitMap object. It allocates memory (if necessary) to accommodate
-*     the UnitMap plus any additional data associated with the derived class.
-*     It then initialises a UnitMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a UnitMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the UnitMap is to be initialised.
-*        This must be of sufficient size to accommodate the UnitMap data
-*        (sizeof(UnitMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the UnitMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the UnitMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the UnitMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new UnitMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the Object
-*        astClass function).
-*     ncoord
-*        The number of coordinate values per point.
-
-*  Returned Value:
-*     A pointer to the new UnitMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstUnitMap *new;              /* Pointer to new UnitMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitUnitMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the UnitMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstUnitMap *) astInitMapping( mem, size, 0, 
-                                        (AstMappingVtab *) vtab, name,
-                                        ncoord, ncoord, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the UnitMap data. */
-/* ---------------------------- */
-/* There is nothing else to store. */
-
-/* If an error occurred, clean up by deleting the new object (if any other
-   resources had been allocated, we would free these first). */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstUnitMap *astLoadUnitMap_( void *mem, size_t size,
-                             AstUnitMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadUnitMap
-
-*  Purpose:
-*     Load a UnitMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "unitmap.h"
-*     AstUnitMap *astLoadUnitMap( void *mem, size_t size,
-*                                 AstUnitMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     UnitMap loader.
-
-*  Description:
-*     This function is provided to load a new UnitMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     UnitMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a UnitMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the UnitMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        UnitMap data (sizeof(UnitMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the UnitMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the UnitMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstUnitMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new UnitMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the UnitMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "UnitMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new UnitMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstUnitMap *new;              /* Pointer to the new UnitMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this UnitMap. In this case the
-   UnitMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstUnitMap );
-      vtab = &class_vtab;
-      name = "UnitMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitUnitMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built UnitMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "UnitMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* There are no values to read. */
-/* ---------------------------- */
-
-/* If an error occurred, clean up by deleting the new UnitMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new UnitMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-/* There are none of these. */
-
-
-
-
diff --git a/ast-5.3-1/unitmap.h b/ast-5.3-1/unitmap.h
deleted file mode 100644
index 9614f49..0000000
--- a/ast-5.3-1/unitmap.h
+++ /dev/null
@@ -1,288 +0,0 @@
-#if !defined( UNITMAP_INCLUDED ) /* Include this file only once */
-#define UNITMAP_INCLUDED
-/*
-*+
-*  Name:
-*     unitmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the UnitMap class.
-
-*  Invocation:
-*     #include "unitmap.h"
-
-*  Description:
-*     This include file defines the interface to the UnitMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The UnitMap class implements Mappings that perform an identity
-*     (unit) coordinate transformation, simply by copying each
-*     coordinate value from input to output (and similarly for the
-*     inverse transformation). UnitMaps are therefore of little use
-*     for converting coordinates, but they serve a useful role as
-*     "null" Mappings in cases where a Mapping is needed (e.g.  to
-*     pass to a function), but no coordinate transformation is wanted.
-
-*  Inheritance:
-*     The UnitMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astMapMerge
-*           Simplify a sequence of Mappings containing a UnitMap.
-*        astTransform
-*           Transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        None.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAUnitMap
-*           Test class membership.
-*        astUnitMap
-*           Create a UnitMap.
-*
-*     Protected:
-*        astCheckUnitMap
-*           Validate class membership.
-*        astInitUnitMap
-*           Initialise a UnitMap.
-*        astInitUnitMapVtab
-*           Initialise the virtual function table for the UnitMap class.
-*        astLoadUnitMap
-*           Load a UnitMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstUnitMap
-*           UnitMap object type.
-*
-*     Protected:
-*        AstUnitMapVtab
-*           UnitMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     7-FEB-1996 (RFWS):
-*        Original version.
-*     13-DEC-1996 (RFWS):
-*        Over-ride the astMapMerge method.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitUnitMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* UnitMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each
-   object in the class (e.g. its instance variables). */
-typedef struct AstUnitMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-/* None. */
-} AstUnitMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstUnitMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-/* None. */
-} AstUnitMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstUnitMapGlobals {
-   AstUnitMapVtab Class_Vtab;
-   int Class_Init;
-} AstUnitMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitUnitMapGlobals_( AstUnitMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(UnitMap)          /* Check class membership */
-astPROTO_ISA(UnitMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstUnitMap *astUnitMap_( int, const char *, int *, ...);
-#else
-AstUnitMap *astUnitMapId_( int, const char *, ... )__attribute__((format(printf,2,3)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstUnitMap *astInitUnitMap_( void *, size_t, int, AstUnitMapVtab *,
-                             const char *, int, int * );
-
-/* Vtab initialiser. */
-void astInitUnitMapVtab_( AstUnitMapVtab *, const char *, int * );
-
-/* Loader. */
-AstUnitMap *astLoadUnitMap_( void *, size_t, AstUnitMapVtab *,
-                             const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-/* None. */
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckUnitMap(this) astINVOKE_CHECK(UnitMap,this,0)
-#define astVerifyUnitMap(this) astINVOKE_CHECK(UnitMap,this,1)
-
-/* Test class membership. */
-#define astIsAUnitMap(this) astINVOKE_ISA(UnitMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astUnitMap astINVOKE(F,astUnitMap_)
-#else
-#define astUnitMap astINVOKE(F,astUnitMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitUnitMap(mem,size,init,vtab,name,ncoord) \
-astINVOKE(O,astInitUnitMap_(mem,size,init,vtab,name,ncoord,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitUnitMapVtab(vtab,name) astINVOKE(V,astInitUnitMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadUnitMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadUnitMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckUnitMap to validate UnitMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-/* None. */
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/version.h b/ast-5.3-1/version.h
deleted file mode 100644
index 9c78dde..0000000
--- a/ast-5.3-1/version.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#if !defined( VERSION_INCLUDED )
-#define VERSION_INCLUDED 1
-/*
-*+
-*  Name:
-*     version.h
-
-*  Purpose:
-*     Declare version numbers
-
-*  Description:
-*     Defines macros which expand to the components of the AST version
-*     number, namely the major and minor version numbers, and the
-*     release number.  The version number as a string is available by
-*     including the file config.h, which defines macros PACKAGE_STRING,
-*     PACKAGE_VERSION and (equivalently to the latter) VERSION.
-*
-*     For example, the version string `3.2-1' corresponds to major version
-*     3, minor version 2, release 1.
-
-*  Macros defined:
-*     AST__VMAJOR
-*        The AST major version number
-*     AST__VMINOR
-*        The AST minor version number
-*     AST__RELEASE
-*        The AST release number
-*
-*     For backwards compatibility, this module also declares macros
-*     AST_MAJOR_VERS, AST_MINOR_VERS and AST_RELEASE.  The AST__*
-*     macros should be used in preference to these, since the latter
-*     use (non-standard) single underscores.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     NG: Norman Gray (Starlink)
-
-*  History:
-*     25-NOV-2003 (NG):
-*        Original version
-*-
-*/
-
-/* The current version of AST is 5.3-1 */
-#define AST__VMAJOR    5
-#define AST__VMINOR    3
-#define AST__RELEASE   1
-
-/* Deprecated macros */
-#define AST_MAJOR_VERS 5
-#define AST_MINOR_VERS 3
-#define AST_RELEASE    1
-
-#endif /* #if ! defined(VERSION_INCLUDED) */
diff --git a/ast-5.3-1/wcsmap.c b/ast-5.3-1/wcsmap.c
deleted file mode 100644
index 5c30274..0000000
--- a/ast-5.3-1/wcsmap.c
+++ /dev/null
@@ -1,5770 +0,0 @@
-/*
-*class++
-*  Name:
-*     WcsMap
-
-*  Purpose:
-*     Implement a FITS-WCS sky projection.
-
-*  Constructor Function:
-c     astWcsMap
-f     AST_WCSMAP
-
-*  Description:
-*     This class is used to represent sky coordinate projections as
-*     described in the FITS world coordinate system (FITS-WCS) paper II 
-*     "Representations of Celestial Coordinates in FITS" by M. Calabretta 
-*     and E.W. Griesen. This paper defines a set of functions, or sky 
-*     projections, which transform longitude-latitude pairs representing 
-*     spherical celestial coordinates into corresponding pairs of Cartesian
-*     coordinates (and vice versa).
-*
-*     A WcsMap is a specialised form of Mapping which implements these
-*     sky projections and applies them to a specified pair of coordinates.
-*     All the projections in the FITS-WCS paper are supported, plus the now 
-*     deprecated "TAN with polynomial correction terms" projection which 
-*     is refered to here by the code "TPN". Using the FITS-WCS terminology, 
-*     the transformation is between "native spherical" and "projection
-*     plane" coordinates (also called "intermediate world coordinates".  
-*     These coordinates may, optionally, be embedded in a space with more 
-*     than two dimensions, the remaining coordinates being copied unchanged. 
-*     Note, however, that for consistency with other AST facilities, a 
-*     WcsMap handles coordinates that represent angles in radians (rather 
-*     than the degrees used by FITS-WCS).
-*
-*     The type of FITS-WCS projection to be used and the coordinates
-*     (axes) to which it applies are specified when a WcsMap is first
-*     created. The projection type may subsequently be determined
-*     using the WcsType attribute and the coordinates on which it acts
-*     may be determined using the WcsAxis(lonlat) attribute.
-*
-*     Each WcsMap also allows up to 100 "projection parameters" to be
-*     associated with each axis. These specify the precise form of the 
-*     projection, and are accessed using PVi_m attribute, where "i" is 
-*     the integer axis index (starting at 1), and m is an integer
-*     "parameter index" in the range 0 to 99. The number of projection
-*     parameters required by each projection, and their meanings, are 
-*     dependent upon the projection type (most projections either do not 
-*     use any projection parameters, or use parameters 1 and 2 associated
-*     with the latitude axis). Before creating a WcsMap you should consult 
-*     the FITS-WCS paper for details of which projection parameters are 
-*     required, and which have defaults. When creating the WcsMap, you must 
-*     explicitly set values for all those required projection parameters 
-*     which do not have defaults defined in this paper.
-
-*  Inheritance:
-*     The WcsMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     WcsMap also has the following attributes:
-*
-*     - NatLat: Native latitude of the reference point of a FITS-WCS projection
-*     - NatLon: Native longitude of the reference point of a FITS-WCS projection
-*     - PVi_m: FITS-WCS projection parameters
-*     - PVMax: Maximum number of FITS-WCS projection parameters
-*     - WcsAxis(lonlat): FITS-WCS projection axes
-*     - WcsType: FITS-WCS projection type
-
-*  Functions:
-c     The WcsMap class does not define any new functions beyond those
-f     The WcsMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     15-FEB-1996 (DSB):
-*        Original version.
-*     23-MAR-1996 (DSB):
-*        Added support for PointSets with more than 2 axes.
-*     14-NOV-1996 (DSB):
-*        Added I/O facilities, external interface, attributes, etc.
-*     16-JAN-1997 (DSB):
-*        Allowed WCSBAD as a projection type in astWcsMap.
-*     24-APR-1997 (RFWS):
-*        Tidied prologues.
-*     26-SEP-1997 (DSB):
-*        o  Long descriptions of projections changed to include a textual
-*        description as well as the three letter acronym.
-*        o  Added protected function astPrjDesc.
-*        o  String values now used instead of integers to represent
-*        "choice" attributes externally (eg WcsType).
-*     8-APR-1998 (DSB):
-*        Modified MapMerge so that a WcsMap can merge with its own
-*        inverse when astSimplify is used.
-*     20-APR-1998 (DSB):
-*        Modified MapMerge to avoid the possibility of returning an
-*        empty mappings list.
-*     4-SEP-1998 (DSB):
-*        Changed MapMerge to allow WcsMaps to swap with PermMaps in
-*        order to bring mergable WcsMaps closer together.
-*     5-MAY-1999 (DSB):
-*        More corrections to MapMerge: Cleared up errors in the use of the 
-*        supplied invert flags, and corrected logic for deciding which 
-*        neighbouring Mapping to swap with. 
-*     12-JUL-1999 (DSB):
-*        -  Report an error if too many or two few projection parameters are
-*        supplied in a WcsMap.
-*        -  Corrected MapMerge to prevent unset projection parameters
-*        being copied to any new WcsMaps.
-*        -  Correct handling of invert flags in WcsPerm.
-*     16-JUL-1999 (DSB):
-*        Fixed memory leak in MapMerge.
-*     11-FEB-2000 (DSB):
-*        Added PVj_m attributes. Attributes ProjP(0) to ProjP(9) are now
-*        aliases for PV(axlat)_0 to PV(axlat)_9. Renamed GLS projection
-*        as SFL (GLS retained as alias for SFL).
-*     10-AUG-2000 (DSB):
-*        MapMerge no longer simplifies a CAR projection. Previously they
-*        were replaced by a UnitMap, but this removed the cylic nature of
-*        the mapping (i.e. 2.PI == 0 ).
-*     6-OCT-2000 (DSB):
-*        Ignore leading and trailing spaces in astWCsPrjType (some
-*        CTYPE FITS keywords have appeared with trailing white space).
-*     26-SEP-2001 (DSB):
-*        Changed names of all functions and structure to avoid name clashes 
-*        with wcslib.
-*     10-OCT-2002 (DSB):
-*        Added astIsZenithal.
-*     22-OCT-2002 (DSB):
-*        - GetPV now returns the FITS default value instead of AST__BAD
-*        if a defaultable latitude projection parameter has not been set.
-*        - A number of changes needed to support WcsLib v2.9.
-*        - Added AST__TPN projection.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitWcsMapVtab
-*        method.
-*     4-JUN-2003 (DSB):
-*        - Added attribute "NatLon".
-*        - Changed to allow a user-specified fiducial point to be stored
-*        in projection parameter PVi_1 and PVi_2 for the longitude axis.
-*        - Changed "PVj_m" to "PVi_m" for consistency with FITS-WCS paper II.
-*     18-AUG-2003 (DSB):
-*        In function Map, assign zero longitude to output positions which
-*        are very close to a pole.
-*     23-SEP-2003 (DSB):
-*        - Changed so that the NatLat and NatLon attributes refer to the
-*        fixed values for the projections defined in FITS-WCS paper II, rather
-*        than the user-defined values stored in projection parameter PVi_1 and 
-*        PVi_2 for the longitude axis.
-*     11-FEB-2004 (DSB):
-*        Corrected axis numbering when reporting missing keywords in
-*        Transform.
-*     23-APR-2004 (DSB):
-*        Changes to simplification algorithm.
-*     1-SEP-2004 (DSB):
-*        CopyPV rewritten to avoid assumption that the input and output
-*        WcsMaps have the same number of axes and that the lon/lat axes have 
-*        the same indices.
-*     7-DEC-2005 (DSB):
-*        Free memory allocated by calls to astReadString.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     15-FEB-2006 (DSB):
-*        Use dynamic rather than static memory for the parameter arrays in 
-*        the AstPrjPrm structure.Override astGetObjSize. This is to
-*        reduce the in-memory size of a WcsMap.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*     10-AUG-2006 (DSB):
-*        Correct astLoadWcsMap to take acount of the different number of
-*        PVi_m values that can be associated with each axis.
-*     4-JAN-2007 (DSB):
-*        Correct astLoadWcsMap to load the projection parameter with
-*        highest index correctly.
-*     23-FEB-2007 (DSB):
-*        Added HPX projection.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS WcsMap
-
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macros to check for equality of floating point values. We cannot
-   compare bad values directory because of the danger of floating point
-   exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/*
-*
-*  Name:
-*     MAKE_CLEAR
-
-*  Purpose:
-*     Implement a method to clear a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     MAKE_CLEAR(attr,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the WcsMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Clear<Attribute>( AstWcsMap *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        void astClear<Attribute>_( AstWcsMap *this, int axis )
-*
-*     which implement a method for clearing a single value in a specified 
-*     multi-valued attribute for an axis of a WcsMap.
-
-*  Parameters:
-*     attr
-*        The name of the attribute to be cleared, as it appears in the function
-*        name (e.g. Label in "astClearLabelAt").
-*     component
-*        The name of the class structure component that holds the attribute
-*        value.
-*     assign
-*        An expression that evaluates to the value to assign to the component
-*        to clear its value. The variable "axis" can be used to refer to
-*        the zero-based index of the attribute component being cleared.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_CLEAR(attr,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Clear##attr( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astClear" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the "clear" value. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astClear##attr##_( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,WcsMap,Clear##attr))( this, axis, status ); \
-}   
-
-
-/*
-*
-*  Name:
-*     MAKE_GET
-
-*  Purpose:
-*     Implement a method to get a single value in a multi-valued attribute.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     MAKE_GET(attr,type,bad_value,assign,nval)
-
-*  Class Membership:
-*     Defined by the WcsMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static <Type> Get<Attribute>( AstWcsMap *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        <Type> astGet<Attribute>_( AstWcsMap *this, int axis )
-*
-*     which implement a method for getting a single value from a specified 
-*     multi-valued attribute for an axis of a WcsMap.
-
-*  Parameters:
-*     attr
-*        The name of the attribute whose value is to be obtained, as it
-*        appears in the function name (e.g. Label in "astGetLabel").
-*     type
-*        The C type of the attribute.
-*     bad_value
-*        A constant value to return if the global error status is set, or if
-*        the function fails.
-*     assign
-*        An expression that evaluates to the value to be returned. This can
-*        use the string "axis" to represent the zero-based value index.
-*     nval
-*        Specifies the number of values in the multi-valued attribute. The
-*        "axis" values supplied to the created function should be in the
-*        range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*
-*/
-
-/* Define the macro. */
-#define MAKE_GET(attr,type,bad_value,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static type Get##attr( AstWcsMap *this, int axis, int *status ) { \
-   type result;                  /* Result to be returned */ \
-\
-/* Initialise */ \
-   result = (bad_value); \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astGet" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = (bad_value); \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */  \
-type astGet##attr##_( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return (bad_value); \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,WcsMap,Get##attr))( this, axis, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_SET
-
-*  Purpose:
-*     Implement a method to set a single value in a multi-valued attribute 
-*     for a WcsMap.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     MAKE_SET(attr,type,component,assign,nval)
-
-*  Class Membership:
-*     Defined by the WcsMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static void Set<Attribute>( AstWcsMap *this, int axis, <Type> value )
-*
-*     and an external interface function of the form:
-*
-*        void astSet<Attribute>_( AstWcsMap *this, int axis, <Type> value )
-*
-*     which implement a method for setting a single value in a specified
-*     multi-valued attribute for a WcsMap.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be set, as it appears in the function
-*         name (e.g. Label in "astSetLabelAt").
-*      type
-*         The C type of the attribute.
-*      component
-*         The name of the class structure component that holds the attribute
-*         value.
-*      assign
-*         An expression that evaluates to the value to be assigned to the
-*         component.
-*      nval
-*         Specifies the number of values in the multi-valued attribute. The
-*         "axis" values supplied to the created function should be in the
-*         range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_SET(attr,type,component,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static void Set##attr( AstWcsMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astSet" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Store the new value in the structure component. */ \
-   } else { \
-      this->component[ axis ] = (assign); \
-   } \
-} \
-\
-/* External interface. */ \
-/* ------------------- */ \
-void astSet##attr##_( AstWcsMap *this, int axis, type value, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   (**astMEMBER(this,WcsMap,Set##attr))( this, axis, value, status ); \
-}
-
-/*
-*
-*  Name:
-*     MAKE_TEST
-
-*  Purpose:
-*     Implement a method to test if a single value has been set in a 
-*     multi-valued attribute for a class.
-
-*  Type:
-*     Private macro.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     MAKE_TEST(attr,assign,nval)
-
-*  Class Membership:
-*     Defined by the WcsMap class.
-
-*  Description:
-*     This macro expands to an implementation of a private member function of
-*     the form:
-*
-*        static int Test<Attribute>( AstWcsMap *this, int axis )
-*
-*     and an external interface function of the form:
-*
-*        int astTest<Attribute>_( AstWcsMap *this, int axis )
-*
-*     which implement a method for testing if a single value in a specified 
-*     multi-valued attribute has been set for a class.
-
-*  Parameters:
-*      attr
-*         The name of the attribute to be tested, as it appears in the function
-*         name (e.g. Label in "astTestLabelAt").
-*      assign
-*         An expression that evaluates to 0 or 1, to be used as the returned
-*         value. This can use the string "axis" to represent the zero-based
-*         index of the value within the attribute.
-*      nval
-*         Specifies the number of values in the multi-valued attribute. The
-*         "axis" values supplied to the created function should be in the
-*         range zero to (nval - 1).
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*-
-*/
-
-/* Define the macro. */
-#define MAKE_TEST(attr,assign,nval) \
-\
-/* Private member function. */ \
-/* ------------------------ */ \
-static int Test##attr( AstWcsMap *this, int axis, int *status ) { \
-   int result;                   /* Value to return */ \
-\
-/* Initialise */ \
-   result = 0; \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return result; \
-\
-\
-/* Validate the axis index. */ \
-   if( axis < 0 || axis >= nval ){ \
-      astError( AST__AXIIN, "%s(%s): Index (%d) is invalid for attribute " \
-                #attr " - it should be in the range 1 to %d.", status, \
-                "astTest" #attr, astGetClass( this ), \
-                axis + 1, nval ); \
-\
-/* Assign the result value. */ \
-   } else { \
-      result = (assign); \
-   } \
-\
-/* Check for errors and clear the result if necessary. */ \
-   if ( !astOK ) result = 0; \
-\
-/* Return the result. */ \
-   return result; \
-} \
-/* External interface. */ \
-/* ------------------- */ \
-int astTest##attr##_( AstWcsMap *this, int axis, int *status ) { \
-\
-/* Check the global error status. */ \
-   if ( !astOK ) return 0; \
-\
-/* Invoke the required method via the virtual function table. */ \
-   return (**astMEMBER(this,WcsMap,Test##attr))( this, axis, status ); \
-}
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "unitmap.h"             /* Unit mappings */
-#include "permmap.h"             /* Axis permutation mappings */
-#include "wcsmap.h"              /* Interface definition for this class */
-#include "pal.h"                 /* SLALIB function prototypes */
-#include "channel.h"             /* I/O channels */
-#include "proj.h"                /* WCSLIB projections and WCSLIB_MXPAR */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-/* Local Type Definitions. */
-/* ----------------------- */
-/* This structure is used to hold information describing a WCSLIB 
-   projection. */
-typedef struct PrjData {
-   int prj;                     /* WCSLIB projection identifier value */
-   int mxpar;                   /* Max index for a lat axis projection param */
-   int mxpar2;                  /* Max index for a lon axis projection param */
-   char desc[60];               /* Long projection description */
-   char ctype[5];               /* FITS CTYPE identifying string */
-   int (* WcsFwd)(double, double, struct AstPrjPrm *, double *, double *);
-                                /* Pointer to forward projection function */
-   int (* WcsRev)(double, double, struct AstPrjPrm *, double *, double *);
-                                /* Pointer to reverse projection function */
-   double theta0;               /* Default native latitude of fiducial point */
-} PrjData;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int *(* parent_mapsplit)( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* The following array of PrjData structured describes each of the WCSLIB
-   projections. The last entry in the list should be for the AST__WCSBAD 
-   projection. This marks the end of the list. */
-static PrjData PrjInfo[] = {
-   { AST__AZP,  2, 4, "zenithal perspective", "-AZP", astAZPfwd, astAZPrev, AST__DPIBY2 },
-   { AST__SZP,  3, 4, "slant zenithal perspective", "-SZP", astSZPfwd, astSZPrev, AST__DPIBY2 },
-   { AST__TAN,  0, 4, "gnomonic", "-TAN",  astTANfwd, astTANrev, AST__DPIBY2 },
-   { AST__STG,  0, 4, "stereographic", "-STG",  astSTGfwd, astSTGrev, AST__DPIBY2 },
-   { AST__SIN,  2, 4, "orthographic", "-SIN",  astSINfwd, astSINrev, AST__DPIBY2 },
-   { AST__ARC,  0, 4, "zenithal equidistant", "-ARC",  astARCfwd, astARCrev, AST__DPIBY2 },
-   { AST__ZPN,  WCSLIB_MXPAR, 4, "zenithal polynomial", "-ZPN",  astZPNfwd, astZPNrev, AST__DPIBY2 },
-   { AST__ZEA,  0, 4, "zenithal equal area", "-ZEA",  astZEAfwd, astZEArev, AST__DPIBY2 },
-   { AST__AIR,  1, 4, "Airy", "-AIR",  astAIRfwd, astAIRrev, AST__DPIBY2 },
-   { AST__CYP,  2, 4, "cylindrical perspective", "-CYP",  astCYPfwd, astCYPrev, 0.0 },
-   { AST__CEA,  1, 4, "cylindrical equal area", "-CEA",  astCEAfwd, astCEArev, 0.0 },
-   { AST__CAR,  0, 4, "Cartesian", "-CAR",  astCARfwd, astCARrev, 0.0 },
-   { AST__MER,  0, 4, "Mercator", "-MER",  astMERfwd, astMERrev, 0.0 },
-   { AST__SFL,  0, 4, "Sanson-Flamsteed", "-SFL",  astSFLfwd, astSFLrev, 0.0 },
-   { AST__PAR,  0, 4, "parabolic", "-PAR",  astPARfwd, astPARrev, 0.0 },
-   { AST__MOL,  0, 4, "Mollweide", "-MOL",  astMOLfwd, astMOLrev, 0.0 },
-   { AST__AIT,  0, 4, "Hammer-Aitoff", "-AIT",  astAITfwd, astAITrev, 0.0 },
-   { AST__COP,  2, 4, "conical perspective", "-COP",  astCOPfwd, astCOPrev, AST__BAD },
-   { AST__COE,  2, 4, "conical equal area", "-COE",  astCOEfwd, astCOErev, AST__BAD },
-   { AST__COD,  2, 4, "conical equidistant", "-COD",  astCODfwd, astCODrev, AST__BAD },
-   { AST__COO,  2, 4, "conical orthomorphic", "-COO",  astCOOfwd, astCOOrev, AST__BAD },
-   { AST__BON,  1, 4, "Bonne's equal area", "-BON",  astBONfwd, astBONrev, 0.0 },
-   { AST__PCO,  0, 4, "polyconic", "-PCO",  astPCOfwd, astPCOrev, 0.0 },
-   { AST__TSC,  0, 4, "tangential spherical cube", "-TSC",  astTSCfwd, astTSCrev, 0.0 },
-   { AST__CSC,  0, 4, "cobe quadrilateralized spherical cube", "-CSC", astCSCfwd, astCSCrev, 0.0 },
-   { AST__QSC,  0, 4, "quadrilateralized spherical cube", "-QSC",  astQSCfwd, astQSCrev, 0.0 },
-   { AST__NCP,  2, 4, "AIPS north celestial pole", "-NCP",  NULL,   NULL, 0.0 },
-   { AST__GLS,  0, 4, "sinusoidal", "-GLS",  astSFLfwd, astSFLrev, 0.0 },
-   { AST__HPX,  2, 4, "HEALPix", "-HPX",  astHPXfwd, astHPXrev, 0.0 },
-   { AST__TPN,  WCSLIB_MXPAR, WCSLIB_MXPAR, "gnomonic polynomial", "-TPN",  astTPNfwd, astTPNrev, AST__DPIBY2 },
-   { AST__WCSBAD, 0, 4, "<null>",   "    ",  NULL,   NULL, 0.0 } };
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(WcsMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(WcsMap,Class_Init)
-#define class_vtab astGLOBAL(WcsMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(WcsMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstWcsMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstWcsMap *astWcsMapId_( int, int, int, int, const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static int GetObjSize( AstObject *, int * );
-static double GetPV( AstWcsMap *, int, int, int * );
-static int TestPV( AstWcsMap *, int, int, int * );
-static void ClearPV( AstWcsMap *, int, int, int * );
-static void SetPV( AstWcsMap *, int, int, double, int * );
-
-static int GetPVMax( AstWcsMap *, int, int * );
-static int GetWcsType( AstWcsMap *, int * );
-static double GetNatLat( AstWcsMap *, int * );
-static double GetNatLon( AstWcsMap *, int * );
-static int GetWcsAxis( AstWcsMap *, int, int * );
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const PrjData *FindPrjData( int, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static int CanMerge( AstMapping *, int, AstMapping *, int, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetNP( AstWcsMap *, int, int * );
-static int IsZenithal( AstWcsMap *, int * );
-static int Map( AstWcsMap *, int, int, double *, double *, double *, double *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void CopyPV( AstWcsMap *, AstWcsMap *, int * );
-static void Delete( AstObject *obj, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FreePV( AstWcsMap *, int * );
-static void InitPrjPrm( AstWcsMap *, int * );
-static void LongRange( const PrjData *, struct AstPrjPrm *, double *, double *, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void WcsPerm( AstMapping **, int *, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Member functions. */
-/* ================= */
-static int CanMerge( AstMapping *map1, int inv1, AstMapping *map2, int inv2, int *status ){
-/*
-*
-*  Name:
-*     CanMerge
-
-*  Purpose:
-*     Checks if two WcsMaps can be merged.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int CanMerge( AstMapping *map1, int inv1, AstMapping *map2, int inv2, int *status )
-
-*  Class Membership:
-*     WcsMap internal utility function.
-
-*  Description:
-*     This function checks the two supplied Mappings to see if they are
-*     two WcsMaps which can be merged. This is only possible if they
-*     form an inverse pair.
-
-*  Parameters:
-*     map1
-*        A pointer to the first mapping.
-*     map2
-*        A pointer to the second mapping.
-*     inv1
-*        The invert flag to use with the first mapping.
-*     inv2
-*        The invert flag to use with the second mapping.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the WcsMaps can be merged, zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstWcsMap *wcs1;               /* Pointer to first WcsMap */
-   AstWcsMap *wcs2;               /* Pointer to second WcsMap */
-   int m;                         /* Projection parameter index */
-   int ret;                       /* Can the Mappings be merged? */
-   int i;                         /* Axis index */
-
-/* Initialise the returned value. */
-   ret = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Both Mappings must be WcsMaps to merge. */
-   if( !strcmp( "WcsMap", astGetClass( map1 ) ) &&
-       !strcmp( "WcsMap", astGetClass( map2 ) ) ) {
-
-/* Get pointers to the WcsMaps. */
-      wcs1 = (AstWcsMap *) map1;
-      wcs2 = (AstWcsMap *) map2;
-
-/* Check that the two WcsMaps performs the same sort of projection, and
-   have the same number of axes. */
-      if( astGetWcsType( wcs1 ) == astGetWcsType( wcs2 ) &&
-          astGetNin( wcs1 ) == astGetNin( wcs2 ) ) {
-
-/* Check that the Mappings are applied in opposite senses. */
-         if( inv1 != inv2 ) {
-
-/* Check that the latitude and longitude axes have the same indices in
-   both WcsMaps. */
-            if( astGetWcsAxis( wcs1, 0 ) == astGetWcsAxis( wcs2, 0 ) &&
-                astGetWcsAxis( wcs1, 1 ) == astGetWcsAxis( wcs2, 1 ) ){
-
-/* We nopw check the projection parameters are equal. Assume they are for
-   the moment. */
-               ret = 1; 
-
-/* Check the parameters for each axis in turn. */
-               for( i = 0; i < astGetNin( wcs1 ); i++ ){
-
-/* If the two WcsMaps have a different number of parameters for this axes,
-   they cannot merge. */
-                  if( GetNP( wcs1, i, status ) != GetNP( wcs1, i, status ) ){
-                     ret = 0;
-                     break;
-
-/* Otherwise, check each parameter value in turn. If any are found which
-   are not equal, the WcsMaps cannot merge. */
-                  } else {
-                     for( m = 0; m < GetNP( wcs1, i, status ); m++ ){
-                        if( !EQUAL( astGetPV( wcs1, i, m ),
-                                    astGetPV( wcs2, i, m ) ) ){
-                           ret = 0;
-                           break;
-                        }
-                     }
-                     if( !ret ) break;
-                  }
-               }
-            }
-         }
-      }
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-                    int *simpler, int *status ){
-/*
-*  Name:
-
-*     CanSwap
-
-*  Purpose:
-*     Determine if two Mappings could be swapped.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-*                  int *simpler )
-
-*  Class Membership:
-*     WcsMap member function 
-
-*  Description:
-*     This function returns a flag indicating if the pair of supplied
-*     Mappings could be replaced by an equivalent pair of Mappings from the 
-*     same classes as the supplied pair, but in reversed order. Each pair
-*     of Mappings is considered to be compunded in series. The supplied 
-*     Mapings are not changed in any way.
-
-*  Parameters:
-*     map1
-*        The Mapping to be applied first.
-*     map2
-*        The Mapping to be applied second.
-*     inv1
-*        The invert flag to use with map1. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     inv2
-*        The invert flag to use with map2. 
-*     simpler
-*        Addresss of a location at which to return a flag indicating if
-*        the swapped Mappings would be intrinsically simpler than the
-*        original Mappings.
-
-*  Returned Value:
-*     1 if the Mappings could be swapped, 0 otherwise.
-
-*  Notes:
-*     -  One of the supplied pair of Mappings must be a WcsMap.
-*     -  A value of 0 is returned if the two Mappings could be merged into
-*     a single Mapping.
-*     -  A value of 0 is returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *nowcs;        /* Pointer to non-WcsMap Mapping */
-   AstWcsMap  *wcs;          /* Pointer to WcsMap Mapping */
-   const char *class1;       /* Pointer to map1 class string */
-   const char *class2;       /* Pointer to map2 class string */
-   const char *nowcs_class;  /* Pointer to non-WcsMap class string */
-   double *consts;           /* Pointer to constants array */
-   int *inperm;              /* Pointer to input axis permutation array */
-   int *outperm;             /* Pointer to output axis permutation array */
-   int i;                    /* Loop count */
-   int invert[ 2 ];          /* Original invert flags */
-   int latax;                /* Index of latitude axis in WcsMap */
-   int lonax;                /* Index of longitude axis in WcsMap */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-   int ret;                  /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   ret = 0;
-   *simpler = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   invert[ 0 ] = astGetInvert( map1 );
-   astSetInvert( map1, inv1 );
-
-   invert[ 1 ] = astGetInvert( map2 );
-   astSetInvert( map2, inv2 );
-   
-/* Get the classes of the two mappings. */
-   class1 = astGetClass( map1 );
-   class2 = astGetClass( map2 );
-   if( astOK ){
-
-/* Get a pointer to the non-WcsMap Mapping. */
-      if( !strcmp( class1, "WcsMap" ) ){
-         wcs = (AstWcsMap *) map1;
-         nowcs = map2;
-         nowcs_class = class2;
-      } else {
-         nowcs = map1;
-         wcs = (AstWcsMap *) map2;
-         nowcs_class = class1;
-      }
-
-/* If it is a PermMap, the Mappings can be swapped so long as:
-   1) all links between input and output axes in the PermMap are 
-   bi-directional. This does not preclude the existence of unconnected axes, 
-   which do not have links (bi-directional or otherwise). 
-   2) The PermMap passesd though both the longitude and latitude axes of
-   the WcsMap */
-      if( !strcmp( nowcs_class, "PermMap" ) ){
-
-/* Get the number of input and output coordinates. */
-         nin = astGetNin( nowcs );
-         nout = astGetNout( nowcs );
-
-/* We need to know the axis permutation arrays and constants array for
-   the PermMap. */
-         PermGet( (AstPermMap *) nowcs, &outperm, &inperm, &consts, status );
-         if( astOK ) {
-
-/* Indicate we can swap with the PermMap. */
-            ret = 1;
-
-/* Check each output axis. If any links between axes are found which are
-   not bi-directional, indicate that we cannot swap with the PermMap. */
-            for( i = 0; i < nout; i++ ){
-               if( outperm[ i ] >= 0 && outperm[ i ] < nin ) {
-                  if( inperm[ outperm[ i ] ] != i ) {
-                     ret = 0;
-                     break;
-                  }
-               }
-            }
-
-/* Check each input axis. If any links between axes are found which are
-   not bi-directional, indicate that we cannot swap with the PermMap. */
-            for( i = 0; i < nin; i++ ){
-               if( inperm[ i ] >= 0 && inperm[ i ] < nout ) {
-                  if( outperm[ inperm[ i ] ] != i ) {
-                     ret = 0;
-                     break;
-                  }
-               }
-            }
-
-/* Check that the longitude and latitude axes both have bi-directional
-   links in the PermMap, or are both unassigned. */
-            if( ret ) {
-
-/* Get the indices of the longitude and latitude axes in the WcsMap */
-               lonax = astGetWcsAxis( wcs, 0 );
-               latax = astGetWcsAxis( wcs, 1 );
-
-/* If the WcsMap is applied first... */
-               if( wcs == (AstWcsMap *) map1 ) {
-                  if( inperm[ lonax] < 0 && inperm[ latax ] < 0 ) {
-                     ret = 1;
-                  } else if( inperm[ lonax ] < 0 || inperm[ lonax ] >= nout ||
-                             inperm[ latax ] < 0 || inperm[ latax ] >= nout ) {
-                     ret = 0;
-                  } 
-
-/* If the WcsMap is applied second ... */
-               } else {
-                  if( outperm[ lonax ] < 0 && outperm[ latax ] < 0 ) {
-                     ret = 1;
-                  } else if( outperm[ lonax ] < 0 || outperm[ lonax ] >= nin ||
-                             outperm[ latax ] < 0 || outperm[ latax ] >= nin ) {
-                     ret = 0;
-                  } 
-               }
-            }
-
-/* If we can swap with the PermMap, the swapped Mappings may be
-   intrinsically simpler than the original mappings. */
-            if( ret ) {
-
-/* If the PermMap preceeds the WcsMap, this will be the case if the PermMap
-   has more outputs than inputs. If the WcsMap preceeds the PermMap, this 
-   will be the case if the PermMap has more inputs than outputs. */
-               *simpler = ( nowcs == map1 ) ? nout > nin : nin > nout;
-            }
-
-/* Free the axis permutation and constants arrays. */
-            outperm = (int *) astFree( (void *) outperm );
-            inperm = (int *) astFree( (void *) inperm );
-            consts = (double *) astFree( (void *) consts );
-         }
-      }
-   }
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied MatrixMaps. */
-   astSetInvert( map1, invert[ 0 ] );
-   astSetInvert( map2, invert[ 1 ] );
-   
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     WcsMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     WcsMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstWcsMap *this;             /* Pointer to the WcsMap structure */
-   int i;                       /* Axis index */
-   int len;                     /* Length of the attribute name */
-   int m;                       /* Projection parameter index */
-   int nc;                      /* No. of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the WcsMap structure. */
-   this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* ProjP. */
-/* ------ */
-   if ( nc = 0, ( 1 == astSscanf( attrib, "prpjp(%d)%n", &m, &nc ) )
-                  && ( nc >= len ) ) {
-      astClearPV( this, astGetWcsAxis( this, 1 ), m );
-
-/* PV. */
-/* ------ */
-   } else if ( nc = 0, ( 2 == astSscanf( attrib, "pv%d_%d%n", &i, &m, &nc ) )
-                  && ( nc >= len ) ) {
-      astClearPV( this, i - 1, m );
-
-/* If the name was not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then report an
-   error. */
-   } else if ( ( nc = 0, ( 1 == astSscanf( attrib, "wcsaxis(%d)%n", &i, &nc ) )
-                           && ( nc >= len ) ) ||
-        !strcmp( attrib, "wcstype" ) ||
-        !strcmp( attrib, "natlat" ) ||
-        !strcmp( attrib, "natlon" ) ){
-      astError( AST__NOWRT, "astClear: Invalid attempt to clear the \"%s\" "
-                "value for a %s.", status, attrib, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static void ClearPV( AstWcsMap *this, int i, int m, int *status ) { 
-/*
-*+
-*  Name:
-*     astClearPV
-
-*  Purpose:
-*     Clear a PVi_m attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void astClearPV( AstWcsMap *this, int i, int m )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function clears a specified member of the PV attribute array, by
-*     resetting its value to AST__BAD.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     i
-*        Zero based axis index.
-*     m 
-*        Zero based parameter index.
-
-*-
-*/
-/* Local Variables; */
-   int npar;
-   int mxpar;       
-
-/* Check the global error status. */ 
-   if ( !astOK ) return; 
-
-/* Validate the axis index. */ 
-   if( i < 0 || i >= astGetNin( this ) ){ 
-      astError( AST__AXIIN, "astClearPV(%s): Axis index (%d) is invalid in "
-                "attribute PV%d_%d  - it should be in the range 1 to %d.", 
-                status, astGetClass( this ), i + 1, i + 1, m, 
-                astGetNin( this ) ); 
-
-   } else {
-
-/* Find the maximum number of parameters allowed for the axis. */
-      mxpar = astGetPVMax( this, i );
-
-/* Ignore unused parameters. */ 
-      if( m < 0 || m > mxpar ){ 
-
-/* See if the parameter is currently set. Is so, set its value to
-   AST__BAD. */
-      } else if( this->np && this->p ){ 
-         npar = this->np[ i ];
-         if( m < npar && this->p[ i ] ) this->p[ i ][ m ] = AST__BAD;
-      } 
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
-      InitPrjPrm( this, status );
-   }
-} 
-
-static void CopyPV( AstWcsMap *in, AstWcsMap *out, int *status ) {
-/*
-*  Name:
-*     CopyPV
-
-*  Purpose:
-*     Copy projection parameter information from one WcsMap to another.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void CopyPV( AstWcsMap *in, AstWcsMap *out )
-
-*  Description:
-*     This function copies projection parameter information from one
-*     WcsMap to another.
-
-*  Parameters:
-*     in
-*        Pointer to the input WcsMap.
-*     out 
-*        Pointer to the output WcsMap.
-
-*/
-
-
-/* Local Variables: */
-   int i;                        /* Axis index */
-   int latax_in;                 /* Index of input latitude axis */
-   int latax_out;                /* Index of output latitude axis */
-   int lonax_in;                 /* Index of input longitude axis */
-   int lonax_out;                /* Index of output longitude axis */
-   int nax_in;                   /* No. of axis in the input WcsMap */
-   int nax_out;                  /* No. of axis in the output WcsMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Nullify the pointers stored in the output WcsMap since these may
-   currently be pointing at good data. Otherwise, the good data could be
-   freed by accident if the output object is deleted due to an error
-   occuring in this function. */
-   out->np = NULL;
-   out->p = NULL;
-
-/* Do nothing more if either of the input pointers are null (i.e. if there
-   are no projection parameters. */
-   if( in->np && in->p ){
-
-/* Store the number of axes in the input and output WcsMaps */
-      nax_in = astGetNin( in );
-      nax_out = astGetNin( out );
-
-/* Allocate memory for the array holding the number of projection parameters 
-   associated with each axis. */
-      out->np = (int *) astMalloc( sizeof( int )*nax_out );
-
-/* Allocate memory for the array of pointers which identify the arrays
-   holding the parameter values. */
-      out->p = (double **) astMalloc( sizeof( double *)*nax_out );
-
-/* Check pointers can be used */
-      if( astOK ) {
-
-/* Initialise the above arrays. */
-         for( i = 0; i < nax_out; i++ ) {
-            (out->np)[ i ] = 0;
-            (out->p)[ i ] = NULL;
-         }
-
-/* Copy the longitude and latitude values from in to out (other axes do
-   not have projection parameters). */
-         lonax_in = astGetWcsAxis( in, 0 );
-         latax_in = astGetWcsAxis( in, 1 );
-         lonax_out = astGetWcsAxis( out, 0 );
-         latax_out = astGetWcsAxis( out, 1 );
-
-         (out->np)[ lonax_out ] = (in->np)[ lonax_in ];
-         (out->p)[ lonax_out ] = (double *) astStore( NULL, 
-                                          (void *) (in->p)[ lonax_in ], 
-                                          sizeof(double)*(in->np)[ lonax_in ] );
-
-         (out->np)[ latax_out ] = (in->np)[ latax_in ];
-         (out->p)[ latax_out ] = (double *) astStore( NULL, 
-                                          (void *) (in->p)[ latax_in ], 
-                                          sizeof(double)*(in->np)[ latax_in ] );
-      }
-
-/* If an error has occurred, free the output arrays. */
-      if( !astOK ) FreePV( out, status );
-
-   }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
-   InitPrjPrm( out, status );
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two WcsMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     WcsMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two WcsMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a WcsMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the WcsMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWcsMap *that;        
-   AstWcsMap *this;        
-   int i, j;           
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two WcsMap structures. */
-   this = (AstWcsMap *) this_object;
-   that = (AstWcsMap *) that_object;
-
-/* Check the second object is a WcsMap. We know the first is a
-   WcsMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAWcsMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two WcsMaps differ, it may still be possible 
-   for them to be equivalent. First compare the WcsMaps if their Invert 
-   flags are the same. In this case all the attributes of the two WcsMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-
-            if( this->type == that->type &&
-                this->wcsaxis[ 0 ] == that->wcsaxis[ 0 ] &&
-                this->wcsaxis[ 1 ] == that->wcsaxis[ 1 ] ) {
-
-               result = 1;
-
-               if( this->np && that->np ){
-   
-                  for( i = 0; i < nout && result; i++ ) {
-   
-                     if( (this->np)[ i ] != (that->np)[ i ] ) {
-                        result = 0;
-   
-                     } else if( (this->p)[ i ] && !(this->p)[ i ] ) {
-                        result = 0;
-   
-                     } else if( !(this->p)[ i ] && (this->p)[ i ] ) {
-                        result = 0;
-   
-                     } else if( (this->p)[ i ] && (this->p)[ i ] ) {
-   
-                        for( j = 0; j < (this->np)[ i ]; j++ ) {
-                           if( !astEQUAL( (this->p)[ i ][ j ], 
-                                          (that->p)[ i ][ j ] ) ) {
-                              result = 0;
-                              break;
-                           }                  
-                        }
-                     }
-                  }
-               }
-
-            } else if( this->np || that->np ){
-               result = 0;
-            }
-
-/* If the Invert flags for the two WcsMaps differ, the attributes of the two 
-   WcsMaps must be inversely related to each other. */
-         } else {
-
-/* In the specific case of a WcsMap, Invert flags must be equal. */
-            result = 0;
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const PrjData *FindPrjData( int type, int *status ){
-/*
-*+
-*  Name:
-*     FindPrjData
-
-*  Purpose:
-*     Get information about a WCSLIB projection given a projection type. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     const PrjData *FindPrjData( int type, int *status )
-
-*  Class Membership:
-*     WcsMap member function
-
-*  Description:
-*     This function returns a pointer to an PrjData structure describing 
-*     the WCSLIB projection with the supplied type. 
-
-*  Parameters:
-*     type
-*        The projection type.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the "const" PrjData structure describing the projection.
-
-*  Notes:
-*     -  The returned pointer points to an element in a static array and 
-*     should not be freed.
-*     -  This function attempts to execute even if an error has already 
-*     occurred. A description of a "null" projection will be returned if 
-*     this function subsequently fails (for instance if the projection is 
-*     not recognised).
-*-
-*/
-
-   const PrjData *data;
-   data = PrjInfo;
-   while( data->prj != AST__WCSBAD && data->prj != type ) data++;
-   return data;
-}
-
-static void FreePV( AstWcsMap *this, int *status ) { 
-/*
-*
-*  Name:
-*     FreePV
-
-*  Purpose:
-*     Free memory used to hold projection parameters
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     FreePV( AstWcsMap *this, int *status )
-
-*  Class Membership:
-*     WcsMap private function
-
-*  Description:
-*     This function frees all the dynamic memory used to store projection
-*     parameter information in the supplied WcsMap.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if an error has already occurred.
-
-*
-*/
-   int i;              /* Axis index */
-      
-   if( this->np ) this->np = (int *) astFree( (void *) this->np );
-   if( this->p ){
-      for( i = 0; i < astGetNin( this ); i++ ){
-         this->p[ i ]  = (double *) astFree( (void *) this->p[ i ] );
-      }
-      this->p = (double **) astFree( (void *) this->p );
-   }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
-   InitPrjPrm( this, status );
-
-
-}   
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     WcsMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied WcsMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWcsMap *this;         /* Pointer to WcsMap structure */
-   int result;              /* Result value to return */
-   int i;                   /* Axis index */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the WcsMap structure. */
-   this = (AstWcsMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-      
-   result += astTSizeOf( this->np );
-   if( this->p ){
-      for( i = 0; i < astGetNin( this ); i++ ){
-         result += astTSizeOf( (void *) this->p[ i ] );
-      }
-      result += astTSizeOf( this->p );
-   }
-
-   result += astTSizeOf( this->params.p );
-   result += astTSizeOf( this->params.p2 );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     WcsMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a WcsMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the WcsMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the WcsMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstWcsMap *this;             /* Pointer to the WcsMap structure */
-   const char *result;          /* Pointer value to return */
-   double dval;                 /* Floating point attribute value */
-   int i;                       /* Axis index */
-   int ival;                    /* Integer attribute value */
-   int len;                     /* Length of attribute string */
-   int m;                       /* Projection parameter index */
-   int nc;                      /* No. of characters read by astSscanf */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the WcsMap structure. */
-   this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* ProjP. */
-/* ------ */
-   if ( nc = 0, ( 1 == astSscanf( attrib, "projp(%d)%n", &m, &nc ) )
-                  && ( nc >= len ) ) {
-      dval = astGetPV( this, astGetWcsAxis( this, 1 ), m );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* PV. */
-/* --- */
-   } else if ( nc = 0, ( 2 == astSscanf( attrib, "pv%d_%d%n", &i, &m, &nc ) )
-                  && ( nc >= len ) ) {
-      dval = astGetPV( this, i - 1, m );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* WcsType */
-/* ======= */
-   } else if ( !strcmp( attrib, "wcstype" ) ) {
-      ival = astGetWcsType( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* PVMax */
-/* ===== */
-   } else if ( nc = 0, ( 1 == astSscanf( attrib, "pvmax(%d)%n", &i, &nc ) )
-                  && ( nc >= len ) ) {
-      ival = astGetPVMax( this, i - 1 );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* NatLat */
-/* ====== */
-   } else if ( !strcmp( attrib, "natlat" ) ) {
-      dval = astGetNatLat( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-/* NatLon */
-/* ====== */
-   } else if ( !strcmp( attrib, "natlon" ) ) {
-      dval = astGetNatLon( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, dval );
-         result = getattrib_buff;
-      }
-
-
-/* WcsAxis */
-/* ======= */
-   } else if ( nc = 0, ( 1 == astSscanf( attrib, "wcsaxis(%d)%n", &i, &nc ) )
-                         && ( nc >= len ) ) {
-      ival = astGetWcsAxis( this, i - 1 ) + 1;
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double GetNatLat( AstWcsMap *this, int *status ) { 
-/*
-*+
-*  Name:
-*     GetNatLat
-
-*  Purpose:
-*     Get the value of the NatLat attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     double GetNatLat( AstWcsMap *this, int *status ) 
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns the value of the NatLat attribute. This is
-*     fixed value for most projection types , defined in the FITS-WCS paper
-*     II. For instance, all zenithal projections have NatLat = PI/2 (90
-*     degrees). For some prjections (e.g. conics), the value is defined
-*     by a projection parameter.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The attribute value, in radians.
-
-*-
-*/
-   double ret;     /* Returned value */
-
-/* The native latitude of the reference point of the projection is 
-   constant for most projection, but for some (the conics) it is 
-   specified by projection one on the latitude axis. */
-   ret = FindPrjData( this->type, status )->theta0;
-   if( ret == AST__BAD ){
-      ret = astGetPV( this, astGetWcsAxis( this, 1 ), 1 );
-      if( ret != AST__BAD ) ret *= AST__DD2R;
-   }
-
-/* Return the result. */ 
-   return ret;
-}
-
-static double GetNatLon( AstWcsMap *this, int *status ) { 
-/*
-*+
-*  Name:
-*     GetNatLon
-
-*  Purpose:
-*     Get the value of the NatLon attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     double GetNatLon( AstWcsMap *this, int *status ) 
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns the value of the NatLon attribute. This is
-*     fixed value of zero for all projection types.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The attribute value, in radians.
-
-*-
-*/
-   return 0.0;
-}
-
-static int GetNP( AstWcsMap *this, int i, int *status ) { 
-/*
-*+
-*  Name:
-*     GetNP
-
-*  Purpose:
-*     Get the number of projection parameters for a specified axis.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int GetNP( AstWcsMap *this, int i, int *status ) 
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns the current number of projection parameters
-*     associated with the speified axis. Some of these may be unset (i.e.
-*     equal to AST__BAD). The returned number is the size of the array
-*     holding the projection parameters.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     i 
-*        Zero based axis index.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of projection parameters for the specified axis.
-
-*-
-*/
-   double ret;
-
-/* Initialise */
-   ret = 0;
-
-/* Check the global error status. */ 
-   if ( !astOK ) return ret; 
-
-/* Validate the axis index, and get the count. */ 
-   if( i >= 0 && this->np && i < astGetNin( this ) ) ret = this->np[ i ];
-
-   return ret;
-
-} 
-
-static double GetPV( AstWcsMap *this, int i, int m, int *status ) { 
-/*
-*+
-*  Name:
-*     astGetPV
-
-*  Purpose:
-*     Get the value of a PVi_m attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     double astGetPV( AstWcsMap *this, int i, int m )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns the current value of a specified member of the 
-*     PV attribute array. A value of AST__BAD is returned if no value has
-*     been set for the parameter.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     i 
-*        Zero based axis index.
-*     m 
-*        Zero based parameter index.
-
-*  Returned Value:
-*     The value of the requested attribute, of AST__BAD if not set.
-
-*-
-*/
-
-/* Local Variables: */
-   double ret;
-   int npar;
-   int mxpar;       
-
-/* Initialise */
-   ret = AST__BAD;
-
-/* Check the global error status. */ 
-   if ( !astOK ) return ret; 
-
-/* Validate the axis index. */ 
-   if( i < 0 || i >= astGetNin( this ) ){ 
-      astError( AST__AXIIN, "astGetPV(%s): Axis index (%d) is invalid in "
-                "attribute PV%d_%d  - it should be in the range 1 to %d.", 
-                status, astGetClass( this ), i + 1, i + 1, m, astGetNin( this ) ); 
-
-/* Find the maximum number of parameters allowed for the axis. */
-   } else {
-      mxpar = astGetPVMax( this, i );
-
-/* Validate the parameter index. */ 
-      if( m < 0 || m > mxpar ){ 
-         astError( AST__AXIIN, "astGetPV(%s): Parameter index (%d) is invalid "
-                   "in attribute PV%d_%d for a \"%s\" projection - it should be "
-                   "in the range 0 to %d.", status, astGetClass( this ), m, i + 1, m, 
-                   FindPrjData( this->type, status )->ctype, mxpar ); 
-
-/* For latitude parameters use the values in the "params" structure which will
-   have been defaulted. */
-      } else if( i == astGetWcsAxis( this, 1 ) ) {
-         ret = (this->params).p[ m ];
-   
-/* For other axes, see if the arrays stored in the WcsMap structure extend as 
-   far as the requested parameter. If so, return the required attribute value.
-   Otherwise the AST__BAD value initialised above is retained. */
-      } else if( this->np && this->p ){ 
-         npar = this->np[ i ];
-         if( m < npar && this->p[ i ] ) ret = this->p[ i ][ m ];
-      } 
-   
-/* FITS-WCS paper II gives defaults for the first 3 longitude axis
-   parameters. The AST-specific TPN projection does not use this
-   convention since it needs all projection parameters to specify
-   correction terms. */
-      if( ret == AST__BAD && i == astGetWcsAxis( this, 0 ) &&
-          astGetWcsType( this ) != AST__TPN ) { 
-   
-/* Parameter zero has a default of zero. */
-         if( m == 0 ) { 
-            ret = 0.0;
-   
-/* Parameter one has a default equal to the native longitude of the
-   reference point of the projection, in degrees. */
-         } else if( m == 1 ) { 
-            ret = astGetNatLon( this )*AST__DR2D;
-   
-/* Parameter two has a default equal to the native latitude of the
-   reference point of the projection (in degrees). This is constant for
-   most projection, but for some (the conics) it is specified by
-   projection one on the latitude axis. */
-         } else if( m == 2 ) { 
-            ret = astGetNatLat( this )*AST__DR2D;
-         }
-      }
-   }
-
-   return ret;
-
-} 
-
-static int GetPVMax( AstWcsMap *this, int i, int *status ) { 
-/*
-*+
-*  Name:
-*     astGetPVMax
-
-*  Purpose:
-*     Get the maximum projection parameter index for a WcsMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int astGetPVMax( AstWcsMap *this, int i )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns the largest legal projection parameter index
-*     for a specified axis of the given WcsMap (i.e. the largest value of
-*     "m" in the attribute "PVi_m").
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     i 
-*        Zero based axis index.
-
-*  Returned Value:
-*     The largest legal projection parameter index, or -1 if no
-*     projection parameters are allowed on the specified axis.
-
-*-
-*/
-
-/* Local Variables: */
-   int mxpar;       
-
-/* Initialise */
-   mxpar = 0;
-
-/* Check the global error status. */ 
-   if ( !astOK ) return -1; 
-
-/* Validate the axis index. */ 
-   if( i < 0 || i >= astGetNin( this ) ){ 
-      astError( AST__AXIIN, "astGetPVMax(%s): Axis index (%d) is invalid in "
-                "attribute PVMax(%d)  - it should be in the range 1 to %d.", 
-                status, astGetClass( this ), i + 1, i + 1, astGetNin( this ) ); 
-
-/* Find the maximum number of parameters allowed for the axis. */
-   } else if( i == astGetWcsAxis( this, 0 ) ) {
-      mxpar = astSizeOf( this->params.p2 )/sizeof( double );
-
-   } else if( i == astGetWcsAxis( this, 1 ) ) {
-      mxpar = astSizeOf( this->params.p )/sizeof( double );
-
-   }
-
-/* The mxpar variable holds the max number of parameters. Return the the
-   largest legal parameter index (one less than the max number of
-   parameters). */
-   return mxpar - 1;
-}
-
-static void InitPrjPrm( AstWcsMap *this, int *status ) {
-/*
-*  Name:
-*     InitPrjPrm
-
-*  Purpose:
-*     Initialise the WcsLib PrjPrm structure, assigning default values for 
-*     missing parameters.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void InitPrjPrm( AstWcsMap *this, int *status )
-
-*  Description:
-*     This function initializes the projection parameter information
-*     stored within the WcsLib AstPrjPrm structure associated with the 
-*     supplied WcsMap. Default values are assigned to any unspecified 
-*     parameter values. AST__BAD values are assigned if any parameters
-*     have not been supplied for which there is no default.
-
-*  Parameters:
-*     this 
-*        The WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-
-/* Local Variables: */
-   struct AstPrjPrm *params;     /* The AstPrjPrm structure from the WcsMap */
-   int i;                        /* Loop index */
-   int latax;                    /* Index of latitude axis */
-   int lonax;                    /* Index of longitude axis */
-   int npar;                     /* No. of parameters supplied */
-   int plen;                     /* Length of params array */
-   int plen2;                    /* Length of latitude params array */
-   int type;                     /* Projection type */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the AstPrjPrm structure*/
-   params = &(this->params);
-
-/* Tell the routines within the WcsLib "proj.c" module  to re-calculate
-   intermediate values. */
-   params->flag = 0;
-   params->r0 = 0;
-
-/* Find the max number of projection parameters associated with each
-   axis.*/
-   plen2 = astSizeOf( params->p2 )/sizeof( double );
-   plen = astSizeOf( params->p )/sizeof( double );
-
-/* Initially set all parameter to AST__BAD. */
-   for( i = 0; i < plen; i++ ) (params->p)[i] = AST__BAD;
-   for( i = 0; i < plen2; i++ ) (params->p2)[i] = AST__BAD;
-
-/* If the WcsMap contains any projection parameter values... */
-   if( this->np && this->p ){
-
-/* Get the index of the latitude axis. Currently, all projection
-   parameters are associated with the latitude axis (except for 
-   the TPN projection, which is a hang-over from a earlier draft of the
-   FITS-WCS paper). */
-      latax = astGetWcsAxis( this, 1 );
-
-/* Find the number of projection parameters in the WcsMap for the
-   latitude axis. */
-      npar = (this->np)[ latax ];
-      if( npar > plen ) {
-         astError( AST__INTER, "InitPrjPrm(WcsMap): Too many projection "
-                   "parameters on the latitude axis (%d > %d) (internal "
-                   "AST programming error).", status, npar, plen );
-      }
-
-/* Copy the parameters to the AstPrjPrm structure. Do not copy more than
-   can be stored in the AstPrjPrm structure. */
-      for( i = 0; i < npar && i < plen; i++ ) {
-         (params->p)[ i ] = (this->p)[ latax ][ i ];
-      }
-
-/* Do the same for the longitude axis (for the benefit of the TPN projection). */
-      lonax = astGetWcsAxis( this, 0 );
-      npar = (this->np)[ lonax ];
-
-      if( npar > plen2 ) {
-         astError( AST__INTER, "InitPrjPrm(WcsMap): Too many projection "
-                   "parameters on the longitude axis (%d > %d) (internal "
-                   "AST programming error).", status, npar, plen2 );
-      }
-
-      for( i = 0; i < npar && i < plen2; i++ ) {
-         (params->p2)[ i ] = (this->p)[ lonax ][ i ];
-      }
-
-   }
-
-/* Get the projection type. */
-   type = astGetWcsType( this );
-
-/* First supply default values for any missing projection parameters which 
-   do not default to zero. */
-   if( type == AST__SZP ){
-      if( (params->p)[ 3 ] == AST__BAD ) (params->p)[ 3 ] = 90.0;
-
-   } else if( type == AST__AIR ){
-      if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 90.0;
-
-   } else if( type == AST__CYP ){
-      if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 1.0;
-      if( (params->p)[ 2 ] == AST__BAD ) (params->p)[ 2 ] = 1.0;
-
-   } else if( type == AST__CEA ){
-      if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 1.0;
-
-   } else if( type == AST__TPN ){
-      if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 1.0;
-      if( (params->p2)[ 1 ] == AST__BAD ) (params->p2)[ 1 ] = 1.0;
-
-   } else if( type == AST__HPX ){
-      if( (params->p)[ 1 ] == AST__BAD ) (params->p)[ 1 ] = 4.0;
-      if( (params->p)[ 2 ] == AST__BAD ) (params->p)[ 2 ] = 3.0;
-
-   } 
-
-/* Now use a default value of zero for any remaining unspecified values,
-   except for un-defaultable projection parameters. */
-   for( i = 0; i < plen; i++ ){
-
-/* Retain any AST__BAD value for these undefaultable parameters. */
-      if( i == 1 && ( type == AST__BON || 
-                     type == AST__COP || type == AST__COE || 
-                     type == AST__COD || type == AST__COO ) ){
-
-/* Use a default of zero for all other parameters. */
-      } else {
-         if( (params->p)[ i ] == AST__BAD ) (params->p)[ i ] = 0.0;
-      }
-   }
-
-/* Do the same for the latitude projection parameters (if any) */
-   for( i = 0; i < plen2; i++ ){
-      if( i == 1 && ( type == AST__BON || 
-                      type == AST__COP || type == AST__COE || 
-                      type == AST__COD || type == AST__COO ) ){
-      } else {
-         if( (params->p2)[ i ] == AST__BAD ) (params->p2)[ i ] = 0.0;
-      }
-   }
-}
-
-void astInitWcsMapVtab_(  AstWcsMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitWcsMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a WcsMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void astInitWcsMapVtab( AstWcsMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     WcsMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the WcsMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAWcsMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearPV = ClearPV;
-   vtab->GetNatLat = GetNatLat;
-   vtab->GetNatLon = GetNatLon;
-   vtab->GetPV = GetPV;
-   vtab->GetWcsAxis = GetWcsAxis;
-   vtab->GetPVMax = GetPVMax;
-   vtab->GetWcsType = GetWcsType;
-   vtab->SetPV = SetPV;
-   vtab->TestPV = TestPV;
-   vtab->IsZenithal = IsZenithal;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-   parent_mapsplit = mapping->MapSplit;
-   mapping->MapSplit = MapSplit;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-
-/* Declare the destructor and copy constructor. */
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-
-/* Declare the class dump function. */
-   astSetDump( vtab, Dump, "WcsMap", "FITS-WCS sky projection" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int IsZenithal( AstWcsMap *this, int *status ){
-/*
-*+
-*  Name:
-*     IsZenithal
-
-*  Purpose:
-*     Determine if this WcsMap represents a zenithal projection.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int IsZenithal( AstWcsMap *this, int *status )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns a flag indicating if this WcsMap is a zenithal
-*     projection. Some projections which are classed as zenithal in the
-*     Calabretta and Greisen paper are only genuinely zenithal if the
-*     projection parameters have certain values. These projections are
-*     not considered to be zenithal unless the projection parameters have
-*     appropriate values. 
-
-*  Parameters:
-*     this
-*        The WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A non-zero value if the WcsMap represents a zenithal projection.
-
-*-
-*/
-
-/* Local Variables: */
-   double p1;                    /* PVi_1 */
-   double p2;                    /* PVi_2 */
-   double p3;                    /* PVi_3 */
-   int latax;                    /* Index of latitude axis */
-   int ret;                      /* Returned flag */
-   int type;                     /* Projection type */
-
-/* Initialise the returned value. */
-   ret = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return ret;
-
-/* Get the projection type. */
-   type = astGetWcsType( this );
-
-/* Get the index of the latitude axis. */
-   latax = astGetWcsAxis( this, 1 );
-
-/* The following are always zenithal... */
-   if( type == AST__TAN  || type == AST__STG  || type == AST__ARC  || 
-       type == AST__ZPN  || type == AST__ZEA  || type == AST__AIR ||
-       type == AST__TPN ) {
-      ret = 1;
-
-/* The following are sometimes zenithal... */
-   } else if( type == AST__AZP ) {
-      p2 = astGetPV( this, latax, 2 );
-      if( p2 == AST__BAD || p2 == 0.0 ) ret = 1;
-
-   } else if( type == AST__SIN ) {
-      p1 = astGetPV( this, latax, 1 );
-      p2 = astGetPV( this, latax, 2 );
-      if( p1 == AST__BAD ) p1 = 0.0;
-      if( p2 == AST__BAD ) p2 = 0.0;
-      if( p1 == 0.0 && p2 == 0.0 ) ret = 1;
-
-   } else if( type == AST__SZP ) {
-      p3 = astGetPV( this, latax, 2 );
-      if( p3 == AST__BAD ) p3 = 90.0;
-      if( p3 == 90.0 || p3 == -90.0 ) ret = 1; 
-
-   }
-
-   return ret;
-}
-
-static void LongRange( const PrjData *prjdata, struct AstPrjPrm *params,
-                       double *high, double *low, int *status ){
-/*
-*
-*  Name:
-*     LongRange
-
-*  Purpose:
-*     See if primary range of longitude produced by a WCSLIB mapping is
-*     [0,360] or [-180,+180].
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void LongRange( const PrjData *prjdata, struct AstPrjPrm *params,
-*                     double *high, double *low, int *status )
-
-*  Class Membership:
-*     WcsMap internal utility function.
-
-*  Description:
-*     This function uses the WCSLIB library to transform the supplied input 
-*     positions.
-
-*  Parameters:
-*     prjdata
-*        A pointer to information about the mapping.
-*     params
-*        Pointer to a WCSLIB "AstPrjPrm" structure containing the projection 
-*        parameters, etc.
-*     high
-*        A pointer to a location at which is returned the upper bound of
-*        the primary longitude range.
-*     low
-*        A pointer to a location at which is returned the lower bound of
-*        the primary longitude range.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     None.
-
-*/
-
-
-/* Local Variables: */
-   int point;                    /* Loop counter for points */
-   static double xx[ 4 ] = { -1.0E-6,    0.0, 1.0E-6,     0.0 };
-   static double yy[ 4 ] = {     0.0, 1.0E-6,    0.0, -1.0E-6 };
-   double aa;
-   double bb;
-
-/* Initialise the returned values. */
-   *high = 180.0;
-   *low = -180.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Project each of the points. If any longitude value is found which is 
-   greater than 180 degrees, return [0,360] as the longitude range. */
-   for( point = 0; point < 4; point++ ){
-      if( !prjdata->WcsRev( xx[ point ], yy[ point ], params, &aa, &bb ) ){
-         if( aa > 180.0 ){
-            *high = 360.0;
-            *low = 0.0;
-            break;
-         }
-      }
-   }
-
-/* Return. */
-   return;
-
-}
-
-static int Map( AstWcsMap *this, int forward, int npoint, double *in0, 
-                double *in1, double *out0, double *out1, int *status ){
-/*
-*
-*  Name:
-*     Map
-
-*  Purpose:
-*     Transform a set of points using a function from the WCSLIB library.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int Map( AstWcsMap *this, int forward, int npoint, double *in0, 
-*              double *in1, double *out0, double *out1 )
-
-*  Class Membership:
-*     WcsMap internal utility function.
-
-*  Description:
-*     This function uses the WCSLIB library to transform the supplied input 
-*     positions.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     forward
-*        A non-zero value indicates that the forward projection from
-*        (long,lat) to (x,y) is required, while a zero value requests the 
-*        reverse transformation.
-*     npoint
-*        The number of points to transform (i.e. the size of the
-*        in0, in1, out0 and out1 arrays).
-*     in0
-*        A pointer to the input coordinate data for the 0th axis (i.e.
-*        longitude or X depending on "forward"). 
-*     in1
-*        A pointer to the input coordinate data for the 1st axis (i.e.
-*        latitude or Y depending on "forward"). 
-*     out0
-*        A pointer to the returned output coordinate data for the 0th axis 
-*        (i.e. X or longitude depending on "forward"). 
-*     out1
-*        A pointer to the returned output coordinate data for the 1st axis 
-*        (i.e. Y or latitude depending on "forward"). 
-
-*  Returned Value:
-*     The status value: 0 - Success
-*                       1 - Unrecognised projection type
-*                       2 - Invalid projection parameters values.
-*                       4 - Error existed on entry
-*                       100 - 399: Longitude axis projection parameter 
-*                           (status-100) not supplied.
-*                       400 - 699: Latitude axis projection parameter 
-*                           (status-400) not supplied.
-
-
-*  Notes:
-*     -  This function does not report any errors. Reporting of suitable
-*     error messages is the responsibility of the calling function. 
-*     -  The value 4 will be returned if this function is invoked with the
-*     global error status set. 
-*
-*/
-
-/* Local Variables: */
-   struct AstPrjPrm *params;     /* Pointer to structure holding WCSLIB info */
-   const PrjData *prjdata;       /* Information about the projection */
-   double latitude;              /* Latitude value in degrees */
-   double longitude;             /* Longitude value in degrees */
-   double longhi;                /* Upper longitude limit in degrees */
-   double longlo;                /* Lower longitude limit in degrees */
-   double x;                     /* X Cartesian coordinate in degrees */
-   double y;                     /* Y Cartesian coordinate in degrees */
-   int i;                        /* Loop count */
-   int plen;                     /* Length of proj par array */
-   int point;                    /* Loop counter for points */
-   int wcs_status;               /* Status from WCSLIB functions */
-   int type;                     /* Projection type */
-
-/* Check the global error status. */
-   if ( !astOK ) return 4;
-
-/* Initialise variables to avoid compiler warnings. */
-   longlo = AST__BAD;
-   longhi = AST__BAD;
-
-/* Store the projection type. */
-   type = astGetWcsType( this );
-
-/* Get information about the projection. */
-   prjdata = FindPrjData( type, status );
-
-/* Return if there are no WcsLib mapping functons associated with the
-   projection. */
-   if( ( !prjdata->WcsFwd && forward ) ||
-       ( !prjdata->WcsRev && !forward ) ) return 1;
-
-/* Check that all necessary projection parameters have been supplied, or
-   can be defaulted. */
-   params = &(this->params);
-   plen = astSizeOf( params->p )/sizeof( double );
-   for( i = 0; i < plen; i++ ) {
-      if( ( params->p)[ i ] == AST__BAD ) return 400+i;
-   }
-
-/* If we are doing a reverse mapping, get the acceptable range of longitude
-   values. */
-   if( !forward ) LongRange( prjdata, params, &longhi, &longlo, status );
-
-/* Loop to apply the projection to each point in turn, checking for
-   (and propagating) bad values in the process. */
-   for ( point = 0; point < npoint; point++ ) {
-       if ( in0[ point ] == AST__BAD ||
-           in1[ point ] == AST__BAD ){
-          out0[ point ] = AST__BAD;
-          out1[ point ] = AST__BAD;
-       } else {
-
-/* First deal with forward projection calls */
-         if ( forward ){
-
-/* The input coordinates are assumed to be longitude and latitude, in
-   radians (as used by SLALIB). Convert them to degrees ensuring that 
-   the longitude value is in the range [-180,180] and the latitude is 
-   in the range [-90,90] (as required by the WCSLIB library). Any point with
-   a latitude outside the range [-90,90] is converted to the equivalent
-   point on the complementary meridian. */
-            latitude = AST__DR2D*palSlaDrange(  in1[ point ] );  
-            if ( latitude > 90.0 ){
-               latitude = 180.0 - latitude;
-               longitude = AST__DR2D*palSlaDrange( AST__DPI + in0[ point ] );
-
-            } else if ( latitude < -90.0 ){
-               latitude = -180.0 - latitude;
-               longitude = AST__DR2D*palSlaDrange( AST__DPI + in0[ point ] );
-
-            } else {
-               longitude = AST__DR2D*palSlaDrange( in0[ point ] );
-            }
-
-/* Call the relevant WCSLIB forward projection function. */
-            wcs_status = prjdata->WcsFwd( longitude, latitude, params, &x, &y );
-
-/* Store the returned Cartesian coordinates, converting them from degrees 
-   to radians. If the position could not be projected, use the value
-   AST__BAD.  Abort for any other bad status. */
-            if( wcs_status == 0 ){
-               out0[ point ] = AST__DD2R*x; 
-               out1[ point ] = AST__DD2R*y; 
-
-            } else if( wcs_status == 1 ){
-               return 2;
-
-            } else if( wcs_status == 2 ){
-               out0[ point ] = AST__BAD; 
-               out1[ point ] = AST__BAD; 
-
-            } else {
-               return wcs_status;
-            }
-
-/* Now deal with reverse projection calls */
-         } else {
-
-/* Convert the supplied Cartesian coordinates from radians to degrees. */
-            x = AST__DR2D*in0[ point ];
-            y = AST__DR2D*in1[ point ];
-
-/* Call the relevant WCSLIB reverse projection function. */
-            wcs_status = prjdata->WcsRev( x, y, params, &longitude, &latitude ); 
-
-/* Store the returned longitude and latitude, converting them from degrees 
-   to radians. Many projections (ARC, AIT, ZPN, etc) are not cyclic (i.e.
-   [long,lat]=[0,0] does not get mapped to the same place as 
-   [long,lat]=[360,0] ). Only accept values in the primary longitude or 
-   latitude ranges. This avoids (x,y) points outside the physical domain 
-   of the mapping being assigned valid (long,lat) values. */
-            if( wcs_status == 0 ){
-               if( longitude <= longhi && longitude >= longlo &&
-                   fabs( latitude ) <= 90.0 ){
-
-/* Assign zero longitude to positions very close to a pole. */
-                  if( fabs( latitude ) > 89.999998 ) longitude = 0.0; 
-
-                  out0[ point ] = AST__DD2R*longitude; 
-                  out1[ point ] = AST__DD2R*latitude; 
-
-               } else {
-                  out0[ point ] = AST__BAD; 
-                  out1[ point ] = AST__BAD; 
-               }
-
-/* Abort if projection parameters were unusable. */
-            } else if( wcs_status == 1 ){
-               return 2;
-
-/* If the position could not be projected, use the value AST__BAD. */
-            } else if( wcs_status == 2 ){
-               out0[ point ] = AST__BAD; 
-               out1[ point ] = AST__BAD; 
-
-/* Abort if projection parameters were not supplied. */
-            } else {
-               return wcs_status;
-            }
-
-         }
-
-      }
-
-   }      
-
-   return 0;
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     WcsMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated WcsMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated WcsMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated WcsMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the WcsMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        WcsMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated WcsMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *mc[2];    /* Copies of supplied Mappings to swap */
-   AstMapping *neighbour; /* Pointer to neighbouring Mapping */
-   AstMapping *smc0;     /* Simplied Mapping */
-   AstMapping *smc1;     /* Simplied Mapping */
-   const char *nclass;   /* Pointer to neighbouring Mapping class */
-   const char *class1;   /* Pointer to first Mapping class string */
-   const char *class2;   /* Pointer to second Mapping class string */
-   int do1;              /* Would a backward swap make a simplification? */
-   int do2;              /* Would a forward swap make a simplification? */
-   int i1;               /* Lower index of the two WcsMaps being merged */
-   int i2;               /* Upper index of the two WcsMaps being merged */
-   int i;                /* Mapping index */
-   int ic[2];            /* Copies of supplied invert flags to swap */
-   int merge;            /* Can WcsMap merge with a neighbour? */
-   int nin;              /* Number of coordinates for WcsMap */
-   int nstep1;           /* No. of Mappings backwards to next mergable Mapping */
-   int nstep2;           /* No. of Mappings forward to next mergable Mapping */
-   int result;           /* Result value to return */
-   int swaphi;           /* Can WcsMap be swapped with higher neighbour? */
-   int swaplo;           /* Can WcsMap be swapped with lower neighbour? */
-   int type;             /* Projection type */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   i1 = 0;
-   i2 = 0;
-
-/* Get the number of axes for the WcsMap. */
-   nin = astGetNin( ( *map_list )[ where ] );
-
-/* First of all, see if the WcsMap can be replaced by a simpler Mapping,
-   without reference to the neighbouring Mappings in the list.           */
-/* ======================================================================*/
-/* WcsMaps with map type of AST__WCSBAD are equivalent to a UnitMap. */
-   type = astGetWcsType( this );
-   if( type == AST__WCSBAD ){
-
-/* Annul the WcsMap pointer in the list and replace it with a UnitMap
-   pointer, and indicate that the forward transformation of the returned
-   UnitMap should be used. */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) astUnitMap( nin, "", status );
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-
-/* If the WcsMap itself could not be simplified, see if it can be merged
-   with the Mappings on either side of it in the list. This can only be
-   done in series for a WcsMap. */
-/* ===================================================================== */
-   } else if( series && *nmap > 1 ) {
-
-/* Store the classes of the neighbouring Mappings in the list. */
-      class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
-      class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* A WcsMap can only combine with its own inverse. Set a flag indicating
-   that we have not yet found a neighbour with which the WcsMap can be
-   merged. */
-      merge = 0;
-
-/* First check the lower neighbour (if any). */
-      if( where > 0 ) {
-         i1 = where - 1;
-         i2 = where;
-         neighbour = ( *map_list )[ i1 ];
-         merge = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
-                           ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
-      }
-
-/* If the WcsMap can not be merged with its lower neighbour, check its
-   upper neighbour (if any) in the same way. */
-      if( !merge && where < *nmap - 1 ) {
-         i1 = where;
-         i2 = where + 1;
-         neighbour = ( *map_list )[ i2 ];
-         merge = CanMerge( ( *map_list )[ i1 ], (* invert_list)[ i1 ],
-                           ( *map_list )[ i2 ], (* invert_list)[ i2 ], status );
-      }
-
-/* If either neighbour has passed these checks, it is the inverse of the 
-   WcsMap being checked. The pair of WcsMaps can be replaced by a single
-   UnitMap. */
-      if( merge ) {
-
-/* Annul the two WcsMaps. */
-         (void) astAnnul( ( *map_list )[ i1 ] );
-         (void) astAnnul( ( *map_list )[ i2 ] );
-
-/* Create a UnitMap, and store a pointer for it in place of the first 
-   WcsMap. */
-         ( *map_list )[ i1 ] = (AstMapping *) astUnitMap( nin, "", status );
-         ( *invert_list )[ i1 ] = 0;
-
-/* Shuffle down the remaining Mappings to fill the hole left by the
-   second WcsMap. */
-         for ( i = i2 + 1; i < *nmap; i++ ) {
-            ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-            ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-         }
-
-/* Clear the vacated element at the end. */
-         ( *map_list )[ *nmap - 1 ] = NULL;
-         ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         (*nmap)--;
-         result = i1;
-
-/* If the WcsMap could not merge directly with either of its neighbours,
-   we consider whether it would be worthwhile to swap the WcsMap with
-   either of its neighbours. This can only be done for certain PermMaps, 
-   and will usually require both Mappings to be modified (unless they are 
-   commutative). The advantage of swapping the order of the Mappings is that 
-   it may result in the WcsMap being adjacent to a Mapping with which it can 
-   merge directly on the next invocation of this function, thus reducing the 
-   number of Mappings in the list. */
-      } else {
-
-/* Set a flag if we could swap the WcsMap with its higher neighbour. "do2"
-   is returned if swapping the Mappings would simplify either of the
-   Mappings. */
-         if( where + 1 < *nmap ){
-            swaphi = CanSwap(  ( *map_list )[ where ], 
-                               ( *map_list )[ where + 1 ],
-                               ( *invert_list )[ where ], 
-                               ( *invert_list )[ where + 1 ], &do2, status );
-         } else {
-            do2 = 0;
-            swaphi = 0;
-         }
-
-/* If so, step through each of the Mappings which follow the WcsMap, 
-   looking for a Mapping with which the WcsMap could merge directly. Stop 
-   when such a Mapping is found, or if a Mapping is found with which the
-   WcsMap could definitely not swap. Note the number of Mappings which 
-   separate the WcsMap from the Mapping with which it could merge (if 
-   any). */
-         nstep2 = -1;
-         if( swaphi ){
-            for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we can merge with this Mapping. If so, note the number of steps
-   between the two Mappings and leave the loop. */
-               if( CanMerge( ( *map_list )[ i2 ], ( *invert_list )[ i2 ],
-                             ( *map_list )[ where ], ( *invert_list )[ where ], status ) ) {
-                  nstep2 = i2 - where - 1;
-                  break;
-               }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop 
-   with -1 for the number of steps to indicate that no merging is possible. 
-   WcsMaps can swap only with some PermMaps. */
-               nclass = astGetClass( ( *map_list )[ i2 ] );
-               if( strcmp( nclass, "PermMap" ) ) {
-                  break;
-               }
-
-            }
-
-         }
-
-/* Do the same working forward from the WcsMap towards the start of the map
-   list. */
-         if( where > 0 ){
-            swaplo = CanSwap(  ( *map_list )[ where - 1 ], 
-                               ( *map_list )[ where ],
-                               ( *invert_list )[ where - 1 ], 
-                               ( *invert_list )[ where ], &do1, status );
-         } else {
-            do1 = 0;
-            swaplo = 0;
-         }
-
-         nstep1 = -1;
-         if( swaplo ){
-            for( i1 = where - 1; i1 >= 0; i1-- ){
-
-               if( CanMerge( ( *map_list )[ i1 ], ( *invert_list )[ i1 ],
-                             ( *map_list )[ where ], ( *invert_list )[ where ], status ) ) {
-                  nstep1 = where - 1 - i1;
-                  break;
-               }
-
-               nclass = astGetClass( ( *map_list )[ i1 ] );
-               if( strcmp( nclass, "PermMap" ) ) {
-                  break;
-               }
-
-            }
-
-         }
-
-/* Choose which neighbour to swap with so that the WcsMap moves towards the
-   nearest Mapping with which it can merge. */
-         if( do1 || ( 
-             nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ) ){
-            nclass = class1;
-            i1 = where - 1;
-            i2 = where;
-         } else if( do2 || nstep2 != -1 ){
-            nclass = class2;
-            i1 = where;
-            i2 = where + 1;
-         } else {
-            nclass = NULL;
-         }
-
-/* If there is a target Mapping in the list with which the WcsMap could 
-   merge, replace the supplied Mappings with swapped Mappings to bring a
-   WcsMap closer to the target Mapping. */
-         if( nclass ){
-
-            WcsPerm( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
-/* Store the index of the first modified Mapping. */
-            result = i1;
-
-/* If there is no Mapping available for merging, it may still be
-   advantageous to swap with a neighbour because the swapped Mapping may
-   be simpler than the original Mappings. */
-         } else if( swaphi || swaplo ) {
-
-/*  Choose a neightbour to swap with. If both are suitable for swapping,
-    swap with the lower. */
-            if( swaplo ){
-               nclass = class1;
-               i1 = where - 1;
-               i2 = where;
-            } else {
-               nclass = class2;
-               i1 = where;
-               i2 = where + 1;
-            }
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change 
-   the supplied values. */
-            mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
-            mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
-            ic[ 0 ] = ( (*invert_list) + i1 )[0];
-            ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
-            WcsPerm( mc, ic, where - i1, status );
-
-/* If neither of the swapped Mappings can be simplified further, then there
-   is no point in swapping the Mappings, so just annul the map copies. */
-            smc0 = astSimplify( mc[0] );
-            smc1 = astSimplify( mc[1] );
-
-            if( astGetClass( smc0 ) == astGetClass( mc[0] ) &&
-                astGetClass( smc1 ) == astGetClass( mc[1] ) ) {
-
-               mc[ 0 ] = (AstMapping *) astAnnul( mc[ 0 ] );
-               mc[ 1 ] = (AstMapping *) astAnnul( mc[ 1 ] );
-
-/* If one or both of the swapped Mappings could be simplified, then annul
-   the supplied Mappings and return the swapped mappings, storing the index 
-   of the first modified Mapping. */
-            } else {
-               (void ) astAnnul( ( (*map_list) + i1 )[0] );
-               (void ) astAnnul( ( (*map_list) + i1 )[1] );
-
-               ( (*map_list) + i1 )[0] = mc[ 0 ];
-               ( (*map_list) + i1 )[1] = mc[ 1 ];
-
-               ( (*invert_list) + i1 )[0] = ic[ 0 ];
-               ( (*invert_list) + i1 )[1] = ic[ 1 ];
-
-               result = i1;
-
-            }
-
-/* Annul the simplied Mappings */
-            smc0 = astAnnul( smc0 );
-            smc1 = astAnnul( smc1 );
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     WcsMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing WcsMap. This is only possible if the specified inputs
-*     correspond to some subset of the WcsMap outputs. That is, there
-*     must exist a subset of the WcsMap outputs for which each output
-*     depends only on the selected WcsMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied WcsMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap to be split (the WcsMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied WcsMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied WcsMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied WcsMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstWcsMap *newwcs;         /* Pointer to returned WcsMap */
-   AstWcsMap *this;           /* Pointer to WcsMap structure */
-   int *result;               /* Pointer to returned array */
-   int *inperm;               /* Input axis permutation array */
-   int *outperm;              /* Output axis permutation array */
-   int i;                     /* Loop count */
-   int iin;                   /* Mapping input index */
-   int ilat;                  /* Index of latitude axis in new WcsMap */
-   int ilatlon;               /* Index of last lat or lon axis */
-   int ilon;                  /* Index of longitude axis in new WcsMap */
-   int latax;                 /* Index of latitude axis in supplied WcsMap */
-   int lonax;                 /* Index of longitude axis in supplied WcsMap */
-   int mnin;                  /* No. of Mapping inputs */
-   int ok;                    /* Are input indices OK? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the parent astMapSplit method to see if it can do the job. */
-   result = (*parent_mapsplit)( this_map, nin, in, map, status );
-
-/* If not, we provide a special implementation here. */
-   if( !result ) {
-
-/* Get a pointer to the WcsMap structure. */
-      this = (AstWcsMap *) this_map;
-
-/* Prevent compiler warnings. */
-      ilatlon = -1;
-
-/* Allocate memory for the returned array. */
-      result = astMalloc( sizeof( int )*(size_t) nin );
-      if( astOK ) {
-
-/* Get the indices of the longitude and latitude axes in the WcsMap */
-         lonax = astGetWcsAxis( this, 0 );
-         latax = astGetWcsAxis( this, 1 );
-
-/* See if the selected axes include the longitude and/or latitude axis.
-   At the same time check the axis indices are ok, and set up the output 
-   axis array. */
-         ilat = -1;
-         ilon = -1;
-         mnin = astGetNin( this );
-         ok = 1;
-         for( i = 0; i < nin; i++ ) {
-            iin = in[ i ];
-            if( iin < 0 || iin >= mnin ) {
-               ok = 0;
-               break;
-            } else if( iin == lonax ) {
-               ilon = i;
-               ilatlon = i;
-            } else if( iin == latax ) {
-               ilat = i;
-               ilatlon = i;
-            }
-            result[ i ] = iin;
-         }
-
-/* If any of the input indices were invalid, free the returned array. */
-         if( !ok ) {
-            result = astFree( result );   
-
-/* If both longitude and latitude axes are selected, then the returned Mapping 
-   is a WcsMap. Create one based on the supplied WcsMap. */
-         } else if( ilat != -1 && ilon != -1 ) {
-            newwcs = astWcsMap( nin, astGetWcsType( this ), ilon + 1, ilat + 1,
-                                "", status );
-            CopyPV( this, newwcs, status );
-            astSetInvert( newwcs, astGetInvert( this ) );
-            *map = (AstMapping *) newwcs;
-
-/* If neither the longitude nor the latitude axis has been selected, then 
-   the returned Mapping is a UnitMap. */
-         } else if( ilat == -1 && ilon == -1 ) {
-            *map = (AstMapping *) astUnitMap( nin, "", status );
-
-/* If only one of the latitude and longitude axes was selected we remove
-   it from the returned Mapping (a PermMap) and list of outputs */
-         } else if( nin > 1 ) {
-            
-            for( i = ilatlon; i < nin - 1; i++ ) {
-               result[ i ] = result[ i + 1 ];
-            }
-            result[ i ] = -1;
-
-            inperm = astMalloc( sizeof( int )*(size_t) nin );
-            outperm = astMalloc( sizeof( int )*(size_t) ( nin - 1 ) );
-            if( outperm ) {
-               for( i = 0; i < ilatlon; i++ ) {
-                  inperm[ i ] = i;
-                  outperm[ i ] = i;
-               }
-               inperm[ ilatlon ] = INT_MAX;
-               for( i = ilatlon + 1; i < nin; i++ ) {
-                  inperm[ i ] = i - 1;
-                  outperm[ i - 1 ] = i;
-               }
-
-               *map = (AstMapping *) astPermMap( nin, inperm, nin - 1, outperm, NULL, " ", status );
-
-            }
-            inperm = astFree( inperm );
-            outperm = astFree( outperm );
-
-         } else {
-            result = astFree( result );   
-         }
-      }
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-                     double **consts, int *status ){
-/*
-*  Name:
-*     PermGet
-
-*  Purpose:
-*     Get the axis permutation and constants array for a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-*                   double **const, int *status )
-
-*  Class Membership:
-*     WcsMap member function 
-
-*  Description:
-*     This function returns axis permutation and constants arrays which can
-*     be used to create a PermMap which is equivalent to the supplied PermMap.
-
-*  Parameters:
-*     map
-*        The PermMap.
-*     outperm
-*        An address at which to return a popinter to an array of ints
-*        holding the output axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     inperm
-*        An address at which to return a popinter to an array of ints
-*        holding the input axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     consts
-*        An address at which to return a popinter to an array of doubles
-*        holding the constants array. The array should be released using 
-*        astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  NULL pointers are returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* PointSet holding input positions for PermMap */
-   AstPointSet *pset2;       /* PointSet holding output positions for PermMap */
-   double **ptr1;            /* Pointer to pset1 data */
-   double **ptr2;            /* Pointer to pset2 data */
-   double *cnst;             /* Pointer to constants array */
-   double cn;                /* Potential new constant value */
-   double ip;                /* Potential output axis index */
-   double op;                /* Potential input axis index */
-   int *inprm;               /* Pointer to input axis permutation array */
-   int *outprm;              /* Pointer to output axis permutation array */
-   int i;                    /* Axis count */
-   int nc;                   /* Number of constants stored so far */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
-   if( outperm ) *outperm = NULL;
-   if( inperm ) *inperm = NULL;
-   if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
-   if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   nc = 0;
-
-/* Get the number of input and output axes for the supplied PermMap. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
-   outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
-   inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
-   cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
-   *outperm = outprm;
-   *inperm = inprm;
-   *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
-   input and output positions with the PermMap. */
-   pset1 = astPointSet( 2, nin, "", status );
-   pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
-   first position is used to enumerate the axes, and the second is used to 
-   check for constant axis values. */
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ){
-      for( i = 0; i < nin; i++ ){
-         ptr1[ i ][ 0 ] = ( double ) i;
-         ptr1[ i ][ 1 ] = -1.0;
-      }
-   }
-
-/* Use the PermMap to transform these positions in the forward direction. */
-   (void) astTransform( map, pset1, 1, pset2 );
-
-/* Look at the mapped positions to determine the output axis permutation
-   array. */
-   ptr2 = astGetPoints( pset2 );
-   if( astOK ){
-
-/* No constant axis valeus found yet. */
-      nc = 0;
-
-/* Do each output axis. */
-      for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
-   of the appropriate input axis will be in the mapped first position. */
-         op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of 
-   mapping the two different input axis values will be the same. */
-         cn = ptr2[ i ][ 1 ];
-         if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
-   store the index of the constant in the output axis permutation array. */
-            cnst[ nc ] = cn;
-            outprm[ i ] = -( nc + 1 );
-            nc++;
-
-/* If the output axis values are different, then the output axis value 
-   must be copied from the input axis value. */
-         } else {
-            outprm[ i ] = (int) ( op + 0.5 );
-         }
-      }
-   }
-    
-/* Now do the same thing to determine the input permutation array. */
-   if( astOK ){
-      for( i = 0; i < nout; i++ ){
-         ptr2[ i ][ 0 ] = ( double ) i;
-         ptr2[ i ][ 1 ] = -1.0;
-      }
-   }
-
-   (void) astTransform( map, pset2, 0, pset1 );
-
-   if( astOK ){
-
-      for( i = 0; i < nin; i++ ){
-
-         ip = ptr1[ i ][ 0 ];
-         cn = ptr1[ i ][ 1 ];
-         if( ip == cn ) {
-
-            cnst[ nc ] = cn;
-            inprm[ i ] = -( nc + 1 );
-            nc++;
-
-         } else {
-            inprm[ i ] = (int) ( ip + 0.5 );
-         }
-      }
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
-   if( !astOK ) {
-      *outperm = (int *) astFree( (void *) *outperm );
-      *inperm = (int *) astFree( (void *) *inperm );
-      *consts = (double *) astFree( (void *) *consts );
-   }
-
-/* Return. */
-   return;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     WcsMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a WcsMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstWcsMap *this;              /* Pointer to the WcsMap structure */
-   double dval;                  /* Attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-   int i;                        /* Axis index */
-   int m;                        /* Projection parameter number */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the WcsMap structure. */
-   this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* ProjP(i). */
-/* --------- */
-   if ( nc = 0, ( 2 == astSscanf( setting, "projp(%d)= %lg %n", &m, &dval, &nc ) ) 
-                  && ( nc >= len ) ) {
-      astSetPV( this, astGetWcsAxis( this, 1 ), m, dval );
-
-/* PV. */
-/* --- */
-   } else if ( nc = 0, ( 3 == astSscanf( setting, "pv%d_%d= %lg %n", &i, &m, &dval, &nc ) )
-                  && ( nc >= len ) ) {
-      astSetPV( this, i - 1, m, dval );
-
-/* Define macros to see if the setting string matches any of the
-   read-only attributes of this class. */
-#define MATCH(attrib) \
-        ( nc = 0, ( 0 == astSscanf( setting, attrib "=%*[^\n]%n", &nc ) ) && \
-                  ( nc >= len ) )
-
-#define MATCH2(attrib) \
-        ( nc = 0, ( 1 == astSscanf( setting, attrib "(%d)=%*[^\n]%n", &i, &nc ) ) && \
-                  ( nc >= len ) )
-
-/* If the attribute was not recognised, use this macro to report an error
-   if a read-only attribute has been specified. */
-   } else if ( MATCH( "wcstype" ) ||
-        MATCH( "natlat" ) ||
-        MATCH( "natlon" ) ||
-        MATCH2( "wcsaxis" ) ) {
-      astError( AST__NOWRT, "astSet: The setting \"%s\" is invalid for a %s.", status,
-                setting, astGetClass( this ) );
-      astError( AST__NOWRT, "This is a read-only attribute." , status);
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-
-/* Undefine macros local to this function. */
-#undef MATCH
-#undef MATCH2
-}
-
-static void SetPV( AstWcsMap *this, int i, int m, double val, int *status ) { 
-/*
-*+
-*  Name:
-*     astSetPV
-
-*  Purpose:
-*     Set the value of a PVi_m attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void astSetPV( AstWcsMap *this, int i, int m, double val )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function stores a value for the specified member of the PV 
-*     attribute array. 
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     i 
-*        Zero based axis index.
-*     m 
-*        Zero based parameter index.
-
-*-
-*/
-/* Local Variables: */
-   int naxis;       /* No. of axes in WcsMap */
-   int mm;          /* Loop count */
-   int mxpar;       /* Max number of parameters allowed for the axis */
-
-/* Check the global error status. */ 
-   if ( !astOK ) return; 
-
-/* Find the number of axes in the WcsMap. */
-   naxis = astGetNin( this );
-
-/* Validate the axis index. */ 
-   if( i < 0 || i >= naxis ){ 
-      astError( AST__AXIIN, "astSetPV(%s): Axis index (%d) is invalid in "
-                "attribute PV%d_%d  - it should be in the range 1 to %d.", 
-                status, astGetClass( this ), i + 1, i + 1, m, naxis ); 
-
-/* Validate the parameter index. */ 
-   } else {
-      mxpar = astGetPVMax( this, i );
-      if( m < 0 || m > mxpar ){ 
-         astError( AST__AXIIN, "astSetPV(%s): Parameter index (%d) is invalid "
-                   "in attribute PV%d_%d for a \"%s\" projection - it should be "
-                   "in the range 0 to %d.", status, astGetClass( this ), m, i + 1, m, 
-                   FindPrjData( this->type, status )->ctype, mxpar ); 
-
-/* If the dynamic arrays used to hold the parameters have not yet been
-   created, create them now, and store pointers to them in the WcsMap
-   structure. */
-      } else {
-         if( !this->np || !this->p ) {
-            this->np = (int *) astMalloc( sizeof(int)*naxis );
-            this->p = (double **) astMalloc( sizeof(double *)*naxis );
-            if( astOK ) {
-               for( mm = 0; mm < naxis; mm++ ) {
-                  this->np[ mm ] = 0;
-                  this->p[ mm ] = NULL;
-               }
-            }
-
-/* Release the dynamic arrays if an error has occurred. */
-            if( !astOK ) FreePV( this, status );
-
-         }
-      }
-
-/* Check we can use the arrays. */
-      if( astOK ) {
-
-/* Ensure the dynamic array used to hold parameter values for the
-   specified axis is big enough to hold the specified parameter. */
-         this->p[ i ] = (double *) astGrow( (void *) this->p[ i ],
-                                            m + 1, sizeof(double) );
-
-/* Check we can use this array. */
-         if( astOK ) {
-
-/* Store the supplied value in the relevant element of this array. */
-            this->p[ i ][ m ] = val;
-
-/* If the array was extended to hold this parameter... */
-            if( this->np[ i ] <= m ) {
-
-/* Fill any other new elements in this array with AST__BAD */
-               for( mm = this->np[ i ]; mm < m; mm++ ) this->p[ i ][ mm ] = AST__BAD;
-
-/* Remember the new array size. */
-               this->np[ i ] = m + 1;
-            }
-         }
-      }   
-   }
-
-/* Re-initialize the values stored in the "AstPrjPrm" structure. */
-   InitPrjPrm( this, status );
-} 
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     WcsMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a WcsMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWcsMap *this;             /* Pointer to the WcsMap structure */
-   int i;                       /* Axis index */
-   int m;                       /* Projection parameter index */
-   int len;                     /* Length os supplied string */
-   int nc;                      /* No. of characters read by astSscanf */
-   int result;                  /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the WcsMap structure. */
-   this = (AstWcsMap *) this_object;
-
-/* Obtain the length of the attrib string. */
-   len = strlen( attrib );
-
-/* Check the attribute name and test the appropriate attribute. */
-
-
-/* ProjP(i). */
-/* --------- */
-   if ( nc = 0, ( 1 == astSscanf( attrib, "projp(%d)%n", &m, &nc ) )
-                  && ( nc >= len ) ) {
-      result = astTestPV( this, astGetWcsAxis( this, 1 ), m );
-
-/* PV. */
-/* --- */
-   } else if ( nc = 0, ( 2 == astSscanf( attrib, "pv%d_%d%n", &i, &m, &nc ) )
-                  && ( nc >= len ) ) {
-      result = astTestPV( this, i - 1, m );
-
-/* If the name is not recognised, test if it matches any of the
-   read-only attributes of this class. If it does, then return
-   zero. */
-   } else if ( !strcmp( attrib, "wcstype" ) ||
-               !strcmp( attrib, "natlat" ) ||
-               !strcmp( attrib, "natlon" ) ||
-               ( nc = 0, ( 1 == astSscanf( attrib, "wcsaxis(%d)%n", &i, &nc ) )
-                           && ( nc >= len ) ) ) {
-      result = 0;
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static int TestPV( AstWcsMap *this, int i, int m, int *status ) { 
-/*
-*+
-*  Name:
-*     astTestPV
-
-*  Purpose:
-*     Test a PVi_m attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int astTestPV( AstWcsMap *this, int i, int m )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns 1 if a specified member of the PV attribute 
-*     array is currently set, and 0 otherwise.
-
-*  Parameters:
-*     this 
-*        A pointer to the WcsMap.
-*     i 
-*        Zero based axis index.
-*     m 
-*        Zero based parameter index.
-
-*  Returned Value:
-*     1 if the attribute is set, 0 otherwise.
-
-*-
-*/
-/* Local Variables: */
-   int ret;
-   int npar;
-   int mxpar;       
-
-/* Initialise */
-   ret = 0;
-
-/* Check the global error status. */ 
-   if ( !astOK ) return ret; 
-
-/* Validate the axis index. */ 
-   if( i < 0 || i >= astGetNin( this ) ){ 
-      astError( AST__AXIIN, "astTestPV(%s): Axis index (%d) is invalid in "
-                "attribute PV%d_%d  - it should be in the range 1 to %d.", 
-                status, astGetClass( this ), i + 1, i + 1, m, astGetNin( this ) ); 
-
-/* Find the maximum number of parameters allowed for the axis. */
-   } else {
-      mxpar = astGetPVMax( this, i );
-
-/* Ignore unused parameters. */ 
-      if( m < 0 || m > mxpar ){ 
-
-/* See if the parameter is currently set. */
-      } else if( this->np && this->p ){ 
-         npar = this->np[ i ];
-         if( m < npar && this->p[ i ] ){
-            ret = ( this->p[ i ][ m ] != AST__BAD );
-         }
-      } 
-   }
-
-   return ret;
-} 
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*+
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a WcsMap to a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     WcsMap member function (over-rides the astTransform method inherited
-*     from the Mapping class).
-
-*  Description:
-*     This function takes a WcsMap and a set of points encapsulated in a
-*     PointSet and transforms the points using the requested projection.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data. 
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  Assuming the WcsMap has not been inverted, the forward mapping
-*     transforms spherical (longitude,latitude) pairs into Cartesian (x,y) 
-*     pairs. Longitude and latitude values are given and returned in radians, 
-*     and no restrictions are imposed on their ranges. X and Y values are 
-*     also given and returned in radians, with no restrictions imposed on 
-*     their ranges.
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the WcsMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*-
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstWcsMap *map;               /* Pointer to WcsMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   int i;                        /* Axis count */
-   int latax;                    /* Latitude axis index */
-   int lonax;                    /* Longitude axis index */
-   int npoint;                   /* Number of points */
-   int status_value;                   /* Status from Map function */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the WcsMap. */
-   map = (AstWcsMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points from the input PointSet and obtain pointers 
-   for accessing the input and output coordinate values. */
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* If a genuine FITS-WCS projection is being performed... */
-   if( astGetWcsType( map ) != AST__WCSBAD ){
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-      if ( astGetInvert( map ) ) forward = !forward;
-
-/* Do the coordinate transformation. */
-      lonax = astGetWcsAxis( map, 0 );
-      latax = astGetWcsAxis( map, 1 );
-      status_value = Map( map, forward, npoint, ptr_in[ lonax ], ptr_in[ latax ], 
-                    ptr_out[ lonax ], ptr_out[ latax ], status );
-
-/* Report an error if the projection type was unrecognised. */
-      if ( status_value == 1 ) {
-         astError( AST__WCSTY, "astTransform(%s): The %s specifies an "
-                   "illegal projection type ('%s').", status, astClass( this ), 
-                   astClass( this ), FindPrjData( map->type, status )->desc  );
-
-/* Report an error if the projection parameters were invalid. */
-       } else if ( status_value == 2 ) {
-          astError( AST__WCSPA, "astTransform(%s): The %s projection "
-                    "parameter values in this %s are unusable.", status, 
-                    astClass( this ), FindPrjData( map->type, status )->desc, 
-                    astClass( this )  );
-
-/* Report an error if required projection parameters were not supplied. */
-       } else if ( status_value >= 400 ) {
-          astError( AST__WCSPA, "astTransform(%s): Required projection "
-                    "parameter PV%d_%d was not supplied for a %s "
-                    "projection.", status, astClass( this ), latax+1, status_value - 400,
-                    FindPrjData( map->type, status )->desc  );
-
-       } else if ( status_value >= 100 ) {
-          astError( AST__WCSPA, "astTransform(%s): Required projection "
-                    "parameter PV%d_%d was not supplied for a %s "
-                    "projection.", status, astClass( this ), lonax+1, status_value - 100,
-                    FindPrjData( map->type, status )->desc  );
-       }
-
-/* Copy the remaining axes (i.e. all axes except the longitude and latitude 
-   axes) from the input to the output. */
-      for( i = 0; i < astGetNcoord( in ); i++ ){
-         if( ( i != lonax && i != latax ) ){
-            (void) memcpy( ptr_out[ i ], ptr_in[ i ], sizeof( double )*
-                           (size_t) npoint );
-         }
-
-      }
-
-/* If there is no FITS-WCS projection, just copy all the axes from input to
-   output. */
-   } else {
-      for( i = 0; i < astGetNcoord( in ); i++ ){
-         (void) memcpy( ptr_out[ i ], ptr_in[ i ], sizeof( double )*
-                        (size_t) npoint );
-      }
-   }
-
-/* If an error has occurred, attempt to delete the results PointSet. */
-   if ( !astOK ) result = astDelete( result );
-
-/* Return a pointer to the output PointSet. */
-   return result;
-
-}
-
-int astWcsPrjType_( const char *ctype, int *status ){
-/*
-*+
-*  Name:
-*     astWcsPrjType
-
-*  Purpose:
-*     Get the integer identifier for a WCSLIB projection given by a FITS 
-*     CTYPE keyword value.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     int astWcsPrjType( const char *ctype )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns the integer identifier for the WCSLIB projection
-*     specified by the supplied FITS CTYPE keyword value. The returned
-*     value can be passed to astWcsMap to create a WcsMap which implements 
-*     the corresponding projection.
-
-*  Parameters:
-*     ctype
-*        A pointer to the last 4 characters of a FITS CTYPE1 (etc) keyword.
-
-*  Returned Value:
-*     The integer identifier associated with the projection.
-
-*  Notes:
-*     -  A value of AST__WCSBAD is returned if the projection type is
-*     unknown, but no error is reported.
-*-
-*/
-
-   PrjData *data;
-   char buffer[81];
-   const char *a;
-   char *b;
-
-/* Remove leading and trailing blanks from the supplied string. */
-   a = ctype;
-   b = buffer;
-   while( *a && (b - buffer) < 80 ){
-      if( !isspace( (int) *a ) ) {
-         *(b++) = *a;
-      }
-      a++;
-   }
-   *b = 0;
-
-/* Search for the projection in the list of available projectons. */
-   data = PrjInfo;
-   while( data->prj != AST__WCSBAD && strcmp( data->ctype, buffer ) ) data ++;
-
-   return data->prj;
-}
-
-const char *astWcsPrjName_( int type, int *status ){
-/*
-*+
-*  Name:
-*     astWcsPrjName
-
-*  Purpose:
-*     Get the name of a projection given its integer identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     const char *astWcsPrjName( int type )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns a string holding 4 characters which can be
-*     used as the last 4 characters of a FITS CTYPE keyword value 
-*     describing the WCSLIB projection specified by the supplied type.
-
-*  Parameters:
-*     type
-*        The projection type.
-
-*  Returned Value:
-*     A pointer to a null-terminated const character string holding the 
-*     last 4 CTYPE characters describing the projection.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has already
-*     occurred.
-*-
-*/
-
-   PrjData *data;
-   data = PrjInfo;
-   while( data->prj != AST__WCSBAD && data->prj != type ) data ++;
-   return data->ctype;
-}
-
-const char *astWcsPrjDesc_( int type, int *status ){
-/*
-*+
-*  Name:
-*     astWcsPrjDesc
-
-*  Purpose:
-*     Get a textual description of a projection given its integer 
-*     identifier.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     const char *astWcsPrjDesc( int type )
-
-*  Class Membership:
-*     WcsMap protected function
-
-*  Description:
-*     This function returns a pointer to a string string holding a 
-*     textual description of the specified projection type.
-
-*  Parameters:
-*     type
-*        The projection type.
-
-*  Returned Value:
-*     A pointer to a null-terminated const character string holding the 
-*     projection description.
-
-*  Notes:
-*     -  This function attempts to execute even if an error has already
-*     occurred.
-*-
-*/
-
-   PrjData *data;
-   data = PrjInfo;
-   while( data->prj != AST__WCSBAD && data->prj != type ) data ++;
-   return data->desc;
-}
-
-static void WcsPerm( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-*  Name:
-*     WcsPerm
-
-*  Purpose:
-*     Swap a WcsMap and a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     void WcsPerm( AstMapping **maps, int *inverts, int iwm, int *status )
-
-*  Class Membership:
-*     WcsMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a WcsMap and a
-*     PermMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a WcsMap and a PermMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     iwm
-*        The index within "maps" of the WcsMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  All links between input and output axes in the PermMap must 
-*     be bi-directional, but there can be unconnected axes, and there
-*     need not be the same number of input and output axes. Both
-*     longitude and latitude axes must be passed by the PermMap.
-
-*/
-
-/* Local Variables: */
-   AstPermMap *pm;               /* Pointer to the supplied PermMap */
-   AstPermMap *newpm;            /* Pointer to the returned PermMap */
-   AstMapping *newwm;            /* Pointer to the returned WcsMap */
-   AstWcsMap *wm;                /* Pointer to the supplied WcsMap */
-   double *consts;               /* Pointer to constants array */
-   int *inperm;                  /* Pointer to input axis permutation array */
-   int *outperm;                 /* Pointer to output axis permutation array */
-   int latax;                    /* Index of latitude axis */
-   int lonax;                    /* Index of longitude axis */
-   int npin;                     /* No. of input axes in supplied PermMap */
-   int npout;                    /* No. of output axes in supplied PermMap */
-   int old_pinv;                 /* Invert value for the supplied PermMap */
-   int old_winv;                 /* Invert value for the supplied WcsMap */
-   int type;                     /* Projection type */
-   int done;                     /* Have Mappings been swapped? */
-   int i;                        /* AXis index */
-   double *p;                    /* Pointer to input position */
-   double *q;                    /* Pointer to output position */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   newpm = NULL;
-   newwm = NULL;
-
-/* Store pointers to the supplied WcsMap and the PermMap. */
-   wm = (AstWcsMap *) maps[ iwm ];
-   pm = (AstPermMap *) maps[ 1 - iwm ];
-
-/* Temporarily set the Invert attribute of the supplied PermMap to the
-   supplied values. */
-   old_pinv = astGetInvert( pm );
-   astSetInvert( pm, inverts[ 1 - iwm ] );
-   old_winv = astGetInvert( wm );
-   astSetInvert( wm, inverts[ iwm ] );
-
-/* Get the projection type of the supplied WcsMap and the indices of the
-   longitude and latitude axes. */
-   type = astGetWcsType( wm );
-   lonax = astGetWcsAxis( wm, 0 );
-   latax = astGetWcsAxis( wm, 1 );
-
-/* Get the axis permutation and constants arrays representing the
-   PermMap. Note, no constants are used more than once in the returned
-   arrays (i.e. duplicate constants are returned in "consts" if more than
-   one axis uses a given constant). */
-   PermGet( pm, &outperm, &inperm, &consts, status );
-
-   if( astOK ) {
-
-/* Get the number of input and output axes in the PermMap. */
-      npin = astGetNin( pm );
-      npout = astGetNout( pm );
-
-/* If the lon and lat axes of the WcsMap are unassigned, we return a
-   UnitMap instead of a WcsMap. 
-   ================================================================ */
-      done = 0;
-
-/* If the PermMap comes after the WcsMap... */
-      if( iwm == 0 ) {
-         if( inperm[ lonax ] < 0 && inperm[ latax ] < 0 ) {
-            done = 1;
-
-/* Transform the constant values, using AST__BAD for other axes. */
-            p = (double *) astMalloc( sizeof( double )*(size_t) npin );
-            q = (double *) astMalloc( sizeof( double )*(size_t) npin );
-            if( astOK ) {
-               for( i = 0; i < npin; i++ ) {
-                  if( inperm[ i ] < 0 ) {
-                     p[ i ] = consts[ -inperm[ i ] - 1 ];
-                  } else {
-                     p[ i ] = AST__BAD;
-                  }
-               }
-
-/* Transform this position using the inverse WcsMap. */
-               astTranN( wm, 1, npin, 1, p, 0, npin, 1, q );
-
-/* The new PermMap has the same axis permutations as the original, but it
-   has different constants. */
-               for( i = 0; i < npin; i++ ) {
-                  if( inperm[ i ] < 0 ) {
-                     consts[ -inperm[ i ] - 1 ] = q[ i ];
-                  } 
-               }
-
-               newpm = astPermMap( npin, inperm, npout, outperm, consts, "", status );
-
-/* Use a UnitMap instead of the WcsMap. */
-               newwm = (AstMapping *) astUnitMap( npout, "", status );
-
-            }
-
-/* Free memory */
-            p = astFree( p );
-            q = astFree( q );
-
-         }
-
-/* If the WcsMap comes after the PermMap... */
-      } else {
-         if( outperm[ lonax ] < 0 && outperm[ latax ] < 0 ) {
-            done = 1;
-
-/* Transform the constant values, using AST__BAD for other axes. */
-            p = (double *) astMalloc( sizeof( double )*(size_t) npout );
-            q = (double *) astMalloc( sizeof( double )*(size_t) npout );
-            if( astOK ) {
-               for( i = 0; i < npout; i++ ) {
-                  if( outperm[ i ] < 0 ) {
-                     p[ i ] = consts[ -outperm[ i ] - 1 ];
-                  } else {
-                     p[ i ] = AST__BAD;
-                  }
-               }
-
-/* Transform this position using the forward WcsMap. */
-               astTranN( wm, 1, npout, 1, p, 1, npout, 1, q );
-
-/* The new PermMap has the same axis permutations as the original, but it
-   has different constants. */
-               for( i = 0; i < npout; i++ ) {
-                  if( outperm[ i ] < 0 ) {
-                     consts[ -outperm[ i ] - 1 ] = q[ i ];
-                  } 
-               }
-
-               newpm = astPermMap( npin, inperm, npout, outperm, consts, "", status );
-
-/* Use a UnitMap instead ofhte WcsMap. */
-               newwm = (AstMapping *) astUnitMap( npin, "", status );
-
-            }
-
-/* Free memory */
-            p = astFree( p );
-            q = astFree( q );
-
-         }
-      }
-
-/* If the lon and lat axes of the WcsMap are both assigned, we return a
-   WcsMap. 
-   ================================================================ */
-      if( !done ) {
-      
-/* Create the new WcsMap with permuted longitude and latitude axes. Note,
-   the private interface to astWcsMap uses 1-based axis indices. */
-         if( iwm == 0 ) {
-            newwm = (AstMapping *) astWcsMap( npout, type, inperm[ lonax ] + 1, 
-                                              inperm[ latax ] + 1, "", status );
-         } else {
-            newwm = (AstMapping *) astWcsMap( npin, type, outperm[ lonax ] + 1, 
-                                              outperm[ latax ] + 1, "", status );
-         }
-
-/* Copy any projection parameters which have been set. */
-         CopyPV( wm, (AstWcsMap *) newwm, status );
-
-/* Set the invert flag. */
-         astSetInvert( newwm, inverts[ iwm ] );
-
-/* The returned PermMap is a clone of the supplied PermMap */
-         newpm = astClone( pm );
-      }
-
-/* Free the axis permutation and constants arrays. */
-      outperm = (int *) astFree( (void *) outperm );
-      inperm = (int *) astFree( (void *) inperm );
-      consts = (double *) astFree( (void *) consts );
-   }
-
-/* Re-instate the original value of the Invert attributes. */
-   astSetInvert( pm, old_pinv );
-   astSetInvert( wm, old_winv );
-
-/* Annul the supplied pointers */
-   pm = astAnnul( pm );
-   wm = astAnnul( wm );
-
-/* Store the returned Mappings. */
-   maps[ iwm ] = (AstMapping *) newpm;
-   inverts[ iwm ] = astGetInvert( newpm );
-   maps[ 1 - iwm ] = newwm;
-   inverts[ 1 - iwm ] = astGetInvert( newwm );
-
-/* Return. */
-   return;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-
-/* ProjP. */
-/* ------ */
-/*
-*att++
-*  Name:
-*     ProjP(m)
-
-*  Purpose:
-*     FITS-WCS projection parameters.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute provides aliases for the PV attributes, which 
-*     specifies the projection parameter values to be used by a WcsMap 
-*     when implementing a FITS-WCS sky projection. ProjP is retained for 
-*     compatibility with previous versions of FITS-WCS and AST. New 
-*     applications should use the PV attibute instead.
-*
-*     Attributes ProjP(0) to ProjP(9) correspond to attributes PV<axlat>_0
-*     to PV<axlat>_9, where <axlat> is replaced by the index of the
-*     latitude axis (given by attribute WcsAxis(2)). See PV for further
-*     details.
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-
-*att--
-*/
-
-/* PV. */
-/* --- */
-/*
-*att++
-*  Name:
-*     PVi_m
-
-*  Purpose:
-*     FITS-WCS projection parameters.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point.
-
-*  Description:
-*     This attribute specifies the projection parameter values to be
-*     used by a WcsMap when implementing a FITS-WCS sky projection. 
-*     Each PV attribute name should include two integers, i and m, 
-*     separated by an underscore. The axis index is specified 
-*     by i, and should be in the range 1 to 99. The parameter number 
-*     is specified by m, and should be in the range 0 to 99. For 
-*     example, "PV2_1=45.0" would specify a value for projection 
-*     parameter 1 of axis 2 in a WcsMap.
-*
-*     These projection parameters correspond exactly to the values
-*     stored using the FITS-WCS keywords "PV1_1", "PV1_2", etc. This
-*     means that projection parameters which correspond to angles must
-*     be given in degrees (despite the fact that the angular
-*     coordinates and other attributes used by a WcsMap are in
-*     radians).
-*
-*     The set of projection parameters used by a WcsMap depends on the
-*     type of projection, which is determined by its WcsType
-*     parameter.  Most projections either do not require projection
-*     parameters, or use parameters 1 and 2 associated with the latitude 
-*     axis. You should consult the FITS-WCS paper for details.
-*
-*     Some projection parameters have default values (as defined in
-*     the FITS-WCS paper) which apply if no explicit value is given.
-*     You may omit setting a value for these "optional" parameters and the 
-*     default will apply. Some projection parameters, however, have no 
-*     default and a value must be explicitly supplied.  This is most 
-*     conveniently
-c     done using the "options" argument of astWcsMap (q.v.) when a WcsMap
-f     done using the OPTIONS argument of AST_WCSMAP (q.v.) when a WcsMap
-*     is first created. An error will result when a WcsMap is used to
-*     transform coordinates if any of its required projection
-*     parameters has not been set and lacks a default value.
-
-*     A "get" operation for a parameter which has not been assigned a value 
-*     will return the default value defined in the FITS-WCS paper, or 
-*     AST__BAD if the paper indicates that the parameter has no default.
-*     A default value of zero is returned for parameters which are not
-*     accessed by the projection.
-*
-*     Note, the FITS-WCS paper reserves parameters 1 and 2 on the longitude 
-*     axis to hold the native longitude and latitude of the fiducial
-*     point of the projection, in degrees. The default values for these
-*     parameters are determined by the projection type. The AST-specific
-*     TPN projection does not use this convention - all projection
-*     parameters for both axes are used to represent polynomical correction 
-*     terms, and the native longitude and latitude at the fiducial point may
-*     not be changed from the default values of zero and 90 degrees.
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-
-*  Notes:
-*     - If the projection parameter values given for a WcsMap do not
-*     satisfy all the required constraints (as defined in the FITS-WCS
-*     paper), then an error will result when the WcsMap is used to
-*     transform coordinates.
-*att--
-*/
-
-/* PVMax. */
-/* ------ */
-/*
-*att++
-*  Name:
-*     PVMax(i)
-
-*  Purpose:
-*     Maximum number of FITS-WCS projection parameters.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute specifies the largest legal index for a PV projection
-*     parameter attached to a specified axis of the WcsMap (i.e. the
-*     largest legal value for "m" when accessing the "PVi_m" attribute). 
-*     The axis index is specified by i, and should be in the range 1 to 99. 
-*     The value for each axis is determined by the projection type specified 
-*     when the WcsMap
-c     is first created using astWcsMap and cannot subsequently be
-f     is first created using AST_WCSMAP and cannot subsequently be
-*     changed.
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-*att--
-*/
-
-/* WcsType. */
-/* -------- */
-/*
-*att++
-*  Name:
-*     WcsType
-
-*  Purpose:
-*     FITS-WCS projection type.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute specifies which type of FITS-WCS projection will
-*     be performed by a WcsMap. The value is specified when a WcsMap
-c     is first created using astWcsMap and cannot subsequently be
-f     is first created using AST_WCSMAP and cannot subsequently be
-*     changed.
-*
-c     The values used are represented by macros with names of
-f     The values used are represented by symbolic constants with names of
-*     the form "AST__XXX", where "XXX" is the (upper case) 3-character
-*     code used by the FITS-WCS "CTYPEi" keyword to identify the
-*     projection. For example, possible values are AST__TAN (for the
-*     tangent plane or gnomonic projection) and AST__AIT (for the
-*     Hammer-Aitoff projection). AST__TPN is an exception in that it 
-*     is not part of the FITS-WCS standard (it represents a TAN
-*     projection with polynomial correction terms as defined in an early
-*     draft of the FITS-WCS paper).
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-
-*  Notes:
-*     - For a list of available projections, see the FITS-WCS paper.
-*att--
-*/
-
-/* Type of FITS-WCS projection. Read only. */
-astMAKE_GET(WcsMap,WcsType,int,AST__WCSBAD,this->type)
-
-/* NatLat. */
-/* ------- */
-/*
-*att++
-*  Name:
-*     NatLat
-
-*  Purpose:
-*     Native latitude of the reference point of a FITS-WCS projection.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point, read-only.
-
-*  Description:
-*     This attribute gives the latitude of the reference point of the
-*     FITS-WCS projection implemented by a WcsMap. The value is in
-*     radians in the "native spherical" coordinate system. This value is
-*     fixed for most projections, for instance it is PI/2 (90 degrees)
-*     for all zenithal projections. For some projections (e.g. the conics) 
-*     the value is not fixed, but is specified by parameter one on the 
-*     latitude axis. 
-*
-*     FITS-WCS paper II introduces the concept of a "fiducial point"
-*     which is logical distinct from the projection reference point.
-*     It is easy to confuse the use of these two points. The fiducial
-*     point is the point which has celestial coordinates given by the
-*     CRVAL FITS keywords. The native spherical coordinates for this point
-*     default to the values of the NatLat and NatLon, but these defaults
-*     mey be over-ridden by values stored in the PVi_j keywords. Put
-*     another way, the CRVAL keywords will by default give the celestial
-*     coordinates of the projection reference point, but may refer to
-*     some other point if alternative native longitude and latitude values 
-*     are provided through the PVi_j keywords.
-*
-*     The NatLat attribute is read-only. 
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-
-*  Notes:
-*     - A default value of AST__BAD is used if no latitude value is available.
-*att--
-*/
-
-/*
-*att++
-*  Name:
-*     NatLon
-
-*  Purpose:
-*     Native longitude of the reference point of a FITS-WCS projection.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Floating point, read-only.
-
-*  Description:
-*     This attribute gives the longitude of the reference point of the
-*     FITS-WCS projection implemented by a WcsMap. The value is in
-*     radians in the "native spherical" coordinate system, and will
-*     usually be zero. See the description of attribute NatLat for further 
-*     information.
-*
-*     The NatLon attribute is read-only. 
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-
-*  Notes:
-*att--
-*/
-
-/* WcsAxis. */
-/* -------- */
-/*
-*att++
-*  Name:
-*     WcsAxis(lonlat)
-
-*  Purpose:
-*     FITS-WCS projection axes.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer, read-only.
-
-*  Description:
-*     This attribute gives the indices of the longitude and latitude
-*     coordinates of the FITS-WCS projection within the coordinate
-*     space used by a WcsMap. These indices are defined when the
-c     WcsMap is first created using astWcsMap and cannot
-f     WcsMap is first created using AST_WCSMAP and cannot
-*     subsequently be altered.
-*
-*     If "lonlat" is 1, the index of the longitude axis is
-*     returned. Otherwise, if it is 2, the index of the latitude axis
-*     is returned.
-
-*  Applicability:
-*     WcsMap
-*        All WcsMaps have this attribute.
-*att--
-*/
-
-/* Index of the latitude or longitude axis. */
-MAKE_GET(WcsAxis,int,0,this->wcsaxis[ axis ],2)
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for WcsMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for WcsMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     -  This constructor makes a deep copy, including a copy of the
-*     projection parameter values associated with the input WcsMap.
-*/
-
-
-/* Local Variables: */
-   AstWcsMap *in;                /* Pointer to input WcsMap */
-   AstWcsMap *out;               /* Pointer to output WcsMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output WcsMaps. */
-   in = (AstWcsMap *) objin;
-   out = (AstWcsMap *) objout;
-
-/* Allocate memory to hold the projection parameters within the AstPrjPrm
-   structure used by WCSLIB. */
-   (out->params).p = astMalloc( astSizeOf( (in->params).p ) );
-   (out->params).p2 = astMalloc( astSizeOf( (in->params).p2 ) );
-
-/* Copy the projection parameter information. */
-   CopyPV( in, out, status );
-
-   return;
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for WcsMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for WcsMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     void
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstWcsMap *this;            /* Pointer to WcsMap */
-
-/* Obtain a pointer to the WcsMap structure. */
-   this = (AstWcsMap *) obj;
-
-/* Free the arrays used to store projection parameters. */
-   FreePV( this, status );
-
-/* Free memory used to hold the projection parameters within the AstPrjPrm
-   structure used by WCSLIB. */
-   this->params.p = astFree( this->params.p );
-   this->params.p2 = astFree( this->params.p2 );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for WcsMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the WcsMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the WcsMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-#define COMMENT_LEN 150          /* Maximum length of a keyword comment */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstWcsMap *this;              /* Pointer to the WcsMap structure */
-   char *comment;                /* Pointer to comment string */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   char comment_buff[ COMMENT_LEN + 1 ]; /* Buffer for keyword comment */
-   const PrjData *prjdata;       /* Information about the projection */
-   double dval;                  /* Double precision value */
-   int axis;                     /* Zero based axis index */
-   int i;                        /* Axis index */
-   int m;                        /* Parameter index */
-   int ival;                     /* Integer value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the WcsMap structure. */
-   this = (AstWcsMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   WcsMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out. Note, all read-only attributes are considered to be set.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* WcsType. */
-/* -------- */
-   ival = GetWcsType( this, status );
-   prjdata = FindPrjData( ival, status );
-   (void) sprintf( comment_buff, "%s projection", prjdata->desc );
-   comment_buff[ 0 ] = toupper( comment_buff[ 0 ] );
-   astWriteString( channel, "Type", 1, 1, prjdata->ctype + 1, comment_buff );
-
-/* PVi_m. */
-/* ------ */
-   for( i = 0; i < astGetNin( this ); i++ ){
-      if( this->np ) {
-         for( m = 0; m < this->np[ i ]; m++ ){
-            set = TestPV( this, i, m, status );
-            if( set ) {
-               dval = set ? GetPV( this, i, m, status ) : astGetPV( this, i, m );
-               (void) sprintf( buff, "PV%d_%d", i + 1, m );
-               (void) sprintf( comment_buff, "Projection parameter %d for axis %d", m, i + 1 );
-               astWriteDouble( channel, buff, set, 0, dval, comment_buff );
-            }
-         }
-      }
-   }
-
-/* WcsAxis(axis). */
-/* -------------- */
-   for( axis = 0; axis < 2; axis++ ){
-      ival =  GetWcsAxis( this, axis, status );
-      (void) sprintf( buff, "WcsAx%d", axis + 1 );
-      if( axis == 0 ) {
-         comment = "Index of celestial longitude axis";
-      } else {
-         comment = "Index of celestial latitude axis";
-      }
-      astWriteInt( channel, buff, (axis!=ival), 0, ival + 1, comment );
-   }
-
-/* Note, the "params" component of the AstWcsMap structure is not written out 
-   because it can be re-generated from the other components. */
-
-/* Return. */
-   return;
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAWcsMap and astCheckWcsMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(WcsMap,Mapping)
-astMAKE_CHECK(WcsMap)
-
-AstWcsMap *astWcsMap_( int ncoord, int type, int lonax, int latax, 
-                       const char *options, int *status, ...){
-/*
-*++
-*  Name:
-c     astWcsMap
-f     AST_WCSMAP
-
-*  Purpose:
-*     Create a WcsMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "wcsmap.h"
-c     AstWcsMap *astWcsMap( int ncoord, int type, int lonax, int latax, 
-c                           const char *options, ... )
-f     RESULT = AST_WCSMAP( NCOORD, TYPE, LONAX, LATAX, OPTIONS, STATUS )
-
-*  Class Membership:
-*     WcsMap constructor.
-
-*  Description:
-*     This function creates a new WcsMap and optionally initialises its
-*     attributes.
-*
-*     A WcsMap is used to represent sky coordinate projections as
-*     described in the (draft) FITS world coordinate system (FITS-WCS)
-*     paper by E.W. Griesen and M. Calabretta (A & A, in preparation).
-*     This paper defines a set of functions, or sky projections, which
-*     transform longitude-latitude pairs representing spherical
-*     celestial coordinates into corresponding pairs of Cartesian
-*     coordinates (and vice versa).
-*
-*     A WcsMap is a specialised form of Mapping which implements these
-*     sky projections and applies them to a specified pair of coordinates.
-*     All the projections in the FITS-WCS paper are supported, plus the now 
-*     deprecated "TAN with polynomial correction terms" projection which 
-*     is refered to here by the code "TPN". Using the FITS-WCS terminology, 
-*     the transformation is between "native spherical" and "projection
-*     plane" coordinates.  These coordinates may, optionally, be embedded in 
-*     a space with more than two dimensions, the remaining coordinates being 
-*     copied unchanged. Note, however, that for consistency with other AST
-*     facilities, a WcsMap handles coordinates that represent angles
-*     in radians (rather than the degrees used by FITS-WCS).
-*
-*     The type of FITS-WCS projection to be used and the coordinates
-*     (axes) to which it applies are specified when a WcsMap is first
-*     created. The projection type may subsequently be determined
-*     using the WcsType attribute and the coordinates on which it acts
-*     may be determined using the WcsAxis(lonlat) attribute.
-*
-*     Each WcsMap also allows up to 100 "projection parameters" to be
-*     associated with each axis. These specify the precise form of the 
-*     projection, and are accessed using PVi_m attribute, where "i" is 
-*     the integer axis index (starting at 1), and m is an integer
-*     "parameter index" in the range 0 to 99. The number of projection
-*     parameters required by each projection, and their meanings, are 
-*     dependent upon the projection type (most projections either do not 
-*     use any projection parameters, or use parameters 1 and 2 associated
-*     with the latitude axis). Before creating a WcsMap you should consult 
-*     the FITS-WCS paper for details of which projection parameters are 
-*     required, and which have defaults. When creating the WcsMap, you must 
-*     explicitly set values for all those required projection parameters 
-*     which do not have defaults defined in this paper.
-
-*  Parameters:
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinate values for each point to be
-*        transformed (i.e. the number of dimensions of the space in
-*        which the points will reside). This must be at least 2. The
-*        same number is applicable to both input and output points.
-c     type
-f     TYPE = INTEGER (Given)
-*        The type of FITS-WCS projection to apply. This should be
-c        given using a macro value such as AST__TAN (for a tangent
-f        given as a symbolic value such as AST__TAN (for a tangent
-*        plane projection), where the characters following the double
-*        underscore give the projection type code (in upper case) as
-*        used in the FITS-WCS "CTYPEi" keyword. You should consult the
-*        FITS-WCS paper for a list of the available projections. The
-*        additional code of AST__TPN can be supplied which represents a 
-*        TAN projection with polynomial correction terms as defined in an 
-*        early draft of the FITS-WCS paper.
-c     lonax
-f     LONAX = INTEGER (Given)
-*        The index of the longitude axis. This should lie in the range
-c        1 to "ncoord".
-f        1 to NCOORD.
-c     latax
-f     LATAX = INTEGER (Given)
-*        The index of the latitude axis. This should lie in the range
-c        1 to "ncoord" and be distinct from "lonax".
-f        1 to NCOORD and be distinct from LONAX.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new WcsMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new WcsMap. The syntax used is identical to that for the
-f        AST_SET routine.
-*
-*        If the sky projection to be implemented requires projection
-*        parameter values to be set, then this should normally be done
-*        here via the PVi_m attribute (see the "Examples"
-*        section). Setting values for these parameters is mandatory if
-*        they do not have default values (as defined in the FITS-WCS
-*        paper).
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astWcsMap()
-f     AST_WCSMAP = INTEGER
-*        A pointer to the new WcsMap.
-
-*  Examples:
-c     wcsmap = astWcsMap( 2, AST__MER, 1, 2, "" );
-f     WCSMAP = AST_WCSMAP( 2, AST__MER, 1, 2, ' ', STATUS )
-*        Creates a WcsMap that implements a FITS-WCS Mercator
-*        projection on pairs of coordinates, with coordinates 1 and 2
-*        representing the longitude and latitude respectively. Note
-*        that the FITS-WCS Mercator projection does not require any
-*        projection parameters.
-c     wcsmap = astWcsMap( 3, AST__COE, 2, 3, "PV3_1=40.0" );
-f     WCSMAP = AST_WCSMAP( 3, AST__COE, 2, 3, 'PV3_1=40.0', STATUS )
-*        Creates a WcsMap that implements a FITS-WCS conical equal
-*        area projection. The WcsMap acts on points in a 3-dimensional
-*        space; coordinates 2 and 3 represent longitude and latitude
-*        respectively, while the values of coordinate 1 are copied
-*        unchanged.  Projection parameter 1 associatyed with the latitude
-*        axis (corresponding to FITS keyword "PV3_1") is required and has 
-*        no default, so is set explicitly to 40.0 degrees. Projection 
-*        parameter 2 (corresponding to FITS keyword "PV3_2") is required 
-*        but has a default of zero, so need not be specified.
-
-*  Notes:
-*     - The forward transformation of a WcsMap converts between
-*     FITS-WCS "native spherical" and "relative physical" coordinates,
-*     while the inverse transformation converts in the opposite
-*     direction. This arrangement may be reversed, if required, by
-c     using astInvert or by setting the Invert attribute to a non-zero
-f     using AST_INVERT or by setting the Invert attribute to a non-zero
-*     value.
-*     - If any set of coordinates cannot be transformed (for example,
-*     many projections do not cover the entire celestial sphere), then
-*     a WcsMap will yield coordinate values of AST__BAD.
-*     - The validity of any projection parameters given via the PVi_m
-c     parameter in the "options" string is not checked by this
-f     parameter in the OPTIONS string is not checked by this
-*     function. However, their validity is checked when the resulting
-*     WcsMap is used to transform coordinates, and an error will
-*     result if the projection parameters do not satisfy all the
-*     required constraints (as defined in the FITS-WCS paper).
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstWcsMap *new;               /* Pointer to new WcsMap */
-   va_list args;                 /* Variable argument list */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the WcsMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitWcsMap( NULL, sizeof( AstWcsMap ), !class_init, &class_vtab,
-                        "WcsMap", ncoord, type, lonax - 1, latax - 1 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new WcsMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new WcsMap. */
-   return new;
-}
-
-AstWcsMap *astWcsMapId_( int ncoord, int type, int lonax, int latax, 
-                         const char *options, ... ){
-/*
-*  Name:
-*     astWcsMapId_
-
-*  Purpose:
-*     Create a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     AstWcsMap *astWcsMap_( int ncoord, int type, int lonax, int latax, 
-*                            const char *options, ... )
-
-*  Class Membership:
-*     WcsMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astWcsMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astWcsMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astWcsMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astWcsMap_.
-
-*  Returned Value:
-*     The ID value associated with the new WcsMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstWcsMap *new;               /* Pointer to new WcsMap */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the WcsMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitWcsMap( NULL, sizeof( AstWcsMap ), !class_init, &class_vtab,
-                        "WcsMap", ncoord, type, lonax - 1, latax - 1 );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new WcsMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new WcsMap. */
-   return astMakeId( new );
-}
-
-AstWcsMap *astInitWcsMap_( void *mem, size_t size, int init,
-                           AstWcsMapVtab *vtab, const char *name,
-                           int ncin, int type, int lonax, int latax, int *status ) {
-/*
-*+
-*  Name:
-*     astInitWcsMap
-
-*  Purpose:
-*     Initialise a WcsMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     AstWcsMap *astInitWcsMap( void *mem, size_t size, int init,
-*                               AstWcsMapVtab *vtab, const char *name,
-*                               int ncin, int type, int lonax, int latax )
-
-*  Class Membership:
-*     WcsMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new WcsMap object. It allocates memory (if necessary) to accommodate
-*     the WcsMap plus any additional data associated with the derived class.
-*     It then initialises a WcsMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a WcsMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the WcsMap is to be initialised.
-*        This must be of sufficient size to accommodate the WcsMap data
-*        (sizeof(WcsMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the WcsMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the WcsMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the WcsMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new WcsMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     ncin
-*        The number of coordinate values per point.
-*     type
-*        The type of projection to use, choosen from the list available
-*        in the FITS celestial coordinates system. These are specified by
-*        symbolic values such as AST__TAN (specifying a tangent plane
-*        projection), where the characters following the double underscore
-*        gives the FITS projection type (in upper case) as used in the FITS
-*        "CTYPEn" keyword.
-*     lonax
-*        The index of the longitude axis. The first axis has index 0.
-*     latax
-*        The index of the latitude axis. The first axis has index 0.
-
-*  Returned Value:
-*     A pointer to the new WcsMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const PrjData *prjdata;      /* Information about the projection */
-   AstWcsMap *new;              /* Pointer to new WcsMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitWcsMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* If a genuine FITS-WCS projection has been specified, check the initialisation 
-   value(s) for validity, reporting an error if necessary. Prefix the error 
-   report with the name of the function and the class of object being 
-   processed. First check that at least two dimensions are to be mapped. */
-   if( type != AST__WCSBAD ){
-      if ( ncin < 2 ){
-         astError( AST__WCSNC, "astInitWcsMap(%s): Too few axes (%d) "
-                   "specified. Must be at least 2.", status, name, ncin );
-
-/* Report an error if either the longitude or latitude axes are out of
-   bounds. */
-      } else if ( lonax < 0 || lonax >= ncin ){
-         astError( AST__WCSAX, "astInitWcsMap(%s): Specified longitude axis (%d) "
-                   "does not exist within a %d dimensional coordinate system. ", status,
-                   name, lonax + 1, ncin );
-   
-      } else if ( latax < 0 || latax >= ncin ){
-         astError( AST__WCSAX, "astInitWcsMap(%s): Specified latitude axis (%d) "
-                   "does not exist within a %d dimensional coordinate system. ", status,
-                   name, latax + 1, ncin );
-
-/* Report an error if the longitude or latitude axes are the same. */
-      } else if ( lonax == latax ){
-         astError( AST__WCSAX, "astInitWcsMap(%s): The same axis (%d) has been "
-                   "given for both the longitude and the latitude axis.", status, name,
-                   lonax + 1 );
-
-/* Report an error if projection type is unknown. */
-      } else if ( type < 1 || type >= AST__WCSBAD ){
-         astError( AST__WCSTY, "astInitWcsMap(%s): Projection type %d is "
-                   "undefined. Projection types must be in the range 1 to %d.", status,
-                   name, type, AST__WCSBAD - 1 );
-      }
-   }
-
-/* Get a description of the requeste dprojection type. */
-   prjdata = FindPrjData( type, status );
-
-/* If all the above checks have been passed succesfully... */
-   if( astOK ){
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the WcsMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-      new = (AstWcsMap *) astInitMapping( mem, size, 0,
-                                          (AstMappingVtab *) vtab, name,
-                                          ncin, ncin, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the WcsMap data. */
-/* ---------------------------- */
-/* Store the projection type. */
-         new->type = type;
-
-/* Store the axes associated with longitude and latitude. */
-         new->wcsaxis[0] = lonax;
-         new->wcsaxis[1] = latax;
-
-/* Store NULL pointers for the arrays holding projection parameters. */
-         new->p = NULL;
-         new->np = NULL;
-
-/* Allocate memory of the right size to hold the maximum number of
-   projection parameters needed by the projection. */
-         new->params.p = astMalloc( sizeof( double ) * (prjdata->mxpar + 1) );
-         new->params.p2 = astMalloc( sizeof( double ) * (prjdata->mxpar2 + 1) );
-
-/* Initialise the "AstPrjPrm" structure (defined in proj.h). */
-         InitPrjPrm( new, status );
-
-/* If an error occurred, clean up by deleting the new WcsMap. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new WcsMap. */
-   return new;
-}
-
-AstWcsMap *astLoadWcsMap_( void *mem, size_t size,
-                           AstWcsMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadWcsMap
-
-*  Purpose:
-*     Load a WcsMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "wcsmap.h"
-*     AstWcsMap *astLoadWcsMap( void *mem, size_t size,
-*                               AstWcsMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     WcsMap loader.
-
-*  Description:
-*     This function is provided to load a new WcsMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     WcsMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a WcsMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the WcsMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        WcsMap data (sizeof(WcsMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the WcsMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the WcsMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstWcsMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new WcsMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the WcsMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "WcsMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new WcsMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-/* Local Variables: */
-   const PrjData *prjdata;      /* Information about the projection */
-   AstWcsMap *new;              /* Pointer to the new WcsMap */
-   char *text;                  /* Textual form of an integer value */
-   char buff[ KEY_LEN + 1 ];    /* Buffer for keyword string */
-   double pv;                   /* Projection parameter */
-   int axis;                    /* Axis index */
-   int i;                       /* Axis index */
-   int m;                       /* Parameter index */
-   int mxpar;                   /* Maximum number of PVi_m values */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this WcsMap. In this case the
-   WcsMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstWcsMap );
-      vtab = &class_vtab;
-      name = "WcsMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitWcsMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built WcsMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "WcsMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. Note, this is only
-   done for read/write attributes, not read-only ones. */
-
-/* WcsType */
-/* ------- */
-      text = astReadString( channel, "type", " " );
-      if( strcmp( text, " " ) ){
-         char tmp[ 10 ];
-         (void) sprintf( tmp, "-%.8s", text );
-         new->type = astWcsPrjType( tmp );
-      } else {
-         new->type = AST__WCSBAD;
-      }
-      text = astFree( text );
-      prjdata = FindPrjData( new->type, status );
-
-/* WcsAxis(axis). */
-/* -------------- */
-      for( axis = 0; axis < 2; axis++ ){
-         (void) sprintf( buff, "wcsax%d", axis + 1 );
-         new->wcsaxis[ axis ] = astReadInt( channel, buff, axis + 1 ) - 1;
-      }
-
-/* Initialise the pointers to the projection parameter information. */
-      new->p = NULL;
-      new->np = NULL;
-      new->params.p = astMalloc( sizeof( double ) * (prjdata->mxpar + 1) );
-      new->params.p2 = astMalloc( sizeof( double ) * (prjdata->mxpar2 + 1) );
-
-/* Initialise the structure used by WCSLIB to hold intermediate values,
-   so that the values will be re-calculated on the first invocation of a
-   mapping function. */
-      InitPrjPrm( new, status );
-
-/* ProjP(m). */
-/* --------- */
-      for( m = 0; m < AST__WCSMX; m++ ){
-         (void) sprintf( buff, "projp%d", m );
-         pv = astReadDouble( channel, buff, AST__BAD );
-         if( pv != AST__BAD ) SetPV( new, new->wcsaxis[ 1 ], m, pv, status );
-      }
-
-/* PVi_m. */
-/* -------*/
-      for( i = 0; i < astGetNin( new ); i++ ){
-
-         if( i == new->wcsaxis[ 0 ] ) {
-            mxpar = prjdata->mxpar2;
-         } else if( i == new->wcsaxis[ 1 ] ) {
-            mxpar = prjdata->mxpar;
-         } else {
-            mxpar = 0;
-         } 
-
-         for( m = 0; m <= mxpar; m++ ){
-            (void) sprintf( buff, "pv%d_%d", i + 1, m );
-            pv = astReadDouble( channel, buff, AST__BAD );
-            if( pv != AST__BAD ) SetPV( new, i, m, pv, status );
-         }
-      }
-
-/* If an error occurred, clean up by deleting the new WcsMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new WcsMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-void astClearPV_( AstWcsMap *this, int i, int m, int *status ) {
-   if ( !astOK ) return; 
-   (**astMEMBER(this,WcsMap,ClearPV))( this, i, m, status ); 
-}   
-
-double astGetPV_( AstWcsMap *this, int i, int m, int *status ) { 
-   if ( !astOK ) return AST__BAD; 
-   return (**astMEMBER(this,WcsMap,GetPV))( this, i, m, status ); 
-}
-
-void astSetPV_( AstWcsMap *this, int i, int m, double val, int *status ) {
-   if ( !astOK ) return; 
-   (**astMEMBER(this,WcsMap,SetPV))( this, i, m, val, status ); 
-}   
-
-int astTestPV_( AstWcsMap *this, int i, int m, int *status ) { 
-   if ( !astOK ) return 0; 
-   return (**astMEMBER(this,WcsMap,TestPV))( this, i, m, status ); 
-}
-
-int astIsZenithal_( AstWcsMap *this, int *status ) { 
-   if ( !astOK ) return 0; 
-   return (**astMEMBER(this,WcsMap,IsZenithal))( this, status ); 
-}
-
-double astGetNatLat_( AstWcsMap *this, int *status ) { 
-   if ( !astOK ) return AST__BAD; 
-   return (**astMEMBER(this,WcsMap,GetNatLat))( this, status ); 
-}
-
-double astGetNatLon_( AstWcsMap *this, int *status ) { 
-   if ( !astOK ) return AST__BAD; 
-   return (**astMEMBER(this,WcsMap,GetNatLon))( this, status ); 
-}
-
-int astGetPVMax_( AstWcsMap *this, int i, int *status ) { 
-   if ( !astOK ) return -1; 
-   return (**astMEMBER(this,WcsMap,GetPVMax))( this, i, status ); 
-}
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/wcsmap.h b/ast-5.3-1/wcsmap.h
deleted file mode 100644
index 059054b..0000000
--- a/ast-5.3-1/wcsmap.h
+++ /dev/null
@@ -1,548 +0,0 @@
-#if !defined( WCSMAP_INCLUDED ) /* Include this file only once */
-#define WCSMAP_INCLUDED
-/*
-*+
-*  Name:
-*     wcsmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the WcsMap class.
-
-*  Invocation:
-*     #include "wcsmap.h"
-
-*  Description:
-*     This include file defines the interface to the WcsMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The WcsMap class implements Mappings that transform a pair of
-*     longitude/latitude values into a pair of projected Cartesian 
-*     coordinates. All the projections included in FITS WCS are included.
-*     For more information about these projections, see the appropriate 
-*     FITS document.
-
-*  Inheritance:
-*     The WcsMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     NatLat (double)
-*        This attribute gives the latitude of the reference point of 
-*        a FITS WCS projection, in the native coordinate system. The value 
-*        returned is in radians. A value of AST__BAD is returned if 
-*        no value is defined. This attribute is read only, and may change 
-*        if new values are assigned to the projection parameters.
-*     NatLon (double)
-*        This attribute gives the longitude of the reference point of 
-*        a FITS WCS projection, in the native coordinate system. The value 
-*        returned is in radians. A value of AST__BAD is returned if 
-*        no value is defined. This attribute is read only, and may change 
-*        if new values are assigned to the projection parameters.
-*     ProjP(i) (double)
-*        This attribute provides aliases for the PV attributes, which 
-*        specifies the projection parameter values to be used by a WcsMap 
-*        when implementing a FITS-WCS sky projection. ProjP is retained for 
-*        compatibility with previous versions of FITS-WCS and AST. New 
-*        applications should use the PV attibute instead.
-*     PVj_m (double)
-*        This attribute gives the parameter values used by a FITS WCS 
-*        projection. The index j is the axis index in the range 1 to 99, and 
-*        the index m is the parameter index in the range 0 to 99. They will 
-*        have the value AST__BAD if undefined. By default, no projection 
-*        parameters are defined. These should be assigned appropriate values 
-*        before using a WcsMap to transform points.
-*     WcsAxis(lonlat) (int)
-*        This attribute gives the indices of the longitude and latitude axes
-*        of a FITS WCS projection within the coordinate system used by a
-*        WcsMap. If "lonlat" is 1 then the index of the longitude axis is 
-*        returned. If it is 2 the index of the latitude axis is returned. 
-*        The first axis in the coordinate system is axis 1. This is a 
-*        read-only attribute.
-*     WcsType (int)
-*        This attribute gives the FITS WCS projection type implemented by a
-*        WcsMap. Macros giving the integer value associated with supported 
-*        projections are defined. They have the general form "AST__xxx" where 
-*        "xxx" is the 3-character code used to represent the projection in the 
-*        FITS CTYPE keyword.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a WcsMap.
-*        astGetAttrib
-*           Get an attribute value for a WcsMap.
-*        astSetAttrib
-*           Set an attribute value for a WcsMap.
-*        astTestAttrib
-*           Test if an attribute value has been set for a WcsMap.
-*        astTransform
-*           Apply a WcsMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearPV
-*           Clear a PVi_j attribute value for a WcsMap.
-*        astGetNatLat
-*           Get the NatLat attribute value for a WcsMap.
-*        astGetNatLon
-*           Get the NatLon attribute value for a WcsMap.
-*        astGetPV
-*           Get a PVi_j attribute value for a WcsMap.
-*        astGetWcsAxis
-*           Get a WcsAxis attribute value for a WcsMap.
-*        astGetWcsType
-*           Get the WcsType attribute value for a WcsMap.
-*        astIsZenithal
-*           Is the projection zenithal?
-*        astSetPV
-*           Set a PVi_j attribute value for a WcsMap.
-*        astTestPV
-*           Test if a PVi_j attribute value has been set for a WcsMap.
-*        astWcsPrjName
-*           Return the FITS CTYPE keyword value for a given projection type.
-*        astWcsPrjDesc
-*           Return a textual description for a given projection type.
-*        astWcsPrjType
-*           Return the projection type given a FITS CTYPE keyword value.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAWcsMap
-*           Test class membership.
-*        astWcsMap
-*           Create a WcsMap.
-*
-*     Protected:
-*        astCheckWcsMap
-*           Validate class membership.
-*        astInitWcsMap
-*           Initialise a WcsMap.
-*        astInitWcsMapVtab
-*           Initialise the virtual function table for the WcsMap class.
-*        astLoadWcsMap
-*           Load a WcsMap.
-
-*  Macros:
-*     Public:
-*        AST__WCSMX
-*           Maximum number of parameters associated with a projection.
-*        AST__DPI
-*           180 degrees in radians.
-*        AST__DPIBY2
-*           90 degrees in radians.
-*        AST__DD2R
-*           Factor for converting degrees to radians.
-*        AST__DR2D
-*           Factor for converting radians to degrees.
-*        AST__AZP     
-*           An integer identifier for the FITS AZP projection.
-*        AST__TAN     
-*           An integer identifier for the FITS TAN projection. 
-*        AST__SIN     
-*           An integer identifier for the FITS SIN projection. 
-*        AST__STG     
-*           An integer identifier for the FITS STG projection. 
-*        AST__ARC     
-*           An integer identifier for the FITS ARC projection. 
-*        AST__ZPN     
-*           An integer identifier for the FITS ZPN projection. 
-*        AST__ZEA     
-*           An integer identifier for the FITS ZEA projection. 
-*        AST__AIR     
-*           An integer identifier for the FITS AIR projection. 
-*        AST__CYP     
-*           An integer identifier for the FITS CYP projection. 
-*        AST__CAR     
-*           An integer identifier for the FITS CAR projection. 
-*        AST__MER     
-*           An integer identifier for the FITS MER projection. 
-*        AST__CEA     
-*           An integer identifier for the FITS CEA projection. 
-*        AST__COP     
-*           An integer identifier for the FITS COP projection. 
-*        AST__COD     
-*           An integer identifier for the FITS COD projection. 
-*        AST__COE     
-*           An integer identifier for the FITS COE projection. 
-*        AST__COO     
-*           An integer identifier for the FITS COO projection. 
-*        AST__BON     
-*           An integer identifier for the FITS BON projection. 
-*        AST__PCO     
-*           An integer identifier for the FITS PCO projection. 
-*        AST__GLS     
-*           A depracated integer identifier for the FITS SFL projection. 
-*        AST__SFL     
-*           An integer identifier for the FITS SFL projection. 
-*        AST__PAR     
-*           An integer identifier for the FITS PAR projection. 
-*        AST__AIT     
-*           An integer identifier for the FITS AIT projection. 
-*        AST__MOL     
-*           An integer identifier for the FITS MOL projection. 
-*        AST__CSC     
-*           An integer identifier for the FITS CSC projection. 
-*        AST__QSC     
-*           An integer identifier for the FITS QSC projection. 
-*        AST__TSC     
-*           An integer identifier for the FITS TSC projection
-*        AST__HPX     
-*           An integer identifier for the FITS HPX projection. 
-*        AST__TPN
-*           An integer identifier for a "TAN with correction terms" projection. 
-*        AST__WCSBAD  
-*           An integer identifier for a "null" projection.
-*
-*     Protected:
-*        None.
-
-*  Type Definitions:
-*     Public:
-*        AstWcsMap
-*           WcsMap object type.
-*
-*     Protected:
-*        AstWcsMapVtab
-*           WcsMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     15-Feb-1996 (DSB):
-*        Original version.
-*     23-MAR-1996 (DSB):
-*        Support for PointSets with more than 2 axes added.
-*     18-NOV-1996 (DSB):
-*        Updated to include attributes, etc.
-*     26-SEP-1997 (DSB):
-*        Included new protected function, astPrjDesc.
-*     11-FEB-2000 (DSB):
-*        Replaced wcsmap component projp by pointers p and np.
-*     20-OCT-2002 (DSB):
-*        Added astIsZenithal
-*     8-JAN-2003 (DSB):
-*        Added protected astInitWcsMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "proj.h"                /* Mark Calabretta's WCSLIB library header 
-                                    file */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-/* Max. number of parameters for a WCS projection */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-#define AST__WCSMX 10   
-
-/* pi:  180 degrees in radians - from SLALIB file slamac.h. */
-#define AST__DPI 3.1415926535897932384626433832795028841971693993751
-
-/* pi/2:  90 degrees in radians - from SLALIB file slamac.h. */
-#define AST__DPIBY2 1.5707963267948966192313216916397514420985846996876
-
-/* pi/180:  degrees to radians - from SLALIB file slamac.h. */
-#define AST__DD2R 0.017453292519943295769236907684886127134428718885417
-
-/* 180/pi:  radians to degrees - from SLALIB file slamac.h. */
-#define AST__DR2D 57.295779513082320876798154814105170332405472466564
-
-/* Projection Types: (note, WCSBAD must be the last in this list) */
-
-#define AST__AZP 1
-#define AST__SZP 2
-#define AST__TAN 3
-#define AST__STG 4
-#define AST__SIN 5
-#define AST__ARC 6
-#define AST__ZPN 7
-#define AST__ZEA 8
-#define AST__AIR 9
-#define AST__CYP 10
-#define AST__CEA 11
-#define AST__CAR 12
-#define AST__MER 13
-#define AST__SFL 14
-#define AST__PAR 15
-#define AST__MOL 16
-#define AST__AIT 17
-#define AST__COP 18
-#define AST__COE 19
-#define AST__COD 20
-#define AST__COO 21
-#define AST__BON 22
-#define AST__PCO 23
-#define AST__TSC 24
-#define AST__CSC 25
-#define AST__QSC 26
-#define AST__NCP 27
-#define AST__GLS 28
-#define AST__TPN 29
-#define AST__HPX 30
-#define AST__WCSBAD 31   /* A bad projection type */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* WcsMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstWcsMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   int type;                     /* Projection type */
-   int wcsaxis[2];               /* Indices of lon and lat. axes */
-   double **p;                   /* Pointer to array of projection parameter arrays */
-   int *np;                      /* Pointer to array of projection parameter counts */
-   struct AstPrjPrm params;      /* WCS structure holding projection
-                                    parameters, etc. Defined in proj.h */
-
-} AstWcsMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstWcsMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double (* GetNatLat)( AstWcsMap *, int * );
-   double (* GetNatLon)( AstWcsMap *, int * );
-   double (* GetPV)( AstWcsMap *, int, int, int * );
-   int (* GetWcsAxis)( AstWcsMap *, int, int * );
-   int (* GetWcsType)( AstWcsMap *, int * );
-   int (* GetPVMax)( AstWcsMap *, int, int * );
-   int (* TestPV)( AstWcsMap *, int, int, int * );
-   void (* ClearPV)( AstWcsMap *, int, int, int * );
-   void (* SetPV)( AstWcsMap *, int, int, double, int * );
-   int (* IsZenithal)( AstWcsMap *, int * );
-
-} AstWcsMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstWcsMapGlobals {
-   AstWcsMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstWcsMapGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(WcsMap)          /* Check class membership */
-astPROTO_ISA(WcsMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstWcsMap *astWcsMap_( int, int, int, int, const char *, int *, ...);
-#else
-AstWcsMap *astWcsMapId_( int, int, int, int, const char *, ... )__attribute__((format(printf,5,6)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstWcsMap *astInitWcsMap_( void *, size_t, int, AstWcsMapVtab *,
-                           const char *, int, int, int, int, int * );
-
-/* Vtab initialiser. */
-void astInitWcsMapVtab_( AstWcsMapVtab *, const char *, int * );
-
-/* Loader. */
-AstWcsMap *astLoadWcsMap_( void *, size_t, AstWcsMapVtab *,
-                           const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitWcsMapGlobals_( AstWcsMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-   const char *astWcsPrjDesc_( int, int * );
-   const char *astWcsPrjName_( int, int * );
-   double astGetNatLat_( AstWcsMap *, int * );
-   double astGetNatLon_( AstWcsMap *, int * );
-   double astGetPV_( AstWcsMap *, int, int, int * );
-   int astWcsPrjType_( const char *, int * );
-   int astGetWcsAxis_( AstWcsMap *, int, int * );
-   int astGetWcsType_( AstWcsMap *, int * );
-   int astGetPVMax_( AstWcsMap *, int, int * );
-   int astTestPV_( AstWcsMap *, int, int, int * );
-   int astIsZenithal_( AstWcsMap *, int * );
-   void astClearPV_( AstWcsMap *, int, int, int * );
-   void astSetPV_( AstWcsMap *, int, int, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckWcsMap(this) astINVOKE_CHECK(WcsMap,this,0)
-#define astVerifyWcsMap(this) astINVOKE_CHECK(WcsMap,this,1)
-
-/* Test class membership. */
-#define astIsAWcsMap(this) astINVOKE_ISA(WcsMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astWcsMap astINVOKE(F,astWcsMap_)
-#else
-#define astWcsMap astINVOKE(F,astWcsMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitWcsMap(mem,size,init,vtab,name,ncoord,type,lon,lat) \
-astINVOKE(O,astInitWcsMap_(mem,size,init,vtab,name,ncoord,type,lon,lat,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitWcsMapVtab(vtab,name) astINVOKE(V,astInitWcsMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadWcsMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadWcsMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckWcsMap to validate WcsMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-
-#define astWcsPrjType(ctype) astWcsPrjType_(ctype,STATUS_PTR)
-#define astWcsPrjName(type) astWcsPrjName_(type,STATUS_PTR)
-#define astWcsPrjDesc(type) astWcsPrjDesc_(type,STATUS_PTR)
-
-#define astClearPV(this,i,j) \
-astINVOKE(V,astClearPV_(astCheckWcsMap(this),i,j,STATUS_PTR))
-#define astGetPV(this,i,j) \
-astINVOKE(V,astGetPV_(astCheckWcsMap(this),i,j,STATUS_PTR))
-#define astSetPV(this,i,j,par) \
-astINVOKE(V,astSetPV_(astCheckWcsMap(this),i,j,par,STATUS_PTR))
-#define astTestPV(this,i,j) \
-astINVOKE(V,astTestPV_(astCheckWcsMap(this),i,j,STATUS_PTR))
-
-#define astGetWcsType(this) \
-astINVOKE(V,astGetWcsType_(astCheckWcsMap(this),STATUS_PTR))
-
-#define astGetPVMax(this,i) \
-astINVOKE(V,astGetPVMax_(astCheckWcsMap(this),i,STATUS_PTR))
-
-#define astGetNatLat(this) \
-astINVOKE(V,astGetNatLat_(astCheckWcsMap(this),STATUS_PTR))
-
-#define astGetNatLon(this) \
-astINVOKE(V,astGetNatLon_(astCheckWcsMap(this),STATUS_PTR))
-
-#define astGetWcsAxis(this,index) \
-astINVOKE(V,astGetWcsAxis_(astCheckWcsMap(this),index,STATUS_PTR))
-
-#define astIsZenithal(this) \
-astINVOKE(V,astIsZenithal_(astCheckWcsMap(this),STATUS_PTR))
-
-#endif
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/wcsmath.h b/ast-5.3-1/wcsmath.h
deleted file mode 100644
index c217bbb..0000000
--- a/ast-5.3-1/wcsmath.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*=============================================================================
-*
-*   WCSLIB - an implementation of the FITS WCS proposal.
-*   Copyright (C) 1995-2002, Mark Calabretta
-*
-*   This library is free software; you can redistribute it and/or modify it
-*   under the terms of the GNU Library General Public License as published
-*   by the Free Software Foundation; either version 2 of the License, or (at
-*   your option) any later version.
-*
-*   This library is distributed in the hope that it will be useful, but
-*   WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
-*   General Public License for more details.
-*
-*   You should have received a copy of the GNU Library General Public License
-*   along with this library; if not, write to the Free Software Foundation,
-*   Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-*   Correspondence concerning WCSLIB may be directed to:
-*      Internet email: mcalabre at atnf.csiro.au
-*      Postal address: Dr. Mark Calabretta,
-*                      Australia Telescope National Facility,
-*                      P.O. Box 76,
-*                      Epping, NSW, 2121,
-*                      AUSTRALIA
-*
-*   Author: Mark Calabretta, Australia Telescope National Facility
-*   $Id: wcsmath.h,v 1.1.1.1 2009/11/02 16:01:18 joye Exp $
-*=============================================================================
-*
-*  This version of wcstrig.h is based on the version in wcslib-2.9, but has
-*  been modified in the following ways by the Starlink project (e-mail: 
-*  ussc at star.rl.ac.uk):
-*     -  Changed the name of the WCSLIB_MATH macro to WCSLIB_MATH_INCLUDED
-*===========================================================================*/
-
-#ifndef WCSLIB_MATH_INCLUDED
-#define WCSLIB_MATH_INCLUDED
-
-#ifdef PI
-#undef PI
-#endif
-
-#ifdef D2R
-#undef D2R
-#endif
-
-#ifdef R2D
-#undef R2D
-#endif
-
-#ifdef SQRT2
-#undef SQRT2
-#endif
-
-#ifdef SQRT2INV
-#undef SQRT2INV
-#endif
-
-#define PI 3.141592653589793238462643
-#define D2R PI/180.0
-#define R2D 180.0/PI
-#define SQRT2 1.4142135623730950488
-#define SQRT2INV 1.0/SQRT2
-
-#endif /* WCSLIB_MATH_INCLUDED */
diff --git a/ast-5.3-1/wcstrig.c b/ast-5.3-1/wcstrig.c
deleted file mode 100644
index c8dd85f..0000000
--- a/ast-5.3-1/wcstrig.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*============================================================================
-*
-*   WCSLIB - an implementation of the FITS WCS proposal.
-*   Copyright (C) 1995-2002, Mark Calabretta
-*
-*   This library is free software; you can redistribute it and/or modify it
-*   under the terms of the GNU Library General Public License as published
-*   by the Free Software Foundation; either version 2 of the License, or (at
-*   your option) any later version.
-*
-*   This library is distributed in the hope that it will be useful, but
-*   WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
-*   General Public License for more details.
-*
-*   You should have received a copy of the GNU Library General Public License
-*   along with this library; if not, write to the Free Software Foundation,
-*   Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-*   Correspondence concerning WCSLIB may be directed to:
-*      Internet email: mcalabre at atnf.csiro.au
-*      Postal address: Dr. Mark Calabretta,
-*                      Australia Telescope National Facility,
-*                      P.O. Box 76,
-*                      Epping, NSW, 2121,
-*                      AUSTRALIA
-*
-*=============================================================================
-*
-*  This version of wcstrig.c is based on the version in wcslib-2.9, but has
-*  been modified in the following ways by the Starlink project (e-mail: 
-*  ussc at star.rl.ac.uk):
-*     -  Support for non-ANSI C "const" class removed
-*     -  Changed names of projection functions and degrees trig functions
-*        to avoid clashes with wcslib. 
-*=============================================================================
-*
-*   The functions defined herein are trigonometric or inverse trigonometric
-*   functions which take or return angular arguments in decimal degrees.
-*
-*   $Id: wcstrig.c,v 1.1.1.1 2009/11/02 16:01:18 joye Exp $
-*---------------------------------------------------------------------------*/
-
-#include <math.h>
-#include "wcsmath.h"
-#include "wcstrig.h"
-
-double astCosd(angle)
-
-const double angle;
-
-{
-   double resid;
-
-   resid = fabs(fmod(angle,360.0));
-   if (resid == 0.0) {
-      return 1.0;
-   } else if (resid == 90.0) {
-      return 0.0;
-   } else if (resid == 180.0) {
-      return -1.0;
-   } else if (resid == 270.0) {
-      return 0.0;
-   }
-
-   return cos(angle*D2R);
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astSind(angle)
-
-const double angle;
-
-{
-   double resid;
-
-   resid = fmod(angle-90.0,360.0);
-   if (resid == 0.0) {
-      return 1.0;
-   } else if (resid == 90.0) {
-      return 0.0;
-   } else if (resid == 180.0) {
-      return -1.0;
-   } else if (resid == 270.0) {
-      return 0.0;
-   }
-
-   return sin(angle*D2R);
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astTand(angle)
-
-const double angle;
-
-{
-   double resid;
-
-   resid = fmod(angle,360.0);
-   if (resid == 0.0 || fabs(resid) == 180.0) {
-      return 0.0;
-   } else if (resid == 45.0 || resid == 225.0) {
-      return 1.0;
-   } else if (resid == -135.0 || resid == -315.0) {
-      return -1.0;
-   }
-
-   return tan(angle*D2R);
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astACosd(v)
-
-const double v;
-
-{
-   if (v >= 1.0) {
-      if (v-1.0 <  WCSTRIG_TOL) return 0.0;
-   } else if (v == 0.0) {
-      return 90.0;
-   } else if (v <= -1.0) {
-      if (v+1.0 > -WCSTRIG_TOL) return 180.0;
-   }
-
-   return acos(v)*R2D;
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astASind(v)
-
-const double v;
-
-{
-   if (v <= -1.0) {
-      if (v+1.0 > -WCSTRIG_TOL) return -90.0;
-   } else if (v == 0.0) {
-      return 0.0;
-   } else if (v >= 1.0) {
-      if (v-1.0 <  WCSTRIG_TOL) return 90.0;
-   }
-
-   return asin(v)*R2D;
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astATand(v)
-
-const double v;
-
-{
-   if (v == -1.0) {
-      return -45.0;
-   } else if (v == 0.0) {
-      return 0.0;
-   } else if (v == 1.0) {
-      return 45.0;
-   }
-
-   return atan(v)*R2D;
-}
-
-/*--------------------------------------------------------------------------*/
-
-double astATan2d(y, x)
-
-const double x, y;
-
-{
-   if (y == 0.0) {
-      if (x >= 0.0) {
-         return 0.0;
-      } else if (x < 0.0) {
-         return 180.0;
-      }
-   } else if (x == 0.0) {
-      if (y > 0.0) {
-         return 90.0;
-      } else if (y < 0.0) {
-         return -90.0;
-      }
-   }
-
-   return atan2(y,x)*R2D;
-}
diff --git a/ast-5.3-1/wcstrig.h b/ast-5.3-1/wcstrig.h
deleted file mode 100644
index c2e1895..0000000
--- a/ast-5.3-1/wcstrig.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*=============================================================================
-*
-*   WCSLIB - an implementation of the FITS WCS proposal.
-*   Copyright (C) 1995-2002, Mark Calabretta
-*
-*   This library is free software; you can redistribute it and/or modify it
-*   under the terms of the GNU Library General Public License as published
-*   by the Free Software Foundation; either version 2 of the License, or (at
-*   your option) any later version.
-*
-*   This library is distributed in the hope that it will be useful, but
-*   WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
-*   General Public License for more details.
-*
-*   You should have received a copy of the GNU Library General Public License
-*   along with this library; if not, write to the Free Software Foundation,
-*   Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*
-*   Correspondence concerning WCSLIB may be directed to:
-*      Internet email: mcalabre at atnf.csiro.au
-*      Postal address: Dr. Mark Calabretta,
-*                      Australia Telescope National Facility,
-*                      P.O. Box 76,
-*                      Epping, NSW, 2121,
-*                      AUSTRALIA
-*
-*   Author: Mark Calabretta, Australia Telescope National Facility
-*   $Id: wcstrig.h,v 1.1.1.1 2009/11/02 16:01:18 joye Exp $
-*=============================================================================
-*
-*  This version of wcstrig.h is based on the version in wcslib-2.9, but has
-*  been modified in the following ways by the Starlink project (e-mail: 
-*  ussc at star.rl.ac.uk):
-*     -  Support for non-ANSI C prototypes removed
-*     -  Changed the name of the WCSLIB_TRIG macro to WCSLIB_TRIG_INCLUDED
-*     -  Changed names of degrees trig functions to avoid clashes with 
-*        wcslib.
-*===========================================================================*/
-
-#ifndef WCSLIB_TRIG_INCLUDED
-#define WCSLIB_TRIG_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-double astCosd(const double);
-double astSind(const double);
-double astTand(const double);
-double astACosd(const double);
-double astASind(const double);
-double astATand(const double);
-double astATan2d(const double, const double);
-
-/* Domain tolerance for asin and acos functions. */
-#define WCSTRIG_TOL 1e-10
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* WCSLIB_TRIG_INCLUDED */
diff --git a/ast-5.3-1/winmap.c b/ast-5.3-1/winmap.c
deleted file mode 100644
index 880ee08..0000000
--- a/ast-5.3-1/winmap.c
+++ /dev/null
@@ -1,4384 +0,0 @@
-/*
-*class++
-*  Name:
-*     WinMap
-
-*  Purpose:
-*     Map one window on to another by scaling and shifting each axis.
-
-*  Constructor Function:
-c     astWinMap
-f     AST_WINMAP
-
-*  Description:
-*     A Winmap is a linear Mapping which transforms a rectangular
-*     window in one coordinate system into a similar window in another
-*     coordinate system by scaling and shifting each axis (the window
-*     edges being parallel to the coordinate axes).
-*
-*     A WinMap is specified by giving the coordinates of two opposite
-*     corners (A and B) of the window in both the input and output
-*     coordinate systems.
-
-*  Inheritance:
-*     The WinMap class inherits from the Mapping class.
-
-*  Attributes:
-*     The WinMap class does not define any new attributes beyond those
-*     which are applicable to all Mappings.
-
-*  Functions:
-c     The WinMap class does not define any new functions beyond those
-f     The WinMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     23-OCT-1996 (DSB):
-*        Original version.
-*     4-MAR-1997 (RFWS):
-*        Tidied public prologues.
-*     11-MAR-1997 (DSB):
-*        Added MapMerge method and associated bits.
-*     30-JUN-1997 (DSB):
-*        Bug fixed which caused the MapMerge method to generate a
-*        segmentation violation.
-*     24-MAR-1998 (RFWS):
-*        Improved output format from Dump.
-*     9-APR-1998 (DSB):
-*        MapMerge modified to allow merging of WinMaps with ZoomMaps and 
-*        and UnitMaps in parallel.
-*     4-SEP-1998 (DSB):
-*        Improved MapMerge so that WinMaps can change places with a wider
-*        range of PermMaps, allowing them to approach closer to a Mapping
-*        with which they can merge.
-*     22-FEB-1999 (DSB):
-*        Corrected logic of MapMerge method to avoid infinite looping.
-*     5-MAY-1999 (DSB):
-*        More corrections to MapMerge: Cleared up errors in the use of the 
-*        supplied invert flags, and corrected logic for deciding which 
-*        neighbouring Mapping to swap with. 
-*     16-JUL-1999 (DSB):
-*        Fixed memory leaks in WinMat and MapMerge.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitWinMapVtab
-*        method.
-*     8-SEP-2003 (DSB):
-*        Allow WinMaps to swap with WcsMaps if possible.
-*     10-NOV-2003 (DSB):
-*        Modified functions which swap a WinMap with another Mapping
-*        (e.g. WinPerm, etc), to simplify the returned Mappings.
-*     23-APR-2004 (DSB):
-*        Changes to simplification algorithm.
-*     1-SEP-2004 (DSB):
-*        Ensure do1 and do2 are initialised before use in MapMerge.
-*     7-SEP-2005 (DSB):
-*        Take account of the Invert flag when using the soom factor from
-*        a ZoomMap.
-*     14-FEB-2006 (DSB):
-*        Override astGetObjSize.
-*     15-MAR-2006 (DSB):
-*        Override astEqual.
-*     23-AUG-2006 (DSB):
-*        Correct initialisation of "result" in the Equal function.
-*     19-JAN-2007 (DSB):
-*        Fix memory leak.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS WinMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory management facilities */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "matrixmap.h"           /* Linear mappings */
-#include "unitmap.h"             /* Unit mappings */
-#include "zoommap.h"             /* Zoom mappings */
-#include "permmap.h"             /* Axis permutations */
-#include "cmpmap.h"              /* Compound mappings */
-#include "wcsmap.h"              /* Celestial projections */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "winmap.h"              /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static int (* parent_getobjsize)( AstObject *, int * );
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-
-#ifdef THREAD_SAFE
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; 
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(WinMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(WinMap,Class_Init)
-#define class_vtab astGLOBAL(WinMap,Class_Vtab)
-
-
-#include <pthread.h>
-
-
-#else
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstWinMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstWinMap *astWinMapId_( int, const double [], const double [], 
-                         const double [], const double [], const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static AstWinMap *WinUnit( AstWinMap *, AstUnitMap *, int, int, int * );
-static AstWinMap *WinWin( AstMapping *, AstMapping *, int, int, int, int * );
-static AstWinMap *WinZoom( AstWinMap *, AstZoomMap *, int, int, int, int, int * );
-static int GetObjSize( AstObject *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int CanSwap( AstMapping *, AstMapping *, int, int, int *, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int WinTerms( AstWinMap *, double **, double **, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void PermGet( AstPermMap *, int **, int **, double **, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void WinMat( AstMapping **, int *, int, int * );
-static void WinPerm( AstMapping **, int *, int, int * );
-static void WinWcs( AstMapping **, int *, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-
-/* Function Macros */
-/* =============== */
-/* Macros which return the maximum and minimum of two values. */
-#define MAX(aa,bb) ((aa)>(bb)?(aa):(bb))
-#define MIN(aa,bb) ((aa)<(bb)?(aa):(bb))
-
-/* Macro to check for equality of floating point values. We cannot
-compare bad values directory because of the danger of floating point
-exceptions, so bad values are dealt with explicitly. */
-#define EQUAL(aa,bb) (((aa)==AST__BAD)?(((bb)==AST__BAD)?1:0):(((bb)==AST__BAD)?0:(fabs((aa)-(bb))<=1.0E5*MAX((fabs(aa)+fabs(bb))*DBL_EPSILON,DBL_MIN))))
-
-/* Member functions. */
-/* ================= */
-static int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-                    int *simpler, int *status ){
-/*
-*  Name:
-*     CanSwap
-
-*  Purpose:
-*     Determine if two Mappings could be swapped.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     int CanSwap( AstMapping *map1, AstMapping *map2, int inv1, int inv2,
-*                  int *simpler, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     This function returns a flag indicating if the pair of supplied
-*     Mappings could be replaced by an equivalent pair of Mappings from the 
-*     same classes as the supplied pair, but in reversed order. Each pair
-*     of Mappings is considered to be compunded in series. The supplied 
-*     Mapings are not changed in any way.
-
-*  Parameters:
-*     map1
-*        The Mapping to be applied first.
-*     map2
-*        The Mapping to be applied second.
-*     inv1
-*        The invert flag to use with map1. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     inv2
-*        The invert flag to use with map2. 
-*     simpler
-*        Addresss of a location at which to return a flag indicating if
-*        the swapped Mappings would be intrinsically simpler than the
-*        original Mappings.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     1 if the Mappings could be swapped, 0 otherwise.
-
-*  Notes:
-*     -  One of the supplied pair of Mappings must be a WinMap.
-*     -  A value of 0 is returned if the two Mappings could be merged into
-*     a single Mapping.
-*     -  A value of 0 is returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstMapping *nowin;        /* Pointer to non-WinMap Mapping */
-   AstWinMap *win;           /* Pointer to the WinMap */
-   const char *class1;       /* Pointer to map1 class string */
-   const char *class2;       /* Pointer to map2 class string */
-   const char *nowin_class;  /* Pointer to non-WinMap class string */
-   double *consts;           /* Pointer to constants array */
-   int *inperm;              /* Pointer to input axis permutation array */
-   int *outperm;             /* Pointer to output axis permutation array */
-   int axlat;                /* Latitude axis in WcsMap */
-   int axlon;                /* Longitude axis in WcsMap */
-   int i;                    /* Loop count */
-   int invert[ 2 ];          /* Original invert flags */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-   int ret;                  /* Returned flag */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   ret = 0;
-   *simpler = 0;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   invert[ 0 ] = astGetInvert( map1 );
-   astSetInvert( map1, inv1 );
-
-   invert[ 1 ] = astGetInvert( map2 );
-   astSetInvert( map2, inv2 );
-   
-/* Get the classes of the two mappings. */
-   class1 = astGetClass( map1 );
-   class2 = astGetClass( map2 );
-   if( astOK ){
-
-/* Get a pointer to the non-WinMap Mapping. */
-      if( !strcmp( class1, "WinMap" ) ){
-         nowin = map2;
-         nowin_class = class2;
-         win = (AstWinMap *) map1;
-      } else {
-         nowin = map1;
-         nowin_class = class1;
-         win = (AstWinMap *) map2;
-      }
-
-/* If it is a MatrixMap, the Mappings can be swapped. */
-      if( !strcmp( nowin_class, "MatrixMap" ) ){
-         ret = 1;
-
-/* If it is a WcsMap, the Mappings can be swapped if the WinMap is
-   equivalent to a unit transformation on the celestial axes of the
-   WcsMap. */
-      } else if( !strcmp( nowin_class, "WcsMap" ) ){
-
-/* Get the indices of the celestial coordinates inthe WcsMap. */
-         axlat = astGetWcsAxis( (AstWcsMap *) nowin, 1 );
-         axlon = astGetWcsAxis( (AstWcsMap *) nowin, 0 );
-
-/* Check the shift and scale for these axes. */
-         ret = ( win->a[ axlon ] == 0.0 && win->b[ axlon ] == 1.0 && 
-                 win->a[ axlat ] == 0.0 && win->b[ axlat ] == 1.0 );
-         
-/* If it is a PermMap, the Mappings can be swapped so long as all links 
-   between input and output axes in the PermMap are bi-directional. This
-   does not preclude the existence of unconnected axes, which do not 
-   have links (bi-directional or otherwise). */
-      } else if( !strcmp( nowin_class, "PermMap" ) ){
-
-/* Get the number of input and output coordinates. */
-         nin = astGetNin( nowin );
-         nout = astGetNout( nowin );
-
-/* We need to know the axis permutation arrays and constants array for
-   the PermMap. */
-         PermGet( (AstPermMap *) nowin, &outperm, &inperm, &consts, status );
-         if( astOK ) {
-
-/* Indicate we can swap with the PermMap. */
-            ret = 1;
-
-/* Check each output axis. If any links between axes are found which are
-   not bi-directional, indicate that we cannot swap with the PermMap. */
-            for( i = 0; i < nout; i++ ){
-               if( outperm[ i ] >= 0 && outperm[ i ] < nin ) {
-                  if( inperm[ outperm[ i ] ] != i ) {
-                     ret = 0;
-                     break;
-                  }
-               }
-            }
-
-/* Check each input axis. If any links between axes are found which are
-   not bi-directional, indicate that we cannot swap with the PermMap. */
-            for( i = 0; i < nin; i++ ){
-               if( inperm[ i ] >= 0 && inperm[ i ] < nout ) {
-                  if( outperm[ inperm[ i ] ] != i ) {
-                     ret = 0;
-                     break;
-                  }
-               }
-            }
-
-/* If we can swap with the PermMap, the swapped Mappings may be
-   intrinsically simpler than the original mappings. */
-            if( ret ) {
-
-/* If the PermMap preceeds the WinMap, this will be the case if the PermMap
-   has more outputs than inputs. If the WinMap preceeds the PermMap, this 
-   will be the case if the PermMap has more inputs than outputs. */
-               *simpler = ( nowin == map1 ) ? nout > nin : nin > nout;
-            }
-
-/* Free the axis permutation and constants arrays. */
-            outperm = (int *) astFree( (void *) outperm );
-            inperm = (int *) astFree( (void *) inperm );
-            consts = (double *) astFree( (void *) consts );
-         }
-      }
-   }
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied MatrixMaps. */
-   astSetInvert( map1, invert[ 0 ] );
-   astSetInvert( map2, invert[ 1 ] );
-   
-/* Return the answer. */
-   return astOK ? ret : 0;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     WinMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     WinMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstWinMap *this;             /* Pointer to the WinMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the WinMap structure. */
-   this = (AstWinMap *) this_object;
-
-/* At the moment the WinMap class has no attributes, so pass it on to the 
-   parent method for further interpretation. */
-   (*parent_clearattrib)( this_object, attrib, status );
-
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two WinMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     WinMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two WinMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a WinMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the WinMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *that;        
-   AstWinMap *this;        
-   double *a_that;
-   double *a_this;
-   double *b_that;
-   double *b_this;
-   int i;           
-   int nin;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two WinMap structures. */
-   this = (AstWinMap *) this_object;
-   that = (AstWinMap *) that_object;
-
-/* Check the second object is a WinMap. We know the first is a
-   WinMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAWinMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      if( astGetNin( that ) == nin ) {
-
-/* Assume the WinMaps are equivalent. */
-         result = 1;
-
-/* Compare the shift and scale terms from both WinMaps ignoring the
-   setting of the Invert flag for the moment. */
-         for( i = 0; i < nin; i++ ) {
-            if( !EQUAL( this->a[ i ], that->a[ i ] ) ||
-                !EQUAL( this->b[ i ], that->b[ i ] ) ) {
-               result = 0;
-               break;
-            }
-         }           
-
-/* If the scale and shifts are equal, check the Invert flags are equal. */
-         if( result ) {
-            result= ( astGetInvert( this ) == astGetInvert( that ) );
-
-/* If the scale and shifts differ, there is still a chance that the
-   WinMaps may be equivalent if their Invert flags differ. */
-         } else if( astGetInvert( this ) != astGetInvert( that ) ) {
-
-/* Create copies of the scale and shift terms from the two WinMaps, taking 
-   into account the setting of the Invert attribute. Finding the inverted
-   terms involves arithmetic which introduces rounding errors, so this
-   test is not as reliable as the above direct comparison of terms. */
-            astWinTerms( this, &a_this, &b_this );
-            astWinTerms( that, &a_that, &b_that );
-            result = 1;
-
-            for( i = 0; i < nin; i++ ) {
-               if( !EQUAL( a_this[ i ], a_that[ i ] ) ||
-                   !EQUAL( b_this[ i ], b_that[ i ] ) ) {
-                  result = 0;
-                  break;
-               }
-            }           
-
-/* Free resources */
-            a_this = astFree( a_this );
-            a_that = astFree( a_that );
-            b_this = astFree( b_this );
-            b_that = astFree( b_that );
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     WinMap member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is always one.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 1;
-}
-
-static int GetObjSize( AstObject *this_object, int *status ) {
-/*
-*  Name:
-*     GetObjSize
-
-*  Purpose:
-*     Return the in-memory size of an Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     int GetObjSize( AstObject *this, int *status ) 
-
-*  Class Membership:
-*     WinMap member function (over-rides the astGetObjSize protected
-*     method inherited from the parent class).
-
-*  Description:
-*     This function returns the in-memory size of the supplied WinMap,
-*     in bytes.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The Object size, in bytes.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *this;         /* Pointer to WinMap structure */
-   int result;                /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointers to the WinMap structure. */
-   this = (AstWinMap *) this_object;
-
-/* Invoke the GetObjSize method inherited from the parent class, and then
-   add on any components of the class structure defined by thsi class
-   which are stored in dynamically allocated memory. */
-   result = (*parent_getobjsize)( this_object, status );
-   result += astTSizeOf( this->a );
-   result += astTSizeOf( this->b );
-
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     WinMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a WinMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the WinMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the WinMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50              /* Max. characters in result buffer */
-
-/* Local Variables: */
-   AstWinMap *this;             /* Pointer to the WinMap structure */
-   const char *result;           /* Pointer value to return */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the WinMap structure. */
-   this = (AstWinMap *) this_object;
-
-/* At the moment the WinMap class has no attributes, so pass it on to the 
-   parent method for further interpretation. */
-   result = (*parent_getattrib)( this_object, attrib, status );
-
-/* Return the result. */
-   return result;
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-void astInitWinMapVtab_(  AstWinMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitWinMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a WinMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void astInitWinMapVtab( AstWinMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     WinMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the WinMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAWinMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->WinTerms = WinTerms;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-   parent_getobjsize = object->GetObjSize;
-   object->GetObjSize = GetObjSize;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->MapSplit = MapSplit;
-   mapping->Rate = Rate;
-   mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetDump( vtab, Dump, "WinMap", "Map one window on to another" );
-   astSetCopy( (AstObjectVtab *) vtab, Copy );
-   astSetDelete( (AstObjectVtab *) vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     WinMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated WinMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated WinMap with a Mapping which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated WinMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the WinMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        WinMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated WinMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstCmpMap *cm;        /* Pointer to neighbouring CmpMap */
-   AstMapping **maplt;   /* New mappings list pointer */
-   AstMapping *map2;     /* Pointer to replacement Mapping */
-   AstMapping *mc[2];    /* Copies of supplied Mappings to swap */
-   AstMapping *nc[2];    /* Copies of neighbouring Mappings to merge */
-   AstMapping *smc0;     /* Simplified Mapping */
-   AstMapping *smc1;     /* Simplified Mapping */
-   AstMapping *simp1;    /* Simplified Mapping */
-   AstMapping *simp2;    /* Simplified Mapping */
-   AstMatrixMap *mtr;    /* Pointer to replacement MatrixMap */
-   AstWinMap *newwm2;    /* Second component WinMap */
-   AstWinMap *newwm;     /* Pointer to replacement WinMap */
-   AstWinMap *oldwm;     /* Pointer to supplied WinMap */
-   const char *class1;   /* Pointer to first Mapping class string */
-   const char *class2;   /* Pointer to second Mapping class string */
-   const char *nclass;   /* Pointer to neighbouring Mapping class */
-   double *a;            /* Pointer to zero terms */
-   double *b;            /* Pointer to scale terms */
-   int *invlt;           /* New invert flags list pointer */
-   int cmlow;            /* Is lower neighbour a CmpMap? */
-   int diag;             /* Is WinMap equivalent to a diagonal matrix? */
-   int do1;              /* Would a backward swap make a simplification? */
-   int do2;              /* Would a forward swap make a simplification? */
-   int i1;               /* Index of first WinMap to merge */
-   int i2;               /* Index of last WinMap to merge */
-   int i;                /* Loop counter */
-   int ic[2];            /* Copies of supplied invert flags to swap */
-   int inc[4];           /* Copies of supplied invert flags to merge */
-   int invert;           /* Should the inverted Mapping be used? */
-   int neighbour;        /* Index of Mapping with which to swap */
-   int nin2;             /* No. of inputs for second component WinMap */
-   int nin;              /* Number of coordinates for WinMap */
-   int nmapt;            /* No. of Mappings in list */
-   int nstep1;           /* No. of Mappings backwards to next mergable Mapping */
-   int nstep2;           /* No. of Mappings forward to next mergable Mapping */
-   int old_winv;         /* original Invert value for supplied WinMap */
-   int result;           /* Result value to return */
-   int ser;              /* Are Mappings applied in series? */
-   int simpler;          /* Is the resulting Mapping simpler than original? */
-   int swap;             /* Is there an advantage in swapping mappings? */
-   int swaphi;           /* Can WinMap be swapped with higher neighbour? */
-   int swaplo;           /* Can WinMap be swapped with lower neighbour? */
-
-/* Initialise. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   i1 = 0;
-   i2 = 0;
-   neighbour = 0;
-
-/* Get the number of axes for the WinMap. */
-   nin = astGetNin( ( *map_list )[ where ] );
-
-/* Get a pointer to the WinMap. */
-   oldwm = (AstWinMap *) this;
-
-/* First of all, see if the WinMap can be replaced by a simpler Mapping,
-   without reference to the neighbouring Mappings in the list.           */
-/* ======================================================================*/
-/* If the shift terms in the WinMap are all zero, the WinMap can be
-   replaced by a diagonal MatrixMap (which is faster to compute). Check the 
-   shift terms. */
-   diag = 1;
-   newwm = (AstWinMap *) ( *map_list )[ where ];
-   for( i = 0; i < nin; i++ ){
-      if( !EQUAL( ( newwm->a )[ i ], 0.0 ) ){
-         diag = 0;
-         break;
-      }
-   }
-
-/* If all the shift terms are zero... */
-   if( diag ){
-
-/* Temporarily set the Invert attribute of the WinMap to the supplied
-   value. */
-      old_winv = astGetInvert( newwm );
-      astSetInvert( newwm, ( *invert_list )[ where ] );
-
-/* Get a copy of the scale terms from the WinMap. */
-      astWinTerms( newwm, NULL, &b );   
-
-/* Create a diagonal MatrixMap holding the scale terms. */   
-      mtr = astMatrixMap( nin, nin, 1, b, "", status );
-
-/* Restore the Invert attribute of the supplied WinMap. */
-      astSetInvert( newwm, old_winv );
-
-/* Free the memory used to hold the scale terms. */
-      b = (double *) astFree( (void *) b );
-
-/* Annul the WinMap pointer in the list and replace it with the MatrixMap
-   pointer, and indicate that the forward transformation of the returned
-   MatrixMap should be used. */
-      (void) astAnnul( ( *map_list )[ where ] );
-      ( *map_list )[ where ] = (AstMapping *) mtr;
-      ( *invert_list )[ where ] = 0;
-
-/* Return the index of the first modified element. */
-      result = where;
-         
-/* If the WinMap itself could not be simplified, see if it can be merged
-   with the Mappings on either side of it in the list. */
-   } else {
-
-/* Store the classes of the neighbouring Mappings in the list. */
-       class1 = ( where > 0 ) ? astGetClass( ( *map_list )[ where - 1 ] ) : NULL;
-       class2 = ( where < *nmap - 1 ) ? astGetClass( ( *map_list )[ where + 1 ] ) : NULL;
-
-/* In series. */
-/* ========== */
-      if ( series ) {
-
-/* We first look to see if the WinMap can be merged with one of its
-   neighbours, resulting in a reduction of one in the number of Mappings
-   in the list. WinMaps can only merge directly with another WinMap, a
-   ZoomMap, or a UnitMap. */
-         if( class1 && ( !strcmp( class1, "WinMap" ) ||
-                         !strcmp( class1, "ZoomMap" ) ||
-                         !strcmp( class1, "UnitMap" ) ) ){
-            nclass = class1;
-            i1 = where - 1;
-            i2 = where;
-
-         } else if( class2 && ( !strcmp( class2, "WinMap" ) ||
-                                !strcmp( class2, "ZoomMap" ) ||
-                                !strcmp( class2, "UnitMap" ) ) ){
-            nclass = class2;
-            i1 = where;
-            i2 = where + 1;
-
-         } else {
-            nclass = NULL;
-         }
-
-/* If the WinMap can merge with one of its neighbours, create the merged
-   Mapping. */
-         if( nclass ){
-
-            if( !strcmp( nclass, "WinMap" ) ){
-               newwm = WinWin( ( *map_list )[ i1 ], ( *map_list )[ i2 ],
-                               ( *invert_list )[ i1 ], ( *invert_list )[ i2 ],
-                               1, status );
-               invert = 0;
-
-            } else if( !strcmp( nclass, "ZoomMap" ) ){
-               if( i1 == where ){
-                  newwm = WinZoom( (AstWinMap *)( *map_list )[ i1 ], 
-                                   (AstZoomMap *)( *map_list )[ i2 ],
-                           ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], 1, 1, status );
-               } else {
-                  newwm = WinZoom( (AstWinMap *)( *map_list )[ i2 ], 
-                                   (AstZoomMap *)( *map_list )[ i1 ],
-                           ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], 0, 1, status );
-               }
-               invert = 0;
-
-            } else {
-               newwm = astClone( ( *map_list )[ where ] );
-               invert = ( *invert_list )[ where ];
-            }
-
-/* If succesfull... */
-            if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   WinMap. Also set the invert flag. */ 
-               (void) astAnnul( ( *map_list )[ i1 ] );
-               ( *map_list )[ i1 ] = (AstMapping *) newwm;
-               ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-               (void) astAnnul( ( *map_list )[ i2 ] );
-               for ( i = i2 + 1; i < *nmap; i++ ) {
-                  ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-                  ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-               }
-
-/* Clear the vacated element at the end. */
-               ( *map_list )[ *nmap - 1 ] = NULL;
-               ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-               ( *nmap )--;
-               result = i1;
-
-            }
-
-/* If one of the neighbours is a (parallel) CmpMap, we convert the WinMap
-   into an equivalent parallel CmpMap, and then merge this parallel
-   CmpMap with the neighbouring parallel CmpMap to create a parallel CmpMap
-   containing two series CmpMaps. */
-         } else if( ( class1 && !strcmp( "CmpMap", class1 ) ) ||
-                    ( class2 && !strcmp( "CmpMap", class2 ) ) ) {
-
-/* Identify the WinMap and the CmpMap. */
-            if( class1 && !strcmp( "CmpMap", class1 ) ) {
-               i1 = where - 1;
-               i2 = where;
-               cm = (AstCmpMap *) ( *map_list )[ where - 1 ];
-               cmlow = 1;
-
-            } else {
-               i1 = where;
-               i2 = where + 1;
-               cm = (AstCmpMap *) ( *map_list )[ where + 1 ];
-               cmlow = 0;
-
-            }
-
-/* Temporarily set the required Invert attributes in the two Mappings. */
-            inc[ 0 ] = astGetInvert( ( *map_list )[ i1 ] );
-            astSetInvert( ( *map_list )[ i1 ], ( *invert_list )[ i1 ] );
-
-            inc[ 1 ] = astGetInvert( ( *map_list )[ i2 ] );
-            astSetInvert( ( *map_list )[ i2 ], ( *invert_list )[ i2 ] );
-
-/* Now get pointers to the scale and zero terms of the nominated WinMap
-   (these describe the forward transformation, taking into account the 
-   setting of the Invert flag). */
-            (void) astWinTerms( oldwm , &a, &b );   
-
-/* Get pointers to the two components of the parallel CmpMap. */
-            astDecompose( cm, mc, mc + 1, &ser, ic, ic + 1 );
-
-/* Check component Mappings are combined in parallel. */
-            map2 = NULL;
-            if( astOK && !ser ) { 
-
-/* Temporarily set the required Invert attributes in the two component 
-   Mappings to the indicated values. */
-               inc[ 2 ] = astGetInvert( mc[ 0 ] );
-               astSetInvert( mc[ 0 ], ic[ 0 ] );
-
-               inc[ 3 ] = astGetInvert( mc[ 1 ] );
-               astSetInvert( mc[ 1 ], ic[ 1 ] );
-
-/* Create the first of two corresponding WinMaps, initially with undefined 
-   corners. These could be combined into a parallel CmpMap which would be 
-   equivalent to the nominated WinMap. The number of inputs for each WinMap 
-   is equal to either the number of outputs or inputs of the corresponding 
-   component of the CmpMap, depending on whether the CmpMap is upper or lower
-   neighbour. */
-               nin = cmlow ? astGetNout( mc[ 0 ] ):astGetNin( mc[ 0 ] );
-               newwm = astWinMap( nin, NULL, NULL, NULL, NULL, "", status );
-               if( astOK ) {
-
-/* Store the first "nin" scale and zero terms from the nominated WinMap
-   in the new WinMap. */
-                  for( i = 0; i < nin; i++ ) {
-                     (newwm->a)[ i ] = a[ i ];
-                     (newwm->b)[ i ] = b[ i ];
-                  }
-               }
-
-/* Now create the second WinMap in the same way, which transforms the
-   remaining outputs of the CmpMap. */
-               nin2 = cmlow ? astGetNout( mc[ 1 ] ):astGetNin( mc[ 1 ] );
-               newwm2 = astWinMap( nin2, NULL, NULL, NULL, NULL, "", status );
-               if( astOK ) {
-
-/* Store the remaining scale and zero terms from the nominated WinMap
-   in the new WinMap. */
-                  for( i = 0; i < nin2; i++ ) {
-                     (newwm2->a)[ i ] = a[ i + nin ];
-                     (newwm2->b)[ i ] = b[ i + nin ];
-                  }
-               }
-
-/* Combine the two corresponding lower component Mappings into a series 
-   CmpMap, and likewise combine the two corresponding upper component
-   Mappings into a series CmpMap. */
-               if( cmlow ) {
-                  nc[ 0 ] = (AstMapping *) astCmpMap( mc[ 0 ], newwm, 1, "", status );
-                  nc[ 1 ] = (AstMapping *) astCmpMap( mc[ 1 ], newwm2, 1, "", status );
-               } else {
-                  nc[ 0 ] = (AstMapping *) astCmpMap( newwm, mc[ 0 ], 1, "", status );
-                  nc[ 1 ] = (AstMapping *) astCmpMap( newwm2, mc[ 1 ], 1, "", status );
-               }
-               newwm = astAnnul( newwm );
-               newwm2 = astAnnul( newwm2 );
-
-/* Attempt to simplify each of the two new series CmpMaps. If neither of
-   them simplify then there is no point in doing the current merger. In fact
-   it would be dangerous to do so since we may end up in an infinite loop
-   where the resulting parallel CmpMap gets converted back into the
-   existing series CmpMap by the CmpMap MapMerge method, and then back
-   again by this method, etc. */
-               simp1 = astSimplify( nc[ 0 ] );
-               simp2 = astSimplify( nc[ 1 ] );
-
-/* Test if either could be simplified by checking if its pointer value
-   has changed. */
-               simpler = ( simp1 != nc[ 0 ] ) || ( simp2 != nc[ 1 ] );
-
-/* If either CmpMap was simplified, then combine the two series CmpMap into 
-   a single parallel CmpMap. */
-               if( simpler ) {
-                  map2 = (AstMapping *) astCmpMap( simp1, simp2, 0, "", status );
-               }
-
-/* Re-instate the original Invert attributes in the two component Mappings. */
-               astSetInvert( mc[ 0 ], inc[ 2 ] );
-               astSetInvert( mc[ 1 ], inc[ 3 ] );
-
-/* Free resources. */
-               simp1 = astAnnul( simp1 );
-               simp2 = astAnnul( simp2 );
-               nc[ 0 ] = astAnnul( nc[ 0 ] );
-               nc[ 1 ] = astAnnul( nc[ 1 ] );
-
-            }
-
-/* Free resources. */
-            mc[ 0 ] = astAnnul( mc[ 0 ] );
-            mc[ 1 ] = astAnnul( mc[ 1 ] );
-            a = astFree( a );
-            b = astFree( b );
-
-/* Re-instate the original Invert attributes. */
-            astSetInvert( ( *map_list )[ i1 ], inc[ 0 ] );
-            astSetInvert( ( *map_list )[ i2 ], inc[ 1 ] );
-
-/* If the above produced a new Mapping, annul the supplied pointers for
-   the two merged Mappings, store the pointer for the new merged Mapping,
-   and shuffle the remaining Mappings down to fill the space left. Nullify 
-   the end slot which is no longer used, reduce the number of Mappings in 
-   the list by 1, and return the index of the first modified Mapping. */
-            if( map2 ) {
-               (void) astAnnul( ( *map_list )[ i1 ] );
-               (void) astAnnul( ( *map_list )[ i2 ] );
-               ( *map_list )[ i1 ] = map2;
-               ( *invert_list )[ i1 ] = 0;
-               for( i = i2 + 1; i < *nmap; i++ ){
-                  ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-                  ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-               }
-               ( *map_list )[ *nmap - 1 ] = NULL;
-               (*nmap)--;
-               result = i1;
-            }
-
-/* If the WinMap could not merge directly with either of its neighbours,
-   we consider whether it would be worthwhile to swap the WinMap with
-   either of its neighbours. This can only be done for certain classes
-   of Mapping (MatrixMap & some PermMaps & WcsMaps), and will usually require both 
-   Mappings to be modified (unless they are commutative). The advantage of 
-   swapping the order of the Mappings is that it may result in the WinMap 
-   being adjacent to a Mapping with which it can merge directly on the next
-   invocation of this function, thus reducing the number of Mappings
-   in the list. */
-         } else {
-
-/* Set a flag if we could swap the WinMap with its higher neighbour. "do2"
-   is returned if swapping the Mappings would simplify either of the
-   Mappings. */
-            if( where + 1 < *nmap ){
-               swaphi = CanSwap(  ( *map_list )[ where ], 
-                                  ( *map_list )[ where + 1 ],
-                                  ( *invert_list )[ where ], 
-                                  ( *invert_list )[ where + 1 ], &do2, status );
-            } else {
-               swaphi = 0;
-               do2 = 0;
-            }
-
-/* If so, step through each of the Mappings which follow the WinMap, 
-   looking for a Mapping with which the WinMap could merge directly. Stop 
-   when such a Mapping is found, or if a Mapping is found with which the
-   WinMap could definitely not swap. Note the number of Mappings which 
-   separate the WinMap from the Mapping with which it could merge (if 
-   any). */
-            nstep2 = -1;
-            if( swaphi ){
-               for( i2 = where + 1; i2 < *nmap; i2++ ){
-
-/* See if we can merge with this Mapping. If so, note the number of steps
-   between the two Mappings and leave the loop. */
-                  nclass = astGetClass( ( *map_list )[ i2 ] );
-                  if( !strcmp( nclass, "WinMap" ) ||
-                      !strcmp( nclass, "ZoomMap" ) ||
-                      !strcmp( nclass, "UnitMap" ) ) {
-                     nstep2 = i2 - where - 1;
-                     break;
-                  }
-
-/* If there is no chance that we can swap with this Mapping, leave the loop 
-   with -1 for the number of steps to indicate that no merging is possible. 
-   WinMaps can swap with MatrixMaps and some PermMaps. */
-                  if( strcmp( nclass, "MatrixMap" ) &&
-                      strcmp( nclass, "WcsMap" ) &&
-                      strcmp( nclass, "PermMap" ) ) {
-                     break;
-                  }
-
-               }
-
-            }
-
-/* Do the same working forward from the WinMap towards the start of the map
-   list. */
-            if( where > 0 ){
-               swaplo = CanSwap(  ( *map_list )[ where - 1 ], 
-                                  ( *map_list )[ where ],
-                                  ( *invert_list )[ where - 1 ], 
-                                  ( *invert_list )[ where ], &do1, status );
-            } else {
-               swaplo = 0;
-               do1 = 0;
-            }
-
-            nstep1 = -1;
-            if( swaplo ){
-               for( i1 = where - 1; i1 >= 0; i1-- ){
-
-                  nclass = astGetClass( ( *map_list )[ i1 ] );
-                  if( !strcmp( nclass, "WinMap" ) ||
-                      !strcmp( nclass, "ZoomMap" ) ||
-                      !strcmp( nclass, "UnitMap" ) ) {
-                     nstep1 = where - 1 - i1;
-                     break;
-                  }
-
-                  if( strcmp( nclass, "MatrixMap" ) &&
-                      strcmp( nclass, "WcsMap" ) &&
-                      strcmp( nclass, "PermMap" ) ) {
-                     break;
-                  }
-
-               }
-
-            }
-
-/* Choose which neighbour to swap with so that the WinMap moves towards the
-   nearest Mapping with which it can merge. */
-            if( do1 || ( 
-                nstep1 != -1 && ( nstep2 == -1 || nstep2 > nstep1 ) ) ){
-               nclass = class1;
-               i1 = where - 1;
-               i2 = where;
-               neighbour = i1;
-            } else if( do2 || nstep2 != -1 ){
-               nclass = class2;
-               i1 = where;
-               i2 = where + 1;
-               neighbour = i2;
-            } else {
-               nclass = NULL;
-            }
-
-/* If there is a target Mapping in the list with which the WinMap could 
-   merge, replace the supplied Mappings with swapped Mappings to bring a
-   WinMap closer to the target Mapping. */
-            if( nclass ){
-
-/* It is possible that the neighbouring Mapping with which we are about to 
-   swap could also merge with the target Mapping. When the neighbouring
-   Mapping is reconsidered it may well swap the pair back to put itself nearer 
-   the target Mapping. We need to be careful not to end up in an infinite loop 
-   in which the pair of neighbouring Mappings are constantly swapped backwards 
-   and forwards as each attempts to put itself closer to the target Mapping.
-   To prevent this, we only swap the pair of Mappings if the neighbouring
-   Mapping could not itself merge with the target Mapping. Check to see
-   if this is the case by attempting to merge the neighbouring Mapping with
-   the target Mapping. */
-               map2 = astClone( (*map_list)[ neighbour ] );
-               nmapt = *nmap - neighbour;
-               maplt = *map_list + neighbour;
-               invlt = *invert_list + neighbour;
-               result = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
-               map2 = astAnnul( map2 );
-
-/* If the above call produced a change in the  Mapping list, return the
-   remaining number of mappings.. */
-               if( result != -1 ){
-                  *nmap = nmapt + neighbour;
-
-/* Otherwise, if there was no change in the mapping list... */
-               } else {
-
-                  if( !strcmp( nclass, "MatrixMap" ) ){
-                     WinMat( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
-                  } else if( !strcmp( nclass, "PermMap" ) ){
-                     WinPerm( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-
-                  } else if( !strcmp( nclass, "WcsMap" ) ){
-                     WinWcs( (*map_list) + i1, (*invert_list) + i1, where - i1, status );
-                  }
-
-/* Store the index of the first modified Mapping. */
-                  result = i1;
-               }
-
-/* If there is no Mapping available for merging, it may still be
-   advantageous to swap with a neighbour because the swapped Mapping may
-   be simpler than the original Mappings. For instance, a PermMap may 
-   strip axes of the WinMap leaving only a UnitMap. Also, the two neighbours 
-   may be able to merge. */
-            } else if( swaphi || swaplo ) {
-
-/* Try swapping with each possible neighbour in turn. */
-               for( i = 0; i < 2; i++ ) {
-
-/*  Set up the class and pointers for the mappings to be swapped, first
-    the lower neighbour, then the upper neighbour. */
-                  if( i == 0 && swaplo ){
-                     nclass = class1;
-                     i1 = where - 1;
-                     i2 = where;
-
-                  } else if( i == 1 && swaphi ){
-                     nclass = class2;
-                     i1 = where;
-                     i2 = where + 1;
-
-                  } else {
-                     nclass = NULL;
-                  }
-
-/* If we have a Mapping to swap with... */
-                  if( nclass ) {
-
-/* Take copies of the Mapping and Invert flag arrays so we do not change 
-   the supplied values. */
-                     mc[ 0 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[0] );
-                     mc[ 1 ] = (AstMapping *) astCopy( ( (*map_list) + i1 )[1] );
-                     ic[ 0 ] = ( (*invert_list) + i1 )[0];
-                     ic[ 1 ] = ( (*invert_list) + i1 )[1];
-
-/* Swap these Mappings. */
-                     if( !strcmp( nclass, "MatrixMap" ) ){
-                        WinMat( mc, ic, where - i1, status );
-                     } else if( !strcmp( nclass, "PermMap" ) ){
-                        WinPerm( mc, ic, where - i1, status );
-                     } else if( !strcmp( nclass, "WcsMap" ) ){
-                        WinWcs( mc, ic, where - i1, status );
-                     }
-
-/* See if the two neighbouring Mappings can merge now that the nominated
-   Mapping is no longer in between them. First get a list of Mapping
-   pointers containing the two Mappings to be merged, and associated
-   invert flags. */
-                     if( i == 0 && where != *nmap - 1 ) {
-                        nc[ 0 ] = astClone( mc[ 1 ] );
-                        nc[ 1 ] = astClone( (*map_list)[ where + 1 ] );
-                        inc[ 0 ] = ic[ 1 ];
-                        inc[ 1 ] = (*invert_list)[ where + 1 ];
-
-                     } else if( i == 1 && where > 0 ) {
-                        nc[ 0 ] = astClone( (*map_list)[ where - 1 ] );
-                        nc[ 1 ] = astClone( mc[ 0 ] );
-                        inc[ 0 ] = (*invert_list)[ where - 1 ];
-                        inc[ 1 ] = ic[ 0 ];
-
-                     } else {
-                        nc[ 0 ] = NULL;
-                        nc[ 1 ] = NULL;
-                     }
-
-/* If both neighbours are available, use astMapMerge to see if it is
-   possible to merge the two Mappings. */
-                     swap = 0;
-                     if( nc[ 0 ] && nc[ 1 ] ) {
-                        nmapt = 2;
-                        maplt = nc;
-                        invlt = inc;
-                        map2 = astClone( nc[ 0 ] );
-                        swap = astMapMerge( map2, 0, series, &nmapt, &maplt, &invlt );
-                        map2 = astAnnul( map2 );
-                        if( swap == -1 ) {
-                           map2 = astClone( nc[ 1 ] );
-                           swap = astMapMerge( map2, 1, series, &nmapt, &maplt, &invlt );
-                           map2 = astAnnul( map2 );
-                        }
-                        swap = ( nmapt < 2 ) ? 1 : 0;
-                     }
-
-/* Free resources. */
-                     if( nc[ 0 ] ) nc[ 0 ] = astAnnul( nc[ 0 ] );
-                     if( nc[ 1 ] ) nc[ 1 ] = astAnnul( nc[ 1 ] );
-
-/* If the neighbours could not merge, see if either swapped Mapping can
-   be simplified. */
-                     if( !swap ) {
-                        smc0 = astSimplify( mc[0] );
-                        if(  smc0 != mc[0] ) {
-                           swap = 1;
-                        } else {
-                           smc1 = astSimplify( mc[1] );
-                           swap = ( smc1 != mc[1] );
-                           smc1 = astAnnul( smc1 );
-                        }
-                        smc0 = astAnnul( smc0 );
-                     }
-
-/* If there is some point in swapping the Mappings, swap them in the
-   supplied lists. Otherwise annul the swapped Mappings. */
-                     if( swap ) {
-                        (*map_list)[ i1 ] = astAnnul( (*map_list)[ i1 ] );
-                        (*map_list)[ i2 ] = astAnnul( (*map_list)[ i2 ] );
-                        (*map_list)[ i1 ] = mc[ 0 ];
-                        (*map_list)[ i2 ] = mc[ 1 ];
-                        (*invert_list)[ i1 ] = ic[ 0 ];
-                        (*invert_list)[ i2 ] = ic[ 1 ];
-                        result = i1;
-                        break;
-
-                     } else {
-                        mc[ 0 ] = astAnnul( mc[ 0 ] );
-                        mc[ 1 ] = astAnnul( mc[ 1 ] );
-                     }
-                  }
-               }
-            }
-         }
-
-/* In parallel. */
-/* ============ */
-/* WinMaps are combined in parallel with neighbouring WinMaps, ZoomMaps and
-   UnitMaps. */
-      } else {
-
-/* We first look to see if the WinMap can be merged with one of its
-   neighbours, resulting in a reduction of one in the number of Mappings
-   in the list. WinMaps can only merge directly with another WinMap, a
-   ZoomMap, or a UnitMap. */
-         if( class1 && ( !strcmp( class1, "WinMap" ) ||
-                         !strcmp( class1, "ZoomMap" ) ||
-                         !strcmp( class1, "UnitMap" ) ) ){
-            nclass = class1;
-            i1 = where - 1;
-            i2 = where;
-
-         } else if( class2 && ( !strcmp( class2, "WinMap" ) ||
-                                !strcmp( class2, "ZoomMap" ) ||
-                                !strcmp( class2, "UnitMap" ) ) ){
-            nclass = class2;
-            i1 = where;
-            i2 = where + 1;
-
-         } else {
-            nclass = NULL;
-         }
-
-/* If the WinMap can merge with one of its neighbours, create the merged
-   Mapping. */
-         if( nclass ){
-
-            if( !strcmp( nclass, "WinMap" ) ){
-               newwm = WinWin( ( *map_list )[ i1 ], ( *map_list )[ i2 ],
-                               ( *invert_list )[ i1 ], ( *invert_list )[ i2 ],
-                               0, status );
-               invert = 0;
-
-            } else if( !strcmp( nclass, "ZoomMap" ) ){
-               if( i1 == where ){
-                  newwm = WinZoom( (AstWinMap *)( *map_list )[ i1 ], 
-                                   (AstZoomMap *)( *map_list )[ i2 ],
-                           ( *invert_list )[ i1 ], ( *invert_list )[ i2 ], 1, 0, status );
-               } else {
-                  newwm = WinZoom( (AstWinMap *)( *map_list )[ i2 ], 
-                                   (AstZoomMap *)( *map_list )[ i1 ],
-                           ( *invert_list )[ i2 ], ( *invert_list )[ i1 ], 0, 0, status );
-               }
-               invert = 0;
-
-            } else {
-               if( i1 == where ){
-                  newwm = WinUnit( (AstWinMap *)( *map_list )[ i1 ], 
-                                   (AstUnitMap *)( *map_list )[ i2 ],
-                                   ( *invert_list )[ i1 ], 1, status );
-               } else {
-                  newwm = WinUnit( (AstWinMap *)( *map_list )[ i2 ], 
-                                   (AstUnitMap *)( *map_list )[ i1 ],
-                                   ( *invert_list )[ i2 ], 0, status );
-               }
-               invert = 0;
-
-            }
-
-/* If succesfull... */
-            if( astOK ){
-
-/* Annul the first of the two Mappings, and replace it with the merged 
-   WinMap. Also set the invert flag. */ 
-               (void) astAnnul( ( *map_list )[ i1 ] );
-               ( *map_list )[ i1 ] = (AstMapping *) newwm;
-               ( *invert_list )[ i1 ] = invert;
-
-/* Annul the second of the two Mappings, and shuffle down the rest of the 
-   list to fill the gap. */
-               (void) astAnnul( ( *map_list )[ i2 ] );
-               for ( i = i2 + 1; i < *nmap; i++ ) {
-                  ( *map_list )[ i - 1 ] = ( *map_list )[ i ];
-                  ( *invert_list )[ i - 1 ] = ( *invert_list )[ i ];
-               }
-
-/* Clear the vacated element at the end. */
-               ( *map_list )[ *nmap - 1 ] = NULL;
-               ( *invert_list )[ *nmap - 1 ] = 0;
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-               ( *nmap )--;
-               result = i1;
-
-            }
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     WinMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing WinMap. This is only possible if the specified inputs
-*     correspond to some subset of the WinMap outputs. That is, there
-*     must exist a subset of the WinMap outputs for which each output
-*     depends only on the selected WinMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied WinMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap to be split (the WinMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied WinMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied WinMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied WinMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstWinMap *newwm;          /* Pointer to returned WinMap */
-   AstWinMap *this;           /* Pointer to WinMap structure */
-   double *a;                 /* Pointer to zero terms */
-   double *b;                 /* Pointer to scale terms */
-   int *result;               /* Pointer to returned array */
-   int i;                     /* Loop count */
-   int iin;                   /* Mapping input index */
-   int mnin;                  /* No. of Mapping inputs */
-   int ok;                    /* Are input indices OK? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the WinMap structure. */
-   this = (AstWinMap *) this_map;
-
-/* Allocate memory for the returned array and create a WinMap with the
-   required number of axes and undefined corners. */
-   result = astMalloc( sizeof( int )*(size_t) nin );
-   newwm = astWinMap( nin, NULL, NULL, NULL, NULL, "", status );
-   *map = (AstMapping *) newwm;
-
-/* Now get pointers to the scale and zero terms of the supplied WinMap
-   (these describe the forward transformation, taking into account the 
-   setting of the Invert flag). */
-   (void) astWinTerms( this , &a, &b );   
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Store the required scale and zero terms from the supplied WinMap
-   in the new WinMap. At the same time check that each axis is valid. */
-      mnin = astGetNin( this );
-      ok = 1;
-      for( i = 0; i < nin; i++ ) {
-         iin = in[ i ];
-         if( iin >= 0 && iin < mnin ) {
-            (newwm->a)[ i ] = a[ iin ];
-            (newwm->b)[ i ] = b[ iin ];
-            result[ i ] = iin;
-         } else {
-            ok = 0;
-            break;
-         }
-      }
-
-/* If the "in" array contained any invalid values, free the returned
-   resources. */
-      if( !ok ) { 
-         result = astFree( result );
-         *map = astAnnul( *map );
-      }
-   }
-
-/* Free resources. */
-   a = astFree( a );
-   b = astFree( b );
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-                     double **consts, int *status ){
-/*
-*  Name:
-*     PermGet
-
-*  Purpose:
-*     Get the axis permutation and constants array for a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void PermGet( AstPermMap *map, int **outperm, int **inperm, 
-*                   double **const, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     This function returns axis permutation and constants arrays which can
-*     be used to create a PermMap which is equivalent to the supplied PermMap.
-
-*  Parameters:
-*     map
-*        The PermMap.
-*     outperm
-*        An address at which to return a popinter to an array of ints
-*        holding the output axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     inperm
-*        An address at which to return a popinter to an array of ints
-*        holding the input axis permutation array. The array should be
-*        released using astFree when no longer needed.
-*     consts
-*        An address at which to return a popinter to an array of doubles
-*        holding the constants array. The array should be released using 
-*        astFree when no longer needed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  NULL pointers are returned if an error has already occurred, or if
-*     this function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstPointSet *pset1;       /* PointSet holding input positions for PermMap */
-   AstPointSet *pset2;       /* PointSet holding output positions for PermMap */
-   double **ptr1;            /* Pointer to pset1 data */
-   double **ptr2;            /* Pointer to pset2 data */
-   double *cnst;             /* Pointer to constants array */
-   double cn;                /* Potential new constant value */
-   double ip;                /* Potential output axis index */
-   double op;                /* Potential input axis index */
-   int *inprm;               /* Pointer to input axis permutation array */
-   int *outprm;              /* Pointer to output axis permutation array */
-   int i;                    /* Axis count */
-   int nc;                   /* Number of constants stored so far */
-   int nin;                  /* No. of input coordinates for the PermMap */
-   int nout;                 /* No. of output coordinates for the PermMap */
-
-/* Initialise. */
-   if( outperm ) *outperm = NULL;
-   if( inperm ) *inperm = NULL;
-   if( consts ) *consts = NULL;
-
-/* Check the global error status and the supplied pointers. */
-   if ( !astOK || !outperm || !inperm || !consts ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   nc = 0;
-
-/* Get the number of input and output axes for the supplied PermMap. */
-   nin = astGetNin( map );
-   nout = astGetNout( map );
-
-/* Allocate the memory for the returned arrays. */
-   outprm = (int *) astMalloc( sizeof( int )* (size_t) nout );
-   inprm = (int *) astMalloc( sizeof( int )* (size_t) nin );
-   cnst = (double *) astMalloc( sizeof( double )* (size_t) ( nout + nin ) );
-
-/* Returned the pointers to these arrays.*/
-   *outperm = outprm;
-   *inperm = inprm;
-   *consts = cnst;
-
-/* Create two PointSets, each holding two points, which can be used for
-   input and output positions with the PermMap. */
-   pset1 = astPointSet( 2, nin, "", status );
-   pset2 = astPointSet( 2, nout, "", status );
-
-/* Set up the two input positions to be [0,1,2...] and [-1,-1,-1,...]. The
-   first position is used to enumerate the axes, and the second is used to 
-   check for constant axis values. */
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ){
-      for( i = 0; i < nin; i++ ){
-         ptr1[ i ][ 0 ] = ( double ) i;
-         ptr1[ i ][ 1 ] = -1.0;
-      }
-   }
-
-/* Use the PermMap to transform these positions in the forward direction. */
-   (void) astTransform( map, pset1, 1, pset2 );
-
-/* Look at the mapped positions to determine the output axis permutation
-   array. */
-   ptr2 = astGetPoints( pset2 );
-   if( astOK ){
-
-/* No constant axis valeus found yet. */
-      nc = 0;
-
-/* Do each output axis. */
-      for( i = 0; i < nout; i++ ){
-
-/* If the output axis value is copied from an input axis value, the index
-   of the appropriate input axis will be in the mapped first position. */
-         op = ptr2[ i ][ 0 ];
-
-/* If the output axis value is assigned a constant value, the result of 
-   mapping the two different input axis values will be the same. */
-         cn = ptr2[ i ][ 1 ];
-         if( op == cn ) {
-
-/* We have found another constant. Store it in the constants array, and
-   store the index of the constant in the output axis permutation array. */
-            cnst[ nc ] = cn;
-            outprm[ i ] = -( nc + 1 );
-            nc++;
-
-/* If the output axis values are different, then the output axis value 
-   must be copied from the input axis value. */
-         } else {
-            outprm[ i ] = (int) ( op + 0.5 );
-         }
-      }
-   }
-    
-/* Now do the same thing to determine the input permutation array. */
-   if( astOK ){
-      for( i = 0; i < nout; i++ ){
-         ptr2[ i ][ 0 ] = ( double ) i;
-         ptr2[ i ][ 1 ] = -1.0;
-      }
-   }
-
-   (void) astTransform( map, pset2, 0, pset1 );
-
-   if( astOK ){
-
-      for( i = 0; i < nin; i++ ){
-
-         ip = ptr1[ i ][ 0 ];
-         cn = ptr1[ i ][ 1 ];
-         if( ip == cn ) {
-
-            cnst[ nc ] = cn;
-            inprm[ i ] = -( nc + 1 );
-            nc++;
-
-         } else {
-            inprm[ i ] = (int) ( ip + 0.5 );
-         }
-      }
-   }
-
-/* Annul the PointSets. */
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* If an error has occurred, attempt to free the returned arrays. */
-   if( !astOK ) {
-      *outperm = (int *) astFree( (void *) *outperm );
-      *inperm = (int *) astFree( (void *) *inperm );
-      *consts = (double *) astFree( (void *) *consts );
-   }
-
-/* Return. */
-   return;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     WinMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   AstWinMap *map;
-   double result;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Get a pointer to the WinMap structure. */
-   map = (AstWinMap *) this;
-
-/* If the input and output axes are not equal the result is zero. */
-   if( ax1 != ax2 ) {
-      result = 0.0;
-
-/* Otherwise, return the scale factor for the axis, taking the reciprocal
-   if the WinMap has been inverted. */
-   } else {
-      result = ( map->b )[ ax1 ];
-      if( astGetInvert( map ) ) {
-         if( result != 0.0 && result != AST__BAD ) {
-            result = 1.0/result;
-         } else {
-            result = AST__BAD;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     WinMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a WinMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstWinMap *this;             /* Pointer to the WinMap structure */
-   int len;                      /* Length of setting string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the WinMap structure. */
-   this = (AstWinMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* The WinMap class currently has no attributes, so pass it on to the parent
-   method for further interpretation. */
-   (*parent_setattrib)( this_object, setting, status );
-
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     WinMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a WinMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *this;             /* Pointer to the WinMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the WinMap structure. */
-   this = (AstWinMap *) this_object;
-
-/* The WinMap class currently has no attributes, so pass it on to the parent
-   method for further interpretation. */
-   result = (*parent_testattrib)( this_object, attrib, status );
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a WinMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     WinMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a WinMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to map them into the 
-*     required window.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the WinMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstWinMap *map;               /* Pointer to WinMap to be applied */
-   const char *class;            /* Object class */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double *axin;                 /* Pointer to next input axis value */
-   double *axout;                /* Pointer to next output axis value */
-   double *a;                    /* Pointer to next constant term */
-   double *b;                    /* Pointer to next multiplicative term */
-   double aa;                    /* Constant term */
-   double bb;                    /* Multiplicative term */
-   int coord;                    /* Loop counter for coordinates */
-   int def;                      /* Is mapping defined? */
-   int ncoord;                   /* Number of coordinates per point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   aa = 0.0;
-   bb = 0.0;
-
-/* Obtain a pointer to the WinMap. */
-   map = (AstWinMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Report an error if the WinMap does not contain any scales or shifts. */
-   if( !(map->a && map->b) && astOK ){
-      class = astGetClass( this );
-      astError( AST__BADWM, "astTransform(%s): The supplied %s does not "
-                "contain any window information.", status, class, class );
-   }
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-   if( astOK ){
-
-/* Store pointers to the shift and scale for the next axis. */
-      a = map->a;
-      b = map->b;
-
-/* Apply the mapping to each axis. */
-      for( coord = 0; coord < ncoord; coord++ ){
-
-/* If either the scale or shift is bad indicate that the mapping is
-   not defined on this axis. */
-         if( *a == AST__BAD || *b == AST__BAD ){
-            def = 0;
-
-/* Otherwise, get the scale and offset factors for this axis, taking account of
-   whether the mapping is inverted or not. If the mapping is undefined, set 
-   the "def" flag to indicate this. */
-         } else {
-            aa = *a;
-            bb = *b;
-
-            if( forward ){
-               def = 1;
-
-            } else if( bb != 0.0 ){
-               bb = 1.0/bb;
-               aa = -aa*bb;               
-               def = 1;
-
-            } else {
-               def = 0;
-            }
-
-         }
-
-/* Store pointers to the first inpout and output values on this axis. */
-         axin = ptr_in[ coord ];
-         axout = ptr_out[ coord ];
-
-/* If the mapping is defined, apply it to the supplied points. */
-         if( def ){
-
-            for( point = 0; point < npoint; point++ ){
-               if( *axin != AST__BAD ){
-                  *(axout++) = aa + bb*(*axin);
-               } else {
-                  *(axout++) = AST__BAD;
-               }
-               axin++;
-            }
-
-/* If the mapping is not defined, store bad values on this axis in the 
-   returned points. */
-         } else {
-            for( point = 0; point < npoint; point++ ) *(axout++) = AST__BAD;
-         }
-
-/* Point to the scale and shift for the next axis. */
-         a++;
-         b++;
-      }  
-
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-static void WinMat( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-*  Name:
-*     WinMat
-
-*  Purpose:
-*     Swap a WinMap and a MatrixMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void WinMat( AstMapping **maps, int *inverts, int iwm, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a WinMap and a
-*     MatrixMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a WinMap and a MatrixMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-*     The scale factors in the returned WinMap are always unity (i.e. 
-*     the differences in scaling get absorbed into the returned
-*     MatrixMap).
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     iwm
-*        The index within "maps" of the WinMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMatrixMap *m1;             /* Pointer to Diagonal scale factor MatrixMap */
-   AstMatrixMap *m2;             /* Pointer to returned MatrixMap */
-   AstMatrixMap *sm2;            /* Pointer to simplified returned MatrixMap */
-   AstMatrixMap *mm;             /* Pointer to the supplied MatrixMap */
-   AstPointSet *pset1;           /* Shift terms from supplied WinMap */
-   AstPointSet *pset2;           /* Shift terms for returned WinMap */
-   AstWinMap *w1;                /* Pointer to the returned WinMap */
-   AstWinMap *sw1;               /* Pointer to the simplified returned WinMap */
-   AstWinMap *wm;                /* Pointer to the supplied WinMap */
-   double **ptr1;                /* Pointer to pset1 data */
-   double **ptr2;                /* Pointer to pset2 data */
-   double *a;                    /* Array of shift terms from supplied WinMap */
-   double *aa;                   /* Pointer to next shift term */
-   double *b;                    /* Array of scale terms from supplied WinMap */
-   double *bb;                   /* Pointer to next scale term */
-   int i;                        /* Axis count */
-   int nin;                      /* No. of axes in supplied WinMap */
-   int nout;                     /* No. of axes in returned WinMap */
-   int old_minv;                 /* Invert value for the supplied MatrixMap */
-   int old_winv;                 /* Invert value for the supplied WinMap */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Store pointers to the supplied WinMap and the MatrixMap. */
-   wm = (AstWinMap *) maps[ iwm ];
-   mm = (AstMatrixMap *) maps[ 1 - iwm ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
-   supplied values. */
-   old_winv = astGetInvert( wm );
-   astSetInvert( wm, inverts[ iwm ] );
-
-   old_minv = astGetInvert( mm );
-   astSetInvert( mm, inverts[ 1 - iwm ] );
-
-/* Get copies of the shift and scale terms used by the WinMap. This
-   also returns the number of axes in the WinMap. */
-   nin = astWinTerms( wm, &a, &b );   
-
-/* Create a diagonal MatrixMap holding the scale factors from the
-   supplied WinMap. */
-   m1 = astMatrixMap( nin, nin, 1, b, "", status );
-
-/* Create a PointSet holding a single position given by the shift terms
-   in the supplied WinMap. */
-   pset1 = astPointSet( 1, nin, "", status );
-   ptr1 = astGetPoints( pset1 );
-   if( astOK ){
-      aa = a;
-      for( i = 0; i < nin; i++ ) ptr1[ i ][ 0 ] = *(aa++);
-   }
-
-/* First deal with cases when the WinMap is applied first, followed by
-   the MatrixMap. */
-   if( iwm == 0 ){
-
-/* Multiply the diagonal matrix holding the WinMap scale factors by the 
-   supplied matrix. The resulting MatrixMap is the one to return in the 
-   map list. */
-      m2 = astMtrMult( m1, mm );
-
-/* Transform the position given by the shift terms from the supplied
-   WinMap using the supplied MatrixMap to get the shift terms for 
-   the returned WinMap. */
-      pset2 = astTransform( mm, pset1, 1, NULL );
-
-/* Now deal with cases when the MatrixMap is applied first, followed by
-   the WinMap. */
-   } else {
-
-/* Multiply the supplied MatrixMap by the diagonal matrix holding scale
-   factors from the supplied WinMap. The resulting MatrixMap is the one to 
-   return in the map list. */
-      m2 = astMtrMult( mm, m1 );
-
-/* Transform the position given by the shift terms from the supplied
-   WinMap using the inverse of the returned MatrixMap to get the shift 
-   terms for the returned WinMap. */
-      pset2 = astTransform( m2, pset1, 0, NULL );
-
-   }
-
-/* Re-instate the original value of the Invert attributes of the supplied 
-   Mappings. */
-   astSetInvert( wm, old_winv );
-   astSetInvert( mm, old_minv );
-
-/* Get pointers to the shift terms for the returned WinMap. */
-   ptr2 = astGetPoints( pset2 ); 
-
-/* Create the returned WinMap, initially with undefined corners. The number of
-   axes in the WinMap must equal the number of shift terms. */
-   nout = astGetNcoord( pset2 );
-   w1 = astWinMap( nout, NULL, NULL, NULL, NULL, "", status );
-
-/* If succesful, store the scale and shift terms in the WinMap. The scale
-   terms are always unity. */
-   if( astOK ){
-      bb = w1->b;
-      aa = w1->a;
-      for( i = 0; i < nout; i++ ) {
-         *(bb++) = 1.0;
-         *(aa++) = ptr2[ i ][ 0 ];
-      }
-
-/* Replace the supplied Mappings and invert flags with the ones found
-   above. Remember that the order of the Mappings is now swapped */
-      (void) astAnnul( maps[ 0 ] );
-      (void) astAnnul( maps[ 1 ] );
-
-      sw1 = astSimplify( w1 );
-      w1 = astAnnul( w1 );
-
-      maps[ 1 - iwm ] = (AstMapping *) sw1;
-      inverts[ 1 - iwm  ] = astGetInvert( sw1 );
-
-      sm2 = astSimplify( m2 );
-      m2 = astAnnul( m2 );
-
-      maps[ iwm ] = (AstMapping *) sm2;
-      inverts[ iwm  ] = astGetInvert( sm2 );
-
-   }
-
-/* Annul the MatrixMap and PointSet holding the scale and shift terms from the
-   supplied WinMap. */
-   m1 = astAnnul( m1 );
-   pset1 = astAnnul( pset1 );
-   pset2 = astAnnul( pset2 );
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
-   b = (double *) astFree( (void *) b );
-   a = (double *) astFree( (void *) a );
-
-/* Return. */
-   return;
-}
-
-static void WinWcs( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-*  Name:
-*     WinWcs
-
-*  Purpose:
-*     Swap a WinMap and a WcsMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void WinWcs( AstMapping **maps, int *inverts, int iwm, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a WinMap and a
-*     WcsMap. These Mappings are swapped.
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     iwm
-*        The index within "maps" of the WinMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstMapping *m1;               /* Pointer to a Mapping */
-   int inv;                      /* Invert value */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Simply swap the values (the CanSwap function will have checked that
-   the WcsMap and WinMap can simply be swapped). */
-   m1 = maps[ 0 ];
-   maps[ 0 ] = maps[ 1 ];
-   maps[ 1 ] = m1;
-
-   inv = inverts[ 0 ];
-   inverts[ 0 ] = inverts[ 1 ];
-   inverts[ 1 ] = inv;
-
-/* Return. */
-   return;
-}
-
-static void WinPerm( AstMapping **maps, int *inverts, int iwm, int *status ){
-/*
-*  Name:
-*     WinPerm
-
-*  Purpose:
-*     Swap a WinMap and a PermMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     void WinPerm( AstMapping **maps, int *inverts, int iwm, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     A list of two Mappings is supplied containing a WinMap and a
-*     PermMap. These Mappings are annulled, and replaced with 
-*     another pair of Mappings consisting of a WinMap and a PermMap
-*     in the opposite order. These Mappings are chosen so that their
-*     combined effect is the same as the original pair of Mappings. 
-
-*  Parameters:
-*     maps
-*        A pointer to an array of two Mapping pointers.
-*     inverts
-*        A pointer to an array of two invert flags.
-*     iwm
-*        The index within "maps" of the WinMap.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  All links between input and output axes in the PermMap must 
-*     be bi-directional, but there can be unconnected axes, and there
-*     need not be the same number of input and output axes.
-
-*/
-
-/* Local Variables: */
-   AstPermMap *pm;               /* Pointer to the supplied PermMap */
-   AstPermMap *p1;               /* Pointer to the returned PermMap */
-   AstPermMap *sp1;              /* Pointer to the simplified returned PermMap */
-   AstWinMap *w1;                /* Pointer to the returned WinMap */
-   AstWinMap *sw1;               /* Pointer to the simplified returned PermMap */
-   AstWinMap *wm;                /* Pointer to the supplied WinMap */
-   double *a;                    /* Array of shift terms from supplied WinMap */
-   double *aa;                   /* Pointer to next shift term */
-   double *b;                    /* Array of scale terms from supplied WinMap */
-   double *bb;                   /* Pointer to next scale term */
-   double *consts;               /* Pointer to constants array */
-   double c;                     /* A constant value */
-   int *inperm;                  /* Pointer to input axis permutation array */
-   int *outperm;                 /* Pointer to output axis permutation array */
-   int i;                        /* Axis count */
-   int j;                        /* Axis index */
-   int nin;                      /* No. of axes in supplied WinMap */
-   int npin;                     /* No. of input axes in supplied PermMap */
-   int npout;                    /* No. of output axes in supplied PermMap */
-   int old_pinv;                 /* Invert value for the supplied PermMap */
-   int old_winv;                 /* Invert value for the supplied WinMap */
-
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Initialise variables to avoid "used of uninitialised variable"
-   messages from dumb compilers. */
-   p1 = NULL;
-   w1 = NULL;
-
-/* Store pointers to the supplied WinMap and the PermMap. */
-   wm = (AstWinMap *) maps[ iwm ];
-   pm = (AstPermMap *) maps[ 1 - iwm ];
-
-/* Temporarily set the Invert attribute of the supplied Mappings to the
-   supplied values. */
-   old_winv = astGetInvert( wm );
-   astSetInvert( wm, inverts[ iwm ] );
-
-   old_pinv = astGetInvert( pm );
-   astSetInvert( pm, inverts[ 1 - iwm ] );
-
-/* Get copies of the shift and scale terms used by the WinMap. This
-   also returns the number of axes in the WinMap. */
-   nin = astWinTerms( wm, &a, &b );   
-
-/* Get the axis permutation and constants arrays representing the
-   PermMap. Note, no constants are used more than once in the returned
-   arrays (i.e. duplicate constants are returned in "consts" if more than
-   one axis uses a given constant). */
-   PermGet( pm, &outperm, &inperm, &consts, status );
-
-   if( astOK ) {
-
-/* Get the number of input and output axes in the PermMap. */
-      npin = astGetNin( pm );
-      npout = astGetNout( pm );
-
-/* First consider cases where the WinMap is applied first, followed by the
-   PermMap. */
-      if( iwm == 0 ) {
-
-/* Create the new WinMap, initially with undefined corners. Its number 
-   of axes will equal the number of output axes of the PermMap. */
-         w1 = astWinMap( npout, NULL, NULL, NULL, NULL, "", status );
-
-/* Get pointers to the scale and shift terms for the new WinMap. */
-         bb = w1->b;
-         aa = w1->a;
-
-/* Thinking of the forward CmpMap first, consider each of the output axes of 
-   the PermMap. */
-         for( i = 0; i < npout; i++ ){
-
-/* If the value for this output axis is derived from an input axis, copy the 
-   scale and shift terms from the corresponding input axis to the new 
-   WinMap. */
-            j = outperm[ i ];
-            if( j >= 0 && j < nin ) {
-               aa[ i ] = a[ j ];
-               bb[ i ] = b[ j ];
-
-/* If this output axis is assigned a constant value, use zero and one for
-   the shift and scale in order to preserve the constant value produced
-   by the PermMap. */
-            } else {
-               aa[ i ] = 0.0;
-               bb[ i ] = 1.0;
-            }
-
-         }
-
-/* Now consider the inverse CmpMap. Any constants produced by the inverse 
-   PermMap would previously have been scaled by the inverse WinMap. Since
-   there will be no inverse WinMap to perform this scaling in the returned
-   Mappings, we need to change the constant values to be the values after
-   the scaling which would have been applied by the WinMap. Consider each 
-   of the input axes of the PermMap.*/
-         for( i = 0; i < npin; i++ ){
-
-/* Skip axes which are not assigned a constant value. */
-            if( inperm[ i ] < 0 ) {
-
-/* Scale the constant term associated with this input axis using the
-   inverse WinMap unless it is AST__BAD. */
-               c = consts[ -inperm[ i ] - 1 ];
-               if( c != AST__BAD ) {
-
-                  if( a[ i ] != AST__BAD && b[ i ] != AST__BAD &&
-                      b[ i ] != 0.0 ) {
-                     consts[ -inperm[ i ] - 1 ] = ( c - a[ i ] )/b[ i ];
-                  } else {
-                     consts[ -inperm[ i ] - 1 ] = AST__BAD;
-                  }
-
-               }
-
-            }
-
-         }
-
-/* Now consider cases where the PermMap is applied first, followed by the
-   WinMap. */
-      } else {
-
-/* Create the new WinMap, initially with undefined corners. Its number 
-   of axes will equal the number of input axes of the PermMap. */
-         w1 = astWinMap( npin, NULL, NULL, NULL, NULL, "", status );
-
-/* Get pointers to the scale and shift terms for the new WinMap. */
-         bb = w1->b;
-         aa = w1->a;
-
-/* Thinking first about the inverse WinMap, consider each of the input axes 
-   of the PermMap. */
-         for( i = 0; i < npin; i++ ){
-
-/* If the value for this input axis is derived from an output axis, copy the 
-   scale and shift terms from the corresponding output axis to the new 
-   WinMap. */
-            j = inperm[ i ];
-            if( j >= 0 && j < nin ) {
-               aa[ i ] = a[ j ];
-               bb[ i ] = b[ j ];
-
-/* If this input axis is assigned a constant value, use zero and one for
-   the shift and scale in order to preserve the constant value produced
-   by the PermMap. */
-            } else {
-               aa[ i ] = 0.0;
-               bb[ i ] = 1.0;
-            }
-
-         }
-
-/* Now consider the forward WinMap. Any constants produced by the forward
-   PermMap would previously have been scaled by the forward WinMap. Since
-   there will be no forward WinMap to perform this scaling in the returned
-   Mappings, we need to change the constant values to be the values after
-   the scaling which would have been applied by the WinMap. Consider each 
-   of the output axes of the PermMap.*/
-         for( i = 0; i < npout; i++ ){
-
-/* Skip axes which are not assigned a constant value. */
-            if( outperm[ i ] < 0 ) {
-
-/* Scale the constant term associated with this input axis using the
-   forward WinMap unless it is AST__BAD. */
-               c = consts[ -outperm[ i ] - 1 ];
-               if( c != AST__BAD ) {
-
-                  if( a[ i ] != AST__BAD && b[ i ] != AST__BAD ) {
-                     consts[ -outperm[ i ] - 1 ] = a[ i ] + c*b[ i ];
-                  } else {
-                     consts[ -outperm[ i ] - 1 ] = AST__BAD;
-                  }
-
-               }
-
-            }
-
-         }
-
-      }
-
-/* Create a new PermMap (since the constants may have changed). */
-      p1 = astPermMap( npin, inperm, npout, outperm, consts, "", status );
-
-/* Free the axis permutation and constants arrays. */
-      outperm = (int *) astFree( (void *) outperm );
-      inperm = (int *) astFree( (void *) inperm );
-      consts = (double *) astFree( (void *) consts );
-   }
-
-/* Re-instate the original value of the Invert attributes of the supplied 
-   Mappings. */
-   astSetInvert( wm, old_winv );
-   astSetInvert( pm, old_pinv );
-
-/* Replace the supplied Mappings with the ones created above, swapping the
-   order. */
-   if( astOK ){
-      (void) astAnnul( wm );
-      (void) astAnnul( pm );
-
-      sp1 = astSimplify( p1 );
-      p1 = astAnnul( p1 );
-
-      sw1 = astSimplify( w1 );
-      w1 = astAnnul( w1 );
-
-      maps[ iwm ] = (AstMapping *) sp1;
-      inverts[ iwm ] = 0;
-
-      maps[ 1 - iwm ] = (AstMapping *) sw1;
-      inverts[ 1 - iwm  ] = astGetInvert( sw1 );
-   }
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
-   b = (double *) astFree( (void *) b );
-   a = (double *) astFree( (void *) a );
-
-/* Return. */
-   return;
-}
-
-static int WinTerms( AstWinMap *this, double **shift, double **scale, int *status ){
-/*
-*+
-*  Name:
-*     astWinTerms
-
-*  Purpose:
-*     Obtain the scale and shift terms used by a WinMap.
-
-*  Type:
-*     Protected virtual function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     int astWinTerms( AstWinMap *this, double **shift, double **scale )
-
-*  Class Membership:
-*     WinMap mewthod.
-
-*  Description:
-*     This function returns copies of the scale and shift terms used by a 
-*     WinMap when transforming points. Each axis of the WinMap has a scale 
-*     term B, and a shift term A, and the transformation of a point is done 
-*     by applying these to each input axis value X in turn, to get the 
-*     output axis value B.X + A. The returned terms take into account the 
-*     current setting of the Invert attribute of the WinMap. 
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap.
-*     shift
-*        The address of a location at which to return a pointer to the
-*        start of a dynamically allocated array holding the shift terms
-*        for each axis.
-*     scale
-*        The address of a location at which to return a pointer to the
-*        start of a dynamically allocated array holding the scale terms
-*        for each axis.
-
-*  Returned Value:
-*     The number of axes in the WinMap. This is the same as the number of
-*     elements in the returned arrays.
-
-*  Notes:
-*     -  The returned arrays should be released using astFree when no
-*     longer needed.
-*     -  NULL pointers can be supplied for "scale" or "shift" if the
-*     corresponding arrays are not required.
-*     -  A value of zero will be returned, together with NULL pointers
-*     for "scale" and "shift" if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   double *a;             /* Pointer to a copy of the shift term array */
-   double *aa;            /* Pointer to the next shift term */
-   double *b;             /* Pointer to a copy of the scale term array */
-   double *bb;            /* Pointer to the next scale term */
-   int i;                 /* Axis count */
-   int result;            /* The returned number of axes */
-   size_t absize;         /* Size of shift and scale arrays */
-
-/* Initialise. */
-   result = 0;
-   if( scale ) *scale = NULL;
-   if( shift ) *shift = NULL;
-
-/* Check the global status. */
-   if ( !astOK ) return result;
-
-/* Get the number of axes in the WinMap. */
-   result = astGetNin( this );
-
-/* Create copies of the scale and shift terms from the WinMap. */
-   absize = sizeof( double )*(size_t) result;
-   b = (double *) astStore( NULL, (void *) this->b, absize );
-   a = (double *) astStore( NULL, (void *) this->a, absize );
-
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* If the WinMap is inverted, replace the scale and shift terms
-   by the corresponding values for the inverted mapping. */
-      if( astGetInvert( this ) ){
-         bb = b;
-         aa = a;
-         
-         for( i = 0; i < result; i++ ){               
-            if( *aa != AST__BAD && *bb != 0.0 && *bb != AST__BAD ){
-               *bb = 1.0/(*bb);
-               *aa *= -(*bb);
-            } else {
-               *bb = AST__BAD;
-               *aa = AST__BAD;
-            }
-
-            aa++;
-            bb++;
-
-         }
-      }
-
-/* Store the required pointers, and free arrays which are not required. */
-      if( scale ){
-         *scale = b;
-      } else {
-         b = (double *) astFree( (void *) b );
-      }
-
-      if( shift ){
-         *shift = a;
-      } else {
-         a = (double *) astFree( (void *) a );
-      }
-
-   }
-
-/* If an error has occurred, free the arrays and return zero. */
-   if( !astOK ){
-      if( scale ) *scale = (double *) astFree( (void *) *scale );
-      if( shift ) *shift = (double *) astFree( (void *) *shift );
-      result = 0;
-   }
-
-/* Return the answer. */
-   return result;
-
-}
-
-static AstWinMap *WinUnit( AstWinMap *wm, AstUnitMap *um, int winv, 
-                           int win1, int *status ){
-/*
-*  Name:
-*     WinUnit
-
-*  Purpose:
-*     Create a WinMap by merging a WinMap and a UnitMap in parallel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstWinMap *WinUnit( AstWinMap *wm, AstUnitMap *um, int winv, int win1, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     This function creates a new WinMap which performs a mapping
-*     equivalent to applying the two supplied Mappings in parallel in 
-*     the directions specified by the "invert" flag (the Invert 
-*     attribute of the supplied WinMap is ignored). 
-
-*  Parameters:
-*     wm
-*        A pointer to the WinMap.
-*     um
-*        A pointer to the UnitMap.
-*     winv
-*        The invert flag to use with wm. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     win1
-*        Indicates the order in which the Mappings should be applied. 
-*
-*        If win1 is non-zero:
-*           "wm" applies to the lower axis indices and "um" to the upper
-*           axis indices.
-*
-*        If win1 is zero:
-*           "um" applies to the lower axis indices and "wm" to the upper
-*           axis indices.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new WinMap.
-
-*  Notes:
-*     -  The forward direction of the returned WinMap is equivalent to the
-*     combined effect of the two supplied Mappings, operating in the
-*     directions specified by "winv". 
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *result;            /* Pointer to output WinMap */
-   double *a;                    /* Pointer to shift term array */
-   double *aa;                   /* Pointer to next shift term */
-   double *ar;                   /* Pointer to next shift term in result */
-   double *b;                    /* Pointer to scale term array */
-   double *bb;                   /* Pointer to next scale term */
-   double *br;                   /* Pointer to next scale term in result */
-   int i;                        /* Axis index */
-   int ninw;                     /* No. of axes in the WinMap */
-   int ninu;                     /* No. of axes in the UnitMap */
-   int old_winv;                 /* Original setting of WinMap Invert attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   result = NULL;
-
-/* Temporarily set the Invert attribute of the WinMap to the supplied 
-   value. */
-   old_winv = astGetInvert( wm );
-   astSetInvert( wm, winv );
-
-/* Create copies of the scale and shift terms from the WinMap, and store the 
-   number of axes in it. */
-   ninw = astWinTerms( wm, &a, &b );
-   
-/* Get the number of axes in the UnitMap. */
-   ninu = astGetNin( um );
-
-/* Create the merged WinMap with unspecified corners. */
-   result = astWinMap( ninw + ninu, NULL, NULL, NULL, NULL, "", status );
-
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* If the WinMap applies to the lower axis indices... */
-      if( win1 ){
-
-/* Use the scale and shift terms from the WinMap for the lower axes of
-   the new WinMap. */
-         aa = a;
-         bb = b;
-         ar = result->a;
-         br = result->b;
-
-         for( i = 0; i < ninw; i++ ){               
-            *(ar++) = *(aa++);
-            *(br++) = *(bb++);
-         }
-
-/* Use the scale factor to 1.0 and the shift term to zero for the upper axes 
-   of the new WinMap. */
-         for( i = 0; i < ninu; i++ ){               
-            *(ar++) = 0.0;
-            *(br++) = 1.0;
-         }
-
-/* If the WinMap applies to the upper axis indices... */
-      } else {
-
-/* Use the scale factor to 1.0 and the shift term to zero for the lower axes 
-   of the new WinMap. */
-         ar = result->a;
-         br = result->b;
-
-         for( i = 0; i < ninu; i++ ){               
-            *(ar++) = 0.0;
-            *(br++) = 1.0;
-         }
-
-/* Use the scale and shift terms from the WinMap for the upper axes of
-   the new WinMap. */
-         aa = a;
-         bb = b;
-
-         for( i = 0; i < ninw; i++ ){               
-            *(ar++) = *(aa++);
-            *(br++) = *(bb++);
-         }
-      }
-   }
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
-   b = (double *) astFree( (void *) b );
-   a = (double *) astFree( (void *) a );
-
-/* Re-instate the original setting of the Invert attribute for the
-   supplied WinMap. */
-   astSetInvert( wm, old_winv );
-
-/* If an error has occurred, annull the returned WinMap. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output WinMap. */
-   return result;
-}
-
-static AstWinMap *WinWin( AstMapping *map1, AstMapping *map2, int inv1, 
-                          int inv2, int series, int *status ){
-/*
-*  Name:
-*     WinWin
-
-*  Purpose:
-*     Create a merged WinMap from two supplied WinMaps.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstWinMap *WinWin( AstMapping *map1, AstMapping *map2, int inv1, 
-*                        int inv2, int series, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     This function creates a new WinMap which performs a mapping
-*     equivalent to applying the two supplied WinMaps either in series 
-*     or parallel in the directions specified by the "invert" flags 
-*     (the Invert attributes of the supplied WinMaps are ignored).
-
-*  Parameters:
-*     map1
-*        A pointer to the WinMap to apply first (if in series), or to the 
-*        lower axis indices (if in parallel)
-*     map2
-*        A pointer to the WinMap to apply second (if in series), or to the 
-*        upper axis indices (if in parallel)
-*     inv1
-*        The invert flag to use with map1. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     inv2
-*        The invert flag to use with map2. 
-*     series
-*        If non-zero, then the supplied WinMaps are combined in series.
-*        Otherwise, they are combined in parallel.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new WinMap.
-
-*  Notes:
-*     -  The forward direction of the returned WinMap is equivalent to the
-*     combined effect of the two supplied WinMap, operating in the
-*     directions specified by "inv1" and "inv2". 
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *result;            /* Pointer to output WinMap */
-   AstWinMap *wm1;               /* Pointer to the first supplied WinMap */
-   AstWinMap *wm2;               /* Pointer to the second supplied WinMap */
-   double *a[ 2 ];               /* Pointers to shift term arrays */
-   double *a0;                   /* Pointer to next shift term from WinMap 1 */
-   double *a1;                   /* Pointer to next shift term from WinMap 2 */
-   double *ar;                   /* Pointer to next shift term in result */
-   double *b[ 2 ];               /* Pointers to scale term arrays */
-   double *b0;                   /* Pointer to next scale term from WinMap 1 */
-   double *b1;                   /* Pointer to next scale term from WinMap 2 */
-   double *br;                   /* Pointer to next scale term in result */
-   int i;                        /* Axis index */
-   int invert[ 2 ];              /* Array of invert flags */
-   int nin[ 2 ];                 /* No. of axes in the two WinMaps */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   result = NULL;
-
-/* Store pointers to the WinMaps. */
-   wm1 = (AstWinMap *) map1;
-   wm2 = (AstWinMap *) map2;
-
-/* Temporarily set their Invert attributes to the supplied values. */
-   invert[ 0 ] = astGetInvert( wm1 );
-   astSetInvert( wm1, inv1 );
-
-   invert[ 1 ] = astGetInvert( wm2 );
-   astSetInvert( wm2, inv2 );
-   
-/* Create copies of the scale and shift terms from the two WinMaps,
-   and store the number of axes in each WinMap. The scale and shift terms
-   returned take into account the setting of the Invert attribute. */
-   nin[ 0 ] = astWinTerms( wm1, a, b );
-   nin[ 1 ] = astWinTerms( wm2, a + 1, b + 1 );
-   
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* Series */
-/* ====== */
-      if( series ){
-
-/* Merge the scale and shift terms for the two WinMaps, overwriting the
-   terms for the first WinMap. To be merged in series, both WinMaps must
-   have the same number of axes, so it matters not whether we use nin[ 0 ]
-   or nin[ 1 ] to specify the number of axes. */
-         a0 = a[ 0 ];
-         b0 = b[ 0 ];
-         a1 = a[ 1 ];
-         b1 = b[ 1 ];
-         for( i = 0; i < nin[ 0 ]; i++ ){               
-   
-            if( *a0 != AST__BAD && *b0 != AST__BAD &&
-                *a1 != AST__BAD && *b1 != AST__BAD ){
-   
-               *a0 *= (*b1);
-               *a0 += (*a1);
-               *b0 *= (*b1);
-   
-            } else {
-               *a0 = AST__BAD;
-               *b0 = AST__BAD;
-               *a1 = AST__BAD;
-               *b1 = AST__BAD;
-            }
-   
-   /* Move on to the next axis. */
-            a0++;
-            b0++;
-            a1++;
-            b1++;
-         }
-
-/* Create the merged WinMap with unspecified corners. */
-         result = astWinMap( nin[ 0 ], NULL, NULL, NULL, NULL, "", status );
-
-/* Store the merged scale and shift terms in the new WinMap. The forward 
-   transformation of this WinMap then corresponds to the combination of the 
-   two supplied WinMaps, taking into account their invert flags. */
-         a0 = a[ 0 ];
-         b0 = b[ 0 ];
-         ar = result->a;
-         br = result->b;
-         for( i = 0; i < nin[ 0 ]; i++ ){               
-            *(ar++) = *(a0++);
-            *(br++) = *(b0++);
-         }
-
-/* Parallel */
-/* ======== */
-      } else {
-
-/* Create the merged WinMap with unspecified corners. */
-         result = astWinMap( nin[ 0 ] + nin[ 1 ], NULL, NULL, NULL, NULL, "", status );
-
-/* Copy the scale and shift terms into the new WinMap. */
-         a0 = a[ 0 ];
-         b0 = b[ 0 ];
-         a1 = a[ 1 ];
-         b1 = b[ 1 ];
-         ar = result->a;
-         br = result->b;
-
-         for( i = 0; i < nin[ 0 ]; i++ ){               
-            *(ar++) = *(a0++);
-            *(br++) = *(b0++);
-         }
-
-         for( i = 0; i < nin[ 1 ]; i++ ){               
-            *(ar++) = *(a1++);
-            *(br++) = *(b1++);
-         }
-      }
-   }
-
-/* Re-instate the original settings of the Invert attributes for the
-   supplied WinMaps. */
-   astSetInvert( wm1, invert[ 0 ] );
-   astSetInvert( wm2, invert[ 1 ] );
-   
-/* Free the memory. */
-   a[ 0 ] = (double *) astFree( (void *) a[ 0 ] );
-   b[ 0 ] = (double *) astFree( (void *) b[ 0 ] );
-   a[ 1 ] = (double *) astFree( (void *) a[ 1 ] );
-   b[ 1 ] = (double *) astFree( (void *) b[ 1 ] );
-
-/* If an error has occurred, annull the returned WinMap. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output WinMap. */
-   return result;
-}
-
-static AstWinMap *WinZoom( AstWinMap *wm, AstZoomMap *zm, int winv, 
-                           int zinv, int win1, int series, int *status ){
-/*
-*  Name:
-*     WinZoom
-
-*  Purpose:
-*     Create a WinMap by merging a WinMap and a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstWinMap *WinZoom( AstWinMap *wm, AstZoomMap *zm, int winv, 
-*                         int zinv, int win1, int series, int *status )
-
-*  Class Membership:
-*     WinMap member function 
-
-*  Description:
-*     This function creates a new WinMap which performs a mapping
-*     equivalent to applying the two supplied Mappings in series or
-*     parallel in the directions specified by the "invert" flags (the 
-*     Invert attributes of the supplied WinMaps are ignored). 
-
-*  Parameters:
-*     wm
-*        A pointer to the WinMap.
-*     zm
-*        A pointer to the ZoomMap.
-*     winv
-*        The invert flag to use with wm. A value of zero causes the forward
-*        mapping to be used, and a non-zero value causes the inverse
-*        mapping to be used.
-*     zinv
-*        The invert flag to use with zm.
-*     win1
-*        Indicates the order in which the Mappings should be applied. 
-*
-*        If win1 is non-zero:
-*           If in series:
-*              "wm" is applied first followed by "zm". 
-*           If in parallel:
-*              "wm" applies to the lower axis indices and "zm" to the upper
-*              axis indices.
-*
-*        If win1 is zero:
-*           If in series:
-*              "zm" is applied first followed by "wm". 
-*           If in parallel:
-*              "zm" applies to the lower axis indices and "wm" to the upper
-*              axis indices.
-*     series
-*        Should be supplied non-zero if the Mappings are to be combined in 
-*        series.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the new WinMap.
-
-*  Notes:
-*     -  The forward direction of the returned WinMap is equivalent to the
-*     combined effect of the two supplied Mappings, operating in the
-*     directions specified by "zinv" and "winv". 
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstWinMap *result;            /* Pointer to output WinMap */
-   double *a;                    /* Pointer to shift term array */
-   double *aa;                   /* Pointer to next shift term */
-   double *ar;                   /* Pointer to next shift term in result */
-   double *b;                    /* Pointer to scale term array */
-   double *bb;                   /* Pointer to next scale term */
-   double *br;                   /* Pointer to next scale term in result */
-   double zfac;                  /* Zoom factor */
-   int i;                        /* Axis index */
-   int ninw;                     /* No. of axes in the WinMap */
-   int ninz;                     /* No. of axes in the ZoomMap */
-   int old_winv;                 /* Original setting of WinMap Invert attribute */
-   int old_zinv;                 /* Original setting of ZoomMap Invert attribute */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the returned pointer. */
-   result = NULL;
-
-/* Temporarily set the Invert attributes of both Mappings to the supplied 
-   values. */
-   old_winv = astGetInvert( wm );
-   astSetInvert( wm, winv );
-
-   old_zinv = astGetInvert( zm );
-   astSetInvert( zm, zinv );
-   
-/* Get the zoom factor implemented by the ZoomMap. Invert it if necessary
-   since astGetZoom does not take account of the Invert setting.  */
-   zfac = astGetZoom( zm );
-   if( zinv ) zfac = 1.0 / zfac;
-
-/* Create copies of the scale and shift terms from the WinMap, and store the 
-   number of axes in it. */
-   ninw = astWinTerms( wm, &a, &b );
-   
-/* Check the pointers can be used. */
-   if( astOK ){
-
-/* First do series mode... */
-      if( series ) {
-
-/* Modify the WinMap scale and shift terms by the zoom factor. How this is 
-   done depends on which way round the Mappings are applied. */
-         bb = b;
-         aa = a;
-                 
-         for( i = 0; i < ninw; i++ ){               
-   
-            if( *aa != AST__BAD && *bb != AST__BAD && zfac != AST__BAD ){
-               *bb *= zfac;
-               if( win1 ) *aa *= zfac;
-            } else {
-               *bb = AST__BAD;
-               *aa = AST__BAD;
-            }
-      
-            aa++;
-            bb++;
-         }
-
-/* Create the merged WinMap with unspecified corners. */
-         result = astWinMap( ninw, NULL, NULL, NULL, NULL, "", status );
-
-/* Store the merged scale and shift terms in the new WinMap. The forward 
-   transformation of this WinMap then corresponds to the combination of the 
-   two supplied Mappings, taking into account their invert flags. */
-         aa = a;
-         bb = b;
-         ar = result->a;
-         br = result->b;
-         for( i = 0; i < ninw; i++ ){               
-            *(ar++) = *(aa++);
-            *(br++) = *(bb++);
-         }
-
-/* Now do parallel mode... */
-      } else {
-
-/* Get the number of axes in the ZoomMap. */
-         ninz = astGetNin( zm );
-
-/* Create the merged WinMap with unspecified corners. */
-         result = astWinMap( ninw + ninz, NULL, NULL, NULL, NULL, "", status );
-
-/* If the WinMap applies to the lower axis indices... */
-         if( win1 ) {
-
-/* Use the scale and shift terms from the WinMap for the lower axes of
-   the new WinMap. */
-            aa = a;
-            bb = b;
-            ar = result->a;
-            br = result->b;
-
-            for( i = 0; i < ninw; i++ ){               
-               *(ar++) = *(aa++);
-               *(br++) = *(bb++);
-            }
-
-/* Use the scale factor (with zero shift) from the ZoomMap for the upper axes 
-   of the new WinMap. */
-            for( i = 0; i < ninz; i++ ){               
-               *(ar++) = 0.0;
-               *(br++) = zfac;
-            }
-
-/* If the WinMap applies to the upper axis indices... */
-         } else {
-
-/* Use the scale factor (with zero shift) from the ZoomMap for the lower axes 
-   of the new WinMap. */
-            ar = result->a;
-            br = result->b;
-
-            for( i = 0; i < ninz; i++ ){               
-               *(ar++) = 0.0;
-               *(br++) = zfac;
-            }
-
-/* Use the scale and shift terms from the WinMap for the upper axes of
-   the new WinMap. */
-            aa = a;
-            bb = b;
-
-            for( i = 0; i < ninw; i++ ){               
-               *(ar++) = *(aa++);
-               *(br++) = *(bb++);
-            }
-         }
-      }
-   }
-
-/* Free the copies of the scale and shift terms from the supplied WinMap. */
-   b = (double *) astFree( (void *) b );
-   a = (double *) astFree( (void *) a );
-
-/* Re-instate the original settings of the Invert attribute for the
-   supplied Mappings. */
-   astSetInvert( wm, old_winv );
-   astSetInvert( zm, old_zinv );
-
-/* If an error has occurred, annull the returned WinMap. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return a pointer to the output WinMap. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for WinMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for WinMap objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the WinMap to be copied.
-*     objout
-*        Pointer to the WinMap being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   AstWinMap *out;              /* Pointer to output WinMap */
-   AstWinMap *in;               /* Pointer to input WinMap */
-   int ncoord;                  /* No. of axes for the mapping */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the input and output WinMaps. */
-   in= (AstWinMap *) objin;
-   out = (AstWinMap *) objout;
-
-/* Get the number of coordinates mapped by the WinMap. */
-   ncoord = astGetNin( in );
-
-/* Allocate memory holding copies of the scales and shifts window defining the 
-   mapping. */
-   out->a = (double *) astStore( NULL, (void *) in->a, 
-                                  sizeof(double)*(size_t)ncoord );
-   out->b = (double *) astStore( NULL, (void *) in->b, 
-                                  sizeof(double)*(size_t)ncoord );
-
-/* If an error occurred, free any allocated memory. */
-   if ( !astOK ) {
-      out->a = (double *) astFree( (void *) out->a );
-      out->b = (double *) astFree( (void *) out->b );
-   }
-
-}
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for WinMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for WinMap objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the WinMap to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - This destructor does nothing and exists only to maintain a
-*     one-to-one correspondence between destructors and copy
-*     constructors.
-*/
-
-/* Local Variables: */
-   AstWinMap *this;              /* Pointer to WinMap */
-
-/* Obtain a pointer to the WinMap structure. */
-   this = (AstWinMap *) obj;
-
-/* Free the memory holding the scales and shifts. */
-   this->a = (double *) astFree( (void *) this->a );
-   this->b = (double *) astFree( (void *) this->b );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for WinMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the WinMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the WinMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define COMMENT_LEN 50           /* Maximum length of a comment string */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstWinMap *this;              /* Pointer to the WinMap structure */
-   char buff[ KEY_LEN + 1 ];     /* Buffer for keyword string */
-   char comment[ COMMENT_LEN + 1 ]; /* Buffer for comment string */
-   int axis;                     /* Axis index */
-   int ncoord;                   /* No. of axes for mapping */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the WinMap structure. */
-   this = (AstWinMap *) this_object;
-
-/* Get the number of coordinates to be mapped. */
-   ncoord = astGetNin( this );
-
-/* Write out values representing the instance variables for the
-   WinMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* The scales and shifts. */
-   for( axis = 0; axis < ncoord; axis++ ){
-      (void) sprintf( buff, "Sft%d", axis + 1 );
-      (void) sprintf( comment, "Shift for axis %d", axis + 1 );
-      astWriteDouble( channel, buff, (this->a)[ axis ] != 0.0, 0,
-                      (this->a)[ axis ], comment );
-      (void) sprintf( buff, "Scl%d", axis + 1 );
-      (void) sprintf( comment, "Scale factor for axis %d", axis + 1 );
-      astWriteDouble( channel, buff, (this->b)[ axis ] != 1.0, 0,
-                      (this->b)[ axis ], comment );
-   }
-
-/* Undefine macros local to this function. */
-#undef COMMENT_LEN
-#undef KEY_LEN
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAWinMap and astCheckWinMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(WinMap,Mapping)
-astMAKE_CHECK(WinMap)
-
-AstWinMap *astWinMap_( int ncoord, const double c1_in[], const double c2_in[], 
-                       const double c1_out[], const double c2_out[], 
-                       const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astWinMap
-f     AST_WINMAP
-
-*  Purpose:
-*     Create a WinMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "winmap.h"
-c     AstWinMap *astWinMap( int ncoord,
-c                           const double ina[],  const double inb[],
-c                           const double outa[], const double outb[],
-c                           const char *options, ... )
-f     RESULT = AST_WINMAP( NCOORD, INA, INB, OUTA, OUTB, OPTIONS, STATUS )
-
-*  Class Membership:
-*     WinMap constructor.
-
-*  Description:
-*     This function creates a new WinMap and optionally initialises its
-*     attributes.
-*
-*     A Winmap is a linear Mapping which transforms a rectangular
-*     window in one coordinate system into a similar window in another
-*     coordinate system by scaling and shifting each axis (the window
-*     edges being parallel to the coordinate axes).
-*
-*     A WinMap is specified by giving the coordinates of two opposite
-*     corners (A and B) of the window in both the input and output
-*     coordinate systems.
-
-*  Parameters:
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinate values for each point to be
-*        transformed (i.e. the number of dimensions of the space in
-*        which the points will reside). The same number is applicable
-*        to both input and output points.
-c     ina
-f     INA( NCOORD ) = DOUBLE PRECISION (Given)
-c        An array containing the "ncoord"
-f        An array containing the
-*        coordinates of corner A of the window in the input coordinate 
-*        system.
-c     inb
-f     INB( NCOORD ) = DOUBLE PRECISION (Given)
-c        An array containing the "ncoord"
-f        An array containing the
-*        coordinates of corner B of the window in the input coordinate 
-*        system.
-c     outa
-f     OUTA( NCOORD ) = DOUBLE PRECISION (Given)
-c        An array containing the "ncoord"
-f        An array containing the 
-*        coordinates of corner A of the window in the output coordinate 
-*        system.
-c     outb
-f     OUTB( NCOORD ) = DOUBLE PRECISION (Given)
-c        An array containing the "ncoord"
-f        An array containing the
-*        coordinates of corner B of the window in the output coordinate 
-*        system.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new WinMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new WinMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astWinMap()
-f     AST_WINMAP = INTEGER
-*        A pointer to the new WinMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstWinMap *new;              /* Pointer to new WinMap */
-   va_list args;                /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the WinMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitWinMap( NULL, sizeof( AstWinMap ), !class_init, &class_vtab,
-                        "WinMap", ncoord, c1_in, c2_in, c1_out, c2_out );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new WinMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new WinMap. */
-   return new;
-}
-
-AstWinMap *astWinMapId_( int ncoord, const double c1_in[], const double c2_in[], 
-                         const double c1_out[], const double c2_out[], 
-                         const char *options, ... ) {
-/*
-*  Name:
-*     astWinMapId_
-
-*  Purpose:
-*     Create a WinMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstWinMap *astWinMapId_( int ncoord, const double c1_in[], 
-*                              const double c2_in[], const double c1_out[], 
-*                              const double c2_out[], 
-*                              const char *options, ... ) 
-
-*  Class Membership:
-*     WinMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astWinMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astWinMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astWinMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astWinMap_.
-
-*  Returned Value:
-*     The ID value associated with the new WinMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstWinMap *new;              /* Pointer to new WinMap */
-   va_list args;                /* Variable argument list */
-   int *status;                 /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the WinMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitWinMap( NULL, sizeof( AstWinMap ), !class_init, &class_vtab,
-                        "WinMap", ncoord, c1_in, c2_in, c1_out, c2_out );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new WinMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new WinMap. */
-   return astMakeId( new );
-}
-
-AstWinMap *astInitWinMap_( void *mem, size_t size, int init,
-                           AstWinMapVtab *vtab, const char *name,
-                           int ncoord, const double *c1_in, 
-                           const double *c2_in, const double *c1_out, 
-                           const double *c2_out, int *status ) {
-/*
-*+
-*  Name:
-*     astInitWinMap
-
-*  Purpose:
-*     Initialise a WinMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstWinMap *astInitWinMap( void *mem, size_t size, int init,
-*                               AstWinMapVtab *vtab, const char *name,
-*                               int ncoord, const double *c1_in, 
-*                               const double *c2_in, 
-*                               const double *c1_out, const double *c2_out ) 
-
-*  Class Membership:
-*     WinMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new WinMap object. It allocates memory (if necessary) to accommodate
-*     the WinMap plus any additional data associated with the derived class.
-*     It then initialises a WinMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a WinMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the WinMap is to be initialised.
-*        This must be of sufficient size to accommodate the WinMap data
-*        (sizeof(WinMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the WinMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the WinMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the WinMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new WinMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     ncoord
-*        The number of coordinate values per point.
-*     c1_in
-*        The input coordinates of corner C1 of the window.
-*     c2_in
-*        The input coordinates of corner C2 of the window.
-*     c1_out
-*        The output coordinates of corner C1 of the window.
-*     c2_out
-*        The output coordinates of corner C2 of the window.
-
-*  Returned Value:
-*     A pointer to the new WinMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstWinMap *new;              /* Pointer to new WinMap */
-   double denom;                /* Denominotor */
-   int axis;                    /* Axis index */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitWinMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the WinMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-   new = (AstWinMap *) astInitMapping( mem, size, 0,
-                                       (AstMappingVtab *) vtab, name,
-                                       ncoord, ncoord, 1, 1 );
-
-   if ( astOK ) {
-
-/* Initialise the WinMap data. */
-/* ---------------------------- */
-/* Allocate memory to hold the shift and scale for each axis. */
-      new->a = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-      new->b = (double *) astMalloc( sizeof(double)*(size_t)ncoord );
-
-/* Check the pointers can be used */
-      if( astOK ){
-
-/* Calculater and store the shift and scale for each axis. */
-         for( axis = 0; axis < ncoord; axis++ ){
-
-/* If any of the corners have not been provided, store bad values. */
-            if( !c1_in || !c1_out || !c2_in || !c2_out ) {
-               (new->b)[ axis ] = AST__BAD;
-               (new->a)[ axis ] = AST__BAD;
-
-/* Otherwise, check the corners are good (not AST__BAD or NaN)... */        
-            } else if( astISGOOD(c2_in[ axis ]) && astISGOOD(c1_in[ axis ]) &&
-                       astISGOOD(c2_out[ axis ]) && astISGOOD(c1_out[ axis ]) ){
-   
-               denom = c2_in[ axis ] - c1_in[ axis ];
-               if( denom != 0.0 ){
-                  (new->b)[ axis ] = ( c2_out[ axis ] - c1_out[ axis ] )/denom;
-                  (new->a)[ axis ] = c1_out[ axis ] - (new->b)[ axis ]*c1_in[ axis ];
-               } else {
-                  (new->b)[ axis ] = AST__BAD;
-                  (new->a)[ axis ] = AST__BAD;
-               }
-
-            } else {
-               (new->b)[ axis ] = AST__BAD;
-               (new->a)[ axis ] = AST__BAD;
-            }
-
-         }
-
-      }
-
-/* If an error occurred, clean up by deleting the new WinMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new WinMap. */
-   return new;
-}
-
-AstWinMap *astLoadWinMap_( void *mem, size_t size,
-                           AstWinMapVtab *vtab, const char *name,
-                           AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadWinMap
-
-*  Purpose:
-*     Load a WinMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "winmap.h"
-*     AstWinMap *astLoadWinMap( void *mem, size_t size,
-*                               AstWinMapVtab *vtab, const char *name,
-*                               AstChannel *channel )
-
-*  Class Membership:
-*     WinMap loader.
-
-*  Description:
-*     This function is provided to load a new WinMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     WinMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a WinMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the WinMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        WinMap data (sizeof(WinMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the WinMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the WinMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstWinMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new WinMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the WinMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "WinMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new WinMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Constants. */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-#define KEY_LEN 50               /* Maximum length of a keyword */
-
-/* Local Variables: */
-   AstWinMap *new;              /* Pointer to the new WinMap */
-   char buff[ KEY_LEN + 1 ];    /* Buffer for keyword string */
-   int axis;                    /* Axis index */
-   int ncoord;                  /* The number of coordinate axes */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this WinMap. In this case the
-   WinMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstWinMap );
-      vtab = &class_vtab;
-      name = "WinMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitWinMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built WinMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Get the number of axis for the mapping. */
-      ncoord = astGetNin( (AstMapping *) new );
-
-/* Allocate memory to hold the scales and shifts. */
-      new->a = (double *) astMalloc( sizeof(double)*(size_t)ncoord );   
-      new->b = (double *) astMalloc( sizeof(double)*(size_t)ncoord );   
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "WinMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* The scales and shifts. */
-      for( axis = 0; axis < ncoord; axis++ ){
-         (void) sprintf( buff, "sft%d", axis + 1 );
-         (new->a)[ axis ] = astReadDouble( channel, buff, 0.0 );
-         (void) sprintf( buff, "scl%d", axis + 1 );
-         (new->b)[ axis ] = astReadDouble( channel, buff, 1.0 );
-      }
-   }
-
-/* If an error occurred, clean up by deleting the new WinMap. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new WinMap pointer. */
-   return new;
-
-/* Undefine macros local to this function. */
-#undef KEY_LEN
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-int astWinTerms_( AstWinMap *this, double **scale, double **shift, int *status ){
-   if( !astOK ) return 0;
-   return (**astMEMBER(this,WinMap,WinTerms))( this, scale, shift, status );
-}
-
-
-
-
diff --git a/ast-5.3-1/winmap.h b/ast-5.3-1/winmap.h
deleted file mode 100644
index c30b9c8..0000000
--- a/ast-5.3-1/winmap.h
+++ /dev/null
@@ -1,300 +0,0 @@
-#if !defined( WINMAP_INCLUDED ) /* Include this file only once */
-#define WINMAP_INCLUDED
-/*
-*+
-*  Name:
-*     winmap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the WinMap class.
-
-*  Invocation:
-*     #include "winmap.h"
-
-*  Description:
-*     This include file defines the interface to the WinMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The WinMap class implements Mappings which maps one window onto 
-*     another window by scaling and shifting the values on each axis.
-
-*  Inheritance:
-*     The WinMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     None.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        ClearAttrib
-*           Clear an attribute value for a WinMap.
-*        GetAttrib
-*           Get an attribute value for a WinMap.
-*        SetAttrib
-*           Set an attribute value for a WinMap.
-*        TestAttrib
-*           Test if an attribute value has been set for a WinMap.
-*        astMapMerge
-*           Simplify a sequence of Mappings containing a WinMap.
-*        astTransform
-*           Apply a WinMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astWinTerms
-*           Obtain copies of the shift and scale terms used by a WinMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAWinMap
-*           Test class membership.
-*        astWinMap
-*           Create a WinMap.
-*
-*     Protected:
-*        astCheckWinMap
-*           Validate class membership.
-*        astInitWinMap
-*           Initialise a WinMap.
-*        astInitWinMapVtab
-*           Initialise the virtual function table for the WinMap class.
-*        astLoadWinMap
-*           Load a WinMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstWinMap
-*           WinMap object type.
-*
-*     Protected:
-*        AstWinMapVtab
-*           WinMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     23-OCT-1996 (DSB):
-*        Original version.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitWinMapVtab
-*        method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* WinMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstWinMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double *a;                   /* Pointer to array of shifts */
-   double *b;                   /* Pointer to array of scale factors */
-
-} AstWinMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstWinMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* WinTerms)( AstWinMap *, double **, double **, int * );
-
-} AstWinMapVtab;
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within the
-   object.c file. */
-
-typedef struct AstWinMapGlobals {
-   AstWinMapVtab Class_Vtab;
-   int Class_Init;
-} AstWinMapGlobals;
-
-
-/* Thread-safe initialiser for all global data used by this module. */
-void astInitWinMapGlobals_( AstWinMapGlobals * );
-
-#endif
-
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(WinMap)          /* Check class membership */
-astPROTO_ISA(WinMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstWinMap *astWinMap_( int, const double [], const double [], const double [], const double [], const char *, int *, ...);
-#else
-AstWinMap *astWinMapId_( int, const double [], const double [], const double [], const double [], const char *, ... )__attribute__((format(printf,6,7)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstWinMap *astInitWinMap_( void *, size_t, int, AstWinMapVtab *,
-                           const char *, int, const double *, const double *, 
-                           const double *, const double *, int * );
-
-/* Vtab initialiser. */
-void astInitWinMapVtab_( AstWinMapVtab *, const char *, int * );
-
-/* Loader. */
-AstWinMap *astLoadWinMap_( void *, size_t, AstWinMapVtab *,
-                           const char *, AstChannel *, int * );
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-int astWinTerms_( AstWinMap *, double **, double **, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckWinMap(this) astINVOKE_CHECK(WinMap,this,0)
-#define astVerifyWinMap(this) astINVOKE_CHECK(WinMap,this,1)
-
-/* Test class membership. */
-#define astIsAWinMap(this) astINVOKE_ISA(WinMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astWinMap astINVOKE(F,astWinMap_)
-#else
-#define astWinMap astINVOKE(F,astWinMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define \
-astInitWinMap(mem,size,init,vtab,name,ncoord,c1_in,c2_in,c1_out,c2_out) \
-astINVOKE(O,astInitWinMap_(mem,size,init,vtab,name,ncoord,c1_in,c2_in,c1_out,c2_out,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitWinMapVtab(vtab,name) astINVOKE(V,astInitWinMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadWinMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadWinMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckWinMap to validate WinMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astWinTerms(this,scale,shift) \
-astINVOKE(V,astWinTerms_(astCheckWinMap(this),scale,shift,STATUS_PTR))
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/xml.c b/ast-5.3-1/xml.c
deleted file mode 100644
index 48d79c2..0000000
--- a/ast-5.3-1/xml.c
+++ /dev/null
@@ -1,7119 +0,0 @@
-/*
-*  Name:
-*     xml.c
-
-*  Purpose:
-*     Implement XML functions for AST.
-
-*  Description:
-*     This file implements the Xml module which provides generic XML 
-*     reading and writing functions for the XmlChan class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     22-OCT-2003 (DSB):
-*        Original version.
-*     12-JAN-2004 (DSB):
-*        Major revisions.
-*     10-FEB-2004 (DSB):
-*        - Added debug conditional code to keep track of memory leaks.
-*        - Other minor bug fixes.
-*     6-FEB-2004 (DSB):
-*        DefaultURI and astXmlAddURI modified to allow a blank URI to be
-*        used to ignore a default namespace URI provided by an enclosing
-*        element.
-*     29-NOV-2004 (DSB):
-*        Added astXmlGetType method.
-*     27-JAN-2005 (DSB):
-*        - Move astXmlTrace and associated code into conditional
-*        compilation blokc (included if DEBUG macro is defined). This
-*        speeds up the create and destruction of XmlObjects in non-DEBUG code.
-*        - Renamed the private Delete function as astXmlDelete and gave
-*        it protected access.
-*        - Modify astXmlDelete so that it can succesfully annul objects
-*        which have no parent.
-*        - Include extra info in some error messages.
-*     1-MAR-2006 (DSB):
-*        Replace astSetPermMap within DEBUG blocks by astBeginPM/astEndPM.
-*     10-DEC-2008 (DSB):
-*        Allow a prefix to be included with the attribute name in
-*        astXmlGetAttributeValue.
-*/
-
-
-/* Module Constants. */
-/* ----------------- */
-/* Set the name of the module we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. NB, this module is not a proper AST 
-   class, but it defines this macro sanyway in order to get the protected
-   symbols defined in memory.h */
-#define astCLASS Xml
-
-#define IND_INC 3
-
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "memory.h"            /* Interface to the memory management module */
-#include "error.h"             /* Interface to the error module */
-#include "xml.h"               /* Interface to this module */
-#include "globals.h"           /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"           /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-
-/*
-*  Name:
-*     MAKE_CHECK
-
-*  Type:
-*     Private macro.
-
-*  Purpose:
-*     Implement the astXmlCheck<type>_ function for XML structures.
-
-*  Synopsis:
-*     #include "xml.h"
-*     MAKE_CHECK(type,id)
-
-*  Class Membership:
-*     Defined by the xml module.
-
-*  Description:
-*     This macro expands to an implementation of the protected
-*     astXmlCheck<type>_ function (q.v.) which validates membership of 
-*     a specified XML data type.
-
-*  Parameters:
-*     type
-*        The type whose membership is to be validated (e.g. "Element" not
-*        "XmlElement").
-*     id
-*        The constant (e.g. "AST__XMLELEM") defining the data type.
-
-*  Notes:
-*     -  To avoid problems with some compilers, you should not leave any white
-*     space around the macro arguments.
-*/
-
-/* Define the macro. */
-#define MAKE_CHECK(type,id) \
-\
-/* Declare the function */ \
-AstXml##type *astXmlCheck##type##_( void *this, int nullok, int *status ) { \
-\
-/* Local Variables: */\
-   AstXml##type *result;    /* The returned pointer */\
-\
-/* Check the global error status. If an error has already occurred just\
-   return the supplied pointer. This is so that functions such as\
-   astXmlAnnul which do not check the inherited status receive the\
-   supplied pointer. */\
-   if( !astOK ) return this;\
-\
-/* Initialise */\
-   result = NULL;\
-\
-/* If the pointer is NULL issue an error if nullok is zero. */\
-   if( !this ) {\
-      if( !nullok ) astError( AST__PTRIN, "astXmlCheck"#type": Invalid "\
-                              "NULL pointer supplied." , status);\
-\
-/* Otherwise get the "type" component which holds a magic value for each\
-   different class of structure. Compare this value against all valid \
-   classes of structure. If no match is found, the pointer does not \
-   identify an suitable structure, and so report an error and return \
-   NULL. */\
-   } else {\
-      if( !astXmlCheckType( ( AstXmlObject * ) this, id ) ) {\
-         astError( AST__PTRIN, "astXmlCheck"#type": Invalid pointer "\
-                   "supplied; pointer to AstXml"#type" required." , status);\
-      } else {\
-         result = (AstXml##type *) this;\
-      }\
-   }\
-\
-/* Return the result. */\
-   return result;\
-}
-
-
-/* Module variables. */
-/* ================= */
-
-/* Define macros for accessing all items of thread-safe global data 
-   used by this module. */
-#ifdef THREAD_SAFE
-
-#define next_id astGLOBAL(Xml,Next_ID)
-#define gettag_buff astGLOBAL(Xml,GetTag_Buff)
-#define GLOBAL_inits globals->Next_ID = 0; 
-astMAKE_INITGLOBALS(Xml)
-
-/* Set up mutexes */
-static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-#define LOCK_MUTEX1 pthread_mutex_lock( &mutex1 ); 
-#define UNLOCK_MUTEX1 pthread_mutex_unlock( &mutex1 ); 
-
-/* If thread safety is not needed, declare globals at static variables. */ 
-#else
-
-static int next_id = 0;
-static char gettag_buff[ AST__XML_GETTAG_BUFF_LEN + 1 ];
-
-#define LOCK_MUTEX1 
-#define UNLOCK_MUTEX1 
-
-#ifdef DEBUG   /* Not available in thread-safe compilations */
-static int nobj = 0;
-static AstXmlObject **existing_objects = NULL;
-#endif
-
-#endif
-
-
-/* Function prototypes. */
-/* ==================== */
-
-/* Private member functions. */
-/* ------------------------- */
-static AstXmlAttribute *FindAttribute( AstXmlElement *, const char *, int * );
-static AstXmlAttribute *NewAttribute( const char *, const char *, const char *, int * );
-static AstXmlDocument *NewDocument( int * );
-static AstXmlPrologue *NewPrologue( AstXmlDocument *, int * );
-static AstXmlNamespace *NewNamespace( const char *, const char *, int * );
-static char *AppendChar( char *, int *, char, int * );
-static char *AppendLine( char *, int *, const char *, int, int * );
-static char *RemoveEscapes( const char *, int * );
-static char *CleanText( const char *, int * );
-static const char *AddEscapes( const char *, int * );
-static const char *DefaultURI( AstXmlElement *, int * );
-static const char *Format( AstXmlObject *, int, int * );
-static char *FormatTag( AstXmlObject *, int, int * );
-static const char *ResolvePrefix( const char *, AstXmlElement *, int * );
-static int CheckType( long int, long int, int * );
-static int MatchName( AstXmlElement *, const char *, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static void AddContent( AstXmlParent *, int, AstXmlContentItem *, int * );
-static void CheckName( const char *, const char *, const char *, int, int * );
-static void CheckPrefName( char *, const char *, const char *, int * );
-static void CleanXml( AstXmlObject *, long int, int * );
-static void InitXmlAttribute( AstXmlAttribute *, int, const char *, const char *, const char *, int * );
-static void InitXmlCDataSection( AstXmlCDataSection *, int, const char *, int * );
-static void InitXmlWhite( AstXmlWhite *, int, const char *, int * );
-static void InitXmlBlack( AstXmlBlack *, int, const char *, int * );
-static void InitXmlComment( AstXmlComment *, int, const char *, int * );
-static void InitXmlDocument( AstXmlDocument *, int, int * );
-static void InitXmlPrologue( AstXmlPrologue *, int, int * );
-static void InitXmlDeclPI( AstXmlDeclPI *, int, const char *, int * );
-static void InitXmlDTDec( AstXmlDTDec *, int, const char *, const char *, const char *, int * );
-static void InitXmlElement( AstXmlElement *, int, const char *, const char *, int * );
-static void InitXmlNamespace( AstXmlNamespace *, int, const char *, const char *, int * );
-static void InitXmlObject( AstXmlObject *, long int, int * );
-static void InitXmlPI( AstXmlPI *, int, const char *, const char *, int * );
-static AstXmlElement *ReadContent( AstXmlDocument **, int, int (*)( AstXmlElement *, int * ), int, char (*)( void *, int * ), void *, int, int * );
-
-#ifdef DEBUG
-static void AddObjectToList( AstXmlObject * );
-static void RemoveObjectFromList( AstXmlObject * );
-#endif
-
-/* Function implementations. */
-/* ========================= */
-
-/* Create the astXmlCheck... functiosn which check a pointer identifies
-   an XML structure of a given type. */
-
-MAKE_CHECK(Document,AST__XMLDOC)
-MAKE_CHECK(Object,AST__XMLOBJECT)
-MAKE_CHECK(Element,AST__XMLELEM)
-MAKE_CHECK(Attribute,AST__XMLATTR)
-MAKE_CHECK(CDataSection,AST__XMLCDATA)
-MAKE_CHECK(Comment,AST__XMLCOM)
-MAKE_CHECK(PI,AST__XMLPI)
-MAKE_CHECK(Namespace,AST__XMLNAME)
-MAKE_CHECK(Prologue,AST__XMLPRO)
-MAKE_CHECK(DeclPI,AST__XMLDEC)
-MAKE_CHECK(DTDec,AST__XMLDTD)
-MAKE_CHECK(White,AST__XMLWHITE)
-MAKE_CHECK(Black,AST__XMLBLACK)
-MAKE_CHECK(CharData,AST__XMLCHAR)
-MAKE_CHECK(ContentItem,AST__XMLCONT)
-MAKE_CHECK(MiscItem,AST__XMLMISC)
-MAKE_CHECK(Parent,AST__XMLPAR)
-
-
-static void AddContent( AstXmlParent *this, int where, AstXmlContentItem *item, int *status ){
-/*
-*  Name:
-*     AddContent
-
-*  Purpose:
-*     Add a content item to an XmlElement.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void AddContent( AstXmlParent *this, int where, AstXmlContentItem *item, int *status )
-
-*  Description:
-*     This function adds a supplied item to a specified XmlElement or
-*     XmlDocument. An error is reported if the item is not appropriate.
-
-*  Parameters:
-*     this
-*        The pointer to the element or document to be modified.
-*     where
-*        Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-*        indicates where the item should be added to the document:
-*          1 - In the prologue, after the XML declaration but before the DTD.
-*          2 - In the prologue, after the DTD but before the root element.
-*          3 - In the epilogue, after the root element.
-*     item
-*        Pointer to the content item to be added to the element. If
-*        "this" is an XmlElement, this can be a pointer to any of the 
-*        following types: AstXmlElement, AstXmlWhite, AstXmlBlack, 
-*        AstXmlCDataSection, AstXmlComment, AstXmlPI. If "this" is a
-*        document, the list is restricted to: AstXmlWhite, AstXmlComment,
-*        AstXmlPI.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlDocument *doc;   /* Document pointer */
-   AstXmlElement *elem;   /* Element pointer */
-   AstXmlPrologue *pro;   /* Prologue pointer */
-   int nitem;             /* Number of items in the parent */
-
-/* Check the global error status and the supplied pointers. */
-   if( !astOK || !this || !item ) return;
-
-/* Split for the two forms of parent. */
-   if( astXmlCheckType( this, AST__XMLELEM ) ) {
-      elem = (AstXmlElement *) this;
-
-/* Save the number of content items currently stored in the element. */
-      nitem = ( elem->items ) ? elem->nitem : 0;
- 
-/* Attempt to extend the array to hold an extra item. */      
-      elem->items = astGrow( elem->items, nitem + 1, 
-                             sizeof( AstXmlContentItem * ) );
-
-/* Check the memory was allocated succesfully. */
-      if( astOK ) {
-
-/* Store the supplied pointer in the array of content items. */
-         elem->items[ nitem ] = item;
-
-/* Increment the number of content items in this element */
-         elem->nitem = nitem + 1;
-
-/* Indicate that the item is owned by the element. */
-         ( (AstXmlObject *) item )->parent = this;
-      }
-
-/* Now deal with cases where we are adding an item to the prologue or
-   epilogue of the document. */
-   } else {
-      if( !astXmlCheckType( item, AST__XMLMISC ) ){
-         astError( AST__INTER, "AddContent(xml): Inappropriate attempt to "
-                   "add an item of type %ld to an XML document (internal "
-                   "AST programming error).", status, ( (AstXmlObject *) item)->type );
-
-      } else if( !astXmlCheckType( this, AST__XMLDOC ) ){
-         astError( AST__INTER, "AddContent(xml): Inappropriate attempt to "
-                   "add an item of type %ld to an XML object of type %ld "
-                   "(internal AST programming error).", status, 
-                   ( (AstXmlObject *) item)->type,
-                   ( (AstXmlObject *) this)->type );
-
-      } else {
-         doc = (AstXmlDocument *) this;
-
-/* Create a prologue if necessary. */
-         if( where < 3 && !doc->prolog ) doc->prolog = NewPrologue( doc, status );
-         pro = doc->prolog;
-
-         if( where < 2 ) {
-            nitem = ( pro->misc1 ) ? pro->nmisc1 : 0;
-            pro->misc1 = astGrow( pro->misc1, nitem + 1, sizeof( AstXmlMiscItem * ) );
-            if( astOK ) {
-               pro->misc1[ nitem ] = item;
-               pro->nmisc1 = nitem + 1;
-               ( (AstXmlObject *) item )->parent = (AstXmlParent *) pro;
-            }
-
-         } else if( where == 2 ) {
-            nitem = ( pro->misc2 ) ? pro->nmisc2 : 0;
-            pro->misc2 = astGrow( pro->misc2, nitem + 1, sizeof( AstXmlMiscItem * ) );
-            if( astOK ) {
-               pro->misc2[ nitem ] = item;
-               pro->nmisc2 = nitem + 1;
-               ( (AstXmlObject *) item )->parent = (AstXmlParent *) pro;
-            }
-
-         } else {
-            nitem = ( doc->epilog ) ? doc->nepi : 0;
-            doc->epilog = astGrow( doc->epilog, nitem + 1, sizeof( AstXmlMiscItem * ) );
-            if( astOK ) {
-               doc->epilog[ nitem ] = item;
-               doc->nepi = nitem + 1;
-               ( (AstXmlObject *) item )->parent = this;
-            }
-         }
-      }
-   }
-}
-
-static const char *AddEscapes( const char *text, int *status ){
-/*
-*  Name:
-*     AddEscapes
-
-*  Purpose:
-*     Replaces characters by corresponding entity references.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *AddEscapes( const char *text, int *status )
-
-*  Description:
-*     This function produces a dynamic copy of the supplied text in which 
-*     occurrences of "&", "<", ">", and "\"" are replaced by the corresponding 
-*     XML entity reference.
-*
-*     The "&" character is only replaced by an entity reference if it is
-*     followed by a non-name character (i.e. anything except a letter
-*     underscore or colon). If it is followed by a name character, it is
-*     assumed to mark the start of an entity reference.
-
-*  Parameters:
-*     text
-*        A pointer to a text string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string containing the required
-*     copy.
-
-*  Notes:
-*     - NULL is returned if this function is called with the global error 
-*     status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   char *result;             /* Returned pointer */
-   const char *c;            /* Pointer to next supplied character */
-   char *d;                  /* Pointer to next returned character */
-
-/* Initialise */
-   result = NULL;
-
-/* Return if the pointer is NULL or if an error has occurred. */
-   if( !astOK || !text ) return result;
-
-/* Allocate the maximum possible amount of memory that may be needed to
-   store the returned string. */
-   result = astMalloc( 6*strlen( text ) + 1 );
-
-/* Check the pointer can be used safely. */
-   if( astOK ) {
-
-/* Loop round every character in the supplied text. */
-      c = text - 1;
-      d = result;
-      while( *(++c) ) {
-
-/* We replace this character if it is a <, >, ', &, or ". */
-         if( *c == '<' ) {
-            strcpy( d, "<" );
-            d += 4;
-
-         } else if( *c == '>' ) {
-            strcpy( d, ">" );
-            d += 4;
-
-         } else if( *c == '"' ) {
-            strcpy( d, """ );
-            d += 6;
-
-         } else if( *c == '\'' ) {
-            strcpy( d, "'" );
-            d += 6;
-
-         } else if( *c == '&' ) {
-            strcpy( d, "&" );
-            d += 5;
-
-/* Otherwise just append the supplied character. */
-         } else {
-            *(d++) = *c;
-         }
-      }
-
-/* Terminate the returned string. */
-      *d = 0;
-
-/* Reallocate the string to free up any unused space. */
-      result = astRealloc( result, d - result + 1 );
-   }
-
-/* Return the result. */
-   return (const char *) result;
-}
-
-
-#ifdef DEBUG
-static void AddObjectToList( AstXmlObject *obj ){
-/*
-*  Name:
-*     AddObjectToList
-
-*  Purpose:
-*     Adds an XmlObject to a static list of all currently active XmlObjects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void AddObjectToList( AstXmlObject *obj )
-
-*  Description:
-*     This function adds the supplied pointer to a static list of pointers,
-*     and increments the number of elements in the list. This list holds
-*     pointers to all the XmlObjects which currently exist.
-
-*  Parameters:
-*     this
-*        A pointer to a new XmlObject.
-*/
-
-/* Return if the pointer is NULL or if an error has occurred. */
-   if( !astOK || !obj ) return;
-
-/* Increment the number of objects in the list and increase the size of
-   the list. */
-   astBeginPM;
-   existing_objects = astGrow( existing_objects, ++nobj, sizeof( AstXmlObject *) );
-   astEndPM;
-
-/* Add the new pointer to the end of the list. */
-   existing_objects[ nobj - 1 ] = obj;
-}
-#endif
-
-static char *AppendChar( char *str1, int *nc, char ch, int *status ) {
-/*
-*  Name:
-*     AppendChar
-
-*  Purpose:
-*     Append a character to a string which grows dynamically.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     char *AppendChar( char *str1, int *nc, char ch, int *status )
-
-*  Description:
-*     This function appends a character to a dynamically
-*     allocated string, extending the dynamic string as necessary to
-*     accommodate the new character (plus the final null).
-
-*  Parameters:
-*     str1
-*        Pointer to the null-terminated dynamic string, whose memory
-*        has been allocated using the AST memory allocation functions
-*        defined in "memory.h". If no space has yet been allocated for
-*        this string, a NULL pointer may be given and fresh space will
-*        be allocated by this function.
-*     nc
-*        Pointer to an integer containing the number of characters in
-*        the dynamic string (excluding the final null). This is used
-*        to save repeated searching of this string to determine its
-*        length and it defines the point where the new string will be
-*        appended. Its value is updated by this function to include
-*        the extra characters appended.
-*
-*        If "str1" is NULL, the initial value supplied for "*nc" will
-*        be ignored and zero will be used.
-*     ch
-*        The character which is to be appended to "str1".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A possibly new pointer to the dynamic string with the new character
-*     appended (its location in memory may have to change if it has to
-*     be extended, in which case the original memory is automatically
-*     freed by this function). When the string is no longer required,
-*     its memory should be freed using astFree.
-
-*  Notes:
-*     - If this function is invoked with the global error status set
-*     or if it should fail for any reason, then the returned pointer
-*     will be equal to "str1" and the dynamic string contents will be
-*     unchanged.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   int len;                      /* Length of new string */
-
-/* Initialise. */
-   result = str1;
-
-/* If the first string pointer is NULL, also initialise the character
-   count to zero. */
-   if ( !str1 ) *nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Calculate the total string length once the character has been added. */
-   len = *nc + 1;
-
-/* Extend the dynamic string to the required length, including
-   a final null. Save the resulting pointer, which will be
-   returned. */
-   result = astGrow( str1, len + 1, sizeof( char ) );
-
-/* If OK, append the second string and update the total character
-   count. */
-   if ( astOK ) {
-      result[ *nc ] = ch;
-      *nc = len;
-      result[ *nc ] = 0;
-   }
-
-/* Return the result pointer. */
-   return result;
-}
-
-static char *AppendLine( char *str1, int *nc, const char *str2, int ind, int *status ) {
-/*
-*  Name:
-*     AppendLine
-
-*  Purpose:
-*     Append an indented new line to another string which grows dynamically.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     char *AppendLine( char *str1, int *nc, const char *str2, int ind, int *status )
-
-*  Description:
-*     This function appends one string to another dynamically
-*     allocated string, extending the dynamic string as necessary to
-*     accommodate the new characters (plus the final null).
-*
-*     A newline character is inserted if necessary to ensure that the "str2" 
-*     string starts on a newline. If "ind" is positive, spaces are added
-*     as necessary to ensure that "str2" begins with the specified number of
-*     spaces.
-
-*  Parameters:
-*     str1
-*        Pointer to the null-terminated dynamic string, whose memory
-*        has been allocated using the AST memory allocation functions
-*        defined in "memory.h". If no space has yet been allocated for
-*        this string, a NULL pointer may be given and fresh space will
-*        be allocated by this function.
-*     nc
-*        Pointer to an integer containing the number of characters in
-*        the dynamic string (excluding the final null). This is used
-*        to save repeated searching of this string to determine its
-*        length and it defines the point where the new string will be
-*        appended. Its value is updated by this function to include
-*        the extra characters appended.
-*
-*        If "str1" is NULL, the initial value supplied for "*nc" will
-*        be ignored and zero will be used.
-*     str2
-*        Pointer to a constant null-terminated string, a copy of which
-*        is to be appended to "str1".
-*     ind
-*        The number of spaces to use as the indentation string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A possibly new pointer to the dynamic string with the new string
-*     appended (its location in memory may have to change if it has to
-*     be extended, in which case the original memory is automatically
-*     freed by this function). When the string is no longer required,
-*     its memory should be freed using astFree.
-
-*  Notes:
-*     - If this function is invoked with the global error status set
-*     or if it should fail for any reason, then the returned pointer
-*     will be equal to "str1" and the dynamic string contents will be
-*     unchanged.
-*/
-
-/* Local Variables: */
-   char *c;                      /* Point to next character */
-   char *result;                 /* Pointer value to return */
-   char *temp;                   /* Pointer to modified string */
-   int j;                        /* Loop count */
-
-/* Initialise. */
-   result = str1;
-
-/* If the first string pointer is NULL, also initialise the character
-   count to zero. */
-   if ( !str1 ) *nc = 0;
-
-/* Check the global error status. */
-   if ( !astOK || !str2 ) return result;
-
-/* Remove any trailing white space (except for newlines) from the supplied 
-   string. */
-   if( *nc > 0 ) {
-      c = str1 + *nc - 1;
-      while( isspace( *c ) && *c != '\n' ) {
-         *(c--) = 0;
-         (*nc)--;
-      }
-
-/* If the last character in the returned string is not now a newline,
-   append a newline, so long as the new item does not start with a newline. */
-      if( str1[ *nc - 1 ] != '\n' ) {
-         temp = AppendChar( str1, nc, '\n', status );
-      } else {
-         temp = str1;
-      }
-
-   } else {
-      temp = str1;
-   }
-
-/* If a fixed indentation is specified, skip over any leading spaces in
-   the second string. */
-   if( str2 ) {
-      if( ind > 0 ) {
-         while( isspace( *str2 ) ) str2++;
-      }
-
-/* If the first character of the second string is a newline, ignore it. */
-      if( str2[ 0 ] == '\n' ) str2++;
-   }
-
-/* Append the indentation string. */
-   for( j = 0; j < ind; j++ ) temp = AppendChar( temp, nc, ' ', status );
-
-/* Append the supplied string. */
-   return astAppendString( temp, nc, str2 );
-}
-
-void astXmlAddAttr_( AstXmlElement *this, const char *name, const char *value, 
-                     const char *prefix, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddAttr
-
-*  Purpose:
-*     Add an attribute to an XmlElement.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlAddAttr( AstXmlElement *this, const char *name, 
-*                         const char *value, const char *prefix )
-
-*  Description:
-*     This function adds an attribute to a specified XmlElement. If the
-*     element already contains an attribute with the given name amd prefix, 
-*     then the value of the attribute is changed to be the supplied value.
-
-*  Parameters:
-*     this
-*        The pointer to the element to be modified.
-*     name
-*        Pointer to a null terminated string containing the attribute name.
-*     value 
-*        Pointer to a null terminated string containing the attribute value.
-*     prefix
-*        The namespace prefix for the attribute. May be NULL or blank, in
-*        which case any prefix at the start of "name" is used.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlAttribute *attr;    /* The new attribute. */
-   AstXmlAttribute *oldattr; /* Pointer to existing attribute */
-   int i;                    /* Loop index */
-   int nattr;                /* Number of attributes in the element */
-   int oldi;                 /* Index of existing attribute */
-   char *my_value;           /* Cleaned value text */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Initialise */
-   oldattr = NULL;
-
-/* Clean the value text. */
-   my_value = CleanText( value, status );
-
-/* Create a new XmlAttribute. */
-   attr = NewAttribute( name, my_value, prefix, status );
-
-/* Free the memory */
-   my_value = astFree( my_value );
-
-/* If OK, indicate that the attribute is owned by the element. */
-   if( astOK ) {
-      ( (AstXmlObject *) attr )->parent = (AstXmlParent *) this;
-
-/* Save the number of attributes currently stored in the element. */
-      nattr = ( this->attrs ) ? this->nattr : 0;
-
-/* Search the existing attributes to see if an attribute with the given
-   name and prefix already exists. */
-      oldi = -1;
-      for( i = 0; i < nattr; i++ ) {
-         oldattr = this->attrs[ i ];
-         if( !strcmp( oldattr->name, attr->name ) ) {
-            if( !oldattr->prefix && !attr->prefix ) {
-               oldi = i;
-               break;
-            } else if( oldattr->prefix && attr->prefix && 
-                       !strcmp( oldattr->prefix, attr->prefix ) ){
-               oldi = i;
-               break;
-            }
-         }
-      }
-
-/* If there is an existing attribute with the same name and prefix,
-   replace the old attribute with the new one created above. */
-      if( oldi > -1 ){
-         ((AstXmlObject *)oldattr)->parent = NULL;
-         oldattr = astXmlAnnul( oldattr );      
-         this->attrs[ oldi ] = attr;
-
-/* Otherwise, attempt to extend the array to hold an extra attribute. */      
-      } else {
-         this->attrs = astGrow( this->attrs, nattr + 1, 
-                                sizeof( AstXmlAttribute * ) );
-
-/* Check all has gone OK. */
-         if( astOK ) {
-
-/* Store the attribute pointer in the array of attribute pointers. */
-            this->attrs[ nattr ] = attr;
-
-/* Increment the number of content items in this element */
-            this->nattr = nattr + 1;
-
-         }
-      }
-   }
-}
-
-void astXmlAddCDataSection_( AstXmlElement *this, const char *text, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddCDataSection
-
-*  Purpose:
-*     Create a new XmlCDataSection and add it to an XmlElement.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlAddCDataSection( AstXmlElement *this, const char *text )
-
-*  Description:
-*     This function creates a new XmlCDataSection structure representing
-*     an unparsed character data (CDATA) section, and adds it into an 
-*     existing element.
-
-*  Parameters:
-*     this
-*        A pointer to the element to be modified.
-*     text
-*        Pointer to a null terminated string containing the character data.
-
-*-
-*/
-
-/* Local Variables: */
-   AstXmlCDataSection *new;  /* Pointer to new structure */
-   char *my_text;            /* Cleaned text */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlCDataSection *) astMalloc( sizeof( AstXmlCDataSection ) );
-
-/* Clean the text. */
-   my_text = CleanText( text, status );
-
-/* Initialise it. */
-   InitXmlCDataSection( new, AST__XMLCDATA, my_text, status );
-
-/* Free the memory */
-   my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
-   } else {
-      AddContent( (AstXmlParent *) this, 0, (AstXmlContentItem *) new, status );
-   }
-}
-
-void astXmlAddCharData_( AstXmlParent *this, int where, const char *text, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddCharData
-
-*  Purpose:
-*     Create a new XmlCharData and add it to an XmlElement or XmlDocument.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlAddCharData( AstXmlParent *this, int where, const char *text )
-
-*  Description:
-*     This function creates a new XmlCharData structure representing
-*     parsed character data, and adds it into an existing element or
-*     document.
-
-*  Parameters:
-*     this
-*        Pointer to the element or document to be modified.
-*     where
-*        Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-*        indicates where the item should be added to the document:
-*          1 - In the prologue, after the XML declaration but before the DTD.
-*          2 - In the prologue, after the DTD but before the root element.
-*          3 - In the epilogue, after the root element.
-*     text
-*        Pointer to a null terminated string containing the character data.
-*        If "this" is a document, the text must consist entirely of white 
-*        space.
-
-*-
-*/
-
-/* Local Variables: */
-   AstXmlCharData *new;        /* Pointer to the new structure */
-   char *my_text;              /* Pointer to cleaned text */
-   char *c;                    /* Pointer to next character */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Initialise */
-   new = NULL;
-
-/* Clean the text by replacing "\r\n" by "\n". */
-   my_text = CleanText( text, status );
-
-/* See if the text is all white. */
-   c = my_text - 1;
-   while( *(++c) && isspace( *c ) );
-
-/* If the string contains a non-white character, allocate memory for
-   a XmlBlack structure, and initialise it to hold the supplied text. 
-   Otherwise, allocate memory for a XmlWhite structure, and initialise it 
-   to hold the supplied text. */
-   if( *c ) {
-      if( astXmlCheckType( this, AST__XMLDOC ) ) {
-         astError( AST__XMLCM, "astXmlAddCharData(xml): Illegal attempt "
-                   "to add non-white character data to the prologue or "
-                   "epilogue of an XML document: \"%s\".", status, my_text );
-      } else {
-         new = (AstXmlCharData *) astMalloc( sizeof( AstXmlBlack ) );
-         InitXmlBlack( (AstXmlBlack *) new, AST__XMLBLACK, my_text, status );
-      }
-
-   } else {
-      new = (AstXmlCharData *) astMalloc( sizeof( AstXmlWhite ) );
-      InitXmlWhite( (AstXmlWhite *) new, AST__XMLWHITE, my_text, status );
-   }
-
-/* Free the memory holding the cleaned text */
-   my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
-   } else {
-      AddContent( this, where, (AstXmlContentItem *) new, status );
-   }
-}
-
-void astXmlAddComment_( AstXmlParent *this, int where, const char *text, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddComment
-
-*  Purpose:
-*     Create a new XmlComment and add it to an XmlElement or XmlDocument.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlAddComment( AstXmlParent *this, int where, const char *text )
-
-*  Description:
-*     This function creates a new XmlComment structure representing
-*     an XML comment, and adds it into an existing element or document.
-
-*  Parameters:
-*     this
-*        Pointer to the element or document to be modified.
-*     where
-*        Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-*        indicates where the item should be added to the document:
-*          1 - In the prologue, after the XML declaration but before the DTD.
-*          2 - In the prologue, after the DTD but before the root element.
-*          3 - In the epilogue, after the root element.
-*     text
-*        Pointer to a null terminated string containing the comment text.
-
-*-
-*/
-
-/* Local Variables: */
-   AstXmlComment *new;        /* Pointer to the new structure */
-   char *my_text;            /* Cleaned text */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlComment *) astMalloc( sizeof( AstXmlComment ) );
-
-/* Clean the text. */
-   my_text = CleanText( text, status );
-
-/* Initialise it. */
-   InitXmlComment( new, AST__XMLCOM, my_text, status );
-
-/* Free the memory */
-   my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
-   } else {
-      AddContent( this, where, (AstXmlContentItem *) new, status );
-   }
-
-}
-
-AstXmlElement *astXmlAddElement_( AstXmlElement *this, const char *name, 
-                                  const char *prefix, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddElement
-
-*  Purpose:
-*     Create a new empty XmlElement and adds it to an XmlElement.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlElement *astXmlAddElement( AstXmlElement *this, const char *name, 
-*                                      const char *prefix )
-
-*  Description:
-*     This function creates a new XmlElement structure representing an
-*     empty XML element with the given name and namespace prefix, and
-*     adds it into an existing element.
-
-*  Parameters:
-*     this
-*        A pointer to the element to be modified. This may be NULL.
-*     name
-*        The name for the element.
-*     prefix
-*        The namespace prefix for the element. May be NULL or blank, in
-*        which case any prefix at the start of "name" is used.
-
-*  Returned Value:
-*     A pointer to the new structure is returned. This pointer should be 
-*     freed using astXmlAnnul when no longer needed.
-
-*  Notes:
-*     - A NULL pointer is returned if the inherited status value
-*     indicates an error has occurred on entry, or if this function
-*     should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlElement *new;        /* The returned pointer */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlElement *) astMalloc( sizeof( AstXmlElement ) );
-
-/* Initialise it. */
-   InitXmlElement( new, AST__XMLELEM, name, prefix, status );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
-   } else {
-      AddContent( (AstXmlParent *) this, 0, (AstXmlContentItem *) new, status );
-   }
-
-/* Return the result. */
-   return new;
-
-}
-
-void astXmlAddPI_( AstXmlParent *this, int where, const char *target, const char *text, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddPI
-
-*  Purpose:
-*     Create a new XmlPI and add it to an element or document.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlAddPI( AstXmlParent *this, int where, const char *target, 
-*                       const char *text )
-
-*  Description:
-*     This function creates a new XmlPI structure representing an 
-*     XML "programming instruction", and adds it into an existing element
-*     or document.
-
-*  Parameters:
-*     this
-*        Pointer to the element or document to be modified. This should
-*        be a pointer to an XmlElement or an XmlDocument.
-*     where
-*        Ignored if "this" is an XmlElement pointer. Otherwise, "where"
-*        indicates where the PI should be added to the document:
-*          1 - In the prologue, after the XML declaration but before the DTD.
-*          2 - In the prologue, after the DTD but before the root element.
-*          3 - In the epilogue, after the root element.
-*     target
-*        Pointer to a null terminated string containing the PI target.
-*     text
-*        Pointer to a null terminated string containing the PI text.
-
-*-
-*/
-
-/* Local Variables: */
-   AstXmlPI *new;        /* Pointer to the new structure */
-   char *my_text;            /* Cleaned text */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlPI *) astMalloc( sizeof( AstXmlPI ) );
-
-/* Clean the text. */
-   my_text = CleanText( text, status );
-
-/* Initialise it. */
-   InitXmlPI( new, AST__XMLPI, target, my_text, status );
-
-/* Free the memory */
-   my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, add the content item to the element. */
-   } else {
-      AddContent( this, where, (AstXmlContentItem *) new, status );
-   }
-}
-
-void astXmlAddURI_( AstXmlElement *this, const char *prefix, const char *uri, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAddURI
-
-*  Purpose:
-*     Add a namespace prefix definition to an XmlElement, or change the
-*     default namespace.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlAddURI( AstXmlElement *this, const char *prefix, 
-*                        const char *uri )
-
-*  Description:
-*     This function adds a namespace prefix definition to a specified 
-*     XmlElement, or changes the default namespace. If the suppliedprefix
-*     is already defined in the element, the associated URI is changed to 
-*     the supplied URI.
-
-*  Parameters:
-*     this
-*        The pointer to the element to be modified.
-*     prefix
-*        Pointer to a null terminated string containing the namespace 
-*        prefix. If this is NULL or blank, then the supplied URI is used 
-*        as the default namespace for this element and all child elements 
-*        (except for child elements which define their own default 
-*        namespace).
-*     uri
-*        Pointer to a null terminated string containing the namespace URI.
-*        If this is NULL or blank, and "prefix" is also NULL or blank, then 
-*        this has the same effect of there being no default namespace within
-*        the supplied element.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlNamespace *ns;    /* The new namespace definition */
-   AstXmlNamespace *oldns; /* The existing namespace definition */
-   int i;                  /* Loop index */
-   int nc;                 /* Length of namespace prefix */
-   int nnspref;            /* Number of namespace defintions in the element */
-   int oldi;               /* Index of existing attribute */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Initialise */
-   oldns = NULL;
-
-/* Store the used length of the namespace prefix. */
-   nc = prefix ? astChrLen( prefix ) : 0;   
-
-/* If no namespace prefix has been supplied, just change the default
-   namespace URI. */
-   if( !nc ) {
-      if( uri ) {
-         this->defns = astStore( this->defns, uri, strlen( uri ) + 1 );
-      } else {
-         this->defns = astStore( this->defns, "", 1 );
-      }
-
-/* Otherwise, add the namespace definition to the element. */
-   } else {
-
-/* Create a new XmlNamespace. */
-      ns = NewNamespace( prefix, uri, status );
-
-/* If OK, indicate that the namespace is owned by the element. */
-      if( astOK ) {
-         ( (AstXmlObject *) ns )->parent = (AstXmlParent *) this;
-
-/* Save the number of namespace definitions currently stored in the element. */
-         nnspref = ( this->nsprefs ) ? this->nnspref : 0;
-
-/* Search the existing prefixes to see if a namespace with the given
-   prefix already exists. */
-         oldi = -1;
-         for( i = 0; i < nnspref; i++ ) {
-            oldns = this->nsprefs[ i ];
-            if( !strcmp( oldns->prefix, ns->prefix ) ) {
-               oldi = i;
-               break;
-            }
-         }
-
-/* If there is an existing namespace with the same prefix, replace the old 
-   namespace with the new one created above. */
-         if( oldi > -1 ){
-            ((AstXmlObject *)oldns)->parent = NULL;
-            oldns = astXmlAnnul( oldns );      
-            this->nsprefs[ oldi ] = ns;
-
-/* Otherwise, attempt to extend the array to hold an extra namespace definition. */      
-         } else {
-            this->nsprefs = astGrow( this->nsprefs, nnspref + 1, 
-                                     sizeof( AstXmlNamespace * ) );
-
-/* Check all has gone OK. */
-            if( astOK ) {
-
-/* Store the Namespace pointer in the array of Namespace pointers. */
-               this->nsprefs[ nnspref ] = ns;
-
-/* Increment the number of namespaces in this element */
-               this->nnspref = nnspref + 1;
-            }
-         }
-      }
-   }
-}
-
-void *astXmlAnnul_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAnnul
-
-*  Purpose:
-*     Free the resources used by an XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void *astXmlAnnul( AstXmlObject *this )
-
-*  Description:
-*     This function frees the resources used to hold the XmlObject, together 
-*     with any child objects contained within the supplied XmlObject. A NULL
-*     pointer is always returned. If the supplied object is still in use
-*     (that is, if its parent XmlElement still exists) then the resources
-*     are not freed, and a copy of the supplied pointer is returned.
-
-*  Parameters:
-*     this
-*        pointer to the XmlObject to be freed.
-
-*  Returned Value:
-*     A NULL pointer, or the supplied pointer if the XmlObject is still
-*     in use.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*-
-*/
-
-/* Return if a NULL pointer has been suppplied. */
-   if( !this ) return NULL;
-
-/* Return the supplied pointer if the objects parent still exists. */
-   if( this->parent && 
-       astXmlCheckType( this->parent, AST__XMLPAR ) ) return this;
-
-#ifdef DEBUG
-/* Remove the supplied object from the list of currently active XmlObjects. */
-   RemoveObjectFromList( this );
-#endif
-
-/* Clean the objects contents, and free the memory holding the XmlObject. */
-   CleanXml( this, this->type, status );
-   astFree( this );
-
-/* Return a NULL pointer. */
-   return NULL;
-}
-
-void *astXmlAnnulTree_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlAnnulTree
-
-*  Purpose:
-*     Free the resources used by a tree of XmlObjects.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void *astXmlAnnulTree( AstXmlObject *this )
-
-*  Description:
-*     This function finds the head of the tree containing the supplied
-*     XmlObject (either an XmlElement or an XmlDocument), and frees the 
-*     resources associated with all members of the tree. A NULL pointer 
-*     is always returned. 
-
-*  Parameters:
-*     this
-*        Pointer to a member of the tree of XmlObjects to be freed.
-
-*  Returned Value:
-*     A NULL pointer.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*-
-*/
-
-/* Return if a NULL pointer has been suppplied. */
-   if( !this ) return NULL;
-
-/* Find the root and annull it. This will free all children (i.e. 
-   the entire tree). */
-   return astXmlAnnul( astXmlGetRoot( this ) );
-}
-
-AstXmlObject *astXmlCopy_( AstXmlObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astXmlCopy
-
-*  Purpose:
-*     Produce a deep copy of a supplied XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlObject *astXmlCopy( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to a deep copy of the supplied
-*     XmlObject.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject to copy.
-
-*  Returned Value:
-*     Pointer to the new copy.
-
-*  Notes:
-*     - NULL is returned if NULL pointer is supplied.
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-
-/* Local Variables: */
-   AstXmlAttribute *attr;
-   AstXmlBlack *black;
-   AstXmlCDataSection *cdata;
-   AstXmlComment *comm;
-   AstXmlDTDec *dtd;
-   AstXmlDeclPI *dec;
-   AstXmlDocument *doc, *newdoc;
-   AstXmlElement *elem, *newelem;
-   AstXmlNamespace *ns;
-   AstXmlObject *new;  
-   AstXmlPI *pi;
-   AstXmlPrologue *pro, *newpro;
-   AstXmlWhite *white;
-   int i, type;
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK || !this ) return new;
-
-/* Initialise a new XmlObject of the required class, and copy any
-   sub-objects. */
-   type = this->type;
-   if( type == AST__XMLELEM  ){
-      elem = (AstXmlElement *) this;
-      new = astMalloc( sizeof( AstXmlElement ) );
-      InitXmlElement( (AstXmlElement *) new, AST__XMLELEM, 
-                      elem->name, elem->prefix, status );
-
-      newelem = (AstXmlElement *) new;
-
-      newelem->attrs = astMalloc( sizeof( AstXmlAttribute *) * (size_t)elem->nattr );
-      newelem->nattr = elem->nattr;
-      for( i = 0; i < elem->nattr; i++ ) {
-         newelem->attrs[ i ] = (AstXmlAttribute *) astXmlCopy( elem->attrs[ i ] );
-         ((AstXmlObject *) newelem->attrs[ i ])->parent = (AstXmlParent *) newelem;
-      }
-
-      newelem->items = astMalloc( sizeof( AstXmlContentItem *) * (size_t)elem->nitem );
-      newelem->nitem = elem->nitem;
-      for( i = 0; i < elem->nitem; i++ ) {
-         newelem->items[ i ] = (AstXmlContentItem *) astXmlCopy( elem->items[ i ] );
-         ((AstXmlObject *) newelem->items[ i ])->parent = (AstXmlParent *) newelem;
-      }
-
-      newelem->nsprefs = astMalloc( sizeof( AstXmlNamespace *) * (size_t)elem->nnspref );
-      newelem->nnspref = elem->nnspref;
-      for( i = 0; i < elem->nnspref; i++ ) {
-         newelem->nsprefs[ i ] = (AstXmlNamespace *) astXmlCopy( elem->nsprefs[ i ] );
-         ((AstXmlObject *) newelem->nsprefs[ i ])->parent = (AstXmlParent *) newelem;
-      }
-
-      if( elem->defns ) {
-         newelem->defns = astStore( NULL, elem->defns, 
-                                    strlen( elem->defns ) + 1 );
-      }
-
-      newelem->complete = elem->complete;
-
-
-   } else if( type == AST__XMLATTR ){
-      attr = (AstXmlAttribute *) this;
-      new = astMalloc( sizeof( AstXmlAttribute ) );
-      InitXmlAttribute( (AstXmlAttribute *) new, AST__XMLATTR, 
-                        attr->name, attr->value, attr->prefix, status );
-
-   } else if( type == AST__XMLBLACK ){
-      black = (AstXmlBlack *) this;
-      new = astMalloc( sizeof( AstXmlBlack ) );
-      InitXmlBlack( (AstXmlBlack *) new, AST__XMLBLACK, 
-                    black->text, status );
-
-   } else if( type == AST__XMLWHITE ){
-      white = (AstXmlWhite *) this;
-      new = astMalloc( sizeof( AstXmlWhite ) );
-      InitXmlWhite( (AstXmlWhite *) new, AST__XMLWHITE, 
-                    white->text, status );
-
-   } else if( type == AST__XMLCDATA ){
-      cdata = (AstXmlCDataSection *) this;
-      new = astMalloc( sizeof( AstXmlCDataSection ) );
-      InitXmlCDataSection( (AstXmlCDataSection *) new, AST__XMLCDATA, 
-                           cdata->text, status );
- 
-   } else if( type == AST__XMLCOM ){
-      comm = (AstXmlComment *) this;
-      new = astMalloc( sizeof( AstXmlComment ) );
-      InitXmlComment( (AstXmlComment *) new, AST__XMLCOM, 
-                      comm->text, status );
-
-   } else if( type == AST__XMLPI ){
-      pi = (AstXmlPI *) this;
-      new = astMalloc( sizeof( AstXmlPI ) );
-      InitXmlPI( (AstXmlPI *) new, AST__XMLPI, pi->target, pi->text, status );
-
-   } else if( type == AST__XMLNAME ){
-      ns = (AstXmlNamespace *) this;
-      new = astMalloc( sizeof( AstXmlNamespace ) );
-      InitXmlNamespace( (AstXmlNamespace *) new, AST__XMLNAME, ns->prefix, 
-                         ns->uri, status );
-
-   } else if( type == AST__XMLDOC ){
-      doc = (AstXmlDocument *) this;
-      new = astMalloc( sizeof( AstXmlDocument ) );
-      InitXmlDocument( (AstXmlDocument *) new, AST__XMLDOC, status );
-
-      newdoc = (AstXmlDocument *) new;
-
-      if( doc->prolog ) {
-         newdoc->prolog = (AstXmlPrologue *) astXmlCopy( doc->prolog );
-         ((AstXmlObject *) newdoc->prolog)->parent = (AstXmlParent *) newdoc;
-      }
-
-      if( doc->root ) {
-         newdoc->root = (AstXmlElement *) astXmlCopy( doc->root );
-         ((AstXmlObject *) newdoc->root)->parent = (AstXmlParent *) newdoc;
-      }
-
-      newdoc->epilog = astMalloc( sizeof( AstXmlMiscItem *) * (size_t)doc->nepi );
-      newdoc->nepi = doc->nepi;
-      for( i = 0; i < doc->nepi; i++ ) {
-         newdoc->epilog[ i ] = (AstXmlMiscItem *) astXmlCopy( doc->epilog[ i ] );
-         ((AstXmlObject *) newdoc->epilog[ i ])->parent = (AstXmlParent *) newdoc;
-      }
-
-      newdoc->current = NULL;
-
-   } else if( type == AST__XMLPRO ){
-      pro = (AstXmlPrologue *) this;
-      new = astMalloc( sizeof( AstXmlPrologue ) );
-      InitXmlPrologue( (AstXmlPrologue *) new, AST__XMLPRO, status );
-
-      newpro = (AstXmlPrologue *) new;
-
-      if( pro->xmldecl ) {
-         newpro->xmldecl = (AstXmlDeclPI *) astXmlCopy( pro->xmldecl );
-         ((AstXmlObject *) newpro->xmldecl)->parent = (AstXmlParent *) newpro;
-      }
-
-      if( pro->dtdec ) {
-         newpro->dtdec = (AstXmlDTDec *) astXmlCopy( pro->dtdec );
-         ((AstXmlObject *) newpro->dtdec)->parent = (AstXmlParent *) newpro;
-      }
-
-      newpro->misc1 = astMalloc( sizeof( AstXmlMiscItem *) * (size_t)pro->nmisc1 );
-      newpro->nmisc1 = pro->nmisc1;
-      for( i = 0; i < pro->nmisc1; i++ ) {
-         newpro->misc1[ i ] = (AstXmlMiscItem *) astXmlCopy( pro->misc1[ i ] );
-         ((AstXmlObject *) newpro->misc1[ i ])->parent = (AstXmlParent *) newpro;
-      }
-
-      newpro->misc2 = astMalloc( sizeof( AstXmlMiscItem *) * (size_t)pro->nmisc2 );
-      newpro->nmisc2 = pro->nmisc2;
-      for( i = 0; i < pro->nmisc2; i++ ) {
-         newpro->misc2[ i ] = (AstXmlMiscItem *) astXmlCopy( pro->misc2[ i ] );
-         ((AstXmlObject *) newpro->misc2[ i ])->parent = (AstXmlParent *) newpro;
-      }
-
-   } else if( type == AST__XMLDEC ){
-      dec = (AstXmlDeclPI *) this;
-      new = astMalloc( sizeof( AstXmlDeclPI ) );
-      InitXmlDeclPI( (AstXmlDeclPI *) new, AST__XMLDEC, dec->text, status );
-
-   } else if( type == AST__XMLDTD ){
-      dtd = (AstXmlDTDec *) this;
-      new = astMalloc( sizeof( AstXmlDTDec ) );
-      InitXmlDTDec( (AstXmlDTDec *) new, AST__XMLDTD, dtd->name,
-                    dtd->external, dtd->internal, status );
-
-   } else if( astOK ) {
-      astError( AST__INTER, "CopyXml: Invalid object type (%d) supplied "
-                "(internal AST programming error).", status, type );      
-   }
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
-   return new;
-}
-
-const char *astXmlFormat_( AstXmlObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astXmlFormat
-
-*  Purpose:
-*     Converts an XmlObject into a character string.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlFormat( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated string
-*     containing a textual representation of the supplied XmlObject.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject to format.
-
-*  Returned Value:
-*     Pointer to a null terminated string holding the formated XmlObject.
-*     This string should be freed when no longer needed using astFree.
-
-*  Notes:
-*     - No newlines or indentation strings are added to the returned string.
-*     - NULL is returned if NULL pointer is supplied.
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-   return Format( this, -1, status );
-}
-
-const char *astXmlGetAttributeValue_( AstXmlElement *this, const char *name, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetAttributeValue
-
-*  Purpose:
-*     Return a pointer to a string holding the value of a named attribute.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlGetAttributeValue( AstXmlElement *this, const char *name )
-
-*  Description:
-*     This function returns a pointer to a constant string holding the
-*     value of a named attribute of a supplied element. If the element
-*     does not have the named attribute, a NULL pointer is returned but
-*     no error is reported.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlElement.
-*     name
-*        Pointer to a string holding the name of the attribute. The name
-*        may be preceeded with a "prefix:" string, in which case the
-*        prefix will also be matched. If no prefix is included, the first
-*        attribute with the specified name is returned, regardless of
-*        its prefix.
-
-*  Returned Value:
-*     Pointer to a string holding the value of the attribute within the
-*     supplied element, or NULL if the attribute was not found.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *result;     /* Returned pointer */
-   AstXmlAttribute *attr;  /* Pointer to the attribute */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Find the attribute. */
-   attr = FindAttribute( this, name, status );
-
-/* Get its value. */
-   if( attr ) result = attr->value;
-
-/* Return the result. */
-   return result;
-}
-
-AstXmlContentItem *astXmlGetItem_( AstXmlElement *this, int item, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetItem
-
-*  Purpose:
-*     Return a specified item of the content of an element.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlContentItem *astXmlGetItem( AstXmlElement *this, int item )
-
-*  Description:
-*     This function returns a pointer to an item of the content of the
-*     specified element.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlElement.
-*     item
-*        The index of the required item, in the range zero to "nitem-1",
-*        where "nitem" is the number of items in the element as returned
-*        by astXmlGetNitem. An error is reported if the specified index
-*        is out of bounds.
-
-*  Returned Value:
-*     A pointer to the requested item.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *result;     /* The returned pointer */
-
-/* Initialise */
-   result = NULL;   
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Report an error if the supplie dindex is bad. */
-   if( this->nitem == 0 ) {
-      astError( AST__XMLIT, "astXmlGetItem(xml): The supplied item index (%d) "
-                "is out of bounds. The supplied XmlObject has no content.", status, 
-                item );
-
-   } else if( item < 0 || item >= this->nitem ) {
-      astError( AST__XMLIT, "astXmlGetItem(xml): The supplied item index (%d) "
-                "is out of bounds. Should be in the range 0 to %d.", status, 
-                item, this->nitem-1 );
-   } else {
-      result = this->items[ item ];
-   }
-
-/* Return the result. */
-   return result; 
-}
-
-const char *astXmlGetName_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetName
-
-*  Purpose:
-*     Return a pointer to a string holding the name of an XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlGetName( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to a constant string holding the
-*     name associated with an XmlObject. For elements and attributes, the
-*     "name" value is returned. For PI elements, the "target" value is 
-*     returned. For namespace definitions, the "prefix" value is returned.
-*     An error is reported if the supplied XmlObject is of any other class.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlObject.
-
-*  Returned Value:
-*     Pointer to the name string within the XML object.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *result;     /* Returned pointer */
-   int type;               /* Object type */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Return the relevant component of the structure, depending on its type. */
-   type = this->type;
-   if( type == AST__XMLELEM  ){
-      result = ( (AstXmlElement *) this )->name;
-
-   } else if( type == AST__XMLATTR ){
-      result = ( (AstXmlAttribute *) this )->name;
-
-   } else if( type == AST__XMLPI ){
-      result = ( (AstXmlPI *) this )->target;
-
-   } else if( type == AST__XMLNAME ){
-      result = ( (AstXmlNamespace *) this )->prefix;
-
-   } else {
-      astError( AST__INTER, "astXmlGetName: Inappropriate object type (%d) supplied "
-                "(internal AST programming error).", status, type );      
-   }
-
-/* Return the result. */
-   return result;
-}
-
-int astXmlGetNattr_( AstXmlElement *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetNattr
-
-*  Purpose:
-*     Return the number of attributes held by an element.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int astXmlGetNattr( AstXmlElement *this )
-
-*  Description:
-*     This function returns the number of  attributes held by an element.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlElement.
-
-*  Returned Value:
-*     The number of  attributes held by the supplied element.
-
-*  Notes:
-*     - Zero is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return 0;
-
-/* Return the result. */
-   return ( this->attrs ) ? this->nattr : 0;
-}
-
-int astXmlGetNitem_( AstXmlElement *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetNitem
-
-*  Purpose:
-*     Return the number of items within the content of an element.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int astXmlGetNitem( AstXmlElement *this )
-
-*  Description:
-*     This function returns the number of items within the content of an
-*     XmlElement.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlElement.
-
-*  Returned Value:
-*     The number of items in the content of the supplied element.
-
-*  Notes:
-*     - Zero is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return 0;
-
-/* Return the result. */
-   return this->nitem;
-}
-
-AstXmlParent *astXmlGetParent_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetParent
-
-*  Purpose:
-*     Return a pointer to the object which contains the supplied XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlParent *astXmlGetParent( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to the XmlParent object (either an
-*     XmlElement or an XmlDocument) which contains the specified XmlObject. 
-*     The object can be a content item (an element, a comment, a CDATA 
-*     section, a PI, or character data) in which case the enclosing 
-*     XmlElement is returned, or an attribute or namespace definition in 
-*     which case the XmlElement to which object refers is returned.
-*     If "this" is the root element of a document, a pointer to the
-*     XmlDocument is returned.
-
-
-*  Parameters:
-*     this
-*        The pointer to check.
-
-*  Returned Value:
-*     Pointer to the parent, or NULL if the object does not have a parent.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return NULL;
-
-/* Return the result. */
-   return this->parent;
-}
-
-AstXmlObject *astXmlGetRoot_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetRoot
-
-*  Purpose:
-*     Return a pointer to the root XmlObject which contains the supplied 
-*     XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlObject *astXmlGetRoot( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to the XmlObject which is the root of 
-*     the tree containing the specified XmlObject. A pointer to the
-*     supplied XmlObject is returned if it has no parent.
-
-*  Parameters:
-*     this
-*        The pointer to check.
-
-*  Returned Value:
-*     Pointer to the root XmlObject, or a copy of the supplied pointer if 
-*     the supplied XmlObject is the root.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables:  */
-   AstXmlObject *result;
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* If "this" is a document, check it has no parent. If not, return a
-   pointer ot it. */
-   if( astXmlCheckType( this, AST__XMLDOC ) ) {
-      if( this->parent ) {
-         astError( AST__INTER, "astXmlGetRoot(xml): An XmlDocument has a "
-                   "non-null parent of type %ld (internal AST programming "
-                   "error).", status, this->type );      
-      } else {
-         result = (AstXmlObject *) this;
-      }
-
-/* Otherwise... */
-   } else if( this->parent ) {
-      result = astXmlGetRoot( this->parent );
-
-   } else {
-      result = this;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-const char *astXmlGetTag_( AstXmlObject *this, int opening, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetTag
-
-*  Purpose:
-*     Returns a string holding an XML tag describing the given XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlGetTag( AstXmlObject *this, int opening )
-
-*  Description:
-*     This function returns a pointer to a static string containing an 
-*     XML tag describing the given XmlObject.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject.
-*     opening
-*        Indicates which tag is to be returned; the start tag or the end
-*        tag. If non-zero the start tag is returned. Otherwise, the 
-*        end tag is returned. If the supplied XmlObject has no end
-*        tag (i.e. if it is an empty element, or if it is not an element), 
-*        then NULL is returned but no error is reported.
-
-*  Returned Value:
-*     Pointer to a null terminated string holding the tag. If the tag
-*     exceeds 200 characters, only the first 197 characters are returned
-*     and "..." is appended to the end.
-
-*  Notes:
-*     - Subsequent invocations of this function will over-write the
-*     buffer which used to hold the returned string.
-*     - Empty elements are represented as an start tag of the form <.../>, 
-*     with no corresponding end tag.
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-   char *result;             /* The returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Get a dynamic string holding the formatted tag. */
-   result = FormatTag( this, opening, status );
-
-/* If OK, copy the result into the static buffer. */
-   gettag_buff[ 0 ] = 0;
-   if( result ) {
-      if( astOK ) {
-
-         if( strlen( result ) > AST__XML_GETTAG_BUFF_LEN ) {
-            strncpy( gettag_buff, result, AST__XML_GETTAG_BUFF_LEN -3 );
-            strcpy( gettag_buff + AST__XML_GETTAG_BUFF_LEN - 3, "..." );
-         } else {
-            strncpy( gettag_buff, result, AST__XML_GETTAG_BUFF_LEN );
-         }
-
-         gettag_buff[ AST__XML_GETTAG_BUFF_LEN ] = 0;
-         astFree( result );
-         result = gettag_buff;          
-      } else {
-         result = astFree( result );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-const char *astXmlGetType_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetType
-
-*  Purpose:
-*     Returns a string holding the type of the given XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlGetType( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to a static string containing the
-*     type of the given XmlObject.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject.
-
-*  Returned Value:
-*     Pointer to a null terminated string holding the type string.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *result;             /* The returned pointer */
-   int type;                       /* Element type */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-   type = this->type;
-   if( type == AST__XMLELEM ) {
-      result = "element";
-
-   } else if( type == AST__XMLATTR ) {
-      result = "attribute";
-
-   } else if( type == AST__XMLCDATA ) {
-      result = "CDATA section";
-
-   } else if( type == AST__XMLCOM ) {
-      result = "comment";
-
-   } else if( type == AST__XMLPI ) {
-      result = "processing instruction";
-
-   } else if( type == AST__XMLNAME ) {
-      result = "namespace";
-
-   } else if( type == AST__XMLDOC ) {
-      result = "document";
-
-   } else if( type == AST__XMLPRO ) {
-      result = "prologue";
-
-   } else if( type == AST__XMLDEC ) {
-      result = "XML delaration PI";
-
-   } else if( type == AST__XMLDTD ) {
-      result = "DTD";
-
-   } else if( type == AST__XMLWHITE ) {
-      result = "white-space character data ";
-
-   } else if( type == AST__XMLBLACK ) {
-      result = "non-blank character data";
-
-   } else {
-      result = "unknown XML object";
-   }
-
-/* Return the result. */
-   return result;
-}
-
-const char *astXmlGetURI_( AstXmlObject *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetURI
-
-*  Purpose:
-*     Return a pointer to a string holding the namespace URI of an XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlGetURI( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to a constant string holding the
-*     namespace URI associated with an XmlObject. Only attributes,
-*     elements and namespaces have associated URIs, so a NULL pointer is 
-*     returned for any other class of XmlObject. A NULL pointer is also 
-*     returned if XmlObject does not belong to any namespace, or if it 
-*     belongs to a unknown namespace (i.e. one for which no URI is 
-*     available). Any namespace prefix attached to the supplied object is 
-*     resolved first using any "xmlns" attributes contained in the same 
-*     element, then using any "xmlns" attributes contained in the parent 
-*     element, etc.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlObject.
-
-*  Returned Value:
-*     Pointer to a string holding the namespace URI, or NULL.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   const char *prefix;     /* Namespace prefix */
-   const char *result;     /* Returned pointer */
-   int type;               /* Object type */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Do each type of object separately. */
-   type = this->type;
-   if( type == AST__XMLATTR ){
-      prefix = ( (AstXmlAttribute *) this )->prefix;
-
-/* Attributes have no default name space. Therefore if there is no prefix,
-   return NULL. If there is a prefix, resolve it within the context of
-   the attributes parent element. */
-      if( prefix ) {
-         result = ResolvePrefix( prefix, (AstXmlElement *) this->parent, status );
-      }
-
-   } else if( type == AST__XMLELEM ){
-      prefix = ( (AstXmlElement *) this )->prefix;
-
-/* If there is a prefix, resolve it within the context of this element. */
-      if( prefix ) {
-         result = ResolvePrefix( prefix, (AstXmlElement *) this, status );
-
-/* Elements do have a default name space. Therefore if there is no prefix,
-   return the default name space within the context of this element. */
-      } else {
-         result = DefaultURI( (AstXmlElement *) this, status );
-      }
-
-/* If the supplied object is a namespace, just return the associated URI. */
-   } else if( type == AST__XMLNAME ){
-      result = ( (AstXmlNamespace *) this )->uri;
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-const char *astXmlGetValue_( AstXmlObject *this, int report, int *status ){
-/*
-*+
-*  Name:
-*     astXmlGetValue
-
-*  Purpose:
-*     Return a pointer to a string holding the value of an XmlObject.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlGetValue( AstXmlObject *this, int report )
-
-*  Description:
-*     This function returns a pointer to a constant string holding the
-*     value associated with an XmlObject. For attributes, the attribute value 
-*     is returned. For PI elements, the "text" value is returned. For 
-*     namespace definitions, the "URI" value is returned. For character
-*     data, the character data is returned. For CDATA sections the "text"
-*     value is returned. For comments, the "text" value is returned.
-*     If the XmlObject is an element, then a non-NULL value is returned
-*     only if the element contains a single content item holding character 
-*     data. In this case a pointer to the character data is returned.
-*     A null value is returned in all other cases (but no error is
-*     reported unless "report" is non-zero).
-
-*  Parameters:
-*     this
-*        The pointer to the XmlObject.
-*     report
-*        Report an error if the supplied XmlObject does not have a value?
-
-*  Returned Value:
-*     Pointer to a string holding the value of the XML object.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item;/* Element content */
-   const char *result;     /* Returned pointer */
-   int type;               /* Object type */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Return the relevant component of the structure, depending on its type. */
-   type = this->type;
-   if( type == AST__XMLATTR ){
-      result = ( (AstXmlAttribute *) this )->value;
-
-   } else if( type == AST__XMLBLACK ){
-      result = ( (AstXmlBlack *) this )->text;
-
-   } else if( type == AST__XMLWHITE ){
-      result = ( (AstXmlWhite *) this )->text;
-
-   } else if( type == AST__XMLCDATA ){
-      result = ( (AstXmlCDataSection *) this )->text;
-
-   } else if( type == AST__XMLCOM ){
-      result = ( (AstXmlComment *) this )->text;
-
-   } else if( type == AST__XMLPI ){
-      result = ( (AstXmlPI *) this )->text;
-
-   } else if( type == AST__XMLNAME ){
-      result = ( (AstXmlNamespace *) this )->uri;
-
-   } else if( type == AST__XMLELEM ){
-      if( astXmlGetNitem( (AstXmlElement *) this ) == 1 ) {
-         item = astXmlGetItem( (AstXmlElement *) this, 0 );
-         if( astXmlCheckType( item, AST__XMLCHAR ) ) {
-            result = astXmlGetValue( item, report );
-         } 
-      }
-
-      if( !result && astOK && report ) {
-         astError( AST__BADIN, "astRead(xml): Cannot get the value of "
-                   "element \"<%s>\": its contents are not pure character "
-                   "data.", status, astXmlGetName( this ) );
-      }
-
-   } else if( report ) {
-      astError( AST__INTER, "astXmlGetValue(xml): Cannot get the value of "
-                "an XmlObject of type %d (internal AST programming "
-                "error).", status, type );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-void astXmlInsertElement_( AstXmlElement *this, AstXmlElement *elem, int *status ){
-/*
-*+
-*  Name:
-*     astXmlInsertElement
-
-*  Purpose:
-*     Inserts an existing XmlElement into another XmlElement.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlInsertElement( AstXmlElement *this, AstXmlElement *elem )
-
-*  Description:
-*     This function inserts a given XmlElement "elem" into another given 
-*     XmlElement "this". An error is reported if "elem" already has a
-*     parent.
-
-*  Parameters:
-*     this
-*        A pointer to the element to be modified. 
-*     elem
-*        The element to be inserted into "this".
-
-*-
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Report AN error if "elem" has already been inserted into
-   another element. */
-   if( ((AstXmlObject *) elem)->parent ) {
-      astError( AST__INTER, "astXmlInsertElement(xml): Cannot insert \"%s\" "
-                "into \"%s\" because it already has a parent (\"%s\") "
-                "(internal AST programming error).", status,
-                astXmlGetTag( elem, 1 ), astXmlGetTag( this, 1 ), 
-                astXmlGetTag( ((AstXmlObject *) elem)->parent, 1 ) );
-
-/* Otherwise, add the content item to the element. */
-   } else {
-      AddContent( (AstXmlParent *) this, 0, (AstXmlContentItem *) elem, status );
-   }
-}
-
-void astXmlPurge_( AstXmlParent *this, int *status ) {
-/*
-*+
-*  Name:
-*     astXmlPurge
-
-*  Purpose:
-*     Remove blank content from a parent object.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlPurge( AstXmlParent *this )
-
-*  Description:
-*     This function removes all character data containing only whitespace 
-*     from the supplied document or element. It is recursive, in that it also 
-*     removes white space from all children elements.
-
-*  Parameters:
-*     this
-*        Pointer to the document or element.
-
-*-
-*/
-
-/* Local Variables: */
-   int i;                    /* Content item index */
-   AstXmlContentItem *item;  /* Next content item */
-   AstXmlMiscItem *misc;     /* Nest miscalleneous item */
-   AstXmlDocument *doc;      /* This document */
-   AstXmlPrologue *pro;      /* This document prologue */
-   AstXmlElement *elem;      /* This element */
-
-/* Check the global error status. */
-   if( !astOK || !this ) return;
-
-/* If this is a a document.. */
-   if( astXmlCheckType( this, AST__XMLDOC ) ) {
-      doc = (AstXmlDocument *) this;
-      astXmlPurge( doc->prolog );
-      astXmlPurge( doc->root );
-      
-      i = -1;
-      while( ++i < doc->nepi ) {
-         misc = doc->epilog[ i ];
-         if( astXmlCheckType( misc, AST__XMLWHITE ) ) {
-            misc = astXmlDelete( misc );
-            i--;
-         }
-      }
-
-/* If this is a prologue.. */
-   } else if( astXmlCheckType( this, AST__XMLPRO ) ) {
-      pro = (AstXmlPrologue *) this;
-
-      i = -1;
-      while( ++i < pro->nmisc1 ) {
-         misc = pro->misc1[ i ];
-         if( astXmlCheckType( misc, AST__XMLWHITE ) ) {
-            misc = astXmlDelete( misc );
-            i--;
-         }
-      }
-
-      i = -1;
-      while( ++i < pro->nmisc2 ) {
-         misc = pro->misc2[ i ];
-         if( astXmlCheckType( misc, AST__XMLWHITE ) ) {
-            misc = astXmlDelete( misc );
-            i--;
-         }
-      }
-
-
-/* If this is an element */
-   } else if( astXmlCheckType( this, AST__XMLELEM ) ) {
-      elem = (AstXmlElement *) this;
-
-      i = -1;
-      while( ++i < elem->nitem ) {
-         item = elem->items[ i ];
-   
-         if( astXmlCheckType( item, AST__XMLWHITE ) ) {
-            item = astXmlDelete( item );
-            i--;
-   
-         } else if( astXmlCheckType( item, AST__XMLELEM ) ) {
-            astXmlPurge( (AstXmlParent *) item );
-         }
-      }
-   }
-}
-
-void astXmlRemoveAttr_( AstXmlElement *this, const char *name, 
-                        const char *prefix, int *status ){
-/*
-*+
-*  Name:
-*     astXmlRemoveAttr
-
-*  Purpose:
-*     Removes an attribute from its parent element.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlRemoveAttr( AstXmlElement *this, const char *name, 
-*                            const char *prefix )
-
-*  Description:
-*     This function removes a named attribute from its parent element.
-
-*  Parameters:
-*     this
-*        The pointer to the element containing the attribute to be removed.
-*     name
-*        Pointer to a null terminated string containing the attribute name.
-*     prefix
-*        The namespace prefix for the attribute. May be NULL or blank, in
-*        which case any prefix at the start of "name" is used.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlAttribute *attr;           /* Pointer to temporary attribute structure */
-   AstXmlAttribute *oldattr;        /* Pointer to existing attribute */
-   int i;                           /* Attribute index */
-   int nattr;                       /* Number of attributes in parent */
-   int oldi;                        /* Indexof existing attribute */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Initialise */
-   oldattr = NULL;
-
-/* Create a new XmlAttribute with blank value. */
-   attr = NewAttribute( name, "", prefix, status );
-   if( astOK ) {
-
-/* Get the number of attributes currently stored in the element. */
-      nattr = ( this->attrs ) ? this->nattr : 0;
-
-/* Search the existing attributes to see if an attribute with the given
-   name and prefix already exists. */
-      oldi = -1;
-      for( i = 0; i < nattr; i++ ) {
-         oldattr = this->attrs[ i ];
-         if( !strcmp( oldattr->name, attr->name ) ) {
-            if( !oldattr->prefix && !attr->prefix ) {
-               oldi = i;
-               break;
-            } else if( oldattr->prefix && attr->prefix && 
-                       !strcmp( oldattr->prefix, attr->prefix ) ){
-               oldi = i;
-               break;
-            }
-         }
-      }
-
-/* If there is an existing attribute with the same name and prefix,
-   delete it. */
-      if( oldi > -1 ) astXmlDelete( oldattr );
-
-/* Delete the temporary attribute structure. */
-      attr = astXmlDelete( attr );
-
-   }
-}
-
-void astXmlRemoveItem_( AstXmlContentItem *this, int *status ){
-/*
-*+
-*  Name:
-*     astXmlRemoveItem
-
-*  Purpose:
-*     Removes an item of content from its parent element or document.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlRemoveItem( AstXmlContentItem *this )
-
-*  Description:
-*     This function removes an item of content from its parent element,
-*     or removes the root element from a document. The removed item is not 
-*     annulled and may be subsequently added into another element.
-
-*  Parameters:
-*     this
-*        The pointer to the item to be removed form its parent.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlDocument *doc;             /* Pointer to parent document */
-   AstXmlElement *elem;             /* Pointer to parent element */
-   AstXmlParent *parent;            /* Pointer to parent */
-   int found;                       /* Was the item found within its parent? */
-   int i;                           /* Item index */
-   int j;                           /* Item index */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Get a pointer to the items parent element, and check it is not null. */
-   parent = ( (AstXmlObject *) this )->parent;
-   if( parent && astXmlCheckType( parent, AST__XMLELEM ) ) {
-      elem = (AstXmlElement *) parent;
-
-/* Search through all the items within the parent element looking for the
-   supplied item. */
-      found = 0;
-      for( i = 0; i < elem->nitem; i++ ) {
-         if( elem->items[ i ] == this ) {
-
-/* When found, decrement the number of items in the element, and shuffle 
-   all the remaining item pointers down one slot to over-write it, then
-   nullify the parent pointer in the supplied object and leave the loop. */
-            (elem->nitem)--;
-            for( j = i; j < elem->nitem; j++ ) {
-               elem->items[ j ] = elem->items[ j + 1 ];
-            }
-            ( (AstXmlObject *) this )->parent = NULL;
-            found = 1;
-            break;
-         }
-      }
-
-/* Report an error if the item was not found. */
-      if( !found ) {
-         astError( AST__INTER, "astXmlRemoveItem: The parent of the supplied "
-                   "item does not contain the item (internal AST programming "
-                   "error)." , status);
-      }
-
-/* If the parent is an XmlDocument, check the item being removed is the
-   root element. */
-   } else if( parent && astXmlCheckType( parent, AST__XMLDOC ) ) {
-      doc = (AstXmlDocument *) parent;
-      if( (AstXmlElement *) this == doc->root ) {
-         ( (AstXmlObject *) this )->parent = NULL;
-         doc->root = NULL;
-      }
-   }
-}
-
-void astXmlRemoveURI_( AstXmlElement *this, const char *prefix, int *status ){
-/*
-*+
-*  Name:
-*     astXmlRemoveURI
-
-*  Purpose:
-*     Removes an namespace prefix from its parent element.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlRemoveURI( AstXmlElement *this, const char *prefix )
-
-*  Description:
-*     This function removes a named namespace prefix from its parent element.
-
-*  Parameters:
-*     this
-*        The pointer to the element containing the namespace prefix to be 
-*        removed.
-*     prefix
-*        The namespace prefix to remove.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlNamespace *ns;             /* Temporary namespace structure */
-   AstXmlNamespace *oldns;          /* Pointer to existing namespace */
-   int oldi;                        /* Index of namespace within its parent */
-   int i;                           /* Namespace index */
-   int nns;                         /* Number of existing namespaces */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Initialise */
-    oldns = NULL;
-
-/* Create a new XmlNamespace with blank URI. */
-   ns = NewNamespace( prefix, "", status );
-   if( astOK ) {
-
-/* Get the number of namespace prefixes currently stored in the element. */
-      nns = ( this->nsprefs ) ? this->nnspref : 0;
-
-/* Search the list of existing namespace prefixes to see if the given prefix
-   is included. */
-      oldi = -1;
-      for( i = 0; i < nns; i++ ) {
-         oldns = this->nsprefs[ i ];
-         if( !strcmp( oldns->prefix, ns->prefix ) ){
-             oldi = i;
-             break;
-         }
-      }
-
-/* If the supplied namespace prefix was found in the list, delete it. */
-      if( oldi > -1 ) astXmlDelete( oldns );
-
-/* Delete the temporary namespace structure. */
-      ns = astXmlDelete( ns );
-
-   }
-}
-
-void astXmlSetDTDec_( AstXmlDocument *this, const char *text1,
-                      const char *text2, const char *text3, int *status ){
-/*
-*+
-*  Name:
-*     astXmlSetDTDec
-
-*  Purpose:
-*     Set the Document Type declaration for a document.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlSetDTDEC( AstXmlDocument *this, const char *text1,
-*                          const char *text2, const char *text3 )
-
-*  Description:
-*     This function stores an Document Type declaration of the form
-*
-*        <!DOCTYPE text1 text2 [text3]>
-*
-*     in the supplied document. Any previous DTD is removed.
-
-*  Parameters:
-*     this
-*        The pointer to the document.
-*     text1
-*        The document type name.
-*     text2
-*        The text defining the external elements of the document type
-*        (may be NULL).
-*     text3
-*        The text defining the internal elements of the document type
-*        (may be NULL). Do not include delimiting "[" and "]" characters.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlDTDec *new;             /* Pointer to new DT declaration */
-   AstXmlPrologue *pro;          /* Pointer to prologue */
-   char *my_text2;               /* Cleaned text2 */
-   char *my_text3;               /* Cleaned text3 */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlDTDec *) astMalloc( sizeof( AstXmlDTDec ) );
-
-/* Clean the text. */
-   my_text2 = CleanText( text2, status );
-   my_text3 = CleanText( text3, status );
-
-/* Initialise it. */
-   InitXmlDTDec( new, AST__XMLDTD, text1, my_text2, my_text3, status );
-
-/* Free the memory */
-   my_text2 = astFree( my_text2 );
-   my_text3 = astFree( my_text3 );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, store it in the document, deleting any existing declaration
-   first. */
-   } else {
-
-/* Create a prologue if necessary. */
-      if( !this->prolog ) this->prolog = NewPrologue( this, status );
-
-      pro = this->prolog;
-      if( pro->dtdec ) astXmlDelete( pro->dtdec );
-      pro->dtdec = new;
-   }
-}
-
-void astXmlSetXmlDec_( AstXmlDocument *this, const char *text, int *status ){
-/*
-*+
-*  Name:
-*     astXmlSetXmlDec
-
-*  Purpose:
-*     Set the XML declaration for a document.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void astXmlSetXmlDec( AstXmlDocument *this, const char *text )
-
-*  Description:
-*     This function stores an XML declaration of the form
-*
-*        <?xml [text]?>
-*
-*     in the supplied document. Any previous XML declaration is removed.
-
-*  Parameters:
-*     this
-*        The pointer to the document.
-*     text
-*        The text to include in the XML declaration tag.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlDeclPI *new;             /* Pointer to new XML delcaration */
-   AstXmlPrologue *pro;           /* Pointer to prologue */
-   char *my_text;                 /* Cleaned text */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlDeclPI *) astMalloc( sizeof( AstXmlDeclPI ) );
-
-/* Clean the text. */
-   my_text = CleanText( text, status );
-
-/* Initialise it. */
-   InitXmlDeclPI( new, AST__XMLDEC, my_text, status );
-
-/* Free the memory */
-   my_text = astFree( my_text );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) {
-      new = astXmlDelete( new );
-
-/* Otherwise, store it in the document, deleting any existing declaration
-   first. */
-   } else {
-
-/* Create a prologue if necessary. */
-      if( !this->prolog ) this->prolog = NewPrologue( this, status );
-
-      pro = this->prolog;
-      if( pro->xmldecl ) astXmlDelete( pro->xmldecl );
-      pro->xmldecl = new;
-   }
-}
-
-const char *astXmlShow_( AstXmlObject *this, int *status ) {
-/*
-*+
-*  Name:
-*     astXmlShow
-
-*  Purpose:
-*     Converts an XmlObject into a character string with indentation.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *astXmlShow( AstXmlObject *this )
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated string
-*     containing a textual representation of the supplied XmlObject.
-*     Newline characters are added to the string if needed to ensure that 
-*     each item of content within an element starts on a new line, and all
-*     tags are preceeded by an indentation string consisting of a number
-*     of spaces.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject to format.
-
-*  Returned Value:
-*     Pointer to a null terminated string holding the formated XmlObject.
-*     This string should be freed when no longer needed using astFree.
-
-*  Notes:
-*     - NULL is returned if a NULL pointer is supplied.
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-   return Format( this, 0, status );
-}
-
-static void CheckName( const char *name, const char *noun, const char *method, 
-                       int nullok, int *status ){
-/*
-*  Name:
-*     CheckName
-
-*  Purpose:
-*     Checks the supplied string is a valid XML name.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void CheckName( const char *name, const char *noun, const char *method, 
-*                     int nullok, int *status )
-
-*  Description:
-*     This function checks that the supplied string is a valid XML name,
-*     and reports an error otherwise.
-
-*  Parameters:
-*     name
-*        The name string to check
-*     noun
-*        A word to describe the object which the name applies to - for use in 
-*        error messages only.
-*     method
-*        The name of the calling method - for use in error messages only.
-*     nullok
-*        If non-zero, then a null or empty name is assumed to be
-*        acceptable.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   const char *c;       /* Pointer to next character to check */
-   
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the string is not null. */
-   if( !name ) {
-      if( !nullok ) astError( AST__XMLNM, "%s: A NULL pointer was supplied "
-                              "instead of an XML %s name.", status, method, noun );
-   } else {
-
-      c = name;
-      if( *c == 0 ) {
-         if( !nullok ) astError( AST__XMLNM, "%s: An empty string was supplied "
-                                 "instead of an XML %s name.", status, method, noun );
-      } else {
-
-         if( !isalpha( *c ) && *c != '_' ) {
-            astError( AST__XMLNM, "%s: The illegal XML %s name \"%s\" was "
-                      "encountered.", status, method, noun, name );
-   
-         } else {
-            while( *(++c) ) {
-               if( !isalnum( *c ) && *c != '_' && *c != '-' && *c != '.' ){
-                  astError( AST__XMLNM, "%s: The illegal XML %s name \"%s\" was "
-                            "encountered.", status, method, noun, name );
-                  break;
-               }
-            }
-         } 
-      }
-   }
-}
-
-static void CheckPrefName( char *name, const char *noun, const char *method, int *status ){
-/*
-*  Name:
-*     CheckPrefName
-
-*  Purpose:
-*     Checks the supplied string is a valid XML (prefix:)name.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void CheckPrefName( char *name, const char *noun, const char *method, int *status )
-
-*  Description:
-*     This function checks that the supplied string is a valid XML
-*     (prefix:)name combination and reports an error otherwise.
-
-*  Parameters:
-*     name
-*        The string to check
-*     noun
-*        A word to describe the object which the name applies to - for use in 
-*        error messages only.
-*     method
-*        The name of the calling method - for use in error messages only.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   char *colon;             /* Pointer to first colon */
-   char *temp;              /* Pointer to temporary string */
-   int nc;                  /* Length of temporary string */
-   
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Search for a ":" character. */
-   colon = strchr( name, ':' );
-
-/* If found, temporarily convert the colon into a null so that it
-   terminates the prefix string. */
-   if( colon ) {
-      *colon = 0;
-
-/* Check the string before the colon is a valid name. */
-      temp = NULL;
-      temp = astAppendString( temp, &nc, noun );
-      temp = astAppendString( temp, &nc, " prefix" );
-      CheckName( name, temp, method, 0, status );
-      temp = astFree( temp );
-
-/* Restore the colon. */
-      *colon = ':';
-
-/* Check the string following the colon is a valid name. */
-      CheckName( colon + 1, noun, method, 0, status );
-
-/* If not found, the whole supplied string must be a name. */
-   } else {
-      CheckName( name, noun, method, 0, status );
-   }
-}
-
-static int CheckType( long int given, long int want, int *status ){
-/*
-*  Name:
-*     CheckType
-
-*  Purpose:
-*     Check that the supplied type identifies an object of a given class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int CheckType( long int given, long int want, int *status )
-
-*  Description:
-*     This function checks that the supplied type identifier identifies 
-*     a specified class of XML object, or a derived class. A flag is
-*     returned indicating if the check succeeds. No error is reported if
-*     the check fails.
-
-*  Parameters:
-*     given
-*        The type value to be checked.
-*     want
-*        The type of the required class.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if the check is passed, zero if not of if an error has
-*     already occurred.
-
-*  Notes:
-*     - This function attempts to execute even if the error status is set.
-*/
-
-/* Local Variables: */
-   int result;              /* Returned value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the wanted type is recognised. Report an error if not. */
-   if( want != AST__XMLOBJECT &&
-       want != AST__XMLELEM  &&
-       want != AST__XMLATTR  &&
-       want != AST__XMLCHAR  &&
-       want != AST__XMLCDATA &&
-       want != AST__XMLCOM   &&
-       want != AST__XMLPI    &&
-       want != AST__XMLNAME  &&
-       want != AST__XMLCONT  &&
-       want != AST__XMLPRO   &&
-       want != AST__XMLDEC   &&
-       want != AST__XMLDTD   &&
-       want != AST__XMLMISC  &&
-       want != AST__XMLBLACK &&
-       want != AST__XMLWHITE &&
-       want != AST__XMLPAR   &&
-       want != AST__XMLDOC ) {
-      if( astOK ) {
-         astError( AST__INTER, "CheckType(Xml): Unsupported XML object "
-                   "type (%ld) supplied for parameter \"want\" (internal "
-                   "AST programming error). ", status, want );
-      }
-
-/* You should never be given a generic "interface" type since the
-   "wanted" value comes from the "type" component of an XmlObject (an explicit
-   class type should always be given). */
-   } else if( given == AST__XMLPAR ||
-              given == AST__XMLMISC ||
-              given == AST__XMLCONT ||
-              given == AST__XMLCHAR ) {
-      if( astOK ) {
-         astError( AST__INTER, "CheckType(Xml): Generic type (%ld) supplied for "
-                   "parameter \"given\" (internal AST programming error).", status,
-                   given );
-      }
-
-/* If the above is OK, return a non-zero value if the type to be tested 
-   equals the wanted type. */
-   } else if( want == given ) {
-      result = 1;
-
-/* If any class of XmlObject is acceptable, check that he given class
-   type is a valid XML class type. */
-   } else if( want == AST__XMLOBJECT ) {
-      result = ( given == AST__XMLELEM  ||
-                 given == AST__XMLATTR  ||
-                 given == AST__XMLCDATA ||
-                 given == AST__XMLCOM   ||
-                 given == AST__XMLPI    ||
-                 given == AST__XMLNAME  ||
-                 given == AST__XMLPRO   ||
-                 given == AST__XMLDEC   ||
-                 given == AST__XMLDTD   ||
-                 given == AST__XMLWHITE ||
-                 given == AST__XMLBLACK ||
-                 given == AST__XMLDOC );
-
-/* Otherwise, for "interface" types, check if the given class "implements
-   the interface". */
-   } else if( want == AST__XMLCONT ) { 
-      result = ( given == AST__XMLELEM  ||
-                 given == AST__XMLBLACK ||
-                 given == AST__XMLWHITE ||
-                 given == AST__XMLCDATA ||
-                 given == AST__XMLCOM   ||
-                 given == AST__XMLPI    );
-
-   } else if( want == AST__XMLMISC ) { 
-      result = ( given == AST__XMLWHITE ||
-                 given == AST__XMLCOM   ||
-                 given == AST__XMLPI    );
-
-   } else if( want == AST__XMLCHAR ) { 
-      result = ( given == AST__XMLWHITE ||
-                 given == AST__XMLBLACK );
-
-   } else if( want == AST__XMLPAR ) { 
-      result = ( given == AST__XMLDOC ||
-                 given == AST__XMLPRO ||
-                 given == AST__XMLELEM );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-int astXmlCheckType_( void *this, long int want, int *status ){
-/*
-*+
-*  Name:
-*     astXmlCheckType
-
-*  Purpose:
-*     Check that the supplied object is of a given class.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int astXmlCheckType( void *this, long int want )
-
-*  Description:
-*     This function checks that the supplied XmlObject is of a specified 
-*     class of XML object, or a derived class. A flag is returned indicating 
-*     if the check succeeds. No error is reported if the check fails.
-
-*  Parameters:
-*     this
-*        The object to check.
-*     want
-*        The type of the required class.
-
-*  Returned Value:
-*     Non-zero if the check is passed, zero if not of if an error has
-*     already occurred.
-
-*  Notes:
-*     - This function attempts to execute even if the error status is set.
-*-
-*/
-
-   if( this ) {
-      return CheckType( ((AstXmlObject *) this)->type, want, status );
-   } else {
-      return 0;
-   }
-}
-
-static char *CleanText( const char *text, int *status ){
-/*
-*  Name:
-*     CleanText
-
-*  Purpose:
-*     Normalise end-of-lines in the supplied text.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     char *CleanText( const char *text, int *status )
-
-*  Description:
-*     This function returns a copy of "text in which "\r\n" has been
-*     replaced by "\n" and any remaining "\r" characters have been
-*     replaced by "\n".
-
-*  Parameters:
-*     text
-*        A pointer to a text string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string containing the required
-*     copy.
-
-*  Notes:
-*     - NULL is returned if this function is called with the global error 
-*     status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   char *d;                  /* Pointer to next returned character */
-   char *result;             /* Returned pointer */
-   char *c;                  /* Pointer to next supplied character */
-   char lc;                  /* Previous character */
-
-/* Initialise */
-   result = NULL;
-
-/* Return if the pointer is NULL or if an error has occurred. */
-   if( !astOK || !text ) return result;
-
-/* Take a copy of the supplied text */
-   result = astStore( NULL, text, strlen( text ) + 1 );
-
-/* Clean the text by replacing "\r\n" by "\n". */
-   c = result - 1;
-   d = c;
-   lc = 0;
-   while( *(++c) ) {
-      if( *c != '\n' || lc != '\r' ) d++;
-      *d = ( lc = *c );
-   }
-   *(++d) = 0;
-
-/* Now further clean it by replacing "\r" by "\n". */
-   c = result - 1;
-   while( *(++c) ) {
-      if( *c == '\r' ) *c = '\n';
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void CleanXml( AstXmlObject *this, long int type, int *status ){
-/*
-*  Name:
-*     CleanXml
-
-*  Purpose:
-*     Free the resources used within an XmlObject.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void CleanXml( AstXmlObject *this, long int type, int *status )
-
-*  Description:
-*     This function frees the resources used internally within the
-*     supplied XmlObject.
-
-*  Parameters:
-*     this
-*        pointer to the XmlObject to be cleaned.
-*     type
-*        The type of XmlObject being cleaned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if an error has already
-*     occurred.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlAttribute *attr;
-   AstXmlBlack *black;
-   AstXmlCDataSection *cdatasec;
-   AstXmlComment *comm;
-   AstXmlDTDec *dtd;
-   AstXmlDeclPI *dec;
-   AstXmlDocument *doc;
-   AstXmlElement *elem;
-   AstXmlNamespace *ns;
-   AstXmlPI *pi;
-   AstXmlPrologue *pro;
-   AstXmlWhite *white;
-
-/* Return if a NULL pointer has been suppplied. */
-   if( !this ) return;
-
-/* For the base XmlObject class, clear the object type, etc. */
-   if( type == AST__XMLOBJECT  ){
-      this->type = AST__XMLBAD;
-      this->parent = NULL;
-
-/* For each derived class of XmlObject, first clean the parent component, 
-   then clean any further resources. */
-   } else if( type == AST__XMLELEM  ){
-
-      elem = (AstXmlElement *) this;
-
-      elem->name = astFree( elem->name );   
-      elem->defns = astFree( elem->defns );   
-      elem->prefix = astFree( elem->prefix );   
-
-      while( elem->nattr > 0 ) astXmlDelete( elem->attrs[ 0 ] );
-      elem->attrs = astFree( elem->attrs );
-
-      while( elem->nitem > 0 ) astXmlDelete( elem->items[ 0 ] );
-      elem->items = astFree( elem->items );
-      
-      while( elem->nnspref > 0 ) astXmlDelete( elem->nsprefs[ 0 ] );
-      elem->nsprefs = astFree( elem->nsprefs );
-
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLATTR ){
-      attr = (AstXmlAttribute *) this;
-      attr->name = astFree( attr->name );     
-      attr->value = astFree( attr->value );     
-      attr->prefix = astFree( attr->prefix );     
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLBLACK ){
-      black = (AstXmlBlack *) this;
-      black->text = astFree( black->text );     
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLWHITE ){
-      white = (AstXmlWhite *) this;
-      white->text = astFree( white->text );     
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLCDATA ){
-      cdatasec = (AstXmlCDataSection *) this;
-      cdatasec->text = astFree( cdatasec->text );     
-      CleanXml( this, AST__XMLOBJECT, status );
- 
-   } else if( type == AST__XMLCOM ){
-      comm = (AstXmlComment *) this;
-      comm->text = astFree( comm->text );     
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLPI ){
-      pi = (AstXmlPI *) this;
-      pi->target = astFree( pi->target );     
-      pi->text = astFree( pi->text );     
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLNAME ){
-      ns = (AstXmlNamespace *) this;
-      ns->prefix = astFree( ns->prefix );     
-      ns->uri = astFree( ns->uri );     
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLDOC ){
-      doc = (AstXmlDocument *) this;
-      doc->prolog = astXmlDelete( doc->prolog );
-      doc->root = astXmlDelete( doc->root );
-      while( doc->nepi > 0 ) astXmlDelete( doc->epilog[ 0 ] );
-      doc->epilog = astFree( doc->epilog );
-      doc->current = NULL;
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLPRO ){
-      pro = (AstXmlPrologue *) this;
-      pro->xmldecl = astXmlDelete( pro->xmldecl );
-      while( pro->nmisc1 > 0 ) astXmlDelete( pro->misc1[ 0 ] );
-      pro->misc1 = astFree( pro->misc1 );
-      pro->dtdec = astXmlDelete( pro->dtdec );
-      while( pro->nmisc2 > 0 ) astXmlDelete( pro->misc2[ 0 ] );
-      pro->misc2 = astFree( pro->misc2 );
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLDEC ){
-      dec = (AstXmlDeclPI *) this;
-      dec->text = astFree( dec->text );
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( type == AST__XMLDTD ){
-      dtd = (AstXmlDTDec *) this;
-      dtd->name = astFree( dtd->name );
-      dtd->external = astFree( dtd->external );
-      dtd->internal = astFree( dtd->internal );
-      CleanXml( this, AST__XMLOBJECT, status );
-
-   } else if( astOK ) {
-      astError( AST__INTER, "CleanXml: Invalid object type (%ld) supplied "
-                "(internal AST programming error).", status, type );      
-   }
-
-}
-
-static const char *DefaultURI( AstXmlElement *elem, int *status ){
-/*
-*  Name:
-*     DefaultURI
-
-*  Purpose:
-*     Find the URI associated with the default namespace.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *DefaultURI( AstXmlElement *elem, int *status )
-
-*  Description:
-*     This function returns the default namespace URI defined within the
-*     given element. If the element does not define a default namespace URI,
-*     then this function is called recursively on the parent element. If 
-*     there is no parent element, NULL is returned.
-
-*  Parameters:
-*     elem
-*        The pointer to the XmlElement.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a string holding the URI, or NULL if not found.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlParent *parent;        /* Parent of "this" */
-   const char *result;          /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status, and the supplied element. */
-   if( !astOK || !elem ) return result;
-
-/* If the supplied element defines a default namespace URI, return it.
-   Otherwise, call this function to get the default namespace URI from the
-   parent element. */
-   result = elem->defns;
-   if( !result ) {
-      parent = ( (AstXmlObject *) elem )->parent;
-      if( astXmlCheckType( parent, AST__XMLELEM ) ) {
-         result = DefaultURI( (AstXmlElement *) parent, status );   
-      }
-   }
-
-/* If the element has a blank default namespace URI, then return NULL
-   since the XML namespaces specification says that "The default
-   namespace can be set to the empty string. This has the same effect, 
-   within the scope of the declaration, of there being no default 
-   namespace". */
-   if( result && astChrLen( result ) == 0 ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-void *astXmlDelete_( void *obj_ptr, int *status ){
-/*
-*+
-*  Name:
-*     astXmlDelete
-
-*  Purpose:
-*     Remove the supplied XmlObject from its parent and delete it.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void *astXmlDelete( void *obj )
-
-*  Description:
-*     This function removes the supplied XmlObject from its parent and 
-*     deletes it using astXmlAnnul.
-
-*  Parameters:
-*     obj
-*        The pointer to the XmlObject to be deleted.
-
-*  Returned Value:
-*     NULL
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlDocument *doc;         /* Pointer to XM document */
-   AstXmlElement *elem;         /* Pointer to XML element */
-   AstXmlObject *obj;           /* Pointer to XmlObject */
-   AstXmlParent *parent;        /* Pointer to parent */
-   AstXmlPrologue *pro;         /* Pointer to XML prologue */
-   int i;                       /* Loop counter */
-   int j;                       /* Loop counter */
-   int n;                       /* Number of values in list */
-   int ok;                      /* Is obj a child of its parent? */
-   void *result;                /* Returned pointer */
-
-/* Initialise */
-   result = NULL;
-   ok = 0;
-
-/* Check we have an XmlObject. */
-   if( !astXmlCheckType( obj_ptr, AST__XMLOBJECT ) ) return result;
-
-/* Get the parent of the supplied object. */
-   obj = (AstXmlObject *) obj_ptr;
-   parent = obj->parent;
-   if( parent ) {
-
-/* First deal with cases where we are deleting items from a document. */
-      if( astXmlCheckType( parent, AST__XMLDOC ) ) {
-         doc = (AstXmlDocument *) parent;
-
-         if( astXmlCheckType( obj, AST__XMLPRO ) ) {
-            if( (AstXmlPrologue *) obj == doc->prolog ) {
-               doc->prolog = NULL;
-               ok = 1;
-            }
-
-         } else if( astXmlCheckType( obj, AST__XMLELEM ) ) {
-            if( (AstXmlElement *) obj == doc->root ) {
-               doc->root = NULL;
-               ok = 1;
-            }
-
-         } else if( astXmlCheckType( obj, AST__XMLMISC ) ) {
-            n = doc->nepi;
-            for( i = 0; i < n; i++ ) {
-               if( doc->epilog[ i ] == (AstXmlMiscItem *) obj ) {
-                  for( j = i + 1; j < n; j++ ) {
-                     doc->epilog[ j - 1 ] =  doc->epilog[ j ];
-                  }
-                  doc->epilog[ --doc->nepi ] = NULL;
-                  ok = 1;
-                  break;
-               }
-            }
-
-         } else if( astOK ) {
-            astError( AST__INTER, "astXmlDelete(xml): XmlObject of type %ld has "
-                      "inappropriate parent of type %ld (internal AST "
-                      "programming error).", status, obj->type, parent->type );
-         }           
-
-/* Now deal with cases where we are deleting items from a prologue. */
-      } else if( astXmlCheckType( parent, AST__XMLPRO ) ) {
-         pro = (AstXmlPrologue *) parent;
-
-         if( astXmlCheckType( obj, AST__XMLDEC ) ) {
-            if( (AstXmlDeclPI *) obj == pro->xmldecl ) {
-               pro->xmldecl = NULL;
-               ok = 1;
-            }
-
-         } else if( astXmlCheckType( obj, AST__XMLDTD ) ) {
-            if( (AstXmlDTDec *) obj == pro->dtdec ) {
-               pro->dtdec = NULL;
-               ok = 1;
-            }
-
-         } else if( astXmlCheckType( obj, AST__XMLMISC ) ) {
-            n = pro->nmisc1;
-            for( i = 0; i < n; i++ ) {
-               if( pro->misc1[ i ] == (AstXmlMiscItem *) obj ) {
-                  for( j = i + 1; j < n; j++ ) {
-                     pro->misc1[ j - 1 ] =  pro->misc1[ j ];
-                  }
-                  pro->misc1[ --pro->nmisc1 ] = NULL;
-                  ok = 1;
-                  break;
-               }
-            }
-
-            if( !ok ) {
-               n = pro->nmisc2;
-               for( i = 0; i < n; i++ ) {
-                  if( pro->misc2[ i ] == (AstXmlMiscItem *) obj ) {
-                     for( j = i + 1; j < n; j++ ) {
-                        pro->misc2[ j - 1 ] =  pro->misc2[ j ];
-                     }
-                     pro->misc2[ --pro->nmisc2 ] = NULL;
-                     ok = 1;
-                     break;
-                  }
-               }
-            }
-
-         } else if( astOK ) {
-            astError( AST__INTER, "astXmlDelete(xml): XmlObject of type %ld has "
-                      "inappropriate parent of type %ld (internal AST "
-                      "programming error).", status, obj->type, parent->type );
-         }           
-
-/* Now deal with cases where we are deleting items from an element. */
-      } else if( astXmlCheckType( parent, AST__XMLELEM ) ) {
-         elem = (AstXmlElement *) parent;
-
-/* Remove the object form the appropriate list in the parent, and
-   then shuffle down the remaining entries in the list and decrement the
-   size of the list. */
-         if( astXmlCheckType( obj, AST__XMLATTR ) ) {      
-            n = elem->nattr;
-            for( i = 0; i < n; i++ ) {
-               if( elem->attrs[ i ] == (AstXmlAttribute *) obj ) {
-                  for( j = i + 1; j < n; j++ ) {
-                     elem->attrs[ j - 1 ] =  elem->attrs[ j ];
-                  }
-                  elem->attrs[ --elem->nattr ] = NULL;
-                  ok = 1;
-                  break;
-               }
-            }
-   
-         } else if( astXmlCheckType( obj, AST__XMLNAME ) ) {      
-            n = elem->nnspref;
-            for( i = 0; i < n; i++ ) {
-               if( elem->nsprefs[ i ] == (AstXmlNamespace *) obj ) {
-                  for( j = i + 1; j < n; j++ ) {
-                     elem->nsprefs[ j - 1 ] =  elem->nsprefs[ j ];
-                  }
-                  elem->nsprefs[ --elem->nnspref ] = NULL;
-                  ok = 1;
-                  break;
-               }
-            }
-   
-         } else if( astXmlCheckType( obj, AST__XMLCONT ) ) {
-            n = elem->nitem;
-            for( i = 0; i < n; i++ ) {
-               if( elem->items[ i ] == (AstXmlContentItem *) obj ) {
-                  for( j = i + 1; j < n; j++ ) {
-                     elem->items[ j - 1 ] =  elem->items[ j ];
-                  }
-                  elem->items[ --elem->nitem ] = NULL;
-                  ok = 1;
-                  break;
-               }
-            }
-         }
-
-      } else if( astOK ) {
-         astError( AST__INTER, "astXmlDelete(xml): XmlObject of type %ld has "
-                   "inappropriate parent of type %ld (internal AST "
-                   "programming error).", status, obj->type, parent->type );
-      }
-
-/* Nullify the parent pointer so that astXmlAnnul will delete the object. */
-      obj->parent = NULL;
-
-/* If the supplied object has no parent, we can continue to annul it. */
-   } else {
-      ok = 1;
-   }
-
-/* Report an error if required. */
-   if( !ok && astOK ) {
-      astError( AST__INTER, "astXmlDelete(xml): Supplied XmlObject (type %ld) "
-                "is not owned by its own parent (internal AST "
-                "programming error).", status, obj->type );
-   }
-
-/* Delete the object. */
-   result = astXmlAnnul( obj ); 
-
-/* Annul the object and return the resulting NULL pointer. */
-   return result;
-}
-
-static AstXmlAttribute *FindAttribute( AstXmlElement *this, const char *name0, 
-                                       int *status ){
-/*
-*  Name:
-*     FindAttribute
-
-*  Purpose:
-*     Search an XmlElement for a named attribute 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlAttribute *FindAttribute( AstXmlElement *this, const char *name0, 
-*                                     int *status )
-
-*  Description:
-*     This function searches the supplied XmlElement for an attribute
-*     with the given name. If found, a pointer to the XmlAttribute is 
-*     returned. Otherwise NULL is returned.
-
-*  Parameters:
-*     this
-*        The pointer to the XmlElement.
-*     name0
-*        Pointer to a string holding the name of the attribute. The name
-*        may be preceeded with a "prefix:" string, in which case the
-*        prefix will also be matched. If no prefix is included, the first
-*        attribute with the specified name is returned, regardless of
-*        its prefix.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the XmlAttribute, or NULL if not found.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlAttribute *result;     /* Returned pointer */
-   char name_buffer[ 50 ];      /* Buffer for name */
-   char prefix_buffer[ 50 ];    /* Buffer for prefix */
-   const char *colon;           /* Pointer to colon in supplied string */
-   const char *name1;           /* Pointer to name to be checked */
-   const char *name;            /* Pointer to name to be searched for */
-   const char *prefix1;         /* Pointer to prefix to be checked */
-   const char *prefix;          /* Pointer to prefix to be searched for */
-   int i;                       /* Loop count */
-   size_t len;                  /* Length of string */
-
-/* Initialise */
-   result = NULL;
-   name = name0;
-   prefix = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* If the supplied name string contains a colon, split it up into prefix
-   and name. */
-   if( ( colon = strchr( name0, ':' ) ) ) {
-      len = colon - name0;
-
-      if( len > 49 ) {
-         astError( AST__XMLNM, "FindAttribute: The XML prefix in \"%s\" "
-                   "is too long (> 49 characters).", status, name0 );
-      } else {
-         strncpy( prefix_buffer, name0, len );
-         prefix_buffer[ len ] = 0;
-         prefix = prefix_buffer;
-         len = strlen( colon + 1 );
-
-         if( len > 49 ) {
-            astError( AST__XMLNM, "FindAttribute: The XML attribute name "
-                      "in \"%s\" is too long (> 49 characters).", status, name0 );
-         } else {
-            strcpy( name_buffer, colon + 1 );
-            name = name_buffer;
-         }
-
-      }
-
-   }      
-
-/* Loop round all the attributes in the element. */
-   for( i = 0; i < this->nattr; i++ ) {
-      name1 = this->attrs[ i ]->name;
-      prefix1 = this->attrs[ i ]->prefix;
-
-/* Compare the attribute name (and prefix) with the supplied name (and
-   prefix). Leave the loop if they match. */
-      if( !strcmp( name1, name ) && 
-          ( !prefix || ( prefix1 && !strcmp( prefix1, prefix ) ) ) ) {
-         result = this->attrs[ i ];
-         break;
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static const char *Format( AstXmlObject *this, int ind, int *status ){
-/*
-*  Name:
-*     Format
-
-*  Purpose:
-*     Converts an XmlObject into a character string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *Format( AstXmlObject *this, int ind, int *status )
-
-*  Description:
-*     This function returns a pointer to a dynamically allocated string
-*     containing a textual representation of the supplied XmlObject.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject to format.
-*     ind
-*        If the XmlObject is an element, then each content item within
-*        the element will be prefixed by a string containing "ind" spaces
-*        (indenting the returned element itself is the responsibility of
-*        the caller and so "this" is not itself indented within this function).
-*        In addition, a newline character will be included at the start
-*        of the prefix if required, to ensure that each new item starts
-*        on a new line. If "ind" is less than zero, then no prefixes are
-*        added.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null terminated string holding the formated XmlObject.
-*     This string should be freed when no longer needed using astFree.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlPrologue *pro;      /* Pointer to XML prologue */
-   AstXmlDocument *doc;      /* Pointer to XML document */
-   AstXmlAttribute *attrib;  /* Pointer to XML attribute */
-   AstXmlWhite *white;       /* Pointer to character data */
-   AstXmlBlack *black;       /* Pointer to character data */
-   AstXmlElement *elem;      /* Pointer to XML element */
-   AstXmlNamespace *ns;      /* Pointer to XML namespace instruction */
-   char *result;             /* The returned pointer */
-   const char *temp;         /* A temporary string pointer */
-   int i;                    /* Loop count */
-   int nc;                   /* Length of returned string */
-   int type;                 /* Object type */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK || !this ) return result;
-
-/* Get the object type */
-   type = this->type;
-
-/* If this is an element... */
-   if( this->type == AST__XMLELEM ) {
-      temp = FormatTag( this, 1, status );
-      result = astAppendString( result, &nc, temp );
-      temp = astFree( (void *) temp );
-
-      elem = (AstXmlElement *) this; 
-      if( elem->nitem > 0 ) {
-
-/* Go round all the items of content. */
-         for( i = 0; i < elem->nitem; i++ ) {
-
-/* Ignore whitespace elements unless we are not producing indentation. */
-            if( !astXmlCheckType( elem->items[ i ], AST__XMLWHITE ) ||
-                ind < 0 ) {
-
-/* Format the item */
-               temp = Format( (AstXmlObject *) elem->items[ i ], ( ( ind > -1 ) ? ind + IND_INC : -1 ), status );
-               if( temp ) {
-
-/* Now append the next item of content, and free its memory. */
-                  if( ind > -1 ) {
-                     result = AppendLine( result, &nc, temp, 
-                                          ( (ind > -1) ? ind + IND_INC : -1 ), status );
-                  } else {            
-                     result = astAppendString( result, &nc, temp );
-                  }
-                  temp = astFree( (void *) temp );
-               }
-            }
-         }
-
-/* Finally append the end tag. */
-         temp = FormatTag( this, 0, status );
-         if( ind > -1 ) {
-            result = AppendLine( result, &nc, temp, ind, status );
-         } else {            
-            result = astAppendString( result, &nc, temp );
-         }
-         temp = astFree( (void *) temp );
-
-      }
-      
-/* If this is an attribute... */
-   } else if( type == AST__XMLATTR ){
-      attrib = (AstXmlAttribute *) this; 
-
-      if( attrib->prefix ) {
-         result = astAppendString( result, &nc, attrib->prefix );
-         result = astAppendString( result, &nc, ":" );
-      }
-
-      temp = AddEscapes( attrib->value, status );
-      result = astAppendString( result, &nc, attrib->name );
-      result = astAppendString( result, &nc, "=\"" );
-      result = astAppendString( result, &nc, temp );
-      result = astAppendString( result, &nc, "\"" );
-      temp = astFree( (void *) temp );
-
-   } else if( type == AST__XMLWHITE ){
-      white = (AstXmlWhite *) this; 
-      temp = AddEscapes( white->text, status );
-      result = astAppendString( result, &nc, temp );
-      temp = astFree( (void *) temp );
-
-   } else if( type == AST__XMLBLACK ){
-      black = (AstXmlBlack *) this; 
-      temp = AddEscapes( black->text, status );
-      result = astAppendString( result, &nc, temp );
-      temp = astFree( (void *) temp );
- 
-   } else if( type == AST__XMLCDATA || 
-              type == AST__XMLCOM ||
-              type == AST__XMLPI ||
-              type == AST__XMLDEC ||
-              type == AST__XMLDTD ){
-
-      temp = FormatTag( this, 1, status );
-      result = astAppendString( result, &nc, temp );
-      temp = astFree( (void *) temp );
-
-   } else if( type == AST__XMLNAME ){
-      ns = (AstXmlNamespace *) this;
-      result = astAppendString( result, &nc, "xmlns:" );
-      result = astAppendString( result, &nc, ns->prefix );
-      result = astAppendString( result, &nc, "=\"" );
-      result = astAppendString( result, &nc, ns->uri );
-      result = astAppendString( result, &nc, "\"" );
-
-   } else if( type == AST__XMLPRO ){
-      pro = (AstXmlPrologue *) this; 
-      result = astAppendString( result, &nc, 
-                             Format( (AstXmlObject *) pro->xmldecl, ind, status ) );
-
-/* Append all the miscalleneous items before the DTD. */
-      for( i = 0; i < pro->nmisc1; i++ ) {
-         temp = Format( (AstXmlObject *) pro->misc1[ i ], ind, status );
-         if( temp ) {
-            if( ind > -1 ) {
-               result = AppendLine( result, &nc, temp, ind, status );
-            } else {            
-               result = astAppendString( result, &nc, temp );
-            }
-            temp = astFree( (void *) temp );
-         }
-      }
-
-/* Append the DTD. */
-      temp = Format( (AstXmlObject *) pro->dtdec, ind, status );
-      if( temp ) {
-         if( ind > -1 ) {
-            result = AppendLine( result, &nc, temp, ind, status );
-         } else {            
-            result = astAppendString( result, &nc, temp );
-         }
-         temp = astFree( (void *) temp );
-      }
-
-/* Append all the miscalleneous items after the DTD. */
-      for( i = 0; i < pro->nmisc2; i++ ) {
-         temp = Format( (AstXmlObject *) pro->misc2[ i ], ind, status );
-         if( temp ) {
-            if( ind > -1 ) {
-               result = AppendLine( result, &nc, temp, ind, status );
-            } else {            
-               result = astAppendString( result, &nc, temp );
-            }
-            temp = astFree( (void *) temp );
-         }
-      }
-
-   } else if( type == AST__XMLDOC ){
-      doc = (AstXmlDocument *) this; 
-
-/* Format the prologue. */
-      result = astAppendString( result, &nc, 
-                             Format( (AstXmlObject *) doc->prolog, ind, status ) );
-
-/* Append the root element. */
-      temp = Format( (AstXmlObject *) doc->root, ind, status );
-      if( temp ) {
-         if( ind > -1 ) {
-            result = AppendLine( result, &nc, temp, ind, status );
-         } else {            
-            result = astAppendString( result, &nc, temp );
-         }
-         temp = astFree( (void *) temp );
-      }
-
-/* Append all the miscalleneous items in the epilogue. */
-      for( i = 0; i < doc->nepi; i++ ) {
-         temp = Format( (AstXmlObject *) doc->epilog[ i ], ind, status );
-         if( temp ) {
-            if( ind > -1 ) {
-               result = AppendLine( result, &nc, temp, ind, status );
-            } else {            
-               result = astAppendString( result, &nc, temp );
-            }
-            temp = astFree( (void *) temp );
-         }
-      }
-
-   } else if( astOK ) {
-      astError( AST__INTER, "Format(xml): Invalid object type (%d) supplied "
-                "(internal AST programming error).", status, type );      
-   }
-
-/* Free the returned string if an error has occurred. */
-   if( !astOK ) result = astFree( result );
-
-/* Return the result. */
-   return result;
-}
-
-static char *FormatTag( AstXmlObject *this, int opening, int *status ){
-/*
-*  Name:
-*     FormatTag
-
-*  Purpose:
-*     Returns a string holding an XML tag describing the given XmlObject.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     char *FormatTag( AstXmlObject *this, int opening, int *status )
-
-*  Description:
-*     This function returns a pointer to a dynamic string containing an 
-*     XML tag describing the given XmlObject.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject.
-*     opening
-*        Indicates which tag is to be returned; the start tag or the end
-*        tag. If non-zero the start tag is returned. Otherwise, the 
-*        end tag is returned. If the supplied XmlObject has no end
-*        tag (i.e. if it is an empty element, or if it is not an element), 
-*        then NULL is returned but no error is reported.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a dynamically allocated string holding the tag. 
-
-*  Notes:
-*     - Empty elements are represented as an start tag of the form <.../>, 
-*     with no corresponding end tag.
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-
-/* Local Variables: */
-   AstXmlCDataSection *cdata;/* Pointer to XML CDATA section */
-   AstXmlElement *elem;      /* Pointer to XML element */
-   AstXmlComment *com;       /* Pointer to XML comment */
-   AstXmlPI *pi;             /* Pointer to XML processing instruction */
-   AstXmlDTDec *dtd;         /* Pointer to XML data type declaration */
-   AstXmlDeclPI *xmlpi;      /* XML version declaration */
-   char *result;             /* The returned pointer */
-   const char *temp;         /* A temporary string pointer */
-   int i;                    /* Loop count */
-   int nc;                   /* Length of returned string */
-   int type;                 /* Object type */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Get the object type */
-   type = this->type;
-
-/* If this is an element... */
-   if( this->type == AST__XMLELEM ) {
-      elem = (AstXmlElement *) this; 
-
-      if( opening ) {
-         result = astAppendString( result, &nc, "<" );
-         if( elem->prefix ) {
-            result = astAppendString( result, &nc, elem->prefix );
-            result = astAppendString( result, &nc, ":" );
-         }
-         result = astAppendString( result, &nc, elem->name );
-   
-         if( elem->defns ) {
-            result = astAppendString( result, &nc, " xmlns=\"" );
-            result = astAppendString( result, &nc, elem->defns );
-            result = astAppendString( result, &nc, "\"" );
-         }
-   
-         for( i = 0; i < elem->nnspref; i++ ) {
-            temp = Format( (AstXmlObject *) elem->nsprefs[ i ], -1, status );
-            if( temp ) {
-               result = AppendChar( result, &nc, ' ', status );
-               result = astAppendString( result, &nc, temp );
-               temp = astFree( (void *) temp );
-            }
-         }
-   
-         for( i = 0; i < elem->nattr; i++ ) {
-            temp = Format( (AstXmlObject *) elem->attrs[ i ], -1, status );
-            if( temp ){
-               result = AppendChar( result, &nc, ' ', status );
-               result = astAppendString( result, &nc, temp );
-               temp = astFree( (void *) temp );
-            }
-         }
-   
-         if( elem->nitem == 0 ) result = astAppendString( result, &nc, "/" );
-         result = astAppendString( result, &nc, ">" );
-
-      } else if( elem->nitem > 0 ) {
-         result = astAppendString( result, &nc, "</" );
-         if( elem->prefix ) {
-            result = astAppendString( result, &nc, elem->prefix );
-            result = astAppendString( result, &nc, ":" );
-         }
-         result = astAppendString( result, &nc, elem->name );
-         result = astAppendString( result, &nc, ">" );
-      }
-      
-   } else if( type == AST__XMLDTD ){
-      dtd = (AstXmlDTDec *) this; 
-      if( opening && dtd->name && dtd->name[0] ) {
-         result = astAppendString( result, &nc, "<!DOCTYPE " );
-         result = astAppendString( result, &nc, dtd->name );
-         if( dtd->external && dtd->external[ 0 ] ) {
-            result = astAppendString( result, &nc, " " );
-            result = astAppendString( result, &nc, dtd->external );
-         }
-         if( dtd->internal && dtd->internal[ 0 ] ) {
-            result = astAppendString( result, &nc, " [" );
-            result = astAppendString( result, &nc, dtd->internal );
-            result = astAppendString( result, &nc, "]" );
-         }
-         result = astAppendString( result, &nc, ">" );
-      }
- 
-   } else if( type == AST__XMLCDATA ){
-      if( opening ) {
-         cdata = (AstXmlCDataSection *) this; 
-         result = astAppendString( result, &nc, "<![CDATA[" );
-         result = astAppendString( result, &nc, cdata->text );
-         result = astAppendString( result, &nc, "]]>" );
-      }
- 
-   } else if( type == AST__XMLCOM ){
-      if( opening ) {
-         com = (AstXmlComment *) this; 
-         result = astAppendString( result, &nc, "<!--" );
-         result = astAppendString( result, &nc, com->text );
-         result = astAppendString( result, &nc, "-->" );
-      }
-
-   } else if( type == AST__XMLPI ){
-      pi = (AstXmlPI *) this; 
-      if( opening ) {
-         result = astAppendString( result, &nc, "<?" );
-         result = astAppendString( result, &nc, pi->target );
-         if( pi->text && pi->text[0] ) {
-            result = astAppendString( result, &nc, " " );
-            result = astAppendString( result, &nc, pi->text );
-         }
-         result = astAppendString( result, &nc, "?>" );
-      }
-
-   } else if( type == AST__XMLDEC ){
-      xmlpi = (AstXmlDeclPI *) this; 
-      if( opening && xmlpi->text && xmlpi->text[0] ) {
-         result = astAppendString( result, &nc, "<?xml" );
-         if( xmlpi->text && xmlpi->text[0] ) {
-            result = astAppendString( result, &nc, " " );
-            result = astAppendString( result, &nc, xmlpi->text );
-         }
-         result = astAppendString( result, &nc, "?>" );
-      }
-   }
-
-/* If notOK, free the rteurned string. */
-   if( !astOK ) result = astFree( result );
-
-/* Return the result. */
-   return result;
-}
-
-static void InitXmlAttribute( AstXmlAttribute *new, int type, const char *name,
-                              const char *value, const char *prefix, int *status ){
-/*
-*  Name:
-*     InitXmlAttribute
-
-*  Purpose:
-*     Initialise a new XmlAttribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlAttribute( AstXmlAttribute *new, int type, const char *name, 
-*                       const char *value, const char *prefix, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlAttribute 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     name
-*        The name for the attribute.
-*     value
-*        The value for the attribute
-*     prefix
-*        The namespace prefix for the attribute. May be NULL or blank, in
-*        which case any prefix at the start of "name" is used.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   const char *colon;         /* Pointer to colon within supplied name */
-   char *newname;             /* Pointer to name string (no prefix) */
-   char *newpref;             /* Pointer to name string */
-   int nc;                    /* Length of prefix string */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLATTR, status ) ){
-      astError( AST__INTER, "InitXmlAttribute: Supplied object type (%d) "
-                "does not represent an XmlAttribute", status, type );
-   } 
-
-/* Ensure we have non-NULL pointers. */
-   if( !name ) name = "";
-   if( !value ) value = "";
-
-/* If no prefix was supplied, extract any prefix from the start of the 
-   supplied name. */
-   newname = (char *) name;
-   newpref = (char *) prefix;
-   colon = NULL;
-
-   if( !prefix || astChrLen( prefix ) == 0 ){
-      colon = strchr( name, ':' );
-      if( colon ) {
-         nc = colon - name;
-         newpref = astStore( NULL, name, nc + 1 );
-         newpref[ nc ] = 0;
-
-         nc = strlen( name ) - ( colon - name ) - 1;
-         newname = astStore( NULL, colon + 1, nc + 1 );
-         newname[ nc ] = 0;
-      }
-   }
-
-/* Check the supplied name and prefix are valid XML 'names'. */
-   CheckName( newname, "attribute", "InitXmlAttribute", 0, status );
-   CheckName( newpref, "attribute", "InitXmlAttribute", 1, status );
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
-   new->name = astStore( NULL, newname, strlen( newname ) + 1 );
-   new->value = astStore( NULL, value, strlen( value ) + 1 );
-   new->prefix = NULL;
-   if( newpref ) {
-      nc = strlen( newpref );
-      if( nc > 0 ) new->prefix = astStore( NULL, newpref, nc + 1 );
-   }
-
-/* Free any name and prefix extracted from the supplied name string */
-   if( colon ) {
-      newname = astFree( newname );
-      newpref = astFree( newpref );
-   }
-}
-
-static void InitXmlCDataSection( AstXmlCDataSection *new, int type, 
-                                 const char *text, int *status ){
-/*
-*  Name:
-*     InitXmlCDataSection
-
-*  Purpose:
-*     Initialise a new XmlCDataSection.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlCDataSection( AstXmlCDataSection *new, int type, 
-*                          const char *text, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlCDataSection 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     text
-*        Pointer to a null terminated string holding the text.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLCDATA, status ) ){
-      astError( AST__INTER, "InitXmlCDataSection: Supplied object type (%d) "
-                "does not represent an XmlCDataSection", status, type );
-   } 
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. */
-   new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlWhite( AstXmlWhite *new, int type, const char *text, int *status ){
-/*
-*  Name:
-*     InitXmlWhite
-
-*  Purpose:
-*     Initialise a new XmlWhite.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlWhite( AstXmlWhite *new, int type, const char *text, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlWhite 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     text
-*        Pointer to a null terminated string holding the text.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables:  */
-   const char *c;          /* Pointer to next character */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLWHITE, status ) ){
-      astError( AST__INTER, "InitXmlWhite: Supplied object type (%d) "
-                "does not represent an XmlWhite", status, type );
-   } 
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !text ) text = "";
-
-/* Report an error if the text is not white. */
-   c = text - 1;
-   while( *(++c) ) {
-      if( !isspace( *c ) ) {
-         astError( AST__XMLCM, "InitXmlWhite(xml): Illegal XML whitespace "
-                   "string supplied \"%s\" - not all characters are white.", status, 
-                    text );
-         break;
-      }
-   }
-
-/* Initialise the items specific to this class of structure. */
-   new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlBlack( AstXmlBlack *new, int type, const char *text, int *status ){
-/*
-*  Name:
-*     InitXmlBlack
-
-*  Purpose:
-*     Initialise a new XmlBlack.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlBlack( AstXmlBlack *new, int type, const char *text, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlBlack 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     text
-*        Pointer to a null terminated string holding the text.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLBLACK, status ) ){
-      astError( AST__INTER, "InitXmlBlack: Supplied object type (%d) "
-                "does not represent an XmlBlack", status, type );
-   } 
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. */
-   new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlComment( AstXmlComment *new, int type, const char *text, int *status ){
-/*
-*  Name:
-*     InitXmlComment
-
-*  Purpose:
-*     Initialise a new XmlComment.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlComment( AstXmlComment *new, int type, const char *text, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlComment 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     text
-*        Pointer to a null terminated string holding the text.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLCOM, status ) ){
-      astError( AST__INTER, "InitXmlComment: Supplied object type (%d) "
-                "does not represent an XmlComment", status, type );
-   } 
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. Report an error 
-   if the comment is illegal. */
-   if( strstr( text, "--" ) && astOK ) {
-      astError( AST__XMLCM, "InitXmlCom(xml): Illegal XML comment "
-                "supplied \"%s\" - comments may not contain the "
-                "string \"--\".", status, text );
-      new->text = NULL;
-   } else {
-      new->text = astStore( NULL, text, strlen( text ) + 1 );
-   }
-}
-
-static void InitXmlDeclPI( AstXmlDeclPI *new, int type, const char *text, int *status ){
-/*
-*  Name:
-*     InitXmlDeclPI
-
-*  Purpose:
-*     Initialise a new XmlDeclPI.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlDeclPI( AstXmlDeclPI *new, int type, const char *text, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlDeclPI 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     text
-*        Pointer to a null terminated string holding the text.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLDEC, status ) ){
-      astError( AST__INTER, "InitXmlDeclPI: Supplied object type (%d) "
-                "does not represent an XmlDeclPI", status, type );
-   } 
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. */
-   new->text = astStore( NULL, text, strlen( text ) + 1 );
-}
-
-static void InitXmlDocument( AstXmlDocument *new, int type, int *status ){
-/*
-*  Name:
-*     InitXmlDocument
-
-*  Purpose:
-*     Initialise a new XmlDocument.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlDocument( AstXmlDocument *new, int type, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlDocument 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLDOC, status ) ){
-      astError( AST__INTER, "InitXmlDocument: Supplied object type (%d) "
-                "does not represent an XmlDocument", status, type );
-   } 
-
-/* Initialise the parent XmlObject */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
-   new->prolog = NULL;
-   new->root = NULL;
-   new->epilog = NULL;
-   new->nepi = 0;
-   new->current = NULL;
-}
-
-static void InitXmlDTDec( AstXmlDTDec *new, int type, const char *name, 
-                          const char *external, const char *internal, int *status ){
-/*
-*  Name:
-*     InitXmlDTDec
-
-*  Purpose:
-*     Initialise a new XmlDTDec.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void InitXmlDTDec( AstXmlDTDec *new, int type, const char *name, 
-*                        const char *external, const char *internal, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlDTDec 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     name
-*        The document type name
-*     external
-*        The external SYSTEM id.
-*     internal
-*        The internal declaration markup text (this is not checked or
-*        parsed).
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLDTD, status ) ){
-      astError( AST__INTER, "InitXmlDTDec: Supplied object type (%d) "
-                "does not represent an XmlDTDec", status, type );
-   } 
-
-/* Initialise the parent XmlObject */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !name ) name = "";
-   if( !external ) external = "";
-   if( !internal ) internal = "";
-
-/* Initialise the items specific to this class of structure. */
-   new->name = astStore( NULL, name, strlen( name ) + 1 );
-   new->external = astStore( NULL, external, strlen( external ) + 1 );
-   new->internal = astStore( NULL, internal, strlen( internal ) + 1 );
-}
-
-static void InitXmlElement( AstXmlElement *new, int type, const char *name, 
-                            const char *prefix, int *status ){
-/*
-*  Name:
-*     InitXmlElement
-
-*  Purpose:
-*     Initialise a new XmlElement.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlElement( AstXmlElement *new, int type, const char *name, 
-*                     const char *prefix, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlElement 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     name
-*        The name for the element.
-*     prefix
-*        The namespace prefix for the element. May be NULL or blank, in
-*        which case any prefix at the start of "name" is used.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   const char *colon;         /* Pointer to colon within supplied name */
-   char *newname;             /* Pointer to name string (no prefix) */
-   char *newpref;             /* Pointer to name string */
-   int nc;                    /* Length of prefix string */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLELEM, status ) ){
-      astError( AST__INTER, "InitXmlElement: Supplied object type (%d) "
-                "does not represent an XmlElement", status, type );
-   } 
-
-/* Ensure we have non-NULL pointers. */
-   if( !name ) name = "";
-
-/* If no prefix was supplied, extract any prefix from the start of the 
-   supplied name. */
-   newname = (char *) name;
-   newpref = (char *) prefix;
-   colon = NULL;
-
-   if( !prefix || astChrLen( prefix ) == 0 ){
-      colon = strchr( name, ':' );
-      if( colon ) {
-         nc = colon - name;
-         newpref = astStore( NULL, name, nc + 1 );
-         newpref[ nc ] = 0;
-
-         nc = strlen( name ) - ( colon - name ) - 1;
-         newname = astStore( NULL, colon + 1, nc + 1 );
-         newname[ nc ] = 0;
-      }
-   }
-
-/* Check the supplied name and prefix are valid XML 'names'. */
-   CheckName( newname, "element", "InitXmlElement", 0, status );
-   CheckName( newpref, "element", "InitXmlElement", 1, status );
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
-   new->name = astStore( NULL, newname, strlen( newname ) + 1 );
-   new->attrs = NULL;
-   new->nattr = 0;
-   new->items = NULL;
-   new->nitem = 0;
-   new->defns = NULL;
-   new->nsprefs = NULL;
-   new->nnspref = 0;
-   new->complete = 0;
-
-   new->prefix = NULL;
-   if( newpref ) {
-      nc = strlen( newpref );
-      if( nc > 0 ) new->prefix = astStore( NULL, newpref, nc + 1 );
-   }
-
-/* Free any name and prefix extracted from the supplied name string */
-   if( colon ) {
-      newname = astFree( newname );
-      newpref = astFree( newpref );
-   }
-}
-
-static void InitXmlNamespace( AstXmlNamespace *new, int type, const char *prefix,
-                              const char *uri, int *status ){
-/*
-*  Name:
-*     InitXmlNamespace
-
-*  Purpose:
-*     Initialise a new XmlNamespace.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlNamespace( AstXmlNamespace *new, int type, const char *prefix, 
-*                       const char *uri, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlNamespace 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     prefix
-*        Pointer to a null terminated string holding the namespace prefix.
-*     uri
-*        Pointer to a null terminated string holding the namespace URI.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLNAME, status ) ){
-      astError( AST__INTER, "InitXmlNamespace: Supplied object type (%d) "
-                "does not represent an XmlNamespace", status, type );
-   } 
-
-/* Ensure we have non-NULL pointers. */
-   if( !prefix ) prefix = "";
-   if( !uri ) uri = "";
-
-/* Check the supplied prefix is a valid XML 'name'. */
-   CheckName( prefix, "namespace prefix", "InitXmlNamespace", 0, status );
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
-   new->prefix = astStore( NULL, prefix, strlen( prefix ) + 1 );
-   new->uri = astStore( NULL, uri, strlen( uri ) + 1 );
-}
-
-static void InitXmlObject( AstXmlObject *new, long int type, int *status ){
-/*
-*  Name:
-*     InitXmlObject
-
-*  Purpose:
-*     Initialise a new XmlObject.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlObject( AstXmlObject *new, long int type, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlObject 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Pointer to thread-specific global data */
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* If needed, get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the supplied object type is OK. Report an error if not. */
-   if( !CheckType( type, AST__XMLOBJECT, status ) ){
-      astError( AST__INTER, "InitXmlObject: Supplied object type (%ld) "
-                "is not appropriate for an XmlObject", status, type );
-   }
-
-/* This class of structure is the base class for XML objects so it has no
-   parent class to be initialised. So just initialise the items specific to 
-   this class of structure. */
-   new->parent = NULL;
-   new->type = type;
-   new->id = next_id++;
-
-#ifdef DEBUG
-/* Add the new XmlObject to the list of all XmlObjects. */
-   AddObjectToList( new );
-#endif
-
-}
-
-static void InitXmlPI( AstXmlPI *new, int type, const char *target,
-                       const char *text, int *status ){
-/*
-*  Name:
-*     InitXmlPI
-
-*  Purpose:
-*     Initialise a new XmlPI.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlPI( AstXmlPI *new, int type, const char *target, 
-*                const char *text, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlPI 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     target
-*        Pointer to a null terminated string holding the PI target.
-*     text
-*        Pointer to a null terminated string holding the PI text.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLPI, status ) ){
-      astError( AST__INTER, "InitXmlPI: Supplied object type (%d) "
-                "does not represent an XmlPI", status, type );
-   } 
-
-/* Initialise the parent XmlObject component. */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Ensure we have non-NULL pointers. */
-   if( !target ) target = "";
-   if( !text ) text = "";
-
-/* Initialise the items specific to this class of structure. Report an error 
-   if anything is illegal. */
-   new->target = NULL;
-   new->text = NULL;
-
-   if( !Ustrcmp( target, "XML", status ) && astOK ) {
-      astError( AST__XMLPT, "InitXmlPI(xml): Illegal XML PI target \"%s\""
-                " supplied.", status, target );
-   } else {
-      new->target = astStore( NULL, target, strlen( target ) + 1 );
-      new->text = astStore( NULL, text, strlen( text ) + 1 );
-   }
-}
-
-static void InitXmlPrologue( AstXmlPrologue *new, int type, int *status ){
-/*
-*  Name:
-*     InitXmlPrologue
-
-*  Purpose:
-*     Initialise a new XmlPrologue.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     InitXmlPrologue( AstXmlPrologue *new, int type, int *status )
-
-*  Description:
-*     This function initialises supplied memory to hold an XmlPrologue 
-*     structure.
-
-*  Parameters:
-*     new
-*        The memory in which to initialise the structure.
-*     type
-*        An identifier for the structure type.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if( !astOK ) return;
-
-/* Check the supplied object type is appropriate for the class of
-   structure being initialised. If not report an error. */
-   if( !CheckType( type, AST__XMLPRO, status ) ){
-      astError( AST__INTER, "InitXmlPrologue: Supplied object type (%d) "
-                "does not represent an XmlPrologue", status, type );
-   } 
-
-/* Initialise the parent XmlObject */
-   InitXmlObject( (AstXmlObject *) new, type, status );
-
-/* Initialise the items specific to this class of structure. */
-   new->xmldecl = NULL;
-   new->misc1 = NULL;
-   new->nmisc1 = 0;
-   new->dtdec = NULL;
-   new->misc2 = NULL;
-   new->nmisc2 = 0;
-}
-
-static int MatchName( AstXmlElement *this, const char *name, int *status ){
-/*
-*  Name:
-*     MatchName
-
-*  Purpose:
-*     Check that an element has a specified name and/or prefix.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int MatchName( AstXmlElement *this, const char *name, int *status )
-
-*  Description:
-*     This function checks that an element has a specified name and/or prefix.
-
-*  Parameters:
-*     this
-*        The XmlElement to check.
-*     name
-*        The name for the element (may include a namespace prefix).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the supplied element has the supplie dname/prefix. Zero
-*     otherwise.
-
-*/
-
-
-/* Local Variables: */
-   const char *colon;         /* Pointer to colon within supplied name */
-   char *newname;             /* Pointer to name string (no prefix) */
-   char *newpref;             /* Pointer to name string */
-   int nc;                    /* Length of prefix string */
-   int result;                /* Returned value */
-
-/* Initialise */
-   result = 0;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* Extract any prefix from the start of the supplied name. */
-   newpref = NULL;
-   newname = (char *) name;
-   colon = strchr( name, ':' );
-   if( colon ) {
-      nc = colon - name;
-      newpref = astStore( NULL, name, nc + 1 );
-      newpref[ nc ] = 0;
-
-      nc = strlen( name ) - ( colon - name ) - 1;
-      newname = astStore( NULL, colon + 1, nc + 1 );
-      newname[ nc ] = 0;
-   }
-
-/* Compare the prefix. */
-   if( newpref && this->prefix ) {
-      result = !strcmp( newpref, this->prefix );
-
-   } else if( !newpref && !this->prefix ) {
-      result = 1;
-
-   } else {
-      result = 0;
-   }
-
-/* If the prefixes matches, compare the names */
-   if( result ) {
-      if( newname && this->name ) {
-         result = !strcmp( newname, this->name );
-   
-      } else if( !newname && !this->name ) {
-         result = 1;
-   
-      } else {
-         result = 0;
-      }
-   }
-
-/* Free any name and prefix extracted from the supplied name string */
-   if( colon ) {
-      newname = astFree( newname );
-      newpref = astFree( newpref );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstXmlAttribute *NewAttribute( const char *name, const char *value, 
-                                      const char *prefix, int *status ){
-/*
-*  Name:
-*     NewAttribute
-
-*  Purpose:
-*     Create a new XmlAttribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlAttribute *NewAttribute( const char *name, const char *value,
-*                                    const char *prefix, int *status )
-
-*  Description:
-*     This function creates a new XmlAttribute structure representing an
-*     XML attribute with the given name, value and namespace prefix. 
-
-*  Parameters:
-*     name
-*        Pointer to a null terminated string containing the attribute name.
-*     value 
-*        Pointer to a null terminated string containing the attribute value.
-*     prefix
-*        Pointer to a null terminated string containing the attribute
-*        namespace prefix (may be NULL or blank).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new structure is returned. 
-
-*  Notes:
-*     - A NULL pointer is returned if the inherited status value
-*     indicates an error has occurred on entry, or if this function
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlAttribute *new;        /* The returned pointer */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlAttribute *) astMalloc( sizeof( AstXmlAttribute ) );
-
-/* Initialise it. */
-   InitXmlAttribute( new, AST__XMLATTR, name, value, prefix, status );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
-   return new;
-
-}
-
-static AstXmlDocument *NewDocument( int *status ){
-/*
-*  Name:
-*     NewDocument
-
-*  Purpose:
-*     Create a new empty XmlDocument.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlDocument *NewDocument( int *status )
-
-*  Description:
-*     This function creates a new empty XmlDocument structure representing
-*     an entire XML Document.
-
-*  Parameters:
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new structure is returned. 
-
-*  Notes:
-*     - A NULL pointer is returned if the inherited status value
-*     indicates an error has occurred on entry, or if this function
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlDocument *new;        /* The returned pointer */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlDocument *) astMalloc( sizeof( AstXmlDocument ) );
-
-/* Initialise it. */
-   InitXmlDocument( new, AST__XMLDOC, status );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
-   return new;
-
-}
-
-static AstXmlNamespace *NewNamespace( const char *prefix, const char *uri, int *status ){
-/*
-*  Name:
-*     NewNamespace
-
-*  Purpose:
-*     Create a new XmlNamespace.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlNamespace *NewNamespace( const char *prefix,
-*                                    const char *uri, int *status )
-
-*  Description:
-*     This function creates a new XmlNamespace structure representing an
-*     XML namespace with the given prefix and uri.
-
-*  Parameters:
-*     prefix
-*        Pointer to a null terminated string containing the namespace prefix.
-*     uri
-*        Pointer to a null terminated string containing the associated URI.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new structure is returned. 
-
-*  Notes:
-*     - A NULL pointer is returned if the inherited status value
-*     indicates an error has occurred on entry, or if this function
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlNamespace *new;        /* The returned pointer */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlNamespace *) astMalloc( sizeof( AstXmlNamespace ) );
-
-/* Initialise it. */
-   InitXmlNamespace( new, AST__XMLNAME, prefix, uri, status );
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
-   return new;
-
-}
-
-static AstXmlPrologue *NewPrologue( AstXmlDocument *doc, int *status ){
-/*
-*  Name:
-*     NewPrologue
-
-*  Purpose:
-*     Create a new empty XmlPrologue.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlPrologue *NewPrologue( AstXmlDocument *doc, int *status )
-
-*  Description:
-*     This function creates a new empty XmlPrologue structure representing
-*     an entire prologue.
-
-*  Parameters:
-*     doc
-*        A pointer to the XmlDocument to add the XmlPrologue to, or NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new structure is returned. 
-
-*  Notes:
-*     - A NULL pointer is returned if the inherited status value
-*     indicates an error has occurred on entry, or if this function
-*     should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlPrologue *new;        /* The returned pointer */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Allocate space for the new structure. */
-   new = (AstXmlPrologue *) astMalloc( sizeof( AstXmlPrologue ) );
-
-/* Initialise it. */
-   InitXmlPrologue( new, AST__XMLPRO, status );
-
-/* Set its parent. */
-   ((AstXmlObject *) new )->parent = (AstXmlParent *) doc;
-
-/* If an error occurred, delete the new structure. */
-   if( !astOK ) new = astXmlDelete( new );
-
-/* Return the result. */
-   return new;
-
-}
-
-static char *RemoveEscapes( const char *text, int *status ){
-/*
-*  Name:
-*     RemoveEscapes
-
-*  Purpose:
-*     Replaces entity references by corresponding ascii characters.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     char *RemoveEscapes( const char *text, int *status )
-
-*  Description:
-*     This function produces a dynamic copy of the supplied text in which 
-*     occurrences of XML entity references are replaced by the corresponding 
-*     ASCII text.
-
-*  Parameters:
-*     text
-*        A pointer to a text string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated string containing the required
-*     copy.
-
-*  Notes:
-*     - NULL is returned if this function is called with the global error 
-*     status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   char *d;                  /* Pointer to next returned character */
-   char *result;             /* Returned pointer */
-   char rc;                  /* Replacement character */
-   const char *c;            /* Pointer to next supplied character */
-   int nc;                   /* Number of characters to skip */
-
-/* Initialise */
-   result = NULL;
-   nc = 0;
-
-/* Return if the pointer is NULL or if an error has occurred. */
-   if( !astOK || !text ) return result;
-
-/* Allocate memory to hold a copy of the supplied text. */
-   result = astMalloc( strlen( text ) + 1 );
-
-/* Check the pointer can be used safely. */
-   if( astOK ) {
-
-/* Loop round every character in the supplied text. */
-      c = text - 1;
-      d = result;
-      while( *(++c) ) {
-
-/* If this character marks the start of a entity reference, replace it by 
-   the corresponding ascii character and shuffle the remaining text down. */
-         if( !strncmp( c, "&", 5 ) ) {
-            rc = '&';
-            nc= 4;
-
-         } else if( !strncmp( c, "<", 4 ) ) {
-            rc = '<';
-            nc= 3;
-
-         } else if( !strncmp( c, ">", 4 ) ) {
-            rc = '>';
-            nc= 3;
-
-         } else if( !strncmp( c, "'", 6 ) ) {
-            rc = '\'';
-            nc= 5;
-
-         } else if( !strncmp( c, """, 6 ) ) {
-            rc = '"';
-            nc= 5;
-
-         } else {
-            rc = 0;
-         }
-
-         if( rc ) {
-            *(d++) = rc;
-            c += nc;
-         } else {
-            *(d++) = *c;
-         }
-        
-      }
-
-/* Terminate the returned string. */
-      *d = 0;
-
-/* Reallocate the string to free up any unused space. */
-      result = astRealloc( result, d - result + 1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-#ifdef DEBUG
-static void RemoveObjectFromList( AstXmlObject *obj ){
-/*
-*  Name:
-*     RemoveObjectFromList
-
-*  Purpose:
-*     Removes an XmlObject from a static list of all currently active XmlObjects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     void RemoveObjectFromList( AstXmlObject *obj )
-
-*  Description:
-*     This function removes the supplied pointer from a static list of 
-*     pointers, and decrements the number of elements in the list. This list 
-*     holds pointers to all the XmlObjects which currently exist. If the
-*     supplied pointer is not found in the list, this function returns
-*     without action.
-
-*  Parameters:
-*     this
-*        A pointer to the XmlObject.
-
-*  Notes:
-*     - This function attempts to execute even if an error has already
-*     occurred.
-*/
-
-/* Local Variavles: */
-   int i;
-   int ii;
-
-/* Locate the supplied pointer within the list of pointers to all
-   currently active XmlObjects. */
-   ii = -1;
-   for( i = 0; i < nobj; i++ ){
-      if( existing_objects[ i ]->id == obj->id ) {
-         ii = i;
-         break;
-      }
-   }
-
-/* Check the pointer was found. */
-   if( ii != -1 ) {
-
-/* Shuffle all higher index pointers down one in the list in order to fill 
-   the gap left by removing the supplied pointer. */
-      for( ii++; ii < nobj; ii++ ){
-         existing_objects[ ii - 1 ] = existing_objects[ ii ];
-      }
-
-/* Decrement the number of pointers in the list. */
-      nobj--;
-
-/* Nullify the pointer at the end of the list which is no longer used. */
-      existing_objects[ nobj ] = NULL;
-   }
-}
-#endif
-
-static const char *ResolvePrefix( const char *prefix, AstXmlElement *elem, int *status ){
-/*
-*  Name:
-*     ResolvePrefix
-
-*  Purpose:
-*     Find the URI associated with a namespace prefix.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     const char *ResolvePrefix( const char *prefix, AstXmlElement *elem, int *status)
-
-*  Description:
-*     This function searches the namespaces defined within the supplied
-*     element for a prefix which matches the supplied prefix. If found,
-*     it returns a pointer to the URI string associated with the prefix.
-*     If not found, it calls this function recursively on the parent
-*     element. If there is no parent element, NULL is returned.
-
-*  Parameters:
-*     prefix
-*        Pointer to a string holding the namespace prefix.
-*     elem
-*        The pointer to the XmlElement.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a string holding the URI, or NULL if not found.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlParent *parent;        /* Parent object */
-   AstXmlNamespace *ns;         /* Next namespace */
-   const char *result;          /* Returned pointer */
-   int i;                       /* Loop count */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status, and the supplied element. */
-   if( !astOK || !elem ) return result;
-
-/* Loop round all the namespace definitions in the element. */
-   for( i = 0; i < elem->nnspref; i++ ) {
-      ns = elem->nsprefs[ i ];
-
-/* Compare the namespace prefix with the supplied prefix (case sensitive).
-   Store a pointer to the associated URI if they match, and leave the
-   loop. */
-      if( !strcmp( ns->prefix, prefix ) ) {
-         result = ns->uri;
-         break;
-      }
-   }
-
-/* If no matching namespace was found, attempt to resolve the prefix
-   within the context of the parent element. */
-   if( !result ) {
-      parent = ((AstXmlObject *) elem )->parent;
-      if( astXmlCheckType( parent, AST__XMLELEM ) ) {
-         result = ResolvePrefix( prefix, (AstXmlElement *) parent, status );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strcmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int Ustrcmp( const char *a, const char *b )
-
-*  Description:
-*     Returns 0 if there are no differences between the two strings, and 1 
-*     otherwise. Comparisons are case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strcmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Loop round each character. */
-   while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-#ifdef DEBUG
-int astXmlTrace( int show ){
-/*
-*+
-*  Name:
-*     astXmlTrace
-
-*  Purpose:
-*     List details of XML objects currently in existence.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     int astXmlTrace( int show )
-
-*  Description:
-*     Lists details of XML objects currently in existence. Details are 
-*     written to standard output.
-
-*  Parameters:
-*     show
-*        - 0, the ID values of all currently active XmlObjects are
-*        listed. The objects themselves are unchanged. 
-*        - 1, each object is displayed using astXmlShow unless it has
-*        already been included in the display of a previous object, and then 
-*        annulled. Consequently, this mode is destructive, and none of the 
-*        displayed XmlObjects will be acessable afterwards.
-*        - 2, each object is displayed using astXmlShow whether or not it
-*        has already been included in the display of a previous object.
-*        The objects are left unchanged.
-*        - 3, nothing is written to standard output, but the number of
-*        active XmlObjects is still returned. 
-
-*  Returned Value:
-*     The number of XMLObjects which are in existence on entry to this
-*     function.
-
-*-
-*/
-
-/* Local Variables: */
-   AstXmlObject *root;
-   int i, result, old_status;
-
-   old_status = astStatus;
-   astClearStatus;
-
-   result = nobj;
-
-   if( show == 0 ) {
-      printf( "Current list of active XmlObject identifiers: " );
-      for( i = 0; i < nobj; i++ ) printf( "%d ", existing_objects[ i ]->id );
-      printf("\n");
-
-   } else if( show ==1 ){
-      while( nobj > 0 ) {
-         root = astXmlGetRoot( existing_objects[0] );
-         printf( "ID = %d (type %ld)\n%s\n------------\n", 
-                 root->id, root->type, astXmlShow( root ) );
-         root = astXmlAnnulTree( root );
-      }
-
-   } else if( show == 2 ) {
-      for( i = 0; i < nobj; i++ ) printf( "%d\n%s\n------------\n", 
-                                          existing_objects[ i ]->id,
-                                          astXmlShow(existing_objects[ i ]) );
-      printf("\n");
-   }
-
-   astSetStatus( old_status );
-
-   return result;
-}
-#endif
-
-AstXmlElement *astXmlReadDocument_( AstXmlDocument **doc, 
-                                   int (*is_wanted)( AstXmlElement *, int * ),
-                                   int skip, char (*source)( void *, int * ), 
-                                   void *data, int *status ){
-/*
-*+
-*  Name:
-*     astXmlReadDocument
-
-*  Purpose:
-*     Read and parse an XML document.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlElement *astXmlReadDocument( AstXmlDocument **doc, 
-*                                       int (*is_wanted)( AstXmlElement *, int * ),
-*                                       int skip, char (*source)( void *, int * ), 
-*                                       void *data )
-
-*  Description:
-*     This function reads and parses text from an XML source. The text is
-*     obtained by calling the supplied "source" function, which returns
-*     the next character read from the external source on each invocation.
-*
-*     The reading scheme combines elements of the SAX and DOM schemes in
-*     an attempt to minimise memory requirements (a potential problem with 
-*     DOM) whilst retaining a simple interface for accessing the XML
-*     elements of interest to the client (a potential problem for SAX).
-*
-*     When an element start tag is encountered in the source, the client
-*     is asked to indicate whether the element is of interest. This is
-*     done by calling the supplied "is_wanted" function. If the client
-*     indicates that the element is of interest, its contents are read 
-*     and a pointer to a corresponding XmlElement structure is returned.
-*     Reading stops when the element has been read. If the client
-*     indicates that the element is not of interest, then (if "skip" is
-*     non-zero) the contents of the element are skipped over, and reading 
-*     continues following the element end tag. When the next element is 
-*     encountered the client will again be asked to indicate its interest 
-*     in the element. This continues until either the client indicates that 
-*     an element is of interest, or the end of the source is reached. If
-*     "skip" is zero, then an error is reported if the first element in
-*     the document is not of interest.
-*
-*     The client has an option to reply that an element is not itself of
-*     interest, but may possibly contain interesting elements. In this case, 
-*     the sub-elements within the element are read and checked in the same 
-*     way.
-*
-*     This function returns, and no more characters are read from the
-*     source, once the contents of the first "interesting" element has been 
-*     read.
-*
-*     The function thus returns a pointer to an XmlElement containing the
-*     entire contents of the first interesting element encountered in the 
-*     source. This function can then be invoked again to read further
-*     interesting elements from the source. In this case, the XmlDocument
-*     structure created by the initial invocation (see parameter "doc")
-*     must be supplied, as this indicates the point in the total document 
-*     structure at which the previous "interesting" element was located.
-
-*  Parameters:
-*     doc
-*        Address of a location holding a pointer to an AstXmlDocument
-*        structure. The AstXmlDocument pointer should be supplied as NULL
-*        when invoking this function for the first time on a document
-*        source (i.e. when reading from the beginning of the document).
-*        In this case a new AstXmlDocument structure will be created and a
-*        pointer to it stored at the supplied address. This structure
-*        holds the context which enables subsequent invocations of this 
-*        function to determine the point in the document structure at
-*        which to store any further text read from the source. It also
-*        holds the document prologue, root element, and epilogue.
-*     is_wanted
-*        Pointer to a function which is called to decide if the client is
-*        interested in each element start tag which has just been read.
-*        It has a single argument which is a pointer to the (empty) XmlElement
-*        corresponding to the element start tag which has just been read.
-*        It returns an integer:
-*           -1 : the element is not itself of interest but it may contain
-*                an interesting element, so look through the content and
-*                ask the client again about any elements found inside it.
-*            0 : the element definately contains nothing of interest to
-*                the client. kip its content and continue looking for new 
-*                elements.
-*            1 : the element is definately of interest to the client so
-*                read its contents and return a pointer to it.
-*        If NULL is supplied, a value of "+1" is assumed.
-*     skip
-*        Indicates if any uninteresting elements may proceed the first
-*        element of interest. If zero, then an error is reported if the 
-*        first element read from the source is not of interest to the client.
-*        If non-zero, then any uninteresting elements are simply skipped
-*        over until an interesting element is found or the document ends.
-*     source
-*        Pointer to a function which is called to return the next
-*        character from the source. It has a single argument which is
-*        used to pass any supplied data to it. It should return zero when
-*        the end of the source is reached.
-*     data
-*        Pointer to a structure to pass to the source function. This
-*        structure may contain any data needed by the source function.
-
-*  Returned Value:
-*     A pointer to the first element of interest, or NULL if there are no
-*     interesting elements in the source. The returned element will be a 
-*     descendant of "*doc". For this reason, the returned pointer need not
-*     be annulled explicitly since it will be freed when the XmlDocument 
-*     is annulled. However, if required (e.g. to save memory) it may be 
-*     annulled before the document is annulled by using astXmlRemoveItem to 
-*     remove it from its parent, and then using astXmlAnnul to annul it.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*     - It is assumed that the read commences outside any tag (i.e.
-*     in between tags or within character data).
-*-
-*/
-
-/* Local Variables: */   
-   AstXmlElement *result;
-
-/* Check any supplied pointer is for an XmlDocument. */
-   astXmlCheckDocument( *doc, 1 );
-
-/* Read and parse the source text. Indicate that the element being read
-   *may* contain items of interest to the client. Surround with a mutex
-   since the supplied functions may not be thread-safe. */
-   LOCK_MUTEX1;
-   result = ReadContent( doc, -1, is_wanted, skip, source, data, 0, status );
-   UNLOCK_MUTEX1;
-
-/* Return the result. */
-   return result;
-}
-
-
-static AstXmlElement *ReadContent( AstXmlDocument **doc, int wanted,
-                                   int (*is_wanted)( AstXmlElement *, int * ),
-                                   int skip, char (*source)( void *, int * ), 
-                                   void *data, int depth, int *status ){
-/*
-*  Name:
-*     ReadContent
-
-*  Purpose:
-*     Read and parse an XML document.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xml.h"
-*     AstXmlElement *ReadContent( AstXmlDocument **doc, int wanted,
-*                                 int (*is_wanted)( AstXmlElement *, int * ),
-*                                 int skip, char (*source)( void *, int * ), 
-*                                 void *data, int depth, int *status )
-
-*  Description:
-*     This function reads and parses text from an XML source. The text is
-*     obtained by calling the supplied "source" function, which returns
-*     the next character read from the external source on each invocation.
-*
-*     See astXmlReadDocument for more details.
-
-*  Parameters:
-*     doc
-*        Address of a location holding a pointer to an AstXmlDocument
-*        structure. The AstXmlDocument pointer should be supplied as NULL
-*        when invoking this function for the first time on a document
-*        source (i.e. when reading from the beginning of the document).
-*        In this case a new AstXmlDocument structure will be created and a
-*        pointer to it stored at the supplied address. This structure
-*        holds the context which enables subsequent invocations of this 
-*        function to determine the point in the document structure at
-*        which to store any further text read from the source. It also
-*        holds the document prologue, root element, and epilogue.
-*     wanted
-*        Indicates if the content read from the XML source is of interest
-*        to the client. If a positive value is supplied, all content read 
-*        from the source (up to the end tag which corresponds to the
-*        supplied "parent") is added to the "parent" element (if supplied). 
-*        If zero is supplied, then all content read from the source is 
-*        discarded. If a negative value is supplied, then all content up
-*        to the first element start tag is discarded. When the first
-*        element start tag is encountered, it is passed back to the client
-*        by invoking the supplied "is_wanted" function. If this function
-*        returns a non-zero value, then the contents of the new element
-*        is read (by calling this function recursively) and a pointer to
-*        the new element is returned as the function value (reading then
-*        stops and the function returns). If the "is_wanted" function returns 
-*        zero, then the contents of the new element is skipped over, and 
-*        reading continues until the next element start tag is encountered, 
-*        when the "is_wanted" function is again invoked.
-*     is_wanted
-*        Pointer to a function which is called to decide if the client is
-*        interested in the element start tag which has just been read.
-*        It has a single argument which is a pointer to the (empty) XmlElement
-*        corresponding to the element start tag which has just been read.
-*        It returns an integer:
-*           -1 : the element is not itself of interest but it may contain
-*                an interesting element, so look through the content and
-*                ask the client again about any elements found inside it.
-*            0 : the element definately contains nothing of interest to
-*                the client. kip its content and continue looking for new 
-*                elements.
-*            1 : the element is definately of interest to the client so
-*                read its contents and return a pointer to it.
-*        If NULL is supplied, a value of "+1" is assumed.
-*     skip
-*        Indicates if any uninteresting elements may proceed the first
-*        element of interest. If zero, then an error is reported if the 
-*        first element read from the source is not of interest to the client.
-*        If non-zero, then any uninteresting elements are simply skipped
-*        over until an interesting element is found or the document ends.
-*     source
-*        Pointer to a function which is called to return the next
-*        character from the source. It has a single argument which is
-*        used to pass any supplied data to it. It should return zero when
-*        the end of the source is reached.
-*     data
-*        Pointer to a structure to pass to the source function. This
-*        structure may contain any data needed by the source function.
-*     depth
-*        Depth of nesting (i.e. zero if this function was invoked from
-*        astXmlReadDocument, and a positive value if it was invoked 
-*        recursively from within itself).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the first element of interest, or NULL if there are no
-*     interesting elements in the source. If the first element of
-*     interest has already been found (as indicated by "wanted" being +1)
-*     then NULL is returned. The returned element may be a child of a
-*     parent element containing namespace definitions (which may itself
-*     have a parent, etc). For this reason, the returned pointer should be
-*     freed using astXmlAnnulTree rather than astXmlAnnul.
-
-*  Notes:
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*     - It is assumed that the read commences outside any tag (i.e.
-*     in between tags or within character data).
-*/
-
-/* Local Variables; */
-   AstXmlElement *answer;       /* Result of reading a sub-element */
-   AstXmlElement *parent;       /* Pointer to current parent element */
-   AstXmlElement *elem;         /* A new element to be read */
-   AstXmlElement *result;       /* The returned pointer */
-   char *cc;                    /* Pointer to next character */
-   char *msg;                   /* Pointer to message buffer */
-   char *text1;                 /* Pointer to dynamic string */
-   char *text2;                 /* Pointer to another dynamic string */
-   char *text3;                 /* Pointer to another dynamic string */
-   char *text4;                 /* Pointer to another dynamic string */
-   char c;                      /* Current character read from source */
-   char lc2;                    /* Last but one character read */
-   char lc;                     /* Last character read */
-   char quoted;                 /* Character which opened current quote */
-   int nc1;                     /* No. of characters stored in text1 */
-   int nc2;                     /* No. of characters stored in text2 */
-   int nc3;                     /* No. of characters stored in text2 */
-   int ncmsg;                   /* Length of "msg" */
-   int newwanted;               /* Is the new element wanted? */
-   int state;                   /* Current action being performed */
-   int prolog_ok;               /* OK for source to start with a prolog? */
-   int where;                   /* Where to add the item within the document */
-
-/* Initialise */
-   result = NULL;
-   elem = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return result;
-
-/* If no XmlDocument was supplied, assume we are commencing to read a new
-   document from the begining. Create a new XmlDocument to store the
-   prologue, root element and epilogue, together with a pointer to the
-   "current" element, i.e. the element whose content is currently being
-   read. Also, since we have not yet asked the client if it is interested
-   in anything, ignore the supplied "wanted" value and use -1 to ensure
-   that we ask the client when the first element start tag is encountered. */
-   if( !*doc ){
-      prolog_ok = 1;
-      *doc = NewDocument( status );      
-      wanted = -1;
-   } else {
-      prolog_ok = 0;
-   }
-
-/* Any content read from the source (except for prologue and epilogue)
-   will be placed into the "parent" element. A pointer to this element is
-   stored in the XmlDocument structure. The parent element will always be
-   a descendant of the root element, or the root element itself. */
-   parent = (*doc)->current;
-
-/* If the supplied parent has already been completed (typically because
-   it was read from an empty element tag), then just return without
-   action. */
-   if( parent && parent->complete ) {
-
-/* If an error has occurred, or if this invocation of ReadContent was 
-   made recursively (rather than by the client), or if we have something
-   to return, return. */
-      if( !astOK || depth > 0 || result ) {
-         return result;
-
-/* Otherwise, returning would result in returning a null pointer to the
-   client even though the end of the document may not have been reached.
-   Revert to state 0 and search for further interesting elements. */
-      } else {
-         if( parent != (*doc)->root ) {
-            (*doc)->current = (AstXmlElement *) ( (AstXmlObject *) parent )->parent;
-         } else {
-            (*doc)->current = NULL;
-         }
-         parent = (*doc)->current;
-         state = 0;
-      }
-   }
-
-/* Initialise the previous two characters read. */
-   lc = 0;
-   lc2 = 0;
-
-/* Initialise pointer to dynamically allocated strings. */
-   text1 = NULL;
-   text2 = NULL;
-   text3 = NULL;
-   msg = NULL;
-
-/* We are not in a quote. */
-   quoted = 0;
-
-/* Initialise the "state" variable which indicates what we are currently
-   looking for. */
-   state = 0;
-
-/* Loop round reading characters from the source. */
-   while( 1 ) {
-      c = (*source)( data, status );
-
-/* Leave the loop if an error occurred whilst reading the character. */
-      if( !astOK ) break;
-
-/* If a parent element has been supplied, (i.e. if we are currently
-   reading the content of an element), or if we are not in state zero, 
-   report an error and leave the loop if the end of the text has been 
-   reached. If no parent was supplied, just leave the loop. */
-      if( !c ) {
-         if( parent ) {   
-            astError( AST__XMLWF, "astRead(XmlChan): End of XML input text "
-                      "reached whilst reading the content of element %s.", status,
-                       astXmlGetTag( parent, 1 ) );
-
-         } else if( state > 1 ) {   
-            if( msg ) {
-               astError( AST__XMLWF, "astRead(XmlChan): End of XML input text "
-                         "reached whilst reading the document epilogue "
-                         "(\"%s\").", status, msg );
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): End of XML input text "
-                         "reached whilst reading the document epilogue." , status);
-            }
-         } 
-         break;
-      }
-
-/* Save text which is not character data for use in error messages. */
-      if( state < 2 ) {
-         if( msg ) msg = astFree( msg );
-      } else {
-         msg = AppendChar( msg, &ncmsg, c, status );
-      }
-
-/* State 0: Use the first character to decide what sort of content item
-   follows (character data or a tag of some form). */
-      if( state == 0 ) {
-         if( c != '<' ) {
-            state = 1;
-            text1 = AppendChar( text1, &nc1, c, status );
-         } else {
-            msg = AppendChar( msg, &ncmsg, '<', status );
-            state = 2;
-         }
-
-/* State 1: We are reading character data. The character data ends at the
-   first occurrence of "<", at which point the character data is added to
-   the parent if required and we continue to state 2.*/
-      } else if( state == 1 ) {
-         if( c != '<' ) {
-            text1 = AppendChar( text1, &nc1, c, status );
-         } else {
-            msg = AppendChar( msg, &ncmsg, '<', status );
-            if( text1 ){
-
-/* If we have a parent element, just add it to the element. */
-               if( parent ) {
-                  if( wanted > 0 ) {
-                     text4 = RemoveEscapes( text1, status );
-                     astXmlAddCharData( (AstXmlParent *) parent, 0, text4 );
-                     text4 = astFree( text4 );
-
-
-/* If we are not allowed to skip over non-blank content, report an
-   error if the text is not blank. */
-                  } else if( !skip ) {
-                     cc = text1 - 1;
-                     while( *(++cc) ) {
-                        if( !isspace( *cc ) ) {
-                           if( parent ) {
-                              astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                                        "the input data \"%s\" within element %s.", status, 
-                                        text1, astXmlGetTag( parent, 1 ) );
-                           } else {
-                              astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                                        "the input data: \"%s\".", status, text1 );
-                           }
-                           break;
-                        }
-                     }
-                  }
-
-/* Otherwise, add it to the document prologue or epilogue. */
-               } else {
-                  if( (*doc)->root ) {
-                     where = 3;
-                  } else if( (*doc)->prolog && (*doc)->prolog->dtdec ){
-                     where = 2;
-                  } else {
-                     where = 1;
-                  }
-
-                  text4 = RemoveEscapes( text1, status );
-                  astXmlAddCharData( (AstXmlParent *) *doc, where, text4 );
-                  text4 = astFree( text4 );
-               }
-
-               text1 = astFree( text1 );
-            }
-            state = 2;
-         }
-
-/* State 2: We are using the character following a "<" to determine what
-   type of tag is commencing. */
-      } else if( state == 2 ) {
-
-/* If the character is a ">", report an error. */
-         if( c == '>' ) {
-            if( parent ) {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"<>\" "
-                         "encountered within element %s.", status, astXmlGetTag( parent, 1 ) );
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"<>\" "
-                         "encountered." , status);
-            }
-            break;
-
-/* If the character is a "?", this must be a PI tag. */
-         } else if( c == '?' ) {
-            state = 3;
-
-/* If the character is a "!", it must be a comment or a CDATA section 
-   or a DTD. */
-         } else if( c == '!' ) {
-            state = 4;
-
-/* If the character is a "/", it must be an element end tag. */
-         } else if( c == '/' ) {
-            state = 5;
-
-/* Otherwise, this must be an element start tag. Append the character
-   to "text1". */
-         } else {
-            state = 6;
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 3: We are reading the initial text following the opening "<?" string 
-   of a PI tag. The characters between the initial "<?" string and the first 
-   space or closing "?>" string is the target text. */
-      } else if( state == 3 ) {
-         if( c == '>' && lc == '?' ) {
-            if( text1 ) text1[ --nc1 ] = 0;
-            state = 100;            
-         } else if( isspace( c ) ) {
-            state = 7;
-         } else {
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 4: We are using the characters following the opening "<!" text to
-   determine if the tag is a comment, DTD or CDATA section. */
-      } else if( state == 4 ) {
-         if( c == '-' ) {
-            state = 8;
-         } else if( c == 'D' ){
-            state = 16;
-            text1 = astAppendString( text1, &nc1, "<!D" );
-         } else if( c == '[' ){
-            state = 9;
-            text1 = astAppendString( text1, &nc1, "<![" );
-         } else {
-            if( parent ) {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"<!%c...\" encountered within "
-                         "element %s.", status, c, astXmlGetTag( parent, 1 ) );
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"<!%c...\" encountered.", status, c );
-            }
-            break;
-         }
-
-/* State 5: We are looking for the end of an element end tag. */
-      } else if( state == 5 ) {
-         if( c == '>' ) {
-            state = 101;
-         } else {
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 6: We are looking for the (prefix:)name combination at the start of 
-   an element start tag. */
-      } else if( state == 6 ) {
-         if( c == '>' ) {
-            state = ( lc != '/' ) ? 102 : 103;
-         } else if( isspace( c ) ) {
-            state = 104;
-         } else if( c != '/' ){
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 7: We are reading the remaining text in a PI tag following the target
-   text. */
-      } else if( state == 7 ) {
-         if( c == '>' && lc == '?' ) {
-            if( text2 ) text2[ --nc2 ] = 0;
-            state = 100;
-         } else if( text2 || !isspace( c ) ) {
-            text2 = AppendChar( text2, &nc2, c, status );
-         }
-
-/* State 8: We are looking for the start of the text within a comment tag. */
-      } else if( state == 8 ) {
-         if( c == '-' ) {
-            state = 10;
-         } else {
-            if( parent ) {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"<!-%c...\" encountered within "
-                         "element %s.", status, c, astXmlGetTag( parent, 1 ) );
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"<!-%c...\" encountered.", status, c );
-            }
-            break;
-         }
-
-/* State 9: We are looking for the start of the text within a CDATA tag. */
-      } else if( state == 9 ) {
-         if( c == '[' ) {
-            if( !strcmp( text1, "<![CDATA" ) ) {
-               state = 11;
-               text1 = astFree( text1 );
-            } else {
-               if( parent ) {
-                  astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                            "starting with \"%s%c...\" encountered within "
-                            "element %s.", status, text1, c, astXmlGetTag( parent, 1 )  );
-               } else {
-                  astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                            "starting with \"%s%c...\" encountered.", status, text1, c );
-               }
-               text1 = astFree( text1 );
-               break;
-            }
-
-         } else if( nc1 < 10 ) {
-            text1 = AppendChar( text1, &nc1, c, status );
-
-         } else {  
-            if( parent ) {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"%s%c...\" encountered within "
-                         "element %s.", status, text1, c, astXmlGetTag( parent, 1 )  );
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"%s%c...\" encountered.", status, text1, c );
-            }
-            text1 = astFree( text1 );
-            break;
-         }
-
-/* State 10: We are reading the remaining text in a comment tag. When the end 
-   ">" is reached, check the previous 2 characters are "--" and then terminate
-   the text1 string in order to remove these two characters from the comment
-   text.  */
-      } else if( state == 10 ) {
-         if( c == '>' && lc == '-' && lc2 == '-' ) {
-            text1[ nc1 - 2 ] = 0;
-            state = 105;
-         } else {
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 11: We are reading the remaining text in a CDATA tag. */
-      } else if( state == 11 ) {
-         if( c == '>' && lc == ']' && lc2 == ']' ) {
-            text1[ nc1 - 2 ] = 0;
-            state = 106;
-         } else {
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 12: We are looking for an equals sign marking the end of an 
-   attribute name within an element start tag. */
-      } else if( state == 12 ) {
-         if( c == '=' ) {
-            state = 13;
-
-         } else if( c == '>' ) {
-            if( text1 ) {
-               if( parent ) {
-                  astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                            " \"%s...\" encountered within element %s.", status, msg, 
-                            astXmlGetTag( parent, 1 )  );
-               } else {
-                  astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s...\" "
-                            "encountered.", status, msg );
-               }
-               break;
-            } else {
-               if( lc == '/' ) {
-                  state = 108;
-               } else {
-                  state = 200;
-               }
-            }
-
-         } else if( text1 || !isspace( c ) ) {
-            if( c != '/' ) text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 13: We are looking for a '"' or ''' marking the start of an attribute
-   value within an element start tag. */
-      } else if( state == 13 ) {
-         if( c == '"' ) {
-            state = 14;
-
-         } else if( c == '\'' ) {
-            state = 15;
-
-         } else if( c == '>' ) {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal value for attribute "
-                      "\"%s\" in XML tag \"%s...\".", status, text1, msg );
-            break;
-         }
-
-/* State 14: We are looking for a '"' marking the end of an attribute value
-   within an element start tag. */
-      } else if( state == 14 ) {
-         if( c == '"' ) {
-            state = 107;
-
-         } else if( c == '>' ) {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal value for attribute "
-                      "\"%s\" in XML tag \"%s...\".", status, text1, msg );
-            break;
-
-         } else {
-            text2 = AppendChar( text2, &nc2, c, status );
-         }
-
-/* State 15: We are looking for a ''' marking the end of an attribute value
-   within an element start tag. */
-      } else if( state == 15 ) {
-         if( c == '\'' ) {
-            state = 107;
-
-         } else if( c == '>' ) {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal value for attribute "
-                      "\"%s\" in XML tag \"%s...\".", status, text1, msg );
-            break;
-
-         } else {
-            text2 = AppendChar( text2, &nc2, c, status );
-         }
-
-/* State 16: We are looking for the end of a DOCTYPE string. */
-      } else if( state == 16 ) {
-         if( isspace( c ) ) {
-            if( !strcmp( text1, "<!DOCTYPE" ) ) {
-               state = 17;
-               text1 = astFree( text1 );
-            } else {
-               if( parent ) {
-                  astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                            "starting with \"%s%c...\" encountered within "
-                            "element %s.", status, text1, c, astXmlGetTag( parent, 1 )  );
-               } else {
-                  astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                            "starting with \"%s%c...\" encountered.", status, text1, c );
-               }
-               text1 = astFree( text1 );
-               break;
-            }
-
-         } else if( nc1 < 15 ) {
-            text1 = AppendChar( text1, &nc1, c, status );
-
-         } else {  
-            if( parent ) {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"%s%c...\" encountered within "
-                         "element %s.", status, text1, c, astXmlGetTag( parent, 1 )  );
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag "
-                         "starting with \"%s%c...\" encountered.", status, text1, c );
-            }
-            text1 = astFree( text1 );
-            break;
-         }
-
-/* State 17: We are looking for the start of a DOCTYPE name string. */
-      } else if( state == 17 ) {
-         if( !isspace( c ) ) {
-            text1 = AppendChar( text1, &nc1, c, status );
-            state = 18;
-         }
-
-/* State 18: We are looking for the end of a DOCTYPE name string. */
-      } else if( state == 18 ) {
-         if( isspace( c ) ) {
-            state = 19;
-         } else if( c == '>' ) {
-            state = 109;
-         } else {
-            text1 = AppendChar( text1, &nc1, c, status );
-         }
-
-/* State 19: We are looking for the start of a string following a DOCTYPE
-   name string. */
-      } else if( state == 19 ) {
-         if( !isspace( c ) ) {
-            if( c == '[' ) {
-               state = 20;
-            } else if( c == '>' ) {
-               state = 109;
-            } else {
-               state = 21;
-               text2 = AppendChar( text2, &nc2, c, status );
-            }
-         }
-
-/* State 20: We are looking for the "]" marking the end of the internal
-   markup of a DOCTYPE element. Avoid the contents of quoted strings (such
-   as #FIXED attribute values). */
-      } else if( state == 20 ) {
-         text3 = AppendChar( text3, &nc3, c, status );
-         if( c == '\'' ) {
-            if( quoted == '\'' ) {
-               quoted = 0;
-            } else if( !quoted ) {
-               quoted = '\'';
-            }
-
-         } else if( c == '"' ) {
-            if( quoted == '"' ) {
-               quoted = 0;
-            } else if( !quoted ) {
-               quoted = '"';
-            }
-
-         } else if( !quoted && c == ']' ) {
-            text3[ --nc3 ] = 0;
-            state = 22;
-         }
-
-/* State 21: We are looking for the start of a DOCTYPE internal section. */
-      } else if( state == 21 ) {
-         if( c == '[' ) {
-            state = 20;
-         } else if( c == '>' ) {
-            state = 109;
-         } else {
-            text2 = AppendChar( text2, &nc2, c, status );
-         }
-
-/* State 22: We are looking for the ">" at the end of a DOCTYPE. */
-      } else if( state == 22 ) {
-         if( !isspace( c ) ) {
-            if( c == '>' ) {
-               state = 109;
-            } else {
-               astError( AST__XMLWF, "astRead(XmlChan): Extra text found "
-                         "at end of XML DOCTYPE tag \"%s\".", status, msg );
-            }
-         }
-
-      } else {
-         astError( AST__INTER, "ReadContent(xml): Illegal state (%d) encountered "
-                   "(AST internal programming error).", status, state );
-      }
-
-/* The following states perform actions consequent on the decisons made
-   above, but which must be performed before reading the next character. */
-
-/* In most cases there will be no actions to perform. Therefore check for
-   this first (to avoid the time spent doing all the following usually 
-   irrelevant checks). */
-      if( state < 23 ) {
-
-/* State 100: We have just reached the end of a PI tag. Create a new XmlPI and 
-   store it in the parent (if required). */
-      } else if( state == 100 ) {
-         if( text1 ){
-
-/* First deal with XML declaration PI's. These must be the first item in
-   the source. */
-            if( !strcmp( text1, "xml" ) ) {
-               if( (*doc)->root || (*doc)->prolog || (*doc)->nepi > 0 ) {
-                  astError( AST__XMLWF, "astRead(XmlChan): An XML "
-                            "declaration \"%s\" was encountered within the "
-                            "body of the document.", status, msg );
-               } else { 
-                  astXmlSetXmlDec( *doc, text2 );
-               }
-
-/* Now deal with other PI's. */
-            } else {
-
-/* If we have a parent element, just add it to the element. */
-               if( parent ) {
-                  if( wanted > 0 ) {
-                     astXmlAddPI( (AstXmlParent *) parent, 0, text1, text2 );
-                  } else if( !skip ) {
-                     if( parent ) {
-                        astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                                  "the input data \"%s\" within element %s.", status, 
-                                  msg, astXmlGetTag( parent, 1 ) );
-                     } else {
-                        astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                                  "the input data: \"%s\".", status, msg );
-                     }
-                     break;
-                  }
-
-/* Otherwise, add it to the document prologue or epilogue. */
-               } else {
-                  if( (*doc)->root ) {
-                     where = 3;
-                  } else if( (*doc)->prolog->dtdec ){
-                     where = 2;
-                  } else {
-                     where = 1;
-                  }
-                  astXmlAddPI( (AstXmlParent *) *doc, where, text1, text2 );
-
-               }
-            }
-            text1 = astFree( text1 );
-            if( text2 ) text2 = astFree( text2 );
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-         state = 0;
-
-/* State 101: We have just reached the end of an element end tag. Check that 
-   the (prefix:)name is legal, and matches that of the current parent,
-   re-instate the parent's parent as the current element in the document, 
-   and leave the loop if appropriate. */
-      } else if( state == 101 ) {
-         if( text1 ){
-            CheckPrefName( text1, "element", "astRead(XmlChan)", status );
-            if( parent ) {
-               if( MatchName( parent, text1, status ) ) {
-                  parent->complete = 1;
-                  if( parent != (*doc)->root ) {
-                     (*doc)->current = (AstXmlElement *) ( (AstXmlObject *) parent )->parent;
-                  } else {
-                     (*doc)->current = NULL;
-                  }
-               } else {
-                  astError( AST__XMLWF, "astRead(XmlChan): Start tag \"%s\" "
-                            "closed by end tag \"%s\".", status, astXmlGetTag( parent, 1 ),
-                            msg );
-               }
-
-            } else {
-               (*doc)->current = NULL;
-               astError( AST__XMLWF, "astRead(XmlChan): Unmatched end tag "
-                         "\"%s\" encountered.", status, msg );
-            }
-
-            text1 = astFree( text1 );
-           
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-         }
-
-/* If an error has occurred, or if this invocation of ReadContent was 
-   made recursively (rather tnan by the client), or if we have something
-   to return, break out of the loop. */
-         if( !astOK || depth > 0 || result ) {
-            break;
-
-/* Otherwise, breaking would result in returning a null pointer to the
-   client even though the end of the document may not have been reached.
-   Revert to state 0 and search for further intersting elements. */
-         } else {
-            parent = (*doc)->current;
-            state = 0;
-         }
-
-/* State 102: We have just got the (prefix:)name for an element start tag, and 
-   the start tag contains no attributes, etc. Create a new XmlElement, adding 
-   it to the supplied parent, and then proceed to state 200 to read the 
-   content of the element. */
-      } else if( state == 102 ) {
-         if( text1 ){
-            elem = astXmlAddElement( parent, text1, NULL );
-            text1 = astFree( text1 );
-            state = 200;
-
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-
-/* State 103: We have just got the (prefix:)name for an empty element tag, and
-   the tag does not contain further attributes, etc. Create a new XmlElement 
-   and store it in the container (if any). Indicate that there is no
-   content to read, and then go on to state 200. */
-      } else if( state == 103 ) {
-         if( text1 ){
-            elem = astXmlAddElement( parent, text1, NULL );
-            elem->complete = 1;
-            text1 = astFree( text1 );
-            state = 200;
-
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-
-/* State 104: We have just got the (prefix:)name for an element start tag, but 
-   the start tag may contain further attributes, etc. Create a new XmlElement 
-   and store it in the container (if any). Then go to state 12 in which we 
-   look for further attributes, etc. */
-      } else if( state == 104 ) {
-         if( text1 ){
-            elem = astXmlAddElement( parent, text1, NULL );
-            text1 = astFree( text1 );
-            state = 12;
-
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-
-/* State 105: We have just reached the end of a comment tag. Create a new 
-   XmlComment and  store it in the parent. */
-      } else if( state == 105 ) {
-         if( text1 ){
-
-/* If we have a parent element, just add it to the element. */
-            if( parent ) {
-               if( wanted > 0 ) {
-                  astXmlAddComment( (AstXmlParent *) parent, 0, text1 );
-               } else if( !skip ) {
-                  if( parent ) {
-                     astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                               "the input data \"%s\" within element %s.", status, 
-                               msg, astXmlGetTag( parent, 1 ) );
-                  } else {
-                     astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                               "the input data: \"%s\".", status, msg );
-                  }
-                  break;
-               }
-
-/* Otherwise, add it to the document prologue or epilogue. */
-            } else {
-               if( (*doc)->root ) {
-                  where = 3;
-               } else if( (*doc)->prolog->dtdec ){
-                  where = 2;
-               } else {
-                  where = 1;
-               }
-               astXmlAddComment( (AstXmlParent *) *doc, where, text1 );
-            }
-
-            text1 = astFree( text1 );
-
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-         state = 0;
-
-/* State 106: We have just reached the end of a CDATA tag. Create a new
-   XmlCDATASection and store it in the container (if any). */
-      } else if( state == 106 ) {
-         if( text1 ){
-            if( parent && wanted > 0 ) {
-               astXmlAddCDataSection( parent, text1 );
-            } else if( !skip ) {
-               if( parent ) {
-                  astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                            "the input data \"%s\" within element %s.", status, 
-                            msg, astXmlGetTag( parent, 1 ) );
-               } else {
-                  astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                            "the input data: \"%s\".", status, msg );
-               }
-               break;
-            }
-            text1 = astFree( text1 );
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-         state = 0;
-
-/* State 107: We have just reached the end of an attribute or namespace 
-   setting. Create a new object and store it in the element created
-   earlier. */
-      } else if( state == 107 ) {
-         if( text1 ){
-            if( !elem ) {
-               astError( AST__INTER, "ReadContent(xml): Container lost at state "
-                         "107 (AST internal programming error).", status );
-               break;   
-            } 
-
-            if( !strcmp( text1, "xmlns" ) ) {
-               astXmlAddURI( elem, NULL, text2 );
-
-            } else if( !strncmp( text1, "xmlns:", 6 ) ) {
-               astXmlAddURI( elem, text1+6, text2 );
-
-            } else {
-               text4 = RemoveEscapes( text2, status );
-               astXmlAddAttr( elem, text1, text4, NULL );
-               text4 = astFree( text4 );
-            }
-
-            text1 = astFree( text1 );
-            text2 = astFree( text2 );
-
-         } else {
-            astError( AST__XMLWF, "astRead(XmlChan): Illegal XML tag \"%s\" "
-                      "encountered.", status, msg );
-            break;
-         }
-         state = 12;
-
-/* State 108: We have just reached the end of an empty element tag to which 
-   we have been adding attributes, etc. */
-      } else if( state == 108 ) {
-         if( elem ) {
-            elem->complete = 1;
-            state = 200;
-         } else {
-            astError( AST__INTER, "Parse(xml): No container in state 108 "
-                      "(AST internal programming error).", status );
-            break;
-         }
-
-/* State 109: We have just reached the end of a DOCTYPE tag. */
-      } else if( state == 109 ) {
-
-         if( (*doc)->root ){
-            astError( AST__XMLWF, "astRead(XmlChan): An DOCTYPE tag "
-                      "\"%s\" was encountered within the body of the "
-                      "document.", status, msg );
-            break;
-
-         } else if( (*doc)->prolog->dtdec ){
-            astError( AST__XMLWF, "astRead(XmlChan): Multiple DOCTYPE tags "
-                      "encountered." , status);
-            break;
-
-         } else {
-            astXmlSetDTDec( *doc, text1, text2, text3 );
-            text1 = astFree( text1 );
-            text2 = astFree( text2 );
-            text3 = astFree( text3 );
-            state = 0;
-         }
-
-      } else if( state != 200 ) {
-         astError( AST__INTER, "ReadContent(xml): Illegal state (%d) encountered "
-                   "(AST internal programming error).", status, state );
-      }
-
-
-
-/* State 200: We now have now read a complete element start tag and have
-   a corresponding XmlElement ("elem"), with all attributes and namespaces,
-   etc (but no content). Call the "is_wanted" function to see if the client 
-   is interested in the element. */
-      if( state == 200 ) {
-
-/* If this element is found at the root level of the document, store a 
-   pointer to it as the root element. Report an error if there is already
-   a root element. */
-         if( !parent ) {
-            if( (*doc)->root ){
-               if( astOK ) {
-                  astError( AST__XMLWF, "astRead(XmlChan): Multiple root "
-                            "elements encountered." , status);
-                  elem = astXmlDelete( elem );
-               }
-               break;
-            } else {
-               (*doc)->root = elem;
-               ((AstXmlObject *) elem )->parent = (AstXmlParent *) (*doc);
-            }
-         }
-
-/* If we do not already know, ask the caller if it is interested in this new 
-   element. If no "is_wanted" function was supplied, assume all elements
-   are interesting. */
-         if( wanted == -1 ) {
-            newwanted = is_wanted ? (*is_wanted)( elem, status ) : 1;
-         } else {
-            newwanted = wanted;
-         }
-
-/* If it is not interested, report an error if skip is zero. */
-         if( newwanted != 1 && !skip ) {
-            if( parent ) {
-               astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                         "the input data \"%s\" within element %s.", status, 
-                         msg, astXmlGetTag( parent, 1 ) );
-            } else {
-               astError( AST__BADIN, "astRead(XmlChan): Cannot interpret "
-                         "the input data: \"%s\".", status, msg );
-            }
-            break;
-         }
-
-/* Make the new element the "current" element in the document. */
-         (*doc)->current = elem;         
-
-/* Read the contents of the new element from the source. If the client is
-   interested in the element, the read contents will be added to the
-   element, otherwise they will be discarded after being read. */
-         answer = ReadContent( doc, newwanted, is_wanted, skip, source, 
-                               data, depth + 1, status );
-
-/* If the first interesting element was found inside "elem", then 
-   return it. If "elem" is not interesting and did not contain anything
-   of interest, delete it and return the initialised NULL pointer. */
-         if( newwanted < 0 ) {
-            if( answer ) {
-               result = answer;
-            } else {
-               elem = astXmlDelete( elem );
-            }
-
-/* If the elem is of no interest, delete it and return the initialised
-   NULL pointer. */
-         } else if( newwanted == 0 ) {
-            elem = astXmlDelete( elem );
-
-/* Otherwise, "elem" itself is definitely of interest. If "elem" is
-   the first item of interest, return it. */
-         } else if( wanted < 0 ) {
-            result = elem;
-         }               
-
-/* If we have an answer to return, leave the loop, otherwise re-instate the
-   original current element in the document and continue to read any text 
-   following the element. */
-         if( result ) {
-            break;
-         } else {
-            (*doc)->current = parent;
-            state = 0;
-         }
-
-      } if( state > 22 ) {
-         astError( AST__INTER, "ReadContent(xml): Illegal state (%d) encountered "
-                   "(AST internal programming error).", status, state );
-      }
-
-/* Remember the previous two character */
-      lc2 = lc;
-      lc = c;
-   }
-
-/* Free any dynamic strings */
-   text1 = astFree( text1 );
-   text2 = astFree( text2 );
-   text3 = astFree( text3 );
-   if( msg ) msg = astFree( msg );
-
-/* Delete the returned object if an error occurred. */
-   if( !astOK ) result = astXmlDelete( result );
-
-/* Return the result. */
-   return result;
-}
-
-
-
diff --git a/ast-5.3-1/xml.h b/ast-5.3-1/xml.h
deleted file mode 100644
index e76cd15..0000000
--- a/ast-5.3-1/xml.h
+++ /dev/null
@@ -1,392 +0,0 @@
-#if !defined( XML_INCLUDED ) /* Include this file only once */
-#define XML_INCLUDED
-/*
-*+
-*  Name:
-*     xml.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the AST xml module
-
-*  Invocation:
-*     #include "xml.h"
-
-*  Description:
-*     This include file defines the interface to the internal xml module 
-*     used by the AST library and provides the type definitions, function 
-*     prototypes and macros, etc. needed to use this module.
-
-*  Inheritance:
-*     The xml module is not a class and does not inherit.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     23-OCT-2003 (DSB):
-*        Original version.
-*     12-JAN-2004 (DSB):
-*        Major revisions.
-*/
-
-
-
-/* Constant Values. */
-/* ================ */
-
-/* These constants are used as identifiers for the different classes of
-   XML object defined in this file. They are purposefully obscure to reduce 
-   the possibility of random integer values being incorrectly interpreted
-   as valid XML types */
-#define AST__XMLBAD    0            /* Id for an uninitialised XmlObject */
-#define AST__XMLOBJECT 198263577    /* Id for XmlObject structure */
-#define AST__XMLELEM   182874779    /* Id for XmlElement structure */
-#define AST__XMLATTR   837746634    /* Id for XmlAttribute structure */
-#define AST__XMLCDATA  293854662    /* Id for XmlCDdataSection structure */
-#define AST__XMLCOM    748737648    /* Id for XmlComment structure */
-#define AST__XMLPI     983763553    /* Id for XmlPI structure */
-#define AST__XMLNAME   236756469    /* Id for XmlNamespace structure */
-#define AST__XMLDOC    356274395    /* Id for XmlDocument structure */
-#define AST__XMLPRO    743682474    /* Id for XmlPrologue structure */
-#define AST__XMLDEC    987546328    /* Id for XmlDeclPI structure */
-#define AST__XMLDTD    874673747    /* Id for XmlDTDec structure */
-#define AST__XMLWHITE  675849952    /* Id for XmlWhite structure */
-#define AST__XMLBLACK  347657863    /* Id for XmlBlack structure */
-
-/* The following constants refer to "interfaces", not "classes". */
-
-#define AST__XMLCHAR   456739289    /* Id for XmlCharData structure */
-#define AST__XMLCONT   673882993    /* Id for XmlContentItem structure */
-#define AST__XMLMISC   358768954    /* Id for XmlMiscItem structure */
-#define AST__XMLPAR    874366235    /* Id for XmlParent structure */
-
-/* Define constants used to size global arrays in this module. */
-#define AST__XML_GETTAG_BUFF_LEN 200
-
-/* Type Definitions. */
-/* ================= */
-
-/* Pre-define types so they can be used within structure definitions. */
-typedef struct AstXmlObject AstXmlObject;
-typedef struct AstXmlAttribute AstXmlAttribute;
-typedef struct AstXmlNamespace AstXmlNamespace;
-typedef struct AstXmlElement AstXmlElement;
-typedef struct AstXmlBlack AstXmlBlack;
-typedef struct AstXmlWhite AstXmlWhite;
-typedef struct AstXmlCDataSection AstXmlCDataSection;
-typedef struct AstXmlComment AstXmlComment;
-typedef struct AstXmlPI AstXmlPI;
-typedef struct AstXmlDocument AstXmlDocument;
-typedef struct AstXmlPrologue AstXmlPrologue;
-typedef struct AstXmlDeclPI AstXmlDeclPI;
-typedef struct AstXmlDTDec AstXmlDTDec;
-
-/* The following data types define "interfaces". That is each data type
-   corresponds to a subset of the above classes. */
-
-/* Marks a class as "character data" */
-typedef AstXmlObject AstXmlCharData;
-
-/* Marks a class as a "content item" */
-typedef AstXmlObject AstXmlContentItem;
-
-/* Marks a class as a "miscalleneous item" */
-typedef AstXmlObject AstXmlMiscItem;
-
-/* Marks a class as being able to own a child */
-typedef AstXmlObject AstXmlParent;
-
-/* XmlObject structure. */
-/* -------------------- */
-/* Contains data common to all other structures */
-struct AstXmlObject {
-   AstXmlParent *parent;        /* The parent which contains this XmlObject */
-   long int type;               /* An ID giving the type of structure */
-   int id;                      /* A unique id for this object. */
-};
-
-/* XmlAttribute structure. */
-/* ----------------------- */
-/* Describes an XML attribute */
-struct AstXmlAttribute {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *name;                /* The name of the attribute */
-   char *value;               /* Attribute value */
-   char *prefix;              /* Namespace prefix for this attribute */
-};
-
-/* XmlNamespace structure. */
-/* ----------------------- */
-/* Describes an XML namespace definition */
-struct AstXmlNamespace {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *prefix;              /* Namespace prefix */
-   char *uri;                 /* Namespace URI */
-};
-
-/* XmlElement structure. */
-/* --------------------- */
-/* Describes an XML element */
-struct AstXmlElement {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *name;                /* The type (name) of the element */
-   AstXmlAttribute **attrs;   /* Ptr. to list of attributes of the element */
-   int nattr;                 /* Number of attributes in the above list */
-   AstXmlContentItem **items; /* Ptr. to list of items in the element's content */
-   int nitem;                 /* Number of items in above list */
-   char *defns;               /* Default Namespace URI for element content */
-   char *prefix;              /* Namespace prefix for this element */
-   AstXmlNamespace **nsprefs; /* Ptr. to list of new Namespaces defined by this element */
-   int nnspref;               /* Number of Namespaces in above list */
-   int complete;              /* Have the contents of the element been read? */
-};
-
-/* XmlBlack structure. */
-/* ---------------------- */
-/* Describes character data containing at least one non-blank character. */
-struct AstXmlBlack {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *text;                /* The character data */
-};
-
-/* XmlWhite structure. */
-/* ------------------- */
-/* Describes character data containing no one non-blank characters. */
-struct AstXmlWhite {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *text;                /* The white character data */
-};
-
-/* XmlCDataSection structure. */
-/* ----------------------- */
-/* Describes an XML CDATA section */
-struct AstXmlCDataSection {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *text;                /* The text of the cdata section */
-};
-
-/* XmlComment structure. */
-/* --------------------- */
-/* Describes an XML CDATA section */
-struct AstXmlComment {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *text;                /* The text of the comment */
-};
-
-/* XmlPI structure. */
-/* ---------------- */
-/* Describes an XML processing instruction */
-struct AstXmlPI {
-   AstXmlObject obj;          /* General information for this XmlObject */
-   char *target;              /* The target of the processing instruction */
-   char *text;                /* The text of the processing instruction */
-};
-
-/* XmlDocument structure. */
-/* ---------------------- */
-/* Describes an entire XML document */
-struct AstXmlDocument {
-   AstXmlObject obj;        /* General information for this XmlObject */
-   AstXmlPrologue *prolog;  /* Pointer to document prologue */
-   AstXmlElement *root;     /* Pointer to root element */
-   AstXmlMiscItem **epilog; /* List of XmlObjects forming the document epilogue */
-   int nepi;                /* No of XmlObjects pointers in "epilogue" */
-   AstXmlElement *current;  /* Pointer to element being read */
-};
-
-/* XmlPrologue structure. */
-/* ---------------------- */
-/* Describes an XML document prologue */
-struct AstXmlPrologue {
-   AstXmlObject obj;        /* General information for this XmlObject */
-   AstXmlDeclPI *xmldecl;   /* Pointer to XML declaration PI */
-   AstXmlMiscItem **misc1;  /* Group of of miscalleneous XmlObjects pointers */
-   int nmisc1;              /* No of XmlObjects pointers in "misc1" */
-   AstXmlDTDec *dtdec;      /* Pointer to Document Type Declaration */
-   AstXmlMiscItem **misc2;  /* Group of of miscalleneous XmlObjects pointers */
-   int nmisc2;              /* No of XmlObjects pointers in "misc2" */
-};
-
-/* XmlDecPI structure. */
-/* ------------------- */
-/* Describes an XML declaration PI */
-struct AstXmlDeclPI {
-   AstXmlObject obj;        /* General information for this XmlObject */
-   char *text;              /* The text of the XML declaration */
-};
-
-/* XmlDTDec structure. */
-/* ------------------- */
-/* Describes a data type declaration */
-struct AstXmlDTDec {
-   AstXmlObject obj;        /* General information for this XmlObject */
-   char *name;              /* Document type name */
-   char *external;          /* External ID */
-   char *internal;          /* Internal declarations */
-};
-
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-
-/* Define a structure holding all data items that are global within the
-   xml.c file. */
-typedef struct AstXmlGlobals {
-   int Next_ID;
-   char GetTag_Buff[ AST__XML_GETTAG_BUFF_LEN + 1 ];
-} AstXmlGlobals;
-
-#endif
-
-
-
-
-/* Function prototypes. */
-/* ==================== */
-AstXmlAttribute *astXmlCheckAttribute_( void *, int, int * );
-AstXmlBlack *astXmlCheckBlack_( void *, int, int * );
-AstXmlCDataSection *astXmlCheckCDataSection_( void *, int, int * );
-AstXmlComment *astXmlCheckComment_( void *, int, int * );
-AstXmlContentItem *astXmlGetItem_( AstXmlElement *, int, int * );
-AstXmlDTDec *astXmlCheckDTDec_( void *, int, int * );
-AstXmlDeclPI *astXmlCheckDeclPI_( void *, int, int * );
-AstXmlDocument *astXmlCheckDocument_( void *, int, int * );
-AstXmlElement *astXmlAddElement_( AstXmlElement *, const char *, const char *, int * );
-AstXmlElement *astXmlCheckElement_( void *, int, int * );
-AstXmlParent *astXmlGetParent_( AstXmlObject *, int * );
-AstXmlObject *astXmlGetRoot_( AstXmlObject *, int * );
-AstXmlElement *astXmlReadDocument_( AstXmlDocument **, int (*)( AstXmlElement *, int * ), int, char (*)( void *, int * ), void *, int * );
-AstXmlNamespace *astXmlCheckNamespace_( void *, int, int * );
-AstXmlObject *astXmlCopy_( AstXmlObject *, int * );
-AstXmlObject *astXmlCheckObject_( void *, int, int * );
-AstXmlPI *astXmlCheckPI_( void *, int, int * );
-AstXmlPrologue *astXmlCheckPrologue_( void *, int, int * );
-AstXmlWhite *astXmlCheckWhite_( void *, int, int * );
-AstXmlCharData *astXmlCheckCharData_( void *, int, int * );
-AstXmlContentItem *astXmlCheckContentItem_( void *, int, int * );
-AstXmlMiscItem *astXmlCheckMiscItem_( void *, int, int * );
-AstXmlParent *astXmlCheckParent_( void *, int, int * );
-const char *astXmlFormat_( AstXmlObject *, int * );
-const char *astXmlGetAttributeValue_( AstXmlElement *, const char *, int * );
-const char *astXmlGetName_( AstXmlObject *, int * );
-const char *astXmlGetTag_( AstXmlObject *, int, int * );
-const char *astXmlGetType_( AstXmlObject *, int * );
-const char *astXmlGetURI_( AstXmlObject *, int * );
-const char *astXmlGetValue_( AstXmlObject *, int, int * );
-const char *astXmlShow_( AstXmlObject *, int * );
-int astXmlCheckType_( void *, long int, int * );
-int astXmlGetNattr_( AstXmlElement *, int * );
-int astXmlGetNitem_( AstXmlElement *, int * );
-void *astXmlAnnulTree_( AstXmlObject *, int * );
-void *astXmlAnnul_( AstXmlObject *, int * );
-void *astXmlDelete_( void *, int * );
-void astXmlAddAttr_( AstXmlElement *, const char *, const char *, const char *, int * );
-void astXmlAddCDataSection_( AstXmlElement *, const char *, int * );
-void astXmlAddCharData_( AstXmlParent *, int, const char *, int * );
-void astXmlAddComment_( AstXmlParent *, int, const char *, int * );
-void astXmlAddPI_( AstXmlParent *, int, const char *, const char *, int * );
-void astXmlAddURI_( AstXmlElement *, const char *, const char *, int * );
-void astXmlInsertElement_( AstXmlElement *, AstXmlElement *, int * );
-void astXmlPurge_( AstXmlParent *, int * );
-void astXmlRemoveAttr_( AstXmlElement *, const char *, const char *, int * );
-void astXmlRemoveItem_( AstXmlContentItem *, int * );
-void astXmlRemoveURI_( AstXmlElement *, const char *, int * );
-void astXmlSetXmlDec_( AstXmlDocument *, const char *, int * );
-void astXmlSetDTDec_( AstXmlDocument *, const char *, const char *, const char *, int * );
-
-#if defined(THREAD_SAFE) && defined(astCLASS)
-void astInitXmlGlobals_( AstXmlGlobals * );
-#else
-
-#ifdef DEBUG
-int astXmlTrace_( int );           
-#endif
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These wrap up the functions defined by this module. */
-#define astXmlGetType(this) astXmlGetType_(this,STATUS_PTR)
-#define astXmlCheckAttribute(this,nullok) astXmlCheckAttribute_(this,nullok,STATUS_PTR)
-#define astXmlCheckBlack(this,nullok) astXmlCheckBlack_(this,nullok,STATUS_PTR)
-#define astXmlCheckCDataSection(this,nullok) astXmlCheckCDataSection_(this,nullok,STATUS_PTR)
-#define astXmlCheckCharData(this,nullok) astXmlCheckCharData_(this,nullok,STATUS_PTR)
-#define astXmlCheckComment(this,nullok) astXmlCheckComment_(this,nullok,STATUS_PTR)
-#define astXmlCheckContentItem(this,nullok) astXmlCheckContentItem_(this,nullok,STATUS_PTR)
-#define astXmlCheckDTDec(this,nullok) astXmlCheckDTDec_(this,nullok,STATUS_PTR)
-#define astXmlCheckDeclPI(this,nullok) astXmlCheckDeclPI_(this,nullok,STATUS_PTR)
-#define astXmlCheckDocument(this,nullok) astXmlCheckDocument_(this,nullok,STATUS_PTR)
-#define astXmlCheckElement(this,nullok) astXmlCheckElement_(this,nullok,STATUS_PTR)
-#define astXmlCheckMiscItem(this,nullok) astXmlCheckMiscItem_(this,nullok,STATUS_PTR)
-#define astXmlCheckNamespace(this,nullok) astXmlCheckNamespace_(this,nullok,STATUS_PTR)
-#define astXmlCheckObject(this,nullok) astXmlCheckObject_(this,nullok,STATUS_PTR)
-#define astXmlCheckPI(this,nullok) astXmlCheckPI_(this,nullok,STATUS_PTR)
-#define astXmlCheckParent(this,nullok) astXmlCheckParent_(this,nullok,STATUS_PTR)
-#define astXmlCheckPrologue(this,nullok) astXmlCheckPrologue_(this,nullok,STATUS_PTR)
-#define astXmlCheckWhite(this,nullok) astXmlCheckWhite_(this,nullok,STATUS_PTR)
-
-#define astXmlAddAttr(elem,name,value,prefix) astXmlAddAttr_(astXmlCheckElement(elem,0),name,value,prefix,STATUS_PTR)
-#define astXmlAddURI(elem,prefix,uri) astXmlAddURI_(astXmlCheckElement(elem,0),prefix,uri,STATUS_PTR)
-#define astXmlAnnul(this) astXmlAnnul_(astXmlCheckObject(this,1),STATUS_PTR)
-#define astXmlDelete(this) astXmlDelete_(this,STATUS_PTR)
-#define astXmlAnnulTree(this) astXmlAnnulTree_(astXmlCheckObject(this,1),STATUS_PTR)
-#define astXmlAddCDataSection(this,text) astXmlAddCDataSection_(astXmlCheckElement(this,0),text,STATUS_PTR)
-#define astXmlAddCharData(this,where,text) astXmlAddCharData_(astXmlCheckParent(this,0),where,text,STATUS_PTR)
-#define astXmlAddComment(this,where,text) astXmlAddComment_(astXmlCheckParent(this,0),where,text,STATUS_PTR)
-#define astXmlAddElement(this,name,prefix) astXmlAddElement_(astXmlCheckElement(this,1),name,prefix,STATUS_PTR)
-#define astXmlAddPI(this,where,target,text) astXmlAddPI_(astXmlCheckParent(this,0),where,target,text,STATUS_PTR)
-#define astXmlGetParent(this) astXmlGetParent_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlGetRoot(this) astXmlGetRoot_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlGetName(this) astXmlGetName_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlGetValue(this,report) astXmlGetValue_(astXmlCheckObject(this,0),report,STATUS_PTR)
-#define astXmlGetAttributeValue(this,name) astXmlGetAttributeValue_(astXmlCheckElement(this,0),name,STATUS_PTR)
-#define astXmlGetNattr(this) astXmlGetNattr_(astXmlCheckElement(this,0),STATUS_PTR)
-#define astXmlGetNitem(this) astXmlGetNitem_(astXmlCheckElement(this,0),STATUS_PTR)
-#define astXmlGetItem(this,item) astXmlGetItem_(astXmlCheckElement(this,0),item,STATUS_PTR)
-#define astXmlGetAttributeValue(this,name) astXmlGetAttributeValue_(astXmlCheckElement(this,0),name,STATUS_PTR)
-#define astXmlGetTag(this,opening) astXmlGetTag_(astXmlCheckObject(this,0),opening,STATUS_PTR)
-#define astXmlGetURI(this) astXmlGetURI_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlFormat(this) astXmlFormat_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlShow(this) astXmlShow_(astXmlCheckObject(this,0),STATUS_PTR)
-#define astXmlRemoveItem(this) astXmlRemoveItem_(astXmlCheckContentItem(this,0),STATUS_PTR)
-#define astXmlRemoveAttr(this,name,prefix) astXmlRemoveAttr_(astXmlCheckElement(this,0),name,prefix,STATUS_PTR)
-#define astXmlRemoveURI(this,prefix) astXmlRemoveURI_(astXmlCheckElement(this,0),prefix,STATUS_PTR)
-#define astXmlReadDocument(doc,is_wanted,skip,source,data) astXmlReadDocument_(doc,is_wanted,skip,source,data,STATUS_PTR) 
-#define astXmlInsertElement(this,elem) astXmlInsertElement_(astXmlCheckElement(this,0),astXmlCheckElement(elem,0),STATUS_PTR) 
-#define astXmlPurge(this) astXmlPurge_(astXmlCheckParent(this,1),STATUS_PTR) 
-#define astXmlSetXmlDec(this,text) astXmlSetXmlDec_(astXmlCheckDocument(this,0),text,STATUS_PTR) 
-#define astXmlSetDTDec(this,text1,text2,text3) astXmlSetDTDec_(astXmlCheckDocument(this,0),text1,text2,text3,STATUS_PTR) 
-#define astXmlCheckType(this,type) astXmlCheckType_(this,type,STATUS_PTR)
-#define astXmlCopy(this) astXmlCopy_(astXmlCheckObject(this,1),STATUS_PTR)
-
-#ifdef DEBUG
-#define astXmlTrace(show) astXmlTrace_(show)
-#endif
-
-#endif
-
-
-
diff --git a/ast-5.3-1/xmlchan.c b/ast-5.3-1/xmlchan.c
deleted file mode 100644
index bc95321..0000000
--- a/ast-5.3-1/xmlchan.c
+++ /dev/null
@@ -1,14240 +0,0 @@
-/*
-*class++
-*  Name:
-*     XmlChan
-
-*  Purpose:
-*     I/O Channel using XML to represent Objects.
-
-*  Constructor Function:
-c     astXmlChan
-f     AST_XMLCHAN
-
-*  Description:
-*     A XmlChan is a specialised form of Channel which supports XML I/O
-*     operations. Writing an Object to an XmlChan (using
-c     astWrite) will, if the Object is suitable, generate an
-f     AST_WRITE) will, if the Object is suitable, generate an
-*     XML description of that Object, and reading from an XmlChan will 
-*     create a new Object from its XML description.
-*
-*     Normally, when you use an XmlChan, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-c     by reading and writing the resulting XML text. These functions
-f     and "sink" routines which connect it to an external data store
-f     by reading and writing the resulting XML text. These routines
-*     should perform any conversions needed between external character 
-c     encodings and the internal ASCII encoding. If no such functions 
-f     encodings and the internal ASCII encoding. If no such routines
-*     are supplied, a Channel will read from standard input and write 
-*     to standard output.
-
-*  Inheritance:
-*     The XmlChan class inherits from the Channel class.
-
-*  Attributes:
-*     In addition to those attributes common to all Channels, every
-*     XmlChan also has the following attributes:
-*
-*     - XmlFormat: System for formatting Objects as XML
-*     - XmlIndent: Controls output of indentation and line feeds
-*     - XmlLength: Controls output buffer length
-*     - XmlPrefix: The namespace prefix to use when writing
-
-*  Functions:
-c     The XmlChan class does not define any new functions beyond those
-f     The XmlChan class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: David Berry (Starlink)
-
-*  History:
-*     10-OCT-2003 (DSB):
-*        Original version.
-*     6-FEB-2004 (DSB):
-*        Added XmlPrefix and XmlFormat attributes.
-*     10-FEB-2004 (DSB):
-*        - Added debug conditional code to keep track of memory leaks.
-*        - Fixed bug which prevented more than 1 object being read from
-*        an XmlChan.
-*     7-DEC-2005 (DSB):
-*        Free memory allocated by calls to astReadString.
-*class--
-
-* Further STC work:
-*     - Speed up general STC processing (a lot of time seems to be spent
-*     simplifying things)
-*     - Document (including a complete description of what is and is not
-*     supported in the reference docs for the XmlFormat attribute).
-*     - Produce a schema describing the format which can in fact be read by 
-*     AST.
-*     - Look at Jonathan McDowell's mini-STC schema (also STC stuff in 
-*     spectral data model)
-*     - Web services. Read only: test STCs for overlap, test points for 
-*     inclusion/exclusion, plot a mask over an image, verification (can AST 
-*     read it & does it generate warnings?). Read/Write: convert FITS to STC,
-*     transform STC into a new coord system.
-*     - Add support for writing as well as reading
-*     - Modify Stc... constructors to check that the supplied Frame is suitable.
-*     - What about multiple AstroCoordFrames and AstroCoordAreas in a STC?
-*     - Add support for generic CoordFrames
-*     - What should be done with pixel coords info within STC?
-*     - Extend coverage (e.g. to 3D space frames, etc)
-
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS XmlChan
-
-/* Number of spaces indentation per level of nesting */
-#define INDENT_INC 3
-
-/* The XML element name used to store an AST attribute setting */
-#define ATTR "_attribute"
-
-/* The XML element name used for an AST "isa" element */
-#define ISA "_isa"
-
-/* The XML attribute name which holds the name of the AST class which
-   defines the item contained in the element. */
-#define DEFINEDBY "definedby"
-
-/* The XML attribute name which holds the name of the AST attribute */
-#define NAME "name"
-
-/* The XML attribute name which holds the value of the AST attribute */
-#define VALUE "value"
-
-/* The XML attribute name which indicates if the AST attribute value is a
-   default value. */
-#define DEFAULT "default"
-
-/* The XML attribute name which indicates if the AST attribute value was
-   originally a string value. */
-#define QUOTED "quoted"
-
-/* The XML attribute name which holds a description of the AST attribute. */
-#define DESC "desc"
-
-/* The XML attribute name which holds the label associated with an AST
-   Object (if any). */
-#define LABEL "label"
-
-/* A string used to indicate atrue attribute value */
-#define TRUE "true"
-
-/* Format identifiers and strings */
-#define UNKNOWN_FORMAT  -1
-#define NATIVE_FORMAT    0
-#define QUOTED_FORMAT    1
-#define IVOA_FORMAT      2
-#define MAX_FORMAT       2
-#define UNKNOWN_STRING   "UNKNOWN"
-#define NATIVE_STRING    "NATIVE"
-#define QUOTED_STRING    "QUOTED"
-#define IVOA_STRING      "IVOA"
-
-/* Values representing message severities. */
-#define WARNING 0
-#define FAILURE 1
-#define RESET 2
-
-/* Known IVOA namespaces. When a new name is added, update the FindIVOAClass
-   function. */
-#define STC_URI "urn:nvo-stc"
-
-/* Known IVOA Classes and attributes. When a new name is added, it may be 
-   necessary to update the FindIVOAClass function. */
-#define STC_RESOURCE_PROFILE     "STCResourceProfile"
-#define SEARCH_LOCATION          "SearchLocation"
-#define OBSERVATION_LOCATION     "ObservationLocation"
-#define OBSERVATORY_LOCATION     "ObservatoryLocation"
-#define CATALOG_ENTRY_LOCATION   "CatalogEntryLocation"
-#define OBS_DATA_LOCATION        "ObsDataLocation"
-#define ASTRO_COORD_SYSTEM       "AstroCoordSystem"
-#define ASTRO_COORD_AREA         "AstroCoordArea"
-#define ASTRO_COORDS             "AstroCoords"
-#define TIME_FRAME               "TimeFrame"
-#define SPACE_FRAME              "SpaceFrame"
-#define SPECTRAL_FRAME           "SpectralFrame"
-#define REDSHIFT_FRAME           "RedshiftFrame"
-#define DOPPLER_DEFINITION       "DopplerDefinition"
-
-/* Returns string "an" or "a" depending on whether the first character of
-   the supplied string is a vowel or not. */
-#define ANA(t) (t?(strchr("AaEeIiOoUu",t[0])?"an":"a"):"")
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "object.h"              /* Base Object class */
-#include "frame.h"               /* Coordinate Frames */
-#include "timeframe.h"           /* Time coordinate Frames */
-#include "cmpframe.h"            /* Coordinate Frames */
-#include "skyframe.h"            /* Celestial coordinate Frames */
-#include "specframe.h"           /* Spectral coordinate Frames */
-#include "region.h"              /* Regions within coordinate Frames */
-#include "ellipse.h"             /* Ellipses within coordinate Frames */
-#include "pointlist.h"           /* Points within coordinate Frames */
-#include "polygon.h"             /* Polygons within coordinate Frames */
-#include "circle.h"              /* Circles within coordinate Frames */
-#include "keymap.h"              /* Mapping of keys to values */
-#include "channel.h"             /* Interface for parent class */
-#include "xmlchan.h"             /* Interface definition for this class */
-#include "loader.h"              /* Interface to the global loader */
-#include "object.h"              /* Base Object class */
-#include "wcsmap.h"              /* Angular conversion constants */
-#include "xml.h"                 /* AST XML facilities */
-#include "stcresourceprofile.h"  /* IVOA StcResourceProfile class */
-#include "stcsearchlocation.h"   /* IVOA SearchLocation class */
-#include "stccatalogentrylocation.h"/* IVOA CatalogEntryLocation class */
-#include "stcobsdatalocation.h"  /* IVOA ObsDataLocation class */
-#include "nullregion.h"          /* Null regions */
-#include "interval.h"            /* Axis intervals */
-#include "box.h"                 /* Box regions */
-#include "cmpregion.h"           /* Compound regions */
-#include "prism.h"               /* Prism regions */
-#include "unitmap.h"             /* Unit Mappings */
-#include "unit.h"                /* Unit handling utilities */
-#include "pal.h"                 /* slalib functions */
-#include "globals.h"             /* Thread-safe global data access */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <ctype.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Type Definitions */
-/* ================ */
-
-/* A type for functions which read an IVOA element and return a
-   corresponding AST Object. */
-typedef AstObject *(*IVOAReader)( AstXmlChan *, AstXmlElement *, int * );
-
-/* A structure to hold the result of scanning the content of an IVOA
-   element.*/
-typedef struct IVOAScan {
-   int n;           /* Number of element names described by this structure */
-   int *count;      /* Array holding number of each element name found */
-   AstXmlElement ***el;  /* Array holding pointers to each element found */
-} IVOAScan;
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-static int (* parent_getfull)( AstChannel *, int * );
-static int (* parent_getcomment)( AstChannel *, int * );
-
-/* Text values used to represent XmlFormat values externally. These
-   should be in the order defined by the associated constants above. */
-static const char *xformat[3] = { NATIVE_STRING, QUOTED_STRING, IVOA_STRING };
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->IsUsable_This = NULL; \
-   globals->GetAttrib_Buff[ 0 ] = 0; \
-   globals->GetNextChar_C = NULL; \
-   globals->GetNextChar_Buf = NULL;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(XmlChan)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(XmlChan,Class_Init)
-#define class_vtab astGLOBAL(XmlChan,Class_Vtab)
-#define isusable_this  astGLOBAL(XmlChan,IsUsable_This)
-#define getattrib_buff astGLOBAL(XmlChan,GetAttrib_Buff)
-#define getnextchar_c astGLOBAL(XmlChan,GetNextChar_C)
-#define getnextchar_buf astGLOBAL(XmlChan,GetNextChar_Buf)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-/* An XmlChan pointer use to communicate with the IsUsable function. */
-static AstXmlChan *isusable_this = NULL;
-
-/* Buffer returned by GetAttrib. */
-static char getattrib_buff[ 51 ];
-
-/* Variables used in GetNextChar */
-static char *getnextchar_c = NULL;    /* Pointer to next character to read */
-static char *getnextchar_buf = NULL;  /* Pointer to previously read text */
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstXmlChanVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstXmlChan *astXmlChanForId_( const char *(*)( void ), 
-                           char *(*)( const char *(*)( void ), int * ), 
-                           void (*)( const char * ), 
-                           void (*)( void (*)( const char * ), const char *, int * ),
-                           const char *, ... );
-AstXmlChan *astXmlChanId_( const char *(* source)( void ),
-                             void (* sink)( const char * ),
-                             const char *options, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstObject *AstroCoordSystemReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *MakeAstFromXml( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *ObsDataLocationReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *Read( AstChannel *, int * );
-static AstObject *ReadObject( AstChannel *, const char *, AstObject *, int * );
-static AstObject *RedshiftFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *SpaceFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *SpectralFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *StcMetadataReader( AstXmlChan *, AstXmlElement *, int * );
-static AstObject *TimeFrameReader( AstXmlChan *, AstXmlElement *, int * );
-static AstPointList *ObservatoryLocationReader( AstXmlChan *, AstXmlElement *, AstStcObsDataLocation *, int * );
-static AstRegion *AllSkyReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *AstroCoordAreaReader( AstXmlChan *, AstXmlElement *, AstFrame *, AstRegion *[4], int, AstKeyMap **, int * );
-static AstRegion *BoxReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *CircleReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *ConstraintReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *ConvexReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *Coord2VecIntervalReader( AstXmlChan *, AstXmlElement *, const char *, AstFrame *, int * );
-static AstRegion *Coord3VecIntervalReader( AstXmlChan *, AstXmlElement *, const char *, AstFrame *, int * );
-static AstRegion *CoordScalarIntervalReader( AstXmlChan *, AstXmlElement *, const char *, AstFrame *, int * );
-static AstRegion *EllipseReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *IntersectionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *NegationReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *PolygonReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *Position2DReader( AstXmlChan *, AstXmlElement *, AstFrame *, double *, AstKeyMap **, int * );
-static AstRegion *PositionIntervalReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *RedshiftIntervalReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *RedshiftReader( AstXmlChan *, AstXmlElement *, AstFrame *, AstKeyMap **, int * );
-static AstRegion *StcRegionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *RegionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *SpectralIntervalReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *SpectralReader( AstXmlChan *, AstXmlElement *, AstFrame *, double *, AstKeyMap **, int * );
-static AstRegion *SphereReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstRegion *TimeIntervalReader( AstXmlChan *, AstXmlElement *, AstTimeFrame *, int * );
-static AstRegion *TimeReader( AstXmlChan *, AstXmlElement *, AstTimeFrame *, double *, AstKeyMap **, int * );
-static AstRegion *UnionReader( AstXmlChan *, AstXmlElement *, AstFrame *, int * );
-static AstSystemType RedshiftSys( AstXmlChan *, AstXmlElement *, char **, int, int * );
-static AstSystemType SpecSys( AstXmlChan *, AstXmlElement *, const char *, int, int * );
-static AstXmlElement *FindAttribute( AstXmlChan *, const char *, int * );
-static AstXmlElement *FindElement( AstXmlChan *, AstXmlElement *, const char *, int * );
-static AstXmlElement *FindObject( AstXmlChan *, const char *, int * );
-static AstXmlElement *MakePos2D( AstXmlChan *, AstXmlElement *, int * );
-static AstXmlElement *ReadXmlText( AstXmlChan *, int * );
-static AstXmlElement *Remove( AstXmlChan *, AstXmlElement *, int * );
-static IVOAReader FindIVOAClass( AstXmlElement *, int *, int * );
-static IVOAScan *FreeIVOAScan( IVOAScan *, int * );
-static IVOAScan *ScanIVOAElement( AstXmlChan *, AstXmlElement *, int, const char *[], int[], int[], int * );
-static char *ReadString( AstChannel *, const char *, const char *, int * );
-static char *SourceWrap( const char *(*)( void ), int * );
-static char GetNextChar( void *, int * );
-static const char *FindNextIsA( AstXmlElement *, int, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );
-static const char *GetTag( AstXmlObject *, int, int * );
-static double  AstronTimeReader( AstXmlChan *, AstXmlElement *, AstTimeFrame *, int * );
-static double AttrValueD( AstXmlChan *, AstXmlElement *, const char *, double, int * );
-static double ElemValueD( AstXmlChan *, AstXmlElement *, double, int * );
-static double Error2PAReader( AstXmlChan *, AstXmlElement *, double *, int * );
-static double MakeMJD( AstTimeFrame *, double, int * );
-static double PosAngleReader( AstXmlChan *, AstXmlElement *, int * );
-static double ReadDouble( AstChannel *, const char *, double, int * );
-static int AstroCoordsReader( AstXmlChan *, AstXmlElement *, AstFrame *, AstRegion *[4], AstKeyMap **, int * );
-static int AttrValueB( AstXmlChan *, AstXmlElement *, const char *, int, int * );
-static int AttrValueI( AstXmlChan *, AstXmlElement *, const char *, int, int * );
-static int ElemListD( AstXmlChan *, AstXmlElement *, int, double *, int * );
-static int FindString( int, const char *[], const char *, const char *, const char *, const char *, int * );
-static int GetComment( AstChannel *, int * );
-static int GetFull( AstChannel *, int * );
-static int IsUsable( AstXmlElement *, int * );
-static int ReadInt( AstChannel *, const char *, int, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int Use( AstXmlChan *, int, int, int * );
-static int Ustrcmp( const char *, const char *, int * );
-static int Ustrncmp( const char *, const char *, size_t, int * );
-static int VertexReader( AstXmlChan *, AstXmlElement *, double *, double *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void Copy( const AstObject *, AstObject *, int * );
-static void Delete( AstObject *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void FillAndLims( AstXmlChan *, AstXmlElement *, AstRegion *, int * );
-static void Geod( double, double, double *, double *, int * );
-static void OutputText( AstXmlChan *, const char *, int, int * );
-static void ReCentreAnc( AstRegion *, int, AstKeyMap **, int * );
-static void ReadClassData( AstChannel *, const char *, int * );
-static void Report( AstXmlChan *, AstXmlElement *, int, const char *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SinkWrap( void (*)( const char * ), const char *, int * );
-static void WriteBegin( AstChannel *, const char *, const char *, int * );
-static void WriteDouble( AstChannel *, const char *, int, int, double, const char *, int * );
-static void WriteEnd( AstChannel *, const char *, int * );
-static void WriteInt( AstChannel *, const char *, int, int, int, const char *, int * );
-static void WriteIsA( AstChannel *, const char *, const char *, int * );
-static void WriteObject( AstChannel *, const char *, int, int, AstObject *, const char *, int * );
-static void WriteString( AstChannel *, const char *, int, int, const char *, const char *, int * );
-static AstTimeScaleType TimeScaleReader( AstXmlChan *, AstXmlElement *, int * );
-
-static int TestXmlLength( AstXmlChan *, int * );
-static void ClearXmlLength( AstXmlChan *, int * );
-static void SetXmlLength( AstXmlChan *, int, int * );
-static int GetXmlLength( AstXmlChan *, int * );
-
-static int TestXmlFormat( AstXmlChan *, int * );
-static void ClearXmlFormat( AstXmlChan *, int * );
-static void SetXmlFormat( AstXmlChan *, int, int * );
-static int GetXmlFormat( AstXmlChan *, int * );
-
-static int TestXmlIndent( AstXmlChan *, int * );
-static void ClearXmlIndent( AstXmlChan *, int * );
-static void SetXmlIndent( AstXmlChan *, int, int * );
-static int GetXmlIndent( AstXmlChan *, int * );
-
-static int TestXmlPrefix( AstXmlChan *, int * );
-static void ClearXmlPrefix( AstXmlChan *, int * );
-static void SetXmlPrefix( AstXmlChan *, const char *, int * );
-static const char * GetXmlPrefix( AstXmlChan *, int * );
-
-/* Member functions. */
-/* ================= */
-
-static AstRegion *AllSkyReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstFrame *frm, int *status ){
-/*
-*  Name:
-*     AllSkyReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA AllSky element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *AllSkyReader( AstXmlChan *this, AstXmlElement *elem, 
-*                              AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     AllSky element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA AllSky element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Create a negated NullRegion (this is a boundless Region which includes
-   all points in the Frame). */
-   new = (AstRegion *) astNullRegion( frm, NULL, "negated=1", status );
-
-/* Get any fill factor from the element and assign to the returned Region. */
-   FillAndLims( this, elem, new, status );
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *AstroCoordAreaReader( AstXmlChan *this, AstXmlElement *elem,
-                                        AstFrame *frm, AstRegion *uncs[4], 
-                                        int nanc, AstKeyMap **ancs, int *status ) {
-/*
-*  Name:
-*     AstroCoordAreaReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA AstroCoordArea element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *AstroCoordAreaReader( AstXmlChan *this, AstXmlElement *elem,
-*                                      AstFrame *frm, AstRegion *uncs[4], 
-*                                      int nanc, AstKeyMap **ancs, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     AstroCoordArea element.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA AstroCoordArea element. May be NULL, in
-*        which case a NullRegion is returned.
-*     frm 
-*        The Frame in which the returned Region is to be defined. If
-*        Units or reference values (Epoch, RestFreq, RefRA, etc) are not set 
-*        for any axes, then they will be set by this function if possible.
-*     uncs
-*        Array holding pointers to the uncertainty Regions to be associated 
-*        with each of the four STC domains (space, time, spectral, redshift). 
-*        NULL should be suppied in any element for which no uncertainty is 
-*        available.
-*     nanc
-*        Number of KeyMap pointers stored in "ancs"
-*     ancs
-*        Pointer to an array of "nanc" elements, each being a pointer to
-*        a KeyMap. Each one describes the ancilary information in an
-*        AstroCoords element associated with the AstroCoordsArea decribed
-*        by "region". Each KeyMap has elements with keys AST__STCERROR,
-*        AST__STCRES, AST__STCSIZE, AST__STCPIXSZ, AST__STCVALUE each of 
-*        which holds a pointer to a Region. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-*/
-
-/* Local Variables: */
-   AstRegion *r;
-   AstFrame *cfrm;
-   AstFrame *fr;
-   AstFrame *pfrm;
-   AstFrame *red_frame;
-   AstFrame *space_frame;
-   AstFrame *spec_frame;
-   AstFrameSet *fs;
-   AstMapping *map;
-   AstObject *o;
-   AstRegion **red_list;
-   AstRegion **spec_list;
-   AstRegion **space_list;
-   AstRegion **time_list;
-   AstRegion *new;                 
-   AstRegion *reg;
-   AstRegion *rred;
-   AstRegion *rspec;
-   AstRegion *rspace;
-   AstRegion *rtime;
-   AstRegion *sum;
-   AstRegion *tmp;
-   AstTimeFrame *time_frame;
-   IVOAScan *scan;
-   char *decset;
-   char *raset;
-   char buff[ DBL_DIG + 30 ];
-   char setting[ 100 ];
-   const char *dom;
-   const char *id;
-   const char *names[4];
-   const char *name;
-   const char *old_units;
-   const char *text;
-   double decref;
-   double lbnd[2];
-   double raref;
-   double space_val[2];
-   double spec_val;
-   double time_val;
-   double ubnd[2];
-   int i;
-   int ianc;
-   int ired;
-   int ispace;
-   int ispec;          
-   int itime;
-   int k;
-   int l;
-   int max[4];
-   int min[4];
-   int nax;
-   int nred;
-   int nspace;
-   int nspec;
-   int ntime;
-   int paxis;                 
-
-   static const char *key[ 5 ] = { AST__STCERROR, 
-                                   AST__STCRES,
-                                   AST__STCSIZE,
-                                   AST__STCPIXSZ,
-                                   AST__STCVALUE };
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If null AstroCoordArea element has been supplied, return a NullRegion. */
-   if( !elem ) {
-      new = (AstRegion *) astNullRegion( frm, NULL, "", status );
-
-/* Otherwise, create a Region of suitable class. */
-   } else {
-
-/* First identify the individual Frames within the supplied Frame. Current 
-   implementation for spatial axes is limited to celestial longitude and 
-   latitude. */
-      space_frame = NULL;
-      spec_frame = NULL;
-      red_frame = NULL;
-      time_frame = NULL;
-
-      nax = astGetNaxes( frm );
-      for( i = 0; i < nax; i++ ) {
-         astPrimaryFrame( frm, i, &pfrm, &paxis );
-         dom = astGetDomain( pfrm );
-         if( !strcmp( dom, "SKY" ) ) {
-            if( !space_frame ) {
-               space_frame = astClone( pfrm );
-            } else if( pfrm != space_frame) {
-               Report( this, elem, FAILURE, "contains more than 2 spatial axes", status );
-            }
-
-         } else if( !strcmp( dom, "TIME" ) ) {
-            if( !time_frame ) {
-               if( astIsATimeFrame( pfrm ) ) {
-                  time_frame = (AstTimeFrame *) astClone( pfrm );
-               } else if( astOK ) {
-                  astError( AST__INTER, "AstroCoordAreaReader(XmlChan): %s "
-                            "supplied where TimeFrame expected (internal "
-                            "AST programming error).", status, astGetClass( pfrm ) );
-               }
-            } else {
-               Report( this, elem, FAILURE, "contains more than 1 time axis", status );
-            }
-
-         } else if( !strcmp( dom, "SPECTRUM" ) ) {
-            if( !spec_frame ) {
-               spec_frame = astClone( pfrm );
-            } else {
-               Report( this, elem, FAILURE, "contains more than 1 spectral axis", status );
-            }
-
-         } else if( !strcmp( dom, "REDSHIFT" ) ) {
-            if( !red_frame ) {
-               red_frame = astClone( pfrm );
-            } else {
-               Report( this, elem, FAILURE, "contains more than 1 redshift axis", status );
-            }
-
-         } else {
-            Report( this, elem, FAILURE, "contains axes for an unsupported domain", status );
-         }
-         pfrm = astAnnul( pfrm );
-      }
-
-/* Search the supplied element for the required sub-elements. */
-      names[ 0 ] = "Sphere|PositionInterval|Region";
-      names[ 1 ] = "TimeInterval";
-      names[ 2 ] = "SpectralInterval";
-      names[ 3 ] = "RedshiftInterval";
-      min[ 0 ] = 0;
-      min[ 1 ] = 0;
-      min[ 2 ] = 0;
-      min[ 3 ] = 0;
-      max[ 0 ] = INT_MAX;
-      max[ 1 ] = INT_MAX;
-      max[ 2 ] = INT_MAX;
-      max[ 3 ] = INT_MAX;
-      scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
-      if( scan ) {
-
-/* Create Regions for all the SpatialIntervals found in the supplied element. */
-         space_val[ 0 ] = AST__BAD;
-         space_val[ 1 ] = AST__BAD;
-         nspace = scan->count[ 0 ];
-         space_list = astMalloc( sizeof(AstRegion *)*(size_t)nspace );
-         if( space_list ) {
-            for( ispace = 0; ispace < nspace; ispace++ ) {
-               name = astXmlGetName( scan->el[ 0 ][ ispace ] );
-               if( !strcmp( name, "Sphere" ) ) {
-                  space_list[ ispace ] = SphereReader( this, 
-                                                       scan->el[ 0 ][ ispace ], 
-                                                       space_frame, status );
-               } else if( !strcmp( name, "PositionInterval" ) ) {
-                  space_list[ ispace ] = PositionIntervalReader( this, 
-                                                       scan->el[ 0 ][ ispace ], 
-                                                       space_frame, status );
-               } else if( !strcmp( name, "Region" ) ) {
-                  space_list[ ispace ] = StcRegionReader( this, 
-                                                       scan->el[ 0 ][ ispace ], 
-                                                       space_frame, status );
-               } else if( astOK ) {
-                  astError( AST__INTER, "AstroCoordAreaReader(XmlChan): "
-                            "SpatialInterval type %s not yet supported "
-                            "(AST internal programming error).", status, name );
-                  break;
-               }
-
-/* Store any uncertainty region.*/
-               if( uncs[ 0 ] ) astSetUnc( space_list[ ispace ], uncs[ 0 ] );
-
-            }
-
-/* If the spatial region is a single point we will use the point as the
-   reference position for any SpecFrames which are created. If there is
-   just one spatial interval, and if it is bounded. and if the bounds are 
-   equal on both axes, note the mean position. */
-            if( nspace == 1 ){
-               if( astGetBounded( space_list[ 0 ] ) ) {
-                  astGetRegionBounds( space_list[ 0 ], lbnd, ubnd );
-                  if( astEQUAL( lbnd[ 0 ], ubnd[ 0 ] ) && 
-                      astEQUAL( lbnd[ 1 ], ubnd[ 1 ] ) ) {
-                     space_val[ 0 ] = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
-                     space_val[ 1 ] = 0.5*( lbnd[ 1 ] + ubnd[ 1 ] );
-                  }
-               }
-            }
-         }
-
-/* Create Regions for all the TimeIntervals found in the supplied element. */
-         time_val = AST__BAD;
-         ntime = scan->count[ 1 ];
-         time_list = astMalloc( sizeof(AstRegion *)*(size_t)ntime );
-         if( time_list ) {
-            for( itime = 0; itime < ntime; itime++ ) {
-               time_list[ itime ] = TimeIntervalReader( this, 
-                                                       scan->el[ 1 ][ itime ], 
-                                                       time_frame, status );
-
-/* Store any uncertainty region. Transfer the System and TimeOrigin
-   values from the time region to the time uncertainty, if set. */
-               if( uncs[ 1 ] ) {
-
-                  if( astTestSystem( time_frame ) && 
-                      astTestTimeOrigin( time_frame ) ) {
-
-                     sprintf( setting, "System=%s", 
-                              astGetC( time_frame, "System" ) );
-                     astRegSetAttrib( uncs[ 1 ], setting, NULL );
-
-
-                     if( astTestUnit( time_frame, 0 ) ) {
-                        old_units = astGetUnit( time_frame, 0 );
-                        old_units = astStore( NULL, old_units, 
-                                              strlen( old_units ) + 1 );
-                     } else {
-                        old_units = NULL;
-                     }
-                  
-                     astSetUnit( time_frame, 0, astGetUnit( uncs[ 1 ], 0 ) );
-
-                     sprintf( setting, "TimeOrigin=%s", 
-                              astGetC( time_frame, "TimeOrigin" ) );
-                     astRegSetAttrib( uncs[ 1 ], setting, NULL );
-
-                     if( old_units ) {
-                        astSetUnit( time_frame, 0, old_units );
-                        old_units = astFree( (void *) old_units );
-                     } else {
-                        astClearUnit( time_frame, 0 );
-                     }
-
-                  }
-
-                  astSetUnc( time_list[ itime ], uncs[ 1 ] );
-               }
-            }
-
-/* Use the mid point as the Epoch for all Frames which are created. If 
-   either limit is not specified, use the specified limit. */
-            if( ntime > 0 ){
-               astGetRegionBounds( time_list[ 0 ], lbnd, ubnd );
-               if( fabs( lbnd[ 0 ] ) != DBL_MAX && lbnd[ 0 ] != AST__BAD ){
-                  if( fabs( ubnd[ 0 ] ) != DBL_MAX && ubnd[ 0 ] != AST__BAD ){
-                     time_val = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
-                  } else {
-                     time_val = lbnd[ 0 ];
-                  }
-               } else if( fabs( ubnd[ 0 ] ) != DBL_MAX && ubnd[ 0 ] != AST__BAD ){
-                  time_val = ubnd[ 0 ];
-               } 
-            }
-         }
-
-/* Create Regions for all the SpectralIntervals found in the supplied element. */
-         spec_val = AST__BAD;
-         nspec = scan->count[ 2 ];
-         spec_list = astMalloc( sizeof(AstRegion *)*(size_t)nspec );
-         if( spec_list ) {
-            for( ispec = 0; ispec < nspec; ispec++ ) {
-               spec_list[ ispec ] = SpectralIntervalReader( this, 
-                                                       scan->el[ 2 ][ ispec ], 
-                                                       spec_frame, status );
-/* Store any uncertainty region.*/
-               if( uncs[ 2 ] ) astSetUnc( spec_list[ ispec ], uncs[ 2 ] );
-            }
-
-/* If the spectral region is a single point we will use the point as the
-   rest frequency for all RedShift Frames which are created. If there is just 
-   one spectral interval, and if it is bounded. and if the bounds are equal, 
-   note the mean spectral value. */
-            if( nspec == 1 ){
-               if( astGetBounded( spec_list[ 0 ] ) ) {
-                  astGetRegionBounds( spec_list[ 0 ], lbnd, ubnd );
-                  if( astEQUAL( lbnd[ 0 ], ubnd[ 0 ] ) ) {
-                     spec_val = 0.5*( lbnd[ 0 ] + ubnd[ 0 ] );
-                  }
-               }
-            }
-         }
-
-/* Create Regions for all the RedshiftIntervals found in the supplied element. */
-         nred = scan->count[ 3 ];
-         red_list = astMalloc( sizeof(AstRegion *)*(size_t)nred );
-         if( red_list ) {
-            for( ired = 0; ired < nred; ired++ ) {
-               red_list[ ired ] = RedshiftIntervalReader( this, 
-                                                       scan->el[ 3 ][ ired ], 
-                                                       red_frame, status );
-/* Store any uncertainty region.*/
-               if( uncs[ 3 ] ) astSetUnc( red_list[ ired ], uncs[ 3 ] );
-            }
-         }
-
-/* Free the can result structure.*/
-         scan = FreeIVOAScan( scan, status );
-
-/* If the spatial regions cover only a single point, convert it to FK5
-   J2000 and use it as the reference position for any SpecFrames (spectral or 
-   redshift) unless values were inherited from the supplied Frame. If the 
-   supplied Frame did not contain set values for these attributes, set them 
-   now. Use astRegSetAttrib which applies the attribute setting to both
-   base and current Frame of the Region's FrameSet, and avoids re-mapping
-   the current Frame. */
-         if( astOK ) {
-            if( space_val[ 0 ] != AST__BAD && space_val[ 1 ] != AST__BAD ) { 
-
-/* First need to convert to FK5 J2000 and format into a string for use with 
-   astRegSetAttrib. Need to ensure that the Format and Digits attributes
-   are set to values which will result in no loss of precision in the
-   formatting and unformatting steps. */
-               fr = astCopy( space_frame );
-               astClear( fr, "Format(1),Format(2),Digits(1),Digits(2)" );
-               astSet( fr, "digits=%d,system=FK5,equinox=J2000", status, DBL_DIG);
-               fs = astConvert( space_frame, fr, "" );
-               fr = astAnnul( fr );
-               if( fs ) {
-                  astTran2( fs, 1, space_val, space_val + 1, 1, &raref, &decref );
-
-                  text = astFormat( fs, raref, 0 );
-                  l = text ? strlen( text ) : 0;
-                  raset = astMalloc( l + 10 );
-                  if( raset ) sprintf( raset, "refra=%s", text );
-
-                  text = astFormat( fs, decref, 1 );
-                  l = text ? strlen( text ) : 0;
-                  decset = astMalloc( l + 10 );
-                  if( decset ) sprintf( decset, "refdec=%s", text );
-
-                  fs = astAnnul( fs );
-
-/* Now set the FK5 J2000 values in the required Frames and Regions. */
-                  if( !spec_frame || !astTestRefRA( spec_frame ) ||
-                                     !astTestRefDec( spec_frame ) ) {
-                     for( ispec = 0; ispec < nspec; ispec++ ) {
-                        astRegSetAttrib( spec_list[ ispec ], raset, NULL );
-                        astRegSetAttrib( spec_list[ ispec ], decset, NULL );
-                     }
-   
-                     if( spec_frame ) {
-                        astSetRefRA( (AstSpecFrame *) spec_frame, raref );
-                        astSetRefDec( (AstSpecFrame *) spec_frame, decref );
-                     }
-                  }
-   
-                  if( !red_frame || !astTestRefRA( red_frame ) ||
-                                    !astTestRefDec( red_frame ) ) {
-                     for( ired = 0; ired < nred; ired++ ) {
-                        astRegSetAttrib( red_list[ ired ], raset, NULL );
-                        astRegSetAttrib( red_list[ ired ], decset, NULL );
-                     }
-   
-                     if( red_frame ) {
-                        astSetRefRA( (AstSpecFrame *) red_frame, raref );
-                        astSetRefDec( (AstSpecFrame *) red_frame, decref );
-                     }
-                  }               
-
-                  for( ianc = 0; ianc < nanc; ianc++ ) {
-                     for( k = 0; k < 5; k++ ) {
-                        if( astMapGet0A( ancs[ ianc ], key[ k ], &o ) ) {
-                           r = (AstRegion *) o;
-                           astRegSetAttrib( r, raset, NULL );
-                           astRegSetAttrib( r, decset, NULL );
-                           r = astAnnul( r );
-                        }
-                     }
-                  }
-
-/* Free resources. */
-                  if( raset ) raset = astFree( raset );
-                  if( decset ) decset = astFree( decset );
-
-               } else if( astOK ) {
-                  astError( AST__INTER, "AstroCoordAreaReader(XmlChan):"
-                            " Cannot convert spatial position to FK5 J2000" , status);
-               }
-            }
-
-/* If a time region was specified, use a typical value as the epoch for 
-   all Frames. Call MakeMJD to convert "time_val" from the system of the 
-   TimeFrame to an MJD (as required by the Frame Epoch attribute). Set
-   the value in both the returned Region and the supplied Frame. */
-            if( time_val != AST__BAD ) { 
-               fr = astRegFrame( time_list[ 0 ] );
-               if( astIsATimeFrame( fr ) ) {
-                  time_val = MakeMJD( (AstTimeFrame *) fr, time_val, status );
-               } else if( astOK ) {
-                  astError( AST__INTER, "AstroCoordAreaReader(XmlChan): %s "
-                            "supplied where TimeFrame expected (internal "
-                            "AST programming error).", status, astGetClass( fr ) );
-               }
-               fr = astAnnul( fr ); 
-
-               sprintf( buff, "epoch= MJD %.*g", DBL_DIG, time_val );
-
-               if( !space_frame || !astTestEpoch( space_frame ) ) {
-                  for( ispace = 0; ispace < nspace; ispace++ ) {
-                     astRegSetAttrib( space_list[ ispace ], buff, NULL );
-                  }
-                  if( space_frame ) astSetEpoch( space_frame, time_val );
-               }
-
-               if( !spec_frame || !astTestEpoch( spec_frame ) ) {
-                  for( ispec = 0; ispec < nspec; ispec++ ) {
-                     astRegSetAttrib( spec_list[ ispec ], buff, NULL );
-                  }
-                  if( spec_frame ) astSetEpoch( spec_frame, time_val );
-               }
-
-               if( !red_frame || !astTestEpoch( red_frame ) ) {
-                  for( ired = 0; ired < nred; ired++ ) {
-                     astRegSetAttrib( red_list[ ired ], buff, NULL );
-                  }
-                  if( red_frame ) astSetEpoch( red_frame, time_val );
-               }
-
-               for( ianc = 0; ianc < nanc; ianc++ ) {
-                  for( k = 0; k < 5; k++ ) {
-                     if( astMapGet0A( ancs[ ianc ], key[ k ], &o ) ) {
-                        r = (AstRegion *) o;
-                        astRegSetAttrib( r, buff, NULL );
-                        r = astAnnul( r );
-                     }
-                  }
-               }
-
-            }
-
-/* If the spectral regions cover only a single point, format it with its
-   units so that the astSetAttrib function can convert it to Hz and use
-   it as the rest frequency for any redshift Frames. */
-            if( spec_val != AST__BAD && nred > 0 ) { 
-
-               text = astGetUnit( spec_frame, 0 );
-               if( text ) sprintf( buff, "restfreq= %.*g %s", DBL_DIG, 
-                                   spec_val, text );
-
-               if( !red_frame || !astTestRestFreq( red_frame ) ) {
-                  for( ired = 0; ired < nred; ired++ ) {
-                     astRegSetAttrib( red_list[ ired ], buff, NULL );
-                  }
-                  if( red_frame ) astSetAttrib( red_frame, buff );
-               }
-
-               for( ianc = 0; ianc < nanc; ianc++ ) {
-                  for( k = 0; k < 5; k++ ) {
-                     if( astMapGet0A( ancs[ ianc ], key[ k ], &o ) ) {
-                        r = (AstRegion *) o;
-                        astRegSetAttrib( r, buff, NULL );
-                        r = astAnnul( r );
-                     }
-                  }
-               }
-            }
-
-/* Create Regions corresponding to every possible combination of interval
-   on each axis type, and assemble the union of these into a CmpRegion (if 
-   there is more than one). */
-            sum = NULL;
-   
-/* Initialise indices of the sub-Frame intervals to use. */
-            ispace = 0;
-            itime = 0;
-            ispec = 0;
-            ired = 0;
-
-/* Loop over all possible combinations of time+space+spec+red intervals. */
-            while( 1 ) {
-               rspace = ( ispace < nspace ) ? space_list[ ispace ] : NULL;
-               rtime = ( itime < ntime ) ? time_list[ itime ] : NULL;
-               rspec = ( ispec < nspec ) ? spec_list[ ispec ] : NULL;
-               rred = ( ired < nred ) ? red_list[ ired ] : NULL;
-
-/* Prism Regions extrude a Region into higher dimensions, and the
-   extrusion is defined by an Interval. Spatial Regions are not
-   restricted to Intervals and so any spatial Region must be the first
-   Region to be included in the Prism (all the other axis types *are*
-   restricted to Intervals and so can be used to extrude the spatial 
-   region). */
-               reg = rspace ? astClone( rspace ) : NULL;
-   
-/* Now extrude this region (if any) into the time axis. */
-               if( rtime ) {
-                  if( reg ) {
-                     tmp = (AstRegion *) astPrism( reg, rtime, "", status );
-                     (void) astAnnul( reg );
-                     reg = tmp;
-                  } else {
-                     reg = astClone( rtime );
-                  }
-               }   
-   
-/* Now extrude this region (if any) into the spectral axis. */
-               if( rspec ) {
-                  if( reg ) {
-                     tmp = (AstRegion *) astPrism( reg, rspec, "", status );
-                     (void) astAnnul( reg );
-                     reg = tmp;
-                  } else {
-                     reg = astClone( rspec );
-                  }
-               }   
-   
-/* Now extrude this region (if any) into the redshift axis. */
-               if( rred ) {
-                  if( reg ) {
-                     tmp = (AstRegion *) astPrism( reg, rred, "", status );
-                     (void) astAnnul( reg );
-                     reg = tmp;
-                  } else {
-                     reg = astClone( rred );
-                  }
-               }   
-   
-
-/* If a Prism was created, add it into the CmpRegion which holds the
-   running sum of the union of all Prisms created so far. */
-               if( reg ) {
-                  if( !sum ) {
-                     sum = astClone( reg );
-                  } else {
-                     tmp = (AstRegion *) astCmpRegion( sum, reg, AST__OR, "", status );
-                     (void) astAnnul( sum );
-                     sum = tmp;
-                  }
-                  reg = astAnnul( reg );
-               }
-
-/* Increment the indices of the next set of sub-Frame Intervals to use.
-   Leave the while loop when all combinations have been done. */
-               if( ++ired >= nred ) {
-                  ired = 0;
-                  if( ++ispec >= nspec ) {
-                     ispec = 0;
-                     if( ++itime >= ntime ) {
-                        itime = 0;
-                        if( ++ispace >= nspace ) break;
-                     }
-                  }
-               }
-            }
-
-/* Simplify the total sum Region. */
-            tmp = astSimplify( sum );
-            (void) astAnnul( sum );
-            sum = tmp;
-   
-/* The axes in this sum Region may not be in the correct order or units (i.e 
-   in the order and units specified in the supplied Frame). So use
-   astConvert to get a Mapping from the Frame represented by the sum
-   Region to the supplied Frame. */
-            fs = astConvert( sum, frm, "" );
-            if( fs ) {
-   
-/* Unless the Mapping is a UnitMap, remap the sum Region into the
-   supplied Frame using this Mapping. */
-               map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-               if( !astIsAUnitMap( map ) ) {
-                  new = astMapRegion( sum, map, frm );
-               } else {
-                  new = astClone( sum );
-               }
-   
-               map = astAnnul( map );
-               fs = astAnnul( fs );
-   
-            } else if( astOK ) {
-               astError( AST__INTER, "AstroCoordAreaReader(%s): Cannot "
-                         "convert from supplied Frame to internal Frame (AST "
-                         "internal programming error).", status, astGetClass( this ) );
-            }
-
-/* Transfer selected properties from the supplied Frame to the current Frame
-   of the returned Region. */
-            cfrm = astRegFrame( new );
-            if( astTestIdent( frm ) ) astSetIdent( cfrm, astGetIdent( frm ) );
-            if( astTestTitle( frm ) ) astSetTitle( cfrm, astGetTitle( frm ) );
-
-/* Ensure the Epoch is set correctly in the Region */
-            if( time_val != AST__BAD ) {
-               sprintf( buff, "epoch= MJD %.*g", DBL_DIG, time_val );
-               astRegSetAttrib( new, buff, NULL );
-            }
-
-/* Free resources. */
-            cfrm = astAnnul( cfrm );
-            sum = astAnnul( sum );
-         }
-   
-         if( space_list ) {
-            for( i = 0; i < nspace; i++ ) space_list[ i ] = astAnnul( space_list[ i ]  );
-            space_list = astFree( space_list );
-         }
-   
-         if( time_list ) {
-            for( i = 0; i < ntime; i++ ) time_list[ i ] = astAnnul( time_list[ i ]  );
-            time_list = astFree( time_list );
-         }
-   
-         if( spec_list ) {
-            for( i = 0; i < nspec; i++ ) spec_list[ i ] = astAnnul( spec_list[ i ]  );
-            spec_list = astFree( spec_list );
-         }
-   
-         if( red_list ) {
-            for( i = 0; i < nred; i++ ) red_list[ i ] = astAnnul( red_list[ i ]  );
-            red_list = astFree( red_list );
-         }
-   
-      }
-
-      if( space_frame ) space_frame = astAnnul( space_frame );
-      if( time_frame ) time_frame = astAnnul( time_frame );
-      if( spec_frame ) spec_frame = astAnnul( spec_frame );
-      if( red_frame ) red_frame = astAnnul( red_frame );
-
-/* Get the ID attribute from the AstroCoordArea element and store in the 
-   returned Region. */
-      id = astXmlGetAttributeValue( elem, "ID" );
-      if( id ) astSetIdent( new, id );
-
-   }
-
-/* If an error has occurred,annul the returned pointer. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static int AstroCoordsReader( AstXmlChan *this, AstXmlElement *elem,
-                              AstFrame *frm, AstRegion *uncs[4],
-                              AstKeyMap **anc, int *status ) {
-/*
-*  Name:
-*     AstroCoordsReader
-
-*  Purpose:
-*     Modify a Frame to take account of an IVOA AstroCoords element, and
-*     return an coordinate uncertainties.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int AstroCoordsReader( AstXmlChan *this, AstXmlElement *elem,
-*                            AstFrame *frm, AstRegion *uncs[4],
-*                            AstKeyMap **anc, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function modifies the supplied Frame object to incorporate the
-*     effects of the supplied AstroCoords element. It may also return 
-*     Regions representing the bounds of the uncertainties in the four 
-*     component coordinate Frames, depending on the contents of the 
-*     AstroCoords element.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA AstroCoords element. 
-*     frm
-*        The Frame object to modify.
-*     uncs
-*        Array in which to return pointers to the uncertainty Regions to
-*        be associated with each of the four STC domains (space, time,
-*        spectral, redshift). NULL is returned in any element for which
-*        no uncertainty is specified within the supplied AstroCoords element.
-*     anc
-*        Address of a location at which to store the pointer to a newly
-*        created KeyMap holding ancillary information describing the
-*        AstroCoords element in the form required by constructors of AST 
-*        Stc objects. A NULL pointer is returned if no usable ancillary
-*        information is found in the AstroCoords.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Non-zero if any non-NULL values have been returned in the "uncs"
-*     array. Zero otherwise.
-
-*/
-
-/* Local Variables: */
-   AstFrame *afrm;               /* Pointer to axis Frame */
-   AstFrame *gfrm;                /* Pointer to generic Frame */
-   AstFrame *pfrm;               /* Pointer to position Frame */
-   AstFrame *rfrm;               /* Pointer to redshift Frame */
-   AstFrame *sfrm;               /* Pointer to spectral Frame */
-   AstTimeFrame *tfrm;           /* Pointer to time Frame */
-   AstKeyMap *panc;              /* KeyMap holding spatial ancillary data */
-   AstKeyMap *ranc;              /* KeyMap holding redshift ancillary data */
-   AstKeyMap *sanc;              /* KeyMap holding spectral ancillary data */
-   AstKeyMap *tanc;              /* KeyMap holding temporal ancillary data */
-   AstObject *o;                 /* Pointer to object retrieved from KeyMap */
-   AstRegion *r;                 /* Individual ancillary Region */
-   AstRegion *t;                 /* Total extruded ancillary Region */
-   AstRegion *tt;                /* Temporary Region pointer */
-   AstXmlElement *el;            /* Pointer to Position2D element */
-   IVOAScan *scan;               /* Structure holding scan results */
-   char **anames;                /* Pointer to list of ancillary name pointers */
-   const char *dom;              /* Pointer to Domain attribute value */
-   const char *nam;              /* Pointer to ancillary Name string */
-   const char *names[4];         /* Names of the subelements to be searched for */
-   char buff[100];               /* Message buffer */
-   double epoch;                 /* Epoch */
-   double hi;                    /* High limit for zero-width interval */
-   double lo;                    /* Low limit for zero-width interval */
-   double pos[2];                /* Reference spatial position */
-   double rf;                    /* Rest frequency */
-   int axes[2];                  /* Indices of position axes */
-   int axis;                     /* Index of next axis to use */
-   int empty;                    /* Is returned KeyMap empty? */
-   int i;                        /* Loop count */
-   int isearth;                  /* Does the SkyFrame represent terrestrial lon/lat? */
-   int junk;                     /* Unused integer value */
-   int max[4];                   /* Max allowed occurrences of each name */
-   int min[4];                   /* Min allowed occurrences of each name */
-   int nax;                      /* Number of axes in supplied Frame */
-   int unc;                      /* Any uncertainty Regions found? */
-   int use;                      /* Use ancillary information? */
-
-   static const char *key[ 5 ] = { AST__STCERROR, 
-                                   AST__STCRES,
-                                   AST__STCSIZE,
-                                   AST__STCPIXSZ,
-                                   AST__STCVALUE };
-/* Initialise */
-   unc = 0;
-   uncs[ 0 ] = NULL;
-   uncs[ 1 ] = NULL;
-   uncs[ 2 ] = NULL;
-   uncs[ 3 ] = NULL;
-   *anc = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return unc;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Position2D|Position3D";
-   names[ 1 ] = "Time";
-   names[ 2 ] = "Spectral";
-   names[ 3 ] = "Redshift";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   min[ 3 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   max[ 2 ] = 1;
-   max[ 3 ] = 1;
-   scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Initialise pointers to component Frames */
-      pfrm = NULL;
-      tfrm = NULL;
-      sfrm = NULL;
-      rfrm = NULL;
-
-/* Initialise pointers to KeyMaps holding ancillary data. */ 
-      panc = NULL;
-      tanc = NULL;
-      sanc = NULL;
-      ranc = NULL;
-
-/* Allocate storage for an array of pointers to strings holding the Name 
-   value for each axis. Initialise them to a null string. */
-      nax = astGetNaxes( frm );
-      anames = astMalloc( sizeof( char * )*(size_t)nax );
-      for( i = 0; i < nax; i++ ) anames[ i ] = NULL;
-
-/* Initialise the index of the next Frame axis to use. */
-      axis = 0;
-
-/* Check to see if the next 2 axes describe positions on the sky or earth
-   (see SpaceFrameReader). */
-      axes[ 0 ] = 0;
-      axes[ 1 ] = 1;
-      afrm = astPickAxes( frm, 2, axes, NULL );
-      dom = astGetDomain( afrm );
-      isearth = dom && ( !strcmp( dom, "GEO_D" ) || 
-                         !strcmp( dom, "GEO_C" ) );
-
-      if( isearth || ( dom && !strcmp( dom, "SKY" ) ) ){
-         astPrimaryFrame( frm, axis, &pfrm, &junk );
-         if( scan->count[ 0 ] ) {
-            
-/* We currently also use SkyFrames to represent geographical long/lat used to
-   describe observatory positions. These may have 3D positions, in which
-   case we convert the 3D position to a 2D position by ignoring the 3rd axis
-   value (height). See SpaceFrameReader. */
-            el = MakePos2D( this, scan->el[ 0 ][ 0 ], status );
-                        
-/* Use the Position2D to create a Region describing the uncertainty in 
-   the space axes of the Frame. Also create a KeyMap holding Regions
-   describing any ancillary information stored in the Position2D. */
-            uncs[ 0 ] = Position2DReader( this, el, pfrm, pos, &panc, status );
-            if( uncs[ 0 ] ) unc = 1;
-            el = astXmlDelete( el );
-
-/* If ancillary information was returned, extract the Name element, and 
-   store it twice (once for each axis) in the "names" array. */
-            if( panc && astMapGet0C( panc, AST__STCNAME, &nam ) ) {
-               anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
-               anames[ axis + 1 ] = astStore( NULL, nam, strlen( nam ) + 1 );
-               nam = astFree( (void *) nam );
-            }
-         }
-
-/* Increment the axis index. */
-         axis += 2;
-
-/* If the supplied Frame has no sky frame, but we found a Position2D, then 
-   report a warning and ignore the Position2D. */
-      } else if( scan->count[ 0 ] ) {
-         sprintf( buff, "contains a <%s> which is not being used.",
-                  astXmlGetName( scan->el[ 0 ][ 0 ] ) );
-         Report( this, elem, WARNING, buff, status );
-      }
-      afrm = astAnnul( afrm );
-
-/* Indicate we do not yet have an epoch to use. */
-      epoch = AST__BAD;
-
-/* Check to see if the Frame contains a time frame. It will be the next 
-   axis if it does. */
-      afrm = astPickAxes( frm, 1, &axis, NULL );
-      dom = astGetDomain( afrm );
-      if( dom && !strcmp( dom, "TIME" ) ){
-         astPrimaryFrame( frm, axis, &gfrm, &junk );
-
-/* Report an error if it is not an AST TimeFrame. */
-         if( !astIsATimeFrame( gfrm ) && astOK ) {
-            astError( AST__INTER, "AstroCoordAreaReader(XmlChan): %s "
-                      "supplied where TimeFrame expected (internal "
-                      "AST programming error).", status, astGetClass( pfrm ) );
-         } else {
-            tfrm = (AstTimeFrame *) gfrm;
-         }
-
-/* Use any Time element to create a Region describing the uncertainty in the 
-   time axis of the Frame. Also create a KeyMap holding Regions describing 
-   any ancillary information stored in the Time element. */
-         if( scan->count[ 1 ] ) {
-            uncs[ 1 ] = TimeReader( this, scan->el[ 1 ][ 0 ], tfrm, &epoch,
-                                    &tanc, status );
-            if( uncs[ 1 ] ) unc = 1;
-
-/* If ancillary information was returned, extract the Name element, and 
-   store it in the "names" array. */
-            if( tanc && astMapGet0C( tanc, AST__STCNAME, &nam ) ) {
-               anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
-               nam = astFree( (void *) nam );
-            }
-         }
-
-/* Increment the index of the next axis to use. */
-         axis++;
-
-/* If the supplied Frame has no time frame, but we found a Time element, then 
-   report a warning and ignore the Time element. */
-      } else if( scan->count[ 1 ] ) {
-         Report( this, elem, WARNING, "contains a <Time> which is not needed", status );
-      }
-      afrm = astAnnul( afrm );
-
-/* Indicate we do not yet have a rest frequency to use with any redshift
-   axis. */
-      rf = AST__BAD;
-
-/* Check to see if the Frame contains a spectral frame. It will be the next 
-   axis if it does. */
-      afrm = astPickAxes( frm, 1, &axis, NULL );
-      dom = astGetDomain( afrm );
-      if( dom && !strcmp( dom, "SPECTRUM" ) ){
-         astPrimaryFrame( frm, axis, &sfrm, &junk );
-
-/* Use any Spectral to create a Region describing the uncertainty in the 
-   spectral axis of the Frame. If the Spectral contains a spectral value, the 
-   first value will be returned so that it can be used  as the rest frequency 
-   for any Redshift axis. It will be in units of Hz and will be AST__BAD if 
-   the Spectral did not contain any spectral values. Also create a KeyMap 
-   holding Regions describing any ancillary information stored in the
-   Spectral element. */
-         if( scan->count[ 2 ] ) {
-            uncs[ 2 ] = SpectralReader( this, scan->el[ 2 ][ 0 ], sfrm, &rf, 
-                                        &sanc, status );
-            if( uncs[ 2 ] ) unc = 1;
-
-/* If ancillary information was returned, extract the Name element, and 
-   store it in the "names" array. */
-            if( sanc && astMapGet0C( sanc, AST__STCNAME, &nam ) ) {
-               anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
-               nam = astFree( (void *) nam );
-            }
-         }
-
-/* Increment the index of the next axis to use. */
-         axis++;
-
-/* If the supplied Frame has no spectral frame, but we found a Spectral 
-   element, then report a warning and ignore the Spectral element. */
-      } else if( scan->count[ 2 ] ) {
-         Report( this, elem, WARNING, "contains a <Spectral> which is not needed", status );
-      }
-      afrm = astAnnul( afrm );
-
-/* Check to see if the Frame contains a redshift frame. It will be the next 
-   axis if it does. */
-      afrm = astPickAxes( frm, 1, &axis, NULL );
-      dom = astGetDomain( afrm );
-      if( dom && !strcmp( dom, "REDSHIFT" ) ){
-         astPrimaryFrame( frm, axis, &rfrm, &junk );
-
-/* Use any Redshift to create a Region describing the uncertainty in the 
-   redshift axis of the Frame. Also create a KeyMap holding Regions describing 
-   any ancillary information stored in the Redshift element. */
-         if( scan->count[ 3 ] ) {
-            uncs[ 3 ] = RedshiftReader( this, scan->el[ 3 ][ 0 ], rfrm, 
-                                        &ranc, status );
-            if( uncs[ 3 ] ) unc = 1;
-
-/* If ancillary information was returned, extract the Name element, and 
-   store it in the "names" array. */
-            if( ranc && astMapGet0C( ranc, AST__STCNAME, &nam ) ) {
-               anames[ axis ] = astStore( NULL, nam, strlen( nam ) + 1 );
-               nam = astFree( (void *) nam );
-            }
-         }
-
-/* Increment the index of the next axis to use. */
-         axis++;
-
-/* If the supplied Frame has no redshift frame, but we found a Redshift 
-   element, then report a warning and ignore the Redshift element. */
-      } else if( scan->count[ 3 ] ) {
-         Report( this, elem, WARNING, "contains a <Redshift> which is not needed", status );
-      }
-      afrm = astAnnul( afrm );
-
-/* Now assign fixed axis values (Epoch, RestFreq, etc) to the component 
-   Frames of the supplied Frame. */
-      if( epoch != AST__BAD ) {
-         if( pfrm ) astSetEpoch( pfrm, epoch );
-         if( tfrm ) astSetEpoch( tfrm, epoch );
-         if( sfrm ) astSetEpoch( sfrm, epoch );
-         if( rfrm ) astSetEpoch( rfrm, epoch );
-         astSetEpoch( frm, epoch );
-      }
-
-      if( sfrm && pfrm && astIsASpecFrame( sfrm ) && astIsASkyFrame( pfrm ) && 
-          !isearth && pos[ 0 ] != AST__BAD && pos[ 1 ] != AST__BAD ) {
-         astSetRefPos( sfrm, pfrm, pos[ 0 ], pos[ 1 ] );
-      }
-
-      if( rfrm && astIsASpecFrame( rfrm ) && rf != AST__BAD ) {
-         astSetRestFreq( rfrm, rf );
-         if( pfrm && astIsASkyFrame( pfrm ) && !isearth && 
-             pos[ 0 ] != AST__BAD && pos[ 1 ] != AST__BAD ) {
-            astSetRefPos( rfrm, pfrm, pos[ 0 ], pos[ 1 ] );
-         }
-      }
-
-/* Now combine ancillary data for each component Frame into the total
-   Frame. */
-      *anc = astKeyMap( "", status );
-      if( *anc ) {
-         empty = 1;
-
-/* Store the Names element if at least one axis has a Name item. */
-         for( i = 0; i < nax; i++ ) {
-            if( !anames[ i ] ) anames[ i ] = astStore( NULL, "", 1 );
-         }
-   
-         for( i = 0; i < nax; i++ ) {
-            if( empty && strlen( anames[ i ] ) > 0 ) {
-               astMapPut1C( *anc, AST__STCNAME, nax, (const char **) anames, NULL );
-               empty = 0;
-            }
-            anames[ i ] = astFree( anames[ i ] );
-         }      
-   
-/* Do each of the other items, all of which are described by a Region. */
-         lo = 0.0;
-         hi = 0.0;
-         for( i = 0; i < 5; i++ ) { 
-   
-/* Initialise a flag indicating that we have not yet found any non-null
-   information to store for this item. */
-            use = 0;
-   
-/* Initialise a pointer to the Region describing the item extruded into
-   all axes. */
-            t = NULL;
-      
-/* If there is a positional Frame, determine the Region describing the
-   intersection of the total Region with the position Frame. If none is
-   supplied use a zero width Interval as a flag that no information is 
-   available. */
-            if( pfrm ) {
-               if( panc && astMapGet0A( panc, key[ i ], &o ) ) {
-                  t = (AstRegion *) o;
-                  use = 1;
-               } else {
-                  t = (AstRegion *) astInterval( pfrm, &lo, &hi, NULL, "", status );
-               }
-            }
-      
-/* If there is a time Frame, determine the Region describing the intersection 
-   of the total Region with the time Frame. If none is supplied use a zero 
-   width Interval as a flag that no information is available. */
-            if( tfrm ) {
-               if( tanc && astMapGet0A( tanc, key[ i ], &o ) ) {
-                  r = (AstRegion *) o;
-                  use = 1;
-               } else {
-                  r = (AstRegion *) astInterval( tfrm, &lo, &hi, NULL, "", status );
-               }
-      
-/* If there were earlier axes, extrude the current total region into the
-   time axis, and use the extruded region as the new total region.*/
-               if( t ) {
-                  tt = (AstRegion *) astPrism( t, r, "", status );
-                  r = astAnnul( r );
-                  (void) astAnnul( t );
-                  t = tt;
-   
-/* If this is the first axis, use the region determined for this axis as
-   the total Region.*/
-               } else {
-                  t = r;
-               }
-            }
-      
-/* Do the same for any spectral axis. */
-            if( sfrm ) {
-               if( sanc && astMapGet0A( sanc, key[ i ], &o ) ) {
-                  r = (AstRegion *) o;
-                  use = 1;
-               } else {
-                  r = (AstRegion *) astInterval( sfrm, &lo, &hi, NULL, "", status );
-               }
-      
-               if( t ) {
-                  tt = (AstRegion *) astPrism( t, r, "", status );
-                  r = astAnnul( r );
-                  (void) astAnnul( t );
-                  t = tt;
-               } else {
-                  t = r;
-               }
-      
-            }
-      
-/* Do the same for any redshift axis. */
-            if( rfrm ) {
-               if( ranc && astMapGet0A( ranc, key[ i ], &o ) ) {
-                  r = (AstRegion *) o;
-                  use = 1;
-               } else {
-                  r = (AstRegion *) astInterval( rfrm, &lo, &hi, NULL, "", status );
-               }
-      
-               if( t ) {
-                  tt = (AstRegion *) astPrism( t, r, "", status );
-                  r = astAnnul( r );
-                  (void) astAnnul( t );
-                  t = tt;
-               } else {
-                  t = r;
-               }
-            }
-      
-/* If there is some non-null information for this item, replace the
-   stored Frame with the Frame which has set Epoch/RefLat/etc, simplify the
-   total Region and store it in the returned KeyMap. */
-            if( use ) {
-               astSetRegFS( t, frm );
-               tt = astSimplify( t );
-               astMapPut0A( *anc, key[ i ], tt, NULL );
-               tt = astAnnul( tt );
-               empty = 0;
-            }
-            if( t ) t = astAnnul( t );
-         }
-   
-/* Return a NULL KeyMap pointer if the KeyMap is empty. */
-         if( empty ) *anc = astAnnul( *anc );
-      }
-
-/* Free resources. */
-      if( panc ) panc = astAnnul( panc );
-      if( tanc ) tanc = astAnnul( tanc );
-      if( sanc ) sanc = astAnnul( sanc );
-      if( ranc ) ranc = astAnnul( ranc );
-      if( pfrm ) pfrm = astAnnul( pfrm );
-      if( tfrm ) tfrm = astAnnul( tfrm );
-      if( sfrm ) sfrm = astAnnul( sfrm );
-      if( rfrm ) rfrm = astAnnul( rfrm );
-      scan = FreeIVOAScan( scan, status );
-      anames = astFree( anames );
-   }
-
-/* Annull any returned Regions if an error occurred.*/
-   if( !astOK ) {
-      uncs[ 0 ] = astAnnul( uncs[ 0 ] );
-      uncs[ 1 ] = astAnnul( uncs[ 1 ] );
-      uncs[ 2 ] = astAnnul( uncs[ 2 ] );
-      uncs[ 3 ] = astAnnul( uncs[ 3 ] );
-      unc = 0;
-      *anc = astAnnul( *anc );
-   }
-
-/* Return the result. */
-   return unc;     
-}
-
-static AstObject *AstroCoordSystemReader( AstXmlChan *this, 
-                                          AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     AstroCoordSystemReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA AstroCoordSystem element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *AstroCoordSystemReader( AstXmlChan *this, 
-*                                        AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     AstroCoordSystem element. This will be a Frame of some kind. 
-*     If the AstroCoordSystem element contains only one sub-frame
-*     element, then the returned Frame will be of a suitable class
-*     to describe that sub-frame (SkyFrame, SpecFrame or TimeFrame).
-*     If the AstroCoordSystem element contains more than one sub-frame
-*     element, then the returned Frame will be a CmpFrame in which the 
-*     component Frames are in the order SpaceFrame, TimeFrame, 
-*     SpectralFrame, RedshiftFrame.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA AstroCoordSystem element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*  Notes:
-*     - GenericCoordFrame sub-elements are currently ignored since it is not 
-*     clear how they relate to the other sub-elements.
-
-*/
-
-/* Local Variables: */
-   AstCmpFrame *tmp;             /* Pointer to intermediate CmpFrame */
-   AstFrame *comp[ 4 ];          /* Pointers to component Frames */
-   AstObject *new;               /* Pointer to returned Object */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *id;               /* Pointer to ID attribute value */
-   const char *names[4];         /* Names of the subelements to be searched for */
-   int i;                        /* Index of current content item */
-   int j;                        /* Index to store Frame pointer at */
-   int max[4];                   /* Max allowed occurrences of each name */
-   int min[4];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = SPACE_FRAME;
-   names[ 1 ] = TIME_FRAME;
-   names[ 2 ] = SPECTRAL_FRAME;
-   names[ 3 ] = REDSHIFT_FRAME;
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   min[ 3 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   max[ 2 ] = 1;
-   max[ 3 ] = 1;
-   scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create Frames from the found sub-elements */
-      comp[ 0 ] = scan->count[0] ? (AstFrame *) SpaceFrameReader( this, 
-                                                   scan->el[ 0 ][ 0 ], status ) : NULL;
-      comp[ 1 ] = scan->count[1] ? (AstFrame *) TimeFrameReader( this, 
-                                                   scan->el[ 1 ][ 0 ], status ) : NULL;
-      comp[ 2 ] = scan->count[2] ? (AstFrame *) SpectralFrameReader( this, 
-                                                   scan->el[ 2 ][ 0 ], status ) : NULL;
-      comp[ 3 ] = scan->count[3] ? (AstFrame *) RedshiftFrameReader( this, 
-                                                   scan->el[ 3 ][ 0 ], status ) : NULL;
-
-/* If more than one frame was obtained combine them into a CmpFrame. If
-   present, the Frames are stored in the order SpaceFrame, TimeFrame, 
-   SpectralFrame, RedshiftFrame. Shuffle the the higher elements of the 
-   "comp" array down to fill any NULL elements. */
-      j = 0;
-      for( i = 0; i < 4; i++ ) {
-         if( comp[ i ] ) {
-            comp[ j++ ] = comp[ i ];
-         }
-      }
-
-/* Fill any unused elements at the end with NULL. */
-      for( ; j < 4; j++ ) comp[ j ] = NULL;
-   
-/* If no Frames were read issue a fatal error. */
-      if( !comp[ 0 ] ) {
-         Report( this, elem, FAILURE, "contains no usable coordinate axes", status );
-   
-/* If only one Frame was read return a clone of its pointer. */
-      } else if( !comp[ 1 ] ) {
-         new = astClone( comp[ 0 ] );
-   
-/* If two or more Frames were read, create a CmpFrame holding the Frames. */
-      } else if( !comp[ 2 ] ) {
-         new = (AstObject *) astCmpFrame( comp[ 0 ], comp[ 1 ], "", status );
-   
-      } else if( !comp[ 3 ] ) {
-         tmp = astCmpFrame( comp[ 0 ], comp[ 1 ], "", status );
-         new = (AstObject *) astCmpFrame( tmp, comp[ 2 ], "", status );
-         tmp = astAnnul( tmp );
-   
-      } else {
-         tmp = astCmpFrame( comp[ 0 ], comp[ 1 ], "", status );
-         (void) astAnnul( comp[ 0 ] );
-         comp[ 0 ] = (AstFrame *) tmp;
-         tmp = astCmpFrame( comp[ 0 ], comp[ 2 ], "", status );
-         new = (AstObject *) astCmpFrame( tmp, comp[ 3 ], "", status );
-         tmp = astAnnul( tmp );
-      }
-   
-/* Get the ID attribute from the AstroCoordSystem element and store in the 
-   returned Frame. */
-      id = astXmlGetAttributeValue( elem, "ID" );
-      if( id ) astSetIdent( new, id );
-   
-/* Free resources */
-      for( i = 0; i < 4; i++ ) {
-         if( comp[ i ] ) comp[ i ] = astAnnul( comp[ i ] );
-      }
-      scan = FreeIVOAScan( scan, status );
-
-   }
-      
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
-   return new;
-}
-
-static double AstronTimeReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstTimeFrame *frm, int *status ){
-/*
-*  Name:
-*     AstronTimeReader
-
-*  Purpose:
-*     Read a time value from an IVOA AstronTime element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double AstronTimeReader( AstXmlChan *this, AstXmlElement *elem, 
-*                              AstTimeFrame *frm )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function returns a double representing the time specified by 
-*     the supplied IVOA AstronTime element, converted into the system 
-*     represented by the supplied Frame.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA AstronTime element.
-*     frm 
-*        Pointer to the TimeFrame in which the returned value should be
-*        defined. Relevant attributes which are not set will be set by
-*        this function if possible. 
-
-*  Returned Value:
-*     The time value, in the system described by "frm".
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;              /* FrameSet connecting two TimeFrames */
-   AstTimeFrame *cfrm;           /* TimeFrame describing XML time system */
-   AstTimeScaleType ts;          /* TimeScale */
-   IVOAScan *scan;               /* Structure holding scan results */
-   char buff[ 200 ];             /* Message buffer */
-   const char *iso;              /* Pointer to ISO date string */
-   const char *names[3];         /* Names of the subelements to be searched for */
-   const char *time_type;        /* Pointer to time type string */
-   const char *unit;             /* Pointer to Unit string */
-   double fval;                  /* Value converted to supplied TimeFrame */
-   double offset;                /* Time offset */
-   double result;                /* Time offset converted to required TimeFrame */
-   double val;                   /* Value read from element */
-   int max[3];                   /* Max allowed occurrences of each name */
-   int min[3];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   offset = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return offset;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "JDTime|MJDTime|ISOTime";
-   names[ 1 ] = "TimeOffset";
-   names[ 2 ] = "TimeScale|Timescale";
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   max[ 2 ] = 1;
-   scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* The supplied TimeFrame describes the system in which the caller wants
-   the time values to be returned. This may not be the same as the system
-   in which the value is stored in the XML. We create a TimeFrame
-   describing the XML system, and later transform time values from the XML
-   system to the system required by the caller. Any attributes of the XML
-   system which are not specified in the XML are assumed to be equal to
-   the values of the corresponding attributes in the supplied TimeFrame.
-   If the XML system specifies values for attributes which have not been
-   set in the supplied TimeFrame, then the values read fomr the XML are
-   assigned to the attributes of the supplied TimeFrame. */
-      cfrm = astCopy( frm );
-
-      if( scan->count[2] ) {
-         ts = TimeScaleReader( this, scan->el[2][0], status );
-         astSetTimeScale( cfrm, ts );
-         if( !astTestTimeScale( frm ) ) astSetTimeScale( frm, ts );
-      }
-
-/* If a JDTime element was found, get its value and set the TimeFrame System 
-   values. */
-      time_type = astXmlGetName( scan->el[0][0] );
-      if( !strcmp( "JDTime", time_type ) ) {
-         val = ElemValueD( this, scan->el[0][0], 2400000.5, status );
-         astSetSystem( cfrm, AST__JD );
-         if( !astTestSystem( frm ) ) astSetSystem( frm, AST__JD );
-
-/* If a ISOTime element was found, get its value and set the TimeFrame
-   System attribute to MJD (the choice of AST System for an ISOTime is
-   arbitrary - JD or JEPOCH could also have been used). */
-      } else if( !strcmp( "ISOTime", time_type ) ) {
-         astSetSystem( cfrm, AST__MJD );
-         if( !astTestSystem( frm ) ) astSetSystem( frm, AST__MJD );
-         iso = astXmlGetValue( scan->el[0][0], 0 );
-         astClearTimeOrigin( cfrm );
-         if( iso && astUnformat( cfrm, 0, iso, &val ) != strlen( iso ) ) {
-            sprintf( buff, "contains unsupported ISO time format \"%s\"",
-                     iso );
-            Report( this, elem, FAILURE, buff, status );
-         }
-
-/* If an MJDTime was found, get its value and set System attributes. */
-      } else {
-         val = ElemValueD( this, scan->el[0][0], 2400000.5, status );
-         astSetSystem( cfrm, AST__MJD );
-         if( !astTestSystem( frm ) ) astSetSystem( frm, AST__MJD );
-      }
-
-/* Use this value as the TimeFrame's TimeOrigin value. Use the public
-   astSetD rather than astSetTimeOrigin since the later requires the
-   value to be supplied in the default units for the TimeFrame's System. */
-      astSetD( cfrm, "TimeOrigin", val );
-
-/* If the supplied Frame has no set TimeOrigin, also use the value
-   obtained above as the TimeOrigin in "frm". Convert it into the supplied 
-   TimeFrame, and set it. Note zero is used as the axis value in cfrm 
-   because the relevant epoch is zero distance away from the cfrm 
-   TimeOrigin (set above). */
-      if( !astTestTimeOrigin( frm ) ) {
-
-         fs = astConvert( cfrm, frm, "" );
-         if( fs ){
-            val = 0.0;
-            astTran1( fs, 1, &val, 1, &fval );
-            astSetD( frm, "TimeOrigin", fval );
-            fs = astAnnul( fs );
-         } else if( astOK ) {
-            sprintf( buff, "contains inconsistent timescale (%s)",
-                     astGetC( cfrm, "timescale" ) );
-            Report( this, elem, FAILURE, buff, status );
-         } 
-      }
-
-/* If an TimeOffset element was found, get its value and the value of its
-   unit attribute (assume a default of days). Set the units in the
-   TimeFrames. */
-      if( scan->count[1] ) {
-         offset = ElemValueD( this, scan->el[1][0], 0.0, status );
-         unit = astXmlGetAttributeValue( scan->el[1][0], "unit" );
-         if( !unit ) unit = "d";
-         astSetUnit( cfrm, 0, unit );
-         if( !astTestUnit( frm, 0 ) ) astSetUnit( frm, 0, unit );
-
-/* If no offset was given, use zero. */
-      } else {
-         offset = 0.0;
-      }
-
-/* Convert the offset from the system in which it is stored in the XML to
-   the system required by the caller. */
-      fs = astConvert( cfrm, frm, "" );
-      if( fs ){
-         astTran1( fs, 1, &offset, 1, &result );
-         fs = astAnnul( fs );
-      } else if( astOK ) {
-         sprintf( buff, "contains inconsistent timescale (%s)",
-                  astGetC( cfrm, "timescale" ) );
-         Report( this, elem, FAILURE, buff, status );
-      } 
-
-/* Free resources. */
-      cfrm = astAnnul( cfrm );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Return the time value. */
-   return result;
-}
-
-void astInitXmlChanVtab_(  AstXmlChanVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitXmlChanVtab
-
-*  Purpose:
-*     Initialise a virtual function table for an XmlChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void astInitXmlChanVtab( AstXmlChanVtab *vtab, const char *name )
-
-*  Class Membership:
-*     XmlChan vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the XmlChan class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstChannelVtab *channel;      /* Pointer to Channel component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitChannelVtab( (AstChannelVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAXmlChan) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstChannelVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-
-   vtab->SetXmlIndent = SetXmlIndent;
-   vtab->ClearXmlIndent = ClearXmlIndent;
-   vtab->TestXmlIndent = TestXmlIndent;
-   vtab->GetXmlIndent = GetXmlIndent;
-
-   vtab->SetXmlLength = SetXmlLength;
-   vtab->ClearXmlLength = ClearXmlLength;
-   vtab->TestXmlLength = TestXmlLength;
-   vtab->GetXmlLength = GetXmlLength;
-
-   vtab->SetXmlFormat = SetXmlFormat;
-   vtab->ClearXmlFormat = ClearXmlFormat;
-   vtab->TestXmlFormat = TestXmlFormat;
-   vtab->GetXmlFormat = GetXmlFormat;
-
-   vtab->SetXmlPrefix = SetXmlPrefix;
-   vtab->ClearXmlPrefix = ClearXmlPrefix;
-   vtab->TestXmlPrefix = TestXmlPrefix;
-   vtab->GetXmlPrefix = GetXmlPrefix;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   channel = (AstChannelVtab *) vtab;
-
-   channel->WriteBegin = WriteBegin;
-   channel->WriteIsA = WriteIsA;
-   channel->WriteEnd = WriteEnd;
-   channel->WriteInt = WriteInt;
-   channel->WriteDouble = WriteDouble;
-   channel->WriteString = WriteString;
-   channel->WriteObject = WriteObject;
-
-   channel->Read = Read;
-   channel->ReadClassData = ReadClassData;
-   channel->ReadDouble = ReadDouble;
-   channel->ReadInt = ReadInt;
-   channel->ReadObject = ReadObject;
-   channel->ReadString = ReadString;
-
-   parent_getfull = channel->GetFull;
-   channel->GetFull = GetFull;
-   parent_getcomment = channel->GetComment;
-   channel->GetComment = GetComment;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-/* Declare the class dump, copy and delete functions.*/
-   astSetCopy( vtab, Copy );
-   astSetDump( vtab, Dump, "XmlChan", "XML I/O channel" );
-   astSetDelete( vtab, Delete );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static double AttrValueD( AstXmlChan *this, AstXmlElement *elem, 
-                          const char *name, double def, int *status ) {
-/*
-*  Name:
-*     AttrValueD
-
-*  Purpose:
-*     Read a floating point XML element attribute value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double AttrValueD( AstXmlChan *this, AstXmlElement *elem, 
-*                        const char *name, double def, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function returns the value of a named attribute of an XML
-*     element as a floating point value. A report is made if the
-*     attribute value is not floating point.The supplied default value is
-*     returned if the attribute is not present.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XmlElement.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required attribute value. 
-*     def
-*        If the supplied element does not have the requried attribute, then 
-*        this value will be returned instead.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The required attribute value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
-   char buff[ 200 ];             /* Msg buffer */
-   const char *value;            /* Pointer to attribute value */
-   double result;                /* Value to be returned */
-   int nc;                       /* Number of characters read by astSscanf */
-   int nf;                       /* Number of matching fields */
-   int len;                      /* Length of attribute string */
-   
-/* Initialise. */
-   result = def;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the attribute value as a string. */
-   value = astXmlGetAttributeValue( elem, name );
-
-/* If the attribute exists, attempt to decode the string to give a double 
-   value, checking that the entire string is read. */
-   if( value ) {
-      nc = 0;
-      nf = astSscanf( value, " %lf %n", &result, &nc );
-      len = strlen( value );
-
-      if ( nf != 1 || nc < len ) {
-         sprintf( buff, "contains a bad <%s> value: \"%s\"", name, value );
-         Report( this, elem, WARNING, buff, status );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int AttrValueI( AstXmlChan *this, AstXmlElement *elem, const char *name,
-                       int def, int *status ) {
-/*
-*  Name:
-*     AttrValueI
-
-*  Purpose:
-*     Read an integer XML element attribute value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int AttrValueI( AstXmlChan *this, AstXmlElement *elem, const char *name,
-*                     int def )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function returns the value of a named attribute of an XML element 
-*     as an integer value. A report is made if the attribute value is not 
-*     integer. The supplied default value is returned if the attribute is not 
-*     present.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XmlElement.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required attribute value. 
-*     def
-*        If the supplied element does not have the requried attribute, then 
-*        this value will be returned instead.
-
-*  Returned Value:
-*     The required attribute value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
-   char buff[ 200 ];             /* Msg buffer */
-   const char *value;            /* Pointer to attribute value */
-   int result;                   /* Value to be returned */
-   int nc;                       /* Number of characters read by astSscanf */
-   int nf;                       /* Number of matching fields */
-   int len;                      /* Length of attribute string */
-   
-/* Initialise. */
-   result = def;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the attribute value as a string. */
-   value = astXmlGetAttributeValue( elem, name );
-
-/* If the attribute exists, attempt to decode the string to give an integer
-   value, checking that the entire string is read. */
-   if( value ) {
-      nc = 0;
-      nf = astSscanf( value, " %d %n", &result, &nc );
-      len = strlen( value );
-
-      if ( nf != 1 || nc < len ) {
-         sprintf( buff, "contains a bad <%s> value: \"%s\"", name, value );
-         Report( this, elem, WARNING, buff, status );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int AttrValueB( AstXmlChan *this, AstXmlElement *elem, const char *name,
-                       int def, int *status ) {
-/*
-*  Name:
-*     AttrValueB
-
-*  Purpose:
-*     Read a boolean XML element attribute value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int AttrValueB( AstXmlChan *this, AstXmlElement *elem, const char *name,
-*                     int def, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function returns the value of a named attribute of an XML element 
-*     as a boolean. A report is made if the attribute value is not 
-*     boolean. The supplied default value is returned if the attribute is not 
-*     present.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XmlElement.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required attribute value. 
-*     def
-*        If the supplied element does not have the requried attribute, then 
-*        this value will be returned instead.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The required attribute value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
-   char buff[ 200 ];             /* Msg buffer */
-   const char *value;            /* Pointer to attribute value */
-   int result;                   /* Value to be returned */
-   int i;                        /* Loop count */
-
-/* Define the recognised true and false strings. */
-   const char *true[ 5 ] = { "true", "TRUE", "yes", "YES", "1" };
-   const char *false[ 5 ] = { "false", "FALSE", "no", "NO", "0" };
-   
-/* Initialise. */
-   result = def;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the attribute value as a string. */
-   value = astXmlGetAttributeValue( elem, name );
-
-/* If the attribute exists, attempt to decode the string to give a boolean
-   value. */
-   if( value ) {
-
-/* Indicate the result has not yet been determined. */
-      result = -1;
-
-/* See if the attribute value is equal to (or an abbreviation of) any of
-   the true strings. */
-      for( i = 0; i < 5; i++ ) {
-         if( strstr( true[ i ], value ) == true[ i ] ) {
-            result = 1;
-            break;
-         }
-      }
-
-/* If not, see if the attribute value is equal to (or an abbreviation of) any 
-   of the false strings. */
-      if( result == -1 ) {
-         for( i = 0; i < 5; i++ ) {
-            if( strstr( false[ i ], value ) == false[ i ] ) {
-               result = 0;
-               break;
-            }
-         }
-      }
-
-/* If not, report a warning and return the default. */
-      if( result == -1 ) {
-         result = def;
-         sprintf( buff, "contains a bad <%s> value: \"%s\"", name, value );
-         Report( this, elem, WARNING, buff, status );
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *BoxReader( AstXmlChan *this, AstXmlElement *elem, 
-                             AstFrame *frm, int *status ){
-/*
-*  Name:
-*     BoxReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Box element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *BoxReader( AstXmlChan *this, AstXmlElement *elem, 
-*                           AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Box element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Box element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstMapping *map;              /* Mapping between units */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   const char *unit;             /* Centre and radii unit string */
-   double cen[2];                /* Centre */
-   double size[2];               /* Axis sizes */
-   double pos[8];                /* Polygon vertex axis values */
-   double *x;                    /* Pointer to first vertex X axis value */
-   double *y;                    /* Pointer to first vertex Y axis value */
-   int i;                        /* Axis count */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Center";
-   names[ 1 ] = "Size";
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the centre. */
-      cen[0] = 0.0;
-      cen[1] = 0.0;
-      ElemListD( this, scan->el[0][0], 2, cen, status );
-
-/* Get the size. */
-      size[0] = 0.0;
-      size[1] = 0.0;
-      ElemListD( this, scan->el[1][0], 2, size, status );
-
-/* Get the units attribute from the supplied element. These are the units
-   of the centre and size values. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-      }
-
-/* Since the SkyFrame class does not have active Units we must handle it
-   separately. */
-      if( astIsASkyFrame( frm ) ) {
-
-/* Create the anti-clockwise list of (x,y) at the four corners of the box. */
-         x = pos;
-         y = pos+ 4;
-         x[ 3 ] = cen[ 0 ] + 0.5*size[ 0 ];
-         y[ 3 ] = cen[ 1 ] - 0.5*size[ 1 ];
-         x[ 2 ] = cen[ 0 ] + 0.5*size[ 0 ];
-         y[ 2 ] = cen[ 1 ] + 0.5*size[ 1 ];
-         x[ 1 ] = cen[ 0 ] - 0.5*size[ 0 ];
-         y[ 1 ] = cen[ 1 ] + 0.5*size[ 1 ];
-         x[ 0 ] = cen[ 0 ] - 0.5*size[ 0 ];
-         y[ 0 ] = cen[ 1 ] - 0.5*size[ 1 ];
-
-/* Convert the axis values to radians. */
-         map = astUnitMapper( unit, "rad", NULL, NULL );
-         if( map ) {
-            astTran1( map, 8, pos, 1, pos );
-            map = astAnnul( map );
-         } else if( astOK ) {
-            Report( this, elem, FAILURE, "contains unusable units", status );
-         }
-
-/* Create the Polygon. */
-         new = (AstRegion *) astPolygon( frm, 4, 4, pos, NULL, "", status );
-
-/* Now handles Frames other than SkyFrames. */
-      } else {
-
-/* Create the anti-clockwise list of (x,y) at the four corners of the box. */
-         x = pos;
-         y = pos+ 4;
-         x[ 0 ] = cen[ 0 ] + 0.5*size[ 0 ];
-         y[ 0 ] = cen[ 1 ] - 0.5*size[ 1 ];
-         x[ 1 ] = cen[ 0 ] + 0.5*size[ 0 ];
-         y[ 1 ] = cen[ 1 ] + 0.5*size[ 1 ];
-         x[ 2 ] = cen[ 0 ] - 0.5*size[ 0 ];
-         y[ 2 ] = cen[ 1 ] + 0.5*size[ 1 ];
-         x[ 3 ] = cen[ 0 ] - 0.5*size[ 0 ];
-         y[ 3 ] = cen[ 1 ] - 0.5*size[ 1 ];
-
-/* Take a copy of the supplied Frame and set its Units to the value
-   obtained from the supplied element. */
-         cfrm = astCopy( frm );
-         astSetUnit( cfrm, 0, unit );
-         astSetUnit( cfrm, 1, unit );
-   
-/* Create a Polygon within this modified Frame. */
-         new = (AstRegion *) astPolygon( frm, 4, 4, pos, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
-   set it to the Unit of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new Unit. If the supplied
-   Frame had no set Unit, set it to the units obtained from the supplied
-   element. */
-         for( i = 0; i < 2; i++ ) {
-            if( astTestUnit( frm, i ) ) {
-               funit = astGetUnit( frm, i );
-               if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
-            } else {
-               astSetUnit( frm, i, unit );
-            }          
-         }          
-
-/* Free resources */
-         cfrm = astAnnul( cfrm );
-      }
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *CircleReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstFrame *frm, int *status ){
-/*
-*  Name:
-*     CircleReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Circle element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *CircleReader( AstXmlChan *this, AstXmlElement *elem, 
-*                              AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Circle element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Circle element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstMapping *map;              /* Mapping between units */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   const char *unit;             /* Centre unit string from supplied element */
-   double cen[2];                /* Centre */
-   double rad;                   /* Radius */
-   int i;                        /* Axis count */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Radius";
-   names[ 1 ] = "Center";
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the radius. */
-      rad = ElemValueD( this, scan->el[0][0], 0.0, status );
-
-/* Get the centre. */
-      cen[0] = 0.0;
-      cen[1] = 0.0;
-      ElemListD( this, scan->el[1][0], 2, cen, status );
-
-/* Get the units attribute from the supplied element. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-      }
-
-/* Since the SkyFrame class does not have active Units we must handle it
-   separately. */
-      if( astIsASkyFrame( frm ) ) {
-
-/* Convert the axis values and radius to radians. */
-         map = astUnitMapper( unit, "rad", NULL, NULL );
-         if( map ) {
-            astTran1( map, 2, cen, 1, cen );
-            astTran1( map, 1, &rad, 1, &rad );
-            map = astAnnul( map );
-         } else if( astOK ) {
-            Report( this, elem, FAILURE, "contains unusable units", status );
-         }
-
-/* Create the Circle. */
-         new = (AstRegion *) astCircle( frm, 1, cen, &rad, NULL, "", status );
-
-/* Now handles Frames other than SkyFrames. */
-      } else {
-
-/* Take a copy of the supplied Frame and set its Units to the value
-   obtained from the supplied element. */
-         cfrm = astCopy( frm );
-         astSetUnit( cfrm, 0, unit );
-         astSetUnit( cfrm, 1, unit );
-   
-/* Create a Circle within this modified Frame. */
-         new = (AstRegion *) astCircle( cfrm, 1, cen, &rad, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
-   set it to the Unit of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new Unit. If the supplied
-   Frame had no set Unit, set it to the units obtained from the supplied
-   element. */
-         for( i = 0; i < 2; i++ ) {
-            if( astTestUnit( frm, i ) ) {
-               funit = astGetUnit( frm, i );
-               if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
-            } else {
-               astSetUnit( frm, i, unit );
-            }          
-         }          
-
-/* Free resources */
-         cfrm = astAnnul( cfrm );
-
-      }
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a XmlChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     Channel member function (over-rides the astClearAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     XmlChan so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;              /* Pointer to the XmlChan structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* XmlIndent */
-/* --------- */
-   if ( !strcmp( attrib, "xmlindent" ) ) {
-      astClearXmlIndent( this );
-
-/* XmlLength */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmllength" ) ) {
-      astClearXmlLength( this );
-
-/* XmlFormat */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmlformat" ) ) {
-      astClearXmlFormat( this );
-
-/* XmlPrefix */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmlprefix" ) ) {
-      astClearXmlPrefix( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static AstRegion *ConstraintReader( AstXmlChan *this, AstXmlElement *elem, 
-                                    AstFrame *frm, int *status ){
-/*
-*  Name:
-*     ConstraintReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Constraint element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *ConstraintReader( AstXmlChan *this, AstXmlElement *elem,
-*                                  AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Constraint element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Constraint element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. The Unit attribute is assumed to be set to "rad".
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double cen[2];                /* Centre long/lat values */
-   double vec[3];                /* Cartesian centre vector */
-   double rad;                   /* Radius */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Vector";
-   names[ 1 ] = "Offset";
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the vector and convert from 3D cartesian to a 2D long/lat centre 
-   position, in radians. */
-      vec[0] = 1.0;
-      vec[1] = 0.0;
-      vec[2] = 0.0;
-      ElemListD( this, scan->el[0][0], 3, vec, status );
-      palSlaDcc2s( vec, cen, cen + 1 );
-
-/* Get the offset, and convert to a radial distance in radians. */
-      rad = acos( ElemValueD( this, scan->el[1][0], 1.0, status ) );
-
-/* Create the Circle. */
-      new = (AstRegion *) astCircle( frm, 1, cen, &rad, NULL, "", status );
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *ConvexReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstFrame *frm, int *status ){
-/*
-*  Name:
-*     ConvexReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Convex element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *ConvexReader( AstXmlChan *this, AstXmlElement *elem, 
-*                              AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Convex element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Convex element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame to use  when building Constraints */
-   AstRegion *new;               /* Pointer to returned Region */
-   AstRegion *reg;               /* Pointer to component Region */
-   AstRegion *tmp;               /* Pointer to new Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[1];         /* Names of the subelements to be searched for */
-   const char *unit;             /* Unit attribute in element tag */
-   int i;                        /* Loop count */
-   int issky;                    /* Is supplied Frame a SkyFrame? */
-   int max[1];                   /* Max allowed occurrences of each name */
-   int min[1];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
-   names[ 0 ] = "Constraint";
-   min[ 0 ] = 1;
-   max[ 0 ] = INT_MAX;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Convex needs no units since all values are normalised to a unit sphere */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( unit ) {
-         Report( this, elem, WARNING, "contains unnecessary unit attribute", status );
-      }
-
-/* Unless the supplied Frame is a SkyFrame (which handles the Unit
-   attribute unusually), take a copy of the supplied Frame and set its 
-   units to radians. */
-      issky = astIsASkyFrame( frm );
-      if( issky ) {
-         cfrm = astCopy( frm );
-         astSetUnit( cfrm, 0, "rad" );
-         astSetUnit( cfrm, 1, "rad" );
-      } else {
-         cfrm = astClone( frm );
-      }
-
-/* Create Regions from all the component Constraint elements, and combine
-   them into nested CmpRegions, using the boolean AND operator to combine 
-   them. */
-      new = ConstraintReader( this, scan->el[0][0], cfrm, status );
-      for( i = 1; i < scan->count[0]; i++ ) {
-         reg = ConstraintReader( this, scan->el[0][i], cfrm, status );
-         tmp = (AstRegion *) astCmpRegion( new, reg, AST__AND, "", status );
-         reg = astAnnul( reg );
-         (void) astAnnul( new );
-         new = tmp;
-      }
-
-/* If required, modify the units back to their original values This
-   will cause the axis values defining the returned Region to be re-mapped
-   into the new units. Do not do this if the supplied Frame is a SkyFrame. */
-      if( !issky ) {
-         if( astTestUnit( frm, 0 ) ) astSetUnit( new, 0, astGetUnit( frm, 0 ) );
-         if( astTestUnit( frm, 1 ) ) astSetUnit( new, 1, astGetUnit( frm, 1 ) );
-      }
-
-/* Get any fill factor from the element and assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      cfrm = astAnnul( cfrm );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-
-static AstRegion *Coord2VecIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                           const char *unit, AstFrame *frm, int *status ){
-/*
-*  Name:
-*     Coord2VecIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Coord2VecInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *Coord2VecIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-*                                         const char *unit, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Coord2VecInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Coord2VecInterval element.
-*     unit
-*        A string holding the units in which the axis values are stored
-*        in the supplied element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstMapping *map;              /* Mapping from supplied units to rads */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double hilimit[2];            /* Upper limits */
-   double lolimit[2];            /* Lower limits */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "LoLimit2Vec";
-   names[ 1 ] = "HiLimit2Vec";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the limits. */
-      lolimit[0] = AST__BAD;
-      lolimit[1] = AST__BAD;
-      if( scan->count[0] ) ElemListD( this, scan->el[0][0], 2, lolimit, status );
-
-      hilimit[0] = AST__BAD;
-      hilimit[1] = AST__BAD;
-      if( scan->count[1] ) ElemListD( this, scan->el[1][0], 2, hilimit, status );
-   
-/* Since the SkyFrame class does not have active Units we must handle it
-   separately. */
-      if( astIsASkyFrame( frm ) ) {
-
-/* Convert the limit values to radians. */
-         map = astUnitMapper( unit, "rad", NULL, NULL );
-         if( map ) {
-            astTran1( map, 2, lolimit, 1, lolimit );
-            astTran1( map, 2, hilimit, 1, hilimit );
-            map = astAnnul( map );
-         } else if( astOK ) {
-            Report( this, elem, FAILURE, "contains unusable units", status );
-         }
-
-/* If at least one limit was found, create an Interval within the supplied
-   Frame. Otherwise create a negated NullRegion. */
-         if( lolimit[ 0 ] != AST__BAD || lolimit[ 1 ] != AST__BAD || 
-             hilimit[ 0 ] != AST__BAD || hilimit[ 1 ] != AST__BAD ) {
-            new = (AstRegion *) astInterval( frm, lolimit, hilimit, NULL, "", status );
-         } else {
-            new = (AstRegion *) astNullRegion( frm, NULL, "negated=1", status );
-         }
-
-/* Now handles Frames other than SkyFrames. */
-      } else {
-
-/* Take a copy of the supplied Frame and set its Unit attribute to the 
-   supplied value. */
-         cfrm = astCopy( frm );
-         astSetUnit( cfrm, 0, unit );
-   
-/* If at least one limit was found, create an Interval within this
-   modified Frame. Otherwise create a negated NullRegion. */
-         if( lolimit[ 0 ] != AST__BAD || lolimit[ 1 ] != AST__BAD || 
-             hilimit[ 0 ] != AST__BAD || hilimit[ 1 ] != AST__BAD ) {
-            new = (AstRegion *) astInterval( cfrm, lolimit, hilimit, NULL, "", status );
-         } else {
-            new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
-         }
-      
-/* If the supplied units differ from that of the supplied Frame, set the
-   units in the Region to those of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the required units. If the supplied
-   Frame had no set Units, set it to the supplied units. */
-         if( astTestUnit( frm, 0 ) ) {
-            funit = astGetUnit( frm, 0 );
-            if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
-         } else {
-            astSetUnit( frm, 0, unit );
-         }          
-
-/* Free resources */
-         cfrm = astAnnul( cfrm );
-      }
-   
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *Coord3VecIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                           const char *unit, AstFrame *frm, int *status ){
-/*
-*  Name:
-*     Coord3VecIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Coord3VecInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *Coord3VecIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-*                                         const char *unit, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Coord3VecInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Coord3VecInterval element.
-*     unit
-*        A string holding the units in which the axis values are stored
-*        in the supplied element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double hilimit[3];            /* Upper limits */
-   double lolimit[3];            /* Lower limits */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "LoLimit3Vec";
-   names[ 1 ] = "HiLimit3Vec";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the limits. */
-      lolimit[0] = AST__BAD;
-      lolimit[1] = AST__BAD;
-      lolimit[2] = AST__BAD;
-      if( scan->count[0] ) ElemListD( this, scan->el[0][0], 3, lolimit, status );
-
-      hilimit[0] = AST__BAD;
-      hilimit[1] = AST__BAD;
-      hilimit[2] = AST__BAD;
-      if( scan->count[1] ) ElemListD( this, scan->el[1][0], 3, hilimit, status );
-
-/* Take a copy of the supplied Frame and set its Unit attribute to the 
-   supplied value. */
-      cfrm = astCopy( frm );
-      astSetUnit( cfrm, 0, unit );
-   
-/* If at least one limit was found, create an Interval within this
-   modified Frame. Otherwise create a negated NullRegion. */
-      if( lolimit[ 0 ] != AST__BAD || lolimit[ 1 ] != AST__BAD ||
-          lolimit[ 2 ] != AST__BAD ||
-          hilimit[ 0 ] != AST__BAD || hilimit[ 1 ] != AST__BAD ||
-          hilimit[ 2 ] != AST__BAD ) {
-         new = (AstRegion *) astInterval( cfrm, lolimit, hilimit, NULL, "", status );
-      } else {
-         new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
-      }
-   
-/* If the supplied units differ from that of the supplied Frame, set the
-   units in the Region to those of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the required units. If the supplied
-   Frame had no set Units, set it to the supplied units. */
-      if( astTestUnit( frm, 0 ) ) {
-         funit = astGetUnit( frm, 0 );
-         if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
-      } else {
-         astSetUnit( frm, 0, unit );
-      }          
-   
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      cfrm = astAnnul( cfrm );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *CoordScalarIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                             const char *unit, AstFrame *frm, int *status ){
-/*
-*  Name:
-*     CoordScalarIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA CoordScalarInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *CoordScalarIntervalReader( AstXmlChan *this, AstXmlElement *elem,
-*                                           const char *unit, AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     CoordScalarInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA CoordScalarInterval element.
-*     unit
-*        A string holding the units in which the axis values are stored
-*        in the supplied element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double hilimit;               /* Upper limit */
-   double lolimit;               /* Lower limit */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "LoLimit";
-   names[ 1 ] = "HiLimit";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the limits. */
-      lolimit = scan->count[0] ? ElemValueD( this, scan->el[0][0], 0.0, status ) : AST__BAD;
-      hilimit = scan->count[1] ? ElemValueD( this, scan->el[1][0], 0.0, status ) : AST__BAD;
-   
-/* Take a copy of the supplied Frame and set its Unit attribute to the 
-   supplied value. */
-      cfrm = astCopy( frm );
-      astSetUnit( cfrm, 0, unit );
-   
-/* If at least one limit was found, create an Interval within this
-   modified Frame. Otherwise create a negated NullRegion. */
-      if( lolimit != AST__BAD || hilimit != AST__BAD ) {
-         new = (AstRegion *) astInterval( cfrm, &lolimit, &hilimit, NULL, "", status );
-      } else {
-         new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
-      }
-   
-/* If the supplied units differ from that of the supplied Frame, set the
-   units in the Region to those of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the required units. If the supplied
-   Frame had no set Units, set it to the supplied units. */
-      if( astTestUnit( frm, 0 ) ) {
-         funit = astGetUnit( frm, 0 );
-         if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
-      } else {
-         astSetUnit( frm, 0, unit );
-      }          
-   
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      cfrm = astAnnul( cfrm );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static int ElemListD( AstXmlChan *this, AstXmlElement *elem, int n, 
-                      double *vals, int *status ) {
-/*
-*  Name:
-*     ElemListD
-
-*  Purpose:
-*     Read a floating point XML element value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int ElemListD( AstXmlChan *this, AstXmlElement *elem, int n, 
-*                    double *vals, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function reads the content of the supplied element, converts its
-*     contents to a list of floating point values and returns these
-*     values in "values". A report is made if the element value is not a
-*     space separated list of floating point values, or if it contains
-*     more than "n" values. The number of values stored in "values" is
-*     returned as the function value.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XmlElement.
-*     n
-*        The maximum number of floating point values to read from the supplied 
-*        element. 
-*     values
-*        Pointer to an array to hold the values read. This should have at
-*        least "n" elements. Any unused elements are left unchanged.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The number of values stored in "values".
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item;  /* Item no. "i" */
-   char *text;               /* Pointer to string holding formatted item */
-   char buff[200];           /* Message buffer */
-   const char *p;            /* Pointer to start of remaining text */   
-   const char *value;        /* Pointer to element value */
-   double dval;              /* Value read from string */
-   int i;                    /* Index of current item */
-   int l;                    /* Used length of string */
-   int nc;                   /* Number of characters read by astSscanf */
-   int nitem;                /* Number of items in the element */
-   int rep;                  /* Has a warning about excess values been made? */
-   int result;               /* Value to be returned */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* No warning has yet been made avbout excess values */
-   rep = 0;
-
-/* Loop through all content items within the supplied element. */
-   nitem = astXmlGetNitem( elem );
-   for( i = 0; i < nitem; i++ ) {   
-      item = astXmlGetItem( elem, i );
-
-/* If this is non-blank character data, attempt to read values from it. */
-      if( astXmlCheckType( item, AST__XMLBLACK ) ) {
-
-/* Get the element value as a string. */
-         value = astXmlGetValue( item, 0 );
-         if( value ) {
-
-/* Loop round reading floating point values from the text until the
-   end of the string is reached. */
-            l = astChrLen( value );
-            p = value;
-            while( p < value + l ){
-
-/* Read a floating point value from the start of the remaining string,
-   storing the result in the supplied array. If succesful, increment the
-   number of values read, and increment the pointer to the start of the
-   remaining string. Abort if too many values are found. */
-               if( astSscanf( p, " %lf %n", &dval, &nc ) == 1 ) {
-                  if( result < n ) {
-                     vals[ result++ ] = dval;
-                     p += nc;
-                  } else {
-                     if( !rep ) {
-                        rep = 1;
-                        if( n > 1 ) {
-                           sprintf( buff, "contains more than %d values - "
-                                    "extra values will be ignored", n );
-                        } else {
-                           sprintf( buff, "contains more than 1 value - "
-                                    "extra values will be ignored" );
-                        }
-                        Report( this, elem, WARNING, buff, status );
-                     }
-                     break;
-                  }
-
-/* If the remaing text is not a floating point value, then issue a report. */
-               } else {
-                  Report( this, elem, FAILURE, "contains a non-numerical value", status );
-                  break;
-               }
-            }
-         } 
-
-/* If this is not character data, nor a comment, issue a warning. */
-      } else if( !astXmlCheckType( item, AST__XMLWHITE ) &&
-                 !astXmlCheckType( item, AST__XMLCOM ) ) {
-         text = (char *) astXmlFormat( item );
-         if( text ) {
-            if( strlen( text ) > 30 ) text[ 30 ] = 0;
-            sprintf( buff, "contains the following which is being ignored: \"%s\"",
-                     text );
-            text = astFree( text );
-            Report( this, elem, WARNING, buff, status );
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static double ElemValueD( AstXmlChan *this, AstXmlElement *elem, double def, int *status ) {
-/*
-*  Name:
-*     ElemValueD
-
-*  Purpose:
-*     Read a floating point XML element value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double ElemValueD( AstXmlChan *this, AstXmlElement *elem, double def )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function reads the content of the supplied element, converts its
-*     contents to a floating point value and returns this value. A report is 
-*     made if the element value is not floating point. The supplied default 
-*     value is returned if the element is not present.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XmlElement.
-*     def
-*        If the content of the supplied element is not a flaoting point
-*        value, then this value will be returned instead.
-
-*  Returned Value:
-*     The required element value, or the default if the value was not found.
-
-*/
-
-/* Local Variables: */
-   const char *value;            /* Pointer to element value */
-   double result;                /* Value to be returned */
-   int nc;                       /* Number of characters read by astSscanf */
-   int ok;                       /* Value read OK? */
-   
-/* Initialise. */
-   result = def;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Assume the value cannot be read. */
-   ok = 0;
-
-/* Get the element value as a string. */
-   value = astXmlGetValue( elem, 0 );
-     
-/* If succesful, convert the value to floating point. */
-   if( value ) {
-      nc = 0;
-      ok = ( ( 1 == astSscanf( value, " %lf %n", &result, &nc ) )
-               && ( nc >= (int) strlen( value ) ) );
-   }
-
-/* Give a warning if not OK, and use default value. */
-   if( !ok ) {
-      Report( this, elem, FAILURE, "does not contain a floating point value", status );
-      result = def;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *EllipseReader( AstXmlChan *this, AstXmlElement *elem, 
-                                 AstFrame *frm, int *status ){
-/*
-*  Name:
-*     EllipseReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Ellipse element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *EllipseReader( AstXmlChan *this, AstXmlElement *elem, 
-*                               AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Ellipse element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Ellipse element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstMapping *map;              /* Mapping between units */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[4];         /* Names of the subelements to be searched for */
-   const char *unit;             /* Centre and radii unit string */
-   double cen[2];                /* Centre */
-   double pa;                    /* Major axis position angle */
-   double rad[2];                /* Major and minor radii */
-   int i;                        /* Axis count */
-   int max[4];                   /* Max allowed occurrences of each name */
-   int min[4];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Radius";
-   names[ 1 ] = "Center";
-   names[ 2 ] = "MinorRadius";
-   names[ 3 ] = "PosAngle";
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   min[ 2 ] = 1;
-   min[ 3 ] = 1;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   max[ 2 ] = 1;
-   max[ 3 ] = 1;
-   scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the major radius */
-      rad[ 0 ] = ElemValueD( this, scan->el[0][0], 0.0, status );
-
-/* Get the minor radius. */
-      rad[ 1 ] = ElemValueD( this, scan->el[2][0], 0.0, status );
-
-/* Get the centre. */
-      cen[0] = 0.0;
-      cen[1] = 0.0;
-      ElemListD( this, scan->el[1][0], 2, cen, status );
-
-/* Get the position angle. This is returned in the AST convention, i.e.
-   measured in radians from from +ve second axis through positive first 
-   axis. */
-      pa = PosAngleReader( this, scan->el[3][0], status );
-
-/* Get the units attribute from the supplied element. These are the units
-   of the centre and radii value. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-      }
-
-/* Since the SkyFrame class does not have active Units we must handle it
-   separately. */
-      if( astIsASkyFrame( frm ) ) {
-
-/* Convert the axis values and radii to radians. */
-         map = astUnitMapper( unit, "rad", NULL, NULL );
-         if( map ) {
-            astTran1( map, 2, cen, 1, cen );
-            astTran1( map, 2, rad, 1, rad );
-            map = astAnnul( map );
-         } else if( astOK ) {
-            Report( this, elem, FAILURE, "contains unusable units", status );
-         }
-
-/* Create the Ellipse. */
-         new = (AstRegion *) astEllipse( frm, 1, cen, rad, &pa, NULL, "", status );
-
-/* Now handles Frames other than SkyFrames. */
-      } else {
-
-/* Take a copy of the supplied Frame and set its Units to the value
-   obtained from the supplied element. */
-         cfrm = astCopy( frm );
-         astSetUnit( cfrm, 0, unit );
-         astSetUnit( cfrm, 1, unit );
-   
-/* Create a Ellipse within this modified Frame. */
-         new = (AstRegion *) astEllipse( cfrm, 1, cen, rad, &pa, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
-   set it to the Unit of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new Unit. If the supplied
-   Frame had no set Unit, set it to the units obtained from the supplied
-   element. */
-         for( i = 0; i < 2; i++ ) {
-            if( astTestUnit( frm, i ) ) {
-               funit = astGetUnit( frm, i );
-               if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
-            } else {
-               astSetUnit( frm, i, unit );
-            }          
-         }          
-
-/* Free resources */
-         cfrm = astAnnul( cfrm );
-      }
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static double Error2PAReader( AstXmlChan *this, AstXmlElement *elem, 
-                              double *size, int *status ){
-/*
-*  Name:
-*     Error2PAReader
-
-*  Purpose:
-*     Read the contents of an Stc Error2PA element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double Error2PAReader( AstXmlChan *this, AstXmlElement *elem, 
-*                            double *size, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads the contents of an Stc Error2PA element. It can
-*     also be used to read Resolution2PA, Size2PAand PixSize2PA which
-*     have exactly the same structure as a Error2PA element.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Ellipse element.
-*     size
-*        Pointer to an array to receive the 2 error sizes.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The position angle of the first error size, in radians, from positive 
-*     second axis to positive first axis.
-
-*/
-
-/* Local Variables: */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[4];         /* Names of the subelements to be searched for */
-   double pa;                    /* Major axis position angle */
-   int max[4];                   /* Max allowed occurrences of each name */
-   int min[4];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   pa = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return pa;
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Size";
-   names[ 1 ] = "PosAngle";
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the sizes */
-      ElemListD( this, scan->el[0][0], 2, size, status );
-
-/* Get the position angle. This is returned in the AST convention, i.e.
-   measured in radians from from +ve second axis through positive first 
-   axis. */
-      pa = PosAngleReader( this, scan->el[1][0], status );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Return the position angle. */
-   return pa;
-}
-
-static void FillAndLims( AstXmlChan *this, AstXmlElement *elem, AstRegion *new, int *status ){
-/*
-*  Name:
-*     FillAndLims
-
-*  Purpose:
-*     Get fill factor and limit inclusion flags from IVOA element and
-*     assign to an AST Region.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void FillAndLims( AstXmlChan *this, AstXmlElement *elem, AstRegion *new, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function gets attributes from the supplied element describing
-*     fill factor and limit inclusion flags, and assigns suitable values
-*     to the supplied Region. Default values are used if the supplied
-*     element does not have the required attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan in which to store warnings. 
-*     elem
-*        Pointer to the AstXmlElement to search.
-*     new
-*        Pointer to the Region in which to store the values.
-*     status
-*        Pointer to the inherited status variable.
-
-*/
-
-/* Local Variables: */
-   const char *text;        /* Attribute text */
-   double ff;               /* Fill factor */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Get any fill factor attribute from the element and assign to the
-   returned Region. */
-   ff = AttrValueD( this, elem, "fill_factor", AST__BAD, status );
-   if( ff != AST__BAD ) astSetFillFactor( new, ff );
-
-/* Get the flags indicating if the limits are included in the interval. 
-   If either of the limits is not included in the interval, then make the
-   Region open. Assume a default of true ("included") if the attribute is
-   missing. */
-   text = astXmlGetAttributeValue( elem, "lo_include" );
-   if( text && !strcmp( text, "false" ) ) astSetClosed( new, 0 );
-
-   text = astXmlGetAttributeValue( elem, "hi_include" );
-   if( text && !strcmp( text, "false" ) ) astSetClosed( new, 0 );
-
-}
-
-static AstXmlElement *FindAttribute( AstXmlChan *this, const char *name, int *status ) {
-/*
-*  Name:
-*     FindAttribute
-
-*  Purpose:
-*     Find an XML element representing a named AST attribute.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlElement *FindAttribute( AstXmlChan *this, const char *name, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function searches the content of the current container element
-*     of the supplied XmlChan looking for an element which represents a
-*     named AST attribute. No error is reported if the attribute is not
-*     found. Attributes which represent defaul values are ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     name
-*        Pointer to a string holding the required AST attribute name
-*        (case-insensitive).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the XmlElement if found, and NULL otherwise.
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item; /* Item no. "i" */
-   AstXmlElement *result;   /* Returned pointer */
-   const char *def;         /* Value from XML DEFAULT attribute */
-   const char *definedby;   /* Name of class which defines the item */
-   const char *xmlname;     /* Value from XML NAME attribute */
-   int i;                   /* Index of current item */
-   int nitem;               /* Number of items still in the element */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Report an error if the class being loaded has not been set. */
-   if( !this->isa_class ) {
-      astError( AST__INTER, "astRead(XmlChan): astReadNextData not called "
-                "before reading values for a %s (internal AST programming "
-                "error).", status, astXmlGetName( this->container ) );
-   }
-
-/* Check we have a container to search. */
-   if( !this->container ) {
-      astError( AST__INTER, "astRead(XmlChan): No container before reading "
-                "values for a %s (internal AST programming error).", status, 
-                astXmlGetName( this->container ) );
-   }
-
-/* Check all is OK. */
-   if( astOK ) {
-
-/* Loop round all items in the elements contents. */
-      nitem = astXmlGetNitem( this->container );
-      for( i = 0; i < nitem; i++ ) {
-         item = astXmlGetItem( this->container, i );
-
-/* Ignore this item if it is not an element. */
-         if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* Ignore this element if its name is not ATTR. */
-            if( !astOK ) break;
-            if( !strcmp( astXmlGetName( item ), ATTR ) ){
-
-/* Ignore this element if it represents a default value. */
-               def = astXmlGetAttributeValue( item, DEFAULT );
-               if( !def || strcmp( def, TRUE ) ) {
-
-/* If this ATTR element has an XML attribute called NAME with
-   the required value (case-insensitive), we may have found a matching 
-   element. */
-                   xmlname = astXmlGetAttributeValue( item, NAME );
-                   if( xmlname && !Ustrcmp( xmlname, name, status ) ) {
-
-/* Ignore the attribute if it does not belong to the correct part of the 
-   object's class hierarchy. If it does, we have found the required
-   attribute. */
-                      definedby = astXmlGetAttributeValue( item, DEFINEDBY );
-                      if( definedby && !strcmp( definedby, this->isa_class ) ) {
-                         result = (AstXmlElement *) item;
-                         break;
-                      }
-                   }
-               }
-            }
-         }
-      }
-   }
-
-/* Return the pointer. */
-   return result;
-}
-
-static AstXmlElement *FindElement( AstXmlChan *this, AstXmlElement *elem, 
-                                   const char *name, int *status ) {
-/*
-*  Name:
-*     FindElement
-
-*  Purpose:
-*     Find a named element within a supplied element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlElement *FindElement( AstXmlChan *this, AstXmlElement *elem, 
-*                                 const char *name, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function searches the content of the supplied element looking for 
-*     an element with the supplied Name. No error is reported if the element
-*     is not found, but a Warning is issued if it found more than once.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan in which to store warnings. 
-*     elem
-*        Pointer to the AstXmlElement to search.
-*     name
-*        Pointer to a string holding the required element name.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the XmlElement if found, and NULL otherwise.
-
-* Notes:
-*     - If the supplied element contains more than one element with the
-*     given name, the returned pointer locates the first element
-*     encountered with the required name, and a WARNING is issued that the 
-*     second and subsequent elements will be ignored.
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item; /* Item no. "i" */
-   AstXmlElement *result;   /* Returned pointer */
-   char buff[ 200 ];        /* Message buffer */
-   int i;                   /* Index of current item */
-   int nitem;               /* Number of items still in the element */
-   int warned;              /* Has a warning been issued? */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Loop round all items in the elements contents. */
-   warned = 0;
-   nitem = astXmlGetNitem( elem );
-   for( i = 0; i < nitem; i++ ) {
-      item = astXmlGetItem( elem, i );
-
-/* Ignore this item if it is not an element. */
-      if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* If this element's name is the given name. */
-         if( !strcmp( astXmlGetName( item ), name ) ){
-
-/* If this is the first element with the required name, store its
-   pointer. */
-            if( !result ) {
-               result = (AstXmlElement *) item;
-
-/* Otherwise add a Warning (unles a Warning has already been issued). */
-            } else if( !warned ) {
-               warned = 1;
-               sprintf( buff, "contains more than one %s element. The "
-                        "second and subsequent such elements will be "
-                        "ignored", name );
-               Report( this, elem, WARNING, buff, status );
-            }
-         }
-      }
-   }
-
-/* Return the pointer. */
-   return result;
-}
-
-static IVOAReader FindIVOAClass( AstXmlElement *elem, int *is_ivoa, int *status ) {
-/*
-*  Name:
-*     FindIVOAClass
-
-*  Purpose:
-*     Return a pointer to a function which will create an AST Object from
-*     an IVOA element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     IVOAReader FindIVOAClass( AstXmlElement *elem, int *is_ivoa, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function checks the namespace of the supplied element to see if
-*     it is a known IVOA namespace. If it is, it returns the "is_ivoa"
-*     flag set to non-zero (otherwise it is returned as zero). It then
-*     checks to see if an AST object can be created from the IVOA
-*     element. If so, a pointer to the function which will do the
-*     conversion is returned. Otherwise a NULL pointer is returned.
-
-*  Parameters:
-*     elem
-*        Pointer to the element to check.
-*     is_ivoa
-*        Pointer to an int in which to return a flag indicating if the
-*        supplied element belongs to a known IVOA namespace.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the function (if any) which can produce an AST Object
-*     from the supplied element, or NULL if conversion is not possible.
-
-*  Notes:
-*     - NULL is returned if this function is invoked with the error
-*     status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   IVOAReader result;      /* Returned pointer */
-   const char *ivoa;       /* Pointer to "ivoa" substring */
-   const char *name;       /* Pointer to string holding element name */
-   const char *stc;        /* Pointer to "stc" substring */
-   const char *uri;        /* Pointer to string holding element namespace URI */
-
-/* Initialise */
-   *is_ivoa = 0;
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the element name.*/
-   name = astXmlGetName( elem );
-
-/* Get the namespace URI for the element, and see if it contains
-   sub-strings "STC" (or "stc") and "IVOA" (or "ivoa"). */
-   uri = astXmlGetURI( elem );
-   if( uri ) { 
-      stc = strstr( uri, "STC" );
-      if( !stc ) stc = strstr( uri, "stc" );
-      ivoa = strstr( uri, "IVOA" );
-      if( !ivoa ) ivoa = strstr( uri, "ivoa" );
-
-   } else {
-      stc = NULL;
-      ivoa = NULL;
-   }
-   
-/* If it is a known IVOA namespace, proceed. */
-   if( name && ( stc || ivoa ) ){
-      *is_ivoa = 1;
-
-/* Look for element types which can be converted to AST objects, and
-   return a pointer to the corresponding reader function. */
-      if( !strcmp( name, STC_RESOURCE_PROFILE ) ) {
-         result = StcMetadataReader;
-
-      } else if( !strcmp( name, SEARCH_LOCATION ) ) {
-         result = StcMetadataReader;
-
-      } else if( !strcmp( name, CATALOG_ENTRY_LOCATION ) ) {
-         result = StcMetadataReader;
-
-      } else if( !strcmp( name, OBSERVATION_LOCATION ) ) {
-         result = StcMetadataReader;
-
-      } else if( !strcmp( name, OBS_DATA_LOCATION ) ) {
-         result = ObsDataLocationReader;
-
-      } else if( !strcmp( name, ASTRO_COORD_SYSTEM ) ) {
-         result = AstroCoordSystemReader;
-
-      } else if( !strcmp( name, TIME_FRAME ) ) {
-         result = TimeFrameReader;
-
-      } else if( !strcmp( name, SPACE_FRAME ) ) {
-         result = SpaceFrameReader;
-
-      } else if( !strcmp( name, SPECTRAL_FRAME ) ) {
-         result = SpectralFrameReader;
-
-      } else if( !strcmp( name, REDSHIFT_FRAME ) ) {
-         result = RedshiftFrameReader;
-
-      } else if( !strcmp( name, REDSHIFT_FRAME ) ) {
-         result = RedshiftFrameReader;
-
-      }
-   }
-
-/* Return null if an error occurred. */
-   if( !astOK ) result = NULL;
-
-/* Return the result. */
-   return result;
-}
-
-static const char *FindNextIsA( AstXmlElement *elem, int start, int *status ) {
-/*
-*  Name:
-*     FindNextIsA
-
-*  Purpose:
-*     Find the next "isa" element within an XML element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     const char *FindNextIsA( AstXmlElement *elem, int start, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function searches the content of the specified element,
-*     starting at the item with the speicfied index, until it finds the
-*     next "isa" element. It returns the value of the "class" attribute
-*     of the found "isa" element, or the name of the supplied element 
-*     if no "isa" element is found.
-
-*  Parameters:
-*     elem
-*        Pointer to the XmlElement (an element describing an AST Object).
-*     start
-*        The index of the first content item to check.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the class string.
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item; /* Item no. "i" */
-   const char *result;      /* Returned string */
-   int i;                   /* Index of current item */
-   int nitem;               /* Number of items still i nthe element */
-
-/* Initialise */
-   result = astXmlGetName( elem );
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Loop round all items contained in the element, starting at the given
-   index. */
-   nitem = astXmlGetNitem( elem );
-   for( i = start; i < nitem; i++ ) {   
-      item = astXmlGetItem( elem, i );
-
-/* Check this item is an XmlElement with name ISA. */
-      if( astXmlCheckType( item, AST__XMLELEM ) ) {
-         if( astOK && !strcmp( astXmlGetName( item ), ISA ) ) {
-
-/* The returned string is the value of the "class" attribute of this
-   element. */ 
-            result = astXmlGetAttributeValue( item, "class" );
-
-/* Report an error if the element does not have a class attribute. */
-            if( !result && astOK ) {
-               astError( AST__BADIN, "astRead(XmlChan): The tag %s "
-                         "does not include a \"class\" attribute.", status, 
-                         GetTag( (AstXmlObject *) item, 1, status ) );
-            }
-
-            break;
-
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstXmlElement *FindObject( AstXmlChan *this, const char *name, int *status ) {
-/*
-*  Name:
-*     FindObject
-
-*  Purpose:
-*     Find an XML element representing a named AST Object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlElement *FindObject( AstXmlChan *this, const char *name, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function searches the content of the current container element
-*     of the supplied XmlChan looking for an element which represents a
-*     named AST Object. No error is reported if the object is not
-*     found. Objects which represent default values are ignored.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     name
-*        Pointer to a string holding the required AST object name
-*        (case-insensitive).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the XmlElement if found, and NULL otherwise.
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item; /* Item */
-   AstXmlElement *result;   /* Returned pointer */
-   const char *def;         /* Value from XML DEFAULT attribute */
-   const char *definedby;   /* Name of class which defines the item */
-   const char *xmlname;     /* Value from XML LABEL attribute */
-   int i;                   /* Index of current item */
-   int nitem;               /* Number of items still i nthe element */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Report an error if the class being loaded has not been set. */
-   if( !this->isa_class ) {
-      astError( AST__INTER, "astRead(XmlChan): astReadNextData not called "
-                "before reading values for a %s (internal AST programming "
-                "error).", status, astXmlGetName( this->container ) );
-   }
-
-/* Check we have a container to search. */
-   if( !this->container ) {
-      astError( AST__INTER, "astRead(XmlChan): No container before reading "
-                "values for a %s (internal AST programming error).", status, 
-                astXmlGetName( this->container ) );
-   }
-
-/* Check all is OK. */
-   if( astOK ) {
-
-/* Loop round all items in the elements contents. */
-      nitem = astXmlGetNitem( this->container );
-      for( i = 0; i < nitem; i++ ) {
-         item = astXmlGetItem( this->container, i );
-
-/* Ignore this item if it is not an element. */
-         if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* Ignore this element if its name is ATTR. */
-            if( astOK && strcmp( astXmlGetName( item ), ATTR ) ){
-
-/* Ignore this element if it represents a default value. */
-               def = astXmlGetAttributeValue( item, DEFAULT );
-               if( !def || strcmp( def, TRUE ) ) {
-
-/* If this non-ATTR element has an XML attribute called LABEL with
-   the required value (case-insensitive), we may have found a matching element. */
-                   xmlname = astXmlGetAttributeValue( item, LABEL );
-                   if( xmlname && !Ustrcmp( xmlname, name, status ) ) {
-
-/* Ignore the element if it does not belong to the correct part of the 
-   object's class hierarchy. If it does, we have found the required
-   object. */
-                      definedby = astXmlGetAttributeValue( item, DEFINEDBY );
-                      if( definedby && !strcmp( definedby, this->isa_class ) ) {
-                         result = (AstXmlElement *) item;
-                         break;
-                      }
-                   }
-               }
-            }
-         }
-      }
-   }
-
-/* Return the pointer. */
-   return result;
-}
-
-static int FindString( int n, const char *list[], const char *test, 
-                       const char *text, const char *method, 
-                       const char *class, int *status ){
-/*
-*  Name:
-*     FindString
-
-*  Purpose:
-*     Find a given string within an array of character strings.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int FindString( int n, const char *list[], const char *test, 
-*                     const char *text, const char *method, const char *class, int *status )
-
-*  Class Membership:
-*     XmlChan method.
-
-*  Description:
-*     This function identifies a supplied string within a supplied
-*     array of valid strings, and returns the index of the string within
-*     the array. The test option may not be abbreviated, but case is
-*     insignificant.
-
-*  Parameters:
-*     n
-*        The number of strings in the array pointed to be "list".
-*     list
-*        A pointer to an array of legal character strings.
-*     test
-*        A candidate string.
-*     text
-*        A string giving a description of the object, parameter,
-*        attribute, etc, to which the test value refers.
-*        This is only for use in constructing error messages. It should
-*        start with a lower case letter.
-*     method
-*        Pointer to a string holding the name of the calling method.
-*        This is only for use in constructing error messages.
-*     class 
-*        Pointer to a string holding the name of the supplied object class.
-*        This is only for use in constructing error messages.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The index of the identified string within the supplied array, starting
-*     at zero.
-
-*  Notes:
-*     -  A value of -1 is returned if an error has already occurred, or
-*     if this function should fail for any reason (for instance if the
-*     supplied option is not specified in the supplied list). 
-
-*/
-
-/* Local Variables: */
-   int ret;                /* The returned index */
-
-/* Check global status. */
-   if( !astOK ) return -1;
-
-/* Compare the test string with each element of the supplied list. Leave
-   the loop when a match is found. */
-   for( ret = 0; ret < n; ret++ ) {
-      if( !Ustrcmp( test, list[ ret ], status ) ) break;
-   }
-
-/* Report an error if the supplied test string does not match any element
-   in the supplied list. */
-   if( ret >= n && astOK ) {
-      astError( AST__RDERR, "%s(%s): Illegal value '%s' supplied for %s.", status,
-                method, class, test, text );
-      ret = -1;
-   }
-
-/* Return the answer. */
-   return ret;
-}
-
-static IVOAScan *FreeIVOAScan( IVOAScan *in, int *status ){
-/*
-*  Name:
-*     FreeIVOAScan
-
-*  Purpose:
-*     Free resources used by an IVOAScan structure.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     IVOAScan *FreeIVOAScan( IVOAScan *in )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function frees resources used by an IVOAScan structure (such
-*     as returned by the ScanIVOAElement function).
-
-*  Parameters:
-*     in
-*        Pointer to the IVOAScan structure.
-
-*  Returned Value:
-*     A NULL pointer.
-
-*/
-
-/* Local Variables: */
-   int j;                        /* Index of current name */
-
-/* Check the supplied pointer can be used safely. */
-   if( in ) {
-
-/* Free the arrays holding the element pointers. */
-      for( j = 0; j < in->n; j++ ) {
-         in->count[ j ] = 0;         
-         in->el[ j ] = astFree( in->el[ j ] );
-      }
-
-/* Free the array holding the pointers to the arrays holding the element 
-   pointers. */
-      in->el = astFree( in->el );
-   
-/* Free the array holding the number of element pointers stored. */
-      in->count = astFree( in->count );
-
-/* For safety, put a zero in the name count. */
-      in->n = 0;
-
-/* Free the whole structure. */
-      in = astFree( in );
-
-   }
-
-   return NULL;
-}
-
-static void Geod( double lat, double lon, double *phi, double *lambda, int *status ){
-/*
-*  Name:
-*     Geod
-
-*  Purpose:
-*     Convert a geocentric lat/long to geodetic lat/long at sea level.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void Geod( double lat, double lon, double *phi, double *lambda, int *status )
-
-*  Class Membership:
-*     FitsChan member function.
-
-*  Description:
-*     This function converts a position supplied as geocentric lat/lon at
-*     sea level into geodetic longitude, latitude. The algorithm is due to 
-*     Borkowski, and is described in the Explanatory Supplement to the 
-*     Astronomical Almanac (p206).
-
-*  Parameters:
-*     lat
-*        Geocentric latitude (radians)
-*     lon
-*        Geocentric longitude (radians).
-*     phi
-*        Pointer at a location at which to return the geodetic latitude,
-*        in radians.
-*     lambda
-*        Pointer at a location at which to return the geodetic longitude,
-*        in radians.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants... */
-#define FL  1.0/298.257  /*  Reference spheroid flattening factor */
-#define A0  6378140.0    /*  Earth equatorial radius (metres) */
-
-/* Local Variables... */
-   double r, e, f, p, q, d, n, g, t, rp, rd, sn, b0, boa, ab2oa;
-   double pos[3];
-
-/* Initialise */
-   *phi = 0.0;
-   *lambda = 0.0;
-
-/* Check the global status. */
-   if( !astOK ) return;
-
-/* Convert the supplied geocentric lon/lat to terrestrial Cartesian
-   (x,y,z) values. The (x,y,z) system has origin at the centre of the 
-   earth, Z axis going through the north pole, X axis at (long,lat)=(0,0), 
-   and Y axis at (long,lat) = (E90,0). Assume an equatorial sea level
-   position. */
-   palSlaDcs2c( lon, lat, pos );
-   pos[ 0 ] *= A0;
-   pos[ 1 ] *= A0;
-   pos[ 2 ] *= A0;
-
-/* Earth polar radius (metres) */
-   b0 = A0*( 1.0 - FL );
-
-/* Useful functions */
-   boa = b0/A0;
-   ab2oa = ( A0*A0 - b0*b0)/A0;
-
-/* To obtain the proper sign and polynomial solution, the sign of b is
-   set to that of z. Note the sign of z. */
-   if( pos[ 2 ] > 0.0 ) {
-      sn = 1.0;
-   } else {
-      sn = -1.0;
-   }
-
-/* If the supplied position is on the polar axis, the returned values are 
-   trivial. We check this case because it corresponds to a singularity in
-   the main algorithm. */
-   r = sqrt( pos[ 0 ]*pos[ 0 ] + pos[ 1 ]*pos[ 1 ] );
-   if( r == 0 ) {
-      *lambda = 0.0;
-      *phi = AST__DPIBY2;
-
-   } else {   
-
-/* The longitude is unchanged. */
-      *lambda = lon;
-
-/* The equator is also a singularity in the main algorithm. If the
-   supplied point is on the equator, the answers are trivial. */
-      if( pos[ 2 ] == 0.0 ) {
-         *phi = 0.0;
-
-/* For all other cases, use the main Borkowski algorithm. */
-      } else {
-         e = ( sn*boa*pos[ 2 ] - ab2oa )/r;
-         f = ( sn*boa*pos[ 2 ] + ab2oa )/r;
-         p = 4.0*( e*f + 1.0 )/3.0;
-         q = 2.0*( e*e - f*f );
-         d = p*p*p + q*q;
-
-         if( d < 0.0 ) {
-            rp = sqrt( -p );
-            n = 2.0*rp*cos( acos( q/(p*rp) )/3.0 );
-         } else {
-            rd = sqrt( d );
-            n = pow( ( rd - q ), 1.0/3.0 ) - pow( (rd + q ), 1.0/3.0 );
-         }
-
-         g = 0.5* ( sqrt( e*e + n ) + e );
-         t = sqrt( g*g + ( f - n*g )/( 2*g - e ) ) - g;
-
-         *phi = atan( A0*( 1.0 - t*t  )/( 2.0*sn*b0*t ) );
-
-      }
-   }
-}
-#undef FL
-#undef A0  
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a XmlChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected astGetAttrib
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a XmlChan, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     attrib
-*        Pointer to a null terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the XmlChan, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the XmlChan. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   const char *result;           /* Pointer value to return */
-   int ival;                     /* Integer attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* XmlIndent */
-/* --------- */
-   if ( !strcmp( attrib, "xmlindent" ) ) {
-      ival = astGetXmlIndent( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* XmlLength */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmllength" ) ) {
-      ival = astGetXmlLength( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%d", ival );
-         result = getattrib_buff;
-      }
-
-/* XmlFormat */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmlformat" ) ) {
-      ival = astGetXmlFormat( this );
-      if ( astOK ) {
-         if( ival == NATIVE_FORMAT ){
-            result = NATIVE_STRING;
-
-         } else if( ival == QUOTED_FORMAT ){
-            result = QUOTED_STRING;
-
-         } else if( ival == IVOA_FORMAT ){
-            result = IVOA_STRING;
-
-         } else {
-            result = UNKNOWN_STRING;
-         }
-      }
-
-/* XmlPrefix */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmlprefix" ) ) {
-      result = astGetXmlPrefix( this );
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-
-static int GetComment( AstChannel *this, int *status ) {
-/*
-*  Name:
-*     GetComment
-
-*  Purpose:
-*     Get the value of the Comment attribute of a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int GetComment( AstChannel *this, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected astGetComment
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns the value of the Comment attribute of the XmlChan.
-*     It changs the default value from 1 (provided by the parent Channel
-*     class) to zero.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - The Comment value.
-*/
-
-   return astTestComment( this ) ? (*parent_getcomment)( this, status ) : 0;
-}
-
-static int GetFull( AstChannel *this, int *status ) {
-/*
-*  Name:
-*     GetFull
-
-*  Purpose:
-*     Get the value of the Full attribute of a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int GetFull( AstChannel *this, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected astGetFull
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns the value of the Full attribute of the XmlChan.
-*     It changs the default value from zero (provided by the parent Channel
-*     class) to -1.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - The Full value.
-*/
-
-   return astTestFull( this ) ? (*parent_getfull)( this, status ) : -1;
-}
-
-static char GetNextChar( void *data, int *status ) {
-/*
-*  Name:
-*     GetNextChar
-
-*  Purpose:
-*     Get the next character from the XML source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     char GetNextChar( void *data, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function returns the next character from the XML source,
-*     getting a new string if necessary.
-
-*  Parameters:
-*     data 
-*        Pointer to a structure holding data needed to perform the read.
-*        This should be a pointer to the XmlChan being read. If NULL is
-*        supplied, then any internal resources are freed and a value of
-*        zero is returned.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - The next source character, or zero if NULL is supplied for "data".
-
-*  Notes:
-*     - Zero is returned if there is no more text to read.
-*     - Zero is returned if an error has already occurred, or if this
-*     function should failed for any reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS        /* Declare the thread specific global data */
-   AstXmlChan *this;         /* Pointer to the XmlChan */
-   char result;              /* The returned character */
-
-/* Initiialise */
-   result = 0;
-
-/* Get a pointer to the XmlChan. */
-   this = (AstXmlChan *) data;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* If a NULL pointer is supplied free any memory holding text already
-   read from the source, and return zero. */
-   if( !data ) {
-      getnextchar_buf = astFree( getnextchar_buf );
-      return 0;
-   }
-
-/* Check the global status */
-   if( !astOK ) return result;
-
-/* We read a new line from the source if: 1) the reset flag is set in the
-   XmlChan, 2) we have reached the terminating null in the previous line,
-   or 3) we do not yet have a line of text. */
-   if( this->reset_source || *getnextchar_c == 0 || !getnextchar_buf ) {
-      this->reset_source = 0;
-
-/* Free the memory used to hold any previous text. */
-      if( getnextchar_buf ) getnextchar_buf = astFree( getnextchar_buf );
-
-/* Read a new line of text from the source. */
-      getnextchar_buf = astGetNextText( this );
-
-/* Read a new line if the previous line was empty. */
-      while( getnextchar_buf && !getnextchar_buf[ 0 ] ) {
-         astFree( getnextchar_buf );
-         getnextchar_buf = astGetNextText( this );
-      }
-
-/* Reset the pointer to the next character to the start of the new
-   string. */
-      getnextchar_c = getnextchar_buf;
-
-/* If all has gone OK, return the first character and then increment getnextchar_c to
-   point to the next character. */
-      if( getnextchar_c && astOK ) result = *(getnextchar_c++);
-
-/* If we are reading a previously read line, return the character located
-   by getnextchar_c and increment getnextchar_c. */
-   } else {
-      result = *(getnextchar_c++);
-   }
-
-/* Return the result */
-   return result;
-
-}
-
-static const char *GetTag( AstXmlObject *this, int opening, int *status ){
-/*
-*  Name:
-*     GetTag
-
-*  Purpose:
-*     Returns a string holding an XML tag describing the given XmlObject.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     const char *GetTag( AstXmlObject *this, int opening, int *status )
-
-*  Description:
-*     This function returns a pointer to static string
-*     containing an XML tag describing the given XmlObject. It is a
-*     wrapper for the astXmlGetTag function defined in xml.h, but it
-*     additionally removes any "definedby" attribute before formating the
-*     tag (the "definedby" attribute is added by the ReadClassData
-*     function and is not part of the XML text read from the source).
-
-*  Parameters:
-*     this
-*        Pointer to the XmlObject.
-*     opening
-*        Indicates which tag is to be returned; the start tag or the end
-*        tag. If non-zero the start tag is returned. Otherwise, the 
-*        end tag is returned. If the supplied XmlObject has no end
-*        tag (i.e. if it is an empty element, or if it is not an element), 
-*        then NULL is returned but no error is reported.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to a null terminated static string holding the tag. 
-
-*  Notes:
-*     - Empty elements are represented as an start tag of the form <.../>, 
-*     with no corresponding end tag.
-*     - NULL is returned if an error has already occurred, or if this
-*     function should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlElement *elem;      /* Pointer to XML element */
-   const char *result;       /* The returned pointer */
-   const char *ptr;          /* The value of the "definedby" attribute */
-   const char *class;        /* Copy of the value of the "definedby" attribute */
-
-/* Initialise */
-   result = NULL;
-
-/* If the object is an element, check for the "definedby" attribute. */
-   if( astXmlCheckType( this, AST__XMLELEM ) ) {
-      elem = (AstXmlElement *) this;
-
-/* See if the element contains a "definedby" attribute. */
-      ptr = astXmlGetAttributeValue( elem, DEFINEDBY );
-
-/* If so, temporarily remove it, format the tag and then put it back. */
-      if( ptr ) {
-         class = astStore( NULL, ptr, strlen( ptr ) + 1 );
-         astXmlRemoveAttr( elem, DEFINEDBY, NULL );
-         result = astXmlGetTag( elem, opening );
-         astXmlAddAttr( elem, DEFINEDBY, class, NULL );
-         class = astFree( (void *) class );
-
-/* If not, just use astXmlGetTag. */
-      } else {
-         result = astXmlGetTag( this, opening );   
-      }
-
-/* If the object is not an element, just use astXmlGetTag. */
-   } else {
-      result = astXmlGetTag( this, opening );   
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *IntersectionReader( AstXmlChan *this, AstXmlElement *elem, 
-                                      AstFrame *frm, int *status ){
-/*
-*  Name:
-*     IntersectionReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Intersection region element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *IntersectionReader( AstXmlChan *this, AstXmlElement *elem,
-*                                    AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Intersection region element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Intersection region element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   AstRegion *reg;               /* Pointer to component Region */
-   AstRegion *tmp;               /* Pointer to new Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[1];         /* Names of the subelements to be searched for */
-   int i;                        /* Loop count */
-   int max[1];                   /* Max allowed occurrences of each name */
-   int min[1];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
-   names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
-                "Convex|Box";
-   min[ 0 ] = 2;
-   max[ 0 ] = INT_MAX;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create Regions from all the component region elements, and combine
-   them into nested CmpRegions, using the boolean AND operator to combine 
-   them. */
-      new = RegionReader( this, scan->el[0][0], frm, status );
-      for( i = 1; i < scan->count[0]; i++ ) {
-         reg = RegionReader( this, scan->el[0][i], frm, status );
-         tmp = (AstRegion *) astCmpRegion( new, reg, AST__AND, "", status );
-         reg = astAnnul( reg );
-         (void) astAnnul( new );
-         new = tmp;
-      }
-
-/* Get any fill factor from the element and assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static int IsUsable( AstXmlElement *elem, int *status ){
-/*
-*  Name:
-*     IsUsable
-
-*  Purpose:
-*     See if an XmlElement could describe an AST object.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int IsUsable( AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function checks if an instance of an AST class could be
-*     created from the supplied XmlElement.
-
-*  Parameters:
-*     elem
-*        A pointer to the XmlElement, or NULL.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If an AST Object could be created from the supplied element, +1 is 
-*     returned. Otherwise, -1 is returned. Zero is returned if the supplied 
-*     pointer is NULL.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Declare the thread specific global data */
-   const char *class;            /* Pointer to element name */
-   const char *uri;              /* Pointer to namespace URI */
-   IVOAReader reader;            /* Pointer to reader function */
-   int is_ivoa;                  /* Element belongs to an IVOA namespace? */
-   int oldrep;                   /* Original value of the Reporting flag */
-   int result;                   /* Result value to be returned */
-
-/* Check the global error status, and the supplied pointer. */
-   if ( !astOK || !elem ) return 0;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(NULL);
-
-/* Initialise */
-   result = -1;
-
-/* See if the element is in a supported IVOA namespace, and has a reader
-   function for converting it to an AST object. If so, set the default 
-   XmlFormat to IVOA, and set the result non-zero. */
-   reader = FindIVOAClass( elem, &is_ivoa, status );
-   if( is_ivoa ){
-      if( reader ) result = 1;
-      if( isusable_this ) isusable_this->formatdef = IVOA_FORMAT;
-   }
-
-/* If the element is not an IVOA class, only proceed if the URI is not 
-   defined, or if it the AST URI. */
-   uri = astXmlGetURI( elem );
-   if( result == -1 && ( !uri || !strcmp( uri, AST__XMLNS ) ) ) {
-
-/* Get the element name. This will be an AST class name if the element
-   describes an AST Object. */
-      class = astXmlGetName( elem );
-
-/* Attempt to get the loader for a class of this name. If no loader exists an
-   error would normally be reported. Therefore we switch off error reporting 
-   before making this call. After the class we clear any error status and
-   switch error reporting back on. If no error occurs whilst getting the
-   loader, then the class name must be a valid AST class name and so return
-   a non-zero result value. */
-      if( astOK ) {
-         oldrep = astReporting( 0 );
-         astGetLoader( class, status );
-         if( astOK ) {
-            result = 1;
-         } else {
-            astClearStatus;
-         }
-         astReporting( oldrep );
-      }
-  
-/* If the element is in no namespace, use the AST URI as the default
-   namespace for it and its children. */
-      if( !uri ) astXmlAddURI( elem, NULL, AST__XMLNS );
-
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstObject *MakeAstFromXml( AstXmlChan *this, AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     MakeAstFromXml
-
-*  Purpose:
-*     Make an AST Object from an XML element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *MakeAstFromXml( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied XML element.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XML element containing a description of the AST
-*        object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-*/
-
-/* Local Variables: */
-   AstLoaderType *loader;        /* Pointer to loader for Object */
-   AstObject *new;               /* Pointer to returned Object */
-   AstXmlParent *old_container;  /* Element from which items are being read */
-   IVOAReader reader;            /* Pointer to reader function */
-   const char *class;            /* Pointer to Object class name string */
-   int is_ivoa;                  /* Element belongs to an IVOA namespace? */
-   int i;                        /* Index of content item */
-   int nitem;                    /* No. of items of content within element */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* First deal with IVOA format. */
-/* ---------------------------- */
-   if( astGetXmlFormat( this ) == IVOA_FORMAT ) {
-
-/* Get a pointer to a function which will produce an AST object from
-   elements of the class of the supplied element. */
-      reader = FindIVOAClass( elem, &is_ivoa, status );
-
-/* If found, invoke the function to create the new AST object. */
-      if( is_ivoa && reader ) {
-         new = ( *reader )( this, elem, status );      
-
-/* IVOA reader functions do not remove used content as they are read
-   from the element (unlike AST native readers). Therefore empty the 
-   element of all content now to indicate that the element contained no 
-   unrecognised content. This prevents an error being reported. If there
-   was in fact any unrecognised content, then an error will already have
-   been reported. */
-         nitem = astXmlGetNitem( elem );
-         for( i = nitem - 1; i >= 0; i-- ) astXmlDelete( astXmlGetItem( elem, i ) );
-
-/* If not found, report an error. This should not happen since the IsUsable 
-   function should already have checked that the element is usable. */
-      } else if( astOK ){
-         astError( AST__INTER, "astRead(XmlChan): MakeAstFromIVOA does not "
-                   "support IVOA class \"%s\" (internal AST programming error).", status, 
-                   astXmlGetName( elem ) );
-      }
-
-/* Now deal with other (i.e. NATIVE and QUOTED) format. */
-/* ---------------------------------------------------- */
-   } else {
-
-/* Get the AST class name. This is the name of the XML element. */
-      class = astXmlGetName( elem );
-
-/* Use the associated class name to locate the loader for that
-   class. This function will then be used to build the Object. */
-      loader = astGetLoader( class, status );
-
-/* If OK, save the pointer to the current container element, and indicate
-   that the supplied element is now to be used as the current container.   
-   The "current container" is the XML element from which values are being
-   read. */
-      if( astOK ) {
-         old_container = this->container;
-         this->container = (AstXmlParent *) elem;
-
-/* The "isa_class" item in the XmlChan structure contains a pointer to
-   the name of the class whose loader is currently being invoked. It is set 
-   by the loader itself as a side effect of calling the astReadClassData
-   function. Initialise it to NULL to indicate that astReadClassData has
-   not yet been called. */
-         this->isa_class = NULL;
-
-/* Invoke the loader, which reads the Object definition from the
-   current XML container (i.e. the supplied XML element) and builds the 
-   Object. Supply NULL/zero values to the loader so that it will substitute 
-   values appropriate to its own class. */
-         new = (*loader)( NULL, (size_t) 0, NULL, NULL, (AstChannel *)
-                          this, status );
-
-/* Re-instate the original container. */
-         this->container = old_container;
-      }
-   }
-
-/* If an error occurred, clean up by deleting the new Object and
-   return a NULL pointer. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the pointer to the new Object. */
-   return new;
-}
-
-static double MakeMJD( AstTimeFrame *frm, double time, int *status ) {
-/*
-*  Name:
-*     MakeMJD
-
-*  Purpose:
-*     Create an MJD value from a TimeFrame axis value.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double MakeMJD( AstTimeFrame *frm, double time, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function converts the supplied time value from the system
-*     represented by the supplied TimeFrame into an absolute TBD MJD, 
-*     in units of days.
-
-*  Parameters:
-*     frm
-*        Pointer to the TimeFrame defining the system in which "time" is
-*        supplied.
-*     time
-*        The time value to convert.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The equivalent MJD value.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;
-   AstTimeFrame *cfrm;
-   double result;                
-   
-/* Initialise. */
-   result = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Create a copy of the supplied TimeFrame, and set its attributes to
-   describe the required MJD system. */
-   cfrm = astCopy( frm );
-   astSetSystem( cfrm, AST__MJD );
-   astSetUnit( cfrm, 0, "d" );
-   astSetTimeScale( cfrm, AST__TDB );
-   astSetTimeOrigin( cfrm, 0.0 );
-
-/* Find the Mapping from the supplied TimeFrame to this TimeFrame. Use it to 
-   transform the supplied time value */
-   fs = astConvert( frm, cfrm, "" );
-   if( fs ) {
-      astTran1( fs, 1, &time, 1, &result );
-
-/* Free resources */
-      fs = astAnnul( fs );
-   }
-   cfrm = astAnnul( cfrm );
-
-/* Result */
-   return result;
-
-}
-
-static AstXmlElement *MakePos2D( AstXmlChan *this, AstXmlElement *elem, int *status ){
-/*
-*  Name:
-*     MakePos2D
-
-*  Purpose:
-*     Create an STC Position2D element from the supplied Position3D.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlElement *MakePos2D(  AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function returns a pointer to a Position2D element by throwing
-*     away the last axis in the supplied Position3D element.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the Position3D element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Position2D element.
-
-
-*/
-
-/* Local Variables: */
-   AstXmlElement *el;            /* Pointer to subelement */
-   AstXmlElement *new;           /* Pointer to returned XmlElement */
-   IVOAScan *scan;               /* Structure holding scan results */
-   char **words;                 /* Array of words read from string */
-   char *unit2;                  /* New Unit string */
-   char buff[100];               /* Text buffer */
-   const char *names[3];         /* Names of the subelements to be searched for */
-   const char *unit;             /* Unit string */
-   double pos[3];                /* Values read from Position3D */
-   int i;                        /* Loop count */
-   int l1;                       /* Length of word 1 */
-   int l2;                       /* Length of word 2 */
-   int max[3];                   /* Max allowed occurrences of each name */
-   int min[3];                   /* Min allowed occurrences of each name */
-   int n;                        /* Number of words read from string */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* If the supplied element is not a Position3D just copy it. */
-   if( strcmp( astXmlGetName( elem ), "Position3D" ) ) {
-      new = (AstXmlElement *) astXmlCopy( elem );
- 
-/* Otherwise, we create a new Position2D and add required content to it. */
-   } else {
-
-/* Search the supplied element for the required sub-elements. */
-      names[ 0 ] = "Name";
-      names[ 1 ] = "Error3";
-      names[ 2 ] = "Value3";
-      max[ 0 ] = 1;
-      max[ 1 ] = 2;
-      max[ 2 ] = 1;
-      min[ 0 ] = 1;
-      min[ 1 ] = 0;
-      min[ 2 ] = 0;
-      scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
-      if( scan ) {
-
-/* Create an empty XML element with name "Position2D". */
-         new = astXmlAddElement( NULL, "Position2D", NULL );
-
-/* Get the units attribute from the supplied element. These are the units
-   of the positional axis values. Copy the first 2 words to the unit
-   attribute of the new element. */
-         unit = astXmlGetAttributeValue( elem, "unit" );
-         if( unit ) {
-            words = astChrSplit( unit, &n );
-            if( words ) {
-               if( n > 2 ) {
-                  l1 = strlen( words[ 0 ] );
-                  l2 = strlen( words[ 1 ] );
-                  unit2 = astMalloc( l1 + l2 + 2 );
-                  if( unit2 ) {
-                     strcpy( unit2, words[ 0 ] );
-                     unit2[ l1 ] = ' ';
-                     strcpy( unit2 + l1 + 1, words[ 1 ] );
-                     unit2[ l1 + l2 + 1 ] = 0;
-                     astXmlAddAttr( new, "unit", unit2, NULL );
-                     unit2 = astFree( unit2 );
-                  }
-               } else {
-                  astXmlAddAttr( new, "unit", unit, NULL );
-               }
-
-               if( words ) {
-                  for( i = 0; i < n; i++ ) words[ i ] = astFree( words[ i ] );
-                  words = astFree( words );
-               }
-            }
-         }
-
-/* If this Position3D contains a Name which can be read, obtain it
-   and store it in the returned Position2D. */
-         if( scan->count[ 0 ] > 0 ) {
-            el = astXmlAddElement( new, "Name", NULL );
-            astXmlAddCharData( el, 0, astXmlGetValue( scan->el[ 0 ][ 0 ], 0 ) );
-         }            
-
-/* If this Position3D contains a Value which can be read, obtain it,
-   format the first 2 values and store in the returned Position2D. */
-         if( scan->count[ 2 ] > 0 ) {
-            ElemListD( this, scan->el[ 2 ][ 0 ], 3, pos, status );
-            el = astXmlAddElement( new, "Value2", NULL );
-            sprintf( buff, "%.*g %.*g", DBL_DIG, pos[0], DBL_DIG, pos[1] );
-            astXmlAddCharData( el, 0, buff );
-         }            
-
-/* If this Position3D contains an Error which can be read, obtain it,
-   format the first 2 values and store in the returned Position2D. */
-         if( scan->count[ 1 ] > 0 ) {
-            ElemListD( this, scan->el[ 1 ][ 0 ], 3, pos, status );
-            el = astXmlAddElement( new, "Error2", NULL );
-            sprintf( buff, "%.*g %.*g", DBL_DIG, pos[0], DBL_DIG, pos[1] );
-            astXmlAddCharData( el, 0, buff );
-         }            
-
-/* Free resources */
-         scan = FreeIVOAScan( scan, status );
-      }
-   }
-
-/* Return the result.*/
-   return new;
-
-}
-
-static AstRegion *NegationReader( AstXmlChan *this, AstXmlElement *elem, 
-                                  AstFrame *frm, int *status ){
-/*
-*  Name:
-*     NegationReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Negation region element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *NegationReader( AstXmlChan *this, AstXmlElement *elem,
-*                                AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Negation region element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Negation region element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[1];         /* Names of the subelements to be searched for */
-   int max[1];                   /* Max allowed occurrences of each name */
-   int min[1];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
-   names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
-                "Convex|Box";
-   min[ 0 ] = 1;
-   max[ 0 ] = 1;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create a Region from the component region element, and negate it. */
-      new = RegionReader( this, scan->el[0][0], frm, status );
-      astNegate( new );
-
-/* Get any fill factor from the element and assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstObject *ObsDataLocationReader( AstXmlChan *this, 
-                                         AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     ObsDataLocationReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA ObsDataLocationReader element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *ObsDataLocationReader( AstXmlChan *this, 
-*                                       AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     ObsDataLocationReader element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA ObsDataLocationReader element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-*/
-
-/* Local Variables: */
-   AstPointList *obs;            /* PointList defining the observatory position */
-   AstStcObsDataLocation *stc;   /* Pointer to returned Object */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   stc = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return (AstObject *) stc;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "ObservatoryLocation";
-   names[ 1 ] = "ObservationLocation";
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Read the observation location. */
-      stc = (AstStcObsDataLocation *) StcMetadataReader( this, scan->el[ 1 ][ 0 ], status );
-
-/* Read the observatory location, returning a Pointlist describing the
-   observatory position (if possible), and modifiying the observation
-   Region by (if possible) assigning the observatory location to the 
-   ObsLon and ObsLat attributes of any SpecFrames in the Region, and the
-   ObsLon and ObsLat attributes of any TimeFrames in the Region. */
-      obs = ObservatoryLocationReader( this, scan->el[ 0 ][ 0 ], stc, status );
-      if( obs ) {
-         astStcSetObs( stc, obs );
-         obs = astAnnul( obs );
-      }
-
-/* Free resources. */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Return the pointer to the new Object. */
-   return (AstObject *) stc;
-}
-
-static AstPointList *ObservatoryLocationReader( AstXmlChan *this,
-                                                AstXmlElement *elem, 
-                                                AstStcObsDataLocation *obs, int *status ){
-/*
-*  Name:
-*     ObservatoryLocationReader
-
-*  Purpose:
-*     Make an AST PointList from an IVOA ObservatoryLocationReader element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstPointList *ObservatoryLocationReader( AstXmlChan *this,
-*                                              AstXmlElement *elem, 
-*                                              AstStcObsDataLocation *obs, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST PointList from the supplied IVOA
-*     ObservatoryLocationReader element, and also modifies the supplied
-*     StcObsDataLocation so that the ObsLon and ObsLat attributes hold
-*     the observatory position (if appropriate).
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA ObservatoryLocation element.
-*     obs
-*        Pointer to the StcObsDataLocation in which to store the
-*        observatory position (if terrestrial).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new PointList.
-
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Pointer to obsvtory lon/lat Frame */
-   AstFrame *obs_frm;            /* Pointer to obsvation lon/lat Frame */
-   AstFrame *pfrm;               /* Pointer to axis primary Frame */
-   AstKeyMap *km;                /* KeyMap holding AstroCoords info */
-   AstObject *new;               /* Pointer to returned Region */
-   AstObject *o;                 /* Pointer to retrieved Region */
-   AstPointSet *ps;              /* Pointer to PointSet holding obs lon/lat */
-   AstRegion *err;               /* Pointer to error Region */
-   AstStc *stc;                  /* Pointer to Observatory location stc */
-   char setting[ 100 ];          /* Attribute setting string */
-   const char *dom;              /* Domain string */
-   double **ptr;                 /* Pointers to axis values for obs lon/lat */
-   double lambda;                /* Geodetic longitude radians */
-   double phi;                   /* Geodetic latitude radians */
-   double lon;                   /* Geocentric longitude radians */
-   double lat;                   /* Geocentric latitude radians */
-   int i;                        /* Index of Frame axis */
-   int nax;                      /* Number of Frame axes */
-   int paxis;                    /* Index of primary Frame axis */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise */
-   new = NULL;
-
-/* Read the ObservatoryLocation as an StcMetadata element (it will be
-   represented by a NullRegion). */
-   stc = (AstStc *) StcMetadataReader( this, elem, status );
-
-/* Extract the first AstroCoords KeyMap from the stc. */
-   if( astGetStcNCoord( stc ) == 0 ) {
-      Report( this, elem, FAILURE, "contains no observatory position", status );
-   } else {
-      km = astGetStcCoord( stc, 1 );
-
-/* Extract the PointList holding the axis values from the KeyMap. */
-      if( !astMapGet0A( km, AST__STCVALUE, &new ) ){
-         Report( this, elem, FAILURE, "contains no observatory position", status );
-
-/* Extract any position uncertainty, and store as the uncertainty in the
-   value PointList. */
-      } else if( astMapGet0A( km, AST__STCERROR, &o ) ){
-         err = (AstRegion *) o;
-         astSetUnc( new, err );
-
-/* Free resources */
-         err = astAnnul( err );
-      }
-      km = astAnnul( km );
-   }
-   stc = astAnnul( stc );   
-
-/* Check the Region is a PointList. */
-   if( !astIsAPointList( new ) && astOK ) {
-      astError( AST__INTER, "ObservatoryLocationReader(XmlChan): The "
-                "observatory location is described by a %s rather than "
-                "a PointList (internal AST programming error).", status,
-                astGetClass( new ) );
-   }
-
-/* If possible, we use the observatory location to set the value of the
-   ObsLon and ObsLat attributes of any SpecFrames, and the ObsLon and
-   ObsLat attributes of any TimeFrames, in the supplied ObsDataLocation. 
-   For this to be possible, the PointList being returned must represent 
-   either geodetic or geocentric longitude/latitude. If it is geocentric, 
-   the values need to be converted to geodetic. */
-   ps = astRegTransform( new, NULL, 1, NULL, &frm );
-   ptr = astGetPoints( ps );
-   if( ptr ){
-      nax = astGetNaxes( frm );
-      lon = AST__BAD;
-      lat = AST__BAD;
-      lambda = AST__BAD;
-      phi = AST__BAD;
-      for( i = 0; i < nax; i++ ) {
-         astPrimaryFrame( frm, i, &pfrm, &paxis );
-         dom = astGetDomain( pfrm );
-         if( dom ) {
-            if( !strcmp( dom, "GEO_C" ) ){
-               if( lon == AST__BAD ) {
-                  lon = ptr[i][0];
-                  astSetLabel( pfrm, 0, "Geodetic longitude" );
-               } else {
-                  lat = ptr[i][0];
-                  astSetLabel( pfrm, 1, "Geodetic latitude" );
-                  astSetDomain( pfrm, "GEO_D" );
-               }
-   
-            } else if( !strcmp( dom, "GEO_D" ) ){
-               if( lambda == AST__BAD ) {
-                  lambda = ptr[i][0];
-               } else {
-                  phi = ptr[i][0];
-               }
-            }
-         }
-         pfrm = astAnnul( pfrm );
-      }
-
-      if( lon != AST__BAD ) Geod( lat, lon, &phi, &lambda, status );
-
-      if( lambda != AST__BAD ) {
-         obs_frm = astGetFrame( ((AstRegion *) obs)->frameset, AST__CURRENT );
-         nax = astGetNaxes( obs );
-         for( i = 0; i < nax; i++ ) {
-            astPrimaryFrame( obs_frm, i, &pfrm, &paxis );
-            if( astIsASpecFrame( pfrm ) ) {
-               sprintf( setting, "ObsLon(%d)=%.*g", i + 1, DBL_DIG, lambda*AST__DR2D );
-               astRegSetAttrib( obs, setting, NULL );
-               sprintf( setting, "ObsLat(%d)=%.*g", i + 1, DBL_DIG, phi*AST__DR2D );
-               astRegSetAttrib( obs, setting, NULL );
-            } else if( astIsATimeFrame( pfrm ) ) {
-               sprintf( setting, "ObsLon(%d)=%.*g", i + 1, DBL_DIG, lambda*AST__DR2D );
-               astRegSetAttrib( obs, setting, NULL );
-               sprintf( setting, "ObsLat(%d)=%.*g", i + 1, DBL_DIG, phi*AST__DR2D );
-               astRegSetAttrib( obs, setting, NULL );
-            }
-            pfrm = astAnnul( pfrm );
-         }
-         obs_frm = astAnnul( obs_frm );
-      }
-   }
-
-/* Free resources */
-   frm = astAnnul( frm );
-   ps = astAnnul( ps );
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return (AstPointList *) new;
-}
-
-static void OutputText( AstXmlChan *this, const char *text, int mxlen, int *status ) {
-/*
-*  Name:
-*     OutputText
-
-*  Purpose:
-*     Write a string to the sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void OutputText( AstXmlChan *this, const char *text, int mxlen, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function writes the supplied text to the output sink,
-*     splitting it into lines of no more than "mxlen" characters, if 
-*     required.
-
-*  Parameters:
-*     this
-*        A pointer to the XmlChan.
-*     text
-*        Pointer to the (potentially long) null terminated string to write 
-*        out to the sink.
-*     mxlen
-*        The maximum allowed output line length. If zero, no limit is
-*        placed on the output line length and the supplied text is always 
-*        written out as a single string.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   char *breakat;                /* Pointer to terminating character */
-   char *c;                      /* Pointer to start of next chunk */
-   char *lastend;                /* Pointer to last closing quote */
-   char *lastspace;              /* Pointer to last whitespace character */
-   char *linestart;              /* Pointer to start of current line */
-   char quote;                   /* Opening quote character */
-   char tt;                      /* Character temporarily replaced by 0 */
-   int len;                      /* Length of current line */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* If "mxlen" is zero, just output the string as supplied. */
-   if( mxlen < 1 ) {
-      astPutNextText( this, text );
-
-/* Otherwise, output the string split up into lines */
-   } else {
-      c = (char *) text - 1;
-      quote = 0;
-      lastend = NULL;
-      lastspace = NULL;
-      len = 0;
-      linestart = (char *) text;   
-
-/* Loop round each character in the text */
-      while( *(++c ) ){
-
-/* Note if we are currently inside a quoted string. Remember the quote
-   character (" or ') so that we can look out for the corresponding
-   closing quote. Note the position of the previous quote end. */
-         if( !quote ) {
-            if( *c == '\"' || *c == '\'' ) quote = *c;
-         } else {
-            if( *c == quote ) {
-               quote = 0;
-               lastend = c;
-            }
-         }             
-
-/* Note the position of hte previous space. */
-         if( isspace( *c ) ) lastspace = c;
-
-/* If we have exceeded the maximum allowed line length, split it. If we
-   are inside a quote, we split it at the last quote end (if any). If we
-   are not in a quote, we split it at the last space, or the last quote
-   end (which ever is closest). To cover the case where the end quote is
-   first character beyoind the limit, reduce the limit a bit. */
-         len++;
-         if( len >= mxlen - 2 ) {
-            if( !quote || !lastend ) {
-               if( lastend && lastspace ){
-                  breakat = ( lastend > lastspace ) ? lastend + 1: lastspace;
-               } else if( lastend ){
-                  breakat = lastend + 1;
-               } else if( lastspace ){
-                  breakat = lastspace;
-               } else {
-                  breakat = c;
-               }
-            } else {
-               breakat = lastend + 1;
-            }
-         } else {
-            breakat = NULL;
-         }
-
-/* If we have a line break, output the current line. */
-         if( breakat ) {
-
-/* Terminate the string, first saving the character which is replaced by the 
-   terminating zero so that it can be re-instated later. */
-            tt = *breakat;
-            *breakat = 0;
-
-/* Write out the newly terminated chunk. */
-            astPutNextText( this, linestart );
-
-/* Move on to ths start of the next chunk, decrement the number of characters 
-   remaining, and re-instate the character previously over-written by
-   zero. */
-            c = breakat;
-            linestart = c;
-            *c = tt;                  
-            len = 0;
-            quote = 0;
-         }
-      }
-
-/* Write out any remaining text (this will be less than "mxlen"
-   characters long)*/
-      if( linestart && *linestart ) astPutNextText( this, linestart );
-   }
-}
-
-static AstRegion *PolygonReader( AstXmlChan *this, AstXmlElement *elem, 
-                                 AstFrame *frm, int *status ){
-/*
-*  Name:
-*     PolygonReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Polygon element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *PolygonReader( AstXmlChan *this, AstXmlElement *elem, 
-*                               AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Polygon element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Polygon element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;       
-   AstMapping *map;      
-   AstRegion *new;       
-   IVOAScan *scan;       
-   const char *names[1]; 
-   const char *unit;     
-   const char *funit;    
-   double *pos;          
-   double *x0;
-   double *y0;
-   double lbnd[2];
-   double ubnd[2];
-   int axcon;
-   int axlon;
-   int i;                
-   int is_box;
-   int is_sky;
-   int laxcon;
-   int max[1];           
-   int min[1];           
-   int nv;               
-   int small[ 4 ];
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Vertex";
-   min[ 0 ] = 1;
-   max[ 0 ] = INT_MAX;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* See if the Frame is a SkyFrame, and if so, get the index of the
-   longitude axis. */
-      is_sky = astIsASkyFrame( frm );
-      axlon = is_sky ? astGetLonAxis( (AstSkyFrame *) frm ) : -1;
-
-/* Get the units attribute from the supplied element. These are the units
-   of the vertex axis values. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-      }
-
-/* Create an array to hold the axis values at the vertices. */
-      nv = scan->count[0];
-      pos = astMalloc( sizeof( double )*(size_t) (2*nv) );
-
-/* Read each vertex element in turn. Record whether or not the first 4 
-   vertices have <SmallCircles>. */
-      x0 = pos;
-      y0 = x0 + nv;
-      for( i = 0; i < nv; i++, x0++, y0++ ) {
-         small [ i % 4 ] = VertexReader( this, scan->el[0][i], x0, y0, status );
-      }
-
-/* Reset the pointers so that they point to the first x and y values. */
-      x0 = pos;
-      y0 = x0 + nv;
-
-/* Since the SkyFrame class does not have active Units we must handle it
-   separately. Convert the axis values from the supplied units (e.g.
-   degrees) to radians. */
-      if( is_sky ) {
-         map = astUnitMapper( unit, "rad", NULL, NULL );
-         if( map ) {
-            astTran1( map, nv*2, pos, 1, pos );
-            map = astAnnul( map );
-         } else if( astOK ) {
-            Report( this, elem, FAILURE, "contains unusable units", status );
-         }
-      }
-
-/* If there are 4 vertices we may be able to create an AST Box (not the
-   same as an STC Box) instead of a Polygon.*/
-      is_box = 0;
-      ubnd[0] = x0[ 0 ];
-      lbnd[0] = ubnd[0];
-      ubnd[1] = y0[ 0 ];
-      lbnd[1] = ubnd[1];
-
-      if( nv == 4 ) {
-
-/* See if the edge which ends at the 1st vertex has a constant value on
-   either axis. Is so, note the index of the axis which is held constant. */
-         is_box = 1;
-         if( is_sky && small[ 0 ] ) {
-            laxcon = 1 - axlon;
-
-         } else if( astEQUAL( x0[ 0 ], x0[ 3 ] ) ) {
-            laxcon = 0;
-
-         } else if( astEQUAL( y0[ 0 ], y0[ 3 ] ) ) {
-            laxcon = 1;
-
-         } else {
-            is_box = 0;
-         }
-
-/* If the first edge represents a constant axis value, see if the others
-   do too (ensuring that the axes which are held constant alternate). Also 
-   find the bounds of the box.*/
-         if( is_box ) {
-            for( i = 1; i < 4; i++ ) {
-               if( is_sky && small[ i ] ) {
-                  axcon = 1 - axlon;
-      
-               } else if( astEQUAL( x0[ i ], x0[ i - 1 ] ) ) {
-                  axcon = 0;
-      
-               } else if( astEQUAL( y0[ i ], y0[ i - 1 ] ) ) {
-                  axcon = 1;
-      
-               } else {
-                  is_box = 0;
-                  break;
-               }
-   
-               if( axcon != 1 - laxcon ) {
-                  is_box = 0;
-                  break;
-               }
-
-               if( x0[ i ] > ubnd[0] ) {
-                  ubnd[0] = x0[ i ];
-
-               } else if( x0[ i ] < lbnd[0] ) {
-                  lbnd[0] = x0[ i ];
-               }
-
-               if( y0[ i ] > ubnd[1] ) {
-                  ubnd[1] = y0[ i ];
-
-               } else if( y0[ i ] < lbnd[1] ) {
-                  lbnd[1] = y0[ i ];
-               }
-   
-               laxcon = axcon;
-            }
-         }
-      }
-
-/* Since the SkyFrame class does not have active Units we must handle it
-   separately. The axis values have already been converted from the supplied 
-   units (e.g. degrees) to radians. */
-      if( is_sky ) {
-
-/* Create the Polygon or Box within the SkyFrame. */
-         if( is_box ) {
-            new = (AstRegion *) astBox( frm, 1, lbnd, ubnd, NULL, "", status );
-         } else {
-            new = (AstRegion *) astPolygon( frm, nv, nv, pos, NULL, "", status );
-         }
-
-/* Now handles Polygons in Frames other than SkyFrames. */
-      } else {
-
-/* Take a copy of the supplied Frame and set its Units to the value
-   obtained from the supplied element. */
-         cfrm = astCopy( frm );
-         astSetUnit( cfrm, 0, unit );
-         astSetUnit( cfrm, 1, unit );
-   
-/* Create the Polygon or Box within the SkyFrame. */
-         if( is_box ) {
-            new = (AstRegion *) astBox( cfrm, 1, lbnd, ubnd, NULL, "", status );
-         } else {
-            new = (AstRegion *) astPolygon( cfrm, nv, nv, pos, NULL, "", status );
-         }
-
-/* If the Unit of this Region differs from that of the supplied Frame,
-   set it to the Unit of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new Unit. If the supplied
-   Frame had no set Unit, set it to the units obtained from the supplied
-   element. */
-         for( i = 0; i < 2; i++ ) {
-            if( astTestUnit( frm, i ) ) {
-               funit = astGetUnit( frm, i );
-               if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
-            } else {
-               astSetUnit( frm, i, unit );
-            }          
-         }          
-
-/* Free resources */
-         cfrm = astAnnul( cfrm );
-      }
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-
-/* Free resources */
-      pos = astFree( pos );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static double PosAngleReader( AstXmlChan *this, AstXmlElement *elem, int *status ){
-/*
-*  Name:
-*     PosAngleReader
-
-*  Purpose:
-*     Read an AST position angle value from an IVOA PosAngle element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double PosAngleReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads the supplied PosANgle element and returns a value 
-*     representing a position angle in the AST convention (radians from
-*     +ve second axis to +ve first axis).
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Ellipse element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The position angle.
-
-*/
-
-/* Local Variables: */
-   char buff[ 200 ];             /* Message buffer */
-   const char *paunit;           /* Position angle unit string */
-   const char *ref;              /* Reference axis string */
-   double result;                /* Position angle value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0.0;
-
-/* Get the numerical position angle stored in the supplied PosAngle
-   element. */
-   result = ElemValueD( this, elem, 0.0, status );
-
-/* Get the units attribute from the supplied element. These are the units
-   of the above value. Default is degrees. */
-   paunit = astXmlGetAttributeValue( elem, "unit" );
- 
-/* Convert the position angle to radians. */
-   if( !paunit || !strcmp( paunit, "deg" ) ) {
-      result *= AST__DD2R;
-
-   } else if( !strcmp( paunit, "h" ) ) {
-      result *= 15*AST__DD2R;         
-
-   } else if( !strcmp( paunit, "arcmin" ) ) {
-      result *= AST__DD2R/60.0;         
-
-   } else if( !strcmp( paunit, "arcsec" ) ) {
-      result *= AST__DD2R/3600.0;         
-
-   } else {
-      sprintf( buff, "contains unusable angle units \"%s\"", paunit );
-      Report( this, elem, FAILURE, buff, status );
-   }
-
-/* Get the reference attribute from the supplied element. This indicates
-   the sense and origin of the stored angle value. Convert the result
-   to the AST convention, which is the equivalent of "Y" (which is the same
-   as "North"). "X" means "from X to Y", "Y" means "from Y to X". Default
-   is "X". */
-   ref = astXmlGetAttributeValue( elem, "reference" );
-   if( !ref || !Ustrcmp( ref, "X", status ) ) {
-      result = AST__DPIBY2 - result;         
-
-   } else if( Ustrcmp( ref, "Y", status ) && Ustrcmp( ref, "North", status ) ) {
-      sprintf( buff, "contains unusable reference attribute \"%s\" "
-               "(will assume \"Y\" instead)", ref );
-      Report( this, elem, WARNING, buff, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstRegion *Position2DReader( AstXmlChan *this, AstXmlElement *elem, 
-                                    AstFrame *frm, double *pos, 
-                                    AstKeyMap **anc, int *status ){
-/*
-*  Name:
-*     Position2DReader
-
-*  Purpose:
-*     Modify a Frame to take account of an STC <Position2D> element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *Position2DReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                  AstFrame *frm, double *pos, int axis,
-*                                  AstKeyMap **anc, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads the supplied STC <Position2D> element, and uses it,
-*     if possible, to create the uncertainty associated with the spatial
-*     axis in the supplied Frame. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Position2D element.
-*     frm
-*        Pointer to the 2D spatial Frame.
-*     pos
-*        Pointer to an array in which to return the spatial axis values
-*        represented by the supplied Position2D element. This array is
-*        returned filled with AST__BAD If the supplied Position2D element 
-*        does not contain any axis values.
-*     anc
-*        Address of a location at which to put a pointer to a newly
-*        created KeyMap. This KeyMap will contain ancillary information
-*        from the Position2D. The keys identify the item of ancillary
-*        information (Name, Value, Error, Resolution, Size, Pixel Size).
-*        The value associated with the Name key is string containing
-*        the Name item from the Position2D. The value
-*        associated with each of the other keys is a pointer to a 2D Region
-*        within the supplied Frame, corresponding to the value, error, 
-*        resolution, etc. Keys will not be present in the returned KeyMap
-*        if the corresponding item of ancillary information is not present 
-*        in the Position2D. A NULL pointer is returned if there is no
-*        ancillary information at all.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     The uncertainty Region, or NULL if the supplied Position2D element
-*     does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map1;        /* Mapping from first axis units to radians */
-   AstMapping *map2;        /* Mapping from second axis units to radians */
-   AstPointSet *pset;       /* Pointset holding Position2D axis values */
-   AstRegion *r;            /* Region to store in ancillary KeyMap */
-   AstRegion *result;       /* Returned uncertainty Region */
-   IVOAScan *scan;          /* Structure holding scan results */
-   char **words;            /* Array of words extracted from string */
-   const char *name;        /* Pointer to XML element name */
-   const char *names[6];    /* Names of the subelements to be searched for */
-   const char *unit1;       /* Pointer to axis 1 unit attribute string */
-   const char *unit2;       /* Pointer to axis 2 unit attribute string */
-   const char *unit;        /* Pointer to Position2D's unit attribute string */
-   double **ptr;            /* Arrays holding Position2D axis values */
-   double cen[ 2 ];         /* Centre values */
-   double hw[ 2 ];          /* Half widths values */
-   double pa;               /* Error position angle */
-   int i;                   /* Loop count */
-   int max[6];              /* Max allowed occurrences of each name */
-   int min[6];              /* Min allowed occurrences of each name */
-   int nword;               /* Number of words extracted from string */
-   
-/* Initialise */
-   result = NULL;
-   pos[ 0 ] = AST__BAD;
-   pos[ 1 ] = AST__BAD;
-   *anc = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Name";
-   names[ 1 ] = "Error2|Error2PA";
-   names[ 2 ] = "Value2";
-   names[ 3 ] = "Resolution2|Resolution2PA";
-   names[ 4 ] = "Size2|Size2PA";
-   names[ 5 ] = "PixSize2|PixSize2PA";
-   max[ 0 ] = 1;
-   max[ 1 ] = 2;
-   max[ 2 ] = 1;
-   max[ 3 ] = 2;
-   max[ 4 ] = 2;
-   max[ 5 ] = 2;
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   min[ 3 ] = 0;
-   min[ 4 ] = 0;
-   min[ 5 ] = 0;
-   scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
-   it. */
-      *anc = astKeyMap( "", status );
-      if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME, 
-                                  astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* Get the units attribute from the supplied element. These are the units
-   of the positional axis values. Split into units for each of the two
-   axes. */
-      unit1 = "";
-      unit2 = "";
-      words = NULL;
-      unit = astXmlGetAttributeValue( elem, "unit" );
-
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-
-      } else {
-         words = astChrSplit( unit, &nword );
-         if( words ) {
-            unit1 = words[ 0 ];
-            unit2 = nword > 1 ? words[ 1 ] : words[ 0 ];
-         }
-      }
-
-/* Since the SkyFrame class does not have active Units we must convert the 
-   axis values from the supplied units (e.g. degrees) to radians. Allow
-   for different units on the two axes. */
-      map1 = astUnitMapper( unit1, "rad", NULL, NULL );
-      if( !map1 ) Report( this, elem, FAILURE, "contains unusable units for axis 1", status );
-
-      if( unit1 && unit2 && strcmp( unit1, unit2 ) ) {
-         map2 = astUnitMapper( unit2, "rad", NULL, NULL );
-         if( !map2 ) Report( this, elem, FAILURE, "contains unusable units for axis 2", status );
-      } else {
-         map2 = astClone( map1 );
-      }
-
-/* If this Position2D contains a Value which can be read, obtain it. Otherwise,
-   issue a warning. */ 
-      if( scan->count[ 2 ] > 0 ) {
-         ElemListD( this, scan->el[ 2 ][ 0 ], 2, pos, status );
-
-/* Convert to radians. */
-         if( map1 == map2 ) {
-            astTran1( map1, 2, pos, 1, pos );
-         } else {
-            astTran1( map1, 1, pos, 1, pos );
-            astTran1( map2, 1, pos + 1, 1, pos + 1 );
-         }
-            
-/* If this Position2D contains a value which cannot be used, issue a warning. */
-         if( pos[ 1 ] == AST__BAD ) {
-            Report( this, elem, WARNING, "contains an unreadable <Value>", status );
-         }
-
-/* Create a PointList from it and store in the returned ancillary KeyMap. */
-         pset = astPointSet( 1, 2, "", status );
-         ptr = astGetPoints( pset );
-         if( astOK ) {
-            ptr[ 0 ][ 0 ] = pos[ 0 ];
-            ptr[ 1 ][ 0 ] = pos[ 1 ];
-            r = (AstRegion *) astPointList( frm, pset, NULL, "", status );
-            astMapPut0A( *anc, AST__STCVALUE, r, NULL );
-            r = astAnnul( r );
-         }
-         pset = astAnnul( pset );
-      }
-
-/* Does this Position2D contain any Error? */
-      if( scan->count[ 1 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
-         if( scan->count[ 1 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Error>"
-                    " element. AST can only use the first", status );
-         }
-
-/* If the error has no position angle, just read it as a list of double.
-   Otherwise, read the Error2PA structure. */
-         name = astXmlGetName( scan->el[ 1 ][ 0 ] );
-         if( name ) {
-            if( !strcmp( name, "Error2" ) ) {
-               ElemListD( this, scan->el[ 1 ][ 0 ], 2, hw, status );
-               pa = AST__BAD;
-            } else {
-               pa = Error2PAReader( this, scan->el[ 1 ][ 0 ], hw, status );
-            }
-
-/* Convert to radians, and halve to get the half-width. */
-            if( map1 == map2 ) {
-               astTran1( map1, 2, hw, 1, hw );
-            } else {
-               astTran1( map1, 1, hw, 1, hw );
-               astTran1( map2, 1, hw + 1, 1, hw + 1 );
-            }
-            
-            if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
-            if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-   
-/* Create an Ellipse or Box to describe the error */
-            cen[ 0 ] = 0.0;
-            cen[ 1 ] = 0.0;
-            if( pa != AST__BAD ) {
-               result = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
-                                                  NULL, "", status );
-            } else {
-               result = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
-            }
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCERROR, result, NULL );
-         }
-      }
-
-/* Does this Position2D contain any Resolution? */
-      if( scan->count[ 3 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 Resolution value was found. */
-         if( scan->count[ 3 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Resolution>"
-                    " element. AST can only use the first", status );
-         }
-
-/* If the resolution has no position angle, just read it as a list of double.
-   Otherwise, read the Resolution2PA structure (which is exactly the same
-   as an Error2PA structure). */
-         name = astXmlGetName( scan->el[ 3 ][ 0 ] );
-         if( name ) {
-            if( !strcmp( name, "Resolution2" ) ) {
-               ElemListD( this, scan->el[ 3 ][ 0 ], 2, hw, status );
-               pa = AST__BAD;
-            } else {
-               pa = Error2PAReader( this, scan->el[ 3 ][ 0 ], hw, status );
-            }
-
-/* Convert to radians, and halve to get the half-width. */
-            if( map1 == map2 ) {
-               astTran1( map1, 2, hw, 1, hw );
-            } else {
-               astTran1( map1, 1, hw, 1, hw );
-               astTran1( map2, 1, hw + 1, 1, hw + 1 );
-            }
-            
-            if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
-            if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-   
-/* Create an Ellipse or Box to describe the resolution */
-            cen[ 0 ] = 0.0;
-            cen[ 1 ] = 0.0;
-            if( pa != AST__BAD ) {
-               r = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
-                                                  NULL, "", status );
-            } else {
-               r = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
-            }
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCRES, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Does this Position2D contain any Size? */
-      if( scan->count[ 4 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 Size value was found. */
-         if( scan->count[ 4 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Size>"
-                    " element. AST can only use the first", status );
-         }
-
-/* If the size has no position angle, just read it as a list of double.
-   Otherwise, read the Size2PA structure (which is exactly the same
-   as an Error2PA structure). */
-         name = astXmlGetName( scan->el[ 4 ][ 0 ] );
-         if( name ) {
-            if( !strcmp( name, "Size2" ) ) {
-               ElemListD( this, scan->el[ 4 ][ 0 ], 2, hw, status );
-               pa = AST__BAD;
-            } else {
-               pa = Error2PAReader( this, scan->el[ 4 ][ 0 ], hw, status );
-            }
-
-/* Convert to radians, and halve to get the half-width. */
-            if( map1 == map2 ) {
-               astTran1( map1, 2, hw, 1, hw );
-            } else {
-               astTran1( map1, 1, hw, 1, hw );
-               astTran1( map2, 1, hw + 1, 1, hw + 1 );
-            }
-            
-            if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
-            if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-   
-/* Create an Ellipse or Box to describe the size */
-            cen[ 0 ] = 0.0;
-            cen[ 1 ] = 0.0;
-            if( pa != AST__BAD ) {
-               r = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
-                                                  NULL, "", status );
-            } else {
-               r = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
-            }
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCSIZE, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Does this Position2D contain any PixSize? */
-      if( scan->count[ 5 ] > 0 && map1 ) {
-
-/* Issue a warning if more than 1 PixSize value was found. */
-         if( scan->count[ 5 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <PixSize>"
-                    " element. AST can only use the first", status );
-         }
-
-/* If the pixsize has no position angle, just read it as a list of double.
-   Otherwise, read the PixSize2PA structure (which is exactly the same
-   as an Error2PA structure). */
-         name = astXmlGetName( scan->el[ 5 ][ 0 ] );
-         if( name ) {
-            if( !strcmp( name, "PixSize2" ) ) {
-               ElemListD( this, scan->el[ 5 ][ 0 ], 2, hw, status );
-               pa = AST__BAD;
-            } else {
-               pa = Error2PAReader( this, scan->el[ 5 ][ 0 ], hw, status );
-            }
-
-/* Convert to radians, and halve to get the half-width. */
-            if( map1 == map2 ) {
-               astTran1( map1, 2, hw, 1, hw );
-            } else {
-               astTran1( map1, 1, hw, 1, hw );
-               astTran1( map2, 1, hw + 1, 1, hw + 1 );
-            }
-            
-            if( hw[ 0 ] != AST__BAD ) hw[ 0 ] *= 0.5;
-            if( hw[ 1 ] != AST__BAD ) hw[ 1 ] *= 0.5;
-   
-/* Create an Ellipse or Box to describe the pixsize */
-            cen[ 0 ] = 0.0;
-            cen[ 1 ] = 0.0;
-            if( pa != AST__BAD ) {
-               r = (AstRegion *) astEllipse( frm, 1, cen, hw, &pa,
-                                             NULL, "", status );
-            } else {
-               r = (AstRegion *) astBox( frm, 0, cen, hw, NULL, "", status );
-            }
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCPIXSZ, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Free resources */
-      if( map1 ) map1 = astAnnul( map1 );
-      if( map2 ) map2 = astAnnul( map2 );
-      scan = FreeIVOAScan( scan, status );
-      if( words ) {
-         for( i = 0; i < nword; i++ ) words[ i ] = astFree( words[ i ] );
-         words = astFree( words );
-      }
-
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-
-}
-
-static AstRegion *PositionIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                          AstFrame *frm, int *status ){
-/*
-*  Name:
-*     PositionIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA PositionInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *PositionIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                        AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     PositionInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA PositionInterval element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit or System attribute is not set, this
-*        function will decide on the values to be used, and set these 
-*        values in the supplied Frame before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[1];         /* Names of the subelements to be searched for */
-   const char *unit;             /* Unit string from supplied element */
-   int max[1];                   /* Max allowed occurrences of each name */
-   int min[1];                   /* Min allowed occurrences of each name */
-   int ndim;                     /* Number of axes in supplied Frame */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-element. */
-   ndim = astGetNaxes( frm );
-   if( ndim == 1 ) {
-      names[ 0 ] = "CoordScalarInterval";
-   } else if( ndim == 2 ) {
-      names[ 0 ] = "Coord2VecInterval";
-   } else if( ndim == 3 ) {
-      names[ 0 ] = "Coord3VecInterval";
-   } else if( astOK ) {
-      astError( AST__INTER, "PositionIntervalReader(XmlChan): Supplied "
-                "Frame has more than 3 axes (internal AST programming error )." , status);
-   }
-   min[ 0 ] = 1;
-   max[ 0 ] = 1;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the units attribute from the supplied element. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-      }
-
-/* Read 1-d intervals */
-      if( ndim == 1 ) {
-         new = CoordScalarIntervalReader( this, scan->el[0][0], unit, frm, status );
-
-/* Read 2-d intervals */
-      } else if( ndim == 2 ) {
-         new = Coord2VecIntervalReader( this, scan->el[0][0], unit, frm, status );
-
-/* Read 3-d intervals */
-      } else if( ndim == 3 ) {
-         new = Coord3VecIntervalReader( this, scan->el[0][0], unit, frm, status );
-
-/* Report error for other dimensionalities */
-      } else if( astOK ) {
-         astError( AST__INTER, "PositionIntervalReader(XmlChan): Supplied "
-                   "Frame has more than 3 axes (internal AST programming error )." , status);
-      }
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstObject *Read( AstChannel *this_channel, int *status ) {
-/*
-*  Name:
-*     Read
-
-*  Purpose:
-*     Read an Object from a Channel.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *Read( AstChannel *this_channel, int *status ) 
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astRead method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function reads an Object from an XmlChan.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-*/
-
-/* Local Variables: */
-   AstObject *new;               /* Pointer to returned Object */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlElement *elem;          /* XML element holding AST Object */
-   int def_fmt;                  /* Original default format */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Save the current default format, and then reset it to NATIVE */
-   def_fmt = this->formatdef;
-   this->formatdef = NATIVE_FORMAT;
-
-/* First we construct an in-memory XML representation of the data source,
-   by reading text up to the end of the first element encountered from
-   which an AST Object could be created. If the Skip attribute is zero, then 
-   an error is reported if there is any text prior to the start of the first 
-   usable element. If Skip is non-zero any initial text prior to the start 
-   of the first usable element is ignored. */
-   elem = ReadXmlText( this, status );
-
-/* Check a usable element was found. */
-   if( elem ) {
-
-/* The "current container element" is the XML element from which items
-   are currently being read. Indicate that we are currently not reading
-   any element (not used for IVOA formats). */
-      this->container = NULL;
-
-/* Next we create a new AST Object from this in-memory XML representation
-   of the source. */
-      new = MakeAstFromXml( this, elem, status );
-
-/* Remove the element. This will cause an error to be reported if
-   the element contains any items which have not been used. */
-      elem = Remove( this, elem, status );
-   }
-
-/* If an error has occurred, annul the document. */
-   if( !astOK ) this->readcontext = astXmlAnnul( this->readcontext );
-
-/* If an error occurred, clean up by deleting the new Object and
-   return a NULL pointer, and re-instate original default format. */
-   if ( !astOK ) {
-      new = astDelete( new );
-      this->formatdef = def_fmt;
-   }
-
-/* Return the pointer to the new Object. */
-   return new;
-}
-
-static void ReadClassData( AstChannel *this_channel, const char *class, int *status ) {
-/*
-*  Name:
-*     ReadClassData
-
-*  Purpose:
-*     Read values from a data source for a class loader.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void ReadClassData( AstChannel *this, const char *class, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astReadClassData method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function reads the data for a class from the data source
-*     associated with a Channel, so as to provide values for
-*     initialising the instance variables of that class as part of
-*     building a complete Object. This function should be invoked by
-*     the loader for each class immediately before it attempts to read
-*     these values.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        A pointer to a constant null-terminated string containing the
-*        name of the class whose loader is requesting the data (note
-*        this is not usually the same as the class name of the Object
-*        being built). This value allows the class structure of the
-*        input data to be validated.
-*-
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlContentItem *item;      /* Pointer to next item of content */
-   const char *definedby;        /* Class defining current content items */
-   int nitem;                    /* Number of items in container */
-   int i;                        /* Loop counter */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Check we have a container, and then store the name of the class being
-   loaded. */
-   if( !this->container ){
-      astError( AST__INTER, "astRead(XmlChan): Invalid attempt to read "
-                "%s data - there is currently no container element "
-                "(internal AST programming error).", status, class );
-
-   } else {
-      this->isa_class = class;
-
-/* Go through all the content elements within the current container and
-   give them an extra attribute named "definedby" the value of which is
-   the name of the class which defines the associated AST attribute or 
-   object. This is determined by the the "isa" elements - an element is
-   "definedby" the class noted in the next following "isa" element, or by
-   the class being loaded if there is no following "isa" element. */
-
-/* Find the first "isa" element and get the value of its "class" attribute. 
-   If none is found the name of the class being loaded is used. */
-      definedby = FindNextIsA( (AstXmlElement *) this->container, 0, status );
-
-/* Loop round all elements within the container. */
-      nitem = astXmlGetNitem( this->container );
-      for( i = 0; astOK && i < nitem; i++ ) {   
-         item = astXmlGetItem( this->container, i );
-         if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* If this is an "ISA" element, then we have ended the scope of the
-   current "isa" class. All subsequent items will be defined by the class
-   mentioned in the next following "ISA" element. Find the next ISA
-   element and get its class. */
-            if( astOK && !strcmp( astXmlGetName( item ), ISA ) ) {
-               definedby = FindNextIsA( (AstXmlElement *) this->container, i + 1, status );
-
-/* For other element types, add a "definedby" attribute holding the name
-   of the class defined by the current ISA element. */
-            } else {
-               astXmlAddAttr( item, DEFINEDBY, definedby, NULL );
-            }
-         }
-      }
-   }
-}
-
-static double ReadDouble( AstChannel *this_channel, const char *name, double def, int *status ) {
-/*
-*  Name:
-*     ReadDouble
-
-*  Purpose:
-*     Read a double value as part of loading a class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     double ReadDouble( AstChannel *this, const char *name, double def, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astReadDouble method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function searches the current container element of an XmlChan to
-*     identify a double value with a specified name. If such a value
-*     is found, it is returned, otherwise a default value is returned
-*     instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return a double
-*     value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable value can be found (e.g. it is absent from the
-*        data stream being read), then this value will be returned
-*        instead.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The required value, or the default if the value was not found.
-
-*  Notes:
-*     - A value of 0.0 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlElement *element;       /* Pointer to element holding required value */
-   const char *value;            /* Pointer to attribute value */
-   double result;                /* Value to be returned */
-   int nc;                       /* Number of characters read by astSscanf */
-   
-/* Initialise. */
-   result = 0.0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an ATTR element
-   describing an AST attribute of the specified name. This call ignores
-   ATTR elements which represent default values. No error is
-   reported if an ATTR element with the given name cannot be 
-   found. */
-   element = FindAttribute( this, name, status );
-
-/* If an element was found, attempt to decode the string to give a double 
-   value, checking that the entire string is read. If this fails, then the
-   wrong name has probably been given, or the input data are corrupt,
-   so report an error. */
-   if( element ) {
-      value = astXmlGetAttributeValue( element, VALUE );
-      if( value ) {
-         nc = 0;
-         if ( !( ( 1 == astSscanf( value, " %lf %n", &result, &nc ) )
-                 && ( nc >= (int) strlen( value ) ) ) ) {
-            astError( AST__BADIN, "astRead(XmlChan): The value \"%s = %s\" "
-                      "cannot be read as a double precision floating point "
-                      "number.", status, name, value );
-
-/* If the value was succesfully read, remove the ATTR element
-   from the container. */
-         } else {
-            element = Remove( this, element, status );
-         }
-
-/* Report an error if the attribute does not have a value. */
-      } else {
-         astError( AST__BADIN, "astRead(XmlChan): No value for attribute "
-                   "\"%s\" within element \"%s\".", status, name, 
-                   GetTag( (AstXmlObject *) element, 1, status ) );
-      }
-
-/* If no suitable element was found, then use the default value instead. */
-   } else {
-      result = def;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int ReadInt( AstChannel *this_channel, const char *name, int def, int *status ) {
-/*
-*  Name:
-*     ReadInt
-
-*  Purpose:
-*     Read a int value as part of loading a class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int ReadInt( AstChannel *this, const char *name, int def )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astReadInt method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function searches the current container element of an XmlChan to
-*     identify a int value with a specified name. If such a value
-*     is found, it is returned, otherwise a default value is returned
-*     instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return a int
-*     value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable value can be found (e.g. it is absent from the
-*        data stream being read), then this value will be returned
-*        instead.
-
-*  Returned Value:
-*     The required value, or the default if the value was not found.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlElement *element;       /* Pointer to element holding required value */
-   const char *value;            /* Pointer to attribute value */
-   int result;                   /* Value to be returned */
-   int nc;                       /* Number of characters read by astSscanf */
-   
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an ATTR element
-   describing an AST attribute of the specified name. This call ignores
-   ATTR elements which represent default values. No error is
-   reported if an ATTR element with the given name cannot be 
-   found. */
-   element = FindAttribute( this, name, status );
-
-/* If an element was found, attempt to decode the string to give a int 
-   value, checking that the entire string is read. If this fails, then the
-   wrong name has probably been given, or the input data are corrupt,
-   so report an error. */
-   if( element ) {
-      value = astXmlGetAttributeValue( element, VALUE );
-      if( value ) {
-         nc = 0;
-         if ( !( ( 1 == astSscanf( value, " %d %n", &result, &nc ) )
-                 && ( nc >= (int) strlen( value ) ) ) ) {
-            astError( AST__BADIN,
-                      "astRead(XmlChan): The value \"%s = %s\" cannot "
-                      "be read as an integer.", status, name, value );
-
-/* If the value was succesfully read, remove the ATTR element
-   from the container. */
-         } else {
-            element = Remove( this, element, status );
-         }
-
-/* Report an error if the attribute does not have a value. */
-      } else {
-         astError( AST__BADIN, "astRead(XmlChan): No value for attribute "
-                   "\"%s\" within element \"%s\".", status, name, 
-                   GetTag( (AstXmlObject *) element, 1, status ) );
-      }
-
-/* If no suitable element was found, then use the default value instead. */
-   } else {
-      result = def;
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstObject *ReadObject( AstChannel *this_channel, const char *name, 
-                              AstObject *def, int *status ) {
-/*
-*  Name:
-*     ReadObject
-
-*  Purpose:
-*     Read a (sub)Object as part of loading a class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     char *ReadObject( AstChannel *this, const char *name, AstObject *def )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astReadObject method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function searches the current container element of an XmlChan to
-*     identify an Object with a specified name. If such an Object
-*     is found, a pointer to it is returned, otherwise a default pointer
-*     is returned instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return a int
-*     value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable value can be found (e.g. it is absent from the
-*        data stream being read), then this value will be returned
-*        instead.
-
-*  Returned Value:
-*     A pointer to the Object, or a clone of the default pointer if
-*     the Object was not found.
-
-*  Notes:
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlElement *element;       /* Pointer to element holding required value */
-   AstObject *result;            /* Value to be returned */
-   const char *isa_class;        /* Class currently being loaded */
-   
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an element with a name which
-   is not ATTR and with the specified LABEL. This call ignores
-   elements which represent default values. No error is reported if an
-   element with the given label cannot be found. */
-   element = FindObject( this, name, status );
-
-/* If an element was found, make an AST object from it. First remember
-   the class currently being loaded so that it can be re-instated. */
-   if( element ) {
-      isa_class = this->isa_class;
-      result = MakeAstFromXml( this, element, status );
-      this->isa_class = isa_class;
-
-/* Remove the element from the container. */
-      element = Remove( this, element, status );
-
-/* If no suitable Value structure was found, clone the default
-   pointer, if given. */
-   } else if ( def ) {
-      result = astClone( def );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static char *ReadString( AstChannel *this_channel, const char *name, const char *def, int *status ) {
-/*
-*  Name:
-*     ReadString
-
-*  Purpose:
-*     Read a string value as part of loading a class.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     char *ReadString( AstChannel *this, const char *name, const char *def )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astReadString method
-*     inherited from the Channel class).
-
-*  Description:
-*     This function searches the current container element of an XmlChan to
-*     identify a string value with a specified name. If such a value
-*     is found, it is returned, otherwise a default value is returned
-*     instead.
-*
-*     This function should only be invoked from within the loader
-*     function associated with a class, in order to return a int
-*     value to be assigned to an instance variable. It must be
-*     preceded by a call to the astReadClassData function.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated character string
-*        containing the name of the required value. This must be in
-*        lower case with no surrounding white space. Note that names
-*        longer than 6 characters will not match any value.
-*     def
-*        If no suitable value can be found (e.g. it is absent from the
-*        data stream being read), then this value will be returned
-*        instead.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated null-terminated string
-*     containing the value required, or to a copy of the default
-*     string if the value was not found (or NULL if the "def" pointer
-*     was NULL).
-
-*  Notes:
-*     - It is the caller's responsibility to arrange for the memory
-*     holding the returned string to be freed (using astFree) when it
-*     is no longer required.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlElement *element;       /* Pointer to element holding required value */
-   char *result;                 /* Value to be returned */
-   const char *value;            /* Pointer to attribute value */
-   
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Search the current container element for an ATTR element
-   describing an AST attribute of the specified name. This call ignores
-   ATTR elements which represent default values. No error is
-   reported if an ATTR element with the given name cannot be 
-   found. */
-   element = FindAttribute( this, name, status );
-
-/* If an element was found, return a copy of the "value" string. */
-   if( element ) {
-      value = astXmlGetAttributeValue( element, VALUE );
-      if( value ) {
-         result = astStore( NULL, value, strlen( value ) + 1 );
-
-/* If the new default for XmlFormat has not yet been set, note if this 
-   element contained a "quoted" attribute. */
-         if( this->formatdef == NATIVE_FORMAT ) {
-            if( astXmlGetAttributeValue( element, QUOTED ) ) {
-               this->formatdef = QUOTED_FORMAT;
-            }         
-         }
-
-/* Remove the ATTR element from the container. */
-         element = Remove( this, element, status );
-
-/* Report an error if the attribute does not have a value. */
-      } else {
-         astError( AST__BADIN, "astRead(XmlChan): No value for attribute "
-                   "\"%s\" within element \"%s\".", status, name, 
-                   GetTag( (AstXmlObject *) element, 1, status ) );
-      }
-
-/* If no suitable Value structure was found, then make a dynamic copy
-   of the default string (if given) and return a pointer to this. */
-   } else if ( def ) {
-      result = astStore( NULL, def, strlen( def ) + (size_t) 1 );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static AstXmlElement *ReadXmlText( AstXmlChan *this, int *status ){
-/*
-*  Name:
-*     ReadXmlText
-
-*  Purpose:
-*     Create an in-memory XML tree from an XML text source.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlElement *ReadXmlText( AstXmlChan *this, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function constructs an in-memory XML representation of the data 
-*     source by reading text up to the end of the first element encountered
-*     from which an AST Object could be constructed. If the Skip attribute is 
-*     zero, then an error is reported if there is any text prior to the start 
-*     of the first AST Object. If Skip is non-zero any initial text prior to 
-*     the start of the first usable element is ignored. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the returned XmlElement. This should be annuled using
-*     astXmlAnnul when no longer needed. NULL is returned if the end of
-*     the source text is reached without finding a en element from which 
-*     an AST Object could be read.
-
-*  Notes:
-*     - A NULL pointer is returned if an error has already occurred, of
-*     if this function should fail for any reason.
-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS       /* Declare the thread specific global data */
-   AstXmlElement *result;   /* Returned pointer */
-   int skip;                /* Skip over initial irrelevant markup? */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the structure holding thread-specific global data. */   
-   astGET_GLOBALS(this);
-
-/* Get the value of the Skip attribute. This indicates if we should skip
-   over any irrelevant markup prior to the first element from which an
-   AST object could be created. */
-   skip = astGetSkip( this );
-
-/* Store a pointer to the XmlChan in a module variable so that the IsUsable function 
-   can access its properties. */
-   isusable_this = this;
-
-/* Read characters from the XML source and return an XmlElement structure
-   containing the first usable element encountered. */
-   result = astXmlReadDocument( &(this->readcontext), IsUsable, skip, 
-                               GetNextChar, this );
-
-/* Nullify the module variable for safety. */
-   isusable_this = NULL;
-
-/* If no usable element was found, annul the document. */
-   if( !result ) this->readcontext = astXmlAnnul( this->readcontext );
-
-/* Delete the returned element if an error has occurred. */
-   if( !astOK ) result = astXmlAnnulTree( result );
-
-/* Return the result. */
-   return result;
-
-}
-
-static void ReCentreAnc( AstRegion *region, int nanc, AstKeyMap **ancs, int *status ){
-/*
-*  Name:
-*     ReCentreAnc
-
-*  Purpose:
-*     Re-centre the Regions describing ancillary information extracted 
-*     from an AstroCoords elements. 
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     ReCentreAnc( AstRegion *region, int nanc, AstKeyMap **ancs, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function recentres the Regions which describe ancillary
-*     information from an AstroCoords element so that it is centred at
-*     the centre of the associated AstroCoordsArea element.
-
-*  Parameters:
-*     region
-*        Pointer to the Region defining the associated AstroCoordsArea.
-*     nanc
-*        Number of KeyMap pointers stored in "ancs"
-*     ancs
-*        Pointer to an array of "nanc" elements, each being a pointer to
-*        a KeyMap. Each one describes the ancilary information in an
-*        AstroCoords element associated with the AstroCoordsArea decribed
-*        by "region". Each KeyMap has elements with keys AST__STCERROR,
-*        AST__STCRES, AST__STCSIZE, AST__STCPIXSZ, AST__STCVALUE each of 
-*        which holds a pointer to a Region. These Regions are modified on
-*        exit so that they are centred on a point which inside the supplied 
-*        Region.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;
-   AstFrame *pfrm;
-   AstFrameSet *fs;
-   AstMapping *map;
-   AstMapping *smap;
-   AstObject *o;
-   AstRegion *r2;
-   AstRegion *r;
-   char orgatt[ 20 ];
-   char orgset[ 80 ];
-   char setting[ 80 ];
-   char sysatt[ 20 ];
-   char sysset[ 80 ];
-   const char *old_unit;
-   const char *time_unit;
-   double *lbnd;
-   double *mid;
-   double *ubnd;
-   double epoch;
-   int i;
-   int j;
-   int k;
-   int ndim;
-   int paxis;
-   int time_axis;
-
-   static const char *key[ 5 ] = { AST__STCERROR, 
-                                   AST__STCRES,
-                                   AST__STCSIZE,
-                                   AST__STCPIXSZ,
-                                   AST__STCVALUE };
-
-/* Check the inherited status. Also return if no Keymaps supplied. */
-   if( !nanc || !astOK ) return;
-
-/* Get the Frame  encapsulated by the suipplied Region. */
-   frm = astRegFrame( region );
-
-/* Get the bounds of the supplied Region. */
-   ndim = astGetNaxes( frm );
-   lbnd = astMalloc( sizeof( double )*(size_t) ndim );
-   ubnd = astMalloc( sizeof( double )*(size_t) ndim );
-   mid = astMalloc( sizeof( double )*(size_t) ndim );
-   if( mid ) { 
-      astGetRegionBounds( region, lbnd, ubnd ); 
-
-/* Get a mid point, taking account of unbounded axes. Also find the index of 
-   the time axis (if any) in the supplied Region, and get the System and 
-   TimeOrigin values for the time axis. */
-      time_axis = -1;
-      time_unit = NULL;
-      orgatt[ 0 ] = 0;
-      sysatt[ 0 ] = 0;
-      for( i = 0; i < ndim; i++ ) {
-         if( lbnd[ i ] > -0.5*DBL_MAX ) {
-            if( ubnd[ i ] < 0.5*DBL_MAX ) {
-               mid[ i ] = 0.5*( lbnd[ i ] + ubnd[ i ] );
-            } else {
-               mid[ i ] = lbnd[ i ];
-            }
-         } else {
-            if( ubnd[ i ] < 0.5*DBL_MAX ) {
-               mid[ i ] = ubnd[ i ];
-            } else {
-               mid[ i ] = 0.0;
-            }
-         }
-
-/* If we have not found a time axis, see if the current axis is a time axis. */
-         if( time_axis == -1 ) {
-            astPrimaryFrame( frm, i, &pfrm, &paxis );
-            if( astIsATimeFrame( pfrm ) ) {
-
-/* If so, record its index. */
-               time_axis = i;
-
-/* If the TimeOrigin attribute is set, save its value. Create strings
-   holding the attribute name and appropriate setting string for use with
-   the ancillary regions. */
-               if( astTestTimeOrigin( (AstTimeFrame *) pfrm ) ) {
-                  sprintf( orgatt, "TimeOrigin(%d)", i + 1 );
-                  sprintf( orgset, "TimeOrigin(%d)=%s", i + 1, 
-                           astGetC( pfrm, "TimeOrigin" ) );
-               }
-
-/* If the System attribute is set, save its value. Create strings
-   holding the attribute name and appropriate setting string for use with
-   the ancillary regions. */
-               if( astTestSystem( pfrm ) ) {
-                  sprintf( sysatt, "System(%d)", i + 1 );
-                  sprintf( sysset, "System(%d)=%s", i + 1, 
-                           astGetC( pfrm, "System" ) );
-               }
-
-               time_unit = astGetUnit( pfrm, 0 );
-            }
-            pfrm = astAnnul( pfrm );
-         }
-
-      }
-
-/* Get the Region Epoch. */
-      if( astTestEpoch( frm ) ){
-         epoch = astGetEpoch( frm );
-         sprintf( setting, "Epoch=MJD %.*g", DBL_DIG, epoch );
-      } else {
-         setting[ 0 ] = 0;
-         epoch = AST__BAD;
-      }      
-
-/* Loop round each KeyMap. */
-      for( j = 0; j < nanc; j++ ) {
-
-/* Loop round each of the relevant KeyMap elements (skip the "Value"
-   element since this should not be re-centred). */
-         for( k = 0; k < 5; k++ ) {
-            if( astMapGet0A( ancs[ j ], key[ k ], &o ) ) {
-               r = (AstRegion *) o;
-
-/* The System and TimeOrigin attributes of the STC Region are set when the 
-   AstroCoordArea is read. This occurs after the ancillary Coords Regions are 
-   created. Consequently, the ancillary Coords Regions may not have set 
-   System and/or TimeOrigin values.  So, for System and TimeOrigin, if
-   the attribute is set in the supplied Region but not set in the ancillary
-   Region, transfer the set value to the ancillary Region. */
-               if( strlen( sysatt ) && strlen( orgatt ) ) {
-                  if( !astTest( r, sysatt ) && !astTest( r, orgatt ) ) {
-                     astRegSetAttrib( r, sysset, NULL );
-
-                     old_unit = astGetUnit( r, time_axis );
-                     if( old_unit && time_unit && 
-                         strcmp( old_unit, time_unit ) ) {
-                        if( !astTestUnit( r, time_axis ) ) {
-                           old_unit = NULL;
-                        } else {
-                           old_unit = astStore( NULL, old_unit,
-                                                strlen( old_unit ) + 1 );
-                        }
-                        astSetUnit( r, time_axis, time_unit );
-                     }
-                     astRegSetAttrib( r, orgset, NULL );
-                     if( !old_unit ) {
-                        astClearUnit( r, time_axis );
-                     } else if( strcmp( old_unit, time_unit ) ) {
-                        astSetUnit( r, time_axis, old_unit );
-                        old_unit = astFree( (void *) old_unit );
-                     }
-                  }
-               }
-
-/* Re-centre the Regions held in this element of the KeyMap, and set
-   its Epoch (do not re-centre the "Value" element). */
-               if( strcmp( key[ k ], AST__STCVALUE ) ) {
-
-/* First ensure the ancillary Region refers to the supplied Frame. */
-                  fs = astConvert( r, frm, "" );
-                  if( fs ) {
-                     map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-                     smap = astSimplify( map );
-                     if( !astIsAUnitMap( smap ) ) {
-                        r2 = astMapRegion( r, smap, frm );
-                        astMapPut0A( ancs[ j ], key[ k ], r2, NULL );
-                        (void) astAnnul( r );
-                        r = r2;
-                     } 
-                     map = astAnnul( map );
-                     smap = astAnnul( smap );
-                     fs = astAnnul( fs );
-
-/* Now set the epoch and re-centre.*/                   
-                     if( epoch != AST__BAD ) astRegSetAttrib( r, setting, NULL );
-                     astRegCentre( r, mid, NULL, 0, AST__CURRENT );
-                  }
-               }
-               r = astAnnul( r );
-            }
-         }
-      }
-   }
-
-/* Free resources. */
-   lbnd = astFree( lbnd );
-   ubnd = astFree( ubnd );
-   mid = astFree( mid );
-   frm = astAnnul( frm );
-}
-
-static AstObject *RedshiftFrameReader( AstXmlChan *this, 
-                                       AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     RedshiftFrameReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA RedshiftFrame element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *RedshiftFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     RedshiftFrame element. The returned Object is a SpecFrame in which
-*     the Domain is set explicitly to REDSHIFT.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA RedshiftFrame element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *new;            /* Pointer to returned Object */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[3];         /* Names of the subelements to be searched for */
-   const char *sor;              /* StdOfRest for returned Frame */
-   const char *type;             /* Doppler type (velocity or redshift) */
-   const char *sys;              /* Spectral system */
-   int max[3];                   /* Max allowed occurrences of each name */
-   int min[3];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return (AstObject *) new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "TOPOCENTER|BARYCENTER|HELIOCENTER|GEOCENTER|LSR|"
-                "LSRK|GALACTIC_CENTER|LOCAL_GROUP_CENTER|LSRD";
-   names[ 1 ] = DOPPLER_DEFINITION;
-   names[ 2 ] = "Name";
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   max[ 2 ] = 1;
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   min[ 2 ] = 0;
-   scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the name of the Element specifying the reference position and find
-   the corresponding AST name.*/
-      sor = astXmlGetName( scan->el[0][0] );
-      if( !strcmp( sor, "TOPOCENTER" ) ) {
-         sor = "Topo";
-      } else if( !strcmp( sor, "BARYCENTER" ) ){
-         sor = "Bary";
-      } else if( !strcmp( sor, "GEOCENTER" ) ){
-         sor = "Geo";
-      } else if( !strcmp( sor, "LSR" ) || !strcmp( sor, "LSRK" ) ) {
-         sor = "LSRK";
-      } else if( !strcmp( sor, "LSRD" ) ) {
-         sor = "LSRD";
-      } else if( !strcmp( sor, "GALACTIC_CENTER" ) ) {
-         sor = "Galactic";
-      } else if( !strcmp( sor, "LOCAL_GROUP_CENTER" ) ) {
-         sor = "Local_group";
-      } else if( !strcmp( sor, "HELIOCENTER" ) ) {
-         sor = "Helio";
-      } else if( astOK ){
-         astError( AST__INTER, "RedshiftFrameReader(XmlChan): Unknown "
-                   "standard of rest %s (internal AST programming error).", status, 
-                   sor );
-      }
-
-/* Issue a warning if the reference position includes an ephemeris. */
-      if( FindElement( this, scan->el[0][0], "PlanetaryEphem", status ) ) {
-         Report( this, scan->el[0][0], WARNING, "contains a <PlanetaryEphem> "
-                 "element which will be ignored", status );
-      }
-
-/* Get the value of the value_type attribute from the element. */
-      type = astXmlGetAttributeValue( elem, "value_type" );
-      if( !type ) type = "VELOCITY";
-
-/* If the type is REDSHIFT, set the system to redshift. Also check that
-   any <DopplerDefinition> element is "OPTICAL". */
-      if( !strcmp( type, "REDSHIFT" ) ) {
-         sys = astXmlGetValue( scan->el[1][0], 0 );
-         if( sys && !strcmp( sys, "OPTICAL" ) ) {
-            sys = "REDSHIFT";
-         } else {
-            Report( this, elem, FAILURE, "specifies dimensionless "
-                    "redshift (z) but has non-optical <DopplerDefinition>", status );
-         }
-
-/* Otherwise, get the value of the Doppler definition element, and translate 
-   it to an AST value.*/
-      } else {
-         sys = astXmlGetValue( scan->el[1][0], 0 );
-         if( !sys ) {
-            Report( this, elem, FAILURE, "contains a <DopplerDefinition> "
-                    "element which is not simply character data", status );
-   
-         } else if( !strcmp( sys, "OPTICAL" ) ) {
-            sys = "VOPT";
-   
-         } else if( !strcmp( sys, "RADIO" ) ) {
-            sys = "VRAD";
-   
-         } else if( !strcmp( sys, "RELATIVISTIC" ) ) {
-            sys = "VREL";
-   
-         } else {
-            Report( this, elem, FAILURE, "contains unsupported Doppler definition", status );
-         }
-      }
-
-/* Create a suitable SpecFrame. */
-      new = astSpecFrame( "Domain=REDSHIFT,System=%s,StdOfRest=%s", status, sys, sor);
-      
-/* If the SpectralFrame has a <Name> element use it as the SpecFrame title. */
-      if( scan->count[2] ) astSetTitle( new, astXmlGetValue( scan->el[2][0], 0 ) );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
-   return (AstObject *) new;
-}
-
-static AstRegion *RedshiftIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                          AstFrame *frm, int *status ){
-/*
-*  Name:
-*     RedshiftIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA RedshiftInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *RedshiftIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                        AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     RedshiftInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA RedshiftInterval element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit or System attribute is not set, this
-*        function will decide on the values to be used, and set these 
-*        values in the supplied Frame before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstRegion *new;               /* Pointer to returned Region */
-   AstSystemType sys;            /* Redshift system */
-   IVOAScan *scan;               /* Structure holding scan results */
-   char *unit;                   /* Unit string from supplied element */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double hilimit;               /* Upper spectral limit */
-   double lolimit;               /* Lower spectral limit */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "LoLimit";
-   names[ 1 ] = "HiLimit";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the limits. */
-      lolimit = scan->count[0] ? ElemValueD( this, scan->el[0][0], 0.0, status ) : AST__BAD;
-      hilimit = scan->count[1] ? ElemValueD( this, scan->el[1][0], 0.0, status ) : AST__BAD;
-
-/* Use any unit and vel_time_unit attributes in the supplied element to
-   determine the system and units for the redshift Frame. */
-      sys = RedshiftSys( this, elem, &unit, 1, status );
-
-/* If no system has been set in the supplied Frame, set a default system
-   now (radio velocity if both units are present, dimensionaless redshift 
-   otherwise). */
-      if( !astTestSystem( frm ) ) {
-         astSetSystem( frm, sys );
-
-/* The ReddshiftSys function always returns AST__VRADIO if the velocity
-   is not dimensionless. In this case, if the supplied Frame has system 
-   explicitly set AST__VOPTICAL, we use the supplied Frame preference of
-   optical/radio instead of the default returned by RedshiftSys. */
-      } else if( sys != AST__REDSHIFT ) {
-         sys = astGetSystem( frm );
-         if( sys == AST__REDSHIFT ) sys = AST__VRADIO;
-      }
-
-/* Take a copy of the supplied Frame and set its Units to the value found 
-   above. */
-      cfrm = astCopy( frm );
-      astSetUnit( cfrm, 0, unit );
-   
-/* If at least one limit was found, create an Interval within this
-   modified Frame. Otherwise create a negated NullRegion. */
-      if( lolimit != AST__BAD || hilimit != AST__BAD ) {
-         new = (AstRegion *) astInterval( cfrm, &lolimit, &hilimit, NULL, "", status );
-      } else {
-         new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
-      }
-   
-/* If the Units of this Region differs from that of the supplied Frame,
-   set it to the Units of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new Units. If the supplied
-   Frame had no set Units, set it to the units implied by the supplied 
-   XML element. */
-      if( astTestUnit( frm, 0 ) ) {
-         funit = astGetUnit( frm, 0 );
-         if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
-      } else {
-         astSetUnit( frm, 0, unit );
-      }          
-   
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      cfrm = astAnnul( cfrm );
-      if( unit ) unit = astFree( unit );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *RedshiftReader( AstXmlChan *this, AstXmlElement *elem, 
-                                  AstFrame *frm, AstKeyMap **anc, int *status ){
-/*
-*  Name:
-*     RedshiftReader
-
-*  Purpose:
-*     Modify a Frame to take account of an STC <Redshift> element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *RedshiftReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                AstFrame *frm, AstKeyMap **anc, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads the supplied STC <Redshift> element, and uses it,
-*     if possible, to create the uncertainty associated with the redshift 
-*     axis in the supplied Frame. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Redshift element.
-*     frm
-*        Pointer to the 1D redshift Frame.
-*     anc
-*        Address of a location at which to put a pointer to a newly
-*        created KeyMap. This KeyMap will contain ancillary information
-*        from the Redshift. The keys identify the item of ancillary
-*        information (Name, Value, Error, Resolution, Size, Pixel Size).
-*        The value associated with the Name key is string containing
-*        the Name item from the Redshift. The value associated with each of 
-*        the other keys is a pointer to a 1D Region within the supplied 
-*        Frame, corresponding to the value, error, resolution, etc. Keys 
-*        will not be present in the returned KeyMap if the corresponding 
-*        item of ancillary information is not present in the Redshift. A 
-*        NULL pointer is returned if there is no ancillary information at all.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     The uncertainty Region, or NULL if the supplied Redshift element
-*     does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;         /* FrameSet connecting "sf1" and "sf2" */
-   AstMapping *map;         /* Mapping from <Redshift> Frame to supplied Frame */
-   AstRegion *r2;           /* Region mapped into returned Frame */
-   AstRegion *r3;           /* Simplified Region mapped into returned Frame */
-   AstRegion *r;            /* Original Region */
-   AstRegion *result;       /* Returned uncertainty Region */
-   AstSpecFrame *sf1;       /* SpecFrame describing value element */
-   AstSystemType fsys;      /* Redshift system from supplied Stc */
-   IVOAScan *scan;          /* Structure holding scan results */
-   const char *name;        /* Pointer to XML element name */
-   const char *names[6];    /* Names of the subelements to be searched for */
-   char *unit;              /* Pointer to Redshift's unit attribute string */
-   double lbnd[ 1 ] ;       /* Lower interval bounds */
-   double tmp;              /* Temporary storage */
-   double ubnd[ 1 ] ;       /* Upper interval bounds */
-   double v;                /* Axis value */
-   int max[6];              /* Max allowed occurrences of each name */
-   int min[6];              /* Min allowed occurrences of each name */
-
-/* Initialise */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Name";
-   names[ 1 ] = "Error";
-   names[ 2 ] = "Value";
-   names[ 3 ] = "Resolution";
-   names[ 4 ] = "Size";
-   names[ 5 ] = "PixSize";
-   max[ 0 ] = 1;
-   max[ 1 ] = 2;
-   max[ 2 ] = 1;
-   max[ 3 ] = 2;
-   max[ 4 ] = 2;
-   max[ 5 ] = 2;
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   min[ 3 ] = 0;
-   min[ 4 ] = 0;
-   min[ 5 ] = 0;
-   scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
-   it. */
-      *anc = astKeyMap( "", status );
-      if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME, 
-                                  astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* Determine the units and system implied by the <Redshift> element. 
-   The returned system is AST__REDSHIFT if there is no unit attribute in
-   the <Redshift> element, and is AST__VRADIO otherwise. */
-      fsys = RedshiftSys( this, elem, &unit, 1, status );
-
-/* If no system has been set in the supplied Frame, set it now to the system
-   determined above. */
-      if( !astTestSystem( frm ) ) {
-         astSetSystem( frm, fsys );
-
-/* The ReddshiftSys function above always returns AST__VRADIO if the velocity
-   is not dimensionless. However, the supplied Frame may have System set
-   explicitly to AST__VOPTICAL. In this case change the "fsys" value to use
-   AST__VOPTICAL. */
-      } else if( fsys != AST__REDSHIFT ) {
-         fsys = astGetSystem( frm );
-         if( fsys == AST__REDSHIFT ) fsys = AST__VRADIO;
-      }
-
-/* If the supplied Frame has no set units, set them now to the units of
-   the Redshift element (if any, and if the redshift is not dimensionless). */
-      if( unit && fsys != AST__REDSHIFT && 
-          astGetSystem( frm ) != AST__REDSHIFT && !astTestUnit( frm, 0 ) ) {
-         astSetUnit( frm, 0, unit );
-      }
-
-/* The values represented by the <Redshift> element may not be in the same 
-   system, units, etc as the supplied SpecFrame. We will need to be able to
-   convert from one to the other, so create a SpecFrame describing the
-   system and units used by the <Redshift> element. */
-      sf1 = astCopy( frm );
-      astSetSystem( sf1, fsys );
-      if( unit ) {
-         astSetUnit( sf1, 0, unit );
-         unit = astFree( unit );
-      }    
-
-/* Find the Mapping from Redshift value to the supplied SpecFrame value */
-      fs = astConvert( sf1, frm, "" );
-      if( fs ) {
-         map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         fs = astAnnul( fs );
-      } else {
-         map = NULL;
-         Report( this, elem, FAILURE, "connot convert AstroCoords "
-                 "redshift values to the required redshift system", status );
-      }
-
-/* If this Redshift contains a Value which can be read, obtain it. */
-      if( scan->count[ 2 ] > 0 ) {
-         name = astXmlGetName( scan->el[ 2 ][ 0 ] );
-         if( name && !strcmp( name, "Value" ) ) {
-            v = ElemValueD( this, scan->el[ 2 ][ 0 ], AST__BAD, status );
-
-/* Convert the value into the supplied SpecFrame system. Create an
-   Interval describing it and store it in the returned ancillary keyMap.
-   Note we create an Interval rather than a PintList since the Prism
-   class can only extrude using Intervals. */
-            astTran1( map, 1, &v, 1, &tmp );
-            r = (AstRegion *) astInterval( frm, &tmp, &tmp, NULL, "", status ) ;
-            astMapPut0A( *anc, AST__STCVALUE, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for Error values in the Redshift. */
-      if( scan->count[ 1 ] > 0 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
-         if( scan->count[ 1 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Error>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first Error value. */
-         v = ElemValueD( this, scan->el[1][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an error bar centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            result = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCERROR, result, NULL );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for Resolution values in the Redshift. */
-      if( scan->count[ 3 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
-         if( scan->count[ 3 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Resolution>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first value. */
-         v = ElemValueD( this, scan->el[3][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            r3 = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCRES, r3, NULL );
-            r3 = astAnnul( r3 );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for Size values in the Redshift. */
-      if( scan->count[ 4 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
-         if( scan->count[ 4 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Size>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first value. */
-         v = ElemValueD( this, scan->el[4][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            r3 = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCSIZE, r3, NULL );
-            r3 = astAnnul( r3 );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for PixSize values in the Redshift. */
-      if( scan->count[ 5] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
-         if( scan->count[ 5 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <PixSize>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first value. */
-         v = ElemValueD( this, scan->el[5][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Redshift element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            r3 = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCPIXSZ, r3, NULL );
-            r3 = astAnnul( r3 );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-   
-/* Free resources. */
-      scan = FreeIVOAScan( scan, status );
-      sf1 = astAnnul( sf1 );
-      map = astAnnul( map );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-
-}
-
-static AstSystemType RedshiftSys( AstXmlChan *this, AstXmlElement *elem, 
-                                  char **unit, int report, int *status ){
-/*
-*  Name:
-*     RedshiftSys
-
-*  Purpose:
-*     Determine the redshift system described by the attributes in a
-*     given element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstSystemType RedshiftSys( AstXmlChan *this, AstXmlElement *elem, 
-*                                char **unit, int report, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function determines the redshift system described by the unit and
-*     vel_time_unit attributes in the supplied element. It optionally reports 
-*     an error if the units are not recognised. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA element containing the unit attribute to be used.
-*     unit
-*        Pointer to a location at which to return a pointer to a
-*        dynamically allocated string in which is stored the total units string
-*        implied by the unit and vel_time_unit attributes. This string
-*        should be freed when no longer needed using astFree. A NULL
-*        pointer is returned if either of the two attributes (unit and
-*        vel_time_unit) is not found in the supplied element, or if an error 
-*        occurs.
-*     report
-*        If non-zero, then a failure is reported if the spectral system
-*        cannot be determined from the supplied string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     The redshift system (radio velocity if both unit and vel_time_unit
-*     attributes are present in the supplied element, or dimensionaless 
-*     redshift otherwise). 
-
-*/
-
-/* Local Variables: */
-   const char *punit;            /* Pointer to positional unit string */
-   const char *tunit;            /* Pointer to time unit string */
-   int pl;                       /* Length of punit string */
-   int tl;                       /* Length of tunit string */
-
-/* Initialise. */
-   *unit = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return AST__BADSYSTEM;
-
-/* Get the Unit attribute from the element (this describes units of position) */
-   punit = astXmlGetAttributeValue( elem, "unit" );
-   if( punit ) {
-
-/* Check it is a linear measure (not angular). */
-      if( strstr( "m", punit ) &&
-          strstr( "km", punit ) &&
-          strstr( "mm", punit ) &&
-          strstr( "AU", punit ) &&
-          strstr( "kpc", punit ) &&
-          strstr( "Mpc", punit ) &&
-          strstr( "lyr", punit ) ) {
-         if( report ) Report( this, elem, FAILURE, "contains an angular unit attribute", status );
-      }
-   }
-
-/* Get the vel_time_unit attribute from the element (this describes units of
-   time). If OK, construct the total unit string (eg "km/h") . */
-   tunit = astXmlGetAttributeValue( elem, "vel_time_unit" );
-   if( tunit ) {
-      if( !punit ) {
-         if( report ) Report( this, elem, FAILURE, "contains time units but not position units - assuming Z", status );
-      } else {
-         pl = strlen( punit );
-         tl = strlen( tunit );
-         *unit = astMalloc( (size_t)( pl + tl + 2 ) );
-         if( *unit ) {
-            strcpy( *unit, punit );
-            (*unit)[ pl ] = '/';
-            strcpy( *unit + pl + 1, tunit );
-         }
-      }
-
-   } else if( punit ) {
-      if( report ) Report( this, elem, FAILURE, "contains position units but not time units - assuming Z", status );
-   }
-
-/* Return a default system (radio velocity if both units are present, 
-   dimensionless redshift otherwise). */
-   return ( punit && tunit ) ? AST__VRADIO : AST__REDSHIFT;
-}
-
-static AstRegion *RegionReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstFrame *frm, int *status ){
-/*
-*  Name:
-*     RegionReader
-
-*  Purpose:
-*     Make an AST Region from any subclass of IVOA Region element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *RegionReader( AstXmlChan *this, AstXmlElement *elem,
-*                              AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     element which can be of any subclass of Region.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   const char *name;             /* Region type */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Process each supported type of STC Region. */
-   name = astXmlGetName( elem );
-   if( !strcmp( name, "Intersection" ) ) {
-      new = IntersectionReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Union" ) ) {
-      new = UnionReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Negation" ) ) {
-      new = NegationReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "AllSky" ) ) {
-      new = AllSkyReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Circle" ) ) {
-      new = CircleReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Ellipse" ) ) {
-      new = EllipseReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Polygon" ) ) {
-      new = PolygonReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Box" ) ) {
-      new = BoxReader( this, elem, frm, status );
-
-   } else if( !strcmp( name, "Convex" ) ) {
-      new = ConvexReader( this, elem, frm, status );
-
-   } else {
-      astError( AST__INTER, "RegionReader(XmlChan): Does not yet "
-                "support \"%s\" regions (internal AST programming "
-                "error).", status, name );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstXmlElement *Remove( AstXmlChan *this, AstXmlElement *element, int *status ) {
-/*
-*  Name:
-*     Remove
-
-*  Purpose:
-*     Remove an element from the current container element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlElement *Remove( AstXmlChan *this, AstXmlElement *element, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function removes the specified element from the current
-*     container element, and then annuls the removed element. An error is 
-*     reported if the element being removed contains anything other than 
-*     comments, "isa" elements and blank character data (all contents should 
-*     have been consumed by the process of reading the object).
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     element
-*        Pointer to the XML element to be removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A NULL pointer is returned.
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item; /* Item */
-   const char *def;         /* Pointer to default attribute value */
-   int i;                   /* Index of current item */
-   int nitem;               /* Number of items still in the element */
-
-/* Check the global error status, and the supplied element. */
-   if ( !astOK || !element ) return NULL;
-
-/* Check we have a container from which to remove the element. If so, 
-   check that the container is the elements parent. If so, remove the
-   element from its parent container. */
-   if( this->container ) {
-      if( (AstXmlParent *) this->container != astXmlGetParent( element ) ){
-         astError( AST__INTER, "Remove(XmlChan): Supplied element is not "
-                   "contained within the current container element (internal "
-                   "AST programming error)." , status);
-      } else {
-         astXmlRemoveItem( element );
-      }
-   }
-
-/* Check that the element being removed is empty (apart from comments,
-   defaulted values and "isa" elements). */
-   nitem = astXmlGetNitem( element );
-   for( i = 0; i < nitem; i++ ) {
-      item = astXmlGetItem( element, i );
-      if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* See if this element represents a default value */
-         def = astXmlGetAttributeValue( item, DEFAULT );
-
-/* Default values and "isa" elements are OK. */
-         if( ( !def || strcmp( def, TRUE ) ) && astOK &&
-             strcmp( astXmlGetName( item ), ISA ) ) {
-
-/* Remove any "definedby" attribute (added by ReadClassData) so that it
-   does not appear in the error message. */
-            if( astXmlGetAttributeValue( item, DEFINEDBY ) ) {
-               astXmlRemoveAttr( item, DEFINEDBY, NULL );
-            }
-
-/* Report the error. */
-            if( astOK ) astError( AST__BADIN, "astRead(XmlChan): The following "
-                                  "tag was not recognised as valid input within "
-                                  "a %s: %s", status, astXmlGetName( element ), 
-                                  GetTag( (AstXmlObject *) item, 1, status ) );
-            break;
-         }
-               
-/* Character data is OK so long as it contains only white space */
-      } else if( astXmlCheckType( item, AST__XMLBLACK ) ) {
-         astError( AST__BADIN, "astRead(XmlChan): The following character "
-                   "data was not recognised as valid input within a %s: %s", status,
-                   astXmlGetName( element ), astXmlGetValue( item, 0 ) );
-         break;
-
-      } else if( astXmlCheckType( item, AST__XMLCDATA ) ) {
-         astError( AST__BADIN, "astRead(XmlChan): The following CDATA section "
-                   "data was not recognised as valid input within a %s: %s", status,
-                   astXmlGetName( element ), astXmlGetValue( item, 0 ) );
-         break;
-
-      } else if( astXmlCheckType( item, AST__XMLPI ) ) {
-         astError( AST__BADIN, "astRead(XmlChan): The following processing "
-                   "instruction was not recognised as valid input within "
-                   "a %s: %s", status, astXmlGetName( element ), GetTag( (AstXmlObject *) item, 1, status ) );
-         break;
-      }
-   }
-
-/* Remove the element from its parent and the annul it. */
-   astXmlRemoveItem( element );
-   astXmlAnnul( element );   
-
-/* Return a NULL pointer. */
-   return NULL;
-}
-
-static void Report( AstXmlChan *this, AstXmlElement *elem, int severity, 
-                    const char *msg, int *status ){
-/*
-*  Name:
-*     Report
-
-*  Purpose:
-*     Handle problems reading supplied XML.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void Report( AstXmlChan *this, AstXmlElement *elem, int severity, 
-*                  const char *msg, int *status )
-
-*  Class Membership:
-*     XmlChan member function 
-
-*  Description:
-*     This function handles conditions which arise whilst interpreting
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XmlElement which cound not be interpreted.
-*     severity
-*        WARNING (in which case the message is added to a list of
-*        warnings, but execution continues), or FAILURE, in which case
-*        an error is reported using astError, or RESET in which case any
-*        warnings stored in the XmlChan are removed ("elem" and "msg" are 
-*        ignored).
-*     msg
-*        A message describing the condition.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   char buff[300];            /* Message buffer */
-   char *text;                /* Pointer to tformatted element text */
-   const char *name;          /* Element name */
-
-   if( severity == RESET ) astAddWarning( this, 0, NULL, NULL, status );
-
-   if( !astOK ) return;
-
-   if( severity == WARNING && !astGetStrict( this ) ) {
-      name = astXmlGetName( elem );
-      sprintf( buff, "astRead(%s): Warning whilst reading %s %s element: %s",
-               astGetClass( this ), ANA(name), name, msg );
-      astAddWarning( this, 1, buff, "astRead", status );
-
-   } else {
-      text = (char *) astXmlGetTag( elem, 1 );
-      astError( AST__BADIN, "astRead(%s): Failed to read %s element: %s", status,
-                astGetClass( this ), text, msg );
-      text = astFree( text );
-   }
-}
-
-static IVOAScan *ScanIVOAElement( AstXmlChan *this, AstXmlElement *elem, int n,
-                                  const char *names[], int min[], int max[], int *status ){
-/*
-*  Name:
-*     ScanIVOAElement
-
-*  Purpose:
-*     Identify required sub-elements within an IVOA element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     IVOAScan *ScanIVOAElement( AstXmlChan *this, AstXmlElement *elem, int n,
-*                                const char *names[], int min[], int max[], int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function searches the supplied XML element for named sub-elements.
-*     A structure is returned containing the number of sub-elements found
-*     with each name, and pointers to the sub-elements. This structure
-*     should be freed using FreeIVOAScan when no longer needed.
-*
-*     Reports are made about any content in the supplied element which is
-*     not specified in the list of known sub-element names (excepting
-*     comments and white space).
-*
-*     Reports are also made if the number of sub-elements found with each
-*     known name is inappropriate (the minimum and maximum allowed
-*     occurrences of each name is specified by the caller).
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the XML element to be searched.
-*     n
-*        The number of names supplied in "names"
-*     names
-*        An array holding pointers to strings giving the names of the known 
-*        sub-elements. Each string may be either a single element name,
-*        or a set of element names separated by "|" (the string must
-*        also start and end with a "|"). If a set is supplied, then the 
-*        associated "min" and "max" values specify the minimum and maximum 
-*        total number of occurrences of all names in the set, and the 
-*        occurrence count stored in the returned structure gives the total 
-*        number of occurrences of all names in the set.
-*     min
-*        An array holding the mimimum number of occrrences of each name within 
-*        the element being searched. Supplied in the same order as the names 
-*        themselves.
-*     max
-*        An array holding the maximum number of occrrences of each name within 
-*        the element being searched. Supplied in the same order as the names 
-*        themselves.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the IVOAScan structure holding the results of the
-*     scan. A NULL pointer is returned unless all names have at least
-*     their minimum number of occurrences in the supplied element. A NULL
-*     pointer is returned if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstXmlContentItem *item;      /* Current content item */
-   IVOAScan *result;             /* Pointer to returned structure */
-   char *text;                   /* Pointer formatted item string */
-   char buff[ 200 ];             /* Message buffer */
-   const char *name;             /* Pointer to element name string */
-   const char *w1;               /* Pointer to word to use in message */
-   const char *w2;               /* Pointer to word to use in message */
-   const char *p;                /* Pointer to start of name in string */
-   int i;                        /* Index of current content item */
-   int j;                        /* Index of current name */
-   int k;                        /* Index of current occurrence of name */
-   int l;                        /* Length of element name */
-   int known;                    /* Was content item known? */
-   int nitem;                    /* No. of content items in supplied element */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Initialise a structure to hold the results of the scan. */
-   result = astMalloc( sizeof(IVOAScan) );
-   if( result ) {
-      result->n = n;
-      result->count = astMalloc( sizeof(int)*(size_t)n);
-      result->el = astMalloc( sizeof(AstXmlElement **)*(size_t)n);
-      if( result->el ) {
-         for( j = 0; j < n; j++ ) {
-            result->count[ j ] = 0;         
-            result->el[ j ] = NULL;         
-         }
-      }
-   }
-
-/* Loop round all items in the elements contents. */
-   if( astOK ) {
-      nitem = astXmlGetNitem( elem );
-      for( i = 0; i < nitem; i++ ) {
-         item = astXmlGetItem( elem, i );
-         known = 1;
-
-/* If it is not an XML element, it is not known. */
-         if( !astXmlCheckType( item, AST__XMLELEM ) ) {
-            known = 0;
-  
-/* If it is an element, get the name of the element. */         
-         } else {
-            name = astXmlGetName( item );
-
-/* See if this name is in the supplied list of known names. */
-            known = 0;
-            j = 0;
-            if( name ) {
-               l = strlen( name );
-               for( j = 0; j < n; j++ ) {
-                  p = strstr(  names[ j ], name );
-                  if( p ){
-                     if( p == names[ j ] ) {
-                        if( p[ l ] == 0 || p[ l ] == '|' ) {
-                           known = 1;
-                           break;
-                        }
-                     } else {
-                        if( p[ -1 ] == '|' && ( p[ l ] == 0 || p[ l ] == '|' ) ) {
-                           known = 1;
-                           break;
-                        }
-                     }                                   
-                  }
-               }
-            }
-
-/* If it is known, store the element in the results structure */
-            if( known ) {
-               k = ( result->count[ j ] )++;
-               result->el[ j ]= astGrow( result->el[ j ], k + 1,
-                                         sizeof( AstXmlElement * ) );
-               if(  result->el[ j ] ) {
-                  result->el[ j ][ k ] = (AstXmlElement *) item;
-               } else {
-                  break;
-               }
-            }
-         }
-
-/* If this content item was not known, issue a warning unless it is a comment
-   or white space. */
-         if( !known && !astXmlCheckType( item, AST__XMLCOM ) && 
-                       !astXmlCheckType( item, AST__XMLWHITE ) ) {
-            text = (char *) astXmlFormat( item );
-            if( text ) {
-               if( strlen( text ) > 30 ) text[ 30 ] = 0;
-               sprintf( buff, "contains the following which is being ignored: \"%s\"",
-                        text );
-               text = astFree( text );
-               Report( this, elem, WARNING, buff, status );
-            }
-         }
-      }
-
-/* Now check that the number of instances of each element found is OK.
-   Report warnings or failures if not. */
-      if( astOK ) {
-         for( j = 0; j < n; j++ ) {
-            if( result->count[ j ] < min[ j ] ) {
-               w1 = ( result->count[ j ] == 1 ) ? "element" : "elements";
-               w2 = ( min[ j ] == 1 ) ? "is" : "are";
-               sprintf( buff, "contains %d <%s> %s but at least %d %s needed",
-                        result->count[ j ], names[ j ], w1, min[ j ], w2 );
-               Report( this, elem, FAILURE, buff, status );
-
-            } else if ( result->count[ j ] > max[ j ] ) {
-               w1 = ( result->count[ j ] == 1 ) ? "element" : "elements";
-               w2 = ( max[ j ] == 1 ) ? "is" : "are";
-               sprintf( buff, "contains %d <%s> %s but no more than %d %s "
-                        "allowed (only the first will be used)",
-                        result->count[ j ], names[ j ], w1, max[ j ], w2 );
-               Report( this, elem, WARNING, buff, status );
-            }
-         }
-      }
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = FreeIVOAScan( result, status );
-
-/* Return the results structure.*/
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a XmlChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astSetAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function assigns an attribute value for a XmlChan, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     setting
-*        Pointer to a null terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   int ival;                     /* Integer attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by "astSscanf" */
-   int pr;                       /* Offset to start of string */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* XmlIndent */
-/* ----------*/
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "xmlindent= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetXmlIndent( this, ival );
-
-/* XmlLength */
-/* ----------*/
-   } else if ( nc = 0,
-        ( 1 == astSscanf( setting, "xmllength= %d %n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-      astSetXmlLength( this, ival );
-
-/* XmlFormat */
-/* ----------*/
-   } else if( nc = 0,
-        ( 0 == astSscanf( setting, "xmlformat=%n%*[^\n]%n", &ival, &nc ) )
-        && ( nc >= len ) ) {
-
-      nc = astChrLen( setting + ival );
-
-      if( !Ustrncmp( setting + ival, NATIVE_STRING, nc, status ) ){
-         astSetXmlFormat( this, NATIVE_FORMAT );
-
-      } else if( !Ustrncmp( setting + ival, QUOTED_STRING, nc, status ) ){
-         astSetXmlFormat( this, QUOTED_FORMAT );
-
-      } else if( !Ustrncmp( setting + ival, IVOA_STRING, nc, status ) ){
-         astSetXmlFormat( this, IVOA_FORMAT );
-
-      } else {
-         astError( AST__BADAT, "astSet(%s): Unknown XML format '%s' "
-                   "requested for a %s.", status, astGetClass( this ), setting + ival, 
-                   astGetClass( this ) );
-      }
-
-/* XmlPrefix */
-/* ----------*/
-   } else if ( nc = 0, ( 0 == astSscanf( setting, "xmlprefix=%n%*[^\n]%n", &pr, &nc ) )
-                && ( nc >= len ) ) {
-      astSetXmlPrefix( this, setting + pr );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static void SinkWrap( void (* sink)( const char * ), const char *line, int *status ) {
-/*
-*  Name:
-*     SinkWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C XmlChan sink function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     void SinkWrap( void (* sink)( const char * ), const char *line, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function invokes the sink function whose pointer is
-*     supplied in order to write an output line to an external data
-*     store.
-
-*  Parameters:
-*     sink
-*        Pointer to a sink function, whose single parameter is a
-*        pointer to a const, null-terminated string containing the
-*        text to be written, and which returns void. This is the form
-*        of XmlChan sink function employed by the C language interface
-*        to the AST library.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Invoke the sink function. */
-   ( *sink )( line );
-}
-
-static char *SourceWrap( const char *(* source)( void ), int *status ) {
-/*
-*  Name:
-*     SourceWrap
-
-*  Purpose:
-*     Wrapper function to invoke a C XmlChan source function.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     char *SourceWrap( const char *, int *status(* source)( void ) )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function invokes the source function whose pointer is
-*     supplied in order to read the next input line from an external
-*     data store. It then returns a pointer to a dynamic string
-*     containing a copy of the text that was read.
-
-*  Parameters:
-*     source
-*        Pointer to a source function, with no parameters, that
-*        returns a pointer to a const, null-terminated string
-*        containing the text that it read. This is the form of XmlChan
-*        source function employed by the C language interface to the
-*        AST library.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated, null terminated string
-*     containing a copy of the text that was read. This string must be
-*     freed by the caller (using astFree) when no longer required.
-*
-*     A NULL pointer will be returned if there is no more input text
-*     to read.
-
-*  Notes:
-*     - A NULL pointer value will be returned if this function is
-*     invoked with the global error status set or if it should fail
-*     for any reason.
-*/
-
-/* Local Variables: */
-   char *result;                 /* Pointer value to return */
-   const char *line;             /* Pointer to input line */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Invoke the source function to read the next input line and return a
-   pointer to the resulting string. */
-   line = ( *source )();
-
-/* If a string was obtained, make a dynamic copy of it and save the
-   resulting pointer. */
-   if ( line ) result = astString( line, (int) strlen( line ) );
-
-/* Return the result. */
-   return result;
-}
-
-static AstObject *SpaceFrameReader( AstXmlChan *this, 
-                                    AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     SpaceFrameReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA SpaceFrame element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *SpaceFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     SpaceFrame element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA SpaceFrame element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
-   AstObject *new;               /* Pointer to returned Object */
-   AstXmlElement *el;            /* Pointer to sub-element */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *dom;              /* Domain string for returned SkyFrame */
-   const char *eq;               /* Equinox string for returned SkyFrame */
-   const char *names[4];         /* Names of the subelements to be searched for */
-   const char *sys;              /* System for returned Frame */
-   int ignore_h;                 /* Ignore 3rd spherical axis? */
-   int max[4];                   /* Max allowed occurrences of each name */
-   int min[4];                   /* Min allowed occurrences of each name */
-   int isgeod;                   /* Is the system geodetic lon/lat? */
-   int isgeoc;                   /* Is the system geocentric lon/lat? */
-   int need_eq;                  /* Does system need an equinox? */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "ICRS|GALACTIC_II|SUPER_GALACTIC|HEE|FK4|FK5|ECLIPTIC|GEO_C|GEO_D";
-   names[ 1 ] = "TOPOCENTER";
-   names[ 2 ] = "Name";
-   names[ 3 ] = "SPHERICAL|CARTESIAN|UNITSPHERE|POLAR";
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   max[ 2 ] = 1;
-   max[ 3 ] = 1;
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   min[ 2 ] = 0;
-   min[ 3 ] = 1;
-   scan = ScanIVOAElement( this, elem, 4, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the sky coordinate system specified in the element. */
-      sys = astXmlGetName( scan->el[0][0] );
-      need_eq = 0;
-      dom = NULL;
-
-/* If the system is geodetic or geocentric, ignore height information if
-   supplied. This is so we can get an approximation to an observatory
-   position given in 3D, for use with SpecFrame. */
-      ignore_h = 0;
-      isgeod = sys && !strcmp( sys, "GEO_D" );
-      isgeoc = sys && !strcmp( sys, "GEO_C" );
-      if( isgeod || isgeoc ){
-         if( AttrValueI( this, scan->el[3][0], "coord_naxes", 2, status ) != 2 ) {
-            Report( this, elem, WARNING, "contains 3D spherical spatial "
-                    "coords (unsupported by AST - height information will "
-                    "be ignored)", status );
-            ignore_h = 1;
-         }
-
-/* If the system is geodetic ignore any attributes specifying a reference 
-   spheroid. */
-         if( isgeod && astXmlGetNattr( scan->el[0][0] ) > 0 ) {
-            Report( this, elem, WARNING, "contains reference spheroid "
-                    "(unsupported by AST - default values will be used)", status );
-         }
-      }                  
-
-/* Check that the spatial axes are longitude/latitude */
-      if( strcmp( "SPHERICAL", astXmlGetName( scan->el[3][0] ) ) ){
-         Report( this, elem, FAILURE, "contains non-spherical spatial "
-                 "coords (currently unsupported by AST)", status );
-
-      } else if( !ignore_h && AttrValueI( this, scan->el[3][0], "coord_naxes", 2, status ) != 2 ) {
-         Report( this, elem, FAILURE, "contains 3D spherical spatial "
-                 "coords (currently unsupported by AST)", status );
-
-      } else if( AttrValueB( this, scan->el[3][0], "coord_vel", 0, status ) ) {
-         Report( this, elem, FAILURE, "contains velocity coords", status );
-
-/* Now check for the supported sky coordinate systems and translate to the
-   equivalent AST value. Note if the system needs an equinox to qualify it. */
-      } else if( !strcmp( sys, "GALACTIC_II" ) ){
-         sys = "GALACTIC";
-         need_eq = 0;
-
-      } else if( !strcmp( sys, "SUPER_GALACTIC" ) ){
-         sys = "SUPERGALACTIC";
-         need_eq = 0;
-
-      } else if( !strcmp( sys, "HEE" ) ){
-         sys = "HELIOECLIPTIC";
-         need_eq = 0;
-
-      } else if( !strcmp( sys, "FK4" ) ) {
-         sys = "FK4";
-         need_eq = 1;
-
-      } else if( !strcmp( sys, "FK5" ) ) {
-         sys = "FK5";
-         need_eq = 1;
-
-      } else if( !strcmp( sys, "ECLIPTIC" ) ) {
-         sys = "ECLIPTIC";
-         need_eq = 1;
-
-      } else if( isgeoc ) {
-         dom = "GEO_C";
-         sys = "UNKNOWN";
-         need_eq = 0;
-
-      } else if( isgeod ) {
-         dom = "GEO_D";
-         sys = "UNKNOWN";
-         need_eq = 0;
-
-      } else {
-         sys = "ICRS";
-         need_eq = 0;
-      }
-
-/* Extract the equinox if required. */
-      if( need_eq ) {
-         el = FindElement( this, scan->el[0][0], "Equinox", status );
-         if( el ) {
-            eq = astXmlGetValue( el, 0 );
-            if( !eq ) Report( this, scan->el[0][0], WARNING, "contains an "
-                              "<Equinox> element which is not simply "
-                              "character data. The AST default (B1950 "
-                              "or J2000) will be used", status );
-         } else {
-            eq = NULL;
-            Report( this, scan->el[0][0], WARNING, "contains no <Equinox> element. "
-                              "The AST default (B1950 or J2000) will be used", status );
-         }
-
-      } else {
-         eq = NULL;
-      }
-
-/* Create a suitable SkyFrame. */
-      new = (AstObject *) astSkyFrame( "system=%s", status, sys);
-      if( eq ) astSetC( new, "Equinox", eq );
-      if( dom ) astSetDomain( new, dom );
-
-      if( isgeod ){
-         astSetLabel( new, 0, "Geodetic longitude" );
-         astSetLabel( new, 1, "Geodetic latitude" );
-
-      } else if( isgeoc ){
-         astSetLabel( new, 0, "Geocentric longitude" );
-         astSetLabel( new, 1, "Geocentric latitude" );
-      }
-
-/* If the SpaceFrame has a <Name> element use it as the Frame title. */
-      if( scan->count[2] ) astSetTitle( new, astXmlGetValue( scan->el[2][0], 0 ) );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
-   return (AstObject *) new;
-}
-
-static AstSystemType SpecSys( AstXmlChan *this, AstXmlElement *elem, 
-                              const char *unit, int report, int *status ) {
-/*
-*  Name:
-*     SpecSys
-
-*  Purpose:
-*     Determine the spectral system described by a given units string.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstSystemType SpecSys( AstXmlChan *this, AstXmlElement *elem, 
-*                            const char *unit, int report, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function determines the spectral system described by a given units 
-*     string. It optionally reports an error if the string is not
-*     recognised.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan. Only used if "report" is non-zero.
-*     elem
-*        Pointer to the IVOA element to which the unit relates. Only used 
-*        if "report" is non-zero.
-*     unit
-*        Pointer to the units string.
-*     report
-*        If non-zero, then a failure is reported if the spectral system
-*        cannot be determined from the supplied string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     The spectral system, or AST__BADSYSTEM if an error occurs.
-
-*/
-
-/* Local Variables: */
-   AstMapping *map;         /* Mapping from supplied unit to default unitl */
-   AstSystemType sys;       /* System value corresponding to "unit" */
-   char buff[200];          /* Buffer for failure message */
-
-/* Initialise */
-   sys = AST__BADSYSTEM;
-
-/* Check inherited status */
-   if( !astOK ) return sys; 
-
-/* See if a Mapping can be found from the supplied units to "Hz". If 
-   so, the supplied units are assumed to describe frequency. */
-   map = astUnitMapper( unit, "Hz", NULL, NULL );
-   if( map ) {
-      sys = AST__FREQ;
-
-/* Otherwise, see if a Mapping can be found from the supplied units to
-   "m" (metre). If so, the supplied units are assumed to describe wavelength. */
-   } else {
-      map = astUnitMapper( unit, "m", NULL, NULL );
-      if( map ) {
-         sys = AST__WAVELEN;
-
-/* Otherwise, see if a Mapping can be found from the supplied units to
-   "J" (Joule). If so, the supplied units are assumed to describe energy. */
-      } else {      
-         map = astUnitMapper( unit, "J", NULL, NULL );
-         if( map ) {
-            sys = AST__ENERGY;
-
-/* Otherwise, see if a Mapping can be found from the supplied units to
-   "m^-1" (per metre). If so, the supplied units are assumed to describe 
-   wave number. */
-         } else {      
-            map = astUnitMapper( unit, "m^-1", NULL, NULL );
-            if( map ) {
-               sys = AST__WAVENUM;
-
-/* Otherwise, report an error if requested. */
-            } else if( report ){
-               sprintf( buff, "contains unsupported spectral units \"%s\"", unit );
-               Report( this, elem, FAILURE, buff, status );
-            }
-         }
-      }
-   }
-
-/* Free resources */
-   if( map ) map = astAnnul( map );
-
-/* Return the result. */
-   return sys;
-}   
-
-static AstRegion *SpectralReader( AstXmlChan *this, AstXmlElement *elem, 
-                                  AstFrame *frm, double *rf,
-                                  AstKeyMap **anc, int *status ){
-/*
-*  Name:
-*     SpectralReader
-
-*  Purpose:
-*     Modify a Frame to take account of an STC <Spectral> element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *SpectralReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                AstFrame *frm, double *rf,
-*                                AstKeyMap **anc, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads the supplied STC <Spectral> element, and uses it,
-*     if possible, to create the uncertainty associated with the spectral 
-*     axis in the supplied Frame. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Spectral element.
-*     frm
-*        Pointer to the 1D spectral Frame.
-*     rf
-*        Point to double in which to return the rest frequency to be used
-*        with any redshift axis. Value is returned in Hz. AST__BAD will
-*        be returned if no rest frequency is found.
-*     anc
-*        Address of a location at which to put a pointer to a newly
-*        created KeyMap. This KeyMap will contain ancillary information
-*        from the Spectral. The keys identify the item of ancillary
-*        information (Name, Value, Error, Resolution, Size, Pixel Size).
-*        The value associated with the Name key is string containing
-*        the Name item from the Spectral. The value associated with each of 
-*        the other keys is a pointer to a 1D Region within the supplied 
-*        Frame, corresponding to the value, error, resolution, etc. Keys 
-*        will not be present in the returned KeyMap if the corresponding 
-*        item of ancillary information is not present in the Spectral. A 
-*        NULL pointer is returned if there is no ancillary information at all.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     The uncertainty Region, or NULL if the supplied Spectral element
-*     does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
-   AstFrameSet *fs;         /* FrameSet connecting "sf1" and "sf2" */
-   AstMapping *map;         /* Mapping from <Spectral> Frame to supplied Frame */
-   AstRegion *r2;           /* Region mapped into returned Frame */
-   AstRegion *r3;           /* Simplified Region mapped into returned Frame */
-   AstRegion *r;            /* Original Region */
-   AstRegion *result;       /* Returned uncertainty Region */
-   AstSpecFrame *sf1;       /* SpecFrame describing value element */
-   AstSpecFrame *sf2;       /* SpecFrame describing returned "rf" value */
-   AstSystemType fsys;      /* Spectral system from supplied Stc */
-   IVOAScan *scan;          /* Structure holding scan results */
-   const char *name;        /* Pointer to XML element name */
-   const char *names[6];    /* Names of the subelements to be searched for */
-   const char *unit;        /* Pointer to Spectral's unit attribute string */
-   double lbnd[ 1 ] ;       /* Lower interval bounds */
-   double ubnd[ 1 ] ;       /* Upper interval bounds */
-   double tmp;              /* Mapped value */
-   double v;                /* Axis value */
-   int max[6];              /* Max allowed occurrences of each name */
-   int min[6];              /* Min allowed occurrences of each name */
-
-/* Initialise */
-   result = NULL;
-   *rf = AST__BAD;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Name";
-   names[ 1 ] = "Error";
-   names[ 2 ] = "Value";
-   names[ 3 ] = "Resolution";
-   names[ 4 ] = "Size";
-   names[ 5 ] = "PixSize";
-   max[ 0 ] = 1;
-   max[ 1 ] = 2;
-   max[ 2 ] = 1;
-   max[ 3 ] = 2;
-   max[ 4 ] = 2;
-   max[ 5 ] = 2;
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   min[ 3 ] = 0;
-   min[ 4 ] = 0;
-   min[ 5 ] = 0;
-   scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
-   it. */
-      *anc = astKeyMap( "", status );
-      if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME, 
-                                  astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* The values represented by the <Spectral> element may not be in the same 
-   system,units, etc as the supplied SpecFrame. We will need to be able to
-   convert from one to the other, so create a SpecFrame describing the
-   system and units used by the <Spectral> element. If the element does not 
-   have a unit attribute, assume the values are in the supplied SpecFrame 
-   system and units. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( unit ) {
-         sf1 = astCopy( frm );
-         fsys = SpecSys( this, elem, unit, 1, status );
-         astSetSystem( sf1, fsys );
-         astSetUnit( sf1, 0, unit );
-
-/* If the supplied Frame did not have any set System, use the values from
-   the <Spectral> Frame. */
-         if( !astTestSystem( frm ) ) {
-            astSetSystem( frm, fsys );
-            astSetUnit( frm, 0, unit );
-         } else if( astGetSystem( frm ) == fsys && !astTestUnit( frm, 0 ) ) {
-            astSetUnit( frm, 0, unit );
-         }
-
-      } else {
-         sf1 = astClone( frm );
-      }    
-
-/* Find the Mapping from Spectral value to the supplied SpecFrame value */
-      fs = astConvert( sf1, frm, "" );
-      if( fs ) {
-         map = astGetMapping( fs, AST__BASE, AST__CURRENT );
-         fs = astAnnul( fs );
-      } else {
-         map = NULL;
-         Report( this, elem, FAILURE, "connot convert AstroCoords "
-                 "spectral values to the required spectral system", status );
-      }
-
-/* If this Spectral contains a frequency Value which can be read, obtain
-   it. We will use the value to calculate the returned rest frequency. */ 
-      if( scan->count[ 2 ] > 0 ) {
-         name = astXmlGetName( scan->el[ 2 ][ 0 ] );
-         if( name && !strcmp( name, "Value" ) ) {
-            v = ElemValueD( this, scan->el[ 2 ][ 0 ], AST__BAD, status );
-
-/* Convert the value into the supplied SpecFrame system. Create an
-   Interval describing it and store it in the returned ancillary keyMap.
-   Use an Interval rather than a PointList since an Interval can be used 
-   within a Prism to extrude another Region, but a PointList cannot. */
-            astTran1( map, 1, &v, 1, &tmp );
-            r = (AstRegion *) astInterval( frm, &tmp, &tmp, NULL, "", status ) ;
-            astMapPut0A( *anc, AST__STCVALUE, r, NULL );
-            r = astAnnul( r );
-
-/* We also want the rest frequency in Hz. Create a SpecFrame describing Hz. */
-            sf2 = astCopy( sf1 );
-            astSet( sf2, "system=freq,unit=Hz", status );
-
-/* Find the Mapping from the supplied value to frequency in Hz. Use it to
-   convert the rf value into Hz. */
-            fs = astConvert( sf1, sf2, "" );
-            if( fs ) {
-               astTran1( fs, 1, &v, 1, rf );
-               fs = astAnnul( fs );
-            } else if( astOK ) {
-               Report( this, elem, FAILURE, "Cannot convert spectral value"
-                         "to frequency in Hz.", status );
-            }
-            sf2 = astAnnul( sf2 );
-         }
-      }
-
-/* Check for Error values in the Spectral. */
-      if( scan->count[ 1 ] > 0 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
-         if( scan->count[ 1 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Error>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first Error value. */
-         v = ElemValueD( this, scan->el[1][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an error bar centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            result = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCERROR, result, NULL );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for Resolution values in the Spectral. */
-      if( scan->count[ 3 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
-         if( scan->count[ 3 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Resolution>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first value. */
-         v = ElemValueD( this, scan->el[3][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            r3 = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCRES, r3, NULL );
-            r3 = astAnnul( r3 );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for Size values in the Spectral. */
-      if( scan->count[ 4 ] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
-         if( scan->count[ 4 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Size>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first value. */
-         v = ElemValueD( this, scan->el[4][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            r3 = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCSIZE, r3, NULL );
-            r3 = astAnnul( r3 );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-
-/* Check for PixSize values in the Spectral. */
-      if( scan->count[ 5] > 0 ) {
-
-/* Issue a warning if more than 1 value was found. */
-         if( scan->count[ 5 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <PixSize>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first value. */
-         v = ElemValueD( this, scan->el[5][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an interval centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the Frame represented by the Spectral element. 
-   Map it into the supplied Frame. Simplify it. Store in the returned 
-   ancillary KeyMap. */
-            r = (AstRegion *) astInterval( sf1, lbnd, ubnd, NULL, "", status );
-            r2 = astMapRegion( r, map, frm );                    
-            r3 = astSimplify( r2 );                    
-            astMapPut0A( *anc, AST__STCPIXSZ, r3, NULL );
-            r3 = astAnnul( r3 );
-            r2 = astAnnul( r2 );
-            r = astAnnul( r );
-         }
-      }
-   
-/* Free resources. */
-      scan = FreeIVOAScan( scan, status );
-      sf1 = astAnnul( sf1 );
-      map = astAnnul( map );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-
-}
-
-static AstObject *SpectralFrameReader( AstXmlChan *this, 
-                                       AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     SpectralFrameReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA SpectralFrame element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *SpectralFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     SpectralFrame element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA SpectralFrame element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
-   AstSpecFrame *new;            /* Pointer to returned Object */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   const char *sor;              /* StdOfRest for returned Frame */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return (AstObject *) new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "TOPOCENTER|BARYCENTER|HELIOCENTER|GEOCENTER|LSR|"
-                "LSRK|GALACTIC_CENTER|LOCAL_GROUP|LSRD";
-   names[ 1 ] = "Name";
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the name of the Element specifying the reference position and find
-   the corresponding AST name.*/
-      sor = astXmlGetName( scan->el[0][0] );
-      if( !strcmp( sor, "TOPOCENTER" ) ) {
-         sor = "Topo";
-      } else if( !strcmp( sor, "BARYCENTER" ) ){
-         sor = "Bary";
-      } else if( !strcmp( sor, "GEOCENTER" ) ){
-         sor = "Geo";
-      } else if( !strcmp( sor, "LSR" ) || !strcmp( sor, "LSRK" ) ) {
-         sor = "LSRK";
-      } else if( !strcmp( sor, "LSRD" ) ) {
-         sor = "LSRD";
-      } else if( !strcmp( sor, "GALACTIC_CENTER" ) ) {
-         sor = "Galactic";
-      } else if( !strcmp( sor, "LOCAL_GROUP" ) ) {
-         sor = "Local_group";
-      } else if( !strcmp( sor, "HELIOCENTER" ) ) {
-         sor = "Helio";
-      } else if( astOK ){
-         astError( AST__INTER, "SpectralFrameReader(XmlChan): Unknown "
-                   "standard of rest %s (internal AST programming error).", status, 
-                   sor );
-      }
-
-/* Issue a warning if the reference position includes an ephemeris. */
-      if( FindElement( this, scan->el[0][0], "PlanetaryEphem", status ) ) {
-         Report( this, scan->el[0][0], WARNING, "contains a <PlanetaryEphem> "
-                 "element which will be ignored", status );
-      }
-
-/* Create a suitable SpecFrame. */
-      new = astSpecFrame( "StdOfRest=%s", status, sor);
-      
-/* If the SpectralFrame has a <Name> element use it as the SpecFrame title. */
-      if( scan->count[1] ) astSetTitle( new, astXmlGetValue( scan->el[1][0], 0 ) );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Object. */
-   return (AstObject *) new;
-}
-
-static AstRegion *SpectralIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                          AstFrame *frm, int *status ){
-/*
-*  Name:
-*     SpectralIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA SpectralInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *SpectralIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                        AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     SpectralInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA SpectralInterval element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit or System attribute is not set, this
-*        function will decide on the values to be used, and set these 
-*        values in the supplied Frame before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstRegion *new;               /* Pointer to returned Region */
-   AstSystemType fsys;           /* System value from supplied Frame */
-   AstSystemType sys;            /* System value corresponding to "unit" */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   char *title;                  /* Title string */
-   const char *unit;             /* Unit string from supplied element */
-   double hilimit;               /* Upper spectral limit */
-   double lolimit;               /* Lower spectral limit */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "LoLimit";
-   names[ 1 ] = "HiLimit";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the limits. */
-      lolimit = scan->count[0] ? ElemValueD( this, scan->el[0][0], 0.0, status ) : AST__BAD;
-      hilimit = scan->count[1] ? ElemValueD( this, scan->el[1][0], 0.0, status ) : AST__BAD;
-
-/* Get the Unit attribute from the element. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-
-/* Find the spectral system corresponding to these units. */
-      } else {
-         sys = SpecSys( this, elem, unit, 1, status );
-   
-/* Take a copy of the supplied Frame and set its System and Units to
-   these values. Ensure the title is preserved. */
-         cfrm = astCopy( frm );
-         if( astTestTitle( frm ) ) {
-            title = (char *) astGetTitle( frm );
-            if( title ) title = astStore( NULL, title, strlen( title ) + 1 );
-         } else {
-            title = NULL;
-         }
-         astSetSystem( cfrm, sys );
-         astSetUnit( cfrm, 0, unit );
-         if( title ) astSetTitle( cfrm, title );
-   
-/* If at least one limit was found, create an Interval within this
-   modified Frame. Otherwise create a negated NullRegion. */
-         if( lolimit != AST__BAD || hilimit != AST__BAD ) {
-            new = (AstRegion *) astInterval( cfrm, &lolimit, &hilimit, NULL, "", status );
-         } else {
-            new = (AstRegion *) astNullRegion( cfrm, NULL, "negated=1", status );
-         }
-   
-/* If the System of this Region differs from that of the supplied Frame,
-   set it to the System of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new System. If the supplied
-   Frame had no set system, set it to the system implied by th eunits in the
-   supplied XML element. */
-         if( astTestSystem( frm ) ) {
-            fsys = astGetSystem( frm );
-            if( fsys != sys ) astSetSystem( new, fsys );
-         } else {
-            astSetSystem( frm, sys );
-         }          
-   
-/* Do the same with the Units. */
-         if( astTestUnit( frm, 0 ) ) {
-            funit = astGetUnit( frm, 0 );
-            if( strcmp( funit, unit ) ) astSetUnit( new, 0, funit );
-         } else {
-            astSetUnit( frm, 0, unit );
-         }          
-   
-/* Ensure the original titleis preserved. */
-         if( title ) {
-            astSetTitle( new, title );
-            astSetTitle( frm, title );
-         }
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-         FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-         cfrm = astAnnul( cfrm );
-         title = astFree( title );
-      }
-
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *SphereReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstFrame *frm, int *status ){
-/*
-*  Name:
-*     SphereReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Sphere element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *SphereReader( AstXmlChan *this, AstXmlElement *elem, 
-*                              AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Sphere element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Sphere element.
-*     frm 
-*        Pointer to the Frame in which the returned Region should be
-*        defined. If the Unit or System attribute is not set, this
-*        function will decide on the values to be used, and set these 
-*        values in the supplied Frame before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstFrame *cfrm;               /* Frame used to define returned Region */
-   AstMapping *map;              /* Mapping between units */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   char buff[200];               /* Message buffer */
-   const char *funit;            /* Unit string from supplied Frame */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   const char *runit;            /* Radius unit string from supplied element */
-   const char *unit;             /* Centre unit string from supplied element */
-   double cen[3];                /* Centre */
-   double rad;                   /* Radius */
-   double tmp;                   /* New radius value */
-   int i;                        /* Axis count */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Check the supplied Frame has the correct number of axes. */
-   if( astGetNaxes( frm ) != 3 && astOK ) {
-      astError( AST__INTER, "SphereReader(XmlChan): Supplied "
-                "Frame does not have 3 axes (internal AST programming error )." , status);
-   }
-
-/* Scan the supplied element for the required sub-elements */
-   names[ 0 ] = "Radius";
-   names[ 1 ] = "Center";
-   min[ 0 ] = 1;
-   min[ 1 ] = 1;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the radius. */
-      rad = ElemValueD( this, scan->el[0][0], 0.0, status );
-
-/* Get the centre. */
-      cen[0] = 0.0;
-      cen[1] = 0.0;
-      cen[2] = 0.0;
-      ElemListD( this, scan->el[1][0], 3, cen, status );
-
-/* Get the units attribute from the supplied element. This applies to the
-   values describing the centre position. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-      if( !unit ) {
-         Report( this, elem, FAILURE, "contains no unit attribute", status );
-         unit = "";
-      }
-
-/* Get the radius units attribute from the supplied element. */
-      runit = astXmlGetAttributeValue( elem, "radius_unit" );
-
-/* If necessary, convert the radius to the same units as the centre. */
-      if( runit && strcmp( unit, runit ) ) {
-         map = astUnitMapper( runit, unit, NULL, NULL );
-         if( map ) {
-            astTran1( map, 1, &rad, 1, &tmp );
-            rad = tmp;
-            map = astAnnul( map );
-
-         } else if( astOK ) {
-            sprintf( buff, "has inconsistent units attributes \"%s\" and "
-                     "\"%s\"", unit, runit );
-            Report( this, elem, FAILURE, buff, status );
-         }
-      }
-
-/* Take a copy of the supplied Frame and set its Units to the value
-   obtained from the supplied element. */
-      cfrm = astCopy( frm );
-      astSetUnit( cfrm, 0, unit );
-      astSetUnit( cfrm, 1, unit );
-      astSetUnit( cfrm, 2, unit );
-   
-/* Create a Circle within this modified Frame. */
-      new = (AstRegion *) astCircle( cfrm, 1, cen, &rad, NULL, "", status );
-
-/* If the Unit of this Region differs from that of the supplied Frame,
-   set it to the Unit of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new Unit. If the supplied
-   Frame had no set Unit, set it to the units obtained from the supplied
-   element. */
-      for( i = 0; i < 3; i++ ) {
-         if( astTestUnit( frm, i ) ) {
-            funit = astGetUnit( frm, i );
-            if( strcmp( funit, unit ) ) astSetUnit( new, i, funit );
-         } else {
-            astSetUnit( frm, i, unit );
-         }          
-      }          
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-
-/* Free resources */
-      cfrm = astAnnul( cfrm );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstObject *StcMetadataReader( AstXmlChan *this, 
-                                     AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     StcMetadataReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA STCMetadata element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *StcMetadataReader( AstXmlChan *this, 
-*                                   AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     STCMetadata element. The STCMetadata object can be of any subclass
-*     (e.g. STCResourceProfile, SearchLocation, CatalogEntryLocation,
-*     ObservationLocation, ObservatoryLocation).
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA STCMetadata element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-*/
-
-/* Local Variables: */
-   AstFrame *frm;                /* Frame representing the STC object */
-   AstKeyMap *anc;               /* Map holding AstroCoords ancillary data */
-   AstKeyMap **ancs;             /* List of KeyMaps holding ancillary data */
-   AstKeyMap *map1;              /* Map holding AstroCoordSystem elements */
-   AstKeyMap *map2;              /* Map holding AstroCoordArea elements */
-   AstKeyMap *map3;              /* Map holding CoordSpec elements */
-   AstKeyMap *map;               /* Map to use */
-   AstRegion *region;            /* Region representing the STC object */
-   AstRegion *tuncs[ 4 ];        /* Temporary uncertainty Regions */
-   AstRegion *uncs[ 4 ];         /* Uncertainty Regions for returned STC */
-   AstStc *stc;                  /* Pointer to returned Object (an Stc) */
-   AstXmlContentItem *item;      /* Pointer to content item */
-   AstXmlElement *aca;           /* Pointer to AstroCoordArea element to use */
-   AstXmlElement *aco;           /* Pointer to AstroCoords element to use */
-   AstXmlElement *acs;           /* Pointer to AstroCoordSystem element to use */
-   char *text;                   /* Formatted item text */
-   char buff[ 200 ];             /* Message buffer */
-   const char *id;               /* Value of ID attribute */
-   const char *ido;              /* Value of ID attribute */
-   const char *name;             /* Element name */
-   const char *stc_class;        /* STC subclass name */
-   int gotunc;                   /* Have any uncertainty Regions been obtained? */
-   int i;                        /* Index of content item within element */
-   int j;                        /* Index into list of map keys */
-   int narea;                    /* Number of AstroCoordArea elements found */
-   int ncoord;                   /* Number of CoordSpec elements found */
-   int nanc;                     /* No.of KeyMaps in "ancs" array */
-   int nitem;                    /* No. of items of content in element */
-   int nsys;                     /* Number of AstroCoordSystem elements found */
-   int reported;                 /* Have multiple uncertainies been reported? */
-   int used;                     /* Was the content item used? */
-
-/* Initialise. */
-   stc = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return (AstObject *) stc;
-
-/* Avoid compiler warnings. */
-   id = "";
-
-/* Get name of the the STCMetadata subclass represented by the supplied
-   element. */
-   stc_class = astXmlGetName( elem );
-
-/* Create KeyMaps to hold the required sub-elements. We will store the
-   integer indices of the requried elements in these keymaps, using the
-   associated Xml ID attribute values as the keys. */
-   map1 = astKeyMap( "", status );
-   map2 = astKeyMap( "", status );
-   map3 = astKeyMap( "", status );
-
-/* Loop round all items in the elements contents. */
-   nitem = astXmlGetNitem( elem );
-   for( i = 0; i < nitem; i++ ) {
-      item = astXmlGetItem( elem, i );
-      used = 1;
-
-/* Ignore this item if it is not an element. */
-      if( astXmlCheckType( item, AST__XMLELEM ) ) {
-
-/* Choose the KeyMap in which to save this item. */
-         name = astXmlGetName( item );
-         if( !strcmp( name, ASTRO_COORD_SYSTEM ) ){
-            map = map1; 
-
-         } else if( !strcmp( name, ASTRO_COORD_AREA ) ){
-            map = map2; 
-
-         } else if( !strcmp( name, ASTRO_COORDS ) ){
-            map = map3; 
-
-         } else {
-            map = NULL;
-            used = 0;
-         }
-
-/* If we are going to save the item, get the value of the ID attribute
-   and check it. */
-         if( map ) {
-            id = astXmlGetAttributeValue( (AstXmlElement *) item, "ID" );
-            if( !id ) {
-               id = "";
-               if( map != map3 ) {               
-                  Report( this, elem, WARNING, "has no ID attribute. Assuming"
-                          "a null ID value", status );
-               } 
-            }
-
-/* If the KeyMap already contains an object with this ID, issue a
-   warning and skip the element. */
-            if( astMapHasKey( map, id ) ) {
-               if( map != map3 ) {
-                  sprintf( buff, "contains two or more %s elements with the "
-                           "same ID (\"%s\"). Only the first one will be used", 
-                           name, id );
-                  Report( this, elem, WARNING, buff, status );
-               } else {
-                  Report( this, elem, WARNING, "contains two or more AstroCoords "
-                          "elements. Only the first one will be used", status );
-               }
-
-/* Otherwise, save the index of the item in the KeyMap, using the ID as the 
-   key. */
-            } else {
-               astMapPut0I( map, id, i, "" );
-            } 
-         }
-
-      } else {
-         used = 0;
-      }
-
-/* If this content item was not used, issue a warning unless it is a comment
-   or white space. */
-      if( !used && !astXmlCheckType( item, AST__XMLCOM ) && 
-                   !astXmlCheckType( item, AST__XMLWHITE ) ) {
-         text = (char *) astXmlFormat( item );
-         if( strlen( text ) > 30 ) text[ 30 ] = 0;
-         sprintf( buff, "contains the following which is being ignored: \"%s\"",
-                  text );
-         text = astFree( text );
-         Report( this, elem, WARNING, buff, status );
-      }
-
-   }
-
-/* Note the number of each type of element found with unique ID values. */
-   nsys = astMapSize( map1 );
-   narea = astMapSize( map2 );
-   ncoord = astMapSize( map3 );
-
-/* If any CoordArea elements were found, find the first one for which the
-   coordesponding AstroCoordSystem is available. */
-   acs = NULL;
-   aca = NULL;
-   for( j = 0; j < narea; j++ ) {
-  
-/* Get the j'th key from "map2" (the ID associated with the j'th
-   AstroCoordArea found in the supplied element) and retrieve the value 
-   associated with this key (the index "i" into the content of the 
-   supplied element at which the j'th AstroCoordArea is stored). */
-      astMapGet0I( map2, astMapKey( map2, j ), &i );
-
-/* Get the i'th element in the supplied element. This will be the j'th
-   AstroCoordArea. */
-      aca = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Get the "coord_system_id" attribute from this AstroCoordArea. Use null
-   if not available. */
-      id = astXmlGetAttributeValue( aca, "coord_system_id" );
-      if( !id ) {
-         id = "";
-         Report( this, aca, WARNING, "has no coord_system_id attribute. "
-                 "Assuming a null coord_system_id value", status );
-      }
-
-/* Get the index within the supplied element of the AstroCoordSystem with this 
-   ID. Jump forward if no AstroCoordSystem with this id is available. */
-      if( astMapGet0I( map1, id, &i ) ) {
-
-/* Get a pointer to the AstroCoordSystem element with the required ID. */
-         acs = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Leave the AstroCoordArea loop. */
-         break;
-
-/* Report a warning if no AstroCoordSystem with this id is available. */
-      } else {
-         sprintf( buff, "refers to an AstroCoordSystem with "
-                 "ID \"%s\", but no such AstroCoordSystem is available "
-                 "within the parent %s", id, stc_class );
-         Report( this, aca, WARNING, buff, status );
-      } 
-   }
-
-/* If we did not find a corresponding pair of AstroCoordSystem and
-   AstroCoordArea, we either report a failure (if there were any
-   AstroCoordAreas), or get a pointer the AstroCoordSystem referred to by
-   the first AstroCoords element (we will create a Frame from this later). */
-   if( !acs ) {
-      aca = NULL;
-
-/* Report a warning if there were some AstroCoordArea tags but no matching
-   AstroCoordSystem was found. */
-      if( narea > 0 ) {
-         Report( this, elem, WARNING, "does not contain a pair of "
-                 "matching AstroCoordArea and AstroCoordSystem tags", status );
-
-/* If there are no AstroCoordAreas in the supplied element, look for a
-   pair of matching AstroCoords and AstroCoordSystem. The returned Region
-   will represent a NullRegion within this system. */
-      } else if( ncoord > 0 ) {
-
-/* Get the 1st key from "map3" (the ID associated with the 1st
-   AstroCoords found in the supplied element) and retrieve the value 
-   associated with this key (the index "i" into the content of the 
-   supplied element at which the 1st AstroCoords is stored). */
-         astMapGet0I( map3, astMapKey( map3, 0 ), &i );
-
-/* Get the i'th element in the supplied element. This will be the 1st
-   AstroCoord. */
-         aco = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Get the "coord_system_id" attribute from this AstroCoords. Use null
-   if not available. */
-         id = astXmlGetAttributeValue( aco, "coord_system_id" );
-         if( !id ) {
-            id = "";
-            Report( this, aco, WARNING, "has no coord_system_id attribute. "
-                    "Assuming a null coord_system_id value", status );
-         }
-
-/* Get the index within the supplied element of the AstroCoordSystem with this 
-   ID. Jump forward if no AstroCoordSystem with this id is available. */
-         if( astMapGet0I( map1, id, &i ) ) {
-
-/* Get a pointer to the AstroCoordSystem element with the required ID. */
-            acs = (AstXmlElement *) astXmlGetItem( elem, i );
-
-         } else {
-            Report( this, aco, FAILURE, "no corresponding AstroCoordSystem found", status );
-         }
-
-/* If there are no AstroCoords in the supplied element we create a
-   NullRegion within the first supplied AstroCoordSystem. */
-      } else if( nsys > 0 ) {
-         if( astMapGet0I( map1, astMapKey( map1, 0 ), &i ) ) {
-            acs = (AstXmlElement *) astXmlGetItem( elem, i );
-         }
-
-      } else {
-         Report( this, elem, FAILURE, "no usable content found", status );
-      }
-   }
-
-/* Report failure if we still have no AstroCoordSystem. */
-   if( !acs ) {
-      Report( this, elem, FAILURE, "does not contain a usable AstroCoordSystem", status );
-
-/* Issue a warning if more than one AstroCoordArea was found. */
-   } else {
-      if( narea > 1 ) Report( this, elem, WARNING, "contains more than one "
-                             "AstroCoordArea. Only one will be used", status );
-   
-/* Create a Frame from the ASTRO_COORD_SYSTEM. */
-      frm = (AstFrame *) AstroCoordSystemReader( this, acs, status );
-
-/* Loop round all AstroCoords elements in the supplied element. */
-      gotunc = 0;
-      reported = 0;
-      uncs[ 0 ] = NULL;
-      uncs[ 1 ] = NULL;
-      uncs[ 2 ] = NULL;
-      uncs[ 3 ] = NULL;
-      nanc = 0;
-      ancs = NULL;
-      for( j = 0; j < ncoord; j++ ) {
-  
-/* Get the j'th key from "map3" (the ID associated with the j'th
-   AstroCoords found in the supplied element) and retrieve the value 
-   associated with this key (the index "i" into the content of the 
-   supplied element at which the j'th AstroCoords is stored). */
-         astMapGet0I( map3, astMapKey( map3, j ), &i );
-
-/* Get the i'th element in the supplied element. This will be the j'th
-   AstroCoords. */
-         aco = (AstXmlElement *) astXmlGetItem( elem, i );
-
-/* Get the "coord_system_id" attribute from this AstroCoords and compare it
-   with the ID of the AstrocCoordSys being used. If they match, incorporate 
-   the effects of the AstroCoords into the "frm" Frame and get a set of 4 
-   Regions representing the uncertainty within each of the 4 STC domains
-   (space, time, spectral, redshift). */
-         ido = astXmlGetAttributeValue( aco, "coord_system_id" );
-         if( ido && !strcmp( id, ido ) ) {
-            if( AstroCoordsReader( this, aco, frm, tuncs, &anc, status ) ) {
-               if( !gotunc ) {    
-                  uncs[ 0 ] = tuncs[ 0 ];
-                  uncs[ 1 ] = tuncs[ 1 ];
-                  uncs[ 2 ] = tuncs[ 2 ];
-                  uncs[ 3 ] = tuncs[ 3 ];
-                  gotunc = 1;
-               } else {
-                  if( tuncs[ 0 ] ) tuncs[ 0 ] = astAnnul( tuncs[ 0 ] );
-                  if( tuncs[ 1 ] ) tuncs[ 1 ] = astAnnul( tuncs[ 1 ] );
-                  if( tuncs[ 2 ] ) tuncs[ 2 ] = astAnnul( tuncs[ 2 ] );
-                  if( tuncs[ 3 ] ) tuncs[ 3 ] = astAnnul( tuncs[ 3 ] );
-                  if( !reported ) {
-                     Report( this, elem, WARNING, "contains more than one "
-                             "specification of the coordinate uncertainties. "
-                             "Only the first will be used", status );
-                     reported= 1;
-                  }
-               }
-            }
-
-/* If any ancillary information was read from the AstroCoords, add it to
-   the list of ancillary information to be stored in the Stc structure. */
-            if( anc ) {
-               ancs = astGrow( ancs, nanc + 1, sizeof( AstKeyMap * ) );
-               if( ancs ) ancs[ nanc++ ] = anc;
-            }
-         }
-      }
-
-/* Now create a Region from this Frame and the ASTRO_COORD_AREA. Note,
-   "aca" may be NULL in which case the returned Region will be NullRegion. */
-      region = AstroCoordAreaReader( this, aca, frm, uncs, nanc, ancs, status );
-
-/* Re-centre the Regions describing ancillary information extracted from
-   the AstroCoords elements. */
-      ReCentreAnc( region, nanc, ancs, status );
-
-/* Now create a Stc object of the appropriate sub-class. */
-      if( !strcmp( stc_class, STC_RESOURCE_PROFILE ) ) {
-         stc = (AstStc *) astStcResourceProfile( region, nanc, ancs, "", status );
-
-      } else if( !strcmp( stc_class, SEARCH_LOCATION ) ) {
-         stc = (AstStc *) astStcSearchLocation( region, nanc, ancs, "", status );
-
-      } else if( !strcmp( stc_class, CATALOG_ENTRY_LOCATION ) ) {
-         stc = (AstStc *) astStcCatalogEntryLocation( region, nanc, ancs, "", status );
-
-      } else if( !strcmp( stc_class, OBSERVATION_LOCATION ) ||
-                 !strcmp( stc_class, OBSERVATORY_LOCATION ) ) {
-         stc = (AstStc *) astStcObsDataLocation( region, nanc, ancs, "", status );
-
-      } else if( astOK ){
-         astError( AST__INTER, "astRead(XmlChan): StcMetadataReader knows "
-                   "nothing about the %s class (internal AST programming "
-                   "error).", status, stc_class );
-      }
-
-/* Get the ID attribute from the supplied element and store in the 
-   returned Object. */
-      id = astXmlGetAttributeValue( elem, "ID" );
-      if( id ) astSetIdent( stc, id );
-
-/* Free resources. */
-      if( uncs[ 0 ] ) uncs[ 0 ] = astAnnul( uncs[ 0 ] );
-      if( uncs[ 1 ] ) uncs[ 1 ] = astAnnul( uncs[ 1 ] );
-      if( uncs[ 2 ] ) uncs[ 2 ] = astAnnul( uncs[ 2 ] );
-      if( uncs[ 3 ] ) uncs[ 3 ] = astAnnul( uncs[ 3 ] );
-      frm = astAnnul( frm );
-      region = astAnnul( region );
-      if( ancs ) {
-         for( i = 0; i < nanc; i++ ) ancs[ i ] = astAnnul( ancs[ i ] );
-         ancs = astFree( ancs );
-      }
-   } 
-
-   map1 = astAnnul( map1 );
-   map2 = astAnnul( map2 );
-   map3 = astAnnul( map3 );
-
-/* Return the pointer to the new Object. */
-   return (AstObject *) stc;
-}
-
-static AstRegion *StcRegionReader( AstXmlChan *this, AstXmlElement *elem, 
-                                AstFrame *frm, int *status ){
-/*
-*  Name:
-*     StcRegionReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Region element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *StcRegionReader( AstXmlChan *this, AstXmlElement *elem,
-*                              AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Region element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Region element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[1];         /* Names of the subelements to be searched for */
-   int max[1];                   /* Max allowed occurrences of each name */
-   int min[1];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
-   names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
-                "Convex|Box";
-   min[ 0 ] = 1;
-   max[ 0 ] = 1;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create the Region */
-      new = RegionReader( this, scan->el[0][0], frm, status );
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a XmlChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the astTestAttrib protected
-*     method inherited from the Channel class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a XmlChan's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     attrib
-*        Pointer to a null terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* XmlIndent */
-/* --------- */
-   if ( !strcmp( attrib, "xmlindent" ) ) {
-      result = astTestXmlIndent( this );
-
-/* XmlLength */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmllength" ) ) {
-      result = astTestXmlLength( this );
-
-/* XmlFormat */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmlformat" ) ) {
-      result = astTestXmlFormat( this );
-
-/* XmlPrefix */
-/* --------- */
-   } else if ( !strcmp( attrib, "xmlprefix" ) ) {
-      result = astTestXmlPrefix( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstObject *TimeFrameReader( AstXmlChan *this, 
-                                   AstXmlElement *elem, int *status ) {
-/*
-*  Name:
-*     TimeFrameReader
-
-*  Purpose:
-*     Make an AST Object from an IVOA TimeFrame element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstObject *TimeFrameReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Object from the supplied IVOA
-*     TimeFrame element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA TimeFrame element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Object.
-
-*/
-
-/* Local Variables: */
-   AstTimeFrame *new;         /* Pointer to returned Frame */
-   IVOAScan *scan;            /* Structure holding scan results */
-   const char *names[3];      /* Names of the subelements to be searched for */
-   const char *text;          /* Pointer to Name value */
-   int max[3];                /* Max allowed occurrences of each name */
-   int min[3];                /* Min allowed occurrences of each name */
-
-/* Initialise */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return (AstObject *) new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Name";
-   names[ 1 ] = "TOPOCENTER";
-   names[ 2 ] = "TimeScale|Timescale";
-   min[ 0 ] = 0;
-   max[ 0 ] = 1;
-   min[ 1 ] = 0;
-   max[ 1 ] = 1;
-   min[ 2 ] = 1;
-   max[ 2 ] = 1;
-   scan = ScanIVOAElement( this, elem, 3, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create a suitable TimeFrame. Set the timescale, but leave the other
-   attributes unset since they will not be known until an AstronTimeType 
-   is read. Except for unit. We set unit to "d" (day) because all the
-   time form,ats supported by STC have "d" as the default unit. This
-   avoids bad publicity which arises from presentin (say) MJD values in
-   units of "s" - which people will think is wrong until they have it
-   explained. */
-      new = astTimeFrame( "unit=d", status );
-      astSetTimeScale( new, TimeScaleReader( this, scan->el[ 2 ][ 0 ], status ) );
-
-/* If the STC TimeFrame has a <Name> element use it as the AST TimeFrame title. */
-      if( scan->count[ 0 ] > 0 ) {
-         text = astXmlGetValue( scan->el[ 0 ][ 0 ], 0 );
-         if( text ) astSetTitle( new, text );
-      }
-
-/* Free resources. */
-      scan = FreeIVOAScan( scan, status );
-
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new= astAnnul( new );
-
-/* Return the pointer to the new Object. */
-   return (AstObject *) new;
-}
-
-static AstRegion *TimeIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-                                      AstTimeFrame *frm, int *status ){
-/*
-*  Name:
-*     TimeIntervalReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA TimeInterval element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *TimeIntervalReader( AstXmlChan *this, AstXmlElement *elem, 
-*                                    AstTimeFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     TimeInterval element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA TimeInterval element.
-*     frm 
-*        Pointer to the TimeFrame in which the returned Region should be
-*        defined. 
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double start;                 /* Start time */
-   double stop;                  /* Stop time */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "StartTime";
-   names[ 1 ] = "StopTime";
-   min[ 0 ] = 0;
-   min[ 1 ] = 0;
-   max[ 0 ] = 1;
-   max[ 1 ] = 1;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the limits. */
-      start = scan->count[0] ? AstronTimeReader( this, scan->el[0][0], frm, status ) : AST__BAD;
-      stop = scan->count[1] ? AstronTimeReader( this, scan->el[1][0], frm, status ) : AST__BAD;
-
-/* If at least one limit was found, create an Interval. Otherwise create
-   a negated NullRegion. */
-      if( start != AST__BAD || stop != AST__BAD ) {
-
-/* Use the stop or start time (converted to an MJD) as the Epoch within the 
-   Frame. */
-         if( start != AST__BAD ) {
-            astSetEpoch( frm, MakeMJD( frm, start, status ) );
-         } else if( stop != AST__BAD ) {
-            astSetEpoch( frm, MakeMJD( frm, stop, status ) );
-         } 
-         new = (AstRegion *) astInterval( frm, &start, &stop, NULL, "", status );
-      } else {
-         new = (AstRegion *) astNullRegion( frm, NULL, "negated=1", status );
-      }
-
-/* Get any fill factor and lo/hi_include attributes from the element and 
-   assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources. */
-      scan = FreeIVOAScan( scan, status );
-
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static AstRegion *TimeReader( AstXmlChan *this, AstXmlElement *elem, 
-                              AstTimeFrame *frm, double *epoch,
-                              AstKeyMap **anc, int *status ){
-/*
-*  Name:
-*     TimeReader
-
-*  Purpose:
-*     Modify a Frame to take account of an STC <Time> element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *TimeReader( AstXmlChan *this, AstXmlElement *elem, 
-*                            AstTimeFrame *frm, double *epoch,
-*                            AstKeyMap **anc, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads the supplied STC <Time> element, and uses it,
-*     if possible, to create the uncertainty associated with the time 
-*     axis in the supplied Frame. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Time element.
-*     frm
-*        Pointer to the TimeFrame.
-*     epoch
-*        Pointer to double in which to return the epoch to be used
-*        with other axes. Value is returned as an Modified Julian Date
-*        in the barycentric dynamical timescale (TDB). AST__BAD will
-*        be returned if the supplied Time element has no value.
-*     anc
-*        Address of a location at which to put a pointer to a newly
-*        created KeyMap. This KeyMap will contain ancillary information
-*        from the Time. The keys identify the item of ancillary
-*        information (Name, Value, Error, Resolution, Size, Pixel Size).
-*        The value associated with the Name key is string containing
-*        the Name item from the Time. The value
-*        associated with each of the other keys is a pointer to a 1D Region
-*        within the supplied Frame, corresponding to the value, error, 
-*        resolution, etc. Keys will not be present in the returned KeyMap
-*        if the corresponding item of ancillary information is not present 
-*        in the Time. A NULL pointer is returned if there is no
-*        ancillary information at all.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned:
-*     The uncertainty Region, or NULL if the supplied Time element
-*     does not specify an uncertainty.
-
-*/
-
-/* Local Variables: */
-   AstTimeFrame *cfrm;      /* Pointer to copy of time axis */
-   AstRegion *result;       /* Returned uncertainty Region */
-   AstRegion *r;            /* Ancillary Region */
-   IVOAScan *scan;          /* Structure holding scan results */
-   const char *funit;       /* Pointer to Frame's unit attribute string */
-   const char *names[6];    /* Names of the subelements to be searched for */
-   const char *title;       /* Pointer to Frame title string */
-   const char *unit;        /* Pointer to Time's unit attribute string */
-   double lbnd[ 1 ] ;       /* Lower interval bounds */
-   double ubnd[ 1 ] ;       /* Upper interval bounds */
-   double value;            /* Time value */
-   double v;                /* Ancillary value */
-   int max[6];              /* Max allowed occurrences of each name */
-   int min[6];              /* Min allowed occurrences of each name */
-
-/* Initialise */
-   result = NULL;
-   *epoch = AST__BAD;
-   *anc = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Name";
-   names[ 1 ] = "Error";
-   names[ 2 ] = "TimeInstant";
-   names[ 3 ] = "Resolution";
-   names[ 4 ] = "Size";
-   names[ 5 ] = "PixSize";
-   max[ 0 ] = 1;
-   max[ 1 ] = 2;
-   max[ 2 ] = 1;
-   max[ 3 ] = 2;
-   max[ 4 ] = 2;
-   max[ 5 ] = 2;
-   min[ 0 ] = 1;
-   min[ 1 ] = 0;
-   min[ 2 ] = 0;
-   min[ 3 ] = 0;
-   min[ 4 ] = 0;
-   min[ 5 ] = 0;
-   scan = ScanIVOAElement( this, elem, 6, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create a KeyMap to return holding ancilary info, and put the Name into
-   it. */
-      *anc = astKeyMap( "", status );
-      if( scan->count[0] > 0 ) astMapPut0C( *anc, AST__STCNAME, 
-                                  astXmlGetValue( scan->el[0][0], 0 ), NULL );
-
-/* Get any Unit attribute from the Time element. */
-      unit = astXmlGetAttributeValue( elem, "unit" );
-
-/* We need to ensure the returned regions are mapped into units of "funit". 
-   If this is NULL it means that the returned regions are already in the 
-   required units. */
-      funit = NULL;
-
-/* If the Time element has a unit attribute, we use it in preference to any 
-   units values in the supplied Frame. Take a copy of the time Frame and set 
-   its Units to this values. Ensure the title is preserved. */
-      if( unit && astChrLen( unit ) ) {
-         cfrm = astCopy( frm );
-         if( astTestTitle( frm ) ) {
-            title = (char *) astGetTitle( frm );
-            if( title ) title = astStore( NULL, title, strlen( title ) + 1 );
-         } else {
-            title = NULL;
-         }
-         astSetUnit( cfrm, 0, unit );
-         if( title ) astSetTitle( cfrm, title );
-
-         if( astTestUnit( frm, 0 ) ) {
-            funit = astGetUnit( frm, 0 );
-            if( !strcmp( funit, unit ) ) {
-               funit = NULL;
-            } else {
-               funit = astStore( NULL, funit, strlen( funit ) + 1 );
-            }
-         } else {
-            astSetUnit( frm, 0, unit );
-         }          
-
-      } else {
-         cfrm = astClone( frm );
-         title = NULL;
-      }
-
-/* If this Time contains a Value which can be read, obtain it. Otherwise, 
-   issue a warning. We will use the value to calculate the returned epoch. */ 
-      if( scan->count[ 2 ] > 0 ) {
-         value = AstronTimeReader( this, scan->el[ 2 ][ 0 ], cfrm, status );
-         *epoch = MakeMJD( cfrm, value, status );
-         
-/* Ensure any relevant attribute values which were set by AstronTimeReader 
-   within "cfrm" are transferred to "frm". */
-         if( astTestTimeScale( cfrm ) ) astSetTimeScale( frm, astGetTimeScale( cfrm ) );
-         if( astTestSystem( cfrm ) ) astSetSystem( frm, astGetSystem( cfrm ) );
-         if( astTestUnit( cfrm, 0 ) ) astSetUnit( frm, 0, astGetUnit( cfrm, 0 ) );
-         if( astTestTimeOrigin( cfrm ) ) astSetTimeOrigin( frm, astGetTimeOrigin( cfrm ) );
-
-/* Create a Interval from it and store in the returned ancillary KeyMap. If 
-   the units of this Frame differs from that of the supplied Frame, set it 
-   to the units of the supplied Frame. This will cause the encapsulated 
-   limits to be mapped into the new units. Ensure the original title is 
-   preserved. Use an Interval rather than a PointList since an Interval
-   can be used within a Prism to extrude another Region, but a PointList
-   cannot. */
-         r = (AstRegion *) astInterval( cfrm, &value, &value, NULL, "", status ) ;
-         if( funit ) astSetUnit( r, 0, funit );
-         if( title ) astSetTitle( r, title );
-         astMapPut0A( *anc, AST__STCVALUE, r, NULL );
-         r = astAnnul( r );
-      }
-
-/* Does this Time contain any Error? */
-      if( scan->count[ 1 ] > 0 ) {
-
-/* Issue a warning if more than 1 Error value was found. */
-         if( scan->count[ 1 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Error>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first Error value. */
-         v = ElemValueD( this, scan->el[1][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of an error bar centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
-            result = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
-   set it to the units of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new units. */
-            if( funit ) astSetUnit( result, 0, funit );
-   
-/* Ensure the original title is preserved. */
-            if( title ) astSetTitle( result, title );
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCERROR, result, NULL );
-
-         }
-      }
-
-/* Does this Time contain any Resolution? */
-      if( scan->count[ 3 ] > 0 ) {
-
-/* Issue a warning if more than 1 Resolution value was found. */
-         if( scan->count[ 3 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Resolution>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first Resolution value. */
-         v = ElemValueD( this, scan->el[3][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of a bar centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
-            r = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
-   set it to the units of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new units. */
-            if( funit ) astSetUnit( r, 0, funit );
-   
-/* Ensure the original title is preserved. */
-            if( title ) astSetTitle( r, title );
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCRES, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Does this Time contain any Size? */
-      if( scan->count[ 4 ] > 0 ) {
-
-/* Issue a warning if more than 1 Size value was found. */
-         if( scan->count[ 4 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <Size>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first Size value. */
-         v = ElemValueD( this, scan->el[4][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of a bar centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
-            r = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
-   set it to the units of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new units. */
-            if( funit ) astSetUnit( r, 0, funit );
-   
-/* Ensure the original title is preserved. */
-            if( title ) astSetTitle( r, title );
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCSIZE, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Does this Time contain any PixSize? */
-      if( scan->count[ 5 ] > 0 ) {
-
-/* Issue a warning if more than 1 PixSize value was found. */
-         if( scan->count[ 5 ] > 1 ) {
-            Report( this, elem, WARNING, "contains more than one <PixSize>"
-                    " element. AST can only use the first", status );
-         }
-
-/* Get the first PixSize value. */
-         v = ElemValueD( this, scan->el[5][0], AST__BAD, status );
-         if( v != AST__BAD ) {
-
-/* Create the upper and lower limits of a bar centred on zero. */
-            ubnd[ 0 ] = 0.5*fabs( v );
-            lbnd[ 0 ] = -ubnd[ 0 ];
-
-/* Create an Interval within the time Frame. */
-            r = (AstRegion *) astInterval( cfrm, lbnd, ubnd, NULL, "", status );
-
-/* If the units of this Frame differs from that of the supplied Frame,
-   set it to the units of the supplied Frame. This will cause the
-   encapsulated limits to be mapped into the new units. */
-            if( funit ) astSetUnit( r, 0, funit );
-   
-/* Ensure the original title is preserved. */
-            if( title ) astSetTitle( r, title );
-
-/* Store in the returned ancillary KeyMap. */
-            astMapPut0A( *anc, AST__STCPIXSZ, r, NULL );
-            r = astAnnul( r );
-         }
-      }
-
-/* Free resources */
-      if( funit ) funit = astFree( (void *) funit );
-      cfrm = astAnnul( cfrm );
-      if( title ) title = astFree( (void *) title );
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Return NULL if an error occurred. */
-   if( !astOK ) result = astAnnul( result );
-
-/* Return the result */
-   return result;
-
-}
-
-static AstTimeScaleType TimeScaleReader( AstXmlChan *this, AstXmlElement *elem, int *status ){
-/*
-*  Name:
-*     TimeScaleReader
-
-*  Purpose:
-*     Read a time value from an IVOA TimeScale element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstTimeScaleType TimeScaleReader( AstXmlChan *this, AstXmlElement *elem, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function returns a value representing the timescale specified by 
-*     the supplied IVOA TimeScale element.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA TimeScale element.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The timescale value (values are defined in timeframe.h).
-
-*/
-
-/* Local Variables: */
-   AstTimeScaleType result; 
-   char buff[ 80 ];
-   const char *tstxt;
-
-/* Initialise */
-   result = AST__BADTS;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get the timescale string from the element, and find the corresponding
-   AST timescale value (if any). */
-   tstxt = astXmlGetValue( elem, 0 );
-   if( tstxt ) {
-
-      if( !strcmp( tstxt, "TT" ) ) {
-         result = AST__TT;
-
-      } else if( !strcmp( tstxt, "TDT" ) ) {
-         result = AST__TT;
-
-      } else if( !strcmp( tstxt, "ET" ) ) {
-         Report( this, elem, WARNING, "TT will be used in place of ET", status );
-         result = AST__TT;
-
-      } else if( !strcmp( tstxt, "TDB" ) ) {
-         result = AST__TDB;
-
-      } else if( !strcmp( tstxt, "TCG" ) ) {
-         result = AST__TCG;
-
-      } else if( !strcmp( tstxt, "TCB" ) ) {
-         result = AST__TCB;
-
-      } else if( !strcmp( tstxt, "TAI" ) ) {
-         result = AST__TAI;
-
-      } else if( !strcmp( tstxt, "IAT" ) ) {
-         result = AST__TAI;
-
-      } else if( !strcmp( tstxt, "UTC" ) ) {
-         result = AST__UTC;
-
-      } else if( !strcmp( tstxt, "LST" ) ) {
-         result = AST__LMST;
-
-      } else {
-         sprintf( buff, "contains unsupported timescale %s", tstxt );
-         Report( this, elem, FAILURE, buff, status );
-         result = AST__BADTS;
-      }
-   }
-
-/* Return the time value. */
-   return result;
-}
-
-static AstRegion *UnionReader( AstXmlChan *this, AstXmlElement *elem, 
-                               AstFrame *frm, int *status ){
-/*
-*  Name:
-*     UnionReader
-
-*  Purpose:
-*     Make an AST Region from an IVOA Union region element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstRegion *UnionReader( AstXmlChan *this, AstXmlElement *elem,
-*                             AstFrame *frm, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function makes a new AST Region from the supplied IVOA
-*     Union region element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Union region element.
-*     frm 
-*        Pointer to the 2D Frame in which the returned Region should be
-*        defined. If the Unit attribute is not set, this function will
-*        set it to the value supplied in "unit" before returning.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to the new Region.
-
-*/
-
-/* Local Variables: */
-   AstRegion *new;               /* Pointer to returned Region */
-   AstRegion *reg;               /* Pointer to component Region */
-   AstRegion *tmp;               /* Pointer to new Region */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[1];         /* Names of the subelements to be searched for */
-   int i;                        /* Loop count */
-   int max[1];                   /* Max allowed occurrences of each name */
-   int min[1];                   /* Min allowed occurrences of each name */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Search the supplied element for a Region sub-element. */
-   names[ 0 ] = "Intersection|Union|Negation|AllSky|Circle|Ellipse|Polygon|"
-                "Convex|Box";
-   min[ 0 ] = 2;
-   max[ 0 ] = INT_MAX;
-   scan = ScanIVOAElement( this, elem, 1, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Create Regions from all the component region elements, and combine
-   them into nested CmpRegions, using the boolean OR operator to combine 
-   them. */
-      new = RegionReader( this, scan->el[0][0], frm, status );
-      for( i = 1; i < scan->count[0]; i++ ) {
-         reg = RegionReader( this, scan->el[0][i], frm, status );
-         tmp = (AstRegion *) astCmpRegion( new, reg, AST__OR, "", status );
-         reg = astAnnul( reg );
-         (void) astAnnul( new );
-         new = tmp;
-      }
-
-/* Get any fill factor from the element and assign to the returned Region. */
-      FillAndLims( this, elem, new, status );
-   
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-/* Annul any returned Frame if an error has occurred. */
-   if( !astOK ) new = astAnnul( new );
-
-/* Return the pointer to the new Region. */
-   return new;
-}
-
-static int Use( AstXmlChan *this, int set, int helpful, int *status ) {
-/*
-*  Name:
-*     Use
-
-*  Purpose:
-*     Decide whether to write a value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "channel.h"
-*     int Use( AstXmlChan *this, int set, int helpful, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function decides whether a value supplied by a class "Dump"
-*     function, via a call to one of the astWrite... protected
-*     methods, should actually be written to the data sink associated
-*     with a XmlChan.
-*
-*     This decision is based on the settings of the "set" and
-*     "helpful" flags supplied to the astWrite... method, plus the
-*     attribute settings of the XmlChan.
-
-*  Parameters:
-*     this
-*        A pointer to the XmlChan.
-*     set
-*        The "set" flag supplied.
-*     helpful
-*        The "helpful" value supplied.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the value should be written out, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global error status set or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   int full;                     /* Full attribute value */
-   int result;                   /* Result value to be returned */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* If "set" is non-zero, then so is the result ("set" values must
-   always be written out). */
-   result = ( set != 0 );
-
-/* Otherwise, obtain the value of the XmlChan's Full attribute. */
-   if ( !set ) {
-      full = astGetFull( this );
-
-/* If Full is positive, display all values, if zero, display only
-   "helpful" values, if negative, display no (un-"set") values. */
-      if ( astOK ) result = ( ( helpful && ( full > -1 ) ) || ( full > 0 ) );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int Ustrcmp( const char *a, const char *b, int *status ){
-/*
-*  Name:
-*     Ustrcmp
-
-*  Purpose:
-*     A case blind version of strcmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int Ustrcmp( const char *a, const char *b, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the two strings, and 1 
-*     otherwise. Comparisons are case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strcmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Loop round each character. */
-   while( 1 ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int Ustrncmp( const char *a, const char *b, size_t n, int *status ){
-/*
-*  Name:
-*     Ustrncmp
-
-*  Purpose:
-*     A case blind version of strncmp.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int Ustrncmp( const char *a, const char *b, size_t n, int *status )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     Returns 0 if there are no differences between the first "n"
-*     characters of the two strings, and 1 otherwise. Comparisons are
-*     case blind.
-
-*  Parameters:
-*     a
-*        Pointer to first string.
-*     b
-*        Pointer to second string.
-*     n
-*        The maximum number of characters to compare.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Zero if the strings match, otherwise one.
-
-*  Notes:
-*     -  This function does not consider the sign of the difference between
-*     the two strings, whereas "strncmp" does.
-*     -  This function attempts to execute even if an error has occurred. 
-
-*/
-
-/* Local Variables: */
-   const char *aa;         /* Pointer to next "a" character */
-   const char *bb;         /* Pointer to next "b" character */
-   int i;                  /* Character index */
-   int ret;                /* Returned value */
-
-/* Initialise the returned value to indicate that the strings match. */
-   ret = 0;
-
-/* Initialise pointers to the start of each string. */
-   aa = a;
-   bb = b;
-
-/* Compare up to "n" characters. */
-   for( i = 0; i < (int) n; i++ ){
-
-/* We leave the loop if either of the strings has been exhausted. */
-      if( !(*aa ) || !(*bb) ){
-
-/* If one of the strings has not been exhausted, indicate that the
-   strings are different. */
-         if( *aa || *bb ) ret = 1;
-
-/* Break out of the loop. */
-         break;
-
-/* If neither string has been exhausted, convert the next characters to
-   upper case and compare them, incrementing the pointers to the next
-   characters at the same time. If they are different, break out of the
-   loop. */
-      } else {
-
-         if( toupper( (int) *(aa++) ) != toupper( (int) *(bb++) ) ){
-            ret = 1;
-            break;
-         }
-
-      }
-
-   }
-
-/* Return the result. */
-   return ret;
-
-}
-
-static int VertexReader( AstXmlChan *this, AstXmlElement *elem, double *x, 
-                         double *y, int *status ){
-/*
-*  Name:
-*     VertexReader
-
-*  Purpose:
-*     Read a position from an IVOA Vertex element.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     int VertexReader( AstXmlChan *this, AstXmlElement *elem, double *x, 
-*                       double *y )
-
-*  Class Membership:
-*     XmlChan member function.
-
-*  Description:
-*     This function reads a 2D position from the supplied IVOA Vertex 
-*     element. 
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     elem
-*        Pointer to the IVOA Vertex element.
-*     x
-*        Pointer to the double in which to put the returned X value.
-*     y
-*        Pointer to the double in which to put the returned Y value.
-
-*  Returned Value:
-*     Non-zero if the <Vertex> contains a <pole> tag.
-
-*/
-
-/* Local Variables: */
-   IVOAScan *scan;               /* Structure holding scan results */
-   const char *names[2];         /* Names of the subelements to be searched for */
-   double xy[ 2 ];               /* Axis values read from Position */
-   int max[2];                   /* Max allowed occurrences of each name */
-   int min[2];                   /* Min allowed occurrences of each name */
-   int result;                   /* Returned value */
-
-/* Check the global error status. */
-   if ( !astOK ) return 0;
-
-/* Initialise */
-   result = 0;
-   *x = AST__BAD;
-   *y = AST__BAD;
-
-/* Search the supplied element for the required sub-elements. */
-   names[ 0 ] = "Position";
-   max[ 0 ] = 1;
-   min[ 0 ] = 1;
-   names[ 1 ] = "SmallCircle";
-   max[ 1 ] = 1;
-   min[ 1 ] = 0;
-   scan = ScanIVOAElement( this, elem, 2, names, min, max, status );
-
-/* If succesfull.. */
-   if( scan ) {
-
-/* Get the axis values from the Position element. */
-      xy[ 0 ] = AST__BAD;
-      xy[ 1 ] = AST__BAD;
-      ElemListD( this, scan->el[0][0], 2, xy, status );
-      *x = xy[ 0 ];
-      *y = xy[ 1 ];
-
-/* Get any SmallCircle element. If it has a Pole issue a warning. */
-      result = scan->count[ 1 ];
-      if( result ) { 
-         if( FindElement( this, scan->el[1][0], "Pole", status ) ) {
-            Report( this, scan->el[1][0], WARNING, "contains a <Pole> "
-                    "tag (poles are not supported by AST)", status );
-         }
-      }
-
-/* Free resources */
-      scan = FreeIVOAScan( scan, status );
-   }
-
-   return result;
-}
-
-static void WriteBegin( AstChannel *this_channel, const char *class,
-                        const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteBegin
-
-*  Purpose:
-*     Write a "Begin" data item to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteBegin( AstChannel *this_channel, const char *class,
-*                      const char *comment, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteBegin method inherited from the Channel class).
-
-*  Description:
-*     This function writes a "Begin" data item to the data sink
-*     associated with a Channel, so as to begin the output of a new
-*     Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        name of the class to which the Object belongs.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the "Begin"
-*        item. Normally, this will describe the purpose of the Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The comment supplied may not actually be used, depending on
-*     the nature of the Channel supplied.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;         /* A pointer to the XmlChan structure. */
-   AstXmlElement *elem;      /* The XML element to hodl the new AST object */
-   const char *pref;         /* XML namespace prefix to use */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* If this is a top level object (i.e. if there is no container element),
-   reset all the other values in the XmlChan for safety. */
-   if( !this->container ) {
-      this->objectname = NULL;   
-      this->objectset = 1;       
-      this->objectcomment = NULL;
-   }
-
-/* Initialise a flag to indicate that the next "IsA" item should not be
-   written. This flag will be changed if and when an item is added which
-   related to the class described by the "IsA" item. Save the old value
-   first. */
-   this->write_isa = 0;
-
-/* Store the namespace prefix. */
-   pref = astGetXmlPrefix( this );
-
-/* Create a new XmlElement with a name equal to the AST class name of the
-   object being dumped (and no namespace prefix), and add it into the
-   current container (i.e. parent) element. */
-   elem = astXmlAddElement( this->container, class, pref );
-
-/* If this is a top level container, store the namespace URI for 
-   the element, either default or named depending on the value of
-   XmlPrefix. */
-   if( !this->container ) astXmlAddURI( elem, pref, AST__XMLNS );
-
-/* If non-blank, append a "Label" atttribute to the element holding the
-   name of the object (stored in the XmlChan structure). */
-   if( this->objectname ) astXmlAddAttr( elem, LABEL, this->objectname, NULL );
-
-/* If the object has all default values, store a true value for the
-   DEFAULT attribute. */
-   if( !this->objectset ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Add commments if required. */
-   if( astGetComment( this_channel ) ) {
-
-/* If we are adding comments, and if a comment was supplied as a
-   parameter to this function, then store the commment as an attribute of
-   the element. This comment describes the class function as a whole, not
-   the specific usage of this instance of the class (this is given by the
-   comment in this->objectcomment). */
-      if( comment && *comment ) astXmlAddComment( elem, 0, comment );
-
-/* If the object has a usage comment, add it to the content of the
-   element if required. */
-      if( this->objectcomment ) astXmlAddAttr( elem, DESC, this->objectcomment, NULL );
-   }
-
-/* Make the new element the current container. */
-   this->container = (AstXmlParent *) elem;
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-static void WriteDouble( AstChannel *this_channel, const char *name,
-                         int set, int helpful,
-                         double value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteDouble
-
-*  Purpose:
-*     Write a double value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteDouble( AstChannel *this, const char *name,
-*                       int set, int helpful,
-*                       double value, const char *comment, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteDouble method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named double value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a Channel. It is intended for use by class "Dump" functions
-*     when writing out class information which will subsequently be
-*     re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        The value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 100             /* Size of local formatting buffer */
-
-/* Local Variables: */
-   AstXmlChan *this;             /* A pointer to the XmlChan structure. */
-   AstXmlElement *elem;          /* Pointer to new element */
-   char buff[ BUFF_LEN + 1 ];    /* Local formatting buffer */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
-   an object which is "not set"), then we do not write out this item. */
-   if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-      if( Use( this, set, helpful, status ) ) {
-
-/* Create a new XmlElement with a name of ATTR (and no namespace 
-   prefix), and add it into the current container (i.e. parent) element. */
-         elem = astXmlAddElement( this->container, ATTR,
-                                  astGetXmlPrefix( this ) );
-
-/* Add a NAME attribute to this element containing the item name. */
-         astXmlAddAttr( elem, NAME, name, NULL );
-
-/* Format the value as a string and store it as the VALUE attribute.
-   Make sure "-0" isn't produced. */
-         (void) sprintf( buff, "%.*g", DBL_DIG, value );
-         if ( !strcmp( buff, "-0" ) ) {
-            buff[ 0 ] = '0';
-            buff[ 1 ] = '\0';
-         }
-         astXmlAddAttr( elem, VALUE, buff, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
-   parameter to this function, then store the commment as an attribute of
-   the element. */
-         if( comment && *comment && astGetComment( this_channel ) ) {
-            astXmlAddAttr( elem, DESC, comment, NULL );
-         }
-
-/* If the object has all default values, store a true value for the
-   DEFAULT attribute. */
-         if( !set ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Initialise a flag to indicate that the next "IsA" item should be
-   written. */
-         this->write_isa = 1;
-      }
-   }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static void WriteEnd( AstChannel *this_channel, const char *class, int *status ) {
-/*
-*  Name:
-*     WriteEnd
-
-*  Purpose:
-*     Write an "End" data item to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteEnd( AstChannel *this, const char *class, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteEnd method inherited from the Channel class).
-
-*  Description:
-*     This function writes an "End" data item to the data sink
-*     associated with a Channel. This item delimits the end of an
-*     Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        class name of the Object whose definition is being terminated
-*        by the "End" item.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to the XmlChan structure */
-   AstXmlParent *parent;         /* Pointer to parent element */
-   char *d;                      /* Pointer to end of next sub-string */
-   char *c;                      /* Pointer to start of next sub-string */
-   char *text;                   /* Pointer to complete string */
-   int mxlen;                    /* Max allowed length of text */
-
-#ifdef DEBUG
-   int nobj;                     /* No. of XmlObjects in existence */
-#endif
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-#ifdef DEBUG
-/* Save the number of XmlObjects currently in existenece. */
-   nobj = astXmlTrace(3);
-#endif
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* Get the parent of the current container element. */
-   if( this->container ) {
-      parent = astXmlGetParent( this->container );      
-
-/* If the current container element has no parent, we have completed the
-   construction of the in-memory XML representation of the AST object being
-   written out. In this case, we convert the in-memory representation
-   into a set of strings and write them out using the supplied sink
-   function. */
-      if( !parent ) {
-
-/* First get a single string holding the complete formatted XML
-   representation of the AST object. */
-         if( astGetXmlIndent( this ) ) {
-            text = (char *) astXmlShow( this->container );
-         } else {
-            text = (char *) astXmlFormat( this->container );
-         }
-
-/* Now, if we have any text, split it into separate lines. The end of a line 
-   is indicated by a "\n" character in the text returned by astXmlFormat. */
-         if( text ) {
-
-/* Get the maximum allowed line length. */
-            mxlen = astGetXmlLength( this );
-
-/* Loop round locating each '\n' character in the string. Replace the
-   '\n' character by 0, so that the previous part of the string is then 
-   null terminated, and write it out using the astPutNextText method
-   (splitting the text up into lines no longer than "mxlen"). */
-            c = text;
-            d = strchr( c, '\n' );
-            while( d ) {
-               *d = 0;
-               OutputText( this, c, mxlen, status );
-               c = d + 1;
-               d = strchr( c, '\n' );
-            }
-
-/* Write out any text following the last '\n' character. */
-            if( *c ) OutputText( this, c, mxlen, status );
-
-/* Free the memory holding the text and in-memory representations of the AST 
-   Object. */
-            text = astFree( (void *) text );
-            astXmlRemoveItem( this->container );
-            this->container = astXmlAnnul( this->container );
-
-#ifdef DEBUG
-/* Report an error if there is a memory leak. */
-            if( astXmlTrace(3) > nobj && astOK ) {
-               astError( AST__INTER, "astWriteEnd(XmlChan): %d XmlObjects "
-                         "remain in existence - should be %d (internal AST "
-                         "programming error).", status, astXmlTrace(3), nobj );
-            }
-#endif
-
-         }
-      }
-
-/* Reset the current container element to be the parent found above. */
-      if( !parent || astXmlCheckType( parent, AST__XMLELEM ) ) {
-         this->container = parent;
-      } else if( astOK ) {
-         astError( AST__INTER, "astWriteEnd(XmlChan): Cannot update "
-                   "container: parent is not an XmlElement (internal "
-                   "AST programming error)." , status);
-      }
-   }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-static void WriteInt( AstChannel *this_channel, const char *name, int set, int helpful,
-                      int value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteInt
-
-*  Purpose:
-*     Write an integer value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteInt( AstChannel *this, const char *name, int set, int helpful,
-*                    int value, const char *comment, int *status ) 
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteInt method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named integer value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a Channel. It is intended for use by class "Dump" functions
-*     when writing out class information which will subsequently be
-*     re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        The value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Constants: */
-#define BUFF_LEN 50             /* Size of local formatting buffer */
-
-/* Local Variables: */
-   AstXmlChan *this;             /* A pointer to the XmlChan structure. */
-   AstXmlElement *elem;          /* Pointer to new element */
-   char buff[ BUFF_LEN + 1 ];    /* Local formatting buffer */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
-   an object which is "not set"), then we do not write out this item. */
-   if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-      if( Use( this, set, helpful, status ) ) {
-
-/* Create a new XmlElement with a name of ATTR (and no namespace 
-   prefix), and add it into the current container (i.e. parent) element. */
-         elem = astXmlAddElement( this->container, ATTR,
-                                  astGetXmlPrefix( this ) );
-
-/* Add a NAME attribute to this element containing the item name. */
-         astXmlAddAttr( elem, NAME, name, NULL );
-
-/* Format the value as a decimal string and add it to the element as the
-   VALUE attribute. */
-         (void) sprintf( buff, "%d", value );
-         astXmlAddAttr( elem, VALUE, buff, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
-   parameter to this function, then store the commment as an attribute of
-   the element. */
-         if( comment && *comment && astGetComment( this_channel ) ) {
-            astXmlAddAttr( elem, DESC, comment, NULL );
-         }
-
-/* If the object has all default values, store a true value for the
-   DEFAULT attribute. */
-         if( !set ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Initialise a flag to indicate that the next "IsA" item should be
-   written. */
-         this->write_isa = 1;
-      }
-   }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-/* Undefine macros local to this function. */
-#undef BUFF_LEN
-}
-
-static void WriteIsA( AstChannel *this_channel, const char *class,
-                      const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteIsA
-
-*  Purpose:
-*     Write an "IsA" data item to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteIsA( AstChannel *this, const char *class,
-*                    const char *comment, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteIsA method inherited from the Channel class).
-
-*  Description:
-*     This function writes an "IsA" data item to the data sink
-*     associated with a Channel. This item delimits the end of the
-*     data associated with the instance variables of a class, as part
-*     of an overall Object definition.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     class
-*        Pointer to a constant null-terminated string containing the
-*        name of the class whose data are terminated by the "IsA"
-*        item.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the "IsA"
-*        item. Normally, this will describe the purpose of the class
-*        whose data are being terminated.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     - The comment supplied may not actually be used, depending on
-*     the nature of the Channel supplied.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* A pointer to the XmlChan structure. */
-   AstXmlElement *elem;          /* Pointer to new element */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
-   an object which is "not set"), then we do not write out this item. */
-   if( this->objectset ) {
-
-/* Output an "IsA" item only if there has been at least one item
-   written since the last "Begin" or "IsA" item, or if the Full
-   attribute for the Channel is greater than zero (requesting maximum
-   information). */
-      if ( this->write_isa || astGetFull( this ) > 0 ) {
-
-/* Create a new XmlElement with a name of "_isa" (and no namespace prefix), 
-   and add it into the current container (i.e. parent) element. */
-         elem = astXmlAddElement( this->container, ISA, 
-                                  astGetXmlPrefix( this ) );
-
-/* Add a "class" attribute to this element containing the class name. */
-         astXmlAddAttr( elem, "class", class, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
-   parameter to this function, then store the commment as an attribute of
-   the element. This comment describes the class function as a whole, not
-   the specific usage of this instance of the class. */
-         if( comment && *comment && astGetComment( this_channel ) ) {
-            astXmlAddAttr( elem, DESC, comment, NULL );
-         }
-      }
-   }
-
-/* Initialise a flag to indicate that the next "IsA" item should not be
-   written. This flag will be changed if and when an item is added which
-   related to the class described by the "IsA" item. */
-   this->write_isa = 0;
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-}
-
-static void WriteObject( AstChannel *this_channel, const char *name,
-                         int set, int helpful,
-                         AstObject *value, const char *comment, int *status ) {
-/*
-*  Name:
-*     WriteObject
-
-*  Purpose:
-*     Write an Object as a value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteObject( AstChannel *this_channel, const char *name,
-*                       int set, int helpful,
-*                       AstObject *value, const char *comment, int *status )
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteObject method inherited from the Channel class).
-
-*  Description:
-*     This function writes an Object as a named value, representing
-*     the value of a class instance variable, to the data sink
-*     associated with an XmlChan. It is intended for use by class
-*     "Dump" functions when writing out class information which will
-*     subsequently be re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations.
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        A Pointer to the Object to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;         /* A pointer to the XmlChan structure. */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
-   an object which is "not set"), then we do not write out the object. */
-   if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-      if ( Use( this, set, helpful, status ) ) {
-
-/* Save the supplied name associated with the object being written so
-   that it is available for use within the following invocation of the 
-   WriteBegin method. The name is stored within the XmlChan structure
-   (NULL is used to indicate "no name supplied"). */
-         this->objectname = ( name && strlen( name ) ) ? name : NULL;
-      
-/* Also save the supplied comment and a flag indicating if the object is
-   set. These will be used by the WriteBegin method. They are stored within 
-   the XmlChan structure. */
-         this->objectset = set;
-         this->objectcomment = comment;
-
-/* Write the object to the XmlChan. */
-         (void) astWrite( this, value );
-
-/* Nullify the components of the XmlChan set above. */
-         this->objectname = NULL;
-         this->objectset = 1;
-         this->objectcomment = NULL;
-
-/* Initialise a flag to indicate that the next "IsA" item should be
-   written. */
-         this->write_isa = 1;
-      }
-   }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-static void WriteString( AstChannel *this_channel, const char *name, int set, 
-                         int helpful, const char *value, const char *comment, int *status ){
-/*
-*  Name:
-*     WriteString
-
-*  Purpose:
-*     Write a string value to a data sink.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     void WriteString( AstChannel *this, const char *name, int set, int helpful,
-*                       const char *value, const char *comment, int *status ) 
-
-*  Class Membership:
-*     XmlChan member function (over-rides the protected
-*     astWriteString method inherited from the Channel class).
-
-*  Description:
-*     This function writes a named string value, representing the
-*     value of a class instance variable, to the data sink associated
-*     with a Channel. It is intended for use by class "Dump" functions
-*     when writing out class information which will subsequently be
-*     re-read.
-
-*  Parameters:
-*     this
-*        Pointer to the Channel.
-*     name
-*        Pointer to a constant null-terminated string containing the
-*        name to be used to identify the value in the external
-*        representation. This will form the key for identifying it
-*        again when it is re-read. The name supplied should be unique
-*        within its class.
-*
-*        Mixed case may be used and will be preserved in the external
-*        representation (where possible) for cosmetic effect. However,
-*        case is not significant when re-reading values.
-*
-*        It is recommended that a maximum of 6 alphanumeric characters
-*        (starting with an alphabetic character) be used. This permits
-*        maximum flexibility in adapting to standard external data
-*        representations (e.g. FITS).
-*     set
-*        If this is zero, it indicates that the value being written is
-*        a default value (or can be re-generated from other values) so
-*        need not necessarily be written out. Such values will
-*        typically be included in the external representation with
-*        (e.g.) a comment character so that they are available to
-*        human readers but will be ignored when re-read. They may also
-*        be completely omitted in some circumstances.
-*
-*        If "set" is non-zero, the value will always be explicitly
-*        included in the external representation so that it can be
-*        re-read.
-*     helpful
-*        This flag provides a hint about whether a value whose "set"
-*        flag is zero (above) should actually appear at all in the
-*        external representaton.
-*
-*        If the external representation allows values to be "commented
-*        out" then, by default, values will be included in this form
-*        only if their "helpful" flag is non-zero. Otherwise, they
-*        will be omitted entirely. When possible, omitting the more
-*        obscure values associated with a class is recommended in
-*        order to improve readability.
-*
-*        This default behaviour may be further modified if the
-*        Channel's Full attribute is set - either to permit all values
-*        to be shown, or to suppress non-essential information
-*        entirely.
-*     value
-*        Pointer to a constant null-terminated string containing the
-*        value to be written.
-*     comment
-*        Pointer to a constant null-terminated string containing a
-*        textual comment to be associated with the value.
-*
-*        Note that this comment may not actually be used, depending on
-*        the nature of the Channel supplied and the setting of its
-*        Comment attribute.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* A pointer to the XmlChan structure. */
-   AstXmlElement *elem;          /* Pointer to new element */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_channel;
-
-/* If the object to be written is a component of a default AST object (i.e.
-   an object which is "not set"), then we do not write out this item. */
-   if( this->objectset ) {
-
-/* Use the "set" and "helpful" flags, along with the Channel's
-   attributes to decide whether this value should actually be
-   written. */
-      if( Use( this, set, helpful, status ) ) {
-
-/* Create a new XmlElement with a name of ATTR (and no namespace 
-   prefix), and add it into the current container (i.e. parent) element. */
-         elem = astXmlAddElement( this->container, ATTR,
-                                  astGetXmlPrefix( this ) );
-
-/* Add a NAME attribute to this element containing the item name. */
-         astXmlAddAttr( elem, NAME, name, NULL );
-
-/* If we are using QUOTED format, add an attribute to indicate that this is a 
-   string value (mainly included for compatibility with JNIAST). */
-         if( astGetXmlFormat( this ) == QUOTED_FORMAT ) {
-            astXmlAddAttr( elem, QUOTED, TRUE, NULL );
-         }
-
-/* Add it the value to the element as the VALUE attribute. */
-         astXmlAddAttr( elem, VALUE, value, NULL );
-
-/* If we are adding comments, and if a comment was supplied as a
-   parameter to this function, then store the commment as an attribute of
-   the element. */
-         if( comment && *comment && astGetComment( this_channel ) ) {
-            astXmlAddAttr( elem, DESC, comment, NULL );
-         }
-
-/* If the object has all default values, store a true value for the
-   DEFAULT attribute. */
-         if( !set ) astXmlAddAttr( elem, DEFAULT, TRUE, NULL );
-
-/* Initialise a flag to indicate that the next "IsA" item should be
-   written. */
-         this->write_isa = 1;
-      }
-   }
-
-/* If an error has occurred, annul the container element in the XmlChan. */
-   if( !astOK ) this->container = astXmlAnnulTree( this->container );
-
-}
-
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/* XmlFormat */
-/* ========= */
-/*
-*att++
-*  Name:
-*     XmlFormat
-
-*  Purpose:
-*     System for formatting Objects as XML.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute specifies the formatting system to use when AST
-*     Objects are written out as XML through an XmlChan. It
-c     affects the behaviour of the astWrite function when
-f     affects the behaviour of the AST_WRITE routine  when
-*     they are used to transfer any AST Object to or from an external
-*     XML representation.
-*
-*     The XmlChan class allows AST objects to be represented in the form
-*     of XML in several ways (conventions) and the XmlFormat attribute is 
-*     used to specify which of these should be used. The formatting options 
-*     available are outlined in the "Formats Available" section below.
-*
-*     By default, an XmlChan will attempt to determine which format system
-*     is already in use, and will set the default XmlFormat value
-*     accordingly (so that subsequent I/O operations adopt the same
-*     conventions). It does this by looking for certain critical items
-*     which only occur in particular formats. For details of how this
-*     works, see the "Choice of Default Format" section below. If you wish
-*     to ensure that a particular format system is used, independently of
-*     any XML already read, you should set an explicit XmlFormat value
-*     yourself.
-*
-*  Formats Available:
-*     The XmlFormat attribute can take any of the following (case
-*     insensitive) string values to select the corresponding formatting
-*     system:
-*
-*     - "NATIVE": This is a direct conversion to XML of the heirarchical
-*     format used by a standard XML channel (and also by the NATIVE
-*     encoding of a FitsChan).
-*
-*     - "QUOTED": This is the same as NATIVE format except that extra
-*     information is included which allows client code to convert the
-*     XML into a form which can be read by a standard AST Channel. This
-*     extra information indicates which AST attribute values should be
-*     enclosed in quotes before being passed to a Channel. 
-*
-*     - "IVOA": This is a format that uses an early draft of the STC-X schema 
-*     developed by the International Virtual Observatory Alliance (IVOA - 
-*     see "http://www.ivoa.net/") to describe coordinate systems, regions, 
-*     mappings, etc. Support is limited to V1.20 described at 
-*     "http://www.ivoa.net/Documents/WD/STC/STC-20050225.html". Since the
-*     version of STC-X finally adopted by the IVOA differs in several
-*     significant respects from V1.20, this format is now mainly of 
-*     historical interest. Note, the alternative "STC-S" format (a
-*     simpler non-XML encoding of the STC metadata) is supported by the 
-*     StcsChan class.
-
-*  Choice of Default Format;
-*     If the XmlFormat attribute of an XmlChan is not set, the default
-*     value it takes is determined by the presence of certain critical
-*     items within the document most recently read using 
-c     astRead.
-f     AST_READ.
-*     The sequence of decision used to arrive at the default value is as 
-*     follows:
-*
-*     - If the previous document read contained any elements in any of the STC
-*     namespaces ("urn:nvo-stc", "urn:nvo-coords" or "urn:nvo-region"), then
-*     the default value is IVOA.
-*     - If the previous document read contained any elements in the AST
-*     namespace which had an associated XML attribute called "quoted", then
-*     the default value is QUOTED.
-*     - Otherwise, if none of these conditions is met (as would be the
-*     case if no document had yet been read), then NATIVE format is
-*     used.
-*
-*     Setting an explicit value for the XmlFormat attribute always
-*     over-rides this default behaviour.
-
-*  The IVOA Format:
-*     The IVOA support caters only for certain parts of V1.20 of the 
-*     draft Space-Time Coordinate (STC) schema (see 
-*     http://www.ivoa.net/Documents/WD/STC/STC-20050225.html). Note, this
-*     draft has now been superceded by an officially adopted version that
-*     differs in several significant respects from V1.20. Consequently,
-*     the "IVOA" XmlChan format is of historical interest only.
-*
-*     The following points should be noted when using an XmlChan to read
-*     or write STC information (note, this list is currently incomplete):
-*
-*     - Objects can currently only be read using this format, not written.
-*     - The AST object generated by reading an <STCMetadata> element will 
-*     be an instance of one of the AST "Stc" classes: StcResourceProfile, 
-*     StcSearchLocation, StcCatalogEntryLocation, StcObsDataLocation.
-*     - When reading an <STCMetadata> element, the axes in the returned 
-*     AST Object will be in the order space, time, spectral, redshift,
-*     irrespective of the order in which the axes occur in the <STCMetadata>
-*     element. If the supplied <STCMetadata> element does not contain all of 
-*     these axes, the returned AST Object will also omit them, but the 
-*     ordering of those axes which are present will be as stated above. If 
-*     the spatial frame represents a celestial coordinate system the 
-*     spatial axes will be in the order (longitude, latitude). 
-*     - Until such time as the AST TimeFrame is complete, a simple
-*     1-dimensional Frame (with Domain set to TIME) will be used to 
-*     represent the STC <TimeFrame> element. Consequently, most of the
-*     information within a <TimeFrame> element is currently ignored.
-*     - <SpaceFrame> elements can only be read if they describe a celestial 
-*     longitude and latitude axes supported by the AST SkyFrame class. The 
-*     space axes will be returned in the order (longitude, latitude).
-*     - Velocities associated with SpaceFrames cannot be read.
-*     - Any <GenericCoordFrame> elements within an <AstroCoordSystem> element
-*     are currently ignored.
-*     - Any second or subsequent <AstroCoordSystem> found within an
-*     STCMetaData element is ignored.
-*     - Any second or subsequent <AstroCoordArea> found within an
-*     STCMetaData element is ignored.
-*     - Any <OffsetCenter> found within a <SpaceFrame> is ignored.
-*     - Any CoordFlavor element found within a <SpaceFrame> is ignored.
-*     - <SpaceFrame> elements can only be read if they refer to 
-*     one of the following space reference frames: ICRS, GALACTIC_II,
-*     SUPER_GALACTIC, HEE, FK4, FK5, ECLIPTIC.
-*     - <SpaceFrame> elements can only be read if the reference 
-*     position is TOPOCENTER. Also, any planetary ephemeris is ignored.
-*     - Regions: there is currently no support for STC regions of type
-*     Sector, ConvexHull or SkyIndex.
-*     - The AST Region read from a CoordInterval element is considered to
-*     be open if either the lo_include or the hi_include attribute is
-*     set to false.
-*     - <RegionFile> elements are not supported.
-*     - Vertices within <Polygon> elements are always considered to be
-*     joined using great circles (that is, <SmallCircle> elements are
-*     ignored).
-
-*  Applicability:
-*     XmlChan
-*        All XmlChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlFormat,xmlformat,UNKNOWN_FORMAT)
-astMAKE_SET(XmlChan,XmlFormat,int,xmlformat,( 
-   value == NATIVE_FORMAT || 
-   value == IVOA_FORMAT || 
-   value == QUOTED_FORMAT ? value : 
-   (astError( AST__BADAT, "astSetXmlFormat: Unknown XML formatting system %d "
-              "supplied.", status, value ), UNKNOWN_FORMAT )))
-astMAKE_TEST(XmlChan,XmlFormat,( this->xmlformat != UNKNOWN_FORMAT ))
-astMAKE_GET(XmlChan,XmlFormat,int,0,(this->xmlformat == UNKNOWN_FORMAT ? 
-                                this->formatdef : this->xmlformat))
-
-/*
-*att++
-*  Name:
-*     XmlIndent
-
-*  Purpose:
-*     Controls output of indentation and line feeds.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer (boolean).
-
-*  Description:
-*     This attribute controls the appearance of the XML produced when an
-*     AST object is written to an XmlChan. If it is non-zero, then extra
-*     linefeed characters will be inserted as necessary to ensure that each 
-*     XML tag starts on a new line, and each tag will be indented to show 
-*     its depth in the containment hierarchy. If XmlIndent is zero (the
-*     default), then no linefeeds or indentation strings will be added to
-*     output text.
-
-*  Applicability:
-*     XmlChan
-*        All XmlChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlIndent,xmlindent,-1)
-astMAKE_GET(XmlChan,XmlIndent,int,0,(this->xmlindent == -1 ? 0 : this->xmlindent))
-astMAKE_SET(XmlChan,XmlIndent,int,xmlindent,( value ? 1 : 0 ))
-astMAKE_TEST(XmlChan,XmlIndent,( this->xmlindent != -1 ))
-
-/*
-*att++
-*  Name:
-*     XmlLength
-
-*  Purpose:
-*     Controls output buffer length.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Integer.
-
-*  Description:
-*     This attribute specifies the maximum length to use when writing out 
-*     text through the sink function supplied when the XmlChan was created.
-*
-*     The number of characters in each string written out through the sink 
-*     function will not be greater than the value of this attribute (but
-*     may be less). A value of zero (the default) means there is no limit - 
-*     each string can be of any length.
-*
-f     Note, the default value of zero is unlikely to be appropriate when
-f     an XmlChan is used within Fortran code. In this case, XmlLength
-f     should usually be set to the size of the CHARACTER variable used to 
-f     receive the text returned by AST_GETLINE within the sink function.
-f     This avoids the possibility of long lines being truncated invisibly
-f     within AST_GETLINE.
-
-*  Applicability:
-*     XmlChan
-*        All XmlChans have this attribute.
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlLength,xmllength,-INT_MAX)
-astMAKE_GET(XmlChan,XmlLength,int,0,( ( this->xmllength != -INT_MAX ) ? this->xmllength : 0 ))
-astMAKE_SET(XmlChan,XmlLength,int,xmllength,(value<0?0:value))
-astMAKE_TEST(XmlChan,XmlLength,( this->xmllength != -INT_MAX ))
-
-/*
-*att++
-*  Name:
-*     XmlPrefix
-
-*  Purpose:
-*     The namespace prefix to use when writing.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     String.
-
-*  Description:
-*     This attribute is a string which is to be used as the namespace
-*     prefix for all XML elements created as a result of writing an AST
-*     Object out through an XmlChan. The URI associated with the namespace
-*     prefix is given by the symbolic constant AST__XMLNS defined in 
-f     AST_PAR.
-c     ast.h.
-*     A definition of the namespace prefix is included in each top-level
-*     element produced by the XmlChan.
-*
-*     The default value is a blank string which causes no prefix to be
-*     used. In this case each top-level element will set the default 
-*     namespace to be the value of AST__XMLNS.
-
-*  Applicability:
-*     Object
-*        All Objects have this attribute.
-
-*att--
-*/
-astMAKE_CLEAR(XmlChan,XmlPrefix,xmlprefix,astFree( this->xmlprefix ))
-astMAKE_GET(XmlChan,XmlPrefix,const char *,NULL,( this->xmlprefix ? this->xmlprefix : "" ))
-astMAKE_SET(XmlChan,XmlPrefix,const char *,xmlprefix,astStore( this->xmlprefix, value,
-                                                strlen( value ) + (size_t) 1 ))
-astMAKE_TEST(XmlChan,XmlPrefix,( this->xmlprefix != NULL ))
-
-
-/* Copy constructor. */
-/* ----------------- */
-static void Copy( const AstObject *objin, AstObject *objout, int *status ) {
-/*
-*  Name:
-*     Copy
-
-*  Purpose:
-*     Copy constructor for XmlChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Copy( const AstObject *objin, AstObject *objout, int *status )
-
-*  Description:
-*     This function implements the copy constructor for XmlChan objects.
-
-*  Parameters:
-*     objin
-*        Pointer to the object to be copied.
-*     objout
-*        Pointer to the object being constructed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     -  This constructor makes a deep copy.
-*/
-
-/* Local Variables: */
-   AstXmlChan *in;               /* Pointer to input XmlChan */
-   AstXmlChan *out;              /* Pointer to output XmlChan */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain pointers to the input and output XmlChans. */
-   in = (AstXmlChan *) objin;
-   out = (AstXmlChan *) objout;
-
-/* Clear the non-persistent values in the new XmlChan. */
-   out->objectname = NULL;   /* Name of object being written */
-   out->objectset = 1;       /* Is object being written set?*/
-   out->objectcomment = NULL;/* Comment for object class being written */
-   out->readcontext = NULL;  /* XmlElement giving context for current read */ 
-   out->container = NULL;    /* XmlElement to which content will be added */ 
-   out->write_isa = 0;       /* Write out the next "IsA" item? */
-   out->reset_source = 1;    /* A new line should be read from the source */
-   out->isa_class = NULL;    /* Class being loaded */
-
-/* Store a copy of the prefix string.*/
-   if ( in->xmlprefix ) out->xmlprefix = astStore( NULL, in->xmlprefix,
-                                           strlen( in->xmlprefix ) + (size_t) 1 );
-}
-
-
-/* Destructor. */
-/* ----------- */
-static void Delete( AstObject *obj, int *status ) {
-/*
-*  Name:
-*     Delete
-
-*  Purpose:
-*     Destructor for XmlChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Delete( AstObject *obj, int *status )
-
-*  Description:
-*     This function implements the destructor for XmlChan objects.
-
-*  Parameters:
-*     obj
-*        Pointer to the object to be deleted.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Notes:
-*     This function attempts to execute even if the global error status is
-*     set.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;             /* Pointer to XmlChan */
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) obj;
-
-/* Free any unread part of the document. */
-   this->readcontext = astXmlAnnul( this->readcontext );
-
-/* Free the memory used for the XmlPrefix string if necessary. */
-   this->xmlprefix = astFree( this->xmlprefix );
-
-/* Free any memory used to store text read from the source */
-   GetNextChar( NULL, status );
-
-}
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for XmlChan objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the XmlChan class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the XmlChan whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstXmlChan *this;            /* Pointer to the XmlChan structure */
-   const char *class;           /* Class name */
-   const char *sval;            /* String attribute value */
-   int ival;                    /* Integer attribute value */
-   int set;                     /* Has the attribute got a set value? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the XmlChan structure. */
-   this = (AstXmlChan *) this_object;
-
-/* Store the object class. */
-   class = astGetClass( this );
-
-/* Write out values representing the instance variables for the
-   XmlChan class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-
-/* Now do instance variables which are not attributes. */
-/* =================================================== */
-
-/* XmlIndent */
-/* --------- */
-      set = TestXmlIndent( this, status );
-      ival = set ? GetXmlIndent( this, status ) : astGetXmlIndent( this );
-      astWriteInt( channel, "XmlInd", set, 0, ival, "XML indentation" );
-
-/* XmlLength */
-/* --------- */
-      set = TestXmlLength( this, status );
-      ival = set ? GetXmlLength( this, status ) : astGetXmlLength( this );
-      astWriteInt( channel, "XmlLen", set, 0, ival, "XML buffer length" );
-
-/* XmlFormat. */
-/* --------- */
-   set = TestXmlFormat( this, status );
-   ival = set ? GetXmlFormat( this, status ) : astGetXmlFormat( this );
-   if( ival > UNKNOWN_FORMAT && ival <= MAX_FORMAT ) {
-      astWriteString( channel, "XmlFmt", set, 1, xformat[ival], "Formatting system" );
-   } else {
-      astWriteString( channel, "XmlFmt", set, 1, UNKNOWN_STRING, "Formatting system" );
-   }
-
-/* XmlPrefix */
-/* --------- */
-      set = TestXmlPrefix( this, status );
-      sval = set ? GetXmlPrefix( this, status ) : astGetXmlPrefix( this );
-      astWriteString( channel, "XmlPrf", set, 1, sval,
-                      "Namespace prefix" );
-}
-
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAXmlChan and astCheckXmlChan functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(XmlChan,Channel)
-astMAKE_CHECK(XmlChan)
-
-AstXmlChan *astXmlChan_( const char *(* source)( void ),
-                         void (* sink)( const char * ),
-                         const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astXmlChan
-f     AST_XMLCHAN
-
-*  Purpose:
-*     Create an XmlChan.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "xmlchan.h"
-c     AstXmlChan *astXmlChan( const char *(* source)( void ),
-c                             void (* sink)( const char * ),
-c                             const char *options, ... )
-f     RESULT = AST_XMLCHAN( SOURCE, SINK, OPTIONS, STATUS )
-
-*  Class Membership:
-*     XmlChan constructor.
-
-*  Description:
-*     This function creates a new XmlChan and optionally initialises
-*     its attributes.
-*
-*     A XmlChan is a specialised form of Channel which supports XML I/O
-*     operations. Writing an Object to an XmlChan (using
-c     astWrite) will, if the Object is suitable, generate an
-f     AST_WRITE) will, if the Object is suitable, generate an
-*     XML description of that Object, and reading from an XmlChan will 
-*     create a new Object from its XML description.
-*
-*     Normally, when you use an XmlChan, you should provide "source"
-c     and "sink" functions which connect it to an external data store
-f     and "sink" routines which connect it to an external data store
-*     by reading and writing the resulting XML text. By default, however,
-*     a Channel will read from standard input and write to standard
-*     output.
-
-*  Parameters:
-c     source
-f     SOURCE = SUBROUTINE (Given)
-c        Pointer to a source function that takes no arguments and
-c        returns a pointer to a null-terminated string.  This function
-c        will be used by the XmlChan to obtain lines of input text. On
-c        each invocation, it should return a pointer to the next input
-c        line read from some external XML data store, and a NULL pointer
-c        when there are no more lines to read.
-c
-c        If "source" is NULL, the Channel will read from standard
-c        input instead.
-f        A source routine, which is a subroutine which takes a single
-f        integer error status argument.  This routine will be used by
-f        the XmlChan to obtain lines of input text. On each
-f        invocation, it should read the next input line from some
-f        external XML data store, and then return the resulting text to
-f        the AST library by calling AST_PUTLINE. It should supply a
-f        negative line length when there are no more lines to read.
-f        If an error occurs, it should set its own error status
-f        argument to an error value before returning.
-f
-f        If the null routine AST_NULL is suppied as the SOURCE value,
-f        the Channel will read from standard input instead.
-c     sink
-f     SINK = SUBROUTINE (Given)
-c        Pointer to a sink function that takes a pointer to a
-c        null-terminated string as an argument and returns void.  This
-c        function will be used by the XmlChan to deliver lines of
-c        output text. On each invocation, it should deliver the
-c        contents of the string supplied to some external XML data store.
-c
-c        If "sink" is NULL, the XmlChan will write to standard output
-c        instead.
-f        A sink routine, which is a subroutine which takes a single
-f        integer error status argument.  This routine will be used by
-f        the XmlChan to deliver lines of output text. On each
-f        invocation, it should obtain the next output line from the
-f        AST library by calling AST_GETLINE, and then deliver the
-f        resulting text to some external XML data store.  If an error
-f        occurs, it should set its own error status argument to an
-f        error value before returning.
-f
-f        If the null routine AST_NULL is suppied as the SINK value,
-f        the Channel will write to standard output instead.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new XmlChan. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new XmlChan. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astXmlChan()
-f     AST_XMLCHAN = INTEGER
-*        A pointer to the new XmlChan.
-
-*  Notes:
-f     - The names of the routines supplied for the SOURCE and SINK
-f     arguments should appear in EXTERNAL statements in the Fortran
-f     routine which invokes AST_XMLCHAN. However, this is not generally
-f     necessary for the null routine AST_NULL (so long as the AST_PAR
-f     include file has been used).
-*     - If the external data source or sink uses a character encoding
-*     other than ASCII, the supplied source and sink functions should
-*     translate between the external character encoding and the internal 
-*     ASCII encoding used by AST.
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the AST error status set, or if it
-*     should fail for any reason.
-f     - Note that the null routine AST_NULL (one underscore) is
-f     different to AST__NULL (two underscores), which is the null Object
-f     pointer.
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstXmlChan *new;             /* Pointer to new XmlChan */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the XmlChan, allocating memory and initialising the
-   virtual function table as well if necessary. This interface is for
-   use by other C functions within AST, and uses the standard "wrapper"
-   functions included in this class. */
-   new = astInitXmlChan( NULL, sizeof( AstXmlChan ), !class_init, 
-                          &class_vtab, "XmlChan", source, SourceWrap,
-                          sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   XmlChan's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new XmlChan. */
-   return new;
-}
-
-AstXmlChan *astXmlChanId_( const char *(* source)( void ),
-                           void (* sink)( const char * ),
-                           const char *options, ... ) {
-/*
-*  Name:
-*     astXmlChanId_
-
-*  Purpose:
-*     Create an XmlChan.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlChan *astXmlChanId_( const char *(* source)( void ),
-*                                void (* sink)( const char * ),
-*                                const char *options, ... )
-
-*  Class Membership:
-*     XmlChan constructor.
-
-*  Description:
-*     This function implements the external (public) C interface to the
-*     astXmlChan constructor function. Another function (astXmlChanForId)
-*     should be called to create an XmlChan for use within other languages.
-*     Both functions return an ID value (instead of a true C pointer) to 
-*     external users, and must be provided because astXmlChan_ has a variable 
-*     argument list which cannot be encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astXmlChan_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astXmlChan_.
-
-*  Returned Value:
-*     The ID value associated with the new XmlChan.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstXmlChan *new;             /* Pointer to new XmlChan */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the XmlChan, allocating memory and initialising the
-   virtual function table as well if necessary. This interface is for
-   use by external C functions and uses the standard "wrapper"
-   functions included in this class. */
-   new = astInitXmlChan( NULL, sizeof( AstXmlChan ), !class_init, 
-                         &class_vtab, "XmlChan", source, SourceWrap, 
-                         sink, SinkWrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   XmlChan's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new XmlChan. */
-   return astMakeId( new );
-}
-
-AstXmlChan *astXmlChanForId_( const char *(* source)( void ),
-                              char *(* source_wrap)( const char *(*)( void ), int * ),
-                              void (* sink)( const char * ),
-                              void (* sink_wrap)( void (*)( const char * ),
-                                                  const char *, int * ),
-                              const char *options, ... ) {
-/*
-*+
-*  Name:
-*     astXmlChanFor
-
-*  Purpose:
-*     Initialise an XmlChan from a foreign language interface.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlChan *astXmlChanFor( const char *(* source)( void ),
-*                                char *(* source_wrap)( const char *(*)
-*                                                       ( void ), int * ),
-*                                void (* sink)( const char * ),
-*                                void (* sink_wrap)( void (*)( const char * ),
-*                                                    const char *, int * ),
-*                                const char *options, ... )
-
-*  Class Membership:
-*     XmlChan constructor.
-
-*  Description:
-*     This function creates a new XmlChan from a foreign language
-*     interface and optionally initialises its attributes.
-*
-*     A XmlChan implements low-level XML input/output for the AST library.
-*     Writing an Object to an XmlChan (using astWrite) will generate a
-*     XML representation of that Object, and reading from a
-*     XmlChan (using astRead) will create a new Object from its
-*     XML representation.
-*
-*     Normally, when you use an XmlChan, you should provide "source"
-*     and "sink" functions which connect it to an external data store
-*     by reading and writing the resulting text. This function also
-*     requires you to provide "wrapper" functions which will invoke
-*     the source and sink functions. By default, however, an XmlChan
-*     will read from standard input and write to standard output.
-
-*  Parameters:
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        lines of input text. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the XmlChan will read from standard
-*        input instead.
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next line of input
-*        text. The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source_wrap" is NULL, the XmlChan will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        lines of output text. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the XmlChan will write to standard output
-*        instead.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the Channel will write to standard
-*        output instead.
-*     options
-*        Pointer to a null-terminated string containing an optional
-*        comma-separated list of attribute assignments to be used for
-*        initialising the new XmlChan. The syntax used is identical to
-*        that for the astSet function and may include "printf" format
-*        specifiers identified by "%" symbols in the normal way.
-*     ...
-*        If the "options" string contains "%" format specifiers, then
-*        an optional list of additional arguments may follow it in
-*        order to supply values to be substituted for these
-*        specifiers. The rules for supplying these are identical to
-*        those for the astSet function (and for the C "printf"
-*        function).
-
-*  Returned Value:
-*     astXmlChanFor()
-*        A pointer to the new XmlChan.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-*     function is invoked with the global error status set, or if it
-*     should fail for any reason.
-*     - This function is only available through the public interface
-*     to the XmlChan class (not the protected interface) and is
-*     intended solely for use in implementing foreign language
-*     interfaces to this class.
-*-
-
-*  Implememtation Notes:
-*     - This function behaves exactly like astXmlChanId_, in that it
-*     returns ID values and not true C pointers, but it has two
-*     additional arguments. These are pointers to the "wrapper
-*     functions" which are needed to accommodate foreign language
-*     interfaces.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstXmlChan *new;              /* Pointer to new XmlChan */
-   va_list args;                 /* Variable argument list */
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialise the XmlChan, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitXmlChan( NULL, sizeof( AstXmlChan ), !class_init, 
-                         &class_vtab, "XmlChan", source, source_wrap,
-                         sink, sink_wrap );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the
-   options string to the astVSet method to initialise the new
-   XmlChan's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new XmlChan. */
-   return astMakeId( new );
-}
-
-AstXmlChan *astInitXmlChan_( void *mem, size_t size, int init,
-                             AstXmlChanVtab *vtab, const char *name,
-                             const char *(* source)( void ),
-                             char *(* source_wrap)( const char *(*)( void ), int * ),
-                             void (* sink)( const char * ),
-                             void (* sink_wrap)( void (*)( const char * ),
-                                                 const char *, int * ), int *status ) {
-/*
-*+
-*  Name:
-*     astInitXmlChan
-
-*  Purpose:
-*     Initialise an XmlChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlChan *astInitXmlChan( void *mem, size_t size, int init,
-*                                 AstXmlChanVtab *vtab, const char *name,
-*                                 const char *(* source)( void ),
-*                                 char *(* source_wrap)( const char *(*)( void ), int * ),
-*                                 void (* sink)( const char * ),
-*                                 void (* sink_wrap)( void (*)( const char * ),
-*                                                     const char *, int * ) )
-
-*  Class Membership:
-*     XmlChan initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to
-*     initialise a new XmlChan object. It allocates memory (if
-*     necessary) to accommodate the XmlChan plus any additional data
-*     associated with the derived class.  It then initialises a
-*     XmlChan structure at the start of this memory. If the "init"
-*     flag is set, it also initialises the contents of a virtual
-*     function table for an XmlChan at the start of the memory passed
-*     via the "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the XmlChan is to be
-*        initialised.  This must be of sufficient size to accommodate
-*        the XmlChan data (sizeof(XmlChan)) plus any data used by the
-*        derived class. If a value of NULL is given, this function
-*        will allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the XmlChan (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the XmlChan structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*     init
-*        A boolean flag indicating if the XmlChan's virtual function
-*        table is to be initialised. If this value is non-zero, the
-*        virtual function table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new XmlChan.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*     source
-*        Pointer to a "source" function which will be used to obtain
-*        lines of text. Generally, this will be obtained by
-*        casting a pointer to a source function which is compatible
-*        with the "source_wrap" wrapper function (below). The pointer
-*        should later be cast back to its original type by the
-*        "source_wrap" function before the function is invoked.
-*
-*        If "source" is NULL, the Channel will read from standard
-*        input instead.
-*     source_wrap
-*        Pointer to a function which can be used to invoke the
-*        "source" function supplied (above). This wrapper function is
-*        necessary in order to hide variations in the nature of the
-*        source function, such as may arise when it is supplied by a
-*        foreign (non-C) language interface.
-*
-*        The single parameter of the "source_wrap" function is a
-*        pointer to the "source" function, and it should cast this
-*        function pointer (as necessary) and invoke the function with
-*        appropriate arguments to obtain the next line of input
-*        text. The "source_wrap" function should then return a pointer
-*        to a dynamically allocated, null terminated string containing
-*        the text that was read. The string will be freed (using
-*        astFree) when no longer required and the "source_wrap"
-*        function need not concern itself with this. A NULL pointer
-*        should be returned if there is no more input to read.
-*
-*        If "source_wrap" is NULL, the Channel will read from standard
-*        input instead.
-*     sink
-*        Pointer to a "sink" function which will be used to deliver
-*        lines of text. Generally, this will be obtained by
-*        casting a pointer to a sink function which is compatible with
-*        the "sink_wrap" wrapper function (below). The pointer should
-*        later be cast back to its original type by the "sink_wrap"
-*        function before the function is invoked.
-*
-*        If "sink" is NULL, the contents of the XmlChan will not be
-*        written out before being deleted.
-*     sink_wrap
-*        Pointer to a function which can be used to invoke the "sink"
-*        function supplied (above). This wrapper function is necessary
-*        in order to hide variations in the nature of the sink
-*        function, such as may arise when it is supplied by a foreign
-*        (non-C) language interface.
-*
-*        The first parameter of the "sink_wrap" function is a pointer
-*        to the "sink" function, and the second parameter is a pointer
-*        to a const, null-terminated character string containing the
-*        text to be written.  The "sink_wrap" function should cast the
-*        "sink" function pointer (as necessary) and invoke the
-*        function with appropriate arguments to deliver the line of
-*        output text. The "sink_wrap" function then returns void.
-*
-*        If "sink_wrap" is NULL, the Channel will write to standard
-*        output instead.
-
-*  Returned Value:
-*     A pointer to the new XmlChan.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   AstXmlChan *new;              /* Pointer to new XmlChan */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitXmlChanVtab( vtab, name );
-
-/* Initialise a Channel structure (the parent class) as the first
-   component within the XmlChan structure, allocating memory if
-   necessary. */
-   new = (AstXmlChan *) astInitChannel( mem, size, 0,
-                                       (AstChannelVtab *) vtab, name,
-                                        source, source_wrap, sink,
-                                        sink_wrap );
-
-   if ( astOK ) {
-
-/* Initialise the XmlChan data. */
-/* ---------------------------- */
-      new->objectname = NULL;   /* Name of object being written */
-      new->objectset = 1;       /* Is object being written set?*/
-      new->objectcomment = NULL;/* Comment for object class being written */
-      new->container = NULL;    /* XmlElement to which content will be added */ 
-      new->readcontext = NULL;  /* XmlElement giving context for current read */ 
-      new->write_isa = 0;       /* Write out the next "IsA" item? */
-      new->xmlindent = -1;      /* Indentat output? */
-      new->xmllength = -INT_MAX;/* Buffer length */
-      new->xmlprefix = NULL;    /* Xml prefix */
-      new->xmlformat = UNKNOWN_FORMAT; /* Xml format */
-      new->formatdef = NATIVE_FORMAT;  /* Default Xml format */
-      new->reset_source = 1;    /* A new line should be read from the source */
-      new->isa_class = NULL;    /* Class being loaded */
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new object. */
-   return new;
-}
-
-AstXmlChan *astLoadXmlChan_( void *mem, size_t size,
-                             AstXmlChanVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadXmlChan
-
-*  Purpose:
-*     Load an XmlChan.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "xmlchan.h"
-*     AstXmlChan *astLoadXmlChan( void *mem, size_t size,
-*                                 AstXmlChanVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     XmlChan loader.
-
-*  Description:
-*     This function is provided to load a new XmlChan using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     XmlChan structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for an XmlChan at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the XmlChan is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        XmlChan data (sizeof(XmlChan)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the XmlChan (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the XmlChan structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstXmlChan) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new XmlChan. If this is NULL, a pointer
-*        to the (static) virtual function table for the XmlChan class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "XmlChan" is used instead.
-
-*  Returned Value:
-*     A pointer to the new XmlChan.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstXmlChan *new;            /* Pointer to the new XmlChan */
-   char *text;                 /* Textual version of integer value */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this XmlChan. In this case the
-   XmlChan belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstXmlChan );
-      vtab = &class_vtab;
-      name = "XmlChan";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitXmlChanVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built XmlChan. */
-   new = astLoadChannel( mem, size, (AstChannelVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "XmlChan" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* Ensure other items in the XmlChan structure are initialised properly. */
-      new->objectname = NULL;   /* Name of object being written */
-      new->objectset = 1;       /* Is object being written set?*/
-      new->objectcomment = NULL;/* Comment for object class being written */
-      new->container = NULL;    /* XmlElement to which content will be added */ 
-      new->readcontext = NULL;  /* XmlElement giving context for current read */ 
-      new->write_isa = 0;       /* Write out the next "IsA" item? */
-      new->xmlindent = -1;      /* Indent output? */
-      new->xmllength = -INT_MAX;/* Buffer length */
-      new->xmlprefix = NULL;    /* Xml prefix */
-      new->reset_source = 1;    /* A new line should be read from the source */
-      new->isa_class = NULL;    /* Class being loaded */
-      new->formatdef = NATIVE_FORMAT;  /* Default Xml format */
-
-/* Now restore presistent values. */
-
-/* XmlIndent */
-/* --------- */
-      new->xmlindent = astReadInt( channel, "xmlind", -1 );
-
-/* XmlLength */
-/* --------- */
-      new->xmllength = astReadInt( channel, "xmllen", -INT_MAX );
-
-/* XmlPrefix */
-/* --------- */
-      new->xmlprefix = astReadString( channel, "xmlprf", NULL );
-
-/* XmlFormat. */
-/* --------- */
-      text = astReadString( channel, "xmlfmt", UNKNOWN_STRING );
-      if( strcmp( text, UNKNOWN_STRING ) ) {
-         new->xmlformat = FindString( MAX_FORMAT + 1, xformat, text, 
-                                     "the XmlChan component 'XmlFmt'", 
-                                     "astRead", astGetClass( channel ), status );
-      } else {
-         new->xmlformat = UNKNOWN_FORMAT;
-      }
-      if ( TestXmlFormat( new, status ) ) SetXmlFormat( new, new->xmlformat, status );
-      text = astFree( text );
-   }
-
-/* If an error occurred, clean up by deleting the new XmlChan. */
-   if ( !astOK ) new = astDelete( new );
-
-/* Return the new XmlChan pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ast-5.3-1/xmlchan.h b/ast-5.3-1/xmlchan.h
deleted file mode 100644
index f764313..0000000
--- a/ast-5.3-1/xmlchan.h
+++ /dev/null
@@ -1,316 +0,0 @@
-#if !defined( XMLCHAN_INCLUDED ) /* Include this file only once */
-#define XMLCHAN_INCLUDED
-/*
-*+
-*  Name:
-*     xmlchan.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the XmlChan class.
-
-*  Invocation:
-*     #include "xmlchan.h"
-
-*  Description:
-*     This include file defines the interface to the XmlChan class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The XmlChan class provides facilities for reading and writing AST 
-*     Objects in the form of XML.
-
-*  Inheritance:
-*     The XmlChan class inherits from the Channel class.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-*     Copyright (C) 2009 Science & Technology Facilities Council.
-*     All Rights Reserved.
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     DSB: D.S. Berry (Starlink)
-
-*  History:
-*     10-OCT-2003 (DSB):
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "channel.h"             /* I/O channels (parent class) */
-#include "keymap.h"              /* Mappings of keys to values */
-#include "xml.h"                 /* AST XML facilities */
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros. */
-/* ------- */
-
-#if defined(astCLASS) || defined(astFORTRAN77)
-#define STATUS_PTR status
-#else
-#define STATUS_PTR astGetStatusPtr
-#endif
-
-/* URI defining the starlink AST XML namespace */
-#define AST__XMLNS  "http://www.starlink.ac.uk/ast/xml/"
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-
-/* XmlChan structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstXmlChan {
-
-/* Attributes inherited from the parent class. */
-   AstChannel channel;             /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   const char *objectname;     /* Name of Object currently being written. */
-   const char *objectcomment;  /* Comment for Object currently being written. */
-   int objectset;              /* Is the Object currently being written set? */
-   AstXmlParent *container;    /* XmlParent to which content will be added */
-   AstXmlDocument *readcontext;/* XmlDocument giving context for current read */
-   int write_isa;              /* Is the next "isA" really needed? */
-   int xmlindent;              /* Indentat output? */
-   int xmllength;              /* Buffer length */
-   int xmlformat;              /* Output format to use when writing */
-   int formatdef;              /* Default format */
-   char *xmlprefix;            /* Namespace prefix */
-   int reset_source;           /* Read a new line from the source ? */
-   const char *isa_class;      /* Class being loaded */
-} AstXmlChan;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstXmlChanVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstChannelVtab channel_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   int (* GetXmlIndent)( AstXmlChan *, int * );
-   int (* TestXmlIndent)( AstXmlChan *, int * );
-   void (* ClearXmlIndent)( AstXmlChan *, int * );
-   void (* SetXmlIndent)( AstXmlChan *, int, int * );
-
-   int (* GetXmlLength)( AstXmlChan *, int * );
-   int (* TestXmlLength)( AstXmlChan *, int * );
-   void (* ClearXmlLength)( AstXmlChan *, int * );
-   void (* SetXmlLength)( AstXmlChan *, int, int * );
-
-   int (* GetXmlFormat)( AstXmlChan *, int * );
-   int (* TestXmlFormat)( AstXmlChan *, int * );
-   void (* ClearXmlFormat)( AstXmlChan *, int * );
-   void (* SetXmlFormat)( AstXmlChan *, int, int * );
-
-   const char * (* GetXmlPrefix)( AstXmlChan *, int * );
-   int (* TestXmlPrefix)( AstXmlChan *, int * );
-   void (* ClearXmlPrefix)( AstXmlChan *, int * );
-   void (* SetXmlPrefix)( AstXmlChan *, const char *, int * );
-
-} AstXmlChanVtab;
-
-#if defined(THREAD_SAFE) 
-typedef struct AstXmlChanGlobals {
-   AstXmlChanVtab Class_Vtab;
-   int Class_Init;
-   AstXmlChan *IsUsable_This;
-   char GetAttrib_Buff[ 51 ];
-   char *GetNextChar_C;    
-   char *GetNextChar_Buf;  
-} AstXmlChanGlobals;
-
-#endif
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(XmlChan)          /* Check class membership */
-astPROTO_ISA(XmlChan)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstXmlChan *astXmlChan_( const char *(*)( void ), void (*)( const char * ),
-                          const char *, int *, ...);
-#else
-AstXmlChan *astXmlChanId_( const char *(*)( void ), void (*)( const char * ),
-                            const char *, ... )__attribute__((format(printf,3,4)));
-AstXmlChan *astXmlChanForId_( const char *(*)( void ),
-                              char *(*)( const char *(*)( void ), int * ),
-                              void (*)( const char * ),
-                              void (*)( void (*)( const char * ),
-                                        const char *, int * ),
-                              const char *, ... );
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstXmlChan *astInitXmlChan_( void *, size_t, int, AstXmlChanVtab *,
-                             const char *, const char *(*)( void ), 
-                             char *(*)( const char *(*)( void ), int * ), 
-                             void (*)( const char * ), 
-                             void (*)( void (*)( const char * ), 
-                             const char *, int * ), int * );
-
-/* Vtab initialiser. */
-void astInitXmlChanVtab_( AstXmlChanVtab *, const char *, int * );
-
-
-
-/* Loader. */
-AstXmlChan *astLoadXmlChan_( void *, size_t, AstXmlChanVtab *,
-                               const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitXmlChanGlobals_( AstXmlChanGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-int astGetXmlIndent_( AstXmlChan *, int * );
-int astTestXmlIndent_( AstXmlChan *, int * );
-void astClearXmlIndent_( AstXmlChan *, int * );
-void astSetXmlIndent_( AstXmlChan *, int, int * );
-
-int astGetXmlLength_( AstXmlChan *, int * );
-int astTestXmlLength_( AstXmlChan *, int * );
-void astClearXmlLength_( AstXmlChan *, int * );
-void astSetXmlLength_( AstXmlChan *, int, int * );
-
-int astGetXmlFormat_( AstXmlChan *, int * );
-int astTestXmlFormat_( AstXmlChan *, int * );
-void astClearXmlFormat_( AstXmlChan *, int * );
-void astSetXmlFormat_( AstXmlChan *, int, int * );
-
-const char * astGetXmlPrefix_( AstXmlChan *, int * );
-int astTestXmlPrefix_( AstXmlChan *, int * );
-void astClearXmlPrefix_( AstXmlChan *, int * );
-void astSetXmlPrefix_( AstXmlChan *, const char *, int * );
-
-
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckXmlChan(this) astINVOKE_CHECK(XmlChan,this,0)
-#define astVerifyXmlChan(this) astINVOKE_CHECK(XmlChan,this,1)
-
-/* Test class membership. */
-#define astIsAXmlChan(this) astINVOKE_ISA(XmlChan,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astXmlChan astINVOKE(F,astXmlChan_)
-#else
-#define astXmlChan astINVOKE(F,astXmlChanId_)
-#define astXmlChanFor astINVOKE(F,astXmlChanForId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitXmlChan(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap) \
-astINVOKE(O,astInitXmlChan_(mem,size,init,vtab,name,source,source_wrap,sink,sink_wrap,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitXmlChanVtab(vtab,name) astINVOKE(V,astInitXmlChanVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadXmlChan(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadXmlChan_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckXmlChan to validate XmlChan pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-
-#define astClearXmlIndent(this) astINVOKE(V,astClearXmlIndent_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlIndent(this) astINVOKE(V,astGetXmlIndent_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlIndent(this,xmlindent) astINVOKE(V,astSetXmlIndent_(astCheckXmlChan(this),xmlindent,STATUS_PTR))
-#define astTestXmlIndent(this) astINVOKE(V,astTestXmlIndent_(astCheckXmlChan(this),STATUS_PTR))
-
-#define astClearXmlLength(this) astINVOKE(V,astClearXmlLength_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlLength(this) astINVOKE(V,astGetXmlLength_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlLength(this,xmllength) astINVOKE(V,astSetXmlLength_(astCheckXmlChan(this),xmllength,STATUS_PTR))
-#define astTestXmlLength(this) astINVOKE(V,astTestXmlLength_(astCheckXmlChan(this),STATUS_PTR))
-
-#define astClearXmlFormat(this) astINVOKE(V,astClearXmlFormat_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlFormat(this) astINVOKE(V,astGetXmlFormat_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlFormat(this,xmlformat) astINVOKE(V,astSetXmlFormat_(astCheckXmlChan(this),xmlformat,STATUS_PTR))
-#define astTestXmlFormat(this) astINVOKE(V,astTestXmlFormat_(astCheckXmlChan(this),STATUS_PTR))
-
-#define astClearXmlPrefix(this) astINVOKE(V,astClearXmlPrefix_(astCheckXmlChan(this),STATUS_PTR))
-#define astGetXmlPrefix(this) astINVOKE(V,astGetXmlPrefix_(astCheckXmlChan(this),STATUS_PTR))
-#define astSetXmlPrefix(this,xmlpref) astINVOKE(V,astSetXmlPrefix_(astCheckXmlChan(this),xmlpref,STATUS_PTR))
-#define astTestXmlPrefix(this) astINVOKE(V,astTestXmlPrefix_(astCheckXmlChan(this),STATUS_PTR))
-
-#endif
-
-#endif
-
-
-
-
-
diff --git a/ast-5.3-1/zoommap.c b/ast-5.3-1/zoommap.c
deleted file mode 100644
index 891cd18..0000000
--- a/ast-5.3-1/zoommap.c
+++ /dev/null
@@ -1,2059 +0,0 @@
-/*
-*class++
-*  Name:
-*     ZoomMap
-
-*  Purpose:
-*     Zoom coordinates about the origin.
-
-*  Constructor Function:
-c     astZoomMap
-f     AST_ZOOMMAP
-
-*  Description:
-*     The ZoomMap class implements a Mapping which performs a "zoom"
-*     transformation by multiplying all coordinate values by the same
-*     scale factor (the inverse transformation is performed by
-*     dividing by this scale factor). The number of coordinate values
-*     representing each point is unchanged.
-
-*  Inheritance:
-*     The ZoomMap class inherits from the Mapping class.
-
-*  Attributes:
-*     In addition to those attributes common to all Mappings, every
-*     ZoomMap also has the following attributes:
-*
-*     - Zoom: ZoomMap scale factor
-
-*  Functions:
-c     The ZoomMap class does not define any new functions beyond those
-f     The ZoomMap class does not define any new routines beyond those
-*     which are applicable to all Mappings.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-*     DSB: David S. Berry (Starlink)
-
-*  History:
-*     1-FEB-1996 (RFWS):
-*        Original version.
-*     18-JUL-1996 (RFWS):
-*        Updated to support attributes and an external interface.
-*     10-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     4-JUN-1997 (RFWS):
-*        Over-ride the MapMerge method to provide ZoomMap
-*        simplification facilities.
-*     8-JAN-2003 (DSB):
-*        Changed private InitVtab method to protected astInitZoomMapVtab
-*        method.
-*     10-MAY-2006 (DSB):
-*        Override astEqual.
-*class--
-*/
-
-/* Module Macros. */
-/* ============== */
-/* Set the name of the class we are implementing. This indicates to
-   the header files that define class interfaces that they should make
-   "protected" symbols available. */
-#define astCLASS ZoomMap
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-
-#include "globals.h"             /* Thread-safe global data access */
-#include "error.h"               /* Error reporting facilities */
-#include "memory.h"              /* Memory allocation facilities */
-#include "globals.h"             /* Thread-safe global data access */
-#include "object.h"              /* Base Object class */
-#include "pointset.h"            /* Sets of points/coordinates */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-#include "channel.h"             /* I/O channels */
-#include "unitmap.h"             /* Unit Mappings */
-#include "matrixmap.h"           /* Matrix Mappings */
-#include "zoommap.h"             /* Interface definition for this class */
-
-/* Error code definitions. */
-/* ----------------------- */
-#include "ast_err.h"             /* AST error codes */
-
-/* C header files. */
-/* --------------- */
-#include <float.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Module Variables. */
-/* ================= */
-
-/* Address of this static variable is used as a unique identifier for
-   member of this class. */
-static int class_check;
-
-/* Pointers to parent class methods which are extended by this class. */
-static AstPointSet *(* parent_transform)( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *(* parent_getattrib)( AstObject *, const char *, int * );
-static int (* parent_testattrib)( AstObject *, const char *, int * );
-static void (* parent_clearattrib)( AstObject *, const char *, int * );
-static void (* parent_setattrib)( AstObject *, const char *, int * );
-
-/* Define macros for accessing each item of thread specific global data. */
-#ifdef THREAD_SAFE
-
-/* Define how to initialise thread-specific globals. */ 
-#define GLOBAL_inits \
-   globals->Class_Init = 0; \
-   globals->GetAttrib_Buff[ 0 ] = 0;
-
-/* Create the function that initialises global data for this module. */
-astMAKE_INITGLOBALS(ZoomMap)
-
-/* Define macros for accessing each item of thread specific global data. */
-#define class_init astGLOBAL(ZoomMap,Class_Init)
-#define class_vtab astGLOBAL(ZoomMap,Class_Vtab)
-#define getattrib_buff astGLOBAL(ZoomMap,GetAttrib_Buff)
-
-
-
-/* If thread safety is not needed, declare and initialise globals at static 
-   variables. */ 
-#else
-
-static char getattrib_buff[ 101 ];
-
-
-/* Define the class virtual function table and its initialisation flag
-   as static variables. */
-static AstZoomMapVtab class_vtab;   /* Virtual function table */
-static int class_init = 0;       /* Virtual function table initialised? */
-
-#endif
-
-/* External Interface Function Prototypes. */
-/* ======================================= */
-/* The following functions have public prototypes only (i.e. no
-   protected prototypes), so we must provide local prototypes for use
-   within this module. */
-AstZoomMap *astZoomMapId_( int, double, const char *, ... );
-
-/* Prototypes for Private Member Functions. */
-/* ======================================== */
-static AstPointSet *Transform( AstMapping *, AstPointSet *, int, AstPointSet *, int * );
-static const char *GetAttrib( AstObject *, const char *, int * );static double GetZoom( AstZoomMap *, int * );
-static double Rate( AstMapping *, double *, int, int, int * );
-static int *MapSplit( AstMapping *, int, const int *, AstMapping **, int * );
-static int Equal( AstObject *, AstObject *, int * );
-static int GetIsLinear( AstMapping *, int * );
-static int MapMerge( AstMapping *, int, int, int *, AstMapping ***, int **, int * );
-static int TestAttrib( AstObject *, const char *, int * );
-static int TestZoom( AstZoomMap *, int * );
-static void ClearAttrib( AstObject *, const char *, int * );
-static void ClearZoom( AstZoomMap *, int * );
-static void Dump( AstObject *, AstChannel *, int * );
-static void SetAttrib( AstObject *, const char *, int * );
-static void SetZoom( AstZoomMap *, double, int * );
-
-/* Member functions. */
-/* ================= */
-static void ClearAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     ClearAttrib
-
-*  Purpose:
-*     Clear an attribute value for a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     void ClearAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the astClearAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function clears the value of a specified attribute for a
-*     ZoomMap, so that the default value will subsequently be used.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstZoomMap *this;             /* Pointer to the ZoomMap structure */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the ZoomMap structure. */
-   this = (AstZoomMap *) this_object;
-
-/* Check the attribute name and clear the appropriate attribute. */
-
-/* Zoom. */
-/* ----- */
-   if ( !strcmp( attrib, "zoom" ) ) {
-      astClearZoom( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_clearattrib)( this_object, attrib, status );
-   }
-}
-
-static int Equal( AstObject *this_object, AstObject *that_object, int *status ) {
-/*
-*  Name:
-*     Equal
-
-*  Purpose:
-*     Test if two ZoomMaps are equivalent.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     int Equal( AstObject *this, AstObject *that, int *status ) 
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the astEqual protected
-*     method inherited from the astMapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     two ZoomMaps are equivalent.
-
-*  Parameters:
-*     this
-*        Pointer to the first Object (a ZoomMap).
-*     that
-*        Pointer to the second Object.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if the ZoomMaps are equivalent, zero otherwise.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstZoomMap *that;        
-   AstZoomMap *this;        
-   int nin;
-   int nout;
-   int result;
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain pointers to the two ZoomMap structures. */
-   this = (AstZoomMap *) this_object;
-   that = (AstZoomMap *) that_object;
-
-/* Check the second object is a ZoomMap. We know the first is a
-   ZoomMap since we have arrived at this implementation of the virtual
-   function. */
-   if( astIsAZoomMap( that ) ) {
-
-/* Get the number of inputs and outputs and check they are the same for both. */
-      nin = astGetNin( this );
-      nout = astGetNout( this );
-      if( astGetNin( that ) == nin && astGetNout( that ) == nout ) {
-
-/* If the Invert flags for the two ZoomMaps differ, it may still be possible 
-   for them to be equivalent. First compare the ZoomMaps if their Invert 
-   flags are the same. In this case all the attributes of the two ZoomMaps 
-   must be identical. */
-         if( astGetInvert( this ) == astGetInvert( that ) ) {
-            result = ( astEQUAL( this->zoom, that->zoom ) );
-
-/* If the Invert flags for the two ZoomMaps differ, the attributes of the two 
-   ZoomMaps must be inversely related to each other. */
-         } else {
-            result = ( astEQUAL( this->zoom, 1.0/that->zoom ) );
-
-         }
-      }
-   }
-   
-/* If an error occurred, clear the result value. */
-   if ( !astOK ) result = 0;
-
-/* Return the result, */
-   return result;
-}
-
-static const char *GetAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     GetAttrib
-
-*  Purpose:
-*     Get the value of a specified attribute for a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     const char *GetAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the protected astGetAttrib
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a pointer to the value of a specified
-*     attribute for a ZoomMap, formatted as a character string.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap.
-*     attrib
-*        Pointer to a null-terminated string containing the name of
-*        the attribute whose value is required. This name should be in
-*        lower case, with all white space removed.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     - Pointer to a null-terminated string containing the attribute
-*     value.
-
-*  Notes:
-*     - The returned string pointer may point at memory allocated
-*     within the ZoomMap, or at static memory. The contents of the
-*     string may be over-written or the pointer may become invalid
-*     following a further invocation of the same function or any
-*     modification of the ZoomMap. A copy of the string should
-*     therefore be made if necessary.
-*     - A NULL pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS           /* Pointer to thread-specific global data */
-   AstZoomMap *this;             /* Pointer to the ZoomMap structure */
-   const char *result;           /* Pointer value to return */
-   double zoom;                  /* Zoom attribute value */
-
-/* Initialise. */
-   result = NULL;
-
-/* Check the global error status. */   
-   if ( !astOK ) return result;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(this_object);
-
-/* Obtain a pointer to the ZoomMap structure. */
-   this = (AstZoomMap *) this_object;
-
-/* Compare "attrib" with each recognised attribute name in turn,
-   obtaining the value of the required attribute. If necessary, write
-   the value into "getattrib_buff" as a null-terminated string in an appropriate
-   format.  Set "result" to point at the result string. */
-
-/* Zoom. */
-/* ----- */
-   if ( !strcmp( attrib, "zoom" ) ) {
-      zoom = astGetZoom( this );
-      if ( astOK ) {
-         (void) sprintf( getattrib_buff, "%.*g", DBL_DIG, zoom );
-         result = getattrib_buff;
-      }
-
-/* If the attribute name was not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_getattrib)( this_object, attrib, status );
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static int GetIsLinear( AstMapping *this_mapping, int *status ){
-/*
-*  Name:
-*     GetIsLinear
-
-*  Purpose:
-*     Return the value of the IsLinear attribute for a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     void GetIsLinear( AstMapping *this, int *status )
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the protected astGetIsLinear
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns the value of the IsLinear attribute for a
-*     Frame, which is always one.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap.
-*     status
-*        Pointer to the inherited status variable.
-*/
-   return 1;
-}
-
-void astInitZoomMapVtab_(  AstZoomMapVtab *vtab, const char *name, int *status ) {
-/*
-*+
-*  Name:
-*     astInitZoomMapVtab
-
-*  Purpose:
-*     Initialise a virtual function table for a ZoomMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     void astInitZoomMapVtab( AstZoomMapVtab *vtab, const char *name )
-
-*  Class Membership:
-*     ZoomMap vtab initialiser.
-
-*  Description:
-*     This function initialises the component of a virtual function
-*     table which is used by the ZoomMap class.
-
-*  Parameters:
-*     vtab
-*        Pointer to the virtual function table. The components used by
-*        all ancestral classes will be initialised if they have not already
-*        been initialised.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the virtual function table belongs (it 
-*        is this pointer value that will subsequently be returned by the Object
-*        astClass function).
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstObjectVtab *object;        /* Pointer to Object component of Vtab */
-   AstMappingVtab *mapping;      /* Pointer to Mapping component of Vtab */
-
-/* Check the local error status. */
-   if ( !astOK ) return;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Initialize the component of the virtual function table used by the
-   parent class. */
-   astInitMappingVtab( (AstMappingVtab *) vtab, name );
-
-/* Store a unique "magic" value in the virtual function table. This
-   will be used (by astIsAZoomMap) to determine if an object belongs
-   to this class.  We can conveniently use the address of the (static)
-   class_check variable to generate this unique value. */
-   vtab->id.check = &class_check;
-   vtab->id.parent = &(((AstMappingVtab *) vtab)->id);
-
-/* Initialise member function pointers. */
-/* ------------------------------------ */
-/* Store pointers to the member functions (implemented here) that provide
-   virtual methods for this class. */
-   vtab->ClearZoom = ClearZoom;
-   vtab->GetZoom = GetZoom;
-   vtab->SetZoom = SetZoom;
-   vtab->TestZoom = TestZoom;
-
-/* Save the inherited pointers to methods that will be extended, and
-   replace them with pointers to the new member functions. */
-   object = (AstObjectVtab *) vtab;
-   mapping = (AstMappingVtab *) vtab;
-
-   parent_clearattrib = object->ClearAttrib;
-   object->ClearAttrib = ClearAttrib;
-   parent_getattrib = object->GetAttrib;
-   object->GetAttrib = GetAttrib;
-   parent_setattrib = object->SetAttrib;
-   object->SetAttrib = SetAttrib;
-   parent_testattrib = object->TestAttrib;
-   object->TestAttrib = TestAttrib;
-
-   parent_transform = mapping->Transform;
-   mapping->Transform = Transform;
-
-/* Store replacement pointers for methods which will be over-ridden by
-   new member functions implemented here. */
-   object->Equal = Equal;
-   mapping->MapMerge = MapMerge;
-   mapping->MapSplit = MapSplit;
-   mapping->Rate = Rate;
-   mapping->GetIsLinear = GetIsLinear;
-
-/* Declare the class dump function. There is no copy constructor or
-   destructor. */
-   astSetDump( vtab, Dump, "ZoomMap", "Zoom about the origin" );
-
-/* If we have just initialised the vtab for the current class, indicate
-   that the vtab is now initialised, and store a pointer to the class
-   identifier in the base "object" level of the vtab. */
-   if( vtab == &class_vtab ) {
-      class_init = 1;
-      astSetVtabClassIdentifier( vtab, &(vtab->id) );
-   }
-}
-
-static int MapMerge( AstMapping *this, int where, int series, int *nmap,
-                     AstMapping ***map_list, int **invert_list, int *status ) {
-/*
-*  Name:
-*     MapMerge
-
-*  Purpose:
-*     Simplify a sequence of Mappings containing a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "mapping.h"
-*     int MapMerge( AstMapping *this, int where, int series, int *nmap,
-*                   AstMapping ***map_list, int **invert_list, int *status )
-
-*  Class Membership:
-*     ZoomMap method (over-rides the protected astMapMerge method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function attempts to simplify a sequence of Mappings by
-*     merging a nominated ZoomMap in the sequence with its neighbours,
-*     so as to shorten the sequence if possible.
-*
-*     In many cases, simplification will not be possible and the
-*     function will return -1 to indicate this, without further
-*     action.
-*
-*     In most cases of interest, however, this function will either
-*     attempt to replace the nominated ZoomMap with one which it
-*     considers simpler, or to merge it with the Mappings which
-*     immediately precede it or follow it in the sequence (both will
-*     normally be considered). This is sufficient to ensure the
-*     eventual simplification of most Mapping sequences by repeated
-*     application of this function.
-*
-*     In some cases, the function may attempt more elaborate
-*     simplification, involving any number of other Mappings in the
-*     sequence. It is not restricted in the type or scope of
-*     simplification it may perform, but will normally only attempt
-*     elaborate simplification in cases where a more straightforward
-*     approach is not adequate.
-
-*  Parameters:
-*     this
-*        Pointer to the nominated ZoomMap which is to be merged with
-*        its neighbours. This should be a cloned copy of the ZoomMap
-*        pointer contained in the array element "(*map_list)[where]"
-*        (see below). This pointer will not be annulled, and the
-*        ZoomMap it identifies will not be modified by this function.
-*     where
-*        Index in the "*map_list" array (below) at which the pointer
-*        to the nominated ZoomMap resides.
-*     series
-*        A non-zero value indicates that the sequence of Mappings to
-*        be simplified will be applied in series (i.e. one after the
-*        other), whereas a zero value indicates that they will be
-*        applied in parallel (i.e. on successive sub-sets of the
-*        input/output coordinates).
-*     nmap
-*        Address of an int which counts the number of Mappings in the
-*        sequence. On entry this should be set to the initial number
-*        of Mappings. On exit it will be updated to record the number
-*        of Mappings remaining after simplification.
-*     map_list
-*        Address of a pointer to a dynamically allocated array of
-*        Mapping pointers (produced, for example, by the astMapList
-*        method) which identifies the sequence of Mappings. On entry,
-*        the initial sequence of Mappings to be simplified should be
-*        supplied.
-*
-*        On exit, the contents of this array will be modified to
-*        reflect any simplification carried out. Any form of
-*        simplification may be performed. This may involve any of: (a)
-*        removing Mappings by annulling any of the pointers supplied,
-*        (b) replacing them with pointers to new Mappings, (c)
-*        inserting additional Mappings and (d) changing their order.
-*
-*        The intention is to reduce the number of Mappings in the
-*        sequence, if possible, and any reduction will be reflected in
-*        the value of "*nmap" returned. However, simplifications which
-*        do not reduce the length of the sequence (but improve its
-*        execution time, for example) may also be performed, and the
-*        sequence might conceivably increase in length (but normally
-*        only in order to split up a Mapping into pieces that can be
-*        more easily merged with their neighbours on subsequent
-*        invocations of this function).
-*
-*        If Mappings are removed from the sequence, any gaps that
-*        remain will be closed up, by moving subsequent Mapping
-*        pointers along in the array, so that vacated elements occur
-*        at the end. If the sequence increases in length, the array
-*        will be extended (and its pointer updated) if necessary to
-*        accommodate any new elements.
-*
-*        Note that any (or all) of the Mapping pointers supplied in
-*        this array may be annulled by this function, but the Mappings
-*        to which they refer are not modified in any way (although
-*        they may, of course, be deleted if the annulled pointer is
-*        the final one).
-*     invert_list
-*        Address of a pointer to a dynamically allocated array which,
-*        on entry, should contain values to be assigned to the Invert
-*        attributes of the Mappings identified in the "*map_list"
-*        array before they are applied (this array might have been
-*        produced, for example, by the astMapList method). These
-*        values will be used by this function instead of the actual
-*        Invert attributes of the Mappings supplied, which are
-*        ignored.
-*
-*        On exit, the contents of this array will be updated to
-*        correspond with the possibly modified contents of the
-*        "*map_list" array.  If the Mapping sequence increases in
-*        length, the "*invert_list" array will be extended (and its
-*        pointer updated) if necessary to accommodate any new
-*        elements.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     If simplification was possible, the function returns the index
-*     in the "map_list" array of the first element which was
-*     modified. Otherwise, it returns -1 (and makes no changes to the
-*     arrays supplied).
-
-*  Notes:
-*     - A value of -1 will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*/
-
-/* Local Variables: */
-   AstMapping *map;              /* Pointer to Mapping */
-   AstMapping *new;              /* Pointer to replacement Mapping */
-   const char *class;            /* Pointer to Mapping class string */
-   double *zooms;                /* Pointer to zoom factor array */
-   double maxzoom;               /* Maximum zoom factor */
-   double minzoom;               /* Minimum zoom factor */
-   double zoom;                  /* Zoom factor */
-   int coord;                    /* Loop counter for coordinates */
-   int imap1;                    /* Index of first ZoomMap */
-   int imap2;                    /* Index of last ZoomMap */
-   int imap;                     /* Loop counter for Mappings */
-   int ncoord;                   /* Number of input/output coordinates */
-   int ngone;                    /* Number of Mappings eliminated */
-   int nin;                      /* Total number of input coordinates */
-   int nzoom;                    /* Number of zoom factors */
-   int result;                   /* Result value to return */
-   int simpler;                  /* Mapping(s) simplified? */
-   int single;                   /* Replacement is a single ZoomMap? */
-   int unit;                     /* Replacement Mapping is a UnitMap? */
-
-/* Initialise the returned result. */
-   result = -1;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Further initialisation. */
-   new = NULL;
-   ngone = 0;
-   simpler = 0;
-
-/* In series. */
-/* ---------- */
-/* Handle the case where the Mappings are connected in series. */
-   if ( series ) {
-
-/* Obtain the effective zoom factor of the nominated Mapping (which is
-   a ZoomMap) when its Invert attribute is set to the value given. */
-      zoom = astGetZoom( ( *map_list )[ where ] );
-      if ( ( *invert_list )[ where ] ) zoom = 1.0 / zoom;
-
-/* Search adjacent lower-numbered Mappings and identify the class to
-   which they belong. */
-      imap1 = where;
-      while ( astOK && ( ( imap1 - 1 ) >= 0 ) ) {
-         map = ( *map_list )[ imap1 - 1 ];
-         class = astGetClass( map );
-         if ( astOK ) {
-
-/* For each ZoomMap found, obtain the effective zoom factor (taking
-   account of the associated invert flag value), and accumulate the
-   overall zoom factor to be used for the simplified Mapping. */
-            if ( !strcmp( class, "ZoomMap" ) ) {
-               if ( ( *invert_list )[ imap1 - 1 ] ) {
-                  zoom /= astGetZoom( map );
-               } else {
-                  zoom *= astGetZoom( map );
-               }
-
-/* UnitMaps have an effective zoom factor of unity, so we include them
-   but they so have no effect. Quit looping when the first Mapping is
-   found which is not a ZoomMap or a UnitMap. */
-            } else if ( strcmp( class, "UnitMap" ) ) {
-               break;
-            }
-            imap1--;
-         }
-      }
-
-/* Similarly search adjacent higher-numbered ZoomMaps and UnitMaps and
-   accumulate their effective zoom factors. */
-      imap2 = where;
-      while ( astOK && ( ( imap2 + 1 ) < *nmap ) ) {
-         map = ( *map_list )[ imap2 + 1 ];
-         class = astGetClass( map );
-         if ( astOK ) {
-            if ( !strcmp( class, "ZoomMap" ) ) {
-               if ( ( *invert_list )[ imap2 + 1 ] ) {
-                  zoom /= astGetZoom( map );
-               } else {
-                  zoom *= astGetZoom( map );
-               }
-            } else if ( strcmp( class, "UnitMap" ) ) {
-               break;
-            }
-            imap2++;
-         }
-      }
-
-/* Determine how many Mappings can be eliminated by condensing those
-   found above into a single Mapping. */
-      ngone = imap2 - imap1;
-
-/* Determine if the replacement Mapping can be a UnitMap. This will be
-   the case only if the accumulated zoom factor is unity (within some
-   tolerable error). */
-      unit = ( fabs( zoom - 1.0 ) <= ( 8.0 * DBL_EPSILON ) );
-
-/* Determine if simplification is possible. This will be so if (a)
-   Mappings can be eliminated ("ngone" is non-zero), or (b) the
-   replacement can be a UnitMap, or (c) where there was initially only
-   one ZoomMap, its invert flag was set (it will always be cleared in
-   the replacement Mapping). */
-      simpler = ngone || unit || ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
-      if ( simpler ) {
-
-/* Obtain the number of input/output coordinates for the replacement
-   Mapping and create the appropriate replacement. */
-         nin = astGetNin( ( *map_list )[ where ] );
-         if ( unit ) {
-            new = (AstMapping *) astUnitMap( nin, "", status );
-         } else {
-            new = (AstMapping *) astZoomMap( nin, zoom, "", status );
-         }
-      }
-
-/* In parallel. */
-/* ------------ */
-/* Handle the case where the Mappings are connected in parallel. */
-   } else {
-
-/* Obtain the number of input/output coordinates for the nominated Mapping. */
-      nin = astGetNin( ( *map_list )[ where ] );
-
-/* Search adjacent lower-numbered Mappings and identify the class to
-   which they belong. */
-      imap1 = where;
-      while ( astOK && ( ( imap1 - 1 ) >= 0 ) ) {
-         map = ( *map_list )[ imap1 - 1 ];
-         class = astGetClass( map );
-         if ( astOK ) {
-
-/* Quit looping when the first Mapping is found which is not a ZoomMap
-   or a UnitMap. */
-            if ( strcmp( class, "ZoomMap" ) &&
-                 strcmp( class, "UnitMap" ) ) break;
-
-/* Accumulate the total number of input/output coordinates for each
-   adjacent ZoomMap and UnitMap found. */
-            nin += astGetNin( map );
-            imap1--;
-         }
-      }
-
-/* Similarly search adjacent higher-numbered Mappings and accumulate
-   the number of input/output coordinates.*/
-      imap2 = where;
-      while ( astOK && ( ( imap2 + 1 ) < *nmap ) ) {
-         map = ( *map_list )[ imap2 + 1 ];
-         class = astGetClass( map );
-         if ( astOK ) {
-            if ( strcmp( class, "ZoomMap" ) &&
-                 strcmp( class, "UnitMap" ) ) break;
-            nin += astGetNin( map );
-            imap2++;
-         }
-      }
-
-/* Allocate memory for an array of zoom factors, one for each
-   input/output coordinate in the replacement Mapping. */
-      zooms = astMalloc( sizeof( double ) * (size_t) nin );
-      if ( astOK ) {
-
-/* Initialise. */
-         nzoom = 0;
-         minzoom = DBL_MAX;
-         maxzoom = -DBL_MAX;
-
-/* Loop through all the ZoomMaps and UnitMaps being merged and again
-   identify the class to which they belong. */
-         for ( imap = imap1; astOK && ( imap <= imap2 ); imap++ ) {
-            map = ( *map_list )[ imap ];
-            class = astGetClass( map );
-            if ( astOK ) {
-
-/* Set a default zoom factor of unity (for UnitMaps). If the Mapping
-   is a ZoomMap, replace this with the effective zoom factor, taking
-   account of the associated invert flag. */
-               zoom = 1.0;
-               if ( !strcmp( class, "ZoomMap" ) ) {
-                  if ( ( *invert_list )[ imap ] ) {
-                     zoom = 1.0 / astGetZoom( map );
-                  } else {
-                     zoom = astGetZoom( map );
-                  }
-               }
-
-/* Replicate the zoom factor in the zoom factor array, once for each
-   input/output coordinate associated with the current Mapping. */
-               ncoord = astGetNin( map );
-               for ( coord = 0; coord < ncoord; coord++ ) {
-                  zooms[ nzoom++ ] = zoom;
-               }
-
-/* Store the minimum and maximum zoom factors encountered. */
-               if ( zoom < minzoom ) minzoom = zoom;
-               if ( zoom > maxzoom ) maxzoom = zoom;
-            }
-         }
-
-/* Determine how many Mappings can be eliminated by condensing those
-   found above into a single Mapping. */
-         ngone = imap2 - imap1;
-
-/* Determine whether the replacement Mapping can be a single
-   ZoomMap. This will be so if all the effective zoom factors were the
-   same. */
-         single = ( minzoom == maxzoom );
-
-/* Determine if the replacement Mapping can be a UnitMap. This will be
-   so if all the effective zoom factors were equal to unity. */
-         unit = single && ( minzoom == 1.0 );
-
-/* Determine if simplification is possible. This will be so if (a)
-   Mappings can be eliminated ("ngone" is non-zero), or (b) the
-   replacement can be a UnitMap, or (c) where there was initially only
-   one ZoomMap, its invert flag was set (it will always be cleared in
-   the replacement Mapping). */
-         simpler = ngone || unit || ( *invert_list )[ where ];
-
-/* Do nothing more unless simplification is possible. */
-         if ( simpler ) {
-
-/* Create a replacement UnitMap or ZoomMap if appropriate. */
-            if ( unit ) {
-               new = (AstMapping *) astUnitMap( nin, "", status );
-            } else if ( single ) {
-               new = (AstMapping *) astZoomMap( nin, minzoom, "", status );
-
-/* Otherwise, replace the original ZoomMaps and UnitMaps with a
-   diagonal MatrixMap containing the zoom factors as its diagonal
-   elements. */
-            } else {
-               new = (AstMapping *) astMatrixMap( nin, nin, 1, zooms, "", status );
-            }
-         }
-      }
-
-/* Free the array of zoom factors. */
-      zooms = astFree( zooms );
-   }
-
-/* If OK, and simplification is possible, we now have a replacement
-   Mapping and can insert it into the Mapping list. */
-   if ( astOK ) {
-      if ( simpler ) {
-
-/* Annul the pointers to all the ZoomMaps that are being replaced. */
-         for ( imap = imap1; imap <= imap2; imap++ ) {
-            ( *map_list )[ imap ] = astAnnul( ( *map_list )[ imap ] );
-         }
-
-/* Insert the new pointer and the associated invert flag. */
-         ( *map_list )[ imap1 ] = new;
-         ( *invert_list )[ imap1 ] = 0;
-
-/* Loop to close the resulting gap by moving subsequent elements down
-   in the arrays. */
-         for ( imap = imap2 + 1; imap < *nmap; imap++ ) {
-            ( *map_list )[ imap - ngone ] = ( *map_list )[ imap ];
-            ( *invert_list )[ imap - ngone ] = ( *invert_list )[ imap ];
-         }
-
-/* Clear the vacated elements at the end. */
-         for ( imap = *nmap - ngone; imap < *nmap; imap++ ) {
-            ( *map_list )[ imap ] = NULL;
-            ( *invert_list )[ imap ] = 0;
-         }
-
-/* Decrement the Mapping count and return the index of the first
-   modified element. */
-         ( *nmap ) -= ngone;
-         result = imap1;
-      }
-
-/* If an error occurred, but a new Mapping has been created, then
-   annul it. */
-   } else {
-      if ( new ) new = astAnnul( new );
-   }
-
-/* If an error occurred, clear the returned result. */
-   if ( !astOK ) result = -1;
-
-/* Return the result. */
-   return result;
-}
-
-static int *MapSplit( AstMapping *this_map, int nin, const int *in, AstMapping **map, int *status ){
-/*
-*  Name:
-*     MapSplit
-
-*  Purpose:
-*     Create a Mapping representing a subset of the inputs of an existing
-*     ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     int *MapSplit( AstMapping *this, int nin, const int *in, AstMapping **map, int *status )
-
-*  Class Membership:
-*     ZoomMap method (over-rides the protected astMapSplit method
-*     inherited from the Mapping class).
-
-*  Description:
-*     This function creates a new Mapping by picking specified inputs from 
-*     an existing ZoomMap. This is only possible if the specified inputs
-*     correspond to some subset of the ZoomMap outputs. That is, there
-*     must exist a subset of the ZoomMap outputs for which each output
-*     depends only on the selected ZoomMap inputs, and not on any of the
-*     inputs which have not been selected. If this condition is not met
-*     by the supplied ZoomMap, then a NULL Mapping is returned.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap to be split (the ZoomMap is not actually 
-*        modified by this function).
-*     nin
-*        The number of inputs to pick from "this".
-*     in
-*        Pointer to an array of indices (zero based) for the inputs which
-*        are to be picked. This array should have "nin" elements. If "Nin"
-*        is the number of inputs of the supplied ZoomMap, then each element 
-*        should have a value in the range zero to Nin-1.
-*     map
-*        Address of a location at which to return a pointer to the new
-*        Mapping. This Mapping will have "nin" inputs (the number of
-*        outputs may be different to "nin"). A NULL pointer will be
-*        returned if the supplied ZoomMap has no subset of outputs which 
-*        depend only on the selected inputs.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     A pointer to a dynamically allocated array of ints. The number of
-*     elements in this array will equal the number of outputs for the 
-*     returned Mapping. Each element will hold the index of the
-*     corresponding output in the supplied ZoomMap. The array should be
-*     freed using astFree when no longer needed. A NULL pointer will
-*     be returned if no output Mapping can be created.
-
-*  Notes:
-*     - If this function is invoked with the global error status set,
-*     or if it should fail for any reason, then NULL values will be
-*     returned as the function value and for the "map" pointer.
-*/
-
-/* Local Variables: */
-   AstZoomMap *this;          /* Pointer to ZoomMap structure */
-   int *result;               /* Pointer to returned array */
-   int i;                     /* Loop count */
-   int iin;                   /* Mapping input index */
-   int mnin;                  /* No. of Mapping inputs */
-   int ok;                    /* Are input indices OK? */
-
-/* Initialise */
-   result = NULL;
-   *map = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Get a pointer to the ZoomMap structure. */
-   this = (AstZoomMap *) this_map;
-
-/* Allocate memory for the returned array and create a ZoomMap with the
-   required number of axes. */
-   result = astMalloc( sizeof( int )*(size_t) nin );
-   *map = (AstMapping *) astZoomMap( nin, astGetZoom( this ), "", status );
-
-/* Set its Invert attribute to be like the supplied ZoomMap. */
-   astSetInvert( *map, astGetInvert( this ) );
-
-/* Check pointers can be used safely. */
-   if( astOK ) {
-
-/* Store the required output axis indices. At the same time check that each 
-   axis is valid. */
-      mnin = astGetNin( this );
-      ok = 1;
-      for( i = 0; i < nin; i++ ) {
-         iin = in[ i ];
-         if( iin >= 0 && iin < mnin ) {
-            result[ i ] = iin;
-         } else {
-            ok = 0;
-            break;
-         }
-      }
-
-/* If the "in" array contained any invalid values, free the returned
-   resources. */
-      if( !ok ) { 
-         result = astFree( result );
-         *map = astAnnul( *map );
-      }
-   }
-
-/* Free returned resources if an error has occurred. */
-   if( !astOK ) {
-      result = astFree( result );
-      *map = astAnnul( *map );
-   }
-
-/* Return the list of output indices. */
-   return result;
-}
-
-static double Rate( AstMapping *this, double *at, int ax1, int ax2, int *status ){
-/*
-*  Name:
-*     Rate
-
-*  Purpose:
-*     Calculate the rate of change of a Mapping output.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     result = Rate( AstMapping *this, double *at, int ax1, int ax2, int *status )
-
-*  Class Membership:
-*     ZoomMap member function (overrides the astRate method inherited
-*     from the Mapping class ).
-
-*  Description:
-*     This function returns the rate of change of a specified output of 
-*     the supplied Mapping with respect to a specified input, at a 
-*     specified input position. 
-
-*  Parameters:
-*     this
-*        Pointer to the Mapping to be applied.
-*     at
-*        The address of an array holding the axis values at the position 
-*        at which the rate of change is to be evaluated. The number of 
-*        elements in this array should equal the number of inputs to the 
-*        Mapping.
-*     ax1
-*        The index of the Mapping output for which the rate of change is to 
-*        be found (output numbering starts at 0 for the first output).
-*     ax2
-*        The index of the Mapping input which is to be varied in order to
-*        find the rate of change (input numbering starts at 0 for the first 
-*        input).
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     The rate of change of Mapping output "ax1" with respect to input 
-*     "ax2", evaluated at "at", or AST__BAD if the value cannot be 
-*     calculated.
-
-*/
-
-/* Local Variables: */
-   double result;
-
-/* Check inherited status */
-   if( !astOK ) return AST__BAD;
-
-/* Result is zero if the axes differ */
-   if( ax1 != ax2 ) {
-      result = 0.0;
-
-/* Otherwise, get the zoom factor. */
-   } else {
-      result = astGetZoom( (AstZoomMap *) this );
-
-/* If the ZoomMap has been inverted, return the reciprocal of the zoom
-   factor. */
-      if ( astGetInvert( this ) ) {
-         if( result != AST__BAD && result != 0.0 ) {
-            result = 1.0/result;
-         } else {
-            result = AST__BAD;
-         }
-      }
-   }
-
-/* Return the result. */
-   return result;
-}
-
-static void SetAttrib( AstObject *this_object, const char *setting, int *status ) {
-/*
-*  Name:
-*     SetAttrib
-
-*  Purpose:
-*     Set an attribute value for a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     void SetAttrib( AstObject *this, const char *setting )
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the astSetAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function assigns an attribute value for a ZoomMap, the
-*     attribute and its value being specified by means of a string of
-*     the form:
-*
-*        "attribute= value "
-*
-*     Here, "attribute" specifies the attribute name and should be in
-*     lower case with no white space present. The value to the right
-*     of the "=" should be a suitable textual representation of the
-*     value to be assigned and this will be interpreted according to
-*     the attribute's data type.  White space surrounding the value is
-*     only significant for string attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap.
-*     setting
-*        Pointer to a null-terminated string specifying the new attribute
-*        value.
-*/
-
-/* Local Variables: */
-   AstZoomMap *this;             /* Pointer to the ZoomMap structure */
-   double zoom;                  /* Zoom attribute value */
-   int len;                      /* Length of setting string */
-   int nc;                       /* Number of characters read by astSscanf */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the ZoomMap structure. */
-   this = (AstZoomMap *) this_object;
-
-/* Obtain the length of the setting string. */
-   len = (int) strlen( setting );
-
-/* Test for each recognised attribute in turn, using "astSscanf" to parse
-   the setting string and extract the attribute value (or an offset to
-   it in the case of string values). In each case, use the value set
-   in "nc" to check that the entire string was matched. Once a value
-   has been obtained, use the appropriate method to set it. */
-
-/* Zoom. */
-/* ----- */
-   if ( nc = 0,
-        ( 1 == astSscanf( setting, "zoom= %lf %n", &zoom, &nc ) )
-        && ( nc >= len ) ) {
-      astSetZoom( this, zoom );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      (*parent_setattrib)( this_object, setting, status );
-   }
-}
-
-static int TestAttrib( AstObject *this_object, const char *attrib, int *status ) {
-/*
-*  Name:
-*     TestAttrib
-
-*  Purpose:
-*     Test if a specified attribute value is set for a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     int TestAttrib( AstObject *this, const char *attrib, int *status )
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the astTestAttrib protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function returns a boolean result (0 or 1) to indicate whether
-*     a value has been set for one of a ZoomMap's attributes.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap.
-*     attrib
-*        Pointer to a null-terminated string specifying the attribute
-*        name.  This should be in lower case with no surrounding white
-*        space.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     One if a value has been set, otherwise zero.
-
-*  Notes:
-*     - A value of zero will be returned if this function is invoked
-*     with the global status set, or if it should fail for any reason.
-*/
-
-/* Local Variables: */
-   AstZoomMap *this;             /* Pointer to the ZoomMap structure */
-   int result;                   /* Result value to return */
-
-/* Initialise. */
-   result = 0;
-
-/* Check the global error status. */
-   if ( !astOK ) return result;
-
-/* Obtain a pointer to the ZoomMap structure. */
-   this = (AstZoomMap *) this_object;
-
-/* Check the attribute name and test the appropriate attribute. */
-
-/* Zoom. */
-/* ----- */
-   if ( !strcmp( attrib, "zoom" ) ) {
-      result = astTestZoom( this );
-
-/* If the attribute is still not recognised, pass it on to the parent
-   method for further interpretation. */
-   } else {
-      result = (*parent_testattrib)( this_object, attrib, status );
-   }
-
-/* Return the result, */
-   return result;
-}
-
-static AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-                               int forward, AstPointSet *out, int *status ) {
-/*
-*  Name:
-*     Transform
-
-*  Purpose:
-*     Apply a ZoomMap to transform a set of points.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     AstPointSet *Transform( AstMapping *this, AstPointSet *in,
-*                             int forward, AstPointSet *out, int *status )
-
-*  Class Membership:
-*     ZoomMap member function (over-rides the astTransform protected
-*     method inherited from the Mapping class).
-
-*  Description:
-*     This function takes a ZoomMap and a set of points encapsulated in a
-*     PointSet and transforms the points so as to apply the required zoom
-*     factor.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap.
-*     in
-*        Pointer to the PointSet holding the input coordinate data.
-*     forward
-*        A non-zero value indicates that the forward coordinate transformation
-*        should be applied, while a zero value requests the inverse
-*        transformation.
-*     out
-*        Pointer to a PointSet which will hold the transformed (output)
-*        coordinate values. A NULL value may also be given, in which case a
-*        new PointSet will be created by this function.
-*     status
-*        Pointer to the inherited status variable.
-
-*  Returned Value:
-*     Pointer to the output (possibly new) PointSet.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*     -  The number of coordinate values per point in the input PointSet must
-*     match the number of coordinates for the ZoomMap being applied.
-*     -  If an output PointSet is supplied, it must have space for sufficient
-*     number of points and coordinate values per point to accommodate the
-*     result. Any excess space will be ignored.
-*/
-
-/* Local Variables: */
-   AstPointSet *result;          /* Pointer to output PointSet */
-   AstZoomMap *map;              /* Pointer to ZoomMap to be applied */
-   double **ptr_in;              /* Pointer to input coordinate data */
-   double **ptr_out;             /* Pointer to output coordinate data */
-   double scale;                 /* Scale factor to implement zoom */
-   int coord;                    /* Loop counter for coordinates */
-   int ncoord_in;                /* Number of coordinates per input point */
-   int npoint;                   /* Number of points */
-   int point;                    /* Loop counter for points */
-
-/* Check the global error status. */
-   if ( !astOK ) return NULL;
-
-/* Obtain a pointer to the ZoomMap. */
-   map = (AstZoomMap *) this;
-
-/* Apply the parent mapping using the stored pointer to the Transform member
-   function inherited from the parent Mapping class. This function validates
-   all arguments and generates an output PointSet if necessary, but does not
-   actually transform any coordinate values. */
-   result = (*parent_transform)( this, in, forward, out, status );
-
-/* We will now extend the parent astTransform method by performing the
-   calculations needed to generate the output coordinate values. */
-
-/* Determine the numbers of points and coordinates per point from the input
-   PointSet and obtain pointers for accessing the input and output coordinate
-   values. */
-   ncoord_in = astGetNcoord( in );
-   npoint = astGetNpoint( in );
-   ptr_in = astGetPoints( in );      
-   ptr_out = astGetPoints( result );
-
-/* Determine whether to apply the forward or inverse mapping, according to the
-   direction specified and whether the mapping has been inverted. */
-   if ( astGetInvert( map ) ) forward = !forward;
-
-/* Perform coordinate arithmetic. */
-/* ------------------------------ */
-/* Generate the coordinate scale factor, according to the direction
-   of mapping required. */
-   scale = astGetZoom( map );
-   if ( !forward && astOK ) scale = 1.0 / scale;
-
-/* Loop to apply the scale factor to all the coordinate values, checking for
-   (and propagating) bad values in the process. */
-   if ( astOK ) {
-      for ( coord = 0; coord < ncoord_in; coord++ ) {
-         for ( point = 0; point < npoint; point++ ) {
-            if ( ptr_in[ coord ][ point ] == AST__BAD ) {
-               ptr_out[ coord ][ point ] = AST__BAD;
-            } else {
-               ptr_out[ coord ][ point ] = ptr_in[ coord ][ point ] * scale;
-            }
-         }
-      }
-   }
-
-/* Return a pointer to the output PointSet. */
-   return result;
-}
-
-/* Functions which access class attributes. */
-/* ---------------------------------------- */
-/* Implement member functions to access the attributes associated with
-   this class using the macros defined for this purpose in the
-   "object.h" file. For a description of each attribute, see the class
-   interface (in the associated .h file). */
-
-/*
-*att++
-*  Name:
-*     Zoom
-
-*  Purpose:
-*     ZoomMap scale factor.
-
-*  Type:
-*     Public attribute.
-
-*  Synopsis:
-*     Double precision.
-
-*  Description:
-*     This attribute holds the ZoomMap scale factor, by which
-*     coordinate values are multiplied (by the forward transformation)
-*     or divided (by the inverse transformation). This factor is set
-*     when a ZoomMap is created, but may later be modified. The
-*     default value is unity.
-*
-c     Note that if a ZoomMap is inverted (e.g. by using astInvert),
-f     Note that if a ZoomMap is inverted (e.g. by using AST_INVERT),
-*     then the reciprocal of this zoom factor will, in effect, be
-*     used.
-
-*  Applicability:
-*     ZoomMap
-*        All ZoomMaps have this attribute.
-
-*  Notes:
-*     - The Zoom attribute may not be set to zero.
-*att--
-*/
-/* This ia a double value with a value of 0.0 when undefined but
-   yielding a default of 1.0. Setting it explicitly to 0.0 is not
-   permitted except via astClearZoom. */
-astMAKE_CLEAR(ZoomMap,Zoom,zoom,0.0)
-astMAKE_GET(ZoomMap,Zoom,double,1.0,( ( this->zoom == 0.0 ) ?
-                                      1.0 : this->zoom ))
-
-/* Check for an attempt to set a value of zero and report an error if
-   necessary (leaving the Zoom value unchanged). */
-astMAKE_SET(ZoomMap,Zoom,double,zoom,(
-            ( value != 0.0 ) ?
-            value :
-            ( astError( AST__ZOOMI,
-                       "astSetZoom(%s): A zoom factor of zero is not allowed.", status,
-                        astGetClass( this ) ),
-              this->zoom ) ))
-astMAKE_TEST(ZoomMap,Zoom,( this->zoom != 0.0 ))
-
-/* Copy constructor. */
-/* ----------------- */
-/* No copy constructor is needed, as a byte-by-byte copy suffices. */
-
-/* Destructor. */
-/* ----------- */
-/* No destructor is needed as no memory, etc. needs freeing. */
-
-/* Dump function. */
-/* -------------- */
-static void Dump( AstObject *this_object, AstChannel *channel, int *status ) {
-/*
-*  Name:
-*     Dump
-
-*  Purpose:
-*     Dump function for ZoomMap objects.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     void Dump( AstObject *this, AstChannel *channel, int *status )
-
-*  Description:
-*     This function implements the Dump function which writes out data
-*     for the ZoomMap class to an output Channel.
-
-*  Parameters:
-*     this
-*        Pointer to the ZoomMap whose data are being written.
-*     channel
-*        Pointer to the Channel to which the data are being written.
-*     status
-*        Pointer to the inherited status variable.
-*/
-
-/* Local Variables: */
-   AstZoomMap *this;             /* Pointer to the ZoomMap structure */
-   double dval;                  /* Double value */
-   int set;                      /* Attribute value set? */
-
-/* Check the global error status. */
-   if ( !astOK ) return;
-
-/* Obtain a pointer to the ZoomMap structure. */
-   this = (AstZoomMap *) this_object;
-
-/* Write out values representing the instance variables for the
-   ZoomMap class.  Accompany these with appropriate comment strings,
-   possibly depending on the values being written.*/
-
-/* In the case of attributes, we first use the appropriate (private)
-   Test...  member function to see if they are set. If so, we then use
-   the (private) Get... function to obtain the value to be written
-   out.
-
-   For attributes which are not set, we use the astGet... method to
-   obtain the value instead. This will supply a default value
-   (possibly provided by a derived class which over-rides this method)
-   which is more useful to a human reader as it corresponds to the
-   actual default attribute value.  Since "set" will be zero, these
-   values are for information only and will not be read back. */
-
-/* Zoom. */
-/* ----- */
-   set = TestZoom( this, status );
-   dval = set ? GetZoom( this, status ) : astGetZoom( this );
-   astWriteDouble( channel, "Zoom", set, 1, dval, "Zoom factor" );
-}
-
-/* Standard class functions. */
-/* ========================= */
-/* Implement the astIsAZoomMap and astCheckZoomMap functions using the macros
-   defined for this purpose in the "object.h" header file. */
-astMAKE_ISA(ZoomMap,Mapping)
-astMAKE_CHECK(ZoomMap)
-
-AstZoomMap *astZoomMap_( int ncoord, double zoom, const char *options, int *status, ...) {
-/*
-*++
-*  Name:
-c     astZoomMap
-f     AST_ZOOMMAP
-
-*  Purpose:
-*     Create a ZoomMap.
-
-*  Type:
-*     Public function.
-
-*  Synopsis:
-c     #include "zoommap.h"
-c     AstZoomMap *astZoomMap( int ncoord, double zoom,
-c                             const char *options, ... )
-f     RESULT = AST_ZOOMMAP( NCOORD, ZOOM, OPTIONS, STATUS )
-
-*  Class Membership:
-*     ZoomMap constructor.
-
-*  Description:
-*     This function creates a new ZoomMap and optionally initialises its
-*     attributes.
-*
-*     A ZoomMap is a Mapping which "zooms" a set of points about the
-*     origin by multiplying all coordinate values by the same scale
-*     factor (the inverse transformation is performed by dividing by
-*     this scale factor).
-
-*  Parameters:
-c     ncoord
-f     NCOORD = INTEGER (Given)
-*        The number of coordinate values for each point to be
-*        transformed (i.e. the number of dimensions of the space in
-*        which the points will reside). The same number is applicable
-*        to both input and output points.
-c     zoom
-f     ZOOM = DOUBLE PRECISION (Given)
-*        Initial scale factor by which coordinate values should be
-*        multiplied (by the forward transformation) or divided (by the
-*        inverse transformation). This factor may subsequently be
-*        changed via the ZoomMap's Zoom attribute. It may be positive
-*        or negative, but should not be zero.
-c     options
-f     OPTIONS = CHARACTER * ( * ) (Given)
-c        Pointer to a null-terminated string containing an optional
-c        comma-separated list of attribute assignments to be used for
-c        initialising the new ZoomMap. The syntax used is identical to
-c        that for the astSet function and may include "printf" format
-c        specifiers identified by "%" symbols in the normal way.
-f        A character string containing an optional comma-separated
-f        list of attribute assignments to be used for initialising the
-f        new ZoomMap. The syntax used is identical to that for the
-f        AST_SET routine.
-c     ...
-c        If the "options" string contains "%" format specifiers, then
-c        an optional list of additional arguments may follow it in
-c        order to supply values to be substituted for these
-c        specifiers. The rules for supplying these are identical to
-c        those for the astSet function (and for the C "printf"
-c        function).
-f     STATUS = INTEGER (Given and Returned)
-f        The global status.
-
-*  Returned Value:
-c     astZoomMap()
-f     AST_ZOOMMAP = INTEGER
-*        A pointer to the new ZoomMap.
-
-*  Notes:
-*     - A null Object pointer (AST__NULL) will be returned if this
-c     function is invoked with the AST error status set, or if it
-f     function is invoked with STATUS set to an error value, or if it
-*     should fail for any reason.
-
-*  Status Handling:
-*     The protected interface to this function includes an extra
-*     parameter at the end of the parameter list descirbed above. This
-*     parameter is a pointer to the integer inherited status
-*     variable: "int *status".
-
-*--
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstZoomMap *new;              /* Pointer to new ZoomMap */
-   va_list args;                 /* Variable argument list */
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the ZoomMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitZoomMap( NULL, sizeof( AstZoomMap ), !class_init, &class_vtab,
-                         "ZoomMap", ncoord, zoom );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new ZoomMap's attributes. */
-      va_start( args, status );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return a pointer to the new ZoomMap. */
-   return new;
-}
-
-AstZoomMap *astZoomMapId_( int ncoord, double zoom,
-                           const char *options, ... ) {
-/*
-*  Name:
-*     astZoomMapId_
-
-*  Purpose:
-*     Create a ZoomMap.
-
-*  Type:
-*     Private function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     AstZoomMap *astZoomMapId_( int ncoord, double zoom,
-*                                const char *options, ... )
-
-*  Class Membership:
-*     ZoomMap constructor.
-
-*  Description:
-*     This function implements the external (public) interface to the
-*     astZoomMap constructor function. It returns an ID value (instead
-*     of a true C pointer) to external users, and must be provided
-*     because astZoomMap_ has a variable argument list which cannot be
-*     encapsulated in a macro (where this conversion would otherwise
-*     occur).
-*
-*     The variable argument list also prevents this function from
-*     invoking astZoomMap_ directly, so it must be a re-implementation
-*     of it in all respects, except for the final conversion of the
-*     result to an ID value.
-
-*  Parameters:
-*     As for astZoomMap_.
-
-*  Returned Value:
-*     The ID value associated with the new ZoomMap.
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstZoomMap *new;              /* Pointer to new ZoomMap */
-   va_list args;                 /* Variable argument list */
-
-   int *status;                  /* Pointer to inherited status value */
-
-/* Get a pointer to the inherited status value. */
-   status = astGetStatusPtr;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(NULL);
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* Initialise the ZoomMap, allocating memory and initialising the
-   virtual function table as well if necessary. */
-   new = astInitZoomMap( NULL, sizeof( AstZoomMap ), !class_init, &class_vtab,
-                         "ZoomMap", ncoord, zoom );
-
-/* If successful, note that the virtual function table has been
-   initialised. */
-   if ( astOK ) {
-      class_init = 1;
-
-/* Obtain the variable argument list and pass it along with the options string
-   to the astVSet method to initialise the new ZoomMap's attributes. */
-      va_start( args, options );
-      astVSet( new, options, NULL, args );
-      va_end( args );
-
-/* If an error occurred, clean up by deleting the new object. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return an ID value for the new ZoomMap. */
-   return astMakeId( new );
-}
-
-AstZoomMap *astInitZoomMap_( void *mem, size_t size, int init,
-                             AstZoomMapVtab *vtab, const char *name,
-                             int ncoord, double zoom, int *status ) {
-/*
-*+
-*  Name:
-*     astInitZoomMap
-
-*  Purpose:
-*     Initialise a ZoomMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     AstZoomMap *astInitZoomMap( void *mem, size_t size, int init,
-*                                 AstZoomMapVtab *vtab, const char *name,
-*                                 int ncoord, double zoom )
-
-*  Class Membership:
-*     ZoomMap initialiser.
-
-*  Description:
-*     This function is provided for use by class implementations to initialise
-*     a new ZoomMap object. It allocates memory (if necessary) to accommodate
-*     the ZoomMap plus any additional data associated with the derived class.
-*     It then initialises a ZoomMap structure at the start of this memory. If
-*     the "init" flag is set, it also initialises the contents of a virtual
-*     function table for a ZoomMap at the start of the memory passed via the
-*     "vtab" parameter.
-
-*  Parameters:
-*     mem
-*        A pointer to the memory in which the ZoomMap is to be initialised.
-*        This must be of sufficient size to accommodate the ZoomMap data
-*        (sizeof(ZoomMap)) plus any data used by the derived class. If a value
-*        of NULL is given, this function will allocate the memory itself using
-*        the "size" parameter to determine its size.
-*     size
-*        The amount of memory used by the ZoomMap (plus derived class data).
-*        This will be used to allocate memory if a value of NULL is given for
-*        the "mem" parameter. This value is also stored in the ZoomMap
-*        structure, so a valid value must be supplied even if not required for
-*        allocating memory.
-*     init
-*        A logical flag indicating if the ZoomMap's virtual function table is
-*        to be initialised. If this value is non-zero, the virtual function
-*        table will be initialised by this function.
-*     vtab
-*        Pointer to the start of the virtual function table to be associated
-*        with the new ZoomMap.
-*     name
-*        Pointer to a constant null-terminated character string which contains
-*        the name of the class to which the new object belongs (it is this
-*        pointer value that will subsequently be returned by the astGetClass
-*        method).
-*     ncoord
-*        The number of coordinate values per point.
-*     zoom
-*        The scale factor by which coordinate values are multiplied (by the
-*        forward mapping) or divided (by the inverse mapping). This factor may
-*        not be zero.
-
-*  Returned Value:
-*     A pointer to the new ZoomMap.
-
-*  Notes:
-*     -  A null pointer will be returned if this function is invoked with the
-*     global error status set, or if it should fail for any reason.
-*-
-*/
-
-/* Local Variables: */
-   AstZoomMap *new;              /* Pointer to new ZoomMap */
-
-/* Check the global status. */
-   if ( !astOK ) return NULL;
-
-/* If necessary, initialise the virtual function table. */
-   if ( init ) astInitZoomMapVtab( vtab, name );
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the initialisation value(s) for validity, reporting an error if
-   necessary. Prefix the error report with the name of the function and the
-   class of object being processed. */
-   if ( zoom == 0.0 ) {
-      astError( AST__ZOOMI, "astInitZoomMap(%s): A zoom factor of zero is not "
-                "allowed.", status, name );
-   } else {
-
-/* Initialise a Mapping structure (the parent class) as the first component
-   within the ZoomMap structure, allocating memory if necessary. Specify that
-   the Mapping should be defined in both the forward and inverse directions. */
-      new = (AstZoomMap *) astInitMapping( mem, size, 0,
-                                           (AstMappingVtab *) vtab, name,
-                                           ncoord, ncoord, 1, 1 );
-
-      if ( astOK ) {
-
-/* Initialise the ZoomMap data. */
-/* ---------------------------- */
-/* Store the zoom factor. */
-         new->zoom = zoom;
-
-/* If an error occurred, clean up by deleting the new ZoomMap. */
-         if ( !astOK ) new = astDelete( new );
-      }
-   }
-
-/* Return a pointer to the new ZoomMap. */
-   return new;
-}
-
-AstZoomMap *astLoadZoomMap_( void *mem, size_t size,
-                             AstZoomMapVtab *vtab, const char *name,
-                             AstChannel *channel, int *status ) {
-/*
-*+
-*  Name:
-*     astLoadZoomMap
-
-*  Purpose:
-*     Load a ZoomMap.
-
-*  Type:
-*     Protected function.
-
-*  Synopsis:
-*     #include "zoommap.h"
-*     AstZoomMap *astLoadZoomMap( void *mem, size_t size,
-*                                 AstZoomMapVtab *vtab, const char *name,
-*                                 AstChannel *channel )
-
-*  Class Membership:
-*     ZoomMap loader.
-
-*  Description:
-*     This function is provided to load a new ZoomMap using data read
-*     from a Channel. It first loads the data used by the parent class
-*     (which allocates memory if necessary) and then initialises a
-*     ZoomMap structure in this memory, using data read from the input
-*     Channel.
-*
-*     If the "init" flag is set, it also initialises the contents of a
-*     virtual function table for a ZoomMap at the start of the memory
-*     passed via the "vtab" parameter.
-
-
-*  Parameters:
-*     mem
-*        A pointer to the memory into which the ZoomMap is to be
-*        loaded.  This must be of sufficient size to accommodate the
-*        ZoomMap data (sizeof(ZoomMap)) plus any data used by derived
-*        classes. If a value of NULL is given, this function will
-*        allocate the memory itself using the "size" parameter to
-*        determine its size.
-*     size
-*        The amount of memory used by the ZoomMap (plus derived class
-*        data).  This will be used to allocate memory if a value of
-*        NULL is given for the "mem" parameter. This value is also
-*        stored in the ZoomMap structure, so a valid value must be
-*        supplied even if not required for allocating memory.
-*
-*        If the "vtab" parameter is NULL, the "size" value is ignored
-*        and sizeof(AstZoomMap) is used instead.
-*     vtab
-*        Pointer to the start of the virtual function table to be
-*        associated with the new ZoomMap. If this is NULL, a pointer
-*        to the (static) virtual function table for the ZoomMap class
-*        is used instead.
-*     name
-*        Pointer to a constant null-terminated character string which
-*        contains the name of the class to which the new object
-*        belongs (it is this pointer value that will subsequently be
-*        returned by the astGetClass method).
-*
-*        If the "vtab" parameter is NULL, the "name" value is ignored
-*        and a pointer to the string "ZoomMap" is used instead.
-
-*  Returned Value:
-*     A pointer to the new ZoomMap.
-
-*  Notes:
-*     - A null pointer will be returned if this function is invoked
-*     with the global error status set, or if it should fail for any
-*     reason.
-*-
-*/
-
-/* Local Variables: */
-   astDECLARE_GLOBALS            /* Pointer to thread-specific global data */
-   AstZoomMap *new;              /* Pointer to the new ZoomMap */
-
-/* Initialise. */
-   new = NULL;
-
-/* Check the global error status. */
-   if ( !astOK ) return new;
-
-/* Get a pointer to the thread specific global data structure. */
-   astGET_GLOBALS(channel);
-
-/* If a NULL virtual function table has been supplied, then this is
-   the first loader to be invoked for this ZoomMap. In this case the
-   ZoomMap belongs to this class, so supply appropriate values to be
-   passed to the parent class loader (and its parent, etc.). */
-   if ( !vtab ) {
-      size = sizeof( AstZoomMap );
-      vtab = &class_vtab;
-      name = "ZoomMap";
-
-/* If required, initialise the virtual function table for this class. */
-      if ( !class_init ) {
-         astInitZoomMapVtab( vtab, name );
-         class_init = 1;
-      }
-   }
-
-/* Invoke the parent class loader to load data for all the ancestral
-   classes of the current one, returning a pointer to the resulting
-   partly-built ZoomMap. */
-   new = astLoadMapping( mem, size, (AstMappingVtab *) vtab, name,
-                         channel );
-
-   if ( astOK ) {
-
-/* Read input data. */
-/* ================ */
-/* Request the input Channel to read all the input data appropriate to
-   this class into the internal "values list". */
-      astReadClassData( channel, "ZoomMap" );
-
-/* Now read each individual data item from this list and use it to
-   initialise the appropriate instance variable(s) for this class. */
-
-/* In the case of attributes, we first read the "raw" input value,
-   supplying the "unset" value as the default. If a "set" value is
-   obtained, we then use the appropriate (private) Set... member
-   function to validate and set the value properly. */
-
-/* Zoom. */
-/* ----- */
-      new->zoom = astReadDouble( channel, "zoom", 0.0 );
-      if ( TestZoom( new, status ) ) SetZoom( new, new->zoom, status );
-
-/* If an error occurred, clean up by deleting the new ZoomMap. */
-      if ( !astOK ) new = astDelete( new );
-   }
-
-/* Return the new ZoomMap pointer. */
-   return new;
-}
-
-/* Virtual function interfaces. */
-/* ============================ */
-/* These provide the external interface to the virtual functions defined by
-   this class. Each simply checks the global error status and then locates and
-   executes the appropriate member function, using the function pointer stored
-   in the object's virtual function table (this pointer is located using the
-   astMEMBER macro defined in "object.h").
-
-   Note that the member function may not be the one defined here, as it may
-   have been over-ridden by a derived class. However, it should still have the
-   same interface. */
-
-
-
-
-
diff --git a/ast-5.3-1/zoommap.h b/ast-5.3-1/zoommap.h
deleted file mode 100644
index cb3ec08..0000000
--- a/ast-5.3-1/zoommap.h
+++ /dev/null
@@ -1,322 +0,0 @@
-#if !defined( ZOOMMAP_INCLUDED ) /* Include this file only once */
-#define ZOOMMAP_INCLUDED
-/*
-*+
-*  Name:
-*     zoommap.h
-
-*  Type:
-*     C include file.
-
-*  Purpose:
-*     Define the interface to the ZoomMap class.
-
-*  Invocation:
-*     #include "zoommap.h"
-
-*  Description:
-*     This include file defines the interface to the ZoomMap class and
-*     provides the type definitions, function prototypes and macros,
-*     etc.  needed to use this class.
-*
-*     The ZoomMap class implements Mappings which perform a "zoom"
-*     transformation by multiplying all coordinate values by the same
-*     scale factor (the inverse transformation is performed by
-*     dividing by this scale factor).
-
-*  Inheritance:
-*     The ZoomMap class inherits from the Mapping class.
-
-*  Attributes Over-Ridden:
-*     None.
-
-*  New Attributes Defined:
-*     Zoom (double)
-*        The ZoomMap scale factor, by which coordinate values are
-*        multiplied (by the forward transformation) or divided (by the
-*        inverse transformation). This factor is set when a ZoomMap is
-*        created, but may later be modified. It may not be set to
-*        zero. The default value (if cleared) is one.
-*
-*        Note that if the ZoomMap is inverted (by using astInvert or
-*        setting a non-zero value for its Invert attribute), then the
-*        reciprocal of this Zoom value will, in effect, be used.
-
-*  Methods Over-Ridden:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearAttrib
-*           Clear an attribute value for a ZoomMap.
-*        astGetAttrib
-*           Get an attribute value for a ZoomMap.
-*        astSetAttrib
-*           Set an attribute value for a ZoomMap.
-*        astTestAttrib
-*           Test if an attribute value has been set for a ZoomMap.
-*        astTransform
-*           Apply a ZoomMap to transform a set of points.
-
-*  New Methods Defined:
-*     Public:
-*        None.
-*
-*     Protected:
-*        astClearZoom
-*           Clear the Zoom attribute value for a ZoomMap.
-*        astGetZoom
-*           Get the Zoom attribute value for a ZoomMap.
-*        astSetZoom
-*           Set the Zoom attribute value for a ZoomMap.
-*        astTestZoom
-*           Test if a Zoom attribute value has been set for a ZoomMap.
-
-*  Other Class Functions:
-*     Public:
-*        astIsAZoomMap
-*           Test class membership.
-*        astZoomMap
-*           Create a ZoomMap.
-*
-*     Protected:
-*        astCheckZoomMap
-*           Validate class membership.
-*        astInitZoomMap
-*           Initialise a ZoomMap.
-*        astInitZoomMapVtab
-*           Initialise the virtual function table for the ZoomMap class.
-*        astLoadZoomMap
-*           Load a ZoomMap.
-
-*  Macros:
-*     None.
-
-*  Type Definitions:
-*     Public:
-*        AstZoomMap
-*           ZoomMap object type.
-*
-*     Protected:
-*        AstZoomMapVtab
-*           ZoomMap virtual function table type.
-
-*  Feature Test Macros:
-*     astCLASS
-*        If the astCLASS macro is undefined, only public symbols are
-*        made available, otherwise protected symbols (for use in other
-*        class implementations) are defined. This macro also affects
-*        the reporting of error context information, which is only
-*        provided for external calls to the AST library.
-
-*  Copyright:
-*     Copyright (C) 1997-2006 Council for the Central Laboratory of the
-*     Research Councils
-
-*  Licence:
-*     This program is free software; you can redistribute it and/or
-*     modify it under the terms of the GNU General Public Licence as
-*     published by the Free Software Foundation; either version 2 of
-*     the Licence, 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 Licence for more details.
-*     
-*     You should have received a copy of the GNU General Public Licence
-*     along with this program; if not, write to the Free Software
-*     Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA
-*     02111-1307, USA
-
-*  Authors:
-*     RFWS: R.F. Warren-Smith (Starlink)
-
-*  History:
-*     30-JAN-1996 (RFWS):
-*        Original version.
-*     18-JUL-1996 (RFWS):
-*        Updated to provide an external interface.
-*     10-SEP-1996 (RFWS):
-*        Added I/O facilities.
-*     8-JAN-2003 (DSB):
-*        Added protected astInitZoomMapVtab method.
-*-
-*/
-
-/* Include files. */
-/* ============== */
-/* Interface definitions. */
-/* ---------------------- */
-#include "mapping.h"             /* Coordinate mappings (parent class) */
-
-#if defined(astCLASS)            /* Protected */
-#include "channel.h"             /* I/O channels */
-#endif
-
-/* C header files. */
-/* --------------- */
-#if defined(astCLASS)            /* Protected */
-#include <stddef.h>
-#endif
-
-/* Macros */
-/* ====== */
-
-/* Define a dummy __attribute__ macro for use on non-GNU compilers. */
-#ifndef __GNUC__
-#  define  __attribute__(x)  /*NOTHING*/
-#endif
-
-/* Type Definitions. */
-/* ================= */
-/* ZoomMap structure. */
-/* ------------------ */
-/* This structure contains all information that is unique to each object in
-   the class (e.g. its instance variables). */
-typedef struct AstZoomMap {
-
-/* Attributes inherited from the parent class. */
-   AstMapping mapping;           /* Parent class structure */
-
-/* Attributes specific to objects in this class. */
-   double zoom;                  /* Zoom factor */
-} AstZoomMap;
-
-/* Virtual function table. */
-/* ----------------------- */
-/* This table contains all information that is the same for all
-   objects in the class (e.g. pointers to its virtual functions). */
-#if defined(astCLASS)            /* Protected */
-typedef struct AstZoomMapVtab {
-
-/* Properties (e.g. methods) inherited from the parent class. */
-   AstMappingVtab mapping_vtab;  /* Parent class virtual function table */
-
-/* A Unique identifier to determine class membership. */
-   AstClassIdentifier id;
-
-/* Properties (e.g. methods) specific to this class. */
-   double (*GetZoom)( AstZoomMap *, int * );
-   int (* TestZoom)( AstZoomMap *, int * );
-   void (* ClearZoom)( AstZoomMap *, int * );
-   void (* SetZoom)( AstZoomMap *, double, int * );
-} AstZoomMapVtab;
-
-
-#if defined(THREAD_SAFE) 
-
-/* Define a structure holding all data items that are global within this
-   class. */
-typedef struct AstZoomMapGlobals {
-   AstZoomMapVtab Class_Vtab;
-   int Class_Init;
-   char GetAttrib_Buff[ 101 ];
-} AstZoomMapGlobals;
-
-#endif
-
-#endif
-
-/* Function prototypes. */
-/* ==================== */
-/* Prototypes for standard class functions. */
-/* ---------------------------------------- */
-astPROTO_CHECK(ZoomMap)          /* Check class membership */
-astPROTO_ISA(ZoomMap)            /* Test class membership */
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-AstZoomMap *astZoomMap_( int, double, const char *, int *, ...);
-#else
-AstZoomMap *astZoomMapId_( int, double, const char *, ... )__attribute__((format(printf,3,4)));
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-AstZoomMap *astInitZoomMap_( void *, size_t, int, AstZoomMapVtab *,
-                             const char *, int, double, int * );
-
-/* Vtab initialiser. */
-void astInitZoomMapVtab_( AstZoomMapVtab *, const char *, int * );
-
-/* Loader. */
-AstZoomMap *astLoadZoomMap_( void *, size_t, AstZoomMapVtab *,
-                             const char *, AstChannel *, int * );
-
-/* Thread-safe initialiser for all global data used by this module. */
-#if defined(THREAD_SAFE) 
-void astInitZoomMapGlobals_( AstZoomMapGlobals * );
-#endif
-
-#endif
-
-/* Prototypes for member functions. */
-/* -------------------------------- */
-# if defined(astCLASS)           /* Protected */
-double astGetZoom_( AstZoomMap *, int * );
-int astTestZoom_( AstZoomMap *, int * );
-void astClearZoom_( AstZoomMap *, int * );
-void astSetZoom_( AstZoomMap *, double, int * );
-#endif
-
-/* Function interfaces. */
-/* ==================== */
-/* These macros are wrap-ups for the functions defined by this class
-   to make them easier to invoke (e.g. to avoid type mis-matches when
-   passing pointers to objects from derived classes). */
-
-/* Interfaces to standard class functions. */
-/* --------------------------------------- */
-/* Some of these functions provide validation, so we cannot use them
-   to validate their own arguments. We must use a cast when passing
-   object pointers (so that they can accept objects from derived
-   classes). */
-
-/* Check class membership. */
-#define astCheckZoomMap(this) astINVOKE_CHECK(ZoomMap,this,0)
-#define astVerifyZoomMap(this) astINVOKE_CHECK(ZoomMap,this,1)
-
-/* Test class membership. */
-#define astIsAZoomMap(this) astINVOKE_ISA(ZoomMap,this)
-
-/* Constructor. */
-#if defined(astCLASS)            /* Protected. */
-#define astZoomMap astINVOKE(F,astZoomMap_)
-#else
-#define astZoomMap astINVOKE(F,astZoomMapId_)
-#endif
-
-#if defined(astCLASS)            /* Protected */
-
-/* Initialiser. */
-#define astInitZoomMap(mem,size,init,vtab,name,ncoord,zoom) \
-astINVOKE(O,astInitZoomMap_(mem,size,init,vtab,name,ncoord,zoom,STATUS_PTR))
-
-/* Vtab Initialiser. */
-#define astInitZoomMapVtab(vtab,name) astINVOKE(V,astInitZoomMapVtab_(vtab,name,STATUS_PTR))
-/* Loader. */
-#define astLoadZoomMap(mem,size,vtab,name,channel) \
-astINVOKE(O,astLoadZoomMap_(mem,size,vtab,name,astCheckChannel(channel),STATUS_PTR))
-#endif
-
-/* Interfaces to public member functions. */
-/* -------------------------------------- */
-/* Here we make use of astCheckZoomMap to validate ZoomMap pointers
-   before use.  This provides a contextual error report if a pointer
-   to the wrong sort of Object is supplied. */
-
-#if defined(astCLASS)            /* Protected */
-#define astClearZoom(this) astINVOKE(V,astClearZoom_(astCheckZoomMap(this),STATUS_PTR))
-#define astGetZoom(this) astINVOKE(V,astGetZoom_(astCheckZoomMap(this),STATUS_PTR))
-#define astSetZoom(this,value) \
-astINVOKE(V,astSetZoom_(astCheckZoomMap(this),value,STATUS_PTR))
-#define astTestZoom(this) astINVOKE(V,astTestZoom_(astCheckZoomMap(this),STATUS_PTR))
-#endif
-#endif
-
-
-
-
-
diff --git a/debian/repack-dfsg.sh b/debian/repack-dfsg.sh
index 0917438..918b37d 100755
--- a/debian/repack-dfsg.sh
+++ b/debian/repack-dfsg.sh
@@ -26,7 +26,7 @@ cp $srcdir/tcl8.*/library/auto.tcl \
 
 for subdir in blt\* funtools\* sla tcl8.\* tcllib-\* tk8.\* tkimg\* \
               tktable\* tkcon-\* tclxml-\* wcssubs-\* xplrpc-\* xpa-\* \
-              zip-\* zlib-\* compilers ; do
+              zip-\* zlib-\* compilers ast-\* ; do
     rm -rf $srcdir/$subdir
 done
 

-- 
image display tool for astronomy



More information about the debian-science-commits mailing list